From 3567c5a566ceb0de991af5a1d53b3c259db1b244 Mon Sep 17 00:00:00 2001 From: Bryan Rumsey Date: Wed, 29 Apr 2020 18:30:38 -0400 Subject: [PATCH 1/5] Refactored the context menus so that common option are stored in one variable instead of repeated. Refactored the returns to return extended dictionaries using the new variables. Refactored some function to make them more generic. --- client/pages/file-browser.js | 945 ++++++++++++----------------------- 1 file changed, 329 insertions(+), 616 deletions(-) diff --git a/client/pages/file-browser.js b/client/pages/file-browser.js index 56effe0a4c..f1881df176 100644 --- a/client/pages/file-browser.js +++ b/client/pages/file-browser.js @@ -272,6 +272,13 @@ let FileBrowser = PageView.extend({ var self = this; var parentID = o.parent; var queryStr = "?path="+o.original._path + if(!type && o.original.type === 'folder'){ + type = "directory" + }else if(!type && o.original.type === 'workflow'){ + type = "workflow" + }else if(!type){ + type = "file" + } if(type === "directory"){ var identifier = "directory/duplicate" }else if(type === "workflow" || type === "wkfl_model"){ @@ -444,13 +451,25 @@ let FileBrowser = PageView.extend({ hideNameWarning: function () { $(this.queryByHook('rename-warning')).collapse('hide') }, - getExportData: function (o, isJSON, identifier, action, dataType) { + getExportData: function (o, asZip) { var self = this; + let nodeType = o.original.type + let isJSON = nodeType === "sbml-model" ? false : true + if(nodeType === "sbml-model"){ + var dataType = "plain-text" + var identifier = "file/download" + }else if(asZip) { + var dataType = "zip" + var identifier = "file/download-zip" + }else{ + var dataType = "json" + var identifier = "file/json-data" + } var queryStr = "?path="+o.original._path if(dataType === "json"){ queryStr = queryStr.concat("&for=None") }else if(dataType === "zip"){ - queryStr = queryStr.concat("&action="+action) + queryStr = queryStr.concat("&action=generate") } var endpoint = path.join(app.getApiPath(), identifier)+queryStr xhr({uri: endpoint, json: isJSON}, function (err, response, body) { @@ -578,647 +597,341 @@ let FileBrowser = PageView.extend({ setupJstree: function () { var self = this; $.jstree.defaults.contextmenu.items = (o, cb) => { - if (o.type === 'root'){ - return { - "Refresh" : { - "label" : "Refresh", - "_disabled" : false, - "_class" : "font-weight-bold", - "separator_before" : false, - "separator_after" : true, - "action" : function (data) { - self.refreshJSTree(); - } - }, - "New_Directory" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "label" : "New Directory", - "action" : function (data) { - self.newModelOrDirectory(o, false, false); - } - }, - "New_model" : { - "label" : "New Model", - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "submenu" : { - "spatial" : { - "label" : "Spatial", - "_disabled" : true, - "separator_before" : false, - "separator_after" : false, - "action" : function (data) { - - } - }, - "nonspatial" : { - "label" : "Non-Spatial", - "_disabled" : false, - "separator_before" : false, - "separator_after" : false, - "action" : function (data) { - self.newModelOrDirectory(o, true, false); - } - } - } - }, - "Upload" : { - "label" : "Upload File", - "_disabled" : false, - "separator_before" : false, - "separator_after" : false, - "submenu" : { - "Model" : { - "label" : "StochSS Model", - "_disabled" : false, - "separator_before" : false, - "separator_after" : false, - "action" : function (data) { - self.uploadFile(o, "model") - } - }, - "SBML" : { - "label" : "SBML Model", - "_disabled" : false, - "separator_before" : false, - "separator_after" : false, - "action" : function (data) { - self.uploadFile(o, "sbml") - } - }, - "File" : { - "label" : "File", - "_disabled" : false, - "separator_before" : false, - "separator_after" : false, - "action" : function (data) { - self.uploadFile(o, "file") - } - } + let nodeType = o.original.type + let asZip = (nodeType === "workflow" || nodeType === "folder" || nodeType === "other" || nodeType === "mesh") + // common to all type except root + let common = { + "Download" : { + "label" : asZip ? "Download as .zip" : "Download", + "_disabled" : false, + "separator_before" : true, + "separator_after" : false, + "action" : function (data) { + if(o.original.text.endsWith('.zip')){ + self.exportToZipFile(o); + }else{ + self.getExportData(o, asZip) } - }, + } + }, + "Rename" : { + "label" : "Rename", + "_disabled" : false, + "separator_before" : false, + "separator_after" : false, + "action" : function (data) { + self.renameNode(o); + } + }, + "Duplicate" : { + "label" : (nodeType === "workflow") ? "Duplicate as new" : "Duplicate", + "_disabled" : false, + "separator_before" : false, + "separator_after" : false, + "action" : function (data) { + self.duplicateFileOrDirectory(o, null) + } + }, + "Delete" : { + "label" : "Delete", + "_disabled" : false, + "separator_before" : false, + "separator_after" : false, + "action" : function (data) { + self.deleteFile(o); + } } } - else if (o.type === 'folder') { - return { - "Refresh" : { - "label" : "Refresh", - "_disabled" : false, - "_class" : "font-weight-bold", - "separator_before" : false, - "separator_after" : true, - "action" : function (data) { + // common to root and folders + let folder = { + "Refresh" : { + "label" : "Refresh", + "_disabled" : false, + "_class" : "font-weight-bold", + "separator_before" : false, + "separator_after" : true, + "action" : function (data) { + if(nodeType === "root"){ + self.refreshJSTree(); + }else{ $('#models-jstree').jstree().refresh_node(o); } - }, - "New_Directory" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "label" : "New Directory", - "action" : function (data) { - self.newModelOrDirectory(o, false, false); - } - }, - "New_model" : { - "label" : "New Model", - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "submenu" : { - "spatial" : { - "label" : "Spatial", - "_disabled" : true, - "separator_before" : false, - "separator_after" : false, - "action" : function (data) { - - } - }, - "nonspatial" : { - "label" : "Non-Spatial", - "_disabled" : false, - "separator_before" : false, - "separator_after" : false, - "action" : function (data) { - self.newModelOrDirectory(o, true, false); - } - } - } - }, - "Upload" : { - "label" : "Upload File", - "_disabled" : false, - "separator_before" : false, - "separator_after" : false, - "submenu" : { - "Model" : { - "label" : "StochSS Model", - "_disabled" : false, - "separator_before" : false, - "separator_after" : false, - "action" : function (data) { - self.uploadFile(o, "model") - } - }, - "SBML" : { - "label" : "SBML Model", - "_disabled" : false, - "separator_before" : false, - "separator_after" : false, - "action" : function (data) { - self.uploadFile(o, "sbml") - } - }, - "File" : { - "label" : "File", - "_disabled" : false, - "separator_before" : false, - "separator_after" : false, - "action" : function (data) { - self.uploadFile(o, "file") - } + } + }, + "New_Directory" : { + "label" : "New Directory", + "_disabled" : false, + "separator_before" : false, + "separator_after" : false, + "action" : function (data) { + self.newModelOrDirectory(o, false, false); + } + }, + "New_model" : { + "label" : "New Model", + "_disabled" : false, + "separator_before" : false, + "separator_after" : false, + "submenu" : { + "spatial" : { + "label" : "Spatial", + "_disabled" : true, + "separator_before" : false, + "separator_after" : false, + "action" : function (data) { + console.log("Spatial Models Coming Soon!") + } + }, + "nonspatial" : { + "label" : "Non-Spatial", + "_disabled" : false, + "separator_before" : false, + "separator_after" : false, + "action" : function (data) { + self.newModelOrDirectory(o, true, false); + } + } + } + }, + "Upload" : { + "label" : "Upload File", + "_disabled" : false, + "separator_before" : false, + "separator_after" : false, + "submenu" : { + "Model" : { + "label" : "StochSS Model", + "_disabled" : false, + "separator_before" : false, + "separator_after" : false, + "action" : function (data) { + self.uploadFile(o, "model") + } + }, + "SBML" : { + "label" : "SBML Model", + "_disabled" : false, + "separator_before" : false, + "separator_after" : false, + "action" : function (data) { + self.uploadFile(o, "sbml") + } + }, + "File" : { + "label" : "File", + "_disabled" : false, + "separator_before" : false, + "separator_after" : false, + "action" : function (data) { + self.uploadFile(o, "file") } } - }, - "Download" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "label" : "Download as .zip", - "action" : function (data) { - self.getExportData(o, true, "file/download-zip", "generate", "zip"); - } - }, - "Rename" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "label" : "Rename", - "action" : function (data) { - self.renameNode(o); - } - }, - "Duplicate" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "label" : "Duplicate", - "action" : function (data) { - self.duplicateFileOrDirectory(o, "directory") - } - }, - "Delete" : { - "label" : "Delete", - "_disabled" : false, - "separator_before" : false, - "separator_after" : false, - "action" : function (data) { - self.deleteFile(o); - } - }, + } } } - else if (o.type === 'spatial') { - return { - "Edit" : { - "separator_before" : false, - "separator_after" : true, - "_disabled" : true, - "_class" : "font-weight-bolder", - "label" : "Edit", - "action" : function (data) { - window.location.href = path.join(app.getBasePath(), "stochss/models/edit")+"?path="+o.original._path; - } - }, - "Convert" : { - "label" : "Convert", - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "submenu" : { - "Convert to Model" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "label" : "Convert to Non Spatial", - "action" : function (data) { - self.toModel(o, "Spatial"); - } - }, - "Convert to Notebook" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : true, - "label" : "Convert to Notebook", - "action" : function (data) { - } - }, - } - }, - "New Workflow" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : true, - "label" : "New Workflow", - "action" : function (data) { - window.location.href = path.join(app.getBasePath(), "stochss/workflow/selection")+"?path="+o.original._path; - } - }, - "Rename" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "label" : "Rename", - "action" : function (data) { - self.renameNode(o); - } - }, - "Duplicate" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "label" : "Duplicate", - "action" : function (data) { - self.duplicateFileOrDirectory(o, "model") - } - }, - "Delete" : { - "label" : "Delete", - "_disabled" : false, - "separator_before" : false, - "separator_after" : false, - "action" : function (data) { - self.deleteFile(o); - } - }, + // common to both spatial and non-spatial models + let model = { + "Edit" : { + "label" : "Edit", + "_disabled" : (nodeType === "spatial") ? true : false, + "_class" : "font-weight-bolder", + "separator_before" : false, + "separator_after" : true, + "action" : function (data) { + window.location.href = path.join(app.getBasePath(), "stochss/models/edit")+"?path="+o.original._path; + } + }, + "New Workflow" : { + "label" : "New Workflow", + "_disabled" : (nodeType === "spatial") ? true : false, + "separator_before" : false, + "separator_after" : false, + "action" : function (data) { + window.location.href = path.join(app.getBasePath(), "stochss/workflow/selection")+"?path="+o.original._path; + } } } - else if (o.type === 'nonspatial') { - return { - "Edit" : { - "separator_before" : false, - "separator_after" : true, - "_disabled" : false, - "_class" : "font-weight-bolder", - "label" : "Edit", - "action" : function (data) { - window.location.href = path.join(app.getBasePath(), "stochss/models/edit")+"?path="+o.original._path; - } - }, - "Convert" : { - "label" : "Convert", - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "submenu" : { - "Convert to Spatial" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : true, - "label" : "To Spatial Model", - "action" : function (data) { - self.toSpatial(o) - } - }, - "Convert to Notebook" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "label" : "To Notebook", - "action" : function (data) { - self.toNotebook(o) - } - }, - "Convert to SBML" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "label" : "To SBML Model", - "action" : function (data) { - self.toSBML(o) - } - }, - } - }, - "New Workflow" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "label" : "New Workflow", - "action" : function (data) { - window.location.href = path.join(app.getBasePath(), "stochss/workflow/selection")+"?path="+o.original._path; - } - }, - "Download" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "label" : "Download", - "action" : function (data) { - self.getExportData(o, true, "file/json-data", null, "json"); - } - }, - "Rename" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "label" : "Rename", - "action" : function (data) { - self.renameNode(o); - } - }, - "Duplicate" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "label" : "Duplicate", - "action" : function (data) { - self.duplicateFileOrDirectory(o, "model") - } - }, - "Delete" : { - "label" : "Delete", - "_disabled" : false, - "separator_before" : false, - "separator_after" : false, - "action" : function (data) { - self.deleteFile(o); + // convert options for spatial models + let spatialConvert = { + "Convert" : { + "label" : "Convert", + "_disabled" : false, + "separator_before" : false, + "separator_after" : false, + "submenu" : { + "Convert to Model" : { + "label" : "Convert to Non Spatial", + "_disabled" : false, + "separator_before" : false, + "separator_after" : false, + "action" : function (data) { + self.toModel(o, "Spatial"); + } + }, + "Convert to Notebook" : { + "label" : "Convert to Notebook", + "_disabled" : true, + "separator_before" : false, + "separator_after" : false, + "action" : function (data) { + } } - }, - } + } + } } - else if (o.type === 'workflow') { - var disabled = !(o.original._status === "ready") - return { - "Open" : { - "separator_before" : false, - "separator_after" : true, - "_disabled" : false, - "_class" : "font-weight-bolder", - "label" : "Open", - "action" : function (data) { - window.location.href = path.join(app.getBasePath(), "stochss/workflow/edit")+"?path="+o.original._path+"&type=none"; - } - }, - "Start/Restart Workflow" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : true, - "label" : "Start/Restart Workflow", - "action" : function (data) { - - } - }, - "Stop Workflow" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : true, - "label" : "Stop Workflow", - "action" : function (data) { - - } - }, - "Model" : { - "separator_before" : false, - "separator_after" : false, - "label" : "Model", - "_disabled" : false, - "submenu" : { - "Edit" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : disabled, - "label" : " Edit", - "action" : function (data) { - self.editWorkflowModel(o) - } - }, - "Extract" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "label" : "Extract", - "action" : function (data) { - self.duplicateFileOrDirectory(o, "wkfl_model") - } + // convert options for non-spatial models + let modelConvert = { + "Convert" : { + "label" : "Convert", + "_disabled" : false, + "separator_before" : false, + "separator_after" : false, + "submenu" : { + "Convert to Spatial" : { + "label" : "To Spatial Model", + "_disabled" : true, + "separator_before" : false, + "separator_after" : false, + "action" : function (data) { + self.toSpatial(o) + } + }, + "Convert to Notebook" : { + "label" : "To Notebook", + "_disabled" : false, + "separator_before" : false, + "separator_after" : false, + "action" : function (data) { + self.toNotebook(o) + } + }, + "Convert to SBML" : { + "label" : "To SBML Model", + "_disabled" : false, + "separator_before" : false, + "separator_after" : false, + "action" : function (data) { + self.toSBML(o) } } - }, - "Download" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "label" : "Download Full Workflow", - "action" : function (data) { - self.getExportData(o, true, "file/download-zip", "generate", "zip"); - } - }, - "Rename" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "label" : "Rename", - "action" : function (data) { - self.renameNode(o); - } - }, - "Duplicate" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "label" : "Duplicate as new", - "action" : function (data) { - self.duplicateFileOrDirectory(o, "workflow") - } - }, - "Delete" : { - "label" : "Delete", - "_disabled" : false, - "separator_before" : false, - "separator_after" : false, - "action" : function (data) { - self.deleteFile(o); - } - }, + } } } - else if (o.type === 'notebook') { - return { - "Open" : { - "separator_before" : false, - "separator_after" : true, - "_disabled" : false, - "_class" : "font-weight-bolder", - "label" : "Open", - "action" : function (data) { - window.open(path.join(app.getBasePath(), "notebooks", o.original._path)); - } - }, - "Download" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "label" : "Download", - "action" : function (data) { - self.getExportData(o, true, "file/json-data", null, "json"); - } - }, - "Rename" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "label" : "Rename", - "action" : function (data) { - self.renameNode(o); - } - }, - "Duplicate" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "label" : "Duplicate", - "action" : function (data) { - self.duplicateFileOrDirectory(o, "file") - } - }, - "Delete" : { - "label" : "Delete", - "_disabled" : false, - "separator_before" : false, - "separator_after" : false, - "action" : function (data) { - self.deleteFile(o); + // For notebooks, workflows, sbml models, and other files + let open = { + "Open" : { + "label" : "Open", + "_disabled" : false, + "_class" : "font-weight-bolder", + "separator_before" : false, + "separator_after" : true, + "action" : function (data) { + if(nodeType === "workflow"){ + window.location.href = path.join(app.getBasePath(), "stochss/workflow/edit")+"?path="+o.original._path+"&type=none"; + }else{ + if(nodeType === "notebook") { + var identifier = "notebooks" + }else if(nodeType === "sbml-model") { + var identifier = "edit" + }else{ + var identifier = "view" + } + window.open(path.join(app.getBasePath(), identifier, o.original._path)); } - }, + } } } - else if (o.type === 'sbml-model') { - return { - "Open" : { - "separator_before" : false, - "separator_after" : true, - "_disabled" : false, - "_class" : "font-weight-bolder", - "label" : "Open File", - "action" : function (data) { - var filePath = o.original._path - window.open(path.join(app.getBasePath(), "edit", filePath), '_blank') - } - }, - "Convert" : { - "label" : "Convert", - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "submenu" : { - "Convert to Model" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "label" : "To Model", - "action" : function (data) { - self.toModel(o, "SBML"); - } - }, - } - }, - "Download" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "label" : "Download", - "action" : function (data) { - self.getExportData(o, false, "file/download", null, "plain-text"); - } - }, - "Rename" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "label" : "Rename", - "action" : function (data) { - self.renameNode(o); - } - }, - "Duplicate" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "label" : "Duplicate", - "action" : function (data) { - self.duplicateFileOrDirectory(o, "file") - } - }, - "Delete" : { - "label" : "Delete", - "_disabled" : false, - "separator_before" : false, - "separator_after" : false, - "action" : function (data) { - self.deleteFile(o); + // specific to workflows + let workflow = { + "Start/Restart Workflow" : { + "label" : (o.original._status === "ready") ? "Start Workflow" : "Restart Workflow", + "_disabled" : true, + "separator_before" : false, + "separator_after" : false, + "action" : function (data) { + + } + }, + "Stop Workflow" : { + "label" : "Stop Workflow", + "_disabled" : true, + "separator_before" : false, + "separator_after" : false, + "action" : function (data) { + + } + }, + "Model" : { + "label" : "Model", + "_disabled" : false, + "separator_before" : false, + "separator_after" : false, + "submenu" : { + "Edit" : { + "label" : " Edit", + "_disabled" : !(o.original._status === "ready"), + "separator_before" : false, + "separator_after" : false, + "action" : function (data) { + self.editWorkflowModel(o) + } + }, + "Extract" : { + "label" : "Extract", + "_disabled" : false, + "separator_before" : false, + "separator_after" : false, + "action" : function (data) { + self.duplicateFileOrDirectory(o, "wkfl_model") + } } - }, + } } } - else { - return { - "Open" : { - "separator_before" : false, - "separator_after" : true, - "_disabled" : false, - "_class" : "font-weight-bolder", - "label" : "Open", - "action" : function (data) { - var openPath = path.join(app.getBasePath(), "view", o.original._path); - window.open(openPath, "_blank"); - } - }, - "Download" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "label" : "Download as .zip", - "action" : function (data) { - if(o.original.text.endsWith('.zip')){ - self.exportToZipFile(o); - }else{ - self.getExportData(o, true, "file/download-zip", "generate", "zip") + // Specific to sbml files + let sbml = { + "Convert" : { + "label" : "Convert", + "_disabled" : false, + "separator_before" : false, + "separator_after" : false, + "submenu" : { + "Convert to Model" : { + "label" : "To Model", + "_disabled" : false, + "separator_before" : false, + "separator_after" : false, + "action" : function (data) { + self.toModel(o, "SBML"); } } - }, - "Rename" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "label" : "Rename", - "action" : function (data) { - self.renameNode(o); - } - }, - "Duplicate" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, - "label" : "Duplicate", - "action" : function (data) { - self.duplicateFileOrDirectory(o, "file") - } - }, - "Delete" : { - "label" : "Delete", - "_disabled" : false, - "separator_before" : false, - "separator_after" : false, - "action" : function (data) { - self.deleteFile(o); - } - }, + } } } + if (o.type === 'root'){ + return folder + } + if (o.type === 'folder') { + return $.extend(folder, common) + } + if (o.type === 'spatial') { + return $.extend(model, spatialConvert, common) + } + if (o.type === 'nonspatial') { + return $.extend(model, modelConvert, common) + } + if (o.type === 'workflow') { + return $.extend(open, workflow, common) + } + if (o.type === 'notebook') { + return $.extend(open, common) + } + if (o.type === 'sbml-model') { + return $.extend(open, sbml, common) + } + if (o.type === "other") { + return $.extend(open, common) + } } $(document).on('shown.bs.modal', function (e) { $('[autofocus]', e.target).focus(); From 83dceea66f60962cb626dc0ea5cf0e22a16da86e Mon Sep 17 00:00:00 2001 From: Bryan Rumsey Date: Thu, 30 Apr 2020 11:05:19 -0400 Subject: [PATCH 2/5] Refactored the letUsChooseForYou function to test if the default mode is dynamic and the individual specie modes are all set to discrete and set the default mode to discrete if true. Updated the tooltip for the Choose For Me algorithm option. --- client/models/simulation-settings.js | 13 ++++++++++++- client/pages/file-browser.js | 5 +---- client/tooltips.js | 5 +++-- stochss-pkg/dist/stochss-common.bundle.js | 20 ++++++++++++++++---- 4 files changed, 32 insertions(+), 11 deletions(-) diff --git a/client/models/simulation-settings.js b/client/models/simulation-settings.js index 51cc43cb98..373f736b82 100644 --- a/client/models/simulation-settings.js +++ b/client/models/simulation-settings.js @@ -16,13 +16,24 @@ module.exports = State.extend({ }, letUsChooseForYou: function () { var defaultMode = this.parent.defaultMode; + if(defaultMode === "dynamic"){ + var species = this.parent.species + var discreteSpecies = species.filter(function (specie) { + console.log(specie.mode) + if(specie.mode === "discrete") + return specie + }); + if(discreteSpecies.length === species.length) + defaultMode = "discrete" + } var numEvents = this.parent.eventsCollection.length; var numRules = this.parent.rules.length; + var numFuncDef = this.parent.functionDefinitions.length; var tTol = this.tauTol var aTol = this.absoluteTol var rTol = this.relativeTol - if(numEvents || numRules || defaultMode !== 'discrete' || rTol !== 0.03 || aTol !== 0.03){ + if(numEvents || numRules || numFuncDef || rTol !== 1e-3 || aTol !== 1e-6 || defaultMode !== 'discrete'){ this.algorithm = "Hybrid-Tau-Leaping"; }else if(tTol !== 0.03){ this.algorithm = "Tau-Leaping"; diff --git a/client/pages/file-browser.js b/client/pages/file-browser.js index f1881df176..27eb022e87 100644 --- a/client/pages/file-browser.js +++ b/client/pages/file-browser.js @@ -923,15 +923,12 @@ let FileBrowser = PageView.extend({ if (o.type === 'workflow') { return $.extend(open, workflow, common) } - if (o.type === 'notebook') { + if (o.type === 'notebook' || o.type === "other") { return $.extend(open, common) } if (o.type === 'sbml-model') { return $.extend(open, sbml, common) } - if (o.type === "other") { - return $.extend(open, common) - } } $(document).on('shown.bs.modal', function (e) { $('[autofocus]', e.target).focus(); diff --git a/client/tooltips.js b/client/tooltips.js index 99fc18deef..fe6e8dc3d3 100644 --- a/client/tooltips.js +++ b/client/tooltips.js @@ -125,8 +125,9 @@ module.exports = { hybrid: "This hybrid deterministic-stochastic will produce a solution that is 'discrete-stochastic' for small population sizes and 'continuous-deterministic' "+ "for large population sizes.", - chooseForMe: "Hybrid will be chosen based on Event, Rules, and other SBML model components or if the model is represented as Concentration. Tau Leaping will be "+ - "chosen if the Tau Tolerance is changed to a value other than 0.03. SSA will be chosen if the model is represented as Population." + chooseForMe: "Hybrid will be selected based on Event, Rules, and other SBML model components or if the model is represented as Concentration or Hybrid "+ + "Concentration/Population. If the model is represented as population, the SSA will be selected. This can be modified to a Tau-Leaping algorithm by "+ + "changing the au-tolerance value from the default of 0.03." }, parameterSweepSettings: { sweepType: "The number of parameters to sweep through.", diff --git a/stochss-pkg/dist/stochss-common.bundle.js b/stochss-pkg/dist/stochss-common.bundle.js index 0ee3c0bf6a..611d4b6238 100644 --- a/stochss-pkg/dist/stochss-common.bundle.js +++ b/stochss-pkg/dist/stochss-common.bundle.js @@ -1115,13 +1115,24 @@ module.exports = State.extend({ }, letUsChooseForYou: function () { var defaultMode = this.parent.defaultMode; + if(defaultMode === "dynamic"){ + var species = this.parent.species + var discreteSpecies = species.filter(function (specie) { + console.log(specie.mode) + if(specie.mode === "discrete") + return specie + }); + if(discreteSpecies.length === species.length) + defaultMode = "discrete" + } var numEvents = this.parent.eventsCollection.length; var numRules = this.parent.rules.length; + var numFuncDef = this.parent.functionDefinitions.length; var tTol = this.tauTol var aTol = this.absoluteTol var rTol = this.relativeTol - if(numEvents || numRules || defaultMode !== 'discrete' || rTol !== 0.03 || aTol !== 0.03){ + if(numEvents || numRules || numFuncDef || rTol !== 1e-3 || aTol !== 1e-6 || defaultMode !== 'discrete'){ this.algorithm = "Hybrid-Tau-Leaping"; }else if(tTol !== 0.03){ this.algorithm = "Tau-Leaping"; @@ -1666,8 +1677,9 @@ module.exports = { hybrid: "This hybrid deterministic-stochastic will produce a solution that is 'discrete-stochastic' for small population sizes and 'continuous-deterministic' "+ "for large population sizes.", - chooseForMe: "Hybrid will be chosen based on Event, Rules, and other SBML model components or if the model is represented as Concentration. Tau Leaping will be "+ - "chosen if the Tau Tolerance is changed to a value other than 0.03. SSA will be chosen if the model is represented as Population." + chooseForMe: "Hybrid will be selected based on Event, Rules, and other SBML model components or if the model is represented as Concentration or Hybrid "+ + "Concentration/Population. If the model is represented as population, the SSA will be selected. This can be modified to a Tau-Leaping algorithm by "+ + "changing the au-tolerance value from the default of 0.03." }, parameterSweepSettings: { sweepType: "The number of parameters to sweep through.", @@ -57943,4 +57955,4 @@ function extend() { /***/ }) }]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvYXBwLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9saWIvcGxvdGx5LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RhbHMuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9ldmVudC1hc3NpZ25tZW50LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvZXZlbnQtYXNzaWdubWVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9ldmVudC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbW9kZWxzL2V2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbW9kZWxzL2Z1bmN0aW9uLWRlZmluaXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9mdW5jdGlvbi1kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbW9kZWxzL2luaXRpYWwtY29uZGl0aW9uLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvaW5pdGlhbC1jb25kaXRpb25zLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvbWVzaC1zZXR0aW5ncy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbW9kZWxzL21vZGVsLXNldHRpbmdzLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvbW9kZWwuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9wYXJhbWV0ZXItc3dlZXAtc2V0dGluZ3MuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9wYXJhbWV0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9wYXJhbWV0ZXJzLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvcmVhY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9yZWFjdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9ydWxlLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvcnVsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9zaW11bGF0aW9uLXNldHRpbmdzLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvc3BlY2llLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvc3BlY2llcy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbW9kZWxzL3N0b2ljaC1zcGVjaWUuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9zdG9pY2gtc3BlY2llcy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbW9kZWxzL3N1YmRvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbW9kZWxzL3N1YmRvbWFpbnMuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3BhZ2UtaGVscC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvcGFnZXMvYmFzZS5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvcGFnZXMvcGFnZS5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc3R5bGVzL2Jvb3RzdHJhcC5jc3M/MmM5OSIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc3R5bGVzL3N0eWxlcy5jc3M/OGU4OCIsIndlYnBhY2s6Ly8vLi9jbGllbnQvdGVtcGxhdGVzL3BhZ2VzL2hvbWUucHVnIiwid2VicGFjazovLy8uL2NsaWVudC90b29sdGlwcy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvdmlld3MvaW5wdXQuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3ZpZXdzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3ZpZXdzL3Rlc3RzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtZnJlZS9jc3Mvc3ZnLXdpdGgtanMubWluLmNzcz82NWJiIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hbXBlcnNhbmQtYXBwL2FtcGVyc2FuZC1hcHAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FtcGVyc2FuZC1jbGFzcy1leHRlbmQvYW1wZXJzYW5kLWNsYXNzLWV4dGVuZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLWNvbGxlY3Rpb24tdmlldy9hbXBlcnNhbmQtY29sbGVjdGlvbi12aWV3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hbXBlcnNhbmQtY29sbGVjdGlvbi9hbXBlcnNhbmQtY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLWRvbS1iaW5kaW5ncy9hbXBlcnNhbmQtZG9tLWJpbmRpbmdzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hbXBlcnNhbmQtZG9tL2FtcGVyc2FuZC1kb20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FtcGVyc2FuZC1ldmVudHMvYW1wZXJzYW5kLWV2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLWV2ZW50cy9saWJzL3V0aWxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hbXBlcnNhbmQtaW5wdXQtdmlldy9hbXBlcnNhbmQtaW5wdXQtdmlldy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLW1vZGVsL2FtcGVyc2FuZC1tb2RlbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLXNlbGVjdC12aWV3L2FtcGVyc2FuZC1zZWxlY3Qtdmlldy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLXN0YXRlL2FtcGVyc2FuZC1zdGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLXN5bmMvYW1wZXJzYW5kLXN5bmMtYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLXN5bmMvY29yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLXZpZXctc3dpdGNoZXIvYW1wZXJzYW5kLXZpZXctc3dpdGNoZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FtcGVyc2FuZC12aWV3L2FtcGVyc2FuZC12aWV3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hcnJheS1uZXh0L2FycmF5LW5leHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9kaXN0L2pzL2Jvb3RzdHJhcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xvc2VzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xvc2VzdC9ub2RlX21vZHVsZXMvbWF0Y2hlcy1zZWxlY3Rvci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29tcG9uZW50LWV2ZW50L2luZGV4LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9zdHlsZXMvYm9vdHN0cmFwLmNzcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc3R5bGVzL3N0eWxlcy5jc3MiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1mcmVlL2Nzcy9zdmctd2l0aC1qcy5taW4uY3NzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RlZmluZS1wcm9wZXJ0aWVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZWxlZ2F0ZS1ldmVudHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RvbWlmeS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZG9tcmVhZHkvcmVhZHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvZXM1LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL2Fzc2VydFJlY29yZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc05hTi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9tb2QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtdG8tcHJpbWl0aXZlL2VzNS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtdG8tcHJpbWl0aXZlL2hlbHBlcnMvaXNQcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2V2ZW50cy1taXhpbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZm9yLWVhY2gvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW1wbGVtZW50YXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2dsb2JhbC93aW5kb3cuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2lzLWNhbGxhYmxlL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pcy1mdW5jdGlvbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvanF1ZXJ5L2Rpc3QvanF1ZXJ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9rYXRleC9kaXN0L2thdGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9rZXktdHJlZS1zdG9yZS9rZXktdHJlZS1zdG9yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9jYWwtbGlua3MvbG9jYWwtbGlua3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fRGF0YVZpZXcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fSGFzaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MYXp5V3JhcHBlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MaXN0Q2FjaGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTG9kYXNoV3JhcHBlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwQ2FjaGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fUHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0Q2FjaGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3RhY2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1VpbnQ4QXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fV2Vha01hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlGaWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlJbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUluY2x1ZGVzV2l0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUxpa2VLZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5UHVzaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVNvbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNjaWlUb0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc2lnblZhbHVlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc29jSW5kZXhPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25Jbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduVmFsdWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUNsb25lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZURpZmZlcmVuY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZpbmRJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRmxhdHRlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRm9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGb3JPd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0QWxsS2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VIYXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUhhc0luLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJbmRleE9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJbnZva2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzQXJndW1lbnRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0RhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzRXF1YWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzRXF1YWxEZWVwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc01hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNNYXRjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYU4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1NldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJdGVyYXRlZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VMb2Rhc2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1hdGNoZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1hdGNoZXNQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUGljay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUGlja0J5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUHJvcGVydHlEZWVwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VQcm9wZXJ0eU9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VSZXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldERhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTbGljZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVGltZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5pcS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5zZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYWNoZUhhcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYXN0RnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FzdFBhdGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVBcnJheUJ1ZmZlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUJ1ZmZlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZURhdGFWaWV3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lUmVnRXhwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lU3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lVHlwZWRBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb21wb3NlQXJncy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb21wb3NlQXJnc1JpZ2h0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcHlBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5T2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcHlTeW1ib2xzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcHlTeW1ib2xzSW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29yZUpzRGF0YS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3VudEhvbGRlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQXNzaWduZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQmFzZUVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQmFzZUZvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQ3VycnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlRmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVIeWJyaWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlUGFydGlhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVSZWN1cnJ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZVNldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVXcmFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2N1c3RvbU9taXRDbG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbEFycmF5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbEJ5VGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2VxdWFsT2JqZWN0cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lc2NhcGVIdG1sQ2hhci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mbGF0UmVzdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0QWxsS2V5c0luLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldERhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0RnVuY05hbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0SG9sZGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hcERhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWF0Y2hEYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE5hdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRQcm90b3R5cGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0U3ltYm9sc0luLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFRhZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRWYWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRXcmFwRGV0YWlscy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNQYXRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc1VuaWNvZGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaENsZWFyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hEZWxldGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEdldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoSGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hTZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lQnlUYWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2luc2VydFdyYXBEZXRhaWxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzRmxhdHRlbmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0l0ZXJhdGVlQ2FsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNMYXppYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc01hc2tlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1Byb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1N0cmljdENvbXBhcmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXRlcmF0b3JUb0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUNsZWFyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlRGVsZXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlR2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlSGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlU2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWVtb2l6ZUNhcHBlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tZXJnZURhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWV0YU1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVDcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlS2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzSW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbm9kZVV0aWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb2JqZWN0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyUmVzdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19wYXJlbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcmVhbE5hbWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jlb3JkZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcmVwbGFjZUhvbGRlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcm9vdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUFkZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUhhcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXREYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0V3JhcFRvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Nob3J0T3V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrQ2xlYXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tEZWxldGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tHZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tIYXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tTZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RyaWN0SW5kZXhPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdHJpbmdUb0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1RvUGF0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b1NvdXJjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL191bmljb2RlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL191cGRhdGVXcmFwRGV0YWlscy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL193cmFwcGVyQ2xvbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9iZWZvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvY2xvbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9jb25zdGFudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2RlZmF1bHRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZGlmZmVyZW5jZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VxLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXNjYXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2ZpbmRJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2ZsYXR0ZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9mb3JFYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZm9yT3duLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZ2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaGFzSW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2luY2x1ZGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaW52b2tlTWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZU9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQnVmZmVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNEYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNFbXB0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRXF1YWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc01hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNQbGFpbk9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzVHlwZWRBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzSW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9sYXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbWVtb2l6ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL25vb3AuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9vbWl0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvb25jZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL3BhcnRpYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9waWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9yZXN1bHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViRmFsc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9GaW5pdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b0ludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b051bWJlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdW5pb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC91bmlxdWVJZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL3ZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL3dyYXBwZXJMb2Rhc2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21hdGNoZXMtc2VsZWN0b3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21lZGlhLXR5cGUvbGliL21lZGlhVHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbm9kZS1saWJzLWJyb3dzZXIvbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL29iamVjdC1rZXlzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGFyc2UtaGVhZGVycy9wYXJzZS1oZWFkZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3BvcHBlci5qcy9kaXN0L2VzbS9wb3BwZXIuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3RlbXBsYXRlcy9ib2R5LnB1ZyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvdGVtcGxhdGVzL2hlYWQucHVnIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wdWctcnVudGltZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcXMvbGliL2Zvcm1hdHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3FzL2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcXMvbGliL3BhcnNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9xcy9saWIvc3RyaW5naWZ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9xcy9saWIvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUudHJpbS9pbXBsZW1lbnRhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS50cmltL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zdHJpbmcucHJvdG90eXBlLnRyaW0vcG9seWZpbGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUudHJpbS9zaGltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi91cmxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL3VuZGVyc2NvcmUuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vbW9kdWxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy94aHIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3h0ZW5kL2ltbXV0YWJsZS5qcyIsIndlYnBhY2s6Ly8vZnMgKGlnbm9yZWQpIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0EsV0FBVyxtQkFBTyxDQUFDLHFEQUFNOztBQUV6QjtBQUNB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QixFQUFFLDZCQUE2QixFQUFFLDRCQUE0QixFQUFFLDZCQUE2QixFQUFFLDBCQUEwQixXQUFXLHNCQUFzQixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDZCQUE2QixFQUFFLDRCQUE0QixFQUFFLDZCQUE2QixFQUFFLDBCQUEwQixXQUFXLHVCQUF1QixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixFQUFFLDZCQUE2QixFQUFFLDBCQUEwQixZQUFZLHNCQUFzQixFQUFFLHNCQUFzQixTQUFTLHVCQUF1QixFQUFFLDRCQUE0QixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLHdCQUF3QixXQUFXLHNCQUFzQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLHNCQUFzQixZQUFZLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLHNCQUFzQixhQUFhLHdCQUF3QixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLHdCQUF3QixjQUFjLG9CQUFvQixFQUFFLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixVQUFVLHNCQUFzQixFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixhQUFhLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixVQUFVLDRCQUE0QixFQUFFLDRCQUE0QixZQUFZLHNCQUFzQixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLHlCQUF5QixZQUFZLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixVQUFVLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDRCQUE0QixFQUFFLDBCQUEwQixXQUFXLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLHlCQUF5QixTQUFTLHdCQUF3QixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLHdCQUF3QixTQUFTLHdCQUF3QixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixFQUFFLHdCQUF3QixtQkFBbUIsd0JBQXdCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUsd0JBQXdCLEVBQUUseUJBQXlCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUsd0JBQXdCLGVBQWUsdUJBQXVCLEVBQUUseUJBQXlCLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsMEJBQTBCLFNBQVMsdUJBQXVCLEVBQUUseUJBQXlCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsMkJBQTJCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsMEJBQTBCLGdCQUFnQix1QkFBdUIsRUFBRSx5QkFBeUIsRUFBRSx5QkFBeUIsRUFBRSwwQkFBMEIsRUFBRSx5QkFBeUIsRUFBRSwwQkFBMEIsRUFBRSw0QkFBNEIsRUFBRSw0QkFBNEIsRUFBRSwwQkFBMEIsWUFBWSx1QkFBdUIsRUFBRSx5QkFBeUIsRUFBRSwyQkFBMkIsRUFBRSwyQkFBMkIsRUFBRSwyQkFBMkIsRUFBRSw0QkFBNEIsRUFBRSw0QkFBNEIsRUFBRSw0QkFBNEIsRUFBRSwwQkFBMEIsdUJBQXVCLHVCQUF1QixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixFQUFFLDBCQUEwQixzQkFBc0Isc0JBQXNCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsMEJBQTBCLFdBQVcscUJBQXFCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLFFBQVEsdUJBQXVCLEVBQUUseUJBQXlCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUseUJBQXlCLFVBQVUseUJBQXlCLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLGFBQWEsd0JBQXdCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVB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QTtBQUNBLHFCQUFxQjtBQUNyQixpQkFBaUI7QUFDakI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ2pSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Es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QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFD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QzFFLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLFlBQVk7QUFDM0M7O0FBRUE7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRDQUE0QyxXQUFXO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFFQUFxRSxTQUFTO0FBQzlFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLHlDQUF5QztBQUNwRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsOEJBQThCLFlBQVk7QUFDMUM7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7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QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxTQUFTLDZCQUE2QjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUNBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4Qjs7QUFFOUIsK0JBQStCOztBQUUvQixtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOzs7QUFHTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG1EQUFtRDs7QUFFbkQ7QUFDQTtBQUNBLE9BQU87OztBQUdQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsc0NBQXNDOztBQUV0QztBQUNBLG9DQUFvQztBQUNwQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG1DQUFtQzs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQSwyQ0FBMkMsU0FBUztBQUNwRDs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsOENBQThDLFNBQVM7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLHdCQUF3QjtBQUMvQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSwrQkFBK0I7QUFDL0IsNkNBQTZDOztBQUU3QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0MsNkVBQTZFOztBQUVuSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7O0FBRTFCLHlCQUF5Qjs7QUFFekIsc0JBQXNCOztBQUV0Qiw0QkFBNEI7O0FBRTVCLDhCQUE4Qjs7QUFFOUIsbUNBQW1DOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7OztBQUdMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87OztBQUdQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVCxvREFBb0Q7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMkNBQTJDOztBQUUzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHlDQUF5QywwRUFBMEU7QUFDbkg7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLDJDQUEyQyxTQUFTO0FBQ3BEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qjs7QUFFNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPOztBQUVQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdHQUFnRzs7QUFFaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLEVBQUU7O0FBRVg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLEVBQUU7O0FBRVg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sRUFBRTs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTyxFQUFFOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHNDQUFzQywrRUFBK0U7O0FBRXJIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx5RUFBeUU7O0FBRXpFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7O0FBRUw7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1SUFBdUk7O0FBRXZJO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSyxFQUFFOztBQUVQLHNDQUFzQyxPQUFPO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUEsMENBQTBDLFNBQVM7QUFDbkQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7O0FBRTFCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7OztBQUdMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULDBDQUEwQztBQUMxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMkNBQTJDO0FBQzNDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSx5Q0FBeUMsd0VBQXdFO0FBQ2pIO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsV0FBVztBQUNYO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCwrQkFBK0IsOEZBQThGOztBQUU3SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgsc0NBQXNDO0FBQ3RDO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlDQUF5Qzs7QUFFekM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0EsS0FBSzs7O0FBR0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLCtCQUErQiwrREFBK0Q7O0FBRTlGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsZ0NBQWdDLEtBQUs7QUFDckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxPQUFPOztBQUVQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLDJDQUEyQztBQUMzQzs7QUFFQSx3SUFBd0k7O0FBRXhJO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQSxrQ0FBa0MsS0FBSztBQUN2Qzs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7O0FBR0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLCtCQUErQix3RkFBd0Y7QUFDdkg7QUFD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OztBQUdBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLFlBQVk7O0FBRXBCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRixvQkFBb0I7O0FBRXBCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQSxrQkFBa0Isa0NBQWtDO0FBQ3BELEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVSxZQUFZO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLFNBQVM7QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTLFlBQVk7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLFlBQVk7QUFDdEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxTQUFTO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBLGdCQUFnQixJQUFJOztBQUVwQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSx3Q0FBd0MsSUFBSTtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7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RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLGNBQWM7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLGdDQUFnQyxNQUFNO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLGVBQWU7O0FBRWYsU0FBUzs7QUFFVDtBQUNBLFFBQVEsaUNBQWlDO0FBQ3pDLFFBQVEsb0JBQW9CO0FBQzVCLFFBQVEsc0NBQXNDO0FBQzlDLFFBQVE7QUFDUixFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsYUFBYSxFQUFFO0FBQy9CO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSw0REFBNEQ7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBLHlDQUF5Qzs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkRBQTZEOztBQUU3RDtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0VBQWdFOztBQUVoRTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7O0FBRTdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsaUVBQWlFLFVBQVU7QUFDM0Usc0NBQXNDLDJCQUEyQjtBQUNqRTtBQUNBLGdDQUFnQyxNQUFNO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLFVBQVUsWUFBWTtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxVQUFVLFlBQVk7QUFDdEI7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLFVBQVU7QUFDcEI7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsVUFBVSxjQUFjO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0EsWUFBWSx1RUFBdUU7QUFDbkY7QUFDQTtBQUNBLFlBQVksNEJBQTRCO0FBQ3hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsU0FBUztBQUNqQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLDJEQUEyRDs7QUFFM0Q7QUFDQTtBQUNBLG9GQUFvRjs7QUFFcEY7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUEsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUSxTQUFTO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLFNBQVM7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgsUUFBUSxTQUFTO0FBQ2pCO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxpREFBaUQ7QUFDeEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpREFBaUQ7QUFDakQsVUFBVSx3Q0FBd0M7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsTUFBTTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTs7QUFFQSxDQUFDOzs7O0FBSUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUEsUUFBUSxHQUFHO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7Ozs7QUFJQTs7QUFFQTs7QUFFQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCLFNBQVM7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7O0FBRUEsY0FBYyxTQUFTO0FBQ3ZCO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVSxPQUFPO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVLE9BQU87QUFDakIsMEJBQTBCLHdCQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsMENBQTBDO0FBQzFDLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjs7QUFFbkI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVSxjQUFjO0FBQ3hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7QUFFUjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsd0NBQXdDLHNDQUFzQztBQUM5RSxvQ0FBb0MsdUNBQXVDO0FBQzNFLG9DQUFvQyxzQ0FBc0M7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixPQUFPO0FBQ1A7QUFDQSxNQUFNO0FBQ04sS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVc7O0FBRVg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTs7QUFFVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7O0FBRVg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7O0FBRVI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9DQUFvQztBQUNwQyxxQ0FBcUM7QUFDckMsb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7Ozs7O0FBS0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVSxTQUFTO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsYUFBYTtBQUNwQyxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixTQUFTO0FBQzdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osR0FBRztBQUNILEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBOzs7QUFHQTs7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUSxnQkFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLGdCQUFnQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEOztBQUVBOztBQUVBOzs7O0FBSUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxFQUFFO0FBQ0Y7O0FBRUEsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEsT0FBTztBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxzQkFBc0I7O0FBRXRCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLE9BQU87QUFDZjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxnQkFBZ0I7QUFDbEI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFdBQVc7O0FBRVg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BEOztBQUVBO0FBQ0E7O0FBRUEsY0FBYyxzQkFBc0I7QUFDcEM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsK0RBQStEO0FBQy9EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsVUFBVSxjQUFjOztBQUV4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG1CQUFtQjtBQUNwQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLHVDQUF1QztBQUNqRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsdURBQXVEO0FBQzlFOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLCtDQUErQztBQUNwRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQ0FBcUMsY0FBYztBQUNuRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQsY0FBYyxxQ0FBcUM7QUFDbkQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGLENBQUM7OztBQUdEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSwrREFBK0Q7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsUUFBUSxPQUFPOztBQUVmO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBOztBQUVBLFVBQVUsT0FBTztBQUNqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFdBQVcsU0FBUztBQUNwQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXOztBQUVYO0FBQ0E7QUFDQTtBQUNBLFFBQVEsT0FBTztBQUNmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxnQkFBZ0I7QUFDeEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLGlEQUFpRCwwQkFBMEI7QUFDM0U7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLGdCQUFnQjtBQUMxQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBOztBQUVBLDZDQUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUEsUUFBUSxnQkFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLGdCQUFnQjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQSxpRUFBaUU7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQixjQUFjO0FBQ2xDLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlEQUFpRDs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0IsU0FBUztBQUN4QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwrQkFBK0IsU0FBUztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLGdCQUFnQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsa0JBQWtCO0FBQzVCLFdBQVcsa0JBQWtCO0FBQzdCLGNBQWM7QUFDZCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLFFBQVEsbUJBQW1CO0FBQzNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7O0FBS0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7O0FBS0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOzs7OztBQUtEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUEsaUNBQWlDO0FBQ2pDO0FBQ0E7O0FBRUEsSUFBSTtBQUNKOztBQUVBLElBQUk7QUFDSjtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBLFdBQVcsU0FBUztBQUNwQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7QUFLRDs7O0FBR0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsOENBQThDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkNBQTJDO0FBQzNDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxLQUFLO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpREFBaUQ7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxQ0FBcUM7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7O0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVILEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLEtBQUs7QUFDTDs7QUFFQSxXQUFXO0FBQ1gsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7O0FBRWhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7O0FBRWhCLGdEQUFnRDtBQUNoRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQjtBQUNuQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3REFBd0Q7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCO0FBQ2pCLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCOztBQUUzQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0NBQWtDOztBQUVsQztBQUNBLHNCQUFzQjtBQUN0QiwyQkFBMkI7O0FBRTNCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRDtBQUN0RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTs7QUFFUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBLG1EQUFtRDtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdUJBQXVCO0FBQ2xDLFdBQVcseUJBQXlCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7OztBQUtEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CLGFBQWEsdUNBQXVDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7O0FBS0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7OztBQUtEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsSUFBSTtBQUNKLEdBQUc7QUFDSDs7QUFFQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7O0FBS0Q7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EscURBQXFEO0FBQ3JEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQjs7QUFFbkI7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7O0FBRUQ7QUFDQSxjQUFjLHNEQUFzRDtBQUNwRTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBLGNBQWMsbUNBQW1DO0FBQ2pELGVBQWUsNkRBQTZEO0FBQzVFOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxFQUFFO0FBQ0YsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7O0FBS0Q7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLLElBQTBDO0FBQy9DLENBQUMs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QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUMsR0FBRztBQUNKOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWixzTkFBc047O0FBRXROO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUVBQXVFO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQix1QkFBdUI7QUFDeEM7O0FBRUEsb0JBQW9CLDJCQUEyQjtBQUMvQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixzQkFBc0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUNBQXlDOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsS0FBSztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLFVBQVUsUUFBUTtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsMEJBQTBCO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0I7O0FBRXBCLG1CQUFtQiwwQkFBMEI7QUFDN0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLDZDQUE2Qzs7QUFFN0MsNkNBQTZDOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSCxpQkFBaUIsMEJBQTBCO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSw2QkFBNkI7O0FBRTdCO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQSxxRUFBcUU7QUFDckU7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0I7O0FBRWhCLGlCQUFpQiwwQkFBMEI7QUFDM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qjs7QUFFNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSx3RUFBd0U7O0FBRXhFOztBQUVBO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzREFBc0Q7O0FBRXREO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxvREFBb0Q7QUFDcEQ7O0FBRUE7QUFDQTtBQUNBLHVFQUF1RTtBQUN2RTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHNEQUFzRDs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsMEJBQTBCO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHdCQUF3Qjs7QUFFeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxtQkFBbUIsMEJBQTBCO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9COztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSx1REFBdUQ7O0FBRXZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsUUFBUSxZQUFZLFFBQVEsT0FBTyxTQUFTO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFFQUFxRTtBQUNyRTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLE1BQU07QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEI7O0FBRTFCO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBEOztBQUUxRDtBQUNBLDZEQUE2RDs7QUFFN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFOztBQUV2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0VBQStFOztBQUUvRTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7O0FBRTNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2RUFBNkU7O0FBRTdFLGdFQUFnRTs7QUFFaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0U7O0FBRWhFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0VBQWdFOztBQUVoRTtBQUNBO0FBQ0Esc0VBQXNFOztBQUV0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRDs7QUFFMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBFQUEwRTs7QUFFMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRkFBaUY7O0FBRWpGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3RUFBd0U7O0FBRXhFO0FBQ0E7QUFDQTtBQUNBLDBFQUEwRTs7QUFFMUU7QUFDQTtBQUNBLDRFQUE0RTs7QUFFNUU7QUFDQSx5RUFBeUU7O0FBRXpFO0FBQ0E7QUFDQTtBQUNBLDZFQUE2RTs7QUFFN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzRUFBc0U7QUFDdEU7O0FBRUE7QUFDQTtBQUNBLHVFQUF1RTtBQUN2RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdFQUFnRTs7QUFFaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1FQUFtRTtBQUNuRTtBQUNBOztBQUVBLHlFQUF5RTs7QUFFekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlFQUF5RTs7QUFFekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEVBQTBFOztBQUUxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQzs7QUFFakMsaUNBQWlDOztBQUVqQztBQUNBLGtDQUFrQzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QixHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qjs7QUFFekI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUEscUJBQXFCLGlCQUFpQjtBQUN0QztBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBLHlGQUF5Rjs7O0FBR3pGO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0EsaUJBQWlCLHNCQUFzQjtBQUN2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsMEJBQTBCO0FBQzNDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQzs7QUFFQTs7QUFFQTs7QUFFQSxtQkFBbUIsd0JBQXdCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLDZCQUE2QjtBQUNqRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBLGlCQUFpQixxQkFBcUI7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMENBQTBDOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsdUJBQXVCO0FBQzFDOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7OztBQUdBO0FBQ0EscUNBQXFDOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLHNEQUFzRDtBQUNuRzs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsY0FBYztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxVQUFVO0FBQ1YsVUFBVTtBQUNWLFdBQVc7QUFDWDtBQUNBO0FBQ0EsR0FBRztBQUNILFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUFDaEMsS0FBSztBQUNMLGdDQUFnQztBQUNoQyxLQUFLO0FBQ0wsc0NBQXNDO0FBQ3RDLEtBQUs7QUFDTCxzQ0FBc0M7QUFDdEMsS0FBSztBQUNMLHNDQUFzQztBQUN0QyxLQUFLO0FBQ0wsc0NBQXNDO0FBQ3RDLEtBQUs7QUFDTCxzQ0FBc0M7QUFDdEMsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtRUFBbUU7QUFDbkU7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQkFBaUIsdUJBQXVCO0FBQ3hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGlCQUFpQjtBQUNqQixPQUFPO0FBQ1A7O0FBRUE7O0FBRUEsaUJBQWlCO0FBQ2pCLE9BQU87QUFDUDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUE4RDtBQUM5RDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRUFBbUU7QUFDbkU7QUFDQTtBQUNBOztBQUVBLDhEQUE4RDs7QUFFOUQ7QUFDQTtBQUNBOzs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsOEJBQThCOztBQUU5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUEscUJBQXFCLG9CQUFvQjtBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7Ozs7Ozs7OztBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtB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OztBQUVBLHVEQUF1RDs7QUFFdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7O0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7QUFDRDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7O0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDOztBQUUzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCOztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQSw0QkFBNEI7O0FBRTVCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRzs7O0FBR0gsMkJBQTJCOztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7O0FBR0E7QUFDQTtB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7Ozs7Ozs7Ozs7QUFZQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7QUFDQSxtRUFBbUU7O0FBRW5FOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBLDBDQUEwQztBQUMxQyxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEIseUJBQXlCO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQyxFQUFFO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCOztBQUV4Qjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUMsRUFBRTs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7Ozs7Ozs7OztBQVNBO0FBQ0E7QUFDQSw0QkFBNEI7O0FBRTVCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7OztBQUdILDBGQUEwRjs7QUFFMUYsbURBQW1EO0FBQ25EOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSyxXQUFXOztBQUVoQjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUssV0FBVzs7QUFFaEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUEsbUJBQW1CLGlCQUFpQjtBQUNwQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILHdEQUF3RCxFQUFFOztBQUUxRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0VBQWtFOztBQUVsRTs7QUFFQSxxQkFBcUIsdUJBQXVCO0FBQzVDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7Ozs7O0FBS0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2Q0FBNkM7O0FBRTdDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9GQUFvRjs7QUFFcEY7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBLDhFQUE4RTtBQUM5RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUssV0FBVzs7QUFFaEI7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRztBQUNILHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7O0FBV0E7QUFDQSxpQ0FBaUM7QUFDakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DOztBQUVuQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4REFBOEQ7QUFDOUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7Ozs7Ozs7Ozs7Ozs7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3Qzs7QUFFeEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbURBQW1EOztBQUVuRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7OztBQUlBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQzs7QUFFdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaURBQWlEOztBQUVqRCw0RkFBNEY7QUFDNUYsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOzs7QUFHTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUdBQXVHO0FBQ3ZHOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiw0QkFBNEI7QUFDakQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQU1BO0FBQ0EsMERBQTBEOztBQUUxRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0Esd0JBQXdCLElBQUksR0FBRztBQUMvQix5Q0FBeUM7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRSwwQkFBMEIsSUFBSSxHQUFHO0FBQ3BDLDBDQUEwQzs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFFLHlCQUF5QixJQUFJLElBQUksR0FBRztBQUN2QywyREFBMkQ7QUFDM0Q7O0FBRUE7QUFDQSxvQ0FBb0M7O0FBRXBDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRSxxQkFBcUIsSUFBSSxHQUFHO0FBQy9CO0FBQ0E7QUFDQSw4QkFBOEIsZUFBZSxhQUFhOztBQUUxRCwwQ0FBMEMsY0FBYyxJQUFJLEdBQUcsd0JBQXdCLElBQUksR0FBRzs7QUFFOUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUU7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixlQUFlO0FBQ2pDLENBQUMsRUFBRTtBQUNILGtCQUFrQjtBQUNsQixvQkFBb0I7QUFDcEIsc0JBQXNCO0FBQ3RCLG9DQUFvQztBQUNwQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUI7O0FBRXpCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBNkI7O0FBRTdCO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQyxFQUFFLGdCQUFnQixPQUFPLE9BQU87QUFDakMsaUJBQWlCLE9BQU8sT0FBTztBQUMvQix5Q0FBeUMsT0FBTyxnQkFBZ0I7O0FBRWhFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSwyQ0FBMkMsYUFBYSxzQ0FBc0M7QUFDOUY7O0FBRUE7QUFDQSw2Q0FBNkMsYUFBYSxtREFBbUQ7QUFDN0c7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwREFBMEQ7QUFDMUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDLEVBQUU7QUFDSDtBQUNBLGdCQUFnQjs7QUFFaEIsMEJBQTBCO0FBQzFCLDBCQUEwQixHQUFHO0FBQzdCLFdBQVc7QUFDWCxXQUFXO0FBQ1gsYUFBYTtBQUNiLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCLDhCQUE4QixnQkFBZ0IsYUFBYTtBQUMzRCw4QkFBOEIsaUJBQWlCLGFBQWE7QUFDNUQ7QUFDQSx5QkFBeUIsWUFBWTtBQUNyQyxlQUFlLFdBQVcsZ0JBQWdCOztBQUUxQyw4Q0FBOEMsY0FBYyxJQUFJLFNBQVM7QUFDekUseUNBQXlDLGlCQUFpQixPQUFPLGlCQUFpQjtBQUNsRiwrQ0FBK0MsY0FBYyxpQkFBaUIsU0FBUyxHQUFHOztBQUUxRixpQ0FBaUMsRUFBRSxHQUFHOztBQUV0QyxpQ0FBaUMsRUFBRTtBQUNuQyxpQ0FBaUMsRUFBRTtBQUNuQyxpQ0FBaUMsRUFBRTtBQUNuQyxpQ0FBaUMsRUFBRTtBQUNuQyxpQ0FBaUMsRUFBRTtBQUNuQyxpQ0FBaUMsRUFBRTtBQUNuQyxpQ0FBaUMsRUFBRTtBQUNuQyxrQ0FBa0MsRUFBRSxHQUFHOztBQUV2QyxrQ0FBa0MsRUFBRTtBQUNwQyxrQ0FBa0MsRUFBRSxHQUFHOztBQUV2Qyw2QkFBNkIsRUFBRSxHQUFHO0FBQ2xDO0FBQ0E7O0FBRUEsK0JBQStCOztBQUUvQixrQ0FBa0MsU0FBUyxJQUFJO0FBQy9DLGtDQUFrQyxTQUFTLElBQUk7QUFDL0Msa0NBQWtDLFNBQVMsSUFBSSxHQUFHO0FBQ2xELHNCQUFzQixNQUFNLFVBQVUsU0FBUztBQUMvQztBQUNBO0FBQ0E7O0FBRUEsb0NBQW9DLFVBQVUsbUJBQW1CLFdBQVcsR0FBRztBQUMvRSxZQUFZLE1BQU07QUFDbEI7QUFDQSxZQUFZLFNBQVM7QUFDckIsbUJBQW1CLGNBQWM7O0FBRWpDLG9DQUFvQyxVQUFVLFNBQVMsVUFBVSxVQUFVO0FBQzNFO0FBQ0E7QUFDQSxzQ0FBc0MsV0FBVyxLQUFLLFdBQVcsY0FBYyxNQUFNLFVBQVUsVUFBVTtBQUN6RyxpQ0FBaUM7O0FBRWpDLHFDQUFxQyxlQUFlLFFBQVEsS0FBSyxXQUFXLE9BQU8sdUJBQXVCLE9BQU8sVUFBVSxlQUFlO0FBQzFJLHFDQUFxQyxXQUFXLGVBQWUsSUFBSSxVQUFVLGVBQWU7QUFDNUYscUNBQXFDLFdBQVcsYUFBYSxJQUFJLFVBQVUsZUFBZTtBQUMxRixxQ0FBcUMsV0FBVyxvQkFBb0IsR0FBRyxNQUFNLFVBQVUsZUFBZTtBQUN0RyxxQ0FBcUMsV0FBVyxlQUFlLE1BQU0sR0FBRyxNQUFNLFVBQVUsZUFBZTtBQUN2RyxxQ0FBcUMsV0FBVyxlQUFlLElBQUksR0FBRyxNQUFNLFVBQVUsZUFBZTtBQUNyRyxxQ0FBcUMsV0FBVyxTQUFTLElBQUksVUFBVSxlQUFlLEdBQUc7O0FBRXpGO0FBQ0EsbUNBQW1DLGdCQUFnQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQztBQUNBLFVBQVUsTUFBTTtBQUNoQixrQkFBa0IsRUFBRSxNQUFNLEVBQUUsTUFBTTtBQUNsQztBQUNBOztBQUVBLGtDQUFrQyxpQkFBaUIsS0FBSyxNQUFNO0FBQzlELGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsUUFBUTs7QUFFOUMsb0NBQW9DLFFBQVE7QUFDNUMsb0NBQW9DLFFBQVE7QUFDNUMsb0NBQW9DLFFBQVE7QUFDNUMscUNBQXFDLFNBQVM7QUFDOUMsaUNBQWlDLEtBQUs7QUFDdEMsaUNBQWlDLEtBQUs7QUFDdEMsb0NBQW9DLFFBQVE7QUFDNUMsc0NBQXNDLFVBQVU7QUFDaEQsa0NBQWtDLE1BQU07QUFDeEMsa0NBQWtDLE1BQU07QUFDeEMsb0NBQW9DLFFBQVEsR0FBRyxlQUFlLFVBQVUsSUFBSSxVQUFVLEVBQUU7O0FBRXhGLG1DQUFtQyxVQUFVLEVBQUUsUUFBUSxTQUFTLEdBQUcsa0JBQWtCLFFBQVEsNkJBQTZCO0FBQzFILHNCQUFzQixFQUFFOztBQUV4Qix3REFBd0Qsa0JBQWtCLGFBQWEsaUJBQWlCLEVBQUUsYUFBYSxnQkFBZ0IsT0FBTyxJQUFJLE1BQU07O0FBRXhKLCtCQUErQixnQkFBZ0IsR0FBRyxFQUFFLEdBQUcsYUFBYSxRQUFRO0FBQzVFLGdCQUFnQixRQUFRO0FBQ3hCLGtCQUFrQixRQUFROztBQUUxQixnQ0FBZ0MsdUJBQXVCO0FBQ3ZELG9DQUFvQyxtQkFBbUI7QUFDdkQsc0NBQXNDLGtCQUFrQixHQUFHOztBQUUzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxtQ0FBbUM7QUFDbkMsT0FBTzs7QUFFUDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBOztBQUVBLHFDQUFxQztBQUNyQztBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEMseUJBQXlCLFNBQVMsSUFBSTtBQUN0Qzs7QUFFQSx1Q0FBdUMsWUFBWSxZQUFZLFVBQVUsa0JBQWtCLElBQUkscUJBQXFCO0FBQ3BIOztBQUVBLCtCQUErQixLQUFLLFFBQVEsR0FBRzs7QUFFL0Msa0NBQWtDLFdBQVc7QUFDN0MsaUJBQWlCLElBQUksb0JBQW9CO0FBQ3pDOztBQUVBLDRCQUE0QixJQUFJO0FBQ2hDLCtCQUErQixLQUFLLFFBQVEsR0FBRzs7QUFFL0MsaUNBQWlDLGtCQUFrQixJQUFJLHNCQUFzQjtBQUM3RTs7QUFFQSxnQkFBZ0IsZUFBZSxLQUFLLFFBQVEsR0FBRzs7QUFFL0MsZ0NBQWdDLEdBQUcsa0JBQWtCLElBQUkscUJBQXFCO0FBQzlFOztBQUVBLCtCQUErQixLQUFLLFFBQVEsR0FBRzs7QUFFL0MscUNBQXFDLGdCQUFnQixjQUFjLG9CQUFvQjtBQUN2Rjs7QUFFQSx5Q0FBeUMsS0FBSyxRQUFRLEdBQUcsZ0JBQWdCLGdCQUFnQixzQkFBc0I7QUFDL0c7O0FBRUEsMkNBQTJDLEtBQUssT0FBTyxHQUFHLGlCQUFpQjs7QUFFM0Usd0NBQXdDLGdCQUFnQjs7QUFFeEQsOENBQThDLGNBQWM7O0FBRTVELDJDQUEyQyxlQUFlOztBQUUxRCw0Q0FBNEM7O0FBRTVDO0FBQ0EsMENBQTBDLEVBQUUsR0FBRyxFQUFFO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHlCQUF5QixPQUFPLElBQUk7QUFDcEMsQ0FBQyxFQUFFLGtCQUFrQixPQUFPO0FBQzVCLE1BQU0sbUJBQW1CO0FBQ3pCO0FBQ0EsZUFBZSxLQUFLLElBQUk7QUFDeEI7QUFDQSxpQkFBaUIsTUFBTSxJQUFJLE1BQU0sbUJBQW1CO0FBQ3BELGVBQWUsS0FBSyxJQUFJO0FBQ3hCLHdCQUF3QixtQkFBbUI7QUFDM0M7O0FBRUEsb0NBQW9DLFlBQVksWUFBWSxZQUFZLFdBQVcsZUFBZSxTQUFTLGtCQUFrQixZQUFZLFlBQVksWUFBWSxXQUFXO0FBQzVLLG9EQUFvRCxhQUFhLFlBQVksWUFBWSxXQUFXO0FBQ3BHLDhCQUE4QixTQUFTLGFBQWE7QUFDcEQsb0RBQW9ELGFBQWEsYUFBYSxhQUFhLFlBQVksTUFBTSxTQUFTLFdBQVc7QUFDakk7QUFDQTtBQUNBOztBQUVBLG9DQUFvQyxlQUFlLElBQUksV0FBVyxHQUFHLGVBQWUsTUFBTSxTQUFTLElBQUksR0FBRztBQUMxRztBQUNBOztBQUVBLGlDQUFpQyxhQUFhLDhCQUE4QixFQUFFO0FBQzlFO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0IsY0FBYywrQkFBK0IsT0FBTyxFQUFFLHFCQUFxQixLQUFLLEdBQUcsMEJBQTBCLFFBQVE7QUFDcEosWUFBWTtBQUNaLDJCQUEyQixNQUFNO0FBQ2pDO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkMsZ0NBQWdDO0FBQ2hDLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUMsY0FBYyw4QkFBOEIscUJBQXFCLGdCQUFnQix5QkFBeUIsT0FBTyxHQUFHOztBQUVySixpQ0FBaUMsY0FBYyw4QkFBOEIscUJBQXFCLGdCQUFnQix5QkFBeUIsT0FBTyxHQUFHLGlDQUFpQztBQUN0TCxrQkFBa0I7QUFDbEIsbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQSxrQ0FBa0MsS0FBSyxJQUFJLG9CQUFvQjtBQUMvRDtBQUNBLGdDQUFnQzs7QUFFaEMsb0NBQW9DLG1CQUFtQixTQUFTO0FBQ2hFOztBQUVBLHVDQUF1Qyx3QkFBd0IsR0FBRyw4QkFBOEIsb0JBQW9CLFlBQVk7O0FBRWhJLHlDQUF5QyxlQUFlLHNCQUFzQixhQUFhLGNBQWMsTUFBTSxTQUFTLGNBQWMsR0FBRyw4QkFBOEIsb0JBQW9CLGFBQWE7O0FBRXhNLHlDQUF5QyxlQUFlLHNCQUFzQixjQUFjLEdBQUcsTUFBTSxTQUFTLGNBQWMsR0FBRztBQUMvSCw2QkFBNkIsa0JBQWtCLGFBQWE7O0FBRTVELHlDQUF5QyxlQUFlLG9CQUFvQixjQUFjLEdBQUcsTUFBTSxTQUFTLHdCQUF3QixHQUFHLDZCQUE2QixvQkFBb0IsYUFBYSxTQUFTOztBQUU5TSx3Q0FBd0MsZUFBZSxzQkFBc0IsY0FBYyxVQUFVLElBQUksTUFBTSxTQUFTLHdCQUF3QixHQUFHLDZCQUE2QixrQkFBa0IsYUFBYSxTQUFTOztBQUV4Tix3Q0FBd0MsZUFBZSxvQkFBb0IsY0FBYyxVQUFVLElBQUksTUFBTSxTQUFTLDBCQUEwQixHQUFHLDhCQUE4QixVQUFVLGFBQWE7O0FBRXhNLHlDQUF5QyxlQUFlLFdBQVcsY0FBYyxjQUFjLE1BQU0sU0FBUyxjQUFjLEdBQUc7QUFDL0gsNkJBQTZCLFVBQVUsYUFBYTs7QUFFcEQseUNBQXlDLGVBQWUsV0FBVyxjQUFjLFlBQVksTUFBTSxTQUFTLHdCQUF3QixHQUFHLDZCQUE2QixTQUFTLEVBQUUsU0FBUyxhQUFhOztBQUVyTSx3Q0FBd0MsZUFBZSxVQUFVLEVBQUUsVUFBVSxjQUFjLGNBQWMsTUFBTSxTQUFTLGNBQWMsR0FBRyw2QkFBNkIsU0FBUyxFQUFFLFNBQVMsYUFBYTs7QUFFdk0sd0NBQXdDLGVBQWUsVUFBVSxFQUFFLFVBQVUsY0FBYyxZQUFZLE1BQU0sU0FBUywwQkFBMEIsR0FBRyxpQ0FBaUMsb0JBQW9CLGFBQWE7O0FBRXJOLDRDQUE0QyxlQUFlLHNCQUFzQixjQUFjLFVBQVUsTUFBTSxTQUFTLHdCQUF3QixHQUFHLGlDQUFpQyxrQkFBa0IsYUFBYTs7QUFFbk4sNENBQTRDLGVBQWUsb0JBQW9CLGNBQWMsVUFBVSxNQUFNLFNBQVMsMEJBQTBCLEdBQUcsOEJBQThCLG9CQUFvQixhQUFhOztBQUVsTix5Q0FBeUMsZUFBZSxzQkFBc0IsY0FBYyxPQUFPLE1BQU0sU0FBUyx3QkFBd0IsR0FBRyw4QkFBOEIsa0JBQWtCLGFBQWE7O0FBRTFNLHlDQUF5QyxlQUFlLG9CQUFvQixjQUFjLE9BQU8sTUFBTSxTQUFTLDBCQUEwQixHQUFHOztBQUU3SSxvQ0FBb0M7O0FBRXBDLG1DQUFtQzs7QUFFbkMsb0NBQW9DOztBQUVwQyxvQ0FBb0M7O0FBRXBDLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDOztBQUU5QyxtREFBbUQ7O0FBRW5ELDZDQUE2Qzs7QUFFN0MscUNBQXFDLGVBQWUsY0FBYyxhQUFhO0FBQy9FLDBDQUEwQyxlQUFlLGNBQWMsV0FBVztBQUNsRix3Q0FBd0Msa0JBQWtCLGNBQWMsYUFBYTtBQUNyRiw2Q0FBNkMsa0JBQWtCLGNBQWMsV0FBVyxHQUFHOztBQUUzRixzQ0FBc0MsV0FBVyxVQUFVLGVBQWU7QUFDMUUsZ0RBQWdELFVBQVU7QUFDMUQsZ0RBQWdELFVBQVUsR0FBRztBQUM3RDs7QUFFQSwwQ0FBMEMsY0FBYyxPQUFPO0FBQy9ELDBDQUEwQyxjQUFjLE9BQU87QUFDL0Qsc0NBQXNDLFVBQVUsT0FBTztBQUN2RCwwQ0FBMEMsY0FBYyxPQUFPO0FBQy9ELHNDQUFzQyxVQUFVLE9BQU87QUFDdkQsMENBQTBDLGNBQWMsT0FBTztBQUMvRCwwQ0FBMEMsY0FBYyxFQUFFO0FBQzFELCtDQUErQyxtQkFBbUIsRUFBRTtBQUNwRSwyQ0FBMkMsZUFBZSxPQUFPO0FBQ2pFLDJDQUEyQyxlQUFlLE9BQU87QUFDakUsNkNBQTZDLGlCQUFpQixFQUFFO0FBQ2hFLDhDQUE4QyxrQkFBa0IsRUFBRTtBQUNsRSw2Q0FBNkMsaUJBQWlCLEVBQUU7QUFDaEUsOENBQThDLGtCQUFrQixFQUFFLEdBQUc7QUFDckU7QUFDQTtBQUNBOztBQUVBLDBDQUEwQyxnQkFBZ0IsaUJBQWlCLE1BQU0sV0FBVyxlQUFlO0FBQzNHLDBDQUEwQyxpQkFBaUIsaUJBQWlCLE1BQU0sWUFBWSxlQUFlO0FBQzdHLHFDQUFxQzs7QUFFckMscUNBQXFDOztBQUVyQyx1Q0FBdUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLE1BQU0sV0FBVyxlQUFlO0FBQzFHLHVDQUF1QyxpQkFBaUIsbUJBQW1CLE1BQU0sWUFBWSxlQUFlO0FBQzVHLGtDQUFrQzs7QUFFbEMsa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVEOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLEVBQUU7QUFDL0IsNkJBQTZCLEVBQUU7QUFDL0IsNkJBQTZCLEVBQUU7QUFDL0I7QUFDQTtBQUNBLGlDQUFpQyxFQUFFO0FBQ25DLGdDQUFnQyxFQUFFO0FBQ2xDO0FBQ0EsK0JBQStCLEVBQUU7QUFDakM7QUFDQSxpQ0FBaUMsRUFBRTtBQUNuQyxtQ0FBbUMsRUFBRTtBQUNyQztBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsRUFBRTtBQUNyQywrQkFBK0IsRUFBRTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxFQUFFO0FBQ2xDO0FBQ0EsaUNBQWlDLEVBQUU7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLEVBQUU7QUFDaEMsbUNBQW1DLEVBQUU7QUFDckMsOEJBQThCLEVBQUU7QUFDaEMsbUNBQW1DLEVBQUU7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxFQUFFO0FBQ25DLGlDQUFpQyxFQUFFO0FBQ25DLCtCQUErQixFQUFFO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLHdDQUF3Qyw2Q0FBNkMsUUFBUTs7QUFFN0Y7QUFDQSxnQ0FBZ0MsRUFBRSxHQUFHO0FBQ3JDO0FBQ0E7O0FBRUEsZ0RBQWdELFVBQVU7QUFDMUQsZ0RBQWdELFVBQVU7QUFDMUQsdUNBQXVDLGVBQWUsTUFBTSxXQUFXOztBQUV2RSxtQ0FBbUMsVUFBVSxHQUFHO0FBQ2hELHFDQUFxQyxVQUFVLEdBQUc7QUFDbEQsbUNBQW1DLFVBQVUsR0FBRztBQUNoRCxrQ0FBa0MsVUFBVSxHQUFHO0FBQy9DLG9DQUFvQyxVQUFVLEdBQUc7QUFDakQsbUNBQW1DLE1BQU0sSUFBSTtBQUM3QyxxQ0FBcUMsVUFBVSxHQUFHO0FBQ2xELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQsb0NBQW9DLFVBQVUsR0FBRztBQUNqRCxvQ0FBb0MsVUFBVSxHQUFHO0FBQ2pELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQsb0NBQW9DLFVBQVUsR0FBRztBQUNqRCxvQ0FBb0MsVUFBVSxHQUFHO0FBQ2pELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQsb0NBQW9DLFVBQVUsR0FBRztBQUNqRCxvQ0FBb0MsVUFBVSxHQUFHO0FBQ2pELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQscUNBQXFDLFVBQVUsR0FBRztBQUNsRCxxQ0FBcUMsVUFBVSxHQUFHO0FBQ2xELHFDQUFxQyxVQUFVLEdBQUc7QUFDbEQscUNBQXFDLFVBQVUsR0FBRztBQUNsRCxxQ0FBcUMsVUFBVSxHQUFHO0FBQ2xELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQsb0NBQW9DLFVBQVUsR0FBRztBQUNqRCxvQ0FBb0MsVUFBVSxHQUFHO0FBQ2pELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQsb0NBQW9DLFVBQVUsR0FBRztBQUNqRCxtQ0FBbUMsVUFBVSxHQUFHO0FBQ2hELG1DQUFtQyxVQUFVLEdBQUc7QUFDaEQsbUNBQW1DLFVBQVUsR0FBRztBQUNoRCxtQ0FBbUMsVUFBVSxHQUFHO0FBQ2hELG1DQUFtQyxVQUFVLEdBQUc7QUFDaEQsc0NBQXNDLFVBQVUsR0FBRztBQUNuRCxzQ0FBc0MsVUFBVSxHQUFHO0FBQ25ELHNDQUFzQyxVQUFVLEdBQUc7QUFDbkQsc0NBQXNDLFVBQVUsR0FBRztBQUNuRCxzQ0FBc0MsVUFBVSxHQUFHO0FBQ25ELHNDQUFzQyxVQUFVLEdBQUc7QUFDbkQsc0NBQXNDLFVBQVUsR0FBRztBQUNuRCxzQ0FBc0MsVUFBVSxHQUFHO0FBQ25ELHNDQUFzQyxVQUFVLEdBQUc7QUFDbkQsc0NBQXNDLFVBQVUsR0FBRztBQUNuRCxvQ0FBb0MsVUFBVSxHQUFHO0FBQ2pELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQsb0NBQW9DLFVBQVUsR0FBRztBQUNqRCxvQ0FBb0MsVUFBVSxHQUFHO0FBQ2pELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQsb0NBQW9DLFVBQVUsR0FBRztBQUNqRCxvQ0FBb0MsVUFBVSxHQUFHO0FBQ2pELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQsb0NBQW9DLFVBQVUsR0FBRztBQUNqRCxvQ0FBb0MsVUFBVSxHQUFHO0FBQ2pELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQsb0NBQW9DLFVBQVUsR0FBRztBQUNqRCxxQ0FBcUMsVUFBVSxHQUFHO0FBQ2xELHNDQUFzQyxVQUFVLEdBQUc7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQix1REFBdUQsRUFBRTs7QUFFM0UsbUJBQW1CLGFBQWE7QUFDaEMsMkJBQTJCOztBQUUzQjs7QUFFQSxnQ0FBZ0M7QUFDaEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCO0FBQzdCO0FBQ0EsV0FBVyx5QkFBeUI7QUFDcEM7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBLGtCQUFrQjs7QUFFbEIsc0JBQXNCOztBQUV0QjtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0QsRUFBRTtBQUN4RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxxREFBcUQ7O0FBRXJELDhCQUE4Qjs7QUFFOUIscUNBQXFDLFFBQVE7QUFDN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNEJBQTRCOztBQUU1QjtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVc7QUFDWCx1Q0FBdUM7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7OztBQUdBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUNBQXVDOztBQUV2QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNB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Q0FBQzs7QUFFRCxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBLElBQUksS0FBSztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvREFBb0Q7O0FBRXBEO0FBQ0EsNEJBQTRCO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUEsT0FBTztBQUNQO0FBQ0EsQ0FBQyxFOzs7Ozs7Ozs7OztBQ3pnaUJEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTs7Ozs7Ozs7Ozs7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7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O0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUMxR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixzQkFBc0I7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxTQUFTO0FBQ3RCLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxJQUFJO0FBQ2xCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxPQUFPO0FBQ3JCLGNBQWMsT0FBTztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsUUFBUTtBQUN0QixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLFFBQVE7QUFDdEIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsUUFBUTtBQUN0QixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQ7QUFDakQ7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLG9CQUFvQjtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FB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QTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdURBQXVEO0FBQ3ZEOztBQUVBLDZCQUE2QixtQkFBbUI7O0FBRWhEOztBQUVBOztBQUVBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUM5WUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLFdBQVcsRUFBRTtBQUNyRCx3Q0FBd0MsV0FBVyxFQUFFOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLHNDQUFzQztBQUN0QyxH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QUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsMEJBQTBCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxxQkFBcUIsY0FBYztBQUNuQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLFlBQVk7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLGVBQWU7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUIsZUFBZTtBQUNwQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLFlBQVk7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLFlBQVk7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsWUFBWTtBQUNyRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLGdCQUFnQjtBQUN6QztBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsT0FBTztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxZQUFZO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsWUFBWTtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsWUFBWTtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2RUFBNkU7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLEtBQXdCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLFlBQVk7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7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QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7Ozs7Ozs7Ozs7OztBQ3RQQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQixzQkFBc0I7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ2xCQSxlIiwiZmlsZSI6InN0b2Noc3MtY29tbW9uLmJ1bmRsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vdmFyIGNvbmZpZyA9IHJlcXVpcmUoJy4vY29uZmlnLmpzJykocHJvY2Vzcy5lbnYuTk9ERV9FTlYpO1xubGV0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cbmxldCByb3V0ZVByZWZpeCA9ICdzdG9jaHNzJztcbmxldCBhcGlQcmVmaXggPSAgcGF0aC5qb2luKHJvdXRlUHJlZml4LCAnYXBpJyk7XG5sZXQgZ2V0QmFzZVBhdGggPSAoKSA9PiB7XG4gIHRyeSB7XG4gICAgbGV0IGJhc2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdiYXNlJylcbiAgICBsZXQgaHJlZiA9IGJhc2UuZ2V0QXR0cmlidXRlKCdocmVmJylcbiAgICByZXR1cm4gaHJlZlxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnLydcbiAgfVxufTtcbmxldCBnZXRBcGlQYXRoID0gKCkgPT4gcGF0aC5qb2luKGdldEJhc2VQYXRoKCksIGFwaVByZWZpeCk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIHJvdXRlUHJlZml4OiByb3V0ZVByZWZpeCxcbiAgICBnZXRBcGlQYXRoOiBnZXRBcGlQYXRoLFxuICAgIGdldEJhc2VQYXRoOiBnZXRCYXNlUGF0aFxufTtcbiIsIi8qKlxuKiBwbG90bHkuanMgdjEuNDcuMVxuKiBDb3B5cmlnaHQgMjAxMi0yMDE5LCBQbG90bHksIEluYy5cbiogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4qL1xuIWZ1bmN0aW9uKHQpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlKW1vZHVsZS5leHBvcnRzPXQoKTtlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sdCk7ZWxzZXsoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzKS5QbG90bHk9dCgpfX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbil7ZnVuY3Rpb24gaShvLHMpe2lmKCFyW29dKXtpZighZVtvXSl7dmFyIGw9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighcyYmbClyZXR1cm4gbChvLCEwKTtpZihhKXJldHVybiBhKG8sITApO3ZhciBjPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgYy5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGN9dmFyIHU9cltvXT17ZXhwb3J0czp7fX07ZVtvXVswXS5jYWxsKHUuZXhwb3J0cyxmdW5jdGlvbih0KXtyZXR1cm4gaShlW29dWzFdW3RdfHx0KX0sdSx1LmV4cG9ydHMsdCxlLHIsbil9cmV0dXJuIHJbb10uZXhwb3J0c31mb3IodmFyIGE9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxvPTA7bzxuLmxlbmd0aDtvKyspaShuW29dKTtyZXR1cm4gaX19KCkoezE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vc3JjL2xpYlwiKSxpPXtcIlgsWCBkaXZcIjpcImRpcmVjdGlvbjpsdHI7Zm9udC1mYW1pbHk6J09wZW4gU2FucycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO21hcmdpbjowO3BhZGRpbmc6MDtcIixcIlggaW5wdXQsWCBidXR0b25cIjpcImZvbnQtZmFtaWx5OidPcGVuIFNhbnMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcIixcIlggaW5wdXQ6Zm9jdXMsWCBidXR0b246Zm9jdXNcIjpcIm91dGxpbmU6bm9uZTtcIixcIlggYVwiOlwidGV4dC1kZWNvcmF0aW9uOm5vbmU7XCIsXCJYIGE6aG92ZXJcIjpcInRleHQtZGVjb3JhdGlvbjpub25lO1wiLFwiWCAuY3Jpc3BcIjpcInNoYXBlLXJlbmRlcmluZzpjcmlzcEVkZ2VzO1wiLFwiWCAudXNlci1zZWxlY3Qtbm9uZVwiOlwiLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTstby11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7XCIsXCJYIHN2Z1wiOlwib3ZlcmZsb3c6aGlkZGVuO1wiLFwiWCBzdmcgYVwiOlwiZmlsbDojNDQ3YWRiO1wiLFwiWCBzdmcgYTpob3ZlclwiOlwiZmlsbDojM2M2ZGM1O1wiLFwiWCAubWFpbi1zdmdcIjpcInBvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtwb2ludGVyLWV2ZW50czpub25lO1wiLFwiWCAubWFpbi1zdmcgLmRyYWdsYXllclwiOlwicG9pbnRlci1ldmVudHM6YWxsO1wiLFwiWCAuY3Vyc29yLWRlZmF1bHRcIjpcImN1cnNvcjpkZWZhdWx0O1wiLFwiWCAuY3Vyc29yLXBvaW50ZXJcIjpcImN1cnNvcjpwb2ludGVyO1wiLFwiWCAuY3Vyc29yLWNyb3NzaGFpclwiOlwiY3Vyc29yOmNyb3NzaGFpcjtcIixcIlggLmN1cnNvci1tb3ZlXCI6XCJjdXJzb3I6bW92ZTtcIixcIlggLmN1cnNvci1jb2wtcmVzaXplXCI6XCJjdXJzb3I6Y29sLXJlc2l6ZTtcIixcIlggLmN1cnNvci1yb3ctcmVzaXplXCI6XCJjdXJzb3I6cm93LXJlc2l6ZTtcIixcIlggLmN1cnNvci1ucy1yZXNpemVcIjpcImN1cnNvcjpucy1yZXNpemU7XCIsXCJYIC5jdXJzb3ItZXctcmVzaXplXCI6XCJjdXJzb3I6ZXctcmVzaXplO1wiLFwiWCAuY3Vyc29yLXN3LXJlc2l6ZVwiOlwiY3Vyc29yOnN3LXJlc2l6ZTtcIixcIlggLmN1cnNvci1zLXJlc2l6ZVwiOlwiY3Vyc29yOnMtcmVzaXplO1wiLFwiWCAuY3Vyc29yLXNlLXJlc2l6ZVwiOlwiY3Vyc29yOnNlLXJlc2l6ZTtcIixcIlggLmN1cnNvci13LXJlc2l6ZVwiOlwiY3Vyc29yOnctcmVzaXplO1wiLFwiWCAuY3Vyc29yLWUtcmVzaXplXCI6XCJjdXJzb3I6ZS1yZXNpemU7XCIsXCJYIC5jdXJzb3ItbnctcmVzaXplXCI6XCJjdXJzb3I6bnctcmVzaXplO1wiLFwiWCAuY3Vyc29yLW4tcmVzaXplXCI6XCJjdXJzb3I6bi1yZXNpemU7XCIsXCJYIC5jdXJzb3ItbmUtcmVzaXplXCI6XCJjdXJzb3I6bmUtcmVzaXplO1wiLFwiWCAuY3Vyc29yLWdyYWJcIjpcImN1cnNvcjotd2Via2l0LWdyYWI7Y3Vyc29yOmdyYWI7XCIsXCJYIC5tb2RlYmFyXCI6XCJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MnB4O3JpZ2h0OjJweDtcIixcIlggLmVhc2UtYmdcIjpcIi13ZWJraXQtdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZSAwczstbW96LXRyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAwLjNzIGVhc2UgMHM7LW1zLXRyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAwLjNzIGVhc2UgMHM7LW8tdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZSAwczt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMC4zcyBlYXNlIDBzO1wiLFwiWCAubW9kZWJhci0taG92ZXI+Om5vdCgud2F0ZXJtYXJrKVwiOlwib3BhY2l0eTowOy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZSAwczstbW96LXRyYW5zaXRpb246b3BhY2l0eSAwLjNzIGVhc2UgMHM7LW1zLXRyYW5zaXRpb246b3BhY2l0eSAwLjNzIGVhc2UgMHM7LW8tdHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZSAwczt0cmFuc2l0aW9uOm9wYWNpdHkgMC4zcyBlYXNlIDBzO1wiLFwiWDpob3ZlciAubW9kZWJhci0taG92ZXIgLm1vZGViYXItZ3JvdXBcIjpcIm9wYWNpdHk6MTtcIixcIlggLm1vZGViYXItZ3JvdXBcIjpcImZsb2F0OmxlZnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmctbGVmdDo4cHg7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3doaXRlLXNwYWNlOm5vd3JhcDtcIixcIlggLm1vZGViYXItYnRuXCI6XCJwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MTZweDtwYWRkaW5nOjNweCA0cHg7aGVpZ2h0OjIycHg7Y3Vyc29yOnBvaW50ZXI7bGluZS1oZWlnaHQ6bm9ybWFsO2JveC1zaXppbmc6Ym9yZGVyLWJveDtcIixcIlggLm1vZGViYXItYnRuIHN2Z1wiOlwicG9zaXRpb246cmVsYXRpdmU7dG9wOjJweDtcIixcIlggLm1vZGViYXIudmVydGljYWxcIjpcImRpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC13cmFwOndyYXA7YWxpZ24tY29udGVudDpmbGV4LWVuZDttYXgtaGVpZ2h0OjEwMCU7XCIsXCJYIC5tb2RlYmFyLnZlcnRpY2FsIHN2Z1wiOlwidG9wOi0xcHg7XCIsXCJYIC5tb2RlYmFyLnZlcnRpY2FsIC5tb2RlYmFyLWdyb3VwXCI6XCJkaXNwbGF5OmJsb2NrO2Zsb2F0Om5vbmU7cGFkZGluZy1sZWZ0OjBweDtwYWRkaW5nLWJvdHRvbTo4cHg7XCIsXCJYIC5tb2RlYmFyLnZlcnRpY2FsIC5tb2RlYmFyLWdyb3VwIC5tb2RlYmFyLWJ0blwiOlwiZGlzcGxheTpibG9jazt0ZXh0LWFsaWduOmNlbnRlcjtcIixcIlggW2RhdGEtdGl0bGVdOmJlZm9yZSxYIFtkYXRhLXRpdGxlXTphZnRlclwiOlwicG9zaXRpb246YWJzb2x1dGU7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7LW1vei10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTstby10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO2Rpc3BsYXk6bm9uZTtvcGFjaXR5OjA7ei1pbmRleDoxMDAxO3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjExMCU7cmlnaHQ6NTAlO1wiLFwiWCBbZGF0YS10aXRsZV06aG92ZXI6YmVmb3JlLFggW2RhdGEtdGl0bGVdOmhvdmVyOmFmdGVyXCI6XCJkaXNwbGF5OmJsb2NrO29wYWNpdHk6MTtcIixcIlggW2RhdGEtdGl0bGVdOmJlZm9yZVwiOlwiY29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjo2cHggc29saWQgdHJhbnNwYXJlbnQ7ei1pbmRleDoxMDAyO21hcmdpbi10b3A6LTEycHg7Ym9yZGVyLWJvdHRvbS1jb2xvcjojNjk3MzhhO21hcmdpbi1yaWdodDotNnB4O1wiLFwiWCBbZGF0YS10aXRsZV06YWZ0ZXJcIjpcImNvbnRlbnQ6YXR0cihkYXRhLXRpdGxlKTtiYWNrZ3JvdW5kOiM2OTczOGE7Y29sb3I6d2hpdGU7cGFkZGluZzo4cHggMTBweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxMnB4O3doaXRlLXNwYWNlOm5vd3JhcDttYXJnaW4tcmlnaHQ6LTE4cHg7Ym9yZGVyLXJhZGl1czoycHg7XCIsXCJYIC52ZXJ0aWNhbCBbZGF0YS10aXRsZV06YmVmb3JlLFggLnZlcnRpY2FsIFtkYXRhLXRpdGxlXTphZnRlclwiOlwidG9wOjAlO3JpZ2h0OjIwMCU7XCIsXCJYIC52ZXJ0aWNhbCBbZGF0YS10aXRsZV06YmVmb3JlXCI6XCJib3JkZXI6NnB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0LWNvbG9yOiM2OTczOGE7bWFyZ2luLXRvcDo4cHg7bWFyZ2luLXJpZ2h0Oi0zMHB4O1wiLFwiWCAuc2VsZWN0LW91dGxpbmVcIjpcImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MTtzaGFwZS1yZW5kZXJpbmc6Y3Jpc3BFZGdlcztcIixcIlggLnNlbGVjdC1vdXRsaW5lLTFcIjpcInN0cm9rZTp3aGl0ZTtcIixcIlggLnNlbGVjdC1vdXRsaW5lLTJcIjpcInN0cm9rZTpibGFjaztzdHJva2UtZGFzaGFycmF5OjJweCAycHg7XCIsWTpcImZvbnQtZmFtaWx5OidPcGVuIFNhbnMnO3Bvc2l0aW9uOmZpeGVkO3RvcDo1MHB4O3JpZ2h0OjIwcHg7ei1pbmRleDoxMDAwMDtmb250LXNpemU6MTBwdDttYXgtd2lkdGg6MTgwcHg7XCIsXCJZIHBcIjpcIm1hcmdpbjowO1wiLFwiWSAubm90aWZpZXItbm90ZVwiOlwibWluLXdpZHRoOjE4MHB4O21heC13aWR0aDoyNTBweDtib3JkZXI6MXB4IHNvbGlkICNmZmY7ei1pbmRleDozMDAwO21hcmdpbjowO2JhY2tncm91bmQtY29sb3I6IzhjOTdhZjtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTQwLDE1MSwxNzUsMC45KTtjb2xvcjojZmZmO3BhZGRpbmc6MTBweDtvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7d29yZC13cmFwOmJyZWFrLXdvcmQ7LW1zLWh5cGhlbnM6YXV0bzstd2Via2l0LWh5cGhlbnM6YXV0bztoeXBoZW5zOmF1dG87XCIsXCJZIC5ub3RpZmllci1jbG9zZVwiOlwiY29sb3I6I2ZmZjtvcGFjaXR5OjAuODtmbG9hdDpyaWdodDtwYWRkaW5nOjAgNXB4O2JhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtmb250LXNpemU6MjBweDtmb250LXdlaWdodDpib2xkO2xpbmUtaGVpZ2h0OjIwcHg7XCIsXCJZIC5ub3RpZmllci1jbG9zZTpob3ZlclwiOlwiY29sb3I6IzQ0NDt0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6cG9pbnRlcjtcIn07Zm9yKHZhciBhIGluIGkpe3ZhciBvPWEucmVwbGFjZSgvXiwvLFwiICxcIikucmVwbGFjZSgvWC9nLFwiLmpzLXBsb3RseS1wbG90IC5wbG90bHlcIikucmVwbGFjZSgvWS9nLFwiLnBsb3RseS1ub3RpZmllclwiKTtuLmFkZFN0eWxlUnVsZShvLGlbYV0pfX0se1wiLi4vc3JjL2xpYlwiOjcwMX1dLDI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e3VuZG86e3dpZHRoOjg1Ny4xLGhlaWdodDoxZTMscGF0aDpcIm04NTcgMzUwcTAtODctMzQtMTY2dC05MS0xMzctMTM3LTkyLTE2Ni0zNHEtOTYgMC0xODMgNDF0LTE0NyAxMTRxLTQgNi00IDEzdDUgMTFsNzYgNzdxNiA1IDE0IDUgOS0xIDEzLTcgNDEtNTMgMTAwLTgydDEyNi0yOXE1OCAwIDExMCAyM3Q5MiA2MSA2MSA5MSAyMiAxMTEtMjIgMTExLTYxIDkxLTkyIDYxLTExMCAyM3EtNTUgMC0xMDUtMjB0LTkwLTU3bDc3LTc3cTE3LTE2IDgtMzgtMTAtMjMtMzMtMjNoLTI1MHEtMTUgMC0yNSAxMXQtMTEgMjV2MjUwcTAgMjQgMjIgMzMgMjIgMTAgMzktOGw3Mi03MnE2MCA1NyAxMzcgODh0MTU5IDMxcTg3IDAgMTY2LTM0dDEzNy05MiA5MS0xMzcgMzQtMTY2elwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0saG9tZTp7d2lkdGg6OTI4LjYsaGVpZ2h0OjFlMyxwYXRoOlwibTc4NiAyOTZ2LTI2N3EwLTE1LTExLTI2dC0yNS0xMGgtMjE0djIxNGgtMTQzdi0yMTRoLTIxNHEtMTUgMC0yNSAxMHQtMTEgMjZ2MjY3cTAgMSAwIDJ0MCAybDMyMSAyNjQgMzIxLTI2NHExLTEgMS00eiBtMTI0IDM5bC0zNC00MXEtNS01LTEyLTZoLTJxLTcgMC0xMiAzbC0zODYgMzIyLTM4Ni0zMjJxLTctNC0xMy00LTcgMi0xMiA3bC0zNSA0MXEtNCA1LTMgMTN0NiAxMmw0MDEgMzM0cTE4IDE1IDQyIDE1dDQzLTE1bDEzNi0xMTR2MTA5cTAgOCA1IDEzdDEzIDVoMTA3cTggMCAxMy01dDUtMTN2LTIyN2wxMjItMTAycTUtNSA2LTEydC00LTEzelwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0sXCJjYW1lcmEtcmV0cm9cIjp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDpcIm01MTggMzg2cTAgOC01IDEzdC0xMyA1cS0zNyAwLTYzLTI3dC0yNi02M3EwLTggNS0xM3QxMy01IDEyIDUgNSAxM3EwIDIzIDE2IDM4dDM4IDE2cTggMCAxMyA1dDUgMTN6IG0xMjUtNzNxMC01OS00Mi0xMDF0LTEwMS00Mi0xMDEgNDItNDIgMTAxIDQyIDEwMSAxMDEgNDIgMTAxLTQyIDQyLTEwMXogbS01NzItMzIwaDg1OHY3MWgtODU4di03MXogbTY0MyAzMjBxMCA4OS02MiAxNTJ0LTE1MiA2Mi0xNTEtNjItNjMtMTUyIDYzLTE1MSAxNTEtNjMgMTUyIDYzIDYyIDE1MXogbS01NzEgMzU4aDIxNHY3MmgtMjE0di03MnogbS03Mi0xMDdoODU4djE0M2gtNDYybC0zNi03MWgtMzYwdi03MnogbTkyOSAxNDN2LTcxNHEwLTMwLTIxLTUxdC01MC0yMWgtODU4cS0yOSAwLTUwIDIxdC0yMSA1MXY3MTRxMCAzMCAyMSA1MXQ1MCAyMWg4NThxMjkgMCA1MC0yMXQyMS01MXpcIix0cmFuc2Zvcm06XCJtYXRyaXgoMSAwIDAgLTEgMCA4NTApXCJ9LHpvb21ib3g6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6XCJtMTAwMC0yNWwtMjUwIDI1MWM0MCA2MyA2MyAxMzggNjMgMjE4IDAgMjI0LTE4MiA0MDYtNDA3IDQwNi0yMjQgMC00MDYtMTgyLTQwNi00MDZzMTgzLTQwNiA0MDctNDA2YzgwIDAgMTU1IDIyIDIxOCA2MmwyNTAtMjUwIDEyNSAxMjV6IG0tODEyIDI1MGwwIDQzOCA0MzcgMCAwLTQzOC00MzcgMHogbTYyIDM3NWwzMTMgMCAwLTMxMi0zMTMgMCAwIDMxMnpcIix0cmFuc2Zvcm06XCJtYXRyaXgoMSAwIDAgLTEgMCA4NTApXCJ9LHBhbjp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDpcIm0xMDAwIDM1MGwtMTg3IDE4OCAwLTEyNS0yNTAgMCAwIDI1MCAxMjUgMC0xODggMTg3LTE4Ny0xODcgMTI1IDAgMC0yNTAtMjUwIDAgMCAxMjUtMTg4LTE4OCAxODYtMTg3IDAgMTI1IDI1MiAwIDAtMjUwLTEyNSAwIDE4Ny0xODggMTg4IDE4OC0xMjUgMCAwIDI1MCAyNTAgMCAwLTEyNiAxODcgMTg4elwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0sem9vbV9wbHVzOnt3aWR0aDo4NzUsaGVpZ2h0OjFlMyxwYXRoOlwibTEgNzg3bDAtODc1IDg3NSAwIDAgODc1LTg3NSAweiBtNjg3LTUwMGwtMTg3IDAgMC0xODctMTI1IDAgMCAxODctMTg4IDAgMCAxMjUgMTg4IDAgMCAxODcgMTI1IDAgMC0xODcgMTg3IDAgMC0xMjV6XCIsdHJhbnNmb3JtOlwibWF0cml4KDEgMCAwIC0xIDAgODUwKVwifSx6b29tX21pbnVzOnt3aWR0aDo4NzUsaGVpZ2h0OjFlMyxwYXRoOlwibTAgNzg4bDAtODc2IDg3NSAwIDAgODc2LTg3NSAweiBtNjg4LTUwMGwtNTAwIDAgMCAxMjUgNTAwIDAgMC0xMjV6XCIsdHJhbnNmb3JtOlwibWF0cml4KDEgMCAwIC0xIDAgODUwKVwifSxhdXRvc2NhbGU6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6XCJtMjUwIDg1MGwtMTg3IDAtNjMgMCAwLTYyIDAtMTg4IDYzIDAgMCAxODggMTg3IDAgMCA2MnogbTY4OCAwbC0xODggMCAwLTYyIDE4OCAwIDAtMTg4IDYyIDAgMCAxODggMCA2Mi02MiAweiBtLTg3NS05MzhsMCAxODgtNjMgMCAwLTE4OCAwLTYyIDYzIDAgMTg3IDAgMCA2Mi0xODcgMHogbTg3NSAxODhsMC0xODgtMTg4IDAgMC02MiAxODggMCA2MiAwIDAgNjIgMCAxODgtNjIgMHogbS0xMjUgMTg4bC0xIDAtOTMtOTQtMTU2IDE1NiAxNTYgMTU2IDkyLTkzIDIgMCAwIDI1MC0yNTAgMCAwLTIgOTMtOTItMTU2LTE1Ni0xNTYgMTU2IDk0IDkyIDAgMi0yNTAgMCAwLTI1MCAwIDAgOTMgOTMgMTU3LTE1Ni0xNTctMTU2LTkzIDk0IDAgMCAwLTI1MCAyNTAgMCAwIDAtOTQgOTMgMTU2IDE1NyAxNTYtMTU3LTkzLTkzIDAgMCAyNTAgMCAwIDI1MHpcIix0cmFuc2Zvcm06XCJtYXRyaXgoMSAwIDAgLTEgMCA4NTApXCJ9LHRvb2x0aXBfYmFzaWM6e3dpZHRoOjE1MDAsaGVpZ2h0OjFlMyxwYXRoOlwibTM3NSA3MjVsMCAwLTM3NS0zNzUgMzc1LTM3NCAwLTEgMTEyNSAwIDAgNzUwLTExMjUgMHpcIix0cmFuc2Zvcm06XCJtYXRyaXgoMSAwIDAgLTEgMCA4NTApXCJ9LHRvb2x0aXBfY29tcGFyZTp7d2lkdGg6MTEyNSxoZWlnaHQ6MWUzLHBhdGg6XCJtMTg3IDc4NmwwIDItMTg3LTE4OCAxODgtMTg3IDAgMCA5MzcgMCAwIDM3My05MzggMHogbTAtNDk5bDAgMS0xODctMTg4IDE4OC0xODggMCAwIDkzNyAwIDAgMzc2LTkzOC0xelwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0scGxvdGx5bG9nbzp7d2lkdGg6MTU0MixoZWlnaHQ6MWUzLHBhdGg6XCJtMC0xMGgxODJ2LTE0MGgtMTgydjE0MHogbTIyOCAxNDZoMTgzdi0yODZoLTE4M3YyODZ6IG0yMjUgNzE0aDE4MnYtMTAwMGgtMTgydjEwMDB6IG0yMjUtMjg1aDE4MnYtNzE1aC0xODJ2NzE1eiBtMjI1IDE0MmgxODN2LTg1N2gtMTgzdjg1N3ogbTIzMS00MjhoMTgydi00MjloLTE4MnY0Mjl6IG0yMjUtMjkxaDE4M3YtMTM4aC0xODN2MTM4elwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0sXCJ6LWF4aXNcIjp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDpcIm04MzMgNWwtMTcgMTA4djQxbC0xMzAtNjUgMTMwLTY2YzAgMCAwIDM4IDAgMzkgMC0xIDM2LTE0IDM5LTI1IDQtMTUtNi0yMi0xNi0zMC0xNS0xMi0zOS0xNi01Ni0yMC05MC0yMi0xODctMjMtMjc5LTIzLTI2MSAwLTM0MSAzNC0zNTMgNTkgMyA2MCAyMjggMTEwIDIyOCAxMTAtMTQwLTgtMzUxLTM1LTM1MS0xMTYgMC0xMjAgMjkzLTE0MiA0NzQtMTQyIDE1NSAwIDQ3NyAyMiA0NzcgMTQyIDAgNTAtNzQgNzktMTYzIDk2eiBtLTM3NCA5NGMtNTgtNS05OS0yMS05OS00MCAwLTI0IDY1LTQzIDE0NC00MyA3OSAwIDE0MyAxOSAxNDMgNDMgMCAxOS00MiAzNC05OCA0MHYyMTZoODdsLTEzMiAxMzUtMTMzLTEzNWg4OHYtMjE2eiBtMTY3IDUxNWgtMTM2djFjMTYgMTYgMzEgMzQgNDYgNTJsODQgMTA5djU0aC0yMzB2LTcxaDEyNHYtMWMtMTYtMTctMjgtMzItNDQtNTFsLTg5LTExNHYtNTFoMjQ1djcyelwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0sXCIzZF9yb3RhdGVcIjp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDpcIm05MjIgNjYwYy01IDQtOSA3LTE0IDExLTM1OSAyNjMtNTgwLTMxLTU4MC0zMWwtMTAyIDI4IDU4LTQwMGMwIDEgMSAxIDIgMiAxMTggMTA4IDM1MSAyNDkgMzUxIDI0OXMtNjIgMjctMTAwIDQyYzg4IDgzIDIyMiAxODMgMzQ3IDEyMiAxNi04IDMwLTE3IDQ0LTI3LTIgMS00IDItNiA0eiBtMzYtMzI5YzAgMCA2NCAyMjktODggMjk2LTYyIDI3LTEyNCAxNC0xNzUtMTEgMTU3LTc4IDIyNS0yMDggMjQ5LTI2NiA4LTE5IDExLTMxIDExLTMxIDIgNSA2IDE1IDExIDMyLTUtMTMtOC0yMC04LTIweiBtLTc3NS0yMzljNzAtMzEgMTE3LTUwIDE5OC0zMi0xMjEgODAtMTk5IDM0Ni0xOTkgMzQ2bC05Ni0xNS01OC0xMmMwIDAgNTUtMjI2IDE1NS0yODd6IG02MDMgMTMzbC0zMTctMTM5YzAgMCA0LTQgMTktMTQgNy01IDI0LTE1IDI0LTE1cy0xNzctMTQ3LTM4OSA0YzIzNS0yODcgNTM2LTExMiA1MzYtMTEybDMxLTIyIDEwMCAyOTktNC0xeiBtLTI5OC0xNTNjNi00IDE0LTkgMjQtMTUgMCAwLTE3IDEwLTI0IDE1elwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0sY2FtZXJhOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOlwibTUwMCA0NTBjLTgzIDAtMTUwLTY3LTE1MC0xNTAgMC04MyA2Ny0xNTAgMTUwLTE1MCA4MyAwIDE1MCA2NyAxNTAgMTUwIDAgODMtNjcgMTUwLTE1MCAxNTB6IG00MDAgMTUwaC0xMjBjLTE2IDAtMzQgMTMtMzkgMjlsLTMxIDkzYy02IDE1LTIzIDI4LTQwIDI4aC0zNDBjLTE2IDAtMzQtMTMtMzktMjhsLTMxLTk0Yy02LTE1LTIzLTI4LTQwLTI4aC0xMjBjLTU1IDAtMTAwLTQ1LTEwMC0xMDB2LTQ1MGMwLTU1IDQ1LTEwMCAxMDAtMTAwaDgwMGM1NSAwIDEwMCA0NSAxMDAgMTAwdjQ1MGMwIDU1LTQ1IDEwMC0xMDAgMTAweiBtLTQwMC01NTBjLTEzOCAwLTI1MCAxMTItMjUwIDI1MCAwIDEzOCAxMTIgMjUwIDI1MCAyNTAgMTM4IDAgMjUwLTExMiAyNTAtMjUwIDAtMTM4LTExMi0yNTAtMjUwLTI1MHogbTM2NSAzODBjLTE5IDAtMzUgMTYtMzUgMzUgMCAxOSAxNiAzNSAzNSAzNSAxOSAwIDM1LTE2IDM1LTM1IDAtMTktMTYtMzUtMzUtMzV6XCIsdHJhbnNmb3JtOlwibWF0cml4KDEgMCAwIC0xIDAgODUwKVwifSxtb3ZpZTp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDpcIm05MzggNDEzbC0xODgtMTI1YzAgMzctMTcgNzEtNDQgOTQgNjQgMzggMTA3IDEwNyAxMDcgMTg3IDAgMTIxLTk4IDIxOS0yMTkgMjE5LTEyMSAwLTIxOS05OC0yMTktMjE5IDAtNjEgMjUtMTE3IDY2LTE1NmgtMTE1YzMwIDMzIDQ5IDc2IDQ5IDEyNSAwIDEwMy04NCAxODctMTg3IDE4N3MtMTg4LTg0LTE4OC0xODdjMC01NyAyNi0xMDcgNjUtMTQxLTM4LTIyLTY1LTYyLTY1LTEwOXYtMjUwYzAtNzAgNTYtMTI2IDEyNS0xMjZoNTAwYzY5IDAgMTI1IDU2IDEyNSAxMjZsMTg4LTEyNmMzNCAwIDYyIDI4IDYyIDYzdjM3NWMwIDM1LTI4IDYzLTYyIDYzeiBtLTc1MCAwYy02OSAwLTEyNSA1Ni0xMjUgMTI1czU2IDEyNSAxMjUgMTI1IDEyNS01NiAxMjUtMTI1LTU2LTEyNS0xMjUtMTI1eiBtNDA2LTFjLTg3IDAtMTU3IDcwLTE1NyAxNTcgMCA4NiA3MCAxNTYgMTU3IDE1NnMxNTYtNzAgMTU2LTE1Ni03MC0xNTctMTU2LTE1N3pcIix0cmFuc2Zvcm06XCJtYXRyaXgoMSAwIDAgLTEgMCA4NTApXCJ9LHF1ZXN0aW9uOnt3aWR0aDo4NTcuMSxoZWlnaHQ6MWUzLHBhdGg6XCJtNTAwIDgydjEwN3EwIDgtNSAxM3QtMTMgNWgtMTA3cS04IDAtMTMtNXQtNS0xM3YtMTA3cTAtOCA1LTEzdDEzLTVoMTA3cTggMCAxMyA1dDUgMTN6IG0xNDMgMzc1cTAgNDktMzEgOTF0LTc3IDY1LTk1IDIzcS0xMzYgMC0yMDctMTE5LTktMTQgNC0yNGw3NC01NXE0LTQgMTAtNCA5IDAgMTQgNyAzMCAzOCA0OCA1MSAxOSAxNCA0OCAxNCAyNyAwIDQ4LTE1dDIxLTMzcTAtMjEtMTEtMzR0LTM4LTI1cS0zNS0xNi02NS00OHQtMjktNzB2LTIwcTAtOCA1LTEzdDEzLTVoMTA3cTggMCAxMyA1dDUgMTNxMCAxMCAxMiAyN3QzMCAyOHExOCAxMCAyOCAxNnQyNSAxOSAyNSAyNyAxNiAzNCA3IDQ1eiBtMjE0LTEwN3EwLTExNy01Ny0yMTV0LTE1Ni0xNTYtMjE1LTU4LTIxNiA1OC0xNTUgMTU2LTU4IDIxNSA1OCAyMTUgMTU1IDE1NiAyMTYgNTggMjE1LTU4IDE1Ni0xNTYgNTctMjE1elwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0sZGlzazp7d2lkdGg6ODU3LjEsaGVpZ2h0OjFlMyxwYXRoOlwibTIxNC03aDQyOXYyMTRoLTQyOXYtMjE0eiBtNTAwIDBoNzJ2NTAwcTAgOC02IDIxdC0xMSAyMGwtMTU3IDE1NnEtNSA2LTE5IDEydC0yMiA1di0yMzJxMC0yMi0xNS0zOHQtMzgtMTZoLTMyMnEtMjIgMC0zNyAxNnQtMTYgMzh2MjMyaC03MnYtNzE0aDcydjIzMnEwIDIyIDE2IDM4dDM3IDE2aDQ2NXEyMiAwIDM4LTE2dDE1LTM4di0yMzJ6IG0tMjE0IDUxOHYxNzhxMCA4LTUgMTN0LTEzIDVoLTEwN3EtNyAwLTEzLTV0LTUtMTN2LTE3OHEwLTggNS0xM3QxMy01aDEwN3E3IDAgMTMgNXQ1IDEzeiBtMzU3LTE4di01MThxMC0yMi0xNS0zOHQtMzgtMTZoLTc1MHEtMjMgMC0zOCAxNnQtMTYgMzh2NzUwcTAgMjIgMTYgMzh0MzggMTZoNTE3cTIzIDAgNTAtMTJ0NDItMjZsMTU2LTE1N3ExNi0xNSAyNy00MnQxMS00OXpcIix0cmFuc2Zvcm06XCJtYXRyaXgoMSAwIDAgLTEgMCA4NTApXCJ9LGxhc3NvOnt3aWR0aDoxMDMxLGhlaWdodDoxZTMscGF0aDpcIm0xMDE4IDUzOGMtMzYgMjA3LTI5MCAzMzYtNTY4IDI4Ni0yNzctNDgtNDczLTI1Ni00MzYtNDYzIDEwLTU3IDM2LTEwOCA3Ni0xNTEtMTMtNjYgMTEtMTM3IDY4LTE4MyAzNC0yOCA3NS00MSAxMTQtNDJsLTU1LTcwIDAgMGMtMi0xLTMtMi00LTMtMTAtMTQtOC0zNCA1LTQ1IDE0LTExIDM0LTggNDUgNCAxIDEgMiAzIDIgNWwwIDAgMTEzIDE0MGMxNiAxMSAzMSAyNCA0NSA0MCA0IDMgNiA3IDggMTEgNDgtMyAxMDAgMCAxNTEgOSAyNzggNDggNDczIDI1NSA0MzYgNDYyeiBtLTYyNC0zNzljLTgwIDE0LTE0OSA0OC0xOTcgOTYgNDIgNDIgMTA5IDQ3IDE1NiA5IDMzLTI2IDQ3LTY2IDQxLTEwNXogbS0xODctNzRjLTE5IDE2LTMzIDM3LTM5IDYwIDUwLTMyIDEwOS01NSAxNzQtNjgtNDItMjUtOTUtMjQtMTM1IDh6IG0zNjAgNzVjLTM0LTctNjktOS0xMDItOCA4IDYyLTE2IDEyOC02OCAxNzAtNzMgNTktMTc1IDU0LTI0NC01LTkgMjAtMTYgNDAtMjAgNjEtMjggMTU5IDEyMSAzMTcgMzMzIDM1NHM0MDctNjAgNDM0LTIxN2MyOC0xNTktMTIxLTMxOC0zMzMtMzU1elwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0sc2VsZWN0Ym94Ont3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOlwibTAgODUwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg2IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODUgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtLTg1Ny0yODZsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG04NTcgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbS04NTctMjg1bDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtODU3IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0tODU3LTI4NmwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg1IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODYgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHpcIix0cmFuc2Zvcm06XCJtYXRyaXgoMSAwIDAgLTEgMCA4NTApXCJ9LHNwaWtlbGluZTp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDpcIk01MTIgNDA5YzAtNTctNDYtMTA0LTEwMy0xMDQtNTcgMC0xMDQgNDctMTA0IDEwNCAwIDU3IDQ3IDEwMyAxMDQgMTAzIDU3IDAgMTAzLTQ2IDEwMy0xMDN6IG0tMzI3LTM5bDkyIDAgMCA5Mi05MiAweiBtLTE4NSAwbDkyIDAgMCA5Mi05MiAweiBtMzcwLTE4Nmw5MiAwIDAgOTMtOTIgMHogbTAtMTg0bDkyIDAgMCA5Mi05MiAwelwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxLjUgMCAwIC0xLjUgMCA4NTApXCJ9LG5ld3Bsb3RseWxvZ286e25hbWU6XCJuZXdwbG90bHlsb2dvXCIsc3ZnOlwiPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAxMzIgMTMyJz48ZGVmcz48c3R5bGU+LmNscy0xIHtmaWxsOiAjMTE5ZGZmO30gLmNscy0yIHtmaWxsOiAjMjVmZWZkO30gLmNscy0zIHtmaWxsOiAjZmZmO308L3N0eWxlPjwvZGVmcz48dGl0bGU+cGxvdGx5LWxvZ29tYXJrPC90aXRsZT48ZyBpZD0nc3ltYm9sJz48cmVjdCBjbGFzcz0nY2xzLTEnIHdpZHRoPScxMzInIGhlaWdodD0nMTMyJyByeD0nNicgcnk9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9Jzc4JyBjeT0nNTQnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9JzEwMicgY3k9JzMwJyByPSc2Jy8+PGNpcmNsZSBjbGFzcz0nY2xzLTInIGN4PSc3OCcgY3k9JzMwJyByPSc2Jy8+PGNpcmNsZSBjbGFzcz0nY2xzLTInIGN4PSc1NCcgY3k9JzMwJyByPSc2Jy8+PGNpcmNsZSBjbGFzcz0nY2xzLTInIGN4PSczMCcgY3k9JzMwJyByPSc2Jy8+PGNpcmNsZSBjbGFzcz0nY2xzLTInIGN4PSczMCcgY3k9JzU0JyByPSc2Jy8+PHBhdGggY2xhc3M9J2Nscy0zJyBkPSdNMzAsNzJhNiw2LDAsMCwwLTYsNnYyNGE2LDYsMCwwLDAsMTIsMFY3OEE2LDYsMCwwLDAsMzAsNzJaJy8+PHBhdGggY2xhc3M9J2Nscy0zJyBkPSdNNzgsNzJhNiw2LDAsMCwwLTYsNnYyNGE2LDYsMCwwLDAsMTIsMFY3OEE2LDYsMCwwLDAsNzgsNzJaJy8+PHBhdGggY2xhc3M9J2Nscy0zJyBkPSdNNTQsNDhhNiw2LDAsMCwwLTYsNnY0OGE2LDYsMCwwLDAsMTIsMFY1NEE2LDYsMCwwLDAsNTQsNDhaJy8+PHBhdGggY2xhc3M9J2Nscy0zJyBkPSdNMTAyLDQ4YTYsNiwwLDAsMC02LDZ2NDhhNiw2LDAsMCwwLDEyLDBWNTRBNiw2LDAsMCwwLDEwMiw0OFonLz48L2c+PC9zdmc+XCJ9fX0se31dLDM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFuc2Zvcm1zL2FnZ3JlZ2F0ZVwiKX0se1wiLi4vc3JjL3RyYW5zZm9ybXMvYWdncmVnYXRlXCI6MTE4OH1dLDQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvYmFyXCIpfSx7XCIuLi9zcmMvdHJhY2VzL2JhclwiOjg0Nn1dLDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvYmFycG9sYXJcIil9LHtcIi4uL3NyYy90cmFjZXMvYmFycG9sYXJcIjo4NTh9XSw2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL2JveFwiKX0se1wiLi4vc3JjL3RyYWNlcy9ib3hcIjo4Njh9XSw3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvY29tcG9uZW50cy9jYWxlbmRhcnNcIil9LHtcIi4uL3NyYy9jb21wb25lbnRzL2NhbGVuZGFyc1wiOjU3Nn1dLDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvY2FuZGxlc3RpY2tcIil9LHtcIi4uL3NyYy90cmFjZXMvY2FuZGxlc3RpY2tcIjo4Nzd9XSw5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL2NhcnBldFwiKX0se1wiLi4vc3JjL3RyYWNlcy9jYXJwZXRcIjo4OTZ9XSwxMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9jaG9yb3BsZXRoXCIpfSx7XCIuLi9zcmMvdHJhY2VzL2Nob3JvcGxldGhcIjo5MTB9XSwxMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9jb25lXCIpfSx7XCIuLi9zcmMvdHJhY2VzL2NvbmVcIjo5MTh9XSwxMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9jb250b3VyXCIpfSx7XCIuLi9zcmMvdHJhY2VzL2NvbnRvdXJcIjo5MzN9XSwxMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9jb250b3VyY2FycGV0XCIpfSx7XCIuLi9zcmMvdHJhY2VzL2NvbnRvdXJjYXJwZXRcIjo5NDR9XSwxNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL2NvcmVcIil9LHtcIi4uL3NyYy9jb3JlXCI6NjgwfV0sMTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFuc2Zvcm1zL2ZpbHRlclwiKX0se1wiLi4vc3JjL3RyYW5zZm9ybXMvZmlsdGVyXCI6MTE4OX1dLDE2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhbnNmb3Jtcy9ncm91cGJ5XCIpfSx7XCIuLi9zcmMvdHJhbnNmb3Jtcy9ncm91cGJ5XCI6MTE5MH1dLDE3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL2hlYXRtYXBcIil9LHtcIi4uL3NyYy90cmFjZXMvaGVhdG1hcFwiOjk1Nn1dLDE4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL2hlYXRtYXBnbFwiKX0se1wiLi4vc3JjL3RyYWNlcy9oZWF0bWFwZ2xcIjo5NjV9XSwxOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW1cIil9LHtcIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtXCI6OTc3fV0sMjA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtMmRcIil9LHtcIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtMmRcIjo5ODR9XSwyMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZGNvbnRvdXJcIil9LHtcIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtMmRjb250b3VyXCI6OTg4fV0sMjI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9jb3JlXCIpO24ucmVnaXN0ZXIoW3QoXCIuL2JhclwiKSx0KFwiLi9ib3hcIiksdChcIi4vaGVhdG1hcFwiKSx0KFwiLi9oaXN0b2dyYW1cIiksdChcIi4vaGlzdG9ncmFtMmRcIiksdChcIi4vaGlzdG9ncmFtMmRjb250b3VyXCIpLHQoXCIuL2NvbnRvdXJcIiksdChcIi4vc2NhdHRlcnRlcm5hcnlcIiksdChcIi4vdmlvbGluXCIpLHQoXCIuL3dhdGVyZmFsbFwiKSx0KFwiLi9waWVcIiksdChcIi4vc3VuYnVyc3RcIiksdChcIi4vc2NhdHRlcjNkXCIpLHQoXCIuL3N1cmZhY2VcIiksdChcIi4vaXNvc3VyZmFjZVwiKSx0KFwiLi92b2x1bWVcIiksdChcIi4vbWVzaDNkXCIpLHQoXCIuL2NvbmVcIiksdChcIi4vc3RyZWFtdHViZVwiKSx0KFwiLi9zY2F0dGVyZ2VvXCIpLHQoXCIuL2Nob3JvcGxldGhcIiksdChcIi4vc2NhdHRlcmdsXCIpLHQoXCIuL3NwbG9tXCIpLHQoXCIuL3BvaW50Y2xvdWRcIiksdChcIi4vaGVhdG1hcGdsXCIpLHQoXCIuL3BhcmNvb3Jkc1wiKSx0KFwiLi9wYXJjYXRzXCIpLHQoXCIuL3NjYXR0ZXJtYXBib3hcIiksdChcIi4vc2Fua2V5XCIpLHQoXCIuL3RhYmxlXCIpLHQoXCIuL2NhcnBldFwiKSx0KFwiLi9zY2F0dGVyY2FycGV0XCIpLHQoXCIuL2NvbnRvdXJjYXJwZXRcIiksdChcIi4vb2hsY1wiKSx0KFwiLi9jYW5kbGVzdGlja1wiKSx0KFwiLi9zY2F0dGVycG9sYXJcIiksdChcIi4vc2NhdHRlcnBvbGFyZ2xcIiksdChcIi4vYmFycG9sYXJcIildKSxuLnJlZ2lzdGVyKFt0KFwiLi9hZ2dyZWdhdGVcIiksdChcIi4vZmlsdGVyXCIpLHQoXCIuL2dyb3VwYnlcIiksdChcIi4vc29ydFwiKV0pLG4ucmVnaXN0ZXIoW3QoXCIuL2NhbGVuZGFyc1wiKV0pLGUuZXhwb3J0cz1ufSx7XCIuL2FnZ3JlZ2F0ZVwiOjMsXCIuL2JhclwiOjQsXCIuL2JhcnBvbGFyXCI6NSxcIi4vYm94XCI6NixcIi4vY2FsZW5kYXJzXCI6NyxcIi4vY2FuZGxlc3RpY2tcIjo4LFwiLi9jYXJwZXRcIjo5LFwiLi9jaG9yb3BsZXRoXCI6MTAsXCIuL2NvbmVcIjoxMSxcIi4vY29udG91clwiOjEyLFwiLi9jb250b3VyY2FycGV0XCI6MTMsXCIuL2NvcmVcIjoxNCxcIi4vZmlsdGVyXCI6MTUsXCIuL2dyb3VwYnlcIjoxNixcIi4vaGVhdG1hcFwiOjE3LFwiLi9oZWF0bWFwZ2xcIjoxOCxcIi4vaGlzdG9ncmFtXCI6MTksXCIuL2hpc3RvZ3JhbTJkXCI6MjAsXCIuL2hpc3RvZ3JhbTJkY29udG91clwiOjIxLFwiLi9pc29zdXJmYWNlXCI6MjMsXCIuL21lc2gzZFwiOjI0LFwiLi9vaGxjXCI6MjUsXCIuL3BhcmNhdHNcIjoyNixcIi4vcGFyY29vcmRzXCI6MjcsXCIuL3BpZVwiOjI4LFwiLi9wb2ludGNsb3VkXCI6MjksXCIuL3NhbmtleVwiOjMwLFwiLi9zY2F0dGVyM2RcIjozMSxcIi4vc2NhdHRlcmNhcnBldFwiOjMyLFwiLi9zY2F0dGVyZ2VvXCI6MzMsXCIuL3NjYXR0ZXJnbFwiOjM0LFwiLi9zY2F0dGVybWFwYm94XCI6MzUsXCIuL3NjYXR0ZXJwb2xhclwiOjM2LFwiLi9zY2F0dGVycG9sYXJnbFwiOjM3LFwiLi9zY2F0dGVydGVybmFyeVwiOjM4LFwiLi9zb3J0XCI6MzksXCIuL3NwbG9tXCI6NDAsXCIuL3N0cmVhbXR1YmVcIjo0MSxcIi4vc3VuYnVyc3RcIjo0MixcIi4vc3VyZmFjZVwiOjQzLFwiLi90YWJsZVwiOjQ0LFwiLi92aW9saW5cIjo0NSxcIi4vdm9sdW1lXCI6NDYsXCIuL3dhdGVyZmFsbFwiOjQ3fV0sMjM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvaXNvc3VyZmFjZVwiKX0se1wiLi4vc3JjL3RyYWNlcy9pc29zdXJmYWNlXCI6OTkzfV0sMjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvbWVzaDNkXCIpfSx7XCIuLi9zcmMvdHJhY2VzL21lc2gzZFwiOjk5OH1dLDI1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL29obGNcIil9LHtcIi4uL3NyYy90cmFjZXMvb2hsY1wiOjEwMDN9XSwyNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9wYXJjYXRzXCIpfSx7XCIuLi9zcmMvdHJhY2VzL3BhcmNhdHNcIjoxMDEyfV0sMjc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvcGFyY29vcmRzXCIpfSx7XCIuLi9zcmMvdHJhY2VzL3BhcmNvb3Jkc1wiOjEwMjF9XSwyODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9waWVcIil9LHtcIi4uL3NyYy90cmFjZXMvcGllXCI6MTAzMn1dLDI5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3BvaW50Y2xvdWRcIil9LHtcIi4uL3NyYy90cmFjZXMvcG9pbnRjbG91ZFwiOjEwNDF9XSwzMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9zYW5rZXlcIil9LHtcIi4uL3NyYy90cmFjZXMvc2Fua2V5XCI6MTA0N31dLDMxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXIzZFwiKX0se1wiLi4vc3JjL3RyYWNlcy9zY2F0dGVyM2RcIjoxMDg0fV0sMzI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvc2NhdHRlcmNhcnBldFwiKX0se1wiLi4vc3JjL3RyYWNlcy9zY2F0dGVyY2FycGV0XCI6MTA5MH1dLDMzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJnZW9cIil9LHtcIi4uL3NyYy90cmFjZXMvc2NhdHRlcmdlb1wiOjEwOTd9XSwzNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9zY2F0dGVyZ2xcIil9LHtcIi4uL3NyYy90cmFjZXMvc2NhdHRlcmdsXCI6MTEwNX1dLDM1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJtYXBib3hcIil9LHtcIi4uL3NyYy90cmFjZXMvc2NhdHRlcm1hcGJveFwiOjExMTF9XSwzNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9zY2F0dGVycG9sYXJcIil9LHtcIi4uL3NyYy90cmFjZXMvc2NhdHRlcnBvbGFyXCI6MTExOH1dLDM3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJwb2xhcmdsXCIpfSx7XCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJwb2xhcmdsXCI6MTEyMn1dLDM4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJ0ZXJuYXJ5XCIpfSx7XCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJ0ZXJuYXJ5XCI6MTEyOH1dLDM5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhbnNmb3Jtcy9zb3J0XCIpfSx7XCIuLi9zcmMvdHJhbnNmb3Jtcy9zb3J0XCI6MTE5Mn1dLDQwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3NwbG9tXCIpfSx7XCIuLi9zcmMvdHJhY2VzL3NwbG9tXCI6MTEzM31dLDQxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3N0cmVhbXR1YmVcIil9LHtcIi4uL3NyYy90cmFjZXMvc3RyZWFtdHViZVwiOjExMzh9XSw0MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9zdW5idXJzdFwiKX0se1wiLi4vc3JjL3RyYWNlcy9zdW5idXJzdFwiOjExNDR9XSw0MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9zdXJmYWNlXCIpfSx7XCIuLi9zcmMvdHJhY2VzL3N1cmZhY2VcIjoxMTUzfV0sNDQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvdGFibGVcIil9LHtcIi4uL3NyYy90cmFjZXMvdGFibGVcIjoxMTYxfV0sNDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvdmlvbGluXCIpfSx7XCIuLi9zcmMvdHJhY2VzL3Zpb2xpblwiOjExNjl9XSw0NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy92b2x1bWVcIil9LHtcIi4uL3NyYy90cmFjZXMvdm9sdW1lXCI6MTE3N31dLDQ3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3dhdGVyZmFsbFwiKX0se1wiLi4vc3JjL3RyYWNlcy93YXRlcmZhbGxcIjoxMTgzfV0sNDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9KHQ9dHx8e30pLmV5ZXx8WzAsMCwxXSxyPXQuY2VudGVyfHxbMCwwLDBdLHM9dC51cHx8WzAsMSwwXSxsPXQuZGlzdGFuY2VMaW1pdHN8fFswLDEvMF0sYz10Lm1vZGV8fFwidHVybnRhYmxlXCIsdT1uKCksaD1pKCksZj1hKCk7cmV0dXJuIHUuc2V0RGlzdGFuY2VMaW1pdHMobFswXSxsWzFdKSx1Lmxvb2tBdCgwLGUscixzKSxoLnNldERpc3RhbmNlTGltaXRzKGxbMF0sbFsxXSksaC5sb29rQXQoMCxlLHIscyksZi5zZXREaXN0YW5jZUxpbWl0cyhsWzBdLGxbMV0pLGYubG9va0F0KDAsZSxyLHMpLG5ldyBvKHt0dXJudGFibGU6dSxvcmJpdDpoLG1hdHJpeDpmfSxjKX07dmFyIG49dChcInR1cm50YWJsZS1jYW1lcmEtY29udHJvbGxlclwiKSxpPXQoXCJvcmJpdC1jYW1lcmEtY29udHJvbGxlclwiKSxhPXQoXCJtYXRyaXgtY2FtZXJhLWNvbnRyb2xsZXJcIik7ZnVuY3Rpb24gbyh0LGUpe3RoaXMuX2NvbnRyb2xsZXJOYW1lcz1PYmplY3Qua2V5cyh0KSx0aGlzLl9jb250cm9sbGVyTGlzdD10aGlzLl9jb250cm9sbGVyTmFtZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSksdGhpcy5fbW9kZT1lLHRoaXMuX2FjdGl2ZT10W2VdLHRoaXMuX2FjdGl2ZXx8KHRoaXMuX21vZGU9XCJ0dXJudGFibGVcIix0aGlzLl9hY3RpdmU9dC50dXJudGFibGUpLHRoaXMubW9kZXM9dGhpcy5fY29udHJvbGxlck5hbWVzLHRoaXMuY29tcHV0ZWRNYXRyaXg9dGhpcy5fYWN0aXZlLmNvbXB1dGVkTWF0cml4LHRoaXMuY29tcHV0ZWRFeWU9dGhpcy5fYWN0aXZlLmNvbXB1dGVkRXllLHRoaXMuY29tcHV0ZWRVcD10aGlzLl9hY3RpdmUuY29tcHV0ZWRVcCx0aGlzLmNvbXB1dGVkQ2VudGVyPXRoaXMuX2FjdGl2ZS5jb21wdXRlZENlbnRlcix0aGlzLmNvbXB1dGVkUmFkaXVzPXRoaXMuX2FjdGl2ZS5jb21wdXRlZFJhZGl1c312YXIgcz1vLnByb3RvdHlwZTtbW1wiZmx1c2hcIiwxXSxbXCJpZGxlXCIsMV0sW1wibG9va0F0XCIsNF0sW1wicm90YXRlXCIsNF0sW1wicGFuXCIsNF0sW1widHJhbnNsYXRlXCIsNF0sW1wic2V0TWF0cml4XCIsMl0sW1wic2V0RGlzdGFuY2VMaW1pdHNcIiwyXSxbXCJzZXREaXN0YW5jZVwiLDJdXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10WzBdLHI9W10sbj0wO248dFsxXTsrK24pci5wdXNoKFwiYVwiK24pO3ZhciBpPVwidmFyIGNjPXRoaXMuX2NvbnRyb2xsZXJMaXN0O2Zvcih2YXIgaT0wO2k8Y2MubGVuZ3RoOysraSl7Y2NbaV0uXCIrdFswXStcIihcIityLmpvaW4oKStcIil9XCI7c1tlXT1GdW5jdGlvbi5hcHBseShudWxsLHIuY29uY2F0KGkpKX0pLHMucmVjYWxjTWF0cml4PWZ1bmN0aW9uKHQpe3RoaXMuX2FjdGl2ZS5yZWNhbGNNYXRyaXgodCl9LHMuZ2V0RGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FjdGl2ZS5nZXREaXN0YW5jZSh0KX0scy5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYWN0aXZlLmdldERpc3RhbmNlTGltaXRzKHQpfSxzLmxhc3RUPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZS5sYXN0VCgpfSxzLnNldE1vZGU9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuX21vZGUpe3ZhciBlPXRoaXMuX2NvbnRyb2xsZXJOYW1lcy5pbmRleE9mKHQpO2lmKCEoZTwwKSl7dmFyIHI9dGhpcy5fYWN0aXZlLG49dGhpcy5fY29udHJvbGxlckxpc3RbZV0saT1NYXRoLm1heChyLmxhc3RUKCksbi5sYXN0VCgpKTtyLnJlY2FsY01hdHJpeChpKSxuLnNldE1hdHJpeChpLHIuY29tcHV0ZWRNYXRyaXgpLHRoaXMuX2FjdGl2ZT1uLHRoaXMuX21vZGU9dCx0aGlzLmNvbXB1dGVkTWF0cml4PXRoaXMuX2FjdGl2ZS5jb21wdXRlZE1hdHJpeCx0aGlzLmNvbXB1dGVkRXllPXRoaXMuX2FjdGl2ZS5jb21wdXRlZEV5ZSx0aGlzLmNvbXB1dGVkVXA9dGhpcy5fYWN0aXZlLmNvbXB1dGVkVXAsdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLl9hY3RpdmUuY29tcHV0ZWRDZW50ZXIsdGhpcy5jb21wdXRlZFJhZGl1cz10aGlzLl9hY3RpdmUuY29tcHV0ZWRSYWRpdXN9fX0scy5nZXRNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vZGV9fSx7XCJtYXRyaXgtY2FtZXJhLWNvbnRyb2xsZXJcIjo0MjYsXCJvcmJpdC1jYW1lcmEtY29udHJvbGxlclwiOjQ0OSxcInR1cm50YWJsZS1jYW1lcmEtY29udHJvbGxlclwiOjUyN31dLDQ5OltmdW5jdGlvbih0LGUscil7dmFyIG4saTtuPXRoaXMsaT1mdW5jdGlvbih0LGUscixuKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBpKHQpe3JldHVybiB0LnRhcmdldC5kZXB0aH1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIHQuc291cmNlTGlua3MubGVuZ3RoP3QuZGVwdGg6ZS0xfWZ1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gYyh0LnNvdXJjZSxlLnNvdXJjZSl8fHQuaW5kZXgtZS5pbmRleH1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIGModC50YXJnZXQsZS50YXJnZXQpfHx0LmluZGV4LWUuaW5kZXh9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiB0LnkwLWUueTB9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC52YWx1ZX1mdW5jdGlvbiBoKHQpe3JldHVybih0LnkwK3QueTEpLzJ9ZnVuY3Rpb24gZih0KXtyZXR1cm4gaCh0LnNvdXJjZSkqdC52YWx1ZX1mdW5jdGlvbiBwKHQpe3JldHVybiBoKHQudGFyZ2V0KSp0LnZhbHVlfWZ1bmN0aW9uIGQodCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdC5ub2Rlc31mdW5jdGlvbiB2KHQpe3JldHVybiB0LmxpbmtzfWZ1bmN0aW9uIG0odCxlKXt2YXIgcj10LmdldChlKTtpZighcil0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nOiBcIitlKTtyZXR1cm4gcn1mdW5jdGlvbiB5KHQpe3JldHVyblt0LnNvdXJjZS54MSx0LnkwXX1mdW5jdGlvbiB4KHQpe3JldHVyblt0LnRhcmdldC54MCx0LnkxXX10LnNhbmtleT1mdW5jdGlvbigpe3ZhciB0PTAsbj0wLGk9MSx5PTEseD0yNCxiPTgsXz1kLHc9YSxrPWcsQT12LFQ9MzIsTT0yLzM7ZnVuY3Rpb24gUygpe3ZhciBhPXtub2RlczprLmFwcGx5KG51bGwsYXJndW1lbnRzKSxsaW5rczpBLmFwcGx5KG51bGwsYXJndW1lbnRzKX07cmV0dXJuIGZ1bmN0aW9uKHQpe3Qubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0LGUpe3QuaW5kZXg9ZSx0LnNvdXJjZUxpbmtzPVtdLHQudGFyZ2V0TGlua3M9W119KTt2YXIgZT1yLm1hcCh0Lm5vZGVzLF8pO3QubGlua3MuZm9yRWFjaChmdW5jdGlvbih0LHIpe3QuaW5kZXg9cjt2YXIgbj10LnNvdXJjZSxpPXQudGFyZ2V0O1wib2JqZWN0XCIhPXR5cGVvZiBuJiYobj10LnNvdXJjZT1tKGUsbikpLFwib2JqZWN0XCIhPXR5cGVvZiBpJiYoaT10LnRhcmdldD1tKGUsaSkpLG4uc291cmNlTGlua3MucHVzaCh0KSxpLnRhcmdldExpbmtzLnB1c2godCl9KX0oYSksZnVuY3Rpb24odCl7dC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QudmFsdWU9TWF0aC5tYXgoZS5zdW0odC5zb3VyY2VMaW5rcyx1KSxlLnN1bSh0LnRhcmdldExpbmtzLHUpKX0pfShhKSxmdW5jdGlvbihlKXt2YXIgcixuLGE7Zm9yKHI9ZS5ub2RlcyxuPVtdLGE9MDtyLmxlbmd0aDsrK2Escj1uLG49W10pci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZGVwdGg9YSx0LnNvdXJjZUxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7bi5pbmRleE9mKHQudGFyZ2V0KTwwJiZuLnB1c2godC50YXJnZXQpfSl9KTtmb3Iocj1lLm5vZGVzLG49W10sYT0wO3IubGVuZ3RoOysrYSxyPW4sbj1bXSlyLmZvckVhY2goZnVuY3Rpb24odCl7dC5oZWlnaHQ9YSx0LnRhcmdldExpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7bi5pbmRleE9mKHQuc291cmNlKTwwJiZuLnB1c2godC5zb3VyY2UpfSl9KTt2YXIgbz0oaS10LXgpLyhhLTEpO2Uubm9kZXMuZm9yRWFjaChmdW5jdGlvbihlKXtlLngxPShlLngwPXQrTWF0aC5tYXgoMCxNYXRoLm1pbihhLTEsTWF0aC5mbG9vcih3LmNhbGwobnVsbCxlLGEpKSkpKm8pK3h9KX0oYSksZnVuY3Rpb24odCl7dmFyIGk9ci5uZXN0KCkua2V5KGZ1bmN0aW9uKHQpe3JldHVybiB0LngwfSkuc29ydEtleXMoZS5hc2NlbmRpbmcpLmVudHJpZXModC5ub2RlcykubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlc30pOyhmdW5jdGlvbigpe3ZhciByPWUubWF4KGksZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RofSksYT1NKih5LW4pLyhyLTEpO2I+YSYmKGI9YSk7dmFyIG89ZS5taW4oaSxmdW5jdGlvbih0KXtyZXR1cm4oeS1uLSh0Lmxlbmd0aC0xKSpiKS9lLnN1bSh0LHUpfSk7aS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaChmdW5jdGlvbih0LGUpe3QueTE9KHQueTA9ZSkrdC52YWx1ZSpvfSl9KSx0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC53aWR0aD10LnZhbHVlKm99KX0pKCksZCgpO2Zvcih2YXIgYT0xLG89VDtvPjA7LS1vKWwoYSo9Ljk5KSxkKCkscyhhKSxkKCk7ZnVuY3Rpb24gcyh0KXtpLmZvckVhY2goZnVuY3Rpb24ocil7ci5mb3JFYWNoKGZ1bmN0aW9uKHIpe2lmKHIudGFyZ2V0TGlua3MubGVuZ3RoKXt2YXIgbj0oZS5zdW0oci50YXJnZXRMaW5rcyxmKS9lLnN1bShyLnRhcmdldExpbmtzLHUpLWgocikpKnQ7ci55MCs9bixyLnkxKz1ufX0pfSl9ZnVuY3Rpb24gbCh0KXtpLnNsaWNlKCkucmV2ZXJzZSgpLmZvckVhY2goZnVuY3Rpb24ocil7ci5mb3JFYWNoKGZ1bmN0aW9uKHIpe2lmKHIuc291cmNlTGlua3MubGVuZ3RoKXt2YXIgbj0oZS5zdW0oci5zb3VyY2VMaW5rcyxwKS9lLnN1bShyLnNvdXJjZUxpbmtzLHUpLWgocikpKnQ7ci55MCs9bixyLnkxKz1ufX0pfSl9ZnVuY3Rpb24gZCgpe2kuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZSxyLGksYT1uLG89dC5sZW5ndGg7Zm9yKHQuc29ydChjKSxpPTA7aTxvOysraSllPXRbaV0sKHI9YS1lLnkwKT4wJiYoZS55MCs9cixlLnkxKz1yKSxhPWUueTErYjtpZigocj1hLWIteSk+MClmb3IoYT1lLnkwLT1yLGUueTEtPXIsaT1vLTI7aT49MDstLWkpZT10W2ldLChyPWUueTErYi1hKT4wJiYoZS55MC09cixlLnkxLT1yKSxhPWUueTB9KX19KGEpLEUoYSksYX1mdW5jdGlvbiBFKHQpe3Qubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnNvdXJjZUxpbmtzLnNvcnQobCksdC50YXJnZXRMaW5rcy5zb3J0KHMpfSksdC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQueTAscj1lO3Quc291cmNlTGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LnkwPWUrdC53aWR0aC8yLGUrPXQud2lkdGh9KSx0LnRhcmdldExpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC55MT1yK3Qud2lkdGgvMixyKz10LndpZHRofSl9KX1yZXR1cm4gUy51cGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIEUodCksdH0sUy5ub2RlSWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8odCksUyk6X30sUy5ub2RlQWxpZ249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8odCksUyk6d30sUy5ub2RlV2lkdGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHg9K3QsUyk6eH0sUy5ub2RlUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0rdCxTKTpifSxTLm5vZGVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhrPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpvKHQpLFMpOmt9LFMubGlua3M9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEE9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8odCksUyk6QX0sUy5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW49MCxpPStlWzBdLHk9K2VbMV0sUyk6W2ktdCx5LW5dfSxTLmV4dGVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rZVswXVswXSxpPStlWzFdWzBdLG49K2VbMF1bMV0seT0rZVsxXVsxXSxTKTpbW3Qsbl0sW2kseV1dfSxTLml0ZXJhdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9K3QsUyk6VH0sU30sdC5zYW5rZXlDZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQudGFyZ2V0TGlua3MubGVuZ3RoP3QuZGVwdGg6dC5zb3VyY2VMaW5rcy5sZW5ndGg/ZS5taW4odC5zb3VyY2VMaW5rcyxpKS0xOjB9LHQuc2Fua2V5TGVmdD1mdW5jdGlvbih0KXtyZXR1cm4gdC5kZXB0aH0sdC5zYW5rZXlSaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiBlLTEtdC5oZWlnaHR9LHQuc2Fua2V5SnVzdGlmeT1hLHQuc2Fua2V5TGlua0hvcml6b250YWw9ZnVuY3Rpb24oKXtyZXR1cm4gbi5saW5rSG9yaXpvbnRhbCgpLnNvdXJjZSh5KS50YXJnZXQoeCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSxcIm9iamVjdFwiPT10eXBlb2YgciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGU/aShyLHQoXCJkMy1hcnJheVwiKSx0KFwiZDMtY29sbGVjdGlvblwiKSx0KFwiZDMtc2hhcGVcIikpOmkobi5kMz1uLmQzfHx7fSxuLmQzLG4uZDMsbi5kMyl9LHtcImQzLWFycmF5XCI6MTQzLFwiZDMtY29sbGVjdGlvblwiOjE0NCxcImQzLXNoYXBlXCI6MTUzfV0sNTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1cInVuZGVmaW5lZFwiPT10eXBlb2YgV2Vha01hcD90KFwid2Vhay1tYXBcIik6V2Vha01hcCxpPXQoXCJnbC1idWZmZXJcIiksYT10KFwiZ2wtdmFvXCIpLG89bmV3IG47ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW8uZ2V0KHQpLHI9ZSYmKGUuX3RyaWFuZ2xlQnVmZmVyLmhhbmRsZXx8ZS5fdHJpYW5nbGVCdWZmZXIuYnVmZmVyKTtpZighcnx8IXQuaXNCdWZmZXIocikpe3ZhciBuPWkodCxuZXcgRmxvYXQzMkFycmF5KFstMSwtMSwtMSw0LDQsLTFdKSk7KGU9YSh0LFt7YnVmZmVyOm4sdHlwZTp0LkZMT0FULHNpemU6Mn1dKSkuX3RyaWFuZ2xlQnVmZmVyPW4sby5zZXQodCxlKX1lLmJpbmQoKSx0LmRyYXdBcnJheXModC5UUklBTkdMRVMsMCwzKSxlLnVuYmluZCgpfX0se1wiZ2wtYnVmZmVyXCI6MjM4LFwiZ2wtdmFvXCI6MzIwLFwid2Vhay1tYXBcIjo1Mzd9XSw1MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0wLHI9MCxuPTAsaT0wO3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXt2YXIgYT0odD10LnNsaWNlKCkpWzBdLG89YS50b1VwcGVyQ2FzZSgpO2lmKGEhPW8pc3dpdGNoKHRbMF09byxhKXtjYXNlXCJhXCI6dFs2XSs9bix0WzddKz1pO2JyZWFrO2Nhc2VcInZcIjp0WzFdKz1pO2JyZWFrO2Nhc2VcImhcIjp0WzFdKz1uO2JyZWFrO2RlZmF1bHQ6Zm9yKHZhciBzPTE7czx0Lmxlbmd0aDspdFtzKytdKz1uLHRbcysrXSs9aX1zd2l0Y2gobyl7Y2FzZVwiWlwiOm49ZSxpPXI7YnJlYWs7Y2FzZVwiSFwiOm49dFsxXTticmVhaztjYXNlXCJWXCI6aT10WzFdO2JyZWFrO2Nhc2VcIk1cIjpuPWU9dFsxXSxpPXI9dFsyXTticmVhaztkZWZhdWx0Om49dFt0Lmxlbmd0aC0yXSxpPXRbdC5sZW5ndGgtMV19cmV0dXJuIHR9KX19LHt9XSw1MjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCJwYWQtbGVmdFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2U9XCJudW1iZXJcIj09dHlwZW9mIGU/ZToxLHI9cnx8XCI6IFwiO3ZhciBpPXQuc3BsaXQoL1xccj9cXG4vKSxhPVN0cmluZyhpLmxlbmd0aCtlLTEpLmxlbmd0aDtyZXR1cm4gaS5tYXAoZnVuY3Rpb24odCxpKXt2YXIgbz1pK2Uscz1TdHJpbmcobykubGVuZ3RoLGw9bihvLGEtcyk7cmV0dXJuIGwrcit0fSkuam9pbihcIlxcblwiKX19LHtcInBhZC1sZWZ0XCI6NDUwfV0sNTM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoMD09PWUpcmV0dXJuW107aWYoMT09PWUpcmV0dXJuWzBdO2Zvcih2YXIgcj10WzBdLmxlbmd0aCxuPVt0WzBdXSxhPVswXSxvPTE7bzxlOysrbylpZihuLnB1c2godFtvXSksaShuLHIpKXtpZihhLnB1c2gobyksYS5sZW5ndGg9PT1yKzEpcmV0dXJuIGF9ZWxzZSBuLnBvcCgpO3JldHVybiBhfTt2YXIgbj10KFwicm9idXN0LW9yaWVudGF0aW9uXCIpO2Z1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUrMSksaT0wO2k8dC5sZW5ndGg7KytpKXJbaV09dFtpXTtmb3IoaT0wO2k8PXQubGVuZ3RoOysraSl7Zm9yKHZhciBhPXQubGVuZ3RoO2E8PWU7KythKXtmb3IodmFyIG89bmV3IEFycmF5KGUpLHM9MDtzPGU7KytzKW9bc109TWF0aC5wb3coYSsxLWkscyk7clthXT1vfWlmKG4uYXBwbHkodm9pZCAwLHIpKXJldHVybiEwfXJldHVybiExfX0se1wicm9idXN0LW9yaWVudGF0aW9uXCI6NDk1fV0sNTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihlKS5maWx0ZXIoZnVuY3Rpb24ocil7Zm9yKHZhciBuPW5ldyBBcnJheShyLmxlbmd0aCksYT0wO2E8ci5sZW5ndGg7KythKW5bYV09ZVtyW2FdXTtyZXR1cm4gaShuKSp0PDF9KX07dmFyIG49dChcImRlbGF1bmF5LXRyaWFuZ3VsYXRlXCIpLGk9dChcImNpcmN1bXJhZGl1c1wiKX0se2NpcmN1bXJhZGl1czoxMDUsXCJkZWxhdW5heS10cmlhbmd1bGF0ZVwiOjE1N31dLDU1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkobih0LGUpKX07dmFyIG49dChcImFscGhhLWNvbXBsZXhcIiksaT10KFwic2ltcGxpY2lhbC1jb21wbGV4LWJvdW5kYXJ5XCIpfSx7XCJhbHBoYS1jb21wbGV4XCI6NTQsXCJzaW1wbGljaWFsLWNvbXBsZXgtYm91bmRhcnlcIjo1MDJ9XSw1NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCF0fHxudWxsPT10Lmxlbmd0aCl0aHJvdyBFcnJvcihcIkFyZ3VtZW50IHNob3VsZCBiZSBhbiBhcnJheVwiKTtlPW51bGw9PWU/MTpNYXRoLmZsb29yKGUpO2Zvcih2YXIgcj1BcnJheSgyKmUpLG49MDtuPGU7bisrKXtmb3IodmFyIGk9LTEvMCxhPTEvMCxvPW4scz10Lmxlbmd0aDtvPHM7bys9ZSl0W29dPmkmJihpPXRbb10pLHRbb108YSYmKGE9dFtvXSk7cltuXT1hLHJbZStuXT1pfXJldHVybiByfX0se31dLDU3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImFycmF5LWJvdW5kc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKCF0fHxudWxsPT10Lmxlbmd0aCl0aHJvdyBFcnJvcihcIkFyZ3VtZW50IHNob3VsZCBiZSBhbiBhcnJheVwiKTtudWxsPT1lJiYoZT0xKTtudWxsPT1yJiYocj1uKHQsZSkpO2Zvcih2YXIgaT0wO2k8ZTtpKyspe3ZhciBhPXJbZStpXSxvPXJbaV0scz1pLGw9dC5sZW5ndGg7aWYoYT09PTEvMCYmbz09PS0xLzApZm9yKHM9aTtzPGw7cys9ZSl0W3NdPXRbc109PT1hPzE6dFtzXT09PW8/MDouNTtlbHNlIGlmKGE9PT0xLzApZm9yKHM9aTtzPGw7cys9ZSl0W3NdPXRbc109PT1hPzE6MDtlbHNlIGlmKG89PT0tMS8wKWZvcihzPWk7czxsO3MrPWUpdFtzXT10W3NdPT09bz8wOjE7ZWxzZXt2YXIgYz1hLW87Zm9yKHM9aTtzPGw7cys9ZSl0W3NdPTA9PT1jPy41Oih0W3NdLW8pL2N9fXJldHVybiB0fX0se1wiYXJyYXktYm91bmRzXCI6NTZ9XSw1ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPVwibnVtYmVyXCI9PXR5cGVvZiB0LG49XCJudW1iZXJcIj09dHlwZW9mIGU7ciYmIW4/KGU9dCx0PTApOnJ8fG58fCh0PTAsZT0wKTt2YXIgaT0oZXw9MCktKHR8PTApO2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoXCJhcnJheSBsZW5ndGggbXVzdCBiZSBwb3NpdGl2ZVwiKTtmb3IodmFyIGE9bmV3IEFycmF5KGkpLG89MCxzPXQ7bzxpO28rKyxzKyspYVtvXT1zO3JldHVybiBhfX0se31dLDU5OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZih0PT09ZSlyZXR1cm4gMDtmb3IodmFyIHI9dC5sZW5ndGgsbj1lLmxlbmd0aCxpPTAsYT1NYXRoLm1pbihyLG4pO2k8YTsrK2kpaWYodFtpXSE9PWVbaV0pe3I9dFtpXSxuPWVbaV07YnJlYWt9cmV0dXJuIHI8bj8tMTpuPHI/MTowfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHIuQnVmZmVyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiByLkJ1ZmZlci5pc0J1ZmZlcj9yLkJ1ZmZlci5pc0J1ZmZlcih0KTohKG51bGw9PXR8fCF0Ll9pc0J1ZmZlcil9dmFyIGE9dChcInV0aWwvXCIpLG89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxzPUFycmF5LnByb3RvdHlwZS5zbGljZSxsPVwiZm9vXCI9PT1mdW5jdGlvbigpe30ubmFtZTtmdW5jdGlvbiBjKHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gdSh0KXtyZXR1cm4haSh0KSYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHIuQXJyYXlCdWZmZXImJihcImZ1bmN0aW9uXCI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KHQpOiEhdCYmKHQgaW5zdGFuY2VvZiBEYXRhVmlld3x8ISEodC5idWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSkpfXZhciBoPWUuZXhwb3J0cz1tLGY9L1xccypmdW5jdGlvblxccysoW15cXChcXHNdKilcXHMqLztmdW5jdGlvbiBwKHQpe2lmKGEuaXNGdW5jdGlvbih0KSl7aWYobClyZXR1cm4gdC5uYW1lO3ZhciBlPXQudG9TdHJpbmcoKS5tYXRjaChmKTtyZXR1cm4gZSYmZVsxXX19ZnVuY3Rpb24gZCh0LGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0P3QubGVuZ3RoPGU/dDp0LnNsaWNlKDAsZSk6dH1mdW5jdGlvbiBnKHQpe2lmKGx8fCFhLmlzRnVuY3Rpb24odCkpcmV0dXJuIGEuaW5zcGVjdCh0KTt2YXIgZT1wKHQpO3JldHVyblwiW0Z1bmN0aW9uXCIrKGU/XCI6IFwiK2U6XCJcIikrXCJdXCJ9ZnVuY3Rpb24gdih0LGUscixuLGkpe3Rocm93IG5ldyBoLkFzc2VydGlvbkVycm9yKHttZXNzYWdlOnIsYWN0dWFsOnQsZXhwZWN0ZWQ6ZSxvcGVyYXRvcjpuLHN0YWNrU3RhcnRGdW5jdGlvbjppfSl9ZnVuY3Rpb24gbSh0LGUpe3R8fHYodCwhMCxlLFwiPT1cIixoLm9rKX1mdW5jdGlvbiB5KHQsZSxyLG8pe2lmKHQ9PT1lKXJldHVybiEwO2lmKGkodCkmJmkoZSkpcmV0dXJuIDA9PT1uKHQsZSk7aWYoYS5pc0RhdGUodCkmJmEuaXNEYXRlKGUpKXJldHVybiB0LmdldFRpbWUoKT09PWUuZ2V0VGltZSgpO2lmKGEuaXNSZWdFeHAodCkmJmEuaXNSZWdFeHAoZSkpcmV0dXJuIHQuc291cmNlPT09ZS5zb3VyY2UmJnQuZ2xvYmFsPT09ZS5nbG9iYWwmJnQubXVsdGlsaW5lPT09ZS5tdWx0aWxpbmUmJnQubGFzdEluZGV4PT09ZS5sYXN0SW5kZXgmJnQuaWdub3JlQ2FzZT09PWUuaWdub3JlQ2FzZTtpZihudWxsIT09dCYmXCJvYmplY3RcIj09dHlwZW9mIHR8fG51bGwhPT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZSl7aWYodSh0KSYmdShlKSYmYyh0KT09PWMoZSkmJiEodCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheXx8dCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSkpcmV0dXJuIDA9PT1uKG5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSxuZXcgVWludDhBcnJheShlLmJ1ZmZlcikpO2lmKGkodCkhPT1pKGUpKXJldHVybiExO3ZhciBsPShvPW98fHthY3R1YWw6W10sZXhwZWN0ZWQ6W119KS5hY3R1YWwuaW5kZXhPZih0KTtyZXR1cm4tMSE9PWwmJmw9PT1vLmV4cGVjdGVkLmluZGV4T2YoZSl8fChvLmFjdHVhbC5wdXNoKHQpLG8uZXhwZWN0ZWQucHVzaChlKSxmdW5jdGlvbih0LGUscixuKXtpZihudWxsPT10fHxudWxsPT1lKXJldHVybiExO2lmKGEuaXNQcmltaXRpdmUodCl8fGEuaXNQcmltaXRpdmUoZSkpcmV0dXJuIHQ9PT1lO2lmKHImJk9iamVjdC5nZXRQcm90b3R5cGVPZih0KSE9PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKSlyZXR1cm4hMTt2YXIgaT14KHQpLG89eChlKTtpZihpJiYhb3x8IWkmJm8pcmV0dXJuITE7aWYoaSlyZXR1cm4gdD1zLmNhbGwodCksZT1zLmNhbGwoZSkseSh0LGUscik7dmFyIGwsYyx1PXcodCksaD13KGUpO2lmKHUubGVuZ3RoIT09aC5sZW5ndGgpcmV0dXJuITE7Zm9yKHUuc29ydCgpLGguc29ydCgpLGM9dS5sZW5ndGgtMTtjPj0wO2MtLSlpZih1W2NdIT09aFtjXSlyZXR1cm4hMTtmb3IoYz11Lmxlbmd0aC0xO2M+PTA7Yy0tKWlmKGw9dVtjXSwheSh0W2xdLGVbbF0scixuKSlyZXR1cm4hMTtyZXR1cm4hMH0odCxlLHIsbykpfXJldHVybiByP3Q9PT1lOnQ9PWV9ZnVuY3Rpb24geCh0KXtyZXR1cm5cIltvYmplY3QgQXJndW1lbnRzXVwiPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gYih0LGUpe2lmKCF0fHwhZSlyZXR1cm4hMTtpZihcIltvYmplY3QgUmVnRXhwXVwiPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIGUudGVzdCh0KTt0cnl7aWYodCBpbnN0YW5jZW9mIGUpcmV0dXJuITB9Y2F0Y2godCl7fXJldHVybiFFcnJvci5pc1Byb3RvdHlwZU9mKGUpJiYhMD09PWUuY2FsbCh7fSx0KX1mdW5jdGlvbiBfKHQsZSxyLG4pe3ZhciBpO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJibG9ja1wiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO1wic3RyaW5nXCI9PXR5cGVvZiByJiYobj1yLHI9bnVsbCksaT1mdW5jdGlvbih0KXt2YXIgZTt0cnl7dCgpfWNhdGNoKHQpe2U9dH1yZXR1cm4gZX0oZSksbj0ociYmci5uYW1lP1wiIChcIityLm5hbWUrXCIpLlwiOlwiLlwiKSsobj9cIiBcIituOlwiLlwiKSx0JiYhaSYmdihpLHIsXCJNaXNzaW5nIGV4cGVjdGVkIGV4Y2VwdGlvblwiK24pO3ZhciBvPVwic3RyaW5nXCI9PXR5cGVvZiBuLHM9IXQmJmkmJiFyO2lmKCghdCYmYS5pc0Vycm9yKGkpJiZvJiZiKGkscil8fHMpJiZ2KGkscixcIkdvdCB1bndhbnRlZCBleGNlcHRpb25cIituKSx0JiZpJiZyJiYhYihpLHIpfHwhdCYmaSl0aHJvdyBpfWguQXNzZXJ0aW9uRXJyb3I9ZnVuY3Rpb24odCl7dmFyIGU7dGhpcy5uYW1lPVwiQXNzZXJ0aW9uRXJyb3JcIix0aGlzLmFjdHVhbD10LmFjdHVhbCx0aGlzLmV4cGVjdGVkPXQuZXhwZWN0ZWQsdGhpcy5vcGVyYXRvcj10Lm9wZXJhdG9yLHQubWVzc2FnZT8odGhpcy5tZXNzYWdlPXQubWVzc2FnZSx0aGlzLmdlbmVyYXRlZE1lc3NhZ2U9ITEpOih0aGlzLm1lc3NhZ2U9ZChnKChlPXRoaXMpLmFjdHVhbCksMTI4KStcIiBcIitlLm9wZXJhdG9yK1wiIFwiK2QoZyhlLmV4cGVjdGVkKSwxMjgpLHRoaXMuZ2VuZXJhdGVkTWVzc2FnZT0hMCk7dmFyIHI9dC5zdGFja1N0YXJ0RnVuY3Rpb258fHY7aWYoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxyKTtlbHNle3ZhciBuPW5ldyBFcnJvcjtpZihuLnN0YWNrKXt2YXIgaT1uLnN0YWNrLGE9cChyKSxvPWkuaW5kZXhPZihcIlxcblwiK2EpO2lmKG8+PTApe3ZhciBzPWkuaW5kZXhPZihcIlxcblwiLG8rMSk7aT1pLnN1YnN0cmluZyhzKzEpfXRoaXMuc3RhY2s9aX19fSxhLmluaGVyaXRzKGguQXNzZXJ0aW9uRXJyb3IsRXJyb3IpLGguZmFpbD12LGgub2s9bSxoLmVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0IT1lJiZ2KHQsZSxyLFwiPT1cIixoLmVxdWFsKX0saC5ub3RFcXVhbD1mdW5jdGlvbih0LGUscil7dD09ZSYmdih0LGUscixcIiE9XCIsaC5ub3RFcXVhbCl9LGguZGVlcEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt5KHQsZSwhMSl8fHYodCxlLHIsXCJkZWVwRXF1YWxcIixoLmRlZXBFcXVhbCl9LGguZGVlcFN0cmljdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt5KHQsZSwhMCl8fHYodCxlLHIsXCJkZWVwU3RyaWN0RXF1YWxcIixoLmRlZXBTdHJpY3RFcXVhbCl9LGgubm90RGVlcEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt5KHQsZSwhMSkmJnYodCxlLHIsXCJub3REZWVwRXF1YWxcIixoLm5vdERlZXBFcXVhbCl9LGgubm90RGVlcFN0cmljdEVxdWFsPWZ1bmN0aW9uIHQoZSxyLG4pe3koZSxyLCEwKSYmdihlLHIsbixcIm5vdERlZXBTdHJpY3RFcXVhbFwiLHQpfSxoLnN0cmljdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0IT09ZSYmdih0LGUscixcIj09PVwiLGguc3RyaWN0RXF1YWwpfSxoLm5vdFN0cmljdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0PT09ZSYmdih0LGUscixcIiE9PVwiLGgubm90U3RyaWN0RXF1YWwpfSxoLnRocm93cz1mdW5jdGlvbih0LGUscil7XyghMCx0LGUscil9LGguZG9lc05vdFRocm93PWZ1bmN0aW9uKHQsZSxyKXtfKCExLHQsZSxyKX0saC5pZkVycm9yPWZ1bmN0aW9uKHQpe2lmKHQpdGhyb3cgdH07dmFyIHc9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KW8uY2FsbCh0LHIpJiZlLnB1c2gocik7cmV0dXJuIGV9fSkuY2FsbCh0aGlzLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7XCJ1dGlsL1wiOjYyfV0sNjA6W2Z1bmN0aW9uKHQsZSxyKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Quc3VwZXJfPWUsdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSl9OmUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Quc3VwZXJfPWU7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9fSx7fV0sNjE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwib2JqZWN0XCI9PXR5cGVvZiB0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmNvcHkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQuZmlsbCYmXCJmdW5jdGlvblwiPT10eXBlb2YgdC5yZWFkVUludDh9fSx7fV0sNjI6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSxuKXt2YXIgaT0vJVtzZGolXS9nO3IuZm9ybWF0PWZ1bmN0aW9uKHQpe2lmKCFtKHQpKXtmb3IodmFyIGU9W10scj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspZS5wdXNoKHMoYXJndW1lbnRzW3JdKSk7cmV0dXJuIGUuam9pbihcIiBcIil9cj0xO2Zvcih2YXIgbj1hcmd1bWVudHMsYT1uLmxlbmd0aCxvPVN0cmluZyh0KS5yZXBsYWNlKGksZnVuY3Rpb24odCl7aWYoXCIlJVwiPT09dClyZXR1cm5cIiVcIjtpZihyPj1hKXJldHVybiB0O3N3aXRjaCh0KXtjYXNlXCIlc1wiOnJldHVybiBTdHJpbmcobltyKytdKTtjYXNlXCIlZFwiOnJldHVybiBOdW1iZXIobltyKytdKTtjYXNlXCIlalwiOnRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkobltyKytdKX1jYXRjaCh0KXtyZXR1cm5cIltDaXJjdWxhcl1cIn1kZWZhdWx0OnJldHVybiB0fX0pLGw9bltyXTtyPGE7bD1uWysrcl0pZyhsKXx8IWIobCk/bys9XCIgXCIrbDpvKz1cIiBcIitzKGwpO3JldHVybiBvfSxyLmRlcHJlY2F0ZT1mdW5jdGlvbih0LGkpe2lmKHkobi5wcm9jZXNzKSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gci5kZXByZWNhdGUodCxpKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2lmKCEwPT09ZS5ub0RlcHJlY2F0aW9uKXJldHVybiB0O3ZhciBhPSExO3JldHVybiBmdW5jdGlvbigpe2lmKCFhKXtpZihlLnRocm93RGVwcmVjYXRpb24pdGhyb3cgbmV3IEVycm9yKGkpO2UudHJhY2VEZXByZWNhdGlvbj9jb25zb2xlLnRyYWNlKGkpOmNvbnNvbGUuZXJyb3IoaSksYT0hMH1yZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTt2YXIgYSxvPXt9O2Z1bmN0aW9uIHModCxlKXt2YXIgbj17c2VlbjpbXSxzdHlsaXplOmN9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0zJiYobi5kZXB0aD1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg+PTQmJihuLmNvbG9ycz1hcmd1bWVudHNbM10pLGQoZSk/bi5zaG93SGlkZGVuPWU6ZSYmci5fZXh0ZW5kKG4sZSkseShuLnNob3dIaWRkZW4pJiYobi5zaG93SGlkZGVuPSExKSx5KG4uZGVwdGgpJiYobi5kZXB0aD0yKSx5KG4uY29sb3JzKSYmKG4uY29sb3JzPSExKSx5KG4uY3VzdG9tSW5zcGVjdCkmJihuLmN1c3RvbUluc3BlY3Q9ITApLG4uY29sb3JzJiYobi5zdHlsaXplPWwpLHUobix0LG4uZGVwdGgpfWZ1bmN0aW9uIGwodCxlKXt2YXIgcj1zLnN0eWxlc1tlXTtyZXR1cm4gcj9cIlxceDFiW1wiK3MuY29sb3JzW3JdWzBdK1wibVwiK3QrXCJcXHgxYltcIitzLmNvbG9yc1tyXVsxXStcIm1cIjp0fWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gdH1mdW5jdGlvbiB1KHQsZSxuKXtpZih0LmN1c3RvbUluc3BlY3QmJmUmJmsoZS5pbnNwZWN0KSYmZS5pbnNwZWN0IT09ci5pbnNwZWN0JiYoIWUuY29uc3RydWN0b3J8fGUuY29uc3RydWN0b3IucHJvdG90eXBlIT09ZSkpe3ZhciBpPWUuaW5zcGVjdChuLHQpO3JldHVybiBtKGkpfHwoaT11KHQsaSxuKSksaX12YXIgYT1mdW5jdGlvbih0LGUpe2lmKHkoZSkpcmV0dXJuIHQuc3R5bGl6ZShcInVuZGVmaW5lZFwiLFwidW5kZWZpbmVkXCIpO2lmKG0oZSkpe3ZhciByPVwiJ1wiK0pTT04uc3RyaW5naWZ5KGUpLnJlcGxhY2UoL15cInxcIiQvZyxcIlwiKS5yZXBsYWNlKC8nL2csXCJcXFxcJ1wiKS5yZXBsYWNlKC9cXFxcXCIvZywnXCInKStcIidcIjtyZXR1cm4gdC5zdHlsaXplKHIsXCJzdHJpbmdcIil9aWYodihlKSlyZXR1cm4gdC5zdHlsaXplKFwiXCIrZSxcIm51bWJlclwiKTtpZihkKGUpKXJldHVybiB0LnN0eWxpemUoXCJcIitlLFwiYm9vbGVhblwiKTtpZihnKGUpKXJldHVybiB0LnN0eWxpemUoXCJudWxsXCIsXCJudWxsXCIpfSh0LGUpO2lmKGEpcmV0dXJuIGE7dmFyIG89T2JqZWN0LmtleXMoZSkscz1mdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQscil7ZVt0XT0hMH0pLGV9KG8pO2lmKHQuc2hvd0hpZGRlbiYmKG89T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkpLHcoZSkmJihvLmluZGV4T2YoXCJtZXNzYWdlXCIpPj0wfHxvLmluZGV4T2YoXCJkZXNjcmlwdGlvblwiKT49MCkpcmV0dXJuIGgoZSk7aWYoMD09PW8ubGVuZ3RoKXtpZihrKGUpKXt2YXIgbD1lLm5hbWU/XCI6IFwiK2UubmFtZTpcIlwiO3JldHVybiB0LnN0eWxpemUoXCJbRnVuY3Rpb25cIitsK1wiXVwiLFwic3BlY2lhbFwiKX1pZih4KGUpKXJldHVybiB0LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLFwicmVnZXhwXCIpO2lmKF8oZSkpcmV0dXJuIHQuc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLFwiZGF0ZVwiKTtpZih3KGUpKXJldHVybiBoKGUpfXZhciBjLGI9XCJcIixBPSExLFQ9W1wie1wiLFwifVwiXTsocChlKSYmKEE9ITAsVD1bXCJbXCIsXCJdXCJdKSxrKGUpKSYmKGI9XCIgW0Z1bmN0aW9uXCIrKGUubmFtZT9cIjogXCIrZS5uYW1lOlwiXCIpK1wiXVwiKTtyZXR1cm4geChlKSYmKGI9XCIgXCIrUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKSxfKGUpJiYoYj1cIiBcIitEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKGUpKSx3KGUpJiYoYj1cIiBcIitoKGUpKSwwIT09by5sZW5ndGh8fEEmJjAhPWUubGVuZ3RoP248MD94KGUpP3Quc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSksXCJyZWdleHBcIik6dC5zdHlsaXplKFwiW09iamVjdF1cIixcInNwZWNpYWxcIik6KHQuc2Vlbi5wdXNoKGUpLGM9QT9mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYT1bXSxvPTAscz1lLmxlbmd0aDtvPHM7KytvKVMoZSxTdHJpbmcobykpP2EucHVzaChmKHQsZSxyLG4sU3RyaW5nKG8pLCEwKSk6YS5wdXNoKFwiXCIpO3JldHVybiBpLmZvckVhY2goZnVuY3Rpb24oaSl7aS5tYXRjaCgvXlxcZCskLyl8fGEucHVzaChmKHQsZSxyLG4saSwhMCkpfSksYX0odCxlLG4scyxvKTpvLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gZih0LGUsbixzLHIsQSl9KSx0LnNlZW4ucG9wKCksZnVuY3Rpb24odCxlLHIpe2lmKHQucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIDAsZS5pbmRleE9mKFwiXFxuXCIpPj0wJiYwLHQrZS5yZXBsYWNlKC9cXHUwMDFiXFxbXFxkXFxkP20vZyxcIlwiKS5sZW5ndGgrMX0sMCk+NjApcmV0dXJuIHJbMF0rKFwiXCI9PT1lP1wiXCI6ZStcIlxcbiBcIikrXCIgXCIrdC5qb2luKFwiLFxcbiAgXCIpK1wiIFwiK3JbMV07cmV0dXJuIHJbMF0rZStcIiBcIit0LmpvaW4oXCIsIFwiKStcIiBcIityWzFdfShjLGIsVCkpOlRbMF0rYitUWzFdfWZ1bmN0aW9uIGgodCl7cmV0dXJuXCJbXCIrRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkrXCJdXCJ9ZnVuY3Rpb24gZih0LGUscixuLGksYSl7dmFyIG8scyxsO2lmKChsPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxpKXx8e3ZhbHVlOmVbaV19KS5nZXQ/cz1sLnNldD90LnN0eWxpemUoXCJbR2V0dGVyL1NldHRlcl1cIixcInNwZWNpYWxcIik6dC5zdHlsaXplKFwiW0dldHRlcl1cIixcInNwZWNpYWxcIik6bC5zZXQmJihzPXQuc3R5bGl6ZShcIltTZXR0ZXJdXCIsXCJzcGVjaWFsXCIpKSxTKG4saSl8fChvPVwiW1wiK2krXCJdXCIpLHN8fCh0LnNlZW4uaW5kZXhPZihsLnZhbHVlKTwwPyhzPWcocik/dSh0LGwudmFsdWUsbnVsbCk6dSh0LGwudmFsdWUsci0xKSkuaW5kZXhPZihcIlxcblwiKT4tMSYmKHM9YT9zLnNwbGl0KFwiXFxuXCIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cIiAgXCIrdH0pLmpvaW4oXCJcXG5cIikuc3Vic3RyKDIpOlwiXFxuXCIrcy5zcGxpdChcIlxcblwiKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCIgICBcIit0fSkuam9pbihcIlxcblwiKSk6cz10LnN0eWxpemUoXCJbQ2lyY3VsYXJdXCIsXCJzcGVjaWFsXCIpKSx5KG8pKXtpZihhJiZpLm1hdGNoKC9eXFxkKyQvKSlyZXR1cm4gczsobz1KU09OLnN0cmluZ2lmeShcIlwiK2kpKS5tYXRjaCgvXlwiKFthLXpBLVpfXVthLXpBLVpfMC05XSopXCIkLyk/KG89by5zdWJzdHIoMSxvLmxlbmd0aC0yKSxvPXQuc3R5bGl6ZShvLFwibmFtZVwiKSk6KG89by5yZXBsYWNlKC8nL2csXCJcXFxcJ1wiKS5yZXBsYWNlKC9cXFxcXCIvZywnXCInKS5yZXBsYWNlKC8oXlwifFwiJCkvZyxcIidcIiksbz10LnN0eWxpemUobyxcInN0cmluZ1wiKSl9cmV0dXJuIG8rXCI6IFwiK3N9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KX1mdW5jdGlvbiBkKHQpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgdH1mdW5jdGlvbiBnKHQpe3JldHVybiBudWxsPT09dH1mdW5jdGlvbiB2KHQpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIG0odCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHR9ZnVuY3Rpb24geSh0KXtyZXR1cm4gdm9pZCAwPT09dH1mdW5jdGlvbiB4KHQpe3JldHVybiBiKHQpJiZcIltvYmplY3QgUmVnRXhwXVwiPT09QSh0KX1mdW5jdGlvbiBiKHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0JiZudWxsIT09dH1mdW5jdGlvbiBfKHQpe3JldHVybiBiKHQpJiZcIltvYmplY3QgRGF0ZV1cIj09PUEodCl9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gYih0KSYmKFwiW29iamVjdCBFcnJvcl1cIj09PUEodCl8fHQgaW5zdGFuY2VvZiBFcnJvcil9ZnVuY3Rpb24gayh0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIEEodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBUKHQpe3JldHVybiB0PDEwP1wiMFwiK3QudG9TdHJpbmcoMTApOnQudG9TdHJpbmcoMTApfXIuZGVidWdsb2c9ZnVuY3Rpb24odCl7aWYoeShhKSYmKGE9ZS5lbnYuTk9ERV9ERUJVR3x8XCJcIiksdD10LnRvVXBwZXJDYXNlKCksIW9bdF0paWYobmV3IFJlZ0V4cChcIlxcXFxiXCIrdCtcIlxcXFxiXCIsXCJpXCIpLnRlc3QoYSkpe3ZhciBuPWUucGlkO29bdF09ZnVuY3Rpb24oKXt2YXIgZT1yLmZvcm1hdC5hcHBseShyLGFyZ3VtZW50cyk7Y29uc29sZS5lcnJvcihcIiVzICVkOiAlc1wiLHQsbixlKX19ZWxzZSBvW3RdPWZ1bmN0aW9uKCl7fTtyZXR1cm4gb1t0XX0sci5pbnNwZWN0PXMscy5jb2xvcnM9e2JvbGQ6WzEsMjJdLGl0YWxpYzpbMywyM10sdW5kZXJsaW5lOls0LDI0XSxpbnZlcnNlOls3LDI3XSx3aGl0ZTpbMzcsMzldLGdyZXk6WzkwLDM5XSxibGFjazpbMzAsMzldLGJsdWU6WzM0LDM5XSxjeWFuOlszNiwzOV0sZ3JlZW46WzMyLDM5XSxtYWdlbnRhOlszNSwzOV0scmVkOlszMSwzOV0seWVsbG93OlszMywzOV19LHMuc3R5bGVzPXtzcGVjaWFsOlwiY3lhblwiLG51bWJlcjpcInllbGxvd1wiLGJvb2xlYW46XCJ5ZWxsb3dcIix1bmRlZmluZWQ6XCJncmV5XCIsbnVsbDpcImJvbGRcIixzdHJpbmc6XCJncmVlblwiLGRhdGU6XCJtYWdlbnRhXCIscmVnZXhwOlwicmVkXCJ9LHIuaXNBcnJheT1wLHIuaXNCb29sZWFuPWQsci5pc051bGw9ZyxyLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10fSxyLmlzTnVtYmVyPXYsci5pc1N0cmluZz1tLHIuaXNTeW1ib2w9ZnVuY3Rpb24odCl7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIHR9LHIuaXNVbmRlZmluZWQ9eSxyLmlzUmVnRXhwPXgsci5pc09iamVjdD1iLHIuaXNEYXRlPV8sci5pc0Vycm9yPXcsci5pc0Z1bmN0aW9uPWssci5pc1ByaW1pdGl2ZT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09PXR8fFwiYm9vbGVhblwiPT10eXBlb2YgdHx8XCJudW1iZXJcIj09dHlwZW9mIHR8fFwic3RyaW5nXCI9PXR5cGVvZiB0fHxcInN5bWJvbFwiPT10eXBlb2YgdHx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIHR9LHIuaXNCdWZmZXI9dChcIi4vc3VwcG9ydC9pc0J1ZmZlclwiKTt2YXIgTT1bXCJKYW5cIixcIkZlYlwiLFwiTWFyXCIsXCJBcHJcIixcIk1heVwiLFwiSnVuXCIsXCJKdWxcIixcIkF1Z1wiLFwiU2VwXCIsXCJPY3RcIixcIk5vdlwiLFwiRGVjXCJdO2Z1bmN0aW9uIFModCxlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSl9ci5sb2c9ZnVuY3Rpb24oKXt2YXIgdCxlO2NvbnNvbGUubG9nKFwiJXMgLSAlc1wiLCh0PW5ldyBEYXRlLGU9W1QodC5nZXRIb3VycygpKSxUKHQuZ2V0TWludXRlcygpKSxUKHQuZ2V0U2Vjb25kcygpKV0uam9pbihcIjpcIiksW3QuZ2V0RGF0ZSgpLE1bdC5nZXRNb250aCgpXSxlXS5qb2luKFwiIFwiKSksci5mb3JtYXQuYXBwbHkocixhcmd1bWVudHMpKX0sci5pbmhlcml0cz10KFwiaW5oZXJpdHNcIiksci5fZXh0ZW5kPWZ1bmN0aW9uKHQsZSl7aWYoIWV8fCFiKGUpKXJldHVybiB0O2Zvcih2YXIgcj1PYmplY3Qua2V5cyhlKSxuPXIubGVuZ3RoO24tLTspdFtyW25dXT1lW3Jbbl1dO3JldHVybiB0fX0pLmNhbGwodGhpcyx0KFwiX3Byb2Nlc3NcIiksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHtcIi4vc3VwcG9ydC9pc0J1ZmZlclwiOjYxLF9wcm9jZXNzOjQ3NSxpbmhlcml0czo2MH1dLDYzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhdG9iKHQpfX0se31dLDY0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUubGVuZ3RoLGE9bmV3IEFycmF5KHIrMSksbz0wO288cjsrK28pe2Zvcih2YXIgcz1uZXcgQXJyYXkocisxKSxsPTA7bDw9cjsrK2wpc1tsXT10W2xdW29dO2Fbb109c31hW3JdPW5ldyBBcnJheShyKzEpO2Zvcih2YXIgbz0wO288PXI7KytvKWFbcl1bb109MTtmb3IodmFyIGM9bmV3IEFycmF5KHIrMSksbz0wO288cjsrK28pY1tvXT1lW29dO2Nbcl09MTt2YXIgdT1uKGEsYyksaD1pKHVbcisxXSk7MD09PWgmJihoPTEpO2Zvcih2YXIgZj1uZXcgQXJyYXkocisxKSxvPTA7bzw9cjsrK28pZltvXT1pKHVbb10pL2g7cmV0dXJuIGZ9O3ZhciBuPXQoXCJyb2J1c3QtbGluZWFyLXNvbHZlXCIpO2Z1bmN0aW9uIGkodCl7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7KytyKWUrPXRbcl07cmV0dXJuIGV9fSx7XCJyb2J1c3QtbGluZWFyLXNvbHZlXCI6NDk0fV0sNjU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLmJ5dGVMZW5ndGg9ZnVuY3Rpb24odCl7dmFyIGU9Yyh0KSxyPWVbMF0sbj1lWzFdO3JldHVybiAzKihyK24pLzQtbn0sci50b0J5dGVBcnJheT1mdW5jdGlvbih0KXtmb3IodmFyIGUscj1jKHQpLG49clswXSxvPXJbMV0scz1uZXcgYShmdW5jdGlvbih0LGUscil7cmV0dXJuIDMqKGUrcikvNC1yfSgwLG4sbykpLGw9MCx1PW8+MD9uLTQ6bixoPTA7aDx1O2grPTQpZT1pW3QuY2hhckNvZGVBdChoKV08PDE4fGlbdC5jaGFyQ29kZUF0KGgrMSldPDwxMnxpW3QuY2hhckNvZGVBdChoKzIpXTw8NnxpW3QuY2hhckNvZGVBdChoKzMpXSxzW2wrK109ZT4+MTYmMjU1LHNbbCsrXT1lPj44JjI1NSxzW2wrK109MjU1JmU7Mj09PW8mJihlPWlbdC5jaGFyQ29kZUF0KGgpXTw8MnxpW3QuY2hhckNvZGVBdChoKzEpXT4+NCxzW2wrK109MjU1JmUpOzE9PT1vJiYoZT1pW3QuY2hhckNvZGVBdChoKV08PDEwfGlbdC5jaGFyQ29kZUF0KGgrMSldPDw0fGlbdC5jaGFyQ29kZUF0KGgrMildPj4yLHNbbCsrXT1lPj44JjI1NSxzW2wrK109MjU1JmUpO3JldHVybiBzfSxyLmZyb21CeXRlQXJyYXk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9dC5sZW5ndGgsaT1yJTMsYT1bXSxvPTAscz1yLWk7bzxzO28rPTE2MzgzKWEucHVzaCh1KHQsbyxvKzE2MzgzPnM/czpvKzE2MzgzKSk7MT09PWk/KGU9dFtyLTFdLGEucHVzaChuW2U+PjJdK25bZTw8NCY2M10rXCI9PVwiKSk6Mj09PWkmJihlPSh0W3ItMl08PDgpK3Rbci0xXSxhLnB1c2gobltlPj4xMF0rbltlPj40JjYzXStuW2U8PDImNjNdK1wiPVwiKSk7cmV0dXJuIGEuam9pbihcIlwiKX07Zm9yKHZhciBuPVtdLGk9W10sYT1cInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LG89XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCIscz0wLGw9by5sZW5ndGg7czxsOysrcyluW3NdPW9bc10saVtvLmNoYXJDb2RlQXQocyldPXM7ZnVuY3Rpb24gYyh0KXt2YXIgZT10Lmxlbmd0aDtpZihlJTQ+MCl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0XCIpO3ZhciByPXQuaW5kZXhPZihcIj1cIik7cmV0dXJuLTE9PT1yJiYocj1lKSxbcixyPT09ZT8wOjQtciU0XX1mdW5jdGlvbiB1KHQsZSxyKXtmb3IodmFyIGksYSxvPVtdLHM9ZTtzPHI7cys9MylpPSh0W3NdPDwxNiYxNjcxMTY4MCkrKHRbcysxXTw8OCY2NTI4MCkrKDI1NSZ0W3MrMl0pLG8ucHVzaChuWyhhPWkpPj4xOCY2M10rblthPj4xMiY2M10rblthPj42JjYzXStuWzYzJmFdKTtyZXR1cm4gby5qb2luKFwiXCIpfWlbXCItXCIuY2hhckNvZGVBdCgwKV09NjIsaVtcIl9cIi5jaGFyQ29kZUF0KDApXT02M30se31dLDY2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vbGliL3JhdGlvbmFsaXplXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKHRbMF0ubXVsKGVbMV0pLmFkZChlWzBdLm11bCh0WzFdKSksdFsxXS5tdWwoZVsxXSkpfX0se1wiLi9saWIvcmF0aW9uYWxpemVcIjo3Nn1dLDY3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0ubXVsKGVbMV0pLmNtcChlWzBdLm11bCh0WzFdKSl9fSx7fV0sNjg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9saWIvcmF0aW9uYWxpemVcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odFswXS5tdWwoZVsxXSksdFsxXS5tdWwoZVswXSkpfX0se1wiLi9saWIvcmF0aW9uYWxpemVcIjo3Nn1dLDY5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vaXMtcmF0XCIpLGk9dChcIi4vbGliL2lzLWJuXCIpLGE9dChcIi4vbGliL251bS10by1iblwiKSxvPXQoXCIuL2xpYi9zdHItdG8tYm5cIikscz10KFwiLi9saWIvcmF0aW9uYWxpemVcIiksbD10KFwiLi9kaXZcIik7ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSxyKXtpZihuKGUpKXJldHVybiByP2woZSx0KHIpKTpbZVswXS5jbG9uZSgpLGVbMV0uY2xvbmUoKV07dmFyIGM9MDt2YXIgdSxoO2lmKGkoZSkpdT1lLmNsb25lKCk7ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgZSl1PW8oZSk7ZWxzZXtpZigwPT09ZSlyZXR1cm5bYSgwKSxhKDEpXTtpZihlPT09TWF0aC5mbG9vcihlKSl1PWEoZSk7ZWxzZXtmb3IoO2UhPT1NYXRoLmZsb29yKGUpOyllKj1NYXRoLnBvdygyLDI1NiksYy09MjU2O3U9YShlKX19aWYobihyKSl1Lm11bChyWzFdKSxoPXJbMF0uY2xvbmUoKTtlbHNlIGlmKGkocikpaD1yLmNsb25lKCk7ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgciloPW8ocik7ZWxzZSBpZihyKWlmKHI9PT1NYXRoLmZsb29yKHIpKWg9YShyKTtlbHNle2Zvcig7ciE9PU1hdGguZmxvb3Iocik7KXIqPU1hdGgucG93KDIsMjU2KSxjKz0yNTY7aD1hKHIpfWVsc2UgaD1hKDEpO2M+MD91PXUudXNobG4oYyk6YzwwJiYoaD1oLnVzaGxuKC1jKSk7cmV0dXJuIHModSxoKX19LHtcIi4vZGl2XCI6NjgsXCIuL2lzLXJhdFwiOjcwLFwiLi9saWIvaXMtYm5cIjo3NCxcIi4vbGliL251bS10by1iblwiOjc1LFwiLi9saWIvcmF0aW9uYWxpemVcIjo3NixcIi4vbGliL3N0ci10by1iblwiOjc3fV0sNzA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9saWIvaXMtYm5cIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiYyPT09dC5sZW5ndGgmJm4odFswXSkmJm4odFsxXSl9fSx7XCIuL2xpYi9pcy1iblwiOjc0fV0sNzE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiYm4uanNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNtcChuZXcgbigwKSl9fSx7XCJibi5qc1wiOjg1fV0sNzI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9ibi1zaWduXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxyPXQud29yZHMsaT0wO2lmKDE9PT1lKWk9clswXTtlbHNlIGlmKDI9PT1lKWk9clswXSs2NzEwODg2NCpyWzFdO2Vsc2UgZm9yKHZhciBhPTA7YTxlO2ErKyl7dmFyIG89clthXTtpKz1vKk1hdGgucG93KDY3MTA4ODY0LGEpfXJldHVybiBuKHQpKml9fSx7XCIuL2JuLXNpZ25cIjo3MX1dLDczOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImRvdWJsZS1iaXRzXCIpLGk9dChcImJpdC10d2lkZGxlXCIpLmNvdW50VHJhaWxpbmdaZXJvcztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9aShuLmxvKHQpKTtpZihlPDMyKXJldHVybiBlO3ZhciByPWkobi5oaSh0KSk7aWYocj4yMClyZXR1cm4gNTI7cmV0dXJuIHIrMzJ9fSx7XCJiaXQtdHdpZGRsZVwiOjgzLFwiZG91YmxlLWJpdHNcIjoxNTl9XSw3NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3QoXCJibi5qc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwib2JqZWN0XCI9PXR5cGVvZiB0JiZCb29sZWFuKHQud29yZHMpfX0se1wiYm4uanNcIjo4NX1dLDc1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImJuLmpzXCIpLGk9dChcImRvdWJsZS1iaXRzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1pLmV4cG9uZW50KHQpO3JldHVybiBlPDUyP25ldyBuKHQpOm5ldyBuKHQqTWF0aC5wb3coMiw1Mi1lKSkudXNobG4oZS01Mil9fSx7XCJibi5qc1wiOjg1LFwiZG91YmxlLWJpdHNcIjoxNTl9XSw3NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL251bS10by1iblwiKSxpPXQoXCIuL2JuLXNpZ25cIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9aSh0KSxhPWkoZSk7aWYoMD09PXIpcmV0dXJuW24oMCksbigxKV07aWYoMD09PWEpcmV0dXJuW24oMCksbigwKV07YTwwJiYodD10Lm5lZygpLGU9ZS5uZWcoKSk7dmFyIG89dC5nY2QoZSk7aWYoby5jbXBuKDEpKXJldHVyblt0LmRpdihvKSxlLmRpdihvKV07cmV0dXJuW3QsZV19fSx7XCIuL2JuLXNpZ25cIjo3MSxcIi4vbnVtLXRvLWJuXCI6NzV9XSw3NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJibi5qc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBuKHQpfX0se1wiYm4uanNcIjo4NX1dLDc4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vbGliL3JhdGlvbmFsaXplXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKHRbMF0ubXVsKGVbMF0pLHRbMV0ubXVsKGVbMV0pKX19LHtcIi4vbGliL3JhdGlvbmFsaXplXCI6NzZ9XSw3OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2xpYi9ibi1zaWduXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbih0WzBdKSpuKHRbMV0pfX0se1wiLi9saWIvYm4tc2lnblwiOjcxfV0sODA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9saWIvcmF0aW9uYWxpemVcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odFswXS5tdWwoZVsxXSkuc3ViKHRbMV0ubXVsKGVbMF0pKSx0WzFdLm11bChlWzFdKSl9fSx7XCIuL2xpYi9yYXRpb25hbGl6ZVwiOjc2fV0sODE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9saWIvYm4tdG8tbnVtXCIpLGk9dChcIi4vbGliL2N0elwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV07aWYoMD09PWUuY21wbigwKSlyZXR1cm4gMDt2YXIgYT1lLmFicygpLmRpdm1vZChyLmFicygpKSxvPWEuZGl2LHM9bihvKSxsPWEubW9kLGM9ZS5uZWdhdGl2ZSE9PXIubmVnYXRpdmU/LTE6MTtpZigwPT09bC5jbXBuKDApKXJldHVybiBjKnM7aWYocyl7dmFyIHU9aShzKSs0LGg9bihsLnVzaGxuKHUpLmRpdlJvdW5kKHIpKTtyZXR1cm4gYyoocytoKk1hdGgucG93KDIsLXUpKX12YXIgZj1yLmJpdExlbmd0aCgpLWwuYml0TGVuZ3RoKCkrNTMsaD1uKGwudXNobG4oZikuZGl2Um91bmQocikpO3JldHVybiBmPDEwMjM/YypoKk1hdGgucG93KDIsLWYpOihoKj1NYXRoLnBvdygyLC0xMDIzKSxjKmgqTWF0aC5wb3coMiwxMDIzLWYpKX19LHtcIi4vbGliL2JuLXRvLW51bVwiOjcyLFwiLi9saWIvY3R6XCI6NzN9XSw4MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEpe3ZhciBvPVtcImZ1bmN0aW9uIFwiLHQsXCIoYSxsLGgsXCIsbi5qb2luKFwiLFwiKSxcIil7XCIsYT9cIlwiOlwidmFyIGk9XCIscj9cImwtMVwiOlwiaCsxXCIsXCI7d2hpbGUobDw9aCl7dmFyIG09KGwraCk+Pj4xLHg9YVwiLGk/XCIuZ2V0KG0pXCI6XCJbbV1cIl07cmV0dXJuIGE/ZS5pbmRleE9mKFwiY1wiKTwwP28ucHVzaChcIjtpZih4PT09eSl7cmV0dXJuIG19ZWxzZSBpZih4PD15KXtcIik6by5wdXNoKFwiO3ZhciBwPWMoeCx5KTtpZihwPT09MCl7cmV0dXJuIG19ZWxzZSBpZihwPD0wKXtcIik6by5wdXNoKFwiO2lmKFwiLGUsXCIpe2k9bTtcIikscj9vLnB1c2goXCJsPW0rMX1lbHNle2g9bS0xfVwiKTpvLnB1c2goXCJoPW0tMX1lbHNle2w9bSsxfVwiKSxvLnB1c2goXCJ9XCIpLGE/by5wdXNoKFwicmV0dXJuIC0xfTtcIik6by5wdXNoKFwicmV0dXJuIGl9O1wiKSxvLmpvaW4oXCJcIil9ZnVuY3Rpb24gaSh0LGUscixpKXtyZXR1cm4gbmV3IEZ1bmN0aW9uKFtuKFwiQVwiLFwieFwiK3QrXCJ5XCIsZSxbXCJ5XCJdLCExLGkpLG4oXCJCXCIsXCJ4XCIrdCtcInlcIixlLFtcInlcIl0sITAsaSksbihcIlBcIixcImMoeCx5KVwiK3QrXCIwXCIsZSxbXCJ5XCIsXCJjXCJdLCExLGkpLG4oXCJRXCIsXCJjKHgseSlcIit0K1wiMFwiLGUsW1wieVwiLFwiY1wiXSwhMCxpKSxcImZ1bmN0aW9uIGRpc3BhdGNoQnNlYXJjaFwiLHIsXCIoYSx5LGMsbCxoKXtpZihhLnNoYXBlKXtpZih0eXBlb2YoYyk9PT0nZnVuY3Rpb24nKXtyZXR1cm4gUShhLChsPT09dW5kZWZpbmVkKT8wOmx8MCwoaD09PXVuZGVmaW5lZCk/YS5zaGFwZVswXS0xOmh8MCx5LGMpfWVsc2V7cmV0dXJuIEIoYSwoYz09PXVuZGVmaW5lZCk/MDpjfDAsKGw9PT11bmRlZmluZWQpP2Euc2hhcGVbMF0tMTpsfDAseSl9fWVsc2V7aWYodHlwZW9mKGMpPT09J2Z1bmN0aW9uJyl7cmV0dXJuIFAoYSwobD09PXVuZGVmaW5lZCk/MDpsfDAsKGg9PT11bmRlZmluZWQpP2EubGVuZ3RoLTE6aHwwLHksYyl9ZWxzZXtyZXR1cm4gQShhLChjPT09dW5kZWZpbmVkKT8wOmN8MCwobD09PXVuZGVmaW5lZCk/YS5sZW5ndGgtMTpsfDAseSl9fX1yZXR1cm4gZGlzcGF0Y2hCc2VhcmNoXCIscl0uam9pbihcIlwiKSkoKX1lLmV4cG9ydHM9e2dlOmkoXCI+PVwiLCExLFwiR0VcIiksZ3Q6aShcIj5cIiwhMSxcIkdUXCIpLGx0OmkoXCI8XCIsITAsXCJMVFwiKSxsZTppKFwiPD1cIiwhMCxcIkxFXCIpLGVxOmkoXCItXCIsITAsXCJFUVwiLCEwKX19LHt9XSw4MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7dmFyIGU9MzI7cmV0dXJuKHQmPS10KSYmZS0tLDY1NTM1JnQmJihlLT0xNiksMTY3MTE5MzUmdCYmKGUtPTgpLDI1MjY0NTEzNSZ0JiYoZS09NCksODU4OTkzNDU5JnQmJihlLT0yKSwxNDMxNjU1NzY1JnQmJihlLT0xKSxlfXIuSU5UX0JJVFM9MzIsci5JTlRfTUFYPTIxNDc0ODM2NDcsci5JTlRfTUlOPS0xPDwzMSxyLnNpZ249ZnVuY3Rpb24odCl7cmV0dXJuKHQ+MCktKHQ8MCl9LHIuYWJzPWZ1bmN0aW9uKHQpe3ZhciBlPXQ+PjMxO3JldHVybih0XmUpLWV9LHIubWluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVeKHReZSkmLSh0PGUpfSxyLm1heD1mdW5jdGlvbih0LGUpe3JldHVybiB0Xih0XmUpJi0odDxlKX0sci5pc1BvdzI9ZnVuY3Rpb24odCl7cmV0dXJuISh0JnQtMXx8IXQpfSxyLmxvZzI9ZnVuY3Rpb24odCl7dmFyIGUscjtyZXR1cm4gZT0odD42NTUzNSk8PDQsZXw9cj0oKHQ+Pj49ZSk+MjU1KTw8MyxlfD1yPSgodD4+Pj1yKT4xNSk8PDIsKGV8PXI9KCh0Pj4+PXIpPjMpPDwxKXwodD4+Pj1yKT4+MX0sci5sb2cxMD1mdW5jdGlvbih0KXtyZXR1cm4gdD49MWU5Pzk6dD49MWU4Pzg6dD49MWU3Pzc6dD49MWU2PzY6dD49MWU1PzU6dD49MWU0PzQ6dD49MWUzPzM6dD49MTAwPzI6dD49MTA/MTowfSxyLnBvcENvdW50PWZ1bmN0aW9uKHQpe3JldHVybiAxNjg0MzAwOSooKHQ9KDg1ODk5MzQ1OSYodC09dD4+PjEmMTQzMTY1NTc2NSkpKyh0Pj4+MiY4NTg5OTM0NTkpKSsodD4+PjQpJjI1MjY0NTEzNSk+Pj4yNH0sci5jb3VudFRyYWlsaW5nWmVyb3M9bixyLm5leHRQb3cyPWZ1bmN0aW9uKHQpe3JldHVybiB0Kz0wPT09dCwtLXQsdHw9dD4+PjEsdHw9dD4+PjIsdHw9dD4+PjQsdHw9dD4+PjgsKHR8PXQ+Pj4xNikrMX0sci5wcmV2UG93Mj1mdW5jdGlvbih0KXtyZXR1cm4gdHw9dD4+PjEsdHw9dD4+PjIsdHw9dD4+PjQsdHw9dD4+PjgsKHR8PXQ+Pj4xNiktKHQ+Pj4xKX0sci5wYXJpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRePXQ+Pj4xNix0Xj10Pj4+OCx0Xj10Pj4+NCwyNzAzMD4+Pih0Jj0xNSkmMX07dmFyIGk9bmV3IEFycmF5KDI1Nik7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8MjU2OysrZSl7dmFyIHI9ZSxuPWUsaT03O2ZvcihyPj4+PTE7cjtyPj4+PTEpbjw8PTEsbnw9MSZyLC0taTt0W2VdPW48PGkmMjU1fX0oaSksci5yZXZlcnNlPWZ1bmN0aW9uKHQpe3JldHVybiBpWzI1NSZ0XTw8MjR8aVt0Pj4+OCYyNTVdPDwxNnxpW3Q+Pj4xNiYyNTVdPDw4fGlbdD4+PjI0JjI1NV19LHIuaW50ZXJsZWF2ZTI9ZnVuY3Rpb24odCxlKXtyZXR1cm4odD0xNDMxNjU1NzY1JigodD04NTg5OTM0NTkmKCh0PTI1MjY0NTEzNSYoKHQ9MTY3MTE5MzUmKCh0Jj02NTUzNSl8dDw8OCkpfHQ8PDQpKXx0PDwyKSl8dDw8MSkpfChlPTE0MzE2NTU3NjUmKChlPTg1ODk5MzQ1OSYoKGU9MjUyNjQ1MTM1JigoZT0xNjcxMTkzNSYoKGUmPTY1NTM1KXxlPDw4KSl8ZTw8NCkpfGU8PDIpKXxlPDwxKSk8PDF9LHIuZGVpbnRlcmxlYXZlMj1mdW5jdGlvbih0LGUpe3JldHVybih0PTY1NTM1JigodD0xNjcxMTkzNSYoKHQ9MjUyNjQ1MTM1JigodD04NTg5OTM0NTkmKCh0PXQ+Pj5lJjE0MzE2NTU3NjUpfHQ+Pj4xKSl8dD4+PjIpKXx0Pj4+NCkpfHQ+Pj4xNikpPDwxNj4+MTZ9LHIuaW50ZXJsZWF2ZTM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PTEyMjcxMzM1MTMmKCh0PTMyNzIzNTYwMzUmKCh0PTI1MTcxOTY5NSYoKHQ9NDI3ODE5MDMzNSYoKHQmPTEwMjMpfHQ8PDE2KSl8dDw8OCkpfHQ8PDQpKXx0PDwyKSwodHw9KGU9MTIyNzEzMzUxMyYoKGU9MzI3MjM1NjAzNSYoKGU9MjUxNzE5Njk1JigoZT00Mjc4MTkwMzM1JigoZSY9MTAyMyl8ZTw8MTYpKXxlPDw4KSl8ZTw8NCkpfGU8PDIpKTw8MSl8KHI9MTIyNzEzMzUxMyYoKHI9MzI3MjM1NjAzNSYoKHI9MjUxNzE5Njk1Jigocj00Mjc4MTkwMzM1JigociY9MTAyMyl8cjw8MTYpKXxyPDw4KSl8cjw8NCkpfHI8PDIpKTw8Mn0sci5kZWludGVybGVhdmUzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQ9MTAyMyYoKHQ9NDI3ODE5MDMzNSYoKHQ9MjUxNzE5Njk1JigodD0zMjcyMzU2MDM1JigodD10Pj4+ZSYxMjI3MTMzNTEzKXx0Pj4+MikpfHQ+Pj40KSl8dD4+PjgpKXx0Pj4+MTYpKTw8MjI+PjIyfSxyLm5leHRDb21iaW5hdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10fHQtMTtyZXR1cm4gZSsxfCh+ZSYtfmUpLTE+Pj5uKHQpKzF9fSx7fV0sODQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiY2xhbXBcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9e30pO3ZhciByLG8scyxsLGMsdSxoLGYscCxkLGcsdj1udWxsPT1lLmN1dG9mZj8uMjU6ZS5jdXRvZmYsbT1udWxsPT1lLnJhZGl1cz84OmUucmFkaXVzLHk9ZS5jaGFubmVsfHwwO2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KXx8QXJyYXkuaXNBcnJheSh0KSl7aWYoIWUud2lkdGh8fCFlLmhlaWdodCl0aHJvdyBFcnJvcihcIkZvciByYXcgZGF0YSB3aWR0aCBhbmQgaGVpZ2h0IHNob3VsZCBiZSBwcm92aWRlZCBieSBvcHRpb25zXCIpO3I9ZS53aWR0aCxvPWUuaGVpZ2h0LGw9dCx1PWUuc3RyaWRlP2Uuc3RyaWRlOk1hdGguZmxvb3IodC5sZW5ndGgvci9vKX1lbHNlIHdpbmRvdy5IVE1MQ2FudmFzRWxlbWVudCYmdCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MQ2FudmFzRWxlbWVudD8oaD0oZj10KS5nZXRDb250ZXh0KFwiMmRcIikscj1mLndpZHRoLG89Zi5oZWlnaHQscD1oLmdldEltYWdlRGF0YSgwLDAscixvKSxsPXAuZGF0YSx1PTQpOndpbmRvdy5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQmJnQgaW5zdGFuY2VvZiB3aW5kb3cuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPyhmPXQuY2FudmFzLGg9dCxyPWYud2lkdGgsbz1mLmhlaWdodCxwPWguZ2V0SW1hZ2VEYXRhKDAsMCxyLG8pLGw9cC5kYXRhLHU9NCk6d2luZG93LkltYWdlRGF0YSYmdCBpbnN0YW5jZW9mIHdpbmRvdy5JbWFnZURhdGEmJihwPXQscj10LndpZHRoLG89dC5oZWlnaHQsbD1wLmRhdGEsdT00KTtpZihzPU1hdGgubWF4KHIsbyksd2luZG93LlVpbnQ4Q2xhbXBlZEFycmF5JiZsIGluc3RhbmNlb2Ygd2luZG93LlVpbnQ4Q2xhbXBlZEFycmF5fHx3aW5kb3cuVWludDhBcnJheSYmbCBpbnN0YW5jZW9mIHdpbmRvdy5VaW50OEFycmF5KWZvcihjPWwsbD1BcnJheShyKm8pLGQ9MCxnPWMubGVuZ3RoO2Q8ZztkKyspbFtkXT1jW2QqdSt5XS8yNTU7ZWxzZSBpZigxIT09dSl0aHJvdyBFcnJvcihcIlJhdyBkYXRhIGNhbiBoYXZlIG9ubHkgMSB2YWx1ZSBwZXIgcGl4ZWxcIik7dmFyIHg9QXJyYXkocipvKSxiPUFycmF5KHIqbyksXz1BcnJheShzKSx3PUFycmF5KHMpLGs9QXJyYXkocysxKSxBPUFycmF5KHMpO2ZvcihkPTAsZz1yKm87ZDxnO2QrKyl7dmFyIFQ9bFtkXTt4W2RdPTE9PT1UPzA6MD09PVQ/aTpNYXRoLnBvdyhNYXRoLm1heCgwLC41LVQpLDIpLGJbZF09MT09PVQ/aTowPT09VD8wOk1hdGgucG93KE1hdGgubWF4KDAsVC0uNSksMil9YSh4LHIsbyxfLHcsQSxrKSxhKGIscixvLF8sdyxBLGspO3ZhciBNPXdpbmRvdy5GbG9hdDMyQXJyYXk/bmV3IEZsb2F0MzJBcnJheShyKm8pOm5ldyBBcnJheShyKm8pO2ZvcihkPTAsZz1yKm87ZDxnO2QrKylNW2RdPW4oMS0oKHhbZF0tYltkXSkvbSt2KSwwLDEpO3JldHVybiBNfTt2YXIgaT0xZTIwO2Z1bmN0aW9uIGEodCxlLHIsbixpLGEscyl7Zm9yKHZhciBsPTA7bDxlO2wrKyl7Zm9yKHZhciBjPTA7YzxyO2MrKyluW2NdPXRbYyplK2xdO2ZvcihvKG4saSxhLHMsciksYz0wO2M8cjtjKyspdFtjKmUrbF09aVtjXX1mb3IoYz0wO2M8cjtjKyspe2ZvcihsPTA7bDxlO2wrKyluW2xdPXRbYyplK2xdO2ZvcihvKG4saSxhLHMsZSksbD0wO2w8ZTtsKyspdFtjKmUrbF09TWF0aC5zcXJ0KGlbbF0pfX1mdW5jdGlvbiBvKHQsZSxyLG4sYSl7clswXT0wLG5bMF09LWksblsxXT0raTtmb3IodmFyIG89MSxzPTA7bzxhO28rKyl7Zm9yKHZhciBsPSh0W29dK28qby0odFtyW3NdXStyW3NdKnJbc10pKS8oMipvLTIqcltzXSk7bDw9bltzXTspcy0tLGw9KHRbb10rbypvLSh0W3Jbc11dK3Jbc10qcltzXSkpLygyKm8tMipyW3NdKTtyWysrc109byxuW3NdPWwsbltzKzFdPStpfWZvcihvPTAscz0wO288YTtvKyspe2Zvcig7bltzKzFdPG87KXMrKztlW29dPShvLXJbc10pKihvLXJbc10pK3RbcltzXV19fX0se2NsYW1wOjEwNn1dLDg1OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcihlfHxcIkFzc2VydGlvbiBmYWlsZWRcIil9ZnVuY3Rpb24gaSh0LGUpe3Quc3VwZXJfPWU7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gYSh0LGUscil7aWYoYS5pc0JOKHQpKXJldHVybiB0O3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT10JiYoXCJsZVwiIT09ZSYmXCJiZVwiIT09ZXx8KHI9ZSxlPTEwKSx0aGlzLl9pbml0KHR8fDAsZXx8MTAscnx8XCJiZVwiKSl9dmFyIG87XCJvYmplY3RcIj09dHlwZW9mIGU/ZS5leHBvcnRzPWE6ci5CTj1hLGEuQk49YSxhLndvcmRTaXplPTI2O3RyeXtvPXQoXCJidWZmZXJcIikuQnVmZmVyfWNhdGNoKHQpe31mdW5jdGlvbiBzKHQsZSxyKXtmb3IodmFyIG49MCxpPU1hdGgubWluKHQubGVuZ3RoLHIpLGE9ZTthPGk7YSsrKXt2YXIgbz10LmNoYXJDb2RlQXQoYSktNDg7bjw8PTQsbnw9bz49NDkmJm88PTU0P28tNDkrMTA6bz49MTcmJm88PTIyP28tMTcrMTA6MTUmb31yZXR1cm4gbn1mdW5jdGlvbiBsKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9TWF0aC5taW4odC5sZW5ndGgsciksbz1lO288YTtvKyspe3ZhciBzPXQuY2hhckNvZGVBdChvKS00ODtpKj1uLGkrPXM+PTQ5P3MtNDkrMTA6cz49MTc/cy0xNysxMDpzfXJldHVybiBpfWEuaXNCTj1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGF8fG51bGwhPT10JiZcIm9iamVjdFwiPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PWEud29yZFNpemUmJkFycmF5LmlzQXJyYXkodC53b3Jkcyl9LGEubWF4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY21wKGUpPjA/dDplfSxhLm1pbj1mdW5jdGlvbih0LGUpe3JldHVybiB0LmNtcChlKTwwP3Q6ZX0sYS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odCxlLHIpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHQsZSxyKTtpZihcIm9iamVjdFwiPT10eXBlb2YgdClyZXR1cm4gdGhpcy5faW5pdEFycmF5KHQsZSxyKTtcImhleFwiPT09ZSYmKGU9MTYpLG4oZT09PSgwfGUpJiZlPj0yJiZlPD0zNik7dmFyIGk9MDtcIi1cIj09PSh0PXQudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMrL2csXCJcIikpWzBdJiZpKyssMTY9PT1lP3RoaXMuX3BhcnNlSGV4KHQsaSk6dGhpcy5fcGFyc2VCYXNlKHQsZSxpKSxcIi1cIj09PXRbMF0mJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKSxcImxlXCI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKX0sYS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24odCxlLHIpe3Q8MCYmKHRoaXMubmVnYXRpdmU9MSx0PS10KSx0PDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ0XSx0aGlzLmxlbmd0aD0xKTp0PDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnQsdC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG4odDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZ0LHQvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksXCJsZVwiPT09ciYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGUscil9LGEucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24odCxlLHIpe2lmKG4oXCJudW1iZXJcIj09dHlwZW9mIHQubGVuZ3RoKSx0Lmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbCh0Lmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT0wO3ZhciBhLG8scz0wO2lmKFwiYmVcIj09PXIpZm9yKGk9dC5sZW5ndGgtMSxhPTA7aT49MDtpLT0zKW89dFtpXXx0W2ktMV08PDh8dFtpLTJdPDwxNix0aGlzLndvcmRzW2FdfD1vPDxzJjY3MTA4ODYzLHRoaXMud29yZHNbYSsxXT1vPj4+MjYtcyY2NzEwODg2Mywocys9MjQpPj0yNiYmKHMtPTI2LGErKyk7ZWxzZSBpZihcImxlXCI9PT1yKWZvcihpPTAsYT0wO2k8dC5sZW5ndGg7aSs9MylvPXRbaV18dFtpKzFdPDw4fHRbaSsyXTw8MTYsdGhpcy53b3Jkc1thXXw9bzw8cyY2NzEwODg2Myx0aGlzLndvcmRzW2ErMV09bz4+PjI2LXMmNjcxMDg4NjMsKHMrPTI0KT49MjYmJihzLT0yNixhKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbih0LGUpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgodC5sZW5ndGgtZSkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgcj0wO3I8dGhpcy5sZW5ndGg7cisrKXRoaXMud29yZHNbcl09MDt2YXIgbixpLGE9MDtmb3Iocj10Lmxlbmd0aC02LG49MDtyPj1lO3ItPTYpaT1zKHQscixyKzYpLHRoaXMud29yZHNbbl18PWk8PGEmNjcxMDg4NjMsdGhpcy53b3Jkc1tuKzFdfD1pPj4+MjYtYSY0MTk0MzAzLChhKz0yNCk+PTI2JiYoYS09MjYsbisrKTtyKzYhPT1lJiYoaT1zKHQsZSxyKzYpLHRoaXMud29yZHNbbl18PWk8PGEmNjcxMDg4NjMsdGhpcy53b3Jkc1tuKzFdfD1pPj4+MjYtYSY0MTk0MzAzKSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24odCxlLHIpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBuPTAsaT0xO2k8PTY3MTA4ODYzO2kqPWUpbisrO24tLSxpPWkvZXwwO2Zvcih2YXIgYT10Lmxlbmd0aC1yLG89YSVuLHM9TWF0aC5taW4oYSxhLW8pK3IsYz0wLHU9cjt1PHM7dSs9biljPWwodCx1LHUrbixlKSx0aGlzLmltdWxuKGkpLHRoaXMud29yZHNbMF0rYzw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1jOnRoaXMuX2lhZGRuKGMpO2lmKDAhPT1vKXt2YXIgaD0xO2ZvcihjPWwodCx1LHQubGVuZ3RoLGUpLHU9MDt1PG87dSsrKWgqPWU7dGhpcy5pbXVsbihoKSx0aGlzLndvcmRzWzBdK2M8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9Yzp0aGlzLl9pYWRkbihjKX19LGEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7dC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXQud29yZHNbZV09dGhpcy53b3Jkc1tlXTt0Lmxlbmd0aD10aGlzLmxlbmd0aCx0Lm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsdC5yZWQ9dGhpcy5yZWR9LGEucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGEobnVsbCk7cmV0dXJuIHRoaXMuY29weSh0KSx0fSxhLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHQpe2Zvcig7dGhpcy5sZW5ndGg8dDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxhLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LGEucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxhLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkP1wiPEJOLVI6IFwiOlwiPEJOOiBcIikrdGhpcy50b1N0cmluZygxNikrXCI+XCJ9O3ZhciBjPVtcIlwiLFwiMFwiLFwiMDBcIixcIjAwMFwiLFwiMDAwMFwiLFwiMDAwMDBcIixcIjAwMDAwMFwiLFwiMDAwMDAwMFwiLFwiMDAwMDAwMDBcIixcIjAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiXSx1PVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLGg9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gZih0LGUscil7ci5uZWdhdGl2ZT1lLm5lZ2F0aXZlXnQubmVnYXRpdmU7dmFyIG49dC5sZW5ndGgrZS5sZW5ndGh8MDtyLmxlbmd0aD1uLG49bi0xfDA7dmFyIGk9MHx0LndvcmRzWzBdLGE9MHxlLndvcmRzWzBdLG89aSphLHM9NjcxMDg4NjMmbyxsPW8vNjcxMDg4NjR8MDtyLndvcmRzWzBdPXM7Zm9yKHZhciBjPTE7YzxuO2MrKyl7Zm9yKHZhciB1PWw+Pj4yNixoPTY3MTA4ODYzJmwsZj1NYXRoLm1pbihjLGUubGVuZ3RoLTEpLHA9TWF0aC5tYXgoMCxjLXQubGVuZ3RoKzEpO3A8PWY7cCsrKXt2YXIgZD1jLXB8MDt1Kz0obz0oaT0wfHQud29yZHNbZF0pKihhPTB8ZS53b3Jkc1twXSkraCkvNjcxMDg4NjR8MCxoPTY3MTA4ODYzJm99ci53b3Jkc1tjXT0wfGgsbD0wfHV9cmV0dXJuIDAhPT1sP3Iud29yZHNbY109MHxsOnIubGVuZ3RoLS0sci5zdHJpcCgpfWEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHQsZSl7dmFyIHI7aWYoZT0wfGV8fDEsMTY9PT0odD10fHwxMCl8fFwiaGV4XCI9PT10KXtyPVwiXCI7Zm9yKHZhciBpPTAsYT0wLG89MDtvPHRoaXMubGVuZ3RoO28rKyl7dmFyIHM9dGhpcy53b3Jkc1tvXSxsPSgxNjc3NzIxNSYoczw8aXxhKSkudG9TdHJpbmcoMTYpO3I9MCE9PShhPXM+Pj4yNC1pJjE2Nzc3MjE1KXx8byE9PXRoaXMubGVuZ3RoLTE/Y1s2LWwubGVuZ3RoXStsK3I6bCtyLChpKz0yKT49MjYmJihpLT0yNixvLS0pfWZvcigwIT09YSYmKHI9YS50b1N0cmluZygxNikrcik7ci5sZW5ndGglZSE9MDspcj1cIjBcIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9XCItXCIrcikscn1pZih0PT09KDB8dCkmJnQ+PTImJnQ8PTM2KXt2YXIgZj11W3RdLHA9aFt0XTtyPVwiXCI7dmFyIGQ9dGhpcy5jbG9uZSgpO2ZvcihkLm5lZ2F0aXZlPTA7IWQuaXNaZXJvKCk7KXt2YXIgZz1kLm1vZG4ocCkudG9TdHJpbmcodCk7cj0oZD1kLmlkaXZuKHApKS5pc1plcm8oKT9nK3I6Y1tmLWcubGVuZ3RoXStnK3J9Zm9yKHRoaXMuaXNaZXJvKCkmJihyPVwiMFwiK3IpO3IubGVuZ3RoJWUhPTA7KXI9XCIwXCIrcjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihyPVwiLVwiK3IpLHJ9bighMSxcIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzZcIil9LGEucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3QrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT90Kz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbighMSxcIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0c1wiKSwwIT09dGhpcy5uZWdhdGl2ZT8tdDp0fSxhLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LGEucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG8pLHRoaXMudG9BcnJheUxpa2Uobyx0LGUpfSxhLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksdCxlKX0sYS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuYnl0ZUxlbmd0aCgpLGE9cnx8TWF0aC5tYXgoMSxpKTtuKGk8PWEsXCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoXCIpLG4oYT4wLFwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwXCIpLHRoaXMuc3RyaXAoKTt2YXIgbyxzLGw9XCJsZVwiPT09ZSxjPW5ldyB0KGEpLHU9dGhpcy5jbG9uZSgpO2lmKGwpe2ZvcihzPTA7IXUuaXNaZXJvKCk7cysrKW89dS5hbmRsbigyNTUpLHUuaXVzaHJuKDgpLGNbc109bztmb3IoO3M8YTtzKyspY1tzXT0wfWVsc2V7Zm9yKHM9MDtzPGEtaTtzKyspY1tzXT0wO2ZvcihzPTA7IXUuaXNaZXJvKCk7cysrKW89dS5hbmRsbigyNTUpLHUuaXVzaHJuKDgpLGNbYS1zLTFdPW99cmV0dXJuIGN9LE1hdGguY2x6MzI/YS5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXtyZXR1cm4gMzItTWF0aC5jbHozMih0KX06YS5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXt2YXIgZT10LHI9MDtyZXR1cm4gZT49NDA5NiYmKHIrPTEzLGU+Pj49MTMpLGU+PTY0JiYocis9NyxlPj4+PTcpLGU+PTgmJihyKz00LGU+Pj49NCksZT49MiYmKHIrPTIsZT4+Pj0yKSxyK2V9LGEucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbih0KXtpZigwPT09dClyZXR1cm4gMjY7dmFyIGU9dCxyPTA7cmV0dXJuIDA9PSg4MTkxJmUpJiYocis9MTMsZT4+Pj0xMyksMD09KDEyNyZlKSYmKHIrPTcsZT4+Pj03KSwwPT0oMTUmZSkmJihyKz00LGU+Pj49NCksMD09KDMmZSkmJihyKz0yLGU+Pj49MiksMD09KDEmZSkmJnIrKyxyfSxhLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdLGU9dGhpcy5fY291bnRCaXRzKHQpO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrZX0sYS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgdD0wLGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHI9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tlXSk7aWYodCs9ciwyNiE9PXIpYnJlYWt9cmV0dXJuIHR9LGEucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LGEucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbih0KXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bih0KS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LGEucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRlc3RuKHQtMSk/dGhpcy5ub3RuKHQpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LGEucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxhLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sYS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sYS5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbih0KXtmb3IoO3RoaXMubGVuZ3RoPHQubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy53b3Jkc1tlXT10aGlzLndvcmRzW2VdfHQud29yZHNbZV07cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1b3IodCl9LGEucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHQpOnQuY2xvbmUoKS5pb3IodGhpcyl9LGEucHJvdG90eXBlLnVvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IodCk6dC5jbG9uZSgpLml1b3IodGhpcyl9LGEucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHQpe3ZhciBlO2U9dGhpcy5sZW5ndGg+dC5sZW5ndGg/dDp0aGlzO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXSZ0LndvcmRzW3JdO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQodCl9LGEucHJvdG90eXBlLmFuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQodCk6dC5jbG9uZSgpLmlhbmQodGhpcyl9LGEucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZCh0KTp0LmNsb25lKCkuaXVhbmQodGhpcyl9LGEucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHQpe3ZhciBlLHI7dGhpcy5sZW5ndGg+dC5sZW5ndGg/KGU9dGhpcyxyPXQpOihlPXQscj10aGlzKTtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPWUud29yZHNbbl1eci53b3Jkc1tuXTtpZih0aGlzIT09ZSlmb3IoO248ZS5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09ZS53b3Jkc1tuXTtyZXR1cm4gdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1eG9yKHQpfSxhLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHQpOnQuY2xvbmUoKS5peG9yKHRoaXMpfSxhLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IodCk6dC5jbG9uZSgpLml1eG9yKHRoaXMpfSxhLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT0wfE1hdGguY2VpbCh0LzI2KSxyPXQlMjY7dGhpcy5fZXhwYW5kKGUpLHI+MCYmZS0tO2Zvcih2YXIgaT0wO2k8ZTtpKyspdGhpcy53b3Jkc1tpXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tpXTtyZXR1cm4gcj4wJiYodGhpcy53b3Jkc1tpXT1+dGhpcy53b3Jkc1tpXSY2NzEwODg2Mz4+MjYtciksdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4odCl9LGEucHJvdG90eXBlLnNldG49ZnVuY3Rpb24odCxlKXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgcj10LzI2fDAsaT10JTI2O3JldHVybiB0aGlzLl9leHBhbmQocisxKSx0aGlzLndvcmRzW3JdPWU/dGhpcy53b3Jkc1tyXXwxPDxpOnRoaXMud29yZHNbcl0mfigxPDxpKSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odCl7dmFyIGUscixuO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGU9dGhpcy5pc3ViKHQpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmUpcmV0dXJuIHQubmVnYXRpdmU9MCxlPXRoaXMuaXN1Yih0KSx0Lm5lZ2F0aXZlPTEsZS5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD50Lmxlbmd0aD8ocj10aGlzLG49dCk6KHI9dCxuPXRoaXMpO2Zvcih2YXIgaT0wLGE9MDthPG4ubGVuZ3RoO2ErKyllPSgwfHIud29yZHNbYV0pKygwfG4ud29yZHNbYV0pK2ksdGhpcy53b3Jkc1thXT02NzEwODg2MyZlLGk9ZT4+PjI2O2Zvcig7MCE9PWkmJmE8ci5sZW5ndGg7YSsrKWU9KDB8ci53b3Jkc1thXSkraSx0aGlzLndvcmRzW2FdPTY3MTA4ODYzJmUsaT1lPj4+MjY7aWYodGhpcy5sZW5ndGg9ci5sZW5ndGgsMCE9PWkpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09aSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYociE9PXRoaXMpZm9yKDthPHIubGVuZ3RoO2ErKyl0aGlzLndvcmRzW2FdPXIud29yZHNbYV07cmV0dXJuIHRoaXN9LGEucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gMCE9PXQubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyh0Lm5lZ2F0aXZlPTAsZT10aGlzLnN1Yih0KSx0Lm5lZ2F0aXZlXj0xLGUpOjA9PT10Lm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGU9dC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGUpOnRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHQpOnQuY2xvbmUoKS5pYWRkKHRoaXMpfSxhLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQpe2lmKDAhPT10Lm5lZ2F0aXZlKXt0Lm5lZ2F0aXZlPTA7dmFyIGU9dGhpcy5pYWRkKHQpO3JldHVybiB0Lm5lZ2F0aXZlPTEsZS5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZCh0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgcixuLGk9dGhpcy5jbXAodCk7aWYoMD09PWkpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO2k+MD8ocj10aGlzLG49dCk6KHI9dCxuPXRoaXMpO2Zvcih2YXIgYT0wLG89MDtvPG4ubGVuZ3RoO28rKylhPShlPSgwfHIud29yZHNbb10pLSgwfG4ud29yZHNbb10pK2EpPj4yNix0aGlzLndvcmRzW29dPTY3MTA4ODYzJmU7Zm9yKDswIT09YSYmbzxyLmxlbmd0aDtvKyspYT0oZT0oMHxyLndvcmRzW29dKSthKT4+MjYsdGhpcy53b3Jkc1tvXT02NzEwODg2MyZlO2lmKDA9PT1hJiZvPHIubGVuZ3RoJiZyIT09dGhpcylmb3IoO288ci5sZW5ndGg7bysrKXRoaXMud29yZHNbb109ci53b3Jkc1tvXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsbyksciE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Yih0KX07dmFyIHA9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvPXQud29yZHMscz1lLndvcmRzLGw9ci53b3JkcyxjPTAsdT0wfG9bMF0saD04MTkxJnUsZj11Pj4+MTMscD0wfG9bMV0sZD04MTkxJnAsZz1wPj4+MTMsdj0wfG9bMl0sbT04MTkxJnYseT12Pj4+MTMseD0wfG9bM10sYj04MTkxJngsXz14Pj4+MTMsdz0wfG9bNF0saz04MTkxJncsQT13Pj4+MTMsVD0wfG9bNV0sTT04MTkxJlQsUz1UPj4+MTMsRT0wfG9bNl0sQz04MTkxJkUsTD1FPj4+MTMsej0wfG9bN10sTz04MTkxJnosST16Pj4+MTMsRD0wfG9bOF0sUD04MTkxJkQsUj1EPj4+MTMsRj0wfG9bOV0sQj04MTkxJkYsTj1GPj4+MTMsaj0wfHNbMF0sVj04MTkxJmosVT1qPj4+MTMscT0wfHNbMV0sSD04MTkxJnEsRz1xPj4+MTMsWT0wfHNbMl0sVz04MTkxJlksWD1ZPj4+MTMsWj0wfHNbM10sJD04MTkxJlosSj1aPj4+MTMsSz0wfHNbNF0sUT04MTkxJkssdHQ9Sz4+PjEzLGV0PTB8c1s1XSxydD04MTkxJmV0LG50PWV0Pj4+MTMsaXQ9MHxzWzZdLGF0PTgxOTEmaXQsb3Q9aXQ+Pj4xMyxzdD0wfHNbN10sbHQ9ODE5MSZzdCxjdD1zdD4+PjEzLHV0PTB8c1s4XSxodD04MTkxJnV0LGZ0PXV0Pj4+MTMscHQ9MHxzWzldLGR0PTgxOTEmcHQsZ3Q9cHQ+Pj4xMztyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZSxyLmxlbmd0aD0xOTt2YXIgdnQ9KGMrKG49TWF0aC5pbXVsKGgsVikpfDApKygoODE5MSYoaT0oaT1NYXRoLmltdWwoaCxVKSkrTWF0aC5pbXVsKGYsVil8MCkpPDwxMyl8MDtjPSgoYT1NYXRoLmltdWwoZixVKSkrKGk+Pj4xMyl8MCkrKHZ0Pj4+MjYpfDAsdnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGQsViksaT0oaT1NYXRoLmltdWwoZCxVKSkrTWF0aC5pbXVsKGcsVil8MCxhPU1hdGguaW11bChnLFUpO3ZhciBtdD0oYysobj1uK01hdGguaW11bChoLEgpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChoLEcpfDApK01hdGguaW11bChmLEgpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZixHKXwwKSsoaT4+PjEzKXwwKSsobXQ+Pj4yNil8MCxtdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwobSxWKSxpPShpPU1hdGguaW11bChtLFUpKStNYXRoLmltdWwoeSxWKXwwLGE9TWF0aC5pbXVsKHksVSksbj1uK01hdGguaW11bChkLEgpfDAsaT0oaT1pK01hdGguaW11bChkLEcpfDApK01hdGguaW11bChnLEgpfDAsYT1hK01hdGguaW11bChnLEcpfDA7dmFyIHl0PShjKyhuPW4rTWF0aC5pbXVsKGgsVyl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGgsWCl8MCkrTWF0aC5pbXVsKGYsVyl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChmLFgpfDApKyhpPj4+MTMpfDApKyh5dD4+PjI2KXwwLHl0Jj02NzEwODg2MyxuPU1hdGguaW11bChiLFYpLGk9KGk9TWF0aC5pbXVsKGIsVSkpK01hdGguaW11bChfLFYpfDAsYT1NYXRoLmltdWwoXyxVKSxuPW4rTWF0aC5pbXVsKG0sSCl8MCxpPShpPWkrTWF0aC5pbXVsKG0sRyl8MCkrTWF0aC5pbXVsKHksSCl8MCxhPWErTWF0aC5pbXVsKHksRyl8MCxuPW4rTWF0aC5pbXVsKGQsVyl8MCxpPShpPWkrTWF0aC5pbXVsKGQsWCl8MCkrTWF0aC5pbXVsKGcsVyl8MCxhPWErTWF0aC5pbXVsKGcsWCl8MDt2YXIgeHQ9KGMrKG49bitNYXRoLmltdWwoaCwkKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxKKXwwKStNYXRoLmltdWwoZiwkKXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGYsSil8MCkrKGk+Pj4xMyl8MCkrKHh0Pj4+MjYpfDAseHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGssViksaT0oaT1NYXRoLmltdWwoayxVKSkrTWF0aC5pbXVsKEEsVil8MCxhPU1hdGguaW11bChBLFUpLG49bitNYXRoLmltdWwoYixIKXwwLGk9KGk9aStNYXRoLmltdWwoYixHKXwwKStNYXRoLmltdWwoXyxIKXwwLGE9YStNYXRoLmltdWwoXyxHKXwwLG49bitNYXRoLmltdWwobSxXKXwwLGk9KGk9aStNYXRoLmltdWwobSxYKXwwKStNYXRoLmltdWwoeSxXKXwwLGE9YStNYXRoLmltdWwoeSxYKXwwLG49bitNYXRoLmltdWwoZCwkKXwwLGk9KGk9aStNYXRoLmltdWwoZCxKKXwwKStNYXRoLmltdWwoZywkKXwwLGE9YStNYXRoLmltdWwoZyxKKXwwO3ZhciBidD0oYysobj1uK01hdGguaW11bChoLFEpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChoLHR0KXwwKStNYXRoLmltdWwoZixRKXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGYsdHQpfDApKyhpPj4+MTMpfDApKyhidD4+PjI2KXwwLGJ0Jj02NzEwODg2MyxuPU1hdGguaW11bChNLFYpLGk9KGk9TWF0aC5pbXVsKE0sVSkpK01hdGguaW11bChTLFYpfDAsYT1NYXRoLmltdWwoUyxVKSxuPW4rTWF0aC5pbXVsKGssSCl8MCxpPShpPWkrTWF0aC5pbXVsKGssRyl8MCkrTWF0aC5pbXVsKEEsSCl8MCxhPWErTWF0aC5pbXVsKEEsRyl8MCxuPW4rTWF0aC5pbXVsKGIsVyl8MCxpPShpPWkrTWF0aC5pbXVsKGIsWCl8MCkrTWF0aC5pbXVsKF8sVyl8MCxhPWErTWF0aC5pbXVsKF8sWCl8MCxuPW4rTWF0aC5pbXVsKG0sJCl8MCxpPShpPWkrTWF0aC5pbXVsKG0sSil8MCkrTWF0aC5pbXVsKHksJCl8MCxhPWErTWF0aC5pbXVsKHksSil8MCxuPW4rTWF0aC5pbXVsKGQsUSl8MCxpPShpPWkrTWF0aC5pbXVsKGQsdHQpfDApK01hdGguaW11bChnLFEpfDAsYT1hK01hdGguaW11bChnLHR0KXwwO3ZhciBfdD0oYysobj1uK01hdGguaW11bChoLHJ0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxudCl8MCkrTWF0aC5pbXVsKGYscnQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZixudCl8MCkrKGk+Pj4xMyl8MCkrKF90Pj4+MjYpfDAsX3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEMsViksaT0oaT1NYXRoLmltdWwoQyxVKSkrTWF0aC5pbXVsKEwsVil8MCxhPU1hdGguaW11bChMLFUpLG49bitNYXRoLmltdWwoTSxIKXwwLGk9KGk9aStNYXRoLmltdWwoTSxHKXwwKStNYXRoLmltdWwoUyxIKXwwLGE9YStNYXRoLmltdWwoUyxHKXwwLG49bitNYXRoLmltdWwoayxXKXwwLGk9KGk9aStNYXRoLmltdWwoayxYKXwwKStNYXRoLmltdWwoQSxXKXwwLGE9YStNYXRoLmltdWwoQSxYKXwwLG49bitNYXRoLmltdWwoYiwkKXwwLGk9KGk9aStNYXRoLmltdWwoYixKKXwwKStNYXRoLmltdWwoXywkKXwwLGE9YStNYXRoLmltdWwoXyxKKXwwLG49bitNYXRoLmltdWwobSxRKXwwLGk9KGk9aStNYXRoLmltdWwobSx0dCl8MCkrTWF0aC5pbXVsKHksUSl8MCxhPWErTWF0aC5pbXVsKHksdHQpfDAsbj1uK01hdGguaW11bChkLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoZCxudCl8MCkrTWF0aC5pbXVsKGcscnQpfDAsYT1hK01hdGguaW11bChnLG50KXwwO3ZhciB3dD0oYysobj1uK01hdGguaW11bChoLGF0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxvdCl8MCkrTWF0aC5pbXVsKGYsYXQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZixvdCl8MCkrKGk+Pj4xMyl8MCkrKHd0Pj4+MjYpfDAsd3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKE8sViksaT0oaT1NYXRoLmltdWwoTyxVKSkrTWF0aC5pbXVsKEksVil8MCxhPU1hdGguaW11bChJLFUpLG49bitNYXRoLmltdWwoQyxIKXwwLGk9KGk9aStNYXRoLmltdWwoQyxHKXwwKStNYXRoLmltdWwoTCxIKXwwLGE9YStNYXRoLmltdWwoTCxHKXwwLG49bitNYXRoLmltdWwoTSxXKXwwLGk9KGk9aStNYXRoLmltdWwoTSxYKXwwKStNYXRoLmltdWwoUyxXKXwwLGE9YStNYXRoLmltdWwoUyxYKXwwLG49bitNYXRoLmltdWwoaywkKXwwLGk9KGk9aStNYXRoLmltdWwoayxKKXwwKStNYXRoLmltdWwoQSwkKXwwLGE9YStNYXRoLmltdWwoQSxKKXwwLG49bitNYXRoLmltdWwoYixRKXwwLGk9KGk9aStNYXRoLmltdWwoYix0dCl8MCkrTWF0aC5pbXVsKF8sUSl8MCxhPWErTWF0aC5pbXVsKF8sdHQpfDAsbj1uK01hdGguaW11bChtLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwobSxudCl8MCkrTWF0aC5pbXVsKHkscnQpfDAsYT1hK01hdGguaW11bCh5LG50KXwwLG49bitNYXRoLmltdWwoZCxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKGQsb3QpfDApK01hdGguaW11bChnLGF0KXwwLGE9YStNYXRoLmltdWwoZyxvdCl8MDt2YXIga3Q9KGMrKG49bitNYXRoLmltdWwoaCxsdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGgsY3QpfDApK01hdGguaW11bChmLGx0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGYsY3QpfDApKyhpPj4+MTMpfDApKyhrdD4+PjI2KXwwLGt0Jj02NzEwODg2MyxuPU1hdGguaW11bChQLFYpLGk9KGk9TWF0aC5pbXVsKFAsVSkpK01hdGguaW11bChSLFYpfDAsYT1NYXRoLmltdWwoUixVKSxuPW4rTWF0aC5pbXVsKE8sSCl8MCxpPShpPWkrTWF0aC5pbXVsKE8sRyl8MCkrTWF0aC5pbXVsKEksSCl8MCxhPWErTWF0aC5pbXVsKEksRyl8MCxuPW4rTWF0aC5pbXVsKEMsVyl8MCxpPShpPWkrTWF0aC5pbXVsKEMsWCl8MCkrTWF0aC5pbXVsKEwsVyl8MCxhPWErTWF0aC5pbXVsKEwsWCl8MCxuPW4rTWF0aC5pbXVsKE0sJCl8MCxpPShpPWkrTWF0aC5pbXVsKE0sSil8MCkrTWF0aC5pbXVsKFMsJCl8MCxhPWErTWF0aC5pbXVsKFMsSil8MCxuPW4rTWF0aC5pbXVsKGssUSl8MCxpPShpPWkrTWF0aC5pbXVsKGssdHQpfDApK01hdGguaW11bChBLFEpfDAsYT1hK01hdGguaW11bChBLHR0KXwwLG49bitNYXRoLmltdWwoYixydCl8MCxpPShpPWkrTWF0aC5pbXVsKGIsbnQpfDApK01hdGguaW11bChfLHJ0KXwwLGE9YStNYXRoLmltdWwoXyxudCl8MCxuPW4rTWF0aC5pbXVsKG0sYXQpfDAsaT0oaT1pK01hdGguaW11bChtLG90KXwwKStNYXRoLmltdWwoeSxhdCl8MCxhPWErTWF0aC5pbXVsKHksb3QpfDAsbj1uK01hdGguaW11bChkLGx0KXwwLGk9KGk9aStNYXRoLmltdWwoZCxjdCl8MCkrTWF0aC5pbXVsKGcsbHQpfDAsYT1hK01hdGguaW11bChnLGN0KXwwO3ZhciBBdD0oYysobj1uK01hdGguaW11bChoLGh0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxmdCl8MCkrTWF0aC5pbXVsKGYsaHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZixmdCl8MCkrKGk+Pj4xMyl8MCkrKEF0Pj4+MjYpfDAsQXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsViksaT0oaT1NYXRoLmltdWwoQixVKSkrTWF0aC5pbXVsKE4sVil8MCxhPU1hdGguaW11bChOLFUpLG49bitNYXRoLmltdWwoUCxIKXwwLGk9KGk9aStNYXRoLmltdWwoUCxHKXwwKStNYXRoLmltdWwoUixIKXwwLGE9YStNYXRoLmltdWwoUixHKXwwLG49bitNYXRoLmltdWwoTyxXKXwwLGk9KGk9aStNYXRoLmltdWwoTyxYKXwwKStNYXRoLmltdWwoSSxXKXwwLGE9YStNYXRoLmltdWwoSSxYKXwwLG49bitNYXRoLmltdWwoQywkKXwwLGk9KGk9aStNYXRoLmltdWwoQyxKKXwwKStNYXRoLmltdWwoTCwkKXwwLGE9YStNYXRoLmltdWwoTCxKKXwwLG49bitNYXRoLmltdWwoTSxRKXwwLGk9KGk9aStNYXRoLmltdWwoTSx0dCl8MCkrTWF0aC5pbXVsKFMsUSl8MCxhPWErTWF0aC5pbXVsKFMsdHQpfDAsbj1uK01hdGguaW11bChrLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoayxudCl8MCkrTWF0aC5pbXVsKEEscnQpfDAsYT1hK01hdGguaW11bChBLG50KXwwLG49bitNYXRoLmltdWwoYixhdCl8MCxpPShpPWkrTWF0aC5pbXVsKGIsb3QpfDApK01hdGguaW11bChfLGF0KXwwLGE9YStNYXRoLmltdWwoXyxvdCl8MCxuPW4rTWF0aC5pbXVsKG0sbHQpfDAsaT0oaT1pK01hdGguaW11bChtLGN0KXwwKStNYXRoLmltdWwoeSxsdCl8MCxhPWErTWF0aC5pbXVsKHksY3QpfDAsbj1uK01hdGguaW11bChkLGh0KXwwLGk9KGk9aStNYXRoLmltdWwoZCxmdCl8MCkrTWF0aC5pbXVsKGcsaHQpfDAsYT1hK01hdGguaW11bChnLGZ0KXwwO3ZhciBUdD0oYysobj1uK01hdGguaW11bChoLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxndCl8MCkrTWF0aC5pbXVsKGYsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZixndCl8MCkrKGk+Pj4xMyl8MCkrKFR0Pj4+MjYpfDAsVHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsSCksaT0oaT1NYXRoLmltdWwoQixHKSkrTWF0aC5pbXVsKE4sSCl8MCxhPU1hdGguaW11bChOLEcpLG49bitNYXRoLmltdWwoUCxXKXwwLGk9KGk9aStNYXRoLmltdWwoUCxYKXwwKStNYXRoLmltdWwoUixXKXwwLGE9YStNYXRoLmltdWwoUixYKXwwLG49bitNYXRoLmltdWwoTywkKXwwLGk9KGk9aStNYXRoLmltdWwoTyxKKXwwKStNYXRoLmltdWwoSSwkKXwwLGE9YStNYXRoLmltdWwoSSxKKXwwLG49bitNYXRoLmltdWwoQyxRKXwwLGk9KGk9aStNYXRoLmltdWwoQyx0dCl8MCkrTWF0aC5pbXVsKEwsUSl8MCxhPWErTWF0aC5pbXVsKEwsdHQpfDAsbj1uK01hdGguaW11bChNLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoTSxudCl8MCkrTWF0aC5pbXVsKFMscnQpfDAsYT1hK01hdGguaW11bChTLG50KXwwLG49bitNYXRoLmltdWwoayxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKGssb3QpfDApK01hdGguaW11bChBLGF0KXwwLGE9YStNYXRoLmltdWwoQSxvdCl8MCxuPW4rTWF0aC5pbXVsKGIsbHQpfDAsaT0oaT1pK01hdGguaW11bChiLGN0KXwwKStNYXRoLmltdWwoXyxsdCl8MCxhPWErTWF0aC5pbXVsKF8sY3QpfDAsbj1uK01hdGguaW11bChtLGh0KXwwLGk9KGk9aStNYXRoLmltdWwobSxmdCl8MCkrTWF0aC5pbXVsKHksaHQpfDAsYT1hK01hdGguaW11bCh5LGZ0KXwwO3ZhciBNdD0oYysobj1uK01hdGguaW11bChkLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoZCxndCl8MCkrTWF0aC5pbXVsKGcsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZyxndCl8MCkrKGk+Pj4xMyl8MCkrKE10Pj4+MjYpfDAsTXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsVyksaT0oaT1NYXRoLmltdWwoQixYKSkrTWF0aC5pbXVsKE4sVyl8MCxhPU1hdGguaW11bChOLFgpLG49bitNYXRoLmltdWwoUCwkKXwwLGk9KGk9aStNYXRoLmltdWwoUCxKKXwwKStNYXRoLmltdWwoUiwkKXwwLGE9YStNYXRoLmltdWwoUixKKXwwLG49bitNYXRoLmltdWwoTyxRKXwwLGk9KGk9aStNYXRoLmltdWwoTyx0dCl8MCkrTWF0aC5pbXVsKEksUSl8MCxhPWErTWF0aC5pbXVsKEksdHQpfDAsbj1uK01hdGguaW11bChDLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoQyxudCl8MCkrTWF0aC5pbXVsKEwscnQpfDAsYT1hK01hdGguaW11bChMLG50KXwwLG49bitNYXRoLmltdWwoTSxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKE0sb3QpfDApK01hdGguaW11bChTLGF0KXwwLGE9YStNYXRoLmltdWwoUyxvdCl8MCxuPW4rTWF0aC5pbXVsKGssbHQpfDAsaT0oaT1pK01hdGguaW11bChrLGN0KXwwKStNYXRoLmltdWwoQSxsdCl8MCxhPWErTWF0aC5pbXVsKEEsY3QpfDAsbj1uK01hdGguaW11bChiLGh0KXwwLGk9KGk9aStNYXRoLmltdWwoYixmdCl8MCkrTWF0aC5pbXVsKF8saHQpfDAsYT1hK01hdGguaW11bChfLGZ0KXwwO3ZhciBTdD0oYysobj1uK01hdGguaW11bChtLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwobSxndCl8MCkrTWF0aC5pbXVsKHksZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoeSxndCl8MCkrKGk+Pj4xMyl8MCkrKFN0Pj4+MjYpfDAsU3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsJCksaT0oaT1NYXRoLmltdWwoQixKKSkrTWF0aC5pbXVsKE4sJCl8MCxhPU1hdGguaW11bChOLEopLG49bitNYXRoLmltdWwoUCxRKXwwLGk9KGk9aStNYXRoLmltdWwoUCx0dCl8MCkrTWF0aC5pbXVsKFIsUSl8MCxhPWErTWF0aC5pbXVsKFIsdHQpfDAsbj1uK01hdGguaW11bChPLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoTyxudCl8MCkrTWF0aC5pbXVsKEkscnQpfDAsYT1hK01hdGguaW11bChJLG50KXwwLG49bitNYXRoLmltdWwoQyxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKEMsb3QpfDApK01hdGguaW11bChMLGF0KXwwLGE9YStNYXRoLmltdWwoTCxvdCl8MCxuPW4rTWF0aC5pbXVsKE0sbHQpfDAsaT0oaT1pK01hdGguaW11bChNLGN0KXwwKStNYXRoLmltdWwoUyxsdCl8MCxhPWErTWF0aC5pbXVsKFMsY3QpfDAsbj1uK01hdGguaW11bChrLGh0KXwwLGk9KGk9aStNYXRoLmltdWwoayxmdCl8MCkrTWF0aC5pbXVsKEEsaHQpfDAsYT1hK01hdGguaW11bChBLGZ0KXwwO3ZhciBFdD0oYysobj1uK01hdGguaW11bChiLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoYixndCl8MCkrTWF0aC5pbXVsKF8sZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoXyxndCl8MCkrKGk+Pj4xMyl8MCkrKEV0Pj4+MjYpfDAsRXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsUSksaT0oaT1NYXRoLmltdWwoQix0dCkpK01hdGguaW11bChOLFEpfDAsYT1NYXRoLmltdWwoTix0dCksbj1uK01hdGguaW11bChQLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoUCxudCl8MCkrTWF0aC5pbXVsKFIscnQpfDAsYT1hK01hdGguaW11bChSLG50KXwwLG49bitNYXRoLmltdWwoTyxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKE8sb3QpfDApK01hdGguaW11bChJLGF0KXwwLGE9YStNYXRoLmltdWwoSSxvdCl8MCxuPW4rTWF0aC5pbXVsKEMsbHQpfDAsaT0oaT1pK01hdGguaW11bChDLGN0KXwwKStNYXRoLmltdWwoTCxsdCl8MCxhPWErTWF0aC5pbXVsKEwsY3QpfDAsbj1uK01hdGguaW11bChNLGh0KXwwLGk9KGk9aStNYXRoLmltdWwoTSxmdCl8MCkrTWF0aC5pbXVsKFMsaHQpfDAsYT1hK01hdGguaW11bChTLGZ0KXwwO3ZhciBDdD0oYysobj1uK01hdGguaW11bChrLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoayxndCl8MCkrTWF0aC5pbXVsKEEsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoQSxndCl8MCkrKGk+Pj4xMyl8MCkrKEN0Pj4+MjYpfDAsQ3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIscnQpLGk9KGk9TWF0aC5pbXVsKEIsbnQpKStNYXRoLmltdWwoTixydCl8MCxhPU1hdGguaW11bChOLG50KSxuPW4rTWF0aC5pbXVsKFAsYXQpfDAsaT0oaT1pK01hdGguaW11bChQLG90KXwwKStNYXRoLmltdWwoUixhdCl8MCxhPWErTWF0aC5pbXVsKFIsb3QpfDAsbj1uK01hdGguaW11bChPLGx0KXwwLGk9KGk9aStNYXRoLmltdWwoTyxjdCl8MCkrTWF0aC5pbXVsKEksbHQpfDAsYT1hK01hdGguaW11bChJLGN0KXwwLG49bitNYXRoLmltdWwoQyxodCl8MCxpPShpPWkrTWF0aC5pbXVsKEMsZnQpfDApK01hdGguaW11bChMLGh0KXwwLGE9YStNYXRoLmltdWwoTCxmdCl8MDt2YXIgTHQ9KGMrKG49bitNYXRoLmltdWwoTSxkdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKE0sZ3QpfDApK01hdGguaW11bChTLGR0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKFMsZ3QpfDApKyhpPj4+MTMpfDApKyhMdD4+PjI2KXwwLEx0Jj02NzEwODg2MyxuPU1hdGguaW11bChCLGF0KSxpPShpPU1hdGguaW11bChCLG90KSkrTWF0aC5pbXVsKE4sYXQpfDAsYT1NYXRoLmltdWwoTixvdCksbj1uK01hdGguaW11bChQLGx0KXwwLGk9KGk9aStNYXRoLmltdWwoUCxjdCl8MCkrTWF0aC5pbXVsKFIsbHQpfDAsYT1hK01hdGguaW11bChSLGN0KXwwLG49bitNYXRoLmltdWwoTyxodCl8MCxpPShpPWkrTWF0aC5pbXVsKE8sZnQpfDApK01hdGguaW11bChJLGh0KXwwLGE9YStNYXRoLmltdWwoSSxmdCl8MDt2YXIgenQ9KGMrKG49bitNYXRoLmltdWwoQyxkdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKEMsZ3QpfDApK01hdGguaW11bChMLGR0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKEwsZ3QpfDApKyhpPj4+MTMpfDApKyh6dD4+PjI2KXwwLHp0Jj02NzEwODg2MyxuPU1hdGguaW11bChCLGx0KSxpPShpPU1hdGguaW11bChCLGN0KSkrTWF0aC5pbXVsKE4sbHQpfDAsYT1NYXRoLmltdWwoTixjdCksbj1uK01hdGguaW11bChQLGh0KXwwLGk9KGk9aStNYXRoLmltdWwoUCxmdCl8MCkrTWF0aC5pbXVsKFIsaHQpfDAsYT1hK01hdGguaW11bChSLGZ0KXwwO3ZhciBPdD0oYysobj1uK01hdGguaW11bChPLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoTyxndCl8MCkrTWF0aC5pbXVsKEksZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoSSxndCl8MCkrKGk+Pj4xMyl8MCkrKE90Pj4+MjYpfDAsT3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsaHQpLGk9KGk9TWF0aC5pbXVsKEIsZnQpKStNYXRoLmltdWwoTixodCl8MCxhPU1hdGguaW11bChOLGZ0KTt2YXIgSXQ9KGMrKG49bitNYXRoLmltdWwoUCxkdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKFAsZ3QpfDApK01hdGguaW11bChSLGR0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKFIsZ3QpfDApKyhpPj4+MTMpfDApKyhJdD4+PjI2KXwwLEl0Jj02NzEwODg2Mzt2YXIgRHQ9KGMrKG49TWF0aC5pbXVsKEIsZHQpKXwwKSsoKDgxOTEmKGk9KGk9TWF0aC5pbXVsKEIsZ3QpKStNYXRoLmltdWwoTixkdCl8MCkpPDwxMyl8MDtyZXR1cm4gYz0oKGE9TWF0aC5pbXVsKE4sZ3QpKSsoaT4+PjEzKXwwKSsoRHQ+Pj4yNil8MCxEdCY9NjcxMDg4NjMsbFswXT12dCxsWzFdPW10LGxbMl09eXQsbFszXT14dCxsWzRdPWJ0LGxbNV09X3QsbFs2XT13dCxsWzddPWt0LGxbOF09QXQsbFs5XT1UdCxsWzEwXT1NdCxsWzExXT1TdCxsWzEyXT1FdCxsWzEzXT1DdCxsWzE0XT1MdCxsWzE1XT16dCxsWzE2XT1PdCxsWzE3XT1JdCxsWzE4XT1EdCwwIT09YyYmKGxbMTldPWMsci5sZW5ndGgrKykscn07ZnVuY3Rpb24gZCh0LGUscil7cmV0dXJuKG5ldyBnKS5tdWxwKHQsZSxyKX1mdW5jdGlvbiBnKHQsZSl7dGhpcy54PXQsdGhpcy55PWV9TWF0aC5pbXVsfHwocD1mKSxhLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoK3QubGVuZ3RoO3JldHVybiAxMD09PXRoaXMubGVuZ3RoJiYxMD09PXQubGVuZ3RoP3AodGhpcyx0LGUpOnI8NjM/Zih0aGlzLHQsZSk6cjwxMDI0P2Z1bmN0aW9uKHQsZSxyKXtyLm5lZ2F0aXZlPWUubmVnYXRpdmVedC5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aDtmb3IodmFyIG49MCxpPTAsYT0wO2E8ci5sZW5ndGgtMTthKyspe3ZhciBvPWk7aT0wO2Zvcih2YXIgcz02NzEwODg2MyZuLGw9TWF0aC5taW4oYSxlLmxlbmd0aC0xKSxjPU1hdGgubWF4KDAsYS10Lmxlbmd0aCsxKTtjPD1sO2MrKyl7dmFyIHU9YS1jLGg9KDB8dC53b3Jkc1t1XSkqKDB8ZS53b3Jkc1tjXSksZj02NzEwODg2MyZoO3M9NjcxMDg4NjMmKGY9ZitzfDApLGkrPShvPShvPW8rKGgvNjcxMDg4NjR8MCl8MCkrKGY+Pj4yNil8MCk+Pj4yNixvJj02NzEwODg2M31yLndvcmRzW2FdPXMsbj1vLG89aX1yZXR1cm4gMCE9PW4/ci53b3Jkc1thXT1uOnIubGVuZ3RoLS0sci5zdHJpcCgpfSh0aGlzLHQsZSk6ZCh0aGlzLHQsZSl9LGcucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPWEucHJvdG90eXBlLl9jb3VudEJpdHModCktMSxuPTA7bjx0O24rKyllW25dPXRoaXMucmV2QmluKG4scix0KTtyZXR1cm4gZX0sZy5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHQsZSxyKXtpZigwPT09dHx8dD09PXItMSlyZXR1cm4gdDtmb3IodmFyIG49MCxpPTA7aTxlO2krKylufD0oMSZ0KTw8ZS1pLTEsdD4+PTE7cmV0dXJuIG59LGcucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbz0wO288YTtvKyspbltvXT1lW3Rbb11dLGlbb109clt0W29dXX0sZy5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLnBlcm11dGUoYSx0LGUscixuLGkpO2Zvcih2YXIgbz0xO288aTtvPDw9MSlmb3IodmFyIHM9bzw8MSxsPU1hdGguY29zKDIqTWF0aC5QSS9zKSxjPU1hdGguc2luKDIqTWF0aC5QSS9zKSx1PTA7dTxpO3UrPXMpZm9yKHZhciBoPWwsZj1jLHA9MDtwPG87cCsrKXt2YXIgZD1yW3UrcF0sZz1uW3UrcF0sdj1yW3UrcCtvXSxtPW5bdStwK29dLHk9aCp2LWYqbTttPWgqbStmKnYsdj15LHJbdStwXT1kK3Ysblt1K3BdPWcrbSxyW3UrcCtvXT1kLXYsblt1K3Arb109Zy1tLHAhPT1zJiYoeT1sKmgtYypmLGY9bCpmK2MqaCxoPXkpfX0sZy5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24odCxlKXt2YXIgcj0xfE1hdGgubWF4KGUsdCksbj0xJnIsaT0wO2ZvcihyPXIvMnwwO3I7cj4+Pj0xKWkrKztyZXR1cm4gMTw8aSsxK259LGcucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbih0LGUscil7aWYoIShyPD0xKSlmb3IodmFyIG49MDtuPHIvMjtuKyspe3ZhciBpPXRbbl07dFtuXT10W3Itbi0xXSx0W3Itbi0xXT1pLGk9ZVtuXSxlW25dPS1lW3Itbi0xXSxlW3Itbi0xXT0taX19LGcucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49MDtuPGUvMjtuKyspe3ZhciBpPTgxOTIqTWF0aC5yb3VuZCh0WzIqbisxXS9lKStNYXRoLnJvdW5kKHRbMipuXS9lKStyO3Rbbl09NjcxMDg4NjMmaSxyPWk8NjcxMDg4NjQ/MDppLzY3MTA4ODY0fDB9cmV0dXJuIHR9LGcucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24odCxlLHIsaSl7Zm9yKHZhciBhPTAsbz0wO288ZTtvKyspYSs9MHx0W29dLHJbMipvXT04MTkxJmEsYT4+Pj0xMyxyWzIqbysxXT04MTkxJmEsYT4+Pj0xMztmb3Iobz0yKmU7bzxpOysrbylyW29dPTA7bigwPT09YSksbigwPT0oLTgxOTImYSkpfSxnLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT0wO3JldHVybiBlfSxnLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0yKnRoaXMuZ3Vlc3NMZW4xM2IodC5sZW5ndGgsZS5sZW5ndGgpLGk9dGhpcy5tYWtlUkJUKG4pLGE9dGhpcy5zdHViKG4pLG89bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pLGw9bmV3IEFycmF5KG4pLGM9bmV3IEFycmF5KG4pLHU9bmV3IEFycmF5KG4pLGg9bmV3IEFycmF5KG4pLGY9ci53b3JkcztmLmxlbmd0aD1uLHRoaXMuY29udmVydDEzYih0LndvcmRzLHQubGVuZ3RoLG8sbiksdGhpcy5jb252ZXJ0MTNiKGUud29yZHMsZS5sZW5ndGgsYyxuKSx0aGlzLnRyYW5zZm9ybShvLGEscyxsLG4saSksdGhpcy50cmFuc2Zvcm0oYyxhLHUsaCxuLGkpO2Zvcih2YXIgcD0wO3A8bjtwKyspe3ZhciBkPXNbcF0qdVtwXS1sW3BdKmhbcF07bFtwXT1zW3BdKmhbcF0rbFtwXSp1W3BdLHNbcF09ZH1yZXR1cm4gdGhpcy5jb25qdWdhdGUocyxsLG4pLHRoaXMudHJhbnNmb3JtKHMsbCxmLGEsbixpKSx0aGlzLmNvbmp1Z2F0ZShmLGEsbiksdGhpcy5ub3JtYWxpemUxM2IoZixuKSxyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aCxyLnN0cmlwKCl9LGEucHJvdG90eXBlLm11bD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgYShudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLHRoaXMubXVsVG8odCxlKX0sYS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbih0KXt2YXIgZT1uZXcgYShudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLGQodGhpcyx0LGUpfSxhLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8odCx0aGlzKX0sYS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KTtmb3IodmFyIGU9MCxyPTA7cjx0aGlzLmxlbmd0aDtyKyspe3ZhciBpPSgwfHRoaXMud29yZHNbcl0pKnQsYT0oNjcxMDg4NjMmaSkrKDY3MTA4ODYzJmUpO2U+Pj0yNixlKz1pLzY3MTA4ODY0fDAsZSs9YT4+PjI2LHRoaXMud29yZHNbcl09NjcxMDg4NjMmYX1yZXR1cm4gMCE9PWUmJih0aGlzLndvcmRzW3JdPWUsdGhpcy5sZW5ndGgrKyksdGhpc30sYS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHQpfSxhLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LGEucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LGEucHJvdG90eXBlLnBvdz1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQuYml0TGVuZ3RoKCkpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ci8yNnwwLGk9ciUyNjtlW3JdPSh0LndvcmRzW25dJjE8PGkpPj4+aX1yZXR1cm4gZX0odCk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBuZXcgYSgxKTtmb3IodmFyIHI9dGhpcyxuPTA7bjxlLmxlbmd0aCYmMD09PWVbbl07bisrLHI9ci5zcXIoKSk7aWYoKytuPGUubGVuZ3RoKWZvcih2YXIgaT1yLnNxcigpO248ZS5sZW5ndGg7bisrLGk9aS5zcXIoKSkwIT09ZVtuXSYmKHI9ci5tdWwoaSkpO3JldHVybiByfSxhLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGUscj10JTI2LGk9KHQtcikvMjYsYT02NzEwODg2Mz4+PjI2LXI8PDI2LXI7aWYoMCE9PXIpe3ZhciBvPTA7Zm9yKGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHM9dGhpcy53b3Jkc1tlXSZhLGw9KDB8dGhpcy53b3Jkc1tlXSktczw8cjt0aGlzLndvcmRzW2VdPWx8byxvPXM+Pj4yNi1yfW8mJih0aGlzLndvcmRzW2VdPW8sdGhpcy5sZW5ndGgrKyl9aWYoMCE9PWkpe2ZvcihlPXRoaXMubGVuZ3RoLTE7ZT49MDtlLS0pdGhpcy53b3Jkc1tlK2ldPXRoaXMud29yZHNbZV07Zm9yKGU9MDtlPGk7ZSsrKXRoaXMud29yZHNbZV09MDt0aGlzLmxlbmd0aCs9aX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4odCl9LGEucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbih0LGUscil7dmFyIGk7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCksaT1lPyhlLWUlMjYpLzI2OjA7dmFyIGE9dCUyNixvPU1hdGgubWluKCh0LWEpLzI2LHRoaXMubGVuZ3RoKSxzPTY3MTA4ODYzXjY3MTA4ODYzPj4+YTw8YSxsPXI7aWYoaS09byxpPU1hdGgubWF4KDAsaSksbCl7Zm9yKHZhciBjPTA7YzxvO2MrKylsLndvcmRzW2NdPXRoaXMud29yZHNbY107bC5sZW5ndGg9b31pZigwPT09byk7ZWxzZSBpZih0aGlzLmxlbmd0aD5vKWZvcih0aGlzLmxlbmd0aC09byxjPTA7Yzx0aGlzLmxlbmd0aDtjKyspdGhpcy53b3Jkc1tjXT10aGlzLndvcmRzW2Mrb107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgdT0wO2ZvcihjPXRoaXMubGVuZ3RoLTE7Yz49MCYmKDAhPT11fHxjPj1pKTtjLS0pe3ZhciBoPTB8dGhpcy53b3Jkc1tjXTt0aGlzLndvcmRzW2NdPXU8PDI2LWF8aD4+PmEsdT1oJnN9cmV0dXJuIGwmJjAhPT11JiYobC53b3Jkc1tsLmxlbmd0aCsrXT11KSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbih0LGUscil7cmV0dXJuIG4oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHQsZSxyKX0sYS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHQpfSxhLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbih0KX0sYS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHQpfSxhLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybih0KX0sYS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2LGk9MTw8ZTtyZXR1cm4hKHRoaXMubGVuZ3RoPD1yKSYmISEodGhpcy53b3Jkc1tyXSZpKX0sYS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPXQlMjYscj0odC1lKS8yNjtpZihuKDA9PT10aGlzLm5lZ2F0aXZlLFwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzXCIpLHRoaXMubGVuZ3RoPD1yKXJldHVybiB0aGlzO2lmKDAhPT1lJiZyKyssdGhpcy5sZW5ndGg9TWF0aC5taW4ocix0aGlzLmxlbmd0aCksMCE9PWUpe3ZhciBpPTY3MTA4ODYzXjY3MTA4ODYzPj4+ZTw8ZTt0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj1pfXJldHVybiB0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHQpfSxhLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbih0KXtyZXR1cm4gbihcIm51bWJlclwiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KSx0PDA/dGhpcy5pc3VibigtdCk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTx0Pyh0aGlzLndvcmRzWzBdPXQtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3Vibih0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4odCl9LGEucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbih0KXt0aGlzLndvcmRzWzBdKz10O2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZV0+PTY3MTA4ODY0O2UrKyl0aGlzLndvcmRzW2VdLT02NzEwODg2NCxlPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2UrMV09MTp0aGlzLndvcmRzW2UrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsZSsxKSx0aGlzfSxhLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbih0KXtpZihuKFwibnVtYmVyXCI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpLHQ8MClyZXR1cm4gdGhpcy5pYWRkbigtdCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXQsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2VdPDA7ZSsrKXRoaXMud29yZHNbZV0rPTY3MTA4ODY0LHRoaXMud29yZHNbZSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4odCl9LGEucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3Vibih0KX0sYS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sYS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LGEucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbih0LGUscil7dmFyIGksYSxvPXQubGVuZ3RoK3I7dGhpcy5fZXhwYW5kKG8pO3ZhciBzPTA7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKyl7YT0oMHx0aGlzLndvcmRzW2krcl0pK3M7dmFyIGw9KDB8dC53b3Jkc1tpXSkqZTtzPSgoYS09NjcxMDg4NjMmbCk+PjI2KS0obC82NzEwODg2NHwwKSx0aGlzLndvcmRzW2krcl09NjcxMDg4NjMmYX1mb3IoO2k8dGhpcy5sZW5ndGgtcjtpKyspcz0oYT0oMHx0aGlzLndvcmRzW2krcl0pK3MpPj4yNix0aGlzLndvcmRzW2krcl09NjcxMDg4NjMmYTtpZigwPT09cylyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihuKC0xPT09cykscz0wLGk9MDtpPHRoaXMubGVuZ3RoO2krKylzPShhPS0oMHx0aGlzLndvcmRzW2ldKStzKT4+MjYsdGhpcy53b3Jkc1tpXT02NzEwODg2MyZhO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbih0LGUpe3ZhciByPSh0aGlzLmxlbmd0aCx0Lmxlbmd0aCksbj10aGlzLmNsb25lKCksaT10LG89MHxpLndvcmRzW2kubGVuZ3RoLTFdOzAhPT0ocj0yNi10aGlzLl9jb3VudEJpdHMobykpJiYoaT1pLnVzaGxuKHIpLG4uaXVzaGxuKHIpLG89MHxpLndvcmRzW2kubGVuZ3RoLTFdKTt2YXIgcyxsPW4ubGVuZ3RoLWkubGVuZ3RoO2lmKFwibW9kXCIhPT1lKXsocz1uZXcgYShudWxsKSkubGVuZ3RoPWwrMSxzLndvcmRzPW5ldyBBcnJheShzLmxlbmd0aCk7Zm9yKHZhciBjPTA7YzxzLmxlbmd0aDtjKyspcy53b3Jkc1tjXT0wfXZhciB1PW4uY2xvbmUoKS5faXNobG5zdWJtdWwoaSwxLGwpOzA9PT11Lm5lZ2F0aXZlJiYobj11LHMmJihzLndvcmRzW2xdPTEpKTtmb3IodmFyIGg9bC0xO2g+PTA7aC0tKXt2YXIgZj02NzEwODg2NCooMHxuLndvcmRzW2kubGVuZ3RoK2hdKSsoMHxuLndvcmRzW2kubGVuZ3RoK2gtMV0pO2ZvcihmPU1hdGgubWluKGYvb3wwLDY3MTA4ODYzKSxuLl9pc2hsbnN1Ym11bChpLGYsaCk7MCE9PW4ubmVnYXRpdmU7KWYtLSxuLm5lZ2F0aXZlPTAsbi5faXNobG5zdWJtdWwoaSwxLGgpLG4uaXNaZXJvKCl8fChuLm5lZ2F0aXZlXj0xKTtzJiYocy53b3Jkc1toXT1mKX1yZXR1cm4gcyYmcy5zdHJpcCgpLG4uc3RyaXAoKSxcImRpdlwiIT09ZSYmMCE9PXImJm4uaXVzaHJuKHIpLHtkaXY6c3x8bnVsbCxtb2Q6bn19LGEucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIG4oIXQuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgYSgwKSxtb2Q6bmV3IGEoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZT8ocz10aGlzLm5lZygpLmRpdm1vZCh0LGUpLFwibW9kXCIhPT1lJiYoaT1zLmRpdi5uZWcoKSksXCJkaXZcIiE9PWUmJihvPXMubW9kLm5lZygpLHImJjAhPT1vLm5lZ2F0aXZlJiZvLmlhZGQodCkpLHtkaXY6aSxtb2Q6b30pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZT8ocz10aGlzLmRpdm1vZCh0Lm5lZygpLGUpLFwibW9kXCIhPT1lJiYoaT1zLmRpdi5uZWcoKSkse2RpdjppLG1vZDpzLm1vZH0pOjAhPSh0aGlzLm5lZ2F0aXZlJnQubmVnYXRpdmUpPyhzPXRoaXMubmVnKCkuZGl2bW9kKHQubmVnKCksZSksXCJkaXZcIiE9PWUmJihvPXMubW9kLm5lZygpLHImJjAhPT1vLm5lZ2F0aXZlJiZvLmlzdWIodCkpLHtkaXY6cy5kaXYsbW9kOm99KTp0Lmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAodCk8MD97ZGl2Om5ldyBhKDApLG1vZDp0aGlzfToxPT09dC5sZW5ndGg/XCJkaXZcIj09PWU/e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm51bGx9OlwibW9kXCI9PT1lP3tkaXY6bnVsbCxtb2Q6bmV3IGEodGhpcy5tb2RuKHQud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm5ldyBhKHRoaXMubW9kbih0LndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYodCxlKTt2YXIgaSxvLHN9LGEucHJvdG90eXBlLmRpdj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCxcImRpdlwiLCExKS5kaXZ9LGEucHJvdG90eXBlLm1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCxcIm1vZFwiLCExKS5tb2R9LGEucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsXCJtb2RcIiwhMCkubW9kfSxhLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRpdm1vZCh0KTtpZihlLm1vZC5pc1plcm8oKSlyZXR1cm4gZS5kaXY7dmFyIHI9MCE9PWUuZGl2Lm5lZ2F0aXZlP2UubW9kLmlzdWIodCk6ZS5tb2Qsbj10LnVzaHJuKDEpLGk9dC5hbmRsbigxKSxhPXIuY21wKG4pO3JldHVybiBhPDB8fDE9PT1pJiYwPT09YT9lLmRpdjowIT09ZS5kaXYubmVnYXRpdmU/ZS5kaXYuaXN1Ym4oMSk6ZS5kaXYuaWFkZG4oMSl9LGEucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24odCl7bih0PD02NzEwODg2Myk7Zm9yKHZhciBlPSgxPDwyNikldCxyPTAsaT10aGlzLmxlbmd0aC0xO2k+PTA7aS0tKXI9KGUqcisoMHx0aGlzLndvcmRzW2ldKSkldDtyZXR1cm4gcn0sYS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24odCl7bih0PD02NzEwODg2Myk7Zm9yKHZhciBlPTAscj10aGlzLmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgaT0oMHx0aGlzLndvcmRzW3JdKSs2NzEwODg2NCplO3RoaXMud29yZHNbcl09aS90fDAsZT1pJXR9cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHQpfSxhLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUpLG4oIXQuaXNaZXJvKCkpO3ZhciBlPXRoaXMscj10LmNsb25lKCk7ZT0wIT09ZS5uZWdhdGl2ZT9lLnVtb2QodCk6ZS5jbG9uZSgpO2Zvcih2YXIgaT1uZXcgYSgxKSxvPW5ldyBhKDApLHM9bmV3IGEoMCksbD1uZXcgYSgxKSxjPTA7ZS5pc0V2ZW4oKSYmci5pc0V2ZW4oKTspZS5pdXNocm4oMSksci5pdXNocm4oMSksKytjO2Zvcih2YXIgdT1yLmNsb25lKCksaD1lLmNsb25lKCk7IWUuaXNaZXJvKCk7KXtmb3IodmFyIGY9MCxwPTE7MD09KGUud29yZHNbMF0mcCkmJmY8MjY7KytmLHA8PD0xKTtpZihmPjApZm9yKGUuaXVzaHJuKGYpO2YtLSA+MDspKGkuaXNPZGQoKXx8by5pc09kZCgpKSYmKGkuaWFkZCh1KSxvLmlzdWIoaCkpLGkuaXVzaHJuKDEpLG8uaXVzaHJuKDEpO2Zvcih2YXIgZD0wLGc9MTswPT0oci53b3Jkc1swXSZnKSYmZDwyNjsrK2QsZzw8PTEpO2lmKGQ+MClmb3Ioci5pdXNocm4oZCk7ZC0tID4wOykocy5pc09kZCgpfHxsLmlzT2RkKCkpJiYocy5pYWRkKHUpLGwuaXN1YihoKSkscy5pdXNocm4oMSksbC5pdXNocm4oMSk7ZS5jbXAocik+PTA/KGUuaXN1YihyKSxpLmlzdWIocyksby5pc3ViKGwpKTooci5pc3ViKGUpLHMuaXN1YihpKSxsLmlzdWIobykpfXJldHVybnthOnMsYjpsLGdjZDpyLml1c2hsbihjKX19LGEucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlKSxuKCF0LmlzWmVybygpKTt2YXIgZT10aGlzLHI9dC5jbG9uZSgpO2U9MCE9PWUubmVnYXRpdmU/ZS51bW9kKHQpOmUuY2xvbmUoKTtmb3IodmFyIGksbz1uZXcgYSgxKSxzPW5ldyBhKDApLGw9ci5jbG9uZSgpO2UuY21wbigxKT4wJiZyLmNtcG4oMSk+MDspe2Zvcih2YXIgYz0wLHU9MTswPT0oZS53b3Jkc1swXSZ1KSYmYzwyNjsrK2MsdTw8PTEpO2lmKGM+MClmb3IoZS5pdXNocm4oYyk7Yy0tID4wOylvLmlzT2RkKCkmJm8uaWFkZChsKSxvLml1c2hybigxKTtmb3IodmFyIGg9MCxmPTE7MD09KHIud29yZHNbMF0mZikmJmg8MjY7KytoLGY8PD0xKTtpZihoPjApZm9yKHIuaXVzaHJuKGgpO2gtLSA+MDspcy5pc09kZCgpJiZzLmlhZGQobCkscy5pdXNocm4oMSk7ZS5jbXAocik+PTA/KGUuaXN1YihyKSxvLmlzdWIocykpOihyLmlzdWIoZSkscy5pc3ViKG8pKX1yZXR1cm4oaT0wPT09ZS5jbXBuKDEpP286cykuY21wbigwKTwwJiZpLmlhZGQodCksaX0sYS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHQuYWJzKCk7aWYodC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgZT10aGlzLmNsb25lKCkscj10LmNsb25lKCk7ZS5uZWdhdGl2ZT0wLHIubmVnYXRpdmU9MDtmb3IodmFyIG49MDtlLmlzRXZlbigpJiZyLmlzRXZlbigpO24rKyllLml1c2hybigxKSxyLml1c2hybigxKTtmb3IoOzspe2Zvcig7ZS5pc0V2ZW4oKTspZS5pdXNocm4oMSk7Zm9yKDtyLmlzRXZlbigpOylyLml1c2hybigxKTt2YXIgaT1lLmNtcChyKTtpZihpPDApe3ZhciBhPWU7ZT1yLHI9YX1lbHNlIGlmKDA9PT1pfHwwPT09ci5jbXBuKDEpKWJyZWFrO2UuaXN1YihyKX1yZXR1cm4gci5pdXNobG4obil9LGEucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWdjZCh0KS5hLnVtb2QodCl9LGEucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBdKX0sYS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1swXSl9LGEucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLndvcmRzWzBdJnR9LGEucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQpO3ZhciBlPXQlMjYscj0odC1lKS8yNixpPTE8PGU7aWYodGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLHRoaXMud29yZHNbcl18PWksdGhpcztmb3IodmFyIGE9aSxvPXI7MCE9PWEmJm88dGhpcy5sZW5ndGg7bysrKXt2YXIgcz0wfHRoaXMud29yZHNbb107YT0ocys9YSk+Pj4yNixzJj02NzEwODg2Myx0aGlzLndvcmRzW29dPXN9cmV0dXJuIDAhPT1hJiYodGhpcy53b3Jkc1tvXT1hLHRoaXMubGVuZ3RoKyspLHRoaXN9LGEucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxhLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhcilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmcilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSllPTE7ZWxzZXtyJiYodD0tdCksbih0PD02NzEwODg2MyxcIk51bWJlciBpcyB0b28gYmlnXCIpO3ZhciBpPTB8dGhpcy53b3Jkc1swXTtlPWk9PT10PzA6aTx0Py0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWU6ZX0sYS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHQpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGU9dGhpcy51Y21wKHQpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1lOmV9LGEucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24odCl7aWYodGhpcy5sZW5ndGg+dC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8dC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBlPTAscj10aGlzLmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgbj0wfHRoaXMud29yZHNbcl0saT0wfHQud29yZHNbcl07aWYobiE9PWkpe248aT9lPS0xOm4+aSYmKGU9MSk7YnJlYWt9fXJldHVybiBlfSxhLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10aGlzLmNtcG4odCl9LGEucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dGhpcy5jbXAodCl9LGEucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KT49MH0sYS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KT49MH0sYS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHQpe3JldHVybi0xPT09dGhpcy5jbXBuKHQpfSxhLnByb3RvdHlwZS5sdD1mdW5jdGlvbih0KXtyZXR1cm4tMT09PXRoaXMuY21wKHQpfSxhLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcG4odCk8PTB9LGEucHJvdG90eXBlLmx0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk8PTB9LGEucHJvdG90eXBlLmVxbj1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuY21wbih0KX0sYS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmNtcCh0KX0sYS5yZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB3KHQpfSxhLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbih0KXtyZXR1cm4gbighdGhpcy5yZWQsXCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLG4oMD09PXRoaXMubmVnYXRpdmUsXCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlc1wiKSx0LmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQodCl9LGEucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHRcIiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LGEucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZWQ9dCx0aGlzfSxhLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbih0KXtyZXR1cm4gbighdGhpcy5yZWQsXCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLHRoaXMuX2ZvcmNlUmVkKHQpfSxhLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmFkZCh0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuaWFkZCh0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLnN1Yih0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuaXN1Yih0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLnNobCh0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQubXVsKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQuaW11bCh0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxhLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxhLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxhLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxhLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxhLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQmJiF0LnJlZCxcInJlZFBvdyhub3JtYWxOdW0pXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHQpfTt2YXIgdj17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIG0odCxlKXt0aGlzLm5hbWU9dCx0aGlzLnA9bmV3IGEoZSwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IGEoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHkoKXttLmNhbGwodGhpcyxcImsyNTZcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmXCIpfWZ1bmN0aW9uIHgoKXttLmNhbGwodGhpcyxcInAyMjRcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxXCIpfWZ1bmN0aW9uIGIoKXttLmNhbGwodGhpcyxcInAxOTJcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmXCIpfWZ1bmN0aW9uIF8oKXttLmNhbGwodGhpcyxcIjI1NTE5XCIsXCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkXCIpfWZ1bmN0aW9uIHcodCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpe3ZhciBlPWEuX3ByaW1lKHQpO3RoaXMubT1lLnAsdGhpcy5wcmltZT1lfWVsc2Ugbih0Lmd0bigxKSxcIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMVwiKSx0aGlzLm09dCx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gayh0KXt3LmNhbGwodGhpcyx0KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBhKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfW0ucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgYShudWxsKTtyZXR1cm4gdC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHR9LG0ucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24odCl7dmFyIGUscj10O2Rve3RoaXMuc3BsaXQocix0aGlzLnRtcCksZT0ocj0ocj10aGlzLmltdWxLKHIpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoZT50aGlzLm4pO3ZhciBuPWU8dGhpcy5uPy0xOnIudWNtcCh0aGlzLnApO3JldHVybiAwPT09bj8oci53b3Jkc1swXT0wLHIubGVuZ3RoPTEpOm4+MD9yLmlzdWIodGhpcy5wKTpyLnN0cmlwKCkscn0sbS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXt0Lml1c2hybih0aGlzLm4sMCxlKX0sbS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaW11bCh0aGlzLmspfSxpKHksbSkseS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9TWF0aC5taW4odC5sZW5ndGgsOSksbj0wO248cjtuKyspZS53b3Jkc1tuXT10LndvcmRzW25dO2lmKGUubGVuZ3RoPXIsdC5sZW5ndGg8PTkpcmV0dXJuIHQud29yZHNbMF09MCx2b2lkKHQubGVuZ3RoPTEpO3ZhciBpPXQud29yZHNbOV07Zm9yKGUud29yZHNbZS5sZW5ndGgrK109NDE5NDMwMyZpLG49MTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBhPTB8dC53b3Jkc1tuXTt0LndvcmRzW24tMTBdPSg0MTk0MzAzJmEpPDw0fGk+Pj4yMixpPWF9aT4+Pj0yMix0LndvcmRzW24tMTBdPWksMD09PWkmJnQubGVuZ3RoPjEwP3QubGVuZ3RoLT0xMDp0Lmxlbmd0aC09OX0seS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7dC53b3Jkc1t0Lmxlbmd0aF09MCx0LndvcmRzW3QubGVuZ3RoKzFdPTAsdC5sZW5ndGgrPTI7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj0wfHQud29yZHNbcl07ZSs9OTc3Km4sdC53b3Jkc1tyXT02NzEwODg2MyZlLGU9NjQqbisoZS82NzEwODg2NHwwKX1yZXR1cm4gMD09PXQud29yZHNbdC5sZW5ndGgtMV0mJih0Lmxlbmd0aC0tLDA9PT10LndvcmRzW3QubGVuZ3RoLTFdJiZ0Lmxlbmd0aC0tKSx0fSxpKHgsbSksaShiLG0pLGkoXyxtKSxfLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPTE5KigwfHQud29yZHNbcl0pK2UsaT02NzEwODg2MyZuO24+Pj49MjYsdC53b3Jkc1tyXT1pLGU9bn1yZXR1cm4gMCE9PWUmJih0LndvcmRzW3QubGVuZ3RoKytdPWUpLHR9LGEuX3ByaW1lPWZ1bmN0aW9uKHQpe2lmKHZbdF0pcmV0dXJuIHZbdF07dmFyIGU7aWYoXCJrMjU2XCI9PT10KWU9bmV3IHk7ZWxzZSBpZihcInAyMjRcIj09PXQpZT1uZXcgeDtlbHNlIGlmKFwicDE5MlwiPT09dCllPW5ldyBiO2Vsc2V7aWYoXCJwMjU1MTlcIiE9PXQpdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBwcmltZSBcIit0KTtlPW5ldyBffXJldHVybiB2W3RdPWUsZX0sdy5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSxcInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzXCIpLG4odC5yZWQsXCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpfSx3LnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbih0LGUpe24oMD09KHQubmVnYXRpdmV8ZS5uZWdhdGl2ZSksXCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlc1wiKSxuKHQucmVkJiZ0LnJlZD09PWUucmVkLFwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKX0sdy5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UodCkuX2ZvcmNlUmVkKHRoaXMpOnQudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHQpe3JldHVybiB0LmlzWmVybygpP3QuY2xvbmUoKTp0aGlzLm0uc3ViKHQpLl9mb3JjZVJlZCh0aGlzKX0sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuYWRkKGUpO3JldHVybiByLmNtcCh0aGlzLm0pPj0wJiZyLmlzdWIodGhpcy5tKSxyLl9mb3JjZVJlZCh0aGlzKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmlhZGQoZSk7cmV0dXJuIHIuY21wKHRoaXMubSk+PTAmJnIuaXN1Yih0aGlzLm0pLHJ9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LnN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHIuX2ZvcmNlUmVkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuaXN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHJ9LHcucHJvdG90eXBlLnNobD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkxKHQpLHRoaXMuaW1vZCh0LnVzaGxuKGUpKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHQsZSksdGhpcy5pbW9kKHQuaW11bChlKSl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHQsZSksdGhpcy5pbW9kKHQubXVsKGUpKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbXVsKHQsdC5jbG9uZSgpKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm11bCh0LHQpfSx3LnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHQpe2lmKHQuaXNaZXJvKCkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgZT10aGlzLm0uYW5kbG4oMyk7aWYobihlJTI9PTEpLDM9PT1lKXt2YXIgcj10aGlzLm0uYWRkKG5ldyBhKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHQscil9Zm9yKHZhciBpPXRoaXMubS5zdWJuKDEpLG89MDshaS5pc1plcm8oKSYmMD09PWkuYW5kbG4oMSk7KW8rKyxpLml1c2hybigxKTtuKCFpLmlzWmVybygpKTt2YXIgcz1uZXcgYSgxKS50b1JlZCh0aGlzKSxsPXMucmVkTmVnKCksYz10aGlzLm0uc3VibigxKS5pdXNocm4oMSksdT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKHU9bmV3IGEoMip1KnUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyh1LGMpLmNtcChsKTspdS5yZWRJQWRkKGwpO2Zvcih2YXIgaD10aGlzLnBvdyh1LGkpLGY9dGhpcy5wb3codCxpLmFkZG4oMSkuaXVzaHJuKDEpKSxwPXRoaXMucG93KHQsaSksZD1vOzAhPT1wLmNtcChzKTspe2Zvcih2YXIgZz1wLHY9MDswIT09Zy5jbXAocyk7disrKWc9Zy5yZWRTcXIoKTtuKHY8ZCk7dmFyIG09dGhpcy5wb3coaCxuZXcgYSgxKS5pdXNobG4oZC12LTEpKTtmPWYucmVkTXVsKG0pLGg9bS5yZWRTcXIoKSxwPXAucmVkTXVsKGgpLGQ9dn1yZXR1cm4gZn0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXt2YXIgZT10Ll9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09ZS5uZWdhdGl2ZT8oZS5uZWdhdGl2ZT0wLHRoaXMuaW1vZChlKS5yZWROZWcoKSk6dGhpcy5pbW9kKGUpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odCxlKXtpZihlLmlzWmVybygpKXJldHVybiBuZXcgYSgxKS50b1JlZCh0aGlzKTtpZigwPT09ZS5jbXBuKDEpKXJldHVybiB0LmNsb25lKCk7dmFyIHI9bmV3IEFycmF5KDE2KTtyWzBdPW5ldyBhKDEpLnRvUmVkKHRoaXMpLHJbMV09dDtmb3IodmFyIG49MjtuPHIubGVuZ3RoO24rKylyW25dPXRoaXMubXVsKHJbbi0xXSx0KTt2YXIgaT1yWzBdLG89MCxzPTAsbD1lLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bCYmKGw9MjYpLG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7Zm9yKHZhciBjPWUud29yZHNbbl0sdT1sLTE7dT49MDt1LS0pe3ZhciBoPWM+PnUmMTtpIT09clswXSYmKGk9dGhpcy5zcXIoaSkpLDAhPT1ofHwwIT09bz8obzw8PTEsb3w9aCwoND09PSsrc3x8MD09PW4mJjA9PT11KSYmKGk9dGhpcy5tdWwoaSxyW29dKSxzPTAsbz0wKSk6cz0wfWw9MjZ9cmV0dXJuIGl9LHcucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih0KXt2YXIgZT10LnVtb2QodGhpcy5tKTtyZXR1cm4gZT09PXQ/ZS5jbG9uZSgpOmV9LHcucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xvbmUoKTtyZXR1cm4gZS5yZWQ9bnVsbCxlfSxhLm1vbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBrKHQpfSxpKGssdyksay5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltb2QodC51c2hsbih0aGlzLnNoaWZ0KSl9LGsucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW1vZCh0Lm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gZS5yZWQ9bnVsbCxlfSxrLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQsZSl7aWYodC5pc1plcm8oKXx8ZS5pc1plcm8oKSlyZXR1cm4gdC53b3Jkc1swXT0wLHQubGVuZ3RoPTEsdDt2YXIgcj10LmltdWwoZSksbj1yLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxpPXIuaXN1YihuKS5pdXNocm4odGhpcy5zaGlmdCksYT1pO3JldHVybiBpLmNtcCh0aGlzLm0pPj0wP2E9aS5pc3ViKHRoaXMubSk6aS5jbXBuKDApPDAmJihhPWkuaWFkZCh0aGlzLm0pKSxhLl9mb3JjZVJlZCh0aGlzKX0say5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQsZSl7aWYodC5pc1plcm8oKXx8ZS5pc1plcm8oKSlyZXR1cm4gbmV3IGEoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciByPXQubXVsKGUpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksaT1yLmlzdWIobikuaXVzaHJuKHRoaXMuc2hpZnQpLG89aTtyZXR1cm4gaS5jbXAodGhpcy5tKT49MD9vPWkuaXN1Yih0aGlzLm0pOmkuY21wbigwKTwwJiYobz1pLmlhZGQodGhpcy5tKSksby5fZm9yY2VSZWQodGhpcyl9LGsucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW1vZCh0Ll9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIGV8fGUsdGhpcyl9LHtidWZmZXI6OTR9XSw4NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT10Lmxlbmd0aCxhPTA7Zm9yKGU9MDtlPGk7KytlKWErPXRbZV0ubGVuZ3RoO3ZhciBvPW5ldyBBcnJheShhKSxzPTA7Zm9yKGU9MDtlPGk7KytlKXt2YXIgbD10W2VdLGM9bC5sZW5ndGg7Zm9yKHI9MDtyPGM7KytyKXt2YXIgdT1vW3MrK109bmV3IEFycmF5KGMtMSksaD0wO2ZvcihuPTA7bjxjOysrbiluIT09ciYmKHVbaCsrXT1sW25dKTtpZigxJnIpe3ZhciBmPXVbMV07dVsxXT11WzBdLHVbMF09Zn19fXJldHVybiBvfX0se31dLDg3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAxOnJldHVybiBuPVtdLGMoaT10LGksdSwhMCksbjtjYXNlIDI6cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9jKHQsdCxlLCEwKTpmdW5jdGlvbih0LGUpe3JldHVybiBuPVtdLGModCxlLHUsITEpLG59KHQsZSk7Y2FzZSAzOnJldHVybiBjKHQsZSxyLCExKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImJveC1pbnRlcnNlY3Q6IEludmFsaWQgYXJndW1lbnRzXCIpfXZhciBpfTt2YXIgbixpPXQoXCJ0eXBlZGFycmF5LXBvb2xcIiksYT10KFwiLi9saWIvc3dlZXBcIiksbz10KFwiLi9saWIvaW50ZXJzZWN0XCIpO2Z1bmN0aW9uIHModCxlKXtmb3IodmFyIHI9MDtyPHQ7KytyKWlmKCEoZVtyXTw9ZVtyK3RdKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBsKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9MCxvPTAsbD10Lmxlbmd0aDtvPGw7KytvKXt2YXIgYz10W29dO2lmKCFzKGUsYykpe2Zvcih2YXIgdT0wO3U8MiplOysrdSlyW2krK109Y1t1XTtuW2ErK109b319cmV0dXJuIGF9ZnVuY3Rpb24gYyh0LGUscixuKXt2YXIgcz10Lmxlbmd0aCxjPWUubGVuZ3RoO2lmKCEoczw9MHx8Yzw9MCkpe3ZhciB1PXRbMF0ubGVuZ3RoPj4+MTtpZighKHU8PTApKXt2YXIgaCxmPWkubWFsbG9jRG91YmxlKDIqdSpzKSxwPWkubWFsbG9jSW50MzIocyk7aWYoKHM9bCh0LHUsZixwKSk+MCl7aWYoMT09PXUmJm4pYS5pbml0KHMpLGg9YS5zd2VlcENvbXBsZXRlKHUsciwwLHMsZixwLDAscyxmLHApO2Vsc2V7dmFyIGQ9aS5tYWxsb2NEb3VibGUoMip1KmMpLGc9aS5tYWxsb2NJbnQzMihjKTsoYz1sKGUsdSxkLGcpKT4wJiYoYS5pbml0KHMrYyksaD0xPT09dT9hLnN3ZWVwQmlwYXJ0aXRlKHUsciwwLHMsZixwLDAsYyxkLGcpOm8odSxyLG4scyxmLHAsYyxkLGcpLGkuZnJlZShkKSxpLmZyZWUoZykpfWkuZnJlZShmKSxpLmZyZWUocCl9cmV0dXJuIGh9fX1mdW5jdGlvbiB1KHQsZSl7bi5wdXNoKFt0LGVdKX19LHtcIi4vbGliL2ludGVyc2VjdFwiOjg5LFwiLi9saWIvc3dlZXBcIjo5MyxcInR5cGVkYXJyYXktcG9vbFwiOjUzMH1dLDg4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49XCJkXCIsaT1cImF4XCIsYT1cInZ2XCIsbz1cImZwXCIscz1cImVzXCIsbD1cInJzXCIsYz1cInJlXCIsdT1cInJiXCIsaD1cInJpXCIsZj1cInJwXCIscD1cImJzXCIsZD1cImJlXCIsZz1cImJiXCIsdj1cImJpXCIsbT1cImJwXCIseT1cInJ2XCIseD1cIlFcIixiPVtuLGksYSxsLGMsdSxoLHAsZCxnLHZdO2Z1bmN0aW9uIF8odCl7dmFyIGU9XCJicnV0ZUZvcmNlXCIrKHQ/XCJGdWxsXCI6XCJQYXJ0aWFsXCIpLHI9W10sXz1iLnNsaWNlKCk7dHx8Xy5zcGxpY2UoMywwLG8pO3ZhciB3PVtcImZ1bmN0aW9uIFwiK2UrXCIoXCIrXy5qb2luKCkrXCIpe1wiXTtmdW5jdGlvbiBrKGUsbyl7dmFyIF89ZnVuY3Rpb24odCxlLHIpe3ZhciBvPVwiYnJ1dGVGb3JjZVwiKyh0P1wiUmVkXCI6XCJCbHVlXCIpKyhlP1wiRmxpcFwiOlwiXCIpKyhyP1wiRnVsbFwiOlwiXCIpLF89W1wiZnVuY3Rpb24gXCIsbyxcIihcIixiLmpvaW4oKSxcIil7XCIsXCJ2YXIgXCIscyxcIj0yKlwiLG4sXCI7XCJdLHc9XCJmb3IodmFyIGk9XCIrbCtcIixcIitmK1wiPVwiK3MrXCIqXCIrbCtcIjtpPFwiK2MrXCI7KytpLFwiK2YrXCIrPVwiK3MrXCIpe3ZhciB4MD1cIit1K1wiW1wiK2krXCIrXCIrZitcIl0seDE9XCIrdStcIltcIitpK1wiK1wiK2YrXCIrXCIrbitcIl0seGk9XCIraCtcIltpXTtcIixrPVwiZm9yKHZhciBqPVwiK3ArXCIsXCIrbStcIj1cIitzK1wiKlwiK3ArXCI7ajxcIitkK1wiOysraixcIittK1wiKz1cIitzK1wiKXt2YXIgeTA9XCIrZytcIltcIitpK1wiK1wiK20rXCJdLFwiKyhyP1wieTE9XCIrZytcIltcIitpK1wiK1wiK20rXCIrXCIrbitcIl0sXCI6XCJcIikrXCJ5aT1cIit2K1wiW2pdO1wiO3JldHVybiB0P18ucHVzaCh3LHgsXCI6XCIsayk6Xy5wdXNoKGsseCxcIjpcIix3KSxyP18ucHVzaChcImlmKHkxPHgwfHx4MTx5MCljb250aW51ZTtcIik6ZT9fLnB1c2goXCJpZih5MDw9eDB8fHgxPHkwKWNvbnRpbnVlO1wiKTpfLnB1c2goXCJpZih5MDx4MHx8eDE8eTApY29udGludWU7XCIpLF8ucHVzaChcImZvcih2YXIgaz1cIitpK1wiKzE7azxcIituK1wiOysrayl7dmFyIHIwPVwiK3UrXCJbaytcIitmK1wiXSxyMT1cIit1K1wiW2srXCIrbitcIitcIitmK1wiXSxiMD1cIitnK1wiW2srXCIrbStcIl0sYjE9XCIrZytcIltrK1wiK24rXCIrXCIrbStcIl07aWYocjE8YjB8fGIxPHIwKWNvbnRpbnVlIFwiK3grXCI7fXZhciBcIit5K1wiPVwiK2ErXCIoXCIpLGU/Xy5wdXNoKFwieWkseGlcIik6Xy5wdXNoKFwieGkseWlcIiksXy5wdXNoKFwiKTtpZihcIit5K1wiIT09dm9pZCAwKXJldHVybiBcIit5K1wiO319fVwiKSx7bmFtZTpvLGNvZGU6Xy5qb2luKFwiXCIpfX0oZSxvLHQpO3IucHVzaChfLmNvZGUpLHcucHVzaChcInJldHVybiBcIitfLm5hbWUrXCIoXCIrYi5qb2luKCkrXCIpO1wiKX13LnB1c2goXCJpZihcIitjK1wiLVwiK2wrXCI+XCIrZCtcIi1cIitwK1wiKXtcIiksdD8oayghMCwhMSksdy5wdXNoKFwifWVsc2V7XCIpLGsoITEsITEpKToody5wdXNoKFwiaWYoXCIrbytcIil7XCIpLGsoITAsITApLHcucHVzaChcIn1lbHNle1wiKSxrKCEwLCExKSx3LnB1c2goXCJ9fWVsc2V7aWYoXCIrbytcIil7XCIpLGsoITEsITApLHcucHVzaChcIn1lbHNle1wiKSxrKCExLCExKSx3LnB1c2goXCJ9XCIpKSx3LnB1c2goXCJ9fXJldHVybiBcIitlKTt2YXIgQT1yLmpvaW4oXCJcIikrdy5qb2luKFwiXCIpO3JldHVybiBuZXcgRnVuY3Rpb24oQSkoKX1yLnBhcnRpYWw9XyghMSksci5mdWxsPV8oITApfSx7fV0sODk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSx1LFMsRSxDLEwpeyFmdW5jdGlvbih0LGUpe3ZhciByPTgqaS5sb2cyKGUrMSkqKHQrMSl8MCxhPWkubmV4dFBvdzIoYipyKTt3Lmxlbmd0aDxhJiYobi5mcmVlKHcpLHc9bi5tYWxsb2NJbnQzMihhKSk7dmFyIG89aS5uZXh0UG93MihfKnIpO2s8byYmKG4uZnJlZShrKSxrPW4ubWFsbG9jRG91YmxlKG8pKX0odCxhK0UpO3ZhciB6LE89MCxJPTIqdDtBKE8rKywwLDAsYSwwLEUscj8xNjowLC0xLzAsMS8wKSxyfHxBKE8rKywwLDAsRSwwLGEsMSwtMS8wLDEvMCk7Zm9yKDtPPjA7KXt2YXIgRD0oTy09MSkqYixQPXdbRF0sUj13W0QrMV0sRj13W0QrMl0sQj13W0QrM10sTj13W0QrNF0saj13W0QrNV0sVj1PKl8sVT1rW1ZdLHE9a1tWKzFdLEg9MSZqLEc9ISEoMTYmaiksWT11LFc9UyxYPUMsWj1MO2lmKEgmJihZPUMsVz1MLFg9dSxaPVMpLCEoMiZqJiYoRj12KHQsUCxSLEYsWSxXLHEpLFI+PUYpfHw0JmomJihSPW0odCxQLFIsRixZLFcsVSkpPj1GKSl7dmFyICQ9Ri1SLEo9Ti1CO2lmKEcpe2lmKHQqJCooJCtKKTxwKXtpZih2b2lkIDAhPT0oej1sLnNjYW5Db21wbGV0ZSh0LFAsZSxSLEYsWSxXLEIsTixYLFopKSlyZXR1cm4gejtjb250aW51ZX19ZWxzZXtpZih0Kk1hdGgubWluKCQsSik8aCl7aWYodm9pZCAwIT09KHo9byh0LFAsZSxILFIsRixZLFcsQixOLFgsWikpKXJldHVybiB6O2NvbnRpbnVlfWlmKHQqJCpKPGYpe2lmKHZvaWQgMCE9PSh6PWwuc2NhbkJpcGFydGl0ZSh0LFAsZSxILFIsRixZLFcsQixOLFgsWikpKXJldHVybiB6O2NvbnRpbnVlfX12YXIgSz1kKHQsUCxSLEYsWSxXLFUscSk7aWYoUjxLKWlmKHQqKEstUik8aCl7aWYodm9pZCAwIT09KHo9cyh0LFArMSxlLFIsSyxZLFcsQixOLFgsWikpKXJldHVybiB6fWVsc2UgaWYoUD09PXQtMil7aWYodm9pZCAwIT09KHo9SD9sLnN3ZWVwQmlwYXJ0aXRlKHQsZSxCLE4sWCxaLFIsSyxZLFcpOmwuc3dlZXBCaXBhcnRpdGUodCxlLFIsSyxZLFcsQixOLFgsWikpKXJldHVybiB6fWVsc2UgQShPKyssUCsxLFIsSyxCLE4sSCwtMS8wLDEvMCksQShPKyssUCsxLEIsTixSLEssMV5ILC0xLzAsMS8wKTtpZihLPEYpe3ZhciBRPWModCxQLEIsTixYLFopLHR0PVhbSSpRK1BdLGV0PWcodCxQLFEsTixYLFosdHQpO2lmKGV0PE4mJkEoTysrLFAsSyxGLGV0LE4sKDR8SCkrKEc/MTY6MCksdHQscSksQjxRJiZBKE8rKyxQLEssRixCLFEsKDJ8SCkrKEc/MTY6MCksVSx0dCksUSsxPT09ZXQpe2lmKHZvaWQgMCE9PSh6PUc/TSh0LFAsZSxLLEYsWSxXLFEsWCxaW1FdKTpUKHQsUCxlLEgsSyxGLFksVyxRLFgsWltRXSkpKXJldHVybiB6fWVsc2UgaWYoUTxldCl7dmFyIHJ0O2lmKEcpe2lmKHJ0PXkodCxQLEssRixZLFcsdHQpLEs8cnQpe3ZhciBudD1nKHQsUCxLLHJ0LFksVyx0dCk7aWYoUD09PXQtMil7aWYoSzxudCYmdm9pZCAwIT09KHo9bC5zd2VlcENvbXBsZXRlKHQsZSxLLG50LFksVyxRLGV0LFgsWikpKXJldHVybiB6O2lmKG50PHJ0JiZ2b2lkIDAhPT0oej1sLnN3ZWVwQmlwYXJ0aXRlKHQsZSxudCxydCxZLFcsUSxldCxYLFopKSlyZXR1cm4gen1lbHNlIEs8bnQmJkEoTysrLFArMSxLLG50LFEsZXQsMTYsLTEvMCwxLzApLG50PHJ0JiYoQShPKyssUCsxLG50LHJ0LFEsZXQsMCwtMS8wLDEvMCksQShPKyssUCsxLFEsZXQsbnQscnQsMSwtMS8wLDEvMCkpfX1lbHNlIHJ0PUg/eCh0LFAsSyxGLFksVyx0dCk6eSh0LFAsSyxGLFksVyx0dCksSzxydCYmKFA9PT10LTI/ej1IP2wuc3dlZXBCaXBhcnRpdGUodCxlLFEsZXQsWCxaLEsscnQsWSxXKTpsLnN3ZWVwQmlwYXJ0aXRlKHQsZSxLLHJ0LFksVyxRLGV0LFgsWik6KEEoTysrLFArMSxLLHJ0LFEsZXQsSCwtMS8wLDEvMCksQShPKyssUCsxLFEsZXQsSyxydCwxXkgsLTEvMCwxLzApKSl9fX19fTt2YXIgbj10KFwidHlwZWRhcnJheS1wb29sXCIpLGk9dChcImJpdC10d2lkZGxlXCIpLGE9dChcIi4vYnJ1dGVcIiksbz1hLnBhcnRpYWwscz1hLmZ1bGwsbD10KFwiLi9zd2VlcFwiKSxjPXQoXCIuL21lZGlhblwiKSx1PXQoXCIuL3BhcnRpdGlvblwiKSxoPTEyOCxmPTE8PDIyLHA9MTw8MjIsZD11KFwiIShsbz49cDApJiYhKHAxPj1oaSlcIixbXCJwMFwiLFwicDFcIl0pLGc9dShcImxvPT09cDBcIixbXCJwMFwiXSksdj11KFwibG88cDBcIixbXCJwMFwiXSksbT11KFwiaGk8PXAwXCIsW1wicDBcIl0pLHk9dShcImxvPD1wMCYmcDA8PWhpXCIsW1wicDBcIl0pLHg9dShcImxvPHAwJiZwMDw9aGlcIixbXCJwMFwiXSksYj02LF89Mix3PW4ubWFsbG9jSW50MzIoMTAyNCksaz1uLm1hbGxvY0RvdWJsZSgxMDI0KTtmdW5jdGlvbiBBKHQsZSxyLG4saSxhLG8scyxsKXt2YXIgYz1iKnQ7d1tjXT1lLHdbYysxXT1yLHdbYysyXT1uLHdbYyszXT1pLHdbYys0XT1hLHdbYys1XT1vO3ZhciB1PV8qdDtrW3VdPXMsa1t1KzFdPWx9ZnVuY3Rpb24gVCh0LGUscixuLGksYSxvLHMsbCxjLHUpe3ZhciBoPTIqdCxmPWwqaCxwPWNbZitlXTt0OmZvcih2YXIgZD1pLGc9aSpoO2Q8YTsrK2QsZys9aCl7dmFyIHY9b1tnK2VdLG09b1tnK2UrdF07aWYoIShwPHZ8fG08cCkmJighbnx8cCE9PXYpKXtmb3IodmFyIHkseD1zW2RdLGI9ZSsxO2I8dDsrK2Ipe3Y9b1tnK2JdLG09b1tnK2IrdF07dmFyIF89Y1tmK2JdLHc9Y1tmK2IrdF07aWYobTxffHx3PHYpY29udGludWUgdH1pZih2b2lkIDAhPT0oeT1uP3IodSx4KTpyKHgsdSkpKXJldHVybiB5fX19ZnVuY3Rpb24gTSh0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdT0yKnQsaD1zKnUsZj1sW2grZV07dDpmb3IodmFyIHA9bixkPW4qdTtwPGk7KytwLGQrPXUpe3ZhciBnPW9bcF07aWYoZyE9PWMpe3ZhciB2PWFbZCtlXSxtPWFbZCtlK3RdO2lmKCEoZjx2fHxtPGYpKXtmb3IodmFyIHk9ZSsxO3k8dDsrK3kpe3Y9YVtkK3ldLG09YVtkK3krdF07dmFyIHg9bFtoK3ldLGI9bFtoK3krdF07aWYobTx4fHxiPHYpY29udGludWUgdH12YXIgXz1yKGcsYyk7aWYodm9pZCAwIT09XylyZXR1cm4gX319fX19LHtcIi4vYnJ1dGVcIjo4OCxcIi4vbWVkaWFuXCI6OTAsXCIuL3BhcnRpdGlvblwiOjkxLFwiLi9zd2VlcFwiOjkzLFwiYml0LXR3aWRkbGVcIjo4MyxcInR5cGVkYXJyYXktcG9vbFwiOjUzMH1dLDkwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyxsKXtpZihvPD1yKzEpcmV0dXJuIHI7dmFyIGM9cix1PW8saD1vK3I+Pj4xLGY9Mip0LHA9aCxkPXNbZipoK2VdO2Zvcig7Yzx1Oyl7aWYodS1jPGkpe2EodCxlLGMsdSxzLGwpLGQ9c1tmKmgrZV07YnJlYWt9dmFyIGc9dS1jLHY9TWF0aC5yYW5kb20oKSpnK2N8MCxtPXNbZip2K2VdLHk9TWF0aC5yYW5kb20oKSpnK2N8MCx4PXNbZip5K2VdLGI9TWF0aC5yYW5kb20oKSpnK2N8MCxfPXNbZipiK2VdO208PXg/Xz49eD8ocD15LGQ9eCk6bT49Xz8ocD12LGQ9bSk6KHA9YixkPV8pOng+PV8/KHA9eSxkPXgpOl8+PW0/KHA9dixkPW0pOihwPWIsZD1fKTtmb3IodmFyIHc9ZioodS0xKSxrPWYqcCxBPTA7QTxmOysrQSwrK3csKytrKXt2YXIgVD1zW3ddO3Nbd109c1trXSxzW2tdPVR9dmFyIE09bFt1LTFdO2xbdS0xXT1sW3BdLGxbcF09TSxwPW4odCxlLGMsdS0xLHMsbCxkKTtmb3IodmFyIHc9ZioodS0xKSxrPWYqcCxBPTA7QTxmOysrQSwrK3csKytrKXt2YXIgVD1zW3ddO3Nbd109c1trXSxzW2tdPVR9dmFyIE09bFt1LTFdO2lmKGxbdS0xXT1sW3BdLGxbcF09TSxoPHApe2Zvcih1PXAtMTtjPHUmJnNbZioodS0xKStlXT09PWQ7KXUtPTE7dSs9MX1lbHNle2lmKCEocDxoKSlicmVhaztmb3IoYz1wKzE7Yzx1JiZzW2YqYytlXT09PWQ7KWMrPTF9fXJldHVybiBuKHQsZSxyLGgscyxsLHNbZipoK2VdKX07dmFyIG49dChcIi4vcGFydGl0aW9uXCIpKFwibG88cDBcIixbXCJwMFwiXSksaT04O2Z1bmN0aW9uIGEodCxlLHIsbixpLGEpe2Zvcih2YXIgbz0yKnQscz1vKihyKzEpK2UsbD1yKzE7bDxuOysrbCxzKz1vKWZvcih2YXIgYz1pW3NdLHU9bCxoPW8qKGwtMSk7dT5yJiZpW2grZV0+YzstLXUsaC09byl7Zm9yKHZhciBmPWgscD1oK28sZD0wO2Q8bzsrK2QsKytmLCsrcCl7dmFyIGc9aVtmXTtpW2ZdPWlbcF0saVtwXT1nfXZhciB2PWFbdV07YVt1XT1hW3UtMV0sYVt1LTFdPXZ9fX0se1wiLi9wYXJ0aXRpb25cIjo5MX1dLDkxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9XCJhYmNkZWZcIi5zcGxpdChcIlwiKS5jb25jYXQoZSksaT1bXTt0LmluZGV4T2YoXCJsb1wiKT49MCYmaS5wdXNoKFwibG89ZVtrK25dXCIpO3QuaW5kZXhPZihcImhpXCIpPj0wJiZpLnB1c2goXCJoaT1lW2srb11cIik7cmV0dXJuIHIucHVzaChuLnJlcGxhY2UoXCJfXCIsaS5qb2luKCkpLnJlcGxhY2UoXCIkXCIsdCkpLEZ1bmN0aW9uLmFwcGx5KHZvaWQgMCxyKX07dmFyIG49XCJmb3IodmFyIGo9MiphLGs9aipjLGw9ayxtPWMsbj1iLG89YStiLHA9YztkPnA7KytwLGsrPWope3ZhciBfO2lmKCQpaWYobT09PXApbSs9MSxsKz1qO2Vsc2V7Zm9yKHZhciBzPTA7aj5zOysrcyl7dmFyIHQ9ZVtrK3NdO2VbaytzXT1lW2xdLGVbbCsrXT10fXZhciB1PWZbcF07ZltwXT1mW21dLGZbbSsrXT11fX1yZXR1cm4gbVwifSx7fV0sOTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlPD00Km4/aSgwLGUtMSx0KTpmdW5jdGlvbiB0KGUscixoKXt2YXIgZj0oci1lKzEpLzZ8MCxwPWUrZixkPXItZixnPWUrcj4+MSx2PWctZixtPWcrZix5PXAseD12LGI9ZyxfPW0sdz1kLGs9ZSsxLEE9ci0xLFQ9MDtjKHkseCxoKSYmKFQ9eSx5PXgseD1UKTtjKF8sdyxoKSYmKFQ9XyxfPXcsdz1UKTtjKHksYixoKSYmKFQ9eSx5PWIsYj1UKTtjKHgsYixoKSYmKFQ9eCx4PWIsYj1UKTtjKHksXyxoKSYmKFQ9eSx5PV8sXz1UKTtjKGIsXyxoKSYmKFQ9YixiPV8sXz1UKTtjKHgsdyxoKSYmKFQ9eCx4PXcsdz1UKTtjKHgsYixoKSYmKFQ9eCx4PWIsYj1UKTtjKF8sdyxoKSYmKFQ9XyxfPXcsdz1UKTt2YXIgTT1oWzIqeF07dmFyIFM9aFsyKngrMV07dmFyIEU9aFsyKl9dO3ZhciBDPWhbMipfKzFdO3ZhciBMPTIqeTt2YXIgej0yKmI7dmFyIE89Mip3O3ZhciBJPTIqcDt2YXIgRD0yKmc7dmFyIFA9MipkO2Zvcih2YXIgUj0wO1I8MjsrK1Ipe3ZhciBGPWhbTCtSXSxCPWhbeitSXSxOPWhbTytSXTtoW0krUl09RixoW0QrUl09QixoW1ArUl09Tn1vKHYsZSxoKTtvKG0scixoKTtmb3IodmFyIGo9aztqPD1BOysrailpZih1KGosTSxTLGgpKWohPT1rJiZhKGosayxoKSwrK2s7ZWxzZSBpZighdShqLEUsQyxoKSlmb3IoOzspe2lmKHUoQSxFLEMsaCkpe3UoQSxNLFMsaCk/KHMoaixrLEEsaCksKytrLC0tQSk6KGEoaixBLGgpLC0tQSk7YnJlYWt9aWYoLS1BPGopYnJlYWt9bChlLGstMSxNLFMsaCk7bChyLEErMSxFLEMsaCk7ay0yLWU8PW4/aShlLGstMixoKTp0KGUsay0yLGgpO3ItKEErMik8PW4/aShBKzIscixoKTp0KEErMixyLGgpO0Etazw9bj9pKGssQSxoKTp0KGssQSxoKX0oMCxlLTEsdCl9O3ZhciBuPTMyO2Z1bmN0aW9uIGkodCxlLHIpe2Zvcih2YXIgbj0yKih0KzEpLGk9dCsxO2k8PWU7KytpKXtmb3IodmFyIGE9cltuKytdLG89cltuKytdLHM9aSxsPW4tMjtzLS0gPnQ7KXt2YXIgYz1yW2wtMl0sdT1yW2wtMV07aWYoYzxhKWJyZWFrO2lmKGM9PT1hJiZ1PG8pYnJlYWs7cltsXT1jLHJbbCsxXT11LGwtPTJ9cltsXT1hLHJbbCsxXT1vfX1mdW5jdGlvbiBhKHQsZSxyKXtlKj0yO3ZhciBuPXJbdCo9Ml0saT1yW3QrMV07clt0XT1yW2VdLHJbdCsxXT1yW2UrMV0scltlXT1uLHJbZSsxXT1pfWZ1bmN0aW9uIG8odCxlLHIpe2UqPTIsclt0Kj0yXT1yW2VdLHJbdCsxXT1yW2UrMV19ZnVuY3Rpb24gcyh0LGUscixuKXtlKj0yLHIqPTI7dmFyIGk9blt0Kj0yXSxhPW5bdCsxXTtuW3RdPW5bZV0sblt0KzFdPW5bZSsxXSxuW2VdPW5bcl0sbltlKzFdPW5bcisxXSxuW3JdPWksbltyKzFdPWF9ZnVuY3Rpb24gbCh0LGUscixuLGkpe2UqPTIsaVt0Kj0yXT1pW2VdLGlbZV09cixpW3QrMV09aVtlKzFdLGlbZSsxXT1ufWZ1bmN0aW9uIGModCxlLHIpe2UqPTI7dmFyIG49clt0Kj0yXSxpPXJbZV07cmV0dXJuIShuPGkpJiYobiE9PWl8fHJbdCsxXT5yW2UrMV0pfWZ1bmN0aW9uIHUodCxlLHIsbil7dmFyIGk9blt0Kj0yXTtyZXR1cm4gaTxlfHxpPT09ZSYmblt0KzFdPHJ9fSx7fV0sOTM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e2luaXQ6ZnVuY3Rpb24odCl7dmFyIGU9aS5uZXh0UG93Mih0KTtzLmxlbmd0aDxlJiYobi5mcmVlKHMpLHM9bi5tYWxsb2NJbnQzMihlKSk7bC5sZW5ndGg8ZSYmKG4uZnJlZShsKSxsPW4ubWFsbG9jSW50MzIoZSkpO2MubGVuZ3RoPGUmJihuLmZyZWUoYyksYz1uLm1hbGxvY0ludDMyKGUpKTt1Lmxlbmd0aDxlJiYobi5mcmVlKHUpLHU9bi5tYWxsb2NJbnQzMihlKSk7aC5sZW5ndGg8ZSYmKG4uZnJlZShoKSxoPW4ubWFsbG9jSW50MzIoZSkpO2YubGVuZ3RoPGUmJihuLmZyZWUoZiksZj1uLm1hbGxvY0ludDMyKGUpKTt2YXIgcj04KmU7cC5sZW5ndGg8ciYmKG4uZnJlZShwKSxwPW4ubWFsbG9jRG91YmxlKHIpKX0sc3dlZXBCaXBhcnRpdGU6ZnVuY3Rpb24odCxlLHIsbixpLGgsZix2LG0seSl7Zm9yKHZhciB4PTAsYj0yKnQsXz10LTEsdz1iLTEsaz1yO2s8bjsrK2spe3ZhciBBPWhba10sVD1iKms7cFt4KytdPWlbVCtfXSxwW3grK109LShBKzEpLHBbeCsrXT1pW1Qrd10scFt4KytdPUF9Zm9yKHZhciBrPWY7azx2Oysrayl7dmFyIEE9eVtrXStvLE09YiprO3BbeCsrXT1tW00rX10scFt4KytdPS1BLHBbeCsrXT1tW00rd10scFt4KytdPUF9dmFyIFM9eD4+PjE7YShwLFMpO2Zvcih2YXIgRT0wLEM9MCxrPTA7azxTOysrayl7dmFyIEw9MHxwWzIqaysxXTtpZihMPj1vKWQoYyx1LEMtLSxMPUwtb3wwKTtlbHNlIGlmKEw+PTApZChzLGwsRS0tLEwpO2Vsc2UgaWYoTDw9LW8pe0w9LUwtb3wwO2Zvcih2YXIgej0wO3o8RTsrK3ope3ZhciBPPWUoc1t6XSxMKTtpZih2b2lkIDAhPT1PKXJldHVybiBPfWcoYyx1LEMrKyxMKX1lbHNle0w9LUwtMXwwO2Zvcih2YXIgej0wO3o8QzsrK3ope3ZhciBPPWUoTCxjW3pdKTtpZih2b2lkIDAhPT1PKXJldHVybiBPfWcocyxsLEUrKyxMKX19fSxzd2VlcENvbXBsZXRlOmZ1bmN0aW9uKHQsZSxyLG4saSxvLHYsbSx5LHgpe2Zvcih2YXIgYj0wLF89Mip0LHc9dC0xLGs9Xy0xLEE9cjtBPG47KytBKXt2YXIgVD1vW0FdKzE8PDEsTT1fKkE7cFtiKytdPWlbTSt3XSxwW2IrK109LVQscFtiKytdPWlbTStrXSxwW2IrK109VH1mb3IodmFyIEE9djtBPG07KytBKXt2YXIgVD14W0FdKzE8PDEsUz1fKkE7cFtiKytdPXlbUyt3XSxwW2IrK109MXwtVCxwW2IrK109eVtTK2tdLHBbYisrXT0xfFR9dmFyIEU9Yj4+PjE7YShwLEUpO2Zvcih2YXIgQz0wLEw9MCx6PTAsQT0wO0E8RTsrK0Epe3ZhciBPPTB8cFsyKkErMV0sST0xJk87aWYoQTxFLTEmJk8+PjE9PXBbMipBKzNdPj4xJiYoST0yLEErPTEpLE88MCl7Zm9yKHZhciBEPS0oTz4+MSktMSxQPTA7UDx6OysrUCl7dmFyIFI9ZShoW1BdLEQpO2lmKHZvaWQgMCE9PVIpcmV0dXJuIFJ9aWYoMCE9PUkpZm9yKHZhciBQPTA7UDxDOysrUCl7dmFyIFI9ZShzW1BdLEQpO2lmKHZvaWQgMCE9PVIpcmV0dXJuIFJ9aWYoMSE9PUkpZm9yKHZhciBQPTA7UDxMOysrUCl7dmFyIFI9ZShjW1BdLEQpO2lmKHZvaWQgMCE9PVIpcmV0dXJuIFJ9MD09PUk/ZyhzLGwsQysrLEQpOjE9PT1JP2coYyx1LEwrKyxEKToyPT09SSYmZyhoLGYseisrLEQpfWVsc2V7dmFyIEQ9KE8+PjEpLTE7MD09PUk/ZChzLGwsQy0tLEQpOjE9PT1JP2QoYyx1LEwtLSxEKToyPT09SSYmZChoLGYsei0tLEQpfX19LHNjYW5CaXBhcnRpdGU6ZnVuY3Rpb24odCxlLHIsbixpLGMsdSxoLGYsdixtLHkpe3ZhciB4PTAsYj0yKnQsXz1lLHc9ZSt0LGs9MSxBPTE7bj9BPW86az1vO2Zvcih2YXIgVD1pO1Q8YzsrK1Qpe3ZhciBNPVQrayxTPWIqVDtwW3grK109dVtTK19dLHBbeCsrXT0tTSxwW3grK109dVtTK3ddLHBbeCsrXT1NfWZvcih2YXIgVD1mO1Q8djsrK1Qpe3ZhciBNPVQrQSxFPWIqVDtwW3grK109bVtFK19dLHBbeCsrXT0tTX12YXIgQz14Pj4+MTthKHAsQyk7Zm9yKHZhciBMPTAsVD0wO1Q8QzsrK1Qpe3ZhciB6PTB8cFsyKlQrMV07aWYoejwwKXt2YXIgTT0teixPPSExO2lmKE0+PW8/KE89IW4sTS09byk6KE89ISFuLE0tPTEpLE8pZyhzLGwsTCsrLE0pO2Vsc2V7dmFyIEk9eVtNXSxEPWIqTSxQPW1bRCtlKzFdLFI9bVtEK2UrMSt0XTt0OmZvcih2YXIgRj0wO0Y8TDsrK0Ype3ZhciBCPXNbRl0sTj1iKkI7aWYoIShSPHVbTitlKzFdfHx1W04rZSsxK3RdPFApKXtmb3IodmFyIGo9ZSsyO2o8dDsrK2opaWYobVtEK2ordF08dVtOK2pdfHx1W04rait0XTxtW0Qral0pY29udGludWUgdDt2YXIgVixVPWhbQl07aWYodm9pZCAwIT09KFY9bj9yKEksVSk6cihVLEkpKSlyZXR1cm4gVn19fX1lbHNlIGQocyxsLEwtLSx6LWspfX0sc2NhbkNvbXBsZXRlOmZ1bmN0aW9uKHQsZSxyLG4saSxsLGMsdSxoLGYsZCl7Zm9yKHZhciBnPTAsdj0yKnQsbT1lLHk9ZSt0LHg9bjt4PGk7Kyt4KXt2YXIgYj14K28sXz12Kng7cFtnKytdPWxbXyttXSxwW2crK109LWIscFtnKytdPWxbXyt5XSxwW2crK109Yn1mb3IodmFyIHg9dTt4PGg7Kyt4KXt2YXIgYj14KzEsdz12Kng7cFtnKytdPWZbdyttXSxwW2crK109LWJ9dmFyIGs9Zz4+PjE7YShwLGspO2Zvcih2YXIgQT0wLHg9MDt4PGs7Kyt4KXt2YXIgVD0wfHBbMip4KzFdO2lmKFQ8MCl7dmFyIGI9LVQ7aWYoYj49bylzW0ErK109Yi1vO2Vsc2V7dmFyIE09ZFtiLT0xXSxTPXYqYixFPWZbUytlKzFdLEM9ZltTK2UrMSt0XTt0OmZvcih2YXIgTD0wO0w8QTsrK0wpe3ZhciB6PXNbTF0sTz1jW3pdO2lmKE89PT1NKWJyZWFrO3ZhciBJPXYqejtpZighKEM8bFtJK2UrMV18fGxbSStlKzErdF08RSkpe2Zvcih2YXIgRD1lKzI7RDx0OysrRClpZihmW1MrRCt0XTxsW0krRF18fGxbSStEK3RdPGZbUytEXSljb250aW51ZSB0O3ZhciBQPXIoTyxNKTtpZih2b2lkIDAhPT1QKXJldHVybiBQfX19fWVsc2V7Zm9yKHZhciBiPVQtbyxMPUEtMTtMPj0wOy0tTClpZihzW0xdPT09Yil7Zm9yKHZhciBEPUwrMTtEPEE7KytEKXNbRC0xXT1zW0RdO2JyZWFrfS0tQX19fX07dmFyIG49dChcInR5cGVkYXJyYXktcG9vbFwiKSxpPXQoXCJiaXQtdHdpZGRsZVwiKSxhPXQoXCIuL3NvcnRcIiksbz0xPDwyOCxzPW4ubWFsbG9jSW50MzIoMTAyNCksbD1uLm1hbGxvY0ludDMyKDEwMjQpLGM9bi5tYWxsb2NJbnQzMigxMDI0KSx1PW4ubWFsbG9jSW50MzIoMTAyNCksaD1uLm1hbGxvY0ludDMyKDEwMjQpLGY9bi5tYWxsb2NJbnQzMigxMDI0KSxwPW4ubWFsbG9jRG91YmxlKDgxOTIpO2Z1bmN0aW9uIGQodCxlLHIsbil7dmFyIGk9ZVtuXSxhPXRbci0xXTt0W2ldPWEsZVthXT1pfWZ1bmN0aW9uIGcodCxlLHIsbil7dFtyXT1uLGVbbl09cn19LHtcIi4vc29ydFwiOjkyLFwiYml0LXR3aWRkbGVcIjo4MyxcInR5cGVkYXJyYXktcG9vbFwiOjUzMH1dLDk0OltmdW5jdGlvbih0LGUscil7fSx7fV0sOTU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbigpe307cmV0dXJuIGUucHJvdG90eXBlPXQsbmV3IGV9LGk9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpJiZlLnB1c2gocik7cmV0dXJuIHJ9LGE9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmR8fGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodCxhcmd1bWVudHMpfX07ZnVuY3Rpb24gbygpe3RoaXMuX2V2ZW50cyYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMsXCJfZXZlbnRzXCIpfHwodGhpcy5fZXZlbnRzPW4obnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCksdGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21heExpc3RlbmVyc3x8dm9pZCAwfWUuZXhwb3J0cz1vLG8uRXZlbnRFbWl0dGVyPW8sby5wcm90b3R5cGUuX2V2ZW50cz12b2lkIDAsby5wcm90b3R5cGUuX21heExpc3RlbmVycz12b2lkIDA7dmFyIHMsbD0xMDt0cnl7dmFyIGM9e307T2JqZWN0LmRlZmluZVByb3BlcnR5JiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxcInhcIix7dmFsdWU6MH0pLHM9MD09PWMueH1jYXRjaCh0KXtzPSExfWZ1bmN0aW9uIHUodCl7cmV0dXJuIHZvaWQgMD09PXQuX21heExpc3RlbmVycz9vLmRlZmF1bHRNYXhMaXN0ZW5lcnM6dC5fbWF4TGlzdGVuZXJzfWZ1bmN0aW9uIGgodCxlLHIsaSl7dmFyIGEsbyxzO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO2lmKChvPXQuX2V2ZW50cyk/KG8ubmV3TGlzdGVuZXImJih0LmVtaXQoXCJuZXdMaXN0ZW5lclwiLGUsci5saXN0ZW5lcj9yLmxpc3RlbmVyOnIpLG89dC5fZXZlbnRzKSxzPW9bZV0pOihvPXQuX2V2ZW50cz1uKG51bGwpLHQuX2V2ZW50c0NvdW50PTApLHMpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHM/cz1vW2VdPWk/W3Isc106W3Mscl06aT9zLnVuc2hpZnQocik6cy5wdXNoKHIpLCFzLndhcm5lZCYmKGE9dSh0KSkmJmE+MCYmcy5sZW5ndGg+YSl7cy53YXJuZWQ9ITA7dmFyIGw9bmV3IEVycm9yKFwiUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiBcIitzLmxlbmd0aCsnIFwiJytTdHJpbmcoZSkrJ1wiIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQuJyk7bC5uYW1lPVwiTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nXCIsbC5lbWl0dGVyPXQsbC50eXBlPWUsbC5jb3VudD1zLmxlbmd0aCxcIm9iamVjdFwiPT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oXCIlczogJXNcIixsLm5hbWUsbC5tZXNzYWdlKX19ZWxzZSBzPW9bZV09ciwrK3QuX2V2ZW50c0NvdW50O3JldHVybiB0fWZ1bmN0aW9uIGYoKXtpZighdGhpcy5maXJlZClzd2l0Y2godGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLHRoaXMud3JhcEZuKSx0aGlzLmZpcmVkPSEwLGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTtjYXNlIDE6cmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCxhcmd1bWVudHNbMF0pO2Nhc2UgMjpyZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0LGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pO2Nhc2UgMzpyZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0LGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKTtkZWZhdWx0OmZvcih2YXIgdD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksZT0wO2U8dC5sZW5ndGg7KytlKXRbZV09YXJndW1lbnRzW2VdO3RoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsdCl9fWZ1bmN0aW9uIHAodCxlLHIpe3ZhciBuPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDp0LHR5cGU6ZSxsaXN0ZW5lcjpyfSxpPWEuY2FsbChmLG4pO3JldHVybiBpLmxpc3RlbmVyPXIsbi53cmFwRm49aSxpfWZ1bmN0aW9uIGQodCxlLHIpe3ZhciBuPXQuX2V2ZW50cztpZighbilyZXR1cm5bXTt2YXIgaT1uW2VdO3JldHVybiBpP1wiZnVuY3Rpb25cIj09dHlwZW9mIGk/cj9baS5saXN0ZW5lcnx8aV06W2ldOnI/ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wO3I8ZS5sZW5ndGg7KytyKWVbcl09dFtyXS5saXN0ZW5lcnx8dFtyXTtyZXR1cm4gZX0oaSk6dihpLGkubGVuZ3RoKTpbXX1mdW5jdGlvbiBnKHQpe3ZhciBlPXRoaXMuX2V2ZW50cztpZihlKXt2YXIgcj1lW3RdO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHIpcmV0dXJuIDE7aWYocilyZXR1cm4gci5sZW5ndGh9cmV0dXJuIDB9ZnVuY3Rpb24gdih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT10W25dO3JldHVybiByfXM/T2JqZWN0LmRlZmluZVByb3BlcnR5KG8sXCJkZWZhdWx0TWF4TGlzdGVuZXJzXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx9LHNldDpmdW5jdGlvbih0KXtpZihcIm51bWJlclwiIT10eXBlb2YgdHx8dDwwfHx0IT10KXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZGVmYXVsdE1heExpc3RlbmVyc1wiIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtsPXR9fSk6by5kZWZhdWx0TWF4TGlzdGVuZXJzPWwsby5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKHQpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0fHx0PDB8fGlzTmFOKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiblwiIGFyZ3VtZW50IG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPXQsdGhpc30sby5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHUodGhpcyl9LG8ucHJvdG90eXBlLmVtaXQ9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHM9XCJlcnJvclwiPT09dDtpZihvPXRoaXMuX2V2ZW50cylzPXMmJm51bGw9PW8uZXJyb3I7ZWxzZSBpZighcylyZXR1cm4hMTtpZihzKXtpZihhcmd1bWVudHMubGVuZ3RoPjEmJihlPWFyZ3VtZW50c1sxXSksZSBpbnN0YW5jZW9mIEVycm9yKXRocm93IGU7dmFyIGw9bmV3IEVycm9yKCdVbmhhbmRsZWQgXCJlcnJvclwiIGV2ZW50LiAoJytlK1wiKVwiKTt0aHJvdyBsLmNvbnRleHQ9ZSxsfWlmKCEocj1vW3RdKSlyZXR1cm4hMTt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByO3N3aXRjaChuPWFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMTohZnVuY3Rpb24odCxlLHIpe2lmKGUpdC5jYWxsKHIpO2Vsc2UgZm9yKHZhciBuPXQubGVuZ3RoLGk9dih0LG4pLGE9MDthPG47KythKWlbYV0uY2FsbChyKX0ocixjLHRoaXMpO2JyZWFrO2Nhc2UgMjohZnVuY3Rpb24odCxlLHIsbil7aWYoZSl0LmNhbGwocixuKTtlbHNlIGZvcih2YXIgaT10Lmxlbmd0aCxhPXYodCxpKSxvPTA7bzxpOysrbylhW29dLmNhbGwocixuKX0ocixjLHRoaXMsYXJndW1lbnRzWzFdKTticmVhaztjYXNlIDM6IWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYoZSl0LmNhbGwocixuLGkpO2Vsc2UgZm9yKHZhciBhPXQubGVuZ3RoLG89dih0LGEpLHM9MDtzPGE7KytzKW9bc10uY2FsbChyLG4saSl9KHIsYyx0aGlzLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0pO2JyZWFrO2Nhc2UgNDohZnVuY3Rpb24odCxlLHIsbixpLGEpe2lmKGUpdC5jYWxsKHIsbixpLGEpO2Vsc2UgZm9yKHZhciBvPXQubGVuZ3RoLHM9dih0LG8pLGw9MDtsPG87KytsKXNbbF0uY2FsbChyLG4saSxhKX0ocixjLHRoaXMsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM10pO2JyZWFrO2RlZmF1bHQ6Zm9yKGk9bmV3IEFycmF5KG4tMSksYT0xO2E8bjthKyspaVthLTFdPWFyZ3VtZW50c1thXTshZnVuY3Rpb24odCxlLHIsbil7aWYoZSl0LmFwcGx5KHIsbik7ZWxzZSBmb3IodmFyIGk9dC5sZW5ndGgsYT12KHQsaSksbz0wO288aTsrK28pYVtvXS5hcHBseShyLG4pfShyLGMsdGhpcyxpKX1yZXR1cm4hMH0sby5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaCh0aGlzLHQsZSwhMSl9LG8ucHJvdG90eXBlLm9uPW8ucHJvdG90eXBlLmFkZExpc3RlbmVyLG8ucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3JldHVybiBoKHRoaXMsdCxlLCEwKX0sby5wcm90b3R5cGUub25jZT1mdW5jdGlvbih0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO3JldHVybiB0aGlzLm9uKHQscCh0aGlzLHQsZSkpLHRoaXN9LG8ucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXI9ZnVuY3Rpb24odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtyZXR1cm4gdGhpcy5wcmVwZW5kTGlzdGVuZXIodCxwKHRoaXMsdCxlKSksdGhpc30sby5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGEsbyxzO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO2lmKCEoaT10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKCEocj1pW3RdKSlyZXR1cm4gdGhpcztpZihyPT09ZXx8ci5saXN0ZW5lcj09PWUpMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9bihudWxsKTooZGVsZXRlIGlbdF0saS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KFwicmVtb3ZlTGlzdGVuZXJcIix0LHIubGlzdGVuZXJ8fGUpKTtlbHNlIGlmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHIpe2ZvcihhPS0xLG89ci5sZW5ndGgtMTtvPj0wO28tLSlpZihyW29dPT09ZXx8cltvXS5saXN0ZW5lcj09PWUpe3M9cltvXS5saXN0ZW5lcixhPW87YnJlYWt9aWYoYTwwKXJldHVybiB0aGlzOzA9PT1hP3Iuc2hpZnQoKTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLG49cisxLGk9dC5sZW5ndGg7bjxpO3IrPTEsbis9MSl0W3JdPXRbbl07dC5wb3AoKX0ocixhKSwxPT09ci5sZW5ndGgmJihpW3RdPXJbMF0pLGkucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdChcInJlbW92ZUxpc3RlbmVyXCIsdCxzfHxlKX1yZXR1cm4gdGhpc30sby5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsYTtpZighKHI9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZighci5yZW1vdmVMaXN0ZW5lcilyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2V2ZW50cz1uKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApOnJbdF0mJigwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1uKG51bGwpOmRlbGV0ZSByW3RdKSx0aGlzO2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgbyxzPWkocik7Zm9yKGE9MDthPHMubGVuZ3RoOysrYSlcInJlbW92ZUxpc3RlbmVyXCIhPT0obz1zW2FdKSYmdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMobyk7cmV0dXJuIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKFwicmVtb3ZlTGlzdGVuZXJcIiksdGhpcy5fZXZlbnRzPW4obnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCx0aGlzfWlmKFwiZnVuY3Rpb25cIj09dHlwZW9mKGU9clt0XSkpdGhpcy5yZW1vdmVMaXN0ZW5lcih0LGUpO2Vsc2UgaWYoZSlmb3IoYT1lLmxlbmd0aC0xO2E+PTA7YS0tKXRoaXMucmVtb3ZlTGlzdGVuZXIodCxlW2FdKTtyZXR1cm4gdGhpc30sby5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBkKHRoaXMsdCwhMCl9LG8ucHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbih0KXtyZXR1cm4gZCh0aGlzLHQsITEpfSxvLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0Lmxpc3RlbmVyQ291bnQ/dC5saXN0ZW5lckNvdW50KGUpOmcuY2FsbCh0LGUpfSxvLnByb3RvdHlwZS5saXN0ZW5lckNvdW50PWcsby5wcm90b3R5cGUuZXZlbnROYW1lcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ldmVudHNDb3VudD4wP1JlZmxlY3Qub3duS2V5cyh0aGlzLl9ldmVudHMpOltdfX0se31dLDk2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImJhc2U2NC1qc1wiKSxpPXQoXCJpZWVlNzU0XCIpO3IuQnVmZmVyPXMsci5TbG93QnVmZmVyPWZ1bmN0aW9uKHQpeyt0IT10JiYodD0wKTtyZXR1cm4gcy5hbGxvYygrdCl9LHIuSU5TUEVDVF9NQVhfQllURVM9NTA7dmFyIGE9MjE0NzQ4MzY0NztmdW5jdGlvbiBvKHQpe2lmKHQ+YSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJyt0KydcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKTt2YXIgZT1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gZS5fX3Byb3RvX189cy5wcm90b3R5cGUsZX1mdW5jdGlvbiBzKHQsZSxyKXtpZihcIm51bWJlclwiPT10eXBlb2YgdCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gdSh0KX1yZXR1cm4gbCh0LGUscil9ZnVuY3Rpb24gbCh0LGUscil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7XCJzdHJpbmdcIj09dHlwZW9mIGUmJlwiXCIhPT1lfHwoZT1cInV0ZjhcIik7aWYoIXMuaXNFbmNvZGluZyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrZSk7dmFyIHI9MHxwKHQsZSksbj1vKHIpLGk9bi53cml0ZSh0LGUpO2khPT1yJiYobj1uLnNsaWNlKDAsaSkpO3JldHVybiBufSh0LGUpO2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KSlyZXR1cm4gaCh0KTtpZihudWxsPT10KXRocm93IFR5cGVFcnJvcihcIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlIFwiK3R5cGVvZiB0KTtpZihqKHQsQXJyYXlCdWZmZXIpfHx0JiZqKHQuYnVmZmVyLEFycmF5QnVmZmVyKSlyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKGU8MHx8dC5ieXRlTGVuZ3RoPGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wib2Zmc2V0XCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYodC5ieXRlTGVuZ3RoPGUrKHJ8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCdcImxlbmd0aFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO3ZhciBuO249dm9pZCAwPT09ZSYmdm9pZCAwPT09cj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQsZSk6bmV3IFVpbnQ4QXJyYXkodCxlLHIpO3JldHVybiBuLl9fcHJvdG9fXz1zLnByb3RvdHlwZSxufSh0LGUscik7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwidmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTt2YXIgbj10LnZhbHVlT2YmJnQudmFsdWVPZigpO2lmKG51bGwhPW4mJm4hPT10KXJldHVybiBzLmZyb20obixlLHIpO3ZhciBpPWZ1bmN0aW9uKHQpe2lmKHMuaXNCdWZmZXIodCkpe3ZhciBlPTB8Zih0Lmxlbmd0aCkscj1vKGUpO3JldHVybiAwPT09ci5sZW5ndGg/cjoodC5jb3B5KHIsMCwwLGUpLHIpfWlmKHZvaWQgMCE9PXQubGVuZ3RoKXJldHVyblwibnVtYmVyXCIhPXR5cGVvZiB0Lmxlbmd0aHx8Vih0Lmxlbmd0aCk/bygwKTpoKHQpO2lmKFwiQnVmZmVyXCI9PT10LnR5cGUmJkFycmF5LmlzQXJyYXkodC5kYXRhKSlyZXR1cm4gaCh0LmRhdGEpfSh0KTtpZihpKXJldHVybiBpO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPVN5bWJvbC50b1ByaW1pdGl2ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgdFtTeW1ib2wudG9QcmltaXRpdmVdKXJldHVybiBzLmZyb20odFtTeW1ib2wudG9QcmltaXRpdmVdKFwic3RyaW5nXCIpLGUscik7dGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlIFwiK3R5cGVvZiB0KX1mdW5jdGlvbiBjKHQpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicrdCsnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwic2l6ZVwiJyl9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gYyh0KSxvKHQ8MD8wOjB8Zih0KSl9ZnVuY3Rpb24gaCh0KXtmb3IodmFyIGU9dC5sZW5ndGg8MD8wOjB8Zih0Lmxlbmd0aCkscj1vKGUpLG49MDtuPGU7bis9MSlyW25dPTI1NSZ0W25dO3JldHVybiByfWZ1bmN0aW9uIGYodCl7aWYodD49YSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHhcIithLnRvU3RyaW5nKDE2KStcIiBieXRlc1wiKTtyZXR1cm4gMHx0fWZ1bmN0aW9uIHAodCxlKXtpZihzLmlzQnVmZmVyKHQpKXJldHVybiB0Lmxlbmd0aDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcodCl8fGoodCxBcnJheUJ1ZmZlcikpcmV0dXJuIHQuYnl0ZUxlbmd0aDtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiB0KTt2YXIgcj10Lmxlbmd0aCxuPWFyZ3VtZW50cy5sZW5ndGg+MiYmITA9PT1hcmd1bWVudHNbMl07aWYoIW4mJjA9PT1yKXJldHVybiAwO2Zvcih2YXIgaT0hMTs7KXN3aXRjaChlKXtjYXNlXCJhc2NpaVwiOmNhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOnJldHVybiByO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiBGKHQpLmxlbmd0aDtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gMipyO2Nhc2VcImhleFwiOnJldHVybiByPj4+MTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gQih0KS5sZW5ndGg7ZGVmYXVsdDppZihpKXJldHVybiBuPy0xOkYodCkubGVuZ3RoO2U9KFwiXCIrZSkudG9Mb3dlckNhc2UoKSxpPSEwfX1mdW5jdGlvbiBkKHQsZSxyKXt2YXIgbj10W2VdO3RbZV09dFtyXSx0W3JdPW59ZnVuY3Rpb24gZyh0LGUscixuLGkpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4tMTtpZihcInN0cmluZ1wiPT10eXBlb2Ygcj8obj1yLHI9MCk6cj4yMTQ3NDgzNjQ3P3I9MjE0NzQ4MzY0NzpyPC0yMTQ3NDgzNjQ4JiYocj0tMjE0NzQ4MzY0OCksVihyPStyKSYmKHI9aT8wOnQubGVuZ3RoLTEpLHI8MCYmKHI9dC5sZW5ndGgrcikscj49dC5sZW5ndGgpe2lmKGkpcmV0dXJuLTE7cj10Lmxlbmd0aC0xfWVsc2UgaWYocjwwKXtpZighaSlyZXR1cm4tMTtyPTB9aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPXMuZnJvbShlLG4pKSxzLmlzQnVmZmVyKGUpKXJldHVybiAwPT09ZS5sZW5ndGg/LTE6dih0LGUscixuLGkpO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXJldHVybiBlJj0yNTUsXCJmdW5jdGlvblwiPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9pP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0LGUscik6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbCh0LGUscik6dih0LFtlXSxyLG4saSk7dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlclwiKX1mdW5jdGlvbiB2KHQsZSxyLG4saSl7dmFyIGEsbz0xLHM9dC5sZW5ndGgsbD1lLmxlbmd0aDtpZih2b2lkIDAhPT1uJiYoXCJ1Y3MyXCI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fFwidWNzLTJcIj09PW58fFwidXRmMTZsZVwiPT09bnx8XCJ1dGYtMTZsZVwiPT09bikpe2lmKHQubGVuZ3RoPDJ8fGUubGVuZ3RoPDIpcmV0dXJuLTE7bz0yLHMvPTIsbC89MixyLz0yfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gMT09PW8/dFtlXTp0LnJlYWRVSW50MTZCRShlKm8pfWlmKGkpe3ZhciB1PS0xO2ZvcihhPXI7YTxzO2ErKylpZihjKHQsYSk9PT1jKGUsLTE9PT11PzA6YS11KSl7aWYoLTE9PT11JiYodT1hKSxhLXUrMT09PWwpcmV0dXJuIHUqb31lbHNlLTEhPT11JiYoYS09YS11KSx1PS0xfWVsc2UgZm9yKHIrbD5zJiYocj1zLWwpLGE9cjthPj0wO2EtLSl7Zm9yKHZhciBoPSEwLGY9MDtmPGw7ZisrKWlmKGModCxhK2YpIT09YyhlLGYpKXtoPSExO2JyZWFrfWlmKGgpcmV0dXJuIGF9cmV0dXJuLTF9ZnVuY3Rpb24gbSh0LGUscixuKXtyPU51bWJlcihyKXx8MDt2YXIgaT10Lmxlbmd0aC1yO24/KG49TnVtYmVyKG4pKT5pJiYobj1pKTpuPWk7dmFyIGE9ZS5sZW5ndGg7bj5hLzImJihuPWEvMik7Zm9yKHZhciBvPTA7bzxuOysrbyl7dmFyIHM9cGFyc2VJbnQoZS5zdWJzdHIoMipvLDIpLDE2KTtpZihWKHMpKXJldHVybiBvO3RbcitvXT1zfXJldHVybiBvfWZ1bmN0aW9uIHkodCxlLHIsbil7cmV0dXJuIE4oRihlLHQubGVuZ3RoLXIpLHQscixuKX1mdW5jdGlvbiB4KHQsZSxyLG4pe3JldHVybiBOKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPTA7cjx0Lmxlbmd0aDsrK3IpZS5wdXNoKDI1NSZ0LmNoYXJDb2RlQXQocikpO3JldHVybiBlfShlKSx0LHIsbil9ZnVuY3Rpb24gYih0LGUscixuKXtyZXR1cm4geCh0LGUscixuKX1mdW5jdGlvbiBfKHQsZSxyLG4pe3JldHVybiBOKEIoZSksdCxyLG4pfWZ1bmN0aW9uIHcodCxlLHIsbil7cmV0dXJuIE4oZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpLGE9W10sbz0wO288dC5sZW5ndGgmJiEoKGUtPTIpPDApOysrbylyPXQuY2hhckNvZGVBdChvKSxuPXI+PjgsaT1yJTI1NixhLnB1c2goaSksYS5wdXNoKG4pO3JldHVybiBhfShlLHQubGVuZ3RoLXIpLHQscixuKX1mdW5jdGlvbiBrKHQsZSxyKXtyZXR1cm4gMD09PWUmJnI9PT10Lmxlbmd0aD9uLmZyb21CeXRlQXJyYXkodCk6bi5mcm9tQnl0ZUFycmF5KHQuc2xpY2UoZSxyKSl9ZnVuY3Rpb24gQSh0LGUscil7cj1NYXRoLm1pbih0Lmxlbmd0aCxyKTtmb3IodmFyIG49W10saT1lO2k8cjspe3ZhciBhLG8scyxsLGM9dFtpXSx1PW51bGwsaD1jPjIzOT80OmM+MjIzPzM6Yz4xOTE/MjoxO2lmKGkraDw9cilzd2l0Y2goaCl7Y2FzZSAxOmM8MTI4JiYodT1jKTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihhPXRbaSsxXSkpJiYobD0oMzEmYyk8PDZ8NjMmYSk+MTI3JiYodT1sKTticmVhaztjYXNlIDM6YT10W2krMV0sbz10W2krMl0sMTI4PT0oMTkyJmEpJiYxMjg9PSgxOTImbykmJihsPSgxNSZjKTw8MTJ8KDYzJmEpPDw2fDYzJm8pPjIwNDcmJihsPDU1Mjk2fHxsPjU3MzQzKSYmKHU9bCk7YnJlYWs7Y2FzZSA0OmE9dFtpKzFdLG89dFtpKzJdLHM9dFtpKzNdLDEyOD09KDE5MiZhKSYmMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJihsPSgxNSZjKTw8MTh8KDYzJmEpPDwxMnwoNjMmbyk8PDZ8NjMmcyk+NjU1MzUmJmw8MTExNDExMiYmKHU9bCl9bnVsbD09PXU/KHU9NjU1MzMsaD0xKTp1PjY1NTM1JiYodS09NjU1MzYsbi5wdXNoKHU+Pj4xMCYxMDIzfDU1Mjk2KSx1PTU2MzIwfDEwMjMmdSksbi5wdXNoKHUpLGkrPWh9cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGU8PVQpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLHQpO3ZhciByPVwiXCIsbj0wO2Zvcig7bjxlOylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyx0LnNsaWNlKG4sbis9VCkpO3JldHVybiByfShuKX1yLmtNYXhMZW5ndGg9YSxzLlRZUEVEX0FSUkFZX1NVUFBPUlQ9ZnVuY3Rpb24oKXt0cnl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoMSk7cmV0dXJuIHQuX19wcm90b19fPXtfX3Byb3RvX186VWludDhBcnJheS5wcm90b3R5cGUsZm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX0sNDI9PT10LmZvbygpfWNhdGNoKHQpe3JldHVybiExfX0oKSxzLlRZUEVEX0FSUkFZX1NVUFBPUlR8fFwidW5kZWZpbmVkXCI9PXR5cGVvZiBjb25zb2xlfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBjb25zb2xlLmVycm9yfHxjb25zb2xlLmVycm9yKFwiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuXCIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLnByb3RvdHlwZSxcInBhcmVudFwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKHMuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLnByb3RvdHlwZSxcIm9mZnNldFwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKHMuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnl0ZU9mZnNldH19KSxcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1TeW1ib2wuc3BlY2llcyYmc1tTeW1ib2wuc3BlY2llc109PT1zJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocyxTeW1ib2wuc3BlY2llcyx7dmFsdWU6bnVsbCxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMX0pLHMucG9vbFNpemU9ODE5MixzLmZyb209ZnVuY3Rpb24odCxlLHIpe3JldHVybiBsKHQsZSxyKX0scy5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLHMuX19wcm90b19fPVVpbnQ4QXJyYXkscy5hbGxvYz1mdW5jdGlvbih0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gYyh0KSx0PD0wP28odCk6dm9pZCAwIT09ZT9cInN0cmluZ1wiPT10eXBlb2Ygcj9vKHQpLmZpbGwoZSxyKTpvKHQpLmZpbGwoZSk6byh0KX0odCxlLHIpfSxzLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHQpe3JldHVybiB1KHQpfSxzLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih0KXtyZXR1cm4gdSh0KX0scy5pc0J1ZmZlcj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dCYmITA9PT10Ll9pc0J1ZmZlciYmdCE9PXMucHJvdG90eXBlfSxzLmNvbXBhcmU9ZnVuY3Rpb24odCxlKXtpZihqKHQsVWludDhBcnJheSkmJih0PXMuZnJvbSh0LHQub2Zmc2V0LHQuYnl0ZUxlbmd0aCkpLGooZSxVaW50OEFycmF5KSYmKGU9cy5mcm9tKGUsZS5vZmZzZXQsZS5ieXRlTGVuZ3RoKSksIXMuaXNCdWZmZXIodCl8fCFzLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImJ1ZjFcIiwgXCJidWYyXCIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZih0PT09ZSlyZXR1cm4gMDtmb3IodmFyIHI9dC5sZW5ndGgsbj1lLmxlbmd0aCxpPTAsYT1NYXRoLm1pbihyLG4pO2k8YTsrK2kpaWYodFtpXSE9PWVbaV0pe3I9dFtpXSxuPWVbaV07YnJlYWt9cmV0dXJuIHI8bj8tMTpuPHI/MTowfSxzLmlzRW5jb2Rpbmc9ZnVuY3Rpb24odCl7c3dpdGNoKFN0cmluZyh0KS50b0xvd2VyQ2FzZSgpKXtjYXNlXCJoZXhcIjpjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpjYXNlXCJhc2NpaVwiOmNhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOmNhc2VcImJhc2U2NFwiOmNhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxzLmNvbmNhdD1mdW5jdGlvbih0LGUpe2lmKCFBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gcy5hbGxvYygwKTt2YXIgcjtpZih2b2lkIDA9PT1lKWZvcihlPTAscj0wO3I8dC5sZW5ndGg7KytyKWUrPXRbcl0ubGVuZ3RoO3ZhciBuPXMuYWxsb2NVbnNhZmUoZSksaT0wO2ZvcihyPTA7cjx0Lmxlbmd0aDsrK3Ipe3ZhciBhPXRbcl07aWYoaihhLFVpbnQ4QXJyYXkpJiYoYT1zLmZyb20oYSkpLCFzLmlzQnVmZmVyKGEpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2EuY29weShuLGkpLGkrPWEubGVuZ3RofXJldHVybiBufSxzLmJ5dGVMZW5ndGg9cCxzLnByb3RvdHlwZS5faXNCdWZmZXI9ITAscy5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHNcIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTIpZCh0aGlzLGUsZSsxKTtyZXR1cm4gdGhpc30scy5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHNcIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTQpZCh0aGlzLGUsZSszKSxkKHRoaXMsZSsxLGUrMik7cmV0dXJuIHRoaXN9LHMucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO2lmKHQlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzXCIpO2Zvcih2YXIgZT0wO2U8dDtlKz04KWQodGhpcyxlLGUrNyksZCh0aGlzLGUrMSxlKzYpLGQodGhpcyxlKzIsZSs1KSxkKHRoaXMsZSszLGUrNCk7cmV0dXJuIHRoaXN9LHMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT10P1wiXCI6MD09PWFyZ3VtZW50cy5sZW5ndGg/QSh0aGlzLDAsdCk6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPSExO2lmKCh2b2lkIDA9PT1lfHxlPDApJiYoZT0wKSxlPnRoaXMubGVuZ3RoKXJldHVyblwiXCI7aWYoKHZvaWQgMD09PXJ8fHI+dGhpcy5sZW5ndGgpJiYocj10aGlzLmxlbmd0aCkscjw9MClyZXR1cm5cIlwiO2lmKChyPj4+PTApPD0oZT4+Pj0wKSlyZXR1cm5cIlwiO2Zvcih0fHwodD1cInV0ZjhcIik7Oylzd2l0Y2godCl7Y2FzZVwiaGV4XCI6cmV0dXJuIEUodGhpcyxlLHIpO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiBBKHRoaXMsZSxyKTtjYXNlXCJhc2NpaVwiOnJldHVybiBNKHRoaXMsZSxyKTtjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpyZXR1cm4gUyh0aGlzLGUscik7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIGsodGhpcyxlLHIpO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiBDKHRoaXMsZSxyKTtkZWZhdWx0OmlmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK3QpO3Q9KHQrXCJcIikudG9Mb3dlckNhc2UoKSxuPSEwfX0uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxzLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZz1zLnByb3RvdHlwZS50b1N0cmluZyxzLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7aWYoIXMuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXJcIik7cmV0dXJuIHRoaXM9PT10fHwwPT09cy5jb21wYXJlKHRoaXMsdCl9LHMucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgdD1cIlwiLGU9ci5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdD10aGlzLnRvU3RyaW5nKFwiaGV4XCIsMCxlKS5yZXBsYWNlKC8oLnsyfSkvZyxcIiQxIFwiKS50cmltKCksdGhpcy5sZW5ndGg+ZSYmKHQrPVwiIC4uLiBcIiksXCI8QnVmZmVyIFwiK3QrXCI+XCJ9LHMucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24odCxlLHIsbixpKXtpZihqKHQsVWludDhBcnJheSkmJih0PXMuZnJvbSh0LHQub2Zmc2V0LHQuYnl0ZUxlbmd0aCkpLCFzLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInRhcmdldFwiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdCk7aWYodm9pZCAwPT09ZSYmKGU9MCksdm9pZCAwPT09ciYmKHI9dD90Lmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksZTwwfHxyPnQubGVuZ3RofHxuPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvdXQgb2YgcmFuZ2UgaW5kZXhcIik7aWYobj49aSYmZT49cilyZXR1cm4gMDtpZihuPj1pKXJldHVybi0xO2lmKGU+PXIpcmV0dXJuIDE7aWYodGhpcz09PXQpcmV0dXJuIDA7Zm9yKHZhciBhPShpPj4+PTApLShuPj4+PTApLG89KHI+Pj49MCktKGU+Pj49MCksbD1NYXRoLm1pbihhLG8pLGM9dGhpcy5zbGljZShuLGkpLHU9dC5zbGljZShlLHIpLGg9MDtoPGw7KytoKWlmKGNbaF0hPT11W2hdKXthPWNbaF0sbz11W2hdO2JyZWFrfXJldHVybiBhPG8/LTE6bzxhPzE6MH0scy5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24odCxlLHIpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKHQsZSxyKX0scy5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbih0LGUscil7cmV0dXJuIGcodGhpcyx0LGUsciwhMCl9LHMucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZyh0aGlzLHQsZSxyLCExKX0scy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCxlLHIsbil7aWYodm9pZCAwPT09ZSluPVwidXRmOFwiLHI9dGhpcy5sZW5ndGgsZT0wO2Vsc2UgaWYodm9pZCAwPT09ciYmXCJzdHJpbmdcIj09dHlwZW9mIGUpbj1lLHI9dGhpcy5sZW5ndGgsZT0wO2Vsc2V7aWYoIWlzRmluaXRlKGUpKXRocm93IG5ldyBFcnJvcihcIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkXCIpO2U+Pj49MCxpc0Zpbml0ZShyKT8ocj4+Pj0wLHZvaWQgMD09PW4mJihuPVwidXRmOFwiKSk6KG49cixyPXZvaWQgMCl9dmFyIGk9dGhpcy5sZW5ndGgtZTtpZigodm9pZCAwPT09cnx8cj5pKSYmKHI9aSksdC5sZW5ndGg+MCYmKHI8MHx8ZTwwKXx8ZT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzXCIpO258fChuPVwidXRmOFwiKTtmb3IodmFyIGE9ITE7Oylzd2l0Y2gobil7Y2FzZVwiaGV4XCI6cmV0dXJuIG0odGhpcyx0LGUscik7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIHkodGhpcyx0LGUscik7Y2FzZVwiYXNjaWlcIjpyZXR1cm4geCh0aGlzLHQsZSxyKTtjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpyZXR1cm4gYih0aGlzLHQsZSxyKTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gXyh0aGlzLHQsZSxyKTtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gdyh0aGlzLHQsZSxyKTtkZWZhdWx0OmlmKGEpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK24pO249KFwiXCIrbikudG9Mb3dlckNhc2UoKSxhPSEwfX0scy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6XCJCdWZmZXJcIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBUPTQwOTY7ZnVuY3Rpb24gTSh0LGUscil7dmFyIG49XCJcIjtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgaT1lO2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmdFtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gUyh0LGUscil7dmFyIG49XCJcIjtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgaT1lO2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSh0W2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBFKHQsZSxyKXt2YXIgbj10Lmxlbmd0aDsoIWV8fGU8MCkmJihlPTApLCghcnx8cjwwfHxyPm4pJiYocj1uKTtmb3IodmFyIGk9XCJcIixhPWU7YTxyOysrYSlpKz1SKHRbYV0pO3JldHVybiBpfWZ1bmN0aW9uIEModCxlLHIpe2Zvcih2YXIgbj10LnNsaWNlKGUsciksaT1cIlwiLGE9MDthPG4ubGVuZ3RoO2ErPTIpaSs9U3RyaW5nLmZyb21DaGFyQ29kZShuW2FdKzI1NipuW2ErMV0pO3JldHVybiBpfWZ1bmN0aW9uIEwodCxlLHIpe2lmKHQlMSE9MHx8dDwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwib2Zmc2V0IGlzIG5vdCB1aW50XCIpO2lmKHQrZT5yKXRocm93IG5ldyBSYW5nZUVycm9yKFwiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aFwiKX1mdW5jdGlvbiB6KHQsZSxyLG4saSxhKXtpZighcy5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZihlPml8fGU8YSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihyK24+dC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIil9ZnVuY3Rpb24gTyh0LGUscixuLGksYSl7aWYocituPnQubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW5kZXggb3V0IG9mIHJhbmdlXCIpO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiBJKHQsZSxyLG4sYSl7cmV0dXJuIGU9K2Uscj4+Pj0wLGF8fE8odCwwLHIsNCksaS53cml0ZSh0LGUscixuLDIzLDQpLHIrNH1mdW5jdGlvbiBEKHQsZSxyLG4sYSl7cmV0dXJuIGU9K2Uscj4+Pj0wLGF8fE8odCwwLHIsOCksaS53cml0ZSh0LGUscixuLDUyLDgpLHIrOH1zLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoOyh0PX5+dCk8MD8odCs9cik8MCYmKHQ9MCk6dD5yJiYodD1yKSwoZT12b2lkIDA9PT1lP3I6fn5lKTwwPyhlKz1yKTwwJiYoZT0wKTplPnImJihlPXIpLGU8dCYmKGU9dCk7dmFyIG49dGhpcy5zdWJhcnJheSh0LGUpO3JldHVybiBuLl9fcHJvdG9fXz1zLnByb3RvdHlwZSxufSxzLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKHQsZSxyKXt0Pj4+PTAsZT4+Pj0wLHJ8fEwodCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1t0XSxpPTEsYT0wOysrYTxlJiYoaSo9MjU2KTspbis9dGhpc1t0K2FdKmk7cmV0dXJuIG59LHMucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8TCh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3QrLS1lXSxpPTE7ZT4wJiYoaSo9MjU2KTspbis9dGhpc1t0Ky0tZV0qaTtyZXR1cm4gbn0scy5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxMKHQsMSx0aGlzLmxlbmd0aCksdGhpc1t0XX0scy5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxMKHQsMix0aGlzLmxlbmd0aCksdGhpc1t0XXx0aGlzW3QrMV08PDh9LHMucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8TCh0LDIsdGhpcy5sZW5ndGgpLHRoaXNbdF08PDh8dGhpc1t0KzFdfSxzLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCw0LHRoaXMubGVuZ3RoKSwodGhpc1t0XXx0aGlzW3QrMV08PDh8dGhpc1t0KzJdPDwxNikrMTY3NzcyMTYqdGhpc1t0KzNdfSxzLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW3RdKyh0aGlzW3QrMV08PDE2fHRoaXNbdCsyXTw8OHx0aGlzW3QrM10pfSxzLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8TCh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3RdLGk9MSxhPTA7KythPGUmJihpKj0yNTYpOyluKz10aGlzW3QrYV0qaTtyZXR1cm4gbj49KGkqPTEyOCkmJihuLT1NYXRoLnBvdygyLDgqZSkpLG59LHMucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbih0LGUscil7dD4+Pj0wLGU+Pj49MCxyfHxMKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPWUsaT0xLGE9dGhpc1t0Ky0tbl07bj4wJiYoaSo9MjU2KTspYSs9dGhpc1t0Ky0tbl0qaTtyZXR1cm4gYT49KGkqPTEyOCkmJihhLT1NYXRoLnBvdygyLDgqZSkpLGF9LHMucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxMKHQsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbdF0/LTEqKDI1NS10aGlzW3RdKzEpOnRoaXNbdF19LHMucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKHQsZSl7dD4+Pj0wLGV8fEwodCwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW3RdfHRoaXNbdCsxXTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0scy5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24odCxlKXt0Pj4+PTAsZXx8TCh0LDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbdCsxXXx0aGlzW3RdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxzLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8TCh0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdF18dGhpc1t0KzFdPDw4fHRoaXNbdCsyXTw8MTZ8dGhpc1t0KzNdPDwyNH0scy5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCw0LHRoaXMubGVuZ3RoKSx0aGlzW3RdPDwyNHx0aGlzW3QrMV08PDE2fHRoaXNbdCsyXTw8OHx0aGlzW3QrM119LHMucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxMKHQsNCx0aGlzLmxlbmd0aCksaS5yZWFkKHRoaXMsdCwhMCwyMyw0KX0scy5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCw0LHRoaXMubGVuZ3RoKSxpLnJlYWQodGhpcyx0LCExLDIzLDQpfSxzLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCw4LHRoaXMubGVuZ3RoKSxpLnJlYWQodGhpcyx0LCEwLDUyLDgpfSxzLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCw4LHRoaXMubGVuZ3RoKSxpLnJlYWQodGhpcyx0LCExLDUyLDgpfSxzLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbih0LGUscixuKXsodD0rdCxlPj4+PTAscj4+Pj0wLG4pfHx6KHRoaXMsdCxlLHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9MSxhPTA7Zm9yKHRoaXNbZV09MjU1JnQ7KythPHImJihpKj0yNTYpOyl0aGlzW2UrYV09dC9pJjI1NTtyZXR1cm4gZStyfSxzLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbih0LGUscixuKXsodD0rdCxlPj4+PTAscj4+Pj0wLG4pfHx6KHRoaXMsdCxlLHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9ci0xLGE9MTtmb3IodGhpc1tlK2ldPTI1NSZ0Oy0taT49MCYmKGEqPTI1Nik7KXRoaXNbZStpXT10L2EmMjU1O3JldHVybiBlK3J9LHMucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDEsMjU1LDApLHRoaXNbZV09MjU1JnQsZSsxfSxzLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8eih0aGlzLHQsZSwyLDY1NTM1LDApLHRoaXNbZV09MjU1JnQsdGhpc1tlKzFdPXQ+Pj44LGUrMn0scy5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fHoodGhpcyx0LGUsMiw2NTUzNSwwKSx0aGlzW2VdPXQ+Pj44LHRoaXNbZSsxXT0yNTUmdCxlKzJ9LHMucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW2UrM109dD4+PjI0LHRoaXNbZSsyXT10Pj4+MTYsdGhpc1tlKzFdPXQ+Pj44LHRoaXNbZV09MjU1JnQsZSs0fSxzLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8eih0aGlzLHQsZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1tlXT10Pj4+MjQsdGhpc1tlKzFdPXQ+Pj4xNix0aGlzW2UrMl09dD4+PjgsdGhpc1tlKzNdPTI1NSZ0LGUrNH0scy5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbih0LGUscixuKXtpZih0PSt0LGU+Pj49MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7eih0aGlzLHQsZSxyLGktMSwtaSl9dmFyIGE9MCxvPTEscz0wO2Zvcih0aGlzW2VdPTI1NSZ0OysrYTxyJiYobyo9MjU2KTspdDwwJiYwPT09cyYmMCE9PXRoaXNbZSthLTFdJiYocz0xKSx0aGlzW2UrYV09KHQvbz4+MCktcyYyNTU7cmV0dXJuIGUrcn0scy5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbih0LGUscixuKXtpZih0PSt0LGU+Pj49MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7eih0aGlzLHQsZSxyLGktMSwtaSl9dmFyIGE9ci0xLG89MSxzPTA7Zm9yKHRoaXNbZSthXT0yNTUmdDstLWE+PTAmJihvKj0yNTYpOyl0PDAmJjA9PT1zJiYwIT09dGhpc1tlK2ErMV0mJihzPTEpLHRoaXNbZSthXT0odC9vPj4wKS1zJjI1NTtyZXR1cm4gZStyfSxzLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDEsMTI3LC0xMjgpLHQ8MCYmKHQ9MjU1K3QrMSksdGhpc1tlXT0yNTUmdCxlKzF9LHMucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fHoodGhpcyx0LGUsMiwzMjc2NywtMzI3NjgpLHRoaXNbZV09MjU1JnQsdGhpc1tlKzFdPXQ+Pj44LGUrMn0scy5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8eih0aGlzLHQsZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tlXT10Pj4+OCx0aGlzW2UrMV09MjU1JnQsZSsyfSxzLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsdGhpc1tlKzJdPXQ+Pj4xNix0aGlzW2UrM109dD4+PjI0LGUrNH0scy5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8eih0aGlzLHQsZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHQ8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpLHRoaXNbZV09dD4+PjI0LHRoaXNbZSsxXT10Pj4+MTYsdGhpc1tlKzJdPXQ+Pj44LHRoaXNbZSszXT0yNTUmdCxlKzR9LHMucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIEkodGhpcyx0LGUsITAscil9LHMucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIEkodGhpcyx0LGUsITEscil9LHMucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBEKHRoaXMsdCxlLCEwLHIpfSxzLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gRCh0aGlzLHQsZSwhMSxyKX0scy5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0LGUscixuKXtpZighcy5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyXCIpO2lmKHJ8fChyPTApLG58fDA9PT1ufHwobj10aGlzLmxlbmd0aCksZT49dC5sZW5ndGgmJihlPXQubGVuZ3RoKSxlfHwoZT0wKSxuPjAmJm48ciYmKG49ciksbj09PXIpcmV0dXJuIDA7aWYoMD09PXQubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kc1wiKTtpZihyPDB8fHI+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW5kZXggb3V0IG9mIHJhbmdlXCIpO2lmKG48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzXCIpO24+dGhpcy5sZW5ndGgmJihuPXRoaXMubGVuZ3RoKSx0Lmxlbmd0aC1lPG4tciYmKG49dC5sZW5ndGgtZStyKTt2YXIgaT1uLXI7aWYodGhpcz09PXQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4pdGhpcy5jb3B5V2l0aGluKGUscixuKTtlbHNlIGlmKHRoaXM9PT10JiZyPGUmJmU8bilmb3IodmFyIGE9aS0xO2E+PTA7LS1hKXRbYStlXT10aGlzW2Ercl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbCh0LHRoaXMuc3ViYXJyYXkocixuKSxlKTtyZXR1cm4gaX0scy5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbih0LGUscixuKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGU/KG49ZSxlPTAscj10aGlzLmxlbmd0aCk6XCJzdHJpbmdcIj09dHlwZW9mIHImJihuPXIscj10aGlzLmxlbmd0aCksdm9pZCAwIT09biYmXCJzdHJpbmdcIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcihcImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmdcIik7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4mJiFzLmlzRW5jb2RpbmcobikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK24pO2lmKDE9PT10Lmxlbmd0aCl7dmFyIGk9dC5jaGFyQ29kZUF0KDApOyhcInV0ZjhcIj09PW4mJmk8MTI4fHxcImxhdGluMVwiPT09bikmJih0PWkpfX1lbHNlXCJudW1iZXJcIj09dHlwZW9mIHQmJih0Jj0yNTUpO2lmKGU8MHx8dGhpcy5sZW5ndGg8ZXx8dGhpcy5sZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk91dCBvZiByYW5nZSBpbmRleFwiKTtpZihyPD1lKXJldHVybiB0aGlzO3ZhciBhO2lmKGU+Pj49MCxyPXZvaWQgMD09PXI/dGhpcy5sZW5ndGg6cj4+PjAsdHx8KHQ9MCksXCJudW1iZXJcIj09dHlwZW9mIHQpZm9yKGE9ZTthPHI7KythKXRoaXNbYV09dDtlbHNle3ZhciBvPXMuaXNCdWZmZXIodCk/dDpzLmZyb20odCxuKSxsPW8ubGVuZ3RoO2lmKDA9PT1sKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSBcIicrdCsnXCIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgXCJ2YWx1ZVwiJyk7Zm9yKGE9MDthPHItZTsrK2EpdGhpc1thK2VdPW9bYSVsXX1yZXR1cm4gdGhpc307dmFyIFA9L1teK1xcLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIFIodCl7cmV0dXJuIHQ8MTY/XCIwXCIrdC50b1N0cmluZygxNik6dC50b1N0cmluZygxNil9ZnVuY3Rpb24gRih0LGUpe3ZhciByO2U9ZXx8MS8wO2Zvcih2YXIgbj10Lmxlbmd0aCxpPW51bGwsYT1bXSxvPTA7bzxuOysrbyl7aWYoKHI9dC5jaGFyQ29kZUF0KG8pKT41NTI5NSYmcjw1NzM0NCl7aWYoIWkpe2lmKHI+NTYzMTkpeyhlLT0zKT4tMSYmYS5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihvKzE9PT1uKXsoZS09Myk+LTEmJmEucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aT1yO2NvbnRpbnVlfWlmKHI8NTYzMjApeyhlLT0zKT4tMSYmYS5wdXNoKDIzOSwxOTEsMTg5KSxpPXI7Y29udGludWV9cj02NTUzNisoaS01NTI5Njw8MTB8ci01NjMyMCl9ZWxzZSBpJiYoZS09Myk+LTEmJmEucHVzaCgyMzksMTkxLDE4OSk7aWYoaT1udWxsLHI8MTI4KXtpZigoZS09MSk8MClicmVhazthLnB1c2gocil9ZWxzZSBpZihyPDIwNDgpe2lmKChlLT0yKTwwKWJyZWFrO2EucHVzaChyPj42fDE5Miw2MyZyfDEyOCl9ZWxzZSBpZihyPDY1NTM2KXtpZigoZS09Myk8MClicmVhazthLnB1c2gocj4+MTJ8MjI0LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX1lbHNle2lmKCEocjwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNvZGUgcG9pbnRcIik7aWYoKGUtPTQpPDApYnJlYWs7YS5wdXNoKHI+PjE4fDI0MCxyPj4xMiY2M3wxMjgscj4+NiY2M3wxMjgsNjMmcnwxMjgpfX1yZXR1cm4gYX1mdW5jdGlvbiBCKHQpe3JldHVybiBuLnRvQnl0ZUFycmF5KGZ1bmN0aW9uKHQpe2lmKCh0PSh0PXQuc3BsaXQoXCI9XCIpWzBdKS50cmltKCkucmVwbGFjZShQLFwiXCIpKS5sZW5ndGg8MilyZXR1cm5cIlwiO2Zvcig7dC5sZW5ndGglNCE9MDspdCs9XCI9XCI7cmV0dXJuIHR9KHQpKX1mdW5jdGlvbiBOKHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8biYmIShpK3I+PWUubGVuZ3RofHxpPj10Lmxlbmd0aCk7KytpKWVbaStyXT10W2ldO3JldHVybiBpfWZ1bmN0aW9uIGoodCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIGV8fG51bGwhPXQmJm51bGwhPXQuY29uc3RydWN0b3ImJm51bGwhPXQuY29uc3RydWN0b3IubmFtZSYmdC5jb25zdHJ1Y3Rvci5uYW1lPT09ZS5uYW1lfWZ1bmN0aW9uIFYodCl7cmV0dXJuIHQhPXR9fSx7XCJiYXNlNjQtanNcIjo2NSxpZWVlNzU0OjQwNX1dLDk3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vbGliL21vbm90b25lXCIpLGk9dChcIi4vbGliL3RyaWFuZ3VsYXRpb25cIiksYT10KFwiLi9saWIvZGVsYXVuYXlcIiksbz10KFwiLi9saWIvZmlsdGVyXCIpO2Z1bmN0aW9uIHModCl7cmV0dXJuW01hdGgubWluKHRbMF0sdFsxXSksTWF0aC5tYXgodFswXSx0WzFdKV19ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXX1mdW5jdGlvbiBjKHQsZSxyKXtyZXR1cm4gZSBpbiB0P3RbZV06cn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe0FycmF5LmlzQXJyYXkoZSk/KHI9cnx8e30sZT1lfHxbXSk6KHI9ZXx8e30sZT1bXSk7dmFyIHU9ISFjKHIsXCJkZWxhdW5heVwiLCEwKSxoPSEhYyhyLFwiaW50ZXJpb3JcIiwhMCksZj0hIWMocixcImV4dGVyaW9yXCIsITApLHA9ISFjKHIsXCJpbmZpbml0eVwiLCExKTtpZighaCYmIWZ8fDA9PT10Lmxlbmd0aClyZXR1cm5bXTt2YXIgZD1uKHQsZSk7aWYodXx8aCE9PWZ8fHApe2Zvcih2YXIgZz1pKHQubGVuZ3RoLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChzKS5zb3J0KGwpfShlKSksdj0wO3Y8ZC5sZW5ndGg7Kyt2KXt2YXIgbT1kW3ZdO2cuYWRkVHJpYW5nbGUobVswXSxtWzFdLG1bMl0pfXJldHVybiB1JiZhKHQsZyksZj9oP3A/byhnLDAscCk6Zy5jZWxscygpOm8oZywxLHApOm8oZywtMSl9cmV0dXJuIGR9fSx7XCIuL2xpYi9kZWxhdW5heVwiOjk4LFwiLi9saWIvZmlsdGVyXCI6OTksXCIuL2xpYi9tb25vdG9uZVwiOjEwMCxcIi4vbGliL3RyaWFuZ3VsYXRpb25cIjoxMDF9XSw5ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJyb2J1c3QtaW4tc3BoZXJlXCIpWzRdO3QoXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiKTtmdW5jdGlvbiBpKHQsZSxyLGksYSxvKXt2YXIgcz1lLm9wcG9zaXRlKGksYSk7aWYoIShzPDApKXtpZihhPGkpe3ZhciBsPWk7aT1hLGE9bCxsPW8sbz1zLHM9bH1lLmlzQ29uc3RyYWludChpLGEpfHxuKHRbaV0sdFthXSx0W29dLHRbc10pPDAmJnIucHVzaChpLGEpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sYT10Lmxlbmd0aCxvPWUuc3RhcnMscz0wO3M8YTsrK3MpZm9yKHZhciBsPW9bc10sYz0xO2M8bC5sZW5ndGg7Yys9Mil7dmFyIHU9bFtjXTtpZighKHU8cykmJiFlLmlzQ29uc3RyYWludChzLHUpKXtmb3IodmFyIGg9bFtjLTFdLGY9LTEscD0xO3A8bC5sZW5ndGg7cCs9MilpZihsW3AtMV09PT11KXtmPWxbcF07YnJlYWt9ZjwwfHxuKHRbc10sdFt1XSx0W2hdLHRbZl0pPDAmJnIucHVzaChzLHUpfX1mb3IoO3IubGVuZ3RoPjA7KXtmb3IodmFyIHU9ci5wb3AoKSxzPXIucG9wKCksaD0tMSxmPS0xLGw9b1tzXSxkPTE7ZDxsLmxlbmd0aDtkKz0yKXt2YXIgZz1sW2QtMV0sdj1sW2RdO2c9PT11P2Y9djp2PT09dSYmKGg9Zyl9aDwwfHxmPDB8fChuKHRbc10sdFt1XSx0W2hdLHRbZl0pPj0wfHwoZS5mbGlwKHMsdSksaSh0LGUscixoLHMsZiksaSh0LGUscixzLGYsaCksaSh0LGUscixmLHUsaCksaSh0LGUscix1LGgsZikpKX19fSx7XCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiOjEwMixcInJvYnVzdC1pbi1zcGhlcmVcIjo0OTN9XSw5OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuLGk9dChcImJpbmFyeS1zZWFyY2gtYm91bmRzXCIpO2Z1bmN0aW9uIGEodCxlLHIsbixpLGEsbyl7dGhpcy5jZWxscz10LHRoaXMubmVpZ2hib3I9ZSx0aGlzLmZsYWdzPW4sdGhpcy5jb25zdHJhaW50PXIsdGhpcy5hY3RpdmU9aSx0aGlzLm5leHQ9YSx0aGlzLmJvdW5kYXJ5PW99ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXXx8dFsyXS1lWzJdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jZWxscygpLG49ci5sZW5ndGgsaT0wO2k8bjsrK2kpe3ZhciBzPXJbaV0sbD1zWzBdLGM9c1sxXSx1PXNbMl07Yzx1P2M8bCYmKHNbMF09YyxzWzFdPXUsc1syXT1sKTp1PGwmJihzWzBdPXUsc1sxXT1sLHNbMl09Yyl9ci5zb3J0KG8pO2Zvcih2YXIgaD1uZXcgQXJyYXkobiksaT0wO2k8aC5sZW5ndGg7KytpKWhbaV09MDt2YXIgZj1bXSxwPVtdLGQ9bmV3IEFycmF5KDMqbiksZz1uZXcgQXJyYXkoMypuKSx2PW51bGw7ZSYmKHY9W10pO2Zvcih2YXIgbT1uZXcgYShyLGQsZyxoLGYscCx2KSxpPTA7aTxuOysraSlmb3IodmFyIHM9cltpXSx5PTA7eTwzOysreSl7dmFyIGw9c1t5XSxjPXNbKHkrMSklM10seD1kWzMqaSt5XT1tLmxvY2F0ZShjLGwsdC5vcHBvc2l0ZShjLGwpKSxiPWdbMyppK3ldPXQuaXNDb25zdHJhaW50KGwsYyk7eDwwJiYoYj9wLnB1c2goaSk6KGYucHVzaChpKSxoW2ldPTEpLGUmJnYucHVzaChbYyxsLC0xXSkpfXJldHVybiBtfSh0LHIpO2lmKDA9PT1lKXJldHVybiByP24uY2VsbHMuY29uY2F0KG4uYm91bmRhcnkpOm4uY2VsbHM7dmFyIGk9MSxzPW4uYWN0aXZlLGw9bi5uZXh0LGM9bi5mbGFncyx1PW4uY2VsbHMsaD1uLmNvbnN0cmFpbnQsZj1uLm5laWdoYm9yO2Zvcig7cy5sZW5ndGg+MHx8bC5sZW5ndGg+MDspe2Zvcig7cy5sZW5ndGg+MDspe3ZhciBwPXMucG9wKCk7aWYoY1twXSE9PS1pKXtjW3BdPWk7dVtwXTtmb3IodmFyIGQ9MDtkPDM7KytkKXt2YXIgZz1mWzMqcCtkXTtnPj0wJiYwPT09Y1tnXSYmKGhbMypwK2RdP2wucHVzaChnKToocy5wdXNoKGcpLGNbZ109aSkpfX19dmFyIHY9bDtsPXMscz12LGwubGVuZ3RoPTAsaT0taX12YXIgbT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTAsaT0wO2k8dC5sZW5ndGg7KytpKWVbaV09PT1yJiYodFtuKytdPXRbaV0pO3JldHVybiB0Lmxlbmd0aD1uLHR9KHUsYyxlKTtpZihyKXJldHVybiBtLmNvbmNhdChuLmJvdW5kYXJ5KTtyZXR1cm4gbX0sYS5wcm90b3R5cGUubG9jYXRlPShuPVswLDAsMF0sZnVuY3Rpb24odCxlLHIpe3ZhciBhPXQscz1lLGw9cjtyZXR1cm4gZTxyP2U8dCYmKGE9ZSxzPXIsbD10KTpyPHQmJihhPXIscz10LGw9ZSksYTwwPy0xOihuWzBdPWEsblsxXT1zLG5bMl09bCxpLmVxKHRoaXMuY2VsbHMsbixvKSl9KX0se1wiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIjoxMDJ9XSwxMDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIiksaT10KFwicm9idXN0LW9yaWVudGF0aW9uXCIpWzNdLGE9MCxvPTEscz0yO2Z1bmN0aW9uIGwodCxlLHIsbixpKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmlkeD1yLHRoaXMubG93ZXJJZHM9bix0aGlzLnVwcGVySWRzPWl9ZnVuY3Rpb24gYyh0LGUscixuKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLnR5cGU9cix0aGlzLmlkeD1ufWZ1bmN0aW9uIHUodCxlKXt2YXIgcj10LmFbMF0tZS5hWzBdfHx0LmFbMV0tZS5hWzFdfHx0LnR5cGUtZS50eXBlO3JldHVybiByfHwodC50eXBlIT09YSYmKHI9aSh0LmEsdC5iLGUuYikpP3I6dC5pZHgtZS5pZHgpfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gaSh0LmEsdC5iLGUpfWZ1bmN0aW9uIGYodCxlLHIsYSxvKXtmb3IodmFyIHM9bi5sdChlLGEsaCksbD1uLmd0KGUsYSxoKSxjPXM7YzxsOysrYyl7Zm9yKHZhciB1PWVbY10sZj11Lmxvd2VySWRzLHA9Zi5sZW5ndGg7cD4xJiZpKHJbZltwLTJdXSxyW2ZbcC0xXV0sYSk+MDspdC5wdXNoKFtmW3AtMV0sZltwLTJdLG9dKSxwLT0xO2YubGVuZ3RoPXAsZi5wdXNoKG8pO3ZhciBkPXUudXBwZXJJZHM7Zm9yKHA9ZC5sZW5ndGg7cD4xJiZpKHJbZFtwLTJdXSxyW2RbcC0xXV0sYSk8MDspdC5wdXNoKFtkW3AtMl0sZFtwLTFdLG9dKSxwLT0xO2QubGVuZ3RoPXAsZC5wdXNoKG8pfX1mdW5jdGlvbiBwKHQsZSl7dmFyIHI7cmV0dXJuKHI9dC5hWzBdPGUuYVswXT9pKHQuYSx0LmIsZS5hKTppKGUuYixlLmEsdC5hKSk/cjoocj1lLmJbMF08dC5iWzBdP2kodC5hLHQuYixlLmIpOmkoZS5iLGUuYSx0LmIpKXx8dC5pZHgtZS5pZHh9ZnVuY3Rpb24gZCh0LGUscil7dmFyIGk9bi5sZSh0LHIscCksYT10W2ldLG89YS51cHBlcklkcyxzPW9bby5sZW5ndGgtMV07YS51cHBlcklkcz1bc10sdC5zcGxpY2UoaSsxLDAsbmV3IGwoci5hLHIuYixyLmlkeCxbc10sbykpfWZ1bmN0aW9uIGcodCxlLHIpe3ZhciBpPXIuYTtyLmE9ci5iLHIuYj1pO3ZhciBhPW4uZXEodCxyLHApLG89dFthXTt0W2EtMV0udXBwZXJJZHM9by51cHBlcklkcyx0LnNwbGljZShhLDEpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPWUubGVuZ3RoLGk9W10saD0wO2g8cjsrK2gpaS5wdXNoKG5ldyBjKHRbaF0sbnVsbCxhLGgpKTtmb3IodmFyIGg9MDtoPG47KytoKXt2YXIgcD1lW2hdLHY9dFtwWzBdXSxtPXRbcFsxXV07dlswXTxtWzBdP2kucHVzaChuZXcgYyh2LG0scyxoKSxuZXcgYyhtLHYsbyxoKSk6dlswXT5tWzBdJiZpLnB1c2gobmV3IGMobSx2LHMsaCksbmV3IGModixtLG8saCkpfWkuc29ydCh1KTtmb3IodmFyIHk9aVswXS5hWzBdLSgxK01hdGguYWJzKGlbMF0uYVswXSkpKk1hdGgucG93KDIsLTUyKSx4PVtuZXcgbChbeSwxXSxbeSwwXSwtMSxbXSxbXSxbXSxbXSldLGI9W10saD0wLF89aS5sZW5ndGg7aDxfOysraCl7dmFyIHc9aVtoXSxrPXcudHlwZTtrPT09YT9mKGIseCx0LHcuYSx3LmlkeCk6az09PXM/ZCh4LHQsdyk6Zyh4LHQsdyl9cmV0dXJuIGJ9fSx7XCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiOjEwMixcInJvYnVzdC1vcmllbnRhdGlvblwiOjQ5NX1dLDEwMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiKTtmdW5jdGlvbiBpKHQsZSl7dGhpcy5zdGFycz10LHRoaXMuZWRnZXM9ZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09W107cmV0dXJuIG5ldyBpKHIsZSl9O3ZhciBhPWkucHJvdG90eXBlO2Z1bmN0aW9uIG8odCxlLHIpe2Zvcih2YXIgbj0xLGk9dC5sZW5ndGg7bjxpO24rPTIpaWYodFtuLTFdPT09ZSYmdFtuXT09PXIpcmV0dXJuIHRbbi0xXT10W2ktMl0sdFtuXT10W2ktMV0sdm9pZCh0Lmxlbmd0aD1pLTIpfWEuaXNDb25zdHJhaW50PWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF07ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXX1yZXR1cm4gZnVuY3Rpb24ocixpKXtyZXR1cm4gdFswXT1NYXRoLm1pbihyLGkpLHRbMV09TWF0aC5tYXgocixpKSxuLmVxKHRoaXMuZWRnZXMsdCxlKT49MH19KCksYS5yZW1vdmVUcmlhbmdsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5zdGFycztvKG5bdF0sZSxyKSxvKG5bZV0scix0KSxvKG5bcl0sdCxlKX0sYS5hZGRUcmlhbmdsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5zdGFycztuW3RdLnB1c2goZSxyKSxuW2VdLnB1c2gocix0KSxuW3JdLnB1c2godCxlKX0sYS5vcHBvc2l0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLnN0YXJzW2VdLG49MSxpPXIubGVuZ3RoO248aTtuKz0yKWlmKHJbbl09PT10KXJldHVybiByW24tMV07cmV0dXJuLTF9LGEuZmxpcD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMub3Bwb3NpdGUodCxlKSxuPXRoaXMub3Bwb3NpdGUoZSx0KTt0aGlzLnJlbW92ZVRyaWFuZ2xlKHQsZSxyKSx0aGlzLnJlbW92ZVRyaWFuZ2xlKGUsdCxuKSx0aGlzLmFkZFRyaWFuZ2xlKHQsbixyKSx0aGlzLmFkZFRyaWFuZ2xlKGUscixuKX0sYS5lZGdlcz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN0YXJzLGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxhPTAsbz1pLmxlbmd0aDthPG87YSs9MillLnB1c2goW2lbYV0saVthKzFdXSk7cmV0dXJuIGV9LGEuY2VsbHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5zdGFycyxlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sYT0wLG89aS5sZW5ndGg7YTxvO2ErPTIpe3ZhciBzPWlbYV0sbD1pW2ErMV07cjxNYXRoLm1pbihzLGwpJiZlLnB1c2goW3IscyxsXSl9cmV0dXJuIGV9fSx7XCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiOjEwMn1dLDEwMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlLHIsbixpKXt2YXIgYT1bXCJmdW5jdGlvbiBcIix0LFwiKGEsbCxoLFwiLG4uam9pbihcIixcIiksXCIpe1wiLGk/XCJcIjpcInZhciBpPVwiLHI/XCJsLTFcIjpcImgrMVwiLFwiO3doaWxlKGw8PWgpe3ZhciBtPShsK2gpPj4+MSx4PWFbbV1cIl07cmV0dXJuIGk/ZS5pbmRleE9mKFwiY1wiKTwwP2EucHVzaChcIjtpZih4PT09eSl7cmV0dXJuIG19ZWxzZSBpZih4PD15KXtcIik6YS5wdXNoKFwiO3ZhciBwPWMoeCx5KTtpZihwPT09MCl7cmV0dXJuIG19ZWxzZSBpZihwPD0wKXtcIik6YS5wdXNoKFwiO2lmKFwiLGUsXCIpe2k9bTtcIikscj9hLnB1c2goXCJsPW0rMX1lbHNle2g9bS0xfVwiKTphLnB1c2goXCJoPW0tMX1lbHNle2w9bSsxfVwiKSxhLnB1c2goXCJ9XCIpLGk/YS5wdXNoKFwicmV0dXJuIC0xfTtcIik6YS5wdXNoKFwicmV0dXJuIGl9O1wiKSxhLmpvaW4oXCJcIil9ZnVuY3Rpb24gaSh0LGUscixpKXtyZXR1cm4gbmV3IEZ1bmN0aW9uKFtuKFwiQVwiLFwieFwiK3QrXCJ5XCIsZSxbXCJ5XCJdLGkpLG4oXCJQXCIsXCJjKHgseSlcIit0K1wiMFwiLGUsW1wieVwiLFwiY1wiXSxpKSxcImZ1bmN0aW9uIGRpc3BhdGNoQnNlYXJjaFwiLHIsXCIoYSx5LGMsbCxoKXtpZih0eXBlb2YoYyk9PT0nZnVuY3Rpb24nKXtyZXR1cm4gUChhLChsPT09dm9pZCAwKT8wOmx8MCwoaD09PXZvaWQgMCk/YS5sZW5ndGgtMTpofDAseSxjKX1lbHNle3JldHVybiBBKGEsKGM9PT12b2lkIDApPzA6Y3wwLChsPT09dm9pZCAwKT9hLmxlbmd0aC0xOmx8MCx5KX19cmV0dXJuIGRpc3BhdGNoQnNlYXJjaFwiLHJdLmpvaW4oXCJcIikpKCl9ZS5leHBvcnRzPXtnZTppKFwiPj1cIiwhMSxcIkdFXCIpLGd0OmkoXCI+XCIsITEsXCJHVFwiKSxsdDppKFwiPFwiLCEwLFwiTFRcIiksbGU6aShcIjw9XCIsITAsXCJMRVwiKSxlcTppKFwiLVwiLCEwLFwiRVFcIiwhMCl9fSx7fV0sMTAzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xLHI9MTtyPHQubGVuZ3RoOysrcilmb3IodmFyIG49MDtuPHI7KytuKWlmKHRbcl08dFtuXSllPS1lO2Vsc2UgaWYodFtuXT09PXRbcl0pcmV0dXJuIDA7cmV0dXJuIGV9fSx7fV0sMTA0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImR1cFwiKSxpPXQoXCJyb2J1c3QtbGluZWFyLXNvbHZlXCIpO2Z1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLGk9MDtpPG47KytpKXIrPXRbaV0qZVtpXTtyZXR1cm4gcn1mdW5jdGlvbiBvKHQpe3ZhciBlPXQubGVuZ3RoO2lmKDA9PT1lKXJldHVybltdO3RbMF0ubGVuZ3RoO3ZhciByPW4oW3QubGVuZ3RoKzEsdC5sZW5ndGgrMV0sMSksbz1uKFt0Lmxlbmd0aCsxXSwxKTtyW2VdW2VdPTA7Zm9yKHZhciBzPTA7czxlOysrcyl7Zm9yKHZhciBsPTA7bDw9czsrK2wpcltsXVtzXT1yW3NdW2xdPTIqYSh0W3NdLHRbbF0pO29bc109YSh0W3NdLHRbc10pfXZhciBjPWkocixvKSx1PTAsaD1jW2UrMV07Zm9yKHM9MDtzPGgubGVuZ3RoOysrcyl1Kz1oW3NdO3ZhciBmPW5ldyBBcnJheShlKTtmb3Iocz0wO3M8ZTsrK3Mpe2g9Y1tzXTt2YXIgcD0wO2ZvcihsPTA7bDxoLmxlbmd0aDsrK2wpcCs9aFtsXTtmW3NdPXAvdX1yZXR1cm4gZn1mdW5jdGlvbiBzKHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm5bXTtmb3IodmFyIGU9dFswXS5sZW5ndGgscj1uKFtlXSksaT1vKHQpLGE9MDthPHQubGVuZ3RoOysrYSlmb3IodmFyIHM9MDtzPGU7KytzKXJbc10rPXRbYV1bc10qaVthXTtyZXR1cm4gcn1zLmJhcnljZW5ldHJpYz1vLGUuZXhwb3J0cz1zfSx7ZHVwOjE2MixcInJvYnVzdC1saW5lYXItc29sdmVcIjo0OTR9XSwxMDU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW4odCkscj0wLGk9MDtpPHQubGVuZ3RoOysraSlmb3IodmFyIGE9dFtpXSxvPTA7bzxlLmxlbmd0aDsrK28pcis9TWF0aC5wb3coYVtvXS1lW29dLDIpO3JldHVybiBNYXRoLnNxcnQoci90Lmxlbmd0aCl9O3ZhciBuPXQoXCJjaXJjdW1jZW50ZXJcIil9LHtjaXJjdW1jZW50ZXI6MTA0fV0sMTA2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZTxyP3Q8ZT9lOnQ+cj9yOnQ6dDxyP3I6dD5lP2U6dH19LHt9XSwxMDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuO2lmKHIpe249ZTtmb3IodmFyIGk9bmV3IEFycmF5KGUubGVuZ3RoKSxhPTA7YTxlLmxlbmd0aDsrK2Epe3ZhciBvPWVbYV07aVthXT1bb1swXSxvWzFdLHJbYV1dfWU9aX12YXIgcz1mdW5jdGlvbih0LGUscil7dmFyIG49ZCh0LFtdLHAodCkpO3JldHVybiBtKGUsbixyKSwhIW59KHQsZSwhIXIpO2Zvcig7eSh0LGUsISFyKTspcz0hMDtpZihyJiZzKXtuLmxlbmd0aD0wLHIubGVuZ3RoPTA7Zm9yKHZhciBhPTA7YTxlLmxlbmd0aDsrK2Epe3ZhciBvPWVbYV07bi5wdXNoKFtvWzBdLG9bMV1dKSxyLnB1c2gob1syXSl9fXJldHVybiBzfTt2YXIgbj10KFwidW5pb24tZmluZFwiKSxpPXQoXCJib3gtaW50ZXJzZWN0XCIpLGE9dChcInJvYnVzdC1zZWdtZW50LWludGVyc2VjdFwiKSxvPXQoXCJiaWctcmF0XCIpLHM9dChcImJpZy1yYXQvY21wXCIpLGw9dChcImJpZy1yYXQvdG8tZmxvYXRcIiksYz10KFwicmF0LXZlY1wiKSx1PXQoXCJuZXh0YWZ0ZXJcIiksaD10KFwiLi9saWIvcmF0LXNlZy1pbnRlcnNlY3RcIik7ZnVuY3Rpb24gZih0KXt2YXIgZT1sKHQpO3JldHVyblt1KGUsLTEvMCksdShlLDEvMCldfWZ1bmN0aW9uIHAodCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbj10W3JdO2Vbcl09W3UoblswXSwtMS8wKSx1KG5bMV0sLTEvMCksdShuWzBdLDEvMCksdShuWzFdLDEvMCldfXJldHVybiBlfWZ1bmN0aW9uIGQodCxlLHIpe2Zvcih2YXIgYT1lLmxlbmd0aCxvPW5ldyBuKGEpLHM9W10sbD0wO2w8ZS5sZW5ndGg7KytsKXt2YXIgYz1lW2xdLGg9ZihjWzBdKSxwPWYoY1sxXSk7cy5wdXNoKFt1KGhbMF0sLTEvMCksdShwWzBdLC0xLzApLHUoaFsxXSwxLzApLHUocFsxXSwxLzApXSl9aShzLGZ1bmN0aW9uKHQsZSl7by5saW5rKHQsZSl9KTt2YXIgZD0hMCxnPW5ldyBBcnJheShhKTtmb3IobD0wO2w8YTsrK2wpeyhtPW8uZmluZChsKSkhPT1sJiYoZD0hMSx0W21dPVtNYXRoLm1pbih0W2xdWzBdLHRbbV1bMF0pLE1hdGgubWluKHRbbF1bMV0sdFttXVsxXSldKX1pZihkKXJldHVybiBudWxsO3ZhciB2PTA7Zm9yKGw9MDtsPGE7KytsKXt2YXIgbTsobT1vLmZpbmQobCkpPT09bD8oZ1tsXT12LHRbdisrXT10W2xdKTpnW2xdPS0xfXQubGVuZ3RoPXY7Zm9yKGw9MDtsPGE7KytsKWdbbF08MCYmKGdbbF09Z1tvLmZpbmQobCldKTtyZXR1cm4gZ31mdW5jdGlvbiBnKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIHYodCxlKXt2YXIgcj10WzBdLWVbMF18fHRbMV0tZVsxXTtyZXR1cm4gcnx8KHRbMl08ZVsyXT8tMTp0WzJdPmVbMl0/MTowKX1mdW5jdGlvbiBtKHQsZSxyKXtpZigwIT09dC5sZW5ndGgpe2lmKGUpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBpPWVbKG89dFtuXSlbMF1dLGE9ZVtvWzFdXTtvWzBdPU1hdGgubWluKGksYSksb1sxXT1NYXRoLm1heChpLGEpfWVsc2UgZm9yKG49MDtuPHQubGVuZ3RoOysrbil7dmFyIG87aT0obz10W25dKVswXSxhPW9bMV07b1swXT1NYXRoLm1pbihpLGEpLG9bMV09TWF0aC5tYXgoaSxhKX1yP3Quc29ydCh2KTp0LnNvcnQoZyk7dmFyIHM9MTtmb3Iobj0xO248dC5sZW5ndGg7KytuKXt2YXIgbD10W24tMV0sYz10W25dOyhjWzBdIT09bFswXXx8Y1sxXSE9PWxbMV18fHImJmNbMl0hPT1sWzJdKSYmKHRbcysrXT1jKX10Lmxlbmd0aD1zfX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZS5sZW5ndGgpLG49MDtuPGUubGVuZ3RoOysrbil7dmFyIGk9ZVtuXSxhPXRbaVswXV0sbz10W2lbMV1dO3Jbbl09W3UoTWF0aC5taW4oYVswXSxvWzBdKSwtMS8wKSx1KE1hdGgubWluKGFbMV0sb1sxXSksLTEvMCksdShNYXRoLm1heChhWzBdLG9bMF0pLDEvMCksdShNYXRoLm1heChhWzFdLG9bMV0pLDEvMCldfXJldHVybiByfSh0LGUpLGY9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVtdO3JldHVybiBpKHIsZnVuY3Rpb24ocixpKXt2YXIgbz1lW3JdLHM9ZVtpXTtpZihvWzBdIT09c1swXSYmb1swXSE9PXNbMV0mJm9bMV0hPT1zWzBdJiZvWzFdIT09c1sxXSl7dmFyIGw9dFtvWzBdXSxjPXRbb1sxXV0sdT10W3NbMF1dLGg9dFtzWzFdXTthKGwsYyx1LGgpJiZuLnB1c2goW3IsaV0pfX0pLG59KHQsZSxuKSxnPXAodCksdj1mdW5jdGlvbih0LGUscixuKXt2YXIgbz1bXTtyZXR1cm4gaShyLG4sZnVuY3Rpb24ocixuKXt2YXIgaT1lW3JdO2lmKGlbMF0hPT1uJiZpWzFdIT09bil7dmFyIHM9dFtuXSxsPXRbaVswXV0sYz10W2lbMV1dO2EobCxjLHMscykmJm8ucHVzaChbcixuXSl9fSksb30odCxlLG4sZykseT1kKHQsZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSx1LGY9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW28odFswXSksbyh0WzFdKV19KTtmb3IoYT0wO2E8ci5sZW5ndGg7KythKXt2YXIgcD1yW2FdO3U9cFswXTt2YXIgZD1wWzFdLGc9ZVt1XSx2PWVbZF0sbT1oKGModFtnWzBdXSksYyh0W2dbMV1dKSxjKHRbdlswXV0pLGModFt2WzFdXSkpO2lmKG0pe3ZhciB5PXQubGVuZ3RoO3QucHVzaChbbChtWzBdKSxsKG1bMV0pXSksZi5wdXNoKG0pLG4ucHVzaChbdSx5XSxbZCx5XSl9fWZvcihuLnNvcnQoZnVuY3Rpb24odCxlKXtpZih0WzBdIT09ZVswXSlyZXR1cm4gdFswXS1lWzBdO3ZhciByPWZbdFsxXV0sbj1mW2VbMV1dO3JldHVybiBzKHJbMF0sblswXSl8fHMoclsxXSxuWzFdKX0pLGE9bi5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIHg9ZVt1PShTPW5bYV0pWzBdXSxiPXhbMF0sXz14WzFdLHc9dFtiXSxrPXRbX107aWYoKHdbMF0ta1swXXx8d1sxXS1rWzFdKTwwKXt2YXIgQT1iO2I9XyxfPUF9eFswXT1iO3ZhciBULE09eFsxXT1TWzFdO2ZvcihpJiYoVD14WzJdKTthPjAmJm5bYS0xXVswXT09PXU7KXt2YXIgUyxFPShTPW5bLS1hXSlbMV07aT9lLnB1c2goW00sRSxUXSk6ZS5wdXNoKFtNLEVdKSxNPUV9aT9lLnB1c2goW00sXyxUXSk6ZS5wdXNoKFtNLF9dKX1yZXR1cm4gZn0odCxlLGYsdixyKSk7cmV0dXJuIG0oZSx5LHIpLCEheXx8KGYubGVuZ3RoPjB8fHYubGVuZ3RoPjApfX0se1wiLi9saWIvcmF0LXNlZy1pbnRlcnNlY3RcIjoxMDgsXCJiaWctcmF0XCI6NjksXCJiaWctcmF0L2NtcFwiOjY3LFwiYmlnLXJhdC90by1mbG9hdFwiOjgxLFwiYm94LWludGVyc2VjdFwiOjg3LG5leHRhZnRlcjo0NDQsXCJyYXQtdmVjXCI6NDc5LFwicm9idXN0LXNlZ21lbnQtaW50ZXJzZWN0XCI6NDk4LFwidW5pb24tZmluZFwiOjUzMX1dLDEwODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgYT1zKGUsdCksaD1zKG4sciksZj11KGEsaCk7aWYoMD09PW8oZikpcmV0dXJuIG51bGw7dmFyIHA9cyh0LHIpLGQ9dShoLHApLGc9aShkLGYpLHY9YyhhLGcpO3JldHVybiBsKHQsdil9O3ZhciBuPXQoXCJiaWctcmF0L211bFwiKSxpPXQoXCJiaWctcmF0L2RpdlwiKSxhPXQoXCJiaWctcmF0L3N1YlwiKSxvPXQoXCJiaWctcmF0L3NpZ25cIikscz10KFwicmF0LXZlYy9zdWJcIiksbD10KFwicmF0LXZlYy9hZGRcIiksYz10KFwicmF0LXZlYy9tdWxzXCIpO2Z1bmN0aW9uIHUodCxlKXtyZXR1cm4gYShuKHRbMF0sZVsxXSksbih0WzFdLGVbMF0pKX19LHtcImJpZy1yYXQvZGl2XCI6NjgsXCJiaWctcmF0L211bFwiOjc4LFwiYmlnLXJhdC9zaWduXCI6NzksXCJiaWctcmF0L3N1YlwiOjgwLFwicmF0LXZlYy9hZGRcIjo0NzgsXCJyYXQtdmVjL211bHNcIjo0ODAsXCJyYXQtdmVjL3N1YlwiOjQ4MX1dLDEwOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJjbGFtcFwiKTtmdW5jdGlvbiBpKHQsZSl7bnVsbD09ZSYmKGU9ITApO3ZhciByPXRbMF0saT10WzFdLGE9dFsyXSxvPXRbM107cmV0dXJuIG51bGw9PW8mJihvPWU/MToyNTUpLGUmJihyKj0yNTUsaSo9MjU1LGEqPTI1NSxvKj0yNTUpLDE2Nzc3MjE2KihyPTI1NSZuKHIsMCwyNTUpKSsoKGk9MjU1Jm4oaSwwLDI1NSkpPDwxNikrKChhPTI1NSZuKGEsMCwyNTUpKTw8OCkrKG89MjU1Jm4obywwLDI1NSkpfWUuZXhwb3J0cz1pLGUuZXhwb3J0cy50bz1pLGUuZXhwb3J0cy5mcm9tPWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHQ9K3QpPj4+MjQsbj0oMTY3MTE2ODAmdCk+Pj4xNixpPSg2NTI4MCZ0KT4+PjgsYT0yNTUmdDtyZXR1cm4hMT09PWU/W3IsbixpLGFdOltyLzI1NSxuLzI1NSxpLzI1NSxhLzI1NV19fSx7Y2xhbXA6MTA2fV0sMTEwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXthbGljZWJsdWU6WzI0MCwyNDgsMjU1XSxhbnRpcXVld2hpdGU6WzI1MCwyMzUsMjE1XSxhcXVhOlswLDI1NSwyNTVdLGFxdWFtYXJpbmU6WzEyNywyNTUsMjEyXSxhenVyZTpbMjQwLDI1NSwyNTVdLGJlaWdlOlsyNDUsMjQ1LDIyMF0sYmlzcXVlOlsyNTUsMjI4LDE5Nl0sYmxhY2s6WzAsMCwwXSxibGFuY2hlZGFsbW9uZDpbMjU1LDIzNSwyMDVdLGJsdWU6WzAsMCwyNTVdLGJsdWV2aW9sZXQ6WzEzOCw0MywyMjZdLGJyb3duOlsxNjUsNDIsNDJdLGJ1cmx5d29vZDpbMjIyLDE4NCwxMzVdLGNhZGV0Ymx1ZTpbOTUsMTU4LDE2MF0sY2hhcnRyZXVzZTpbMTI3LDI1NSwwXSxjaG9jb2xhdGU6WzIxMCwxMDUsMzBdLGNvcmFsOlsyNTUsMTI3LDgwXSxjb3JuZmxvd2VyYmx1ZTpbMTAwLDE0OSwyMzddLGNvcm5zaWxrOlsyNTUsMjQ4LDIyMF0sY3JpbXNvbjpbMjIwLDIwLDYwXSxjeWFuOlswLDI1NSwyNTVdLGRhcmtibHVlOlswLDAsMTM5XSxkYXJrY3lhbjpbMCwxMzksMTM5XSxkYXJrZ29sZGVucm9kOlsxODQsMTM0LDExXSxkYXJrZ3JheTpbMTY5LDE2OSwxNjldLGRhcmtncmVlbjpbMCwxMDAsMF0sZGFya2dyZXk6WzE2OSwxNjksMTY5XSxkYXJra2hha2k6WzE4OSwxODMsMTA3XSxkYXJrbWFnZW50YTpbMTM5LDAsMTM5XSxkYXJrb2xpdmVncmVlbjpbODUsMTA3LDQ3XSxkYXJrb3JhbmdlOlsyNTUsMTQwLDBdLGRhcmtvcmNoaWQ6WzE1Myw1MCwyMDRdLGRhcmtyZWQ6WzEzOSwwLDBdLGRhcmtzYWxtb246WzIzMywxNTAsMTIyXSxkYXJrc2VhZ3JlZW46WzE0MywxODgsMTQzXSxkYXJrc2xhdGVibHVlOls3Miw2MSwxMzldLGRhcmtzbGF0ZWdyYXk6WzQ3LDc5LDc5XSxkYXJrc2xhdGVncmV5Ols0Nyw3OSw3OV0sZGFya3R1cnF1b2lzZTpbMCwyMDYsMjA5XSxkYXJrdmlvbGV0OlsxNDgsMCwyMTFdLGRlZXBwaW5rOlsyNTUsMjAsMTQ3XSxkZWVwc2t5Ymx1ZTpbMCwxOTEsMjU1XSxkaW1ncmF5OlsxMDUsMTA1LDEwNV0sZGltZ3JleTpbMTA1LDEwNSwxMDVdLGRvZGdlcmJsdWU6WzMwLDE0NCwyNTVdLGZpcmVicmljazpbMTc4LDM0LDM0XSxmbG9yYWx3aGl0ZTpbMjU1LDI1MCwyNDBdLGZvcmVzdGdyZWVuOlszNCwxMzksMzRdLGZ1Y2hzaWE6WzI1NSwwLDI1NV0sZ2FpbnNib3JvOlsyMjAsMjIwLDIyMF0sZ2hvc3R3aGl0ZTpbMjQ4LDI0OCwyNTVdLGdvbGQ6WzI1NSwyMTUsMF0sZ29sZGVucm9kOlsyMTgsMTY1LDMyXSxncmF5OlsxMjgsMTI4LDEyOF0sZ3JlZW46WzAsMTI4LDBdLGdyZWVueWVsbG93OlsxNzMsMjU1LDQ3XSxncmV5OlsxMjgsMTI4LDEyOF0saG9uZXlkZXc6WzI0MCwyNTUsMjQwXSxob3RwaW5rOlsyNTUsMTA1LDE4MF0saW5kaWFucmVkOlsyMDUsOTIsOTJdLGluZGlnbzpbNzUsMCwxMzBdLGl2b3J5OlsyNTUsMjU1LDI0MF0sa2hha2k6WzI0MCwyMzAsMTQwXSxsYXZlbmRlcjpbMjMwLDIzMCwyNTBdLGxhdmVuZGVyYmx1c2g6WzI1NSwyNDAsMjQ1XSxsYXduZ3JlZW46WzEyNCwyNTIsMF0sbGVtb25jaGlmZm9uOlsyNTUsMjUwLDIwNV0sbGlnaHRibHVlOlsxNzMsMjE2LDIzMF0sbGlnaHRjb3JhbDpbMjQwLDEyOCwxMjhdLGxpZ2h0Y3lhbjpbMjI0LDI1NSwyNTVdLGxpZ2h0Z29sZGVucm9keWVsbG93OlsyNTAsMjUwLDIxMF0sbGlnaHRncmF5OlsyMTEsMjExLDIxMV0sbGlnaHRncmVlbjpbMTQ0LDIzOCwxNDRdLGxpZ2h0Z3JleTpbMjExLDIxMSwyMTFdLGxpZ2h0cGluazpbMjU1LDE4MiwxOTNdLGxpZ2h0c2FsbW9uOlsyNTUsMTYwLDEyMl0sbGlnaHRzZWFncmVlbjpbMzIsMTc4LDE3MF0sbGlnaHRza3libHVlOlsxMzUsMjA2LDI1MF0sbGlnaHRzbGF0ZWdyYXk6WzExOSwxMzYsMTUzXSxsaWdodHNsYXRlZ3JleTpbMTE5LDEzNiwxNTNdLGxpZ2h0c3RlZWxibHVlOlsxNzYsMTk2LDIyMl0sbGlnaHR5ZWxsb3c6WzI1NSwyNTUsMjI0XSxsaW1lOlswLDI1NSwwXSxsaW1lZ3JlZW46WzUwLDIwNSw1MF0sbGluZW46WzI1MCwyNDAsMjMwXSxtYWdlbnRhOlsyNTUsMCwyNTVdLG1hcm9vbjpbMTI4LDAsMF0sbWVkaXVtYXF1YW1hcmluZTpbMTAyLDIwNSwxNzBdLG1lZGl1bWJsdWU6WzAsMCwyMDVdLG1lZGl1bW9yY2hpZDpbMTg2LDg1LDIxMV0sbWVkaXVtcHVycGxlOlsxNDcsMTEyLDIxOV0sbWVkaXVtc2VhZ3JlZW46WzYwLDE3OSwxMTNdLG1lZGl1bXNsYXRlYmx1ZTpbMTIzLDEwNCwyMzhdLG1lZGl1bXNwcmluZ2dyZWVuOlswLDI1MCwxNTRdLG1lZGl1bXR1cnF1b2lzZTpbNzIsMjA5LDIwNF0sbWVkaXVtdmlvbGV0cmVkOlsxOTksMjEsMTMzXSxtaWRuaWdodGJsdWU6WzI1LDI1LDExMl0sbWludGNyZWFtOlsyNDUsMjU1LDI1MF0sbWlzdHlyb3NlOlsyNTUsMjI4LDIyNV0sbW9jY2FzaW46WzI1NSwyMjgsMTgxXSxuYXZham93aGl0ZTpbMjU1LDIyMiwxNzNdLG5hdnk6WzAsMCwxMjhdLG9sZGxhY2U6WzI1MywyNDUsMjMwXSxvbGl2ZTpbMTI4LDEyOCwwXSxvbGl2ZWRyYWI6WzEwNywxNDIsMzVdLG9yYW5nZTpbMjU1LDE2NSwwXSxvcmFuZ2VyZWQ6WzI1NSw2OSwwXSxvcmNoaWQ6WzIxOCwxMTIsMjE0XSxwYWxlZ29sZGVucm9kOlsyMzgsMjMyLDE3MF0scGFsZWdyZWVuOlsxNTIsMjUxLDE1Ml0scGFsZXR1cnF1b2lzZTpbMTc1LDIzOCwyMzhdLHBhbGV2aW9sZXRyZWQ6WzIxOSwxMTIsMTQ3XSxwYXBheWF3aGlwOlsyNTUsMjM5LDIxM10scGVhY2hwdWZmOlsyNTUsMjE4LDE4NV0scGVydTpbMjA1LDEzMyw2M10scGluazpbMjU1LDE5MiwyMDNdLHBsdW06WzIyMSwxNjAsMjIxXSxwb3dkZXJibHVlOlsxNzYsMjI0LDIzMF0scHVycGxlOlsxMjgsMCwxMjhdLHJlYmVjY2FwdXJwbGU6WzEwMiw1MSwxNTNdLHJlZDpbMjU1LDAsMF0scm9zeWJyb3duOlsxODgsMTQzLDE0M10scm95YWxibHVlOls2NSwxMDUsMjI1XSxzYWRkbGVicm93bjpbMTM5LDY5LDE5XSxzYWxtb246WzI1MCwxMjgsMTE0XSxzYW5keWJyb3duOlsyNDQsMTY0LDk2XSxzZWFncmVlbjpbNDYsMTM5LDg3XSxzZWFzaGVsbDpbMjU1LDI0NSwyMzhdLHNpZW5uYTpbMTYwLDgyLDQ1XSxzaWx2ZXI6WzE5MiwxOTIsMTkyXSxza3libHVlOlsxMzUsMjA2LDIzNV0sc2xhdGVibHVlOlsxMDYsOTAsMjA1XSxzbGF0ZWdyYXk6WzExMiwxMjgsMTQ0XSxzbGF0ZWdyZXk6WzExMiwxMjgsMTQ0XSxzbm93OlsyNTUsMjUwLDI1MF0sc3ByaW5nZ3JlZW46WzAsMjU1LDEyN10sc3RlZWxibHVlOls3MCwxMzAsMTgwXSx0YW46WzIxMCwxODAsMTQwXSx0ZWFsOlswLDEyOCwxMjhdLHRoaXN0bGU6WzIxNiwxOTEsMjE2XSx0b21hdG86WzI1NSw5OSw3MV0sdHVycXVvaXNlOls2NCwyMjQsMjA4XSx2aW9sZXQ6WzIzOCwxMzAsMjM4XSx3aGVhdDpbMjQ1LDIyMiwxNzldLHdoaXRlOlsyNTUsMjU1LDI1NV0sd2hpdGVzbW9rZTpbMjQ1LDI0NSwyNDVdLHllbGxvdzpbMjU1LDI1NSwwXSx5ZWxsb3dncmVlbjpbMTU0LDIwNSw1MF19fSx7fV0sMTExOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImNvbG9yLXJnYmFcIiksaT10KFwiY2xhbXBcIiksYT10KFwiZHR5cGVcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7XCJmbG9hdFwiIT09ZSYmZXx8KGU9XCJhcnJheVwiKSxcInVpbnRcIj09PWUmJihlPVwidWludDhcIiksXCJ1aW50X2NsYW1wZWRcIj09PWUmJihlPVwidWludDhfY2xhbXBlZFwiKTt2YXIgcj1uZXcoYShlKSkoNCksbz1cInVpbnQ4XCIhPT1lJiZcInVpbnQ4X2NsYW1wZWRcIiE9PWU7cmV0dXJuIHQubGVuZ3RoJiZcInN0cmluZ1wiIT10eXBlb2YgdHx8KCh0PW4odCkpWzBdLz0yNTUsdFsxXS89MjU1LHRbMl0vPTI1NSksZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXl8fCEhKEFycmF5LmlzQXJyYXkodCkmJih0WzBdPjF8fDA9PT10WzBdKSYmKHRbMV0+MXx8MD09PXRbMV0pJiYodFsyXT4xfHwwPT09dFsyXSkmJighdFszXXx8dFszXT4xKSl9KHQpPyhyWzBdPXRbMF0sclsxXT10WzFdLHJbMl09dFsyXSxyWzNdPW51bGwhPXRbM10/dFszXToyNTUsbyYmKHJbMF0vPTI1NSxyWzFdLz0yNTUsclsyXS89MjU1LHJbM10vPTI1NSkscik6KG8/KHJbMF09dFswXSxyWzFdPXRbMV0sclsyXT10WzJdLHJbM109bnVsbCE9dFszXT90WzNdOjEpOihyWzBdPWkoTWF0aC5mbG9vcigyNTUqdFswXSksMCwyNTUpLHJbMV09aShNYXRoLmZsb29yKDI1NSp0WzFdKSwwLDI1NSksclsyXT1pKE1hdGguZmxvb3IoMjU1KnRbMl0pLDAsMjU1KSxyWzNdPW51bGw9PXRbM10/MjU1OmkoTWF0aC5mbG9vcigyNTUqdFszXSksMCwyNTUpKSxyKX19LHtjbGFtcDoxMDYsXCJjb2xvci1yZ2JhXCI6MTEzLGR0eXBlOjE2MX1dLDExMjpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiY29sb3ItbmFtZVwiKSxpPXQoXCJpcy1wbGFpbi1vYmpcIiksYT10KFwiZGVmaW5lZFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscyxsPVtdLGM9MTtpZihcInN0cmluZ1wiPT10eXBlb2YgdClpZihuW3RdKWw9blt0XS5zbGljZSgpLHM9XCJyZ2JcIjtlbHNlIGlmKFwidHJhbnNwYXJlbnRcIj09PXQpYz0wLHM9XCJyZ2JcIixsPVswLDAsMF07ZWxzZSBpZigvXiNbQS1GYS1mMC05XSskLy50ZXN0KHQpKXt2YXIgdT10LnNsaWNlKDEpLGg9dS5sZW5ndGgsZj1oPD00O2M9MSxmPyhsPVtwYXJzZUludCh1WzBdK3VbMF0sMTYpLHBhcnNlSW50KHVbMV0rdVsxXSwxNikscGFyc2VJbnQodVsyXSt1WzJdLDE2KV0sND09PWgmJihjPXBhcnNlSW50KHVbM10rdVszXSwxNikvMjU1KSk6KGw9W3BhcnNlSW50KHVbMF0rdVsxXSwxNikscGFyc2VJbnQodVsyXSt1WzNdLDE2KSxwYXJzZUludCh1WzRdK3VbNV0sMTYpXSw4PT09aCYmKGM9cGFyc2VJbnQodVs2XSt1WzddLDE2KS8yNTUpKSxsWzBdfHwobFswXT0wKSxsWzFdfHwobFsxXT0wKSxsWzJdfHwobFsyXT0wKSxzPVwicmdiXCJ9ZWxzZSBpZihlPS9eKCg/OnJnYnxoc1tsdmJdfGh3YnxjbXlrP3x4eVt6eV18Z3JheXxsYWJ8bGNodT92P3xbbHlddXZ8bG1zKWE/KVxccypcXCgoW15cXCldKilcXCkvLmV4ZWModCkpe3ZhciBwPWVbMV0sdT1wLnJlcGxhY2UoL2EkLyxcIlwiKTtzPXU7dmFyIGg9XCJjbXlrXCI9PT11PzQ6XCJncmF5XCI9PT11PzE6MztsPWVbMl0udHJpbSgpLnNwbGl0KC9cXHMqLFxccyovKS5tYXAoZnVuY3Rpb24odCxlKXtpZigvJSQvLnRlc3QodCkpcmV0dXJuIGU9PT1oP3BhcnNlRmxvYXQodCkvMTAwOlwicmdiXCI9PT11PzI1NSpwYXJzZUZsb2F0KHQpLzEwMDpwYXJzZUZsb2F0KHQpO2lmKFwiaFwiPT09dVtlXSl7aWYoL2RlZyQvLnRlc3QodCkpcmV0dXJuIHBhcnNlRmxvYXQodCk7aWYodm9pZCAwIT09b1t0XSlyZXR1cm4gb1t0XX1yZXR1cm4gcGFyc2VGbG9hdCh0KX0pLHA9PT11JiZsLnB1c2goMSksYz12b2lkIDA9PT1sW2hdPzE6bFtoXSxsPWwuc2xpY2UoMCxoKX1lbHNlIHQubGVuZ3RoPjEwJiYvWzAtOV0oPzpcXHN8XFwvKS8udGVzdCh0KSYmKGw9dC5tYXRjaCgvKFswLTldKykvZykubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUZsb2F0KHQpfSkscz10Lm1hdGNoKC8oW2Etel0pL2dpKS5qb2luKFwiXCIpLnRvTG93ZXJDYXNlKCkpO2Vsc2UgaWYoaXNOYU4odCkpaWYoaSh0KSl7dmFyIGQ9YSh0LnIsdC5yZWQsdC5SLG51bGwpO251bGwhPT1kPyhzPVwicmdiXCIsbD1bZCxhKHQuZyx0LmdyZWVuLHQuRyksYSh0LmIsdC5ibHVlLHQuQildKToocz1cImhzbFwiLGw9W2EodC5oLHQuaHVlLHQuSCksYSh0LnMsdC5zYXR1cmF0aW9uLHQuUyksYSh0LmwsdC5saWdodG5lc3MsdC5MLHQuYix0LmJyaWdodG5lc3MpXSksYz1hKHQuYSx0LmFscGhhLHQub3BhY2l0eSwxKSxudWxsIT10Lm9wYWNpdHkmJihjLz0xMDApfWVsc2UoQXJyYXkuaXNBcnJheSh0KXx8ci5BcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3JiZBcnJheUJ1ZmZlci5pc1ZpZXcodCkpJiYobD1bdFswXSx0WzFdLHRbMl1dLHM9XCJyZ2JcIixjPTQ9PT10Lmxlbmd0aD90WzNdOjEpO2Vsc2Ugcz1cInJnYlwiLGw9W3Q+Pj4xNiwoNjUyODAmdCk+Pj44LDI1NSZ0XTtyZXR1cm57c3BhY2U6cyx2YWx1ZXM6bCxhbHBoYTpjfX07dmFyIG89e3JlZDowLG9yYW5nZTo2MCx5ZWxsb3c6MTIwLGdyZWVuOjE4MCxibHVlOjI0MCxwdXJwbGU6MzAwfX0pLmNhbGwodGhpcyxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se1wiY29sb3ItbmFtZVwiOjExMCxkZWZpbmVkOjE1NixcImlzLXBsYWluLW9ialwiOjQxNX1dLDExMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJjb2xvci1wYXJzZVwiKSxpPXQoXCJjb2xvci1zcGFjZS9oc2xcIiksYT10KFwiY2xhbXBcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHI9bih0KTtyZXR1cm4gci5zcGFjZT8oKGU9QXJyYXkoMykpWzBdPWEoci52YWx1ZXNbMF0sMCwyNTUpLGVbMV09YShyLnZhbHVlc1sxXSwwLDI1NSksZVsyXT1hKHIudmFsdWVzWzJdLDAsMjU1KSxcImhcIj09PXIuc3BhY2VbMF0mJihlPWkucmdiKGUpKSxlLnB1c2goYShyLmFscGhhLDAsMSkpLGUpOltdfX0se2NsYW1wOjEwNixcImNvbG9yLXBhcnNlXCI6MTEyLFwiY29sb3Itc3BhY2UvaHNsXCI6MTE0fV0sMTE0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vcmdiXCIpO2UuZXhwb3J0cz17bmFtZTpcImhzbFwiLG1pbjpbMCwwLDBdLG1heDpbMzYwLDEwMCwxMDBdLGNoYW5uZWw6W1wiaHVlXCIsXCJzYXR1cmF0aW9uXCIsXCJsaWdodG5lc3NcIl0sYWxpYXM6W1wiSFNMXCJdLHJnYjpmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG89dFswXS8zNjAscz10WzFdLzEwMCxsPXRbMl0vMTAwO2lmKDA9PT1zKXJldHVyblthPTI1NSpsLGEsYV07ZT0yKmwtKHI9bDwuNT9sKigxK3MpOmwrcy1sKnMpLGk9WzAsMCwwXTtmb3IodmFyIGM9MDtjPDM7YysrKShuPW8rMS8zKi0oYy0xKSk8MD9uKys6bj4xJiZuLS0sYT02Km48MT9lKzYqKHItZSkqbjoyKm48MT9yOjMqbjwyP2UrKHItZSkqKDIvMy1uKSo2OmUsaVtjXT0yNTUqYTtyZXR1cm4gaX19LG4uaHNsPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10WzBdLzI1NSxpPXRbMV0vMjU1LGE9dFsyXS8yNTUsbz1NYXRoLm1pbihuLGksYSkscz1NYXRoLm1heChuLGksYSksbD1zLW87cmV0dXJuIHM9PT1vP2U9MDpuPT09cz9lPShpLWEpL2w6aT09PXM/ZT0yKyhhLW4pL2w6YT09PXMmJihlPTQrKG4taSkvbCksKGU9TWF0aC5taW4oNjAqZSwzNjApKTwwJiYoZSs9MzYwKSxyPShvK3MpLzIsW2UsMTAwKihzPT09bz8wOnI8PS41P2wvKHMrbyk6bC8oMi1zLW8pKSwxMDAqcl19fSx7XCIuL3JnYlwiOjExNX1dLDExNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17bmFtZTpcInJnYlwiLG1pbjpbMCwwLDBdLG1heDpbMjU1LDI1NSwyNTVdLGNoYW5uZWw6W1wicmVkXCIsXCJncmVlblwiLFwiYmx1ZVwiXSxhbGlhczpbXCJSR0JcIl19fSx7fV0sMTE2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXtqZXQ6W3tpbmRleDowLHJnYjpbMCwwLDEzMV19LHtpbmRleDouMTI1LHJnYjpbMCw2MCwxNzBdfSx7aW5kZXg6LjM3NSxyZ2I6WzUsMjU1LDI1NV19LHtpbmRleDouNjI1LHJnYjpbMjU1LDI1NSwwXX0se2luZGV4Oi44NzUscmdiOlsyNTAsMCwwXX0se2luZGV4OjEscmdiOlsxMjgsMCwwXX1dLGhzdjpbe2luZGV4OjAscmdiOlsyNTUsMCwwXX0se2luZGV4Oi4xNjkscmdiOlsyNTMsMjU1LDJdfSx7aW5kZXg6LjE3MyxyZ2I6WzI0NywyNTUsMl19LHtpbmRleDouMzM3LHJnYjpbMCwyNTIsNF19LHtpbmRleDouMzQxLHJnYjpbMCwyNTIsMTBdfSx7aW5kZXg6LjUwNixyZ2I6WzEsMjQ5LDI1NV19LHtpbmRleDouNjcxLHJnYjpbMiwwLDI1M119LHtpbmRleDouNjc1LHJnYjpbOCwwLDI1M119LHtpbmRleDouODM5LHJnYjpbMjU1LDAsMjUxXX0se2luZGV4Oi44NDMscmdiOlsyNTUsMCwyNDVdfSx7aW5kZXg6MSxyZ2I6WzI1NSwwLDZdfV0saG90Olt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi4zLHJnYjpbMjMwLDAsMF19LHtpbmRleDouNixyZ2I6WzI1NSwyMTAsMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyNTVdfV0sY29vbDpbe2luZGV4OjAscmdiOlswLDI1NSwyNTVdfSx7aW5kZXg6MSxyZ2I6WzI1NSwwLDI1NV19XSxzcHJpbmc6W3tpbmRleDowLHJnYjpbMjU1LDAsMjU1XX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDBdfV0sc3VtbWVyOlt7aW5kZXg6MCxyZ2I6WzAsMTI4LDEwMl19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwxMDJdfV0sYXV0dW1uOlt7aW5kZXg6MCxyZ2I6WzI1NSwwLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMF19XSx3aW50ZXI6W3tpbmRleDowLHJnYjpbMCwwLDI1NV19LHtpbmRleDoxLHJnYjpbMCwyNTUsMTI4XX1dLGJvbmU6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjM3NixyZ2I6Wzg0LDg0LDExNl19LHtpbmRleDouNzUzLHJnYjpbMTY5LDIwMCwyMDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1XX1dLGNvcHBlcjpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouODA0LHJnYjpbMjU1LDE2MCwxMDJdfSx7aW5kZXg6MSxyZ2I6WzI1NSwxOTksMTI3XX1dLGdyZXlzOlt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NV19XSx5aWduYnU6W3tpbmRleDowLHJnYjpbOCwyOSw4OF19LHtpbmRleDouMTI1LHJnYjpbMzcsNTIsMTQ4XX0se2luZGV4Oi4yNSxyZ2I6WzM0LDk0LDE2OF19LHtpbmRleDouMzc1LHJnYjpbMjksMTQ1LDE5Ml19LHtpbmRleDouNSxyZ2I6WzY1LDE4MiwxOTZdfSx7aW5kZXg6LjYyNSxyZ2I6WzEyNywyMDUsMTg3XX0se2luZGV4Oi43NSxyZ2I6WzE5OSwyMzMsMTgwXX0se2luZGV4Oi44NzUscmdiOlsyMzcsMjQ4LDIxN119LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyMTddfV0sZ3JlZW5zOlt7aW5kZXg6MCxyZ2I6WzAsNjgsMjddfSx7aW5kZXg6LjEyNSxyZ2I6WzAsMTA5LDQ0XX0se2luZGV4Oi4yNSxyZ2I6WzM1LDEzOSw2OV19LHtpbmRleDouMzc1LHJnYjpbNjUsMTcxLDkzXX0se2luZGV4Oi41LHJnYjpbMTE2LDE5NiwxMThdfSx7aW5kZXg6LjYyNSxyZ2I6WzE2MSwyMTcsMTU1XX0se2luZGV4Oi43NSxyZ2I6WzE5OSwyMzMsMTkyXX0se2luZGV4Oi44NzUscmdiOlsyMjksMjQ1LDIyNF19LHtpbmRleDoxLHJnYjpbMjQ3LDI1MiwyNDVdfV0seWlvcnJkOlt7aW5kZXg6MCxyZ2I6WzEyOCwwLDM4XX0se2luZGV4Oi4xMjUscmdiOlsxODksMCwzOF19LHtpbmRleDouMjUscmdiOlsyMjcsMjYsMjhdfSx7aW5kZXg6LjM3NSxyZ2I6WzI1Miw3OCw0Ml19LHtpbmRleDouNSxyZ2I6WzI1MywxNDEsNjBdfSx7aW5kZXg6LjYyNSxyZ2I6WzI1NCwxNzgsNzZdfSx7aW5kZXg6Ljc1LHJnYjpbMjU0LDIxNywxMThdfSx7aW5kZXg6Ljg3NSxyZ2I6WzI1NSwyMzcsMTYwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDIwNF19XSxibHVlcmVkOlt7aW5kZXg6MCxyZ2I6WzAsMCwyNTVdfSx7aW5kZXg6MSxyZ2I6WzI1NSwwLDBdfV0scmRidTpbe2luZGV4OjAscmdiOls1LDEwLDE3Ml19LHtpbmRleDouMzUscmdiOlsxMDYsMTM3LDI0N119LHtpbmRleDouNSxyZ2I6WzE5MCwxOTAsMTkwXX0se2luZGV4Oi42LHJnYjpbMjIwLDE3MCwxMzJdfSx7aW5kZXg6LjcscmdiOlsyMzAsMTQ1LDkwXX0se2luZGV4OjEscmdiOlsxNzgsMTAsMjhdfV0scGljbmljOlt7aW5kZXg6MCxyZ2I6WzAsMCwyNTVdfSx7aW5kZXg6LjEscmdiOls1MSwxNTMsMjU1XX0se2luZGV4Oi4yLHJnYjpbMTAyLDIwNCwyNTVdfSx7aW5kZXg6LjMscmdiOlsxNTMsMjA0LDI1NV19LHtpbmRleDouNCxyZ2I6WzIwNCwyMDQsMjU1XX0se2luZGV4Oi41LHJnYjpbMjU1LDI1NSwyNTVdfSx7aW5kZXg6LjYscmdiOlsyNTUsMjA0LDI1NV19LHtpbmRleDouNyxyZ2I6WzI1NSwxNTMsMjU1XX0se2luZGV4Oi44LHJnYjpbMjU1LDEwMiwyMDRdfSx7aW5kZXg6LjkscmdiOlsyNTUsMTAyLDEwMl19LHtpbmRleDoxLHJnYjpbMjU1LDAsMF19XSxyYWluYm93Olt7aW5kZXg6MCxyZ2I6WzE1MCwwLDkwXX0se2luZGV4Oi4xMjUscmdiOlswLDAsMjAwXX0se2luZGV4Oi4yNSxyZ2I6WzAsMjUsMjU1XX0se2luZGV4Oi4zNzUscmdiOlswLDE1MiwyNTVdfSx7aW5kZXg6LjUscmdiOls0NCwyNTUsMTUwXX0se2luZGV4Oi42MjUscmdiOlsxNTEsMjU1LDBdfSx7aW5kZXg6Ljc1LHJnYjpbMjU1LDIzNCwwXX0se2luZGV4Oi44NzUscmdiOlsyNTUsMTExLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwwLDBdfV0scG9ydGxhbmQ6W3tpbmRleDowLHJnYjpbMTIsNTEsMTMxXX0se2luZGV4Oi4yNSxyZ2I6WzEwLDEzNiwxODZdfSx7aW5kZXg6LjUscmdiOlsyNDIsMjExLDU2XX0se2luZGV4Oi43NSxyZ2I6WzI0MiwxNDMsNTZdfSx7aW5kZXg6MSxyZ2I6WzIxNywzMCwzMF19XSxibGFja2JvZHk6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjIscmdiOlsyMzAsMCwwXX0se2luZGV4Oi40LHJnYjpbMjMwLDIxMCwwXX0se2luZGV4Oi43LHJnYjpbMjU1LDI1NSwyNTVdfSx7aW5kZXg6MSxyZ2I6WzE2MCwyMDAsMjU1XX1dLGVhcnRoOlt7aW5kZXg6MCxyZ2I6WzAsMCwxMzBdfSx7aW5kZXg6LjEscmdiOlswLDE4MCwxODBdfSx7aW5kZXg6LjIscmdiOls0MCwyMTAsNDBdfSx7aW5kZXg6LjQscmdiOlsyMzAsMjMwLDUwXX0se2luZGV4Oi42LHJnYjpbMTIwLDcwLDIwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NV19XSxlbGVjdHJpYzpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMTUscmdiOlszMCwwLDEwMF19LHtpbmRleDouNCxyZ2I6WzEyMCwwLDEwMF19LHtpbmRleDouNixyZ2I6WzE2MCw5MCwwXX0se2luZGV4Oi44LHJnYjpbMjMwLDIwMCwwXX0se2luZGV4OjEscmdiOlsyNTUsMjUwLDIyMF19XSxhbHBoYTpbe2luZGV4OjAscmdiOlsyNTUsMjU1LDI1NSwwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NSwxXX1dLHZpcmlkaXM6W3tpbmRleDowLHJnYjpbNjgsMSw4NF19LHtpbmRleDouMTMscmdiOls3MSw0NCwxMjJdfSx7aW5kZXg6LjI1LHJnYjpbNTksODEsMTM5XX0se2luZGV4Oi4zOCxyZ2I6WzQ0LDExMywxNDJdfSx7aW5kZXg6LjUscmdiOlszMywxNDQsMTQxXX0se2luZGV4Oi42MyxyZ2I6WzM5LDE3MywxMjldfSx7aW5kZXg6Ljc1LHJnYjpbOTIsMjAwLDk5XX0se2luZGV4Oi44OCxyZ2I6WzE3MCwyMjAsNTBdfSx7aW5kZXg6MSxyZ2I6WzI1MywyMzEsMzddfV0saW5mZXJubzpbe2luZGV4OjAscmdiOlswLDAsNF19LHtpbmRleDouMTMscmdiOlszMSwxMiw3Ml19LHtpbmRleDouMjUscmdiOls4NSwxNSwxMDldfSx7aW5kZXg6LjM4LHJnYjpbMTM2LDM0LDEwNl19LHtpbmRleDouNSxyZ2I6WzE4Niw1NCw4NV19LHtpbmRleDouNjMscmdiOlsyMjcsODksNTFdfSx7aW5kZXg6Ljc1LHJnYjpbMjQ5LDE0MCwxMF19LHtpbmRleDouODgscmdiOlsyNDksMjAxLDUwXX0se2luZGV4OjEscmdiOlsyNTIsMjU1LDE2NF19XSxtYWdtYTpbe2luZGV4OjAscmdiOlswLDAsNF19LHtpbmRleDouMTMscmdiOlsyOCwxNiw2OF19LHtpbmRleDouMjUscmdiOls3OSwxOCwxMjNdfSx7aW5kZXg6LjM4LHJnYjpbMTI5LDM3LDEyOV19LHtpbmRleDouNSxyZ2I6WzE4MSw1NCwxMjJdfSx7aW5kZXg6LjYzLHJnYjpbMjI5LDgwLDEwMF19LHtpbmRleDouNzUscmdiOlsyNTEsMTM1LDk3XX0se2luZGV4Oi44OCxyZ2I6WzI1NCwxOTQsMTM1XX0se2luZGV4OjEscmdiOlsyNTIsMjUzLDE5MV19XSxwbGFzbWE6W3tpbmRleDowLHJnYjpbMTMsOCwxMzVdfSx7aW5kZXg6LjEzLHJnYjpbNzUsMywxNjFdfSx7aW5kZXg6LjI1LHJnYjpbMTI1LDMsMTY4XX0se2luZGV4Oi4zOCxyZ2I6WzE2OCwzNCwxNTBdfSx7aW5kZXg6LjUscmdiOlsyMDMsNzAsMTIxXX0se2luZGV4Oi42MyxyZ2I6WzIyOSwxMDcsOTNdfSx7aW5kZXg6Ljc1LHJnYjpbMjQ4LDE0OCw2NV19LHtpbmRleDouODgscmdiOlsyNTMsMTk1LDQwXX0se2luZGV4OjEscmdiOlsyNDAsMjQ5LDMzXX1dLHdhcm06W3tpbmRleDowLHJnYjpbMTI1LDAsMTc5XX0se2luZGV4Oi4xMyxyZ2I6WzE3MiwwLDE4N119LHtpbmRleDouMjUscmdiOlsyMTksMCwxNzBdfSx7aW5kZXg6LjM4LHJnYjpbMjU1LDAsMTMwXX0se2luZGV4Oi41LHJnYjpbMjU1LDYzLDc0XX0se2luZGV4Oi42MyxyZ2I6WzI1NSwxMjMsMF19LHtpbmRleDouNzUscmdiOlsyMzQsMTc2LDBdfSx7aW5kZXg6Ljg4LHJnYjpbMTkwLDIyOCwwXX0se2luZGV4OjEscmdiOlsxNDcsMjU1LDBdfV0sY29vbDpbe2luZGV4OjAscmdiOlsxMjUsMCwxNzldfSx7aW5kZXg6LjEzLHJnYjpbMTE2LDAsMjE4XX0se2luZGV4Oi4yNSxyZ2I6Wzk4LDc0LDIzN119LHtpbmRleDouMzgscmdiOls2OCwxNDYsMjMxXX0se2luZGV4Oi41LHJnYjpbMCwyMDQsMTk3XX0se2luZGV4Oi42MyxyZ2I6WzAsMjQ3LDE0Nl19LHtpbmRleDouNzUscmdiOlswLDI1NSw4OF19LHtpbmRleDouODgscmdiOls0MCwyNTUsOF19LHtpbmRleDoxLHJnYjpbMTQ3LDI1NSwwXX1dLFwicmFpbmJvdy1zb2Z0XCI6W3tpbmRleDowLHJnYjpbMTI1LDAsMTc5XX0se2luZGV4Oi4xLHJnYjpbMTk5LDAsMTgwXX0se2luZGV4Oi4yLHJnYjpbMjU1LDAsMTIxXX0se2luZGV4Oi4zLHJnYjpbMjU1LDEwOCwwXX0se2luZGV4Oi40LHJnYjpbMjIyLDE5NCwwXX0se2luZGV4Oi41LHJnYjpbMTUwLDI1NSwwXX0se2luZGV4Oi42LHJnYjpbMCwyNTUsNTVdfSx7aW5kZXg6LjcscmdiOlswLDI0NiwxNTBdfSx7aW5kZXg6LjgscmdiOls1MCwxNjcsMjIyXX0se2luZGV4Oi45LHJnYjpbMTAzLDUxLDIzNV19LHtpbmRleDoxLHJnYjpbMTI0LDAsMTg2XX1dLGJhdGh5bWV0cnk6W3tpbmRleDowLHJnYjpbNDAsMjYsNDRdfSx7aW5kZXg6LjEzLHJnYjpbNTksNDksOTBdfSx7aW5kZXg6LjI1LHJnYjpbNjQsNzYsMTM5XX0se2luZGV4Oi4zOCxyZ2I6WzYzLDExMCwxNTFdfSx7aW5kZXg6LjUscmdiOls3MiwxNDIsMTU4XX0se2luZGV4Oi42MyxyZ2I6Wzg1LDE3NCwxNjNdfSx7aW5kZXg6Ljc1LHJnYjpbMTIwLDIwNiwxNjNdfSx7aW5kZXg6Ljg4LHJnYjpbMTg3LDIzMCwxNzJdfSx7aW5kZXg6MSxyZ2I6WzI1MywyNTQsMjA0XX1dLGNkb206W3tpbmRleDowLHJnYjpbNDcsMTUsNjJdfSx7aW5kZXg6LjEzLHJnYjpbODcsMjMsODZdfSx7aW5kZXg6LjI1LHJnYjpbMTMwLDI4LDk5XX0se2luZGV4Oi4zOCxyZ2I6WzE3MSw0MSw5Nl19LHtpbmRleDouNSxyZ2I6WzIwNiw2Nyw4Nl19LHtpbmRleDouNjMscmdiOlsyMzAsMTA2LDg0XX0se2luZGV4Oi43NSxyZ2I6WzI0MiwxNDksMTAzXX0se2luZGV4Oi44OCxyZ2I6WzI0OSwxOTMsMTM1XX0se2luZGV4OjEscmdiOlsyNTQsMjM3LDE3Nl19XSxjaGxvcm9waHlsbDpbe2luZGV4OjAscmdiOlsxOCwzNiwyMF19LHtpbmRleDouMTMscmdiOlsyNSw2Myw0MV19LHtpbmRleDouMjUscmdiOlsyNCw5MSw1OV19LHtpbmRleDouMzgscmdiOlsxMywxMTksNzJdfSx7aW5kZXg6LjUscmdiOlsxOCwxNDgsODBdfSx7aW5kZXg6LjYzLHJnYjpbODAsMTczLDg5XX0se2luZGV4Oi43NSxyZ2I6WzEzMiwxOTYsMTIyXX0se2luZGV4Oi44OCxyZ2I6WzE3NSwyMjEsMTYyXX0se2luZGV4OjEscmdiOlsyMTUsMjQ5LDIwOF19XSxkZW5zaXR5Olt7aW5kZXg6MCxyZ2I6WzU0LDE0LDM2XX0se2luZGV4Oi4xMyxyZ2I6Wzg5LDIzLDgwXX0se2luZGV4Oi4yNSxyZ2I6WzExMCw0NSwxMzJdfSx7aW5kZXg6LjM4LHJnYjpbMTIwLDc3LDE3OF19LHtpbmRleDouNSxyZ2I6WzEyMCwxMTMsMjEzXX0se2luZGV4Oi42MyxyZ2I6WzExNSwxNTEsMjI4XX0se2luZGV4Oi43NSxyZ2I6WzEzNCwxODUsMjI3XX0se2luZGV4Oi44OCxyZ2I6WzE3NywyMTQsMjI3XX0se2luZGV4OjEscmdiOlsyMzAsMjQxLDI0MV19XSxcImZyZWVzdXJmYWNlLWJsdWVcIjpbe2luZGV4OjAscmdiOlszMCw0LDExMF19LHtpbmRleDouMTMscmdiOls0NywxNCwxNzZdfSx7aW5kZXg6LjI1LHJnYjpbNDEsNDUsMjM2XX0se2luZGV4Oi4zOCxyZ2I6WzI1LDk5LDIxMl19LHtpbmRleDouNSxyZ2I6WzY4LDEzMSwyMDBdfSx7aW5kZXg6LjYzLHJnYjpbMTE0LDE1NiwxOTddfSx7aW5kZXg6Ljc1LHJnYjpbMTU3LDE4MSwyMDNdfSx7aW5kZXg6Ljg4LHJnYjpbMjAwLDIwOCwyMTZdfSx7aW5kZXg6MSxyZ2I6WzI0MSwyMzcsMjM2XX1dLFwiZnJlZXN1cmZhY2UtcmVkXCI6W3tpbmRleDowLHJnYjpbNjAsOSwxOF19LHtpbmRleDouMTMscmdiOlsxMDAsMTcsMjddfSx7aW5kZXg6LjI1LHJnYjpbMTQyLDIwLDI5XX0se2luZGV4Oi4zOCxyZ2I6WzE3Nyw0MywyN119LHtpbmRleDouNSxyZ2I6WzE5Miw4Nyw2M119LHtpbmRleDouNjMscmdiOlsyMDUsMTI1LDEwNV19LHtpbmRleDouNzUscmdiOlsyMTYsMTYyLDE0OF19LHtpbmRleDouODgscmdiOlsyMjcsMTk5LDE5M119LHtpbmRleDoxLHJnYjpbMjQxLDIzNywyMzZdfV0sb3h5Z2VuOlt7aW5kZXg6MCxyZ2I6WzY0LDUsNV19LHtpbmRleDouMTMscmdiOlsxMDYsNiwxNV19LHtpbmRleDouMjUscmdiOlsxNDQsMjYsN119LHtpbmRleDouMzgscmdiOlsxNjgsNjQsM119LHtpbmRleDouNSxyZ2I6WzE4OCwxMDAsNF19LHtpbmRleDouNjMscmdiOlsyMDYsMTM2LDExXX0se2luZGV4Oi43NSxyZ2I6WzIyMCwxNzQsMjVdfSx7aW5kZXg6Ljg4LHJnYjpbMjMxLDIxNSw0NF19LHtpbmRleDoxLHJnYjpbMjQ4LDI1NCwxMDVdfV0scGFyOlt7aW5kZXg6MCxyZ2I6WzUxLDIwLDI0XX0se2luZGV4Oi4xMyxyZ2I6WzkwLDMyLDM1XX0se2luZGV4Oi4yNSxyZ2I6WzEyOSw0NCwzNF19LHtpbmRleDouMzgscmdiOlsxNTksNjgsMjVdfSx7aW5kZXg6LjUscmdiOlsxODIsOTksMTldfSx7aW5kZXg6LjYzLHJnYjpbMTk5LDEzNCwyMl19LHtpbmRleDouNzUscmdiOlsyMTIsMTcxLDM1XX0se2luZGV4Oi44OCxyZ2I6WzIyMSwyMTAsNTRdfSx7aW5kZXg6MSxyZ2I6WzIyNSwyNTMsNzVdfV0scGhhc2U6W3tpbmRleDowLHJnYjpbMTQ1LDEwNSwxOF19LHtpbmRleDouMTMscmdiOlsxODQsNzEsMzhdfSx7aW5kZXg6LjI1LHJnYjpbMTg2LDU4LDExNV19LHtpbmRleDouMzgscmdiOlsxNjAsNzEsMTg1XX0se2luZGV4Oi41LHJnYjpbMTEwLDk3LDIxOF19LHtpbmRleDouNjMscmdiOls1MCwxMjMsMTY0XX0se2luZGV4Oi43NSxyZ2I6WzMxLDEzMSwxMTBdfSx7aW5kZXg6Ljg4LHJnYjpbNzcsMTI5LDM0XX0se2luZGV4OjEscmdiOlsxNDUsMTA1LDE4XX1dLHNhbGluaXR5Olt7aW5kZXg6MCxyZ2I6WzQyLDI0LDEwOF19LHtpbmRleDouMTMscmdiOlszMyw1MCwxNjJdfSx7aW5kZXg6LjI1LHJnYjpbMTUsOTAsMTQ1XX0se2luZGV4Oi4zOCxyZ2I6WzQwLDExOCwxMzddfSx7aW5kZXg6LjUscmdiOls1OSwxNDYsMTM1XX0se2luZGV4Oi42MyxyZ2I6Wzc5LDE3NSwxMjZdfSx7aW5kZXg6Ljc1LHJnYjpbMTIwLDIwMywxMDRdfSx7aW5kZXg6Ljg4LHJnYjpbMTkzLDIyMSwxMDBdfSx7aW5kZXg6MSxyZ2I6WzI1MywyMzksMTU0XX1dLHRlbXBlcmF0dXJlOlt7aW5kZXg6MCxyZ2I6WzQsMzUsNTFdfSx7aW5kZXg6LjEzLHJnYjpbMjMsNTEsMTIyXX0se2luZGV4Oi4yNSxyZ2I6Wzg1LDU5LDE1N119LHtpbmRleDouMzgscmdiOlsxMjksNzksMTQzXX0se2luZGV4Oi41LHJnYjpbMTc1LDk1LDEzMF19LHtpbmRleDouNjMscmdiOlsyMjIsMTEyLDEwMV19LHtpbmRleDouNzUscmdiOlsyNDksMTQ2LDY2XX0se2luZGV4Oi44OCxyZ2I6WzI0OSwxOTYsNjVdfSx7aW5kZXg6MSxyZ2I6WzIzMiwyNTAsOTFdfV0sdHVyYmlkaXR5Olt7aW5kZXg6MCxyZ2I6WzM0LDMxLDI3XX0se2luZGV4Oi4xMyxyZ2I6WzY1LDUwLDQxXX0se2luZGV4Oi4yNSxyZ2I6Wzk4LDY5LDUyXX0se2luZGV4Oi4zOCxyZ2I6WzEzMSw4OSw1N119LHtpbmRleDouNSxyZ2I6WzE2MSwxMTIsNTldfSx7aW5kZXg6LjYzLHJnYjpbMTg1LDE0MCw2Nl19LHtpbmRleDouNzUscmdiOlsyMDIsMTc0LDg4XX0se2luZGV4Oi44OCxyZ2I6WzIxNiwyMDksMTI2XX0se2luZGV4OjEscmdiOlsyMzMsMjQ2LDE3MV19XSxcInZlbG9jaXR5LWJsdWVcIjpbe2luZGV4OjAscmdiOlsxNywzMiw2NF19LHtpbmRleDouMTMscmdiOlszNSw1MiwxMTZdfSx7aW5kZXg6LjI1LHJnYjpbMjksODEsMTU2XX0se2luZGV4Oi4zOCxyZ2I6WzMxLDExMywxNjJdfSx7aW5kZXg6LjUscmdiOls1MCwxNDQsMTY5XX0se2luZGV4Oi42MyxyZ2I6Wzg3LDE3MywxNzZdfSx7aW5kZXg6Ljc1LHJnYjpbMTQ5LDE5NiwxODldfSx7aW5kZXg6Ljg4LHJnYjpbMjAzLDIyMSwyMTFdfSx7aW5kZXg6MSxyZ2I6WzI1NCwyNTEsMjMwXX1dLFwidmVsb2NpdHktZ3JlZW5cIjpbe2luZGV4OjAscmdiOlsyMywzNSwxOV19LHtpbmRleDouMTMscmdiOlsyNCw2NCwzOF19LHtpbmRleDouMjUscmdiOlsxMSw5NSw0NV19LHtpbmRleDouMzgscmdiOlszOSwxMjMsMzVdfSx7aW5kZXg6LjUscmdiOls5NSwxNDYsMTJdfSx7aW5kZXg6LjYzLHJnYjpbMTUyLDE2NSwxOF19LHtpbmRleDouNzUscmdiOlsyMDEsMTg2LDY5XX0se2luZGV4Oi44OCxyZ2I6WzIzMywyMTYsMTM3XX0se2luZGV4OjEscmdiOlsyNTUsMjUzLDIwNV19XSxjdWJlaGVsaXg6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjA3LHJnYjpbMjIsNSw1OV19LHtpbmRleDouMTMscmdiOls2MCw0LDEwNV19LHtpbmRleDouMixyZ2I6WzEwOSwxLDEzNV19LHtpbmRleDouMjcscmdiOlsxNjEsMCwxNDddfSx7aW5kZXg6LjMzLHJnYjpbMjEwLDIsMTQyXX0se2luZGV4Oi40LHJnYjpbMjUxLDExLDEyM119LHtpbmRleDouNDcscmdiOlsyNTUsMjksOTddfSx7aW5kZXg6LjUzLHJnYjpbMjU1LDU0LDY5XX0se2luZGV4Oi42LHJnYjpbMjU1LDg1LDQ2XX0se2luZGV4Oi42NyxyZ2I6WzI1NSwxMjAsMzRdfSx7aW5kZXg6LjczLHJnYjpbMjU1LDE1NywzN119LHtpbmRleDouOCxyZ2I6WzI0MSwxOTEsNTddfSx7aW5kZXg6Ljg3LHJnYjpbMjI0LDIyMCw5M119LHtpbmRleDouOTMscmdiOlsyMTgsMjQxLDE0Ml19LHtpbmRleDoxLHJnYjpbMjI3LDI1MywxOThdfV19fSx7fV0sMTE3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vY29sb3JTY2FsZVwiKSxpPXQoXCJsZXJwXCIpO2Z1bmN0aW9uIGEodCl7cmV0dXJuW3RbMF0vMjU1LHRbMV0vMjU1LHRbMl0vMjU1LHRbM11dfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlLHI9XCIjXCIsbj0wO248MzsrK24pcis9KFwiMDBcIisoZT0oZT10W25dKS50b1N0cmluZygxNikpKS5zdWJzdHIoZS5sZW5ndGgpO3JldHVybiByfWZ1bmN0aW9uIHModCl7cmV0dXJuXCJyZ2JhKFwiK3Quam9pbihcIixcIikrXCIpXCJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbCxjLHUsaCxmLHAsZCxnO3R8fCh0PXt9KTtwPSh0Lm5zaGFkZXN8fDcyKS0xLGY9dC5mb3JtYXR8fFwiaGV4XCIsKGg9dC5jb2xvcm1hcCl8fChoPVwiamV0XCIpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBoKXtpZihoPWgudG9Mb3dlckNhc2UoKSwhbltoXSl0aHJvdyBFcnJvcihoK1wiIG5vdCBhIHN1cHBvcnRlZCBjb2xvcnNjYWxlXCIpO3U9bltoXX1lbHNle2lmKCFBcnJheS5pc0FycmF5KGgpKXRocm93IEVycm9yKFwidW5zdXBwb3J0ZWQgY29sb3JtYXAgb3B0aW9uXCIsaCk7dT1oLnNsaWNlKCl9aWYodS5sZW5ndGg+cCsxKXRocm93IG5ldyBFcnJvcihoK1wiIG1hcCByZXF1aXJlcyBuc2hhZGVzIHRvIGJlIGF0IGxlYXN0IHNpemUgXCIrdS5sZW5ndGgpO2Q9QXJyYXkuaXNBcnJheSh0LmFscGhhKT8yIT09dC5hbHBoYS5sZW5ndGg/WzEsMV06dC5hbHBoYS5zbGljZSgpOlwibnVtYmVyXCI9PXR5cGVvZiB0LmFscGhhP1t0LmFscGhhLHQuYWxwaGFdOlsxLDFdO2U9dS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodC5pbmRleCpwKX0pLGRbMF09TWF0aC5taW4oTWF0aC5tYXgoZFswXSwwKSwxKSxkWzFdPU1hdGgubWluKE1hdGgubWF4KGRbMV0sMCksMSk7dmFyIHY9dS5tYXAoZnVuY3Rpb24odCxlKXt2YXIgcj11W2VdLmluZGV4LG49dVtlXS5yZ2Iuc2xpY2UoKTtyZXR1cm4gND09PW4ubGVuZ3RoJiZuWzNdPj0wJiZuWzNdPD0xP246KG5bM109ZFswXSsoZFsxXS1kWzBdKSpyLG4pfSksbT1bXTtmb3IoZz0wO2c8ZS5sZW5ndGgtMTsrK2cpe2M9ZVtnKzFdLWVbZ10scj12W2ddLGw9dltnKzFdO2Zvcih2YXIgeT0wO3k8Yzt5Kyspe3ZhciB4PXkvYzttLnB1c2goW01hdGgucm91bmQoaShyWzBdLGxbMF0seCkpLE1hdGgucm91bmQoaShyWzFdLGxbMV0seCkpLE1hdGgucm91bmQoaShyWzJdLGxbMl0seCkpLGkoclszXSxsWzNdLHgpXSl9fW0ucHVzaCh1W3UubGVuZ3RoLTFdLnJnYi5jb25jYXQoZFsxXSkpLFwiaGV4XCI9PT1mP209bS5tYXAobyk6XCJyZ2JhU3RyaW5nXCI9PT1mP209bS5tYXAocyk6XCJmbG9hdFwiPT09ZiYmKG09bS5tYXAoYSkpO3JldHVybiBtfX0se1wiLi9jb2xvclNjYWxlXCI6MTE2LGxlcnA6NDE4fV0sMTE4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4oZSxyLGEpO2lmKDA9PT1vKXt2YXIgcz1pKG4odCxlLHIpKSxjPWkobih0LGUsYSkpO2lmKHM9PT1jKXtpZigwPT09cyl7dmFyIHU9bCh0LGUsciksaD1sKHQsZSxhKTtyZXR1cm4gdT09PWg/MDp1PzE6LTF9cmV0dXJuIDB9cmV0dXJuIDA9PT1jP3M+MD8tMTpsKHQsZSxhKT8tMToxOjA9PT1zP2M+MD8xOmwodCxlLHIpPzE6LTE6aShjLXMpfXZhciBmPW4odCxlLHIpO2lmKGY+MClyZXR1cm4gbz4wJiZuKHQsZSxhKT4wPzE6LTE7aWYoZjwwKXJldHVybiBvPjB8fG4odCxlLGEpPjA/MTotMTt2YXIgcD1uKHQsZSxhKTtyZXR1cm4gcD4wPzE6bCh0LGUscik/MTotMX07dmFyIG49dChcInJvYnVzdC1vcmllbnRhdGlvblwiKSxpPXQoXCJzaWdudW1cIiksYT10KFwidHdvLXN1bVwiKSxvPXQoXCJyb2J1c3QtcHJvZHVjdFwiKSxzPXQoXCJyb2J1c3Qtc3VtXCIpO2Z1bmN0aW9uIGwodCxlLHIpe3ZhciBuPWEodFswXSwtZVswXSksaT1hKHRbMV0sLWVbMV0pLGw9YShyWzBdLC1lWzBdKSxjPWEoclsxXSwtZVsxXSksdT1zKG8obixsKSxvKGksYykpO3JldHVybiB1W3UubGVuZ3RoLTFdPj0wfX0se1wicm9idXN0LW9yaWVudGF0aW9uXCI6NDk1LFwicm9idXN0LXByb2R1Y3RcIjo0OTYsXCJyb2J1c3Qtc3VtXCI6NTAwLHNpZ251bTo1MDEsXCJ0d28tc3VtXCI6NTI5fV0sMTE5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGgsYT10Lmxlbmd0aC1lLmxlbmd0aDtpZihhKXJldHVybiBhO3N3aXRjaChyKXtjYXNlIDA6cmV0dXJuIDA7Y2FzZSAxOnJldHVybiB0WzBdLWVbMF07Y2FzZSAyOnJldHVybiB0WzBdK3RbMV0tZVswXS1lWzFdfHxuKHRbMF0sdFsxXSktbihlWzBdLGVbMV0pO2Nhc2UgMzp2YXIgbz10WzBdK3RbMV0scz1lWzBdK2VbMV07aWYoYT1vK3RbMl0tKHMrZVsyXSkpcmV0dXJuIGE7dmFyIGw9bih0WzBdLHRbMV0pLGM9bihlWzBdLGVbMV0pO3JldHVybiBuKGwsdFsyXSktbihjLGVbMl0pfHxuKGwrdFsyXSxvKS1uKGMrZVsyXSxzKTtjYXNlIDQ6dmFyIHU9dFswXSxoPXRbMV0sZj10WzJdLHA9dFszXSxkPWVbMF0sZz1lWzFdLHY9ZVsyXSxtPWVbM107cmV0dXJuIHUraCtmK3AtKGQrZyt2K20pfHxuKHUsaCxmLHApLW4oZCxnLHYsbSxkKXx8bih1K2gsdStmLHUrcCxoK2YsaCtwLGYrcCktbihkK2csZCt2LGQrbSxnK3YsZyttLHYrbSl8fG4odStoK2YsdStoK3AsdStmK3AsaCtmK3ApLW4oZCtnK3YsZCtnK20sZCt2K20sZyt2K20pO2RlZmF1bHQ6Zm9yKHZhciB5PXQuc2xpY2UoKS5zb3J0KGkpLHg9ZS5zbGljZSgpLnNvcnQoaSksYj0wO2I8cjsrK2IpaWYoYT15W2JdLXhbYl0pcmV0dXJuIGE7cmV0dXJuIDB9fTt2YXIgbj1NYXRoLm1pbjtmdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQtZX19LHt9XSwxMjA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiY29tcGFyZS1jZWxsXCIpLGk9dChcImNlbGwtb3JpZW50YXRpb25cIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxlKXx8aSh0KS1pKGUpfX0se1wiY2VsbC1vcmllbnRhdGlvblwiOjEwMyxcImNvbXBhcmUtY2VsbFwiOjExOX1dLDEyMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2xpYi9jaDFkXCIpLGk9dChcIi4vbGliL2NoMmRcIiksYT10KFwiLi9saWIvY2huZFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoMD09PWUpcmV0dXJuW107aWYoMT09PWUpcmV0dXJuW1swXV07dmFyIHI9dFswXS5sZW5ndGg7aWYoMD09PXIpcmV0dXJuW107aWYoMT09PXIpcmV0dXJuIG4odCk7aWYoMj09PXIpcmV0dXJuIGkodCk7cmV0dXJuIGEodCxyKX19LHtcIi4vbGliL2NoMWRcIjoxMjIsXCIuL2xpYi9jaDJkXCI6MTIzLFwiLi9saWIvY2huZFwiOjEyNH1dLDEyMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTAsbj0xO248dC5sZW5ndGg7KytuKXRbbl1bMF08dFtlXVswXSYmKGU9biksdFtuXVswXT50W3JdWzBdJiYocj1uKTtyZXR1cm4gZTxyP1tbZV0sW3JdXTplPnI/W1tyXSxbZV1dOltbZV1dfX0se31dLDEyMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uKHQpLHI9ZS5sZW5ndGg7aWYocjw9MilyZXR1cm5bXTtmb3IodmFyIGk9bmV3IEFycmF5KHIpLGE9ZVtyLTFdLG89MDtvPHI7KytvKXt2YXIgcz1lW29dO2lbb109W2Esc10sYT1zfXJldHVybiBpfTt2YXIgbj10KFwibW9ub3RvbmUtY29udmV4LWh1bGwtMmRcIil9LHtcIm1vbm90b25lLWNvbnZleC1odWxsLTJkXCI6NDI3fV0sMTI0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dHJ5e3JldHVybiBuKHQsITApfWNhdGNoKHMpe3ZhciByPWkodCk7aWYoci5sZW5ndGg8PWUpcmV0dXJuW107dmFyIGE9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8ZS5sZW5ndGg7KytpKW5baV09dFtlW2ldXTtmb3IodmFyIGE9ZS5sZW5ndGgsaT0wO2k8cjsrK2kpZS5pbmRleE9mKGkpPDAmJihuW2ErK109dFtpXSk7cmV0dXJuIG59KHQsciksbz1uKGEsITApO3JldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPWUubGVuZ3RoLGk9MDtpPHI7KytpKWZvcih2YXIgYT10W2ldLG89MDtvPGEubGVuZ3RoOysrbyl7dmFyIHM9YVtvXTtpZihzPG4pYVtvXT1lW3NdO2Vsc2V7cy09bjtmb3IodmFyIGw9MDtsPG47KytsKXM+PWVbbF0mJihzKz0xKTthW29dPXN9fXJldHVybiB0fShvLHIpfX07dmFyIG49dChcImluY3JlbWVudGFsLWNvbnZleC1odWxsXCIpLGk9dChcImFmZmluZS1odWxsXCIpfSx7XCJhZmZpbmUtaHVsbFwiOjUzLFwiaW5jcmVtZW50YWwtY29udmV4LWh1bGxcIjo0MDZ9XSwxMjU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e0FGRzpcImFmZ2hhblwiLEFMQTpcIlxcXFxiXFxcXHdsYW5kXCIsQUxCOlwiYWxiYW5pYVwiLERaQTpcImFsZ2VyaWFcIixBU006XCJeKD89LiphbWVyaWMpLipzYW1vYVwiLEFORDpcImFuZG9ycmFcIixBR086XCJhbmdvbGFcIixBSUE6XCJhbmd1aWxsP2FcIixBVEE6XCJhbnRhcmN0aWNhXCIsQVRHOlwiYW50aWd1YVwiLEFSRzpcImFyZ2VudGluXCIsQVJNOlwiYXJtZW5pYVwiLEFCVzpcIl4oPyEuKmJvbmFpcmUpLipcXFxcYmFydWJhXCIsQVVTOlwiYXVzdHJhbGlhXCIsQVVUOlwiXig/IS4qaHVuZ2FyeSkuKmF1c3RyaWF8XFxcXGJhdXN0cmkuKlxcXFxiZW1wXCIsQVpFOlwiYXplcmJhaWphblwiLEJIUzpcImJhaGFtYXNcIixCSFI6XCJiYWhyYWluXCIsQkdEOlwiYmFuZ2xhZGVzaHxeKD89LiplYXN0KS4qcGFraT9zdGFuXCIsQlJCOlwiYmFyYmFkb3NcIixCTFI6XCJiZWxhcnVzfGJ5ZWxvXCIsQkVMOlwiXig/IS4qbHV4ZW0pLipiZWxnaXVtXCIsQkxaOlwiYmVsaXplfF4oPz0uKmJyaXRpc2gpLipob25kdXJhc1wiLEJFTjpcImJlbmlufGRhaG9tZVwiLEJNVTpcImJlcm11ZGFcIixCVE46XCJiaHV0YW5cIixCT0w6XCJib2xpdmlhXCIsQkVTOlwiXig/PS4qYm9uYWlyZSkuKmV1c3RhdGl1c3xeKD89LipjYXJpYikuKm5ldGhlcmxhbmRzfFxcXFxiYmVzLj9pc2xhbmRzXCIsQklIOlwiaGVyemVnb3ZpbmF8Ym9zbmlhXCIsQldBOlwiYm90c3dhbmF8YmVjaHVhbmFcIixCVlQ6XCJib3V2ZXRcIixCUkE6XCJicmF6aWxcIixJT1Q6XCJicml0aXNoLj9pbmRpYW4uP29jZWFuXCIsQlJOOlwiYnJ1bmVpXCIsQkdSOlwiYnVsZ2FyaWFcIixCRkE6XCJidXJraW5hfFxcXFxiZmFzb3x1cHBlci4/dm9sdGFcIixCREk6XCJidXJ1bmRpXCIsQ1BWOlwidmVyZGVcIixLSE06XCJjYW1ib2RpYXxrYW1wdWNoZWF8a2htZXJcIixDTVI6XCJjYW1lcm9vblwiLENBTjpcImNhbmFkYVwiLENZTTpcImNheW1hblwiLENBRjpcIlxcXFxiY2VudHJhbC5hZnJpY2FuLnJlcHVibGljXCIsVENEOlwiXFxcXGJjaGFkXCIsQ0hMOlwiXFxcXGJjaGlsZVwiLENITjpcIl4oPyEuKlxcXFxibWFjKSg/IS4qXFxcXGJob25nKSg/IS4qXFxcXGJ0YWkpKD8hLipcXFxcYnJlcCkuKmNoaW5hfF4oPz0uKnBlbykoPz0uKnJlcCkuKmNoaW5hXCIsQ1hSOlwiY2hyaXN0bWFzXCIsQ0NLOlwiXFxcXGJjb2Nvc3xrZWVsaW5nXCIsQ09MOlwiY29sb21iaWFcIixDT006XCJjb21vcm9cIixDT0c6XCJeKD8hLipcXFxcYmRlbSkoPyEuKlxcXFxiZFtcXFxcLl0/cikoPyEuKmtpbnNoYXNhKSg/IS4qemFpcmUpKD8hLipiZWxnKSg/IS4qbC5vcG9sZHZpbGxlKSg/IS4qZnJlZSkuKlxcXFxiY29uZ29cIixDT0s6XCJcXFxcYmNvb2tcIixDUkk6XCJjb3N0YS4/cmljYVwiLENJVjpcIml2b2lyZXxpdm9yeVwiLEhSVjpcImNyb2F0aWFcIixDVUI6XCJcXFxcYmN1YmFcIixDVVc6XCJeKD8hLipib25haXJlKS4qXFxcXGJjdXJhKGN8XFx4ZTcpYW9cIixDWVA6XCJjeXBydXNcIixDU0s6XCJjemVjaG9zbG92YWtpYVwiLENaRTpcIl4oPz0uKnJlcCkuKmN6ZWNofGN6ZWNoaWF8Ym9oZW1pYVwiLENPRDpcIlxcXFxiZGVtLipjb25nb3xjb25nby4qXFxcXGJkZW18Y29uZ28uKlxcXFxiZFtcXFxcLl0/cnxcXFxcYmRbXFxcXC5dP3IuKmNvbmdvfGJlbGdpYW4uP2NvbmdvfGNvbmdvLj9mcmVlLj9zdGF0ZXxraW5zaGFzYXx6YWlyZXxsLm9wb2xkdmlsbGV8ZHJjfGRyb2N8cmRjXCIsRE5LOlwiZGVubWFya1wiLERKSTpcImRqaWJvdXRpXCIsRE1BOlwiZG9taW5pY2EoPyFuKVwiLERPTTpcImRvbWluaWNhbi5yZXBcIixFQ1U6XCJlY3VhZG9yXCIsRUdZOlwiZWd5cHRcIixTTFY6XCJlbC4/c2FsdmFkb3JcIixHTlE6XCJndWluZS4qZXF8ZXEuKmd1aW5lfF4oPz0uKnNwYW4pLipndWluZWFcIixFUkk6XCJlcml0cmVhXCIsRVNUOlwiZXN0b25pYVwiLEVUSDpcImV0aGlvcGlhfGFieXNzaW5pYVwiLEZMSzpcImZhbGtsYW5kfG1hbHZpbmFzXCIsRlJPOlwiZmFyb2V8ZmFlcm9lXCIsRkpJOlwiZmlqaVwiLEZJTjpcImZpbmxhbmRcIixGUkE6XCJeKD8hLipcXFxcYmRlcCkoPyEuKm1hcnRpbmlxdWUpLipmcmFuY2V8ZnJlbmNoLj9yZXB1YmxpY3xcXFxcYmdhdWxcIixHVUY6XCJeKD89LipmcmVuY2gpLipndWlhbmFcIixQWUY6XCJmcmVuY2guP3BvbHluZXNpYXx0YWhpdGlcIixBVEY6XCJmcmVuY2guP3NvdXRoZXJuXCIsR0FCOlwiZ2Fib25cIixHTUI6XCJnYW1iaWFcIixHRU86XCJeKD8hLipzb3V0aCkuKmdlb3JnaWFcIixERFI6XCJnZXJtYW4uP2RlbW9jcmF0aWMuP3JlcHVibGljfGRlbW9jcmF0aWMuP3JlcHVibGljLipnZXJtYW55fGVhc3QuZ2VybWFueVwiLERFVTpcIl4oPyEuKmVhc3QpLipnZXJtYW55fF4oPz0uKlxcXFxiZmVkLipcXFxcYnJlcCkuKmdlcm1hblwiLEdIQTpcImdoYW5hfGdvbGQuP2NvYXN0XCIsR0lCOlwiZ2licmFsdGFyXCIsR1JDOlwiZ3JlZWNlfGhlbGxlbmljfGhlbGxhc1wiLEdSTDpcImdyZWVubGFuZFwiLEdSRDpcImdyZW5hZGFcIixHTFA6XCJndWFkZWxvdXBlXCIsR1VNOlwiXFxcXGJndWFtXCIsR1RNOlwiZ3VhdGVtYWxhXCIsR0dZOlwiZ3Vlcm5zZXlcIixHSU46XCJeKD8hLiplcSkoPyEuKnNwYW4pKD8hLipiaXNzYXUpKD8hLipwb3J0dSkoPyEuKm5ldykuKmd1aW5lYVwiLEdOQjpcImJpc3NhdXxeKD89Lipwb3J0dSkuKmd1aW5lYVwiLEdVWTpcImd1eWFuYXxicml0aXNoLj9ndWlhbmFcIixIVEk6XCJoYWl0aVwiLEhNRDpcImhlYXJkLiptY2RvbmFsZFwiLFZBVDpcImhvbHkuP3NlZXx2YXRpY2FufHBhcGFsLj9zdFwiLEhORDpcIl4oPyEuKmJyaXQpLipob25kdXJhc1wiLEhLRzpcImhvbmcuP2tvbmdcIixIVU46XCJeKD8hLiphdXN0cikuKmh1bmdhcnlcIixJU0w6XCJpY2VsYW5kXCIsSU5EOlwiaW5kaWEoPyEuKm9jZWEpXCIsSUROOlwiaW5kb25lc2lhXCIsSVJOOlwiXFxcXGJpcmFufHBlcnNpYVwiLElSUTpcIlxcXFxiaXJhcXxtZXNvcG90YW1pYVwiLElSTDpcIiheaXJlbGFuZCl8KF5yZXB1YmxpYy4qaXJlbGFuZClcIixJTU46XCJeKD89Lippc2xlKS4qXFxcXGJtYW5cIixJU1I6XCJpc3JhZWxcIixJVEE6XCJpdGFseVwiLEpBTTpcImphbWFpY2FcIixKUE46XCJqYXBhblwiLEpFWTpcImplcnNleVwiLEpPUjpcImpvcmRhblwiLEtBWjpcImthemFrXCIsS0VOOlwia2VueWF8YnJpdGlzaC4/ZWFzdC4/YWZyaWNhfGVhc3QuP2FmcmljYS4/cHJvdFwiLEtJUjpcImtpcmliYXRpXCIsUFJLOlwiXig/PS4qZGVtb2NyYXR8cGVvcGxlfG5vcnRofGQuKnAuKi5yKS4qXFxcXGJrb3JlYXxkcHJrfGtvcmVhLiooZC4qcC4qcilcIixLV1Q6XCJrdXdhaXRcIixLR1o6XCJreXJneXp8a2lyZ2hpelwiLExBTzpcIlxcXFxibGFvcz9cXFxcYlwiLExWQTpcImxhdHZpYVwiLExCTjpcImxlYmFub25cIixMU086XCJsZXNvdGhvfGJhc3V0b1wiLExCUjpcImxpYmVyaWFcIixMQlk6XCJsaWJ5YVwiLExJRTpcImxpZWNodGVuc3RlaW5cIixMVFU6XCJsaXRodWFuaWFcIixMVVg6XCJeKD8hLipiZWxnKS4qbHV4ZW1cIixNQUM6XCJtYWNhKG98dSlcIixNREc6XCJtYWRhZ2FzY2FyfG1hbGFnYXN5XCIsTVdJOlwibWFsYXdpfG55YXNhXCIsTVlTOlwibWFsYXlzaWFcIixNRFY6XCJtYWxkaXZlXCIsTUxJOlwiXFxcXGJtYWxpXFxcXGJcIixNTFQ6XCJcXFxcYm1hbHRhXCIsTUhMOlwibWFyc2hhbGxcIixNVFE6XCJtYXJ0aW5pcXVlXCIsTVJUOlwibWF1cml0YW5pYVwiLE1VUzpcIm1hdXJpdGl1c1wiLE1ZVDpcIlxcXFxibWF5b3R0ZVwiLE1FWDpcIlxcXFxibWV4aWNcIixGU006XCJmZWQuKm1pY3JvbmVzaWF8bWljcm9uZXNpYS4qZmVkXCIsTUNPOlwibW9uYWNvXCIsTU5HOlwibW9uZ29saWFcIixNTkU6XCJeKD8hLipzZXJiaWEpLiptb250ZW5lZ3JvXCIsTVNSOlwibW9udHNlcnJhdFwiLE1BUjpcIm1vcm9jY298XFxcXGJtYXJvY1wiLE1PWjpcIm1vemFtYmlxdWVcIixNTVI6XCJteWFubWFyfGJ1cm1hXCIsTkFNOlwibmFtaWJpYVwiLE5SVTpcIm5hdXJ1XCIsTlBMOlwibmVwYWxcIixOTEQ6XCJeKD8hLipcXFxcYmFudCkoPyEuKlxcXFxiY2FyaWIpLipuZXRoZXJsYW5kc1wiLEFOVDpcIl4oPz0uKlxcXFxiYW50KS4qKG5ldGhlcnxkdXRjaClcIixOQ0w6XCJuZXcuP2NhbGVkb25pYVwiLE5aTDpcIm5ldy4/emVhbGFuZFwiLE5JQzpcIm5pY2FyYWd1YVwiLE5FUjpcIlxcXFxibmlnZXIoPyFpYSlcIixOR0E6XCJuaWdlcmlhXCIsTklVOlwibml1ZVwiLE5GSzpcIm5vcmZvbGtcIixNTlA6XCJtYXJpYW5hXCIsTk9SOlwibm9yd2F5XCIsT01OOlwiXFxcXGJvbWFufHRydWNpYWxcIixQQUs6XCJeKD8hLiplYXN0KS4qcGFraT9zdGFuXCIsUExXOlwicGFsYXVcIixQU0U6XCJwYWxlc3RpbnxcXFxcYmdhemF8d2VzdC4/YmFua1wiLFBBTjpcInBhbmFtYVwiLFBORzpcInBhcHVhfG5ldy4/Z3VpbmVhXCIsUFJZOlwicGFyYWd1YXlcIixQRVI6XCJwZXJ1XCIsUEhMOlwicGhpbGlwcGluZXNcIixQQ046XCJwaXRjYWlyblwiLFBPTDpcInBvbGFuZFwiLFBSVDpcInBvcnR1Z2FsXCIsUFJJOlwicHVlcnRvLj9yaWNvXCIsUUFUOlwicWF0YXJcIixLT1I6XCJeKD8hLipkLipwLipyKSg/IS4qZGVtb2NyYXQpKD8hLipwZW9wbGUpKD8hLipub3J0aCkuKlxcXFxia29yZWEoPyEuKmQuKnAuKnIpXCIsTURBOlwibW9sZG92fGIoYXxlKXNzYXJhYmlhXCIsUkVVOlwicihlfFxceGU5KXVuaW9uXCIsUk9VOlwicihvfHV8b3UpbWFuaWFcIixSVVM6XCJcXFxcYnJ1c3NpYXxzb3ZpZXQuP3VuaW9ufHVcXFxcLj9zXFxcXC4/c1xcXFwuP3J8c29jaWFsaXN0Lj9yZXB1YmxpY3NcIixSV0E6XCJyd2FuZGFcIixCTE06XCJiYXJ0aChlfFxceGU5KWxlbXlcIixTSE46XCJoZWxlbmFcIixLTkE6XCJraXR0c3xcXFxcYm5ldmlzXCIsTENBOlwiXFxcXGJsdWNpYVwiLE1BRjpcIl4oPz0uKmNvbGxlY3Rpdml0eSkuKm1hcnRpbnxeKD89LipmcmFuY2UpLiptYXJ0aW4oPyFpcXVlKXxeKD89LipmcmVuY2gpLiptYXJ0aW4oPyFpcXVlKVwiLFNQTTpcIm1pcXVlbG9uXCIsVkNUOlwidmluY2VudFwiLFdTTTpcIl4oPyEuKmFtZXIpLipzYW1vYVwiLFNNUjpcInNhbi4/bWFyaW5vXCIsU1RQOlwiXFxcXGJzKGF8XFx4ZTMpby4/dG9tKGV8XFx4ZTkpXCIsU0FVOlwiXFxcXGJzYVxcXFx3Ki4/YXJhYmlhXCIsU0VOOlwic2VuZWdhbFwiLFNSQjpcIl4oPyEuKm1vbnRlKS4qc2VyYmlhXCIsU1lDOlwic2V5Y2hlbGxcIixTTEU6XCJzaWVycmFcIixTR1A6XCJzaW5nYXBvcmVcIixTWE06XCJeKD8hLiptYXJ0aW4pKD8hLipzYWJhKS4qbWFhcnRlblwiLFNWSzpcIl4oPyEuKmN6ZSkuKnNsb3Zha1wiLFNWTjpcInNsb3ZlbmlhXCIsU0xCOlwic29sb21vblwiLFNPTTpcInNvbWFsaVwiLFpBRjpcInNvdXRoLmFmcmljYXxzXFxcXFxcXFwuLj9hZnJpY2FcIixTR1M6XCJzb3V0aC4/Z2VvcmdpYXxzYW5kd2ljaFwiLFNTRDpcIlxcXFxic1xcXFx3Ki4/c3VkYW5cIixFU1A6XCJzcGFpblwiLExLQTpcInNyaS4/bGFua2F8Y2V5bG9uXCIsU0ROOlwiXig/IS4qXFxcXGJzKD8hdSkpLipzdWRhblwiLFNVUjpcInN1cmluYW18ZHV0Y2guP2d1aWFuYVwiLFNKTTpcInN2YWxiYXJkXCIsU1daOlwic3dhemlsYW5kXCIsU1dFOlwic3dlZGVuXCIsQ0hFOlwic3dpdHp8c3dpc3NcIixTWVI6XCJzeXJpYVwiLFRXTjpcInRhaXdhbnx0YWlwZWl8Zm9ybW9zYXxeKD8hLipwZW8pKD89LipyZXApLipjaGluYVwiLFRKSzpcInRhamlrXCIsVEhBOlwidGhhaWxhbmR8XFxcXGJzaWFtXCIsTUtEOlwibWFjZWRvbmlhfGZ5cm9tXCIsVExTOlwiXig/PS4qbGVzdGUpLip0aW1vcnxeKD89LiplYXN0KS4qdGltb3JcIixUR086XCJ0b2dvXCIsVEtMOlwidG9rZWxhdVwiLFRPTjpcInRvbmdhXCIsVFRPOlwidHJpbmlkYWR8dG9iYWdvXCIsVFVOOlwidHVuaXNpYVwiLFRVUjpcInR1cmtleVwiLFRLTTpcInR1cmttZW5cIixUQ0E6XCJ0dXJrc1wiLFRVVjpcInR1dmFsdVwiLFVHQTpcInVnYW5kYVwiLFVLUjpcInVrcmFpblwiLEFSRTpcImVtaXJhdGVzfF51XFxcXC4/YVxcXFwuP2VcXFxcLj8kfHVuaXRlZC4/YXJhYi4/ZW1cIixHQlI6XCJ1bml0ZWQuP2tpbmdkb218YnJpdGFpbnxedVxcXFwuP2tcXFxcLj8kXCIsVFpBOlwidGFuemFuaWFcIixVU0E6XCJ1bml0ZWQuP3N0YXRlc1xcXFxiKD8hLippc2xhbmRzKXxcXFxcYnVcXFxcLj9zXFxcXC4/YVxcXFwuP1xcXFxifF5cXFxccyp1XFxcXC4/c1xcXFwuP1xcXFxiKD8hLippc2xhbmRzKVwiLFVNSTpcIm1pbm9yLj9vdXRseWluZy4/aXNcIixVUlk6XCJ1cnVndWF5XCIsVVpCOlwidXpiZWtcIixWVVQ6XCJ2YW51YXR1fG5ldy4/aGVicmlkZXNcIixWRU46XCJ2ZW5lenVlbGFcIixWTk06XCJeKD8hLipyZXB1YmxpYykuKnZpZXQuP25hbXxeKD89Lipzb2NpYWxpc3QpLip2aWV0Lj9uYW1cIixWR0I6XCJeKD89LipcXFxcYnVcXFxcLj9cXFxccz9rKS4qdmlyZ2lufF4oPz0uKmJyaXQpLip2aXJnaW58Xig/PS4qa2luZ2RvbSkuKnZpcmdpblwiLFZJUjpcIl4oPz0uKlxcXFxidVxcXFwuP1xcXFxzP3MpLip2aXJnaW58Xig/PS4qc3RhdGVzKS4qdmlyZ2luXCIsV0xGOlwiZnV0dW5hfHdhbGxpc1wiLEVTSDpcIndlc3Rlcm4uc2FoYXJhXCIsWUVNOlwiXig/IS4qYXJhYikoPyEuKm5vcnRoKSg/IS4qc2FuYSkoPyEuKnBlbykoPyEuKmRlbSkoPyEuKnNvdXRoKSg/IS4qYWRlbikoPyEuKlxcXFxicFxcXFwuP2RcXFxcLj9yKS4qeWVtZW5cIixZTUQ6XCJeKD89LipwZW8pLip5ZW1lbnxeKD8hLipyZXApKD89LipkZW0pLip5ZW1lbnxeKD89Lipzb3V0aCkuKnllbWVufF4oPz0uKmFkZW4pLip5ZW1lbnxeKD89LipcXFxcYnBcXFxcLj9kXFxcXC4/cikuKnllbWVuXCIsWVVHOlwieXVnb3NsYXZpYVwiLFpNQjpcInphbWJpYXxub3J0aGVybi4/cmhvZGVzaWFcIixFQVo6XCJ6YW56aWJhclwiLFpXRTpcInppbWJhYndlfF4oPyEuKm5vcnRoZXJuKS4qcmhvZGVzaWFcIn19LHt9XSwxMjY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9W1wieHgtc21hbGxcIixcIngtc21hbGxcIixcInNtYWxsXCIsXCJtZWRpdW1cIixcImxhcmdlXCIsXCJ4LWxhcmdlXCIsXCJ4eC1sYXJnZVwiLFwibGFyZ2VyXCIsXCJzbWFsbGVyXCJdfSx7fV0sMTI3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVtcIm5vcm1hbFwiLFwiY29uZGVuc2VkXCIsXCJzZW1pLWNvbmRlbnNlZFwiLFwiZXh0cmEtY29uZGVuc2VkXCIsXCJ1bHRyYS1jb25kZW5zZWRcIixcImV4cGFuZGVkXCIsXCJzZW1pLWV4cGFuZGVkXCIsXCJleHRyYS1leHBhbmRlZFwiLFwidWx0cmEtZXhwYW5kZWRcIl19LHt9XSwxMjg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9W1wibm9ybWFsXCIsXCJpdGFsaWNcIixcIm9ibGlxdWVcIl19LHt9XSwxMjk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9W1wibm9ybWFsXCIsXCJib2xkXCIsXCJib2xkZXJcIixcImxpZ2h0ZXJcIixcIjEwMFwiLFwiMjAwXCIsXCIzMDBcIixcIjQwMFwiLFwiNTAwXCIsXCI2MDBcIixcIjcwMFwiLFwiODAwXCIsXCI5MDBcIl19LHt9XSwxMzA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e3BhcnNlOnQoXCIuL3BhcnNlXCIpLHN0cmluZ2lmeTp0KFwiLi9zdHJpbmdpZnlcIil9fSx7XCIuL3BhcnNlXCI6MTMyLFwiLi9zdHJpbmdpZnlcIjoxMzN9XSwxMzE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiY3NzLWZvbnQtc2l6ZS1rZXl3b3Jkc1wiKTtlLmV4cG9ydHM9e2lzU2l6ZTpmdW5jdGlvbih0KXtyZXR1cm4vXltcXGRcXC5dLy50ZXN0KHQpfHwtMSE9PXQuaW5kZXhPZihcIi9cIil8fC0xIT09bi5pbmRleE9mKHQpfX19LHtcImNzcy1mb250LXNpemUta2V5d29yZHNcIjoxMjZ9XSwxMzI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwidW5xdW90ZVwiKSxpPXQoXCJjc3MtZ2xvYmFsLWtleXdvcmRzXCIpLGE9dChcImNzcy1zeXN0ZW0tZm9udC1rZXl3b3Jkc1wiKSxvPXQoXCJjc3MtZm9udC13ZWlnaHQta2V5d29yZHNcIikscz10KFwiY3NzLWZvbnQtc3R5bGUta2V5d29yZHNcIiksbD10KFwiY3NzLWZvbnQtc3RyZXRjaC1rZXl3b3Jkc1wiKSxjPXQoXCJzdHJpbmctc3BsaXQtYnlcIiksdT10KFwiLi9saWIvdXRpbFwiKS5pc1NpemU7ZS5leHBvcnRzPWY7dmFyIGg9Zi5jYWNoZT17fTtmdW5jdGlvbiBmKHQpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcihcIkZvbnQgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZy5cIik7aWYoaFt0XSlyZXR1cm4gaFt0XTtpZihcIlwiPT09dCl0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgcGFyc2UgYW4gZW1wdHkgc3RyaW5nLlwiKTtpZigtMSE9PWEuaW5kZXhPZih0KSlyZXR1cm4gaFt0XT17c3lzdGVtOnR9O2Zvcih2YXIgZSxyPXtzdHlsZTpcIm5vcm1hbFwiLHZhcmlhbnQ6XCJub3JtYWxcIix3ZWlnaHQ6XCJub3JtYWxcIixzdHJldGNoOlwibm9ybWFsXCIsbGluZUhlaWdodDpcIm5vcm1hbFwiLHNpemU6XCIxcmVtXCIsZmFtaWx5OltcInNlcmlmXCJdfSxmPWModCwvXFxzKy8pO2U9Zi5zaGlmdCgpOyl7aWYoLTEhPT1pLmluZGV4T2YoZSkpcmV0dXJuW1wic3R5bGVcIixcInZhcmlhbnRcIixcIndlaWdodFwiLFwic3RyZXRjaFwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JbdF09ZX0pLGhbdF09cjtpZigtMT09PXMuaW5kZXhPZihlKSlpZihcIm5vcm1hbFwiIT09ZSYmXCJzbWFsbC1jYXBzXCIhPT1lKWlmKC0xPT09bC5pbmRleE9mKGUpKXtpZigtMT09PW8uaW5kZXhPZihlKSl7aWYodShlKSl7dmFyIGQ9YyhlLFwiL1wiKTtpZihyLnNpemU9ZFswXSxudWxsIT1kWzFdP3IubGluZUhlaWdodD1wKGRbMV0pOlwiL1wiPT09ZlswXSYmKGYuc2hpZnQoKSxyLmxpbmVIZWlnaHQ9cChmLnNoaWZ0KCkpKSwhZi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyByZXF1aXJlZCBmb250LWZhbWlseS5cIik7cmV0dXJuIHIuZmFtaWx5PWMoZi5qb2luKFwiIFwiKSwvXFxzKixcXHMqLykubWFwKG4pLGhbdF09cn10aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIG9yIHVuc3VwcG9ydGVkIGZvbnQgdG9rZW46IFwiK2UpfXIud2VpZ2h0PWV9ZWxzZSByLnN0cmV0Y2g9ZTtlbHNlIHIudmFyaWFudD1lO2Vsc2Ugci5zdHlsZT1lfXRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgcmVxdWlyZWQgZm9udC1zaXplLlwiKX1mdW5jdGlvbiBwKHQpe3ZhciBlPXBhcnNlRmxvYXQodCk7cmV0dXJuIGUudG9TdHJpbmcoKT09PXQ/ZTp0fX0se1wiLi9saWIvdXRpbFwiOjEzMSxcImNzcy1mb250LXN0cmV0Y2gta2V5d29yZHNcIjoxMjcsXCJjc3MtZm9udC1zdHlsZS1rZXl3b3Jkc1wiOjEyOCxcImNzcy1mb250LXdlaWdodC1rZXl3b3Jkc1wiOjEyOSxcImNzcy1nbG9iYWwta2V5d29yZHNcIjoxMzQsXCJjc3Mtc3lzdGVtLWZvbnQta2V5d29yZHNcIjoxMzUsXCJzdHJpbmctc3BsaXQtYnlcIjo1MTQsdW5xdW90ZTo1MzN9XSwxMzM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicGljay1ieS1hbGlhc1wiKSxpPXQoXCIuL2xpYi91dGlsXCIpLmlzU2l6ZSxhPWcodChcImNzcy1nbG9iYWwta2V5d29yZHNcIikpLG89Zyh0KFwiY3NzLXN5c3RlbS1mb250LWtleXdvcmRzXCIpKSxzPWcodChcImNzcy1mb250LXdlaWdodC1rZXl3b3Jkc1wiKSksbD1nKHQoXCJjc3MtZm9udC1zdHlsZS1rZXl3b3Jkc1wiKSksYz1nKHQoXCJjc3MtZm9udC1zdHJldGNoLWtleXdvcmRzXCIpKSx1PXtub3JtYWw6MSxcInNtYWxsLWNhcHNcIjoxfSxoPXtzZXJpZjoxLFwic2Fucy1zZXJpZlwiOjEsbW9ub3NwYWNlOjEsY3Vyc2l2ZToxLGZhbnRhc3k6MSxcInN5c3RlbS11aVwiOjF9LGY9XCIxcmVtXCIscD1cInNlcmlmXCI7ZnVuY3Rpb24gZCh0LGUpe2lmKHQmJiFlW3RdJiYhYVt0XSl0aHJvdyBFcnJvcihcIlVua25vd24ga2V5d29yZCBgXCIrdCtcImBcIik7cmV0dXJuIHR9ZnVuY3Rpb24gZyh0KXtmb3IodmFyIGU9e30scj0wO3I8dC5sZW5ndGg7cisrKWVbdFtyXV09MTtyZXR1cm4gZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoKHQ9bih0LHtzdHlsZTpcInN0eWxlIGZvbnRzdHlsZSBmb250U3R5bGUgZm9udC1zdHlsZSBzbG9wZSBkaXN0aW5jdGlvblwiLHZhcmlhbnQ6XCJ2YXJpYW50IGZvbnQtdmFyaWFudCBmb250VmFyaWFudCBmb250dmFyaWFudCB2YXIgY2FwaXRhbGl6YXRpb25cIix3ZWlnaHQ6XCJ3ZWlnaHQgdyBmb250LXdlaWdodCBmb250V2VpZ2h0IGZvbnR3ZWlnaHRcIixzdHJldGNoOlwic3RyZXRjaCBmb250LXN0cmV0Y2ggZm9udFN0cmV0Y2ggZm9udHN0cmV0Y2ggd2lkdGhcIixzaXplOlwic2l6ZSBzIGZvbnQtc2l6ZSBmb250U2l6ZSBmb250c2l6ZSBoZWlnaHQgZW0gZW1TaXplXCIsbGluZUhlaWdodDpcImxoIGxpbmUtaGVpZ2h0IGxpbmVIZWlnaHQgbGluZWhlaWdodCBsZWFkaW5nXCIsZmFtaWx5OlwiZm9udCBmYW1pbHkgZm9udEZhbWlseSBmb250LWZhbWlseSBmb250ZmFtaWx5IHR5cGUgdHlwZWZhY2UgZmFjZVwiLHN5c3RlbTpcInN5c3RlbSByZXNlcnZlZCBkZWZhdWx0IGdsb2JhbFwifSkpLnN5c3RlbSlyZXR1cm4gdC5zeXN0ZW0mJmQodC5zeXN0ZW0sbyksdC5zeXN0ZW07aWYoZCh0LnN0eWxlLGwpLGQodC52YXJpYW50LHUpLGQodC53ZWlnaHQscyksZCh0LnN0cmV0Y2gsYyksbnVsbD09dC5zaXplJiYodC5zaXplPWYpLFwibnVtYmVyXCI9PXR5cGVvZiB0LnNpemUmJih0LnNpemUrPVwicHhcIiksIWkpdGhyb3cgRXJyb3IoXCJCYWQgc2l6ZSB2YWx1ZSBgXCIrdC5zaXplK1wiYFwiKTt0LmZhbWlseXx8KHQuZmFtaWx5PXApLEFycmF5LmlzQXJyYXkodC5mYW1pbHkpJiYodC5mYW1pbHkubGVuZ3RofHwodC5mYW1pbHk9W3BdKSx0LmZhbWlseT10LmZhbWlseS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGhbdF0/dDonXCInK3QrJ1wiJ30pLmpvaW4oXCIsIFwiKSk7dmFyIGU9W107cmV0dXJuIGUucHVzaCh0LnN0eWxlKSx0LnZhcmlhbnQhPT10LnN0eWxlJiZlLnB1c2godC52YXJpYW50KSx0LndlaWdodCE9PXQudmFyaWFudCYmdC53ZWlnaHQhPT10LnN0eWxlJiZlLnB1c2godC53ZWlnaHQpLHQuc3RyZXRjaCE9PXQud2VpZ2h0JiZ0LnN0cmV0Y2ghPT10LnZhcmlhbnQmJnQuc3RyZXRjaCE9PXQuc3R5bGUmJmUucHVzaCh0LnN0cmV0Y2gpLGUucHVzaCh0LnNpemUrKG51bGw9PXQubGluZUhlaWdodHx8XCJub3JtYWxcIj09PXQubGluZUhlaWdodHx8dC5saW5lSGVpZ2h0K1wiXCI9PVwiMVwiP1wiXCI6XCIvXCIrdC5saW5lSGVpZ2h0KSksZS5wdXNoKHQuZmFtaWx5KSxlLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX19LHtcIi4vbGliL3V0aWxcIjoxMzEsXCJjc3MtZm9udC1zdHJldGNoLWtleXdvcmRzXCI6MTI3LFwiY3NzLWZvbnQtc3R5bGUta2V5d29yZHNcIjoxMjgsXCJjc3MtZm9udC13ZWlnaHQta2V5d29yZHNcIjoxMjksXCJjc3MtZ2xvYmFsLWtleXdvcmRzXCI6MTM0LFwiY3NzLXN5c3RlbS1mb250LWtleXdvcmRzXCI6MTM1LFwicGljay1ieS1hbGlhc1wiOjQ1OH1dLDEzNDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bXCJpbmhlcml0XCIsXCJpbml0aWFsXCIsXCJ1bnNldFwiXX0se31dLDEzNTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bXCJjYXB0aW9uXCIsXCJpY29uXCIsXCJtZW51XCIsXCJtZXNzYWdlLWJveFwiLFwic21hbGwtY2FwdGlvblwiLFwic3RhdHVzLWJhclwiXX0se31dLDEzNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89aS0xLHM9aSppLGw9bypvLGM9KDErMippKSpsLHU9aSpsLGg9cyooMy0yKmkpLGY9cypvO2lmKHQubGVuZ3RoKXthfHwoYT1uZXcgQXJyYXkodC5sZW5ndGgpKTtmb3IodmFyIHA9dC5sZW5ndGgtMTtwPj0wOy0tcClhW3BdPWMqdFtwXSt1KmVbcF0raCpyW3BdK2YqbltwXTtyZXR1cm4gYX1yZXR1cm4gYyp0K3UqZStoKnIrZipufSxlLmV4cG9ydHMuZGVyaXZhdGl2ZT1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89NippKmktNippLHM9MyppKmktNCppKzEsbD0tNippKmkrNippLGM9MyppKmktMippO2lmKHQubGVuZ3RoKXthfHwoYT1uZXcgQXJyYXkodC5sZW5ndGgpKTtmb3IodmFyIHU9dC5sZW5ndGgtMTt1Pj0wOy0tdSlhW3VdPW8qdFt1XStzKmVbdV0rbCpyW3VdK2Mqblt1XTtyZXR1cm4gYX1yZXR1cm4gbyp0K3MqZStsKnJbdV0rYypufX0se31dLDEzNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2xpYi90aHVuay5qc1wiKTtmdW5jdGlvbiBpKCl7dGhpcy5hcmdUeXBlcz1bXSx0aGlzLnNoaW1BcmdzPVtdLHRoaXMuYXJyYXlBcmdzPVtdLHRoaXMuYXJyYXlCbG9ja0luZGljZXM9W10sdGhpcy5zY2FsYXJBcmdzPVtdLHRoaXMub2Zmc2V0QXJncz1bXSx0aGlzLm9mZnNldEFyZ0luZGV4PVtdLHRoaXMuaW5kZXhBcmdzPVtdLHRoaXMuc2hhcGVBcmdzPVtdLHRoaXMuZnVuY05hbWU9XCJcIix0aGlzLnByZT1udWxsLHRoaXMuYm9keT1udWxsLHRoaXMucG9zdD1udWxsLHRoaXMuZGVidWc9ITF9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBpO2UucHJlPXQucHJlLGUuYm9keT10LmJvZHksZS5wb3N0PXQucG9zdDt2YXIgcj10LmFyZ3Muc2xpY2UoMCk7ZS5hcmdUeXBlcz1yO2Zvcih2YXIgYT0wO2E8ci5sZW5ndGg7KythKXt2YXIgbz1yW2FdO2lmKFwiYXJyYXlcIj09PW98fFwib2JqZWN0XCI9PXR5cGVvZiBvJiZvLmJsb2NrSW5kaWNlcyl7aWYoZS5hcmdUeXBlc1thXT1cImFycmF5XCIsZS5hcnJheUFyZ3MucHVzaChhKSxlLmFycmF5QmxvY2tJbmRpY2VzLnB1c2goby5ibG9ja0luZGljZXM/by5ibG9ja0luZGljZXM6MCksZS5zaGltQXJncy5wdXNoKFwiYXJyYXlcIithKSxhPGUucHJlLmFyZ3MubGVuZ3RoJiZlLnByZS5hcmdzW2FdLmNvdW50PjApdGhyb3cgbmV3IEVycm9yKFwiY3dpc2U6IHByZSgpIGJsb2NrIG1heSBub3QgcmVmZXJlbmNlIGFycmF5IGFyZ3NcIik7aWYoYTxlLnBvc3QuYXJncy5sZW5ndGgmJmUucG9zdC5hcmdzW2FdLmNvdW50PjApdGhyb3cgbmV3IEVycm9yKFwiY3dpc2U6IHBvc3QoKSBibG9jayBtYXkgbm90IHJlZmVyZW5jZSBhcnJheSBhcmdzXCIpfWVsc2UgaWYoXCJzY2FsYXJcIj09PW8pZS5zY2FsYXJBcmdzLnB1c2goYSksZS5zaGltQXJncy5wdXNoKFwic2NhbGFyXCIrYSk7ZWxzZSBpZihcImluZGV4XCI9PT1vKXtpZihlLmluZGV4QXJncy5wdXNoKGEpLGE8ZS5wcmUuYXJncy5sZW5ndGgmJmUucHJlLmFyZ3NbYV0uY291bnQ+MCl0aHJvdyBuZXcgRXJyb3IoXCJjd2lzZTogcHJlKCkgYmxvY2sgbWF5IG5vdCByZWZlcmVuY2UgYXJyYXkgaW5kZXhcIik7aWYoYTxlLmJvZHkuYXJncy5sZW5ndGgmJmUuYm9keS5hcmdzW2FdLmx2YWx1ZSl0aHJvdyBuZXcgRXJyb3IoXCJjd2lzZTogYm9keSgpIGJsb2NrIG1heSBub3Qgd3JpdGUgdG8gYXJyYXkgaW5kZXhcIik7aWYoYTxlLnBvc3QuYXJncy5sZW5ndGgmJmUucG9zdC5hcmdzW2FdLmNvdW50PjApdGhyb3cgbmV3IEVycm9yKFwiY3dpc2U6IHBvc3QoKSBibG9jayBtYXkgbm90IHJlZmVyZW5jZSBhcnJheSBpbmRleFwiKX1lbHNlIGlmKFwic2hhcGVcIj09PW8pe2lmKGUuc2hhcGVBcmdzLnB1c2goYSksYTxlLnByZS5hcmdzLmxlbmd0aCYmZS5wcmUuYXJnc1thXS5sdmFsdWUpdGhyb3cgbmV3IEVycm9yKFwiY3dpc2U6IHByZSgpIGJsb2NrIG1heSBub3Qgd3JpdGUgdG8gYXJyYXkgc2hhcGVcIik7aWYoYTxlLmJvZHkuYXJncy5sZW5ndGgmJmUuYm9keS5hcmdzW2FdLmx2YWx1ZSl0aHJvdyBuZXcgRXJyb3IoXCJjd2lzZTogYm9keSgpIGJsb2NrIG1heSBub3Qgd3JpdGUgdG8gYXJyYXkgc2hhcGVcIik7aWYoYTxlLnBvc3QuYXJncy5sZW5ndGgmJmUucG9zdC5hcmdzW2FdLmx2YWx1ZSl0aHJvdyBuZXcgRXJyb3IoXCJjd2lzZTogcG9zdCgpIGJsb2NrIG1heSBub3Qgd3JpdGUgdG8gYXJyYXkgc2hhcGVcIil9ZWxzZXtpZihcIm9iamVjdFwiIT10eXBlb2Ygb3x8IW8ub2Zmc2V0KXRocm93IG5ldyBFcnJvcihcImN3aXNlOiBVbmtub3duIGFyZ3VtZW50IHR5cGUgXCIrclthXSk7ZS5hcmdUeXBlc1thXT1cIm9mZnNldFwiLGUub2Zmc2V0QXJncy5wdXNoKHthcnJheTpvLmFycmF5LG9mZnNldDpvLm9mZnNldH0pLGUub2Zmc2V0QXJnSW5kZXgucHVzaChhKX19aWYoZS5hcnJheUFyZ3MubGVuZ3RoPD0wKXRocm93IG5ldyBFcnJvcihcImN3aXNlOiBObyBhcnJheSBhcmd1bWVudHMgc3BlY2lmaWVkXCIpO2lmKGUucHJlLmFyZ3MubGVuZ3RoPnIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImN3aXNlOiBUb28gbWFueSBhcmd1bWVudHMgaW4gcHJlKCkgYmxvY2tcIik7aWYoZS5ib2R5LmFyZ3MubGVuZ3RoPnIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImN3aXNlOiBUb28gbWFueSBhcmd1bWVudHMgaW4gYm9keSgpIGJsb2NrXCIpO2lmKGUucG9zdC5hcmdzLmxlbmd0aD5yLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJjd2lzZTogVG9vIG1hbnkgYXJndW1lbnRzIGluIHBvc3QoKSBibG9ja1wiKTtyZXR1cm4gZS5kZWJ1Zz0hIXQucHJpbnRDb2RlfHwhIXQuZGVidWcsZS5mdW5jTmFtZT10LmZ1bmNOYW1lfHxcImN3aXNlXCIsZS5ibG9ja1NpemU9dC5ibG9ja1NpemV8fDY0LG4oZSl9fSx7XCIuL2xpYi90aHVuay5qc1wiOjEzOX1dLDEzODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJ1bmlxXCIpO2Z1bmN0aW9uIGkodCxlLHIpe3ZhciBuLGksYT10Lmxlbmd0aCxvPWUuYXJyYXlBcmdzLmxlbmd0aCxzPWUuaW5kZXhBcmdzLmxlbmd0aD4wLGw9W10sYz1bXSx1PTAsaD0wO2ZvcihuPTA7bjxhOysrbiljLnB1c2goW1wiaVwiLG4sXCI9MFwiXS5qb2luKFwiXCIpKTtmb3IoaT0wO2k8bzsrK2kpZm9yKG49MDtuPGE7KytuKWg9dSx1PXRbbl0sMD09PW4/Yy5wdXNoKFtcImRcIixpLFwic1wiLG4sXCI9dFwiLGksXCJwXCIsdV0uam9pbihcIlwiKSk6Yy5wdXNoKFtcImRcIixpLFwic1wiLG4sXCI9KHRcIixpLFwicFwiLHUsXCItc1wiLGgsXCIqdFwiLGksXCJwXCIsaCxcIilcIl0uam9pbihcIlwiKSk7Zm9yKGMubGVuZ3RoPjAmJmwucHVzaChcInZhciBcIitjLmpvaW4oXCIsXCIpKSxuPWEtMTtuPj0wOy0tbil1PXRbbl0sbC5wdXNoKFtcImZvcihpXCIsbixcIj0wO2lcIixuLFwiPHNcIix1LFwiOysraVwiLG4sXCIpe1wiXS5qb2luKFwiXCIpKTtmb3IobC5wdXNoKHIpLG49MDtuPGE7KytuKXtmb3IoaD11LHU9dFtuXSxpPTA7aTxvOysraSlsLnB1c2goW1wicFwiLGksXCIrPWRcIixpLFwic1wiLG5dLmpvaW4oXCJcIikpO3MmJihuPjAmJmwucHVzaChbXCJpbmRleFtcIixoLFwiXS09c1wiLGhdLmpvaW4oXCJcIikpLGwucHVzaChbXCIrK2luZGV4W1wiLHUsXCJdXCJdLmpvaW4oXCJcIikpKSxsLnB1c2goXCJ9XCIpfXJldHVybiBsLmpvaW4oXCJcXG5cIil9ZnVuY3Rpb24gYSh0LGUscil7Zm9yKHZhciBuPXQuYm9keSxpPVtdLGE9W10sbz0wO288dC5hcmdzLmxlbmd0aDsrK28pe3ZhciBzPXQuYXJnc1tvXTtpZighKHMuY291bnQ8PTApKXt2YXIgbD1uZXcgUmVnRXhwKHMubmFtZSxcImdcIiksYz1cIlwiLHU9ZS5hcnJheUFyZ3MuaW5kZXhPZihvKTtzd2l0Y2goZS5hcmdUeXBlc1tvXSl7Y2FzZVwib2Zmc2V0XCI6dmFyIGg9ZS5vZmZzZXRBcmdJbmRleC5pbmRleE9mKG8pO3U9ZS5vZmZzZXRBcmdzW2hdLmFycmF5LGM9XCIrcVwiK2g7Y2FzZVwiYXJyYXlcIjpjPVwicFwiK3UrYzt2YXIgZj1cImxcIitvLHA9XCJhXCIrdTtpZigwPT09ZS5hcnJheUJsb2NrSW5kaWNlc1t1XSkxPT09cy5jb3VudD9cImdlbmVyaWNcIj09PXJbdV0/cy5sdmFsdWU/KGkucHVzaChbXCJ2YXIgXCIsZixcIj1cIixwLFwiLmdldChcIixjLFwiKVwiXS5qb2luKFwiXCIpKSxuPW4ucmVwbGFjZShsLGYpLGEucHVzaChbcCxcIi5zZXQoXCIsYyxcIixcIixmLFwiKVwiXS5qb2luKFwiXCIpKSk6bj1uLnJlcGxhY2UobCxbcCxcIi5nZXQoXCIsYyxcIilcIl0uam9pbihcIlwiKSk6bj1uLnJlcGxhY2UobCxbcCxcIltcIixjLFwiXVwiXS5qb2luKFwiXCIpKTpcImdlbmVyaWNcIj09PXJbdV0/KGkucHVzaChbXCJ2YXIgXCIsZixcIj1cIixwLFwiLmdldChcIixjLFwiKVwiXS5qb2luKFwiXCIpKSxuPW4ucmVwbGFjZShsLGYpLHMubHZhbHVlJiZhLnB1c2goW3AsXCIuc2V0KFwiLGMsXCIsXCIsZixcIilcIl0uam9pbihcIlwiKSkpOihpLnB1c2goW1widmFyIFwiLGYsXCI9XCIscCxcIltcIixjLFwiXVwiXS5qb2luKFwiXCIpKSxuPW4ucmVwbGFjZShsLGYpLHMubHZhbHVlJiZhLnB1c2goW3AsXCJbXCIsYyxcIl09XCIsZl0uam9pbihcIlwiKSkpO2Vsc2V7Zm9yKHZhciBkPVtzLm5hbWVdLGc9W2NdLHY9MDt2PE1hdGguYWJzKGUuYXJyYXlCbG9ja0luZGljZXNbdV0pO3YrKylkLnB1c2goXCJcXFxccypcXFxcWyhbXlxcXFxdXSspXFxcXF1cIiksZy5wdXNoKFwiJFwiKyh2KzEpK1wiKnRcIit1K1wiYlwiK3YpO2lmKGw9bmV3IFJlZ0V4cChkLmpvaW4oXCJcIiksXCJnXCIpLGM9Zy5qb2luKFwiK1wiKSxcImdlbmVyaWNcIj09PXJbdV0pdGhyb3cgbmV3IEVycm9yKFwiY3dpc2U6IEdlbmVyaWMgYXJyYXlzIG5vdCBzdXBwb3J0ZWQgaW4gY29tYmluYXRpb24gd2l0aCBibG9ja3MhXCIpO249bi5yZXBsYWNlKGwsW3AsXCJbXCIsYyxcIl1cIl0uam9pbihcIlwiKSl9YnJlYWs7Y2FzZVwic2NhbGFyXCI6bj1uLnJlcGxhY2UobCxcIllcIitlLnNjYWxhckFyZ3MuaW5kZXhPZihvKSk7YnJlYWs7Y2FzZVwiaW5kZXhcIjpuPW4ucmVwbGFjZShsLFwiaW5kZXhcIik7YnJlYWs7Y2FzZVwic2hhcGVcIjpuPW4ucmVwbGFjZShsLFwic2hhcGVcIil9fX1yZXR1cm5baS5qb2luKFwiXFxuXCIpLG4sYS5qb2luKFwiXFxuXCIpXS5qb2luKFwiXFxuXCIpLnRyaW0oKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZVsxXS5sZW5ndGgtTWF0aC5hYnModC5hcnJheUJsb2NrSW5kaWNlc1swXSl8MCxvPW5ldyBBcnJheSh0LmFycmF5QXJncy5sZW5ndGgpLHM9bmV3IEFycmF5KHQuYXJyYXlBcmdzLmxlbmd0aCksbD0wO2w8dC5hcnJheUFyZ3MubGVuZ3RoOysrbClzW2xdPWVbMipsXSxvW2xdPWVbMipsKzFdO3ZhciBjPVtdLHU9W10saD1bXSxmPVtdLHA9W107Zm9yKGw9MDtsPHQuYXJyYXlBcmdzLmxlbmd0aDsrK2wpe3QuYXJyYXlCbG9ja0luZGljZXNbbF08MD8oaC5wdXNoKDApLGYucHVzaChyKSxjLnB1c2gociksdS5wdXNoKHIrdC5hcnJheUJsb2NrSW5kaWNlc1tsXSkpOihoLnB1c2godC5hcnJheUJsb2NrSW5kaWNlc1tsXSksZi5wdXNoKHQuYXJyYXlCbG9ja0luZGljZXNbbF0rciksYy5wdXNoKDApLHUucHVzaCh0LmFycmF5QmxvY2tJbmRpY2VzW2xdKSk7Zm9yKHZhciBkPVtdLGc9MDtnPG9bbF0ubGVuZ3RoO2crKyloW2xdPD1vW2xdW2ddJiZvW2xdW2ddPGZbbF0mJmQucHVzaChvW2xdW2ddLWhbbF0pO3AucHVzaChkKX12YXIgdj1bXCJTU1wiXSxtPVtcIid1c2Ugc3RyaWN0J1wiXSx5PVtdO2ZvcihnPTA7ZzxyOysrZyl5LnB1c2goW1wic1wiLGcsXCI9U1NbXCIsZyxcIl1cIl0uam9pbihcIlwiKSk7Zm9yKGw9MDtsPHQuYXJyYXlBcmdzLmxlbmd0aDsrK2wpe2Zvcih2LnB1c2goXCJhXCIrbCksdi5wdXNoKFwidFwiK2wpLHYucHVzaChcInBcIitsKSxnPTA7ZzxyOysrZyl5LnB1c2goW1widFwiLGwsXCJwXCIsZyxcIj10XCIsbCxcIltcIixoW2xdK2csXCJdXCJdLmpvaW4oXCJcIikpO2ZvcihnPTA7ZzxNYXRoLmFicyh0LmFycmF5QmxvY2tJbmRpY2VzW2xdKTsrK2cpeS5wdXNoKFtcInRcIixsLFwiYlwiLGcsXCI9dFwiLGwsXCJbXCIsY1tsXStnLFwiXVwiXS5qb2luKFwiXCIpKX1mb3IobD0wO2w8dC5zY2FsYXJBcmdzLmxlbmd0aDsrK2wpdi5wdXNoKFwiWVwiK2wpO2lmKHQuc2hhcGVBcmdzLmxlbmd0aD4wJiZ5LnB1c2goXCJzaGFwZT1TUy5zbGljZSgwKVwiKSx0LmluZGV4QXJncy5sZW5ndGg+MCl7dmFyIHg9bmV3IEFycmF5KHIpO2ZvcihsPTA7bDxyOysrbCl4W2xdPVwiMFwiO3kucHVzaChbXCJpbmRleD1bXCIseC5qb2luKFwiLFwiKSxcIl1cIl0uam9pbihcIlwiKSl9Zm9yKGw9MDtsPHQub2Zmc2V0QXJncy5sZW5ndGg7KytsKXt2YXIgYj10Lm9mZnNldEFyZ3NbbF0sXz1bXTtmb3IoZz0wO2c8Yi5vZmZzZXQubGVuZ3RoOysrZykwIT09Yi5vZmZzZXRbZ10mJigxPT09Yi5vZmZzZXRbZ10/Xy5wdXNoKFtcInRcIixiLmFycmF5LFwicFwiLGddLmpvaW4oXCJcIikpOl8ucHVzaChbYi5vZmZzZXRbZ10sXCIqdFwiLGIuYXJyYXksXCJwXCIsZ10uam9pbihcIlwiKSkpOzA9PT1fLmxlbmd0aD95LnB1c2goXCJxXCIrbCtcIj0wXCIpOnkucHVzaChbXCJxXCIsbCxcIj1cIixfLmpvaW4oXCIrXCIpXS5qb2luKFwiXCIpKX12YXIgdz1uKFtdLmNvbmNhdCh0LnByZS50aGlzVmFycykuY29uY2F0KHQuYm9keS50aGlzVmFycykuY29uY2F0KHQucG9zdC50aGlzVmFycykpO2ZvcigoeT15LmNvbmNhdCh3KSkubGVuZ3RoPjAmJm0ucHVzaChcInZhciBcIit5LmpvaW4oXCIsXCIpKSxsPTA7bDx0LmFycmF5QXJncy5sZW5ndGg7KytsKW0ucHVzaChcInBcIitsK1wifD0wXCIpO3QucHJlLmJvZHkubGVuZ3RoPjMmJm0ucHVzaChhKHQucHJlLHQscykpO3ZhciBrPWEodC5ib2R5LHQscyksQT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRbMF0ubGVuZ3RoO2U8cjspe2Zvcih2YXIgbj0xO248dC5sZW5ndGg7KytuKWlmKHRbbl1bZV0hPT10WzBdW2VdKXJldHVybiBlOysrZX1yZXR1cm4gZX0ocCk7QTxyP20ucHVzaChmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGE9ZS5sZW5ndGgsbz1yLmFycmF5QXJncy5sZW5ndGgscz1yLmJsb2NrU2l6ZSxsPXIuaW5kZXhBcmdzLmxlbmd0aD4wLGM9W10sdT0wO3U8bzsrK3UpYy5wdXNoKFtcInZhciBvZmZzZXRcIix1LFwiPXBcIix1XS5qb2luKFwiXCIpKTtmb3IodT10O3U8YTsrK3UpYy5wdXNoKFtcImZvcih2YXIgalwiK3UrXCI9U1NbXCIsZVt1XSxcIl18MDtqXCIsdSxcIj4wOyl7XCJdLmpvaW4oXCJcIikpLGMucHVzaChbXCJpZihqXCIsdSxcIjxcIixzLFwiKXtcIl0uam9pbihcIlwiKSksYy5wdXNoKFtcInNcIixlW3VdLFwiPWpcIix1XS5qb2luKFwiXCIpKSxjLnB1c2goW1wialwiLHUsXCI9MFwiXS5qb2luKFwiXCIpKSxjLnB1c2goW1wifWVsc2V7c1wiLGVbdV0sXCI9XCIsc10uam9pbihcIlwiKSksYy5wdXNoKFtcImpcIix1LFwiLT1cIixzLFwifVwiXS5qb2luKFwiXCIpKSxsJiZjLnB1c2goW1wiaW5kZXhbXCIsZVt1XSxcIl09alwiLHVdLmpvaW4oXCJcIikpO2Zvcih1PTA7dTxvOysrdSl7Zm9yKHZhciBoPVtcIm9mZnNldFwiK3VdLGY9dDtmPGE7KytmKWgucHVzaChbXCJqXCIsZixcIip0XCIsdSxcInBcIixlW2ZdXS5qb2luKFwiXCIpKTtjLnB1c2goW1wicFwiLHUsXCI9KFwiLGguam9pbihcIitcIiksXCIpXCJdLmpvaW4oXCJcIikpfWZvcihjLnB1c2goaShlLHIsbikpLHU9dDt1PGE7Kyt1KWMucHVzaChcIn1cIik7cmV0dXJuIGMuam9pbihcIlxcblwiKX0oQSxwWzBdLHQsaykpOm0ucHVzaChpKHBbMF0sdCxrKSksdC5wb3N0LmJvZHkubGVuZ3RoPjMmJm0ucHVzaChhKHQucG9zdCx0LHMpKSx0LmRlYnVnJiZjb25zb2xlLmxvZyhcIi0tLS0tR2VuZXJhdGVkIGN3aXNlIHJvdXRpbmUgZm9yIFwiLGUsXCI6XFxuXCIrbS5qb2luKFwiXFxuXCIpK1wiXFxuLS0tLS0tLS0tLVwiKTt2YXIgVD1bdC5mdW5jTmFtZXx8XCJ1bm5hbWVkXCIsXCJfY3dpc2VfbG9vcF9cIixvWzBdLmpvaW4oXCJzXCIpLFwibVwiLEEsZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0hMCxuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBpPXRbbl0sYT1pLm1hdGNoKC9cXGQrLyk7YT1hP2FbMF06XCJcIiwwPT09aS5jaGFyQXQoMCk/ZVtuXT1cInVcIitpLmNoYXJBdCgxKSthOmVbbl09aS5jaGFyQXQoMCkrYSxuPjAmJihyPXImJmVbbl09PT1lW24tMV0pfXJldHVybiByP2VbMF06ZS5qb2luKFwiXCIpfShzKV0uam9pbihcIlwiKTtyZXR1cm4gbmV3IEZ1bmN0aW9uKFtcImZ1bmN0aW9uIFwiLFQsXCIoXCIsdi5qb2luKFwiLFwiKSxcIil7XCIsbS5qb2luKFwiXFxuXCIpLFwifSByZXR1cm4gXCIsVF0uam9pbihcIlwiKSkoKX19LHt1bmlxOjUzMn1dLDEzOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2NvbXBpbGUuanNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPVtcIid1c2Ugc3RyaWN0J1wiLFwidmFyIENBQ0hFRD17fVwiXSxyPVtdLGk9dC5mdW5jTmFtZStcIl9jd2lzZV90aHVua1wiO2UucHVzaChbXCJyZXR1cm4gZnVuY3Rpb24gXCIsaSxcIihcIix0LnNoaW1BcmdzLmpvaW4oXCIsXCIpLFwiKXtcIl0uam9pbihcIlwiKSk7Zm9yKHZhciBhPVtdLG89W10scz1bW1wiYXJyYXlcIix0LmFycmF5QXJnc1swXSxcIi5zaGFwZS5zbGljZShcIixNYXRoLm1heCgwLHQuYXJyYXlCbG9ja0luZGljZXNbMF0pLHQuYXJyYXlCbG9ja0luZGljZXNbMF08MD9cIixcIit0LmFycmF5QmxvY2tJbmRpY2VzWzBdK1wiKVwiOlwiKVwiXS5qb2luKFwiXCIpXSxsPVtdLGM9W10sdT0wO3U8dC5hcnJheUFyZ3MubGVuZ3RoOysrdSl7dmFyIGg9dC5hcnJheUFyZ3NbdV07ci5wdXNoKFtcInRcIixoLFwiPWFycmF5XCIsaCxcIi5kdHlwZSxcIixcInJcIixoLFwiPWFycmF5XCIsaCxcIi5vcmRlclwiXS5qb2luKFwiXCIpKSxhLnB1c2goXCJ0XCIraCksYS5wdXNoKFwiclwiK2gpLG8ucHVzaChcInRcIitoKSxvLnB1c2goXCJyXCIraCtcIi5qb2luKClcIikscy5wdXNoKFwiYXJyYXlcIitoK1wiLmRhdGFcIikscy5wdXNoKFwiYXJyYXlcIitoK1wiLnN0cmlkZVwiKSxzLnB1c2goXCJhcnJheVwiK2grXCIub2Zmc2V0fDBcIiksdT4wJiYobC5wdXNoKFwiYXJyYXlcIit0LmFycmF5QXJnc1swXStcIi5zaGFwZS5sZW5ndGg9PT1hcnJheVwiK2grXCIuc2hhcGUubGVuZ3RoK1wiKyhNYXRoLmFicyh0LmFycmF5QmxvY2tJbmRpY2VzWzBdKS1NYXRoLmFicyh0LmFycmF5QmxvY2tJbmRpY2VzW3VdKSkpLGMucHVzaChcImFycmF5XCIrdC5hcnJheUFyZ3NbMF0rXCIuc2hhcGVbc2hhcGVJbmRleCtcIitNYXRoLm1heCgwLHQuYXJyYXlCbG9ja0luZGljZXNbMF0pK1wiXT09PWFycmF5XCIraCtcIi5zaGFwZVtzaGFwZUluZGV4K1wiK01hdGgubWF4KDAsdC5hcnJheUJsb2NrSW5kaWNlc1t1XSkrXCJdXCIpKX1mb3IodC5hcnJheUFyZ3MubGVuZ3RoPjEmJihlLnB1c2goXCJpZiAoIShcIitsLmpvaW4oXCIgJiYgXCIpK1wiKSkgdGhyb3cgbmV3IEVycm9yKCdjd2lzZTogQXJyYXlzIGRvIG5vdCBhbGwgaGF2ZSB0aGUgc2FtZSBkaW1lbnNpb25hbGl0eSEnKVwiKSxlLnB1c2goXCJmb3IodmFyIHNoYXBlSW5kZXg9YXJyYXlcIit0LmFycmF5QXJnc1swXStcIi5zaGFwZS5sZW5ndGgtXCIrTWF0aC5hYnModC5hcnJheUJsb2NrSW5kaWNlc1swXSkrXCI7IHNoYXBlSW5kZXgtLVxceDNlMDspIHtcIiksZS5wdXNoKFwiaWYgKCEoXCIrYy5qb2luKFwiICYmIFwiKStcIikpIHRocm93IG5ldyBFcnJvcignY3dpc2U6IEFycmF5cyBkbyBub3QgYWxsIGhhdmUgdGhlIHNhbWUgc2hhcGUhJylcIiksZS5wdXNoKFwifVwiKSksdT0wO3U8dC5zY2FsYXJBcmdzLmxlbmd0aDsrK3Upcy5wdXNoKFwic2NhbGFyXCIrdC5zY2FsYXJBcmdzW3VdKTtyZXR1cm4gci5wdXNoKFtcInR5cGU9W1wiLG8uam9pbihcIixcIiksXCJdLmpvaW4oKVwiXS5qb2luKFwiXCIpKSxyLnB1c2goXCJwcm9jPUNBQ0hFRFt0eXBlXVwiKSxlLnB1c2goXCJ2YXIgXCIrci5qb2luKFwiLFwiKSksZS5wdXNoKFtcImlmKCFwcm9jKXtcIixcIkNBQ0hFRFt0eXBlXT1wcm9jPWNvbXBpbGUoW1wiLGEuam9pbihcIixcIiksXCJdKX1cIixcInJldHVybiBwcm9jKFwiLHMuam9pbihcIixcIiksXCIpfVwiXS5qb2luKFwiXCIpKSx0LmRlYnVnJiZjb25zb2xlLmxvZyhcIi0tLS0tR2VuZXJhdGVkIHRodW5rOlxcblwiK2Uuam9pbihcIlxcblwiKStcIlxcbi0tLS0tLS0tLS1cIiksbmV3IEZ1bmN0aW9uKFwiY29tcGlsZVwiLGUuam9pbihcIlxcblwiKSkobi5iaW5kKHZvaWQgMCx0KSl9fSx7XCIuL2NvbXBpbGUuanNcIjoxMzh9XSwxNDA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dChcImN3aXNlLWNvbXBpbGVyXCIpfSx7XCJjd2lzZS1jb21waWxlclwiOjEzN31dLDE0MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuLGk9dChcImVzNS1leHQvb2JqZWN0L2NvcHlcIiksYT10KFwiZXM1LWV4dC9vYmplY3Qvbm9ybWFsaXplLW9wdGlvbnNcIiksbz10KFwiZXM1LWV4dC9vYmplY3QvdmFsaWQtY2FsbGFibGVcIikscz10KFwiZXM1LWV4dC9vYmplY3QvbWFwXCIpLGw9dChcImVzNS1leHQvb2JqZWN0L3ZhbGlkLWNhbGxhYmxlXCIpLGM9dChcImVzNS1leHQvb2JqZWN0L3ZhbGlkLXZhbHVlXCIpLHU9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsaD1PYmplY3QuZGVmaW5lUHJvcGVydHksZj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O249ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGE9YyhlKSYmbChlLnZhbHVlKTtyZXR1cm4gZGVsZXRlKG49aShlKSkud3JpdGFibGUsZGVsZXRlIG4udmFsdWUsbi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hci5vdmVyd3JpdGVEZWZpbml0aW9uJiZmLmNhbGwodGhpcyx0KT9hOihlLnZhbHVlPXUuY2FsbChhLHIucmVzb2x2ZUNvbnRleHQ/ci5yZXNvbHZlQ29udGV4dCh0aGlzKTp0aGlzKSxoKHRoaXMsdCxlKSx0aGlzW3RdKX0sbn0sZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWEoYXJndW1lbnRzWzFdKTtyZXR1cm4gbnVsbCE9ZS5yZXNvbHZlQ29udGV4dCYmbyhlLnJlc29sdmVDb250ZXh0KSxzKHQsZnVuY3Rpb24odCxyKXtyZXR1cm4gbihyLHQsZSl9KX19LHtcImVzNS1leHQvb2JqZWN0L2NvcHlcIjoxODIsXCJlczUtZXh0L29iamVjdC9tYXBcIjoxOTEsXCJlczUtZXh0L29iamVjdC9ub3JtYWxpemUtb3B0aW9uc1wiOjE5MixcImVzNS1leHQvb2JqZWN0L3ZhbGlkLWNhbGxhYmxlXCI6MTk2LFwiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWVcIjoxOTh9XSwxNDI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZXM1LWV4dC9vYmplY3QvYXNzaWduXCIpLGk9dChcImVzNS1leHQvb2JqZWN0L25vcm1hbGl6ZS1vcHRpb25zXCIpLGE9dChcImVzNS1leHQvb2JqZWN0L2lzLWNhbGxhYmxlXCIpLG89dChcImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnNcIik7KGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGEscyxsLGM7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mnx8XCJzdHJpbmdcIiE9dHlwZW9mIHQ/KGw9ZSxlPXQsdD1udWxsKTpsPWFyZ3VtZW50c1syXSxudWxsPT10PyhyPXM9ITAsYT0hMSk6KHI9by5jYWxsKHQsXCJjXCIpLGE9by5jYWxsKHQsXCJlXCIpLHM9by5jYWxsKHQsXCJ3XCIpKSxjPXt2YWx1ZTplLGNvbmZpZ3VyYWJsZTpyLGVudW1lcmFibGU6YSx3cml0YWJsZTpzfSxsP24oaShsKSxjKTpjfSkuZ3M9ZnVuY3Rpb24odCxlLHIpe3ZhciBzLGwsYyx1O3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiB0PyhjPXIscj1lLGU9dCx0PW51bGwpOmM9YXJndW1lbnRzWzNdLG51bGw9PWU/ZT12b2lkIDA6YShlKT9udWxsPT1yP3I9dm9pZCAwOmEocil8fChjPXIscj12b2lkIDApOihjPWUsZT1yPXZvaWQgMCksbnVsbD09dD8ocz0hMCxsPSExKToocz1vLmNhbGwodCxcImNcIiksbD1vLmNhbGwodCxcImVcIikpLHU9e2dldDplLHNldDpyLGNvbmZpZ3VyYWJsZTpzLGVudW1lcmFibGU6bH0sYz9uKGkoYyksdSk6dX19LHtcImVzNS1leHQvb2JqZWN0L2Fzc2lnblwiOjE3OSxcImVzNS1leHQvb2JqZWN0L2lzLWNhbGxhYmxlXCI6MTg1LFwiZXM1LWV4dC9vYmplY3Qvbm9ybWFsaXplLW9wdGlvbnNcIjoxOTIsXCJlczUtZXh0L3N0cmluZy8jL2NvbnRhaW5zXCI6MTk5fV0sMTQzOltmdW5jdGlvbih0LGUscil7dmFyIG47bj10aGlzLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gcih0KXt2YXIgcjtyZXR1cm4gMT09PXQubGVuZ3RoJiYocj10LHQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZShyKHQpLG4pfSkse2xlZnQ6ZnVuY3Rpb24oZSxyLG4saSl7Zm9yKG51bGw9PW4mJihuPTApLG51bGw9PWkmJihpPWUubGVuZ3RoKTtuPGk7KXt2YXIgYT1uK2k+Pj4xO3QoZVthXSxyKTwwP249YSsxOmk9YX1yZXR1cm4gbn0scmlnaHQ6ZnVuY3Rpb24oZSxyLG4saSl7Zm9yKG51bGw9PW4mJihuPTApLG51bGw9PWkmJihpPWUubGVuZ3RoKTtuPGk7KXt2YXIgYT1uK2k+Pj4xO3QoZVthXSxyKT4wP2k9YTpuPWErMX1yZXR1cm4gbn19fXZhciBuPXIoZSksaT1uLnJpZ2h0LGE9bi5sZWZ0O2Z1bmN0aW9uIG8odCxlKXtyZXR1cm5bdCxlXX1mdW5jdGlvbiBzKHQpe3JldHVybiBudWxsPT09dD9OYU46K3R9ZnVuY3Rpb24gbCh0LGUpe3ZhciByLG4saT10Lmxlbmd0aCxhPTAsbz0tMSxsPTAsYz0wO2lmKG51bGw9PWUpZm9yKDsrK288aTspaXNOYU4ocj1zKHRbb10pKXx8KGMrPShuPXItbCkqKHItKGwrPW4vKythKSkpO2Vsc2UgZm9yKDsrK288aTspaXNOYU4ocj1zKGUodFtvXSxvLHQpKSl8fChjKz0obj1yLWwpKihyLShsKz1uLysrYSkpKTtpZihhPjEpcmV0dXJuIGMvKGEtMSl9ZnVuY3Rpb24gYyh0LGUpe3ZhciByPWwodCxlKTtyZXR1cm4gcj9NYXRoLnNxcnQocik6cn1mdW5jdGlvbiB1KHQsZSl7dmFyIHIsbixpLGE9dC5sZW5ndGgsbz0tMTtpZihudWxsPT1lKXtmb3IoOysrbzxhOylpZihudWxsIT0ocj10W29dKSYmcj49cilmb3Iobj1pPXI7KytvPGE7KW51bGwhPShyPXRbb10pJiYobj5yJiYobj1yKSxpPHImJihpPXIpKX1lbHNlIGZvcig7KytvPGE7KWlmKG51bGwhPShyPWUodFtvXSxvLHQpKSYmcj49cilmb3Iobj1pPXI7KytvPGE7KW51bGwhPShyPWUodFtvXSxvLHQpKSYmKG4+ciYmKG49ciksaTxyJiYoaT1yKSk7cmV0dXJuW24saV19dmFyIGg9QXJyYXkucHJvdG90eXBlLGY9aC5zbGljZSxwPWgubWFwO2Z1bmN0aW9uIGQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIGcodCl7cmV0dXJuIHR9ZnVuY3Rpb24gdih0LGUscil7dD0rdCxlPStlLHI9KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8oZT10LHQ9MCwxKTppPDM/MTorcjtmb3IodmFyIG49LTEsaT0wfE1hdGgubWF4KDAsTWF0aC5jZWlsKChlLXQpL3IpKSxhPW5ldyBBcnJheShpKTsrK248aTspYVtuXT10K24qcjtyZXR1cm4gYX12YXIgbT1NYXRoLnNxcnQoNTApLHk9TWF0aC5zcXJ0KDEwKSx4PU1hdGguc3FydCgyKTtmdW5jdGlvbiBiKHQsZSxyKXt2YXIgbj0oZS10KS9NYXRoLm1heCgwLHIpLGk9TWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMTApLGE9bi9NYXRoLnBvdygxMCxpKTtyZXR1cm4gaT49MD8oYT49bT8xMDphPj15PzU6YT49eD8yOjEpKk1hdGgucG93KDEwLGkpOi1NYXRoLnBvdygxMCwtaSkvKGE+PW0/MTA6YT49eT81OmE+PXg/MjoxKX1mdW5jdGlvbiBfKHQsZSxyKXt2YXIgbj1NYXRoLmFicyhlLXQpL01hdGgubWF4KDAsciksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCkpLGE9bi9pO3JldHVybiBhPj1tP2kqPTEwOmE+PXk/aSo9NTphPj14JiYoaSo9MiksZTx0Py1pOml9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMikrMX1mdW5jdGlvbiBrKHQsZSxyKXtpZihudWxsPT1yJiYocj1zKSxuPXQubGVuZ3RoKXtpZigoZT0rZSk8PTB8fG48MilyZXR1cm4rcih0WzBdLDAsdCk7aWYoZT49MSlyZXR1cm4rcih0W24tMV0sbi0xLHQpO3ZhciBuLGk9KG4tMSkqZSxhPU1hdGguZmxvb3IoaSksbz0rcih0W2FdLGEsdCk7cmV0dXJuIG8rKCtyKHRbYSsxXSxhKzEsdCktbykqKGktYSl9fWZ1bmN0aW9uIEEodCxlKXt2YXIgcixuLGk9dC5sZW5ndGgsYT0tMTtpZihudWxsPT1lKXtmb3IoOysrYTxpOylpZihudWxsIT0ocj10W2FdKSYmcj49cilmb3Iobj1yOysrYTxpOyludWxsIT0ocj10W2FdKSYmbj5yJiYobj1yKX1lbHNlIGZvcig7KythPGk7KWlmKG51bGwhPShyPWUodFthXSxhLHQpKSYmcj49cilmb3Iobj1yOysrYTxpOyludWxsIT0ocj1lKHRbYV0sYSx0KSkmJm4+ciYmKG49cik7cmV0dXJuIG59ZnVuY3Rpb24gVCh0KXtpZighKGk9dC5sZW5ndGgpKXJldHVybltdO2Zvcih2YXIgZT0tMSxyPUEodCxNKSxuPW5ldyBBcnJheShyKTsrK2U8cjspZm9yKHZhciBpLGE9LTEsbz1uW2VdPW5ldyBBcnJheShpKTsrK2E8aTspb1thXT10W2FdW2VdO3JldHVybiBufWZ1bmN0aW9uIE0odCl7cmV0dXJuIHQubGVuZ3RofXQuYmlzZWN0PWksdC5iaXNlY3RSaWdodD1pLHQuYmlzZWN0TGVmdD1hLHQuYXNjZW5kaW5nPWUsdC5iaXNlY3Rvcj1yLHQuY3Jvc3M9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxzLGw9dC5sZW5ndGgsYz1lLmxlbmd0aCx1PW5ldyBBcnJheShsKmMpO2ZvcihudWxsPT1yJiYocj1vKSxuPWE9MDtuPGw7KytuKWZvcihzPXRbbl0saT0wO2k8YzsrK2ksKythKXVbYV09cihzLGVbaV0pO3JldHVybiB1fSx0LmRlc2NlbmRpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59LHQuZGV2aWF0aW9uPWMsdC5leHRlbnQ9dSx0Lmhpc3RvZ3JhbT1mdW5jdGlvbigpe3ZhciB0PWcsZT11LHI9dztmdW5jdGlvbiBuKG4pe3ZhciBhLG8scz1uLmxlbmd0aCxsPW5ldyBBcnJheShzKTtmb3IoYT0wO2E8czsrK2EpbFthXT10KG5bYV0sYSxuKTt2YXIgYz1lKGwpLHU9Y1swXSxoPWNbMV0sZj1yKGwsdSxoKTtBcnJheS5pc0FycmF5KGYpfHwoZj1fKHUsaCxmKSxmPXYoTWF0aC5jZWlsKHUvZikqZixoLGYpKTtmb3IodmFyIHA9Zi5sZW5ndGg7ZlswXTw9dTspZi5zaGlmdCgpLC0tcDtmb3IoO2ZbcC0xXT5oOylmLnBvcCgpLC0tcDt2YXIgZCxnPW5ldyBBcnJheShwKzEpO2ZvcihhPTA7YTw9cDsrK2EpKGQ9Z1thXT1bXSkueDA9YT4wP2ZbYS0xXTp1LGQueDE9YTxwP2ZbYV06aDtmb3IoYT0wO2E8czsrK2EpdTw9KG89bFthXSkmJm88PWgmJmdbaShmLG8sMCxwKV0ucHVzaChuW2FdKTtyZXR1cm4gZ31yZXR1cm4gbi52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6ZChlKSxuKTp0fSxuLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6ZChbdFswXSx0WzFdXSksbik6ZX0sbi50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpBcnJheS5pc0FycmF5KHQpP2QoZi5jYWxsKHQpKTpkKHQpLG4pOnJ9LG59LHQudGhyZXNob2xkRnJlZWRtYW5EaWFjb25pcz1mdW5jdGlvbih0LHIsbil7cmV0dXJuIHQ9cC5jYWxsKHQscykuc29ydChlKSxNYXRoLmNlaWwoKG4tcikvKDIqKGsodCwuNzUpLWsodCwuMjUpKSpNYXRoLnBvdyh0Lmxlbmd0aCwtMS8zKSkpfSx0LnRocmVzaG9sZFNjb3R0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gTWF0aC5jZWlsKChyLWUpLygzLjUqYyh0KSpNYXRoLnBvdyh0Lmxlbmd0aCwtMS8zKSkpfSx0LnRocmVzaG9sZFN0dXJnZXM9dyx0Lm1heD1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10Lmxlbmd0aCxhPS0xO2lmKG51bGw9PWUpe2Zvcig7KythPGk7KWlmKG51bGwhPShyPXRbYV0pJiZyPj1yKWZvcihuPXI7KythPGk7KW51bGwhPShyPXRbYV0pJiZyPm4mJihuPXIpfWVsc2UgZm9yKDsrK2E8aTspaWYobnVsbCE9KHI9ZSh0W2FdLGEsdCkpJiZyPj1yKWZvcihuPXI7KythPGk7KW51bGwhPShyPWUodFthXSxhLHQpKSYmcj5uJiYobj1yKTtyZXR1cm4gbn0sdC5tZWFuPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10Lmxlbmd0aCxpPW4sYT0tMSxvPTA7aWYobnVsbD09ZSlmb3IoOysrYTxuOylpc05hTihyPXModFthXSkpPy0taTpvKz1yO2Vsc2UgZm9yKDsrK2E8bjspaXNOYU4ocj1zKGUodFthXSxhLHQpKSk/LS1pOm8rPXI7aWYoaSlyZXR1cm4gby9pfSx0Lm1lZGlhbj1mdW5jdGlvbih0LHIpe3ZhciBuLGk9dC5sZW5ndGgsYT0tMSxvPVtdO2lmKG51bGw9PXIpZm9yKDsrK2E8aTspaXNOYU4obj1zKHRbYV0pKXx8by5wdXNoKG4pO2Vsc2UgZm9yKDsrK2E8aTspaXNOYU4obj1zKHIodFthXSxhLHQpKSl8fG8ucHVzaChuKTtyZXR1cm4gayhvLnNvcnQoZSksLjUpfSx0Lm1lcmdlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saT10Lmxlbmd0aCxhPS0xLG89MDsrK2E8aTspbys9dFthXS5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KG8pOy0taT49MDspZm9yKGU9KG49dFtpXSkubGVuZ3RoOy0tZT49MDspclstLW9dPW5bZV07cmV0dXJuIHJ9LHQubWluPUEsdC5wYWlycz1mdW5jdGlvbih0LGUpe251bGw9PWUmJihlPW8pO2Zvcih2YXIgcj0wLG49dC5sZW5ndGgtMSxpPXRbMF0sYT1uZXcgQXJyYXkobjwwPzA6bik7cjxuOylhW3JdPWUoaSxpPXRbKytyXSk7cmV0dXJuIGF9LHQucGVybXV0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09dFtlW3JdXTtyZXR1cm4gbn0sdC5xdWFudGlsZT1rLHQucmFuZ2U9dix0LnNjYW49ZnVuY3Rpb24odCxyKXtpZihuPXQubGVuZ3RoKXt2YXIgbixpLGE9MCxvPTAscz10W29dO2ZvcihudWxsPT1yJiYocj1lKTsrK2E8bjspKHIoaT10W2FdLHMpPDB8fDAhPT1yKHMscykpJiYocz1pLG89YSk7cmV0dXJuIDA9PT1yKHMscyk/bzp2b2lkIDB9fSx0LnNodWZmbGU9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpLGE9KG51bGw9PXI/dC5sZW5ndGg6ciktKGU9bnVsbD09ZT8wOitlKTthOylpPU1hdGgucmFuZG9tKCkqYS0tfDAsbj10W2ErZV0sdFthK2VdPXRbaStlXSx0W2krZV09bjtyZXR1cm4gdH0sdC5zdW09ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQubGVuZ3RoLGk9LTEsYT0wO2lmKG51bGw9PWUpZm9yKDsrK2k8bjspKHI9K3RbaV0pJiYoYSs9cik7ZWxzZSBmb3IoOysraTxuOykocj0rZSh0W2ldLGksdCkpJiYoYSs9cik7cmV0dXJuIGF9LHQudGlja3M9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHM9LTE7aWYocj0rciwodD0rdCk9PShlPStlKSYmcj4wKXJldHVyblt0XTtpZigobj1lPHQpJiYoaT10LHQ9ZSxlPWkpLDA9PT0obz1iKHQsZSxyKSl8fCFpc0Zpbml0ZShvKSlyZXR1cm5bXTtpZihvPjApZm9yKHQ9TWF0aC5jZWlsKHQvbyksZT1NYXRoLmZsb29yKGUvbyksYT1uZXcgQXJyYXkoaT1NYXRoLmNlaWwoZS10KzEpKTsrK3M8aTspYVtzXT0odCtzKSpvO2Vsc2UgZm9yKHQ9TWF0aC5mbG9vcih0Km8pLGU9TWF0aC5jZWlsKGUqbyksYT1uZXcgQXJyYXkoaT1NYXRoLmNlaWwodC1lKzEpKTsrK3M8aTspYVtzXT0odC1zKS9vO3JldHVybiBuJiZhLnJldmVyc2UoKSxhfSx0LnRpY2tJbmNyZW1lbnQ9Yix0LnRpY2tTdGVwPV8sdC50cmFuc3Bvc2U9VCx0LnZhcmlhbmNlPWwsdC56aXA9ZnVuY3Rpb24oKXtyZXR1cm4gVChhcmd1bWVudHMpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0oXCJvYmplY3RcIj09dHlwZW9mIHImJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBlP3I6bi5kMz1uLmQzfHx7fSl9LHt9XSwxNDQ6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbjtuPXRoaXMsZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZSgpe31mdW5jdGlvbiByKHQscil7dmFyIG49bmV3IGU7aWYodCBpbnN0YW5jZW9mIGUpdC5lYWNoKGZ1bmN0aW9uKHQsZSl7bi5zZXQoZSx0KX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIGksYT0tMSxvPXQubGVuZ3RoO2lmKG51bGw9PXIpZm9yKDsrK2E8bzspbi5zZXQoYSx0W2FdKTtlbHNlIGZvcig7KythPG87KW4uc2V0KHIoaT10W2FdLGEsdCksaSl9ZWxzZSBpZih0KWZvcih2YXIgcyBpbiB0KW4uc2V0KHMsdFtzXSk7cmV0dXJuIG59ZS5wcm90b3R5cGU9ci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmUsaGFzOmZ1bmN0aW9uKHQpe3JldHVyblwiJFwiK3QgaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW1wiJFwiK3RdfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpc1tcIiRcIit0XT1lLHRoaXN9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT1cIiRcIit0O3JldHVybiBlIGluIHRoaXMmJmRlbGV0ZSB0aGlzW2VdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKVwiJFwiPT09dFswXSYmZGVsZXRlIHRoaXNbdF19LGtleXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcylcIiRcIj09PWVbMF0mJnQucHVzaChlLnNsaWNlKDEpKTtyZXR1cm4gdH0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpXCIkXCI9PT1lWzBdJiZ0LnB1c2godGhpc1tlXSk7cmV0dXJuIHR9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcylcIiRcIj09PWVbMF0mJnQucHVzaCh7a2V5OmUuc2xpY2UoMSksdmFsdWU6dGhpc1tlXX0pO3JldHVybiB0fSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtmb3IodmFyIGUgaW4gdGhpcylcIiRcIj09PWVbMF0mJisrdDtyZXR1cm4gdH0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcylpZihcIiRcIj09PXRbMF0pcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMpXCIkXCI9PT1lWzBdJiZ0KHRoaXNbZV0sZS5zbGljZSgxKSx0aGlzKX19O2Z1bmN0aW9uIG4oKXtyZXR1cm57fX1mdW5jdGlvbiBpKHQsZSxyKXt0W2VdPXJ9ZnVuY3Rpb24gYSgpe3JldHVybiByKCl9ZnVuY3Rpb24gbyh0LGUscil7dC5zZXQoZSxyKX1mdW5jdGlvbiBzKCl7fXZhciBsPXIucHJvdG90eXBlO2Z1bmN0aW9uIGModCxlKXt2YXIgcj1uZXcgcztpZih0IGluc3RhbmNlb2Ygcyl0LmVhY2goZnVuY3Rpb24odCl7ci5hZGQodCl9KTtlbHNlIGlmKHQpe3ZhciBuPS0xLGk9dC5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysrbjxpOylyLmFkZCh0W25dKTtlbHNlIGZvcig7KytuPGk7KXIuYWRkKGUodFtuXSxuLHQpKX1yZXR1cm4gcn1zLnByb3RvdHlwZT1jLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cyxoYXM6bC5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW1wiJFwiKyh0Kz1cIlwiKV09dCx0aGlzfSxyZW1vdmU6bC5yZW1vdmUsY2xlYXI6bC5jbGVhcix2YWx1ZXM6bC5rZXlzLHNpemU6bC5zaXplLGVtcHR5OmwuZW1wdHksZWFjaDpsLmVhY2h9O3QubmVzdD1mdW5jdGlvbigpe3ZhciB0LGUscyxsPVtdLGM9W107ZnVuY3Rpb24gdShuLGksYSxvKXtpZihpPj1sLmxlbmd0aClyZXR1cm4gbnVsbCE9dCYmbi5zb3J0KHQpLG51bGwhPWU/ZShuKTpuO2Zvcih2YXIgcyxjLGgsZj0tMSxwPW4ubGVuZ3RoLGQ9bFtpKytdLGc9cigpLHY9YSgpOysrZjxwOykoaD1nLmdldChzPWQoYz1uW2ZdKStcIlwiKSk/aC5wdXNoKGMpOmcuc2V0KHMsW2NdKTtyZXR1cm4gZy5lYWNoKGZ1bmN0aW9uKHQsZSl7byh2LGUsdSh0LGksYSxvKSl9KSx2fXJldHVybiBzPXtvYmplY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIHUodCwwLG4saSl9LG1hcDpmdW5jdGlvbih0KXtyZXR1cm4gdSh0LDAsYSxvKX0sZW50cmllczpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24gdChyLG4pe2lmKCsrbj5sLmxlbmd0aClyZXR1cm4gcjt2YXIgaSxhPWNbbi0xXTtyZXR1cm4gbnVsbCE9ZSYmbj49bC5sZW5ndGg/aT1yLmVudHJpZXMoKTooaT1bXSxyLmVhY2goZnVuY3Rpb24oZSxyKXtpLnB1c2goe2tleTpyLHZhbHVlczp0KGUsbil9KX0pKSxudWxsIT1hP2kuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBhKHQua2V5LGUua2V5KX0pOml9KHUodCwwLGEsbyksMCl9LGtleTpmdW5jdGlvbih0KXtyZXR1cm4gbC5wdXNoKHQpLHN9LHNvcnRLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiBjW2wubGVuZ3RoLTFdPXQsc30sc29ydFZhbHVlczpmdW5jdGlvbihlKXtyZXR1cm4gdD1lLHN9LHJvbGx1cDpmdW5jdGlvbih0KXtyZXR1cm4gZT10LHN9fX0sdC5zZXQ9Yyx0Lm1hcD1yLHQua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2gocik7cmV0dXJuIGV9LHQudmFsdWVzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh0W3JdKTtyZXR1cm4gZX0sdC5lbnRyaWVzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh7a2V5OnIsdmFsdWU6dFtyXX0pO3JldHVybiBlfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0oXCJvYmplY3RcIj09dHlwZW9mIHImJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBlP3I6bi5kMz1uLmQzfHx7fSl9LHt9XSwxNDU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbjtuPXRoaXMsZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZSh0LGUscil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gcih0LGUpe3ZhciByPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiBlKXJbbl09ZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBuKCl7fXZhciBpPVwiXFxcXHMqKFsrLV0/XFxcXGQrKVxcXFxzKlwiLGE9XCJcXFxccyooWystXT9cXFxcZCpcXFxcLj9cXFxcZCsoPzpbZUVdWystXT9cXFxcZCspPylcXFxccypcIixvPVwiXFxcXHMqKFsrLV0/XFxcXGQqXFxcXC4/XFxcXGQrKD86W2VFXVsrLV0/XFxcXGQrKT8pJVxcXFxzKlwiLHM9L14jKFswLTlhLWZdezN9KSQvLGw9L14jKFswLTlhLWZdezZ9KSQvLGM9bmV3IFJlZ0V4cChcIl5yZ2JcXFxcKFwiK1tpLGksaV0rXCJcXFxcKSRcIiksdT1uZXcgUmVnRXhwKFwiXnJnYlxcXFwoXCIrW28sbyxvXStcIlxcXFwpJFwiKSxoPW5ldyBSZWdFeHAoXCJecmdiYVxcXFwoXCIrW2ksaSxpLGFdK1wiXFxcXCkkXCIpLGY9bmV3IFJlZ0V4cChcIl5yZ2JhXFxcXChcIitbbyxvLG8sYV0rXCJcXFxcKSRcIikscD1uZXcgUmVnRXhwKFwiXmhzbFxcXFwoXCIrW2EsbyxvXStcIlxcXFwpJFwiKSxkPW5ldyBSZWdFeHAoXCJeaHNsYVxcXFwoXCIrW2EsbyxvLGFdK1wiXFxcXCkkXCIpLGc9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gdih0KXt2YXIgZTtyZXR1cm4gdD0odCtcIlwiKS50cmltKCkudG9Mb3dlckNhc2UoKSwoZT1zLmV4ZWModCkpP25ldyBfKChlPXBhcnNlSW50KGVbMV0sMTYpKT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgxNSZlKTw8NHwxNSZlLDEpOihlPWwuZXhlYyh0KSk/bShwYXJzZUludChlWzFdLDE2KSk6KGU9Yy5leGVjKHQpKT9uZXcgXyhlWzFdLGVbMl0sZVszXSwxKTooZT11LmV4ZWModCkpP25ldyBfKDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLDEpOihlPWguZXhlYyh0KSk/eShlWzFdLGVbMl0sZVszXSxlWzRdKTooZT1mLmV4ZWModCkpP3koMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsZVs0XSk6KGU9cC5leGVjKHQpKT9rKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsMSk6KGU9ZC5leGVjKHQpKT9rKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6Zy5oYXNPd25Qcm9wZXJ0eSh0KT9tKGdbdF0pOlwidHJhbnNwYXJlbnRcIj09PXQ/bmV3IF8oTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBtKHQpe3JldHVybiBuZXcgXyh0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMSl9ZnVuY3Rpb24geSh0LGUscixuKXtyZXR1cm4gbjw9MCYmKHQ9ZT1yPU5hTiksbmV3IF8odCxlLHIsbil9ZnVuY3Rpb24geCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG58fCh0PXYodCkpLHQ/bmV3IF8oKHQ9dC5yZ2IoKSkucix0LmcsdC5iLHQub3BhY2l0eSk6bmV3IF99ZnVuY3Rpb24gYih0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/eCh0KTpuZXcgXyh0LGUscixudWxsPT1uPzE6bil9ZnVuY3Rpb24gXyh0LGUscixuKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gdyh0KXtyZXR1cm4oKHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0KXx8MCkpKTwxNj9cIjBcIjpcIlwiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBrKHQsZSxyLG4pe3JldHVybiBuPD0wP3Q9ZT1yPU5hTjpyPD0wfHxyPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgVCh0LGUscixuKX1mdW5jdGlvbiBBKHQsZSxyLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgVClyZXR1cm4gbmV3IFQodC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2Ygbnx8KHQ9dih0KSksIXQpcmV0dXJuIG5ldyBUO2lmKHQgaW5zdGFuY2VvZiBUKXJldHVybiB0O3ZhciBlPSh0PXQucmdiKCkpLnIvMjU1LHI9dC5nLzI1NSxpPXQuYi8yNTUsYT1NYXRoLm1pbihlLHIsaSksbz1NYXRoLm1heChlLHIsaSkscz1OYU4sbD1vLWEsYz0obythKS8yO3JldHVybiBsPyhzPWU9PT1vPyhyLWkpL2wrNioocjxpKTpyPT09bz8oaS1lKS9sKzI6KGUtcikvbCs0LGwvPWM8LjU/bythOjItby1hLHMqPTYwKTpsPWM+MCYmYzwxPzA6cyxuZXcgVChzLGwsYyx0Lm9wYWNpdHkpfSh0KTpuZXcgVCh0LGUscixudWxsPT1pPzE6aSl9ZnVuY3Rpb24gVCh0LGUscixuKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gTSh0LGUscil7cmV0dXJuIDI1NSoodDw2MD9lKyhyLWUpKnQvNjA6dDwxODA/cjp0PDI0MD9lKyhyLWUpKigyNDAtdCkvNjA6ZSl9ZShuLHYse2Rpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuaGV4KCl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrXCJcIn19KSxlKF8sYixyKG4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBfKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBfKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiAwPD10aGlzLnImJnRoaXMucjw9MjU1JiYwPD10aGlzLmcmJnRoaXMuZzw9MjU1JiYwPD10aGlzLmImJnRoaXMuYjw9MjU1JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OmZ1bmN0aW9uKCl7cmV0dXJuXCIjXCIrdyh0aGlzLnIpK3codGhpcy5nKSt3KHRoaXMuYil9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT9cInJnYihcIjpcInJnYmEoXCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpK1wiLCBcIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKStcIiwgXCIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10P1wiKVwiOlwiLCBcIit0K1wiKVwiKX19KSksZShULEEscihuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgVCh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBUKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxlPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqZSxpPTIqci1uO3JldHVybiBuZXcgXyhNKHQ+PTI0MD90LTI0MDp0KzEyMCxpLG4pLE0odCxpLG4pLE0odDwxMjA/dCsyNDA6dC0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX19KSk7dmFyIFM9TWF0aC5QSS8xODAsRT0xODAvTWF0aC5QSSxDPS45NjQyMixMPTEsej0uODI1MjEsTz00LzI5LEk9Ni8yOSxEPTMqSSpJLFA9SSpJKkk7ZnVuY3Rpb24gUih0KXtpZih0IGluc3RhbmNlb2YgQilyZXR1cm4gbmV3IEIodC5sLHQuYSx0LmIsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgRyl7aWYoaXNOYU4odC5oKSlyZXR1cm4gbmV3IEIodC5sLDAsMCx0Lm9wYWNpdHkpO3ZhciBlPXQuaCpTO3JldHVybiBuZXcgQih0LmwsTWF0aC5jb3MoZSkqdC5jLE1hdGguc2luKGUpKnQuYyx0Lm9wYWNpdHkpfXQgaW5zdGFuY2VvZiBffHwodD14KHQpKTt2YXIgcixuLGk9VSh0LnIpLGE9VSh0LmcpLG89VSh0LmIpLHM9TigoLjIyMjUwNDUqaSsuNzE2ODc4NiphKy4wNjA2MTY5Km8pL0wpO3JldHVybiBpPT09YSYmYT09PW8/cj1uPXM6KHI9TigoLjQzNjA3NDcqaSsuMzg1MDY0OSphKy4xNDMwODA0Km8pL0MpLG49TigoLjAxMzkzMjIqaSsuMDk3MTA0NSphKy43MTQxNzMzKm8pL3opKSxuZXcgQigxMTYqcy0xNiw1MDAqKHItcyksMjAwKihzLW4pLHQub3BhY2l0eSl9ZnVuY3Rpb24gRih0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/Uih0KTpuZXcgQih0LGUscixudWxsPT1uPzE6bil9ZnVuY3Rpb24gQih0LGUscixuKXt0aGlzLmw9K3QsdGhpcy5hPStlLHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gTih0KXtyZXR1cm4gdD5QP01hdGgucG93KHQsMS8zKTp0L0QrT31mdW5jdGlvbiBqKHQpe3JldHVybiB0Pkk/dCp0KnQ6RCoodC1PKX1mdW5jdGlvbiBWKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gVSh0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBxKHQpe2lmKHQgaW5zdGFuY2VvZiBHKXJldHVybiBuZXcgRyh0LmgsdC5jLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBCfHwodD1SKHQpKSwwPT09dC5hJiYwPT09dC5iKXJldHVybiBuZXcgRyhOYU4sMCx0LmwsdC5vcGFjaXR5KTt2YXIgZT1NYXRoLmF0YW4yKHQuYix0LmEpKkU7cmV0dXJuIG5ldyBHKGU8MD9lKzM2MDplLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIEgodCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3EodCk6bmV3IEcodCxlLHIsbnVsbD09bj8xOm4pfWZ1bmN0aW9uIEcodCxlLHIsbil7dGhpcy5oPSt0LHRoaXMuYz0rZSx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWUoQixGLHIobix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBCKHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQih0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmwrMTYpLzExNixlPWlzTmFOKHRoaXMuYSk/dDp0K3RoaXMuYS81MDAscj1pc05hTih0aGlzLmIpP3Q6dC10aGlzLmIvMjAwO3JldHVybiBuZXcgXyhWKDMuMTMzODU2MSooZT1DKmooZSkpLTEuNjE2ODY2NyoodD1MKmoodCkpLS40OTA2MTQ2KihyPXoqaihyKSkpLFYoLS45Nzg3Njg0KmUrMS45MTYxNDE1KnQrLjAzMzQ1NCpyKSxWKC4wNzE5NDUzKmUtLjIyODk5MTQqdCsxLjQwNTI0MjcqciksdGhpcy5vcGFjaXR5KX19KSksZShHLEgscihuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEcodGhpcy5oLHRoaXMuYyx0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBHKHRoaXMuaCx0aGlzLmMsdGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIFIodGhpcykucmdiKCl9fSkpO3ZhciBZPS0uMTQ4NjEsVz0xLjc4Mjc3LFg9LS4yOTIyNyxaPS0uOTA2NDksJD0xLjk3Mjk0LEo9JCpaLEs9JCpXLFE9VypYLVoqWTtmdW5jdGlvbiB0dCh0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIGV0KXJldHVybiBuZXcgZXQodC5oLHQucyx0LmwsdC5vcGFjaXR5KTt0IGluc3RhbmNlb2YgX3x8KHQ9eCh0KSk7dmFyIGU9dC5yLzI1NSxyPXQuZy8yNTUsbj10LmIvMjU1LGk9KFEqbitKKmUtSypyKS8oUStKLUspLGE9bi1pLG89KCQqKHItaSktWCphKS9aLHM9TWF0aC5zcXJ0KG8qbythKmEpLygkKmkqKDEtaSkpLGw9cz9NYXRoLmF0YW4yKG8sYSkqRS0xMjA6TmFOO3JldHVybiBuZXcgZXQobDwwP2wrMzYwOmwscyxpLHQub3BhY2l0eSl9KHQpOm5ldyBldCh0LGUscixudWxsPT1uPzE6bil9ZnVuY3Rpb24gZXQodCxlLHIsbil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWUoZXQsdHQscihuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgZXQodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcgZXQodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD1pc05hTih0aGlzLmgpPzA6KHRoaXMuaCsxMjApKlMsZT0rdGhpcy5sLHI9aXNOYU4odGhpcy5zKT8wOnRoaXMucyplKigxLWUpLG49TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gbmV3IF8oMjU1KihlK3IqKFkqbitXKmkpKSwyNTUqKGUrciooWCpuK1oqaSkpLDI1NSooZStyKigkKm4pKSx0aGlzLm9wYWNpdHkpfX0pKSx0LmNvbG9yPXYsdC5yZ2I9Yix0LmhzbD1BLHQubGFiPUYsdC5oY2w9SCx0LmxjaD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/cSh0KTpuZXcgRyhyLGUsdCxudWxsPT1uPzE6bil9LHQuZ3JheT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgQih0LDAsMCxudWxsPT1lPzE6ZSl9LHQuY3ViZWhlbGl4PXR0LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfShcIm9iamVjdFwiPT10eXBlb2YgciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGU/cjpuLmQzPW4uZDN8fHt9KX0se31dLDE0NjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuO249dGhpcyxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjt2YXIgZT17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiByKCl7Zm9yKHZhciB0LGU9MCxyPWFyZ3VtZW50cy5sZW5ndGgsaT17fTtlPHI7KytlKXtpZighKHQ9YXJndW1lbnRzW2VdK1wiXCIpfHx0IGluIGkpdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCB0eXBlOiBcIit0KTtpW3RdPVtdfXJldHVybiBuZXcgbihpKX1mdW5jdGlvbiBuKHQpe3RoaXMuXz10fWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHIsbj0wLGk9dC5sZW5ndGg7bjxpOysrbilpZigocj10W25dKS5uYW1lPT09ZSlyZXR1cm4gci52YWx1ZX1mdW5jdGlvbiBhKHQscixuKXtmb3IodmFyIGk9MCxhPXQubGVuZ3RoO2k8YTsrK2kpaWYodFtpXS5uYW1lPT09cil7dFtpXT1lLHQ9dC5zbGljZSgwLGkpLmNvbmNhdCh0LnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6cix2YWx1ZTpufSksdH1uLnByb3RvdHlwZT1yLnByb3RvdHlwZT17Y29uc3RydWN0b3I6bixvbjpmdW5jdGlvbih0LGUpe3ZhciByLG4sbz10aGlzLl8scz0obj1vLCh0K1wiXCIpLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPVwiXCIscj10LmluZGV4T2YoXCIuXCIpO2lmKHI+PTAmJihlPXQuc2xpY2UocisxKSx0PXQuc2xpY2UoMCxyKSksdCYmIW4uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlOiBcIit0KTtyZXR1cm57dHlwZTp0LG5hbWU6ZX19KSksbD0tMSxjPXMubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGNhbGxiYWNrOiBcIitlKTtmb3IoOysrbDxjOylpZihyPSh0PXNbbF0pLnR5cGUpb1tyXT1hKG9bcl0sdC5uYW1lLGUpO2Vsc2UgaWYobnVsbD09ZSlmb3IociBpbiBvKW9bcl09YShvW3JdLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrbDxjOylpZigocj0odD1zW2xdKS50eXBlKSYmKHI9aShvW3JdLHQubmFtZSkpKXJldHVybiByfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIHQ9e30sZT10aGlzLl87Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBuKHQpfSxjYWxsOmZ1bmN0aW9uKHQsZSl7aWYoKHI9YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgcixuLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7KythKWlbYV09YXJndW1lbnRzW2ErMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiK3QpO2ZvcihhPTAscj0obj10aGlzLl9bdF0pLmxlbmd0aDthPHI7KythKW5bYV0udmFsdWUuYXBwbHkoZSxpKX0sYXBwbHk6ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlOiBcIit0KTtmb3IodmFyIG49dGhpcy5fW3RdLGk9MCxhPW4ubGVuZ3RoO2k8YTsrK2kpbltpXS52YWx1ZS5hcHBseShlLHIpfX0sdC5kaXNwYXRjaD1yLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfShcIm9iamVjdFwiPT10eXBlb2YgciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGU/cjpuLmQzPW4uZDN8fHt9KX0se31dLDE0NzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk7bj10aGlzLGk9ZnVuY3Rpb24odCxlLHIsbixpKXtcInVzZSBzdHJpY3RcIjt2YXIgYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LG89ZnVuY3Rpb24oKXtyZXR1cm4gMWUtNiooTWF0aC5yYW5kb20oKS0uNSl9O2Z1bmN0aW9uIHModCl7cmV0dXJuIHQueCt0LnZ4fWZ1bmN0aW9uIGwodCl7cmV0dXJuIHQueSt0LnZ5fWZ1bmN0aW9uIGModCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcihcIm1pc3Npbmc6IFwiK2UpO3JldHVybiByfWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQueH1mdW5jdGlvbiBmKHQpe3JldHVybiB0Lnl9dmFyIHA9MTAsZD1NYXRoLlBJKigzLU1hdGguc3FydCg1KSk7dC5mb3JjZUNlbnRlcj1mdW5jdGlvbih0LGUpe3ZhciByO2Z1bmN0aW9uIG4oKXt2YXIgbixpLGE9ci5sZW5ndGgsbz0wLHM9MDtmb3Iobj0wO248YTsrK24pbys9KGk9cltuXSkueCxzKz1pLnk7Zm9yKG89by9hLXQscz1zL2EtZSxuPTA7bjxhOysrbikoaT1yW25dKS54LT1vLGkueS09c31yZXR1cm4gbnVsbD09dCYmKHQ9MCksbnVsbD09ZSYmKGU9MCksbi5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe3I9dH0sbi54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStlLG4pOnR9LG4ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdCxuKTplfSxufSx0LmZvcmNlQ29sbGlkZT1mdW5jdGlvbih0KXt2YXIgcixuLGk9MSxjPTE7ZnVuY3Rpb24gdSgpe2Zvcih2YXIgdCxhLHUsZixwLGQsZyx2PXIubGVuZ3RoLG09MDttPGM7KyttKWZvcihhPWUucXVhZHRyZWUocixzLGwpLnZpc2l0QWZ0ZXIoaCksdD0wO3Q8djsrK3QpdT1yW3RdLGQ9blt1LmluZGV4XSxnPWQqZCxmPXUueCt1LnZ4LHA9dS55K3UudnksYS52aXNpdCh5KTtmdW5jdGlvbiB5KHQsZSxyLG4sYSl7dmFyIHM9dC5kYXRhLGw9dC5yLGM9ZCtsO2lmKCFzKXJldHVybiBlPmYrY3x8bjxmLWN8fHI+cCtjfHxhPHAtYztpZihzLmluZGV4PnUuaW5kZXgpe3ZhciBoPWYtcy54LXMudngsdj1wLXMueS1zLnZ5LG09aCpoK3YqdjttPGMqYyYmKDA9PT1oJiYobSs9KGg9bygpKSpoKSwwPT09diYmKG0rPSh2PW8oKSkqdiksbT0oYy0obT1NYXRoLnNxcnQobSkpKS9tKmksdS52eCs9KGgqPW0pKihjPShsKj1sKS8oZytsKSksdS52eSs9KHYqPW0pKmMscy52eC09aCooYz0xLWMpLHMudnktPXYqYyl9fX1mdW5jdGlvbiBoKHQpe2lmKHQuZGF0YSlyZXR1cm4gdC5yPW5bdC5kYXRhLmluZGV4XTtmb3IodmFyIGU9dC5yPTA7ZTw0OysrZSl0W2VdJiZ0W2VdLnI+dC5yJiYodC5yPXRbZV0ucil9ZnVuY3Rpb24gZigpe2lmKHIpe3ZhciBlLGksYT1yLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkoYSksZT0wO2U8YTsrK2UpaT1yW2VdLG5baS5pbmRleF09K3QoaSxlLHIpfX1yZXR1cm5cImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiYodD1hKG51bGw9PXQ/MTordCkpLHUuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXQsZigpfSx1Lml0ZXJhdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9K3QsdSk6Y30sdS5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCx1KTppfSx1LnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6YSgrZSksZigpLHUpOnR9LHV9LHQuZm9yY2VMaW5rPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSxzLGwsaD1jLGY9ZnVuY3Rpb24odCl7cmV0dXJuIDEvTWF0aC5taW4oc1t0LnNvdXJjZS5pbmRleF0sc1t0LnRhcmdldC5pbmRleF0pfSxwPWEoMzApLGQ9MTtmdW5jdGlvbiBnKHIpe2Zvcih2YXIgaT0wLGE9dC5sZW5ndGg7aTxkOysraSlmb3IodmFyIHMsYyx1LGgsZixwLGcsdj0wO3Y8YTsrK3YpYz0ocz10W3ZdKS5zb3VyY2UsaD0odT1zLnRhcmdldCkueCt1LnZ4LWMueC1jLnZ4fHxvKCksZj11LnkrdS52eS1jLnktYy52eXx8bygpLGgqPXA9KChwPU1hdGguc3FydChoKmgrZipmKSktblt2XSkvcCpyKmVbdl0sZio9cCx1LnZ4LT1oKihnPWxbdl0pLHUudnktPWYqZyxjLnZ4Kz1oKihnPTEtZyksYy52eSs9ZipnfWZ1bmN0aW9uIHYoKXtpZihpKXt2YXIgYSxvLGM9aS5sZW5ndGgsZj10Lmxlbmd0aCxwPXIubWFwKGksaCk7Zm9yKGE9MCxzPW5ldyBBcnJheShjKTthPGY7KythKShvPXRbYV0pLmluZGV4PWEsXCJvYmplY3RcIiE9dHlwZW9mIG8uc291cmNlJiYoby5zb3VyY2U9dShwLG8uc291cmNlKSksXCJvYmplY3RcIiE9dHlwZW9mIG8udGFyZ2V0JiYoby50YXJnZXQ9dShwLG8udGFyZ2V0KSksc1tvLnNvdXJjZS5pbmRleF09KHNbby5zb3VyY2UuaW5kZXhdfHwwKSsxLHNbby50YXJnZXQuaW5kZXhdPShzW28udGFyZ2V0LmluZGV4XXx8MCkrMTtmb3IoYT0wLGw9bmV3IEFycmF5KGYpO2E8ZjsrK2Epbz10W2FdLGxbYV09c1tvLnNvdXJjZS5pbmRleF0vKHNbby5zb3VyY2UuaW5kZXhdK3Nbby50YXJnZXQuaW5kZXhdKTtlPW5ldyBBcnJheShmKSxtKCksbj1uZXcgQXJyYXkoZikseSgpfX1mdW5jdGlvbiBtKCl7aWYoaSlmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZVtyXT0rZih0W3JdLHIsdCl9ZnVuY3Rpb24geSgpe2lmKGkpZm9yKHZhciBlPTAscj10Lmxlbmd0aDtlPHI7KytlKW5bZV09K3AodFtlXSxlLHQpfXJldHVybiBudWxsPT10JiYodD1bXSksZy5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2k9dCx2KCl9LGcubGlua3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSx2KCksZyk6dH0sZy5pZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD10LGcpOmh9LGcuaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0rdCxnKTpkfSxnLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDphKCt0KSxtKCksZyk6Zn0sZy5kaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6YSgrdCkseSgpLGcpOnB9LGd9LHQuZm9yY2VNYW55Qm9keT1mdW5jdGlvbigpe3ZhciB0LHIsbixpLHM9YSgtMzApLGw9MSxjPTEvMCx1PS44MTtmdW5jdGlvbiBwKGkpe3ZhciBhLG89dC5sZW5ndGgscz1lLnF1YWR0cmVlKHQsaCxmKS52aXNpdEFmdGVyKGcpO2ZvcihuPWksYT0wO2E8bzsrK2Epcj10W2FdLHMudmlzaXQodil9ZnVuY3Rpb24gZCgpe2lmKHQpe3ZhciBlLHIsbj10Lmxlbmd0aDtmb3IoaT1uZXcgQXJyYXkobiksZT0wO2U8bjsrK2Upcj10W2VdLGlbci5pbmRleF09K3MocixlLHQpfX1mdW5jdGlvbiBnKHQpe3ZhciBlLHIsbixhLG8scz0wLGw9MDtpZih0Lmxlbmd0aCl7Zm9yKG49YT1vPTA7bzw0OysrbykoZT10W29dKSYmKHI9TWF0aC5hYnMoZS52YWx1ZSkpJiYocys9ZS52YWx1ZSxsKz1yLG4rPXIqZS54LGErPXIqZS55KTt0Lng9bi9sLHQueT1hL2x9ZWxzZXsoZT10KS54PWUuZGF0YS54LGUueT1lLmRhdGEueTtkb3tzKz1pW2UuZGF0YS5pbmRleF19d2hpbGUoZT1lLm5leHQpfXQudmFsdWU9c31mdW5jdGlvbiB2KHQsZSxhLHMpe2lmKCF0LnZhbHVlKXJldHVybiEwO3ZhciBoPXQueC1yLngsZj10Lnktci55LHA9cy1lLGQ9aCpoK2YqZjtpZihwKnAvdTxkKXJldHVybiBkPGMmJigwPT09aCYmKGQrPShoPW8oKSkqaCksMD09PWYmJihkKz0oZj1vKCkpKmYpLGQ8bCYmKGQ9TWF0aC5zcXJ0KGwqZCkpLHIudngrPWgqdC52YWx1ZSpuL2Qsci52eSs9Zip0LnZhbHVlKm4vZCksITA7aWYoISh0Lmxlbmd0aHx8ZD49Yykpeyh0LmRhdGEhPT1yfHx0Lm5leHQpJiYoMD09PWgmJihkKz0oaD1vKCkpKmgpLDA9PT1mJiYoZCs9KGY9bygpKSpmKSxkPGwmJihkPU1hdGguc3FydChsKmQpKSk7ZG97dC5kYXRhIT09ciYmKHA9aVt0LmRhdGEuaW5kZXhdKm4vZCxyLnZ4Kz1oKnAsci52eSs9ZipwKX13aGlsZSh0PXQubmV4dCl9fXJldHVybiBwLmluaXRpYWxpemU9ZnVuY3Rpb24oZSl7dD1lLGQoKX0scC5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6YSgrdCksZCgpLHApOnN9LHAuZGlzdGFuY2VNaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCp0LHApOk1hdGguc3FydChsKX0scC5kaXN0YW5jZU1heD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10KnQscCk6TWF0aC5zcXJ0KGMpfSxwLnRoZXRhPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQqdCxwKTpNYXRoLnNxcnQodSl9LHB9LHQuZm9yY2VSYWRpYWw9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksbyxzPWEoLjEpO2Z1bmN0aW9uIGwodCl7Zm9yKHZhciBhPTAscz1uLmxlbmd0aDthPHM7KythKXt2YXIgbD1uW2FdLGM9bC54LWV8fDFlLTYsdT1sLnktcnx8MWUtNixoPU1hdGguc3FydChjKmMrdSp1KSxmPShvW2FdLWgpKmlbYV0qdC9oO2wudngrPWMqZixsLnZ5Kz11KmZ9fWZ1bmN0aW9uIGMoKXtpZihuKXt2YXIgZSxyPW4ubGVuZ3RoO2ZvcihpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxlPTA7ZTxyOysrZSlvW2VdPSt0KG5bZV0sZSxuKSxpW2VdPWlzTmFOKG9bZV0pPzA6K3MobltlXSxlLG4pfX1yZXR1cm5cImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiYodD1hKCt0KSksbnVsbD09ZSYmKGU9MCksbnVsbD09ciYmKHI9MCksbC5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe249dCxjKCl9LGwuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OmEoK3QpLGMoKSxsKTpzfSxsLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6YSgrZSksYygpLGwpOnR9LGwueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdCxsKTplfSxsLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3QsbCk6cn0sbH0sdC5mb3JjZVNpbXVsYXRpb249ZnVuY3Rpb24odCl7dmFyIGUsYT0xLG89LjAwMSxzPTEtTWF0aC5wb3cobywxLzMwMCksbD0wLGM9LjYsdT1yLm1hcCgpLGg9aS50aW1lcihnKSxmPW4uZGlzcGF0Y2goXCJ0aWNrXCIsXCJlbmRcIik7ZnVuY3Rpb24gZygpe3YoKSxmLmNhbGwoXCJ0aWNrXCIsZSksYTxvJiYoaC5zdG9wKCksZi5jYWxsKFwiZW5kXCIsZSkpfWZ1bmN0aW9uIHYoKXt2YXIgZSxyLG49dC5sZW5ndGg7Zm9yKGErPShsLWEpKnMsdS5lYWNoKGZ1bmN0aW9uKHQpe3QoYSl9KSxlPTA7ZTxuOysrZSludWxsPT0ocj10W2VdKS5meD9yLngrPXIudngqPWM6KHIueD1yLmZ4LHIudng9MCksbnVsbD09ci5meT9yLnkrPXIudnkqPWM6KHIueT1yLmZ5LHIudnk9MCl9ZnVuY3Rpb24gbSgpe2Zvcih2YXIgZSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKXtpZigoZT10W3JdKS5pbmRleD1yLGlzTmFOKGUueCl8fGlzTmFOKGUueSkpe3ZhciBpPXAqTWF0aC5zcXJ0KHIpLGE9cipkO2UueD1pKk1hdGguY29zKGEpLGUueT1pKk1hdGguc2luKGEpfShpc05hTihlLnZ4KXx8aXNOYU4oZS52eSkpJiYoZS52eD1lLnZ5PTApfX1mdW5jdGlvbiB5KGUpe3JldHVybiBlLmluaXRpYWxpemUmJmUuaW5pdGlhbGl6ZSh0KSxlfXJldHVybiBudWxsPT10JiYodD1bXSksbSgpLGU9e3RpY2s6dixyZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIGgucmVzdGFydChnKSxlfSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGguc3RvcCgpLGV9LG5vZGVzOmZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXIsbSgpLHUuZWFjaCh5KSxlKTp0fSxhbHBoYTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxlKTphfSxhbHBoYU1pbjpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCxlKTpvfSxhbHBoYURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LGUpOitzfSxhbHBoYVRhcmdldDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rdCxlKTpsfSx2ZWxvY2l0eURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTEtdCxlKToxLWN9LGZvcmNlOmZ1bmN0aW9uKHQscil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8obnVsbD09cj91LnJlbW92ZSh0KTp1LnNldCh0LHkocikpLGUpOnUuZ2V0KHQpfSxmaW5kOmZ1bmN0aW9uKGUscixuKXt2YXIgaSxhLG8scyxsLGM9MCx1PXQubGVuZ3RoO2ZvcihudWxsPT1uP249MS8wOm4qPW4sYz0wO2M8dTsrK2MpKG89KGk9ZS0ocz10W2NdKS54KSppKyhhPXItcy55KSphKTxuJiYobD1zLG49byk7cmV0dXJuIGx9LG9uOmZ1bmN0aW9uKHQscil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oZi5vbih0LHIpLGUpOmYub24odCl9fX0sdC5mb3JjZVg9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9YSguMSk7ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGksYT0wLG89ZS5sZW5ndGg7YTxvOysrYSkoaT1lW2FdKS52eCs9KG5bYV0taS54KSpyW2FdKnR9ZnVuY3Rpb24gcygpe2lmKGUpe3ZhciBhLG89ZS5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KG8pLG49bmV3IEFycmF5KG8pLGE9MDthPG87KythKXJbYV09aXNOYU4oblthXT0rdChlW2FdLGEsZSkpPzA6K2koZVthXSxhLGUpfX1yZXR1cm5cImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiYodD1hKG51bGw9PXQ/MDordCkpLG8uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtlPXQscygpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDphKCt0KSxzKCksbyk6aX0sby54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTphKCtlKSxzKCksbyk6dH0sb30sdC5mb3JjZVk9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9YSguMSk7ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGksYT0wLG89ZS5sZW5ndGg7YTxvOysrYSkoaT1lW2FdKS52eSs9KG5bYV0taS55KSpyW2FdKnR9ZnVuY3Rpb24gcygpe2lmKGUpe3ZhciBhLG89ZS5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KG8pLG49bmV3IEFycmF5KG8pLGE9MDthPG87KythKXJbYV09aXNOYU4oblthXT0rdChlW2FdLGEsZSkpPzA6K2koZVthXSxhLGUpfX1yZXR1cm5cImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiYodD1hKG51bGw9PXQ/MDordCkpLG8uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtlPXQscygpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDphKCt0KSxzKCksbyk6aX0sby55PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTphKCtlKSxzKCksbyk6dH0sb30sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LFwib2JqZWN0XCI9PXR5cGVvZiByJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZT9pKHIsdChcImQzLXF1YWR0cmVlXCIpLHQoXCJkMy1jb2xsZWN0aW9uXCIpLHQoXCJkMy1kaXNwYXRjaFwiKSx0KFwiZDMtdGltZXJcIikpOmkobi5kMz1uLmQzfHx7fSxuLmQzLG4uZDMsbi5kMyxuLmQzKX0se1wiZDMtY29sbGVjdGlvblwiOjE0NCxcImQzLWRpc3BhdGNoXCI6MTQ2LFwiZDMtcXVhZHRyZWVcIjoxNTEsXCJkMy10aW1lclwiOjE1NH1dLDE0ODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuO249dGhpcyxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuIHQucGFyZW50PT09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIHIodCxlKXtyZXR1cm4gdCtlLnh9ZnVuY3Rpb24gbih0LGUpe3JldHVybiBNYXRoLm1heCh0LGUueSl9ZnVuY3Rpb24gaSh0KXt2YXIgZT0wLHI9dC5jaGlsZHJlbixuPXImJnIubGVuZ3RoO2lmKG4pZm9yKDstLW4+PTA7KWUrPXJbbl0udmFsdWU7ZWxzZSBlPTE7dC52YWx1ZT1lfWZ1bmN0aW9uIGEodCxlKXt2YXIgcixuLGksYSxzLHU9bmV3IGModCksaD0rdC52YWx1ZSYmKHUudmFsdWU9dC52YWx1ZSksZj1bdV07Zm9yKG51bGw9PWUmJihlPW8pO3I9Zi5wb3AoKTspaWYoaCYmKHIudmFsdWU9K3IuZGF0YS52YWx1ZSksKGk9ZShyLmRhdGEpKSYmKHM9aS5sZW5ndGgpKWZvcihyLmNoaWxkcmVuPW5ldyBBcnJheShzKSxhPXMtMTthPj0wOy0tYSlmLnB1c2gobj1yLmNoaWxkcmVuW2FdPW5ldyBjKGlbYV0pKSxuLnBhcmVudD1yLG4uZGVwdGg9ci5kZXB0aCsxO3JldHVybiB1LmVhY2hCZWZvcmUobCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdC5jaGlsZHJlbn1mdW5jdGlvbiBzKHQpe3QuZGF0YT10LmRhdGEuZGF0YX1mdW5jdGlvbiBsKHQpe3ZhciBlPTA7ZG97dC5oZWlnaHQ9ZX13aGlsZSgodD10LnBhcmVudCkmJnQuaGVpZ2h0PCsrZSl9ZnVuY3Rpb24gYyh0KXt0aGlzLmRhdGE9dCx0aGlzLmRlcHRoPXRoaXMuaGVpZ2h0PTAsdGhpcy5wYXJlbnQ9bnVsbH1jLnByb3RvdHlwZT1hLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Yyxjb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2hBZnRlcihpKX0sZWFjaDpmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhPXRoaXMsbz1bYV07ZG97Zm9yKGU9by5yZXZlcnNlKCksbz1bXTthPWUucG9wKCk7KWlmKHQoYSkscj1hLmNoaWxkcmVuKWZvcihuPTAsaT1yLmxlbmd0aDtuPGk7KytuKW8ucHVzaChyW25dKX13aGlsZShvLmxlbmd0aCk7cmV0dXJuIHRoaXN9LGVhY2hBZnRlcjpmdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGk9dGhpcyxhPVtpXSxvPVtdO2k9YS5wb3AoKTspaWYoby5wdXNoKGkpLGU9aS5jaGlsZHJlbilmb3Iocj0wLG49ZS5sZW5ndGg7cjxuOysrcilhLnB1c2goZVtyXSk7Zm9yKDtpPW8ucG9wKCk7KXQoaSk7cmV0dXJuIHRoaXN9LGVhY2hCZWZvcmU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbj10aGlzLGk9W25dO249aS5wb3AoKTspaWYodChuKSxlPW4uY2hpbGRyZW4pZm9yKHI9ZS5sZW5ndGgtMTtyPj0wOy0tcilpLnB1c2goZVtyXSk7cmV0dXJuIHRoaXN9LHN1bTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoZnVuY3Rpb24oZSl7Zm9yKHZhciByPSt0KGUuZGF0YSl8fDAsbj1lLmNoaWxkcmVuLGk9biYmbi5sZW5ndGg7LS1pPj0wOylyKz1uW2ldLnZhbHVlO2UudmFsdWU9cn0pfSxzb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbiYmZS5jaGlsZHJlbi5zb3J0KHQpfSl9LHBhdGg6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMscj1mdW5jdGlvbih0LGUpe2lmKHQ9PT1lKXJldHVybiB0O3ZhciByPXQuYW5jZXN0b3JzKCksbj1lLmFuY2VzdG9ycygpLGk9bnVsbDtmb3IodD1yLnBvcCgpLGU9bi5wb3AoKTt0PT09ZTspaT10LHQ9ci5wb3AoKSxlPW4ucG9wKCk7cmV0dXJuIGl9KGUsdCksbj1bZV07ZSE9PXI7KWU9ZS5wYXJlbnQsbi5wdXNoKGUpO2Zvcih2YXIgaT1uLmxlbmd0aDt0IT09cjspbi5zcGxpY2UoaSwwLHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIG59LGFuY2VzdG9yczpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W3RdO3Q9dC5wYXJlbnQ7KWUucHVzaCh0KTtyZXR1cm4gZX0sZGVzY2VuZGFudHM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGUpe3QucHVzaChlKX0pLHR9LGxlYXZlczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8dC5wdXNoKGUpfSksdH0sbGlua3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9W107cmV0dXJuIHQuZWFjaChmdW5jdGlvbihyKXtyIT09dCYmZS5wdXNoKHtzb3VyY2U6ci5wYXJlbnQsdGFyZ2V0OnJ9KX0pLGV9LGNvcHk6ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzKS5lYWNoQmVmb3JlKHMpfX07dmFyIHU9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIGgodCl7Zm9yKHZhciBlLHIsbj0wLGk9KHQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbj10Lmxlbmd0aDtuOylyPU1hdGgucmFuZG9tKCkqbi0tfDAsZT10W25dLHRbbl09dFtyXSx0W3JdPWU7cmV0dXJuIHR9KHUuY2FsbCh0KSkpLmxlbmd0aCxhPVtdO248aTspZT10W25dLHImJmQocixlKT8rK246KHI9dihhPWYoYSxlKSksbj0wKTtyZXR1cm4gcn1mdW5jdGlvbiBmKHQsZSl7dmFyIHIsbjtpZihnKGUsdCkpcmV0dXJuW2VdO2ZvcihyPTA7cjx0Lmxlbmd0aDsrK3IpaWYocChlLHRbcl0pJiZnKG0odFtyXSxlKSx0KSlyZXR1cm5bdFtyXSxlXTtmb3Iocj0wO3I8dC5sZW5ndGgtMTsrK3IpZm9yKG49cisxO248dC5sZW5ndGg7KytuKWlmKHAobSh0W3JdLHRbbl0pLGUpJiZwKG0odFtyXSxlKSx0W25dKSYmcChtKHRbbl0sZSksdFtyXSkmJmcoeSh0W3JdLHRbbl0sZSksdCkpcmV0dXJuW3Rbcl0sdFtuXSxlXTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gcCh0LGUpe3ZhciByPXQuci1lLnIsbj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gcjwwfHxyKnI8bipuK2kqaX1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9dC5yLWUucisxZS02LG49ZS54LXQueCxpPWUueS10Lnk7cmV0dXJuIHI+MCYmcipyPm4qbitpKml9ZnVuY3Rpb24gZyh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKWlmKCFkKHQsZVtyXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gdih0KXtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTpyZXR1cm57eDooZT10WzBdKS54LHk6ZS55LHI6ZS5yfTtjYXNlIDI6cmV0dXJuIG0odFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIHkodFswXSx0WzFdLHRbMl0pfXZhciBlfWZ1bmN0aW9uIG0odCxlKXt2YXIgcj10Lngsbj10LnksaT10LnIsYT1lLngsbz1lLnkscz1lLnIsbD1hLXIsYz1vLW4sdT1zLWksaD1NYXRoLnNxcnQobCpsK2MqYyk7cmV0dXJue3g6KHIrYStsL2gqdSkvMix5OihuK28rYy9oKnUpLzIscjooaCtpK3MpLzJ9fWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBuPXQueCxpPXQueSxhPXQucixvPWUueCxzPWUueSxsPWUucixjPXIueCx1PXIueSxoPXIucixmPW4tbyxwPW4tYyxkPWktcyxnPWktdSx2PWwtYSxtPWgtYSx5PW4qbitpKmktYSphLHg9eS1vKm8tcypzK2wqbCxiPXktYypjLXUqdStoKmgsXz1wKmQtZipnLHc9KGQqYi1nKngpLygyKl8pLW4saz0oZyp2LWQqbSkvXyxBPShwKngtZipiKS8oMipfKS1pLFQ9KGYqbS1wKnYpL18sTT1rKmsrVCpULTEsUz0yKihhK3cqaytBKlQpLEU9dyp3K0EqQS1hKmEsQz0tKE0/KFMrTWF0aC5zcXJ0KFMqUy00Kk0qRSkpLygyKk0pOkUvUyk7cmV0dXJue3g6bit3K2sqQyx5OmkrQStUKkMscjpDfX1mdW5jdGlvbiB4KHQsZSxyKXt2YXIgbixpLGEsbyxzPXQueC1lLngsbD10LnktZS55LGM9cypzK2wqbDtjPyhpPWUucityLnIsaSo9aSxvPXQucityLnIsaT4obyo9byk/KG49KGMrby1pKS8oMipjKSxhPU1hdGguc3FydChNYXRoLm1heCgwLG8vYy1uKm4pKSxyLng9dC54LW4qcy1hKmwsci55PXQueS1uKmwrYSpzKToobj0oYytpLW8pLygyKmMpLGE9TWF0aC5zcXJ0KE1hdGgubWF4KDAsaS9jLW4qbikpLHIueD1lLngrbipzLWEqbCxyLnk9ZS55K24qbCthKnMpKTooci54PWUueCtyLnIsci55PWUueSl9ZnVuY3Rpb24gYih0LGUpe3ZhciByPXQucitlLnItMWUtNixuPWUueC10LngsaT1lLnktdC55O3JldHVybiByPjAmJnIqcj5uKm4raSppfWZ1bmN0aW9uIF8odCl7dmFyIGU9dC5fLHI9dC5uZXh0Ll8sbj1lLnIrci5yLGk9KGUueCpyLnIrci54KmUucikvbixhPShlLnkqci5yK3IueSplLnIpL247cmV0dXJuIGkqaSthKmF9ZnVuY3Rpb24gdyh0KXt0aGlzLl89dCx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24gayh0KXtpZighKGk9dC5sZW5ndGgpKXJldHVybiAwO3ZhciBlLHIsbixpLGEsbyxzLGwsYyx1LGY7aWYoKGU9dFswXSkueD0wLGUueT0wLCEoaT4xKSlyZXR1cm4gZS5yO2lmKHI9dFsxXSxlLng9LXIucixyLng9ZS5yLHIueT0wLCEoaT4yKSlyZXR1cm4gZS5yK3Iucjt4KHIsZSxuPXRbMl0pLGU9bmV3IHcoZSkscj1uZXcgdyhyKSxuPW5ldyB3KG4pLGUubmV4dD1uLnByZXZpb3VzPXIsci5uZXh0PWUucHJldmlvdXM9bixuLm5leHQ9ci5wcmV2aW91cz1lO3Q6Zm9yKHM9MztzPGk7KytzKXt4KGUuXyxyLl8sbj10W3NdKSxuPW5ldyB3KG4pLGw9ci5uZXh0LGM9ZS5wcmV2aW91cyx1PXIuXy5yLGY9ZS5fLnI7ZG97aWYodTw9Zil7aWYoYihsLl8sbi5fKSl7cj1sLGUubmV4dD1yLHIucHJldmlvdXM9ZSwtLXM7Y29udGludWUgdH11Kz1sLl8ucixsPWwubmV4dH1lbHNle2lmKGIoYy5fLG4uXykpeyhlPWMpLm5leHQ9cixyLnByZXZpb3VzPWUsLS1zO2NvbnRpbnVlIHR9Zis9Yy5fLnIsYz1jLnByZXZpb3VzfX13aGlsZShsIT09Yy5uZXh0KTtmb3Iobi5wcmV2aW91cz1lLG4ubmV4dD1yLGUubmV4dD1yLnByZXZpb3VzPXI9bixhPV8oZSk7KG49bi5uZXh0KSE9PXI7KShvPV8obikpPGEmJihlPW4sYT1vKTtyPWUubmV4dH1mb3IoZT1bci5fXSxuPXI7KG49bi5uZXh0KSE9PXI7KWUucHVzaChuLl8pO2ZvcihuPWgoZSkscz0wO3M8aTsrK3MpKGU9dFtzXSkueC09bi54LGUueS09bi55O3JldHVybiBuLnJ9ZnVuY3Rpb24gQSh0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdH1mdW5jdGlvbiBUKCl7cmV0dXJuIDB9ZnVuY3Rpb24gTSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gUyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHQudmFsdWUpfWZ1bmN0aW9uIEUodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW58fChlLnI9TWF0aC5tYXgoMCwrdChlKXx8MCkpfX1mdW5jdGlvbiBDKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe2lmKG49ci5jaGlsZHJlbil7dmFyIG4saSxhLG89bi5sZW5ndGgscz10KHIpKmV8fDA7aWYocylmb3IoaT0wO2k8bzsrK2kpbltpXS5yKz1zO2lmKGE9ayhuKSxzKWZvcihpPTA7aTxvOysraSluW2ldLnItPXM7ci5yPWErc319fWZ1bmN0aW9uIEwodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPWUucGFyZW50O2Uucio9dCxyJiYoZS54PXIueCt0KmUueCxlLnk9ci55K3QqZS55KX19ZnVuY3Rpb24geih0KXt0LngwPU1hdGgucm91bmQodC54MCksdC55MD1NYXRoLnJvdW5kKHQueTApLHQueDE9TWF0aC5yb3VuZCh0LngxKSx0LnkxPU1hdGgucm91bmQodC55MSl9ZnVuY3Rpb24gTyh0LGUscixuLGkpe2Zvcih2YXIgYSxvPXQuY2hpbGRyZW4scz0tMSxsPW8ubGVuZ3RoLGM9dC52YWx1ZSYmKG4tZSkvdC52YWx1ZTsrK3M8bDspKGE9b1tzXSkueTA9cixhLnkxPWksYS54MD1lLGEueDE9ZSs9YS52YWx1ZSpjfXZhciBJPVwiJFwiLEQ9e2RlcHRoOi0xfSxQPXt9O2Z1bmN0aW9uIFIodCl7cmV0dXJuIHQuaWR9ZnVuY3Rpb24gRih0KXtyZXR1cm4gdC5wYXJlbnRJZH1mdW5jdGlvbiBCKHQsZSl7cmV0dXJuIHQucGFyZW50PT09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIE4odCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZT9lWzBdOnQudH1mdW5jdGlvbiBqKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGU/ZVtlLmxlbmd0aC0xXTp0LnR9ZnVuY3Rpb24gVih0LGUscil7dmFyIG49ci8oZS5pLXQuaSk7ZS5jLT1uLGUucys9cix0LmMrPW4sZS56Kz1yLGUubSs9cn1mdW5jdGlvbiBVKHQsZSxyKXtyZXR1cm4gdC5hLnBhcmVudD09PWUucGFyZW50P3QuYTpyfWZ1bmN0aW9uIHEodCxlKXt0aGlzLl89dCx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9ZX1mdW5jdGlvbiBIKHQsZSxyLG4saSl7Zm9yKHZhciBhLG89dC5jaGlsZHJlbixzPS0xLGw9by5sZW5ndGgsYz10LnZhbHVlJiYoaS1yKS90LnZhbHVlOysrczxsOykoYT1vW3NdKS54MD1lLGEueDE9bixhLnkwPXIsYS55MT1yKz1hLnZhbHVlKmN9cS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjLnByb3RvdHlwZSk7dmFyIEc9KDErTWF0aC5zcXJ0KDUpKS8yO2Z1bmN0aW9uIFkodCxlLHIsbixpLGEpe2Zvcih2YXIgbyxzLGwsYyx1LGgsZixwLGQsZyx2LG09W10seT1lLmNoaWxkcmVuLHg9MCxiPTAsXz15Lmxlbmd0aCx3PWUudmFsdWU7eDxfOyl7bD1pLXIsYz1hLW47ZG97dT15W2IrK10udmFsdWV9d2hpbGUoIXUmJmI8Xyk7Zm9yKGg9Zj11LHY9dSp1KihnPU1hdGgubWF4KGMvbCxsL2MpLyh3KnQpKSxkPU1hdGgubWF4KGYvdix2L2gpO2I8XzsrK2Ipe2lmKHUrPXM9eVtiXS52YWx1ZSxzPGgmJihoPXMpLHM+ZiYmKGY9cyksdj11KnUqZywocD1NYXRoLm1heChmL3Ysdi9oKSk+ZCl7dS09czticmVha31kPXB9bS5wdXNoKG89e3ZhbHVlOnUsZGljZTpsPGMsY2hpbGRyZW46eS5zbGljZSh4LGIpfSksby5kaWNlP08obyxyLG4saSx3P24rPWMqdS93OmEpOkgobyxyLG4sdz9yKz1sKnUvdzppLGEpLHctPXUseD1ifXJldHVybiBtfXZhciBXPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0LHIsbixpLGEpe1koZSx0LHIsbixpLGEpfXJldHVybiByLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LHJ9KEcpO3ZhciBYPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0LHIsbixpLGEpe2lmKChvPXQuX3NxdWFyaWZ5KSYmby5yYXRpbz09PWUpZm9yKHZhciBvLHMsbCxjLHUsaD0tMSxmPW8ubGVuZ3RoLHA9dC52YWx1ZTsrK2g8Zjspe2ZvcihsPShzPW9baF0pLmNoaWxkcmVuLGM9cy52YWx1ZT0wLHU9bC5sZW5ndGg7Yzx1OysrYylzLnZhbHVlKz1sW2NdLnZhbHVlO3MuZGljZT9PKHMscixuLGksbis9KGEtbikqcy52YWx1ZS9wKTpIKHMscixuLHIrPShpLXIpKnMudmFsdWUvcCxhKSxwLT1zLnZhbHVlfWVsc2UgdC5fc3F1YXJpZnk9bz1ZKGUsdCxyLG4saSxhKSxvLnJhdGlvPWV9cmV0dXJuIHIucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIHQoKGU9K2UpPjE/ZToxKX0scn0oRyk7dC5jbHVzdGVyPWZ1bmN0aW9uKCl7dmFyIHQ9ZSxpPTEsYT0xLG89ITE7ZnVuY3Rpb24gcyhlKXt2YXIgcyxsPTA7ZS5lYWNoQWZ0ZXIoZnVuY3Rpb24oZSl7dmFyIGk9ZS5jaGlsZHJlbjtpPyhlLng9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVkdWNlKHIsMCkvdC5sZW5ndGh9KGkpLGUueT1mdW5jdGlvbih0KXtyZXR1cm4gMSt0LnJlZHVjZShuLDApfShpKSk6KGUueD1zP2wrPXQoZSxzKTowLGUueT0wLHM9ZSl9KTt2YXIgYz1mdW5jdGlvbih0KXtmb3IodmFyIGU7ZT10LmNoaWxkcmVuOyl0PWVbMF07cmV0dXJuIHR9KGUpLHU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlO2U9dC5jaGlsZHJlbjspdD1lW2UubGVuZ3RoLTFdO3JldHVybiB0fShlKSxoPWMueC10KGMsdSkvMixmPXUueCt0KHUsYykvMjtyZXR1cm4gZS5lYWNoQWZ0ZXIobz9mdW5jdGlvbih0KXt0Lng9KHQueC1lLngpKmksdC55PShlLnktdC55KSphfTpmdW5jdGlvbih0KXt0Lng9KHQueC1oKS8oZi1oKSppLHQueT0oMS0oZS55P3QueS9lLnk6MSkpKmF9KX1yZXR1cm4gcy5zZXBhcmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUscyk6dH0scy5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSExLGk9K3RbMF0sYT0rdFsxXSxzKTpvP251bGw6W2ksYV19LHMubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ITAsaT0rdFswXSxhPSt0WzFdLHMpOm8/W2ksYV06bnVsbH0sc30sdC5oaWVyYXJjaHk9YSx0LnBhY2s9ZnVuY3Rpb24oKXt2YXIgdD1udWxsLGU9MSxyPTEsbj1UO2Z1bmN0aW9uIGkoaSl7cmV0dXJuIGkueD1lLzIsaS55PXIvMix0P2kuZWFjaEJlZm9yZShFKHQpKS5lYWNoQWZ0ZXIoQyhuLC41KSkuZWFjaEJlZm9yZShMKDEpKTppLmVhY2hCZWZvcmUoRShTKSkuZWFjaEFmdGVyKEMoVCwxKSkuZWFjaEFmdGVyKEMobixpLnIvTWF0aC5taW4oZSxyKSkpLmVhY2hCZWZvcmUoTChNYXRoLm1pbihlLHIpLygyKmkucikpKSxpfXJldHVybiBpLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1udWxsPT0ocj1lKT9udWxsOkEociksaSk6dDt2YXIgcn0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLHI9K3RbMV0saSk6W2Uscl19LGkucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6TSgrdCksaSk6bn0saX0sdC5wYWNrU2libGluZ3M9ZnVuY3Rpb24odCl7cmV0dXJuIGsodCksdH0sdC5wYWNrRW5jbG9zZT1oLHQucGFydGl0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9MSxlPTEscj0wLG49ITE7ZnVuY3Rpb24gaShpKXt2YXIgYT1pLmhlaWdodCsxO3JldHVybiBpLngwPWkueTA9cixpLngxPXQsaS55MT1lL2EsaS5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe24uY2hpbGRyZW4mJk8obixuLngwLHQqKG4uZGVwdGgrMSkvZSxuLngxLHQqKG4uZGVwdGgrMikvZSk7dmFyIGk9bi54MCxhPW4ueTAsbz1uLngxLXIscz1uLnkxLXI7bzxpJiYoaT1vPShpK28pLzIpLHM8YSYmKGE9cz0oYStzKS8yKSxuLngwPWksbi55MD1hLG4ueDE9byxuLnkxPXN9fShlLGEpKSxuJiZpLmVhY2hCZWZvcmUoeiksaX1yZXR1cm4gaS5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hIXQsaSk6bn0saS5zaXplPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStyWzBdLGU9K3JbMV0saSk6W3QsZV19LGkucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxpKTpyfSxpfSx0LnN0cmF0aWZ5PWZ1bmN0aW9uKCl7dmFyIHQ9UixlPUY7ZnVuY3Rpb24gcihyKXt2YXIgbixpLGEsbyxzLHUsaCxmPXIubGVuZ3RoLHA9bmV3IEFycmF5KGYpLGQ9e307Zm9yKGk9MDtpPGY7KytpKW49cltpXSxzPXBbaV09bmV3IGMobiksbnVsbCE9KHU9dChuLGkscikpJiYodSs9XCJcIikmJihkW2g9SSsocy5pZD11KV09aCBpbiBkP1A6cyk7Zm9yKGk9MDtpPGY7KytpKWlmKHM9cFtpXSxudWxsIT0odT1lKHJbaV0saSxyKSkmJih1Kz1cIlwiKSl7aWYoIShvPWRbSSt1XSkpdGhyb3cgbmV3IEVycm9yKFwibWlzc2luZzogXCIrdSk7aWYobz09PVApdGhyb3cgbmV3IEVycm9yKFwiYW1iaWd1b3VzOiBcIit1KTtvLmNoaWxkcmVuP28uY2hpbGRyZW4ucHVzaChzKTpvLmNoaWxkcmVuPVtzXSxzLnBhcmVudD1vfWVsc2V7aWYoYSl0aHJvdyBuZXcgRXJyb3IoXCJtdWx0aXBsZSByb290c1wiKTthPXN9aWYoIWEpdGhyb3cgbmV3IEVycm9yKFwibm8gcm9vdFwiKTtpZihhLnBhcmVudD1ELGEuZWFjaEJlZm9yZShmdW5jdGlvbih0KXt0LmRlcHRoPXQucGFyZW50LmRlcHRoKzEsLS1mfSkuZWFjaEJlZm9yZShsKSxhLnBhcmVudD1udWxsLGY+MCl0aHJvdyBuZXcgRXJyb3IoXCJjeWNsZVwiKTtyZXR1cm4gYX1yZXR1cm4gci5pZD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1BKGUpLHIpOnR9LHIucGFyZW50SWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9QSh0KSxyKTplfSxyfSx0LnRyZWU9ZnVuY3Rpb24oKXt2YXIgdD1CLGU9MSxyPTEsbj1udWxsO2Z1bmN0aW9uIGkoaSl7dmFyIGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpLGEsbz1uZXcgcSh0LDApLHM9W29dO2U9cy5wb3AoKTspaWYobj1lLl8uY2hpbGRyZW4pZm9yKGUuY2hpbGRyZW49bmV3IEFycmF5KGE9bi5sZW5ndGgpLGk9YS0xO2k+PTA7LS1pKXMucHVzaChyPWUuY2hpbGRyZW5baV09bmV3IHEobltpXSxpKSksci5wYXJlbnQ9ZTtyZXR1cm4oby5wYXJlbnQ9bmV3IHEobnVsbCwwKSkuY2hpbGRyZW49W29dLG99KGkpO2lmKGwuZWFjaEFmdGVyKGEpLGwucGFyZW50Lm09LWwueixsLmVhY2hCZWZvcmUobyksbilpLmVhY2hCZWZvcmUocyk7ZWxzZXt2YXIgYz1pLHU9aSxoPWk7aS5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QueDxjLngmJihjPXQpLHQueD51LngmJih1PXQpLHQuZGVwdGg+aC5kZXB0aCYmKGg9dCl9KTt2YXIgZj1jPT09dT8xOnQoYyx1KS8yLHA9Zi1jLngsZD1lLyh1LngrZitwKSxnPXIvKGguZGVwdGh8fDEpO2kuZWFjaEJlZm9yZShmdW5jdGlvbih0KXt0Lng9KHQueCtwKSpkLHQueT10LmRlcHRoKmd9KX1yZXR1cm4gaX1mdW5jdGlvbiBhKGUpe3ZhciByPWUuY2hpbGRyZW4sbj1lLnBhcmVudC5jaGlsZHJlbixpPWUuaT9uW2UuaS0xXTpudWxsO2lmKHIpeyFmdW5jdGlvbih0KXtmb3IodmFyIGUscj0wLG49MCxpPXQuY2hpbGRyZW4sYT1pLmxlbmd0aDstLWE+PTA7KShlPWlbYV0pLnorPXIsZS5tKz1yLHIrPWUucysobis9ZS5jKX0oZSk7dmFyIGE9KHJbMF0ueityW3IubGVuZ3RoLTFdLnopLzI7aT8oZS56PWkueit0KGUuXyxpLl8pLGUubT1lLnotYSk6ZS56PWF9ZWxzZSBpJiYoZS56PWkueit0KGUuXyxpLl8pKTtlLnBhcmVudC5BPWZ1bmN0aW9uKGUscixuKXtpZihyKXtmb3IodmFyIGksYT1lLG89ZSxzPXIsbD1hLnBhcmVudC5jaGlsZHJlblswXSxjPWEubSx1PW8ubSxoPXMubSxmPWwubTtzPWoocyksYT1OKGEpLHMmJmE7KWw9TihsKSwobz1qKG8pKS5hPWUsKGk9cy56K2gtYS56LWMrdChzLl8sYS5fKSk+MCYmKFYoVShzLGUsbiksZSxpKSxjKz1pLHUrPWkpLGgrPXMubSxjKz1hLm0sZis9bC5tLHUrPW8ubTtzJiYhaihvKSYmKG8udD1zLG8ubSs9aC11KSxhJiYhTihsKSYmKGwudD1hLGwubSs9Yy1mLG49ZSl9cmV0dXJuIG59KGUsaSxlLnBhcmVudC5BfHxuWzBdKX1mdW5jdGlvbiBvKHQpe3QuXy54PXQueit0LnBhcmVudC5tLHQubSs9dC5wYXJlbnQubX1mdW5jdGlvbiBzKHQpe3QueCo9ZSx0Lnk9dC5kZXB0aCpyfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsZT0rdFswXSxyPSt0WzFdLGkpOm4/bnVsbDpbZSxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCxlPSt0WzBdLHI9K3RbMV0saSk6bj9bZSxyXTpudWxsfSxpfSx0LnRyZWVtYXA9ZnVuY3Rpb24oKXt2YXIgdD1XLGU9ITEscj0xLG49MSxpPVswXSxhPVQsbz1ULHM9VCxsPVQsYz1UO2Z1bmN0aW9uIHUodCl7cmV0dXJuIHQueDA9dC55MD0wLHQueDE9cix0LnkxPW4sdC5lYWNoQmVmb3JlKGgpLGk9WzBdLGUmJnQuZWFjaEJlZm9yZSh6KSx0fWZ1bmN0aW9uIGgoZSl7dmFyIHI9aVtlLmRlcHRoXSxuPWUueDArcix1PWUueTArcixoPWUueDEtcixmPWUueTEtcjtoPG4mJihuPWg9KG4raCkvMiksZjx1JiYodT1mPSh1K2YpLzIpLGUueDA9bixlLnkwPXUsZS54MT1oLGUueTE9ZixlLmNoaWxkcmVuJiYocj1pW2UuZGVwdGgrMV09YShlKS8yLG4rPWMoZSktcix1Kz1vKGUpLXIsKGgtPXMoZSktcik8biYmKG49aD0obitoKS8yKSwoZi09bChlKS1yKTx1JiYodT1mPSh1K2YpLzIpLHQoZSxuLHUsaCxmKSl9cmV0dXJuIHUucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ISF0LHUpOmV9LHUuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdFswXSxuPSt0WzFdLHUpOltyLG5dfSx1LnRpbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9QShlKSx1KTp0fSx1LnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dS5wYWRkaW5nSW5uZXIodCkucGFkZGluZ091dGVyKHQpOnUucGFkZGluZ0lubmVyKCl9LHUucGFkZGluZ0lubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpNKCt0KSx1KTphfSx1LnBhZGRpbmdPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdUb3AodCkucGFkZGluZ1JpZ2h0KHQpLnBhZGRpbmdCb3R0b20odCkucGFkZGluZ0xlZnQodCk6dS5wYWRkaW5nVG9wKCl9LHUucGFkZGluZ1RvcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6TSgrdCksdSk6b30sdS5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Ok0oK3QpLHUpOnN9LHUucGFkZGluZ0JvdHRvbT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6TSgrdCksdSk6bH0sdS5wYWRkaW5nTGVmdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6TSgrdCksdSk6Y30sdX0sdC50cmVlbWFwQmluYXJ5PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbyxzPXQuY2hpbGRyZW4sbD1zLmxlbmd0aCxjPW5ldyBBcnJheShsKzEpO2ZvcihjWzBdPW89YT0wO2E8bDsrK2EpY1thKzFdPW8rPXNbYV0udmFsdWU7IWZ1bmN0aW9uIHQoZSxyLG4saSxhLG8sbCl7aWYoZT49ci0xKXt2YXIgdT1zW2VdO3JldHVybiB1LngwPWksdS55MD1hLHUueDE9byx2b2lkKHUueTE9bCl9Zm9yKHZhciBoPWNbZV0sZj1uLzIraCxwPWUrMSxkPXItMTtwPGQ7KXt2YXIgZz1wK2Q+Pj4xO2NbZ108Zj9wPWcrMTpkPWd9Zi1jW3AtMV08Y1twXS1mJiZlKzE8cCYmLS1wO3ZhciB2PWNbcF0taCxtPW4tdjtpZihvLWk+bC1hKXt2YXIgeT0oaSptK28qdikvbjt0KGUscCx2LGksYSx5LGwpLHQocCxyLG0seSxhLG8sbCl9ZWxzZXt2YXIgeD0oYSptK2wqdikvbjt0KGUscCx2LGksYSxvLHgpLHQocCxyLG0saSx4LG8sbCl9fSgwLGwsdC52YWx1ZSxlLHIsbixpKX0sdC50cmVlbWFwRGljZT1PLHQudHJlZW1hcFNsaWNlPUgsdC50cmVlbWFwU2xpY2VEaWNlPWZ1bmN0aW9uKHQsZSxyLG4saSl7KDEmdC5kZXB0aD9IOk8pKHQsZSxyLG4saSl9LHQudHJlZW1hcFNxdWFyaWZ5PVcsdC50cmVlbWFwUmVzcXVhcmlmeT1YLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfShcIm9iamVjdFwiPT10eXBlb2YgciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGU/cjpuLmQzPW4uZDN8fHt9KX0se31dLDE0OTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk7bj10aGlzLGk9ZnVuY3Rpb24odCxlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiByKHQsZSxyLG4saSl7dmFyIGE9dCp0LG89YSp0O3JldHVybigoMS0zKnQrMyphLW8pKmUrKDQtNiphKzMqbykqcisoMSszKnQrMyphLTMqbykqbitvKmkpLzZ9ZnVuY3Rpb24gbih0KXt2YXIgZT10Lmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1uPD0wP249MDpuPj0xPyhuPTEsZS0xKTpNYXRoLmZsb29yKG4qZSksYT10W2ldLG89dFtpKzFdLHM9aT4wP3RbaS0xXToyKmEtbyxsPWk8ZS0xP3RbaSsyXToyKm8tYTtyZXR1cm4gcigobi1pL2UpKmUscyxhLG8sbCl9fWZ1bmN0aW9uIGkodCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPU1hdGguZmxvb3IoKChuJT0xKTwwPysrbjpuKSplKSxhPXRbKGkrZS0xKSVlXSxvPXRbaSVlXSxzPXRbKGkrMSklZV0sbD10WyhpKzIpJWVdO3JldHVybiByKChuLWkvZSkqZSxhLG8scyxsKX19ZnVuY3Rpb24gYSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdCtyKmV9fWZ1bmN0aW9uIHModCxlKXt2YXIgcj1lLXQ7cmV0dXJuIHI/byh0LHI+MTgwfHxyPC0xODA/ci0zNjAqTWF0aC5yb3VuZChyLzM2MCk6cik6YShpc05hTih0KT9lOnQpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIDE9PSh0PSt0KT9jOmZ1bmN0aW9uKGUscil7cmV0dXJuIHItZT9mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9TWF0aC5wb3codCxyKSxlPU1hdGgucG93KGUsciktdCxyPTEvcixmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3codCtuKmUscil9fShlLHIsdCk6YShpc05hTihlKT9yOmUpfX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9ZS10O3JldHVybiByP28odCxyKTphKGlzTmFOKHQpP2U6dCl9dmFyIHU9ZnVuY3Rpb24gdChyKXt2YXIgbj1sKHIpO2Z1bmN0aW9uIGkodCxyKXt2YXIgaT1uKCh0PWUucmdiKHQpKS5yLChyPWUucmdiKHIpKS5yKSxhPW4odC5nLHIuZyksbz1uKHQuYixyLmIpLHM9Yyh0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQucj1pKGUpLHQuZz1hKGUpLHQuYj1vKGUpLHQub3BhY2l0eT1zKGUpLHQrXCJcIn19cmV0dXJuIGkuZ2FtbWE9dCxpfSgxKTtmdW5jdGlvbiBoKHQpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgbixpLGE9ci5sZW5ndGgsbz1uZXcgQXJyYXkoYSkscz1uZXcgQXJyYXkoYSksbD1uZXcgQXJyYXkoYSk7Zm9yKG49MDtuPGE7KytuKWk9ZS5yZ2IocltuXSksb1tuXT1pLnJ8fDAsc1tuXT1pLmd8fDAsbFtuXT1pLmJ8fDA7cmV0dXJuIG89dChvKSxzPXQocyksbD10KGwpLGkub3BhY2l0eT0xLGZ1bmN0aW9uKHQpe3JldHVybiBpLnI9byh0KSxpLmc9cyh0KSxpLmI9bCh0KSxpK1wiXCJ9fX12YXIgZj1oKG4pLHA9aChpKTtmdW5jdGlvbiBkKHQsZSl7dmFyIHIsbj1lP2UubGVuZ3RoOjAsaT10P01hdGgubWluKG4sdC5sZW5ndGgpOjAsYT1uZXcgQXJyYXkoaSksbz1uZXcgQXJyYXkobik7Zm9yKHI9MDtyPGk7KytyKWFbcl09Xyh0W3JdLGVbcl0pO2Zvcig7cjxuOysrcilvW3JdPWVbcl07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihyPTA7cjxpOysrcilvW3JdPWFbcl0odCk7cmV0dXJuIG99fWZ1bmN0aW9uIGcodCxlKXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZS09dD0rdCxmdW5jdGlvbihuKXtyZXR1cm4gci5zZXRUaW1lKHQrZSpuKSxyfX1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuIGUtPXQ9K3QsZnVuY3Rpb24ocil7cmV0dXJuIHQrZSpyfX1mdW5jdGlvbiBtKHQsZSl7dmFyIHIsbj17fSxpPXt9O2ZvcihyIGluIG51bGwhPT10JiZcIm9iamVjdFwiPT10eXBlb2YgdHx8KHQ9e30pLG51bGwhPT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZXx8KGU9e30pLGUpciBpbiB0P25bcl09Xyh0W3JdLGVbcl0pOmlbcl09ZVtyXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHIgaW4gbilpW3JdPW5bcl0odCk7cmV0dXJuIGl9fXZhciB5PS9bLStdPyg/OlxcZCtcXC4/XFxkKnxcXC4/XFxkKykoPzpbZUVdWy0rXT9cXGQrKT8vZyx4PW5ldyBSZWdFeHAoeS5zb3VyY2UsXCJnXCIpO2Z1bmN0aW9uIGIodCxlKXt2YXIgcixuLGksYT15Lmxhc3RJbmRleD14Lmxhc3RJbmRleD0wLG89LTEscz1bXSxsPVtdO2Zvcih0Kz1cIlwiLGUrPVwiXCI7KHI9eS5leGVjKHQpKSYmKG49eC5leGVjKGUpKTspKGk9bi5pbmRleCk+YSYmKGk9ZS5zbGljZShhLGkpLHNbb10/c1tvXSs9aTpzWysrb109aSksKHI9clswXSk9PT0obj1uWzBdKT9zW29dP3Nbb10rPW46c1srK29dPW46KHNbKytvXT1udWxsLGwucHVzaCh7aTpvLHg6dihyLG4pfSkpLGE9eC5sYXN0SW5kZXg7cmV0dXJuIGE8ZS5sZW5ndGgmJihpPWUuc2xpY2UoYSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSxzLmxlbmd0aDwyP2xbMF0/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpK1wiXCJ9fShsWzBdLngpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0oZSk6KGU9bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciByLG49MDtuPGU7KytuKXNbKHI9bFtuXSkuaV09ci54KHQpO3JldHVybiBzLmpvaW4oXCJcIil9KX1mdW5jdGlvbiBfKHQscil7dmFyIG4saT10eXBlb2YgcjtyZXR1cm4gbnVsbD09cnx8XCJib29sZWFuXCI9PT1pP2Eocik6KFwibnVtYmVyXCI9PT1pP3Y6XCJzdHJpbmdcIj09PWk/KG49ZS5jb2xvcihyKSk/KHI9bix1KTpiOnIgaW5zdGFuY2VvZiBlLmNvbG9yP3U6ciBpbnN0YW5jZW9mIERhdGU/ZzpBcnJheS5pc0FycmF5KHIpP2Q6XCJmdW5jdGlvblwiIT10eXBlb2Ygci52YWx1ZU9mJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiByLnRvU3RyaW5nfHxpc05hTihyKT9tOnYpKHQscil9dmFyIHcsayxBLFQsTT0xODAvTWF0aC5QSSxTPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIEUodCxlLHIsbixpLGEpe3ZhciBvLHMsbDtyZXR1cm4obz1NYXRoLnNxcnQodCp0K2UqZSkpJiYodC89byxlLz1vKSwobD10KnIrZSpuKSYmKHItPXQqbCxuLT1lKmwpLChzPU1hdGguc3FydChyKnIrbipuKSkmJihyLz1zLG4vPXMsbC89cyksdCpuPGUqciYmKHQ9LXQsZT0tZSxsPS1sLG89LW8pLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTphLHJvdGF0ZTpNYXRoLmF0YW4yKGUsdCkqTSxza2V3WDpNYXRoLmF0YW4obCkqTSxzY2FsZVg6byxzY2FsZVk6c319ZnVuY3Rpb24gQyh0LGUscixuKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpK1wiIFwiOlwiXCJ9cmV0dXJuIGZ1bmN0aW9uKGEsbyl7dmFyIHM9W10sbD1bXTtyZXR1cm4gYT10KGEpLG89dChvKSxmdW5jdGlvbih0LG4saSxhLG8scyl7aWYodCE9PWl8fG4hPT1hKXt2YXIgbD1vLnB1c2goXCJ0cmFuc2xhdGUoXCIsbnVsbCxlLG51bGwscik7cy5wdXNoKHtpOmwtNCx4OnYodCxpKX0se2k6bC0yLHg6dihuLGEpfSl9ZWxzZShpfHxhKSYmby5wdXNoKFwidHJhbnNsYXRlKFwiK2krZSthK3IpfShhLnRyYW5zbGF0ZVgsYS50cmFuc2xhdGVZLG8udHJhbnNsYXRlWCxvLnRyYW5zbGF0ZVkscyxsKSxmdW5jdGlvbih0LGUscixhKXt0IT09ZT8odC1lPjE4MD9lKz0zNjA6ZS10PjE4MCYmKHQrPTM2MCksYS5wdXNoKHtpOnIucHVzaChpKHIpK1wicm90YXRlKFwiLG51bGwsbiktMix4OnYodCxlKX0pKTplJiZyLnB1c2goaShyKStcInJvdGF0ZShcIitlK24pfShhLnJvdGF0ZSxvLnJvdGF0ZSxzLGwpLGZ1bmN0aW9uKHQsZSxyLGEpe3QhPT1lP2EucHVzaCh7aTpyLnB1c2goaShyKStcInNrZXdYKFwiLG51bGwsbiktMix4OnYodCxlKX0pOmUmJnIucHVzaChpKHIpK1wic2tld1goXCIrZStuKX0oYS5za2V3WCxvLnNrZXdYLHMsbCksZnVuY3Rpb24odCxlLHIsbixhLG8pe2lmKHQhPT1yfHxlIT09bil7dmFyIHM9YS5wdXNoKGkoYSkrXCJzY2FsZShcIixudWxsLFwiLFwiLG51bGwsXCIpXCIpO28ucHVzaCh7aTpzLTQseDp2KHQscil9LHtpOnMtMix4OnYoZSxuKX0pfWVsc2UgMT09PXImJjE9PT1ufHxhLnB1c2goaShhKStcInNjYWxlKFwiK3IrXCIsXCIrbitcIilcIil9KGEuc2NhbGVYLGEuc2NhbGVZLG8uc2NhbGVYLG8uc2NhbGVZLHMsbCksYT1vPW51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9LTEsbj1sLmxlbmd0aDsrK3I8bjspc1soZT1sW3JdKS5pXT1lLngodCk7cmV0dXJuIHMuam9pbihcIlwiKX19fXZhciBMPUMoZnVuY3Rpb24odCl7cmV0dXJuXCJub25lXCI9PT10P1M6KHd8fCh3PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJESVZcIiksaz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsQT1kb2N1bWVudC5kZWZhdWx0Vmlldyksdy5zdHlsZS50cmFuc2Zvcm09dCx0PUEuZ2V0Q29tcHV0ZWRTdHlsZShrLmFwcGVuZENoaWxkKHcpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoXCJ0cmFuc2Zvcm1cIiksay5yZW1vdmVDaGlsZCh3KSxFKCsodD10LnNsaWNlKDcsLTEpLnNwbGl0KFwiLFwiKSlbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0sXCJweCwgXCIsXCJweClcIixcImRlZylcIiksej1DKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P1M6KFR8fChUPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXCJnXCIpKSxULnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLHQpLCh0PVQudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/RSgodD10Lm1hdHJpeCkuYSx0LmIsdC5jLHQuZCx0LmUsdC5mKTpTKX0sXCIsIFwiLFwiKVwiLFwiKVwiKSxPPU1hdGguU1FSVDIsST0yLEQ9NCxQPTFlLTEyO2Z1bmN0aW9uIFIodCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKSsxL3QpLzJ9ZnVuY3Rpb24gRih0KXtyZXR1cm4gZnVuY3Rpb24ocixuKXt2YXIgaT10KChyPWUuaHNsKHIpKS5oLChuPWUuaHNsKG4pKS5oKSxhPWMoci5zLG4ucyksbz1jKHIubCxuLmwpLHM9YyhyLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIuaD1pKHQpLHIucz1hKHQpLHIubD1vKHQpLHIub3BhY2l0eT1zKHQpLHIrXCJcIn19fXZhciBCPUYocyksTj1GKGMpO2Z1bmN0aW9uIGoodCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGk9dCgocj1lLmhjbChyKSkuaCwobj1lLmhjbChuKSkuaCksYT1jKHIuYyxuLmMpLG89YyhyLmwsbi5sKSxzPWMoci5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLmg9aSh0KSxyLmM9YSh0KSxyLmw9byh0KSxyLm9wYWNpdHk9cyh0KSxyK1wiXCJ9fX12YXIgVj1qKHMpLFU9aihjKTtmdW5jdGlvbiBxKHQpe3JldHVybiBmdW5jdGlvbiByKG4pe2Z1bmN0aW9uIGkocixpKXt2YXIgYT10KChyPWUuY3ViZWhlbGl4KHIpKS5oLChpPWUuY3ViZWhlbGl4KGkpKS5oKSxvPWMoci5zLGkucykscz1jKHIubCxpLmwpLGw9YyhyLm9wYWNpdHksaS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIuaD1hKHQpLHIucz1vKHQpLHIubD1zKE1hdGgucG93KHQsbikpLHIub3BhY2l0eT1sKHQpLHIrXCJcIn19cmV0dXJuIG49K24saS5nYW1tYT1yLGl9KDEpfXZhciBIPXEocyksRz1xKGMpO3QuaW50ZXJwb2xhdGU9Xyx0LmludGVycG9sYXRlQXJyYXk9ZCx0LmludGVycG9sYXRlQmFzaXM9bix0LmludGVycG9sYXRlQmFzaXNDbG9zZWQ9aSx0LmludGVycG9sYXRlRGF0ZT1nLHQuaW50ZXJwb2xhdGVEaXNjcmV0ZT1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHRbTWF0aC5tYXgoMCxNYXRoLm1pbihlLTEsTWF0aC5mbG9vcihyKmUpKSldfX0sdC5pbnRlcnBvbGF0ZUh1ZT1mdW5jdGlvbih0LGUpe3ZhciByPXMoK3QsK2UpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1yKHQpO3JldHVybiBlLTM2MCpNYXRoLmZsb29yKGUvMzYwKX19LHQuaW50ZXJwb2xhdGVOdW1iZXI9dix0LmludGVycG9sYXRlT2JqZWN0PW0sdC5pbnRlcnBvbGF0ZVJvdW5kPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtPXQ9K3QsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucm91bmQodCtlKnIpfX0sdC5pbnRlcnBvbGF0ZVN0cmluZz1iLHQuaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3M9TCx0LmludGVycG9sYXRlVHJhbnNmb3JtU3ZnPXosdC5pbnRlcnBvbGF0ZVpvb209ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dFswXSxhPXRbMV0sbz10WzJdLHM9ZVswXSxsPWVbMV0sYz1lWzJdLHU9cy1pLGg9bC1hLGY9dSp1K2gqaDtpZihmPFApbj1NYXRoLmxvZyhjL28pL08scj1mdW5jdGlvbih0KXtyZXR1cm5baSt0KnUsYSt0KmgsbypNYXRoLmV4cChPKnQqbildfTtlbHNle3ZhciBwPU1hdGguc3FydChmKSxkPShjKmMtbypvK0QqZikvKDIqbypJKnApLGc9KGMqYy1vKm8tRCpmKS8oMipjKkkqcCksdj1NYXRoLmxvZyhNYXRoLnNxcnQoZCpkKzEpLWQpLG09TWF0aC5sb2coTWF0aC5zcXJ0KGcqZysxKS1nKTtuPShtLXYpL08scj1mdW5jdGlvbih0KXt2YXIgZSxyPXQqbixzPVIodiksbD1vLyhJKnApKihzKihlPU8qcit2LCgoZT1NYXRoLmV4cCgyKmUpKS0xKS8oZSsxKSktZnVuY3Rpb24odCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKS0xL3QpLzJ9KHYpKTtyZXR1cm5baStsKnUsYStsKmgsbypzL1IoTypyK3YpXX19cmV0dXJuIHIuZHVyYXRpb249MWUzKm4scn0sdC5pbnRlcnBvbGF0ZVJnYj11LHQuaW50ZXJwb2xhdGVSZ2JCYXNpcz1mLHQuaW50ZXJwb2xhdGVSZ2JCYXNpc0Nsb3NlZD1wLHQuaW50ZXJwb2xhdGVIc2w9Qix0LmludGVycG9sYXRlSHNsTG9uZz1OLHQuaW50ZXJwb2xhdGVMYWI9ZnVuY3Rpb24odCxyKXt2YXIgbj1jKCh0PWUubGFiKHQpKS5sLChyPWUubGFiKHIpKS5sKSxpPWModC5hLHIuYSksYT1jKHQuYixyLmIpLG89Yyh0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQubD1uKGUpLHQuYT1pKGUpLHQuYj1hKGUpLHQub3BhY2l0eT1vKGUpLHQrXCJcIn19LHQuaW50ZXJwb2xhdGVIY2w9Vix0LmludGVycG9sYXRlSGNsTG9uZz1VLHQuaW50ZXJwb2xhdGVDdWJlaGVsaXg9SCx0LmludGVycG9sYXRlQ3ViZWhlbGl4TG9uZz1HLHQucGllY2V3aXNlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj1lLmxlbmd0aC0xLGk9ZVswXSxhPW5ldyBBcnJheShuPDA/MDpuKTtyPG47KWFbcl09dChpLGk9ZVsrK3JdKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMCxNYXRoLm1pbihuLTEsTWF0aC5mbG9vcih0Kj1uKSkpO3JldHVybiBhW2VdKHQtZSl9fSx0LnF1YW50aXplPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPXQobi8oZS0xKSk7cmV0dXJuIHJ9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSxcIm9iamVjdFwiPT10eXBlb2YgciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGU/aShyLHQoXCJkMy1jb2xvclwiKSk6aShuLmQzPW4uZDN8fHt9LG4uZDMpfSx7XCJkMy1jb2xvclwiOjE0NX1dLDE1MDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuO249dGhpcyxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjt2YXIgZT1NYXRoLlBJLHI9MiplLG49ci0xZS02O2Z1bmN0aW9uIGkoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz1cIlwifWZ1bmN0aW9uIGEoKXtyZXR1cm4gbmV3IGl9aS5wcm90b3R5cGU9YS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmksbW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz1cIk1cIisodGhpcy5feDA9dGhpcy5feDE9K3QpK1wiLFwiKyh0aGlzLl95MD10aGlzLl95MT0rZSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9XCJaXCIpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPVwiTFwiKyh0aGlzLl94MT0rdCkrXCIsXCIrKHRoaXMuX3kxPStlKX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbih0LGUscixuKXt0aGlzLl8rPVwiUVwiKyArdCtcIixcIisgK2UrXCIsXCIrKHRoaXMuX3gxPStyKStcIixcIisodGhpcy5feTE9K24pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLl8rPVwiQ1wiKyArdCtcIixcIisgK2UrXCIsXCIrICtyK1wiLFwiKyArbitcIixcIisodGhpcy5feDE9K2kpK1wiLFwiKyh0aGlzLl95MT0rYSl9LGFyY1RvOmZ1bmN0aW9uKHQscixuLGksYSl7dD0rdCxyPStyLG49K24saT0raSxhPSthO3ZhciBvPXRoaXMuX3gxLHM9dGhpcy5feTEsbD1uLXQsYz1pLXIsdT1vLXQsaD1zLXIsZj11KnUraCpoO2lmKGE8MCl0aHJvdyBuZXcgRXJyb3IoXCJuZWdhdGl2ZSByYWRpdXM6IFwiK2EpO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl8rPVwiTVwiKyh0aGlzLl94MT10KStcIixcIisodGhpcy5feTE9cik7ZWxzZSBpZihmPjFlLTYpaWYoTWF0aC5hYnMoaCpsLWMqdSk+MWUtNiYmYSl7dmFyIHA9bi1vLGQ9aS1zLGc9bCpsK2MqYyx2PXAqcCtkKmQsbT1NYXRoLnNxcnQoZykseT1NYXRoLnNxcnQoZikseD1hKk1hdGgudGFuKChlLU1hdGguYWNvcygoZytmLXYpLygyKm0qeSkpKS8yKSxiPXgveSxfPXgvbTtNYXRoLmFicyhiLTEpPjFlLTYmJih0aGlzLl8rPVwiTFwiKyh0K2IqdSkrXCIsXCIrKHIrYipoKSksdGhpcy5fKz1cIkFcIithK1wiLFwiK2ErXCIsMCwwLFwiKyArKGgqcD51KmQpK1wiLFwiKyh0aGlzLl94MT10K18qbCkrXCIsXCIrKHRoaXMuX3kxPXIrXypjKX1lbHNlIHRoaXMuXys9XCJMXCIrKHRoaXMuX3gxPXQpK1wiLFwiKyh0aGlzLl95MT1yKTtlbHNlO30sYXJjOmZ1bmN0aW9uKHQsaSxhLG8scyxsKXt0PSt0LGk9K2k7dmFyIGM9KGE9K2EpKk1hdGguY29zKG8pLHU9YSpNYXRoLnNpbihvKSxoPXQrYyxmPWkrdSxwPTFebCxkPWw/by1zOnMtbztpZihhPDApdGhyb3cgbmV3IEVycm9yKFwibmVnYXRpdmUgcmFkaXVzOiBcIithKTtudWxsPT09dGhpcy5feDE/dGhpcy5fKz1cIk1cIitoK1wiLFwiK2Y6KE1hdGguYWJzKHRoaXMuX3gxLWgpPjFlLTZ8fE1hdGguYWJzKHRoaXMuX3kxLWYpPjFlLTYpJiYodGhpcy5fKz1cIkxcIitoK1wiLFwiK2YpLGEmJihkPDAmJihkPWQlcityKSxkPm4/dGhpcy5fKz1cIkFcIithK1wiLFwiK2ErXCIsMCwxLFwiK3ArXCIsXCIrKHQtYykrXCIsXCIrKGktdSkrXCJBXCIrYStcIixcIithK1wiLDAsMSxcIitwK1wiLFwiKyh0aGlzLl94MT1oKStcIixcIisodGhpcy5feTE9Zik6ZD4xZS02JiYodGhpcy5fKz1cIkFcIithK1wiLFwiK2ErXCIsMCxcIisgKyhkPj1lKStcIixcIitwK1wiLFwiKyh0aGlzLl94MT10K2EqTWF0aC5jb3MocykpK1wiLFwiKyh0aGlzLl95MT1pK2EqTWF0aC5zaW4ocykpKSl9LHJlY3Q6ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5fKz1cIk1cIisodGhpcy5feDA9dGhpcy5feDE9K3QpK1wiLFwiKyh0aGlzLl95MD10aGlzLl95MT0rZSkrXCJoXCIrICtyK1widlwiKyArbitcImhcIistcitcIlpcIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX0sdC5wYXRoPWEsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9KFwib2JqZWN0XCI9PXR5cGVvZiByJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZT9yOm4uZDM9bi5kM3x8e30pfSx7fV0sMTUxOltmdW5jdGlvbih0LGUscil7dmFyIG47bj10aGlzLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUodCxlLHIsbil7aWYoaXNOYU4oZSl8fGlzTmFOKHIpKXJldHVybiB0O3ZhciBpLGEsbyxzLGwsYyx1LGgsZixwPXQuX3Jvb3QsZD17ZGF0YTpufSxnPXQuX3gwLHY9dC5feTAsbT10Ll94MSx5PXQuX3kxO2lmKCFwKXJldHVybiB0Ll9yb290PWQsdDtmb3IoO3AubGVuZ3RoOylpZigoYz1lPj0oYT0oZyttKS8yKSk/Zz1hOm09YSwodT1yPj0obz0odit5KS8yKSk/dj1vOnk9byxpPXAsIShwPXBbaD11PDwxfGNdKSlyZXR1cm4gaVtoXT1kLHQ7aWYocz0rdC5feC5jYWxsKG51bGwscC5kYXRhKSxsPSt0Ll95LmNhbGwobnVsbCxwLmRhdGEpLGU9PT1zJiZyPT09bClyZXR1cm4gZC5uZXh0PXAsaT9pW2hdPWQ6dC5fcm9vdD1kLHQ7ZG97aT1pP2lbaF09bmV3IEFycmF5KDQpOnQuX3Jvb3Q9bmV3IEFycmF5KDQpLChjPWU+PShhPShnK20pLzIpKT9nPWE6bT1hLCh1PXI+PShvPSh2K3kpLzIpKT92PW86eT1vfXdoaWxlKChoPXU8PDF8Yyk9PShmPShsPj1vKTw8MXxzPj1hKSk7cmV0dXJuIGlbZl09cCxpW2hdPWQsdH12YXIgcj1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMubm9kZT10LHRoaXMueDA9ZSx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX07ZnVuY3Rpb24gbih0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBpKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIGEodCxlLHIpe3ZhciBhPW5ldyBvKG51bGw9PWU/bjplLG51bGw9PXI/aTpyLE5hTixOYU4sTmFOLE5hTik7cmV0dXJuIG51bGw9PXQ/YTphLmFkZEFsbCh0KX1mdW5jdGlvbiBvKHQsZSxyLG4saSxhKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPWEsdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gcyh0KXtmb3IodmFyIGU9e2RhdGE6dC5kYXRhfSxyPWU7dD10Lm5leHQ7KXI9ci5uZXh0PXtkYXRhOnQuZGF0YX07cmV0dXJuIGV9dmFyIGw9YS5wcm90b3R5cGU9by5wcm90b3R5cGU7bC5jb3B5PWZ1bmN0aW9uKCl7dmFyIHQsZSxyPW5ldyBvKHRoaXMuX3gsdGhpcy5feSx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSksbj10aGlzLl9yb290O2lmKCFuKXJldHVybiByO2lmKCFuLmxlbmd0aClyZXR1cm4gci5fcm9vdD1zKG4pLHI7Zm9yKHQ9W3tzb3VyY2U6bix0YXJnZXQ6ci5fcm9vdD1uZXcgQXJyYXkoNCl9XTtuPXQucG9wKCk7KWZvcih2YXIgaT0wO2k8NDsrK2kpKGU9bi5zb3VyY2VbaV0pJiYoZS5sZW5ndGg/dC5wdXNoKHtzb3VyY2U6ZSx0YXJnZXQ6bi50YXJnZXRbaV09bmV3IEFycmF5KDQpfSk6bi50YXJnZXRbaV09cyhlKSk7cmV0dXJuIHJ9LGwuYWRkPWZ1bmN0aW9uKHQpe3ZhciByPSt0aGlzLl94LmNhbGwobnVsbCx0KSxuPSt0aGlzLl95LmNhbGwobnVsbCx0KTtyZXR1cm4gZSh0aGlzLmNvdmVyKHIsbikscixuLHQpfSxsLmFkZEFsbD1mdW5jdGlvbih0KXt2YXIgcixuLGksYSxvPXQubGVuZ3RoLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLGM9MS8wLHU9MS8wLGg9LTEvMCxmPS0xLzA7Zm9yKG49MDtuPG87KytuKWlzTmFOKGk9K3RoaXMuX3guY2FsbChudWxsLHI9dFtuXSkpfHxpc05hTihhPSt0aGlzLl95LmNhbGwobnVsbCxyKSl8fChzW25dPWksbFtuXT1hLGk8YyYmKGM9aSksaT5oJiYoaD1pKSxhPHUmJih1PWEpLGE+ZiYmKGY9YSkpO2ZvcihoPGMmJihjPXRoaXMuX3gwLGg9dGhpcy5feDEpLGY8dSYmKHU9dGhpcy5feTAsZj10aGlzLl95MSksdGhpcy5jb3ZlcihjLHUpLmNvdmVyKGgsZiksbj0wO248bzsrK24pZSh0aGlzLHNbbl0sbFtuXSx0W25dKTtyZXR1cm4gdGhpc30sbC5jb3Zlcj1mdW5jdGlvbih0LGUpe2lmKGlzTmFOKHQ9K3QpfHxpc05hTihlPStlKSlyZXR1cm4gdGhpczt2YXIgcj10aGlzLl94MCxuPXRoaXMuX3kwLGk9dGhpcy5feDEsYT10aGlzLl95MTtpZihpc05hTihyKSlpPShyPU1hdGguZmxvb3IodCkpKzEsYT0obj1NYXRoLmZsb29yKGUpKSsxO2Vsc2V7aWYoIShyPnR8fHQ+aXx8bj5lfHxlPmEpKXJldHVybiB0aGlzO3ZhciBvLHMsbD1pLXIsYz10aGlzLl9yb290O3N3aXRjaChzPShlPChuK2EpLzIpPDwxfHQ8KHIraSkvMil7Y2FzZSAwOmRveyhvPW5ldyBBcnJheSg0KSlbc109YyxjPW99d2hpbGUoYT1uKyhsKj0yKSx0PihpPXIrbCl8fGU+YSk7YnJlYWs7Y2FzZSAxOmRveyhvPW5ldyBBcnJheSg0KSlbc109YyxjPW99d2hpbGUoYT1uKyhsKj0yKSwocj1pLWwpPnR8fGU+YSk7YnJlYWs7Y2FzZSAyOmRveyhvPW5ldyBBcnJheSg0KSlbc109YyxjPW99d2hpbGUobj1hLShsKj0yKSx0PihpPXIrbCl8fG4+ZSk7YnJlYWs7Y2FzZSAzOmRveyhvPW5ldyBBcnJheSg0KSlbc109YyxjPW99d2hpbGUobj1hLShsKj0yKSwocj1pLWwpPnR8fG4+ZSl9dGhpcy5fcm9vdCYmdGhpcy5fcm9vdC5sZW5ndGgmJih0aGlzLl9yb290PWMpfXJldHVybiB0aGlzLl94MD1yLHRoaXMuX3kwPW4sdGhpcy5feDE9aSx0aGlzLl95MT1hLHRoaXN9LGwuZGF0YT1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3t0LnB1c2goZS5kYXRhKX13aGlsZShlPWUubmV4dCl9KSx0fSxsLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCt0WzBdWzBdLCt0WzBdWzFdKS5jb3ZlcigrdFsxXVswXSwrdFsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX0sbC5maW5kPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhLG8scyxsLGMsdSxoPXRoaXMuX3gwLGY9dGhpcy5feTAscD10aGlzLl94MSxkPXRoaXMuX3kxLGc9W10sdj10aGlzLl9yb290O2Zvcih2JiZnLnB1c2gobmV3IHIodixoLGYscCxkKSksbnVsbD09bj9uPTEvMDooaD10LW4sZj1lLW4scD10K24sZD1lK24sbio9bik7Yz1nLnBvcCgpOylpZighKCEodj1jLm5vZGUpfHwoYT1jLngwKT5wfHwobz1jLnkwKT5kfHwocz1jLngxKTxofHwobD1jLnkxKTxmKSlpZih2Lmxlbmd0aCl7dmFyIG09KGErcykvMix5PShvK2wpLzI7Zy5wdXNoKG5ldyByKHZbM10sbSx5LHMsbCksbmV3IHIodlsyXSxhLHksbSxsKSxuZXcgcih2WzFdLG0sbyxzLHkpLG5ldyByKHZbMF0sYSxvLG0seSkpLCh1PShlPj15KTw8MXx0Pj1tKSYmKGM9Z1tnLmxlbmd0aC0xXSxnW2cubGVuZ3RoLTFdPWdbZy5sZW5ndGgtMS11XSxnW2cubGVuZ3RoLTEtdV09Yyl9ZWxzZXt2YXIgeD10LSt0aGlzLl94LmNhbGwobnVsbCx2LmRhdGEpLGI9ZS0rdGhpcy5feS5jYWxsKG51bGwsdi5kYXRhKSxfPXgqeCtiKmI7aWYoXzxuKXt2YXIgdz1NYXRoLnNxcnQobj1fKTtoPXQtdyxmPWUtdyxwPXQrdyxkPWUrdyxpPXYuZGF0YX19cmV0dXJuIGl9LGwucmVtb3ZlPWZ1bmN0aW9uKHQpe2lmKGlzTmFOKGE9K3RoaXMuX3guY2FsbChudWxsLHQpKXx8aXNOYU4obz0rdGhpcy5feS5jYWxsKG51bGwsdCkpKXJldHVybiB0aGlzO3ZhciBlLHIsbixpLGEsbyxzLGwsYyx1LGgsZixwPXRoaXMuX3Jvb3QsZD10aGlzLl94MCxnPXRoaXMuX3kwLHY9dGhpcy5feDEsbT10aGlzLl95MTtpZighcClyZXR1cm4gdGhpcztpZihwLmxlbmd0aClmb3IoOzspe2lmKChjPWE+PShzPShkK3YpLzIpKT9kPXM6dj1zLCh1PW8+PShsPShnK20pLzIpKT9nPWw6bT1sLGU9cCwhKHA9cFtoPXU8PDF8Y10pKXJldHVybiB0aGlzO2lmKCFwLmxlbmd0aClicmVhazsoZVtoKzEmM118fGVbaCsyJjNdfHxlW2grMyYzXSkmJihyPWUsZj1oKX1mb3IoO3AuZGF0YSE9PXQ7KWlmKG49cCwhKHA9cC5uZXh0KSlyZXR1cm4gdGhpcztyZXR1cm4oaT1wLm5leHQpJiZkZWxldGUgcC5uZXh0LG4/KGk/bi5uZXh0PWk6ZGVsZXRlIG4ubmV4dCx0aGlzKTplPyhpP2VbaF09aTpkZWxldGUgZVtoXSwocD1lWzBdfHxlWzFdfHxlWzJdfHxlWzNdKSYmcD09PShlWzNdfHxlWzJdfHxlWzFdfHxlWzBdKSYmIXAubGVuZ3RoJiYocj9yW2ZdPXA6dGhpcy5fcm9vdD1wKSx0aGlzKToodGhpcy5fcm9vdD1pLHRoaXMpfSxsLnJlbW92ZUFsbD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoO2U8cjsrK2UpdGhpcy5yZW1vdmUodFtlXSk7cmV0dXJuIHRoaXN9LGwucm9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290fSxsLnNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3srK3R9d2hpbGUoZT1lLm5leHQpfSksdH0sbC52aXNpdD1mdW5jdGlvbih0KXt2YXIgZSxuLGksYSxvLHMsbD1bXSxjPXRoaXMuX3Jvb3Q7Zm9yKGMmJmwucHVzaChuZXcgcihjLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1sLnBvcCgpOylpZighdChjPWUubm9kZSxpPWUueDAsYT1lLnkwLG89ZS54MSxzPWUueTEpJiZjLmxlbmd0aCl7dmFyIHU9KGkrbykvMixoPShhK3MpLzI7KG49Y1szXSkmJmwucHVzaChuZXcgcihuLHUsaCxvLHMpKSwobj1jWzJdKSYmbC5wdXNoKG5ldyByKG4saSxoLHUscykpLChuPWNbMV0pJiZsLnB1c2gobmV3IHIobix1LGEsbyxoKSksKG49Y1swXSkmJmwucHVzaChuZXcgcihuLGksYSx1LGgpKX1yZXR1cm4gdGhpc30sbC52aXNpdEFmdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLG49W10saT1bXTtmb3IodGhpcy5fcm9vdCYmbi5wdXNoKG5ldyByKHRoaXMuX3Jvb3QsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtlPW4ucG9wKCk7KXt2YXIgYT1lLm5vZGU7aWYoYS5sZW5ndGgpe3ZhciBvLHM9ZS54MCxsPWUueTAsYz1lLngxLHU9ZS55MSxoPShzK2MpLzIsZj0obCt1KS8yOyhvPWFbMF0pJiZuLnB1c2gobmV3IHIobyxzLGwsaCxmKSksKG89YVsxXSkmJm4ucHVzaChuZXcgcihvLGgsbCxjLGYpKSwobz1hWzJdKSYmbi5wdXNoKG5ldyByKG8scyxmLGgsdSkpLChvPWFbM10pJiZuLnB1c2gobmV3IHIobyxoLGYsYyx1KSl9aS5wdXNoKGUpfWZvcig7ZT1pLnBvcCgpOyl0KGUubm9kZSxlLngwLGUueTAsZS54MSxlLnkxKTtyZXR1cm4gdGhpc30sbC54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl94PXQsdGhpcyk6dGhpcy5feH0sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl95PXQsdGhpcyk6dGhpcy5feX0sdC5xdWFkdHJlZT1hLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfShcIm9iamVjdFwiPT10eXBlb2YgciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGU/cjpuLmQzPW4uZDN8fHt9KX0se31dLDE1MjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk7bj10aGlzLGk9ZnVuY3Rpb24odCxlLHIsbixpKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBhKHQpe3JldHVybiB0LnRhcmdldC5kZXB0aH1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHQuc291cmNlTGlua3MubGVuZ3RoP3QuZGVwdGg6ZS0xfWZ1bmN0aW9uIHModCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWk9aSYmaS5oYXNPd25Qcm9wZXJ0eShcImRlZmF1bHRcIik/aS5kZWZhdWx0Omk7dmFyIGw9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgdH07ZnVuY3Rpb24gYyh0LGUpe3JldHVybiBoKHQuc291cmNlLGUuc291cmNlKXx8dC5pbmRleC1lLmluZGV4fWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gaCh0LnRhcmdldCxlLnRhcmdldCl8fHQuaW5kZXgtZS5pbmRleH1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQucGFydE9mQ3ljbGU9PT1lLnBhcnRPZkN5Y2xlP3QueTAtZS55MDpcInRvcFwiPT09dC5jaXJjdWxhckxpbmtUeXBlfHxcImJvdHRvbVwiPT09ZS5jaXJjdWxhckxpbmtUeXBlPy0xOjF9ZnVuY3Rpb24gZih0KXtyZXR1cm4gdC52YWx1ZX1mdW5jdGlvbiBwKHQpe3JldHVybih0LnkwK3QueTEpLzJ9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gcCh0LnNvdXJjZSl9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gcCh0LnRhcmdldCl9ZnVuY3Rpb24gdih0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiBtKHQpe3JldHVybiB0Lm5vZGVzfWZ1bmN0aW9uIHkodCl7cmV0dXJuIHQubGlua3N9ZnVuY3Rpb24geCh0LGUpe3ZhciByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcihcIm1pc3Npbmc6IFwiK2UpO3JldHVybiByfWZ1bmN0aW9uIGIodCxlKXtyZXR1cm4gZSh0KX12YXIgXz0yNSx3PTEwLGs9LjM7ZnVuY3Rpb24gQSh0LGUpe3ZhciByPTAsbj0wO3QubGlua3MuZm9yRWFjaChmdW5jdGlvbihpKXtpLmNpcmN1bGFyJiYoaS5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZXx8aS50YXJnZXQuY2lyY3VsYXJMaW5rVHlwZT9pLmNpcmN1bGFyTGlua1R5cGU9aS5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZT9pLnNvdXJjZS5jaXJjdWxhckxpbmtUeXBlOmkudGFyZ2V0LmNpcmN1bGFyTGlua1R5cGU6aS5jaXJjdWxhckxpbmtUeXBlPXI8bj9cInRvcFwiOlwiYm90dG9tXCIsXCJ0b3BcIj09aS5jaXJjdWxhckxpbmtUeXBlP3IrPTE6bis9MSx0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7Yih0LGUpIT1iKGkuc291cmNlLGUpJiZiKHQsZSkhPWIoaS50YXJnZXQsZSl8fCh0LmNpcmN1bGFyTGlua1R5cGU9aS5jaXJjdWxhckxpbmtUeXBlKX0pKX0pLHQubGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNpcmN1bGFyJiYodC5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZT09dC50YXJnZXQuY2lyY3VsYXJMaW5rVHlwZSYmKHQuY2lyY3VsYXJMaW5rVHlwZT10LnNvdXJjZS5jaXJjdWxhckxpbmtUeXBlKSxZKHQsZSkmJih0LmNpcmN1bGFyTGlua1R5cGU9dC5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZSkpfSl9ZnVuY3Rpb24gVCh0KXt2YXIgZT1NYXRoLmFicyh0LnkxLXQueTApLHI9TWF0aC5hYnModC50YXJnZXQueDAtdC5zb3VyY2UueDEpO3JldHVybiBNYXRoLmF0YW4oci9lKX1mdW5jdGlvbiBNKHQsZSl7dmFyIHI9MDt0LnNvdXJjZUxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7cj10LmNpcmN1bGFyJiYhWSh0LGUpP3IrMTpyfSk7dmFyIG49MDtyZXR1cm4gdC50YXJnZXRMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe249dC5jaXJjdWxhciYmIVkodCxlKT9uKzE6bn0pLHIrbn1mdW5jdGlvbiBTKHQpe3ZhciBlPXQuc291cmNlLnNvdXJjZUxpbmtzLHI9MDtlLmZvckVhY2goZnVuY3Rpb24odCl7cj10LmNpcmN1bGFyP3IrMTpyfSk7dmFyIG49dC50YXJnZXQudGFyZ2V0TGlua3MsaT0wO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24odCl7aT10LmNpcmN1bGFyP2krMTppfSksIShyPjF8fGk+MSl9ZnVuY3Rpb24gRSh0LGUscil7cmV0dXJuIHQuc29ydChMKSx0LmZvckVhY2goZnVuY3Rpb24obixpKXt2YXIgYSxvLHM9MDtpZihZKG4scikmJlMobikpbi5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyPXMrbi53aWR0aC8yO2Vsc2V7Zm9yKHZhciBsPTA7bDxpO2wrKylpZihhPXRbaV0sbz10W2xdLCEoYS5zb3VyY2UuY29sdW1uPG8udGFyZ2V0LmNvbHVtbnx8YS50YXJnZXQuY29sdW1uPm8uc291cmNlLmNvbHVtbikpe3ZhciBjPXRbbF0uY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcit0W2xdLndpZHRoLzIrZTtzPWM+cz9jOnN9bi5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyPXMrbi53aWR0aC8yfX0pLHR9ZnVuY3Rpb24gQyh0LHIsaSxhKXt2YXIgbz1lLm1pbih0LmxpbmtzLGZ1bmN0aW9uKHQpe3JldHVybiB0LnNvdXJjZS55MH0pO3QubGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNpcmN1bGFyJiYodC5jaXJjdWxhclBhdGhEYXRhPXt9KX0pLEUodC5saW5rcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuXCJ0b3BcIj09dC5jaXJjdWxhckxpbmtUeXBlfSkscixhKSxFKHQubGlua3MuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVyblwiYm90dG9tXCI9PXQuY2lyY3VsYXJMaW5rVHlwZX0pLHIsYSksdC5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGUuY2lyY3VsYXIpe2lmKGUuY2lyY3VsYXJQYXRoRGF0YS5hcmNSYWRpdXM9ZS53aWR0aCt3LGUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0Tm9kZUJ1ZmZlcj01LGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodE5vZGVCdWZmZXI9NSxlLmNpcmN1bGFyUGF0aERhdGEuc291cmNlV2lkdGg9ZS5zb3VyY2UueDEtZS5zb3VyY2UueDAsZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVg9ZS5zb3VyY2UueDArZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVdpZHRoLGUuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRYPWUudGFyZ2V0LngwLGUuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZPWUueTAsZS5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFk9ZS55MSxZKGUsYSkmJlMoZSkpZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRTbWFsbEFyY1JhZGl1cz13K2Uud2lkdGgvMixlLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzPXcrZS53aWR0aC8yLGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodFNtYWxsQXJjUmFkaXVzPXcrZS53aWR0aC8yLGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzPXcrZS53aWR0aC8yLFwiYm90dG9tXCI9PWUuY2lyY3VsYXJMaW5rVHlwZT8oZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudD1lLnNvdXJjZS55MStfK2UuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudC1lLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudC1lLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cyk6KGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQ9ZS5zb3VyY2UueTAtXy1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQrZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cyxlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxSaWdodElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQrZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMpO2Vsc2V7dmFyIHM9ZS5zb3VyY2UuY29sdW1uLGw9ZS5jaXJjdWxhckxpbmtUeXBlLGM9dC5saW5rcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuc291cmNlLmNvbHVtbj09cyYmdC5jaXJjdWxhckxpbmtUeXBlPT1sfSk7XCJib3R0b21cIj09ZS5jaXJjdWxhckxpbmtUeXBlP2Muc29ydChPKTpjLnNvcnQoeik7dmFyIHU9MDtjLmZvckVhY2goZnVuY3Rpb24odCxuKXt0LmNpcmN1bGFyTGlua0lEPT1lLmNpcmN1bGFyTGlua0lEJiYoZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRTbWFsbEFyY1JhZGl1cz13K2Uud2lkdGgvMit1LGUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXM9dytlLndpZHRoLzIrbipyK3UpLHUrPXQud2lkdGh9KSxzPWUudGFyZ2V0LmNvbHVtbixjPXQubGlua3MuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRhcmdldC5jb2x1bW49PXMmJnQuY2lyY3VsYXJMaW5rVHlwZT09bH0pLFwiYm90dG9tXCI9PWUuY2lyY3VsYXJMaW5rVHlwZT9jLnNvcnQoRCk6Yy5zb3J0KEkpLHU9MCxjLmZvckVhY2goZnVuY3Rpb24odCxuKXt0LmNpcmN1bGFyTGlua0lEPT1lLmNpcmN1bGFyTGlua0lEJiYoZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXM9dytlLndpZHRoLzIrdSxlLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cz13K2Uud2lkdGgvMituKnIrdSksdSs9dC53aWR0aH0pLFwiYm90dG9tXCI9PWUuY2lyY3VsYXJMaW5rVHlwZT8oZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudD1NYXRoLm1heChpLGUuc291cmNlLnkxLGUudGFyZ2V0LnkxKStfK2UuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudC1lLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudC1lLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cyk6KGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQ9by1fLWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCtlLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCtlLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cyl9ZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEuc291cmNlWCtlLmNpcmN1bGFyUGF0aERhdGEubGVmdE5vZGVCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFgtZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0Tm9kZUJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEubGVmdEZ1bGxFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVgrZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cytlLmNpcmN1bGFyUGF0aERhdGEubGVmdE5vZGVCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0RnVsbEV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WC1lLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cy1lLmNpcmN1bGFyUGF0aERhdGEucmlnaHROb2RlQnVmZmVyfWlmKGUuY2lyY3VsYXIpZS5wYXRoPWZ1bmN0aW9uKHQpe3ZhciBlPVwiXCI7ZT1cInRvcFwiPT10LmNpcmN1bGFyTGlua1R5cGU/XCJNXCIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVgrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVkrXCIgTFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0SW5uZXJFeHRlbnQrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVkrXCIgQVwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRTbWFsbEFyY1JhZGl1cytcIiAwIDAgMCBcIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdEZ1bGxFeHRlbnQrXCIgXCIrKHQuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZLXQuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0U21hbGxBcmNSYWRpdXMpK1wiIExcIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdEZ1bGxFeHRlbnQrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50K1wiIEFcIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzK1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMrXCIgMCAwIDAgXCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudCtcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K1wiIExcIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRJbm5lckV4dGVudCtcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K1wiIEFcIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cytcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cytcIiAwIDAgMCBcIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRGdWxsRXh0ZW50K1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQrXCIgTFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodEZ1bGxFeHRlbnQrXCIgXCIrKHQuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZLXQuY2lyY3VsYXJQYXRoRGF0YS5yaWdodFNtYWxsQXJjUmFkaXVzKStcIiBBXCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXMrXCIgMCAwIDAgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFkrXCIgTFwiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRYK1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZOlwiTVwiK3QuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VYK1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZK1wiIExcIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdElubmVyRXh0ZW50K1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZK1wiIEFcIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzK1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0U21hbGxBcmNSYWRpdXMrXCIgMCAwIDEgXCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRGdWxsRXh0ZW50K1wiIFwiKyh0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWSt0LmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzKStcIiBMXCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRGdWxsRXh0ZW50K1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudCtcIiBBXCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cytcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzK1wiIDAgMCAxIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0SW5uZXJFeHRlbnQrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCtcIiBMXCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCtcIiBBXCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrXCIgMCAwIDEgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0RnVsbEV4dGVudCtcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxSaWdodElubmVyRXh0ZW50K1wiIExcIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRGdWxsRXh0ZW50K1wiIFwiKyh0LmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WSt0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRTbWFsbEFyY1JhZGl1cykrXCIgQVwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzK1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodFNtYWxsQXJjUmFkaXVzK1wiIDAgMCAxIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodElubmVyRXh0ZW50K1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZK1wiIExcIit0LmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WCtcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WTtyZXR1cm4gZX0oZSk7ZWxzZXt2YXIgaD1uLmxpbmtIb3Jpem9udGFsKCkuc291cmNlKGZ1bmN0aW9uKHQpe3JldHVyblt0LnNvdXJjZS54MCsodC5zb3VyY2UueDEtdC5zb3VyY2UueDApLHQueTBdfSkudGFyZ2V0KGZ1bmN0aW9uKHQpe3JldHVyblt0LnRhcmdldC54MCx0LnkxXX0pO2UucGF0aD1oKGUpfX0pfWZ1bmN0aW9uIEwodCxlKXtyZXR1cm4gUCh0KT09UChlKT9cImJvdHRvbVwiPT10LmNpcmN1bGFyTGlua1R5cGU/Tyh0LGUpOnoodCxlKTpQKGUpLVAodCl9ZnVuY3Rpb24geih0LGUpe3JldHVybiB0LnkwLWUueTB9ZnVuY3Rpb24gTyh0LGUpe3JldHVybiBlLnkwLXQueTB9ZnVuY3Rpb24gSSh0LGUpe3JldHVybiB0LnkxLWUueTF9ZnVuY3Rpb24gRCh0LGUpe3JldHVybiBlLnkxLXQueTF9ZnVuY3Rpb24gUCh0KXtyZXR1cm4gdC50YXJnZXQuY29sdW1uLXQuc291cmNlLmNvbHVtbn1mdW5jdGlvbiBSKHQpe3JldHVybiB0LnRhcmdldC54MC10LnNvdXJjZS54MX1mdW5jdGlvbiBGKHQsZSl7dmFyIHI9VCh0KSxuPVIoZSkvTWF0aC50YW4ocik7cmV0dXJuXCJ1cFwiPT1HKHQpP3QueTErbjp0LnkxLW59ZnVuY3Rpb24gQih0LGUpe3ZhciByPVQodCksbj1SKGUpL01hdGgudGFuKHIpO3JldHVyblwidXBcIj09Ryh0KT90LnkxLW46dC55MStufWZ1bmN0aW9uIE4odCxlLHIsbil7dC5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uKGkpe2lmKCFpLmNpcmN1bGFyJiZpLnRhcmdldC5jb2x1bW4taS5zb3VyY2UuY29sdW1uPjEpe3ZhciBhPWkuc291cmNlLmNvbHVtbisxLG89aS50YXJnZXQuY29sdW1uLTEscz0xLGw9by1hKzE7Zm9yKHM9MTthPD1vO2ErKyxzKyspdC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKG8pe2lmKG8uY29sdW1uPT1hKXt2YXIgYyx1PXMvKGwrMSksaD1NYXRoLnBvdygxLXUsMyksZj0zKnUqTWF0aC5wb3coMS11LDIpLHA9MypNYXRoLnBvdyh1LDIpKigxLXUpLGQ9TWF0aC5wb3codSwzKSxnPWgqaS55MCtmKmkueTArcCppLnkxK2QqaS55MSx2PWctaS53aWR0aC8yLG09ZytpLndpZHRoLzI7dj5vLnkwJiZ2PG8ueTE/KGM9by55MS12KzEwLGM9XCJib3R0b21cIj09by5jaXJjdWxhckxpbmtUeXBlP2M6LWMsbz1WKG8sYyxlLHIpLHQubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXtiKHQsbikhPWIobyxuKSYmdC5jb2x1bW49PW8uY29sdW1uJiZqKG8sdCkmJlYodCxjLGUscil9KSk6bT5vLnkwJiZtPG8ueTE/KGM9bS1vLnkwKzEwLG89VihvLGMsZSxyKSx0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7Yih0LG4pIT1iKG8sbikmJnQuY29sdW1uPT1vLmNvbHVtbiYmdC55MDxvLnkxJiZ0LnkxPm8ueTEmJlYodCxjLGUscil9KSk6djxvLnkwJiZtPm8ueTEmJihjPW0tby55MCsxMCxvPVYobyxjLGUsciksdC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2IodCxuKSE9YihvLG4pJiZ0LmNvbHVtbj09by5jb2x1bW4mJnQueTA8by55MSYmdC55MT5vLnkxJiZWKHQsYyxlLHIpfSkpfX0pfX0pfWZ1bmN0aW9uIGoodCxlKXtyZXR1cm4gdC55MD5lLnkwJiZ0LnkwPGUueTF8fCh0LnkxPmUueTAmJnQueTE8ZS55MXx8dC55MDxlLnkwJiZ0LnkxPmUueTEpfWZ1bmN0aW9uIFYodCxlLHIsbil7cmV0dXJuIHQueTArZT49ciYmdC55MStlPD1uJiYodC55MD10LnkwK2UsdC55MT10LnkxK2UsdC50YXJnZXRMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QueTE9dC55MStlfSksdC5zb3VyY2VMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QueTA9dC55MCtlfSkpLHR9ZnVuY3Rpb24gVSh0LGUscixuKXt0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24oaSl7biYmaS55KyhpLnkxLWkueTApPmUmJihpLnk9aS55LShpLnkrKGkueTEtaS55MCktZSkpO3ZhciBhPXQubGlua3MuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBiKHQuc291cmNlLHIpPT1iKGkscil9KSxvPWEubGVuZ3RoO28+MSYmYS5zb3J0KGZ1bmN0aW9uKHQsZSl7aWYoIXQuY2lyY3VsYXImJiFlLmNpcmN1bGFyKXtpZih0LnRhcmdldC5jb2x1bW49PWUudGFyZ2V0LmNvbHVtbilyZXR1cm4gdC55MS1lLnkxO2lmKCFIKHQsZSkpcmV0dXJuIHQueTEtZS55MTtpZih0LnRhcmdldC5jb2x1bW4+ZS50YXJnZXQuY29sdW1uKXt2YXIgcj1CKGUsdCk7cmV0dXJuIHQueTEtcn1pZihlLnRhcmdldC5jb2x1bW4+dC50YXJnZXQuY29sdW1uKXJldHVybiBCKHQsZSktZS55MX1yZXR1cm4gdC5jaXJjdWxhciYmIWUuY2lyY3VsYXI/XCJ0b3BcIj09dC5jaXJjdWxhckxpbmtUeXBlPy0xOjE6ZS5jaXJjdWxhciYmIXQuY2lyY3VsYXI/XCJ0b3BcIj09ZS5jaXJjdWxhckxpbmtUeXBlPzE6LTE6dC5jaXJjdWxhciYmZS5jaXJjdWxhcj90LmNpcmN1bGFyTGlua1R5cGU9PT1lLmNpcmN1bGFyTGlua1R5cGUmJlwidG9wXCI9PXQuY2lyY3VsYXJMaW5rVHlwZT90LnRhcmdldC5jb2x1bW49PT1lLnRhcmdldC5jb2x1bW4/dC50YXJnZXQueTEtZS50YXJnZXQueTE6ZS50YXJnZXQuY29sdW1uLXQudGFyZ2V0LmNvbHVtbjp0LmNpcmN1bGFyTGlua1R5cGU9PT1lLmNpcmN1bGFyTGlua1R5cGUmJlwiYm90dG9tXCI9PXQuY2lyY3VsYXJMaW5rVHlwZT90LnRhcmdldC5jb2x1bW49PT1lLnRhcmdldC5jb2x1bW4/ZS50YXJnZXQueTEtdC50YXJnZXQueTE6dC50YXJnZXQuY29sdW1uLWUudGFyZ2V0LmNvbHVtbjpcInRvcFwiPT10LmNpcmN1bGFyTGlua1R5cGU/LTE6MTp2b2lkIDB9KTt2YXIgcz1pLnkwO2EuZm9yRWFjaChmdW5jdGlvbih0KXt0LnkwPXMrdC53aWR0aC8yLHMrPXQud2lkdGh9KSxhLmZvckVhY2goZnVuY3Rpb24odCxlKXtpZihcImJvdHRvbVwiPT10LmNpcmN1bGFyTGlua1R5cGUpe2Zvcih2YXIgcj1lKzEsbj0wO3I8bztyKyspbis9YVtyXS53aWR0aDt0LnkwPWkueTEtbi10LndpZHRoLzJ9fSl9KX1mdW5jdGlvbiBxKHQsZSxyKXt0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49dC5saW5rcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGIodC50YXJnZXQscik9PWIoZSxyKX0pLGk9bi5sZW5ndGg7aT4xJiZuLnNvcnQoZnVuY3Rpb24odCxlKXtpZighdC5jaXJjdWxhciYmIWUuY2lyY3VsYXIpe2lmKHQuc291cmNlLmNvbHVtbj09ZS5zb3VyY2UuY29sdW1uKXJldHVybiB0LnkwLWUueTA7aWYoIUgodCxlKSlyZXR1cm4gdC55MC1lLnkwO2lmKGUuc291cmNlLmNvbHVtbjx0LnNvdXJjZS5jb2x1bW4pe3ZhciByPUYoZSx0KTtyZXR1cm4gdC55MC1yfWlmKHQuc291cmNlLmNvbHVtbjxlLnNvdXJjZS5jb2x1bW4pcmV0dXJuIEYodCxlKS1lLnkwfXJldHVybiB0LmNpcmN1bGFyJiYhZS5jaXJjdWxhcj9cInRvcFwiPT10LmNpcmN1bGFyTGlua1R5cGU/LTE6MTplLmNpcmN1bGFyJiYhdC5jaXJjdWxhcj9cInRvcFwiPT1lLmNpcmN1bGFyTGlua1R5cGU/MTotMTp0LmNpcmN1bGFyJiZlLmNpcmN1bGFyP3QuY2lyY3VsYXJMaW5rVHlwZT09PWUuY2lyY3VsYXJMaW5rVHlwZSYmXCJ0b3BcIj09dC5jaXJjdWxhckxpbmtUeXBlP3Quc291cmNlLmNvbHVtbj09PWUuc291cmNlLmNvbHVtbj90LnNvdXJjZS55MS1lLnNvdXJjZS55MTp0LnNvdXJjZS5jb2x1bW4tZS5zb3VyY2UuY29sdW1uOnQuY2lyY3VsYXJMaW5rVHlwZT09PWUuY2lyY3VsYXJMaW5rVHlwZSYmXCJib3R0b21cIj09dC5jaXJjdWxhckxpbmtUeXBlP3Quc291cmNlLmNvbHVtbj09PWUuc291cmNlLmNvbHVtbj90LnNvdXJjZS55MS1lLnNvdXJjZS55MTplLnNvdXJjZS5jb2x1bW4tdC5zb3VyY2UuY29sdW1uOlwidG9wXCI9PXQuY2lyY3VsYXJMaW5rVHlwZT8tMToxOnZvaWQgMH0pO3ZhciBhPWUueTA7bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QueTE9YSt0LndpZHRoLzIsYSs9dC53aWR0aH0pLG4uZm9yRWFjaChmdW5jdGlvbih0LHIpe2lmKFwiYm90dG9tXCI9PXQuY2lyY3VsYXJMaW5rVHlwZSl7Zm9yKHZhciBhPXIrMSxvPTA7YTxpO2ErKylvKz1uW2FdLndpZHRoO3QueTE9ZS55MS1vLXQud2lkdGgvMn19KX0pfWZ1bmN0aW9uIEgodCxlKXtyZXR1cm4gRyh0KT09RyhlKX1mdW5jdGlvbiBHKHQpe3JldHVybiB0LnkwLXQueTE+MD9cInVwXCI6XCJkb3duXCJ9ZnVuY3Rpb24gWSh0LGUpe3JldHVybiBiKHQuc291cmNlLGUpPT1iKHQudGFyZ2V0LGUpfXQuc2Fua2V5Q2lyY3VsYXI9ZnVuY3Rpb24oKXt2YXIgdCxuLGE9MCxiPTAsVD0xLFM9MSxFPTI0LEw9dix6PW8sTz1tLEk9eSxEPTMyLFA9MixSPW51bGw7ZnVuY3Rpb24gRigpe3ZhciBvPXtub2RlczpPLmFwcGx5KG51bGwsYXJndW1lbnRzKSxsaW5rczpJLmFwcGx5KG51bGwsYXJndW1lbnRzKX07IWZ1bmN0aW9uKHQpe3Qubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0LGUpe3QuaW5kZXg9ZSx0LnNvdXJjZUxpbmtzPVtdLHQudGFyZ2V0TGlua3M9W119KTt2YXIgZT1yLm1hcCh0Lm5vZGVzLEwpO3QubGlua3MuZm9yRWFjaChmdW5jdGlvbih0LHIpe3QuaW5kZXg9cjt2YXIgbj10LnNvdXJjZSxpPXQudGFyZ2V0O1wib2JqZWN0XCIhPT0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIG4/XCJ1bmRlZmluZWRcIjpsKG4pKSYmKG49dC5zb3VyY2U9eChlLG4pKSxcIm9iamVjdFwiIT09KFwidW5kZWZpbmVkXCI9PXR5cGVvZiBpP1widW5kZWZpbmVkXCI6bChpKSkmJihpPXQudGFyZ2V0PXgoZSxpKSksbi5zb3VyY2VMaW5rcy5wdXNoKHQpLGkudGFyZ2V0TGlua3MucHVzaCh0KX0pfShvKSxmdW5jdGlvbih0LGUscil7dmFyIG49MDtpZihudWxsPT09cil7Zm9yKHZhciBhPVtdLG89MDtvPHQubGlua3MubGVuZ3RoO28rKyl7dmFyIHM9dC5saW5rc1tvXSxsPXMuc291cmNlLmluZGV4LGM9cy50YXJnZXQuaW5kZXg7YVtsXXx8KGFbbF09W10pLGFbY118fChhW2NdPVtdKSwtMT09PWFbbF0uaW5kZXhPZihjKSYmYVtsXS5wdXNoKGMpfXZhciB1PWkoYSk7dS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoLWUubGVuZ3RofSk7dmFyIGg9e307Zm9yKG89MDtvPHUubGVuZ3RoO28rKyl7Zm9yKHZhciBmPXVbb10scD0hMSxkPTA7ZDxmLmxlbmd0aC0xO2QrKylpZihoW2ZbZF1dfHwoaFtmW2RdXT17fSksaFtmW2RdXSYmaFtmW2RdXVtmW2QrMV1dKXtwPSEwO2JyZWFrfWlmKCFwKXt2YXIgZz1mLnNsaWNlKC0yKTtoW2dbMF1dW2dbMV1dPSEwfX10LmxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC50YXJnZXQuaW5kZXgscj10LnNvdXJjZS5pbmRleDtlPT09cnx8aFtyXSYmaFtyXVtlXT8odC5jaXJjdWxhcj0hMCx0LmNpcmN1bGFyTGlua0lEPW4sbis9MSk6dC5jaXJjdWxhcj0hMX0pfWVsc2UgdC5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc291cmNlW3JdPHQudGFyZ2V0W3JdP3QuY2lyY3VsYXI9ITE6KHQuY2lyY3VsYXI9ITAsdC5jaXJjdWxhckxpbmtJRD1uLG4rPTEpfSl9KG8sMCxSKSxmdW5jdGlvbih0KXt0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dC5wYXJ0T2ZDeWNsZT0hMSx0LnZhbHVlPU1hdGgubWF4KGUuc3VtKHQuc291cmNlTGlua3MsZiksZS5zdW0odC50YXJnZXRMaW5rcyxmKSksdC5zb3VyY2VMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuY2lyY3VsYXImJih0LnBhcnRPZkN5Y2xlPSEwLHQuY2lyY3VsYXJMaW5rVHlwZT1lLmNpcmN1bGFyTGlua1R5cGUpfSksdC50YXJnZXRMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuY2lyY3VsYXImJih0LnBhcnRPZkN5Y2xlPSEwLHQuY2lyY3VsYXJMaW5rVHlwZT1lLmNpcmN1bGFyTGlua1R5cGUpfSl9KX0obyksZnVuY3Rpb24odCl7dmFyIGUscixuO2ZvcihlPXQubm9kZXMscj1bXSxuPTA7ZS5sZW5ndGg7KytuLGU9cixyPVtdKWUuZm9yRWFjaChmdW5jdGlvbih0KXt0LmRlcHRoPW4sdC5zb3VyY2VMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3IuaW5kZXhPZih0LnRhcmdldCk8MCYmIXQuY2lyY3VsYXImJnIucHVzaCh0LnRhcmdldCl9KX0pO2ZvcihlPXQubm9kZXMscj1bXSxuPTA7ZS5sZW5ndGg7KytuLGU9cixyPVtdKWUuZm9yRWFjaChmdW5jdGlvbih0KXt0LmhlaWdodD1uLHQudGFyZ2V0TGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXtyLmluZGV4T2YodC5zb3VyY2UpPDAmJiF0LmNpcmN1bGFyJiZyLnB1c2godC5zb3VyY2UpfSl9KTt0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dC5jb2x1bW49TWF0aC5mbG9vcih6LmNhbGwobnVsbCx0LG4pKX0pfShvKSxBKG8sTCksZnVuY3Rpb24oaSxvLHMpe3ZhciBsPXIubmVzdCgpLmtleShmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW59KS5zb3J0S2V5cyhlLmFzY2VuZGluZykuZW50cmllcyhpLm5vZGVzKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWVzfSk7KGZ1bmN0aW9uKHIpe2lmKG4pe3ZhciBvPTEvMDtsLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9UypuLyh0Lmxlbmd0aCsxKTtvPWU8bz9lOm99KSx0PW99dmFyIHM9ZS5taW4obCxmdW5jdGlvbihyKXtyZXR1cm4oUy1iLShyLmxlbmd0aC0xKSp0KS9lLnN1bShyLGYpfSk7cyo9ayxpLmxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC53aWR0aD10LnZhbHVlKnN9KTt2YXIgYz1mdW5jdGlvbih0KXt2YXIgcj0wLG49MCxpPTAsYT0wLG89ZS5tYXgodC5ub2RlcyxmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW59KTtyZXR1cm4gdC5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY2lyY3VsYXImJihcInRvcFwiPT10LmNpcmN1bGFyTGlua1R5cGU/cis9dC53aWR0aDpuKz10LndpZHRoLDA9PXQudGFyZ2V0LmNvbHVtbiYmKGErPXQud2lkdGgpLHQuc291cmNlLmNvbHVtbj09byYmKGkrPXQud2lkdGgpKX0pLHt0b3A6cj1yPjA/citfK3c6cixib3R0b206bj1uPjA/bitfK3c6bixsZWZ0OmE9YT4wP2ErXyt3OmEscmlnaHQ6aT1pPjA/aStfK3c6aX19KGkpLHU9ZnVuY3Rpb24odCxyKXt2YXIgbj1lLm1heCh0Lm5vZGVzLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbn0pLGk9VC1hLG89Uy1iLHM9aStyLnJpZ2h0K3IubGVmdCxsPW8rci50b3Arci5ib3R0b20sYz1pL3MsdT1vL2w7cmV0dXJuIGE9YSpjK3IubGVmdCxUPTA9PXIucmlnaHQ/VDpUKmMsYj1iKnUrci50b3AsUyo9dSx0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dC54MD1hK3QuY29sdW1uKigoVC1hLUUpL24pLHQueDE9dC54MCtFfSksdX0oaSxjKTtzKj11LGkubGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LndpZHRoPXQudmFsdWUqc30pLGwuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDt0LmZvckVhY2goZnVuY3Rpb24odCxuKXt0LmRlcHRoPT1sLmxlbmd0aC0xJiYxPT1lPyh0LnkwPVMvMi10LnZhbHVlKnMsdC55MT10LnkwK3QudmFsdWUqcyk6MD09dC5kZXB0aCYmMT09ZT8odC55MD1TLzItdC52YWx1ZSpzLHQueTE9dC55MCt0LnZhbHVlKnMpOnQucGFydE9mQ3ljbGU/MD09TSh0LHIpPyh0LnkwPVMvMituLHQueTE9dC55MCt0LnZhbHVlKnMpOlwidG9wXCI9PXQuY2lyY3VsYXJMaW5rVHlwZT8odC55MD1iK24sdC55MT10LnkwK3QudmFsdWUqcyk6KHQueTA9Uy10LnZhbHVlKnMtbix0LnkxPXQueTArdC52YWx1ZSpzKTowPT1jLnRvcHx8MD09Yy5ib3R0b20/KHQueTA9KFMtYikvZSpuLHQueTE9dC55MCt0LnZhbHVlKnMpOih0LnkwPShTLWIpLzItZS8yK24sdC55MT10LnkwK3QudmFsdWUqcyl9KX0pfSkocyksbSgpO2Zvcih2YXIgYz0xLHU9bzt1PjA7LS11KXYoYyo9Ljk5LHMpLG0oKTtmdW5jdGlvbiB2KHQscil7dmFyIG49bC5sZW5ndGg7bC5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBhPWkubGVuZ3RoLG89aVswXS5kZXB0aDtpLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIHM7aWYoaS5zb3VyY2VMaW5rcy5sZW5ndGh8fGkudGFyZ2V0TGlua3MubGVuZ3RoKWlmKGkucGFydE9mQ3ljbGUmJk0oaSxyKT4wKTtlbHNlIGlmKDA9PW8mJjE9PWEpcz1pLnkxLWkueTAsaS55MD1TLzItcy8yLGkueTE9Uy8yK3MvMjtlbHNlIGlmKG89PW4tMSYmMT09YSlzPWkueTEtaS55MCxpLnkwPVMvMi1zLzIsaS55MT1TLzIrcy8yO2Vsc2V7dmFyIGw9ZS5tZWFuKGkuc291cmNlTGlua3MsZyksYz1lLm1lYW4oaS50YXJnZXRMaW5rcyxkKSx1PSgobCYmYz8obCtjKS8yOmx8fGMpLXAoaSkpKnQ7aS55MCs9dSxpLnkxKz11fX0pfSl9ZnVuY3Rpb24gbSgpe2wuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcixuLGksYT1iLG89ZS5sZW5ndGg7Zm9yKGUuc29ydChoKSxpPTA7aTxvOysraSlyPWVbaV0sKG49YS1yLnkwKT4wJiYoci55MCs9bixyLnkxKz1uKSxhPXIueTErdDtpZigobj1hLXQtUyk+MClmb3IoYT1yLnkwLT1uLHIueTEtPW4saT1vLTI7aT49MDstLWkpcj1lW2ldLChuPXIueTErdC1hKT4wJiYoci55MC09bixyLnkxLT1uKSxhPXIueTB9KX19KG8sRCxMKSxCKG8pO2Zvcih2YXIgcz0wO3M8NDtzKyspVShvLFMsTCkscShvLDAsTCksTihvLGIsUyxMKSxVKG8sUyxMKSxxKG8sMCxMKTtyZXR1cm4gZnVuY3Rpb24odCxyLG4pe3ZhciBpPXQubm9kZXMsYT10LmxpbmtzLG89ITEscz0hMTtpZihhLmZvckVhY2goZnVuY3Rpb24odCl7XCJ0b3BcIj09dC5jaXJjdWxhckxpbmtUeXBlP289ITA6XCJib3R0b21cIj09dC5jaXJjdWxhckxpbmtUeXBlJiYocz0hMCl9KSwwPT1vfHwwPT1zKXt2YXIgbD1lLm1pbihpLGZ1bmN0aW9uKHQpe3JldHVybiB0LnkwfSksYz1lLm1heChpLGZ1bmN0aW9uKHQpe3JldHVybiB0LnkxfSksdT1jLWwsaD1uLXIsZj1oL3U7aS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPSh0LnkxLXQueTApKmY7dC55MD0odC55MC1sKSpmLHQueTE9dC55MCtlfSksYS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QueTA9KHQueTAtbCkqZix0LnkxPSh0LnkxLWwpKmYsdC53aWR0aD10LndpZHRoKmZ9KX19KG8sYixTKSxDKG8sUCxTLEwpLG99ZnVuY3Rpb24gQih0KXt0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dC5zb3VyY2VMaW5rcy5zb3J0KHUpLHQudGFyZ2V0TGlua3Muc29ydChjKX0pLHQubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LnkwLHI9ZSxuPXQueTEsaT1uO3Quc291cmNlTGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNpcmN1bGFyPyh0LnkwPW4tdC53aWR0aC8yLG4tPXQud2lkdGgpOih0LnkwPWUrdC53aWR0aC8yLGUrPXQud2lkdGgpfSksdC50YXJnZXRMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY2lyY3VsYXI/KHQueTE9aS10LndpZHRoLzIsaS09dC53aWR0aCk6KHQueTE9cit0LndpZHRoLzIscis9dC53aWR0aCl9KX0pfXJldHVybiBGLm5vZGVJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cyh0KSxGKTpMfSxGLm5vZGVBbGlnbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oej1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cyh0KSxGKTp6fSxGLm5vZGVXaWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT0rdCxGKTpFfSxGLm5vZGVQYWRkaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStlLEYpOnR9LEYubm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE89XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnModCksRik6T30sRi5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oST1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cyh0KSxGKTpJfSxGLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9Yj0wLFQ9K3RbMF0sUz0rdFsxXSxGKTpbVC1hLFMtYl19LEYuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0WzBdWzBdLFQ9K3RbMV1bMF0sYj0rdFswXVsxXSxTPSt0WzFdWzFdLEYpOltbYSxiXSxbVCxTXV19LEYuaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRD0rdCxGKTpEfSxGLmNpcmN1bGFyTGlua0dhcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUD0rdCxGKTpQfSxGLm5vZGVQYWRkaW5nUmF0aW89ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsRik6bn0sRi5zb3J0Tm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFI9dCxGKTpSfSxGLnVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gQSh0LEwpLEIodCksdC5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY2lyY3VsYXImJih0LmNpcmN1bGFyTGlua1R5cGU9dC55MCt0LnkxPFM/XCJ0b3BcIjpcImJvdHRvbVwiLHQuc291cmNlLmNpcmN1bGFyTGlua1R5cGU9dC5jaXJjdWxhckxpbmtUeXBlLHQudGFyZ2V0LmNpcmN1bGFyTGlua1R5cGU9dC5jaXJjdWxhckxpbmtUeXBlKX0pLFUodCxTLEwsITEpLHEodCwwLEwpLEModCxQLFMsTCksdH0sRn0sdC5zYW5rZXlDZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQudGFyZ2V0TGlua3MubGVuZ3RoP3QuZGVwdGg6dC5zb3VyY2VMaW5rcy5sZW5ndGg/ZS5taW4odC5zb3VyY2VMaW5rcyxhKS0xOjB9LHQuc2Fua2V5TGVmdD1mdW5jdGlvbih0KXtyZXR1cm4gdC5kZXB0aH0sdC5zYW5rZXlSaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiBlLTEtdC5oZWlnaHR9LHQuc2Fua2V5SnVzdGlmeT1vLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSxcIm9iamVjdFwiPT10eXBlb2YgciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGU/aShyLHQoXCJkMy1hcnJheVwiKSx0KFwiZDMtY29sbGVjdGlvblwiKSx0KFwiZDMtc2hhcGVcIiksdChcImVsZW1lbnRhcnktY2lyY3VpdHMtZGlyZWN0ZWQtZ3JhcGhcIikpOmkobi5kMz1uLmQzfHx7fSxuLmQzLG4uZDMsbi5kMyxudWxsKX0se1wiZDMtYXJyYXlcIjoxNDMsXCJkMy1jb2xsZWN0aW9uXCI6MTQ0LFwiZDMtc2hhcGVcIjoxNTMsXCJlbGVtZW50YXJ5LWNpcmN1aXRzLWRpcmVjdGVkLWdyYXBoXCI6MTY1fV0sMTUzOltmdW5jdGlvbih0LGUscil7dmFyIG4saTtuPXRoaXMsaT1mdW5jdGlvbih0LGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHIodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBuPU1hdGguYWJzLGk9TWF0aC5hdGFuMixhPU1hdGguY29zLG89TWF0aC5tYXgscz1NYXRoLm1pbixsPU1hdGguc2luLGM9TWF0aC5zcXJ0LHU9MWUtMTIsaD1NYXRoLlBJLGY9aC8yLHA9MipoO2Z1bmN0aW9uIGQodCl7cmV0dXJuIHQ+PTE/Zjp0PD0tMT8tZjpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiB2KHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uIG0odCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiB5KHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIHgodCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gYih0LGUscixuLGksYSxzKXt2YXIgbD10LXIsdT1lLW4saD0ocz9hOi1hKS9jKGwqbCt1KnUpLGY9aCp1LHA9LWgqbCxkPXQrZixnPWUrcCx2PXIrZixtPW4rcCx5PShkK3YpLzIseD0oZyttKS8yLGI9di1kLF89bS1nLHc9YipiK18qXyxrPWktYSxBPWQqbS12KmcsVD0oXzwwPy0xOjEpKmMobygwLGsqayp3LUEqQSkpLE09KEEqXy1iKlQpL3csUz0oLUEqYi1fKlQpL3csRT0oQSpfK2IqVCkvdyxDPSgtQSpiK18qVCkvdyxMPU0teSx6PVMteCxPPUUteSxJPUMteDtyZXR1cm4gTCpMK3oqej5PKk8rSSpJJiYoTT1FLFM9Qykse2N4Ok0sY3k6Uyx4MDE6LWYseTAxOi1wLHgxMTpNKihpL2stMSkseTExOlMqKGkvay0xKX19ZnVuY3Rpb24gXyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gbmV3IF8odCl9ZnVuY3Rpb24gayh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBBKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIFQoKXt2YXIgdD1rLG49QSxpPXIoITApLGE9bnVsbCxvPXcscz1udWxsO2Z1bmN0aW9uIGwocil7dmFyIGwsYyx1LGg9ci5sZW5ndGgsZj0hMTtmb3IobnVsbD09YSYmKHM9byh1PWUucGF0aCgpKSksbD0wO2w8PWg7KytsKSEobDxoJiZpKGM9cltsXSxsLHIpKT09PWYmJigoZj0hZik/cy5saW5lU3RhcnQoKTpzLmxpbmVFbmQoKSksZiYmcy5wb2ludCgrdChjLGwsciksK24oYyxsLHIpKTtpZih1KXJldHVybiBzPW51bGwsdStcIlwifHxudWxsfXJldHVybiBsLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOnIoK2UpLGwpOnR9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cigrdCksbCk6bn0sbC5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCEhdCksbCk6aX0sbC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LG51bGwhPWEmJihzPW8oYSkpLGwpOm99LGwuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9hPXM9bnVsbDpzPW8oYT10KSxsKTphfSxsfWZ1bmN0aW9uIE0oKXt2YXIgdD1rLG49bnVsbCxpPXIoMCksYT1BLG89cighMCkscz1udWxsLGw9dyxjPW51bGw7ZnVuY3Rpb24gdShyKXt2YXIgdSxoLGYscCxkLGc9ci5sZW5ndGgsdj0hMSxtPW5ldyBBcnJheShnKSx5PW5ldyBBcnJheShnKTtmb3IobnVsbD09cyYmKGM9bChkPWUucGF0aCgpKSksdT0wO3U8PWc7Kyt1KXtpZighKHU8ZyYmbyhwPXJbdV0sdSxyKSk9PT12KWlmKHY9IXYpaD11LGMuYXJlYVN0YXJ0KCksYy5saW5lU3RhcnQoKTtlbHNle2ZvcihjLmxpbmVFbmQoKSxjLmxpbmVTdGFydCgpLGY9dS0xO2Y+PWg7LS1mKWMucG9pbnQobVtmXSx5W2ZdKTtjLmxpbmVFbmQoKSxjLmFyZWFFbmQoKX12JiYobVt1XT0rdChwLHUscikseVt1XT0raShwLHUsciksYy5wb2ludChuPytuKHAsdSxyKTptW3VdLGE/K2EocCx1LHIpOnlbdV0pKX1pZihkKXJldHVybiBjPW51bGwsZCtcIlwifHxudWxsfWZ1bmN0aW9uIGgoKXtyZXR1cm4gVCgpLmRlZmluZWQobykuY3VydmUobCkuY29udGV4dChzKX1yZXR1cm4gdS54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTpyKCtlKSxuPW51bGwsdSk6dH0sdS54MD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6cigrZSksdSk6dH0sdS54MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P251bGw6XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoK3QpLHUpOm59LHUueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cigrdCksYT1udWxsLHUpOml9LHUueTA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoK3QpLHUpOml9LHUueTE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bnVsbD09dD9udWxsOlwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCt0KSx1KTphfSx1LmxpbmVYMD11LmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiBoKCkueCh0KS55KGkpfSx1LmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiBoKCkueCh0KS55KGEpfSx1LmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiBoKCkueChuKS55KGkpfSx1LmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoISF0KSx1KTpvfSx1LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQsbnVsbCE9cyYmKGM9bChzKSksdSk6bH0sdS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P3M9Yz1udWxsOmM9bChzPXQpLHUpOnN9LHV9ZnVuY3Rpb24gUyh0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn1mdW5jdGlvbiBFKHQpe3JldHVybiB0fV8ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9fX07dmFyIEM9eih3KTtmdW5jdGlvbiBMKHQpe3RoaXMuX2N1cnZlPXR9ZnVuY3Rpb24geih0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBuZXcgTCh0KGUpKX1yZXR1cm4gZS5fY3VydmU9dCxlfWZ1bmN0aW9uIE8odCl7dmFyIGU9dC5jdXJ2ZTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2Uoeih0KSk6ZSgpLl9jdXJ2ZX0sdH1mdW5jdGlvbiBJKCl7cmV0dXJuIE8oVCgpLmN1cnZlKEMpKX1mdW5jdGlvbiBEKCl7dmFyIHQ9TSgpLmN1cnZlKEMpLGU9dC5jdXJ2ZSxyPXQubGluZVgwLG49dC5saW5lWDEsaT10LmxpbmVZMCxhPXQubGluZVkxO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQuc3RhcnRBbmdsZT10LngwLGRlbGV0ZSB0LngwLHQuZW5kQW5nbGU9dC54MSxkZWxldGUgdC54MSx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmlubmVyUmFkaXVzPXQueTAsZGVsZXRlIHQueTAsdC5vdXRlclJhZGl1cz10LnkxLGRlbGV0ZSB0LnkxLHQubGluZVN0YXJ0QW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gTyhyKCkpfSxkZWxldGUgdC5saW5lWDAsdC5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gTyhuKCkpfSxkZWxldGUgdC5saW5lWDEsdC5saW5lSW5uZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gTyhpKCkpfSxkZWxldGUgdC5saW5lWTAsdC5saW5lT3V0ZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gTyhhKCkpfSxkZWxldGUgdC5saW5lWTEsdC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKHoodCkpOmUoKS5fY3VydmV9LHR9ZnVuY3Rpb24gUCh0LGUpe3JldHVyblsoZT0rZSkqTWF0aC5jb3ModC09TWF0aC5QSS8yKSxlKk1hdGguc2luKHQpXX1MLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX2N1cnZlLnBvaW50KGUqTWF0aC5zaW4odCksZSotTWF0aC5jb3ModCkpfX07dmFyIFI9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIEYodCl7cmV0dXJuIHQuc291cmNlfWZ1bmN0aW9uIEIodCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIE4odCl7dmFyIG49RixpPUIsYT1rLG89QSxzPW51bGw7ZnVuY3Rpb24gbCgpe3ZhciByLGw9Ui5jYWxsKGFyZ3VtZW50cyksYz1uLmFwcGx5KHRoaXMsbCksdT1pLmFwcGx5KHRoaXMsbCk7aWYoc3x8KHM9cj1lLnBhdGgoKSksdChzLCthLmFwcGx5KHRoaXMsKGxbMF09YyxsKSksK28uYXBwbHkodGhpcyxsKSwrYS5hcHBseSh0aGlzLChsWzBdPXUsbCkpLCtvLmFwcGx5KHRoaXMsbCkpLHIpcmV0dXJuIHM9bnVsbCxyK1wiXCJ8fG51bGx9cmV0dXJuIGwuc291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsbCk6bn0sbC50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxsKTppfSxsLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoK3QpLGwpOmF9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cigrdCksbCk6b30sbC5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW51bGw9PXQ/bnVsbDp0LGwpOnN9LGx9ZnVuY3Rpb24gaih0LGUscixuLGkpe3QubW92ZVRvKGUsciksdC5iZXppZXJDdXJ2ZVRvKGU9KGUrbikvMixyLGUsaSxuLGkpfWZ1bmN0aW9uIFYodCxlLHIsbixpKXt0Lm1vdmVUbyhlLHIpLHQuYmV6aWVyQ3VydmVUbyhlLHI9KHIraSkvMixuLHIsbixpKX1mdW5jdGlvbiBVKHQsZSxyLG4saSl7dmFyIGE9UChlLHIpLG89UChlLHI9KHIraSkvMikscz1QKG4sciksbD1QKG4saSk7dC5tb3ZlVG8oYVswXSxhWzFdKSx0LmJlemllckN1cnZlVG8ob1swXSxvWzFdLHNbMF0sc1sxXSxsWzBdLGxbMV0pfXZhciBxPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KGUvaCk7dC5tb3ZlVG8ociwwKSx0LmFyYygwLDAsciwwLHApfX0sSD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc3FydChlLzUpLzI7dC5tb3ZlVG8oLTMqciwtciksdC5saW5lVG8oLXIsLXIpLHQubGluZVRvKC1yLC0zKnIpLHQubGluZVRvKHIsLTMqciksdC5saW5lVG8ociwtciksdC5saW5lVG8oMypyLC1yKSx0LmxpbmVUbygzKnIsciksdC5saW5lVG8ocixyKSx0LmxpbmVUbyhyLDMqciksdC5saW5lVG8oLXIsMypyKSx0LmxpbmVUbygtcixyKSx0LmxpbmVUbygtMypyLHIpLHQuY2xvc2VQYXRoKCl9fSxHPU1hdGguc3FydCgxLzMpLFk9MipHLFc9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNxcnQoZS9ZKSxuPXIqRzt0Lm1vdmVUbygwLC1yKSx0LmxpbmVUbyhuLDApLHQubGluZVRvKDAsciksdC5saW5lVG8oLW4sMCksdC5jbG9zZVBhdGgoKX19LFg9TWF0aC5zaW4oaC8xMCkvTWF0aC5zaW4oNypoLzEwKSxaPU1hdGguc2luKHAvMTApKlgsJD0tTWF0aC5jb3MocC8xMCkqWCxKPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KC44OTA4MTMwOTE1MjkyODUyKmUpLG49WipyLGk9JCpyO3QubW92ZVRvKDAsLXIpLHQubGluZVRvKG4saSk7Zm9yKHZhciBhPTE7YTw1OysrYSl7dmFyIG89cCphLzUscz1NYXRoLmNvcyhvKSxsPU1hdGguc2luKG8pO3QubGluZVRvKGwqciwtcypyKSx0LmxpbmVUbyhzKm4tbCppLGwqbitzKmkpfXQuY2xvc2VQYXRoKCl9fSxLPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KGUpLG49LXIvMjt0LnJlY3QobixuLHIscil9fSxRPU1hdGguc3FydCgzKSx0dD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPS1NYXRoLnNxcnQoZS8oMypRKSk7dC5tb3ZlVG8oMCwyKnIpLHQubGluZVRvKC1RKnIsLXIpLHQubGluZVRvKFEqciwtciksdC5jbG9zZVBhdGgoKX19LGV0PS0uNSxydD1NYXRoLnNxcnQoMykvMixudD0xL01hdGguc3FydCgxMiksaXQ9MyoobnQvMisxKSxhdD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc3FydChlL2l0KSxuPXIvMixpPXIqbnQsYT1uLG89cipudCtyLHM9LWEsbD1vO3QubW92ZVRvKG4saSksdC5saW5lVG8oYSxvKSx0LmxpbmVUbyhzLGwpLHQubGluZVRvKGV0Km4tcnQqaSxydCpuK2V0KmkpLHQubGluZVRvKGV0KmEtcnQqbyxydCphK2V0Km8pLHQubGluZVRvKGV0KnMtcnQqbCxydCpzK2V0KmwpLHQubGluZVRvKGV0Km4rcnQqaSxldCppLXJ0Km4pLHQubGluZVRvKGV0KmErcnQqbyxldCpvLXJ0KmEpLHQubGluZVRvKGV0KnMrcnQqbCxldCpsLXJ0KnMpLHQuY2xvc2VQYXRoKCl9fSxvdD1bcSxILFcsSyxKLHR0LGF0XTtmdW5jdGlvbiBzdCgpe31mdW5jdGlvbiBsdCh0LGUscil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKnQuX3gwK3QuX3gxKS8zLCgyKnQuX3kwK3QuX3kxKS8zLCh0Ll94MCsyKnQuX3gxKS8zLCh0Ll95MCsyKnQuX3kxKS8zLCh0Ll94MCs0KnQuX3gxK2UpLzYsKHQuX3kwKzQqdC5feTErcikvNil9ZnVuY3Rpb24gY3QodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHV0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBodCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gZnQodCxlKXt0aGlzLl9iYXNpcz1uZXcgY3QodCksdGhpcy5fYmV0YT1lfWN0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6bHQodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6bHQodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19LHV0LnByb3RvdHlwZT17YXJlYVN0YXJ0OnN0LGFyZWFFbmQ6c3QsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gyKzIqdGhpcy5feDMpLzMsKHRoaXMuX3kyKzIqdGhpcy5feTMpLzMpLHRoaXMuX2NvbnRleHQubGluZVRvKCh0aGlzLl94MysyKnRoaXMuX3gyKS8zLCh0aGlzLl95MysyKnRoaXMuX3kyKS8zKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9dCx0aGlzLl95Mj1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND10LHRoaXMuX3k0PWUsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNiwodGhpcy5feTArNCp0aGlzLl95MStlKS82KTticmVhaztkZWZhdWx0Omx0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxodC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Mzt2YXIgcj0odGhpcy5feDArNCp0aGlzLl94MSt0KS82LG49KHRoaXMuX3kwKzQqdGhpcy5feTErZSkvNjt0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHIsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8ocixuKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Omx0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxmdC5wcm90b3R5cGU9e2xpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXSx0aGlzLl9iYXNpcy5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LHI9dC5sZW5ndGgtMTtpZihyPjApZm9yKHZhciBuLGk9dFswXSxhPWVbMF0sbz10W3JdLWkscz1lW3JdLWEsbD0tMTsrK2w8PXI7KW49bC9yLHRoaXMuX2Jhc2lzLnBvaW50KHRoaXMuX2JldGEqdFtsXSsoMS10aGlzLl9iZXRhKSooaStuKm8pLHRoaXMuX2JldGEqZVtsXSsoMS10aGlzLl9iZXRhKSooYStuKnMpKTt0aGlzLl94PXRoaXMuX3k9bnVsbCx0aGlzLl9iYXNpcy5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfX07dmFyIHB0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gMT09PWU/bmV3IGN0KHQpOm5ldyBmdCh0LGUpfXJldHVybiByLmJldGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxyfSguODUpO2Z1bmN0aW9uIGR0KHQsZSxyKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8odC5feDErdC5fayoodC5feDItdC5feDApLHQuX3kxK3QuX2sqKHQuX3kyLXQuX3kwKSx0Ll94Mit0Ll9rKih0Ll94MS1lKSx0Ll95Mit0Ll9rKih0Ll95MS1yKSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gZ3QodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fWd0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpkdCh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDE9dCx0aGlzLl95MT1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6ZHQodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciB2dD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIG5ldyBndCh0LGUpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxyfSgwKTtmdW5jdGlvbiBtdCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9bXQucHJvdG90eXBlPXthcmVhU3RhcnQ6c3QsYXJlYUVuZDpzdCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PWUpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9ZTticmVhaztkZWZhdWx0OmR0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgeXQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBuZXcgbXQodCxlKX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oMCk7ZnVuY3Rpb24geHQodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fXh0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OmR0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgYnQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBuZXcgeHQodCxlKX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oMCk7ZnVuY3Rpb24gX3QodCxlLHIpe3ZhciBuPXQuX3gxLGk9dC5feTEsYT10Ll94MixvPXQuX3kyO2lmKHQuX2wwMV9hPnUpe3ZhciBzPTIqdC5fbDAxXzJhKzMqdC5fbDAxX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGw9Myp0Ll9sMDFfYSoodC5fbDAxX2ErdC5fbDEyX2EpO249KG4qcy10Ll94MCp0Ll9sMTJfMmErdC5feDIqdC5fbDAxXzJhKS9sLGk9KGkqcy10Ll95MCp0Ll9sMTJfMmErdC5feTIqdC5fbDAxXzJhKS9sfWlmKHQuX2wyM19hPnUpe3ZhciBjPTIqdC5fbDIzXzJhKzMqdC5fbDIzX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGg9Myp0Ll9sMjNfYSoodC5fbDIzX2ErdC5fbDEyX2EpO2E9KGEqYyt0Ll94MSp0Ll9sMjNfMmEtZSp0Ll9sMTJfMmEpL2gsbz0obypjK3QuX3kxKnQuX2wyM18yYS1yKnQuX2wxMl8yYSkvaH10Ll9jb250ZXh0LmJlemllckN1cnZlVG8obixpLGEsbyx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gd3QodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX13dC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mil9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItdCxuPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Ol90KHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIGt0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZT9uZXcgd3QodCxlKTpuZXcgZ3QodCwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KC41KTtmdW5jdGlvbiBBdCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfUF0LnByb3RvdHlwZT17YXJlYVN0YXJ0OnN0LGFyZWFFbmQ6c3QsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLXQsbj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6X3QodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgVHQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlP25ldyBBdCh0LGUpOm5ldyBtdCh0LDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oLjUpO2Z1bmN0aW9uIE10KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9TXQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi10LG49dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Ol90KHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIFN0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZT9uZXcgTXQodCxlKTpuZXcgeHQodCwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KC41KTtmdW5jdGlvbiBFdCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gQ3QodCl7cmV0dXJuIHQ8MD8tMToxfWZ1bmN0aW9uIEx0KHQsZSxyKXt2YXIgbj10Ll94MS10Ll94MCxpPWUtdC5feDEsYT0odC5feTEtdC5feTApLyhufHxpPDAmJi0wKSxvPShyLXQuX3kxKS8oaXx8bjwwJiYtMCkscz0oYSppK28qbikvKG4raSk7cmV0dXJuKEN0KGEpK0N0KG8pKSpNYXRoLm1pbihNYXRoLmFicyhhKSxNYXRoLmFicyhvKSwuNSpNYXRoLmFicyhzKSl8fDB9ZnVuY3Rpb24genQodCxlKXt2YXIgcj10Ll94MS10Ll94MDtyZXR1cm4gcj8oMyoodC5feTEtdC5feTApL3ItZSkvMjplfWZ1bmN0aW9uIE90KHQsZSxyKXt2YXIgbj10Ll94MCxpPXQuX3kwLGE9dC5feDEsbz10Ll95MSxzPShhLW4pLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4rcyxpK3MqZSxhLXMsby1zKnIsYSxvKX1mdW5jdGlvbiBJdCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gRHQodCl7dGhpcy5fY29udGV4dD1uZXcgUHQodCl9ZnVuY3Rpb24gUHQodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIFJ0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBGdCh0KXt2YXIgZSxyLG49dC5sZW5ndGgtMSxpPW5ldyBBcnJheShuKSxhPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKTtmb3IoaVswXT0wLGFbMF09MixvWzBdPXRbMF0rMip0WzFdLGU9MTtlPG4tMTsrK2UpaVtlXT0xLGFbZV09NCxvW2VdPTQqdFtlXSsyKnRbZSsxXTtmb3IoaVtuLTFdPTIsYVtuLTFdPTcsb1tuLTFdPTgqdFtuLTFdK3Rbbl0sZT0xO2U8bjsrK2Upcj1pW2VdL2FbZS0xXSxhW2VdLT1yLG9bZV0tPXIqb1tlLTFdO2ZvcihpW24tMV09b1tuLTFdL2Fbbi0xXSxlPW4tMjtlPj0wOy0tZSlpW2VdPShvW2VdLWlbZSsxXSkvYVtlXTtmb3IoYVtuLTFdPSh0W25dK2lbbi0xXSkvMixlPTA7ZTxuLTE7KytlKWFbZV09Mip0W2UrMV0taVtlKzFdO3JldHVybltpLGFdfWZ1bmN0aW9uIEJ0KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX3Q9ZX1mdW5jdGlvbiBOdCh0LGUpe2lmKChpPXQubGVuZ3RoKT4xKWZvcih2YXIgcixuLGksYT0xLG89dFtlWzBdXSxzPW8ubGVuZ3RoO2E8aTsrK2EpZm9yKG49byxvPXRbZVthXV0scj0wO3I8czsrK3Ipb1tyXVsxXSs9b1tyXVswXT1pc05hTihuW3JdWzFdKT9uW3JdWzBdOm5bcl1bMV19ZnVuY3Rpb24ganQodCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpOy0tZT49MDspcltlXT1lO3JldHVybiByfWZ1bmN0aW9uIFZ0KHQsZSl7cmV0dXJuIHRbZV19ZnVuY3Rpb24gVXQodCl7dmFyIGU9dC5tYXAocXQpO3JldHVybiBqdCh0KS5zb3J0KGZ1bmN0aW9uKHQscil7cmV0dXJuIGVbdF0tZVtyXX0pfWZ1bmN0aW9uIHF0KHQpe2Zvcih2YXIgZSxyPS0xLG49MCxpPXQubGVuZ3RoLGE9LTEvMDsrK3I8aTspKGU9K3Rbcl1bMV0pPmEmJihhPWUsbj1yKTtyZXR1cm4gbn1mdW5jdGlvbiBIdCh0KXt2YXIgZT10Lm1hcChHdCk7cmV0dXJuIGp0KHQpLnNvcnQoZnVuY3Rpb24odCxyKXtyZXR1cm4gZVt0XS1lW3JdfSl9ZnVuY3Rpb24gR3QodCl7Zm9yKHZhciBlLHI9MCxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KShlPSt0W25dWzFdKSYmKHIrPWUpO3JldHVybiByfUV0LnByb3RvdHlwZT17YXJlYVN0YXJ0OnN0LGFyZWFFbmQ6c3QsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3Q9K3QsZT0rZSx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSkpfX0sSXQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOk90KHRoaXMsdGhpcy5fdDAsenQodGhpcyx0aGlzLl90MCkpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgcj1OYU47aWYoZT0rZSwodD0rdCkhPT10aGlzLl94MXx8ZSE9PXRoaXMuX3kxKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLE90KHRoaXMsenQodGhpcyxyPUx0KHRoaXMsdCxlKSkscik7YnJlYWs7ZGVmYXVsdDpPdCh0aGlzLHRoaXMuX3QwLHI9THQodGhpcyx0LGUpKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWUsdGhpcy5fdDA9cn19fSwoRHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSXQucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24odCxlKXtJdC5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLGUsdCl9LFB0LnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUsdCxuLHIsYSxpKX19LFJ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LHI9dC5sZW5ndGg7aWYocilpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRbMF0sZVswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odFswXSxlWzBdKSwyPT09cil0aGlzLl9jb250ZXh0LmxpbmVUbyh0WzFdLGVbMV0pO2Vsc2UgZm9yKHZhciBuPUZ0KHQpLGk9RnQoZSksYT0wLG89MTtvPHI7KythLCsrbyl0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oblswXVthXSxpWzBdW2FdLG5bMV1bYV0saVsxXVthXSx0W29dLGVbb10pOyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXIpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lLHRoaXMuX3g9dGhpcy5feT1udWxsfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX19LEJ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiYyPT09dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDppZih0aGlzLl90PD0wKXRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsZSksdGhpcy5fY29udGV4dC5saW5lVG8odCxlKTtlbHNle3ZhciByPXRoaXMuX3gqKDEtdGhpcy5fdCkrdCp0aGlzLl90O3RoaXMuX2NvbnRleHQubGluZVRvKHIsdGhpcy5feSksdGhpcy5fY29udGV4dC5saW5lVG8ocixlKX19dGhpcy5feD10LHRoaXMuX3k9ZX19LHQuYXJjPWZ1bmN0aW9uKCl7dmFyIHQ9ZyxvPXYsXz1yKDApLHc9bnVsbCxrPW0sQT15LFQ9eCxNPW51bGw7ZnVuY3Rpb24gUygpe3ZhciByLGcsdixtPSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx5PStvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx4PWsuYXBwbHkodGhpcyxhcmd1bWVudHMpLWYsUz1BLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1mLEU9bihTLXgpLEM9Uz54O2lmKE18fChNPXI9ZS5wYXRoKCkpLHk8bSYmKGc9eSx5PW0sbT1nKSx5PnUpaWYoRT5wLXUpTS5tb3ZlVG8oeSphKHgpLHkqbCh4KSksTS5hcmMoMCwwLHkseCxTLCFDKSxtPnUmJihNLm1vdmVUbyhtKmEoUyksbSpsKFMpKSxNLmFyYygwLDAsbSxTLHgsQykpO2Vsc2V7dmFyIEwseixPPXgsST1TLEQ9eCxQPVMsUj1FLEY9RSxCPVQuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsTj1CPnUmJih3Pyt3LmFwcGx5KHRoaXMsYXJndW1lbnRzKTpjKG0qbSt5KnkpKSxqPXMobih5LW0pLzIsK18uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxWPWosVT1qO2lmKE4+dSl7dmFyIHE9ZChOL20qbChCKSksSD1kKE4veSpsKEIpKTsoUi09MipxKT51PyhEKz1xKj1DPzE6LTEsUC09cSk6KFI9MCxEPVA9KHgrUykvMiksKEYtPTIqSCk+dT8oTys9SCo9Qz8xOi0xLEktPUgpOihGPTAsTz1JPSh4K1MpLzIpfXZhciBHPXkqYShPKSxZPXkqbChPKSxXPW0qYShQKSxYPW0qbChQKTtpZihqPnUpe3ZhciBaLCQ9eSphKEkpLEo9eSpsKEkpLEs9bSphKEQpLFE9bSpsKEQpO2lmKEU8aCYmKFo9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt2YXIgbD1yLXQsYz1uLWUsaD1vLWksZj1zLWEscD1mKmwtaCpjO2lmKCEocCpwPHUpKXJldHVyblt0KyhwPShoKihlLWEpLWYqKHQtaSkpL3ApKmwsZStwKmNdfShHLFksSyxRLCQsSixXLFgpKSl7dmFyIHR0PUctWlswXSxldD1ZLVpbMV0scnQ9JC1aWzBdLG50PUotWlsxXSxpdD0xL2woKCh2PSh0dCpydCtldCpudCkvKGModHQqdHQrZXQqZXQpKmMocnQqcnQrbnQqbnQpKSk+MT8wOnY8LTE/aDpNYXRoLmFjb3ModikpLzIpLGF0PWMoWlswXSpaWzBdK1pbMV0qWlsxXSk7Vj1zKGosKG0tYXQpLyhpdC0xKSksVT1zKGosKHktYXQpLyhpdCsxKSl9fUY+dT9VPnU/KEw9YihLLFEsRyxZLHksVSxDKSx6PWIoJCxKLFcsWCx5LFUsQyksTS5tb3ZlVG8oTC5jeCtMLngwMSxMLmN5K0wueTAxKSxVPGo/TS5hcmMoTC5jeCxMLmN5LFUsaShMLnkwMSxMLngwMSksaSh6LnkwMSx6LngwMSksIUMpOihNLmFyYyhMLmN4LEwuY3ksVSxpKEwueTAxLEwueDAxKSxpKEwueTExLEwueDExKSwhQyksTS5hcmMoMCwwLHksaShMLmN5K0wueTExLEwuY3grTC54MTEpLGkoei5jeSt6LnkxMSx6LmN4K3oueDExKSwhQyksTS5hcmMoei5jeCx6LmN5LFUsaSh6LnkxMSx6LngxMSksaSh6LnkwMSx6LngwMSksIUMpKSk6KE0ubW92ZVRvKEcsWSksTS5hcmMoMCwwLHksTyxJLCFDKSk6TS5tb3ZlVG8oRyxZKSxtPnUmJlI+dT9WPnU/KEw9YihXLFgsJCxKLG0sLVYsQyksej1iKEcsWSxLLFEsbSwtVixDKSxNLmxpbmVUbyhMLmN4K0wueDAxLEwuY3krTC55MDEpLFY8aj9NLmFyYyhMLmN4LEwuY3ksVixpKEwueTAxLEwueDAxKSxpKHoueTAxLHoueDAxKSwhQyk6KE0uYXJjKEwuY3gsTC5jeSxWLGkoTC55MDEsTC54MDEpLGkoTC55MTEsTC54MTEpLCFDKSxNLmFyYygwLDAsbSxpKEwuY3krTC55MTEsTC5jeCtMLngxMSksaSh6LmN5K3oueTExLHouY3grei54MTEpLEMpLE0uYXJjKHouY3gsei5jeSxWLGkoei55MTEsei54MTEpLGkoei55MDEsei54MDEpLCFDKSkpOk0uYXJjKDAsMCxtLFAsRCxDKTpNLmxpbmVUbyhXLFgpfWVsc2UgTS5tb3ZlVG8oMCwwKTtpZihNLmNsb3NlUGF0aCgpLHIpcmV0dXJuIE09bnVsbCxyK1wiXCJ8fG51bGx9cmV0dXJuIFMuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgZT0oK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIscj0oK2suYXBwbHkodGhpcyxhcmd1bWVudHMpKyArQS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItaC8yO3JldHVyblthKHIpKmUsbChyKSplXX0sUy5pbm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6cigrZSksUyk6dH0sUy5vdXRlclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cigrdCksUyk6b30sUy5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoK3QpLFMpOl99LFMucGFkUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PW51bGw9PXQ/bnVsbDpcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cigrdCksUyk6d30sUy5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhrPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCt0KSxTKTprfSxTLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhBPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCt0KSxTKTpBfSxTLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhUPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCt0KSxTKTpUfSxTLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE09bnVsbD09dD9udWxsOnQsUyk6TX0sU30sdC5hcmVhPU0sdC5saW5lPVQsdC5waWU9ZnVuY3Rpb24oKXt2YXIgdD1FLGU9UyxuPW51bGwsaT1yKDApLGE9cihwKSxvPXIoMCk7ZnVuY3Rpb24gcyhyKXt2YXIgcyxsLGMsdSxoLGY9ci5sZW5ndGgsZD0wLGc9bmV3IEFycmF5KGYpLHY9bmV3IEFycmF5KGYpLG09K2kuYXBwbHkodGhpcyxhcmd1bWVudHMpLHk9TWF0aC5taW4ocCxNYXRoLm1heCgtcCxhLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1tKSkseD1NYXRoLm1pbihNYXRoLmFicyh5KS9mLG8uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxiPXgqKHk8MD8tMToxKTtmb3Iocz0wO3M8ZjsrK3MpKGg9dltnW3NdPXNdPSt0KHJbc10scyxyKSk+MCYmKGQrPWgpO2ZvcihudWxsIT1lP2cuc29ydChmdW5jdGlvbih0LHIpe3JldHVybiBlKHZbdF0sdltyXSl9KTpudWxsIT1uJiZnLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gbihyW3RdLHJbZV0pfSkscz0wLGM9ZD8oeS1mKmIpL2Q6MDtzPGY7KytzLG09dSlsPWdbc10sdT1tKygoaD12W2xdKT4wP2gqYzowKStiLHZbbF09e2RhdGE6cltsXSxpbmRleDpzLHZhbHVlOmgsc3RhcnRBbmdsZTptLGVuZEFuZ2xlOnUscGFkQW5nbGU6eH07cmV0dXJuIHZ9cmV0dXJuIHMudmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOnIoK2UpLHMpOnR9LHMuc29ydFZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG49bnVsbCxzKTplfSxzLnNvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlPW51bGwscyk6bn0scy5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCt0KSxzKTppfSxzLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCt0KSxzKTphfSxzLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCt0KSxzKTpvfSxzfSx0LmFyZWFSYWRpYWw9RCx0LnJhZGlhbEFyZWE9RCx0LmxpbmVSYWRpYWw9SSx0LnJhZGlhbExpbmU9SSx0LnBvaW50UmFkaWFsPVAsdC5saW5rSG9yaXpvbnRhbD1mdW5jdGlvbigpe3JldHVybiBOKGopfSx0LmxpbmtWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiBOKFYpfSx0LmxpbmtSYWRpYWw9ZnVuY3Rpb24oKXt2YXIgdD1OKFUpO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHR9LHQuc3ltYm9sPWZ1bmN0aW9uKCl7dmFyIHQ9cihxKSxuPXIoNjQpLGk9bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHI7aWYoaXx8KGk9cj1lLnBhdGgoKSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cykuZHJhdyhpLCtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkscilyZXR1cm4gaT1udWxsLHIrXCJcInx8bnVsbH1yZXR1cm4gYS50eXBlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTpyKGUpLGEpOnR9LGEuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cigrdCksYSk6bn0sYS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/bnVsbDp0LGEpOml9LGF9LHQuc3ltYm9scz1vdCx0LnN5bWJvbENpcmNsZT1xLHQuc3ltYm9sQ3Jvc3M9SCx0LnN5bWJvbERpYW1vbmQ9Vyx0LnN5bWJvbFNxdWFyZT1LLHQuc3ltYm9sU3Rhcj1KLHQuc3ltYm9sVHJpYW5nbGU9dHQsdC5zeW1ib2xXeWU9YXQsdC5jdXJ2ZUJhc2lzQ2xvc2VkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdXQodCl9LHQuY3VydmVCYXNpc09wZW49ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBodCh0KX0sdC5jdXJ2ZUJhc2lzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgY3QodCl9LHQuY3VydmVCdW5kbGU9cHQsdC5jdXJ2ZUNhcmRpbmFsQ2xvc2VkPXl0LHQuY3VydmVDYXJkaW5hbE9wZW49YnQsdC5jdXJ2ZUNhcmRpbmFsPXZ0LHQuY3VydmVDYXRtdWxsUm9tQ2xvc2VkPVR0LHQuY3VydmVDYXRtdWxsUm9tT3Blbj1TdCx0LmN1cnZlQ2F0bXVsbFJvbT1rdCx0LmN1cnZlTGluZWFyQ2xvc2VkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRXQodCl9LHQuY3VydmVMaW5lYXI9dyx0LmN1cnZlTW9ub3RvbmVYPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgSXQodCl9LHQuY3VydmVNb25vdG9uZVk9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBEdCh0KX0sdC5jdXJ2ZU5hdHVyYWw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBSdCh0KX0sdC5jdXJ2ZVN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBCdCh0LC41KX0sdC5jdXJ2ZVN0ZXBBZnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEJ0KHQsMSl9LHQuY3VydmVTdGVwQmVmb3JlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQnQodCwwKX0sdC5zdGFjaz1mdW5jdGlvbigpe3ZhciB0PXIoW10pLGU9anQsbj1OdCxpPVZ0O2Z1bmN0aW9uIGEocil7dmFyIGEsbyxzPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGw9ci5sZW5ndGgsYz1zLmxlbmd0aCx1PW5ldyBBcnJheShjKTtmb3IoYT0wO2E8YzsrK2Epe2Zvcih2YXIgaCxmPXNbYV0scD11W2FdPW5ldyBBcnJheShsKSxkPTA7ZDxsOysrZClwW2RdPWg9WzAsK2kocltkXSxmLGQscildLGguZGF0YT1yW2RdO3Aua2V5PWZ9Zm9yKGE9MCxvPWUodSk7YTxjOysrYSl1W29bYV1dLmluZGV4PWE7cmV0dXJuIG4odSxvKSx1fXJldHVybiBhLmtleXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOnIoUi5jYWxsKGUpKSxhKTp0fSxhLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCt0KSxhKTppfSxhLm9yZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXQ/anQ6XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoUi5jYWxsKHQpKSxhKTplfSxhLm9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P050OnQsYSk6bn0sYX0sdC5zdGFja09mZnNldEV4cGFuZD1mdW5jdGlvbih0LGUpe2lmKChuPXQubGVuZ3RoKT4wKXtmb3IodmFyIHIsbixpLGE9MCxvPXRbMF0ubGVuZ3RoO2E8bzsrK2Epe2ZvcihpPXI9MDtyPG47KytyKWkrPXRbcl1bYV1bMV18fDA7aWYoaSlmb3Iocj0wO3I8bjsrK3IpdFtyXVthXVsxXS89aX1OdCh0LGUpfX0sdC5zdGFja09mZnNldERpdmVyZ2luZz1mdW5jdGlvbih0LGUpe2lmKChzPXQubGVuZ3RoKT4xKWZvcih2YXIgcixuLGksYSxvLHMsbD0wLGM9dFtlWzBdXS5sZW5ndGg7bDxjOysrbClmb3IoYT1vPTAscj0wO3I8czsrK3IpKGk9KG49dFtlW3JdXVtsXSlbMV0tblswXSk+PTA/KG5bMF09YSxuWzFdPWErPWkpOmk8MD8oblsxXT1vLG5bMF09bys9aSk6blswXT1hfSx0LnN0YWNrT2Zmc2V0Tm9uZT1OdCx0LnN0YWNrT2Zmc2V0U2lsaG91ZXR0ZT1mdW5jdGlvbih0LGUpe2lmKChyPXQubGVuZ3RoKT4wKXtmb3IodmFyIHIsbj0wLGk9dFtlWzBdXSxhPWkubGVuZ3RoO248YTsrK24pe2Zvcih2YXIgbz0wLHM9MDtvPHI7KytvKXMrPXRbb11bbl1bMV18fDA7aVtuXVsxXSs9aVtuXVswXT0tcy8yfU50KHQsZSl9fSx0LnN0YWNrT2Zmc2V0V2lnZ2xlPWZ1bmN0aW9uKHQsZSl7aWYoKGk9dC5sZW5ndGgpPjAmJihuPShyPXRbZVswXV0pLmxlbmd0aCk+MCl7Zm9yKHZhciByLG4saSxhPTAsbz0xO288bjsrK28pe2Zvcih2YXIgcz0wLGw9MCxjPTA7czxpOysrcyl7Zm9yKHZhciB1PXRbZVtzXV0saD11W29dWzFdfHwwLGY9KGgtKHVbby0xXVsxXXx8MCkpLzIscD0wO3A8czsrK3Ape3ZhciBkPXRbZVtwXV07Zis9KGRbb11bMV18fDApLShkW28tMV1bMV18fDApfWwrPWgsYys9ZipofXJbby0xXVsxXSs9cltvLTFdWzBdPWEsbCYmKGEtPWMvbCl9cltvLTFdWzFdKz1yW28tMV1bMF09YSxOdCh0LGUpfX0sdC5zdGFja09yZGVyQXBwZWFyYW5jZT1VdCx0LnN0YWNrT3JkZXJBc2NlbmRpbmc9SHQsdC5zdGFja09yZGVyRGVzY2VuZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gSHQodCkucmV2ZXJzZSgpfSx0LnN0YWNrT3JkZXJJbnNpZGVPdXQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPXQubGVuZ3RoLGk9dC5tYXAoR3QpLGE9VXQodCksbz0wLHM9MCxsPVtdLGM9W107Zm9yKGU9MDtlPG47KytlKXI9YVtlXSxvPHM/KG8rPWlbcl0sbC5wdXNoKHIpKToocys9aVtyXSxjLnB1c2gocikpO3JldHVybiBjLnJldmVyc2UoKS5jb25jYXQobCl9LHQuc3RhY2tPcmRlck5vbmU9anQsdC5zdGFja09yZGVyUmV2ZXJzZT1mdW5jdGlvbih0KXtyZXR1cm4ganQodCkucmV2ZXJzZSgpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sXCJvYmplY3RcIj09dHlwZW9mIHImJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBlP2kocix0KFwiZDMtcGF0aFwiKSk6aShuLmQzPW4uZDN8fHt9LG4uZDMpfSx7XCJkMy1wYXRoXCI6MTUwfV0sMTU0OltmdW5jdGlvbih0LGUscil7dmFyIG47bj10aGlzLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO3ZhciBlLHIsbj0wLGk9MCxhPTAsbz0xZTMscz0wLGw9MCxjPTAsdT1cIm9iamVjdFwiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLGg9XCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBmKCl7cmV0dXJuIGx8fChoKHApLGw9dS5ub3coKStjKX1mdW5jdGlvbiBwKCl7bD0wfWZ1bmN0aW9uIGQoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIGcodCxlLHIpe3ZhciBuPW5ldyBkO3JldHVybiBuLnJlc3RhcnQodCxlLHIpLG59ZnVuY3Rpb24gdigpe2YoKSwrK247Zm9yKHZhciB0LHI9ZTtyOykodD1sLXIuX3RpbWUpPj0wJiZyLl9jYWxsLmNhbGwobnVsbCx0KSxyPXIuX25leHQ7LS1ufWZ1bmN0aW9uIG0oKXtsPShzPXUubm93KCkpK2Msbj1pPTA7dHJ5e3YoKX1maW5hbGx5e249MCxmdW5jdGlvbigpe3ZhciB0LG4saT1lLGE9MS8wO2Zvcig7aTspaS5fY2FsbD8oYT5pLl90aW1lJiYoYT1pLl90aW1lKSx0PWksaT1pLl9uZXh0KToobj1pLl9uZXh0LGkuX25leHQ9bnVsbCxpPXQ/dC5fbmV4dD1uOmU9bik7cj10LHgoYSl9KCksbD0wfX1mdW5jdGlvbiB5KCl7dmFyIHQ9dS5ub3coKSxlPXQtcztlPm8mJihjLT1lLHM9dCl9ZnVuY3Rpb24geCh0KXtufHwoaSYmKGk9Y2xlYXJUaW1lb3V0KGkpKSx0LWw+MjQ/KHQ8MS8wJiYoaT1zZXRUaW1lb3V0KG0sdC11Lm5vdygpLWMpKSxhJiYoYT1jbGVhckludGVydmFsKGEpKSk6KGF8fChzPXUubm93KCksYT1zZXRJbnRlcnZhbCh5LG8pKSxuPTEsaChtKSkpfWQucHJvdG90eXBlPWcucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpkLHJlc3RhcnQ6ZnVuY3Rpb24odCxuLGkpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO2k9KG51bGw9PWk/ZigpOitpKSsobnVsbD09bj8wOituKSx0aGlzLl9uZXh0fHxyPT09dGhpc3x8KHI/ci5fbmV4dD10aGlzOmU9dGhpcyxyPXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPWkseCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCx4KCkpfX07dC5ub3c9Zix0LnRpbWVyPWcsdC50aW1lckZsdXNoPXYsdC50aW1lb3V0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1uZXcgZDtyZXR1cm4gZT1udWxsPT1lPzA6K2Usbi5yZXN0YXJ0KGZ1bmN0aW9uKHIpe24uc3RvcCgpLHQocitlKX0sZSxyKSxufSx0LmludGVydmFsPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1uZXcgZCxpPWU7cmV0dXJuIG51bGw9PWU/KG4ucmVzdGFydCh0LGUsciksbik6KGU9K2Uscj1udWxsPT1yP2YoKTorcixuLnJlc3RhcnQoZnVuY3Rpb24gYShvKXtvKz1pLG4ucmVzdGFydChhLGkrPWUsciksdChvKX0sZSxyKSxuKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9KFwib2JqZWN0XCI9PXR5cGVvZiByJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZT9yOm4uZDM9bi5kM3x8e30pfSx7fV0sMTU1OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKCl7dmFyIHQ9e3ZlcnNpb246XCIzLjUuMTdcIn0scj1bXS5zbGljZSxuPWZ1bmN0aW9uKHQpe3JldHVybiByLmNhbGwodCl9LGk9dGhpcy5kb2N1bWVudDtmdW5jdGlvbiBhKHQpe3JldHVybiB0JiYodC5vd25lckRvY3VtZW50fHx0LmRvY3VtZW50fHx0KS5kb2N1bWVudEVsZW1lbnR9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdCYmKHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx0LmRvY3VtZW50JiZ0fHx0LmRlZmF1bHRWaWV3KX1pZihpKXRyeXtuKGkuZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9kZXMpWzBdLm5vZGVUeXBlfWNhdGNoKHQpe249ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpO2UtLTspcltlXT10W2VdO3JldHVybiByfX1pZihEYXRlLm5vd3x8KERhdGUubm93PWZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfSksaSl0cnl7aS5jcmVhdGVFbGVtZW50KFwiRElWXCIpLnN0eWxlLnNldFByb3BlcnR5KFwib3BhY2l0eVwiLDAsXCJcIil9Y2F0Y2godCl7dmFyIHM9dGhpcy5FbGVtZW50LnByb3RvdHlwZSxsPXMuc2V0QXR0cmlidXRlLGM9cy5zZXRBdHRyaWJ1dGVOUyx1PXRoaXMuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUsaD11LnNldFByb3BlcnR5O3Muc2V0QXR0cmlidXRlPWZ1bmN0aW9uKHQsZSl7bC5jYWxsKHRoaXMsdCxlK1wiXCIpfSxzLnNldEF0dHJpYnV0ZU5TPWZ1bmN0aW9uKHQsZSxyKXtjLmNhbGwodGhpcyx0LGUscitcIlwiKX0sdS5zZXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUscil7aC5jYWxsKHRoaXMsdCxlK1wiXCIscil9fWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gcCh0KXtyZXR1cm4gbnVsbD09PXQ/TmFOOit0fWZ1bmN0aW9uIGQodCl7cmV0dXJuIWlzTmFOKHQpfWZ1bmN0aW9uIGcodCl7cmV0dXJue2xlZnQ6ZnVuY3Rpb24oZSxyLG4saSl7Zm9yKGFyZ3VtZW50cy5sZW5ndGg8MyYmKG49MCksYXJndW1lbnRzLmxlbmd0aDw0JiYoaT1lLmxlbmd0aCk7bjxpOyl7dmFyIGE9bitpPj4+MTt0KGVbYV0scik8MD9uPWErMTppPWF9cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKGUscixuLGkpe2Zvcihhcmd1bWVudHMubGVuZ3RoPDMmJihuPTApLGFyZ3VtZW50cy5sZW5ndGg8NCYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPjA/aT1hOm49YSsxfXJldHVybiBufX19dC5hc2NlbmRpbmc9Zix0LmRlc2NlbmRpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59LHQubWluPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPS0xLGE9dC5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KytpPGE7KWlmKG51bGwhPShuPXRbaV0pJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2k8YTspbnVsbCE9KG49dFtpXSkmJnI+biYmKHI9bil9ZWxzZXtmb3IoOysraTxhOylpZihudWxsIT0obj1lLmNhbGwodCx0W2ldLGkpKSYmbj49bil7cj1uO2JyZWFrfWZvcig7KytpPGE7KW51bGwhPShuPWUuY2FsbCh0LHRbaV0saSkpJiZyPm4mJihyPW4pfXJldHVybiByfSx0Lm1heD1mdW5jdGlvbih0LGUpe3ZhciByLG4saT0tMSxhPXQubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtmb3IoOysraTxhOylpZihudWxsIT0obj10W2ldKSYmbj49bil7cj1uO2JyZWFrfWZvcig7KytpPGE7KW51bGwhPShuPXRbaV0pJiZuPnImJihyPW4pfWVsc2V7Zm9yKDsrK2k8YTspaWYobnVsbCE9KG49ZS5jYWxsKHQsdFtpXSxpKSkmJm4+PW4pe3I9bjticmVha31mb3IoOysraTxhOyludWxsIT0obj1lLmNhbGwodCx0W2ldLGkpKSYmbj5yJiYocj1uKX1yZXR1cm4gcn0sdC5leHRlbnQ9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT0tMSxvPXQubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtmb3IoOysrYTxvOylpZihudWxsIT0obj10W2FdKSYmbj49bil7cj1pPW47YnJlYWt9Zm9yKDsrK2E8bzspbnVsbCE9KG49dFthXSkmJihyPm4mJihyPW4pLGk8biYmKGk9bikpfWVsc2V7Zm9yKDsrK2E8bzspaWYobnVsbCE9KG49ZS5jYWxsKHQsdFthXSxhKSkmJm4+PW4pe3I9aT1uO2JyZWFrfWZvcig7KythPG87KW51bGwhPShuPWUuY2FsbCh0LHRbYV0sYSkpJiYocj5uJiYocj1uKSxpPG4mJihpPW4pKX1yZXR1cm5bcixpXX0sdC5zdW09ZnVuY3Rpb24odCxlKXt2YXIgcixuPTAsaT10Lmxlbmd0aCxhPS0xO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KythPGk7KWQocj0rdFthXSkmJihuKz1yKTtlbHNlIGZvcig7KythPGk7KWQocj0rZS5jYWxsKHQsdFthXSxhKSkmJihuKz1yKTtyZXR1cm4gbn0sdC5tZWFuPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj0wLGk9dC5sZW5ndGgsYT0tMSxvPWk7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2E8aTspZChyPXAodFthXSkpP24rPXI6LS1vO2Vsc2UgZm9yKDsrK2E8aTspZChyPXAoZS5jYWxsKHQsdFthXSxhKSkpP24rPXI6LS1vO2lmKG8pcmV0dXJuIG4vb30sdC5xdWFudGlsZT1mdW5jdGlvbih0LGUpe3ZhciByPSh0Lmxlbmd0aC0xKSplKzEsbj1NYXRoLmZsb29yKHIpLGk9K3Rbbi0xXSxhPXItbjtyZXR1cm4gYT9pK2EqKHRbbl0taSk6aX0sdC5tZWRpYW49ZnVuY3Rpb24oZSxyKXt2YXIgbixpPVtdLGE9ZS5sZW5ndGgsbz0tMTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrbzxhOylkKG49cChlW29dKSkmJmkucHVzaChuKTtlbHNlIGZvcig7KytvPGE7KWQobj1wKHIuY2FsbChlLGVbb10sbykpKSYmaS5wdXNoKG4pO2lmKGkubGVuZ3RoKXJldHVybiB0LnF1YW50aWxlKGkuc29ydChmKSwuNSl9LHQudmFyaWFuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dC5sZW5ndGgsYT0wLG89MCxzPS0xLGw9MDtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrczxpOylkKHI9cCh0W3NdKSkmJihvKz0obj1yLWEpKihyLShhKz1uLysrbCkpKTtlbHNlIGZvcig7KytzPGk7KWQocj1wKGUuY2FsbCh0LHRbc10scykpKSYmKG8rPShuPXItYSkqKHItKGErPW4vKytsKSkpO2lmKGw+MSlyZXR1cm4gby8obC0xKX0sdC5kZXZpYXRpb249ZnVuY3Rpb24oKXt2YXIgZT10LnZhcmlhbmNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZT9NYXRoLnNxcnQoZSk6ZX07dmFyIHY9ZyhmKTtmdW5jdGlvbiBtKHQpe3JldHVybiB0Lmxlbmd0aH10LmJpc2VjdExlZnQ9di5sZWZ0LHQuYmlzZWN0PXQuYmlzZWN0UmlnaHQ9di5yaWdodCx0LmJpc2VjdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBnKDE9PT10Lmxlbmd0aD9mdW5jdGlvbihlLHIpe3JldHVybiBmKHQoZSkscil9OnQpfSx0LnNodWZmbGU9ZnVuY3Rpb24odCxlLHIpeyhhPWFyZ3VtZW50cy5sZW5ndGgpPDMmJihyPXQubGVuZ3RoLGE8MiYmKGU9MCkpO2Zvcih2YXIgbixpLGE9ci1lO2E7KWk9TWF0aC5yYW5kb20oKSphLS18MCxuPXRbYStlXSx0W2ErZV09dFtpK2VdLHRbaStlXT1uO3JldHVybiB0fSx0LnBlcm11dGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5sZW5ndGgsbj1uZXcgQXJyYXkocik7ci0tOyluW3JdPXRbZVtyXV07cmV0dXJuIG59LHQucGFpcnM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aC0xLG49dFswXSxpPW5ldyBBcnJheShyPDA/MDpyKTtlPHI7KWlbZV09W24sbj10WysrZV1dO3JldHVybiBpfSx0LnRyYW5zcG9zZT1mdW5jdGlvbihlKXtpZighKGE9ZS5sZW5ndGgpKXJldHVybltdO2Zvcih2YXIgcj0tMSxuPXQubWluKGUsbSksaT1uZXcgQXJyYXkobik7KytyPG47KWZvcih2YXIgYSxvPS0xLHM9aVtyXT1uZXcgQXJyYXkoYSk7KytvPGE7KXNbb109ZVtvXVtyXTtyZXR1cm4gaX0sdC56aXA9ZnVuY3Rpb24oKXtyZXR1cm4gdC50cmFuc3Bvc2UoYXJndW1lbnRzKX0sdC5rZXlzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaChyKTtyZXR1cm4gZX0sdC52YWx1ZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHRbcl0pO3JldHVybiBlfSx0LmVudHJpZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHtrZXk6cix2YWx1ZTp0W3JdfSk7cmV0dXJuIGV9LHQubWVyZ2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpPXQubGVuZ3RoLGE9LTEsbz0wOysrYTxpOylvKz10W2FdLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobyk7LS1pPj0wOylmb3IoZT0obj10W2ldKS5sZW5ndGg7LS1lPj0wOylyWy0tb109bltlXTtyZXR1cm4gcn07dmFyIHk9TWF0aC5hYnM7ZnVuY3Rpb24geCh0LGUpe2Zvcih2YXIgciBpbiBlKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxyLHt2YWx1ZTplW3JdLGVudW1lcmFibGU6ITF9KX1mdW5jdGlvbiBiKCl7dGhpcy5fPU9iamVjdC5jcmVhdGUobnVsbCl9dC5yYW5nZT1mdW5jdGlvbih0LGUscil7aWYoYXJndW1lbnRzLmxlbmd0aDwzJiYocj0xLGFyZ3VtZW50cy5sZW5ndGg8MiYmKGU9dCx0PTApKSwoZS10KS9yPT0xLzApdGhyb3cgbmV3IEVycm9yKFwiaW5maW5pdGUgcmFuZ2VcIik7dmFyIG4saT1bXSxhPWZ1bmN0aW9uKHQpe3ZhciBlPTE7Zm9yKDt0KmUlMTspZSo9MTA7cmV0dXJuIGV9KHkocikpLG89LTE7aWYodCo9YSxlKj1hLChyKj1hKTwwKWZvcig7KG49dCtyKisrbyk+ZTspaS5wdXNoKG4vYSk7ZWxzZSBmb3IoOyhuPXQrciorK28pPGU7KWkucHVzaChuL2EpO3JldHVybiBpfSx0Lm1hcD1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBiO2lmKHQgaW5zdGFuY2VvZiBiKXQuZm9yRWFjaChmdW5jdGlvbih0LGUpe3Iuc2V0KHQsZSl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBuLGk9LTEsYT10Lmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysraTxhOylyLnNldChpLHRbaV0pO2Vsc2UgZm9yKDsrK2k8YTspci5zZXQoZS5jYWxsKHQsbj10W2ldLGkpLG4pfWVsc2UgZm9yKHZhciBvIGluIHQpci5zZXQobyx0W29dKTtyZXR1cm4gcn07dmFyIF89XCJfX3Byb3RvX19cIix3PVwiXFwwXCI7ZnVuY3Rpb24gayh0KXtyZXR1cm4odCs9XCJcIik9PT1ffHx0WzBdPT09dz93K3Q6dH1mdW5jdGlvbiBBKHQpe3JldHVybih0Kz1cIlwiKVswXT09PXc/dC5zbGljZSgxKTp0fWZ1bmN0aW9uIFQodCl7cmV0dXJuIGsodClpbiB0aGlzLl99ZnVuY3Rpb24gTSh0KXtyZXR1cm4odD1rKHQpKWluIHRoaXMuXyYmZGVsZXRlIHRoaXMuX1t0XX1mdW5jdGlvbiBTKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuXyl0LnB1c2goQShlKSk7cmV0dXJuIHR9ZnVuY3Rpb24gRSgpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMuXykrK3Q7cmV0dXJuIHR9ZnVuY3Rpb24gQygpe2Zvcih2YXIgdCBpbiB0aGlzLl8pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gTCgpe3RoaXMuXz1PYmplY3QuY3JlYXRlKG51bGwpfWZ1bmN0aW9uIHoodCl7cmV0dXJuIHR9ZnVuY3Rpb24gTyh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ci5hcHBseShlLGFyZ3VtZW50cyk7cmV0dXJuIG49PT1lP3Q6bn19ZnVuY3Rpb24gSSh0LGUpe2lmKGUgaW4gdClyZXR1cm4gZTtlPWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKTtmb3IodmFyIHI9MCxuPUQubGVuZ3RoO3I8bjsrK3Ipe3ZhciBpPURbcl0rZTtpZihpIGluIHQpcmV0dXJuIGl9fXgoYix7aGFzOlQsZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9bayh0KV19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9bayh0KV09ZX0scmVtb3ZlOk0sa2V5czpTLHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl8pdC5wdXNoKHRoaXMuX1tlXSk7cmV0dXJuIHR9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcy5fKXQucHVzaCh7a2V5OkEoZSksdmFsdWU6dGhpcy5fW2VdfSk7cmV0dXJuIHR9LHNpemU6RSxlbXB0eTpDLGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuXyl0LmNhbGwodGhpcyxBKGUpLHRoaXMuX1tlXSl9fSksdC5uZXN0PWZ1bmN0aW9uKCl7dmFyIGUscixuPXt9LGk9W10sYT1bXTtmdW5jdGlvbiBvKHQsYSxzKXtpZihzPj1pLmxlbmd0aClyZXR1cm4gcj9yLmNhbGwobixhKTplP2Euc29ydChlKTphO2Zvcih2YXIgbCxjLHUsaCxmPS0xLHA9YS5sZW5ndGgsZD1pW3MrK10sZz1uZXcgYjsrK2Y8cDspKGg9Zy5nZXQobD1kKGM9YVtmXSkpKT9oLnB1c2goYyk6Zy5zZXQobCxbY10pO3JldHVybiB0PyhjPXQoKSx1PWZ1bmN0aW9uKGUscil7Yy5zZXQoZSxvKHQscixzKSl9KTooYz17fSx1PWZ1bmN0aW9uKGUscil7Y1tlXT1vKHQscixzKX0pLGcuZm9yRWFjaCh1KSxjfXJldHVybiBuLm1hcD1mdW5jdGlvbih0LGUpe3JldHVybiBvKGUsdCwwKX0sbi5lbnRyaWVzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbiB0KGUscil7aWYocj49aS5sZW5ndGgpcmV0dXJuIGU7dmFyIG49W10sbz1hW3IrK107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlLGkpe24ucHVzaCh7a2V5OmUsdmFsdWVzOnQoaSxyKX0pfSksbz9uLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gbyh0LmtleSxlLmtleSl9KTpufShvKHQubWFwLGUsMCksMCl9LG4ua2V5PWZ1bmN0aW9uKHQpe3JldHVybiBpLnB1c2godCksbn0sbi5zb3J0S2V5cz1mdW5jdGlvbih0KXtyZXR1cm4gYVtpLmxlbmd0aC0xXT10LG59LG4uc29ydFZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gZT10LG59LG4ucm9sbHVwPWZ1bmN0aW9uKHQpe3JldHVybiByPXQsbn0sbn0sdC5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEw7aWYodClmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZS5hZGQodFtyXSk7cmV0dXJuIGV9LHgoTCx7aGFzOlQsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9bayh0Kz1cIlwiKV09ITAsdH0scmVtb3ZlOk0sdmFsdWVzOlMsc2l6ZTpFLGVtcHR5OkMsZm9yRWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fKXQuY2FsbCh0aGlzLEEoZSkpfX0pLHQuYmVoYXZpb3I9e30sdC5yZWJpbmQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj0xLGk9YXJndW1lbnRzLmxlbmd0aDsrK248aTspdFtyPWFyZ3VtZW50c1tuXV09Tyh0LGUsZVtyXSk7cmV0dXJuIHR9O3ZhciBEPVtcIndlYmtpdFwiLFwibXNcIixcIm1velwiLFwiTW96XCIsXCJvXCIsXCJPXCJdO2Z1bmN0aW9uIFAoKXt9ZnVuY3Rpb24gUigpe31mdW5jdGlvbiBGKHQpe3ZhciBlPVtdLHI9bmV3IGI7ZnVuY3Rpb24gbigpe2Zvcih2YXIgcixuPWUsaT0tMSxhPW4ubGVuZ3RoOysraTxhOykocj1uW2ldLm9uKSYmci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHR9cmV0dXJuIG4ub249ZnVuY3Rpb24obixpKXt2YXIgYSxvPXIuZ2V0KG4pO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/byYmby5vbjoobyYmKG8ub249bnVsbCxlPWUuc2xpY2UoMCxhPWUuaW5kZXhPZihvKSkuY29uY2F0KGUuc2xpY2UoYSsxKSksci5yZW1vdmUobikpLGkmJmUucHVzaChyLnNldChuLHtvbjppfSkpLHQpfSxufWZ1bmN0aW9uIEIoKXt0LmV2ZW50LnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24gTigpe2Zvcih2YXIgZSxyPXQuZXZlbnQ7ZT1yLnNvdXJjZUV2ZW50OylyPWU7cmV0dXJuIHJ9ZnVuY3Rpb24gaihlKXtmb3IodmFyIHI9bmV3IFIsbj0wLGk9YXJndW1lbnRzLmxlbmd0aDsrK248aTspclthcmd1bWVudHNbbl1dPUYocik7cmV0dXJuIHIub2Y9ZnVuY3Rpb24obixpKXtyZXR1cm4gZnVuY3Rpb24oYSl7dHJ5e3ZhciBvPWEuc291cmNlRXZlbnQ9dC5ldmVudDthLnRhcmdldD1lLHQuZXZlbnQ9YSxyW2EudHlwZV0uYXBwbHkobixpKX1maW5hbGx5e3QuZXZlbnQ9b319fSxyfXQuZGlzcGF0Y2g9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9bmV3IFIsZT0tMSxyPWFyZ3VtZW50cy5sZW5ndGg7KytlPHI7KXRbYXJndW1lbnRzW2VdXT1GKHQpO3JldHVybiB0fSxSLnByb3RvdHlwZS5vbj1mdW5jdGlvbih0LGUpe3ZhciByPXQuaW5kZXhPZihcIi5cIiksbj1cIlwiO2lmKHI+PTAmJihuPXQuc2xpY2UocisxKSx0PXQuc2xpY2UoMCxyKSksdClyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP3RoaXNbdF0ub24obik6dGhpc1t0XS5vbihuLGUpO2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoKXtpZihudWxsPT1lKWZvcih0IGluIHRoaXMpdGhpcy5oYXNPd25Qcm9wZXJ0eSh0KSYmdGhpc1t0XS5vbihuLG51bGwpO3JldHVybiB0aGlzfX0sdC5ldmVudD1udWxsLHQucmVxdW90ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKFYsXCJcXFxcJCZcIil9O3ZhciBWPS9bXFxcXFxcXlxcJFxcKlxcK1xcP1xcfFxcW1xcXVxcKFxcKVxcLlxce1xcfV0vZyxVPXt9Ll9fcHJvdG9fXz9mdW5jdGlvbih0LGUpe3QuX19wcm90b19fPWV9OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdfTtmdW5jdGlvbiBxKHQpe3JldHVybiBVKHQsVyksdH12YXIgSD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnF1ZXJ5U2VsZWN0b3IodCl9LEc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5xdWVyeVNlbGVjdG9yQWxsKHQpfSxZPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5tYXRjaGVzfHx0W0kodCxcIm1hdGNoZXNTZWxlY3RvclwiKV07cmV0dXJuKFk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5jYWxsKHQsZSl9KSh0LGUpfTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBTaXp6bGUmJihIPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFNpenpsZSh0LGUpWzBdfHxudWxsfSxHPVNpenpsZSxZPVNpenpsZS5tYXRjaGVzU2VsZWN0b3IpLHQuc2VsZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHQuc2VsZWN0KGkuZG9jdW1lbnRFbGVtZW50KX07dmFyIFc9dC5zZWxlY3Rpb24ucHJvdG90eXBlPVtdO2Z1bmN0aW9uIFgodCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdD90OmZ1bmN0aW9uKCl7cmV0dXJuIEgodCx0aGlzKX19ZnVuY3Rpb24gWih0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oKXtyZXR1cm4gRyh0LHRoaXMpfX1XLnNlbGVjdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhPVtdO3Q9WCh0KTtmb3IodmFyIG89LTEscz10aGlzLmxlbmd0aDsrK288czspe2EucHVzaChlPVtdKSxlLnBhcmVudE5vZGU9KG49dGhpc1tvXSkucGFyZW50Tm9kZTtmb3IodmFyIGw9LTEsYz1uLmxlbmd0aDsrK2w8YzspKGk9bltsXSk/KGUucHVzaChyPXQuY2FsbChpLGkuX19kYXRhX18sbCxvKSksciYmXCJfX2RhdGFfX1wiaW4gaSYmKHIuX19kYXRhX189aS5fX2RhdGFfXykpOmUucHVzaChudWxsKX1yZXR1cm4gcShhKX0sVy5zZWxlY3RBbGw9ZnVuY3Rpb24odCl7dmFyIGUscixpPVtdO3Q9Wih0KTtmb3IodmFyIGE9LTEsbz10aGlzLmxlbmd0aDsrK2E8bzspZm9yKHZhciBzPXRoaXNbYV0sbD0tMSxjPXMubGVuZ3RoOysrbDxjOykocj1zW2xdKSYmKGkucHVzaChlPW4odC5jYWxsKHIsci5fX2RhdGFfXyxsLGEpKSksZS5wYXJlbnROb2RlPXIpO3JldHVybiBxKGkpfTt2YXIgJD1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixKPXtzdmc6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHhodG1sOiQseGxpbms6XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIseG1sOlwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zL1wifTtmdW5jdGlvbiBLKGUscil7cmV0dXJuIGU9dC5ucy5xdWFsaWZ5KGUpLG51bGw9PXI/ZS5sb2NhbD9mdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKX06ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShlKX06XCJmdW5jdGlvblwiPT10eXBlb2Ygcj9lLmxvY2FsP2Z1bmN0aW9uKCl7dmFyIHQ9ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09dD90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwsdCl9OmZ1bmN0aW9uKCl7dmFyIHQ9ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09dD90aGlzLnJlbW92ZUF0dHJpYnV0ZShlKTp0aGlzLnNldEF0dHJpYnV0ZShlLHQpfTplLmxvY2FsP2Z1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwscil9OmZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoZSxyKX19ZnVuY3Rpb24gUSh0KXtyZXR1cm4gdC50cmltKCkucmVwbGFjZSgvXFxzKy9nLFwiIFwiKX1mdW5jdGlvbiB0dChlKXtyZXR1cm4gbmV3IFJlZ0V4cChcIig/Ol58XFxcXHMrKVwiK3QucmVxdW90ZShlKStcIig/OlxcXFxzK3wkKVwiLFwiZ1wiKX1mdW5jdGlvbiBldCh0KXtyZXR1cm4odCtcIlwiKS50cmltKCkuc3BsaXQoL158XFxzKy8pfWZ1bmN0aW9uIHJ0KHQsZSl7dmFyIHI9KHQ9ZXQodCkubWFwKG50KSkubGVuZ3RoO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZnVuY3Rpb24oKXtmb3IodmFyIG49LTEsaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTsrK248cjspdFtuXSh0aGlzLGkpfTpmdW5jdGlvbigpe2Zvcih2YXIgbj0tMTsrK248cjspdFtuXSh0aGlzLGUpfX1mdW5jdGlvbiBudCh0KXt2YXIgZT10dCh0KTtyZXR1cm4gZnVuY3Rpb24ocixuKXtpZihpPXIuY2xhc3NMaXN0KXJldHVybiBuP2kuYWRkKHQpOmkucmVtb3ZlKHQpO3ZhciBpPXIuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIil8fFwiXCI7bj8oZS5sYXN0SW5kZXg9MCxlLnRlc3QoaSl8fHIuc2V0QXR0cmlidXRlKFwiY2xhc3NcIixRKGkrXCIgXCIrdCkpKTpyLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsUShpLnJlcGxhY2UoZSxcIiBcIikpKX19ZnVuY3Rpb24gaXQodCxlLHIpe3JldHVybiBudWxsPT1lP2Z1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX06XCJmdW5jdGlvblwiPT10eXBlb2YgZT9mdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsbixyKX06ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZSxyKX19ZnVuY3Rpb24gYXQodCxlKXtyZXR1cm4gbnVsbD09ZT9mdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2Z1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPXJ9OmZ1bmN0aW9uKCl7dGhpc1t0XT1lfX1mdW5jdGlvbiBvdChlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6KGU9dC5ucy5xdWFsaWZ5KGUpKS5sb2NhbD9mdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuc3BhY2UsZS5sb2NhbCl9OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT0kJiZ0LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT0kP3QuY3JlYXRlRWxlbWVudChlKTp0LmNyZWF0ZUVsZW1lbnROUyhyLGUpfX1mdW5jdGlvbiBzdCgpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIGx0KHQpe3JldHVybntfX2RhdGFfXzp0fX1mdW5jdGlvbiBjdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gWSh0aGlzLHQpfX1mdW5jdGlvbiB1dCh0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuO3IrKylmb3IodmFyIGksYT10W3JdLG89MCxzPWEubGVuZ3RoO288cztvKyspKGk9YVtvXSkmJmUoaSxvLHIpO3JldHVybiB0fWZ1bmN0aW9uIGh0KHQpe3JldHVybiBVKHQsZnQpLHR9dC5ucz17cHJlZml4OkoscXVhbGlmeTpmdW5jdGlvbih0KXt2YXIgZT10LmluZGV4T2YoXCI6XCIpLHI9dDtyZXR1cm4gZT49MCYmXCJ4bWxuc1wiIT09KHI9dC5zbGljZSgwLGUpKSYmKHQ9dC5zbGljZShlKzEpKSxKLmhhc093blByb3BlcnR5KHIpP3tzcGFjZTpKW3JdLGxvY2FsOnR9OnR9fSxXLmF0dHI9ZnVuY3Rpb24oZSxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4oZT10Lm5zLnF1YWxpZnkoZSkpLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShlKX1mb3IociBpbiBlKXRoaXMuZWFjaChLKHIsZVtyXSkpO3JldHVybiB0aGlzfXJldHVybiB0aGlzLmVhY2goSyhlLHIpKX0sVy5jbGFzc2VkPWZ1bmN0aW9uKHQsZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7dmFyIHI9dGhpcy5ub2RlKCksbj0odD1ldCh0KSkubGVuZ3RoLGk9LTE7aWYoZT1yLmNsYXNzTGlzdCl7Zm9yKDsrK2k8bjspaWYoIWUuY29udGFpbnModFtpXSkpcmV0dXJuITF9ZWxzZSBmb3IoZT1yLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpOysraTxuOylpZighdHQodFtpXSkudGVzdChlKSlyZXR1cm4hMTtyZXR1cm4hMH1mb3IoZSBpbiB0KXRoaXMuZWFjaChydChlLHRbZV0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKHJ0KHQsZSkpfSxXLnN0eWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoO2lmKG48Myl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpe2ZvcihyIGluIG48MiYmKGU9XCJcIiksdCl0aGlzLmVhY2goaXQocix0W3JdLGUpKTtyZXR1cm4gdGhpc31pZihuPDIpe3ZhciBpPXRoaXMubm9kZSgpO3JldHVybiBvKGkpLmdldENvbXB1dGVkU3R5bGUoaSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfXI9XCJcIn1yZXR1cm4gdGhpcy5lYWNoKGl0KHQsZSxyKSl9LFcucHJvcGVydHk9ZnVuY3Rpb24odCxlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXJldHVybiB0aGlzLm5vZGUoKVt0XTtmb3IoZSBpbiB0KXRoaXMuZWFjaChhdChlLHRbZV0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKGF0KHQsZSkpfSxXLnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/XCJcIjplfTpudWxsPT10P2Z1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1cIlwifTpmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH0pOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxXLmh0bWw9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1lP1wiXCI6ZX06bnVsbD09dD9mdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPVwiXCJ9OmZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9dH0pOnRoaXMubm9kZSgpLmlubmVySFRNTH0sVy5hcHBlbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9b3QodCksdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX0sVy5pbnNlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1vdCh0KSxlPVgoZSksdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUodC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9LFcucmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChzdCl9LFcuZGF0YT1mdW5jdGlvbih0LGUpe3ZhciByLG4saT0tMSxhPXRoaXMubGVuZ3RoO2lmKCFhcmd1bWVudHMubGVuZ3RoKXtmb3IodD1uZXcgQXJyYXkoYT0ocj10aGlzWzBdKS5sZW5ndGgpOysraTxhOykobj1yW2ldKSYmKHRbaV09bi5fX2RhdGFfXyk7cmV0dXJuIHR9ZnVuY3Rpb24gbyh0LHIpe3ZhciBuLGksYSxvPXQubGVuZ3RoLHU9ci5sZW5ndGgsaD1NYXRoLm1pbihvLHUpLGY9bmV3IEFycmF5KHUpLHA9bmV3IEFycmF5KHUpLGQ9bmV3IEFycmF5KG8pO2lmKGUpe3ZhciBnLHY9bmV3IGIsbT1uZXcgQXJyYXkobyk7Zm9yKG49LTE7KytuPG87KShpPXRbbl0pJiYodi5oYXMoZz1lLmNhbGwoaSxpLl9fZGF0YV9fLG4pKT9kW25dPWk6di5zZXQoZyxpKSxtW25dPWcpO2ZvcihuPS0xOysrbjx1OykoaT12LmdldChnPWUuY2FsbChyLGE9cltuXSxuKSkpPyEwIT09aSYmKGZbbl09aSxpLl9fZGF0YV9fPWEpOnBbbl09bHQoYSksdi5zZXQoZywhMCk7Zm9yKG49LTE7KytuPG87KW4gaW4gbSYmITAhPT12LmdldChtW25dKSYmKGRbbl09dFtuXSl9ZWxzZXtmb3Iobj0tMTsrK248aDspaT10W25dLGE9cltuXSxpPyhpLl9fZGF0YV9fPWEsZltuXT1pKTpwW25dPWx0KGEpO2Zvcig7bjx1OysrbilwW25dPWx0KHJbbl0pO2Zvcig7bjxvOysrbilkW25dPXRbbl19cC51cGRhdGU9ZixwLnBhcmVudE5vZGU9Zi5wYXJlbnROb2RlPWQucGFyZW50Tm9kZT10LnBhcmVudE5vZGUscy5wdXNoKHApLGwucHVzaChmKSxjLnB1c2goZCl9dmFyIHM9aHQoW10pLGw9cShbXSksYz1xKFtdKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KWZvcig7KytpPGE7KW8ocj10aGlzW2ldLHQuY2FsbChyLHIucGFyZW50Tm9kZS5fX2RhdGFfXyxpKSk7ZWxzZSBmb3IoOysraTxhOylvKHI9dGhpc1tpXSx0KTtyZXR1cm4gbC5lbnRlcj1mdW5jdGlvbigpe3JldHVybiBzfSxsLmV4aXQ9ZnVuY3Rpb24oKXtyZXR1cm4gY30sbH0sVy5kYXR1bT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KFwiX19kYXRhX19cIix0KTp0aGlzLnByb3BlcnR5KFwiX19kYXRhX19cIil9LFcuZmlsdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPVtdO1wiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJih0PWN0KHQpKTtmb3IodmFyIGE9MCxvPXRoaXMubGVuZ3RoO2E8bzthKyspe2kucHVzaChlPVtdKSxlLnBhcmVudE5vZGU9KHI9dGhpc1thXSkucGFyZW50Tm9kZTtmb3IodmFyIHM9MCxsPXIubGVuZ3RoO3M8bDtzKyspKG49cltzXSkmJnQuY2FsbChuLG4uX19kYXRhX18scyxhKSYmZS5wdXNoKG4pfXJldHVybiBxKGkpfSxXLm9yZGVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xLGU9dGhpcy5sZW5ndGg7Kyt0PGU7KWZvcih2YXIgcixuPXRoaXNbdF0saT1uLmxlbmd0aC0xLGE9bltpXTstLWk+PTA7KShyPW5baV0pJiYoYSYmYSE9PXIubmV4dFNpYmxpbmcmJmEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocixhKSxhPXIpO3JldHVybiB0aGlzfSxXLnNvcnQ9ZnVuY3Rpb24odCl7dD1mdW5jdGlvbih0KXthcmd1bWVudHMubGVuZ3RofHwodD1mKTtyZXR1cm4gZnVuY3Rpb24oZSxyKXtyZXR1cm4gZSYmcj90KGUuX19kYXRhX18sci5fX2RhdGFfXyk6IWUtIXJ9fS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7Zm9yKHZhciBlPS0xLHI9dGhpcy5sZW5ndGg7KytlPHI7KXRoaXNbZV0uc29ydCh0KTtyZXR1cm4gdGhpcy5vcmRlcigpfSxXLmVhY2g9ZnVuY3Rpb24odCl7cmV0dXJuIHV0KHRoaXMsZnVuY3Rpb24oZSxyLG4pe3QuY2FsbChlLGUuX19kYXRhX18scixuKX0pfSxXLmNhbGw9ZnVuY3Rpb24odCl7dmFyIGU9bihhcmd1bWVudHMpO3JldHVybiB0LmFwcGx5KGVbMF09dGhpcyxlKSx0aGlzfSxXLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxXLm5vZGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPXRoaXMubGVuZ3RoO3Q8ZTt0KyspZm9yKHZhciByPXRoaXNbdF0sbj0wLGk9ci5sZW5ndGg7bjxpO24rKyl7dmFyIGE9cltuXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfSxXLnNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiB1dCh0aGlzLGZ1bmN0aW9uKCl7Kyt0fSksdH07dmFyIGZ0PVtdO2Z1bmN0aW9uIHB0KGUscixpKXt2YXIgYT1cIl9fb25cIitlLG89ZS5pbmRleE9mKFwiLlwiKSxzPWd0O28+MCYmKGU9ZS5zbGljZSgwLG8pKTt2YXIgbD1kdC5nZXQoZSk7ZnVuY3Rpb24gYygpe3ZhciB0PXRoaXNbYV07dCYmKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHQsdC4kKSxkZWxldGUgdGhpc1thXSl9cmV0dXJuIGwmJihlPWwscz12dCksbz9yP2Z1bmN0aW9uKCl7dmFyIHQ9cyhyLG4oYXJndW1lbnRzKSk7Yy5jYWxsKHRoaXMpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLHRoaXNbYV09dCx0LiQ9aSksdC5fPXJ9OmM6cj9QOmZ1bmN0aW9uKCl7dmFyIHIsbj1uZXcgUmVnRXhwKFwiXl9fb24oW14uXSspXCIrdC5yZXF1b3RlKGUpK1wiJFwiKTtmb3IodmFyIGkgaW4gdGhpcylpZihyPWkubWF0Y2gobikpe3ZhciBhPXRoaXNbaV07dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHJbMV0sYSxhLiQpLGRlbGV0ZSB0aGlzW2ldfX19dC5zZWxlY3Rpb24uZW50ZXI9aHQsdC5zZWxlY3Rpb24uZW50ZXIucHJvdG90eXBlPWZ0LGZ0LmFwcGVuZD1XLmFwcGVuZCxmdC5lbXB0eT1XLmVtcHR5LGZ0Lm5vZGU9Vy5ub2RlLGZ0LmNhbGw9Vy5jYWxsLGZ0LnNpemU9Vy5zaXplLGZ0LnNlbGVjdD1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksYSxvPVtdLHM9LTEsbD10aGlzLmxlbmd0aDsrK3M8bDspe249KGk9dGhpc1tzXSkudXBkYXRlLG8ucHVzaChlPVtdKSxlLnBhcmVudE5vZGU9aS5wYXJlbnROb2RlO2Zvcih2YXIgYz0tMSx1PWkubGVuZ3RoOysrYzx1OykoYT1pW2NdKT8oZS5wdXNoKG5bY109cj10LmNhbGwoaS5wYXJlbnROb2RlLGEuX19kYXRhX18sYyxzKSksci5fX2RhdGFfXz1hLl9fZGF0YV9fKTplLnB1c2gobnVsbCl9cmV0dXJuIHEobyl9LGZ0Lmluc2VydD1mdW5jdGlvbih0LGUpe3ZhciByLG4saTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYocj10aGlzLGU9ZnVuY3Rpb24odCxlLGEpe3ZhciBvLHM9clthXS51cGRhdGUsbD1zLmxlbmd0aDtmb3IoYSE9aSYmKGk9YSxuPTApLGU+PW4mJihuPWUrMSk7IShvPXNbbl0pJiYrK248bDspO3JldHVybiBvfSksVy5pbnNlcnQuY2FsbCh0aGlzLHQsZSl9LHQuc2VsZWN0PWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0PyhlPVtIKHQsaSldKS5wYXJlbnROb2RlPWkuZG9jdW1lbnRFbGVtZW50OihlPVt0XSkucGFyZW50Tm9kZT1hKHQpLHEoW2VdKX0sdC5zZWxlY3RBbGw9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQ/KGU9bihHKHQsaSkpKS5wYXJlbnROb2RlPWkuZG9jdW1lbnRFbGVtZW50OihlPW4odCkpLnBhcmVudE5vZGU9bnVsbCxxKFtlXSl9LFcub249ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7aWYobjwzKXtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl7Zm9yKHIgaW4gbjwyJiYoZT0hMSksdCl0aGlzLmVhY2gocHQocix0W3JdLGUpKTtyZXR1cm4gdGhpc31pZihuPDIpcmV0dXJuKG49dGhpcy5ub2RlKClbXCJfX29uXCIrdF0pJiZuLl87cj0hMX1yZXR1cm4gdGhpcy5lYWNoKHB0KHQsZSxyKSl9O3ZhciBkdD10Lm1hcCh7bW91c2VlbnRlcjpcIm1vdXNlb3ZlclwiLG1vdXNlbGVhdmU6XCJtb3VzZW91dFwifSk7ZnVuY3Rpb24gZ3QoZSxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9dC5ldmVudDt0LmV2ZW50PW4sclswXT10aGlzLl9fZGF0YV9fO3RyeXtlLmFwcGx5KHRoaXMscil9ZmluYWxseXt0LmV2ZW50PWl9fX1mdW5jdGlvbiB2dCh0LGUpe3ZhciByPWd0KHQsZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQucmVsYXRlZFRhcmdldDtlJiYoZT09PXRoaXN8fDgmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSl8fHIuY2FsbCh0aGlzLHQpfX1pJiZkdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe1wib25cIit0IGluIGkmJmR0LnJlbW92ZSh0KX0pO3ZhciBtdCx5dD0wO2Z1bmN0aW9uIHh0KGUpe3ZhciByPVwiLmRyYWdzdXBwcmVzcy1cIisgKyt5dCxuPVwiY2xpY2tcIityLGk9dC5zZWxlY3QobyhlKSkub24oXCJ0b3VjaG1vdmVcIityLEIpLm9uKFwiZHJhZ3N0YXJ0XCIrcixCKS5vbihcInNlbGVjdHN0YXJ0XCIrcixCKTtpZihudWxsPT1tdCYmKG10PSEoXCJvbnNlbGVjdHN0YXJ0XCJpbiBlKSYmSShlLnN0eWxlLFwidXNlclNlbGVjdFwiKSksbXQpe3ZhciBzPWEoZSkuc3R5bGUsbD1zW210XTtzW210XT1cIm5vbmVcIn1yZXR1cm4gZnVuY3Rpb24odCl7aWYoaS5vbihyLG51bGwpLG10JiYoc1ttdF09bCksdCl7dmFyIGU9ZnVuY3Rpb24oKXtpLm9uKG4sbnVsbCl9O2kub24obixmdW5jdGlvbigpe0IoKSxlKCl9LCEwKSxzZXRUaW1lb3V0KGUsMCl9fX10Lm1vdXNlPWZ1bmN0aW9uKHQpe3JldHVybiBfdCh0LE4oKSl9O3ZhciBidD10aGlzLm5hdmlnYXRvciYmL1dlYktpdC8udGVzdCh0aGlzLm5hdmlnYXRvci51c2VyQWdlbnQpPy0xOjA7ZnVuY3Rpb24gX3QoZSxyKXtyLmNoYW5nZWRUb3VjaGVzJiYocj1yLmNoYW5nZWRUb3VjaGVzWzBdKTt2YXIgbj1lLm93bmVyU1ZHRWxlbWVudHx8ZTtpZihuLmNyZWF0ZVNWR1BvaW50KXt2YXIgaT1uLmNyZWF0ZVNWR1BvaW50KCk7aWYoYnQ8MCl7dmFyIGE9byhlKTtpZihhLnNjcm9sbFh8fGEuc2Nyb2xsWSl7dmFyIHM9KG49dC5zZWxlY3QoXCJib2R5XCIpLmFwcGVuZChcInN2Z1wiKS5zdHlsZSh7cG9zaXRpb246XCJhYnNvbHV0ZVwiLHRvcDowLGxlZnQ6MCxtYXJnaW46MCxwYWRkaW5nOjAsYm9yZGVyOlwibm9uZVwifSxcImltcG9ydGFudFwiKSlbMF1bMF0uZ2V0U2NyZWVuQ1RNKCk7YnQ9IShzLmZ8fHMuZSksbi5yZW1vdmUoKX19cmV0dXJuIGJ0PyhpLng9ci5wYWdlWCxpLnk9ci5wYWdlWSk6KGkueD1yLmNsaWVudFgsaS55PXIuY2xpZW50WSksWyhpPWkubWF0cml4VHJhbnNmb3JtKGUuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSkueCxpLnldfXZhciBsPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3IuY2xpZW50WC1sLmxlZnQtZS5jbGllbnRMZWZ0LHIuY2xpZW50WS1sLnRvcC1lLmNsaWVudFRvcF19ZnVuY3Rpb24gd3QoKXtyZXR1cm4gdC5ldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyfXQudG91Y2g9ZnVuY3Rpb24odCxlLHIpe2lmKGFyZ3VtZW50cy5sZW5ndGg8MyYmKHI9ZSxlPU4oKS5jaGFuZ2VkVG91Y2hlcyksZSlmb3IodmFyIG4saT0wLGE9ZS5sZW5ndGg7aTxhOysraSlpZigobj1lW2ldKS5pZGVudGlmaWVyPT09cilyZXR1cm4gX3QodCxuKX0sdC5iZWhhdmlvci5kcmFnPWZ1bmN0aW9uKCl7dmFyIGU9aihhLFwiZHJhZ1wiLFwiZHJhZ3N0YXJ0XCIsXCJkcmFnZW5kXCIpLHI9bnVsbCxuPXMoUCx0Lm1vdXNlLG8sXCJtb3VzZW1vdmVcIixcIm1vdXNldXBcIiksaT1zKHd0LHQudG91Y2gseixcInRvdWNobW92ZVwiLFwidG91Y2hlbmRcIik7ZnVuY3Rpb24gYSgpe3RoaXMub24oXCJtb3VzZWRvd24uZHJhZ1wiLG4pLm9uKFwidG91Y2hzdGFydC5kcmFnXCIsaSl9ZnVuY3Rpb24gcyhuLGksYSxvLHMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsLGM9dC5ldmVudC50YXJnZXQuY29ycmVzcG9uZGluZ0VsZW1lbnR8fHQuZXZlbnQudGFyZ2V0LHU9dGhpcy5wYXJlbnROb2RlLGg9ZS5vZih0aGlzLGFyZ3VtZW50cyksZj0wLHA9bigpLGQ9XCIuZHJhZ1wiKyhudWxsPT1wP1wiXCI6XCItXCIrcCksZz10LnNlbGVjdChhKGMpKS5vbihvK2QsZnVuY3Rpb24oKXt2YXIgdCxlLHI9aSh1LHApO2lmKCFyKXJldHVybjt0PXJbMF0tbVswXSxlPXJbMV0tbVsxXSxmfD10fGUsbT1yLGgoe3R5cGU6XCJkcmFnXCIseDpyWzBdK2xbMF0seTpyWzFdK2xbMV0sZHg6dCxkeTplfSl9KS5vbihzK2QsZnVuY3Rpb24oKXtpZighaSh1LHApKXJldHVybjtnLm9uKG8rZCxudWxsKS5vbihzK2QsbnVsbCksdihmKSxoKHt0eXBlOlwiZHJhZ2VuZFwifSl9KSx2PXh0KGMpLG09aSh1LHApO2w9cj9bKGw9ci5hcHBseSh0aGlzLGFyZ3VtZW50cykpLngtbVswXSxsLnktbVsxXV06WzAsMF0saCh7dHlwZTpcImRyYWdzdGFydFwifSl9fXJldHVybiBhLm9yaWdpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGEpOnJ9LHQucmViaW5kKGEsZSxcIm9uXCIpfSx0LnRvdWNoZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYoZT1OKCkudG91Y2hlcyksZT9uKGUpLm1hcChmdW5jdGlvbihlKXt2YXIgcj1fdCh0LGUpO3JldHVybiByLmlkZW50aWZpZXI9ZS5pZGVudGlmaWVyLHJ9KTpbXX07dmFyIGt0PTFlLTYsQXQ9a3Qqa3QsVHQ9TWF0aC5QSSxNdD0yKlR0LFN0PU10LWt0LEV0PVR0LzIsQ3Q9VHQvMTgwLEx0PTE4MC9UdDtmdW5jdGlvbiB6dCh0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9ZnVuY3Rpb24gT3QodCxlLHIpe3JldHVybihlWzBdLXRbMF0pKihyWzFdLXRbMV0pLShlWzFdLXRbMV0pKihyWzBdLXRbMF0pfWZ1bmN0aW9uIEl0KHQpe3JldHVybiB0PjE/MDp0PC0xP1R0Ok1hdGguYWNvcyh0KX1mdW5jdGlvbiBEdCh0KXtyZXR1cm4gdD4xP0V0OnQ8LTE/LUV0Ok1hdGguYXNpbih0KX1mdW5jdGlvbiBQdCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn1mdW5jdGlvbiBSdCh0KXtyZXR1cm4odD1NYXRoLnNpbih0LzIpKSp0fXZhciBGdD1NYXRoLlNRUlQyO3QuaW50ZXJwb2xhdGVab29tPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXRbMF0sYT10WzFdLG89dFsyXSxzPWVbMF0sbD1lWzFdLGM9ZVsyXSx1PXMtaSxoPWwtYSxmPXUqdStoKmg7aWYoZjxBdCluPU1hdGgubG9nKGMvbykvRnQscj1mdW5jdGlvbih0KXtyZXR1cm5baSt0KnUsYSt0KmgsbypNYXRoLmV4cChGdCp0Km4pXX07ZWxzZXt2YXIgcD1NYXRoLnNxcnQoZiksZD0oYypjLW8qbys0KmYpLygyKm8qMipwKSxnPShjKmMtbypvLTQqZikvKDIqYyoyKnApLHY9TWF0aC5sb2coTWF0aC5zcXJ0KGQqZCsxKS1kKSxtPU1hdGgubG9nKE1hdGguc3FydChnKmcrMSktZyk7bj0obS12KS9GdCxyPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dCpuLHM9UHQodiksbD1vLygyKnApKihzKihlPUZ0KnIrdiwoKGU9TWF0aC5leHAoMiplKSktMSkvKGUrMSkpLWZ1bmN0aW9uKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfSh2KSk7cmV0dXJuW2krbCp1LGErbCpoLG8qcy9QdChGdCpyK3YpXX19cmV0dXJuIHIuZHVyYXRpb249MWUzKm4scn0sdC5iZWhhdmlvci56b29tPWZ1bmN0aW9uKCl7dmFyIGUscixuLGEscyxsLGMsdSxoLGY9e3g6MCx5OjAsazoxfSxwPVs5NjAsNTAwXSxkPWp0LGc9MjUwLHY9MCxtPVwibW91c2Vkb3duLnpvb21cIix5PVwibW91c2Vtb3ZlLnpvb21cIix4PVwibW91c2V1cC56b29tXCIsYj1cInRvdWNoc3RhcnQuem9vbVwiLF89aih3LFwiem9vbXN0YXJ0XCIsXCJ6b29tXCIsXCJ6b29tZW5kXCIpO2Z1bmN0aW9uIHcodCl7dC5vbihtLHopLm9uKE50K1wiLnpvb21cIixJKS5vbihcImRibGNsaWNrLnpvb21cIixEKS5vbihiLE8pfWZ1bmN0aW9uIGsodCl7cmV0dXJuWyh0WzBdLWYueCkvZi5rLCh0WzFdLWYueSkvZi5rXX1mdW5jdGlvbiBBKHQpe2Yuaz1NYXRoLm1heChkWzBdLE1hdGgubWluKGRbMV0sdCkpfWZ1bmN0aW9uIFQodCxlKXtlPWZ1bmN0aW9uKHQpe3JldHVyblt0WzBdKmYuaytmLngsdFsxXSpmLmsrZi55XX0oZSksZi54Kz10WzBdLWVbMF0sZi55Kz10WzFdLWVbMV19ZnVuY3Rpb24gTShlLG4saSxhKXtlLl9fY2hhcnRfXz17eDpmLngseTpmLnksazpmLmt9LEEoTWF0aC5wb3coMixhKSksVChyPW4saSksZT10LnNlbGVjdChlKSxnPjAmJihlPWUudHJhbnNpdGlvbigpLmR1cmF0aW9uKGcpKSxlLmNhbGwody5ldmVudCl9ZnVuY3Rpb24gUygpe2MmJmMuZG9tYWluKGwucmFuZ2UoKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuKHQtZi54KS9mLmt9KS5tYXAobC5pbnZlcnQpKSxoJiZoLmRvbWFpbih1LnJhbmdlKCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybih0LWYueSkvZi5rfSkubWFwKHUuaW52ZXJ0KSl9ZnVuY3Rpb24gRSh0KXt2Kyt8fHQoe3R5cGU6XCJ6b29tc3RhcnRcIn0pfWZ1bmN0aW9uIEModCl7UygpLHQoe3R5cGU6XCJ6b29tXCIsc2NhbGU6Zi5rLHRyYW5zbGF0ZTpbZi54LGYueV19KX1mdW5jdGlvbiBMKHQpey0tdnx8KHQoe3R5cGU6XCJ6b29tZW5kXCJ9KSxyPW51bGwpfWZ1bmN0aW9uIHooKXt2YXIgZT10aGlzLHI9Xy5vZihlLGFyZ3VtZW50cyksbj0wLGk9dC5zZWxlY3QobyhlKSkub24oeSxmdW5jdGlvbigpe249MSxUKHQubW91c2UoZSksYSksQyhyKX0pLm9uKHgsZnVuY3Rpb24oKXtpLm9uKHksbnVsbCkub24oeCxudWxsKSxzKG4pLEwocil9KSxhPWsodC5tb3VzZShlKSkscz14dChlKTtocy5jYWxsKGUpLEUocil9ZnVuY3Rpb24gTygpe3ZhciBlLHI9dGhpcyxuPV8ub2Yocixhcmd1bWVudHMpLGk9e30sYT0wLG89XCIuem9vbS1cIit0LmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXIsbD1cInRvdWNobW92ZVwiK28sYz1cInRvdWNoZW5kXCIrbyx1PVtdLGg9dC5zZWxlY3QocikscD14dChyKTtmdW5jdGlvbiBkKCl7dmFyIG49dC50b3VjaGVzKHIpO3JldHVybiBlPWYuayxuLmZvckVhY2goZnVuY3Rpb24odCl7dC5pZGVudGlmaWVyIGluIGkmJihpW3QuaWRlbnRpZmllcl09ayh0KSl9KSxufWZ1bmN0aW9uIGcoKXt2YXIgZT10LmV2ZW50LnRhcmdldDt0LnNlbGVjdChlKS5vbihsLHYpLm9uKGMseSksdS5wdXNoKGUpO2Zvcih2YXIgbj10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLG89MCxoPW4ubGVuZ3RoO288aDsrK28paVtuW29dLmlkZW50aWZpZXJdPW51bGw7dmFyIHA9ZCgpLGc9RGF0ZS5ub3coKTtpZigxPT09cC5sZW5ndGgpe2lmKGctczw1MDApe3ZhciBtPXBbMF07TShyLG0saVttLmlkZW50aWZpZXJdLE1hdGguZmxvb3IoTWF0aC5sb2coZi5rKS9NYXRoLkxOMikrMSksQigpfXM9Z31lbHNlIGlmKHAubGVuZ3RoPjEpe209cFswXTt2YXIgeD1wWzFdLGI9bVswXS14WzBdLF89bVsxXS14WzFdO2E9YipiK18qX319ZnVuY3Rpb24gdigpe3ZhciBvLGwsYyx1LGg9dC50b3VjaGVzKHIpO2hzLmNhbGwocik7Zm9yKHZhciBmPTAscD1oLmxlbmd0aDtmPHA7KytmLHU9bnVsbClpZihjPWhbZl0sdT1pW2MuaWRlbnRpZmllcl0pe2lmKGwpYnJlYWs7bz1jLGw9dX1pZih1KXt2YXIgZD0oZD1jWzBdLW9bMF0pKmQrKGQ9Y1sxXS1vWzFdKSpkLGc9YSYmTWF0aC5zcXJ0KGQvYSk7bz1bKG9bMF0rY1swXSkvMiwob1sxXStjWzFdKS8yXSxsPVsobFswXSt1WzBdKS8yLChsWzFdK3VbMV0pLzJdLEEoZyplKX1zPW51bGwsVChvLGwpLEMobil9ZnVuY3Rpb24geSgpe2lmKHQuZXZlbnQudG91Y2hlcy5sZW5ndGgpe2Zvcih2YXIgZT10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLHI9MCxhPWUubGVuZ3RoO3I8YTsrK3IpZGVsZXRlIGlbZVtyXS5pZGVudGlmaWVyXTtmb3IodmFyIHMgaW4gaSlyZXR1cm4gdm9pZCBkKCl9dC5zZWxlY3RBbGwodSkub24obyxudWxsKSxoLm9uKG0seikub24oYixPKSxwKCksTChuKX1nKCksRShuKSxoLm9uKG0sbnVsbCkub24oYixnKX1mdW5jdGlvbiBJKCl7dmFyIGk9Xy5vZih0aGlzLGFyZ3VtZW50cyk7YT9jbGVhclRpbWVvdXQoYSk6KGhzLmNhbGwodGhpcyksZT1rKHI9bnx8dC5tb3VzZSh0aGlzKSksRShpKSksYT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YT1udWxsLEwoaSl9LDUwKSxCKCksQShNYXRoLnBvdygyLC4wMDIqQnQoKSkqZi5rKSxUKHIsZSksQyhpKX1mdW5jdGlvbiBEKCl7dmFyIGU9dC5tb3VzZSh0aGlzKSxyPU1hdGgubG9nKGYuaykvTWF0aC5MTjI7TSh0aGlzLGUsayhlKSx0LmV2ZW50LnNoaWZ0S2V5P01hdGguY2VpbChyKS0xOk1hdGguZmxvb3IocikrMSl9cmV0dXJuIE50fHwoTnQ9XCJvbndoZWVsXCJpbiBpPyhCdD1mdW5jdGlvbigpe3JldHVybi10LmV2ZW50LmRlbHRhWSoodC5ldmVudC5kZWx0YU1vZGU/MTIwOjEpfSxcIndoZWVsXCIpOlwib25tb3VzZXdoZWVsXCJpbiBpPyhCdD1mdW5jdGlvbigpe3JldHVybiB0LmV2ZW50LndoZWVsRGVsdGF9LFwibW91c2V3aGVlbFwiKTooQnQ9ZnVuY3Rpb24oKXtyZXR1cm4tdC5ldmVudC5kZXRhaWx9LFwiTW96TW91c2VQaXhlbFNjcm9sbFwiKSksdy5ldmVudD1mdW5jdGlvbihlKXtlLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1fLm9mKHRoaXMsYXJndW1lbnRzKSxuPWY7ZHM/dC5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmVhY2goXCJzdGFydC56b29tXCIsZnVuY3Rpb24oKXtmPXRoaXMuX19jaGFydF9ffHx7eDowLHk6MCxrOjF9LEUoZSl9KS50d2VlbihcInpvb206em9vbVwiLGZ1bmN0aW9uKCl7dmFyIGk9cFswXSxhPXBbMV0sbz1yP3JbMF06aS8yLHM9cj9yWzFdOmEvMixsPXQuaW50ZXJwb2xhdGVab29tKFsoby1mLngpL2Yuaywocy1mLnkpL2YuayxpL2Yua10sWyhvLW4ueCkvbi5rLChzLW4ueSkvbi5rLGkvbi5rXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPWwodCksbj1pL3JbMl07dGhpcy5fX2NoYXJ0X189Zj17eDpvLXJbMF0qbix5OnMtclsxXSpuLGs6bn0sQyhlKX19KS5lYWNoKFwiaW50ZXJydXB0Lnpvb21cIixmdW5jdGlvbigpe0woZSl9KS5lYWNoKFwiZW5kLnpvb21cIixmdW5jdGlvbigpe0woZSl9KToodGhpcy5fX2NoYXJ0X189ZixFKGUpLEMoZSksTChlKSl9KX0sdy50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9e3g6K3RbMF0seTordFsxXSxrOmYua30sUygpLHcpOltmLngsZi55XX0sdy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj17eDpmLngseTpmLnksazpudWxsfSxBKCt0KSxTKCksdyk6Zi5rfSx3LnNjYWxlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPW51bGw9PXQ/anQ6Wyt0WzBdLCt0WzFdXSx3KTpkfSx3LmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10JiZbK3RbMF0sK3RbMV1dLHcpOm59LHcuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD10JiZbK3RbMF0sK3RbMV1dLHcpOnB9LHcuZHVyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9K3Qsdyk6Z30sdy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsbD10LmNvcHkoKSxmPXt4OjAseTowLGs6MX0sdyk6Y30sdy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXQsdT10LmNvcHkoKSxmPXt4OjAseTowLGs6MX0sdyk6aH0sdC5yZWJpbmQodyxfLFwib25cIil9O3ZhciBCdCxOdCxqdD1bMCwxLzBdO2Z1bmN0aW9uIFZ0KCl7fWZ1bmN0aW9uIFV0KHQsZSxyKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFV0Pyh0aGlzLmg9K3QsdGhpcy5zPStlLHZvaWQodGhpcy5sPStyKSk6YXJndW1lbnRzLmxlbmd0aDwyP3QgaW5zdGFuY2VvZiBVdD9uZXcgVXQodC5oLHQucyx0LmwpOnVlKFwiXCIrdCxoZSxVdCk6bmV3IFV0KHQsZSxyKX10LmNvbG9yPVZ0LFZ0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpK1wiXCJ9LHQuaHNsPVV0O3ZhciBxdD1VdC5wcm90b3R5cGU9bmV3IFZ0O2Z1bmN0aW9uIEh0KHQsZSxyKXt2YXIgbixpO2Z1bmN0aW9uIGEodCl7cmV0dXJuIE1hdGgucm91bmQoMjU1KmZ1bmN0aW9uKHQpe3JldHVybiB0PjM2MD90LT0zNjA6dDwwJiYodCs9MzYwKSx0PDYwP24rKGktbikqdC82MDp0PDE4MD9pOnQ8MjQwP24rKGktbikqKDI0MC10KS82MDpufSh0KSl9cmV0dXJuIHQ9aXNOYU4odCk/MDoodCU9MzYwKTwwP3QrMzYwOnQsZT1pc05hTihlKT8wOmU8MD8wOmU+MT8xOmUsbj0yKihyPXI8MD8wOnI+MT8xOnIpLShpPXI8PS41P3IqKDErZSk6citlLXIqZSksbmV3IGFlKGEodCsxMjApLGEodCksYSh0LTEyMCkpfWZ1bmN0aW9uIEd0KGUscixuKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIEd0Pyh0aGlzLmg9K2UsdGhpcy5jPStyLHZvaWQodGhpcy5sPStuKSk6YXJndW1lbnRzLmxlbmd0aDwyP2UgaW5zdGFuY2VvZiBHdD9uZXcgR3QoZS5oLGUuYyxlLmwpOmVlKGUgaW5zdGFuY2VvZiBYdD9lLmw6KGU9ZmUoKGU9dC5yZ2IoZSkpLnIsZS5nLGUuYikpLmwsZS5hLGUuYik6bmV3IEd0KGUscixuKX1xdC5icmlnaHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP3Q6MSksbmV3IFV0KHRoaXMuaCx0aGlzLnMsdGhpcy5sL3QpfSxxdC5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD90OjEpLG5ldyBVdCh0aGlzLmgsdGhpcy5zLHQqdGhpcy5sKX0scXQucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIEh0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKX0sdC5oY2w9R3Q7dmFyIFl0PUd0LnByb3RvdHlwZT1uZXcgVnQ7ZnVuY3Rpb24gV3QodCxlLHIpe3JldHVybiBpc05hTih0KSYmKHQ9MCksaXNOYU4oZSkmJihlPTApLG5ldyBYdChyLE1hdGguY29zKHQqPUN0KSplLE1hdGguc2luKHQpKmUpfWZ1bmN0aW9uIFh0KHQsZSxyKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFh0Pyh0aGlzLmw9K3QsdGhpcy5hPStlLHZvaWQodGhpcy5iPStyKSk6YXJndW1lbnRzLmxlbmd0aDwyP3QgaW5zdGFuY2VvZiBYdD9uZXcgWHQodC5sLHQuYSx0LmIpOnQgaW5zdGFuY2VvZiBHdD9XdCh0LmgsdC5jLHQubCk6ZmUoKHQ9YWUodCkpLnIsdC5nLHQuYik6bmV3IFh0KHQsZSxyKX1ZdC5icmlnaHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEd0KHRoaXMuaCx0aGlzLmMsTWF0aC5taW4oMTAwLHRoaXMubCtadCooYXJndW1lbnRzLmxlbmd0aD90OjEpKSl9LFl0LmRhcmtlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEd0KHRoaXMuaCx0aGlzLmMsTWF0aC5tYXgoMCx0aGlzLmwtWnQqKGFyZ3VtZW50cy5sZW5ndGg/dDoxKSkpfSxZdC5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4gV3QodGhpcy5oLHRoaXMuYyx0aGlzLmwpLnJnYigpfSx0LmxhYj1YdDt2YXIgWnQ9MTgsJHQ9Ljk1MDQ3LEp0PTEsS3Q9MS4wODg4MyxRdD1YdC5wcm90b3R5cGU9bmV3IFZ0O2Z1bmN0aW9uIHRlKHQsZSxyKXt2YXIgbj0odCsxNikvMTE2LGk9bitlLzUwMCxhPW4tci8yMDA7cmV0dXJuIG5ldyBhZShpZSgzLjI0MDQ1NDIqKGk9cmUoaSkqJHQpLTEuNTM3MTM4NSoobj1yZShuKSpKdCktLjQ5ODUzMTQqKGE9cmUoYSkqS3QpKSxpZSgtLjk2OTI2NippKzEuODc2MDEwOCpuKy4wNDE1NTYqYSksaWUoLjA1NTY0MzQqaS0uMjA0MDI1OSpuKzEuMDU3MjI1MiphKSl9ZnVuY3Rpb24gZWUodCxlLHIpe3JldHVybiB0PjA/bmV3IEd0KE1hdGguYXRhbjIocixlKSpMdCxNYXRoLnNxcnQoZSplK3IqciksdCk6bmV3IEd0KE5hTixOYU4sdCl9ZnVuY3Rpb24gcmUodCl7cmV0dXJuIHQ+LjIwNjg5MzAzND90KnQqdDoodC00LzI5KS83Ljc4NzAzN31mdW5jdGlvbiBuZSh0KXtyZXR1cm4gdD4uMDA4ODU2P01hdGgucG93KHQsMS8zKTo3Ljc4NzAzNyp0KzQvMjl9ZnVuY3Rpb24gaWUodCl7cmV0dXJuIE1hdGgucm91bmQoMjU1Kih0PD0uMDAzMDQ/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KSl9ZnVuY3Rpb24gYWUodCxlLHIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgYWU/KHRoaXMucj1+fnQsdGhpcy5nPX5+ZSx2b2lkKHRoaXMuYj1+fnIpKTphcmd1bWVudHMubGVuZ3RoPDI/dCBpbnN0YW5jZW9mIGFlP25ldyBhZSh0LnIsdC5nLHQuYik6dWUoXCJcIit0LGFlLEh0KTpuZXcgYWUodCxlLHIpfWZ1bmN0aW9uIG9lKHQpe3JldHVybiBuZXcgYWUodD4+MTYsdD4+OCYyNTUsMjU1JnQpfWZ1bmN0aW9uIHNlKHQpe3JldHVybiBvZSh0KStcIlwifVF0LmJyaWdodGVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWHQoTWF0aC5taW4oMTAwLHRoaXMubCtadCooYXJndW1lbnRzLmxlbmd0aD90OjEpKSx0aGlzLmEsdGhpcy5iKX0sUXQuZGFya2VyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWHQoTWF0aC5tYXgoMCx0aGlzLmwtWnQqKGFyZ3VtZW50cy5sZW5ndGg/dDoxKSksdGhpcy5hLHRoaXMuYil9LFF0LnJnYj1mdW5jdGlvbigpe3JldHVybiB0ZSh0aGlzLmwsdGhpcy5hLHRoaXMuYil9LHQucmdiPWFlO3ZhciBsZT1hZS5wcm90b3R5cGU9bmV3IFZ0O2Z1bmN0aW9uIGNlKHQpe3JldHVybiB0PDE2P1wiMFwiK01hdGgubWF4KDAsdCkudG9TdHJpbmcoMTYpOk1hdGgubWluKDI1NSx0KS50b1N0cmluZygxNil9ZnVuY3Rpb24gdWUodCxlLHIpe3ZhciBuLGksYSxvPTAscz0wLGw9MDtpZihuPS8oW2Etel0rKVxcKCguKilcXCkvLmV4ZWModD10LnRvTG93ZXJDYXNlKCkpKXN3aXRjaChpPW5bMl0uc3BsaXQoXCIsXCIpLG5bMV0pe2Nhc2VcImhzbFwiOnJldHVybiByKHBhcnNlRmxvYXQoaVswXSkscGFyc2VGbG9hdChpWzFdKS8xMDAscGFyc2VGbG9hdChpWzJdKS8xMDApO2Nhc2VcInJnYlwiOnJldHVybiBlKGRlKGlbMF0pLGRlKGlbMV0pLGRlKGlbMl0pKX1yZXR1cm4oYT1nZS5nZXQodCkpP2UoYS5yLGEuZyxhLmIpOihudWxsPT10fHxcIiNcIiE9PXQuY2hhckF0KDApfHxpc05hTihhPXBhcnNlSW50KHQuc2xpY2UoMSksMTYpKXx8KDQ9PT10Lmxlbmd0aD8obz0oMzg0MCZhKT4+NCxvfD1vPj40LHM9MjQwJmEsc3w9cz4+NCxsPTE1JmEsbHw9bDw8NCk6Nz09PXQubGVuZ3RoJiYobz0oMTY3MTE2ODAmYSk+PjE2LHM9KDY1MjgwJmEpPj44LGw9MjU1JmEpKSxlKG8scyxsKSl9ZnVuY3Rpb24gaGUodCxlLHIpe3ZhciBuLGksYT1NYXRoLm1pbih0Lz0yNTUsZS89MjU1LHIvPTI1NSksbz1NYXRoLm1heCh0LGUscikscz1vLWEsbD0obythKS8yO3JldHVybiBzPyhpPWw8LjU/cy8obythKTpzLygyLW8tYSksbj10PT1vPyhlLXIpL3MrKGU8cj82OjApOmU9PW8/KHItdCkvcysyOih0LWUpL3MrNCxuKj02MCk6KG49TmFOLGk9bD4wJiZsPDE/MDpuKSxuZXcgVXQobixpLGwpfWZ1bmN0aW9uIGZlKHQsZSxyKXt2YXIgbj1uZSgoLjQxMjQ1NjQqKHQ9cGUodCkpKy4zNTc1NzYxKihlPXBlKGUpKSsuMTgwNDM3NSoocj1wZShyKSkpLyR0KSxpPW5lKCguMjEyNjcyOSp0Ky43MTUxNTIyKmUrLjA3MjE3NSpyKS9KdCk7cmV0dXJuIFh0KDExNippLTE2LDUwMCoobi1pKSwyMDAqKGktbmUoKC4wMTkzMzM5KnQrLjExOTE5MiplKy45NTAzMDQxKnIpL0t0KSkpfWZ1bmN0aW9uIHBlKHQpe3JldHVybih0Lz0yNTUpPD0uMDQwNDU/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIGRlKHQpe3ZhciBlPXBhcnNlRmxvYXQodCk7cmV0dXJuXCIlXCI9PT10LmNoYXJBdCh0Lmxlbmd0aC0xKT9NYXRoLnJvdW5kKDIuNTUqZSk6ZX1sZS5icmlnaHRlcj1mdW5jdGlvbih0KXt0PU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/dDoxKTt2YXIgZT10aGlzLnIscj10aGlzLmcsbj10aGlzLmIsaT0zMDtyZXR1cm4gZXx8cnx8bj8oZSYmZTxpJiYoZT1pKSxyJiZyPGkmJihyPWkpLG4mJm48aSYmKG49aSksbmV3IGFlKE1hdGgubWluKDI1NSxlL3QpLE1hdGgubWluKDI1NSxyL3QpLE1hdGgubWluKDI1NSxuL3QpKSk6bmV3IGFlKGksaSxpKX0sbGUuZGFya2VyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYWUoKHQ9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD90OjEpKSp0aGlzLnIsdCp0aGlzLmcsdCp0aGlzLmIpfSxsZS5oc2w9ZnVuY3Rpb24oKXtyZXR1cm4gaGUodGhpcy5yLHRoaXMuZyx0aGlzLmIpfSxsZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiI1wiK2NlKHRoaXMucikrY2UodGhpcy5nKStjZSh0aGlzLmIpfTt2YXIgZ2U9dC5tYXAoe2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH0pO2Z1bmN0aW9uIHZlKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBtZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiAyPT09YXJndW1lbnRzLmxlbmd0aCYmXCJmdW5jdGlvblwiPT10eXBlb2YgciYmKG49cixyPW51bGwpLHllKGUscix0LG4pfX1mdW5jdGlvbiB5ZShlLHIsaSxhKXt2YXIgbz17fSxzPXQuZGlzcGF0Y2goXCJiZWZvcmVzZW5kXCIsXCJwcm9ncmVzc1wiLFwibG9hZFwiLFwiZXJyb3JcIiksbD17fSxjPW5ldyBYTUxIdHRwUmVxdWVzdCx1PW51bGw7ZnVuY3Rpb24gaCgpe3ZhciB0LGU9Yy5zdGF0dXM7aWYoIWUmJmZ1bmN0aW9uKHQpe3ZhciBlPXQucmVzcG9uc2VUeXBlO3JldHVybiBlJiZcInRleHRcIiE9PWU/dC5yZXNwb25zZTp0LnJlc3BvbnNlVGV4dH0oYyl8fGU+PTIwMCYmZTwzMDB8fDMwND09PWUpe3RyeXt0PWkuY2FsbChvLGMpfWNhdGNoKHQpe3JldHVybiB2b2lkIHMuZXJyb3IuY2FsbChvLHQpfXMubG9hZC5jYWxsKG8sdCl9ZWxzZSBzLmVycm9yLmNhbGwobyxjKX1yZXR1cm4hdGhpcy5YRG9tYWluUmVxdWVzdHx8XCJ3aXRoQ3JlZGVudGlhbHNcImluIGN8fCEvXihodHRwKHMpPzopP1xcL1xcLy8udGVzdChlKXx8KGM9bmV3IFhEb21haW5SZXF1ZXN0KSxcIm9ubG9hZFwiaW4gYz9jLm9ubG9hZD1jLm9uZXJyb3I9aDpjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2MucmVhZHlTdGF0ZT4zJiZoKCl9LGMub25wcm9ncmVzcz1mdW5jdGlvbihlKXt2YXIgcj10LmV2ZW50O3QuZXZlbnQ9ZTt0cnl7cy5wcm9ncmVzcy5jYWxsKG8sYyl9ZmluYWxseXt0LmV2ZW50PXJ9fSxvLmhlYWRlcj1mdW5jdGlvbih0LGUpe3JldHVybiB0PSh0K1wiXCIpLnRvTG93ZXJDYXNlKCksYXJndW1lbnRzLmxlbmd0aDwyP2xbdF06KG51bGw9PWU/ZGVsZXRlIGxbdF06bFt0XT1lK1wiXCIsbyl9LG8ubWltZVR5cGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOnQrXCJcIixvKTpyfSxvLnJlc3BvbnNlVHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LG8pOnV9LG8ucmVzcG9uc2U9ZnVuY3Rpb24odCl7cmV0dXJuIGk9dCxvfSxbXCJnZXRcIixcInBvc3RcIl0uZm9yRWFjaChmdW5jdGlvbih0KXtvW3RdPWZ1bmN0aW9uKCl7cmV0dXJuIG8uc2VuZC5hcHBseShvLFt0XS5jb25jYXQobihhcmd1bWVudHMpKSl9fSksby5zZW5kPWZ1bmN0aW9uKHQsbixpKXtpZigyPT09YXJndW1lbnRzLmxlbmd0aCYmXCJmdW5jdGlvblwiPT10eXBlb2YgbiYmKGk9bixuPW51bGwpLGMub3Blbih0LGUsITApLG51bGw9PXJ8fFwiYWNjZXB0XCJpbiBsfHwobC5hY2NlcHQ9citcIiwqLypcIiksYy5zZXRSZXF1ZXN0SGVhZGVyKWZvcih2YXIgYSBpbiBsKWMuc2V0UmVxdWVzdEhlYWRlcihhLGxbYV0pO3JldHVybiBudWxsIT1yJiZjLm92ZXJyaWRlTWltZVR5cGUmJmMub3ZlcnJpZGVNaW1lVHlwZShyKSxudWxsIT11JiYoYy5yZXNwb25zZVR5cGU9dSksbnVsbCE9aSYmby5vbihcImVycm9yXCIsaSkub24oXCJsb2FkXCIsZnVuY3Rpb24odCl7aShudWxsLHQpfSkscy5iZWZvcmVzZW5kLmNhbGwobyxjKSxjLnNlbmQobnVsbD09bj9udWxsOm4pLG99LG8uYWJvcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gYy5hYm9ydCgpLG99LHQucmViaW5kKG8scyxcIm9uXCIpLG51bGw9PWE/bzpvLmdldChmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQubGVuZ3RoP2Z1bmN0aW9uKGUscil7dChudWxsPT1lP3I6bnVsbCl9OnR9KGEpKX1nZS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7Z2Uuc2V0KHQsb2UoZSkpfSksdC5mdW5jdG9yPXZlLHQueGhyPW1lKHopLHQuZHN2PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IFJlZ0V4cCgnW1wiJyt0K1wiXFxuXVwiKSxuPXQuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiBpKHQscixuKXthcmd1bWVudHMubGVuZ3RoPDMmJihuPXIscj1udWxsKTt2YXIgaT15ZSh0LGUsbnVsbD09cj9hOm8ociksbik7cmV0dXJuIGkucm93PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2kucmVzcG9uc2UobnVsbD09KHI9dCk/YTpvKHQpKTpyfSxpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIGkucGFyc2UodC5yZXNwb25zZVRleHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBpLnBhcnNlKGUucmVzcG9uc2VUZXh0LHQpfX1mdW5jdGlvbiBzKGUpe3JldHVybiBlLm1hcChsKS5qb2luKHQpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIHIudGVzdCh0KT8nXCInK3QucmVwbGFjZSgvXFxcIi9nLCdcIlwiJykrJ1wiJzp0fXJldHVybiBpLnBhcnNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI7cmV0dXJuIGkucGFyc2VSb3dzKHQsZnVuY3Rpb24odCxuKXtpZihyKXJldHVybiByKHQsbi0xKTt2YXIgaT1uZXcgRnVuY3Rpb24oXCJkXCIsXCJyZXR1cm4ge1wiK3QubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpK1wiOiBkW1wiK2UrXCJdXCJ9KS5qb2luKFwiLFwiKStcIn1cIik7cj1lP2Z1bmN0aW9uKHQscil7cmV0dXJuIGUoaSh0KSxyKX06aX0pfSxpLnBhcnNlUm93cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYT17fSxvPXt9LHM9W10sbD10Lmxlbmd0aCxjPTAsdT0wO2Z1bmN0aW9uIGgoKXtpZihjPj1sKXJldHVybiBvO2lmKGkpcmV0dXJuIGk9ITEsYTt2YXIgZT1jO2lmKDM0PT09dC5jaGFyQ29kZUF0KGUpKXtmb3IodmFyIHI9ZTtyKys8bDspaWYoMzQ9PT10LmNoYXJDb2RlQXQocikpe2lmKDM0IT09dC5jaGFyQ29kZUF0KHIrMSkpYnJlYWs7KytyfXJldHVybiBjPXIrMiwxMz09PShzPXQuY2hhckNvZGVBdChyKzEpKT8oaT0hMCwxMD09PXQuY2hhckNvZGVBdChyKzIpJiYrK2MpOjEwPT09cyYmKGk9ITApLHQuc2xpY2UoZSsxLHIpLnJlcGxhY2UoL1wiXCIvZywnXCInKX1mb3IoO2M8bDspe3ZhciBzLHU9MTtpZigxMD09PShzPXQuY2hhckNvZGVBdChjKyspKSlpPSEwO2Vsc2UgaWYoMTM9PT1zKWk9ITAsMTA9PT10LmNoYXJDb2RlQXQoYykmJigrK2MsKyt1KTtlbHNlIGlmKHMhPT1uKWNvbnRpbnVlO3JldHVybiB0LnNsaWNlKGUsYy11KX1yZXR1cm4gdC5zbGljZShlKX1mb3IoOyhyPWgoKSkhPT1vOyl7Zm9yKHZhciBmPVtdO3IhPT1hJiZyIT09bzspZi5wdXNoKHIpLHI9aCgpO2UmJm51bGw9PShmPWUoZix1KyspKXx8cy5wdXNoKGYpfXJldHVybiBzfSxpLmZvcm1hdD1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGVbMF0pKXJldHVybiBpLmZvcm1hdFJvd3MoZSk7dmFyIHI9bmV3IEwsbj1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KXIuaGFzKGUpfHxuLnB1c2goci5hZGQoZSkpfSksW24ubWFwKGwpLmpvaW4odCldLmNvbmNhdChlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGwoZVt0XSl9KS5qb2luKHQpfSkpLmpvaW4oXCJcXG5cIil9LGkuZm9ybWF0Um93cz1mdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAocykuam9pbihcIlxcblwiKX0saX0sdC5jc3Y9dC5kc3YoXCIsXCIsXCJ0ZXh0L2NzdlwiKSx0LnRzdj10LmRzdihcIlxcdFwiLFwidGV4dC90YWItc2VwYXJhdGVkLXZhbHVlc1wiKTt2YXIgeGUsYmUsX2Usd2Usa2U9dGhpc1tJKHRoaXMsXCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWVcIildfHxmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBBZSh0LGUscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtuPDImJihlPTApLG48MyYmKHI9RGF0ZS5ub3coKSk7dmFyIGk9e2M6dCx0OnIrZSxuOm51bGx9O3JldHVybiBiZT9iZS5uPWk6eGU9aSxiZT1pLF9lfHwod2U9Y2xlYXJUaW1lb3V0KHdlKSxfZT0xLGtlKFRlKSksaX1mdW5jdGlvbiBUZSgpe3ZhciB0PU1lKCksZT1TZSgpLXQ7ZT4yND8oaXNGaW5pdGUoZSkmJihjbGVhclRpbWVvdXQod2UpLHdlPXNldFRpbWVvdXQoVGUsZSkpLF9lPTApOihfZT0xLGtlKFRlKSl9ZnVuY3Rpb24gTWUoKXtmb3IodmFyIHQ9RGF0ZS5ub3coKSxlPXhlO2U7KXQ+PWUudCYmZS5jKHQtZS50KSYmKGUuYz1udWxsKSxlPWUubjtyZXR1cm4gdH1mdW5jdGlvbiBTZSgpe2Zvcih2YXIgdCxlPXhlLHI9MS8wO2U7KWUuYz8oZS50PHImJihyPWUudCksZT0odD1lKS5uKTplPXQ/dC5uPWUubjp4ZT1lLm47cmV0dXJuIGJlPXQscn1mdW5jdGlvbiBFZSh0LGUpe3JldHVybiBlLSh0P01hdGguY2VpbChNYXRoLmxvZyh0KS9NYXRoLkxOMTApOjEpfXQudGltZXI9ZnVuY3Rpb24oKXtBZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHQudGltZXIuZmx1c2g9ZnVuY3Rpb24oKXtNZSgpLFNlKCl9LHQucm91bmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9NYXRoLnJvdW5kKHQqKGU9TWF0aC5wb3coMTAsZSkpKS9lOk1hdGgucm91bmQodCl9O3ZhciBDZT1bXCJ5XCIsXCJ6XCIsXCJhXCIsXCJmXCIsXCJwXCIsXCJuXCIsXCJcXHhiNVwiLFwibVwiLFwiXCIsXCJrXCIsXCJNXCIsXCJHXCIsXCJUXCIsXCJQXCIsXCJFXCIsXCJaXCIsXCJZXCJdLm1hcChmdW5jdGlvbih0LGUpe3ZhciByPU1hdGgucG93KDEwLDMqeSg4LWUpKTtyZXR1cm57c2NhbGU6ZT44P2Z1bmN0aW9uKHQpe3JldHVybiB0L3J9OmZ1bmN0aW9uKHQpe3JldHVybiB0KnJ9LHN5bWJvbDp0fX0pO3QuZm9ybWF0UHJlZml4PWZ1bmN0aW9uKGUscil7dmFyIG49MDtyZXR1cm4oZT0rZSkmJihlPDAmJihlKj0tMSksciYmKGU9dC5yb3VuZChlLEVlKGUscikpKSxuPTErTWF0aC5mbG9vcigxZS0xMitNYXRoLmxvZyhlKS9NYXRoLkxOMTApLG49TWF0aC5tYXgoLTI0LE1hdGgubWluKDI0LDMqTWF0aC5mbG9vcigobi0xKS8zKSkpKSxDZVs4K24vM119O3ZhciBMZT0vKD86KFtee10pPyhbPD49Xl0pKT8oWytcXC0gXSk/KFskI10pPygwKT8oXFxkKyk/KCwpPyhcXC4tP1xcZCspPyhbYS16JV0pPy9pLHplPXQubWFwKHtiOmZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKDIpfSxjOmZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHQpfSxvOmZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKDgpfSx4OmZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKDE2KX0sWDpmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0sZzpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvUHJlY2lzaW9uKGUpfSxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9FeHBvbmVudGlhbChlKX0sZjpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRml4ZWQoZSl9LHI6ZnVuY3Rpb24oZSxyKXtyZXR1cm4oZT10LnJvdW5kKGUsRWUoZSxyKSkpLnRvRml4ZWQoTWF0aC5tYXgoMCxNYXRoLm1pbigyMCxFZShlKigxKzFlLTE1KSxyKSkpKX19KTtmdW5jdGlvbiBPZSh0KXtyZXR1cm4gdCtcIlwifXZhciBJZT10LnRpbWU9e30sRGU9RGF0ZTtmdW5jdGlvbiBQZSgpe3RoaXMuXz1uZXcgRGF0ZShhcmd1bWVudHMubGVuZ3RoPjE/RGF0ZS5VVEMuYXBwbHkodGhpcyxhcmd1bWVudHMpOmFyZ3VtZW50c1swXSl9UGUucHJvdG90eXBlPXtnZXREYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENEYXRlKCl9LGdldERheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDRGF5KCl9LGdldEZ1bGxZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENGdWxsWWVhcigpfSxnZXRIb3VyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDSG91cnMoKX0sZ2V0TWlsbGlzZWNvbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNaWxsaXNlY29uZHMoKX0sZ2V0TWludXRlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDTWludXRlcygpfSxnZXRNb250aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDTW9udGgoKX0sZ2V0U2Vjb25kczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDU2Vjb25kcygpfSxnZXRUaW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRUaW1lKCl9LGdldFRpbWV6b25lT2Zmc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDB9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLnZhbHVlT2YoKX0sc2V0RGF0ZTpmdW5jdGlvbigpe1JlLnNldFVUQ0RhdGUuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldERheTpmdW5jdGlvbigpe1JlLnNldFVUQ0RheS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0RnVsbFllYXI6ZnVuY3Rpb24oKXtSZS5zZXRVVENGdWxsWWVhci5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0SG91cnM6ZnVuY3Rpb24oKXtSZS5zZXRVVENIb3Vycy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0TWlsbGlzZWNvbmRzOmZ1bmN0aW9uKCl7UmUuc2V0VVRDTWlsbGlzZWNvbmRzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNaW51dGVzOmZ1bmN0aW9uKCl7UmUuc2V0VVRDTWludXRlcy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0TW9udGg6ZnVuY3Rpb24oKXtSZS5zZXRVVENNb250aC5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0U2Vjb25kczpmdW5jdGlvbigpe1JlLnNldFVUQ1NlY29uZHMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldFRpbWU6ZnVuY3Rpb24oKXtSZS5zZXRUaW1lLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfX07dmFyIFJlPURhdGUucHJvdG90eXBlO2Z1bmN0aW9uIEZlKHQsZSxyKXtmdW5jdGlvbiBuKGUpe3ZhciByPXQoZSksbj1hKHIsMSk7cmV0dXJuIGUtcjxuLWU/cjpufWZ1bmN0aW9uIGkocil7cmV0dXJuIGUocj10KG5ldyBEZShyLTEpKSwxKSxyfWZ1bmN0aW9uIGEodCxyKXtyZXR1cm4gZSh0PW5ldyBEZSgrdCksciksdH1mdW5jdGlvbiBvKHQsbixhKXt2YXIgbz1pKHQpLHM9W107aWYoYT4xKWZvcig7bzxuOylyKG8pJWF8fHMucHVzaChuZXcgRGF0ZSgrbykpLGUobywxKTtlbHNlIGZvcig7bzxuOylzLnB1c2gobmV3IERhdGUoK28pKSxlKG8sMSk7cmV0dXJuIHN9dC5mbG9vcj10LHQucm91bmQ9bix0LmNlaWw9aSx0Lm9mZnNldD1hLHQucmFuZ2U9bzt2YXIgcz10LnV0Yz1CZSh0KTtyZXR1cm4gcy5mbG9vcj1zLHMucm91bmQ9QmUobikscy5jZWlsPUJlKGkpLHMub2Zmc2V0PUJlKGEpLHMucmFuZ2U9ZnVuY3Rpb24odCxlLHIpe3RyeXtEZT1QZTt2YXIgbj1uZXcgUGU7cmV0dXJuIG4uXz10LG8obixlLHIpfWZpbmFsbHl7RGU9RGF0ZX19LHR9ZnVuY3Rpb24gQmUodCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7dHJ5e0RlPVBlO3ZhciBuPW5ldyBQZTtyZXR1cm4gbi5fPWUsdChuLHIpLl99ZmluYWxseXtEZT1EYXRlfX19SWUueWVhcj1GZShmdW5jdGlvbih0KXtyZXR1cm4odD1JZS5kYXkodCkpLnNldE1vbnRoKDAsMSksdH0sZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKX0pLEllLnllYXJzPUllLnllYXIucmFuZ2UsSWUueWVhcnMudXRjPUllLnllYXIudXRjLnJhbmdlLEllLmRheT1GZShmdW5jdGlvbih0KXt2YXIgZT1uZXcgRGUoMmUzLDApO3JldHVybiBlLnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCksdC5nZXREYXRlKCkpLGV9LGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCktMX0pLEllLmRheXM9SWUuZGF5LnJhbmdlLEllLmRheXMudXRjPUllLmRheS51dGMucmFuZ2UsSWUuZGF5T2ZZZWFyPWZ1bmN0aW9uKHQpe3ZhciBlPUllLnllYXIodCk7cmV0dXJuIE1hdGguZmxvb3IoKHQtZS02ZTQqKHQuZ2V0VGltZXpvbmVPZmZzZXQoKS1lLmdldFRpbWV6b25lT2Zmc2V0KCkpKS84NjRlNSl9LFtcInN1bmRheVwiLFwibW9uZGF5XCIsXCJ0dWVzZGF5XCIsXCJ3ZWRuZXNkYXlcIixcInRodXJzZGF5XCIsXCJmcmlkYXlcIixcInNhdHVyZGF5XCJdLmZvckVhY2goZnVuY3Rpb24odCxlKXtlPTctZTt2YXIgcj1JZVt0XT1GZShmdW5jdGlvbih0KXtyZXR1cm4odD1JZS5kYXkodCkpLnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrZSklNyksdH0sZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNypNYXRoLmZsb29yKGUpKX0sZnVuY3Rpb24odCl7dmFyIHI9SWUueWVhcih0KS5nZXREYXkoKTtyZXR1cm4gTWF0aC5mbG9vcigoSWUuZGF5T2ZZZWFyKHQpKyhyK2UpJTcpLzcpLShyIT09ZSl9KTtJZVt0K1wic1wiXT1yLnJhbmdlLEllW3QrXCJzXCJdLnV0Yz1yLnV0Yy5yYW5nZSxJZVt0K1wiT2ZZZWFyXCJdPWZ1bmN0aW9uKHQpe3ZhciByPUllLnllYXIodCkuZ2V0RGF5KCk7cmV0dXJuIE1hdGguZmxvb3IoKEllLmRheU9mWWVhcih0KSsocitlKSU3KS83KX19KSxJZS53ZWVrPUllLnN1bmRheSxJZS53ZWVrcz1JZS5zdW5kYXkucmFuZ2UsSWUud2Vla3MudXRjPUllLnN1bmRheS51dGMucmFuZ2UsSWUud2Vla09mWWVhcj1JZS5zdW5kYXlPZlllYXI7dmFyIE5lPXtcIi1cIjpcIlwiLF86XCIgXCIsMDpcIjBcIn0samU9L15cXHMqXFxkKy8sVmU9L14lLztmdW5jdGlvbiBVZSh0LGUscil7dmFyIG49dDwwP1wiLVwiOlwiXCIsaT0obj8tdDp0KStcIlwiLGE9aS5sZW5ndGg7cmV0dXJuIG4rKGE8cj9uZXcgQXJyYXkoci1hKzEpLmpvaW4oZSkraTppKX1mdW5jdGlvbiBxZShlKXtyZXR1cm4gbmV3IFJlZ0V4cChcIl4oPzpcIitlLm1hcCh0LnJlcXVvdGUpLmpvaW4oXCJ8XCIpK1wiKVwiLFwiaVwiKX1mdW5jdGlvbiBIZSh0KXtmb3IodmFyIGU9bmV3IGIscj0tMSxuPXQubGVuZ3RoOysrcjxuOyllLnNldCh0W3JdLnRvTG93ZXJDYXNlKCkscik7cmV0dXJuIGV9ZnVuY3Rpb24gR2UodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMSkpO3JldHVybiBuPyh0Lnc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWWUodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQuVT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXZSh0LGUscil7amUubGFzdEluZGV4PTA7dmFyIG49amUuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5XPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFhlKHQsZSxyKXtqZS5sYXN0SW5kZXg9MDt2YXIgbj1qZS5leGVjKGUuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8odC55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFplKHQsZSxyKXtqZS5sYXN0SW5kZXg9MDt2YXIgbixpPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBpPyh0Lnk9KG49K2lbMF0pKyhuPjY4PzE5MDA6MmUzKSxyK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiAkZSh0LGUscil7cmV0dXJuL15bKy1dXFxkezR9JC8udGVzdChlPWUuc2xpY2UocixyKzUpKT8odC5aPS1lLHIrNSk6LTF9ZnVuY3Rpb24gSmUodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEtlKHQsZSxyKXtqZS5sYXN0SW5kZXg9MDt2YXIgbj1qZS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFFlKHQsZSxyKXtqZS5sYXN0SW5kZXg9MDt2YXIgbj1qZS5leGVjKGUuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8odC5qPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHRyKHQsZSxyKXtqZS5sYXN0SW5kZXg9MDt2YXIgbj1qZS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5IPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGVyKHQsZSxyKXtqZS5sYXN0SW5kZXg9MDt2YXIgbj1qZS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5NPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHJyKHQsZSxyKXtqZS5sYXN0SW5kZXg9MDt2YXIgbj1qZS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5TPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG5yKHQsZSxyKXtqZS5sYXN0SW5kZXg9MDt2YXIgbj1qZS5leGVjKGUuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8odC5MPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGlyKHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKSxyPWU+MD9cIi1cIjpcIitcIixuPXkoZSkvNjB8MCxpPXkoZSklNjA7cmV0dXJuIHIrVWUobixcIjBcIiwyKStVZShpLFwiMFwiLDIpfWZ1bmN0aW9uIGFyKHQsZSxyKXtWZS5sYXN0SW5kZXg9MDt2YXIgbj1WZS5leGVjKGUuc2xpY2UocixyKzEpKTtyZXR1cm4gbj9yK25bMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIG9yKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPS0xOysrcjxlOyl0W3JdWzBdPXRoaXModFtyXVswXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0wLG49dFtyXTshblsxXShlKTspbj10Wysrcl07cmV0dXJuIG5bMF0oZSl9fXQubG9jYWxlPWZ1bmN0aW9uKGUpe3JldHVybntudW1iZXJGb3JtYXQ6ZnVuY3Rpb24oZSl7dmFyIHI9ZS5kZWNpbWFsLG49ZS50aG91c2FuZHMsaT1lLmdyb3VwaW5nLGE9ZS5jdXJyZW5jeSxvPWkmJm4/ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsYT1bXSxvPTAscz1pWzBdLGw9MDtyPjAmJnM+MCYmKGwrcysxPmUmJihzPU1hdGgubWF4KDEsZS1sKSksYS5wdXNoKHQuc3Vic3RyaW5nKHItPXMscitzKSksISgobCs9cysxKT5lKSk7KXM9aVtvPShvKzEpJWkubGVuZ3RoXTtyZXR1cm4gYS5yZXZlcnNlKCkuam9pbihuKX06ejtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49TGUuZXhlYyhlKSxpPW5bMV18fFwiIFwiLHM9blsyXXx8XCI+XCIsbD1uWzNdfHxcIi1cIixjPW5bNF18fFwiXCIsdT1uWzVdLGg9K25bNl0sZj1uWzddLHA9bls4XSxkPW5bOV0sZz0xLHY9XCJcIixtPVwiXCIseT0hMSx4PSEwO3N3aXRjaChwJiYocD0rcC5zdWJzdHJpbmcoMSkpLCh1fHxcIjBcIj09PWkmJlwiPVwiPT09cykmJih1PWk9XCIwXCIscz1cIj1cIiksZCl7Y2FzZVwiblwiOmY9ITAsZD1cImdcIjticmVhaztjYXNlXCIlXCI6Zz0xMDAsbT1cIiVcIixkPVwiZlwiO2JyZWFrO2Nhc2VcInBcIjpnPTEwMCxtPVwiJVwiLGQ9XCJyXCI7YnJlYWs7Y2FzZVwiYlwiOmNhc2VcIm9cIjpjYXNlXCJ4XCI6Y2FzZVwiWFwiOlwiI1wiPT09YyYmKHY9XCIwXCIrZC50b0xvd2VyQ2FzZSgpKTtjYXNlXCJjXCI6eD0hMTtjYXNlXCJkXCI6eT0hMCxwPTA7YnJlYWs7Y2FzZVwic1wiOmc9LTEsZD1cInJcIn1cIiRcIj09PWMmJih2PWFbMF0sbT1hWzFdKSxcInJcIiE9ZHx8cHx8KGQ9XCJnXCIpLG51bGwhPXAmJihcImdcIj09ZD9wPU1hdGgubWF4KDEsTWF0aC5taW4oMjEscCkpOlwiZVwiIT1kJiZcImZcIiE9ZHx8KHA9TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxwKSkpKSxkPXplLmdldChkKXx8T2U7dmFyIGI9dSYmZjtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49bTtpZih5JiZlJTEpcmV0dXJuXCJcIjt2YXIgYT1lPDB8fDA9PT1lJiYxL2U8MD8oZT0tZSxcIi1cIik6XCItXCI9PT1sP1wiXCI6bDtpZihnPDApe3ZhciBjPXQuZm9ybWF0UHJlZml4KGUscCk7ZT1jLnNjYWxlKGUpLG49Yy5zeW1ib2wrbX1lbHNlIGUqPWc7dmFyIF8sdyxrPShlPWQoZSxwKSkubGFzdEluZGV4T2YoXCIuXCIpO2lmKGs8MCl7dmFyIEE9eD9lLmxhc3RJbmRleE9mKFwiZVwiKTotMTtBPDA/KF89ZSx3PVwiXCIpOihfPWUuc3Vic3RyaW5nKDAsQSksdz1lLnN1YnN0cmluZyhBKSl9ZWxzZSBfPWUuc3Vic3RyaW5nKDAsayksdz1yK2Uuc3Vic3RyaW5nKGsrMSk7IXUmJmYmJihfPW8oXywxLzApKTt2YXIgVD12Lmxlbmd0aCtfLmxlbmd0aCt3Lmxlbmd0aCsoYj8wOmEubGVuZ3RoKSxNPVQ8aD9uZXcgQXJyYXkoVD1oLVQrMSkuam9pbihpKTpcIlwiO3JldHVybiBiJiYoXz1vKE0rXyxNLmxlbmd0aD9oLXcubGVuZ3RoOjEvMCkpLGErPXYsZT1fK3csKFwiPFwiPT09cz9hK2UrTTpcIj5cIj09PXM/TSthK2U6XCJeXCI9PT1zP00uc3Vic3RyaW5nKDAsVD4+PTEpK2ErZStNLnN1YnN0cmluZyhUKTphKyhiP2U6TStlKSkrbn19fShlKSx0aW1lRm9ybWF0OmZ1bmN0aW9uKGUpe3ZhciByPWUuZGF0ZVRpbWUsbj1lLmRhdGUsaT1lLnRpbWUsYT1lLnBlcmlvZHMsbz1lLmRheXMscz1lLnNob3J0RGF5cyxsPWUubW9udGhzLGM9ZS5zaG9ydE1vbnRocztmdW5jdGlvbiB1KHQpe3ZhciBlPXQubGVuZ3RoO2Z1bmN0aW9uIHIocil7Zm9yKHZhciBuLGksYSxvPVtdLHM9LTEsbD0wOysrczxlOykzNz09PXQuY2hhckNvZGVBdChzKSYmKG8ucHVzaCh0LnNsaWNlKGwscykpLG51bGwhPShpPU5lW249dC5jaGFyQXQoKytzKV0pJiYobj10LmNoYXJBdCgrK3MpKSwoYT1fW25dKSYmKG49YShyLG51bGw9PWk/XCJlXCI9PT1uP1wiIFwiOlwiMFwiOmkpKSxvLnB1c2gobiksbD1zKzEpO3JldHVybiBvLnB1c2godC5zbGljZShsLHMpKSxvLmpvaW4oXCJcIil9cmV0dXJuIHIucGFyc2U9ZnVuY3Rpb24oZSl7dmFyIHI9e3k6MTkwMCxtOjAsZDoxLEg6MCxNOjAsUzowLEw6MCxaOm51bGx9O2lmKGgocix0LGUsMCkhPWUubGVuZ3RoKXJldHVybiBudWxsO1wicFwiaW4gciYmKHIuSD1yLkglMTIrMTIqci5wKTt2YXIgbj1udWxsIT1yLlomJkRlIT09UGUsaT1uZXcobj9QZTpEZSk7cmV0dXJuXCJqXCJpbiByP2kuc2V0RnVsbFllYXIoci55LDAsci5qKTpcIldcImluIHJ8fFwiVVwiaW4gcj8oXCJ3XCJpbiByfHwoci53PVwiV1wiaW4gcj8xOjApLGkuc2V0RnVsbFllYXIoci55LDAsMSksaS5zZXRGdWxsWWVhcihyLnksMCxcIldcImluIHI/KHIudys2KSU3Kzcqci5XLShpLmdldERheSgpKzUpJTc6ci53Kzcqci5VLShpLmdldERheSgpKzYpJTcpKTppLnNldEZ1bGxZZWFyKHIueSxyLm0sci5kKSxpLnNldEhvdXJzKHIuSCsoci5aLzEwMHwwKSxyLk0rci5aJTEwMCxyLlMsci5MKSxuP2kuXzppfSxyLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LHJ9ZnVuY3Rpb24gaCh0LGUscixuKXtmb3IodmFyIGksYSxvLHM9MCxsPWUubGVuZ3RoLGM9ci5sZW5ndGg7czxsOyl7aWYobj49YylyZXR1cm4tMTtpZigzNz09PShpPWUuY2hhckNvZGVBdChzKyspKSl7aWYobz1lLmNoYXJBdChzKyspLCEoYT13W28gaW4gTmU/ZS5jaGFyQXQocysrKTpvXSl8fChuPWEodCxyLG4pKTwwKXJldHVybi0xfWVsc2UgaWYoaSE9ci5jaGFyQ29kZUF0KG4rKykpcmV0dXJuLTF9cmV0dXJuIG59dS51dGM9ZnVuY3Rpb24odCl7dmFyIGU9dSh0KTtmdW5jdGlvbiByKHQpe3RyeXt2YXIgcj1uZXcoRGU9UGUpO3JldHVybiByLl89dCxlKHIpfWZpbmFsbHl7RGU9RGF0ZX19cmV0dXJuIHIucGFyc2U9ZnVuY3Rpb24odCl7dHJ5e0RlPVBlO3ZhciByPWUucGFyc2UodCk7cmV0dXJuIHImJnIuX31maW5hbGx5e0RlPURhdGV9fSxyLnRvU3RyaW5nPWUudG9TdHJpbmcscn0sdS5tdWx0aT11LnV0Yy5tdWx0aT1vcjt2YXIgZj10Lm1hcCgpLHA9cWUobyksZD1IZShvKSxnPXFlKHMpLHY9SGUocyksbT1xZShsKSx5PUhlKGwpLHg9cWUoYyksYj1IZShjKTthLmZvckVhY2goZnVuY3Rpb24odCxlKXtmLnNldCh0LnRvTG93ZXJDYXNlKCksZSl9KTt2YXIgXz17YTpmdW5jdGlvbih0KXtyZXR1cm4gc1t0LmdldERheSgpXX0sQTpmdW5jdGlvbih0KXtyZXR1cm4gb1t0LmdldERheSgpXX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gY1t0LmdldE1vbnRoKCldfSxCOmZ1bmN0aW9uKHQpe3JldHVybiBsW3QuZ2V0TW9udGgoKV19LGM6dShyKSxkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0RGF0ZSgpLGUsMil9LGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVWUodC5nZXREYXRlKCksZSwyKX0sSDpmdW5jdGlvbih0LGUpe3JldHVybiBVZSh0LmdldEhvdXJzKCksZSwyKX0sSTpmdW5jdGlvbih0LGUpe3JldHVybiBVZSh0LmdldEhvdXJzKCklMTJ8fDEyLGUsMil9LGo6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVWUoMStJZS5kYXlPZlllYXIodCksZSwzKX0sTDpmdW5jdGlvbih0LGUpe3JldHVybiBVZSh0LmdldE1pbGxpc2Vjb25kcygpLGUsMyl9LG06ZnVuY3Rpb24odCxlKXtyZXR1cm4gVWUodC5nZXRNb250aCgpKzEsZSwyKX0sTTpmdW5jdGlvbih0LGUpe3JldHVybiBVZSh0LmdldE1pbnV0ZXMoKSxlLDIpfSxwOmZ1bmN0aW9uKHQpe3JldHVybiBhWysodC5nZXRIb3VycygpPj0xMildfSxTOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0U2Vjb25kcygpLGUsMil9LFU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVWUoSWUuc3VuZGF5T2ZZZWFyKHQpLGUsMil9LHc6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF5KCl9LFc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVWUoSWUubW9uZGF5T2ZZZWFyKHQpLGUsMil9LHg6dShuKSxYOnUoaSkseTpmdW5jdGlvbih0LGUpe3JldHVybiBVZSh0LmdldEZ1bGxZZWFyKCklMTAwLGUsMil9LFk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVWUodC5nZXRGdWxsWWVhcigpJTFlNCxlLDQpfSxaOmlyLFwiJVwiOmZ1bmN0aW9uKCl7cmV0dXJuXCIlXCJ9fSx3PXthOmZ1bmN0aW9uKHQsZSxyKXtnLmxhc3RJbmRleD0wO3ZhciBuPWcuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC53PXYuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSkscituWzBdLmxlbmd0aCk6LTF9LEE6ZnVuY3Rpb24odCxlLHIpe3AubGFzdEluZGV4PTA7dmFyIG49cC5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Lnc9ZC5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSxyK25bMF0ubGVuZ3RoKTotMX0sYjpmdW5jdGlvbih0LGUscil7eC5sYXN0SW5kZXg9MDt2YXIgbj14LmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQubT1iLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLHIrblswXS5sZW5ndGgpOi0xfSxCOmZ1bmN0aW9uKHQsZSxyKXttLmxhc3RJbmRleD0wO3ZhciBuPW0uZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5tPXkuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSkscituWzBdLmxlbmd0aCk6LTF9LGM6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBoKHQsXy5jLnRvU3RyaW5nKCksZSxyKX0sZDpLZSxlOktlLEg6dHIsSTp0cixqOlFlLEw6bnIsbTpKZSxNOmVyLHA6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWYuZ2V0KGUuc2xpY2UocixyKz0yKS50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gbnVsbD09bj8tMToodC5wPW4scil9LFM6cnIsVTpZZSx3OkdlLFc6V2UseDpmdW5jdGlvbih0LGUscil7cmV0dXJuIGgodCxfLngudG9TdHJpbmcoKSxlLHIpfSxYOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gaCh0LF8uWC50b1N0cmluZygpLGUscil9LHk6WmUsWTpYZSxaOiRlLFwiJVwiOmFyfTtyZXR1cm4gdX0oZSl9fTt2YXIgc3I9dC5sb2NhbGUoe2RlY2ltYWw6XCIuXCIsdGhvdXNhbmRzOlwiLFwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbXCIkXCIsXCJcIl0sZGF0ZVRpbWU6XCIlYSAlYiAlZSAlWCAlWVwiLGRhdGU6XCIlbS8lZC8lWVwiLHRpbWU6XCIlSDolTTolU1wiLHBlcmlvZHM6W1wiQU1cIixcIlBNXCJdLGRheXM6W1wiU3VuZGF5XCIsXCJNb25kYXlcIixcIlR1ZXNkYXlcIixcIldlZG5lc2RheVwiLFwiVGh1cnNkYXlcIixcIkZyaWRheVwiLFwiU2F0dXJkYXlcIl0sc2hvcnREYXlzOltcIlN1blwiLFwiTW9uXCIsXCJUdWVcIixcIldlZFwiLFwiVGh1XCIsXCJGcmlcIixcIlNhdFwiXSxtb250aHM6W1wiSmFudWFyeVwiLFwiRmVicnVhcnlcIixcIk1hcmNoXCIsXCJBcHJpbFwiLFwiTWF5XCIsXCJKdW5lXCIsXCJKdWx5XCIsXCJBdWd1c3RcIixcIlNlcHRlbWJlclwiLFwiT2N0b2JlclwiLFwiTm92ZW1iZXJcIixcIkRlY2VtYmVyXCJdLHNob3J0TW9udGhzOltcIkphblwiLFwiRmViXCIsXCJNYXJcIixcIkFwclwiLFwiTWF5XCIsXCJKdW5cIixcIkp1bFwiLFwiQXVnXCIsXCJTZXBcIixcIk9jdFwiLFwiTm92XCIsXCJEZWNcIl19KTtmdW5jdGlvbiBscigpe310LmZvcm1hdD1zci5udW1iZXJGb3JtYXQsdC5nZW89e30sbHIucHJvdG90eXBlPXtzOjAsdDowLGFkZDpmdW5jdGlvbih0KXt1cih0LHRoaXMudCxjciksdXIoY3Iucyx0aGlzLnMsdGhpcyksdGhpcy5zP3RoaXMudCs9Y3IudDp0aGlzLnM9Y3IudH0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zfX07dmFyIGNyPW5ldyBscjtmdW5jdGlvbiB1cih0LGUscil7dmFyIG49ci5zPXQrZSxpPW4tdCxhPW4taTtyLnQ9dC1hKyhlLWkpfWZ1bmN0aW9uIGhyKHQsZSl7dCYmcHIuaGFzT3duUHJvcGVydHkodC50eXBlKSYmcHJbdC50eXBlXSh0LGUpfXQuZ2VvLnN0cmVhbT1mdW5jdGlvbih0LGUpe3QmJmZyLmhhc093blByb3BlcnR5KHQudHlwZSk/ZnJbdC50eXBlXSh0LGUpOmhyKHQsZSl9O3ZhciBmcj17RmVhdHVyZTpmdW5jdGlvbih0LGUpe2hyKHQuZ2VvbWV0cnksZSl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuZmVhdHVyZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylocihyW25dLmdlb21ldHJ5LGUpfX0scHI9e1NwaGVyZTpmdW5jdGlvbih0LGUpe2Uuc3BoZXJlKCl9LFBvaW50OmZ1bmN0aW9uKHQsZSl7dD10LmNvb3JkaW5hdGVzLGUucG9pbnQodFswXSx0WzFdLHRbMl0pfSxNdWx0aVBvaW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOyl0PXJbbl0sZS5wb2ludCh0WzBdLHRbMV0sdFsyXSl9LExpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtkcih0LmNvb3JkaW5hdGVzLGUsMCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspZHIocltuXSxlLDApfSxQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7Z3IodC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylncihyW25dLGUpfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5nZW9tZXRyaWVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaHIocltuXSxlKX19O2Z1bmN0aW9uIGRyKHQsZSxyKXt2YXIgbixpPS0xLGE9dC5sZW5ndGgtcjtmb3IoZS5saW5lU3RhcnQoKTsrK2k8YTspbj10W2ldLGUucG9pbnQoblswXSxuWzFdLG5bMl0pO2UubGluZUVuZCgpfWZ1bmN0aW9uIGdyKHQsZSl7dmFyIHI9LTEsbj10Lmxlbmd0aDtmb3IoZS5wb2x5Z29uU3RhcnQoKTsrK3I8bjspZHIodFtyXSxlLDEpO2UucG9seWdvbkVuZCgpfXQuZ2VvLmFyZWE9ZnVuY3Rpb24oZSl7cmV0dXJuIHZyPTAsdC5nZW8uc3RyZWFtKGUsQ3IpLHZyfTt2YXIgdnIsbXIseXIseHIsYnIsX3Isd3Isa3IsQXIsVHIsTXIsU3IsRXI9bmV3IGxyLENyPXtzcGhlcmU6ZnVuY3Rpb24oKXt2cis9NCpUdH0scG9pbnQ6UCxsaW5lU3RhcnQ6UCxsaW5lRW5kOlAscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7RXIucmVzZXQoKSxDci5saW5lU3RhcnQ9THJ9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgdD0yKkVyO3ZyKz10PDA/NCpUdCt0OnQsQ3IubGluZVN0YXJ0PUNyLmxpbmVFbmQ9Q3IucG9pbnQ9UH19O2Z1bmN0aW9uIExyKCl7dmFyIHQsZSxyLG4saTtmdW5jdGlvbiBhKHQsZSl7ZT1lKkN0LzIrVHQvNDt2YXIgYT0odCo9Q3QpLXIsbz1hPj0wPzE6LTEscz1vKmEsbD1NYXRoLmNvcyhlKSxjPU1hdGguc2luKGUpLHU9aSpjLGg9bipsK3UqTWF0aC5jb3MocyksZj11Km8qTWF0aC5zaW4ocyk7RXIuYWRkKE1hdGguYXRhbjIoZixoKSkscj10LG49bCxpPWN9Q3IucG9pbnQ9ZnVuY3Rpb24obyxzKXtDci5wb2ludD1hLHI9KHQ9bykqQ3Qsbj1NYXRoLmNvcyhzPShlPXMpKkN0LzIrVHQvNCksaT1NYXRoLnNpbihzKX0sQ3IubGluZUVuZD1mdW5jdGlvbigpe2EodCxlKX19ZnVuY3Rpb24genIodCl7dmFyIGU9dFswXSxyPXRbMV0sbj1NYXRoLmNvcyhyKTtyZXR1cm5bbipNYXRoLmNvcyhlKSxuKk1hdGguc2luKGUpLE1hdGguc2luKHIpXX1mdW5jdGlvbiBPcih0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXX1mdW5jdGlvbiBJcih0LGUpe3JldHVyblt0WzFdKmVbMl0tdFsyXSplWzFdLHRbMl0qZVswXS10WzBdKmVbMl0sdFswXSplWzFdLXRbMV0qZVswXV19ZnVuY3Rpb24gRHIodCxlKXt0WzBdKz1lWzBdLHRbMV0rPWVbMV0sdFsyXSs9ZVsyXX1mdW5jdGlvbiBQcih0LGUpe3JldHVyblt0WzBdKmUsdFsxXSplLHRbMl0qZV19ZnVuY3Rpb24gUnIodCl7dmFyIGU9TWF0aC5zcXJ0KHRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdKTt0WzBdLz1lLHRbMV0vPWUsdFsyXS89ZX1mdW5jdGlvbiBGcih0KXtyZXR1cm5bTWF0aC5hdGFuMih0WzFdLHRbMF0pLER0KHRbMl0pXX1mdW5jdGlvbiBCcih0LGUpe3JldHVybiB5KHRbMF0tZVswXSk8a3QmJnkodFsxXS1lWzFdKTxrdH10Lmdlby5ib3VuZHM9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saSxhLG8scyxsLGMsdSxoLGY9e3BvaW50OnAsbGluZVN0YXJ0OmcsbGluZUVuZDp2LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2YucG9pbnQ9bSxmLmxpbmVTdGFydD14LGYubGluZUVuZD1iLGM9MCxDci5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0NyLnBvbHlnb25FbmQoKSxmLnBvaW50PXAsZi5saW5lU3RhcnQ9ZyxmLmxpbmVFbmQ9dixFcjwwPyhlPS0obj0xODApLHI9LShpPTkwKSk6Yz5rdD9pPTkwOmM8LWt0JiYocj0tOTApLGhbMF09ZSxoWzFdPW59fTtmdW5jdGlvbiBwKHQsYSl7dS5wdXNoKGg9W2U9dCxuPXRdKSxhPHImJihyPWEpLGE+aSYmKGk9YSl9ZnVuY3Rpb24gZCh0LG8pe3ZhciBzPXpyKFt0KkN0LG8qQ3RdKTtpZihsKXt2YXIgYz1JcihsLHMpLHU9SXIoW2NbMV0sLWNbMF0sMF0sYyk7UnIodSksdT1Gcih1KTt2YXIgaD10LWEsZj1oPjA/MTotMSxkPXVbMF0qTHQqZixnPXkoaCk+MTgwO2lmKGdeKGYqYTxkJiZkPGYqdCkpKHY9dVsxXSpMdCk+aSYmKGk9dik7ZWxzZSBpZihnXihmKmE8KGQ9KGQrMzYwKSUzNjAtMTgwKSYmZDxmKnQpKXt2YXIgdjsodj0tdVsxXSpMdCk8ciYmKHI9dil9ZWxzZSBvPHImJihyPW8pLG8+aSYmKGk9byk7Zz90PGE/XyhlLHQpPl8oZSxuKSYmKG49dCk6Xyh0LG4pPl8oZSxuKSYmKGU9dCk6bj49ZT8odDxlJiYoZT10KSx0Pm4mJihuPXQpKTp0PmE/XyhlLHQpPl8oZSxuKSYmKG49dCk6Xyh0LG4pPl8oZSxuKSYmKGU9dCl9ZWxzZSBwKHQsbyk7bD1zLGE9dH1mdW5jdGlvbiBnKCl7Zi5wb2ludD1kfWZ1bmN0aW9uIHYoKXtoWzBdPWUsaFsxXT1uLGYucG9pbnQ9cCxsPW51bGx9ZnVuY3Rpb24gbSh0LGUpe2lmKGwpe3ZhciByPXQtYTtjKz15KHIpPjE4MD9yKyhyPjA/MzYwOi0zNjApOnJ9ZWxzZSBvPXQscz1lO0NyLnBvaW50KHQsZSksZCh0LGUpfWZ1bmN0aW9uIHgoKXtDci5saW5lU3RhcnQoKX1mdW5jdGlvbiBiKCl7bShvLHMpLENyLmxpbmVFbmQoKSx5KGMpPmt0JiYoZT0tKG49MTgwKSksaFswXT1lLGhbMV09bixsPW51bGx9ZnVuY3Rpb24gXyh0LGUpe3JldHVybihlLT10KTwwP2UrMzYwOmV9ZnVuY3Rpb24gdyh0LGUpe3JldHVybiB0WzBdLWVbMF19ZnVuY3Rpb24gayh0LGUpe3JldHVybiBlWzBdPD1lWzFdP2VbMF08PXQmJnQ8PWVbMV06dDxlWzBdfHxlWzFdPHR9cmV0dXJuIGZ1bmN0aW9uKGEpe2lmKGk9bj0tKGU9cj0xLzApLHU9W10sdC5nZW8uc3RyZWFtKGEsZiksYz11Lmxlbmd0aCl7dS5zb3J0KHcpO2Zvcih2YXIgbz0xLHM9W2c9dVswXV07bzxjOysrbylrKChwPXVbb10pWzBdLGcpfHxrKHBbMV0sZyk/KF8oZ1swXSxwWzFdKT5fKGdbMF0sZ1sxXSkmJihnWzFdPXBbMV0pLF8ocFswXSxnWzFdKT5fKGdbMF0sZ1sxXSkmJihnWzBdPXBbMF0pKTpzLnB1c2goZz1wKTtmb3IodmFyIGwsYyxwLGQ9LTEvMCxnPShvPTAsc1tjPXMubGVuZ3RoLTFdKTtvPD1jO2c9cCwrK28pcD1zW29dLChsPV8oZ1sxXSxwWzBdKSk+ZCYmKGQ9bCxlPXBbMF0sbj1nWzFdKX1yZXR1cm4gdT1oPW51bGwsZT09PTEvMHx8cj09PTEvMD9bW05hTixOYU5dLFtOYU4sTmFOXV06W1tlLHJdLFtuLGldXX19KCksdC5nZW8uY2VudHJvaWQ9ZnVuY3Rpb24oZSl7bXI9eXI9eHI9YnI9X3I9d3I9a3I9QXI9VHI9TXI9U3I9MCx0Lmdlby5zdHJlYW0oZSxOcik7dmFyIHI9VHIsbj1NcixpPVNyLGE9cipyK24qbitpKmk7cmV0dXJuIGE8QXQmJihyPXdyLG49a3IsaT1Bcix5cjxrdCYmKHI9eHIsbj1icixpPV9yKSwoYT1yKnIrbipuK2kqaSk8QXQpP1tOYU4sTmFOXTpbTWF0aC5hdGFuMihuLHIpKkx0LER0KGkvTWF0aC5zcXJ0KGEpKSpMdF19O3ZhciBOcj17c3BoZXJlOlAscG9pbnQ6anIsbGluZVN0YXJ0OlVyLGxpbmVFbmQ6cXIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7TnIubGluZVN0YXJ0PUhyfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7TnIubGluZVN0YXJ0PVVyfX07ZnVuY3Rpb24ganIodCxlKXt0Kj1DdDt2YXIgcj1NYXRoLmNvcyhlKj1DdCk7VnIocipNYXRoLmNvcyh0KSxyKk1hdGguc2luKHQpLE1hdGguc2luKGUpKX1mdW5jdGlvbiBWcih0LGUscil7eHIrPSh0LXhyKS8rK21yLGJyKz0oZS1icikvbXIsX3IrPShyLV9yKS9tcn1mdW5jdGlvbiBVcigpe3ZhciB0LGUscjtmdW5jdGlvbiBuKG4saSl7bio9Q3Q7dmFyIGE9TWF0aC5jb3MoaSo9Q3QpLG89YSpNYXRoLmNvcyhuKSxzPWEqTWF0aC5zaW4obiksbD1NYXRoLnNpbihpKSxjPU1hdGguYXRhbjIoTWF0aC5zcXJ0KChjPWUqbC1yKnMpKmMrKGM9cipvLXQqbCkqYysoYz10KnMtZSpvKSpjKSx0Km8rZSpzK3IqbCk7eXIrPWMsd3IrPWMqKHQrKHQ9bykpLGtyKz1jKihlKyhlPXMpKSxBcis9Yyoocisocj1sKSksVnIodCxlLHIpfU5yLnBvaW50PWZ1bmN0aW9uKGksYSl7aSo9Q3Q7dmFyIG89TWF0aC5jb3MoYSo9Q3QpO3Q9bypNYXRoLmNvcyhpKSxlPW8qTWF0aC5zaW4oaSkscj1NYXRoLnNpbihhKSxOci5wb2ludD1uLFZyKHQsZSxyKX19ZnVuY3Rpb24gcXIoKXtOci5wb2ludD1qcn1mdW5jdGlvbiBIcigpe3ZhciB0LGUscixuLGk7ZnVuY3Rpb24gYSh0LGUpe3QqPUN0O3ZhciBhPU1hdGguY29zKGUqPUN0KSxvPWEqTWF0aC5jb3ModCkscz1hKk1hdGguc2luKHQpLGw9TWF0aC5zaW4oZSksYz1uKmwtaSpzLHU9aSpvLXIqbCxoPXIqcy1uKm8sZj1NYXRoLnNxcnQoYypjK3UqdStoKmgpLHA9cipvK24qcytpKmwsZD1mJiYtSXQocCkvZixnPU1hdGguYXRhbjIoZixwKTtUcis9ZCpjLE1yKz1kKnUsU3IrPWQqaCx5cis9Zyx3cis9Zyoocisocj1vKSksa3IrPWcqKG4rKG49cykpLEFyKz1nKihpKyhpPWwpKSxWcihyLG4saSl9TnIucG9pbnQ9ZnVuY3Rpb24obyxzKXt0PW8sZT1zLE5yLnBvaW50PWEsbyo9Q3Q7dmFyIGw9TWF0aC5jb3Mocyo9Q3QpO3I9bCpNYXRoLmNvcyhvKSxuPWwqTWF0aC5zaW4obyksaT1NYXRoLnNpbihzKSxWcihyLG4saSl9LE5yLmxpbmVFbmQ9ZnVuY3Rpb24oKXthKHQsZSksTnIubGluZUVuZD1xcixOci5wb2ludD1qcn19ZnVuY3Rpb24gR3IodCxlKXtmdW5jdGlvbiByKHIsbil7cmV0dXJuIHI9dChyLG4pLGUoclswXSxyWzFdKX1yZXR1cm4gdC5pbnZlcnQmJmUuaW52ZXJ0JiYoci5pbnZlcnQ9ZnVuY3Rpb24ocixuKXtyZXR1cm4ocj1lLmludmVydChyLG4pKSYmdC5pbnZlcnQoclswXSxyWzFdKX0pLHJ9ZnVuY3Rpb24gWXIoKXtyZXR1cm4hMH1mdW5jdGlvbiBXcih0LGUscixuLGkpe3ZhciBhPVtdLG89W107aWYodC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCEoKGU9dC5sZW5ndGgtMSk8PTApKXt2YXIgZSxyPXRbMF0sbj10W2VdO2lmKEJyKHIsbikpe2kubGluZVN0YXJ0KCk7Zm9yKHZhciBzPTA7czxlOysrcylpLnBvaW50KChyPXRbc10pWzBdLHJbMV0pO2kubGluZUVuZCgpfWVsc2V7dmFyIGw9bmV3IFpyKHIsdCxudWxsLCEwKSxjPW5ldyBacihyLG51bGwsbCwhMSk7bC5vPWMsYS5wdXNoKGwpLG8ucHVzaChjKSxsPW5ldyBacihuLHQsbnVsbCwhMSksYz1uZXcgWnIobixudWxsLGwsITApLGwubz1jLGEucHVzaChsKSxvLnB1c2goYyl9fX0pLG8uc29ydChlKSxYcihhKSxYcihvKSxhLmxlbmd0aCl7Zm9yKHZhciBzPTAsbD1yLGM9by5sZW5ndGg7czxjOysrcylvW3NdLmU9bD0hbDtmb3IodmFyIHUsaCxmPWFbMF07Oyl7Zm9yKHZhciBwPWYsZD0hMDtwLnY7KWlmKChwPXAubik9PT1mKXJldHVybjt1PXAueixpLmxpbmVTdGFydCgpO2Rve2lmKHAudj1wLm8udj0hMCxwLmUpe2lmKGQpZm9yKHM9MCxjPXUubGVuZ3RoO3M8YzsrK3MpaS5wb2ludCgoaD11W3NdKVswXSxoWzFdKTtlbHNlIG4ocC54LHAubi54LDEsaSk7cD1wLm59ZWxzZXtpZihkKWZvcihzPSh1PXAucC56KS5sZW5ndGgtMTtzPj0wOy0tcylpLnBvaW50KChoPXVbc10pWzBdLGhbMV0pO2Vsc2UgbihwLngscC5wLngsLTEsaSk7cD1wLnB9dT0ocD1wLm8pLnosZD0hZH13aGlsZSghcC52KTtpLmxpbmVFbmQoKX19fWZ1bmN0aW9uIFhyKHQpe2lmKGU9dC5sZW5ndGgpe2Zvcih2YXIgZSxyLG49MCxpPXRbMF07KytuPGU7KWkubj1yPXRbbl0sci5wPWksaT1yO2kubj1yPXRbMF0sci5wPWl9fWZ1bmN0aW9uIFpyKHQsZSxyLG4pe3RoaXMueD10LHRoaXMuej1lLHRoaXMubz1yLHRoaXMuZT1uLHRoaXMudj0hMSx0aGlzLm49dGhpcy5wPW51bGx9ZnVuY3Rpb24gJHIoZSxyLG4saSl7cmV0dXJuIGZ1bmN0aW9uKGEsbyl7dmFyIHMsbD1yKG8pLGM9YS5pbnZlcnQoaVswXSxpWzFdKSx1PXtwb2ludDpoLGxpbmVTdGFydDpwLGxpbmVFbmQ6ZCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt1LnBvaW50PWIsdS5saW5lU3RhcnQ9Xyx1LmxpbmVFbmQ9dyxzPVtdLGc9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt1LnBvaW50PWgsdS5saW5lU3RhcnQ9cCx1LmxpbmVFbmQ9ZCxzPXQubWVyZ2Uocyk7dmFyIGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLG49dFsxXSxpPVtNYXRoLnNpbihyKSwtTWF0aC5jb3MociksMF0sYT0wLG89MDtFci5yZXNldCgpO2Zvcih2YXIgcz0wLGw9ZS5sZW5ndGg7czxsOysrcyl7dmFyIGM9ZVtzXSx1PWMubGVuZ3RoO2lmKHUpZm9yKHZhciBoPWNbMF0sZj1oWzBdLHA9aFsxXS8yK1R0LzQsZD1NYXRoLnNpbihwKSxnPU1hdGguY29zKHApLHY9MTs7KXt2PT09dSYmKHY9MCk7dmFyIG09KHQ9Y1t2XSlbMF0seT10WzFdLzIrVHQvNCx4PU1hdGguc2luKHkpLGI9TWF0aC5jb3MoeSksXz1tLWYsdz1fPj0wPzE6LTEsaz13Kl8sQT1rPlR0LFQ9ZCp4O2lmKEVyLmFkZChNYXRoLmF0YW4yKFQqdypNYXRoLnNpbihrKSxnKmIrVCpNYXRoLmNvcyhrKSkpLGErPUE/Xyt3Kk10Ol8sQV5mPj1yXm0+PXIpe3ZhciBNPUlyKHpyKGgpLHpyKHQpKTtScihNKTt2YXIgUz1JcihpLE0pO1JyKFMpO3ZhciBFPShBXl8+PTA/LTE6MSkqRHQoU1syXSk7KG4+RXx8bj09PUUmJihNWzBdfHxNWzFdKSkmJihvKz1BXl8+PTA/MTotMSl9aWYoIXYrKylicmVhaztmPW0sZD14LGc9YixoPXR9fXJldHVybihhPC1rdHx8YTxrdCYmRXI8LWt0KV4xJm99KGMsZyk7cy5sZW5ndGg/KHh8fChvLnBvbHlnb25TdGFydCgpLHg9ITApLFdyKHMsUXIsZSxuLG8pKTplJiYoeHx8KG8ucG9seWdvblN0YXJ0KCkseD0hMCksby5saW5lU3RhcnQoKSxuKG51bGwsbnVsbCwxLG8pLG8ubGluZUVuZCgpKSx4JiYoby5wb2x5Z29uRW5kKCkseD0hMSkscz1nPW51bGx9LHNwaGVyZTpmdW5jdGlvbigpe28ucG9seWdvblN0YXJ0KCksby5saW5lU3RhcnQoKSxuKG51bGwsbnVsbCwxLG8pLG8ubGluZUVuZCgpLG8ucG9seWdvbkVuZCgpfX07ZnVuY3Rpb24gaCh0LHIpe3ZhciBuPWEodCxyKTtlKHQ9blswXSxyPW5bMV0pJiZvLnBvaW50KHQscil9ZnVuY3Rpb24gZih0LGUpe3ZhciByPWEodCxlKTtsLnBvaW50KHJbMF0sclsxXSl9ZnVuY3Rpb24gcCgpe3UucG9pbnQ9ZixsLmxpbmVTdGFydCgpfWZ1bmN0aW9uIGQoKXt1LnBvaW50PWgsbC5saW5lRW5kKCl9dmFyIGcsdixtPUtyKCkseT1yKG0pLHg9ITE7ZnVuY3Rpb24gYih0LGUpe3YucHVzaChbdCxlXSk7dmFyIHI9YSh0LGUpO3kucG9pbnQoclswXSxyWzFdKX1mdW5jdGlvbiBfKCl7eS5saW5lU3RhcnQoKSx2PVtdfWZ1bmN0aW9uIHcoKXtiKHZbMF1bMF0sdlswXVsxXSkseS5saW5lRW5kKCk7dmFyIHQsZT15LmNsZWFuKCkscj1tLmJ1ZmZlcigpLG49ci5sZW5ndGg7aWYodi5wb3AoKSxnLnB1c2godiksdj1udWxsLG4paWYoMSZlKXt2YXIgaSxhPS0xO2lmKChuPSh0PXJbMF0pLmxlbmd0aC0xKT4wKXtmb3IoeHx8KG8ucG9seWdvblN0YXJ0KCkseD0hMCksby5saW5lU3RhcnQoKTsrK2E8bjspby5wb2ludCgoaT10W2FdKVswXSxpWzFdKTtvLmxpbmVFbmQoKX19ZWxzZSBuPjEmJjImZSYmci5wdXNoKHIucG9wKCkuY29uY2F0KHIuc2hpZnQoKSkpLHMucHVzaChyLmZpbHRlcihKcikpfXJldHVybiB1fX1mdW5jdGlvbiBKcih0KXtyZXR1cm4gdC5sZW5ndGg+MX1mdW5jdGlvbiBLcigpe3ZhciB0LGU9W107cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2UucHVzaCh0PVtdKX0scG9pbnQ6ZnVuY3Rpb24oZSxyKXt0LnB1c2goW2Uscl0pfSxsaW5lRW5kOlAsYnVmZmVyOmZ1bmN0aW9uKCl7dmFyIHI9ZTtyZXR1cm4gZT1bXSx0PW51bGwscn0scmVqb2luOmZ1bmN0aW9uKCl7ZS5sZW5ndGg+MSYmZS5wdXNoKGUucG9wKCkuY29uY2F0KGUuc2hpZnQoKSkpfX19ZnVuY3Rpb24gUXIodCxlKXtyZXR1cm4oKHQ9dC54KVswXTwwP3RbMV0tRXQta3Q6RXQtdFsxXSktKChlPWUueClbMF08MD9lWzFdLUV0LWt0OkV0LWVbMV0pfXZhciB0bj0kcihZcixmdW5jdGlvbih0KXt2YXIgZSxyPU5hTixuPU5hTixpPU5hTjtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dC5saW5lU3RhcnQoKSxlPTF9LHBvaW50OmZ1bmN0aW9uKGEsbyl7dmFyIHM9YT4wP1R0Oi1UdCxsPXkoYS1yKTt5KGwtVHQpPGt0Pyh0LnBvaW50KHIsbj0obitvKS8yPjA/RXQ6LUV0KSx0LnBvaW50KGksbiksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHMsbiksdC5wb2ludChhLG4pLGU9MCk6aSE9PXMmJmw+PVR0JiYoeShyLWkpPGt0JiYoci09aSprdCkseShhLXMpPGt0JiYoYS09cyprdCksbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG89TWF0aC5zaW4odC1yKTtyZXR1cm4geShvKT5rdD9NYXRoLmF0YW4oKE1hdGguc2luKGUpKihhPU1hdGguY29zKG4pKSpNYXRoLnNpbihyKS1NYXRoLnNpbihuKSooaT1NYXRoLmNvcyhlKSkqTWF0aC5zaW4odCkpLyhpKmEqbykpOihlK24pLzJ9KHIsbixhLG8pLHQucG9pbnQoaSxuKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQocyxuKSxlPTApLHQucG9pbnQocj1hLG49byksaT1zfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCkscj1uPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1lfX19LGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpO2lmKG51bGw9PXQpaT1yKkV0LG4ucG9pbnQoLVR0LGkpLG4ucG9pbnQoMCxpKSxuLnBvaW50KFR0LGkpLG4ucG9pbnQoVHQsMCksbi5wb2ludChUdCwtaSksbi5wb2ludCgwLC1pKSxuLnBvaW50KC1UdCwtaSksbi5wb2ludCgtVHQsMCksbi5wb2ludCgtVHQsaSk7ZWxzZSBpZih5KHRbMF0tZVswXSk+a3Qpe3ZhciBhPXRbMF08ZVswXT9UdDotVHQ7aT1yKmEvMixuLnBvaW50KC1hLGkpLG4ucG9pbnQoMCxpKSxuLnBvaW50KGEsaSl9ZWxzZSBuLnBvaW50KGVbMF0sZVsxXSl9LFstVHQsLVR0LzJdKTtmdW5jdGlvbiBlbih0LGUscixuKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIGEsbz1pLmEscz1pLmIsbD1vLngsYz1vLnksdT0wLGg9MSxmPXMueC1sLHA9cy55LWM7aWYoYT10LWwsZnx8IShhPjApKXtpZihhLz1mLGY8MCl7aWYoYTx1KXJldHVybjthPGgmJihoPWEpfWVsc2UgaWYoZj4wKXtpZihhPmgpcmV0dXJuO2E+dSYmKHU9YSl9aWYoYT1yLWwsZnx8IShhPDApKXtpZihhLz1mLGY8MCl7aWYoYT5oKXJldHVybjthPnUmJih1PWEpfWVsc2UgaWYoZj4wKXtpZihhPHUpcmV0dXJuO2E8aCYmKGg9YSl9aWYoYT1lLWMscHx8IShhPjApKXtpZihhLz1wLHA8MCl7aWYoYTx1KXJldHVybjthPGgmJihoPWEpfWVsc2UgaWYocD4wKXtpZihhPmgpcmV0dXJuO2E+dSYmKHU9YSl9aWYoYT1uLWMscHx8IShhPDApKXtpZihhLz1wLHA8MCl7aWYoYT5oKXJldHVybjthPnUmJih1PWEpfWVsc2UgaWYocD4wKXtpZihhPHUpcmV0dXJuO2E8aCYmKGg9YSl9cmV0dXJuIHU+MCYmKGkuYT17eDpsK3UqZix5OmMrdSpwfSksaDwxJiYoaS5iPXt4OmwraCpmLHk6YytoKnB9KSxpfX19fX19dmFyIHJuPTFlOTtmdW5jdGlvbiBubihlLHIsbixpKXtyZXR1cm4gZnVuY3Rpb24obCl7dmFyIGMsdSxoLGYscCxkLGcsdixtLHkseCxiPWwsXz1LcigpLHc9ZW4oZSxyLG4saSksaz17cG9pbnQ6TSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtrLnBvaW50PVMsdSYmdS5wdXNoKGg9W10pO3k9ITAsbT0hMSxnPXY9TmFOfSxsaW5lRW5kOmZ1bmN0aW9uKCl7YyYmKFMoZixwKSxkJiZtJiZfLnJlam9pbigpLGMucHVzaChfLmJ1ZmZlcigpKSk7ay5wb2ludD1NLG0mJmwubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtsPV8sYz1bXSx1PVtdLHg9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtsPWIsYz10Lm1lcmdlKGMpO3ZhciByPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dS5sZW5ndGgsbj10WzFdLGk9MDtpPHI7KytpKWZvcih2YXIgYSxvPTEscz11W2ldLGw9cy5sZW5ndGgsYz1zWzBdO288bDsrK28pYT1zW29dLGNbMV08PW4/YVsxXT5uJiZPdChjLGEsdCk+MCYmKytlOmFbMV08PW4mJk90KGMsYSx0KTwwJiYtLWUsYz1hO3JldHVybiAwIT09ZX0oW2UsaV0pLG49eCYmcixhPWMubGVuZ3RoOyhufHxhKSYmKGwucG9seWdvblN0YXJ0KCksbiYmKGwubGluZVN0YXJ0KCksQShudWxsLG51bGwsMSxsKSxsLmxpbmVFbmQoKSksYSYmV3IoYyxvLHIsQSxsKSxsLnBvbHlnb25FbmQoKSksYz11PWg9bnVsbH19O2Z1bmN0aW9uIEEodCxvLGwsYyl7dmFyIHU9MCxoPTA7aWYobnVsbD09dHx8KHU9YSh0LGwpKSE9PShoPWEobyxsKSl8fHModCxvKTwwXmw+MClkb3tjLnBvaW50KDA9PT11fHwzPT09dT9lOm4sdT4xP2k6cil9d2hpbGUoKHU9KHUrbCs0KSU0KSE9PWgpO2Vsc2UgYy5wb2ludChvWzBdLG9bMV0pfWZ1bmN0aW9uIFQodCxhKXtyZXR1cm4gZTw9dCYmdDw9biYmcjw9YSYmYTw9aX1mdW5jdGlvbiBNKHQsZSl7VCh0LGUpJiZsLnBvaW50KHQsZSl9ZnVuY3Rpb24gUyh0LGUpe3ZhciByPVQodD1NYXRoLm1heCgtcm4sTWF0aC5taW4ocm4sdCkpLGU9TWF0aC5tYXgoLXJuLE1hdGgubWluKHJuLGUpKSk7aWYodSYmaC5wdXNoKFt0LGVdKSx5KWY9dCxwPWUsZD1yLHk9ITEsciYmKGwubGluZVN0YXJ0KCksbC5wb2ludCh0LGUpKTtlbHNlIGlmKHImJm0pbC5wb2ludCh0LGUpO2Vsc2V7dmFyIG49e2E6e3g6Zyx5OnZ9LGI6e3g6dCx5OmV9fTt3KG4pPyhtfHwobC5saW5lU3RhcnQoKSxsLnBvaW50KG4uYS54LG4uYS55KSksbC5wb2ludChuLmIueCxuLmIueSkscnx8bC5saW5lRW5kKCkseD0hMSk6ciYmKGwubGluZVN0YXJ0KCksbC5wb2ludCh0LGUpLHg9ITEpfWc9dCx2PWUsbT1yfXJldHVybiBrfTtmdW5jdGlvbiBhKHQsaSl7cmV0dXJuIHkodFswXS1lKTxrdD9pPjA/MDozOnkodFswXS1uKTxrdD9pPjA/MjoxOnkodFsxXS1yKTxrdD9pPjA/MTowOmk+MD8zOjJ9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBzKHQueCxlLngpfWZ1bmN0aW9uIHModCxlKXt2YXIgcj1hKHQsMSksbj1hKGUsMSk7cmV0dXJuIHIhPT1uP3ItbjowPT09cj9lWzFdLXRbMV06MT09PXI/dFswXS1lWzBdOjI9PT1yP3RbMV0tZVsxXTplWzBdLXRbMF19fWZ1bmN0aW9uIGFuKHQpe3ZhciBlPTAscj1UdC8zLG49Q24odCksaT1uKGUscik7cmV0dXJuIGkucGFyYWxsZWxzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oZT10WzBdKlR0LzE4MCxyPXRbMV0qVHQvMTgwKTpbZS9UdCoxODAsci9UdCoxODBdfSxpfWZ1bmN0aW9uIG9uKHQsZSl7dmFyIHI9TWF0aC5zaW4odCksbj0ocitNYXRoLnNpbihlKSkvMixpPTErciooMipuLXIpLGE9TWF0aC5zcXJ0KGkpL247ZnVuY3Rpb24gbyh0LGUpe3ZhciByPU1hdGguc3FydChpLTIqbipNYXRoLnNpbihlKSkvbjtyZXR1cm5bcipNYXRoLnNpbih0Kj1uKSxhLXIqTWF0aC5jb3ModCldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWEtZTtyZXR1cm5bTWF0aC5hdGFuMih0LHIpL24sRHQoKGktKHQqdCtyKnIpKm4qbikvKDIqbikpXX0sb310Lmdlby5jbGlwRXh0ZW50PWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG4saSxhLG89e3N0cmVhbTpmdW5jdGlvbih0KXtyZXR1cm4gaSYmKGkudmFsaWQ9ITEpLChpPWEodCkpLnZhbGlkPSEwLGl9LGV4dGVudDpmdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1ubih0PStzWzBdWzBdLGU9K3NbMF1bMV0scj0rc1sxXVswXSxuPStzWzFdWzFdKSxpJiYoaS52YWxpZD0hMSxpPW51bGwpLG8pOltbdCxlXSxbcixuXV19fTtyZXR1cm4gby5leHRlbnQoW1swLDBdLFs5NjAsNTAwXV0pfSwodC5nZW8uY29uaWNFcXVhbEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gYW4ob24pfSkucmF3PW9uLHQuZ2VvLmFsYmVycz1mdW5jdGlvbigpe3JldHVybiB0Lmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbOTYsMF0pLmNlbnRlcihbLS42LDM4LjddKS5wYXJhbGxlbHMoWzI5LjUsNDUuNV0pLnNjYWxlKDEwNzApfSx0Lmdlby5hbGJlcnNVc2E9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saSxhPXQuZ2VvLmFsYmVycygpLG89dC5nZW8uY29uaWNFcXVhbEFyZWEoKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLHM9dC5nZW8uY29uaWNFcXVhbEFyZWEoKS5yb3RhdGUoWzE1NywwXSkuY2VudGVyKFstMywxOS45XSkucGFyYWxsZWxzKFs4LDE4XSksbD17cG9pbnQ6ZnVuY3Rpb24odCxyKXtlPVt0LHJdfX07ZnVuY3Rpb24gYyh0KXt2YXIgYT10WzBdLG89dFsxXTtyZXR1cm4gZT1udWxsLHIoYSxvKSxlfHwobihhLG8pLGUpfHxpKGEsbyksZX1yZXR1cm4gYy5pbnZlcnQ9ZnVuY3Rpb24odCl7dmFyIGU9YS5zY2FsZSgpLHI9YS50cmFuc2xhdGUoKSxuPSh0WzBdLXJbMF0pL2UsaT0odFsxXS1yWzFdKS9lO3JldHVybihpPj0uMTImJmk8LjIzNCYmbj49LS40MjUmJm48LS4yMTQ/bzppPj0uMTY2JiZpPC4yMzQmJm4+PS0uMjE0JiZuPC0uMTE1P3M6YSkuaW52ZXJ0KHQpfSxjLnN0cmVhbT1mdW5jdGlvbih0KXt2YXIgZT1hLnN0cmVhbSh0KSxyPW8uc3RyZWFtKHQpLG49cy5zdHJlYW0odCk7cmV0dXJue3BvaW50OmZ1bmN0aW9uKHQsaSl7ZS5wb2ludCh0LGkpLHIucG9pbnQodCxpKSxuLnBvaW50KHQsaSl9LHNwaGVyZTpmdW5jdGlvbigpe2Uuc3BoZXJlKCksci5zcGhlcmUoKSxuLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLmxpbmVTdGFydCgpLHIubGluZVN0YXJ0KCksbi5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2UubGluZUVuZCgpLHIubGluZUVuZCgpLG4ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25TdGFydCgpLHIucG9seWdvblN0YXJ0KCksbi5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2UucG9seWdvbkVuZCgpLHIucG9seWdvbkVuZCgpLG4ucG9seWdvbkVuZCgpfX19LGMucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhLnByZWNpc2lvbih0KSxvLnByZWNpc2lvbih0KSxzLnByZWNpc2lvbih0KSxjKTphLnByZWNpc2lvbigpfSxjLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhLnNjYWxlKHQpLG8uc2NhbGUoLjM1KnQpLHMuc2NhbGUodCksYy50cmFuc2xhdGUoYS50cmFuc2xhdGUoKSkpOmEuc2NhbGUoKX0sYy50cmFuc2xhdGU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGEudHJhbnNsYXRlKCk7dmFyIGU9YS5zY2FsZSgpLHU9K3RbMF0saD0rdFsxXTtyZXR1cm4gcj1hLnRyYW5zbGF0ZSh0KS5jbGlwRXh0ZW50KFtbdS0uNDU1KmUsaC0uMjM4KmVdLFt1Ky40NTUqZSxoKy4yMzgqZV1dKS5zdHJlYW0obCkucG9pbnQsbj1vLnRyYW5zbGF0ZShbdS0uMzA3KmUsaCsuMjAxKmVdKS5jbGlwRXh0ZW50KFtbdS0uNDI1KmUra3QsaCsuMTIqZStrdF0sW3UtLjIxNCplLWt0LGgrLjIzNCplLWt0XV0pLnN0cmVhbShsKS5wb2ludCxpPXMudHJhbnNsYXRlKFt1LS4yMDUqZSxoKy4yMTIqZV0pLmNsaXBFeHRlbnQoW1t1LS4yMTQqZStrdCxoKy4xNjYqZStrdF0sW3UtLjExNSplLWt0LGgrLjIzNCplLWt0XV0pLnN0cmVhbShsKS5wb2ludCxjfSxjLnNjYWxlKDEwNzApfTt2YXIgc24sbG4sY24sdW4saG4sZm4scG49e3BvaW50OlAsbGluZVN0YXJ0OlAsbGluZUVuZDpQLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2xuPTAscG4ubGluZVN0YXJ0PWRufSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7cG4ubGluZVN0YXJ0PXBuLmxpbmVFbmQ9cG4ucG9pbnQ9UCxzbis9eShsbi8yKX19O2Z1bmN0aW9uIGRuKCl7dmFyIHQsZSxyLG47ZnVuY3Rpb24gaSh0LGUpe2xuKz1uKnQtciplLHI9dCxuPWV9cG4ucG9pbnQ9ZnVuY3Rpb24oYSxvKXtwbi5wb2ludD1pLHQ9cj1hLGU9bj1vfSxwbi5saW5lRW5kPWZ1bmN0aW9uKCl7aSh0LGUpfX12YXIgZ249e3BvaW50OmZ1bmN0aW9uKHQsZSl7dDxjbiYmKGNuPXQpO3Q+aG4mJihobj10KTtlPHVuJiYodW49ZSk7ZT5mbiYmKGZuPWUpfSxsaW5lU3RhcnQ6UCxsaW5lRW5kOlAscG9seWdvblN0YXJ0OlAscG9seWdvbkVuZDpQfTtmdW5jdGlvbiB2bigpe3ZhciB0PW1uKDQuNSksZT1bXSxyPXtwb2ludDpuLGxpbmVTdGFydDpmdW5jdGlvbigpe3IucG9pbnQ9aX0sbGluZUVuZDpvLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3IubGluZUVuZD1zfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ci5saW5lRW5kPW8sci5wb2ludD1ufSxwb2ludFJhZGl1czpmdW5jdGlvbihlKXtyZXR1cm4gdD1tbihlKSxyfSxyZXN1bHQ6ZnVuY3Rpb24oKXtpZihlLmxlbmd0aCl7dmFyIHQ9ZS5qb2luKFwiXCIpO3JldHVybiBlPVtdLHR9fX07ZnVuY3Rpb24gbihyLG4pe2UucHVzaChcIk1cIixyLFwiLFwiLG4sdCl9ZnVuY3Rpb24gaSh0LG4pe2UucHVzaChcIk1cIix0LFwiLFwiLG4pLHIucG9pbnQ9YX1mdW5jdGlvbiBhKHQscil7ZS5wdXNoKFwiTFwiLHQsXCIsXCIscil9ZnVuY3Rpb24gbygpe3IucG9pbnQ9bn1mdW5jdGlvbiBzKCl7ZS5wdXNoKFwiWlwiKX1yZXR1cm4gcn1mdW5jdGlvbiBtbih0KXtyZXR1cm5cIm0wLFwiK3QrXCJhXCIrdCtcIixcIit0K1wiIDAgMSwxIDAsXCIrLTIqdCtcImFcIit0K1wiLFwiK3QrXCIgMCAxLDEgMCxcIisyKnQrXCJ6XCJ9dmFyIHluLHhuPXtwb2ludDpibixsaW5lU3RhcnQ6X24sbGluZUVuZDp3bixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt4bi5saW5lU3RhcnQ9a259LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt4bi5wb2ludD1ibix4bi5saW5lU3RhcnQ9X24seG4ubGluZUVuZD13bn19O2Z1bmN0aW9uIGJuKHQsZSl7eHIrPXQsYnIrPWUsKytfcn1mdW5jdGlvbiBfbigpe3ZhciB0LGU7ZnVuY3Rpb24gcihyLG4pe3ZhciBpPXItdCxhPW4tZSxvPU1hdGguc3FydChpKmkrYSphKTt3cis9byoodCtyKS8yLGtyKz1vKihlK24pLzIsQXIrPW8sYm4odD1yLGU9bil9eG4ucG9pbnQ9ZnVuY3Rpb24obixpKXt4bi5wb2ludD1yLGJuKHQ9bixlPWkpfX1mdW5jdGlvbiB3bigpe3huLnBvaW50PWJufWZ1bmN0aW9uIGtuKCl7dmFyIHQsZSxyLG47ZnVuY3Rpb24gaSh0LGUpe3ZhciBpPXQtcixhPWUtbixvPU1hdGguc3FydChpKmkrYSphKTt3cis9byoocit0KS8yLGtyKz1vKihuK2UpLzIsQXIrPW8sVHIrPShvPW4qdC1yKmUpKihyK3QpLE1yKz1vKihuK2UpLFNyKz0zKm8sYm4ocj10LG49ZSl9eG4ucG9pbnQ9ZnVuY3Rpb24oYSxvKXt4bi5wb2ludD1pLGJuKHQ9cj1hLGU9bj1vKX0seG4ubGluZUVuZD1mdW5jdGlvbigpe2kodCxlKX19ZnVuY3Rpb24gQW4odCl7dmFyIGU9NC41LHI9e3BvaW50Om4sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ci5wb2ludD1pfSxsaW5lRW5kOm8scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7ci5saW5lRW5kPXN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtyLmxpbmVFbmQ9byxyLnBvaW50PW59LHBvaW50UmFkaXVzOmZ1bmN0aW9uKHQpe3JldHVybiBlPXQscn0scmVzdWx0OlB9O2Z1bmN0aW9uIG4ocixuKXt0Lm1vdmVUbyhyK2UsbiksdC5hcmMocixuLGUsMCxNdCl9ZnVuY3Rpb24gaShlLG4pe3QubW92ZVRvKGUsbiksci5wb2ludD1hfWZ1bmN0aW9uIGEoZSxyKXt0LmxpbmVUbyhlLHIpfWZ1bmN0aW9uIG8oKXtyLnBvaW50PW59ZnVuY3Rpb24gcygpe3QuY2xvc2VQYXRoKCl9cmV0dXJuIHJ9ZnVuY3Rpb24gVG4odCl7dmFyIGU9LjUscj1NYXRoLmNvcygzMCpDdCksbj0xNjtmdW5jdGlvbiBpKGUpe3JldHVybihuP2Z1bmN0aW9uKGUpe3ZhciByLGksbyxzLGwsYyx1LGgsZixwLGQsZyx2PXtwb2ludDptLGxpbmVTdGFydDp5LGxpbmVFbmQ6Yixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25TdGFydCgpLHYubGluZVN0YXJ0PV99LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25FbmQoKSx2LmxpbmVTdGFydD15fX07ZnVuY3Rpb24gbShyLG4pe3I9dChyLG4pLGUucG9pbnQoclswXSxyWzFdKX1mdW5jdGlvbiB5KCl7aD1OYU4sdi5wb2ludD14LGUubGluZVN0YXJ0KCl9ZnVuY3Rpb24geChyLGkpe3ZhciBvPXpyKFtyLGldKSxzPXQocixpKTthKGgsZix1LHAsZCxnLGg9c1swXSxmPXNbMV0sdT1yLHA9b1swXSxkPW9bMV0sZz1vWzJdLG4sZSksZS5wb2ludChoLGYpfWZ1bmN0aW9uIGIoKXt2LnBvaW50PW0sZS5saW5lRW5kKCl9ZnVuY3Rpb24gXygpe3koKSx2LnBvaW50PXcsdi5saW5lRW5kPWt9ZnVuY3Rpb24gdyh0LGUpe3gocj10LGUpLGk9aCxvPWYscz1wLGw9ZCxjPWcsdi5wb2ludD14fWZ1bmN0aW9uIGsoKXthKGgsZix1LHAsZCxnLGksbyxyLHMsbCxjLG4sZSksdi5saW5lRW5kPWIsYigpfXJldHVybiB2fTpmdW5jdGlvbihlKXtyZXR1cm4gU24oZSxmdW5jdGlvbihyLG4pe3I9dChyLG4pLGUucG9pbnQoclswXSxyWzFdKX0pfSkoZSl9ZnVuY3Rpb24gYShuLGksbyxzLGwsYyx1LGgsZixwLGQsZyx2LG0pe3ZhciB4PXUtbixiPWgtaSxfPXgqeCtiKmI7aWYoXz40KmUmJnYtLSl7dmFyIHc9cytwLGs9bCtkLEE9YytnLFQ9TWF0aC5zcXJ0KHcqdytrKmsrQSpBKSxNPU1hdGguYXNpbihBLz1UKSxTPXkoeShBKS0xKTxrdHx8eShvLWYpPGt0PyhvK2YpLzI6TWF0aC5hdGFuMihrLHcpLEU9dChTLE0pLEM9RVswXSxMPUVbMV0sej1DLW4sTz1MLWksST1iKnoteCpPOyhJKkkvXz5lfHx5KCh4KnorYipPKS9fLS41KT4uM3x8cypwK2wqZCtjKmc8cikmJihhKG4saSxvLHMsbCxjLEMsTCxTLHcvPVQsay89VCxBLHYsbSksbS5wb2ludChDLEwpLGEoQyxMLFMsdyxrLEEsdSxoLGYscCxkLGcsdixtKSl9fXJldHVybiBpLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0oZT10KnQpPjAmJjE2LGkpOk1hdGguc3FydChlKX0saX1mdW5jdGlvbiBNbih0KXt0aGlzLnN0cmVhbT10fWZ1bmN0aW9uIFNuKHQsZSl7cmV0dXJue3BvaW50OmUsc3BoZXJlOmZ1bmN0aW9uKCl7dC5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dC5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dC5wb2x5Z29uRW5kKCl9fX1mdW5jdGlvbiBFbih0KXtyZXR1cm4gQ24oZnVuY3Rpb24oKXtyZXR1cm4gdH0pKCl9ZnVuY3Rpb24gQ24oZSl7dmFyIHIsbixpLGEsbyxzLGw9VG4oZnVuY3Rpb24odCxlKXtyZXR1cm5bKHQ9cih0LGUpKVswXSpjK2Esby10WzFdKmNdfSksYz0xNTAsdT00ODAsaD0yNTAsZj0wLHA9MCxkPTAsZz0wLHY9MCxtPXRuLHg9eixiPW51bGwsXz1udWxsO2Z1bmN0aW9uIHcodCl7cmV0dXJuWyh0PWkodFswXSpDdCx0WzFdKkN0KSlbMF0qYythLG8tdFsxXSpjXX1mdW5jdGlvbiBrKHQpe3JldHVybih0PWkuaW52ZXJ0KCh0WzBdLWEpL2MsKG8tdFsxXSkvYykpJiZbdFswXSpMdCx0WzFdKkx0XX1mdW5jdGlvbiBBKCl7aT1HcihuPUluKGQsZyx2KSxyKTt2YXIgdD1yKGYscCk7cmV0dXJuIGE9dS10WzBdKmMsbz1oK3RbMV0qYyxUKCl9ZnVuY3Rpb24gVCgpe3JldHVybiBzJiYocy52YWxpZD0hMSxzPW51bGwpLHd9cmV0dXJuIHcuc3RyZWFtPWZ1bmN0aW9uKHQpe3JldHVybiBzJiYocy52YWxpZD0hMSksKHM9TG4obShuLGwoeCh0KSkpKSkudmFsaWQ9ITAsc30sdy5jbGlwQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09bnVsbD09dD8oYj10LHRuKTpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmNvcyh0KSxyPWU+MCxuPXkoZSk+a3Q7cmV0dXJuICRyKGksZnVuY3Rpb24odCl7dmFyIGUscyxsLGMsdTtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7Yz1sPSExLHU9MX0scG9pbnQ6ZnVuY3Rpb24oaCxmKXt2YXIgcCxkPVtoLGZdLGc9aShoLGYpLHY9cj9nPzA6byhoLGYpOmc/byhoKyhoPDA/VHQ6LVR0KSxmKTowO2lmKCFlJiYoYz1sPWcpJiZ0LmxpbmVTdGFydCgpLGchPT1sJiYocD1hKGUsZCksKEJyKGUscCl8fEJyKGQscCkpJiYoZFswXSs9a3QsZFsxXSs9a3QsZz1pKGRbMF0sZFsxXSkpKSxnIT09bCl1PTAsZz8odC5saW5lU3RhcnQoKSxwPWEoZCxlKSx0LnBvaW50KHBbMF0scFsxXSkpOihwPWEoZSxkKSx0LnBvaW50KHBbMF0scFsxXSksdC5saW5lRW5kKCkpLGU9cDtlbHNlIGlmKG4mJmUmJnJeZyl7dmFyIG07diZzfHwhKG09YShkLGUsITApKXx8KHU9MCxyPyh0LmxpbmVTdGFydCgpLHQucG9pbnQobVswXVswXSxtWzBdWzFdKSx0LnBvaW50KG1bMV1bMF0sbVsxXVsxXSksdC5saW5lRW5kKCkpOih0LnBvaW50KG1bMV1bMF0sbVsxXVsxXSksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KG1bMF1bMF0sbVswXVsxXSkpKX0hZ3x8ZSYmQnIoZSxkKXx8dC5wb2ludChkWzBdLGRbMV0pLGU9ZCxsPWcscz12fSxsaW5lRW5kOmZ1bmN0aW9uKCl7bCYmdC5saW5lRW5kKCksZT1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiB1fChjJiZsKTw8MX19fSxGbih0LDYqQ3QpLHI/WzAsLXRdOlstVHQsdC1UdF0pO2Z1bmN0aW9uIGkodCxyKXtyZXR1cm4gTWF0aC5jb3ModCkqTWF0aC5jb3Mocik+ZX1mdW5jdGlvbiBhKHQscixuKXt2YXIgaT1bMSwwLDBdLGE9SXIoenIodCksenIocikpLG89T3IoYSxhKSxzPWFbMF0sbD1vLXMqcztpZighbClyZXR1cm4hbiYmdDt2YXIgYz1lKm8vbCx1PS1lKnMvbCxoPUlyKGksYSksZj1QcihpLGMpO0RyKGYsUHIoYSx1KSk7dmFyIHA9aCxkPU9yKGYscCksZz1PcihwLHApLHY9ZCpkLWcqKE9yKGYsZiktMSk7aWYoISh2PDApKXt2YXIgbT1NYXRoLnNxcnQodikseD1QcihwLCgtZC1tKS9nKTtpZihEcih4LGYpLHg9RnIoeCksIW4pcmV0dXJuIHg7dmFyIGIsXz10WzBdLHc9clswXSxrPXRbMV0sQT1yWzFdO3c8XyYmKGI9XyxfPXcsdz1iKTt2YXIgVD13LV8sTT15KFQtVHQpPGt0O2lmKCFNJiZBPGsmJihiPWssaz1BLEE9YiksTXx8VDxrdD9NP2srQT4wXnhbMV08KHkoeFswXS1fKTxrdD9rOkEpOms8PXhbMV0mJnhbMV08PUE6VD5UdF4oXzw9eFswXSYmeFswXTw9dykpe3ZhciBTPVByKHAsKC1kK20pL2cpO3JldHVybiBEcihTLGYpLFt4LEZyKFMpXX19fWZ1bmN0aW9uIG8oZSxuKXt2YXIgaT1yP3Q6VHQtdCxhPTA7cmV0dXJuIGU8LWk/YXw9MTplPmkmJihhfD0yKSxuPC1pP2F8PTQ6bj5pJiYoYXw9OCksYX19KChiPSt0KSpDdCksVCgpKTpifSx3LmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89dCx4PXQ/bm4odFswXVswXSx0WzBdWzFdLHRbMV1bMF0sdFsxXVsxXSk6eixUKCkpOl99LHcuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9K3QsQSgpKTpjfSx3LnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdFswXSxoPSt0WzFdLEEoKSk6W3UsaF19LHcuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPXRbMF0lMzYwKkN0LHA9dFsxXSUzNjAqQ3QsQSgpKTpbZipMdCxwKkx0XX0sdy5yb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9dFswXSUzNjAqQ3QsZz10WzFdJTM2MCpDdCx2PXQubGVuZ3RoPjI/dFsyXSUzNjAqQ3Q6MCxBKCkpOltkKkx0LGcqTHQsdipMdF19LHQucmViaW5kKHcsbCxcInByZWNpc2lvblwiKSxmdW5jdGlvbigpe3JldHVybiByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHcuaW52ZXJ0PXIuaW52ZXJ0JiZrLEEoKX19ZnVuY3Rpb24gTG4odCl7cmV0dXJuIFNuKHQsZnVuY3Rpb24oZSxyKXt0LnBvaW50KGUqQ3QscipDdCl9KX1mdW5jdGlvbiB6bih0LGUpe3JldHVyblt0LGVdfWZ1bmN0aW9uIE9uKHQsZSl7cmV0dXJuW3Q+VHQ/dC1NdDp0PC1UdD90K010OnQsZV19ZnVuY3Rpb24gSW4odCxlLHIpe3JldHVybiB0P2V8fHI/R3IoUG4odCksUm4oZSxyKSk6UG4odCk6ZXx8cj9SbihlLHIpOk9ufWZ1bmN0aW9uIERuKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVyblsoZSs9dCk+VHQ/ZS1NdDplPC1UdD9lK010OmUscl19fWZ1bmN0aW9uIFBuKHQpe3ZhciBlPURuKHQpO3JldHVybiBlLmludmVydD1EbigtdCksZX1mdW5jdGlvbiBSbih0LGUpe3ZhciByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCksaT1NYXRoLmNvcyhlKSxhPU1hdGguc2luKGUpO2Z1bmN0aW9uIG8odCxlKXt2YXIgbz1NYXRoLmNvcyhlKSxzPU1hdGguY29zKHQpKm8sbD1NYXRoLnNpbih0KSpvLGM9TWF0aC5zaW4oZSksdT1jKnIrcypuO3JldHVybltNYXRoLmF0YW4yKGwqaS11KmEscypyLWMqbiksRHQodSppK2wqYSldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBvPU1hdGguY29zKGUpLHM9TWF0aC5jb3ModCkqbyxsPU1hdGguc2luKHQpKm8sYz1NYXRoLnNpbihlKSx1PWMqaS1sKmE7cmV0dXJuW01hdGguYXRhbjIobCppK2MqYSxzKnIrdSpuKSxEdCh1KnItcypuKV19LG99ZnVuY3Rpb24gRm4odCxlKXt2YXIgcj1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpO3JldHVybiBmdW5jdGlvbihpLGEsbyxzKXt2YXIgbD1vKmU7bnVsbCE9aT8oaT1CbihyLGkpLGE9Qm4ocixhKSwobz4wP2k8YTppPmEpJiYoaSs9bypNdCkpOihpPXQrbypNdCxhPXQtLjUqbCk7Zm9yKHZhciBjLHU9aTtvPjA/dT5hOnU8YTt1LT1sKXMucG9pbnQoKGM9RnIoW3IsLW4qTWF0aC5jb3ModSksLW4qTWF0aC5zaW4odSldKSlbMF0sY1sxXSl9fWZ1bmN0aW9uIEJuKHQsZSl7dmFyIHI9enIoZSk7clswXS09dCxScihyKTt2YXIgbj1JdCgtclsxXSk7cmV0dXJuKCgtclsyXTwwPy1uOm4pKzIqTWF0aC5QSS1rdCklKDIqTWF0aC5QSSl9ZnVuY3Rpb24gTm4oZSxyLG4pe3ZhciBpPXQucmFuZ2UoZSxyLWt0LG4pLmNvbmNhdChyKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkubWFwKGZ1bmN0aW9uKGUpe3JldHVyblt0LGVdfSl9fWZ1bmN0aW9uIGpuKGUscixuKXt2YXIgaT10LnJhbmdlKGUsci1rdCxuKS5jb25jYXQocik7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLm1hcChmdW5jdGlvbihlKXtyZXR1cm5bZSx0XX0pfX1mdW5jdGlvbiBWbih0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gVW4odCl7cmV0dXJuIHQudGFyZ2V0fXQuZ2VvLnBhdGg9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saSxhLG89NC41O2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGUmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiBvJiZpLnBvaW50UmFkaXVzKCtvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYSYmYS52YWxpZHx8KGE9bihpKSksdC5nZW8uc3RyZWFtKGUsYSkpLGkucmVzdWx0KCl9ZnVuY3Rpb24gbCgpe3JldHVybiBhPW51bGwsc31yZXR1cm4gcy5hcmVhPWZ1bmN0aW9uKGUpe3JldHVybiBzbj0wLHQuZ2VvLnN0cmVhbShlLG4ocG4pKSxzbn0scy5jZW50cm9pZD1mdW5jdGlvbihlKXtyZXR1cm4geHI9YnI9X3I9d3I9a3I9QXI9VHI9TXI9U3I9MCx0Lmdlby5zdHJlYW0oZSxuKHhuKSksU3I/W1RyL1NyLE1yL1NyXTpBcj9bd3IvQXIsa3IvQXJdOl9yP1t4ci9fcixici9fcl06W05hTixOYU5dfSxzLmJvdW5kcz1mdW5jdGlvbihlKXtyZXR1cm4gaG49Zm49LShjbj11bj0xLzApLHQuZ2VvLnN0cmVhbShlLG4oZ24pKSxbW2NuLHVuXSxbaG4sZm5dXX0scy5wcm9qZWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPShlPXQpP3Quc3RyZWFtfHwocj10LGk9VG4oZnVuY3Rpb24odCxlKXtyZXR1cm4gcihbdCpMdCxlKkx0XSl9KSxmdW5jdGlvbih0KXtyZXR1cm4gTG4oaSh0KSl9KTp6LGwoKSk6ZTt2YXIgcixpfSxzLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09KHI9dCk/bmV3IHZuOm5ldyBBbih0KSxcImZ1bmN0aW9uXCIhPXR5cGVvZiBvJiZpLnBvaW50UmFkaXVzKG8pLGwoKSk6cn0scy5wb2ludFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6KGkucG9pbnRSYWRpdXMoK3QpLCt0KSxzKTpvfSxzLnByb2plY3Rpb24odC5nZW8uYWxiZXJzVXNhKCkpLmNvbnRleHQobnVsbCl9LHQuZ2VvLnRyYW5zZm9ybT1mdW5jdGlvbih0KXtyZXR1cm57c3RyZWFtOmZ1bmN0aW9uKGUpe3ZhciByPW5ldyBNbihlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9fX0sTW4ucHJvdG90eXBlPXtwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuc3RyZWFtLnBvaW50KHQsZSl9LHNwaGVyZTpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fSx0Lmdlby5wcm9qZWN0aW9uPUVuLHQuZ2VvLnByb2plY3Rpb25NdXRhdG9yPUNuLCh0Lmdlby5lcXVpcmVjdGFuZ3VsYXI9ZnVuY3Rpb24oKXtyZXR1cm4gRW4oem4pfSkucmF3PXpuLmludmVydD16bix0Lmdlby5yb3RhdGlvbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3JldHVybihlPXQoZVswXSpDdCxlWzFdKkN0KSlbMF0qPUx0LGVbMV0qPUx0LGV9cmV0dXJuIHQ9SW4odFswXSUzNjAqQ3QsdFsxXSpDdCx0Lmxlbmd0aD4yP3RbMl0qQ3Q6MCksZS5pbnZlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dC5pbnZlcnQoZVswXSpDdCxlWzFdKkN0KSlbMF0qPUx0LGVbMV0qPUx0LGV9LGV9LE9uLmludmVydD16bix0Lmdlby5jaXJjbGU9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9WzAsMF0sbj02O2Z1bmN0aW9uIGkoKXt2YXIgdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiByP3IuYXBwbHkodGhpcyxhcmd1bWVudHMpOnIsbj1JbigtdFswXSpDdCwtdFsxXSpDdCwwKS5pbnZlcnQsaT1bXTtyZXR1cm4gZShudWxsLG51bGwsMSx7cG9pbnQ6ZnVuY3Rpb24odCxlKXtpLnB1c2godD1uKHQsZSkpLHRbMF0qPUx0LHRbMV0qPUx0fX0pLHt0eXBlOlwiUG9seWdvblwiLGNvb3JkaW5hdGVzOltpXX19cmV0dXJuIGkub3JpZ2luPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsaSk6cn0saS5hbmdsZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1GbigodD0rcikqQ3QsbipDdCksaSk6dH0saS5wcmVjaXNpb249ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9Rm4odCpDdCwobj0rcikqQ3QpLGkpOm59LGkuYW5nbGUoOTApfSx0Lmdlby5kaXN0YW5jZT1mdW5jdGlvbih0LGUpe3ZhciByLG49KGVbMF0tdFswXSkqQ3QsaT10WzFdKkN0LGE9ZVsxXSpDdCxvPU1hdGguc2luKG4pLHM9TWF0aC5jb3MobiksbD1NYXRoLnNpbihpKSxjPU1hdGguY29zKGkpLHU9TWF0aC5zaW4oYSksaD1NYXRoLmNvcyhhKTtyZXR1cm4gTWF0aC5hdGFuMihNYXRoLnNxcnQoKHI9aCpvKSpyKyhyPWMqdS1sKmgqcykqciksbCp1K2MqaCpzKX0sdC5nZW8uZ3JhdGljdWxlPWZ1bmN0aW9uKCl7dmFyIGUscixuLGksYSxvLHMsbCxjLHUsaCxmLHA9MTAsZD1wLGc9OTAsdj0zNjAsbT0yLjU7ZnVuY3Rpb24geCgpe3JldHVybnt0eXBlOlwiTXVsdGlMaW5lU3RyaW5nXCIsY29vcmRpbmF0ZXM6YigpfX1mdW5jdGlvbiBiKCl7cmV0dXJuIHQucmFuZ2UoTWF0aC5jZWlsKGkvZykqZyxuLGcpLm1hcChoKS5jb25jYXQodC5yYW5nZShNYXRoLmNlaWwobC92KSp2LHMsdikubWFwKGYpKS5jb25jYXQodC5yYW5nZShNYXRoLmNlaWwoci9wKSpwLGUscCkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB5KHQlZyk+a3R9KS5tYXAoYykpLmNvbmNhdCh0LnJhbmdlKE1hdGguY2VpbChvL2QpKmQsYSxkKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHkodCV2KT5rdH0pLm1hcCh1KSl9cmV0dXJuIHgubGluZXM9ZnVuY3Rpb24oKXtyZXR1cm4gYigpLm1hcChmdW5jdGlvbih0KXtyZXR1cm57dHlwZTpcIkxpbmVTdHJpbmdcIixjb29yZGluYXRlczp0fX0pfSx4Lm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpcIlBvbHlnb25cIixjb29yZGluYXRlczpbaChpKS5jb25jYXQoZihzKS5zbGljZSgxKSxoKG4pLnJldmVyc2UoKS5zbGljZSgxKSxmKGwpLnJldmVyc2UoKS5zbGljZSgxKSldfX0seC5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/eC5tYWpvckV4dGVudCh0KS5taW5vckV4dGVudCh0KTp4Lm1pbm9yRXh0ZW50KCl9LHgubWFqb3JFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3RbMF1bMF0sbj0rdFsxXVswXSxsPSt0WzBdWzFdLHM9K3RbMV1bMV0saT5uJiYodD1pLGk9bixuPXQpLGw+cyYmKHQ9bCxsPXMscz10KSx4LnByZWNpc2lvbihtKSk6W1tpLGxdLFtuLHNdXX0seC5taW5vckV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdFswXVswXSxlPSt0WzFdWzBdLG89K3RbMF1bMV0sYT0rdFsxXVsxXSxyPmUmJih0PXIscj1lLGU9dCksbz5hJiYodD1vLG89YSxhPXQpLHgucHJlY2lzaW9uKG0pKTpbW3Isb10sW2UsYV1dfSx4LnN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/eC5tYWpvclN0ZXAodCkubWlub3JTdGVwKHQpOngubWlub3JTdGVwKCl9LHgubWFqb3JTdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSt0WzBdLHY9K3RbMV0seCk6W2csdl19LHgubWlub3JTdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPSt0WzBdLGQ9K3RbMV0seCk6W3AsZF19LHgucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPSt0LGM9Tm4obyxhLDkwKSx1PWpuKHIsZSxtKSxoPU5uKGwscyw5MCksZj1qbihpLG4sbSkseCk6bX0seC5tYWpvckV4dGVudChbWy0xODAsLTkwK2t0XSxbMTgwLDkwLWt0XV0pLm1pbm9yRXh0ZW50KFtbLTE4MCwtODAta3RdLFsxODAsODAra3RdXSl9LHQuZ2VvLmdyZWF0QXJjPWZ1bmN0aW9uKCl7dmFyIGUscixuPVZuLGk9VW47ZnVuY3Rpb24gYSgpe3JldHVybnt0eXBlOlwiTGluZVN0cmluZ1wiLGNvb3JkaW5hdGVzOltlfHxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyfHxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKV19fXJldHVybiBhLmRpc3RhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZ2VvLmRpc3RhbmNlKGV8fG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHJ8fGkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sYS5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/bnVsbDp0LGEpOm59LGEudGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQscj1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P251bGw6dCxhKTppfSxhLnByZWNpc2lvbj1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2E6MH0sYX0sdC5nZW8uaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcj10WzBdKkN0LG49dFsxXSpDdCxpPWVbMF0qQ3QsYT1lWzFdKkN0LG89TWF0aC5jb3Mobikscz1NYXRoLnNpbihuKSxsPU1hdGguY29zKGEpLGM9TWF0aC5zaW4oYSksdT1vKk1hdGguY29zKHIpLGg9bypNYXRoLnNpbihyKSxmPWwqTWF0aC5jb3MoaSkscD1sKk1hdGguc2luKGkpLGQ9MipNYXRoLmFzaW4oTWF0aC5zcXJ0KFJ0KGEtbikrbypsKlJ0KGktcikpKSxnPTEvTWF0aC5zaW4oZCksKHY9ZD9mdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNpbih0Kj1kKSpnLHI9TWF0aC5zaW4oZC10KSpnLG49cip1K2UqZixpPXIqaCtlKnAsYT1yKnMrZSpjO3JldHVybltNYXRoLmF0YW4yKGksbikqTHQsTWF0aC5hdGFuMihhLE1hdGguc3FydChuKm4raSppKSkqTHRdfTpmdW5jdGlvbigpe3JldHVybltyKkx0LG4qTHRdfSkuZGlzdGFuY2U9ZCx2O3ZhciByLG4saSxhLG8scyxsLGMsdSxoLGYscCxkLGcsdn0sdC5nZW8ubGVuZ3RoPWZ1bmN0aW9uKGUpe3JldHVybiB5bj0wLHQuZ2VvLnN0cmVhbShlLHFuKSx5bn07dmFyIHFuPXtzcGhlcmU6UCxwb2ludDpQLGxpbmVTdGFydDpmdW5jdGlvbigpe3ZhciB0LGUscjtmdW5jdGlvbiBuKG4saSl7dmFyIGE9TWF0aC5zaW4oaSo9Q3QpLG89TWF0aC5jb3MoaSkscz15KChuKj1DdCktdCksbD1NYXRoLmNvcyhzKTt5bis9TWF0aC5hdGFuMihNYXRoLnNxcnQoKHM9bypNYXRoLnNpbihzKSkqcysocz1yKmEtZSpvKmwpKnMpLGUqYStyKm8qbCksdD1uLGU9YSxyPW99cW4ucG9pbnQ9ZnVuY3Rpb24oaSxhKXt0PWkqQ3QsZT1NYXRoLnNpbihhKj1DdCkscj1NYXRoLmNvcyhhKSxxbi5wb2ludD1ufSxxbi5saW5lRW5kPWZ1bmN0aW9uKCl7cW4ucG9pbnQ9cW4ubGluZUVuZD1QfX0sbGluZUVuZDpQLHBvbHlnb25TdGFydDpQLHBvbHlnb25FbmQ6UH07ZnVuY3Rpb24gSG4odCxlKXtmdW5jdGlvbiByKGUscil7dmFyIG49TWF0aC5jb3MoZSksaT1NYXRoLmNvcyhyKSxhPXQobippKTtyZXR1cm5bYSppKk1hdGguc2luKGUpLGEqTWF0aC5zaW4ocildfXJldHVybiByLmludmVydD1mdW5jdGlvbih0LHIpe3ZhciBuPU1hdGguc3FydCh0KnQrcipyKSxpPWUobiksYT1NYXRoLnNpbihpKSxvPU1hdGguY29zKGkpO3JldHVybltNYXRoLmF0YW4yKHQqYSxuKm8pLE1hdGguYXNpbihuJiZyKmEvbildfSxyfXZhciBHbj1IbihmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KDIvKDErdCkpfSxmdW5jdGlvbih0KXtyZXR1cm4gMipNYXRoLmFzaW4odC8yKX0pOyh0Lmdlby5hemltdXRoYWxFcXVhbEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gRW4oR24pfSkucmF3PUduO3ZhciBZbj1IbihmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmFjb3ModCk7cmV0dXJuIGUmJmUvTWF0aC5zaW4oZSl9LHopO2Z1bmN0aW9uIFduKHQsZSl7dmFyIHI9TWF0aC5jb3ModCksbj1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC50YW4oVHQvNCt0LzIpfSxpPXQ9PT1lP01hdGguc2luKHQpOk1hdGgubG9nKHIvTWF0aC5jb3MoZSkpL01hdGgubG9nKG4oZSkvbih0KSksYT1yKk1hdGgucG93KG4odCksaSkvaTtpZighaSlyZXR1cm4gJG47ZnVuY3Rpb24gbyh0LGUpe2E+MD9lPC1FdCtrdCYmKGU9LUV0K2t0KTplPkV0LWt0JiYoZT1FdC1rdCk7dmFyIHI9YS9NYXRoLnBvdyhuKGUpLGkpO3JldHVybltyKk1hdGguc2luKGkqdCksYS1yKk1hdGguY29zKGkqdCldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWEtZSxuPXp0KGkpKk1hdGguc3FydCh0KnQrcipyKTtyZXR1cm5bTWF0aC5hdGFuMih0LHIpL2ksMipNYXRoLmF0YW4oTWF0aC5wb3coYS9uLDEvaSkpLUV0XX0sb31mdW5jdGlvbiBYbih0LGUpe3ZhciByPU1hdGguY29zKHQpLG49dD09PWU/TWF0aC5zaW4odCk6KHItTWF0aC5jb3MoZSkpLyhlLXQpLGk9ci9uK3Q7aWYoeShuKTxrdClyZXR1cm4gem47ZnVuY3Rpb24gYSh0LGUpe3ZhciByPWktZTtyZXR1cm5bcipNYXRoLnNpbihuKnQpLGktcipNYXRoLmNvcyhuKnQpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1pLWU7cmV0dXJuW01hdGguYXRhbjIodCxyKS9uLGktenQobikqTWF0aC5zcXJ0KHQqdCtyKnIpXX0sYX0odC5nZW8uYXppbXV0aGFsRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gRW4oWW4pfSkucmF3PVluLCh0Lmdlby5jb25pY0NvbmZvcm1hbD1mdW5jdGlvbigpe3JldHVybiBhbihXbil9KS5yYXc9V24sKHQuZ2VvLmNvbmljRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gYW4oWG4pfSkucmF3PVhuO3ZhciBabj1IbihmdW5jdGlvbih0KXtyZXR1cm4gMS90fSxNYXRoLmF0YW4pO2Z1bmN0aW9uICRuKHQsZSl7cmV0dXJuW3QsTWF0aC5sb2coTWF0aC50YW4oVHQvNCtlLzIpKV19ZnVuY3Rpb24gSm4odCl7dmFyIGUscj1Fbih0KSxuPXIuc2NhbGUsaT1yLnRyYW5zbGF0ZSxhPXIuY2xpcEV4dGVudDtyZXR1cm4gci5zY2FsZT1mdW5jdGlvbigpe3ZhciB0PW4uYXBwbHkocixhcmd1bWVudHMpO3JldHVybiB0PT09cj9lP3IuY2xpcEV4dGVudChudWxsKTpyOnR9LHIudHJhbnNsYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9aS5hcHBseShyLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1yP2U/ci5jbGlwRXh0ZW50KG51bGwpOnI6dH0sci5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBvPWEuYXBwbHkocixhcmd1bWVudHMpO2lmKG89PT1yKXtpZihlPW51bGw9PXQpe3ZhciBzPVR0Km4oKSxsPWkoKTthKFtbbFswXS1zLGxbMV0tc10sW2xbMF0rcyxsWzFdK3NdXSl9fWVsc2UgZSYmKG89bnVsbCk7cmV0dXJuIG99LHIuY2xpcEV4dGVudChudWxsKX0odC5nZW8uZ25vbW9uaWM9ZnVuY3Rpb24oKXtyZXR1cm4gRW4oWm4pfSkucmF3PVpuLCRuLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0LDIqTWF0aC5hdGFuKE1hdGguZXhwKGUpKS1FdF19LCh0Lmdlby5tZXJjYXRvcj1mdW5jdGlvbigpe3JldHVybiBKbigkbil9KS5yYXc9JG47dmFyIEtuPUhuKGZ1bmN0aW9uKCl7cmV0dXJuIDF9LE1hdGguYXNpbik7KHQuZ2VvLm9ydGhvZ3JhcGhpYz1mdW5jdGlvbigpe3JldHVybiBFbihLbil9KS5yYXc9S247dmFyIFFuPUhuKGZ1bmN0aW9uKHQpe3JldHVybiAxLygxK3QpfSxmdW5jdGlvbih0KXtyZXR1cm4gMipNYXRoLmF0YW4odCl9KTtmdW5jdGlvbiB0aSh0LGUpe3JldHVybltNYXRoLmxvZyhNYXRoLnRhbihUdC80K2UvMikpLC10XX1mdW5jdGlvbiBlaSh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiByaSh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBuaSh0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1bMCwxXSxuPTIsaT0yO2k8ZTtpKyspe2Zvcig7bj4xJiZPdCh0W3Jbbi0yXV0sdFtyW24tMV1dLHRbaV0pPD0wOyktLW47cltuKytdPWl9cmV0dXJuIHIuc2xpY2UoMCxuKX1mdW5jdGlvbiBpaSh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXX0odC5nZW8uc3RlcmVvZ3JhcGhpYz1mdW5jdGlvbigpe3JldHVybiBFbihRbil9KS5yYXc9UW4sdGkuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuWy1lLDIqTWF0aC5hdGFuKE1hdGguZXhwKHQpKS1FdF19LCh0Lmdlby50cmFuc3ZlcnNlTWVyY2F0b3I9ZnVuY3Rpb24oKXt2YXIgdD1Kbih0aSksZT10LmNlbnRlcixyPXQucm90YXRlO3JldHVybiB0LmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD9lKFstdFsxXSx0WzBdXSk6Wyh0PWUoKSlbMV0sLXRbMF1dfSx0LnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdD9yKFt0WzBdLHRbMV0sdC5sZW5ndGg+Mj90WzJdKzkwOjkwXSk6Wyh0PXIoKSlbMF0sdFsxXSx0WzJdLTkwXX0scihbMCwwLDkwXSl9KS5yYXc9dGksdC5nZW9tPXt9LHQuZ2VvbS5odWxsPWZ1bmN0aW9uKHQpe3ZhciBlPWVpLHI9cmk7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbih0KTtmdW5jdGlvbiBuKHQpe2lmKHQubGVuZ3RoPDMpcmV0dXJuW107dmFyIG4saT12ZShlKSxhPXZlKHIpLG89dC5sZW5ndGgscz1bXSxsPVtdO2ZvcihuPTA7bjxvO24rKylzLnB1c2goWytpLmNhbGwodGhpcyx0W25dLG4pLCthLmNhbGwodGhpcyx0W25dLG4pLG5dKTtmb3Iocy5zb3J0KGlpKSxuPTA7bjxvO24rKylsLnB1c2goW3Nbbl1bMF0sLXNbbl1bMV1dKTt2YXIgYz1uaShzKSx1PW5pKGwpLGg9dVswXT09PWNbMF0sZj11W3UubGVuZ3RoLTFdPT09Y1tjLmxlbmd0aC0xXSxwPVtdO2ZvcihuPWMubGVuZ3RoLTE7bj49MDstLW4pcC5wdXNoKHRbc1tjW25dXVsyXV0pO2ZvcihuPStoO248dS5sZW5ndGgtZjsrK24pcC5wdXNoKHRbc1t1W25dXVsyXV0pO3JldHVybiBwfXJldHVybiBuLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxufSx0Lmdlb20ucG9seWdvbj1mdW5jdGlvbih0KXtyZXR1cm4gVSh0LGFpKSx0fTt2YXIgYWk9dC5nZW9tLnBvbHlnb24ucHJvdG90eXBlPVtdO2Z1bmN0aW9uIG9pKHQsZSxyKXtyZXR1cm4oclswXS1lWzBdKSoodFsxXS1lWzFdKTwoclsxXS1lWzFdKSoodFswXS1lWzBdKX1mdW5jdGlvbiBzaSh0LGUscixuKXt2YXIgaT10WzBdLGE9clswXSxvPWVbMF0taSxzPW5bMF0tYSxsPXRbMV0sYz1yWzFdLHU9ZVsxXS1sLGg9blsxXS1jLGY9KHMqKGwtYyktaCooaS1hKSkvKGgqby1zKnUpO3JldHVybltpK2YqbyxsK2YqdV19ZnVuY3Rpb24gbGkodCl7dmFyIGU9dFswXSxyPXRbdC5sZW5ndGgtMV07cmV0dXJuIShlWzBdLXJbMF18fGVbMV0tclsxXSl9YWkuYXJlYT1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPS0xLHI9dGhpcy5sZW5ndGgsbj10aGlzW3ItMV0saT0wOysrZTxyOyl0PW4sbj10aGlzW2VdLGkrPXRbMV0qblswXS10WzBdKm5bMV07cmV0dXJuLjUqaX0sYWkuY2VudHJvaWQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPS0xLGk9dGhpcy5sZW5ndGgsYT0wLG89MCxzPXRoaXNbaS0xXTtmb3IoYXJndW1lbnRzLmxlbmd0aHx8KHQ9LTEvKDYqdGhpcy5hcmVhKCkpKTsrK248aTspZT1zLHM9dGhpc1tuXSxyPWVbMF0qc1sxXS1zWzBdKmVbMV0sYSs9KGVbMF0rc1swXSkqcixvKz0oZVsxXStzWzFdKSpyO3JldHVyblthKnQsbyp0XX0sYWkuY2xpcD1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksYSxvLHM9bGkodCksbD0tMSxjPXRoaXMubGVuZ3RoLWxpKHRoaXMpLHU9dGhpc1tjLTFdOysrbDxjOyl7Zm9yKGU9dC5zbGljZSgpLHQubGVuZ3RoPTAsaT10aGlzW2xdLGE9ZVsobj1lLmxlbmd0aC1zKS0xXSxyPS0xOysrcjxuOylvaShvPWVbcl0sdSxpKT8ob2koYSx1LGkpfHx0LnB1c2goc2koYSxvLHUsaSkpLHQucHVzaChvKSk6b2koYSx1LGkpJiZ0LnB1c2goc2koYSxvLHUsaSkpLGE9bztzJiZ0LnB1c2godFswXSksdT1pfXJldHVybiB0fTt2YXIgY2ksdWksaGksZmkscGksZGk9W10sZ2k9W107ZnVuY3Rpb24gdmkoKXtEaSh0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gbWkodCl7dmFyIGU9ZGkucG9wKCl8fG5ldyB2aTtyZXR1cm4gZS5zaXRlPXQsZX1mdW5jdGlvbiB5aSh0KXtTaSh0KSxoaS5yZW1vdmUodCksZGkucHVzaCh0KSxEaSh0KX1mdW5jdGlvbiB4aSh0KXt2YXIgZT10LmNpcmNsZSxyPWUueCxuPWUuY3ksaT17eDpyLHk6bn0sYT10LlAsbz10Lk4scz1bdF07eWkodCk7Zm9yKHZhciBsPWE7bC5jaXJjbGUmJnkoci1sLmNpcmNsZS54KTxrdCYmeShuLWwuY2lyY2xlLmN5KTxrdDspYT1sLlAscy51bnNoaWZ0KGwpLHlpKGwpLGw9YTtzLnVuc2hpZnQobCksU2kobCk7Zm9yKHZhciBjPW87Yy5jaXJjbGUmJnkoci1jLmNpcmNsZS54KTxrdCYmeShuLWMuY2lyY2xlLmN5KTxrdDspbz1jLk4scy5wdXNoKGMpLHlpKGMpLGM9bztzLnB1c2goYyksU2koYyk7dmFyIHUsaD1zLmxlbmd0aDtmb3IodT0xO3U8aDsrK3UpYz1zW3VdLGw9c1t1LTFdLHppKGMuZWRnZSxsLnNpdGUsYy5zaXRlLGkpO2w9c1swXSwoYz1zW2gtMV0pLmVkZ2U9TGkobC5zaXRlLGMuc2l0ZSxudWxsLGkpLE1pKGwpLE1pKGMpfWZ1bmN0aW9uIGJpKHQpe2Zvcih2YXIgZSxyLG4saSxhPXQueCxvPXQueSxzPWhpLl87czspaWYoKG49X2kocyxvKS1hKT5rdClzPXMuTDtlbHNle2lmKCEoKGk9YS13aShzLG8pKT5rdCkpe24+LWt0PyhlPXMuUCxyPXMpOmk+LWt0PyhlPXMscj1zLk4pOmU9cj1zO2JyZWFrfWlmKCFzLlIpe2U9czticmVha31zPXMuUn12YXIgbD1taSh0KTtpZihoaS5pbnNlcnQoZSxsKSxlfHxyKXtpZihlPT09cilyZXR1cm4gU2koZSkscj1taShlLnNpdGUpLGhpLmluc2VydChsLHIpLGwuZWRnZT1yLmVkZ2U9TGkoZS5zaXRlLGwuc2l0ZSksTWkoZSksdm9pZCBNaShyKTtpZihyKXtTaShlKSxTaShyKTt2YXIgYz1lLnNpdGUsdT1jLngsaD1jLnksZj10LngtdSxwPXQueS1oLGQ9ci5zaXRlLGc9ZC54LXUsdj1kLnktaCxtPTIqKGYqdi1wKmcpLHk9ZipmK3AqcCx4PWcqZyt2KnYsYj17eDoodip5LXAqeCkvbSt1LHk6KGYqeC1nKnkpL20raH07emkoci5lZGdlLGMsZCxiKSxsLmVkZ2U9TGkoYyx0LG51bGwsYiksci5lZGdlPUxpKHQsZCxudWxsLGIpLE1pKGUpLE1pKHIpfWVsc2UgbC5lZGdlPUxpKGUuc2l0ZSxsLnNpdGUpfX1mdW5jdGlvbiBfaSh0LGUpe3ZhciByPXQuc2l0ZSxuPXIueCxpPXIueSxhPWktZTtpZighYSlyZXR1cm4gbjt2YXIgbz10LlA7aWYoIW8pcmV0dXJuLTEvMDt2YXIgcz0ocj1vLnNpdGUpLngsbD1yLnksYz1sLWU7aWYoIWMpcmV0dXJuIHM7dmFyIHU9cy1uLGg9MS9hLTEvYyxmPXUvYztyZXR1cm4gaD8oLWYrTWF0aC5zcXJ0KGYqZi0yKmgqKHUqdS8oLTIqYyktbCtjLzIraS1hLzIpKSkvaCtuOihuK3MpLzJ9ZnVuY3Rpb24gd2kodCxlKXt2YXIgcj10Lk47aWYocilyZXR1cm4gX2kocixlKTt2YXIgbj10LnNpdGU7cmV0dXJuIG4ueT09PWU/bi54OjEvMH1mdW5jdGlvbiBraSh0KXt0aGlzLnNpdGU9dCx0aGlzLmVkZ2VzPVtdfWZ1bmN0aW9uIEFpKHQsZSl7cmV0dXJuIGUuYW5nbGUtdC5hbmdsZX1mdW5jdGlvbiBUaSgpe0RpKHRoaXMpLHRoaXMueD10aGlzLnk9dGhpcy5hcmM9dGhpcy5zaXRlPXRoaXMuY3k9bnVsbH1mdW5jdGlvbiBNaSh0KXt2YXIgZT10LlAscj10Lk47aWYoZSYmcil7dmFyIG49ZS5zaXRlLGk9dC5zaXRlLGE9ci5zaXRlO2lmKG4hPT1hKXt2YXIgbz1pLngscz1pLnksbD1uLngtbyxjPW4ueS1zLHU9YS54LW8saD0yKihsKih2PWEueS1zKS1jKnUpO2lmKCEoaD49LUF0KSl7dmFyIGY9bCpsK2MqYyxwPXUqdSt2KnYsZD0odipmLWMqcCkvaCxnPShsKnAtdSpmKS9oLHY9ZytzLG09Z2kucG9wKCl8fG5ldyBUaTttLmFyYz10LG0uc2l0ZT1pLG0ueD1kK28sbS55PXYrTWF0aC5zcXJ0KGQqZCtnKmcpLG0uY3k9dix0LmNpcmNsZT1tO2Zvcih2YXIgeT1udWxsLHg9cGkuXzt4OylpZihtLnk8eC55fHxtLnk9PT14LnkmJm0ueDw9eC54KXtpZigheC5MKXt5PXguUDticmVha314PXguTH1lbHNle2lmKCF4LlIpe3k9eDticmVha314PXguUn1waS5pbnNlcnQoeSxtKSx5fHwoZmk9bSl9fX19ZnVuY3Rpb24gU2kodCl7dmFyIGU9dC5jaXJjbGU7ZSYmKGUuUHx8KGZpPWUuTikscGkucmVtb3ZlKGUpLGdpLnB1c2goZSksRGkoZSksdC5jaXJjbGU9bnVsbCl9ZnVuY3Rpb24gRWkodCxlKXt2YXIgcj10LmI7aWYocilyZXR1cm4hMDt2YXIgbixpLGE9dC5hLG89ZVswXVswXSxzPWVbMV1bMF0sbD1lWzBdWzFdLGM9ZVsxXVsxXSx1PXQubCxoPXQucixmPXUueCxwPXUueSxkPWgueCxnPWgueSx2PShmK2QpLzIsbT0ocCtnKS8yO2lmKGc9PT1wKXtpZih2PG98fHY+PXMpcmV0dXJuO2lmKGY+ZCl7aWYoYSl7aWYoYS55Pj1jKXJldHVybn1lbHNlIGE9e3g6dix5Omx9O3I9e3g6dix5OmN9fWVsc2V7aWYoYSl7aWYoYS55PGwpcmV0dXJufWVsc2UgYT17eDp2LHk6Y307cj17eDp2LHk6bH19fWVsc2UgaWYoaT1tLShuPShmLWQpLyhnLXApKSp2LG48LTF8fG4+MSlpZihmPmQpe2lmKGEpe2lmKGEueT49YylyZXR1cm59ZWxzZSBhPXt4OihsLWkpL24seTpsfTtyPXt4OihjLWkpL24seTpjfX1lbHNle2lmKGEpe2lmKGEueTxsKXJldHVybn1lbHNlIGE9e3g6KGMtaSkvbix5OmN9O3I9e3g6KGwtaSkvbix5Omx9fWVsc2UgaWYocDxnKXtpZihhKXtpZihhLng+PXMpcmV0dXJufWVsc2UgYT17eDpvLHk6bipvK2l9O3I9e3g6cyx5Om4qcytpfX1lbHNle2lmKGEpe2lmKGEueDxvKXJldHVybn1lbHNlIGE9e3g6cyx5Om4qcytpfTtyPXt4Om8seTpuKm8raX19cmV0dXJuIHQuYT1hLHQuYj1yLCEwfWZ1bmN0aW9uIENpKHQsZSl7dGhpcy5sPXQsdGhpcy5yPWUsdGhpcy5hPXRoaXMuYj1udWxsfWZ1bmN0aW9uIExpKHQsZSxyLG4pe3ZhciBpPW5ldyBDaSh0LGUpO3JldHVybiBjaS5wdXNoKGkpLHImJnppKGksdCxlLHIpLG4mJnppKGksZSx0LG4pLHVpW3QuaV0uZWRnZXMucHVzaChuZXcgT2koaSx0LGUpKSx1aVtlLmldLmVkZ2VzLnB1c2gobmV3IE9pKGksZSx0KSksaX1mdW5jdGlvbiB6aSh0LGUscixuKXt0LmF8fHQuYj90Lmw9PT1yP3QuYj1uOnQuYT1uOih0LmE9bix0Lmw9ZSx0LnI9cil9ZnVuY3Rpb24gT2kodCxlLHIpe3ZhciBuPXQuYSxpPXQuYjt0aGlzLmVkZ2U9dCx0aGlzLnNpdGU9ZSx0aGlzLmFuZ2xlPXI/TWF0aC5hdGFuMihyLnktZS55LHIueC1lLngpOnQubD09PWU/TWF0aC5hdGFuMihpLngtbi54LG4ueS1pLnkpOk1hdGguYXRhbjIobi54LWkueCxpLnktbi55KX1mdW5jdGlvbiBJaSgpe3RoaXMuXz1udWxsfWZ1bmN0aW9uIERpKHQpe3QuVT10LkM9dC5MPXQuUj10LlA9dC5OPW51bGx9ZnVuY3Rpb24gUGkodCxlKXt2YXIgcj1lLG49ZS5SLGk9ci5VO2k/aS5MPT09cj9pLkw9bjppLlI9bjp0Ll89bixuLlU9aSxyLlU9bixyLlI9bi5MLHIuUiYmKHIuUi5VPXIpLG4uTD1yfWZ1bmN0aW9uIFJpKHQsZSl7dmFyIHI9ZSxuPWUuTCxpPXIuVTtpP2kuTD09PXI/aS5MPW46aS5SPW46dC5fPW4sbi5VPWksci5VPW4sci5MPW4uUixyLkwmJihyLkwuVT1yKSxuLlI9cn1mdW5jdGlvbiBGaSh0KXtmb3IoO3QuTDspdD10Lkw7cmV0dXJuIHR9ZnVuY3Rpb24gQmkodCxlKXt2YXIgcixuLGksYT10LnNvcnQoTmkpLnBvcCgpO2ZvcihjaT1bXSx1aT1uZXcgQXJyYXkodC5sZW5ndGgpLGhpPW5ldyBJaSxwaT1uZXcgSWk7OylpZihpPWZpLGEmJighaXx8YS55PGkueXx8YS55PT09aS55JiZhLng8aS54KSlhLng9PT1yJiZhLnk9PT1ufHwodWlbYS5pXT1uZXcga2koYSksYmkoYSkscj1hLngsbj1hLnkpLGE9dC5wb3AoKTtlbHNle2lmKCFpKWJyZWFrO3hpKGkuYXJjKX1lJiYoZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9Y2ksbj1lbih0WzBdWzBdLHRbMF1bMV0sdFsxXVswXSx0WzFdWzFdKSxpPXIubGVuZ3RoO2ktLTspKCFFaShlPXJbaV0sdCl8fCFuKGUpfHx5KGUuYS54LWUuYi54KTxrdCYmeShlLmEueS1lLmIueSk8a3QpJiYoZS5hPWUuYj1udWxsLHIuc3BsaWNlKGksMSkpfShlKSxmdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksYSxvLHMsbCxjLHUsaD10WzBdWzBdLGY9dFsxXVswXSxwPXRbMF1bMV0sZD10WzFdWzFdLGc9dWksdj1nLmxlbmd0aDt2LS07KWlmKChhPWdbdl0pJiZhLnByZXBhcmUoKSlmb3IobD0ocz1hLmVkZ2VzKS5sZW5ndGgsbz0wO288bDspbj0odT1zW29dLmVuZCgpKS54LGk9dS55LGU9KGM9c1srK28lbF0uc3RhcnQoKSkueCxyPWMueSwoeShuLWUpPmt0fHx5KGktcik+a3QpJiYocy5zcGxpY2UobywwLG5ldyBPaSgobT1hLnNpdGUseD11LGI9eShuLWgpPGt0JiZkLWk+a3Q/e3g6aCx5OnkoZS1oKTxrdD9yOmR9OnkoaS1kKTxrdCYmZi1uPmt0P3t4Onkoci1kKTxrdD9lOmYseTpkfTp5KG4tZik8a3QmJmktcD5rdD97eDpmLHk6eShlLWYpPGt0P3I6cH06eShpLXApPGt0JiZuLWg+a3Q/e3g6eShyLXApPGt0P2U6aCx5OnB9Om51bGwsXz12b2lkIDAsXz1uZXcgQ2kobSxudWxsKSxfLmE9eCxfLmI9YixjaS5wdXNoKF8pLF8pLGEuc2l0ZSxudWxsKSksKytsKTt2YXIgbSx4LGIsX30oZSkpO3ZhciBvPXtjZWxsczp1aSxlZGdlczpjaX07cmV0dXJuIGhpPXBpPWNpPXVpPW51bGwsb31mdW5jdGlvbiBOaSh0LGUpe3JldHVybiBlLnktdC55fHxlLngtdC54fWtpLnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9dGhpcy5lZGdlcyxyPWUubGVuZ3RoO3ItLTspKHQ9ZVtyXS5lZGdlKS5iJiZ0LmF8fGUuc3BsaWNlKHIsMSk7cmV0dXJuIGUuc29ydChBaSksZS5sZW5ndGh9LE9pLnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlLmw9PT10aGlzLnNpdGU/dGhpcy5lZGdlLmE6dGhpcy5lZGdlLmJ9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2UubD09PXRoaXMuc2l0ZT90aGlzLmVkZ2UuYjp0aGlzLmVkZ2UuYX19LElpLnByb3RvdHlwZT17aW5zZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpO2lmKHQpe2lmKGUuUD10LGUuTj10Lk4sdC5OJiYodC5OLlA9ZSksdC5OPWUsdC5SKXtmb3IodD10LlI7dC5MOyl0PXQuTDt0Lkw9ZX1lbHNlIHQuUj1lO3I9dH1lbHNlIHRoaXMuXz8odD1GaSh0aGlzLl8pLGUuUD1udWxsLGUuTj10LHQuUD10Lkw9ZSxyPXQpOihlLlA9ZS5OPW51bGwsdGhpcy5fPWUscj1udWxsKTtmb3IoZS5MPWUuUj1udWxsLGUuVT1yLGUuQz0hMCx0PWU7ciYmci5DOylyPT09KG49ci5VKS5MPyhpPW4uUikmJmkuQz8oci5DPWkuQz0hMSxuLkM9ITAsdD1uKToodD09PXIuUiYmKFBpKHRoaXMscikscj0odD1yKS5VKSxyLkM9ITEsbi5DPSEwLFJpKHRoaXMsbikpOihpPW4uTCkmJmkuQz8oci5DPWkuQz0hMSxuLkM9ITAsdD1uKToodD09PXIuTCYmKFJpKHRoaXMscikscj0odD1yKS5VKSxyLkM9ITEsbi5DPSEwLFBpKHRoaXMsbikpLHI9dC5VO3RoaXMuXy5DPSExfSxyZW1vdmU6ZnVuY3Rpb24odCl7dC5OJiYodC5OLlA9dC5QKSx0LlAmJih0LlAuTj10Lk4pLHQuTj10LlA9bnVsbDt2YXIgZSxyLG4saT10LlUsYT10Lkwsbz10LlI7aWYocj1hP28/Rmkobyk6YTpvLGk/aS5MPT09dD9pLkw9cjppLlI9cjp0aGlzLl89cixhJiZvPyhuPXIuQyxyLkM9dC5DLHIuTD1hLGEuVT1yLHIhPT1vPyhpPXIuVSxyLlU9dC5VLHQ9ci5SLGkuTD10LHIuUj1vLG8uVT1yKTooci5VPWksaT1yLHQ9ci5SKSk6KG49dC5DLHQ9ciksdCYmKHQuVT1pKSwhbilpZih0JiZ0LkMpdC5DPSExO2Vsc2V7ZG97aWYodD09PXRoaXMuXylicmVhaztpZih0PT09aS5MKXtpZigoZT1pLlIpLkMmJihlLkM9ITEsaS5DPSEwLFBpKHRoaXMsaSksZT1pLlIpLGUuTCYmZS5MLkN8fGUuUiYmZS5SLkMpe2UuUiYmZS5SLkN8fChlLkwuQz0hMSxlLkM9ITAsUmkodGhpcyxlKSxlPWkuUiksZS5DPWkuQyxpLkM9ZS5SLkM9ITEsUGkodGhpcyxpKSx0PXRoaXMuXzticmVha319ZWxzZSBpZigoZT1pLkwpLkMmJihlLkM9ITEsaS5DPSEwLFJpKHRoaXMsaSksZT1pLkwpLGUuTCYmZS5MLkN8fGUuUiYmZS5SLkMpe2UuTCYmZS5MLkN8fChlLlIuQz0hMSxlLkM9ITAsUGkodGhpcyxlKSxlPWkuTCksZS5DPWkuQyxpLkM9ZS5MLkM9ITEsUmkodGhpcyxpKSx0PXRoaXMuXzticmVha31lLkM9ITAsdD1pLGk9aS5VfXdoaWxlKCF0LkMpO3QmJih0LkM9ITEpfX19LHQuZ2VvbS52b3Jvbm9pPWZ1bmN0aW9uKHQpe3ZhciBlPWVpLHI9cmksbj1lLGk9cixhPWppO2lmKHQpcmV0dXJuIG8odCk7ZnVuY3Rpb24gbyh0KXt2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9YVswXVswXSxuPWFbMF1bMV0saT1hWzFdWzBdLG89YVsxXVsxXTtyZXR1cm4gQmkocyh0KSxhKS5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGEscyl7dmFyIGw9YS5lZGdlcyxjPWEuc2l0ZTsoZVtzXT1sLmxlbmd0aD9sLm1hcChmdW5jdGlvbih0KXt2YXIgZT10LnN0YXJ0KCk7cmV0dXJuW2UueCxlLnldfSk6Yy54Pj1yJiZjLng8PWkmJmMueT49biYmYy55PD1vP1tbcixvXSxbaSxvXSxbaSxuXSxbcixuXV06W10pLnBvaW50PXRbc119KSxlfWZ1bmN0aW9uIHModCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJue3g6TWF0aC5yb3VuZChuKHQsZSkva3QpKmt0LHk6TWF0aC5yb3VuZChpKHQsZSkva3QpKmt0LGk6ZX19KX1yZXR1cm4gby5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gQmkocyh0KSkuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmwmJnQucn0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm57c291cmNlOnRbZS5sLmldLHRhcmdldDp0W2Uuci5pXX19KX0sby50cmlhbmdsZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIEJpKHModCkpLmNlbGxzLmZvckVhY2goZnVuY3Rpb24ocixuKXtmb3IodmFyIGksYSxvLHMsbD1yLnNpdGUsYz1yLmVkZ2VzLnNvcnQoQWkpLHU9LTEsaD1jLmxlbmd0aCxmPWNbaC0xXS5lZGdlLHA9Zi5sPT09bD9mLnI6Zi5sOysrdTxoOylmLGk9cCxwPShmPWNbdV0uZWRnZSkubD09PWw/Zi5yOmYubCxuPGkuaSYmbjxwLmkmJihvPWkscz1wLCgoYT1sKS54LXMueCkqKG8ueS1hLnkpLShhLngtby54KSoocy55LWEueSk8MCkmJmUucHVzaChbdFtuXSx0W2kuaV0sdFtwLmldXSl9KSxlfSxvLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dmUoZT10KSxvKTplfSxvLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dmUocj10KSxvKTpyfSxvLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bnVsbD09dD9qaTp0LG8pOmE9PT1qaT9udWxsOmF9LG8uc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9vLmNsaXBFeHRlbnQodCYmW1swLDBdLHRdKTphPT09amk/bnVsbDphJiZhWzFdfSxvfTt2YXIgamk9W1stMWU2LC0xZTZdLFsxZTYsMWU2XV07ZnVuY3Rpb24gVmkodCl7cmV0dXJuIHQueH1mdW5jdGlvbiBVaSh0KXtyZXR1cm4gdC55fWZ1bmN0aW9uIHFpKGUscil7ZT10LnJnYihlKSxyPXQucmdiKHIpO3ZhciBuPWUucixpPWUuZyxhPWUuYixvPXIuci1uLHM9ci5nLWksbD1yLmItYTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuXCIjXCIrY2UoTWF0aC5yb3VuZChuK28qdCkpK2NlKE1hdGgucm91bmQoaStzKnQpKStjZShNYXRoLnJvdW5kKGErbCp0KSl9fWZ1bmN0aW9uIEhpKHQsZSl7dmFyIHIsbj17fSxpPXt9O2ZvcihyIGluIHQpciBpbiBlP25bcl09WmkodFtyXSxlW3JdKTppW3JdPXRbcl07Zm9yKHIgaW4gZSlyIGluIHR8fChpW3JdPWVbcl0pO3JldHVybiBmdW5jdGlvbih0KXtmb3IociBpbiBuKWlbcl09bltyXSh0KTtyZXR1cm4gaX19ZnVuY3Rpb24gR2kodCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKHIpe3JldHVybiB0KigxLXIpK2Uqcn19ZnVuY3Rpb24gWWkodCxlKXt2YXIgcixuLGksYT1XaS5sYXN0SW5kZXg9WGkubGFzdEluZGV4PTAsbz0tMSxzPVtdLGw9W107Zm9yKHQrPVwiXCIsZSs9XCJcIjsocj1XaS5leGVjKHQpKSYmKG49WGkuZXhlYyhlKSk7KShpPW4uaW5kZXgpPmEmJihpPWUuc2xpY2UoYSxpKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLChyPXJbMF0pPT09KG49blswXSk/c1tvXT9zW29dKz1uOnNbKytvXT1uOihzWysrb109bnVsbCxsLnB1c2goe2k6byx4OkdpKHIsbil9KSksYT1YaS5sYXN0SW5kZXg7cmV0dXJuIGE8ZS5sZW5ndGgmJihpPWUuc2xpY2UoYSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSxzLmxlbmd0aDwyP2xbMF0/KGU9bFswXS54LGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpK1wiXCJ9KTpmdW5jdGlvbigpe3JldHVybiBlfTooZT1sLmxlbmd0aCxmdW5jdGlvbih0KXtmb3IodmFyIHIsbj0wO248ZTsrK24pc1socj1sW25dKS5pXT1yLngodCk7cmV0dXJuIHMuam9pbihcIlwiKX0pfXQuZ2VvbS5kZWxhdW5heT1mdW5jdGlvbihlKXtyZXR1cm4gdC5nZW9tLnZvcm9ub2koKS50cmlhbmdsZXMoZSl9LHQuZ2VvbS5xdWFkdHJlZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLG89ZWkscz1yaTtpZihhPWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG89Vmkscz1VaSwzPT09YSYmKGk9cixuPWUscj1lPTApLGwodCk7ZnVuY3Rpb24gbCh0KXt2YXIgbCxjLHUsaCxmLHAsZCxnLHYsbT12ZShvKSx4PXZlKHMpO2lmKG51bGwhPWUpcD1lLGQ9cixnPW4sdj1pO2Vsc2UgaWYoZz12PS0ocD1kPTEvMCksYz1bXSx1PVtdLGY9dC5sZW5ndGgsYSlmb3IoaD0wO2g8ZjsrK2gpKGw9dFtoXSkueDxwJiYocD1sLngpLGwueTxkJiYoZD1sLnkpLGwueD5nJiYoZz1sLngpLGwueT52JiYodj1sLnkpLGMucHVzaChsLngpLHUucHVzaChsLnkpO2Vsc2UgZm9yKGg9MDtoPGY7KytoKXt2YXIgYj0rbShsPXRbaF0saCksXz0reChsLGgpO2I8cCYmKHA9YiksXzxkJiYoZD1fKSxiPmcmJihnPWIpLF8+diYmKHY9XyksYy5wdXNoKGIpLHUucHVzaChfKX12YXIgdz1nLXAsaz12LWQ7ZnVuY3Rpb24gQSh0LGUscixuLGksYSxvLHMpe2lmKCFpc05hTihyKSYmIWlzTmFOKG4pKWlmKHQubGVhZil7dmFyIGw9dC54LGM9dC55O2lmKG51bGwhPWwpaWYoeShsLXIpK3koYy1uKTwuMDEpVCh0LGUscixuLGksYSxvLHMpO2Vsc2V7dmFyIHU9dC5wb2ludDt0Lng9dC55PXQucG9pbnQ9bnVsbCxUKHQsdSxsLGMsaSxhLG8scyksVCh0LGUscixuLGksYSxvLHMpfWVsc2UgdC54PXIsdC55PW4sdC5wb2ludD1lfWVsc2UgVCh0LGUscixuLGksYSxvLHMpfWZ1bmN0aW9uIFQodCxlLHIsbixpLGEsbyxzKXt2YXIgbD0uNSooaStvKSxjPS41KihhK3MpLHU9cj49bCxoPW4+PWMsZj1oPDwxfHU7dC5sZWFmPSExLHU/aT1sOm89bCxoP2E9YzpzPWMsQSh0PXQubm9kZXNbZl18fCh0Lm5vZGVzW2ZdPXtsZWFmOiEwLG5vZGVzOltdLHBvaW50Om51bGwseDpudWxsLHk6bnVsbCxhZGQ6ZnVuY3Rpb24odCl7QShNLHQsK20odCwrK2gpLCt4KHQsaCkscCxkLGcsdil9fSksZSxyLG4saSxhLG8scyl9dz5rP3Y9ZCt3Omc9cCtrO3ZhciBNPXtsZWFmOiEwLG5vZGVzOltdLHBvaW50Om51bGwseDpudWxsLHk6bnVsbCxhZGQ6ZnVuY3Rpb24odCl7QShNLHQsK20odCwrK2gpLCt4KHQsaCkscCxkLGcsdil9fTtpZihNLnZpc2l0PWZ1bmN0aW9uKHQpeyFmdW5jdGlvbiB0KGUscixuLGksYSxvKXtpZighZShyLG4saSxhLG8pKXt2YXIgcz0uNSoobithKSxsPS41KihpK28pLGM9ci5ub2RlcztjWzBdJiZ0KGUsY1swXSxuLGkscyxsKSxjWzFdJiZ0KGUsY1sxXSxzLGksYSxsKSxjWzJdJiZ0KGUsY1syXSxuLGwscyxvKSxjWzNdJiZ0KGUsY1szXSxzLGwsYSxvKX19KHQsTSxwLGQsZyx2KX0sTS5maW5kPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcyxsPTEvMDtyZXR1cm4gZnVuY3Rpb24gdChjLHUsaCxmLHApe2lmKCEodT5hfHxoPm98fGY8bnx8cDxpKSl7aWYoZD1jLnBvaW50KXt2YXIgZCxnPWUtYy54LHY9ci1jLnksbT1nKmcrdip2O2lmKG08bCl7dmFyIHk9TWF0aC5zcXJ0KGw9bSk7bj1lLXksaT1yLXksYT1lK3ksbz1yK3kscz1kfX1mb3IodmFyIHg9Yy5ub2RlcyxiPS41Kih1K2YpLF89LjUqKGgrcCksdz0ocj49Xyk8PDF8ZT49YixrPXcrNDt3PGs7Kyt3KWlmKGM9eFszJnddKXN3aXRjaCgzJncpe2Nhc2UgMDp0KGMsdSxoLGIsXyk7YnJlYWs7Y2FzZSAxOnQoYyxiLGgsZixfKTticmVhaztjYXNlIDI6dChjLHUsXyxiLHApO2JyZWFrO2Nhc2UgMzp0KGMsYixfLGYscCl9fX0odCxuLGksYSxvKSxzfShNLHRbMF0sdFsxXSxwLGQsZyx2KX0saD0tMSxudWxsPT1lKXtmb3IoOysraDxmOylBKE0sdFtoXSxjW2hdLHVbaF0scCxkLGcsdik7LS1ofWVsc2UgdC5mb3JFYWNoKE0uYWRkKTtyZXR1cm4gYz11PXQ9bD1udWxsLE19cmV0dXJuIGwueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LGwpOm99LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGwpOnN9LGwuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2U9cj1uPWk9bnVsbDooZT0rdFswXVswXSxyPSt0WzBdWzFdLG49K3RbMV1bMF0saT0rdFsxXVsxXSksbCk6bnVsbD09ZT9udWxsOltbZSxyXSxbbixpXV19LGwuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9lPXI9bj1pPW51bGw6KGU9cj0wLG49K3RbMF0saT0rdFsxXSksbCk6bnVsbD09ZT9udWxsOltuLWUsaS1yXX0sbH0sdC5pbnRlcnBvbGF0ZVJnYj1xaSx0LmludGVycG9sYXRlT2JqZWN0PUhpLHQuaW50ZXJwb2xhdGVOdW1iZXI9R2ksdC5pbnRlcnBvbGF0ZVN0cmluZz1ZaTt2YXIgV2k9L1stK10/KD86XFxkK1xcLj9cXGQqfFxcLj9cXGQrKSg/OltlRV1bLStdP1xcZCspPy9nLFhpPW5ldyBSZWdFeHAoV2kuc291cmNlLFwiZ1wiKTtmdW5jdGlvbiBaaShlLHIpe2Zvcih2YXIgbixpPXQuaW50ZXJwb2xhdG9ycy5sZW5ndGg7LS1pPj0wJiYhKG49dC5pbnRlcnBvbGF0b3JzW2ldKGUscikpOyk7cmV0dXJuIG59ZnVuY3Rpb24gJGkodCxlKXt2YXIgcixuPVtdLGk9W10sYT10Lmxlbmd0aCxvPWUubGVuZ3RoLHM9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpO2ZvcihyPTA7cjxzOysrciluLnB1c2goWmkodFtyXSxlW3JdKSk7Zm9yKDtyPGE7KytyKWlbcl09dFtyXTtmb3IoO3I8bzsrK3IpaVtyXT1lW3JdO3JldHVybiBmdW5jdGlvbih0KXtmb3Iocj0wO3I8czsrK3IpaVtyXT1uW3JdKHQpO3JldHVybiBpfX10LmludGVycG9sYXRlPVppLHQuaW50ZXJwb2xhdG9ycz1bZnVuY3Rpb24odCxlKXt2YXIgcj10eXBlb2YgZTtyZXR1cm4oXCJzdHJpbmdcIj09PXI/Z2UuaGFzKGUudG9Mb3dlckNhc2UoKSl8fC9eKCN8cmdiXFwofGhzbFxcKCkvaS50ZXN0KGUpP3FpOllpOmUgaW5zdGFuY2VvZiBWdD9xaTpBcnJheS5pc0FycmF5KGUpPyRpOlwib2JqZWN0XCI9PT1yJiZpc05hTihlKT9IaTpHaSkodCxlKX1dLHQuaW50ZXJwb2xhdGVBcnJheT0kaTt2YXIgSmk9ZnVuY3Rpb24oKXtyZXR1cm4gen0sS2k9dC5tYXAoe2xpbmVhcjpKaSxwb2x5OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3coZSx0KX19LHF1YWQ6ZnVuY3Rpb24oKXtyZXR1cm4gcmF9LGN1YmljOmZ1bmN0aW9uKCl7cmV0dXJuIG5hfSxzaW46ZnVuY3Rpb24oKXtyZXR1cm4gYWF9LGV4cDpmdW5jdGlvbigpe3JldHVybiBvYX0sY2lyY2xlOmZ1bmN0aW9uKCl7cmV0dXJuIHNhfSxlbGFzdGljOmZ1bmN0aW9uKHQsZSl7dmFyIHI7YXJndW1lbnRzLmxlbmd0aDwyJiYoZT0uNDUpO2FyZ3VtZW50cy5sZW5ndGg/cj1lL010Kk1hdGguYXNpbigxL3QpOih0PTEscj1lLzQpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gMSt0Kk1hdGgucG93KDIsLTEwKm4pKk1hdGguc2luKChuLXIpKk10L2UpfX0sYmFjazpmdW5jdGlvbih0KXt0fHwodD0xLjcwMTU4KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUqZSooKHQrMSkqZS10KX19LGJvdW5jZTpmdW5jdGlvbigpe3JldHVybiBsYX19KSxRaT10Lm1hcCh7aW46eixvdXQ6dGEsXCJpbi1vdXRcIjplYSxcIm91dC1pblwiOmZ1bmN0aW9uKHQpe3JldHVybiBlYSh0YSh0KSl9fSk7ZnVuY3Rpb24gdGEodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiAxLXQoMS1lKX19ZnVuY3Rpb24gZWEodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi41KihlPC41P3QoMiplKToyLXQoMi0yKmUpKX19ZnVuY3Rpb24gcmEodCl7cmV0dXJuIHQqdH1mdW5jdGlvbiBuYSh0KXtyZXR1cm4gdCp0KnR9ZnVuY3Rpb24gaWEodCl7aWYodDw9MClyZXR1cm4gMDtpZih0Pj0xKXJldHVybiAxO3ZhciBlPXQqdCxyPWUqdDtyZXR1cm4gNCoodDwuNT9yOjMqKHQtZSkrci0uNzUpfWZ1bmN0aW9uIGFhKHQpe3JldHVybiAxLU1hdGguY29zKHQqRXQpfWZ1bmN0aW9uIG9hKHQpe3JldHVybiBNYXRoLnBvdygyLDEwKih0LTEpKX1mdW5jdGlvbiBzYSh0KXtyZXR1cm4gMS1NYXRoLnNxcnQoMS10KnQpfWZ1bmN0aW9uIGxhKHQpe3JldHVybiB0PDEvMi43NT83LjU2MjUqdCp0OnQ8Mi8yLjc1PzcuNTYyNSoodC09MS41LzIuNzUpKnQrLjc1OnQ8Mi41LzIuNzU/Ny41NjI1Kih0LT0yLjI1LzIuNzUpKnQrLjkzNzU6Ny41NjI1Kih0LT0yLjYyNS8yLjc1KSp0Ky45ODQzNzV9ZnVuY3Rpb24gY2EodCxlKXtyZXR1cm4gZS09dCxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZCh0K2Uqcil9fWZ1bmN0aW9uIHVhKHQpe3ZhciBlLHIsbixpPVt0LmEsdC5iXSxhPVt0LmMsdC5kXSxvPWZhKGkpLHM9aGEoaSxhKSxsPWZhKCgoZT1hKVswXSs9KG49LXMpKihyPWkpWzBdLGVbMV0rPW4qclsxXSxlKSl8fDA7aVswXSphWzFdPGFbMF0qaVsxXSYmKGlbMF0qPS0xLGlbMV0qPS0xLG8qPS0xLHMqPS0xKSx0aGlzLnJvdGF0ZT0obz9NYXRoLmF0YW4yKGlbMV0saVswXSk6TWF0aC5hdGFuMigtYVswXSxhWzFdKSkqTHQsdGhpcy50cmFuc2xhdGU9W3QuZSx0LmZdLHRoaXMuc2NhbGU9W28sbF0sdGhpcy5za2V3PWw/TWF0aC5hdGFuMihzLGwpKkx0OjB9ZnVuY3Rpb24gaGEodCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXX1mdW5jdGlvbiBmYSh0KXt2YXIgZT1NYXRoLnNxcnQoaGEodCx0KSk7cmV0dXJuIGUmJih0WzBdLz1lLHRbMV0vPWUpLGV9dC5lYXNlPWZ1bmN0aW9uKHQpe3ZhciBlLG49dC5pbmRleE9mKFwiLVwiKSxpPW4+PTA/dC5zbGljZSgwLG4pOnQsYT1uPj0wP3Quc2xpY2UobisxKTpcImluXCI7cmV0dXJuIGk9S2kuZ2V0KGkpfHxKaSxhPVFpLmdldChhKXx8eixlPWEoaS5hcHBseShudWxsLHIuY2FsbChhcmd1bWVudHMsMSkpKSxmdW5jdGlvbih0KXtyZXR1cm4gdDw9MD8wOnQ+PTE/MTplKHQpfX0sdC5pbnRlcnBvbGF0ZUhjbD1mdW5jdGlvbihlLHIpe2U9dC5oY2woZSkscj10LmhjbChyKTt2YXIgbj1lLmgsaT1lLmMsYT1lLmwsbz1yLmgtbixzPXIuYy1pLGw9ci5sLWE7aXNOYU4ocykmJihzPTAsaT1pc05hTihpKT9yLmM6aSk7aXNOYU4obyk/KG89MCxuPWlzTmFOKG4pP3IuaDpuKTpvPjE4MD9vLT0zNjA6bzwtMTgwJiYobys9MzYwKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFd0KG4rbyp0LGkrcyp0LGErbCp0KStcIlwifX0sdC5pbnRlcnBvbGF0ZUhzbD1mdW5jdGlvbihlLHIpe2U9dC5oc2woZSkscj10LmhzbChyKTt2YXIgbj1lLmgsaT1lLnMsYT1lLmwsbz1yLmgtbixzPXIucy1pLGw9ci5sLWE7aXNOYU4ocykmJihzPTAsaT1pc05hTihpKT9yLnM6aSk7aXNOYU4obyk/KG89MCxuPWlzTmFOKG4pP3IuaDpuKTpvPjE4MD9vLT0zNjA6bzwtMTgwJiYobys9MzYwKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEh0KG4rbyp0LGkrcyp0LGErbCp0KStcIlwifX0sdC5pbnRlcnBvbGF0ZUxhYj1mdW5jdGlvbihlLHIpe2U9dC5sYWIoZSkscj10LmxhYihyKTt2YXIgbj1lLmwsaT1lLmEsYT1lLmIsbz1yLmwtbixzPXIuYS1pLGw9ci5iLWE7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0ZShuK28qdCxpK3MqdCxhK2wqdCkrXCJcIn19LHQuaW50ZXJwb2xhdGVSb3VuZD1jYSx0LnRyYW5zZm9ybT1mdW5jdGlvbihlKXt2YXIgcj1pLmNyZWF0ZUVsZW1lbnROUyh0Lm5zLnByZWZpeC5zdmcsXCJnXCIpO3JldHVybih0LnRyYW5zZm9ybT1mdW5jdGlvbih0KXtpZihudWxsIT10KXtyLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLHQpO3ZhciBlPXIudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKX1yZXR1cm4gbmV3IHVhKGU/ZS5tYXRyaXg6cGEpfSkoZSl9LHVhLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwidHJhbnNsYXRlKFwiK3RoaXMudHJhbnNsYXRlK1wiKXJvdGF0ZShcIit0aGlzLnJvdGF0ZStcIilza2V3WChcIit0aGlzLnNrZXcrXCIpc2NhbGUoXCIrdGhpcy5zY2FsZStcIilcIn07dmFyIHBhPXthOjEsYjowLGM6MCxkOjEsZTowLGY6MH07ZnVuY3Rpb24gZGEodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrXCIsXCI6XCJcIn1mdW5jdGlvbiBnYShlLHIpe3ZhciBuPVtdLGk9W107cmV0dXJuIGU9dC50cmFuc2Zvcm0oZSkscj10LnRyYW5zZm9ybShyKSxmdW5jdGlvbih0LGUscixuKXtpZih0WzBdIT09ZVswXXx8dFsxXSE9PWVbMV0pe3ZhciBpPXIucHVzaChcInRyYW5zbGF0ZShcIixudWxsLFwiLFwiLG51bGwsXCIpXCIpO24ucHVzaCh7aTppLTQseDpHaSh0WzBdLGVbMF0pfSx7aTppLTIseDpHaSh0WzFdLGVbMV0pfSl9ZWxzZShlWzBdfHxlWzFdKSYmci5wdXNoKFwidHJhbnNsYXRlKFwiK2UrXCIpXCIpfShlLnRyYW5zbGF0ZSxyLnRyYW5zbGF0ZSxuLGkpLGZ1bmN0aW9uKHQsZSxyLG4pe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxuLnB1c2goe2k6ci5wdXNoKGRhKHIpK1wicm90YXRlKFwiLG51bGwsXCIpXCIpLTIseDpHaSh0LGUpfSkpOmUmJnIucHVzaChkYShyKStcInJvdGF0ZShcIitlK1wiKVwiKX0oZS5yb3RhdGUsci5yb3RhdGUsbixpKSxmdW5jdGlvbih0LGUscixuKXt0IT09ZT9uLnB1c2goe2k6ci5wdXNoKGRhKHIpK1wic2tld1goXCIsbnVsbCxcIilcIiktMix4OkdpKHQsZSl9KTplJiZyLnB1c2goZGEocikrXCJza2V3WChcIitlK1wiKVwiKX0oZS5za2V3LHIuc2tldyxuLGkpLGZ1bmN0aW9uKHQsZSxyLG4pe2lmKHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXSl7dmFyIGk9ci5wdXNoKGRhKHIpK1wic2NhbGUoXCIsbnVsbCxcIixcIixudWxsLFwiKVwiKTtuLnB1c2goe2k6aS00LHg6R2kodFswXSxlWzBdKX0se2k6aS0yLHg6R2kodFsxXSxlWzFdKX0pfWVsc2UgMT09PWVbMF0mJjE9PT1lWzFdfHxyLnB1c2goZGEocikrXCJzY2FsZShcIitlK1wiKVwiKX0oZS5zY2FsZSxyLnNjYWxlLG4saSksZT1yPW51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9LTEsYT1pLmxlbmd0aDsrK3I8YTspblsoZT1pW3JdKS5pXT1lLngodCk7cmV0dXJuIG4uam9pbihcIlwiKX19ZnVuY3Rpb24gdmEodCxlKXtyZXR1cm4gZT0oZS09dD0rdCl8fDEvZSxmdW5jdGlvbihyKXtyZXR1cm4oci10KS9lfX1mdW5jdGlvbiBtYSh0LGUpe3JldHVybiBlPShlLT10PSt0KXx8MS9lLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDEsKHItdCkvZSkpfX1mdW5jdGlvbiB5YSh0KXtmb3IodmFyIGU9dC5zb3VyY2Uscj10LnRhcmdldCxuPWZ1bmN0aW9uKHQsZSl7aWYodD09PWUpcmV0dXJuIHQ7dmFyIHI9eGEodCksbj14YShlKSxpPXIucG9wKCksYT1uLnBvcCgpLG89bnVsbDtmb3IoO2k9PT1hOylvPWksaT1yLnBvcCgpLGE9bi5wb3AoKTtyZXR1cm4gb30oZSxyKSxpPVtlXTtlIT09bjspZT1lLnBhcmVudCxpLnB1c2goZSk7Zm9yKHZhciBhPWkubGVuZ3RoO3IhPT1uOylpLnNwbGljZShhLDAscikscj1yLnBhcmVudDtyZXR1cm4gaX1mdW5jdGlvbiB4YSh0KXtmb3IodmFyIGU9W10scj10LnBhcmVudDtudWxsIT1yOyllLnB1c2godCksdD1yLHI9ci5wYXJlbnQ7cmV0dXJuIGUucHVzaCh0KSxlfWZ1bmN0aW9uIGJhKHQpe3QuZml4ZWR8PTJ9ZnVuY3Rpb24gX2EodCl7dC5maXhlZCY9LTd9ZnVuY3Rpb24gd2EodCl7dC5maXhlZHw9NCx0LnB4PXQueCx0LnB5PXQueX1mdW5jdGlvbiBrYSh0KXt0LmZpeGVkJj0tNX10LmludGVycG9sYXRlVHJhbnNmb3JtPWdhLHQubGF5b3V0PXt9LHQubGF5b3V0LmJ1bmRsZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0tMSxuPXQubGVuZ3RoOysrcjxuOyllLnB1c2goeWEodFtyXSkpO3JldHVybiBlfX0sdC5sYXlvdXQuY2hvcmQ9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saSxhLG8scyxsPXt9LGM9MDtmdW5jdGlvbiB1KCl7dmFyIGwsdSxmLHAsZCxnPXt9LHY9W10sbT10LnJhbmdlKGkpLHk9W107Zm9yKGU9W10scj1bXSxsPTAscD0tMTsrK3A8aTspe2Zvcih1PTAsZD0tMTsrK2Q8aTspdSs9bltwXVtkXTt2LnB1c2godSkseS5wdXNoKHQucmFuZ2UoaSkpLGwrPXV9Zm9yKGEmJm0uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBhKHZbdF0sdltlXSl9KSxvJiZ5LmZvckVhY2goZnVuY3Rpb24odCxlKXt0LnNvcnQoZnVuY3Rpb24odCxyKXtyZXR1cm4gbyhuW2VdW3RdLG5bZV1bcl0pfSl9KSxsPShNdC1jKmkpL2wsdT0wLHA9LTE7KytwPGk7KXtmb3IoZj11LGQ9LTE7KytkPGk7KXt2YXIgeD1tW3BdLGI9eVt4XVtkXSxfPW5beF1bYl0sdz11LGs9dSs9XypsO2dbeCtcIi1cIitiXT17aW5kZXg6eCxzdWJpbmRleDpiLHN0YXJ0QW5nbGU6dyxlbmRBbmdsZTprLHZhbHVlOl99fXJbeF09e2luZGV4Ongsc3RhcnRBbmdsZTpmLGVuZEFuZ2xlOnUsdmFsdWU6dlt4XX0sdSs9Y31mb3IocD0tMTsrK3A8aTspZm9yKGQ9cC0xOysrZDxpOyl7dmFyIEE9Z1twK1wiLVwiK2RdLFQ9Z1tkK1wiLVwiK3BdOyhBLnZhbHVlfHxULnZhbHVlKSYmZS5wdXNoKEEudmFsdWU8VC52YWx1ZT97c291cmNlOlQsdGFyZ2V0OkF9Ontzb3VyY2U6QSx0YXJnZXQ6VH0pfXMmJmgoKX1mdW5jdGlvbiBoKCl7ZS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHMoKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlKS8yLChlLnNvdXJjZS52YWx1ZStlLnRhcmdldC52YWx1ZSkvMil9KX1yZXR1cm4gbC5tYXRyaXg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9KG49dCkmJm4ubGVuZ3RoLGU9cj1udWxsLGwpOm59LGwucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LGU9cj1udWxsLGwpOmN9LGwuc29ydEdyb3Vwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LGU9cj1udWxsLGwpOmF9LGwuc29ydFN1Ymdyb3Vwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LGU9bnVsbCxsKTpvfSxsLnNvcnRDaG9yZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCxlJiZoKCksbCk6c30sbC5jaG9yZHM9ZnVuY3Rpb24oKXtyZXR1cm4gZXx8dSgpLGV9LGwuZ3JvdXBzPWZ1bmN0aW9uKCl7cmV0dXJuIHJ8fHUoKSxyfSxsfSx0LmxheW91dC5mb3JjZT1mdW5jdGlvbigpe3ZhciBlLHIsbixpLGEsbyxzPXt9LGw9dC5kaXNwYXRjaChcInN0YXJ0XCIsXCJ0aWNrXCIsXCJlbmRcIiksYz1bMSwxXSx1PS45LGg9QWEsZj1UYSxwPS0zMCxkPU1hLGc9LjEsdj0uNjQsbT1bXSx5PVtdO2Z1bmN0aW9uIHgodCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuLGkpe2lmKGUucG9pbnQhPT10KXt2YXIgYT1lLmN4LXQueCxvPWUuY3ktdC55LHM9aS1yLGw9YSphK28qbztpZihzKnMvdjxsKXtpZihsPGQpe3ZhciBjPWUuY2hhcmdlL2w7dC5weC09YSpjLHQucHktPW8qY31yZXR1cm4hMH1pZihlLnBvaW50JiZsJiZsPGQpe2M9ZS5wb2ludENoYXJnZS9sO3QucHgtPWEqYyx0LnB5LT1vKmN9fXJldHVybiFlLmNoYXJnZX19ZnVuY3Rpb24gYihlKXtlLnB4PXQuZXZlbnQueCxlLnB5PXQuZXZlbnQueSxzLnJlc3VtZSgpfXJldHVybiBzLnRpY2s9ZnVuY3Rpb24oKXtpZigobio9Ljk5KTwuMDA1KXJldHVybiBlPW51bGwsbC5lbmQoe3R5cGU6XCJlbmRcIixhbHBoYTpuPTB9KSwhMDt2YXIgcixzLGgsZixkLHYsYixfLHcsaz1tLmxlbmd0aCxBPXkubGVuZ3RoO2ZvcihzPTA7czxBOysrcylmPShoPXlbc10pLnNvdXJjZSwodj0oXz0oZD1oLnRhcmdldCkueC1mLngpKl8rKHc9ZC55LWYueSkqdykmJihfKj12PW4qYVtzXSooKHY9TWF0aC5zcXJ0KHYpKS1pW3NdKS92LHcqPXYsZC54LT1fKihiPWYud2VpZ2h0K2Qud2VpZ2h0P2Yud2VpZ2h0LyhmLndlaWdodCtkLndlaWdodCk6LjUpLGQueS09dypiLGYueCs9XyooYj0xLWIpLGYueSs9dypiKTtpZigoYj1uKmcpJiYoXz1jWzBdLzIsdz1jWzFdLzIscz0tMSxiKSlmb3IoOysrczxrOykoaD1tW3NdKS54Kz0oXy1oLngpKmIsaC55Kz0ody1oLnkpKmI7aWYocClmb3IoIWZ1bmN0aW9uIHQoZSxyLG4pe3ZhciBpPTAsYT0wO2UuY2hhcmdlPTA7aWYoIWUubGVhZilmb3IodmFyIG8scz1lLm5vZGVzLGw9cy5sZW5ndGgsYz0tMTsrK2M8bDspbnVsbCE9KG89c1tjXSkmJih0KG8scixuKSxlLmNoYXJnZSs9by5jaGFyZ2UsaSs9by5jaGFyZ2Uqby5jeCxhKz1vLmNoYXJnZSpvLmN5KTtpZihlLnBvaW50KXtlLmxlYWZ8fChlLnBvaW50LngrPU1hdGgucmFuZG9tKCktLjUsZS5wb2ludC55Kz1NYXRoLnJhbmRvbSgpLS41KTt2YXIgdT1yKm5bZS5wb2ludC5pbmRleF07ZS5jaGFyZ2UrPWUucG9pbnRDaGFyZ2U9dSxpKz11KmUucG9pbnQueCxhKz11KmUucG9pbnQueX1lLmN4PWkvZS5jaGFyZ2U7ZS5jeT1hL2UuY2hhcmdlfShyPXQuZ2VvbS5xdWFkdHJlZShtKSxuLG8pLHM9LTE7KytzPGs7KShoPW1bc10pLmZpeGVkfHxyLnZpc2l0KHgoaCkpO2ZvcihzPS0xOysrczxrOykoaD1tW3NdKS5maXhlZD8oaC54PWgucHgsaC55PWgucHkpOihoLngtPShoLnB4LShoLnB4PWgueCkpKnUsaC55LT0oaC5weS0oaC5weT1oLnkpKSp1KTtsLnRpY2soe3R5cGU6XCJ0aWNrXCIsYWxwaGE6bn0pfSxzLm5vZGVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPXQscyk6bX0scy5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT10LHMpOnl9LHMuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LHMpOmN9LHMubGlua0Rpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDordCxzKTpofSxzLmRpc3RhbmNlPXMubGlua0Rpc3RhbmNlLHMubGlua1N0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDordCxzKTpmfSxzLmZyaWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0LHMpOnV9LHMuY2hhcmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDordCxzKTpwfSxzLmNoYXJnZURpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXQqdCxzKTpNYXRoLnNxcnQoZCl9LHMuZ3Jhdml0eT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0rdCxzKTpnfSxzLnRoZXRhPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PXQqdCxzKTpNYXRoLnNxcnQodil9LHMuYWxwaGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K3Qsbj90PjA/bj10OihlLmM9bnVsbCxlLnQ9TmFOLGU9bnVsbCxsLmVuZCh7dHlwZTpcImVuZFwiLGFscGhhOm49MH0pKTp0PjAmJihsLnN0YXJ0KHt0eXBlOlwic3RhcnRcIixhbHBoYTpuPXR9KSxlPUFlKHMudGljaykpLHMpOm59LHMuc3RhcnQ9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbj1tLmxlbmd0aCxsPXkubGVuZ3RoLHU9Y1swXSxkPWNbMV07Zm9yKHQ9MDt0PG47Kyt0KShyPW1bdF0pLmluZGV4PXQsci53ZWlnaHQ9MDtmb3IodD0wO3Q8bDsrK3QpXCJudW1iZXJcIj09dHlwZW9mKHI9eVt0XSkuc291cmNlJiYoci5zb3VyY2U9bVtyLnNvdXJjZV0pLFwibnVtYmVyXCI9PXR5cGVvZiByLnRhcmdldCYmKHIudGFyZ2V0PW1bci50YXJnZXRdKSwrK3Iuc291cmNlLndlaWdodCwrK3IudGFyZ2V0LndlaWdodDtmb3IodD0wO3Q8bjsrK3Qpcj1tW3RdLGlzTmFOKHIueCkmJihyLng9ZyhcInhcIix1KSksaXNOYU4oci55KSYmKHIueT1nKFwieVwiLGQpKSxpc05hTihyLnB4KSYmKHIucHg9ci54KSxpc05hTihyLnB5KSYmKHIucHk9ci55KTtpZihpPVtdLFwiZnVuY3Rpb25cIj09dHlwZW9mIGgpZm9yKHQ9MDt0PGw7Kyt0KWlbdF09K2guY2FsbCh0aGlzLHlbdF0sdCk7ZWxzZSBmb3IodD0wO3Q8bDsrK3QpaVt0XT1oO2lmKGE9W10sXCJmdW5jdGlvblwiPT10eXBlb2YgZilmb3IodD0wO3Q8bDsrK3QpYVt0XT0rZi5jYWxsKHRoaXMseVt0XSx0KTtlbHNlIGZvcih0PTA7dDxsOysrdClhW3RdPWY7aWYobz1bXSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBwKWZvcih0PTA7dDxuOysrdClvW3RdPStwLmNhbGwodGhpcyxtW3RdLHQpO2Vsc2UgZm9yKHQ9MDt0PG47Kyt0KW9bdF09cDtmdW5jdGlvbiBnKHIsaSl7aWYoIWUpe2ZvcihlPW5ldyBBcnJheShuKSxjPTA7YzxuOysrYyllW2NdPVtdO2ZvcihjPTA7YzxsOysrYyl7dmFyIGE9eVtjXTtlW2Euc291cmNlLmluZGV4XS5wdXNoKGEudGFyZ2V0KSxlW2EudGFyZ2V0LmluZGV4XS5wdXNoKGEuc291cmNlKX19Zm9yKHZhciBvLHM9ZVt0XSxjPS0xLHU9cy5sZW5ndGg7KytjPHU7KWlmKCFpc05hTihvPXNbY11bcl0pKXJldHVybiBvO3JldHVybiBNYXRoLnJhbmRvbSgpKml9cmV0dXJuIHMucmVzdW1lKCl9LHMucmVzdW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHMuYWxwaGEoLjEpfSxzLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gcy5hbHBoYSgwKX0scy5kcmFnPWZ1bmN0aW9uKCl7aWYocnx8KHI9dC5iZWhhdmlvci5kcmFnKCkub3JpZ2luKHopLm9uKFwiZHJhZ3N0YXJ0LmZvcmNlXCIsYmEpLm9uKFwiZHJhZy5mb3JjZVwiLGIpLm9uKFwiZHJhZ2VuZC5mb3JjZVwiLF9hKSksIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHI7dGhpcy5vbihcIm1vdXNlb3Zlci5mb3JjZVwiLHdhKS5vbihcIm1vdXNlb3V0LmZvcmNlXCIsa2EpLmNhbGwocil9LHQucmViaW5kKHMsbCxcIm9uXCIpfTt2YXIgQWE9MjAsVGE9MSxNYT0xLzA7ZnVuY3Rpb24gU2EoZSxyKXtyZXR1cm4gdC5yZWJpbmQoZSxyLFwic29ydFwiLFwiY2hpbGRyZW5cIixcInZhbHVlXCIpLGUubm9kZXM9ZSxlLmxpbmtzPUlhLGV9ZnVuY3Rpb24gRWEodCxlKXtmb3IodmFyIHI9W3RdO251bGwhPSh0PXIucG9wKCkpOylpZihlKHQpLChpPXQuY2hpbGRyZW4pJiYobj1pLmxlbmd0aCkpZm9yKHZhciBuLGk7LS1uPj0wOylyLnB1c2goaVtuXSl9ZnVuY3Rpb24gQ2EodCxlKXtmb3IodmFyIHI9W3RdLG49W107bnVsbCE9KHQ9ci5wb3AoKSk7KWlmKG4ucHVzaCh0KSwoYT10LmNoaWxkcmVuKSYmKGk9YS5sZW5ndGgpKWZvcih2YXIgaSxhLG89LTE7KytvPGk7KXIucHVzaChhW29dKTtmb3IoO251bGwhPSh0PW4ucG9wKCkpOyllKHQpfWZ1bmN0aW9uIExhKHQpe3JldHVybiB0LmNoaWxkcmVufWZ1bmN0aW9uIHphKHQpe3JldHVybiB0LnZhbHVlfWZ1bmN0aW9uIE9hKHQsZSl7cmV0dXJuIGUudmFsdWUtdC52YWx1ZX1mdW5jdGlvbiBJYShlKXtyZXR1cm4gdC5tZXJnZShlLm1hcChmdW5jdGlvbih0KXtyZXR1cm4odC5jaGlsZHJlbnx8W10pLm1hcChmdW5jdGlvbihlKXtyZXR1cm57c291cmNlOnQsdGFyZ2V0OmV9fSl9KSl9dC5sYXlvdXQuaGllcmFyY2h5PWZ1bmN0aW9uKCl7dmFyIHQ9T2EsZT1MYSxyPXphO2Z1bmN0aW9uIG4oaSl7dmFyIGEsbz1baV0scz1bXTtmb3IoaS5kZXB0aD0wO251bGwhPShhPW8ucG9wKCkpOylpZihzLnB1c2goYSksKGM9ZS5jYWxsKG4sYSxhLmRlcHRoKSkmJihsPWMubGVuZ3RoKSl7Zm9yKHZhciBsLGMsdTstLWw+PTA7KW8ucHVzaCh1PWNbbF0pLHUucGFyZW50PWEsdS5kZXB0aD1hLmRlcHRoKzE7ciYmKGEudmFsdWU9MCksYS5jaGlsZHJlbj1jfWVsc2UgciYmKGEudmFsdWU9K3IuY2FsbChuLGEsYS5kZXB0aCl8fDApLGRlbGV0ZSBhLmNoaWxkcmVuO3JldHVybiBDYShpLGZ1bmN0aW9uKGUpe3ZhciBuLGk7dCYmKG49ZS5jaGlsZHJlbikmJm4uc29ydCh0KSxyJiYoaT1lLnBhcmVudCkmJihpLnZhbHVlKz1lLnZhbHVlKX0pLHN9cmV0dXJuIG4uc29ydD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG4pOnR9LG4uY2hpbGRyZW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sbi5yZXZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiByJiYoRWEodCxmdW5jdGlvbih0KXt0LmNoaWxkcmVuJiYodC52YWx1ZT0wKX0pLENhKHQsZnVuY3Rpb24odCl7dmFyIGU7dC5jaGlsZHJlbnx8KHQudmFsdWU9K3IuY2FsbChuLHQsdC5kZXB0aCl8fDApLChlPXQucGFyZW50KSYmKGUudmFsdWUrPXQudmFsdWUpfSkpLHR9LG59LHQubGF5b3V0LnBhcnRpdGlvbj1mdW5jdGlvbigpe3ZhciBlPXQubGF5b3V0LmhpZXJhcmNoeSgpLHI9WzEsMV07ZnVuY3Rpb24gbih0LG4pe3ZhciBpPWUuY2FsbCh0aGlzLHQsbik7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4saSl7dmFyIGE9ZS5jaGlsZHJlbjtpZihlLng9cixlLnk9ZS5kZXB0aCppLGUuZHg9bixlLmR5PWksYSYmKG89YS5sZW5ndGgpKXt2YXIgbyxzLGwsYz0tMTtmb3Iobj1lLnZhbHVlP24vZS52YWx1ZTowOysrYzxvOyl0KHM9YVtjXSxyLGw9cy52YWx1ZSpuLGkpLHIrPWx9fShpWzBdLDAsclswXSxyWzFdL2Z1bmN0aW9uIHQoZSl7dmFyIHI9ZS5jaGlsZHJlbixuPTA7aWYociYmKGk9ci5sZW5ndGgpKWZvcih2YXIgaSxhPS0xOysrYTxpOyluPU1hdGgubWF4KG4sdChyW2FdKSk7cmV0dXJuIDErbn0oaVswXSkpLGl9cmV0dXJuIG4uc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LFNhKG4sZSl9LHQubGF5b3V0LnBpZT1mdW5jdGlvbigpe3ZhciBlPU51bWJlcixyPURhLG49MCxpPU10LGE9MDtmdW5jdGlvbiBvKHMpe3ZhciBsLGM9cy5sZW5ndGgsdT1zLm1hcChmdW5jdGlvbih0LHIpe3JldHVybitlLmNhbGwobyx0LHIpfSksaD0rKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6biksZj0oXCJmdW5jdGlvblwiPT10eXBlb2YgaT9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTppKS1oLHA9TWF0aC5taW4oTWF0aC5hYnMoZikvYywrKFwiZnVuY3Rpb25cIj09dHlwZW9mIGE/YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YSkpLGQ9cCooZjwwPy0xOjEpLGc9dC5zdW0odSksdj1nPyhmLWMqZCkvZzowLG09dC5yYW5nZShjKSx5PVtdO3JldHVybiBudWxsIT1yJiZtLnNvcnQocj09PURhP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHVbZV0tdVt0XX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gcihzW3RdLHNbZV0pfSksbS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3lbdF09e2RhdGE6c1t0XSx2YWx1ZTpsPXVbdF0sc3RhcnRBbmdsZTpoLGVuZEFuZ2xlOmgrPWwqditkLHBhZEFuZ2xlOnB9fSkseX1yZXR1cm4gby52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG8pOmV9LG8uc29ydD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG8pOnJ9LG8uc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LG8pOm59LG8uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxvKTppfSxvLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsbyk6YX0sb307dmFyIERhPXt9O2Z1bmN0aW9uIFBhKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gUmEodCl7cmV0dXJuIHQueX1mdW5jdGlvbiBGYSh0LGUscil7dC55MD1lLHQueT1yfXQubGF5b3V0LnN0YWNrPWZ1bmN0aW9uKCl7dmFyIGU9eixyPWphLG49VmEsaT1GYSxhPVBhLG89UmE7ZnVuY3Rpb24gcyhsLGMpe2lmKCEocD1sLmxlbmd0aCkpcmV0dXJuIGw7dmFyIHU9bC5tYXAoZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5jYWxsKHMsdCxyKX0pLGg9dS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW2EuY2FsbChzLHQsZSksby5jYWxsKHMsdCxlKV19KX0pLGY9ci5jYWxsKHMsaCxjKTt1PXQucGVybXV0ZSh1LGYpLGg9dC5wZXJtdXRlKGgsZik7dmFyIHAsZCxnLHYsbT1uLmNhbGwocyxoLGMpLHk9dVswXS5sZW5ndGg7Zm9yKGc9MDtnPHk7KytnKWZvcihpLmNhbGwocyx1WzBdW2ddLHY9bVtnXSxoWzBdW2ddWzFdKSxkPTE7ZDxwOysrZClpLmNhbGwocyx1W2RdW2ddLHYrPWhbZC0xXVtnXVsxXSxoW2RdW2ddWzFdKTtyZXR1cm4gbH1yZXR1cm4gcy52YWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxzKTplfSxzLm9yZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpCYS5nZXQodCl8fGphLHMpOnJ9LHMub2Zmc2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpOYS5nZXQodCl8fFZhLHMpOm59LHMueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LHMpOmF9LHMueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LHMpOm99LHMub3V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQscyk6aX0sc307dmFyIEJhPXQubWFwKHtcImluc2lkZS1vdXRcIjpmdW5jdGlvbihlKXt2YXIgcixuLGk9ZS5sZW5ndGgsYT1lLm1hcChVYSksbz1lLm1hcChxYSkscz10LnJhbmdlKGkpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gYVt0XS1hW2VdfSksbD0wLGM9MCx1PVtdLGg9W107Zm9yKHI9MDtyPGk7KytyKW49c1tyXSxsPGM/KGwrPW9bbl0sdS5wdXNoKG4pKTooYys9b1tuXSxoLnB1c2gobikpO3JldHVybiBoLnJldmVyc2UoKS5jb25jYXQodSl9LHJldmVyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIHQucmFuZ2UoZS5sZW5ndGgpLnJldmVyc2UoKX0sZGVmYXVsdDpqYX0pLE5hPXQubWFwKHtzaWxob3VldHRlOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXQubGVuZ3RoLGE9dFswXS5sZW5ndGgsbz1bXSxzPTAsbD1bXTtmb3Iocj0wO3I8YTsrK3Ipe2ZvcihlPTAsbj0wO2U8aTtlKyspbis9dFtlXVtyXVsxXTtuPnMmJihzPW4pLG8ucHVzaChuKX1mb3Iocj0wO3I8YTsrK3IpbFtyXT0ocy1vW3JdKS8yO3JldHVybiBsfSx3aWdnbGU6ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHMsbCxjLHU9dC5sZW5ndGgsaD10WzBdLGY9aC5sZW5ndGgscD1bXTtmb3IocFswXT1sPWM9MCxyPTE7cjxmOysrcil7Zm9yKGU9MCxpPTA7ZTx1OysrZSlpKz10W2VdW3JdWzFdO2ZvcihlPTAsYT0wLHM9aFtyXVswXS1oW3ItMV1bMF07ZTx1OysrZSl7Zm9yKG49MCxvPSh0W2VdW3JdWzFdLXRbZV1bci0xXVsxXSkvKDIqcyk7bjxlOysrbilvKz0odFtuXVtyXVsxXS10W25dW3ItMV1bMV0pL3M7YSs9byp0W2VdW3JdWzFdfXBbcl09bC09aT9hL2kqczowLGw8YyYmKGM9bCl9Zm9yKHI9MDtyPGY7KytyKXBbcl0tPWM7cmV0dXJuIHB9LGV4cGFuZDpmdW5jdGlvbih0KXt2YXIgZSxyLG4saT10Lmxlbmd0aCxhPXRbMF0ubGVuZ3RoLG89MS9pLHM9W107Zm9yKHI9MDtyPGE7KytyKXtmb3IoZT0wLG49MDtlPGk7ZSsrKW4rPXRbZV1bcl1bMV07aWYobilmb3IoZT0wO2U8aTtlKyspdFtlXVtyXVsxXS89bjtlbHNlIGZvcihlPTA7ZTxpO2UrKyl0W2VdW3JdWzFdPW99Zm9yKHI9MDtyPGE7KytyKXNbcl09MDtyZXR1cm4gc30semVybzpWYX0pO2Z1bmN0aW9uIGphKGUpe3JldHVybiB0LnJhbmdlKGUubGVuZ3RoKX1mdW5jdGlvbiBWYSh0KXtmb3IodmFyIGU9LTEscj10WzBdLmxlbmd0aCxuPVtdOysrZTxyOyluW2VdPTA7cmV0dXJuIG59ZnVuY3Rpb24gVWEodCl7Zm9yKHZhciBlLHI9MSxuPTAsaT10WzBdWzFdLGE9dC5sZW5ndGg7cjxhOysrcikoZT10W3JdWzFdKT5pJiYobj1yLGk9ZSk7cmV0dXJuIG59ZnVuY3Rpb24gcWEodCl7cmV0dXJuIHQucmVkdWNlKEhhLDApfWZ1bmN0aW9uIEhhKHQsZSl7cmV0dXJuIHQrZVsxXX1mdW5jdGlvbiBHYSh0LGUpe3JldHVybiBZYSh0LE1hdGguY2VpbChNYXRoLmxvZyhlLmxlbmd0aCkvTWF0aC5MTjIrMSkpfWZ1bmN0aW9uIFlhKHQsZSl7Zm9yKHZhciByPS0xLG49K3RbMF0saT0odFsxXS1uKS9lLGE9W107KytyPD1lOylhW3JdPWkqcituO3JldHVybiBhfWZ1bmN0aW9uIFdhKGUpe3JldHVyblt0Lm1pbihlKSx0Lm1heChlKV19ZnVuY3Rpb24gWGEodCxlKXtyZXR1cm4gdC52YWx1ZS1lLnZhbHVlfWZ1bmN0aW9uIFphKHQsZSl7dmFyIHI9dC5fcGFja19uZXh0O3QuX3BhY2tfbmV4dD1lLGUuX3BhY2tfcHJldj10LGUuX3BhY2tfbmV4dD1yLHIuX3BhY2tfcHJldj1lfWZ1bmN0aW9uICRhKHQsZSl7dC5fcGFja19uZXh0PWUsZS5fcGFja19wcmV2PXR9ZnVuY3Rpb24gSmEodCxlKXt2YXIgcj1lLngtdC54LG49ZS55LXQueSxpPXQucitlLnI7cmV0dXJuLjk5OSppKmk+cipyK24qbn1mdW5jdGlvbiBLYSh0KXtpZigoZT10LmNoaWxkcmVuKSYmKGw9ZS5sZW5ndGgpKXt2YXIgZSxyLG4saSxhLG8scyxsLGM9MS8wLHU9LTEvMCxoPTEvMCxmPS0xLzA7aWYoZS5mb3JFYWNoKFFhKSwocj1lWzBdKS54PS1yLnIsci55PTAseChyKSxsPjEmJigobj1lWzFdKS54PW4ucixuLnk9MCx4KG4pLGw+MikpZm9yKGVvKHIsbixpPWVbMl0pLHgoaSksWmEocixpKSxyLl9wYWNrX3ByZXY9aSxaYShpLG4pLG49ci5fcGFja19uZXh0LGE9MzthPGw7YSsrKXtlbyhyLG4saT1lW2FdKTt2YXIgcD0wLGQ9MSxnPTE7Zm9yKG89bi5fcGFja19uZXh0O28hPT1uO289by5fcGFja19uZXh0LGQrKylpZihKYShvLGkpKXtwPTE7YnJlYWt9aWYoMT09cClmb3Iocz1yLl9wYWNrX3ByZXY7cyE9PW8uX3BhY2tfcHJldiYmIUphKHMsaSk7cz1zLl9wYWNrX3ByZXYsZysrKTtwPyhkPGd8fGQ9PWcmJm4ucjxyLnI/JGEocixuPW8pOiRhKHI9cyxuKSxhLS0pOihaYShyLGkpLG49aSx4KGkpKX12YXIgdj0oYyt1KS8yLG09KGgrZikvMix5PTA7Zm9yKGE9MDthPGw7YSsrKShpPWVbYV0pLngtPXYsaS55LT1tLHk9TWF0aC5tYXgoeSxpLnIrTWF0aC5zcXJ0KGkueCppLngraS55KmkueSkpO3Qucj15LGUuZm9yRWFjaCh0byl9ZnVuY3Rpb24geCh0KXtjPU1hdGgubWluKHQueC10LnIsYyksdT1NYXRoLm1heCh0LngrdC5yLHUpLGg9TWF0aC5taW4odC55LXQucixoKSxmPU1hdGgubWF4KHQueSt0LnIsZil9fWZ1bmN0aW9uIFFhKHQpe3QuX3BhY2tfbmV4dD10Ll9wYWNrX3ByZXY9dH1mdW5jdGlvbiB0byh0KXtkZWxldGUgdC5fcGFja19uZXh0LGRlbGV0ZSB0Ll9wYWNrX3ByZXZ9ZnVuY3Rpb24gZW8odCxlLHIpe3ZhciBuPXQucityLnIsaT1lLngtdC54LGE9ZS55LXQueTtpZihuJiYoaXx8YSkpe3ZhciBvPWUucityLnIscz1pKmkrYSphLGw9LjUrKChuKj1uKS0obyo9bykpLygyKnMpLGM9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKihuK3MpLShuLT1zKSpuLW8qbykpLygyKnMpO3IueD10LngrbCppK2MqYSxyLnk9dC55K2wqYS1jKml9ZWxzZSByLng9dC54K24sci55PXQueX1mdW5jdGlvbiBybyh0LGUpe3JldHVybiB0LnBhcmVudD09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIG5vKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGUubGVuZ3RoP2VbMF06dC50fWZ1bmN0aW9uIGlvKHQpe3ZhciBlLHI9dC5jaGlsZHJlbjtyZXR1cm4oZT1yLmxlbmd0aCk/cltlLTFdOnQudH1mdW5jdGlvbiBhbyh0LGUscil7dmFyIG49ci8oZS5pLXQuaSk7ZS5jLT1uLGUucys9cix0LmMrPW4sZS56Kz1yLGUubSs9cn1mdW5jdGlvbiBvbyh0LGUscil7cmV0dXJuIHQuYS5wYXJlbnQ9PT1lLnBhcmVudD90LmE6cn1mdW5jdGlvbiBzbyh0KXtyZXR1cm57eDp0LngseTp0LnksZHg6dC5keCxkeTp0LmR5fX1mdW5jdGlvbiBsbyh0LGUpe3ZhciByPXQueCtlWzNdLG49dC55K2VbMF0saT10LmR4LWVbMV0tZVszXSxhPXQuZHktZVswXS1lWzJdO3JldHVybiBpPDAmJihyKz1pLzIsaT0wKSxhPDAmJihuKz1hLzIsYT0wKSx7eDpyLHk6bixkeDppLGR5OmF9fWZ1bmN0aW9uIGNvKHQpe3ZhciBlPXRbMF0scj10W3QubGVuZ3RoLTFdO3JldHVybiBlPHI/W2Uscl06W3IsZV19ZnVuY3Rpb24gdW8odCl7cmV0dXJuIHQucmFuZ2VFeHRlbnQ/dC5yYW5nZUV4dGVudCgpOmNvKHQucmFuZ2UoKSl9ZnVuY3Rpb24gaG8odCxlLHIsbil7dmFyIGk9cih0WzBdLHRbMV0pLGE9bihlWzBdLGVbMV0pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gYShpKHQpKX19ZnVuY3Rpb24gZm8odCxlKXt2YXIgcixuPTAsaT10Lmxlbmd0aC0xLGE9dFtuXSxvPXRbaV07cmV0dXJuIG88YSYmKHI9bixuPWksaT1yLHI9YSxhPW8sbz1yKSx0W25dPWUuZmxvb3IoYSksdFtpXT1lLmNlaWwobyksdH1mdW5jdGlvbiBwbyh0KXtyZXR1cm4gdD97Zmxvb3I6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoZS90KSp0fSxjZWlsOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmNlaWwoZS90KSp0fX06Z299dC5sYXlvdXQuaGlzdG9ncmFtPWZ1bmN0aW9uKCl7dmFyIGU9ITAscj1OdW1iZXIsbj1XYSxpPUdhO2Z1bmN0aW9uIGEoYSxvKXtmb3IodmFyIHMsbCxjPVtdLHU9YS5tYXAocix0aGlzKSxoPW4uY2FsbCh0aGlzLHUsbyksZj1pLmNhbGwodGhpcyxoLHUsbykscD0obz0tMSx1Lmxlbmd0aCksZD1mLmxlbmd0aC0xLGc9ZT8xOjEvcDsrK288ZDspKHM9Y1tvXT1bXSkuZHg9ZltvKzFdLShzLng9ZltvXSkscy55PTA7aWYoZD4wKWZvcihvPS0xOysrbzxwOykobD11W29dKT49aFswXSYmbDw9aFsxXSYmKChzPWNbdC5iaXNlY3QoZixsLDEsZCktMV0pLnkrPWcscy5wdXNoKGFbb10pKTtyZXR1cm4gY31yZXR1cm4gYS52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGEpOnJ9LGEucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dmUodCksYSk6bn0sYS5iaW5zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPVwibnVtYmVyXCI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUpe3JldHVybiBZYShlLHQpfTp2ZSh0KSxhKTppfSxhLmZyZXF1ZW5jeT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0hIXQsYSk6ZX0sYX0sdC5sYXlvdXQucGFjaz1mdW5jdGlvbigpe3ZhciBlLHI9dC5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChYYSksbj0wLGk9WzEsMV07ZnVuY3Rpb24gYSh0LGEpe3ZhciBvPXIuY2FsbCh0aGlzLHQsYSkscz1vWzBdLGw9aVswXSxjPWlbMV0sdT1udWxsPT1lP01hdGguc3FydDpcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6ZnVuY3Rpb24oKXtyZXR1cm4gZX07aWYocy54PXMueT0wLENhKHMsZnVuY3Rpb24odCl7dC5yPSt1KHQudmFsdWUpfSksQ2EocyxLYSksbil7dmFyIGg9biooZT8xOk1hdGgubWF4KDIqcy5yL2wsMipzLnIvYykpLzI7Q2EocyxmdW5jdGlvbih0KXt0LnIrPWh9KSxDYShzLEthKSxDYShzLGZ1bmN0aW9uKHQpe3Quci09aH0pfXJldHVybiBmdW5jdGlvbiB0KGUscixuLGkpe3ZhciBhPWUuY2hpbGRyZW47ZS54PXIrPWkqZS54O2UueT1uKz1pKmUueTtlLnIqPWk7aWYoYSlmb3IodmFyIG89LTEscz1hLmxlbmd0aDsrK288czspdChhW29dLHIsbixpKX0ocyxsLzIsYy8yLGU/MToxL01hdGgubWF4KDIqcy5yL2wsMipzLnIvYykpLG99cmV0dXJuIGEuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGEpOml9LGEucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXR8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDordCxhKTplfSxhLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsYSk6bn0sU2EoYSxyKX0sdC5sYXlvdXQudHJlZT1mdW5jdGlvbigpe3ZhciBlPXQubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQobnVsbCkudmFsdWUobnVsbCkscj1ybyxuPVsxLDFdLGk9bnVsbDtmdW5jdGlvbiBhKHQsYSl7dmFyIGM9ZS5jYWxsKHRoaXMsdCxhKSx1PWNbMF0saD1mdW5jdGlvbih0KXt2YXIgZSxyPXtBOm51bGwsY2hpbGRyZW46W3RdfSxuPVtyXTtmb3IoO251bGwhPShlPW4ucG9wKCkpOylmb3IodmFyIGksYT1lLmNoaWxkcmVuLG89MCxzPWEubGVuZ3RoO288czsrK28pbi5wdXNoKChhW29dPWk9e186YVtvXSxwYXJlbnQ6ZSxjaGlsZHJlbjooaT1hW29dLmNoaWxkcmVuKSYmaS5zbGljZSgpfHxbXSxBOm51bGwsYTpudWxsLHo6MCxtOjAsYzowLHM6MCx0Om51bGwsaTpvfSkuYT1pKTtyZXR1cm4gci5jaGlsZHJlblswXX0odSk7aWYoQ2EoaCxvKSxoLnBhcmVudC5tPS1oLnosRWEoaCxzKSxpKUVhKHUsbCk7ZWxzZXt2YXIgZj11LHA9dSxkPXU7RWEodSxmdW5jdGlvbih0KXt0Lng8Zi54JiYoZj10KSx0Lng+cC54JiYocD10KSx0LmRlcHRoPmQuZGVwdGgmJihkPXQpfSk7dmFyIGc9cihmLHApLzItZi54LHY9blswXS8ocC54K3IocCxmKS8yK2cpLG09blsxXS8oZC5kZXB0aHx8MSk7RWEodSxmdW5jdGlvbih0KXt0Lng9KHQueCtnKSp2LHQueT10LmRlcHRoKm19KX1yZXR1cm4gY31mdW5jdGlvbiBvKHQpe3ZhciBlPXQuY2hpbGRyZW4sbj10LnBhcmVudC5jaGlsZHJlbixpPXQuaT9uW3QuaS0xXTpudWxsO2lmKGUubGVuZ3RoKXshZnVuY3Rpb24odCl7dmFyIGUscj0wLG49MCxpPXQuY2hpbGRyZW4sYT1pLmxlbmd0aDtmb3IoOy0tYT49MDspKGU9aVthXSkueis9cixlLm0rPXIscis9ZS5zKyhuKz1lLmMpfSh0KTt2YXIgYT0oZVswXS56K2VbZS5sZW5ndGgtMV0ueikvMjtpPyh0Lno9aS56K3IodC5fLGkuXyksdC5tPXQuei1hKTp0Lno9YX1lbHNlIGkmJih0Lno9aS56K3IodC5fLGkuXykpO3QucGFyZW50LkE9ZnVuY3Rpb24odCxlLG4pe2lmKGUpe2Zvcih2YXIgaSxhPXQsbz10LHM9ZSxsPWEucGFyZW50LmNoaWxkcmVuWzBdLGM9YS5tLHU9by5tLGg9cy5tLGY9bC5tO3M9aW8ocyksYT1ubyhhKSxzJiZhOylsPW5vKGwpLChvPWlvKG8pKS5hPXQsKGk9cy56K2gtYS56LWMrcihzLl8sYS5fKSk+MCYmKGFvKG9vKHMsdCxuKSx0LGkpLGMrPWksdSs9aSksaCs9cy5tLGMrPWEubSxmKz1sLm0sdSs9by5tO3MmJiFpbyhvKSYmKG8udD1zLG8ubSs9aC11KSxhJiYhbm8obCkmJihsLnQ9YSxsLm0rPWMtZixuPXQpfXJldHVybiBufSh0LGksdC5wYXJlbnQuQXx8blswXSl9ZnVuY3Rpb24gcyh0KXt0Ll8ueD10LnordC5wYXJlbnQubSx0Lm0rPXQucGFyZW50Lm19ZnVuY3Rpb24gbCh0KXt0LngqPW5bMF0sdC55PXQuZGVwdGgqblsxXX1yZXR1cm4gYS5zZXBhcmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PShuPXQpP2w6bnVsbCxhKTppP251bGw6bn0sYS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT0obj10KT9udWxsOmwsYSk6aT9uOm51bGx9LFNhKGEsZSl9LHQubGF5b3V0LmNsdXN0ZXI9ZnVuY3Rpb24oKXt2YXIgZT10LmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KG51bGwpLnZhbHVlKG51bGwpLHI9cm8sbj1bMSwxXSxpPSExO2Z1bmN0aW9uIGEoYSxvKXt2YXIgcyxsPWUuY2FsbCh0aGlzLGEsbyksYz1sWzBdLHU9MDtDYShjLGZ1bmN0aW9uKGUpe3ZhciBuPWUuY2hpbGRyZW47biYmbi5sZW5ndGg/KGUueD1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlLnh9LDApL3QubGVuZ3RofShuKSxlLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIDErdC5tYXgoZSxmdW5jdGlvbih0KXtyZXR1cm4gdC55fSl9KG4pKTooZS54PXM/dSs9cihlLHMpOjAsZS55PTAscz1lKX0pO3ZhciBoPWZ1bmN0aW9uIHQoZSl7dmFyIHI9ZS5jaGlsZHJlbjtyZXR1cm4gciYmci5sZW5ndGg/dChyWzBdKTplfShjKSxmPWZ1bmN0aW9uIHQoZSl7dmFyIHIsbj1lLmNoaWxkcmVuO3JldHVybiBuJiYocj1uLmxlbmd0aCk/dChuW3ItMV0pOmV9KGMpLHA9aC54LXIoaCxmKS8yLGQ9Zi54K3IoZixoKS8yO3JldHVybiBDYShjLGk/ZnVuY3Rpb24odCl7dC54PSh0LngtYy54KSpuWzBdLHQueT0oYy55LXQueSkqblsxXX06ZnVuY3Rpb24odCl7dC54PSh0LngtcCkvKGQtcCkqblswXSx0Lnk9KDEtKGMueT90LnkvYy55OjEpKSpuWzFdfSksbH1yZXR1cm4gYS5zZXBhcmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PShuPXQpLGEpOmk/bnVsbDpufSxhLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGwhPShuPXQpLGEpOmk/bjpudWxsfSxTYShhLGUpfSx0LmxheW91dC50cmVlbWFwPWZ1bmN0aW9uKCl7dmFyIGUscj10LmxheW91dC5oaWVyYXJjaHkoKSxuPU1hdGgucm91bmQsaT1bMSwxXSxhPW51bGwsbz1zbyxzPSExLGw9XCJzcXVhcmlmeVwiLGM9LjUqKDErTWF0aC5zcXJ0KDUpKTtmdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByLG4saT0tMSxhPXQubGVuZ3RoOysraTxhOyluPShyPXRbaV0pLnZhbHVlKihlPDA/MDplKSxyLmFyZWE9aXNOYU4obil8fG48PTA/MDpufWZ1bmN0aW9uIGgodCl7dmFyIGU9dC5jaGlsZHJlbjtpZihlJiZlLmxlbmd0aCl7dmFyIHIsbixpLGE9byh0KSxzPVtdLGM9ZS5zbGljZSgpLGY9MS8wLGc9XCJzbGljZVwiPT09bD9hLmR4OlwiZGljZVwiPT09bD9hLmR5Olwic2xpY2UtZGljZVwiPT09bD8xJnQuZGVwdGg/YS5keTphLmR4Ok1hdGgubWluKGEuZHgsYS5keSk7Zm9yKHUoYyxhLmR4KmEuZHkvdC52YWx1ZSkscy5hcmVhPTA7KGk9Yy5sZW5ndGgpPjA7KXMucHVzaChyPWNbaS0xXSkscy5hcmVhKz1yLmFyZWEsXCJzcXVhcmlmeVwiIT09bHx8KG49cChzLGcpKTw9Zj8oYy5wb3AoKSxmPW4pOihzLmFyZWEtPXMucG9wKCkuYXJlYSxkKHMsZyxhLCExKSxnPU1hdGgubWluKGEuZHgsYS5keSkscy5sZW5ndGg9cy5hcmVhPTAsZj0xLzApO3MubGVuZ3RoJiYoZChzLGcsYSwhMCkscy5sZW5ndGg9cy5hcmVhPTApLGUuZm9yRWFjaChoKX19ZnVuY3Rpb24gZih0KXt2YXIgZT10LmNoaWxkcmVuO2lmKGUmJmUubGVuZ3RoKXt2YXIgcixuPW8odCksaT1lLnNsaWNlKCksYT1bXTtmb3IodShpLG4uZHgqbi5keS90LnZhbHVlKSxhLmFyZWE9MDtyPWkucG9wKCk7KWEucHVzaChyKSxhLmFyZWErPXIuYXJlYSxudWxsIT1yLnomJihkKGEsci56P24uZHg6bi5keSxuLCFpLmxlbmd0aCksYS5sZW5ndGg9YS5hcmVhPTApO2UuZm9yRWFjaChmKX19ZnVuY3Rpb24gcCh0LGUpe2Zvcih2YXIgcixuPXQuYXJlYSxpPTAsYT0xLzAsbz0tMSxzPXQubGVuZ3RoOysrbzxzOykocj10W29dLmFyZWEpJiYocjxhJiYoYT1yKSxyPmkmJihpPXIpKTtyZXR1cm4gZSo9ZSwobio9bik/TWF0aC5tYXgoZSppKmMvbixuLyhlKmEqYykpOjEvMH1mdW5jdGlvbiBkKHQsZSxyLGkpe3ZhciBhLG89LTEscz10Lmxlbmd0aCxsPXIueCxjPXIueSx1PWU/bih0LmFyZWEvZSk6MDtpZihlPT1yLmR4KXtmb3IoKGl8fHU+ci5keSkmJih1PXIuZHkpOysrbzxzOykoYT10W29dKS54PWwsYS55PWMsYS5keT11LGwrPWEuZHg9TWF0aC5taW4oci54K3IuZHgtbCx1P24oYS5hcmVhL3UpOjApO2Euej0hMCxhLmR4Kz1yLngrci5keC1sLHIueSs9dSxyLmR5LT11fWVsc2V7Zm9yKChpfHx1PnIuZHgpJiYodT1yLmR4KTsrK288czspKGE9dFtvXSkueD1sLGEueT1jLGEuZHg9dSxjKz1hLmR5PU1hdGgubWluKHIueStyLmR5LWMsdT9uKGEuYXJlYS91KTowKTthLno9ITEsYS5keSs9ci55K3IuZHktYyxyLngrPXUsci5keC09dX19ZnVuY3Rpb24gZyh0KXt2YXIgbj1lfHxyKHQpLGE9blswXTtyZXR1cm4gYS54PWEueT0wLGEudmFsdWU/KGEuZHg9aVswXSxhLmR5PWlbMV0pOmEuZHg9YS5keT0wLGUmJnIucmV2YWx1ZShhKSx1KFthXSxhLmR4KmEuZHkvYS52YWx1ZSksKGU/ZjpoKShhKSxzJiYoZT1uKSxufXJldHVybiBnLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxnKTppfSxnLnBhZGRpbmc9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGE7ZnVuY3Rpb24gZShlKXtyZXR1cm4gbG8oZSx0KX12YXIgcjtyZXR1cm4gbz1udWxsPT0oYT10KT9zbzpcImZ1bmN0aW9uXCI9PShyPXR5cGVvZiB0KT9mdW5jdGlvbihlKXt2YXIgcj10LmNhbGwoZyxlLGUuZGVwdGgpO3JldHVybiBudWxsPT1yP3NvKGUpOmxvKGUsXCJudW1iZXJcIj09dHlwZW9mIHI/W3IscixyLHJdOnIpfTpcIm51bWJlclwiPT09cj8odD1bdCx0LHQsdF0sZSk6ZSxnfSxnLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQ/TWF0aC5yb3VuZDpOdW1iZXIsZyk6biE9TnVtYmVyfSxnLnN0aWNreT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGU9bnVsbCxnKTpzfSxnLnJhdGlvPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsZyk6Y30sZy5tb2RlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQrXCJcIixnKTpsfSxTYShnLHIpfSx0LnJhbmRvbT17bm9ybWFsOmZ1bmN0aW9uKHQsZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gcjwyJiYoZT0xKSxyPDEmJih0PTApLGZ1bmN0aW9uKCl7dmFyIHIsbixpO2Rve2k9KHI9MipNYXRoLnJhbmRvbSgpLTEpKnIrKG49MipNYXRoLnJhbmRvbSgpLTEpKm59d2hpbGUoIWl8fGk+MSk7cmV0dXJuIHQrZSpyKk1hdGguc3FydCgtMipNYXRoLmxvZyhpKS9pKX19LGxvZ05vcm1hbDpmdW5jdGlvbigpe3ZhciBlPXQucmFuZG9tLm5vcm1hbC5hcHBseSh0LGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZXhwKGUoKSl9fSxiYXRlczpmdW5jdGlvbihlKXt2YXIgcj10LnJhbmRvbS5pcndpbkhhbGwoZSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIoKS9lfX0saXJ3aW5IYWxsOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT0wLHI9MDtyPHQ7cisrKWUrPU1hdGgucmFuZG9tKCk7cmV0dXJuIGV9fX0sdC5zY2FsZT17fTt2YXIgZ289e2Zsb29yOnosY2VpbDp6fTtmdW5jdGlvbiB2byhlLHIsbixpKXt2YXIgYT1bXSxvPVtdLHM9MCxsPU1hdGgubWluKGUubGVuZ3RoLHIubGVuZ3RoKS0xO2ZvcihlW2xdPGVbMF0mJihlPWUuc2xpY2UoKS5yZXZlcnNlKCkscj1yLnNsaWNlKCkucmV2ZXJzZSgpKTsrK3M8PWw7KWEucHVzaChuKGVbcy0xXSxlW3NdKSksby5wdXNoKGkocltzLTFdLHJbc10pKTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49dC5iaXNlY3QoZSxyLDEsbCktMTtyZXR1cm4gb1tuXShhW25dKHIpKX19ZnVuY3Rpb24gbW8oZSxyKXtyZXR1cm4gdC5yZWJpbmQoZSxyLFwicmFuZ2VcIixcInJhbmdlUm91bmRcIixcImludGVycG9sYXRlXCIsXCJjbGFtcFwiKX1mdW5jdGlvbiB5byh0LGUpe3JldHVybiBmbyh0LHBvKHhvKHQsZSlbMl0pKSxmbyh0LHBvKHhvKHQsZSlbMl0pKSx0fWZ1bmN0aW9uIHhvKHQsZSl7bnVsbD09ZSYmKGU9MTApO3ZhciByPWNvKHQpLG49clsxXS1yWzBdLGk9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhuL2UpL01hdGguTE4xMCkpLGE9ZS9uKmk7cmV0dXJuIGE8PS4xNT9pKj0xMDphPD0uMzU/aSo9NTphPD0uNzUmJihpKj0yKSxyWzBdPU1hdGguY2VpbChyWzBdL2kpKmksclsxXT1NYXRoLmZsb29yKHJbMV0vaSkqaSsuNSppLHJbMl09aSxyfWZ1bmN0aW9uIGJvKGUscil7cmV0dXJuIHQucmFuZ2UuYXBwbHkodCx4byhlLHIpKX1mdW5jdGlvbiBfbyhlLHIsbil7dmFyIGk9eG8oZSxyKTtpZihuKXt2YXIgYT1MZS5leGVjKG4pO2lmKGEuc2hpZnQoKSxcInNcIj09PWFbOF0pe3ZhciBvPXQuZm9ybWF0UHJlZml4KE1hdGgubWF4KHkoaVswXSkseShpWzFdKSkpO3JldHVybiBhWzddfHwoYVs3XT1cIi5cIitrbyhvLnNjYWxlKGlbMl0pKSksYVs4XT1cImZcIixuPXQuZm9ybWF0KGEuam9pbihcIlwiKSksZnVuY3Rpb24odCl7cmV0dXJuIG4oby5zY2FsZSh0KSkrby5zeW1ib2x9fWFbN118fChhWzddPVwiLlwiK2Z1bmN0aW9uKHQsZSl7dmFyIHI9a28oZVsyXSk7cmV0dXJuIHQgaW4gd28/TWF0aC5hYnMoci1rbyhNYXRoLm1heCh5KGVbMF0pLHkoZVsxXSkpKSkrICsoXCJlXCIhPT10KTpyLTIqKFwiJVwiPT09dCl9KGFbOF0saSkpLG49YS5qb2luKFwiXCIpfWVsc2Ugbj1cIiwuXCIra28oaVsyXSkrXCJmXCI7cmV0dXJuIHQuZm9ybWF0KG4pfXQuc2NhbGUubGluZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4saSl7dmFyIGEsbztmdW5jdGlvbiBzKCl7dmFyIHQ9TWF0aC5taW4oZS5sZW5ndGgsci5sZW5ndGgpPjI/dm86aG8scz1pP21hOnZhO3JldHVybiBhPXQoZSxyLHMsbiksbz10KHIsZSxzLFppKSxsfWZ1bmN0aW9uIGwodCl7cmV0dXJuIGEodCl9bC5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG8odCl9O2wuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQubWFwKE51bWJlcikscygpKTplfTtsLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQscygpKTpyfTtsLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGwucmFuZ2UodCkuaW50ZXJwb2xhdGUoY2EpfTtsLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQscygpKTppfTtsLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQscygpKTpufTtsLnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBibyhlLHQpfTtsLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxyKXtyZXR1cm4gX28oZSx0LHIpfTtsLm5pY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHlvKGUsdCkscygpfTtsLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChlLHIsbixpKX07cmV0dXJuIHMoKX0oWzAsMV0sWzAsMV0sWmksITEpfTt2YXIgd289e3M6MSxnOjEscDoxLHI6MSxlOjF9O2Z1bmN0aW9uIGtvKHQpe3JldHVybi1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4xMCsuMDEpfXQuc2NhbGUubG9nPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUocixuLGksYSl7ZnVuY3Rpb24gbyh0KXtyZXR1cm4oaT9NYXRoLmxvZyh0PDA/MDp0KTotTWF0aC5sb2codD4wPzA6LXQpKS9NYXRoLmxvZyhuKX1mdW5jdGlvbiBzKHQpe3JldHVybiBpP01hdGgucG93KG4sdCk6LU1hdGgucG93KG4sLXQpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIHIobyh0KSl9bC5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHMoci5pbnZlcnQodCkpfTtsLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10WzBdPj0wLHIuZG9tYWluKChhPXQubWFwKE51bWJlcikpLm1hcChvKSksbCk6YX07bC5iYXNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LHIuZG9tYWluKGEubWFwKG8pKSxsKTpufTtsLm5pY2U9ZnVuY3Rpb24oKXt2YXIgdD1mbyhhLm1hcChvKSxpP01hdGg6VG8pO3JldHVybiByLmRvbWFpbih0KSxhPXQubWFwKHMpLGx9O2wudGlja3M9ZnVuY3Rpb24oKXt2YXIgdD1jbyhhKSxlPVtdLHI9dFswXSxsPXRbMV0sYz1NYXRoLmZsb29yKG8ocikpLHU9TWF0aC5jZWlsKG8obCkpLGg9biUxPzI6bjtpZihpc0Zpbml0ZSh1LWMpKXtpZihpKXtmb3IoO2M8dTtjKyspZm9yKHZhciBmPTE7ZjxoO2YrKyllLnB1c2gocyhjKSpmKTtlLnB1c2gocyhjKSl9ZWxzZSBmb3IoZS5wdXNoKHMoYykpO2MrKzx1Oylmb3IodmFyIGY9aC0xO2Y+MDtmLS0pZS5wdXNoKHMoYykqZik7Zm9yKGM9MDtlW2NdPHI7YysrKTtmb3IodT1lLmxlbmd0aDtlW3UtMV0+bDt1LS0pO2U9ZS5zbGljZShjLHUpfXJldHVybiBlfTtsLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZSxyKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gQW87YXJndW1lbnRzLmxlbmd0aDwyP3I9QW86XCJmdW5jdGlvblwiIT10eXBlb2YgciYmKHI9dC5mb3JtYXQocikpO3ZhciBpPU1hdGgubWF4KDEsbiplL2wudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10L3MoTWF0aC5yb3VuZChvKHQpKSk7cmV0dXJuIGUqbjxuLS41JiYoZSo9biksZTw9aT9yKHQpOlwiXCJ9fTtsLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZShyLmNvcHkoKSxuLGksYSl9O3JldHVybiBtbyhsLHIpfSh0LnNjYWxlLmxpbmVhcigpLmRvbWFpbihbMCwxXSksMTAsITAsWzEsMTBdKX07dmFyIEFvPXQuZm9ybWF0KFwiLjBlXCIpLFRvPXtmbG9vcjpmdW5jdGlvbih0KXtyZXR1cm4tTWF0aC5jZWlsKC10KX0sY2VpbDpmdW5jdGlvbih0KXtyZXR1cm4tTWF0aC5mbG9vcigtdCl9fTtmdW5jdGlvbiBNbyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGU8MD8tTWF0aC5wb3coLWUsdCk6TWF0aC5wb3coZSx0KX19dC5zY2FsZS5wb3c9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbil7dmFyIGk9TW8ociksYT1NbygxL3IpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIGUoaSh0KSl9by5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGEoZS5pbnZlcnQodCkpfTtvLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZS5kb21haW4oKG49dC5tYXAoTnVtYmVyKSkubWFwKGkpKSxvKTpufTtvLnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBibyhuLHQpfTtvLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gX28obix0LGUpfTtvLm5pY2U9ZnVuY3Rpb24odCl7cmV0dXJuIG8uZG9tYWluKHlvKG4sdCkpfTtvLmV4cG9uZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPU1vKHI9dCksYT1NbygxL3IpLGUuZG9tYWluKG4ubWFwKGkpKSxvKTpyfTtvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChlLmNvcHkoKSxyLG4pfTtyZXR1cm4gbW8obyxlKX0odC5zY2FsZS5saW5lYXIoKSwxLFswLDFdKX0sdC5zY2FsZS5zcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuc2NhbGUucG93KCkuZXhwb25lbnQoLjUpfSx0LnNjYWxlLm9yZGluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZShyLG4pe3ZhciBpLGEsbztmdW5jdGlvbiBzKHQpe3JldHVybiBhWygoaS5nZXQodCl8fChcInJhbmdlXCI9PT1uLnQ/aS5zZXQodCxyLnB1c2godCkpOk5hTikpLTEpJWEubGVuZ3RoXX1mdW5jdGlvbiBsKGUsbil7cmV0dXJuIHQucmFuZ2Uoci5sZW5ndGgpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZStuKnR9KX1zLmRvbWFpbj1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcjtyPVtdLGk9bmV3IGI7Zm9yKHZhciBlLGE9LTEsbz10Lmxlbmd0aDsrK2E8bzspaS5oYXMoZT10W2FdKXx8aS5zZXQoZSxyLnB1c2goZSkpO3JldHVybiBzW24udF0uYXBwbHkocyxuLmEpfTtzLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsbz0wLG49e3Q6XCJyYW5nZVwiLGE6YXJndW1lbnRzfSxzKTphfTtzLnJhbmdlUG9pbnRzPWZ1bmN0aW9uKHQsZSl7YXJndW1lbnRzLmxlbmd0aDwyJiYoZT0wKTt2YXIgaT10WzBdLGM9dFsxXSx1PXIubGVuZ3RoPDI/KGk9KGkrYykvMiwwKTooYy1pKS8oci5sZW5ndGgtMStlKTtyZXR1cm4gYT1sKGkrdSplLzIsdSksbz0wLG49e3Q6XCJyYW5nZVBvaW50c1wiLGE6YXJndW1lbnRzfSxzfTtzLnJhbmdlUm91bmRQb2ludHM9ZnVuY3Rpb24odCxlKXthcmd1bWVudHMubGVuZ3RoPDImJihlPTApO3ZhciBpPXRbMF0sYz10WzFdLHU9ci5sZW5ndGg8Mj8oaT1jPU1hdGgucm91bmQoKGkrYykvMiksMCk6KGMtaSkvKHIubGVuZ3RoLTErZSl8MDtyZXR1cm4gYT1sKGkrTWF0aC5yb3VuZCh1KmUvMisoYy1pLShyLmxlbmd0aC0xK2UpKnUpLzIpLHUpLG89MCxuPXt0OlwicmFuZ2VSb3VuZFBvaW50c1wiLGE6YXJndW1lbnRzfSxzfTtzLnJhbmdlQmFuZHM9ZnVuY3Rpb24odCxlLGkpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9MCksYXJndW1lbnRzLmxlbmd0aDwzJiYoaT1lKTt2YXIgYz10WzFdPHRbMF0sdT10W2MtMF0saD10WzEtY10sZj0oaC11KS8oci5sZW5ndGgtZSsyKmkpO3JldHVybiBhPWwodStmKmksZiksYyYmYS5yZXZlcnNlKCksbz1mKigxLWUpLG49e3Q6XCJyYW5nZUJhbmRzXCIsYTphcmd1bWVudHN9LHN9O3MucmFuZ2VSb3VuZEJhbmRzPWZ1bmN0aW9uKHQsZSxpKXthcmd1bWVudHMubGVuZ3RoPDImJihlPTApLGFyZ3VtZW50cy5sZW5ndGg8MyYmKGk9ZSk7dmFyIGM9dFsxXTx0WzBdLHU9dFtjLTBdLGg9dFsxLWNdLGY9TWF0aC5mbG9vcigoaC11KS8oci5sZW5ndGgtZSsyKmkpKTtyZXR1cm4gYT1sKHUrTWF0aC5yb3VuZCgoaC11LShyLmxlbmd0aC1lKSpmKS8yKSxmKSxjJiZhLnJldmVyc2UoKSxvPU1hdGgucm91bmQoZiooMS1lKSksbj17dDpcInJhbmdlUm91bmRCYW5kc1wiLGE6YXJndW1lbnRzfSxzfTtzLnJhbmdlQmFuZD1mdW5jdGlvbigpe3JldHVybiBvfTtzLnJhbmdlRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGNvKG4uYVswXSl9O3MuY29weT1mdW5jdGlvbigpe3JldHVybiBlKHIsbil9O3JldHVybiBzLmRvbWFpbihyKX0oW10se3Q6XCJyYW5nZVwiLGE6W1tdXX0pfSx0LnNjYWxlLmNhdGVnb3J5MTA9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoU28pfSx0LnNjYWxlLmNhdGVnb3J5MjA9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoRW8pfSx0LnNjYWxlLmNhdGVnb3J5MjBiPWZ1bmN0aW9uKCl7cmV0dXJuIHQuc2NhbGUub3JkaW5hbCgpLnJhbmdlKENvKX0sdC5zY2FsZS5jYXRlZ29yeTIwYz1mdW5jdGlvbigpe3JldHVybiB0LnNjYWxlLm9yZGluYWwoKS5yYW5nZShMbyl9O3ZhciBTbz1bMjA2MjI2MCwxNjc0NDIwNiwyOTI0NTg4LDE0MDM0NzI4LDk3MjU4ODUsOTE5NzEzMSwxNDkwNzMzMCw4MzU1NzExLDEyMzY5MTg2LDE1NTYxNzVdLm1hcChzZSksRW89WzIwNjIyNjAsMTE0NTQ0NDAsMTY3NDQyMDYsMTY3NTk2NzIsMjkyNDU4OCwxMDAxODY5OCwxNDAzNDcyOCwxNjc1MDc0Miw5NzI1ODg1LDEyOTU1ODYxLDkxOTcxMzEsMTI4ODUxNDAsMTQ5MDczMzAsMTYyMzQxOTQsODM1NTcxMSwxMzA5MjgwNywxMjM2OTE4NiwxNDQwODU4OSwxNTU2MTc1LDEwNDEwNzI1XS5tYXAoc2UpLENvPVszNzUwNzc3LDUzOTU2MTksNzA0MDcxOSwxMDI2NDI4Niw2NTE5MDk3LDkyMTY1OTQsMTE5MTUxMTUsMTM1NTY2MzYsOTIwMjk5MywxMjQyNjgwOSwxNTE4NjUxNCwxNTE5MDkzMiw4NjY2MTY5LDExMzU2NDkwLDE0MDQ5NjQzLDE1MTc3MzcyLDgwNzc2ODMsMTA4MzQzMjQsMTM1Mjg1MDksMTQ1ODk2NTRdLm1hcChzZSksTG89WzMyNDQ3MzMsNzA1NzExMCwxMDQwNjYyNSwxMzAzMjQzMSwxNTA5NTA1MywxNjYxNjc2NCwxNjYyNTI1OSwxNjYzNDAxOCwzMjUzMDc2LDc2NTI0NzAsMTA2MDcwMDMsMTMxMDE1MDQsNzY5NTI4MSwxMDM5NDMxMiwxMjM2OTM3MiwxNDM0Mjg5MSw2NTEzNTA3LDk4Njg5NTAsMTI0MzQ4NzcsMTQyNzcwODFdLm1hcChzZSk7ZnVuY3Rpb24gem8oKXtyZXR1cm4gMH10LnNjYWxlLnF1YW50aWxlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUocixuKXt2YXIgaTtmdW5jdGlvbiBhKCl7dmFyIGU9MCxhPW4ubGVuZ3RoO2ZvcihpPVtdOysrZTxhOylpW2UtMV09dC5xdWFudGlsZShyLGUvYSk7cmV0dXJuIG99ZnVuY3Rpb24gbyhlKXtpZighaXNOYU4oZT0rZSkpcmV0dXJuIG5bdC5iaXNlY3QoaSxlKV19by5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dC5tYXAocCkuZmlsdGVyKGQpLnNvcnQoZiksYSgpKTpyfTtvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsYSgpKTpufTtvLnF1YW50aWxlcz1mdW5jdGlvbigpe3JldHVybiBpfTtvLmludmVydEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4odD1uLmluZGV4T2YodCkpPDA/W05hTixOYU5dOlt0PjA/aVt0LTFdOnJbMF0sdDxpLmxlbmd0aD9pW3RdOnJbci5sZW5ndGgtMV1dfTtvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZShyLG4pfTtyZXR1cm4gYSgpfShbXSxbXSl9LHQuc2NhbGUucXVhbnRpemU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbil7dmFyIGksYTtmdW5jdGlvbiBvKHQpe3JldHVybiBuW01hdGgubWF4KDAsTWF0aC5taW4oYSxNYXRoLmZsb29yKGkqKHQtZSkpKSldfWZ1bmN0aW9uIHMoKXtyZXR1cm4gaT1uLmxlbmd0aC8oci1lKSxhPW4ubGVuZ3RoLTEsb31vLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdFswXSxyPSt0W3QubGVuZ3RoLTFdLHMoKSk6W2Uscl19O28ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxzKCkpOm59O28uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVyblt0PSh0PW4uaW5kZXhPZih0KSk8MD9OYU46dC9pK2UsdCsxL2ldfTtvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChlLHIsbil9O3JldHVybiBzKCl9KDAsMSxbMCwxXSl9LHQuc2NhbGUudGhyZXNob2xkPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUocixuKXtmdW5jdGlvbiBpKGUpe2lmKGU8PWUpcmV0dXJuIG5bdC5iaXNlY3QocixlKV19aS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxpKTpyfTtpLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsaSk6bn07aS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bi5pbmRleE9mKHQpLFtyW3QtMV0sclt0XV19O2kuY29weT1mdW5jdGlvbigpe3JldHVybiBlKHIsbil9O3JldHVybiBpfShbLjVdLFswLDFdKX0sdC5zY2FsZS5pZGVudGl0eT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuK3R9ci5pbnZlcnQ9cjtyLmRvbWFpbj1yLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQubWFwKHIpLHIpOmV9O3IudGlja3M9ZnVuY3Rpb24odCl7cmV0dXJuIGJvKGUsdCl9O3IudGlja0Zvcm1hdD1mdW5jdGlvbih0LHIpe3JldHVybiBfbyhlLHQscil9O3IuY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUpfTtyZXR1cm4gcn0oWzAsMV0pfSx0LnN2Zz17fSx0LnN2Zy5hcmM9ZnVuY3Rpb24oKXt2YXIgdD1JbyxlPURvLHI9em8sbj1PbyxpPVBvLGE9Um8sbz1GbztmdW5jdGlvbiBzKCl7dmFyIHM9TWF0aC5tYXgoMCwrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGM9TWF0aC5tYXgoMCwrZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHU9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktRXQsaD1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1FdCxmPU1hdGguYWJzKGgtdSkscD11Pmg/MDoxO2lmKGM8cyYmKGQ9YyxjPXMscz1kKSxmPj1TdClyZXR1cm4gbChjLHApKyhzP2wocywxLXApOlwiXCIpK1wiWlwiO3ZhciBkLGcsdixtLHkseCxiLF8sdyxrLEEsVCxNPTAsUz0wLEU9W107aWYoKG09KCtvLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8MCkvMikmJih2PW49PT1Pbz9NYXRoLnNxcnQocypzK2MqYyk6K24uYXBwbHkodGhpcyxhcmd1bWVudHMpLHB8fChTKj0tMSksYyYmKFM9RHQodi9jKk1hdGguc2luKG0pKSkscyYmKE09RHQodi9zKk1hdGguc2luKG0pKSkpLGMpe3k9YypNYXRoLmNvcyh1K1MpLHg9YypNYXRoLnNpbih1K1MpLGI9YypNYXRoLmNvcyhoLVMpLF89YypNYXRoLnNpbihoLVMpO3ZhciBDPU1hdGguYWJzKGgtdS0yKlMpPD1UdD8wOjE7aWYoUyYmQm8oeSx4LGIsXyk9PT1wXkMpe3ZhciBMPSh1K2gpLzI7eT1jKk1hdGguY29zKEwpLHg9YypNYXRoLnNpbihMKSxiPV89bnVsbH19ZWxzZSB5PXg9MDtpZihzKXt3PXMqTWF0aC5jb3MoaC1NKSxrPXMqTWF0aC5zaW4oaC1NKSxBPXMqTWF0aC5jb3ModStNKSxUPXMqTWF0aC5zaW4odStNKTt2YXIgej1NYXRoLmFicyh1LWgrMipNKTw9VHQ/MDoxO2lmKE0mJkJvKHcsayxBLFQpPT09MS1wXnope3ZhciBPPSh1K2gpLzI7dz1zKk1hdGguY29zKE8pLGs9cypNYXRoLnNpbihPKSxBPVQ9bnVsbH19ZWxzZSB3PWs9MDtpZihmPmt0JiYoZD1NYXRoLm1pbihNYXRoLmFicyhjLXMpLzIsK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSk+LjAwMSl7Zz1zPGNecD8wOjE7dmFyIEk9ZCxEPWQ7aWYoZjxUdCl7dmFyIFA9bnVsbD09QT9bdyxrXTpudWxsPT1iP1t5LHhdOnNpKFt5LHhdLFtBLFRdLFtiLF9dLFt3LGtdKSxSPXktUFswXSxGPXgtUFsxXSxCPWItUFswXSxOPV8tUFsxXSxqPTEvTWF0aC5zaW4oTWF0aC5hY29zKChSKkIrRipOKS8oTWF0aC5zcXJ0KFIqUitGKkYpKk1hdGguc3FydChCKkIrTipOKSkpLzIpLFY9TWF0aC5zcXJ0KFBbMF0qUFswXStQWzFdKlBbMV0pO0Q9TWF0aC5taW4oZCwocy1WKS8oai0xKSksST1NYXRoLm1pbihkLChjLVYpLyhqKzEpKX1pZihudWxsIT1iKXt2YXIgVT1ObyhudWxsPT1BP1t3LGtdOltBLFRdLFt5LHhdLGMsSSxwKSxxPU5vKFtiLF9dLFt3LGtdLGMsSSxwKTtkPT09ST9FLnB1c2goXCJNXCIsVVswXSxcIkFcIixJLFwiLFwiLEksXCIgMCAwLFwiLGcsXCIgXCIsVVsxXSxcIkFcIixjLFwiLFwiLGMsXCIgMCBcIiwxLXBeQm8oVVsxXVswXSxVWzFdWzFdLHFbMV1bMF0scVsxXVsxXSksXCIsXCIscCxcIiBcIixxWzFdLFwiQVwiLEksXCIsXCIsSSxcIiAwIDAsXCIsZyxcIiBcIixxWzBdKTpFLnB1c2goXCJNXCIsVVswXSxcIkFcIixJLFwiLFwiLEksXCIgMCAxLFwiLGcsXCIgXCIscVswXSl9ZWxzZSBFLnB1c2goXCJNXCIseSxcIixcIix4KTtpZihudWxsIT1BKXt2YXIgSD1ObyhbeSx4XSxbQSxUXSxzLC1ELHApLEc9Tm8oW3csa10sbnVsbD09Yj9beSx4XTpbYixfXSxzLC1ELHApO2Q9PT1EP0UucHVzaChcIkxcIixHWzBdLFwiQVwiLEQsXCIsXCIsRCxcIiAwIDAsXCIsZyxcIiBcIixHWzFdLFwiQVwiLHMsXCIsXCIscyxcIiAwIFwiLHBeQm8oR1sxXVswXSxHWzFdWzFdLEhbMV1bMF0sSFsxXVsxXSksXCIsXCIsMS1wLFwiIFwiLEhbMV0sXCJBXCIsRCxcIixcIixELFwiIDAgMCxcIixnLFwiIFwiLEhbMF0pOkUucHVzaChcIkxcIixHWzBdLFwiQVwiLEQsXCIsXCIsRCxcIiAwIDAsXCIsZyxcIiBcIixIWzBdKX1lbHNlIEUucHVzaChcIkxcIix3LFwiLFwiLGspfWVsc2UgRS5wdXNoKFwiTVwiLHksXCIsXCIseCksbnVsbCE9YiYmRS5wdXNoKFwiQVwiLGMsXCIsXCIsYyxcIiAwIFwiLEMsXCIsXCIscCxcIiBcIixiLFwiLFwiLF8pLEUucHVzaChcIkxcIix3LFwiLFwiLGspLG51bGwhPUEmJkUucHVzaChcIkFcIixzLFwiLFwiLHMsXCIgMCBcIix6LFwiLFwiLDEtcCxcIiBcIixBLFwiLFwiLFQpO3JldHVybiBFLnB1c2goXCJaXCIpLEUuam9pbihcIlwiKX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuXCJNMCxcIit0K1wiQVwiK3QrXCIsXCIrdCtcIiAwIDEsXCIrZStcIiAwLFwiKy10K1wiQVwiK3QrXCIsXCIrdCtcIiAwIDEsXCIrZStcIiAwLFwiK3R9cmV0dXJuIHMuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dmUoZSkscyk6dH0scy5vdXRlclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT12ZSh0KSxzKTplfSxzLmNvcm5lclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj12ZSh0KSxzKTpyfSxzLnBhZFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10PT1Pbz9Pbzp2ZSh0KSxzKTpufSxzLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dmUodCkscyk6aX0scy5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT12ZSh0KSxzKTphfSxzLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXZlKHQpLHMpOm99LHMuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgcj0oK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsbj0oK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItRXQ7cmV0dXJuW01hdGguY29zKG4pKnIsTWF0aC5zaW4obikqcl19LHN9O3ZhciBPbz1cImF1dG9cIjtmdW5jdGlvbiBJbyh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiBEbyh0KXtyZXR1cm4gdC5vdXRlclJhZGl1c31mdW5jdGlvbiBQbyh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIFJvKHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIEZvKHQpe3JldHVybiB0JiZ0LnBhZEFuZ2xlfWZ1bmN0aW9uIEJvKHQsZSxyLG4pe3JldHVybih0LXIpKmUtKGUtbikqdD4wPzA6MX1mdW5jdGlvbiBObyh0LGUscixuLGkpe3ZhciBhPXRbMF0tZVswXSxvPXRbMV0tZVsxXSxzPShpP246LW4pL01hdGguc3FydChhKmErbypvKSxsPXMqbyxjPS1zKmEsdT10WzBdK2wsaD10WzFdK2MsZj1lWzBdK2wscD1lWzFdK2MsZD0odStmKS8yLGc9KGgrcCkvMix2PWYtdSxtPXAtaCx5PXYqdittKm0seD1yLW4sYj11KnAtZipoLF89KG08MD8tMToxKSpNYXRoLnNxcnQoTWF0aC5tYXgoMCx4KngqeS1iKmIpKSx3PShiKm0tdipfKS95LGs9KC1iKnYtbSpfKS95LEE9KGIqbSt2Kl8pL3ksVD0oLWIqdittKl8pL3ksTT13LWQsUz1rLWcsRT1BLWQsQz1ULWc7cmV0dXJuIE0qTStTKlM+RSpFK0MqQyYmKHc9QSxrPVQpLFtbdy1sLGstY10sW3cqci94LGsqci94XV19ZnVuY3Rpb24gam8odCl7dmFyIGU9ZWkscj1yaSxuPVlyLGk9VW8sYT1pLmtleSxvPS43O2Z1bmN0aW9uIHMoYSl7dmFyIHMsbD1bXSxjPVtdLHU9LTEsaD1hLmxlbmd0aCxmPXZlKGUpLHA9dmUocik7ZnVuY3Rpb24gZCgpe2wucHVzaChcIk1cIixpKHQoYyksbykpfWZvcig7Kyt1PGg7KW4uY2FsbCh0aGlzLHM9YVt1XSx1KT9jLnB1c2goWytmLmNhbGwodGhpcyxzLHUpLCtwLmNhbGwodGhpcyxzLHUpXSk6Yy5sZW5ndGgmJihkKCksYz1bXSk7cmV0dXJuIGMubGVuZ3RoJiZkKCksbC5sZW5ndGg/bC5qb2luKFwiXCIpOm51bGx9cmV0dXJuIHMueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LHMpOmV9LHMueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LHMpOnJ9LHMuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LHMpOm59LHMuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9XCJmdW5jdGlvblwiPT10eXBlb2YgdD9pPXQ6KGk9Vm8uZ2V0KHQpfHxVbykua2V5LHMpOmF9LHMudGVuc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LHMpOm99LHN9dC5zdmcubGluZT1mdW5jdGlvbigpe3JldHVybiBqbyh6KX07dmFyIFZvPXQubWFwKHtsaW5lYXI6VW8sXCJsaW5lYXItY2xvc2VkXCI6cW8sc3RlcDpmdW5jdGlvbih0KXt2YXIgZT0wLHI9dC5sZW5ndGgsbj10WzBdLGk9W25bMF0sXCIsXCIsblsxXV07Zm9yKDsrK2U8cjspaS5wdXNoKFwiSFwiLChuWzBdKyhuPXRbZV0pWzBdKS8yLFwiVlwiLG5bMV0pO3I+MSYmaS5wdXNoKFwiSFwiLG5bMF0pO3JldHVybiBpLmpvaW4oXCJcIil9LFwic3RlcC1iZWZvcmVcIjpIbyxcInN0ZXAtYWZ0ZXJcIjpHbyxiYXNpczpYbyxcImJhc2lzLW9wZW5cIjpmdW5jdGlvbih0KXtpZih0Lmxlbmd0aDw0KXJldHVybiBVbyh0KTt2YXIgZSxyPVtdLG49LTEsaT10Lmxlbmd0aCxhPVswXSxvPVswXTtmb3IoOysrbjwzOyllPXRbbl0sYS5wdXNoKGVbMF0pLG8ucHVzaChlWzFdKTtyLnB1c2goWm8oS28sYSkrXCIsXCIrWm8oS28sbykpLC0tbjtmb3IoOysrbjxpOyllPXRbbl0sYS5zaGlmdCgpLGEucHVzaChlWzBdKSxvLnNoaWZ0KCksby5wdXNoKGVbMV0pLFFvKHIsYSxvKTtyZXR1cm4gci5qb2luKFwiXCIpfSxcImJhc2lzLWNsb3NlZFwiOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbj0tMSxpPXQubGVuZ3RoLGE9aSs0LG89W10scz1bXTtmb3IoOysrbjw0OylyPXRbbiVpXSxvLnB1c2goclswXSkscy5wdXNoKHJbMV0pO2U9W1pvKEtvLG8pLFwiLFwiLFpvKEtvLHMpXSwtLW47Zm9yKDsrK248YTspcj10W24laV0sby5zaGlmdCgpLG8ucHVzaChyWzBdKSxzLnNoaWZ0KCkscy5wdXNoKHJbMV0pLFFvKGUsbyxzKTtyZXR1cm4gZS5qb2luKFwiXCIpfSxidW5kbGU6ZnVuY3Rpb24odCxlKXt2YXIgcj10Lmxlbmd0aC0xO2lmKHIpZm9yKHZhciBuLGksYT10WzBdWzBdLG89dFswXVsxXSxzPXRbcl1bMF0tYSxsPXRbcl1bMV0tbyxjPS0xOysrYzw9cjspbj10W2NdLGk9Yy9yLG5bMF09ZSpuWzBdKygxLWUpKihhK2kqcyksblsxXT1lKm5bMV0rKDEtZSkqKG8raSpsKTtyZXR1cm4gWG8odCl9LGNhcmRpbmFsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoPDM/VW8odCk6dFswXStZbyh0LFdvKHQsZSkpfSxcImNhcmRpbmFsLW9wZW5cIjpmdW5jdGlvbih0LGUpe3JldHVybiB0Lmxlbmd0aDw0P1VvKHQpOnRbMV0rWW8odC5zbGljZSgxLC0xKSxXbyh0LGUpKX0sXCJjYXJkaW5hbC1jbG9zZWRcIjpmdW5jdGlvbih0LGUpe3JldHVybiB0Lmxlbmd0aDwzP3FvKHQpOnRbMF0rWW8oKHQucHVzaCh0WzBdKSx0KSxXbyhbdFt0Lmxlbmd0aC0yXV0uY29uY2F0KHQsW3RbMV1dKSxlKSl9LG1vbm90b25lOmZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aDwzP1VvKHQpOnRbMF0rWW8odCxmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhPVtdLG89ZnVuY3Rpb24odCl7dmFyIGU9MCxyPXQubGVuZ3RoLTEsbj1bXSxpPXRbMF0sYT10WzFdLG89blswXT10cyhpLGEpO2Zvcig7KytlPHI7KW5bZV09KG8rKG89dHMoaT1hLGE9dFtlKzFdKSkpLzI7cmV0dXJuIG5bZV09byxufSh0KSxzPS0xLGw9dC5sZW5ndGgtMTtmb3IoOysrczxsOyllPXRzKHRbc10sdFtzKzFdKSx5KGUpPGt0P29bc109b1tzKzFdPTA6KHI9b1tzXS9lLG49b1tzKzFdL2UsKGk9cipyK24qbik+OSYmKGk9MyplL01hdGguc3FydChpKSxvW3NdPWkqcixvW3MrMV09aSpuKSk7cz0tMTtmb3IoOysrczw9bDspaT0odFtNYXRoLm1pbihsLHMrMSldWzBdLXRbTWF0aC5tYXgoMCxzLTEpXVswXSkvKDYqKDErb1tzXSpvW3NdKSksYS5wdXNoKFtpfHwwLG9bc10qaXx8MF0pO3JldHVybiBhfSh0KSl9fSk7ZnVuY3Rpb24gVW8odCl7cmV0dXJuIHQubGVuZ3RoPjE/dC5qb2luKFwiTFwiKTp0K1wiWlwifWZ1bmN0aW9uIHFvKHQpe3JldHVybiB0LmpvaW4oXCJMXCIpK1wiWlwifWZ1bmN0aW9uIEhvKHQpe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGgsbj10WzBdLGk9W25bMF0sXCIsXCIsblsxXV07KytlPHI7KWkucHVzaChcIlZcIiwobj10W2VdKVsxXSxcIkhcIixuWzBdKTtyZXR1cm4gaS5qb2luKFwiXCIpfWZ1bmN0aW9uIEdvKHQpe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGgsbj10WzBdLGk9W25bMF0sXCIsXCIsblsxXV07KytlPHI7KWkucHVzaChcIkhcIiwobj10W2VdKVswXSxcIlZcIixuWzFdKTtyZXR1cm4gaS5qb2luKFwiXCIpfWZ1bmN0aW9uIFlvKHQsZSl7aWYoZS5sZW5ndGg8MXx8dC5sZW5ndGghPWUubGVuZ3RoJiZ0Lmxlbmd0aCE9ZS5sZW5ndGgrMilyZXR1cm4gVW8odCk7dmFyIHI9dC5sZW5ndGghPWUubGVuZ3RoLG49XCJcIixpPXRbMF0sYT10WzFdLG89ZVswXSxzPW8sbD0xO2lmKHImJihuKz1cIlFcIisoYVswXS0yKm9bMF0vMykrXCIsXCIrKGFbMV0tMipvWzFdLzMpK1wiLFwiK2FbMF0rXCIsXCIrYVsxXSxpPXRbMV0sbD0yKSxlLmxlbmd0aD4xKXtzPWVbMV0sYT10W2xdLGwrKyxuKz1cIkNcIisoaVswXStvWzBdKStcIixcIisoaVsxXStvWzFdKStcIixcIisoYVswXS1zWzBdKStcIixcIisoYVsxXS1zWzFdKStcIixcIithWzBdK1wiLFwiK2FbMV07Zm9yKHZhciBjPTI7YzxlLmxlbmd0aDtjKyssbCsrKWE9dFtsXSxzPWVbY10sbis9XCJTXCIrKGFbMF0tc1swXSkrXCIsXCIrKGFbMV0tc1sxXSkrXCIsXCIrYVswXStcIixcIithWzFdfWlmKHIpe3ZhciB1PXRbbF07bis9XCJRXCIrKGFbMF0rMipzWzBdLzMpK1wiLFwiKyhhWzFdKzIqc1sxXS8zKStcIixcIit1WzBdK1wiLFwiK3VbMV19cmV0dXJuIG59ZnVuY3Rpb24gV28odCxlKXtmb3IodmFyIHIsbj1bXSxpPSgxLWUpLzIsYT10WzBdLG89dFsxXSxzPTEsbD10Lmxlbmd0aDsrK3M8bDspcj1hLGE9byxvPXRbc10sbi5wdXNoKFtpKihvWzBdLXJbMF0pLGkqKG9bMV0tclsxXSldKTtyZXR1cm4gbn1mdW5jdGlvbiBYbyh0KXtpZih0Lmxlbmd0aDwzKXJldHVybiBVbyh0KTt2YXIgZT0xLHI9dC5sZW5ndGgsbj10WzBdLGk9blswXSxhPW5bMV0sbz1baSxpLGksKG49dFsxXSlbMF1dLHM9W2EsYSxhLG5bMV1dLGw9W2ksXCIsXCIsYSxcIkxcIixabyhLbyxvKSxcIixcIixabyhLbyxzKV07Zm9yKHQucHVzaCh0W3ItMV0pOysrZTw9cjspbj10W2VdLG8uc2hpZnQoKSxvLnB1c2goblswXSkscy5zaGlmdCgpLHMucHVzaChuWzFdKSxRbyhsLG8scyk7cmV0dXJuIHQucG9wKCksbC5wdXNoKFwiTFwiLG4pLGwuam9pbihcIlwiKX1mdW5jdGlvbiBabyh0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXSt0WzNdKmVbM119Vm8uZm9yRWFjaChmdW5jdGlvbih0LGUpe2Uua2V5PXQsZS5jbG9zZWQ9Ly1jbG9zZWQkLy50ZXN0KHQpfSk7dmFyICRvPVswLDIvMywxLzMsMF0sSm89WzAsMS8zLDIvMywwXSxLbz1bMCwxLzYsMi8zLDEvNl07ZnVuY3Rpb24gUW8odCxlLHIpe3QucHVzaChcIkNcIixabygkbyxlKSxcIixcIixabygkbyxyKSxcIixcIixabyhKbyxlKSxcIixcIixabyhKbyxyKSxcIixcIixabyhLbyxlKSxcIixcIixabyhLbyxyKSl9ZnVuY3Rpb24gdHModCxlKXtyZXR1cm4oZVsxXS10WzFdKS8oZVswXS10WzBdKX1mdW5jdGlvbiBlcyh0KXtmb3IodmFyIGUscixuLGk9LTEsYT10Lmxlbmd0aDsrK2k8YTspcj0oZT10W2ldKVswXSxuPWVbMV0tRXQsZVswXT1yKk1hdGguY29zKG4pLGVbMV09cipNYXRoLnNpbihuKTtyZXR1cm4gdH1mdW5jdGlvbiBycyh0KXt2YXIgZT1laSxyPWVpLG49MCxpPXJpLGE9WXIsbz1VbyxzPW8ua2V5LGw9byxjPVwiTFwiLHU9Ljc7ZnVuY3Rpb24gaChzKXt2YXIgaCxmLHAsZD1bXSxnPVtdLHY9W10sbT0tMSx5PXMubGVuZ3RoLHg9dmUoZSksYj12ZShuKSxfPWU9PT1yP2Z1bmN0aW9uKCl7cmV0dXJuIGZ9OnZlKHIpLHc9bj09PWk/ZnVuY3Rpb24oKXtyZXR1cm4gcH06dmUoaSk7ZnVuY3Rpb24gaygpe2QucHVzaChcIk1cIixvKHQodiksdSksYyxsKHQoZy5yZXZlcnNlKCkpLHUpLFwiWlwiKX1mb3IoOysrbTx5OylhLmNhbGwodGhpcyxoPXNbbV0sbSk/KGcucHVzaChbZj0reC5jYWxsKHRoaXMsaCxtKSxwPStiLmNhbGwodGhpcyxoLG0pXSksdi5wdXNoKFsrXy5jYWxsKHRoaXMsaCxtKSwrdy5jYWxsKHRoaXMsaCxtKV0pKTpnLmxlbmd0aCYmKGsoKSxnPVtdLHY9W10pO3JldHVybiBnLmxlbmd0aCYmaygpLGQubGVuZ3RoP2Quam9pbihcIlwiKTpudWxsfXJldHVybiBoLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cj10LGgpOnJ9LGgueDA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxoKTplfSxoLngxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsaCk6cn0saC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWk9dCxoKTppfSxoLnkwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsaCk6bn0saC55MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGgpOml9LGguZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LGgpOmF9LGguaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9XCJmdW5jdGlvblwiPT10eXBlb2YgdD9vPXQ6KG89Vm8uZ2V0KHQpfHxVbykua2V5LGw9by5yZXZlcnNlfHxvLGM9by5jbG9zZWQ/XCJNXCI6XCJMXCIsaCk6c30saC50ZW5zaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsaCk6dX0saH1mdW5jdGlvbiBucyh0KXtyZXR1cm4gdC5yYWRpdXN9ZnVuY3Rpb24gaXModCl7cmV0dXJuW3QueCx0LnldfWZ1bmN0aW9uIGFzKCl7cmV0dXJuIDY0fWZ1bmN0aW9uIG9zKCl7cmV0dXJuXCJjaXJjbGVcIn1mdW5jdGlvbiBzcyh0KXt2YXIgZT1NYXRoLnNxcnQodC9UdCk7cmV0dXJuXCJNMCxcIitlK1wiQVwiK2UrXCIsXCIrZStcIiAwIDEsMSAwLFwiKy1lK1wiQVwiK2UrXCIsXCIrZStcIiAwIDEsMSAwLFwiK2UrXCJaXCJ9dC5zdmcubGluZS5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgdD1qbyhlcyk7cmV0dXJuIHQucmFkaXVzPXQueCxkZWxldGUgdC54LHQuYW5nbGU9dC55LGRlbGV0ZSB0LnksdH0sSG8ucmV2ZXJzZT1HbyxHby5yZXZlcnNlPUhvLHQuc3ZnLmFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gcnMoeil9LHQuc3ZnLmFyZWEucmFkaWFsPWZ1bmN0aW9uKCl7dmFyIHQ9cnMoZXMpO3JldHVybiB0LnJhZGl1cz10LngsZGVsZXRlIHQueCx0LmlubmVyUmFkaXVzPXQueDAsZGVsZXRlIHQueDAsdC5vdXRlclJhZGl1cz10LngxLGRlbGV0ZSB0LngxLHQuYW5nbGU9dC55LGRlbGV0ZSB0LnksdC5zdGFydEFuZ2xlPXQueTAsZGVsZXRlIHQueTAsdC5lbmRBbmdsZT10LnkxLGRlbGV0ZSB0LnkxLHR9LHQuc3ZnLmNob3JkPWZ1bmN0aW9uKCl7dmFyIHQ9Vm4sZT1VbixyPW5zLG49UG8saT1SbztmdW5jdGlvbiBhKHIsbil7dmFyIGksYSxjPW8odGhpcyx0LHIsbiksdT1vKHRoaXMsZSxyLG4pO3JldHVyblwiTVwiK2MucDArcyhjLnIsYy5wMSxjLmExLWMuYTApKyhhPXUsKGk9YykuYTA9PWEuYTAmJmkuYTE9PWEuYTE/bChjLnIsYy5wMSxjLnIsYy5wMCk6bChjLnIsYy5wMSx1LnIsdS5wMCkrcyh1LnIsdS5wMSx1LmExLXUuYTApK2wodS5yLHUucDEsYy5yLGMucDApKStcIlpcIn1mdW5jdGlvbiBvKHQsZSxhLG8pe3ZhciBzPWUuY2FsbCh0LGEsbyksbD1yLmNhbGwodCxzLG8pLGM9bi5jYWxsKHQscyxvKS1FdCx1PWkuY2FsbCh0LHMsbyktRXQ7cmV0dXJue3I6bCxhMDpjLGExOnUscDA6W2wqTWF0aC5jb3MoYyksbCpNYXRoLnNpbihjKV0scDE6W2wqTWF0aC5jb3ModSksbCpNYXRoLnNpbih1KV19fWZ1bmN0aW9uIHModCxlLHIpe3JldHVyblwiQVwiK3QrXCIsXCIrdCtcIiAwIFwiKyArKHI+VHQpK1wiLDEgXCIrZX1mdW5jdGlvbiBsKHQsZSxyLG4pe3JldHVyblwiUSAwLDAgXCIrbn1yZXR1cm4gYS5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dmUodCksYSk6cn0sYS5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dmUoZSksYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dmUodCksYSk6ZX0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXZlKHQpLGEpOm59LGEuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dmUodCksYSk6aX0sYX0sdC5zdmcuZGlhZ29uYWw9ZnVuY3Rpb24oKXt2YXIgdD1WbixlPVVuLHI9aXM7ZnVuY3Rpb24gbihuLGkpe3ZhciBhPXQuY2FsbCh0aGlzLG4saSksbz1lLmNhbGwodGhpcyxuLGkpLHM9KGEueStvLnkpLzIsbD1bYSx7eDphLngseTpzfSx7eDpvLngseTpzfSxvXTtyZXR1cm5cIk1cIisobD1sLm1hcChyKSlbMF0rXCJDXCIrbFsxXStcIiBcIitsWzJdK1wiIFwiK2xbM119cmV0dXJuIG4uc291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXZlKGUpLG4pOnR9LG4udGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXZlKHQpLG4pOmV9LG4ucHJvamVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG59LHQuc3ZnLmRpYWdvbmFsLnJhZGlhbD1mdW5jdGlvbigpe3ZhciBlPXQuc3ZnLmRpYWdvbmFsKCkscj1pcyxuPWUucHJvamVjdGlvbjtyZXR1cm4gZS5wcm9qZWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cykscj1lWzBdLG49ZVsxXS1FdDtyZXR1cm5bcipNYXRoLmNvcyhuKSxyKk1hdGguc2luKG4pXX19KHI9dCkpOnJ9LGV9LHQuc3ZnLnN5bWJvbD1mdW5jdGlvbigpe3ZhciB0PW9zLGU9YXM7ZnVuY3Rpb24gcihyLG4pe3JldHVybihscy5nZXQodC5jYWxsKHRoaXMscixuKSl8fHNzKShlLmNhbGwodGhpcyxyLG4pKX1yZXR1cm4gci50eXBlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXZlKGUpLHIpOnR9LHIuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT12ZSh0KSxyKTplfSxyfTt2YXIgbHM9dC5tYXAoe2NpcmNsZTpzcyxjcm9zczpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodC81KS8yO3JldHVyblwiTVwiKy0zKmUrXCIsXCIrLWUrXCJIXCIrLWUrXCJWXCIrLTMqZStcIkhcIitlK1wiVlwiKy1lK1wiSFwiKzMqZStcIlZcIitlK1wiSFwiK2UrXCJWXCIrMyplK1wiSFwiKy1lK1wiVlwiK2UrXCJIXCIrLTMqZStcIlpcIn0sZGlhbW9uZDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodC8oMip1cykpLHI9ZSp1cztyZXR1cm5cIk0wLFwiKy1lK1wiTFwiK3IrXCIsMCAwLFwiK2UrXCIgXCIrLXIrXCIsMFpcIn0sc3F1YXJlOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0KS8yO3JldHVyblwiTVwiKy1lK1wiLFwiKy1lK1wiTFwiK2UrXCIsXCIrLWUrXCIgXCIrZStcIixcIitlK1wiIFwiKy1lK1wiLFwiK2UrXCJaXCJ9LFwidHJpYW5nbGUtZG93blwiOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0L2NzKSxyPWUqY3MvMjtyZXR1cm5cIk0wLFwiK3IrXCJMXCIrZStcIixcIistcitcIiBcIistZStcIixcIistcitcIlpcIn0sXCJ0cmlhbmdsZS11cFwiOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0L2NzKSxyPWUqY3MvMjtyZXR1cm5cIk0wLFwiKy1yK1wiTFwiK2UrXCIsXCIrcitcIiBcIistZStcIixcIityK1wiWlwifX0pO3Quc3ZnLnN5bWJvbFR5cGVzPWxzLmtleXMoKTt2YXIgY3M9TWF0aC5zcXJ0KDMpLHVzPU1hdGgudGFuKDMwKkN0KTtXLnRyYW5zaXRpb249ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbj1kc3x8KyttcyxpPWJzKHQpLGE9W10sbz1nc3x8e3RpbWU6RGF0ZS5ub3coKSxlYXNlOmlhLGRlbGF5OjAsZHVyYXRpb246MjUwfSxzPS0xLGw9dGhpcy5sZW5ndGg7KytzPGw7KXthLnB1c2goZT1bXSk7Zm9yKHZhciBjPXRoaXNbc10sdT0tMSxoPWMubGVuZ3RoOysrdTxoOykocj1jW3VdKSYmX3Mocix1LGksbixvKSxlLnB1c2gocil9cmV0dXJuIHBzKGEsaSxuKX0sVy5pbnRlcnJ1cHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaChudWxsPT10P2hzOmZzKGJzKHQpKSl9O3ZhciBocz1mcyhicygpKTtmdW5jdGlvbiBmcyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZSxyLG47KGU9dGhpc1t0XSkmJihuPWVbcj1lLmFjdGl2ZV0pJiYobi50aW1lci5jPW51bGwsbi50aW1lci50PU5hTiwtLWUuY291bnQ/ZGVsZXRlIGVbcl06ZGVsZXRlIHRoaXNbdF0sZS5hY3RpdmUrPS41LG4uZXZlbnQmJm4uZXZlbnQuaW50ZXJydXB0LmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLG4uaW5kZXgpKX19ZnVuY3Rpb24gcHModCxlLHIpe3JldHVybiBVKHQsdnMpLHQubmFtZXNwYWNlPWUsdC5pZD1yLHR9dmFyIGRzLGdzLHZzPVtdLG1zPTA7ZnVuY3Rpb24geXModCxlLHIsbil7dmFyIGk9dC5pZCxhPXQubmFtZXNwYWNlO3JldHVybiB1dCh0LFwiZnVuY3Rpb25cIj09dHlwZW9mIHI/ZnVuY3Rpb24odCxvLHMpe3RbYV1baV0udHdlZW4uc2V0KGUsbihyLmNhbGwodCx0Ll9fZGF0YV9fLG8scykpKX06KHI9bihyKSxmdW5jdGlvbih0KXt0W2FdW2ldLnR3ZWVuLnNldChlLHIpfSkpfWZ1bmN0aW9uIHhzKHQpe3JldHVybiBudWxsPT10JiYodD1cIlwiKSxmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gYnModCl7cmV0dXJuIG51bGw9PXQ/XCJfX3RyYW5zaXRpb25fX1wiOlwiX190cmFuc2l0aW9uX1wiK3QrXCJfX1wifWZ1bmN0aW9uIF9zKHQsZSxyLG4saSl7dmFyIGEsbyxzLGwsYyx1PXRbcl18fCh0W3JdPXthY3RpdmU6MCxjb3VudDowfSksaD11W25dO2Z1bmN0aW9uIGYocil7dmFyIGk9dS5hY3RpdmUsZj11W2ldO2Zvcih2YXIgZCBpbiBmJiYoZi50aW1lci5jPW51bGwsZi50aW1lci50PU5hTiwtLXUuY291bnQsZGVsZXRlIHVbaV0sZi5ldmVudCYmZi5ldmVudC5pbnRlcnJ1cHQuY2FsbCh0LHQuX19kYXRhX18sZi5pbmRleCkpLHUpaWYoK2Q8bil7dmFyIGc9dVtkXTtnLnRpbWVyLmM9bnVsbCxnLnRpbWVyLnQ9TmFOLC0tdS5jb3VudCxkZWxldGUgdVtkXX1vLmM9cCxBZShmdW5jdGlvbigpe3JldHVybiBvLmMmJnAocnx8MSkmJihvLmM9bnVsbCxvLnQ9TmFOKSwxfSwwLGEpLHUuYWN0aXZlPW4saC5ldmVudCYmaC5ldmVudC5zdGFydC5jYWxsKHQsdC5fX2RhdGFfXyxlKSxjPVtdLGgudHdlZW4uZm9yRWFjaChmdW5jdGlvbihyLG4peyhuPW4uY2FsbCh0LHQuX19kYXRhX18sZSkpJiZjLnB1c2gobil9KSxsPWguZWFzZSxzPWguZHVyYXRpb259ZnVuY3Rpb24gcChpKXtmb3IodmFyIGE9aS9zLG89bChhKSxmPWMubGVuZ3RoO2Y+MDspY1stLWZdLmNhbGwodCxvKTtpZihhPj0xKXJldHVybiBoLmV2ZW50JiZoLmV2ZW50LmVuZC5jYWxsKHQsdC5fX2RhdGFfXyxlKSwtLXUuY291bnQ/ZGVsZXRlIHVbbl06ZGVsZXRlIHRbcl0sMX1ofHwoYT1pLnRpbWUsbz1BZShmdW5jdGlvbih0KXt2YXIgZT1oLmRlbGF5O2lmKG8udD1lK2EsZTw9dClyZXR1cm4gZih0LWUpO28uYz1mfSwwLGEpLGg9dVtuXT17dHdlZW46bmV3IGIsdGltZTphLHRpbWVyOm8sZGVsYXk6aS5kZWxheSxkdXJhdGlvbjppLmR1cmF0aW9uLGVhc2U6aS5lYXNlLGluZGV4OmV9LGk9bnVsbCwrK3UuY291bnQpfXZzLmNhbGw9Vy5jYWxsLHZzLmVtcHR5PVcuZW1wdHksdnMubm9kZT1XLm5vZGUsdnMuc2l6ZT1XLnNpemUsdC50cmFuc2l0aW9uPWZ1bmN0aW9uKGUscil7cmV0dXJuIGUmJmUudHJhbnNpdGlvbj9kcz9lLnRyYW5zaXRpb24ocik6ZTp0LnNlbGVjdGlvbigpLnRyYW5zaXRpb24oZSl9LHQudHJhbnNpdGlvbi5wcm90b3R5cGU9dnMsdnMuc2VsZWN0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXRoaXMuaWQsYT10aGlzLm5hbWVzcGFjZSxvPVtdO3Q9WCh0KTtmb3IodmFyIHM9LTEsbD10aGlzLmxlbmd0aDsrK3M8bDspe28ucHVzaChlPVtdKTtmb3IodmFyIGM9dGhpc1tzXSx1PS0xLGg9Yy5sZW5ndGg7Kyt1PGg7KShuPWNbdV0pJiYocj10LmNhbGwobixuLl9fZGF0YV9fLHUscykpPyhcIl9fZGF0YV9fXCJpbiBuJiYoci5fX2RhdGFfXz1uLl9fZGF0YV9fKSxfcyhyLHUsYSxpLG5bYV1baV0pLGUucHVzaChyKSk6ZS5wdXNoKG51bGwpfXJldHVybiBwcyhvLGEsaSl9LHZzLnNlbGVjdEFsbD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG89dGhpcy5pZCxzPXRoaXMubmFtZXNwYWNlLGw9W107dD1aKHQpO2Zvcih2YXIgYz0tMSx1PXRoaXMubGVuZ3RoOysrYzx1Oylmb3IodmFyIGg9dGhpc1tjXSxmPS0xLHA9aC5sZW5ndGg7KytmPHA7KWlmKG49aFtmXSl7YT1uW3NdW29dLHI9dC5jYWxsKG4sbi5fX2RhdGFfXyxmLGMpLGwucHVzaChlPVtdKTtmb3IodmFyIGQ9LTEsZz1yLmxlbmd0aDsrK2Q8ZzspKGk9cltkXSkmJl9zKGksZCxzLG8sYSksZS5wdXNoKGkpfXJldHVybiBwcyhsLHMsbyl9LHZzLmZpbHRlcj1mdW5jdGlvbih0KXt2YXIgZSxyLG49W107XCJmdW5jdGlvblwiIT10eXBlb2YgdCYmKHQ9Y3QodCkpO2Zvcih2YXIgaT0wLGE9dGhpcy5sZW5ndGg7aTxhO2krKyl7bi5wdXNoKGU9W10pO2Zvcih2YXIgbyxzPTAsbD0obz10aGlzW2ldKS5sZW5ndGg7czxsO3MrKykocj1vW3NdKSYmdC5jYWxsKHIsci5fX2RhdGFfXyxzLGkpJiZlLnB1c2gocil9cmV0dXJuIHBzKG4sdGhpcy5uYW1lc3BhY2UsdGhpcy5pZCl9LHZzLnR3ZWVuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5pZCxuPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/dGhpcy5ub2RlKClbbl1bcl0udHdlZW4uZ2V0KHQpOnV0KHRoaXMsbnVsbD09ZT9mdW5jdGlvbihlKXtlW25dW3JdLnR3ZWVuLnJlbW92ZSh0KX06ZnVuY3Rpb24oaSl7aVtuXVtyXS50d2Vlbi5zZXQodCxlKX0pfSx2cy5hdHRyPWZ1bmN0aW9uKGUscil7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IociBpbiBlKXRoaXMuYXR0cihyLGVbcl0pO3JldHVybiB0aGlzfXZhciBuPVwidHJhbnNmb3JtXCI9PWU/Z2E6WmksaT10Lm5zLnF1YWxpZnkoZSk7ZnVuY3Rpb24gYSgpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGkpfWZ1bmN0aW9uIG8oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCl9cmV0dXJuIHlzKHRoaXMsXCJhdHRyLlwiK2UscixpLmxvY2FsP2Z1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P286KHQrPVwiXCIsZnVuY3Rpb24oKXt2YXIgZSxyPXRoaXMuZ2V0QXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsKTtyZXR1cm4gciE9PXQmJihlPW4ocix0KSxmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCxlKHQpKX0pfSl9OmZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P2E6KHQrPVwiXCIsZnVuY3Rpb24oKXt2YXIgZSxyPXRoaXMuZ2V0QXR0cmlidXRlKGkpO3JldHVybiByIT09dCYmKGU9bihyLHQpLGZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlKGksZSh0KSl9KX0pfSl9LHZzLmF0dHJUd2Vlbj1mdW5jdGlvbihlLHIpe3ZhciBuPXQubnMucXVhbGlmeShlKTtyZXR1cm4gdGhpcy50d2VlbihcImF0dHIuXCIrZSxuLmxvY2FsP2Z1bmN0aW9uKHQsZSl7dmFyIGk9ci5jYWxsKHRoaXMsdCxlLHRoaXMuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKSk7cmV0dXJuIGkmJmZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLGkodCkpfX06ZnVuY3Rpb24odCxlKXt2YXIgaT1yLmNhbGwodGhpcyx0LGUsdGhpcy5nZXRBdHRyaWJ1dGUobikpO3JldHVybiBpJiZmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZShuLGkodCkpfX0pfSx2cy5zdHlsZT1mdW5jdGlvbih0LGUscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtpZihuPDMpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXtmb3IociBpbiBuPDImJihlPVwiXCIpLHQpdGhpcy5zdHlsZShyLHRbcl0sZSk7cmV0dXJuIHRoaXN9cj1cIlwifWZ1bmN0aW9uIGkoKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfXJldHVybiB5cyh0aGlzLFwic3R5bGUuXCIrdCxlLGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP2k6KGUrPVwiXCIsZnVuY3Rpb24oKXt2YXIgbixpPW8odGhpcykuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCk7cmV0dXJuIGkhPT1lJiYobj1aaShpLGUpLGZ1bmN0aW9uKGUpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxuKGUpLHIpfSl9KX0pfSx2cy5zdHlsZVR3ZWVuPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzJiYocj1cIlwiKSx0aGlzLnR3ZWVuKFwic3R5bGUuXCIrdCxmdW5jdGlvbihuLGkpe3ZhciBhPWUuY2FsbCh0aGlzLG4saSxvKHRoaXMpLmdldENvbXB1dGVkU3R5bGUodGhpcyxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpKTtyZXR1cm4gYSYmZnVuY3Rpb24oZSl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGEoZSkscil9fSl9LHZzLnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHlzKHRoaXMsXCJ0ZXh0XCIsdCx4cyl9LHZzLnJlbW92ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMubmFtZXNwYWNlO3JldHVybiB0aGlzLmVhY2goXCJlbmQudHJhbnNpdGlvblwiLGZ1bmN0aW9uKCl7dmFyIGU7dGhpc1t0XS5jb3VudDwyJiYoZT10aGlzLnBhcmVudE5vZGUpJiZlLnJlbW92ZUNoaWxkKHRoaXMpfSl9LHZzLmVhc2U9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5pZCxuPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/dGhpcy5ub2RlKClbbl1bcl0uZWFzZTooXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmKGU9dC5lYXNlLmFwcGx5KHQsYXJndW1lbnRzKSksdXQodGhpcyxmdW5jdGlvbih0KXt0W25dW3JdLmVhc2U9ZX0pKX0sdnMuZGVsYXk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pZCxyPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/dGhpcy5ub2RlKClbcl1bZV0uZGVsYXk6dXQodGhpcyxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2Z1bmN0aW9uKG4saSxhKXtuW3JdW2VdLmRlbGF5PSt0LmNhbGwobixuLl9fZGF0YV9fLGksYSl9Oih0PSt0LGZ1bmN0aW9uKG4pe25bcl1bZV0uZGVsYXk9dH0pKX0sdnMuZHVyYXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pZCxyPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/dGhpcy5ub2RlKClbcl1bZV0uZHVyYXRpb246dXQodGhpcyxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2Z1bmN0aW9uKG4saSxhKXtuW3JdW2VdLmR1cmF0aW9uPU1hdGgubWF4KDEsdC5jYWxsKG4sbi5fX2RhdGFfXyxpLGEpKX06KHQ9TWF0aC5tYXgoMSx0KSxmdW5jdGlvbihuKXtuW3JdW2VdLmR1cmF0aW9uPXR9KSl9LHZzLmVhY2g9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLmlkLGk9dGhpcy5uYW1lc3BhY2U7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgYT1ncyxvPWRzO3RyeXtkcz1uLHV0KHRoaXMsZnVuY3Rpb24odCxyLGEpe2dzPXRbaV1bbl0sZS5jYWxsKHQsdC5fX2RhdGFfXyxyLGEpfSl9ZmluYWxseXtncz1hLGRzPW99fWVsc2UgdXQodGhpcyxmdW5jdGlvbihhKXt2YXIgbz1hW2ldW25dOyhvLmV2ZW50fHwoby5ldmVudD10LmRpc3BhdGNoKFwic3RhcnRcIixcImVuZFwiLFwiaW50ZXJydXB0XCIpKSkub24oZSxyKX0pO3JldHVybiB0aGlzfSx2cy50cmFuc2l0aW9uPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUscixuPXRoaXMuaWQsaT0rK21zLGE9dGhpcy5uYW1lc3BhY2Usbz1bXSxzPTAsbD10aGlzLmxlbmd0aDtzPGw7cysrKXtvLnB1c2godD1bXSk7Zm9yKHZhciBjLHU9MCxoPShjPXRoaXNbc10pLmxlbmd0aDt1PGg7dSsrKShlPWNbdV0pJiZfcyhlLHUsYSxpLHt0aW1lOihyPWVbYV1bbl0pLnRpbWUsZWFzZTpyLmVhc2UsZGVsYXk6ci5kZWxheStyLmR1cmF0aW9uLGR1cmF0aW9uOnIuZHVyYXRpb259KSx0LnB1c2goZSl9cmV0dXJuIHBzKG8sYSxpKX0sdC5zdmcuYXhpcz1mdW5jdGlvbigpe3ZhciBlLHI9dC5zY2FsZS5saW5lYXIoKSxpPXdzLGE9NixvPTYscz0zLGw9WzEwXSxjPW51bGw7ZnVuY3Rpb24gdShuKXtuLmVhY2goZnVuY3Rpb24oKXt2YXIgbix1PXQuc2VsZWN0KHRoaXMpLGg9dGhpcy5fX2NoYXJ0X198fHIsZj10aGlzLl9fY2hhcnRfXz1yLmNvcHkoKSxwPW51bGw9PWM/Zi50aWNrcz9mLnRpY2tzLmFwcGx5KGYsbCk6Zi5kb21haW4oKTpjLGQ9bnVsbD09ZT9mLnRpY2tGb3JtYXQ/Zi50aWNrRm9ybWF0LmFwcGx5KGYsbCk6ejplLGc9dS5zZWxlY3RBbGwoXCIudGlja1wiKS5kYXRhKHAsZiksdj1nLmVudGVyKCkuaW5zZXJ0KFwiZ1wiLFwiLmRvbWFpblwiKS5hdHRyKFwiY2xhc3NcIixcInRpY2tcIikuc3R5bGUoXCJvcGFjaXR5XCIsa3QpLG09dC50cmFuc2l0aW9uKGcuZXhpdCgpKS5zdHlsZShcIm9wYWNpdHlcIixrdCkucmVtb3ZlKCkseT10LnRyYW5zaXRpb24oZy5vcmRlcigpKS5zdHlsZShcIm9wYWNpdHlcIiwxKSx4PU1hdGgubWF4KGEsMCkrcyxiPXVvKGYpLF89dS5zZWxlY3RBbGwoXCIuZG9tYWluXCIpLmRhdGEoWzBdKSx3PShfLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiY2xhc3NcIixcImRvbWFpblwiKSx0LnRyYW5zaXRpb24oXykpO3YuYXBwZW5kKFwibGluZVwiKSx2LmFwcGVuZChcInRleHRcIik7dmFyIGssQSxULE0sUz12LnNlbGVjdChcImxpbmVcIiksRT15LnNlbGVjdChcImxpbmVcIiksQz1nLnNlbGVjdChcInRleHRcIikudGV4dChkKSxMPXYuc2VsZWN0KFwidGV4dFwiKSxPPXkuc2VsZWN0KFwidGV4dFwiKSxJPVwidG9wXCI9PT1pfHxcImxlZnRcIj09PWk/LTE6MTtpZihcImJvdHRvbVwiPT09aXx8XCJ0b3BcIj09PWk/KG49QXMsaz1cInhcIixUPVwieVwiLEE9XCJ4MlwiLE09XCJ5MlwiLEMuYXR0cihcImR5XCIsSTwwP1wiMGVtXCI6XCIuNzFlbVwiKS5zdHlsZShcInRleHQtYW5jaG9yXCIsXCJtaWRkbGVcIiksdy5hdHRyKFwiZFwiLFwiTVwiK2JbMF0rXCIsXCIrSSpvK1wiVjBIXCIrYlsxXStcIlZcIitJKm8pKToobj1UcyxrPVwieVwiLFQ9XCJ4XCIsQT1cInkyXCIsTT1cIngyXCIsQy5hdHRyKFwiZHlcIixcIi4zMmVtXCIpLnN0eWxlKFwidGV4dC1hbmNob3JcIixJPDA/XCJlbmRcIjpcInN0YXJ0XCIpLHcuYXR0cihcImRcIixcIk1cIitJKm8rXCIsXCIrYlswXStcIkgwVlwiK2JbMV0rXCJIXCIrSSpvKSksUy5hdHRyKE0sSSphKSxMLmF0dHIoVCxJKngpLEUuYXR0cihBLDApLmF0dHIoTSxJKmEpLE8uYXR0cihrLDApLmF0dHIoVCxJKngpLGYucmFuZ2VCYW5kKXt2YXIgRD1mLFA9RC5yYW5nZUJhbmQoKS8yO2g9Zj1mdW5jdGlvbih0KXtyZXR1cm4gRCh0KStQfX1lbHNlIGgucmFuZ2VCYW5kP2g9ZjptLmNhbGwobixmLGgpO3YuY2FsbChuLGgsZikseS5jYWxsKG4sZixmKX0pfXJldHVybiB1LnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsdSk6cn0sdS5vcmllbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCBpbiBrcz90K1wiXCI6d3MsdSk6aX0sdS50aWNrcz1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW4oYXJndW1lbnRzKSx1KTpsfSx1LnRpY2tWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCx1KTpjfSx1LnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCx1KTplfSx1LnRpY2tTaXplPWZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg7cmV0dXJuIGU/KGE9K3Qsbz0rYXJndW1lbnRzW2UtMV0sdSk6YX0sdS5pbm5lclRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LHUpOmF9LHUub3V0ZXJUaWNrU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCx1KTpvfSx1LnRpY2tQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LHUpOnN9LHUudGlja1N1YmRpdmlkZT1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoJiZ1fSx1fTt2YXIgd3M9XCJib3R0b21cIixrcz17dG9wOjEscmlnaHQ6MSxib3R0b206MSxsZWZ0OjF9O2Z1bmN0aW9uIEFzKHQsZSxyKXt0LmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXt2YXIgbj1lKHQpO3JldHVyblwidHJhbnNsYXRlKFwiKyhpc0Zpbml0ZShuKT9uOnIodCkpK1wiLDApXCJ9KX1mdW5jdGlvbiBUcyh0LGUscil7dC5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7dmFyIG49ZSh0KTtyZXR1cm5cInRyYW5zbGF0ZSgwLFwiKyhpc0Zpbml0ZShuKT9uOnIodCkpK1wiKVwifSl9dC5zdmcuYnJ1c2g9ZnVuY3Rpb24oKXt2YXIgZSxyLG49aihmLFwiYnJ1c2hzdGFydFwiLFwiYnJ1c2hcIixcImJydXNoZW5kXCIpLGk9bnVsbCxhPW51bGwscz1bMCwwXSxsPVswLDBdLGM9ITAsdT0hMCxoPVNzWzBdO2Z1bmN0aW9uIGYoZSl7ZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dC5zZWxlY3QodGhpcykuc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpLnN0eWxlKFwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yXCIsXCJyZ2JhKDAsMCwwLDApXCIpLm9uKFwibW91c2Vkb3duLmJydXNoXCIsdikub24oXCJ0b3VjaHN0YXJ0LmJydXNoXCIsdikscj1lLnNlbGVjdEFsbChcIi5iYWNrZ3JvdW5kXCIpLmRhdGEoWzBdKTtyLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKS5hdHRyKFwiY2xhc3NcIixcImJhY2tncm91bmRcIikuc3R5bGUoXCJ2aXNpYmlsaXR5XCIsXCJoaWRkZW5cIikuc3R5bGUoXCJjdXJzb3JcIixcImNyb3NzaGFpclwiKSxlLnNlbGVjdEFsbChcIi5leHRlbnRcIikuZGF0YShbMF0pLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKS5hdHRyKFwiY2xhc3NcIixcImV4dGVudFwiKS5zdHlsZShcImN1cnNvclwiLFwibW92ZVwiKTt2YXIgbj1lLnNlbGVjdEFsbChcIi5yZXNpemVcIikuZGF0YShoLHopO24uZXhpdCgpLnJlbW92ZSgpLG4uZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLGZ1bmN0aW9uKHQpe3JldHVyblwicmVzaXplIFwiK3R9KS5zdHlsZShcImN1cnNvclwiLGZ1bmN0aW9uKHQpe3JldHVybiBNc1t0XX0pLmFwcGVuZChcInJlY3RcIikuYXR0cihcInhcIixmdW5jdGlvbih0KXtyZXR1cm4vW2V3XSQvLnRlc3QodCk/LTM6bnVsbH0pLmF0dHIoXCJ5XCIsZnVuY3Rpb24odCl7cmV0dXJuL15bbnNdLy50ZXN0KHQpPy0zOm51bGx9KS5hdHRyKFwid2lkdGhcIiw2KS5hdHRyKFwiaGVpZ2h0XCIsNikuc3R5bGUoXCJ2aXNpYmlsaXR5XCIsXCJoaWRkZW5cIiksbi5zdHlsZShcImRpc3BsYXlcIixmLmVtcHR5KCk/XCJub25lXCI6bnVsbCk7dmFyIG8scz10LnRyYW5zaXRpb24oZSksbD10LnRyYW5zaXRpb24ocik7aSYmKG89dW8oaSksbC5hdHRyKFwieFwiLG9bMF0pLmF0dHIoXCJ3aWR0aFwiLG9bMV0tb1swXSksZChzKSksYSYmKG89dW8oYSksbC5hdHRyKFwieVwiLG9bMF0pLmF0dHIoXCJoZWlnaHRcIixvWzFdLW9bMF0pLGcocykpLHAocyl9KX1mdW5jdGlvbiBwKHQpe3Quc2VsZWN0QWxsKFwiLnJlc2l6ZVwiKS5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrc1srL2UkLy50ZXN0KHQpXStcIixcIitsWysvXnMvLnRlc3QodCldK1wiKVwifSl9ZnVuY3Rpb24gZCh0KXt0LnNlbGVjdChcIi5leHRlbnRcIikuYXR0cihcInhcIixzWzBdKSx0LnNlbGVjdEFsbChcIi5leHRlbnQsLm4+cmVjdCwucz5yZWN0XCIpLmF0dHIoXCJ3aWR0aFwiLHNbMV0tc1swXSl9ZnVuY3Rpb24gZyh0KXt0LnNlbGVjdChcIi5leHRlbnRcIikuYXR0cihcInlcIixsWzBdKSx0LnNlbGVjdEFsbChcIi5leHRlbnQsLmU+cmVjdCwudz5yZWN0XCIpLmF0dHIoXCJoZWlnaHRcIixsWzFdLWxbMF0pfWZ1bmN0aW9uIHYoKXt2YXIgaCx2LG09dGhpcyx5PXQuc2VsZWN0KHQuZXZlbnQudGFyZ2V0KSx4PW4ub2YobSxhcmd1bWVudHMpLGI9dC5zZWxlY3QobSksXz15LmRhdHVtKCksdz0hL14obnxzKSQvLnRlc3QoXykmJmksaz0hL14oZXx3KSQvLnRlc3QoXykmJmEsQT15LmNsYXNzZWQoXCJleHRlbnRcIiksVD14dChtKSxNPXQubW91c2UobSksUz10LnNlbGVjdChvKG0pKS5vbihcImtleWRvd24uYnJ1c2hcIixmdW5jdGlvbigpezMyPT10LmV2ZW50LmtleUNvZGUmJihBfHwoaD1udWxsLE1bMF0tPXNbMV0sTVsxXS09bFsxXSxBPTIpLEIoKSl9KS5vbihcImtleXVwLmJydXNoXCIsZnVuY3Rpb24oKXszMj09dC5ldmVudC5rZXlDb2RlJiYyPT1BJiYoTVswXSs9c1sxXSxNWzFdKz1sWzFdLEE9MCxCKCkpfSk7aWYodC5ldmVudC5jaGFuZ2VkVG91Y2hlcz9TLm9uKFwidG91Y2htb3ZlLmJydXNoXCIsTCkub24oXCJ0b3VjaGVuZC5icnVzaFwiLE8pOlMub24oXCJtb3VzZW1vdmUuYnJ1c2hcIixMKS5vbihcIm1vdXNldXAuYnJ1c2hcIixPKSxiLmludGVycnVwdCgpLnNlbGVjdEFsbChcIipcIikuaW50ZXJydXB0KCksQSlNWzBdPXNbMF0tTVswXSxNWzFdPWxbMF0tTVsxXTtlbHNlIGlmKF8pe3ZhciBFPSsvdyQvLnRlc3QoXyksQz0rL15uLy50ZXN0KF8pO3Y9W3NbMS1FXS1NWzBdLGxbMS1DXS1NWzFdXSxNWzBdPXNbRV0sTVsxXT1sW0NdfWVsc2UgdC5ldmVudC5hbHRLZXkmJihoPU0uc2xpY2UoKSk7ZnVuY3Rpb24gTCgpe3ZhciBlPXQubW91c2UobSkscj0hMTt2JiYoZVswXSs9dlswXSxlWzFdKz12WzFdKSxBfHwodC5ldmVudC5hbHRLZXk/KGh8fChoPVsoc1swXStzWzFdKS8yLChsWzBdK2xbMV0pLzJdKSxNWzBdPXNbKyhlWzBdPGhbMF0pXSxNWzFdPWxbKyhlWzFdPGhbMV0pXSk6aD1udWxsKSx3JiZ6KGUsaSwwKSYmKGQoYikscj0hMCksayYmeihlLGEsMSkmJihnKGIpLHI9ITApLHImJihwKGIpLHgoe3R5cGU6XCJicnVzaFwiLG1vZGU6QT9cIm1vdmVcIjpcInJlc2l6ZVwifSkpfWZ1bmN0aW9uIHoodCxuLGkpe3ZhciBhLG8sZj11byhuKSxwPWZbMF0sZD1mWzFdLGc9TVtpXSx2PWk/bDpzLG09dlsxXS12WzBdO2lmKEEmJihwLT1nLGQtPW0rZyksYT0oaT91OmMpP01hdGgubWF4KHAsTWF0aC5taW4oZCx0W2ldKSk6dFtpXSxBP289KGErPWcpK206KGgmJihnPU1hdGgubWF4KHAsTWF0aC5taW4oZCwyKmhbaV0tYSkpKSxnPGE/KG89YSxhPWcpOm89ZyksdlswXSE9YXx8dlsxXSE9bylyZXR1cm4gaT9yPW51bGw6ZT1udWxsLHZbMF09YSx2WzFdPW8sITB9ZnVuY3Rpb24gTygpe0woKSxiLnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixcImFsbFwiKS5zZWxlY3RBbGwoXCIucmVzaXplXCIpLnN0eWxlKFwiZGlzcGxheVwiLGYuZW1wdHkoKT9cIm5vbmVcIjpudWxsKSx0LnNlbGVjdChcImJvZHlcIikuc3R5bGUoXCJjdXJzb3JcIixudWxsKSxTLm9uKFwibW91c2Vtb3ZlLmJydXNoXCIsbnVsbCkub24oXCJtb3VzZXVwLmJydXNoXCIsbnVsbCkub24oXCJ0b3VjaG1vdmUuYnJ1c2hcIixudWxsKS5vbihcInRvdWNoZW5kLmJydXNoXCIsbnVsbCkub24oXCJrZXlkb3duLmJydXNoXCIsbnVsbCkub24oXCJrZXl1cC5icnVzaFwiLG51bGwpLFQoKSx4KHt0eXBlOlwiYnJ1c2hlbmRcIn0pfWIuc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwibm9uZVwiKS5zZWxlY3RBbGwoXCIucmVzaXplXCIpLnN0eWxlKFwiZGlzcGxheVwiLG51bGwpLHQuc2VsZWN0KFwiYm9keVwiKS5zdHlsZShcImN1cnNvclwiLHkuc3R5bGUoXCJjdXJzb3JcIikpLHgoe3R5cGU6XCJicnVzaHN0YXJ0XCJ9KSxMKCl9cmV0dXJuIGYuZXZlbnQ9ZnVuY3Rpb24oaSl7aS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9bi5vZih0aGlzLGFyZ3VtZW50cyksYT17eDpzLHk6bCxpOmUsajpyfSxvPXRoaXMuX19jaGFydF9ffHxhO3RoaXMuX19jaGFydF9fPWEsZHM/dC5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmVhY2goXCJzdGFydC5icnVzaFwiLGZ1bmN0aW9uKCl7ZT1vLmkscj1vLmoscz1vLngsbD1vLnksaSh7dHlwZTpcImJydXNoc3RhcnRcIn0pfSkudHdlZW4oXCJicnVzaDpicnVzaFwiLGZ1bmN0aW9uKCl7dmFyIHQ9JGkocyxhLngpLG49JGkobCxhLnkpO3JldHVybiBlPXI9bnVsbCxmdW5jdGlvbihlKXtzPWEueD10KGUpLGw9YS55PW4oZSksaSh7dHlwZTpcImJydXNoXCIsbW9kZTpcInJlc2l6ZVwifSl9fSkuZWFjaChcImVuZC5icnVzaFwiLGZ1bmN0aW9uKCl7ZT1hLmkscj1hLmosaSh7dHlwZTpcImJydXNoXCIsbW9kZTpcInJlc2l6ZVwifSksaSh7dHlwZTpcImJydXNoZW5kXCJ9KX0pOihpKHt0eXBlOlwiYnJ1c2hzdGFydFwifSksaSh7dHlwZTpcImJydXNoXCIsbW9kZTpcInJlc2l6ZVwifSksaSh7dHlwZTpcImJydXNoZW5kXCJ9KSl9KX0sZi54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPVNzWyEoaT10KTw8MXwhYV0sZik6aX0sZi55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPVNzWyFpPDwxfCEoYT10KV0sZik6YX0sZi5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaSYmYT8oYz0hIXRbMF0sdT0hIXRbMV0pOmk/Yz0hIXQ6YSYmKHU9ISF0KSxmKTppJiZhP1tjLHVdOmk/YzphP3U6bnVsbH0sZi5leHRlbnQ9ZnVuY3Rpb24odCl7dmFyIG4sbyxjLHUsaDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaSYmKG49dFswXSxvPXRbMV0sYSYmKG49blswXSxvPW9bMF0pLGU9W24sb10saS5pbnZlcnQmJihuPWkobiksbz1pKG8pKSxvPG4mJihoPW4sbj1vLG89aCksbj09c1swXSYmbz09c1sxXXx8KHM9W24sb10pKSxhJiYoYz10WzBdLHU9dFsxXSxpJiYoYz1jWzFdLHU9dVsxXSkscj1bYyx1XSxhLmludmVydCYmKGM9YShjKSx1PWEodSkpLHU8YyYmKGg9YyxjPXUsdT1oKSxjPT1sWzBdJiZ1PT1sWzFdfHwobD1bYyx1XSkpLGYpOihpJiYoZT8obj1lWzBdLG89ZVsxXSk6KG49c1swXSxvPXNbMV0saS5pbnZlcnQmJihuPWkuaW52ZXJ0KG4pLG89aS5pbnZlcnQobykpLG88biYmKGg9bixuPW8sbz1oKSkpLGEmJihyPyhjPXJbMF0sdT1yWzFdKTooYz1sWzBdLHU9bFsxXSxhLmludmVydCYmKGM9YS5pbnZlcnQoYyksdT1hLmludmVydCh1KSksdTxjJiYoaD1jLGM9dSx1PWgpKSksaSYmYT9bW24sY10sW28sdV1dOmk/W24sb106YSYmW2MsdV0pfSxmLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIGYuZW1wdHkoKXx8KHM9WzAsMF0sbD1bMCwwXSxlPXI9bnVsbCksZn0sZi5lbXB0eT1mdW5jdGlvbigpe3JldHVybiEhaSYmc1swXT09c1sxXXx8ISFhJiZsWzBdPT1sWzFdfSx0LnJlYmluZChmLG4sXCJvblwiKX07dmFyIE1zPXtuOlwibnMtcmVzaXplXCIsZTpcImV3LXJlc2l6ZVwiLHM6XCJucy1yZXNpemVcIix3OlwiZXctcmVzaXplXCIsbnc6XCJud3NlLXJlc2l6ZVwiLG5lOlwibmVzdy1yZXNpemVcIixzZTpcIm53c2UtcmVzaXplXCIsc3c6XCJuZXN3LXJlc2l6ZVwifSxTcz1bW1wiblwiLFwiZVwiLFwic1wiLFwid1wiLFwibndcIixcIm5lXCIsXCJzZVwiLFwic3dcIl0sW1wiZVwiLFwid1wiXSxbXCJuXCIsXCJzXCJdLFtdXSxFcz1JZS5mb3JtYXQ9c3IudGltZUZvcm1hdCxDcz1Fcy51dGMsTHM9Q3MoXCIlWS0lbS0lZFQlSDolTTolUy4lTFpcIik7ZnVuY3Rpb24genModCl7cmV0dXJuIHQudG9JU09TdHJpbmcoKX1mdW5jdGlvbiBPcyhlLHIsbil7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gZSh0KX1mdW5jdGlvbiBhKGUsbil7dmFyIGk9KGVbMV0tZVswXSkvbixhPXQuYmlzZWN0KERzLGkpO3JldHVybiBhPT1Ecy5sZW5ndGg/W3IueWVhcix4byhlLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC8zMTUzNmU2fSksbilbMl1dOmE/cltpL0RzW2EtMV08RHNbYV0vaT9hLTE6YV06W0ZzLHhvKGUsbilbMl1dfXJldHVybiBpLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gSXMoZS5pbnZlcnQodCkpfSxpLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZS5kb21haW4odCksaSk6ZS5kb21haW4oKS5tYXAoSXMpfSxpLm5pY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj1pLmRvbWFpbigpLG49Y28ociksbz1udWxsPT10P2EobiwxMCk6XCJudW1iZXJcIj09dHlwZW9mIHQmJmEobix0KTtmdW5jdGlvbiBzKHIpe3JldHVybiFpc05hTihyKSYmIXQucmFuZ2UocixJcygrcisxKSxlKS5sZW5ndGh9cmV0dXJuIG8mJih0PW9bMF0sZT1vWzFdKSxpLmRvbWFpbihmbyhyLGU+MT97Zmxvb3I6ZnVuY3Rpb24oZSl7Zm9yKDtzKGU9dC5mbG9vcihlKSk7KWU9SXMoZS0xKTtyZXR1cm4gZX0sY2VpbDpmdW5jdGlvbihlKXtmb3IoO3MoZT10LmNlaWwoZSkpOyllPUlzKCtlKzEpO3JldHVybiBlfX06dCkpfSxpLnRpY2tzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9Y28oaS5kb21haW4oKSksbj1udWxsPT10P2EociwxMCk6XCJudW1iZXJcIj09dHlwZW9mIHQ/YShyLHQpOiF0LnJhbmdlJiZbe3JhbmdlOnR9LGVdO3JldHVybiBuJiYodD1uWzBdLGU9blsxXSksdC5yYW5nZShyWzBdLElzKCtyWzFdKzEpLGU8MT8xOmUpfSxpLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIE9zKGUuY29weSgpLHIsbil9LG1vKGksZSl9ZnVuY3Rpb24gSXModCl7cmV0dXJuIG5ldyBEYXRlKHQpfUVzLmlzbz1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyYmK25ldyBEYXRlKFwiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaXCIpP3pzOkxzLHpzLnBhcnNlPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBEYXRlKHQpO3JldHVybiBpc05hTihlKT9udWxsOmV9LHpzLnRvU3RyaW5nPUxzLnRvU3RyaW5nLEllLnNlY29uZD1GZShmdW5jdGlvbih0KXtyZXR1cm4gbmV3IERlKDFlMypNYXRoLmZsb29yKHQvMWUzKSl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKHQuZ2V0VGltZSgpKzFlMypNYXRoLmZsb29yKGUpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0U2Vjb25kcygpfSksSWUuc2Vjb25kcz1JZS5zZWNvbmQucmFuZ2UsSWUuc2Vjb25kcy51dGM9SWUuc2Vjb25kLnV0Yy5yYW5nZSxJZS5taW51dGU9RmUoZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBEZSg2ZTQqTWF0aC5mbG9vcih0LzZlNCkpfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSh0LmdldFRpbWUoKSs2ZTQqTWF0aC5mbG9vcihlKSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pLEllLm1pbnV0ZXM9SWUubWludXRlLnJhbmdlLEllLm1pbnV0ZXMudXRjPUllLm1pbnV0ZS51dGMucmFuZ2UsSWUuaG91cj1GZShmdW5jdGlvbih0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCkvNjA7cmV0dXJuIG5ldyBEZSgzNmU1KihNYXRoLmZsb29yKHQvMzZlNS1lKStlKSl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKHQuZ2V0VGltZSgpKzM2ZTUqTWF0aC5mbG9vcihlKSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9KSxJZS5ob3Vycz1JZS5ob3VyLnJhbmdlLEllLmhvdXJzLnV0Yz1JZS5ob3VyLnV0Yy5yYW5nZSxJZS5tb250aD1GZShmdW5jdGlvbih0KXtyZXR1cm4odD1JZS5kYXkodCkpLnNldERhdGUoMSksdH0sZnVuY3Rpb24odCxlKXt0LnNldE1vbnRoKHQuZ2V0TW9udGgoKStlKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKX0pLEllLm1vbnRocz1JZS5tb250aC5yYW5nZSxJZS5tb250aHMudXRjPUllLm1vbnRoLnV0Yy5yYW5nZTt2YXIgRHM9WzFlMyw1ZTMsMTVlMywzZTQsNmU0LDNlNSw5ZTUsMThlNSwzNmU1LDEwOGU1LDIxNmU1LDQzMmU1LDg2NGU1LDE3MjhlNSw2MDQ4ZTUsMjU5MmU2LDc3NzZlNiwzMTUzNmU2XSxQcz1bW0llLnNlY29uZCwxXSxbSWUuc2Vjb25kLDVdLFtJZS5zZWNvbmQsMTVdLFtJZS5zZWNvbmQsMzBdLFtJZS5taW51dGUsMV0sW0llLm1pbnV0ZSw1XSxbSWUubWludXRlLDE1XSxbSWUubWludXRlLDMwXSxbSWUuaG91ciwxXSxbSWUuaG91ciwzXSxbSWUuaG91ciw2XSxbSWUuaG91ciwxMl0sW0llLmRheSwxXSxbSWUuZGF5LDJdLFtJZS53ZWVrLDFdLFtJZS5tb250aCwxXSxbSWUubW9udGgsM10sW0llLnllYXIsMV1dLFJzPUVzLm11bHRpKFtbXCIuJUxcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaWxsaXNlY29uZHMoKX1dLFtcIjolU1wiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFNlY29uZHMoKX1dLFtcIiVJOiVNXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TWludXRlcygpfV0sW1wiJUkgJXBcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRIb3VycygpfV0sW1wiJWEgJWRcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKSYmMSE9dC5nZXREYXRlKCl9XSxbXCIlYiAlZFwiLGZ1bmN0aW9uKHQpe3JldHVybiAxIT10LmdldERhdGUoKX1dLFtcIiVCXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKX1dLFtcIiVZXCIsWXJdXSksRnM9e3JhbmdlOmZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdC5yYW5nZShNYXRoLmNlaWwoZS9uKSpuLCtyLG4pLm1hcChJcyl9LGZsb29yOnosY2VpbDp6fTtQcy55ZWFyPUllLnllYXIsSWUuc2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gT3ModC5zY2FsZS5saW5lYXIoKSxQcyxScyl9O3ZhciBCcz1Qcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0udXRjLHRbMV1dfSksTnM9Q3MubXVsdGkoW1tcIi4lTFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbGxpc2Vjb25kcygpfV0sW1wiOiVTXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDU2Vjb25kcygpfV0sW1wiJUk6JU1cIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNaW51dGVzKCl9XSxbXCIlSSAlcFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0hvdXJzKCl9XSxbXCIlYSAlZFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0RheSgpJiYxIT10LmdldFVUQ0RhdGUoKX1dLFtcIiViICVkXCIsZnVuY3Rpb24odCl7cmV0dXJuIDEhPXQuZ2V0VVRDRGF0ZSgpfV0sW1wiJUJcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpfV0sW1wiJVlcIixZcl1dKTtmdW5jdGlvbiBqcyh0KXtyZXR1cm4gSlNPTi5wYXJzZSh0LnJlc3BvbnNlVGV4dCl9ZnVuY3Rpb24gVnModCl7dmFyIGU9aS5jcmVhdGVSYW5nZSgpO3JldHVybiBlLnNlbGVjdE5vZGUoaS5ib2R5KSxlLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0LnJlc3BvbnNlVGV4dCl9QnMueWVhcj1JZS55ZWFyLnV0YyxJZS5zY2FsZS51dGM9ZnVuY3Rpb24oKXtyZXR1cm4gT3ModC5zY2FsZS5saW5lYXIoKSxCcyxOcyl9LHQudGV4dD1tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXNwb25zZVRleHR9KSx0Lmpzb249ZnVuY3Rpb24odCxlKXtyZXR1cm4geWUodCxcImFwcGxpY2F0aW9uL2pzb25cIixqcyxlKX0sdC5odG1sPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHllKHQsXCJ0ZXh0L2h0bWxcIixWcyxlKX0sdC54bWw9bWUoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVzcG9uc2VYTUx9KSxcIm9iamVjdFwiPT10eXBlb2YgZSYmZS5leHBvcnRzP2UuZXhwb3J0cz10OnRoaXMuZDM9dH0oKX0se31dLDE1NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspaWYodm9pZCAwIT09YXJndW1lbnRzW3RdKXJldHVybiBhcmd1bWVudHNbdF19fSx7fV0sMTU3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImluY3JlbWVudGFsLWNvbnZleC1odWxsXCIpLGk9dChcInVuaXFcIik7ZnVuY3Rpb24gYSh0LGUpe3RoaXMucG9pbnQ9dCx0aGlzLmluZGV4PWV9ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj10LnBvaW50LG49ZS5wb2ludCxpPXIubGVuZ3RoLGE9MDthPGk7KythKXt2YXIgbz1uW2FdLXJbYV07aWYobylyZXR1cm4gb31yZXR1cm4gMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lmxlbmd0aDtpZigwPT09cilyZXR1cm5bXTt2YXIgcz10WzBdLmxlbmd0aDtpZihzPDEpcmV0dXJuW107aWYoMT09PXMpcmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtpZigxPT09dClyZXR1cm4gcj9bWy0xLDBdXTpbXTt2YXIgbj1lLm1hcChmdW5jdGlvbih0LGUpe3JldHVyblt0WzBdLGVdfSk7bi5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0tZVswXX0pO2Zvcih2YXIgaT1uZXcgQXJyYXkodC0xKSxhPTE7YTx0OysrYSl7dmFyIG89blthLTFdLHM9blthXTtpW2EtMV09W29bMV0sc1sxXV19ciYmaS5wdXNoKFstMSxpWzBdWzFdXSxbaVt0LTFdWzFdLC0xXSk7cmV0dXJuIGl9KHIsdCxlKTtmb3IodmFyIGw9bmV3IEFycmF5KHIpLGM9MSx1PTA7dTxyOysrdSl7Zm9yKHZhciBoPXRbdV0sZj1uZXcgQXJyYXkocysxKSxwPTAsZD0wO2Q8czsrK2Qpe3ZhciBnPWhbZF07ZltkXT1nLHArPWcqZ31mW3NdPXAsbFt1XT1uZXcgYShmLHUpLGM9TWF0aC5tYXgocCxjKX1pKGwsbykscj1sLmxlbmd0aDtmb3IodmFyIHY9bmV3IEFycmF5KHIrcysxKSxtPW5ldyBBcnJheShyK3MrMSkseT0ocysxKSoocysxKSpjLHg9bmV3IEFycmF5KHMrMSksdT0wO3U8PXM7Kyt1KXhbdV09MDt4W3NdPXksdlswXT14LnNsaWNlKCksbVswXT0tMTtmb3IodmFyIHU9MDt1PD1zOysrdSl7dmFyIGY9eC5zbGljZSgpO2ZbdV09MSx2W3UrMV09ZixtW3UrMV09LTF9Zm9yKHZhciB1PTA7dTxyOysrdSl7dmFyIGI9bFt1XTt2W3UrcysxXT1iLnBvaW50LG1bdStzKzFdPWIuaW5kZXh9dmFyIF89bih2LCExKTtfPWU/Xy5maWx0ZXIoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wO3I8PXM7KytyKXt2YXIgbj1tW3Rbcl1dO2lmKG48MCYmKytlPj0yKXJldHVybiExO3Rbcl09bn1yZXR1cm4hMH0pOl8uZmlsdGVyKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8PXM7KytlKXt2YXIgcj1tW3RbZV1dO2lmKHI8MClyZXR1cm4hMTt0W2VdPXJ9cmV0dXJuITB9KTtpZigxJnMpZm9yKHZhciB1PTA7dTxfLmxlbmd0aDsrK3Upe3ZhciBiPV9bdV0sZj1iWzBdO2JbMF09YlsxXSxiWzFdPWZ9cmV0dXJuIF99fSx7XCJpbmNyZW1lbnRhbC1jb252ZXgtaHVsbFwiOjQwNix1bmlxOjUzMn1dLDE1ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1hO3ZhciBuPShhLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpKS5nZXRDb250ZXh0KFwiMmRcIiksaT1vKFszMiwxMjZdKTtmdW5jdGlvbiBhKHQsZSl7QXJyYXkuaXNBcnJheSh0KSYmKHQ9dC5qb2luKFwiLCBcIikpO3ZhciByLGE9e30scz0xNixsPS4wNTtlJiYoMj09PWUubGVuZ3RoJiZcIm51bWJlclwiPT10eXBlb2YgZVswXT9yPW8oZSk6QXJyYXkuaXNBcnJheShlKT9yPWU6KGUubz9yPW8oZS5vKTplLnBhaXJzJiYocj1lLnBhaXJzKSxlLmZvbnRTaXplJiYocz1lLmZvbnRTaXplKSxudWxsIT1lLnRocmVzaG9sZCYmKGw9ZS50aHJlc2hvbGQpKSkscnx8KHI9aSksbi5mb250PXMrXCJweCBcIit0O2Zvcih2YXIgYz0wO2M8ci5sZW5ndGg7YysrKXt2YXIgdT1yW2NdLGg9bi5tZWFzdXJlVGV4dCh1WzBdKS53aWR0aCtuLm1lYXN1cmVUZXh0KHVbMV0pLndpZHRoLGY9bi5tZWFzdXJlVGV4dCh1KS53aWR0aDtpZihNYXRoLmFicyhoLWYpPnMqbCl7dmFyIHA9KGYtaCkvczthW3VdPTFlMypwfX1yZXR1cm4gYX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT1bXSxyPXRbMF07cjw9dFsxXTtyKyspZm9yKHZhciBuPVN0cmluZy5mcm9tQ2hhckNvZGUociksaT10WzBdO2k8dFsxXTtpKyspe3ZhciBhPW4rU3RyaW5nLmZyb21DaGFyQ29kZShpKTtlLnB1c2goYSl9cmV0dXJuIGV9YS5jcmVhdGVQYWlycz1vLGEuYXNjaWk9aX0se31dLDE1OTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXt2YXIgcj0hMTtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgRmxvYXQ2NEFycmF5KXt2YXIgbj1uZXcgRmxvYXQ2NEFycmF5KDEpLGk9bmV3IFVpbnQzMkFycmF5KG4uYnVmZmVyKTtpZihuWzBdPTEscj0hMCwxMDcyNjkzMjQ4PT09aVsxXSl7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsW2lbMF0saVsxXV19LGUuZXhwb3J0cy5wYWNrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGlbMF09dCxpWzFdPWUsblswXX0sZS5leHBvcnRzLmxvPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsaVswXX0sZS5leHBvcnRzLmhpPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsaVsxXX19ZWxzZSBpZigxMDcyNjkzMjQ4PT09aVswXSl7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsW2lbMV0saVswXV19LGUuZXhwb3J0cy5wYWNrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGlbMV09dCxpWzBdPWUsblswXX0sZS5leHBvcnRzLmxvPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsaVsxXX0sZS5leHBvcnRzLmhpPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsaVswXX19ZWxzZSByPSExfWlmKCFyKXt2YXIgYT1uZXcgdCg4KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEud3JpdGVEb3VibGVMRSh0LDAsITApLFthLnJlYWRVSW50MzJMRSgwLCEwKSxhLnJlYWRVSW50MzJMRSg0LCEwKV19LGUuZXhwb3J0cy5wYWNrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEud3JpdGVVSW50MzJMRSh0LDAsITApLGEud3JpdGVVSW50MzJMRShlLDQsITApLGEucmVhZERvdWJsZUxFKDAsITApfSxlLmV4cG9ydHMubG89ZnVuY3Rpb24odCl7cmV0dXJuIGEud3JpdGVEb3VibGVMRSh0LDAsITApLGEucmVhZFVJbnQzMkxFKDAsITApfSxlLmV4cG9ydHMuaGk9ZnVuY3Rpb24odCl7cmV0dXJuIGEud3JpdGVEb3VibGVMRSh0LDAsITApLGEucmVhZFVJbnQzMkxFKDQsITApfX1lLmV4cG9ydHMuc2lnbj1mdW5jdGlvbih0KXtyZXR1cm4gZS5leHBvcnRzLmhpKHQpPj4+MzF9LGUuZXhwb3J0cy5leHBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4oZS5leHBvcnRzLmhpKHQpPDwxPj4+MjEpLTEwMjN9LGUuZXhwb3J0cy5mcmFjdGlvbj1mdW5jdGlvbih0KXt2YXIgcj1lLmV4cG9ydHMubG8odCksbj1lLmV4cG9ydHMuaGkodCksaT0xMDQ4NTc1Jm47cmV0dXJuIDIxNDY0MzUwNzImbiYmKGkrPTE8PDIwKSxbcixpXX0sZS5leHBvcnRzLmRlbm9ybWFsaXplZD1mdW5jdGlvbih0KXtyZXR1cm4hKDIxNDY0MzUwNzImZS5leHBvcnRzLmhpKHQpKX19KS5jYWxsKHRoaXMsdChcImJ1ZmZlclwiKS5CdWZmZXIpfSx7YnVmZmVyOjk2fV0sMTYwOltmdW5jdGlvbih0LGUscil7dmFyIG49dChcImFicy1zdmctcGF0aFwiKSxpPXQoXCJub3JtYWxpemUtc3ZnLXBhdGhcIiksYT17TTpcIm1vdmVUb1wiLEM6XCJiZXppZXJDdXJ2ZVRvXCJ9O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3QuYmVnaW5QYXRoKCksaShuKGUpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWVbMF0sbj1lLnNsaWNlKDEpO3RbYVtyXV0uYXBwbHkodCxuKX0pLHQuY2xvc2VQYXRoKCl9fSx7XCJhYnMtc3ZnLXBhdGhcIjo1MSxcIm5vcm1hbGl6ZS1zdmctcGF0aFwiOjQ0NX1dLDE2MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZVwiaW50OFwiOnJldHVybiBJbnQ4QXJyYXk7Y2FzZVwiaW50MTZcIjpyZXR1cm4gSW50MTZBcnJheTtjYXNlXCJpbnQzMlwiOnJldHVybiBJbnQzMkFycmF5O2Nhc2VcInVpbnQ4XCI6cmV0dXJuIFVpbnQ4QXJyYXk7Y2FzZVwidWludDE2XCI6cmV0dXJuIFVpbnQxNkFycmF5O2Nhc2VcInVpbnQzMlwiOnJldHVybiBVaW50MzJBcnJheTtjYXNlXCJmbG9hdDMyXCI6cmV0dXJuIEZsb2F0MzJBcnJheTtjYXNlXCJmbG9hdDY0XCI6cmV0dXJuIEZsb2F0NjRBcnJheTtjYXNlXCJhcnJheVwiOnJldHVybiBBcnJheTtjYXNlXCJ1aW50OF9jbGFtcGVkXCI6cmV0dXJuIFVpbnQ4Q2xhbXBlZEFycmF5fX19LHt9XSwxNjI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtzd2l0Y2goXCJ1bmRlZmluZWRcIj09dHlwZW9mIGUmJihlPTApLHR5cGVvZiB0KXtjYXNlXCJudW1iZXJcIjppZih0PjApcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHIsbjtmb3Iocj1uZXcgQXJyYXkodCksbj0wO248dDsrK24pcltuXT1lO3JldHVybiByfSgwfHQsZSk7YnJlYWs7Y2FzZVwib2JqZWN0XCI6aWYoXCJudW1iZXJcIj09dHlwZW9mIHQubGVuZ3RoKXJldHVybiBmdW5jdGlvbiB0KGUscixuKXt2YXIgaT0wfGVbbl07aWYoaTw9MClyZXR1cm5bXTt2YXIgYSxvPW5ldyBBcnJheShpKTtpZihuPT09ZS5sZW5ndGgtMSlmb3IoYT0wO2E8aTsrK2Epb1thXT1yO2Vsc2UgZm9yKGE9MDthPGk7KythKW9bYV09dChlLHIsbisxKTtyZXR1cm4gb30odCxlLDApfXJldHVybltdfX0se31dLDE2MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlLHIpe3I9cnx8Mjt2YXIgbixzLGwsYyx1LHAsZyx2PWUmJmUubGVuZ3RoLG09dj9lWzBdKnI6dC5sZW5ndGgseT1pKHQsMCxtLHIsITApLHg9W107aWYoIXkpcmV0dXJuIHg7aWYodiYmKHk9ZnVuY3Rpb24odCxlLHIsbil7dmFyIG8scyxsLGMsdSxwPVtdO2ZvcihvPTAscz1lLmxlbmd0aDtvPHM7bysrKWw9ZVtvXSpuLGM9bzxzLTE/ZVtvKzFdKm46dC5sZW5ndGgsKHU9aSh0LGwsYyxuLCExKSk9PT11Lm5leHQmJih1LnN0ZWluZXI9ITApLHAucHVzaChkKHUpKTtmb3IocC5zb3J0KGgpLG89MDtvPHAubGVuZ3RoO28rKylmKHBbb10scikscj1hKHIsci5uZXh0KTtyZXR1cm4gcn0odCxlLHkscikpLHQubGVuZ3RoPjgwKnIpe249bD10WzBdLHM9Yz10WzFdO2Zvcih2YXIgYj1yO2I8bTtiKz1yKSh1PXRbYl0pPG4mJihuPXUpLChwPXRbYisxXSk8cyYmKHM9cCksdT5sJiYobD11KSxwPmMmJihjPXApO2c9MCE9PShnPU1hdGgubWF4KGwtbixjLXMpKT8xL2c6MH1yZXR1cm4gbyh5LHgscixuLHMsZykseH1mdW5jdGlvbiBpKHQsZSxyLG4saSl7dmFyIGEsbztpZihpPT09VCh0LGUscixuKT4wKWZvcihhPWU7YTxyO2ErPW4pbz13KGEsdFthXSx0W2ErMV0sbyk7ZWxzZSBmb3IoYT1yLW47YT49ZTthLT1uKW89dyhhLHRbYV0sdFthKzFdLG8pO3JldHVybiBvJiZ5KG8sby5uZXh0KSYmKGsobyksbz1vLm5leHQpLG99ZnVuY3Rpb24gYSh0LGUpe2lmKCF0KXJldHVybiB0O2V8fChlPXQpO3ZhciByLG49dDtkb3tpZihyPSExLG4uc3RlaW5lcnx8IXkobixuLm5leHQpJiYwIT09bShuLnByZXYsbixuLm5leHQpKW49bi5uZXh0O2Vsc2V7aWYoayhuKSwobj1lPW4ucHJldik9PT1uLm5leHQpYnJlYWs7cj0hMH19d2hpbGUocnx8biE9PWUpO3JldHVybiBlfWZ1bmN0aW9uIG8odCxlLHIsbixpLGgsZil7aWYodCl7IWYmJmgmJmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQ7ZG97bnVsbD09PWkueiYmKGkuej1wKGkueCxpLnksZSxyLG4pKSxpLnByZXZaPWkucHJldixpLm5leHRaPWkubmV4dCxpPWkubmV4dH13aGlsZShpIT09dCk7aS5wcmV2Wi5uZXh0Wj1udWxsLGkucHJldlo9bnVsbCxmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scyxsLGM9MTtkb3tmb3Iocj10LHQ9bnVsbCxhPW51bGwsbz0wO3I7KXtmb3IobysrLG49cixzPTAsZT0wO2U8YyYmKHMrKyxuPW4ubmV4dFopO2UrKyk7Zm9yKGw9YztzPjB8fGw+MCYmbjspMCE9PXMmJigwPT09bHx8IW58fHIuejw9bi56KT8oaT1yLHI9ci5uZXh0WixzLS0pOihpPW4sbj1uLm5leHRaLGwtLSksYT9hLm5leHRaPWk6dD1pLGkucHJldlo9YSxhPWk7cj1ufWEubmV4dFo9bnVsbCxjKj0yfXdoaWxlKG8+MSl9KGkpfSh0LG4saSxoKTtmb3IodmFyIGQsZyx2PXQ7dC5wcmV2IT09dC5uZXh0OylpZihkPXQucHJldixnPXQubmV4dCxoP2wodCxuLGksaCk6cyh0KSllLnB1c2goZC5pL3IpLGUucHVzaCh0LmkvciksZS5wdXNoKGcuaS9yKSxrKHQpLHQ9Zy5uZXh0LHY9Zy5uZXh0O2Vsc2UgaWYoKHQ9Zyk9PT12KXtmPzE9PT1mP28odD1jKHQsZSxyKSxlLHIsbixpLGgsMik6Mj09PWYmJnUodCxlLHIsbixpLGgpOm8oYSh0KSxlLHIsbixpLGgsMSk7YnJlYWt9fX1mdW5jdGlvbiBzKHQpe3ZhciBlPXQucHJldixyPXQsbj10Lm5leHQ7aWYobShlLHIsbik+PTApcmV0dXJuITE7Zm9yKHZhciBpPXQubmV4dC5uZXh0O2khPT10LnByZXY7KXtpZihnKGUueCxlLnksci54LHIueSxuLngsbi55LGkueCxpLnkpJiZtKGkucHJldixpLGkubmV4dCk+PTApcmV0dXJuITE7aT1pLm5leHR9cmV0dXJuITB9ZnVuY3Rpb24gbCh0LGUscixuKXt2YXIgaT10LnByZXYsYT10LG89dC5uZXh0O2lmKG0oaSxhLG8pPj0wKXJldHVybiExO2Zvcih2YXIgcz1pLng8YS54P2kueDxvLng/aS54Om8ueDphLng8by54P2EueDpvLngsbD1pLnk8YS55P2kueTxvLnk/aS55Om8ueTphLnk8by55P2EueTpvLnksYz1pLng+YS54P2kueD5vLng/aS54Om8ueDphLng+by54P2EueDpvLngsdT1pLnk+YS55P2kueT5vLnk/aS55Om8ueTphLnk+by55P2EueTpvLnksaD1wKHMsbCxlLHIsbiksZj1wKGMsdSxlLHIsbiksZD10LnByZXZaLHY9dC5uZXh0WjtkJiZkLno+PWgmJnYmJnYuejw9Zjspe2lmKGQhPT10LnByZXYmJmQhPT10Lm5leHQmJmcoaS54LGkueSxhLngsYS55LG8ueCxvLnksZC54LGQueSkmJm0oZC5wcmV2LGQsZC5uZXh0KT49MClyZXR1cm4hMTtpZihkPWQucHJldlosdiE9PXQucHJldiYmdiE9PXQubmV4dCYmZyhpLngsaS55LGEueCxhLnksby54LG8ueSx2Lngsdi55KSYmbSh2LnByZXYsdix2Lm5leHQpPj0wKXJldHVybiExO3Y9di5uZXh0Wn1mb3IoO2QmJmQuej49aDspe2lmKGQhPT10LnByZXYmJmQhPT10Lm5leHQmJmcoaS54LGkueSxhLngsYS55LG8ueCxvLnksZC54LGQueSkmJm0oZC5wcmV2LGQsZC5uZXh0KT49MClyZXR1cm4hMTtkPWQucHJldlp9Zm9yKDt2JiZ2Lno8PWY7KXtpZih2IT09dC5wcmV2JiZ2IT09dC5uZXh0JiZnKGkueCxpLnksYS54LGEueSxvLngsby55LHYueCx2LnkpJiZtKHYucHJldix2LHYubmV4dCk+PTApcmV0dXJuITE7dj12Lm5leHRafXJldHVybiEwfWZ1bmN0aW9uIGModCxlLHIpe3ZhciBuPXQ7ZG97dmFyIGk9bi5wcmV2LGE9bi5uZXh0Lm5leHQ7IXkoaSxhKSYmeChpLG4sbi5uZXh0LGEpJiZiKGksYSkmJmIoYSxpKSYmKGUucHVzaChpLmkvciksZS5wdXNoKG4uaS9yKSxlLnB1c2goYS5pL3IpLGsobiksayhuLm5leHQpLG49dD1hKSxuPW4ubmV4dH13aGlsZShuIT09dCk7cmV0dXJuIG59ZnVuY3Rpb24gdSh0LGUscixuLGkscyl7dmFyIGw9dDtkb3tmb3IodmFyIGM9bC5uZXh0Lm5leHQ7YyE9PWwucHJldjspe2lmKGwuaSE9PWMuaSYmdihsLGMpKXt2YXIgdT1fKGwsYyk7cmV0dXJuIGw9YShsLGwubmV4dCksdT1hKHUsdS5uZXh0KSxvKGwsZSxyLG4saSxzKSx2b2lkIG8odSxlLHIsbixpLHMpfWM9Yy5uZXh0fWw9bC5uZXh0fXdoaWxlKGwhPT10KX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQueC1lLnh9ZnVuY3Rpb24gZih0LGUpe2lmKGU9ZnVuY3Rpb24odCxlKXt2YXIgcixuPWUsaT10LngsYT10Lnksbz0tMS8wO2Rve2lmKGE8PW4ueSYmYT49bi5uZXh0LnkmJm4ubmV4dC55IT09bi55KXt2YXIgcz1uLngrKGEtbi55KSoobi5uZXh0Lngtbi54KS8obi5uZXh0Lnktbi55KTtpZihzPD1pJiZzPm8pe2lmKG89cyxzPT09aSl7aWYoYT09PW4ueSlyZXR1cm4gbjtpZihhPT09bi5uZXh0LnkpcmV0dXJuIG4ubmV4dH1yPW4ueDxuLm5leHQueD9uOm4ubmV4dH19bj1uLm5leHR9d2hpbGUobiE9PWUpO2lmKCFyKXJldHVybiBudWxsO2lmKGk9PT1vKXJldHVybiByLnByZXY7dmFyIGwsYz1yLHU9ci54LGg9ci55LGY9MS8wO249ci5uZXh0O2Zvcig7biE9PWM7KWk+PW4ueCYmbi54Pj11JiZpIT09bi54JiZnKGE8aD9pOm8sYSx1LGgsYTxoP286aSxhLG4ueCxuLnkpJiYoKGw9TWF0aC5hYnMoYS1uLnkpLyhpLW4ueCkpPGZ8fGw9PT1mJiZuLng+ci54KSYmYihuLHQpJiYocj1uLGY9bCksbj1uLm5leHQ7cmV0dXJuIHJ9KHQsZSkpe3ZhciByPV8oZSx0KTthKHIsci5uZXh0KX19ZnVuY3Rpb24gcCh0LGUscixuLGkpe3JldHVybih0PTE0MzE2NTU3NjUmKCh0PTg1ODk5MzQ1OSYoKHQ9MjUyNjQ1MTM1JigodD0xNjcxMTkzNSYoKHQ9MzI3NjcqKHQtcikqaSl8dDw8OCkpfHQ8PDQpKXx0PDwyKSl8dDw8MSkpfChlPTE0MzE2NTU3NjUmKChlPTg1ODk5MzQ1OSYoKGU9MjUyNjQ1MTM1JigoZT0xNjcxMTkzNSYoKGU9MzI3NjcqKGUtbikqaSl8ZTw8OCkpfGU8PDQpKXxlPDwyKSl8ZTw8MSkpPDwxfWZ1bmN0aW9uIGQodCl7dmFyIGU9dCxyPXQ7ZG97ZS54PHIueCYmKHI9ZSksZT1lLm5leHR9d2hpbGUoZSE9PXQpO3JldHVybiByfWZ1bmN0aW9uIGcodCxlLHIsbixpLGEsbyxzKXtyZXR1cm4oaS1vKSooZS1zKS0odC1vKSooYS1zKT49MCYmKHQtbykqKG4tcyktKHItbykqKGUtcyk+PTAmJihyLW8pKihhLXMpLShpLW8pKihuLXMpPj0wfWZ1bmN0aW9uIHYodCxlKXtyZXR1cm4gdC5uZXh0LmkhPT1lLmkmJnQucHJldi5pIT09ZS5pJiYhZnVuY3Rpb24odCxlKXt2YXIgcj10O2Rve2lmKHIuaSE9PXQuaSYmci5uZXh0LmkhPT10LmkmJnIuaSE9PWUuaSYmci5uZXh0LmkhPT1lLmkmJngocixyLm5leHQsdCxlKSlyZXR1cm4hMDtyPXIubmV4dH13aGlsZShyIT09dCk7cmV0dXJuITF9KHQsZSkmJmIodCxlKSYmYihlLHQpJiZmdW5jdGlvbih0LGUpe3ZhciByPXQsbj0hMSxpPSh0LngrZS54KS8yLGE9KHQueStlLnkpLzI7ZG97ci55PmEhPXIubmV4dC55PmEmJnIubmV4dC55IT09ci55JiZpPChyLm5leHQueC1yLngpKihhLXIueSkvKHIubmV4dC55LXIueSkrci54JiYobj0hbikscj1yLm5leHR9d2hpbGUociE9PXQpO3JldHVybiBufSh0LGUpfWZ1bmN0aW9uIG0odCxlLHIpe3JldHVybihlLnktdC55KSooci54LWUueCktKGUueC10LngpKihyLnktZS55KX1mdW5jdGlvbiB5KHQsZSl7cmV0dXJuIHQueD09PWUueCYmdC55PT09ZS55fWZ1bmN0aW9uIHgodCxlLHIsbil7cmV0dXJuISEoeSh0LGUpJiZ5KHIsbil8fHkodCxuKSYmeShyLGUpKXx8bSh0LGUscik+MCE9bSh0LGUsbik+MCYmbShyLG4sdCk+MCE9bShyLG4sZSk+MH1mdW5jdGlvbiBiKHQsZSl7cmV0dXJuIG0odC5wcmV2LHQsdC5uZXh0KTwwP20odCxlLHQubmV4dCk+PTAmJm0odCx0LnByZXYsZSk+PTA6bSh0LGUsdC5wcmV2KTwwfHxtKHQsdC5uZXh0LGUpPDB9ZnVuY3Rpb24gXyh0LGUpe3ZhciByPW5ldyBBKHQuaSx0LngsdC55KSxuPW5ldyBBKGUuaSxlLngsZS55KSxpPXQubmV4dCxhPWUucHJldjtyZXR1cm4gdC5uZXh0PWUsZS5wcmV2PXQsci5uZXh0PWksaS5wcmV2PXIsbi5uZXh0PXIsci5wcmV2PW4sYS5uZXh0PW4sbi5wcmV2PWEsbn1mdW5jdGlvbiB3KHQsZSxyLG4pe3ZhciBpPW5ldyBBKHQsZSxyKTtyZXR1cm4gbj8oaS5uZXh0PW4ubmV4dCxpLnByZXY9bixuLm5leHQucHJldj1pLG4ubmV4dD1pKTooaS5wcmV2PWksaS5uZXh0PWkpLGl9ZnVuY3Rpb24gayh0KXt0Lm5leHQucHJldj10LnByZXYsdC5wcmV2Lm5leHQ9dC5uZXh0LHQucHJldlomJih0LnByZXZaLm5leHRaPXQubmV4dFopLHQubmV4dFomJih0Lm5leHRaLnByZXZaPXQucHJldlopfWZ1bmN0aW9uIEEodCxlLHIpe3RoaXMuaT10LHRoaXMueD1lLHRoaXMueT1yLHRoaXMucHJldj1udWxsLHRoaXMubmV4dD1udWxsLHRoaXMuej1udWxsLHRoaXMucHJldlo9bnVsbCx0aGlzLm5leHRaPW51bGwsdGhpcy5zdGVpbmVyPSExfWZ1bmN0aW9uIFQodCxlLHIsbil7Zm9yKHZhciBpPTAsYT1lLG89ci1uO2E8cjthKz1uKWkrPSh0W29dLXRbYV0pKih0W2ErMV0rdFtvKzFdKSxvPWE7cmV0dXJuIGl9ZS5leHBvcnRzPW4sZS5leHBvcnRzLmRlZmF1bHQ9bixuLmRldmlhdGlvbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lJiZlLmxlbmd0aCxhPWk/ZVswXSpyOnQubGVuZ3RoLG89TWF0aC5hYnMoVCh0LDAsYSxyKSk7aWYoaSlmb3IodmFyIHM9MCxsPWUubGVuZ3RoO3M8bDtzKyspe3ZhciBjPWVbc10qcix1PXM8bC0xP2VbcysxXSpyOnQubGVuZ3RoO28tPU1hdGguYWJzKFQodCxjLHUscikpfXZhciBoPTA7Zm9yKHM9MDtzPG4ubGVuZ3RoO3MrPTMpe3ZhciBmPW5bc10qcixwPW5bcysxXSpyLGQ9bltzKzJdKnI7aCs9TWF0aC5hYnMoKHRbZl0tdFtkXSkqKHRbcCsxXS10W2YrMV0pLSh0W2ZdLXRbcF0pKih0W2QrMV0tdFtmKzFdKSl9cmV0dXJuIDA9PT1vJiYwPT09aD8wOk1hdGguYWJzKChoLW8pL28pfSxuLmZsYXR0ZW49ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF1bMF0ubGVuZ3RoLHI9e3ZlcnRpY2VzOltdLGhvbGVzOltdLGRpbWVuc2lvbnM6ZX0sbj0wLGk9MDtpPHQubGVuZ3RoO2krKyl7Zm9yKHZhciBhPTA7YTx0W2ldLmxlbmd0aDthKyspZm9yKHZhciBvPTA7bzxlO28rKylyLnZlcnRpY2VzLnB1c2godFtpXVthXVtvXSk7aT4wJiYobis9dFtpLTFdLmxlbmd0aCxyLmhvbGVzLnB1c2gobikpfXJldHVybiByfX0se31dLDE2NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoO2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlKXtlPTA7Zm9yKHZhciBpPTA7aTxyOysraSl7dmFyIGE9dFtpXTtlPU1hdGgubWF4KGUsYVswXSxhWzFdKX1lPTErKDB8ZSl9ZXw9MDtmb3IodmFyIG89bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKW9baV09W107Zm9yKHZhciBpPTA7aTxyOysraSl7dmFyIGE9dFtpXTtvW2FbMF1dLnB1c2goYVsxXSksb1thWzFdXS5wdXNoKGFbMF0pfWZvcih2YXIgcz0wO3M8ZTsrK3MpbihvW3NdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pO3JldHVybiBvfTt2YXIgbj10KFwidW5pcVwiKX0se3VuaXE6NTMyfV0sMTY1OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcInN0cm9uZ2x5LWNvbm5lY3RlZC1jb21wb25lbnRzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyPVtdLGk9W10sYT1bXSxvPXt9LHM9W107ZnVuY3Rpb24gbCh0KXt2YXIgcixuLHU9ITE7Zm9yKGkucHVzaCh0KSxhW3RdPSEwLHI9MDtyPHNbdF0ubGVuZ3RoO3IrKykobj1zW3RdW3JdKT09PWU/KGMoZSxpKSx1PSEwKTphW25dfHwodT1sKG4pKTtpZih1KSFmdW5jdGlvbiB0KGUpe2FbZV09ITEsby5oYXNPd25Qcm9wZXJ0eShlKSYmT2JqZWN0LmtleXMob1tlXSkuZm9yRWFjaChmdW5jdGlvbihyKXtkZWxldGUgb1tlXVtyXSxhW3JdJiZ0KHIpfSl9KHQpO2Vsc2UgZm9yKHI9MDtyPHNbdF0ubGVuZ3RoO3IrKyl7bj1zW3RdW3JdO3ZhciBoPW9bbl07aHx8KGg9e30sb1tuXT1oKSxoW25dPSEwfXJldHVybiBpLnBvcCgpLHV9ZnVuY3Rpb24gYyh0LGUpe3ZhciBuPVtdLmNvbmNhdChlKS5jb25jYXQodCk7ci5wdXNoKG4pfWZ1bmN0aW9uIHUoZSl7IWZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXI8ZSYmKHRbcl09W10pLHRbcl09dFtyXS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQ+PWV9KX0oZSk7Zm9yKHZhciByLGk9bih0KS5jb21wb25lbnRzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGg+MX0pLGE9MS8wLG89MDtvPGkubGVuZ3RoO28rKylmb3IodmFyIHM9MDtzPGlbb10ubGVuZ3RoO3MrKylpW29dW3NdPGEmJihhPWlbb11bc10scj1vKTt2YXIgbD1pW3JdO3JldHVybiEhbCYme2xlYXN0VmVydGV4OmEsYWRqTGlzdDp0Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybi0xPT09bC5pbmRleE9mKGUpP1tdOnQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybi0xIT09bC5pbmRleE9mKHQpfSl9KX19ZT0wO2Zvcih2YXIgaD10Lmxlbmd0aDtlPGg7KXt2YXIgZj11KGUpO2lmKGU9Zi5sZWFzdFZlcnRleCxzPWYuYWRqTGlzdCl7Zm9yKHZhciBwPTA7cDxzLmxlbmd0aDtwKyspZm9yKHZhciBkPTA7ZDxzW3BdLmxlbmd0aDtkKyspe3ZhciBnPXNbcF1bZF07YVsrZ109ITEsb1tnXT17fX1sKGUpLGUrPTF9ZWxzZSBlPWh9cmV0dXJuIHJ9fSx7XCJzdHJvbmdseS1jb25uZWN0ZWQtY29tcG9uZW50c1wiOjUxNX1dLDE2NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWVcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcykubGVuZ3RoPTAsdGhpc319LHtcIi4uLy4uL29iamVjdC92YWxpZC12YWx1ZVwiOjE5OH1dLDE2NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi9pcy1pbXBsZW1lbnRlZFwiKSgpP0FycmF5LmZyb206dChcIi4vc2hpbVwiKX0se1wiLi9pcy1pbXBsZW1lbnRlZFwiOjE2OCxcIi4vc2hpbVwiOjE2OX1dLDE2ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGUscj1BcnJheS5mcm9tO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHImJihlPXIodD1bXCJyYXpcIixcImR3YVwiXSksQm9vbGVhbihlJiZlIT09dCYmXCJkd2FcIj09PWVbMV0pKX19LHt9XSwxNjk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZXM2LXN5bWJvbFwiKS5pdGVyYXRvcixpPXQoXCIuLi8uLi9mdW5jdGlvbi9pcy1hcmd1bWVudHNcIiksYT10KFwiLi4vLi4vZnVuY3Rpb24vaXMtZnVuY3Rpb25cIiksbz10KFwiLi4vLi4vbnVtYmVyL3RvLXBvcy1pbnRlZ2VyXCIpLHM9dChcIi4uLy4uL29iamVjdC92YWxpZC1jYWxsYWJsZVwiKSxsPXQoXCIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWVcIiksYz10KFwiLi4vLi4vb2JqZWN0L2lzLXZhbHVlXCIpLHU9dChcIi4uLy4uL3N0cmluZy9pcy1zdHJpbmdcIiksaD1BcnJheS5pc0FycmF5LGY9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwscD17Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bnVsbH0sZD1PYmplY3QuZGVmaW5lUHJvcGVydHk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsZyx2LG0seSx4LGIsXyx3LGs9YXJndW1lbnRzWzFdLEE9YXJndW1lbnRzWzJdO2lmKHQ9T2JqZWN0KGwodCkpLGMoaykmJnMoayksdGhpcyYmdGhpcyE9PUFycmF5JiZhKHRoaXMpKWU9dGhpcztlbHNle2lmKCFrKXtpZihpKHQpKXJldHVybiAxIT09KG09dC5sZW5ndGgpP0FycmF5LmFwcGx5KG51bGwsdCk6KCh2PW5ldyBBcnJheSgxKSlbMF09dFswXSx2KTtpZihoKHQpKXtmb3Iodj1uZXcgQXJyYXkobT10Lmxlbmd0aCkscj0wO3I8bTsrK3IpdltyXT10W3JdO3JldHVybiB2fX12PVtdfWlmKCFoKHQpKWlmKHZvaWQgMCE9PShfPXRbbl0pKXtmb3IoeD1zKF8pLmNhbGwodCksZSYmKHY9bmV3IGUpLGI9eC5uZXh0KCkscj0wOyFiLmRvbmU7KXc9az9mLmNhbGwoayxBLGIudmFsdWUscik6Yi52YWx1ZSxlPyhwLnZhbHVlPXcsZCh2LHIscCkpOnZbcl09dyxiPXgubmV4dCgpLCsrcjttPXJ9ZWxzZSBpZih1KHQpKXtmb3IobT10Lmxlbmd0aCxlJiYodj1uZXcgZSkscj0wLGc9MDtyPG07KytyKXc9dFtyXSxyKzE8bSYmKHk9dy5jaGFyQ29kZUF0KDApKT49NTUyOTYmJnk8PTU2MzE5JiYodys9dFsrK3JdKSx3PWs/Zi5jYWxsKGssQSx3LGcpOncsZT8ocC52YWx1ZT13LGQodixnLHApKTp2W2ddPXcsKytnO209Z31pZih2b2lkIDA9PT1tKWZvcihtPW8odC5sZW5ndGgpLGUmJih2PW5ldyBlKG0pKSxyPTA7cjxtOysrcil3PWs/Zi5jYWxsKGssQSx0W3JdLHIpOnRbcl0sZT8ocC52YWx1ZT13LGQodixyLHApKTp2W3JdPXc7cmV0dXJuIGUmJihwLnZhbHVlPW51bGwsdi5sZW5ndGg9bSksdn19LHtcIi4uLy4uL2Z1bmN0aW9uL2lzLWFyZ3VtZW50c1wiOjE3MCxcIi4uLy4uL2Z1bmN0aW9uL2lzLWZ1bmN0aW9uXCI6MTcxLFwiLi4vLi4vbnVtYmVyL3RvLXBvcy1pbnRlZ2VyXCI6MTc3LFwiLi4vLi4vb2JqZWN0L2lzLXZhbHVlXCI6MTg3LFwiLi4vLi4vb2JqZWN0L3ZhbGlkLWNhbGxhYmxlXCI6MTk2LFwiLi4vLi4vb2JqZWN0L3ZhbGlkLXZhbHVlXCI6MTk4LFwiLi4vLi4vc3RyaW5nL2lzLXN0cmluZ1wiOjIwMixcImVzNi1zeW1ib2xcIjoyMTJ9XSwxNzA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGk9bi5jYWxsKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuLmNhbGwodCk9PT1pfX0se31dLDE3MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaT1uLmNhbGwodChcIi4vbm9vcFwiKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJm4uY2FsbCh0KT09PWl9fSx7XCIuL25vb3BcIjoxNzJ9XSwxNzI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSx7fV0sMTczOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuL2lzLWltcGxlbWVudGVkXCIpKCk/TWF0aC5zaWduOnQoXCIuL3NoaW1cIil9LHtcIi4vaXMtaW1wbGVtZW50ZWRcIjoxNzQsXCIuL3NoaW1cIjoxNzV9XSwxNzQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1NYXRoLnNpZ247cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmKDE9PT10KDEwKSYmLTE9PT10KC0yMCkpfX0se31dLDE3NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD1OdW1iZXIodCksaXNOYU4odCl8fDA9PT10P3Q6dD4wPzE6LTF9fSx7fV0sMTc2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL21hdGgvc2lnblwiKSxpPU1hdGguYWJzLGE9TWF0aC5mbG9vcjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGlzTmFOKHQpPzA6MCE9PSh0PU51bWJlcih0KSkmJmlzRmluaXRlKHQpP24odCkqYShpKHQpKTp0fX0se1wiLi4vbWF0aC9zaWduXCI6MTczfV0sMTc3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vdG8taW50ZWdlclwiKSxpPU1hdGgubWF4O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSgwLG4odCkpfX0se1wiLi90by1pbnRlZ2VyXCI6MTc2fV0sMTc4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vdmFsaWQtY2FsbGFibGVcIiksaT10KFwiLi92YWxpZC12YWx1ZVwiKSxhPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLG89RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwscz1PYmplY3Qua2V5cyxsPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIsYyl7dmFyIHUsaD1hcmd1bWVudHNbMl0sZj1hcmd1bWVudHNbM107cmV0dXJuIHI9T2JqZWN0KGkocikpLG4oYyksdT1zKHIpLGYmJnUuc29ydChcImZ1bmN0aW9uXCI9PXR5cGVvZiBmP2EuY2FsbChmLHIpOnZvaWQgMCksXCJmdW5jdGlvblwiIT10eXBlb2YgdCYmKHQ9dVt0XSksby5jYWxsKHQsdSxmdW5jdGlvbih0LG4pe3JldHVybiBsLmNhbGwocix0KT9vLmNhbGwoYyxoLHJbdF0sdCxyLG4pOmV9KX19fSx7XCIuL3ZhbGlkLWNhbGxhYmxlXCI6MTk2LFwiLi92YWxpZC12YWx1ZVwiOjE5OH1dLDE3OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi9pcy1pbXBsZW1lbnRlZFwiKSgpP09iamVjdC5hc3NpZ246dChcIi4vc2hpbVwiKX0se1wiLi9pcy1pbXBsZW1lbnRlZFwiOjE4MCxcIi4vc2hpbVwiOjE4MX1dLDE4MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGU9T2JqZWN0LmFzc2lnbjtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYoZSh0PXtmb286XCJyYXpcIn0se2JhcjpcImR3YVwifSx7dHJ6eTpcInRyenlcIn0pLHQuZm9vK3QuYmFyK3QudHJ6eT09PVwicmF6ZHdhdHJ6eVwiKX19LHt9XSwxODE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4va2V5c1wiKSxpPXQoXCIuLi92YWxpZC12YWx1ZVwiKSxhPU1hdGgubWF4O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG8scyxsPWEoYXJndW1lbnRzLmxlbmd0aCwyKTtmb3IodD1PYmplY3QoaSh0KSkscz1mdW5jdGlvbihuKXt0cnl7dFtuXT1lW25dfWNhdGNoKHQpe3J8fChyPXQpfX0sbz0xO288bDsrK28pZT1hcmd1bWVudHNbb10sbihlKS5mb3JFYWNoKHMpO2lmKHZvaWQgMCE9PXIpdGhyb3cgcjtyZXR1cm4gdH19LHtcIi4uL2tleXNcIjoxODgsXCIuLi92YWxpZC12YWx1ZVwiOjE5OH1dLDE4MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9hcnJheS9mcm9tXCIpLGk9dChcIi4vYXNzaWduXCIpLGE9dChcIi4vdmFsaWQtdmFsdWVcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdChhKHQpKSxyPWFyZ3VtZW50c1sxXSxvPU9iamVjdChhcmd1bWVudHNbMl0pO2lmKGUhPT10JiYhcilyZXR1cm4gZTt2YXIgcz17fTtyZXR1cm4gcj9uKHIsZnVuY3Rpb24oZSl7KG8uZW5zdXJlfHxlIGluIHQpJiYoc1tlXT10W2VdKX0pOmkocyx0KSxzfX0se1wiLi4vYXJyYXkvZnJvbVwiOjE2NyxcIi4vYXNzaWduXCI6MTc5LFwiLi92YWxpZC12YWx1ZVwiOjE5OH1dLDE4MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuLGksYSxvLHM9T2JqZWN0LmNyZWF0ZTt0KFwiLi9zZXQtcHJvdG90eXBlLW9mL2lzLWltcGxlbWVudGVkXCIpKCl8fChuPXQoXCIuL3NldC1wcm90b3R5cGUtb2Yvc2hpbVwiKSksZS5leHBvcnRzPW4/MSE9PW4ubGV2ZWw/czooaT17fSxhPXt9LG89e2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0sT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoT2JqZWN0LnByb3RvdHlwZSkuZm9yRWFjaChmdW5jdGlvbih0KXthW3RdPVwiX19wcm90b19fXCIhPT10P286e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhpLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLFwibnVsbFBvbHlmaWxsXCIse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLHZhbHVlOml9KSxmdW5jdGlvbih0LGUpe3JldHVybiBzKG51bGw9PT10P2k6dCxlKX0pOnN9LHtcIi4vc2V0LXByb3RvdHlwZS1vZi9pcy1pbXBsZW1lbnRlZFwiOjE5NCxcIi4vc2V0LXByb3RvdHlwZS1vZi9zaGltXCI6MTk1fV0sMTg0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuL19pdGVyYXRlXCIpKFwiZm9yRWFjaFwiKX0se1wiLi9faXRlcmF0ZVwiOjE3OH1dLDE4NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0fX0se31dLDE4NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2lzLXZhbHVlXCIpLGk9e2Z1bmN0aW9uOiEwLG9iamVjdDohMH07ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQpJiZpW3R5cGVvZiB0XXx8ITF9fSx7XCIuL2lzLXZhbHVlXCI6MTg3fV0sMTg3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2Z1bmN0aW9uL25vb3BcIikoKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1uJiZudWxsIT09dH19LHtcIi4uL2Z1bmN0aW9uL25vb3BcIjoxNzJ9XSwxODg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4vaXMtaW1wbGVtZW50ZWRcIikoKT9PYmplY3Qua2V5czp0KFwiLi9zaGltXCIpfSx7XCIuL2lzLWltcGxlbWVudGVkXCI6MTg5LFwiLi9zaGltXCI6MTkwfV0sMTg5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3Qua2V5cyhcInByaW1pdGl2ZVwiKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19fSx7fV0sMTkwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2lzLXZhbHVlXCIpLGk9T2JqZWN0LmtleXM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKG4odCk/T2JqZWN0KHQpOnQpfX0se1wiLi4vaXMtdmFsdWVcIjoxODd9XSwxOTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi92YWxpZC1jYWxsYWJsZVwiKSxpPXQoXCIuL2Zvci1lYWNoXCIpLGE9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e30sbz1hcmd1bWVudHNbMl07cmV0dXJuIG4oZSksaSh0LGZ1bmN0aW9uKHQsbixpLHMpe3Jbbl09YS5jYWxsKGUsbyx0LG4saSxzKX0pLHJ9fSx7XCIuL2Zvci1lYWNoXCI6MTg0LFwiLi92YWxpZC1jYWxsYWJsZVwiOjE5Nn1dLDE5MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2lzLXZhbHVlXCIpLGk9QXJyYXkucHJvdG90eXBlLmZvckVhY2gsYT1PYmplY3QuY3JlYXRlO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1hKG51bGwpO3JldHVybiBpLmNhbGwoYXJndW1lbnRzLGZ1bmN0aW9uKHQpe24odCkmJmZ1bmN0aW9uKHQsZSl7dmFyIHI7Zm9yKHIgaW4gdCllW3JdPXRbcl19KE9iamVjdCh0KSxlKX0pLGV9fSx7XCIuL2lzLXZhbHVlXCI6MTg3fV0sMTkzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuL2lzLWltcGxlbWVudGVkXCIpKCk/T2JqZWN0LnNldFByb3RvdHlwZU9mOnQoXCIuL3NoaW1cIil9LHtcIi4vaXMtaW1wbGVtZW50ZWRcIjoxOTQsXCIuL3NoaW1cIjoxOTV9XSwxOTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1PYmplY3QuY3JlYXRlLGk9T2JqZWN0LmdldFByb3RvdHlwZU9mLGE9e307ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LnNldFByb3RvdHlwZU9mLGU9YXJndW1lbnRzWzBdfHxuO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJmkodChlKG51bGwpLGEpKT09PWF9fSx7fV0sMTk1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saSxhLG8scz10KFwiLi4vaXMtb2JqZWN0XCIpLGw9dChcIi4uL3ZhbGlkLXZhbHVlXCIpLGM9T2JqZWN0LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mLHU9T2JqZWN0LmRlZmluZVByb3BlcnR5LGg9e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH07bj1mdW5jdGlvbih0LGUpe2lmKGwodCksbnVsbD09PWV8fHMoZSkpcmV0dXJuIHQ7dGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb3RvdHlwZSBtdXN0IGJlIG51bGwgb3IgYW4gb2JqZWN0XCIpfSxlLmV4cG9ydHM9KGk9ZnVuY3Rpb24oKXt2YXIgdCxlPU9iamVjdC5jcmVhdGUobnVsbCkscj17fSxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LnByb3RvdHlwZSxcIl9fcHJvdG9fX1wiKTtpZihuKXt0cnl7KHQ9bi5zZXQpLmNhbGwoZSxyKX1jYXRjaCh0KXt9aWYoT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09cilyZXR1cm57c2V0OnQsbGV2ZWw6Mn19cmV0dXJuIGUuX19wcm90b19fPXIsT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09cj97bGV2ZWw6Mn06KChlPXt9KS5fX3Byb3RvX189cixPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1yJiZ7bGV2ZWw6MX0pfSgpKT8oMj09PWkubGV2ZWw/aS5zZXQ/KG89aS5zZXQsYT1mdW5jdGlvbih0LGUpe3JldHVybiBvLmNhbGwobih0LGUpLGUpLHR9KTphPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxlKS5fX3Byb3RvX189ZSx0fTphPWZ1bmN0aW9uIHQoZSxyKXt2YXIgaTtyZXR1cm4gbihlLHIpLChpPWMuY2FsbCh0Lm51bGxQb2x5ZmlsbCxlKSkmJmRlbGV0ZSB0Lm51bGxQb2x5ZmlsbC5fX3Byb3RvX18sbnVsbD09PXImJihyPXQubnVsbFBvbHlmaWxsKSxlLl9fcHJvdG9fXz1yLGkmJnUodC5udWxsUG9seWZpbGwsXCJfX3Byb3RvX19cIixoKSxlfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxcImxldmVsXCIse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLHZhbHVlOmkubGV2ZWx9KSk6bnVsbCx0KFwiLi4vY3JlYXRlXCIpfSx7XCIuLi9jcmVhdGVcIjoxODMsXCIuLi9pcy1vYmplY3RcIjoxODYsXCIuLi92YWxpZC12YWx1ZVwiOjE5OH1dLDE5NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYSBmdW5jdGlvblwiKTtyZXR1cm4gdH19LHt9XSwxOTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9pcy1vYmplY3RcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFuKHQpKXRocm93IG5ldyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYW4gT2JqZWN0XCIpO3JldHVybiB0fX0se1wiLi9pcy1vYmplY3RcIjoxODZ9XSwxOTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9pcy12YWx1ZVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgbnVsbCBvciB1bmRlZmluZWRcIik7cmV0dXJuIHR9fSx7XCIuL2lzLXZhbHVlXCI6MTg3fV0sMTk5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuL2lzLWltcGxlbWVudGVkXCIpKCk/U3RyaW5nLnByb3RvdHlwZS5jb250YWluczp0KFwiLi9zaGltXCIpfSx7XCIuL2lzLWltcGxlbWVudGVkXCI6MjAwLFwiLi9zaGltXCI6MjAxfV0sMjAwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49XCJyYXpkd2F0cnp5XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2Ygbi5jb250YWlucyYmKCEwPT09bi5jb250YWlucyhcImR3YVwiKSYmITE9PT1uLmNvbnRhaW5zKFwiZm9vXCIpKX19LHt9XSwyMDE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1TdHJpbmcucHJvdG90eXBlLmluZGV4T2Y7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuLmNhbGwodGhpcyx0LGFyZ3VtZW50c1sxXSk+LTF9fSx7fV0sMjAyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxpPW4uY2FsbChcIlwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHR8fHQmJlwib2JqZWN0XCI9PXR5cGVvZiB0JiYodCBpbnN0YW5jZW9mIFN0cmluZ3x8bi5jYWxsKHQpPT09aSl8fCExfX0se31dLDIwMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCksaT1NYXRoLnJhbmRvbTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdDtkb3t0PWkoKS50b1N0cmluZygzNikuc2xpY2UoMil9d2hpbGUoblt0XSk7cmV0dXJuIHR9fSx7fV0sMjA0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saT10KFwiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZlwiKSxhPXQoXCJlczUtZXh0L3N0cmluZy8jL2NvbnRhaW5zXCIpLG89dChcImRcIikscz10KFwiZXM2LXN5bWJvbFwiKSxsPXQoXCIuL1wiKSxjPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtuPWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3J1wiKTtsLmNhbGwodGhpcyx0KSxlPWU/YS5jYWxsKGUsXCJrZXkrdmFsdWVcIik/XCJrZXkrdmFsdWVcIjphLmNhbGwoZSxcImtleVwiKT9cImtleVwiOlwidmFsdWVcIjpcInZhbHVlXCIsYyh0aGlzLFwiX19raW5kX19cIixvKFwiXCIsZSkpfSxpJiZpKG4sbCksZGVsZXRlIG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobC5wcm90b3R5cGUse19yZXNvbHZlOm8oZnVuY3Rpb24odCl7cmV0dXJuXCJ2YWx1ZVwiPT09dGhpcy5fX2tpbmRfXz90aGlzLl9fbGlzdF9fW3RdOlwia2V5K3ZhbHVlXCI9PT10aGlzLl9fa2luZF9fP1t0LHRoaXMuX19saXN0X19bdF1dOnR9KX0pLGMobi5wcm90b3R5cGUscy50b1N0cmluZ1RhZyxvKFwiY1wiLFwiQXJyYXkgSXRlcmF0b3JcIikpfSx7XCIuL1wiOjIwNyxkOjE0MixcImVzNS1leHQvb2JqZWN0L3NldC1wcm90b3R5cGUtb2ZcIjoxOTMsXCJlczUtZXh0L3N0cmluZy8jL2NvbnRhaW5zXCI6MTk5LFwiZXM2LXN5bWJvbFwiOjIxMn1dLDIwNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50c1wiKSxpPXQoXCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZVwiKSxhPXQoXCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmdcIiksbz10KFwiLi9nZXRcIikscz1BcnJheS5pc0FycmF5LGw9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsYz1BcnJheS5wcm90b3R5cGUuc29tZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcix1LGgsZixwLGQsZyx2LG09YXJndW1lbnRzWzJdO2lmKHModCl8fG4odCk/cj1cImFycmF5XCI6YSh0KT9yPVwic3RyaW5nXCI6dD1vKHQpLGkoZSksaD1mdW5jdGlvbigpe2Y9ITB9LFwiYXJyYXlcIiE9PXIpaWYoXCJzdHJpbmdcIiE9PXIpZm9yKHU9dC5uZXh0KCk7IXUuZG9uZTspe2lmKGwuY2FsbChlLG0sdS52YWx1ZSxoKSxmKXJldHVybjt1PXQubmV4dCgpfWVsc2UgZm9yKGQ9dC5sZW5ndGgscD0wO3A8ZCYmKGc9dFtwXSxwKzE8ZCYmKHY9Zy5jaGFyQ29kZUF0KDApKT49NTUyOTYmJnY8PTU2MzE5JiYoZys9dFsrK3BdKSxsLmNhbGwoZSxtLGcsaCksIWYpOysrcCk7ZWxzZSBjLmNhbGwodCxmdW5jdGlvbih0KXtyZXR1cm4gbC5jYWxsKGUsbSx0LGgpLGZ9KX19LHtcIi4vZ2V0XCI6MjA2LFwiZXM1LWV4dC9mdW5jdGlvbi9pcy1hcmd1bWVudHNcIjoxNzAsXCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZVwiOjE5NixcImVzNS1leHQvc3RyaW5nL2lzLXN0cmluZ1wiOjIwMn1dLDIwNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50c1wiKSxpPXQoXCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmdcIiksYT10KFwiLi9hcnJheVwiKSxvPXQoXCIuL3N0cmluZ1wiKSxzPXQoXCIuL3ZhbGlkLWl0ZXJhYmxlXCIpLGw9dChcImVzNi1zeW1ib2xcIikuaXRlcmF0b3I7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHModClbbF0/dFtsXSgpOm4odCk/bmV3IGEodCk6aSh0KT9uZXcgbyh0KTpuZXcgYSh0KX19LHtcIi4vYXJyYXlcIjoyMDQsXCIuL3N0cmluZ1wiOjIwOSxcIi4vdmFsaWQtaXRlcmFibGVcIjoyMTAsXCJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50c1wiOjE3MCxcImVzNS1leHQvc3RyaW5nL2lzLXN0cmluZ1wiOjIwMixcImVzNi1zeW1ib2xcIjoyMTJ9XSwyMDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbixpPXQoXCJlczUtZXh0L2FycmF5LyMvY2xlYXJcIiksYT10KFwiZXM1LWV4dC9vYmplY3QvYXNzaWduXCIpLG89dChcImVzNS1leHQvb2JqZWN0L3ZhbGlkLWNhbGxhYmxlXCIpLHM9dChcImVzNS1leHQvb2JqZWN0L3ZhbGlkLXZhbHVlXCIpLGw9dChcImRcIiksYz10KFwiZC9hdXRvLWJpbmRcIiksdT10KFwiZXM2LXN5bWJvbFwiKSxoPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxmPU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzO2UuZXhwb3J0cz1uPWZ1bmN0aW9uKHQsZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgbikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnXCIpO2YodGhpcyx7X19saXN0X186bChcIndcIixzKHQpKSxfX2NvbnRleHRfXzpsKFwid1wiLGUpLF9fbmV4dEluZGV4X186bChcIndcIiwwKX0pLGUmJihvKGUub24pLGUub24oXCJfYWRkXCIsdGhpcy5fb25BZGQpLGUub24oXCJfZGVsZXRlXCIsdGhpcy5fb25EZWxldGUpLGUub24oXCJfY2xlYXJcIix0aGlzLl9vbkNsZWFyKSl9LGRlbGV0ZSBuLnByb3RvdHlwZS5jb25zdHJ1Y3RvcixmKG4ucHJvdG90eXBlLGEoe19uZXh0OmwoZnVuY3Rpb24oKXt2YXIgdDtpZih0aGlzLl9fbGlzdF9fKXJldHVybiB0aGlzLl9fcmVkb19fJiZ2b2lkIDAhPT0odD10aGlzLl9fcmVkb19fLnNoaWZ0KCkpP3Q6dGhpcy5fX25leHRJbmRleF9fPHRoaXMuX19saXN0X18ubGVuZ3RoP3RoaXMuX19uZXh0SW5kZXhfXysrOnZvaWQgdGhpcy5fdW5CaW5kKCl9KSxuZXh0OmwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlYXRlUmVzdWx0KHRoaXMuX25leHQoKSl9KSxfY3JlYXRlUmVzdWx0OmwoZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/e2RvbmU6ITAsdmFsdWU6dm9pZCAwfTp7ZG9uZTohMSx2YWx1ZTp0aGlzLl9yZXNvbHZlKHQpfX0pLF9yZXNvbHZlOmwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX19saXN0X19bdF19KSxfdW5CaW5kOmwoZnVuY3Rpb24oKXt0aGlzLl9fbGlzdF9fPW51bGwsZGVsZXRlIHRoaXMuX19yZWRvX18sdGhpcy5fX2NvbnRleHRfXyYmKHRoaXMuX19jb250ZXh0X18ub2ZmKFwiX2FkZFwiLHRoaXMuX29uQWRkKSx0aGlzLl9fY29udGV4dF9fLm9mZihcIl9kZWxldGVcIix0aGlzLl9vbkRlbGV0ZSksdGhpcy5fX2NvbnRleHRfXy5vZmYoXCJfY2xlYXJcIix0aGlzLl9vbkNsZWFyKSx0aGlzLl9fY29udGV4dF9fPW51bGwpfSksdG9TdHJpbmc6bChmdW5jdGlvbigpe3JldHVyblwiW29iamVjdCBcIisodGhpc1t1LnRvU3RyaW5nVGFnXXx8XCJPYmplY3RcIikrXCJdXCJ9KX0sYyh7X29uQWRkOmwoZnVuY3Rpb24odCl7dD49dGhpcy5fX25leHRJbmRleF9ffHwoKyt0aGlzLl9fbmV4dEluZGV4X18sdGhpcy5fX3JlZG9fXz8odGhpcy5fX3JlZG9fXy5mb3JFYWNoKGZ1bmN0aW9uKGUscil7ZT49dCYmKHRoaXMuX19yZWRvX19bcl09KytlKX0sdGhpcyksdGhpcy5fX3JlZG9fXy5wdXNoKHQpKTpoKHRoaXMsXCJfX3JlZG9fX1wiLGwoXCJjXCIsW3RdKSkpfSksX29uRGVsZXRlOmwoZnVuY3Rpb24odCl7dmFyIGU7dD49dGhpcy5fX25leHRJbmRleF9ffHwoLS10aGlzLl9fbmV4dEluZGV4X18sdGhpcy5fX3JlZG9fXyYmKC0xIT09KGU9dGhpcy5fX3JlZG9fXy5pbmRleE9mKHQpKSYmdGhpcy5fX3JlZG9fXy5zcGxpY2UoZSwxKSx0aGlzLl9fcmVkb19fLmZvckVhY2goZnVuY3Rpb24oZSxyKXtlPnQmJih0aGlzLl9fcmVkb19fW3JdPS0tZSl9LHRoaXMpKSl9KSxfb25DbGVhcjpsKGZ1bmN0aW9uKCl7dGhpcy5fX3JlZG9fXyYmaS5jYWxsKHRoaXMuX19yZWRvX18pLHRoaXMuX19uZXh0SW5kZXhfXz0wfSl9KSkpLGgobi5wcm90b3R5cGUsdS5pdGVyYXRvcixsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSl9LHtkOjE0MixcImQvYXV0by1iaW5kXCI6MTQxLFwiZXM1LWV4dC9hcnJheS8jL2NsZWFyXCI6MTY2LFwiZXM1LWV4dC9vYmplY3QvYXNzaWduXCI6MTc5LFwiZXM1LWV4dC9vYmplY3QvdmFsaWQtY2FsbGFibGVcIjoxOTYsXCJlczUtZXh0L29iamVjdC92YWxpZC12YWx1ZVwiOjE5OCxcImVzNi1zeW1ib2xcIjoyMTJ9XSwyMDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZXM1LWV4dC9mdW5jdGlvbi9pcy1hcmd1bWVudHNcIiksaT10KFwiZXM1LWV4dC9vYmplY3QvaXMtdmFsdWVcIiksYT10KFwiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nXCIpLG89dChcImVzNi1zeW1ib2xcIikuaXRlcmF0b3Iscz1BcnJheS5pc0FycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hIWkodCkmJighIXModCl8fCghIWEodCl8fCghIW4odCl8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHRbb10pKSl9fSx7XCJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50c1wiOjE3MCxcImVzNS1leHQvb2JqZWN0L2lzLXZhbHVlXCI6MTg3LFwiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nXCI6MjAyLFwiZXM2LXN5bWJvbFwiOjIxMn1dLDIwOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuLGk9dChcImVzNS1leHQvb2JqZWN0L3NldC1wcm90b3R5cGUtb2ZcIiksYT10KFwiZFwiKSxvPXQoXCJlczYtc3ltYm9sXCIpLHM9dChcIi4vXCIpLGw9T2JqZWN0LmRlZmluZVByb3BlcnR5O249ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3J1wiKTt0PVN0cmluZyh0KSxzLmNhbGwodGhpcyx0KSxsKHRoaXMsXCJfX2xlbmd0aF9fXCIsYShcIlwiLHQubGVuZ3RoKSl9LGkmJmkobixzKSxkZWxldGUgbi5wcm90b3R5cGUuY29uc3RydWN0b3Isbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShzLnByb3RvdHlwZSx7X25leHQ6YShmdW5jdGlvbigpe2lmKHRoaXMuX19saXN0X18pcmV0dXJuIHRoaXMuX19uZXh0SW5kZXhfXzx0aGlzLl9fbGVuZ3RoX18/dGhpcy5fX25leHRJbmRleF9fKys6dm9pZCB0aGlzLl91bkJpbmQoKX0pLF9yZXNvbHZlOmEoZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLl9fbGlzdF9fW3RdO3JldHVybiB0aGlzLl9fbmV4dEluZGV4X189PT10aGlzLl9fbGVuZ3RoX18/cjooZT1yLmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmZTw9NTYzMTk/cit0aGlzLl9fbGlzdF9fW3RoaXMuX19uZXh0SW5kZXhfXysrXTpyfSl9KSxsKG4ucHJvdG90eXBlLG8udG9TdHJpbmdUYWcsYShcImNcIixcIlN0cmluZyBJdGVyYXRvclwiKSl9LHtcIi4vXCI6MjA3LGQ6MTQyLFwiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZlwiOjE5MyxcImVzNi1zeW1ib2xcIjoyMTJ9XSwyMTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9pcy1pdGVyYWJsZVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBpdGVyYWJsZVwiKTtyZXR1cm4gdH19LHtcIi4vaXMtaXRlcmFibGVcIjoyMDh9XSwyMTE6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24obixpKXshZnVuY3Rpb24odCxuKXtcIm9iamVjdFwiPT10eXBlb2YgciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGU/ZS5leHBvcnRzPW4oKTp0LkVTNlByb21pc2U9bigpfSh0aGlzLGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZSh0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0fXZhciByPUFycmF5LmlzQXJyYXk/QXJyYXkuaXNBcnJheTpmdW5jdGlvbih0KXtyZXR1cm5cIltvYmplY3QgQXJyYXldXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9LGE9MCxvPXZvaWQgMCxzPXZvaWQgMCxsPWZ1bmN0aW9uKHQsZSl7Z1thXT10LGdbYSsxXT1lLDI9PT0oYSs9MikmJihzP3Modik6XygpKX07dmFyIGM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dm9pZCAwLHU9Y3x8e30saD11Lk11dGF0aW9uT2JzZXJ2ZXJ8fHUuV2ViS2l0TXV0YXRpb25PYnNlcnZlcixmPVwidW5kZWZpbmVkXCI9PXR5cGVvZiBzZWxmJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbiYmXCJbb2JqZWN0IHByb2Nlc3NdXCI9PT17fS50b1N0cmluZy5jYWxsKG4pLHA9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5JiZcInVuZGVmaW5lZFwiIT10eXBlb2YgaW1wb3J0U2NyaXB0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIE1lc3NhZ2VDaGFubmVsO2Z1bmN0aW9uIGQoKXt2YXIgdD1zZXRUaW1lb3V0O3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHYsMSl9fXZhciBnPW5ldyBBcnJheSgxZTMpO2Z1bmN0aW9uIHYoKXtmb3IodmFyIHQ9MDt0PGE7dCs9Mil7KDAsZ1t0XSkoZ1t0KzFdKSxnW3RdPXZvaWQgMCxnW3QrMV09dm9pZCAwfWE9MH12YXIgbSx5LHgsYixfPXZvaWQgMDtmdW5jdGlvbiB3KHQsZSl7dmFyIHI9YXJndW1lbnRzLG49dGhpcyxpPW5ldyB0aGlzLmNvbnN0cnVjdG9yKFQpO3ZvaWQgMD09PWlbQV0mJlUoaSk7dmFyIGEsbz1uLl9zdGF0ZTtyZXR1cm4gbz8oYT1yW28tMV0sbChmdW5jdGlvbigpe3JldHVybiBqKG8saSxhLG4uX3Jlc3VsdCl9KSk6UihuLGksdCxlKSxpfWZ1bmN0aW9uIGsodCl7aWYodCYmXCJvYmplY3RcIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I9PT10aGlzKXJldHVybiB0O3ZhciBlPW5ldyB0aGlzKFQpO3JldHVybiBPKGUsdCksZX1mP189ZnVuY3Rpb24oKXtyZXR1cm4gbi5uZXh0VGljayh2KX06aD8oeT0wLHg9bmV3IGgodiksYj1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKSx4Lm9ic2VydmUoYix7Y2hhcmFjdGVyRGF0YTohMH0pLF89ZnVuY3Rpb24oKXtiLmRhdGE9eT0rK3klMn0pOnA/KChtPW5ldyBNZXNzYWdlQ2hhbm5lbCkucG9ydDEub25tZXNzYWdlPXYsXz1mdW5jdGlvbigpe3JldHVybiBtLnBvcnQyLnBvc3RNZXNzYWdlKDApfSk6Xz12b2lkIDA9PT1jJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2Z1bmN0aW9uKCl7dHJ5e3ZhciBlPXQoXCJ2ZXJ0eFwiKTtyZXR1cm4gbz1lLnJ1bk9uTG9vcHx8ZS5ydW5PbkNvbnRleHQsZnVuY3Rpb24oKXtvKHYpfX1jYXRjaCh0KXtyZXR1cm4gZCgpfX0oKTpkKCk7dmFyIEE9TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDE2KTtmdW5jdGlvbiBUKCl7fXZhciBNPXZvaWQgMCxTPTEsRT0yLEM9bmV3IEI7ZnVuY3Rpb24gTCh0KXt0cnl7cmV0dXJuIHQudGhlbn1jYXRjaCh0KXtyZXR1cm4gQy5lcnJvcj10LEN9fWZ1bmN0aW9uIHoodCxyLG4pe3IuY29uc3RydWN0b3I9PT10LmNvbnN0cnVjdG9yJiZuPT09dyYmci5jb25zdHJ1Y3Rvci5yZXNvbHZlPT09az9mdW5jdGlvbih0LGUpe2UuX3N0YXRlPT09Uz9EKHQsZS5fcmVzdWx0KTplLl9zdGF0ZT09PUU/UCh0LGUuX3Jlc3VsdCk6UihlLHZvaWQgMCxmdW5jdGlvbihlKXtyZXR1cm4gTyh0LGUpfSxmdW5jdGlvbihlKXtyZXR1cm4gUCh0LGUpfSl9KHQscik6bj09PUM/UCh0LEMuZXJyb3IpOnZvaWQgMD09PW4/RCh0LHIpOmUobik/ZnVuY3Rpb24odCxlLHIpe2woZnVuY3Rpb24odCl7dmFyIG49ITEsaT1mdW5jdGlvbih0LGUscixuKXt0cnl7dC5jYWxsKGUscixuKX1jYXRjaCh0KXtyZXR1cm4gdH19KHIsZSxmdW5jdGlvbihyKXtufHwobj0hMCxlIT09cj9PKHQscik6RCh0LHIpKX0sZnVuY3Rpb24oZSl7bnx8KG49ITAsUCh0LGUpKX0sdC5fbGFiZWwpOyFuJiZpJiYobj0hMCxQKHQsaSkpfSx0KX0odCxyLG4pOkQodCxyKX1mdW5jdGlvbiBPKHQsZSl7dmFyIHI7dD09PWU/UCh0LG5ldyBUeXBlRXJyb3IoXCJZb3UgY2Fubm90IHJlc29sdmUgYSBwcm9taXNlIHdpdGggaXRzZWxmXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZihyPWUpfHxcIm9iamVjdFwiPT10eXBlb2YgciYmbnVsbCE9PXI/eih0LGUsTChlKSk6RCh0LGUpfWZ1bmN0aW9uIEkodCl7dC5fb25lcnJvciYmdC5fb25lcnJvcih0Ll9yZXN1bHQpLEYodCl9ZnVuY3Rpb24gRCh0LGUpe3QuX3N0YXRlPT09TSYmKHQuX3Jlc3VsdD1lLHQuX3N0YXRlPVMsMCE9PXQuX3N1YnNjcmliZXJzLmxlbmd0aCYmbChGLHQpKX1mdW5jdGlvbiBQKHQsZSl7dC5fc3RhdGU9PT1NJiYodC5fc3RhdGU9RSx0Ll9yZXN1bHQ9ZSxsKEksdCkpfWZ1bmN0aW9uIFIodCxlLHIsbil7dmFyIGk9dC5fc3Vic2NyaWJlcnMsYT1pLmxlbmd0aDt0Ll9vbmVycm9yPW51bGwsaVthXT1lLGlbYStTXT1yLGlbYStFXT1uLDA9PT1hJiZ0Ll9zdGF0ZSYmbChGLHQpfWZ1bmN0aW9uIEYodCl7dmFyIGU9dC5fc3Vic2NyaWJlcnMscj10Ll9zdGF0ZTtpZigwIT09ZS5sZW5ndGgpe2Zvcih2YXIgbj12b2lkIDAsaT12b2lkIDAsYT10Ll9yZXN1bHQsbz0wO288ZS5sZW5ndGg7bys9MyluPWVbb10saT1lW28rcl0sbj9qKHIsbixpLGEpOmkoYSk7dC5fc3Vic2NyaWJlcnMubGVuZ3RoPTB9fWZ1bmN0aW9uIEIoKXt0aGlzLmVycm9yPW51bGx9dmFyIE49bmV3IEI7ZnVuY3Rpb24gaih0LHIsbixpKXt2YXIgYT1lKG4pLG89dm9pZCAwLHM9dm9pZCAwLGw9dm9pZCAwLGM9dm9pZCAwO2lmKGEpe2lmKChvPWZ1bmN0aW9uKHQsZSl7dHJ5e3JldHVybiB0KGUpfWNhdGNoKHQpe3JldHVybiBOLmVycm9yPXQsTn19KG4saSkpPT09Tj8oYz0hMCxzPW8uZXJyb3Isbz1udWxsKTpsPSEwLHI9PT1vKXJldHVybiB2b2lkIFAocixuZXcgVHlwZUVycm9yKFwiQSBwcm9taXNlcyBjYWxsYmFjayBjYW5ub3QgcmV0dXJuIHRoYXQgc2FtZSBwcm9taXNlLlwiKSl9ZWxzZSBvPWksbD0hMDtyLl9zdGF0ZSE9PU18fChhJiZsP08ocixvKTpjP1AocixzKTp0PT09Uz9EKHIsbyk6dD09PUUmJlAocixvKSl9dmFyIFY9MDtmdW5jdGlvbiBVKHQpe3RbQV09VisrLHQuX3N0YXRlPXZvaWQgMCx0Ll9yZXN1bHQ9dm9pZCAwLHQuX3N1YnNjcmliZXJzPVtdfWZ1bmN0aW9uIHEodCxlKXt0aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yPXQsdGhpcy5wcm9taXNlPW5ldyB0KFQpLHRoaXMucHJvbWlzZVtBXXx8VSh0aGlzLnByb21pc2UpLHIoZSk/KHRoaXMuX2lucHV0PWUsdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5fcmVtYWluaW5nPWUubGVuZ3RoLHRoaXMuX3Jlc3VsdD1uZXcgQXJyYXkodGhpcy5sZW5ndGgpLDA9PT10aGlzLmxlbmd0aD9EKHRoaXMucHJvbWlzZSx0aGlzLl9yZXN1bHQpOih0aGlzLmxlbmd0aD10aGlzLmxlbmd0aHx8MCx0aGlzLl9lbnVtZXJhdGUoKSwwPT09dGhpcy5fcmVtYWluaW5nJiZEKHRoaXMucHJvbWlzZSx0aGlzLl9yZXN1bHQpKSk6UCh0aGlzLnByb21pc2UsbmV3IEVycm9yKFwiQXJyYXkgTWV0aG9kcyBtdXN0IGJlIHByb3ZpZGVkIGFuIEFycmF5XCIpKX1mdW5jdGlvbiBIKHQpe3RoaXNbQV09VisrLHRoaXMuX3Jlc3VsdD10aGlzLl9zdGF0ZT12b2lkIDAsdGhpcy5fc3Vic2NyaWJlcnM9W10sVCE9PXQmJihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJZb3UgbXVzdCBwYXNzIGEgcmVzb2x2ZXIgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBwcm9taXNlIGNvbnN0cnVjdG9yXCIpfSgpLHRoaXMgaW5zdGFuY2VvZiBIP2Z1bmN0aW9uKHQsZSl7dHJ5e2UoZnVuY3Rpb24oZSl7Tyh0LGUpfSxmdW5jdGlvbihlKXtQKHQsZSl9KX1jYXRjaChlKXtQKHQsZSl9fSh0aGlzLHQpOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Byb21pc2UnOiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvciwgdGhpcyBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKX0oKSl9ZnVuY3Rpb24gRygpe3ZhciB0PXZvaWQgMDtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgaSl0PWk7ZWxzZSBpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZil0PXNlbGY7ZWxzZSB0cnl7dD1GdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl9Y2F0Y2godCl7dGhyb3cgbmV3IEVycm9yKFwicG9seWZpbGwgZmFpbGVkIGJlY2F1c2UgZ2xvYmFsIG9iamVjdCBpcyB1bmF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50XCIpfXZhciBlPXQuUHJvbWlzZTtpZihlKXt2YXIgcj1udWxsO3RyeXtyPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlLnJlc29sdmUoKSl9Y2F0Y2godCl7fWlmKFwiW29iamVjdCBQcm9taXNlXVwiPT09ciYmIWUuY2FzdClyZXR1cm59dC5Qcm9taXNlPUh9cmV0dXJuIHEucHJvdG90eXBlLl9lbnVtZXJhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5sZW5ndGgsZT10aGlzLl9pbnB1dCxyPTA7dGhpcy5fc3RhdGU9PT1NJiZyPHQ7cisrKXRoaXMuX2VhY2hFbnRyeShlW3JdLHIpfSxxLnByb3RvdHlwZS5fZWFjaEVudHJ5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvcixuPXIucmVzb2x2ZTtpZihuPT09ayl7dmFyIGk9TCh0KTtpZihpPT09dyYmdC5fc3RhdGUhPT1NKXRoaXMuX3NldHRsZWRBdCh0Ll9zdGF0ZSxlLHQuX3Jlc3VsdCk7ZWxzZSBpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBpKXRoaXMuX3JlbWFpbmluZy0tLHRoaXMuX3Jlc3VsdFtlXT10O2Vsc2UgaWYocj09PUgpe3ZhciBhPW5ldyByKFQpO3ooYSx0LGkpLHRoaXMuX3dpbGxTZXR0bGVBdChhLGUpfWVsc2UgdGhpcy5fd2lsbFNldHRsZUF0KG5ldyByKGZ1bmN0aW9uKGUpe3JldHVybiBlKHQpfSksZSl9ZWxzZSB0aGlzLl93aWxsU2V0dGxlQXQobih0KSxlKX0scS5wcm90b3R5cGUuX3NldHRsZWRBdD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5wcm9taXNlO24uX3N0YXRlPT09TSYmKHRoaXMuX3JlbWFpbmluZy0tLHQ9PT1FP1AobixyKTp0aGlzLl9yZXN1bHRbZV09ciksMD09PXRoaXMuX3JlbWFpbmluZyYmRChuLHRoaXMuX3Jlc3VsdCl9LHEucHJvdG90eXBlLl93aWxsU2V0dGxlQXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzO1IodCx2b2lkIDAsZnVuY3Rpb24odCl7cmV0dXJuIHIuX3NldHRsZWRBdChTLGUsdCl9LGZ1bmN0aW9uKHQpe3JldHVybiByLl9zZXR0bGVkQXQoRSxlLHQpfSl9LEguYWxsPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcSh0aGlzLHQpLnByb21pc2V9LEgucmFjZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiByKHQpP25ldyBlKGZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXQubGVuZ3RoLGE9MDthPGk7YSsrKWUucmVzb2x2ZSh0W2FdKS50aGVuKHIsbil9KTpuZXcgZShmdW5jdGlvbih0LGUpe3JldHVybiBlKG5ldyBUeXBlRXJyb3IoXCJZb3UgbXVzdCBwYXNzIGFuIGFycmF5IHRvIHJhY2UuXCIpKX0pfSxILnJlc29sdmU9ayxILnJlamVjdD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgdGhpcyhUKTtyZXR1cm4gUChlLHQpLGV9LEguX3NldFNjaGVkdWxlcj1mdW5jdGlvbih0KXtzPXR9LEguX3NldEFzYXA9ZnVuY3Rpb24odCl7bD10fSxILl9hc2FwPWwsSC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkgsdGhlbjp3LGNhdGNoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRoZW4obnVsbCx0KX19LEcoKSxILnBvbHlmaWxsPUcsSC5Qcm9taXNlPUgsSH0pfSkuY2FsbCh0aGlzLHQoXCJfcHJvY2Vzc1wiKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se19wcm9jZXNzOjQ3NX1dLDIxMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi9pcy1pbXBsZW1lbnRlZFwiKSgpP1N5bWJvbDp0KFwiLi9wb2x5ZmlsbFwiKX0se1wiLi9pcy1pbXBsZW1lbnRlZFwiOjIxMyxcIi4vcG9seWZpbGxcIjoyMTV9XSwyMTM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17b2JqZWN0OiEwLHN5bWJvbDohMH07ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgU3ltYm9sKXJldHVybiExO3Q9U3ltYm9sKFwidGVzdCBzeW1ib2xcIik7dHJ5e1N0cmluZyh0KX1jYXRjaCh0KXtyZXR1cm4hMX1yZXR1cm4hIW5bdHlwZW9mIFN5bWJvbC5pdGVyYXRvcl0mJighIW5bdHlwZW9mIFN5bWJvbC50b1ByaW1pdGl2ZV0mJiEhblt0eXBlb2YgU3ltYm9sLnRvU3RyaW5nVGFnXSl9fSx7fV0sMjE0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEhdCYmKFwic3ltYm9sXCI9PXR5cGVvZiB0fHwhIXQuY29uc3RydWN0b3ImJihcIlN5bWJvbFwiPT09dC5jb25zdHJ1Y3Rvci5uYW1lJiZcIlN5bWJvbFwiPT09dFt0LmNvbnN0cnVjdG9yLnRvU3RyaW5nVGFnXSkpfX0se31dLDIxNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuLGksYSxvLHM9dChcImRcIiksbD10KFwiLi92YWxpZGF0ZS1zeW1ib2xcIiksYz1PYmplY3QuY3JlYXRlLHU9T2JqZWN0LmRlZmluZVByb3BlcnRpZXMsaD1PYmplY3QuZGVmaW5lUHJvcGVydHksZj1PYmplY3QucHJvdG90eXBlLHA9YyhudWxsKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wpe249U3ltYm9sO3RyeXtTdHJpbmcobigpKSxvPSEwfWNhdGNoKHQpe319dmFyIGQsZz0oZD1jKG51bGwpLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG49MDtkW3QrKG58fFwiXCIpXTspKytuO3JldHVybiBkW3QrPW58fFwiXCJdPSEwLGgoZixlPVwiQEBcIit0LHMuZ3MobnVsbCxmdW5jdGlvbih0KXtyfHwocj0hMCxoKHRoaXMsZSxzKHQpKSxyPSExKX0pKSxlfSk7YT1mdW5jdGlvbih0KXtpZih0aGlzIGluc3RhbmNlb2YgYSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yXCIpO3JldHVybiBpKHQpfSxlLmV4cG9ydHM9aT1mdW5jdGlvbiB0KGUpe3ZhciByO2lmKHRoaXMgaW5zdGFuY2VvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3JcIik7cmV0dXJuIG8/bihlKToocj1jKGEucHJvdG90eXBlKSxlPXZvaWQgMD09PWU/XCJcIjpTdHJpbmcoZSksdShyLHtfX2Rlc2NyaXB0aW9uX186cyhcIlwiLGUpLF9fbmFtZV9fOnMoXCJcIixnKGUpKX0pKX0sdShpLHtmb3I6cyhmdW5jdGlvbih0KXtyZXR1cm4gcFt0XT9wW3RdOnBbdF09aShTdHJpbmcodCkpfSksa2V5Rm9yOnMoZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGUgaW4gbCh0KSxwKWlmKHBbZV09PT10KXJldHVybiBlfSksaGFzSW5zdGFuY2U6cyhcIlwiLG4mJm4uaGFzSW5zdGFuY2V8fGkoXCJoYXNJbnN0YW5jZVwiKSksaXNDb25jYXRTcHJlYWRhYmxlOnMoXCJcIixuJiZuLmlzQ29uY2F0U3ByZWFkYWJsZXx8aShcImlzQ29uY2F0U3ByZWFkYWJsZVwiKSksaXRlcmF0b3I6cyhcIlwiLG4mJm4uaXRlcmF0b3J8fGkoXCJpdGVyYXRvclwiKSksbWF0Y2g6cyhcIlwiLG4mJm4ubWF0Y2h8fGkoXCJtYXRjaFwiKSkscmVwbGFjZTpzKFwiXCIsbiYmbi5yZXBsYWNlfHxpKFwicmVwbGFjZVwiKSksc2VhcmNoOnMoXCJcIixuJiZuLnNlYXJjaHx8aShcInNlYXJjaFwiKSksc3BlY2llczpzKFwiXCIsbiYmbi5zcGVjaWVzfHxpKFwic3BlY2llc1wiKSksc3BsaXQ6cyhcIlwiLG4mJm4uc3BsaXR8fGkoXCJzcGxpdFwiKSksdG9QcmltaXRpdmU6cyhcIlwiLG4mJm4udG9QcmltaXRpdmV8fGkoXCJ0b1ByaW1pdGl2ZVwiKSksdG9TdHJpbmdUYWc6cyhcIlwiLG4mJm4udG9TdHJpbmdUYWd8fGkoXCJ0b1N0cmluZ1RhZ1wiKSksdW5zY29wYWJsZXM6cyhcIlwiLG4mJm4udW5zY29wYWJsZXN8fGkoXCJ1bnNjb3BhYmxlc1wiKSl9KSx1KGEucHJvdG90eXBlLHtjb25zdHJ1Y3RvcjpzKGkpLHRvU3RyaW5nOnMoXCJcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fbmFtZV9ffSl9KSx1KGkucHJvdG90eXBlLHt0b1N0cmluZzpzKGZ1bmN0aW9uKCl7cmV0dXJuXCJTeW1ib2wgKFwiK2wodGhpcykuX19kZXNjcmlwdGlvbl9fK1wiKVwifSksdmFsdWVPZjpzKGZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcyl9KX0pLGgoaS5wcm90b3R5cGUsaS50b1ByaW1pdGl2ZSxzKFwiXCIsZnVuY3Rpb24oKXt2YXIgdD1sKHRoaXMpO3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiB0P3Q6dC50b1N0cmluZygpfSkpLGgoaS5wcm90b3R5cGUsaS50b1N0cmluZ1RhZyxzKFwiY1wiLFwiU3ltYm9sXCIpKSxoKGEucHJvdG90eXBlLGkudG9TdHJpbmdUYWcscyhcImNcIixpLnByb3RvdHlwZVtpLnRvU3RyaW5nVGFnXSkpLGgoYS5wcm90b3R5cGUsaS50b1ByaW1pdGl2ZSxzKFwiY1wiLGkucHJvdG90eXBlW2kudG9QcmltaXRpdmVdKSl9LHtcIi4vdmFsaWRhdGUtc3ltYm9sXCI6MjE2LGQ6MTQyfV0sMjE2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vaXMtc3ltYm9sXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKHQrXCIgaXMgbm90IGEgc3ltYm9sXCIpO3JldHVybiB0fX0se1wiLi9pcy1zeW1ib2xcIjoyMTR9XSwyMTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4vaXMtaW1wbGVtZW50ZWRcIikoKT9XZWFrTWFwOnQoXCIuL3BvbHlmaWxsXCIpfSx7XCIuL2lzLWltcGxlbWVudGVkXCI6MjE4LFwiLi9wb2x5ZmlsbFwiOjIyMH1dLDIxODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGU7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgV2Vha01hcClyZXR1cm4hMTt0cnl7dD1uZXcgV2Vha01hcChbW2U9e30sXCJvbmVcIl0sW3t9LFwidHdvXCJdLFt7fSxcInRocmVlXCJdXSl9Y2F0Y2godCl7cmV0dXJuITF9cmV0dXJuXCJbb2JqZWN0IFdlYWtNYXBdXCI9PT1TdHJpbmcodCkmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnNldCYmKHQuc2V0KHt9LDEpPT09dCYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQuZGVsZXRlJiYoXCJmdW5jdGlvblwiPT10eXBlb2YgdC5oYXMmJlwib25lXCI9PT10LmdldChlKSkpKSl9fSx7fV0sMjE5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPVwiZnVuY3Rpb25cIj09dHlwZW9mIFdlYWtNYXAmJlwiW29iamVjdCBXZWFrTWFwXVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ldyBXZWFrTWFwKX0se31dLDIyMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuLGk9dChcImVzNS1leHQvb2JqZWN0L3NldC1wcm90b3R5cGUtb2ZcIiksYT10KFwiZXM1LWV4dC9vYmplY3QvdmFsaWQtb2JqZWN0XCIpLG89dChcImVzNS1leHQvb2JqZWN0L3ZhbGlkLXZhbHVlXCIpLHM9dChcImVzNS1leHQvc3RyaW5nL3JhbmRvbS11bmlxXCIpLGw9dChcImRcIiksYz10KFwiZXM2LWl0ZXJhdG9yL2dldFwiKSx1PXQoXCJlczYtaXRlcmF0b3IvZm9yLW9mXCIpLGg9dChcImVzNi1zeW1ib2xcIikudG9TdHJpbmdUYWcsZj10KFwiLi9pcy1uYXRpdmUtaW1wbGVtZW50ZWRcIikscD1BcnJheS5pc0FycmF5LGQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LGc9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSx2PU9iamVjdC5nZXRQcm90b3R5cGVPZjtlLmV4cG9ydHM9bj1mdW5jdGlvbigpe3ZhciB0LGU9YXJndW1lbnRzWzBdO2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3J1wiKTtyZXR1cm4gdD1mJiZpJiZXZWFrTWFwIT09bj9pKG5ldyBXZWFrTWFwLHYodGhpcykpOnRoaXMsbnVsbCE9ZSYmKHAoZSl8fChlPWMoZSkpKSxkKHQsXCJfX3dlYWtNYXBEYXRhX19cIixsKFwiY1wiLFwiJHdlYWtNYXAkXCIrcygpKSksZT8odShlLGZ1bmN0aW9uKGUpe28oZSksdC5zZXQoZVswXSxlWzFdKX0pLHQpOnR9LGYmJihpJiZpKG4sV2Vha01hcCksbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShXZWFrTWFwLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6bChuKX0pKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLnByb3RvdHlwZSx7ZGVsZXRlOmwoZnVuY3Rpb24odCl7cmV0dXJuISFnLmNhbGwoYSh0KSx0aGlzLl9fd2Vha01hcERhdGFfXykmJihkZWxldGUgdFt0aGlzLl9fd2Vha01hcERhdGFfX10sITApfSksZ2V0OmwoZnVuY3Rpb24odCl7aWYoZy5jYWxsKGEodCksdGhpcy5fX3dlYWtNYXBEYXRhX18pKXJldHVybiB0W3RoaXMuX193ZWFrTWFwRGF0YV9fXX0pLGhhczpsKGZ1bmN0aW9uKHQpe3JldHVybiBnLmNhbGwoYSh0KSx0aGlzLl9fd2Vha01hcERhdGFfXyl9KSxzZXQ6bChmdW5jdGlvbih0LGUpe3JldHVybiBkKGEodCksdGhpcy5fX3dlYWtNYXBEYXRhX18sbChcImNcIixlKSksdGhpc30pLHRvU3RyaW5nOmwoZnVuY3Rpb24oKXtyZXR1cm5cIltvYmplY3QgV2Vha01hcF1cIn0pfSksZChuLnByb3RvdHlwZSxoLGwoXCJjXCIsXCJXZWFrTWFwXCIpKX0se1wiLi9pcy1uYXRpdmUtaW1wbGVtZW50ZWRcIjoyMTksZDoxNDIsXCJlczUtZXh0L29iamVjdC9zZXQtcHJvdG90eXBlLW9mXCI6MTkzLFwiZXM1LWV4dC9vYmplY3QvdmFsaWQtb2JqZWN0XCI6MTk3LFwiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWVcIjoxOTgsXCJlczUtZXh0L3N0cmluZy9yYW5kb20tdW5pcVwiOjIwMyxcImVzNi1pdGVyYXRvci9mb3Itb2ZcIjoyMDUsXCJlczYtaXRlcmF0b3IvZ2V0XCI6MjA2LFwiZXM2LXN5bWJvbFwiOjIxMn1dLDIyMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZXx8MCxpPXJ8fDE7cmV0dXJuW1t0WzEyXSt0WzBdLHRbMTNdK3RbMV0sdFsxNF0rdFsyXSx0WzE1XSt0WzNdXSxbdFsxMl0tdFswXSx0WzEzXS10WzFdLHRbMTRdLXRbMl0sdFsxNV0tdFszXV0sW3RbMTJdK3RbNF0sdFsxM10rdFs1XSx0WzE0XSt0WzZdLHRbMTVdK3RbN11dLFt0WzEyXS10WzRdLHRbMTNdLXRbNV0sdFsxNF0tdFs2XSx0WzE1XS10WzddXSxbbip0WzEyXSt0WzhdLG4qdFsxM10rdFs5XSxuKnRbMTRdK3RbMTBdLG4qdFsxNV0rdFsxMV1dLFtpKnRbMTJdLXRbOF0saSp0WzEzXS10WzldLGkqdFsxNF0tdFsxMF0saSp0WzE1XS10WzExXV1dfX0se31dLDIyMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJpcy1zdHJpbmctYmxhbmtcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXR5cGVvZiB0O2lmKFwic3RyaW5nXCI9PT1lKXt2YXIgcj10O2lmKDA9PT0odD0rdCkmJm4ocikpcmV0dXJuITF9ZWxzZSBpZihcIm51bWJlclwiIT09ZSlyZXR1cm4hMTtyZXR1cm4gdC10PDF9fSx7XCJpcy1zdHJpbmctYmxhbmtcIjo0MTZ9XSwyMjM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBvKFswXSxbMF0sMCk7Y2FzZSAxOmlmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXt2YXIgbj1sKHQpO3JldHVybiBuZXcgbyhuLG4sMCl9cmV0dXJuIG5ldyBvKHQsbCh0Lmxlbmd0aCksMCk7Y2FzZSAyOmlmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXt2YXIgbj1sKHQubGVuZ3RoKTtyZXR1cm4gbmV3IG8odCxuLCtlKX1yPTA7Y2FzZSAzOmlmKHQubGVuZ3RoIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwic3RhdGUgYW5kIHZlbG9jaXR5IGxlbmd0aHMgbXVzdCBtYXRjaFwiKTtyZXR1cm4gbmV3IG8odCxlLHIpfX07dmFyIG49dChcImN1YmljLWhlcm1pdGVcIiksaT10KFwiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIik7ZnVuY3Rpb24gYSh0LGUscil7cmV0dXJuIE1hdGgubWluKGUsTWF0aC5tYXgodCxyKSl9ZnVuY3Rpb24gbyh0LGUscil7dGhpcy5kaW1lbnNpb249dC5sZW5ndGgsdGhpcy5ib3VuZHM9W25ldyBBcnJheSh0aGlzLmRpbWVuc2lvbiksbmV3IEFycmF5KHRoaXMuZGltZW5zaW9uKV07Zm9yKHZhciBuPTA7bjx0aGlzLmRpbWVuc2lvbjsrK24pdGhpcy5ib3VuZHNbMF1bbl09LTEvMCx0aGlzLmJvdW5kc1sxXVtuXT0xLzA7dGhpcy5fc3RhdGU9dC5zbGljZSgpLnJldmVyc2UoKSx0aGlzLl92ZWxvY2l0eT1lLnNsaWNlKCkucmV2ZXJzZSgpLHRoaXMuX3RpbWU9W3JdLHRoaXMuX3NjcmF0Y2g9W3Quc2xpY2UoKSx0LnNsaWNlKCksdC5zbGljZSgpLHQuc2xpY2UoKSx0LnNsaWNlKCldfXZhciBzPW8ucHJvdG90eXBlO2Z1bmN0aW9uIGwodCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0OysrcillW3JdPTA7cmV0dXJuIGV9cy5mbHVzaD1mdW5jdGlvbih0KXt2YXIgZT1pLmd0KHRoaXMuX3RpbWUsdCktMTtlPD0wfHwodGhpcy5fdGltZS5zcGxpY2UoMCxlKSx0aGlzLl9zdGF0ZS5zcGxpY2UoMCxlKnRoaXMuZGltZW5zaW9uKSx0aGlzLl92ZWxvY2l0eS5zcGxpY2UoMCxlKnRoaXMuZGltZW5zaW9uKSl9LHMuY3VydmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGltZSxyPWUubGVuZ3RoLG89aS5sZShlLHQpLHM9dGhpcy5fc2NyYXRjaFswXSxsPXRoaXMuX3N0YXRlLGM9dGhpcy5fdmVsb2NpdHksdT10aGlzLmRpbWVuc2lvbixoPXRoaXMuYm91bmRzO2lmKG88MClmb3IodmFyIGY9dS0xLHA9MDtwPHU7KytwLC0tZilzW3BdPWxbZl07ZWxzZSBpZihvPj1yLTEpe2Y9bC5sZW5ndGgtMTt2YXIgZD10LWVbci0xXTtmb3IocD0wO3A8dTsrK3AsLS1mKXNbcF09bFtmXStkKmNbZl19ZWxzZXtmPXUqKG8rMSktMTt2YXIgZz1lW29dLHY9ZVtvKzFdLWd8fDEsbT10aGlzLl9zY3JhdGNoWzFdLHk9dGhpcy5fc2NyYXRjaFsyXSx4PXRoaXMuX3NjcmF0Y2hbM10sYj10aGlzLl9zY3JhdGNoWzRdLF89ITA7Zm9yKHA9MDtwPHU7KytwLC0tZiltW3BdPWxbZl0seFtwXT1jW2ZdKnYseVtwXT1sW2YrdV0sYltwXT1jW2YrdV0qdixfPV8mJm1bcF09PT15W3BdJiZ4W3BdPT09YltwXSYmMD09PXhbcF07aWYoXylmb3IocD0wO3A8dTsrK3Apc1twXT1tW3BdO2Vsc2UgbihtLHgseSxiLCh0LWcpL3Yscyl9dmFyIHc9aFswXSxrPWhbMV07Zm9yKHA9MDtwPHU7KytwKXNbcF09YSh3W3BdLGtbcF0sc1twXSk7cmV0dXJuIHN9LHMuZGN1cnZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbWUscj1lLmxlbmd0aCxhPWkubGUoZSx0KSxvPXRoaXMuX3NjcmF0Y2hbMF0scz10aGlzLl9zdGF0ZSxsPXRoaXMuX3ZlbG9jaXR5LGM9dGhpcy5kaW1lbnNpb247aWYoYT49ci0xKWZvcih2YXIgdT1zLmxlbmd0aC0xLGg9KGVbci0xXSwwKTtoPGM7KytoLC0tdSlvW2hdPWxbdV07ZWxzZXt1PWMqKGErMSktMTt2YXIgZj1lW2FdLHA9ZVthKzFdLWZ8fDEsZD10aGlzLl9zY3JhdGNoWzFdLGc9dGhpcy5fc2NyYXRjaFsyXSx2PXRoaXMuX3NjcmF0Y2hbM10sbT10aGlzLl9zY3JhdGNoWzRdLHk9ITA7Zm9yKGg9MDtoPGM7KytoLC0tdSlkW2hdPXNbdV0sdltoXT1sW3VdKnAsZ1toXT1zW3UrY10sbVtoXT1sW3UrY10qcCx5PXkmJmRbaF09PT1nW2hdJiZ2W2hdPT09bVtoXSYmMD09PXZbaF07aWYoeSlmb3IoaD0wO2g8YzsrK2gpb1toXT0wO2Vsc2V7bi5kZXJpdmF0aXZlKGQsdixnLG0sKHQtZikvcCxvKTtmb3IoaD0wO2g8YzsrK2gpb1toXS89cH19cmV0dXJuIG99LHMubGFzdFQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90aW1lO3JldHVybiB0W3QubGVuZ3RoLTFdfSxzLnN0YWJsZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl92ZWxvY2l0eSxlPXQubGVuZ3RoLHI9dGhpcy5kaW1lbnNpb24tMTtyPj0wOy0tcilpZih0Wy0tZV0pcmV0dXJuITE7cmV0dXJuITB9LHMuanVtcD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhc3RUKCkscj10aGlzLmRpbWVuc2lvbjtpZighKHQ8ZXx8YXJndW1lbnRzLmxlbmd0aCE9PXIrMSkpe3ZhciBuPXRoaXMuX3N0YXRlLGk9dGhpcy5fdmVsb2NpdHksbz1uLmxlbmd0aC10aGlzLmRpbWVuc2lvbixzPXRoaXMuYm91bmRzLGw9c1swXSxjPXNbMV07dGhpcy5fdGltZS5wdXNoKGUsdCk7Zm9yKHZhciB1PTA7dTwyOysrdSlmb3IodmFyIGg9MDtoPHI7KytoKW4ucHVzaChuW28rK10pLGkucHVzaCgwKTt0aGlzLl90aW1lLnB1c2godCk7Zm9yKGg9cjtoPjA7LS1oKW4ucHVzaChhKGxbaC0xXSxjW2gtMV0sYXJndW1lbnRzW2hdKSksaS5wdXNoKDApfX0scy5wdXNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXRoaXMuZGltZW5zaW9uO2lmKCEodDxlfHxhcmd1bWVudHMubGVuZ3RoIT09cisxKSl7dmFyIG49dGhpcy5fc3RhdGUsaT10aGlzLl92ZWxvY2l0eSxvPW4ubGVuZ3RoLXRoaXMuZGltZW5zaW9uLHM9dC1lLGw9dGhpcy5ib3VuZHMsYz1sWzBdLHU9bFsxXSxoPXM+MWUtNj8xL3M6MDt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciBmPXI7Zj4wOy0tZil7dmFyIHA9YShjW2YtMV0sdVtmLTFdLGFyZ3VtZW50c1tmXSk7bi5wdXNoKHApLGkucHVzaCgocC1uW28rK10pKmgpfX19LHMuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGltZW5zaW9uO2lmKCEodDx0aGlzLmxhc3RUKCl8fGFyZ3VtZW50cy5sZW5ndGghPT1lKzEpKXt2YXIgcj10aGlzLl9zdGF0ZSxuPXRoaXMuX3ZlbG9jaXR5LGk9dGhpcy5ib3VuZHMsbz1pWzBdLHM9aVsxXTt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciBsPWU7bD4wOy0tbClyLnB1c2goYShvW2wtMV0sc1tsLTFdLGFyZ3VtZW50c1tsXSkpLG4ucHVzaCgwKX19LHMubW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhc3RUKCkscj10aGlzLmRpbWVuc2lvbjtpZighKHQ8PWV8fGFyZ3VtZW50cy5sZW5ndGghPT1yKzEpKXt2YXIgbj10aGlzLl9zdGF0ZSxpPXRoaXMuX3ZlbG9jaXR5LG89bi5sZW5ndGgtdGhpcy5kaW1lbnNpb24scz10aGlzLmJvdW5kcyxsPXNbMF0sYz1zWzFdLHU9dC1lLGg9dT4xZS02PzEvdTowO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGY9cjtmPjA7LS1mKXt2YXIgcD1hcmd1bWVudHNbZl07bi5wdXNoKGEobFtmLTFdLGNbZi0xXSxuW28rK10rcCkpLGkucHVzaChwKmgpfX19LHMuaWRsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhc3RUKCk7aWYoISh0PGUpKXt2YXIgcj10aGlzLmRpbWVuc2lvbixuPXRoaXMuX3N0YXRlLGk9dGhpcy5fdmVsb2NpdHksbz1uLmxlbmd0aC1yLHM9dGhpcy5ib3VuZHMsbD1zWzBdLGM9c1sxXSx1PXQtZTt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciBoPXItMTtoPj0wOy0taCluLnB1c2goYShsW2hdLGNbaF0sbltvXSt1Kmlbb10pKSxpLnB1c2goMCksbys9MX19fSx7XCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiOjgyLFwiY3ViaWMtaGVybWl0ZVwiOjEzNn1dLDIyNDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCJkdHlwZVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKCF0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJtdXN0IHNwZWNpZnkgZGF0YSBhcyBmaXJzdCBwYXJhbWV0ZXJcIik7aWYocj0wfCsocnx8MCksQXJyYXkuaXNBcnJheSh0KSYmdFswXSYmXCJudW1iZXJcIj09dHlwZW9mIHRbMF1bMF0pe3ZhciBpLGEsbyxzLGw9dFswXS5sZW5ndGgsYz10Lmxlbmd0aCpsO2UmJlwic3RyaW5nXCIhPXR5cGVvZiBlfHwoZT1uZXcobihlfHxcImZsb2F0MzJcIikpKGMrcikpO3ZhciB1PWUubGVuZ3RoLXI7aWYoYyE9PXUpdGhyb3cgbmV3IEVycm9yKFwic291cmNlIGxlbmd0aCBcIitjK1wiIChcIitsK1wieFwiK3QubGVuZ3RoK1wiKSBkb2VzIG5vdCBtYXRjaCBkZXN0aW5hdGlvbiBsZW5ndGggXCIrdSk7Zm9yKGk9MCxvPXI7aTx0Lmxlbmd0aDtpKyspZm9yKGE9MDthPGw7YSsrKWVbbysrXT1udWxsPT09dFtpXVthXT9OYU46dFtpXVthXX1lbHNlIGlmKGUmJlwic3RyaW5nXCIhPXR5cGVvZiBlKWUuc2V0KHQscik7ZWxzZXt2YXIgaD1uKGV8fFwiZmxvYXQzMlwiKTtpZihBcnJheS5pc0FycmF5KHQpfHxcImFycmF5XCI9PT1lKWZvcihlPW5ldyBoKHQubGVuZ3RoK3IpLGk9MCxvPXIscz1lLmxlbmd0aDtvPHM7bysrLGkrKyllW29dPW51bGw9PT10W2ldP05hTjp0W2ldO2Vsc2UgMD09PXI/ZT1uZXcgaCh0KTooZT1uZXcgaCh0Lmxlbmd0aCtyKSkuc2V0KHQscil9cmV0dXJuIGV9fSx7ZHR5cGU6MTYxfV0sMjI1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImNzcy1mb250L3N0cmluZ2lmeVwiKSxpPVszMiwxMjZdO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuc2hhcGU/dC5zaGFwZTp0LmNhbnZhcz9bdC5jYW52YXMud2lkdGgsdC5jYW52YXMuaGVpZ2h0XTpbNTEyLDUxMl0scj10LmNhbnZhc3x8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSxhPXQuZm9udCxvPVwibnVtYmVyXCI9PXR5cGVvZiB0LnN0ZXA/W3Quc3RlcCx0LnN0ZXBdOnQuc3RlcHx8WzMyLDMyXSxzPXQuY2hhcnN8fGk7YSYmXCJzdHJpbmdcIiE9dHlwZW9mIGEmJihhPW4oYSkpO2lmKEFycmF5LmlzQXJyYXkocykpe2lmKDI9PT1zLmxlbmd0aCYmXCJudW1iZXJcIj09dHlwZW9mIHNbMF0mJlwibnVtYmVyXCI9PXR5cGVvZiBzWzFdKXtmb3IodmFyIGw9W10sYz1zWzBdLHU9MDtjPD1zWzFdO2MrKylsW3UrK109U3RyaW5nLmZyb21DaGFyQ29kZShjKTtzPWx9fWVsc2Ugcz1TdHJpbmcocykuc3BsaXQoXCJcIik7ZT1lLnNsaWNlKCksci53aWR0aD1lWzBdLHIuaGVpZ2h0PWVbMV07dmFyIGg9ci5nZXRDb250ZXh0KFwiMmRcIik7aC5maWxsU3R5bGU9XCIjMDAwXCIsaC5maWxsUmVjdCgwLDAsci53aWR0aCxyLmhlaWdodCksaC5mb250PWEsaC50ZXh0QWxpZ249XCJjZW50ZXJcIixoLnRleHRCYXNlbGluZT1cIm1pZGRsZVwiLGguZmlsbFN0eWxlPVwiI2ZmZlwiO2Zvcih2YXIgZj1vWzBdLzIscD1vWzFdLzIsYz0wO2M8cy5sZW5ndGg7YysrKWguZmlsbFRleHQoc1tjXSxmLHApLChmKz1vWzBdKT5lWzBdLW9bMF0vMiYmKGY9b1swXS8yLHArPW9bMV0pO3JldHVybiByfX0se1wiY3NzLWZvbnQvc3RyaW5naWZ5XCI6MTMzfV0sMjI2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2V8fChlPXt9KSwoXCJzdHJpbmdcIj09dHlwZW9mIHR8fEFycmF5LmlzQXJyYXkodCkpJiYoZS5mYW1pbHk9dCk7dmFyIHI9QXJyYXkuaXNBcnJheShlLmZhbWlseSk/ZS5mYW1pbHkuam9pbihcIiwgXCIpOmUuZmFtaWx5O2lmKCFyKXRocm93IEVycm9yKFwiYGZhbWlseWAgbXVzdCBiZSBkZWZpbmVkXCIpO3ZhciBzPWUuc2l6ZXx8ZS5mb250U2l6ZXx8ZS5lbXx8NDgsbD1lLndlaWdodHx8ZS5mb250V2VpZ2h0fHxcIlwiLGM9KHQ9W2Uuc3R5bGV8fGUuZm9udFN0eWxlfHxcIlwiLGwsc10uam9pbihcIiBcIikrXCJweCBcIityLGUub3JpZ2lufHxcInRvcFwiKTtpZihuLmNhY2hlW3JdJiZzPD1uLmNhY2hlW3JdLmVtKXJldHVybiBpKG4uY2FjaGVbcl0sYyk7dmFyIHU9ZS5jYW52YXN8fG4uY2FudmFzLGg9dS5nZXRDb250ZXh0KFwiMmRcIiksZj17dXBwZXI6dm9pZCAwIT09ZS51cHBlcj9lLnVwcGVyOlwiSFwiLGxvd2VyOnZvaWQgMCE9PWUubG93ZXI/ZS5sb3dlcjpcInhcIixkZXNjZW50OnZvaWQgMCE9PWUuZGVzY2VudD9lLmRlc2NlbnQ6XCJwXCIsYXNjZW50OnZvaWQgMCE9PWUuYXNjZW50P2UuYXNjZW50OlwiaFwiLHRpdHRsZTp2b2lkIDAhPT1lLnRpdHRsZT9lLnRpdHRsZTpcImlcIixvdmVyc2hvb3Q6dm9pZCAwIT09ZS5vdmVyc2hvb3Q/ZS5vdmVyc2hvb3Q6XCJPXCJ9LHA9TWF0aC5jZWlsKDEuNSpzKTt1LmhlaWdodD1wLHUud2lkdGg9LjUqcCxoLmZvbnQ9dDt2YXIgZD17dG9wOjB9O2guY2xlYXJSZWN0KDAsMCxwLHApLGgudGV4dEJhc2VsaW5lPVwidG9wXCIsaC5maWxsU3R5bGU9XCJibGFja1wiLGguZmlsbFRleHQoXCJIXCIsMCwwKTt2YXIgZz1hKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtoLmNsZWFyUmVjdCgwLDAscCxwKSxoLnRleHRCYXNlbGluZT1cImJvdHRvbVwiLGguZmlsbFRleHQoXCJIXCIsMCxwKTt2YXIgdj1hKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtkLmxpbmVIZWlnaHQ9ZC5ib3R0b209cC12K2csaC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9XCJhbHBoYWJldGljXCIsaC5maWxsVGV4dChcIkhcIiwwLHApO3ZhciBtPXAtYShoLmdldEltYWdlRGF0YSgwLDAscCxwKSktMStnO2QuYmFzZWxpbmU9ZC5hbHBoYWJldGljPW0saC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9XCJtaWRkbGVcIixoLmZpbGxUZXh0KFwiSFwiLDAsLjUqcCk7dmFyIHk9YShoLmdldEltYWdlRGF0YSgwLDAscCxwKSk7ZC5tZWRpYW49ZC5taWRkbGU9cC15LTErZy0uNSpwLGguY2xlYXJSZWN0KDAsMCxwLHApLGgudGV4dEJhc2VsaW5lPVwiaGFuZ2luZ1wiLGguZmlsbFRleHQoXCJIXCIsMCwuNSpwKTt2YXIgeD1hKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtkLmhhbmdpbmc9cC14LTErZy0uNSpwLGguY2xlYXJSZWN0KDAsMCxwLHApLGgudGV4dEJhc2VsaW5lPVwiaWRlb2dyYXBoaWNcIixoLmZpbGxUZXh0KFwiSFwiLDAscCk7dmFyIGI9YShoLmdldEltYWdlRGF0YSgwLDAscCxwKSk7aWYoZC5pZGVvZ3JhcGhpYz1wLWItMStnLGYudXBwZXImJihoLmNsZWFyUmVjdCgwLDAscCxwKSxoLnRleHRCYXNlbGluZT1cInRvcFwiLGguZmlsbFRleHQoZi51cHBlciwwLDApLGQudXBwZXI9YShoLmdldEltYWdlRGF0YSgwLDAscCxwKSksZC5jYXBIZWlnaHQ9ZC5iYXNlbGluZS1kLnVwcGVyKSxmLmxvd2VyJiYoaC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9XCJ0b3BcIixoLmZpbGxUZXh0KGYubG93ZXIsMCwwKSxkLmxvd2VyPWEoaC5nZXRJbWFnZURhdGEoMCwwLHAscCkpLGQueEhlaWdodD1kLmJhc2VsaW5lLWQubG93ZXIpLGYudGl0dGxlJiYoaC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9XCJ0b3BcIixoLmZpbGxUZXh0KGYudGl0dGxlLDAsMCksZC50aXR0bGU9YShoLmdldEltYWdlRGF0YSgwLDAscCxwKSkpLGYuYXNjZW50JiYoaC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9XCJ0b3BcIixoLmZpbGxUZXh0KGYuYXNjZW50LDAsMCksZC5hc2NlbnQ9YShoLmdldEltYWdlRGF0YSgwLDAscCxwKSkpLGYuZGVzY2VudCYmKGguY2xlYXJSZWN0KDAsMCxwLHApLGgudGV4dEJhc2VsaW5lPVwidG9wXCIsaC5maWxsVGV4dChmLmRlc2NlbnQsMCwwKSxkLmRlc2NlbnQ9byhoLmdldEltYWdlRGF0YSgwLDAscCxwKSkpLGYub3ZlcnNob290KXtoLmNsZWFyUmVjdCgwLDAscCxwKSxoLnRleHRCYXNlbGluZT1cInRvcFwiLGguZmlsbFRleHQoZi5vdmVyc2hvb3QsMCwwKTt2YXIgXz1vKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtkLm92ZXJzaG9vdD1fLW19Zm9yKHZhciB3IGluIGQpZFt3XS89cztyZXR1cm4gZC5lbT1zLG4uY2FjaGVbcl09ZCxpKGQsYyl9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPXt9O2Zvcih2YXIgbiBpblwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT10W2VdKSx0KVwiZW1cIiE9PW4mJihyW25dPXRbbl0tZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9dC5oZWlnaHQscj10LmRhdGEsbj0zO248ci5sZW5ndGg7bis9NClpZigwIT09cltuXSlyZXR1cm4gTWF0aC5mbG9vciguMjUqKG4tMykvZSl9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9dC5oZWlnaHQscj10LmRhdGEsbj1yLmxlbmd0aC0xO24+MDtuLT00KWlmKDAhPT1yW25dKXJldHVybiBNYXRoLmZsb29yKC4yNSoobi0zKS9lKX1lLmV4cG9ydHM9bixuLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLG4uY2FjaGU9e319LHt9XSwyMjc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBjKHR8fGQsbnVsbCl9O3ZhciBuPTAsaT0xO2Z1bmN0aW9uIGEodCxlLHIsbixpLGEpe3RoaXMuX2NvbG9yPXQsdGhpcy5rZXk9ZSx0aGlzLnZhbHVlPXIsdGhpcy5sZWZ0PW4sdGhpcy5yaWdodD1pLHRoaXMuX2NvdW50PWF9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbmV3IGEodC5fY29sb3IsdC5rZXksdC52YWx1ZSx0LmxlZnQsdC5yaWdodCx0Ll9jb3VudCl9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBuZXcgYSh0LGUua2V5LGUudmFsdWUsZS5sZWZ0LGUucmlnaHQsZS5fY291bnQpfWZ1bmN0aW9uIGwodCl7dC5fY291bnQ9MSsodC5sZWZ0P3QubGVmdC5fY291bnQ6MCkrKHQucmlnaHQ/dC5yaWdodC5fY291bnQ6MCl9ZnVuY3Rpb24gYyh0LGUpe3RoaXMuX2NvbXBhcmU9dCx0aGlzLnJvb3Q9ZX12YXIgdT1jLnByb3RvdHlwZTtmdW5jdGlvbiBoKHQsZSl7dGhpcy50cmVlPXQsdGhpcy5fc3RhY2s9ZX1PYmplY3QuZGVmaW5lUHJvcGVydHkodSxcImtleXNcIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihlLHIpe3QucHVzaChlKX0pLHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsXCJ2YWx1ZXNcIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihlLHIpe3QucHVzaChyKX0pLHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsXCJsZW5ndGhcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdD90aGlzLnJvb3QuX2NvdW50OjB9fSksdS5pbnNlcnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5fY29tcGFyZSxvPXRoaXMucm9vdCx1PVtdLGg9W107bzspe3ZhciBmPXIodCxvLmtleSk7dS5wdXNoKG8pLGgucHVzaChmKSxvPWY8PTA/by5sZWZ0Om8ucmlnaHR9dS5wdXNoKG5ldyBhKG4sdCxlLG51bGwsbnVsbCwxKSk7Zm9yKHZhciBwPXUubGVuZ3RoLTI7cD49MDstLXApe289dVtwXTtoW3BdPD0wP3VbcF09bmV3IGEoby5fY29sb3Isby5rZXksby52YWx1ZSx1W3ArMV0sby5yaWdodCxvLl9jb3VudCsxKTp1W3BdPW5ldyBhKG8uX2NvbG9yLG8ua2V5LG8udmFsdWUsby5sZWZ0LHVbcCsxXSxvLl9jb3VudCsxKX1mb3IocD11Lmxlbmd0aC0xO3A+MTstLXApe3ZhciBkPXVbcC0xXTtvPXVbcF07aWYoZC5fY29sb3I9PT1pfHxvLl9jb2xvcj09PWkpYnJlYWs7dmFyIGc9dVtwLTJdO2lmKGcubGVmdD09PWQpaWYoZC5sZWZ0PT09byl7aWYoISh2PWcucmlnaHQpfHx2Ll9jb2xvciE9PW4pe2lmKGcuX2NvbG9yPW4sZy5sZWZ0PWQucmlnaHQsZC5fY29sb3I9aSxkLnJpZ2h0PWcsdVtwLTJdPWQsdVtwLTFdPW8sbChnKSxsKGQpLHA+PTMpKG09dVtwLTNdKS5sZWZ0PT09Zz9tLmxlZnQ9ZDptLnJpZ2h0PWQ7YnJlYWt9ZC5fY29sb3I9aSxnLnJpZ2h0PXMoaSx2KSxnLl9jb2xvcj1uLHAtPTF9ZWxzZXtpZighKHY9Zy5yaWdodCl8fHYuX2NvbG9yIT09bil7aWYoZC5yaWdodD1vLmxlZnQsZy5fY29sb3I9bixnLmxlZnQ9by5yaWdodCxvLl9jb2xvcj1pLG8ubGVmdD1kLG8ucmlnaHQ9Zyx1W3AtMl09byx1W3AtMV09ZCxsKGcpLGwoZCksbChvKSxwPj0zKShtPXVbcC0zXSkubGVmdD09PWc/bS5sZWZ0PW86bS5yaWdodD1vO2JyZWFrfWQuX2NvbG9yPWksZy5yaWdodD1zKGksdiksZy5fY29sb3I9bixwLT0xfWVsc2UgaWYoZC5yaWdodD09PW8pe2lmKCEodj1nLmxlZnQpfHx2Ll9jb2xvciE9PW4pe2lmKGcuX2NvbG9yPW4sZy5yaWdodD1kLmxlZnQsZC5fY29sb3I9aSxkLmxlZnQ9Zyx1W3AtMl09ZCx1W3AtMV09byxsKGcpLGwoZCkscD49MykobT11W3AtM10pLnJpZ2h0PT09Zz9tLnJpZ2h0PWQ6bS5sZWZ0PWQ7YnJlYWt9ZC5fY29sb3I9aSxnLmxlZnQ9cyhpLHYpLGcuX2NvbG9yPW4scC09MX1lbHNle3ZhciB2O2lmKCEodj1nLmxlZnQpfHx2Ll9jb2xvciE9PW4pe3ZhciBtO2lmKGQubGVmdD1vLnJpZ2h0LGcuX2NvbG9yPW4sZy5yaWdodD1vLmxlZnQsby5fY29sb3I9aSxvLnJpZ2h0PWQsby5sZWZ0PWcsdVtwLTJdPW8sdVtwLTFdPWQsbChnKSxsKGQpLGwobykscD49MykobT11W3AtM10pLnJpZ2h0PT09Zz9tLnJpZ2h0PW86bS5sZWZ0PW87YnJlYWt9ZC5fY29sb3I9aSxnLmxlZnQ9cyhpLHYpLGcuX2NvbG9yPW4scC09MX19cmV0dXJuIHVbMF0uX2NvbG9yPWksbmV3IGMocix1WzBdKX0sdS5mb3JFYWNoPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLnJvb3Qpc3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24gdChlLHIpe3ZhciBuO2lmKHIubGVmdCYmKG49dChlLHIubGVmdCkpKXJldHVybiBuO3JldHVybihuPWUoci5rZXksci52YWx1ZSkpfHwoci5yaWdodD90KGUsci5yaWdodCk6dm9pZCAwKX0odCx0aGlzLnJvb3QpO2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24gdChlLHIsbixpKXtpZihyKGUsaS5rZXkpPD0wKXt2YXIgYTtpZihpLmxlZnQmJihhPXQoZSxyLG4saS5sZWZ0KSkpcmV0dXJuIGE7aWYoYT1uKGkua2V5LGkudmFsdWUpKXJldHVybiBhfWlmKGkucmlnaHQpcmV0dXJuIHQoZSxyLG4saS5yaWdodCl9KGUsdGhpcy5fY29tcGFyZSx0LHRoaXMucm9vdCk7Y2FzZSAzOmlmKHRoaXMuX2NvbXBhcmUoZSxyKT49MClyZXR1cm47cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4saSxhKXt2YXIgbyxzPW4oZSxhLmtleSksbD1uKHIsYS5rZXkpO2lmKHM8PTApe2lmKGEubGVmdCYmKG89dChlLHIsbixpLGEubGVmdCkpKXJldHVybiBvO2lmKGw+MCYmKG89aShhLmtleSxhLnZhbHVlKSkpcmV0dXJuIG99aWYobD4wJiZhLnJpZ2h0KXJldHVybiB0KGUscixuLGksYS5yaWdodCl9KGUscix0aGlzLl9jb21wYXJlLHQsdGhpcy5yb290KX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LFwiYmVnaW5cIix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9dGhpcy5yb290O2U7KXQucHVzaChlKSxlPWUubGVmdDtyZXR1cm4gbmV3IGgodGhpcyx0KX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodSxcImVuZFwiLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT10aGlzLnJvb3Q7ZTspdC5wdXNoKGUpLGU9ZS5yaWdodDtyZXR1cm4gbmV3IGgodGhpcyx0KX19KSx1LmF0PWZ1bmN0aW9uKHQpe2lmKHQ8MClyZXR1cm4gbmV3IGgodGhpcyxbXSk7Zm9yKHZhciBlPXRoaXMucm9vdCxyPVtdOzspe2lmKHIucHVzaChlKSxlLmxlZnQpe2lmKHQ8ZS5sZWZ0Ll9jb3VudCl7ZT1lLmxlZnQ7Y29udGludWV9dC09ZS5sZWZ0Ll9jb3VudH1pZighdClyZXR1cm4gbmV3IGgodGhpcyxyKTtpZih0LT0xLCFlLnJpZ2h0KWJyZWFrO2lmKHQ+PWUucmlnaHQuX2NvdW50KWJyZWFrO2U9ZS5yaWdodH1yZXR1cm4gbmV3IGgodGhpcyxbXSl9LHUuZ2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2NvbXBhcmUscj10aGlzLnJvb3Qsbj1bXSxpPTA7cjspe3ZhciBhPWUodCxyLmtleSk7bi5wdXNoKHIpLGE8PTAmJihpPW4ubGVuZ3RoKSxyPWE8PTA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG4ubGVuZ3RoPWksbmV3IGgodGhpcyxuKX0sdS5ndD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYTwwJiYoaT1uLmxlbmd0aCkscj1hPDA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG4ubGVuZ3RoPWksbmV3IGgodGhpcyxuKX0sdS5sdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYT4wJiYoaT1uLmxlbmd0aCkscj1hPD0wP3IubGVmdDpyLnJpZ2h0fXJldHVybiBuLmxlbmd0aD1pLG5ldyBoKHRoaXMsbil9LHUubGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2NvbXBhcmUscj10aGlzLnJvb3Qsbj1bXSxpPTA7cjspe3ZhciBhPWUodCxyLmtleSk7bi5wdXNoKHIpLGE+PTAmJihpPW4ubGVuZ3RoKSxyPWE8MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbi5sZW5ndGg9aSxuZXcgaCh0aGlzLG4pfSx1LmZpbmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2NvbXBhcmUscj10aGlzLnJvb3Qsbj1bXTtyOyl7dmFyIGk9ZSh0LHIua2V5KTtpZihuLnB1c2gociksMD09PWkpcmV0dXJuIG5ldyBoKHRoaXMsbik7cj1pPD0wP3IubGVmdDpyLnJpZ2h0fXJldHVybiBuZXcgaCh0aGlzLFtdKX0sdS5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5maW5kKHQpO3JldHVybiBlP2UucmVtb3ZlKCk6dGhpc30sdS5nZXQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2NvbXBhcmUscj10aGlzLnJvb3Q7cjspe3ZhciBuPWUodCxyLmtleSk7aWYoMD09PW4pcmV0dXJuIHIudmFsdWU7cj1uPD0wP3IubGVmdDpyLnJpZ2h0fX07dmFyIGY9aC5wcm90b3R5cGU7ZnVuY3Rpb24gcCh0LGUpe3Qua2V5PWUua2V5LHQudmFsdWU9ZS52YWx1ZSx0LmxlZnQ9ZS5sZWZ0LHQucmlnaHQ9ZS5yaWdodCx0Ll9jb2xvcj1lLl9jb2xvcix0Ll9jb3VudD1lLl9jb3VudH1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTowfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLFwidmFsaWRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YWNrLmxlbmd0aD4wfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLFwibm9kZVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhY2subGVuZ3RoPjA/dGhpcy5fc3RhY2tbdGhpcy5fc3RhY2subGVuZ3RoLTFdOm51bGx9LGVudW1lcmFibGU6ITB9KSxmLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBoKHRoaXMudHJlZSx0aGlzLl9zdGFjay5zbGljZSgpKX0sZi5yZW1vdmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwPT09dC5sZW5ndGgpcmV0dXJuIHRoaXMudHJlZTt2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9dFt0Lmxlbmd0aC0xXTtlW2UubGVuZ3RoLTFdPW5ldyBhKHIuX2NvbG9yLHIua2V5LHIudmFsdWUsci5sZWZ0LHIucmlnaHQsci5fY291bnQpO2Zvcih2YXIgdT10Lmxlbmd0aC0yO3U+PTA7LS11KXsocj10W3VdKS5sZWZ0PT09dFt1KzFdP2VbdV09bmV3IGEoci5fY29sb3Isci5rZXksci52YWx1ZSxlW3UrMV0sci5yaWdodCxyLl9jb3VudCk6ZVt1XT1uZXcgYShyLl9jb2xvcixyLmtleSxyLnZhbHVlLHIubGVmdCxlW3UrMV0sci5fY291bnQpfWlmKChyPWVbZS5sZW5ndGgtMV0pLmxlZnQmJnIucmlnaHQpe3ZhciBoPWUubGVuZ3RoO2ZvcihyPXIubGVmdDtyLnJpZ2h0OyllLnB1c2gocikscj1yLnJpZ2h0O3ZhciBmPWVbaC0xXTtlLnB1c2gobmV3IGEoci5fY29sb3IsZi5rZXksZi52YWx1ZSxyLmxlZnQsci5yaWdodCxyLl9jb3VudCkpLGVbaC0xXS5rZXk9ci5rZXksZVtoLTFdLnZhbHVlPXIudmFsdWU7Zm9yKHU9ZS5sZW5ndGgtMjt1Pj1oOy0tdSlyPWVbdV0sZVt1XT1uZXcgYShyLl9jb2xvcixyLmtleSxyLnZhbHVlLHIubGVmdCxlW3UrMV0sci5fY291bnQpO2VbaC0xXS5sZWZ0PWVbaF19aWYoKHI9ZVtlLmxlbmd0aC0xXSkuX2NvbG9yPT09bil7dmFyIGQ9ZVtlLmxlbmd0aC0yXTtkLmxlZnQ9PT1yP2QubGVmdD1udWxsOmQucmlnaHQ9PT1yJiYoZC5yaWdodD1udWxsKSxlLnBvcCgpO2Zvcih1PTA7dTxlLmxlbmd0aDsrK3UpZVt1XS5fY291bnQtLTtyZXR1cm4gbmV3IGModGhpcy50cmVlLl9jb21wYXJlLGVbMF0pfWlmKHIubGVmdHx8ci5yaWdodCl7ci5sZWZ0P3AocixyLmxlZnQpOnIucmlnaHQmJnAocixyLnJpZ2h0KSxyLl9jb2xvcj1pO2Zvcih1PTA7dTxlLmxlbmd0aC0xOysrdSllW3VdLl9jb3VudC0tO3JldHVybiBuZXcgYyh0aGlzLnRyZWUuX2NvbXBhcmUsZVswXSl9aWYoMT09PWUubGVuZ3RoKXJldHVybiBuZXcgYyh0aGlzLnRyZWUuX2NvbXBhcmUsbnVsbCk7Zm9yKHU9MDt1PGUubGVuZ3RoOysrdSllW3VdLl9jb3VudC0tO3ZhciBnPWVbZS5sZW5ndGgtMl07cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLGEsYyx1PXQubGVuZ3RoLTE7dT49MDstLXUpe2lmKGU9dFt1XSwwPT09dSlyZXR1cm4gdm9pZChlLl9jb2xvcj1pKTtpZigocj10W3UtMV0pLmxlZnQ9PT1lKXtpZigoYT1yLnJpZ2h0KS5yaWdodCYmYS5yaWdodC5fY29sb3I9PT1uKXJldHVybiBjPShhPXIucmlnaHQ9byhhKSkucmlnaHQ9byhhLnJpZ2h0KSxyLnJpZ2h0PWEubGVmdCxhLmxlZnQ9cixhLnJpZ2h0PWMsYS5fY29sb3I9ci5fY29sb3IsZS5fY29sb3I9aSxyLl9jb2xvcj1pLGMuX2NvbG9yPWksbChyKSxsKGEpLHU+MSYmKChoPXRbdS0yXSkubGVmdD09PXI/aC5sZWZ0PWE6aC5yaWdodD1hKSx2b2lkKHRbdS0xXT1hKTtpZihhLmxlZnQmJmEubGVmdC5fY29sb3I9PT1uKXJldHVybiBjPShhPXIucmlnaHQ9byhhKSkubGVmdD1vKGEubGVmdCksci5yaWdodD1jLmxlZnQsYS5sZWZ0PWMucmlnaHQsYy5sZWZ0PXIsYy5yaWdodD1hLGMuX2NvbG9yPXIuX2NvbG9yLHIuX2NvbG9yPWksYS5fY29sb3I9aSxlLl9jb2xvcj1pLGwociksbChhKSxsKGMpLHU+MSYmKChoPXRbdS0yXSkubGVmdD09PXI/aC5sZWZ0PWM6aC5yaWdodD1jKSx2b2lkKHRbdS0xXT1jKTtpZihhLl9jb2xvcj09PWkpe2lmKHIuX2NvbG9yPT09bilyZXR1cm4gci5fY29sb3I9aSx2b2lkKHIucmlnaHQ9cyhuLGEpKTtyLnJpZ2h0PXMobixhKTtjb250aW51ZX1hPW8oYSksci5yaWdodD1hLmxlZnQsYS5sZWZ0PXIsYS5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9bixsKHIpLGwoYSksdT4xJiYoKGg9dFt1LTJdKS5sZWZ0PT09cj9oLmxlZnQ9YTpoLnJpZ2h0PWEpLHRbdS0xXT1hLHRbdV09cix1KzE8dC5sZW5ndGg/dFt1KzFdPWU6dC5wdXNoKGUpLHUrPTJ9ZWxzZXtpZigoYT1yLmxlZnQpLmxlZnQmJmEubGVmdC5fY29sb3I9PT1uKXJldHVybiBjPShhPXIubGVmdD1vKGEpKS5sZWZ0PW8oYS5sZWZ0KSxyLmxlZnQ9YS5yaWdodCxhLnJpZ2h0PXIsYS5sZWZ0PWMsYS5fY29sb3I9ci5fY29sb3IsZS5fY29sb3I9aSxyLl9jb2xvcj1pLGMuX2NvbG9yPWksbChyKSxsKGEpLHU+MSYmKChoPXRbdS0yXSkucmlnaHQ9PT1yP2gucmlnaHQ9YTpoLmxlZnQ9YSksdm9pZCh0W3UtMV09YSk7aWYoYS5yaWdodCYmYS5yaWdodC5fY29sb3I9PT1uKXJldHVybiBjPShhPXIubGVmdD1vKGEpKS5yaWdodD1vKGEucmlnaHQpLHIubGVmdD1jLnJpZ2h0LGEucmlnaHQ9Yy5sZWZ0LGMucmlnaHQ9cixjLmxlZnQ9YSxjLl9jb2xvcj1yLl9jb2xvcixyLl9jb2xvcj1pLGEuX2NvbG9yPWksZS5fY29sb3I9aSxsKHIpLGwoYSksbChjKSx1PjEmJigoaD10W3UtMl0pLnJpZ2h0PT09cj9oLnJpZ2h0PWM6aC5sZWZ0PWMpLHZvaWQodFt1LTFdPWMpO2lmKGEuX2NvbG9yPT09aSl7aWYoci5fY29sb3I9PT1uKXJldHVybiByLl9jb2xvcj1pLHZvaWQoci5sZWZ0PXMobixhKSk7ci5sZWZ0PXMobixhKTtjb250aW51ZX12YXIgaDthPW8oYSksci5sZWZ0PWEucmlnaHQsYS5yaWdodD1yLGEuX2NvbG9yPXIuX2NvbG9yLHIuX2NvbG9yPW4sbChyKSxsKGEpLHU+MSYmKChoPXRbdS0yXSkucmlnaHQ9PT1yP2gucmlnaHQ9YTpoLmxlZnQ9YSksdFt1LTFdPWEsdFt1XT1yLHUrMTx0Lmxlbmd0aD90W3UrMV09ZTp0LnB1c2goZSksdSs9Mn19fShlKSxnLmxlZnQ9PT1yP2cubGVmdD1udWxsOmcucmlnaHQ9bnVsbCxuZXcgYyh0aGlzLnRyZWUuX2NvbXBhcmUsZVswXSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLFwia2V5XCIse2dldDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0YWNrLmxlbmd0aD4wKXJldHVybiB0aGlzLl9zdGFja1t0aGlzLl9zdGFjay5sZW5ndGgtMV0ua2V5fSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsXCJ2YWx1ZVwiLHtnZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9zdGFjay5sZW5ndGg+MClyZXR1cm4gdGhpcy5fc3RhY2tbdGhpcy5fc3RhY2subGVuZ3RoLTFdLnZhbHVlfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsXCJpbmRleFwiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD0wLGU9dGhpcy5fc3RhY2s7aWYoMD09PWUubGVuZ3RoKXt2YXIgcj10aGlzLnRyZWUucm9vdDtyZXR1cm4gcj9yLl9jb3VudDowfWVbZS5sZW5ndGgtMV0ubGVmdCYmKHQ9ZVtlLmxlbmd0aC0xXS5sZWZ0Ll9jb3VudCk7Zm9yKHZhciBuPWUubGVuZ3RoLTI7bj49MDstLW4pZVtuKzFdPT09ZVtuXS5yaWdodCYmKCsrdCxlW25dLmxlZnQmJih0Kz1lW25dLmxlZnQuX2NvdW50KSk7cmV0dXJuIHR9LGVudW1lcmFibGU6ITB9KSxmLm5leHQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwIT09dC5sZW5ndGgpe3ZhciBlPXRbdC5sZW5ndGgtMV07aWYoZS5yaWdodClmb3IoZT1lLnJpZ2h0O2U7KXQucHVzaChlKSxlPWUubGVmdDtlbHNlIGZvcih0LnBvcCgpO3QubGVuZ3RoPjAmJnRbdC5sZW5ndGgtMV0ucmlnaHQ9PT1lOyllPXRbdC5sZW5ndGgtMV0sdC5wb3AoKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLFwiaGFzTmV4dFwiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwPT09dC5sZW5ndGgpcmV0dXJuITE7aWYodFt0Lmxlbmd0aC0xXS5yaWdodClyZXR1cm4hMDtmb3IodmFyIGU9dC5sZW5ndGgtMTtlPjA7LS1lKWlmKHRbZS0xXS5sZWZ0PT09dFtlXSlyZXR1cm4hMDtyZXR1cm4hMX19KSxmLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zdGFjaztpZigwPT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgdXBkYXRlIGVtcHR5IG5vZGUhXCIpO3ZhciByPW5ldyBBcnJheShlLmxlbmd0aCksbj1lW2UubGVuZ3RoLTFdO3Jbci5sZW5ndGgtMV09bmV3IGEobi5fY29sb3Isbi5rZXksdCxuLmxlZnQsbi5yaWdodCxuLl9jb3VudCk7Zm9yKHZhciBpPWUubGVuZ3RoLTI7aT49MDstLWkpKG49ZVtpXSkubGVmdD09PWVbaSsxXT9yW2ldPW5ldyBhKG4uX2NvbG9yLG4ua2V5LG4udmFsdWUscltpKzFdLG4ucmlnaHQsbi5fY291bnQpOnJbaV09bmV3IGEobi5fY29sb3Isbi5rZXksbi52YWx1ZSxuLmxlZnQscltpKzFdLG4uX2NvdW50KTtyZXR1cm4gbmV3IGModGhpcy50cmVlLl9jb21wYXJlLHJbMF0pfSxmLnByZXY9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwIT09dC5sZW5ndGgpe3ZhciBlPXRbdC5sZW5ndGgtMV07aWYoZS5sZWZ0KWZvcihlPWUubGVmdDtlOyl0LnB1c2goZSksZT1lLnJpZ2h0O2Vsc2UgZm9yKHQucG9wKCk7dC5sZW5ndGg+MCYmdFt0Lmxlbmd0aC0xXS5sZWZ0PT09ZTspZT10W3QubGVuZ3RoLTFdLHQucG9wKCl9fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZixcImhhc1ByZXZcIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3RhY2s7aWYoMD09PXQubGVuZ3RoKXJldHVybiExO2lmKHRbdC5sZW5ndGgtMV0ubGVmdClyZXR1cm4hMDtmb3IodmFyIGU9dC5sZW5ndGgtMTtlPjA7LS1lKWlmKHRbZS0xXS5yaWdodD09PXRbZV0pcmV0dXJuITA7cmV0dXJuITF9fSl9LHt9XSwyMjg6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj1bLjk5OTk5OTk5OTk5OTgwOTksNjc2LjUyMDM2ODEyMTg4NTEsLTEyNTkuMTM5MjE2NzIyNDAyOCw3NzEuMzIzNDI4Nzc3NjUzMSwtMTc2LjYxNTAyOTE2MjE0MDYsMTIuNTA3MzQzMjc4Njg2OTA1LC0uMTM4NTcxMDk1MjY1NzIwMTIsOTk4NDM2OTU3ODAxOTU3MmUtMjEsMS41MDU2MzI3MzUxNDkzMTE2ZS03XSxpPTYwNy8xMjgsYT1bLjk5OTk5OTk5OTk5OTk5NzEsNTcuMTU2MjM1NjY1ODYyOTIsLTU5LjU5Nzk2MDM1NTQ3NTQ5LDE0LjEzNjA5Nzk3NDc0MTc0NiwtLjQ5MTkxMzgxNjA5NzYyMDIsMzM5OTQ2NDk5ODQ4MTE4OWUtMjAsNDY1MjM2Mjg5MjcwNDg1OGUtMjAsLTk4Mzc0NDc1MzA0ODc5NTZlLTIwLC4wMDAxNTgwODg3MDMyMjQ5MTI1LC0uMDAwMjEwMjY0NDQxNzI0MTA0ODgsLjAwMDIxNzQzOTYxODExNTIxMjY1LC0uMDAwMTY0MzE4MTA2NTM2NzYzOSw4NDQxODIyMzk4Mzg1Mjc1ZS0yMCwtMjYxOTA4Mzg0MDE1ODE0MDhlLTIxLDM2ODk5MTgyNjU5NTMxNjI1ZS0yMl07ZnVuY3Rpb24gbyh0KXtpZih0PDApcmV0dXJuIE51bWJlcihcIjAvMFwiKTtmb3IodmFyIGU9YVswXSxyPWEubGVuZ3RoLTE7cj4wOy0tcillKz1hW3JdLyh0K3IpO3ZhciBuPXQraSsuNTtyZXR1cm4uNSpNYXRoLmxvZygyKk1hdGguUEkpKyh0Ky41KSpNYXRoLmxvZyhuKS1uK01hdGgubG9nKGUpLU1hdGgubG9nKHQpfWUuZXhwb3J0cz1mdW5jdGlvbiB0KGUpe2lmKGU8LjUpcmV0dXJuIE1hdGguUEkvKE1hdGguc2luKE1hdGguUEkqZSkqdCgxLWUpKTtpZihlPjEwMClyZXR1cm4gTWF0aC5leHAobyhlKSk7ZS09MTtmb3IodmFyIHI9blswXSxpPTE7aTw5O2krKylyKz1uW2ldLyhlK2kpO3ZhciBhPWUrNysuNTtyZXR1cm4gTWF0aC5zcXJ0KDIqTWF0aC5QSSkqTWF0aC5wb3coYSxlKy41KSpNYXRoLmV4cCgtYSkqcn0sZS5leHBvcnRzLmxvZz1vfSx7fV0sMjI5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIm11c3Qgc3BlY2lmeSB0eXBlIHN0cmluZ1wiKTtpZihlPWV8fHt9LFwidW5kZWZpbmVkXCI9PXR5cGVvZiBkb2N1bWVudCYmIWUuY2FudmFzKXJldHVybiBudWxsO3ZhciByPWUuY2FudmFzfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1wibnVtYmVyXCI9PXR5cGVvZiBlLndpZHRoJiYoci53aWR0aD1lLndpZHRoKTtcIm51bWJlclwiPT10eXBlb2YgZS5oZWlnaHQmJihyLmhlaWdodD1lLmhlaWdodCk7dmFyIG4saT1lO3RyeXt2YXIgYT1bdF07MD09PXQuaW5kZXhPZihcIndlYmdsXCIpJiZhLnB1c2goXCJleHBlcmltZW50YWwtXCIrdCk7Zm9yKHZhciBvPTA7bzxhLmxlbmd0aDtvKyspaWYobj1yLmdldENvbnRleHQoYVtvXSxpKSlyZXR1cm4gbn1jYXRjaCh0KXtuPW51bGx9cmV0dXJuIG58fG51bGx9fSx7fV0sMjMwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IHUodCk7cmV0dXJuIHIudXBkYXRlKGUpLHJ9O3ZhciBuPXQoXCIuL2xpYi90ZXh0LmpzXCIpLGk9dChcIi4vbGliL2xpbmVzLmpzXCIpLGE9dChcIi4vbGliL2JhY2tncm91bmQuanNcIiksbz10KFwiLi9saWIvY3ViZS5qc1wiKSxzPXQoXCIuL2xpYi90aWNrcy5qc1wiKSxsPW5ldyBGbG9hdDMyQXJyYXkoWzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdKTtmdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHR9ZnVuY3Rpb24gdSh0KXt0aGlzLmdsPXQsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5ib3VuZHM9W1stMTAsLTEwLC0xMF0sWzEwLDEwLDEwXV0sdGhpcy50aWNrcz1bW10sW10sW11dLHRoaXMuYXV0b1RpY2tzPSEwLHRoaXMudGlja1NwYWNpbmc9WzEsMSwxXSx0aGlzLnRpY2tFbmFibGU9WyEwLCEwLCEwXSx0aGlzLnRpY2tGb250PVtcInNhbnMtc2VyaWZcIixcInNhbnMtc2VyaWZcIixcInNhbnMtc2VyaWZcIl0sdGhpcy50aWNrU2l6ZT1bMTIsMTIsMTJdLHRoaXMudGlja0FuZ2xlPVswLDAsMF0sdGhpcy50aWNrQWxpZ249W1wiYXV0b1wiLFwiYXV0b1wiLFwiYXV0b1wiXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja1BhZD1bMTAsMTAsMTBdLHRoaXMubGFzdEN1YmVQcm9wcz17Y3ViZUVkZ2VzOlswLDAsMF0sYXhpczpbMCwwLDBdfSx0aGlzLmxhYmVscz1bXCJ4XCIsXCJ5XCIsXCJ6XCJdLHRoaXMubGFiZWxFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxhYmVsRm9udD1cInNhbnMtc2VyaWZcIix0aGlzLmxhYmVsU2l6ZT1bMjAsMjAsMjBdLHRoaXMubGFiZWxBbmdsZT1bMCwwLDBdLHRoaXMubGFiZWxBbGlnbj1bXCJhdXRvXCIsXCJhdXRvXCIsXCJhdXRvXCJdLHRoaXMubGFiZWxDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGFiZWxQYWQ9WzEwLDEwLDEwXSx0aGlzLmxpbmVFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxpbmVNaXJyb3I9WyExLCExLCExXSx0aGlzLmxpbmVXaWR0aD1bMSwxLDFdLHRoaXMubGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5saW5lVGlja0VuYWJsZT1bITAsITAsITBdLHRoaXMubGluZVRpY2tNaXJyb3I9WyExLCExLCExXSx0aGlzLmxpbmVUaWNrTGVuZ3RoPVswLDAsMF0sdGhpcy5saW5lVGlja1dpZHRoPVsxLDEsMV0sdGhpcy5saW5lVGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ncmlkRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5ncmlkV2lkdGg9WzEsMSwxXSx0aGlzLmdyaWRDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuemVyb0VuYWJsZT1bITAsITAsITBdLHRoaXMuemVyb0xpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuemVyb0xpbmVXaWR0aD1bMiwyLDJdLHRoaXMuYmFja2dyb3VuZEVuYWJsZT1bITEsITEsITFdLHRoaXMuYmFja2dyb3VuZENvbG9yPVtbLjgsLjgsLjgsLjVdLFsuOCwuOCwuOCwuNV0sWy44LC44LC44LC41XV0sdGhpcy5fZmlyc3RJbml0PSEwLHRoaXMuX3RleHQ9bnVsbCx0aGlzLl9saW5lcz1udWxsLHRoaXMuX2JhY2tncm91bmQ9YSh0KX12YXIgaD11LnByb3RvdHlwZTtmdW5jdGlvbiBmKCl7dGhpcy5wcmltYWxPZmZzZXQ9WzAsMCwwXSx0aGlzLnByaW1hbE1pbm9yPVswLDAsMF0sdGhpcy5taXJyb3JPZmZzZXQ9WzAsMCwwXSx0aGlzLm1pcnJvck1pbm9yPVswLDAsMF19aC51cGRhdGU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIsbil7aWYobiBpbiB0KXt2YXIgaSxhPXRbbl0sbz10aGlzW25dOyhlP0FycmF5LmlzQXJyYXkoYSkmJkFycmF5LmlzQXJyYXkoYVswXSk6QXJyYXkuaXNBcnJheShhKSk/dGhpc1tuXT1pPVtyKGFbMF0pLHIoYVsxXSkscihhWzJdKV06dGhpc1tuXT1pPVtyKGEpLHIoYSkscihhKV07Zm9yKHZhciBzPTA7czwzOysrcylpZihpW3NdIT09b1tzXSlyZXR1cm4hMH1yZXR1cm4hMX10PXR8fHt9O3ZhciByLGE9ZS5iaW5kKHRoaXMsITEsTnVtYmVyKSxvPWUuYmluZCh0aGlzLCExLEJvb2xlYW4pLGw9ZS5iaW5kKHRoaXMsITEsU3RyaW5nKSxjPWUuYmluZCh0aGlzLCEwLGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2lmKDM9PT10Lmxlbmd0aClyZXR1cm5bK3RbMF0sK3RbMV0sK3RbMl0sMV07aWYoND09PXQubGVuZ3RoKXJldHVyblsrdFswXSwrdFsxXSwrdFsyXSwrdFszXV19cmV0dXJuWzAsMCwwLDFdfSksdT0hMSxoPSExO2lmKFwiYm91bmRzXCJpbiB0KWZvcih2YXIgZj10LmJvdW5kcyxwPTA7cDwyOysrcClmb3IodmFyIGQ9MDtkPDM7KytkKWZbcF1bZF0hPT10aGlzLmJvdW5kc1twXVtkXSYmKGg9ITApLHRoaXMuYm91bmRzW3BdW2RdPWZbcF1bZF07aWYoXCJ0aWNrc1wiaW4gdCl7cj10LnRpY2tzLHU9ITAsdGhpcy5hdXRvVGlja3M9ITE7Zm9yKHA9MDtwPDM7KytwKXRoaXMudGlja1NwYWNpbmdbcF09MH1lbHNlIGEoXCJ0aWNrU3BhY2luZ1wiKSYmKHRoaXMuYXV0b1RpY2tzPSEwLGg9ITApO2lmKHRoaXMuX2ZpcnN0SW5pdCYmKFwidGlja3NcImluIHR8fFwidGlja1NwYWNpbmdcImluIHR8fCh0aGlzLmF1dG9UaWNrcz0hMCksaD0hMCx1PSEwLHRoaXMuX2ZpcnN0SW5pdD0hMSksaCYmdGhpcy5hdXRvVGlja3MmJihyPXMuY3JlYXRlKHRoaXMuYm91bmRzLHRoaXMudGlja1NwYWNpbmcpLHU9ITApLHUpe2ZvcihwPTA7cDwzOysrcClyW3BdLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54LWUueH0pO3MuZXF1YWwocix0aGlzLnRpY2tzKT91PSExOnRoaXMudGlja3M9cn1vKFwidGlja0VuYWJsZVwiKSxsKFwidGlja0ZvbnRcIikmJih1PSEwKSxhKFwidGlja1NpemVcIiksYShcInRpY2tBbmdsZVwiKSxhKFwidGlja1BhZFwiKSxjKFwidGlja0NvbG9yXCIpO3ZhciBnPWwoXCJsYWJlbHNcIik7bChcImxhYmVsRm9udFwiKSYmKGc9ITApLG8oXCJsYWJlbEVuYWJsZVwiKSxhKFwibGFiZWxTaXplXCIpLGEoXCJsYWJlbFBhZFwiKSxjKFwibGFiZWxDb2xvclwiKSxvKFwibGluZUVuYWJsZVwiKSxvKFwibGluZU1pcnJvclwiKSxhKFwibGluZVdpZHRoXCIpLGMoXCJsaW5lQ29sb3JcIiksbyhcImxpbmVUaWNrRW5hYmxlXCIpLG8oXCJsaW5lVGlja01pcnJvclwiKSxhKFwibGluZVRpY2tMZW5ndGhcIiksYShcImxpbmVUaWNrV2lkdGhcIiksYyhcImxpbmVUaWNrQ29sb3JcIiksbyhcImdyaWRFbmFibGVcIiksYShcImdyaWRXaWR0aFwiKSxjKFwiZ3JpZENvbG9yXCIpLG8oXCJ6ZXJvRW5hYmxlXCIpLGMoXCJ6ZXJvTGluZUNvbG9yXCIpLGEoXCJ6ZXJvTGluZVdpZHRoXCIpLG8oXCJiYWNrZ3JvdW5kRW5hYmxlXCIpLGMoXCJiYWNrZ3JvdW5kQ29sb3JcIiksdGhpcy5fdGV4dD90aGlzLl90ZXh0JiYoZ3x8dSkmJnRoaXMuX3RleHQudXBkYXRlKHRoaXMuYm91bmRzLHRoaXMubGFiZWxzLHRoaXMubGFiZWxGb250LHRoaXMudGlja3MsdGhpcy50aWNrRm9udCk6dGhpcy5fdGV4dD1uKHRoaXMuZ2wsdGhpcy5ib3VuZHMsdGhpcy5sYWJlbHMsdGhpcy5sYWJlbEZvbnQsdGhpcy50aWNrcyx0aGlzLnRpY2tGb250KSx0aGlzLl9saW5lcyYmdSYmKHRoaXMuX2xpbmVzLmRpc3Bvc2UoKSx0aGlzLl9saW5lcz1udWxsKSx0aGlzLl9saW5lc3x8KHRoaXMuX2xpbmVzPWkodGhpcy5nbCx0aGlzLmJvdW5kcyx0aGlzLnRpY2tzKSl9O3ZhciBwPVtuZXcgZixuZXcgZixuZXcgZl07ZnVuY3Rpb24gZCh0LGUscixuLGkpe2Zvcih2YXIgYT10LnByaW1hbE9mZnNldCxvPXQucHJpbWFsTWlub3Iscz10Lm1pcnJvck9mZnNldCxsPXQubWlycm9yTWlub3IsYz1uW2VdLHU9MDt1PDM7Kyt1KWlmKGUhPT11KXt2YXIgaD1hLGY9cyxwPW8sZD1sO2MmMTw8dSYmKGg9cyxmPWEscD1sLGQ9byksaFt1XT1yWzBdW3VdLGZbdV09clsxXVt1XSxpW3VdPjA/KHBbdV09LTEsZFt1XT0wKToocFt1XT0wLGRbdV09MSl9fXZhciBnPVswLDAsMF0sdj17bW9kZWw6bCx2aWV3OmwscHJvamVjdGlvbjpsLF9vcnRobzohMX07aC5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiEwfSxoLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5kcmF3VHJhbnNwYXJlbnQ9ZnVuY3Rpb24odCl7fTt2YXIgbT1bMCwwLDBdLHk9WzAsMCwwXSx4PVswLDAsMF07aC5kcmF3PWZ1bmN0aW9uKHQpe3Q9dHx8djtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fGwsbj10LnZpZXd8fGwsaT10LnByb2plY3Rpb258fGwsYT10aGlzLmJvdW5kcyxzPXQuX29ydGhvfHwhMSx1PW8ocixuLGksYSxzKSxoPXUuY3ViZUVkZ2VzLGY9dS5heGlzLGI9blsxMl0sXz1uWzEzXSx3PW5bMTRdLGs9blsxNV0sQT0ocz8yOjEpKnRoaXMucGl4ZWxSYXRpbyooaVszXSpiK2lbN10qXytpWzExXSp3K2lbMTVdKmspL2UuZHJhd2luZ0J1ZmZlckhlaWdodCxUPTA7VDwzOysrVCl0aGlzLmxhc3RDdWJlUHJvcHMuY3ViZUVkZ2VzW1RdPWhbVF0sdGhpcy5sYXN0Q3ViZVByb3BzLmF4aXNbVF09ZltUXTt2YXIgTT1wO2ZvcihUPTA7VDwzOysrVClkKHBbVF0sVCx0aGlzLmJvdW5kcyxoLGYpO2U9dGhpcy5nbDt2YXIgUyxFPWc7Zm9yKFQ9MDtUPDM7KytUKXRoaXMuYmFja2dyb3VuZEVuYWJsZVtUXT9FW1RdPWZbVF06RVtUXT0wO3RoaXMuX2JhY2tncm91bmQuZHJhdyhyLG4saSxhLEUsdGhpcy5iYWNrZ3JvdW5kQ29sb3IpLHRoaXMuX2xpbmVzLmJpbmQocixuLGksdGhpcyk7Zm9yKFQ9MDtUPDM7KytUKXt2YXIgQz1bMCwwLDBdO2ZbVF0+MD9DW1RdPWFbMV1bVF06Q1tUXT1hWzBdW1RdO2Zvcih2YXIgTD0wO0w8MjsrK0wpe3ZhciB6PShUKzErTCklMyxPPShUKzErKDFeTCkpJTM7dGhpcy5ncmlkRW5hYmxlW3pdJiZ0aGlzLl9saW5lcy5kcmF3R3JpZCh6LE8sdGhpcy5ib3VuZHMsQyx0aGlzLmdyaWRDb2xvclt6XSx0aGlzLmdyaWRXaWR0aFt6XSp0aGlzLnBpeGVsUmF0aW8pfWZvcihMPTA7TDwyOysrTCl7ej0oVCsxK0wpJTMsTz0oVCsxKygxXkwpKSUzO3RoaXMuemVyb0VuYWJsZVtPXSYmTWF0aC5taW4oYVswXVtPXSxhWzFdW09dKTw9MCYmTWF0aC5tYXgoYVswXVtPXSxhWzFdW09dKT49MCYmdGhpcy5fbGluZXMuZHJhd1plcm8oeixPLHRoaXMuYm91bmRzLEMsdGhpcy56ZXJvTGluZUNvbG9yW09dLHRoaXMuemVyb0xpbmVXaWR0aFtPXSp0aGlzLnBpeGVsUmF0aW8pfX1mb3IoVD0wO1Q8MzsrK1Qpe3RoaXMubGluZUVuYWJsZVtUXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNMaW5lKFQsdGhpcy5ib3VuZHMsTVtUXS5wcmltYWxPZmZzZXQsdGhpcy5saW5lQ29sb3JbVF0sdGhpcy5saW5lV2lkdGhbVF0qdGhpcy5waXhlbFJhdGlvKSx0aGlzLmxpbmVNaXJyb3JbVF0mJnRoaXMuX2xpbmVzLmRyYXdBeGlzTGluZShULHRoaXMuYm91bmRzLE1bVF0ubWlycm9yT2Zmc2V0LHRoaXMubGluZUNvbG9yW1RdLHRoaXMubGluZVdpZHRoW1RdKnRoaXMucGl4ZWxSYXRpbyk7dmFyIEk9YyhtLE1bVF0ucHJpbWFsTWlub3IpLEQ9Yyh5LE1bVF0ubWlycm9yTWlub3IpLFA9dGhpcy5saW5lVGlja0xlbmd0aDtmb3IoTD0wO0w8MzsrK0wpe3ZhciBSPUEvcls1KkxdO0lbTF0qPVBbTF0qUixEW0xdKj1QW0xdKlJ9dGhpcy5saW5lVGlja0VuYWJsZVtUXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNUaWNrcyhULE1bVF0ucHJpbWFsT2Zmc2V0LEksdGhpcy5saW5lVGlja0NvbG9yW1RdLHRoaXMubGluZVRpY2tXaWR0aFtUXSp0aGlzLnBpeGVsUmF0aW8pLHRoaXMubGluZVRpY2tNaXJyb3JbVF0mJnRoaXMuX2xpbmVzLmRyYXdBeGlzVGlja3MoVCxNW1RdLm1pcnJvck9mZnNldCxELHRoaXMubGluZVRpY2tDb2xvcltUXSx0aGlzLmxpbmVUaWNrV2lkdGhbVF0qdGhpcy5waXhlbFJhdGlvKX10aGlzLl9saW5lcy51bmJpbmQoKSx0aGlzLl90ZXh0LmJpbmQocixuLGksdGhpcy5waXhlbFJhdGlvKTt2YXIgRixCO2Z1bmN0aW9uIE4odCl7KEI9WzAsMCwwXSlbdF09MX1mdW5jdGlvbiBqKHQsZSxyKXt2YXIgbj0odCsxKSUzLGk9KHQrMiklMyxhPWVbbl0sbz1lW2ldLHM9cltuXSxsPXJbaV07YT4wJiZsPjA/TihuKTphPjAmJmw8MD9OKG4pOmE8MCYmbD4wP04obik6YTwwJiZsPDA/TihuKTpvPjAmJnM+MD9OKGkpOm8+MCYmczwwP04oaSk6bzwwJiZzPjA/TihpKTpvPDAmJnM8MCYmTihpKX1mb3IoVD0wO1Q8MzsrK1Qpe3ZhciBWPU1bVF0ucHJpbWFsTWlub3IsVT1NW1RdLm1pcnJvck1pbm9yLHE9Yyh4LE1bVF0ucHJpbWFsT2Zmc2V0KTtmb3IoTD0wO0w8MzsrK0wpdGhpcy5saW5lVGlja0VuYWJsZVtUXSYmKHFbTF0rPUEqVltMXSpNYXRoLm1heCh0aGlzLmxpbmVUaWNrTGVuZ3RoW0xdLDApL3JbNSpMXSk7dmFyIEg9WzAsMCwwXTtpZihIW1RdPTEsdGhpcy50aWNrRW5hYmxlW1RdKXstMzYwMD09PXRoaXMudGlja0FuZ2xlW1RdPyh0aGlzLnRpY2tBbmdsZVtUXT0wLHRoaXMudGlja0FsaWduW1RdPVwiYXV0b1wiKTp0aGlzLnRpY2tBbGlnbltUXT0tMSxGPTEsXCJhdXRvXCI9PT0oUz1bdGhpcy50aWNrQWxpZ25bVF0sLjUsRl0pWzBdP1NbMF09MDpTWzBdPXBhcnNlSW50KFwiXCIrU1swXSksQj1bMCwwLDBdLGooVCxWLFUpO2ZvcihMPTA7TDwzOysrTClxW0xdKz1BKlZbTF0qdGhpcy50aWNrUGFkW0xdL3JbNSpMXTt0aGlzLl90ZXh0LmRyYXdUaWNrcyhULHRoaXMudGlja1NpemVbVF0sdGhpcy50aWNrQW5nbGVbVF0scSx0aGlzLnRpY2tDb2xvcltUXSxILEIsUyl9aWYodGhpcy5sYWJlbEVuYWJsZVtUXSl7Rj0wLEI9WzAsMCwwXSx0aGlzLmxhYmVsc1tUXS5sZW5ndGg+NCYmKE4oVCksRj0xKSxcImF1dG9cIj09PShTPVt0aGlzLmxhYmVsQWxpZ25bVF0sLjUsRl0pWzBdP1NbMF09MDpTWzBdPXBhcnNlSW50KFwiXCIrU1swXSk7Zm9yKEw9MDtMPDM7KytMKXFbTF0rPUEqVltMXSp0aGlzLmxhYmVsUGFkW0xdL3JbNSpMXTtxW1RdKz0uNSooYVswXVtUXSthWzFdW1RdKSx0aGlzLl90ZXh0LmRyYXdMYWJlbChULHRoaXMubGFiZWxTaXplW1RdLHRoaXMubGFiZWxBbmdsZVtUXSxxLHRoaXMubGFiZWxDb2xvcltUXSxbMCwwLDBdLEIsUyl9fXRoaXMuX3RleHQudW5iaW5kKCl9LGguZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX3RleHQuZGlzcG9zZSgpLHRoaXMuX2xpbmVzLmRpc3Bvc2UoKSx0aGlzLl9iYWNrZ3JvdW5kLmRpc3Bvc2UoKSx0aGlzLl9saW5lcz1udWxsLHRoaXMuX3RleHQ9bnVsbCx0aGlzLl9iYWNrZ3JvdW5kPW51bGwsdGhpcy5nbD1udWxsfX0se1wiLi9saWIvYmFja2dyb3VuZC5qc1wiOjIzMSxcIi4vbGliL2N1YmUuanNcIjoyMzIsXCIuL2xpYi9saW5lcy5qc1wiOjIzMyxcIi4vbGliL3RleHQuanNcIjoyMzUsXCIuL2xpYi90aWNrcy5qc1wiOjIzNn1dLDIzMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj1bXSxzPTAsbD0wO2w8MzsrK2wpZm9yKHZhciBjPShsKzEpJTMsdT0obCsyKSUzLGg9WzAsMCwwXSxmPVswLDAsMF0scD0tMTtwPD0xO3ArPTIpe3IucHVzaChzLHMrMixzKzEscysxLHMrMixzKzMpLGhbbF09cCxmW2xdPXA7Zm9yKHZhciBkPS0xO2Q8PTE7ZCs9Mil7aFtjXT1kO2Zvcih2YXIgZz0tMTtnPD0xO2crPTIpaFt1XT1nLGUucHVzaChoWzBdLGhbMV0saFsyXSxmWzBdLGZbMV0sZlsyXSkscys9MX12YXIgdj1jO2M9dSx1PXZ9dmFyIG09bih0LG5ldyBGbG9hdDMyQXJyYXkoZSkpLHk9bih0LG5ldyBVaW50MTZBcnJheShyKSx0LkVMRU1FTlRfQVJSQVlfQlVGRkVSKSx4PWkodCxbe2J1ZmZlcjptLHR5cGU6dC5GTE9BVCxzaXplOjMsb2Zmc2V0OjAsc3RyaWRlOjI0fSx7YnVmZmVyOm0sdHlwZTp0LkZMT0FULHNpemU6MyxvZmZzZXQ6MTIsc3RyaWRlOjI0fV0seSksYj1hKHQpO3JldHVybiBiLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxiLmF0dHJpYnV0ZXMubm9ybWFsLmxvY2F0aW9uPTEsbmV3IG8odCxtLHgsYil9O3ZhciBuPXQoXCJnbC1idWZmZXJcIiksaT10KFwiZ2wtdmFvXCIpLGE9dChcIi4vc2hhZGVyc1wiKS5iZztmdW5jdGlvbiBvKHQsZSxyLG4pe3RoaXMuZ2w9dCx0aGlzLmJ1ZmZlcj1lLHRoaXMudmFvPXIsdGhpcy5zaGFkZXI9bn12YXIgcz1vLnByb3RvdHlwZTtzLmRyYXc9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbz0hMSxzPTA7czwzOysrcylvPW98fGlbc107aWYobyl7dmFyIGw9dGhpcy5nbDtsLmVuYWJsZShsLlBPTFlHT05fT0ZGU0VUX0ZJTEwpLGwucG9seWdvbk9mZnNldCgxLDIpLHRoaXMuc2hhZGVyLmJpbmQoKSx0aGlzLnNoYWRlci51bmlmb3Jtcz17bW9kZWw6dCx2aWV3OmUscHJvamVjdGlvbjpyLGJvdW5kczpuLGVuYWJsZTppLGNvbG9yczphfSx0aGlzLnZhby5iaW5kKCksdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUywzNiksdGhpcy52YW8udW5iaW5kKCksbC5kaXNhYmxlKGwuUE9MWUdPTl9PRkZTRVRfRklMTCl9fSxzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZhby5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHtcIi4vc2hhZGVyc1wiOjIzNCxcImdsLWJ1ZmZlclwiOjIzOCxcImdsLXZhb1wiOjMyMH1dLDIzMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLHApe2kocyxlLHQpLGkocyxyLHMpO2Zvcih2YXIgeT0wLHg9MDt4PDI7Kyt4KXt1WzJdPWFbeF1bMl07Zm9yKHZhciBiPTA7YjwyOysrYil7dVsxXT1hW2JdWzFdO2Zvcih2YXIgXz0wO188MjsrK18pdVswXT1hW19dWzBdLGYobFt5XSx1LHMpLHkrPTF9fWZvcih2YXIgdz0tMSx4PTA7eDw4OysreCl7Zm9yKHZhciBrPWxbeF1bM10sQT0wO0E8MzsrK0EpY1t4XVtBXT1sW3hdW0FdL2s7cCYmKGNbeF1bMl0qPS0xKSxrPDAmJih3PDA/dz14OmNbeF1bMl08Y1t3XVsyXSYmKHc9eCkpfWlmKHc8MCl7dz0wO2Zvcih2YXIgVD0wO1Q8MzsrK1Qpe2Zvcih2YXIgTT0oVCsyKSUzLFM9KFQrMSklMyxFPS0xLEM9LTEsTD0wO0w8MjsrK0wpe3ZhciB6PUw8PFQsTz16KyhMPDxNKSsoMS1MPDxTKSxJPXorKDEtTDw8TSkrKEw8PFMpO28oY1t6XSxjW09dLGNbSV0saCk8MHx8KEw/RT0xOkM9MSl9aWYoRTwwfHxDPDApQz5FJiYod3w9MTw8VCk7ZWxzZXtmb3IodmFyIEw9MDtMPDI7KytMKXt2YXIgej1MPDxULE89eisoTDw8TSkrKDEtTDw8UyksST16KygxLUw8PE0pKyhMPDxTKSxEPWQoW2xbel0sbFtPXSxsW0ldLGxbeisoMTw8TSkrKDE8PFMpXV0pO0w/RT1EOkM9RH1DPkUmJih3fD0xPDxUKX19fWZvcih2YXIgUD03XncsUj0tMSx4PTA7eDw4OysreCl4IT09dyYmeCE9PVAmJihSPDA/Uj14OmNbUl1bMV0+Y1t4XVsxXSYmKFI9eCkpO2Zvcih2YXIgRj0tMSx4PTA7eDwzOysreCl7dmFyIEI9Ul4xPDx4O2lmKEIhPT13JiZCIT09UCl7RjwwJiYoRj1CKTt2YXIgUz1jW0JdO1NbMF08Y1tGXVswXSYmKEY9Qil9fWZvcih2YXIgTj0tMSx4PTA7eDwzOysreCl7dmFyIEI9Ul4xPDx4O2lmKEIhPT13JiZCIT09UCYmQiE9PUYpe048MCYmKE49Qik7dmFyIFM9Y1tCXTtTWzBdPmNbTl1bMF0mJihOPUIpfX12YXIgaj1nO2pbMF09alsxXT1qWzJdPTAsaltuLmxvZzIoRl5SKV09UiZGLGpbbi5sb2cyKFJeTildPVImTjt2YXIgVj03Xk47Vj09PXd8fFY9PT1QPyhWPTdeRixqW24ubG9nMihOXlYpXT1WJk4pOmpbbi5sb2cyKEZeVildPVYmRjtmb3IodmFyIFU9dixxPXcsVD0wO1Q8MzsrK1QpVVtUXT1xJjE8PFQ/LTE6MTtyZXR1cm4gbX07dmFyIG49dChcImJpdC10d2lkZGxlXCIpLGk9dChcImdsLW1hdDQvbXVsdGlwbHlcIiksYT10KFwic3BsaXQtcG9seWdvblwiKSxvPXQoXCJyb2J1c3Qtb3JpZW50YXRpb25cIikscz1uZXcgQXJyYXkoMTYpLGw9bmV3IEFycmF5KDgpLGM9bmV3IEFycmF5KDgpLHU9bmV3IEFycmF5KDMpLGg9WzAsMCwwXTtmdW5jdGlvbiBmKHQsZSxyKXtmb3IodmFyIG49MDtuPDQ7KytuKXt0W25dPXJbMTIrbl07Zm9yKHZhciBpPTA7aTwzOysraSl0W25dKz1lW2ldKnJbNCppK25dfX0hZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PDg7Kyt0KWxbdF09WzEsMSwxLDFdLGNbdF09WzEsMSwxXX0oKTt2YXIgcD1bWzAsMCwxLDAsMF0sWzAsMCwtMSwxLDBdLFswLC0xLDAsMSwwXSxbMCwxLDAsMSwwXSxbLTEsMCwwLDEsMF0sWzEsMCwwLDEsMF1dO2Z1bmN0aW9uIGQodCl7Zm9yKHZhciBlPTA7ZTxwLmxlbmd0aDsrK2UpaWYoKHQ9YS5wb3NpdGl2ZSh0LHBbZV0pKS5sZW5ndGg8MylyZXR1cm4gMDt2YXIgcj10WzBdLG49clswXS9yWzNdLGk9clsxXS9yWzNdLG89MDtmb3IoZT0xO2UrMTx0Lmxlbmd0aDsrK2Upe3ZhciBzPXRbZV0sbD10W2UrMV0sYz1zWzBdL3NbM10tbix1PXNbMV0vc1szXS1pLGg9bFswXS9sWzNdLW4sZj1sWzFdL2xbM10taTtvKz1NYXRoLmFicyhjKmYtdSpoKX1yZXR1cm4gb312YXIgZz1bMSwxLDFdLHY9WzAsMCwwXSxtPXtjdWJlRWRnZXM6ZyxheGlzOnZ9fSx7XCJiaXQtdHdpZGRsZVwiOjgzLFwiZ2wtbWF0NC9tdWx0aXBseVwiOjI2NCxcInJvYnVzdC1vcmllbnRhdGlvblwiOjQ5NSxcInNwbGl0LXBvbHlnb25cIjo1MTJ9XSwyMzM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPVtdLHM9WzAsMCwwXSxsPVswLDAsMF0sYz1bMCwwLDBdLHU9WzAsMCwwXTtvLnB1c2goMCwwLDEsMCwxLDEsMCwwLC0xLDAsMCwtMSwwLDEsMSwwLDEsLTEpO2Zvcih2YXIgaD0wO2g8MzsrK2gpe2Zvcih2YXIgZj1vLmxlbmd0aC8zfDAsZD0wO2Q8cltoXS5sZW5ndGg7KytkKXt2YXIgZz0rcltoXVtkXS54O28ucHVzaChnLDAsMSxnLDEsMSxnLDAsLTEsZywwLC0xLGcsMSwxLGcsMSwtMSl9dmFyIHY9by5sZW5ndGgvM3wwO3NbaF09ZixsW2hdPXYtZjtmb3IodmFyIGY9by5sZW5ndGgvM3wwLG09MDttPHJbaF0ubGVuZ3RoOysrbSl7dmFyIGc9K3JbaF1bbV0ueDtvLnB1c2goZywwLDEsZywxLDEsZywwLC0xLGcsMCwtMSxnLDEsMSxnLDEsLTEpfXZhciB2PW8ubGVuZ3RoLzN8MDtjW2hdPWYsdVtoXT12LWZ9dmFyIHk9bih0LG5ldyBGbG9hdDMyQXJyYXkobykpLHg9aSh0LFt7YnVmZmVyOnksdHlwZTp0LkZMT0FULHNpemU6MyxzdHJpZGU6MCxvZmZzZXQ6MH1dKSxiPWEodCk7cmV0dXJuIGIuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLG5ldyBwKHQseSx4LGIsbCxzLHUsYyl9O3ZhciBuPXQoXCJnbC1idWZmZXJcIiksaT10KFwiZ2wtdmFvXCIpLGE9dChcIi4vc2hhZGVyc1wiKS5saW5lLG89WzAsMCwwXSxzPVswLDAsMF0sbD1bMCwwLDBdLGM9WzAsMCwwXSx1PVsxLDFdO2Z1bmN0aW9uIGgodCl7cmV0dXJuIHRbMF09dFsxXT10WzJdPTAsdH1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHR9ZnVuY3Rpb24gcCh0LGUscixuLGksYSxvLHMpe3RoaXMuZ2w9dCx0aGlzLnZlcnRCdWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMuc2hhZGVyPW4sdGhpcy50aWNrQ291bnQ9aSx0aGlzLnRpY2tPZmZzZXQ9YSx0aGlzLmdyaWRDb3VudD1vLHRoaXMuZ3JpZE9mZnNldD1zfXZhciBkPXAucHJvdG90eXBlO2QuYmluZD1mdW5jdGlvbih0LGUscil7dGhpcy5zaGFkZXIuYmluZCgpLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1vZGVsPXQsdGhpcy5zaGFkZXIudW5pZm9ybXMudmlldz1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb249cix1WzBdPXRoaXMuZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLHVbMV09dGhpcy5nbC5kcmF3aW5nQnVmZmVySGVpZ2h0LHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlblNoYXBlPXUsdGhpcy52YW8uYmluZCgpfSxkLnVuYmluZD1mdW5jdGlvbigpe3RoaXMudmFvLnVuYmluZCgpfSxkLmRyYXdBeGlzTGluZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPWgocyk7dGhpcy5zaGFkZXIudW5pZm9ybXMubWFqb3JBeGlzPXMsYVt0XT1lWzFdW3RdLWVbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMubWlub3JBeGlzPWE7dmFyIG8sdT1mKGMscik7dVt0XSs9ZVswXVt0XSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9dSx0aGlzLnNoYWRlci51bmlmb3Jtcy5saW5lV2lkdGg9aSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1uLChvPWgobCkpWyh0KzIpJTNdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1vLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsNiksKG89aChsKSlbKHQrMSklM109MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5BeGlzPW8sdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyw2KX0sZC5kcmF3QXhpc1RpY2tzPWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYodGhpcy50aWNrQ291bnRbdF0pe3ZhciBhPWgobyk7YVt0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1ham9yQXhpcz1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1pbm9yQXhpcz1yLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPW4sdGhpcy5zaGFkZXIudW5pZm9ybXMubGluZVdpZHRoPWk7dmFyIHM9aChsKTtzW3RdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1zLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy50aWNrQ291bnRbdF0sdGhpcy50aWNrT2Zmc2V0W3RdKX19LGQuZHJhd0dyaWQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2lmKHRoaXMuZ3JpZENvdW50W3RdKXt2YXIgdT1oKHMpO3VbZV09clsxXVtlXS1yWzBdW2VdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1pbm9yQXhpcz11O3ZhciBwPWYoYyxuKTtwW2VdKz1yWzBdW2VdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1wO3ZhciBkPWgobyk7ZFt0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1ham9yQXhpcz1kO3ZhciBnPWgobCk7Z1t0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlbkF4aXM9Zyx0aGlzLnNoYWRlci51bmlmb3Jtcy5saW5lV2lkdGg9YSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1pLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy5ncmlkQ291bnRbdF0sdGhpcy5ncmlkT2Zmc2V0W3RdKX19LGQuZHJhd1plcm89ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPWgocyk7dGhpcy5zaGFkZXIudW5pZm9ybXMubWFqb3JBeGlzPW8sb1t0XT1yWzFdW3RdLXJbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMubWlub3JBeGlzPW87dmFyIHU9ZihjLG4pO3VbdF0rPXJbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMub2Zmc2V0PXU7dmFyIHA9aChsKTtwW2VdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1wLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmxpbmVXaWR0aD1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPWksdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyw2KX0sZC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52YW8uZGlzcG9zZSgpLHRoaXMudmVydEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0se1wiLi9zaGFkZXJzXCI6MjM0LFwiZ2wtYnVmZmVyXCI6MjM4LFwiZ2wtdmFvXCI6MzIwfV0sMjM0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsc2xpZnlcIiksaT10KFwiZ2wtc2hhZGVyXCIpLGE9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcXG5cXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XFxudW5pZm9ybSB2ZWMzIG9mZnNldCwgbWFqb3JBeGlzLCBtaW5vckF4aXMsIHNjcmVlbkF4aXM7XFxudW5pZm9ybSBmbG9hdCBsaW5lV2lkdGg7XFxudW5pZm9ybSB2ZWMyIHNjcmVlblNoYXBlO1xcblxcbnZlYzMgcHJvamVjdCh2ZWMzIHApIHtcXG4gIHZlYzQgcHAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwLCAxLjApO1xcbiAgcmV0dXJuIHBwLnh5eiAvIG1heChwcC53LCAwLjAwMDEpO1xcbn1cXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWMzIG1ham9yID0gcG9zaXRpb24ueCAqIG1ham9yQXhpcztcXG4gIHZlYzMgbWlub3IgPSBwb3NpdGlvbi55ICogbWlub3JBeGlzO1xcblxcbiAgdmVjMyB2UG9zaXRpb24gPSBtYWpvciArIG1pbm9yICsgb2Zmc2V0O1xcbiAgdmVjMyBwUG9zaXRpb24gPSBwcm9qZWN0KHZQb3NpdGlvbik7XFxuICB2ZWMzIG9mZnNldCA9IHByb2plY3QodlBvc2l0aW9uICsgc2NyZWVuQXhpcyAqIHBvc2l0aW9uLnopO1xcblxcbiAgdmVjMiBzY3JlZW4gPSBub3JtYWxpemUoKG9mZnNldCAtIHBQb3NpdGlvbikueHkgKiBzY3JlZW5TaGFwZSkgLyBzY3JlZW5TaGFwZTtcXG5cXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChwUG9zaXRpb24gKyB2ZWMzKDAuNSAqIHNjcmVlbiAqIGxpbmVXaWR0aCwgMCksIDEuMCk7XFxufVxcblwiXSksbz1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnVuaWZvcm0gdmVjNCBjb2xvcjtcXG52b2lkIG1haW4oKSB7XFxuICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XCJdKTtyLmxpbmU9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxhLG8sbnVsbCxbe25hbWU6XCJwb3NpdGlvblwiLHR5cGU6XCJ2ZWMzXCJ9XSl9O3ZhciBzPW4oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XFxuXFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcbnVuaWZvcm0gdmVjMyBvZmZzZXQsIGF4aXMsIGFsaWduRGlyLCBhbGlnbk9wdDtcXG51bmlmb3JtIGZsb2F0IHNjYWxlLCBhbmdsZSwgcGl4ZWxTY2FsZTtcXG51bmlmb3JtIHZlYzIgcmVzb2x1dGlvbjtcXG5cXG52ZWMzIHByb2plY3QodmVjMyBwKSB7XFxuICB2ZWM0IHBwID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocCwgMS4wKTtcXG4gIHJldHVybiBwcC54eXogLyBtYXgocHAudywgMC4wMDAxKTtcXG59XFxuXFxuZmxvYXQgY29tcHV0ZVZpZXdBbmdsZSh2ZWMzIGEsIHZlYzMgYikge1xcbiAgdmVjMyBBID0gcHJvamVjdChhKTtcXG4gIHZlYzMgQiA9IHByb2plY3QoYik7XFxuXFxuICByZXR1cm4gYXRhbihcXG4gICAgKEIueSAtIEEueSkgKiByZXNvbHV0aW9uLnksXFxuICAgIChCLnggLSBBLngpICogcmVzb2x1dGlvbi54XFxuICApO1xcbn1cXG5cXG5jb25zdCBmbG9hdCBQSSA9IDMuMTQxNTkyO1xcbmNvbnN0IGZsb2F0IFRXT19QSSA9IDIuMCAqIFBJO1xcbmNvbnN0IGZsb2F0IEhBTEZfUEkgPSAwLjUgKiBQSTtcXG5jb25zdCBmbG9hdCBPTkVfQU5EX0hBTEZfUEkgPSAxLjUgKiBQSTtcXG5cXG5pbnQgb3B0aW9uID0gaW50KGZsb29yKGFsaWduT3B0LnggKyAwLjAwMSkpO1xcbmZsb2F0IGh2X3JhdGlvID0gICAgICAgYWxpZ25PcHQueTtcXG5ib29sIGVuYWJsZUFsaWduID0gICAgKGFsaWduT3B0LnogIT0gMC4wKTtcXG5cXG5mbG9hdCBtb2RfYW5nbGUoZmxvYXQgYSkge1xcbiAgcmV0dXJuIG1vZChhLCBQSSk7XFxufVxcblxcbmZsb2F0IHBvc2l0aXZlX2FuZ2xlKGZsb2F0IGEpIHtcXG4gIHJldHVybiBtb2RfYW5nbGUoKGEgPCAwLjApID9cXG4gICAgYSArIFRXT19QSSA6XFxuICAgIGFcXG4gICk7XFxufVxcblxcbmZsb2F0IGxvb2tfdXB3YXJkcyhmbG9hdCBhKSB7XFxuICBmbG9hdCBiID0gcG9zaXRpdmVfYW5nbGUoYSk7XFxuICByZXR1cm4gKChiID4gSEFMRl9QSSkgJiYgKGIgPD0gT05FX0FORF9IQUxGX1BJKSkgP1xcbiAgICBiIC0gUEkgOlxcbiAgICBiO1xcbn1cXG5cXG5mbG9hdCBsb29rX2hvcml6b250YWxfb3JfdmVydGljYWwoZmxvYXQgYSwgZmxvYXQgcmF0aW8pIHtcXG4gIC8vIHJhdGlvIGNvbnRyb2xzIHRoZSByYXRpbyBiZXR3ZWVuIGJlaW5nIGhvcml6b250YWwgdG8gKHZlcnRpY2FsICsgaG9yaXpvbnRhbClcXG4gIC8vIGlmIHJhdGlvIGlzIHNldCB0byAwLjUgdGhlbiBpdCBpcyA1MCUsIDUwJS5cXG4gIC8vIHdoZW4gdXNpbmcgYSBoaWdoZXIgcmF0aW8gZS5nLiAwLjc1IHRoZSByZXN1bHQgd291bGRcXG4gIC8vIGxpa2VseSBiZSBtb3JlIGhvcml6b250YWwgdGhhbiB2ZXJ0aWNhbC5cXG5cXG4gIGZsb2F0IGIgPSBwb3NpdGl2ZV9hbmdsZShhKTtcXG5cXG4gIHJldHVyblxcbiAgICAoYiA8ICggICAgICByYXRpbykgKiBIQUxGX1BJKSA/IDAuMCA6XFxuICAgIChiIDwgKDIuMCAtIHJhdGlvKSAqIEhBTEZfUEkpID8gLUhBTEZfUEkgOlxcbiAgICAoYiA8ICgyLjAgKyByYXRpbykgKiBIQUxGX1BJKSA/IDAuMCA6XFxuICAgIChiIDwgKDQuMCAtIHJhdGlvKSAqIEhBTEZfUEkpID8gSEFMRl9QSSA6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wO1xcbn1cXG5cXG5mbG9hdCByb3VuZFRvKGZsb2F0IGEsIGZsb2F0IGIpIHtcXG4gIHJldHVybiBmbG9hdChiICogZmxvb3IoKGEgKyAwLjUgKiBiKSAvIGIpKTtcXG59XFxuXFxuZmxvYXQgbG9va19yb3VuZF9uX2RpcmVjdGlvbnMoZmxvYXQgYSwgaW50IG4pIHtcXG4gIGZsb2F0IGIgPSBwb3NpdGl2ZV9hbmdsZShhKTtcXG4gIGZsb2F0IGRpdiA9IFRXT19QSSAvIGZsb2F0KG4pO1xcbiAgZmxvYXQgYyA9IHJvdW5kVG8oYiwgZGl2KTtcXG4gIHJldHVybiBsb29rX3Vwd2FyZHMoYyk7XFxufVxcblxcbmZsb2F0IGFwcGx5QWxpZ25PcHRpb24oZmxvYXQgcmF3QW5nbGUsIGZsb2F0IGRlbHRhKSB7XFxuICByZXR1cm5cXG4gICAgKG9wdGlvbiA+ICAyKSA/IGxvb2tfcm91bmRfbl9kaXJlY3Rpb25zKHJhd0FuZ2xlICsgZGVsdGEsIG9wdGlvbikgOiAgICAgICAvLyBvcHRpb24gMy1uOiByb3VuZCB0byBuIGRpcmVjdGlvbnNcXG4gICAgKG9wdGlvbiA9PSAyKSA/IGxvb2tfaG9yaXpvbnRhbF9vcl92ZXJ0aWNhbChyYXdBbmdsZSArIGRlbHRhLCBodl9yYXRpbykgOiAvLyBob3Jpem9udGFsIG9yIHZlcnRpY2FsXFxuICAgIChvcHRpb24gPT0gMSkgPyByYXdBbmdsZSArIGRlbHRhIDogICAgICAgLy8gdXNlIGZyZWUgYW5nbGUsIGFuZCBmbGlwIHRvIGFsaWduIHdpdGggb25lIGRpcmVjdGlvbiBvZiB0aGUgYXhpc1xcbiAgICAob3B0aW9uID09IDApID8gbG9va191cHdhcmRzKHJhd0FuZ2xlKSA6IC8vIHVzZSBmcmVlIGFuZ2xlLCBhbmQgc3RheSB1cHdhcmRzXFxuICAgIChvcHRpb24gPT0tMSkgPyAwLjAgOiAgICAgICAgICAgICAgICAgICAgLy8gdXNlZnVsIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBhbGwgdGV4dHMgcmVtYWlucyBob3Jpem9udGFsXFxuICAgICAgICAgICAgICAgICAgICByYXdBbmdsZTsgICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHJldHVybiBiYWNrIHJhdyBpbnB1dCBhbmdsZVxcbn1cXG5cXG5ib29sIGlzQXhpc1RpdGxlID0gKGF4aXMueCA9PSAwLjApICYmXFxuICAgICAgICAgICAgICAgICAgIChheGlzLnkgPT0gMC4wKSAmJlxcbiAgICAgICAgICAgICAgICAgICAoYXhpcy56ID09IDAuMCk7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgLy9Db21wdXRlIHdvcmxkIG9mZnNldFxcbiAgZmxvYXQgYXhpc0Rpc3RhbmNlID0gcG9zaXRpb24uejtcXG4gIHZlYzMgZGF0YVBvc2l0aW9uID0gYXhpc0Rpc3RhbmNlICogYXhpcyArIG9mZnNldDtcXG5cXG4gIGZsb2F0IGJldGEgPSBhbmdsZTsgLy8gaS5lLiB1c2VyIGRlZmluZWQgYXR0cmlidXRlcyBmb3IgZWFjaCB0aWNrXFxuXFxuICBmbG9hdCBheGlzQW5nbGU7XFxuICBmbG9hdCBjbGlwQW5nbGU7XFxuICBmbG9hdCBmbGlwO1xcblxcbiAgaWYgKGVuYWJsZUFsaWduKSB7XFxuICAgIGF4aXNBbmdsZSA9IChpc0F4aXNUaXRsZSkgPyBIQUxGX1BJIDpcXG4gICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZVZpZXdBbmdsZShkYXRhUG9zaXRpb24sIGRhdGFQb3NpdGlvbiArIGF4aXMpO1xcbiAgICBjbGlwQW5nbGUgPSBjb21wdXRlVmlld0FuZ2xlKGRhdGFQb3NpdGlvbiwgZGF0YVBvc2l0aW9uICsgYWxpZ25EaXIpO1xcblxcbiAgICBheGlzQW5nbGUgKz0gKHNpbihheGlzQW5nbGUpIDwgMC4wKSA/IFBJIDogMC4wO1xcbiAgICBjbGlwQW5nbGUgKz0gKHNpbihjbGlwQW5nbGUpIDwgMC4wKSA/IFBJIDogMC4wO1xcblxcbiAgICBmbGlwID0gKGRvdCh2ZWMyKGNvcyhheGlzQW5nbGUpLCBzaW4oYXhpc0FuZ2xlKSksXFxuICAgICAgICAgICAgICAgIHZlYzIoc2luKGNsaXBBbmdsZSksLWNvcyhjbGlwQW5nbGUpKSkgPiAwLjApID8gMS4wIDogMC4wO1xcblxcbiAgICBiZXRhICs9IGFwcGx5QWxpZ25PcHRpb24oY2xpcEFuZ2xlLCBmbGlwICogUEkpO1xcbiAgfVxcblxcbiAgLy9Db21wdXRlIHBsYW5lIG9mZnNldFxcbiAgdmVjMiBwbGFuZUNvb3JkID0gcG9zaXRpb24ueHkgKiBwaXhlbFNjYWxlO1xcblxcbiAgbWF0MiBwbGFuZVhmb3JtID0gc2NhbGUgKiBtYXQyKFxcbiAgICAgY29zKGJldGEpLCBzaW4oYmV0YSksXFxuICAgIC1zaW4oYmV0YSksIGNvcyhiZXRhKVxcbiAgKTtcXG5cXG4gIHZlYzIgdmlld09mZnNldCA9IDIuMCAqIHBsYW5lWGZvcm0gKiBwbGFuZUNvb3JkIC8gcmVzb2x1dGlvbjtcXG5cXG4gIC8vQ29tcHV0ZSBjbGlwIHBvc2l0aW9uXFxuICB2ZWMzIGNsaXBQb3NpdGlvbiA9IHByb2plY3QoZGF0YVBvc2l0aW9uKTtcXG5cXG4gIC8vQXBwbHkgdGV4dCBvZmZzZXQgaW4gY2xpcCBjb29yZGluYXRlc1xcbiAgY2xpcFBvc2l0aW9uICs9IHZlYzModmlld09mZnNldCwgMC4wKTtcXG5cXG4gIC8vRG9uZVxcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KGNsaXBQb3NpdGlvbiwgMS4wKTtcXG59XCJdKSxsPW4oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxudW5pZm9ybSB2ZWM0IGNvbG9yO1xcbnZvaWQgbWFpbigpIHtcXG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cIl0pO3IudGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LHMsbCxudWxsLFt7bmFtZTpcInBvc2l0aW9uXCIsdHlwZTpcInZlYzNcIn1dKX07dmFyIGM9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWw7XFxuXFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcbnVuaWZvcm0gdmVjMyBlbmFibGU7XFxudW5pZm9ybSB2ZWMzIGJvdW5kc1syXTtcXG5cXG52YXJ5aW5nIHZlYzMgY29sb3JDaGFubmVsO1xcblxcbnZvaWQgbWFpbigpIHtcXG5cXG4gIHZlYzMgc2lnbkF4aXMgPSBzaWduKGJvdW5kc1sxXSAtIGJvdW5kc1swXSk7XFxuXFxuICB2ZWMzIHJlYWxOb3JtYWwgPSBzaWduQXhpcyAqIG5vcm1hbDtcXG5cXG4gIGlmKGRvdChyZWFsTm9ybWFsLCBlbmFibGUpID4gMC4wKSB7XFxuICAgIHZlYzMgbWluUmFuZ2UgPSBtaW4oYm91bmRzWzBdLCBib3VuZHNbMV0pO1xcbiAgICB2ZWMzIG1heFJhbmdlID0gbWF4KGJvdW5kc1swXSwgYm91bmRzWzFdKTtcXG4gICAgdmVjMyBuUG9zaXRpb24gPSBtaXgobWluUmFuZ2UsIG1heFJhbmdlLCAwLjUgKiAocG9zaXRpb24gKyAxLjApKTtcXG4gICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChuUG9zaXRpb24sIDEuMCk7XFxuICB9IGVsc2Uge1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XFxuICB9XFxuXFxuICBjb2xvckNoYW5uZWwgPSBhYnMocmVhbE5vcm1hbCk7XFxufVwiXSksdT1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnVuaWZvcm0gdmVjNCBjb2xvcnNbM107XFxuXFxudmFyeWluZyB2ZWMzIGNvbG9yQ2hhbm5lbDtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBnbF9GcmFnQ29sb3IgPSBjb2xvckNoYW5uZWwueCAqIGNvbG9yc1swXSArXFxuICAgICAgICAgICAgICAgICBjb2xvckNoYW5uZWwueSAqIGNvbG9yc1sxXSArXFxuICAgICAgICAgICAgICAgICBjb2xvckNoYW5uZWwueiAqIGNvbG9yc1syXTtcXG59XCJdKTtyLmJnPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQsYyx1LG51bGwsW3tuYW1lOlwicG9zaXRpb25cIix0eXBlOlwidmVjM1wifSx7bmFtZTpcIm5vcm1hbFwiLHR5cGU6XCJ2ZWMzXCJ9XSl9fSx7XCJnbC1zaGFkZXJcIjoyOTgsZ2xzbGlmeTo0MDJ9XSwyMzU6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEscyxsKXt2YXIgdT1uKHQpLGg9aSh0LFt7YnVmZmVyOnUsc2l6ZTozfV0pLGY9byh0KTtmLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MDt2YXIgcD1uZXcgYyh0LGYsdSxoKTtyZXR1cm4gcC51cGRhdGUoZSxyLGEscyxsKSxwfTt2YXIgbj10KFwiZ2wtYnVmZmVyXCIpLGk9dChcImdsLXZhb1wiKSxhPXQoXCJ2ZWN0b3JpemUtdGV4dFwiKSxvPXQoXCIuL3NoYWRlcnNcIikudGV4dCxzPXdpbmRvd3x8ci5nbG9iYWx8fHt9LGw9cy5fX1RFWFRfQ0FDSEV8fHt9O3MuX19URVhUX0NBQ0hFPXt9O2Z1bmN0aW9uIGModCxlLHIsbil7dGhpcy5nbD10LHRoaXMuc2hhZGVyPWUsdGhpcy5idWZmZXI9cix0aGlzLnZhbz1uLHRoaXMudGlja09mZnNldD10aGlzLnRpY2tDb3VudD10aGlzLmxhYmVsT2Zmc2V0PXRoaXMubGFiZWxDb3VudD1udWxsfXZhciB1PWMucHJvdG90eXBlLGg9WzAsMF07dS5iaW5kPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMudmFvLmJpbmQoKSx0aGlzLnNoYWRlci5iaW5kKCk7dmFyIGk9dGhpcy5zaGFkZXIudW5pZm9ybXM7aS5tb2RlbD10LGkudmlldz1lLGkucHJvamVjdGlvbj1yLGkucGl4ZWxTY2FsZT1uLGhbMF09dGhpcy5nbC5kcmF3aW5nQnVmZmVyV2lkdGgsaFsxXT10aGlzLmdsLmRyYXdpbmdCdWZmZXJIZWlnaHQsdGhpcy5zaGFkZXIudW5pZm9ybXMucmVzb2x1dGlvbj1ofSx1LnVuYmluZD1mdW5jdGlvbigpe3RoaXMudmFvLnVuYmluZCgpfSx1LnVwZGF0ZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBvPVtdO2Z1bmN0aW9uIHModCxlLHIsbixpLHMpe3ZhciBjPWxbcl07Y3x8KGM9bFtyXT17fSk7dmFyIHU9Y1tlXTt1fHwodT1jW2VdPWZ1bmN0aW9uKHQsZSl7dHJ5e3JldHVybiBhKHQsZSl9Y2F0Y2goZSl7cmV0dXJuIGNvbnNvbGUud2FybignZXJyb3IgdmVjdG9yaXppbmcgdGV4dDpcIicrdCsnXCIgZXJyb3I6JyxlKSx7Y2VsbHM6W10scG9zaXRpb25zOltdfX19KGUse3RyaWFuZ2xlczohMCxmb250OnIsdGV4dEFsaWduOlwiY2VudGVyXCIsdGV4dEJhc2VsaW5lOlwibWlkZGxlXCIsbGluZVNwYWNpbmc6aSxzdHlsZXRhZ3M6c30pKTtmb3IodmFyIGg9KG58fDEyKS8xMixmPXUucG9zaXRpb25zLHA9dS5jZWxscyxkPTAsZz1wLmxlbmd0aDtkPGc7KytkKWZvcih2YXIgdj1wW2RdLG09MjttPj0wOy0tbSl7dmFyIHk9Zlt2W21dXTtvLnB1c2goaCp5WzBdLC1oKnlbMV0sdCl9fWZvcih2YXIgYz1bMCwwLDBdLHU9WzAsMCwwXSxoPVswLDAsMF0sZj1bMCwwLDBdLHA9e2JyZWFrbGluZXM6ITAsYm9sZHM6ITAsaXRhbGljczohMCxzdWJzY3JpcHRzOiEwLHN1cGVyc2NyaXB0czohMH0sZD0wO2Q8MzsrK2Qpe2hbZF09by5sZW5ndGgvM3wwLHMoLjUqKHRbMF1bZF0rdFsxXVtkXSksZVtkXSxyW2RdLDEyLDEuMjUscCksZltkXT0oby5sZW5ndGgvM3wwKS1oW2RdLGNbZF09by5sZW5ndGgvM3wwO2Zvcih2YXIgZz0wO2c8bltkXS5sZW5ndGg7KytnKW5bZF1bZ10udGV4dCYmcyhuW2RdW2ddLngsbltkXVtnXS50ZXh0LG5bZF1bZ10uZm9udHx8aSxuW2RdW2ddLmZvbnRTaXplfHwxMiwxLjI1LHApO3VbZF09KG8ubGVuZ3RoLzN8MCktY1tkXX10aGlzLmJ1ZmZlci51cGRhdGUobyksdGhpcy50aWNrT2Zmc2V0PWMsdGhpcy50aWNrQ291bnQ9dSx0aGlzLmxhYmVsT2Zmc2V0PWgsdGhpcy5sYWJlbENvdW50PWZ9LHUuZHJhd1RpY2tzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dGhpcy50aWNrQ291bnRbdF0mJih0aGlzLnNoYWRlci51bmlmb3Jtcy5heGlzPWEsdGhpcy5zaGFkZXIudW5pZm9ybXMuY29sb3I9aSx0aGlzLnNoYWRlci51bmlmb3Jtcy5hbmdsZT1yLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjYWxlPWUsdGhpcy5zaGFkZXIudW5pZm9ybXMub2Zmc2V0PW4sdGhpcy5zaGFkZXIudW5pZm9ybXMuYWxpZ25EaXI9byx0aGlzLnNoYWRlci51bmlmb3Jtcy5hbGlnbk9wdD1zLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy50aWNrQ291bnRbdF0sdGhpcy50aWNrT2Zmc2V0W3RdKSl9LHUuZHJhd0xhYmVsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dGhpcy5sYWJlbENvdW50W3RdJiYodGhpcy5zaGFkZXIudW5pZm9ybXMuYXhpcz1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPWksdGhpcy5zaGFkZXIudW5pZm9ybXMuYW5nbGU9cix0aGlzLnNoYWRlci51bmlmb3Jtcy5zY2FsZT1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1uLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFsaWduRGlyPW8sdGhpcy5zaGFkZXIudW5pZm9ybXMuYWxpZ25PcHQ9cyx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLHRoaXMubGFiZWxDb3VudFt0XSx0aGlzLmxhYmVsT2Zmc2V0W3RdKSl9LHUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnZhby5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpfX0pLmNhbGwodGhpcyx0KFwiX3Byb2Nlc3NcIikpfSx7XCIuL3NoYWRlcnNcIjoyMzQsX3Byb2Nlc3M6NDc1LFwiZ2wtYnVmZmVyXCI6MjM4LFwiZ2wtdmFvXCI6MzIwLFwidmVjdG9yaXplLXRleHRcIjo1MzV9XSwyMzY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9dCtcIlwiLG49ci5pbmRleE9mKFwiLlwiKSxpPTA7bj49MCYmKGk9ci5sZW5ndGgtbi0xKTt2YXIgYT1NYXRoLnBvdygxMCxpKSxvPU1hdGgucm91bmQodCplKmEpLHM9bytcIlwiO2lmKHMuaW5kZXhPZihcImVcIik+PTApcmV0dXJuIHM7dmFyIGw9by9hLGM9byVhO288MD8obD0wfC1NYXRoLmNlaWwobCksYz0wfC1jKToobD0wfE1hdGguZmxvb3IobCksY3w9MCk7dmFyIHU9XCJcIitsO2lmKG88MCYmKHU9XCItXCIrdSksaSl7Zm9yKHZhciBoPVwiXCIrYztoLmxlbmd0aDxpOyloPVwiMFwiK2g7cmV0dXJuIHUrXCIuXCIraH1yZXR1cm4gdX1yLmNyZWF0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxpPTA7aTwzOysraSl7Zm9yKHZhciBhPVtdLG89KHRbMF1baV0sdFsxXVtpXSwwKTtvKmVbaV08PXRbMV1baV07KytvKWEucHVzaCh7eDpvKmVbaV0sdGV4dDpuKGVbaV0sbyl9KTtmb3IodmFyIG89LTE7byplW2ldPj10WzBdW2ldOy0tbylhLnB1c2goe3g6byplW2ldLHRleHQ6bihlW2ldLG8pfSk7ci5wdXNoKGEpfXJldHVybiByfSxyLmVxdWFsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjwzOysrcil7aWYodFtyXS5sZW5ndGghPT1lW3JdLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHRbcl0ubGVuZ3RoOysrbil7dmFyIGk9dFtyXVtuXSxhPWVbcl1bbl07aWYoaS54IT09YS54fHxpLnRleHQhPT1hLnRleHR8fGkuZm9udCE9PWEuZm9udHx8aS5mb250Q29sb3IhPT1hLmZvbnRDb2xvcnx8aS5mb250U2l6ZSE9PWEuZm9udFNpemV8fGkuZHghPT1hLmR4fHxpLmR5IT09YS5keSlyZXR1cm4hMX19cmV0dXJuITB9fSx7fV0sMjM3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwsaCl7dmFyIGY9ZS5tb2RlbHx8YyxwPWUudmlld3x8YyxtPWUucHJvamVjdGlvbnx8Yyx5PWUuX29ydGhvfHwhMSx4PXQuYm91bmRzLGI9KGg9aHx8YShmLHAsbSx4LHkpKS5heGlzO28odSxwLGYpLG8odSxtLHUpO2Zvcih2YXIgXz1nLHc9MDt3PDM7Kyt3KV9bd10ubG89MS8wLF9bd10uaGk9LTEvMCxfW3ddLnBpeGVsc1BlckRhdGFVbml0PTEvMDt2YXIgaz1uKHModSx1KSk7cyh1LHUpO2Zvcih2YXIgQT0wO0E8MzsrK0Epe3ZhciBUPShBKzEpJTMsTT0oQSsyKSUzLFM9djt0OmZvcih2YXIgdz0wO3c8MjsrK3cpe3ZhciBFPVtdO2lmKGJbQV08MCE9ISF3KXtTW0FdPXhbd11bQV07Zm9yKHZhciBDPTA7QzwyOysrQyl7U1tUXT14W0Ned11bVF07Zm9yKHZhciBMPTA7TDwyOysrTClTW01dPXhbTF5DXnddW01dLEUucHVzaChTLnNsaWNlKCkpfWZvcih2YXIgej15PzU6NCxDPXo7Qz09PXo7KytDKXtpZigwPT09RS5sZW5ndGgpY29udGludWUgdDtFPWkucG9zaXRpdmUoRSxrW0NdKX1mb3IodmFyIEM9MDtDPEUubGVuZ3RoOysrQylmb3IodmFyIE09RVtDXSxPPWQodix1LE0scixsKSxMPTA7TDwzOysrTClfW0xdLmxvPU1hdGgubWluKF9bTF0ubG8sTVtMXSksX1tMXS5oaT1NYXRoLm1heChfW0xdLmhpLE1bTF0pLEwhPT1BJiYoX1tMXS5waXhlbHNQZXJEYXRhVW5pdD1NYXRoLm1pbihfW0xdLnBpeGVsc1BlckRhdGFVbml0LE1hdGguYWJzKE9bTF0pKSl9fX1yZXR1cm4gX307dmFyIG49dChcImV4dHJhY3QtZnJ1c3R1bS1wbGFuZXNcIiksaT10KFwic3BsaXQtcG9seWdvblwiKSxhPXQoXCIuL2xpYi9jdWJlLmpzXCIpLG89dChcImdsLW1hdDQvbXVsdGlwbHlcIikscz10KFwiZ2wtbWF0NC90cmFuc3Bvc2VcIiksbD10KFwiZ2wtdmVjNC90cmFuc2Zvcm1NYXQ0XCIpLGM9bmV3IEZsb2F0MzJBcnJheShbMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0pLHU9bmV3IEZsb2F0MzJBcnJheSgxNik7ZnVuY3Rpb24gaCh0LGUscil7dGhpcy5sbz10LHRoaXMuaGk9ZSx0aGlzLnBpeGVsc1BlckRhdGFVbml0PXJ9dmFyIGY9WzAsMCwwLDFdLHA9WzAsMCwwLDFdO2Z1bmN0aW9uIGQodCxlLHIsbixpKXtmb3IodmFyIGE9MDthPDM7KythKXtmb3IodmFyIG89ZixzPXAsYz0wO2M8MzsrK2Mpc1tjXT1vW2NdPXJbY107c1szXT1vWzNdPTEsc1thXSs9MSxsKHMscyxlKSxzWzNdPDAmJih0W2FdPTEvMCksb1thXS09MSxsKG8sbyxlKSxvWzNdPDAmJih0W2FdPTEvMCk7dmFyIHU9KG9bMF0vb1szXS1zWzBdL3NbM10pKm4saD0ob1sxXS9vWzNdLXNbMV0vc1szXSkqaTt0W2FdPS4yNSpNYXRoLnNxcnQodSp1K2gqaCl9cmV0dXJuIHR9dmFyIGc9W25ldyBoKDEvMCwtMS8wLDEvMCksbmV3IGgoMS8wLC0xLzAsMS8wKSxuZXcgaCgxLzAsLTEvMCwxLzApXSx2PVswLDAsMF19LHtcIi4vbGliL2N1YmUuanNcIjoyMzIsXCJleHRyYWN0LWZydXN0dW0tcGxhbmVzXCI6MjIxLFwiZ2wtbWF0NC9tdWx0aXBseVwiOjI2NCxcImdsLW1hdDQvdHJhbnNwb3NlXCI6MjczLFwiZ2wtdmVjNC90cmFuc2Zvcm1NYXQ0XCI6MzkxLFwic3BsaXQtcG9seWdvblwiOjUxMn1dLDIzODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJ0eXBlZGFycmF5LXBvb2xcIiksaT10KFwibmRhcnJheS1vcHNcIiksYT10KFwibmRhcnJheVwiKSxvPVtcInVpbnQ4XCIsXCJ1aW50OF9jbGFtcGVkXCIsXCJ1aW50MTZcIixcInVpbnQzMlwiLFwiaW50OFwiLFwiaW50MTZcIixcImludDMyXCIsXCJmbG9hdDMyXCJdO2Z1bmN0aW9uIHModCxlLHIsbixpKXt0aGlzLmdsPXQsdGhpcy50eXBlPWUsdGhpcy5oYW5kbGU9cix0aGlzLmxlbmd0aD1uLHRoaXMudXNhZ2U9aX12YXIgbD1zLnByb3RvdHlwZTtmdW5jdGlvbiBjKHQsZSxyLG4saSxhKXt2YXIgbz1pLmxlbmd0aCppLkJZVEVTX1BFUl9FTEVNRU5UO2lmKGE8MClyZXR1cm4gdC5idWZmZXJEYXRhKGUsaSxuKSxvO2lmKG8rYT5yKXRocm93IG5ldyBFcnJvcihcImdsLWJ1ZmZlcjogSWYgcmVzaXppbmcgYnVmZmVyLCBtdXN0IG5vdCBzcGVjaWZ5IG9mZnNldFwiKTtyZXR1cm4gdC5idWZmZXJTdWJEYXRhKGUsYSxpKSxyfWZ1bmN0aW9uIHUodCxlKXtmb3IodmFyIHI9bi5tYWxsb2ModC5sZW5ndGgsZSksaT10Lmxlbmd0aCxhPTA7YTxpOysrYSlyW2FdPXRbYV07cmV0dXJuIHJ9bC5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5nbC5iaW5kQnVmZmVyKHRoaXMudHlwZSx0aGlzLmhhbmRsZSl9LGwudW5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5nbC5iaW5kQnVmZmVyKHRoaXMudHlwZSxudWxsKX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5oYW5kbGUpfSxsLnVwZGF0ZT1mdW5jdGlvbih0LGUpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlJiYoZT0tMSksdGhpcy5iaW5kKCksXCJvYmplY3RcIj09dHlwZW9mIHQmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiB0LnNoYXBlKXt2YXIgcj10LmR0eXBlO2lmKG8uaW5kZXhPZihyKTwwJiYocj1cImZsb2F0MzJcIiksdGhpcy50eXBlPT09dGhpcy5nbC5FTEVNRU5UX0FSUkFZX0JVRkZFUilyPWdsLmdldEV4dGVuc2lvbihcIk9FU19lbGVtZW50X2luZGV4X3VpbnRcIikmJlwidWludDE2XCIhPT1yP1widWludDMyXCI6XCJ1aW50MTZcIjtpZihyPT09dC5kdHlwZSYmZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MSxuPWUubGVuZ3RoLTE7bj49MDstLW4pe2lmKGVbbl0hPT1yKXJldHVybiExO3IqPXRbbl19cmV0dXJuITB9KHQuc2hhcGUsdC5zdHJpZGUpKTA9PT10Lm9mZnNldCYmdC5kYXRhLmxlbmd0aD09PXQuc2hhcGVbMF0/dGhpcy5sZW5ndGg9Yyh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLHQuZGF0YSxlKTp0aGlzLmxlbmd0aD1jKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsdC5kYXRhLnN1YmFycmF5KHQub2Zmc2V0LHQuc2hhcGVbMF0pLGUpO2Vsc2V7dmFyIHM9bi5tYWxsb2ModC5zaXplLHIpLGw9YShzLHQuc2hhcGUpO2kuYXNzaWduKGwsdCksdGhpcy5sZW5ndGg9Yyh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLGU8MD9zOnMuc3ViYXJyYXkoMCx0LnNpemUpLGUpLG4uZnJlZShzKX19ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgaDtoPXRoaXMudHlwZT09PXRoaXMuZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVI/dSh0LFwidWludDE2XCIpOnUodCxcImZsb2F0MzJcIiksdGhpcy5sZW5ndGg9Yyh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLGU8MD9oOmguc3ViYXJyYXkoMCx0Lmxlbmd0aCksZSksbi5mcmVlKGgpfWVsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIHQmJlwibnVtYmVyXCI9PXR5cGVvZiB0Lmxlbmd0aCl0aGlzLmxlbmd0aD1jKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsdCxlKTtlbHNle2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0JiZ2b2lkIDAhPT10KXRocm93IG5ldyBFcnJvcihcImdsLWJ1ZmZlcjogSW52YWxpZCBkYXRhIHR5cGVcIik7aWYoZT49MCl0aHJvdyBuZXcgRXJyb3IoXCJnbC1idWZmZXI6IENhbm5vdCBzcGVjaWZ5IG9mZnNldCB3aGVuIHJlc2l6aW5nIGJ1ZmZlclwiKTsodHw9MCk8PTAmJih0PTEpLHRoaXMuZ2wuYnVmZmVyRGF0YSh0aGlzLnR5cGUsMHx0LHRoaXMudXNhZ2UpLHRoaXMubGVuZ3RoPXR9fSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7aWYocj1yfHx0LkFSUkFZX0JVRkZFUixuPW58fHQuRFlOQU1JQ19EUkFXLHIhPT10LkFSUkFZX0JVRkZFUiYmciE9PXQuRUxFTUVOVF9BUlJBWV9CVUZGRVIpdGhyb3cgbmV3IEVycm9yKFwiZ2wtYnVmZmVyOiBJbnZhbGlkIHR5cGUgZm9yIHdlYmdsIGJ1ZmZlciwgbXVzdCBiZSBlaXRoZXIgZ2wuQVJSQVlfQlVGRkVSIG9yIGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSXCIpO2lmKG4hPT10LkRZTkFNSUNfRFJBVyYmbiE9PXQuU1RBVElDX0RSQVcmJm4hPT10LlNUUkVBTV9EUkFXKXRocm93IG5ldyBFcnJvcihcImdsLWJ1ZmZlcjogSW52YWxpZCB1c2FnZSBmb3IgYnVmZmVyLCBtdXN0IGJlIGVpdGhlciBnbC5EWU5BTUlDX0RSQVcsIGdsLlNUQVRJQ19EUkFXIG9yIGdsLlNUUkVBTV9EUkFXXCIpO3ZhciBpPXQuY3JlYXRlQnVmZmVyKCksYT1uZXcgcyh0LHIsaSwwLG4pO3JldHVybiBhLnVwZGF0ZShlKSxhfX0se25kYXJyYXk6NDQzLFwibmRhcnJheS1vcHNcIjo0MzcsXCJ0eXBlZGFycmF5LXBvb2xcIjo1MzB9XSwyMzk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2wtdmVjM1wiKSxpPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspaWYodFtyXT49ZSlyZXR1cm4gci0xO3JldHVybiByfSxhPW4uY3JlYXRlKCksbz1uLmNyZWF0ZSgpLHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PGU/ZTp0PnI/cjp0fSxsPWZ1bmN0aW9uKHQsZSxyLGwpe3ZhciBjPXRbMF0sdT10WzFdLGg9dFsyXSxmPXJbMF0ubGVuZ3RoLHA9clsxXS5sZW5ndGgsZD1yWzJdLmxlbmd0aCxnPWkoclswXSxjKSx2PWkoclsxXSx1KSxtPWkoclsyXSxoKSx5PWcrMSx4PXYrMSxiPW0rMTtpZihsJiYoZz1zKGcsMCxmLTEpLHk9cyh5LDAsZi0xKSx2PXModiwwLHAtMSkseD1zKHgsMCxwLTEpLG09cyhtLDAsZC0xKSxiPXMoYiwwLGQtMSkpLGc8MHx8djwwfHxtPDB8fHk+PWZ8fHg+PXB8fGI+PWQpcmV0dXJuIG4uY3JlYXRlKCk7dmFyIF89KGMtclswXVtnXSkvKHJbMF1beV0tclswXVtnXSksdz0odS1yWzFdW3ZdKS8oclsxXVt4XS1yWzFdW3ZdKSxrPShoLXJbMl1bbV0pLyhyWzJdW2JdLXJbMl1bbV0pOyhfPDB8fF8+MXx8aXNOYU4oXykpJiYoXz0wKSwodzwwfHx3PjF8fGlzTmFOKHcpKSYmKHc9MCksKGs8MHx8az4xfHxpc05hTihrKSkmJihrPTApO3ZhciBBPW0qZipwLFQ9YipmKnAsTT12KmYsUz14KmYsRT1nLEM9eSxMPWVbTStBK0VdLHo9ZVtNK0ErQ10sTz1lW1MrQStFXSxJPWVbUytBK0NdLEQ9ZVtNK1QrRV0sUD1lW00rVCtDXSxSPWVbUytUK0VdLEY9ZVtTK1QrQ10sQj1uLmNyZWF0ZSgpO3JldHVybiBuLmxlcnAoQixMLHosXyksbi5sZXJwKGEsTyxJLF8pLG4ubGVycChCLEIsYSx3KSxuLmxlcnAoYSxELFAsXyksbi5sZXJwKG8sUixGLF8pLG4ubGVycChhLGEsbyx3KSxuLmxlcnAoQixCLGEsayksQn07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI7cj10LnBvc2l0aW9ucz90LnBvc2l0aW9uczpmdW5jdGlvbih0KXtmb3IodmFyIGU9dFswXSxyPXRbMV0sbj10WzJdLGk9W10sYT0wO2E8bi5sZW5ndGg7YSsrKWZvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKWZvcih2YXIgcz0wO3M8ZS5sZW5ndGg7cysrKWkucHVzaChbblthXSxyW29dLGVbc11dKTtyZXR1cm4gaX0odC5tZXNoZ3JpZCk7dmFyIGk9dC5tZXNoZ3JpZCxhPXQudmVjdG9ycyxvPXtwb3NpdGlvbnM6W10sdmVydGV4SW50ZW5zaXR5OltdLHZlcnRleEludGVuc2l0eUJvdW5kczp0LnZlcnRleEludGVuc2l0eUJvdW5kcyx2ZXJ0ZXhOb3JtYWxzOltdLHZlY3RvcnM6W10sY2VsbHM6W10sY29uZU9mZnNldDp0LmNvbmVPZmZzZXQsY29sb3JtYXA6dC5jb2xvcm1hcH07aWYoMD09PXQucG9zaXRpb25zLmxlbmd0aClyZXR1cm4gZSYmKGVbMF09WzAsMCwwXSxlWzFdPVswLDAsMF0pLG87Zm9yKHZhciBzPTAsYz0xLzAsdT0tMS8wLGg9MS8wLGY9LTEvMCxwPTEvMCxkPS0xLzAsZz1udWxsLHY9bnVsbCxtPVtdLHk9MS8wLHg9MDt4PHIubGVuZ3RoO3grKyl7dmFyIGIsXz1yW3hdO2M9TWF0aC5taW4oX1swXSxjKSx1PU1hdGgubWF4KF9bMF0sdSksaD1NYXRoLm1pbihfWzFdLGgpLGY9TWF0aC5tYXgoX1sxXSxmKSxwPU1hdGgubWluKF9bMl0scCksZD1NYXRoLm1heChfWzJdLGQpLGI9aT9sKF8sYSxpLCEwKTphW3hdLG4ubGVuZ3RoKGIpPnMmJihzPW4ubGVuZ3RoKGIpKSx4JiYoeT1NYXRoLm1pbih5LDIqbi5kaXN0YW5jZShnLF8pLyhuLmxlbmd0aCh2KStuLmxlbmd0aChiKSkpKSxnPV8sdj1iLG0ucHVzaChiKX12YXIgdz1bYyxoLHBdLGs9W3UsZixkXTtlJiYoZVswXT13LGVbMV09ayksMD09PXMmJihzPTEpO3ZhciBBPTEvcztpc0Zpbml0ZSh5KSYmIWlzTmFOKHkpfHwoeT0xKSxvLnZlY3RvclNjYWxlPXk7dmFyIFQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPW4uY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PXQmJm4uc2V0KGksdCxlLHIpLGl9KDAsMSwwKSxNPXQuY29uZVNpemV8fC41O3QuYWJzb2x1dGVDb25lU2l6ZSYmKE09dC5hYnNvbHV0ZUNvbmVTaXplKkEpLG8uY29uZVNjYWxlPU07eD0wO2Zvcih2YXIgUz0wO3g8ci5sZW5ndGg7eCsrKWZvcih2YXIgRT0oXz1yW3hdKVswXSxDPV9bMV0sTD1fWzJdLHo9bVt4XSxPPW4ubGVuZ3RoKHopKkEsST0wO0k8ODtJKyspe28ucG9zaXRpb25zLnB1c2goW0UsQyxMLFMrK10pLG8ucG9zaXRpb25zLnB1c2goW0UsQyxMLFMrK10pLG8ucG9zaXRpb25zLnB1c2goW0UsQyxMLFMrK10pLG8ucG9zaXRpb25zLnB1c2goW0UsQyxMLFMrK10pLG8ucG9zaXRpb25zLnB1c2goW0UsQyxMLFMrK10pLG8ucG9zaXRpb25zLnB1c2goW0UsQyxMLFMrK10pLG8udmVjdG9ycy5wdXNoKHopLG8udmVjdG9ycy5wdXNoKHopLG8udmVjdG9ycy5wdXNoKHopLG8udmVjdG9ycy5wdXNoKHopLG8udmVjdG9ycy5wdXNoKHopLG8udmVjdG9ycy5wdXNoKHopLG8udmVydGV4SW50ZW5zaXR5LnB1c2goTyxPLE8pLG8udmVydGV4SW50ZW5zaXR5LnB1c2goTyxPLE8pLG8udmVydGV4Tm9ybWFscy5wdXNoKFQsVCxUKSxvLnZlcnRleE5vcm1hbHMucHVzaChULFQsVCk7dmFyIEQ9by5wb3NpdGlvbnMubGVuZ3RoO28uY2VsbHMucHVzaChbRC02LEQtNSxELTRdLFtELTMsRC0yLEQtMV0pfXJldHVybiBvfSxlLmV4cG9ydHMuY3JlYXRlQ29uZU1lc2g9dChcIi4vbGliL2NvbmVtZXNoXCIpfSx7XCIuL2xpYi9jb25lbWVzaFwiOjI0MCxcImdsLXZlYzNcIjozMzl9XSwyNDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2wtc2hhZGVyXCIpLGk9dChcImdsLWJ1ZmZlclwiKSxhPXQoXCJnbC12YW9cIiksbz10KFwiZ2wtdGV4dHVyZTJkXCIpLHM9dChcIm5vcm1hbHNcIiksbD10KFwiZ2wtbWF0NC9tdWx0aXBseVwiKSxjPXQoXCJnbC1tYXQ0L2ludmVydFwiKSx1PXQoXCJuZGFycmF5XCIpLGg9dChcImNvbG9ybWFwXCIpLGY9dChcInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyXCIpLHA9dChcInR5cGVkYXJyYXktcG9vbFwiKSxkPXQoXCIuL3NoYWRlcnNcIiksZz1kLm1lc2hTaGFkZXIsdj1kLnBpY2tTaGFkZXIsbT1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24geSh0LGUscixuLGksYSxvLHMsbCxjLHUsaCxmLHAsZCxnLHYseSx4LGIsXyx3LGssQSl7dGhpcy5nbD10LHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuY2VsbHM9W10sdGhpcy5wb3NpdGlvbnM9W10sdGhpcy5pbnRlbnNpdHk9W10sdGhpcy50ZXh0dXJlPWUsdGhpcy5kaXJ0eT0hMCx0aGlzLnRyaVNoYWRlcj1yLHRoaXMucGlja1NoYWRlcj1uLHRoaXMudHJpYW5nbGVQb3NpdGlvbnM9aSx0aGlzLnRyaWFuZ2xlVmVjdG9ycz1hLHRoaXMudHJpYW5nbGVDb2xvcnM9cyx0aGlzLnRyaWFuZ2xlTm9ybWFscz1jLHRoaXMudHJpYW5nbGVVVnM9bCx0aGlzLnRyaWFuZ2xlSWRzPW8sdGhpcy50cmlhbmdsZVZBTz11LHRoaXMudHJpYW5nbGVDb3VudD0wLHRoaXMubGluZVdpZHRoPTEsdGhpcy5lZGdlUG9zaXRpb25zPWgsdGhpcy5lZGdlQ29sb3JzPXAsdGhpcy5lZGdlVVZzPWQsdGhpcy5lZGdlSWRzPWYsdGhpcy5lZGdlVkFPPWcsdGhpcy5lZGdlQ291bnQ9MCx0aGlzLnBvaW50UG9zaXRpb25zPXYsdGhpcy5wb2ludENvbG9ycz14LHRoaXMucG9pbnRVVnM9Yix0aGlzLnBvaW50U2l6ZXM9Xyx0aGlzLnBvaW50SWRzPXksdGhpcy5wb2ludFZBTz13LHRoaXMucG9pbnRDb3VudD0wLHRoaXMuY29udG91ckxpbmVXaWR0aD0xLHRoaXMuY29udG91clBvc2l0aW9ucz1rLHRoaXMuY29udG91clZBTz1BLHRoaXMuY29udG91ckNvdW50PTAsdGhpcy5jb250b3VyQ29sb3I9WzAsMCwwXSx0aGlzLmNvbnRvdXJFbmFibGU9ITAsdGhpcy5waWNrSWQ9MSx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5saWdodFBvc2l0aW9uPVsxZTUsMWU1LDBdLHRoaXMuYW1iaWVudExpZ2h0PS44LHRoaXMuZGlmZnVzZUxpZ2h0PS44LHRoaXMuc3BlY3VsYXJMaWdodD0yLHRoaXMucm91Z2huZXNzPS41LHRoaXMuZnJlc25lbD0xLjUsdGhpcy5vcGFjaXR5PTEsdGhpcy5jb25lU2NhbGU9Mix0aGlzLnZlY3RvclNjYWxlPTEsdGhpcy5jb25lT2Zmc2V0PS4yNSx0aGlzLl9tb2RlbD1tLHRoaXMuX3ZpZXc9bSx0aGlzLl9wcm9qZWN0aW9uPW0sdGhpcy5fcmVzb2x1dGlvbj1bMSwxXX12YXIgeD15LnByb3RvdHlwZTtmdW5jdGlvbiBiKHQpe3ZhciBlPW4odCx2LnZlcnRleCx2LmZyYWdtZW50LG51bGwsdi5hdHRyaWJ1dGVzKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmlkLmxvY2F0aW9uPTEsZS5hdHRyaWJ1dGVzLnZlY3Rvci5sb2NhdGlvbj01LGV9eC5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk+PTF9LHguaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk8MX0seC5waWNrU2xvdHM9MSx4LnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LHguaGlnaGxpZ2h0PWZ1bmN0aW9uKHQpe2lmKHQmJnRoaXMuY29udG91ckVuYWJsZSl7Zm9yKHZhciBlPWYodGhpcy5jZWxscyx0aGlzLmludGVuc2l0eSx0LmludGVuc2l0eSkscj1lLmNlbGxzLG49ZS52ZXJ0ZXhJZHMsaT1lLnZlcnRleFdlaWdodHMsYT1yLmxlbmd0aCxvPXAubWFsbG9jRmxvYXQzMig2KmEpLHM9MCxsPTA7bDxhOysrbClmb3IodmFyIGM9cltsXSx1PTA7dTwyOysrdSl7dmFyIGg9Y1swXTsyPT09Yy5sZW5ndGgmJihoPWNbdV0pO2Zvcih2YXIgZD1uW2hdWzBdLGc9bltoXVsxXSx2PWlbaF0sbT0xLXYseT10aGlzLnBvc2l0aW9uc1tkXSx4PXRoaXMucG9zaXRpb25zW2ddLGI9MDtiPDM7KytiKW9bcysrXT12KnlbYl0rbSp4W2JdfXRoaXMuY29udG91ckNvdW50PXMvM3wwLHRoaXMuY29udG91clBvc2l0aW9ucy51cGRhdGUoby5zdWJhcnJheSgwLHMpKSxwLmZyZWUobyl9ZWxzZSB0aGlzLmNvbnRvdXJDb3VudD0wfSx4LnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7dGhpcy5kaXJ0eT0hMCxcImNvbnRvdXJFbmFibGVcImluIHQmJih0aGlzLmNvbnRvdXJFbmFibGU9dC5jb250b3VyRW5hYmxlKSxcImNvbnRvdXJDb2xvclwiaW4gdCYmKHRoaXMuY29udG91ckNvbG9yPXQuY29udG91ckNvbG9yKSxcImxpbmVXaWR0aFwiaW4gdCYmKHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRoKSxcImxpZ2h0UG9zaXRpb25cImluIHQmJih0aGlzLmxpZ2h0UG9zaXRpb249dC5saWdodFBvc2l0aW9uKSxcIm9wYWNpdHlcImluIHQmJih0aGlzLm9wYWNpdHk9dC5vcGFjaXR5KSxcImFtYmllbnRcImluIHQmJih0aGlzLmFtYmllbnRMaWdodD10LmFtYmllbnQpLFwiZGlmZnVzZVwiaW4gdCYmKHRoaXMuZGlmZnVzZUxpZ2h0PXQuZGlmZnVzZSksXCJzcGVjdWxhclwiaW4gdCYmKHRoaXMuc3BlY3VsYXJMaWdodD10LnNwZWN1bGFyKSxcInJvdWdobmVzc1wiaW4gdCYmKHRoaXMucm91Z2huZXNzPXQucm91Z2huZXNzKSxcImZyZXNuZWxcImluIHQmJih0aGlzLmZyZXNuZWw9dC5mcmVzbmVsKSx2b2lkIDAhPT10LnZlY3RvclNjYWxlJiYodGhpcy52ZWN0b3JTY2FsZT10LnZlY3RvclNjYWxlKSx2b2lkIDAhPT10LmNvbmVTY2FsZSYmKHRoaXMuY29uZVNjYWxlPXQuY29uZVNjYWxlKSx2b2lkIDAhPT10LmNvbmVPZmZzZXQmJih0aGlzLmNvbmVPZmZzZXQ9dC5jb25lT2Zmc2V0KSx0LnRleHR1cmU/KHRoaXMudGV4dHVyZS5kaXNwb3NlKCksdGhpcy50ZXh0dXJlPW8oZSx0LnRleHR1cmUpKTp0LmNvbG9ybWFwJiYodGhpcy50ZXh0dXJlLnNoYXBlPVsyNTYsMjU2XSx0aGlzLnRleHR1cmUubWluRmlsdGVyPWUuTElORUFSX01JUE1BUF9MSU5FQVIsdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcj1lLkxJTkVBUix0aGlzLnRleHR1cmUuc2V0UGl4ZWxzKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1oKHtjb2xvcm1hcDp0LG5zaGFkZXM6MjU2LGZvcm1hdDpcInJnYmFcIn0pLHI9bmV3IFVpbnQ4QXJyYXkoMTAyNCksbj0wO248MjU2Oysrbil7Zm9yKHZhciBpPWVbbl0sYT0wO2E8MzsrK2Epcls0Km4rYV09aVthXTtyWzQqbiszXT0yNTUqaVszXX1yZXR1cm4gdShyLFsyNTYsMjU2LDRdLFs0LDAsMV0pfSh0LmNvbG9ybWFwKSksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwKCkpO3ZhciByPXQuY2VsbHMsbj10LnBvc2l0aW9ucyxpPXQudmVjdG9ycztpZihuJiZyJiZpKXt2YXIgYT1bXSxsPVtdLGM9W10sZj1bXSxwPVtdLGQ9W10sZz1bXSx2PVtdLG09W10seT1bXSx4PVtdLGI9W10sXz1bXSx3PVtdLGs9W107dGhpcy5jZWxscz1yLHRoaXMucG9zaXRpb25zPW47dmFyIEE9dC52ZXJ0ZXhOb3JtYWxzLFQ9dC5jZWxsTm9ybWFscyxNPXZvaWQgMD09PXQudmVydGV4Tm9ybWFsc0Vwc2lsb24/MWUtNjp0LnZlcnRleE5vcm1hbHNFcHNpbG9uLFM9dm9pZCAwPT09dC5mYWNlTm9ybWFsc0Vwc2lsb24/MWUtNjp0LmZhY2VOb3JtYWxzRXBzaWxvbjt0LnVzZUZhY2V0Tm9ybWFscyYmIVQmJihUPXMuZmFjZU5vcm1hbHMocixuLFMpKSxUfHxBfHwoQT1zLnZlcnRleE5vcm1hbHMocixuLE0pKTt2YXIgRT10LnZlcnRleENvbG9ycyxDPXQuY2VsbENvbG9ycyxMPXQubWVzaENvbG9yfHxbMSwxLDEsMV0sej10LnZlcnRleFVWcyxPPXQudmVydGV4SW50ZW5zaXR5LEk9dC5jZWxsVVZzLEQ9dC5jZWxsSW50ZW5zaXR5LFA9MS8wLFI9LTEvMDtpZigheiYmIUkpaWYoTylpZih0LnZlcnRleEludGVuc2l0eUJvdW5kcylQPSt0LnZlcnRleEludGVuc2l0eUJvdW5kc1swXSxSPSt0LnZlcnRleEludGVuc2l0eUJvdW5kc1sxXTtlbHNlIGZvcih2YXIgRj0wO0Y8Ty5sZW5ndGg7KytGKXt2YXIgQj1PW0ZdO1A9TWF0aC5taW4oUCxCKSxSPU1hdGgubWF4KFIsQil9ZWxzZSBpZihEKWZvcihGPTA7RjxELmxlbmd0aDsrK0Ype0I9RFtGXTtQPU1hdGgubWluKFAsQiksUj1NYXRoLm1heChSLEIpfWVsc2UgZm9yKEY9MDtGPG4ubGVuZ3RoOysrRil7Qj1uW0ZdWzJdO1A9TWF0aC5taW4oUCxCKSxSPU1hdGgubWF4KFIsQil9dGhpcy5pbnRlbnNpdHk9T3x8KEQ/ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpbltpXT0wO3ZhciBhPXQubGVuZ3RoO2ZvcihpPTA7aTxhOysraSlmb3IodmFyIG89dFtpXSxzPTA7czxvLmxlbmd0aDsrK3MpbltvW3NdXT1yW2ldO3JldHVybiBufShyLG4ubGVuZ3RoLEQpOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPXRbbl1bMl07cmV0dXJuIHJ9KG4pKTt2YXIgTj10LnBvaW50U2l6ZXMsaj10LnBvaW50U2l6ZXx8MTt0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXTtmb3IoRj0wO0Y8bi5sZW5ndGg7KytGKWZvcih2YXIgVj1uW0ZdLFU9MDtVPDM7KytVKSFpc05hTihWW1VdKSYmaXNGaW5pdGUoVltVXSkmJih0aGlzLmJvdW5kc1swXVtVXT1NYXRoLm1pbih0aGlzLmJvdW5kc1swXVtVXSxWW1VdKSx0aGlzLmJvdW5kc1sxXVtVXT1NYXRoLm1heCh0aGlzLmJvdW5kc1sxXVtVXSxWW1VdKSk7dmFyIHE9MCxIPTAsRz0wO3Q6Zm9yKEY9MDtGPHIubGVuZ3RoOysrRil7dmFyIFk9cltGXTtzd2l0Y2goWS5sZW5ndGgpe2Nhc2UgMTpmb3IoVj1uW1g9WVswXV0sVT0wO1U8MzsrK1UpaWYoaXNOYU4oVltVXSl8fCFpc0Zpbml0ZShWW1VdKSljb250aW51ZSB0O3gucHVzaChWWzBdLFZbMV0sVlsyXSxWWzNdKSwzPT09KFo9RT9FW1hdOkM/Q1tGXTpMKS5sZW5ndGg/Yi5wdXNoKFpbMF0sWlsxXSxaWzJdLDEpOmIucHVzaChaWzBdLFpbMV0sWlsyXSxaWzNdKSwkPXo/eltYXTpPP1soT1tYXS1QKS8oUi1QKSwwXTpJP0lbRl06RD9bKERbRl0tUCkvKFItUCksMF06WyhWWzJdLVApLyhSLVApLDBdLF8ucHVzaCgkWzBdLCRbMV0pLE4/dy5wdXNoKE5bWF0pOncucHVzaChqKSxrLnB1c2goRiksRys9MTticmVhaztjYXNlIDI6Zm9yKFU9MDtVPDI7KytVKXtWPW5bWD1ZW1VdXTtmb3IodmFyIFc9MDtXPDM7KytXKWlmKGlzTmFOKFZbV10pfHwhaXNGaW5pdGUoVltXXSkpY29udGludWUgdH1mb3IoVT0wO1U8MjsrK1Upe1Y9bltYPVlbVV1dO2cucHVzaChWWzBdLFZbMV0sVlsyXSksMz09PShaPUU/RVtYXTpDP0NbRl06TCkubGVuZ3RoP3YucHVzaChaWzBdLFpbMV0sWlsyXSwxKTp2LnB1c2goWlswXSxaWzFdLFpbMl0sWlszXSksJD16P3pbWF06Tz9bKE9bWF0tUCkvKFItUCksMF06ST9JW0ZdOkQ/WyhEW0ZdLVApLyhSLVApLDBdOlsoVlsyXS1QKS8oUi1QKSwwXSxtLnB1c2goJFswXSwkWzFdKSx5LnB1c2goRil9SCs9MTticmVhaztjYXNlIDM6Zm9yKFU9MDtVPDM7KytVKWZvcihWPW5bWD1ZW1VdXSxXPTA7VzwzOysrVylpZihpc05hTihWW1ddKXx8IWlzRmluaXRlKFZbV10pKWNvbnRpbnVlIHQ7Zm9yKFU9MDtVPDM7KytVKXt2YXIgWDtWPW5bWD1ZWzItVV1dO2EucHVzaChWWzBdLFZbMV0sVlsyXSxWWzNdKTt2YXIgWiwkLEosSz1pW1hdO2wucHVzaChLWzBdLEtbMV0sS1syXSksMz09PShaPUU/RVtYXTpDP0NbRl06TCkubGVuZ3RoP2MucHVzaChaWzBdLFpbMV0sWlsyXSwxKTpjLnB1c2goWlswXSxaWzFdLFpbMl0sWlszXSksJD16P3pbWF06Tz9bKE9bWF0tUCkvKFItUCksMF06ST9JW0ZdOkQ/WyhEW0ZdLVApLyhSLVApLDBdOlsoVlsyXS1QKS8oUi1QKSwwXSxwLnB1c2goJFswXSwkWzFdKSxKPUE/QVtYXTpUW0ZdLGYucHVzaChKWzBdLEpbMV0sSlsyXSksZC5wdXNoKEYpfXErPTF9fXRoaXMucG9pbnRDb3VudD1HLHRoaXMuZWRnZUNvdW50PUgsdGhpcy50cmlhbmdsZUNvdW50PXEsdGhpcy5wb2ludFBvc2l0aW9ucy51cGRhdGUoeCksdGhpcy5wb2ludENvbG9ycy51cGRhdGUoYiksdGhpcy5wb2ludFVWcy51cGRhdGUoXyksdGhpcy5wb2ludFNpemVzLnVwZGF0ZSh3KSx0aGlzLnBvaW50SWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoaykpLHRoaXMuZWRnZVBvc2l0aW9ucy51cGRhdGUoZyksdGhpcy5lZGdlQ29sb3JzLnVwZGF0ZSh2KSx0aGlzLmVkZ2VVVnMudXBkYXRlKG0pLHRoaXMuZWRnZUlkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KHkpKSx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLnVwZGF0ZShhKSx0aGlzLnRyaWFuZ2xlVmVjdG9ycy51cGRhdGUobCksdGhpcy50cmlhbmdsZUNvbG9ycy51cGRhdGUoYyksdGhpcy50cmlhbmdsZVVWcy51cGRhdGUocCksdGhpcy50cmlhbmdsZU5vcm1hbHMudXBkYXRlKGYpLHRoaXMudHJpYW5nbGVJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheShkKSl9fSx4LmRyYXdUcmFuc3BhcmVudD14LmRyYXc9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fG0sbj10LnZpZXd8fG0saT10LnByb2plY3Rpb258fG0sYT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylhWzBdW29dPU1hdGgubWF4KGFbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxhWzFdW29dPU1hdGgubWluKGFbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt2YXIgcz17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGludmVyc2VNb2RlbDptLnNsaWNlKCksY2xpcEJvdW5kczphLGthbWJpZW50OnRoaXMuYW1iaWVudExpZ2h0LGtkaWZmdXNlOnRoaXMuZGlmZnVzZUxpZ2h0LGtzcGVjdWxhcjp0aGlzLnNwZWN1bGFyTGlnaHQscm91Z2huZXNzOnRoaXMucm91Z2huZXNzLGZyZXNuZWw6dGhpcy5mcmVzbmVsLGV5ZVBvc2l0aW9uOlswLDAsMF0sbGlnaHRQb3NpdGlvbjpbMCwwLDBdLG9wYWNpdHk6dGhpcy5vcGFjaXR5LHZlY3RvclNjYWxlOnRoaXMudmVjdG9yU2NhbGUsY29uZVNjYWxlOnRoaXMuY29uZVNjYWxlLGNvbmVPZmZzZXQ6dGhpcy5jb25lT2Zmc2V0LGNvbnRvdXJDb2xvcjp0aGlzLmNvbnRvdXJDb2xvcix0ZXh0dXJlOjB9O3MuaW52ZXJzZU1vZGVsPWMocy5pbnZlcnNlTW9kZWwscy5tb2RlbCksZS5kaXNhYmxlKGUuQ1VMTF9GQUNFKSx0aGlzLnRleHR1cmUuYmluZCgwKTt2YXIgdT1uZXcgQXJyYXkoMTYpO2wodSxzLnZpZXcscy5tb2RlbCksbCh1LHMucHJvamVjdGlvbix1KSxjKHUsdSk7Zm9yKG89MDtvPDM7KytvKXMuZXllUG9zaXRpb25bb109dVsxMitvXS91WzE1XTt2YXIgaD11WzE1XTtmb3Iobz0wO288MzsrK28paCs9dGhpcy5saWdodFBvc2l0aW9uW29dKnVbNCpvKzNdO2ZvcihvPTA7bzwzOysrbyl7Zm9yKHZhciBmPXVbMTIrb10scD0wO3A8MzsrK3ApZis9dVs0KnArb10qdGhpcy5saWdodFBvc2l0aW9uW3BdO3MubGlnaHRQb3NpdGlvbltvXT1mL2h9aWYodGhpcy50cmlhbmdsZUNvdW50PjApe3ZhciBkPXRoaXMudHJpU2hhZGVyO2QuYmluZCgpLGQudW5pZm9ybXM9cyx0aGlzLnRyaWFuZ2xlVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRVMsMCwzKnRoaXMudHJpYW5nbGVDb3VudCksdGhpcy50cmlhbmdsZVZBTy51bmJpbmQoKX19LHguZHJhd1BpY2s9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fG0sbj10LnZpZXd8fG0saT10LnByb2plY3Rpb258fG0sYT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylhWzBdW29dPU1hdGgubWF4KGFbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxhWzFdW29dPU1hdGgubWluKGFbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt0aGlzLl9tb2RlbD1bXS5zbGljZS5jYWxsKHIpLHRoaXMuX3ZpZXc9W10uc2xpY2UuY2FsbChuKSx0aGlzLl9wcm9qZWN0aW9uPVtdLnNsaWNlLmNhbGwoaSksdGhpcy5fcmVzb2x1dGlvbj1bZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XTt2YXIgcz17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGNsaXBCb3VuZHM6YSx2ZWN0b3JTY2FsZTp0aGlzLnZlY3RvclNjYWxlLGNvbmVTY2FsZTp0aGlzLmNvbmVTY2FsZSxjb25lT2Zmc2V0OnRoaXMuY29uZU9mZnNldCxwaWNrSWQ6dGhpcy5waWNrSWQvMjU1fSxsPXRoaXMucGlja1NoYWRlcjtsLmJpbmQoKSxsLnVuaWZvcm1zPXMsdGhpcy50cmlhbmdsZUNvdW50PjAmJih0aGlzLnRyaWFuZ2xlVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRVMsMCwzKnRoaXMudHJpYW5nbGVDb3VudCksdGhpcy50cmlhbmdsZVZBTy51bmJpbmQoKSksdGhpcy5lZGdlQ291bnQ+MCYmKHRoaXMuZWRnZVZBTy5iaW5kKCksZS5saW5lV2lkdGgodGhpcy5saW5lV2lkdGgqdGhpcy5waXhlbFJhdGlvKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLDIqdGhpcy5lZGdlQ291bnQpLHRoaXMuZWRnZVZBTy51bmJpbmQoKSl9LHgucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7dmFyIGU9dC52YWx1ZVswXSsyNTYqdC52YWx1ZVsxXSs2NTUzNip0LnZhbHVlWzJdLHI9dGhpcy5jZWxsc1tlXSxuPXRoaXMucG9zaXRpb25zW3JbMV1dLnNsaWNlKDAsMyk7cmV0dXJue2luZGV4Ok1hdGguZmxvb3IoclsxXS80OCkscG9zaXRpb246bixkYXRhQ29vcmRpbmF0ZTpufX0seC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRyaVNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVkFPLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVmVjdG9ycy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZUNvbG9ycy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVVWcy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZU5vcm1hbHMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVJZHMuZGlzcG9zZSgpLHRoaXMuZWRnZVZBTy5kaXNwb3NlKCksdGhpcy5lZGdlUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLmVkZ2VDb2xvcnMuZGlzcG9zZSgpLHRoaXMuZWRnZVVWcy5kaXNwb3NlKCksdGhpcy5lZGdlSWRzLmRpc3Bvc2UoKSx0aGlzLnBvaW50VkFPLmRpc3Bvc2UoKSx0aGlzLnBvaW50UG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLnBvaW50Q29sb3JzLmRpc3Bvc2UoKSx0aGlzLnBvaW50VVZzLmRpc3Bvc2UoKSx0aGlzLnBvaW50U2l6ZXMuZGlzcG9zZSgpLHRoaXMucG9pbnRJZHMuZGlzcG9zZSgpLHRoaXMuY29udG91clZBTy5kaXNwb3NlKCksdGhpcy5jb250b3VyUG9zaXRpb25zLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7MT09PWFyZ3VtZW50cy5sZW5ndGgmJih0PShlPXQpLmdsKTt2YXIgcj1lLnRyaVNoYWRlcnx8ZnVuY3Rpb24odCl7dmFyIGU9bih0LGcudmVydGV4LGcuZnJhZ21lbnQsbnVsbCxnLmF0dHJpYnV0ZXMpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlLmF0dHJpYnV0ZXMudmVjdG9yLmxvY2F0aW9uPTUsZX0odCkscz1iKHQpLGw9byh0LHUobmV3IFVpbnQ4QXJyYXkoWzI1NSwyNTUsMjU1LDI1NV0pLFsxLDEsNF0pKTtsLmdlbmVyYXRlTWlwbWFwKCksbC5taW5GaWx0ZXI9dC5MSU5FQVJfTUlQTUFQX0xJTkVBUixsLm1hZ0ZpbHRlcj10LkxJTkVBUjt2YXIgYz1pKHQpLGg9aSh0KSxmPWkodCkscD1pKHQpLGQ9aSh0KSx2PWkodCksbT1hKHQsW3tidWZmZXI6Yyx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOnYsdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6Zix0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOnAsdHlwZTp0LkZMT0FULHNpemU6Mn0se2J1ZmZlcjpkLHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6aCx0eXBlOnQuRkxPQVQsc2l6ZTozfV0pLHg9aSh0KSxfPWkodCksdz1pKHQpLGs9aSh0KSxBPWEodCxbe2J1ZmZlcjp4LHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6ayx0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjpfLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6dyx0eXBlOnQuRkxPQVQsc2l6ZToyfV0pLFQ9aSh0KSxNPWkodCksUz1pKHQpLEU9aSh0KSxDPWkodCksTD1hKHQsW3tidWZmZXI6VCx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOkMsdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6TSx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOlMsdHlwZTp0LkZMT0FULHNpemU6Mn0se2J1ZmZlcjpFLHR5cGU6dC5GTE9BVCxzaXplOjF9XSksej1pKHQpLE89bmV3IHkodCxsLHIscyxjLGgsdixmLHAsZCxtLHgsayxfLHcsQSxULEMsTSxTLEUsTCx6LGEodCxbe2J1ZmZlcjp6LHR5cGU6dC5GTE9BVCxzaXplOjN9XSkpO3JldHVybiBPLnVwZGF0ZShlKSxPfX0se1wiLi9zaGFkZXJzXCI6MjQxLGNvbG9ybWFwOjExNyxcImdsLWJ1ZmZlclwiOjIzOCxcImdsLW1hdDQvaW52ZXJ0XCI6MjYyLFwiZ2wtbWF0NC9tdWx0aXBseVwiOjI2NCxcImdsLXNoYWRlclwiOjI5OCxcImdsLXRleHR1cmUyZFwiOjMxNSxcImdsLXZhb1wiOjMyMCxuZGFycmF5OjQ0Myxub3JtYWxzOjQ0NixcInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyXCI6NTAzLFwidHlwZWRhcnJheS1wb29sXCI6NTMwfV0sMjQxOltmdW5jdGlvbih0LGUscil7dmFyIG49dChcImdsc2xpZnlcIiksaT1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG52ZWMzIGdldE9ydGhvZ29uYWxWZWN0b3IodmVjMyB2KSB7XFxuICAvLyBSZXR1cm4gdXAtdmVjdG9yIGZvciBvbmx5LXogdmVjdG9yLlxcbiAgLy8gUmV0dXJuIGF4ICsgYnkgKyBjeiA9IDAsIGEgcG9pbnQgdGhhdCBsaWVzIG9uIHRoZSBwbGFuZSB0aGF0IGhhcyB2IGFzIGEgbm9ybWFsIGFuZCB0aGF0IGlzbid0ICgwLDAsMCkuXFxuICAvLyBGcm9tIHRoZSBhYm92ZSBpZi1zdGF0ZW1lbnQgd2UgaGF2ZSB8fGF8fCA+IDAgIFUgIHx8Ynx8ID4gMC5cXG4gIC8vIEFzc2lnbiB6ID0gMCwgeCA9IC1iLCB5ID0gYTpcXG4gIC8vIGEqLWIgKyBiKmEgKyBjKjAgPSAtYmEgKyBiYSArIDAgPSAwXFxuICBpZiAodi54KnYueCA+IHYueip2LnogfHwgdi55KnYueSA+IHYueip2LnopIHtcXG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKC12LnksIHYueCwgMC4wKSk7XFxuICB9IGVsc2Uge1xcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoMC4wLCB2LnosIC12LnkpKTtcXG4gIH1cXG59XFxuXFxuLy8gQ2FsY3VsYXRlIHRoZSBjb25lIHZlcnRleCBhbmQgbm9ybWFsIGF0IHRoZSBnaXZlbiBpbmRleC5cXG4vL1xcbi8vIFRoZSByZXR1cm5lZCB2ZXJ0ZXggaXMgZm9yIGEgY29uZSB3aXRoIGl0cyB0b3AgYXQgb3JpZ2luIGFuZCBoZWlnaHQgb2YgMS4wLFxcbi8vIHBvaW50aW5nIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHZlY3RvciBhdHRyaWJ1dGUuXFxuLy9cXG4vLyBFYWNoIGNvbmUgaXMgbWFkZSB1cCBvZiBhIHRvcCB2ZXJ0ZXgsIGEgY2VudGVyIGJhc2UgdmVydGV4IGFuZCBiYXNlIHBlcmltZXRlciB2ZXJ0aWNlcy5cXG4vLyBUaGVzZSB2ZXJ0aWNlcyBhcmUgdXNlZCB0byBtYWtlIHVwIHRoZSB0cmlhbmdsZXMgb2YgdGhlIGNvbmUgYnkgdGhlIGZvbGxvd2luZzpcXG4vLyAgIHNlZ21lbnQgKyAwIHRvcCB2ZXJ0ZXhcXG4vLyAgIHNlZ21lbnQgKyAxIHBlcmltZXRlciB2ZXJ0ZXggYSsxXFxuLy8gICBzZWdtZW50ICsgMiBwZXJpbWV0ZXIgdmVydGV4IGFcXG4vLyAgIHNlZ21lbnQgKyAzIGNlbnRlciBiYXNlIHZlcnRleFxcbi8vICAgc2VnbWVudCArIDQgcGVyaW1ldGVyIHZlcnRleCBhXFxuLy8gICBzZWdtZW50ICsgNSBwZXJpbWV0ZXIgdmVydGV4IGErMVxcbi8vIFdoZXJlIHNlZ21lbnQgaXMgdGhlIG51bWJlciBvZiB0aGUgcmFkaWFsIHNlZ21lbnQgKiA2IGFuZCBhIGlzIHRoZSBhbmdsZSBhdCB0aGF0IHJhZGlhbCBzZWdtZW50Llxcbi8vIFRvIGdvIGZyb20gaW5kZXggdG8gc2VnbWVudCwgZmxvb3IoaW5kZXggLyA2KVxcbi8vIFRvIGdvIGZyb20gc2VnbWVudCB0byBhbmdsZSwgMipwaSAqIChzZWdtZW50L3NlZ21lbnRDb3VudClcXG4vLyBUbyBnbyBmcm9tIGluZGV4IHRvIHNlZ21lbnQgaW5kZXgsIGluZGV4IC0gKHNlZ21lbnQqNilcXG4vL1xcbnZlYzMgZ2V0Q29uZVBvc2l0aW9uKHZlYzMgZCwgZmxvYXQgcmF3SW5kZXgsIGZsb2F0IGNvbmVPZmZzZXQsIG91dCB2ZWMzIG5vcm1hbCkge1xcblxcbiAgY29uc3QgZmxvYXQgc2VnbWVudENvdW50ID0gOC4wO1xcblxcbiAgZmxvYXQgaW5kZXggPSByYXdJbmRleCAtIGZsb29yKHJhd0luZGV4IC9cXG4gICAgKHNlZ21lbnRDb3VudCAqIDYuMCkpICpcXG4gICAgKHNlZ21lbnRDb3VudCAqIDYuMCk7XFxuXFxuICBmbG9hdCBzZWdtZW50ID0gZmxvb3IoMC4wMDEgKyBpbmRleC82LjApO1xcbiAgZmxvYXQgc2VnbWVudEluZGV4ID0gaW5kZXggLSAoc2VnbWVudCo2LjApO1xcblxcbiAgbm9ybWFsID0gLW5vcm1hbGl6ZShkKTtcXG5cXG4gIGlmIChzZWdtZW50SW5kZXggPiAyLjk5ICYmIHNlZ21lbnRJbmRleCA8IDMuMDEpIHtcXG4gICAgcmV0dXJuIG1peCh2ZWMzKDAuMCksIC1kLCBjb25lT2Zmc2V0KTtcXG4gIH1cXG5cXG4gIGZsb2F0IG5leHRBbmdsZSA9IChcXG4gICAgKHNlZ21lbnRJbmRleCA+IDAuOTkgJiYgIHNlZ21lbnRJbmRleCA8IDEuMDEpIHx8XFxuICAgIChzZWdtZW50SW5kZXggPiA0Ljk5ICYmICBzZWdtZW50SW5kZXggPCA1LjAxKVxcbiAgKSA/IDEuMCA6IDAuMDtcXG4gIGZsb2F0IGFuZ2xlID0gMi4wICogMy4xNDE1OSAqICgoc2VnbWVudCArIG5leHRBbmdsZSkgLyBzZWdtZW50Q291bnQpO1xcblxcbiAgdmVjMyB2MSA9IG1peChkLCB2ZWMzKDAuMCksIGNvbmVPZmZzZXQpO1xcbiAgdmVjMyB2MiA9IHYxIC0gZDtcXG5cXG4gIHZlYzMgdSA9IGdldE9ydGhvZ29uYWxWZWN0b3IoZCk7XFxuICB2ZWMzIHYgPSBub3JtYWxpemUoY3Jvc3ModSwgZCkpO1xcblxcbiAgdmVjMyB4ID0gdSAqIGNvcyhhbmdsZSkgKiBsZW5ndGgoZCkqMC4yNTtcXG4gIHZlYzMgeSA9IHYgKiBzaW4oYW5nbGUpICogbGVuZ3RoKGQpKjAuMjU7XFxuICB2ZWMzIHYzID0gdjIgKyB4ICsgeTtcXG4gIGlmIChzZWdtZW50SW5kZXggPCAzLjApIHtcXG4gICAgdmVjMyB0eCA9IHUgKiBzaW4oYW5nbGUpO1xcbiAgICB2ZWMzIHR5ID0gdiAqIC1jb3MoYW5nbGUpO1xcbiAgICB2ZWMzIHRhbmdlbnQgPSB0eCArIHR5O1xcbiAgICBub3JtYWwgPSBub3JtYWxpemUoY3Jvc3ModjMgLSB2MSwgdGFuZ2VudCkpO1xcbiAgfVxcblxcbiAgaWYgKHNlZ21lbnRJbmRleCA9PSAwLjApIHtcXG4gICAgcmV0dXJuIG1peChkLCB2ZWMzKDAuMCksIGNvbmVPZmZzZXQpO1xcbiAgfVxcbiAgcmV0dXJuIHYzO1xcbn1cXG5cXG5hdHRyaWJ1dGUgdmVjMyB2ZWN0b3I7XFxuYXR0cmlidXRlIHZlYzQgY29sb3IsIHBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xcbnVuaWZvcm0gZmxvYXQgdmVjdG9yU2NhbGU7XFxudW5pZm9ybSBmbG9hdCBjb25lU2NhbGU7XFxuXFxudW5pZm9ybSBmbG9hdCBjb25lT2Zmc2V0O1xcblxcbnVuaWZvcm0gbWF0NCBtb2RlbFxcbiAgICAgICAgICAgLCB2aWV3XFxuICAgICAgICAgICAsIHByb2plY3Rpb25cXG4gICAgICAgICAgICwgaW52ZXJzZU1vZGVsO1xcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvblxcbiAgICAgICAgICAgLCBsaWdodFBvc2l0aW9uO1xcblxcbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxcbiAgICAgICAgICAgLCBmX2xpZ2h0RGlyZWN0aW9uXFxuICAgICAgICAgICAsIGZfZXllRGlyZWN0aW9uXFxuICAgICAgICAgICAsIGZfZGF0YVxcbiAgICAgICAgICAgLCBmX3Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xcbnZhcnlpbmcgdmVjMiBmX3V2O1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIC8vIFNjYWxlIHRoZSB2ZWN0b3IgbWFnbml0dWRlIHRvIHN0YXkgY29uc3RhbnQgd2l0aFxcbiAgLy8gbW9kZWwgJiB2aWV3IGNoYW5nZXMuXFxuICB2ZWMzIG5vcm1hbDtcXG4gIHZlYzMgWFlaID0gZ2V0Q29uZVBvc2l0aW9uKG1hdDMobW9kZWwpICogKCh2ZWN0b3JTY2FsZSAqIGNvbmVTY2FsZSkgKiB2ZWN0b3IpLCBwb3NpdGlvbi53LCBjb25lT2Zmc2V0LCBub3JtYWwpO1xcbiAgdmVjNCBjb25lUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24ueHl6LCAxLjApICsgdmVjNChYWVosIDAuMCk7XFxuXFxuICAvL0xpZ2h0aW5nIGdlb21ldHJ5IHBhcmFtZXRlcnNcXG4gIHZlYzQgY2FtZXJhQ29vcmRpbmF0ZSA9IHZpZXcgKiBjb25lUG9zaXRpb247XFxuICBjYW1lcmFDb29yZGluYXRlLnh5eiAvPSBjYW1lcmFDb29yZGluYXRlLnc7XFxuICBmX2xpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xcbiAgZl9leWVEaXJlY3Rpb24gICA9IGV5ZVBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XFxuICBmX25vcm1hbCA9IG5vcm1hbGl6ZSgodmVjNChub3JtYWwsMC4wKSAqIGludmVyc2VNb2RlbCkueHl6KTtcXG5cXG4gIC8vIHZlYzQgbV9wb3NpdGlvbiAgPSBtb2RlbCAqIHZlYzQoY29uZVBvc2l0aW9uLCAxLjApO1xcbiAgdmVjNCB0X3Bvc2l0aW9uICA9IHZpZXcgKiBjb25lUG9zaXRpb247XFxuICBnbF9Qb3NpdGlvbiAgICAgID0gcHJvamVjdGlvbiAqIHRfcG9zaXRpb247XFxuXFxuICBmX2NvbG9yICAgICAgICAgID0gY29sb3I7XFxuICBmX2RhdGEgICAgICAgICAgID0gY29uZVBvc2l0aW9uLnh5ejtcXG4gIGZfcG9zaXRpb24gICAgICAgPSBwb3NpdGlvbi54eXo7XFxuICBmX3V2ICAgICAgICAgICAgID0gdXY7XFxufVxcblwiXSksYT1uKFtcIiNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlXFxuXFxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuZmxvYXQgYmVja21hbm5EaXN0cmlidXRpb24oZmxvYXQgeCwgZmxvYXQgcm91Z2huZXNzKSB7XFxuICBmbG9hdCBOZG90SCA9IG1heCh4LCAwLjAwMDEpO1xcbiAgZmxvYXQgY29zMkFscGhhID0gTmRvdEggKiBOZG90SDtcXG4gIGZsb2F0IHRhbjJBbHBoYSA9IChjb3MyQWxwaGEgLSAxLjApIC8gY29zMkFscGhhO1xcbiAgZmxvYXQgcm91Z2huZXNzMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcXG4gIGZsb2F0IGRlbm9tID0gMy4xNDE1OTI2NTM1ODk3OTMgKiByb3VnaG5lc3MyICogY29zMkFscGhhICogY29zMkFscGhhO1xcbiAgcmV0dXJuIGV4cCh0YW4yQWxwaGEgLyByb3VnaG5lc3MyKSAvIGRlbm9tO1xcbn1cXG5cXG5mbG9hdCBjb29rVG9ycmFuY2VTcGVjdWxhcihcXG4gIHZlYzMgbGlnaHREaXJlY3Rpb24sXFxuICB2ZWMzIHZpZXdEaXJlY3Rpb24sXFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwsXFxuICBmbG9hdCByb3VnaG5lc3MsXFxuICBmbG9hdCBmcmVzbmVsKSB7XFxuXFxuICBmbG9hdCBWZG90TiA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XFxuICBmbG9hdCBMZG90TiA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xcblxcbiAgLy9IYWxmIGFuZ2xlIHZlY3RvclxcbiAgdmVjMyBIID0gbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uICsgdmlld0RpcmVjdGlvbik7XFxuXFxuICAvL0dlb21ldHJpYyB0ZXJtXFxuICBmbG9hdCBOZG90SCA9IG1heChkb3Qoc3VyZmFjZU5vcm1hbCwgSCksIDAuMCk7XFxuICBmbG9hdCBWZG90SCA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcXG4gIGZsb2F0IExkb3RIID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcXG4gIGZsb2F0IEcxID0gKDIuMCAqIE5kb3RIICogVmRvdE4pIC8gVmRvdEg7XFxuICBmbG9hdCBHMiA9ICgyLjAgKiBOZG90SCAqIExkb3ROKSAvIExkb3RIO1xcbiAgZmxvYXQgRyA9IG1pbigxLjAsIG1pbihHMSwgRzIpKTtcXG4gIFxcbiAgLy9EaXN0cmlidXRpb24gdGVybVxcbiAgZmxvYXQgRCA9IGJlY2ttYW5uRGlzdHJpYnV0aW9uKE5kb3RILCByb3VnaG5lc3MpO1xcblxcbiAgLy9GcmVzbmVsIHRlcm1cXG4gIGZsb2F0IEYgPSBwb3coMS4wIC0gVmRvdE4sIGZyZXNuZWwpO1xcblxcbiAgLy9NdWx0aXBseSB0ZXJtcyBhbmQgZG9uZVxcbiAgcmV0dXJuICBHICogRiAqIEQgLyBtYXgoMy4xNDE1OTI2NSAqIFZkb3ROLCAwLjAwMDAwMSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XFxuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XFxufVxcblxcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzXFxuICAgICAgICAgICAgLCBmcmVzbmVsXFxuICAgICAgICAgICAgLCBrYW1iaWVudFxcbiAgICAgICAgICAgICwga2RpZmZ1c2VcXG4gICAgICAgICAgICAsIGtzcGVjdWxhclxcbiAgICAgICAgICAgICwgb3BhY2l0eTtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcblxcbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxcbiAgICAgICAgICAgLCBmX2xpZ2h0RGlyZWN0aW9uXFxuICAgICAgICAgICAsIGZfZXllRGlyZWN0aW9uXFxuICAgICAgICAgICAsIGZfZGF0YVxcbiAgICAgICAgICAgLCBmX3Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xcbnZhcnlpbmcgdmVjMiBmX3V2O1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfcG9zaXRpb24pKSBkaXNjYXJkO1xcbiAgdmVjMyBOID0gbm9ybWFsaXplKGZfbm9ybWFsKTtcXG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShmX2xpZ2h0RGlyZWN0aW9uKTtcXG4gIHZlYzMgViA9IG5vcm1hbGl6ZShmX2V5ZURpcmVjdGlvbik7XFxuXFxuICBpZihnbF9Gcm9udEZhY2luZykge1xcbiAgICBOID0gLU47XFxuICB9XFxuXFxuICBmbG9hdCBzcGVjdWxhciA9IG1pbigxLjAsIG1heCgwLjAsIGNvb2tUb3JyYW5jZVNwZWN1bGFyKEwsIFYsIE4sIHJvdWdobmVzcywgZnJlc25lbCkpKTtcXG4gIGZsb2F0IGRpZmZ1c2UgID0gbWluKGthbWJpZW50ICsga2RpZmZ1c2UgKiBtYXgoZG90KE4sIEwpLCAwLjApLCAxLjApO1xcblxcbiAgdmVjNCBzdXJmYWNlQ29sb3IgPSBmX2NvbG9yICogdGV4dHVyZTJEKHRleHR1cmUsIGZfdXYpO1xcbiAgdmVjNCBsaXRDb2xvciA9IHN1cmZhY2VDb2xvci5hICogdmVjNChkaWZmdXNlICogc3VyZmFjZUNvbG9yLnJnYiArIGtzcGVjdWxhciAqIHZlYzMoMSwxLDEpICogc3BlY3VsYXIsICAxLjApO1xcblxcbiAgZ2xfRnJhZ0NvbG9yID0gbGl0Q29sb3IgKiBvcGFjaXR5O1xcbn1cXG5cIl0pLG89bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuXFxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxudmVjMyBnZXRPcnRob2dvbmFsVmVjdG9yKHZlYzMgdikge1xcbiAgLy8gUmV0dXJuIHVwLXZlY3RvciBmb3Igb25seS16IHZlY3Rvci5cXG4gIC8vIFJldHVybiBheCArIGJ5ICsgY3ogPSAwLCBhIHBvaW50IHRoYXQgbGllcyBvbiB0aGUgcGxhbmUgdGhhdCBoYXMgdiBhcyBhIG5vcm1hbCBhbmQgdGhhdCBpc24ndCAoMCwwLDApLlxcbiAgLy8gRnJvbSB0aGUgYWJvdmUgaWYtc3RhdGVtZW50IHdlIGhhdmUgfHxhfHwgPiAwICBVICB8fGJ8fCA+IDAuXFxuICAvLyBBc3NpZ24geiA9IDAsIHggPSAtYiwgeSA9IGE6XFxuICAvLyBhKi1iICsgYiphICsgYyowID0gLWJhICsgYmEgKyAwID0gMFxcbiAgaWYgKHYueCp2LnggPiB2Lnoqdi56IHx8IHYueSp2LnkgPiB2Lnoqdi56KSB7XFxuICAgIHJldHVybiBub3JtYWxpemUodmVjMygtdi55LCB2LngsIDAuMCkpO1xcbiAgfSBlbHNlIHtcXG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKDAuMCwgdi56LCAtdi55KSk7XFxuICB9XFxufVxcblxcbi8vIENhbGN1bGF0ZSB0aGUgY29uZSB2ZXJ0ZXggYW5kIG5vcm1hbCBhdCB0aGUgZ2l2ZW4gaW5kZXguXFxuLy9cXG4vLyBUaGUgcmV0dXJuZWQgdmVydGV4IGlzIGZvciBhIGNvbmUgd2l0aCBpdHMgdG9wIGF0IG9yaWdpbiBhbmQgaGVpZ2h0IG9mIDEuMCxcXG4vLyBwb2ludGluZyBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSB2ZWN0b3IgYXR0cmlidXRlLlxcbi8vXFxuLy8gRWFjaCBjb25lIGlzIG1hZGUgdXAgb2YgYSB0b3AgdmVydGV4LCBhIGNlbnRlciBiYXNlIHZlcnRleCBhbmQgYmFzZSBwZXJpbWV0ZXIgdmVydGljZXMuXFxuLy8gVGhlc2UgdmVydGljZXMgYXJlIHVzZWQgdG8gbWFrZSB1cCB0aGUgdHJpYW5nbGVzIG9mIHRoZSBjb25lIGJ5IHRoZSBmb2xsb3dpbmc6XFxuLy8gICBzZWdtZW50ICsgMCB0b3AgdmVydGV4XFxuLy8gICBzZWdtZW50ICsgMSBwZXJpbWV0ZXIgdmVydGV4IGErMVxcbi8vICAgc2VnbWVudCArIDIgcGVyaW1ldGVyIHZlcnRleCBhXFxuLy8gICBzZWdtZW50ICsgMyBjZW50ZXIgYmFzZSB2ZXJ0ZXhcXG4vLyAgIHNlZ21lbnQgKyA0IHBlcmltZXRlciB2ZXJ0ZXggYVxcbi8vICAgc2VnbWVudCArIDUgcGVyaW1ldGVyIHZlcnRleCBhKzFcXG4vLyBXaGVyZSBzZWdtZW50IGlzIHRoZSBudW1iZXIgb2YgdGhlIHJhZGlhbCBzZWdtZW50ICogNiBhbmQgYSBpcyB0aGUgYW5nbGUgYXQgdGhhdCByYWRpYWwgc2VnbWVudC5cXG4vLyBUbyBnbyBmcm9tIGluZGV4IHRvIHNlZ21lbnQsIGZsb29yKGluZGV4IC8gNilcXG4vLyBUbyBnbyBmcm9tIHNlZ21lbnQgdG8gYW5nbGUsIDIqcGkgKiAoc2VnbWVudC9zZWdtZW50Q291bnQpXFxuLy8gVG8gZ28gZnJvbSBpbmRleCB0byBzZWdtZW50IGluZGV4LCBpbmRleCAtIChzZWdtZW50KjYpXFxuLy9cXG52ZWMzIGdldENvbmVQb3NpdGlvbih2ZWMzIGQsIGZsb2F0IHJhd0luZGV4LCBmbG9hdCBjb25lT2Zmc2V0LCBvdXQgdmVjMyBub3JtYWwpIHtcXG5cXG4gIGNvbnN0IGZsb2F0IHNlZ21lbnRDb3VudCA9IDguMDtcXG5cXG4gIGZsb2F0IGluZGV4ID0gcmF3SW5kZXggLSBmbG9vcihyYXdJbmRleCAvXFxuICAgIChzZWdtZW50Q291bnQgKiA2LjApKSAqXFxuICAgIChzZWdtZW50Q291bnQgKiA2LjApO1xcblxcbiAgZmxvYXQgc2VnbWVudCA9IGZsb29yKDAuMDAxICsgaW5kZXgvNi4wKTtcXG4gIGZsb2F0IHNlZ21lbnRJbmRleCA9IGluZGV4IC0gKHNlZ21lbnQqNi4wKTtcXG5cXG4gIG5vcm1hbCA9IC1ub3JtYWxpemUoZCk7XFxuXFxuICBpZiAoc2VnbWVudEluZGV4ID4gMi45OSAmJiBzZWdtZW50SW5kZXggPCAzLjAxKSB7XFxuICAgIHJldHVybiBtaXgodmVjMygwLjApLCAtZCwgY29uZU9mZnNldCk7XFxuICB9XFxuXFxuICBmbG9hdCBuZXh0QW5nbGUgPSAoXFxuICAgIChzZWdtZW50SW5kZXggPiAwLjk5ICYmICBzZWdtZW50SW5kZXggPCAxLjAxKSB8fFxcbiAgICAoc2VnbWVudEluZGV4ID4gNC45OSAmJiAgc2VnbWVudEluZGV4IDwgNS4wMSlcXG4gICkgPyAxLjAgOiAwLjA7XFxuICBmbG9hdCBhbmdsZSA9IDIuMCAqIDMuMTQxNTkgKiAoKHNlZ21lbnQgKyBuZXh0QW5nbGUpIC8gc2VnbWVudENvdW50KTtcXG5cXG4gIHZlYzMgdjEgPSBtaXgoZCwgdmVjMygwLjApLCBjb25lT2Zmc2V0KTtcXG4gIHZlYzMgdjIgPSB2MSAtIGQ7XFxuXFxuICB2ZWMzIHUgPSBnZXRPcnRob2dvbmFsVmVjdG9yKGQpO1xcbiAgdmVjMyB2ID0gbm9ybWFsaXplKGNyb3NzKHUsIGQpKTtcXG5cXG4gIHZlYzMgeCA9IHUgKiBjb3MoYW5nbGUpICogbGVuZ3RoKGQpKjAuMjU7XFxuICB2ZWMzIHkgPSB2ICogc2luKGFuZ2xlKSAqIGxlbmd0aChkKSowLjI1O1xcbiAgdmVjMyB2MyA9IHYyICsgeCArIHk7XFxuICBpZiAoc2VnbWVudEluZGV4IDwgMy4wKSB7XFxuICAgIHZlYzMgdHggPSB1ICogc2luKGFuZ2xlKTtcXG4gICAgdmVjMyB0eSA9IHYgKiAtY29zKGFuZ2xlKTtcXG4gICAgdmVjMyB0YW5nZW50ID0gdHggKyB0eTtcXG4gICAgbm9ybWFsID0gbm9ybWFsaXplKGNyb3NzKHYzIC0gdjEsIHRhbmdlbnQpKTtcXG4gIH1cXG5cXG4gIGlmIChzZWdtZW50SW5kZXggPT0gMC4wKSB7XFxuICAgIHJldHVybiBtaXgoZCwgdmVjMygwLjApLCBjb25lT2Zmc2V0KTtcXG4gIH1cXG4gIHJldHVybiB2MztcXG59XFxuXFxuYXR0cmlidXRlIHZlYzMgdmVjdG9yO1xcbmF0dHJpYnV0ZSB2ZWM0IHBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xcblxcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcXG5cXG51bmlmb3JtIGZsb2F0IHZlY3RvclNjYWxlO1xcbnVuaWZvcm0gZmxvYXQgY29uZVNjYWxlO1xcbnVuaWZvcm0gZmxvYXQgY29uZU9mZnNldDtcXG5cXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzQgZl9pZDtcXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWMzIG5vcm1hbDtcXG4gIHZlYzMgWFlaID0gZ2V0Q29uZVBvc2l0aW9uKG1hdDMobW9kZWwpICogKCh2ZWN0b3JTY2FsZSAqIGNvbmVTY2FsZSkgKiB2ZWN0b3IpLCBwb3NpdGlvbi53LCBjb25lT2Zmc2V0LCBub3JtYWwpO1xcbiAgdmVjNCBjb25lUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24ueHl6LCAxLjApICsgdmVjNChYWVosIDAuMCk7XFxuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogY29uZVBvc2l0aW9uO1xcbiAgZl9pZCAgICAgICAgPSBpZDtcXG4gIGZfcG9zaXRpb24gID0gcG9zaXRpb24ueHl6O1xcbn1cXG5cIl0pLHM9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcXG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xcbn1cXG5cXG51bmlmb3JtIHZlYzMgIGNsaXBCb3VuZHNbMl07XFxudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XFxuXFxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XFxudmFyeWluZyB2ZWM0IGZfaWQ7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9wb3NpdGlvbikpIGRpc2NhcmQ7XFxuXFxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZCwgZl9pZC54eXopO1xcbn1cIl0pO3IubWVzaFNoYWRlcj17dmVydGV4OmksZnJhZ21lbnQ6YSxhdHRyaWJ1dGVzOlt7bmFtZTpcInBvc2l0aW9uXCIsdHlwZTpcInZlYzRcIn0se25hbWU6XCJub3JtYWxcIix0eXBlOlwidmVjM1wifSx7bmFtZTpcImNvbG9yXCIsdHlwZTpcInZlYzRcIn0se25hbWU6XCJ1dlwiLHR5cGU6XCJ2ZWMyXCJ9LHtuYW1lOlwidmVjdG9yXCIsdHlwZTpcInZlYzNcIn1dfSxyLnBpY2tTaGFkZXI9e3ZlcnRleDpvLGZyYWdtZW50OnMsYXR0cmlidXRlczpbe25hbWU6XCJwb3NpdGlvblwiLHR5cGU6XCJ2ZWM0XCJ9LHtuYW1lOlwiaWRcIix0eXBlOlwidmVjNFwifSx7bmFtZTpcInZlY3RvclwiLHR5cGU6XCJ2ZWMzXCJ9XX19LHtnbHNsaWZ5OjQwMn1dLDI0MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17MDpcIk5PTkVcIiwxOlwiT05FXCIsMjpcIkxJTkVfTE9PUFwiLDM6XCJMSU5FX1NUUklQXCIsNDpcIlRSSUFOR0xFU1wiLDU6XCJUUklBTkdMRV9TVFJJUFwiLDY6XCJUUklBTkdMRV9GQU5cIiwyNTY6XCJERVBUSF9CVUZGRVJfQklUXCIsNTEyOlwiTkVWRVJcIiw1MTM6XCJMRVNTXCIsNTE0OlwiRVFVQUxcIiw1MTU6XCJMRVFVQUxcIiw1MTY6XCJHUkVBVEVSXCIsNTE3OlwiTk9URVFVQUxcIiw1MTg6XCJHRVFVQUxcIiw1MTk6XCJBTFdBWVNcIiw3Njg6XCJTUkNfQ09MT1JcIiw3Njk6XCJPTkVfTUlOVVNfU1JDX0NPTE9SXCIsNzcwOlwiU1JDX0FMUEhBXCIsNzcxOlwiT05FX01JTlVTX1NSQ19BTFBIQVwiLDc3MjpcIkRTVF9BTFBIQVwiLDc3MzpcIk9ORV9NSU5VU19EU1RfQUxQSEFcIiw3NzQ6XCJEU1RfQ09MT1JcIiw3NzU6XCJPTkVfTUlOVVNfRFNUX0NPTE9SXCIsNzc2OlwiU1JDX0FMUEhBX1NBVFVSQVRFXCIsMTAyNDpcIlNURU5DSUxfQlVGRkVSX0JJVFwiLDEwMjg6XCJGUk9OVFwiLDEwMjk6XCJCQUNLXCIsMTAzMjpcIkZST05UX0FORF9CQUNLXCIsMTI4MDpcIklOVkFMSURfRU5VTVwiLDEyODE6XCJJTlZBTElEX1ZBTFVFXCIsMTI4MjpcIklOVkFMSURfT1BFUkFUSU9OXCIsMTI4NTpcIk9VVF9PRl9NRU1PUllcIiwxMjg2OlwiSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT05cIiwyMzA0OlwiQ1dcIiwyMzA1OlwiQ0NXXCIsMjg0OTpcIkxJTkVfV0lEVEhcIiwyODg0OlwiQ1VMTF9GQUNFXCIsMjg4NTpcIkNVTExfRkFDRV9NT0RFXCIsMjg4NjpcIkZST05UX0ZBQ0VcIiwyOTI4OlwiREVQVEhfUkFOR0VcIiwyOTI5OlwiREVQVEhfVEVTVFwiLDI5MzA6XCJERVBUSF9XUklURU1BU0tcIiwyOTMxOlwiREVQVEhfQ0xFQVJfVkFMVUVcIiwyOTMyOlwiREVQVEhfRlVOQ1wiLDI5NjA6XCJTVEVOQ0lMX1RFU1RcIiwyOTYxOlwiU1RFTkNJTF9DTEVBUl9WQUxVRVwiLDI5NjI6XCJTVEVOQ0lMX0ZVTkNcIiwyOTYzOlwiU1RFTkNJTF9WQUxVRV9NQVNLXCIsMjk2NDpcIlNURU5DSUxfRkFJTFwiLDI5NjU6XCJTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTFwiLDI5NjY6XCJTVEVOQ0lMX1BBU1NfREVQVEhfUEFTU1wiLDI5Njc6XCJTVEVOQ0lMX1JFRlwiLDI5Njg6XCJTVEVOQ0lMX1dSSVRFTUFTS1wiLDI5Nzg6XCJWSUVXUE9SVFwiLDMwMjQ6XCJESVRIRVJcIiwzMDQyOlwiQkxFTkRcIiwzMDg4OlwiU0NJU1NPUl9CT1hcIiwzMDg5OlwiU0NJU1NPUl9URVNUXCIsMzEwNjpcIkNPTE9SX0NMRUFSX1ZBTFVFXCIsMzEwNzpcIkNPTE9SX1dSSVRFTUFTS1wiLDMzMTc6XCJVTlBBQ0tfQUxJR05NRU5UXCIsMzMzMzpcIlBBQ0tfQUxJR05NRU5UXCIsMzM3OTpcIk1BWF9URVhUVVJFX1NJWkVcIiwzMzg2OlwiTUFYX1ZJRVdQT1JUX0RJTVNcIiwzNDA4OlwiU1VCUElYRUxfQklUU1wiLDM0MTA6XCJSRURfQklUU1wiLDM0MTE6XCJHUkVFTl9CSVRTXCIsMzQxMjpcIkJMVUVfQklUU1wiLDM0MTM6XCJBTFBIQV9CSVRTXCIsMzQxNDpcIkRFUFRIX0JJVFNcIiwzNDE1OlwiU1RFTkNJTF9CSVRTXCIsMzU1MzpcIlRFWFRVUkVfMkRcIiw0MzUyOlwiRE9OVF9DQVJFXCIsNDM1MzpcIkZBU1RFU1RcIiw0MzU0OlwiTklDRVNUXCIsNTEyMDpcIkJZVEVcIiw1MTIxOlwiVU5TSUdORURfQllURVwiLDUxMjI6XCJTSE9SVFwiLDUxMjM6XCJVTlNJR05FRF9TSE9SVFwiLDUxMjQ6XCJJTlRcIiw1MTI1OlwiVU5TSUdORURfSU5UXCIsNTEyNjpcIkZMT0FUXCIsNTM4NjpcIklOVkVSVFwiLDU4OTA6XCJURVhUVVJFXCIsNjQwMTpcIlNURU5DSUxfSU5ERVhcIiw2NDAyOlwiREVQVEhfQ09NUE9ORU5UXCIsNjQwNjpcIkFMUEhBXCIsNjQwNzpcIlJHQlwiLDY0MDg6XCJSR0JBXCIsNjQwOTpcIkxVTUlOQU5DRVwiLDY0MTA6XCJMVU1JTkFOQ0VfQUxQSEFcIiw3NjgwOlwiS0VFUFwiLDc2ODE6XCJSRVBMQUNFXCIsNzY4MjpcIklOQ1JcIiw3NjgzOlwiREVDUlwiLDc5MzY6XCJWRU5ET1JcIiw3OTM3OlwiUkVOREVSRVJcIiw3OTM4OlwiVkVSU0lPTlwiLDk3Mjg6XCJORUFSRVNUXCIsOTcyOTpcIkxJTkVBUlwiLDk5ODQ6XCJORUFSRVNUX01JUE1BUF9ORUFSRVNUXCIsOTk4NTpcIkxJTkVBUl9NSVBNQVBfTkVBUkVTVFwiLDk5ODY6XCJORUFSRVNUX01JUE1BUF9MSU5FQVJcIiw5OTg3OlwiTElORUFSX01JUE1BUF9MSU5FQVJcIiwxMDI0MDpcIlRFWFRVUkVfTUFHX0ZJTFRFUlwiLDEwMjQxOlwiVEVYVFVSRV9NSU5fRklMVEVSXCIsMTAyNDI6XCJURVhUVVJFX1dSQVBfU1wiLDEwMjQzOlwiVEVYVFVSRV9XUkFQX1RcIiwxMDQ5NzpcIlJFUEVBVFwiLDEwNzUyOlwiUE9MWUdPTl9PRkZTRVRfVU5JVFNcIiwxNjM4NDpcIkNPTE9SX0JVRkZFUl9CSVRcIiwzMjc2OTpcIkNPTlNUQU5UX0NPTE9SXCIsMzI3NzA6XCJPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1JcIiwzMjc3MTpcIkNPTlNUQU5UX0FMUEhBXCIsMzI3NzI6XCJPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEFcIiwzMjc3MzpcIkJMRU5EX0NPTE9SXCIsMzI3NzQ6XCJGVU5DX0FERFwiLDMyNzc3OlwiQkxFTkRfRVFVQVRJT05fUkdCXCIsMzI3Nzg6XCJGVU5DX1NVQlRSQUNUXCIsMzI3Nzk6XCJGVU5DX1JFVkVSU0VfU1VCVFJBQ1RcIiwzMjgxOTpcIlVOU0lHTkVEX1NIT1JUXzRfNF80XzRcIiwzMjgyMDpcIlVOU0lHTkVEX1NIT1JUXzVfNV81XzFcIiwzMjgyMzpcIlBPTFlHT05fT0ZGU0VUX0ZJTExcIiwzMjgyNDpcIlBPTFlHT05fT0ZGU0VUX0ZBQ1RPUlwiLDMyODU0OlwiUkdCQTRcIiwzMjg1NTpcIlJHQjVfQTFcIiwzMjg3MzpcIlRFWFRVUkVfQklORElOR18yRFwiLDMyOTI2OlwiU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFXCIsMzI5Mjg6XCJTQU1QTEVfQ09WRVJBR0VcIiwzMjkzNjpcIlNBTVBMRV9CVUZGRVJTXCIsMzI5Mzc6XCJTQU1QTEVTXCIsMzI5Mzg6XCJTQU1QTEVfQ09WRVJBR0VfVkFMVUVcIiwzMjkzOTpcIlNBTVBMRV9DT1ZFUkFHRV9JTlZFUlRcIiwzMjk2ODpcIkJMRU5EX0RTVF9SR0JcIiwzMjk2OTpcIkJMRU5EX1NSQ19SR0JcIiwzMjk3MDpcIkJMRU5EX0RTVF9BTFBIQVwiLDMyOTcxOlwiQkxFTkRfU1JDX0FMUEhBXCIsMzMwNzE6XCJDTEFNUF9UT19FREdFXCIsMzMxNzA6XCJHRU5FUkFURV9NSVBNQVBfSElOVFwiLDMzMTg5OlwiREVQVEhfQ09NUE9ORU5UMTZcIiwzMzMwNjpcIkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVFwiLDMzNjM1OlwiVU5TSUdORURfU0hPUlRfNV82XzVcIiwzMzY0ODpcIk1JUlJPUkVEX1JFUEVBVFwiLDMzOTAxOlwiQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFXCIsMzM5MDI6XCJBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0VcIiwzMzk4NDpcIlRFWFRVUkUwXCIsMzM5ODU6XCJURVhUVVJFMVwiLDMzOTg2OlwiVEVYVFVSRTJcIiwzMzk4NzpcIlRFWFRVUkUzXCIsMzM5ODg6XCJURVhUVVJFNFwiLDMzOTg5OlwiVEVYVFVSRTVcIiwzMzk5MDpcIlRFWFRVUkU2XCIsMzM5OTE6XCJURVhUVVJFN1wiLDMzOTkyOlwiVEVYVFVSRThcIiwzMzk5MzpcIlRFWFRVUkU5XCIsMzM5OTQ6XCJURVhUVVJFMTBcIiwzMzk5NTpcIlRFWFRVUkUxMVwiLDMzOTk2OlwiVEVYVFVSRTEyXCIsMzM5OTc6XCJURVhUVVJFMTNcIiwzMzk5ODpcIlRFWFRVUkUxNFwiLDMzOTk5OlwiVEVYVFVSRTE1XCIsMzQwMDA6XCJURVhUVVJFMTZcIiwzNDAwMTpcIlRFWFRVUkUxN1wiLDM0MDAyOlwiVEVYVFVSRTE4XCIsMzQwMDM6XCJURVhUVVJFMTlcIiwzNDAwNDpcIlRFWFRVUkUyMFwiLDM0MDA1OlwiVEVYVFVSRTIxXCIsMzQwMDY6XCJURVhUVVJFMjJcIiwzNDAwNzpcIlRFWFRVUkUyM1wiLDM0MDA4OlwiVEVYVFVSRTI0XCIsMzQwMDk6XCJURVhUVVJFMjVcIiwzNDAxMDpcIlRFWFRVUkUyNlwiLDM0MDExOlwiVEVYVFVSRTI3XCIsMzQwMTI6XCJURVhUVVJFMjhcIiwzNDAxMzpcIlRFWFRVUkUyOVwiLDM0MDE0OlwiVEVYVFVSRTMwXCIsMzQwMTU6XCJURVhUVVJFMzFcIiwzNDAxNjpcIkFDVElWRV9URVhUVVJFXCIsMzQwMjQ6XCJNQVhfUkVOREVSQlVGRkVSX1NJWkVcIiwzNDA0MTpcIkRFUFRIX1NURU5DSUxcIiwzNDA1NTpcIklOQ1JfV1JBUFwiLDM0MDU2OlwiREVDUl9XUkFQXCIsMzQwNjc6XCJURVhUVVJFX0NVQkVfTUFQXCIsMzQwNjg6XCJURVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVBcIiwzNDA2OTpcIlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWFwiLDM0MDcwOlwiVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YXCIsMzQwNzE6XCJURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1lcIiwzNDA3MjpcIlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWVwiLDM0MDczOlwiVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aXCIsMzQwNzQ6XCJURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1pcIiwzNDA3NjpcIk1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkVcIiwzNDMzODpcIlZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRFwiLDM0MzM5OlwiVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFXCIsMzQzNDA6XCJWRVJURVhfQVRUUklCX0FSUkFZX1NUUklERVwiLDM0MzQxOlwiVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFXCIsMzQzNDI6XCJDVVJSRU5UX1ZFUlRFWF9BVFRSSUJcIiwzNDM3MzpcIlZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUlwiLDM0NDY2OlwiTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTXCIsMzQ0Njc6XCJDT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUU1wiLDM0NjYwOlwiQlVGRkVSX1NJWkVcIiwzNDY2MTpcIkJVRkZFUl9VU0FHRVwiLDM0ODE2OlwiU1RFTkNJTF9CQUNLX0ZVTkNcIiwzNDgxNzpcIlNURU5DSUxfQkFDS19GQUlMXCIsMzQ4MTg6XCJTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMXCIsMzQ4MTk6XCJTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTXCIsMzQ4Nzc6XCJCTEVORF9FUVVBVElPTl9BTFBIQVwiLDM0OTIxOlwiTUFYX1ZFUlRFWF9BVFRSSUJTXCIsMzQ5MjI6XCJWRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRURcIiwzNDkzMDpcIk1BWF9URVhUVVJFX0lNQUdFX1VOSVRTXCIsMzQ5NjI6XCJBUlJBWV9CVUZGRVJcIiwzNDk2MzpcIkVMRU1FTlRfQVJSQVlfQlVGRkVSXCIsMzQ5NjQ6XCJBUlJBWV9CVUZGRVJfQklORElOR1wiLDM0OTY1OlwiRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElOR1wiLDM0OTc1OlwiVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElOR1wiLDM1MDQwOlwiU1RSRUFNX0RSQVdcIiwzNTA0NDpcIlNUQVRJQ19EUkFXXCIsMzUwNDg6XCJEWU5BTUlDX0RSQVdcIiwzNTYzMjpcIkZSQUdNRU5UX1NIQURFUlwiLDM1NjMzOlwiVkVSVEVYX1NIQURFUlwiLDM1NjYwOlwiTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTXCIsMzU2NjE6XCJNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU1wiLDM1NjYzOlwiU0hBREVSX1RZUEVcIiwzNTY2NDpcIkZMT0FUX1ZFQzJcIiwzNTY2NTpcIkZMT0FUX1ZFQzNcIiwzNTY2NjpcIkZMT0FUX1ZFQzRcIiwzNTY2NzpcIklOVF9WRUMyXCIsMzU2Njg6XCJJTlRfVkVDM1wiLDM1NjY5OlwiSU5UX1ZFQzRcIiwzNTY3MDpcIkJPT0xcIiwzNTY3MTpcIkJPT0xfVkVDMlwiLDM1NjcyOlwiQk9PTF9WRUMzXCIsMzU2NzM6XCJCT09MX1ZFQzRcIiwzNTY3NDpcIkZMT0FUX01BVDJcIiwzNTY3NTpcIkZMT0FUX01BVDNcIiwzNTY3NjpcIkZMT0FUX01BVDRcIiwzNTY3ODpcIlNBTVBMRVJfMkRcIiwzNTY4MDpcIlNBTVBMRVJfQ1VCRVwiLDM1NzEyOlwiREVMRVRFX1NUQVRVU1wiLDM1NzEzOlwiQ09NUElMRV9TVEFUVVNcIiwzNTcxNDpcIkxJTktfU1RBVFVTXCIsMzU3MTU6XCJWQUxJREFURV9TVEFUVVNcIiwzNTcxNjpcIklORk9fTE9HX0xFTkdUSFwiLDM1NzE3OlwiQVRUQUNIRURfU0hBREVSU1wiLDM1NzE4OlwiQUNUSVZFX1VOSUZPUk1TXCIsMzU3MTk6XCJBQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIXCIsMzU3MjA6XCJTSEFERVJfU09VUkNFX0xFTkdUSFwiLDM1NzIxOlwiQUNUSVZFX0FUVFJJQlVURVNcIiwzNTcyMjpcIkFDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSFwiLDM1NzI0OlwiU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OXCIsMzU3MjU6XCJDVVJSRU5UX1BST0dSQU1cIiwzNjAwMzpcIlNURU5DSUxfQkFDS19SRUZcIiwzNjAwNDpcIlNURU5DSUxfQkFDS19WQUxVRV9NQVNLXCIsMzYwMDU6XCJTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLXCIsMzYwMDY6XCJGUkFNRUJVRkZFUl9CSU5ESU5HXCIsMzYwMDc6XCJSRU5ERVJCVUZGRVJfQklORElOR1wiLDM2MDQ4OlwiRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRVwiLDM2MDQ5OlwiRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRVwiLDM2MDUwOlwiRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMXCIsMzYwNTE6XCJGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRVwiLDM2MDUzOlwiRlJBTUVCVUZGRVJfQ09NUExFVEVcIiwzNjA1NDpcIkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVFwiLDM2MDU1OlwiRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlRcIiwzNjA1NzpcIkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OU1wiLDM2MDYxOlwiRlJBTUVCVUZGRVJfVU5TVVBQT1JURURcIiwzNjA2NDpcIkNPTE9SX0FUVEFDSE1FTlQwXCIsMzYwOTY6XCJERVBUSF9BVFRBQ0hNRU5UXCIsMzYxMjg6XCJTVEVOQ0lMX0FUVEFDSE1FTlRcIiwzNjE2MDpcIkZSQU1FQlVGRkVSXCIsMzYxNjE6XCJSRU5ERVJCVUZGRVJcIiwzNjE2MjpcIlJFTkRFUkJVRkZFUl9XSURUSFwiLDM2MTYzOlwiUkVOREVSQlVGRkVSX0hFSUdIVFwiLDM2MTY0OlwiUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVFwiLDM2MTY4OlwiU1RFTkNJTF9JTkRFWDhcIiwzNjE3NjpcIlJFTkRFUkJVRkZFUl9SRURfU0laRVwiLDM2MTc3OlwiUkVOREVSQlVGRkVSX0dSRUVOX1NJWkVcIiwzNjE3ODpcIlJFTkRFUkJVRkZFUl9CTFVFX1NJWkVcIiwzNjE3OTpcIlJFTkRFUkJVRkZFUl9BTFBIQV9TSVpFXCIsMzYxODA6XCJSRU5ERVJCVUZGRVJfREVQVEhfU0laRVwiLDM2MTgxOlwiUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRVwiLDM2MTk0OlwiUkdCNTY1XCIsMzYzMzY6XCJMT1dfRkxPQVRcIiwzNjMzNzpcIk1FRElVTV9GTE9BVFwiLDM2MzM4OlwiSElHSF9GTE9BVFwiLDM2MzM5OlwiTE9XX0lOVFwiLDM2MzQwOlwiTUVESVVNX0lOVFwiLDM2MzQxOlwiSElHSF9JTlRcIiwzNjM0NjpcIlNIQURFUl9DT01QSUxFUlwiLDM2MzQ3OlwiTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlNcIiwzNjM0ODpcIk1BWF9WQVJZSU5HX1ZFQ1RPUlNcIiwzNjM0OTpcIk1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlNcIiwzNzQ0MDpcIlVOUEFDS19GTElQX1lfV0VCR0xcIiwzNzQ0MTpcIlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTFwiLDM3NDQyOlwiQ09OVEVYVF9MT1NUX1dFQkdMXCIsMzc0NDM6XCJVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMXCIsMzc0NDQ6XCJCUk9XU0VSX0RFRkFVTFRfV0VCR0xcIn19LHt9XSwyNDM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi8xLjAvbnVtYmVyc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5bdF19fSx7XCIuLzEuMC9udW1iZXJzXCI6MjQyfV0sMjQ0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUpLG89aShlLFt7YnVmZmVyOnIsdHlwZTplLkZMT0FULHNpemU6MyxvZmZzZXQ6MCxzdHJpZGU6NDB9LHtidWZmZXI6cix0eXBlOmUuRkxPQVQsc2l6ZTo0LG9mZnNldDoxMixzdHJpZGU6NDB9LHtidWZmZXI6cix0eXBlOmUuRkxPQVQsc2l6ZTozLG9mZnNldDoyOCxzdHJpZGU6NDB9XSksbD1hKGUpO2wuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGwuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0xLGwuYXR0cmlidXRlcy5vZmZzZXQubG9jYXRpb249Mjt2YXIgYz1uZXcgcyhlLHIsbyxsKTtyZXR1cm4gYy51cGRhdGUodCksY307dmFyIG49dChcImdsLWJ1ZmZlclwiKSxpPXQoXCJnbC12YW9cIiksYT10KFwiLi9zaGFkZXJzL2luZGV4XCIpLG89WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIHModCxlLHIsbil7dGhpcy5nbD10LHRoaXMuc2hhZGVyPW4sdGhpcy5idWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmxpbmVXaWR0aD1bMSwxLDFdLHRoaXMuY2FwU2l6ZT1bMTAsMTAsMTBdLHRoaXMubGluZUNvdW50PVswLDAsMF0sdGhpcy5saW5lT2Zmc2V0PVswLDAsMF0sdGhpcy5vcGFjaXR5PTEsdGhpcy5oYXNBbHBoYT0hMX12YXIgbD1zLnByb3RvdHlwZTtmdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciByPTA7cjwzOysrcil0WzBdW3JdPU1hdGgubWluKHRbMF1bcl0sZVtyXSksdFsxXVtyXT1NYXRoLm1heCh0WzFdW3JdLGVbcl0pfWwuaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5oYXNBbHBoYX0sbC5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzQWxwaGF9LGwuZHJhd1RyYW5zcGFyZW50PWwuZHJhdz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsLHI9dGhpcy5zaGFkZXIudW5pZm9ybXM7dGhpcy5zaGFkZXIuYmluZCgpO3ZhciBuPXIudmlldz10LnZpZXd8fG8saT1yLnByb2plY3Rpb249dC5wcm9qZWN0aW9ufHxvO3IubW9kZWw9dC5tb2RlbHx8byxyLmNsaXBCb3VuZHM9dGhpcy5jbGlwQm91bmRzLHIub3BhY2l0eT10aGlzLm9wYWNpdHk7dmFyIGE9blsxMl0scz1uWzEzXSxsPW5bMTRdLGM9blsxNV0sdT0odC5fb3J0aG98fCExPzI6MSkqdGhpcy5waXhlbFJhdGlvKihpWzNdKmEraVs3XSpzK2lbMTFdKmwraVsxNV0qYykvZS5kcmF3aW5nQnVmZmVySGVpZ2h0O3RoaXMudmFvLmJpbmQoKTtmb3IodmFyIGg9MDtoPDM7KytoKWUubGluZVdpZHRoKHRoaXMubGluZVdpZHRoW2hdKnRoaXMucGl4ZWxSYXRpbyksci5jYXBTaXplPXRoaXMuY2FwU2l6ZVtoXSp1LHRoaXMubGluZUNvdW50W2hdJiZlLmRyYXdBcnJheXMoZS5MSU5FUyx0aGlzLmxpbmVPZmZzZXRbaF0sdGhpcy5saW5lQ291bnRbaF0pO3RoaXMudmFvLnVuYmluZCgpfTt2YXIgdT1mdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgQXJyYXkoMyksZT0wO2U8MzsrK2Upe2Zvcih2YXIgcj1bXSxuPTE7bjw9MjsrK24pZm9yKHZhciBpPS0xO2k8PTE7aSs9Mil7dmFyIGE9WzAsMCwwXTthWyhuK2UpJTNdPWksci5wdXNoKGEpfXRbZV09cn1yZXR1cm4gdH0oKTtmdW5jdGlvbiBoKHQsZSxyLG4pe2Zvcih2YXIgaT11W25dLGE9MDthPGkubGVuZ3RoOysrYSl7dmFyIG89aVthXTt0LnB1c2goZVswXSxlWzFdLGVbMl0sclswXSxyWzFdLHJbMl0sclszXSxvWzBdLG9bMV0sb1syXSl9cmV0dXJuIGkubGVuZ3RofWwudXBkYXRlPWZ1bmN0aW9uKHQpe1wibGluZVdpZHRoXCJpbih0PXR8fHt9KSYmKHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRoLEFycmF5LmlzQXJyYXkodGhpcy5saW5lV2lkdGgpfHwodGhpcy5saW5lV2lkdGg9W3RoaXMubGluZVdpZHRoLHRoaXMubGluZVdpZHRoLHRoaXMubGluZVdpZHRoXSkpLFwiY2FwU2l6ZVwiaW4gdCYmKHRoaXMuY2FwU2l6ZT10LmNhcFNpemUsQXJyYXkuaXNBcnJheSh0aGlzLmNhcFNpemUpfHwodGhpcy5jYXBTaXplPVt0aGlzLmNhcFNpemUsdGhpcy5jYXBTaXplLHRoaXMuY2FwU2l6ZV0pKSx0aGlzLmhhc0FscGhhPSExLFwib3BhY2l0eVwiaW4gdCYmKHRoaXMub3BhY2l0eT0rdC5vcGFjaXR5LHRoaXMub3BhY2l0eTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpO3ZhciBlPXQuY29sb3J8fFtbMCwwLDBdLFswLDAsMF0sWzAsMCwwXV0scj10LnBvc2l0aW9uLG49dC5lcnJvcjtpZihBcnJheS5pc0FycmF5KGVbMF0pfHwoZT1bZSxlLGVdKSxyJiZuKXt2YXIgaT1bXSxhPXIubGVuZ3RoLG89MDt0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmxpbmVDb3VudD1bMCwwLDBdO2Zvcih2YXIgcz0wO3M8MzsrK3Mpe3RoaXMubGluZU9mZnNldFtzXT1vO3Q6Zm9yKHZhciBsPTA7bDxhOysrbCl7Zm9yKHZhciB1PXJbbF0sZj0wO2Y8MzsrK2YpaWYoaXNOYU4odVtmXSl8fCFpc0Zpbml0ZSh1W2ZdKSljb250aW51ZSB0O3ZhciBwPW5bbF0sZD1lW3NdO2lmKEFycmF5LmlzQXJyYXkoZFswXSkmJihkPWVbbF0pLDM9PT1kLmxlbmd0aD9kPVtkWzBdLGRbMV0sZFsyXSwxXTo0PT09ZC5sZW5ndGgmJihkPVtkWzBdLGRbMV0sZFsyXSxkWzNdXSwhdGhpcy5oYXNBbHBoYSYmZFszXTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpLCFpc05hTihwWzBdW3NdKSYmIWlzTmFOKHBbMV1bc10pKXt2YXIgZztpZihwWzBdW3NdPDApKGc9dS5zbGljZSgpKVtzXSs9cFswXVtzXSxpLnB1c2godVswXSx1WzFdLHVbMl0sZFswXSxkWzFdLGRbMl0sZFszXSwwLDAsMCxnWzBdLGdbMV0sZ1syXSxkWzBdLGRbMV0sZFsyXSxkWzNdLDAsMCwwKSxjKHRoaXMuYm91bmRzLGcpLG8rPTIraChpLGcsZCxzKTtpZihwWzFdW3NdPjApKGc9dS5zbGljZSgpKVtzXSs9cFsxXVtzXSxpLnB1c2godVswXSx1WzFdLHVbMl0sZFswXSxkWzFdLGRbMl0sZFszXSwwLDAsMCxnWzBdLGdbMV0sZ1syXSxkWzBdLGRbMV0sZFsyXSxkWzNdLDAsMCwwKSxjKHRoaXMuYm91bmRzLGcpLG8rPTIraChpLGcsZCxzKX19dGhpcy5saW5lQ291bnRbc109by10aGlzLmxpbmVPZmZzZXRbc119dGhpcy5idWZmZXIudXBkYXRlKGkpfX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnZhby5kaXNwb3NlKCl9fSx7XCIuL3NoYWRlcnMvaW5kZXhcIjoyNDUsXCJnbC1idWZmZXJcIjoyMzgsXCJnbC12YW9cIjozMjB9XSwyNDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2xzbGlmeVwiKSxpPXQoXCJnbC1zaGFkZXJcIiksYT1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uLCBvZmZzZXQ7XFxuYXR0cmlidXRlIHZlYzQgY29sb3I7XFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcbnVuaWZvcm0gZmxvYXQgY2FwU2l6ZTtcXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xcbnZhcnlpbmcgdmVjMyBmcmFnUG9zaXRpb247XFxuXFxudm9pZCBtYWluKCkge1xcbiAgdmVjNCB3b3JsZFBvc2l0aW9uICA9IG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG4gIHdvcmxkUG9zaXRpb24gICAgICAgPSAod29ybGRQb3NpdGlvbiAvIHdvcmxkUG9zaXRpb24udykgKyB2ZWM0KGNhcFNpemUgKiBvZmZzZXQsIDAuMCk7XFxuICBnbF9Qb3NpdGlvbiAgICAgICAgID0gcHJvamVjdGlvbiAqIHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xcbiAgZnJhZ0NvbG9yICAgICAgICAgICA9IGNvbG9yO1xcbiAgZnJhZ1Bvc2l0aW9uICAgICAgICA9IHBvc2l0aW9uO1xcbn1cIl0pLG89bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcXG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xcbn1cXG5cXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxudmFyeWluZyB2ZWMzIGZyYWdQb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmIChcXG4gICAgb3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBmcmFnUG9zaXRpb24pIHx8XFxuICAgIGZyYWdDb2xvci5hICogb3BhY2l0eSA9PSAwLlxcbiAgKSBkaXNjYXJkO1xcblxcbiAgZ2xfRnJhZ0NvbG9yID0gb3BhY2l0eSAqIGZyYWdDb2xvcjtcXG59XCJdKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxhLG8sbnVsbCxbe25hbWU6XCJwb3NpdGlvblwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwiY29sb3JcIix0eXBlOlwidmVjNFwifSx7bmFtZTpcIm9mZnNldFwiLHR5cGU6XCJ2ZWMzXCJ9XSl9fSx7XCJnbC1zaGFkZXJcIjoyOTgsZ2xzbGlmeTo0MDJ9XSwyNDY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2wtdGV4dHVyZTJkXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtpfHwoaT10LkZSQU1FQlVGRkVSX1VOU1VQUE9SVEVELGE9dC5GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQsbz10LkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyxzPXQuRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQpO3ZhciBjPXQuZ2V0RXh0ZW5zaW9uKFwiV0VCR0xfZHJhd19idWZmZXJzXCIpOyFsJiZjJiZmdW5jdGlvbih0LGUpe3ZhciByPXQuZ2V0UGFyYW1ldGVyKGUuTUFYX0NPTE9SX0FUVEFDSE1FTlRTX1dFQkdMKTtsPW5ldyBBcnJheShyKzEpO2Zvcih2YXIgbj0wO248PXI7KytuKXtmb3IodmFyIGk9bmV3IEFycmF5KHIpLGE9MDthPG47KythKWlbYV09dC5DT0xPUl9BVFRBQ0hNRU5UMCthO2Zvcih2YXIgYT1uO2E8cjsrK2EpaVthXT10Lk5PTkU7bFtuXT1pfX0odCxjKTtBcnJheS5pc0FycmF5KGUpJiYobj1yLHI9MHxlWzFdLGU9MHxlWzBdKTtpZihcIm51bWJlclwiIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoXCJnbC1mYm86IE1pc3Npbmcgc2hhcGUgcGFyYW1ldGVyXCIpO3ZhciB1PXQuZ2V0UGFyYW1ldGVyKHQuTUFYX1JFTkRFUkJVRkZFUl9TSVpFKTtpZihlPDB8fGU+dXx8cjwwfHxyPnUpdGhyb3cgbmV3IEVycm9yKFwiZ2wtZmJvOiBQYXJhbWV0ZXJzIGFyZSB0b28gbGFyZ2UgZm9yIEZCT1wiKTt2YXIgaD0xO2lmKFwiY29sb3JcImluKG49bnx8e30pKXtpZigoaD1NYXRoLm1heCgwfG4uY29sb3IsMCkpPDApdGhyb3cgbmV3IEVycm9yKFwiZ2wtZmJvOiBNdXN0IHNwZWNpZnkgYSBub25uZWdhdGl2ZSBudW1iZXIgb2YgY29sb3JzXCIpO2lmKGg+MSl7aWYoIWMpdGhyb3cgbmV3IEVycm9yKFwiZ2wtZmJvOiBNdWx0aXBsZSBkcmF3IGJ1ZmZlciBleHRlbnNpb24gbm90IHN1cHBvcnRlZFwiKTtpZihoPnQuZ2V0UGFyYW1ldGVyKGMuTUFYX0NPTE9SX0FUVEFDSE1FTlRTX1dFQkdMKSl0aHJvdyBuZXcgRXJyb3IoXCJnbC1mYm86IENvbnRleHQgZG9lcyBub3Qgc3VwcG9ydCBcIitoK1wiIGRyYXcgYnVmZmVyc1wiKX19dmFyIGY9dC5VTlNJR05FRF9CWVRFLHA9dC5nZXRFeHRlbnNpb24oXCJPRVNfdGV4dHVyZV9mbG9hdFwiKTtpZihuLmZsb2F0JiZoPjApe2lmKCFwKXRocm93IG5ldyBFcnJvcihcImdsLWZibzogQ29udGV4dCBkb2VzIG5vdCBzdXBwb3J0IGZsb2F0aW5nIHBvaW50IHRleHR1cmVzXCIpO2Y9dC5GTE9BVH1lbHNlIG4ucHJlZmVyRmxvYXQmJmg+MCYmcCYmKGY9dC5GTE9BVCk7dmFyIGc9ITA7XCJkZXB0aFwiaW4gbiYmKGc9ISFuLmRlcHRoKTt2YXIgdj0hMTtcInN0ZW5jaWxcImluIG4mJih2PSEhbi5zdGVuY2lsKTtyZXR1cm4gbmV3IGQodCxlLHIsZixoLGcsdixjKX07dmFyIGksYSxvLHMsbD1udWxsO2Z1bmN0aW9uIGModCl7cmV0dXJuW3QuZ2V0UGFyYW1ldGVyKHQuRlJBTUVCVUZGRVJfQklORElORyksdC5nZXRQYXJhbWV0ZXIodC5SRU5ERVJCVUZGRVJfQklORElORyksdC5nZXRQYXJhbWV0ZXIodC5URVhUVVJFX0JJTkRJTkdfMkQpXX1mdW5jdGlvbiB1KHQsZSl7dC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUixlWzBdKSx0LmJpbmRSZW5kZXJidWZmZXIodC5SRU5ERVJCVUZGRVIsZVsxXSksdC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsZVsyXSl9ZnVuY3Rpb24gaCh0KXtzd2l0Y2godCl7Y2FzZSBpOnRocm93IG5ldyBFcnJvcihcImdsLWZibzogRnJhbWVidWZmZXIgdW5zdXBwb3J0ZWRcIik7Y2FzZSBhOnRocm93IG5ldyBFcnJvcihcImdsLWZibzogRnJhbWVidWZmZXIgaW5jb21wbGV0ZSBhdHRhY2htZW50XCIpO2Nhc2Ugbzp0aHJvdyBuZXcgRXJyb3IoXCJnbC1mYm86IEZyYW1lYnVmZmVyIGluY29tcGxldGUgZGltZW5zaW9uc1wiKTtjYXNlIHM6dGhyb3cgbmV3IEVycm9yKFwiZ2wtZmJvOiBGcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIG1pc3NpbmcgYXR0YWNobWVudFwiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImdsLWZibzogRnJhbWVidWZmZXIgZmFpbGVkIGZvciB1bnNwZWNpZmllZCByZWFzb25cIil9fWZ1bmN0aW9uIGYodCxlLHIsaSxhLG8pe2lmKCFpKXJldHVybiBudWxsO3ZhciBzPW4odCxlLHIsYSxpKTtyZXR1cm4gcy5tYWdGaWx0ZXI9dC5ORUFSRVNULHMubWluRmlsdGVyPXQuTkVBUkVTVCxzLm1pcFNhbXBsZXM9MSxzLmJpbmQoKSx0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKHQuRlJBTUVCVUZGRVIsbyx0LlRFWFRVUkVfMkQscy5oYW5kbGUsMCksc31mdW5jdGlvbiBwKHQsZSxyLG4saSl7dmFyIGE9dC5jcmVhdGVSZW5kZXJidWZmZXIoKTtyZXR1cm4gdC5iaW5kUmVuZGVyYnVmZmVyKHQuUkVOREVSQlVGRkVSLGEpLHQucmVuZGVyYnVmZmVyU3RvcmFnZSh0LlJFTkRFUkJVRkZFUixuLGUsciksdC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0LkZSQU1FQlVGRkVSLGksdC5SRU5ERVJCVUZGRVIsYSksYX1mdW5jdGlvbiBkKHQsZSxyLG4saSxhLG8scyl7dGhpcy5nbD10LHRoaXMuX3NoYXBlPVswfGUsMHxyXSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZXh0PXMsdGhpcy5jb2xvcj1uZXcgQXJyYXkoaSk7Zm9yKHZhciBkPTA7ZDxpOysrZCl0aGlzLmNvbG9yW2RdPW51bGw7dGhpcy5fY29sb3JfcmI9bnVsbCx0aGlzLmRlcHRoPW51bGwsdGhpcy5fZGVwdGhfcmI9bnVsbCx0aGlzLl9jb2xvclR5cGU9bix0aGlzLl91c2VEZXB0aD1hLHRoaXMuX3VzZVN0ZW5jaWw9bzt2YXIgZz10aGlzLHY9WzB8ZSwwfHJdO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHYsezA6e2dldDpmdW5jdGlvbigpe3JldHVybiBnLl9zaGFwZVswXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBnLndpZHRoPXR9fSwxOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5fc2hhcGVbMV19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gZy5oZWlnaHQ9dH19fSksdGhpcy5fc2hhcGVWZWN0b3I9dixmdW5jdGlvbih0KXt2YXIgZT1jKHQuZ2wpLHI9dC5nbCxuPXQuaGFuZGxlPXIuY3JlYXRlRnJhbWVidWZmZXIoKSxpPXQuX3NoYXBlWzBdLGE9dC5fc2hhcGVbMV0sbz10LmNvbG9yLmxlbmd0aCxzPXQuX2V4dCxkPXQuX3VzZVN0ZW5jaWwsZz10Ll91c2VEZXB0aCx2PXQuX2NvbG9yVHlwZTtyLmJpbmRGcmFtZWJ1ZmZlcihyLkZSQU1FQlVGRkVSLG4pO2Zvcih2YXIgbT0wO208bzsrK20pdC5jb2xvclttXT1mKHIsaSxhLHYsci5SR0JBLHIuQ09MT1JfQVRUQUNITUVOVDArbSk7MD09PW8/KHQuX2NvbG9yX3JiPXAocixpLGEsci5SR0JBNCxyLkNPTE9SX0FUVEFDSE1FTlQwKSxzJiZzLmRyYXdCdWZmZXJzV0VCR0wobFswXSkpOm8+MSYmcy5kcmF3QnVmZmVyc1dFQkdMKGxbb10pO3ZhciB5PXIuZ2V0RXh0ZW5zaW9uKFwiV0VCR0xfZGVwdGhfdGV4dHVyZVwiKTt5P2Q/dC5kZXB0aD1mKHIsaSxhLHkuVU5TSUdORURfSU5UXzI0XzhfV0VCR0wsci5ERVBUSF9TVEVOQ0lMLHIuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKTpnJiYodC5kZXB0aD1mKHIsaSxhLHIuVU5TSUdORURfU0hPUlQsci5ERVBUSF9DT01QT05FTlQsci5ERVBUSF9BVFRBQ0hNRU5UKSk6ZyYmZD90Ll9kZXB0aF9yYj1wKHIsaSxhLHIuREVQVEhfU1RFTkNJTCxyLkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCk6Zz90Ll9kZXB0aF9yYj1wKHIsaSxhLHIuREVQVEhfQ09NUE9ORU5UMTYsci5ERVBUSF9BVFRBQ0hNRU5UKTpkJiYodC5fZGVwdGhfcmI9cChyLGksYSxyLlNURU5DSUxfSU5ERVgsci5TVEVOQ0lMX0FUVEFDSE1FTlQpKTt2YXIgeD1yLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoci5GUkFNRUJVRkZFUik7aWYoeCE9PXIuRlJBTUVCVUZGRVJfQ09NUExFVEUpe2Zvcih0Ll9kZXN0cm95ZWQ9ITAsci5iaW5kRnJhbWVidWZmZXIoci5GUkFNRUJVRkZFUixudWxsKSxyLmRlbGV0ZUZyYW1lYnVmZmVyKHQuaGFuZGxlKSx0LmhhbmRsZT1udWxsLHQuZGVwdGgmJih0LmRlcHRoLmRpc3Bvc2UoKSx0LmRlcHRoPW51bGwpLHQuX2RlcHRoX3JiJiYoci5kZWxldGVSZW5kZXJidWZmZXIodC5fZGVwdGhfcmIpLHQuX2RlcHRoX3JiPW51bGwpLG09MDttPHQuY29sb3IubGVuZ3RoOysrbSl0LmNvbG9yW21dLmRpc3Bvc2UoKSx0LmNvbG9yW21dPW51bGw7dC5fY29sb3JfcmImJihyLmRlbGV0ZVJlbmRlcmJ1ZmZlcih0Ll9jb2xvcl9yYiksdC5fY29sb3JfcmI9bnVsbCksdShyLGUpLGgoeCl9dShyLGUpfSh0aGlzKX12YXIgZz1kLnByb3RvdHlwZTtmdW5jdGlvbiB2KHQsZSxyKXtpZih0Ll9kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKFwiZ2wtZmJvOiBDYW4ndCByZXNpemUgZGVzdHJveWVkIEZCT1wiKTtpZih0Ll9zaGFwZVswXSE9PWV8fHQuX3NoYXBlWzFdIT09cil7dmFyIG49dC5nbCxpPW4uZ2V0UGFyYW1ldGVyKG4uTUFYX1JFTkRFUkJVRkZFUl9TSVpFKTtpZihlPDB8fGU+aXx8cjwwfHxyPmkpdGhyb3cgbmV3IEVycm9yKFwiZ2wtZmJvOiBDYW4ndCByZXNpemUgRkJPLCBpbnZhbGlkIGRpbWVuc2lvbnNcIik7dC5fc2hhcGVbMF09ZSx0Ll9zaGFwZVsxXT1yO2Zvcih2YXIgYT1jKG4pLG89MDtvPHQuY29sb3IubGVuZ3RoOysrbyl0LmNvbG9yW29dLnNoYXBlPXQuX3NoYXBlO3QuX2NvbG9yX3JiJiYobi5iaW5kUmVuZGVyYnVmZmVyKG4uUkVOREVSQlVGRkVSLHQuX2NvbG9yX3JiKSxuLnJlbmRlcmJ1ZmZlclN0b3JhZ2Uobi5SRU5ERVJCVUZGRVIsbi5SR0JBNCx0Ll9zaGFwZVswXSx0Ll9zaGFwZVsxXSkpLHQuZGVwdGgmJih0LmRlcHRoLnNoYXBlPXQuX3NoYXBlKSx0Ll9kZXB0aF9yYiYmKG4uYmluZFJlbmRlcmJ1ZmZlcihuLlJFTkRFUkJVRkZFUix0Ll9kZXB0aF9yYiksdC5fdXNlRGVwdGgmJnQuX3VzZVN0ZW5jaWw/bi5yZW5kZXJidWZmZXJTdG9yYWdlKG4uUkVOREVSQlVGRkVSLG4uREVQVEhfU1RFTkNJTCx0Ll9zaGFwZVswXSx0Ll9zaGFwZVsxXSk6dC5fdXNlRGVwdGg/bi5yZW5kZXJidWZmZXJTdG9yYWdlKG4uUkVOREVSQlVGRkVSLG4uREVQVEhfQ09NUE9ORU5UMTYsdC5fc2hhcGVbMF0sdC5fc2hhcGVbMV0pOnQuX3VzZVN0ZW5jaWwmJm4ucmVuZGVyYnVmZmVyU3RvcmFnZShuLlJFTkRFUkJVRkZFUixuLlNURU5DSUxfSU5ERVgsdC5fc2hhcGVbMF0sdC5fc2hhcGVbMV0pKSxuLmJpbmRGcmFtZWJ1ZmZlcihuLkZSQU1FQlVGRkVSLHQuaGFuZGxlKTt2YXIgcz1uLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMobi5GUkFNRUJVRkZFUik7cyE9PW4uRlJBTUVCVUZGRVJfQ09NUExFVEUmJih0LmRpc3Bvc2UoKSx1KG4sYSksaChzKSksdShuLGEpfX1PYmplY3QuZGVmaW5lUHJvcGVydGllcyhnLHtzaGFwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZD9bMCwwXTp0aGlzLl9zaGFwZVZlY3Rvcn0sc2V0OmZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCl8fCh0PVswfHQsMHx0XSksMiE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImdsLWZibzogU2hhcGUgdmVjdG9yIG11c3QgYmUgbGVuZ3RoIDJcIik7dmFyIGU9MHx0WzBdLHI9MHx0WzFdO3JldHVybiB2KHRoaXMsZSxyKSxbZSxyXX0sZW51bWVyYWJsZTohMX0sd2lkdGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZXN0cm95ZWQ/MDp0aGlzLl9zaGFwZVswXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB2KHRoaXMsdHw9MCx0aGlzLl9zaGFwZVsxXSksdH0sZW51bWVyYWJsZTohMX0saGVpZ2h0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkPzA6dGhpcy5fc2hhcGVbMV19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdHw9MCx2KHRoaXMsdGhpcy5fc2hhcGVbMF0sdCksdH0sZW51bWVyYWJsZTohMX19KSxnLmJpbmQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fZGVzdHJveWVkKXt2YXIgdD10aGlzLmdsO3QuYmluZEZyYW1lYnVmZmVyKHQuRlJBTUVCVUZGRVIsdGhpcy5oYW5kbGUpLHQudmlld3BvcnQoMCwwLHRoaXMuX3NoYXBlWzBdLHRoaXMuX3NoYXBlWzFdKX19LGcuZGlzcG9zZT1mdW5jdGlvbigpe2lmKCF0aGlzLl9kZXN0cm95ZWQpe3RoaXMuX2Rlc3Ryb3llZD0hMDt2YXIgdD10aGlzLmdsO3QuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5oYW5kbGUpLHRoaXMuaGFuZGxlPW51bGwsdGhpcy5kZXB0aCYmKHRoaXMuZGVwdGguZGlzcG9zZSgpLHRoaXMuZGVwdGg9bnVsbCksdGhpcy5fZGVwdGhfcmImJih0LmRlbGV0ZVJlbmRlcmJ1ZmZlcih0aGlzLl9kZXB0aF9yYiksdGhpcy5fZGVwdGhfcmI9bnVsbCk7Zm9yKHZhciBlPTA7ZTx0aGlzLmNvbG9yLmxlbmd0aDsrK2UpdGhpcy5jb2xvcltlXS5kaXNwb3NlKCksdGhpcy5jb2xvcltlXT1udWxsO3RoaXMuX2NvbG9yX3JiJiYodC5kZWxldGVSZW5kZXJidWZmZXIodGhpcy5fY29sb3JfcmIpLHRoaXMuX2NvbG9yX3JiPW51bGwpfX19LHtcImdsLXRleHR1cmUyZFwiOjMxNX1dLDI0NzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCJzcHJpbnRmLWpzXCIpLnNwcmludGYsaT10KFwiZ2wtY29uc3RhbnRzL2xvb2t1cFwiKSxhPXQoXCJnbHNsLXNoYWRlci1uYW1lXCIpLG89dChcImFkZC1saW5lLW51bWJlcnNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgcz1hKGUpfHxcIm9mIHVua25vd24gbmFtZSAoc2VlIG5wbSBnbHNsLXNoYWRlci1uYW1lKVwiLGw9XCJ1bmtub3duIHR5cGVcIjt2b2lkIDAhPT1yJiYobD1yPT09aS5GUkFHTUVOVF9TSEFERVI/XCJmcmFnbWVudFwiOlwidmVydGV4XCIpO2Zvcih2YXIgYz1uKFwiRXJyb3IgY29tcGlsaW5nICVzIHNoYWRlciAlczpcXG5cIixsLHMpLHU9bihcIiVzJXNcIixjLHQpLGg9dC5zcGxpdChcIlxcblwiKSxmPXt9LHA9MDtwPGgubGVuZ3RoO3ArKyl7dmFyIGQ9aFtwXTtpZihcIlwiIT09ZCYmXCJcXDBcIiE9PWQpe3ZhciBnPXBhcnNlSW50KGQuc3BsaXQoXCI6XCIpWzJdKTtpZihpc05hTihnKSl0aHJvdyBuZXcgRXJyb3IobihcIkNvdWxkIG5vdCBwYXJzZSBlcnJvcjogJXNcIixkKSk7ZltnXT1kfX1mb3IodmFyIHY9byhlKS5zcGxpdChcIlxcblwiKSxwPTA7cDx2Lmxlbmd0aDtwKyspaWYoZltwKzNdfHxmW3ArMl18fGZbcCsxXSl7dmFyIG09dltwXTtpZihjKz1tK1wiXFxuXCIsZltwKzFdKXt2YXIgeT1mW3ArMV07eT15LnN1YnN0cih5LnNwbGl0KFwiOlwiLDMpLmpvaW4oXCI6XCIpLmxlbmd0aCsxKS50cmltKCksYys9bihcIl5eXiAlc1xcblxcblwiLHkpfX1yZXR1cm57bG9uZzpjLnRyaW0oKSxzaG9ydDp1LnRyaW0oKX19fSx7XCJhZGQtbGluZS1udW1iZXJzXCI6NTIsXCJnbC1jb25zdGFudHMvbG9va3VwXCI6MjQzLFwiZ2xzbC1zaGFkZXItbmFtZVwiOjM5NCxcInNwcmludGYtanNcIjo1MTN9XSwyNDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdsLG49byhyLGwudmVydGV4LGwuZnJhZ21lbnQpLGk9byhyLGwucGlja1ZlcnRleCxsLnBpY2tGcmFnbWVudCksYT1zKHIpLHU9cyhyKSxoPXMociksZj1zKHIpLHA9bmV3IGModCxuLGksYSx1LGgsZik7cmV0dXJuIHAudXBkYXRlKGUpLHQuYWRkT2JqZWN0KHApLHB9O3ZhciBuPXQoXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiKSxpPXQoXCJpb3RhLWFycmF5XCIpLGE9dChcInR5cGVkYXJyYXktcG9vbFwiKSxvPXQoXCJnbC1zaGFkZXJcIikscz10KFwiZ2wtYnVmZmVyXCIpLGw9dChcIi4vbGliL3NoYWRlcnNcIik7ZnVuY3Rpb24gYyh0LGUscixuLGksYSxvKXt0aGlzLnBsb3Q9dCx0aGlzLnNoYWRlcj1lLHRoaXMucGlja1NoYWRlcj1yLHRoaXMucG9zaXRpb25CdWZmZXI9bix0aGlzLndlaWdodEJ1ZmZlcj1pLHRoaXMuY29sb3JCdWZmZXI9YSx0aGlzLmlkQnVmZmVyPW8sdGhpcy54RGF0YT1bXSx0aGlzLnlEYXRhPVtdLHRoaXMuc2hhcGU9WzAsMF0sdGhpcy5ib3VuZHM9WzEvMCwxLzAsLTEvMCwtMS8wXSx0aGlzLnBpY2tPZmZzZXQ9MH12YXIgdSxoPWMucHJvdG90eXBlLGY9WzAsMCwxLDAsMCwxLDEsMCwxLDEsMCwxXTtoLmRyYXc9KHU9WzEsMCwwLDAsMSwwLDAsMCwxXSxmdW5jdGlvbigpe3ZhciB0PXRoaXMucGxvdCxlPXRoaXMuc2hhZGVyLHI9dGhpcy5ib3VuZHMsbj10aGlzLm51bVZlcnRpY2VzO2lmKCEobjw9MCkpe3ZhciBpPXQuZ2wsYT10LmRhdGFCb3gsbz1yWzJdLXJbMF0scz1yWzNdLXJbMV0sbD1hWzJdLWFbMF0sYz1hWzNdLWFbMV07dVswXT0yKm8vbCx1WzRdPTIqcy9jLHVbNl09MiooclswXS1hWzBdKS9sLTEsdVs3XT0yKihyWzFdLWFbMV0pL2MtMSxlLmJpbmQoKTt2YXIgaD1lLnVuaWZvcm1zO2gudmlld1RyYW5zZm9ybT11LGguc2hhcGU9dGhpcy5zaGFwZTt2YXIgZj1lLmF0dHJpYnV0ZXM7dGhpcy5wb3NpdGlvbkJ1ZmZlci5iaW5kKCksZi5wb3NpdGlvbi5wb2ludGVyKCksdGhpcy53ZWlnaHRCdWZmZXIuYmluZCgpLGYud2VpZ2h0LnBvaW50ZXIoaS5VTlNJR05FRF9CWVRFLCExKSx0aGlzLmNvbG9yQnVmZmVyLmJpbmQoKSxmLmNvbG9yLnBvaW50ZXIoaS5VTlNJR05FRF9CWVRFLCEwKSxpLmRyYXdBcnJheXMoaS5UUklBTkdMRVMsMCxuKX19KSxoLmRyYXdQaWNrPWZ1bmN0aW9uKCl7dmFyIHQ9WzEsMCwwLDAsMSwwLDAsMCwxXSxlPVswLDAsMCwwXTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49dGhpcy5wbG90LGk9dGhpcy5waWNrU2hhZGVyLGE9dGhpcy5ib3VuZHMsbz10aGlzLm51bVZlcnRpY2VzO2lmKCEobzw9MCkpe3ZhciBzPW4uZ2wsbD1uLmRhdGFCb3gsYz1hWzJdLWFbMF0sdT1hWzNdLWFbMV0saD1sWzJdLWxbMF0sZj1sWzNdLWxbMV07dFswXT0yKmMvaCx0WzRdPTIqdS9mLHRbNl09MiooYVswXS1sWzBdKS9oLTEsdFs3XT0yKihhWzFdLWxbMV0pL2YtMTtmb3IodmFyIHA9MDtwPDQ7KytwKWVbcF09cj4+OCpwJjI1NTt0aGlzLnBpY2tPZmZzZXQ9cixpLmJpbmQoKTt2YXIgZD1pLnVuaWZvcm1zO2Qudmlld1RyYW5zZm9ybT10LGQucGlja09mZnNldD1lLGQuc2hhcGU9dGhpcy5zaGFwZTt2YXIgZz1pLmF0dHJpYnV0ZXM7cmV0dXJuIHRoaXMucG9zaXRpb25CdWZmZXIuYmluZCgpLGcucG9zaXRpb24ucG9pbnRlcigpLHRoaXMud2VpZ2h0QnVmZmVyLmJpbmQoKSxnLndlaWdodC5wb2ludGVyKHMuVU5TSUdORURfQllURSwhMSksdGhpcy5pZEJ1ZmZlci5iaW5kKCksZy5waWNrSWQucG9pbnRlcihzLlVOU0lHTkVEX0JZVEUsITEpLHMuZHJhd0FycmF5cyhzLlRSSUFOR0xFUywwLG8pLHIrdGhpcy5zaGFwZVswXSp0aGlzLnNoYXBlWzFdfX19KCksaC5waWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnBpY2tPZmZzZXQsaT10aGlzLnNoYXBlWzBdKnRoaXMuc2hhcGVbMV07aWYocjxufHxyPj1uK2kpcmV0dXJuIG51bGw7dmFyIGE9ci1uLG89dGhpcy54RGF0YSxzPXRoaXMueURhdGE7cmV0dXJue29iamVjdDp0aGlzLHBvaW50SWQ6YSxkYXRhQ29vcmQ6W29bYSV0aGlzLnNoYXBlWzBdXSxzW2EvdGhpcy5zaGFwZVswXXwwXV19fSxoLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuc2hhcGV8fFswLDBdLHI9dC54fHxpKGVbMF0pLG89dC55fHxpKGVbMV0pLHM9dC56fHxuZXcgRmxvYXQzMkFycmF5KGVbMF0qZVsxXSk7dGhpcy54RGF0YT1yLHRoaXMueURhdGE9bzt2YXIgbD10LmNvbG9yTGV2ZWxzfHxbMF0sYz10LmNvbG9yVmFsdWVzfHxbMCwwLDAsMV0sdT1sLmxlbmd0aCxoPXRoaXMuYm91bmRzLHA9aFswXT1yWzBdLGQ9aFsxXT1vWzBdLGc9MS8oKGhbMl09cltyLmxlbmd0aC0xXSktcCksdj0xLygoaFszXT1vW28ubGVuZ3RoLTFdKS1kKSxtPWVbMF0seT1lWzFdO3RoaXMuc2hhcGU9W20seV07dmFyIHg9KG0tMSkqKHktMSkqKGYubGVuZ3RoPj4+MSk7dGhpcy5udW1WZXJ0aWNlcz14O2Zvcih2YXIgYj1hLm1hbGxvY1VpbnQ4KDQqeCksXz1hLm1hbGxvY0Zsb2F0MzIoMip4KSx3PWEubWFsbG9jVWludDgoMip4KSxrPWEubWFsbG9jVWludDMyKHgpLEE9MCxUPTA7VDx5LTE7KytUKWZvcih2YXIgTT12KihvW1RdLWQpLFM9dioob1tUKzFdLWQpLEU9MDtFPG0tMTsrK0UpZm9yKHZhciBDPWcqKHJbRV0tcCksTD1nKihyW0UrMV0tcCksej0wO3o8Zi5sZW5ndGg7eis9Mil7dmFyIE8sSSxELFAsUj1mW3pdLEY9Zlt6KzFdLEI9c1soVCtGKSptKyhFK1IpXSxOPW4ubGUobCxCKTtpZihOPDApTz1jWzBdLEk9Y1sxXSxEPWNbMl0sUD1jWzNdO2Vsc2UgaWYoTj09PXUtMSlPPWNbNCp1LTRdLEk9Y1s0KnUtM10sRD1jWzQqdS0yXSxQPWNbNCp1LTFdO2Vsc2V7dmFyIGo9KEItbFtOXSkvKGxbTisxXS1sW05dKSxWPTEtaixVPTQqTixxPTQqKE4rMSk7Tz1WKmNbVV0raipjW3FdLEk9VipjW1UrMV0raipjW3ErMV0sRD1WKmNbVSsyXStqKmNbcSsyXSxQPVYqY1tVKzNdK2oqY1txKzNdfWJbNCpBXT0yNTUqTyxiWzQqQSsxXT0yNTUqSSxiWzQqQSsyXT0yNTUqRCxiWzQqQSszXT0yNTUqUCxfWzIqQV09LjUqQysuNSpMLF9bMipBKzFdPS41Kk0rLjUqUyx3WzIqQV09Uix3WzIqQSsxXT1GLGtbQV09VCptK0UsQSs9MX10aGlzLnBvc2l0aW9uQnVmZmVyLnVwZGF0ZShfKSx0aGlzLndlaWdodEJ1ZmZlci51cGRhdGUodyksdGhpcy5jb2xvckJ1ZmZlci51cGRhdGUoYiksdGhpcy5pZEJ1ZmZlci51cGRhdGUoayksYS5mcmVlKF8pLGEuZnJlZShiKSxhLmZyZWUodyksYS5mcmVlKGspfSxoLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBvc2l0aW9uQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLndlaWdodEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5jb2xvckJ1ZmZlci5kaXNwb3NlKCksdGhpcy5pZEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5wbG90LnJlbW92ZU9iamVjdCh0aGlzKX19LHtcIi4vbGliL3NoYWRlcnNcIjoyNDksXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiOjI1MCxcImdsLWJ1ZmZlclwiOjIzOCxcImdsLXNoYWRlclwiOjI5OCxcImlvdGEtYXJyYXlcIjo0MDksXCJ0eXBlZGFycmF5LXBvb2xcIjo1MzB9XSwyNDk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2xzbGlmeVwiKTtlLmV4cG9ydHM9e2ZyYWdtZW50Om4oW1wicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xcbnZvaWQgbWFpbigpIHtcXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoZnJhZ0NvbG9yLnJnYiAqIGZyYWdDb2xvci5hLCBmcmFnQ29sb3IuYSk7XFxufVxcblwiXSksdmVydGV4Om4oW1wicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcXG5hdHRyaWJ1dGUgdmVjMiB3ZWlnaHQ7XFxuXFxudW5pZm9ybSB2ZWMyIHNoYXBlO1xcbnVuaWZvcm0gbWF0MyB2aWV3VHJhbnNmb3JtO1xcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgdmVjMyB2UG9zaXRpb24gPSB2aWV3VHJhbnNmb3JtICogdmVjMyggcG9zaXRpb24gKyAod2VpZ2h0LS41KS8oc2hhcGUtMS4pICwgMS4wKTtcXG4gIGZyYWdDb2xvciA9IGNvbG9yO1xcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHZQb3NpdGlvbi54eSwgMCwgdlBvc2l0aW9uLnopO1xcbn1cXG5cIl0pLHBpY2tGcmFnbWVudDpuKFtcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxudmFyeWluZyB2ZWM0IGZyYWdJZDtcXG52YXJ5aW5nIHZlYzIgdldlaWdodDtcXG5cXG51bmlmb3JtIHZlYzIgc2hhcGU7XFxudW5pZm9ybSB2ZWM0IHBpY2tPZmZzZXQ7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgdmVjMiBkID0gc3RlcCguNSwgdldlaWdodCk7XFxuICB2ZWM0IGlkID0gZnJhZ0lkICsgcGlja09mZnNldDtcXG4gIGlkLnggKz0gZC54ICsgZC55KnNoYXBlLng7XFxuXFxuICBpZC55ICs9IGZsb29yKGlkLnggLyAyNTYuMCk7XFxuICBpZC54IC09IGZsb29yKGlkLnggLyAyNTYuMCkgKiAyNTYuMDtcXG5cXG4gIGlkLnogKz0gZmxvb3IoaWQueSAvIDI1Ni4wKTtcXG4gIGlkLnkgLT0gZmxvb3IoaWQueSAvIDI1Ni4wKSAqIDI1Ni4wO1xcblxcbiAgaWQudyArPSBmbG9vcihpZC56IC8gMjU2LjApO1xcbiAgaWQueiAtPSBmbG9vcihpZC56IC8gMjU2LjApICogMjU2LjA7XFxuXFxuICBnbF9GcmFnQ29sb3IgPSBpZC8yNTUuO1xcbn1cXG5cIl0pLHBpY2tWZXJ0ZXg6bihbXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWM0IHBpY2tJZDtcXG5hdHRyaWJ1dGUgdmVjMiB3ZWlnaHQ7XFxuXFxudW5pZm9ybSB2ZWMyIHNoYXBlO1xcbnVuaWZvcm0gbWF0MyB2aWV3VHJhbnNmb3JtO1xcblxcbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XFxudmFyeWluZyB2ZWMyIHZXZWlnaHQ7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgdldlaWdodCA9IHdlaWdodDtcXG5cXG4gIGZyYWdJZCA9IHBpY2tJZDtcXG5cXG4gIHZlYzMgdlBvc2l0aW9uID0gdmlld1RyYW5zZm9ybSAqIHZlYzMoIHBvc2l0aW9uICsgKHdlaWdodC0uNSkvKHNoYXBlLTEuKSAsIDEuMCk7XFxuICBnbF9Qb3NpdGlvbiA9IHZlYzQodlBvc2l0aW9uLnh5LCAwLCB2UG9zaXRpb24ueik7XFxufVxcblwiXSl9fSx7Z2xzbGlmeTo0MDJ9XSwyNTA6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMTAyXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MTAyfV0sMjUxOltmdW5jdGlvbih0LGUscil7dmFyIG49dChcImdsc2xpZnlcIiksaT10KFwiZ2wtc2hhZGVyXCIpLGE9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiwgbmV4dFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSBmbG9hdCBhcmNMZW5ndGgsIGxpbmVXaWR0aDtcXG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcXG5cXG51bmlmb3JtIHZlYzIgc2NyZWVuU2hhcGU7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFJhdGlvO1xcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xcbnZhcnlpbmcgdmVjMyB3b3JsZFBvc2l0aW9uO1xcbnZhcnlpbmcgZmxvYXQgcGl4ZWxBcmNMZW5ndGg7XFxuXFxudmVjNCBwcm9qZWN0KHZlYzMgcCkge1xcbiAgcmV0dXJuIHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHAsIDEuMCk7XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzQgc3RhcnRQb2ludCA9IHByb2plY3QocG9zaXRpb24pO1xcbiAgdmVjNCBlbmRQb2ludCAgID0gcHJvamVjdChuZXh0UG9zaXRpb24pO1xcblxcbiAgdmVjMiBBID0gc3RhcnRQb2ludC54eSAvIHN0YXJ0UG9pbnQudztcXG4gIHZlYzIgQiA9ICAgZW5kUG9pbnQueHkgLyAgIGVuZFBvaW50Lnc7XFxuXFxuICBmbG9hdCBjbGlwQW5nbGUgPSBhdGFuKFxcbiAgICAoQi55IC0gQS55KSAqIHNjcmVlblNoYXBlLnksXFxuICAgIChCLnggLSBBLngpICogc2NyZWVuU2hhcGUueFxcbiAgKTtcXG5cXG4gIHZlYzIgb2Zmc2V0ID0gMC41ICogcGl4ZWxSYXRpbyAqIGxpbmVXaWR0aCAqIHZlYzIoXFxuICAgIHNpbihjbGlwQW5nbGUpLFxcbiAgICAtY29zKGNsaXBBbmdsZSlcXG4gICkgLyBzY3JlZW5TaGFwZTtcXG5cXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChzdGFydFBvaW50Lnh5ICsgc3RhcnRQb2ludC53ICogb2Zmc2V0LCBzdGFydFBvaW50Lnp3KTtcXG5cXG4gIHdvcmxkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4gIHBpeGVsQXJjTGVuZ3RoID0gYXJjTGVuZ3RoO1xcbiAgZnJhZ0NvbG9yID0gY29sb3I7XFxufVxcblwiXSksbz1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XFxuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XFxufVxcblxcbnVuaWZvcm0gdmVjMyAgICAgIGNsaXBCb3VuZHNbMl07XFxudW5pZm9ybSBzYW1wbGVyMkQgZGFzaFRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCAgICAgZGFzaFNjYWxlO1xcbnVuaWZvcm0gZmxvYXQgICAgIG9wYWNpdHk7XFxuXFxudmFyeWluZyB2ZWMzICAgIHdvcmxkUG9zaXRpb247XFxudmFyeWluZyBmbG9hdCAgIHBpeGVsQXJjTGVuZ3RoO1xcbnZhcnlpbmcgdmVjNCAgICBmcmFnQ29sb3I7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgaWYgKFxcbiAgICBvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHdvcmxkUG9zaXRpb24pIHx8XFxuICAgIGZyYWdDb2xvci5hICogb3BhY2l0eSA9PSAwLlxcbiAgKSBkaXNjYXJkO1xcblxcbiAgZmxvYXQgZGFzaFdlaWdodCA9IHRleHR1cmUyRChkYXNoVGV4dHVyZSwgdmVjMihkYXNoU2NhbGUgKiBwaXhlbEFyY0xlbmd0aCwgMCkpLnI7XFxuICBpZihkYXNoV2VpZ2h0IDwgMC41KSB7XFxuICAgIGRpc2NhcmQ7XFxuICB9XFxuICBnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3IgKiBvcGFjaXR5O1xcbn1cXG5cIl0pLHM9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG4jZGVmaW5lIEZMT0FUX01BWCAgMS43MDE0MTE4NGUzOFxcbiNkZWZpbmUgRkxPQVRfTUlOICAxLjE3NTQ5NDM1ZS0zOFxcblxcbmxvd3AgdmVjNCBlbmNvZGVfZmxvYXRfMTYwNDE1MDU1OShoaWdocCBmbG9hdCB2KSB7XFxuICBoaWdocCBmbG9hdCBhdiA9IGFicyh2KTtcXG5cXG4gIC8vSGFuZGxlIHNwZWNpYWwgY2FzZXNcXG4gIGlmKGF2IDwgRkxPQVRfTUlOKSB7XFxuICAgIHJldHVybiB2ZWM0KDAuMCwgMC4wLCAwLjAsIDAuMCk7XFxuICB9IGVsc2UgaWYodiA+IEZMT0FUX01BWCkge1xcbiAgICByZXR1cm4gdmVjNCgxMjcuMCwgMTI4LjAsIDAuMCwgMC4wKSAvIDI1NS4wO1xcbiAgfSBlbHNlIGlmKHYgPCAtRkxPQVRfTUFYKSB7XFxuICAgIHJldHVybiB2ZWM0KDI1NS4wLCAxMjguMCwgMC4wLCAwLjApIC8gMjU1LjA7XFxuICB9XFxuXFxuICBoaWdocCB2ZWM0IGMgPSB2ZWM0KDAsMCwwLDApO1xcblxcbiAgLy9Db21wdXRlIGV4cG9uZW50IGFuZCBtYW50aXNzYVxcbiAgaGlnaHAgZmxvYXQgZSA9IGZsb29yKGxvZzIoYXYpKTtcXG4gIGhpZ2hwIGZsb2F0IG0gPSBhdiAqIHBvdygyLjAsIC1lKSAtIDEuMDtcXG4gIFxcbiAgLy9VbnBhY2sgbWFudGlzc2FcXG4gIGNbMV0gPSBmbG9vcigxMjguMCAqIG0pO1xcbiAgbSAtPSBjWzFdIC8gMTI4LjA7XFxuICBjWzJdID0gZmxvb3IoMzI3NjguMCAqIG0pO1xcbiAgbSAtPSBjWzJdIC8gMzI3NjguMDtcXG4gIGNbM10gPSBmbG9vcig4Mzg4NjA4LjAgKiBtKTtcXG4gIFxcbiAgLy9VbnBhY2sgZXhwb25lbnRcXG4gIGhpZ2hwIGZsb2F0IGViaWFzID0gZSArIDEyNy4wO1xcbiAgY1swXSA9IGZsb29yKGViaWFzIC8gMi4wKTtcXG4gIGViaWFzIC09IGNbMF0gKiAyLjA7XFxuICBjWzFdICs9IGZsb29yKGViaWFzKSAqIDEyOC4wOyBcXG5cXG4gIC8vVW5wYWNrIHNpZ24gYml0XFxuICBjWzBdICs9IDEyOC4wICogc3RlcCgwLjAsIC12KTtcXG5cXG4gIC8vU2NhbGUgYmFjayB0byByYW5nZVxcbiAgcmV0dXJuIGMgLyAyNTUuMDtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcXG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XFxuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcXG59XFxuXFxudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XFxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XFxuXFxudmFyeWluZyB2ZWMzIHdvcmxkUG9zaXRpb247XFxudmFyeWluZyBmbG9hdCBwaXhlbEFyY0xlbmd0aDtcXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHdvcmxkUG9zaXRpb24pKSBkaXNjYXJkO1xcblxcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwaWNrSWQvMjU1LjAsIGVuY29kZV9mbG9hdF8xNjA0MTUwNTU5KHBpeGVsQXJjTGVuZ3RoKS54eXopO1xcbn1cIl0pLGw9W3tuYW1lOlwicG9zaXRpb25cIix0eXBlOlwidmVjM1wifSx7bmFtZTpcIm5leHRQb3NpdGlvblwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwiYXJjTGVuZ3RoXCIsdHlwZTpcImZsb2F0XCJ9LHtuYW1lOlwibGluZVdpZHRoXCIsdHlwZTpcImZsb2F0XCJ9LHtuYW1lOlwiY29sb3JcIix0eXBlOlwidmVjNFwifV07ci5jcmVhdGVTaGFkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxhLG8sbnVsbCxsKX0sci5jcmVhdGVQaWNrU2hhZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQsYSxzLG51bGwsbCl9fSx7XCJnbC1zaGFkZXJcIjoyOTgsZ2xzbGlmeTo0MDJ9XSwyNTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbHx8dC5zY2VuZSYmdC5zY2VuZS5nbCxyPXUoZSk7ci5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsci5hdHRyaWJ1dGVzLm5leHRQb3NpdGlvbi5sb2NhdGlvbj0xLHIuYXR0cmlidXRlcy5hcmNMZW5ndGgubG9jYXRpb249MixyLmF0dHJpYnV0ZXMubGluZVdpZHRoLmxvY2F0aW9uPTMsci5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTQ7dmFyIG89aChlKTtvLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxvLmF0dHJpYnV0ZXMubmV4dFBvc2l0aW9uLmxvY2F0aW9uPTEsby5hdHRyaWJ1dGVzLmFyY0xlbmd0aC5sb2NhdGlvbj0yLG8uYXR0cmlidXRlcy5saW5lV2lkdGgubG9jYXRpb249MyxvLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249NDtmb3IodmFyIHM9bihlKSxjPWkoZSxbe2J1ZmZlcjpzLHNpemU6MyxvZmZzZXQ6MCxzdHJpZGU6NDh9LHtidWZmZXI6cyxzaXplOjMsb2Zmc2V0OjEyLHN0cmlkZTo0OH0se2J1ZmZlcjpzLHNpemU6MSxvZmZzZXQ6MjQsc3RyaWRlOjQ4fSx7YnVmZmVyOnMsc2l6ZToxLG9mZnNldDoyOCxzdHJpZGU6NDh9LHtidWZmZXI6cyxzaXplOjQsb2Zmc2V0OjMyLHN0cmlkZTo0OH1dKSxmPWwobmV3IEFycmF5KDEwMjQpLFsyNTYsMSw0XSkscD0wO3A8MTAyNDsrK3ApZi5kYXRhW3BdPTI1NTt2YXIgZD1hKGUsZik7ZC53cmFwPWUuUkVQRUFUO3ZhciBnPW5ldyB2KGUscixvLHMsYyxkKTtyZXR1cm4gZy51cGRhdGUodCksZ307dmFyIG49dChcImdsLWJ1ZmZlclwiKSxpPXQoXCJnbC12YW9cIiksYT10KFwiZ2wtdGV4dHVyZTJkXCIpLG89dChcImdsc2wtcmVhZC1mbG9hdFwiKSxzPXQoXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiKSxsPXQoXCJuZGFycmF5XCIpLGM9dChcIi4vbGliL3NoYWRlcnNcIiksdT1jLmNyZWF0ZVNoYWRlcixoPWMuY3JlYXRlUGlja1NoYWRlcixmPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByPTAsbj0wO248MzsrK24pe3ZhciBpPXRbbl0tZVtuXTtyKz1pKml9cmV0dXJuIE1hdGguc3FydChyKX1mdW5jdGlvbiBkKHQpe2Zvcih2YXIgZT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxyPTA7cjwzOysrcillWzBdW3JdPU1hdGgubWF4KHRbMF1bcl0sZVswXVtyXSksZVsxXVtyXT1NYXRoLm1pbih0WzFdW3JdLGVbMV1bcl0pO3JldHVybiBlfWZ1bmN0aW9uIGcodCxlLHIsbil7dGhpcy5hcmNMZW5ndGg9dCx0aGlzLnBvc2l0aW9uPWUsdGhpcy5pbmRleD1yLHRoaXMuZGF0YUNvb3JkaW5hdGU9bn1mdW5jdGlvbiB2KHQsZSxyLG4saSxhKXt0aGlzLmdsPXQsdGhpcy5zaGFkZXI9ZSx0aGlzLnBpY2tTaGFkZXI9cix0aGlzLmJ1ZmZlcj1uLHRoaXMudmFvPWksdGhpcy5jbGlwQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMucG9pbnRzPVtdLHRoaXMuYXJjTGVuZ3RoPVtdLHRoaXMudmVydGV4Q291bnQ9MCx0aGlzLmJvdW5kcz1bWzAsMCwwXSxbMCwwLDBdXSx0aGlzLnBpY2tJZD0wLHRoaXMubGluZVdpZHRoPTEsdGhpcy50ZXh0dXJlPWEsdGhpcy5kYXNoU2NhbGU9MSx0aGlzLm9wYWNpdHk9MSx0aGlzLmhhc0FscGhhPSExLHRoaXMuZGlydHk9ITAsdGhpcy5waXhlbFJhdGlvPTF9dmFyIG09di5wcm90b3R5cGU7bS5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzQWxwaGF9LG0uaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5oYXNBbHBoYX0sbS5waWNrU2xvdHM9MSxtLnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LG0uZHJhd1RyYW5zcGFyZW50PW0uZHJhdz1mdW5jdGlvbih0KXtpZih0aGlzLnZlcnRleENvdW50KXt2YXIgZT10aGlzLmdsLHI9dGhpcy5zaGFkZXIsbj10aGlzLnZhbztyLmJpbmQoKSxyLnVuaWZvcm1zPXttb2RlbDp0Lm1vZGVsfHxmLHZpZXc6dC52aWV3fHxmLHByb2plY3Rpb246dC5wcm9qZWN0aW9ufHxmLGNsaXBCb3VuZHM6ZCh0aGlzLmNsaXBCb3VuZHMpLGRhc2hUZXh0dXJlOnRoaXMudGV4dHVyZS5iaW5kKCksZGFzaFNjYWxlOnRoaXMuZGFzaFNjYWxlL3RoaXMuYXJjTGVuZ3RoW3RoaXMuYXJjTGVuZ3RoLmxlbmd0aC0xXSxvcGFjaXR5OnRoaXMub3BhY2l0eSxzY3JlZW5TaGFwZTpbZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XSxwaXhlbFJhdGlvOnRoaXMucGl4ZWxSYXRpb30sbi5iaW5kKCksbi5kcmF3KGUuVFJJQU5HTEVfU1RSSVAsdGhpcy52ZXJ0ZXhDb3VudCksbi51bmJpbmQoKX19LG0uZHJhd1BpY2s9ZnVuY3Rpb24odCl7aWYodGhpcy52ZXJ0ZXhDb3VudCl7dmFyIGU9dGhpcy5nbCxyPXRoaXMucGlja1NoYWRlcixuPXRoaXMudmFvO3IuYmluZCgpLHIudW5pZm9ybXM9e21vZGVsOnQubW9kZWx8fGYsdmlldzp0LnZpZXd8fGYscHJvamVjdGlvbjp0LnByb2plY3Rpb258fGYscGlja0lkOnRoaXMucGlja0lkLGNsaXBCb3VuZHM6ZCh0aGlzLmNsaXBCb3VuZHMpLHNjcmVlblNoYXBlOltlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdLHBpeGVsUmF0aW86dGhpcy5waXhlbFJhdGlvfSxuLmJpbmQoKSxuLmRyYXcoZS5UUklBTkdMRV9TVFJJUCx0aGlzLnZlcnRleENvdW50KSxuLnVuYmluZCgpfX0sbS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGUscjt0aGlzLmRpcnR5PSEwO3ZhciBuPSEhdC5jb25uZWN0R2FwcztcImRhc2hTY2FsZVwiaW4gdCYmKHRoaXMuZGFzaFNjYWxlPXQuZGFzaFNjYWxlKSx0aGlzLmhhc0FscGhhPSExLFwib3BhY2l0eVwiaW4gdCYmKHRoaXMub3BhY2l0eT0rdC5vcGFjaXR5LHRoaXMub3BhY2l0eTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpO3ZhciBpPVtdLGE9W10sbz1bXSxjPTAsdT0wLGg9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sZj10LnBvc2l0aW9ufHx0LnBvc2l0aW9ucztpZihmKXt2YXIgZD10LmNvbG9yfHx0LmNvbG9yc3x8WzAsMCwwLDFdLGc9dC5saW5lV2lkdGh8fDEsdj0hMTt0OmZvcihlPTE7ZTxmLmxlbmd0aDsrK2Upe3ZhciBtLHkseCxiPWZbZS0xXSxfPWZbZV07Zm9yKGEucHVzaChjKSxvLnB1c2goYi5zbGljZSgpKSxyPTA7cjwzOysrcil7aWYoaXNOYU4oYltyXSl8fGlzTmFOKF9bcl0pfHwhaXNGaW5pdGUoYltyXSl8fCFpc0Zpbml0ZShfW3JdKSl7aWYoIW4mJmkubGVuZ3RoPjApe2Zvcih2YXIgdz0wO3c8MjQ7Kyt3KWkucHVzaChpW2kubGVuZ3RoLTEyXSk7dSs9Mix2PSEwfWNvbnRpbnVlIHR9aFswXVtyXT1NYXRoLm1pbihoWzBdW3JdLGJbcl0sX1tyXSksaFsxXVtyXT1NYXRoLm1heChoWzFdW3JdLGJbcl0sX1tyXSl9QXJyYXkuaXNBcnJheShkWzBdKT8obT1kLmxlbmd0aD5lLTE/ZFtlLTFdOmQubGVuZ3RoPjA/ZFtkLmxlbmd0aC0xXTpbMCwwLDAsMV0seT1kLmxlbmd0aD5lP2RbZV06ZC5sZW5ndGg+MD9kW2QubGVuZ3RoLTFdOlswLDAsMCwxXSk6bT15PWQsMz09PW0ubGVuZ3RoJiYobT1bbVswXSxtWzFdLG1bMl0sMV0pLDM9PT15Lmxlbmd0aCYmKHk9W3lbMF0seVsxXSx5WzJdLDFdKSwhdGhpcy5oYXNBbHBoYSYmbVszXTwxJiYodGhpcy5oYXNBbHBoYT0hMCkseD1BcnJheS5pc0FycmF5KGcpP2cubGVuZ3RoPmUtMT9nW2UtMV06Zy5sZW5ndGg+MD9nW2cubGVuZ3RoLTFdOlswLDAsMCwxXTpnO3ZhciBrPWM7aWYoYys9cChiLF8pLHYpe2ZvcihyPTA7cjwyOysrcilpLnB1c2goYlswXSxiWzFdLGJbMl0sX1swXSxfWzFdLF9bMl0sayx4LG1bMF0sbVsxXSxtWzJdLG1bM10pO3UrPTIsdj0hMX1pLnB1c2goYlswXSxiWzFdLGJbMl0sX1swXSxfWzFdLF9bMl0sayx4LG1bMF0sbVsxXSxtWzJdLG1bM10sYlswXSxiWzFdLGJbMl0sX1swXSxfWzFdLF9bMl0saywteCxtWzBdLG1bMV0sbVsyXSxtWzNdLF9bMF0sX1sxXSxfWzJdLGJbMF0sYlsxXSxiWzJdLGMsLXgseVswXSx5WzFdLHlbMl0seVszXSxfWzBdLF9bMV0sX1syXSxiWzBdLGJbMV0sYlsyXSxjLHgseVswXSx5WzFdLHlbMl0seVszXSksdSs9NH19aWYodGhpcy5idWZmZXIudXBkYXRlKGkpLGEucHVzaChjKSxvLnB1c2goZltmLmxlbmd0aC0xXS5zbGljZSgpKSx0aGlzLmJvdW5kcz1oLHRoaXMudmVydGV4Q291bnQ9dSx0aGlzLnBvaW50cz1vLHRoaXMuYXJjTGVuZ3RoPWEsXCJkYXNoZXNcImluIHQpe3ZhciBBPXQuZGFzaGVzLnNsaWNlKCk7Zm9yKEEudW5zaGlmdCgwKSxlPTE7ZTxBLmxlbmd0aDsrK2UpQVtlXT1BW2UtMV0rQVtlXTt2YXIgVD1sKG5ldyBBcnJheSgxMDI0KSxbMjU2LDEsNF0pO2ZvcihlPTA7ZTwyNTY7KytlKXtmb3Iocj0wO3I8NDsrK3IpVC5zZXQoZSwwLHIsMCk7MSZzLmxlKEEsQVtBLmxlbmd0aC0xXSplLzI1NSk/VC5zZXQoZSwwLDAsMCk6VC5zZXQoZSwwLDAsMjU1KX10aGlzLnRleHR1cmUuc2V0UGl4ZWxzKFQpfX0sbS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlci5kaXNwb3NlKCl9LG0ucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7dmFyIGU9byh0LnZhbHVlWzBdLHQudmFsdWVbMV0sdC52YWx1ZVsyXSwwKSxyPXMubGUodGhpcy5hcmNMZW5ndGgsZSk7aWYocjwwKXJldHVybiBudWxsO2lmKHI9PT10aGlzLmFyY0xlbmd0aC5sZW5ndGgtMSlyZXR1cm4gbmV3IGcodGhpcy5hcmNMZW5ndGhbdGhpcy5hcmNMZW5ndGgubGVuZ3RoLTFdLHRoaXMucG9pbnRzW3RoaXMucG9pbnRzLmxlbmd0aC0xXS5zbGljZSgpLHIpO2Zvcih2YXIgbj10aGlzLnBvaW50c1tyXSxpPXRoaXMucG9pbnRzW01hdGgubWluKHIrMSx0aGlzLnBvaW50cy5sZW5ndGgtMSldLGE9KGUtdGhpcy5hcmNMZW5ndGhbcl0pLyh0aGlzLmFyY0xlbmd0aFtyKzFdLXRoaXMuYXJjTGVuZ3RoW3JdKSxsPTEtYSxjPVswLDAsMF0sdT0wO3U8MzsrK3UpY1t1XT1sKm5bdV0rYSppW3VdO3ZhciBoPU1hdGgubWluKGE8LjU/cjpyKzEsdGhpcy5wb2ludHMubGVuZ3RoLTEpO3JldHVybiBuZXcgZyhlLGMsaCx0aGlzLnBvaW50c1toXSl9fSx7XCIuL2xpYi9zaGFkZXJzXCI6MjUxLFwiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIjoyNTMsXCJnbC1idWZmZXJcIjoyMzgsXCJnbC10ZXh0dXJlMmRcIjozMTUsXCJnbC12YW9cIjozMjAsXCJnbHNsLXJlYWQtZmxvYXRcIjozOTMsbmRhcnJheTo0NDN9XSwyNTM6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMTAyXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MTAyfV0sMjU0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPXIqYS1pKm47cmV0dXJuIG8/KG89MS9vLHRbMF09YSpvLHRbMV09LW4qbyx0WzJdPS1pKm8sdFszXT1yKm8sdCk6bnVsbH19LHt9XSwyNTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89ZVs0XSxzPWVbNV0sbD1lWzZdLGM9ZVs3XSx1PWVbOF0saD11Km8tcypjLGY9LXUqYStzKmwscD1jKmEtbypsLGQ9cipoK24qZitpKnA7cmV0dXJuIGQ/KGQ9MS9kLHRbMF09aCpkLHRbMV09KC11Km4raSpjKSpkLHRbMl09KHMqbi1pKm8pKmQsdFszXT1mKmQsdFs0XT0odSpyLWkqbCkqZCx0WzVdPSgtcypyK2kqYSkqZCx0WzZdPXAqZCx0WzddPSgtYypyK24qbCkqZCx0WzhdPShvKnItbiphKSpkLHQpOm51bGx9fSx7fV0sMjU2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBGbG9hdDMyQXJyYXkoMTYpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZVs0XT10WzRdLGVbNV09dFs1XSxlWzZdPXRbNl0sZVs3XT10WzddLGVbOF09dFs4XSxlWzldPXRbOV0sZVsxMF09dFsxMF0sZVsxMV09dFsxMV0sZVsxMl09dFsxMl0sZVsxM109dFsxM10sZVsxNF09dFsxNF0sZVsxNV09dFsxNV0sZX19LHt9XSwyNTc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgRmxvYXQzMkFycmF5KDE2KTtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9fSx7fV0sMjU4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXSxpPXRbM10sYT10WzRdLG89dFs1XSxzPXRbNl0sbD10WzddLGM9dFs4XSx1PXRbOV0saD10WzEwXSxmPXRbMTFdLHA9dFsxMl0sZD10WzEzXSxnPXRbMTRdLHY9dFsxNV07cmV0dXJuKGUqby1yKmEpKihoKnYtZipnKS0oZSpzLW4qYSkqKHUqdi1mKmQpKyhlKmwtaSphKSoodSpnLWgqZCkrKHIqcy1uKm8pKihjKnYtZipwKS0ocipsLWkqbykqKGMqZy1oKnApKyhuKmwtaSpzKSooYypkLXUqcCl9fSx7fV0sMjU5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPXIrcixzPW4rbixsPWkraSxjPXIqbyx1PW4qbyxoPW4qcyxmPWkqbyxwPWkqcyxkPWkqbCxnPWEqbyx2PWEqcyxtPWEqbDtyZXR1cm4gdFswXT0xLWgtZCx0WzFdPXUrbSx0WzJdPWYtdix0WzNdPTAsdFs0XT11LW0sdFs1XT0xLWMtZCx0WzZdPXArZyx0WzddPTAsdFs4XT1mK3YsdFs5XT1wLWcsdFsxMF09MS1jLWgsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9fSx7fV0sMjYwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9bituLGw9aStpLGM9YSthLHU9bipzLGg9bipsLGY9bipjLHA9aSpsLGQ9aSpjLGc9YSpjLHY9bypzLG09bypsLHk9bypjO3JldHVybiB0WzBdPTEtKHArZyksdFsxXT1oK3ksdFsyXT1mLW0sdFszXT0wLHRbNF09aC15LHRbNV09MS0odStnKSx0WzZdPWQrdix0WzddPTAsdFs4XT1mK20sdFs5XT1kLXYsdFsxMF09MS0odStwKSx0WzExXT0wLHRbMTJdPXJbMF0sdFsxM109clsxXSx0WzE0XT1yWzJdLHRbMTVdPTEsdH19LHt9XSwyNjE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0xLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0xLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fX0se31dLDI2MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1lWzRdLHM9ZVs1XSxsPWVbNl0sYz1lWzddLHU9ZVs4XSxoPWVbOV0sZj1lWzEwXSxwPWVbMTFdLGQ9ZVsxMl0sZz1lWzEzXSx2PWVbMTRdLG09ZVsxNV0seT1yKnMtbipvLHg9cipsLWkqbyxiPXIqYy1hKm8sXz1uKmwtaSpzLHc9bipjLWEqcyxrPWkqYy1hKmwsQT11KmctaCpkLFQ9dSp2LWYqZCxNPXUqbS1wKmQsUz1oKnYtZipnLEU9aCptLXAqZyxDPWYqbS1wKnYsTD15KkMteCpFK2IqUytfKk0tdypUK2sqQTtpZighTClyZXR1cm4gbnVsbDtyZXR1cm4gTD0xL0wsdFswXT0ocypDLWwqRStjKlMpKkwsdFsxXT0oaSpFLW4qQy1hKlMpKkwsdFsyXT0oZyprLXYqdyttKl8pKkwsdFszXT0oZip3LWgqay1wKl8pKkwsdFs0XT0obCpNLW8qQy1jKlQpKkwsdFs1XT0ocipDLWkqTSthKlQpKkwsdFs2XT0odipiLWQqay1tKngpKkwsdFs3XT0odSprLWYqYitwKngpKkwsdFs4XT0obypFLXMqTStjKkEpKkwsdFs5XT0obipNLXIqRS1hKkEpKkwsdFsxMF09KGQqdy1nKmIrbSp5KSpMLHRbMTFdPShoKmItdSp3LXAqeSkqTCx0WzEyXT0ocypULW8qUy1sKkEpKkwsdFsxM109KHIqUy1uKlQraSpBKSpMLHRbMTRdPShnKngtZCpfLXYqeSkqTCx0WzE1XT0odSpfLWgqeCtmKnkpKkwsdH19LHt9XSwyNjM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi9pZGVudGl0eVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbyxzLGwsYyx1LGgsZixwLGQsZz1lWzBdLHY9ZVsxXSxtPWVbMl0seT1pWzBdLHg9aVsxXSxiPWlbMl0sXz1yWzBdLHc9clsxXSxrPXJbMl07aWYoTWF0aC5hYnMoZy1fKTwxZS02JiZNYXRoLmFicyh2LXcpPDFlLTYmJk1hdGguYWJzKG0tayk8MWUtNilyZXR1cm4gbih0KTtoPWctXyxmPXYtdyxwPW0tayxkPTEvTWF0aC5zcXJ0KGgqaCtmKmYrcCpwKSxhPXgqKHAqPWQpLWIqKGYqPWQpLG89YiooaCo9ZCkteSpwLHM9eSpmLXgqaCwoZD1NYXRoLnNxcnQoYSphK28qbytzKnMpKT8oYSo9ZD0xL2Qsbyo9ZCxzKj1kKTooYT0wLG89MCxzPTApO2w9ZipzLXAqbyxjPXAqYS1oKnMsdT1oKm8tZiphLChkPU1hdGguc3FydChsKmwrYypjK3UqdSkpPyhsKj1kPTEvZCxjKj1kLHUqPWQpOihsPTAsYz0wLHU9MCk7cmV0dXJuIHRbMF09YSx0WzFdPWwsdFsyXT1oLHRbM109MCx0WzRdPW8sdFs1XT1jLHRbNl09Zix0WzddPTAsdFs4XT1zLHRbOV09dSx0WzEwXT1wLHRbMTFdPTAsdFsxMl09LShhKmcrbyp2K3MqbSksdFsxM109LShsKmcrYyp2K3UqbSksdFsxNF09LShoKmcrZip2K3AqbSksdFsxNV09MSx0fX0se1wiLi9pZGVudGl0eVwiOjI2MX1dLDI2NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLGM9ZVs2XSx1PWVbN10saD1lWzhdLGY9ZVs5XSxwPWVbMTBdLGQ9ZVsxMV0sZz1lWzEyXSx2PWVbMTNdLG09ZVsxNF0seT1lWzE1XSx4PXJbMF0sYj1yWzFdLF89clsyXSx3PXJbM107cmV0dXJuIHRbMF09eCpuK2IqcytfKmgrdypnLHRbMV09eCppK2IqbCtfKmYrdyp2LHRbMl09eCphK2IqYytfKnArdyptLHRbM109eCpvK2IqdStfKmQrdyp5LHg9cls0XSxiPXJbNV0sXz1yWzZdLHc9cls3XSx0WzRdPXgqbitiKnMrXypoK3cqZyx0WzVdPXgqaStiKmwrXypmK3cqdix0WzZdPXgqYStiKmMrXypwK3cqbSx0WzddPXgqbytiKnUrXypkK3cqeSx4PXJbOF0sYj1yWzldLF89clsxMF0sdz1yWzExXSx0WzhdPXgqbitiKnMrXypoK3cqZyx0WzldPXgqaStiKmwrXypmK3cqdix0WzEwXT14KmErYipjK18qcCt3Km0sdFsxMV09eCpvK2IqdStfKmQrdyp5LHg9clsxMl0sYj1yWzEzXSxfPXJbMTRdLHc9clsxNV0sdFsxMl09eCpuK2IqcytfKmgrdypnLHRbMTNdPXgqaStiKmwrXypmK3cqdix0WzE0XT14KmErYipjK18qcCt3Km0sdFsxNV09eCpvK2IqdStfKmQrdyp5LHR9fSx7fV0sMjY1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPTEvKGUtciksbD0xLyhuLWkpLGM9MS8oYS1vKTtyZXR1cm4gdFswXT0tMipzLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPS0yKmwsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTIqYyx0WzExXT0wLHRbMTJdPShlK3IpKnMsdFsxM109KGkrbikqbCx0WzE0XT0obythKSpjLHRbMTVdPTEsdH19LHt9XSwyNjY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT0xL01hdGgudGFuKGUvMiksbz0xLyhuLWkpO3JldHVybiB0WzBdPWEvcix0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT1hLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0oaStuKSpvLHRbMTFdPS0xLHRbMTJdPTAsdFsxM109MCx0WzE0XT0yKmkqbipvLHRbMTVdPTAsdH19LHt9XSwyNjc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHMsbCxjLHUsaCxmLHAsZCxnLHYsbSx5LHgsYixfLHcsayxBLFQsTSxTLEU9blswXSxDPW5bMV0sTD1uWzJdLHo9TWF0aC5zcXJ0KEUqRStDKkMrTCpMKTtpZihNYXRoLmFicyh6KTwxZS02KXJldHVybiBudWxsO0UqPXo9MS96LEMqPXosTCo9eixpPU1hdGguc2luKHIpLGE9TWF0aC5jb3Mociksbz0xLWEscz1lWzBdLGw9ZVsxXSxjPWVbMl0sdT1lWzNdLGg9ZVs0XSxmPWVbNV0scD1lWzZdLGQ9ZVs3XSxnPWVbOF0sdj1lWzldLG09ZVsxMF0seT1lWzExXSx4PUUqRSpvK2EsYj1DKkUqbytMKmksXz1MKkUqby1DKmksdz1FKkMqby1MKmksaz1DKkMqbythLEE9TCpDKm8rRSppLFQ9RSpMKm8rQyppLE09QypMKm8tRSppLFM9TCpMKm8rYSx0WzBdPXMqeCtoKmIrZypfLHRbMV09bCp4K2YqYit2Kl8sdFsyXT1jKngrcCpiK20qXyx0WzNdPXUqeCtkKmIreSpfLHRbNF09cyp3K2gqaytnKkEsdFs1XT1sKncrZiprK3YqQSx0WzZdPWMqdytwKmsrbSpBLHRbN109dSp3K2Qqayt5KkEsdFs4XT1zKlQraCpNK2cqUyx0WzldPWwqVCtmKk0rdipTLHRbMTBdPWMqVCtwKk0rbSpTLHRbMTFdPXUqVCtkKk0reSpTLGUhPT10JiYodFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pO3JldHVybiB0fX0se31dLDI2ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbNF0sbz1lWzVdLHM9ZVs2XSxsPWVbN10sYz1lWzhdLHU9ZVs5XSxoPWVbMTBdLGY9ZVsxMV07ZSE9PXQmJih0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pO3JldHVybiB0WzRdPWEqaStjKm4sdFs1XT1vKmkrdSpuLHRbNl09cyppK2gqbix0WzddPWwqaStmKm4sdFs4XT1jKmktYSpuLHRbOV09dSppLW8qbix0WzEwXT1oKmktcypuLHRbMTFdPWYqaS1sKm4sdH19LHt9XSwyNjk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzBdLG89ZVsxXSxzPWVbMl0sbD1lWzNdLGM9ZVs4XSx1PWVbOV0saD1lWzEwXSxmPWVbMTFdO2UhPT10JiYodFs0XT1lWzRdLHRbNV09ZVs1XSx0WzZdPWVbNl0sdFs3XT1lWzddLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKTtyZXR1cm4gdFswXT1hKmktYypuLHRbMV09byppLXUqbix0WzJdPXMqaS1oKm4sdFszXT1sKmktZipuLHRbOF09YSpuK2MqaSx0WzldPW8qbit1KmksdFsxMF09cypuK2gqaSx0WzExXT1sKm4rZippLHR9fSx7fV0sMjcwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVswXSxvPWVbMV0scz1lWzJdLGw9ZVszXSxjPWVbNF0sdT1lWzVdLGg9ZVs2XSxmPWVbN107ZSE9PXQmJih0WzhdPWVbOF0sdFs5XT1lWzldLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTFdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKTtyZXR1cm4gdFswXT1hKmkrYypuLHRbMV09byppK3Uqbix0WzJdPXMqaStoKm4sdFszXT1sKmkrZipuLHRbNF09YyppLWEqbix0WzVdPXUqaS1vKm4sdFs2XT1oKmktcypuLHRbN109ZippLWwqbix0fX0se31dLDI3MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49clswXSxpPXJbMV0sYT1yWzJdO3JldHVybiB0WzBdPWVbMF0qbix0WzFdPWVbMV0qbix0WzJdPWVbMl0qbix0WzNdPWVbM10qbix0WzRdPWVbNF0qaSx0WzVdPWVbNV0qaSx0WzZdPWVbNl0qaSx0WzddPWVbN10qaSx0WzhdPWVbOF0qYSx0WzldPWVbOV0qYSx0WzEwXT1lWzEwXSphLHRbMTFdPWVbMTFdKmEsdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0sdH19LHt9XSwyNzI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHMsbCxjLHUsaCxmLHAsZCxnPXJbMF0sdj1yWzFdLG09clsyXTtlPT09dD8odFsxMl09ZVswXSpnK2VbNF0qditlWzhdKm0rZVsxMl0sdFsxM109ZVsxXSpnK2VbNV0qditlWzldKm0rZVsxM10sdFsxNF09ZVsyXSpnK2VbNl0qditlWzEwXSptK2VbMTRdLHRbMTVdPWVbM10qZytlWzddKnYrZVsxMV0qbStlWzE1XSk6KG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLGM9ZVs2XSx1PWVbN10saD1lWzhdLGY9ZVs5XSxwPWVbMTBdLGQ9ZVsxMV0sdFswXT1uLHRbMV09aSx0WzJdPWEsdFszXT1vLHRbNF09cyx0WzVdPWwsdFs2XT1jLHRbN109dSx0WzhdPWgsdFs5XT1mLHRbMTBdPXAsdFsxMV09ZCx0WzEyXT1uKmcrcyp2K2gqbStlWzEyXSx0WzEzXT1pKmcrbCp2K2YqbStlWzEzXSx0WzE0XT1hKmcrYyp2K3AqbStlWzE0XSx0WzE1XT1vKmcrdSp2K2QqbStlWzE1XSk7cmV0dXJuIHR9fSx7fV0sMjczOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYodD09PWUpe3ZhciByPWVbMV0sbj1lWzJdLGk9ZVszXSxhPWVbNl0sbz1lWzddLHM9ZVsxMV07dFsxXT1lWzRdLHRbMl09ZVs4XSx0WzNdPWVbMTJdLHRbNF09cix0WzZdPWVbOV0sdFs3XT1lWzEzXSx0WzhdPW4sdFs5XT1hLHRbMTFdPWVbMTRdLHRbMTJdPWksdFsxM109byx0WzE0XT1zfWVsc2UgdFswXT1lWzBdLHRbMV09ZVs0XSx0WzJdPWVbOF0sdFszXT1lWzEyXSx0WzRdPWVbMV0sdFs1XT1lWzVdLHRbNl09ZVs5XSx0WzddPWVbMTNdLHRbOF09ZVsyXSx0WzldPWVbNl0sdFsxMF09ZVsxMF0sdFsxMV09ZVsxNF0sdFsxMl09ZVszXSx0WzEzXT1lWzddLHRbMTRdPWVbMTFdLHRbMTVdPWVbMTVdO3JldHVybiB0fX0se31dLDI3NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTp0WzBdPTEvZVswXTticmVhaztjYXNlIDQ6bih0LGUpO2JyZWFrO2Nhc2UgOTppKHQsZSk7YnJlYWs7Y2FzZSAxNjphKHQsZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJjdXJyZW50bHkgc3VwcG9ydHMgbWF0cmljZXMgdXAgdG8gNHg0XCIpfXJldHVybiB0fTt2YXIgbj10KFwiZ2wtbWF0Mi9pbnZlcnRcIiksaT10KFwiZ2wtbWF0My9pbnZlcnRcIiksYT10KFwiZ2wtbWF0NC9pbnZlcnRcIil9LHtcImdsLW1hdDIvaW52ZXJ0XCI6MjU0LFwiZ2wtbWF0My9pbnZlcnRcIjoyNTUsXCJnbC1tYXQ0L2ludmVydFwiOjI2Mn1dLDI3NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJiYXJ5Y2VudHJpY1wiKSxpPXQoXCJwb2x5dG9wZS1jbG9zZXN0LXBvaW50L2xpYi9jbG9zZXN0X3BvaW50XzJkLmpzXCIpO2Z1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9WzAsMCwwLDBdLG49MDtuPDQ7KytuKWZvcih2YXIgaT0wO2k8NDsrK2kpcltpXSs9dFs0Km4raV0qZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBvKHQsZSxyLG4saSl7Zm9yKHZhciBvPWEobixhKHIsYShlLFt0WzBdLHRbMV0sdFsyXSwxXSkpKSxzPTA7czwzOysrcylvW3NdLz1vWzNdO3JldHVyblsuNSppWzBdKigxK29bMF0pLC41KmlbMV0qKDEtb1sxXSldfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLHMsbCl7aWYoMT09PXQubGVuZ3RoKXJldHVyblswLHRbMF0uc2xpY2UoKV07Zm9yKHZhciBjPW5ldyBBcnJheSh0Lmxlbmd0aCksdT0wO3U8dC5sZW5ndGg7Kyt1KWNbdV09byh0W3VdLHIsYSxzLGwpO2Zvcih2YXIgaD0wLGY9MS8wLHU9MDt1PGMubGVuZ3RoOysrdSl7Zm9yKHZhciBwPTAsZD0wO2Q8MjsrK2QpcCs9TWF0aC5wb3coY1t1XVtkXS1lW2RdLDIpO3A8ZiYmKGY9cCxoPXUpfWZvcih2YXIgZz1mdW5jdGlvbih0LGUpe2lmKDI9PT10Lmxlbmd0aCl7Zm9yKHZhciByPTAsYT0wLG89MDtvPDI7KytvKXIrPU1hdGgucG93KGVbb10tdFswXVtvXSwyKSxhKz1NYXRoLnBvdyhlW29dLXRbMV1bb10sMik7cmV0dXJuIHI9TWF0aC5zcXJ0KHIpLGE9TWF0aC5zcXJ0KGEpLHIrYTwxZS02P1sxLDBdOlthLyhyK2EpLHIvKGErcildfWlmKDM9PT10Lmxlbmd0aCl7dmFyIHM9WzAsMF07cmV0dXJuIGkodFswXSx0WzFdLHRbMl0sZSxzKSxuKHQscyl9cmV0dXJuW119KGMsZSksdj0wLHU9MDt1PDM7Kyt1KXtpZihnW3VdPC0uMDAxfHxnW3VdPjEuMDAwMSlyZXR1cm4gbnVsbDt2Kz1nW3VdfWlmKE1hdGguYWJzKHYtMSk+LjAwMSlyZXR1cm4gbnVsbDtyZXR1cm5baCxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bMCwwLDBdLG49MDtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9dFtuXSxhPWVbbl0sbz0wO288MzsrK28pcltvXSs9YSppW29dO3JldHVybiByfSh0LGcpLGddfX0se2JhcnljZW50cmljOjY0LFwicG9seXRvcGUtY2xvc2VzdC1wb2ludC9saWIvY2xvc2VzdF9wb2ludF8yZC5qc1wiOjQ3NH1dLDI3NjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCJnbHNsaWZ5XCIpLGk9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiwgbm9ybWFsO1xcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xcblxcbnVuaWZvcm0gbWF0NCBtb2RlbFxcbiAgICAgICAgICAgLCB2aWV3XFxuICAgICAgICAgICAsIHByb2plY3Rpb25cXG4gICAgICAgICAgICwgaW52ZXJzZU1vZGVsO1xcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvblxcbiAgICAgICAgICAgLCBsaWdodFBvc2l0aW9uO1xcblxcbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxcbiAgICAgICAgICAgLCBmX2xpZ2h0RGlyZWN0aW9uXFxuICAgICAgICAgICAsIGZfZXllRGlyZWN0aW9uXFxuICAgICAgICAgICAsIGZfZGF0YTtcXG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcXG52YXJ5aW5nIHZlYzIgZl91djtcXG5cXG52ZWM0IHByb2plY3QodmVjMyBwKSB7XFxuICByZXR1cm4gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocCwgMS4wKTtcXG59XFxuXFxudm9pZCBtYWluKCkge1xcbiAgZ2xfUG9zaXRpb24gICAgICA9IHByb2plY3QocG9zaXRpb24pO1xcblxcbiAgLy9MaWdodGluZyBnZW9tZXRyeSBwYXJhbWV0ZXJzXFxuICB2ZWM0IGNhbWVyYUNvb3JkaW5hdGUgPSB2aWV3ICogdmVjNChwb3NpdGlvbiAsIDEuMCk7XFxuICBjYW1lcmFDb29yZGluYXRlLnh5eiAvPSBjYW1lcmFDb29yZGluYXRlLnc7XFxuICBmX2xpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xcbiAgZl9leWVEaXJlY3Rpb24gICA9IGV5ZVBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XFxuICBmX25vcm1hbCAgPSBub3JtYWxpemUoKHZlYzQobm9ybWFsLCAwLjApICogaW52ZXJzZU1vZGVsKS54eXopO1xcblxcbiAgZl9jb2xvciAgICAgICAgICA9IGNvbG9yO1xcbiAgZl9kYXRhICAgICAgICAgICA9IHBvc2l0aW9uO1xcbiAgZl91diAgICAgICAgICAgICA9IHV2O1xcbn1cXG5cIl0pLGE9bihbXCIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZVxcblxcbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmZsb2F0IGJlY2ttYW5uRGlzdHJpYnV0aW9uKGZsb2F0IHgsIGZsb2F0IHJvdWdobmVzcykge1xcbiAgZmxvYXQgTmRvdEggPSBtYXgoeCwgMC4wMDAxKTtcXG4gIGZsb2F0IGNvczJBbHBoYSA9IE5kb3RIICogTmRvdEg7XFxuICBmbG9hdCB0YW4yQWxwaGEgPSAoY29zMkFscGhhIC0gMS4wKSAvIGNvczJBbHBoYTtcXG4gIGZsb2F0IHJvdWdobmVzczIgPSByb3VnaG5lc3MgKiByb3VnaG5lc3M7XFxuICBmbG9hdCBkZW5vbSA9IDMuMTQxNTkyNjUzNTg5NzkzICogcm91Z2huZXNzMiAqIGNvczJBbHBoYSAqIGNvczJBbHBoYTtcXG4gIHJldHVybiBleHAodGFuMkFscGhhIC8gcm91Z2huZXNzMikgLyBkZW5vbTtcXG59XFxuXFxuZmxvYXQgY29va1RvcnJhbmNlU3BlY3VsYXIoXFxuICB2ZWMzIGxpZ2h0RGlyZWN0aW9uLFxcbiAgdmVjMyB2aWV3RGlyZWN0aW9uLFxcbiAgdmVjMyBzdXJmYWNlTm9ybWFsLFxcbiAgZmxvYXQgcm91Z2huZXNzLFxcbiAgZmxvYXQgZnJlc25lbCkge1xcblxcbiAgZmxvYXQgVmRvdE4gPSBtYXgoZG90KHZpZXdEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xcbiAgZmxvYXQgTGRvdE4gPSBtYXgoZG90KGxpZ2h0RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSwgMC4wKTtcXG5cXG4gIC8vSGFsZiBhbmdsZSB2ZWN0b3JcXG4gIHZlYzMgSCA9IG5vcm1hbGl6ZShsaWdodERpcmVjdGlvbiArIHZpZXdEaXJlY3Rpb24pO1xcblxcbiAgLy9HZW9tZXRyaWMgdGVybVxcbiAgZmxvYXQgTmRvdEggPSBtYXgoZG90KHN1cmZhY2VOb3JtYWwsIEgpLCAwLjApO1xcbiAgZmxvYXQgVmRvdEggPSBtYXgoZG90KHZpZXdEaXJlY3Rpb24sIEgpLCAwLjAwMDAwMSk7XFxuICBmbG9hdCBMZG90SCA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIEgpLCAwLjAwMDAwMSk7XFxuICBmbG9hdCBHMSA9ICgyLjAgKiBOZG90SCAqIFZkb3ROKSAvIFZkb3RIO1xcbiAgZmxvYXQgRzIgPSAoMi4wICogTmRvdEggKiBMZG90TikgLyBMZG90SDtcXG4gIGZsb2F0IEcgPSBtaW4oMS4wLCBtaW4oRzEsIEcyKSk7XFxuICBcXG4gIC8vRGlzdHJpYnV0aW9uIHRlcm1cXG4gIGZsb2F0IEQgPSBiZWNrbWFubkRpc3RyaWJ1dGlvbihOZG90SCwgcm91Z2huZXNzKTtcXG5cXG4gIC8vRnJlc25lbCB0ZXJtXFxuICBmbG9hdCBGID0gcG93KDEuMCAtIFZkb3ROLCBmcmVzbmVsKTtcXG5cXG4gIC8vTXVsdGlwbHkgdGVybXMgYW5kIGRvbmVcXG4gIHJldHVybiAgRyAqIEYgKiBEIC8gbWF4KDMuMTQxNTkyNjUgKiBWZG90TiwgMC4wMDAwMDEpO1xcbn1cXG5cXG4vLyNwcmFnbWEgZ2xzbGlmeTogYmVja21hbm4gPSByZXF1aXJlKGdsc2wtc3BlY3VsYXItYmVja21hbm4pIC8vIHVzZWQgaW4gZ2wtc3VyZmFjZTNkXFxuXFxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcXG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XFxuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcXG59XFxuXFxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XFxudW5pZm9ybSBmbG9hdCByb3VnaG5lc3NcXG4gICAgICAgICAgICAsIGZyZXNuZWxcXG4gICAgICAgICAgICAsIGthbWJpZW50XFxuICAgICAgICAgICAgLCBrZGlmZnVzZVxcbiAgICAgICAgICAgICwga3NwZWN1bGFyO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxuXFxudmFyeWluZyB2ZWMzIGZfbm9ybWFsXFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cXG4gICAgICAgICAgICwgZl9leWVEaXJlY3Rpb25cXG4gICAgICAgICAgICwgZl9kYXRhO1xcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xcbnZhcnlpbmcgdmVjMiBmX3V2O1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmIChmX2NvbG9yLmEgPT0gMC4wIHx8XFxuICAgIG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9kYXRhKVxcbiAgKSBkaXNjYXJkO1xcblxcbiAgdmVjMyBOID0gbm9ybWFsaXplKGZfbm9ybWFsKTtcXG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShmX2xpZ2h0RGlyZWN0aW9uKTtcXG4gIHZlYzMgViA9IG5vcm1hbGl6ZShmX2V5ZURpcmVjdGlvbik7XFxuXFxuICBpZihnbF9Gcm9udEZhY2luZykge1xcbiAgICBOID0gLU47XFxuICB9XFxuXFxuICBmbG9hdCBzcGVjdWxhciA9IG1pbigxLjAsIG1heCgwLjAsIGNvb2tUb3JyYW5jZVNwZWN1bGFyKEwsIFYsIE4sIHJvdWdobmVzcywgZnJlc25lbCkpKTtcXG4gIC8vZmxvYXQgc3BlY3VsYXIgPSBtYXgoMC4wLCBiZWNrbWFubihMLCBWLCBOLCByb3VnaG5lc3MpKTsgLy8gdXNlZCBpbiBnbC1zdXJmYWNlM2RcXG5cXG4gIGZsb2F0IGRpZmZ1c2UgID0gbWluKGthbWJpZW50ICsga2RpZmZ1c2UgKiBtYXgoZG90KE4sIEwpLCAwLjApLCAxLjApO1xcblxcbiAgdmVjNCBzdXJmYWNlQ29sb3IgPSB2ZWM0KGZfY29sb3IucmdiLCAxLjApICogdGV4dHVyZTJEKHRleHR1cmUsIGZfdXYpO1xcbiAgdmVjNCBsaXRDb2xvciA9IHN1cmZhY2VDb2xvci5hICogdmVjNChkaWZmdXNlICogc3VyZmFjZUNvbG9yLnJnYiArIGtzcGVjdWxhciAqIHZlYzMoMSwxLDEpICogc3BlY3VsYXIsICAxLjApO1xcblxcbiAgZ2xfRnJhZ0NvbG9yID0gbGl0Q29sb3IgKiBmX2NvbG9yLmE7XFxufVxcblwiXSksbz1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xcblxcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcXG5cXG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcXG52YXJ5aW5nIHZlYzMgZl9kYXRhO1xcbnZhcnlpbmcgdmVjMiBmX3V2O1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxuICBmX2NvbG9yID0gY29sb3I7XFxuICBmX2RhdGEgID0gcG9zaXRpb247XFxuICBmX3V2ICAgID0gdXY7XFxufVwiXSkscz1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XFxuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XFxufVxcblxcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xcblxcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xcbnZhcnlpbmcgdmVjMyBmX2RhdGE7XFxudmFyeWluZyB2ZWMyIGZfdXY7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9kYXRhKSkgZGlzY2FyZDtcXG5cXG4gIGdsX0ZyYWdDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dikgKiBvcGFjaXR5O1xcbn1cIl0pLGw9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcXG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xcbn1cXG5cXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcXG5hdHRyaWJ1dGUgdmVjMiB1djtcXG5hdHRyaWJ1dGUgZmxvYXQgcG9pbnRTaXplO1xcblxcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcXG5cXG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcXG52YXJ5aW5nIHZlYzIgZl91djtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBwb3NpdGlvbikpIHtcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAuMCwgMC4wICwwLjAgLDAuMCk7XFxuICB9IGVsc2Uge1xcbiAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xcbiAgfVxcbiAgZ2xfUG9pbnRTaXplID0gcG9pbnRTaXplO1xcbiAgZl9jb2xvciA9IGNvbG9yO1xcbiAgZl91diA9IHV2O1xcbn1cIl0pLGM9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcXG5cXG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcXG52YXJ5aW5nIHZlYzIgZl91djtcXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWMyIHBvaW50UiA9IGdsX1BvaW50Q29vcmQueHkgLSB2ZWMyKDAuNSwgMC41KTtcXG4gIGlmKGRvdChwb2ludFIsIHBvaW50UikgPiAwLjI1KSB7XFxuICAgIGRpc2NhcmQ7XFxuICB9XFxuICBnbF9GcmFnQ29sb3IgPSBmX2NvbG9yICogdGV4dHVyZTJEKHRleHR1cmUsIGZfdXYpICogb3BhY2l0eTtcXG59XCJdKSx1PW4oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzQgaWQ7XFxuXFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcblxcbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjNCBmX2lkO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxuICBmX2lkICAgICAgICA9IGlkO1xcbiAgZl9wb3NpdGlvbiAgPSBwb3NpdGlvbjtcXG59XCJdKSxoPW4oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcXG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XFxuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcXG59XFxuXFxudW5pZm9ybSB2ZWMzICBjbGlwQm91bmRzWzJdO1xcbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xcblxcbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjNCBmX2lkO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfcG9zaXRpb24pKSBkaXNjYXJkO1xcblxcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwaWNrSWQsIGZfaWQueHl6KTtcXG59XCJdKSxmPW4oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcXG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XFxuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcXG59XFxuXFxuYXR0cmlidXRlIHZlYzMgIHBvc2l0aW9uO1xcbmF0dHJpYnV0ZSBmbG9hdCBwb2ludFNpemU7XFxuYXR0cmlidXRlIHZlYzQgIGlkO1xcblxcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcXG5cXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzQgZl9pZDtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBwb3NpdGlvbikpIHtcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDAuMCk7XFxuICB9IGVsc2Uge1xcbiAgICBnbF9Qb3NpdGlvbiAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG4gICAgZ2xfUG9pbnRTaXplID0gcG9pbnRTaXplO1xcbiAgfVxcbiAgZl9pZCAgICAgICAgID0gaWQ7XFxuICBmX3Bvc2l0aW9uICAgPSBwb3NpdGlvbjtcXG59XCJdKSxwPW4oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XFxuXFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxufVwiXSksZD1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnVuaWZvcm0gdmVjMyBjb250b3VyQ29sb3I7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb250b3VyQ29sb3IsIDEuMCk7XFxufVxcblwiXSk7ci5tZXNoU2hhZGVyPXt2ZXJ0ZXg6aSxmcmFnbWVudDphLGF0dHJpYnV0ZXM6W3tuYW1lOlwicG9zaXRpb25cIix0eXBlOlwidmVjM1wifSx7bmFtZTpcIm5vcm1hbFwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwiY29sb3JcIix0eXBlOlwidmVjNFwifSx7bmFtZTpcInV2XCIsdHlwZTpcInZlYzJcIn1dfSxyLndpcmVTaGFkZXI9e3ZlcnRleDpvLGZyYWdtZW50OnMsYXR0cmlidXRlczpbe25hbWU6XCJwb3NpdGlvblwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwiY29sb3JcIix0eXBlOlwidmVjNFwifSx7bmFtZTpcInV2XCIsdHlwZTpcInZlYzJcIn1dfSxyLnBvaW50U2hhZGVyPXt2ZXJ0ZXg6bCxmcmFnbWVudDpjLGF0dHJpYnV0ZXM6W3tuYW1lOlwicG9zaXRpb25cIix0eXBlOlwidmVjM1wifSx7bmFtZTpcImNvbG9yXCIsdHlwZTpcInZlYzRcIn0se25hbWU6XCJ1dlwiLHR5cGU6XCJ2ZWMyXCJ9LHtuYW1lOlwicG9pbnRTaXplXCIsdHlwZTpcImZsb2F0XCJ9XX0sci5waWNrU2hhZGVyPXt2ZXJ0ZXg6dSxmcmFnbWVudDpoLGF0dHJpYnV0ZXM6W3tuYW1lOlwicG9zaXRpb25cIix0eXBlOlwidmVjM1wifSx7bmFtZTpcImlkXCIsdHlwZTpcInZlYzRcIn1dfSxyLnBvaW50UGlja1NoYWRlcj17dmVydGV4OmYsZnJhZ21lbnQ6aCxhdHRyaWJ1dGVzOlt7bmFtZTpcInBvc2l0aW9uXCIsdHlwZTpcInZlYzNcIn0se25hbWU6XCJwb2ludFNpemVcIix0eXBlOlwiZmxvYXRcIn0se25hbWU6XCJpZFwiLHR5cGU6XCJ2ZWM0XCJ9XX0sci5jb250b3VyU2hhZGVyPXt2ZXJ0ZXg6cCxmcmFnbWVudDpkLGF0dHJpYnV0ZXM6W3tuYW1lOlwicG9zaXRpb25cIix0eXBlOlwidmVjM1wifV19fSx7Z2xzbGlmeTo0MDJ9XSwyNzc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2wtc2hhZGVyXCIpLGk9dChcImdsLWJ1ZmZlclwiKSxhPXQoXCJnbC12YW9cIiksbz10KFwiZ2wtdGV4dHVyZTJkXCIpLHM9dChcIm5vcm1hbHNcIiksbD10KFwiZ2wtbWF0NC9tdWx0aXBseVwiKSxjPXQoXCJnbC1tYXQ0L2ludmVydFwiKSx1PXQoXCJuZGFycmF5XCIpLGg9dChcImNvbG9ybWFwXCIpLGY9dChcInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyXCIpLHA9dChcInR5cGVkYXJyYXktcG9vbFwiKSxkPXQoXCIuL2xpYi9zaGFkZXJzXCIpLGc9dChcIi4vbGliL2Nsb3Nlc3QtcG9pbnRcIiksdj1kLm1lc2hTaGFkZXIsbT1kLndpcmVTaGFkZXIseT1kLnBvaW50U2hhZGVyLHg9ZC5waWNrU2hhZGVyLGI9ZC5wb2ludFBpY2tTaGFkZXIsXz1kLmNvbnRvdXJTaGFkZXIsdz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24gayh0LGUscixuLGksYSxvLHMsbCxjLHUsaCxmLHAsZCxnLHYsbSx5LHgsYixfLGssQSxULE0sUyl7dGhpcy5nbD10LHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuY2VsbHM9W10sdGhpcy5wb3NpdGlvbnM9W10sdGhpcy5pbnRlbnNpdHk9W10sdGhpcy50ZXh0dXJlPWUsdGhpcy5kaXJ0eT0hMCx0aGlzLnRyaVNoYWRlcj1yLHRoaXMubGluZVNoYWRlcj1uLHRoaXMucG9pbnRTaGFkZXI9aSx0aGlzLnBpY2tTaGFkZXI9YSx0aGlzLnBvaW50UGlja1NoYWRlcj1vLHRoaXMuY29udG91clNoYWRlcj1zLHRoaXMudHJpYW5nbGVQb3NpdGlvbnM9bCx0aGlzLnRyaWFuZ2xlQ29sb3JzPXUsdGhpcy50cmlhbmdsZU5vcm1hbHM9Zix0aGlzLnRyaWFuZ2xlVVZzPWgsdGhpcy50cmlhbmdsZUlkcz1jLHRoaXMudHJpYW5nbGVWQU89cCx0aGlzLnRyaWFuZ2xlQ291bnQ9MCx0aGlzLmxpbmVXaWR0aD0xLHRoaXMuZWRnZVBvc2l0aW9ucz1kLHRoaXMuZWRnZUNvbG9ycz12LHRoaXMuZWRnZVVWcz1tLHRoaXMuZWRnZUlkcz1nLHRoaXMuZWRnZVZBTz15LHRoaXMuZWRnZUNvdW50PTAsdGhpcy5wb2ludFBvc2l0aW9ucz14LHRoaXMucG9pbnRDb2xvcnM9Xyx0aGlzLnBvaW50VVZzPWssdGhpcy5wb2ludFNpemVzPUEsdGhpcy5wb2ludElkcz1iLHRoaXMucG9pbnRWQU89VCx0aGlzLnBvaW50Q291bnQ9MCx0aGlzLmNvbnRvdXJMaW5lV2lkdGg9MSx0aGlzLmNvbnRvdXJQb3NpdGlvbnM9TSx0aGlzLmNvbnRvdXJWQU89Uyx0aGlzLmNvbnRvdXJDb3VudD0wLHRoaXMuY29udG91ckNvbG9yPVswLDAsMF0sdGhpcy5jb250b3VyRW5hYmxlPSEwLHRoaXMucGlja0lkPTEsdGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5jbGlwQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMubGlnaHRQb3NpdGlvbj1bMWU1LDFlNSwwXSx0aGlzLmFtYmllbnRMaWdodD0uOCx0aGlzLmRpZmZ1c2VMaWdodD0uOCx0aGlzLnNwZWN1bGFyTGlnaHQ9Mix0aGlzLnJvdWdobmVzcz0uNSx0aGlzLmZyZXNuZWw9MS41LHRoaXMub3BhY2l0eT0xLHRoaXMuaGFzQWxwaGE9ITEsdGhpcy5vcGFjaXR5c2NhbGU9ITEsdGhpcy5fbW9kZWw9dyx0aGlzLl92aWV3PXcsdGhpcy5fcHJvamVjdGlvbj13LHRoaXMuX3Jlc29sdXRpb249WzEsMV19dmFyIEE9ay5wcm90b3R5cGU7ZnVuY3Rpb24gVCh0LGUpe2lmKCFlKXJldHVybiAxO2lmKCFlLmxlbmd0aClyZXR1cm4gMTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoOysrcil7aWYoZS5sZW5ndGg8MilyZXR1cm4gMTtpZihlW3JdWzBdPT09dClyZXR1cm4gZVtyXVsxXTtpZihlW3JdWzBdPnQmJnI+MCl7dmFyIG49KGVbcl1bMF0tdCkvKGVbcl1bMF0tZVtyLTFdWzBdKTtyZXR1cm4gZVtyXVsxXSooMS1uKStuKmVbci0xXVsxXX19cmV0dXJuIDF9ZnVuY3Rpb24gTSh0KXt2YXIgZT1uKHQseS52ZXJ0ZXgseS5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0yLGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0zLGUuYXR0cmlidXRlcy5wb2ludFNpemUubG9jYXRpb249NCxlfWZ1bmN0aW9uIFModCl7dmFyIGU9bih0LHgudmVydGV4LHguZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuaWQubG9jYXRpb249MSxlfWZ1bmN0aW9uIEUodCl7dmFyIGU9bih0LGIudmVydGV4LGIuZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuaWQubG9jYXRpb249MSxlLmF0dHJpYnV0ZXMucG9pbnRTaXplLmxvY2F0aW9uPTQsZX1mdW5jdGlvbiBDKHQpe3ZhciBlPW4odCxfLnZlcnRleCxfLmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZX1BLmlzT3BhcXVlPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaGFzQWxwaGF9LEEuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc0FscGhhfSxBLnBpY2tTbG90cz0xLEEuc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH0sQS5oaWdobGlnaHQ9ZnVuY3Rpb24odCl7aWYodCYmdGhpcy5jb250b3VyRW5hYmxlKXtmb3IodmFyIGU9Zih0aGlzLmNlbGxzLHRoaXMuaW50ZW5zaXR5LHQuaW50ZW5zaXR5KSxyPWUuY2VsbHMsbj1lLnZlcnRleElkcyxpPWUudmVydGV4V2VpZ2h0cyxhPXIubGVuZ3RoLG89cC5tYWxsb2NGbG9hdDMyKDYqYSkscz0wLGw9MDtsPGE7KytsKWZvcih2YXIgYz1yW2xdLHU9MDt1PDI7Kyt1KXt2YXIgaD1jWzBdOzI9PT1jLmxlbmd0aCYmKGg9Y1t1XSk7Zm9yKHZhciBkPW5baF1bMF0sZz1uW2hdWzFdLHY9aVtoXSxtPTEtdix5PXRoaXMucG9zaXRpb25zW2RdLHg9dGhpcy5wb3NpdGlvbnNbZ10sYj0wO2I8MzsrK2Ipb1tzKytdPXYqeVtiXSttKnhbYl19dGhpcy5jb250b3VyQ291bnQ9cy8zfDAsdGhpcy5jb250b3VyUG9zaXRpb25zLnVwZGF0ZShvLnN1YmFycmF5KDAscykpLHAuZnJlZShvKX1lbHNlIHRoaXMuY29udG91ckNvdW50PTB9LEEudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e307dmFyIGU9dGhpcy5nbDt0aGlzLmRpcnR5PSEwLFwiY29udG91ckVuYWJsZVwiaW4gdCYmKHRoaXMuY29udG91ckVuYWJsZT10LmNvbnRvdXJFbmFibGUpLFwiY29udG91ckNvbG9yXCJpbiB0JiYodGhpcy5jb250b3VyQ29sb3I9dC5jb250b3VyQ29sb3IpLFwibGluZVdpZHRoXCJpbiB0JiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgpLFwibGlnaHRQb3NpdGlvblwiaW4gdCYmKHRoaXMubGlnaHRQb3NpdGlvbj10LmxpZ2h0UG9zaXRpb24pLHRoaXMuaGFzQWxwaGE9ITEsXCJvcGFjaXR5XCJpbiB0JiYodGhpcy5vcGFjaXR5PXQub3BhY2l0eSx0aGlzLm9wYWNpdHk8MSYmKHRoaXMuaGFzQWxwaGE9ITApKSxcIm9wYWNpdHlzY2FsZVwiaW4gdCYmKHRoaXMub3BhY2l0eXNjYWxlPXQub3BhY2l0eXNjYWxlLHRoaXMuaGFzQWxwaGE9ITApLFwiYW1iaWVudFwiaW4gdCYmKHRoaXMuYW1iaWVudExpZ2h0PXQuYW1iaWVudCksXCJkaWZmdXNlXCJpbiB0JiYodGhpcy5kaWZmdXNlTGlnaHQ9dC5kaWZmdXNlKSxcInNwZWN1bGFyXCJpbiB0JiYodGhpcy5zcGVjdWxhckxpZ2h0PXQuc3BlY3VsYXIpLFwicm91Z2huZXNzXCJpbiB0JiYodGhpcy5yb3VnaG5lc3M9dC5yb3VnaG5lc3MpLFwiZnJlc25lbFwiaW4gdCYmKHRoaXMuZnJlc25lbD10LmZyZXNuZWwpLHQudGV4dHVyZT8odGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRleHR1cmU9byhlLHQudGV4dHVyZSkpOnQuY29sb3JtYXAmJih0aGlzLnRleHR1cmUuc2hhcGU9WzI1NiwyNTZdLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZS5MSU5FQVJfTUlQTUFQX0xJTkVBUix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUuTElORUFSLHRoaXMudGV4dHVyZS5zZXRQaXhlbHMoZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9aCh7Y29sb3JtYXA6dCxuc2hhZGVzOjI1Nixmb3JtYXQ6XCJyZ2JhXCJ9KSxuPW5ldyBVaW50OEFycmF5KDEwMjQpLGk9MDtpPDI1NjsrK2kpe2Zvcih2YXIgYT1yW2ldLG89MDtvPDM7KytvKW5bNCppK29dPWFbb107bls0KmkrM109ZT8yNTUqVChpLzI1NSxlKToyNTUqYVszXX1yZXR1cm4gdShuLFsyNTYsMjU2LDRdLFs0LDAsMV0pfSh0LmNvbG9ybWFwLHRoaXMub3BhY2l0eXNjYWxlKSksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwKCkpO3ZhciByPXQuY2VsbHMsbj10LnBvc2l0aW9ucztpZihuJiZyKXt2YXIgaT1bXSxhPVtdLGw9W10sYz1bXSxmPVtdLHA9W10sZD1bXSxnPVtdLHY9W10sbT1bXSx5PVtdLHg9W10sYj1bXSxfPVtdO3RoaXMuY2VsbHM9cix0aGlzLnBvc2l0aW9ucz1uO3ZhciB3PXQudmVydGV4Tm9ybWFscyxrPXQuY2VsbE5vcm1hbHMsQT12b2lkIDA9PT10LnZlcnRleE5vcm1hbHNFcHNpbG9uPzFlLTY6dC52ZXJ0ZXhOb3JtYWxzRXBzaWxvbixNPXZvaWQgMD09PXQuZmFjZU5vcm1hbHNFcHNpbG9uPzFlLTY6dC5mYWNlTm9ybWFsc0Vwc2lsb247dC51c2VGYWNldE5vcm1hbHMmJiFrJiYoaz1zLmZhY2VOb3JtYWxzKHIsbixNKSksa3x8d3x8KHc9cy52ZXJ0ZXhOb3JtYWxzKHIsbixBKSk7dmFyIFM9dC52ZXJ0ZXhDb2xvcnMsRT10LmNlbGxDb2xvcnMsQz10Lm1lc2hDb2xvcnx8WzEsMSwxLDFdLEw9dC52ZXJ0ZXhVVnMsej10LnZlcnRleEludGVuc2l0eSxPPXQuY2VsbFVWcyxJPXQuY2VsbEludGVuc2l0eSxEPTEvMCxQPS0xLzA7aWYoIUwmJiFPKWlmKHopaWYodC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHMpRD0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMF0sUD0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMV07ZWxzZSBmb3IodmFyIFI9MDtSPHoubGVuZ3RoOysrUil7dmFyIEY9eltSXTtEPU1hdGgubWluKEQsRiksUD1NYXRoLm1heChQLEYpfWVsc2UgaWYoSSlmb3IoUj0wO1I8SS5sZW5ndGg7KytSKXtGPUlbUl07RD1NYXRoLm1pbihELEYpLFA9TWF0aC5tYXgoUCxGKX1lbHNlIGZvcihSPTA7UjxuLmxlbmd0aDsrK1Ipe0Y9bltSXVsyXTtEPU1hdGgubWluKEQsRiksUD1NYXRoLm1heChQLEYpfXRoaXMuaW50ZW5zaXR5PXp8fChJP2Z1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKW5baV09MDt2YXIgYT10Lmxlbmd0aDtmb3IoaT0wO2k8YTsrK2kpZm9yKHZhciBvPXRbaV0scz0wO3M8by5sZW5ndGg7KytzKW5bb1tzXV09cltpXTtyZXR1cm4gbn0ocixuLmxlbmd0aCxJKTpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT10W25dWzJdO3JldHVybiByfShuKSk7dmFyIEI9dC5wb2ludFNpemVzLE49dC5wb2ludFNpemV8fDE7dGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV07Zm9yKFI9MDtSPG4ubGVuZ3RoOysrUilmb3IodmFyIGo9bltSXSxWPTA7VjwzOysrVikhaXNOYU4oaltWXSkmJmlzRmluaXRlKGpbVl0pJiYodGhpcy5ib3VuZHNbMF1bVl09TWF0aC5taW4odGhpcy5ib3VuZHNbMF1bVl0saltWXSksdGhpcy5ib3VuZHNbMV1bVl09TWF0aC5tYXgodGhpcy5ib3VuZHNbMV1bVl0saltWXSkpO3ZhciBVPTAscT0wLEg9MDt0OmZvcihSPTA7UjxyLmxlbmd0aDsrK1Ipe3ZhciBHPXJbUl07c3dpdGNoKEcubGVuZ3RoKXtjYXNlIDE6Zm9yKGo9bltXPUdbMF1dLFY9MDtWPDM7KytWKWlmKGlzTmFOKGpbVl0pfHwhaXNGaW5pdGUoaltWXSkpY29udGludWUgdDttLnB1c2goalswXSxqWzFdLGpbMl0pLFg9Uz9TW1ddOkU/RVtSXTpDLHRoaXMub3BhY2l0eXNjYWxlJiZ6P2EucHVzaChYWzBdLFhbMV0sWFsyXSx0aGlzLm9wYWNpdHkqVCgoeltXXS1EKS8oUC1EKSx0aGlzLm9wYWNpdHlzY2FsZSkpOjM9PT1YLmxlbmd0aD95LnB1c2goWFswXSxYWzFdLFhbMl0sdGhpcy5vcGFjaXR5KTooeS5wdXNoKFhbMF0sWFsxXSxYWzJdLFhbM10qdGhpcy5vcGFjaXR5KSwhdGhpcy5oYXNBbHBoYSYmWFszXTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpLFo9TD9MW1ddOno/Wyh6W1ddLUQpLyhQLUQpLDBdOk8/T1tSXTpJP1soSVtSXS1EKS8oUC1EKSwwXTpbKGpbMl0tRCkvKFAtRCksMF0seC5wdXNoKFpbMF0sWlsxXSksQj9iLnB1c2goQltXXSk6Yi5wdXNoKE4pLF8ucHVzaChSKSxIKz0xO2JyZWFrO2Nhc2UgMjpmb3IoVj0wO1Y8MjsrK1Ype2o9bltXPUdbVl1dO2Zvcih2YXIgWT0wO1k8MzsrK1kpaWYoaXNOYU4oaltZXSl8fCFpc0Zpbml0ZShqW1ldKSljb250aW51ZSB0fWZvcihWPTA7VjwyOysrVil7aj1uW1c9R1tWXV07cC5wdXNoKGpbMF0salsxXSxqWzJdKSxYPVM/U1tXXTpFP0VbUl06Qyx0aGlzLm9wYWNpdHlzY2FsZSYmej9hLnB1c2goWFswXSxYWzFdLFhbMl0sdGhpcy5vcGFjaXR5KlQoKHpbV10tRCkvKFAtRCksdGhpcy5vcGFjaXR5c2NhbGUpKTozPT09WC5sZW5ndGg/ZC5wdXNoKFhbMF0sWFsxXSxYWzJdLHRoaXMub3BhY2l0eSk6KGQucHVzaChYWzBdLFhbMV0sWFsyXSxYWzNdKnRoaXMub3BhY2l0eSksIXRoaXMuaGFzQWxwaGEmJlhbM108MSYmKHRoaXMuaGFzQWxwaGE9ITApKSxaPUw/TFtXXTp6P1soeltXXS1EKS8oUC1EKSwwXTpPP09bUl06ST9bKElbUl0tRCkvKFAtRCksMF06WyhqWzJdLUQpLyhQLUQpLDBdLGcucHVzaChaWzBdLFpbMV0pLHYucHVzaChSKX1xKz0xO2JyZWFrO2Nhc2UgMzpmb3IoVj0wO1Y8MzsrK1YpZm9yKGo9bltXPUdbVl1dLFk9MDtZPDM7KytZKWlmKGlzTmFOKGpbWV0pfHwhaXNGaW5pdGUoaltZXSkpY29udGludWUgdDtmb3IoVj0wO1Y8MzsrK1Ype3ZhciBXLFgsWiwkO2o9bltXPUdbMi1WXV07aS5wdXNoKGpbMF0salsxXSxqWzJdKSxYPVM/U1tXXTpFP0VbUl06Qyx0aGlzLm9wYWNpdHlzY2FsZSYmej9hLnB1c2goWFswXSxYWzFdLFhbMl0sdGhpcy5vcGFjaXR5KlQoKHpbV10tRCkvKFAtRCksdGhpcy5vcGFjaXR5c2NhbGUpKTozPT09WC5sZW5ndGg/YS5wdXNoKFhbMF0sWFsxXSxYWzJdLHRoaXMub3BhY2l0eSk6KGEucHVzaChYWzBdLFhbMV0sWFsyXSxYWzNdKnRoaXMub3BhY2l0eSksIXRoaXMuaGFzQWxwaGEmJlhbM108MSYmKHRoaXMuaGFzQWxwaGE9ITApKSxaPUw/TFtXXTp6P1soeltXXS1EKS8oUC1EKSwwXTpPP09bUl06ST9bKElbUl0tRCkvKFAtRCksMF06WyhqWzJdLUQpLyhQLUQpLDBdLGMucHVzaChaWzBdLFpbMV0pLCQ9dz93W1ddOmtbUl0sbC5wdXNoKCRbMF0sJFsxXSwkWzJdKSxmLnB1c2goUil9VSs9MX19dGhpcy5wb2ludENvdW50PUgsdGhpcy5lZGdlQ291bnQ9cSx0aGlzLnRyaWFuZ2xlQ291bnQ9VSx0aGlzLnBvaW50UG9zaXRpb25zLnVwZGF0ZShtKSx0aGlzLnBvaW50Q29sb3JzLnVwZGF0ZSh5KSx0aGlzLnBvaW50VVZzLnVwZGF0ZSh4KSx0aGlzLnBvaW50U2l6ZXMudXBkYXRlKGIpLHRoaXMucG9pbnRJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheShfKSksdGhpcy5lZGdlUG9zaXRpb25zLnVwZGF0ZShwKSx0aGlzLmVkZ2VDb2xvcnMudXBkYXRlKGQpLHRoaXMuZWRnZVVWcy51cGRhdGUoZyksdGhpcy5lZGdlSWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkodikpLHRoaXMudHJpYW5nbGVQb3NpdGlvbnMudXBkYXRlKGkpLHRoaXMudHJpYW5nbGVDb2xvcnMudXBkYXRlKGEpLHRoaXMudHJpYW5nbGVVVnMudXBkYXRlKGMpLHRoaXMudHJpYW5nbGVOb3JtYWxzLnVwZGF0ZShsKSx0aGlzLnRyaWFuZ2xlSWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoZikpfX0sQS5kcmF3VHJhbnNwYXJlbnQ9QS5kcmF3PWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHx3LG49dC52aWV3fHx3LGk9dC5wcm9qZWN0aW9ufHx3LGE9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28pYVswXVtvXT1NYXRoLm1heChhWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksYVsxXVtvXT1NYXRoLm1pbihhWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dmFyIHM9e21vZGVsOnIsdmlldzpuLHByb2plY3Rpb246aSxpbnZlcnNlTW9kZWw6dy5zbGljZSgpLGNsaXBCb3VuZHM6YSxrYW1iaWVudDp0aGlzLmFtYmllbnRMaWdodCxrZGlmZnVzZTp0aGlzLmRpZmZ1c2VMaWdodCxrc3BlY3VsYXI6dGhpcy5zcGVjdWxhckxpZ2h0LHJvdWdobmVzczp0aGlzLnJvdWdobmVzcyxmcmVzbmVsOnRoaXMuZnJlc25lbCxleWVQb3NpdGlvbjpbMCwwLDBdLGxpZ2h0UG9zaXRpb246WzAsMCwwXSxjb250b3VyQ29sb3I6dGhpcy5jb250b3VyQ29sb3IsdGV4dHVyZTowfTtzLmludmVyc2VNb2RlbD1jKHMuaW52ZXJzZU1vZGVsLHMubW9kZWwpLGUuZGlzYWJsZShlLkNVTExfRkFDRSksdGhpcy50ZXh0dXJlLmJpbmQoMCk7dmFyIHU9bmV3IEFycmF5KDE2KTtsKHUscy52aWV3LHMubW9kZWwpLGwodSxzLnByb2plY3Rpb24sdSksYyh1LHUpO2ZvcihvPTA7bzwzOysrbylzLmV5ZVBvc2l0aW9uW29dPXVbMTIrb10vdVsxNV07dmFyIGgsZj11WzE1XTtmb3Iobz0wO288MzsrK28pZis9dGhpcy5saWdodFBvc2l0aW9uW29dKnVbNCpvKzNdO2ZvcihvPTA7bzwzOysrbyl7Zm9yKHZhciBwPXVbMTIrb10sZD0wO2Q8MzsrK2QpcCs9dVs0KmQrb10qdGhpcy5saWdodFBvc2l0aW9uW2RdO3MubGlnaHRQb3NpdGlvbltvXT1wL2Z9dGhpcy50cmlhbmdsZUNvdW50PjAmJigoaD10aGlzLnRyaVNoYWRlcikuYmluZCgpLGgudW5pZm9ybXM9cyx0aGlzLnRyaWFuZ2xlVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRVMsMCwzKnRoaXMudHJpYW5nbGVDb3VudCksdGhpcy50cmlhbmdsZVZBTy51bmJpbmQoKSk7dGhpcy5lZGdlQ291bnQ+MCYmdGhpcy5saW5lV2lkdGg+MCYmKChoPXRoaXMubGluZVNoYWRlcikuYmluZCgpLGgudW5pZm9ybXM9cyx0aGlzLmVkZ2VWQU8uYmluZCgpLGUubGluZVdpZHRoKHRoaXMubGluZVdpZHRoKnRoaXMucGl4ZWxSYXRpbyksZS5kcmF3QXJyYXlzKGUuTElORVMsMCwyKnRoaXMuZWRnZUNvdW50KSx0aGlzLmVkZ2VWQU8udW5iaW5kKCkpO3RoaXMucG9pbnRDb3VudD4wJiYoKGg9dGhpcy5wb2ludFNoYWRlcikuYmluZCgpLGgudW5pZm9ybXM9cyx0aGlzLnBvaW50VkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5QT0lOVFMsMCx0aGlzLnBvaW50Q291bnQpLHRoaXMucG9pbnRWQU8udW5iaW5kKCkpO3RoaXMuY29udG91ckVuYWJsZSYmdGhpcy5jb250b3VyQ291bnQ+MCYmdGhpcy5jb250b3VyTGluZVdpZHRoPjAmJigoaD10aGlzLmNvbnRvdXJTaGFkZXIpLmJpbmQoKSxoLnVuaWZvcm1zPXMsdGhpcy5jb250b3VyVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLHRoaXMuY29udG91ckNvdW50KSx0aGlzLmNvbnRvdXJWQU8udW5iaW5kKCkpfSxBLmRyYXdQaWNrPWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHx3LG49dC52aWV3fHx3LGk9dC5wcm9qZWN0aW9ufHx3LGE9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28pYVswXVtvXT1NYXRoLm1heChhWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksYVsxXVtvXT1NYXRoLm1pbihhWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dGhpcy5fbW9kZWw9W10uc2xpY2UuY2FsbChyKSx0aGlzLl92aWV3PVtdLnNsaWNlLmNhbGwobiksdGhpcy5fcHJvamVjdGlvbj1bXS5zbGljZS5jYWxsKGkpLHRoaXMuX3Jlc29sdXRpb249W2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF07dmFyIHMsbD17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGNsaXBCb3VuZHM6YSxwaWNrSWQ6dGhpcy5waWNrSWQvMjU1fTsoKHM9dGhpcy5waWNrU2hhZGVyKS5iaW5kKCkscy51bmlmb3Jtcz1sLHRoaXMudHJpYW5nbGVDb3VudD4wJiYodGhpcy50cmlhbmdsZVZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuVFJJQU5HTEVTLDAsMyp0aGlzLnRyaWFuZ2xlQ291bnQpLHRoaXMudHJpYW5nbGVWQU8udW5iaW5kKCkpLHRoaXMuZWRnZUNvdW50PjAmJih0aGlzLmVkZ2VWQU8uYmluZCgpLGUubGluZVdpZHRoKHRoaXMubGluZVdpZHRoKnRoaXMucGl4ZWxSYXRpbyksZS5kcmF3QXJyYXlzKGUuTElORVMsMCwyKnRoaXMuZWRnZUNvdW50KSx0aGlzLmVkZ2VWQU8udW5iaW5kKCkpLHRoaXMucG9pbnRDb3VudD4wKSYmKChzPXRoaXMucG9pbnRQaWNrU2hhZGVyKS5iaW5kKCkscy51bmlmb3Jtcz1sLHRoaXMucG9pbnRWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlBPSU5UUywwLHRoaXMucG9pbnRDb3VudCksdGhpcy5wb2ludFZBTy51bmJpbmQoKSl9LEEucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7Zm9yKHZhciBlPXQudmFsdWVbMF0rMjU2KnQudmFsdWVbMV0rNjU1MzYqdC52YWx1ZVsyXSxyPXRoaXMuY2VsbHNbZV0sbj10aGlzLnBvc2l0aW9ucyxpPW5ldyBBcnJheShyLmxlbmd0aCksYT0wO2E8ci5sZW5ndGg7KythKWlbYV09bltyW2FdXTt2YXIgbz1nKGksW3QuY29vcmRbMF0sdGhpcy5fcmVzb2x1dGlvblsxXS10LmNvb3JkWzFdXSx0aGlzLl9tb2RlbCx0aGlzLl92aWV3LHRoaXMuX3Byb2plY3Rpb24sdGhpcy5fcmVzb2x1dGlvbik7aWYoIW8pcmV0dXJuIG51bGw7dmFyIHM9b1syXSxsPTA7Zm9yKGE9MDthPHIubGVuZ3RoOysrYSlsKz1zW2FdKnRoaXMuaW50ZW5zaXR5W3JbYV1dO3JldHVybntwb3NpdGlvbjpvWzFdLGluZGV4OnJbb1swXV0sY2VsbDpyLGNlbGxJZDplLGludGVuc2l0eTpsLGRhdGFDb29yZGluYXRlOnRoaXMucG9zaXRpb25zW3Jbb1swXV1dfX0sQS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRyaVNoYWRlci5kaXNwb3NlKCksdGhpcy5saW5lU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBvaW50U2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMucG9pbnRQaWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVkFPLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlQ29sb3JzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVVZzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlTm9ybWFscy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZUlkcy5kaXNwb3NlKCksdGhpcy5lZGdlVkFPLmRpc3Bvc2UoKSx0aGlzLmVkZ2VQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMuZWRnZUNvbG9ycy5kaXNwb3NlKCksdGhpcy5lZGdlVVZzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VJZHMuZGlzcG9zZSgpLHRoaXMucG9pbnRWQU8uZGlzcG9zZSgpLHRoaXMucG9pbnRQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMucG9pbnRDb2xvcnMuZGlzcG9zZSgpLHRoaXMucG9pbnRVVnMuZGlzcG9zZSgpLHRoaXMucG9pbnRTaXplcy5kaXNwb3NlKCksdGhpcy5wb2ludElkcy5kaXNwb3NlKCksdGhpcy5jb250b3VyVkFPLmRpc3Bvc2UoKSx0aGlzLmNvbnRvdXJQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMuY29udG91clNoYWRlci5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoJiYodD0oZT10KS5nbCksISh0LmdldEV4dGVuc2lvbihcIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlc1wiKXx8dC5nZXRFeHRlbnNpb24oXCJNT1pfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzXCIpfHx0LmdldEV4dGVuc2lvbihcIldFQktJVF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXNcIikpKXRocm93IG5ldyBFcnJvcihcImRlcml2YXRpdmVzIG5vdCBzdXBwb3J0ZWRcIik7dmFyIHI9ZnVuY3Rpb24odCl7dmFyIGU9bih0LHYudmVydGV4LHYuZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlLmF0dHJpYnV0ZXMubm9ybWFsLmxvY2F0aW9uPTQsZX0odCkscz1mdW5jdGlvbih0KXt2YXIgZT1uKHQsbS52ZXJ0ZXgsbS5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0yLGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0zLGV9KHQpLGw9TSh0KSxjPVModCksaD1FKHQpLGY9Qyh0KSxwPW8odCx1KG5ldyBVaW50OEFycmF5KFsyNTUsMjU1LDI1NSwyNTVdKSxbMSwxLDRdKSk7cC5nZW5lcmF0ZU1pcG1hcCgpLHAubWluRmlsdGVyPXQuTElORUFSX01JUE1BUF9MSU5FQVIscC5tYWdGaWx0ZXI9dC5MSU5FQVI7dmFyIGQ9aSh0KSxnPWkodCkseT1pKHQpLHg9aSh0KSxiPWkodCksXz1hKHQsW3tidWZmZXI6ZCx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOmIsdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6Zyx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOnksdHlwZTp0LkZMT0FULHNpemU6Mn0se2J1ZmZlcjp4LHR5cGU6dC5GTE9BVCxzaXplOjN9XSksdz1pKHQpLEE9aSh0KSxUPWkodCksTD1pKHQpLHo9YSh0LFt7YnVmZmVyOncsdHlwZTp0LkZMT0FULHNpemU6M30se2J1ZmZlcjpMLHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOkEsdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjpULHR5cGU6dC5GTE9BVCxzaXplOjJ9XSksTz1pKHQpLEk9aSh0KSxEPWkodCksUD1pKHQpLFI9aSh0KSxGPWEodCxbe2J1ZmZlcjpPLHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6Uix0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjpJLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6RCx0eXBlOnQuRkxPQVQsc2l6ZToyfSx7YnVmZmVyOlAsdHlwZTp0LkZMT0FULHNpemU6MX1dKSxCPWkodCksTj1uZXcgayh0LHAscixzLGwsYyxoLGYsZCxiLGcseSx4LF8sdyxMLEEsVCx6LE8sUixJLEQsUCxGLEIsYSh0LFt7YnVmZmVyOkIsdHlwZTp0LkZMT0FULHNpemU6M31dKSk7cmV0dXJuIE4udXBkYXRlKGUpLE59fSx7XCIuL2xpYi9jbG9zZXN0LXBvaW50XCI6Mjc1LFwiLi9saWIvc2hhZGVyc1wiOjI3Nixjb2xvcm1hcDoxMTcsXCJnbC1idWZmZXJcIjoyMzgsXCJnbC1tYXQ0L2ludmVydFwiOjI2MixcImdsLW1hdDQvbXVsdGlwbHlcIjoyNjQsXCJnbC1zaGFkZXJcIjoyOTgsXCJnbC10ZXh0dXJlMmRcIjozMTUsXCJnbC12YW9cIjozMjAsbmRhcnJheTo0NDMsbm9ybWFsczo0NDYsXCJzaW1wbGljaWFsLWNvbXBsZXgtY29udG91clwiOjUwMyxcInR5cGVkYXJyYXktcG9vbFwiOjUzMH1dLDI3ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlLFswLDAsMCwxLDEsMCwxLDFdKSxzPWkoZSxhLmJveFZlcnQsYS5saW5lRnJhZyk7cmV0dXJuIG5ldyBvKHQscixzKX07dmFyIG49dChcImdsLWJ1ZmZlclwiKSxpPXQoXCJnbC1zaGFkZXJcIiksYT10KFwiLi9zaGFkZXJzXCIpO2Z1bmN0aW9uIG8odCxlLHIpe3RoaXMucGxvdD10LHRoaXMudmJvPWUsdGhpcy5zaGFkZXI9cn12YXIgcyxsLGM9by5wcm90b3R5cGU7Yy5iaW5kPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zaGFkZXI7dGhpcy52Ym8uYmluZCgpLHRoaXMuc2hhZGVyLmJpbmQoKSx0LmF0dHJpYnV0ZXMuY29vcmQucG9pbnRlcigpLHQudW5pZm9ybXMuc2NyZWVuQm94PXRoaXMucGxvdC5zY3JlZW5Cb3h9LGMuZHJhd0JveD0ocz1bMCwwXSxsPVswLDBdLGZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpcy5wbG90LG89dGhpcy5zaGFkZXIsYz1hLmdsO3NbMF09dCxzWzFdPWUsbFswXT1yLGxbMV09bixvLnVuaWZvcm1zLmxvPXMsby51bmlmb3Jtcy5oaT1sLG8udW5pZm9ybXMuY29sb3I9aSxjLmRyYXdBcnJheXMoYy5UUklBTkdMRV9TVFJJUCwwLDQpfSksYy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52Ym8uZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHtcIi4vc2hhZGVyc1wiOjI4MSxcImdsLWJ1ZmZlclwiOjIzOCxcImdsLXNoYWRlclwiOjI5OH1dLDI3OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlKSxhPWkoZSxvLmdyaWRWZXJ0LG8uZ3JpZEZyYWcpLGw9aShlLG8udGlja1ZlcnQsby5ncmlkRnJhZyk7cmV0dXJuIG5ldyBzKHQscixhLGwpfTt2YXIgbj10KFwiZ2wtYnVmZmVyXCIpLGk9dChcImdsLXNoYWRlclwiKSxhPXQoXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiKSxvPXQoXCIuL3NoYWRlcnNcIik7ZnVuY3Rpb24gcyh0LGUscixuKXt0aGlzLnBsb3Q9dCx0aGlzLnZibz1lLHRoaXMuc2hhZGVyPXIsdGhpcy50aWNrU2hhZGVyPW4sdGhpcy50aWNrcz1bW10sW11dfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gdC1lfXZhciBjLHUsaCxmLHAsZD1zLnByb3RvdHlwZTtkLmRyYXc9KGM9WzAsMF0sdT1bMCwwXSxoPVswLDBdLGZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMucGxvdCxlPXRoaXMudmJvLHI9dGhpcy5zaGFkZXIsbj10aGlzLnRpY2tzLGk9dC5nbCxhPXQuX3RpY2tCb3VuZHMsbz10LmRhdGFCb3gscz10LnZpZXdCb3gsbD10LmdyaWRMaW5lV2lkdGgsZj10LmdyaWRMaW5lQ29sb3IscD10LmdyaWRMaW5lRW5hYmxlLGQ9dC5waXhlbFJhdGlvLGc9MDtnPDI7KytnKXt2YXIgdj1hW2ddLG09YVtnKzJdLXYseT0uNSoob1tnKzJdK29bZ10pLHg9b1tnKzJdLW9bZ107dVtnXT0yKm0veCxjW2ddPTIqKHYteSkveH1yLmJpbmQoKSxlLmJpbmQoKSxyLmF0dHJpYnV0ZXMuZGF0YUNvb3JkLnBvaW50ZXIoKSxyLnVuaWZvcm1zLmRhdGFTaGlmdD1jLHIudW5pZm9ybXMuZGF0YVNjYWxlPXU7dmFyIGI9MDtmb3IoZz0wO2c8MjsrK2cpe2hbMF09aFsxXT0wLGhbZ109MSxyLnVuaWZvcm1zLmRhdGFBeGlzPWgsci51bmlmb3Jtcy5saW5lV2lkdGg9bFtnXS8oc1tnKzJdLXNbZ10pKmQsci51bmlmb3Jtcy5jb2xvcj1mW2ddO3ZhciBfPTYqbltnXS5sZW5ndGg7cFtnXSYmXyYmaS5kcmF3QXJyYXlzKGkuVFJJQU5HTEVTLGIsXyksYis9X319KSxkLmRyYXdUaWNrTWFya3M9ZnVuY3Rpb24oKXt2YXIgdD1bMCwwXSxlPVswLDBdLHI9WzEsMF0sbj1bMCwxXSxpPVswLDBdLG89WzAsMF07cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBzPXRoaXMucGxvdCxjPXRoaXMudmJvLHU9dGhpcy50aWNrU2hhZGVyLGg9dGhpcy50aWNrcyxmPXMuZ2wscD1zLl90aWNrQm91bmRzLGQ9cy5kYXRhQm94LGc9cy52aWV3Qm94LHY9cy5waXhlbFJhdGlvLG09cy5zY3JlZW5Cb3gseT1tWzJdLW1bMF0seD1tWzNdLW1bMV0sYj1nWzJdLWdbMF0sXz1nWzNdLWdbMV0sdz0wO3c8MjsrK3cpe3ZhciBrPXBbd10sQT1wW3crMl0tayxUPS41KihkW3crMl0rZFt3XSksTT1kW3crMl0tZFt3XTtlW3ddPTIqQS9NLHRbd109Miooay1UKS9NfWVbMF0qPWIveSx0WzBdKj1iL3ksZVsxXSo9Xy94LHRbMV0qPV8veCx1LmJpbmQoKSxjLmJpbmQoKSx1LmF0dHJpYnV0ZXMuZGF0YUNvb3JkLnBvaW50ZXIoKTt2YXIgUz11LnVuaWZvcm1zO1MuZGF0YVNoaWZ0PXQsUy5kYXRhU2NhbGU9ZTt2YXIgRT1zLnRpY2tNYXJrTGVuZ3RoLEM9cy50aWNrTWFya1dpZHRoLEw9cy50aWNrTWFya0NvbG9yLHo9NipoWzBdLmxlbmd0aCxPPU1hdGgubWluKGEuZ2UoaFswXSwoZFswXS1wWzBdKS8ocFsyXS1wWzBdKSxsKSxoWzBdLmxlbmd0aCksST1NYXRoLm1pbihhLmd0KGhbMF0sKGRbMl0tcFswXSkvKHBbMl0tcFswXSksbCksaFswXS5sZW5ndGgpLEQ9MCs2Kk8sUD02Kk1hdGgubWF4KDAsSS1PKSxSPU1hdGgubWluKGEuZ2UoaFsxXSwoZFsxXS1wWzFdKS8ocFszXS1wWzFdKSxsKSxoWzFdLmxlbmd0aCksRj1NYXRoLm1pbihhLmd0KGhbMV0sKGRbM10tcFsxXSkvKHBbM10tcFsxXSksbCksaFsxXS5sZW5ndGgpLEI9eis2KlIsTj02Kk1hdGgubWF4KDAsRi1SKTtpWzBdPTIqKGdbMF0tRVsxXSkveS0xLGlbMV09KGdbM10rZ1sxXSkveC0xLG9bMF09RVsxXSp2L3ksb1sxXT1DWzFdKnYveCxOJiYoUy5jb2xvcj1MWzFdLFMudGlja1NjYWxlPW8sUy5kYXRhQXhpcz1uLFMuc2NyZWVuT2Zmc2V0PWksZi5kcmF3QXJyYXlzKGYuVFJJQU5HTEVTLEIsTikpLGlbMF09KGdbMl0rZ1swXSkveS0xLGlbMV09MiooZ1sxXS1FWzBdKS94LTEsb1swXT1DWzBdKnYveSxvWzFdPUVbMF0qdi94LFAmJihTLmNvbG9yPUxbMF0sUy50aWNrU2NhbGU9byxTLmRhdGFBeGlzPXIsUy5zY3JlZW5PZmZzZXQ9aSxmLmRyYXdBcnJheXMoZi5UUklBTkdMRVMsRCxQKSksaVswXT0yKihnWzJdK0VbM10pL3ktMSxpWzFdPShnWzNdK2dbMV0pL3gtMSxvWzBdPUVbM10qdi95LG9bMV09Q1szXSp2L3gsTiYmKFMuY29sb3I9TFszXSxTLnRpY2tTY2FsZT1vLFMuZGF0YUF4aXM9bixTLnNjcmVlbk9mZnNldD1pLGYuZHJhd0FycmF5cyhmLlRSSUFOR0xFUyxCLE4pKSxpWzBdPShnWzJdK2dbMF0pL3ktMSxpWzFdPTIqKGdbM10rRVsyXSkveC0xLG9bMF09Q1syXSp2L3ksb1sxXT1FWzJdKnYveCxQJiYoUy5jb2xvcj1MWzJdLFMudGlja1NjYWxlPW8sUy5kYXRhQXhpcz1yLFMuc2NyZWVuT2Zmc2V0PWksZi5kcmF3QXJyYXlzKGYuVFJJQU5HTEVTLEQsUCkpfX0oKSxkLnVwZGF0ZT0oZj1bMSwxLC0xLC0xLDEsLTFdLHA9WzEsLTEsMSwxLC0xLC0xXSxmdW5jdGlvbih0KXtmb3IodmFyIGU9dC50aWNrcyxyPXQuYm91bmRzLG49bmV3IEZsb2F0MzJBcnJheSgxOCooZVswXS5sZW5ndGgrZVsxXS5sZW5ndGgpKSxpPSh0aGlzLnBsb3QuemVyb0xpbmVFbmFibGUsMCksYT1bW10sW11dLG89MDtvPDI7KytvKWZvcih2YXIgcz1hW29dLGw9ZVtvXSxjPXJbb10sdT1yW28rMl0saD0wO2g8bC5sZW5ndGg7KytoKXt2YXIgZD0obFtoXS54LWMpLyh1LWMpO3MucHVzaChkKTtmb3IodmFyIGc9MDtnPDY7KytnKW5baSsrXT1kLG5baSsrXT1mW2ddLG5baSsrXT1wW2ddfXRoaXMudGlja3M9YSx0aGlzLnZiby51cGRhdGUobil9KSxkLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZiby5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMudGlja1NoYWRlci5kaXNwb3NlKCl9fSx7XCIuL3NoYWRlcnNcIjoyODEsXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiOjI4MyxcImdsLWJ1ZmZlclwiOjIzOCxcImdsLXNoYWRlclwiOjI5OH1dLDI4MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlLFstMSwtMSwtMSwxLDEsLTEsMSwxXSkscz1pKGUsYS5saW5lVmVydCxhLmxpbmVGcmFnKTtyZXR1cm4gbmV3IG8odCxyLHMpfTt2YXIgbj10KFwiZ2wtYnVmZmVyXCIpLGk9dChcImdsLXNoYWRlclwiKSxhPXQoXCIuL3NoYWRlcnNcIik7ZnVuY3Rpb24gbyh0LGUscil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yfXZhciBzLGwsYz1vLnByb3RvdHlwZTtjLmJpbmQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnNoYWRlcjt0aGlzLnZiby5iaW5kKCksdGhpcy5zaGFkZXIuYmluZCgpLHQuYXR0cmlidXRlcy5jb29yZC5wb2ludGVyKCksdC51bmlmb3Jtcy5zY3JlZW5Cb3g9dGhpcy5wbG90LnNjcmVlbkJveH0sYy5kcmF3TGluZT0ocz1bMCwwXSxsPVswLDBdLGZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz10aGlzLnBsb3QsYz10aGlzLnNoYWRlcix1PW8uZ2w7c1swXT10LHNbMV09ZSxsWzBdPXIsbFsxXT1uLGMudW5pZm9ybXMuc3RhcnQ9cyxjLnVuaWZvcm1zLmVuZD1sLGMudW5pZm9ybXMud2lkdGg9aSpvLnBpeGVsUmF0aW8sYy51bmlmb3Jtcy5jb2xvcj1hLHUuZHJhd0FycmF5cyh1LlRSSUFOR0xFX1NUUklQLDAsNCl9KSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZiby5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0se1wiLi9zaGFkZXJzXCI6MjgxLFwiZ2wtYnVmZmVyXCI6MjM4LFwiZ2wtc2hhZGVyXCI6Mjk4fV0sMjgxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsc2xpZnlcIiksaT1uKFtcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxudW5pZm9ybSB2ZWM0IGNvbG9yO1xcbnZvaWQgbWFpbigpIHtcXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IueHl6ICogY29sb3IudywgY29sb3Iudyk7XFxufVxcblwiXSk7ZS5leHBvcnRzPXtsaW5lVmVydDpuKFtcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzIgY29vcmQ7XFxuXFxudW5pZm9ybSB2ZWM0IHNjcmVlbkJveDtcXG51bmlmb3JtIHZlYzIgc3RhcnQsIGVuZDtcXG51bmlmb3JtIGZsb2F0IHdpZHRoO1xcblxcbnZlYzIgcGVycCh2ZWMyIHYpIHtcXG4gIHJldHVybiB2ZWMyKHYueSwgLXYueCk7XFxufVxcblxcbnZlYzIgc2NyZWVuKHZlYzIgdikge1xcbiAgcmV0dXJuIDIuMCAqICh2IC0gc2NyZWVuQm94Lnh5KSAvIChzY3JlZW5Cb3guencgLSBzY3JlZW5Cb3gueHkpIC0gMS4wO1xcbn1cXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWMyIGRlbHRhID0gbm9ybWFsaXplKHBlcnAoc3RhcnQgLSBlbmQpKTtcXG4gIHZlYzIgb2Zmc2V0ID0gbWl4KHN0YXJ0LCBlbmQsIDAuNSAqIChjb29yZC55KzEuMCkpO1xcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHNjcmVlbihvZmZzZXQgKyAwLjUgKiB3aWR0aCAqIGRlbHRhICogY29vcmQueCksIDAsIDEpO1xcbn1cXG5cIl0pLGxpbmVGcmFnOmksdGV4dFZlcnQ6bihbXCIjZGVmaW5lIEdMU0xJRlkgMVxcbmF0dHJpYnV0ZSB2ZWMzIHRleHRDb29yZGluYXRlO1xcblxcbnVuaWZvcm0gdmVjMiBkYXRhU2NhbGUsIGRhdGFTaGlmdCwgZGF0YUF4aXMsIHNjcmVlbk9mZnNldCwgdGV4dFNjYWxlO1xcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgZmxvYXQgZGF0YU9mZnNldCAgPSB0ZXh0Q29vcmRpbmF0ZS56O1xcbiAgdmVjMiBnbHlwaE9mZnNldCAgPSB0ZXh0Q29vcmRpbmF0ZS54eTtcXG4gIG1hdDIgZ2x5cGhNYXRyaXggPSBtYXQyKGNvcyhhbmdsZSksIHNpbihhbmdsZSksIC1zaW4oYW5nbGUpLCBjb3MoYW5nbGUpKTtcXG4gIHZlYzIgc2NyZWVuQ29vcmRpbmF0ZSA9IGRhdGFBeGlzICogKGRhdGFTY2FsZSAqIGRhdGFPZmZzZXQgKyBkYXRhU2hpZnQpICtcXG4gICAgZ2x5cGhNYXRyaXggKiBnbHlwaE9mZnNldCAqIHRleHRTY2FsZSArIHNjcmVlbk9mZnNldDtcXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChzY3JlZW5Db29yZGluYXRlLCAwLCAxKTtcXG59XFxuXCJdKSx0ZXh0RnJhZzppLGdyaWRWZXJ0Om4oW1wicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjMyBkYXRhQ29vcmQ7XFxuXFxudW5pZm9ybSB2ZWMyIGRhdGFBeGlzLCBkYXRhU2hpZnQsIGRhdGFTY2FsZTtcXG51bmlmb3JtIGZsb2F0IGxpbmVXaWR0aDtcXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWMyIHBvcyA9IGRhdGFBeGlzICogKGRhdGFTY2FsZSAqIGRhdGFDb29yZC54ICsgZGF0YVNoaWZ0KTtcXG4gIHBvcyArPSAxMC4wICogZGF0YUNvb3JkLnkgKiB2ZWMyKGRhdGFBeGlzLnksIC1kYXRhQXhpcy54KSArIGRhdGFDb29yZC56ICogbGluZVdpZHRoO1xcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcywgMCwgMSk7XFxufVxcblwiXSksZ3JpZEZyYWc6aSxib3hWZXJ0Om4oW1wicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjMiBjb29yZDtcXG5cXG51bmlmb3JtIHZlYzQgc2NyZWVuQm94O1xcbnVuaWZvcm0gdmVjMiBsbywgaGk7XFxuXFxudmVjMiBzY3JlZW4odmVjMiB2KSB7XFxuICByZXR1cm4gMi4wICogKHYgLSBzY3JlZW5Cb3gueHkpIC8gKHNjcmVlbkJveC56dyAtIHNjcmVlbkJveC54eSkgLSAxLjA7XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChzY3JlZW4obWl4KGxvLCBoaSwgY29vcmQpKSwgMCwgMSk7XFxufVxcblwiXSksdGlja1ZlcnQ6bihbXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMzIGRhdGFDb29yZDtcXG5cXG51bmlmb3JtIHZlYzIgZGF0YUF4aXMsIGRhdGFTaGlmdCwgZGF0YVNjYWxlLCBzY3JlZW5PZmZzZXQsIHRpY2tTY2FsZTtcXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWMyIHBvcyA9IGRhdGFBeGlzICogKGRhdGFTY2FsZSAqIGRhdGFDb29yZC54ICsgZGF0YVNoaWZ0KTtcXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChwb3MgKyB0aWNrU2NhbGUqZGF0YUNvb3JkLnl6ICsgc2NyZWVuT2Zmc2V0LCAwLCAxKTtcXG59XFxuXCJdKX19LHtnbHNsaWZ5OjQwMn1dLDI4MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlKSxhPWkoZSxzLnRleHRWZXJ0LHMudGV4dEZyYWcpO3JldHVybiBuZXcgbCh0LHIsYSl9O3ZhciBuPXQoXCJnbC1idWZmZXJcIiksaT10KFwiZ2wtc2hhZGVyXCIpLGE9dChcInRleHQtY2FjaGVcIiksbz10KFwiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIikscz10KFwiLi9zaGFkZXJzXCIpO2Z1bmN0aW9uIGwodCxlLHIpe3RoaXMucGxvdD10LHRoaXMudmJvPWUsdGhpcy5zaGFkZXI9cix0aGlzLnRpY2tPZmZzZXQ9W1tdLFtdXSx0aGlzLnRpY2tYPVtbXSxbXV0sdGhpcy5sYWJlbE9mZnNldD1bMCwwXSx0aGlzLmxhYmVsQ291bnQ9WzAsMF19dmFyIGMsdSxoLGYscCxkLGc9bC5wcm90b3R5cGU7Zy5kcmF3VGlja3M9KGM9WzAsMF0sdT1bMCwwXSxoPVswLDBdLGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGxvdCxyPXRoaXMuc2hhZGVyLG49dGhpcy50aWNrWFt0XSxpPXRoaXMudGlja09mZnNldFt0XSxhPWUuZ2wscz1lLnZpZXdCb3gsbD1lLmRhdGFCb3gsZj1lLnNjcmVlbkJveCxwPWUucGl4ZWxSYXRpbyxkPWUudGlja0VuYWJsZSxnPWUudGlja1BhZCx2PWUudGlja0NvbG9yLG09ZS50aWNrQW5nbGUseT1lLmxhYmVsRW5hYmxlLHg9ZS5sYWJlbFBhZCxiPWUubGFiZWxDb2xvcixfPWUubGFiZWxBbmdsZSx3PXRoaXMubGFiZWxPZmZzZXRbdF0saz10aGlzLmxhYmVsQ291bnRbdF0sQT1vLmx0KG4sbFt0XSksVD1vLmxlKG4sbFt0KzJdKTtjWzBdPWNbMV09MCxjW3RdPTEsdVt0XT0oc1syK3RdK3NbdF0pLyhmWzIrdF0tZlt0XSktMTt2YXIgTT0yL2ZbMisoMV50KV0tZlsxXnRdO3VbMV50XT1NKnNbMV50XS0xLGRbdF0mJih1WzFedF0tPU0qcCpnW3RdLEE8VCYmaVtUXT5pW0FdJiYoci51bmlmb3Jtcy5kYXRhQXhpcz1jLHIudW5pZm9ybXMuc2NyZWVuT2Zmc2V0PXUsci51bmlmb3Jtcy5jb2xvcj12W3RdLHIudW5pZm9ybXMuYW5nbGU9bVt0XSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRVMsaVtBXSxpW1RdLWlbQV0pKSkseVt0XSYmayYmKHVbMV50XS09TSpwKnhbdF0sci51bmlmb3Jtcy5kYXRhQXhpcz1oLHIudW5pZm9ybXMuc2NyZWVuT2Zmc2V0PXUsci51bmlmb3Jtcy5jb2xvcj1iW3RdLHIudW5pZm9ybXMuYW5nbGU9X1t0XSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRVMsdyxrKSksdVsxXnRdPU0qc1syKygxXnQpXS0xLGRbdCsyXSYmKHVbMV50XSs9TSpwKmdbdCsyXSxBPFQmJmlbVF0+aVtBXSYmKHIudW5pZm9ybXMuZGF0YUF4aXM9YyxyLnVuaWZvcm1zLnNjcmVlbk9mZnNldD11LHIudW5pZm9ybXMuY29sb3I9dlt0KzJdLHIudW5pZm9ybXMuYW5nbGU9bVt0KzJdLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFUyxpW0FdLGlbVF0taVtBXSkpKSx5W3QrMl0mJmsmJih1WzFedF0rPU0qcCp4W3QrMl0sci51bmlmb3Jtcy5kYXRhQXhpcz1oLHIudW5pZm9ybXMuc2NyZWVuT2Zmc2V0PXUsci51bmlmb3Jtcy5jb2xvcj1iW3QrMl0sci51bmlmb3Jtcy5hbmdsZT1fW3QrMl0sYS5kcmF3QXJyYXlzKGEuVFJJQU5HTEVTLHcsaykpfSksZy5kcmF3VGl0bGU9ZnVuY3Rpb24oKXt2YXIgdD1bMCwwXSxlPVswLDBdO3JldHVybiBmdW5jdGlvbigpe3ZhciByPXRoaXMucGxvdCxuPXRoaXMuc2hhZGVyLGk9ci5nbCxhPXIuc2NyZWVuQm94LG89ci50aXRsZUNlbnRlcixzPXIudGl0bGVBbmdsZSxsPXIudGl0bGVDb2xvcixjPXIucGl4ZWxSYXRpbztpZih0aGlzLnRpdGxlQ291bnQpe2Zvcih2YXIgdT0wO3U8MjsrK3UpZVt1XT0yKihvW3VdKmMtYVt1XSkvKGFbMit1XS1hW3VdKS0xO24uYmluZCgpLG4udW5pZm9ybXMuZGF0YUF4aXM9dCxuLnVuaWZvcm1zLnNjcmVlbk9mZnNldD1lLG4udW5pZm9ybXMuYW5nbGU9cyxuLnVuaWZvcm1zLmNvbG9yPWwsaS5kcmF3QXJyYXlzKGkuVFJJQU5HTEVTLHRoaXMudGl0bGVPZmZzZXQsdGhpcy50aXRsZUNvdW50KX19fSgpLGcuYmluZD0oZj1bMCwwXSxwPVswLDBdLGQ9WzAsMF0sZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBsb3QsZT10aGlzLnNoYWRlcixyPXQuX3RpY2tCb3VuZHMsbj10LmRhdGFCb3gsaT10LnNjcmVlbkJveCxhPXQudmlld0JveDtlLmJpbmQoKTtmb3IodmFyIG89MDtvPDI7KytvKXt2YXIgcz1yW29dLGw9cltvKzJdLXMsYz0uNSoobltvKzJdK25bb10pLHU9bltvKzJdLW5bb10saD1hW29dLGc9YVtvKzJdLWgsdj1pW29dLG09aVtvKzJdLXY7cFtvXT0yKmwvdSpnL20sZltvXT0yKihzLWMpL3UqZy9tfWRbMV09Mip0LnBpeGVsUmF0aW8vKGlbM10taVsxXSksZFswXT1kWzFdKihpWzNdLWlbMV0pLyhpWzJdLWlbMF0pLGUudW5pZm9ybXMuZGF0YVNjYWxlPXAsZS51bmlmb3Jtcy5kYXRhU2hpZnQ9ZixlLnVuaWZvcm1zLnRleHRTY2FsZT1kLHRoaXMudmJvLmJpbmQoKSxlLmF0dHJpYnV0ZXMudGV4dENvb3JkaW5hdGUucG9pbnRlcigpfSksZy51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksbyxzPVtdLGw9dC50aWNrcyxjPXQuYm91bmRzO2ZvcihvPTA7bzwyOysrbyl7dmFyIHU9W01hdGguZmxvb3Iocy5sZW5ndGgvMyldLGg9Wy0xLzBdLGY9bFtvXTtmb3IoZT0wO2U8Zi5sZW5ndGg7KytlKXt2YXIgcD1mW2VdLGQ9cC54LGc9cC50ZXh0LHY9cC5mb250fHxcInNhbnMtc2VyaWZcIjtpPXAuZm9udFNpemV8fDEyO2Zvcih2YXIgbT0xLyhjW28rMl0tY1tvXSkseT1jW29dLHg9Zy5zcGxpdChcIlxcblwiKSxiPTA7Yjx4Lmxlbmd0aDtiKyspZm9yKG49YSh2LHhbYl0pLmRhdGEscj0wO3I8bi5sZW5ndGg7cis9MilzLnB1c2gobltyXSppLC1uW3IrMV0qaS1iKmkqMS4yLChkLXkpKm0pO3UucHVzaChNYXRoLmZsb29yKHMubGVuZ3RoLzMpKSxoLnB1c2goZCl9dGhpcy50aWNrT2Zmc2V0W29dPXUsdGhpcy50aWNrWFtvXT1ofWZvcihvPTA7bzwyOysrbyl7Zm9yKHRoaXMubGFiZWxPZmZzZXRbb109TWF0aC5mbG9vcihzLmxlbmd0aC8zKSxuPWEodC5sYWJlbEZvbnRbb10sdC5sYWJlbHNbb10se3RleHRBbGlnbjpcImNlbnRlclwifSkuZGF0YSxpPXQubGFiZWxTaXplW29dLGU9MDtlPG4ubGVuZ3RoO2UrPTIpcy5wdXNoKG5bZV0qaSwtbltlKzFdKmksMCk7dGhpcy5sYWJlbENvdW50W29dPU1hdGguZmxvb3Iocy5sZW5ndGgvMyktdGhpcy5sYWJlbE9mZnNldFtvXX1mb3IodGhpcy50aXRsZU9mZnNldD1NYXRoLmZsb29yKHMubGVuZ3RoLzMpLG49YSh0LnRpdGxlRm9udCx0LnRpdGxlKS5kYXRhLGk9dC50aXRsZVNpemUsZT0wO2U8bi5sZW5ndGg7ZSs9MilzLnB1c2gobltlXSppLC1uW2UrMV0qaSwwKTt0aGlzLnRpdGxlQ291bnQ9TWF0aC5mbG9vcihzLmxlbmd0aC8zKS10aGlzLnRpdGxlT2Zmc2V0LHRoaXMudmJvLnVwZGF0ZShzKX0sZy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52Ym8uZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHtcIi4vc2hhZGVyc1wiOjI4MSxcImJpbmFyeS1zZWFyY2gtYm91bmRzXCI6MjgzLFwiZ2wtYnVmZmVyXCI6MjM4LFwiZ2wtc2hhZGVyXCI6Mjk4LFwidGV4dC1jYWNoZVwiOjUyMX1dLDI4MzpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsxMDJdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoxMDJ9XSwyODQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPW4oZSxbZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XSksYz1uZXcgbChlLHIpO3JldHVybiBjLmdyaWQ9aShjKSxjLnRleHQ9YShjKSxjLmxpbmU9byhjKSxjLmJveD1zKGMpLGMudXBkYXRlKHQpLGN9O3ZhciBuPXQoXCJnbC1zZWxlY3Qtc3RhdGljXCIpLGk9dChcIi4vbGliL2dyaWRcIiksYT10KFwiLi9saWIvdGV4dFwiKSxvPXQoXCIuL2xpYi9saW5lXCIpLHM9dChcIi4vbGliL2JveFwiKTtmdW5jdGlvbiBsKHQsZSl7dGhpcy5nbD10LHRoaXMucGlja0J1ZmZlcj1lLHRoaXMuc2NyZWVuQm94PVswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XSx0aGlzLnZpZXdCb3g9WzAsMCwwLDBdLHRoaXMuZGF0YUJveD1bLTEwLC0xMCwxMCwxMF0sdGhpcy5ncmlkTGluZUVuYWJsZT1bITAsITBdLHRoaXMuZ3JpZExpbmVXaWR0aD1bMSwxXSx0aGlzLmdyaWRMaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMudGlja01hcmtMZW5ndGg9WzAsMCwwLDBdLHRoaXMudGlja01hcmtXaWR0aD1bMCwwLDAsMF0sdGhpcy50aWNrTWFya0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja1BhZD1bMTUsMTUsMTUsMTVdLHRoaXMudGlja0FuZ2xlPVswLDAsMCwwXSx0aGlzLnRpY2tFbmFibGU9WyEwLCEwLCEwLCEwXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVsUGFkPVsxNSwxNSwxNSwxNV0sdGhpcy5sYWJlbEFuZ2xlPVswLE1hdGguUEkvMiwwLDMqTWF0aC5QSS8yXSx0aGlzLmxhYmVsRW5hYmxlPVshMCwhMCwhMCwhMF0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGl0bGVDZW50ZXI9WzAsMF0sdGhpcy50aXRsZUVuYWJsZT0hMCx0aGlzLnRpdGxlQW5nbGU9MCx0aGlzLnRpdGxlQ29sb3I9WzAsMCwwLDFdLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDBdLHRoaXMuYmFja2dyb3VuZENvbG9yPVswLDAsMCwwXSx0aGlzLnplcm9MaW5lRW5hYmxlPVshMCwhMF0sdGhpcy56ZXJvTGluZVdpZHRoPVs0LDRdLHRoaXMuemVyb0xpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ib3JkZXJMaW5lRW5hYmxlPVshMCwhMCwhMCwhMF0sdGhpcy5ib3JkZXJMaW5lV2lkdGg9WzIsMiwyLDJdLHRoaXMuYm9yZGVyTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZ3JpZD1udWxsLHRoaXMudGV4dD1udWxsLHRoaXMubGluZT1udWxsLHRoaXMuYm94PW51bGwsdGhpcy5vYmplY3RzPVtdLHRoaXMub3ZlcmxheXM9W10sdGhpcy5fdGlja0JvdW5kcz1bMS8wLDEvMCwtMS8wLC0xLzBdLHRoaXMuc3RhdGljPSExLHRoaXMuZGlydHk9ITEsdGhpcy5waWNrRGlydHk9ITEsdGhpcy5waWNrRGVsYXk9MTIwLHRoaXMucGlja1JhZGl1cz0xMCx0aGlzLl9waWNrVGltZW91dD1udWxsLHRoaXMuX2RyYXdQaWNrPXRoaXMuZHJhd1BpY2suYmluZCh0aGlzKSx0aGlzLl9kZXB0aENvdW50ZXI9MH12YXIgYz1sLnByb3RvdHlwZTtmdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT10LnNsaWNlKCkscj0wO3I8ZS5sZW5ndGg7KytyKWVbcl09ZVtyXS5zbGljZSgpO3JldHVybiBlfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdC54LWUueH1jLnNldERpcnR5PWZ1bmN0aW9uKCl7dGhpcy5kaXJ0eT10aGlzLnBpY2tEaXJ0eT0hMH0sYy5zZXRPdmVybGF5RGlydHk9ZnVuY3Rpb24oKXt0aGlzLmRpcnR5PSEwfSxjLm5leHREZXB0aFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlcHRoQ291bnRlcisrLzY1NTM2fSxjLmRyYXc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsLGU9dGhpcy5zY3JlZW5Cb3gscj10aGlzLnZpZXdCb3gsbj10aGlzLmRhdGFCb3gsaT10aGlzLnBpeGVsUmF0aW8sYT10aGlzLmdyaWQsbz10aGlzLmxpbmUscz10aGlzLnRleHQsbD10aGlzLm9iamVjdHM7aWYodGhpcy5fZGVwdGhDb3VudGVyPTAsdGhpcy5waWNrRGlydHkmJih0aGlzLl9waWNrVGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuX3BpY2tUaW1lb3V0KSx0aGlzLnBpY2tEaXJ0eT0hMSx0aGlzLl9waWNrVGltZW91dD1zZXRUaW1lb3V0KHRoaXMuX2RyYXdQaWNrLHRoaXMucGlja0RlbGF5KSksdGhpcy5kaXJ0eSl7aWYodGhpcy5kaXJ0eT0hMSx0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLG51bGwpLHQuZW5hYmxlKHQuU0NJU1NPUl9URVNUKSx0LmRpc2FibGUodC5ERVBUSF9URVNUKSx0LmRlcHRoRnVuYyh0LkxFU1MpLHQuZGVwdGhNYXNrKCExKSx0LmVuYWJsZSh0LkJMRU5EKSx0LmJsZW5kRXF1YXRpb24odC5GVU5DX0FERCx0LkZVTkNfQUREKSx0LmJsZW5kRnVuYyh0Lk9ORSx0Lk9ORV9NSU5VU19TUkNfQUxQSEEpLHRoaXMuYm9yZGVyQ29sb3Ipe3Quc2Npc3NvcihlWzBdLGVbMV0sZVsyXS1lWzBdLGVbM10tZVsxXSk7dmFyIGM9dGhpcy5ib3JkZXJDb2xvcjt0LmNsZWFyQ29sb3IoY1swXSpjWzNdLGNbMV0qY1szXSxjWzJdKmNbM10sY1szXSksdC5jbGVhcih0LkNPTE9SX0JVRkZFUl9CSVR8dC5ERVBUSF9CVUZGRVJfQklUKX10LnNjaXNzb3IoclswXSxyWzFdLHJbMl0tclswXSxyWzNdLXJbMV0pLHQudmlld3BvcnQoclswXSxyWzFdLHJbMl0tclswXSxyWzNdLXJbMV0pO3ZhciB1PXRoaXMuYmFja2dyb3VuZENvbG9yO3QuY2xlYXJDb2xvcih1WzBdKnVbM10sdVsxXSp1WzNdLHVbMl0qdVszXSx1WzNdKSx0LmNsZWFyKHQuQ09MT1JfQlVGRkVSX0JJVCksYS5kcmF3KCk7dmFyIGg9dGhpcy56ZXJvTGluZUVuYWJsZSxmPXRoaXMuemVyb0xpbmVDb2xvcixwPXRoaXMuemVyb0xpbmVXaWR0aDtpZihoWzBdfHxoWzFdKXtvLmJpbmQoKTtmb3IodmFyIGQ9MDtkPDI7KytkKWlmKGhbZF0mJm5bZF08PTAmJm5bZCsyXT49MCl7dmFyIGc9ZVtkXS1uW2RdKihlW2QrMl0tZVtkXSkvKG5bZCsyXS1uW2RdKTswPT09ZD9vLmRyYXdMaW5lKGcsZVsxXSxnLGVbM10scFtkXSxmW2RdKTpvLmRyYXdMaW5lKGVbMF0sZyxlWzJdLGcscFtkXSxmW2RdKX19Zm9yKGQ9MDtkPGwubGVuZ3RoOysrZClsW2RdLmRyYXcoKTt0LnZpZXdwb3J0KGVbMF0sZVsxXSxlWzJdLWVbMF0sZVszXS1lWzFdKSx0LnNjaXNzb3IoZVswXSxlWzFdLGVbMl0tZVswXSxlWzNdLWVbMV0pLHRoaXMuZ3JpZC5kcmF3VGlja01hcmtzKCksby5iaW5kKCk7dmFyIHY9dGhpcy5ib3JkZXJMaW5lRW5hYmxlLG09dGhpcy5ib3JkZXJMaW5lV2lkdGgseT10aGlzLmJvcmRlckxpbmVDb2xvcjtmb3IodlsxXSYmby5kcmF3TGluZShyWzBdLHJbMV0tLjUqbVsxXSppLHJbMF0sclszXSsuNSptWzNdKmksbVsxXSx5WzFdKSx2WzBdJiZvLmRyYXdMaW5lKHJbMF0tLjUqbVswXSppLHJbMV0sclsyXSsuNSptWzJdKmksclsxXSxtWzBdLHlbMF0pLHZbM10mJm8uZHJhd0xpbmUoclsyXSxyWzFdLS41Km1bMV0qaSxyWzJdLHJbM10rLjUqbVszXSppLG1bM10seVszXSksdlsyXSYmby5kcmF3TGluZShyWzBdLS41Km1bMF0qaSxyWzNdLHJbMl0rLjUqbVsyXSppLHJbM10sbVsyXSx5WzJdKSxzLmJpbmQoKSxkPTA7ZDwyOysrZClzLmRyYXdUaWNrcyhkKTt0aGlzLnRpdGxlRW5hYmxlJiZzLmRyYXdUaXRsZSgpO3ZhciB4PXRoaXMub3ZlcmxheXM7Zm9yKGQ9MDtkPHgubGVuZ3RoOysrZCl4W2RdLmRyYXcoKTt0LmRpc2FibGUodC5TQ0lTU09SX1RFU1QpLHQuZGlzYWJsZSh0LkJMRU5EKSx0LmRlcHRoTWFzayghMCl9fSxjLmRyYXdQaWNrPWZ1bmN0aW9uKCl7aWYoIXRoaXMuc3RhdGljKXt2YXIgdD10aGlzLnBpY2tCdWZmZXI7dGhpcy5nbDt0aGlzLl9waWNrVGltZW91dD1udWxsLHQuYmVnaW4oKTtmb3IodmFyIGU9MSxyPXRoaXMub2JqZWN0cyxuPTA7bjxyLmxlbmd0aDsrK24pZT1yW25dLmRyYXdQaWNrKGUpO3QuZW5kKCl9fSxjLnBpY2s9ZnVuY3Rpb24odCxlKXtpZighdGhpcy5zdGF0aWMpe3ZhciByPXRoaXMucGl4ZWxSYXRpbyxuPXRoaXMucGlja1BpeGVsUmF0aW8saT10aGlzLnZpZXdCb3gsYT0wfE1hdGgucm91bmQoKHQtaVswXS9yKSpuKSxvPTB8TWF0aC5yb3VuZCgoZS1pWzFdL3IpKm4pLHM9dGhpcy5waWNrQnVmZmVyLnF1ZXJ5KGEsbyx0aGlzLnBpY2tSYWRpdXMpO2lmKCFzKXJldHVybiBudWxsO2Zvcih2YXIgbD1zLmlkKyhzLnZhbHVlWzBdPDw4KSsocy52YWx1ZVsxXTw8MTYpKyhzLnZhbHVlWzJdPDwyNCksYz10aGlzLm9iamVjdHMsdT0wO3U8Yy5sZW5ndGg7Kyt1KXt2YXIgaD1jW3VdLnBpY2soYSxvLGwpO2lmKGgpcmV0dXJuIGh9cmV0dXJuIG51bGx9fSxjLnNldFNjcmVlbkJveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjcmVlbkJveCxyPXRoaXMucGl4ZWxSYXRpbztlWzBdPTB8TWF0aC5yb3VuZCh0WzBdKnIpLGVbMV09MHxNYXRoLnJvdW5kKHRbMV0qciksZVsyXT0wfE1hdGgucm91bmQodFsyXSpyKSxlWzNdPTB8TWF0aC5yb3VuZCh0WzNdKnIpLHRoaXMuc2V0RGlydHkoKX0sYy5zZXREYXRhQm94PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGF0YUJveDsoZVswXSE9PXRbMF18fGVbMV0hPT10WzFdfHxlWzJdIT09dFsyXXx8ZVszXSE9PXRbM10pJiYoZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLHRoaXMuc2V0RGlydHkoKSl9LGMuc2V0Vmlld0JveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnBpeGVsUmF0aW8scj10aGlzLnZpZXdCb3g7clswXT0wfE1hdGgucm91bmQodFswXSplKSxyWzFdPTB8TWF0aC5yb3VuZCh0WzFdKmUpLHJbMl09MHxNYXRoLnJvdW5kKHRbMl0qZSksclszXT0wfE1hdGgucm91bmQodFszXSplKTt2YXIgbj10aGlzLnBpY2tQaXhlbFJhdGlvO3RoaXMucGlja0J1ZmZlci5zaGFwZT1bMHxNYXRoLnJvdW5kKCh0WzJdLXRbMF0pKm4pLDB8TWF0aC5yb3VuZCgodFszXS10WzFdKSpuKV0sdGhpcy5zZXREaXJ0eSgpfSxjLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7dGhpcy5waXhlbFJhdGlvPXQucGl4ZWxSYXRpb3x8MTt2YXIgcj10aGlzLnBpeGVsUmF0aW87dGhpcy5waWNrUGl4ZWxSYXRpbz1NYXRoLm1heChyLDEpLHRoaXMuc2V0U2NyZWVuQm94KHQuc2NyZWVuQm94fHxbMCwwLGUuZHJhd2luZ0J1ZmZlcldpZHRoL3IsZS5kcmF3aW5nQnVmZmVySGVpZ2h0L3JdKTt0aGlzLnNjcmVlbkJveDt0aGlzLnNldFZpZXdCb3godC52aWV3Qm94fHxbLjEyNSoodGhpcy5zY3JlZW5Cb3hbMl0tdGhpcy5zY3JlZW5Cb3hbMF0pL3IsLjEyNSoodGhpcy5zY3JlZW5Cb3hbM10tdGhpcy5zY3JlZW5Cb3hbMV0pL3IsLjg3NSoodGhpcy5zY3JlZW5Cb3hbMl0tdGhpcy5zY3JlZW5Cb3hbMF0pL3IsLjg3NSoodGhpcy5zY3JlZW5Cb3hbM10tdGhpcy5zY3JlZW5Cb3hbMV0pL3JdKTt2YXIgbj10aGlzLnZpZXdCb3gsaT0oblsyXS1uWzBdKS8oblszXS1uWzFdKTt0aGlzLnNldERhdGFCb3godC5kYXRhQm94fHxbLTEwLC0xMC9pLDEwLDEwL2ldKSx0aGlzLmJvcmRlckNvbG9yPSExIT09dC5ib3JkZXJDb2xvciYmKHQuYm9yZGVyQ29sb3J8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLmJhY2tncm91bmRDb2xvcj0odC5iYWNrZ3JvdW5kQ29sb3J8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lRW5hYmxlPSh0LmdyaWRMaW5lRW5hYmxlfHxbITAsITBdKS5zbGljZSgpLHRoaXMuZ3JpZExpbmVXaWR0aD0odC5ncmlkTGluZVdpZHRofHxbMSwxXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lQ29sb3I9dSh0LmdyaWRMaW5lQ29sb3J8fFtbLjUsLjUsLjUsMV0sWy41LC41LC41LDFdXSksdGhpcy56ZXJvTGluZUVuYWJsZT0odC56ZXJvTGluZUVuYWJsZXx8WyEwLCEwXSkuc2xpY2UoKSx0aGlzLnplcm9MaW5lV2lkdGg9KHQuemVyb0xpbmVXaWR0aHx8WzQsNF0pLnNsaWNlKCksdGhpcy56ZXJvTGluZUNvbG9yPXUodC56ZXJvTGluZUNvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGlja01hcmtMZW5ndGg9KHQudGlja01hcmtMZW5ndGh8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLnRpY2tNYXJrV2lkdGg9KHQudGlja01hcmtXaWR0aHx8WzAsMCwwLDBdKS5zbGljZSgpLHRoaXMudGlja01hcmtDb2xvcj11KHQudGlja01hcmtDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGl0bGVDZW50ZXI9KHQudGl0bGVDZW50ZXJ8fFsuNSooblswXStuWzJdKS9yLChuWzNdKzEyMCkvcl0pLnNsaWNlKCksdGhpcy50aXRsZUVuYWJsZT0hKFwidGl0bGVFbmFibGVcImluIHQmJiF0LnRpdGxlRW5hYmxlKSx0aGlzLnRpdGxlQW5nbGU9dC50aXRsZUFuZ2xlfHwwLHRoaXMudGl0bGVDb2xvcj0odC50aXRsZUNvbG9yfHxbMCwwLDAsMV0pLnNsaWNlKCksdGhpcy5sYWJlbFBhZD0odC5sYWJlbFBhZHx8WzE1LDE1LDE1LDE1XSkuc2xpY2UoKSx0aGlzLmxhYmVsQW5nbGU9KHQubGFiZWxBbmdsZXx8WzAsTWF0aC5QSS8yLDAsMypNYXRoLlBJLzJdKS5zbGljZSgpLHRoaXMubGFiZWxFbmFibGU9KHQubGFiZWxFbmFibGV8fFshMCwhMCwhMCwhMF0pLnNsaWNlKCksdGhpcy5sYWJlbENvbG9yPXUodC5sYWJlbENvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSksdGhpcy50aWNrUGFkPSh0LnRpY2tQYWR8fFsxNSwxNSwxNSwxNV0pLnNsaWNlKCksdGhpcy50aWNrQW5nbGU9KHQudGlja0FuZ2xlfHxbMCwwLDAsMF0pLnNsaWNlKCksdGhpcy50aWNrRW5hYmxlPSh0LnRpY2tFbmFibGV8fFshMCwhMCwhMCwhMF0pLnNsaWNlKCksdGhpcy50aWNrQ29sb3I9dSh0LnRpY2tDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMuYm9yZGVyTGluZUVuYWJsZT0odC5ib3JkZXJMaW5lRW5hYmxlfHxbITAsITAsITAsITBdKS5zbGljZSgpLHRoaXMuYm9yZGVyTGluZVdpZHRoPSh0LmJvcmRlckxpbmVXaWR0aHx8WzIsMiwyLDJdKS5zbGljZSgpLHRoaXMuYm9yZGVyTGluZUNvbG9yPXUodC5ib3JkZXJMaW5lQ29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dKTt2YXIgYT10LnRpY2tzfHxbW10sW11dLG89dGhpcy5fdGlja0JvdW5kcztvWzBdPW9bMV09MS8wLG9bMl09b1szXT0tMS8wO2Zvcih2YXIgcz0wO3M8MjsrK3Mpe3ZhciBsPWFbc10uc2xpY2UoMCk7MCE9PWwubGVuZ3RoJiYobC5zb3J0KGgpLG9bc109TWF0aC5taW4ob1tzXSxsWzBdLngpLG9bcysyXT1NYXRoLm1heChvW3MrMl0sbFtsLmxlbmd0aC0xXS54KSl9dGhpcy5ncmlkLnVwZGF0ZSh7Ym91bmRzOm8sdGlja3M6YX0pLHRoaXMudGV4dC51cGRhdGUoe2JvdW5kczpvLHRpY2tzOmEsbGFiZWxzOnQubGFiZWxzfHxbXCJ4XCIsXCJ5XCJdLGxhYmVsU2l6ZTp0LmxhYmVsU2l6ZXx8WzEyLDEyXSxsYWJlbEZvbnQ6dC5sYWJlbEZvbnR8fFtcInNhbnMtc2VyaWZcIixcInNhbnMtc2VyaWZcIl0sdGl0bGU6dC50aXRsZXx8XCJcIix0aXRsZVNpemU6dC50aXRsZVNpemV8fDE4LHRpdGxlRm9udDp0LnRpdGxlRm9udHx8XCJzYW5zLXNlcmlmXCJ9KSx0aGlzLnN0YXRpYz0hIXQuc3RhdGljLHRoaXMuc2V0RGlydHkoKX0sYy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5ib3guZGlzcG9zZSgpLHRoaXMuZ3JpZC5kaXNwb3NlKCksdGhpcy50ZXh0LmRpc3Bvc2UoKSx0aGlzLmxpbmUuZGlzcG9zZSgpO2Zvcih2YXIgdD10aGlzLm9iamVjdHMubGVuZ3RoLTE7dD49MDstLXQpdGhpcy5vYmplY3RzW3RdLmRpc3Bvc2UoKTt0aGlzLm9iamVjdHMubGVuZ3RoPTA7Zm9yKHQ9dGhpcy5vdmVybGF5cy5sZW5ndGgtMTt0Pj0wOy0tdCl0aGlzLm92ZXJsYXlzW3RdLmRpc3Bvc2UoKTt0aGlzLm92ZXJsYXlzLmxlbmd0aD0wLHRoaXMuZ2w9bnVsbH0sYy5hZGRPYmplY3Q9ZnVuY3Rpb24odCl7dGhpcy5vYmplY3RzLmluZGV4T2YodCk8MCYmKHRoaXMub2JqZWN0cy5wdXNoKHQpLHRoaXMuc2V0RGlydHkoKSl9LGMucmVtb3ZlT2JqZWN0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLm9iamVjdHMscj0wO3I8ZS5sZW5ndGg7KytyKWlmKGVbcl09PT10KXtlLnNwbGljZShyLDEpLHRoaXMuc2V0RGlydHkoKTticmVha319LGMuYWRkT3ZlcmxheT1mdW5jdGlvbih0KXt0aGlzLm92ZXJsYXlzLmluZGV4T2YodCk8MCYmKHRoaXMub3ZlcmxheXMucHVzaCh0KSx0aGlzLnNldE92ZXJsYXlEaXJ0eSgpKX0sYy5yZW1vdmVPdmVybGF5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLm92ZXJsYXlzLHI9MDtyPGUubGVuZ3RoOysrcilpZihlW3JdPT09dCl7ZS5zcGxpY2UociwxKSx0aGlzLnNldE92ZXJsYXlEaXJ0eSgpO2JyZWFrfX19LHtcIi4vbGliL2JveFwiOjI3OCxcIi4vbGliL2dyaWRcIjoyNzksXCIuL2xpYi9saW5lXCI6MjgwLFwiLi9saWIvdGV4dFwiOjI4MixcImdsLXNlbGVjdC1zdGF0aWNcIjoyOTd9XSwyODU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0PXR8fGRvY3VtZW50LmJvZHksZT1lfHx7fTt2YXIgcj1bLjAxLDEvMF07XCJkaXN0YW5jZUxpbWl0c1wiaW4gZSYmKHJbMF09ZS5kaXN0YW5jZUxpbWl0c1swXSxyWzFdPWUuZGlzdGFuY2VMaW1pdHNbMV0pO1wiem9vbU1pblwiaW4gZSYmKHJbMF09ZS56b29tTWluKTtcInpvb21NYXhcImluIGUmJihyWzFdPWUuem9vbU1heCk7dmFyIGM9aSh7Y2VudGVyOmUuY2VudGVyfHxbMCwwLDBdLHVwOmUudXB8fFswLDEsMF0sZXllOmUuZXllfHxbMCwwLDEwXSxtb2RlOmUubW9kZXx8XCJvcmJpdFwiLGRpc3RhbmNlTGltaXRzOnJ9KSx1PVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXSxoPTAsZj10LmNsaWVudFdpZHRoLHA9dC5jbGllbnRIZWlnaHQsZD17a2V5QmluZGluZ01vZGU6XCJyb3RhdGVcIixlbmFibGVXaGVlbDohMCx2aWV3OmMsZWxlbWVudDp0LGRlbGF5OmUuZGVsYXl8fDE2LHJvdGF0ZVNwZWVkOmUucm90YXRlU3BlZWR8fDEsem9vbVNwZWVkOmUuem9vbVNwZWVkfHwxLHRyYW5zbGF0ZVNwZWVkOmUudHJhbnNsYXRlU3BlZWR8fDEsZmxpcFg6ISFlLmZsaXBYLGZsaXBZOiEhZS5mbGlwWSxtb2RlczpjLm1vZGVzLF9vcnRobzplLl9vcnRob3x8ZS5wcm9qZWN0aW9uJiZcIm9ydGhvZ3JhcGhpY1wiPT09ZS5wcm9qZWN0aW9uLnR5cGV8fCExLHRpY2s6ZnVuY3Rpb24oKXt2YXIgZT1uKCkscj10aGlzLmRlbGF5LGk9ZS0yKnI7Yy5pZGxlKGUtciksYy5yZWNhbGNNYXRyaXgoaSksYy5mbHVzaChlLSgxMDArMipyKSk7Zm9yKHZhciBhPSEwLG89Yy5jb21wdXRlZE1hdHJpeCxzPTA7czwxNjsrK3MpYT1hJiZ1W3NdPT09b1tzXSx1W3NdPW9bc107dmFyIGw9dC5jbGllbnRXaWR0aD09PWYmJnQuY2xpZW50SGVpZ2h0PT09cDtyZXR1cm4gZj10LmNsaWVudFdpZHRoLHA9dC5jbGllbnRIZWlnaHQsYT8hbDooaD1NYXRoLmV4cChjLmNvbXB1dGVkUmFkaXVzWzBdKSwhMCl9LGxvb2tBdDpmdW5jdGlvbih0LGUscil7Yy5sb29rQXQoYy5sYXN0VCgpLHQsZSxyKX0scm90YXRlOmZ1bmN0aW9uKHQsZSxyKXtjLnJvdGF0ZShjLmxhc3RUKCksdCxlLHIpfSxwYW46ZnVuY3Rpb24odCxlLHIpe2MucGFuKGMubGFzdFQoKSx0LGUscil9LHRyYW5zbGF0ZTpmdW5jdGlvbih0LGUscil7Yy50cmFuc2xhdGUoYy5sYXN0VCgpLHQsZSxyKX19O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhkLHttYXRyaXg6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmNvbXB1dGVkTWF0cml4fSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGMuc2V0TWF0cml4KGMubGFzdFQoKSx0KSxjLmNvbXB1dGVkTWF0cml4fSxlbnVtZXJhYmxlOiEwfSxtb2RlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5nZXRNb2RlKCl9LHNldDpmdW5jdGlvbih0KXt2YXIgZT1jLmNvbXB1dGVkVXAuc2xpY2UoKSxyPWMuY29tcHV0ZWRFeWUuc2xpY2UoKSxpPWMuY29tcHV0ZWRDZW50ZXIuc2xpY2UoKTtpZihjLnNldE1vZGUodCksXCJ0dXJudGFibGVcIj09PXQpe3ZhciBhPW4oKTtjLl9hY3RpdmUubG9va0F0KGEscixpLGUpLGMuX2FjdGl2ZS5sb29rQXQoYSs1MDAscixpLFswLDAsMV0pLGMuX2FjdGl2ZS5mbHVzaChhKX1yZXR1cm4gYy5nZXRNb2RlKCl9LGVudW1lcmFibGU6ITB9LGNlbnRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuY29tcHV0ZWRDZW50ZXJ9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5sb29rQXQoYy5sYXN0VCgpLG51bGwsdCksYy5jb21wdXRlZENlbnRlcn0sZW51bWVyYWJsZTohMH0sZXllOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5jb21wdXRlZEV5ZX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLmxvb2tBdChjLmxhc3RUKCksdCksYy5jb21wdXRlZEV5ZX0sZW51bWVyYWJsZTohMH0sdXA6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmNvbXB1dGVkVXB9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5sb29rQXQoYy5sYXN0VCgpLG51bGwsbnVsbCx0KSxjLmNvbXB1dGVkVXB9LGVudW1lcmFibGU6ITB9LGRpc3RhbmNlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaH0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLnNldERpc3RhbmNlKGMubGFzdFQoKSx0KSx0fSxlbnVtZXJhYmxlOiEwfSxkaXN0YW5jZUxpbWl0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuZ2V0RGlzdGFuY2VMaW1pdHMocil9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5zZXREaXN0YW5jZUxpbWl0cyh0KSx0fSxlbnVtZXJhYmxlOiEwfX0pLHQuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldmVudERlZmF1bHQoKSwhMX0pLGQuX2xhc3RYPS0xLGQuX2xhc3RZPS0xLGQuX2xhc3RNb2RzPXtzaGlmdDohMSxjb250cm9sOiExLGFsdDohMSxtZXRhOiExfSxkLmVuYWJsZU1vdXNlTGlzdGVuZXJzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHIsaSxhKXt2YXIgbz1kLmtleUJpbmRpbmdNb2RlO2lmKCExIT09byl7dmFyIHM9XCJyb3RhdGVcIj09PW8sbD1cInBhblwiPT09byx1PVwiem9vbVwiPT09byxmPSEhYS5jb250cm9sLHA9ISFhLmFsdCxnPSEhYS5zaGlmdCx2PSEhKDEmZSksbT0hISgyJmUpLHk9ISEoNCZlKSx4PTEvdC5jbGllbnRIZWlnaHQsYj14KihyLWQuX2xhc3RYKSxfPXgqKGktZC5fbGFzdFkpLHc9ZC5mbGlwWD8xOi0xLGs9ZC5mbGlwWT8xOi0xLEE9TWF0aC5QSSpkLnJvdGF0ZVNwZWVkLFQ9bigpO2lmKC0xIT09ZC5fbGFzdFgmJi0xIT09ZC5fbGFzdFkmJigocyYmdiYmIWYmJiFwJiYhZ3x8diYmIWYmJiFwJiZnKSYmYy5yb3RhdGUoVCx3KkEqYiwtaypBKl8sMCksKGwmJnYmJiFmJiYhcCYmIWd8fG18fHYmJmYmJiFwJiYhZykmJmMucGFuKFQsLWQudHJhbnNsYXRlU3BlZWQqYipoLGQudHJhbnNsYXRlU3BlZWQqXypoLDApLHUmJnYmJiFmJiYhcCYmIWd8fHl8fHYmJiFmJiZwJiYhZykpe3ZhciBNPS1kLnpvb21TcGVlZCpfL3dpbmRvdy5pbm5lckhlaWdodCooVC1jLmxhc3RUKCkpKjEwMDtjLnBhbihULDAsMCxoKihNYXRoLmV4cChNKS0xKSl9cmV0dXJuIGQuX2xhc3RYPXIsZC5fbGFzdFk9aSxkLl9sYXN0TW9kcz1hLCEwfX1kLm1vdXNlTGlzdGVuZXI9YSh0LGUpLHQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIixmdW5jdGlvbihyKXt2YXIgbj1zKHIuY2hhbmdlZFRvdWNoZXNbMF0sdCk7ZSgwLG5bMF0sblsxXSxkLl9sYXN0TW9kcyksZSgxLG5bMF0sblsxXSxkLl9sYXN0TW9kcyksci5wcmV2ZW50RGVmYXVsdCgpfSwhIWwmJntwYXNzaXZlOiExfSksdC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsZnVuY3Rpb24ocil7dmFyIG49cyhyLmNoYW5nZWRUb3VjaGVzWzBdLHQpO2UoMSxuWzBdLG5bMV0sZC5fbGFzdE1vZHMpLHIucHJldmVudERlZmF1bHQoKX0sISFsJiZ7cGFzc2l2ZTohMX0pLHQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsZnVuY3Rpb24odCl7ZSgwLGQuX2xhc3RYLGQuX2xhc3RZLGQuX2xhc3RNb2RzKSx0LnByZXZlbnREZWZhdWx0KCl9LCEhbCYme3Bhc3NpdmU6ITF9KSxkLndoZWVsTGlzdGVuZXI9byh0LGZ1bmN0aW9uKHQsZSl7aWYoITEhPT1kLmtleUJpbmRpbmdNb2RlJiZkLmVuYWJsZVdoZWVsKXt2YXIgcj1kLmZsaXBYPzE6LTEsaT1kLmZsaXBZPzE6LTEsYT1uKCk7aWYoTWF0aC5hYnModCk+TWF0aC5hYnMoZSkpYy5yb3RhdGUoYSwwLDAsLXQqcipNYXRoLlBJKmQucm90YXRlU3BlZWQvd2luZG93LmlubmVyV2lkdGgpO2Vsc2UgaWYoIWQuX29ydGhvKXt2YXIgbz0tZC56b29tU3BlZWQqaSplL3dpbmRvdy5pbm5lckhlaWdodCooYS1jLmxhc3RUKCkpLzIwO2MucGFuKGEsMCwwLGgqKE1hdGguZXhwKG8pLTEpKX19fSwhMCl9LGQuZW5hYmxlTW91c2VMaXN0ZW5lcnMoKSxkfTt2YXIgbj10KFwicmlnaHQtbm93XCIpLGk9dChcIjNkLXZpZXdcIiksYT10KFwibW91c2UtY2hhbmdlXCIpLG89dChcIm1vdXNlLXdoZWVsXCIpLHM9dChcIm1vdXNlLWV2ZW50LW9mZnNldFwiKSxsPXQoXCJoYXMtcGFzc2l2ZS1ldmVudHNcIil9LHtcIjNkLXZpZXdcIjo0OCxcImhhcy1wYXNzaXZlLWV2ZW50c1wiOjQwNCxcIm1vdXNlLWNoYW5nZVwiOjQyOCxcIm1vdXNlLWV2ZW50LW9mZnNldFwiOjQyOSxcIm1vdXNlLXdoZWVsXCI6NDMxLFwicmlnaHQtbm93XCI6NDg5fV0sMjg2OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcImdsc2xpZnlcIiksaT10KFwiZ2wtc2hhZGVyXCIpLGE9bihbXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xcbnZhcnlpbmcgdmVjMiB1djtcXG52b2lkIG1haW4oKSB7XFxuICB1diA9IHBvc2l0aW9uO1xcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLCAxKTtcXG59XCJdKSxvPW4oW1wicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCBhY2N1bUJ1ZmZlcjtcXG52YXJ5aW5nIHZlYzIgdXY7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgdmVjNCBhY2N1bSA9IHRleHR1cmUyRChhY2N1bUJ1ZmZlciwgMC41ICogKHV2ICsgMS4wKSk7XFxuICBnbF9GcmFnQ29sb3IgPSBtaW4odmVjNCgxLDEsMSwxKSwgYWNjdW0pO1xcbn1cIl0pO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZTpcInBvc2l0aW9uXCIsdHlwZTpcInZlYzJcIn1dKX19LHtcImdsLXNoYWRlclwiOjI5OCxnbHNsaWZ5OjQwMn1dLDI4NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2NhbWVyYS5qc1wiKSxpPXQoXCJnbC1heGVzM2RcIiksYT10KFwiZ2wtYXhlczNkL3Byb3BlcnRpZXNcIiksbz10KFwiZ2wtc3Bpa2VzM2RcIikscz10KFwiZ2wtc2VsZWN0LXN0YXRpY1wiKSxsPXQoXCJnbC1mYm9cIiksYz10KFwiYS1iaWctdHJpYW5nbGVcIiksdT10KFwibW91c2UtY2hhbmdlXCIpLGg9dChcIm1vdXNlLXdoZWVsXCIpLGY9dChcImdsLW1hdDQvcGVyc3BlY3RpdmVcIikscD10KFwiZ2wtbWF0NC9vcnRob1wiKSxkPXQoXCIuL2xpYi9zaGFkZXJcIiksZz10KFwiaXMtbW9iaWxlXCIpKHt0YWJsZXQ6ITB9KTtmdW5jdGlvbiB2KCl7dGhpcy5tb3VzZT1bLTEsLTFdLHRoaXMuc2NyZWVuPW51bGwsdGhpcy5kaXN0YW5jZT0xLzAsdGhpcy5pbmRleD1udWxsLHRoaXMuZGF0YUNvb3JkaW5hdGU9bnVsbCx0aGlzLmRhdGFQb3NpdGlvbj1udWxsLHRoaXMub2JqZWN0PW51bGwsdGhpcy5kYXRhPW51bGx9ZnVuY3Rpb24gbSh0KXt2YXIgZT1NYXRoLnJvdW5kKE1hdGgubG9nKE1hdGguYWJzKHQpKS9NYXRoLmxvZygxMCkpO2lmKGU8MCl7dmFyIHI9TWF0aC5yb3VuZChNYXRoLnBvdygxMCwtZSkpO3JldHVybiBNYXRoLmNlaWwodCpyKS9yfWlmKGU+MCl7cj1NYXRoLnJvdW5kKE1hdGgucG93KDEwLGUpKTtyZXR1cm4gTWF0aC5jZWlsKHQvcikqcn1yZXR1cm4gTWF0aC5jZWlsKHQpfWZ1bmN0aW9uIHkodCl7cmV0dXJuXCJib29sZWFuXCIhPXR5cGVvZiB0fHx0fWUuZXhwb3J0cz17Y3JlYXRlU2NlbmU6ZnVuY3Rpb24odCl7KHQ9dHx8e30pLmNhbWVyYT10LmNhbWVyYXx8e307dmFyIGU9dC5jYW52YXM7aWYoIWUpaWYoZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLHQuY29udGFpbmVyKXt2YXIgcj10LmNvbnRhaW5lcjtyLmFwcGVuZENoaWxkKGUpfWVsc2UgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKTt2YXIgeD10LmdsO3h8fCh4PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bnVsbDt0cnl7KHI9dC5nZXRDb250ZXh0KFwid2ViZ2xcIixlKSl8fChyPXQuZ2V0Q29udGV4dChcImV4cGVyaW1lbnRhbC13ZWJnbFwiLGUpKX1jYXRjaCh0KXtyZXR1cm4gbnVsbH1yZXR1cm4gcn0oZSx0LmdsT3B0aW9uc3x8e3ByZW11bHRpcGxpZWRBbHBoYTohMCxhbnRpYWxpYXM6ITAscHJlc2VydmVEcmF3aW5nQnVmZmVyOmd9KSk7aWYoIXgpdGhyb3cgbmV3IEVycm9yKFwid2ViZ2wgbm90IHN1cHBvcnRlZFwiKTt2YXIgYj10LmJvdW5kc3x8W1stMTAsLTEwLC0xMF0sWzEwLDEwLDEwXV0sXz1uZXcgdix3PWwoeCxbeC5kcmF3aW5nQnVmZmVyV2lkdGgseC5kcmF3aW5nQnVmZmVySGVpZ2h0XSx7cHJlZmVyRmxvYXQ6IWd9KSxrPWQoeCksQT10LmNhbWVyYU9iamVjdCYmITA9PT10LmNhbWVyYU9iamVjdC5fb3J0aG98fHQuY2FtZXJhLnByb2plY3Rpb24mJlwib3J0aG9ncmFwaGljXCI9PT10LmNhbWVyYS5wcm9qZWN0aW9uLnR5cGV8fCExLFQ9e2V5ZTp0LmNhbWVyYS5leWV8fFsyLDAsMF0sY2VudGVyOnQuY2FtZXJhLmNlbnRlcnx8WzAsMCwwXSx1cDp0LmNhbWVyYS51cHx8WzAsMSwwXSx6b29tTWluOnQuY2FtZXJhLnpvb21NYXh8fC4xLHpvb21NYXg6dC5jYW1lcmEuem9vbU1pbnx8MTAwLG1vZGU6dC5jYW1lcmEubW9kZXx8XCJ0dXJudGFibGVcIixfb3J0aG86QX0sTT10LmF4ZXN8fHt9LFM9aSh4LE0pO1MuZW5hYmxlPSFNLmRpc2FibGU7dmFyIEU9dC5zcGlrZXN8fHt9LEM9byh4LEUpLEw9W10sej1bXSxPPVtdLEk9W10sRD0hMCxQPSEwLFI9bmV3IEFycmF5KDE2KSxGPW5ldyBBcnJheSgxNiksQj17dmlldzpudWxsLHByb2plY3Rpb246Uixtb2RlbDpGLF9vcnRobzohMX0sUD0hMCxOPVt4LmRyYXdpbmdCdWZmZXJXaWR0aCx4LmRyYXdpbmdCdWZmZXJIZWlnaHRdLGo9dC5jYW1lcmFPYmplY3R8fG4oZSxUKSxWPXtnbDp4LGNvbnRleHRMb3N0OiExLHBpeGVsUmF0aW86dC5waXhlbFJhdGlvfHwxLGNhbnZhczplLHNlbGVjdGlvbjpfLGNhbWVyYTpqLGF4ZXM6UyxheGVzUGl4ZWxzOm51bGwsc3Bpa2VzOkMsYm91bmRzOmIsb2JqZWN0czpMLHNoYXBlOk4sYXNwZWN0OnQuYXNwZWN0UmF0aW98fFsxLDEsMV0scGlja1JhZGl1czp0LnBpY2tSYWRpdXN8fDEwLHpOZWFyOnQuek5lYXJ8fC4wMSx6RmFyOnQuekZhcnx8MWUzLGZvdnk6dC5mb3Z5fHxNYXRoLlBJLzQsY2xlYXJDb2xvcjp0LmNsZWFyQ29sb3J8fFswLDAsMCwwXSxhdXRvUmVzaXplOnkodC5hdXRvUmVzaXplKSxhdXRvQm91bmRzOnkodC5hdXRvQm91bmRzKSxhdXRvU2NhbGU6ISF0LmF1dG9TY2FsZSxhdXRvQ2VudGVyOnkodC5hdXRvQ2VudGVyKSxjbGlwVG9Cb3VuZHM6eSh0LmNsaXBUb0JvdW5kcyksc25hcFRvRGF0YTohIXQuc25hcFRvRGF0YSxvbnNlbGVjdDp0Lm9uc2VsZWN0fHxudWxsLG9ucmVuZGVyOnQub25yZW5kZXJ8fG51bGwsb25jbGljazp0Lm9uY2xpY2t8fG51bGwsY2FtZXJhUGFyYW1zOkIsb25jb250ZXh0bG9zczpudWxsLG1vdXNlTGlzdGVuZXI6bnVsbCxfc3RvcHBlZDohMX0sVT1beC5kcmF3aW5nQnVmZmVyV2lkdGgvVi5waXhlbFJhdGlvfDAseC5kcmF3aW5nQnVmZmVySGVpZ2h0L1YucGl4ZWxSYXRpb3wwXTtmdW5jdGlvbiBxKCl7aWYoIVYuX3N0b3BwZWQmJlYuYXV0b1Jlc2l6ZSl7dmFyIHQ9ZS5wYXJlbnROb2RlLHI9MSxuPTE7dCYmdCE9PWRvY3VtZW50LmJvZHk/KHI9dC5jbGllbnRXaWR0aCxuPXQuY2xpZW50SGVpZ2h0KToocj13aW5kb3cuaW5uZXJXaWR0aCxuPXdpbmRvdy5pbm5lckhlaWdodCk7dmFyIGk9MHxNYXRoLmNlaWwocipWLnBpeGVsUmF0aW8pLGE9MHxNYXRoLmNlaWwobipWLnBpeGVsUmF0aW8pO2lmKGkhPT1lLndpZHRofHxhIT09ZS5oZWlnaHQpe2Uud2lkdGg9aSxlLmhlaWdodD1hO3ZhciBvPWUuc3R5bGU7by5wb3NpdGlvbj1vLnBvc2l0aW9ufHxcImFic29sdXRlXCIsby5sZWZ0PVwiMHB4XCIsby50b3A9XCIwcHhcIixvLndpZHRoPXIrXCJweFwiLG8uaGVpZ2h0PW4rXCJweFwiLEQ9ITB9fX1WLmF1dG9SZXNpemUmJnEoKTtmdW5jdGlvbiBIKCl7Zm9yKHZhciB0PUwubGVuZ3RoLGU9SS5sZW5ndGgscj0wO3I8ZTsrK3IpT1tyXT0wO3Q6Zm9yKHZhciByPTA7cjx0Oysrcil7dmFyIG49TFtyXSxpPW4ucGlja1Nsb3RzO2lmKGkpe2Zvcih2YXIgYT0wO2E8ZTsrK2EpaWYoT1thXStpPDI1NSl7eltyXT1hLG4uc2V0UGlja0Jhc2UoT1thXSsxKSxPW2FdKz1pO2NvbnRpbnVlIHR9dmFyIG89cyh4LE4pO3pbcl09ZSxJLnB1c2gobyksTy5wdXNoKGkpLG4uc2V0UGlja0Jhc2UoMSksZSs9MX1lbHNlIHpbcl09LTF9Zm9yKDtlPjAmJjA9PT1PW2UtMV07KU8ucG9wKCksSS5wb3AoKS5kaXNwb3NlKCl9ZnVuY3Rpb24gRygpe2lmKFYuY29udGV4dExvc3QpcmV0dXJuITA7eC5pc0NvbnRleHRMb3N0KCkmJihWLmNvbnRleHRMb3N0PSEwLFYubW91c2VMaXN0ZW5lci5lbmFibGVkPSExLFYuc2VsZWN0aW9uLm9iamVjdD1udWxsLFYub25jb250ZXh0bG9zcyYmVi5vbmNvbnRleHRsb3NzKCkpfXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIscSksVi51cGRhdGU9ZnVuY3Rpb24odCl7Vi5fc3RvcHBlZHx8KHQ9dHx8e30sRD0hMCxQPSEwKX0sVi5hZGQ9ZnVuY3Rpb24odCl7Vi5fc3RvcHBlZHx8KHQuYXhlcz1TLEwucHVzaCh0KSx6LnB1c2goLTEpLEQ9ITAsUD0hMCxIKCkpfSxWLnJlbW92ZT1mdW5jdGlvbih0KXtpZighVi5fc3RvcHBlZCl7dmFyIGU9TC5pbmRleE9mKHQpO2U8MHx8KEwuc3BsaWNlKGUsMSksei5wb3AoKSxEPSEwLFA9ITAsSCgpKX19LFYuZGlzcG9zZT1mdW5jdGlvbigpe2lmKCFWLl9zdG9wcGVkJiYoVi5fc3RvcHBlZD0hMCx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHEpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndlYmdsY29udGV4dGxvc3RcIixHKSxWLm1vdXNlTGlzdGVuZXIuZW5hYmxlZD0hMSwhVi5jb250ZXh0TG9zdCkpe1MuZGlzcG9zZSgpLEMuZGlzcG9zZSgpO2Zvcih2YXIgdD0wO3Q8TC5sZW5ndGg7Kyt0KUxbdF0uZGlzcG9zZSgpO3cuZGlzcG9zZSgpO2Zvcih2YXIgdD0wO3Q8SS5sZW5ndGg7Kyt0KUlbdF0uZGlzcG9zZSgpO2suZGlzcG9zZSgpLHg9bnVsbCxTPW51bGwsQz1udWxsLEw9W119fSxWLndoZWVsTGlzdGVuZXI9aChlLGZ1bmN0aW9uKHQsZSl7aWYoITEhPT1qLmtleUJpbmRpbmdNb2RlJiZqLmVuYWJsZVdoZWVsJiZqLl9vcnRobyl7dmFyIHI9dD5lPzEuMToxLzEuMTtWLmFzcGVjdFswXSo9cixWLmFzcGVjdFsxXSo9cixWLmFzcGVjdFsyXSo9cixWLnJlZHJhdygpfX0sITApLFYuX21vdXNlUm90YXRpbmc9ITEsVi5fcHJldkJ1dHRvbnM9MCxWLmVuYWJsZU1vdXNlTGlzdGVuZXJzPWZ1bmN0aW9uKCl7Vi5tb3VzZUxpc3RlbmVyPXUoZSxmdW5jdGlvbih0LGUscil7aWYoIVYuX3N0b3BwZWQpe3ZhciBuPUkubGVuZ3RoLGk9TC5sZW5ndGgsYT1fLm9iamVjdDtfLmRpc3RhbmNlPTEvMCxfLm1vdXNlWzBdPWUsXy5tb3VzZVsxXT1yLF8ub2JqZWN0PW51bGwsXy5zY3JlZW49bnVsbCxfLmRhdGFDb29yZGluYXRlPV8uZGF0YVBvc2l0aW9uPW51bGw7dmFyIG89ITE7aWYodCYmVi5fcHJldkJ1dHRvbnMpVi5fbW91c2VSb3RhdGluZz0hMDtlbHNle1YuX21vdXNlUm90YXRpbmcmJihQPSEwKSxWLl9tb3VzZVJvdGF0aW5nPSExO2Zvcih2YXIgcz0wO3M8bjsrK3Mpe3ZhciBsPUlbc10ucXVlcnkoZSxVWzFdLXItMSxWLnBpY2tSYWRpdXMpO2lmKGwpe2lmKGwuZGlzdGFuY2U+Xy5kaXN0YW5jZSljb250aW51ZTtmb3IodmFyIGM9MDtjPGk7KytjKXt2YXIgdT1MW2NdO2lmKHpbY109PT1zKXt2YXIgaD11LnBpY2sobCk7aCYmKF8uYnV0dG9ucz10LF8uc2NyZWVuPWwuY29vcmQsXy5kaXN0YW5jZT1sLmRpc3RhbmNlLF8ub2JqZWN0PXUsXy5pbmRleD1oLmRpc3RhbmNlLF8uZGF0YVBvc2l0aW9uPWgucG9zaXRpb24sXy5kYXRhQ29vcmRpbmF0ZT1oLmRhdGFDb29yZGluYXRlLF8uZGF0YT1oLG89ITApfX19fX1hJiZhIT09Xy5vYmplY3QmJihhLmhpZ2hsaWdodCYmYS5oaWdobGlnaHQobnVsbCksRD0hMCksXy5vYmplY3QmJihfLm9iamVjdC5oaWdobGlnaHQmJl8ub2JqZWN0LmhpZ2hsaWdodChfLmRhdGEpLEQ9ITApLChvPW98fF8ub2JqZWN0IT09YSkmJlYub25zZWxlY3QmJlYub25zZWxlY3QoXyksMSZ0JiYhKDEmVi5fcHJldkJ1dHRvbnMpJiZWLm9uY2xpY2smJlYub25jbGljayhfKSxWLl9wcmV2QnV0dG9ucz10fX0pfSxlLmFkZEV2ZW50TGlzdGVuZXIoXCJ3ZWJnbGNvbnRleHRsb3N0XCIsRyk7dmFyIFk9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sVz1bWVswXS5zbGljZSgpLFlbMV0uc2xpY2UoKV07ZnVuY3Rpb24gWCgpe2lmKCFHKCkpe3EoKTt2YXIgdD1WLmNhbWVyYS50aWNrKCk7Qi52aWV3PVYuY2FtZXJhLm1hdHJpeCxEPUR8fHQsUD1QfHx0LFMucGl4ZWxSYXRpbz1WLnBpeGVsUmF0aW8sQy5waXhlbFJhdGlvPVYucGl4ZWxSYXRpbzt2YXIgZT1MLmxlbmd0aCxyPVlbMF0sbj1ZWzFdO3JbMF09clsxXT1yWzJdPTEvMCxuWzBdPW5bMV09blsyXT0tMS8wO2Zvcih2YXIgaT0wO2k8ZTsrK2kpe3ZhciBvPUxbaV07by5waXhlbFJhdGlvPVYucGl4ZWxSYXRpbyxvLmF4ZXM9Vi5heGVzLEQ9RHx8ISFvLmRpcnR5LFA9UHx8ISFvLmRpcnR5O3ZhciBzPW8uYm91bmRzO2lmKHMpZm9yKHZhciBsPXNbMF0sdT1zWzFdLGg9MDtoPDM7KytoKXJbaF09TWF0aC5taW4ocltoXSxsW2hdKSxuW2hdPU1hdGgubWF4KG5baF0sdVtoXSl9dmFyIGQ9Vi5ib3VuZHM7aWYoVi5hdXRvQm91bmRzKWZvcih2YXIgaD0wO2g8MzsrK2gpe2lmKG5baF08cltoXSlyW2hdPS0xLG5baF09MTtlbHNle3JbaF09PT1uW2hdJiYocltoXS09MSxuW2hdKz0xKTt2YXIgZz0uMDUqKG5baF0tcltoXSk7cltoXT1yW2hdLWcsbltoXT1uW2hdK2d9ZFswXVtoXT1yW2hdLGRbMV1baF09bltoXX1mb3IodmFyIHY9ITEsaD0wO2g8MzsrK2gpdj12fHxXWzBdW2hdIT09ZFswXVtoXXx8V1sxXVtoXSE9PWRbMV1baF0sV1swXVtoXT1kWzBdW2hdLFdbMV1baF09ZFsxXVtoXTtpZihQPVB8fHYsRD1EfHx2KXtpZih2KXtmb3IodmFyIHk9WzAsMCwwXSxpPTA7aTwzOysraSl5W2ldPW0oKGRbMV1baV0tZFswXVtpXSkvMTApO1MuYXV0b1RpY2tzP1MudXBkYXRlKHtib3VuZHM6ZCx0aWNrU3BhY2luZzp5fSk6Uy51cGRhdGUoe2JvdW5kczpkfSl9dmFyIGI9eC5kcmF3aW5nQnVmZmVyV2lkdGgsVD14LmRyYXdpbmdCdWZmZXJIZWlnaHQ7TlswXT1iLE5bMV09VCxVWzBdPTB8TWF0aC5tYXgoYi9WLnBpeGVsUmF0aW8sMSksVVsxXT0wfE1hdGgubWF4KFQvVi5waXhlbFJhdGlvLDEpLEE/KHAoUiwtYi9ULGIvVCwtMSwxLFYuek5lYXIsVi56RmFyKSxCLl9vcnRobz0hMCk6KGYoUixWLmZvdnksYi9ULFYuek5lYXIsVi56RmFyKSxCLl9vcnRobz0hMSk7Zm9yKHZhciBpPTA7aTwxNjsrK2kpRltpXT0wO0ZbMTVdPTE7Zm9yKHZhciBNPTAsaT0wO2k8MzsrK2kpTT1NYXRoLm1heChNLGRbMV1baV0tZFswXVtpXSk7Zm9yKHZhciBpPTA7aTwzOysraSlWLmF1dG9TY2FsZT9GWzUqaV09Vi5hc3BlY3RbaV0vKGRbMV1baV0tZFswXVtpXSk6Rls1KmldPTEvTSxWLmF1dG9DZW50ZXImJihGWzEyK2ldPS41Ki1GWzUqaV0qKGRbMF1baV0rZFsxXVtpXSkpO2Zvcih2YXIgaT0wO2k8ZTsrK2kpe3ZhciBvPUxbaV07by5heGVzQm91bmRzPWQsVi5jbGlwVG9Cb3VuZHMmJihvLmNsaXBCb3VuZHM9ZCl9Xy5vYmplY3QmJihWLnNuYXBUb0RhdGE/Qy5wb3NpdGlvbj1fLmRhdGFDb29yZGluYXRlOkMucG9zaXRpb249Xy5kYXRhUG9zaXRpb24sQy5ib3VuZHM9ZCksUCYmKFA9ITEsZnVuY3Rpb24oKXtpZihHKCkpcmV0dXJuO3guY29sb3JNYXNrKCEwLCEwLCEwLCEwKSx4LmRlcHRoTWFzayghMCkseC5kaXNhYmxlKHguQkxFTkQpLHguZW5hYmxlKHguREVQVEhfVEVTVCk7Zm9yKHZhciB0PUwubGVuZ3RoLGU9SS5sZW5ndGgscj0wO3I8ZTsrK3Ipe3ZhciBuPUlbcl07bi5zaGFwZT1VLG4uYmVnaW4oKTtmb3IodmFyIGk9MDtpPHQ7KytpKWlmKHpbaV09PT1yKXt2YXIgYT1MW2ldO2EuZHJhd1BpY2smJihhLnBpeGVsUmF0aW89MSxhLmRyYXdQaWNrKEIpKX1uLmVuZCgpfX0oKSksVi5heGVzUGl4ZWxzPWEoVi5heGVzLEIsYixUKSxWLm9ucmVuZGVyJiZWLm9ucmVuZGVyKCkseC5iaW5kRnJhbWVidWZmZXIoeC5GUkFNRUJVRkZFUixudWxsKSx4LnZpZXdwb3J0KDAsMCxiLFQpO3ZhciBFPVYuY2xlYXJDb2xvcjt4LmNsZWFyQ29sb3IoRVswXSxFWzFdLEVbMl0sRVszXSkseC5jbGVhcih4LkNPTE9SX0JVRkZFUl9CSVR8eC5ERVBUSF9CVUZGRVJfQklUKSx4LmRlcHRoTWFzayghMCkseC5jb2xvck1hc2soITAsITAsITAsITApLHguZW5hYmxlKHguREVQVEhfVEVTVCkseC5kZXB0aEZ1bmMoeC5MRVFVQUwpLHguZGlzYWJsZSh4LkJMRU5EKSx4LmRpc2FibGUoeC5DVUxMX0ZBQ0UpO3ZhciBPPSExO1MuZW5hYmxlJiYoTz1PfHxTLmlzVHJhbnNwYXJlbnQoKSxTLmRyYXcoQikpLEMuYXhlcz1TLF8ub2JqZWN0JiZDLmRyYXcoQikseC5kaXNhYmxlKHguQ1VMTF9GQUNFKTtmb3IodmFyIGk9MDtpPGU7KytpKXt2YXIgbz1MW2ldO28uYXhlcz1TLG8ucGl4ZWxSYXRpbz1WLnBpeGVsUmF0aW8sby5pc09wYXF1ZSYmby5pc09wYXF1ZSgpJiZvLmRyYXcoQiksby5pc1RyYW5zcGFyZW50JiZvLmlzVHJhbnNwYXJlbnQoKSYmKE89ITApfWlmKE8pe3cuc2hhcGU9Tix3LmJpbmQoKSx4LmNsZWFyKHguREVQVEhfQlVGRkVSX0JJVCkseC5jb2xvck1hc2soITEsITEsITEsITEpLHguZGVwdGhNYXNrKCEwKSx4LmRlcHRoRnVuYyh4LkxFU1MpLFMuZW5hYmxlJiZTLmlzVHJhbnNwYXJlbnQoKSYmUy5kcmF3VHJhbnNwYXJlbnQoQik7Zm9yKHZhciBpPTA7aTxlOysraSl7dmFyIG89TFtpXTtvLmlzT3BhcXVlJiZvLmlzT3BhcXVlKCkmJm8uZHJhdyhCKX14LmVuYWJsZSh4LkJMRU5EKSx4LmJsZW5kRXF1YXRpb24oeC5GVU5DX0FERCkseC5ibGVuZEZ1bmMoeC5PTkUseC5PTkVfTUlOVVNfU1JDX0FMUEhBKSx4LmNvbG9yTWFzayghMCwhMCwhMCwhMCkseC5kZXB0aE1hc2soITEpLHguY2xlYXJDb2xvcigwLDAsMCwwKSx4LmNsZWFyKHguQ09MT1JfQlVGRkVSX0JJVCksUy5pc1RyYW5zcGFyZW50KCkmJlMuZHJhd1RyYW5zcGFyZW50KEIpO2Zvcih2YXIgaT0wO2k8ZTsrK2kpe3ZhciBvPUxbaV07by5pc1RyYW5zcGFyZW50JiZvLmlzVHJhbnNwYXJlbnQoKSYmby5kcmF3VHJhbnNwYXJlbnQoQil9eC5iaW5kRnJhbWVidWZmZXIoeC5GUkFNRUJVRkZFUixudWxsKSx4LmJsZW5kRnVuYyh4Lk9ORSx4Lk9ORV9NSU5VU19TUkNfQUxQSEEpLHguZGlzYWJsZSh4LkRFUFRIX1RFU1QpLGsuYmluZCgpLHcuY29sb3JbMF0uYmluZCgwKSxrLnVuaWZvcm1zLmFjY3VtQnVmZmVyPTAsYyh4KSx4LmRpc2FibGUoeC5CTEVORCl9RD0hMTtmb3IodmFyIGk9MDtpPGU7KytpKUxbaV0uZGlydHk9ITF9fX1yZXR1cm4gVi5lbmFibGVNb3VzZUxpc3RlbmVycygpLGZ1bmN0aW9uIHQoKXtWLl9zdG9wcGVkfHxWLmNvbnRleHRMb3N0fHwoWCgpLHJlcXVlc3RBbmltYXRpb25GcmFtZSh0KSl9KCksVi5yZWRyYXc9ZnVuY3Rpb24oKXtWLl9zdG9wcGVkfHwoRD0hMCxYKCkpfSxWfSxjcmVhdGVDYW1lcmE6bn19LHtcIi4vY2FtZXJhLmpzXCI6Mjg1LFwiLi9saWIvc2hhZGVyXCI6Mjg2LFwiYS1iaWctdHJpYW5nbGVcIjo1MCxcImdsLWF4ZXMzZFwiOjIzMCxcImdsLWF4ZXMzZC9wcm9wZXJ0aWVzXCI6MjM3LFwiZ2wtZmJvXCI6MjQ2LFwiZ2wtbWF0NC9vcnRob1wiOjI2NSxcImdsLW1hdDQvcGVyc3BlY3RpdmVcIjoyNjYsXCJnbC1zZWxlY3Qtc3RhdGljXCI6Mjk3LFwiZ2wtc3Bpa2VzM2RcIjozMDcsXCJpcy1tb2JpbGVcIjo0MTMsXCJtb3VzZS1jaGFuZ2VcIjo0MjgsXCJtb3VzZS13aGVlbFwiOjQzMX1dLDI4ODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCJnbHNsaWZ5XCIpO3IucG9pbnRWZXJ0ZXg9bihbXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xcblxcbnVuaWZvcm0gbWF0MyBtYXRyaXg7XFxudW5pZm9ybSBmbG9hdCBwb2ludFNpemU7XFxudW5pZm9ybSBmbG9hdCBwb2ludENsb3VkO1xcblxcbmhpZ2hwIGZsb2F0IHJhbmQodmVjMiBjbykge1xcbiAgaGlnaHAgZmxvYXQgYSA9IDEyLjk4OTg7XFxuICBoaWdocCBmbG9hdCBiID0gNzguMjMzO1xcbiAgaGlnaHAgZmxvYXQgYyA9IDQzNzU4LjU0NTM7XFxuICBoaWdocCBmbG9hdCBkID0gZG90KGNvLnh5LCB2ZWMyKGEsIGIpKTtcXG4gIGhpZ2hwIGZsb2F0IGUgPSBtb2QoZCwgMy4xNCk7XFxuICByZXR1cm4gZnJhY3Qoc2luKGUpICogYyk7XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzMgaGdQb3NpdGlvbiA9IG1hdHJpeCAqIHZlYzMocG9zaXRpb24sIDEpO1xcbiAgZ2xfUG9zaXRpb24gID0gdmVjNChoZ1Bvc2l0aW9uLnh5LCAwLCBoZ1Bvc2l0aW9uLnopO1xcbiAgICAvLyBpZiB3ZSBkb24ndCBqaXR0ZXIgdGhlIHBvaW50IHNpemUgYSBiaXQsIG92ZXJhbGwgcG9pbnQgY2xvdWRcXG4gICAgLy8gc2F0dXJhdGlvbiAnanVtcHMnIG9uIHpvb21pbmcsIHdoaWNoIGlzIGRpc3R1cmJpbmcgYW5kIGNvbmZ1c2luZ1xcbiAgZ2xfUG9pbnRTaXplID0gcG9pbnRTaXplICogKCgxOS41ICsgcmFuZChwb3NpdGlvbikpIC8gMjAuMCk7XFxuICBpZihwb2ludENsb3VkICE9IDAuMCkgeyAvLyBwb2ludENsb3VkIGlzIHRydXRoeVxcbiAgICAvLyBnZXQgdGhlIHNhbWUgc3F1YXJlIHN1cmZhY2UgYXMgY2lyY2xlIHdvdWxkIGJlXFxuICAgIGdsX1BvaW50U2l6ZSAqPSAwLjg4NjtcXG4gIH1cXG59XCJdKSxyLnBvaW50RnJhZ21lbnQ9bihbXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnVuaWZvcm0gdmVjNCBjb2xvciwgYm9yZGVyQ29sb3I7XFxudW5pZm9ybSBmbG9hdCBjZW50ZXJGcmFjdGlvbjtcXG51bmlmb3JtIGZsb2F0IHBvaW50Q2xvdWQ7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgZmxvYXQgcmFkaXVzO1xcbiAgdmVjNCBiYXNlQ29sb3I7XFxuICBpZihwb2ludENsb3VkICE9IDAuMCkgeyAvLyBwb2ludENsb3VkIGlzIHRydXRoeVxcbiAgICBpZihjZW50ZXJGcmFjdGlvbiA9PSAxLjApIHtcXG4gICAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG4gICAgfSBlbHNlIHtcXG4gICAgICBnbF9GcmFnQ29sb3IgPSBtaXgoYm9yZGVyQ29sb3IsIGNvbG9yLCBjZW50ZXJGcmFjdGlvbik7XFxuICAgIH1cXG4gIH0gZWxzZSB7XFxuICAgIHJhZGl1cyA9IGxlbmd0aCgyLjAgKiBnbF9Qb2ludENvb3JkLnh5IC0gMS4wKTtcXG4gICAgaWYocmFkaXVzID4gMS4wKSB7XFxuICAgICAgZGlzY2FyZDtcXG4gICAgfVxcbiAgICBiYXNlQ29sb3IgPSBtaXgoYm9yZGVyQ29sb3IsIGNvbG9yLCBzdGVwKHJhZGl1cywgY2VudGVyRnJhY3Rpb24pKTtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChiYXNlQ29sb3IucmdiICogYmFzZUNvbG9yLmEsIGJhc2VDb2xvci5hKTtcXG4gIH1cXG59XFxuXCJdKSxyLnBpY2tWZXJ0ZXg9bihbXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWM0IHBpY2tJZDtcXG5cXG51bmlmb3JtIG1hdDMgbWF0cml4O1xcbnVuaWZvcm0gZmxvYXQgcG9pbnRTaXplO1xcbnVuaWZvcm0gdmVjNCBwaWNrT2Zmc2V0O1xcblxcbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgdmVjMyBoZ1Bvc2l0aW9uID0gbWF0cml4ICogdmVjMyhwb3NpdGlvbiwgMSk7XFxuICBnbF9Qb3NpdGlvbiAgPSB2ZWM0KGhnUG9zaXRpb24ueHksIDAsIGhnUG9zaXRpb24ueik7XFxuICBnbF9Qb2ludFNpemUgPSBwb2ludFNpemU7XFxuXFxuICB2ZWM0IGlkID0gcGlja0lkICsgcGlja09mZnNldDtcXG4gIGlkLnkgKz0gZmxvb3IoaWQueCAvIDI1Ni4wKTtcXG4gIGlkLnggLT0gZmxvb3IoaWQueCAvIDI1Ni4wKSAqIDI1Ni4wO1xcblxcbiAgaWQueiArPSBmbG9vcihpZC55IC8gMjU2LjApO1xcbiAgaWQueSAtPSBmbG9vcihpZC55IC8gMjU2LjApICogMjU2LjA7XFxuXFxuICBpZC53ICs9IGZsb29yKGlkLnogLyAyNTYuMCk7XFxuICBpZC56IC09IGZsb29yKGlkLnogLyAyNTYuMCkgKiAyNTYuMDtcXG5cXG4gIGZyYWdJZCA9IGlkO1xcbn1cXG5cIl0pLHIucGlja0ZyYWdtZW50PW4oW1wicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0lkO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGZsb2F0IHJhZGl1cyA9IGxlbmd0aCgyLjAgKiBnbF9Qb2ludENvb3JkLnh5IC0gMS4wKTtcXG4gIGlmKHJhZGl1cyA+IDEuMCkge1xcbiAgICBkaXNjYXJkO1xcbiAgfVxcbiAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0lkIC8gMjU1LjA7XFxufVxcblwiXSl9LHtnbHNsaWZ5OjQwMn1dLDI4OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbC1zaGFkZXJcIiksaT10KFwiZ2wtYnVmZmVyXCIpLGE9dChcInR5cGVkYXJyYXktcG9vbFwiKSxvPXQoXCIuL2xpYi9zaGFkZXJcIik7ZnVuY3Rpb24gcyh0LGUscixuLGkpe3RoaXMucGxvdD10LHRoaXMub2Zmc2V0QnVmZmVyPWUsdGhpcy5waWNrQnVmZmVyPXIsdGhpcy5zaGFkZXI9bix0aGlzLnBpY2tTaGFkZXI9aSx0aGlzLnNpemVNaW49LjUsdGhpcy5zaXplTWluQ2FwPTIsdGhpcy5zaXplTWF4PTIwLHRoaXMuYXJlYVJhdGlvPTEsdGhpcy5wb2ludENvdW50PTAsdGhpcy5jb2xvcj1bMSwwLDAsMV0sdGhpcy5ib3JkZXJDb2xvcj1bMCwwLDAsMV0sdGhpcy5ibGVuZD0hMSx0aGlzLnBpY2tPZmZzZXQ9MCx0aGlzLnBvaW50cz1udWxsfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2wsYT1pKHIpLGw9aShyKSxjPW4ocixvLnBvaW50VmVydGV4LG8ucG9pbnRGcmFnbWVudCksdT1uKHIsby5waWNrVmVydGV4LG8ucGlja0ZyYWdtZW50KSxoPW5ldyBzKHQsYSxsLGMsdSk7cmV0dXJuIGgudXBkYXRlKGUpLHQuYWRkT2JqZWN0KGgpLGh9O3ZhciBsLGMsdT1zLnByb3RvdHlwZTt1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLm9mZnNldEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5waWNrQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnBsb3QucmVtb3ZlT2JqZWN0KHRoaXMpfSx1LnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZTtmdW5jdGlvbiByKGUscil7cmV0dXJuIGUgaW4gdD90W2VdOnJ9dD10fHx7fSx0aGlzLnNpemVNaW49cihcInNpemVNaW5cIiwuNSksdGhpcy5zaXplTWF4PXIoXCJzaXplTWF4XCIsMjApLHRoaXMuY29sb3I9cihcImNvbG9yXCIsWzEsMCwwLDFdKS5zbGljZSgpLHRoaXMuYXJlYVJhdGlvPXIoXCJhcmVhUmF0aW9cIiwxKSx0aGlzLmJvcmRlckNvbG9yPXIoXCJib3JkZXJDb2xvclwiLFswLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmJsZW5kPXIoXCJibGVuZFwiLCExKTt2YXIgbj10LnBvc2l0aW9ucy5sZW5ndGg+Pj4xLGk9dC5wb3NpdGlvbnMgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXksbz10LmlkVG9JbmRleCBpbnN0YW5jZW9mIEludDMyQXJyYXkmJnQuaWRUb0luZGV4Lmxlbmd0aD49bixzPXQucG9zaXRpb25zLGw9aT9zOmEubWFsbG9jRmxvYXQzMihzLmxlbmd0aCksYz1vP3QuaWRUb0luZGV4OmEubWFsbG9jSW50MzIobik7aWYoaXx8bC5zZXQocyksIW8pZm9yKGwuc2V0KHMpLGU9MDtlPG47ZSsrKWNbZV09ZTt0aGlzLnBvaW50cz1zLHRoaXMub2Zmc2V0QnVmZmVyLnVwZGF0ZShsKSx0aGlzLnBpY2tCdWZmZXIudXBkYXRlKGMpLGl8fGEuZnJlZShsKSxvfHxhLmZyZWUoYyksdGhpcy5wb2ludENvdW50PW4sdGhpcy5waWNrT2Zmc2V0PTB9LHUudW5pZmllZERyYXc9KGw9WzEsMCwwLDAsMSwwLDAsMCwxXSxjPVswLDAsMCwwXSxmdW5jdGlvbih0KXt2YXIgZT12b2lkIDAhPT10LHI9ZT90aGlzLnBpY2tTaGFkZXI6dGhpcy5zaGFkZXIsbj10aGlzLnBsb3QuZ2wsaT10aGlzLnBsb3QuZGF0YUJveDtpZigwPT09dGhpcy5wb2ludENvdW50KXJldHVybiB0O3ZhciBhPWlbMl0taVswXSxvPWlbM10taVsxXSxzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj0wLGk9dC5sZW5ndGg+Pj4xO2ZvcihyPTA7cjxpO3IrKyl7dmFyIGE9dFsyKnJdLG89dFsyKnIrMV07YT49ZVswXSYmYTw9ZVsyXSYmbz49ZVsxXSYmbzw9ZVszXSYmbisrfXJldHVybiBufSh0aGlzLnBvaW50cyxpKSx1PXRoaXMucGxvdC5waWNrUGl4ZWxSYXRpbypNYXRoLm1heChNYXRoLm1pbih0aGlzLnNpemVNaW5DYXAsdGhpcy5zaXplTWluKSxNYXRoLm1pbih0aGlzLnNpemVNYXgsdGhpcy5zaXplTWF4L01hdGgucG93KHMsLjMzMzMzKSkpO2xbMF09Mi9hLGxbNF09Mi9vLGxbNl09LTIqaVswXS9hLTEsbFs3XT0tMippWzFdL28tMSx0aGlzLm9mZnNldEJ1ZmZlci5iaW5kKCksci5iaW5kKCksci5hdHRyaWJ1dGVzLnBvc2l0aW9uLnBvaW50ZXIoKSxyLnVuaWZvcm1zLm1hdHJpeD1sLHIudW5pZm9ybXMuY29sb3I9dGhpcy5jb2xvcixyLnVuaWZvcm1zLmJvcmRlckNvbG9yPXRoaXMuYm9yZGVyQ29sb3Isci51bmlmb3Jtcy5wb2ludENsb3VkPXU8NSxyLnVuaWZvcm1zLnBvaW50U2l6ZT11LHIudW5pZm9ybXMuY2VudGVyRnJhY3Rpb249TWF0aC5taW4oMSxNYXRoLm1heCgwLE1hdGguc3FydCgxLXRoaXMuYXJlYVJhdGlvKSkpLGUmJihjWzBdPTI1NSZ0LGNbMV09dD4+OCYyNTUsY1syXT10Pj4xNiYyNTUsY1szXT10Pj4yNCYyNTUsdGhpcy5waWNrQnVmZmVyLmJpbmQoKSxyLmF0dHJpYnV0ZXMucGlja0lkLnBvaW50ZXIobi5VTlNJR05FRF9CWVRFKSxyLnVuaWZvcm1zLnBpY2tPZmZzZXQ9Yyx0aGlzLnBpY2tPZmZzZXQ9dCk7dmFyIGg9bi5nZXRQYXJhbWV0ZXIobi5CTEVORCksZj1uLmdldFBhcmFtZXRlcihuLkRJVEhFUik7cmV0dXJuIGgmJiF0aGlzLmJsZW5kJiZuLmRpc2FibGUobi5CTEVORCksZiYmbi5kaXNhYmxlKG4uRElUSEVSKSxuLmRyYXdBcnJheXMobi5QT0lOVFMsMCx0aGlzLnBvaW50Q291bnQpLGgmJiF0aGlzLmJsZW5kJiZuLmVuYWJsZShuLkJMRU5EKSxmJiZuLmVuYWJsZShuLkRJVEhFUiksdCt0aGlzLnBvaW50Q291bnR9KSx1LmRyYXc9dS51bmlmaWVkRHJhdyx1LmRyYXdQaWNrPXUudW5pZmllZERyYXcsdS5waWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnBpY2tPZmZzZXQsaT10aGlzLnBvaW50Q291bnQ7aWYocjxufHxyPj1uK2kpcmV0dXJuIG51bGw7dmFyIGE9ci1uLG89dGhpcy5wb2ludHM7cmV0dXJue29iamVjdDp0aGlzLHBvaW50SWQ6YSxkYXRhQ29vcmQ6W29bMiphXSxvWzIqYSsxXV19fX0se1wiLi9saWIvc2hhZGVyXCI6Mjg4LFwiZ2wtYnVmZmVyXCI6MjM4LFwiZ2wtc2hhZGVyXCI6Mjk4LFwidHlwZWRhcnJheS1wb29sXCI6NTMwfV0sMjkwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzLGwsYz1lWzBdLHU9ZVsxXSxoPWVbMl0sZj1lWzNdLHA9clswXSxkPXJbMV0sZz1yWzJdLHY9clszXTsoYT1jKnArdSpkK2gqZytmKnYpPDAmJihhPS1hLHA9LXAsZD0tZCxnPS1nLHY9LXYpOzEtYT4xZS02PyhpPU1hdGguYWNvcyhhKSxvPU1hdGguc2luKGkpLHM9TWF0aC5zaW4oKDEtbikqaSkvbyxsPU1hdGguc2luKG4qaSkvbyk6KHM9MS1uLGw9bik7cmV0dXJuIHRbMF09cypjK2wqcCx0WzFdPXMqdStsKmQsdFsyXT1zKmgrbCpnLHRbM109cypmK2wqdix0fX0se31dLDI5MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdHx8MD09PXQ/dC50b1N0cmluZygpOlwiXCJ9fSx7fV0sMjkyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInZlY3Rvcml6ZS10ZXh0XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9aVtlXTthfHwoYT1pW2VdPXt9KTtpZih0IGluIGEpcmV0dXJuIGFbdF07dmFyIG89e3RleHRBbGlnbjpcImNlbnRlclwiLHRleHRCYXNlbGluZTpcIm1pZGRsZVwiLGxpbmVIZWlnaHQ6MSxmb250OmUsbGluZVNwYWNpbmc6MS4yNSxzdHlsZXRhZ3M6e2JyZWFrbGluZXM6ITAsYm9sZHM6ITAsaXRhbGljczohMCxzdWJzY3JpcHRzOiEwLHN1cGVyc2NyaXB0czohMH0sdHJpYW5nbGVzOiEwfSxzPW4odCxvKTtvLnRyaWFuZ2xlcz0hMTt2YXIgbCxjLHU9bih0LG8pO2lmKHImJjEhPT1yKXtmb3IobD0wO2w8cy5wb3NpdGlvbnMubGVuZ3RoOysrbClmb3IoYz0wO2M8cy5wb3NpdGlvbnNbbF0ubGVuZ3RoOysrYylzLnBvc2l0aW9uc1tsXVtjXS89cjtmb3IobD0wO2w8dS5wb3NpdGlvbnMubGVuZ3RoOysrbClmb3IoYz0wO2M8dS5wb3NpdGlvbnNbbF0ubGVuZ3RoOysrYyl1LnBvc2l0aW9uc1tsXVtjXS89cn12YXIgaD1bWzEvMCwxLzBdLFstMS8wLC0xLzBdXSxmPXUucG9zaXRpb25zLmxlbmd0aDtmb3IobD0wO2w8ZjsrK2wpe3ZhciBwPXUucG9zaXRpb25zW2xdO2ZvcihjPTA7YzwyOysrYyloWzBdW2NdPU1hdGgubWluKGhbMF1bY10scFtjXSksaFsxXVtjXT1NYXRoLm1heChoWzFdW2NdLHBbY10pfXJldHVybiBhW3RdPVtzLHUsaF19O3ZhciBpPXt9fSx7XCJ2ZWN0b3JpemUtdGV4dFwiOjUzNX1dLDI5MzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCJnbC1zaGFkZXJcIiksaT10KFwiZ2xzbGlmeVwiKSxhPWkoW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcXG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XFxuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcXG59XFxuXFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzQgY29sb3I7XFxuYXR0cmlidXRlIHZlYzIgZ2x5cGg7XFxuYXR0cmlidXRlIHZlYzQgaWQ7XFxuXFxudW5pZm9ybSB2ZWM0IGhpZ2hsaWdodElkO1xcbnVuaWZvcm0gZmxvYXQgaGlnaGxpZ2h0U2NhbGU7XFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xcblxcbnZhcnlpbmcgdmVjNCBpbnRlcnBDb2xvcjtcXG52YXJ5aW5nIHZlYzQgcGlja0lkO1xcbnZhcnlpbmcgdmVjMyBkYXRhQ29vcmRpbmF0ZTtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBwb3NpdGlvbikpIHtcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xcbiAgfSBlbHNlIHtcXG4gICAgZmxvYXQgc2NhbGUgPSAxLjA7XFxuICAgIGlmKGRpc3RhbmNlKGhpZ2hsaWdodElkLCBpZCkgPCAwLjAwMDEpIHtcXG4gICAgICBzY2FsZSA9IGhpZ2hsaWdodFNjYWxlO1xcbiAgICB9XFxuXFxuICAgIHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbiwgMSk7XFxuICAgIHZlYzQgdmlld1Bvc2l0aW9uID0gdmlldyAqIHdvcmxkUG9zaXRpb247XFxuICAgIHZpZXdQb3NpdGlvbiA9IHZpZXdQb3NpdGlvbiAvIHZpZXdQb3NpdGlvbi53O1xcbiAgICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiAodmlld1Bvc2l0aW9uICsgc2NhbGUgKiB2ZWM0KGdseXBoLngsIC1nbHlwaC55LCAwLCAwKSk7XFxuXFxuICAgIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uO1xcbiAgICBpbnRlcnBDb2xvciA9IGNvbG9yO1xcbiAgICBwaWNrSWQgPSBpZDtcXG4gICAgZGF0YUNvb3JkaW5hdGUgPSBwb3NpdGlvbjtcXG4gIH1cXG59XCJdKSxvPWkoW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcXG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XFxuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcXG59XFxuXFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzQgY29sb3I7XFxuYXR0cmlidXRlIHZlYzIgZ2x5cGg7XFxuYXR0cmlidXRlIHZlYzQgaWQ7XFxuXFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaXplO1xcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xcbnVuaWZvcm0gZmxvYXQgaGlnaGxpZ2h0U2NhbGUsIHBpeGVsUmF0aW87XFxudW5pZm9ybSB2ZWM0IGhpZ2hsaWdodElkO1xcblxcbnZhcnlpbmcgdmVjNCBpbnRlcnBDb2xvcjtcXG52YXJ5aW5nIHZlYzQgcGlja0lkO1xcbnZhcnlpbmcgdmVjMyBkYXRhQ29vcmRpbmF0ZTtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBwb3NpdGlvbikpIHtcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xcbiAgfSBlbHNlIHtcXG4gICAgZmxvYXQgc2NhbGUgPSBwaXhlbFJhdGlvO1xcbiAgICBpZihkaXN0YW5jZShoaWdobGlnaHRJZC5iZ3IsIGlkLmJncikgPCAwLjAwMSkge1xcbiAgICAgIHNjYWxlICo9IGhpZ2hsaWdodFNjYWxlO1xcbiAgICB9XFxuXFxuICAgIHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG4gICAgdmVjNCB2aWV3UG9zaXRpb24gPSB2aWV3ICogd29ybGRQb3NpdGlvbjtcXG4gICAgdmVjNCBjbGlwUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlld1Bvc2l0aW9uO1xcbiAgICBjbGlwUG9zaXRpb24gLz0gY2xpcFBvc2l0aW9uLnc7XFxuXFxuICAgIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uICsgdmVjNChzY3JlZW5TaXplICogc2NhbGUgKiB2ZWMyKGdseXBoLngsIC1nbHlwaC55KSwgMC4wLCAwLjApO1xcbiAgICBpbnRlcnBDb2xvciA9IGNvbG9yO1xcbiAgICBwaWNrSWQgPSBpZDtcXG4gICAgZGF0YUNvb3JkaW5hdGUgPSBwb3NpdGlvbjtcXG4gIH1cXG59XCJdKSxzPWkoW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcXG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XFxuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcXG59XFxuXFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzQgY29sb3I7XFxuYXR0cmlidXRlIHZlYzIgZ2x5cGg7XFxuYXR0cmlidXRlIHZlYzQgaWQ7XFxuXFxudW5pZm9ybSBmbG9hdCBoaWdobGlnaHRTY2FsZTtcXG51bmlmb3JtIHZlYzQgaGlnaGxpZ2h0SWQ7XFxudW5pZm9ybSB2ZWMzIGF4ZXNbMl07XFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaXplO1xcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xcbnVuaWZvcm0gZmxvYXQgc2NhbGUsIHBpeGVsUmF0aW87XFxuXFxudmFyeWluZyB2ZWM0IGludGVycENvbG9yO1xcbnZhcnlpbmcgdmVjNCBwaWNrSWQ7XFxudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHBvc2l0aW9uKSkge1xcblxcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XFxuICB9IGVsc2Uge1xcbiAgICBmbG9hdCBsc2NhbGUgPSBwaXhlbFJhdGlvICogc2NhbGU7XFxuICAgIGlmKGRpc3RhbmNlKGhpZ2hsaWdodElkLCBpZCkgPCAwLjAwMDEpIHtcXG4gICAgICBsc2NhbGUgKj0gaGlnaGxpZ2h0U2NhbGU7XFxuICAgIH1cXG5cXG4gICAgdmVjNCBjbGlwQ2VudGVyICAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMSk7XFxuICAgIHZlYzMgZGF0YVBvc2l0aW9uID0gcG9zaXRpb24gKyAwLjUqbHNjYWxlKihheGVzWzBdICogZ2x5cGgueCArIGF4ZXNbMV0gKiBnbHlwaC55KSAqIGNsaXBDZW50ZXIudyAqIHNjcmVlblNpemUueTtcXG4gICAgdmVjNCBjbGlwUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChkYXRhUG9zaXRpb24sIDEpO1xcblxcbiAgICBnbF9Qb3NpdGlvbiA9IGNsaXBQb3NpdGlvbjtcXG4gICAgaW50ZXJwQ29sb3IgPSBjb2xvcjtcXG4gICAgcGlja0lkID0gaWQ7XFxuICAgIGRhdGFDb29yZGluYXRlID0gZGF0YVBvc2l0aW9uO1xcbiAgfVxcbn1cXG5cIl0pLGw9aShbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcXG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xcbn1cXG5cXG51bmlmb3JtIHZlYzMgZnJhZ0NsaXBCb3VuZHNbMl07XFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xcblxcbnZhcnlpbmcgdmVjNCBpbnRlcnBDb2xvcjtcXG52YXJ5aW5nIHZlYzQgcGlja0lkO1xcbnZhcnlpbmcgdmVjMyBkYXRhQ29vcmRpbmF0ZTtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBpZiAoXFxuICAgIG91dE9mUmFuZ2UoZnJhZ0NsaXBCb3VuZHNbMF0sIGZyYWdDbGlwQm91bmRzWzFdLCBkYXRhQ29vcmRpbmF0ZSkgfHxcXG4gICAgaW50ZXJwQ29sb3IuYSAqIG9wYWNpdHkgPT0gMC5cXG4gICkgZGlzY2FyZDtcXG4gIGdsX0ZyYWdDb2xvciA9IGludGVycENvbG9yICogb3BhY2l0eTtcXG59XFxuXCJdKSxjPWkoW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcXG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XFxuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcXG59XFxuXFxudW5pZm9ybSB2ZWMzIGZyYWdDbGlwQm91bmRzWzJdO1xcbnVuaWZvcm0gZmxvYXQgcGlja0dyb3VwO1xcblxcbnZhcnlpbmcgdmVjNCBwaWNrSWQ7XFxudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmIChvdXRPZlJhbmdlKGZyYWdDbGlwQm91bmRzWzBdLCBmcmFnQ2xpcEJvdW5kc1sxXSwgZGF0YUNvb3JkaW5hdGUpKSBkaXNjYXJkO1xcblxcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwaWNrR3JvdXAsIHBpY2tJZC5iZ3IpO1xcbn1cIl0pLHU9W3tuYW1lOlwicG9zaXRpb25cIix0eXBlOlwidmVjM1wifSx7bmFtZTpcImNvbG9yXCIsdHlwZTpcInZlYzRcIn0se25hbWU6XCJnbHlwaFwiLHR5cGU6XCJ2ZWMyXCJ9LHtuYW1lOlwiaWRcIix0eXBlOlwidmVjNFwifV0saD17dmVydGV4OmEsZnJhZ21lbnQ6bCxhdHRyaWJ1dGVzOnV9LGY9e3ZlcnRleDpvLGZyYWdtZW50OmwsYXR0cmlidXRlczp1fSxwPXt2ZXJ0ZXg6cyxmcmFnbWVudDpsLGF0dHJpYnV0ZXM6dX0sZD17dmVydGV4OmEsZnJhZ21lbnQ6YyxhdHRyaWJ1dGVzOnV9LGc9e3ZlcnRleDpvLGZyYWdtZW50OmMsYXR0cmlidXRlczp1fSx2PXt2ZXJ0ZXg6cyxmcmFnbWVudDpjLGF0dHJpYnV0ZXM6dX07ZnVuY3Rpb24gbSh0LGUpe3ZhciByPW4odCxlKSxpPXIuYXR0cmlidXRlcztyZXR1cm4gaS5wb3NpdGlvbi5sb2NhdGlvbj0wLGkuY29sb3IubG9jYXRpb249MSxpLmdseXBoLmxvY2F0aW9uPTIsaS5pZC5sb2NhdGlvbj0zLHJ9ci5jcmVhdGVQZXJzcGVjdGl2ZT1mdW5jdGlvbih0KXtyZXR1cm4gbSh0LGgpfSxyLmNyZWF0ZU9ydGhvPWZ1bmN0aW9uKHQpe3JldHVybiBtKHQsZil9LHIuY3JlYXRlUHJvamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gbSh0LHApfSxyLmNyZWF0ZVBpY2tQZXJzcGVjdGl2ZT1mdW5jdGlvbih0KXtyZXR1cm4gbSh0LGQpfSxyLmNyZWF0ZVBpY2tPcnRobz1mdW5jdGlvbih0KXtyZXR1cm4gbSh0LGcpfSxyLmNyZWF0ZVBpY2tQcm9qZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBtKHQsdil9fSx7XCJnbC1zaGFkZXJcIjoyOTgsZ2xzbGlmeTo0MDJ9XSwyOTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiaXMtc3RyaW5nLWJsYW5rXCIpLGk9dChcImdsLWJ1ZmZlclwiKSxhPXQoXCJnbC12YW9cIiksbz10KFwidHlwZWRhcnJheS1wb29sXCIpLHM9dChcImdsLW1hdDQvbXVsdGlwbHlcIiksbD10KFwiLi9saWIvc2hhZGVyc1wiKSxjPXQoXCIuL2xpYi9nbHlwaHNcIiksdT10KFwiLi9saWIvZ2V0LXNpbXBsZS1zdHJpbmdcIiksaD1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24gZih0LGUpe3ZhciByPXRbMF0sbj10WzFdLGk9dFsyXSxhPXRbM107cmV0dXJuIHRbMF09ZVswXSpyK2VbNF0qbitlWzhdKmkrZVsxMl0qYSx0WzFdPWVbMV0qcitlWzVdKm4rZVs5XSppK2VbMTNdKmEsdFsyXT1lWzJdKnIrZVs2XSpuK2VbMTBdKmkrZVsxNF0qYSx0WzNdPWVbM10qcitlWzddKm4rZVsxMV0qaStlWzE1XSphLHR9ZnVuY3Rpb24gcCh0LGUscixuKXtyZXR1cm4gZihuLG4pLGYobixuKSxmKG4sbil9ZnVuY3Rpb24gZCh0LGUpe3RoaXMuaW5kZXg9dCx0aGlzLmRhdGFDb29yZGluYXRlPXRoaXMucG9zaXRpb249ZX1mdW5jdGlvbiBnKHQpe3JldHVybiEwPT09dD8xOnQ+MT8xOnR9ZnVuY3Rpb24gdih0LGUscixuLGksYSxvLHMsbCxjLHUsaCl7dGhpcy5nbD10LHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuc2hhZGVyPWUsdGhpcy5vcnRob1NoYWRlcj1yLHRoaXMucHJvamVjdFNoYWRlcj1uLHRoaXMucG9pbnRCdWZmZXI9aSx0aGlzLmNvbG9yQnVmZmVyPWEsdGhpcy5nbHlwaEJ1ZmZlcj1vLHRoaXMuaWRCdWZmZXI9cyx0aGlzLnZhbz1sLHRoaXMudmVydGV4Q291bnQ9MCx0aGlzLmxpbmVWZXJ0ZXhDb3VudD0wLHRoaXMub3BhY2l0eT0xLHRoaXMuaGFzQWxwaGE9ITEsdGhpcy5saW5lV2lkdGg9MCx0aGlzLnByb2plY3RTY2FsZT1bMi8zLDIvMywyLzNdLHRoaXMucHJvamVjdE9wYWNpdHk9WzEsMSwxXSx0aGlzLnByb2plY3RIYXNBbHBoYT0hMSx0aGlzLnBpY2tJZD0wLHRoaXMucGlja1BlcnNwZWN0aXZlU2hhZGVyPWMsdGhpcy5waWNrT3J0aG9TaGFkZXI9dSx0aGlzLnBpY2tQcm9qZWN0U2hhZGVyPWgsdGhpcy5wb2ludHM9W10sdGhpcy5fc2VsZWN0UmVzdWx0PW5ldyBkKDAsWzAsMCwwXSksdGhpcy51c2VPcnRobz0hMCx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmF4ZXNQcm9qZWN0PVshMCwhMCwhMF0sdGhpcy5heGVzQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMuaGlnaGxpZ2h0SWQ9WzEsMSwxLDFdLHRoaXMuaGlnaGxpZ2h0U2NhbGU9Mix0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5kaXJ0eT0hMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPWwuY3JlYXRlUGVyc3BlY3RpdmUoZSksbj1sLmNyZWF0ZU9ydGhvKGUpLG89bC5jcmVhdGVQcm9qZWN0KGUpLHM9bC5jcmVhdGVQaWNrUGVyc3BlY3RpdmUoZSksYz1sLmNyZWF0ZVBpY2tPcnRobyhlKSx1PWwuY3JlYXRlUGlja1Byb2plY3QoZSksaD1pKGUpLGY9aShlKSxwPWkoZSksZD1pKGUpLGc9YShlLFt7YnVmZmVyOmgsc2l6ZTozLHR5cGU6ZS5GTE9BVH0se2J1ZmZlcjpmLHNpemU6NCx0eXBlOmUuRkxPQVR9LHtidWZmZXI6cCxzaXplOjIsdHlwZTplLkZMT0FUfSx7YnVmZmVyOmQsc2l6ZTo0LHR5cGU6ZS5VTlNJR05FRF9CWVRFLG5vcm1hbGl6ZWQ6ITB9XSksbT1uZXcgdihlLHIsbixvLGgsZixwLGQsZyxzLGMsdSk7cmV0dXJuIG0udXBkYXRlKHQpLG19O3ZhciBtPXYucHJvdG90eXBlO20ucGlja1Nsb3RzPTEsbS5zZXRQaWNrQmFzZT1mdW5jdGlvbih0KXt0aGlzLnBpY2tJZD10fSxtLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtpZih0aGlzLmhhc0FscGhhKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8MzsrK3QpaWYodGhpcy5heGVzUHJvamVjdFt0XSYmdGhpcy5wcm9qZWN0SGFzQWxwaGEpcmV0dXJuITA7cmV0dXJuITF9LG0uaXNPcGFxdWU9ZnVuY3Rpb24oKXtpZighdGhpcy5oYXNBbHBoYSlyZXR1cm4hMDtmb3IodmFyIHQ9MDt0PDM7Kyt0KWlmKHRoaXMuYXhlc1Byb2plY3RbdF0mJiF0aGlzLnByb2plY3RIYXNBbHBoYSlyZXR1cm4hMDtyZXR1cm4hMX07dmFyIHk9WzAsMF0seD1bMCwwLDBdLGI9WzAsMCwwXSxfPVswLDAsMCwxXSx3PVswLDAsMCwxXSxrPWguc2xpY2UoKSxBPVswLDAsMF0sVD1bWzAsMCwwXSxbMCwwLDBdXTtmdW5jdGlvbiBNKHQpe3JldHVybiB0WzBdPXRbMV09dFsyXT0wLHR9ZnVuY3Rpb24gUyh0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPTEsdH1mdW5jdGlvbiBFKHQsZSxyLG4pe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0W3JdPW4sdH1mdW5jdGlvbiBDKHQsZSxyLG4pe3ZhciBpLGE9ZS5heGVzUHJvamVjdCxvPWUuZ2wsbD10LnVuaWZvcm1zLGM9ci5tb2RlbHx8aCx1PXIudmlld3x8aCxmPXIucHJvamVjdGlvbnx8aCxkPWUuYXhlc0JvdW5kcyxnPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1ULHI9MDtyPDI7KytyKWZvcih2YXIgbj0wO248MzsrK24pZVtyXVtuXT1NYXRoLm1heChNYXRoLm1pbih0W3JdW25dLDFlOCksLTFlOCk7cmV0dXJuIGV9KGUuY2xpcEJvdW5kcyk7aT1lLmF4ZXMmJmUuYXhlcy5sYXN0Q3ViZVByb3BzP2UuYXhlcy5sYXN0Q3ViZVByb3BzLmF4aXM6WzEsMSwxXSx5WzBdPTIvby5kcmF3aW5nQnVmZmVyV2lkdGgseVsxXT0yL28uZHJhd2luZ0J1ZmZlckhlaWdodCx0LmJpbmQoKSxsLnZpZXc9dSxsLnByb2plY3Rpb249ZixsLnNjcmVlblNpemU9eSxsLmhpZ2hsaWdodElkPWUuaGlnaGxpZ2h0SWQsbC5oaWdobGlnaHRTY2FsZT1lLmhpZ2hsaWdodFNjYWxlLGwuY2xpcEJvdW5kcz1nLGwucGlja0dyb3VwPWUucGlja0lkLzI1NSxsLnBpeGVsUmF0aW89bjtmb3IodmFyIHY9MDt2PDM7Kyt2KWlmKGFbdl0pe2wuc2NhbGU9ZS5wcm9qZWN0U2NhbGVbdl0sbC5vcGFjaXR5PWUucHJvamVjdE9wYWNpdHlbdl07Zm9yKHZhciBtPWssQz0wO0M8MTY7KytDKW1bQ109MDtmb3IoQz0wO0M8NDsrK0MpbVs1KkNdPTE7bVs1KnZdPTAsaVt2XTwwP21bMTIrdl09ZFswXVt2XTptWzEyK3ZdPWRbMV1bdl0scyhtLGMsbSksbC5tb2RlbD1tO3ZhciBMPSh2KzEpJTMsej0odisyKSUzLE89TSh4KSxJPU0oYik7T1tMXT0xLElbel09MTt2YXIgRD1wKDAsMCwwLFMoXyxPKSksUD1wKDAsMCwwLFModyxJKSk7aWYoTWF0aC5hYnMoRFsxXSk+TWF0aC5hYnMoUFsxXSkpe3ZhciBSPUQ7RD1QLFA9UixSPU8sTz1JLEk9Ujt2YXIgRj1MO0w9eix6PUZ9RFswXTwwJiYoT1tMXT0tMSksUFsxXT4wJiYoSVt6XT0tMSk7dmFyIEI9MCxOPTA7Zm9yKEM9MDtDPDQ7KytDKUIrPU1hdGgucG93KGNbNCpMK0NdLDIpLE4rPU1hdGgucG93KGNbNCp6K0NdLDIpO09bTF0vPU1hdGguc3FydChCKSxJW3pdLz1NYXRoLnNxcnQoTiksbC5heGVzWzBdPU8sbC5heGVzWzFdPUksbC5mcmFnQ2xpcEJvdW5kc1swXT1FKEEsZ1swXSx2LC0xZTgpLGwuZnJhZ0NsaXBCb3VuZHNbMV09RShBLGdbMV0sdiwxZTgpLGUudmFvLmJpbmQoKSxlLnZhby5kcmF3KG8uVFJJQU5HTEVTLGUudmVydGV4Q291bnQpLGUubGluZVdpZHRoPjAmJihvLmxpbmVXaWR0aChlLmxpbmVXaWR0aCpuKSxlLnZhby5kcmF3KG8uTElORVMsZS5saW5lVmVydGV4Q291bnQsZS52ZXJ0ZXhDb3VudCkpLGUudmFvLnVuYmluZCgpfX12YXIgTD1bWy0xZTgsLTFlOCwtMWU4XSxbMWU4LDFlOCwxZThdXTtmdW5jdGlvbiB6KHQsZSxyLG4saSxhLG8pe3ZhciBzPXIuZ2w7aWYoKGE9PT1yLnByb2plY3RIYXNBbHBoYXx8bykmJkMoZSxyLG4saSksYT09PXIuaGFzQWxwaGF8fG8pe3QuYmluZCgpO3ZhciBsPXQudW5pZm9ybXM7bC5tb2RlbD1uLm1vZGVsfHxoLGwudmlldz1uLnZpZXd8fGgsbC5wcm9qZWN0aW9uPW4ucHJvamVjdGlvbnx8aCx5WzBdPTIvcy5kcmF3aW5nQnVmZmVyV2lkdGgseVsxXT0yL3MuZHJhd2luZ0J1ZmZlckhlaWdodCxsLnNjcmVlblNpemU9eSxsLmhpZ2hsaWdodElkPXIuaGlnaGxpZ2h0SWQsbC5oaWdobGlnaHRTY2FsZT1yLmhpZ2hsaWdodFNjYWxlLGwuZnJhZ0NsaXBCb3VuZHM9TCxsLmNsaXBCb3VuZHM9ci5heGVzLmJvdW5kcyxsLm9wYWNpdHk9ci5vcGFjaXR5LGwucGlja0dyb3VwPXIucGlja0lkLzI1NSxsLnBpeGVsUmF0aW89aSxyLnZhby5iaW5kKCksci52YW8uZHJhdyhzLlRSSUFOR0xFUyxyLnZlcnRleENvdW50KSxyLmxpbmVXaWR0aD4wJiYocy5saW5lV2lkdGgoci5saW5lV2lkdGgqaSksci52YW8uZHJhdyhzLkxJTkVTLHIubGluZVZlcnRleENvdW50LHIudmVydGV4Q291bnQpKSxyLnZhby51bmJpbmQoKX19ZnVuY3Rpb24gTyh0LGUscixpKXt2YXIgYTthPUFycmF5LmlzQXJyYXkodCk/ZTx0Lmxlbmd0aD90W2VdOnZvaWQgMDp0LGE9dShhKTt2YXIgbz0hMDtuKGEpJiYoYT1cIlxcdTI1YmNcIixvPSExKTt2YXIgcz1jKGEscixpKTtyZXR1cm57bWVzaDpzWzBdLGxpbmVzOnNbMV0sYm91bmRzOnNbMl0sdmlzaWJsZTpvfX1tLmRyYXc9ZnVuY3Rpb24odCl7eih0aGlzLnVzZU9ydGhvP3RoaXMub3J0aG9TaGFkZXI6dGhpcy5zaGFkZXIsdGhpcy5wcm9qZWN0U2hhZGVyLHRoaXMsdCx0aGlzLnBpeGVsUmF0aW8sITEsITEpfSxtLmRyYXdUcmFuc3BhcmVudD1mdW5jdGlvbih0KXt6KHRoaXMudXNlT3J0aG8/dGhpcy5vcnRob1NoYWRlcjp0aGlzLnNoYWRlcix0aGlzLnByb2plY3RTaGFkZXIsdGhpcyx0LHRoaXMucGl4ZWxSYXRpbywhMCwhMSl9LG0uZHJhd1BpY2s9ZnVuY3Rpb24odCl7eih0aGlzLnVzZU9ydGhvP3RoaXMucGlja09ydGhvU2hhZGVyOnRoaXMucGlja1BlcnNwZWN0aXZlU2hhZGVyLHRoaXMucGlja1Byb2plY3RTaGFkZXIsdGhpcyx0LDEsITAsITApfSxtLnBpY2s9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7aWYodC5pZCE9PXRoaXMucGlja0lkKXJldHVybiBudWxsO3ZhciBlPXQudmFsdWVbMl0rKHQudmFsdWVbMV08PDgpKyh0LnZhbHVlWzBdPDwxNik7aWYoZT49dGhpcy5wb2ludENvdW50fHxlPDApcmV0dXJuIG51bGw7dmFyIHI9dGhpcy5wb2ludHNbZV0sbj10aGlzLl9zZWxlY3RSZXN1bHQ7bi5pbmRleD1lO2Zvcih2YXIgaT0wO2k8MzsrK2kpbi5wb3NpdGlvbltpXT1uLmRhdGFDb29yZGluYXRlW2ldPXJbaV07cmV0dXJuIG59LG0uaGlnaGxpZ2h0PWZ1bmN0aW9uKHQpe2lmKHQpe3ZhciBlPXQuaW5kZXgscj0yNTUmZSxuPWU+PjgmMjU1LGk9ZT4+MTYmMjU1O3RoaXMuaGlnaGxpZ2h0SWQ9W3IvMjU1LG4vMjU1LGkvMjU1LDBdfWVsc2UgdGhpcy5oaWdobGlnaHRJZD1bMSwxLDEsMV19LG0udXBkYXRlPWZ1bmN0aW9uKHQpe2lmKFwicGVyc3BlY3RpdmVcImluKHQ9dHx8e30pJiYodGhpcy51c2VPcnRobz0hdC5wZXJzcGVjdGl2ZSksXCJvcnRob2dyYXBoaWNcImluIHQmJih0aGlzLnVzZU9ydGhvPSEhdC5vcnRob2dyYXBoaWMpLFwibGluZVdpZHRoXCJpbiB0JiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgpLFwicHJvamVjdFwiaW4gdClpZihBcnJheS5pc0FycmF5KHQucHJvamVjdCkpdGhpcy5heGVzUHJvamVjdD10LnByb2plY3Q7ZWxzZXt2YXIgZT0hIXQucHJvamVjdDt0aGlzLmF4ZXNQcm9qZWN0PVtlLGUsZV19aWYoXCJwcm9qZWN0U2NhbGVcImluIHQpaWYoQXJyYXkuaXNBcnJheSh0LnByb2plY3RTY2FsZSkpdGhpcy5wcm9qZWN0U2NhbGU9dC5wcm9qZWN0U2NhbGUuc2xpY2UoKTtlbHNle3ZhciByPSt0LnByb2plY3RTY2FsZTt0aGlzLnByb2plY3RTY2FsZT1bcixyLHJdfWlmKHRoaXMucHJvamVjdEhhc0FscGhhPSExLFwicHJvamVjdE9wYWNpdHlcImluIHQpe2lmKEFycmF5LmlzQXJyYXkodC5wcm9qZWN0T3BhY2l0eSkpdGhpcy5wcm9qZWN0T3BhY2l0eT10LnByb2plY3RPcGFjaXR5LnNsaWNlKCk7ZWxzZXtyPSt0LnByb2plY3RPcGFjaXR5O3RoaXMucHJvamVjdE9wYWNpdHk9W3IscixyXX1mb3IodmFyIG49MDtuPDM7KytuKXRoaXMucHJvamVjdE9wYWNpdHlbbl09Zyh0aGlzLnByb2plY3RPcGFjaXR5W25dKSx0aGlzLnByb2plY3RPcGFjaXR5W25dPDEmJih0aGlzLnByb2plY3RIYXNBbHBoYT0hMCl9dGhpcy5oYXNBbHBoYT0hMSxcIm9wYWNpdHlcImluIHQmJih0aGlzLm9wYWNpdHk9Zyh0Lm9wYWNpdHkpLHRoaXMub3BhY2l0eTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpLHRoaXMuZGlydHk9ITA7dmFyIGksYSxzPXQucG9zaXRpb24sbD10LmZvbnR8fFwibm9ybWFsXCIsYz10LmFsaWdubWVudHx8WzAsMF07aWYoMj09PWMubGVuZ3RoKWk9Y1swXSxhPWNbMV07ZWxzZXtpPVtdLGE9W107Zm9yKG49MDtuPGMubGVuZ3RoOysrbilpW25dPWNbbl1bMF0sYVtuXT1jW25dWzFdfXZhciB1PVsxLzAsMS8wLDEvMF0saD1bLTEvMCwtMS8wLC0xLzBdLGY9dC5nbHlwaCxwPXQuY29sb3IsZD10LnNpemUsdj10LmFuZ2xlLG09dC5saW5lQ29sb3IseT0tMSx4PTAsYj0wLF89MDtpZihzLmxlbmd0aCl7Xz1zLmxlbmd0aDt0OmZvcihuPTA7bjxfOysrbil7Zm9yKHZhciB3PXNbbl0saz0wO2s8MzsrK2spaWYoaXNOYU4od1trXSl8fCFpc0Zpbml0ZSh3W2tdKSljb250aW51ZSB0O3ZhciBBPShOPU8oZixuLGwsdGhpcy5waXhlbFJhdGlvKSkubWVzaCxUPU4ubGluZXMsTT1OLmJvdW5kczt4Kz0zKkEuY2VsbHMubGVuZ3RoLGIrPTIqVC5lZGdlcy5sZW5ndGh9fXZhciBTPXgrYixFPW8ubWFsbG9jRmxvYXQoMypTKSxDPW8ubWFsbG9jRmxvYXQoNCpTKSxMPW8ubWFsbG9jRmxvYXQoMipTKSx6PW8ubWFsbG9jVWludDMyKFMpO2lmKFM+MCl7dmFyIEk9MCxEPXgsUD1bMCwwLDAsMV0sUj1bMCwwLDAsMV0sRj1BcnJheS5pc0FycmF5KHApJiZBcnJheS5pc0FycmF5KHBbMF0pLEI9QXJyYXkuaXNBcnJheShtKSYmQXJyYXkuaXNBcnJheShtWzBdKTt0OmZvcihuPTA7bjxfOysrbil7eSs9MTtmb3Iodz1zW25dLGs9MDtrPDM7KytrKXtpZihpc05hTih3W2tdKXx8IWlzRmluaXRlKHdba10pKWNvbnRpbnVlIHQ7aFtrXT1NYXRoLm1heChoW2tdLHdba10pLHVba109TWF0aC5taW4odVtrXSx3W2tdKX1BPShOPU8oZixuLGwsdGhpcy5waXhlbFJhdGlvKSkubWVzaCxUPU4ubGluZXMsTT1OLmJvdW5kczt2YXIgTixqPU4udmlzaWJsZTtpZihqKWlmKEFycmF5LmlzQXJyYXkocCkpe2lmKDM9PT0oVj1GP248cC5sZW5ndGg/cFtuXTpbMCwwLDAsMF06cCkubGVuZ3RoKXtmb3Ioaz0wO2s8MzsrK2spUFtrXT1WW2tdO1BbM109MX1lbHNlIGlmKDQ9PT1WLmxlbmd0aCl7Zm9yKGs9MDtrPDQ7KytrKVBba109VltrXTshdGhpcy5oYXNBbHBoYSYmVlszXTwxJiYodGhpcy5oYXNBbHBoYT0hMCl9fWVsc2UgUFswXT1QWzFdPVBbMl09MCxQWzNdPTE7ZWxzZSBQPVsxLDEsMSwwXTtpZihqKWlmKEFycmF5LmlzQXJyYXkobSkpe3ZhciBWO2lmKDM9PT0oVj1CP248bS5sZW5ndGg/bVtuXTpbMCwwLDAsMF06bSkubGVuZ3RoKXtmb3Ioaz0wO2s8MzsrK2spUltrXT1WW2tdO1Jba109MX1lbHNlIGlmKDQ9PT1WLmxlbmd0aCl7Zm9yKGs9MDtrPDQ7KytrKVJba109VltrXTshdGhpcy5oYXNBbHBoYSYmVlszXTwxJiYodGhpcy5oYXNBbHBoYT0hMCl9fWVsc2UgUlswXT1SWzFdPVJbMl09MCxSWzNdPTE7ZWxzZSBSPVsxLDEsMSwwXTt2YXIgVT0uNTtqP0FycmF5LmlzQXJyYXkoZCk/VT1uPGQubGVuZ3RoPytkW25dOjEyOmQ/VT0rZDp0aGlzLnVzZU9ydGhvJiYoVT0xMik6VT0wO3ZhciBxPTA7QXJyYXkuaXNBcnJheSh2KT9xPW48di5sZW5ndGg/K3Zbbl06MDp2JiYocT0rdik7dmFyIEg9TWF0aC5jb3MocSksRz1NYXRoLnNpbihxKTtmb3Iodz1zW25dLGs9MDtrPDM7KytrKWhba109TWF0aC5tYXgoaFtrXSx3W2tdKSx1W2tdPU1hdGgubWluKHVba10sd1trXSk7dmFyIFk9aSxXPWE7WT0wO0FycmF5LmlzQXJyYXkoaSk/WT1uPGkubGVuZ3RoP2lbbl06MDppJiYoWT1pKTtXPTA7QXJyYXkuaXNBcnJheShhKT9XPW48YS5sZW5ndGg/YVtuXTowOmEmJihXPWEpO3ZhciBYPVtZKj1ZPjA/MS1NWzBdWzBdOlk8MD8xK01bMV1bMF06MSxXKj1XPjA/MS1NWzBdWzFdOlc8MD8xK01bMV1bMV06MV0sWj1BLmNlbGxzfHxbXSwkPUEucG9zaXRpb25zfHxbXTtmb3Ioaz0wO2s8Wi5sZW5ndGg7KytrKWZvcih2YXIgSj1aW2tdLEs9MDtLPDM7KytLKXtmb3IodmFyIFE9MDtRPDM7KytRKUVbMypJK1FdPXdbUV07Zm9yKFE9MDtRPDQ7KytRKUNbNCpJK1FdPVBbUV07eltJXT15O3ZhciB0dD0kW0pbS11dO0xbMipJXT1VKihIKnR0WzBdLUcqdHRbMV0rWFswXSksTFsyKkkrMV09VSooRyp0dFswXStIKnR0WzFdK1hbMV0pLEkrPTF9Zm9yKFo9VC5lZGdlcywkPVQucG9zaXRpb25zLGs9MDtrPFoubGVuZ3RoOysraylmb3IoSj1aW2tdLEs9MDtLPDI7KytLKXtmb3IoUT0wO1E8MzsrK1EpRVszKkQrUV09d1tRXTtmb3IoUT0wO1E8NDsrK1EpQ1s0KkQrUV09UltRXTt6W0RdPXk7dHQ9JFtKW0tdXTtMWzIqRF09VSooSCp0dFswXS1HKnR0WzFdK1hbMF0pLExbMipEKzFdPVUqKEcqdHRbMF0rSCp0dFsxXStYWzFdKSxEKz0xfX19dGhpcy5ib3VuZHM9W3UsaF0sdGhpcy5wb2ludHM9cyx0aGlzLnBvaW50Q291bnQ9cy5sZW5ndGgsdGhpcy52ZXJ0ZXhDb3VudD14LHRoaXMubGluZVZlcnRleENvdW50PWIsdGhpcy5wb2ludEJ1ZmZlci51cGRhdGUoRSksdGhpcy5jb2xvckJ1ZmZlci51cGRhdGUoQyksdGhpcy5nbHlwaEJ1ZmZlci51cGRhdGUoTCksdGhpcy5pZEJ1ZmZlci51cGRhdGUoeiksby5mcmVlKEUpLG8uZnJlZShDKSxvLmZyZWUoTCksby5mcmVlKHopfSxtLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5vcnRob1NoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrUGVyc3BlY3RpdmVTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja09ydGhvU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnZhby5kaXNwb3NlKCksdGhpcy5wb2ludEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5jb2xvckJ1ZmZlci5kaXNwb3NlKCksdGhpcy5nbHlwaEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5pZEJ1ZmZlci5kaXNwb3NlKCl9fSx7XCIuL2xpYi9nZXQtc2ltcGxlLXN0cmluZ1wiOjI5MSxcIi4vbGliL2dseXBoc1wiOjI5MixcIi4vbGliL3NoYWRlcnNcIjoyOTMsXCJnbC1idWZmZXJcIjoyMzgsXCJnbC1tYXQ0L211bHRpcGx5XCI6MjY0LFwiZ2wtdmFvXCI6MzIwLFwiaXMtc3RyaW5nLWJsYW5rXCI6NDE2LFwidHlwZWRhcnJheS1wb29sXCI6NTMwfV0sMjk1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsc2xpZnlcIik7ci5ib3hWZXJ0ZXg9bihbXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMyIHZlcnRleDtcXG5cXG51bmlmb3JtIHZlYzIgY29ybmVyQSwgY29ybmVyQjtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBnbF9Qb3NpdGlvbiA9IHZlYzQobWl4KGNvcm5lckEsIGNvcm5lckIsIHZlcnRleCksIDAsIDEpO1xcbn1cXG5cIl0pLHIuYm94RnJhZ21lbnQ9bihbXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnVuaWZvcm0gdmVjNCBjb2xvcjtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCJdKX0se2dsc2xpZnk6NDAyfV0sMjk2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsLXNoYWRlclwiKSxpPXQoXCJnbC1idWZmZXJcIiksYT10KFwiLi9saWIvc2hhZGVyc1wiKTtmdW5jdGlvbiBvKHQsZSxyKXt0aGlzLnBsb3Q9dCx0aGlzLmJveEJ1ZmZlcj1lLHRoaXMuYm94U2hhZGVyPXIsdGhpcy5lbmFibGVkPSEwLHRoaXMuc2VsZWN0Qm94PVsxLzAsMS8wLC0xLzAsLTEvMF0sdGhpcy5ib3JkZXJDb2xvcj1bMCwwLDAsMV0sdGhpcy5pbm5lckZpbGw9ITEsdGhpcy5pbm5lckNvbG9yPVswLDAsMCwuMjVdLHRoaXMub3V0ZXJGaWxsPSEwLHRoaXMub3V0ZXJDb2xvcj1bMCwwLDAsLjVdLHRoaXMuYm9yZGVyV2lkdGg9MTB9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbCxzPWkocixbMCwwLDAsMSwxLDAsMSwxXSksbD1uKHIsYS5ib3hWZXJ0ZXgsYS5ib3hGcmFnbWVudCksYz1uZXcgbyh0LHMsbCk7cmV0dXJuIGMudXBkYXRlKGUpLHQuYWRkT3ZlcmxheShjKSxjfTt2YXIgcz1vLnByb3RvdHlwZTtzLmRyYXc9ZnVuY3Rpb24oKXtpZih0aGlzLmVuYWJsZWQpe3ZhciB0PXRoaXMucGxvdCxlPXRoaXMuc2VsZWN0Qm94LHI9dGhpcy5ib3JkZXJXaWR0aCxuPSh0aGlzLmlubmVyRmlsbCx0aGlzLmlubmVyQ29sb3IpLGk9KHRoaXMub3V0ZXJGaWxsLHRoaXMub3V0ZXJDb2xvciksYT10aGlzLmJvcmRlckNvbG9yLG89dC5ib3gscz10LnNjcmVlbkJveCxsPXQuZGF0YUJveCxjPXQudmlld0JveCx1PXQucGl4ZWxSYXRpbyxoPShlWzBdLWxbMF0pKihjWzJdLWNbMF0pLyhsWzJdLWxbMF0pK2NbMF0sZj0oZVsxXS1sWzFdKSooY1szXS1jWzFdKS8obFszXS1sWzFdKStjWzFdLHA9KGVbMl0tbFswXSkqKGNbMl0tY1swXSkvKGxbMl0tbFswXSkrY1swXSxkPShlWzNdLWxbMV0pKihjWzNdLWNbMV0pLyhsWzNdLWxbMV0pK2NbMV07aWYoaD1NYXRoLm1heChoLGNbMF0pLGY9TWF0aC5tYXgoZixjWzFdKSxwPU1hdGgubWluKHAsY1syXSksZD1NYXRoLm1pbihkLGNbM10pLCEocDxofHxkPGYpKXtvLmJpbmQoKTt2YXIgZz1zWzJdLXNbMF0sdj1zWzNdLXNbMV07aWYodGhpcy5vdXRlckZpbGwmJihvLmRyYXdCb3goMCwwLGcsZixpKSxvLmRyYXdCb3goMCxmLGgsZCxpKSxvLmRyYXdCb3goMCxkLGcsdixpKSxvLmRyYXdCb3gocCxmLGcsZCxpKSksdGhpcy5pbm5lckZpbGwmJm8uZHJhd0JveChoLGYscCxkLG4pLHI+MCl7dmFyIG09cip1O28uZHJhd0JveChoLW0sZi1tLHArbSxmK20sYSksby5kcmF3Qm94KGgtbSxkLW0scCttLGQrbSxhKSxvLmRyYXdCb3goaC1tLGYtbSxoK20sZCttLGEpLG8uZHJhd0JveChwLW0sZi1tLHArbSxkK20sYSl9fX19LHMudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e30sdGhpcy5pbm5lckZpbGw9ISF0LmlubmVyRmlsbCx0aGlzLm91dGVyRmlsbD0hIXQub3V0ZXJGaWxsLHRoaXMuaW5uZXJDb2xvcj0odC5pbm5lckNvbG9yfHxbMCwwLDAsLjVdKS5zbGljZSgpLHRoaXMub3V0ZXJDb2xvcj0odC5vdXRlckNvbG9yfHxbMCwwLDAsLjVdKS5zbGljZSgpLHRoaXMuYm9yZGVyQ29sb3I9KHQuYm9yZGVyQ29sb3J8fFswLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmJvcmRlcldpZHRoPXQuYm9yZGVyV2lkdGh8fDAsdGhpcy5zZWxlY3RCb3g9KHQuc2VsZWN0Qm94fHx0aGlzLnNlbGVjdEJveCkuc2xpY2UoKX0scy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5ib3hCdWZmZXIuZGlzcG9zZSgpLHRoaXMuYm94U2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBsb3QucmVtb3ZlT3ZlcmxheSh0aGlzKX19LHtcIi4vbGliL3NoYWRlcnNcIjoyOTUsXCJnbC1idWZmZXJcIjoyMzgsXCJnbC1zaGFkZXJcIjoyOTh9XSwyOTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKHQsZSksYT1pLm1hbGxvY1VpbnQ4KGVbMF0qZVsxXSo0KTtyZXR1cm4gbmV3IGModCxyLGEpfTt2YXIgbj10KFwiZ2wtZmJvXCIpLGk9dChcInR5cGVkYXJyYXktcG9vbFwiKSxhPXQoXCJuZGFycmF5XCIpLG89dChcImJpdC10d2lkZGxlXCIpLm5leHRQb3cyLHM9dChcImN3aXNlL2xpYi93cmFwcGVyXCIpKHthcmdzOltcImFycmF5XCIse29mZnNldDpbMCwwLDFdLGFycmF5OjB9LHtvZmZzZXQ6WzAsMCwyXSxhcnJheTowfSx7b2Zmc2V0OlswLDAsM10sYXJyYXk6MH0sXCJzY2FsYXJcIixcInNjYWxhclwiLFwiaW5kZXhcIl0scHJlOntib2R5Olwie3RoaXNfY2xvc2VzdEQyPTFlOCx0aGlzX2Nsb3Nlc3RYPS0xLHRoaXNfY2xvc2VzdFk9LTF9XCIsYXJnczpbXSx0aGlzVmFyczpbXCJ0aGlzX2Nsb3Nlc3REMlwiLFwidGhpc19jbG9zZXN0WFwiLFwidGhpc19jbG9zZXN0WVwiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6XCJ7aWYoX2lubGluZV8xNl9hcmcwXzwyNTV8fF9pbmxpbmVfMTZfYXJnMV88MjU1fHxfaW5saW5lXzE2X2FyZzJfPDI1NXx8X2lubGluZV8xNl9hcmczXzwyNTUpe3ZhciBfaW5saW5lXzE2X2w9X2lubGluZV8xNl9hcmc0Xy1faW5saW5lXzE2X2FyZzZfWzBdLF9pbmxpbmVfMTZfYT1faW5saW5lXzE2X2FyZzVfLV9pbmxpbmVfMTZfYXJnNl9bMV0sX2lubGluZV8xNl9mPV9pbmxpbmVfMTZfbCpfaW5saW5lXzE2X2wrX2lubGluZV8xNl9hKl9pbmxpbmVfMTZfYTtfaW5saW5lXzE2X2Y8dGhpc19jbG9zZXN0RDImJih0aGlzX2Nsb3Nlc3REMj1faW5saW5lXzE2X2YsdGhpc19jbG9zZXN0WD1faW5saW5lXzE2X2FyZzZfWzBdLHRoaXNfY2xvc2VzdFk9X2lubGluZV8xNl9hcmc2X1sxXSl9fVwiLGFyZ3M6W3tuYW1lOlwiX2lubGluZV8xNl9hcmcwX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzE2X2FyZzFfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfMTZfYXJnMl9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xNl9hcmczX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzE2X2FyZzRfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfMTZfYXJnNV9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xNl9hcmc2X1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6NH1dLHRoaXNWYXJzOltcInRoaXNfY2xvc2VzdEQyXCIsXCJ0aGlzX2Nsb3Nlc3RYXCIsXCJ0aGlzX2Nsb3Nlc3RZXCJdLGxvY2FsVmFyczpbXCJfaW5saW5lXzE2X2FcIixcIl9pbmxpbmVfMTZfZlwiLFwiX2lubGluZV8xNl9sXCJdfSxwb3N0Ontib2R5Olwie3JldHVyblt0aGlzX2Nsb3Nlc3RYLHRoaXNfY2xvc2VzdFksdGhpc19jbG9zZXN0RDJdfVwiLGFyZ3M6W10sdGhpc1ZhcnM6W1widGhpc19jbG9zZXN0RDJcIixcInRoaXNfY2xvc2VzdFhcIixcInRoaXNfY2xvc2VzdFlcIl0sbG9jYWxWYXJzOltdfSxkZWJ1ZzohMSxmdW5jTmFtZTpcImN3aXNlXCIsYmxvY2tTaXplOjY0fSk7ZnVuY3Rpb24gbCh0LGUscixuLGkpe3RoaXMuY29vcmQ9W3QsZV0sdGhpcy5pZD1yLHRoaXMudmFsdWU9bix0aGlzLmRpc3RhbmNlPWl9ZnVuY3Rpb24gYyh0LGUscil7dGhpcy5nbD10LHRoaXMuZmJvPWUsdGhpcy5idWZmZXI9cix0aGlzLl9yZWFkVGltZW91dD1udWxsO3ZhciBuPXRoaXM7dGhpcy5fcmVhZENhbGxiYWNrPWZ1bmN0aW9uKCl7bi5nbCYmKGUuYmluZCgpLHQucmVhZFBpeGVscygwLDAsZS5zaGFwZVswXSxlLnNoYXBlWzFdLHQuUkdCQSx0LlVOU0lHTkVEX0JZVEUsbi5idWZmZXIpLG4uX3JlYWRUaW1lb3V0PW51bGwpfX12YXIgdT1jLnByb3RvdHlwZTtPYmplY3QuZGVmaW5lUHJvcGVydHkodSxcInNoYXBlXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdsP3RoaXMuZmJvLnNoYXBlLnNsaWNlKCk6WzAsMF19LHNldDpmdW5jdGlvbih0KXtpZih0aGlzLmdsKXt0aGlzLmZiby5zaGFwZT10O3ZhciBlPXRoaXMuZmJvLnNoYXBlWzBdLHI9dGhpcy5mYm8uc2hhcGVbMV07aWYociplKjQ+dGhpcy5idWZmZXIubGVuZ3RoKXtpLmZyZWUodGhpcy5idWZmZXIpO2Zvcih2YXIgbj10aGlzLmJ1ZmZlcj1pLm1hbGxvY1VpbnQ4KG8ociplKjQpKSxhPTA7YTxyKmUqNDsrK2EpblthXT0yNTV9cmV0dXJuIHR9fX0pLHUuYmVnaW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3RoaXMuc2hhcGU7dCYmKHRoaXMuZmJvLmJpbmQoKSx0LmNsZWFyQ29sb3IoMSwxLDEsMSksdC5jbGVhcih0LkNPTE9SX0JVRkZFUl9CSVR8dC5ERVBUSF9CVUZGRVJfQklUKSl9LHUuZW5kPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nbDt0JiYodC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUixudWxsKSx0aGlzLl9yZWFkVGltZW91dHx8Y2xlYXJUaW1lb3V0KHRoaXMuX3JlYWRUaW1lb3V0KSx0aGlzLl9yZWFkVGltZW91dD1zZXRUaW1lb3V0KHRoaXMuX3JlYWRDYWxsYmFjaywxKSl9LHUucXVlcnk9ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLmdsKXJldHVybiBudWxsO3ZhciBuPXRoaXMuZmJvLnNoYXBlLnNsaWNlKCk7dHw9MCxlfD0wLFwibnVtYmVyXCIhPXR5cGVvZiByJiYocj0xKTt2YXIgaT0wfE1hdGgubWluKE1hdGgubWF4KHQtciwwKSxuWzBdKSxvPTB8TWF0aC5taW4oTWF0aC5tYXgodCtyLDApLG5bMF0pLGM9MHxNYXRoLm1pbihNYXRoLm1heChlLXIsMCksblsxXSksdT0wfE1hdGgubWluKE1hdGgubWF4KGUrciwwKSxuWzFdKTtpZihvPD1pfHx1PD1jKXJldHVybiBudWxsO3ZhciBoPVtvLWksdS1jXSxmPWEodGhpcy5idWZmZXIsW2hbMF0saFsxXSw0XSxbNCw0Km5bMF0sMV0sNCooaStuWzBdKmMpKSxwPXMoZi5oaShoWzBdLGhbMV0sMSkscixyKSxkPXBbMF0sZz1wWzFdO3JldHVybiBkPDB8fE1hdGgucG93KHRoaXMucmFkaXVzLDIpPHBbMl0/bnVsbDpuZXcgbChkK2l8MCxnK2N8MCxmLmdldChkLGcsMCksW2YuZ2V0KGQsZywxKSxmLmdldChkLGcsMiksZi5nZXQoZCxnLDMpXSxNYXRoLnNxcnQocFsyXSkpfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmdsJiYodGhpcy5mYm8uZGlzcG9zZSgpLGkuZnJlZSh0aGlzLmJ1ZmZlciksdGhpcy5nbD1udWxsLHRoaXMuX3JlYWRUaW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy5fcmVhZFRpbWVvdXQpKX19LHtcImJpdC10d2lkZGxlXCI6ODMsXCJjd2lzZS9saWIvd3JhcHBlclwiOjE0MCxcImdsLWZib1wiOjI0NixuZGFycmF5OjQ0MyxcInR5cGVkYXJyYXktcG9vbFwiOjUzMH1dLDI5ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2xpYi9jcmVhdGUtdW5pZm9ybXNcIiksaT10KFwiLi9saWIvY3JlYXRlLWF0dHJpYnV0ZXNcIiksYT10KFwiLi9saWIvcmVmbGVjdFwiKSxvPXQoXCIuL2xpYi9zaGFkZXItY2FjaGVcIikscz10KFwiLi9saWIvcnVudGltZS1yZWZsZWN0XCIpLGw9dChcIi4vbGliL0dMRXJyb3JcIik7ZnVuY3Rpb24gYyh0KXt0aGlzLmdsPXQsdGhpcy5nbC5sYXN0QXR0cmliQ291bnQ9MCx0aGlzLl92cmVmPXRoaXMuX2ZyZWY9dGhpcy5fcmVsaW5rPXRoaXMudmVydFNoYWRlcj10aGlzLmZyYWdTaGFkZXI9dGhpcy5wcm9ncmFtPXRoaXMuYXR0cmlidXRlcz10aGlzLnVuaWZvcm1zPXRoaXMudHlwZXM9bnVsbH12YXIgdT1jLnByb3RvdHlwZTtmdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQubmFtZTxlLm5hbWU/LTE6MX11LmJpbmQ9ZnVuY3Rpb24oKXt2YXIgdDt0aGlzLnByb2dyYW18fHRoaXMuX3JlbGluaygpO3ZhciBlPXRoaXMuZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLnByb2dyYW0sdGhpcy5nbC5BQ1RJVkVfQVRUUklCVVRFUykscj10aGlzLmdsLmxhc3RBdHRyaWJDb3VudDtpZihlPnIpZm9yKHQ9cjt0PGU7dCsrKXRoaXMuZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodCk7ZWxzZSBpZihyPmUpZm9yKHQ9ZTt0PHI7dCsrKXRoaXMuZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHQpO3RoaXMuZ2wubGFzdEF0dHJpYkNvdW50PWUsdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSl9LHUuZGlzcG9zZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmdsLmxhc3RBdHRyaWJDb3VudCxlPTA7ZTx0O2UrKyl0aGlzLmdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShlKTt0aGlzLmdsLmxhc3RBdHRyaWJDb3VudD0wLHRoaXMuX2ZyZWYmJnRoaXMuX2ZyZWYuZGlzcG9zZSgpLHRoaXMuX3ZyZWYmJnRoaXMuX3ZyZWYuZGlzcG9zZSgpLHRoaXMuYXR0cmlidXRlcz10aGlzLnR5cGVzPXRoaXMudmVydFNoYWRlcj10aGlzLmZyYWdTaGFkZXI9dGhpcy5wcm9ncmFtPXRoaXMuX3JlbGluaz10aGlzLl9mcmVmPXRoaXMuX3ZyZWY9bnVsbH0sdS51cGRhdGU9ZnVuY3Rpb24odCxlLHIsYyl7aWYoIWV8fDE9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgdT10O3Q9dS52ZXJ0ZXgsZT11LmZyYWdtZW50LHI9dS51bmlmb3JtcyxjPXUuYXR0cmlidXRlc312YXIgZj10aGlzLHA9Zi5nbCxkPWYuX3ZyZWY7Zi5fdnJlZj1vLnNoYWRlcihwLHAuVkVSVEVYX1NIQURFUix0KSxkJiZkLmRpc3Bvc2UoKSxmLnZlcnRTaGFkZXI9Zi5fdnJlZi5zaGFkZXI7dmFyIGc9dGhpcy5fZnJlZjtpZihmLl9mcmVmPW8uc2hhZGVyKHAscC5GUkFHTUVOVF9TSEFERVIsZSksZyYmZy5kaXNwb3NlKCksZi5mcmFnU2hhZGVyPWYuX2ZyZWYuc2hhZGVyLCFyfHwhYyl7dmFyIHY9cC5jcmVhdGVQcm9ncmFtKCk7aWYocC5hdHRhY2hTaGFkZXIodixmLmZyYWdTaGFkZXIpLHAuYXR0YWNoU2hhZGVyKHYsZi52ZXJ0U2hhZGVyKSxwLmxpbmtQcm9ncmFtKHYpLCFwLmdldFByb2dyYW1QYXJhbWV0ZXIodixwLkxJTktfU1RBVFVTKSl7dmFyIG09cC5nZXRQcm9ncmFtSW5mb0xvZyh2KTt0aHJvdyBuZXcgbChtLFwiRXJyb3IgbGlua2luZyBwcm9ncmFtOlwiK20pfXI9cnx8cy51bmlmb3JtcyhwLHYpLGM9Y3x8cy5hdHRyaWJ1dGVzKHAsdikscC5kZWxldGVQcm9ncmFtKHYpfShjPWMuc2xpY2UoKSkuc29ydChoKTt2YXIgeSx4PVtdLGI9W10sXz1bXTtmb3IoeT0wO3k8Yy5sZW5ndGg7Kyt5KXt2YXIgdz1jW3ldO2lmKHcudHlwZS5pbmRleE9mKFwibWF0XCIpPj0wKXtmb3IodmFyIGs9MHx3LnR5cGUuY2hhckF0KHcudHlwZS5sZW5ndGgtMSksQT1uZXcgQXJyYXkoayksVD0wO1Q8azsrK1QpQVtUXT1fLmxlbmd0aCxiLnB1c2gody5uYW1lK1wiW1wiK1QrXCJdXCIpLFwibnVtYmVyXCI9PXR5cGVvZiB3LmxvY2F0aW9uP18ucHVzaCh3LmxvY2F0aW9uK1QpOkFycmF5LmlzQXJyYXkody5sb2NhdGlvbikmJncubG9jYXRpb24ubGVuZ3RoPT09ayYmXCJudW1iZXJcIj09dHlwZW9mIHcubG9jYXRpb25bVF0/Xy5wdXNoKDB8dy5sb2NhdGlvbltUXSk6Xy5wdXNoKC0xKTt4LnB1c2goe25hbWU6dy5uYW1lLHR5cGU6dy50eXBlLGxvY2F0aW9uczpBfSl9ZWxzZSB4LnB1c2goe25hbWU6dy5uYW1lLHR5cGU6dy50eXBlLGxvY2F0aW9uczpbXy5sZW5ndGhdfSksYi5wdXNoKHcubmFtZSksXCJudW1iZXJcIj09dHlwZW9mIHcubG9jYXRpb24/Xy5wdXNoKDB8dy5sb2NhdGlvbik6Xy5wdXNoKC0xKX12YXIgTT0wO2Zvcih5PTA7eTxfLmxlbmd0aDsrK3kpaWYoX1t5XTwwKXtmb3IoO18uaW5kZXhPZihNKT49MDspTSs9MTtfW3ldPU19dmFyIFM9bmV3IEFycmF5KHIubGVuZ3RoKTtmdW5jdGlvbiBFKCl7Zi5wcm9ncmFtPW8ucHJvZ3JhbShwLGYuX3ZyZWYsZi5fZnJlZixiLF8pO2Zvcih2YXIgdD0wO3Q8ci5sZW5ndGg7Kyt0KVNbdF09cC5nZXRVbmlmb3JtTG9jYXRpb24oZi5wcm9ncmFtLHJbdF0ubmFtZSl9RSgpLGYuX3JlbGluaz1FLGYudHlwZXM9e3VuaWZvcm1zOmEociksYXR0cmlidXRlczphKGMpfSxmLmF0dHJpYnV0ZXM9aShwLGYseCxfKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZixcInVuaWZvcm1zXCIsbihwLGYscixTKSl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPW5ldyBjKHQpO3JldHVybiBhLnVwZGF0ZShlLHIsbixpKSxhfX0se1wiLi9saWIvR0xFcnJvclwiOjI5OSxcIi4vbGliL2NyZWF0ZS1hdHRyaWJ1dGVzXCI6MzAwLFwiLi9saWIvY3JlYXRlLXVuaWZvcm1zXCI6MzAxLFwiLi9saWIvcmVmbGVjdFwiOjMwMixcIi4vbGliL3J1bnRpbWUtcmVmbGVjdFwiOjMwMyxcIi4vbGliL3NoYWRlci1jYWNoZVwiOjMwNH1dLDI5OTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe3RoaXMuc2hvcnRNZXNzYWdlPWV8fFwiXCIsdGhpcy5sb25nTWVzc2FnZT1yfHxcIlwiLHRoaXMucmF3RXJyb3I9dHx8XCJcIix0aGlzLm1lc3NhZ2U9XCJnbC1zaGFkZXI6IFwiKyhlfHx0fHxcIlwiKSsocj9cIlxcblwiK3I6XCJcIiksdGhpcy5zdGFjaz0obmV3IEVycm9yKS5zdGFja31uLnByb3RvdHlwZT1uZXcgRXJyb3Isbi5wcm90b3R5cGUubmFtZT1cIkdMRXJyb3JcIixuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uLGUuZXhwb3J0cz1ufSx7fV0sMzAwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe2Zvcih2YXIgYT17fSxsPTAsYz1yLmxlbmd0aDtsPGM7KytsKXt2YXIgdT1yW2xdLGg9dS5uYW1lLGY9dS50eXBlLHA9dS5sb2NhdGlvbnM7c3dpdGNoKGYpe2Nhc2VcImJvb2xcIjpjYXNlXCJpbnRcIjpjYXNlXCJmbG9hdFwiOm8odCxlLHBbMF0saSwxLGEsaCk7YnJlYWs7ZGVmYXVsdDppZihmLmluZGV4T2YoXCJ2ZWNcIik+PTApe3ZhciBkPWYuY2hhckNvZGVBdChmLmxlbmd0aC0xKS00ODtpZihkPDJ8fGQ+NCl0aHJvdyBuZXcgbihcIlwiLFwiSW52YWxpZCBkYXRhIHR5cGUgZm9yIGF0dHJpYnV0ZSBcIitoK1wiOiBcIitmKTtvKHQsZSxwWzBdLGksZCxhLGgpfWVsc2V7aWYoIShmLmluZGV4T2YoXCJtYXRcIik+PTApKXRocm93IG5ldyBuKFwiXCIsXCJVbmtub3duIGRhdGEgdHlwZSBmb3IgYXR0cmlidXRlIFwiK2grXCI6IFwiK2YpO3ZhciBkPWYuY2hhckNvZGVBdChmLmxlbmd0aC0xKS00ODtpZihkPDJ8fGQ+NCl0aHJvdyBuZXcgbihcIlwiLFwiSW52YWxpZCBkYXRhIHR5cGUgZm9yIGF0dHJpYnV0ZSBcIitoK1wiOiBcIitmKTtzKHQsZSxwLGksZCxhLGgpfX19cmV0dXJuIGF9O3ZhciBuPXQoXCIuL0dMRXJyb3JcIik7ZnVuY3Rpb24gaSh0LGUscixuLGksYSl7dGhpcy5fZ2w9dCx0aGlzLl93cmFwcGVyPWUsdGhpcy5faW5kZXg9cix0aGlzLl9sb2NhdGlvbnM9bix0aGlzLl9kaW1lbnNpb249aSx0aGlzLl9jb25zdEZ1bmM9YX12YXIgYT1pLnByb3RvdHlwZTtmdW5jdGlvbiBvKHQsZSxyLG4sYSxvLHMpe2Zvcih2YXIgbD1bXCJnbFwiLFwidlwiXSxjPVtdLHU9MDt1PGE7Kyt1KWwucHVzaChcInhcIit1KSxjLnB1c2goXCJ4XCIrdSk7bC5wdXNoKFwiaWYoeDAubGVuZ3RoPT09dm9pZCAwKXtyZXR1cm4gZ2wudmVydGV4QXR0cmliXCIrYStcImYodixcIitjLmpvaW4oKStcIil9ZWxzZXtyZXR1cm4gZ2wudmVydGV4QXR0cmliXCIrYStcImZ2KHYseDApfVwiKTt2YXIgaD1GdW5jdGlvbi5hcHBseShudWxsLGwpLGY9bmV3IGkodCxlLHIsbixhLGgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHMse3NldDpmdW5jdGlvbihlKXtyZXR1cm4gdC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkobltyXSksaCh0LG5bcl0sZSksZX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGZ9LGVudW1lcmFibGU6ITB9KX1mdW5jdGlvbiBzKHQsZSxyLG4saSxhLHMpe2Zvcih2YXIgbD1uZXcgQXJyYXkoaSksYz1uZXcgQXJyYXkoaSksdT0wO3U8aTsrK3Upbyh0LGUsclt1XSxuLGksbCx1KSxjW3VdPWxbdV07T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsXCJsb2NhdGlvblwiLHtzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIGU9MDtlPGk7KytlKWNbZV0ubG9jYXRpb249dFtlXTtlbHNlIGZvcihlPTA7ZTxpOysrZSljW2VdLmxvY2F0aW9uPXQrZTtyZXR1cm4gdH0sZ2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBBcnJheShpKSxlPTA7ZTxpOysrZSl0W2VdPW5bcltlXV07cmV0dXJuIHR9LGVudW1lcmFibGU6ITB9KSxsLnBvaW50ZXI9ZnVuY3Rpb24oZSxhLG8scyl7ZT1lfHx0LkZMT0FULGE9ISFhLG89b3x8aSppLHM9c3x8MDtmb3IodmFyIGw9MDtsPGk7KytsKXt2YXIgYz1uW3JbbF1dO3QudmVydGV4QXR0cmliUG9pbnRlcihjLGksZSxhLG8scytsKmkpLHQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYyl9fTt2YXIgaD1uZXcgQXJyYXkoaSksZj10W1widmVydGV4QXR0cmliXCIraStcImZ2XCJdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLHMse3NldDpmdW5jdGlvbihlKXtmb3IodmFyIGE9MDthPGk7KythKXt2YXIgbz1uW3JbYV1dO2lmKHQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KG8pLEFycmF5LmlzQXJyYXkoZVswXSkpZi5jYWxsKHQsbyxlW2FdKTtlbHNle2Zvcih2YXIgcz0wO3M8aTsrK3MpaFtzXT1lW2kqYStzXTtmLmNhbGwodCxvLGgpfX1yZXR1cm4gZX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx9LGVudW1lcmFibGU6ITB9KX1hLnBvaW50ZXI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5fZ2wsYT10aGlzLl9sb2NhdGlvbnNbdGhpcy5faW5kZXhdO2kudmVydGV4QXR0cmliUG9pbnRlcihhLHRoaXMuX2RpbWVuc2lvbix0fHxpLkZMT0FULCEhZSxyfHwwLG58fDApLGkuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYSl9LGEuc2V0PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLl9jb25zdEZ1bmModGhpcy5fbG9jYXRpb25zW3RoaXMuX2luZGV4XSx0LGUscixuKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsXCJsb2NhdGlvblwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9jYXRpb25zW3RoaXMuX2luZGV4XX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0IT09dGhpcy5fbG9jYXRpb25zW3RoaXMuX2luZGV4XSYmKHRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF09MHx0LHRoaXMuX3dyYXBwZXIucHJvZ3JhbT1udWxsKSwwfHR9fSl9LHtcIi4vR0xFcnJvclwiOjI5OX1dLDMwMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL3JlZmxlY3RcIiksaT10KFwiLi9HTEVycm9yXCIpO2Z1bmN0aW9uIGEodCl7cmV0dXJuIG5ldyBGdW5jdGlvbihcInlcIixcInJldHVybiBmdW5jdGlvbigpe3JldHVybiB5fVwiKSh0KX1mdW5jdGlvbiBvKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWU7cmV0dXJuIHJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwodCxlLHIpe3N3aXRjaChyKXtjYXNlXCJib29sXCI6Y2FzZVwiaW50XCI6Y2FzZVwic2FtcGxlcjJEXCI6Y2FzZVwic2FtcGxlckN1YmVcIjpyZXR1cm5cImdsLnVuaWZvcm0xaShsb2NhdGlvbnNbXCIrZStcIl0sb2JqXCIrdCtcIilcIjtjYXNlXCJmbG9hdFwiOnJldHVyblwiZ2wudW5pZm9ybTFmKGxvY2F0aW9uc1tcIitlK1wiXSxvYmpcIit0K1wiKVwiO2RlZmF1bHQ6dmFyIG49ci5pbmRleE9mKFwidmVjXCIpO2lmKCEoMDw9biYmbjw9MSYmci5sZW5ndGg9PT00K24pKXtpZigwPT09ci5pbmRleE9mKFwibWF0XCIpJiY0PT09ci5sZW5ndGgpe3ZhciBhPXIuY2hhckNvZGVBdChyLmxlbmd0aC0xKS00ODtpZihhPDJ8fGE+NCl0aHJvdyBuZXcgaShcIlwiLFwiSW52YWxpZCB1bmlmb3JtIGRpbWVuc2lvbiB0eXBlIGZvciBtYXRyaXggXCIrbmFtZStcIjogXCIrcik7cmV0dXJuXCJnbC51bmlmb3JtTWF0cml4XCIrYStcImZ2KGxvY2F0aW9uc1tcIitlK1wiXSxmYWxzZSxvYmpcIit0K1wiKVwifXRocm93IG5ldyBpKFwiXCIsXCJVbmtub3duIHVuaWZvcm0gZGF0YSB0eXBlIGZvciBcIituYW1lK1wiOiBcIityKX12YXIgYT1yLmNoYXJDb2RlQXQoci5sZW5ndGgtMSktNDg7aWYoYTwyfHxhPjQpdGhyb3cgbmV3IGkoXCJcIixcIkludmFsaWQgZGF0YSB0eXBlXCIpO3N3aXRjaChyLmNoYXJBdCgwKSl7Y2FzZVwiYlwiOmNhc2VcImlcIjpyZXR1cm5cImdsLnVuaWZvcm1cIithK1wiaXYobG9jYXRpb25zW1wiK2UrXCJdLG9ialwiK3QrXCIpXCI7Y2FzZVwidlwiOnJldHVyblwiZ2wudW5pZm9ybVwiK2ErXCJmdihsb2NhdGlvbnNbXCIrZStcIl0sb2JqXCIrdCtcIilcIjtkZWZhdWx0OnRocm93IG5ldyBpKFwiXCIsXCJVbnJlY29nbml6ZWQgZGF0YSB0eXBlIGZvciB2ZWN0b3IgXCIrbmFtZStcIjogXCIrcil9fX1mdW5jdGlvbiBjKGUpe2Zvcih2YXIgbj1bXCJyZXR1cm4gZnVuY3Rpb24gdXBkYXRlUHJvcGVydHkob2JqKXtcIl0saT1mdW5jdGlvbiB0KGUscil7aWYoXCJvYmplY3RcIiE9dHlwZW9mIHIpcmV0dXJuW1tlLHJdXTt2YXIgbj1bXTtmb3IodmFyIGkgaW4gcil7dmFyIGE9cltpXSxvPWU7cGFyc2VJbnQoaSkrXCJcIj09PWk/bys9XCJbXCIraStcIl1cIjpvKz1cIi5cIitpLFwib2JqZWN0XCI9PXR5cGVvZiBhP24ucHVzaC5hcHBseShuLHQobyxhKSk6bi5wdXNoKFtvLGFdKX1yZXR1cm4gbn0oXCJcIixlKSxhPTA7YTxpLmxlbmd0aDsrK2Epe3ZhciBvPWlbYV0sYz1vWzBdLHU9b1sxXTtzW3VdJiZuLnB1c2gobChjLHUsclt1XS50eXBlKSl9bi5wdXNoKFwicmV0dXJuIG9ian1cIik7dmFyIGg9bmV3IEZ1bmN0aW9uKFwiZ2xcIixcImxvY2F0aW9uc1wiLG4uam9pbihcIlxcblwiKSk7cmV0dXJuIGgodCxzKX1mdW5jdGlvbiB1KG4sbCx1KXtpZihcIm9iamVjdFwiPT10eXBlb2YgdSl7dmFyIGY9aCh1KTtPYmplY3QuZGVmaW5lUHJvcGVydHkobixsLHtnZXQ6YShmKSxzZXQ6Yyh1KSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pfWVsc2Ugc1t1XT9PYmplY3QuZGVmaW5lUHJvcGVydHkobixsLHtnZXQ6KHA9dSxuZXcgRnVuY3Rpb24oXCJnbFwiLFwid3JhcHBlclwiLFwibG9jYXRpb25zXCIsXCJyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZ2wuZ2V0VW5pZm9ybSh3cmFwcGVyLnByb2dyYW0sbG9jYXRpb25zW1wiK3ArXCJdKX1cIikodCxlLHMpKSxzZXQ6Yyh1KSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pOm5bbF09ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2VcImJvb2xcIjpyZXR1cm4hMTtjYXNlXCJpbnRcIjpjYXNlXCJzYW1wbGVyMkRcIjpjYXNlXCJzYW1wbGVyQ3ViZVwiOmNhc2VcImZsb2F0XCI6cmV0dXJuIDA7ZGVmYXVsdDp2YXIgZT10LmluZGV4T2YoXCJ2ZWNcIik7aWYoMDw9ZSYmZTw9MSYmdC5sZW5ndGg9PT00K2Upe3ZhciByPXQuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKS00ODtpZihyPDJ8fHI+NCl0aHJvdyBuZXcgaShcIlwiLFwiSW52YWxpZCBkYXRhIHR5cGVcIik7cmV0dXJuXCJiXCI9PT10LmNoYXJBdCgwKT9vKHIsITEpOm8ociwwKX1pZigwPT09dC5pbmRleE9mKFwibWF0XCIpJiY0PT09dC5sZW5ndGgpe3ZhciByPXQuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKS00ODtpZihyPDJ8fHI+NCl0aHJvdyBuZXcgaShcIlwiLFwiSW52YWxpZCB1bmlmb3JtIGRpbWVuc2lvbiB0eXBlIGZvciBtYXRyaXggXCIrbmFtZStcIjogXCIrdCk7cmV0dXJuIG8ocipyLDApfXRocm93IG5ldyBpKFwiXCIsXCJVbmtub3duIHVuaWZvcm0gZGF0YSB0eXBlIGZvciBcIituYW1lK1wiOiBcIit0KX19KHJbdV0udHlwZSk7dmFyIHB9ZnVuY3Rpb24gaCh0KXt2YXIgZTtpZihBcnJheS5pc0FycmF5KHQpKXtlPW5ldyBBcnJheSh0Lmxlbmd0aCk7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpdShlLHIsdFtyXSl9ZWxzZSBmb3IodmFyIG4gaW4gZT17fSx0KXUoZSxuLHRbbl0pO3JldHVybiBlfXZhciBmPW4ociwhMCk7cmV0dXJue2dldDphKGgoZikpLHNldDpjKGYpLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfX19LHtcIi4vR0xFcnJvclwiOjI5OSxcIi4vcmVmbGVjdFwiOjMwMn1dLDMwMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXRbbl0ubmFtZSxhPWkuc3BsaXQoXCIuXCIpLG89cixzPTA7czxhLmxlbmd0aDsrK3Mpe3ZhciBsPWFbc10uc3BsaXQoXCJbXCIpO2lmKGwubGVuZ3RoPjEpe2xbMF1pbiBvfHwob1tsWzBdXT1bXSksbz1vW2xbMF1dO2Zvcih2YXIgYz0xO2M8bC5sZW5ndGg7KytjKXt2YXIgdT1wYXJzZUludChsW2NdKTtjPGwubGVuZ3RoLTF8fHM8YS5sZW5ndGgtMT8odSBpbiBvfHwoYzxsLmxlbmd0aC0xP29bdV09W106b1t1XT17fSksbz1vW3VdKTpvW3VdPWU/bjp0W25dLnR5cGV9fWVsc2UgczxhLmxlbmd0aC0xPyhsWzBdaW4gb3x8KG9bbFswXV09e30pLG89b1tsWzBdXSk6b1tsWzBdXT1lP246dFtuXS50eXBlfXJldHVybiByfX0se31dLDMwMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IudW5pZm9ybXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsdC5BQ1RJVkVfVU5JRk9STVMpLG49W10saT0wO2k8cjsrK2kpe3ZhciBvPXQuZ2V0QWN0aXZlVW5pZm9ybShlLGkpO2lmKG8pe3ZhciBzPWEodCxvLnR5cGUpO2lmKG8uc2l6ZT4xKWZvcih2YXIgbD0wO2w8by5zaXplOysrbCluLnB1c2goe25hbWU6by5uYW1lLnJlcGxhY2UoXCJbMF1cIixcIltcIitsK1wiXVwiKSx0eXBlOnN9KTtlbHNlIG4ucHVzaCh7bmFtZTpvLm5hbWUsdHlwZTpzfSl9fXJldHVybiBufSxyLmF0dHJpYnV0ZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsdC5BQ1RJVkVfQVRUUklCVVRFUyksbj1bXSxpPTA7aTxyOysraSl7dmFyIG89dC5nZXRBY3RpdmVBdHRyaWIoZSxpKTtvJiZuLnB1c2goe25hbWU6by5uYW1lLHR5cGU6YSh0LG8udHlwZSl9KX1yZXR1cm4gbn07dmFyIG49e0ZMT0FUOlwiZmxvYXRcIixGTE9BVF9WRUMyOlwidmVjMlwiLEZMT0FUX1ZFQzM6XCJ2ZWMzXCIsRkxPQVRfVkVDNDpcInZlYzRcIixJTlQ6XCJpbnRcIixJTlRfVkVDMjpcIml2ZWMyXCIsSU5UX1ZFQzM6XCJpdmVjM1wiLElOVF9WRUM0OlwiaXZlYzRcIixCT09MOlwiYm9vbFwiLEJPT0xfVkVDMjpcImJ2ZWMyXCIsQk9PTF9WRUMzOlwiYnZlYzNcIixCT09MX1ZFQzQ6XCJidmVjNFwiLEZMT0FUX01BVDI6XCJtYXQyXCIsRkxPQVRfTUFUMzpcIm1hdDNcIixGTE9BVF9NQVQ0OlwibWF0NFwiLFNBTVBMRVJfMkQ6XCJzYW1wbGVyMkRcIixTQU1QTEVSX0NVQkU6XCJzYW1wbGVyQ3ViZVwifSxpPW51bGw7ZnVuY3Rpb24gYSh0LGUpe2lmKCFpKXt2YXIgcj1PYmplY3Qua2V5cyhuKTtpPXt9O2Zvcih2YXIgYT0wO2E8ci5sZW5ndGg7KythKXt2YXIgbz1yW2FdO2lbdFtvXV09bltvXX19cmV0dXJuIGlbZV19fSx7fV0sMzA0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ci5zaGFkZXI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB1KHQpLmdldFNoYWRlclJlZmVyZW5jZShlLHIpfSxyLnByb2dyYW09ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdSh0KS5nZXRQcm9ncmFtKGUscixuLGkpfTt2YXIgbj10KFwiLi9HTEVycm9yXCIpLGk9dChcImdsLWZvcm1hdC1jb21waWxlci1lcnJvclwiKSxhPW5ldyhcInVuZGVmaW5lZFwiPT10eXBlb2YgV2Vha01hcD90KFwid2Vha21hcC1zaGltXCIpOldlYWtNYXApLG89MDtmdW5jdGlvbiBzKHQsZSxyLG4saSxhLG8pe3RoaXMuaWQ9dCx0aGlzLnNyYz1lLHRoaXMudHlwZT1yLHRoaXMuc2hhZGVyPW4sdGhpcy5jb3VudD1hLHRoaXMucHJvZ3JhbXM9W10sdGhpcy5jYWNoZT1vfWZ1bmN0aW9uIGwodCl7dGhpcy5nbD10LHRoaXMuc2hhZGVycz1be30se31dLHRoaXMucHJvZ3JhbXM9e319cy5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe2lmKDA9PS0tdGhpcy5jb3VudCl7Zm9yKHZhciB0PXRoaXMuY2FjaGUsZT10LmdsLHI9dGhpcy5wcm9ncmFtcyxuPTAsaT1yLmxlbmd0aDtuPGk7KytuKXt2YXIgYT10LnByb2dyYW1zW3Jbbl1dO2EmJihkZWxldGUgdC5wcm9ncmFtc1tuXSxlLmRlbGV0ZVByb2dyYW0oYSkpfWUuZGVsZXRlU2hhZGVyKHRoaXMuc2hhZGVyKSxkZWxldGUgdC5zaGFkZXJzW3RoaXMudHlwZT09PWUuRlJBR01FTlRfU0hBREVSfDBdW3RoaXMuc3JjXX19O3ZhciBjPWwucHJvdG90eXBlO2Z1bmN0aW9uIHUodCl7dmFyIGU9YS5nZXQodCk7cmV0dXJuIGV8fChlPW5ldyBsKHQpLGEuc2V0KHQsZSkpLGV9Yy5nZXRTaGFkZXJSZWZlcmVuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdsLGE9dGhpcy5zaGFkZXJzW3Q9PT1yLkZSQUdNRU5UX1NIQURFUnwwXSxsPWFbZV07aWYobCYmci5pc1NoYWRlcihsLnNoYWRlcikpbC5jb3VudCs9MTtlbHNle3ZhciBjPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT10LmNyZWF0ZVNoYWRlcihlKTtpZih0LnNoYWRlclNvdXJjZShhLHIpLHQuY29tcGlsZVNoYWRlcihhKSwhdC5nZXRTaGFkZXJQYXJhbWV0ZXIoYSx0LkNPTVBJTEVfU1RBVFVTKSl7dmFyIG89dC5nZXRTaGFkZXJJbmZvTG9nKGEpO3RyeXt2YXIgcz1pKG8scixlKX1jYXRjaCh0KXt0aHJvdyBjb25zb2xlLndhcm4oXCJGYWlsZWQgdG8gZm9ybWF0IGNvbXBpbGVyIGVycm9yOiBcIit0KSxuZXcgbihvLFwiRXJyb3IgY29tcGlsaW5nIHNoYWRlcjpcXG5cIitvKX10aHJvdyBuZXcgbihvLHMuc2hvcnQscy5sb25nKX1yZXR1cm4gYX0ocix0LGUpO2w9YVtlXT1uZXcgcyhvKyssZSx0LGMsW10sMSx0aGlzKX1yZXR1cm4gbH0sYy5nZXRQcm9ncmFtPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPVt0LmlkLGUuaWQsci5qb2luKFwiOlwiKSxpLmpvaW4oXCI6XCIpXS5qb2luKFwiQFwiKSxvPXRoaXMucHJvZ3JhbXNbYV07cmV0dXJuIG8mJnRoaXMuZ2wuaXNQcm9ncmFtKG8pfHwodGhpcy5wcm9ncmFtc1thXT1vPWZ1bmN0aW9uKHQsZSxyLGksYSl7dmFyIG89dC5jcmVhdGVQcm9ncmFtKCk7dC5hdHRhY2hTaGFkZXIobyxlKSx0LmF0dGFjaFNoYWRlcihvLHIpO2Zvcih2YXIgcz0wO3M8aS5sZW5ndGg7KytzKXQuYmluZEF0dHJpYkxvY2F0aW9uKG8sYVtzXSxpW3NdKTtpZih0LmxpbmtQcm9ncmFtKG8pLCF0LmdldFByb2dyYW1QYXJhbWV0ZXIobyx0LkxJTktfU1RBVFVTKSl7dmFyIGw9dC5nZXRQcm9ncmFtSW5mb0xvZyhvKTt0aHJvdyBuZXcgbihsLFwiRXJyb3IgbGlua2luZyBwcm9ncmFtOiBcIitsKX1yZXR1cm4gb30odGhpcy5nbCx0LnNoYWRlcixlLnNoYWRlcixyLGkpLHQucHJvZ3JhbXMucHVzaChhKSxlLnByb2dyYW1zLnB1c2goYSkpLG99fSx7XCIuL0dMRXJyb3JcIjoyOTksXCJnbC1mb3JtYXQtY29tcGlsZXItZXJyb3JcIjoyNDcsXCJ3ZWFrbWFwLXNoaW1cIjo1NDB9XSwzMDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe3RoaXMucGxvdD10LHRoaXMuZW5hYmxlPVshMCwhMCwhMSwhMV0sdGhpcy53aWR0aD1bMSwxLDEsMV0sdGhpcy5jb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmNlbnRlcj1bMS8wLDEvMF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IG4odCk7cmV0dXJuIHIudXBkYXRlKGUpLHQuYWRkT3ZlcmxheShyKSxyfTt2YXIgaT1uLnByb3RvdHlwZTtpLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9LHRoaXMuZW5hYmxlPSh0LmVuYWJsZXx8WyEwLCEwLCExLCExXSkuc2xpY2UoKSx0aGlzLndpZHRoPSh0LndpZHRofHxbMSwxLDEsMV0pLnNsaWNlKCksdGhpcy5jb2xvcj0odC5jb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgpfSksdGhpcy5jZW50ZXI9KHQuY2VudGVyfHxbMS8wLDEvMF0pLnNsaWNlKCksdGhpcy5wbG90LnNldE92ZXJsYXlEaXJ0eSgpfSxpLmRyYXc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVuYWJsZSxlPXRoaXMud2lkdGgscj10aGlzLmNvbG9yLG49dGhpcy5jZW50ZXIsaT10aGlzLnBsb3QsYT1pLmxpbmUsbz1pLmRhdGFCb3gscz1pLnZpZXdCb3g7aWYoYS5iaW5kKCksb1swXTw9blswXSYmblswXTw9b1syXSYmb1sxXTw9blsxXSYmblsxXTw9b1szXSl7dmFyIGw9c1swXSsoblswXS1vWzBdKS8ob1syXS1vWzBdKSooc1syXS1zWzBdKSxjPXNbMV0rKG5bMV0tb1sxXSkvKG9bM10tb1sxXSkqKHNbM10tc1sxXSk7dFswXSYmYS5kcmF3TGluZShsLGMsc1swXSxjLGVbMF0sclswXSksdFsxXSYmYS5kcmF3TGluZShsLGMsbCxzWzFdLGVbMV0sclsxXSksdFsyXSYmYS5kcmF3TGluZShsLGMsc1syXSxjLGVbMl0sclsyXSksdFszXSYmYS5kcmF3TGluZShsLGMsbCxzWzNdLGVbM10sclszXSl9fSxpLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnBsb3QucmVtb3ZlT3ZlcmxheSh0aGlzKX19LHt9XSwzMDY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2xzbGlmeVwiKSxpPXQoXCJnbC1zaGFkZXJcIiksYT1uKFtcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24sIGNvbG9yO1xcbmF0dHJpYnV0ZSBmbG9hdCB3ZWlnaHQ7XFxuXFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcbnVuaWZvcm0gdmVjMyBjb29yZGluYXRlc1szXTtcXG51bmlmb3JtIHZlYzQgY29sb3JzWzNdO1xcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaGFwZTtcXG51bmlmb3JtIGZsb2F0IGxpbmVXaWR0aDtcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzMgdmVydGV4UG9zaXRpb24gPSBtaXgoY29vcmRpbmF0ZXNbMF0sXFxuICAgIG1peChjb29yZGluYXRlc1syXSwgY29vcmRpbmF0ZXNbMV0sIDAuNSAqIChwb3NpdGlvbiArIDEuMCkpLCBhYnMocG9zaXRpb24pKTtcXG5cXG4gIHZlYzQgY2xpcFBvcyA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHZlcnRleFBvc2l0aW9uLCAxLjApO1xcbiAgdmVjMiBjbGlwT2Zmc2V0ID0gKHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KGNvbG9yLCAwLjApKS54eTtcXG4gIHZlYzIgZGVsdGEgPSB3ZWlnaHQgKiBjbGlwT2Zmc2V0ICogc2NyZWVuU2hhcGU7XFxuICB2ZWMyIGxpbmVPZmZzZXQgPSBub3JtYWxpemUodmVjMihkZWx0YS55LCAtZGVsdGEueCkpIC8gc2NyZWVuU2hhcGU7XFxuXFxuICBnbF9Qb3NpdGlvbiAgID0gdmVjNChjbGlwUG9zLnh5ICsgY2xpcFBvcy53ICogMC41ICogbGluZVdpZHRoICogbGluZU9mZnNldCwgY2xpcFBvcy56LCBjbGlwUG9zLncpO1xcbiAgZnJhZ0NvbG9yICAgICA9IGNvbG9yLnggKiBjb2xvcnNbMF0gKyBjb2xvci55ICogY29sb3JzWzFdICsgY29sb3IueiAqIGNvbG9yc1syXTtcXG59XFxuXCJdKSxvPW4oW1wicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjtcXG59XCJdKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxhLG8sbnVsbCxbe25hbWU6XCJwb3NpdGlvblwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwiY29sb3JcIix0eXBlOlwidmVjM1wifSx7bmFtZTpcIndlaWdodFwiLHR5cGU6XCJmbG9hdFwifV0pfX0se1wiZ2wtc2hhZGVyXCI6Mjk4LGdsc2xpZnk6NDAyfV0sMzA3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsLWJ1ZmZlclwiKSxpPXQoXCJnbC12YW9cIiksYT10KFwiLi9zaGFkZXJzL2luZGV4XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPVtdO2Z1bmN0aW9uIG8odCxlLG4saSxhLG8pe3ZhciBzPVt0LGUsbiwwLDAsMCwxXTtzW2krM109MSxzW2ldPWEsci5wdXNoLmFwcGx5KHIscyksc1s2XT0tMSxyLnB1c2guYXBwbHkocixzKSxzW2ldPW8sci5wdXNoLmFwcGx5KHIscyksci5wdXNoLmFwcGx5KHIscyksc1s2XT0xLHIucHVzaC5hcHBseShyLHMpLHNbaV09YSxyLnB1c2guYXBwbHkocixzKX1vKDAsMCwwLDAsMCwxKSxvKDAsMCwwLDEsMCwxKSxvKDAsMCwwLDIsMCwxKSxvKDEsMCwwLDEsLTEsMSksbygxLDAsMCwyLC0xLDEpLG8oMCwxLDAsMCwtMSwxKSxvKDAsMSwwLDIsLTEsMSksbygwLDAsMSwwLC0xLDEpLG8oMCwwLDEsMSwtMSwxKTt2YXIgbD1uKHQsciksYz1pKHQsW3t0eXBlOnQuRkxPQVQsYnVmZmVyOmwsc2l6ZTozLG9mZnNldDowLHN0cmlkZToyOH0se3R5cGU6dC5GTE9BVCxidWZmZXI6bCxzaXplOjMsb2Zmc2V0OjEyLHN0cmlkZToyOH0se3R5cGU6dC5GTE9BVCxidWZmZXI6bCxzaXplOjEsb2Zmc2V0OjI0LHN0cmlkZToyOH1dKSx1PWEodCk7dS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsdS5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTEsdS5hdHRyaWJ1dGVzLndlaWdodC5sb2NhdGlvbj0yO3ZhciBoPW5ldyBzKHQsbCxjLHUpO3JldHVybiBoLnVwZGF0ZShlKSxofTt2YXIgbz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24gcyh0LGUscixuKXt0aGlzLmdsPXQsdGhpcy5idWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMuc2hhZGVyPW4sdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5ib3VuZHM9W1stMWUzLC0xZTMsLTFlM10sWzFlMywxZTMsMWUzXV0sdGhpcy5wb3NpdGlvbj1bMCwwLDBdLHRoaXMubGluZVdpZHRoPVsyLDIsMl0sdGhpcy5jb2xvcnM9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmVuYWJsZWQ9WyEwLCEwLCEwXSx0aGlzLmRyYXdTaWRlcz1bITAsITAsITBdLHRoaXMuYXhlcz1udWxsfXZhciBsPXMucHJvdG90eXBlLGM9WzAsMCwwXSx1PVswLDAsMF0saD1bMCwwXTtsLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5kcmF3VHJhbnNwYXJlbnQ9ZnVuY3Rpb24odCl7fSxsLmRyYXc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nbCxyPXRoaXMudmFvLG49dGhpcy5zaGFkZXI7ci5iaW5kKCksbi5iaW5kKCk7dmFyIGksYT10Lm1vZGVsfHxvLHM9dC52aWV3fHxvLGw9dC5wcm9qZWN0aW9ufHxvO3RoaXMuYXhlcyYmKGk9dGhpcy5heGVzLmxhc3RDdWJlUHJvcHMuYXhpcyk7Zm9yKHZhciBmPWMscD11LGQ9MDtkPDM7KytkKWkmJmlbZF08MD8oZltkXT10aGlzLmJvdW5kc1swXVtkXSxwW2RdPXRoaXMuYm91bmRzWzFdW2RdKTooZltkXT10aGlzLmJvdW5kc1sxXVtkXSxwW2RdPXRoaXMuYm91bmRzWzBdW2RdKTtoWzBdPWUuZHJhd2luZ0J1ZmZlcldpZHRoLGhbMV09ZS5kcmF3aW5nQnVmZmVySGVpZ2h0LG4udW5pZm9ybXMubW9kZWw9YSxuLnVuaWZvcm1zLnZpZXc9cyxuLnVuaWZvcm1zLnByb2plY3Rpb249bCxuLnVuaWZvcm1zLmNvb3JkaW5hdGVzPVt0aGlzLnBvc2l0aW9uLGYscF0sbi51bmlmb3Jtcy5jb2xvcnM9dGhpcy5jb2xvcnMsbi51bmlmb3Jtcy5zY3JlZW5TaGFwZT1oO2ZvcihkPTA7ZDwzOysrZCluLnVuaWZvcm1zLmxpbmVXaWR0aD10aGlzLmxpbmVXaWR0aFtkXSp0aGlzLnBpeGVsUmF0aW8sdGhpcy5lbmFibGVkW2RdJiYoci5kcmF3KGUuVFJJQU5HTEVTLDYsNipkKSx0aGlzLmRyYXdTaWRlc1tkXSYmci5kcmF3KGUuVFJJQU5HTEVTLDEyLDE4KzEyKmQpKTtyLnVuYmluZCgpfSxsLnVwZGF0ZT1mdW5jdGlvbih0KXt0JiYoXCJib3VuZHNcImluIHQmJih0aGlzLmJvdW5kcz10LmJvdW5kcyksXCJwb3NpdGlvblwiaW4gdCYmKHRoaXMucG9zaXRpb249dC5wb3NpdGlvbiksXCJsaW5lV2lkdGhcImluIHQmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCksXCJjb2xvcnNcImluIHQmJih0aGlzLmNvbG9ycz10LmNvbG9ycyksXCJlbmFibGVkXCJpbiB0JiYodGhpcy5lbmFibGVkPXQuZW5hYmxlZCksXCJkcmF3U2lkZXNcImluIHQmJih0aGlzLmRyYXdTaWRlcz10LmRyYXdTaWRlcykpfSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZhby5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHtcIi4vc2hhZGVycy9pbmRleFwiOjMwNixcImdsLWJ1ZmZlclwiOjIzOCxcImdsLXZhb1wiOjMyMH1dLDMwODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCJnbHNsaWZ5XCIpLGk9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuXFxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxudmVjMyBnZXRPcnRob2dvbmFsVmVjdG9yKHZlYzMgdikge1xcbiAgLy8gUmV0dXJuIHVwLXZlY3RvciBmb3Igb25seS16IHZlY3Rvci5cXG4gIC8vIFJldHVybiBheCArIGJ5ICsgY3ogPSAwLCBhIHBvaW50IHRoYXQgbGllcyBvbiB0aGUgcGxhbmUgdGhhdCBoYXMgdiBhcyBhIG5vcm1hbCBhbmQgdGhhdCBpc24ndCAoMCwwLDApLlxcbiAgLy8gRnJvbSB0aGUgYWJvdmUgaWYtc3RhdGVtZW50IHdlIGhhdmUgfHxhfHwgPiAwICBVICB8fGJ8fCA+IDAuXFxuICAvLyBBc3NpZ24geiA9IDAsIHggPSAtYiwgeSA9IGE6XFxuICAvLyBhKi1iICsgYiphICsgYyowID0gLWJhICsgYmEgKyAwID0gMFxcbiAgaWYgKHYueCp2LnggPiB2Lnoqdi56IHx8IHYueSp2LnkgPiB2Lnoqdi56KSB7XFxuICAgIHJldHVybiBub3JtYWxpemUodmVjMygtdi55LCB2LngsIDAuMCkpO1xcbiAgfSBlbHNlIHtcXG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKDAuMCwgdi56LCAtdi55KSk7XFxuICB9XFxufVxcblxcbi8vIENhbGN1bGF0ZSB0aGUgdHViZSB2ZXJ0ZXggYW5kIG5vcm1hbCBhdCB0aGUgZ2l2ZW4gaW5kZXguXFxuLy9cXG4vLyBUaGUgcmV0dXJuZWQgdmVydGV4IGlzIGZvciBhIHR1YmUgcmluZyB3aXRoIGl0cyBjZW50ZXIgYXQgb3JpZ2luLCByYWRpdXMgb2YgbGVuZ3RoKGQpLCBwb2ludGluZyBpbiB0aGUgZGlyZWN0aW9uIG9mIGQuXFxuLy9cXG4vLyBFYWNoIHR1YmUgc2VnbWVudCBpcyBtYWRlIHVwIG9mIGEgcmluZyBvZiB2ZXJ0aWNlcy5cXG4vLyBUaGVzZSB2ZXJ0aWNlcyBhcmUgdXNlZCB0byBtYWtlIHVwIHRoZSB0cmlhbmdsZXMgb2YgdGhlIHR1YmUgYnkgY29ubmVjdGluZyB0aGVtIHRvZ2V0aGVyIGluIHRoZSB2ZXJ0ZXggYXJyYXkuXFxuLy8gVGhlIGluZGV4ZXMgb2YgdHViZSBzZWdtZW50cyBydW4gZnJvbSAwIHRvIDguXFxuLy9cXG52ZWMzIGdldFR1YmVQb3NpdGlvbih2ZWMzIGQsIGZsb2F0IGluZGV4LCBvdXQgdmVjMyBub3JtYWwpIHtcXG4gIGZsb2F0IHNlZ21lbnRDb3VudCA9IDguMDtcXG5cXG4gIGZsb2F0IGFuZ2xlID0gMi4wICogMy4xNDE1OSAqIChpbmRleCAvIHNlZ21lbnRDb3VudCk7XFxuXFxuICB2ZWMzIHUgPSBnZXRPcnRob2dvbmFsVmVjdG9yKGQpO1xcbiAgdmVjMyB2ID0gbm9ybWFsaXplKGNyb3NzKHUsIGQpKTtcXG5cXG4gIHZlYzMgeCA9IHUgKiBjb3MoYW5nbGUpICogbGVuZ3RoKGQpO1xcbiAgdmVjMyB5ID0gdiAqIHNpbihhbmdsZSkgKiBsZW5ndGgoZCk7XFxuICB2ZWMzIHYzID0geCArIHk7XFxuXFxuICBub3JtYWwgPSBub3JtYWxpemUodjMpO1xcblxcbiAgcmV0dXJuIHYzO1xcbn1cXG5cXG5hdHRyaWJ1dGUgdmVjNCB2ZWN0b3I7XFxuYXR0cmlidXRlIHZlYzQgY29sb3IsIHBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xcbnVuaWZvcm0gZmxvYXQgdmVjdG9yU2NhbGU7XFxudW5pZm9ybSBmbG9hdCB0dWJlU2NhbGU7XFxuXFxudW5pZm9ybSBtYXQ0IG1vZGVsXFxuICAgICAgICAgICAsIHZpZXdcXG4gICAgICAgICAgICwgcHJvamVjdGlvblxcbiAgICAgICAgICAgLCBpbnZlcnNlTW9kZWw7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uXFxuICAgICAgICAgICAsIGxpZ2h0UG9zaXRpb247XFxuXFxudmFyeWluZyB2ZWMzIGZfbm9ybWFsXFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cXG4gICAgICAgICAgICwgZl9leWVEaXJlY3Rpb25cXG4gICAgICAgICAgICwgZl9kYXRhXFxuICAgICAgICAgICAsIGZfcG9zaXRpb247XFxudmFyeWluZyB2ZWM0IGZfY29sb3I7XFxudmFyeWluZyB2ZWMyIGZfdXY7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgLy8gU2NhbGUgdGhlIHZlY3RvciBtYWduaXR1ZGUgdG8gc3RheSBjb25zdGFudCB3aXRoXFxuICAvLyBtb2RlbCAmIHZpZXcgY2hhbmdlcy5cXG4gIHZlYzMgbm9ybWFsO1xcbiAgdmVjMyBYWVogPSBnZXRUdWJlUG9zaXRpb24obWF0Myhtb2RlbCkgKiAodHViZVNjYWxlICogdmVjdG9yLncgKiBub3JtYWxpemUodmVjdG9yLnh5eikpLCBwb3NpdGlvbi53LCBub3JtYWwpO1xcbiAgdmVjNCB0dWJlUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24ueHl6LCAxLjApICsgdmVjNChYWVosIDAuMCk7XFxuXFxuICAvL0xpZ2h0aW5nIGdlb21ldHJ5IHBhcmFtZXRlcnNcXG4gIHZlYzQgY2FtZXJhQ29vcmRpbmF0ZSA9IHZpZXcgKiB0dWJlUG9zaXRpb247XFxuICBjYW1lcmFDb29yZGluYXRlLnh5eiAvPSBjYW1lcmFDb29yZGluYXRlLnc7XFxuICBmX2xpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xcbiAgZl9leWVEaXJlY3Rpb24gICA9IGV5ZVBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XFxuICBmX25vcm1hbCA9IG5vcm1hbGl6ZSgodmVjNChub3JtYWwsMC4wKSAqIGludmVyc2VNb2RlbCkueHl6KTtcXG5cXG4gIC8vIHZlYzQgbV9wb3NpdGlvbiAgPSBtb2RlbCAqIHZlYzQodHViZVBvc2l0aW9uLCAxLjApO1xcbiAgdmVjNCB0X3Bvc2l0aW9uICA9IHZpZXcgKiB0dWJlUG9zaXRpb247XFxuICBnbF9Qb3NpdGlvbiAgICAgID0gcHJvamVjdGlvbiAqIHRfcG9zaXRpb247XFxuXFxuICBmX2NvbG9yICAgICAgICAgID0gY29sb3I7XFxuICBmX2RhdGEgICAgICAgICAgID0gdHViZVBvc2l0aW9uLnh5ejtcXG4gIGZfcG9zaXRpb24gICAgICAgPSBwb3NpdGlvbi54eXo7XFxuICBmX3V2ICAgICAgICAgICAgID0gdXY7XFxufVxcblwiXSksYT1uKFtcIiNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlXFxuXFxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuZmxvYXQgYmVja21hbm5EaXN0cmlidXRpb24oZmxvYXQgeCwgZmxvYXQgcm91Z2huZXNzKSB7XFxuICBmbG9hdCBOZG90SCA9IG1heCh4LCAwLjAwMDEpO1xcbiAgZmxvYXQgY29zMkFscGhhID0gTmRvdEggKiBOZG90SDtcXG4gIGZsb2F0IHRhbjJBbHBoYSA9IChjb3MyQWxwaGEgLSAxLjApIC8gY29zMkFscGhhO1xcbiAgZmxvYXQgcm91Z2huZXNzMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcXG4gIGZsb2F0IGRlbm9tID0gMy4xNDE1OTI2NTM1ODk3OTMgKiByb3VnaG5lc3MyICogY29zMkFscGhhICogY29zMkFscGhhO1xcbiAgcmV0dXJuIGV4cCh0YW4yQWxwaGEgLyByb3VnaG5lc3MyKSAvIGRlbm9tO1xcbn1cXG5cXG5mbG9hdCBjb29rVG9ycmFuY2VTcGVjdWxhcihcXG4gIHZlYzMgbGlnaHREaXJlY3Rpb24sXFxuICB2ZWMzIHZpZXdEaXJlY3Rpb24sXFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwsXFxuICBmbG9hdCByb3VnaG5lc3MsXFxuICBmbG9hdCBmcmVzbmVsKSB7XFxuXFxuICBmbG9hdCBWZG90TiA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XFxuICBmbG9hdCBMZG90TiA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xcblxcbiAgLy9IYWxmIGFuZ2xlIHZlY3RvclxcbiAgdmVjMyBIID0gbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uICsgdmlld0RpcmVjdGlvbik7XFxuXFxuICAvL0dlb21ldHJpYyB0ZXJtXFxuICBmbG9hdCBOZG90SCA9IG1heChkb3Qoc3VyZmFjZU5vcm1hbCwgSCksIDAuMCk7XFxuICBmbG9hdCBWZG90SCA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcXG4gIGZsb2F0IExkb3RIID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcXG4gIGZsb2F0IEcxID0gKDIuMCAqIE5kb3RIICogVmRvdE4pIC8gVmRvdEg7XFxuICBmbG9hdCBHMiA9ICgyLjAgKiBOZG90SCAqIExkb3ROKSAvIExkb3RIO1xcbiAgZmxvYXQgRyA9IG1pbigxLjAsIG1pbihHMSwgRzIpKTtcXG4gIFxcbiAgLy9EaXN0cmlidXRpb24gdGVybVxcbiAgZmxvYXQgRCA9IGJlY2ttYW5uRGlzdHJpYnV0aW9uKE5kb3RILCByb3VnaG5lc3MpO1xcblxcbiAgLy9GcmVzbmVsIHRlcm1cXG4gIGZsb2F0IEYgPSBwb3coMS4wIC0gVmRvdE4sIGZyZXNuZWwpO1xcblxcbiAgLy9NdWx0aXBseSB0ZXJtcyBhbmQgZG9uZVxcbiAgcmV0dXJuICBHICogRiAqIEQgLyBtYXgoMy4xNDE1OTI2NSAqIFZkb3ROLCAwLjAwMDAwMSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XFxuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XFxufVxcblxcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzXFxuICAgICAgICAgICAgLCBmcmVzbmVsXFxuICAgICAgICAgICAgLCBrYW1iaWVudFxcbiAgICAgICAgICAgICwga2RpZmZ1c2VcXG4gICAgICAgICAgICAsIGtzcGVjdWxhclxcbiAgICAgICAgICAgICwgb3BhY2l0eTtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcblxcbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxcbiAgICAgICAgICAgLCBmX2xpZ2h0RGlyZWN0aW9uXFxuICAgICAgICAgICAsIGZfZXllRGlyZWN0aW9uXFxuICAgICAgICAgICAsIGZfZGF0YVxcbiAgICAgICAgICAgLCBmX3Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xcbnZhcnlpbmcgdmVjMiBmX3V2O1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfcG9zaXRpb24pKSBkaXNjYXJkO1xcbiAgdmVjMyBOID0gbm9ybWFsaXplKGZfbm9ybWFsKTtcXG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShmX2xpZ2h0RGlyZWN0aW9uKTtcXG4gIHZlYzMgViA9IG5vcm1hbGl6ZShmX2V5ZURpcmVjdGlvbik7XFxuXFxuICBpZihnbF9Gcm9udEZhY2luZykge1xcbiAgICBOID0gLU47XFxuICB9XFxuXFxuICBmbG9hdCBzcGVjdWxhciA9IG1pbigxLjAsIG1heCgwLjAsIGNvb2tUb3JyYW5jZVNwZWN1bGFyKEwsIFYsIE4sIHJvdWdobmVzcywgZnJlc25lbCkpKTtcXG4gIGZsb2F0IGRpZmZ1c2UgID0gbWluKGthbWJpZW50ICsga2RpZmZ1c2UgKiBtYXgoZG90KE4sIEwpLCAwLjApLCAxLjApO1xcblxcbiAgdmVjNCBzdXJmYWNlQ29sb3IgPSBmX2NvbG9yICogdGV4dHVyZTJEKHRleHR1cmUsIGZfdXYpO1xcbiAgdmVjNCBsaXRDb2xvciA9IHN1cmZhY2VDb2xvci5hICogdmVjNChkaWZmdXNlICogc3VyZmFjZUNvbG9yLnJnYiArIGtzcGVjdWxhciAqIHZlYzMoMSwxLDEpICogc3BlY3VsYXIsICAxLjApO1xcblxcbiAgZ2xfRnJhZ0NvbG9yID0gbGl0Q29sb3IgKiBvcGFjaXR5O1xcbn1cXG5cIl0pLG89bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuXFxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxudmVjMyBnZXRPcnRob2dvbmFsVmVjdG9yKHZlYzMgdikge1xcbiAgLy8gUmV0dXJuIHVwLXZlY3RvciBmb3Igb25seS16IHZlY3Rvci5cXG4gIC8vIFJldHVybiBheCArIGJ5ICsgY3ogPSAwLCBhIHBvaW50IHRoYXQgbGllcyBvbiB0aGUgcGxhbmUgdGhhdCBoYXMgdiBhcyBhIG5vcm1hbCBhbmQgdGhhdCBpc24ndCAoMCwwLDApLlxcbiAgLy8gRnJvbSB0aGUgYWJvdmUgaWYtc3RhdGVtZW50IHdlIGhhdmUgfHxhfHwgPiAwICBVICB8fGJ8fCA+IDAuXFxuICAvLyBBc3NpZ24geiA9IDAsIHggPSAtYiwgeSA9IGE6XFxuICAvLyBhKi1iICsgYiphICsgYyowID0gLWJhICsgYmEgKyAwID0gMFxcbiAgaWYgKHYueCp2LnggPiB2Lnoqdi56IHx8IHYueSp2LnkgPiB2Lnoqdi56KSB7XFxuICAgIHJldHVybiBub3JtYWxpemUodmVjMygtdi55LCB2LngsIDAuMCkpO1xcbiAgfSBlbHNlIHtcXG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKDAuMCwgdi56LCAtdi55KSk7XFxuICB9XFxufVxcblxcbi8vIENhbGN1bGF0ZSB0aGUgdHViZSB2ZXJ0ZXggYW5kIG5vcm1hbCBhdCB0aGUgZ2l2ZW4gaW5kZXguXFxuLy9cXG4vLyBUaGUgcmV0dXJuZWQgdmVydGV4IGlzIGZvciBhIHR1YmUgcmluZyB3aXRoIGl0cyBjZW50ZXIgYXQgb3JpZ2luLCByYWRpdXMgb2YgbGVuZ3RoKGQpLCBwb2ludGluZyBpbiB0aGUgZGlyZWN0aW9uIG9mIGQuXFxuLy9cXG4vLyBFYWNoIHR1YmUgc2VnbWVudCBpcyBtYWRlIHVwIG9mIGEgcmluZyBvZiB2ZXJ0aWNlcy5cXG4vLyBUaGVzZSB2ZXJ0aWNlcyBhcmUgdXNlZCB0byBtYWtlIHVwIHRoZSB0cmlhbmdsZXMgb2YgdGhlIHR1YmUgYnkgY29ubmVjdGluZyB0aGVtIHRvZ2V0aGVyIGluIHRoZSB2ZXJ0ZXggYXJyYXkuXFxuLy8gVGhlIGluZGV4ZXMgb2YgdHViZSBzZWdtZW50cyBydW4gZnJvbSAwIHRvIDguXFxuLy9cXG52ZWMzIGdldFR1YmVQb3NpdGlvbih2ZWMzIGQsIGZsb2F0IGluZGV4LCBvdXQgdmVjMyBub3JtYWwpIHtcXG4gIGZsb2F0IHNlZ21lbnRDb3VudCA9IDguMDtcXG5cXG4gIGZsb2F0IGFuZ2xlID0gMi4wICogMy4xNDE1OSAqIChpbmRleCAvIHNlZ21lbnRDb3VudCk7XFxuXFxuICB2ZWMzIHUgPSBnZXRPcnRob2dvbmFsVmVjdG9yKGQpO1xcbiAgdmVjMyB2ID0gbm9ybWFsaXplKGNyb3NzKHUsIGQpKTtcXG5cXG4gIHZlYzMgeCA9IHUgKiBjb3MoYW5nbGUpICogbGVuZ3RoKGQpO1xcbiAgdmVjMyB5ID0gdiAqIHNpbihhbmdsZSkgKiBsZW5ndGgoZCk7XFxuICB2ZWMzIHYzID0geCArIHk7XFxuXFxuICBub3JtYWwgPSBub3JtYWxpemUodjMpO1xcblxcbiAgcmV0dXJuIHYzO1xcbn1cXG5cXG5hdHRyaWJ1dGUgdmVjNCB2ZWN0b3I7XFxuYXR0cmlidXRlIHZlYzQgcG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzQgaWQ7XFxuXFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcbnVuaWZvcm0gZmxvYXQgdHViZVNjYWxlO1xcblxcbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjNCBmX2lkO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzMgbm9ybWFsO1xcbiAgdmVjMyBYWVogPSBnZXRUdWJlUG9zaXRpb24obWF0Myhtb2RlbCkgKiAodHViZVNjYWxlICogdmVjdG9yLncgKiBub3JtYWxpemUodmVjdG9yLnh5eikpLCBwb3NpdGlvbi53LCBub3JtYWwpO1xcbiAgdmVjNCB0dWJlUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24ueHl6LCAxLjApICsgdmVjNChYWVosIDAuMCk7XFxuXFxuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogdHViZVBvc2l0aW9uO1xcbiAgZl9pZCAgICAgICAgPSBpZDtcXG4gIGZfcG9zaXRpb24gID0gcG9zaXRpb24ueHl6O1xcbn1cXG5cIl0pLHM9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcXG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xcbn1cXG5cXG51bmlmb3JtIHZlYzMgIGNsaXBCb3VuZHNbMl07XFxudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XFxuXFxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XFxudmFyeWluZyB2ZWM0IGZfaWQ7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9wb3NpdGlvbikpIGRpc2NhcmQ7XFxuXFxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZCwgZl9pZC54eXopO1xcbn1cIl0pO3IubWVzaFNoYWRlcj17dmVydGV4OmksZnJhZ21lbnQ6YSxhdHRyaWJ1dGVzOlt7bmFtZTpcInBvc2l0aW9uXCIsdHlwZTpcInZlYzRcIn0se25hbWU6XCJub3JtYWxcIix0eXBlOlwidmVjM1wifSx7bmFtZTpcImNvbG9yXCIsdHlwZTpcInZlYzRcIn0se25hbWU6XCJ1dlwiLHR5cGU6XCJ2ZWMyXCJ9LHtuYW1lOlwidmVjdG9yXCIsdHlwZTpcInZlYzRcIn1dfSxyLnBpY2tTaGFkZXI9e3ZlcnRleDpvLGZyYWdtZW50OnMsYXR0cmlidXRlczpbe25hbWU6XCJwb3NpdGlvblwiLHR5cGU6XCJ2ZWM0XCJ9LHtuYW1lOlwiaWRcIix0eXBlOlwidmVjNFwifSx7bmFtZTpcInZlY3RvclwiLHR5cGU6XCJ2ZWM0XCJ9XX19LHtnbHNsaWZ5OjQwMn1dLDMwOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbC1zaGFkZXJcIiksaT10KFwiZ2wtYnVmZmVyXCIpLGE9dChcImdsLXZhb1wiKSxvPXQoXCJnbC10ZXh0dXJlMmRcIikscz10KFwibm9ybWFsc1wiKSxsPXQoXCJnbC1tYXQ0L211bHRpcGx5XCIpLGM9dChcImdsLW1hdDQvaW52ZXJ0XCIpLHU9dChcIm5kYXJyYXlcIiksaD10KFwiY29sb3JtYXBcIiksZj10KFwic2ltcGxpY2lhbC1jb21wbGV4LWNvbnRvdXJcIikscD10KFwidHlwZWRhcnJheS1wb29sXCIpLGQ9dChcIi4vc2hhZGVyc1wiKSxnPWQubWVzaFNoYWRlcix2PWQucGlja1NoYWRlcixtPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiB5KHQsZSxyLG4saSxhLG8scyxsLGMsdSxoLGYscCxkLGcsdix5LHgsYixfLHcsayxBKXt0aGlzLmdsPXQsdGhpcy5jZWxscz1bXSx0aGlzLnBvc2l0aW9ucz1bXSx0aGlzLmludGVuc2l0eT1bXSx0aGlzLnRleHR1cmU9ZSx0aGlzLmRpcnR5PSEwLHRoaXMudHJpU2hhZGVyPXIsdGhpcy5waWNrU2hhZGVyPW4sdGhpcy50cmlhbmdsZVBvc2l0aW9ucz1pLHRoaXMudHJpYW5nbGVWZWN0b3JzPWEsdGhpcy50cmlhbmdsZUNvbG9ycz1zLHRoaXMudHJpYW5nbGVOb3JtYWxzPWMsdGhpcy50cmlhbmdsZVVWcz1sLHRoaXMudHJpYW5nbGVJZHM9byx0aGlzLnRyaWFuZ2xlVkFPPXUsdGhpcy50cmlhbmdsZUNvdW50PTAsdGhpcy5saW5lV2lkdGg9MSx0aGlzLmVkZ2VQb3NpdGlvbnM9aCx0aGlzLmVkZ2VDb2xvcnM9cCx0aGlzLmVkZ2VVVnM9ZCx0aGlzLmVkZ2VJZHM9Zix0aGlzLmVkZ2VWQU89Zyx0aGlzLmVkZ2VDb3VudD0wLHRoaXMucG9pbnRQb3NpdGlvbnM9dix0aGlzLnBvaW50Q29sb3JzPXgsdGhpcy5wb2ludFVWcz1iLHRoaXMucG9pbnRTaXplcz1fLHRoaXMucG9pbnRJZHM9eSx0aGlzLnBvaW50VkFPPXcsdGhpcy5wb2ludENvdW50PTAsdGhpcy5jb250b3VyTGluZVdpZHRoPTEsdGhpcy5jb250b3VyUG9zaXRpb25zPWssdGhpcy5jb250b3VyVkFPPUEsdGhpcy5jb250b3VyQ291bnQ9MCx0aGlzLmNvbnRvdXJDb2xvcj1bMCwwLDBdLHRoaXMuY29udG91ckVuYWJsZT0hMSx0aGlzLnBpY2tJZD0xLHRoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmxpZ2h0UG9zaXRpb249WzFlNSwxZTUsMF0sdGhpcy5hbWJpZW50TGlnaHQ9LjgsdGhpcy5kaWZmdXNlTGlnaHQ9LjgsdGhpcy5zcGVjdWxhckxpZ2h0PTIsdGhpcy5yb3VnaG5lc3M9LjUsdGhpcy5mcmVzbmVsPTEuNSx0aGlzLm9wYWNpdHk9MSx0aGlzLnR1YmVTY2FsZT0xLHRoaXMuX21vZGVsPW0sdGhpcy5fdmlldz1tLHRoaXMuX3Byb2plY3Rpb249bSx0aGlzLl9yZXNvbHV0aW9uPVsxLDFdLHRoaXMucGl4ZWxSYXRpbz0xfXZhciB4PXkucHJvdG90eXBlO2Z1bmN0aW9uIGIodCl7dmFyIGU9bih0LHYudmVydGV4LHYuZnJhZ21lbnQsbnVsbCx2LmF0dHJpYnV0ZXMpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuaWQubG9jYXRpb249MSxlLmF0dHJpYnV0ZXMudmVjdG9yLmxvY2F0aW9uPTUsZX14LmlzT3BhcXVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BhY2l0eT49MX0seC5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BhY2l0eTwxfSx4LnBpY2tTbG90cz0xLHguc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH0seC5oaWdobGlnaHQ9ZnVuY3Rpb24odCl7aWYodCYmdGhpcy5jb250b3VyRW5hYmxlKXtmb3IodmFyIGU9Zih0aGlzLmNlbGxzLHRoaXMuaW50ZW5zaXR5LHQuaW50ZW5zaXR5KSxyPWUuY2VsbHMsbj1lLnZlcnRleElkcyxpPWUudmVydGV4V2VpZ2h0cyxhPXIubGVuZ3RoLG89cC5tYWxsb2NGbG9hdDMyKDYqYSkscz0wLGw9MDtsPGE7KytsKWZvcih2YXIgYz1yW2xdLHU9MDt1PDI7Kyt1KXt2YXIgaD1jWzBdOzI9PT1jLmxlbmd0aCYmKGg9Y1t1XSk7Zm9yKHZhciBkPW5baF1bMF0sZz1uW2hdWzFdLHY9aVtoXSxtPTEtdix5PXRoaXMucG9zaXRpb25zW2RdLHg9dGhpcy5wb3NpdGlvbnNbZ10sYj0wO2I8MzsrK2Ipb1tzKytdPXYqeVtiXSttKnhbYl19dGhpcy5jb250b3VyQ291bnQ9cy8zfDAsdGhpcy5jb250b3VyUG9zaXRpb25zLnVwZGF0ZShvLnN1YmFycmF5KDAscykpLHAuZnJlZShvKX1lbHNlIHRoaXMuY29udG91ckNvdW50PTB9LHgudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e307dmFyIGU9dGhpcy5nbDt0aGlzLmRpcnR5PSEwLFwiY29udG91ckVuYWJsZVwiaW4gdCYmKHRoaXMuY29udG91ckVuYWJsZT10LmNvbnRvdXJFbmFibGUpLFwiY29udG91ckNvbG9yXCJpbiB0JiYodGhpcy5jb250b3VyQ29sb3I9dC5jb250b3VyQ29sb3IpLFwibGluZVdpZHRoXCJpbiB0JiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgpLFwibGlnaHRQb3NpdGlvblwiaW4gdCYmKHRoaXMubGlnaHRQb3NpdGlvbj10LmxpZ2h0UG9zaXRpb24pLFwib3BhY2l0eVwiaW4gdCYmKHRoaXMub3BhY2l0eT10Lm9wYWNpdHkpLFwiYW1iaWVudFwiaW4gdCYmKHRoaXMuYW1iaWVudExpZ2h0PXQuYW1iaWVudCksXCJkaWZmdXNlXCJpbiB0JiYodGhpcy5kaWZmdXNlTGlnaHQ9dC5kaWZmdXNlKSxcInNwZWN1bGFyXCJpbiB0JiYodGhpcy5zcGVjdWxhckxpZ2h0PXQuc3BlY3VsYXIpLFwicm91Z2huZXNzXCJpbiB0JiYodGhpcy5yb3VnaG5lc3M9dC5yb3VnaG5lc3MpLFwiZnJlc25lbFwiaW4gdCYmKHRoaXMuZnJlc25lbD10LmZyZXNuZWwpLHQudGV4dHVyZT8odGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRleHR1cmU9byhlLHQudGV4dHVyZSkpOnQuY29sb3JtYXAmJih0aGlzLnRleHR1cmUuc2hhcGU9WzI1NiwyNTZdLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZS5MSU5FQVJfTUlQTUFQX0xJTkVBUix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUuTElORUFSLHRoaXMudGV4dHVyZS5zZXRQaXhlbHMoZnVuY3Rpb24odCl7Zm9yKHZhciBlPWgoe2NvbG9ybWFwOnQsbnNoYWRlczoyNTYsZm9ybWF0OlwicmdiYVwifSkscj1uZXcgVWludDhBcnJheSgxMDI0KSxuPTA7bjwyNTY7KytuKXtmb3IodmFyIGk9ZVtuXSxhPTA7YTwzOysrYSlyWzQqbithXT1pW2FdO3JbNCpuKzNdPTI1NSppWzNdfXJldHVybiB1KHIsWzI1NiwyNTYsNF0sWzQsMCwxXSl9KHQuY29sb3JtYXApKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXAoKSk7dmFyIHI9dC5jZWxscyxuPXQucG9zaXRpb25zLGk9dC52ZWN0b3JzO2lmKG4mJnImJmkpe3ZvaWQgMCE9PXQudHViZVNjYWxlJiYodGhpcy50dWJlU2NhbGU9dC50dWJlU2NhbGUpO3ZhciBhPVtdLGw9W10sYz1bXSxmPVtdLHA9W10sZD1bXSxnPVtdLHY9W10sbT1bXSx5PVtdLHg9W10sYj1bXSxfPVtdLHc9W10saz1bXTt0aGlzLmNlbGxzPXIsdGhpcy5wb3NpdGlvbnM9bix0aGlzLnZlY3RvcnM9aTt2YXIgQT10LnZlcnRleE5vcm1hbHMsVD10LmNlbGxOb3JtYWxzLE09dm9pZCAwPT09dC52ZXJ0ZXhOb3JtYWxzRXBzaWxvbj8xZS02OnQudmVydGV4Tm9ybWFsc0Vwc2lsb24sUz12b2lkIDA9PT10LmZhY2VOb3JtYWxzRXBzaWxvbj8xZS02OnQuZmFjZU5vcm1hbHNFcHNpbG9uO3QudXNlRmFjZXROb3JtYWxzJiYhVCYmKFQ9cy5mYWNlTm9ybWFscyhyLG4sUykpLFR8fEF8fChBPXMudmVydGV4Tm9ybWFscyhyLG4sTSkpO3ZhciBFPXQudmVydGV4Q29sb3JzLEM9dC5jZWxsQ29sb3JzLEw9dC5tZXNoQ29sb3J8fFsxLDEsMSwxXSx6PXQudmVydGV4VVZzLE89dC52ZXJ0ZXhJbnRlbnNpdHksST10LmNlbGxVVnMsRD10LmNlbGxJbnRlbnNpdHksUD0xLzAsUj0tMS8wO2lmKCF6JiYhSSlpZihPKWlmKHQudmVydGV4SW50ZW5zaXR5Qm91bmRzKVA9K3QudmVydGV4SW50ZW5zaXR5Qm91bmRzWzBdLFI9K3QudmVydGV4SW50ZW5zaXR5Qm91bmRzWzFdO2Vsc2UgZm9yKHZhciBGPTA7RjxPLmxlbmd0aDsrK0Ype3ZhciBCPU9bRl07UD1NYXRoLm1pbihQLEIpLFI9TWF0aC5tYXgoUixCKX1lbHNlIGlmKEQpZm9yKEY9MDtGPEQubGVuZ3RoOysrRil7Qj1EW0ZdO1A9TWF0aC5taW4oUCxCKSxSPU1hdGgubWF4KFIsQil9ZWxzZSBmb3IoRj0wO0Y8bi5sZW5ndGg7KytGKXtCPW5bRl1bMl07UD1NYXRoLm1pbihQLEIpLFI9TWF0aC5tYXgoUixCKX10aGlzLmludGVuc2l0eT1PfHwoRD9mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSluW2ldPTA7dmFyIGE9dC5sZW5ndGg7Zm9yKGk9MDtpPGE7KytpKWZvcih2YXIgbz10W2ldLHM9MDtzPG8ubGVuZ3RoOysrcyluW29bc11dPXJbaV07cmV0dXJuIG59KHIsbi5sZW5ndGgsRCk6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09dFtuXVsyXTtyZXR1cm4gcn0obikpO3ZhciBOPXQucG9pbnRTaXplcyxqPXQucG9pbnRTaXplfHwxO3RoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dO2ZvcihGPTA7RjxuLmxlbmd0aDsrK0YpZm9yKHZhciBWPW5bRl0sVT0wO1U8MzsrK1UpIWlzTmFOKFZbVV0pJiZpc0Zpbml0ZShWW1VdKSYmKHRoaXMuYm91bmRzWzBdW1VdPU1hdGgubWluKHRoaXMuYm91bmRzWzBdW1VdLFZbVV0pLHRoaXMuYm91bmRzWzFdW1VdPU1hdGgubWF4KHRoaXMuYm91bmRzWzFdW1VdLFZbVV0pKTt2YXIgcT0wLEg9MCxHPTA7dDpmb3IoRj0wO0Y8ci5sZW5ndGg7KytGKXt2YXIgWT1yW0ZdO3N3aXRjaChZLmxlbmd0aCl7Y2FzZSAxOmZvcihWPW5bWD1ZWzBdXSxVPTA7VTwzOysrVSlpZihpc05hTihWW1VdKXx8IWlzRmluaXRlKFZbVV0pKWNvbnRpbnVlIHQ7eC5wdXNoKFZbMF0sVlsxXSxWWzJdLFZbM10pLDM9PT0oWj1FP0VbWF06Qz9DW0ZdOkwpLmxlbmd0aD9iLnB1c2goWlswXSxaWzFdLFpbMl0sMSk6Yi5wdXNoKFpbMF0sWlsxXSxaWzJdLFpbM10pLCQ9ej96W1hdOk8/WyhPW1hdLVApLyhSLVApLDBdOkk/SVtGXTpEP1soRFtGXS1QKS8oUi1QKSwwXTpbKFZbMl0tUCkvKFItUCksMF0sXy5wdXNoKCRbMF0sJFsxXSksTj93LnB1c2goTltYXSk6dy5wdXNoKGopLGsucHVzaChGKSxHKz0xO2JyZWFrO2Nhc2UgMjpmb3IoVT0wO1U8MjsrK1Upe1Y9bltYPVlbVV1dO2Zvcih2YXIgVz0wO1c8MzsrK1cpaWYoaXNOYU4oVltXXSl8fCFpc0Zpbml0ZShWW1ddKSljb250aW51ZSB0fWZvcihVPTA7VTwyOysrVSl7Vj1uW1g9WVtVXV07Zy5wdXNoKFZbMF0sVlsxXSxWWzJdKSwzPT09KFo9RT9FW1hdOkM/Q1tGXTpMKS5sZW5ndGg/di5wdXNoKFpbMF0sWlsxXSxaWzJdLDEpOnYucHVzaChaWzBdLFpbMV0sWlsyXSxaWzNdKSwkPXo/eltYXTpPP1soT1tYXS1QKS8oUi1QKSwwXTpJP0lbRl06RD9bKERbRl0tUCkvKFItUCksMF06WyhWWzJdLVApLyhSLVApLDBdLG0ucHVzaCgkWzBdLCRbMV0pLHkucHVzaChGKX1IKz0xO2JyZWFrO2Nhc2UgMzpmb3IoVT0wO1U8MzsrK1UpZm9yKFY9bltYPVlbVV1dLFc9MDtXPDM7KytXKWlmKGlzTmFOKFZbV10pfHwhaXNGaW5pdGUoVltXXSkpY29udGludWUgdDtmb3IoVT0wO1U8MzsrK1Upe3ZhciBYO1Y9bltYPVlbMi1VXV07YS5wdXNoKFZbMF0sVlsxXSxWWzJdLFZbM10pO3ZhciBaLCQsSixLPWlbWF07bC5wdXNoKEtbMF0sS1sxXSxLWzJdLEtbM10pLDM9PT0oWj1FP0VbWF06Qz9DW0ZdOkwpLmxlbmd0aD9jLnB1c2goWlswXSxaWzFdLFpbMl0sMSk6Yy5wdXNoKFpbMF0sWlsxXSxaWzJdLFpbM10pLCQ9ej96W1hdOk8/WyhPW1hdLVApLyhSLVApLDBdOkk/SVtGXTpEP1soRFtGXS1QKS8oUi1QKSwwXTpbKFZbMl0tUCkvKFItUCksMF0scC5wdXNoKCRbMF0sJFsxXSksSj1BP0FbWF06VFtGXSxmLnB1c2goSlswXSxKWzFdLEpbMl0pLGQucHVzaChGKX1xKz0xfX10aGlzLnBvaW50Q291bnQ9Ryx0aGlzLmVkZ2VDb3VudD1ILHRoaXMudHJpYW5nbGVDb3VudD1xLHRoaXMucG9pbnRQb3NpdGlvbnMudXBkYXRlKHgpLHRoaXMucG9pbnRDb2xvcnMudXBkYXRlKGIpLHRoaXMucG9pbnRVVnMudXBkYXRlKF8pLHRoaXMucG9pbnRTaXplcy51cGRhdGUodyksdGhpcy5wb2ludElkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KGspKSx0aGlzLmVkZ2VQb3NpdGlvbnMudXBkYXRlKGcpLHRoaXMuZWRnZUNvbG9ycy51cGRhdGUodiksdGhpcy5lZGdlVVZzLnVwZGF0ZShtKSx0aGlzLmVkZ2VJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheSh5KSksdGhpcy50cmlhbmdsZVBvc2l0aW9ucy51cGRhdGUoYSksdGhpcy50cmlhbmdsZVZlY3RvcnMudXBkYXRlKGwpLHRoaXMudHJpYW5nbGVDb2xvcnMudXBkYXRlKGMpLHRoaXMudHJpYW5nbGVVVnMudXBkYXRlKHApLHRoaXMudHJpYW5nbGVOb3JtYWxzLnVwZGF0ZShmKSx0aGlzLnRyaWFuZ2xlSWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoZCkpfX0seC5kcmF3VHJhbnNwYXJlbnQ9eC5kcmF3PWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHxtLG49dC52aWV3fHxtLGk9dC5wcm9qZWN0aW9ufHxtLGE9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28pYVswXVtvXT1NYXRoLm1heChhWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksYVsxXVtvXT1NYXRoLm1pbihhWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dmFyIHM9e21vZGVsOnIsdmlldzpuLHByb2plY3Rpb246aSxpbnZlcnNlTW9kZWw6bS5zbGljZSgpLGNsaXBCb3VuZHM6YSxrYW1iaWVudDp0aGlzLmFtYmllbnRMaWdodCxrZGlmZnVzZTp0aGlzLmRpZmZ1c2VMaWdodCxrc3BlY3VsYXI6dGhpcy5zcGVjdWxhckxpZ2h0LHJvdWdobmVzczp0aGlzLnJvdWdobmVzcyxmcmVzbmVsOnRoaXMuZnJlc25lbCxleWVQb3NpdGlvbjpbMCwwLDBdLGxpZ2h0UG9zaXRpb246WzAsMCwwXSxvcGFjaXR5OnRoaXMub3BhY2l0eSx0dWJlU2NhbGU6dGhpcy50dWJlU2NhbGUsY29udG91ckNvbG9yOnRoaXMuY29udG91ckNvbG9yLHRleHR1cmU6MH07cy5pbnZlcnNlTW9kZWw9YyhzLmludmVyc2VNb2RlbCxzLm1vZGVsKSxlLmRpc2FibGUoZS5DVUxMX0ZBQ0UpLHRoaXMudGV4dHVyZS5iaW5kKDApO3ZhciB1PW5ldyBBcnJheSgxNik7bCh1LHMudmlldyxzLm1vZGVsKSxsKHUscy5wcm9qZWN0aW9uLHUpLGModSx1KTtmb3Iobz0wO288MzsrK28pcy5leWVQb3NpdGlvbltvXT11WzEyK29dL3VbMTVdO3ZhciBoPXVbMTVdO2ZvcihvPTA7bzwzOysrbyloKz10aGlzLmxpZ2h0UG9zaXRpb25bb10qdVs0Km8rM107Zm9yKG89MDtvPDM7KytvKXtmb3IodmFyIGY9dVsxMitvXSxwPTA7cDwzOysrcClmKz11WzQqcCtvXSp0aGlzLmxpZ2h0UG9zaXRpb25bcF07cy5saWdodFBvc2l0aW9uW29dPWYvaH1pZih0aGlzLnRyaWFuZ2xlQ291bnQ+MCl7dmFyIGQ9dGhpcy50cmlTaGFkZXI7ZC5iaW5kKCksZC51bmlmb3Jtcz1zLHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpfX0seC5kcmF3UGljaz1mdW5jdGlvbih0KXt0PXR8fHt9O2Zvcih2YXIgZT10aGlzLmdsLHI9dC5tb2RlbHx8bSxuPXQudmlld3x8bSxpPXQucHJvamVjdGlvbnx8bSxhPVtbLTFlNiwtMWU2LC0xZTZdLFsxZTYsMWU2LDFlNl1dLG89MDtvPDM7KytvKWFbMF1bb109TWF0aC5tYXgoYVswXVtvXSx0aGlzLmNsaXBCb3VuZHNbMF1bb10pLGFbMV1bb109TWF0aC5taW4oYVsxXVtvXSx0aGlzLmNsaXBCb3VuZHNbMV1bb10pO3RoaXMuX21vZGVsPVtdLnNsaWNlLmNhbGwociksdGhpcy5fdmlldz1bXS5zbGljZS5jYWxsKG4pLHRoaXMuX3Byb2plY3Rpb249W10uc2xpY2UuY2FsbChpKSx0aGlzLl9yZXNvbHV0aW9uPVtlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdO3ZhciBzPXttb2RlbDpyLHZpZXc6bixwcm9qZWN0aW9uOmksY2xpcEJvdW5kczphLHR1YmVTY2FsZTp0aGlzLnR1YmVTY2FsZSxwaWNrSWQ6dGhpcy5waWNrSWQvMjU1fSxsPXRoaXMucGlja1NoYWRlcjtsLmJpbmQoKSxsLnVuaWZvcm1zPXMsdGhpcy50cmlhbmdsZUNvdW50PjAmJih0aGlzLnRyaWFuZ2xlVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRVMsMCwzKnRoaXMudHJpYW5nbGVDb3VudCksdGhpcy50cmlhbmdsZVZBTy51bmJpbmQoKSksdGhpcy5lZGdlQ291bnQ+MCYmKHRoaXMuZWRnZVZBTy5iaW5kKCksZS5saW5lV2lkdGgodGhpcy5saW5lV2lkdGgqdGhpcy5waXhlbFJhdGlvKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLDIqdGhpcy5lZGdlQ291bnQpLHRoaXMuZWRnZVZBTy51bmJpbmQoKSl9LHgucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7dmFyIGU9dC52YWx1ZVswXSsyNTYqdC52YWx1ZVsxXSs2NTUzNip0LnZhbHVlWzJdLHI9dGhpcy5jZWxsc1tlXSxuPXRoaXMucG9zaXRpb25zW3JbMV1dLnNsaWNlKDAsMyk7cmV0dXJue2luZGV4OmUscG9zaXRpb246bixpbnRlbnNpdHk6dGhpcy5pbnRlbnNpdHlbclsxXV0sdmVsb2NpdHk6dGhpcy52ZWN0b3JzW3JbMV1dLnNsaWNlKDAsMyksZGl2ZXJnZW5jZTp0aGlzLnZlY3RvcnNbclsxXV1bM10sZGF0YUNvb3JkaW5hdGU6bn19LHguZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudGV4dHVyZS5kaXNwb3NlKCksdGhpcy50cmlTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVZBTy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVZlY3RvcnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVDb2xvcnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVVVnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVOb3JtYWxzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlSWRzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VWQU8uZGlzcG9zZSgpLHRoaXMuZWRnZVBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5lZGdlQ29sb3JzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VVVnMuZGlzcG9zZSgpLHRoaXMuZWRnZUlkcy5kaXNwb3NlKCksdGhpcy5wb2ludFZBTy5kaXNwb3NlKCksdGhpcy5wb2ludFBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5wb2ludENvbG9ycy5kaXNwb3NlKCksdGhpcy5wb2ludFVWcy5kaXNwb3NlKCksdGhpcy5wb2ludFNpemVzLmRpc3Bvc2UoKSx0aGlzLnBvaW50SWRzLmRpc3Bvc2UoKSx0aGlzLmNvbnRvdXJWQU8uZGlzcG9zZSgpLHRoaXMuY29udG91clBvc2l0aW9ucy5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpezE9PT1hcmd1bWVudHMubGVuZ3RoJiYodD0oZT10KS5nbCk7dmFyIHI9ZS50cmlTaGFkZXJ8fGZ1bmN0aW9uKHQpe3ZhciBlPW4odCxnLnZlcnRleCxnLmZyYWdtZW50LG51bGwsZy5hdHRyaWJ1dGVzKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTIsZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTMsZS5hdHRyaWJ1dGVzLnZlY3Rvci5sb2NhdGlvbj01LGV9KHQpLHM9Yih0KSxsPW8odCx1KG5ldyBVaW50OEFycmF5KFsyNTUsMjU1LDI1NSwyNTVdKSxbMSwxLDRdKSk7bC5nZW5lcmF0ZU1pcG1hcCgpLGwubWluRmlsdGVyPXQuTElORUFSX01JUE1BUF9MSU5FQVIsbC5tYWdGaWx0ZXI9dC5MSU5FQVI7dmFyIGM9aSh0KSxoPWkodCksZj1pKHQpLHA9aSh0KSxkPWkodCksdj1pKHQpLG09YSh0LFt7YnVmZmVyOmMsdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjp2LHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOmYsdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjpwLHR5cGU6dC5GTE9BVCxzaXplOjJ9LHtidWZmZXI6ZCx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOmgsdHlwZTp0LkZMT0FULHNpemU6NH1dKSx4PWkodCksXz1pKHQpLHc9aSh0KSxrPWkodCksQT1hKHQsW3tidWZmZXI6eCx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOmssdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6Xyx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOncsdHlwZTp0LkZMT0FULHNpemU6Mn1dKSxUPWkodCksTT1pKHQpLFM9aSh0KSxFPWkodCksQz1pKHQpLEw9YSh0LFt7YnVmZmVyOlQsdHlwZTp0LkZMT0FULHNpemU6M30se2J1ZmZlcjpDLHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOk0sdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjpTLHR5cGU6dC5GTE9BVCxzaXplOjJ9LHtidWZmZXI6RSx0eXBlOnQuRkxPQVQsc2l6ZToxfV0pLHo9aSh0KSxPPW5ldyB5KHQsbCxyLHMsYyxoLHYsZixwLGQsbSx4LGssXyx3LEEsVCxDLE0sUyxFLEwseixhKHQsW3tidWZmZXI6eix0eXBlOnQuRkxPQVQsc2l6ZTozfV0pKTtyZXR1cm4gTy51cGRhdGUoZSksT319LHtcIi4vc2hhZGVyc1wiOjMwOCxjb2xvcm1hcDoxMTcsXCJnbC1idWZmZXJcIjoyMzgsXCJnbC1tYXQ0L2ludmVydFwiOjI2MixcImdsLW1hdDQvbXVsdGlwbHlcIjoyNjQsXCJnbC1zaGFkZXJcIjoyOTgsXCJnbC10ZXh0dXJlMmRcIjozMTUsXCJnbC12YW9cIjozMjAsbmRhcnJheTo0NDMsbm9ybWFsczo0NDYsXCJzaW1wbGljaWFsLWNvbXBsZXgtY29udG91clwiOjUwMyxcInR5cGVkYXJyYXktcG9vbFwiOjUzMH1dLDMxMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbC12ZWMzXCIpLGk9dChcImdsLXZlYzRcIiksYT1mdW5jdGlvbih0LGUscixhKXtmb3IodmFyIG89MCxzPTA7czx0Lmxlbmd0aDtzKyspZm9yKHZhciBsPXRbc10udmVsb2NpdGllcyxjPTA7YzxsLmxlbmd0aDtjKyspe3ZhciB1PW4ubGVuZ3RoKGxbY10pO3U+byYmKG89dSl9dmFyIGg9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvLHMsbCxjPXQucG9pbnRzLHU9dC52ZWxvY2l0aWVzLGg9dC5kaXZlcmdlbmNlcztuLnNldChuLmNyZWF0ZSgpLDAsMSwwKSxuLmNyZWF0ZSgpLG4uY3JlYXRlKCk7bi5jcmVhdGUoKTtmb3IodmFyIGY9W10scD1bXSxkPVtdLGc9W10sdj1bXSxtPVtdLHk9MCx4PTAsYj1pLmNyZWF0ZSgpLF89aS5jcmVhdGUoKSx3PTA7dzxjLmxlbmd0aDt3Kyspe289Y1t3XSxzPXVbd10sbD1oW3ddLDA9PT1lJiYobD0uMDUqcikseD1uLmxlbmd0aChzKS9hLGI9aS5jcmVhdGUoKSxuLmNvcHkoYixzKSxiWzNdPWw7Zm9yKHZhciBrPTA7azw4O2srKyl2W2tdPVtvWzBdLG9bMV0sb1syXSxrXTtpZihnLmxlbmd0aD4wKWZvcihrPTA7azw4O2srKyl7dmFyIEE9KGsrMSklODtmLnB1c2goZ1trXSx2W2tdLHZbQV0sdltBXSxnW0FdLGdba10pLGQucHVzaChfLGIsYixiLF8sXyksbS5wdXNoKHkseCx4LHgseSx5KSxwLnB1c2goW2YubGVuZ3RoLTYsZi5sZW5ndGgtNSxmLmxlbmd0aC00XSxbZi5sZW5ndGgtMyxmLmxlbmd0aC0yLGYubGVuZ3RoLTFdKX12YXIgVD1nO2c9dix2PVQsVD1fLF89YixiPVQsVD15LHk9eCx4PVR9cmV0dXJue3Bvc2l0aW9uczpmLGNlbGxzOnAsdmVjdG9yczpkLHZlcnRleEludGVuc2l0eTptfX0odCxyLGEsbyl9KSxmPVtdLHA9W10sZD1bXSxnPVtdO2ZvcihzPTA7czxoLmxlbmd0aDtzKyspe3ZhciB2PWhbc10sbT1mLmxlbmd0aDtmPWYuY29uY2F0KHYucG9zaXRpb25zKSxkPWQuY29uY2F0KHYudmVjdG9ycyksZz1nLmNvbmNhdCh2LnZlcnRleEludGVuc2l0eSk7Zm9yKGM9MDtjPHYuY2VsbHMubGVuZ3RoO2MrKyl7dmFyIHk9di5jZWxsc1tjXSx4PVtdO3AucHVzaCh4KTtmb3IodmFyIGI9MDtiPHkubGVuZ3RoO2IrKyl4LnB1c2goeVtiXSttKX19cmV0dXJue3Bvc2l0aW9uczpmLGNlbGxzOnAsdmVjdG9yczpkLHZlcnRleEludGVuc2l0eTpnLGNvbG9ybWFwOmV9fSxvPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5jcmVhdGUoKSxpPTFlLTQ7bi5hZGQocix0LFtpLDAsMF0pO3ZhciBhPXRoaXMuZ2V0VmVsb2NpdHkocik7bi5zdWJ0cmFjdChhLGEsZSksbi5zY2FsZShhLGEsMWU0KSxuLmFkZChyLHQsWzAsaSwwXSk7dmFyIG89dGhpcy5nZXRWZWxvY2l0eShyKTtuLnN1YnRyYWN0KG8sbyxlKSxuLnNjYWxlKG8sbywxZTQpLG4uYWRkKHIsdCxbMCwwLGldKTt2YXIgcz10aGlzLmdldFZlbG9jaXR5KHIpO3JldHVybiBuLnN1YnRyYWN0KHMscyxlKSxuLnNjYWxlKHMscywxZTQpLG4uYWRkKHIsYSxvKSxuLmFkZChyLHIscykscn0scz1mdW5jdGlvbih0KXtyZXR1cm4gZih0LHRoaXMudmVjdG9ycyx0aGlzLm1lc2hncmlkLHRoaXMuY2xhbXBCb3JkZXJzKX0sbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO2lmKG49PT1lKXJldHVybiByO2lmKG4+ZSlyZXR1cm4gci0xfXJldHVybiByfSxjPW4uY3JlYXRlKCksdT1uLmNyZWF0ZSgpLGg9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PGU/ZTp0PnI/cjp0fSxmPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXRbMF0sbz10WzFdLHM9dFsyXSxmPXJbMF0ubGVuZ3RoLHA9clsxXS5sZW5ndGgsZD1yWzJdLmxlbmd0aCxnPWwoclswXSxhKSx2PWwoclsxXSxvKSxtPWwoclsyXSxzKSx5PWcrMSx4PXYrMSxiPW0rMTtpZihyWzBdW2ddPT09YSYmKHk9ZyksclsxXVt2XT09PW8mJih4PXYpLHJbMl1bbV09PT1zJiYoYj1tKSxpJiYoZz1oKGcsMCxmLTEpLHk9aCh5LDAsZi0xKSx2PWgodiwwLHAtMSkseD1oKHgsMCxwLTEpLG09aChtLDAsZC0xKSxiPWgoYiwwLGQtMSkpLGc8MHx8djwwfHxtPDB8fHk+PWZ8fHg+PXB8fGI+PWQpcmV0dXJuIG4uY3JlYXRlKCk7dmFyIF89KGEtclswXVtnXSkvKHJbMF1beV0tclswXVtnXSksdz0oby1yWzFdW3ZdKS8oclsxXVt4XS1yWzFdW3ZdKSxrPShzLXJbMl1bbV0pLyhyWzJdW2JdLXJbMl1bbV0pOyhfPDB8fF8+MXx8aXNOYU4oXykpJiYoXz0wKSwodzwwfHx3PjF8fGlzTmFOKHcpKSYmKHc9MCksKGs8MHx8az4xfHxpc05hTihrKSkmJihrPTApO3ZhciBBPW0qZipwLFQ9YipmKnAsTT12KmYsUz14KmYsRT1nLEM9eSxMPWVbTStBK0VdLHo9ZVtNK0ErQ10sTz1lW1MrQStFXSxJPWVbUytBK0NdLEQ9ZVtNK1QrRV0sUD1lW00rVCtDXSxSPWVbUytUK0VdLEY9ZVtTK1QrQ10sQj1uLmNyZWF0ZSgpO3JldHVybiBuLmxlcnAoQixMLHosXyksbi5sZXJwKGMsTyxJLF8pLG4ubGVycChCLEIsYyx3KSxuLmxlcnAoYyxELFAsXyksbi5sZXJwKHUsUixGLF8pLG4ubGVycChjLGMsdSx3KSxuLmxlcnAoQixCLGMsayksQn0scD1mdW5jdGlvbih0KXt2YXIgZT0xLzA7dC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pO2Zvcih2YXIgcj0xO3I8dC5sZW5ndGg7cisrKXt2YXIgbj1NYXRoLmFicyh0W3JdLXRbci0xXSk7bjxlJiYoZT1uKX1yZXR1cm4gZX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGFydGluZ1Bvc2l0aW9ucyxpPXQubWF4TGVuZ3RofHwxZTMsbD10LnR1YmVTaXplfHwxLGM9dC5hYnNvbHV0ZVR1YmVTaXplO3QuZ2V0RGl2ZXJnZW5jZXx8KHQuZ2V0RGl2ZXJnZW5jZT1vKSx0LmdldFZlbG9jaXR5fHwodC5nZXRWZWxvY2l0eT1zKSx2b2lkIDA9PT10LmNsYW1wQm9yZGVycyYmKHQuY2xhbXBCb3JkZXJzPSEwKTt2YXIgdT1bXSxoPWVbMF1bMF0sZj1lWzBdWzFdLGQ9ZVswXVsyXSxnPWVbMV1bMF0sdj1lWzFdWzFdLG09ZVsxXVsyXSx5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdO3JldHVybiByPj1oJiZyPD1nJiZuPj1mJiZuPD12JiZpPj1kJiZpPD1tfSx4PTEwKm4uZGlzdGFuY2UoZVswXSxlWzFdKS9pLGI9eCp4LF89MSx3PTA7bi5jcmVhdGUoKTtyLmxlbmd0aD49MiYmKF89ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9W10sbj1bXSxpPXt9LGE9e30sbz17fSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPXRbc10sYz1sWzBdLHU9bFsxXSxoPWxbMl07aVtjXXx8KGUucHVzaChjKSxpW2NdPSEwKSxhW3VdfHwoci5wdXNoKHUpLGFbdV09ITApLG9baF18fChuLnB1c2goaCksb1toXT0hMCl9dmFyIGY9cChlKSxkPXAociksZz1wKG4pLHY9TWF0aC5taW4oZixkLGcpO3JldHVybiBpc0Zpbml0ZSh2KT92OjF9KHIpKTtmb3IodmFyIGs9MDtrPHIubGVuZ3RoO2srKyl7dmFyIEE9bi5jcmVhdGUoKTtuLmNvcHkoQSxyW2tdKTt2YXIgVD1bQV0sTT1bXSxTPXQuZ2V0VmVsb2NpdHkoQSksRT1BO00ucHVzaChTKTt2YXIgQz1bXSxMPXQuZ2V0RGl2ZXJnZW5jZShBLFMpOyhEPW4ubGVuZ3RoKEwpKT53JiYhaXNOYU4oRCkmJmlzRmluaXRlKEQpJiYodz1EKSxDLnB1c2goRCksdS5wdXNoKHtwb2ludHM6VCx2ZWxvY2l0aWVzOk0sZGl2ZXJnZW5jZXM6Q30pO2Zvcih2YXIgej0wO3o8MTAwKmkmJlQubGVuZ3RoPGkmJnkoMCxBKTspe3orKzt2YXIgTz1uLmNsb25lKFMpLEk9bi5zcXVhcmVkTGVuZ3RoKE8pO2lmKDA9PT1JKWJyZWFrO2lmKEk+YiYmbi5zY2FsZShPLE8seC9NYXRoLnNxcnQoSSkpLG4uYWRkKE8sTyxBKSxTPXQuZ2V0VmVsb2NpdHkoTyksbi5zcXVhcmVkRGlzdGFuY2UoRSxPKS1iPi0xZS00KmIpe1QucHVzaChPKSxFPU8sTS5wdXNoKFMpO0w9dC5nZXREaXZlcmdlbmNlKE8sUyk7KEQ9bi5sZW5ndGgoTCkpPncmJiFpc05hTihEKSYmaXNGaW5pdGUoRCkmJih3PUQpLEMucHVzaChEKX1BPU99fWZvcihrPTA7azxDLmxlbmd0aDtrKyspe3ZhciBEPUNba107IWlzTmFOKEQpJiZpc0Zpbml0ZShEKXx8KENba109dyl9dmFyIFA9YSh1LHQuY29sb3JtYXAsdyxfKTtyZXR1cm4gYz9QLnR1YmVTY2FsZT1jOigwPT09dyYmKHc9MSksUC50dWJlU2NhbGU9LjUqbCpfL3cpLFB9LGUuZXhwb3J0cy5jcmVhdGVUdWJlTWVzaD10KFwiLi9saWIvdHViZW1lc2hcIil9LHtcIi4vbGliL3R1YmVtZXNoXCI6MzA5LFwiZ2wtdmVjM1wiOjMzOSxcImdsLXZlYzRcIjozNzV9XSwzMTE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiZ2wtc2hhZGVyXCIpLGk9dChcImdsc2xpZnlcIiksYT1pKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWM0IHV2O1xcbmF0dHJpYnV0ZSB2ZWMzIGY7XFxuYXR0cmlidXRlIHZlYzMgbm9ybWFsO1xcblxcbnVuaWZvcm0gdmVjMyBvYmplY3RPZmZzZXQ7XFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uLCBpbnZlcnNlTW9kZWw7XFxudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb24sIGV5ZVBvc2l0aW9uO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGNvbG9ybWFwO1xcblxcbnZhcnlpbmcgZmxvYXQgdmFsdWUsIGtpbGw7XFxudmFyeWluZyB2ZWMzIHdvcmxkQ29vcmRpbmF0ZTtcXG52YXJ5aW5nIHZlYzIgcGxhbmVDb29yZGluYXRlO1xcbnZhcnlpbmcgdmVjMyBsaWdodERpcmVjdGlvbiwgZXllRGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgdmVjMyBsb2NhbENvb3JkaW5hdGUgPSB2ZWMzKHV2Lnp3LCBmLngpO1xcbiAgd29ybGRDb29yZGluYXRlID0gb2JqZWN0T2Zmc2V0ICsgbG9jYWxDb29yZGluYXRlO1xcbiAgdmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHdvcmxkQ29vcmRpbmF0ZSwgMS4wKTtcXG4gIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xcbiAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XFxuICBraWxsID0gZi55O1xcbiAgdmFsdWUgPSBmLno7XFxuICBwbGFuZUNvb3JkaW5hdGUgPSB1di54eTtcXG5cXG4gIHZDb2xvciA9IHRleHR1cmUyRChjb2xvcm1hcCwgdmVjMih2YWx1ZSwgdmFsdWUpKTtcXG5cXG4gIC8vTGlnaHRpbmcgZ2VvbWV0cnkgcGFyYW1ldGVyc1xcbiAgdmVjNCBjYW1lcmFDb29yZGluYXRlID0gdmlldyAqIHdvcmxkUG9zaXRpb247XFxuICBjYW1lcmFDb29yZGluYXRlLnh5eiAvPSBjYW1lcmFDb29yZGluYXRlLnc7XFxuICBsaWdodERpcmVjdGlvbiA9IGxpZ2h0UG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcXG4gIGV5ZURpcmVjdGlvbiAgID0gZXllUG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcXG4gIHN1cmZhY2VOb3JtYWwgID0gbm9ybWFsaXplKCh2ZWM0KG5vcm1hbCwwKSAqIGludmVyc2VNb2RlbCkueHl6KTtcXG59XFxuXCJdKSxvPWkoW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuZmxvYXQgYmVja21hbm5EaXN0cmlidXRpb24oZmxvYXQgeCwgZmxvYXQgcm91Z2huZXNzKSB7XFxuICBmbG9hdCBOZG90SCA9IG1heCh4LCAwLjAwMDEpO1xcbiAgZmxvYXQgY29zMkFscGhhID0gTmRvdEggKiBOZG90SDtcXG4gIGZsb2F0IHRhbjJBbHBoYSA9IChjb3MyQWxwaGEgLSAxLjApIC8gY29zMkFscGhhO1xcbiAgZmxvYXQgcm91Z2huZXNzMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcXG4gIGZsb2F0IGRlbm9tID0gMy4xNDE1OTI2NTM1ODk3OTMgKiByb3VnaG5lc3MyICogY29zMkFscGhhICogY29zMkFscGhhO1xcbiAgcmV0dXJuIGV4cCh0YW4yQWxwaGEgLyByb3VnaG5lc3MyKSAvIGRlbm9tO1xcbn1cXG5cXG5mbG9hdCBiZWNrbWFublNwZWN1bGFyKFxcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcXG4gIHZlYzMgdmlld0RpcmVjdGlvbixcXG4gIHZlYzMgc3VyZmFjZU5vcm1hbCxcXG4gIGZsb2F0IHJvdWdobmVzcykge1xcbiAgcmV0dXJuIGJlY2ttYW5uRGlzdHJpYnV0aW9uKGRvdChzdXJmYWNlTm9ybWFsLCBub3JtYWxpemUobGlnaHREaXJlY3Rpb24gKyB2aWV3RGlyZWN0aW9uKSksIHJvdWdobmVzcyk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XFxuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XFxufVxcblxcbnVuaWZvcm0gdmVjMyBsb3dlckJvdW5kLCB1cHBlckJvdW5kO1xcbnVuaWZvcm0gZmxvYXQgY29udG91clRpbnQ7XFxudW5pZm9ybSB2ZWM0IGNvbnRvdXJDb2xvcjtcXG51bmlmb3JtIHNhbXBsZXIyRCBjb2xvcm1hcDtcXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcXG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcywgZnJlc25lbCwga2FtYmllbnQsIGtkaWZmdXNlLCBrc3BlY3VsYXIsIG9wYWNpdHk7XFxudW5pZm9ybSBmbG9hdCB2ZXJ0ZXhDb2xvcjtcXG5cXG52YXJ5aW5nIGZsb2F0IHZhbHVlLCBraWxsO1xcbnZhcnlpbmcgdmVjMyB3b3JsZENvb3JkaW5hdGU7XFxudmFyeWluZyB2ZWMzIGxpZ2h0RGlyZWN0aW9uLCBleWVEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWw7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBpZiAoKGtpbGwgPiAwLjApIHx8XFxuICAgICAgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgd29ybGRDb29yZGluYXRlKSkpIGRpc2NhcmQ7XFxuXFxuICB2ZWMzIE4gPSBub3JtYWxpemUoc3VyZmFjZU5vcm1hbCk7XFxuICB2ZWMzIFYgPSBub3JtYWxpemUoZXllRGlyZWN0aW9uKTtcXG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShsaWdodERpcmVjdGlvbik7XFxuXFxuICBpZihnbF9Gcm9udEZhY2luZykge1xcbiAgICBOID0gLU47XFxuICB9XFxuXFxuICBmbG9hdCBzcGVjdWxhciA9IG1heChiZWNrbWFublNwZWN1bGFyKEwsIFYsIE4sIHJvdWdobmVzcyksIDAuKTtcXG4gIGZsb2F0IGRpZmZ1c2UgID0gbWluKGthbWJpZW50ICsga2RpZmZ1c2UgKiBtYXgoZG90KE4sIEwpLCAwLjApLCAxLjApO1xcblxcbiAgLy9kZWNpZGUgaG93IHRvIGludGVycG9sYXRlIGNvbG9yIFxcdTIwMTQgaW4gdmVydGV4IG9yIGluIGZyYWdtZW50XFxuICB2ZWM0IHN1cmZhY2VDb2xvciA9XFxuICAgIHN0ZXAodmVydGV4Q29sb3IsIC41KSAqIHRleHR1cmUyRChjb2xvcm1hcCwgdmVjMih2YWx1ZSwgdmFsdWUpKSArXFxuICAgIHN0ZXAoLjUsIHZlcnRleENvbG9yKSAqIHZDb2xvcjtcXG5cXG4gIHZlYzQgbGl0Q29sb3IgPSBzdXJmYWNlQ29sb3IuYSAqIHZlYzQoZGlmZnVzZSAqIHN1cmZhY2VDb2xvci5yZ2IgKyBrc3BlY3VsYXIgKiB2ZWMzKDEsMSwxKSAqIHNwZWN1bGFyLCAgMS4wKTtcXG5cXG4gIGdsX0ZyYWdDb2xvciA9IG1peChsaXRDb2xvciwgY29udG91ckNvbG9yLCBjb250b3VyVGludCkgKiBvcGFjaXR5O1xcbn1cXG5cIl0pLHM9aShbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjNCB1djtcXG5hdHRyaWJ1dGUgZmxvYXQgZjtcXG5cXG51bmlmb3JtIHZlYzMgb2JqZWN0T2Zmc2V0O1xcbnVuaWZvcm0gbWF0MyBwZXJtdXRhdGlvbjtcXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XFxudW5pZm9ybSBmbG9hdCBoZWlnaHQsIHpPZmZzZXQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgY29sb3JtYXA7XFxuXFxudmFyeWluZyBmbG9hdCB2YWx1ZSwga2lsbDtcXG52YXJ5aW5nIHZlYzMgd29ybGRDb29yZGluYXRlO1xcbnZhcnlpbmcgdmVjMiBwbGFuZUNvb3JkaW5hdGU7XFxudmFyeWluZyB2ZWMzIGxpZ2h0RGlyZWN0aW9uLCBleWVEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWw7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWMzIGRhdGFDb29yZGluYXRlID0gcGVybXV0YXRpb24gKiB2ZWMzKHV2Lnh5LCBoZWlnaHQpO1xcbiAgd29ybGRDb29yZGluYXRlID0gb2JqZWN0T2Zmc2V0ICsgZGF0YUNvb3JkaW5hdGU7XFxuICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQod29ybGRDb29yZGluYXRlLCAxLjApO1xcblxcbiAgdmVjNCBjbGlwUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIHdvcmxkUG9zaXRpb247XFxuICBjbGlwUG9zaXRpb24ueiArPSB6T2Zmc2V0O1xcblxcbiAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XFxuICB2YWx1ZSA9IGYgKyBvYmplY3RPZmZzZXQuejtcXG4gIGtpbGwgPSAtMS4wO1xcbiAgcGxhbmVDb29yZGluYXRlID0gdXYuenc7XFxuXFxuICB2Q29sb3IgPSB0ZXh0dXJlMkQoY29sb3JtYXAsIHZlYzIodmFsdWUsIHZhbHVlKSk7XFxuXFxuICAvL0Rvbid0IGRvIGxpZ2h0aW5nIGZvciBjb250b3Vyc1xcbiAgc3VyZmFjZU5vcm1hbCAgID0gdmVjMygxLDAsMCk7XFxuICBleWVEaXJlY3Rpb24gICAgPSB2ZWMzKDAsMSwwKTtcXG4gIGxpZ2h0RGlyZWN0aW9uICA9IHZlYzMoMCwwLDEpO1xcbn1cXG5cIl0pLGw9aShbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcXG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xcbn1cXG5cXG51bmlmb3JtIHZlYzIgc2hhcGU7XFxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XFxudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XFxuXFxudmFyeWluZyBmbG9hdCB2YWx1ZSwga2lsbDtcXG52YXJ5aW5nIHZlYzMgd29ybGRDb29yZGluYXRlO1xcbnZhcnlpbmcgdmVjMiBwbGFuZUNvb3JkaW5hdGU7XFxudmFyeWluZyB2ZWMzIHN1cmZhY2VOb3JtYWw7XFxuXFxudmVjMiBzcGxpdEZsb2F0KGZsb2F0IHYpIHtcXG4gIGZsb2F0IHZoID0gMjU1LjAgKiB2O1xcbiAgZmxvYXQgdXBwZXIgPSBmbG9vcih2aCk7XFxuICBmbG9hdCBsb3dlciA9IGZyYWN0KHZoKTtcXG4gIHJldHVybiB2ZWMyKHVwcGVyIC8gMjU1LjAsIGZsb29yKGxvd2VyICogMTYuMCkgLyAxNi4wKTtcXG59XFxuXFxudm9pZCBtYWluKCkge1xcbiAgaWYgKChraWxsID4gMC4wKSB8fFxcbiAgICAgIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHdvcmxkQ29vcmRpbmF0ZSkpKSBkaXNjYXJkO1xcblxcbiAgdmVjMiB1eCA9IHNwbGl0RmxvYXQocGxhbmVDb29yZGluYXRlLnggLyBzaGFwZS54KTtcXG4gIHZlYzIgdXkgPSBzcGxpdEZsb2F0KHBsYW5lQ29vcmRpbmF0ZS55IC8gc2hhcGUueSk7XFxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZCwgdXgueCwgdXkueCwgdXgueSArICh1eS55LzE2LjApKTtcXG59XFxuXCJdKTtyLmNyZWF0ZVNoYWRlcj1mdW5jdGlvbih0KXt2YXIgZT1uKHQsYSxvLG51bGwsW3tuYW1lOlwidXZcIix0eXBlOlwidmVjNFwifSx7bmFtZTpcImZcIix0eXBlOlwidmVjM1wifSx7bmFtZTpcIm5vcm1hbFwiLHR5cGU6XCJ2ZWMzXCJ9XSk7cmV0dXJuIGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5mLmxvY2F0aW9uPTEsZS5hdHRyaWJ1dGVzLm5vcm1hbC5sb2NhdGlvbj0yLGV9LHIuY3JlYXRlUGlja1NoYWRlcj1mdW5jdGlvbih0KXt2YXIgZT1uKHQsYSxsLG51bGwsW3tuYW1lOlwidXZcIix0eXBlOlwidmVjNFwifSx7bmFtZTpcImZcIix0eXBlOlwidmVjM1wifSx7bmFtZTpcIm5vcm1hbFwiLHR5cGU6XCJ2ZWMzXCJ9XSk7cmV0dXJuIGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5mLmxvY2F0aW9uPTEsZS5hdHRyaWJ1dGVzLm5vcm1hbC5sb2NhdGlvbj0yLGV9LHIuY3JlYXRlQ29udG91clNoYWRlcj1mdW5jdGlvbih0KXt2YXIgZT1uKHQscyxvLG51bGwsW3tuYW1lOlwidXZcIix0eXBlOlwidmVjNFwifSx7bmFtZTpcImZcIix0eXBlOlwiZmxvYXRcIn1dKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmYubG9jYXRpb249MSxlfSxyLmNyZWF0ZVBpY2tDb250b3VyU2hhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxzLGwsbnVsbCxbe25hbWU6XCJ1dlwiLHR5cGU6XCJ2ZWM0XCJ9LHtuYW1lOlwiZlwiLHR5cGU6XCJmbG9hdFwifV0pO3JldHVybiBlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuZi5sb2NhdGlvbj0xLGV9fSx7XCJnbC1zaGFkZXJcIjoyOTgsZ2xzbGlmeTo0MDJ9XSwzMTI6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMTAyXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MTAyfV0sMzEzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj15KGUpLG49YihlKSxzPXgoZSksbD1fKGUpLGM9aShlKSx1PWEoZSxbe2J1ZmZlcjpjLHNpemU6NCxzdHJpZGU6dyxvZmZzZXQ6MH0se2J1ZmZlcjpjLHNpemU6MyxzdHJpZGU6dyxvZmZzZXQ6MTZ9LHtidWZmZXI6YyxzaXplOjMsc3RyaWRlOncsb2Zmc2V0OjI4fV0pLGg9aShlKSxmPWEoZSxbe2J1ZmZlcjpoLHNpemU6NCxzdHJpZGU6MjAsb2Zmc2V0OjB9LHtidWZmZXI6aCxzaXplOjEsc3RyaWRlOjIwLG9mZnNldDoxNn1dKSxwPWkoZSksZD1hKGUsW3tidWZmZXI6cCxzaXplOjIsdHlwZTplLkZMT0FUfV0pLGc9byhlLDEsUyxlLlJHQkEsZS5VTlNJR05FRF9CWVRFKTtnLm1pbkZpbHRlcj1lLkxJTkVBUixnLm1hZ0ZpbHRlcj1lLkxJTkVBUjt2YXIgdj1uZXcgRShlLFswLDBdLFtbMCwwLDBdLFswLDAsMF1dLHIsbixjLHUsZyxzLGwsaCxmLHAsZCxbMCwwLDBdKSxtPXtsZXZlbHM6W1tdLFtdLFtdXX07Zm9yKHZhciBrIGluIHQpbVtrXT10W2tdO3JldHVybiBtLmNvbG9ybWFwPW0uY29sb3JtYXB8fFwiamV0XCIsdi51cGRhdGUobSksdn07dmFyIG49dChcImJpdC10d2lkZGxlXCIpLGk9dChcImdsLWJ1ZmZlclwiKSxhPXQoXCJnbC12YW9cIiksbz10KFwiZ2wtdGV4dHVyZTJkXCIpLHM9dChcInR5cGVkYXJyYXktcG9vbFwiKSxsPXQoXCJjb2xvcm1hcFwiKSxjPXQoXCJuZGFycmF5LW9wc1wiKSx1PXQoXCJuZGFycmF5LXBhY2tcIiksaD10KFwibmRhcnJheVwiKSxmPXQoXCJzdXJmYWNlLW5ldHNcIikscD10KFwiZ2wtbWF0NC9tdWx0aXBseVwiKSxkPXQoXCJnbC1tYXQ0L2ludmVydFwiKSxnPXQoXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiKSx2PXQoXCJuZGFycmF5LWdyYWRpZW50XCIpLG09dChcIi4vbGliL3NoYWRlcnNcIikseT1tLmNyZWF0ZVNoYWRlcix4PW0uY3JlYXRlQ29udG91clNoYWRlcixiPW0uY3JlYXRlUGlja1NoYWRlcixfPW0uY3JlYXRlUGlja0NvbnRvdXJTaGFkZXIsdz00MCxrPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSxBPVtbMCwwXSxbMCwxXSxbMSwwXSxbMSwxXSxbMSwwXSxbMCwxXV0sVD1bWzAsMCwwLDAsMCwwLDAsMCwwXSxbMCwwLDAsMCwwLDAsMCwwLDBdLFswLDAsMCwwLDAsMCwwLDAsMF1dO2Z1bmN0aW9uIE0odCxlLHIsbixpKXt0aGlzLnBvc2l0aW9uPXQsdGhpcy5pbmRleD1lLHRoaXMudXY9cix0aGlzLmxldmVsPW4sdGhpcy5kYXRhQ29vcmRpbmF0ZT1pfSFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8MzsrK3Qpe3ZhciBlPVRbdF0scj0odCsyKSUzO2VbKHQrMSklMyswXT0xLGVbciszXT0xLGVbdCs2XT0xfX0oKTt2YXIgUz0yNTY7ZnVuY3Rpb24gRSh0LGUscixuLGksYSxvLGwsYyx1LGYscCxkLGcsdil7dGhpcy5nbD10LHRoaXMuc2hhcGU9ZSx0aGlzLmJvdW5kcz1yLHRoaXMub2JqZWN0T2Zmc2V0PXYsdGhpcy5pbnRlbnNpdHlCb3VuZHM9W10sdGhpcy5fc2hhZGVyPW4sdGhpcy5fcGlja1NoYWRlcj1pLHRoaXMuX2Nvb3JkaW5hdGVCdWZmZXI9YSx0aGlzLl92YW89byx0aGlzLl9jb2xvck1hcD1sLHRoaXMuX2NvbnRvdXJTaGFkZXI9Yyx0aGlzLl9jb250b3VyUGlja1NoYWRlcj11LHRoaXMuX2NvbnRvdXJCdWZmZXI9Zix0aGlzLl9jb250b3VyVkFPPXAsdGhpcy5fY29udG91ck9mZnNldHM9W1tdLFtdLFtdXSx0aGlzLl9jb250b3VyQ291bnRzPVtbXSxbXSxbXV0sdGhpcy5fdmVydGV4Q291bnQ9MCx0aGlzLl9waWNrUmVzdWx0PW5ldyBNKFswLDAsMF0sWzAsMF0sWzAsMF0sWzAsMCwwXSxbMCwwLDBdKSx0aGlzLl9keW5hbWljQnVmZmVyPWQsdGhpcy5fZHluYW1pY1ZBTz1nLHRoaXMuX2R5bmFtaWNPZmZzZXRzPVswLDAsMF0sdGhpcy5fZHluYW1pY0NvdW50cz1bMCwwLDBdLHRoaXMuY29udG91cldpZHRoPVsxLDEsMV0sdGhpcy5jb250b3VyTGV2ZWxzPVtbMV0sWzFdLFsxXV0sdGhpcy5jb250b3VyVGludD1bMCwwLDBdLHRoaXMuY29udG91ckNvbG9yPVtbLjUsLjUsLjUsMV0sWy41LC41LC41LDFdLFsuNSwuNSwuNSwxXV0sdGhpcy5zaG93Q29udG91cj0hMCx0aGlzLnNob3dTdXJmYWNlPSEwLHRoaXMuZW5hYmxlSGlnaGxpZ2h0PVshMCwhMCwhMF0sdGhpcy5oaWdobGlnaHRDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuaGlnaGxpZ2h0VGludD1bMSwxLDFdLHRoaXMuaGlnaGxpZ2h0TGV2ZWw9Wy0xLC0xLC0xXSx0aGlzLmVuYWJsZUR5bmFtaWM9WyEwLCEwLCEwXSx0aGlzLmR5bmFtaWNMZXZlbD1bTmFOLE5hTixOYU5dLHRoaXMuZHluYW1pY0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5keW5hbWljVGludD1bMSwxLDFdLHRoaXMuZHluYW1pY1dpZHRoPVsxLDEsMV0sdGhpcy5heGVzQm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuc3VyZmFjZVByb2plY3Q9WyExLCExLCExXSx0aGlzLmNvbnRvdXJQcm9qZWN0PVtbITEsITEsITFdLFshMSwhMSwhMV0sWyExLCExLCExXV0sdGhpcy5jb2xvckJvdW5kcz1bITEsITFdLHRoaXMuX2ZpZWxkPVtoKHMubWFsbG9jRmxvYXQoMTAyNCksWzAsMF0pLGgocy5tYWxsb2NGbG9hdCgxMDI0KSxbMCwwXSksaChzLm1hbGxvY0Zsb2F0KDEwMjQpLFswLDBdKV0sdGhpcy5waWNrSWQ9MSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5zbmFwVG9EYXRhPSExLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMub3BhY2l0eT0xLHRoaXMubGlnaHRQb3NpdGlvbj1bMTAsMWU0LDBdLHRoaXMuYW1iaWVudExpZ2h0PS44LHRoaXMuZGlmZnVzZUxpZ2h0PS44LHRoaXMuc3BlY3VsYXJMaWdodD0yLHRoaXMucm91Z2huZXNzPS41LHRoaXMuZnJlc25lbD0xLjUsdGhpcy52ZXJ0ZXhDb2xvcj0wLHRoaXMuZGlydHk9ITB9dmFyIEM9RS5wcm90b3R5cGU7Qy5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BhY2l0eTwxfSxDLmlzT3BhcXVlPWZ1bmN0aW9uKCl7aWYodGhpcy5vcGFjaXR5Pj0xKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8MzsrK3QpaWYodGhpcy5fY29udG91ckNvdW50c1t0XS5sZW5ndGg+MHx8dGhpcy5fZHluYW1pY0NvdW50c1t0XT4wKXJldHVybiEwO3JldHVybiExfSxDLnBpY2tTbG90cz0xLEMuc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH07dmFyIEw9WzAsMCwwXSx6PXtzaG93U3VyZmFjZTohMSxzaG93Q29udG91cjohMSxwcm9qZWN0aW9uczpbay5zbGljZSgpLGsuc2xpY2UoKSxrLnNsaWNlKCldLGNsaXBCb3VuZHM6W1tbMCwwLDBdLFswLDAsMF1dLFtbMCwwLDBdLFswLDAsMF1dLFtbMCwwLDBdLFswLDAsMF1dXX07ZnVuY3Rpb24gTyh0LGUpe3ZhciByLG4saSxhPWUuYXhlcyYmZS5heGVzLmxhc3RDdWJlUHJvcHMuYXhpc3x8TCxvPWUuc2hvd1N1cmZhY2Uscz1lLnNob3dDb250b3VyO2ZvcihyPTA7cjwzOysrcilmb3Iobz1vfHxlLnN1cmZhY2VQcm9qZWN0W3JdLG49MDtuPDM7KytuKXM9c3x8ZS5jb250b3VyUHJvamVjdFtyXVtuXTtmb3Iocj0wO3I8MzsrK3Ipe3ZhciBsPXoucHJvamVjdGlvbnNbcl07Zm9yKG49MDtuPDE2OysrbilsW25dPTA7Zm9yKG49MDtuPDQ7KytuKWxbNSpuXT0xO2xbNSpyXT0wLGxbMTIrcl09ZS5heGVzQm91bmRzWysoYVtyXT4wKV1bcl0scChsLHQubW9kZWwsbCk7dmFyIGM9ei5jbGlwQm91bmRzW3JdO2ZvcihpPTA7aTwyOysraSlmb3Iobj0wO248MzsrK24pY1tpXVtuXT10LmNsaXBCb3VuZHNbaV1bbl07Y1swXVtyXT0tMWU4LGNbMV1bcl09MWU4fXJldHVybiB6LnNob3dTdXJmYWNlPW8sei5zaG93Q29udG91cj1zLHp9dmFyIEk9e21vZGVsOmssdmlldzprLHByb2plY3Rpb246ayxpbnZlcnNlTW9kZWw6ay5zbGljZSgpLGxvd2VyQm91bmQ6WzAsMCwwXSx1cHBlckJvdW5kOlswLDAsMF0sY29sb3JNYXA6MCxjbGlwQm91bmRzOltbMCwwLDBdLFswLDAsMF1dLGhlaWdodDowLGNvbnRvdXJUaW50OjAsY29udG91ckNvbG9yOlswLDAsMCwxXSxwZXJtdXRhdGlvbjpbMSwwLDAsMCwxLDAsMCwwLDFdLHpPZmZzZXQ6LTFlLTQsb2JqZWN0T2Zmc2V0OlswLDAsMF0sa2FtYmllbnQ6MSxrZGlmZnVzZToxLGtzcGVjdWxhcjoxLGxpZ2h0UG9zaXRpb246WzFlMywxZTMsMWUzXSxleWVQb3NpdGlvbjpbMCwwLDBdLHJvdWdobmVzczoxLGZyZXNuZWw6MSxvcGFjaXR5OjEsdmVydGV4Q29sb3I6MH0sRD1rLnNsaWNlKCksUD1bMSwwLDAsMCwxLDAsMCwwLDFdO2Z1bmN0aW9uIFIodCxlKXt0PXR8fHt9O3ZhciByPXRoaXMuZ2w7ci5kaXNhYmxlKHIuQ1VMTF9GQUNFKSx0aGlzLl9jb2xvck1hcC5iaW5kKDApO3ZhciBuPUk7bi5tb2RlbD10Lm1vZGVsfHxrLG4udmlldz10LnZpZXd8fGssbi5wcm9qZWN0aW9uPXQucHJvamVjdGlvbnx8ayxuLmxvd2VyQm91bmQ9W3RoaXMuYm91bmRzWzBdWzBdLHRoaXMuYm91bmRzWzBdWzFdLHRoaXMuY29sb3JCb3VuZHNbMF18fHRoaXMuYm91bmRzWzBdWzJdXSxuLnVwcGVyQm91bmQ9W3RoaXMuYm91bmRzWzFdWzBdLHRoaXMuYm91bmRzWzFdWzFdLHRoaXMuY29sb3JCb3VuZHNbMV18fHRoaXMuYm91bmRzWzFdWzJdXSxuLm9iamVjdE9mZnNldD10aGlzLm9iamVjdE9mZnNldCxuLmNvbnRvdXJDb2xvcj10aGlzLmNvbnRvdXJDb2xvclswXSxuLmludmVyc2VNb2RlbD1kKG4uaW52ZXJzZU1vZGVsLG4ubW9kZWwpO2Zvcih2YXIgaT0wO2k8MjsrK2kpZm9yKHZhciBhPW4uY2xpcEJvdW5kc1tpXSxvPTA7bzwzOysrbylhW29dPU1hdGgubWluKE1hdGgubWF4KHRoaXMuY2xpcEJvdW5kc1tpXVtvXSwtMWU4KSwxZTgpO24ua2FtYmllbnQ9dGhpcy5hbWJpZW50TGlnaHQsbi5rZGlmZnVzZT10aGlzLmRpZmZ1c2VMaWdodCxuLmtzcGVjdWxhcj10aGlzLnNwZWN1bGFyTGlnaHQsbi5yb3VnaG5lc3M9dGhpcy5yb3VnaG5lc3Msbi5mcmVzbmVsPXRoaXMuZnJlc25lbCxuLm9wYWNpdHk9dGhpcy5vcGFjaXR5LG4uaGVpZ2h0PTAsbi5wZXJtdXRhdGlvbj1QLG4udmVydGV4Q29sb3I9dGhpcy52ZXJ0ZXhDb2xvcjt2YXIgcz1EO2ZvcihwKHMsbi52aWV3LG4ubW9kZWwpLHAocyxuLnByb2plY3Rpb24scyksZChzLHMpLGk9MDtpPDM7KytpKW4uZXllUG9zaXRpb25baV09c1sxMitpXS9zWzE1XTt2YXIgbD1zWzE1XTtmb3IoaT0wO2k8MzsrK2kpbCs9dGhpcy5saWdodFBvc2l0aW9uW2ldKnNbNCppKzNdO2ZvcihpPTA7aTwzOysraSl7dmFyIGM9c1sxMitpXTtmb3Iobz0wO288MzsrK28pYys9c1s0Km8raV0qdGhpcy5saWdodFBvc2l0aW9uW29dO24ubGlnaHRQb3NpdGlvbltpXT1jL2x9dmFyIHU9TyhuLHRoaXMpO2lmKHUuc2hvd1N1cmZhY2UmJmU9PT10aGlzLm9wYWNpdHk8MSl7Zm9yKHRoaXMuX3NoYWRlci5iaW5kKCksdGhpcy5fc2hhZGVyLnVuaWZvcm1zPW4sdGhpcy5fdmFvLmJpbmQoKSx0aGlzLnNob3dTdXJmYWNlJiZ0aGlzLl92ZXJ0ZXhDb3VudCYmdGhpcy5fdmFvLmRyYXcoci5UUklBTkdMRVMsdGhpcy5fdmVydGV4Q291bnQpLGk9MDtpPDM7KytpKXRoaXMuc3VyZmFjZVByb2plY3RbaV0mJnRoaXMudmVydGV4Q291bnQmJih0aGlzLl9zaGFkZXIudW5pZm9ybXMubW9kZWw9dS5wcm9qZWN0aW9uc1tpXSx0aGlzLl9zaGFkZXIudW5pZm9ybXMuY2xpcEJvdW5kcz11LmNsaXBCb3VuZHNbaV0sdGhpcy5fdmFvLmRyYXcoci5UUklBTkdMRVMsdGhpcy5fdmVydGV4Q291bnQpKTt0aGlzLl92YW8udW5iaW5kKCl9aWYodS5zaG93Q29udG91ciYmIWUpe3ZhciBoPXRoaXMuX2NvbnRvdXJTaGFkZXI7bi5rYW1iaWVudD0xLG4ua2RpZmZ1c2U9MCxuLmtzcGVjdWxhcj0wLG4ub3BhY2l0eT0xLGguYmluZCgpLGgudW5pZm9ybXM9bjt2YXIgZj10aGlzLl9jb250b3VyVkFPO2ZvcihmLmJpbmQoKSxpPTA7aTwzOysraSlmb3IoaC51bmlmb3Jtcy5wZXJtdXRhdGlvbj1UW2ldLHIubGluZVdpZHRoKHRoaXMuY29udG91cldpZHRoW2ldKnRoaXMucGl4ZWxSYXRpbyksbz0wO288dGhpcy5jb250b3VyTGV2ZWxzW2ldLmxlbmd0aDsrK28pbz09PXRoaXMuaGlnaGxpZ2h0TGV2ZWxbaV0/KGgudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuaGlnaGxpZ2h0Q29sb3JbaV0saC51bmlmb3Jtcy5jb250b3VyVGludD10aGlzLmhpZ2hsaWdodFRpbnRbaV0pOjAhPT1vJiZvLTEhPT10aGlzLmhpZ2hsaWdodExldmVsW2ldfHwoaC51bmlmb3Jtcy5jb250b3VyQ29sb3I9dGhpcy5jb250b3VyQ29sb3JbaV0saC51bmlmb3Jtcy5jb250b3VyVGludD10aGlzLmNvbnRvdXJUaW50W2ldKSx0aGlzLl9jb250b3VyQ291bnRzW2ldW29dJiYoaC51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5jb250b3VyTGV2ZWxzW2ldW29dLGYuZHJhdyhyLkxJTkVTLHRoaXMuX2NvbnRvdXJDb3VudHNbaV1bb10sdGhpcy5fY29udG91ck9mZnNldHNbaV1bb10pKTtmb3IoaT0wO2k8MzsrK2kpZm9yKGgudW5pZm9ybXMubW9kZWw9dS5wcm9qZWN0aW9uc1tpXSxoLnVuaWZvcm1zLmNsaXBCb3VuZHM9dS5jbGlwQm91bmRzW2ldLG89MDtvPDM7KytvKWlmKHRoaXMuY29udG91clByb2plY3RbaV1bb10pe2gudW5pZm9ybXMucGVybXV0YXRpb249VFtvXSxyLmxpbmVXaWR0aCh0aGlzLmNvbnRvdXJXaWR0aFtvXSp0aGlzLnBpeGVsUmF0aW8pO2Zvcih2YXIgZz0wO2c8dGhpcy5jb250b3VyTGV2ZWxzW29dLmxlbmd0aDsrK2cpZz09PXRoaXMuaGlnaGxpZ2h0TGV2ZWxbb10/KGgudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuaGlnaGxpZ2h0Q29sb3Jbb10saC51bmlmb3Jtcy5jb250b3VyVGludD10aGlzLmhpZ2hsaWdodFRpbnRbb10pOjAhPT1nJiZnLTEhPT10aGlzLmhpZ2hsaWdodExldmVsW29dfHwoaC51bmlmb3Jtcy5jb250b3VyQ29sb3I9dGhpcy5jb250b3VyQ29sb3Jbb10saC51bmlmb3Jtcy5jb250b3VyVGludD10aGlzLmNvbnRvdXJUaW50W29dKSx0aGlzLl9jb250b3VyQ291bnRzW29dW2ddJiYoaC51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5jb250b3VyTGV2ZWxzW29dW2ddLGYuZHJhdyhyLkxJTkVTLHRoaXMuX2NvbnRvdXJDb3VudHNbb11bZ10sdGhpcy5fY29udG91ck9mZnNldHNbb11bZ10pKX1mb3IoZi51bmJpbmQoKSwoZj10aGlzLl9keW5hbWljVkFPKS5iaW5kKCksaT0wO2k8MzsrK2kpaWYoMCE9PXRoaXMuX2R5bmFtaWNDb3VudHNbaV0pZm9yKGgudW5pZm9ybXMubW9kZWw9bi5tb2RlbCxoLnVuaWZvcm1zLmNsaXBCb3VuZHM9bi5jbGlwQm91bmRzLGgudW5pZm9ybXMucGVybXV0YXRpb249VFtpXSxyLmxpbmVXaWR0aCh0aGlzLmR5bmFtaWNXaWR0aFtpXSp0aGlzLnBpeGVsUmF0aW8pLGgudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuZHluYW1pY0NvbG9yW2ldLGgudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5keW5hbWljVGludFtpXSxoLnVuaWZvcm1zLmhlaWdodD10aGlzLmR5bmFtaWNMZXZlbFtpXSxmLmRyYXcoci5MSU5FUyx0aGlzLl9keW5hbWljQ291bnRzW2ldLHRoaXMuX2R5bmFtaWNPZmZzZXRzW2ldKSxvPTA7bzwzOysrbyl0aGlzLmNvbnRvdXJQcm9qZWN0W29dW2ldJiYoaC51bmlmb3Jtcy5tb2RlbD11LnByb2plY3Rpb25zW29dLGgudW5pZm9ybXMuY2xpcEJvdW5kcz11LmNsaXBCb3VuZHNbb10sZi5kcmF3KHIuTElORVMsdGhpcy5fZHluYW1pY0NvdW50c1tpXSx0aGlzLl9keW5hbWljT2Zmc2V0c1tpXSkpO2YudW5iaW5kKCl9fUMuZHJhdz1mdW5jdGlvbih0KXtyZXR1cm4gUi5jYWxsKHRoaXMsdCwhMSl9LEMuZHJhd1RyYW5zcGFyZW50PWZ1bmN0aW9uKHQpe3JldHVybiBSLmNhbGwodGhpcyx0LCEwKX07dmFyIEY9e21vZGVsOmssdmlldzprLHByb2plY3Rpb246ayxpbnZlcnNlTW9kZWw6ayxjbGlwQm91bmRzOltbMCwwLDBdLFswLDAsMF1dLGhlaWdodDowLHNoYXBlOlswLDBdLHBpY2tJZDowLGxvd2VyQm91bmQ6WzAsMCwwXSx1cHBlckJvdW5kOlswLDAsMF0sek9mZnNldDowLG9iamVjdE9mZnNldDpbMCwwLDBdLHBlcm11dGF0aW9uOlsxLDAsMCwwLDEsMCwwLDAsMV0sbGlnaHRQb3NpdGlvbjpbMCwwLDBdLGV5ZVBvc2l0aW9uOlswLDAsMF19O2Z1bmN0aW9uIEIodCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9bZSh0WzBdKSxlKHRbMV0pLGUodFsyXSldOltlKHQpLGUodCksZSh0KV19ZnVuY3Rpb24gTih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT8zPT09dC5sZW5ndGg/W3RbMF0sdFsxXSx0WzJdLDFdOlt0WzBdLHRbMV0sdFsyXSx0WzNdXTpbMCwwLDAsMV19ZnVuY3Rpb24gaih0KXtpZihBcnJheS5pc0FycmF5KHQpKXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybltOKHRbMF0pLE4odFsxXSksTih0WzJdKV07dmFyIGU9Tih0KTtyZXR1cm5bZS5zbGljZSgpLGUuc2xpY2UoKSxlLnNsaWNlKCldfX1DLmRyYXdQaWNrPWZ1bmN0aW9uKHQpe3Q9dHx8e307dmFyIGU9dGhpcy5nbDtlLmRpc2FibGUoZS5DVUxMX0ZBQ0UpO3ZhciByPUY7ci5tb2RlbD10Lm1vZGVsfHxrLHIudmlldz10LnZpZXd8fGssci5wcm9qZWN0aW9uPXQucHJvamVjdGlvbnx8ayxyLnNoYXBlPXRoaXMuX2ZpZWxkWzJdLnNoYXBlLHIucGlja0lkPXRoaXMucGlja0lkLzI1NSxyLmxvd2VyQm91bmQ9dGhpcy5ib3VuZHNbMF0sci51cHBlckJvdW5kPXRoaXMuYm91bmRzWzFdLHIub2JqZWN0T2Zmc2V0PXRoaXMub2JqZWN0T2Zmc2V0LHIucGVybXV0YXRpb249UDtmb3IodmFyIG49MDtuPDI7KytuKWZvcih2YXIgaT1yLmNsaXBCb3VuZHNbbl0sYT0wO2E8MzsrK2EpaVthXT1NYXRoLm1pbihNYXRoLm1heCh0aGlzLmNsaXBCb3VuZHNbbl1bYV0sLTFlOCksMWU4KTt2YXIgbz1PKHIsdGhpcyk7aWYoby5zaG93U3VyZmFjZSl7Zm9yKHRoaXMuX3BpY2tTaGFkZXIuYmluZCgpLHRoaXMuX3BpY2tTaGFkZXIudW5pZm9ybXM9cix0aGlzLl92YW8uYmluZCgpLHRoaXMuX3Zhby5kcmF3KGUuVFJJQU5HTEVTLHRoaXMuX3ZlcnRleENvdW50KSxuPTA7bjwzOysrbil0aGlzLnN1cmZhY2VQcm9qZWN0W25dJiYodGhpcy5fcGlja1NoYWRlci51bmlmb3Jtcy5tb2RlbD1vLnByb2plY3Rpb25zW25dLHRoaXMuX3BpY2tTaGFkZXIudW5pZm9ybXMuY2xpcEJvdW5kcz1vLmNsaXBCb3VuZHNbbl0sdGhpcy5fdmFvLmRyYXcoZS5UUklBTkdMRVMsdGhpcy5fdmVydGV4Q291bnQpKTt0aGlzLl92YW8udW5iaW5kKCl9aWYoby5zaG93Q29udG91cil7dmFyIHM9dGhpcy5fY29udG91clBpY2tTaGFkZXI7cy5iaW5kKCkscy51bmlmb3Jtcz1yO3ZhciBsPXRoaXMuX2NvbnRvdXJWQU87Zm9yKGwuYmluZCgpLGE9MDthPDM7KythKWZvcihlLmxpbmVXaWR0aCh0aGlzLmNvbnRvdXJXaWR0aFthXSp0aGlzLnBpeGVsUmF0aW8pLHMudW5pZm9ybXMucGVybXV0YXRpb249VFthXSxuPTA7bjx0aGlzLmNvbnRvdXJMZXZlbHNbYV0ubGVuZ3RoOysrbil0aGlzLl9jb250b3VyQ291bnRzW2FdW25dJiYocy51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5jb250b3VyTGV2ZWxzW2FdW25dLGwuZHJhdyhlLkxJTkVTLHRoaXMuX2NvbnRvdXJDb3VudHNbYV1bbl0sdGhpcy5fY29udG91ck9mZnNldHNbYV1bbl0pKTtmb3Iobj0wO248MzsrK24pZm9yKHMudW5pZm9ybXMubW9kZWw9by5wcm9qZWN0aW9uc1tuXSxzLnVuaWZvcm1zLmNsaXBCb3VuZHM9by5jbGlwQm91bmRzW25dLGE9MDthPDM7KythKWlmKHRoaXMuY29udG91clByb2plY3Rbbl1bYV0pe3MudW5pZm9ybXMucGVybXV0YXRpb249VFthXSxlLmxpbmVXaWR0aCh0aGlzLmNvbnRvdXJXaWR0aFthXSp0aGlzLnBpeGVsUmF0aW8pO2Zvcih2YXIgYz0wO2M8dGhpcy5jb250b3VyTGV2ZWxzW2FdLmxlbmd0aDsrK2MpdGhpcy5fY29udG91ckNvdW50c1thXVtjXSYmKHMudW5pZm9ybXMuaGVpZ2h0PXRoaXMuY29udG91ckxldmVsc1thXVtjXSxsLmRyYXcoZS5MSU5FUyx0aGlzLl9jb250b3VyQ291bnRzW2FdW2NdLHRoaXMuX2NvbnRvdXJPZmZzZXRzW2FdW2NdKSl9bC51bmJpbmQoKX19LEMucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7dmFyIGU9dGhpcy5fZmllbGRbMl0uc2hhcGUscj10aGlzLl9waWNrUmVzdWx0LG49ZVswXSoodC52YWx1ZVswXSsodC52YWx1ZVsyXT4+NCkvMTYpLzI1NSxpPU1hdGguZmxvb3IobiksYT1uLWksbz1lWzFdKih0LnZhbHVlWzFdKygxNSZ0LnZhbHVlWzJdKS8xNikvMjU1LHM9TWF0aC5mbG9vcihvKSxsPW8tcztpKz0xLHMrPTE7dmFyIGM9ci5wb3NpdGlvbjtjWzBdPWNbMV09Y1syXT0wO2Zvcih2YXIgdT0wO3U8MjsrK3UpZm9yKHZhciBoPXU/YToxLWEsZj0wO2Y8MjsrK2YpZm9yKHZhciBwPWkrdSxkPXMrZix2PWgqKGY/bDoxLWwpLG09MDttPDM7KyttKWNbbV0rPXRoaXMuX2ZpZWxkW21dLmdldChwLGQpKnY7Zm9yKHZhciB5PXRoaXMuX3BpY2tSZXN1bHQubGV2ZWwseD0wO3g8MzsrK3gpaWYoeVt4XT1nLmxlKHRoaXMuY29udG91ckxldmVsc1t4XSxjW3hdKSx5W3hdPDApdGhpcy5jb250b3VyTGV2ZWxzW3hdLmxlbmd0aD4wJiYoeVt4XT0wKTtlbHNlIGlmKHlbeF08dGhpcy5jb250b3VyTGV2ZWxzW3hdLmxlbmd0aC0xKXt2YXIgYj10aGlzLmNvbnRvdXJMZXZlbHNbeF1beVt4XV0sXz10aGlzLmNvbnRvdXJMZXZlbHNbeF1beVt4XSsxXTtNYXRoLmFicyhiLWNbeF0pPk1hdGguYWJzKF8tY1t4XSkmJih5W3hdKz0xKX1mb3Ioci5pbmRleFswXT1hPC41P2k6aSsxLHIuaW5kZXhbMV09bDwuNT9zOnMrMSxyLnV2WzBdPW4vZVswXSxyLnV2WzFdPW8vZVsxXSxtPTA7bTwzOysrbSlyLmRhdGFDb29yZGluYXRlW21dPXRoaXMuX2ZpZWxkW21dLmdldChyLmluZGV4WzBdLHIuaW5kZXhbMV0pO3JldHVybiByfSxDLnBhZEZpZWxkPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5zaGFwZS5zbGljZSgpLG49dC5zaGFwZS5zbGljZSgpO2MuYXNzaWduKHQubG8oMSwxKS5oaShyWzBdLHJbMV0pLGUpLGMuYXNzaWduKHQubG8oMSkuaGkoclswXSwxKSxlLmhpKHJbMF0sMSkpLGMuYXNzaWduKHQubG8oMSxuWzFdLTEpLmhpKHJbMF0sMSksZS5sbygwLHJbMV0tMSkuaGkoclswXSwxKSksYy5hc3NpZ24odC5sbygwLDEpLmhpKDEsclsxXSksZS5oaSgxKSksYy5hc3NpZ24odC5sbyhuWzBdLTEsMSkuaGkoMSxyWzFdKSxlLmxvKHJbMF0tMSkpLHQuc2V0KDAsMCxlLmdldCgwLDApKSx0LnNldCgwLG5bMV0tMSxlLmdldCgwLHJbMV0tMSkpLHQuc2V0KG5bMF0tMSwwLGUuZ2V0KHJbMF0tMSwwKSksdC5zZXQoblswXS0xLG5bMV0tMSxlLmdldChyWzBdLTEsclsxXS0xKSl9LEMudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e30sdGhpcy5vYmplY3RPZmZzZXQ9dC5vYmplY3RPZmZzZXR8fHRoaXMub2JqZWN0T2Zmc2V0LHRoaXMuZGlydHk9ITAsXCJjb250b3VyV2lkdGhcImluIHQmJih0aGlzLmNvbnRvdXJXaWR0aD1CKHQuY29udG91cldpZHRoLE51bWJlcikpLFwic2hvd0NvbnRvdXJcImluIHQmJih0aGlzLnNob3dDb250b3VyPUIodC5zaG93Q29udG91cixCb29sZWFuKSksXCJzaG93U3VyZmFjZVwiaW4gdCYmKHRoaXMuc2hvd1N1cmZhY2U9ISF0LnNob3dTdXJmYWNlKSxcImNvbnRvdXJUaW50XCJpbiB0JiYodGhpcy5jb250b3VyVGludD1CKHQuY29udG91clRpbnQsQm9vbGVhbikpLFwiY29udG91ckNvbG9yXCJpbiB0JiYodGhpcy5jb250b3VyQ29sb3I9aih0LmNvbnRvdXJDb2xvcikpLFwiY29udG91clByb2plY3RcImluIHQmJih0aGlzLmNvbnRvdXJQcm9qZWN0PUIodC5jb250b3VyUHJvamVjdCxmdW5jdGlvbih0KXtyZXR1cm4gQih0LEJvb2xlYW4pfSkpLFwic3VyZmFjZVByb2plY3RcImluIHQmJih0aGlzLnN1cmZhY2VQcm9qZWN0PXQuc3VyZmFjZVByb2plY3QpLFwiZHluYW1pY0NvbG9yXCJpbiB0JiYodGhpcy5keW5hbWljQ29sb3I9aih0LmR5bmFtaWNDb2xvcikpLFwiZHluYW1pY1RpbnRcImluIHQmJih0aGlzLmR5bmFtaWNUaW50PUIodC5keW5hbWljVGludCxOdW1iZXIpKSxcImR5bmFtaWNXaWR0aFwiaW4gdCYmKHRoaXMuZHluYW1pY1dpZHRoPUIodC5keW5hbWljV2lkdGgsTnVtYmVyKSksXCJvcGFjaXR5XCJpbiB0JiYodGhpcy5vcGFjaXR5PXQub3BhY2l0eSksXCJjb2xvckJvdW5kc1wiaW4gdCYmKHRoaXMuY29sb3JCb3VuZHM9dC5jb2xvckJvdW5kcyksXCJ2ZXJ0ZXhDb2xvclwiaW4gdCYmKHRoaXMudmVydGV4Q29sb3I9dC52ZXJ0ZXhDb2xvcj8xOjApO3ZhciBlPXQuZmllbGR8fHQuY29vcmRzJiZ0LmNvb3Jkc1syXXx8bnVsbCxyPSExO2lmKGV8fChlPXRoaXMuX2ZpZWxkWzJdLnNoYXBlWzBdfHx0aGlzLl9maWVsZFsyXS5zaGFwZVsyXT90aGlzLl9maWVsZFsyXS5sbygxLDEpLmhpKHRoaXMuX2ZpZWxkWzJdLnNoYXBlWzBdLTIsdGhpcy5fZmllbGRbMl0uc2hhcGVbMV0tMik6dGhpcy5fZmllbGRbMl0uaGkoMCwwKSksXCJmaWVsZFwiaW4gdHx8XCJjb29yZHNcImluIHQpe3ZhciBpPShlLnNoYXBlWzBdKzIpKihlLnNoYXBlWzFdKzIpO2k+dGhpcy5fZmllbGRbMl0uZGF0YS5sZW5ndGgmJihzLmZyZWVGbG9hdCh0aGlzLl9maWVsZFsyXS5kYXRhKSx0aGlzLl9maWVsZFsyXS5kYXRhPXMubWFsbG9jRmxvYXQobi5uZXh0UG93MihpKSkpLHRoaXMuX2ZpZWxkWzJdPWgodGhpcy5fZmllbGRbMl0uZGF0YSxbZS5zaGFwZVswXSsyLGUuc2hhcGVbMV0rMl0pLHRoaXMucGFkRmllbGQodGhpcy5fZmllbGRbMl0sZSksdGhpcy5zaGFwZT1lLnNoYXBlLnNsaWNlKCk7Zm9yKHZhciBhPXRoaXMuc2hhcGUsbz0wO288MjsrK28pdGhpcy5fZmllbGRbMl0uc2l6ZT50aGlzLl9maWVsZFtvXS5kYXRhLmxlbmd0aCYmKHMuZnJlZUZsb2F0KHRoaXMuX2ZpZWxkW29dLmRhdGEpLHRoaXMuX2ZpZWxkW29dLmRhdGE9cy5tYWxsb2NGbG9hdCh0aGlzLl9maWVsZFsyXS5zaXplKSksdGhpcy5fZmllbGRbb109aCh0aGlzLl9maWVsZFtvXS5kYXRhLFthWzBdKzIsYVsxXSsyXSk7aWYodC5jb29yZHMpe3ZhciBwPXQuY29vcmRzO2lmKCFBcnJheS5pc0FycmF5KHApfHwzIT09cC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiZ2wtc3VyZmFjZTogaW52YWxpZCBjb29yZGluYXRlcyBmb3IgeC95XCIpO2ZvcihvPTA7bzwyOysrbyl7dmFyIGQ9cFtvXTtmb3IoYj0wO2I8MjsrK2IpaWYoZC5zaGFwZVtiXSE9PWFbYl0pdGhyb3cgbmV3IEVycm9yKFwiZ2wtc3VyZmFjZTogY29vcmRzIGhhdmUgaW5jb3JyZWN0IHNoYXBlXCIpO3RoaXMucGFkRmllbGQodGhpcy5fZmllbGRbb10sZCl9fWVsc2UgaWYodC50aWNrcyl7dmFyIGc9dC50aWNrcztpZighQXJyYXkuaXNBcnJheShnKXx8MiE9PWcubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImdsLXN1cmZhY2U6IGludmFsaWQgdGlja3NcIik7Zm9yKG89MDtvPDI7KytvKXt2YXIgbT1nW29dO2lmKChBcnJheS5pc0FycmF5KG0pfHxtLmxlbmd0aCkmJihtPWgobSkpLG0uc2hhcGVbMF0hPT1hW29dKXRocm93IG5ldyBFcnJvcihcImdsLXN1cmZhY2U6IGludmFsaWQgdGljayBsZW5ndGhcIik7dmFyIHk9aChtLmRhdGEsYSk7eS5zdHJpZGVbb109bS5zdHJpZGVbMF0seS5zdHJpZGVbMV5vXT0wLHRoaXMucGFkRmllbGQodGhpcy5fZmllbGRbb10seSl9fWVsc2V7Zm9yKG89MDtvPDI7KytvKXt2YXIgeD1bMCwwXTt4W29dPTEsdGhpcy5fZmllbGRbb109aCh0aGlzLl9maWVsZFtvXS5kYXRhLFthWzBdKzIsYVsxXSsyXSx4LDApfXRoaXMuX2ZpZWxkWzBdLnNldCgwLDAsMCk7Zm9yKHZhciBiPTA7YjxhWzBdOysrYil0aGlzLl9maWVsZFswXS5zZXQoYisxLDAsYik7Zm9yKHRoaXMuX2ZpZWxkWzBdLnNldChhWzBdKzEsMCxhWzBdLTEpLHRoaXMuX2ZpZWxkWzFdLnNldCgwLDAsMCksYj0wO2I8YVsxXTsrK2IpdGhpcy5fZmllbGRbMV0uc2V0KDAsYisxLGIpO3RoaXMuX2ZpZWxkWzFdLnNldCgwLGFbMV0rMSxhWzFdLTEpfXZhciBfPXRoaXMuX2ZpZWxkLHc9aChzLm1hbGxvY0Zsb2F0KDMqX1syXS5zaXplKjIpLFszLGFbMF0rMixhWzFdKzIsMl0pO2ZvcihvPTA7bzwzOysrbyl2KHcucGljayhvKSxfW29dLFwibWlycm9yXCIpO3ZhciBrPWgocy5tYWxsb2NGbG9hdCgzKl9bMl0uc2l6ZSksW2FbMF0rMixhWzFdKzIsM10pO2ZvcihvPTA7bzxhWzBdKzI7KytvKWZvcihiPTA7YjxhWzFdKzI7KytiKXt2YXIgVD13LmdldCgwLG8sYiwwKSxNPXcuZ2V0KDAsbyxiLDEpLEU9dy5nZXQoMSxvLGIsMCksQz13LmdldCgxLG8sYiwxKSxMPXcuZ2V0KDIsbyxiLDApLHo9dy5nZXQoMixvLGIsMSksTz1FKnotQypMLEk9TCpNLXoqVCxEPVQqQy1NKkUsUD1NYXRoLnNxcnQoTypPK0kqSStEKkQpO1A8MWUtOD8oUD1NYXRoLm1heChNYXRoLmFicyhPKSxNYXRoLmFicyhJKSxNYXRoLmFicyhEKSkpPDFlLTg/KEQ9MSxJPU89MCxQPTEpOlA9MS9QOlA9MS9NYXRoLnNxcnQoUCksay5zZXQobyxiLDAsTypQKSxrLnNldChvLGIsMSxJKlApLGsuc2V0KG8sYiwyLEQqUCl9cy5mcmVlKHcuZGF0YSk7dmFyIFI9WzEvMCwxLzAsMS8wXSxGPVstMS8wLC0xLzAsLTEvMF0sTj0xLzAsVj0tMS8wLFU9KGFbMF0tMSkqKGFbMV0tMSkqNixxPXMubWFsbG9jRmxvYXQobi5uZXh0UG93MigxMCpVKSksSD0wLEc9MDtmb3Iobz0wO288YVswXS0xOysrbyl0OmZvcihiPTA7YjxhWzFdLTE7KytiKXtmb3IodmFyIFk9MDtZPDI7KytZKWZvcih2YXIgVz0wO1c8MjsrK1cpZm9yKHZhciBYPTA7WDwzOysrWCl7dmFyIFo9dGhpcy5fZmllbGRbWF0uZ2V0KDErbytZLDErYitXKTtpZihpc05hTihaKXx8IWlzRmluaXRlKFopKWNvbnRpbnVlIHR9Zm9yKFg9MDtYPDY7KytYKXt2YXIgJD1vK0FbWF1bMF0sSj1iK0FbWF1bMV0sSz10aGlzLl9maWVsZFswXS5nZXQoJCsxLEorMSksUT10aGlzLl9maWVsZFsxXS5nZXQoJCsxLEorMSk7Wj10aGlzLl9maWVsZFsyXS5nZXQoJCsxLEorMSksTz1rLmdldCgkKzEsSisxLDApLEk9ay5nZXQoJCsxLEorMSwxKSxEPWsuZ2V0KCQrMSxKKzEsMiksdC5pbnRlbnNpdHkmJih0dD10LmludGVuc2l0eS5nZXQoJCxKKSk7dmFyIHR0PXQuaW50ZW5zaXR5P3QuaW50ZW5zaXR5LmdldCgkLEopOlordGhpcy5vYmplY3RPZmZzZXRbMl07cVtIKytdPSQscVtIKytdPUoscVtIKytdPUsscVtIKytdPVEscVtIKytdPVoscVtIKytdPTAscVtIKytdPXR0LHFbSCsrXT1PLHFbSCsrXT1JLHFbSCsrXT1ELFJbMF09TWF0aC5taW4oUlswXSxLK3RoaXMub2JqZWN0T2Zmc2V0WzBdKSxSWzFdPU1hdGgubWluKFJbMV0sUSt0aGlzLm9iamVjdE9mZnNldFsxXSksUlsyXT1NYXRoLm1pbihSWzJdLFordGhpcy5vYmplY3RPZmZzZXRbMl0pLE49TWF0aC5taW4oTix0dCksRlswXT1NYXRoLm1heChGWzBdLEsrdGhpcy5vYmplY3RPZmZzZXRbMF0pLEZbMV09TWF0aC5tYXgoRlsxXSxRK3RoaXMub2JqZWN0T2Zmc2V0WzFdKSxGWzJdPU1hdGgubWF4KEZbMl0sWit0aGlzLm9iamVjdE9mZnNldFsyXSksVj1NYXRoLm1heChWLHR0KSxHKz0xfX1mb3IodC5pbnRlbnNpdHlCb3VuZHMmJihOPSt0LmludGVuc2l0eUJvdW5kc1swXSxWPSt0LmludGVuc2l0eUJvdW5kc1sxXSksbz02O288SDtvKz0xMClxW29dPShxW29dLU4pLyhWLU4pO3RoaXMuX3ZlcnRleENvdW50PUcsdGhpcy5fY29vcmRpbmF0ZUJ1ZmZlci51cGRhdGUocS5zdWJhcnJheSgwLEgpKSxzLmZyZWVGbG9hdChxKSxzLmZyZWUoay5kYXRhKSx0aGlzLmJvdW5kcz1bUixGXSx0aGlzLmludGVuc2l0eT10LmludGVuc2l0eXx8dGhpcy5fZmllbGRbMl0sdGhpcy5pbnRlbnNpdHlCb3VuZHNbMF09PT1OJiZ0aGlzLmludGVuc2l0eUJvdW5kc1sxXT09PVZ8fChyPSEwKSx0aGlzLmludGVuc2l0eUJvdW5kcz1bTixWXX1pZihcImxldmVsc1wiaW4gdCl7dmFyIGV0PXQubGV2ZWxzO2ZvcihldD1BcnJheS5pc0FycmF5KGV0WzBdKT9ldC5zbGljZSgpOltbXSxbXSxldF0sbz0wO288MzsrK28pZXRbb109ZXRbb10uc2xpY2UoKSxldFtvXS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pO2ZvcihvPTA7bzwzOysrbylmb3IoYj0wO2I8ZXRbb10ubGVuZ3RoOysrYilldFtvXVtiXS09dGhpcy5vYmplY3RPZmZzZXRbb107dDpmb3Iobz0wO288MzsrK28pe2lmKGV0W29dLmxlbmd0aCE9PXRoaXMuY29udG91ckxldmVsc1tvXS5sZW5ndGgpe3I9ITA7YnJlYWt9Zm9yKGI9MDtiPGV0W29dLmxlbmd0aDsrK2IpaWYoZXRbb11bYl0hPT10aGlzLmNvbnRvdXJMZXZlbHNbb11bYl0pe3I9ITA7YnJlYWsgdH19dGhpcy5jb250b3VyTGV2ZWxzPWV0fWlmKHIpe189dGhpcy5fZmllbGQsYT10aGlzLnNoYXBlO2Zvcih2YXIgcnQ9W10sbnQ9MDtudDwzOysrbnQpe3ZhciBpdD10aGlzLmNvbnRvdXJMZXZlbHNbbnRdLGF0PVtdLG90PVtdLHN0PVswLDAsMF07Zm9yKG89MDtvPGl0Lmxlbmd0aDsrK28pe3ZhciBsdD1mKHRoaXMuX2ZpZWxkW250XSxpdFtvXSk7YXQucHVzaChydC5sZW5ndGgvNXwwKSxHPTA7dDpmb3IoYj0wO2I8bHQuY2VsbHMubGVuZ3RoOysrYil7dmFyIGN0PWx0LmNlbGxzW2JdO2ZvcihYPTA7WDwyOysrWCl7dmFyIHV0PWx0LnBvc2l0aW9uc1tjdFtYXV0saHQ9dXRbMF0sZnQ9MHxNYXRoLmZsb29yKGh0KSxwdD1odC1mdCxkdD11dFsxXSxndD0wfE1hdGguZmxvb3IoZHQpLHZ0PWR0LWd0LG10PSExO2U6Zm9yKHZhciB5dD0wO3l0PDM7Kyt5dCl7c3RbeXRdPTA7dmFyIHh0PShudCt5dCsxKSUzO2ZvcihZPTA7WTwyOysrWSl7dmFyIGJ0PVk/cHQ6MS1wdDtmb3IoJD0wfE1hdGgubWluKE1hdGgubWF4KGZ0K1ksMCksYVswXSksVz0wO1c8MjsrK1cpe3ZhciBfdD1XP3Z0OjEtdnQ7aWYoSj0wfE1hdGgubWluKE1hdGgubWF4KGd0K1csMCksYVsxXSksWj15dDwyP3RoaXMuX2ZpZWxkW3h0XS5nZXQoJCxKKToodGhpcy5pbnRlbnNpdHkuZ2V0KCQsSiktdGhpcy5pbnRlbnNpdHlCb3VuZHNbMF0pLyh0aGlzLmludGVuc2l0eUJvdW5kc1sxXS10aGlzLmludGVuc2l0eUJvdW5kc1swXSksIWlzRmluaXRlKFopfHxpc05hTihaKSl7bXQ9ITA7YnJlYWsgZX12YXIgd3Q9YnQqX3Q7c3RbeXRdKz13dCpafX19aWYobXQpe2lmKFg+MCl7Zm9yKHZhciBrdD0wO2t0PDU7KytrdClydC5wb3AoKTtHLT0xfWNvbnRpbnVlIHR9cnQucHVzaChzdFswXSxzdFsxXSx1dFswXSx1dFsxXSxzdFsyXSksRys9MX19b3QucHVzaChHKX10aGlzLl9jb250b3VyT2Zmc2V0c1tudF09YXQsdGhpcy5fY29udG91ckNvdW50c1tudF09b3R9dmFyIEF0PXMubWFsbG9jRmxvYXQocnQubGVuZ3RoKTtmb3Iobz0wO288cnQubGVuZ3RoOysrbylBdFtvXT1ydFtvXTt0aGlzLl9jb250b3VyQnVmZmVyLnVwZGF0ZShBdCkscy5mcmVlRmxvYXQoQXQpfXQuY29sb3JtYXAmJnRoaXMuX2NvbG9yTWFwLnNldFBpeGVscyhmdW5jdGlvbih0KXt2YXIgZT11KFtsKHtjb2xvcm1hcDp0LG5zaGFkZXM6Uyxmb3JtYXQ6XCJyZ2JhXCJ9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0sdFsxXSx0WzJdLDI1NSp0WzNdXX0pXSk7cmV0dXJuIGMuZGl2c2VxKGUsMjU1KSxlfSh0LmNvbG9ybWFwKSl9LEMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX3NoYWRlci5kaXNwb3NlKCksdGhpcy5fdmFvLmRpc3Bvc2UoKSx0aGlzLl9jb29yZGluYXRlQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLl9jb2xvck1hcC5kaXNwb3NlKCksdGhpcy5fY29udG91ckJ1ZmZlci5kaXNwb3NlKCksdGhpcy5fY29udG91clZBTy5kaXNwb3NlKCksdGhpcy5fY29udG91clNoYWRlci5kaXNwb3NlKCksdGhpcy5fY29udG91clBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMuX2R5bmFtaWNCdWZmZXIuZGlzcG9zZSgpLHRoaXMuX2R5bmFtaWNWQU8uZGlzcG9zZSgpO2Zvcih2YXIgdD0wO3Q8MzsrK3Qpcy5mcmVlRmxvYXQodGhpcy5fZmllbGRbdF0uZGF0YSl9LEMuaGlnaGxpZ2h0PWZ1bmN0aW9uKHQpe3ZhciBlLHI7aWYoIXQpcmV0dXJuIHRoaXMuX2R5bmFtaWNDb3VudHM9WzAsMCwwXSx0aGlzLmR5YW5hbWljTGV2ZWw9W05hTixOYU4sTmFOXSx2b2lkKHRoaXMuaGlnaGxpZ2h0TGV2ZWw9Wy0xLC0xLC0xXSk7Zm9yKGU9MDtlPDM7KytlKXRoaXMuZW5hYmxlSGlnaGxpZ2h0W2VdP3RoaXMuaGlnaGxpZ2h0TGV2ZWxbZV09dC5sZXZlbFtlXTp0aGlzLmhpZ2hsaWdodExldmVsW2VdPS0xO2ZvcihyPXRoaXMuc25hcFRvRGF0YT90LmRhdGFDb29yZGluYXRlOnQucG9zaXRpb24sZT0wO2U8MzsrK2UpcltlXS09dGhpcy5vYmplY3RPZmZzZXRbZV07aWYodGhpcy5lbmFibGVEeW5hbWljWzBdJiZyWzBdIT09dGhpcy5keW5hbWljTGV2ZWxbMF18fHRoaXMuZW5hYmxlRHluYW1pY1sxXSYmclsxXSE9PXRoaXMuZHluYW1pY0xldmVsWzFdfHx0aGlzLmVuYWJsZUR5bmFtaWNbMl0mJnJbMl0hPT10aGlzLmR5bmFtaWNMZXZlbFsyXSl7Zm9yKHZhciBuPTAsaT10aGlzLnNoYXBlLGE9cy5tYWxsb2NGbG9hdCgxMippWzBdKmlbMV0pLG89MDtvPDM7KytvKWlmKHRoaXMuZW5hYmxlRHluYW1pY1tvXSl7dGhpcy5keW5hbWljTGV2ZWxbb109cltvXTt2YXIgbD0obysxKSUzLGM9KG8rMiklMyx1PXRoaXMuX2ZpZWxkW29dLGg9dGhpcy5fZmllbGRbbF0scD10aGlzLl9maWVsZFtjXSxkPWYodSxyW29dKSxnPWQuY2VsbHMsdj1kLnBvc2l0aW9ucztmb3IodGhpcy5fZHluYW1pY09mZnNldHNbb109bixlPTA7ZTxnLmxlbmd0aDsrK2UpZm9yKHZhciBtPWdbZV0seT0wO3k8MjsrK3kpe3ZhciB4PXZbbVt5XV0sYj0reFswXSxfPTB8Yix3PTB8TWF0aC5taW4oXysxLGlbMF0pLGs9Yi1fLEE9MS1rLFQ9K3hbMV0sTT0wfFQsUz0wfE1hdGgubWluKE0rMSxpWzFdKSxFPVQtTSxDPTEtRSxMPUEqQyx6PUEqRSxPPWsqQyxJPWsqRSxEPUwqaC5nZXQoXyxNKSt6KmguZ2V0KF8sUykrTypoLmdldCh3LE0pK0kqaC5nZXQodyxTKSxQPUwqcC5nZXQoXyxNKSt6KnAuZ2V0KF8sUykrTypwLmdldCh3LE0pK0kqcC5nZXQodyxTKTtpZihpc05hTihEKXx8aXNOYU4oUCkpe3kmJihuLT0xKTticmVha31hWzIqbiswXT1ELGFbMipuKzFdPVAsbis9MX10aGlzLl9keW5hbWljQ291bnRzW29dPW4tdGhpcy5fZHluYW1pY09mZnNldHNbb119ZWxzZSB0aGlzLmR5bmFtaWNMZXZlbFtvXT1OYU4sdGhpcy5fZHluYW1pY0NvdW50c1tvXT0wO3RoaXMuX2R5bmFtaWNCdWZmZXIudXBkYXRlKGEuc3ViYXJyYXkoMCwyKm4pKSxzLmZyZWVGbG9hdChhKX19fSx7XCIuL2xpYi9zaGFkZXJzXCI6MzExLFwiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIjozMTIsXCJiaXQtdHdpZGRsZVwiOjgzLGNvbG9ybWFwOjExNyxcImdsLWJ1ZmZlclwiOjIzOCxcImdsLW1hdDQvaW52ZXJ0XCI6MjYyLFwiZ2wtbWF0NC9tdWx0aXBseVwiOjI2NCxcImdsLXRleHR1cmUyZFwiOjMxNSxcImdsLXZhb1wiOjMyMCxuZGFycmF5OjQ0MyxcIm5kYXJyYXktZ3JhZGllbnRcIjo0MzQsXCJuZGFycmF5LW9wc1wiOjQzNyxcIm5kYXJyYXktcGFja1wiOjQzOCxcInN1cmZhY2UtbmV0c1wiOjUxNixcInR5cGVkYXJyYXktcG9vbFwiOjUzMH1dLDMxNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJjc3MtZm9udFwiKSxpPXQoXCJwaWNrLWJ5LWFsaWFzXCIpLGE9dChcInJlZ2xcIiksbz10KFwiZ2wtdXRpbC9jb250ZXh0XCIpLHM9dChcImVzNi13ZWFrLW1hcFwiKSxsPXQoXCJjb2xvci1ub3JtYWxpemVcIiksYz10KFwiZm9udC1hdGxhc1wiKSx1PXQoXCJ0eXBlZGFycmF5LXBvb2xcIiksaD10KFwicGFyc2UtcmVjdFwiKSxmPXQoXCJpcy1wbGFpbi1vYmpcIikscD10KFwicGFyc2UtdW5pdFwiKSxkPXQoXCJ0by1weFwiKSxnPXQoXCJkZXRlY3Qta2VybmluZ1wiKSx2PXQoXCJvYmplY3QtYXNzaWduXCIpLG09dChcImZvbnQtbWVhc3VyZVwiKSx5PXQoXCJmbGF0dGVuLXZlcnRleC1kYXRhXCIpLHg9dChcImJpdC10d2lkZGxlXCIpLm5leHRQb3cyLGI9bmV3IHMsXz0hMTtpZihkb2N1bWVudC5ib2R5KXt2YXIgdz1kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpO3cuc3R5bGUuZm9udD1cIml0YWxpYyBzbWFsbC1jYXBzIGJvbGQgY29uZGVuc2VkIDE2cHgvMiBjdXJzaXZlXCIsZ2V0Q29tcHV0ZWRTdHlsZSh3KS5mb250U3RyZXRjaCYmKF89ITApLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodyl9dmFyIGs9ZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJnQuX2dsJiZ0LnByb3AmJnQudGV4dHVyZSYmdC5idWZmZXJ9KHQpP3RoaXMuZ2w9byh0KToodD17cmVnbDp0fSx0aGlzLmdsPXQucmVnbC5fZ2wpLHRoaXMuc2hhZGVyPWIuZ2V0KHRoaXMuZ2wpLHRoaXMuc2hhZGVyP3RoaXMucmVnbD10aGlzLnNoYWRlci5yZWdsOnRoaXMucmVnbD10LnJlZ2x8fGEoe2dsOnRoaXMuZ2x9KSx0aGlzLmNoYXJCdWZmZXI9dGhpcy5yZWdsLmJ1ZmZlcih7dHlwZTpcInVpbnQ4XCIsdXNhZ2U6XCJzdHJlYW1cIn0pLHRoaXMuc2l6ZUJ1ZmZlcj10aGlzLnJlZ2wuYnVmZmVyKHt0eXBlOlwiZmxvYXRcIix1c2FnZTpcInN0cmVhbVwifSksdGhpcy5zaGFkZXJ8fCh0aGlzLnNoYWRlcj10aGlzLmNyZWF0ZVNoYWRlcigpLGIuc2V0KHRoaXMuZ2wsdGhpcy5zaGFkZXIpKSx0aGlzLmJhdGNoPVtdLHRoaXMuZm9udFNpemU9W10sdGhpcy5mb250PVtdLHRoaXMuZm9udEF0bGFzPVtdLHRoaXMuZHJhdz10aGlzLnNoYWRlci5kcmF3LmJpbmQodGhpcyksdGhpcy5yZW5kZXI9ZnVuY3Rpb24oKXt0aGlzLnJlZ2wuX3JlZnJlc2goKSx0aGlzLmRyYXcodGhpcy5iYXRjaCl9LHRoaXMuY2FudmFzPXRoaXMuZ2wuY2FudmFzLHRoaXMudXBkYXRlKGYodCk/dDp7fSl9O2sucHJvdG90eXBlLmNyZWF0ZVNoYWRlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMucmVnbCxlPXQoe2JsZW5kOntlbmFibGU6ITAsY29sb3I6WzAsMCwwLDFdLGZ1bmM6e3NyY1JHQjpcInNyYyBhbHBoYVwiLGRzdFJHQjpcIm9uZSBtaW51cyBzcmMgYWxwaGFcIixzcmNBbHBoYTpcIm9uZSBtaW51cyBkc3QgYWxwaGFcIixkc3RBbHBoYTpcIm9uZVwifX0sc3RlbmNpbDp7ZW5hYmxlOiExfSxkZXB0aDp7ZW5hYmxlOiExfSxjb3VudDp0LnByb3AoXCJjb3VudFwiKSxvZmZzZXQ6dC5wcm9wKFwib2Zmc2V0XCIpLGF0dHJpYnV0ZXM6e2NoYXJPZmZzZXQ6e29mZnNldDo0LHN0cmlkZTo4LGJ1ZmZlcjp0LnRoaXMoXCJzaXplQnVmZmVyXCIpfSx3aWR0aDp7b2Zmc2V0OjAsc3RyaWRlOjgsYnVmZmVyOnQudGhpcyhcInNpemVCdWZmZXJcIil9LGNoYXI6dC50aGlzKFwiY2hhckJ1ZmZlclwiKSxwb3NpdGlvbjp0LnRoaXMoXCJwb3NpdGlvblwiKX0sdW5pZm9ybXM6e2F0bGFzU2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybltlLmF0bGFzLndpZHRoLGUuYXRsYXMuaGVpZ2h0XX0sYXRsYXNEaW06ZnVuY3Rpb24odCxlKXtyZXR1cm5bZS5hdGxhcy5jb2xzLGUuYXRsYXMucm93c119LGF0bGFzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuYXRsYXMudGV4dHVyZX0sY2hhclN0ZXA6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5hdGxhcy5zdGVwfSxlbTpmdW5jdGlvbih0LGUpe3JldHVybiBlLmF0bGFzLmVtfSxjb2xvcjp0LnByb3AoXCJjb2xvclwiKSxvcGFjaXR5OnQucHJvcChcIm9wYWNpdHlcIiksdmlld3BvcnQ6dC50aGlzKFwidmlld3BvcnRBcnJheVwiKSxzY2FsZTp0LnRoaXMoXCJzY2FsZVwiKSxhbGlnbjp0LnByb3AoXCJhbGlnblwiKSxiYXNlbGluZTp0LnByb3AoXCJiYXNlbGluZVwiKSx0cmFuc2xhdGU6dC50aGlzKFwidHJhbnNsYXRlXCIpLHBvc2l0aW9uT2Zmc2V0OnQucHJvcChcInBvc2l0aW9uT2Zmc2V0XCIpfSxwcmltaXRpdmU6XCJwb2ludHNcIix2aWV3cG9ydDp0LnRoaXMoXCJ2aWV3cG9ydFwiKSx2ZXJ0OlwiXFxuXFx0XFx0XFx0cHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcblxcdFxcdFxcdGF0dHJpYnV0ZSBmbG9hdCB3aWR0aCwgY2hhck9mZnNldCwgY2hhcjtcXG5cXHRcXHRcXHRhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcXG5cXHRcXHRcXHR1bmlmb3JtIGZsb2F0IGZvbnRTaXplLCBjaGFyU3RlcCwgZW0sIGFsaWduLCBiYXNlbGluZTtcXG5cXHRcXHRcXHR1bmlmb3JtIHZlYzQgdmlld3BvcnQ7XFxuXFx0XFx0XFx0dW5pZm9ybSB2ZWM0IGNvbG9yO1xcblxcdFxcdFxcdHVuaWZvcm0gdmVjMiBhdGxhc1NpemUsIGF0bGFzRGltLCBzY2FsZSwgdHJhbnNsYXRlLCBwb3NpdGlvbk9mZnNldDtcXG5cXHRcXHRcXHR2YXJ5aW5nIHZlYzIgY2hhckNvb3JkLCBjaGFySWQ7XFxuXFx0XFx0XFx0dmFyeWluZyBmbG9hdCBjaGFyV2lkdGg7XFxuXFx0XFx0XFx0dmFyeWluZyB2ZWM0IGZvbnRDb2xvcjtcXG5cXHRcXHRcXHR2b2lkIG1haW4gKCkge1xcblxcdFxcdFxcdFxcdFwiKyhrLm5vcm1hbFZpZXdwb3J0P1wiXCI6XCJ2ZWMyIHBvc2l0aW9uT2Zmc2V0ID0gdmVjMihwb3NpdGlvbk9mZnNldC54LC0gcG9zaXRpb25PZmZzZXQueSk7XCIpK1wiXFxuXFxuXFx0XFx0XFx0XFx0dmVjMiBvZmZzZXQgPSBmbG9vcihlbSAqICh2ZWMyKGFsaWduICsgY2hhck9mZnNldCwgYmFzZWxpbmUpXFxuXFx0XFx0XFx0XFx0XFx0KyBwb3NpdGlvbk9mZnNldCkpXFxuXFx0XFx0XFx0XFx0XFx0LyAodmlld3BvcnQuencgKiBzY2FsZS54eSk7XFxuXFxuXFx0XFx0XFx0XFx0dmVjMiBwb3NpdGlvbiA9IChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZTtcXG5cXHRcXHRcXHRcXHRwb3NpdGlvbiArPSBvZmZzZXQgKiBzY2FsZTtcXG5cXG5cXHRcXHRcXHRcXHRcIisoay5ub3JtYWxWaWV3cG9ydD9cInBvc2l0aW9uLnkgPSAxLiAtIHBvc2l0aW9uLnk7XCI6XCJcIikrXCJcXG5cXG5cXHRcXHRcXHRcXHRjaGFyQ29vcmQgPSBwb3NpdGlvbiAqIHZpZXdwb3J0Lnp3ICsgdmlld3BvcnQueHk7XFxuXFxuXFx0XFx0XFx0XFx0Z2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uICogMi4gLSAxLiwgMCwgMSk7XFxuXFxuXFx0XFx0XFx0XFx0Z2xfUG9pbnRTaXplID0gY2hhclN0ZXA7XFxuXFxuXFx0XFx0XFx0XFx0Y2hhcklkLnggPSBtb2QoY2hhciwgYXRsYXNEaW0ueCk7XFxuXFx0XFx0XFx0XFx0Y2hhcklkLnkgPSBmbG9vcihjaGFyIC8gYXRsYXNEaW0ueCk7XFxuXFxuXFx0XFx0XFx0XFx0Y2hhcldpZHRoID0gd2lkdGggKiBlbTtcXG5cXG5cXHRcXHRcXHRcXHRmb250Q29sb3IgPSBjb2xvciAvIDI1NS47XFxuXFx0XFx0XFx0fVwiLGZyYWc6XCJcXG5cXHRcXHRcXHRwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuXFx0XFx0XFx0dW5pZm9ybSBzYW1wbGVyMkQgYXRsYXM7XFxuXFx0XFx0XFx0dW5pZm9ybSBmbG9hdCBmb250U2l6ZSwgY2hhclN0ZXAsIG9wYWNpdHk7XFxuXFx0XFx0XFx0dW5pZm9ybSB2ZWMyIGF0bGFzU2l6ZTtcXG5cXHRcXHRcXHR1bmlmb3JtIHZlYzQgdmlld3BvcnQ7XFxuXFx0XFx0XFx0dmFyeWluZyB2ZWM0IGZvbnRDb2xvcjtcXG5cXHRcXHRcXHR2YXJ5aW5nIHZlYzIgY2hhckNvb3JkLCBjaGFySWQ7XFxuXFx0XFx0XFx0dmFyeWluZyBmbG9hdCBjaGFyV2lkdGg7XFxuXFxuXFx0XFx0XFx0ZmxvYXQgbGlnaHRuZXNzKHZlYzQgY29sb3IpIHtcXG5cXHRcXHRcXHRcXHRyZXR1cm4gY29sb3IuciAqIDAuMjk5ICsgY29sb3IuZyAqIDAuNTg3ICsgY29sb3IuYiAqIDAuMTE0O1xcblxcdFxcdFxcdH1cXG5cXG5cXHRcXHRcXHR2b2lkIG1haW4gKCkge1xcblxcdFxcdFxcdFxcdHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHkgLSBjaGFyQ29vcmQgKyBjaGFyU3RlcCAqIC41O1xcblxcdFxcdFxcdFxcdGZsb2F0IGhhbGZDaGFyU3RlcCA9IGZsb29yKGNoYXJTdGVwICogLjUgKyAuNSk7XFxuXFxuXFx0XFx0XFx0XFx0Ly8gaW52ZXJ0IHkgYW5kIHNoaWZ0IGJ5IDFweCAoRkYgZXhwZWNpYWxseSBuZWVkcyB0aGF0KVxcblxcdFxcdFxcdFxcdHV2LnkgPSBjaGFyU3RlcCAtIHV2Lnk7XFxuXFxuXFx0XFx0XFx0XFx0Ly8gaWdub3JlIHBvaW50cyBvdXRzaWRlIG9mIGNoYXJhY3RlciBib3VuZGluZyBib3hcXG5cXHRcXHRcXHRcXHRmbG9hdCBoYWxmQ2hhcldpZHRoID0gY2VpbChjaGFyV2lkdGggKiAuNSk7XFxuXFx0XFx0XFx0XFx0aWYgKGZsb29yKHV2LngpID4gaGFsZkNoYXJTdGVwICsgaGFsZkNoYXJXaWR0aCB8fFxcblxcdFxcdFxcdFxcdFxcdGZsb29yKHV2LngpIDwgaGFsZkNoYXJTdGVwIC0gaGFsZkNoYXJXaWR0aCkgcmV0dXJuO1xcblxcblxcdFxcdFxcdFxcdHV2ICs9IGNoYXJJZCAqIGNoYXJTdGVwO1xcblxcdFxcdFxcdFxcdHV2ID0gdXYgLyBhdGxhc1NpemU7XFxuXFxuXFx0XFx0XFx0XFx0dmVjNCBjb2xvciA9IGZvbnRDb2xvcjtcXG5cXHRcXHRcXHRcXHR2ZWM0IG1hc2sgPSB0ZXh0dXJlMkQoYXRsYXMsIHV2KTtcXG5cXG5cXHRcXHRcXHRcXHRmbG9hdCBtYXNrWSA9IGxpZ2h0bmVzcyhtYXNrKTtcXG5cXHRcXHRcXHRcXHQvLyBmbG9hdCBjb2xvclkgPSBsaWdodG5lc3MoY29sb3IpO1xcblxcdFxcdFxcdFxcdGNvbG9yLmEgKj0gbWFza1k7XFxuXFx0XFx0XFx0XFx0Y29sb3IuYSAqPSBvcGFjaXR5O1xcblxcblxcdFxcdFxcdFxcdC8vIGNvbG9yLmEgKz0gLjE7XFxuXFxuXFx0XFx0XFx0XFx0Ly8gYW50aWFsaWFzaW5nLCBzZWUgeWlxIGNvbG9yIHNwYWNlIHktY2hhbm5lbCBmb3JtdWxhXFxuXFx0XFx0XFx0XFx0Ly8gY29sb3IucmdiICs9ICgxLiAtIGNvbG9yLnJnYikgKiAoMS4gLSBtYXNrLnJnYik7XFxuXFxuXFx0XFx0XFx0XFx0Z2xfRnJhZ0NvbG9yID0gY29sb3I7XFxuXFx0XFx0XFx0fVwifSk7cmV0dXJue3JlZ2w6dCxkcmF3OmUsYXRsYXM6e319fSxrLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZihcInN0cmluZ1wiPT10eXBlb2YgdCl0PXt0ZXh0OnR9O2Vsc2UgaWYoIXQpcmV0dXJuO251bGwhPSh0PWkodCx7cG9zaXRpb246XCJwb3NpdGlvbiBwb3NpdGlvbnMgY29vcmQgY29vcmRzIGNvb3JkaW5hdGVzXCIsZm9udDpcImZvbnQgZm9udEZhY2UgZm9udGZhY2UgdHlwZWZhY2UgY3NzRm9udCBjc3MtZm9udCBmYW1pbHkgZm9udEZhbWlseVwiLGZvbnRTaXplOlwiZm9udFNpemUgZm9udHNpemUgc2l6ZSBmb250LXNpemVcIix0ZXh0OlwidGV4dCB0ZXh0cyBjaGFycyBjaGFyYWN0ZXJzIHZhbHVlIHZhbHVlcyBzeW1ib2xzXCIsYWxpZ246XCJhbGlnbiBhbGlnbm1lbnQgdGV4dEFsaWduIHRleHRiYXNlbGluZVwiLGJhc2VsaW5lOlwiYmFzZWxpbmUgdGV4dEJhc2VsaW5lIHRleHRiYXNlbGluZVwiLGRpcmVjdGlvbjpcImRpciBkaXJlY3Rpb24gdGV4dERpcmVjdGlvblwiLGNvbG9yOlwiY29sb3IgY29sb3VyIGZpbGwgZmlsbC1jb2xvciBmaWxsQ29sb3IgdGV4dENvbG9yIHRleHRjb2xvclwiLGtlcm5pbmc6XCJrZXJuaW5nIGtlcm5cIixyYW5nZTpcInJhbmdlIGRhdGFCb3hcIix2aWV3cG9ydDpcInZwIHZpZXdwb3J0IHZpZXdCb3ggdmlld2JveCB2aWV3UG9ydFwiLG9wYWNpdHk6XCJvcGFjaXR5IGFscGhhIHRyYW5zcGFyZW5jeSB2aXNpYmxlIHZpc2liaWxpdHkgb3BhcXVlXCIsb2Zmc2V0Olwib2Zmc2V0IHBvc2l0aW9uT2Zmc2V0IHBhZGRpbmcgc2hpZnQgaW5kZW50IGluZGVudGF0aW9uXCJ9LCEwKSkub3BhY2l0eSYmKEFycmF5LmlzQXJyYXkodC5vcGFjaXR5KT90aGlzLm9wYWNpdHk9dC5vcGFjaXR5Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KX0pOnRoaXMub3BhY2l0eT1wYXJzZUZsb2F0KHQub3BhY2l0eSkpLG51bGwhPXQudmlld3BvcnQmJih0aGlzLnZpZXdwb3J0PWgodC52aWV3cG9ydCksay5ub3JtYWxWaWV3cG9ydCYmKHRoaXMudmlld3BvcnQueT10aGlzLmNhbnZhcy5oZWlnaHQtdGhpcy52aWV3cG9ydC55LXRoaXMudmlld3BvcnQuaGVpZ2h0KSx0aGlzLnZpZXdwb3J0QXJyYXk9W3RoaXMudmlld3BvcnQueCx0aGlzLnZpZXdwb3J0LnksdGhpcy52aWV3cG9ydC53aWR0aCx0aGlzLnZpZXdwb3J0LmhlaWdodF0pLG51bGw9PXRoaXMudmlld3BvcnQmJih0aGlzLnZpZXdwb3J0PXt4OjAseTowLHdpZHRoOnRoaXMuZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLGhlaWdodDp0aGlzLmdsLmRyYXdpbmdCdWZmZXJIZWlnaHR9LHRoaXMudmlld3BvcnRBcnJheT1bdGhpcy52aWV3cG9ydC54LHRoaXMudmlld3BvcnQueSx0aGlzLnZpZXdwb3J0LndpZHRoLHRoaXMudmlld3BvcnQuaGVpZ2h0XSksbnVsbCE9dC5rZXJuaW5nJiYodGhpcy5rZXJuaW5nPXQua2VybmluZyksbnVsbCE9dC5vZmZzZXQmJihcIm51bWJlclwiPT10eXBlb2YgdC5vZmZzZXQmJih0Lm9mZnNldD1bdC5vZmZzZXQsMF0pLHRoaXMucG9zaXRpb25PZmZzZXQ9eSh0Lm9mZnNldCkpLHQuZGlyZWN0aW9uJiYodGhpcy5kaXJlY3Rpb249dC5kaXJlY3Rpb24pLHQucmFuZ2UmJih0aGlzLnJhbmdlPXQucmFuZ2UsdGhpcy5zY2FsZT1bMS8odC5yYW5nZVsyXS10LnJhbmdlWzBdKSwxLyh0LnJhbmdlWzNdLXQucmFuZ2VbMV0pXSx0aGlzLnRyYW5zbGF0ZT1bLXQucmFuZ2VbMF0sLXQucmFuZ2VbMV1dKSx0LnNjYWxlJiYodGhpcy5zY2FsZT10LnNjYWxlKSx0LnRyYW5zbGF0ZSYmKHRoaXMudHJhbnNsYXRlPXQudHJhbnNsYXRlKSx0aGlzLnNjYWxlfHwodGhpcy5zY2FsZT1bMS90aGlzLnZpZXdwb3J0LndpZHRoLDEvdGhpcy52aWV3cG9ydC5oZWlnaHRdKSx0aGlzLnRyYW5zbGF0ZXx8KHRoaXMudHJhbnNsYXRlPVswLDBdKSx0aGlzLmZvbnQubGVuZ3RofHx0LmZvbnR8fCh0LmZvbnQ9ay5iYXNlRm9udFNpemUrXCJweCBzYW5zLXNlcmlmXCIpO3ZhciByLGE9ITEsbz0hMTtpZih0LmZvbnQmJihBcnJheS5pc0FycmF5KHQuZm9udCk/dC5mb250Olt0LmZvbnRdKS5mb3JFYWNoKGZ1bmN0aW9uKHQscil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpdHJ5e3Q9bi5wYXJzZSh0KX1jYXRjaChlKXt0PW4ucGFyc2Uoay5iYXNlRm9udFNpemUrXCJweCBcIit0KX1lbHNlIHQ9bi5wYXJzZShuLnN0cmluZ2lmeSh0KSk7dmFyIGk9bi5zdHJpbmdpZnkoe3NpemU6ay5iYXNlRm9udFNpemUsZmFtaWx5OnQuZmFtaWx5LHN0cmV0Y2g6Xz90LnN0cmV0Y2g6dm9pZCAwLHZhcmlhbnQ6dC52YXJpYW50LHdlaWdodDp0LndlaWdodCxzdHlsZTp0LnN0eWxlfSkscz1wKHQuc2l6ZSksbD1NYXRoLnJvdW5kKHNbMF0qZChzWzFdKSk7aWYobCE9PWUuZm9udFNpemVbcl0mJihvPSEwLGUuZm9udFNpemVbcl09bCksIShlLmZvbnRbcl0mJmk9PWUuZm9udFtyXS5iYXNlU3RyaW5nfHwoYT0hMCxlLmZvbnRbcl09ay5mb250c1tpXSxlLmZvbnRbcl0pKSl7dmFyIGM9dC5mYW1pbHkuam9pbihcIiwgXCIpLHU9W3Quc3R5bGVdO3Quc3R5bGUhPXQudmFyaWFudCYmdS5wdXNoKHQudmFyaWFudCksdC52YXJpYW50IT10LndlaWdodCYmdS5wdXNoKHQud2VpZ2h0KSxfJiZ0LndlaWdodCE9dC5zdHJldGNoJiZ1LnB1c2godC5zdHJldGNoKSxlLmZvbnRbcl09e2Jhc2VTdHJpbmc6aSxmYW1pbHk6Yyx3ZWlnaHQ6dC53ZWlnaHQsc3RyZXRjaDp0LnN0cmV0Y2gsc3R5bGU6dC5zdHlsZSx2YXJpYW50OnQudmFyaWFudCx3aWR0aDp7fSxrZXJuaW5nOnt9LG1ldHJpY3M6bShjLHtvcmlnaW46XCJ0b3BcIixmb250U2l6ZTprLmJhc2VGb250U2l6ZSxmb250U3R5bGU6dS5qb2luKFwiIFwiKX0pfSxrLmZvbnRzW2ldPWUuZm9udFtyXX19KSwoYXx8bykmJnRoaXMuZm9udC5mb3JFYWNoKGZ1bmN0aW9uKHIsaSl7dmFyIGE9bi5zdHJpbmdpZnkoe3NpemU6ZS5mb250U2l6ZVtpXSxmYW1pbHk6ci5mYW1pbHksc3RyZXRjaDpfP3Iuc3RyZXRjaDp2b2lkIDAsdmFyaWFudDpyLnZhcmlhbnQsd2VpZ2h0OnIud2VpZ2h0LHN0eWxlOnIuc3R5bGV9KTtpZihlLmZvbnRBdGxhc1tpXT1lLnNoYWRlci5hdGxhc1thXSwhZS5mb250QXRsYXNbaV0pe3ZhciBvPXIubWV0cmljcztlLnNoYWRlci5hdGxhc1thXT1lLmZvbnRBdGxhc1tpXT17Zm9udFN0cmluZzphLHN0ZXA6MipNYXRoLmNlaWwoZS5mb250U2l6ZVtpXSpvLmJvdHRvbSouNSksZW06ZS5mb250U2l6ZVtpXSxjb2xzOjAscm93czowLGhlaWdodDowLHdpZHRoOjAsY2hhcnM6W10saWRzOnt9LHRleHR1cmU6ZS5yZWdsLnRleHR1cmUoKX19bnVsbD09dC50ZXh0JiYodC50ZXh0PWUudGV4dCl9KSxcInN0cmluZ1wiPT10eXBlb2YgdC50ZXh0JiZ0LnBvc2l0aW9uJiZ0LnBvc2l0aW9uLmxlbmd0aD4yKXtmb3IodmFyIHM9QXJyYXkoLjUqdC5wb3NpdGlvbi5sZW5ndGgpLGY9MDtmPHMubGVuZ3RoO2YrKylzW2ZdPXQudGV4dDt0LnRleHQ9c31pZihudWxsIT10LnRleHR8fGEpe2lmKHRoaXMudGV4dE9mZnNldHM9WzBdLEFycmF5LmlzQXJyYXkodC50ZXh0KSl7dGhpcy5jb3VudD10LnRleHRbMF0ubGVuZ3RoLHRoaXMuY291bnRzPVt0aGlzLmNvdW50XTtmb3IodmFyIGI9MTtiPHQudGV4dC5sZW5ndGg7YisrKWUudGV4dE9mZnNldHNbYl09ZS50ZXh0T2Zmc2V0c1tiLTFdK3QudGV4dFtiLTFdLmxlbmd0aCxlLmNvdW50Kz10LnRleHRbYl0ubGVuZ3RoLGUuY291bnRzLnB1c2godC50ZXh0W2JdLmxlbmd0aCk7dGhpcy50ZXh0PXQudGV4dC5qb2luKFwiXCIpfWVsc2UgdGhpcy50ZXh0PXQudGV4dCx0aGlzLmNvdW50PXRoaXMudGV4dC5sZW5ndGgsdGhpcy5jb3VudHM9W3RoaXMuY291bnRdO3I9W10sdGhpcy5mb250LmZvckVhY2goZnVuY3Rpb24odCxuKXtrLmF0bGFzQ29udGV4dC5mb250PXQuYmFzZVN0cmluZztmb3IodmFyIGk9ZS5mb250QXRsYXNbbl0sYT0wO2E8ZS50ZXh0Lmxlbmd0aDthKyspe3ZhciBvPWUudGV4dC5jaGFyQXQoYSk7aWYobnVsbD09aS5pZHNbb10mJihpLmlkc1tvXT1pLmNoYXJzLmxlbmd0aCxpLmNoYXJzLnB1c2gobyksci5wdXNoKG8pKSxudWxsPT10LndpZHRoW29dJiYodC53aWR0aFtvXT1rLmF0bGFzQ29udGV4dC5tZWFzdXJlVGV4dChvKS53aWR0aC9rLmJhc2VGb250U2l6ZSxlLmtlcm5pbmcpKXt2YXIgcz1bXTtmb3IodmFyIGwgaW4gdC53aWR0aClzLnB1c2gobCtvLG8rbCk7dih0Lmtlcm5pbmcsZyh0LmZhbWlseSx7cGFpcnM6c30pKX19fSl9aWYodC5wb3NpdGlvbilpZih0LnBvc2l0aW9uLmxlbmd0aD4yKXtmb3IodmFyIHc9IXQucG9zaXRpb25bMF0ubGVuZ3RoLEE9dS5tYWxsb2NGbG9hdCgyKnRoaXMuY291bnQpLFQ9MCxNPTA7VDx0aGlzLmNvdW50cy5sZW5ndGg7VCsrKXt2YXIgUz1lLmNvdW50c1tUXTtpZih3KWZvcih2YXIgRT0wO0U8UztFKyspQVtNKytdPXQucG9zaXRpb25bMipUXSxBW00rK109dC5wb3NpdGlvblsyKlQrMV07ZWxzZSBmb3IodmFyIEM9MDtDPFM7QysrKUFbTSsrXT10LnBvc2l0aW9uW1RdWzBdLEFbTSsrXT10LnBvc2l0aW9uW1RdWzFdfXRoaXMucG9zaXRpb24uY2FsbD90aGlzLnBvc2l0aW9uKHt0eXBlOlwiZmxvYXRcIixkYXRhOkF9KTp0aGlzLnBvc2l0aW9uPXRoaXMucmVnbC5idWZmZXIoe3R5cGU6XCJmbG9hdFwiLGRhdGE6QX0pLHUuZnJlZUZsb2F0KEEpfWVsc2UgdGhpcy5wb3NpdGlvbi5kZXN0cm95JiZ0aGlzLnBvc2l0aW9uLmRlc3Ryb3koKSx0aGlzLnBvc2l0aW9uPXtjb25zdGFudDp0LnBvc2l0aW9ufTtpZih0LnRleHR8fGEpe3ZhciBMPXUubWFsbG9jVWludDgodGhpcy5jb3VudCksej11Lm1hbGxvY0Zsb2F0KDIqdGhpcy5jb3VudCk7dGhpcy50ZXh0V2lkdGg9W107Zm9yKHZhciBPPTAsST0wO088dGhpcy5jb3VudHMubGVuZ3RoO08rKyl7Zm9yKHZhciBEPWUuY291bnRzW09dLFA9ZS5mb250W09dfHxlLmZvbnRbMF0sUj1lLmZvbnRBdGxhc1tPXXx8ZS5mb250QXRsYXNbMF0sRj0wO0Y8RDtGKyspe3ZhciBCPWUudGV4dC5jaGFyQXQoSSksTj1lLnRleHQuY2hhckF0KEktMSk7aWYoTFtJXT1SLmlkc1tCXSx6WzIqSV09UC53aWR0aFtCXSxGKXt2YXIgaj16WzIqSS0yXSxWPXpbMipJXSxVPXpbMipJLTFdKy41KmorLjUqVjtpZihlLmtlcm5pbmcpe3ZhciBxPVAua2VybmluZ1tOK0JdO3EmJihVKz0uMDAxKnEpfXpbMipJKzFdPVV9ZWxzZSB6WzIqSSsxXT0uNSp6WzIqSV07SSsrfWUudGV4dFdpZHRoLnB1c2goei5sZW5ndGg/LjUqelsyKkktMl0relsyKkktMV06MCl9dC5hbGlnbnx8KHQuYWxpZ249dGhpcy5hbGlnbiksdGhpcy5jaGFyQnVmZmVyKHtkYXRhOkwsdHlwZTpcInVpbnQ4XCIsdXNhZ2U6XCJzdHJlYW1cIn0pLHRoaXMuc2l6ZUJ1ZmZlcih7ZGF0YTp6LHR5cGU6XCJmbG9hdFwiLHVzYWdlOlwic3RyZWFtXCJ9KSx1LmZyZWVVaW50OChMKSx1LmZyZWVGbG9hdCh6KSxyLmxlbmd0aCYmdGhpcy5mb250LmZvckVhY2goZnVuY3Rpb24odCxyKXt2YXIgbj1lLmZvbnRBdGxhc1tyXSxpPW4uc3RlcCxhPU1hdGguZmxvb3Ioay5tYXhBdGxhc1NpemUvaSksbz1NYXRoLm1pbihhLG4uY2hhcnMubGVuZ3RoKSxzPU1hdGguY2VpbChuLmNoYXJzLmxlbmd0aC9vKSxsPXgobyppKSx1PXgocyppKTtuLndpZHRoPWwsbi5oZWlnaHQ9dSxuLnJvd3M9cyxuLmNvbHM9byxuLmVtJiZuLnRleHR1cmUoe2RhdGE6Yyh7Y2FudmFzOmsuYXRsYXNDYW52YXMsZm9udDpuLmZvbnRTdHJpbmcsY2hhcnM6bi5jaGFycyxzaGFwZTpbbCx1XSxzdGVwOltpLGldfSl9KX0pfWlmKHQuYWxpZ24mJih0aGlzLmFsaWduPXQuYWxpZ24sdGhpcy5hbGlnbk9mZnNldD10aGlzLnRleHRXaWR0aC5tYXAoZnVuY3Rpb24odCxyKXt2YXIgbj1BcnJheS5pc0FycmF5KGUuYWxpZ24pP2UuYWxpZ24ubGVuZ3RoPjE/ZS5hbGlnbltyXTplLmFsaWduWzBdOmUuYWxpZ247aWYoXCJudW1iZXJcIj09dHlwZW9mIG4pcmV0dXJuIG47c3dpdGNoKG4pe2Nhc2VcInJpZ2h0XCI6Y2FzZVwiZW5kXCI6cmV0dXJuLXQ7Y2FzZVwiY2VudGVyXCI6Y2FzZVwiY2VudHJlXCI6Y2FzZVwibWlkZGxlXCI6cmV0dXJuLjUqLXR9cmV0dXJuIDB9KSksbnVsbD09dGhpcy5iYXNlbGluZSYmbnVsbD09dC5iYXNlbGluZSYmKHQuYmFzZWxpbmU9MCksbnVsbCE9dC5iYXNlbGluZSYmKHRoaXMuYmFzZWxpbmU9dC5iYXNlbGluZSxBcnJheS5pc0FycmF5KHRoaXMuYmFzZWxpbmUpfHwodGhpcy5iYXNlbGluZT1bdGhpcy5iYXNlbGluZV0pLHRoaXMuYmFzZWxpbmVPZmZzZXQ9dGhpcy5iYXNlbGluZS5tYXAoZnVuY3Rpb24odCxyKXt2YXIgbj0oZS5mb250W3JdfHxlLmZvbnRbMF0pLm1ldHJpY3MsaT0wO3JldHVybiBpKz0uNSpuLmJvdHRvbSxpKz1cIm51bWJlclwiPT10eXBlb2YgdD90LW4uYmFzZWxpbmU6LW5bdF0say5ub3JtYWxWaWV3cG9ydHx8KGkqPS0xKSxpfSkpLG51bGwhPXQuY29sb3IpaWYodC5jb2xvcnx8KHQuY29sb3I9XCJ0cmFuc3BhcmVudFwiKSxcInN0cmluZ1wiIT10eXBlb2YgdC5jb2xvciYmaXNOYU4odC5jb2xvcikpe3ZhciBIO2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0LmNvbG9yWzBdJiZ0LmNvbG9yLmxlbmd0aD50aGlzLmNvdW50cy5sZW5ndGgpe3ZhciBHPXQuY29sb3IubGVuZ3RoO0g9dS5tYWxsb2NVaW50OChHKTtmb3IodmFyIFk9KHQuY29sb3Iuc3ViYXJyYXl8fHQuY29sb3Iuc2xpY2UpLmJpbmQodC5jb2xvciksVz0wO1c8RztXKz00KUguc2V0KGwoWShXLFcrNCksXCJ1aW50OFwiKSxXKX1lbHNle3ZhciBYPXQuY29sb3IubGVuZ3RoO0g9dS5tYWxsb2NVaW50OCg0KlgpO2Zvcih2YXIgWj0wO1o8WDtaKyspSC5zZXQobCh0LmNvbG9yW1pdfHwwLFwidWludDhcIiksNCpaKX10aGlzLmNvbG9yPUh9ZWxzZSB0aGlzLmNvbG9yPWwodC5jb2xvcixcInVpbnQ4XCIpO2lmKHQucG9zaXRpb258fHQudGV4dHx8dC5jb2xvcnx8dC5iYXNlbGluZXx8dC5hbGlnbnx8dC5mb250fHx0Lm9mZnNldHx8dC5vcGFjaXR5KWlmKHRoaXMuY29sb3IubGVuZ3RoPjR8fHRoaXMuYmFzZWxpbmVPZmZzZXQubGVuZ3RoPjF8fHRoaXMuYWxpZ24mJnRoaXMuYWxpZ24ubGVuZ3RoPjF8fHRoaXMuZm9udEF0bGFzLmxlbmd0aD4xfHx0aGlzLnBvc2l0aW9uT2Zmc2V0Lmxlbmd0aD4yKXt2YXIgJD1NYXRoLm1heCguNSp0aGlzLnBvc2l0aW9uLmxlbmd0aHx8MCwuMjUqdGhpcy5jb2xvci5sZW5ndGh8fDAsdGhpcy5iYXNlbGluZU9mZnNldC5sZW5ndGh8fDAsdGhpcy5hbGlnbk9mZnNldC5sZW5ndGh8fDAsdGhpcy5mb250Lmxlbmd0aHx8MCx0aGlzLm9wYWNpdHkubGVuZ3RofHwwLC41KnRoaXMucG9zaXRpb25PZmZzZXQubGVuZ3RofHwwKTt0aGlzLmJhdGNoPUFycmF5KCQpO2Zvcih2YXIgSj0wO0o8dGhpcy5iYXRjaC5sZW5ndGg7SisrKWUuYmF0Y2hbSl09e2NvdW50OmUuY291bnRzLmxlbmd0aD4xP2UuY291bnRzW0pdOmUuY291bnRzWzBdLG9mZnNldDplLnRleHRPZmZzZXRzLmxlbmd0aD4xP2UudGV4dE9mZnNldHNbSl06ZS50ZXh0T2Zmc2V0c1swXSxjb2xvcjplLmNvbG9yP2UuY29sb3IubGVuZ3RoPD00P2UuY29sb3I6ZS5jb2xvci5zdWJhcnJheSg0KkosNCpKKzQpOlswLDAsMCwyNTVdLG9wYWNpdHk6QXJyYXkuaXNBcnJheShlLm9wYWNpdHkpP2Uub3BhY2l0eVtKXTplLm9wYWNpdHksYmFzZWxpbmU6bnVsbCE9ZS5iYXNlbGluZU9mZnNldFtKXT9lLmJhc2VsaW5lT2Zmc2V0W0pdOmUuYmFzZWxpbmVPZmZzZXRbMF0sYWxpZ246ZS5hbGlnbj9udWxsIT1lLmFsaWduT2Zmc2V0W0pdP2UuYWxpZ25PZmZzZXRbSl06ZS5hbGlnbk9mZnNldFswXTowLGF0bGFzOmUuZm9udEF0bGFzW0pdfHxlLmZvbnRBdGxhc1swXSxwb3NpdGlvbk9mZnNldDplLnBvc2l0aW9uT2Zmc2V0Lmxlbmd0aD4yP2UucG9zaXRpb25PZmZzZXQuc3ViYXJyYXkoMipKLDIqSisyKTplLnBvc2l0aW9uT2Zmc2V0fX1lbHNlIHRoaXMuY291bnQ/dGhpcy5iYXRjaD1be2NvdW50OnRoaXMuY291bnQsb2Zmc2V0OjAsY29sb3I6dGhpcy5jb2xvcnx8WzAsMCwwLDI1NV0sb3BhY2l0eTpBcnJheS5pc0FycmF5KHRoaXMub3BhY2l0eSk/dGhpcy5vcGFjaXR5WzBdOnRoaXMub3BhY2l0eSxiYXNlbGluZTp0aGlzLmJhc2VsaW5lT2Zmc2V0WzBdLGFsaWduOnRoaXMuYWxpZ25PZmZzZXQ/dGhpcy5hbGlnbk9mZnNldFswXTowLGF0bGFzOnRoaXMuZm9udEF0bGFzWzBdLHBvc2l0aW9uT2Zmc2V0OnRoaXMucG9zaXRpb25PZmZzZXR9XTp0aGlzLmJhdGNoPVtdfSxrLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7fSxrLnByb3RvdHlwZS5rZXJuaW5nPSEwLGsucHJvdG90eXBlLnBvc2l0aW9uPXtjb25zdGFudDpuZXcgRmxvYXQzMkFycmF5KDIpfSxrLnByb3RvdHlwZS50cmFuc2xhdGU9bnVsbCxrLnByb3RvdHlwZS5zY2FsZT1udWxsLGsucHJvdG90eXBlLmZvbnQ9bnVsbCxrLnByb3RvdHlwZS50ZXh0PVwiXCIsay5wcm90b3R5cGUucG9zaXRpb25PZmZzZXQ9WzAsMF0say5wcm90b3R5cGUub3BhY2l0eT0xLGsucHJvdG90eXBlLmNvbG9yPW5ldyBVaW50OEFycmF5KFswLDAsMCwyNTVdKSxrLnByb3RvdHlwZS5hbGlnbk9mZnNldD1bMCwwXSxrLm5vcm1hbFZpZXdwb3J0PSExLGsubWF4QXRsYXNTaXplPTEwMjQsay5hdGxhc0NhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLGsuYXRsYXNDb250ZXh0PWsuYXRsYXNDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIse2FscGhhOiExfSksay5iYXNlRm9udFNpemU9NjQsay5mb250cz17fSxlLmV4cG9ydHM9a30se1wiYml0LXR3aWRkbGVcIjo4MyxcImNvbG9yLW5vcm1hbGl6ZVwiOjExMSxcImNzcy1mb250XCI6MTMwLFwiZGV0ZWN0LWtlcm5pbmdcIjoxNTgsXCJlczYtd2Vhay1tYXBcIjoyMTcsXCJmbGF0dGVuLXZlcnRleC1kYXRhXCI6MjI0LFwiZm9udC1hdGxhc1wiOjIyNSxcImZvbnQtbWVhc3VyZVwiOjIyNixcImdsLXV0aWwvY29udGV4dFwiOjMxNixcImlzLXBsYWluLW9ialwiOjQxNSxcIm9iamVjdC1hc3NpZ25cIjo0NDcsXCJwYXJzZS1yZWN0XCI6NDUyLFwicGFyc2UtdW5pdFwiOjQ1NCxcInBpY2stYnktYWxpYXNcIjo0NTgscmVnbDo0ODcsXCJ0by1weFwiOjUyNCxcInR5cGVkYXJyYXktcG9vbFwiOjUzMH1dLDMxNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJuZGFycmF5XCIpLGk9dChcIm5kYXJyYXktb3BzXCIpLGE9dChcInR5cGVkYXJyYXktcG9vbFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoYXJndW1lbnRzLmxlbmd0aDw9MSl0aHJvdyBuZXcgRXJyb3IoXCJnbC10ZXh0dXJlMmQ6IE1pc3NpbmcgYXJndW1lbnRzIGZvciB0ZXh0dXJlMmQgY29uc3RydWN0b3JcIik7b3x8ZnVuY3Rpb24odCl7bz1bdC5MSU5FQVIsdC5ORUFSRVNUX01JUE1BUF9MSU5FQVIsdC5MSU5FQVJfTUlQTUFQX05FQVJFU1QsdC5MSU5FQVJfTUlQTUFQX05FQVJFU1RdLHM9W3QuTkVBUkVTVCx0LkxJTkVBUix0Lk5FQVJFU1RfTUlQTUFQX05FQVJFU1QsdC5ORUFSRVNUX01JUE1BUF9MSU5FQVIsdC5MSU5FQVJfTUlQTUFQX05FQVJFU1QsdC5MSU5FQVJfTUlQTUFQX0xJTkVBUl0sbD1bdC5SRVBFQVQsdC5DTEFNUF9UT19FREdFLHQuTUlSUk9SRURfUkVQRUFUXX0odCk7aWYoXCJudW1iZXJcIj09dHlwZW9mIGFyZ3VtZW50c1sxXSlyZXR1cm4gdih0LGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzNdfHx0LlJHQkEsYXJndW1lbnRzWzRdfHx0LlVOU0lHTkVEX0JZVEUpO2lmKEFycmF5LmlzQXJyYXkoYXJndW1lbnRzWzFdKSlyZXR1cm4gdih0LDB8YXJndW1lbnRzWzFdWzBdLDB8YXJndW1lbnRzWzFdWzFdLGFyZ3VtZW50c1syXXx8dC5SR0JBLGFyZ3VtZW50c1szXXx8dC5VTlNJR05FRF9CWVRFKTtpZihcIm9iamVjdFwiPT10eXBlb2YgYXJndW1lbnRzWzFdKXt2YXIgZT1hcmd1bWVudHNbMV0scj1jKGUpP2U6ZS5yYXc7aWYocilyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPWcodCk7cmV0dXJuIHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCxpLGksYSxlKSxuZXcgZih0LG8scixuLGksYSl9KHQsciwwfGUud2lkdGgsMHxlLmhlaWdodCxhcmd1bWVudHNbMl18fHQuUkdCQSxhcmd1bWVudHNbM118fHQuVU5TSUdORURfQllURSk7aWYoZS5zaGFwZSYmZS5kYXRhJiZlLnN0cmlkZSlyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj1lLmR0eXBlLG89ZS5zaGFwZS5zbGljZSgpLHM9dC5nZXRQYXJhbWV0ZXIodC5NQVhfVEVYVFVSRV9TSVpFKTtpZihvWzBdPDB8fG9bMF0+c3x8b1sxXTwwfHxvWzFdPnMpdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHRleHR1cmUgc2l6ZVwiKTt2YXIgbD1kKG8sZS5zdHJpZGUuc2xpY2UoKSksYz0wO1wiZmxvYXQzMlwiPT09cj9jPXQuRkxPQVQ6XCJmbG9hdDY0XCI9PT1yPyhjPXQuRkxPQVQsbD0hMSxyPVwiZmxvYXQzMlwiKTpcInVpbnQ4XCI9PT1yP2M9dC5VTlNJR05FRF9CWVRFOihjPXQuVU5TSUdORURfQllURSxsPSExLHI9XCJ1aW50OFwiKTt2YXIgaCxwLHY9MDtpZigyPT09by5sZW5ndGgpdj10LkxVTUlOQU5DRSxvPVtvWzBdLG9bMV0sMV0sZT1uKGUuZGF0YSxvLFtlLnN0cmlkZVswXSxlLnN0cmlkZVsxXSwxXSxlLm9mZnNldCk7ZWxzZXtpZigzIT09by5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHNoYXBlIGZvciB0ZXh0dXJlXCIpO2lmKDE9PT1vWzJdKXY9dC5BTFBIQTtlbHNlIGlmKDI9PT1vWzJdKXY9dC5MVU1JTkFOQ0VfQUxQSEE7ZWxzZSBpZigzPT09b1syXSl2PXQuUkdCO2Vsc2V7aWYoNCE9PW9bMl0pdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHNoYXBlIGZvciBwaXhlbCBjb29yZHNcIik7dj10LlJHQkF9fWMhPT10LkZMT0FUfHx0LmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0XCIpfHwoYz10LlVOU0lHTkVEX0JZVEUsbD0hMSk7dmFyIG09ZS5zaXplO2lmKGwpaD0wPT09ZS5vZmZzZXQmJmUuZGF0YS5sZW5ndGg9PT1tP2UuZGF0YTplLmRhdGEuc3ViYXJyYXkoZS5vZmZzZXQsZS5vZmZzZXQrbSk7ZWxzZXt2YXIgeT1bb1syXSxvWzJdKm9bMF0sMV07cD1hLm1hbGxvYyhtLHIpO3ZhciB4PW4ocCxvLHksMCk7XCJmbG9hdDMyXCIhPT1yJiZcImZsb2F0NjRcIiE9PXJ8fGMhPT10LlVOU0lHTkVEX0JZVEU/aS5hc3NpZ24oeCxlKTp1KHgsZSksaD1wLnN1YmFycmF5KDAsbSl9dmFyIGI9Zyh0KTt0LnRleEltYWdlMkQodC5URVhUVVJFXzJELDAsdixvWzBdLG9bMV0sMCx2LGMsaCksbHx8YS5mcmVlKHApO3JldHVybiBuZXcgZih0LGIsb1swXSxvWzFdLHYsYyl9KHQsZSl9dGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIGFyZ3VtZW50cyBmb3IgdGV4dHVyZTJkIGNvbnN0cnVjdG9yXCIpfTt2YXIgbz1udWxsLHM9bnVsbCxsPW51bGw7ZnVuY3Rpb24gYyh0KXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQmJnQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQmJnQgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHxcInVuZGVmaW5lZFwiIT10eXBlb2YgSFRNTFZpZGVvRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnR8fFwidW5kZWZpbmVkXCIhPXR5cGVvZiBJbWFnZURhdGEmJnQgaW5zdGFuY2VvZiBJbWFnZURhdGF9dmFyIHU9ZnVuY3Rpb24odCxlKXtpLm11bHModCxlLDI1NSl9O2Z1bmN0aW9uIGgodCxlLHIpe3ZhciBuPXQuZ2wsaT1uLmdldFBhcmFtZXRlcihuLk1BWF9URVhUVVJFX1NJWkUpO2lmKGU8MHx8ZT5pfHxyPDB8fHI+aSl0aHJvdyBuZXcgRXJyb3IoXCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgdGV4dHVyZSBzaXplXCIpO3JldHVybiB0Ll9zaGFwZT1bZSxyXSx0LmJpbmQoKSxuLnRleEltYWdlMkQobi5URVhUVVJFXzJELDAsdC5mb3JtYXQsZSxyLDAsdC5mb3JtYXQsdC50eXBlLG51bGwpLHQuX21pcExldmVscz1bMF0sdH1mdW5jdGlvbiBmKHQsZSxyLG4saSxhKXt0aGlzLmdsPXQsdGhpcy5oYW5kbGU9ZSx0aGlzLmZvcm1hdD1pLHRoaXMudHlwZT1hLHRoaXMuX3NoYXBlPVtyLG5dLHRoaXMuX21pcExldmVscz1bMF0sdGhpcy5fbWFnRmlsdGVyPXQuTkVBUkVTVCx0aGlzLl9taW5GaWx0ZXI9dC5ORUFSRVNULHRoaXMuX3dyYXBTPXQuQ0xBTVBfVE9fRURHRSx0aGlzLl93cmFwVD10LkNMQU1QX1RPX0VER0UsdGhpcy5fYW5pc29TYW1wbGVzPTE7dmFyIG89dGhpcyxzPVt0aGlzLl93cmFwUyx0aGlzLl93cmFwVF07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocyxbe2dldDpmdW5jdGlvbigpe3JldHVybiBvLl93cmFwU30sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBvLndyYXBTPXR9fSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uX3dyYXBUfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8ud3JhcFQ9dH19XSksdGhpcy5fd3JhcFZlY3Rvcj1zO3ZhciBsPVt0aGlzLl9zaGFwZVswXSx0aGlzLl9zaGFwZVsxXV07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobCxbe2dldDpmdW5jdGlvbigpe3JldHVybiBvLl9zaGFwZVswXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBvLndpZHRoPXR9fSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uX3NoYXBlWzFdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8uaGVpZ2h0PXR9fV0pLHRoaXMuX3NoYXBlVmVjdG9yPWx9dmFyIHA9Zi5wcm90b3R5cGU7ZnVuY3Rpb24gZCh0LGUpe3JldHVybiAzPT09dC5sZW5ndGg/MT09PWVbMl0mJmVbMV09PT10WzBdKnRbMl0mJmVbMF09PT10WzJdOjE9PT1lWzBdJiZlWzFdPT09dFswXX1mdW5jdGlvbiBnKHQpe3ZhciBlPXQuY3JlYXRlVGV4dHVyZSgpO3JldHVybiB0LmJpbmRUZXh0dXJlKHQuVEVYVFVSRV8yRCxlKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NSU5fRklMVEVSLHQuTkVBUkVTVCksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfTUFHX0ZJTFRFUix0Lk5FQVJFU1QpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX1dSQVBfUyx0LkNMQU1QX1RPX0VER0UpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX1dSQVBfVCx0LkNMQU1QX1RPX0VER0UpLGV9ZnVuY3Rpb24gdih0LGUscixuLGkpe3ZhciBhPXQuZ2V0UGFyYW1ldGVyKHQuTUFYX1RFWFRVUkVfU0laRSk7aWYoZTwwfHxlPmF8fHI8MHx8cj5hKXRocm93IG5ldyBFcnJvcihcImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNoYXBlXCIpO2lmKGk9PT10LkZMT0FUJiYhdC5nZXRFeHRlbnNpb24oXCJPRVNfdGV4dHVyZV9mbG9hdFwiKSl0aHJvdyBuZXcgRXJyb3IoXCJnbC10ZXh0dXJlMmQ6IEZsb2F0aW5nIHBvaW50IHRleHR1cmVzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybVwiKTt2YXIgbz1nKHQpO3JldHVybiB0LnRleEltYWdlMkQodC5URVhUVVJFXzJELDAsbixlLHIsMCxuLGksbnVsbCksbmV3IGYodCxvLGUscixuLGkpfU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHAse21pbkZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21pbkZpbHRlcn0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuYmluZCgpO3ZhciBlPXRoaXMuZ2w7aWYodGhpcy50eXBlPT09ZS5GTE9BVCYmby5pbmRleE9mKHQpPj0wJiYoZS5nZXRFeHRlbnNpb24oXCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXJcIil8fCh0PWUuTkVBUkVTVCkpLHMuaW5kZXhPZih0KTwwKXRocm93IG5ldyBFcnJvcihcImdsLXRleHR1cmUyZDogVW5rbm93biBmaWx0ZXIgbW9kZSBcIit0KTtyZXR1cm4gZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfTUlOX0ZJTFRFUix0KSx0aGlzLl9taW5GaWx0ZXI9dH19LG1hZ0ZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuYmluZCgpO3ZhciBlPXRoaXMuZ2w7aWYodGhpcy50eXBlPT09ZS5GTE9BVCYmby5pbmRleE9mKHQpPj0wJiYoZS5nZXRFeHRlbnNpb24oXCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXJcIil8fCh0PWUuTkVBUkVTVCkpLHMuaW5kZXhPZih0KTwwKXRocm93IG5ldyBFcnJvcihcImdsLXRleHR1cmUyZDogVW5rbm93biBmaWx0ZXIgbW9kZSBcIit0KTtyZXR1cm4gZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfTUFHX0ZJTFRFUix0KSx0aGlzLl9tYWdGaWx0ZXI9dH19LG1pcFNhbXBsZXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmlzb1NhbXBsZXN9LHNldDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9hbmlzb1NhbXBsZXM7aWYodGhpcy5fYW5pc29TYW1wbGVzPTB8TWF0aC5tYXgodCwxKSxlIT09dGhpcy5fYW5pc29TYW1wbGVzKXt2YXIgcj10aGlzLmdsLmdldEV4dGVuc2lvbihcIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpY1wiKTtyJiZ0aGlzLmdsLnRleFBhcmFtZXRlcmYodGhpcy5nbC5URVhUVVJFXzJELHIuVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQsdGhpcy5fYW5pc29TYW1wbGVzKX1yZXR1cm4gdGhpcy5fYW5pc29TYW1wbGVzfX0sd3JhcFM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cmFwU30sc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMuYmluZCgpLGwuaW5kZXhPZih0KTwwKXRocm93IG5ldyBFcnJvcihcImdsLXRleHR1cmUyZDogVW5rbm93biB3cmFwIG1vZGUgXCIrdCk7cmV0dXJuIHRoaXMuZ2wudGV4UGFyYW1ldGVyaSh0aGlzLmdsLlRFWFRVUkVfMkQsdGhpcy5nbC5URVhUVVJFX1dSQVBfUyx0KSx0aGlzLl93cmFwUz10fX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cmFwVH0sc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMuYmluZCgpLGwuaW5kZXhPZih0KTwwKXRocm93IG5ldyBFcnJvcihcImdsLXRleHR1cmUyZDogVW5rbm93biB3cmFwIG1vZGUgXCIrdCk7cmV0dXJuIHRoaXMuZ2wudGV4UGFyYW1ldGVyaSh0aGlzLmdsLlRFWFRVUkVfMkQsdGhpcy5nbC5URVhUVVJFX1dSQVBfVCx0KSx0aGlzLl93cmFwVD10fX0sd3JhcDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyYXBWZWN0b3J9LHNldDpmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpfHwodD1bdCx0XSksMiE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImdsLXRleHR1cmUyZDogTXVzdCBzcGVjaWZ5IHdyYXAgbW9kZSBmb3Igcm93cyBhbmQgY29sdW1uc1wiKTtmb3IodmFyIGU9MDtlPDI7KytlKWlmKGwuaW5kZXhPZih0W2VdKTwwKXRocm93IG5ldyBFcnJvcihcImdsLXRleHR1cmUyZDogVW5rbm93biB3cmFwIG1vZGUgXCIrdCk7dGhpcy5fd3JhcFM9dFswXSx0aGlzLl93cmFwVD10WzFdO3ZhciByPXRoaXMuZ2w7cmV0dXJuIHRoaXMuYmluZCgpLHIudGV4UGFyYW1ldGVyaShyLlRFWFRVUkVfMkQsci5URVhUVVJFX1dSQVBfUyx0aGlzLl93cmFwUyksci50ZXhQYXJhbWV0ZXJpKHIuVEVYVFVSRV8yRCxyLlRFWFRVUkVfV1JBUF9ULHRoaXMuX3dyYXBUKSx0fX0sc2hhcGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaGFwZVZlY3Rvcn0sc2V0OmZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2lmKDIhPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgdGV4dHVyZSBzaGFwZVwiKX1lbHNlIHQ9WzB8dCwwfHRdO3JldHVybiBoKHRoaXMsMHx0WzBdLDB8dFsxXSksWzB8dFswXSwwfHRbMV1dfX0sd2lkdGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaGFwZVswXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBoKHRoaXMsdHw9MCx0aGlzLl9zaGFwZVsxXSksdH19LGhlaWdodDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NoYXBlWzFdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR8PTAsaCh0aGlzLHRoaXMuX3NoYXBlWzBdLHQpLHR9fX0pLHAuYmluZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsO3JldHVybiB2b2lkIDAhPT10JiZlLmFjdGl2ZVRleHR1cmUoZS5URVhUVVJFMCsoMHx0KSksZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsdGhpcy5oYW5kbGUpLHZvaWQgMCE9PXQ/MHx0OmUuZ2V0UGFyYW1ldGVyKGUuQUNUSVZFX1RFWFRVUkUpLWUuVEVYVFVSRTB9LHAuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuZ2wuZGVsZXRlVGV4dHVyZSh0aGlzLmhhbmRsZSl9LHAuZ2VuZXJhdGVNaXBtYXA9ZnVuY3Rpb24oKXt0aGlzLmJpbmQoKSx0aGlzLmdsLmdlbmVyYXRlTWlwbWFwKHRoaXMuZ2wuVEVYVFVSRV8yRCk7Zm9yKHZhciB0PU1hdGgubWluKHRoaXMuX3NoYXBlWzBdLHRoaXMuX3NoYXBlWzFdKSxlPTA7dD4wOysrZSx0Pj4+PTEpdGhpcy5fbWlwTGV2ZWxzLmluZGV4T2YoZSk8MCYmdGhpcy5fbWlwTGV2ZWxzLnB1c2goZSl9LHAuc2V0UGl4ZWxzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzPXRoaXMuZ2w7dGhpcy5iaW5kKCksQXJyYXkuaXNBcnJheShlKT8obz1yLHI9MHxlWzFdLGU9MHxlWzBdKTooZT1lfHwwLHI9cnx8MCksbz1vfHwwO3ZhciBsPWModCk/dDp0LnJhdztpZihsKXt0aGlzLl9taXBMZXZlbHMuaW5kZXhPZihvKTwwPyhzLnRleEltYWdlMkQocy5URVhUVVJFXzJELDAsdGhpcy5mb3JtYXQsdGhpcy5mb3JtYXQsdGhpcy50eXBlLGwpLHRoaXMuX21pcExldmVscy5wdXNoKG8pKTpzLnRleFN1YkltYWdlMkQocy5URVhUVVJFXzJELG8sZSxyLHRoaXMuZm9ybWF0LHRoaXMudHlwZSxsKX1lbHNle2lmKCEodC5zaGFwZSYmdC5zdHJpZGUmJnQuZGF0YSkpdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBVbnN1cHBvcnRlZCBkYXRhIHR5cGVcIik7aWYodC5zaGFwZS5sZW5ndGg8Mnx8ZSt0LnNoYXBlWzFdPnRoaXMuX3NoYXBlWzFdPj4+b3x8cit0LnNoYXBlWzBdPnRoaXMuX3NoYXBlWzBdPj4+b3x8ZTwwfHxyPDApdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBUZXh0dXJlIGRpbWVuc2lvbnMgYXJlIG91dCBvZiBib3VuZHNcIik7IWZ1bmN0aW9uKHQsZSxyLG8scyxsLGMsaCl7dmFyIGY9aC5kdHlwZSxwPWguc2hhcGUuc2xpY2UoKTtpZihwLmxlbmd0aDwyfHxwLmxlbmd0aD4zKXRocm93IG5ldyBFcnJvcihcImdsLXRleHR1cmUyZDogSW52YWxpZCBuZGFycmF5LCBtdXN0IGJlIDJkIG9yIDNkXCIpO3ZhciBnPTAsdj0wLG09ZChwLGguc3RyaWRlLnNsaWNlKCkpO1wiZmxvYXQzMlwiPT09Zj9nPXQuRkxPQVQ6XCJmbG9hdDY0XCI9PT1mPyhnPXQuRkxPQVQsbT0hMSxmPVwiZmxvYXQzMlwiKTpcInVpbnQ4XCI9PT1mP2c9dC5VTlNJR05FRF9CWVRFOihnPXQuVU5TSUdORURfQllURSxtPSExLGY9XCJ1aW50OFwiKTtpZigyPT09cC5sZW5ndGgpdj10LkxVTUlOQU5DRSxwPVtwWzBdLHBbMV0sMV0saD1uKGguZGF0YSxwLFtoLnN0cmlkZVswXSxoLnN0cmlkZVsxXSwxXSxoLm9mZnNldCk7ZWxzZXtpZigzIT09cC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHNoYXBlIGZvciB0ZXh0dXJlXCIpO2lmKDE9PT1wWzJdKXY9dC5BTFBIQTtlbHNlIGlmKDI9PT1wWzJdKXY9dC5MVU1JTkFOQ0VfQUxQSEE7ZWxzZSBpZigzPT09cFsyXSl2PXQuUkdCO2Vsc2V7aWYoNCE9PXBbMl0pdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHNoYXBlIGZvciBwaXhlbCBjb29yZHNcIik7dj10LlJHQkF9cFsyXX12IT09dC5MVU1JTkFOQ0UmJnYhPT10LkFMUEhBfHxzIT09dC5MVU1JTkFOQ0UmJnMhPT10LkFMUEhBfHwodj1zKTtpZih2IT09cyl0aHJvdyBuZXcgRXJyb3IoXCJnbC10ZXh0dXJlMmQ6IEluY29tcGF0aWJsZSB0ZXh0dXJlIGZvcm1hdCBmb3Igc2V0UGl4ZWxzXCIpO3ZhciB5PWguc2l6ZSx4PWMuaW5kZXhPZihvKTwwO3gmJmMucHVzaChvKTtpZihnPT09bCYmbSkwPT09aC5vZmZzZXQmJmguZGF0YS5sZW5ndGg9PT15P3g/dC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCxvLHMscFswXSxwWzFdLDAscyxsLGguZGF0YSk6dC50ZXhTdWJJbWFnZTJEKHQuVEVYVFVSRV8yRCxvLGUscixwWzBdLHBbMV0scyxsLGguZGF0YSk6eD90LnRleEltYWdlMkQodC5URVhUVVJFXzJELG8scyxwWzBdLHBbMV0sMCxzLGwsaC5kYXRhLnN1YmFycmF5KGgub2Zmc2V0LGgub2Zmc2V0K3kpKTp0LnRleFN1YkltYWdlMkQodC5URVhUVVJFXzJELG8sZSxyLHBbMF0scFsxXSxzLGwsaC5kYXRhLnN1YmFycmF5KGgub2Zmc2V0LGgub2Zmc2V0K3kpKTtlbHNle3ZhciBiO2I9bD09PXQuRkxPQVQ/YS5tYWxsb2NGbG9hdDMyKHkpOmEubWFsbG9jVWludDgoeSk7dmFyIF89bihiLHAsW3BbMl0scFsyXSpwWzBdLDFdKTtnPT09dC5GTE9BVCYmbD09PXQuVU5TSUdORURfQllURT91KF8saCk6aS5hc3NpZ24oXyxoKSx4P3QudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsbyxzLHBbMF0scFsxXSwwLHMsbCxiLnN1YmFycmF5KDAseSkpOnQudGV4U3ViSW1hZ2UyRCh0LlRFWFRVUkVfMkQsbyxlLHIscFswXSxwWzFdLHMsbCxiLnN1YmFycmF5KDAseSkpLGw9PT10LkZMT0FUP2EuZnJlZUZsb2F0MzIoYik6YS5mcmVlVWludDgoYil9fShzLGUscixvLHRoaXMuZm9ybWF0LHRoaXMudHlwZSx0aGlzLl9taXBMZXZlbHMsdCl9fX0se25kYXJyYXk6NDQzLFwibmRhcnJheS1vcHNcIjo0MzcsXCJ0eXBlZGFycmF5LXBvb2xcIjo1MzB9XSwzMTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicGljay1ieS1hbGlhc1wiKTtmdW5jdGlvbiBpKHQpe2lmKHQuY29udGFpbmVyKWlmKHQuY29udGFpbmVyPT1kb2N1bWVudC5ib2R5KWRvY3VtZW50LmJvZHkuc3R5bGUud2lkdGh8fCh0LmNhbnZhcy53aWR0aD10LndpZHRofHx0LnBpeGVsUmF0aW8qd2luZG93LmlubmVyV2lkdGgpLGRvY3VtZW50LmJvZHkuc3R5bGUuaGVpZ2h0fHwodC5jYW52YXMuaGVpZ2h0PXQuaGVpZ2h0fHx0LnBpeGVsUmF0aW8qd2luZG93LmlubmVySGVpZ2h0KTtlbHNle3ZhciBlPXQuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3QuY2FudmFzLndpZHRoPXQud2lkdGh8fGUucmlnaHQtZS5sZWZ0LHQuY2FudmFzLmhlaWdodD10LmhlaWdodHx8ZS5ib3R0b20tZS50b3B9fWZ1bmN0aW9uIGEodCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdC5nZXRDb250ZXh0JiZcIndpZHRoXCJpbiB0JiZcImhlaWdodFwiaW4gdH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU7aWYodD9cInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9e2NvbnRhaW5lcjp0fSk6dD17fSxhKHQpP3Q9e2NvbnRhaW5lcjp0fTp0PVwic3RyaW5nXCI9PXR5cGVvZihlPXQpLm5vZGVOYW1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmFwcGVuZENoaWxkJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdD97Y29udGFpbmVyOnR9OmZ1bmN0aW9uKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQuZHJhd0FycmF5c3x8XCJmdW5jdGlvblwiPT10eXBlb2YgdC5kcmF3RWxlbWVudHN9KHQpP3tnbDp0fTpuKHQse2NvbnRhaW5lcjpcImNvbnRhaW5lciB0YXJnZXQgZWxlbWVudCBlbCBjYW52YXMgaG9sZGVyIHBhcmVudCBwYXJlbnROb2RlIHdyYXBwZXIgdXNlIHJlZiByb290IG5vZGVcIixnbDpcImdsIGNvbnRleHQgd2ViZ2wgZ2xDb250ZXh0XCIsYXR0cnM6XCJhdHRyaWJ1dGVzIGF0dHJzIGNvbnRleHRBdHRyaWJ1dGVzXCIscGl4ZWxSYXRpbzpcInBpeGVsUmF0aW8gcHhSYXRpbyBweCByYXRpbyBweHJhdGlvIHBpeGVscmF0aW9cIn0sITApLHQucGl4ZWxSYXRpb3x8KHQucGl4ZWxSYXRpbz13aW5kb3cucGl4ZWxSYXRpb3x8MSksdC5nbClyZXR1cm4gdC5nbDtpZih0LmNhbnZhcyYmKHQuY29udGFpbmVyPXQuY2FudmFzLnBhcmVudE5vZGUpLHQuY29udGFpbmVyKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdC5jb250YWluZXIpe3ZhciByPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodC5jb250YWluZXIpO2lmKCFyKXRocm93IEVycm9yKFwiRWxlbWVudCBcIit0LmNvbnRhaW5lcitcIiBpcyBub3QgZm91bmRcIik7dC5jb250YWluZXI9cn1hKHQuY29udGFpbmVyKT8odC5jYW52YXM9dC5jb250YWluZXIsdC5jb250YWluZXI9dC5jYW52YXMucGFyZW50Tm9kZSk6dC5jYW52YXN8fCh0LmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLHQuY29udGFpbmVyLmFwcGVuZENoaWxkKHQuY2FudmFzKSxpKHQpKX1lbHNlIHQuY2FudmFzfHwodC5jb250YWluZXI9ZG9jdW1lbnQuYm9keXx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHQuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksdC5jYW52YXMuc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwiLHQuY2FudmFzLnN0eWxlLnRvcD0wLHQuY2FudmFzLnN0eWxlLmxlZnQ9MCx0LmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0LmNhbnZhcyksaSh0KSk7aWYoIXQuZ2wpdHJ5e3QuZ2w9dC5jYW52YXMuZ2V0Q29udGV4dChcIndlYmdsXCIsdC5hdHRycyl9Y2F0Y2goZSl7dHJ5e3QuZ2w9dC5jYW52YXMuZ2V0Q29udGV4dChcImV4cGVyaW1lbnRhbC13ZWJnbFwiLHQuYXR0cnMpfWNhdGNoKGUpe3QuZ2w9dC5jYW52YXMuZ2V0Q29udGV4dChcIndlYmdsLWV4cGVyaW1lbnRhbFwiLHQuYXR0cnMpfX1yZXR1cm4gdC5nbH19LHtcInBpY2stYnktYWxpYXNcIjo0NTh9XSwzMTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2U/ZS5iaW5kKCk6dC5iaW5kQnVmZmVyKHQuRUxFTUVOVF9BUlJBWV9CVUZGRVIsbnVsbCk7dmFyIG49MHx0LmdldFBhcmFtZXRlcih0Lk1BWF9WRVJURVhfQVRUUklCUyk7aWYocil7aWYoci5sZW5ndGg+bil0aHJvdyBuZXcgRXJyb3IoXCJnbC12YW86IFRvbyBtYW55IHZlcnRleCBhdHRyaWJ1dGVzXCIpO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7KytpKXt2YXIgYT1yW2ldO2lmKGEuYnVmZmVyKXt2YXIgbz1hLmJ1ZmZlcixzPWEuc2l6ZXx8NCxsPWEudHlwZXx8dC5GTE9BVCxjPSEhYS5ub3JtYWxpemVkLHU9YS5zdHJpZGV8fDAsaD1hLm9mZnNldHx8MDtvLmJpbmQoKSx0LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpLHQudmVydGV4QXR0cmliUG9pbnRlcihpLHMsbCxjLHUsaCl9ZWxzZXtpZihcIm51bWJlclwiPT10eXBlb2YgYSl0LnZlcnRleEF0dHJpYjFmKGksYSk7ZWxzZSBpZigxPT09YS5sZW5ndGgpdC52ZXJ0ZXhBdHRyaWIxZihpLGFbMF0pO2Vsc2UgaWYoMj09PWEubGVuZ3RoKXQudmVydGV4QXR0cmliMmYoaSxhWzBdLGFbMV0pO2Vsc2UgaWYoMz09PWEubGVuZ3RoKXQudmVydGV4QXR0cmliM2YoaSxhWzBdLGFbMV0sYVsyXSk7ZWxzZXtpZig0IT09YS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiZ2wtdmFvOiBJbnZhbGlkIHZlcnRleCBhdHRyaWJ1dGVcIik7dC52ZXJ0ZXhBdHRyaWI0ZihpLGFbMF0sYVsxXSxhWzJdLGFbM10pfXQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpfX1mb3IoO2k8bjsrK2kpdC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSl9ZWxzZSBmb3IodC5iaW5kQnVmZmVyKHQuQVJSQVlfQlVGRkVSLG51bGwpLGk9MDtpPG47KytpKXQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpfX0se31dLDMxODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2RvLWJpbmQuanNcIik7ZnVuY3Rpb24gaSh0KXt0aGlzLmdsPXQsdGhpcy5fZWxlbWVudHM9bnVsbCx0aGlzLl9hdHRyaWJ1dGVzPW51bGwsdGhpcy5fZWxlbWVudHNUeXBlPXQuVU5TSUdORURfU0hPUlR9aS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe24odGhpcy5nbCx0aGlzLl9lbGVtZW50cyx0aGlzLl9hdHRyaWJ1dGVzKX0saS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9lbGVtZW50cz1lLHRoaXMuX2F0dHJpYnV0ZXM9dCx0aGlzLl9lbGVtZW50c1R5cGU9cnx8dGhpcy5nbC5VTlNJR05FRF9TSE9SVH0saS5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe30saS5wcm90b3R5cGUudW5iaW5kPWZ1bmN0aW9uKCl7fSxpLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQsZSxyKXtyPXJ8fDA7dmFyIG49dGhpcy5nbDt0aGlzLl9lbGVtZW50cz9uLmRyYXdFbGVtZW50cyh0LGUsdGhpcy5fZWxlbWVudHNUeXBlLHIpOm4uZHJhd0FycmF5cyh0LHIsZSl9LGUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGkodCl9fSx7XCIuL2RvLWJpbmQuanNcIjozMTd9XSwzMTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9kby1iaW5kLmpzXCIpO2Z1bmN0aW9uIGkodCxlLHIsbixpLGEpe3RoaXMubG9jYXRpb249dCx0aGlzLmRpbWVuc2lvbj1lLHRoaXMuYT1yLHRoaXMuYj1uLHRoaXMuYz1pLHRoaXMuZD1hfWZ1bmN0aW9uIGEodCxlLHIpe3RoaXMuZ2w9dCx0aGlzLl9leHQ9ZSx0aGlzLmhhbmRsZT1yLHRoaXMuX2F0dHJpYnM9W10sdGhpcy5fdXNlRWxlbWVudHM9ITEsdGhpcy5fZWxlbWVudHNUeXBlPXQuVU5TSUdORURfU0hPUlR9aS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0KXtzd2l0Y2godGhpcy5kaW1lbnNpb24pe2Nhc2UgMTp0LnZlcnRleEF0dHJpYjFmKHRoaXMubG9jYXRpb24sdGhpcy5hKTticmVhaztjYXNlIDI6dC52ZXJ0ZXhBdHRyaWIyZih0aGlzLmxvY2F0aW9uLHRoaXMuYSx0aGlzLmIpO2JyZWFrO2Nhc2UgMzp0LnZlcnRleEF0dHJpYjNmKHRoaXMubG9jYXRpb24sdGhpcy5hLHRoaXMuYix0aGlzLmMpO2JyZWFrO2Nhc2UgNDp0LnZlcnRleEF0dHJpYjRmKHRoaXMubG9jYXRpb24sdGhpcy5hLHRoaXMuYix0aGlzLmMsdGhpcy5kKX19LGEucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLl9leHQuYmluZFZlcnRleEFycmF5T0VTKHRoaXMuaGFuZGxlKTtmb3IodmFyIHQ9MDt0PHRoaXMuX2F0dHJpYnMubGVuZ3RoOysrdCl0aGlzLl9hdHRyaWJzW3RdLmJpbmQodGhpcy5nbCl9LGEucHJvdG90eXBlLnVuYmluZD1mdW5jdGlvbigpe3RoaXMuX2V4dC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCl9LGEucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLl9leHQuZGVsZXRlVmVydGV4QXJyYXlPRVModGhpcy5oYW5kbGUpfSxhLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuYmluZCgpLG4odGhpcy5nbCxlLHQpLHRoaXMudW5iaW5kKCksdGhpcy5fYXR0cmlicy5sZW5ndGg9MCx0KWZvcih2YXIgYT0wO2E8dC5sZW5ndGg7KythKXt2YXIgbz10W2FdO1wibnVtYmVyXCI9PXR5cGVvZiBvP3RoaXMuX2F0dHJpYnMucHVzaChuZXcgaShhLDEsbykpOkFycmF5LmlzQXJyYXkobykmJnRoaXMuX2F0dHJpYnMucHVzaChuZXcgaShhLG8ubGVuZ3RoLG9bMF0sb1sxXSxvWzJdLG9bM10pKX10aGlzLl91c2VFbGVtZW50cz0hIWUsdGhpcy5fZWxlbWVudHNUeXBlPXJ8fHRoaXMuZ2wuVU5TSUdORURfU0hPUlR9LGEucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxlLHIpe3I9cnx8MDt2YXIgbj10aGlzLmdsO3RoaXMuX3VzZUVsZW1lbnRzP24uZHJhd0VsZW1lbnRzKHQsZSx0aGlzLl9lbGVtZW50c1R5cGUscik6bi5kcmF3QXJyYXlzKHQscixlKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBhKHQsZSxlLmNyZWF0ZVZlcnRleEFycmF5T0VTKCkpfX0se1wiLi9kby1iaW5kLmpzXCI6MzE3fV0sMzIwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vbGliL3Zhby1uYXRpdmUuanNcIiksaT10KFwiLi9saWIvdmFvLWVtdWxhdGVkLmpzXCIpO2Z1bmN0aW9uIGEodCl7dGhpcy5iaW5kVmVydGV4QXJyYXlPRVM9dC5iaW5kVmVydGV4QXJyYXkuYmluZCh0KSx0aGlzLmNyZWF0ZVZlcnRleEFycmF5T0VTPXQuY3JlYXRlVmVydGV4QXJyYXkuYmluZCh0KSx0aGlzLmRlbGV0ZVZlcnRleEFycmF5T0VTPXQuZGVsZXRlVmVydGV4QXJyYXkuYmluZCh0KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHMsbD10LmNyZWF0ZVZlcnRleEFycmF5P25ldyBhKHQpOnQuZ2V0RXh0ZW5zaW9uKFwiT0VTX3ZlcnRleF9hcnJheV9vYmplY3RcIik7cmV0dXJuKHM9bD9uKHQsbCk6aSh0KSkudXBkYXRlKGUscixvKSxzfX0se1wiLi9saWIvdmFvLWVtdWxhdGVkLmpzXCI6MzE4LFwiLi9saWIvdmFvLW5hdGl2ZS5qc1wiOjMxOX1dLDMyMTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXStyWzBdLHRbMV09ZVsxXStyWzFdLHRbMl09ZVsyXStyWzJdLHR9fSx7fV0sMzIyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0WzBdLHRbMV0sdFsyXSksbz1uKGVbMF0sZVsxXSxlWzJdKTtpKHIsciksaShvLG8pO3ZhciBzPWEocixvKTtyZXR1cm4gcz4xPzA6TWF0aC5hY29zKHMpfTt2YXIgbj10KFwiLi9mcm9tVmFsdWVzXCIpLGk9dChcIi4vbm9ybWFsaXplXCIpLGE9dChcIi4vZG90XCIpfSx7XCIuL2RvdFwiOjMzMixcIi4vZnJvbVZhbHVlc1wiOjMzOCxcIi4vbm9ybWFsaXplXCI6MzQ5fV0sMzIzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5jZWlsKGVbMF0pLHRbMV09TWF0aC5jZWlsKGVbMV0pLHRbMl09TWF0aC5jZWlsKGVbMl0pLHR9fSx7fV0sMzI0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBGbG9hdDMyQXJyYXkoMyk7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGV9fSx7fV0sMzI1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHR9fSx7fV0sMzI2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSgzKTtyZXR1cm4gdFswXT0wLHRbMV09MCx0WzJdPTAsdH19LHt9XSwzMjc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbMF0scz1yWzFdLGw9clsyXTtyZXR1cm4gdFswXT1pKmwtYSpzLHRbMV09YSpvLW4qbCx0WzJdPW4qcy1pKm8sdH19LHt9XSwzMjg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dChcIi4vZGlzdGFuY2VcIil9LHtcIi4vZGlzdGFuY2VcIjozMjl9XSwzMjk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLXRbMF0sbj1lWzFdLXRbMV0saT1lWzJdLXRbMl07cmV0dXJuIE1hdGguc3FydChyKnIrbipuK2kqaSl9fSx7fV0sMzMwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoXCIuL2RpdmlkZVwiKX0se1wiLi9kaXZpZGVcIjozMzF9XSwzMzE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0vclswXSx0WzFdPWVbMV0vclsxXSx0WzJdPWVbMl0vclsyXSx0fX0se31dLDMzMjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXX19LHt9XSwzMzM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9MWUtNn0se31dLDMzNDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0saT10WzFdLGE9dFsyXSxvPWVbMF0scz1lWzFdLGw9ZVsyXTtyZXR1cm4gTWF0aC5hYnMoci1vKTw9bipNYXRoLm1heCgxLE1hdGguYWJzKHIpLE1hdGguYWJzKG8pKSYmTWF0aC5hYnMoaS1zKTw9bipNYXRoLm1heCgxLE1hdGguYWJzKGkpLE1hdGguYWJzKHMpKSYmTWF0aC5hYnMoYS1sKTw9bipNYXRoLm1heCgxLE1hdGguYWJzKGEpLE1hdGguYWJzKGwpKX07dmFyIG49dChcIi4vZXBzaWxvblwiKX0se1wiLi9lcHNpbG9uXCI6MzMzfV0sMzM1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl19fSx7fV0sMzM2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5mbG9vcihlWzBdKSx0WzFdPU1hdGguZmxvb3IoZVsxXSksdFsyXT1NYXRoLmZsb29yKGVbMl0pLHR9fSx7fV0sMzM3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksYSxvKXt2YXIgcyxsO2V8fChlPTMpO3J8fChyPTApO2w9aT9NYXRoLm1pbihpKmUrcix0Lmxlbmd0aCk6dC5sZW5ndGg7Zm9yKHM9cjtzPGw7cys9ZSluWzBdPXRbc10sblsxXT10W3MrMV0sblsyXT10W3MrMl0sYShuLG4sbyksdFtzXT1uWzBdLHRbcysxXT1uWzFdLHRbcysyXT1uWzJdO3JldHVybiB0fTt2YXIgbj10KFwiLi9jcmVhdGVcIikoKX0se1wiLi9jcmVhdGVcIjozMjZ9XSwzMzg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW5ldyBGbG9hdDMyQXJyYXkoMyk7cmV0dXJuIG5bMF09dCxuWzFdPWUsblsyXT1yLG59fSx7fV0sMzM5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXtFUFNJTE9OOnQoXCIuL2Vwc2lsb25cIiksY3JlYXRlOnQoXCIuL2NyZWF0ZVwiKSxjbG9uZTp0KFwiLi9jbG9uZVwiKSxhbmdsZTp0KFwiLi9hbmdsZVwiKSxmcm9tVmFsdWVzOnQoXCIuL2Zyb21WYWx1ZXNcIiksY29weTp0KFwiLi9jb3B5XCIpLHNldDp0KFwiLi9zZXRcIiksZXF1YWxzOnQoXCIuL2VxdWFsc1wiKSxleGFjdEVxdWFsczp0KFwiLi9leGFjdEVxdWFsc1wiKSxhZGQ6dChcIi4vYWRkXCIpLHN1YnRyYWN0OnQoXCIuL3N1YnRyYWN0XCIpLHN1Yjp0KFwiLi9zdWJcIiksbXVsdGlwbHk6dChcIi4vbXVsdGlwbHlcIiksbXVsOnQoXCIuL211bFwiKSxkaXZpZGU6dChcIi4vZGl2aWRlXCIpLGRpdjp0KFwiLi9kaXZcIiksbWluOnQoXCIuL21pblwiKSxtYXg6dChcIi4vbWF4XCIpLGZsb29yOnQoXCIuL2Zsb29yXCIpLGNlaWw6dChcIi4vY2VpbFwiKSxyb3VuZDp0KFwiLi9yb3VuZFwiKSxzY2FsZTp0KFwiLi9zY2FsZVwiKSxzY2FsZUFuZEFkZDp0KFwiLi9zY2FsZUFuZEFkZFwiKSxkaXN0YW5jZTp0KFwiLi9kaXN0YW5jZVwiKSxkaXN0OnQoXCIuL2Rpc3RcIiksc3F1YXJlZERpc3RhbmNlOnQoXCIuL3NxdWFyZWREaXN0YW5jZVwiKSxzcXJEaXN0OnQoXCIuL3NxckRpc3RcIiksbGVuZ3RoOnQoXCIuL2xlbmd0aFwiKSxsZW46dChcIi4vbGVuXCIpLHNxdWFyZWRMZW5ndGg6dChcIi4vc3F1YXJlZExlbmd0aFwiKSxzcXJMZW46dChcIi4vc3FyTGVuXCIpLG5lZ2F0ZTp0KFwiLi9uZWdhdGVcIiksaW52ZXJzZTp0KFwiLi9pbnZlcnNlXCIpLG5vcm1hbGl6ZTp0KFwiLi9ub3JtYWxpemVcIiksZG90OnQoXCIuL2RvdFwiKSxjcm9zczp0KFwiLi9jcm9zc1wiKSxsZXJwOnQoXCIuL2xlcnBcIikscmFuZG9tOnQoXCIuL3JhbmRvbVwiKSx0cmFuc2Zvcm1NYXQ0OnQoXCIuL3RyYW5zZm9ybU1hdDRcIiksdHJhbnNmb3JtTWF0Mzp0KFwiLi90cmFuc2Zvcm1NYXQzXCIpLHRyYW5zZm9ybVF1YXQ6dChcIi4vdHJhbnNmb3JtUXVhdFwiKSxyb3RhdGVYOnQoXCIuL3JvdGF0ZVhcIikscm90YXRlWTp0KFwiLi9yb3RhdGVZXCIpLHJvdGF0ZVo6dChcIi4vcm90YXRlWlwiKSxmb3JFYWNoOnQoXCIuL2ZvckVhY2hcIil9fSx7XCIuL2FkZFwiOjMyMSxcIi4vYW5nbGVcIjozMjIsXCIuL2NlaWxcIjozMjMsXCIuL2Nsb25lXCI6MzI0LFwiLi9jb3B5XCI6MzI1LFwiLi9jcmVhdGVcIjozMjYsXCIuL2Nyb3NzXCI6MzI3LFwiLi9kaXN0XCI6MzI4LFwiLi9kaXN0YW5jZVwiOjMyOSxcIi4vZGl2XCI6MzMwLFwiLi9kaXZpZGVcIjozMzEsXCIuL2RvdFwiOjMzMixcIi4vZXBzaWxvblwiOjMzMyxcIi4vZXF1YWxzXCI6MzM0LFwiLi9leGFjdEVxdWFsc1wiOjMzNSxcIi4vZmxvb3JcIjozMzYsXCIuL2ZvckVhY2hcIjozMzcsXCIuL2Zyb21WYWx1ZXNcIjozMzgsXCIuL2ludmVyc2VcIjozNDAsXCIuL2xlblwiOjM0MSxcIi4vbGVuZ3RoXCI6MzQyLFwiLi9sZXJwXCI6MzQzLFwiLi9tYXhcIjozNDQsXCIuL21pblwiOjM0NSxcIi4vbXVsXCI6MzQ2LFwiLi9tdWx0aXBseVwiOjM0NyxcIi4vbmVnYXRlXCI6MzQ4LFwiLi9ub3JtYWxpemVcIjozNDksXCIuL3JhbmRvbVwiOjM1MCxcIi4vcm90YXRlWFwiOjM1MSxcIi4vcm90YXRlWVwiOjM1MixcIi4vcm90YXRlWlwiOjM1MyxcIi4vcm91bmRcIjozNTQsXCIuL3NjYWxlXCI6MzU1LFwiLi9zY2FsZUFuZEFkZFwiOjM1NixcIi4vc2V0XCI6MzU3LFwiLi9zcXJEaXN0XCI6MzU4LFwiLi9zcXJMZW5cIjozNTksXCIuL3NxdWFyZWREaXN0YW5jZVwiOjM2MCxcIi4vc3F1YXJlZExlbmd0aFwiOjM2MSxcIi4vc3ViXCI6MzYyLFwiLi9zdWJ0cmFjdFwiOjM2MyxcIi4vdHJhbnNmb3JtTWF0M1wiOjM2NCxcIi4vdHJhbnNmb3JtTWF0NFwiOjM2NSxcIi4vdHJhbnNmb3JtUXVhdFwiOjM2Nn1dLDM0MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPTEvZVswXSx0WzFdPTEvZVsxXSx0WzJdPTEvZVsyXSx0fX0se31dLDM0MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KFwiLi9sZW5ndGhcIil9LHtcIi4vbGVuZ3RoXCI6MzQyfV0sMzQyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXTtyZXR1cm4gTWF0aC5zcXJ0KGUqZStyKnIrbipuKX19LHt9XSwzNDM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZVswXSxhPWVbMV0sbz1lWzJdO3JldHVybiB0WzBdPWkrbiooclswXS1pKSx0WzFdPWErbiooclsxXS1hKSx0WzJdPW8rbiooclsyXS1vKSx0fX0se31dLDM0NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09TWF0aC5tYXgoZVswXSxyWzBdKSx0WzFdPU1hdGgubWF4KGVbMV0sclsxXSksdFsyXT1NYXRoLm1heChlWzJdLHJbMl0pLHR9fSx7fV0sMzQ1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1pbihlWzBdLHJbMF0pLHRbMV09TWF0aC5taW4oZVsxXSxyWzFdKSx0WzJdPU1hdGgubWluKGVbMl0sclsyXSksdH19LHt9XSwzNDY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dChcIi4vbXVsdGlwbHlcIil9LHtcIi4vbXVsdGlwbHlcIjozNDd9XSwzNDc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qclswXSx0WzFdPWVbMV0qclsxXSx0WzJdPWVbMl0qclsyXSx0fX0se31dLDM0ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPS1lWzBdLHRbMV09LWVbMV0sdFsyXT0tZVsyXSx0fX0se31dLDM0OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPXIqcituKm4raSppO2E+MCYmKGE9MS9NYXRoLnNxcnQoYSksdFswXT1lWzBdKmEsdFsxXT1lWzFdKmEsdFsyXT1lWzJdKmEpO3JldHVybiB0fX0se31dLDM1MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2U9ZXx8MTt2YXIgcj0yKk1hdGgucmFuZG9tKCkqTWF0aC5QSSxuPTIqTWF0aC5yYW5kb20oKS0xLGk9TWF0aC5zcXJ0KDEtbipuKSplO3JldHVybiB0WzBdPU1hdGguY29zKHIpKmksdFsxXT1NYXRoLnNpbihyKSppLHRbMl09biplLHR9fSx7fV0sMzUxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXJbMV0sYT1yWzJdLG89ZVsxXS1pLHM9ZVsyXS1hLGw9TWF0aC5zaW4obiksYz1NYXRoLmNvcyhuKTtyZXR1cm4gdFswXT1lWzBdLHRbMV09aStvKmMtcypsLHRbMl09YStvKmwrcypjLHR9fSx7fV0sMzUyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXJbMF0sYT1yWzJdLG89ZVswXS1pLHM9ZVsyXS1hLGw9TWF0aC5zaW4obiksYz1NYXRoLmNvcyhuKTtyZXR1cm4gdFswXT1pK3MqbCtvKmMsdFsxXT1lWzFdLHRbMl09YStzKmMtbypsLHR9fSx7fV0sMzUzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXJbMF0sYT1yWzFdLG89ZVswXS1pLHM9ZVsxXS1hLGw9TWF0aC5zaW4obiksYz1NYXRoLmNvcyhuKTtyZXR1cm4gdFswXT1pK28qYy1zKmwsdFsxXT1hK28qbCtzKmMsdFsyXT1lWzJdLHR9fSx7fV0sMzU0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5yb3VuZChlWzBdKSx0WzFdPU1hdGgucm91bmQoZVsxXSksdFsyXT1NYXRoLnJvdW5kKGVbMl0pLHR9fSx7fV0sMzU1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnIsdFsxXT1lWzFdKnIsdFsyXT1lWzJdKnIsdH19LHt9XSwzNTY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRbMF09ZVswXStyWzBdKm4sdFsxXT1lWzFdK3JbMV0qbix0WzJdPWVbMl0rclsyXSpuLHR9fSx7fV0sMzU3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0WzBdPWUsdFsxXT1yLHRbMl09bix0fX0se31dLDM1ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KFwiLi9zcXVhcmVkRGlzdGFuY2VcIil9LHtcIi4vc3F1YXJlZERpc3RhbmNlXCI6MzYwfV0sMzU5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoXCIuL3NxdWFyZWRMZW5ndGhcIil9LHtcIi4vc3F1YXJlZExlbmd0aFwiOjM2MX1dLDM2MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0tdFswXSxuPWVbMV0tdFsxXSxpPWVbMl0tdFsyXTtyZXR1cm4gcipyK24qbitpKml9fSx7fV0sMzYxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXTtyZXR1cm4gZSplK3IqcituKm59fSx7fV0sMzYyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoXCIuL3N1YnRyYWN0XCIpfSx7XCIuL3N1YnRyYWN0XCI6MzYzfV0sMzYzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdLXJbMF0sdFsxXT1lWzFdLXJbMV0sdFsyXT1lWzJdLXJbMl0sdH19LHt9XSwzNjQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXTtyZXR1cm4gdFswXT1uKnJbMF0raSpyWzNdK2Eqcls2XSx0WzFdPW4qclsxXStpKnJbNF0rYSpyWzddLHRbMl09bipyWzJdK2kqcls1XSthKnJbOF0sdH19LHt9XSwzNjU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbM10qbityWzddKmkrclsxMV0qYStyWzE1XTtyZXR1cm4gbz1vfHwxLHRbMF09KHJbMF0qbityWzRdKmkrcls4XSphK3JbMTJdKS9vLHRbMV09KHJbMV0qbityWzVdKmkrcls5XSphK3JbMTNdKS9vLHRbMl09KHJbMl0qbityWzZdKmkrclsxMF0qYStyWzE0XSkvbyx0fX0se31dLDM2NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89clswXSxzPXJbMV0sbD1yWzJdLGM9clszXSx1PWMqbitzKmEtbCppLGg9YyppK2wqbi1vKmEsZj1jKmErbyppLXMqbixwPS1vKm4tcyppLWwqYTtyZXR1cm4gdFswXT11KmMrcCotbytoKi1sLWYqLXMsdFsxXT1oKmMrcCotcytmKi1vLXUqLWwsdFsyXT1mKmMrcCotbCt1Ki1zLWgqLW8sdH19LHt9XSwzNjc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0rclswXSx0WzFdPWVbMV0rclsxXSx0WzJdPWVbMl0rclsyXSx0WzNdPWVbM10rclszXSx0fX0se31dLDM2ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgRmxvYXQzMkFycmF5KDQpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZX19LHt9XSwzNjk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHR9fSx7fV0sMzcwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSg0KTtyZXR1cm4gdFswXT0wLHRbMV09MCx0WzJdPTAsdFszXT0wLHR9fSx7fV0sMzcxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdLGk9ZVsyXS10WzJdLGE9ZVszXS10WzNdO3JldHVybiBNYXRoLnNxcnQocipyK24qbitpKmkrYSphKX19LHt9XSwzNzI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0vclswXSx0WzFdPWVbMV0vclsxXSx0WzJdPWVbMl0vclsyXSx0WzNdPWVbM10vclszXSx0fX0se31dLDM3MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXSt0WzNdKmVbM119fSx7fV0sMzc0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW5ldyBGbG9hdDMyQXJyYXkoNCk7cmV0dXJuIGlbMF09dCxpWzFdPWUsaVsyXT1yLGlbM109bixpfX0se31dLDM3NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17Y3JlYXRlOnQoXCIuL2NyZWF0ZVwiKSxjbG9uZTp0KFwiLi9jbG9uZVwiKSxmcm9tVmFsdWVzOnQoXCIuL2Zyb21WYWx1ZXNcIiksY29weTp0KFwiLi9jb3B5XCIpLHNldDp0KFwiLi9zZXRcIiksYWRkOnQoXCIuL2FkZFwiKSxzdWJ0cmFjdDp0KFwiLi9zdWJ0cmFjdFwiKSxtdWx0aXBseTp0KFwiLi9tdWx0aXBseVwiKSxkaXZpZGU6dChcIi4vZGl2aWRlXCIpLG1pbjp0KFwiLi9taW5cIiksbWF4OnQoXCIuL21heFwiKSxzY2FsZTp0KFwiLi9zY2FsZVwiKSxzY2FsZUFuZEFkZDp0KFwiLi9zY2FsZUFuZEFkZFwiKSxkaXN0YW5jZTp0KFwiLi9kaXN0YW5jZVwiKSxzcXVhcmVkRGlzdGFuY2U6dChcIi4vc3F1YXJlZERpc3RhbmNlXCIpLGxlbmd0aDp0KFwiLi9sZW5ndGhcIiksc3F1YXJlZExlbmd0aDp0KFwiLi9zcXVhcmVkTGVuZ3RoXCIpLG5lZ2F0ZTp0KFwiLi9uZWdhdGVcIiksaW52ZXJzZTp0KFwiLi9pbnZlcnNlXCIpLG5vcm1hbGl6ZTp0KFwiLi9ub3JtYWxpemVcIiksZG90OnQoXCIuL2RvdFwiKSxsZXJwOnQoXCIuL2xlcnBcIikscmFuZG9tOnQoXCIuL3JhbmRvbVwiKSx0cmFuc2Zvcm1NYXQ0OnQoXCIuL3RyYW5zZm9ybU1hdDRcIiksdHJhbnNmb3JtUXVhdDp0KFwiLi90cmFuc2Zvcm1RdWF0XCIpfX0se1wiLi9hZGRcIjozNjcsXCIuL2Nsb25lXCI6MzY4LFwiLi9jb3B5XCI6MzY5LFwiLi9jcmVhdGVcIjozNzAsXCIuL2Rpc3RhbmNlXCI6MzcxLFwiLi9kaXZpZGVcIjozNzIsXCIuL2RvdFwiOjM3MyxcIi4vZnJvbVZhbHVlc1wiOjM3NCxcIi4vaW52ZXJzZVwiOjM3NixcIi4vbGVuZ3RoXCI6Mzc3LFwiLi9sZXJwXCI6Mzc4LFwiLi9tYXhcIjozNzksXCIuL21pblwiOjM4MCxcIi4vbXVsdGlwbHlcIjozODEsXCIuL25lZ2F0ZVwiOjM4MixcIi4vbm9ybWFsaXplXCI6MzgzLFwiLi9yYW5kb21cIjozODQsXCIuL3NjYWxlXCI6Mzg1LFwiLi9zY2FsZUFuZEFkZFwiOjM4NixcIi4vc2V0XCI6Mzg3LFwiLi9zcXVhcmVkRGlzdGFuY2VcIjozODgsXCIuL3NxdWFyZWRMZW5ndGhcIjozODksXCIuL3N1YnRyYWN0XCI6MzkwLFwiLi90cmFuc2Zvcm1NYXQ0XCI6MzkxLFwiLi90cmFuc2Zvcm1RdWF0XCI6MzkyfV0sMzc2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09MS9lWzBdLHRbMV09MS9lWzFdLHRbMl09MS9lWzJdLHRbM109MS9lWzNdLHR9fSx7fV0sMzc3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXSxpPXRbM107cmV0dXJuIE1hdGguc3FydChlKmUrcipyK24qbitpKmkpfX0se31dLDM3ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lWzBdLGE9ZVsxXSxvPWVbMl0scz1lWzNdO3JldHVybiB0WzBdPWkrbiooclswXS1pKSx0WzFdPWErbiooclsxXS1hKSx0WzJdPW8rbiooclsyXS1vKSx0WzNdPXMrbiooclszXS1zKSx0fX0se31dLDM3OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09TWF0aC5tYXgoZVswXSxyWzBdKSx0WzFdPU1hdGgubWF4KGVbMV0sclsxXSksdFsyXT1NYXRoLm1heChlWzJdLHJbMl0pLHRbM109TWF0aC5tYXgoZVszXSxyWzNdKSx0fX0se31dLDM4MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09TWF0aC5taW4oZVswXSxyWzBdKSx0WzFdPU1hdGgubWluKGVbMV0sclsxXSksdFsyXT1NYXRoLm1pbihlWzJdLHJbMl0pLHRbM109TWF0aC5taW4oZVszXSxyWzNdKSx0fX0se31dLDM4MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXSpyWzBdLHRbMV09ZVsxXSpyWzFdLHRbMl09ZVsyXSpyWzJdLHRbM109ZVszXSpyWzNdLHR9fSx7fV0sMzgyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09LWVbMF0sdFsxXT0tZVsxXSx0WzJdPS1lWzJdLHRbM109LWVbM10sdH19LHt9XSwzODM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89cipyK24qbitpKmkrYSphO28+MCYmKG89MS9NYXRoLnNxcnQobyksdFswXT1yKm8sdFsxXT1uKm8sdFsyXT1pKm8sdFszXT1hKm8pO3JldHVybiB0fX0se31dLDM4NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuL25vcm1hbGl6ZVwiKSxpPXQoXCIuL3NjYWxlXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBlPWV8fDEsdFswXT1NYXRoLnJhbmRvbSgpLHRbMV09TWF0aC5yYW5kb20oKSx0WzJdPU1hdGgucmFuZG9tKCksdFszXT1NYXRoLnJhbmRvbSgpLG4odCx0KSxpKHQsdCxlKSx0fX0se1wiLi9ub3JtYWxpemVcIjozODMsXCIuL3NjYWxlXCI6Mzg1fV0sMzg1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnIsdFsxXT1lWzFdKnIsdFsyXT1lWzJdKnIsdFszXT1lWzNdKnIsdH19LHt9XSwzODY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRbMF09ZVswXStyWzBdKm4sdFsxXT1lWzFdK3JbMV0qbix0WzJdPWVbMl0rclsyXSpuLHRbM109ZVszXStyWzNdKm4sdH19LHt9XSwzODc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdFswXT1lLHRbMV09cix0WzJdPW4sdFszXT1pLHR9fSx7fV0sMzg4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdLGk9ZVsyXS10WzJdLGE9ZVszXS10WzNdO3JldHVybiByKnIrbipuK2kqaSthKmF9fSx7fV0sMzg5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXSxpPXRbM107cmV0dXJuIGUqZStyKnIrbipuK2kqaX19LHt9XSwzOTA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0tclswXSx0WzFdPWVbMV0tclsxXSx0WzJdPWVbMl0tclsyXSx0WzNdPWVbM10tclszXSx0fX0se31dLDM5MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXTtyZXR1cm4gdFswXT1yWzBdKm4rcls0XSppK3JbOF0qYStyWzEyXSpvLHRbMV09clsxXSpuK3JbNV0qaStyWzldKmErclsxM10qbyx0WzJdPXJbMl0qbityWzZdKmkrclsxMF0qYStyWzE0XSpvLHRbM109clszXSpuK3JbN10qaStyWzExXSphK3JbMTVdKm8sdH19LHt9XSwzOTI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbMF0scz1yWzFdLGw9clsyXSxjPXJbM10sdT1jKm4rcyphLWwqaSxoPWMqaStsKm4tbyphLGY9YyphK28qaS1zKm4scD0tbypuLXMqaS1sKmE7cmV0dXJuIHRbMF09dSpjK3AqLW8raCotbC1mKi1zLHRbMV09aCpjK3AqLXMrZiotby11Ki1sLHRbMl09ZipjK3AqLWwrdSotcy1oKi1vLHRbM109ZVszXSx0fX0se31dLDM5MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtyZXR1cm4gblswXT1hLG5bMV09cixuWzJdPWUsblszXT10LGlbMF19O3ZhciBuPW5ldyBVaW50OEFycmF5KDQpLGk9bmV3IEZsb2F0MzJBcnJheShuLmJ1ZmZlcil9LHt9XSwzOTQ6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiZ2xzbC10b2tlbml6ZXJcIiksaT10KFwiYXRvYi1saXRlXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9QXJyYXkuaXNBcnJheSh0KT90Om4odCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgYT1lW3JdO2lmKFwicHJlcHJvY2Vzc29yXCI9PT1hLnR5cGUpe3ZhciBvPWEuZGF0YS5tYXRjaCgvXFwjZGVmaW5lXFxzK1NIQURFUl9OQU1FKF9CNjQpP1xccysoLispJC8pO2lmKG8mJm9bMl0pe3ZhciBzPW9bMV0sbD1vWzJdO3JldHVybihzP2kobCk6bCkudHJpbSgpfX19fX0se1wiYXRvYi1saXRlXCI6NjMsXCJnbHNsLXRva2VuaXplclwiOjQwMX1dLDM5NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLGssQT0wLFQ9MCxNPWwsUz1bXSxFPVtdLEM9MSxMPTAsej0wLE89ITEsST0hMSxEPVwiXCIsUD1hLFI9bjtcIjMwMCBlc1wiPT09KHQ9dHx8e30pLnZlcnNpb24mJihQPXMsUj1vKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEU9W10sbnVsbCE9PXQ/ZnVuY3Rpb24odCl7dmFyIHI7QT0wLGs9KEQrPXQpLmxlbmd0aDtmb3IoO2U9RFtBXSxBPGs7KXtzd2l0Y2gocj1BLE0pe2Nhc2UgdTpBPVYoKTticmVhaztjYXNlIGg6Y2FzZSBmOkE9aigpO2JyZWFrO2Nhc2UgcDpBPVUoKTticmVhaztjYXNlIGQ6QT1HKCk7YnJlYWs7Y2FzZSBfOkE9SCgpO2JyZWFrO2Nhc2UgZzpBPVkoKTticmVhaztjYXNlIGM6QT1XKCk7YnJlYWs7Y2FzZSB4OkE9TigpO2JyZWFrO2Nhc2UgbDpBPUIoKX1pZihyIT09QSlzd2l0Y2goRFtyXSl7Y2FzZVwiXFxuXCI6TD0wLCsrQzticmVhaztkZWZhdWx0OisrTH19cmV0dXJuIFQrPUEsRD1ELnNsaWNlKEEpLEV9KHQucmVwbGFjZT90LnJlcGxhY2UoL1xcclxcbi9nLFwiXFxuXCIpOnQpOmZ1bmN0aW9uKHQpe1MubGVuZ3RoJiZGKFMuam9pbihcIlwiKSk7cmV0dXJuIE09YixGKFwiKGVvZilcIiksRX0oKX07ZnVuY3Rpb24gRih0KXt0Lmxlbmd0aCYmRS5wdXNoKHt0eXBlOndbTV0sZGF0YTp0LHBvc2l0aW9uOnosbGluZTpDLGNvbHVtbjpMfSl9ZnVuY3Rpb24gQigpe3JldHVybiBTPVMubGVuZ3RoP1tdOlMsXCIvXCI9PT1yJiZcIipcIj09PWU/KHo9VCtBLTEsTT11LHI9ZSxBKzEpOlwiL1wiPT09ciYmXCIvXCI9PT1lPyh6PVQrQS0xLE09aCxyPWUsQSsxKTpcIiNcIj09PWU/KE09Zix6PVQrQSxBKTovXFxzLy50ZXN0KGUpPyhNPXgsej1UK0EsQSk6KE89L1xcZC8udGVzdChlKSxJPS9bXlxcd19dLy50ZXN0KGUpLHo9VCtBLE09Tz9kOkk/cDpjLEEpfWZ1bmN0aW9uIE4oKXtyZXR1cm4vW15cXHNdL2cudGVzdChlKT8oRihTLmpvaW4oXCJcIikpLE09bCxBKTooUy5wdXNoKGUpLHI9ZSxBKzEpfWZ1bmN0aW9uIGooKXtyZXR1cm5cIlxcclwiIT09ZSYmXCJcXG5cIiE9PWV8fFwiXFxcXFwiPT09cj8oUy5wdXNoKGUpLHI9ZSxBKzEpOihGKFMuam9pbihcIlwiKSksTT1sLEEpfWZ1bmN0aW9uIFYoKXtyZXR1cm5cIi9cIj09PWUmJlwiKlwiPT09cj8oUy5wdXNoKGUpLEYoUy5qb2luKFwiXCIpKSxNPWwsQSsxKTooUy5wdXNoKGUpLHI9ZSxBKzEpfWZ1bmN0aW9uIFUoKXtpZihcIi5cIj09PXImJi9cXGQvLnRlc3QoZSkpcmV0dXJuIE09ZyxBO2lmKFwiL1wiPT09ciYmXCIqXCI9PT1lKXJldHVybiBNPXUsQTtpZihcIi9cIj09PXImJlwiL1wiPT09ZSlyZXR1cm4gTT1oLEE7aWYoXCIuXCI9PT1lJiZTLmxlbmd0aCl7Zm9yKDtxKFMpOyk7cmV0dXJuIE09ZyxBfWlmKFwiO1wiPT09ZXx8XCIpXCI9PT1lfHxcIihcIj09PWUpe2lmKFMubGVuZ3RoKWZvcig7cShTKTspO3JldHVybiBGKGUpLE09bCxBKzF9dmFyIHQ9Mj09PVMubGVuZ3RoJiZcIj1cIiE9PWU7aWYoL1tcXHdfXFxkXFxzXS8udGVzdChlKXx8dCl7Zm9yKDtxKFMpOyk7cmV0dXJuIE09bCxBfXJldHVybiBTLnB1c2goZSkscj1lLEErMX1mdW5jdGlvbiBxKHQpe2Zvcih2YXIgZSxyLG49MDs7KXtpZihlPWkuaW5kZXhPZih0LnNsaWNlKDAsdC5sZW5ndGgrbikuam9pbihcIlwiKSkscj1pW2VdLC0xPT09ZSl7aWYobi0tK3QubGVuZ3RoPjApY29udGludWU7cj10LnNsaWNlKDAsMSkuam9pbihcIlwiKX1yZXR1cm4gRihyKSx6Kz1yLmxlbmd0aCwoUz1TLnNsaWNlKHIubGVuZ3RoKSkubGVuZ3RofX1mdW5jdGlvbiBIKCl7cmV0dXJuL1teYS1mQS1GMC05XS8udGVzdChlKT8oRihTLmpvaW4oXCJcIikpLE09bCxBKTooUy5wdXNoKGUpLHI9ZSxBKzEpfWZ1bmN0aW9uIEcoKXtyZXR1cm5cIi5cIj09PWU/KFMucHVzaChlKSxNPWcscj1lLEErMSk6L1tlRV0vLnRlc3QoZSk/KFMucHVzaChlKSxNPWcscj1lLEErMSk6XCJ4XCI9PT1lJiYxPT09Uy5sZW5ndGgmJlwiMFwiPT09U1swXT8oTT1fLFMucHVzaChlKSxyPWUsQSsxKTovW15cXGRdLy50ZXN0KGUpPyhGKFMuam9pbihcIlwiKSksTT1sLEEpOihTLnB1c2goZSkscj1lLEErMSl9ZnVuY3Rpb24gWSgpe3JldHVyblwiZlwiPT09ZSYmKFMucHVzaChlKSxyPWUsQSs9MSksL1tlRV0vLnRlc3QoZSk/KFMucHVzaChlKSxyPWUsQSsxKTpcIi1cIj09PWUmJi9bZUVdLy50ZXN0KHIpPyhTLnB1c2goZSkscj1lLEErMSk6L1teXFxkXS8udGVzdChlKT8oRihTLmpvaW4oXCJcIikpLE09bCxBKTooUy5wdXNoKGUpLHI9ZSxBKzEpfWZ1bmN0aW9uIFcoKXtpZigvW15cXGRcXHdfXS8udGVzdChlKSl7dmFyIHQ9Uy5qb2luKFwiXCIpO3JldHVybiBNPVIuaW5kZXhPZih0KT4tMT95OlAuaW5kZXhPZih0KT4tMT9tOnYsRihTLmpvaW4oXCJcIikpLE09bCxBfXJldHVybiBTLnB1c2goZSkscj1lLEErMX19O3ZhciBuPXQoXCIuL2xpYi9saXRlcmFsc1wiKSxpPXQoXCIuL2xpYi9vcGVyYXRvcnNcIiksYT10KFwiLi9saWIvYnVpbHRpbnNcIiksbz10KFwiLi9saWIvbGl0ZXJhbHMtMzAwZXNcIikscz10KFwiLi9saWIvYnVpbHRpbnMtMzAwZXNcIiksbD05OTksYz05OTk5LHU9MCxoPTEsZj0yLHA9MyxkPTQsZz01LHY9NixtPTcseT04LHg9OSxiPTEwLF89MTEsdz1bXCJibG9jay1jb21tZW50XCIsXCJsaW5lLWNvbW1lbnRcIixcInByZXByb2Nlc3NvclwiLFwib3BlcmF0b3JcIixcImludGVnZXJcIixcImZsb2F0XCIsXCJpZGVudFwiLFwiYnVpbHRpblwiLFwia2V5d29yZFwiLFwid2hpdGVzcGFjZVwiLFwiZW9mXCIsXCJpbnRlZ2VyXCJdfSx7XCIuL2xpYi9idWlsdGluc1wiOjM5NyxcIi4vbGliL2J1aWx0aW5zLTMwMGVzXCI6Mzk2LFwiLi9saWIvbGl0ZXJhbHNcIjozOTksXCIuL2xpYi9saXRlcmFscy0zMDBlc1wiOjM5OCxcIi4vbGliL29wZXJhdG9yc1wiOjQwMH1dLDM5NjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuL2J1aWx0aW5zXCIpO249bi5zbGljZSgpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hL14oZ2xcXF98dGV4dHVyZSkvLnRlc3QodCl9KSxlLmV4cG9ydHM9bi5jb25jYXQoW1wiZ2xfVmVydGV4SURcIixcImdsX0luc3RhbmNlSURcIixcImdsX1Bvc2l0aW9uXCIsXCJnbF9Qb2ludFNpemVcIixcImdsX0ZyYWdDb29yZFwiLFwiZ2xfRnJvbnRGYWNpbmdcIixcImdsX0ZyYWdEZXB0aFwiLFwiZ2xfUG9pbnRDb29yZFwiLFwiZ2xfTWF4VmVydGV4QXR0cmlic1wiLFwiZ2xfTWF4VmVydGV4VW5pZm9ybVZlY3RvcnNcIixcImdsX01heFZlcnRleE91dHB1dFZlY3RvcnNcIixcImdsX01heEZyYWdtZW50SW5wdXRWZWN0b3JzXCIsXCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0c1wiLFwiZ2xfTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0c1wiLFwiZ2xfTWF4VGV4dHVyZUltYWdlVW5pdHNcIixcImdsX01heEZyYWdtZW50VW5pZm9ybVZlY3RvcnNcIixcImdsX01heERyYXdCdWZmZXJzXCIsXCJnbF9NaW5Qcm9ncmFtVGV4ZWxPZmZzZXRcIixcImdsX01heFByb2dyYW1UZXhlbE9mZnNldFwiLFwiZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnNcIixcImdsX0RlcHRoUmFuZ2VcIixcInRydW5jXCIsXCJyb3VuZFwiLFwicm91bmRFdmVuXCIsXCJpc25hblwiLFwiaXNpbmZcIixcImZsb2F0Qml0c1RvSW50XCIsXCJmbG9hdEJpdHNUb1VpbnRcIixcImludEJpdHNUb0Zsb2F0XCIsXCJ1aW50Qml0c1RvRmxvYXRcIixcInBhY2tTbm9ybTJ4MTZcIixcInVucGFja1Nub3JtMngxNlwiLFwicGFja1Vub3JtMngxNlwiLFwidW5wYWNrVW5vcm0yeDE2XCIsXCJwYWNrSGFsZjJ4MTZcIixcInVucGFja0hhbGYyeDE2XCIsXCJvdXRlclByb2R1Y3RcIixcInRyYW5zcG9zZVwiLFwiZGV0ZXJtaW5hbnRcIixcImludmVyc2VcIixcInRleHR1cmVcIixcInRleHR1cmVTaXplXCIsXCJ0ZXh0dXJlUHJvalwiLFwidGV4dHVyZUxvZFwiLFwidGV4dHVyZU9mZnNldFwiLFwidGV4ZWxGZXRjaFwiLFwidGV4ZWxGZXRjaE9mZnNldFwiLFwidGV4dHVyZVByb2pPZmZzZXRcIixcInRleHR1cmVMb2RPZmZzZXRcIixcInRleHR1cmVQcm9qTG9kXCIsXCJ0ZXh0dXJlUHJvakxvZE9mZnNldFwiLFwidGV4dHVyZUdyYWRcIixcInRleHR1cmVHcmFkT2Zmc2V0XCIsXCJ0ZXh0dXJlUHJvakdyYWRcIixcInRleHR1cmVQcm9qR3JhZE9mZnNldFwiXSl9LHtcIi4vYnVpbHRpbnNcIjozOTd9XSwzOTc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9W1wiYWJzXCIsXCJhY29zXCIsXCJhbGxcIixcImFueVwiLFwiYXNpblwiLFwiYXRhblwiLFwiY2VpbFwiLFwiY2xhbXBcIixcImNvc1wiLFwiY3Jvc3NcIixcImRGZHhcIixcImRGZHlcIixcImRlZ3JlZXNcIixcImRpc3RhbmNlXCIsXCJkb3RcIixcImVxdWFsXCIsXCJleHBcIixcImV4cDJcIixcImZhY2Vmb3J3YXJkXCIsXCJmbG9vclwiLFwiZnJhY3RcIixcImdsX0JhY2tDb2xvclwiLFwiZ2xfQmFja0xpZ2h0TW9kZWxQcm9kdWN0XCIsXCJnbF9CYWNrTGlnaHRQcm9kdWN0XCIsXCJnbF9CYWNrTWF0ZXJpYWxcIixcImdsX0JhY2tTZWNvbmRhcnlDb2xvclwiLFwiZ2xfQ2xpcFBsYW5lXCIsXCJnbF9DbGlwVmVydGV4XCIsXCJnbF9Db2xvclwiLFwiZ2xfRGVwdGhSYW5nZVwiLFwiZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnNcIixcImdsX0V5ZVBsYW5lUVwiLFwiZ2xfRXllUGxhbmVSXCIsXCJnbF9FeWVQbGFuZVNcIixcImdsX0V5ZVBsYW5lVFwiLFwiZ2xfRm9nXCIsXCJnbF9Gb2dDb29yZFwiLFwiZ2xfRm9nRnJhZ0Nvb3JkXCIsXCJnbF9Gb2dQYXJhbWV0ZXJzXCIsXCJnbF9GcmFnQ29sb3JcIixcImdsX0ZyYWdDb29yZFwiLFwiZ2xfRnJhZ0RhdGFcIixcImdsX0ZyYWdEZXB0aFwiLFwiZ2xfRnJhZ0RlcHRoRVhUXCIsXCJnbF9Gcm9udENvbG9yXCIsXCJnbF9Gcm9udEZhY2luZ1wiLFwiZ2xfRnJvbnRMaWdodE1vZGVsUHJvZHVjdFwiLFwiZ2xfRnJvbnRMaWdodFByb2R1Y3RcIixcImdsX0Zyb250TWF0ZXJpYWxcIixcImdsX0Zyb250U2Vjb25kYXJ5Q29sb3JcIixcImdsX0xpZ2h0TW9kZWxcIixcImdsX0xpZ2h0TW9kZWxQYXJhbWV0ZXJzXCIsXCJnbF9MaWdodE1vZGVsUHJvZHVjdHNcIixcImdsX0xpZ2h0UHJvZHVjdHNcIixcImdsX0xpZ2h0U291cmNlXCIsXCJnbF9MaWdodFNvdXJjZVBhcmFtZXRlcnNcIixcImdsX01hdGVyaWFsUGFyYW1ldGVyc1wiLFwiZ2xfTWF4Q2xpcFBsYW5lc1wiLFwiZ2xfTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0c1wiLFwiZ2xfTWF4RHJhd0J1ZmZlcnNcIixcImdsX01heEZyYWdtZW50VW5pZm9ybUNvbXBvbmVudHNcIixcImdsX01heExpZ2h0c1wiLFwiZ2xfTWF4VGV4dHVyZUNvb3Jkc1wiLFwiZ2xfTWF4VGV4dHVyZUltYWdlVW5pdHNcIixcImdsX01heFRleHR1cmVVbml0c1wiLFwiZ2xfTWF4VmFyeWluZ0Zsb2F0c1wiLFwiZ2xfTWF4VmVydGV4QXR0cmlic1wiLFwiZ2xfTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHNcIixcImdsX01heFZlcnRleFVuaWZvcm1Db21wb25lbnRzXCIsXCJnbF9Nb2RlbFZpZXdNYXRyaXhcIixcImdsX01vZGVsVmlld01hdHJpeEludmVyc2VcIixcImdsX01vZGVsVmlld01hdHJpeEludmVyc2VUcmFuc3Bvc2VcIixcImdsX01vZGVsVmlld01hdHJpeFRyYW5zcG9zZVwiLFwiZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeFwiLFwiZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeEludmVyc2VcIixcImdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlVHJhbnNwb3NlXCIsXCJnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4VHJhbnNwb3NlXCIsXCJnbF9NdWx0aVRleENvb3JkMFwiLFwiZ2xfTXVsdGlUZXhDb29yZDFcIixcImdsX011bHRpVGV4Q29vcmQyXCIsXCJnbF9NdWx0aVRleENvb3JkM1wiLFwiZ2xfTXVsdGlUZXhDb29yZDRcIixcImdsX011bHRpVGV4Q29vcmQ1XCIsXCJnbF9NdWx0aVRleENvb3JkNlwiLFwiZ2xfTXVsdGlUZXhDb29yZDdcIixcImdsX05vcm1hbFwiLFwiZ2xfTm9ybWFsTWF0cml4XCIsXCJnbF9Ob3JtYWxTY2FsZVwiLFwiZ2xfT2JqZWN0UGxhbmVRXCIsXCJnbF9PYmplY3RQbGFuZVJcIixcImdsX09iamVjdFBsYW5lU1wiLFwiZ2xfT2JqZWN0UGxhbmVUXCIsXCJnbF9Qb2ludFwiLFwiZ2xfUG9pbnRDb29yZFwiLFwiZ2xfUG9pbnRQYXJhbWV0ZXJzXCIsXCJnbF9Qb2ludFNpemVcIixcImdsX1Bvc2l0aW9uXCIsXCJnbF9Qcm9qZWN0aW9uTWF0cml4XCIsXCJnbF9Qcm9qZWN0aW9uTWF0cml4SW52ZXJzZVwiLFwiZ2xfUHJvamVjdGlvbk1hdHJpeEludmVyc2VUcmFuc3Bvc2VcIixcImdsX1Byb2plY3Rpb25NYXRyaXhUcmFuc3Bvc2VcIixcImdsX1NlY29uZGFyeUNvbG9yXCIsXCJnbF9UZXhDb29yZFwiLFwiZ2xfVGV4dHVyZUVudkNvbG9yXCIsXCJnbF9UZXh0dXJlTWF0cml4XCIsXCJnbF9UZXh0dXJlTWF0cml4SW52ZXJzZVwiLFwiZ2xfVGV4dHVyZU1hdHJpeEludmVyc2VUcmFuc3Bvc2VcIixcImdsX1RleHR1cmVNYXRyaXhUcmFuc3Bvc2VcIixcImdsX1ZlcnRleFwiLFwiZ3JlYXRlclRoYW5cIixcImdyZWF0ZXJUaGFuRXF1YWxcIixcImludmVyc2VzcXJ0XCIsXCJsZW5ndGhcIixcImxlc3NUaGFuXCIsXCJsZXNzVGhhbkVxdWFsXCIsXCJsb2dcIixcImxvZzJcIixcIm1hdHJpeENvbXBNdWx0XCIsXCJtYXhcIixcIm1pblwiLFwibWl4XCIsXCJtb2RcIixcIm5vcm1hbGl6ZVwiLFwibm90XCIsXCJub3RFcXVhbFwiLFwicG93XCIsXCJyYWRpYW5zXCIsXCJyZWZsZWN0XCIsXCJyZWZyYWN0XCIsXCJzaWduXCIsXCJzaW5cIixcInNtb290aHN0ZXBcIixcInNxcnRcIixcInN0ZXBcIixcInRhblwiLFwidGV4dHVyZTJEXCIsXCJ0ZXh0dXJlMkRMb2RcIixcInRleHR1cmUyRFByb2pcIixcInRleHR1cmUyRFByb2pMb2RcIixcInRleHR1cmVDdWJlXCIsXCJ0ZXh0dXJlQ3ViZUxvZFwiLFwidGV4dHVyZTJETG9kRVhUXCIsXCJ0ZXh0dXJlMkRQcm9qTG9kRVhUXCIsXCJ0ZXh0dXJlQ3ViZUxvZEVYVFwiLFwidGV4dHVyZTJER3JhZEVYVFwiLFwidGV4dHVyZTJEUHJvakdyYWRFWFRcIixcInRleHR1cmVDdWJlR3JhZEVYVFwiXX0se31dLDM5ODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuL2xpdGVyYWxzXCIpO2UuZXhwb3J0cz1uLnNsaWNlKCkuY29uY2F0KFtcImxheW91dFwiLFwiY2VudHJvaWRcIixcInNtb290aFwiLFwiY2FzZVwiLFwibWF0MngyXCIsXCJtYXQyeDNcIixcIm1hdDJ4NFwiLFwibWF0M3gyXCIsXCJtYXQzeDNcIixcIm1hdDN4NFwiLFwibWF0NHgyXCIsXCJtYXQ0eDNcIixcIm1hdDR4NFwiLFwidWludFwiLFwidXZlYzJcIixcInV2ZWMzXCIsXCJ1dmVjNFwiLFwic2FtcGxlckN1YmVTaGFkb3dcIixcInNhbXBsZXIyREFycmF5XCIsXCJzYW1wbGVyMkRBcnJheVNoYWRvd1wiLFwiaXNhbXBsZXIyRFwiLFwiaXNhbXBsZXIzRFwiLFwiaXNhbXBsZXJDdWJlXCIsXCJpc2FtcGxlcjJEQXJyYXlcIixcInVzYW1wbGVyMkRcIixcInVzYW1wbGVyM0RcIixcInVzYW1wbGVyQ3ViZVwiLFwidXNhbXBsZXIyREFycmF5XCIsXCJjb2hlcmVudFwiLFwicmVzdHJpY3RcIixcInJlYWRvbmx5XCIsXCJ3cml0ZW9ubHlcIixcInJlc291cmNlXCIsXCJhdG9taWNfdWludFwiLFwibm9wZXJzcGVjdGl2ZVwiLFwicGF0Y2hcIixcInNhbXBsZVwiLFwic3Vicm91dGluZVwiLFwiY29tbW9uXCIsXCJwYXJ0aXRpb25cIixcImFjdGl2ZVwiLFwiZmlsdGVyXCIsXCJpbWFnZTFEXCIsXCJpbWFnZTJEXCIsXCJpbWFnZTNEXCIsXCJpbWFnZUN1YmVcIixcImlpbWFnZTFEXCIsXCJpaW1hZ2UyRFwiLFwiaWltYWdlM0RcIixcImlpbWFnZUN1YmVcIixcInVpbWFnZTFEXCIsXCJ1aW1hZ2UyRFwiLFwidWltYWdlM0RcIixcInVpbWFnZUN1YmVcIixcImltYWdlMURBcnJheVwiLFwiaW1hZ2UyREFycmF5XCIsXCJpaW1hZ2UxREFycmF5XCIsXCJpaW1hZ2UyREFycmF5XCIsXCJ1aW1hZ2UxREFycmF5XCIsXCJ1aW1hZ2UyREFycmF5XCIsXCJpbWFnZTFEU2hhZG93XCIsXCJpbWFnZTJEU2hhZG93XCIsXCJpbWFnZTFEQXJyYXlTaGFkb3dcIixcImltYWdlMkRBcnJheVNoYWRvd1wiLFwiaW1hZ2VCdWZmZXJcIixcImlpbWFnZUJ1ZmZlclwiLFwidWltYWdlQnVmZmVyXCIsXCJzYW1wbGVyMURBcnJheVwiLFwic2FtcGxlcjFEQXJyYXlTaGFkb3dcIixcImlzYW1wbGVyMURcIixcImlzYW1wbGVyMURBcnJheVwiLFwidXNhbXBsZXIxRFwiLFwidXNhbXBsZXIxREFycmF5XCIsXCJpc2FtcGxlcjJEUmVjdFwiLFwidXNhbXBsZXIyRFJlY3RcIixcInNhbXBsZXJCdWZmZXJcIixcImlzYW1wbGVyQnVmZmVyXCIsXCJ1c2FtcGxlckJ1ZmZlclwiLFwic2FtcGxlcjJETVNcIixcImlzYW1wbGVyMkRNU1wiLFwidXNhbXBsZXIyRE1TXCIsXCJzYW1wbGVyMkRNU0FycmF5XCIsXCJpc2FtcGxlcjJETVNBcnJheVwiLFwidXNhbXBsZXIyRE1TQXJyYXlcIl0pfSx7XCIuL2xpdGVyYWxzXCI6Mzk5fV0sMzk5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVtcInByZWNpc2lvblwiLFwiaGlnaHBcIixcIm1lZGl1bXBcIixcImxvd3BcIixcImF0dHJpYnV0ZVwiLFwiY29uc3RcIixcInVuaWZvcm1cIixcInZhcnlpbmdcIixcImJyZWFrXCIsXCJjb250aW51ZVwiLFwiZG9cIixcImZvclwiLFwid2hpbGVcIixcImlmXCIsXCJlbHNlXCIsXCJpblwiLFwib3V0XCIsXCJpbm91dFwiLFwiZmxvYXRcIixcImludFwiLFwidm9pZFwiLFwiYm9vbFwiLFwidHJ1ZVwiLFwiZmFsc2VcIixcImRpc2NhcmRcIixcInJldHVyblwiLFwibWF0MlwiLFwibWF0M1wiLFwibWF0NFwiLFwidmVjMlwiLFwidmVjM1wiLFwidmVjNFwiLFwiaXZlYzJcIixcIml2ZWMzXCIsXCJpdmVjNFwiLFwiYnZlYzJcIixcImJ2ZWMzXCIsXCJidmVjNFwiLFwic2FtcGxlcjFEXCIsXCJzYW1wbGVyMkRcIixcInNhbXBsZXIzRFwiLFwic2FtcGxlckN1YmVcIixcInNhbXBsZXIxRFNoYWRvd1wiLFwic2FtcGxlcjJEU2hhZG93XCIsXCJzdHJ1Y3RcIixcImFzbVwiLFwiY2xhc3NcIixcInVuaW9uXCIsXCJlbnVtXCIsXCJ0eXBlZGVmXCIsXCJ0ZW1wbGF0ZVwiLFwidGhpc1wiLFwicGFja2VkXCIsXCJnb3RvXCIsXCJzd2l0Y2hcIixcImRlZmF1bHRcIixcImlubGluZVwiLFwibm9pbmxpbmVcIixcInZvbGF0aWxlXCIsXCJwdWJsaWNcIixcInN0YXRpY1wiLFwiZXh0ZXJuXCIsXCJleHRlcm5hbFwiLFwiaW50ZXJmYWNlXCIsXCJsb25nXCIsXCJzaG9ydFwiLFwiZG91YmxlXCIsXCJoYWxmXCIsXCJmaXhlZFwiLFwidW5zaWduZWRcIixcImlucHV0XCIsXCJvdXRwdXRcIixcImh2ZWMyXCIsXCJodmVjM1wiLFwiaHZlYzRcIixcImR2ZWMyXCIsXCJkdmVjM1wiLFwiZHZlYzRcIixcImZ2ZWMyXCIsXCJmdmVjM1wiLFwiZnZlYzRcIixcInNhbXBsZXIyRFJlY3RcIixcInNhbXBsZXIzRFJlY3RcIixcInNhbXBsZXIyRFJlY3RTaGFkb3dcIixcInNpemVvZlwiLFwiY2FzdFwiLFwibmFtZXNwYWNlXCIsXCJ1c2luZ1wiXX0se31dLDQwMDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bXCI8PD1cIixcIj4+PVwiLFwiKytcIixcIi0tXCIsXCI8PFwiLFwiPj5cIixcIjw9XCIsXCI+PVwiLFwiPT1cIixcIiE9XCIsXCImJlwiLFwifHxcIixcIis9XCIsXCItPVwiLFwiKj1cIixcIi89XCIsXCIlPVwiLFwiJj1cIixcIl5eXCIsXCJePVwiLFwifD1cIixcIihcIixcIilcIixcIltcIixcIl1cIixcIi5cIixcIiFcIixcIn5cIixcIipcIixcIi9cIixcIiVcIixcIitcIixcIi1cIixcIjxcIixcIj5cIixcIiZcIixcIl5cIixcInxcIixcIj9cIixcIjpcIixcIj1cIixcIixcIixcIjtcIixcIntcIixcIn1cIl19LHt9XSw0MDE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi9pbmRleFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKGUpLGk9W107cmV0dXJuIGk9KGk9aS5jb25jYXQocih0KSkpLmNvbmNhdChyKG51bGwpKX19LHtcIi4vaW5kZXhcIjozOTV9XSw0MDI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7XCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PVt0XSk7Zm9yKHZhciBlPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHI9W10sbj0wO248dC5sZW5ndGgtMTtuKyspci5wdXNoKHRbbl0sZVtuXXx8XCJcIik7cmV0dXJuIHIucHVzaCh0W25dKSxyLmpvaW4oXCJcIil9fSx7fV0sNDAzOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpe1widXNlIHN0cmljdFwiO3ZhciBuLGk9dChcImlzLWJyb3dzZXJcIik7bj1cImZ1bmN0aW9uXCI9PXR5cGVvZiByLm1hdGNoTWVkaWE/IXIubWF0Y2hNZWRpYShcIihob3Zlcjogbm9uZSlcIikubWF0Y2hlczppLGUuZXhwb3J0cz1ufSkuY2FsbCh0aGlzLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7XCJpcy1icm93c2VyXCI6NDEwfV0sNDA0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImlzLWJyb3dzZXJcIik7ZS5leHBvcnRzPW4mJmZ1bmN0aW9uKCl7dmFyIHQ9ITE7dHJ5e3ZhciBlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSxcInBhc3NpdmVcIix7Z2V0OmZ1bmN0aW9uKCl7dD0hMH19KTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInRlc3RcIixudWxsLGUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidGVzdFwiLG51bGwsZSl9Y2F0Y2goZSl7dD0hMX1yZXR1cm4gdH0oKX0se1wiaXMtYnJvd3NlclwiOjQxMH1dLDQwNTpbZnVuY3Rpb24odCxlLHIpe3IucmVhZD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLG8scz04Kmktbi0xLGw9KDE8PHMpLTEsYz1sPj4xLHU9LTcsaD1yP2ktMTowLGY9cj8tMToxLHA9dFtlK2hdO2ZvcihoKz1mLGE9cCYoMTw8LXUpLTEscD4+PS11LHUrPXM7dT4wO2E9MjU2KmErdFtlK2hdLGgrPWYsdS09OCk7Zm9yKG89YSYoMTw8LXUpLTEsYT4+PS11LHUrPW47dT4wO289MjU2Km8rdFtlK2hdLGgrPWYsdS09OCk7aWYoMD09PWEpYT0xLWM7ZWxzZXtpZihhPT09bClyZXR1cm4gbz9OYU46MS8wKihwPy0xOjEpO28rPU1hdGgucG93KDIsbiksYS09Y31yZXR1cm4ocD8tMToxKSpvKk1hdGgucG93KDIsYS1uKX0sci53cml0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8scyxsLGM9OCphLWktMSx1PSgxPDxjKS0xLGg9dT4+MSxmPTIzPT09aT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAscD1uPzA6YS0xLGQ9bj8xOi0xLGc9ZTwwfHwwPT09ZSYmMS9lPDA/MTowO2ZvcihlPU1hdGguYWJzKGUpLGlzTmFOKGUpfHxlPT09MS8wPyhzPWlzTmFOKGUpPzE6MCxvPXUpOihvPU1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjIpLGUqKGw9TWF0aC5wb3coMiwtbykpPDEmJihvLS0sbCo9MiksKGUrPW8raD49MT9mL2w6ZipNYXRoLnBvdygyLDEtaCkpKmw+PTImJihvKyssbC89MiksbytoPj11PyhzPTAsbz11KTpvK2g+PTE/KHM9KGUqbC0xKSpNYXRoLnBvdygyLGkpLG8rPWgpOihzPWUqTWF0aC5wb3coMixoLTEpKk1hdGgucG93KDIsaSksbz0wKSk7aT49ODt0W3IrcF09MjU1JnMscCs9ZCxzLz0yNTYsaS09OCk7Zm9yKG89bzw8aXxzLGMrPWk7Yz4wO3RbcitwXT0yNTUmbyxwKz1kLG8vPTI1NixjLT04KTt0W3IrcC1kXXw9MTI4Kmd9fSx7fV0sNDA2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoMD09PXIpdGhyb3cgbmV3IEVycm9yKFwiTXVzdCBoYXZlIGF0IGxlYXN0IGQrMSBwb2ludHNcIik7dmFyIGk9dFswXS5sZW5ndGg7aWYocjw9aSl0aHJvdyBuZXcgRXJyb3IoXCJNdXN0IGlucHV0IGF0IGxlYXN0IGQrMSBwb2ludHNcIik7dmFyIG89dC5zbGljZSgwLGkrMSkscz1uLmFwcGx5KHZvaWQgMCxvKTtpZigwPT09cyl0aHJvdyBuZXcgRXJyb3IoXCJJbnB1dCBub3QgaW4gZ2VuZXJhbCBwb3NpdGlvblwiKTtmb3IodmFyIGw9bmV3IEFycmF5KGkrMSksdT0wO3U8PWk7Kyt1KWxbdV09dTtzPDAmJihsWzBdPTEsbFsxXT0wKTtmb3IodmFyIGg9bmV3IGEobCxuZXcgQXJyYXkoaSsxKSwhMSksZj1oLmFkamFjZW50LHA9bmV3IEFycmF5KGkrMiksdT0wO3U8PWk7Kyt1KXtmb3IodmFyIGQ9bC5zbGljZSgpLGc9MDtnPD1pOysrZylnPT09dSYmKGRbZ109LTEpO3ZhciB2PWRbMF07ZFswXT1kWzFdLGRbMV09djt2YXIgbT1uZXcgYShkLG5ldyBBcnJheShpKzEpLCEwKTtmW3VdPW0scFt1XT1tfXBbaSsxXT1oO2Zvcih2YXIgdT0wO3U8PWk7Kyt1KWZvcih2YXIgZD1mW3VdLnZlcnRpY2VzLHk9Zlt1XS5hZGphY2VudCxnPTA7Zzw9aTsrK2cpe3ZhciB4PWRbZ107aWYoeDwwKXlbZ109aDtlbHNlIGZvcih2YXIgYj0wO2I8PWk7KytiKWZbYl0udmVydGljZXMuaW5kZXhPZih4KTwwJiYoeVtnXT1mW2JdKX1mb3IodmFyIF89bmV3IGMoaSxvLHApLHc9ISFlLHU9aSsxO3U8cjsrK3UpXy5pbnNlcnQodFt1XSx3KTtyZXR1cm4gXy5ib3VuZGFyeSgpfTt2YXIgbj10KFwicm9idXN0LW9yaWVudGF0aW9uXCIpLGk9dChcInNpbXBsaWNpYWwtY29tcGxleFwiKS5jb21wYXJlQ2VsbHM7ZnVuY3Rpb24gYSh0LGUscil7dGhpcy52ZXJ0aWNlcz10LHRoaXMuYWRqYWNlbnQ9ZSx0aGlzLmJvdW5kYXJ5PXIsdGhpcy5sYXN0VmlzaXRlZD0tMX1mdW5jdGlvbiBvKHQsZSxyKXt0aGlzLnZlcnRpY2VzPXQsdGhpcy5jZWxsPWUsdGhpcy5pbmRleD1yfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gaSh0LnZlcnRpY2VzLGUudmVydGljZXMpfWEucHJvdG90eXBlLmZsaXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnZlcnRpY2VzWzBdO3RoaXMudmVydGljZXNbMF09dGhpcy52ZXJ0aWNlc1sxXSx0aGlzLnZlcnRpY2VzWzFdPXQ7dmFyIGU9dGhpcy5hZGphY2VudFswXTt0aGlzLmFkamFjZW50WzBdPXRoaXMuYWRqYWNlbnRbMV0sdGhpcy5hZGphY2VudFsxXT1lfTt2YXIgbD1bXTtmdW5jdGlvbiBjKHQsZSxyKXt0aGlzLmRpbWVuc2lvbj10LHRoaXMudmVydGljZXM9ZSx0aGlzLnNpbXBsaWNlcz1yLHRoaXMuaW50ZXJpb3I9ci5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuYm91bmRhcnl9KSx0aGlzLnR1cGxlPW5ldyBBcnJheSh0KzEpO2Zvcih2YXIgaT0wO2k8PXQ7KytpKXRoaXMudHVwbGVbaV09dGhpcy52ZXJ0aWNlc1tpXTt2YXIgYT1sW3RdO2F8fChhPWxbdF09ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtcImZ1bmN0aW9uIG9yaWVudCgpe3ZhciB0dXBsZT10aGlzLnR1cGxlO3JldHVybiB0ZXN0KFwiXSxyPTA7cjw9dDsrK3Ipcj4wJiZlLnB1c2goXCIsXCIpLGUucHVzaChcInR1cGxlW1wiLHIsXCJdXCIpO2UucHVzaChcIil9cmV0dXJuIG9yaWVudFwiKTt2YXIgaT1uZXcgRnVuY3Rpb24oXCJ0ZXN0XCIsZS5qb2luKFwiXCIpKSxhPW5bdCsxXTtyZXR1cm4gYXx8KGE9biksaShhKX0odCkpLHRoaXMub3JpZW50PWF9dmFyIHU9Yy5wcm90b3R5cGU7dS5oYW5kbGVCb3VuZGFyeURlZ2VuZXJhY3k9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRpbWVuc2lvbixuPXRoaXMudmVydGljZXMubGVuZ3RoLTEsaT10aGlzLnR1cGxlLGE9dGhpcy52ZXJ0aWNlcyxvPVt0XTtmb3IodC5sYXN0VmlzaXRlZD0tbjtvLmxlbmd0aD4wOyl7KHQ9by5wb3AoKSkudmVydGljZXM7Zm9yKHZhciBzPXQuYWRqYWNlbnQsbD0wO2w8PXI7KytsKXt2YXIgYz1zW2xdO2lmKGMuYm91bmRhcnkmJiEoYy5sYXN0VmlzaXRlZDw9LW4pKXtmb3IodmFyIHU9Yy52ZXJ0aWNlcyxoPTA7aDw9cjsrK2gpe3ZhciBmPXVbaF07aVtoXT1mPDA/ZTphW2ZdfXZhciBwPXRoaXMub3JpZW50KCk7aWYocD4wKXJldHVybiBjO2MubGFzdFZpc2l0ZWQ9LW4sMD09PXAmJm8ucHVzaChjKX19fXJldHVybiBudWxsfSx1LndhbGs9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnZlcnRpY2VzLmxlbmd0aC0xLG49dGhpcy5kaW1lbnNpb24saT10aGlzLnZlcnRpY2VzLGE9dGhpcy50dXBsZSxvPWU/dGhpcy5pbnRlcmlvci5sZW5ndGgqTWF0aC5yYW5kb20oKXwwOnRoaXMuaW50ZXJpb3IubGVuZ3RoLTEscz10aGlzLmludGVyaW9yW29dO3Q6Zm9yKDshcy5ib3VuZGFyeTspe2Zvcih2YXIgbD1zLnZlcnRpY2VzLGM9cy5hZGphY2VudCx1PTA7dTw9bjsrK3UpYVt1XT1pW2xbdV1dO3MubGFzdFZpc2l0ZWQ9cjtmb3IodT0wO3U8PW47Kyt1KXt2YXIgaD1jW3VdO2lmKCEoaC5sYXN0VmlzaXRlZD49cikpe3ZhciBmPWFbdV07YVt1XT10O3ZhciBwPXRoaXMub3JpZW50KCk7aWYoYVt1XT1mLHA8MCl7cz1oO2NvbnRpbnVlIHR9aC5ib3VuZGFyeT9oLmxhc3RWaXNpdGVkPS1yOmgubGFzdFZpc2l0ZWQ9cn19cmV0dXJufXJldHVybiBzfSx1LmFkZFBlYWtzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy52ZXJ0aWNlcy5sZW5ndGgtMSxuPXRoaXMuZGltZW5zaW9uLGk9dGhpcy52ZXJ0aWNlcyxsPXRoaXMudHVwbGUsYz10aGlzLmludGVyaW9yLHU9dGhpcy5zaW1wbGljZXMsaD1bZV07ZS5sYXN0VmlzaXRlZD1yLGUudmVydGljZXNbZS52ZXJ0aWNlcy5pbmRleE9mKC0xKV09cixlLmJvdW5kYXJ5PSExLGMucHVzaChlKTtmb3IodmFyIGY9W107aC5sZW5ndGg+MDspe3ZhciBwPShlPWgucG9wKCkpLnZlcnRpY2VzLGQ9ZS5hZGphY2VudCxnPXAuaW5kZXhPZihyKTtpZighKGc8MCkpZm9yKHZhciB2PTA7djw9bjsrK3YpaWYodiE9PWcpe3ZhciBtPWRbdl07aWYobS5ib3VuZGFyeSYmIShtLmxhc3RWaXNpdGVkPj1yKSl7dmFyIHk9bS52ZXJ0aWNlcztpZihtLmxhc3RWaXNpdGVkIT09LXIpe2Zvcih2YXIgeD0wLGI9MDtiPD1uOysrYil5W2JdPDA/KHg9YixsW2JdPXQpOmxbYl09aVt5W2JdXTtpZih0aGlzLm9yaWVudCgpPjApe3lbeF09cixtLmJvdW5kYXJ5PSExLGMucHVzaChtKSxoLnB1c2gobSksbS5sYXN0VmlzaXRlZD1yO2NvbnRpbnVlfW0ubGFzdFZpc2l0ZWQ9LXJ9dmFyIF89bS5hZGphY2VudCx3PXAuc2xpY2UoKSxrPWQuc2xpY2UoKSxBPW5ldyBhKHcsaywhMCk7dS5wdXNoKEEpO3ZhciBUPV8uaW5kZXhPZihlKTtpZighKFQ8MCkpe19bVF09QSxrW2ddPW0sd1t2XT0tMSxrW3ZdPWUsZFt2XT1BLEEuZmxpcCgpO2ZvcihiPTA7Yjw9bjsrK2Ipe3ZhciBNPXdbYl07aWYoIShNPDB8fE09PT1yKSl7Zm9yKHZhciBTPW5ldyBBcnJheShuLTEpLEU9MCxDPTA7Qzw9bjsrK0Mpe3ZhciBMPXdbQ107TDwwfHxDPT09Ynx8KFNbRSsrXT1MKX1mLnB1c2gobmV3IG8oUyxBLGIpKX19fX19fWYuc29ydChzKTtmb3Iodj0wO3YrMTxmLmxlbmd0aDt2Kz0yKXt2YXIgej1mW3ZdLE89Zlt2KzFdLEk9ei5pbmRleCxEPU8uaW5kZXg7STwwfHxEPDB8fCh6LmNlbGwuYWRqYWNlbnRbei5pbmRleF09Ty5jZWxsLE8uY2VsbC5hZGphY2VudFtPLmluZGV4XT16LmNlbGwpfX0sdS5pbnNlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnZlcnRpY2VzO3IucHVzaCh0KTt2YXIgbj10aGlzLndhbGsodCxlKTtpZihuKXtmb3IodmFyIGk9dGhpcy5kaW1lbnNpb24sYT10aGlzLnR1cGxlLG89MDtvPD1pOysrbyl7dmFyIHM9bi52ZXJ0aWNlc1tvXTthW29dPXM8MD90OnJbc119dmFyIGw9dGhpcy5vcmllbnQoYSk7bDwwfHwoMCE9PWx8fChuPXRoaXMuaGFuZGxlQm91bmRhcnlEZWdlbmVyYWN5KG4sdCkpKSYmdGhpcy5hZGRQZWFrcyh0LG4pfX0sdS5ib3VuZGFyeT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmRpbWVuc2lvbixlPVtdLHI9dGhpcy5zaW1wbGljZXMsbj1yLmxlbmd0aCxpPTA7aTxuOysraSl7dmFyIGE9cltpXTtpZihhLmJvdW5kYXJ5KXtmb3IodmFyIG89bmV3IEFycmF5KHQpLHM9YS52ZXJ0aWNlcyxsPTAsYz0wLHU9MDt1PD10OysrdSlzW3VdPj0wP29bbCsrXT1zW3VdOmM9MSZ1O2lmKGM9PT0oMSZ0KSl7dmFyIGg9b1swXTtvWzBdPW9bMV0sb1sxXT1ofWUucHVzaChvKX19cmV0dXJuIGV9fSx7XCJyb2J1c3Qtb3JpZW50YXRpb25cIjo0OTUsXCJzaW1wbGljaWFsLWNvbXBsZXhcIjo1MDV9XSw0MDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIiksaT0wLGE9MTtmdW5jdGlvbiBvKHQsZSxyLG4saSl7dGhpcy5taWQ9dCx0aGlzLmxlZnQ9ZSx0aGlzLnJpZ2h0PXIsdGhpcy5sZWZ0UG9pbnRzPW4sdGhpcy5yaWdodFBvaW50cz1pLHRoaXMuY291bnQ9KGU/ZS5jb3VudDowKSsocj9yLmNvdW50OjApK24ubGVuZ3RofWUuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighdHx8MD09PXQubGVuZ3RoKXJldHVybiBuZXcgeChudWxsKTtyZXR1cm4gbmV3IHgoeSh0KSl9O3ZhciBzPW8ucHJvdG90eXBlO2Z1bmN0aW9uIGwodCxlKXt0Lm1pZD1lLm1pZCx0LmxlZnQ9ZS5sZWZ0LHQucmlnaHQ9ZS5yaWdodCx0LmxlZnRQb2ludHM9ZS5sZWZ0UG9pbnRzLHQucmlnaHRQb2ludHM9ZS5yaWdodFBvaW50cyx0LmNvdW50PWUuY291bnR9ZnVuY3Rpb24gYyh0LGUpe3ZhciByPXkoZSk7dC5taWQ9ci5taWQsdC5sZWZ0PXIubGVmdCx0LnJpZ2h0PXIucmlnaHQsdC5sZWZ0UG9pbnRzPXIubGVmdFBvaW50cyx0LnJpZ2h0UG9pbnRzPXIucmlnaHRQb2ludHMsdC5jb3VudD1yLmNvdW50fWZ1bmN0aW9uIHUodCxlKXt2YXIgcj10LmludGVydmFscyhbXSk7ci5wdXNoKGUpLGModCxyKX1mdW5jdGlvbiBoKHQsZSl7dmFyIHI9dC5pbnRlcnZhbHMoW10pLG49ci5pbmRleE9mKGUpO3JldHVybiBuPDA/aTooci5zcGxpY2UobiwxKSxjKHQsciksYSl9ZnVuY3Rpb24gZih0LGUscil7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aCYmdFtuXVswXTw9ZTsrK24pe3ZhciBpPXIodFtuXSk7aWYoaSlyZXR1cm4gaX19ZnVuY3Rpb24gcCh0LGUscil7Zm9yKHZhciBuPXQubGVuZ3RoLTE7bj49MCYmdFtuXVsxXT49ZTstLW4pe3ZhciBpPXIodFtuXSk7aWYoaSlyZXR1cm4gaX19ZnVuY3Rpb24gZCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbj1lKHRbcl0pO2lmKG4pcmV0dXJuIG59fWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gdC1lfWZ1bmN0aW9uIHYodCxlKXt2YXIgcj10WzBdLWVbMF07cmV0dXJuIHJ8fHRbMV0tZVsxXX1mdW5jdGlvbiBtKHQsZSl7dmFyIHI9dFsxXS1lWzFdO3JldHVybiByfHx0WzBdLWVbMF19ZnVuY3Rpb24geSh0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2godFtyXVswXSx0W3JdWzFdKTtlLnNvcnQoZyk7dmFyIG49ZVtlLmxlbmd0aD4+MV0saT1bXSxhPVtdLHM9W107Zm9yKHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIGw9dFtyXTtsWzFdPG4/aS5wdXNoKGwpOm48bFswXT9hLnB1c2gobCk6cy5wdXNoKGwpfXZhciBjPXMsdT1zLnNsaWNlKCk7cmV0dXJuIGMuc29ydCh2KSx1LnNvcnQobSksbmV3IG8obix5KGkpLHkoYSksYyx1KX1mdW5jdGlvbiB4KHQpe3RoaXMucm9vdD10fXMuaW50ZXJ2YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB0LnB1c2guYXBwbHkodCx0aGlzLmxlZnRQb2ludHMpLHRoaXMubGVmdCYmdGhpcy5sZWZ0LmludGVydmFscyh0KSx0aGlzLnJpZ2h0JiZ0aGlzLnJpZ2h0LmludGVydmFscyh0KSx0fSxzLmluc2VydD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvdW50LXRoaXMubGVmdFBvaW50cy5sZW5ndGg7aWYodGhpcy5jb3VudCs9MSx0WzFdPHRoaXMubWlkKXRoaXMubGVmdD80Kih0aGlzLmxlZnQuY291bnQrMSk+MyooZSsxKT91KHRoaXMsdCk6dGhpcy5sZWZ0Lmluc2VydCh0KTp0aGlzLmxlZnQ9eShbdF0pO2Vsc2UgaWYodFswXT50aGlzLm1pZCl0aGlzLnJpZ2h0PzQqKHRoaXMucmlnaHQuY291bnQrMSk+MyooZSsxKT91KHRoaXMsdCk6dGhpcy5yaWdodC5pbnNlcnQodCk6dGhpcy5yaWdodD15KFt0XSk7ZWxzZXt2YXIgcj1uLmdlKHRoaXMubGVmdFBvaW50cyx0LHYpLGk9bi5nZSh0aGlzLnJpZ2h0UG9pbnRzLHQsbSk7dGhpcy5sZWZ0UG9pbnRzLnNwbGljZShyLDAsdCksdGhpcy5yaWdodFBvaW50cy5zcGxpY2UoaSwwLHQpfX0scy5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb3VudC10aGlzLmxlZnRQb2ludHM7aWYodFsxXTx0aGlzLm1pZClyZXR1cm4gdGhpcy5sZWZ0PzQqKHRoaXMucmlnaHQ/dGhpcy5yaWdodC5jb3VudDowKT4zKihlLTEpP2godGhpcyx0KToyPT09KGM9dGhpcy5sZWZ0LnJlbW92ZSh0KSk/KHRoaXMubGVmdD1udWxsLHRoaXMuY291bnQtPTEsYSk6KGM9PT1hJiYodGhpcy5jb3VudC09MSksYyk6aTtpZih0WzBdPnRoaXMubWlkKXJldHVybiB0aGlzLnJpZ2h0PzQqKHRoaXMubGVmdD90aGlzLmxlZnQuY291bnQ6MCk+MyooZS0xKT9oKHRoaXMsdCk6Mj09PShjPXRoaXMucmlnaHQucmVtb3ZlKHQpKT8odGhpcy5yaWdodD1udWxsLHRoaXMuY291bnQtPTEsYSk6KGM9PT1hJiYodGhpcy5jb3VudC09MSksYyk6aTtpZigxPT09dGhpcy5jb3VudClyZXR1cm4gdGhpcy5sZWZ0UG9pbnRzWzBdPT09dD8yOmk7aWYoMT09PXRoaXMubGVmdFBvaW50cy5sZW5ndGgmJnRoaXMubGVmdFBvaW50c1swXT09PXQpe2lmKHRoaXMubGVmdCYmdGhpcy5yaWdodCl7Zm9yKHZhciByPXRoaXMsbz10aGlzLmxlZnQ7by5yaWdodDspcj1vLG89by5yaWdodDtpZihyPT09dGhpcylvLnJpZ2h0PXRoaXMucmlnaHQ7ZWxzZXt2YXIgcz10aGlzLmxlZnQsYz10aGlzLnJpZ2h0O3IuY291bnQtPW8uY291bnQsci5yaWdodD1vLmxlZnQsby5sZWZ0PXMsby5yaWdodD1jfWwodGhpcyxvKSx0aGlzLmNvdW50PSh0aGlzLmxlZnQ/dGhpcy5sZWZ0LmNvdW50OjApKyh0aGlzLnJpZ2h0P3RoaXMucmlnaHQuY291bnQ6MCkrdGhpcy5sZWZ0UG9pbnRzLmxlbmd0aH1lbHNlIHRoaXMubGVmdD9sKHRoaXMsdGhpcy5sZWZ0KTpsKHRoaXMsdGhpcy5yaWdodCk7cmV0dXJuIGF9Zm9yKHM9bi5nZSh0aGlzLmxlZnRQb2ludHMsdCx2KTtzPHRoaXMubGVmdFBvaW50cy5sZW5ndGgmJnRoaXMubGVmdFBvaW50c1tzXVswXT09PXRbMF07KytzKWlmKHRoaXMubGVmdFBvaW50c1tzXT09PXQpe3RoaXMuY291bnQtPTEsdGhpcy5sZWZ0UG9pbnRzLnNwbGljZShzLDEpO2ZvcihjPW4uZ2UodGhpcy5yaWdodFBvaW50cyx0LG0pO2M8dGhpcy5yaWdodFBvaW50cy5sZW5ndGgmJnRoaXMucmlnaHRQb2ludHNbY11bMV09PT10WzFdOysrYylpZih0aGlzLnJpZ2h0UG9pbnRzW2NdPT09dClyZXR1cm4gdGhpcy5yaWdodFBvaW50cy5zcGxpY2UoYywxKSxhfXJldHVybiBpfSxzLnF1ZXJ5UG9pbnQ9ZnVuY3Rpb24odCxlKXtpZih0PHRoaXMubWlkKXtpZih0aGlzLmxlZnQpaWYocj10aGlzLmxlZnQucXVlcnlQb2ludCh0LGUpKXJldHVybiByO3JldHVybiBmKHRoaXMubGVmdFBvaW50cyx0LGUpfWlmKHQ+dGhpcy5taWQpe3ZhciByO2lmKHRoaXMucmlnaHQpaWYocj10aGlzLnJpZ2h0LnF1ZXJ5UG9pbnQodCxlKSlyZXR1cm4gcjtyZXR1cm4gcCh0aGlzLnJpZ2h0UG9pbnRzLHQsZSl9cmV0dXJuIGQodGhpcy5sZWZ0UG9pbnRzLGUpfSxzLnF1ZXJ5SW50ZXJ2YWw9ZnVuY3Rpb24odCxlLHIpe3ZhciBuO2lmKHQ8dGhpcy5taWQmJnRoaXMubGVmdCYmKG49dGhpcy5sZWZ0LnF1ZXJ5SW50ZXJ2YWwodCxlLHIpKSlyZXR1cm4gbjtpZihlPnRoaXMubWlkJiZ0aGlzLnJpZ2h0JiYobj10aGlzLnJpZ2h0LnF1ZXJ5SW50ZXJ2YWwodCxlLHIpKSlyZXR1cm4gbjtyZXR1cm4gZTx0aGlzLm1pZD9mKHRoaXMubGVmdFBvaW50cyxlLHIpOnQ+dGhpcy5taWQ/cCh0aGlzLnJpZ2h0UG9pbnRzLHQscik6ZCh0aGlzLmxlZnRQb2ludHMscil9O3ZhciBiPXgucHJvdG90eXBlO2IuaW5zZXJ0PWZ1bmN0aW9uKHQpe3RoaXMucm9vdD90aGlzLnJvb3QuaW5zZXJ0KHQpOnRoaXMucm9vdD1uZXcgbyh0WzBdLG51bGwsbnVsbCxbdF0sW3RdKX0sYi5yZW1vdmU9ZnVuY3Rpb24odCl7aWYodGhpcy5yb290KXt2YXIgZT10aGlzLnJvb3QucmVtb3ZlKHQpO3JldHVybiAyPT09ZSYmKHRoaXMucm9vdD1udWxsKSxlIT09aX1yZXR1cm4hMX0sYi5xdWVyeVBvaW50PWZ1bmN0aW9uKHQsZSl7aWYodGhpcy5yb290KXJldHVybiB0aGlzLnJvb3QucXVlcnlQb2ludCh0LGUpfSxiLnF1ZXJ5SW50ZXJ2YWw9ZnVuY3Rpb24odCxlLHIpe2lmKHQ8PWUmJnRoaXMucm9vdClyZXR1cm4gdGhpcy5yb290LnF1ZXJ5SW50ZXJ2YWwodCxlLHIpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYixcImNvdW50XCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3Q/dGhpcy5yb290LmNvdW50OjB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIsXCJpbnRlcnZhbHNcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdD90aGlzLnJvb3QuaW50ZXJ2YWxzKFtdKTpbXX19KX0se1wiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIjo4Mn1dLDQwODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2U9ZXx8bmV3IEFycmF5KHQubGVuZ3RoKTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcillW3Rbcl1dPXI7cmV0dXJuIGV9fSx7fV0sNDA5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3IpZVtyXT1yO3JldHVybiBlfX0se31dLDQxMDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz0hMH0se31dLDQxMTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7cmV0dXJuISF0LmNvbnN0cnVjdG9yJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZ0LmNvbnN0cnVjdG9yLmlzQnVmZmVyKHQpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dCYmKG4odCl8fGZ1bmN0aW9uKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQucmVhZEZsb2F0TEUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQuc2xpY2UmJm4odC5zbGljZSgwLDApKX0odCl8fCEhdC5faXNCdWZmZXIpfX0se31dLDQxMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1cInVuZGVmaW5lZFwiIT10eXBlb2YgbmF2aWdhdG9yJiYoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl8fC9UcmlkZW50XFwvLy50ZXN0KG5hdmlnYXRvci5hcHBWZXJzaW9uKSl9LHt9XSw0MTM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9YSxlLmV4cG9ydHMuaXNNb2JpbGU9YTt2YXIgbj0vKGFuZHJvaWR8YmJcXGQrfG1lZWdvKS4rbW9iaWxlfGF2YW50Z298YmFkYVxcL3xibGFja2JlcnJ5fGJsYXplcnxjb21wYWx8ZWxhaW5lfGZlbm5lY3xoaXB0b3B8aWVtb2JpbGV8aXAoaG9uZXxvZCl8aXJpc3xraW5kbGV8bGdlIHxtYWVtb3xtaWRwfG1tcHxtb2JpbGUuK2ZpcmVmb3h8bmV0ZnJvbnR8b3BlcmEgbShvYnxpbilpfHBhbG0oIG9zKT98cGhvbmV8cChpeGl8cmUpXFwvfHBsdWNrZXJ8cG9ja2V0fHBzcHxzZXJpZXMoNHw2KTB8c3ltYmlhbnx0cmVvfHVwXFwuKGJyb3dzZXJ8bGluayl8dm9kYWZvbmV8d2FwfHdpbmRvd3MgKGNlfHBob25lKXx4ZGF8eGlpbm8vaSxpPS8oYW5kcm9pZHxiYlxcZCt8bWVlZ28pLittb2JpbGV8YXZhbnRnb3xiYWRhXFwvfGJsYWNrYmVycnl8YmxhemVyfGNvbXBhbHxlbGFpbmV8ZmVubmVjfGhpcHRvcHxpZW1vYmlsZXxpcChob25lfG9kKXxpcmlzfGtpbmRsZXxsZ2UgfG1hZW1vfG1pZHB8bW1wfG1vYmlsZS4rZmlyZWZveHxuZXRmcm9udHxvcGVyYSBtKG9ifGluKWl8cGFsbSggb3MpP3xwaG9uZXxwKGl4aXxyZSlcXC98cGx1Y2tlcnxwb2NrZXR8cHNwfHNlcmllcyg0fDYpMHxzeW1iaWFufHRyZW98dXBcXC4oYnJvd3NlcnxsaW5rKXx2b2RhZm9uZXx3YXB8d2luZG93cyAoY2V8cGhvbmUpfHhkYXx4aWlub3xhbmRyb2lkfGlwYWR8cGxheWJvb2t8c2lsay9pO2Z1bmN0aW9uIGEodCl7dHx8KHQ9e30pO3ZhciBlPXQudWE7cmV0dXJuIGV8fFwidW5kZWZpbmVkXCI9PXR5cGVvZiBuYXZpZ2F0b3J8fChlPW5hdmlnYXRvci51c2VyQWdlbnQpLGUmJmUuaGVhZGVycyYmXCJzdHJpbmdcIj09dHlwZW9mIGUuaGVhZGVyc1tcInVzZXItYWdlbnRcIl0mJihlPWUuaGVhZGVyc1tcInVzZXItYWdlbnRcIl0pLFwic3RyaW5nXCI9PXR5cGVvZiBlJiYodC50YWJsZXQ/aS50ZXN0KGUpOm4udGVzdChlKSl9fSx7fV0sNDE0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiBudWxsIT09dCYmKFwib2JqZWN0XCI9PT1lfHxcImZ1bmN0aW9uXCI9PT1lKX19LHt9XSw0MTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm5cIltvYmplY3QgT2JqZWN0XVwiPT09bi5jYWxsKHQpJiYobnVsbD09PShlPU9iamVjdC5nZXRQcm90b3R5cGVPZih0KSl8fGU9PT1PYmplY3QuZ2V0UHJvdG90eXBlT2Yoe30pKX19LHt9XSw0MTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9dC5sZW5ndGgsbj0wO248cjtuKyspaWYoKChlPXQuY2hhckNvZGVBdChuKSk8OXx8ZT4xMykmJjMyIT09ZSYmMTMzIT09ZSYmMTYwIT09ZSYmNTc2MCE9PWUmJjYxNTghPT1lJiYoZTw4MTkyfHxlPjgyMDUpJiY4MjMyIT09ZSYmODIzMyE9PWUmJjgyMzkhPT1lJiY4Mjg3IT09ZSYmODI4OCE9PWUmJjEyMjg4IT09ZSYmNjUyNzkhPT1lKXJldHVybiExO3JldHVybiEwfX0se31dLDQxNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9dC50cmltKCksISEoL15bbXpsaHZjc3F0YV1cXHMqWy0rLjAtOV1bXm1saHZ6Y3NxdGFdKy9pLnRlc3QodCkmJi9bXFxkel0kL2kudGVzdCh0KSYmdC5sZW5ndGg+NCkpfX0se31dLDQxODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQqKDEtcikrZSpyfX0se31dLDQxOTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXshZnVuY3Rpb24odCxuKXtcIm9iamVjdFwiPT10eXBlb2YgciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGU/ZS5leHBvcnRzPW4oKTp0Lm1hcGJveGdsPW4oKX0odGhpcyxmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBlLHIsbjtmdW5jdGlvbiBpKHQsaSl7aWYoZSlpZihyKXt2YXIgYT1cInZhciBzaGFyZWRDaHVuayA9IHt9OyAoXCIrZStcIikoc2hhcmVkQ2h1bmspOyAoXCIrcitcIikoc2hhcmVkQ2h1bmspO1wiLG89e307ZShvKSwobj1pKG8pKS53b3JrZXJVcmw9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW2FdLHt0eXBlOlwidGV4dC9qYXZhc2NyaXB0XCJ9KSl9ZWxzZSByPWk7ZWxzZSBlPWl9cmV0dXJuIGkoMCxmdW5jdGlvbihlKXt2YXIgcj1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2YgdD90OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6e307ZnVuY3Rpb24gbih0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxcImRlZmF1bHRcIik/dC5kZWZhdWx0OnR9ZnVuY3Rpb24gaSh0LGUpe3JldHVybiB0KGU9e2V4cG9ydHM6e319LGUuZXhwb3J0cyksZS5leHBvcnRzfXZhciBhPW87ZnVuY3Rpb24gbyh0LGUscixuKXt0aGlzLmN4PTMqdCx0aGlzLmJ4PTMqKHItdCktdGhpcy5jeCx0aGlzLmF4PTEtdGhpcy5jeC10aGlzLmJ4LHRoaXMuY3k9MyplLHRoaXMuYnk9Myoobi1lKS10aGlzLmN5LHRoaXMuYXk9MS10aGlzLmN5LXRoaXMuYnksdGhpcy5wMXg9dCx0aGlzLnAxeT1uLHRoaXMucDJ4PXIsdGhpcy5wMnk9bn1vLnByb3RvdHlwZS5zYW1wbGVDdXJ2ZVg9ZnVuY3Rpb24odCl7cmV0dXJuKCh0aGlzLmF4KnQrdGhpcy5ieCkqdCt0aGlzLmN4KSp0fSxvLnByb3RvdHlwZS5zYW1wbGVDdXJ2ZVk9ZnVuY3Rpb24odCl7cmV0dXJuKCh0aGlzLmF5KnQrdGhpcy5ieSkqdCt0aGlzLmN5KSp0fSxvLnByb3RvdHlwZS5zYW1wbGVDdXJ2ZURlcml2YXRpdmVYPWZ1bmN0aW9uKHQpe3JldHVybigzKnRoaXMuYXgqdCsyKnRoaXMuYngpKnQrdGhpcy5jeH0sby5wcm90b3R5cGUuc29sdmVDdXJ2ZVg9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvO2Zvcih2b2lkIDA9PT1lJiYoZT0xZS02KSxpPXQsbz0wO288ODtvKyspe2lmKGE9dGhpcy5zYW1wbGVDdXJ2ZVgoaSktdCxNYXRoLmFicyhhKTxlKXJldHVybiBpO3ZhciBzPXRoaXMuc2FtcGxlQ3VydmVEZXJpdmF0aXZlWChpKTtpZihNYXRoLmFicyhzKTwxZS02KWJyZWFrO2ktPWEvc31pZigoaT10KTwocj0wKSlyZXR1cm4gcjtpZihpPihuPTEpKXJldHVybiBuO2Zvcig7cjxuOyl7aWYoYT10aGlzLnNhbXBsZUN1cnZlWChpKSxNYXRoLmFicyhhLXQpPGUpcmV0dXJuIGk7dD5hP3I9aTpuPWksaT0uNSoobi1yKStyfXJldHVybiBpfSxvLnByb3RvdHlwZS5zb2x2ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnNhbXBsZUN1cnZlWSh0aGlzLnNvbHZlQ3VydmVYKHQsZSkpfTt2YXIgcz1mdW5jdGlvbih0LGUscil7dGhpcy5jb2x1bW49dCx0aGlzLnJvdz1lLHRoaXMuem9vbT1yfTtzLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgcyh0aGlzLmNvbHVtbix0aGlzLnJvdyx0aGlzLnpvb20pfSxzLnByb3RvdHlwZS56b29tVG89ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fem9vbVRvKHQpfSxzLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fc3ViKHQpfSxzLnByb3RvdHlwZS5fem9vbVRvPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgucG93KDIsdC10aGlzLnpvb20pO3JldHVybiB0aGlzLmNvbHVtbio9ZSx0aGlzLnJvdyo9ZSx0aGlzLnpvb209dCx0aGlzfSxzLnByb3RvdHlwZS5fc3ViPWZ1bmN0aW9uKHQpe3JldHVybiB0PXQuem9vbVRvKHRoaXMuem9vbSksdGhpcy5jb2x1bW4tPXQuY29sdW1uLHRoaXMucm93LT10LnJvdyx0aGlzfTt2YXIgbD1jO2Z1bmN0aW9uIGModCxlKXt0aGlzLng9dCx0aGlzLnk9ZX1mdW5jdGlvbiB1KHQsZSxyLG4pe3ZhciBpPW5ldyBhKHQsZSxyLG4pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaS5zb2x2ZSh0KX19Yy5wcm90b3R5cGU9e2Nsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjKHRoaXMueCx0aGlzLnkpfSxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fYWRkKHQpfSxzdWI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fc3ViKHQpfSxtdWx0QnlQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0QnlQb2ludCh0KX0sZGl2QnlQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9kaXZCeVBvaW50KHQpfSxtdWx0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX211bHQodCl9LGRpdjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9kaXYodCl9LHJvdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3RhdGUodCl9LHJvdGF0ZUFyb3VuZDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNsb25lKCkuX3JvdGF0ZUFyb3VuZCh0LGUpfSxtYXRNdWx0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX21hdE11bHQodCl9LHVuaXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl91bml0KCl9LHBlcnA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9wZXJwKCl9LHJvdW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fcm91bmQoKX0sbWFnOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkpfSxlcXVhbHM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueD09PXQueCYmdGhpcy55PT09dC55fSxkaXN0OmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0U3FyKHQpKX0sZGlzdFNxcjpmdW5jdGlvbih0KXt2YXIgZT10LngtdGhpcy54LHI9dC55LXRoaXMueTtyZXR1cm4gZSplK3Iqcn0sYW5nbGU6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5hdGFuMih0aGlzLnksdGhpcy54KX0sYW5nbGVUbzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5hdGFuMih0aGlzLnktdC55LHRoaXMueC10LngpfSxhbmdsZVdpdGg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYW5nbGVXaXRoU2VwKHQueCx0LnkpfSxhbmdsZVdpdGhTZXA6ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hdGFuMih0aGlzLngqZS10aGlzLnkqdCx0aGlzLngqdCt0aGlzLnkqZSl9LF9tYXRNdWx0OmZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0qdGhpcy54K3RbMV0qdGhpcy55LHI9dFsyXSp0aGlzLngrdFszXSp0aGlzLnk7cmV0dXJuIHRoaXMueD1lLHRoaXMueT1yLHRoaXN9LF9hZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXN9LF9zdWI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXN9LF9tdWx0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXN9LF9kaXY6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueC89dCx0aGlzLnkvPXQsdGhpc30sX211bHRCeVBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzfSxfZGl2QnlQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Lz10LngsdGhpcy55Lz10LnksdGhpc30sX3VuaXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGl2KHRoaXMubWFnKCkpLHRoaXN9LF9wZXJwOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy55O3JldHVybiB0aGlzLnk9dGhpcy54LHRoaXMueD0tdCx0aGlzfSxfcm90YXRlOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguY29zKHQpLHI9TWF0aC5zaW4odCksbj1lKnRoaXMueC1yKnRoaXMueSxpPXIqdGhpcy54K2UqdGhpcy55O3JldHVybiB0aGlzLng9bix0aGlzLnk9aSx0aGlzfSxfcm90YXRlQXJvdW5kOmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5jb3ModCksbj1NYXRoLnNpbih0KSxpPWUueCtyKih0aGlzLngtZS54KS1uKih0aGlzLnktZS55KSxhPWUueStuKih0aGlzLngtZS54KStyKih0aGlzLnktZS55KTtyZXR1cm4gdGhpcy54PWksdGhpcy55PWEsdGhpc30sX3JvdW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzfX0sYy5jb252ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgYz90OkFycmF5LmlzQXJyYXkodCk/bmV3IGModFswXSx0WzFdKTp0fTt2YXIgaD11KC4yNSwuMSwuMjUsMSk7ZnVuY3Rpb24gZih0LGUscil7cmV0dXJuIE1hdGgubWluKHIsTWF0aC5tYXgoZSx0KSl9ZnVuY3Rpb24gcCh0KXtmb3IodmFyIGU9W10scj1hcmd1bWVudHMubGVuZ3RoLTE7ci0tID4wOyllW3JdPWFyZ3VtZW50c1tyKzFdO2Zvcih2YXIgbj0wLGk9ZTtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07Zm9yKHZhciBvIGluIGEpdFtvXT1hW29dfXJldHVybiB0fXZhciBkPTE7ZnVuY3Rpb24gZyh0LGUpe3QuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdJiYoZVt0XT1lW3RdLmJpbmQoZSkpfSl9ZnVuY3Rpb24gdih0LGUpe3JldHVybi0xIT09dC5pbmRleE9mKGUsdC5sZW5ndGgtZS5sZW5ndGgpfWZ1bmN0aW9uIG0odCxlLHIpe3ZhciBuPXt9O2Zvcih2YXIgaSBpbiB0KW5baV09ZS5jYWxsKHJ8fHRoaXMsdFtpXSxpLHQpO3JldHVybiBufWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBuPXt9O2Zvcih2YXIgaSBpbiB0KWUuY2FsbChyfHx0aGlzLHRbaV0saSx0KSYmKG5baV09dFtpXSk7cmV0dXJuIG59ZnVuY3Rpb24geCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90Lm1hcCh4KTpcIm9iamVjdFwiPT10eXBlb2YgdCYmdD9tKHQseCk6dH12YXIgYj17fTtmdW5jdGlvbiBfKHQpe2JbdF18fChcInVuZGVmaW5lZFwiIT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuKHQpLGJbdF09ITApfWZ1bmN0aW9uIHcodCxlLHIpe3JldHVybihyLnktdC55KSooZS54LXQueCk+KGUueS10LnkpKihyLngtdC54KX1mdW5jdGlvbiBrKHQpe2Zvcih2YXIgZT0wLHI9MCxuPXQubGVuZ3RoLGk9bi0xLGE9dm9pZCAwLG89dm9pZCAwO3I8bjtpPXIrKylhPXRbcl0sZSs9KChvPXRbaV0pLngtYS54KSooYS55K28ueSk7cmV0dXJuIGV9dmFyIEE9e1Vua25vd246XCJVbmtub3duXCIsU3R5bGU6XCJTdHlsZVwiLFNvdXJjZTpcIlNvdXJjZVwiLFRpbGU6XCJUaWxlXCIsR2x5cGhzOlwiR2x5cGhzXCIsU3ByaXRlSW1hZ2U6XCJTcHJpdGVJbWFnZVwiLFNwcml0ZUpTT046XCJTcHJpdGVKU09OXCIsSW1hZ2U6XCJJbWFnZVwifTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZnJlZXplJiZPYmplY3QuZnJlZXplKEEpO3ZhciBUPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyLG4pe3QuY2FsbCh0aGlzLGUpLHRoaXMuc3RhdHVzPXIsdGhpcy51cmw9bix0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLHRoaXMubWVzc2FnZT1lfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWUrXCI6IFwiK3RoaXMubWVzc2FnZStcIiAoXCIrdGhpcy5zdGF0dXMrXCIpOiBcIit0aGlzLnVybH0sZX0oRXJyb3IpO2Z1bmN0aW9uIE0odCl7dmFyIGU9bmV3IHNlbGYuWE1MSHR0cFJlcXVlc3Q7Zm9yKHZhciByIGluIGUub3BlbihcIkdFVFwiLHQudXJsLCEwKSx0LmhlYWRlcnMpZS5zZXRSZXF1ZXN0SGVhZGVyKHIsdC5oZWFkZXJzW3JdKTtyZXR1cm4gZS53aXRoQ3JlZGVudGlhbHM9XCJpbmNsdWRlXCI9PT10LmNyZWRlbnRpYWxzLGV9dmFyIFM9ZnVuY3Rpb24odCxlKXt2YXIgcj1NKHQpO3JldHVybiByLnJlc3BvbnNlVHlwZT1cImFycmF5YnVmZmVyXCIsci5vbmVycm9yPWZ1bmN0aW9uKCl7ZShuZXcgRXJyb3Ioci5zdGF0dXNUZXh0KSl9LHIub25sb2FkPWZ1bmN0aW9uKCl7dmFyIG49ci5yZXNwb25zZTtpZigwPT09bi5ieXRlTGVuZ3RoJiYyMDA9PT1yLnN0YXR1cylyZXR1cm4gZShuZXcgRXJyb3IoXCJodHRwIHN0YXR1cyAyMDAgcmV0dXJuZWQgd2l0aG91dCBjb250ZW50LlwiKSk7ci5zdGF0dXM+PTIwMCYmci5zdGF0dXM8MzAwJiZyLnJlc3BvbnNlP2UobnVsbCx7ZGF0YTpuLGNhY2hlQ29udHJvbDpyLmdldFJlc3BvbnNlSGVhZGVyKFwiQ2FjaGUtQ29udHJvbFwiKSxleHBpcmVzOnIuZ2V0UmVzcG9uc2VIZWFkZXIoXCJFeHBpcmVzXCIpfSk6ZShuZXcgVChyLnN0YXR1c1RleHQsci5zdGF0dXMsdC51cmwpKX0sci5zZW5kKCkscn07ZnVuY3Rpb24gRSh0LGUscil7clt0XT1yW3RdfHxbXSxyW3RdLnB1c2goZSl9ZnVuY3Rpb24gQyh0LGUscil7aWYociYmclt0XSl7dmFyIG49clt0XS5pbmRleE9mKGUpOy0xIT09biYmclt0XS5zcGxpY2UobiwxKX19dmFyIEw9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17fSkscCh0aGlzLGUpLHRoaXMudHlwZT10fSx6PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXt2b2lkIDA9PT1yJiYocj17fSksdC5jYWxsKHRoaXMsXCJlcnJvclwiLHAoe2Vycm9yOmV9LHIpKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZX0oTCksTz1mdW5jdGlvbigpe307Ty5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fbGlzdGVuZXJzPXRoaXMuX2xpc3RlbmVyc3x8e30sRSh0LGUsdGhpcy5fbGlzdGVuZXJzKSx0aGlzfSxPLnByb3RvdHlwZS5vZmY9ZnVuY3Rpb24odCxlKXtyZXR1cm4gQyh0LGUsdGhpcy5fbGlzdGVuZXJzKSxDKHQsZSx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzKSx0aGlzfSxPLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX29uZVRpbWVMaXN0ZW5lcnM9dGhpcy5fb25lVGltZUxpc3RlbmVyc3x8e30sRSh0LGUsdGhpcy5fb25lVGltZUxpc3RlbmVycyksdGhpc30sTy5wcm90b3R5cGUuZmlyZT1mdW5jdGlvbih0KXtcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9bmV3IEwodCxhcmd1bWVudHNbMV18fHt9KSk7dmFyIGU9dC50eXBlO2lmKHRoaXMubGlzdGVucyhlKSl7dC50YXJnZXQ9dGhpcztmb3IodmFyIHI9MCxuPXRoaXMuX2xpc3RlbmVycyYmdGhpcy5fbGlzdGVuZXJzW2VdP3RoaXMuX2xpc3RlbmVyc1tlXS5zbGljZSgpOltdO3I8bi5sZW5ndGg7cis9MSluW3JdLmNhbGwodGhpcyx0KTtmb3IodmFyIGk9MCxhPXRoaXMuX29uZVRpbWVMaXN0ZW5lcnMmJnRoaXMuX29uZVRpbWVMaXN0ZW5lcnNbZV0/dGhpcy5fb25lVGltZUxpc3RlbmVyc1tlXS5zbGljZSgpOltdO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTtDKGUsbyx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzKSxvLmNhbGwodGhpcyx0KX12YXIgcz10aGlzLl9ldmVudGVkUGFyZW50O3MmJihwKHQsXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5fZXZlbnRlZFBhcmVudERhdGE/dGhpcy5fZXZlbnRlZFBhcmVudERhdGEoKTp0aGlzLl9ldmVudGVkUGFyZW50RGF0YSkscy5maXJlKHQpKX1lbHNlIHYoZSxcImVycm9yXCIpP2NvbnNvbGUuZXJyb3IodCYmdC5lcnJvcnx8dHx8XCJFbXB0eSBlcnJvciBldmVudFwiKTp2KGUsXCJ3YXJuaW5nXCIpJiZjb25zb2xlLndhcm4odCYmdC53YXJuaW5nfHx0fHxcIkVtcHR5IHdhcm5pbmcgZXZlbnRcIik7cmV0dXJuIHRoaXN9LE8ucHJvdG90eXBlLmxpc3RlbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xpc3RlbmVycyYmdGhpcy5fbGlzdGVuZXJzW3RdJiZ0aGlzLl9saXN0ZW5lcnNbdF0ubGVuZ3RoPjB8fHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMmJnRoaXMuX29uZVRpbWVMaXN0ZW5lcnNbdF0mJnRoaXMuX29uZVRpbWVMaXN0ZW5lcnNbdF0ubGVuZ3RoPjB8fHRoaXMuX2V2ZW50ZWRQYXJlbnQmJnRoaXMuX2V2ZW50ZWRQYXJlbnQubGlzdGVucyh0KX0sTy5wcm90b3R5cGUuc2V0RXZlbnRlZFBhcmVudD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9ldmVudGVkUGFyZW50PXQsdGhpcy5fZXZlbnRlZFBhcmVudERhdGE9ZSx0aGlzfTt2YXIgST17JHZlcnNpb246OCwkcm9vdDp7dmVyc2lvbjp7cmVxdWlyZWQ6ITAsdHlwZTpcImVudW1cIix2YWx1ZXM6WzhdfSxuYW1lOnt0eXBlOlwic3RyaW5nXCJ9LG1ldGFkYXRhOnt0eXBlOlwiKlwifSxjZW50ZXI6e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwibnVtYmVyXCJ9LHpvb206e3R5cGU6XCJudW1iZXJcIn0sYmVhcmluZzp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLHVuaXRzOlwiZGVncmVlc1wifSxwaXRjaDp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MCx1bml0czpcImRlZ3JlZXNcIn0sbGlnaHQ6e3R5cGU6XCJsaWdodFwifSxzb3VyY2VzOntyZXF1aXJlZDohMCx0eXBlOlwic291cmNlc1wifSxzcHJpdGU6e3R5cGU6XCJzdHJpbmdcIn0sZ2x5cGhzOnt0eXBlOlwic3RyaW5nXCJ9LHRyYW5zaXRpb246e3R5cGU6XCJ0cmFuc2l0aW9uXCJ9LGxheWVyczp7cmVxdWlyZWQ6ITAsdHlwZTpcImFycmF5XCIsdmFsdWU6XCJsYXllclwifX0sc291cmNlczp7XCIqXCI6e3R5cGU6XCJzb3VyY2VcIn19LHNvdXJjZTpbXCJzb3VyY2VfdmVjdG9yXCIsXCJzb3VyY2VfcmFzdGVyXCIsXCJzb3VyY2VfcmFzdGVyX2RlbVwiLFwic291cmNlX2dlb2pzb25cIixcInNvdXJjZV92aWRlb1wiLFwic291cmNlX2ltYWdlXCJdLHNvdXJjZV92ZWN0b3I6e3R5cGU6e3JlcXVpcmVkOiEwLHR5cGU6XCJlbnVtXCIsdmFsdWVzOnt2ZWN0b3I6e319fSx1cmw6e3R5cGU6XCJzdHJpbmdcIn0sdGlsZXM6e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwic3RyaW5nXCJ9LGJvdW5kczp7dHlwZTpcImFycmF5XCIsdmFsdWU6XCJudW1iZXJcIixsZW5ndGg6NCxkZWZhdWx0OlstMTgwLC04NS4wNTExLDE4MCw4NS4wNTExXX0sbWluem9vbTp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MH0sbWF4em9vbTp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MjJ9LGF0dHJpYnV0aW9uOnt0eXBlOlwic3RyaW5nXCJ9LFwiKlwiOnt0eXBlOlwiKlwifX0sc291cmNlX3Jhc3Rlcjp7dHlwZTp7cmVxdWlyZWQ6ITAsdHlwZTpcImVudW1cIix2YWx1ZXM6e3Jhc3Rlcjp7fX19LHVybDp7dHlwZTpcInN0cmluZ1wifSx0aWxlczp7dHlwZTpcImFycmF5XCIsdmFsdWU6XCJzdHJpbmdcIn0sYm91bmRzOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcIm51bWJlclwiLGxlbmd0aDo0LGRlZmF1bHQ6Wy0xODAsLTg1LjA1MTEsMTgwLDg1LjA1MTFdfSxtaW56b29tOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowfSxtYXh6b29tOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoyMn0sdGlsZVNpemU6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjUxMix1bml0czpcInBpeGVsc1wifSxzY2hlbWU6e3R5cGU6XCJlbnVtXCIsdmFsdWVzOnt4eXo6e30sdG1zOnt9fSxkZWZhdWx0OlwieHl6XCJ9LGF0dHJpYnV0aW9uOnt0eXBlOlwic3RyaW5nXCJ9LFwiKlwiOnt0eXBlOlwiKlwifX0sc291cmNlX3Jhc3Rlcl9kZW06e3R5cGU6e3JlcXVpcmVkOiEwLHR5cGU6XCJlbnVtXCIsdmFsdWVzOntcInJhc3Rlci1kZW1cIjp7fX19LHVybDp7dHlwZTpcInN0cmluZ1wifSx0aWxlczp7dHlwZTpcImFycmF5XCIsdmFsdWU6XCJzdHJpbmdcIn0sYm91bmRzOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcIm51bWJlclwiLGxlbmd0aDo0LGRlZmF1bHQ6Wy0xODAsLTg1LjA1MTEsMTgwLDg1LjA1MTFdfSxtaW56b29tOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowfSxtYXh6b29tOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoyMn0sdGlsZVNpemU6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjUxMix1bml0czpcInBpeGVsc1wifSxhdHRyaWJ1dGlvbjp7dHlwZTpcInN0cmluZ1wifSxlbmNvZGluZzp7dHlwZTpcImVudW1cIix2YWx1ZXM6e3RlcnJhcml1bTp7fSxtYXBib3g6e319LGRlZmF1bHQ6XCJtYXBib3hcIn0sXCIqXCI6e3R5cGU6XCIqXCJ9fSxzb3VyY2VfZ2VvanNvbjp7dHlwZTp7cmVxdWlyZWQ6ITAsdHlwZTpcImVudW1cIix2YWx1ZXM6e2dlb2pzb246e319fSxkYXRhOnt0eXBlOlwiKlwifSxtYXh6b29tOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoxOH0sYnVmZmVyOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoxMjgsbWF4aW11bTo1MTIsbWluaW11bTowfSx0b2xlcmFuY2U6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0Oi4zNzV9LGNsdXN0ZXI6e3R5cGU6XCJib29sZWFuXCIsZGVmYXVsdDohMX0sY2x1c3RlclJhZGl1czp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6NTAsbWluaW11bTowfSxjbHVzdGVyTWF4Wm9vbTp7dHlwZTpcIm51bWJlclwifSxsaW5lTWV0cmljczp7dHlwZTpcImJvb2xlYW5cIixkZWZhdWx0OiExfX0sc291cmNlX3ZpZGVvOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOlwiZW51bVwiLHZhbHVlczp7dmlkZW86e319fSx1cmxzOntyZXF1aXJlZDohMCx0eXBlOlwiYXJyYXlcIix2YWx1ZTpcInN0cmluZ1wifSxjb29yZGluYXRlczp7cmVxdWlyZWQ6ITAsdHlwZTpcImFycmF5XCIsbGVuZ3RoOjQsdmFsdWU6e3R5cGU6XCJhcnJheVwiLGxlbmd0aDoyLHZhbHVlOlwibnVtYmVyXCJ9fX0sc291cmNlX2ltYWdlOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOlwiZW51bVwiLHZhbHVlczp7aW1hZ2U6e319fSx1cmw6e3JlcXVpcmVkOiEwLHR5cGU6XCJzdHJpbmdcIn0sY29vcmRpbmF0ZXM6e3JlcXVpcmVkOiEwLHR5cGU6XCJhcnJheVwiLGxlbmd0aDo0LHZhbHVlOnt0eXBlOlwiYXJyYXlcIixsZW5ndGg6Mix2YWx1ZTpcIm51bWJlclwifX19LGxheWVyOntpZDp7dHlwZTpcInN0cmluZ1wiLHJlcXVpcmVkOiEwfSx0eXBlOnt0eXBlOlwiZW51bVwiLHZhbHVlczp7ZmlsbDp7fSxsaW5lOnt9LHN5bWJvbDp7fSxjaXJjbGU6e30saGVhdG1hcDp7fSxcImZpbGwtZXh0cnVzaW9uXCI6e30scmFzdGVyOnt9LGhpbGxzaGFkZTp7fSxiYWNrZ3JvdW5kOnt9fSxyZXF1aXJlZDohMH0sbWV0YWRhdGE6e3R5cGU6XCIqXCJ9LHNvdXJjZTp7dHlwZTpcInN0cmluZ1wifSxcInNvdXJjZS1sYXllclwiOnt0eXBlOlwic3RyaW5nXCJ9LG1pbnpvb206e3R5cGU6XCJudW1iZXJcIixtaW5pbXVtOjAsbWF4aW11bToyNH0sbWF4em9vbTp7dHlwZTpcIm51bWJlclwiLG1pbmltdW06MCxtYXhpbXVtOjI0fSxmaWx0ZXI6e3R5cGU6XCJmaWx0ZXJcIn0sbGF5b3V0Ont0eXBlOlwibGF5b3V0XCJ9LHBhaW50Ont0eXBlOlwicGFpbnRcIn19LGxheW91dDpbXCJsYXlvdXRfZmlsbFwiLFwibGF5b3V0X2xpbmVcIixcImxheW91dF9jaXJjbGVcIixcImxheW91dF9oZWF0bWFwXCIsXCJsYXlvdXRfZmlsbC1leHRydXNpb25cIixcImxheW91dF9zeW1ib2xcIixcImxheW91dF9yYXN0ZXJcIixcImxheW91dF9oaWxsc2hhZGVcIixcImxheW91dF9iYWNrZ3JvdW5kXCJdLGxheW91dF9iYWNrZ3JvdW5kOnt2aXNpYmlsaXR5Ont0eXBlOlwiZW51bVwiLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OlwidmlzaWJsZVwifX0sbGF5b3V0X2ZpbGw6e3Zpc2liaWxpdHk6e3R5cGU6XCJlbnVtXCIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6XCJ2aXNpYmxlXCJ9fSxsYXlvdXRfY2lyY2xlOnt2aXNpYmlsaXR5Ont0eXBlOlwiZW51bVwiLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OlwidmlzaWJsZVwifX0sbGF5b3V0X2hlYXRtYXA6e3Zpc2liaWxpdHk6e3R5cGU6XCJlbnVtXCIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6XCJ2aXNpYmxlXCJ9fSxsYXlvdXRfbGluZTp7XCJsaW5lLWNhcFwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdmFsdWVzOntidXR0Ont9LHJvdW5kOnt9LHNxdWFyZTp7fX0sZGVmYXVsdDpcImJ1dHRcIn0sXCJsaW5lLWpvaW5cIjp7dHlwZTpcImVudW1cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx2YWx1ZXM6e2JldmVsOnt9LHJvdW5kOnt9LG1pdGVyOnt9fSxkZWZhdWx0OlwibWl0ZXJcIn0sXCJsaW5lLW1pdGVyLWxpbWl0XCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxyZXF1aXJlczpbe1wibGluZS1qb2luXCI6XCJtaXRlclwifV19LFwibGluZS1yb3VuZC1saW1pdFwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoxLjA1LGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAscmVxdWlyZXM6W3tcImxpbmUtam9pblwiOlwicm91bmRcIn1dfSx2aXNpYmlsaXR5Ont0eXBlOlwiZW51bVwiLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OlwidmlzaWJsZVwifX0sbGF5b3V0X3N5bWJvbDp7XCJzeW1ib2wtcGxhY2VtZW50XCI6e3R5cGU6XCJlbnVtXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCx2YWx1ZXM6e3BvaW50Ont9LGxpbmU6e319LGRlZmF1bHQ6XCJwb2ludFwifSxcInN5bWJvbC1zcGFjaW5nXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjI1MCxtaW5pbXVtOjEsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCx1bml0czpcInBpeGVsc1wiLHJlcXVpcmVzOlt7XCJzeW1ib2wtcGxhY2VtZW50XCI6XCJsaW5lXCJ9XX0sXCJzeW1ib2wtYXZvaWQtZWRnZXNcIjp7dHlwZTpcImJvb2xlYW5cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLGRlZmF1bHQ6ITF9LFwiaWNvbi1hbGxvdy1vdmVybGFwXCI6e3R5cGU6XCJib29sZWFuXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOltcImljb24taW1hZ2VcIl19LFwiaWNvbi1pZ25vcmUtcGxhY2VtZW50XCI6e3R5cGU6XCJib29sZWFuXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOltcImljb24taW1hZ2VcIl19LFwiaWNvbi1vcHRpb25hbFwiOnt0eXBlOlwiYm9vbGVhblwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsZGVmYXVsdDohMSxyZXF1aXJlczpbXCJpY29uLWltYWdlXCIsXCJ0ZXh0LWZpZWxkXCJdfSxcImljb24tcm90YXRpb24tYWxpZ25tZW50XCI6e3R5cGU6XCJlbnVtXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fSxhdXRvOnt9fSxkZWZhdWx0OlwiYXV0b1wiLHJlcXVpcmVzOltcImljb24taW1hZ2VcIl19LFwiaWNvbi1zaXplXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjEsbWluaW11bTowLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHVuaXRzOlwiZmFjdG9yIG9mIHRoZSBvcmlnaW5hbCBpY29uIHNpemVcIixyZXF1aXJlczpbXCJpY29uLWltYWdlXCJdfSxcImljb24tdGV4dC1maXRcIjp7dHlwZTpcImVudW1cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHZhbHVlczp7bm9uZTp7fSx3aWR0aDp7fSxoZWlnaHQ6e30sYm90aDp7fX0sZGVmYXVsdDpcIm5vbmVcIixyZXF1aXJlczpbXCJpY29uLWltYWdlXCIsXCJ0ZXh0LWZpZWxkXCJdfSxcImljb24tdGV4dC1maXQtcGFkZGluZ1wiOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcIm51bWJlclwiLGxlbmd0aDo0LGRlZmF1bHQ6WzAsMCwwLDBdLHVuaXRzOlwicGl4ZWxzXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxyZXF1aXJlczpbXCJpY29uLWltYWdlXCIsXCJ0ZXh0LWZpZWxkXCIse1wiaWNvbi10ZXh0LWZpdFwiOltcImJvdGhcIixcIndpZHRoXCIsXCJoZWlnaHRcIl19XX0sXCJpY29uLWltYWdlXCI6e3R5cGU6XCJzdHJpbmdcIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0b2tlbnM6ITB9LFwiaWNvbi1yb3RhdGVcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHVuaXRzOlwiZGVncmVlc1wiLHJlcXVpcmVzOltcImljb24taW1hZ2VcIl19LFwiaWNvbi1wYWRkaW5nXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjIsbWluaW11bTowLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdW5pdHM6XCJwaXhlbHNcIixyZXF1aXJlczpbXCJpY29uLWltYWdlXCJdfSxcImljb24ta2VlcC11cHJpZ2h0XCI6e3R5cGU6XCJib29sZWFuXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOltcImljb24taW1hZ2VcIix7XCJpY29uLXJvdGF0aW9uLWFsaWdubWVudFwiOlwibWFwXCJ9LHtcInN5bWJvbC1wbGFjZW1lbnRcIjpcImxpbmVcIn1dfSxcImljb24tb2Zmc2V0XCI6e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwibnVtYmVyXCIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCxyZXF1aXJlczpbXCJpY29uLWltYWdlXCJdfSxcImljb24tYW5jaG9yXCI6e3R5cGU6XCJlbnVtXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdmFsdWVzOntjZW50ZXI6e30sbGVmdDp7fSxyaWdodDp7fSx0b3A6e30sYm90dG9tOnt9LFwidG9wLWxlZnRcIjp7fSxcInRvcC1yaWdodFwiOnt9LFwiYm90dG9tLWxlZnRcIjp7fSxcImJvdHRvbS1yaWdodFwiOnt9fSxkZWZhdWx0OlwiY2VudGVyXCIscmVxdWlyZXM6W1wiaWNvbi1pbWFnZVwiXX0sXCJpY29uLXBpdGNoLWFsaWdubWVudFwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e30sYXV0bzp7fX0sZGVmYXVsdDpcImF1dG9cIixyZXF1aXJlczpbXCJpY29uLWltYWdlXCJdfSxcInRleHQtcGl0Y2gtYWxpZ25tZW50XCI6e3R5cGU6XCJlbnVtXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fSxhdXRvOnt9fSxkZWZhdWx0OlwiYXV0b1wiLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnRcIjp7dHlwZTpcImVudW1cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9LGF1dG86e319LGRlZmF1bHQ6XCJhdXRvXCIscmVxdWlyZXM6W1widGV4dC1maWVsZFwiXX0sXCJ0ZXh0LWZpZWxkXCI6e3R5cGU6XCJzdHJpbmdcIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCxkZWZhdWx0OlwiXCIsdG9rZW5zOiEwfSxcInRleHQtZm9udFwiOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcInN0cmluZ1wiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLGRlZmF1bHQ6W1wiT3BlbiBTYW5zIFJlZ3VsYXJcIixcIkFyaWFsIFVuaWNvZGUgTVMgUmVndWxhclwiXSxyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCJdfSxcInRleHQtc2l6ZVwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoxNixtaW5pbXVtOjAsdW5pdHM6XCJwaXhlbHNcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCxyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCJdfSxcInRleHQtbWF4LXdpZHRoXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjEwLG1pbmltdW06MCx1bml0czpcImVtc1wiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC1saW5lLWhlaWdodFwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoxLjIsdW5pdHM6XCJlbXNcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC1sZXR0ZXItc3BhY2luZ1wiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLHVuaXRzOlwiZW1zXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAscmVxdWlyZXM6W1widGV4dC1maWVsZFwiXX0sXCJ0ZXh0LWp1c3RpZnlcIjp7dHlwZTpcImVudW1cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx2YWx1ZXM6e2xlZnQ6e30sY2VudGVyOnt9LHJpZ2h0Ont9fSxkZWZhdWx0OlwiY2VudGVyXCIscmVxdWlyZXM6W1widGV4dC1maWVsZFwiXX0sXCJ0ZXh0LWFuY2hvclwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHZhbHVlczp7Y2VudGVyOnt9LGxlZnQ6e30scmlnaHQ6e30sdG9wOnt9LGJvdHRvbTp7fSxcInRvcC1sZWZ0XCI6e30sXCJ0b3AtcmlnaHRcIjp7fSxcImJvdHRvbS1sZWZ0XCI6e30sXCJib3R0b20tcmlnaHRcIjp7fX0sZGVmYXVsdDpcImNlbnRlclwiLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC1tYXgtYW5nbGVcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6NDUsdW5pdHM6XCJkZWdyZWVzXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCIse1wic3ltYm9sLXBsYWNlbWVudFwiOlwibGluZVwifV19LFwidGV4dC1yb3RhdGVcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLHVuaXRzOlwiZGVncmVlc1wiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC1wYWRkaW5nXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjIsbWluaW11bTowLHVuaXRzOlwicGl4ZWxzXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCJdfSxcInRleHQta2VlcC11cHJpZ2h0XCI6e3R5cGU6XCJib29sZWFuXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCxkZWZhdWx0OiEwLHJlcXVpcmVzOltcInRleHQtZmllbGRcIix7XCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudFwiOlwibWFwXCJ9LHtcInN5bWJvbC1wbGFjZW1lbnRcIjpcImxpbmVcIn1dfSxcInRleHQtdHJhbnNmb3JtXCI6e3R5cGU6XCJlbnVtXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdmFsdWVzOntub25lOnt9LHVwcGVyY2FzZTp7fSxsb3dlcmNhc2U6e319LGRlZmF1bHQ6XCJub25lXCIscmVxdWlyZXM6W1widGV4dC1maWVsZFwiXX0sXCJ0ZXh0LW9mZnNldFwiOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcIm51bWJlclwiLHVuaXRzOlwiZW1zXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCJdfSxcInRleHQtYWxsb3ctb3ZlcmxhcFwiOnt0eXBlOlwiYm9vbGVhblwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsZGVmYXVsdDohMSxyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCJdfSxcInRleHQtaWdub3JlLXBsYWNlbWVudFwiOnt0eXBlOlwiYm9vbGVhblwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsZGVmYXVsdDohMSxyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCJdfSxcInRleHQtb3B0aW9uYWxcIjp7dHlwZTpcImJvb2xlYW5cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLGRlZmF1bHQ6ITEscmVxdWlyZXM6W1widGV4dC1maWVsZFwiLFwiaWNvbi1pbWFnZVwiXX0sdmlzaWJpbGl0eTp7dHlwZTpcImVudW1cIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDpcInZpc2libGVcIn19LGxheW91dF9yYXN0ZXI6e3Zpc2liaWxpdHk6e3R5cGU6XCJlbnVtXCIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6XCJ2aXNpYmxlXCJ9fSxsYXlvdXRfaGlsbHNoYWRlOnt2aXNpYmlsaXR5Ont0eXBlOlwiZW51bVwiLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OlwidmlzaWJsZVwifX0sZmlsdGVyOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcIipcIn0sZmlsdGVyX29wZXJhdG9yOnt0eXBlOlwiZW51bVwiLHZhbHVlczp7XCI9PVwiOnt9LFwiIT1cIjp7fSxcIj5cIjp7fSxcIj49XCI6e30sXCI8XCI6e30sXCI8PVwiOnt9LGluOnt9LFwiIWluXCI6e30sYWxsOnt9LGFueTp7fSxub25lOnt9LGhhczp7fSxcIiFoYXNcIjp7fX19LGdlb21ldHJ5X3R5cGU6e3R5cGU6XCJlbnVtXCIsdmFsdWVzOntQb2ludDp7fSxMaW5lU3RyaW5nOnt9LFBvbHlnb246e319fSxmdW5jdGlvbl9zdG9wOnt0eXBlOlwiYXJyYXlcIixtaW5pbXVtOjAsbWF4aW11bToyMix2YWx1ZTpbXCJudW1iZXJcIixcImNvbG9yXCJdLGxlbmd0aDoyfSxleHByZXNzaW9uOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcIipcIixtaW5pbXVtOjF9LGV4cHJlc3Npb25fbmFtZTp7dHlwZTpcImVudW1cIix2YWx1ZXM6e2xldDp7Z3JvdXA6XCJWYXJpYWJsZSBiaW5kaW5nXCJ9LHZhcjp7Z3JvdXA6XCJWYXJpYWJsZSBiaW5kaW5nXCJ9LGxpdGVyYWw6e2dyb3VwOlwiVHlwZXNcIn0sYXJyYXk6e2dyb3VwOlwiVHlwZXNcIn0sYXQ6e2dyb3VwOlwiTG9va3VwXCJ9LGNhc2U6e2dyb3VwOlwiRGVjaXNpb25cIn0sbWF0Y2g6e2dyb3VwOlwiRGVjaXNpb25cIn0sY29hbGVzY2U6e2dyb3VwOlwiRGVjaXNpb25cIn0sc3RlcDp7Z3JvdXA6XCJSYW1wcywgc2NhbGVzLCBjdXJ2ZXNcIn0saW50ZXJwb2xhdGU6e2dyb3VwOlwiUmFtcHMsIHNjYWxlcywgY3VydmVzXCJ9LGxuMjp7Z3JvdXA6XCJNYXRoXCJ9LHBpOntncm91cDpcIk1hdGhcIn0sZTp7Z3JvdXA6XCJNYXRoXCJ9LHR5cGVvZjp7Z3JvdXA6XCJUeXBlc1wifSxzdHJpbmc6e2dyb3VwOlwiVHlwZXNcIn0sbnVtYmVyOntncm91cDpcIlR5cGVzXCJ9LGJvb2xlYW46e2dyb3VwOlwiVHlwZXNcIn0sb2JqZWN0Ontncm91cDpcIlR5cGVzXCJ9LGNvbGxhdG9yOntncm91cDpcIlR5cGVzXCJ9LFwidG8tc3RyaW5nXCI6e2dyb3VwOlwiVHlwZXNcIn0sXCJ0by1udW1iZXJcIjp7Z3JvdXA6XCJUeXBlc1wifSxcInRvLWJvb2xlYW5cIjp7Z3JvdXA6XCJUeXBlc1wifSxcInRvLXJnYmFcIjp7Z3JvdXA6XCJDb2xvclwifSxcInRvLWNvbG9yXCI6e2dyb3VwOlwiVHlwZXNcIn0scmdiOntncm91cDpcIkNvbG9yXCJ9LHJnYmE6e2dyb3VwOlwiQ29sb3JcIn0sZ2V0Ontncm91cDpcIkxvb2t1cFwifSxoYXM6e2dyb3VwOlwiTG9va3VwXCJ9LGxlbmd0aDp7Z3JvdXA6XCJMb29rdXBcIn0scHJvcGVydGllczp7Z3JvdXA6XCJGZWF0dXJlIGRhdGFcIn0sXCJnZW9tZXRyeS10eXBlXCI6e2dyb3VwOlwiRmVhdHVyZSBkYXRhXCJ9LGlkOntncm91cDpcIkZlYXR1cmUgZGF0YVwifSx6b29tOntncm91cDpcIlpvb21cIn0sXCJoZWF0bWFwLWRlbnNpdHlcIjp7Z3JvdXA6XCJIZWF0bWFwXCJ9LFwibGluZS1wcm9ncmVzc1wiOntncm91cDpcIkhlYXRtYXBcIn0sXCIrXCI6e2dyb3VwOlwiTWF0aFwifSxcIipcIjp7Z3JvdXA6XCJNYXRoXCJ9LFwiLVwiOntncm91cDpcIk1hdGhcIn0sXCIvXCI6e2dyb3VwOlwiTWF0aFwifSxcIiVcIjp7Z3JvdXA6XCJNYXRoXCJ9LFwiXlwiOntncm91cDpcIk1hdGhcIn0sc3FydDp7Z3JvdXA6XCJNYXRoXCJ9LGxvZzEwOntncm91cDpcIk1hdGhcIn0sbG46e2dyb3VwOlwiTWF0aFwifSxsb2cyOntncm91cDpcIk1hdGhcIn0sc2luOntncm91cDpcIk1hdGhcIn0sY29zOntncm91cDpcIk1hdGhcIn0sdGFuOntncm91cDpcIk1hdGhcIn0sYXNpbjp7Z3JvdXA6XCJNYXRoXCJ9LGFjb3M6e2dyb3VwOlwiTWF0aFwifSxhdGFuOntncm91cDpcIk1hdGhcIn0sbWluOntncm91cDpcIk1hdGhcIn0sbWF4Ontncm91cDpcIk1hdGhcIn0scm91bmQ6e2dyb3VwOlwiTWF0aFwifSxhYnM6e2dyb3VwOlwiTWF0aFwifSxjZWlsOntncm91cDpcIk1hdGhcIn0sZmxvb3I6e2dyb3VwOlwiTWF0aFwifSxcIj09XCI6e2dyb3VwOlwiRGVjaXNpb25cIn0sXCIhPVwiOntncm91cDpcIkRlY2lzaW9uXCJ9LFwiPlwiOntncm91cDpcIkRlY2lzaW9uXCJ9LFwiPFwiOntncm91cDpcIkRlY2lzaW9uXCJ9LFwiPj1cIjp7Z3JvdXA6XCJEZWNpc2lvblwifSxcIjw9XCI6e2dyb3VwOlwiRGVjaXNpb25cIn0sYWxsOntncm91cDpcIkRlY2lzaW9uXCJ9LGFueTp7Z3JvdXA6XCJEZWNpc2lvblwifSxcIiFcIjp7Z3JvdXA6XCJEZWNpc2lvblwifSxcImlzLXN1cHBvcnRlZC1zY3JpcHRcIjp7Z3JvdXA6XCJTdHJpbmdcIn0sdXBjYXNlOntncm91cDpcIlN0cmluZ1wifSxkb3duY2FzZTp7Z3JvdXA6XCJTdHJpbmdcIn0sY29uY2F0Ontncm91cDpcIlN0cmluZ1wifSxcInJlc29sdmVkLWxvY2FsZVwiOntncm91cDpcIlN0cmluZ1wifX19LGxpZ2h0OnthbmNob3I6e3R5cGU6XCJlbnVtXCIsZGVmYXVsdDpcInZpZXdwb3J0XCIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LHRyYW5zaXRpb246ITEsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiExLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCJ9LHBvc2l0aW9uOnt0eXBlOlwiYXJyYXlcIixkZWZhdWx0OlsxLjE1LDIxMCwzMF0sbGVuZ3RoOjMsdmFsdWU6XCJudW1iZXJcIix0cmFuc2l0aW9uOiEwLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiExfSxjb2xvcjp7dHlwZTpcImNvbG9yXCIsZGVmYXVsdDpcIiNmZmZmZmZcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMSx0cmFuc2l0aW9uOiEwfSxpbnRlbnNpdHk6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0Oi41LG1pbmltdW06MCxtYXhpbXVtOjEsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITEsdHJhbnNpdGlvbjohMH19LHBhaW50OltcInBhaW50X2ZpbGxcIixcInBhaW50X2xpbmVcIixcInBhaW50X2NpcmNsZVwiLFwicGFpbnRfaGVhdG1hcFwiLFwicGFpbnRfZmlsbC1leHRydXNpb25cIixcInBhaW50X3N5bWJvbFwiLFwicGFpbnRfcmFzdGVyXCIsXCJwYWludF9oaWxsc2hhZGVcIixcInBhaW50X2JhY2tncm91bmRcIl0scGFpbnRfZmlsbDp7XCJmaWxsLWFudGlhbGlhc1wiOnt0eXBlOlwiYm9vbGVhblwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsZGVmYXVsdDohMH0sXCJmaWxsLW9wYWNpdHlcIjp7dHlwZTpcIm51bWJlclwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITB9LFwiZmlsbC1jb2xvclwiOnt0eXBlOlwiY29sb3JcIixkZWZhdWx0OlwiIzAwMDAwMFwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3tcIiFcIjpcImZpbGwtcGF0dGVyblwifV19LFwiZmlsbC1vdXRsaW5lLWNvbG9yXCI6e3R5cGU6XCJjb2xvclwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3tcIiFcIjpcImZpbGwtcGF0dGVyblwifSx7XCJmaWxsLWFudGlhbGlhc1wiOiEwfV19LFwiZmlsbC10cmFuc2xhdGVcIjp7dHlwZTpcImFycmF5XCIsdmFsdWU6XCJudW1iZXJcIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCx1bml0czpcInBpeGVsc1wifSxcImZpbGwtdHJhbnNsYXRlLWFuY2hvclwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6XCJtYXBcIixyZXF1aXJlczpbXCJmaWxsLXRyYW5zbGF0ZVwiXX0sXCJmaWxsLXBhdHRlcm5cIjp7dHlwZTpcInN0cmluZ1wiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMH19LHBhaW50X2xpbmU6e1wibGluZS1vcGFjaXR5XCI6e3R5cGU6XCJudW1iZXJcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCxkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwfSxcImxpbmUtY29sb3JcIjp7dHlwZTpcImNvbG9yXCIsZGVmYXVsdDpcIiMwMDAwMDBcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlt7XCIhXCI6XCJsaW5lLXBhdHRlcm5cIn1dfSxcImxpbmUtdHJhbnNsYXRlXCI6e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwibnVtYmVyXCIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6XCJwaXhlbHNcIn0sXCJsaW5lLXRyYW5zbGF0ZS1hbmNob3JcIjp7dHlwZTpcImVudW1cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OlwibWFwXCIscmVxdWlyZXM6W1wibGluZS10cmFuc2xhdGVcIl19LFwibGluZS13aWR0aFwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoxLG1pbmltdW06MCxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOlwicGl4ZWxzXCJ9LFwibGluZS1nYXAtd2lkdGhcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCx1bml0czpcInBpeGVsc1wifSxcImxpbmUtb2Zmc2V0XCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjAsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCx1bml0czpcInBpeGVsc1wifSxcImxpbmUtYmx1clwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLG1pbmltdW06MCxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOlwicGl4ZWxzXCJ9LFwibGluZS1kYXNoYXJyYXlcIjp7dHlwZTpcImFycmF5XCIsdmFsdWU6XCJudW1iZXJcIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOlwibGluZSB3aWR0aHNcIixyZXF1aXJlczpbe1wiIVwiOlwibGluZS1wYXR0ZXJuXCJ9XX0sXCJsaW5lLXBhdHRlcm5cIjp7dHlwZTpcInN0cmluZ1wiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMH0sXCJsaW5lLWdyYWRpZW50XCI6e3R5cGU6XCJjb2xvclwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITEsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiExLHRyYW5zaXRpb246ITEscmVxdWlyZXM6W3tcIiFcIjpcImxpbmUtZGFzaGFycmF5XCJ9LHtcIiFcIjpcImxpbmUtcGF0dGVyblwifSx7c291cmNlOlwiZ2VvanNvblwiLGhhczp7bGluZU1ldHJpY3M6ITB9fV19fSxwYWludF9jaXJjbGU6e1wiY2lyY2xlLXJhZGl1c1wiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDo1LG1pbmltdW06MCxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOlwicGl4ZWxzXCJ9LFwiY2lyY2xlLWNvbG9yXCI6e3R5cGU6XCJjb2xvclwiLGRlZmF1bHQ6XCIjMDAwMDAwXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMH0sXCJjaXJjbGUtYmx1clwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITB9LFwiY2lyY2xlLW9wYWNpdHlcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITB9LFwiY2lyY2xlLXRyYW5zbGF0ZVwiOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcIm51bWJlclwiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOlwicGl4ZWxzXCJ9LFwiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3JcIjp7dHlwZTpcImVudW1cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OlwibWFwXCIscmVxdWlyZXM6W1wiY2lyY2xlLXRyYW5zbGF0ZVwiXX0sXCJjaXJjbGUtcGl0Y2gtc2NhbGVcIjp7dHlwZTpcImVudW1cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OlwibWFwXCJ9LFwiY2lyY2xlLXBpdGNoLWFsaWdubWVudFwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6XCJ2aWV3cG9ydFwifSxcImNpcmNsZS1zdHJva2Utd2lkdGhcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCx1bml0czpcInBpeGVsc1wifSxcImNpcmNsZS1zdHJva2UtY29sb3JcIjp7dHlwZTpcImNvbG9yXCIsZGVmYXVsdDpcIiMwMDAwMDBcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwfSxcImNpcmNsZS1zdHJva2Utb3BhY2l0eVwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMH19LHBhaW50X2hlYXRtYXA6e1wiaGVhdG1hcC1yYWRpdXNcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MzAsbWluaW11bToxLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6XCJwaXhlbHNcIn0sXCJoZWF0bWFwLXdlaWdodFwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoxLG1pbmltdW06MCxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiExfSxcImhlYXRtYXAtaW50ZW5zaXR5XCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjEsbWluaW11bTowLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiExLHRyYW5zaXRpb246ITB9LFwiaGVhdG1hcC1jb2xvclwiOnt0eXBlOlwiY29sb3JcIixkZWZhdWx0OltcImludGVycG9sYXRlXCIsW1wibGluZWFyXCJdLFtcImhlYXRtYXAtZGVuc2l0eVwiXSwwLFwicmdiYSgwLCAwLCAyNTUsIDApXCIsLjEsXCJyb3lhbGJsdWVcIiwuMyxcImN5YW5cIiwuNSxcImxpbWVcIiwuNyxcInllbGxvd1wiLDEsXCJyZWRcIl0sZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMSxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITEsdHJhbnNpdGlvbjohMX0sXCJoZWF0bWFwLW9wYWNpdHlcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiExLHRyYW5zaXRpb246ITB9fSxwYWludF9zeW1ib2w6e1wiaWNvbi1vcGFjaXR5XCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOltcImljb24taW1hZ2VcIl19LFwiaWNvbi1jb2xvclwiOnt0eXBlOlwiY29sb3JcIixkZWZhdWx0OlwiIzAwMDAwMFwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W1wiaWNvbi1pbWFnZVwiXX0sXCJpY29uLWhhbG8tY29sb3JcIjp7dHlwZTpcImNvbG9yXCIsZGVmYXVsdDpcInJnYmEoMCwgMCwgMCwgMClcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOltcImljb24taW1hZ2VcIl19LFwiaWNvbi1oYWxvLXdpZHRoXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjAsbWluaW11bTowLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6XCJwaXhlbHNcIixyZXF1aXJlczpbXCJpY29uLWltYWdlXCJdfSxcImljb24taGFsby1ibHVyXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjAsbWluaW11bTowLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6XCJwaXhlbHNcIixyZXF1aXJlczpbXCJpY29uLWltYWdlXCJdfSxcImljb24tdHJhbnNsYXRlXCI6e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwibnVtYmVyXCIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6XCJwaXhlbHNcIixyZXF1aXJlczpbXCJpY29uLWltYWdlXCJdfSxcImljb24tdHJhbnNsYXRlLWFuY2hvclwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6XCJtYXBcIixyZXF1aXJlczpbXCJpY29uLWltYWdlXCIsXCJpY29uLXRyYW5zbGF0ZVwiXX0sXCJ0ZXh0LW9wYWNpdHlcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W1widGV4dC1maWVsZFwiXX0sXCJ0ZXh0LWNvbG9yXCI6e3R5cGU6XCJjb2xvclwiLGRlZmF1bHQ6XCIjMDAwMDAwXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCJdfSxcInRleHQtaGFsby1jb2xvclwiOnt0eXBlOlwiY29sb3JcIixkZWZhdWx0OlwicmdiYSgwLCAwLCAwLCAwKVwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W1widGV4dC1maWVsZFwiXX0sXCJ0ZXh0LWhhbG8td2lkdGhcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCx1bml0czpcInBpeGVsc1wiLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC1oYWxvLWJsdXJcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCx1bml0czpcInBpeGVsc1wiLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC10cmFuc2xhdGVcIjp7dHlwZTpcImFycmF5XCIsdmFsdWU6XCJudW1iZXJcIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCx1bml0czpcInBpeGVsc1wiLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC10cmFuc2xhdGUtYW5jaG9yXCI6e3R5cGU6XCJlbnVtXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDpcIm1hcFwiLHJlcXVpcmVzOltcInRleHQtZmllbGRcIixcInRleHQtdHJhbnNsYXRlXCJdfX0scGFpbnRfcmFzdGVyOntcInJhc3Rlci1vcGFjaXR5XCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITB9LFwicmFzdGVyLWh1ZS1yb3RhdGVcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCx1bml0czpcImRlZ3JlZXNcIn0sXCJyYXN0ZXItYnJpZ2h0bmVzcy1taW5cIjp7dHlwZTpcIm51bWJlclwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsZGVmYXVsdDowLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMH0sXCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXhcIjp7dHlwZTpcIm51bWJlclwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMH0sXCJyYXN0ZXItc2F0dXJhdGlvblwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLG1pbmltdW06LTEsbWF4aW11bToxLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMH0sXCJyYXN0ZXItY29udHJhc3RcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MCxtaW5pbXVtOi0xLG1heGltdW06MSxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITB9LFwicmFzdGVyLWZhZGUtZHVyYXRpb25cIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MzAwLG1pbmltdW06MCxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITEsdW5pdHM6XCJtaWxsaXNlY29uZHNcIn19LHBhaW50X2hpbGxzaGFkZTp7XCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWRpcmVjdGlvblwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDozMzUsbWluaW11bTowLG1heGltdW06MzU5LGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMX0sXCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWFuY2hvclwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6XCJ2aWV3cG9ydFwifSxcImhpbGxzaGFkZS1leGFnZ2VyYXRpb25cIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6LjUsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITB9LFwiaGlsbHNoYWRlLXNoYWRvdy1jb2xvclwiOnt0eXBlOlwiY29sb3JcIixkZWZhdWx0OlwiIzAwMDAwMFwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMH0sXCJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yXCI6e3R5cGU6XCJjb2xvclwiLGRlZmF1bHQ6XCIjRkZGRkZGXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwfSxcImhpbGxzaGFkZS1hY2NlbnQtY29sb3JcIjp7dHlwZTpcImNvbG9yXCIsZGVmYXVsdDpcIiMwMDAwMDBcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITB9fSxwYWludF9iYWNrZ3JvdW5kOntcImJhY2tncm91bmQtY29sb3JcIjp7dHlwZTpcImNvbG9yXCIsZGVmYXVsdDpcIiMwMDAwMDBcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3tcIiFcIjpcImJhY2tncm91bmQtcGF0dGVyblwifV19LFwiYmFja2dyb3VuZC1wYXR0ZXJuXCI6e3R5cGU6XCJzdHJpbmdcIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITB9LFwiYmFja2dyb3VuZC1vcGFjaXR5XCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITB9fSx0cmFuc2l0aW9uOntkdXJhdGlvbjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MzAwLG1pbmltdW06MCx1bml0czpcIm1pbGxpc2Vjb25kc1wifSxkZWxheTp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsdW5pdHM6XCJtaWxsaXNlY29uZHNcIn19LFwibGF5b3V0X2ZpbGwtZXh0cnVzaW9uXCI6e3Zpc2liaWxpdHk6e3R5cGU6XCJlbnVtXCIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6XCJ2aXNpYmxlXCJ9fSxmdW5jdGlvbjp7ZXhwcmVzc2lvbjp7dHlwZTpcImV4cHJlc3Npb25cIn0sc3RvcHM6e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwiZnVuY3Rpb25fc3RvcFwifSxiYXNlOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoxLG1pbmltdW06MH0scHJvcGVydHk6e3R5cGU6XCJzdHJpbmdcIixkZWZhdWx0OlwiJHpvb21cIn0sdHlwZTp7dHlwZTpcImVudW1cIix2YWx1ZXM6e2lkZW50aXR5Ont9LGV4cG9uZW50aWFsOnt9LGludGVydmFsOnt9LGNhdGVnb3JpY2FsOnt9fSxkZWZhdWx0OlwiZXhwb25lbnRpYWxcIn0sY29sb3JTcGFjZTp7dHlwZTpcImVudW1cIix2YWx1ZXM6e3JnYjp7fSxsYWI6e30saGNsOnt9fSxkZWZhdWx0OlwicmdiXCJ9LGRlZmF1bHQ6e3R5cGU6XCIqXCIscmVxdWlyZWQ6ITF9fSxcInBhaW50X2ZpbGwtZXh0cnVzaW9uXCI6e1wiZmlsbC1leHRydXNpb24tb3BhY2l0eVwiOnt0eXBlOlwibnVtYmVyXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITEsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMH0sXCJmaWxsLWV4dHJ1c2lvbi1jb2xvclwiOnt0eXBlOlwiY29sb3JcIixkZWZhdWx0OlwiIzAwMDAwMFwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3tcIiFcIjpcImZpbGwtZXh0cnVzaW9uLXBhdHRlcm5cIn1dfSxcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZVwiOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcIm51bWJlclwiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOlwicGl4ZWxzXCJ9LFwiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvclwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6XCJtYXBcIixyZXF1aXJlczpbXCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGVcIl19LFwiZmlsbC1leHRydXNpb24tcGF0dGVyblwiOnt0eXBlOlwic3RyaW5nXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwfSxcImZpbGwtZXh0cnVzaW9uLWhlaWdodFwiOnt0eXBlOlwibnVtYmVyXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsZGVmYXVsdDowLG1pbmltdW06MCx1bml0czpcIm1ldGVyc1wiLHRyYW5zaXRpb246ITB9LFwiZmlsbC1leHRydXNpb24tYmFzZVwiOnt0eXBlOlwibnVtYmVyXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsZGVmYXVsdDowLG1pbmltdW06MCx1bml0czpcIm1ldGVyc1wiLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W1wiZmlsbC1leHRydXNpb24taGVpZ2h0XCJdfX19LEQ9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5tZXNzYWdlPSh0P3QrXCI6IFwiOlwiXCIpK3IsbiYmKHRoaXMuaWRlbnRpZmllcj1uKSxudWxsIT1lJiZlLl9fbGluZV9fJiYodGhpcy5saW5lPWUuX19saW5lX18pfTtmdW5jdGlvbiBQKHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZTtyZXR1cm4gcj9bbmV3IEQoZSxyLFwiY29uc3RhbnRzIGhhdmUgYmVlbiBkZXByZWNhdGVkIGFzIG9mIHY4XCIpXTpbXX1mdW5jdGlvbiBSKHQpe2Zvcih2YXIgZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGgtMTtyLS0gPjA7KWVbcl09YXJndW1lbnRzW3IrMV07Zm9yKHZhciBuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtmb3IodmFyIG8gaW4gYSl0W29dPWFbb119cmV0dXJuIHR9ZnVuY3Rpb24gRih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE51bWJlcnx8dCBpbnN0YW5jZW9mIFN0cmluZ3x8dCBpbnN0YW5jZW9mIEJvb2xlYW4/dC52YWx1ZU9mKCk6dH1mdW5jdGlvbiBCKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3QubWFwKEIpOkYodCl9dmFyIE49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLHIpLHRoaXMubWVzc2FnZT1yLHRoaXMua2V5PWV9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGV9KEVycm9yKSxqPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9W10pLHRoaXMucGFyZW50PXQsdGhpcy5iaW5kaW5ncz17fTtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdLGE9aVswXSxvPWlbMV07dGhpcy5iaW5kaW5nc1thXT1vfX07ai5wcm90b3R5cGUuY29uY2F0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaih0aGlzLHQpfSxqLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5iaW5kaW5nc1t0XSlyZXR1cm4gdGhpcy5iaW5kaW5nc1t0XTtpZih0aGlzLnBhcmVudClyZXR1cm4gdGhpcy5wYXJlbnQuZ2V0KHQpO3Rocm93IG5ldyBFcnJvcih0K1wiIG5vdCBmb3VuZCBpbiBzY29wZS5cIil9LGoucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4hIXRoaXMuYmluZGluZ3NbdF18fCEhdGhpcy5wYXJlbnQmJnRoaXMucGFyZW50Lmhhcyh0KX07dmFyIFY9e2tpbmQ6XCJudWxsXCJ9LFU9e2tpbmQ6XCJudW1iZXJcIn0scT17a2luZDpcInN0cmluZ1wifSxIPXtraW5kOlwiYm9vbGVhblwifSxHPXtraW5kOlwiY29sb3JcIn0sWT17a2luZDpcIm9iamVjdFwifSxXPXtraW5kOlwidmFsdWVcIn0sWD17a2luZDpcImNvbGxhdG9yXCJ9O2Z1bmN0aW9uIFoodCxlKXtyZXR1cm57a2luZDpcImFycmF5XCIsaXRlbVR5cGU6dCxOOmV9fWZ1bmN0aW9uICQodCl7aWYoXCJhcnJheVwiPT09dC5raW5kKXt2YXIgZT0kKHQuaXRlbVR5cGUpO3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0Lk4/XCJhcnJheTxcIitlK1wiLCBcIit0Lk4rXCI+XCI6XCJ2YWx1ZVwiPT09dC5pdGVtVHlwZS5raW5kP1wiYXJyYXlcIjpcImFycmF5PFwiK2UrXCI+XCJ9cmV0dXJuIHQua2luZH12YXIgSj1bVixVLHEsSCxHLFksWihXKV07ZnVuY3Rpb24gSyh0LGUpe2lmKFwiZXJyb3JcIj09PWUua2luZClyZXR1cm4gbnVsbDtpZihcImFycmF5XCI9PT10LmtpbmQpe2lmKFwiYXJyYXlcIj09PWUua2luZCYmIUsodC5pdGVtVHlwZSxlLml0ZW1UeXBlKSYmKFwibnVtYmVyXCIhPXR5cGVvZiB0Lk58fHQuTj09PWUuTikpcmV0dXJuIG51bGx9ZWxzZXtpZih0LmtpbmQ9PT1lLmtpbmQpcmV0dXJuIG51bGw7aWYoXCJ2YWx1ZVwiPT09dC5raW5kKWZvcih2YXIgcj0wLG49SjtyPG4ubGVuZ3RoO3IrPTEpaWYoIUsobltyXSxlKSlyZXR1cm4gbnVsbH1yZXR1cm5cIkV4cGVjdGVkIFwiKyQodCkrXCIgYnV0IGZvdW5kIFwiKyQoZSkrXCIgaW5zdGVhZC5cIn12YXIgUT1pKGZ1bmN0aW9uKHQsZSl7dmFyIHI9e3RyYW5zcGFyZW50OlswLDAsMCwwXSxhbGljZWJsdWU6WzI0MCwyNDgsMjU1LDFdLGFudGlxdWV3aGl0ZTpbMjUwLDIzNSwyMTUsMV0sYXF1YTpbMCwyNTUsMjU1LDFdLGFxdWFtYXJpbmU6WzEyNywyNTUsMjEyLDFdLGF6dXJlOlsyNDAsMjU1LDI1NSwxXSxiZWlnZTpbMjQ1LDI0NSwyMjAsMV0sYmlzcXVlOlsyNTUsMjI4LDE5NiwxXSxibGFjazpbMCwwLDAsMV0sYmxhbmNoZWRhbG1vbmQ6WzI1NSwyMzUsMjA1LDFdLGJsdWU6WzAsMCwyNTUsMV0sYmx1ZXZpb2xldDpbMTM4LDQzLDIyNiwxXSxicm93bjpbMTY1LDQyLDQyLDFdLGJ1cmx5d29vZDpbMjIyLDE4NCwxMzUsMV0sY2FkZXRibHVlOls5NSwxNTgsMTYwLDFdLGNoYXJ0cmV1c2U6WzEyNywyNTUsMCwxXSxjaG9jb2xhdGU6WzIxMCwxMDUsMzAsMV0sY29yYWw6WzI1NSwxMjcsODAsMV0sY29ybmZsb3dlcmJsdWU6WzEwMCwxNDksMjM3LDFdLGNvcm5zaWxrOlsyNTUsMjQ4LDIyMCwxXSxjcmltc29uOlsyMjAsMjAsNjAsMV0sY3lhbjpbMCwyNTUsMjU1LDFdLGRhcmtibHVlOlswLDAsMTM5LDFdLGRhcmtjeWFuOlswLDEzOSwxMzksMV0sZGFya2dvbGRlbnJvZDpbMTg0LDEzNCwxMSwxXSxkYXJrZ3JheTpbMTY5LDE2OSwxNjksMV0sZGFya2dyZWVuOlswLDEwMCwwLDFdLGRhcmtncmV5OlsxNjksMTY5LDE2OSwxXSxkYXJra2hha2k6WzE4OSwxODMsMTA3LDFdLGRhcmttYWdlbnRhOlsxMzksMCwxMzksMV0sZGFya29saXZlZ3JlZW46Wzg1LDEwNyw0NywxXSxkYXJrb3JhbmdlOlsyNTUsMTQwLDAsMV0sZGFya29yY2hpZDpbMTUzLDUwLDIwNCwxXSxkYXJrcmVkOlsxMzksMCwwLDFdLGRhcmtzYWxtb246WzIzMywxNTAsMTIyLDFdLGRhcmtzZWFncmVlbjpbMTQzLDE4OCwxNDMsMV0sZGFya3NsYXRlYmx1ZTpbNzIsNjEsMTM5LDFdLGRhcmtzbGF0ZWdyYXk6WzQ3LDc5LDc5LDFdLGRhcmtzbGF0ZWdyZXk6WzQ3LDc5LDc5LDFdLGRhcmt0dXJxdW9pc2U6WzAsMjA2LDIwOSwxXSxkYXJrdmlvbGV0OlsxNDgsMCwyMTEsMV0sZGVlcHBpbms6WzI1NSwyMCwxNDcsMV0sZGVlcHNreWJsdWU6WzAsMTkxLDI1NSwxXSxkaW1ncmF5OlsxMDUsMTA1LDEwNSwxXSxkaW1ncmV5OlsxMDUsMTA1LDEwNSwxXSxkb2RnZXJibHVlOlszMCwxNDQsMjU1LDFdLGZpcmVicmljazpbMTc4LDM0LDM0LDFdLGZsb3JhbHdoaXRlOlsyNTUsMjUwLDI0MCwxXSxmb3Jlc3RncmVlbjpbMzQsMTM5LDM0LDFdLGZ1Y2hzaWE6WzI1NSwwLDI1NSwxXSxnYWluc2Jvcm86WzIyMCwyMjAsMjIwLDFdLGdob3N0d2hpdGU6WzI0OCwyNDgsMjU1LDFdLGdvbGQ6WzI1NSwyMTUsMCwxXSxnb2xkZW5yb2Q6WzIxOCwxNjUsMzIsMV0sZ3JheTpbMTI4LDEyOCwxMjgsMV0sZ3JlZW46WzAsMTI4LDAsMV0sZ3JlZW55ZWxsb3c6WzE3MywyNTUsNDcsMV0sZ3JleTpbMTI4LDEyOCwxMjgsMV0saG9uZXlkZXc6WzI0MCwyNTUsMjQwLDFdLGhvdHBpbms6WzI1NSwxMDUsMTgwLDFdLGluZGlhbnJlZDpbMjA1LDkyLDkyLDFdLGluZGlnbzpbNzUsMCwxMzAsMV0saXZvcnk6WzI1NSwyNTUsMjQwLDFdLGtoYWtpOlsyNDAsMjMwLDE0MCwxXSxsYXZlbmRlcjpbMjMwLDIzMCwyNTAsMV0sbGF2ZW5kZXJibHVzaDpbMjU1LDI0MCwyNDUsMV0sbGF3bmdyZWVuOlsxMjQsMjUyLDAsMV0sbGVtb25jaGlmZm9uOlsyNTUsMjUwLDIwNSwxXSxsaWdodGJsdWU6WzE3MywyMTYsMjMwLDFdLGxpZ2h0Y29yYWw6WzI0MCwxMjgsMTI4LDFdLGxpZ2h0Y3lhbjpbMjI0LDI1NSwyNTUsMV0sbGlnaHRnb2xkZW5yb2R5ZWxsb3c6WzI1MCwyNTAsMjEwLDFdLGxpZ2h0Z3JheTpbMjExLDIxMSwyMTEsMV0sbGlnaHRncmVlbjpbMTQ0LDIzOCwxNDQsMV0sbGlnaHRncmV5OlsyMTEsMjExLDIxMSwxXSxsaWdodHBpbms6WzI1NSwxODIsMTkzLDFdLGxpZ2h0c2FsbW9uOlsyNTUsMTYwLDEyMiwxXSxsaWdodHNlYWdyZWVuOlszMiwxNzgsMTcwLDFdLGxpZ2h0c2t5Ymx1ZTpbMTM1LDIwNiwyNTAsMV0sbGlnaHRzbGF0ZWdyYXk6WzExOSwxMzYsMTUzLDFdLGxpZ2h0c2xhdGVncmV5OlsxMTksMTM2LDE1MywxXSxsaWdodHN0ZWVsYmx1ZTpbMTc2LDE5NiwyMjIsMV0sbGlnaHR5ZWxsb3c6WzI1NSwyNTUsMjI0LDFdLGxpbWU6WzAsMjU1LDAsMV0sbGltZWdyZWVuOls1MCwyMDUsNTAsMV0sbGluZW46WzI1MCwyNDAsMjMwLDFdLG1hZ2VudGE6WzI1NSwwLDI1NSwxXSxtYXJvb246WzEyOCwwLDAsMV0sbWVkaXVtYXF1YW1hcmluZTpbMTAyLDIwNSwxNzAsMV0sbWVkaXVtYmx1ZTpbMCwwLDIwNSwxXSxtZWRpdW1vcmNoaWQ6WzE4Niw4NSwyMTEsMV0sbWVkaXVtcHVycGxlOlsxNDcsMTEyLDIxOSwxXSxtZWRpdW1zZWFncmVlbjpbNjAsMTc5LDExMywxXSxtZWRpdW1zbGF0ZWJsdWU6WzEyMywxMDQsMjM4LDFdLG1lZGl1bXNwcmluZ2dyZWVuOlswLDI1MCwxNTQsMV0sbWVkaXVtdHVycXVvaXNlOls3MiwyMDksMjA0LDFdLG1lZGl1bXZpb2xldHJlZDpbMTk5LDIxLDEzMywxXSxtaWRuaWdodGJsdWU6WzI1LDI1LDExMiwxXSxtaW50Y3JlYW06WzI0NSwyNTUsMjUwLDFdLG1pc3R5cm9zZTpbMjU1LDIyOCwyMjUsMV0sbW9jY2FzaW46WzI1NSwyMjgsMTgxLDFdLG5hdmFqb3doaXRlOlsyNTUsMjIyLDE3MywxXSxuYXZ5OlswLDAsMTI4LDFdLG9sZGxhY2U6WzI1MywyNDUsMjMwLDFdLG9saXZlOlsxMjgsMTI4LDAsMV0sb2xpdmVkcmFiOlsxMDcsMTQyLDM1LDFdLG9yYW5nZTpbMjU1LDE2NSwwLDFdLG9yYW5nZXJlZDpbMjU1LDY5LDAsMV0sb3JjaGlkOlsyMTgsMTEyLDIxNCwxXSxwYWxlZ29sZGVucm9kOlsyMzgsMjMyLDE3MCwxXSxwYWxlZ3JlZW46WzE1MiwyNTEsMTUyLDFdLHBhbGV0dXJxdW9pc2U6WzE3NSwyMzgsMjM4LDFdLHBhbGV2aW9sZXRyZWQ6WzIxOSwxMTIsMTQ3LDFdLHBhcGF5YXdoaXA6WzI1NSwyMzksMjEzLDFdLHBlYWNocHVmZjpbMjU1LDIxOCwxODUsMV0scGVydTpbMjA1LDEzMyw2MywxXSxwaW5rOlsyNTUsMTkyLDIwMywxXSxwbHVtOlsyMjEsMTYwLDIyMSwxXSxwb3dkZXJibHVlOlsxNzYsMjI0LDIzMCwxXSxwdXJwbGU6WzEyOCwwLDEyOCwxXSxyZWJlY2NhcHVycGxlOlsxMDIsNTEsMTUzLDFdLHJlZDpbMjU1LDAsMCwxXSxyb3N5YnJvd246WzE4OCwxNDMsMTQzLDFdLHJveWFsYmx1ZTpbNjUsMTA1LDIyNSwxXSxzYWRkbGVicm93bjpbMTM5LDY5LDE5LDFdLHNhbG1vbjpbMjUwLDEyOCwxMTQsMV0sc2FuZHlicm93bjpbMjQ0LDE2NCw5NiwxXSxzZWFncmVlbjpbNDYsMTM5LDg3LDFdLHNlYXNoZWxsOlsyNTUsMjQ1LDIzOCwxXSxzaWVubmE6WzE2MCw4Miw0NSwxXSxzaWx2ZXI6WzE5MiwxOTIsMTkyLDFdLHNreWJsdWU6WzEzNSwyMDYsMjM1LDFdLHNsYXRlYmx1ZTpbMTA2LDkwLDIwNSwxXSxzbGF0ZWdyYXk6WzExMiwxMjgsMTQ0LDFdLHNsYXRlZ3JleTpbMTEyLDEyOCwxNDQsMV0sc25vdzpbMjU1LDI1MCwyNTAsMV0sc3ByaW5nZ3JlZW46WzAsMjU1LDEyNywxXSxzdGVlbGJsdWU6WzcwLDEzMCwxODAsMV0sdGFuOlsyMTAsMTgwLDE0MCwxXSx0ZWFsOlswLDEyOCwxMjgsMV0sdGhpc3RsZTpbMjE2LDE5MSwyMTYsMV0sdG9tYXRvOlsyNTUsOTksNzEsMV0sdHVycXVvaXNlOls2NCwyMjQsMjA4LDFdLHZpb2xldDpbMjM4LDEzMCwyMzgsMV0sd2hlYXQ6WzI0NSwyMjIsMTc5LDFdLHdoaXRlOlsyNTUsMjU1LDI1NSwxXSx3aGl0ZXNtb2tlOlsyNDUsMjQ1LDI0NSwxXSx5ZWxsb3c6WzI1NSwyNTUsMCwxXSx5ZWxsb3dncmVlbjpbMTU0LDIwNSw1MCwxXX07ZnVuY3Rpb24gbih0KXtyZXR1cm4odD1NYXRoLnJvdW5kKHQpKTwwPzA6dD4yNTU/MjU1OnR9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdDwwPzA6dD4xPzE6dH1mdW5jdGlvbiBhKHQpe3JldHVyblwiJVwiPT09dFt0Lmxlbmd0aC0xXT9uKHBhcnNlRmxvYXQodCkvMTAwKjI1NSk6bihwYXJzZUludCh0KSl9ZnVuY3Rpb24gbyh0KXtyZXR1cm5cIiVcIj09PXRbdC5sZW5ndGgtMV0/aShwYXJzZUZsb2F0KHQpLzEwMCk6aShwYXJzZUZsb2F0KHQpKX1mdW5jdGlvbiBzKHQsZSxyKXtyZXR1cm4gcjwwP3IrPTE6cj4xJiYoci09MSksNipyPDE/dCsoZS10KSpyKjY6MipyPDE/ZTozKnI8Mj90KyhlLXQpKigyLzMtcikqNjp0fXRyeXtlLnBhcnNlQ1NTQ29sb3I9ZnVuY3Rpb24odCl7dmFyIGUsaT10LnJlcGxhY2UoLyAvZyxcIlwiKS50b0xvd2VyQ2FzZSgpO2lmKGkgaW4gcilyZXR1cm4gcltpXS5zbGljZSgpO2lmKFwiI1wiPT09aVswXSlyZXR1cm4gND09PWkubGVuZ3RoPyhlPXBhcnNlSW50KGkuc3Vic3RyKDEpLDE2KSk+PTAmJmU8PTQwOTU/WygzODQwJmUpPj40fCgzODQwJmUpPj44LDI0MCZlfCgyNDAmZSk+PjQsMTUmZXwoMTUmZSk8PDQsMV06bnVsbDo3PT09aS5sZW5ndGgmJihlPXBhcnNlSW50KGkuc3Vic3RyKDEpLDE2KSk+PTAmJmU8PTE2Nzc3MjE1P1soMTY3MTE2ODAmZSk+PjE2LCg2NTI4MCZlKT4+OCwyNTUmZSwxXTpudWxsO3ZhciBsPWkuaW5kZXhPZihcIihcIiksYz1pLmluZGV4T2YoXCIpXCIpO2lmKC0xIT09bCYmYysxPT09aS5sZW5ndGgpe3ZhciB1PWkuc3Vic3RyKDAsbCksaD1pLnN1YnN0cihsKzEsYy0obCsxKSkuc3BsaXQoXCIsXCIpLGY9MTtzd2l0Y2godSl7Y2FzZVwicmdiYVwiOmlmKDQhPT1oLmxlbmd0aClyZXR1cm4gbnVsbDtmPW8oaC5wb3AoKSk7Y2FzZVwicmdiXCI6cmV0dXJuIDMhPT1oLmxlbmd0aD9udWxsOlthKGhbMF0pLGEoaFsxXSksYShoWzJdKSxmXTtjYXNlXCJoc2xhXCI6aWYoNCE9PWgubGVuZ3RoKXJldHVybiBudWxsO2Y9byhoLnBvcCgpKTtjYXNlXCJoc2xcIjppZigzIT09aC5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIHA9KHBhcnNlRmxvYXQoaFswXSklMzYwKzM2MCklMzYwLzM2MCxkPW8oaFsxXSksZz1vKGhbMl0pLHY9Zzw9LjU/ZyooZCsxKTpnK2QtZypkLG09MipnLXY7cmV0dXJuW24oMjU1KnMobSx2LHArMS8zKSksbigyNTUqcyhtLHYscCkpLG4oMjU1KnMobSx2LHAtMS8zKSksZl07ZGVmYXVsdDpyZXR1cm4gbnVsbH19cmV0dXJuIG51bGx9fWNhdGNoKHQpe319KS5wYXJzZUNTU0NvbG9yLHR0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZvaWQgMD09PW4mJihuPTEpLHRoaXMucj10LHRoaXMuZz1lLHRoaXMuYj1yLHRoaXMuYT1ufTt0dC5wYXJzZT1mdW5jdGlvbih0KXtpZih0KXtpZih0IGluc3RhbmNlb2YgdHQpcmV0dXJuIHQ7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpe3ZhciBlPVEodCk7aWYoZSlyZXR1cm4gbmV3IHR0KGVbMF0vMjU1KmVbM10sZVsxXS8yNTUqZVszXSxlWzJdLzI1NSplWzNdLGVbM10pfX19LHR0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMudG9BcnJheSgpLGU9dFswXSxyPXRbMV0sbj10WzJdLGk9dFszXTtyZXR1cm5cInJnYmEoXCIrTWF0aC5yb3VuZChlKStcIixcIitNYXRoLnJvdW5kKHIpK1wiLFwiK01hdGgucm91bmQobikrXCIsXCIraStcIilcIn0sdHQucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnIsZT10aGlzLmcscj10aGlzLmIsbj10aGlzLmE7cmV0dXJuIDA9PT1uP1swLDAsMCwwXTpbMjU1KnQvbiwyNTUqZS9uLDI1NSpyL24sbl19LHR0LmJsYWNrPW5ldyB0dCgwLDAsMCwxKSx0dC53aGl0ZT1uZXcgdHQoMSwxLDEsMSksdHQudHJhbnNwYXJlbnQ9bmV3IHR0KDAsMCwwLDApO3ZhciBldD1mdW5jdGlvbih0LGUscil7dGhpcy5zZW5zaXRpdml0eT10P2U/XCJ2YXJpYW50XCI6XCJjYXNlXCI6ZT9cImFjY2VudFwiOlwiYmFzZVwiLHRoaXMubG9jYWxlPXIsdGhpcy5jb2xsYXRvcj1uZXcgSW50bC5Db2xsYXRvcih0aGlzLmxvY2FsZT90aGlzLmxvY2FsZTpbXSx7c2Vuc2l0aXZpdHk6dGhpcy5zZW5zaXRpdml0eSx1c2FnZTpcInNlYXJjaFwifSl9O2V0LnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY29sbGF0b3IuY29tcGFyZSh0LGUpfSxldC5wcm90b3R5cGUucmVzb2x2ZWRMb2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEludGwuQ29sbGF0b3IodGhpcy5sb2NhbGU/dGhpcy5sb2NhbGU6W10pLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZX07dmFyIHJ0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnR5cGU9WCx0aGlzLmxvY2FsZT1yLHRoaXMuY2FzZVNlbnNpdGl2ZT10LHRoaXMuZGlhY3JpdGljU2Vuc2l0aXZlPWV9O2Z1bmN0aW9uIG50KHQsZSxyLG4pe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wJiZ0PD0yNTUmJlwibnVtYmVyXCI9PXR5cGVvZiBlJiZlPj0wJiZlPD0yNTUmJlwibnVtYmVyXCI9PXR5cGVvZiByJiZyPj0wJiZyPD0yNTU/dm9pZCAwPT09bnx8XCJudW1iZXJcIj09dHlwZW9mIG4mJm4+PTAmJm48PTE/bnVsbDpcIkludmFsaWQgcmdiYSB2YWx1ZSBbXCIrW3QsZSxyLG5dLmpvaW4oXCIsIFwiKStcIl06ICdhJyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS5cIjpcIkludmFsaWQgcmdiYSB2YWx1ZSBbXCIrKFwibnVtYmVyXCI9PXR5cGVvZiBuP1t0LGUscixuXTpbdCxlLHJdKS5qb2luKFwiLCBcIikrXCJdOiAncicsICdnJywgYW5kICdiJyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjU1LlwifWZ1bmN0aW9uIGl0KHQpe2lmKG51bGw9PT10KXJldHVybiBWO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXJldHVybiBxO2lmKFwiYm9vbGVhblwiPT10eXBlb2YgdClyZXR1cm4gSDtpZihcIm51bWJlclwiPT10eXBlb2YgdClyZXR1cm4gVTtpZih0IGluc3RhbmNlb2YgdHQpcmV0dXJuIEc7aWYodCBpbnN0YW5jZW9mIGV0KXJldHVybiBYO2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZSxyPXQubGVuZ3RoLG49MCxpPXQ7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pdChpW25dKTtpZihlKXtpZihlPT09YSljb250aW51ZTtlPVc7YnJlYWt9ZT1hfXJldHVybiBaKGV8fFcscil9cmV0dXJuIFl9cnQucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigyIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoXCJFeHBlY3RlZCBvbmUgYXJndW1lbnQuXCIpO3ZhciByPXRbMV07aWYoXCJvYmplY3RcIiE9dHlwZW9mIHJ8fEFycmF5LmlzQXJyYXkocikpcmV0dXJuIGUuZXJyb3IoXCJDb2xsYXRvciBvcHRpb25zIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0LlwiKTt2YXIgbj1lLnBhcnNlKHZvaWQgMCE9PXJbXCJjYXNlLXNlbnNpdGl2ZVwiXSYmcltcImNhc2Utc2Vuc2l0aXZlXCJdLDEsSCk7aWYoIW4pcmV0dXJuIG51bGw7dmFyIGk9ZS5wYXJzZSh2b2lkIDAhPT1yW1wiZGlhY3JpdGljLXNlbnNpdGl2ZVwiXSYmcltcImRpYWNyaXRpYy1zZW5zaXRpdmVcIl0sMSxIKTtpZighaSlyZXR1cm4gbnVsbDt2YXIgYT1udWxsO3JldHVybiByLmxvY2FsZSYmIShhPWUucGFyc2Uoci5sb2NhbGUsMSxxKSk/bnVsbDpuZXcgcnQobixpLGEpfSxydC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBldCh0aGlzLmNhc2VTZW5zaXRpdmUuZXZhbHVhdGUodCksdGhpcy5kaWFjcml0aWNTZW5zaXRpdmUuZXZhbHVhdGUodCksdGhpcy5sb2NhbGU/dGhpcy5sb2NhbGUuZXZhbHVhdGUodCk6bnVsbCl9LHJ0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmNhc2VTZW5zaXRpdmUpLHQodGhpcy5kaWFjcml0aWNTZW5zaXRpdmUpLHRoaXMubG9jYWxlJiZ0KHRoaXMubG9jYWxlKX0scnQucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVyblt2b2lkIDBdfSxydC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9e307cmV0dXJuIHRbXCJjYXNlLXNlbnNpdGl2ZVwiXT10aGlzLmNhc2VTZW5zaXRpdmUuc2VyaWFsaXplKCksdFtcImRpYWNyaXRpYy1zZW5zaXRpdmVcIl09dGhpcy5kaWFjcml0aWNTZW5zaXRpdmUuc2VyaWFsaXplKCksdGhpcy5sb2NhbGUmJih0LmxvY2FsZT10aGlzLmxvY2FsZS5zZXJpYWxpemUoKSksW1wiY29sbGF0b3JcIix0XX07dmFyIGF0PWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPXQsdGhpcy52YWx1ZT1lfTthdC5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDIhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcihcIidsaXRlcmFsJyBleHByZXNzaW9uIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBidXQgZm91bmQgXCIrKHQubGVuZ3RoLTEpK1wiIGluc3RlYWQuXCIpO2lmKCFmdW5jdGlvbiB0KGUpe2lmKG51bGw9PT1lKXJldHVybiEwO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiEwO2lmKFwiYm9vbGVhblwiPT10eXBlb2YgZSlyZXR1cm4hMDtpZihcIm51bWJlclwiPT10eXBlb2YgZSlyZXR1cm4hMDtpZihlIGluc3RhbmNlb2YgdHQpcmV0dXJuITA7aWYoZSBpbnN0YW5jZW9mIGV0KXJldHVybiEwO2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgcj0wLG49ZTtyPG4ubGVuZ3RoO3IrPTEpaWYoIXQobltyXSkpcmV0dXJuITE7cmV0dXJuITB9aWYoXCJvYmplY3RcIj09dHlwZW9mIGUpe2Zvcih2YXIgaSBpbiBlKWlmKCF0KGVbaV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiExfSh0WzFdKSlyZXR1cm4gZS5lcnJvcihcImludmFsaWQgdmFsdWVcIik7dmFyIHI9dFsxXSxuPWl0KHIpLGk9ZS5leHBlY3RlZFR5cGU7cmV0dXJuXCJhcnJheVwiIT09bi5raW5kfHwwIT09bi5OfHwhaXx8XCJhcnJheVwiIT09aS5raW5kfHxcIm51bWJlclwiPT10eXBlb2YgaS5OJiYwIT09aS5OfHwobj1pKSxuZXcgYXQobixyKX0sYXQucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWV9LGF0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24oKXt9LGF0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy52YWx1ZV19LGF0LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm5cImFycmF5XCI9PT10aGlzLnR5cGUua2luZHx8XCJvYmplY3RcIj09PXRoaXMudHlwZS5raW5kP1tcImxpdGVyYWxcIix0aGlzLnZhbHVlXTp0aGlzLnZhbHVlIGluc3RhbmNlb2YgdHQ/W1wicmdiYVwiXS5jb25jYXQodGhpcy52YWx1ZS50b0FycmF5KCkpOnRoaXMudmFsdWV9O3ZhciBvdD1mdW5jdGlvbih0KXt0aGlzLm5hbWU9XCJFeHByZXNzaW9uRXZhbHVhdGlvbkVycm9yXCIsdGhpcy5tZXNzYWdlPXR9O290LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlfTt2YXIgc3Q9e3N0cmluZzpxLG51bWJlcjpVLGJvb2xlYW46SCxvYmplY3Q6WX0sbHQ9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9dCx0aGlzLmFyZ3M9ZX07bHQucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwyKXJldHVybiBlLmVycm9yKFwiRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LlwiKTtmb3IodmFyIHI9dFswXSxuPXN0W3JdLGk9W10sYT0xO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz1lLnBhcnNlKHRbYV0sYSxXKTtpZighbylyZXR1cm4gbnVsbDtpLnB1c2gobyl9cmV0dXJuIG5ldyBsdChuLGkpfSxsdC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0aGlzLmFyZ3MubGVuZ3RoO2UrKyl7dmFyIHI9dGhpcy5hcmdzW2VdLmV2YWx1YXRlKHQpO2lmKCFLKHRoaXMudHlwZSxpdChyKSkpcmV0dXJuIHI7aWYoZT09PXRoaXMuYXJncy5sZW5ndGgtMSl0aHJvdyBuZXcgb3QoXCJFeHBlY3RlZCB2YWx1ZSB0byBiZSBvZiB0eXBlIFwiKyQodGhpcy50eXBlKStcIiwgYnV0IGZvdW5kIFwiKyQoaXQocikpK1wiIGluc3RlYWQuXCIpfXJldHVybiBudWxsfSxsdC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3RoaXMuYXJncy5mb3JFYWNoKHQpfSxsdC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuKHQ9W10pLmNvbmNhdC5hcHBseSh0LHRoaXMuYXJncy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucG9zc2libGVPdXRwdXRzKCl9KSk7dmFyIHR9LGx0LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy50eXBlLmtpbmRdLmNvbmNhdCh0aGlzLmFyZ3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlcmlhbGl6ZSgpfSkpfTt2YXIgY3Q9e3N0cmluZzpxLG51bWJlcjpVLGJvb2xlYW46SH0sdXQ9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9dCx0aGlzLmlucHV0PWV9O3V0LnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8Mnx8dC5sZW5ndGg+NClyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIDEsIDIsIG9yIDMgYXJndW1lbnRzLCBidXQgZm91bmQgXCIrKHQubGVuZ3RoLTEpK1wiIGluc3RlYWQuXCIpO3ZhciByLG47aWYodC5sZW5ndGg+Mil7dmFyIGk9dFsxXTtpZihcInN0cmluZ1wiIT10eXBlb2YgaXx8IShpIGluIGN0KSlyZXR1cm4gZS5lcnJvcignVGhlIGl0ZW0gdHlwZSBhcmd1bWVudCBvZiBcImFycmF5XCIgbXVzdCBiZSBvbmUgb2Ygc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4nLDEpO3I9Y3RbaV19ZWxzZSByPVc7aWYodC5sZW5ndGg+Myl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHRbMl18fHRbMl08MHx8dFsyXSE9PU1hdGguZmxvb3IodFsyXSkpcmV0dXJuIGUuZXJyb3IoJ1RoZSBsZW5ndGggYXJndW1lbnQgdG8gXCJhcnJheVwiIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxpdGVyYWwnLDIpO249dFsyXX12YXIgYT1aKHIsbiksbz1lLnBhcnNlKHRbdC5sZW5ndGgtMV0sdC5sZW5ndGgtMSxXKTtyZXR1cm4gbz9uZXcgdXQoYSxvKTpudWxsfSx1dC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbnB1dC5ldmFsdWF0ZSh0KTtpZihLKHRoaXMudHlwZSxpdChlKSkpdGhyb3cgbmV3IG90KFwiRXhwZWN0ZWQgdmFsdWUgdG8gYmUgb2YgdHlwZSBcIiskKHRoaXMudHlwZSkrXCIsIGJ1dCBmb3VuZCBcIiskKGl0KGUpKStcIiBpbnN0ZWFkLlwiKTtyZXR1cm4gZX0sdXQucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5wdXQpfSx1dC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5wdXQucG9zc2libGVPdXRwdXRzKCl9LHV0LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD1bXCJhcnJheVwiXSxlPXRoaXMudHlwZS5pdGVtVHlwZTtpZihcInN0cmluZ1wiPT09ZS5raW5kfHxcIm51bWJlclwiPT09ZS5raW5kfHxcImJvb2xlYW5cIj09PWUua2luZCl7dC5wdXNoKGUua2luZCk7dmFyIHI9dGhpcy50eXBlLk47XCJudW1iZXJcIj09dHlwZW9mIHImJnQucHVzaChyKX1yZXR1cm4gdC5wdXNoKHRoaXMuaW5wdXQuc2VyaWFsaXplKCkpLHR9O3ZhciBodD17XCJ0by1udW1iZXJcIjpVLFwidG8tY29sb3JcIjpHfSxmdD1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT10LHRoaXMuYXJncz1lfTtmdC5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDIpcmV0dXJuIGUuZXJyb3IoXCJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuXCIpO2Zvcih2YXIgcj10WzBdLG49aHRbcl0saT1bXSxhPTE7YTx0Lmxlbmd0aDthKyspe3ZhciBvPWUucGFyc2UodFthXSxhLFcpO2lmKCFvKXJldHVybiBudWxsO2kucHVzaChvKX1yZXR1cm4gbmV3IGZ0KG4saSl9LGZ0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtpZihcImNvbG9yXCI9PT10aGlzLnR5cGUua2luZCl7Zm9yKHZhciBlLHIsbj0wLGk9dGhpcy5hcmdzO248aS5sZW5ndGg7bis9MSlpZihyPW51bGwsXCJzdHJpbmdcIj09dHlwZW9mKGU9aVtuXS5ldmFsdWF0ZSh0KSkpe3ZhciBhPXQucGFyc2VDb2xvcihlKTtpZihhKXJldHVybiBhfWVsc2UgaWYoQXJyYXkuaXNBcnJheShlKSYmIShyPWUubGVuZ3RoPDN8fGUubGVuZ3RoPjQ/XCJJbnZhbGlkIHJiZ2EgdmFsdWUgXCIrSlNPTi5zdHJpbmdpZnkoZSkrXCI6IGV4cGVjdGVkIGFuIGFycmF5IGNvbnRhaW5pbmcgZWl0aGVyIHRocmVlIG9yIGZvdXIgbnVtZXJpYyB2YWx1ZXMuXCI6bnQoZVswXSxlWzFdLGVbMl0sZVszXSkpKXJldHVybiBuZXcgdHQoZVswXS8yNTUsZVsxXS8yNTUsZVsyXS8yNTUsZVszXSk7dGhyb3cgbmV3IG90KHJ8fFwiQ291bGQgbm90IHBhcnNlIGNvbG9yIGZyb20gdmFsdWUgJ1wiKyhcInN0cmluZ1wiPT10eXBlb2YgZT9lOkpTT04uc3RyaW5naWZ5KGUpKStcIidcIil9Zm9yKHZhciBvPW51bGwscz0wLGw9dGhpcy5hcmdzO3M8bC5sZW5ndGg7cys9MSlpZihudWxsIT09KG89bFtzXS5ldmFsdWF0ZSh0KSkpe3ZhciBjPU51bWJlcihvKTtpZighaXNOYU4oYykpcmV0dXJuIGN9dGhyb3cgbmV3IG90KFwiQ291bGQgbm90IGNvbnZlcnQgXCIrSlNPTi5zdHJpbmdpZnkobykrXCIgdG8gbnVtYmVyLlwiKX0sZnQucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0aGlzLmFyZ3MuZm9yRWFjaCh0KX0sZnQucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVybih0PVtdKS5jb25jYXQuYXBwbHkodCx0aGlzLmFyZ3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBvc3NpYmxlT3V0cHV0cygpfSkpO3ZhciB0fSxmdC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9W1widG8tXCIrdGhpcy50eXBlLmtpbmRdO3JldHVybiB0aGlzLmVhY2hDaGlsZChmdW5jdGlvbihlKXt0LnB1c2goZS5zZXJpYWxpemUoKSl9KSx0fTt2YXIgcHQ9W1wiVW5rbm93blwiLFwiUG9pbnRcIixcIkxpbmVTdHJpbmdcIixcIlBvbHlnb25cIl0sZHQ9ZnVuY3Rpb24oKXt0aGlzLl9wYXJzZUNvbG9yQ2FjaGU9e319O2R0LnByb3RvdHlwZS5pZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZlYXR1cmUmJlwiaWRcImluIHRoaXMuZmVhdHVyZT90aGlzLmZlYXR1cmUuaWQ6bnVsbH0sZHQucHJvdG90eXBlLmdlb21ldHJ5VHlwZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZlYXR1cmU/XCJudW1iZXJcIj09dHlwZW9mIHRoaXMuZmVhdHVyZS50eXBlP3B0W3RoaXMuZmVhdHVyZS50eXBlXTp0aGlzLmZlYXR1cmUudHlwZTpudWxsfSxkdC5wcm90b3R5cGUucHJvcGVydGllcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZlYXR1cmUmJnRoaXMuZmVhdHVyZS5wcm9wZXJ0aWVzfHx7fX0sZHQucHJvdG90eXBlLnBhcnNlQ29sb3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcGFyc2VDb2xvckNhY2hlW3RdO3JldHVybiBlfHwoZT10aGlzLl9wYXJzZUNvbG9yQ2FjaGVbdF09dHQucGFyc2UodCkpLGV9O3ZhciBndD1mdW5jdGlvbih0LGUscixuKXt0aGlzLm5hbWU9dCx0aGlzLnR5cGU9ZSx0aGlzLl9ldmFsdWF0ZT1yLHRoaXMuYXJncz1ufTtmdW5jdGlvbiB2dCh0KXtpZih0IGluc3RhbmNlb2YgZ3Qpe2lmKFwiZ2V0XCI9PT10Lm5hbWUmJjE9PT10LmFyZ3MubGVuZ3RoKXJldHVybiExO2lmKFwiaGFzXCI9PT10Lm5hbWUmJjE9PT10LmFyZ3MubGVuZ3RoKXJldHVybiExO2lmKFwicHJvcGVydGllc1wiPT09dC5uYW1lfHxcImdlb21ldHJ5LXR5cGVcIj09PXQubmFtZXx8XCJpZFwiPT09dC5uYW1lKXJldHVybiExO2lmKC9eZmlsdGVyLS8udGVzdCh0Lm5hbWUpKXJldHVybiExfXZhciBlPSEwO3JldHVybiB0LmVhY2hDaGlsZChmdW5jdGlvbih0KXtlJiYhdnQodCkmJihlPSExKX0pLGV9ZnVuY3Rpb24gbXQodCxlKXtpZih0IGluc3RhbmNlb2YgZ3QmJmUuaW5kZXhPZih0Lm5hbWUpPj0wKXJldHVybiExO3ZhciByPSEwO3JldHVybiB0LmVhY2hDaGlsZChmdW5jdGlvbih0KXtyJiYhbXQodCxlKSYmKHI9ITEpfSkscn1ndC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2V2YWx1YXRlKHQsdGhpcy5hcmdzKX0sZ3QucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0aGlzLmFyZ3MuZm9yRWFjaCh0KX0sZ3QucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVyblt2b2lkIDBdfSxndC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMubmFtZV0uY29uY2F0KHRoaXMuYXJncy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VyaWFsaXplKCl9KSl9LGd0LnBhcnNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxuPWd0LmRlZmluaXRpb25zW3JdO2lmKCFuKXJldHVybiBlLmVycm9yKCdVbmtub3duIGV4cHJlc3Npb24gXCInK3IrJ1wiLiBJZiB5b3Ugd2FudGVkIGEgbGl0ZXJhbCBhcnJheSwgdXNlIFtcImxpdGVyYWxcIiwgWy4uLl1dLicsMCk7Zm9yKHZhciBpPUFycmF5LmlzQXJyYXkobik/blswXTpuLnR5cGUsYT1BcnJheS5pc0FycmF5KG4pP1tbblsxXSxuWzJdXV06bi5vdmVybG9hZHMsbz1hLmZpbHRlcihmdW5jdGlvbihlKXt2YXIgcj1lWzBdO3JldHVybiFBcnJheS5pc0FycmF5KHIpfHxyLmxlbmd0aD09PXQubGVuZ3RoLTF9KSxzPVtdLGw9MTtsPHQubGVuZ3RoO2wrKyl7dmFyIGM9dFtsXSx1PXZvaWQgMDtpZigxPT09by5sZW5ndGgpe3ZhciBoPW9bMF1bMF07dT1BcnJheS5pc0FycmF5KGgpP2hbbC0xXTpoLnR5cGV9dmFyIGY9ZS5wYXJzZShjLDErcy5sZW5ndGgsdSk7aWYoIWYpcmV0dXJuIG51bGw7cy5wdXNoKGYpfWZvcih2YXIgcD1udWxsLGQ9MCxnPW87ZDxnLmxlbmd0aDtkKz0xKXt2YXIgdj1nW2RdLG09dlswXSx5PXZbMV07aWYocD1uZXcgeHQoZS5yZWdpc3RyeSxlLnBhdGgsbnVsbCxlLnNjb3BlKSxBcnJheS5pc0FycmF5KG0pJiZtLmxlbmd0aCE9PXMubGVuZ3RoKXAuZXJyb3IoXCJFeHBlY3RlZCBcIittLmxlbmd0aCtcIiBhcmd1bWVudHMsIGJ1dCBmb3VuZCBcIitzLmxlbmd0aCtcIiBpbnN0ZWFkLlwiKTtlbHNle2Zvcih2YXIgeD0wO3g8cy5sZW5ndGg7eCsrKXt2YXIgYj1BcnJheS5pc0FycmF5KG0pP21beF06bS50eXBlLF89c1t4XTtwLmNvbmNhdCh4KzEpLmNoZWNrU3VidHlwZShiLF8udHlwZSl9aWYoMD09PXAuZXJyb3JzLmxlbmd0aClyZXR1cm4gbmV3IGd0KHIsaSx5LHMpfX1pZigxPT09by5sZW5ndGgpZS5lcnJvcnMucHVzaC5hcHBseShlLmVycm9ycyxwLmVycm9ycyk7ZWxzZXt2YXIgdz0oby5sZW5ndGg/bzphKS5tYXAoZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIGU9dFswXSxBcnJheS5pc0FycmF5KGUpP1wiKFwiK2UubWFwKCQpLmpvaW4oXCIsIFwiKStcIilcIjpcIihcIiskKGUudHlwZSkrXCIuLi4pXCJ9KS5qb2luKFwiIHwgXCIpLGs9cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuICQodC50eXBlKX0pLmpvaW4oXCIsIFwiKTtlLmVycm9yKFwiRXhwZWN0ZWQgYXJndW1lbnRzIG9mIHR5cGUgXCIrdytcIiwgYnV0IGZvdW5kIChcIitrK1wiKSBpbnN0ZWFkLlwiKX1yZXR1cm4gbnVsbH0sZ3QucmVnaXN0ZXI9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gZ3QuZGVmaW5pdGlvbnM9ZSxlKXRbcl09Z3R9O3ZhciB5dD1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT1lLnR5cGUsdGhpcy5uYW1lPXQsdGhpcy5ib3VuZEV4cHJlc3Npb249ZX07eXQucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigyIT09dC5sZW5ndGh8fFwic3RyaW5nXCIhPXR5cGVvZiB0WzFdKXJldHVybiBlLmVycm9yKFwiJ3ZhcicgZXhwcmVzc2lvbiByZXF1aXJlcyBleGFjdGx5IG9uZSBzdHJpbmcgbGl0ZXJhbCBhcmd1bWVudC5cIik7dmFyIHI9dFsxXTtyZXR1cm4gZS5zY29wZS5oYXMocik/bmV3IHl0KHIsZS5zY29wZS5nZXQocikpOmUuZXJyb3IoJ1Vua25vd24gdmFyaWFibGUgXCInK3IrJ1wiLiBNYWtlIHN1cmUgXCInK3IrJ1wiIGhhcyBiZWVuIGJvdW5kIGluIGFuIGVuY2xvc2luZyBcImxldFwiIGV4cHJlc3Npb24gYmVmb3JlIHVzaW5nIGl0LicsMSl9LHl0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5ib3VuZEV4cHJlc3Npb24uZXZhbHVhdGUodCl9LHl0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24oKXt9LHl0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm5bdm9pZCAwXX0seXQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybltcInZhclwiLHRoaXMubmFtZV19O3ZhciB4dD1mdW5jdGlvbih0LGUscixuLGkpe3ZvaWQgMD09PWUmJihlPVtdKSx2b2lkIDA9PT1uJiYobj1uZXcgaiksdm9pZCAwPT09aSYmKGk9W10pLHRoaXMucmVnaXN0cnk9dCx0aGlzLnBhdGg9ZSx0aGlzLmtleT1lLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cIltcIit0K1wiXVwifSkuam9pbihcIlwiKSx0aGlzLnNjb3BlPW4sdGhpcy5lcnJvcnM9aSx0aGlzLmV4cGVjdGVkVHlwZT1yfTtmdW5jdGlvbiBidCh0LGUpe2Zvcih2YXIgcixuLGk9MCxhPXQubGVuZ3RoLTEsbz0wO2k8PWE7KXtpZihyPXRbbz1NYXRoLmZsb29yKChpK2EpLzIpXSxuPXRbbysxXSxlPT09cnx8ZT5yJiZlPG4pcmV0dXJuIG87aWYocjxlKWk9bysxO2Vsc2V7aWYoIShyPmUpKXRocm93IG5ldyBvdChcIklucHV0IGlzIG5vdCBhIG51bWJlci5cIik7YT1vLTF9fXJldHVybiBNYXRoLm1heChvLTEsMCl9eHQucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIHZvaWQgMD09PWkmJihpPXt9KSxlP3RoaXMuY29uY2F0KGUscixuKS5fcGFyc2UodCxpKTp0aGlzLl9wYXJzZSh0LGkpfSx4dC5wcm90b3R5cGUuX3BhcnNlPWZ1bmN0aW9uKHQsZSl7aWYobnVsbCE9PXQmJlwic3RyaW5nXCIhPXR5cGVvZiB0JiZcImJvb2xlYW5cIiE9dHlwZW9mIHQmJlwibnVtYmVyXCIhPXR5cGVvZiB0fHwodD1bXCJsaXRlcmFsXCIsdF0pLEFycmF5LmlzQXJyYXkodCkpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gdGhpcy5lcnJvcignRXhwZWN0ZWQgYW4gYXJyYXkgd2l0aCBhdCBsZWFzdCBvbmUgZWxlbWVudC4gSWYgeW91IHdhbnRlZCBhIGxpdGVyYWwgYXJyYXksIHVzZSBbXCJsaXRlcmFsXCIsIFtdXS4nKTt2YXIgcj10WzBdO2lmKFwic3RyaW5nXCIhPXR5cGVvZiByKXJldHVybiB0aGlzLmVycm9yKFwiRXhwcmVzc2lvbiBuYW1lIG11c3QgYmUgYSBzdHJpbmcsIGJ1dCBmb3VuZCBcIit0eXBlb2YgcisnIGluc3RlYWQuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgW1wibGl0ZXJhbFwiLCBbLi4uXV0uJywwKSxudWxsO3ZhciBuPXRoaXMucmVnaXN0cnlbcl07aWYobil7dmFyIGk9bi5wYXJzZSh0LHRoaXMpO2lmKCFpKXJldHVybiBudWxsO2lmKHRoaXMuZXhwZWN0ZWRUeXBlKXt2YXIgYT10aGlzLmV4cGVjdGVkVHlwZSxvPWkudHlwZTtpZihcInN0cmluZ1wiIT09YS5raW5kJiZcIm51bWJlclwiIT09YS5raW5kJiZcImJvb2xlYW5cIiE9PWEua2luZCYmXCJvYmplY3RcIiE9PWEua2luZHx8XCJ2YWx1ZVwiIT09by5raW5kKWlmKFwiYXJyYXlcIj09PWEua2luZCYmXCJ2YWx1ZVwiPT09by5raW5kKWUub21pdFR5cGVBbm5vdGF0aW9uc3x8KGk9bmV3IHV0KGEsaSkpO2Vsc2UgaWYoXCJjb2xvclwiIT09YS5raW5kfHxcInZhbHVlXCIhPT1vLmtpbmQmJlwic3RyaW5nXCIhPT1vLmtpbmQpe2lmKHRoaXMuY2hlY2tTdWJ0eXBlKHRoaXMuZXhwZWN0ZWRUeXBlLGkudHlwZSkpcmV0dXJuIG51bGx9ZWxzZSBlLm9taXRUeXBlQW5ub3RhdGlvbnN8fChpPW5ldyBmdChhLFtpXSkpO2Vsc2UgZS5vbWl0VHlwZUFubm90YXRpb25zfHwoaT1uZXcgbHQoYSxbaV0pKX1pZighKGkgaW5zdGFuY2VvZiBhdCkmJmZ1bmN0aW9uIHQoZSl7aWYoZSBpbnN0YW5jZW9mIHl0KXJldHVybiB0KGUuYm91bmRFeHByZXNzaW9uKTtpZihlIGluc3RhbmNlb2YgZ3QmJlwiZXJyb3JcIj09PWUubmFtZSlyZXR1cm4hMTtpZihlIGluc3RhbmNlb2YgcnQpcmV0dXJuITE7dmFyIHI9ZSBpbnN0YW5jZW9mIGZ0fHxlIGluc3RhbmNlb2YgbHR8fGUgaW5zdGFuY2VvZiB1dCxuPSEwO3JldHVybiBlLmVhY2hDaGlsZChmdW5jdGlvbihlKXtuPXI/biYmdChlKTpuJiZlIGluc3RhbmNlb2YgYXR9KSwhIW4mJih2dChlKSYmbXQoZSxbXCJ6b29tXCIsXCJoZWF0bWFwLWRlbnNpdHlcIixcImxpbmUtcHJvZ3Jlc3NcIixcImlzLXN1cHBvcnRlZC1zY3JpcHRcIl0pKX0oaSkpe3ZhciBzPW5ldyBkdDt0cnl7aT1uZXcgYXQoaS50eXBlLGkuZXZhbHVhdGUocykpfWNhdGNoKHQpe3JldHVybiB0aGlzLmVycm9yKHQubWVzc2FnZSksbnVsbH19cmV0dXJuIGl9cmV0dXJuIHRoaXMuZXJyb3IoJ1Vua25vd24gZXhwcmVzc2lvbiBcIicrcisnXCIuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgW1wibGl0ZXJhbFwiLCBbLi4uXV0uJywwKX1yZXR1cm4gdm9pZCAwPT09dD90aGlzLmVycm9yKFwiJ3VuZGVmaW5lZCcgdmFsdWUgaW52YWxpZC4gVXNlIG51bGwgaW5zdGVhZC5cIik6XCJvYmplY3RcIj09dHlwZW9mIHQ/dGhpcy5lcnJvcignQmFyZSBvYmplY3RzIGludmFsaWQuIFVzZSBbXCJsaXRlcmFsXCIsIHsuLi59XSBpbnN0ZWFkLicpOnRoaXMuZXJyb3IoXCJFeHBlY3RlZCBhbiBhcnJheSwgYnV0IGZvdW5kIFwiK3R5cGVvZiB0K1wiIGluc3RlYWQuXCIpfSx4dC5wcm90b3R5cGUuY29uY2F0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1cIm51bWJlclwiPT10eXBlb2YgdD90aGlzLnBhdGguY29uY2F0KHQpOnRoaXMucGF0aCxpPXI/dGhpcy5zY29wZS5jb25jYXQocik6dGhpcy5zY29wZTtyZXR1cm4gbmV3IHh0KHRoaXMucmVnaXN0cnksbixlfHxudWxsLGksdGhpcy5lcnJvcnMpfSx4dC5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9YXJndW1lbnRzLmxlbmd0aC0xO3ItLSA+MDspZVtyXT1hcmd1bWVudHNbcisxXTt2YXIgbj1cIlwiK3RoaXMua2V5K2UubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiW1wiK3QrXCJdXCJ9KS5qb2luKFwiXCIpO3RoaXMuZXJyb3JzLnB1c2gobmV3IE4obix0KSl9LHh0LnByb3RvdHlwZS5jaGVja1N1YnR5cGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1LKHQsZSk7cmV0dXJuIHImJnRoaXMuZXJyb3Iocikscn07dmFyIF90PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnR5cGU9dCx0aGlzLmlucHV0PWUsdGhpcy5sYWJlbHM9W10sdGhpcy5vdXRwdXRzPVtdO2Zvcih2YXIgbj0wLGk9cjtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl0sbz1hWzBdLHM9YVsxXTt0aGlzLmxhYmVscy5wdXNoKG8pLHRoaXMub3V0cHV0cy5wdXNoKHMpfX07ZnVuY3Rpb24gd3QodCxlLHIpe3JldHVybiB0KigxLXIpK2Uqcn1fdC5wYXJzZT1mdW5jdGlvbih0LGUpe3ZhciByPXRbMV0sbj10LnNsaWNlKDIpO2lmKHQubGVuZ3RoLTE8NClyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIGF0IGxlYXN0IDQgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSBcIisodC5sZW5ndGgtMSkrXCIuXCIpO2lmKCh0Lmxlbmd0aC0xKSUyIT0wKXJldHVybiBlLmVycm9yKFwiRXhwZWN0ZWQgYW4gZXZlbiBudW1iZXIgb2YgYXJndW1lbnRzLlwiKTtpZighKHI9ZS5wYXJzZShyLDEsVSkpKXJldHVybiBudWxsO3ZhciBpPVtdLGE9bnVsbDtlLmV4cGVjdGVkVHlwZSYmXCJ2YWx1ZVwiIT09ZS5leHBlY3RlZFR5cGUua2luZCYmKGE9ZS5leHBlY3RlZFR5cGUpLG4udW5zaGlmdCgtMS8wKTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rPTIpe3ZhciBzPW5bb10sbD1uW28rMV0sYz1vKzEsdT1vKzI7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHMpcmV0dXJuIGUuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgXCJzdGVwXCIgZXhwcmVzc2lvbnMgbXVzdCBiZSBkZWZpbmVkIHVzaW5nIGxpdGVyYWwgbnVtZXJpYyB2YWx1ZXMgKG5vdCBjb21wdXRlZCBleHByZXNzaW9ucykgZm9yIHRoZSBpbnB1dCB2YWx1ZXMuJyxjKTtpZihpLmxlbmd0aCYmaVtpLmxlbmd0aC0xXVswXT49cylyZXR1cm4gZS5lcnJvcignSW5wdXQvb3V0cHV0IHBhaXJzIGZvciBcInN0ZXBcIiBleHByZXNzaW9ucyBtdXN0IGJlIGFycmFuZ2VkIHdpdGggaW5wdXQgdmFsdWVzIGluIHN0cmljdGx5IGFzY2VuZGluZyBvcmRlci4nLGMpO3ZhciBoPWUucGFyc2UobCx1LGEpO2lmKCFoKXJldHVybiBudWxsO2E9YXx8aC50eXBlLGkucHVzaChbcyxoXSl9cmV0dXJuIG5ldyBfdChhLHIsaSl9LF90LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhYmVscyxyPXRoaXMub3V0cHV0cztpZigxPT09ZS5sZW5ndGgpcmV0dXJuIHJbMF0uZXZhbHVhdGUodCk7dmFyIG49dGhpcy5pbnB1dC5ldmFsdWF0ZSh0KTtpZihuPD1lWzBdKXJldHVybiByWzBdLmV2YWx1YXRlKHQpO3ZhciBpPWUubGVuZ3RoO3JldHVybiBuPj1lW2ktMV0/cltpLTFdLmV2YWx1YXRlKHQpOnJbYnQoZSxuKV0uZXZhbHVhdGUodCl9LF90LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmlucHV0KTtmb3IodmFyIGU9MCxyPXRoaXMub3V0cHV0cztlPHIubGVuZ3RoO2UrPTEpdChyW2VdKX0sX3QucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVybih0PVtdKS5jb25jYXQuYXBwbHkodCx0aGlzLm91dHB1dHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBvc3NpYmxlT3V0cHV0cygpfSkpO3ZhciB0fSxfdC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtcInN0ZXBcIix0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXSxlPTA7ZTx0aGlzLmxhYmVscy5sZW5ndGg7ZSsrKWU+MCYmdC5wdXNoKHRoaXMubGFiZWxzW2VdKSx0LnB1c2godGhpcy5vdXRwdXRzW2VdLnNlcmlhbGl6ZSgpKTtyZXR1cm4gdH07dmFyIGt0PU9iamVjdC5mcmVlemUoe251bWJlcjp3dCxjb2xvcjpmdW5jdGlvbih0LGUscil7cmV0dXJuIG5ldyB0dCh3dCh0LnIsZS5yLHIpLHd0KHQuZyxlLmcsciksd3QodC5iLGUuYixyKSx3dCh0LmEsZS5hLHIpKX0sYXJyYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0LG4pe3JldHVybiB3dCh0LGVbbl0scil9KX19KSxBdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnR5cGU9dCx0aGlzLmludGVycG9sYXRpb249ZSx0aGlzLmlucHV0PXIsdGhpcy5sYWJlbHM9W10sdGhpcy5vdXRwdXRzPVtdO2Zvcih2YXIgaT0wLGE9bjtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV0scz1vWzBdLGw9b1sxXTt0aGlzLmxhYmVscy5wdXNoKHMpLHRoaXMub3V0cHV0cy5wdXNoKGwpfX07ZnVuY3Rpb24gVHQodCxlLHIsbil7dmFyIGk9bi1yLGE9dC1yO3JldHVybiAwPT09aT8wOjE9PT1lP2EvaTooTWF0aC5wb3coZSxhKS0xKS8oTWF0aC5wb3coZSxpKS0xKX1BdC5pbnRlcnBvbGF0aW9uRmFjdG9yPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTA7aWYoXCJleHBvbmVudGlhbFwiPT09dC5uYW1lKWk9VHQoZSx0LmJhc2UscixuKTtlbHNlIGlmKFwibGluZWFyXCI9PT10Lm5hbWUpaT1UdChlLDEscixuKTtlbHNlIGlmKFwiY3ViaWMtYmV6aWVyXCI9PT10Lm5hbWUpe3ZhciBvPXQuY29udHJvbFBvaW50cztpPW5ldyBhKG9bMF0sb1sxXSxvWzJdLG9bM10pLnNvbHZlKFR0KGUsMSxyLG4pKX1yZXR1cm4gaX0sQXQucGFyc2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10WzFdLG49dFsyXSxpPXQuc2xpY2UoMyk7aWYoIUFycmF5LmlzQXJyYXkocil8fDA9PT1yLmxlbmd0aClyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIGFuIGludGVycG9sYXRpb24gdHlwZSBleHByZXNzaW9uLlwiLDEpO2lmKFwibGluZWFyXCI9PT1yWzBdKXI9e25hbWU6XCJsaW5lYXJcIn07ZWxzZSBpZihcImV4cG9uZW50aWFsXCI9PT1yWzBdKXt2YXIgYT1yWzFdO2lmKFwibnVtYmVyXCIhPXR5cGVvZiBhKXJldHVybiBlLmVycm9yKFwiRXhwb25lbnRpYWwgaW50ZXJwb2xhdGlvbiByZXF1aXJlcyBhIG51bWVyaWMgYmFzZS5cIiwxLDEpO3I9e25hbWU6XCJleHBvbmVudGlhbFwiLGJhc2U6YX19ZWxzZXtpZihcImN1YmljLWJlemllclwiIT09clswXSlyZXR1cm4gZS5lcnJvcihcIlVua25vd24gaW50ZXJwb2xhdGlvbiB0eXBlIFwiK1N0cmluZyhyWzBdKSwxLDApO3ZhciBvPXIuc2xpY2UoMSk7aWYoNCE9PW8ubGVuZ3RofHxvLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuXCJudW1iZXJcIiE9dHlwZW9mIHR8fHQ8MHx8dD4xfSkpcmV0dXJuIGUuZXJyb3IoXCJDdWJpYyBiZXppZXIgaW50ZXJwb2xhdGlvbiByZXF1aXJlcyBmb3VyIG51bWVyaWMgYXJndW1lbnRzIHdpdGggdmFsdWVzIGJldHdlZW4gMCBhbmQgMS5cIiwxKTtyPXtuYW1lOlwiY3ViaWMtYmV6aWVyXCIsY29udHJvbFBvaW50czpvfX1pZih0Lmxlbmd0aC0xPDQpcmV0dXJuIGUuZXJyb3IoXCJFeHBlY3RlZCBhdCBsZWFzdCA0IGFyZ3VtZW50cywgYnV0IGZvdW5kIG9ubHkgXCIrKHQubGVuZ3RoLTEpK1wiLlwiKTtpZigodC5sZW5ndGgtMSklMiE9MClyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIGFuIGV2ZW4gbnVtYmVyIG9mIGFyZ3VtZW50cy5cIik7aWYoIShuPWUucGFyc2UobiwyLFUpKSlyZXR1cm4gbnVsbDt2YXIgcz1bXSxsPW51bGw7ZS5leHBlY3RlZFR5cGUmJlwidmFsdWVcIiE9PWUuZXhwZWN0ZWRUeXBlLmtpbmQmJihsPWUuZXhwZWN0ZWRUeXBlKTtmb3IodmFyIGM9MDtjPGkubGVuZ3RoO2MrPTIpe3ZhciB1PWlbY10saD1pW2MrMV0sZj1jKzMscD1jKzQ7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHUpcmV0dXJuIGUuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgXCJpbnRlcnBvbGF0ZVwiIGV4cHJlc3Npb25zIG11c3QgYmUgZGVmaW5lZCB1c2luZyBsaXRlcmFsIG51bWVyaWMgdmFsdWVzIChub3QgY29tcHV0ZWQgZXhwcmVzc2lvbnMpIGZvciB0aGUgaW5wdXQgdmFsdWVzLicsZik7aWYocy5sZW5ndGgmJnNbcy5sZW5ndGgtMV1bMF0+PXUpcmV0dXJuIGUuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgXCJpbnRlcnBvbGF0ZVwiIGV4cHJlc3Npb25zIG11c3QgYmUgYXJyYW5nZWQgd2l0aCBpbnB1dCB2YWx1ZXMgaW4gc3RyaWN0bHkgYXNjZW5kaW5nIG9yZGVyLicsZik7dmFyIGQ9ZS5wYXJzZShoLHAsbCk7aWYoIWQpcmV0dXJuIG51bGw7bD1sfHxkLnR5cGUscy5wdXNoKFt1LGRdKX1yZXR1cm5cIm51bWJlclwiPT09bC5raW5kfHxcImNvbG9yXCI9PT1sLmtpbmR8fFwiYXJyYXlcIj09PWwua2luZCYmXCJudW1iZXJcIj09PWwuaXRlbVR5cGUua2luZCYmXCJudW1iZXJcIj09dHlwZW9mIGwuTj9uZXcgQXQobCxyLG4scyk6ZS5lcnJvcihcIlR5cGUgXCIrJChsKStcIiBpcyBub3QgaW50ZXJwb2xhdGFibGUuXCIpfSxBdC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYWJlbHMscj10aGlzLm91dHB1dHM7aWYoMT09PWUubGVuZ3RoKXJldHVybiByWzBdLmV2YWx1YXRlKHQpO3ZhciBuPXRoaXMuaW5wdXQuZXZhbHVhdGUodCk7aWYobjw9ZVswXSlyZXR1cm4gclswXS5ldmFsdWF0ZSh0KTt2YXIgaT1lLmxlbmd0aDtpZihuPj1lW2ktMV0pcmV0dXJuIHJbaS0xXS5ldmFsdWF0ZSh0KTt2YXIgYT1idChlLG4pLG89ZVthXSxzPWVbYSsxXSxsPUF0LmludGVycG9sYXRpb25GYWN0b3IodGhpcy5pbnRlcnBvbGF0aW9uLG4sbyxzKSxjPXJbYV0uZXZhbHVhdGUodCksdT1yW2ErMV0uZXZhbHVhdGUodCk7cmV0dXJuIGt0W3RoaXMudHlwZS5raW5kLnRvTG93ZXJDYXNlKCldKGMsdSxsKX0sQXQucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5wdXQpO2Zvcih2YXIgZT0wLHI9dGhpcy5vdXRwdXRzO2U8ci5sZW5ndGg7ZSs9MSl0KHJbZV0pfSxBdC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuKHQ9W10pLmNvbmNhdC5hcHBseSh0LHRoaXMub3V0cHV0cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucG9zc2libGVPdXRwdXRzKCl9KSk7dmFyIHR9LEF0LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W1wiaW50ZXJwb2xhdGVcIixcImxpbmVhclwiPT09dGhpcy5pbnRlcnBvbGF0aW9uLm5hbWU/W1wibGluZWFyXCJdOlwiZXhwb25lbnRpYWxcIj09PXRoaXMuaW50ZXJwb2xhdGlvbi5uYW1lPzE9PT10aGlzLmludGVycG9sYXRpb24uYmFzZT9bXCJsaW5lYXJcIl06W1wiZXhwb25lbnRpYWxcIix0aGlzLmludGVycG9sYXRpb24uYmFzZV06W1wiY3ViaWMtYmV6aWVyXCJdLmNvbmNhdCh0aGlzLmludGVycG9sYXRpb24uY29udHJvbFBvaW50cyksdGhpcy5pbnB1dC5zZXJpYWxpemUoKV0sZT0wO2U8dGhpcy5sYWJlbHMubGVuZ3RoO2UrKyl0LnB1c2godGhpcy5sYWJlbHNbZV0sdGhpcy5vdXRwdXRzW2VdLnNlcmlhbGl6ZSgpKTtyZXR1cm4gdH07dmFyIE10PWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPXQsdGhpcy5hcmdzPWV9O010LnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MilyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC5cIik7dmFyIHI9bnVsbCxuPWUuZXhwZWN0ZWRUeXBlO24mJlwidmFsdWVcIiE9PW4ua2luZCYmKHI9bik7Zm9yKHZhciBpPVtdLGE9MCxvPXQuc2xpY2UoMSk7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdLGw9ZS5wYXJzZShzLDEraS5sZW5ndGgscix2b2lkIDAse29taXRUeXBlQW5ub3RhdGlvbnM6ITB9KTtpZighbClyZXR1cm4gbnVsbDtyPXJ8fGwudHlwZSxpLnB1c2gobCl9dmFyIGM9biYmaS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiBLKG4sdC50eXBlKX0pO3JldHVybiBuZXcgTXQoYz9XOnIsaSl9LE10LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9bnVsbCxyPTAsbj10aGlzLmFyZ3M7cjxuLmxlbmd0aCYmbnVsbD09PShlPW5bcl0uZXZhbHVhdGUodCkpO3IrPTEpO3JldHVybiBlfSxNdC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3RoaXMuYXJncy5mb3JFYWNoKHQpfSxNdC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuKHQ9W10pLmNvbmNhdC5hcHBseSh0LHRoaXMuYXJncy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucG9zc2libGVPdXRwdXRzKCl9KSk7dmFyIHR9LE10LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD1bXCJjb2FsZXNjZVwiXTtyZXR1cm4gdGhpcy5lYWNoQ2hpbGQoZnVuY3Rpb24oZSl7dC5wdXNoKGUuc2VyaWFsaXplKCkpfSksdH07dmFyIFN0PWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPWUudHlwZSx0aGlzLmJpbmRpbmdzPVtdLmNvbmNhdCh0KSx0aGlzLnJlc3VsdD1lfTtTdC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVzdWx0LmV2YWx1YXRlKHQpfSxTdC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dGhpcy5iaW5kaW5ncztlPHIubGVuZ3RoO2UrPTEpdChyW2VdWzFdKTt0KHRoaXMucmVzdWx0KX0sU3QucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDw0KXJldHVybiBlLmVycm9yKFwiRXhwZWN0ZWQgYXQgbGVhc3QgMyBhcmd1bWVudHMsIGJ1dCBmb3VuZCBcIisodC5sZW5ndGgtMSkrXCIgaW5zdGVhZC5cIik7Zm9yKHZhciByPVtdLG49MTtuPHQubGVuZ3RoLTE7bis9Mil7dmFyIGk9dFtuXTtpZihcInN0cmluZ1wiIT10eXBlb2YgaSlyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIHN0cmluZywgYnV0IGZvdW5kIFwiK3R5cGVvZiBpK1wiIGluc3RlYWQuXCIsbik7aWYoL1teYS16QS1aMC05X10vLnRlc3QoaSkpcmV0dXJuIGUuZXJyb3IoXCJWYXJpYWJsZSBuYW1lcyBtdXN0IGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBvciAnXycuXCIsbik7dmFyIGE9ZS5wYXJzZSh0W24rMV0sbisxKTtpZighYSlyZXR1cm4gbnVsbDtyLnB1c2goW2ksYV0pfXZhciBvPWUucGFyc2UodFt0Lmxlbmd0aC0xXSx0Lmxlbmd0aC0xLHZvaWQgMCxyKTtyZXR1cm4gbz9uZXcgU3QocixvKTpudWxsfSxTdC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVzdWx0LnBvc3NpYmxlT3V0cHV0cygpfSxTdC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtcImxldFwiXSxlPTAscj10aGlzLmJpbmRpbmdzO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXSxpPW5bMF0sYT1uWzFdO3QucHVzaChpLGEuc2VyaWFsaXplKCkpfXJldHVybiB0LnB1c2godGhpcy5yZXN1bHQuc2VyaWFsaXplKCkpLHR9O3ZhciBFdD1mdW5jdGlvbih0LGUscil7dGhpcy50eXBlPXQsdGhpcy5pbmRleD1lLHRoaXMuaW5wdXQ9cn07RXQucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigzIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoXCJFeHBlY3RlZCAyIGFyZ3VtZW50cywgYnV0IGZvdW5kIFwiKyh0Lmxlbmd0aC0xKStcIiBpbnN0ZWFkLlwiKTt2YXIgcj1lLnBhcnNlKHRbMV0sMSxVKSxuPWUucGFyc2UodFsyXSwyLFooZS5leHBlY3RlZFR5cGV8fFcpKTtpZighcnx8IW4pcmV0dXJuIG51bGw7dmFyIGk9bi50eXBlO3JldHVybiBuZXcgRXQoaS5pdGVtVHlwZSxyLG4pfSxFdC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbmRleC5ldmFsdWF0ZSh0KSxyPXRoaXMuaW5wdXQuZXZhbHVhdGUodCk7aWYoZTwwKXRocm93IG5ldyBvdChcIkFycmF5IGluZGV4IG91dCBvZiBib3VuZHM6IFwiK2UrXCIgPCAwLlwiKTtpZihlPj1yLmxlbmd0aCl0aHJvdyBuZXcgb3QoXCJBcnJheSBpbmRleCBvdXQgb2YgYm91bmRzOiBcIitlK1wiID4gXCIrKHIubGVuZ3RoLTEpK1wiLlwiKTtpZihlIT09TWF0aC5mbG9vcihlKSl0aHJvdyBuZXcgb3QoXCJBcnJheSBpbmRleCBtdXN0IGJlIGFuIGludGVnZXIsIGJ1dCBmb3VuZCBcIitlK1wiIGluc3RlYWQuXCIpO3JldHVybiByW2VdfSxFdC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbmRleCksdCh0aGlzLmlucHV0KX0sRXQucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVyblt2b2lkIDBdfSxFdC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuW1wiYXRcIix0aGlzLmluZGV4LnNlcmlhbGl6ZSgpLHRoaXMuaW5wdXQuc2VyaWFsaXplKCldfTt2YXIgQ3Q9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuaW5wdXRUeXBlPXQsdGhpcy50eXBlPWUsdGhpcy5pbnB1dD1yLHRoaXMuY2FzZXM9bix0aGlzLm91dHB1dHM9aSx0aGlzLm90aGVyd2lzZT1hfTtDdC5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDUpcmV0dXJuIGUuZXJyb3IoXCJFeHBlY3RlZCBhdCBsZWFzdCA0IGFyZ3VtZW50cywgYnV0IGZvdW5kIG9ubHkgXCIrKHQubGVuZ3RoLTEpK1wiLlwiKTtpZih0Lmxlbmd0aCUyIT0xKXJldHVybiBlLmVycm9yKFwiRXhwZWN0ZWQgYW4gZXZlbiBudW1iZXIgb2YgYXJndW1lbnRzLlwiKTt2YXIgcixuO2UuZXhwZWN0ZWRUeXBlJiZcInZhbHVlXCIhPT1lLmV4cGVjdGVkVHlwZS5raW5kJiYobj1lLmV4cGVjdGVkVHlwZSk7Zm9yKHZhciBpPXt9LGE9W10sbz0yO288dC5sZW5ndGgtMTtvKz0yKXt2YXIgcz10W29dLGw9dFtvKzFdO0FycmF5LmlzQXJyYXkocyl8fChzPVtzXSk7dmFyIGM9ZS5jb25jYXQobyk7aWYoMD09PXMubGVuZ3RoKXJldHVybiBjLmVycm9yKFwiRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGJyYW5jaCBsYWJlbC5cIik7Zm9yKHZhciB1PTAsaD1zO3U8aC5sZW5ndGg7dSs9MSl7dmFyIGY9aFt1XTtpZihcIm51bWJlclwiIT10eXBlb2YgZiYmXCJzdHJpbmdcIiE9dHlwZW9mIGYpcmV0dXJuIGMuZXJyb3IoXCJCcmFuY2ggbGFiZWxzIG11c3QgYmUgbnVtYmVycyBvciBzdHJpbmdzLlwiKTtpZihcIm51bWJlclwiPT10eXBlb2YgZiYmTWF0aC5hYnMoZik+TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpcmV0dXJuIGMuZXJyb3IoXCJCcmFuY2ggbGFiZWxzIG11c3QgYmUgaW50ZWdlcnMgbm8gbGFyZ2VyIHRoYW4gXCIrTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIrXCIuXCIpO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBmJiZNYXRoLmZsb29yKGYpIT09ZilyZXR1cm4gYy5lcnJvcihcIk51bWVyaWMgYnJhbmNoIGxhYmVscyBtdXN0IGJlIGludGVnZXIgdmFsdWVzLlwiKTtpZihyKXtpZihjLmNoZWNrU3VidHlwZShyLGl0KGYpKSlyZXR1cm4gbnVsbH1lbHNlIHI9aXQoZik7aWYodm9pZCAwIT09aVtTdHJpbmcoZildKXJldHVybiBjLmVycm9yKFwiQnJhbmNoIGxhYmVscyBtdXN0IGJlIHVuaXF1ZS5cIik7aVtTdHJpbmcoZildPWEubGVuZ3RofXZhciBwPWUucGFyc2UobCxvLG4pO2lmKCFwKXJldHVybiBudWxsO249bnx8cC50eXBlLGEucHVzaChwKX12YXIgZD1lLnBhcnNlKHRbMV0sMSxyKTtpZighZClyZXR1cm4gbnVsbDt2YXIgZz1lLnBhcnNlKHRbdC5sZW5ndGgtMV0sdC5sZW5ndGgtMSxuKTtyZXR1cm4gZz9uZXcgQ3QocixuLGQsaSxhLGcpOm51bGx9LEN0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlucHV0LmV2YWx1YXRlKHQpO3JldHVybih0aGlzLm91dHB1dHNbdGhpcy5jYXNlc1tlXV18fHRoaXMub3RoZXJ3aXNlKS5ldmFsdWF0ZSh0KX0sQ3QucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5wdXQpLHRoaXMub3V0cHV0cy5mb3JFYWNoKHQpLHQodGhpcy5vdGhlcndpc2UpfSxDdC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuKHQ9W10pLmNvbmNhdC5hcHBseSh0LHRoaXMub3V0cHV0cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucG9zc2libGVPdXRwdXRzKCl9KSkuY29uY2F0KHRoaXMub3RoZXJ3aXNlLnBvc3NpYmxlT3V0cHV0cygpKTt2YXIgdH0sQ3QucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W1wibWF0Y2hcIix0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXSxyPVtdLG49e30saT0wLGE9T2JqZWN0LmtleXModGhpcy5jYXNlcykuc29ydCgpO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXSxzPW5bdC5jYXNlc1tvXV07dm9pZCAwPT09cz8oblt0LmNhc2VzW29dXT1yLmxlbmd0aCxyLnB1c2goW3QuY2FzZXNbb10sW29dXSkpOnJbc11bMV0ucHVzaChvKX1mb3IodmFyIGw9ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09PXQuaW5wdXQudHlwZS5raW5kP051bWJlcihlKTplfSxjPTAsdT1yO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGg9dVtjXSxmPWhbMF0scD1oWzFdOzE9PT1wLmxlbmd0aD9lLnB1c2gobChwWzBdKSk6ZS5wdXNoKHAubWFwKGwpKSxlLnB1c2godC5vdXRwdXRzW2ZdLnNlcmlhbGl6ZSgpKX1yZXR1cm4gZS5wdXNoKHRoaXMub3RoZXJ3aXNlLnNlcmlhbGl6ZSgpKSxlfTt2YXIgTHQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMudHlwZT10LHRoaXMuYnJhbmNoZXM9ZSx0aGlzLm90aGVyd2lzZT1yfTtmdW5jdGlvbiB6dCh0KXtyZXR1cm5cInN0cmluZ1wiPT09dC5raW5kfHxcIm51bWJlclwiPT09dC5raW5kfHxcImJvb2xlYW5cIj09PXQua2luZHx8XCJudWxsXCI9PT10LmtpbmR9ZnVuY3Rpb24gT3QodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtmdW5jdGlvbiByKHQsZSxyKXt0aGlzLnR5cGU9SCx0aGlzLmxocz10LHRoaXMucmhzPWUsdGhpcy5jb2xsYXRvcj1yfXJldHVybiByLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYoMyE9PXQubGVuZ3RoJiY0IT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoXCJFeHBlY3RlZCB0d28gb3IgdGhyZWUgYXJndW1lbnRzLlwiKTt2YXIgbj1lLnBhcnNlKHRbMV0sMSxXKTtpZighbilyZXR1cm4gbnVsbDt2YXIgaT1lLnBhcnNlKHRbMl0sMixXKTtpZighaSlyZXR1cm4gbnVsbDtpZighenQobi50eXBlKSYmIXp0KGkudHlwZSkpcmV0dXJuIGUuZXJyb3IoXCJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQgdG8gYmUgYSBzdHJpbmcsIG51bWJlciwgYm9vbGVhbiwgb3IgbnVsbCwgYnV0IGZvdW5kIChcIiskKG4udHlwZSkrXCIsIFwiKyQoaS50eXBlKStcIikgaW5zdGVhZC5cIik7aWYobi50eXBlLmtpbmQhPT1pLnR5cGUua2luZCYmXCJ2YWx1ZVwiIT09bi50eXBlLmtpbmQmJlwidmFsdWVcIiE9PWkudHlwZS5raW5kKXJldHVybiBlLmVycm9yKFwiQ2Fubm90IGNvbXBhcmUgXCIrJChuLnR5cGUpK1wiIGFuZCBcIiskKGkudHlwZSkrXCIuXCIpO3ZhciBhPW51bGw7aWYoND09PXQubGVuZ3RoKXtpZihcInN0cmluZ1wiIT09bi50eXBlLmtpbmQmJlwic3RyaW5nXCIhPT1pLnR5cGUua2luZClyZXR1cm4gZS5lcnJvcihcIkNhbm5vdCB1c2UgY29sbGF0b3IgdG8gY29tcGFyZSBub24tc3RyaW5nIHR5cGVzLlwiKTtpZighKGE9ZS5wYXJzZSh0WzNdLDMsWCkpKXJldHVybiBudWxsfXJldHVybiBuZXcgcihuLGksYSl9LHIucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXMuY29sbGF0b3I/MD09PXRoaXMuY29sbGF0b3IuZXZhbHVhdGUodCkuY29tcGFyZSh0aGlzLmxocy5ldmFsdWF0ZSh0KSx0aGlzLnJocy5ldmFsdWF0ZSh0KSk6dGhpcy5saHMuZXZhbHVhdGUodCk9PT10aGlzLnJocy5ldmFsdWF0ZSh0KTtyZXR1cm4gZT8hcjpyfSxyLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmxocyksdCh0aGlzLnJocyksdGhpcy5jb2xsYXRvciYmdCh0aGlzLmNvbGxhdG9yKX0sci5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuWyEwLCExXX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIGU9W3RdO3JldHVybiB0aGlzLmVhY2hDaGlsZChmdW5jdGlvbih0KXtlLnB1c2godC5zZXJpYWxpemUoKSl9KSxlfSxyfSgpfUx0LnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8NClyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIGF0IGxlYXN0IDMgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSBcIisodC5sZW5ndGgtMSkrXCIuXCIpO2lmKHQubGVuZ3RoJTIhPTApcmV0dXJuIGUuZXJyb3IoXCJFeHBlY3RlZCBhbiBvZGQgbnVtYmVyIG9mIGFyZ3VtZW50cy5cIik7dmFyIHI7ZS5leHBlY3RlZFR5cGUmJlwidmFsdWVcIiE9PWUuZXhwZWN0ZWRUeXBlLmtpbmQmJihyPWUuZXhwZWN0ZWRUeXBlKTtmb3IodmFyIG49W10saT0xO2k8dC5sZW5ndGgtMTtpKz0yKXt2YXIgYT1lLnBhcnNlKHRbaV0saSxIKTtpZighYSlyZXR1cm4gbnVsbDt2YXIgbz1lLnBhcnNlKHRbaSsxXSxpKzEscik7aWYoIW8pcmV0dXJuIG51bGw7bi5wdXNoKFthLG9dKSxyPXJ8fG8udHlwZX12YXIgcz1lLnBhcnNlKHRbdC5sZW5ndGgtMV0sdC5sZW5ndGgtMSxyKTtyZXR1cm4gcz9uZXcgTHQocixuLHMpOm51bGx9LEx0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRoaXMuYnJhbmNoZXM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9blswXSxhPW5bMV07aWYoaS5ldmFsdWF0ZSh0KSlyZXR1cm4gYS5ldmFsdWF0ZSh0KX1yZXR1cm4gdGhpcy5vdGhlcndpc2UuZXZhbHVhdGUodCl9LEx0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10aGlzLmJyYW5jaGVzO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXSxpPW5bMF0sYT1uWzFdO3QoaSksdChhKX10KHRoaXMub3RoZXJ3aXNlKX0sTHQucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVybih0PVtdKS5jb25jYXQuYXBwbHkodCx0aGlzLmJyYW5jaGVzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFswXSx0WzFdLnBvc3NpYmxlT3V0cHV0cygpfSkpLmNvbmNhdCh0aGlzLm90aGVyd2lzZS5wb3NzaWJsZU91dHB1dHMoKSk7dmFyIHR9LEx0LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD1bXCJjYXNlXCJdO3JldHVybiB0aGlzLmVhY2hDaGlsZChmdW5jdGlvbihlKXt0LnB1c2goZS5zZXJpYWxpemUoKSl9KSx0fTt2YXIgSXQ9T3QoXCI9PVwiLCExKSxEdD1PdChcIiE9XCIsITApLFB0PWZ1bmN0aW9uKHQpe3RoaXMudHlwZT1VLHRoaXMuaW5wdXQ9dH07UHQucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigyIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoXCJFeHBlY3RlZCAxIGFyZ3VtZW50LCBidXQgZm91bmQgXCIrKHQubGVuZ3RoLTEpK1wiIGluc3RlYWQuXCIpO3ZhciByPWUucGFyc2UodFsxXSwxKTtyZXR1cm4gcj9cImFycmF5XCIhPT1yLnR5cGUua2luZCYmXCJzdHJpbmdcIiE9PXIudHlwZS5raW5kJiZcInZhbHVlXCIhPT1yLnR5cGUua2luZD9lLmVycm9yKFwiRXhwZWN0ZWQgYXJndW1lbnQgb2YgdHlwZSBzdHJpbmcgb3IgYXJyYXksIGJ1dCBmb3VuZCBcIiskKHIudHlwZSkrXCIgaW5zdGVhZC5cIik6bmV3IFB0KHIpOm51bGx9LFB0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlucHV0LmV2YWx1YXRlKHQpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBlLmxlbmd0aDtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlLmxlbmd0aDt0aHJvdyBuZXcgb3QoXCJFeHBlY3RlZCB2YWx1ZSB0byBiZSBvZiB0eXBlIHN0cmluZyBvciBhcnJheSwgYnV0IGZvdW5kIFwiKyQoaXQoZSkpK1wiIGluc3RlYWQuXCIpfSxQdC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbnB1dCl9LFB0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm5bdm9pZCAwXX0sUHQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PVtcImxlbmd0aFwiXTtyZXR1cm4gdGhpcy5lYWNoQ2hpbGQoZnVuY3Rpb24oZSl7dC5wdXNoKGUuc2VyaWFsaXplKCkpfSksdH07dmFyIFJ0PXtcIj09XCI6SXQsXCIhPVwiOkR0LGFycmF5OnV0LGF0OkV0LGJvb2xlYW46bHQsY2FzZTpMdCxjb2FsZXNjZTpNdCxjb2xsYXRvcjpydCxpbnRlcnBvbGF0ZTpBdCxsZW5ndGg6UHQsbGV0OlN0LGxpdGVyYWw6YXQsbWF0Y2g6Q3QsbnVtYmVyOmx0LG9iamVjdDpsdCxzdGVwOl90LHN0cmluZzpsdCxcInRvLWNvbG9yXCI6ZnQsXCJ0by1udW1iZXJcIjpmdCx2YXI6eXR9O2Z1bmN0aW9uIEZ0KHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXTtyPXIuZXZhbHVhdGUodCksbj1uLmV2YWx1YXRlKHQpLGk9aS5ldmFsdWF0ZSh0KTt2YXIgbz1hP2EuZXZhbHVhdGUodCk6MSxzPW50KHIsbixpLG8pO2lmKHMpdGhyb3cgbmV3IG90KHMpO3JldHVybiBuZXcgdHQoci8yNTUqbyxuLzI1NSpvLGkvMjU1Km8sbyl9ZnVuY3Rpb24gQnQodCxlKXtyZXR1cm4gdCBpbiBlfWZ1bmN0aW9uIE50KHQsZSl7dmFyIHI9ZVt0XTtyZXR1cm4gdm9pZCAwPT09cj9udWxsOnJ9ZnVuY3Rpb24ganQodCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KTxuLmV2YWx1YXRlKHQpfWZ1bmN0aW9uIFZ0KHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCk+bi5ldmFsdWF0ZSh0KX1mdW5jdGlvbiBVdCh0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiByLmV2YWx1YXRlKHQpPD1uLmV2YWx1YXRlKHQpfWZ1bmN0aW9uIHF0KHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCk+PW4uZXZhbHVhdGUodCl9ZnVuY3Rpb24gSHQodCl7cmV0dXJue3R5cGU6dH19ZnVuY3Rpb24gR3QodCl7cmV0dXJue3Jlc3VsdDpcInN1Y2Nlc3NcIix2YWx1ZTp0fX1mdW5jdGlvbiBZdCh0KXtyZXR1cm57cmVzdWx0OlwiZXJyb3JcIix2YWx1ZTp0fX1ndC5yZWdpc3RlcihSdCx7ZXJyb3I6W3traW5kOlwiZXJyb3JcIn0sW3FdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTt0aHJvdyBuZXcgb3Qoci5ldmFsdWF0ZSh0KSl9XSx0eXBlb2Y6W3EsW1ddLGZ1bmN0aW9uKHQsZSl7cmV0dXJuICQoaXQoZVswXS5ldmFsdWF0ZSh0KSkpfV0sXCJ0by1zdHJpbmdcIjpbcSxbV10sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49dHlwZW9mKHI9ci5ldmFsdWF0ZSh0KSk7cmV0dXJuIG51bGw9PT1yP1wiXCI6XCJzdHJpbmdcIj09PW58fFwibnVtYmVyXCI9PT1ufHxcImJvb2xlYW5cIj09PW4/U3RyaW5nKHIpOnIgaW5zdGFuY2VvZiB0dD9yLnRvU3RyaW5nKCk6SlNPTi5zdHJpbmdpZnkocil9XSxcInRvLWJvb2xlYW5cIjpbSCxbV10sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBCb29sZWFuKHIuZXZhbHVhdGUodCkpfV0sXCJ0by1yZ2JhXCI6W1ooVSw0KSxbR10sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS5ldmFsdWF0ZSh0KS50b0FycmF5KCl9XSxyZ2I6W0csW1UsVSxVXSxGdF0scmdiYTpbRyxbVSxVLFUsVV0sRnRdLGhhczp7dHlwZTpILG92ZXJsb2FkczpbW1txXSxmdW5jdGlvbih0LGUpe3JldHVybiBCdChlWzBdLmV2YWx1YXRlKHQpLHQucHJvcGVydGllcygpKX1dLFtbcSxZXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiBCdChyLmV2YWx1YXRlKHQpLG4uZXZhbHVhdGUodCkpfV1dfSxnZXQ6e3R5cGU6VyxvdmVybG9hZHM6W1tbcV0sZnVuY3Rpb24odCxlKXtyZXR1cm4gTnQoZVswXS5ldmFsdWF0ZSh0KSx0LnByb3BlcnRpZXMoKSl9XSxbW3EsWV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gTnQoci5ldmFsdWF0ZSh0KSxuLmV2YWx1YXRlKHQpKX1dXX0scHJvcGVydGllczpbWSxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5wcm9wZXJ0aWVzKCl9XSxcImdlb21ldHJ5LXR5cGVcIjpbcSxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZW9tZXRyeVR5cGUoKX1dLGlkOltXLFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkKCl9XSx6b29tOltVLFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdsb2JhbHMuem9vbX1dLFwiaGVhdG1hcC1kZW5zaXR5XCI6W1UsW10sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2xvYmFscy5oZWF0bWFwRGVuc2l0eXx8MH1dLFwibGluZS1wcm9ncmVzc1wiOltVLFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdsb2JhbHMubGluZVByb2dyZXNzfHwwfV0sXCIrXCI6W1UsSHQoVSksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTAsaT1lO248aS5sZW5ndGg7bis9MSlyKz1pW25dLmV2YWx1YXRlKHQpO3JldHVybiByfV0sXCIqXCI6W1UsSHQoVSksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MSxuPTAsaT1lO248aS5sZW5ndGg7bis9MSlyKj1pW25dLmV2YWx1YXRlKHQpO3JldHVybiByfV0sXCItXCI6e3R5cGU6VSxvdmVybG9hZHM6W1tbVSxVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiByLmV2YWx1YXRlKHQpLW4uZXZhbHVhdGUodCl9XSxbW1VdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuLWVbMF0uZXZhbHVhdGUodCl9XV19LFwiL1wiOltVLFtVLFVdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCkvbi5ldmFsdWF0ZSh0KX1dLFwiJVwiOltVLFtVLFVdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCklbi5ldmFsdWF0ZSh0KX1dLGxuMjpbVSxbXSxmdW5jdGlvbigpe3JldHVybiBNYXRoLkxOMn1dLHBpOltVLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguUEl9XSxlOltVLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguRX1dLFwiXlwiOltVLFtVLFVdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIE1hdGgucG93KHIuZXZhbHVhdGUodCksbi5ldmFsdWF0ZSh0KSl9XSxzcXJ0OltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguc3FydChyLmV2YWx1YXRlKHQpKX1dLGxvZzEwOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGgubG9nMTAoci5ldmFsdWF0ZSh0KSl9XSxsbjpbVSxbVV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmxvZyhyLmV2YWx1YXRlKHQpKX1dLGxvZzI6W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5sb2cyKHIuZXZhbHVhdGUodCkpfV0sc2luOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguc2luKHIuZXZhbHVhdGUodCkpfV0sY29zOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguY29zKHIuZXZhbHVhdGUodCkpfV0sdGFuOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGgudGFuKHIuZXZhbHVhdGUodCkpfV0sYXNpbjpbVSxbVV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmFzaW4oci5ldmFsdWF0ZSh0KSl9XSxhY29zOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguYWNvcyhyLmV2YWx1YXRlKHQpKX1dLGF0YW46W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5hdGFuKHIuZXZhbHVhdGUodCkpfV0sbWluOltVLEh0KFUpLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWluLmFwcGx5KE1hdGgsZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXZhbHVhdGUodCl9KSl9XSxtYXg6W1UsSHQoVSksZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXguYXBwbHkoTWF0aCxlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5ldmFsdWF0ZSh0KX0pKX1dLGFiczpbVSxbVV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmFicyhyLmV2YWx1YXRlKHQpKX1dLHJvdW5kOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0uZXZhbHVhdGUodCk7cmV0dXJuIHI8MD8tTWF0aC5yb3VuZCgtcik6TWF0aC5yb3VuZChyKX1dLGZsb29yOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguZmxvb3Ioci5ldmFsdWF0ZSh0KSl9XSxjZWlsOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguY2VpbChyLmV2YWx1YXRlKHQpKX1dLFwiZmlsdGVyLT09XCI6W0gsW3EsV10sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gdC5wcm9wZXJ0aWVzKClbci52YWx1ZV09PT1uLnZhbHVlfV0sXCJmaWx0ZXItaWQtPT1cIjpbSCxbV10sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiB0LmlkKCk9PT1yLnZhbHVlfV0sXCJmaWx0ZXItdHlwZS09PVwiOltILFtxXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIHQuZ2VvbWV0cnlUeXBlKCk9PT1yLnZhbHVlfV0sXCJmaWx0ZXItPFwiOltILFtxLFddLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT10LnByb3BlcnRpZXMoKVtyLnZhbHVlXSxhPW4udmFsdWU7cmV0dXJuIHR5cGVvZiBpPT10eXBlb2YgYSYmaTxhfV0sXCJmaWx0ZXItaWQtPFwiOltILFtXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj10LmlkKCksaT1yLnZhbHVlO3JldHVybiB0eXBlb2Ygbj09dHlwZW9mIGkmJm48aX1dLFwiZmlsdGVyLT5cIjpbSCxbcSxXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9dC5wcm9wZXJ0aWVzKClbci52YWx1ZV0sYT1uLnZhbHVlO3JldHVybiB0eXBlb2YgaT09dHlwZW9mIGEmJmk+YX1dLFwiZmlsdGVyLWlkLT5cIjpbSCxbV10sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49dC5pZCgpLGk9ci52YWx1ZTtyZXR1cm4gdHlwZW9mIG49PXR5cGVvZiBpJiZuPml9XSxcImZpbHRlci08PVwiOltILFtxLFddLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT10LnByb3BlcnRpZXMoKVtyLnZhbHVlXSxhPW4udmFsdWU7cmV0dXJuIHR5cGVvZiBpPT10eXBlb2YgYSYmaTw9YX1dLFwiZmlsdGVyLWlkLTw9XCI6W0gsW1ddLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPXQuaWQoKSxpPXIudmFsdWU7cmV0dXJuIHR5cGVvZiBuPT10eXBlb2YgaSYmbjw9aX1dLFwiZmlsdGVyLT49XCI6W0gsW3EsV10sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPXQucHJvcGVydGllcygpW3IudmFsdWVdLGE9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIGk9PXR5cGVvZiBhJiZpPj1hfV0sXCJmaWx0ZXItaWQtPj1cIjpbSCxbV10sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49dC5pZCgpLGk9ci52YWx1ZTtyZXR1cm4gdHlwZW9mIG49PXR5cGVvZiBpJiZuPj1pfV0sXCJmaWx0ZXItaGFzXCI6W0gsW1ddLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0udmFsdWUgaW4gdC5wcm9wZXJ0aWVzKCl9XSxcImZpbHRlci1oYXMtaWRcIjpbSCxbXSxmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9PXQuaWQoKX1dLFwiZmlsdGVyLXR5cGUtaW5cIjpbSCxbWihxKV0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS52YWx1ZS5pbmRleE9mKHQuZ2VvbWV0cnlUeXBlKCkpPj0wfV0sXCJmaWx0ZXItaWQtaW5cIjpbSCxbWihXKV0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS52YWx1ZS5pbmRleE9mKHQuaWQoKSk+PTB9XSxcImZpbHRlci1pbi1zbWFsbFwiOltILFtxLFooVyldLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gZVsxXS52YWx1ZS5pbmRleE9mKHQucHJvcGVydGllcygpW3IudmFsdWVdKT49MH1dLFwiZmlsdGVyLWluLWxhcmdlXCI6W0gsW3EsWihXKV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbil7Zm9yKDtyPD1uOyl7dmFyIGk9cituPj4xO2lmKGVbaV09PT10KXJldHVybiEwO2VbaV0+dD9uPWktMTpyPWkrMX1yZXR1cm4hMX0odC5wcm9wZXJ0aWVzKClbci52YWx1ZV0sbi52YWx1ZSwwLG4udmFsdWUubGVuZ3RoLTEpfV0sXCI+XCI6e3R5cGU6SCxvdmVybG9hZHM6W1tbVSxVXSxWdF0sW1txLHFdLFZ0XSxbW3EscSxYXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiBlWzJdLmV2YWx1YXRlKHQpLmNvbXBhcmUoci5ldmFsdWF0ZSh0KSxuLmV2YWx1YXRlKHQpKT4wfV1dfSxcIjxcIjp7dHlwZTpILG92ZXJsb2FkczpbW1tVLFVdLGp0XSxbW3EscV0sanRdLFtbcSxxLFhdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIGVbMl0uZXZhbHVhdGUodCkuY29tcGFyZShyLmV2YWx1YXRlKHQpLG4uZXZhbHVhdGUodCkpPDB9XV19LFwiPj1cIjp7dHlwZTpILG92ZXJsb2FkczpbW1tVLFVdLHF0XSxbW3EscV0scXRdLFtbcSxxLFhdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIGVbMl0uZXZhbHVhdGUodCkuY29tcGFyZShyLmV2YWx1YXRlKHQpLG4uZXZhbHVhdGUodCkpPj0wfV1dfSxcIjw9XCI6e3R5cGU6SCxvdmVybG9hZHM6W1tbVSxVXSxVdF0sW1txLHFdLFV0XSxbW3EscSxYXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiBlWzJdLmV2YWx1YXRlKHQpLmNvbXBhcmUoci5ldmFsdWF0ZSh0KSxuLmV2YWx1YXRlKHQpKTw9MH1dXX0sYWxsOnt0eXBlOkgsb3ZlcmxvYWRzOltbW0gsSF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KSYmbi5ldmFsdWF0ZSh0KX1dLFtIdChIKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49ZTtyPG4ubGVuZ3RoO3IrPTEpaWYoIW5bcl0uZXZhbHVhdGUodCkpcmV0dXJuITE7cmV0dXJuITB9XV19LGFueTp7dHlwZTpILG92ZXJsb2FkczpbW1tILEhdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCl8fG4uZXZhbHVhdGUodCl9XSxbSHQoSCksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKz0xKWlmKG5bcl0uZXZhbHVhdGUodCkpcmV0dXJuITA7cmV0dXJuITF9XV19LFwiIVwiOltILFtIXSxmdW5jdGlvbih0LGUpe3JldHVybiFlWzBdLmV2YWx1YXRlKHQpfV0sXCJpcy1zdXBwb3J0ZWQtc2NyaXB0XCI6W0gsW3FdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPXQuZ2xvYmFscyYmdC5nbG9iYWxzLmlzU3VwcG9ydGVkU2NyaXB0O3JldHVybiFufHxuKHIuZXZhbHVhdGUodCkpfV0sdXBjYXNlOltxLFtxXSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLmV2YWx1YXRlKHQpLnRvVXBwZXJDYXNlKCl9XSxkb3duY2FzZTpbcSxbcV0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS5ldmFsdWF0ZSh0KS50b0xvd2VyQ2FzZSgpfV0sY29uY2F0OltxLEh0KHEpLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmV2YWx1YXRlKHQpfSkuam9pbihcIlwiKX1dLFwicmVzb2x2ZWQtbG9jYWxlXCI6W3EsW1hdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0uZXZhbHVhdGUodCkucmVzb2x2ZWRMb2NhbGUoKX1dfSk7dmFyIFd0PS45NTA0NyxYdD0xLFp0PTEuMDg4ODMsJHQ9NC8yOSxKdD02LzI5LEt0PTMqSnQqSnQsUXQ9SnQqSnQqSnQsdGU9TWF0aC5QSS8xODAsZWU9MTgwL01hdGguUEk7ZnVuY3Rpb24gcmUodCl7cmV0dXJuIHQ+UXQ/TWF0aC5wb3codCwxLzMpOnQvS3QrJHR9ZnVuY3Rpb24gbmUodCl7cmV0dXJuIHQ+SnQ/dCp0KnQ6S3QqKHQtJHQpfWZ1bmN0aW9uIGllKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gYWUodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gb2UodCl7dmFyIGU9YWUodC5yKSxyPWFlKHQuZyksbj1hZSh0LmIpLGk9cmUoKC40MTI0NTY0KmUrLjM1NzU3NjEqcisuMTgwNDM3NSpuKS9XdCksYT1yZSgoLjIxMjY3MjkqZSsuNzE1MTUyMipyKy4wNzIxNzUqbikvWHQpO3JldHVybntsOjExNiphLTE2LGE6NTAwKihpLWEpLGI6MjAwKihhLXJlKCguMDE5MzMzOSplKy4xMTkxOTIqcisuOTUwMzA0MSpuKS9adCkpLGFscGhhOnQuYX19ZnVuY3Rpb24gc2UodCl7dmFyIGU9KHQubCsxNikvMTE2LHI9aXNOYU4odC5hKT9lOmUrdC5hLzUwMCxuPWlzTmFOKHQuYik/ZTplLXQuYi8yMDA7cmV0dXJuIGU9WHQqbmUoZSkscj1XdCpuZShyKSxuPVp0Km5lKG4pLG5ldyB0dChpZSgzLjI0MDQ1NDIqci0xLjUzNzEzODUqZS0uNDk4NTMxNCpuKSxpZSgtLjk2OTI2NipyKzEuODc2MDEwOCplKy4wNDE1NTYqbiksaWUoLjA1NTY0MzQqci0uMjA0MDI1OSplKzEuMDU3MjI1MipuKSx0LmFscGhhKX12YXIgbGU9e2ZvcndhcmQ6b2UscmV2ZXJzZTpzZSxpbnRlcnBvbGF0ZTpmdW5jdGlvbih0LGUscil7cmV0dXJue2w6d3QodC5sLGUubCxyKSxhOnd0KHQuYSxlLmEsciksYjp3dCh0LmIsZS5iLHIpLGFscGhhOnd0KHQuYWxwaGEsZS5hbHBoYSxyKX19fSxjZT17Zm9yd2FyZDpmdW5jdGlvbih0KXt2YXIgZT1vZSh0KSxyPWUubCxuPWUuYSxpPWUuYixhPU1hdGguYXRhbjIoaSxuKSplZTtyZXR1cm57aDphPDA/YSszNjA6YSxjOk1hdGguc3FydChuKm4raSppKSxsOnIsYWxwaGE6dC5hfX0scmV2ZXJzZTpmdW5jdGlvbih0KXt2YXIgZT10LmgqdGUscj10LmM7cmV0dXJuIHNlKHtsOnQubCxhOk1hdGguY29zKGUpKnIsYjpNYXRoLnNpbihlKSpyLGFscGhhOnQuYWxwaGF9KX0saW50ZXJwb2xhdGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybntoOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLXQ7cmV0dXJuIHQrcioobj4xODB8fG48LTE4MD9uLTM2MCpNYXRoLnJvdW5kKG4vMzYwKTpuKX0odC5oLGUuaCxyKSxjOnd0KHQuYyxlLmMsciksbDp3dCh0LmwsZS5sLHIpLGFscGhhOnd0KHQuYWxwaGEsZS5hbHBoYSxyKX19fSx1ZT1PYmplY3QuZnJlZXplKHtsYWI6bGUsaGNsOmNlfSk7ZnVuY3Rpb24gaGUodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBOdW1iZXI/XCJudW1iZXJcIjp0IGluc3RhbmNlb2YgU3RyaW5nP1wic3RyaW5nXCI6dCBpbnN0YW5jZW9mIEJvb2xlYW4/XCJib29sZWFuXCI6QXJyYXkuaXNBcnJheSh0KT9cImFycmF5XCI6bnVsbD09PXQ/XCJudWxsXCI6dHlwZW9mIHR9ZnVuY3Rpb24gZmUodCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHQmJm51bGwhPT10JiYhQXJyYXkuaXNBcnJheSh0KX1mdW5jdGlvbiBwZSh0KXtyZXR1cm4gdH1mdW5jdGlvbiBkZSh0LGUscil7cmV0dXJuIHZvaWQgMCE9PXQ/dDp2b2lkIDAhPT1lP2U6dm9pZCAwIT09cj9yOnZvaWQgMH1mdW5jdGlvbiBnZSh0LGUscixuLGkpe3JldHVybiBkZSh0eXBlb2Ygcj09PWk/bltyXTp2b2lkIDAsdC5kZWZhdWx0LGUuZGVmYXVsdCl9ZnVuY3Rpb24gdmUodCxlLHIpe2lmKFwibnVtYmVyXCIhPT1oZShyKSlyZXR1cm4gZGUodC5kZWZhdWx0LGUuZGVmYXVsdCk7dmFyIG49dC5zdG9wcy5sZW5ndGg7aWYoMT09PW4pcmV0dXJuIHQuc3RvcHNbMF1bMV07aWYocjw9dC5zdG9wc1swXVswXSlyZXR1cm4gdC5zdG9wc1swXVsxXTtpZihyPj10LnN0b3BzW24tMV1bMF0pcmV0dXJuIHQuc3RvcHNbbi0xXVsxXTt2YXIgaT14ZSh0LnN0b3BzLHIpO3JldHVybiB0LnN0b3BzW2ldWzFdfWZ1bmN0aW9uIG1lKHQsZSxyKXt2YXIgbj12b2lkIDAhPT10LmJhc2U/dC5iYXNlOjE7aWYoXCJudW1iZXJcIiE9PWhlKHIpKXJldHVybiBkZSh0LmRlZmF1bHQsZS5kZWZhdWx0KTt2YXIgaT10LnN0b3BzLmxlbmd0aDtpZigxPT09aSlyZXR1cm4gdC5zdG9wc1swXVsxXTtpZihyPD10LnN0b3BzWzBdWzBdKXJldHVybiB0LnN0b3BzWzBdWzFdO2lmKHI+PXQuc3RvcHNbaS0xXVswXSlyZXR1cm4gdC5zdG9wc1tpLTFdWzFdO3ZhciBhPXhlKHQuc3RvcHMsciksbz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLXIsYT10LXI7cmV0dXJuIDA9PT1pPzA6MT09PWU/YS9pOihNYXRoLnBvdyhlLGEpLTEpLyhNYXRoLnBvdyhlLGkpLTEpfShyLG4sdC5zdG9wc1thXVswXSx0LnN0b3BzW2ErMV1bMF0pLHM9dC5zdG9wc1thXVsxXSxsPXQuc3RvcHNbYSsxXVsxXSxjPWt0W2UudHlwZV18fHBlO2lmKHQuY29sb3JTcGFjZSYmXCJyZ2JcIiE9PXQuY29sb3JTcGFjZSl7dmFyIHU9dWVbdC5jb2xvclNwYWNlXTtjPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUucmV2ZXJzZSh1LmludGVycG9sYXRlKHUuZm9yd2FyZCh0KSx1LmZvcndhcmQoZSksbykpfX1yZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBzLmV2YWx1YXRlP3tldmFsdWF0ZTpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPWFyZ3VtZW50cy5sZW5ndGg7ZS0tOyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgcj1zLmV2YWx1YXRlLmFwcGx5KHZvaWQgMCx0KSxuPWwuZXZhbHVhdGUuYXBwbHkodm9pZCAwLHQpO2lmKHZvaWQgMCE9PXImJnZvaWQgMCE9PW4pcmV0dXJuIGMocixuLG8pfX06YyhzLGwsbyl9ZnVuY3Rpb24geWUodCxlLHIpe3JldHVyblwiY29sb3JcIj09PWUudHlwZT9yPXR0LnBhcnNlKHIpOmhlKHIpPT09ZS50eXBlfHxcImVudW1cIj09PWUudHlwZSYmZS52YWx1ZXNbcl18fChyPXZvaWQgMCksZGUocix0LmRlZmF1bHQsZS5kZWZhdWx0KX1mdW5jdGlvbiB4ZSh0LGUpe2Zvcih2YXIgcixuLGk9MCxhPXQubGVuZ3RoLTEsbz0wO2k8PWE7KXtpZihyPXRbbz1NYXRoLmZsb29yKChpK2EpLzIpXVswXSxuPXRbbysxXVswXSxlPT09cnx8ZT5yJiZlPG4pcmV0dXJuIG87cjxlP2k9bysxOnI+ZSYmKGE9by0xKX1yZXR1cm4gTWF0aC5tYXgoby0xLDApfXZhciBiZT1mdW5jdGlvbih0LGUpe3ZhciByO3RoaXMuZXhwcmVzc2lvbj10LHRoaXMuX3dhcm5pbmdIaXN0b3J5PXt9LHRoaXMuX2RlZmF1bHRWYWx1ZT1cImNvbG9yXCI9PT0ocj1lKS50eXBlJiZmZShyLmRlZmF1bHQpP25ldyB0dCgwLDAsMCwwKTpcImNvbG9yXCI9PT1yLnR5cGU/dHQucGFyc2Uoci5kZWZhdWx0KXx8bnVsbDp2b2lkIDA9PT1yLmRlZmF1bHQ/bnVsbDpyLmRlZmF1bHQsXCJlbnVtXCI9PT1lLnR5cGUmJih0aGlzLl9lbnVtVmFsdWVzPWUudmFsdWVzKX07ZnVuY3Rpb24gX2UodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJnQubGVuZ3RoPjAmJlwic3RyaW5nXCI9PXR5cGVvZiB0WzBdJiZ0WzBdaW4gUnR9ZnVuY3Rpb24gd2UodCxlKXt2YXIgcj1uZXcgeHQoUnQsW10sZnVuY3Rpb24odCl7dmFyIGU9e2NvbG9yOkcsc3RyaW5nOnEsbnVtYmVyOlUsZW51bTpxLGJvb2xlYW46SH07cmV0dXJuXCJhcnJheVwiPT09dC50eXBlP1ooZVt0LnZhbHVlXXx8Vyx0Lmxlbmd0aCk6ZVt0LnR5cGVdfHxudWxsfShlKSksbj1yLnBhcnNlKHQpO3JldHVybiBuP0d0KG5ldyBiZShuLGUpKTpZdChyLmVycm9ycyl9YmUucHJvdG90eXBlLmV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fZXZhbHVhdG9yfHwodGhpcy5fZXZhbHVhdG9yPW5ldyBkdCksdGhpcy5fZXZhbHVhdG9yLmdsb2JhbHM9dCx0aGlzLl9ldmFsdWF0b3IuZmVhdHVyZT1lLHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh0aGlzLl9ldmFsdWF0b3IpfSxiZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCxlKXt0aGlzLl9ldmFsdWF0b3J8fCh0aGlzLl9ldmFsdWF0b3I9bmV3IGR0KSx0aGlzLl9ldmFsdWF0b3IuZ2xvYmFscz10LHRoaXMuX2V2YWx1YXRvci5mZWF0dXJlPWU7dHJ5e3ZhciByPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh0aGlzLl9ldmFsdWF0b3IpO2lmKG51bGw9PXIpcmV0dXJuIHRoaXMuX2RlZmF1bHRWYWx1ZTtpZih0aGlzLl9lbnVtVmFsdWVzJiYhKHIgaW4gdGhpcy5fZW51bVZhbHVlcykpdGhyb3cgbmV3IG90KFwiRXhwZWN0ZWQgdmFsdWUgdG8gYmUgb25lIG9mIFwiK09iamVjdC5rZXlzKHRoaXMuX2VudW1WYWx1ZXMpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCl9KS5qb2luKFwiLCBcIikrXCIsIGJ1dCBmb3VuZCBcIitKU09OLnN0cmluZ2lmeShyKStcIiBpbnN0ZWFkLlwiKTtyZXR1cm4gcn1jYXRjaCh0KXtyZXR1cm4gdGhpcy5fd2FybmluZ0hpc3RvcnlbdC5tZXNzYWdlXXx8KHRoaXMuX3dhcm5pbmdIaXN0b3J5W3QubWVzc2FnZV09ITAsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUud2Fybih0Lm1lc3NhZ2UpKSx0aGlzLl9kZWZhdWx0VmFsdWV9fTt2YXIga2U9ZnVuY3Rpb24odCxlKXt0aGlzLmtpbmQ9dCx0aGlzLl9zdHlsZUV4cHJlc3Npb249ZX07a2UucHJvdG90eXBlLmV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmcodCxlKX0sa2UucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3N0eWxlRXhwcmVzc2lvbi5ldmFsdWF0ZSh0LGUpfTt2YXIgQWU9ZnVuY3Rpb24odCxlLHIpe3RoaXMua2luZD10LHRoaXMuem9vbVN0b3BzPXIubGFiZWxzLHRoaXMuX3N0eWxlRXhwcmVzc2lvbj1lLHIgaW5zdGFuY2VvZiBBdCYmKHRoaXMuX2ludGVycG9sYXRpb25UeXBlPXIuaW50ZXJwb2xhdGlvbil9O2Z1bmN0aW9uIFRlKHQsZSl7aWYoXCJlcnJvclwiPT09KHQ9d2UodCxlKSkucmVzdWx0KXJldHVybiB0O3ZhciByPXQudmFsdWUuZXhwcmVzc2lvbixuPXZ0KHIpO2lmKCFuJiYhZVtcInByb3BlcnR5LWZ1bmN0aW9uXCJdKXJldHVybiBZdChbbmV3IE4oXCJcIixcInByb3BlcnR5IGV4cHJlc3Npb25zIG5vdCBzdXBwb3J0ZWRcIildKTt2YXIgaT1tdChyLFtcInpvb21cIl0pO2lmKCFpJiYhMT09PWVbXCJ6b29tLWZ1bmN0aW9uXCJdKXJldHVybiBZdChbbmV3IE4oXCJcIixcInpvb20gZXhwcmVzc2lvbnMgbm90IHN1cHBvcnRlZFwiKV0pO3ZhciBhPWZ1bmN0aW9uIHQoZSl7dmFyIHI9bnVsbDtpZihlIGluc3RhbmNlb2YgU3Qpcj10KGUucmVzdWx0KTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBNdClmb3IodmFyIG49MCxpPWUuYXJncztuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07aWYocj10KGEpKWJyZWFrfWVsc2UoZSBpbnN0YW5jZW9mIF90fHxlIGluc3RhbmNlb2YgQXQpJiZlLmlucHV0IGluc3RhbmNlb2YgZ3QmJlwiem9vbVwiPT09ZS5pbnB1dC5uYW1lJiYocj1lKTtyZXR1cm4gciBpbnN0YW5jZW9mIE4/cjooZS5lYWNoQ2hpbGQoZnVuY3Rpb24oZSl7dmFyIG49dChlKTtuIGluc3RhbmNlb2YgTj9yPW46IXImJm4/cj1uZXcgTihcIlwiLCdcInpvb21cIiBleHByZXNzaW9uIG1heSBvbmx5IGJlIHVzZWQgYXMgaW5wdXQgdG8gYSB0b3AtbGV2ZWwgXCJzdGVwXCIgb3IgXCJpbnRlcnBvbGF0ZVwiIGV4cHJlc3Npb24uJyk6ciYmbiYmciE9PW4mJihyPW5ldyBOKFwiXCIsJ09ubHkgb25lIHpvb20tYmFzZWQgXCJzdGVwXCIgb3IgXCJpbnRlcnBvbGF0ZVwiIHN1YmV4cHJlc3Npb24gbWF5IGJlIHVzZWQgaW4gYW4gZXhwcmVzc2lvbi4nKSl9KSxyKX0ocik7cmV0dXJuIGF8fGk/YSBpbnN0YW5jZW9mIE4/WXQoW2FdKTphIGluc3RhbmNlb2YgQXQmJlwicGllY2V3aXNlLWNvbnN0YW50XCI9PT1lLmZ1bmN0aW9uP1l0KFtuZXcgTihcIlwiLCdcImludGVycG9sYXRlXCIgZXhwcmVzc2lvbnMgY2Fubm90IGJlIHVzZWQgd2l0aCB0aGlzIHByb3BlcnR5JyldKTpHdChhP25ldyBBZShuP1wiY2FtZXJhXCI6XCJjb21wb3NpdGVcIix0LnZhbHVlLGEpOm5ldyBrZShuP1wiY29uc3RhbnRcIjpcInNvdXJjZVwiLHQudmFsdWUpKTpZdChbbmV3IE4oXCJcIiwnXCJ6b29tXCIgZXhwcmVzc2lvbiBtYXkgb25seSBiZSB1c2VkIGFzIGlucHV0IHRvIGEgdG9wLWxldmVsIFwic3RlcFwiIG9yIFwiaW50ZXJwb2xhdGVcIiBleHByZXNzaW9uLicpXSl9QWUucHJvdG90eXBlLmV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmcodCxlKX0sQWUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3N0eWxlRXhwcmVzc2lvbi5ldmFsdWF0ZSh0LGUpfSxBZS5wcm90b3R5cGUuaW50ZXJwb2xhdGlvbkZhY3Rvcj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX2ludGVycG9sYXRpb25UeXBlP0F0LmludGVycG9sYXRpb25GYWN0b3IodGhpcy5faW50ZXJwb2xhdGlvblR5cGUsdCxlLHIpOjB9O3ZhciBNZT1mdW5jdGlvbih0LGUpe3RoaXMuX3BhcmFtZXRlcnM9dCx0aGlzLl9zcGVjaWZpY2F0aW9uPWUsUih0aGlzLGZ1bmN0aW9uIHQoZSxyKXt2YXIgbixpLGEsbz1cImNvbG9yXCI9PT1yLnR5cGUscz1lLnN0b3BzJiZcIm9iamVjdFwiPT10eXBlb2YgZS5zdG9wc1swXVswXSxsPXN8fHZvaWQgMCE9PWUucHJvcGVydHksYz1zfHwhbCx1PWUudHlwZXx8KFwiaW50ZXJwb2xhdGVkXCI9PT1yLmZ1bmN0aW9uP1wiZXhwb25lbnRpYWxcIjpcImludGVydmFsXCIpO2lmKG8mJigoZT1SKHt9LGUpKS5zdG9wcyYmKGUuc3RvcHM9ZS5zdG9wcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0sdHQucGFyc2UodFsxXSldfSkpLGUuZGVmYXVsdD9lLmRlZmF1bHQ9dHQucGFyc2UoZS5kZWZhdWx0KTplLmRlZmF1bHQ9dHQucGFyc2Uoci5kZWZhdWx0KSksZS5jb2xvclNwYWNlJiZcInJnYlwiIT09ZS5jb2xvclNwYWNlJiYhdWVbZS5jb2xvclNwYWNlXSl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGNvbG9yIHNwYWNlOiBcIitlLmNvbG9yU3BhY2UpO2lmKFwiZXhwb25lbnRpYWxcIj09PXUpbj1tZTtlbHNlIGlmKFwiaW50ZXJ2YWxcIj09PXUpbj12ZTtlbHNlIGlmKFwiY2F0ZWdvcmljYWxcIj09PXUpe249Z2UsaT1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgaD0wLGY9ZS5zdG9wcztoPGYubGVuZ3RoO2grPTEpe3ZhciBwPWZbaF07aVtwWzBdXT1wWzFdfWE9dHlwZW9mIGUuc3RvcHNbMF1bMF19ZWxzZXtpZihcImlkZW50aXR5XCIhPT11KXRocm93IG5ldyBFcnJvcignVW5rbm93biBmdW5jdGlvbiB0eXBlIFwiJyt1KydcIicpO249eWV9aWYocyl7Zm9yKHZhciBkPXt9LGc9W10sdj0wO3Y8ZS5zdG9wcy5sZW5ndGg7disrKXt2YXIgbT1lLnN0b3BzW3ZdLHk9bVswXS56b29tO3ZvaWQgMD09PWRbeV0mJihkW3ldPXt6b29tOnksdHlwZTplLnR5cGUscHJvcGVydHk6ZS5wcm9wZXJ0eSxkZWZhdWx0OmUuZGVmYXVsdCxzdG9wczpbXX0sZy5wdXNoKHkpKSxkW3ldLnN0b3BzLnB1c2goW21bMF0udmFsdWUsbVsxXV0pfWZvcih2YXIgeD1bXSxiPTAsXz1nO2I8Xy5sZW5ndGg7Yis9MSl7dmFyIHc9X1tiXTt4LnB1c2goW2Rbd10uem9vbSx0KGRbd10scildKX1yZXR1cm57a2luZDpcImNvbXBvc2l0ZVwiLGludGVycG9sYXRpb25GYWN0b3I6QXQuaW50ZXJwb2xhdGlvbkZhY3Rvci5iaW5kKHZvaWQgMCx7bmFtZTpcImxpbmVhclwifSksem9vbVN0b3BzOngubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSksZXZhbHVhdGU6ZnVuY3Rpb24odCxuKXt2YXIgaT10Lnpvb207cmV0dXJuIG1lKHtzdG9wczp4LGJhc2U6ZS5iYXNlfSxyLGkpLmV2YWx1YXRlKGksbil9fX1yZXR1cm4gYz97a2luZDpcImNhbWVyYVwiLGludGVycG9sYXRpb25GYWN0b3I6XCJleHBvbmVudGlhbFwiPT09dT9BdC5pbnRlcnBvbGF0aW9uRmFjdG9yLmJpbmQodm9pZCAwLHtuYW1lOlwiZXhwb25lbnRpYWxcIixiYXNlOnZvaWQgMCE9PWUuYmFzZT9lLmJhc2U6MX0pOmZ1bmN0aW9uKCl7cmV0dXJuIDB9LHpvb21TdG9wczplLnN0b3BzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pLGV2YWx1YXRlOmZ1bmN0aW9uKHQpe3ZhciBvPXQuem9vbTtyZXR1cm4gbihlLHIsbyxpLGEpfX06e2tpbmQ6XCJzb3VyY2VcIixldmFsdWF0ZTpmdW5jdGlvbih0LG8pe3ZhciBzPW8mJm8ucHJvcGVydGllcz9vLnByb3BlcnRpZXNbZS5wcm9wZXJ0eV06dm9pZCAwO3JldHVybiB2b2lkIDA9PT1zP2RlKGUuZGVmYXVsdCxyLmRlZmF1bHQpOm4oZSxyLHMsaSxhKX19fSh0aGlzLl9wYXJhbWV0ZXJzLHRoaXMuX3NwZWNpZmljYXRpb24pKX07ZnVuY3Rpb24gU2UodCxlKXtpZihmZSh0KSlyZXR1cm4gbmV3IE1lKHQsZSk7aWYoX2UodCkpe3ZhciByPVRlKHQsZSk7aWYoXCJlcnJvclwiPT09ci5yZXN1bHQpdGhyb3cgbmV3IEVycm9yKHIudmFsdWUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleStcIjogXCIrdC5tZXNzYWdlfSkuam9pbihcIiwgXCIpKTtyZXR1cm4gci52YWx1ZX12YXIgbj10O3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiZcImNvbG9yXCI9PT1lLnR5cGUmJihuPXR0LnBhcnNlKHQpKSx7a2luZDpcImNvbnN0YW50XCIsZXZhbHVhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gbn19fWZ1bmN0aW9uIEVlKHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZSxuPXQudmFsdWVTcGVjfHx7fSxpPXQub2JqZWN0RWxlbWVudFZhbGlkYXRvcnN8fHt9LGE9dC5zdHlsZSxvPXQuc3R5bGVTcGVjLHM9W10sbD1oZShyKTtpZihcIm9iamVjdFwiIT09bClyZXR1cm5bbmV3IEQoZSxyLFwib2JqZWN0IGV4cGVjdGVkLCBcIitsK1wiIGZvdW5kXCIpXTtmb3IodmFyIGMgaW4gcil7dmFyIHU9Yy5zcGxpdChcIi5cIilbMF0saD1uW3VdfHxuW1wiKlwiXSxmPXZvaWQgMDtpZihpW3VdKWY9aVt1XTtlbHNlIGlmKG5bdV0pZj1LZTtlbHNlIGlmKGlbXCIqXCJdKWY9aVtcIipcIl07ZWxzZXtpZighbltcIipcIl0pe3MucHVzaChuZXcgRChlLHJbY10sJ3Vua25vd24gcHJvcGVydHkgXCInK2MrJ1wiJykpO2NvbnRpbnVlfWY9S2V9cz1zLmNvbmNhdChmKHtrZXk6KGU/ZStcIi5cIjplKStjLHZhbHVlOnJbY10sdmFsdWVTcGVjOmgsc3R5bGU6YSxzdHlsZVNwZWM6byxvYmplY3Q6cixvYmplY3RLZXk6Y30scikpfWZvcih2YXIgcCBpbiBuKWlbcF18fG5bcF0ucmVxdWlyZWQmJnZvaWQgMD09PW5bcF0uZGVmYXVsdCYmdm9pZCAwPT09cltwXSYmcy5wdXNoKG5ldyBEKGUsciwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSBcIicrcCsnXCInKSk7cmV0dXJuIHN9ZnVuY3Rpb24gQ2UodCl7dmFyIGU9dC52YWx1ZSxyPXQudmFsdWVTcGVjLG49dC5zdHlsZSxpPXQuc3R5bGVTcGVjLGE9dC5rZXksbz10LmFycmF5RWxlbWVudFZhbGlkYXRvcnx8S2U7aWYoXCJhcnJheVwiIT09aGUoZSkpcmV0dXJuW25ldyBEKGEsZSxcImFycmF5IGV4cGVjdGVkLCBcIitoZShlKStcIiBmb3VuZFwiKV07aWYoci5sZW5ndGgmJmUubGVuZ3RoIT09ci5sZW5ndGgpcmV0dXJuW25ldyBEKGEsZSxcImFycmF5IGxlbmd0aCBcIityLmxlbmd0aCtcIiBleHBlY3RlZCwgbGVuZ3RoIFwiK2UubGVuZ3RoK1wiIGZvdW5kXCIpXTtpZihyW1wibWluLWxlbmd0aFwiXSYmZS5sZW5ndGg8cltcIm1pbi1sZW5ndGhcIl0pcmV0dXJuW25ldyBEKGEsZSxcImFycmF5IGxlbmd0aCBhdCBsZWFzdCBcIityW1wibWluLWxlbmd0aFwiXStcIiBleHBlY3RlZCwgbGVuZ3RoIFwiK2UubGVuZ3RoK1wiIGZvdW5kXCIpXTt2YXIgcz17dHlwZTpyLnZhbHVlfTtpLiR2ZXJzaW9uPDcmJihzLmZ1bmN0aW9uPXIuZnVuY3Rpb24pLFwib2JqZWN0XCI9PT1oZShyLnZhbHVlKSYmKHM9ci52YWx1ZSk7Zm9yKHZhciBsPVtdLGM9MDtjPGUubGVuZ3RoO2MrKylsPWwuY29uY2F0KG8oe2FycmF5OmUsYXJyYXlJbmRleDpjLHZhbHVlOmVbY10sdmFsdWVTcGVjOnMsc3R5bGU6bixzdHlsZVNwZWM6aSxrZXk6YStcIltcIitjK1wiXVwifSkpO3JldHVybiBsfWZ1bmN0aW9uIExlKHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZSxuPXQudmFsdWVTcGVjLGk9aGUocik7cmV0dXJuXCJudW1iZXJcIiE9PWk/W25ldyBEKGUscixcIm51bWJlciBleHBlY3RlZCwgXCIraStcIiBmb3VuZFwiKV06XCJtaW5pbXVtXCJpbiBuJiZyPG4ubWluaW11bT9bbmV3IEQoZSxyLHIrXCIgaXMgbGVzcyB0aGFuIHRoZSBtaW5pbXVtIHZhbHVlIFwiK24ubWluaW11bSldOlwibWF4aW11bVwiaW4gbiYmcj5uLm1heGltdW0/W25ldyBEKGUscixyK1wiIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSB2YWx1ZSBcIituLm1heGltdW0pXTpbXX1mdW5jdGlvbiB6ZSh0KXt2YXIgZSxyLG4saT10LnZhbHVlU3BlYyxhPUYodC52YWx1ZS50eXBlKSxvPXt9LHM9XCJjYXRlZ29yaWNhbFwiIT09YSYmdm9pZCAwPT09dC52YWx1ZS5wcm9wZXJ0eSxsPSFzLGM9XCJhcnJheVwiPT09aGUodC52YWx1ZS5zdG9wcykmJlwiYXJyYXlcIj09PWhlKHQudmFsdWUuc3RvcHNbMF0pJiZcIm9iamVjdFwiPT09aGUodC52YWx1ZS5zdG9wc1swXVswXSksdT1FZSh7a2V5OnQua2V5LHZhbHVlOnQudmFsdWUsdmFsdWVTcGVjOnQuc3R5bGVTcGVjLmZ1bmN0aW9uLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOntzdG9wczpmdW5jdGlvbih0KXtpZihcImlkZW50aXR5XCI9PT1hKXJldHVybltuZXcgRCh0LmtleSx0LnZhbHVlLCdpZGVudGl0eSBmdW5jdGlvbiBtYXkgbm90IGhhdmUgYSBcInN0b3BzXCIgcHJvcGVydHknKV07dmFyIGU9W10scj10LnZhbHVlO3JldHVybiBlPWUuY29uY2F0KENlKHtrZXk6dC5rZXksdmFsdWU6cix2YWx1ZVNwZWM6dC52YWx1ZVNwZWMsc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsYXJyYXlFbGVtZW50VmFsaWRhdG9yOmh9KSksXCJhcnJheVwiPT09aGUocikmJjA9PT1yLmxlbmd0aCYmZS5wdXNoKG5ldyBEKHQua2V5LHIsXCJhcnJheSBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHN0b3BcIikpLGV9LGRlZmF1bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIEtlKHtrZXk6dC5rZXksdmFsdWU6dC52YWx1ZSx2YWx1ZVNwZWM6aSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlY30pfX19KTtyZXR1cm5cImlkZW50aXR5XCI9PT1hJiZzJiZ1LnB1c2gobmV3IEQodC5rZXksdC52YWx1ZSwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSBcInByb3BlcnR5XCInKSksXCJpZGVudGl0eVwiPT09YXx8dC52YWx1ZS5zdG9wc3x8dS5wdXNoKG5ldyBEKHQua2V5LHQudmFsdWUsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgXCJzdG9wc1wiJykpLFwiZXhwb25lbnRpYWxcIj09PWEmJlwicGllY2V3aXNlLWNvbnN0YW50XCI9PT10LnZhbHVlU3BlYy5mdW5jdGlvbiYmdS5wdXNoKG5ldyBEKHQua2V5LHQudmFsdWUsXCJleHBvbmVudGlhbCBmdW5jdGlvbnMgbm90IHN1cHBvcnRlZFwiKSksdC5zdHlsZVNwZWMuJHZlcnNpb24+PTgmJihsJiYhdC52YWx1ZVNwZWNbXCJwcm9wZXJ0eS1mdW5jdGlvblwiXT91LnB1c2gobmV3IEQodC5rZXksdC52YWx1ZSxcInByb3BlcnR5IGZ1bmN0aW9ucyBub3Qgc3VwcG9ydGVkXCIpKTpzJiYhdC52YWx1ZVNwZWNbXCJ6b29tLWZ1bmN0aW9uXCJdJiZcImhlYXRtYXAtY29sb3JcIiE9PXQub2JqZWN0S2V5JiZcImxpbmUtZ3JhZGllbnRcIiE9PXQub2JqZWN0S2V5JiZ1LnB1c2gobmV3IEQodC5rZXksdC52YWx1ZSxcInpvb20gZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWRcIikpKSxcImNhdGVnb3JpY2FsXCIhPT1hJiYhY3x8dm9pZCAwIT09dC52YWx1ZS5wcm9wZXJ0eXx8dS5wdXNoKG5ldyBEKHQua2V5LHQudmFsdWUsJ1wicHJvcGVydHlcIiBwcm9wZXJ0eSBpcyByZXF1aXJlZCcpKSx1O2Z1bmN0aW9uIGgodCl7dmFyIGU9W10sYT10LnZhbHVlLHM9dC5rZXk7aWYoXCJhcnJheVwiIT09aGUoYSkpcmV0dXJuW25ldyBEKHMsYSxcImFycmF5IGV4cGVjdGVkLCBcIitoZShhKStcIiBmb3VuZFwiKV07aWYoMiE9PWEubGVuZ3RoKXJldHVybltuZXcgRChzLGEsXCJhcnJheSBsZW5ndGggMiBleHBlY3RlZCwgbGVuZ3RoIFwiK2EubGVuZ3RoK1wiIGZvdW5kXCIpXTtpZihjKXtpZihcIm9iamVjdFwiIT09aGUoYVswXSkpcmV0dXJuW25ldyBEKHMsYSxcIm9iamVjdCBleHBlY3RlZCwgXCIraGUoYVswXSkrXCIgZm91bmRcIildO2lmKHZvaWQgMD09PWFbMF0uem9vbSlyZXR1cm5bbmV3IEQocyxhLFwib2JqZWN0IHN0b3Aga2V5IG11c3QgaGF2ZSB6b29tXCIpXTtpZih2b2lkIDA9PT1hWzBdLnZhbHVlKXJldHVybltuZXcgRChzLGEsXCJvYmplY3Qgc3RvcCBrZXkgbXVzdCBoYXZlIHZhbHVlXCIpXTtpZihuJiZuPkYoYVswXS56b29tKSlyZXR1cm5bbmV3IEQocyxhWzBdLnpvb20sXCJzdG9wIHpvb20gdmFsdWVzIG11c3QgYXBwZWFyIGluIGFzY2VuZGluZyBvcmRlclwiKV07RihhWzBdLnpvb20pIT09biYmKG49RihhWzBdLnpvb20pLHI9dm9pZCAwLG89e30pLGU9ZS5jb25jYXQoRWUoe2tleTpzK1wiWzBdXCIsdmFsdWU6YVswXSx2YWx1ZVNwZWM6e3pvb206e319LHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOnt6b29tOkxlLHZhbHVlOmZ9fSkpfWVsc2UgZT1lLmNvbmNhdChmKHtrZXk6cytcIlswXVwiLHZhbHVlOmFbMF0sdmFsdWVTcGVjOnt9LHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjfSxhKSk7cmV0dXJuIGUuY29uY2F0KEtlKHtrZXk6cytcIlsxXVwiLHZhbHVlOmFbMV0sdmFsdWVTcGVjOmksc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWN9KSl9ZnVuY3Rpb24gZih0LG4pe3ZhciBzPWhlKHQudmFsdWUpLGw9Rih0LnZhbHVlKSxjPW51bGwhPT10LnZhbHVlP3QudmFsdWU6bjtpZihlKXtpZihzIT09ZSlyZXR1cm5bbmV3IEQodC5rZXksYyxzK1wiIHN0b3AgZG9tYWluIHR5cGUgbXVzdCBtYXRjaCBwcmV2aW91cyBzdG9wIGRvbWFpbiB0eXBlIFwiK2UpXX1lbHNlIGU9cztpZihcIm51bWJlclwiIT09cyYmXCJzdHJpbmdcIiE9PXMmJlwiYm9vbGVhblwiIT09cylyZXR1cm5bbmV3IEQodC5rZXksYyxcInN0b3AgZG9tYWluIHZhbHVlIG11c3QgYmUgYSBudW1iZXIsIHN0cmluZywgb3IgYm9vbGVhblwiKV07aWYoXCJudW1iZXJcIiE9PXMmJlwiY2F0ZWdvcmljYWxcIiE9PWEpe3ZhciB1PVwibnVtYmVyIGV4cGVjdGVkLCBcIitzK1wiIGZvdW5kXCI7cmV0dXJuIGlbXCJwcm9wZXJ0eS1mdW5jdGlvblwiXSYmdm9pZCAwPT09YSYmKHUrPSdcXG5JZiB5b3UgaW50ZW5kZWQgdG8gdXNlIGEgY2F0ZWdvcmljYWwgZnVuY3Rpb24sIHNwZWNpZnkgYFwidHlwZVwiOiBcImNhdGVnb3JpY2FsXCJgLicpLFtuZXcgRCh0LmtleSxjLHUpXX1yZXR1cm5cImNhdGVnb3JpY2FsXCIhPT1hfHxcIm51bWJlclwiIT09c3x8aXNGaW5pdGUobCkmJk1hdGguZmxvb3IobCk9PT1sP1wiY2F0ZWdvcmljYWxcIiE9PWEmJlwibnVtYmVyXCI9PT1zJiZ2b2lkIDAhPT1yJiZsPHI/W25ldyBEKHQua2V5LGMsXCJzdG9wIGRvbWFpbiB2YWx1ZXMgbXVzdCBhcHBlYXIgaW4gYXNjZW5kaW5nIG9yZGVyXCIpXToocj1sLFwiY2F0ZWdvcmljYWxcIj09PWEmJmwgaW4gbz9bbmV3IEQodC5rZXksYyxcInN0b3AgZG9tYWluIHZhbHVlcyBtdXN0IGJlIHVuaXF1ZVwiKV06KG9bbF09ITAsW10pKTpbbmV3IEQodC5rZXksYyxcImludGVnZXIgZXhwZWN0ZWQsIGZvdW5kIFwiK2wpXX19ZnVuY3Rpb24gT2UodCl7dmFyIGU9KFwicHJvcGVydHlcIj09PXQuZXhwcmVzc2lvbkNvbnRleHQ/VGU6d2UpKEIodC52YWx1ZSksdC52YWx1ZVNwZWMpO3JldHVyblwiZXJyb3JcIj09PWUucmVzdWx0P2UudmFsdWUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRChcIlwiK3Qua2V5K2Uua2V5LHQudmFsdWUsZS5tZXNzYWdlKX0pOlwicHJvcGVydHlcIj09PXQuZXhwcmVzc2lvbkNvbnRleHQmJlwidGV4dC1mb250XCI9PT10LnByb3BlcnR5S2V5JiYtMSE9PWUudmFsdWUuX3N0eWxlRXhwcmVzc2lvbi5leHByZXNzaW9uLnBvc3NpYmxlT3V0cHV0cygpLmluZGV4T2Yodm9pZCAwKT9bbmV3IEQodC5rZXksdC52YWx1ZSwnSW52YWxpZCBkYXRhIGV4cHJlc3Npb24gZm9yIFwidGV4dC1mb250XCIuIE91dHB1dCB2YWx1ZXMgbXVzdCBiZSBjb250YWluZWQgYXMgbGl0ZXJhbHMgd2l0aGluIHRoZSBleHByZXNzaW9uLicpXTpbXX1mdW5jdGlvbiBJZSh0KXt2YXIgZT10LmtleSxyPXQudmFsdWUsbj10LnZhbHVlU3BlYyxpPVtdO3JldHVybiBBcnJheS5pc0FycmF5KG4udmFsdWVzKT8tMT09PW4udmFsdWVzLmluZGV4T2YoRihyKSkmJmkucHVzaChuZXcgRChlLHIsXCJleHBlY3RlZCBvbmUgb2YgW1wiK24udmFsdWVzLmpvaW4oXCIsIFwiKStcIl0sIFwiK0pTT04uc3RyaW5naWZ5KHIpK1wiIGZvdW5kXCIpKTotMT09PU9iamVjdC5rZXlzKG4udmFsdWVzKS5pbmRleE9mKEYocikpJiZpLnB1c2gobmV3IEQoZSxyLFwiZXhwZWN0ZWQgb25lIG9mIFtcIitPYmplY3Qua2V5cyhuLnZhbHVlcykuam9pbihcIiwgXCIpK1wiXSwgXCIrSlNPTi5zdHJpbmdpZnkocikrXCIgZm91bmRcIikpLGl9ZnVuY3Rpb24gRGUodCl7aWYoIUFycmF5LmlzQXJyYXkodCl8fDA9PT10Lmxlbmd0aClyZXR1cm4hMTtzd2l0Y2godFswXSl7Y2FzZVwiaGFzXCI6cmV0dXJuIHQubGVuZ3RoPj0yJiZcIiRpZFwiIT09dFsxXSYmXCIkdHlwZVwiIT09dFsxXTtjYXNlXCJpblwiOmNhc2VcIiFpblwiOmNhc2VcIiFoYXNcIjpjYXNlXCJub25lXCI6cmV0dXJuITE7Y2FzZVwiPT1cIjpjYXNlXCIhPVwiOmNhc2VcIj5cIjpjYXNlXCI+PVwiOmNhc2VcIjxcIjpjYXNlXCI8PVwiOnJldHVybiAzPT09dC5sZW5ndGgmJihBcnJheS5pc0FycmF5KHRbMV0pfHxBcnJheS5pc0FycmF5KHRbMl0pKTtjYXNlXCJhbnlcIjpjYXNlXCJhbGxcIjpmb3IodmFyIGU9MCxyPXQuc2xpY2UoMSk7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdO2lmKCFEZShuKSYmXCJib29sZWFuXCIhPXR5cGVvZiBuKXJldHVybiExfXJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITB9fU1lLmRlc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTWUodC5fcGFyYW1ldGVycyx0Ll9zcGVjaWZpY2F0aW9uKX0sTWUuc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybntfcGFyYW1ldGVyczp0Ll9wYXJhbWV0ZXJzLF9zcGVjaWZpY2F0aW9uOnQuX3NwZWNpZmljYXRpb259fTt2YXIgUGU9e3R5cGU6XCJib29sZWFuXCIsZGVmYXVsdDohMSxmdW5jdGlvbjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsXCJ6b29tLWZ1bmN0aW9uXCI6ITB9O2Z1bmN0aW9uIFJlKHQpe2lmKCF0KXJldHVybiBmdW5jdGlvbigpe3JldHVybiEwfTtEZSh0KXx8KHQ9QmUodCkpO3ZhciBlPXdlKHQsUGUpO2lmKFwiZXJyb3JcIj09PWUucmVzdWx0KXRocm93IG5ldyBFcnJvcihlLnZhbHVlLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXkrXCI6IFwiK3QubWVzc2FnZX0pLmpvaW4oXCIsIFwiKSk7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIGUudmFsdWUuZXZhbHVhdGUodCxyKX19ZnVuY3Rpb24gRmUodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9ZnVuY3Rpb24gQmUodCl7aWYoIXQpcmV0dXJuITA7dmFyIGUscj10WzBdO3JldHVybiB0Lmxlbmd0aDw9MT9cImFueVwiIT09cjpcIj09XCI9PT1yP05lKHRbMV0sdFsyXSxcIj09XCIpOlwiIT1cIj09PXI/VWUoTmUodFsxXSx0WzJdLFwiPT1cIikpOlwiPFwiPT09cnx8XCI+XCI9PT1yfHxcIjw9XCI9PT1yfHxcIj49XCI9PT1yP05lKHRbMV0sdFsyXSxyKTpcImFueVwiPT09cj8oZT10LnNsaWNlKDEpLFtcImFueVwiXS5jb25jYXQoZS5tYXAoQmUpKSk6XCJhbGxcIj09PXI/W1wiYWxsXCJdLmNvbmNhdCh0LnNsaWNlKDEpLm1hcChCZSkpOlwibm9uZVwiPT09cj9bXCJhbGxcIl0uY29uY2F0KHQuc2xpY2UoMSkubWFwKEJlKS5tYXAoVWUpKTpcImluXCI9PT1yP2plKHRbMV0sdC5zbGljZSgyKSk6XCIhaW5cIj09PXI/VWUoamUodFsxXSx0LnNsaWNlKDIpKSk6XCJoYXNcIj09PXI/VmUodFsxXSk6XCIhaGFzXCIhPT1yfHxVZShWZSh0WzFdKSl9ZnVuY3Rpb24gTmUodCxlLHIpe3N3aXRjaCh0KXtjYXNlXCIkdHlwZVwiOnJldHVybltcImZpbHRlci10eXBlLVwiK3IsZV07Y2FzZVwiJGlkXCI6cmV0dXJuW1wiZmlsdGVyLWlkLVwiK3IsZV07ZGVmYXVsdDpyZXR1cm5bXCJmaWx0ZXItXCIrcix0LGVdfX1mdW5jdGlvbiBqZSh0LGUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4hMTtzd2l0Y2godCl7Y2FzZVwiJHR5cGVcIjpyZXR1cm5bXCJmaWx0ZXItdHlwZS1pblwiLFtcImxpdGVyYWxcIixlXV07Y2FzZVwiJGlkXCI6cmV0dXJuW1wiZmlsdGVyLWlkLWluXCIsW1wibGl0ZXJhbFwiLGVdXTtkZWZhdWx0OnJldHVybiBlLmxlbmd0aD4yMDAmJiFlLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0IT10eXBlb2YgZVswXX0pP1tcImZpbHRlci1pbi1sYXJnZVwiLHQsW1wibGl0ZXJhbFwiLGUuc29ydChGZSldXTpbXCJmaWx0ZXItaW4tc21hbGxcIix0LFtcImxpdGVyYWxcIixlXV19fWZ1bmN0aW9uIFZlKHQpe3N3aXRjaCh0KXtjYXNlXCIkdHlwZVwiOnJldHVybiEwO2Nhc2VcIiRpZFwiOnJldHVybltcImZpbHRlci1oYXMtaWRcIl07ZGVmYXVsdDpyZXR1cm5bXCJmaWx0ZXItaGFzXCIsdF19fWZ1bmN0aW9uIFVlKHQpe3JldHVybltcIiFcIix0XX1mdW5jdGlvbiBxZSh0KXtyZXR1cm4gRGUoQih0LnZhbHVlKSk/T2UoUih7fSx0LHtleHByZXNzaW9uQ29udGV4dDpcImZpbHRlclwiLHZhbHVlU3BlYzp7dmFsdWU6XCJib29sZWFuXCJ9fSkpOmZ1bmN0aW9uIHQoZSl7dmFyIHI9ZS52YWx1ZSxuPWUua2V5O2lmKFwiYXJyYXlcIiE9PWhlKHIpKXJldHVybltuZXcgRChuLHIsXCJhcnJheSBleHBlY3RlZCwgXCIraGUocikrXCIgZm91bmRcIildO3ZhciBpLGE9ZS5zdHlsZVNwZWMsbz1bXTtpZihyLmxlbmd0aDwxKXJldHVybltuZXcgRChuLHIsXCJmaWx0ZXIgYXJyYXkgbXVzdCBoYXZlIGF0IGxlYXN0IDEgZWxlbWVudFwiKV07c3dpdGNoKG89by5jb25jYXQoSWUoe2tleTpuK1wiWzBdXCIsdmFsdWU6clswXSx2YWx1ZVNwZWM6YS5maWx0ZXJfb3BlcmF0b3Isc3R5bGU6ZS5zdHlsZSxzdHlsZVNwZWM6ZS5zdHlsZVNwZWN9KSksRihyWzBdKSl7Y2FzZVwiPFwiOmNhc2VcIjw9XCI6Y2FzZVwiPlwiOmNhc2VcIj49XCI6ci5sZW5ndGg+PTImJlwiJHR5cGVcIj09PUYoclsxXSkmJm8ucHVzaChuZXcgRChuLHIsJ1wiJHR5cGVcIiBjYW5ub3QgYmUgdXNlIHdpdGggb3BlcmF0b3IgXCInK3JbMF0rJ1wiJykpO2Nhc2VcIj09XCI6Y2FzZVwiIT1cIjozIT09ci5sZW5ndGgmJm8ucHVzaChuZXcgRChuLHIsJ2ZpbHRlciBhcnJheSBmb3Igb3BlcmF0b3IgXCInK3JbMF0rJ1wiIG11c3QgaGF2ZSAzIGVsZW1lbnRzJykpO2Nhc2VcImluXCI6Y2FzZVwiIWluXCI6ci5sZW5ndGg+PTImJlwic3RyaW5nXCIhPT0oaT1oZShyWzFdKSkmJm8ucHVzaChuZXcgRChuK1wiWzFdXCIsclsxXSxcInN0cmluZyBleHBlY3RlZCwgXCIraStcIiBmb3VuZFwiKSk7Zm9yKHZhciBzPTI7czxyLmxlbmd0aDtzKyspaT1oZShyW3NdKSxcIiR0eXBlXCI9PT1GKHJbMV0pP289by5jb25jYXQoSWUoe2tleTpuK1wiW1wiK3MrXCJdXCIsdmFsdWU6cltzXSx2YWx1ZVNwZWM6YS5nZW9tZXRyeV90eXBlLHN0eWxlOmUuc3R5bGUsc3R5bGVTcGVjOmUuc3R5bGVTcGVjfSkpOlwic3RyaW5nXCIhPT1pJiZcIm51bWJlclwiIT09aSYmXCJib29sZWFuXCIhPT1pJiZvLnB1c2gobmV3IEQobitcIltcIitzK1wiXVwiLHJbc10sXCJzdHJpbmcsIG51bWJlciwgb3IgYm9vbGVhbiBleHBlY3RlZCwgXCIraStcIiBmb3VuZFwiKSk7YnJlYWs7Y2FzZVwiYW55XCI6Y2FzZVwiYWxsXCI6Y2FzZVwibm9uZVwiOmZvcih2YXIgbD0xO2w8ci5sZW5ndGg7bCsrKW89by5jb25jYXQodCh7a2V5Om4rXCJbXCIrbCtcIl1cIix2YWx1ZTpyW2xdLHN0eWxlOmUuc3R5bGUsc3R5bGVTcGVjOmUuc3R5bGVTcGVjfSkpO2JyZWFrO2Nhc2VcImhhc1wiOmNhc2VcIiFoYXNcIjppPWhlKHJbMV0pLDIhPT1yLmxlbmd0aD9vLnB1c2gobmV3IEQobixyLCdmaWx0ZXIgYXJyYXkgZm9yIFwiJytyWzBdKydcIiBvcGVyYXRvciBtdXN0IGhhdmUgMiBlbGVtZW50cycpKTpcInN0cmluZ1wiIT09aSYmby5wdXNoKG5ldyBEKG4rXCJbMV1cIixyWzFdLFwic3RyaW5nIGV4cGVjdGVkLCBcIitpK1wiIGZvdW5kXCIpKX1yZXR1cm4gb30odCl9ZnVuY3Rpb24gSGUodCxlKXt2YXIgcj10LmtleSxuPXQuc3R5bGUsaT10LnN0eWxlU3BlYyxhPXQudmFsdWUsbz10Lm9iamVjdEtleSxzPWlbZStcIl9cIit0LmxheWVyVHlwZV07aWYoIXMpcmV0dXJuW107dmFyIGw9by5tYXRjaCgvXiguKiktdHJhbnNpdGlvbiQvKTtpZihcInBhaW50XCI9PT1lJiZsJiZzW2xbMV1dJiZzW2xbMV1dLnRyYW5zaXRpb24pcmV0dXJuIEtlKHtrZXk6cix2YWx1ZTphLHZhbHVlU3BlYzppLnRyYW5zaXRpb24sc3R5bGU6bixzdHlsZVNwZWM6aX0pO3ZhciBjLHU9dC52YWx1ZVNwZWN8fHNbb107aWYoIXUpcmV0dXJuW25ldyBEKHIsYSwndW5rbm93biBwcm9wZXJ0eSBcIicrbysnXCInKV07aWYoXCJzdHJpbmdcIj09PWhlKGEpJiZ1W1wicHJvcGVydHktZnVuY3Rpb25cIl0mJiF1LnRva2VucyYmKGM9L157KFtefV0rKX0kLy5leGVjKGEpKSlyZXR1cm5bbmV3IEQocixhLCdcIicrbysnXCIgZG9lcyBub3Qgc3VwcG9ydCBpbnRlcnBvbGF0aW9uIHN5bnRheFxcblVzZSBhbiBpZGVudGl0eSBwcm9wZXJ0eSBmdW5jdGlvbiBpbnN0ZWFkOiBgeyBcInR5cGVcIjogXCJpZGVudGl0eVwiLCBcInByb3BlcnR5XCI6ICcrSlNPTi5zdHJpbmdpZnkoY1sxXSkrXCIgfWAuXCIpXTt2YXIgaD1bXTtyZXR1cm5cInN5bWJvbFwiPT09dC5sYXllclR5cGUmJihcInRleHQtZmllbGRcIj09PW8mJm4mJiFuLmdseXBocyYmaC5wdXNoKG5ldyBEKHIsYSwndXNlIG9mIFwidGV4dC1maWVsZFwiIHJlcXVpcmVzIGEgc3R5bGUgXCJnbHlwaHNcIiBwcm9wZXJ0eScpKSxcInRleHQtZm9udFwiPT09byYmZmUoQihhKSkmJlwiaWRlbnRpdHlcIj09PUYoYS50eXBlKSYmaC5wdXNoKG5ldyBEKHIsYSwnXCJ0ZXh0LWZvbnRcIiBkb2VzIG5vdCBzdXBwb3J0IGlkZW50aXR5IGZ1bmN0aW9ucycpKSksaC5jb25jYXQoS2Uoe2tleTp0LmtleSx2YWx1ZTphLHZhbHVlU3BlYzp1LHN0eWxlOm4sc3R5bGVTcGVjOmksZXhwcmVzc2lvbkNvbnRleHQ6XCJwcm9wZXJ0eVwiLHByb3BlcnR5S2V5Om99KSl9ZnVuY3Rpb24gR2UodCl7cmV0dXJuIEhlKHQsXCJwYWludFwiKX1mdW5jdGlvbiBZZSh0KXtyZXR1cm4gSGUodCxcImxheW91dFwiKX1mdW5jdGlvbiBXZSh0KXt2YXIgZT1bXSxyPXQudmFsdWUsbj10LmtleSxpPXQuc3R5bGUsYT10LnN0eWxlU3BlYztyLnR5cGV8fHIucmVmfHxlLnB1c2gobmV3IEQobixyLCdlaXRoZXIgXCJ0eXBlXCIgb3IgXCJyZWZcIiBpcyByZXF1aXJlZCcpKTt2YXIgbyxzPUYoci50eXBlKSxsPUYoci5yZWYpO2lmKHIuaWQpZm9yKHZhciBjPUYoci5pZCksdT0wO3U8dC5hcnJheUluZGV4O3UrKyl7dmFyIGg9aS5sYXllcnNbdV07RihoLmlkKT09PWMmJmUucHVzaChuZXcgRChuLHIuaWQsJ2R1cGxpY2F0ZSBsYXllciBpZCBcIicrci5pZCsnXCIsIHByZXZpb3VzbHkgdXNlZCBhdCBsaW5lICcraC5pZC5fX2xpbmVfXykpfWlmKFwicmVmXCJpbiByKVtcInR5cGVcIixcInNvdXJjZVwiLFwic291cmNlLWxheWVyXCIsXCJmaWx0ZXJcIixcImxheW91dFwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QgaW4gciYmZS5wdXNoKG5ldyBEKG4sclt0XSwnXCInK3QrJ1wiIGlzIHByb2hpYml0ZWQgZm9yIHJlZiBsYXllcnMnKSl9KSxpLmxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe0YodC5pZCk9PT1sJiYobz10KX0pLG8/by5yZWY/ZS5wdXNoKG5ldyBEKG4sci5yZWYsXCJyZWYgY2Fubm90IHJlZmVyZW5jZSBhbm90aGVyIHJlZiBsYXllclwiKSk6cz1GKG8udHlwZSk6ZS5wdXNoKG5ldyBEKG4sci5yZWYsJ3JlZiBsYXllciBcIicrbCsnXCIgbm90IGZvdW5kJykpO2Vsc2UgaWYoXCJiYWNrZ3JvdW5kXCIhPT1zKWlmKHIuc291cmNlKXt2YXIgZj1pLnNvdXJjZXMmJmkuc291cmNlc1tyLnNvdXJjZV0scD1mJiZGKGYudHlwZSk7Zj9cInZlY3RvclwiPT09cCYmXCJyYXN0ZXJcIj09PXM/ZS5wdXNoKG5ldyBEKG4sci5zb3VyY2UsJ2xheWVyIFwiJytyLmlkKydcIiByZXF1aXJlcyBhIHJhc3RlciBzb3VyY2UnKSk6XCJyYXN0ZXJcIj09PXAmJlwicmFzdGVyXCIhPT1zP2UucHVzaChuZXcgRChuLHIuc291cmNlLCdsYXllciBcIicrci5pZCsnXCIgcmVxdWlyZXMgYSB2ZWN0b3Igc291cmNlJykpOlwidmVjdG9yXCIhPT1wfHxyW1wic291cmNlLWxheWVyXCJdP1wicmFzdGVyLWRlbVwiPT09cCYmXCJoaWxsc2hhZGVcIiE9PXM/ZS5wdXNoKG5ldyBEKG4sci5zb3VyY2UsXCJyYXN0ZXItZGVtIHNvdXJjZSBjYW4gb25seSBiZSB1c2VkIHdpdGggbGF5ZXIgdHlwZSAnaGlsbHNoYWRlJy5cIikpOlwibGluZVwiIT09c3x8IXIucGFpbnR8fCFyLnBhaW50W1wibGluZS1ncmFkaWVudFwiXXx8XCJnZW9qc29uXCI9PT1wJiZmLmxpbmVNZXRyaWNzfHxlLnB1c2gobmV3IEQobixyLCdsYXllciBcIicrci5pZCsnXCIgc3BlY2lmaWVzIGEgbGluZS1ncmFkaWVudCwgd2hpY2ggcmVxdWlyZXMgYSBHZW9KU09OIHNvdXJjZSB3aXRoIGBsaW5lTWV0cmljc2AgZW5hYmxlZC4nKSk6ZS5wdXNoKG5ldyBEKG4sciwnbGF5ZXIgXCInK3IuaWQrJ1wiIG11c3Qgc3BlY2lmeSBhIFwic291cmNlLWxheWVyXCInKSk6ZS5wdXNoKG5ldyBEKG4sci5zb3VyY2UsJ3NvdXJjZSBcIicrci5zb3VyY2UrJ1wiIG5vdCBmb3VuZCcpKX1lbHNlIGUucHVzaChuZXcgRChuLHIsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgXCJzb3VyY2VcIicpKTtyZXR1cm4gZT1lLmNvbmNhdChFZSh7a2V5Om4sdmFsdWU6cix2YWx1ZVNwZWM6YS5sYXllcixzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7XCIqXCI6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sdHlwZTpmdW5jdGlvbigpe3JldHVybiBLZSh7a2V5Om4rXCIudHlwZVwiLHZhbHVlOnIudHlwZSx2YWx1ZVNwZWM6YS5sYXllci50eXBlLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdDpyLG9iamVjdEtleTpcInR5cGVcIn0pfSxmaWx0ZXI6cWUsbGF5b3V0OmZ1bmN0aW9uKHQpe3JldHVybiBFZSh7bGF5ZXI6cixrZXk6dC5rZXksdmFsdWU6dC52YWx1ZSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7XCIqXCI6ZnVuY3Rpb24odCl7cmV0dXJuIFllKFIoe2xheWVyVHlwZTpzfSx0KSl9fX0pfSxwYWludDpmdW5jdGlvbih0KXtyZXR1cm4gRWUoe2xheWVyOnIsa2V5OnQua2V5LHZhbHVlOnQudmFsdWUsc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6e1wiKlwiOmZ1bmN0aW9uKHQpe3JldHVybiBHZShSKHtsYXllclR5cGU6c30sdCkpfX19KX19fSkpfWZ1bmN0aW9uIFhlKHQpe3ZhciBlPXQudmFsdWUscj10LmtleSxuPXQuc3R5bGVTcGVjLGk9dC5zdHlsZTtpZighZS50eXBlKXJldHVybltuZXcgRChyLGUsJ1widHlwZVwiIGlzIHJlcXVpcmVkJyldO3ZhciBhPUYoZS50eXBlKSxvPVtdO3N3aXRjaChhKXtjYXNlXCJ2ZWN0b3JcIjpjYXNlXCJyYXN0ZXJcIjpjYXNlXCJyYXN0ZXItZGVtXCI6aWYobz1vLmNvbmNhdChFZSh7a2V5OnIsdmFsdWU6ZSx2YWx1ZVNwZWM6bltcInNvdXJjZV9cIithLnJlcGxhY2UoXCItXCIsXCJfXCIpXSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzpufSkpLFwidXJsXCJpbiBlKWZvcih2YXIgcyBpbiBlKVtcInR5cGVcIixcInVybFwiLFwidGlsZVNpemVcIl0uaW5kZXhPZihzKTwwJiZvLnB1c2gobmV3IEQocitcIi5cIitzLGVbc10sJ2Egc291cmNlIHdpdGggYSBcInVybFwiIHByb3BlcnR5IG1heSBub3QgaW5jbHVkZSBhIFwiJytzKydcIiBwcm9wZXJ0eScpKTtyZXR1cm4gbztjYXNlXCJnZW9qc29uXCI6cmV0dXJuIEVlKHtrZXk6cix2YWx1ZTplLHZhbHVlU3BlYzpuLnNvdXJjZV9nZW9qc29uLHN0eWxlOmksc3R5bGVTcGVjOm59KTtjYXNlXCJ2aWRlb1wiOnJldHVybiBFZSh7a2V5OnIsdmFsdWU6ZSx2YWx1ZVNwZWM6bi5zb3VyY2VfdmlkZW8sc3R5bGU6aSxzdHlsZVNwZWM6bn0pO2Nhc2VcImltYWdlXCI6cmV0dXJuIEVlKHtrZXk6cix2YWx1ZTplLHZhbHVlU3BlYzpuLnNvdXJjZV9pbWFnZSxzdHlsZTppLHN0eWxlU3BlYzpufSk7Y2FzZVwiY2FudmFzXCI6cmV0dXJuIG8ucHVzaChuZXcgRChyLG51bGwsXCJQbGVhc2UgdXNlIHJ1bnRpbWUgQVBJcyB0byBhZGQgY2FudmFzIHNvdXJjZXMsIHJhdGhlciB0aGFuIGluY2x1ZGluZyB0aGVtIGluIHN0eWxlc2hlZXRzLlwiLFwic291cmNlLmNhbnZhc1wiKSksbztkZWZhdWx0OnJldHVybiBJZSh7a2V5OnIrXCIudHlwZVwiLHZhbHVlOmUudHlwZSx2YWx1ZVNwZWM6e3ZhbHVlczpbXCJ2ZWN0b3JcIixcInJhc3RlclwiLFwicmFzdGVyLWRlbVwiLFwiZ2VvanNvblwiLFwidmlkZW9cIixcImltYWdlXCJdfSxzdHlsZTppLHN0eWxlU3BlYzpufSl9fWZ1bmN0aW9uIFplKHQpe3ZhciBlPXQudmFsdWUscj10LnN0eWxlU3BlYyxuPXIubGlnaHQsaT10LnN0eWxlLGE9W10sbz1oZShlKTtpZih2b2lkIDA9PT1lKXJldHVybiBhO2lmKFwib2JqZWN0XCIhPT1vKXJldHVybiBhLmNvbmNhdChbbmV3IEQoXCJsaWdodFwiLGUsXCJvYmplY3QgZXhwZWN0ZWQsIFwiK28rXCIgZm91bmRcIildKTtmb3IodmFyIHMgaW4gZSl7dmFyIGw9cy5tYXRjaCgvXiguKiktdHJhbnNpdGlvbiQvKTthPWwmJm5bbFsxXV0mJm5bbFsxXV0udHJhbnNpdGlvbj9hLmNvbmNhdChLZSh7a2V5OnMsdmFsdWU6ZVtzXSx2YWx1ZVNwZWM6ci50cmFuc2l0aW9uLHN0eWxlOmksc3R5bGVTcGVjOnJ9KSk6bltzXT9hLmNvbmNhdChLZSh7a2V5OnMsdmFsdWU6ZVtzXSx2YWx1ZVNwZWM6bltzXSxzdHlsZTppLHN0eWxlU3BlYzpyfSkpOmEuY29uY2F0KFtuZXcgRChzLGVbc10sJ3Vua25vd24gcHJvcGVydHkgXCInK3MrJ1wiJyldKX1yZXR1cm4gYX1mdW5jdGlvbiAkZSh0KXt2YXIgZT10LnZhbHVlLHI9dC5rZXksbj1oZShlKTtyZXR1cm5cInN0cmluZ1wiIT09bj9bbmV3IEQocixlLFwic3RyaW5nIGV4cGVjdGVkLCBcIituK1wiIGZvdW5kXCIpXTpbXX12YXIgSmU9e1wiKlwiOmZ1bmN0aW9uKCl7cmV0dXJuW119LGFycmF5OkNlLGJvb2xlYW46ZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LG49aGUoZSk7cmV0dXJuXCJib29sZWFuXCIhPT1uP1tuZXcgRChyLGUsXCJib29sZWFuIGV4cGVjdGVkLCBcIituK1wiIGZvdW5kXCIpXTpbXX0sbnVtYmVyOkxlLGNvbG9yOmZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZSxuPWhlKHIpO3JldHVyblwic3RyaW5nXCIhPT1uP1tuZXcgRChlLHIsXCJjb2xvciBleHBlY3RlZCwgXCIrbitcIiBmb3VuZFwiKV06bnVsbD09PVEocik/W25ldyBEKGUsciwnY29sb3IgZXhwZWN0ZWQsIFwiJytyKydcIiBmb3VuZCcpXTpbXX0sY29uc3RhbnRzOlAsZW51bTpJZSxmaWx0ZXI6cWUsZnVuY3Rpb246emUsbGF5ZXI6V2Usb2JqZWN0OkVlLHNvdXJjZTpYZSxsaWdodDpaZSxzdHJpbmc6JGV9O2Z1bmN0aW9uIEtlKHQpe3ZhciBlPXQudmFsdWUscj10LnZhbHVlU3BlYyxuPXQuc3R5bGVTcGVjO3JldHVybiByLmZ1bmN0aW9uJiZmZShGKGUpKT96ZSh0KTpyLmZ1bmN0aW9uJiZfZShCKGUpKT9PZSh0KTpyLnR5cGUmJkplW3IudHlwZV0/SmVbci50eXBlXSh0KTpFZShSKHt9LHQse3ZhbHVlU3BlYzpyLnR5cGU/bltyLnR5cGVdOnJ9KSl9ZnVuY3Rpb24gUWUodCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LG49JGUodCk7cmV0dXJuIG4ubGVuZ3RoP246KC0xPT09ZS5pbmRleE9mKFwie2ZvbnRzdGFja31cIikmJm4ucHVzaChuZXcgRChyLGUsJ1wiZ2x5cGhzXCIgdXJsIG11c3QgaW5jbHVkZSBhIFwie2ZvbnRzdGFja31cIiB0b2tlbicpKSwtMT09PWUuaW5kZXhPZihcIntyYW5nZX1cIikmJm4ucHVzaChuZXcgRChyLGUsJ1wiZ2x5cGhzXCIgdXJsIG11c3QgaW5jbHVkZSBhIFwie3JhbmdlfVwiIHRva2VuJykpLG4pfWZ1bmN0aW9uIHRyKHQsZSl7ZT1lfHxJO3ZhciByPVtdO3JldHVybiByPXIuY29uY2F0KEtlKHtrZXk6XCJcIix2YWx1ZTp0LHZhbHVlU3BlYzplLiRyb290LHN0eWxlU3BlYzplLHN0eWxlOnQsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6e2dseXBoczpRZSxcIipcIjpmdW5jdGlvbigpe3JldHVybltdfX19KSksdC5jb25zdGFudHMmJihyPXIuY29uY2F0KFAoe2tleTpcImNvbnN0YW50c1wiLHZhbHVlOnQuY29uc3RhbnRzLHN0eWxlOnQsc3R5bGVTcGVjOmV9KSkpLGVyKHIpfWZ1bmN0aW9uIGVyKHQpe3JldHVybltdLmNvbmNhdCh0KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGluZS1lLmxpbmV9KX1mdW5jdGlvbiBycih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZXIodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX10ci5zb3VyY2U9cnIoWGUpLHRyLmxpZ2h0PXJyKFplKSx0ci5sYXllcj1ycihXZSksdHIuZmlsdGVyPXJyKHFlKSx0ci5wYWludFByb3BlcnR5PXJyKEdlKSx0ci5sYXlvdXRQcm9wZXJ0eT1ycihZZSk7dmFyIG5yPXRyLGlyPXRyLmxpZ2h0LGFyPXRyLnBhaW50UHJvcGVydHksb3I9dHIubGF5b3V0UHJvcGVydHk7ZnVuY3Rpb24gc3IodCxlKXt2YXIgcj0hMTtpZihlJiZlLmxlbmd0aClmb3IodmFyIG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO3QuZmlyZShuZXcgeihuZXcgRXJyb3IoYS5tZXNzYWdlKSkpLHI9ITB9cmV0dXJuIHJ9dmFyIGxyPXVyLGNyPTM7ZnVuY3Rpb24gdXIodCxlLHIpe3ZhciBuPXRoaXMuY2VsbHM9W107aWYodCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXt0aGlzLmFycmF5QnVmZmVyPXQ7dmFyIGk9bmV3IEludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7dD1pWzBdLGU9aVsxXSxyPWlbMl0sdGhpcy5kPWUrMipyO2Zvcih2YXIgYT0wO2E8dGhpcy5kKnRoaXMuZDthKyspe3ZhciBvPWlbY3IrYV0scz1pW2NyK2ErMV07bi5wdXNoKG89PT1zP251bGw6aS5zdWJhcnJheShvLHMpKX12YXIgbD1pW2NyK24ubGVuZ3RoXSxjPWlbY3Irbi5sZW5ndGgrMV07dGhpcy5rZXlzPWkuc3ViYXJyYXkobCxjKSx0aGlzLmJib3hlcz1pLnN1YmFycmF5KGMpLHRoaXMuaW5zZXJ0PXRoaXMuX2luc2VydFJlYWRvbmx5fWVsc2V7dGhpcy5kPWUrMipyO2Zvcih2YXIgdT0wO3U8dGhpcy5kKnRoaXMuZDt1Kyspbi5wdXNoKFtdKTt0aGlzLmtleXM9W10sdGhpcy5iYm94ZXM9W119dGhpcy5uPWUsdGhpcy5leHRlbnQ9dCx0aGlzLnBhZGRpbmc9cix0aGlzLnNjYWxlPWUvdCx0aGlzLnVpZD0wO3ZhciBoPXIvZSp0O3RoaXMubWluPS1oLHRoaXMubWF4PXQraH11ci5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5fZm9yRWFjaENlbGwoZSxyLG4saSx0aGlzLl9pbnNlcnRDZWxsLHRoaXMudWlkKyspLHRoaXMua2V5cy5wdXNoKHQpLHRoaXMuYmJveGVzLnB1c2goZSksdGhpcy5iYm94ZXMucHVzaChyKSx0aGlzLmJib3hlcy5wdXNoKG4pLHRoaXMuYmJveGVzLnB1c2goaSl9LHVyLnByb3RvdHlwZS5faW5zZXJ0UmVhZG9ubHk9ZnVuY3Rpb24oKXt0aHJvd1wiQ2Fubm90IGluc2VydCBpbnRvIGEgR3JpZEluZGV4IGNyZWF0ZWQgZnJvbSBhbiBBcnJheUJ1ZmZlci5cIn0sdXIucHJvdG90eXBlLl9pbnNlcnRDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLmNlbGxzW2ldLnB1c2goYSl9LHVyLnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLm1pbixhPXRoaXMubWF4O2lmKHQ8PWkmJmU8PWkmJmE8PXImJmE8PW4pcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMua2V5cyk7dmFyIG89W107cmV0dXJuIHRoaXMuX2ZvckVhY2hDZWxsKHQsZSxyLG4sdGhpcy5fcXVlcnlDZWxsLG8se30pLG99LHVyLnByb3RvdHlwZS5fcXVlcnlDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPXRoaXMuY2VsbHNbaV07aWYobnVsbCE9PXMpZm9yKHZhciBsPXRoaXMua2V5cyxjPXRoaXMuYmJveGVzLHU9MDt1PHMubGVuZ3RoO3UrKyl7dmFyIGg9c1t1XTtpZih2b2lkIDA9PT1vW2hdKXt2YXIgZj00Kmg7dDw9Y1tmKzJdJiZlPD1jW2YrM10mJnI+PWNbZiswXSYmbj49Y1tmKzFdPyhvW2hdPSEwLGEucHVzaChsW2hdKSk6b1toXT0hMX19fSx1ci5wcm90b3R5cGUuX2ZvckVhY2hDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcz10aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQodCksbD10aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQoZSksYz10aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQociksdT10aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQobiksaD1zO2g8PWM7aCsrKWZvcih2YXIgZj1sO2Y8PXU7ZisrKXt2YXIgcD10aGlzLmQqZitoO2lmKGkuY2FsbCh0aGlzLHQsZSxyLG4scCxhLG8pKXJldHVybn19LHVyLnByb3RvdHlwZS5fY29udmVydFRvQ2VsbENvb3JkPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKHRoaXMuZC0xLE1hdGguZmxvb3IodCp0aGlzLnNjYWxlKSt0aGlzLnBhZGRpbmcpKX0sdXIucHJvdG90eXBlLnRvQXJyYXlCdWZmZXI9ZnVuY3Rpb24oKXtpZih0aGlzLmFycmF5QnVmZmVyKXJldHVybiB0aGlzLmFycmF5QnVmZmVyO2Zvcih2YXIgdD10aGlzLmNlbGxzLGU9Y3IrdGhpcy5jZWxscy5sZW5ndGgrMSsxLHI9MCxuPTA7bjx0aGlzLmNlbGxzLmxlbmd0aDtuKyspcis9dGhpcy5jZWxsc1tuXS5sZW5ndGg7dmFyIGk9bmV3IEludDMyQXJyYXkoZStyK3RoaXMua2V5cy5sZW5ndGgrdGhpcy5iYm94ZXMubGVuZ3RoKTtpWzBdPXRoaXMuZXh0ZW50LGlbMV09dGhpcy5uLGlbMl09dGhpcy5wYWRkaW5nO2Zvcih2YXIgYT1lLG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9dFtvXTtpW2NyK29dPWEsaS5zZXQocyxhKSxhKz1zLmxlbmd0aH1yZXR1cm4gaVtjcit0Lmxlbmd0aF09YSxpLnNldCh0aGlzLmtleXMsYSksYSs9dGhpcy5rZXlzLmxlbmd0aCxpW2NyK3QubGVuZ3RoKzFdPWEsaS5zZXQodGhpcy5iYm94ZXMsYSksYSs9dGhpcy5iYm94ZXMubGVuZ3RoLGkuYnVmZmVyfTt2YXIgaHI9c2VsZi5JbWFnZURhdGEsZnI9e307ZnVuY3Rpb24gcHIodCxlLHIpe3ZvaWQgMD09PXImJihyPXt9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIl9jbGFzc1JlZ2lzdHJ5S2V5XCIse3ZhbHVlOnQsd3JpdGVhYmxlOiExfSksZnJbdF09e2tsYXNzOmUsb21pdDpyLm9taXR8fFtdLHNoYWxsb3c6ci5zaGFsbG93fHxbXX19Zm9yKHZhciBkciBpbiBwcihcIk9iamVjdFwiLE9iamVjdCksbHIuc2VyaWFsaXplPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC50b0FycmF5QnVmZmVyKCk7cmV0dXJuIGUmJmUucHVzaChyKSxyfSxsci5kZXNlcmlhbGl6ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGxyKHQpfSxwcihcIkdyaWRcIixscikscHIoXCJDb2xvclwiLHR0KSxwcihcIkVycm9yXCIsRXJyb3IpLHByKFwiU3R5bGVQcm9wZXJ0eUZ1bmN0aW9uXCIsTWUpLHByKFwiU3R5bGVFeHByZXNzaW9uXCIsYmUse29taXQ6W1wiX2V2YWx1YXRvclwiXX0pLHByKFwiWm9vbURlcGVuZGVudEV4cHJlc3Npb25cIixBZSkscHIoXCJab29tQ29uc3RhbnRFeHByZXNzaW9uXCIsa2UpLHByKFwiQ29tcG91bmRFeHByZXNzaW9uXCIsZ3Qse29taXQ6W1wiX2V2YWx1YXRlXCJdfSksUnQpUnRbZHJdLl9jbGFzc1JlZ2lzdHJ5S2V5fHxwcihcIkV4cHJlc3Npb25fXCIrZHIsUnRbZHJdKTtmdW5jdGlvbiBncih0LGUpe2lmKG51bGw9PXR8fFwiYm9vbGVhblwiPT10eXBlb2YgdHx8XCJudW1iZXJcIj09dHlwZW9mIHR8fFwic3RyaW5nXCI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2YgQm9vbGVhbnx8dCBpbnN0YW5jZW9mIE51bWJlcnx8dCBpbnN0YW5jZW9mIFN0cmluZ3x8dCBpbnN0YW5jZW9mIERhdGV8fHQgaW5zdGFuY2VvZiBSZWdFeHApcmV0dXJuIHQ7aWYodCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBlJiZlLnB1c2godCksdDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcodCkpe3ZhciByPXQ7cmV0dXJuIGUmJmUucHVzaChyLmJ1ZmZlcikscn1pZih0IGluc3RhbmNlb2YgaHIpcmV0dXJuIGUmJmUucHVzaCh0LmRhdGEuYnVmZmVyKSx0O2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgbj1bXSxpPTAsYT10O2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTtuLnB1c2goZ3IobyxlKSl9cmV0dXJuIG59aWYoXCJvYmplY3RcIj09dHlwZW9mIHQpe3ZhciBzPXQuY29uc3RydWN0b3IsbD1zLl9jbGFzc1JlZ2lzdHJ5S2V5O2lmKCFsKXRocm93IG5ldyBFcnJvcihcImNhbid0IHNlcmlhbGl6ZSBvYmplY3Qgb2YgdW5yZWdpc3RlcmVkIGNsYXNzXCIpO3ZhciBjPXt9O2lmKHMuc2VyaWFsaXplKWMuX3NlcmlhbGl6ZWQ9cy5zZXJpYWxpemUodCxlKTtlbHNle2Zvcih2YXIgdSBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkodSkmJiEoZnJbbF0ub21pdC5pbmRleE9mKHUpPj0wKSl7dmFyIGg9dFt1XTtjW3VdPWZyW2xdLnNoYWxsb3cuaW5kZXhPZih1KT49MD9oOmdyKGgsZSl9dCBpbnN0YW5jZW9mIEVycm9yJiYoYy5tZXNzYWdlPXQubWVzc2FnZSl9cmV0dXJue25hbWU6bCxwcm9wZXJ0aWVzOmN9fXRocm93IG5ldyBFcnJvcihcImNhbid0IHNlcmlhbGl6ZSBvYmplY3Qgb2YgdHlwZSBcIit0eXBlb2YgdCl9ZnVuY3Rpb24gdnIodCl7aWYobnVsbD09dHx8XCJib29sZWFuXCI9PXR5cGVvZiB0fHxcIm51bWJlclwiPT10eXBlb2YgdHx8XCJzdHJpbmdcIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBCb29sZWFufHx0IGluc3RhbmNlb2YgTnVtYmVyfHx0IGluc3RhbmNlb2YgU3RyaW5nfHx0IGluc3RhbmNlb2YgRGF0ZXx8dCBpbnN0YW5jZW9mIFJlZ0V4cHx8dCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxBcnJheUJ1ZmZlci5pc1ZpZXcodCl8fHQgaW5zdGFuY2VvZiBocilyZXR1cm4gdDtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdnIodCl9KTtpZihcIm9iamVjdFwiPT10eXBlb2YgdCl7dmFyIGU9dCxyPWUubmFtZSxuPWUucHJvcGVydGllcztpZighcil0aHJvdyBuZXcgRXJyb3IoXCJjYW4ndCBkZXNlcmlhbGl6ZSBvYmplY3Qgb2YgYW5vbnltb3VzIGNsYXNzXCIpO3ZhciBpPWZyW3JdLmtsYXNzO2lmKCFpKXRocm93IG5ldyBFcnJvcihcImNhbid0IGRlc2VyaWFsaXplIHVucmVnaXN0ZXJlZCBjbGFzcyBcIityKTtpZihpLmRlc2VyaWFsaXplKXJldHVybiBpLmRlc2VyaWFsaXplKG4uX3NlcmlhbGl6ZWQpO2Zvcih2YXIgYT1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxvPTAscz1PYmplY3Qua2V5cyhuKTtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb107YVtsXT1mcltyXS5zaGFsbG93LmluZGV4T2YobCk+PTA/bltsXTp2cihuW2xdKX1yZXR1cm4gYX10aHJvdyBuZXcgRXJyb3IoXCJjYW4ndCBkZXNlcmlhbGl6ZSBvYmplY3Qgb2YgdHlwZSBcIit0eXBlb2YgdCl9dmFyIG1yPWZ1bmN0aW9uKCl7dGhpcy5maXJzdD0hMH07bXIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPU1hdGguZmxvb3IodCk7cmV0dXJuIHRoaXMuZmlyc3Q/KHRoaXMuZmlyc3Q9ITEsdGhpcy5sYXN0SW50ZWdlclpvb209cix0aGlzLmxhc3RJbnRlZ2VyWm9vbVRpbWU9MCx0aGlzLmxhc3Rab29tPXQsdGhpcy5sYXN0Rmxvb3Jab29tPXIsITApOih0aGlzLmxhc3RGbG9vclpvb20+cj8odGhpcy5sYXN0SW50ZWdlclpvb209cisxLHRoaXMubGFzdEludGVnZXJab29tVGltZT1lKTp0aGlzLmxhc3RGbG9vclpvb208ciYmKHRoaXMubGFzdEludGVnZXJab29tPXIsdGhpcy5sYXN0SW50ZWdlclpvb21UaW1lPWUpLHQhPT10aGlzLmxhc3Rab29tJiYodGhpcy5sYXN0Wm9vbT10LHRoaXMubGFzdEZsb29yWm9vbT1yLCEwKSl9O3ZhciB5cj17XCJMYXRpbi0xIFN1cHBsZW1lbnRcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI4JiZ0PD0yNTV9LEFyYWJpYzpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTUzNiYmdDw9MTc5MX0sXCJBcmFiaWMgU3VwcGxlbWVudFwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xODcyJiZ0PD0xOTE5fSxcIkFyYWJpYyBFeHRlbmRlZC1BXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTIyMDgmJnQ8PTIzMDN9LFwiSGFuZ3VsIEphbW9cIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NDM1MiYmdDw9NDYwN30sXCJVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTUxMjAmJnQ8PTU3NTl9LEtobWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02MDE2JiZ0PD02MTQzfSxcIlVuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3MgRXh0ZW5kZWRcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjMyMCYmdDw9NjM5OX0sXCJHZW5lcmFsIFB1bmN0dWF0aW9uXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTgxOTImJnQ8PTgzMDN9LFwiTGV0dGVybGlrZSBTeW1ib2xzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTg0NDgmJnQ8PTg1Mjd9LFwiTnVtYmVyIEZvcm1zXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTg1MjgmJnQ8PTg1OTF9LFwiTWlzY2VsbGFuZW91cyBUZWNobmljYWxcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49ODk2MCYmdDw9OTIxNX0sXCJDb250cm9sIFBpY3R1cmVzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTkyMTYmJnQ8PTkyNzl9LFwiT3B0aWNhbCBDaGFyYWN0ZXIgUmVjb2duaXRpb25cIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49OTI4MCYmdDw9OTMxMX0sXCJFbmNsb3NlZCBBbHBoYW51bWVyaWNzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTkzMTImJnQ8PTk0NzF9LFwiR2VvbWV0cmljIFNoYXBlc1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj05NjMyJiZ0PD05NzI3fSxcIk1pc2NlbGxhbmVvdXMgU3ltYm9sc1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj05NzI4JiZ0PD05OTgzfSxcIk1pc2NlbGxhbmVvdXMgU3ltYm9scyBhbmQgQXJyb3dzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTExMDA4JiZ0PD0xMTI2M30sXCJDSksgUmFkaWNhbHMgU3VwcGxlbWVudFwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMTkwNCYmdDw9MTIwMzF9LFwiS2FuZ3hpIFJhZGljYWxzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyMDMyJiZ0PD0xMjI1NX0sXCJJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyMjcyJiZ0PD0xMjI4N30sXCJDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb25cIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTIyODgmJnQ8PTEyMzUxfSxIaXJhZ2FuYTpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTIzNTImJnQ8PTEyNDQ3fSxLYXRha2FuYTpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI0NDgmJnQ8PTEyNTQzfSxCb3BvbW9mbzpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI1NDQmJnQ8PTEyNTkxfSxcIkhhbmd1bCBDb21wYXRpYmlsaXR5IEphbW9cIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI1OTImJnQ8PTEyNjg3fSxLYW5idW46ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyNjg4JiZ0PD0xMjcwM30sXCJCb3BvbW9mbyBFeHRlbmRlZFwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjcwNCYmdDw9MTI3MzV9LFwiQ0pLIFN0cm9rZXNcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI3MzYmJnQ8PTEyNzgzfSxcIkthdGFrYW5hIFBob25ldGljIEV4dGVuc2lvbnNcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI3ODQmJnQ8PTEyNzk5fSxcIkVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHNcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI4MDAmJnQ8PTEzMDU1fSxcIkNKSyBDb21wYXRpYmlsaXR5XCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEzMDU2JiZ0PD0xMzMxMX0sXCJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEzMzEyJiZ0PD0xOTkwM30sXCJZaWppbmcgSGV4YWdyYW0gU3ltYm9sc1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xOTkwNCYmdDw9MTk5Njd9LFwiQ0pLIFVuaWZpZWQgSWRlb2dyYXBoc1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xOTk2OCYmdDw9NDA5NTl9LFwiWWkgU3lsbGFibGVzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTQwOTYwJiZ0PD00MjEyN30sXCJZaSBSYWRpY2Fsc1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj00MjEyOCYmdDw9NDIxOTF9LFwiSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQVwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj00MzM2MCYmdDw9NDMzOTF9LFwiSGFuZ3VsIFN5bGxhYmxlc1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj00NDAzMiYmdDw9NTUyMTV9LFwiSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQlwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj01NTIxNiYmdDw9NTUyOTV9LFwiUHJpdmF0ZSBVc2UgQXJlYVwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj01NzM0NCYmdDw9NjM3NDN9LFwiQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBoc1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02Mzc0NCYmdDw9NjQyNTV9LFwiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY0MzM2JiZ0PD02NTAyM30sXCJWZXJ0aWNhbCBGb3Jtc1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NTA0MCYmdDw9NjUwNTV9LFwiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXNcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjUwNzImJnQ8PTY1MTAzfSxcIlNtYWxsIEZvcm0gVmFyaWFudHNcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjUxMDQmJnQ8PTY1MTM1fSxcIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQlwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NTEzNiYmdDw9NjUyNzl9LFwiSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXNcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjUyODAmJnQ8PTY1NTE5fX07ZnVuY3Rpb24geHIodCl7Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSlpZihfcihyW2VdLmNoYXJDb2RlQXQoMCkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGJyKHQpe3JldHVybiEoeXIuQXJhYmljKHQpfHx5cltcIkFyYWJpYyBTdXBwbGVtZW50XCJdKHQpfHx5cltcIkFyYWJpYyBFeHRlbmRlZC1BXCJdKHQpfHx5cltcIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQVwiXSh0KXx8eXJbXCJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUJcIl0odCkpfWZ1bmN0aW9uIF9yKHQpe3JldHVybiEhKDc0Nj09PXR8fDc0Nz09PXR8fCEodDw0MzUyKSYmKHlyW1wiQm9wb21vZm8gRXh0ZW5kZWRcIl0odCl8fHlyLkJvcG9tb2ZvKHQpfHx5cltcIkNKSyBDb21wYXRpYmlsaXR5IEZvcm1zXCJdKHQpJiYhKHQ+PTY1MDk3JiZ0PD02NTEwMyl8fHlyW1wiQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBoc1wiXSh0KXx8eXJbXCJDSksgQ29tcGF0aWJpbGl0eVwiXSh0KXx8eXJbXCJDSksgUmFkaWNhbHMgU3VwcGxlbWVudFwiXSh0KXx8eXJbXCJDSksgU3Ryb2tlc1wiXSh0KXx8ISgheXJbXCJDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb25cIl0odCl8fHQ+PTEyMjk2JiZ0PD0xMjMwNXx8dD49MTIzMDgmJnQ8PTEyMzE5fHwxMjMzNj09PXQpfHx5cltcIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEFcIl0odCl8fHlyW1wiQ0pLIFVuaWZpZWQgSWRlb2dyYXBoc1wiXSh0KXx8eXJbXCJFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzXCJdKHQpfHx5cltcIkhhbmd1bCBDb21wYXRpYmlsaXR5IEphbW9cIl0odCl8fHlyW1wiSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQVwiXSh0KXx8eXJbXCJIYW5ndWwgSmFtbyBFeHRlbmRlZC1CXCJdKHQpfHx5cltcIkhhbmd1bCBKYW1vXCJdKHQpfHx5cltcIkhhbmd1bCBTeWxsYWJsZXNcIl0odCl8fHlyLkhpcmFnYW5hKHQpfHx5cltcIklkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnNcIl0odCl8fHlyLkthbmJ1bih0KXx8eXJbXCJLYW5neGkgUmFkaWNhbHNcIl0odCl8fHlyW1wiS2F0YWthbmEgUGhvbmV0aWMgRXh0ZW5zaW9uc1wiXSh0KXx8eXIuS2F0YWthbmEodCkmJjEyNTQwIT09dHx8ISgheXJbXCJIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3Jtc1wiXSh0KXx8NjUyODg9PT10fHw2NTI4OT09PXR8fDY1MjkzPT09dHx8dD49NjUzMDYmJnQ8PTY1MzEwfHw2NTMzOT09PXR8fDY1MzQxPT09dHx8NjUzNDM9PT10fHx0Pj02NTM3MSYmdDw9NjU1MDN8fDY1NTA3PT09dHx8dD49NjU1MTImJnQ8PTY1NTE5KXx8ISgheXJbXCJTbWFsbCBGb3JtIFZhcmlhbnRzXCJdKHQpfHx0Pj02NTExMiYmdDw9NjUxMTh8fHQ+PTY1MTIzJiZ0PD02NTEyNil8fHlyW1wiVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljc1wiXSh0KXx8eXJbXCJVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzIEV4dGVuZGVkXCJdKHQpfHx5cltcIlZlcnRpY2FsIEZvcm1zXCJdKHQpfHx5cltcIllpamluZyBIZXhhZ3JhbSBTeW1ib2xzXCJdKHQpfHx5cltcIllpIFN5bGxhYmxlc1wiXSh0KXx8eXJbXCJZaSBSYWRpY2Fsc1wiXSh0KSkpfWZ1bmN0aW9uIHdyKHQpe3JldHVybiEoX3IodCl8fGZ1bmN0aW9uKHQpe3JldHVybiEhKHlyW1wiTGF0aW4tMSBTdXBwbGVtZW50XCJdKHQpJiYoMTY3PT09dHx8MTY5PT09dHx8MTc0PT09dHx8MTc3PT09dHx8MTg4PT09dHx8MTg5PT09dHx8MTkwPT09dHx8MjE1PT09dHx8MjQ3PT09dCl8fHlyW1wiR2VuZXJhbCBQdW5jdHVhdGlvblwiXSh0KSYmKDgyMTQ9PT10fHw4MjI0PT09dHx8ODIyNT09PXR8fDgyNDA9PT10fHw4MjQxPT09dHx8ODI1MT09PXR8fDgyNTI9PT10fHw4MjU4PT09dHx8ODI2Mz09PXR8fDgyNjQ9PT10fHw4MjY1PT09dHx8ODI3Mz09PXQpfHx5cltcIkxldHRlcmxpa2UgU3ltYm9sc1wiXSh0KXx8eXJbXCJOdW1iZXIgRm9ybXNcIl0odCl8fHlyW1wiTWlzY2VsbGFuZW91cyBUZWNobmljYWxcIl0odCkmJih0Pj04OTYwJiZ0PD04OTY3fHx0Pj04OTcyJiZ0PD04OTkxfHx0Pj04OTk2JiZ0PD05ZTN8fDkwMDM9PT10fHx0Pj05MDg1JiZ0PD05MTE0fHx0Pj05MTUwJiZ0PD05MTY1fHw5MTY3PT09dHx8dD49OTE2OSYmdDw9OTE3OXx8dD49OTE4NiYmdDw9OTIxNSl8fHlyW1wiQ29udHJvbCBQaWN0dXJlc1wiXSh0KSYmOTI1MSE9PXR8fHlyW1wiT3B0aWNhbCBDaGFyYWN0ZXIgUmVjb2duaXRpb25cIl0odCl8fHlyW1wiRW5jbG9zZWQgQWxwaGFudW1lcmljc1wiXSh0KXx8eXJbXCJHZW9tZXRyaWMgU2hhcGVzXCJdKHQpfHx5cltcIk1pc2NlbGxhbmVvdXMgU3ltYm9sc1wiXSh0KSYmISh0Pj05NzU0JiZ0PD05NzU5KXx8eXJbXCJNaXNjZWxsYW5lb3VzIFN5bWJvbHMgYW5kIEFycm93c1wiXSh0KSYmKHQ+PTExMDI2JiZ0PD0xMTA1NXx8dD49MTEwODgmJnQ8PTExMDk3fHx0Pj0xMTE5MiYmdDw9MTEyNDMpfHx5cltcIkNKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvblwiXSh0KXx8eXIuS2F0YWthbmEodCl8fHlyW1wiUHJpdmF0ZSBVc2UgQXJlYVwiXSh0KXx8eXJbXCJDSksgQ29tcGF0aWJpbGl0eSBGb3Jtc1wiXSh0KXx8eXJbXCJTbWFsbCBGb3JtIFZhcmlhbnRzXCJdKHQpfHx5cltcIkhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zXCJdKHQpfHw4NzM0PT09dHx8ODc1Nj09PXR8fDg3NTc9PT10fHx0Pj05OTg0JiZ0PD0xMDA4N3x8dD49MTAxMDImJnQ8PTEwMTMxfHw2NTUzMj09PXR8fDY1NTMzPT09dCl9KHQpKX1mdW5jdGlvbiBrcih0LGUpe3JldHVybiEoIWUmJih0Pj0xNDI0JiZ0PD0yMzAzfHx5cltcIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQVwiXSh0KXx8eXJbXCJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUJcIl0odCkpfHx0Pj0yMzA0JiZ0PD0zNTgzfHx0Pj0zODQwJiZ0PD00MjU1fHx5ci5LaG1lcih0KSl9dmFyIEFyLFRyPSExLE1yPW51bGwsU3I9ITEsRXI9bmV3IE8sQ3I9e2FwcGx5QXJhYmljU2hhcGluZzpudWxsLHByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dDpudWxsLGlzTG9hZGVkOmZ1bmN0aW9uKCl7cmV0dXJuIFNyfHxudWxsIT1Dci5hcHBseUFyYWJpY1NoYXBpbmd9fSxMcj1mdW5jdGlvbih0LGUpe3RoaXMuem9vbT10LGU/KHRoaXMubm93PWUubm93LHRoaXMuZmFkZUR1cmF0aW9uPWUuZmFkZUR1cmF0aW9uLHRoaXMuem9vbUhpc3Rvcnk9ZS56b29tSGlzdG9yeSx0aGlzLnRyYW5zaXRpb249ZS50cmFuc2l0aW9uKToodGhpcy5ub3c9MCx0aGlzLmZhZGVEdXJhdGlvbj0wLHRoaXMuem9vbUhpc3Rvcnk9bmV3IG1yLHRoaXMudHJhbnNpdGlvbj17fSl9O0xyLnByb3RvdHlwZS5pc1N1cHBvcnRlZFNjcmlwdD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPXQ7cjxuLmxlbmd0aDtyKz0xKWlmKCFrcihuW3JdLmNoYXJDb2RlQXQoMCksZSkpcmV0dXJuITE7cmV0dXJuITB9KHQsQ3IuaXNMb2FkZWQoKSl9LExyLnByb3RvdHlwZS5jcm9zc0ZhZGluZ0ZhY3Rvcj1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5mYWRlRHVyYXRpb24/MTpNYXRoLm1pbigodGhpcy5ub3ctdGhpcy56b29tSGlzdG9yeS5sYXN0SW50ZWdlclpvb21UaW1lKS90aGlzLmZhZGVEdXJhdGlvbiwxKX07dmFyIHpyPWZ1bmN0aW9uKHQsZSl7dGhpcy5wcm9wZXJ0eT10LHRoaXMudmFsdWU9ZSx0aGlzLmV4cHJlc3Npb249U2Uodm9pZCAwPT09ZT90LnNwZWNpZmljYXRpb24uZGVmYXVsdDplLHQuc3BlY2lmaWNhdGlvbil9O3pyLnByb3RvdHlwZS5pc0RhdGFEcml2ZW49ZnVuY3Rpb24oKXtyZXR1cm5cInNvdXJjZVwiPT09dGhpcy5leHByZXNzaW9uLmtpbmR8fFwiY29tcG9zaXRlXCI9PT10aGlzLmV4cHJlc3Npb24ua2luZH0senIucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHJvcGVydHkucG9zc2libHlFdmFsdWF0ZSh0aGlzLHQpfTt2YXIgT3I9ZnVuY3Rpb24odCl7dGhpcy5wcm9wZXJ0eT10LHRoaXMudmFsdWU9bmV3IHpyKHQsdm9pZCAwKX07T3IucHJvdG90eXBlLnRyYW5zaXRpb25lZD1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgRHIodGhpcy5wcm9wZXJ0eSx0aGlzLnZhbHVlLGUscCh7fSx0LnRyYW5zaXRpb24sdGhpcy50cmFuc2l0aW9uKSx0Lm5vdyl9LE9yLnByb3RvdHlwZS51bnRyYW5zaXRpb25lZD1mdW5jdGlvbigpe3JldHVybiBuZXcgRHIodGhpcy5wcm9wZXJ0eSx0aGlzLnZhbHVlLG51bGwse30sMCl9O3ZhciBJcj1mdW5jdGlvbih0KXt0aGlzLl9wcm9wZXJ0aWVzPXQsdGhpcy5fdmFsdWVzPU9iamVjdC5jcmVhdGUodC5kZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlcyl9O0lyLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4geCh0aGlzLl92YWx1ZXNbdF0udmFsdWUudmFsdWUpfSxJci5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt0aGlzLl92YWx1ZXMuaGFzT3duUHJvcGVydHkodCl8fCh0aGlzLl92YWx1ZXNbdF09bmV3IE9yKHRoaXMuX3ZhbHVlc1t0XS5wcm9wZXJ0eSkpLHRoaXMuX3ZhbHVlc1t0XS52YWx1ZT1uZXcgenIodGhpcy5fdmFsdWVzW3RdLnByb3BlcnR5LG51bGw9PT1lP3ZvaWQgMDp4KGUpKX0sSXIucHJvdG90eXBlLmdldFRyYW5zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHgodGhpcy5fdmFsdWVzW3RdLnRyYW5zaXRpb24pfSxJci5wcm90b3R5cGUuc2V0VHJhbnNpdGlvbj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZhbHVlcy5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuX3ZhbHVlc1t0XT1uZXcgT3IodGhpcy5fdmFsdWVzW3RdLnByb3BlcnR5KSksdGhpcy5fdmFsdWVzW3RdLnRyYW5zaXRpb249eChlKXx8dm9pZCAwfSxJci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXt9LGU9MCxyPU9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcyk7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9dGhpcy5nZXRWYWx1ZShuKTt2b2lkIDAhPT1pJiYodFtuXT1pKTt2YXIgYT10aGlzLmdldFRyYW5zaXRpb24obik7dm9pZCAwIT09YSYmKHRbbitcIi10cmFuc2l0aW9uXCJdPWEpfXJldHVybiB0fSxJci5wcm90b3R5cGUudHJhbnNpdGlvbmVkPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBQcih0aGlzLl9wcm9wZXJ0aWVzKSxuPTAsaT1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtyLl92YWx1ZXNbYV09dGhpcy5fdmFsdWVzW2FdLnRyYW5zaXRpb25lZCh0LGUuX3ZhbHVlc1thXSl9cmV0dXJuIHJ9LElyLnByb3RvdHlwZS51bnRyYW5zaXRpb25lZD1mdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgUHIodGhpcy5fcHJvcGVydGllcyksZT0wLHI9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV07dC5fdmFsdWVzW25dPXRoaXMuX3ZhbHVlc1tuXS51bnRyYW5zaXRpb25lZCgpfXJldHVybiB0fTt2YXIgRHI9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLnByb3BlcnR5PXQsdGhpcy52YWx1ZT1lLHRoaXMuYmVnaW49aStuLmRlbGF5fHwwLHRoaXMuZW5kPXRoaXMuYmVnaW4rbi5kdXJhdGlvbnx8MCx0LnNwZWNpZmljYXRpb24udHJhbnNpdGlvbiYmKG4uZGVsYXl8fG4uZHVyYXRpb24pJiYodGhpcy5wcmlvcj1yKX07RHIucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dC5ub3d8fDAscj10aGlzLnZhbHVlLnBvc3NpYmx5RXZhbHVhdGUodCksbj10aGlzLnByaW9yO2lmKG4pe2lmKGU+dGhpcy5lbmQpcmV0dXJuIHRoaXMucHJpb3I9bnVsbCxyO2lmKHRoaXMudmFsdWUuaXNEYXRhRHJpdmVuKCkpcmV0dXJuIHRoaXMucHJpb3I9bnVsbCxyO2lmKGU8dGhpcy5iZWdpbilyZXR1cm4gbi5wb3NzaWJseUV2YWx1YXRlKHQpO3ZhciBpPShlLXRoaXMuYmVnaW4pLyh0aGlzLmVuZC10aGlzLmJlZ2luKTtyZXR1cm4gdGhpcy5wcm9wZXJ0eS5pbnRlcnBvbGF0ZShuLnBvc3NpYmx5RXZhbHVhdGUodCkscixmdW5jdGlvbih0KXtpZihpPD0wKXJldHVybiAwO2lmKGk+PTEpcmV0dXJuIDE7dmFyIGU9aSppLHI9ZSppO3JldHVybiA0KihpPC41P3I6MyooaS1lKStyLS43NSl9KCkpfXJldHVybiByfTt2YXIgUHI9ZnVuY3Rpb24odCl7dGhpcy5fcHJvcGVydGllcz10LHRoaXMuX3ZhbHVlcz1PYmplY3QuY3JlYXRlKHQuZGVmYXVsdFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlcyl9O1ByLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQnIodGhpcy5fcHJvcGVydGllcykscj0wLG49T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl07ZS5fdmFsdWVzW2ldPXRoaXMuX3ZhbHVlc1tpXS5wb3NzaWJseUV2YWx1YXRlKHQpfXJldHVybiBlfSxQci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTt0PGUubGVuZ3RoO3QrPTEpe3ZhciByPWVbdF07aWYodGhpcy5fdmFsdWVzW3JdLnByaW9yKXJldHVybiEwfXJldHVybiExfTt2YXIgUnI9ZnVuY3Rpb24odCl7dGhpcy5fcHJvcGVydGllcz10LHRoaXMuX3ZhbHVlcz1PYmplY3QuY3JlYXRlKHQuZGVmYXVsdFByb3BlcnR5VmFsdWVzKX07UnIucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB4KHRoaXMuX3ZhbHVlc1t0XS52YWx1ZSl9LFJyLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3RoaXMuX3ZhbHVlc1t0XT1uZXcgenIodGhpcy5fdmFsdWVzW3RdLnByb3BlcnR5LG51bGw9PT1lP3ZvaWQgMDp4KGUpKX0sUnIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD17fSxlPTAscj1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXSxpPXRoaXMuZ2V0VmFsdWUobik7dm9pZCAwIT09aSYmKHRbbl09aSl9cmV0dXJuIHR9LFJyLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQnIodGhpcy5fcHJvcGVydGllcykscj0wLG49T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl07ZS5fdmFsdWVzW2ldPXRoaXMuX3ZhbHVlc1tpXS5wb3NzaWJseUV2YWx1YXRlKHQpfXJldHVybiBlfTt2YXIgRnI9ZnVuY3Rpb24odCxlLHIpe3RoaXMucHJvcGVydHk9dCx0aGlzLnZhbHVlPWUsdGhpcy5nbG9iYWxzPXJ9O0ZyLnByb3RvdHlwZS5pc0NvbnN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuXCJjb25zdGFudFwiPT09dGhpcy52YWx1ZS5raW5kfSxGci5wcm90b3R5cGUuY29uc3RhbnRPcj1mdW5jdGlvbih0KXtyZXR1cm5cImNvbnN0YW50XCI9PT10aGlzLnZhbHVlLmtpbmQ/dGhpcy52YWx1ZS52YWx1ZTp0fSxGci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHJvcGVydHkuZXZhbHVhdGUodGhpcy52YWx1ZSx0aGlzLmdsb2JhbHMsdCl9O3ZhciBCcj1mdW5jdGlvbih0KXt0aGlzLl9wcm9wZXJ0aWVzPXQsdGhpcy5fdmFsdWVzPU9iamVjdC5jcmVhdGUodC5kZWZhdWx0UG9zc2libHlFdmFsdWF0ZWRWYWx1ZXMpfTtCci5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWx1ZXNbdF19O3ZhciBOcj1mdW5jdGlvbih0KXt0aGlzLnNwZWNpZmljYXRpb249dH07TnIucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5leHByZXNzaW9uLmV2YWx1YXRlKGUpfSxOci5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWt0W3RoaXMuc3BlY2lmaWNhdGlvbi50eXBlXTtyZXR1cm4gbj9uKHQsZSxyKTp0fTt2YXIganI9ZnVuY3Rpb24odCl7dGhpcy5zcGVjaWZpY2F0aW9uPXR9O2pyLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJjb25zdGFudFwiPT09dC5leHByZXNzaW9uLmtpbmR8fFwiY2FtZXJhXCI9PT10LmV4cHJlc3Npb24ua2luZD9uZXcgRnIodGhpcyx7a2luZDpcImNvbnN0YW50XCIsdmFsdWU6dC5leHByZXNzaW9uLmV2YWx1YXRlKGUpfSxlKTpuZXcgRnIodGhpcyx0LmV4cHJlc3Npb24sZSl9LGpyLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0LGUscil7aWYoXCJjb25zdGFudFwiIT09dC52YWx1ZS5raW5kfHxcImNvbnN0YW50XCIhPT1lLnZhbHVlLmtpbmQpcmV0dXJuIHQ7aWYodm9pZCAwPT09dC52YWx1ZS52YWx1ZXx8dm9pZCAwPT09ZS52YWx1ZS52YWx1ZSlyZXR1cm4gbmV3IEZyKHRoaXMse2tpbmQ6XCJjb25zdGFudFwiLHZhbHVlOnZvaWQgMH0sdC5nbG9iYWxzKTt2YXIgbj1rdFt0aGlzLnNwZWNpZmljYXRpb24udHlwZV07cmV0dXJuIG4/bmV3IEZyKHRoaXMse2tpbmQ6XCJjb25zdGFudFwiLHZhbHVlOm4odC52YWx1ZS52YWx1ZSxlLnZhbHVlLnZhbHVlLHIpfSx0Lmdsb2JhbHMpOnR9LGpyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0LGUscil7cmV0dXJuXCJjb25zdGFudFwiPT09dC5raW5kP3QudmFsdWU6dC5ldmFsdWF0ZShlLHIpfTt2YXIgVnI9ZnVuY3Rpb24odCl7dGhpcy5zcGVjaWZpY2F0aW9uPXR9O1ZyLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwIT09dC52YWx1ZSl7aWYoXCJjb25zdGFudFwiPT09dC5leHByZXNzaW9uLmtpbmQpe3ZhciByPXQuZXhwcmVzc2lvbi5ldmFsdWF0ZShlKTtyZXR1cm4gdGhpcy5fY2FsY3VsYXRlKHIscixyLGUpfXJldHVybiB0aGlzLl9jYWxjdWxhdGUodC5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBMcihNYXRoLmZsb29yKGUuem9vbS0xKSxlKSksdC5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBMcihNYXRoLmZsb29yKGUuem9vbSksZSkpLHQuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgTHIoTWF0aC5mbG9vcihlLnpvb20rMSksZSkpLGUpfX0sVnIucHJvdG90eXBlLl9jYWxjdWxhdGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi56b29tLGE9aS1NYXRoLmZsb29yKGkpLG89bi5jcm9zc0ZhZGluZ0ZhY3RvcigpO3JldHVybiBpPm4uem9vbUhpc3RvcnkubGFzdEludGVnZXJab29tP3tmcm9tOnQsdG86ZSxmcm9tU2NhbGU6Mix0b1NjYWxlOjEsdDphKygxLWEpKm99Ontmcm9tOnIsdG86ZSxmcm9tU2NhbGU6LjUsdG9TY2FsZToxLHQ6MS0oMS1vKSphfX0sVnIucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0fTt2YXIgVXI9ZnVuY3Rpb24odCl7dGhpcy5zcGVjaWZpY2F0aW9uPXR9O1VyLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuISF0LmV4cHJlc3Npb24uZXZhbHVhdGUoZSl9LFVyLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbigpe3JldHVybiExfTt2YXIgcXI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMucHJvcGVydGllcz10LHRoaXMuZGVmYXVsdFByb3BlcnR5VmFsdWVzPXt9LHRoaXMuZGVmYXVsdFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZXM9e30sdGhpcy5kZWZhdWx0VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzPXt9LHRoaXMuZGVmYXVsdFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVzPXt9LHQpe3ZhciByPXRbZV0sbj10aGlzLmRlZmF1bHRQcm9wZXJ0eVZhbHVlc1tlXT1uZXcgenIocix2b2lkIDApLGk9dGhpcy5kZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlc1tlXT1uZXcgT3Iocik7dGhpcy5kZWZhdWx0VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzW2VdPWkudW50cmFuc2l0aW9uZWQoKSx0aGlzLmRlZmF1bHRQb3NzaWJseUV2YWx1YXRlZFZhbHVlc1tlXT1uLnBvc3NpYmx5RXZhbHVhdGUoe30pfX07cHIoXCJEYXRhRHJpdmVuUHJvcGVydHlcIixqcikscHIoXCJEYXRhQ29uc3RhbnRQcm9wZXJ0eVwiLE5yKSxwcihcIkNyb3NzRmFkZWRQcm9wZXJ0eVwiLFZyKSxwcihcIkNvbG9yUmFtcFByb3BlcnR5XCIsVXIpO3ZhciBIcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7Zm9yKHZhciBuIGluIHQuY2FsbCh0aGlzKSx0aGlzLmlkPWUuaWQsdGhpcy5tZXRhZGF0YT1lLm1ldGFkYXRhLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5taW56b29tPWUubWluem9vbSx0aGlzLm1heHpvb209ZS5tYXh6b29tLHRoaXMudmlzaWJpbGl0eT1cInZpc2libGVcIixcImJhY2tncm91bmRcIiE9PWUudHlwZSYmKHRoaXMuc291cmNlPWUuc291cmNlLHRoaXMuc291cmNlTGF5ZXI9ZVtcInNvdXJjZS1sYXllclwiXSx0aGlzLmZpbHRlcj1lLmZpbHRlciksdGhpcy5fZmVhdHVyZUZpbHRlcj1mdW5jdGlvbigpe3JldHVybiEwfSxyLmxheW91dCYmKHRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0PW5ldyBScihyLmxheW91dCkpLHRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQ9bmV3IElyKHIucGFpbnQpLGUucGFpbnQpdGhpcy5zZXRQYWludFByb3BlcnR5KG4sZS5wYWludFtuXSx7dmFsaWRhdGU6ITF9KTtmb3IodmFyIGkgaW4gZS5sYXlvdXQpdGhpcy5zZXRMYXlvdXRQcm9wZXJ0eShpLGUubGF5b3V0W2ldLHt2YWxpZGF0ZTohMX0pO3RoaXMuX3RyYW5zaXRpb25pbmdQYWludD10aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LnVudHJhbnNpdGlvbmVkKCl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldExheW91dFByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVyblwidmlzaWJpbGl0eVwiPT09dD90aGlzLnZpc2liaWxpdHk6dGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQuZ2V0VmFsdWUodCl9LGUucHJvdG90eXBlLnNldExheW91dFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxyKXtpZihudWxsIT1lKXt2YXIgbj1cImxheWVycy5cIit0aGlzLmlkK1wiLmxheW91dC5cIit0O2lmKHRoaXMuX3ZhbGlkYXRlKG9yLG4sdCxlLHIpKXJldHVybn1cInZpc2liaWxpdHlcIiE9PXQ/dGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQuc2V0VmFsdWUodCxlKTp0aGlzLnZpc2liaWxpdHk9XCJub25lXCI9PT1lP2U6XCJ2aXNpYmxlXCJ9LGUucHJvdG90eXBlLmdldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24odCl7cmV0dXJuIHYodCxcIi10cmFuc2l0aW9uXCIpP3RoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuZ2V0VHJhbnNpdGlvbih0LnNsaWNlKDAsLVwiLXRyYW5zaXRpb25cIi5sZW5ndGgpKTp0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LmdldFZhbHVlKHQpfSxlLnByb3RvdHlwZS5zZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxyKXtpZihudWxsIT1lKXt2YXIgbj1cImxheWVycy5cIit0aGlzLmlkK1wiLnBhaW50LlwiK3Q7aWYodGhpcy5fdmFsaWRhdGUoYXIsbix0LGUscikpcmV0dXJufXYodCxcIi10cmFuc2l0aW9uXCIpP3RoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuc2V0VHJhbnNpdGlvbih0LnNsaWNlKDAsLVwiLXRyYW5zaXRpb25cIi5sZW5ndGgpLGV8fHZvaWQgMCk6dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5zZXRWYWx1ZSh0LGUpfSxlLnByb3RvdHlwZS5pc0hpZGRlbj1mdW5jdGlvbih0KXtyZXR1cm4hISh0aGlzLm1pbnpvb20mJnQ8dGhpcy5taW56b29tKXx8ISEodGhpcy5tYXh6b29tJiZ0Pj10aGlzLm1heHpvb20pfHxcIm5vbmVcIj09PXRoaXMudmlzaWJpbGl0eX0sZS5wcm90b3R5cGUudXBkYXRlVHJhbnNpdGlvbnM9ZnVuY3Rpb24odCl7dGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50PXRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQudHJhbnNpdGlvbmVkKHQsdGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50KX0sZS5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQuaGFzVHJhbnNpdGlvbigpfSxlLnByb3RvdHlwZS5yZWNhbGN1bGF0ZT1mdW5jdGlvbih0KXt0aGlzLl91bmV2YWx1YXRlZExheW91dCYmKHRoaXMubGF5b3V0PXRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0LnBvc3NpYmx5RXZhbHVhdGUodCkpLHRoaXMucGFpbnQ9dGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50LnBvc3NpYmx5RXZhbHVhdGUodCl9LGUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PXtpZDp0aGlzLmlkLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLnNvdXJjZSxcInNvdXJjZS1sYXllclwiOnRoaXMuc291cmNlTGF5ZXIsbWV0YWRhdGE6dGhpcy5tZXRhZGF0YSxtaW56b29tOnRoaXMubWluem9vbSxtYXh6b29tOnRoaXMubWF4em9vbSxmaWx0ZXI6dGhpcy5maWx0ZXIsbGF5b3V0OnRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0JiZ0aGlzLl91bmV2YWx1YXRlZExheW91dC5zZXJpYWxpemUoKSxwYWludDp0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50JiZ0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LnNlcmlhbGl6ZSgpfTtyZXR1cm5cIm5vbmVcIj09PXRoaXMudmlzaWJpbGl0eSYmKHQubGF5b3V0PXQubGF5b3V0fHx7fSx0LmxheW91dC52aXNpYmlsaXR5PVwibm9uZVwiKSx5KHQsZnVuY3Rpb24odCxlKXtyZXR1cm4hKHZvaWQgMD09PXR8fFwibGF5b3V0XCI9PT1lJiYhT2JqZWN0LmtleXModCkubGVuZ3RofHxcInBhaW50XCI9PT1lJiYhT2JqZWN0LmtleXModCkubGVuZ3RoKX0pfSxlLnByb3RvdHlwZS5fdmFsaWRhdGU9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4oIWl8fCExIT09aS52YWxpZGF0ZSkmJnNyKHRoaXMsdC5jYWxsKG5yLHtrZXk6ZSxsYXllclR5cGU6dGhpcy50eXBlLG9iamVjdEtleTpyLHZhbHVlOm4sc3R5bGVTcGVjOkksc3R5bGU6e2dseXBoczohMCxzcHJpdGU6ITB9fSkpfSxlLnByb3RvdHlwZS5oYXNPZmZzY3JlZW5QYXNzPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbigpe30sZX0oTyksR3I9e0ludDg6SW50OEFycmF5LFVpbnQ4OlVpbnQ4QXJyYXksSW50MTY6SW50MTZBcnJheSxVaW50MTY6VWludDE2QXJyYXksSW50MzI6SW50MzJBcnJheSxVaW50MzI6VWludDMyQXJyYXksRmxvYXQzMjpGbG9hdDMyQXJyYXl9LFlyPWZ1bmN0aW9uKHQsZSl7dGhpcy5fc3RydWN0QXJyYXk9dCx0aGlzLl9wb3MxPWUqdGhpcy5zaXplLHRoaXMuX3BvczI9dGhpcy5fcG9zMS8yLHRoaXMuX3BvczQ9dGhpcy5fcG9zMS80LHRoaXMuX3Bvczg9dGhpcy5fcG9zMS84fSxXcj1mdW5jdGlvbigpe3RoaXMuaXNUcmFuc2ZlcnJlZD0hMSx0aGlzLmNhcGFjaXR5PS0xLHRoaXMucmVzaXplKDApfTtmdW5jdGlvbiBYcih0LGUpe3ZvaWQgMD09PWUmJihlPTEpO3ZhciByPTAsbj0wO3JldHVybnttZW1iZXJzOnQubWFwKGZ1bmN0aW9uKHQpe3ZhciBpLGE9KGk9dC50eXBlLEdyW2ldLkJZVEVTX1BFUl9FTEVNRU5UKSxvPXI9WnIocixNYXRoLm1heChlLGEpKSxzPXQuY29tcG9uZW50c3x8MTtyZXR1cm4gbj1NYXRoLm1heChuLGEpLHIrPWEqcyx7bmFtZTp0Lm5hbWUsdHlwZTp0LnR5cGUsY29tcG9uZW50czpzLG9mZnNldDpvfX0pLHNpemU6WnIocixNYXRoLm1heChuLGUpKSxhbGlnbm1lbnQ6ZX19ZnVuY3Rpb24gWnIodCxlKXtyZXR1cm4gTWF0aC5jZWlsKHQvZSkqZX1Xci5zZXJpYWxpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fdHJpbSgpLGUmJih0LmlzVHJhbnNmZXJyZWQ9ITAsZS5wdXNoKHQuYXJyYXlCdWZmZXIpKSx7bGVuZ3RoOnQubGVuZ3RoLGFycmF5QnVmZmVyOnQuYXJyYXlCdWZmZXJ9fSxXci5kZXNlcmlhbGl6ZT1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QuY3JlYXRlKHRoaXMucHJvdG90eXBlKTtyZXR1cm4gZS5hcnJheUJ1ZmZlcj10LmFycmF5QnVmZmVyLGUubGVuZ3RoPXQubGVuZ3RoLGUuY2FwYWNpdHk9dC5hcnJheUJ1ZmZlci5ieXRlTGVuZ3RoL2UuYnl0ZXNQZXJFbGVtZW50LGUuX3JlZnJlc2hWaWV3cygpLGV9LFdyLnByb3RvdHlwZS5fdHJpbT1mdW5jdGlvbigpe3RoaXMubGVuZ3RoIT09dGhpcy5jYXBhY2l0eSYmKHRoaXMuY2FwYWNpdHk9dGhpcy5sZW5ndGgsdGhpcy5hcnJheUJ1ZmZlcj10aGlzLmFycmF5QnVmZmVyLnNsaWNlKDAsdGhpcy5sZW5ndGgqdGhpcy5ieXRlc1BlckVsZW1lbnQpLHRoaXMuX3JlZnJlc2hWaWV3cygpKX0sV3IucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5sZW5ndGg9MH0sV3IucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0KXt0aGlzLnJlc2VydmUodCksdGhpcy5sZW5ndGg9dH0sV3IucHJvdG90eXBlLnJlc2VydmU9ZnVuY3Rpb24odCl7aWYodD50aGlzLmNhcGFjaXR5KXt0aGlzLmNhcGFjaXR5PU1hdGgubWF4KHQsTWF0aC5mbG9vcig1KnRoaXMuY2FwYWNpdHkpLDEyOCksdGhpcy5hcnJheUJ1ZmZlcj1uZXcgQXJyYXlCdWZmZXIodGhpcy5jYXBhY2l0eSp0aGlzLmJ5dGVzUGVyRWxlbWVudCk7dmFyIGU9dGhpcy51aW50ODt0aGlzLl9yZWZyZXNoVmlld3MoKSxlJiZ0aGlzLnVpbnQ4LnNldChlKX19LFdyLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiX3JlZnJlc2hWaWV3cygpIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBjb25jcmV0ZSBTdHJ1Y3RBcnJheSBsYXlvdXRcIil9O3ZhciAkcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUocisxKTt2YXIgbj0yKnI7cmV0dXJuIHRoaXMuaW50MTZbbiswXT10LHRoaXMuaW50MTZbbisxXT1lLHJ9LGV9KFdyKTskci5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTQscHIoXCJTdHJ1Y3RBcnJheUxheW91dDJpNFwiLCRyKTt2YXIgSnI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShpKzEpO3ZhciBhPTQqaTtyZXR1cm4gdGhpcy5pbnQxNlthKzBdPXQsdGhpcy5pbnQxNlthKzFdPWUsdGhpcy5pbnQxNlthKzJdPXIsdGhpcy5pbnQxNlthKzNdPW4saX0sZX0oV3IpO0pyLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9OCxwcihcIlN0cnVjdEFycmF5TGF5b3V0NGk4XCIsSnIpO3ZhciBLcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShvKzEpO3ZhciBzPTYqbztyZXR1cm4gdGhpcy5pbnQxNltzKzBdPXQsdGhpcy5pbnQxNltzKzFdPWUsdGhpcy5pbnQxNltzKzJdPXIsdGhpcy5pbnQxNltzKzNdPW4sdGhpcy5pbnQxNltzKzRdPWksdGhpcy5pbnQxNltzKzVdPWEsb30sZX0oV3IpO0tyLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTIscHIoXCJTdHJ1Y3RBcnJheUxheW91dDJpNGkxMlwiLEtyKTt2YXIgUXI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3ZhciBsPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKGwrMSk7dmFyIGM9NipsLHU9MTIqbDtyZXR1cm4gdGhpcy5pbnQxNltjKzBdPXQsdGhpcy5pbnQxNltjKzFdPWUsdGhpcy5pbnQxNltjKzJdPXIsdGhpcy5pbnQxNltjKzNdPW4sdGhpcy51aW50OFt1KzhdPWksdGhpcy51aW50OFt1KzldPWEsdGhpcy51aW50OFt1KzEwXT1vLHRoaXMudWludDhbdSsxMV09cyxsfSxlfShXcik7UXIucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0xMixwcihcIlN0cnVjdEFycmF5TGF5b3V0NGk0dWIxMlwiLFFyKTt2YXIgdG49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt2YXIgbD10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShsKzEpO3ZhciBjPTgqbDtyZXR1cm4gdGhpcy5pbnQxNltjKzBdPXQsdGhpcy5pbnQxNltjKzFdPWUsdGhpcy5pbnQxNltjKzJdPXIsdGhpcy5pbnQxNltjKzNdPW4sdGhpcy51aW50MTZbYys0XT1pLHRoaXMudWludDE2W2MrNV09YSx0aGlzLnVpbnQxNltjKzZdPW8sdGhpcy51aW50MTZbYys3XT1zLGx9LGV9KFdyKTt0bi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTE2LHByKFwiU3RydWN0QXJyYXlMYXlvdXQ0aTR1aTE2XCIsdG4pO3ZhciBlbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUobisxKTt2YXIgaT0zKm47cmV0dXJuIHRoaXMuZmxvYXQzMltpKzBdPXQsdGhpcy5mbG9hdDMyW2krMV09ZSx0aGlzLmZsb2F0MzJbaSsyXT1yLG59LGV9KFdyKTtlbi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTEyLHByKFwiU3RydWN0QXJyYXlMYXlvdXQzZjEyXCIsZW4pO3ZhciBybj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDMyPW5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUoZSsxKTt2YXIgcj0xKmU7cmV0dXJuIHRoaXMudWludDMyW3IrMF09dCxlfSxlfShXcik7cm4ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD00LHByKFwiU3RydWN0QXJyYXlMYXlvdXQxdWw0XCIscm4pO3ZhciBubj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MzI9bmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1KXt2YXIgaD10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShoKzEpO3ZhciBmPTEyKmgscD02Kmg7cmV0dXJuIHRoaXMuaW50MTZbZiswXT10LHRoaXMuaW50MTZbZisxXT1lLHRoaXMuaW50MTZbZisyXT1yLHRoaXMuaW50MTZbZiszXT1uLHRoaXMuaW50MTZbZis0XT1pLHRoaXMuaW50MTZbZis1XT1hLHRoaXMudWludDMyW3ArM109byx0aGlzLnVpbnQxNltmKzhdPXMsdGhpcy51aW50MTZbZis5XT1sLHRoaXMuaW50MTZbZisxMF09Yyx0aGlzLmludDE2W2YrMTFdPXUsaH0sZX0oV3IpO25uLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MjQscHIoXCJTdHJ1Y3RBcnJheUxheW91dDZpMXVsMnVpMmkyNFwiLG5uKTt2YXIgYW49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUobysxKTt2YXIgcz02Km87cmV0dXJuIHRoaXMuaW50MTZbcyswXT10LHRoaXMuaW50MTZbcysxXT1lLHRoaXMuaW50MTZbcysyXT1yLHRoaXMuaW50MTZbcyszXT1uLHRoaXMuaW50MTZbcys0XT1pLHRoaXMuaW50MTZbcys1XT1hLG99LGV9KFdyKTthbi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTEyLHByKFwiU3RydWN0QXJyYXlMYXlvdXQyaTJpMmkxMlwiLGFuKTt2YXIgb249ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShyKzEpO3ZhciBuPTQqcjtyZXR1cm4gdGhpcy51aW50OFtuKzBdPXQsdGhpcy51aW50OFtuKzFdPWUscn0sZX0oV3IpO29uLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NCxwcihcIlN0cnVjdEFycmF5TGF5b3V0MnViNFwiLG9uKTt2YXIgc249ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQzMj1uZXcgVWludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxoLGYscCl7dmFyIGQ9dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUoZCsxKTt2YXIgZz0yMCpkLHY9MTAqZCxtPTQwKmQ7cmV0dXJuIHRoaXMuaW50MTZbZyswXT10LHRoaXMuaW50MTZbZysxXT1lLHRoaXMudWludDE2W2crMl09cix0aGlzLnVpbnQxNltnKzNdPW4sdGhpcy51aW50MzJbdisyXT1pLHRoaXMudWludDMyW3YrM109YSx0aGlzLnVpbnQzMlt2KzRdPW8sdGhpcy51aW50MTZbZysxMF09cyx0aGlzLnVpbnQxNltnKzExXT1sLHRoaXMudWludDE2W2crMTJdPWMsdGhpcy5mbG9hdDMyW3YrN109dSx0aGlzLmZsb2F0MzJbdis4XT1oLHRoaXMudWludDhbbSszNl09Zix0aGlzLnVpbnQ4W20rMzddPXAsZH0sZX0oV3IpO3NuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NDAscHIoXCJTdHJ1Y3RBcnJheUxheW91dDJpMnVpM3VsM3VpMmYydWI0MFwiLHNuKTt2YXIgbG49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUoZSsxKTt2YXIgcj0xKmU7cmV0dXJuIHRoaXMuZmxvYXQzMltyKzBdPXQsZX0sZX0oV3IpO2xuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NCxwcihcIlN0cnVjdEFycmF5TGF5b3V0MWY0XCIsbG4pO3ZhciBjbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShuKzEpO3ZhciBpPTMqbjtyZXR1cm4gdGhpcy5pbnQxNltpKzBdPXQsdGhpcy5pbnQxNltpKzFdPWUsdGhpcy5pbnQxNltpKzJdPXIsbn0sZX0oV3IpO2NuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NixwcihcIlN0cnVjdEFycmF5TGF5b3V0M2k2XCIsY24pO3ZhciB1bj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDMyPW5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQxNj1uZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShuKzEpO3ZhciBpPTIqbixhPTQqbjtyZXR1cm4gdGhpcy51aW50MzJbaSswXT10LHRoaXMudWludDE2W2ErMl09ZSx0aGlzLnVpbnQxNlthKzNdPXIsbn0sZX0oV3IpO3VuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9OCxwcihcIlN0cnVjdEFycmF5TGF5b3V0MXVsMnVpOFwiLHVuKTt2YXIgaG49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQxNj1uZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShuKzEpO3ZhciBpPTMqbjtyZXR1cm4gdGhpcy51aW50MTZbaSswXT10LHRoaXMudWludDE2W2krMV09ZSx0aGlzLnVpbnQxNltpKzJdPXIsbn0sZX0oV3IpO2huLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NixwcihcIlN0cnVjdEFycmF5TGF5b3V0M3VpNlwiLGhuKTt2YXIgZm49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQxNj1uZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUocisxKTt2YXIgbj0yKnI7cmV0dXJuIHRoaXMudWludDE2W24rMF09dCx0aGlzLnVpbnQxNltuKzFdPWUscn0sZX0oV3IpO2ZuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NCxwcihcIlN0cnVjdEFycmF5TGF5b3V0MnVpNFwiLGZuKTt2YXIgcG49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShyKzEpO3ZhciBuPTIqcjtyZXR1cm4gdGhpcy5mbG9hdDMyW24rMF09dCx0aGlzLmZsb2F0MzJbbisxXT1lLHJ9LGV9KFdyKTtwbi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTgscHIoXCJTdHJ1Y3RBcnJheUxheW91dDJmOFwiLHBuKTt2YXIgZG49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUoaSsxKTt2YXIgYT00Kmk7cmV0dXJuIHRoaXMuZmxvYXQzMlthKzBdPXQsdGhpcy5mbG9hdDMyW2ErMV09ZSx0aGlzLmZsb2F0MzJbYSsyXT1yLHRoaXMuZmxvYXQzMlthKzNdPW4saX0sZX0oV3IpO2RuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTYscHIoXCJTdHJ1Y3RBcnJheUxheW91dDRmMTZcIixkbik7dmFyIGduPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZTt2YXIgcj17YW5jaG9yUG9pbnRYOntjb25maWd1cmFibGU6ITB9LGFuY2hvclBvaW50WTp7Y29uZmlndXJhYmxlOiEwfSx4MTp7Y29uZmlndXJhYmxlOiEwfSx5MTp7Y29uZmlndXJhYmxlOiEwfSx4Mjp7Y29uZmlndXJhYmxlOiEwfSx5Mjp7Y29uZmlndXJhYmxlOiEwfSxmZWF0dXJlSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sc291cmNlTGF5ZXJJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxidWNrZXRJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxyYWRpdXM6e2NvbmZpZ3VyYWJsZTohMH0sc2lnbmVkRGlzdGFuY2VGcm9tQW5jaG9yOntjb25maWd1cmFibGU6ITB9LGFuY2hvclBvaW50Ontjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5hbmNob3JQb2ludFguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMF19LHIuYW5jaG9yUG9pbnRYLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzBdPXR9LHIuYW5jaG9yUG9pbnRZLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzFdfSxyLmFuY2hvclBvaW50WS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisxXT10fSxyLngxLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzJdfSxyLngxLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzJdPXR9LHIueTEuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrM119LHIueTEuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrM109dH0sci54Mi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMis0XX0sci54Mi5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMis0XT10fSxyLnkyLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzVdfSxyLnkyLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzVdPXR9LHIuZmVhdHVyZUluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCszXX0sci5mZWF0dXJlSW5kZXguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzNdPXR9LHIuc291cmNlTGF5ZXJJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrOF19LHIuc291cmNlTGF5ZXJJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrOF09dH0sci5idWNrZXRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrOV19LHIuYnVja2V0SW5kZXguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzldPXR9LHIucmFkaXVzLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzEwXX0sci5yYWRpdXMuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMTBdPXR9LHIuc2lnbmVkRGlzdGFuY2VGcm9tQW5jaG9yLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzExXX0sci5zaWduZWREaXN0YW5jZUZyb21BbmNob3Iuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMTFdPXR9LHIuYW5jaG9yUG9pbnQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBsKHRoaXMuYW5jaG9yUG9pbnRYLHRoaXMuYW5jaG9yUG9pbnRZKX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsciksZX0oWXIpO2duLnByb3RvdHlwZS5zaXplPTI0O3ZhciB2bj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGduKHRoaXMsdCl9LGV9KG5uKTtwcihcIkNvbGxpc2lvbkJveEFycmF5XCIsdm4pO3ZhciBtbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWU7dmFyIHI9e2FuY2hvclg6e2NvbmZpZ3VyYWJsZTohMH0sYW5jaG9yWTp7Y29uZmlndXJhYmxlOiEwfSxnbHlwaFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sbnVtR2x5cGhzOntjb25maWd1cmFibGU6ITB9LHZlcnRleFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sbGluZVN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sbGluZUxlbmd0aDp7Y29uZmlndXJhYmxlOiEwfSxzZWdtZW50Ontjb25maWd1cmFibGU6ITB9LGxvd2VyU2l6ZTp7Y29uZmlndXJhYmxlOiEwfSx1cHBlclNpemU6e2NvbmZpZ3VyYWJsZTohMH0sbGluZU9mZnNldFg6e2NvbmZpZ3VyYWJsZTohMH0sbGluZU9mZnNldFk6e2NvbmZpZ3VyYWJsZTohMH0sd3JpdGluZ01vZGU6e2NvbmZpZ3VyYWJsZTohMH0saGlkZGVuOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5hbmNob3JYLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzBdfSxyLmFuY2hvclguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMF09dH0sci5hbmNob3JZLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzFdfSxyLmFuY2hvclkuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV09dH0sci5nbHlwaFN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzJdfSxyLmdseXBoU3RhcnRJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMl09dH0sci5udW1HbHlwaHMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzNdfSxyLm51bUdseXBocy5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrM109dH0sci52ZXJ0ZXhTdGFydEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCsyXX0sci52ZXJ0ZXhTdGFydEluZGV4LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCsyXT10fSxyLmxpbmVTdGFydEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCszXX0sci5saW5lU3RhcnRJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrM109dH0sci5saW5lTGVuZ3RoLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCs0XX0sci5saW5lTGVuZ3RoLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCs0XT10fSxyLnNlZ21lbnQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzEwXX0sci5zZWdtZW50LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxMF09dH0sci5sb3dlclNpemUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzExXX0sci5sb3dlclNpemUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzExXT10fSxyLnVwcGVyU2l6ZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTJdfSxyLnVwcGVyU2l6ZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTJdPXR9LHIubGluZU9mZnNldFguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCs3XX0sci5saW5lT2Zmc2V0WC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzddPXR9LHIubGluZU9mZnNldFkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCs4XX0sci5saW5lT2Zmc2V0WS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzhdPXR9LHIud3JpdGluZ01vZGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczErMzZdfSxyLndyaXRpbmdNb2RlLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50OFt0aGlzLl9wb3MxKzM2XT10fSxyLmhpZGRlbi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSszN119LHIuaGlkZGVuLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50OFt0aGlzLl9wb3MxKzM3XT10fSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfShZcik7bW4ucHJvdG90eXBlLnNpemU9NDA7dmFyIHluPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbW4odGhpcyx0KX0sZX0oc24pO3ByKFwiUGxhY2VkU3ltYm9sQXJyYXlcIix5bik7dmFyIHhuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZTt2YXIgcj17b2Zmc2V0WDp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIHIub2Zmc2V0WC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzBdfSxyLm9mZnNldFguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCswXT10fSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfShZcik7eG4ucHJvdG90eXBlLnNpemU9NDt2YXIgYm49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXRvZmZzZXRYPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZsb2F0MzJbMSp0KzBdfSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB4bih0aGlzLHQpfSxlfShsbik7cHIoXCJHbHlwaE9mZnNldEFycmF5XCIsYm4pO3ZhciBfbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWU7dmFyIHI9e3g6e2NvbmZpZ3VyYWJsZTohMH0seTp7Y29uZmlndXJhYmxlOiEwfSx0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcjp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIHIueC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiswXX0sci54LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzBdPXR9LHIueS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisxXX0sci55LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzFdPXR9LHIudGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3IuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMl19LHIudGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3Iuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMl09dH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsciksZX0oWXIpO19uLnByb3RvdHlwZS5zaXplPTY7dmFyIHduPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0eD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnQxNlszKnQrMF19LGUucHJvdG90eXBlLmdldHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW50MTZbMyp0KzFdfSxlLnByb3RvdHlwZS5nZXR0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnQxNlszKnQrMl19LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IF9uKHRoaXMsdCl9LGV9KGNuKTtwcihcIlN5bWJvbExpbmVWZXJ0ZXhBcnJheVwiLHduKTt2YXIga249ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lO3ZhciByPXtmZWF0dXJlSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sc291cmNlTGF5ZXJJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxidWNrZXRJbmRleDp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIHIuZmVhdHVyZUluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCswXX0sci5mZWF0dXJlSW5kZXguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzBdPXR9LHIuc291cmNlTGF5ZXJJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMl19LHIuc291cmNlTGF5ZXJJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMl09dH0sci5idWNrZXRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrM119LHIuYnVja2V0SW5kZXguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzNdPXR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHIpLGV9KFlyKTtrbi5wcm90b3R5cGUuc2l6ZT04O3ZhciBBbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGtuKHRoaXMsdCl9LGV9KHVuKTtwcihcIkZlYXR1cmVJbmRleEFycmF5XCIsQW4pO3ZhciBUbj1Ycihbe25hbWU6XCJhX3Bvc1wiLGNvbXBvbmVudHM6Mix0eXBlOlwiSW50MTZcIn1dLDQpLm1lbWJlcnMsTW49ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9W10pLHRoaXMuc2VnbWVudHM9dH07TW4ucHJvdG90eXBlLnByZXBhcmVTZWdtZW50PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnNlZ21lbnRzW3RoaXMuc2VnbWVudHMubGVuZ3RoLTFdO3JldHVybiB0Pk1uLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIJiZfKFwiTWF4IHZlcnRpY2VzIHBlciBzZWdtZW50IGlzIFwiK01uLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIK1wiOiBidWNrZXQgcmVxdWVzdGVkIFwiK3QpLCghbnx8bi52ZXJ0ZXhMZW5ndGgrdD5Nbi5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCkmJihuPXt2ZXJ0ZXhPZmZzZXQ6ZS5sZW5ndGgscHJpbWl0aXZlT2Zmc2V0OnIubGVuZ3RoLHZlcnRleExlbmd0aDowLHByaW1pdGl2ZUxlbmd0aDowfSx0aGlzLnNlZ21lbnRzLnB1c2gobikpLG59LE1uLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWdtZW50c30sTW4ucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPXRoaXMuc2VnbWVudHM7dDxlLmxlbmd0aDt0Kz0xKXt2YXIgcj1lW3RdO2Zvcih2YXIgbiBpbiByLnZhb3Mpci52YW9zW25dLmRlc3Ryb3koKX19LE1uLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIPU1hdGgucG93KDIsMTYpLTEscHIoXCJTZWdtZW50VmVjdG9yXCIsTW4pO3ZhciBTbj1mdW5jdGlvbih0LGUpe3JldHVybiAyNTYqKHQ9ZihNYXRoLmZsb29yKHQpLDAsMjU1KSkrZihNYXRoLmZsb29yKGUpLDAsMjU1KX07ZnVuY3Rpb24gRW4odCl7cmV0dXJuW1NuKDI1NSp0LnIsMjU1KnQuZyksU24oMjU1KnQuYiwyNTUqdC5hKV19dmFyIENuPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnZhbHVlPXQsdGhpcy5uYW1lPWUsdGhpcy50eXBlPXIsdGhpcy5zdGF0aXN0aWNzPXttYXg6LTEvMH19O0NuLnByb3RvdHlwZS5kZWZpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuW1wiI2RlZmluZSBIQVNfVU5JRk9STV91X1wiK3RoaXMubmFtZV19LENuLnByb3RvdHlwZS5wb3B1bGF0ZVBhaW50QXJyYXk9ZnVuY3Rpb24oKXt9LENuLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24oKXt9LENuLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7fSxDbi5wcm90b3R5cGUuc2V0VW5pZm9ybXM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5jb25zdGFudE9yKHRoaXMudmFsdWUpLGE9dC5nbDtcImNvbG9yXCI9PT10aGlzLnR5cGU/YS51bmlmb3JtNGYoZS51bmlmb3Jtc1tcInVfXCIrdGhpcy5uYW1lXSxpLnIsaS5nLGkuYixpLmEpOmEudW5pZm9ybTFmKGUudW5pZm9ybXNbXCJ1X1wiK3RoaXMubmFtZV0saSl9O3ZhciBMbj1mdW5jdGlvbih0LGUscil7dGhpcy5leHByZXNzaW9uPXQsdGhpcy5uYW1lPWUsdGhpcy50eXBlPXIsdGhpcy5zdGF0aXN0aWNzPXttYXg6LTEvMH07dmFyIG49XCJjb2xvclwiPT09cj9wbjpsbjt0aGlzLnBhaW50VmVydGV4QXR0cmlidXRlcz1be25hbWU6XCJhX1wiK2UsdHlwZTpcIkZsb2F0MzJcIixjb21wb25lbnRzOlwiY29sb3JcIj09PXI/MjoxLG9mZnNldDowfV0sdGhpcy5wYWludFZlcnRleEFycmF5PW5ldyBufTtMbi5wcm90b3R5cGUuZGVmaW5lcz1mdW5jdGlvbigpe3JldHVybltdfSxMbi5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5wYWludFZlcnRleEFycmF5LG49ci5sZW5ndGg7ci5yZXNlcnZlKHQpO3ZhciBpPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgTHIoMCksZSk7aWYoXCJjb2xvclwiPT09dGhpcy50eXBlKWZvcih2YXIgYT1FbihpKSxvPW47bzx0O28rKylyLmVtcGxhY2VCYWNrKGFbMF0sYVsxXSk7ZWxzZXtmb3IodmFyIHM9bjtzPHQ7cysrKXIuZW1wbGFjZUJhY2soaSk7dGhpcy5zdGF0aXN0aWNzLm1heD1NYXRoLm1heCh0aGlzLnN0YXRpc3RpY3MubWF4LGkpfX0sTG4ucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnBhaW50VmVydGV4QXJyYXkmJih0aGlzLnBhaW50VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMucGFpbnRWZXJ0ZXhBcnJheSx0aGlzLnBhaW50VmVydGV4QXR0cmlidXRlcykpfSxMbi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMucGFpbnRWZXJ0ZXhCdWZmZXImJnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpfSxMbi5wcm90b3R5cGUuc2V0VW5pZm9ybXM9ZnVuY3Rpb24odCxlKXt0LmdsLnVuaWZvcm0xZihlLnVuaWZvcm1zW1wiYV9cIit0aGlzLm5hbWUrXCJfdFwiXSwwKX07dmFyIHpuPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5leHByZXNzaW9uPXQsdGhpcy5uYW1lPWUsdGhpcy50eXBlPXIsdGhpcy51c2VJbnRlZ2VyWm9vbT1uLHRoaXMuem9vbT1pLHRoaXMuc3RhdGlzdGljcz17bWF4Oi0xLzB9O3ZhciBhPVwiY29sb3JcIj09PXI/ZG46cG47dGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXM9W3tuYW1lOlwiYV9cIitlLHR5cGU6XCJGbG9hdDMyXCIsY29tcG9uZW50czpcImNvbG9yXCI9PT1yPzQ6MixvZmZzZXQ6MH1dLHRoaXMucGFpbnRWZXJ0ZXhBcnJheT1uZXcgYX07em4ucHJvdG90eXBlLmRlZmluZXM9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sem4ucHJvdG90eXBlLnBvcHVsYXRlUGFpbnRBcnJheT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMucGFpbnRWZXJ0ZXhBcnJheSxuPXIubGVuZ3RoO3IucmVzZXJ2ZSh0KTt2YXIgaT10aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IExyKHRoaXMuem9vbSksZSksYT10aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IExyKHRoaXMuem9vbSsxKSxlKTtpZihcImNvbG9yXCI9PT10aGlzLnR5cGUpZm9yKHZhciBvPUVuKGkpLHM9RW4oYSksbD1uO2w8dDtsKyspci5lbXBsYWNlQmFjayhvWzBdLG9bMV0sc1swXSxzWzFdKTtlbHNle2Zvcih2YXIgYz1uO2M8dDtjKyspci5lbXBsYWNlQmFjayhpLGEpO3RoaXMuc3RhdGlzdGljcy5tYXg9TWF0aC5tYXgodGhpcy5zdGF0aXN0aWNzLm1heCxpLGEpfX0sem4ucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnBhaW50VmVydGV4QXJyYXkmJih0aGlzLnBhaW50VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMucGFpbnRWZXJ0ZXhBcnJheSx0aGlzLnBhaW50VmVydGV4QXR0cmlidXRlcykpfSx6bi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMucGFpbnRWZXJ0ZXhCdWZmZXImJnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpfSx6bi5wcm90b3R5cGUuaW50ZXJwb2xhdGlvbkZhY3Rvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy51c2VJbnRlZ2VyWm9vbT90aGlzLmV4cHJlc3Npb24uaW50ZXJwb2xhdGlvbkZhY3RvcihNYXRoLmZsb29yKHQpLHRoaXMuem9vbSx0aGlzLnpvb20rMSk6dGhpcy5leHByZXNzaW9uLmludGVycG9sYXRpb25GYWN0b3IodCx0aGlzLnpvb20sdGhpcy56b29tKzEpfSx6bi5wcm90b3R5cGUuc2V0VW5pZm9ybXM9ZnVuY3Rpb24odCxlLHIpe3QuZ2wudW5pZm9ybTFmKGUudW5pZm9ybXNbXCJhX1wiK3RoaXMubmFtZStcIl90XCJdLHRoaXMuaW50ZXJwb2xhdGlvbkZhY3RvcihyLnpvb20pKX07dmFyIE9uPWZ1bmN0aW9uKCl7dGhpcy5iaW5kZXJzPXt9LHRoaXMuY2FjaGVLZXk9XCJcIix0aGlzLl9idWZmZXJzPVtdfTtPbi5jcmVhdGVEeW5hbWljPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1uZXcgT24saT1bXTtmb3IodmFyIGEgaW4gdC5wYWludC5fdmFsdWVzKWlmKHIoYSkpe3ZhciBvPXQucGFpbnQuZ2V0KGEpO2lmKG8gaW5zdGFuY2VvZiBGciYmby5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uW1wicHJvcGVydHktZnVuY3Rpb25cIl0pe3ZhciBzPURuKGEsdC50eXBlKSxsPW8ucHJvcGVydHkuc3BlY2lmaWNhdGlvbi50eXBlLGM9by5wcm9wZXJ0eS51c2VJbnRlZ2VyWm9vbTtcImNvbnN0YW50XCI9PT1vLnZhbHVlLmtpbmQ/KG4uYmluZGVyc1thXT1uZXcgQ24oby52YWx1ZSxzLGwpLGkucHVzaChcIi91X1wiK3MpKTpcInNvdXJjZVwiPT09by52YWx1ZS5raW5kPyhuLmJpbmRlcnNbYV09bmV3IExuKG8udmFsdWUscyxsKSxpLnB1c2goXCIvYV9cIitzKSk6KG4uYmluZGVyc1thXT1uZXcgem4oby52YWx1ZSxzLGwsYyxlKSxpLnB1c2goXCIvel9cIitzKSl9fXJldHVybiBuLmNhY2hlS2V5PWkuc29ydCgpLmpvaW4oXCJcIiksbn0sT24ucHJvdG90eXBlLnBvcHVsYXRlUGFpbnRBcnJheXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdGhpcy5iaW5kZXJzKXRoaXMuYmluZGVyc1tyXS5wb3B1bGF0ZVBhaW50QXJyYXkodCxlKX0sT24ucHJvdG90eXBlLmRlZmluZXM9ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcy5iaW5kZXJzKXQucHVzaC5hcHBseSh0LHRoaXMuYmluZGVyc1tlXS5kZWZpbmVzKCkpO3JldHVybiB0fSxPbi5wcm90b3R5cGUuc2V0VW5pZm9ybXM9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpIGluIHRoaXMuYmluZGVycyl0aGlzLmJpbmRlcnNbaV0uc2V0VW5pZm9ybXModCxlLG4sci5nZXQoaSkpfSxPbi5wcm90b3R5cGUuZ2V0UGFpbnRWZXJ0ZXhCdWZmZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2J1ZmZlcnN9LE9uLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuYmluZGVycyl0aGlzLmJpbmRlcnNbZV0udXBsb2FkKHQpO3ZhciByPVtdO2Zvcih2YXIgbiBpbiB0aGlzLmJpbmRlcnMpe3ZhciBpPXRoaXMuYmluZGVyc1tuXTsoaSBpbnN0YW5jZW9mIExufHxpIGluc3RhbmNlb2Ygem4pJiZpLnBhaW50VmVydGV4QnVmZmVyJiZyLnB1c2goaS5wYWludFZlcnRleEJ1ZmZlcil9dGhpcy5fYnVmZmVycz1yfSxPbi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLmJpbmRlcnMpdGhpcy5iaW5kZXJzW3RdLmRlc3Ryb3koKX07dmFyIEluPWZ1bmN0aW9uKHQsZSxyLG4pe3ZvaWQgMD09PW4mJihuPWZ1bmN0aW9uKCl7cmV0dXJuITB9KSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucz17fTtmb3IodmFyIGk9MCxhPWU7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO3RoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW28uaWRdPU9uLmNyZWF0ZUR5bmFtaWMobyxyLG4pLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW28uaWRdLmxheW91dEF0dHJpYnV0ZXM9dH19O2Z1bmN0aW9uIERuKHQsZSl7cmV0dXJue1widGV4dC1vcGFjaXR5XCI6XCJvcGFjaXR5XCIsXCJpY29uLW9wYWNpdHlcIjpcIm9wYWNpdHlcIixcInRleHQtY29sb3JcIjpcImZpbGxfY29sb3JcIixcImljb24tY29sb3JcIjpcImZpbGxfY29sb3JcIixcInRleHQtaGFsby1jb2xvclwiOlwiaGFsb19jb2xvclwiLFwiaWNvbi1oYWxvLWNvbG9yXCI6XCJoYWxvX2NvbG9yXCIsXCJ0ZXh0LWhhbG8tYmx1clwiOlwiaGFsb19ibHVyXCIsXCJpY29uLWhhbG8tYmx1clwiOlwiaGFsb19ibHVyXCIsXCJ0ZXh0LWhhbG8td2lkdGhcIjpcImhhbG9fd2lkdGhcIixcImljb24taGFsby13aWR0aFwiOlwiaGFsb193aWR0aFwiLFwibGluZS1nYXAtd2lkdGhcIjpcImdhcHdpZHRoXCJ9W3RdfHx0LnJlcGxhY2UoZStcIi1cIixcIlwiKS5yZXBsYWNlKC8tL2csXCJfXCIpfUluLnByb3RvdHlwZS5wb3B1bGF0ZVBhaW50QXJyYXlzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zKXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW3JdLnBvcHVsYXRlUGFpbnRBcnJheXModCxlKX0sSW4ucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbdF19LEluLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zKXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW2VdLnVwbG9hZCh0KX0sSW4ucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMpdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbdF0uZGVzdHJveSgpfSxwcihcIkNvbnN0YW50QmluZGVyXCIsQ24pLHByKFwiU291cmNlRXhwcmVzc2lvbkJpbmRlclwiLExuKSxwcihcIkNvbXBvc2l0ZUV4cHJlc3Npb25CaW5kZXJcIix6bikscHIoXCJQcm9ncmFtQ29uZmlndXJhdGlvblwiLE9uLHtvbWl0OltcIl9idWZmZXJzXCJdfSkscHIoXCJQcm9ncmFtQ29uZmlndXJhdGlvblNldFwiLEluKTt2YXIgUG49ODE5MixSbj0oMTYse21pbjotMSpNYXRoLnBvdygyLDE1KSxtYXg6TWF0aC5wb3coMiwxNSktMX0pO2Z1bmN0aW9uIEZuKHQpe2Zvcih2YXIgZT1Qbi90LmV4dGVudCxyPXQubG9hZEdlb21ldHJ5KCksbj0wO248ci5sZW5ndGg7bisrKWZvcih2YXIgaT1yW25dLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTtvLng9TWF0aC5yb3VuZChvLngqZSksby55PU1hdGgucm91bmQoby55KmUpLChvLng8Um4ubWlufHxvLng+Um4ubWF4fHxvLnk8Um4ubWlufHxvLnk+Um4ubWF4KSYmXyhcIkdlb21ldHJ5IGV4Y2VlZHMgYWxsb3dlZCBleHRlbnQsIHJlZHVjZSB5b3VyIHZlY3RvciB0aWxlIGJ1ZmZlciBzaXplXCIpfXJldHVybiByfWZ1bmN0aW9uIEJuKHQsZSxyLG4saSl7dC5lbXBsYWNlQmFjaygyKmUrKG4rMSkvMiwyKnIrKGkrMSkvMil9dmFyIE5uPWZ1bmN0aW9uKHQpe3RoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXJzPXQubGF5ZXJzLHRoaXMubGF5ZXJJZHM9dGhpcy5sYXllcnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSksdGhpcy5pbmRleD10LmluZGV4LHRoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3ICRyLHRoaXMuaW5kZXhBcnJheT1uZXcgaG4sdGhpcy5zZWdtZW50cz1uZXcgTW4sdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9bmV3IEluKFRuLHQubGF5ZXJzLHQuem9vbSl9O2Z1bmN0aW9uIGpuKHQsZSxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXTtpZihabihpLGUpKXJldHVybiEwO2lmKFluKGUsaSxyKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBWbih0LGUpe2lmKDE9PT10Lmxlbmd0aCYmMT09PXRbMF0ubGVuZ3RoKXJldHVybiBYbihlLHRbMF1bMF0pO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWZvcih2YXIgbj1lW3JdLGk9MDtpPG4ubGVuZ3RoO2krKylpZihYbih0LG5baV0pKXJldHVybiEwO2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXtmb3IodmFyIG89dFthXSxzPTA7czxvLmxlbmd0aDtzKyspaWYoWG4oZSxvW3NdKSlyZXR1cm4hMDtmb3IodmFyIGw9MDtsPGUubGVuZ3RoO2wrKylpZihIbihvLGVbbF0pKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIFVuKHQsZSxyKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylmb3IodmFyIGk9ZVtuXSxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBvPXRbYV07aWYoby5sZW5ndGg+PTMpZm9yKHZhciBzPTA7czxpLmxlbmd0aDtzKyspaWYoWm4obyxpW3NdKSlyZXR1cm4hMDtpZihxbihvLGkscikpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gcW4odCxlLHIpe2lmKHQubGVuZ3RoPjEpe2lmKEhuKHQsZSkpcmV0dXJuITA7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYoWW4oZVtuXSx0LHIpKXJldHVybiEwfWZvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKWlmKFluKHRbaV0sZSxyKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBIbih0LGUpe2lmKDA9PT10Lmxlbmd0aHx8MD09PWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGgtMTtyKyspZm9yKHZhciBuPXRbcl0saT10W3IrMV0sYT0wO2E8ZS5sZW5ndGgtMTthKyspaWYoR24obixpLGVbYV0sZVthKzFdKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBHbih0LGUscixuKXtyZXR1cm4gdyh0LHIsbikhPT13KGUscixuKSYmdyh0LGUscikhPT13KHQsZSxuKX1mdW5jdGlvbiBZbih0LGUscil7dmFyIG49cipyO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gdC5kaXN0U3FyKGVbMF0pPG47Zm9yKHZhciBpPTE7aTxlLmxlbmd0aDtpKyspaWYoV24odCxlW2ktMV0sZVtpXSk8bilyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBXbih0LGUscil7dmFyIG49ZS5kaXN0U3FyKHIpO2lmKDA9PT1uKXJldHVybiB0LmRpc3RTcXIoZSk7dmFyIGk9KCh0LngtZS54KSooci54LWUueCkrKHQueS1lLnkpKihyLnktZS55KSkvbjtyZXR1cm4gaTwwP3QuZGlzdFNxcihlKTppPjE/dC5kaXN0U3FyKHIpOnQuZGlzdFNxcihyLnN1YihlKS5fbXVsdChpKS5fYWRkKGUpKX1mdW5jdGlvbiBYbih0LGUpe2Zvcih2YXIgcixuLGksYT0hMSxvPTA7bzx0Lmxlbmd0aDtvKyspZm9yKHZhciBzPTAsbD0ocj10W29dKS5sZW5ndGgtMTtzPHIubGVuZ3RoO2w9cysrKW49cltzXSxpPXJbbF0sbi55PmUueSE9aS55PmUueSYmZS54PChpLngtbi54KSooZS55LW4ueSkvKGkueS1uLnkpK24ueCYmKGE9IWEpO3JldHVybiBhfWZ1bmN0aW9uIFpuKHQsZSl7Zm9yKHZhciByPSExLG49MCxpPXQubGVuZ3RoLTE7bjx0Lmxlbmd0aDtpPW4rKyl7dmFyIGE9dFtuXSxvPXRbaV07YS55PmUueSE9by55PmUueSYmZS54PChvLngtYS54KSooZS55LWEueSkvKG8ueS1hLnkpK2EueCYmKHI9IXIpfXJldHVybiByfWZ1bmN0aW9uICRuKHQsZSxyKXt2YXIgbj1lLnBhaW50LmdldCh0KS52YWx1ZTtyZXR1cm5cImNvbnN0YW50XCI9PT1uLmtpbmQ/bi52YWx1ZTpyLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQoZS5pZCkuYmluZGVyc1t0XS5zdGF0aXN0aWNzLm1heH1mdW5jdGlvbiBKbih0KXtyZXR1cm4gTWF0aC5zcXJ0KHRbMF0qdFswXSt0WzFdKnRbMV0pfWZ1bmN0aW9uIEtuKHQsZSxyLG4saSl7aWYoIWVbMF0mJiFlWzFdKXJldHVybiB0O3ZhciBhPWwuY29udmVydChlKTtcInZpZXdwb3J0XCI9PT1yJiZhLl9yb3RhdGUoLW4pO2Zvcih2YXIgbz1bXSxzPTA7czx0Lmxlbmd0aDtzKyspe2Zvcih2YXIgYz10W3NdLHU9W10saD0wO2g8Yy5sZW5ndGg7aCsrKXUucHVzaChjW2hdLnN1YihhLl9tdWx0KGkpKSk7by5wdXNoKHUpfXJldHVybiBvfU5uLnByb3RvdHlwZS5wb3B1bGF0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49dDtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl0sYT1pLmZlYXR1cmUsbz1pLmluZGV4LHM9aS5zb3VyY2VMYXllckluZGV4O2lmKHRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyKG5ldyBMcih0aGlzLnpvb20pLGEpKXt2YXIgbD1GbihhKTt0aGlzLmFkZEZlYXR1cmUoYSxsKSxlLmZlYXR1cmVJbmRleC5pbnNlcnQoYSxsLG8scyx0aGlzLmluZGV4KX19fSxObi5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGh9LE5uLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxUbiksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKHQpfSxObi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyJiYodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSl9LE5uLnByb3RvdHlwZS5hZGRGZWF0dXJlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj1lO3I8bi5sZW5ndGg7cis9MSlmb3IodmFyIGk9MCxhPW5bcl07aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldLHM9by54LGw9by55O2lmKCEoczwwfHxzPj1Qbnx8bDwwfHxsPj1Qbikpe3ZhciBjPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheSksdT1jLnZlcnRleExlbmd0aDtCbih0aGlzLmxheW91dFZlcnRleEFycmF5LHMsbCwtMSwtMSksQm4odGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxzLGwsMSwtMSksQm4odGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxzLGwsMSwxKSxCbih0aGlzLmxheW91dFZlcnRleEFycmF5LHMsbCwtMSwxKSx0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2sodSx1KzEsdSsyKSx0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2sodSx1KzMsdSsyKSxjLnZlcnRleExlbmd0aCs9NCxjLnByaW1pdGl2ZUxlbmd0aCs9Mn19dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCx0KX0scHIoXCJDaXJjbGVCdWNrZXRcIixObix7b21pdDpbXCJsYXllcnNcIl19KTt2YXIgUW49e3BhaW50Om5ldyBxcih7XCJjaXJjbGUtcmFkaXVzXCI6bmV3IGpyKEkucGFpbnRfY2lyY2xlW1wiY2lyY2xlLXJhZGl1c1wiXSksXCJjaXJjbGUtY29sb3JcIjpuZXcganIoSS5wYWludF9jaXJjbGVbXCJjaXJjbGUtY29sb3JcIl0pLFwiY2lyY2xlLWJsdXJcIjpuZXcganIoSS5wYWludF9jaXJjbGVbXCJjaXJjbGUtYmx1clwiXSksXCJjaXJjbGUtb3BhY2l0eVwiOm5ldyBqcihJLnBhaW50X2NpcmNsZVtcImNpcmNsZS1vcGFjaXR5XCJdKSxcImNpcmNsZS10cmFuc2xhdGVcIjpuZXcgTnIoSS5wYWludF9jaXJjbGVbXCJjaXJjbGUtdHJhbnNsYXRlXCJdKSxcImNpcmNsZS10cmFuc2xhdGUtYW5jaG9yXCI6bmV3IE5yKEkucGFpbnRfY2lyY2xlW1wiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3JcIl0pLFwiY2lyY2xlLXBpdGNoLXNjYWxlXCI6bmV3IE5yKEkucGFpbnRfY2lyY2xlW1wiY2lyY2xlLXBpdGNoLXNjYWxlXCJdKSxcImNpcmNsZS1waXRjaC1hbGlnbm1lbnRcIjpuZXcgTnIoSS5wYWludF9jaXJjbGVbXCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50XCJdKSxcImNpcmNsZS1zdHJva2Utd2lkdGhcIjpuZXcganIoSS5wYWludF9jaXJjbGVbXCJjaXJjbGUtc3Ryb2tlLXdpZHRoXCJdKSxcImNpcmNsZS1zdHJva2UtY29sb3JcIjpuZXcganIoSS5wYWludF9jaXJjbGVbXCJjaXJjbGUtc3Ryb2tlLWNvbG9yXCJdKSxcImNpcmNsZS1zdHJva2Utb3BhY2l0eVwiOm5ldyBqcihJLnBhaW50X2NpcmNsZVtcImNpcmNsZS1zdHJva2Utb3BhY2l0eVwiXSl9KX0sdGk9aShmdW5jdGlvbih0LGUpe3ZhciByO3QuZXhwb3J0cz0oKHI9bmV3IEZsb2F0MzJBcnJheSgzKSlbMF09MCxyWzFdPTAsclsyXT0wLGZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSg0KTt0WzBdPTAsdFsxXT0wLHRbMl09MCx0WzNdPTB9KCkse3ZlYzM6e3RyYW5zZm9ybU1hdDM6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXTtyZXR1cm4gdFswXT1uKnJbMF0raSpyWzNdK2Eqcls2XSx0WzFdPW4qclsxXStpKnJbNF0rYSpyWzddLHRbMl09bipyWzJdK2kqcls1XSthKnJbOF0sdH19LHZlYzQ6e3RyYW5zZm9ybU1hdDQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM107cmV0dXJuIHRbMF09clswXSpuK3JbNF0qaStyWzhdKmErclsxMl0qbyx0WzFdPXJbMV0qbityWzVdKmkrcls5XSphK3JbMTNdKm8sdFsyXT1yWzJdKm4rcls2XSppK3JbMTBdKmErclsxNF0qbyx0WzNdPXJbM10qbityWzddKmkrclsxMV0qYStyWzE1XSpvLHR9fSxtYXQyOntjcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgRmxvYXQzMkFycmF5KDQpO3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTEsdH0scm90YXRlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9TWF0aC5zaW4ociksbD1NYXRoLmNvcyhyKTtyZXR1cm4gdFswXT1uKmwrYSpzLHRbMV09aSpsK28qcyx0WzJdPW4qLXMrYSpsLHRbM109aSotcytvKmwsdH0sc2NhbGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1yWzBdLGw9clsxXTtyZXR1cm4gdFswXT1uKnMsdFsxXT1pKnMsdFsyXT1hKmwsdFszXT1vKmwsdH19LG1hdDM6e2NyZWF0ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBGbG9hdDMyQXJyYXkoOSk7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTEsdFs1XT0wLHRbNl09MCx0WzddPTAsdFs4XT0xLHR9LGZyb21Sb3RhdGlvbjpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc2luKGUpLG49TWF0aC5jb3MoZSk7cmV0dXJuIHRbMF09bix0WzFdPXIsdFsyXT0wLHRbM109LXIsdFs0XT1uLHRbNV09MCx0WzZdPTAsdFs3XT0wLHRbOF09MSx0fX0sbWF0NDp7Y3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSgxNik7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0xLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0xLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fSxpZGVudGl0eTpmdW5jdGlvbih0KXtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9LHRyYW5zbGF0ZTpmdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scyxsLGMsdSxoLGYscCxkLGc9clswXSx2PXJbMV0sbT1yWzJdO3JldHVybiBlPT09dD8odFsxMl09ZVswXSpnK2VbNF0qditlWzhdKm0rZVsxMl0sdFsxM109ZVsxXSpnK2VbNV0qditlWzldKm0rZVsxM10sdFsxNF09ZVsyXSpnK2VbNl0qditlWzEwXSptK2VbMTRdLHRbMTVdPWVbM10qZytlWzddKnYrZVsxMV0qbStlWzE1XSk6KG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLGM9ZVs2XSx1PWVbN10saD1lWzhdLGY9ZVs5XSxwPWVbMTBdLGQ9ZVsxMV0sdFswXT1uLHRbMV09aSx0WzJdPWEsdFszXT1vLHRbNF09cyx0WzVdPWwsdFs2XT1jLHRbN109dSx0WzhdPWgsdFs5XT1mLHRbMTBdPXAsdFsxMV09ZCx0WzEyXT1uKmcrcyp2K2gqbStlWzEyXSx0WzEzXT1pKmcrbCp2K2YqbStlWzEzXSx0WzE0XT1hKmcrYyp2K3AqbStlWzE0XSx0WzE1XT1vKmcrdSp2K2QqbStlWzE1XSksdH0sc2NhbGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXJbMF0saT1yWzFdLGE9clsyXTtyZXR1cm4gdFswXT1lWzBdKm4sdFsxXT1lWzFdKm4sdFsyXT1lWzJdKm4sdFszXT1lWzNdKm4sdFs0XT1lWzRdKmksdFs1XT1lWzVdKmksdFs2XT1lWzZdKmksdFs3XT1lWzddKmksdFs4XT1lWzhdKmEsdFs5XT1lWzldKmEsdFsxMF09ZVsxMF0qYSx0WzExXT1lWzExXSphLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdLHR9LG11bHRpcGx5OmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sYz1lWzZdLHU9ZVs3XSxoPWVbOF0sZj1lWzldLHA9ZVsxMF0sZD1lWzExXSxnPWVbMTJdLHY9ZVsxM10sbT1lWzE0XSx5PWVbMTVdLHg9clswXSxiPXJbMV0sXz1yWzJdLHc9clszXTtyZXR1cm4gdFswXT14Km4rYipzK18qaCt3KmcsdFsxXT14KmkrYipsK18qZit3KnYsdFsyXT14KmErYipjK18qcCt3Km0sdFszXT14Km8rYip1K18qZCt3KnkseD1yWzRdLGI9cls1XSxfPXJbNl0sdz1yWzddLHRbNF09eCpuK2IqcytfKmgrdypnLHRbNV09eCppK2IqbCtfKmYrdyp2LHRbNl09eCphK2IqYytfKnArdyptLHRbN109eCpvK2IqdStfKmQrdyp5LHg9cls4XSxiPXJbOV0sXz1yWzEwXSx3PXJbMTFdLHRbOF09eCpuK2IqcytfKmgrdypnLHRbOV09eCppK2IqbCtfKmYrdyp2LHRbMTBdPXgqYStiKmMrXypwK3cqbSx0WzExXT14Km8rYip1K18qZCt3KnkseD1yWzEyXSxiPXJbMTNdLF89clsxNF0sdz1yWzE1XSx0WzEyXT14Km4rYipzK18qaCt3KmcsdFsxM109eCppK2IqbCtfKmYrdyp2LHRbMTRdPXgqYStiKmMrXypwK3cqbSx0WzE1XT14Km8rYip1K18qZCt3KnksdH0scGVyc3BlY3RpdmU6ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT0xL01hdGgudGFuKGUvMiksbz0xLyhuLWkpO3JldHVybiB0WzBdPWEvcix0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT1hLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0oaStuKSpvLHRbMTFdPS0xLHRbMTJdPTAsdFsxM109MCx0WzE0XT0yKmkqbipvLHRbMTVdPTAsdH0scm90YXRlWDpmdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbNF0sbz1lWzVdLHM9ZVs2XSxsPWVbN10sYz1lWzhdLHU9ZVs5XSxoPWVbMTBdLGY9ZVsxMV07cmV0dXJuIGUhPT10JiYodFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKSx0WzRdPWEqaStjKm4sdFs1XT1vKmkrdSpuLHRbNl09cyppK2gqbix0WzddPWwqaStmKm4sdFs4XT1jKmktYSpuLHRbOV09dSppLW8qbix0WzEwXT1oKmktcypuLHRbMTFdPWYqaS1sKm4sdH0scm90YXRlWjpmdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbMF0sbz1lWzFdLHM9ZVsyXSxsPWVbM10sYz1lWzRdLHU9ZVs1XSxoPWVbNl0sZj1lWzddO3JldHVybiBlIT09dCYmKHRbOF09ZVs4XSx0WzldPWVbOV0sdFsxMF09ZVsxMF0sdFsxMV09ZVsxMV0sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pLHRbMF09YSppK2Mqbix0WzFdPW8qaSt1Km4sdFsyXT1zKmkraCpuLHRbM109bCppK2Yqbix0WzRdPWMqaS1hKm4sdFs1XT11KmktbypuLHRbNl09aCppLXMqbix0WzddPWYqaS1sKm4sdH0saW52ZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPWVbNF0scz1lWzVdLGw9ZVs2XSxjPWVbN10sdT1lWzhdLGg9ZVs5XSxmPWVbMTBdLHA9ZVsxMV0sZD1lWzEyXSxnPWVbMTNdLHY9ZVsxNF0sbT1lWzE1XSx5PXIqcy1uKm8seD1yKmwtaSpvLGI9cipjLWEqbyxfPW4qbC1pKnMsdz1uKmMtYSpzLGs9aSpjLWEqbCxBPXUqZy1oKmQsVD11KnYtZipkLE09dSptLXAqZCxTPWgqdi1mKmcsRT1oKm0tcCpnLEM9ZiptLXAqdixMPXkqQy14KkUrYipTK18qTS13KlQraypBO3JldHVybiBMPyhMPTEvTCx0WzBdPShzKkMtbCpFK2MqUykqTCx0WzFdPShpKkUtbipDLWEqUykqTCx0WzJdPShnKmstdip3K20qXykqTCx0WzNdPShmKnctaCprLXAqXykqTCx0WzRdPShsKk0tbypDLWMqVCkqTCx0WzVdPShyKkMtaSpNK2EqVCkqTCx0WzZdPSh2KmItZCprLW0qeCkqTCx0WzddPSh1KmstZipiK3AqeCkqTCx0WzhdPShvKkUtcypNK2MqQSkqTCx0WzldPShuKk0tcipFLWEqQSkqTCx0WzEwXT0oZCp3LWcqYittKnkpKkwsdFsxMV09KGgqYi11KnctcCp5KSpMLHRbMTJdPShzKlQtbypTLWwqQSkqTCx0WzEzXT0ocipTLW4qVCtpKkEpKkwsdFsxNF09KGcqeC1kKl8tdip5KSpMLHRbMTVdPSh1Kl8taCp4K2YqeSkqTCx0KTpudWxsfSxvcnRobzpmdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz0xLyhlLXIpLGw9MS8obi1pKSxjPTEvKGEtbyk7cmV0dXJuIHRbMF09LTIqcyx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0tMipsLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0yKmMsdFsxMV09MCx0WzEyXT0oZStyKSpzLHRbMTNdPShpK24pKmwsdFsxNF09KG8rYSkqYyx0WzE1XT0xLHR9fX0pfSksZWk9KHRpLnZlYzMsdGkudmVjNCkscmk9KHRpLm1hdDIsdGkubWF0Myx0aS5tYXQ0KSxuaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsUW4pfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5jcmVhdGVCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBObih0KX0sZS5wcm90b3R5cGUucXVlcnlSYWRpdXM9ZnVuY3Rpb24odCl7dmFyIGU9dDtyZXR1cm4gJG4oXCJjaXJjbGUtcmFkaXVzXCIsdGhpcyxlKSskbihcImNpcmNsZS1zdHJva2Utd2lkdGhcIix0aGlzLGUpK0puKHRoaXMucGFpbnQuZ2V0KFwiY2lyY2xlLXRyYW5zbGF0ZVwiKSl9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPUtuKHQsdGhpcy5wYWludC5nZXQoXCJjaXJjbGUtdHJhbnNsYXRlXCIpLHRoaXMucGFpbnQuZ2V0KFwiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3JcIiksaS5hbmdsZSxhKSxsPXRoaXMucGFpbnQuZ2V0KFwiY2lyY2xlLXJhZGl1c1wiKS5ldmFsdWF0ZShlKSt0aGlzLnBhaW50LmdldChcImNpcmNsZS1zdHJva2Utd2lkdGhcIikuZXZhbHVhdGUoZSksYz1cIm1hcFwiPT09dGhpcy5wYWludC5nZXQoXCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50XCIpLHU9Yz9zOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBpaSh0LGUscil9KX0pfSgwLG8saSksaD1jP2wqYTpsLGY9MCxwPXI7ZjxwLmxlbmd0aDtmKz0xKWZvcih2YXIgZD0wLGc9cFtmXTtkPGcubGVuZ3RoO2QrPTEpe3ZhciB2PWdbZF0sbT1jP3Y6aWkodixvLGkpLHk9aCx4PWVpLnRyYW5zZm9ybU1hdDQoW10sW3YueCx2LnksMCwxXSxvKTtpZihcInZpZXdwb3J0XCI9PT10aGlzLnBhaW50LmdldChcImNpcmNsZS1waXRjaC1zY2FsZVwiKSYmXCJtYXBcIj09PXRoaXMucGFpbnQuZ2V0KFwiY2lyY2xlLXBpdGNoLWFsaWdubWVudFwiKT95Kj14WzNdL2kuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZTpcIm1hcFwiPT09dGhpcy5wYWludC5nZXQoXCJjaXJjbGUtcGl0Y2gtc2NhbGVcIikmJlwidmlld3BvcnRcIj09PXRoaXMucGFpbnQuZ2V0KFwiY2lyY2xlLXBpdGNoLWFsaWdubWVudFwiKSYmKHkqPWkuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZS94WzNdKSxqbih1LG0seSkpcmV0dXJuITB9cmV0dXJuITF9LGV9KEhyKTtmdW5jdGlvbiBpaSh0LGUscil7dmFyIG49ZWkudHJhbnNmb3JtTWF0NChbXSxbdC54LHQueSwwLDFdLGUpO3JldHVybiBuZXcgbCgoblswXS9uWzNdKzEpKnIud2lkdGgqLjUsKG5bMV0vblszXSsxKSpyLmhlaWdodCouNSl9dmFyIGFpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZX0oTm4pO2Z1bmN0aW9uIG9pKHQsZSxyLG4pe3ZhciBpPWUud2lkdGgsYT1lLmhlaWdodDtpZihuKXtpZihuLmxlbmd0aCE9PWkqYSpyKXRocm93IG5ldyBSYW5nZUVycm9yKFwibWlzbWF0Y2hlZCBpbWFnZSBzaXplXCIpfWVsc2Ugbj1uZXcgVWludDhBcnJheShpKmEqcik7cmV0dXJuIHQud2lkdGg9aSx0LmhlaWdodD1hLHQuZGF0YT1uLHR9ZnVuY3Rpb24gc2kodCxlLHIpe3ZhciBuPWUud2lkdGgsaT1lLmhlaWdodDtpZihuIT09dC53aWR0aHx8aSE9PXQuaGVpZ2h0KXt2YXIgYT1vaSh7fSx7d2lkdGg6bixoZWlnaHQ6aX0scik7bGkodCxhLHt4OjAseTowfSx7eDowLHk6MH0se3dpZHRoOk1hdGgubWluKHQud2lkdGgsbiksaGVpZ2h0Ok1hdGgubWluKHQuaGVpZ2h0LGkpfSxyKSx0LndpZHRoPW4sdC5oZWlnaHQ9aSx0LmRhdGE9YS5kYXRhfX1mdW5jdGlvbiBsaSh0LGUscixuLGksYSl7aWYoMD09PWkud2lkdGh8fDA9PT1pLmhlaWdodClyZXR1cm4gZTtpZihpLndpZHRoPnQud2lkdGh8fGkuaGVpZ2h0PnQuaGVpZ2h0fHxyLng+dC53aWR0aC1pLndpZHRofHxyLnk+dC5oZWlnaHQtaS5oZWlnaHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvdXQgb2YgcmFuZ2Ugc291cmNlIGNvb3JkaW5hdGVzIGZvciBpbWFnZSBjb3B5XCIpO2lmKGkud2lkdGg+ZS53aWR0aHx8aS5oZWlnaHQ+ZS5oZWlnaHR8fG4ueD5lLndpZHRoLWkud2lkdGh8fG4ueT5lLmhlaWdodC1pLmhlaWdodCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIm91dCBvZiByYW5nZSBkZXN0aW5hdGlvbiBjb29yZGluYXRlcyBmb3IgaW1hZ2UgY29weVwiKTtmb3IodmFyIG89dC5kYXRhLHM9ZS5kYXRhLGw9MDtsPGkuaGVpZ2h0O2wrKylmb3IodmFyIGM9KChyLnkrbCkqdC53aWR0aCtyLngpKmEsdT0oKG4ueStsKSplLndpZHRoK24ueCkqYSxoPTA7aDxpLndpZHRoKmE7aCsrKXNbdStoXT1vW2MraF07cmV0dXJuIGV9cHIoXCJIZWF0bWFwQnVja2V0XCIsYWkse29taXQ6W1wibGF5ZXJzXCJdfSk7dmFyIGNpPWZ1bmN0aW9uKHQsZSl7b2kodGhpcyx0LDEsZSl9O2NpLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCl7c2kodGhpcyx0LDEpfSxjaS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGNpKHt3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodH0sbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhKSl9LGNpLmNvcHk9ZnVuY3Rpb24odCxlLHIsbixpKXtsaSh0LGUscixuLGksMSl9O3ZhciB1aT1mdW5jdGlvbih0LGUpe29pKHRoaXMsdCw0LGUpfTt1aS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQpe3NpKHRoaXMsdCw0KX0sdWkucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB1aSh7d2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHR9LG5ldyBVaW50OEFycmF5KHRoaXMuZGF0YSkpfSx1aS5jb3B5PWZ1bmN0aW9uKHQsZSxyLG4saSl7bGkodCxlLHIsbixpLDQpfSxwcihcIkFscGhhSW1hZ2VcIixjaSkscHIoXCJSR0JBSW1hZ2VcIix1aSk7dmFyIGhpPXtwYWludDpuZXcgcXIoe1wiaGVhdG1hcC1yYWRpdXNcIjpuZXcganIoSS5wYWludF9oZWF0bWFwW1wiaGVhdG1hcC1yYWRpdXNcIl0pLFwiaGVhdG1hcC13ZWlnaHRcIjpuZXcganIoSS5wYWludF9oZWF0bWFwW1wiaGVhdG1hcC13ZWlnaHRcIl0pLFwiaGVhdG1hcC1pbnRlbnNpdHlcIjpuZXcgTnIoSS5wYWludF9oZWF0bWFwW1wiaGVhdG1hcC1pbnRlbnNpdHlcIl0pLFwiaGVhdG1hcC1jb2xvclwiOm5ldyBVcihJLnBhaW50X2hlYXRtYXBbXCJoZWF0bWFwLWNvbG9yXCJdKSxcImhlYXRtYXAtb3BhY2l0eVwiOm5ldyBOcihJLnBhaW50X2hlYXRtYXBbXCJoZWF0bWFwLW9wYWNpdHlcIl0pfSl9O2Z1bmN0aW9uIGZpKHQsZSl7Zm9yKHZhciByPW5ldyBVaW50OEFycmF5KDEwMjQpLG49e30saT0wLGE9MDtpPDI1NjtpKyssYSs9NCl7bltlXT1pLzI1NTt2YXIgbz10LmV2YWx1YXRlKG4pO3JbYSswXT1NYXRoLmZsb29yKDI1NSpvLnIvby5hKSxyW2ErMV09TWF0aC5mbG9vcigyNTUqby5nL28uYSksclthKzJdPU1hdGguZmxvb3IoMjU1Km8uYi9vLmEpLHJbYSszXT1NYXRoLmZsb29yKDI1NSpvLmEpfXJldHVybiBuZXcgdWkoe3dpZHRoOjI1NixoZWlnaHQ6MX0scil9dmFyIHBpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxoaSksdGhpcy5fdXBkYXRlQ29sb3JSYW1wKCl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGFpKHQpfSxlLnByb3RvdHlwZS5zZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKGUscixuKXt0LnByb3RvdHlwZS5zZXRQYWludFByb3BlcnR5LmNhbGwodGhpcyxlLHIsbiksXCJoZWF0bWFwLWNvbG9yXCI9PT1lJiZ0aGlzLl91cGRhdGVDb2xvclJhbXAoKX0sZS5wcm90b3R5cGUuX3VwZGF0ZUNvbG9yUmFtcD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuX3ZhbHVlc1tcImhlYXRtYXAtY29sb3JcIl0udmFsdWUuZXhwcmVzc2lvbjt0aGlzLmNvbG9yUmFtcD1maSh0LFwiaGVhdG1hcERlbnNpdHlcIiksdGhpcy5jb2xvclJhbXBUZXh0dXJlPW51bGx9LGUucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbigpe3RoaXMuaGVhdG1hcEZibyYmKHRoaXMuaGVhdG1hcEZiby5kZXN0cm95KCksdGhpcy5oZWF0bWFwRmJvPW51bGwpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbigpe3JldHVybiAwfSxlLnByb3RvdHlwZS5xdWVyeUludGVyc2VjdHNGZWF0dXJlPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLmhhc09mZnNjcmVlblBhc3M9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMucGFpbnQuZ2V0KFwiaGVhdG1hcC1vcGFjaXR5XCIpJiZcIm5vbmVcIiE9PXRoaXMudmlzaWJpbGl0eX0sZX0oSHIpLGRpPXtwYWludDpuZXcgcXIoe1wiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1kaXJlY3Rpb25cIjpuZXcgTnIoSS5wYWludF9oaWxsc2hhZGVbXCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWRpcmVjdGlvblwiXSksXCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWFuY2hvclwiOm5ldyBOcihJLnBhaW50X2hpbGxzaGFkZVtcImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yXCJdKSxcImhpbGxzaGFkZS1leGFnZ2VyYXRpb25cIjpuZXcgTnIoSS5wYWludF9oaWxsc2hhZGVbXCJoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uXCJdKSxcImhpbGxzaGFkZS1zaGFkb3ctY29sb3JcIjpuZXcgTnIoSS5wYWludF9oaWxsc2hhZGVbXCJoaWxsc2hhZGUtc2hhZG93LWNvbG9yXCJdKSxcImhpbGxzaGFkZS1oaWdobGlnaHQtY29sb3JcIjpuZXcgTnIoSS5wYWludF9oaWxsc2hhZGVbXCJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yXCJdKSxcImhpbGxzaGFkZS1hY2NlbnQtY29sb3JcIjpuZXcgTnIoSS5wYWludF9oaWxsc2hhZGVbXCJoaWxsc2hhZGUtYWNjZW50LWNvbG9yXCJdKX0pfSxnaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsZGkpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5oYXNPZmZzY3JlZW5QYXNzPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLnBhaW50LmdldChcImhpbGxzaGFkZS1leGFnZ2VyYXRpb25cIikmJlwibm9uZVwiIT09dGhpcy52aXNpYmlsaXR5fSxlfShIciksdmk9WHIoW3tuYW1lOlwiYV9wb3NcIixjb21wb25lbnRzOjIsdHlwZTpcIkludDE2XCJ9XSw0KS5tZW1iZXJzLG1pPXhpLHlpPXhpO2Z1bmN0aW9uIHhpKHQsZSxyKXtyPXJ8fDI7dmFyIG4saSxhLG8scyxsLGMsdT1lJiZlLmxlbmd0aCxoPXU/ZVswXSpyOnQubGVuZ3RoLGY9YmkodCwwLGgsciwhMCkscD1bXTtpZighZilyZXR1cm4gcDtpZih1JiYoZj1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scz1bXTtmb3IoaT0wLGE9ZS5sZW5ndGg7aTxhO2krKykobz1iaSh0LGVbaV0qbixpPGEtMT9lW2krMV0qbjp0Lmxlbmd0aCxuLCExKSk9PT1vLm5leHQmJihvLnN0ZWluZXI9ITApLHMucHVzaChMaShvKSk7Zm9yKHMuc29ydChTaSksaT0wO2k8cy5sZW5ndGg7aSsrKUVpKHNbaV0scikscj1faShyLHIubmV4dCk7cmV0dXJuIHJ9KHQsZSxmLHIpKSx0Lmxlbmd0aD44MCpyKXtuPWE9dFswXSxpPW89dFsxXTtmb3IodmFyIGQ9cjtkPGg7ZCs9cikocz10W2RdKTxuJiYobj1zKSwobD10W2QrMV0pPGkmJihpPWwpLHM+YSYmKGE9cyksbD5vJiYobz1sKTtjPTAhPT0oYz1NYXRoLm1heChhLW4sby1pKSk/MS9jOjB9cmV0dXJuIHdpKGYscCxyLG4saSxjKSxwfWZ1bmN0aW9uIGJpKHQsZSxyLG4saSl7dmFyIGEsbztpZihpPT09VmkodCxlLHIsbik+MClmb3IoYT1lO2E8cjthKz1uKW89QmkoYSx0W2FdLHRbYSsxXSxvKTtlbHNlIGZvcihhPXItbjthPj1lO2EtPW4pbz1CaShhLHRbYV0sdFthKzFdLG8pO3JldHVybiBvJiZEaShvLG8ubmV4dCkmJihOaShvKSxvPW8ubmV4dCksb31mdW5jdGlvbiBfaSh0LGUpe2lmKCF0KXJldHVybiB0O2V8fChlPXQpO3ZhciByLG49dDtkb3tpZihyPSExLG4uc3RlaW5lcnx8IURpKG4sbi5uZXh0KSYmMCE9PUlpKG4ucHJldixuLG4ubmV4dCkpbj1uLm5leHQ7ZWxzZXtpZihOaShuKSwobj1lPW4ucHJldik9PT1uLm5leHQpYnJlYWs7cj0hMH19d2hpbGUocnx8biE9PWUpO3JldHVybiBlfWZ1bmN0aW9uIHdpKHQsZSxyLG4saSxhLG8pe2lmKHQpeyFvJiZhJiZmdW5jdGlvbih0LGUscixuKXt2YXIgaT10O2Rve251bGw9PT1pLnomJihpLno9Q2koaS54LGkueSxlLHIsbikpLGkucHJldlo9aS5wcmV2LGkubmV4dFo9aS5uZXh0LGk9aS5uZXh0fXdoaWxlKGkhPT10KTtpLnByZXZaLm5leHRaPW51bGwsaS5wcmV2Wj1udWxsLGZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbyxzLGwsYz0xO2Rve2ZvcihyPXQsdD1udWxsLGE9bnVsbCxvPTA7cjspe2ZvcihvKyssbj1yLHM9MCxlPTA7ZTxjJiYocysrLG49bi5uZXh0Wik7ZSsrKTtmb3IobD1jO3M+MHx8bD4wJiZuOykwIT09cyYmKDA9PT1sfHwhbnx8ci56PD1uLnopPyhpPXIscj1yLm5leHRaLHMtLSk6KGk9bixuPW4ubmV4dFosbC0tKSxhP2EubmV4dFo9aTp0PWksaS5wcmV2Wj1hLGE9aTtyPW59YS5uZXh0Wj1udWxsLGMqPTJ9d2hpbGUobz4xKX0oaSl9KHQsbixpLGEpO2Zvcih2YXIgcyxsLGM9dDt0LnByZXYhPT10Lm5leHQ7KWlmKHM9dC5wcmV2LGw9dC5uZXh0LGE/QWkodCxuLGksYSk6a2kodCkpZS5wdXNoKHMuaS9yKSxlLnB1c2godC5pL3IpLGUucHVzaChsLmkvciksTmkodCksdD1sLm5leHQsYz1sLm5leHQ7ZWxzZSBpZigodD1sKT09PWMpe28/MT09PW8/d2kodD1UaSh0LGUsciksZSxyLG4saSxhLDIpOjI9PT1vJiZNaSh0LGUscixuLGksYSk6d2koX2kodCksZSxyLG4saSxhLDEpO2JyZWFrfX19ZnVuY3Rpb24ga2kodCl7dmFyIGU9dC5wcmV2LHI9dCxuPXQubmV4dDtpZihJaShlLHIsbik+PTApcmV0dXJuITE7Zm9yKHZhciBpPXQubmV4dC5uZXh0O2khPT10LnByZXY7KXtpZih6aShlLngsZS55LHIueCxyLnksbi54LG4ueSxpLngsaS55KSYmSWkoaS5wcmV2LGksaS5uZXh0KT49MClyZXR1cm4hMTtpPWkubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBBaSh0LGUscixuKXt2YXIgaT10LnByZXYsYT10LG89dC5uZXh0O2lmKElpKGksYSxvKT49MClyZXR1cm4hMTtmb3IodmFyIHM9aS54PGEueD9pLng8by54P2kueDpvLng6YS54PG8ueD9hLng6by54LGw9aS55PGEueT9pLnk8by55P2kueTpvLnk6YS55PG8ueT9hLnk6by55LGM9aS54PmEueD9pLng+by54P2kueDpvLng6YS54Pm8ueD9hLng6by54LHU9aS55PmEueT9pLnk+by55P2kueTpvLnk6YS55Pm8ueT9hLnk6by55LGg9Q2kocyxsLGUscixuKSxmPUNpKGMsdSxlLHIsbikscD10LnByZXZaLGQ9dC5uZXh0WjtwJiZwLno+PWgmJmQmJmQuejw9Zjspe2lmKHAhPT10LnByZXYmJnAhPT10Lm5leHQmJnppKGkueCxpLnksYS54LGEueSxvLngsby55LHAueCxwLnkpJiZJaShwLnByZXYscCxwLm5leHQpPj0wKXJldHVybiExO2lmKHA9cC5wcmV2WixkIT09dC5wcmV2JiZkIT09dC5uZXh0JiZ6aShpLngsaS55LGEueCxhLnksby54LG8ueSxkLngsZC55KSYmSWkoZC5wcmV2LGQsZC5uZXh0KT49MClyZXR1cm4hMTtkPWQubmV4dFp9Zm9yKDtwJiZwLno+PWg7KXtpZihwIT09dC5wcmV2JiZwIT09dC5uZXh0JiZ6aShpLngsaS55LGEueCxhLnksby54LG8ueSxwLngscC55KSYmSWkocC5wcmV2LHAscC5uZXh0KT49MClyZXR1cm4hMTtwPXAucHJldlp9Zm9yKDtkJiZkLno8PWY7KXtpZihkIT09dC5wcmV2JiZkIT09dC5uZXh0JiZ6aShpLngsaS55LGEueCxhLnksby54LG8ueSxkLngsZC55KSYmSWkoZC5wcmV2LGQsZC5uZXh0KT49MClyZXR1cm4hMTtkPWQubmV4dFp9cmV0dXJuITB9ZnVuY3Rpb24gVGkodCxlLHIpe3ZhciBuPXQ7ZG97dmFyIGk9bi5wcmV2LGE9bi5uZXh0Lm5leHQ7IURpKGksYSkmJlBpKGksbixuLm5leHQsYSkmJlJpKGksYSkmJlJpKGEsaSkmJihlLnB1c2goaS5pL3IpLGUucHVzaChuLmkvciksZS5wdXNoKGEuaS9yKSxOaShuKSxOaShuLm5leHQpLG49dD1hKSxuPW4ubmV4dH13aGlsZShuIT09dCk7cmV0dXJuIG59ZnVuY3Rpb24gTWkodCxlLHIsbixpLGEpe3ZhciBvPXQ7ZG97Zm9yKHZhciBzPW8ubmV4dC5uZXh0O3MhPT1vLnByZXY7KXtpZihvLmkhPT1zLmkmJk9pKG8scykpe3ZhciBsPUZpKG8scyk7cmV0dXJuIG89X2kobyxvLm5leHQpLGw9X2kobCxsLm5leHQpLHdpKG8sZSxyLG4saSxhKSx2b2lkIHdpKGwsZSxyLG4saSxhKX1zPXMubmV4dH1vPW8ubmV4dH13aGlsZShvIT09dCl9ZnVuY3Rpb24gU2kodCxlKXtyZXR1cm4gdC54LWUueH1mdW5jdGlvbiBFaSh0LGUpe2lmKGU9ZnVuY3Rpb24odCxlKXt2YXIgcixuPWUsaT10LngsYT10Lnksbz0tMS8wO2Rve2lmKGE8PW4ueSYmYT49bi5uZXh0LnkmJm4ubmV4dC55IT09bi55KXt2YXIgcz1uLngrKGEtbi55KSoobi5uZXh0Lngtbi54KS8obi5uZXh0Lnktbi55KTtpZihzPD1pJiZzPm8pe2lmKG89cyxzPT09aSl7aWYoYT09PW4ueSlyZXR1cm4gbjtpZihhPT09bi5uZXh0LnkpcmV0dXJuIG4ubmV4dH1yPW4ueDxuLm5leHQueD9uOm4ubmV4dH19bj1uLm5leHR9d2hpbGUobiE9PWUpO2lmKCFyKXJldHVybiBudWxsO2lmKGk9PT1vKXJldHVybiByLnByZXY7dmFyIGwsYz1yLHU9ci54LGg9ci55LGY9MS8wO2ZvcihuPXIubmV4dDtuIT09YzspaT49bi54JiZuLng+PXUmJmkhPT1uLngmJnppKGE8aD9pOm8sYSx1LGgsYTxoP286aSxhLG4ueCxuLnkpJiYoKGw9TWF0aC5hYnMoYS1uLnkpLyhpLW4ueCkpPGZ8fGw9PT1mJiZuLng+ci54KSYmUmkobix0KSYmKHI9bixmPWwpLG49bi5uZXh0O3JldHVybiByfSh0LGUpKXt2YXIgcj1GaShlLHQpO19pKHIsci5uZXh0KX19ZnVuY3Rpb24gQ2kodCxlLHIsbixpKXtyZXR1cm4odD0xNDMxNjU1NzY1JigodD04NTg5OTM0NTkmKCh0PTI1MjY0NTEzNSYoKHQ9MTY3MTE5MzUmKCh0PTMyNzY3Kih0LXIpKmkpfHQ8PDgpKXx0PDw0KSl8dDw8MikpfHQ8PDEpKXwoZT0xNDMxNjU1NzY1JigoZT04NTg5OTM0NTkmKChlPTI1MjY0NTEzNSYoKGU9MTY3MTE5MzUmKChlPTMyNzY3KihlLW4pKmkpfGU8PDgpKXxlPDw0KSl8ZTw8MikpfGU8PDEpKTw8MX1mdW5jdGlvbiBMaSh0KXt2YXIgZT10LHI9dDtkb3tlLng8ci54JiYocj1lKSxlPWUubmV4dH13aGlsZShlIT09dCk7cmV0dXJuIHJ9ZnVuY3Rpb24gemkodCxlLHIsbixpLGEsbyxzKXtyZXR1cm4oaS1vKSooZS1zKS0odC1vKSooYS1zKT49MCYmKHQtbykqKG4tcyktKHItbykqKGUtcyk+PTAmJihyLW8pKihhLXMpLShpLW8pKihuLXMpPj0wfWZ1bmN0aW9uIE9pKHQsZSl7cmV0dXJuIHQubmV4dC5pIT09ZS5pJiZ0LnByZXYuaSE9PWUuaSYmIWZ1bmN0aW9uKHQsZSl7dmFyIHI9dDtkb3tpZihyLmkhPT10LmkmJnIubmV4dC5pIT09dC5pJiZyLmkhPT1lLmkmJnIubmV4dC5pIT09ZS5pJiZQaShyLHIubmV4dCx0LGUpKXJldHVybiEwO3I9ci5uZXh0fXdoaWxlKHIhPT10KTtyZXR1cm4hMX0odCxlKSYmUmkodCxlKSYmUmkoZSx0KSYmZnVuY3Rpb24odCxlKXt2YXIgcj10LG49ITEsaT0odC54K2UueCkvMixhPSh0LnkrZS55KS8yO2Rve3IueT5hIT1yLm5leHQueT5hJiZyLm5leHQueSE9PXIueSYmaTwoci5uZXh0Lngtci54KSooYS1yLnkpLyhyLm5leHQueS1yLnkpK3IueCYmKG49IW4pLHI9ci5uZXh0fXdoaWxlKHIhPT10KTtyZXR1cm4gbn0odCxlKX1mdW5jdGlvbiBJaSh0LGUscil7cmV0dXJuKGUueS10LnkpKihyLngtZS54KS0oZS54LXQueCkqKHIueS1lLnkpfWZ1bmN0aW9uIERpKHQsZSl7cmV0dXJuIHQueD09PWUueCYmdC55PT09ZS55fWZ1bmN0aW9uIFBpKHQsZSxyLG4pe3JldHVybiEhKERpKHQsZSkmJkRpKHIsbil8fERpKHQsbikmJkRpKHIsZSkpfHxJaSh0LGUscik+MCE9SWkodCxlLG4pPjAmJklpKHIsbix0KT4wIT1JaShyLG4sZSk+MH1mdW5jdGlvbiBSaSh0LGUpe3JldHVybiBJaSh0LnByZXYsdCx0Lm5leHQpPDA/SWkodCxlLHQubmV4dCk+PTAmJklpKHQsdC5wcmV2LGUpPj0wOklpKHQsZSx0LnByZXYpPDB8fElpKHQsdC5uZXh0LGUpPDB9ZnVuY3Rpb24gRmkodCxlKXt2YXIgcj1uZXcgamkodC5pLHQueCx0LnkpLG49bmV3IGppKGUuaSxlLngsZS55KSxpPXQubmV4dCxhPWUucHJldjtyZXR1cm4gdC5uZXh0PWUsZS5wcmV2PXQsci5uZXh0PWksaS5wcmV2PXIsbi5uZXh0PXIsci5wcmV2PW4sYS5uZXh0PW4sbi5wcmV2PWEsbn1mdW5jdGlvbiBCaSh0LGUscixuKXt2YXIgaT1uZXcgamkodCxlLHIpO3JldHVybiBuPyhpLm5leHQ9bi5uZXh0LGkucHJldj1uLG4ubmV4dC5wcmV2PWksbi5uZXh0PWkpOihpLnByZXY9aSxpLm5leHQ9aSksaX1mdW5jdGlvbiBOaSh0KXt0Lm5leHQucHJldj10LnByZXYsdC5wcmV2Lm5leHQ9dC5uZXh0LHQucHJldlomJih0LnByZXZaLm5leHRaPXQubmV4dFopLHQubmV4dFomJih0Lm5leHRaLnByZXZaPXQucHJldlopfWZ1bmN0aW9uIGppKHQsZSxyKXt0aGlzLmk9dCx0aGlzLng9ZSx0aGlzLnk9cix0aGlzLnByZXY9bnVsbCx0aGlzLm5leHQ9bnVsbCx0aGlzLno9bnVsbCx0aGlzLnByZXZaPW51bGwsdGhpcy5uZXh0Wj1udWxsLHRoaXMuc3RlaW5lcj0hMX1mdW5jdGlvbiBWaSh0LGUscixuKXtmb3IodmFyIGk9MCxhPWUsbz1yLW47YTxyO2ErPW4paSs9KHRbb10tdFthXSkqKHRbYSsxXSt0W28rMV0pLG89YTtyZXR1cm4gaX14aS5kZXZpYXRpb249ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZSYmZS5sZW5ndGgsYT1pP2VbMF0qcjp0Lmxlbmd0aCxvPU1hdGguYWJzKFZpKHQsMCxhLHIpKTtpZihpKWZvcih2YXIgcz0wLGw9ZS5sZW5ndGg7czxsO3MrKyl7dmFyIGM9ZVtzXSpyLHU9czxsLTE/ZVtzKzFdKnI6dC5sZW5ndGg7by09TWF0aC5hYnMoVmkodCxjLHUscikpfXZhciBoPTA7Zm9yKHM9MDtzPG4ubGVuZ3RoO3MrPTMpe3ZhciBmPW5bc10qcixwPW5bcysxXSpyLGQ9bltzKzJdKnI7aCs9TWF0aC5hYnMoKHRbZl0tdFtkXSkqKHRbcCsxXS10W2YrMV0pLSh0W2ZdLXRbcF0pKih0W2QrMV0tdFtmKzFdKSl9cmV0dXJuIDA9PT1vJiYwPT09aD8wOk1hdGguYWJzKChoLW8pL28pfSx4aS5mbGF0dGVuPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10WzBdWzBdLmxlbmd0aCxyPXt2ZXJ0aWNlczpbXSxob2xlczpbXSxkaW1lbnNpb25zOmV9LG49MCxpPTA7aTx0Lmxlbmd0aDtpKyspe2Zvcih2YXIgYT0wO2E8dFtpXS5sZW5ndGg7YSsrKWZvcih2YXIgbz0wO288ZTtvKyspci52ZXJ0aWNlcy5wdXNoKHRbaV1bYV1bb10pO2k+MCYmKG4rPXRbaS0xXS5sZW5ndGgsci5ob2xlcy5wdXNoKG4pKX1yZXR1cm4gcn0sbWkuZGVmYXVsdD15aTt2YXIgVWk9SGkscWk9SGk7ZnVuY3Rpb24gSGkodCxlLHIsbixpKXshZnVuY3Rpb24gdChlLHIsbixpLGEpe2Zvcig7aT5uOyl7aWYoaS1uPjYwMCl7dmFyIG89aS1uKzEscz1yLW4rMSxsPU1hdGgubG9nKG8pLGM9LjUqTWF0aC5leHAoMipsLzMpLHU9LjUqTWF0aC5zcXJ0KGwqYyooby1jKS9vKSoocy1vLzI8MD8tMToxKTt0KGUscixNYXRoLm1heChuLE1hdGguZmxvb3Ioci1zKmMvbyt1KSksTWF0aC5taW4oaSxNYXRoLmZsb29yKHIrKG8tcykqYy9vK3UpKSxhKX12YXIgaD1lW3JdLGY9bixwPWk7Zm9yKEdpKGUsbixyKSxhKGVbaV0saCk+MCYmR2koZSxuLGkpO2Y8cDspe2ZvcihHaShlLGYscCksZisrLHAtLTthKGVbZl0saCk8MDspZisrO2Zvcig7YShlW3BdLGgpPjA7KXAtLX0wPT09YShlW25dLGgpP0dpKGUsbixwKTpHaShlLCsrcCxpKSxwPD1yJiYobj1wKzEpLHI8PXAmJihpPXAtMSl9fSh0LGUscnx8MCxufHx0Lmxlbmd0aC0xLGl8fFlpKX1mdW5jdGlvbiBHaSh0LGUscil7dmFyIG49dFtlXTt0W2VdPXRbcl0sdFtyXT1ufWZ1bmN0aW9uIFlpKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTowfWZ1bmN0aW9uIFdpKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYocjw9MSlyZXR1cm5bdF07Zm9yKHZhciBuLGksYT1bXSxvPTA7bzxyO28rKyl7dmFyIHM9ayh0W29dKTswIT09cyYmKHRbb10uYXJlYT1NYXRoLmFicyhzKSx2b2lkIDA9PT1pJiYoaT1zPDApLGk9PT1zPDA/KG4mJmEucHVzaChuKSxuPVt0W29dXSk6bi5wdXNoKHRbb10pKX1pZihuJiZhLnB1c2gobiksZT4xKWZvcih2YXIgbD0wO2w8YS5sZW5ndGg7bCsrKWFbbF0ubGVuZ3RoPD1lfHwoVWkoYVtsXSxlLDEsYVtsXS5sZW5ndGgtMSxYaSksYVtsXT1hW2xdLnNsaWNlKDAsZSkpO3JldHVybiBhfWZ1bmN0aW9uIFhpKHQsZSl7cmV0dXJuIGUuYXJlYS10LmFyZWF9VWkuZGVmYXVsdD1xaTt2YXIgWmk9ZnVuY3Rpb24odCl7dGhpcy56b29tPXQuem9vbSx0aGlzLm92ZXJzY2FsaW5nPXQub3ZlcnNjYWxpbmcsdGhpcy5sYXllcnM9dC5sYXllcnMsdGhpcy5sYXllcklkcz10aGlzLmxheWVycy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheT1uZXcgJHIsdGhpcy5pbmRleEFycmF5PW5ldyBobix0aGlzLmluZGV4QXJyYXkyPW5ldyBmbix0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucz1uZXcgSW4odmksdC5sYXllcnMsdC56b29tKSx0aGlzLnNlZ21lbnRzPW5ldyBNbix0aGlzLnNlZ21lbnRzMj1uZXcgTW59O1ppLnByb3RvdHlwZS5wb3B1bGF0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49dDtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl0sYT1pLmZlYXR1cmUsbz1pLmluZGV4LHM9aS5zb3VyY2VMYXllckluZGV4O2lmKHRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyKG5ldyBMcih0aGlzLnpvb20pLGEpKXt2YXIgbD1GbihhKTt0aGlzLmFkZEZlYXR1cmUoYSxsKSxlLmZlYXR1cmVJbmRleC5pbnNlcnQoYSxsLG8scyx0aGlzLmluZGV4KX19fSxaaS5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGh9LFppLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx2aSksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSksdGhpcy5pbmRleEJ1ZmZlcjI9dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkyKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQodCl9LFppLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlcjIuZGVzdHJveSgpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzMi5kZXN0cm95KCkpfSxaaS5wcm90b3R5cGUuYWRkRmVhdHVyZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49V2koZSw1MDApO3I8bi5sZW5ndGg7cis9MSl7Zm9yKHZhciBpPW5bcl0sYT0wLG89MCxzPWk7bzxzLmxlbmd0aDtvKz0xKWErPXNbb10ubGVuZ3RoO2Zvcih2YXIgbD10aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KGEsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXkpLGM9bC52ZXJ0ZXhMZW5ndGgsdT1bXSxoPVtdLGY9MCxwPWk7ZjxwLmxlbmd0aDtmKz0xKXt2YXIgZD1wW2ZdO2lmKDAhPT1kLmxlbmd0aCl7ZCE9PWlbMF0mJmgucHVzaCh1Lmxlbmd0aC8yKTt2YXIgZz10aGlzLnNlZ21lbnRzMi5wcmVwYXJlU2VnbWVudChkLmxlbmd0aCx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheTIpLHY9Zy52ZXJ0ZXhMZW5ndGg7dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhkWzBdLngsZFswXS55KSx0aGlzLmluZGV4QXJyYXkyLmVtcGxhY2VCYWNrKHYrZC5sZW5ndGgtMSx2KSx1LnB1c2goZFswXS54KSx1LnB1c2goZFswXS55KTtmb3IodmFyIG09MTttPGQubGVuZ3RoO20rKyl0aGlzLmxheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKGRbbV0ueCxkW21dLnkpLHRoaXMuaW5kZXhBcnJheTIuZW1wbGFjZUJhY2sodittLTEsdittKSx1LnB1c2goZFttXS54KSx1LnB1c2goZFttXS55KTtnLnZlcnRleExlbmd0aCs9ZC5sZW5ndGgsZy5wcmltaXRpdmVMZW5ndGgrPWQubGVuZ3RofX1mb3IodmFyIHk9bWkodSxoKSx4PTA7eDx5Lmxlbmd0aDt4Kz0zKXRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhjK3lbeF0sYyt5W3grMV0sYyt5W3grMl0pO2wudmVydGV4TGVuZ3RoKz1hLGwucHJpbWl0aXZlTGVuZ3RoKz15Lmxlbmd0aC8zfXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsdCl9LHByKFwiRmlsbEJ1Y2tldFwiLFppLHtvbWl0OltcImxheWVyc1wiXX0pO3ZhciAkaT17cGFpbnQ6bmV3IHFyKHtcImZpbGwtYW50aWFsaWFzXCI6bmV3IE5yKEkucGFpbnRfZmlsbFtcImZpbGwtYW50aWFsaWFzXCJdKSxcImZpbGwtb3BhY2l0eVwiOm5ldyBqcihJLnBhaW50X2ZpbGxbXCJmaWxsLW9wYWNpdHlcIl0pLFwiZmlsbC1jb2xvclwiOm5ldyBqcihJLnBhaW50X2ZpbGxbXCJmaWxsLWNvbG9yXCJdKSxcImZpbGwtb3V0bGluZS1jb2xvclwiOm5ldyBqcihJLnBhaW50X2ZpbGxbXCJmaWxsLW91dGxpbmUtY29sb3JcIl0pLFwiZmlsbC10cmFuc2xhdGVcIjpuZXcgTnIoSS5wYWludF9maWxsW1wiZmlsbC10cmFuc2xhdGVcIl0pLFwiZmlsbC10cmFuc2xhdGUtYW5jaG9yXCI6bmV3IE5yKEkucGFpbnRfZmlsbFtcImZpbGwtdHJhbnNsYXRlLWFuY2hvclwiXSksXCJmaWxsLXBhdHRlcm5cIjpuZXcgVnIoSS5wYWludF9maWxsW1wiZmlsbC1wYXR0ZXJuXCJdKX0pfSxKaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsJGkpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5yZWNhbGN1bGF0ZT1mdW5jdGlvbih0KXt0aGlzLnBhaW50PXRoaXMuX3RyYW5zaXRpb25pbmdQYWludC5wb3NzaWJseUV2YWx1YXRlKHQpO3ZhciBlPXRoaXMucGFpbnQuX3ZhbHVlc1tcImZpbGwtb3V0bGluZS1jb2xvclwiXTtcImNvbnN0YW50XCI9PT1lLnZhbHVlLmtpbmQmJnZvaWQgMD09PWUudmFsdWUudmFsdWUmJih0aGlzLnBhaW50Ll92YWx1ZXNbXCJmaWxsLW91dGxpbmUtY29sb3JcIl09dGhpcy5wYWludC5fdmFsdWVzW1wiZmlsbC1jb2xvclwiXSl9LGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFppKHQpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBKbih0aGlzLnBhaW50LmdldChcImZpbGwtdHJhbnNsYXRlXCIpKX0sZS5wcm90b3R5cGUucXVlcnlJbnRlcnNlY3RzRmVhdHVyZT1mdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuIFZuKEtuKHQsdGhpcy5wYWludC5nZXQoXCJmaWxsLXRyYW5zbGF0ZVwiKSx0aGlzLnBhaW50LmdldChcImZpbGwtdHJhbnNsYXRlLWFuY2hvclwiKSxpLmFuZ2xlLGEpLHIpfSxlfShIciksS2k9WHIoW3tuYW1lOlwiYV9wb3NcIixjb21wb25lbnRzOjIsdHlwZTpcIkludDE2XCJ9LHtuYW1lOlwiYV9ub3JtYWxfZWRcIixjb21wb25lbnRzOjQsdHlwZTpcIkludDE2XCJ9XSw0KS5tZW1iZXJzLFFpPU1hdGgucG93KDIsMTMpO2Z1bmN0aW9uIHRhKHQsZSxyLG4saSxhLG8scyl7dC5lbXBsYWNlQmFjayhlLHIsMipNYXRoLmZsb29yKG4qUWkpK28saSpRaSoyLGEqUWkqMixNYXRoLnJvdW5kKHMpKX12YXIgZWE9ZnVuY3Rpb24odCl7dGhpcy56b29tPXQuem9vbSx0aGlzLm92ZXJzY2FsaW5nPXQub3ZlcnNjYWxpbmcsdGhpcy5sYXllcnM9dC5sYXllcnMsdGhpcy5sYXllcklkcz10aGlzLmxheWVycy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheT1uZXcgS3IsdGhpcy5pbmRleEFycmF5PW5ldyBobix0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucz1uZXcgSW4oS2ksdC5sYXllcnMsdC56b29tKSx0aGlzLnNlZ21lbnRzPW5ldyBNbn07ZnVuY3Rpb24gcmEodCxlKXtyZXR1cm4gdC54PT09ZS54JiYodC54PDB8fHQueD5Qbil8fHQueT09PWUueSYmKHQueTwwfHx0Lnk+UG4pfWZ1bmN0aW9uIG5hKHQpe3JldHVybiB0LmV2ZXJ5KGZ1bmN0aW9uKHQpe3JldHVybiB0Lng8MH0pfHx0LmV2ZXJ5KGZ1bmN0aW9uKHQpe3JldHVybiB0Lng+UG59KXx8dC5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4gdC55PDB9KXx8dC5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4gdC55PlBufSl9ZWEucHJvdG90eXBlLnBvcHVsYXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj10O3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXSxhPWkuZmVhdHVyZSxvPWkuaW5kZXgscz1pLnNvdXJjZUxheWVySW5kZXg7aWYodGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIobmV3IExyKHRoaXMuem9vbSksYSkpe3ZhciBsPUZuKGEpO3RoaXMuYWRkRmVhdHVyZShhLGwpLGUuZmVhdHVyZUluZGV4Lmluc2VydChhLGwsbyxzLHRoaXMuaW5kZXgpfX19LGVhLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aH0sZWEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LEtpKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQodCl9LGVhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpKX0sZWEucHJvdG90eXBlLmFkZEZlYXR1cmU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPVdpKGUsNTAwKTtyPG4ubGVuZ3RoO3IrPTEpe2Zvcih2YXIgaT1uW3JdLGE9MCxvPTAscz1pO288cy5sZW5ndGg7bys9MSlhKz1zW29dLmxlbmd0aDtmb3IodmFyIGw9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5KSxjPTAsdT1pO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGg9dVtjXTtpZigwIT09aC5sZW5ndGgmJiFuYShoKSlmb3IodmFyIGY9MCxwPTA7cDxoLmxlbmd0aDtwKyspe3ZhciBkPWhbcF07aWYocD49MSl7dmFyIGc9aFtwLTFdO2lmKCFyYShkLGcpKXtsLnZlcnRleExlbmd0aCs0Pk1uLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIJiYobD10aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXkpKTt2YXIgdj1kLnN1YihnKS5fcGVycCgpLl91bml0KCksbT1nLmRpc3QoZCk7ZittPjMyNzY4JiYoZj0wKSx0YSh0aGlzLmxheW91dFZlcnRleEFycmF5LGQueCxkLnksdi54LHYueSwwLDAsZiksdGEodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxkLngsZC55LHYueCx2LnksMCwxLGYpLGYrPW0sdGEodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxnLngsZy55LHYueCx2LnksMCwwLGYpLHRhKHRoaXMubGF5b3V0VmVydGV4QXJyYXksZy54LGcueSx2Lngsdi55LDAsMSxmKTt2YXIgeT1sLnZlcnRleExlbmd0aDt0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soeSx5KzEseSsyKSx0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soeSsxLHkrMix5KzMpLGwudmVydGV4TGVuZ3RoKz00LGwucHJpbWl0aXZlTGVuZ3RoKz0yfX19fWwudmVydGV4TGVuZ3RoK2E+TW4uTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEgmJihsPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoYSx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheSkpO2Zvcih2YXIgeD1bXSxiPVtdLF89bC52ZXJ0ZXhMZW5ndGgsdz0wLGs9aTt3PGsubGVuZ3RoO3crPTEpe3ZhciBBPWtbd107aWYoMCE9PUEubGVuZ3RoKXtBIT09aVswXSYmYi5wdXNoKHgubGVuZ3RoLzIpO2Zvcih2YXIgVD0wO1Q8QS5sZW5ndGg7VCsrKXt2YXIgTT1BW1RdO3RhKHRoaXMubGF5b3V0VmVydGV4QXJyYXksTS54LE0ueSwwLDAsMSwxLDApLHgucHVzaChNLngpLHgucHVzaChNLnkpfX19Zm9yKHZhciBTPW1pKHgsYiksRT0wO0U8Uy5sZW5ndGg7RSs9Myl0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soXytTW0VdLF8rU1tFKzFdLF8rU1tFKzJdKTtsLnByaW1pdGl2ZUxlbmd0aCs9Uy5sZW5ndGgvMyxsLnZlcnRleExlbmd0aCs9YX10aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLHQpfSxwcihcIkZpbGxFeHRydXNpb25CdWNrZXRcIixlYSx7b21pdDpbXCJsYXllcnNcIl19KTt2YXIgaWE9e3BhaW50Om5ldyBxcih7XCJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5XCI6bmV3IE5yKElbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLW9wYWNpdHlcIl0pLFwiZmlsbC1leHRydXNpb24tY29sb3JcIjpuZXcganIoSVtcInBhaW50X2ZpbGwtZXh0cnVzaW9uXCJdW1wiZmlsbC1leHRydXNpb24tY29sb3JcIl0pLFwiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlXCI6bmV3IE5yKElbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZVwiXSksXCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yXCI6bmV3IE5yKElbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3JcIl0pLFwiZmlsbC1leHRydXNpb24tcGF0dGVyblwiOm5ldyBWcihJW1wicGFpbnRfZmlsbC1leHRydXNpb25cIl1bXCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuXCJdKSxcImZpbGwtZXh0cnVzaW9uLWhlaWdodFwiOm5ldyBqcihJW1wicGFpbnRfZmlsbC1leHRydXNpb25cIl1bXCJmaWxsLWV4dHJ1c2lvbi1oZWlnaHRcIl0pLFwiZmlsbC1leHRydXNpb24tYmFzZVwiOm5ldyBqcihJW1wicGFpbnRfZmlsbC1leHRydXNpb25cIl1bXCJmaWxsLWV4dHJ1c2lvbi1iYXNlXCJdKX0pfSxhYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsaWEpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5jcmVhdGVCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBlYSh0KX0sZS5wcm90b3R5cGUucXVlcnlSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gSm4odGhpcy5wYWludC5nZXQoXCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGVcIikpfSxlLnByb3RvdHlwZS5xdWVyeUludGVyc2VjdHNGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtyZXR1cm4gVm4oS24odCx0aGlzLnBhaW50LmdldChcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZVwiKSx0aGlzLnBhaW50LmdldChcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3JcIiksaS5hbmdsZSxhKSxyKX0sZS5wcm90b3R5cGUuaGFzT2Zmc2NyZWVuUGFzcz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5wYWludC5nZXQoXCJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5XCIpJiZcIm5vbmVcIiE9PXRoaXMudmlzaWJpbGl0eX0sZS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKCl7dGhpcy52aWV3cG9ydEZyYW1lJiYodGhpcy52aWV3cG9ydEZyYW1lLmRlc3Ryb3koKSx0aGlzLnZpZXdwb3J0RnJhbWU9bnVsbCl9LGV9KEhyKSxvYT1Ycihbe25hbWU6XCJhX3Bvc19ub3JtYWxcIixjb21wb25lbnRzOjQsdHlwZTpcIkludDE2XCJ9LHtuYW1lOlwiYV9kYXRhXCIsY29tcG9uZW50czo0LHR5cGU6XCJVaW50OFwifV0sNCkubWVtYmVycyxzYT1sYTtmdW5jdGlvbiBsYSh0LGUscixuLGkpe3RoaXMucHJvcGVydGllcz17fSx0aGlzLmV4dGVudD1yLHRoaXMudHlwZT0wLHRoaXMuX3BiZj10LHRoaXMuX2dlb21ldHJ5PS0xLHRoaXMuX2tleXM9bix0aGlzLl92YWx1ZXM9aSx0LnJlYWRGaWVsZHMoY2EsdGhpcyxlKX1mdW5jdGlvbiBjYSh0LGUscil7MT09dD9lLmlkPXIucmVhZFZhcmludCgpOjI9PXQ/ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5yZWFkVmFyaW50KCkrdC5wb3M7dC5wb3M8cjspe3ZhciBuPWUuX2tleXNbdC5yZWFkVmFyaW50KCldLGk9ZS5fdmFsdWVzW3QucmVhZFZhcmludCgpXTtlLnByb3BlcnRpZXNbbl09aX19KHIsZSk6Mz09dD9lLnR5cGU9ci5yZWFkVmFyaW50KCk6ND09dCYmKGUuX2dlb21ldHJ5PXIucG9zKX1mdW5jdGlvbiB1YSh0KXtmb3IodmFyIGUscixuPTAsaT0wLGE9dC5sZW5ndGgsbz1hLTE7aTxhO289aSsrKWU9dFtpXSxuKz0oKHI9dFtvXSkueC1lLngpKihlLnkrci55KTtyZXR1cm4gbn1sYS50eXBlcz1bXCJVbmtub3duXCIsXCJQb2ludFwiLFwiTGluZVN0cmluZ1wiLFwiUG9seWdvblwiXSxsYS5wcm90b3R5cGUubG9hZEdlb21ldHJ5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGJmO3QucG9zPXRoaXMuX2dlb21ldHJ5O2Zvcih2YXIgZSxyPXQucmVhZFZhcmludCgpK3QucG9zLG49MSxpPTAsYT0wLG89MCxzPVtdO3QucG9zPHI7KXtpZihpPD0wKXt2YXIgYz10LnJlYWRWYXJpbnQoKTtuPTcmYyxpPWM+PjN9aWYoaS0tLDE9PT1ufHwyPT09bilhKz10LnJlYWRTVmFyaW50KCksbys9dC5yZWFkU1ZhcmludCgpLDE9PT1uJiYoZSYmcy5wdXNoKGUpLGU9W10pLGUucHVzaChuZXcgbChhLG8pKTtlbHNle2lmKDchPT1uKXRocm93IG5ldyBFcnJvcihcInVua25vd24gY29tbWFuZCBcIituKTtlJiZlLnB1c2goZVswXS5jbG9uZSgpKX19cmV0dXJuIGUmJnMucHVzaChlKSxzfSxsYS5wcm90b3R5cGUuYmJveD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BiZjt0LnBvcz10aGlzLl9nZW9tZXRyeTtmb3IodmFyIGU9dC5yZWFkVmFyaW50KCkrdC5wb3Mscj0xLG49MCxpPTAsYT0wLG89MS8wLHM9LTEvMCxsPTEvMCxjPS0xLzA7dC5wb3M8ZTspe2lmKG48PTApe3ZhciB1PXQucmVhZFZhcmludCgpO3I9NyZ1LG49dT4+M31pZihuLS0sMT09PXJ8fDI9PT1yKShpKz10LnJlYWRTVmFyaW50KCkpPG8mJihvPWkpLGk+cyYmKHM9aSksKGErPXQucmVhZFNWYXJpbnQoKSk8bCYmKGw9YSksYT5jJiYoYz1hKTtlbHNlIGlmKDchPT1yKXRocm93IG5ldyBFcnJvcihcInVua25vd24gY29tbWFuZCBcIityKX1yZXR1cm5bbyxsLHMsY119LGxhLnByb3RvdHlwZS50b0dlb0pTT049ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT10aGlzLmV4dGVudCpNYXRoLnBvdygyLHIpLG89dGhpcy5leHRlbnQqdCxzPXRoaXMuZXh0ZW50KmUsbD10aGlzLmxvYWRHZW9tZXRyeSgpLGM9bGEudHlwZXNbdGhpcy50eXBlXTtmdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10W2VdLG49MTgwLTM2MCooci55K3MpL2E7dFtlXT1bMzYwKihyLngrbykvYS0xODAsMzYwL01hdGguUEkqTWF0aC5hdGFuKE1hdGguZXhwKG4qTWF0aC5QSS8xODApKS05MF19fXN3aXRjaCh0aGlzLnR5cGUpe2Nhc2UgMTp2YXIgaD1bXTtmb3Iobj0wO248bC5sZW5ndGg7bisrKWhbbl09bFtuXVswXTt1KGw9aCk7YnJlYWs7Y2FzZSAyOmZvcihuPTA7bjxsLmxlbmd0aDtuKyspdShsW25dKTticmVhaztjYXNlIDM6Zm9yKGw9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoZTw9MSlyZXR1cm5bdF07Zm9yKHZhciByLG4saT1bXSxhPTA7YTxlO2ErKyl7dmFyIG89dWEodFthXSk7MCE9PW8mJih2b2lkIDA9PT1uJiYobj1vPDApLG49PT1vPDA/KHImJmkucHVzaChyKSxyPVt0W2FdXSk6ci5wdXNoKHRbYV0pKX1yZXR1cm4gciYmaS5wdXNoKHIpLGl9KGwpLG49MDtuPGwubGVuZ3RoO24rKylmb3IoaT0wO2k8bFtuXS5sZW5ndGg7aSsrKXUobFtuXVtpXSl9MT09PWwubGVuZ3RoP2w9bFswXTpjPVwiTXVsdGlcIitjO3ZhciBmPXt0eXBlOlwiRmVhdHVyZVwiLGdlb21ldHJ5Ont0eXBlOmMsY29vcmRpbmF0ZXM6bH0scHJvcGVydGllczp0aGlzLnByb3BlcnRpZXN9O3JldHVyblwiaWRcImluIHRoaXMmJihmLmlkPXRoaXMuaWQpLGZ9O3ZhciBoYT1mYTtmdW5jdGlvbiBmYSh0LGUpe3RoaXMudmVyc2lvbj0xLHRoaXMubmFtZT1udWxsLHRoaXMuZXh0ZW50PTQwOTYsdGhpcy5sZW5ndGg9MCx0aGlzLl9wYmY9dCx0aGlzLl9rZXlzPVtdLHRoaXMuX3ZhbHVlcz1bXSx0aGlzLl9mZWF0dXJlcz1bXSx0LnJlYWRGaWVsZHMocGEsdGhpcyxlKSx0aGlzLmxlbmd0aD10aGlzLl9mZWF0dXJlcy5sZW5ndGh9ZnVuY3Rpb24gcGEodCxlLHIpezE1PT09dD9lLnZlcnNpb249ci5yZWFkVmFyaW50KCk6MT09PXQ/ZS5uYW1lPXIucmVhZFN0cmluZygpOjU9PT10P2UuZXh0ZW50PXIucmVhZFZhcmludCgpOjI9PT10P2UuX2ZlYXR1cmVzLnB1c2goci5wb3MpOjM9PT10P2UuX2tleXMucHVzaChyLnJlYWRTdHJpbmcoKSk6ND09PXQmJmUuX3ZhbHVlcy5wdXNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1udWxsLHI9dC5yZWFkVmFyaW50KCkrdC5wb3M7dC5wb3M8cjspe3ZhciBuPXQucmVhZFZhcmludCgpPj4zO2U9MT09PW4/dC5yZWFkU3RyaW5nKCk6Mj09PW4/dC5yZWFkRmxvYXQoKTozPT09bj90LnJlYWREb3VibGUoKTo0PT09bj90LnJlYWRWYXJpbnQ2NCgpOjU9PT1uP3QucmVhZFZhcmludCgpOjY9PT1uP3QucmVhZFNWYXJpbnQoKTo3PT09bj90LnJlYWRCb29sZWFuKCk6bnVsbH1yZXR1cm4gZX0ocikpfWZ1bmN0aW9uIGRhKHQsZSxyKXtpZigzPT09dCl7dmFyIG49bmV3IGhhKHIsci5yZWFkVmFyaW50KCkrci5wb3MpO24ubGVuZ3RoJiYoZVtuLm5hbWVdPW4pfX1mYS5wcm90b3R5cGUuZmVhdHVyZT1mdW5jdGlvbih0KXtpZih0PDB8fHQ+PXRoaXMuX2ZlYXR1cmVzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJmZWF0dXJlIGluZGV4IG91dCBvZiBib3VuZHNcIik7dGhpcy5fcGJmLnBvcz10aGlzLl9mZWF0dXJlc1t0XTt2YXIgZT10aGlzLl9wYmYucmVhZFZhcmludCgpK3RoaXMuX3BiZi5wb3M7cmV0dXJuIG5ldyBzYSh0aGlzLl9wYmYsZSx0aGlzLmV4dGVudCx0aGlzLl9rZXlzLHRoaXMuX3ZhbHVlcyl9O3ZhciBnYT17VmVjdG9yVGlsZTpmdW5jdGlvbih0LGUpe3RoaXMubGF5ZXJzPXQucmVhZEZpZWxkcyhkYSx7fSxlKX0sVmVjdG9yVGlsZUZlYXR1cmU6c2EsVmVjdG9yVGlsZUxheWVyOmhhfSx2YT1nYS5WZWN0b3JUaWxlRmVhdHVyZS50eXBlcyxtYT02Myx5YT1NYXRoLmNvcyhNYXRoLlBJLzE4MCozNy41KSx4YT0uNSxiYT1NYXRoLnBvdygyLDE0KS94YTtmdW5jdGlvbiBfYSh0LGUscixuLGksYSxvKXt0LmVtcGxhY2VCYWNrKGUueCxlLnksbj8xOjAsaT8xOi0xLE1hdGgucm91bmQobWEqci54KSsxMjgsTWF0aC5yb3VuZChtYSpyLnkpKzEyOCwxKygwPT09YT8wOmE8MD8tMToxKXwobyp4YSY2Myk8PDIsbyp4YT4+Nil9dmFyIHdhPWZ1bmN0aW9uKHQpe3RoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXJzPXQubGF5ZXJzLHRoaXMubGF5ZXJJZHM9dGhpcy5sYXllcnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSksdGhpcy5pbmRleD10LmluZGV4LHRoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IFFyLHRoaXMuaW5kZXhBcnJheT1uZXcgaG4sdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9bmV3IEluKG9hLHQubGF5ZXJzLHQuem9vbSksdGhpcy5zZWdtZW50cz1uZXcgTW59O2Z1bmN0aW9uIGthKHQsZSl7cmV0dXJuKHQvZS50aWxlVG90YWwqKGUuZW5kLWUuc3RhcnQpK2Uuc3RhcnQpKihiYS0xKX13YS5wcm90b3R5cGUucG9wdWxhdGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPXQ7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdLGE9aS5mZWF0dXJlLG89aS5pbmRleCxzPWkuc291cmNlTGF5ZXJJbmRleDtpZih0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlcihuZXcgTHIodGhpcy56b29tKSxhKSl7dmFyIGw9Rm4oYSk7dGhpcy5hZGRGZWF0dXJlKGEsbCksZS5mZWF0dXJlSW5kZXguaW5zZXJ0KGEsbCxvLHMsdGhpcy5pbmRleCl9fX0sd2EucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RofSx3YS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksb2EpLHRoaXMuaW5kZXhCdWZmZXI9dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZCh0KX0sd2EucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlciYmKHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCksdGhpcy5zZWdtZW50cy5kZXN0cm95KCkpfSx3YS5wcm90b3R5cGUuYWRkRmVhdHVyZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLmxheWVyc1swXS5sYXlvdXQsbj1yLmdldChcImxpbmUtam9pblwiKS5ldmFsdWF0ZSh0KSxpPXIuZ2V0KFwibGluZS1jYXBcIiksYT1yLmdldChcImxpbmUtbWl0ZXItbGltaXRcIiksbz1yLmdldChcImxpbmUtcm91bmQtbGltaXRcIikscz0wLGw9ZTtzPGwubGVuZ3RoO3MrPTEpe3ZhciBjPWxbc107dGhpcy5hZGRMaW5lKGMsdCxuLGksYSxvKX19LHdhLnByb3RvdHlwZS5hZGRMaW5lPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1udWxsO2UucHJvcGVydGllcyYmZS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KFwibWFwYm94X2NsaXBfc3RhcnRcIikmJmUucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShcIm1hcGJveF9jbGlwX2VuZFwiKSYmKG89e3N0YXJ0OmUucHJvcGVydGllcy5tYXBib3hfY2xpcF9zdGFydCxlbmQ6ZS5wcm9wZXJ0aWVzLm1hcGJveF9jbGlwX2VuZCx0aWxlVG90YWw6dm9pZCAwfSk7Zm9yKHZhciBzPVwiUG9seWdvblwiPT09dmFbZS50eXBlXSxsPXQubGVuZ3RoO2w+PTImJnRbbC0xXS5lcXVhbHModFtsLTJdKTspbC0tO2Zvcih2YXIgYz0wO2M8bC0xJiZ0W2NdLmVxdWFscyh0W2MrMV0pOyljKys7aWYoIShsPChzPzM6MikpKXtvJiYoby50aWxlVG90YWw9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpLGE9MCxvPWM7bzxyLTE7bysrKW49dFtvXSxpPXRbbysxXSxhKz1uLmRpc3QoaSk7cmV0dXJuIGF9KHQsMCxsKSksXCJiZXZlbFwiPT09ciYmKGk9MS4wNSk7dmFyIHU9UG4vKDUxMip0aGlzLm92ZXJzY2FsaW5nKSoxNSxoPXRbY10sZj10aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDEwKmwsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXkpO3RoaXMuZGlzdGFuY2U9MDt2YXIgcCxkLGcsdj1uLG09cz9cImJ1dHRcIjpuLHk9ITAseD12b2lkIDAsYj12b2lkIDAsXz12b2lkIDAsdz12b2lkIDA7dGhpcy5lMT10aGlzLmUyPXRoaXMuZTM9LTEscyYmKHA9dFtsLTJdLHc9aC5zdWIocCkuX3VuaXQoKS5fcGVycCgpKTtmb3IodmFyIGs9YztrPGw7aysrKWlmKCEoYj1zJiZrPT09bC0xP3RbYysxXTp0W2srMV0pfHwhdFtrXS5lcXVhbHMoYikpe3cmJihfPXcpLHAmJih4PXApLHA9dFtrXSx3PWI/Yi5zdWIocCkuX3VuaXQoKS5fcGVycCgpOl87dmFyIEE9KF89X3x8dykuYWRkKHcpOzA9PT1BLngmJjA9PT1BLnl8fEEuX3VuaXQoKTt2YXIgVD1BLngqdy54K0EueSp3LnksTT0wIT09VD8xL1Q6MS8wLFM9VDx5YSYmeCYmYjtpZihTJiZrPmMpe3ZhciBFPXAuZGlzdCh4KTtpZihFPjIqdSl7dmFyIEM9cC5zdWIocC5zdWIoeCkuX211bHQodS9FKS5fcm91bmQoKSk7dGhpcy5kaXN0YW5jZSs9Qy5kaXN0KHgpLHRoaXMuYWRkQ3VycmVudFZlcnRleChDLHRoaXMuZGlzdGFuY2UsXy5tdWx0KDEpLDAsMCwhMSxmLG8pLHg9Q319dmFyIEw9eCYmYix6PUw/cjpiP3Y6bTtpZihMJiZcInJvdW5kXCI9PT16JiYoTTxhP3o9XCJtaXRlclwiOk08PTImJih6PVwiZmFrZXJvdW5kXCIpKSxcIm1pdGVyXCI9PT16JiZNPmkmJih6PVwiYmV2ZWxcIiksXCJiZXZlbFwiPT09eiYmKE0+MiYmKHo9XCJmbGlwYmV2ZWxcIiksTTxpJiYoej1cIm1pdGVyXCIpKSx4JiYodGhpcy5kaXN0YW5jZSs9cC5kaXN0KHgpKSxcIm1pdGVyXCI9PT16KUEuX211bHQoTSksdGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSxBLDAsMCwhMSxmLG8pO2Vsc2UgaWYoXCJmbGlwYmV2ZWxcIj09PXope2lmKE0+MTAwKUE9dy5jbG9uZSgpLm11bHQoLTEpO2Vsc2V7dmFyIE89Xy54KncueS1fLnkqdy54PjA/LTE6MSxJPU0qXy5hZGQodykubWFnKCkvXy5zdWIodykubWFnKCk7QS5fcGVycCgpLl9tdWx0KEkqTyl9dGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSxBLDAsMCwhMSxmLG8pLHRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsQS5tdWx0KC0xKSwwLDAsITEsZixvKX1lbHNlIGlmKFwiYmV2ZWxcIj09PXp8fFwiZmFrZXJvdW5kXCI9PT16KXt2YXIgRD1fLngqdy55LV8ueSp3Lng+MCxQPS1NYXRoLnNxcnQoTSpNLTEpO2lmKEQ/KGc9MCxkPVApOihkPTAsZz1QKSx5fHx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLF8sZCxnLCExLGYsbyksXCJmYWtlcm91bmRcIj09PXope2Zvcih2YXIgUj1NYXRoLmZsb29yKDgqKC41LShULS41KSkpLEY9dm9pZCAwLEI9MDtCPFI7QisrKUY9dy5tdWx0KChCKzEpLyhSKzEpKS5fYWRkKF8pLl91bml0KCksdGhpcy5hZGRQaWVTbGljZVZlcnRleChwLHRoaXMuZGlzdGFuY2UsRixELGYsbyk7dGhpcy5hZGRQaWVTbGljZVZlcnRleChwLHRoaXMuZGlzdGFuY2UsQSxELGYsbyk7Zm9yKHZhciBOPVItMTtOPj0wO04tLSlGPV8ubXVsdCgoTisxKS8oUisxKSkuX2FkZCh3KS5fdW5pdCgpLHRoaXMuYWRkUGllU2xpY2VWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLEYsRCxmLG8pfWImJnRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsdywtZCwtZywhMSxmLG8pfWVsc2VcImJ1dHRcIj09PXo/KHl8fHRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsXywwLDAsITEsZixvKSxiJiZ0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLHcsMCwwLCExLGYsbykpOlwic3F1YXJlXCI9PT16Pyh5fHwodGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSxfLDEsMSwhMSxmLG8pLHRoaXMuZTE9dGhpcy5lMj0tMSksYiYmdGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSx3LC0xLC0xLCExLGYsbykpOlwicm91bmRcIj09PXomJih5fHwodGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSxfLDAsMCwhMSxmLG8pLHRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsXywxLDEsITAsZixvKSx0aGlzLmUxPXRoaXMuZTI9LTEpLGImJih0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLHcsLTEsLTEsITAsZixvKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLHcsMCwwLCExLGYsbykpKTtpZihTJiZrPGwtMSl7dmFyIGo9cC5kaXN0KGIpO2lmKGo+Mip1KXt2YXIgVj1wLmFkZChiLnN1YihwKS5fbXVsdCh1L2opLl9yb3VuZCgpKTt0aGlzLmRpc3RhbmNlKz1WLmRpc3QocCksdGhpcy5hZGRDdXJyZW50VmVydGV4KFYsdGhpcy5kaXN0YW5jZSx3Lm11bHQoMSksMCwwLCExLGYsbykscD1WfX15PSExfXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsZSl9fSx3YS5wcm90b3R5cGUuYWRkQ3VycmVudFZlcnRleD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3ZhciBsLGM9dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx1PXRoaXMuaW5kZXhBcnJheTtzJiYoZT1rYShlLHMpKSxsPXIuY2xvbmUoKSxuJiZsLl9zdWIoci5wZXJwKCkuX211bHQobikpLF9hKGMsdCxsLGEsITEsbixlKSx0aGlzLmUzPW8udmVydGV4TGVuZ3RoKyssdGhpcy5lMT49MCYmdGhpcy5lMj49MCYmKHUuZW1wbGFjZUJhY2sodGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMpLG8ucHJpbWl0aXZlTGVuZ3RoKyspLHRoaXMuZTE9dGhpcy5lMix0aGlzLmUyPXRoaXMuZTMsbD1yLm11bHQoLTEpLGkmJmwuX3N1YihyLnBlcnAoKS5fbXVsdChpKSksX2EoYyx0LGwsYSwhMCwtaSxlKSx0aGlzLmUzPW8udmVydGV4TGVuZ3RoKyssdGhpcy5lMT49MCYmdGhpcy5lMj49MCYmKHUuZW1wbGFjZUJhY2sodGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMpLG8ucHJpbWl0aXZlTGVuZ3RoKyspLHRoaXMuZTE9dGhpcy5lMix0aGlzLmUyPXRoaXMuZTMsZT5iYS8yJiYhcyYmKHRoaXMuZGlzdGFuY2U9MCx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodCx0aGlzLmRpc3RhbmNlLHIsbixpLGEsbykpfSx3YS5wcm90b3R5cGUuYWRkUGllU2xpY2VWZXJ0ZXg9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3I9ci5tdWx0KG4/LTE6MSk7dmFyIG89dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxzPXRoaXMuaW5kZXhBcnJheTthJiYoZT1rYShlLGEpKSxfYShvLHQsciwhMSxuLDAsZSksdGhpcy5lMz1pLnZlcnRleExlbmd0aCsrLHRoaXMuZTE+PTAmJnRoaXMuZTI+PTAmJihzLmVtcGxhY2VCYWNrKHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzKSxpLnByaW1pdGl2ZUxlbmd0aCsrKSxuP3RoaXMuZTI9dGhpcy5lMzp0aGlzLmUxPXRoaXMuZTN9LHByKFwiTGluZUJ1Y2tldFwiLHdhLHtvbWl0OltcImxheWVyc1wiXX0pO3ZhciBBYT1uZXcgcXIoe1wibGluZS1jYXBcIjpuZXcgTnIoSS5sYXlvdXRfbGluZVtcImxpbmUtY2FwXCJdKSxcImxpbmUtam9pblwiOm5ldyBqcihJLmxheW91dF9saW5lW1wibGluZS1qb2luXCJdKSxcImxpbmUtbWl0ZXItbGltaXRcIjpuZXcgTnIoSS5sYXlvdXRfbGluZVtcImxpbmUtbWl0ZXItbGltaXRcIl0pLFwibGluZS1yb3VuZC1saW1pdFwiOm5ldyBOcihJLmxheW91dF9saW5lW1wibGluZS1yb3VuZC1saW1pdFwiXSl9KSxUYT17cGFpbnQ6bmV3IHFyKHtcImxpbmUtb3BhY2l0eVwiOm5ldyBqcihJLnBhaW50X2xpbmVbXCJsaW5lLW9wYWNpdHlcIl0pLFwibGluZS1jb2xvclwiOm5ldyBqcihJLnBhaW50X2xpbmVbXCJsaW5lLWNvbG9yXCJdKSxcImxpbmUtdHJhbnNsYXRlXCI6bmV3IE5yKEkucGFpbnRfbGluZVtcImxpbmUtdHJhbnNsYXRlXCJdKSxcImxpbmUtdHJhbnNsYXRlLWFuY2hvclwiOm5ldyBOcihJLnBhaW50X2xpbmVbXCJsaW5lLXRyYW5zbGF0ZS1hbmNob3JcIl0pLFwibGluZS13aWR0aFwiOm5ldyBqcihJLnBhaW50X2xpbmVbXCJsaW5lLXdpZHRoXCJdKSxcImxpbmUtZ2FwLXdpZHRoXCI6bmV3IGpyKEkucGFpbnRfbGluZVtcImxpbmUtZ2FwLXdpZHRoXCJdKSxcImxpbmUtb2Zmc2V0XCI6bmV3IGpyKEkucGFpbnRfbGluZVtcImxpbmUtb2Zmc2V0XCJdKSxcImxpbmUtYmx1clwiOm5ldyBqcihJLnBhaW50X2xpbmVbXCJsaW5lLWJsdXJcIl0pLFwibGluZS1kYXNoYXJyYXlcIjpuZXcgVnIoSS5wYWludF9saW5lW1wibGluZS1kYXNoYXJyYXlcIl0pLFwibGluZS1wYXR0ZXJuXCI6bmV3IFZyKEkucGFpbnRfbGluZVtcImxpbmUtcGF0dGVyblwiXSksXCJsaW5lLWdyYWRpZW50XCI6bmV3IFVyKEkucGFpbnRfbGluZVtcImxpbmUtZ3JhZGllbnRcIl0pfSksbGF5b3V0OkFhfSxNYT1uZXcoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKGUscil7cmV0dXJuIHI9bmV3IExyKE1hdGguZmxvb3Ioci56b29tKSx7bm93OnIubm93LGZhZGVEdXJhdGlvbjpyLmZhZGVEdXJhdGlvbix6b29tSGlzdG9yeTpyLnpvb21IaXN0b3J5LHRyYW5zaXRpb246ci50cmFuc2l0aW9ufSksdC5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZS5jYWxsKHRoaXMsZSxyKX0sZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiByPXAoe30scix7em9vbTpNYXRoLmZsb29yKHIuem9vbSl9KSx0LnByb3RvdHlwZS5ldmFsdWF0ZS5jYWxsKHRoaXMsZSxyLG4pfSxlfShqcikpKFRhLnBhaW50LnByb3BlcnRpZXNbXCJsaW5lLXdpZHRoXCJdLnNwZWNpZmljYXRpb24pO01hLnVzZUludGVnZXJab29tPSEwO3ZhciBTYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsVGEpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5zZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKGUscixuKXt0LnByb3RvdHlwZS5zZXRQYWludFByb3BlcnR5LmNhbGwodGhpcyxlLHIsbiksXCJsaW5lLWdyYWRpZW50XCI9PT1lJiZ0aGlzLl91cGRhdGVHcmFkaWVudCgpfSxlLnByb3RvdHlwZS5fdXBkYXRlR3JhZGllbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbXCJsaW5lLWdyYWRpZW50XCJdLnZhbHVlLmV4cHJlc3Npb247dGhpcy5ncmFkaWVudD1maSh0LFwibGluZVByb2dyZXNzXCIpLHRoaXMuZ3JhZGllbnRUZXh0dXJlPW51bGx9LGUucHJvdG90eXBlLnJlY2FsY3VsYXRlPWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLnJlY2FsY3VsYXRlLmNhbGwodGhpcyxlKSx0aGlzLnBhaW50Ll92YWx1ZXNbXCJsaW5lLWZsb29yd2lkdGhcIl09TWEucG9zc2libHlFdmFsdWF0ZSh0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQuX3ZhbHVlc1tcImxpbmUtd2lkdGhcIl0udmFsdWUsZSl9LGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHdhKHQpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbih0KXt2YXIgZT10LHI9RWEoJG4oXCJsaW5lLXdpZHRoXCIsdGhpcyxlKSwkbihcImxpbmUtZ2FwLXdpZHRoXCIsdGhpcyxlKSksbj0kbihcImxpbmUtb2Zmc2V0XCIsdGhpcyxlKTtyZXR1cm4gci8yK01hdGguYWJzKG4pK0puKHRoaXMucGFpbnQuZ2V0KFwibGluZS10cmFuc2xhdGVcIikpfSxlLnByb3RvdHlwZS5xdWVyeUludGVyc2VjdHNGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1Lbih0LHRoaXMucGFpbnQuZ2V0KFwibGluZS10cmFuc2xhdGVcIiksdGhpcy5wYWludC5nZXQoXCJsaW5lLXRyYW5zbGF0ZS1hbmNob3JcIiksaS5hbmdsZSxhKSxzPWEvMipFYSh0aGlzLnBhaW50LmdldChcImxpbmUtd2lkdGhcIikuZXZhbHVhdGUoZSksdGhpcy5wYWludC5nZXQoXCJsaW5lLWdhcC13aWR0aFwiKS5ldmFsdWF0ZShlKSksYz10aGlzLnBhaW50LmdldChcImxpbmUtb2Zmc2V0XCIpLmV2YWx1YXRlKGUpO3JldHVybiBjJiYocj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPW5ldyBsKDAsMCksaT0wO2k8dC5sZW5ndGg7aSsrKXtmb3IodmFyIGE9dFtpXSxvPVtdLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGM9YVtzLTFdLHU9YVtzXSxoPWFbcysxXSxmPTA9PT1zP246dS5zdWIoYykuX3VuaXQoKS5fcGVycCgpLHA9cz09PWEubGVuZ3RoLTE/bjpoLnN1Yih1KS5fdW5pdCgpLl9wZXJwKCksZD1mLl9hZGQocCkuX3VuaXQoKSxnPWQueCpwLngrZC55KnAueTtkLl9tdWx0KDEvZyksby5wdXNoKGQuX211bHQoZSkuX2FkZCh1KSl9ci5wdXNoKG8pfXJldHVybiByfShyLGMqYSkpLFVuKG8scixzKX0sZX0oSHIpO2Z1bmN0aW9uIEVhKHQsZSl7cmV0dXJuIGU+MD9lKzIqdDp0fXZhciBDYT1Ycihbe25hbWU6XCJhX3Bvc19vZmZzZXRcIixjb21wb25lbnRzOjQsdHlwZTpcIkludDE2XCJ9LHtuYW1lOlwiYV9kYXRhXCIsY29tcG9uZW50czo0LHR5cGU6XCJVaW50MTZcIn1dKSxMYT1Ycihbe25hbWU6XCJhX3Byb2plY3RlZF9wb3NcIixjb21wb25lbnRzOjMsdHlwZTpcIkZsb2F0MzJcIn1dLDQpLHphPShYcihbe25hbWU6XCJhX2ZhZGVfb3BhY2l0eVwiLGNvbXBvbmVudHM6MSx0eXBlOlwiVWludDMyXCJ9XSw0KSxYcihbe25hbWU6XCJhX3BsYWNlZFwiLGNvbXBvbmVudHM6Mix0eXBlOlwiVWludDhcIn1dLDQpKSxPYT0oWHIoW3t0eXBlOlwiSW50MTZcIixuYW1lOlwiYW5jaG9yUG9pbnRYXCJ9LHt0eXBlOlwiSW50MTZcIixuYW1lOlwiYW5jaG9yUG9pbnRZXCJ9LHt0eXBlOlwiSW50MTZcIixuYW1lOlwieDFcIn0se3R5cGU6XCJJbnQxNlwiLG5hbWU6XCJ5MVwifSx7dHlwZTpcIkludDE2XCIsbmFtZTpcIngyXCJ9LHt0eXBlOlwiSW50MTZcIixuYW1lOlwieTJcIn0se3R5cGU6XCJVaW50MzJcIixuYW1lOlwiZmVhdHVyZUluZGV4XCJ9LHt0eXBlOlwiVWludDE2XCIsbmFtZTpcInNvdXJjZUxheWVySW5kZXhcIn0se3R5cGU6XCJVaW50MTZcIixuYW1lOlwiYnVja2V0SW5kZXhcIn0se3R5cGU6XCJJbnQxNlwiLG5hbWU6XCJyYWRpdXNcIn0se3R5cGU6XCJJbnQxNlwiLG5hbWU6XCJzaWduZWREaXN0YW5jZUZyb21BbmNob3JcIn1dKSxYcihbe25hbWU6XCJhX3Bvc1wiLGNvbXBvbmVudHM6Mix0eXBlOlwiSW50MTZcIn0se25hbWU6XCJhX2FuY2hvcl9wb3NcIixjb21wb25lbnRzOjIsdHlwZTpcIkludDE2XCJ9LHtuYW1lOlwiYV9leHRydWRlXCIsY29tcG9uZW50czoyLHR5cGU6XCJJbnQxNlwifV0sNCkpLElhPVhyKFt7bmFtZTpcImFfcG9zXCIsY29tcG9uZW50czoyLHR5cGU6XCJJbnQxNlwifSx7bmFtZTpcImFfYW5jaG9yX3Bvc1wiLGNvbXBvbmVudHM6Mix0eXBlOlwiSW50MTZcIn0se25hbWU6XCJhX2V4dHJ1ZGVcIixjb21wb25lbnRzOjIsdHlwZTpcIkludDE2XCJ9XSw0KTtmdW5jdGlvbiBEYSh0LGUscil7dmFyIG49ZS5sYXlvdXQuZ2V0KFwidGV4dC10cmFuc2Zvcm1cIikuZXZhbHVhdGUocik7cmV0dXJuXCJ1cHBlcmNhc2VcIj09PW4/dD10LnRvTG9jYWxlVXBwZXJDYXNlKCk6XCJsb3dlcmNhc2VcIj09PW4mJih0PXQudG9Mb2NhbGVMb3dlckNhc2UoKSksQ3IuYXBwbHlBcmFiaWNTaGFwaW5nJiYodD1Dci5hcHBseUFyYWJpY1NoYXBpbmcodCkpLHR9WHIoW3t0eXBlOlwiSW50MTZcIixuYW1lOlwiYW5jaG9yWFwifSx7dHlwZTpcIkludDE2XCIsbmFtZTpcImFuY2hvcllcIn0se3R5cGU6XCJVaW50MTZcIixuYW1lOlwiZ2x5cGhTdGFydEluZGV4XCJ9LHt0eXBlOlwiVWludDE2XCIsbmFtZTpcIm51bUdseXBoc1wifSx7dHlwZTpcIlVpbnQzMlwiLG5hbWU6XCJ2ZXJ0ZXhTdGFydEluZGV4XCJ9LHt0eXBlOlwiVWludDMyXCIsbmFtZTpcImxpbmVTdGFydEluZGV4XCJ9LHt0eXBlOlwiVWludDMyXCIsbmFtZTpcImxpbmVMZW5ndGhcIn0se3R5cGU6XCJVaW50MTZcIixuYW1lOlwic2VnbWVudFwifSx7dHlwZTpcIlVpbnQxNlwiLG5hbWU6XCJsb3dlclNpemVcIn0se3R5cGU6XCJVaW50MTZcIixuYW1lOlwidXBwZXJTaXplXCJ9LHt0eXBlOlwiRmxvYXQzMlwiLG5hbWU6XCJsaW5lT2Zmc2V0WFwifSx7dHlwZTpcIkZsb2F0MzJcIixuYW1lOlwibGluZU9mZnNldFlcIn0se3R5cGU6XCJVaW50OFwiLG5hbWU6XCJ3cml0aW5nTW9kZVwifSx7dHlwZTpcIlVpbnQ4XCIsbmFtZTpcImhpZGRlblwifV0pLFhyKFt7dHlwZTpcIkZsb2F0MzJcIixuYW1lOlwib2Zmc2V0WFwifV0pLFhyKFt7dHlwZTpcIkludDE2XCIsbmFtZTpcInhcIn0se3R5cGU6XCJJbnQxNlwiLG5hbWU6XCJ5XCJ9LHt0eXBlOlwiSW50MTZcIixuYW1lOlwidGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3JcIn1dKTt2YXIgUGE9e1wiIVwiOlwiXFx1ZmUxNVwiLFwiI1wiOlwiXFx1ZmYwM1wiLCQ6XCJcXHVmZjA0XCIsXCIlXCI6XCJcXHVmZjA1XCIsXCImXCI6XCJcXHVmZjA2XCIsXCIoXCI6XCJcXHVmZTM1XCIsXCIpXCI6XCJcXHVmZTM2XCIsXCIqXCI6XCJcXHVmZjBhXCIsXCIrXCI6XCJcXHVmZjBiXCIsXCIsXCI6XCJcXHVmZTEwXCIsXCItXCI6XCJcXHVmZTMyXCIsXCIuXCI6XCJcXHUzMGZiXCIsXCIvXCI6XCJcXHVmZjBmXCIsXCI6XCI6XCJcXHVmZTEzXCIsXCI7XCI6XCJcXHVmZTE0XCIsXCI8XCI6XCJcXHVmZTNmXCIsXCI9XCI6XCJcXHVmZjFkXCIsXCI+XCI6XCJcXHVmZTQwXCIsXCI/XCI6XCJcXHVmZTE2XCIsXCJAXCI6XCJcXHVmZjIwXCIsXCJbXCI6XCJcXHVmZTQ3XCIsXCJcXFxcXCI6XCJcXHVmZjNjXCIsXCJdXCI6XCJcXHVmZTQ4XCIsXCJeXCI6XCJcXHVmZjNlXCIsXzpcIlxcdWZlMzNcIixcImBcIjpcIlxcdWZmNDBcIixcIntcIjpcIlxcdWZlMzdcIixcInxcIjpcIlxcdTIwMTVcIixcIn1cIjpcIlxcdWZlMzhcIixcIn5cIjpcIlxcdWZmNWVcIixcIlxceGEyXCI6XCJcXHVmZmUwXCIsXCJcXHhhM1wiOlwiXFx1ZmZlMVwiLFwiXFx4YTVcIjpcIlxcdWZmZTVcIixcIlxceGE2XCI6XCJcXHVmZmU0XCIsXCJcXHhhY1wiOlwiXFx1ZmZlMlwiLFwiXFx4YWZcIjpcIlxcdWZmZTNcIixcIlxcdTIwMTNcIjpcIlxcdWZlMzJcIixcIlxcdTIwMTRcIjpcIlxcdWZlMzFcIixcIlxcdTIwMThcIjpcIlxcdWZlNDNcIixcIlxcdTIwMTlcIjpcIlxcdWZlNDRcIixcIlxcdTIwMWNcIjpcIlxcdWZlNDFcIixcIlxcdTIwMWRcIjpcIlxcdWZlNDJcIixcIlxcdTIwMjZcIjpcIlxcdWZlMTlcIixcIlxcdTIwMjdcIjpcIlxcdTMwZmJcIixcIlxcdTIwYTlcIjpcIlxcdWZmZTZcIixcIlxcdTMwMDFcIjpcIlxcdWZlMTFcIixcIlxcdTMwMDJcIjpcIlxcdWZlMTJcIixcIlxcdTMwMDhcIjpcIlxcdWZlM2ZcIixcIlxcdTMwMDlcIjpcIlxcdWZlNDBcIixcIlxcdTMwMGFcIjpcIlxcdWZlM2RcIixcIlxcdTMwMGJcIjpcIlxcdWZlM2VcIixcIlxcdTMwMGNcIjpcIlxcdWZlNDFcIixcIlxcdTMwMGRcIjpcIlxcdWZlNDJcIixcIlxcdTMwMGVcIjpcIlxcdWZlNDNcIixcIlxcdTMwMGZcIjpcIlxcdWZlNDRcIixcIlxcdTMwMTBcIjpcIlxcdWZlM2JcIixcIlxcdTMwMTFcIjpcIlxcdWZlM2NcIixcIlxcdTMwMTRcIjpcIlxcdWZlMzlcIixcIlxcdTMwMTVcIjpcIlxcdWZlM2FcIixcIlxcdTMwMTZcIjpcIlxcdWZlMTdcIixcIlxcdTMwMTdcIjpcIlxcdWZlMThcIixcIlxcdWZmMDFcIjpcIlxcdWZlMTVcIixcIlxcdWZmMDhcIjpcIlxcdWZlMzVcIixcIlxcdWZmMDlcIjpcIlxcdWZlMzZcIixcIlxcdWZmMGNcIjpcIlxcdWZlMTBcIixcIlxcdWZmMGRcIjpcIlxcdWZlMzJcIixcIlxcdWZmMGVcIjpcIlxcdTMwZmJcIixcIlxcdWZmMWFcIjpcIlxcdWZlMTNcIixcIlxcdWZmMWJcIjpcIlxcdWZlMTRcIixcIlxcdWZmMWNcIjpcIlxcdWZlM2ZcIixcIlxcdWZmMWVcIjpcIlxcdWZlNDBcIixcIlxcdWZmMWZcIjpcIlxcdWZlMTZcIixcIlxcdWZmM2JcIjpcIlxcdWZlNDdcIixcIlxcdWZmM2RcIjpcIlxcdWZlNDhcIixcIlxcdWZmM2ZcIjpcIlxcdWZlMzNcIixcIlxcdWZmNWJcIjpcIlxcdWZlMzdcIixcIlxcdWZmNWNcIjpcIlxcdTIwMTVcIixcIlxcdWZmNWRcIjpcIlxcdWZlMzhcIixcIlxcdWZmNWZcIjpcIlxcdWZlMzVcIixcIlxcdWZmNjBcIjpcIlxcdWZlMzZcIixcIlxcdWZmNjFcIjpcIlxcdWZlMTJcIixcIlxcdWZmNjJcIjpcIlxcdWZlNDFcIixcIlxcdWZmNjNcIjpcIlxcdWZlNDJcIn0sUmE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIsbixpKXt0LmNhbGwodGhpcyxlLHIpLHRoaXMuYW5nbGU9bix2b2lkIDAhPT1pJiYodGhpcy5zZWdtZW50PWkpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZSh0aGlzLngsdGhpcy55LHRoaXMuYW5nbGUsdGhpcy5zZWdtZW50KX0sZX0obCk7ZnVuY3Rpb24gRmEodCxlKXt2YXIgcj1lLmV4cHJlc3Npb247aWYoXCJjb25zdGFudFwiPT09ci5raW5kKXJldHVybntmdW5jdGlvblR5cGU6XCJjb25zdGFudFwiLGxheW91dFNpemU6ci5ldmFsdWF0ZShuZXcgTHIodCsxKSl9O2lmKFwic291cmNlXCI9PT1yLmtpbmQpcmV0dXJue2Z1bmN0aW9uVHlwZTpcInNvdXJjZVwifTtmb3IodmFyIG49ci56b29tU3RvcHMsaT0wO2k8bi5sZW5ndGgmJm5baV08PXQ7KWkrKztmb3IodmFyIGE9aT1NYXRoLm1heCgwLGktMSk7YTxuLmxlbmd0aCYmblthXTx0KzE7KWErKzthPU1hdGgubWluKG4ubGVuZ3RoLTEsYSk7dmFyIG89e21pbjpuW2ldLG1heDpuW2FdfTtyZXR1cm5cImNvbXBvc2l0ZVwiPT09ci5raW5kP3tmdW5jdGlvblR5cGU6XCJjb21wb3NpdGVcIix6b29tUmFuZ2U6byxwcm9wZXJ0eVZhbHVlOmUudmFsdWV9OntmdW5jdGlvblR5cGU6XCJjYW1lcmFcIixsYXlvdXRTaXplOnIuZXZhbHVhdGUobmV3IExyKHQrMSkpLHpvb21SYW5nZTpvLHNpemVSYW5nZTp7bWluOnIuZXZhbHVhdGUobmV3IExyKG8ubWluKSksbWF4OnIuZXZhbHVhdGUobmV3IExyKG8ubWF4KSl9LHByb3BlcnR5VmFsdWU6ZS52YWx1ZX19cHIoXCJBbmNob3JcIixSYSk7dmFyIEJhPWdhLlZlY3RvclRpbGVGZWF0dXJlLnR5cGVzLE5hPVt7bmFtZTpcImFfZmFkZV9vcGFjaXR5XCIsY29tcG9uZW50czoxLHR5cGU6XCJVaW50OFwiLG9mZnNldDowfV07ZnVuY3Rpb24gamEodCxlLHIsbixpLGEsbyxzKXt0LmVtcGxhY2VCYWNrKGUscixNYXRoLnJvdW5kKDMyKm4pLE1hdGgucm91bmQoMzIqaSksYSxvLHM/c1swXTowLHM/c1sxXTowKX1mdW5jdGlvbiBWYSh0LGUscil7dC5lbXBsYWNlQmFjayhlLngsZS55LHIpLHQuZW1wbGFjZUJhY2soZS54LGUueSxyKSx0LmVtcGxhY2VCYWNrKGUueCxlLnksciksdC5lbXBsYWNlQmFjayhlLngsZS55LHIpfXZhciBVYT1mdW5jdGlvbih0KXt0aGlzLmxheW91dFZlcnRleEFycmF5PW5ldyB0bix0aGlzLmluZGV4QXJyYXk9bmV3IGhuLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zPXQsdGhpcy5zZWdtZW50cz1uZXcgTW4sdGhpcy5keW5hbWljTGF5b3V0VmVydGV4QXJyYXk9bmV3IGVuLHRoaXMub3BhY2l0eVZlcnRleEFycmF5PW5ldyBybix0aGlzLnBsYWNlZFN5bWJvbEFycmF5PW5ldyB5bn07VWEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0LGUpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksQ2EubWVtYmVycyksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSxlKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQodCksdGhpcy5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuZHluYW1pY0xheW91dFZlcnRleEFycmF5LExhLm1lbWJlcnMsITApLHRoaXMub3BhY2l0eVZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLm9wYWNpdHlWZXJ0ZXhBcnJheSxOYSwhMCksdGhpcy5vcGFjaXR5VmVydGV4QnVmZmVyLml0ZW1TaXplPTF9LFVhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpLHRoaXMuZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5vcGFjaXR5VmVydGV4QnVmZmVyLmRlc3Ryb3koKSl9LHByKFwiU3ltYm9sQnVmZmVyc1wiLFVhKTt2YXIgcWE9ZnVuY3Rpb24odCxlLHIpe3RoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IHQsdGhpcy5sYXlvdXRBdHRyaWJ1dGVzPWUsdGhpcy5pbmRleEFycmF5PW5ldyByLHRoaXMuc2VnbWVudHM9bmV3IE1uLHRoaXMuY29sbGlzaW9uVmVydGV4QXJyYXk9bmV3IG9ufTtxYS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5sYXlvdXRBdHRyaWJ1dGVzKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KSx0aGlzLmNvbGxpc2lvblZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmNvbGxpc2lvblZlcnRleEFycmF5LHphLm1lbWJlcnMsITApfSxxYS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyJiYodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpLHRoaXMuY29sbGlzaW9uVmVydGV4QnVmZmVyLmRlc3Ryb3koKSl9LHByKFwiQ29sbGlzaW9uQnVmZmVyc1wiLHFhKTt2YXIgSGE9ZnVuY3Rpb24odCl7dGhpcy5jb2xsaXNpb25Cb3hBcnJheT10LmNvbGxpc2lvbkJveEFycmF5LHRoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXJzPXQubGF5ZXJzLHRoaXMubGF5ZXJJZHM9dGhpcy5sYXllcnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSksdGhpcy5pbmRleD10LmluZGV4LHRoaXMucGl4ZWxSYXRpbz10LnBpeGVsUmF0aW8sdGhpcy5zb3VyY2VMYXllckluZGV4PXQuc291cmNlTGF5ZXJJbmRleDt2YXIgZT10aGlzLmxheWVyc1swXS5fdW5ldmFsdWF0ZWRMYXlvdXQuX3ZhbHVlczt0aGlzLnRleHRTaXplRGF0YT1GYSh0aGlzLnpvb20sZVtcInRleHQtc2l6ZVwiXSksdGhpcy5pY29uU2l6ZURhdGE9RmEodGhpcy56b29tLGVbXCJpY29uLXNpemVcIl0pO3ZhciByPXRoaXMubGF5ZXJzWzBdLmxheW91dDt0aGlzLnNvcnRGZWF0dXJlc0J5WT1yLmdldChcInRleHQtYWxsb3ctb3ZlcmxhcFwiKXx8ci5nZXQoXCJpY29uLWFsbG93LW92ZXJsYXBcIil8fHIuZ2V0KFwidGV4dC1pZ25vcmUtcGxhY2VtZW50XCIpfHxyLmdldChcImljb24taWdub3JlLXBsYWNlbWVudFwiKX07SGEucHJvdG90eXBlLmNyZWF0ZUFycmF5cz1mdW5jdGlvbigpe3RoaXMudGV4dD1uZXcgVWEobmV3IEluKENhLm1lbWJlcnMsdGhpcy5sYXllcnMsdGhpcy56b29tLGZ1bmN0aW9uKHQpe3JldHVybi9edGV4dC8udGVzdCh0KX0pKSx0aGlzLmljb249bmV3IFVhKG5ldyBJbihDYS5tZW1iZXJzLHRoaXMubGF5ZXJzLHRoaXMuem9vbSxmdW5jdGlvbih0KXtyZXR1cm4vXmljb24vLnRlc3QodCl9KSksdGhpcy5jb2xsaXNpb25Cb3g9bmV3IHFhKGFuLE9hLm1lbWJlcnMsZm4pLHRoaXMuY29sbGlzaW9uQ2lyY2xlPW5ldyBxYShhbixJYS5tZW1iZXJzLGhuKSx0aGlzLmdseXBoT2Zmc2V0QXJyYXk9bmV3IGJuLHRoaXMubGluZVZlcnRleEFycmF5PW5ldyB3bn0sSGEucHJvdG90eXBlLnBvcHVsYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sYXllcnNbMF0sbj1yLmxheW91dCxpPW4uZ2V0KFwidGV4dC1mb250XCIpLGE9bi5nZXQoXCJ0ZXh0LWZpZWxkXCIpLG89bi5nZXQoXCJpY29uLWltYWdlXCIpLHM9KFwiY29uc3RhbnRcIiE9PWEudmFsdWUua2luZHx8YS52YWx1ZS52YWx1ZS5sZW5ndGg+MCkmJihcImNvbnN0YW50XCIhPT1pLnZhbHVlLmtpbmR8fGkudmFsdWUudmFsdWUubGVuZ3RoPjApLGw9XCJjb25zdGFudFwiIT09by52YWx1ZS5raW5kfHxvLnZhbHVlLnZhbHVlJiZvLnZhbHVlLnZhbHVlLmxlbmd0aD4wO2lmKHRoaXMuZmVhdHVyZXM9W10sc3x8bCl7Zm9yKHZhciBjPWUuaWNvbkRlcGVuZGVuY2llcyx1PWUuZ2x5cGhEZXBlbmRlbmNpZXMsaD1uZXcgTHIodGhpcy56b29tKSxmPTAscD10O2Y8cC5sZW5ndGg7Zis9MSl7dmFyIGQ9cFtmXSxnPWQuZmVhdHVyZSx2PWQuaW5kZXgsbT1kLnNvdXJjZUxheWVySW5kZXg7aWYoci5fZmVhdHVyZUZpbHRlcihoLGcpKXt2YXIgeT12b2lkIDA7cyYmKHk9RGEoeT1yLmdldFZhbHVlQW5kUmVzb2x2ZVRva2VucyhcInRleHQtZmllbGRcIixnKSxyLGcpKTt2YXIgeD12b2lkIDA7aWYobCYmKHg9ci5nZXRWYWx1ZUFuZFJlc29sdmVUb2tlbnMoXCJpY29uLWltYWdlXCIsZykpLHl8fHgpe3ZhciBiPXt0ZXh0OnksaWNvbjp4LGluZGV4OnYsc291cmNlTGF5ZXJJbmRleDptLGdlb21ldHJ5OkZuKGcpLHByb3BlcnRpZXM6Zy5wcm9wZXJ0aWVzLHR5cGU6QmFbZy50eXBlXX07aWYodm9pZCAwIT09Zy5pZCYmKGIuaWQ9Zy5pZCksdGhpcy5mZWF0dXJlcy5wdXNoKGIpLHgmJihjW3hdPSEwKSx5KWZvcih2YXIgXz1pLmV2YWx1YXRlKGcpLmpvaW4oXCIsXCIpLHc9dVtfXT11W19dfHx7fSxrPVwibWFwXCI9PT1uLmdldChcInRleHQtcm90YXRpb24tYWxpZ25tZW50XCIpJiZcImxpbmVcIj09PW4uZ2V0KFwic3ltYm9sLXBsYWNlbWVudFwiKSxBPXhyKHkpLFQ9MDtUPHkubGVuZ3RoO1QrKylpZih3W3kuY2hhckNvZGVBdChUKV09ITAsayYmQSl7dmFyIE09UGFbeS5jaGFyQXQoVCldO00mJih3W00uY2hhckNvZGVBdCgwKV09ITApfX19fVwibGluZVwiPT09bi5nZXQoXCJzeW1ib2wtcGxhY2VtZW50XCIpJiYodGhpcy5mZWF0dXJlcz1mdW5jdGlvbih0KXt2YXIgZT17fSxyPXt9LG49W10saT0wO2Z1bmN0aW9uIGEoZSl7bi5wdXNoKHRbZV0pLGkrK31mdW5jdGlvbiBvKHQsZSxpKXt2YXIgYT1yW3RdO3JldHVybiBkZWxldGUgclt0XSxyW2VdPWEsblthXS5nZW9tZXRyeVswXS5wb3AoKSxuW2FdLmdlb21ldHJ5WzBdPW5bYV0uZ2VvbWV0cnlbMF0uY29uY2F0KGlbMF0pLGF9ZnVuY3Rpb24gcyh0LHIsaSl7dmFyIGE9ZVtyXTtyZXR1cm4gZGVsZXRlIGVbcl0sZVt0XT1hLG5bYV0uZ2VvbWV0cnlbMF0uc2hpZnQoKSxuW2FdLmdlb21ldHJ5WzBdPWlbMF0uY29uY2F0KG5bYV0uZ2VvbWV0cnlbMF0pLGF9ZnVuY3Rpb24gbCh0LGUscil7dmFyIG49cj9lWzBdW2VbMF0ubGVuZ3RoLTFdOmVbMF1bMF07cmV0dXJuIHQrXCI6XCIrbi54K1wiOlwiK24ueX1mb3IodmFyIGM9MDtjPHQubGVuZ3RoO2MrKyl7dmFyIHU9dFtjXSxoPXUuZ2VvbWV0cnksZj11LnRleHQ7aWYoZil7dmFyIHA9bChmLGgpLGQ9bChmLGgsITApO2lmKHAgaW4gciYmZCBpbiBlJiZyW3BdIT09ZVtkXSl7dmFyIGc9cyhwLGQsaCksdj1vKHAsZCxuW2ddLmdlb21ldHJ5KTtkZWxldGUgZVtwXSxkZWxldGUgcltkXSxyW2woZixuW3ZdLmdlb21ldHJ5LCEwKV09dixuW2ddLmdlb21ldHJ5PW51bGx9ZWxzZSBwIGluIHI/byhwLGQsaCk6ZCBpbiBlP3MocCxkLGgpOihhKGMpLGVbcF09aS0xLHJbZF09aS0xKX1lbHNlIGEoYyl9cmV0dXJuIG4uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdlb21ldHJ5fSl9KHRoaXMuZmVhdHVyZXMpKX19LEhhLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGh9LEhhLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy50ZXh0LnVwbG9hZCh0LHRoaXMuc29ydEZlYXR1cmVzQnlZKSx0aGlzLmljb24udXBsb2FkKHQsdGhpcy5zb3J0RmVhdHVyZXNCeVkpLHRoaXMuY29sbGlzaW9uQm94LnVwbG9hZCh0KSx0aGlzLmNvbGxpc2lvbkNpcmNsZS51cGxvYWQodCl9LEhhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy50ZXh0LmRlc3Ryb3koKSx0aGlzLmljb24uZGVzdHJveSgpLHRoaXMuY29sbGlzaW9uQm94LmRlc3Ryb3koKSx0aGlzLmNvbGxpc2lvbkNpcmNsZS5kZXN0cm95KCl9LEhhLnByb3RvdHlwZS5hZGRUb0xpbmVWZXJ0ZXhBcnJheT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGluZVZlcnRleEFycmF5Lmxlbmd0aDtpZih2b2lkIDAhPT10LnNlZ21lbnQpe2Zvcih2YXIgbj10LmRpc3QoZVt0LnNlZ21lbnQrMV0pLGk9dC5kaXN0KGVbdC5zZWdtZW50XSksYT17fSxvPXQuc2VnbWVudCsxO288ZS5sZW5ndGg7bysrKWFbb109e3g6ZVtvXS54LHk6ZVtvXS55LHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yOm59LG88ZS5sZW5ndGgtMSYmKG4rPWVbbysxXS5kaXN0KGVbb10pKTtmb3IodmFyIHM9dC5zZWdtZW50fHwwO3M+PTA7cy0tKWFbc109e3g6ZVtzXS54LHk6ZVtzXS55LHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yOml9LHM+MCYmKGkrPWVbcy0xXS5kaXN0KGVbc10pKTtmb3IodmFyIGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIGM9YVtsXTt0aGlzLmxpbmVWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhjLngsYy55LGMudGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3IpfX1yZXR1cm57bGluZVN0YXJ0SW5kZXg6cixsaW5lTGVuZ3RoOnRoaXMubGluZVZlcnRleEFycmF5Lmxlbmd0aC1yfX0sSGEucHJvdG90eXBlLmFkZFN5bWJvbHM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyl7Zm9yKHZhciB1PXQuaW5kZXhBcnJheSxoPXQubGF5b3V0VmVydGV4QXJyYXksZj10LmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSxwPXQuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCplLmxlbmd0aCx0LmxheW91dFZlcnRleEFycmF5LHQuaW5kZXhBcnJheSksZD10aGlzLmdseXBoT2Zmc2V0QXJyYXkubGVuZ3RoLGc9cC52ZXJ0ZXhMZW5ndGgsdj0wLG09ZTt2PG0ubGVuZ3RoO3YrPTEpe3ZhciB5PW1bdl0seD15LnRsLGI9eS50cixfPXkuYmwsdz15LmJyLGs9eS50ZXgsQT1wLnZlcnRleExlbmd0aCxUPXkuZ2x5cGhPZmZzZXRbMV07amEoaCxzLngscy55LHgueCxUK3gueSxrLngsay55LHIpLGphKGgscy54LHMueSxiLngsVCtiLnksay54K2sudyxrLnksciksamEoaCxzLngscy55LF8ueCxUK18ueSxrLngsay55K2suaCxyKSxqYShoLHMueCxzLnksdy54LFQrdy55LGsueCtrLncsay55K2suaCxyKSxWYShmLHMsMCksdS5lbXBsYWNlQmFjayhBLEErMSxBKzIpLHUuZW1wbGFjZUJhY2soQSsxLEErMixBKzMpLHAudmVydGV4TGVuZ3RoKz00LHAucHJpbWl0aXZlTGVuZ3RoKz0yLHRoaXMuZ2x5cGhPZmZzZXRBcnJheS5lbXBsYWNlQmFjayh5LmdseXBoT2Zmc2V0WzBdKX10LnBsYWNlZFN5bWJvbEFycmF5LmVtcGxhY2VCYWNrKHMueCxzLnksZCx0aGlzLmdseXBoT2Zmc2V0QXJyYXkubGVuZ3RoLWQsZyxsLGMscy5zZWdtZW50LHI/clswXTowLHI/clsxXTowLG5bMF0sblsxXSxvLCExKSx0LnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHQubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLGEpfSxIYS5wcm90b3R5cGUuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4PWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIGUuZW1wbGFjZUJhY2soMCwwKSx0LmVtcGxhY2VCYWNrKHIueCxyLnksbi54LG4ueSxNYXRoLnJvdW5kKGkueCksTWF0aC5yb3VuZChpLnkpKX0sSGEucHJvdG90eXBlLmFkZENvbGxpc2lvbkRlYnVnVmVydGljZXM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt2YXIgYz1pLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQsaS5sYXlvdXRWZXJ0ZXhBcnJheSxpLmluZGV4QXJyYXkpLHU9Yy52ZXJ0ZXhMZW5ndGgsaD1pLmxheW91dFZlcnRleEFycmF5LGY9aS5jb2xsaXNpb25WZXJ0ZXhBcnJheTtpZih0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleChoLGYsYSxvLmFuY2hvcixuZXcgbCh0LGUpKSx0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleChoLGYsYSxvLmFuY2hvcixuZXcgbChyLGUpKSx0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleChoLGYsYSxvLmFuY2hvcixuZXcgbChyLG4pKSx0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleChoLGYsYSxvLmFuY2hvcixuZXcgbCh0LG4pKSxjLnZlcnRleExlbmd0aCs9NCxzKXt2YXIgcD1pLmluZGV4QXJyYXk7cC5lbXBsYWNlQmFjayh1LHUrMSx1KzIpLHAuZW1wbGFjZUJhY2sodSx1KzIsdSszKSxjLnByaW1pdGl2ZUxlbmd0aCs9Mn1lbHNle3ZhciBkPWkuaW5kZXhBcnJheTtkLmVtcGxhY2VCYWNrKHUsdSsxKSxkLmVtcGxhY2VCYWNrKHUrMSx1KzIpLGQuZW1wbGFjZUJhY2sodSsyLHUrMyksZC5lbXBsYWNlQmFjayh1KzMsdSksYy5wcmltaXRpdmVMZW5ndGgrPTR9fSxIYS5wcm90b3R5cGUuZ2VuZXJhdGVDb2xsaXNpb25EZWJ1Z0J1ZmZlcnM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPXRoaXMuc3ltYm9sSW5zdGFuY2VzO3Q8ZS5sZW5ndGg7dCs9MSl7dmFyIHI9ZVt0XTtyLnRleHRDb2xsaXNpb25GZWF0dXJlPXtib3hTdGFydEluZGV4OnIudGV4dEJveFN0YXJ0SW5kZXgsYm94RW5kSW5kZXg6ci50ZXh0Qm94RW5kSW5kZXh9LHIuaWNvbkNvbGxpc2lvbkZlYXR1cmU9e2JveFN0YXJ0SW5kZXg6ci5pY29uQm94U3RhcnRJbmRleCxib3hFbmRJbmRleDpyLmljb25Cb3hFbmRJbmRleH07Zm9yKHZhciBuPTA7bjwyO24rKyl7dmFyIGk9clswPT09bj9cInRleHRDb2xsaXNpb25GZWF0dXJlXCI6XCJpY29uQ29sbGlzaW9uRmVhdHVyZVwiXTtpZihpKWZvcih2YXIgYT1pLmJveFN0YXJ0SW5kZXg7YTxpLmJveEVuZEluZGV4O2ErKyl7dmFyIG89dGhpcy5jb2xsaXNpb25Cb3hBcnJheS5nZXQoYSkscz1vLngxLGw9by55MSxjPW8ueDIsdT1vLnkyLGg9by5yYWRpdXM+MDt0aGlzLmFkZENvbGxpc2lvbkRlYnVnVmVydGljZXMocyxsLGMsdSxoP3RoaXMuY29sbGlzaW9uQ2lyY2xlOnRoaXMuY29sbGlzaW9uQm94LG8uYW5jaG9yUG9pbnQscixoKX19fX0sSGEucHJvdG90eXBlLmRlc2VyaWFsaXplQ29sbGlzaW9uQm94ZXM9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9e30sbz1lO288cjtvKyspe3ZhciBzPXQuZ2V0KG8pO2lmKDA9PT1zLnJhZGl1cyl7YS50ZXh0Qm94PXt4MTpzLngxLHkxOnMueTEseDI6cy54Mix5MjpzLnkyLGFuY2hvclBvaW50WDpzLmFuY2hvclBvaW50WCxhbmNob3JQb2ludFk6cy5hbmNob3JQb2ludFl9LGEudGV4dEZlYXR1cmVJbmRleD1zLmZlYXR1cmVJbmRleDticmVha31hLnRleHRDaXJjbGVzfHwoYS50ZXh0Q2lyY2xlcz1bXSxhLnRleHRGZWF0dXJlSW5kZXg9cy5mZWF0dXJlSW5kZXgpLGEudGV4dENpcmNsZXMucHVzaChzLmFuY2hvclBvaW50WCxzLmFuY2hvclBvaW50WSxzLnJhZGl1cyxzLnNpZ25lZERpc3RhbmNlRnJvbUFuY2hvciwxKX1mb3IodmFyIGw9bjtsPGk7bCsrKXt2YXIgYz10LmdldChsKTtpZigwPT09Yy5yYWRpdXMpe2EuaWNvbkJveD17eDE6Yy54MSx5MTpjLnkxLHgyOmMueDIseTI6Yy55MixhbmNob3JQb2ludFg6Yy5hbmNob3JQb2ludFgsYW5jaG9yUG9pbnRZOmMuYW5jaG9yUG9pbnRZfSxhLmljb25GZWF0dXJlSW5kZXg9Yy5mZWF0dXJlSW5kZXg7YnJlYWt9fXJldHVybiBhfSxIYS5wcm90b3R5cGUuaGFzVGV4dERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0LnNlZ21lbnRzLmdldCgpLmxlbmd0aD4wfSxIYS5wcm90b3R5cGUuaGFzSWNvbkRhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pY29uLnNlZ21lbnRzLmdldCgpLmxlbmd0aD4wfSxIYS5wcm90b3R5cGUuaGFzQ29sbGlzaW9uQm94RGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbGxpc2lvbkJveC5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MH0sSGEucHJvdG90eXBlLmhhc0NvbGxpc2lvbkNpcmNsZURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb2xsaXNpb25DaXJjbGUuc2VnbWVudHMuZ2V0KCkubGVuZ3RoPjB9LEhhLnByb3RvdHlwZS5zb3J0RmVhdHVyZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0aGlzLnNvcnRGZWF0dXJlc0J5WSYmdGhpcy5zb3J0ZWRBbmdsZSE9PXQmJih0aGlzLnNvcnRlZEFuZ2xlPXQsISh0aGlzLnRleHQuc2VnbWVudHMuZ2V0KCkubGVuZ3RoPjF8fHRoaXMuaWNvbi5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MSkpKXtmb3IodmFyIHI9W10sbj0wO248dGhpcy5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoO24rKylyLnB1c2gobik7dmFyIGk9TWF0aC5zaW4odCksYT1NYXRoLmNvcyh0KTtyLnNvcnQoZnVuY3Rpb24odCxyKXt2YXIgbj1lLnN5bWJvbEluc3RhbmNlc1t0XSxvPWUuc3ltYm9sSW5zdGFuY2VzW3JdO3JldHVybihpKm4uYW5jaG9yLngrYSpuLmFuY2hvci55fDApLShpKm8uYW5jaG9yLngrYSpvLmFuY2hvci55fDApfHxvLmZlYXR1cmVJbmRleC1uLmZlYXR1cmVJbmRleH0pLHRoaXMudGV4dC5pbmRleEFycmF5LmNsZWFyKCksdGhpcy5pY29uLmluZGV4QXJyYXkuY2xlYXIoKSx0aGlzLmZlYXR1cmVTb3J0T3JkZXI9W107Zm9yKHZhciBvPTAscz1yO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXSxjPWUuc3ltYm9sSW5zdGFuY2VzW2xdO2UuZmVhdHVyZVNvcnRPcmRlci5wdXNoKGMuZmVhdHVyZUluZGV4KTtmb3IodmFyIHU9MCxoPWMucGxhY2VkVGV4dFN5bWJvbEluZGljZXM7dTxoLmxlbmd0aDt1Kz0xKWZvcih2YXIgZj1oW3VdLHA9ZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChmKSxkPXAudmVydGV4U3RhcnRJbmRleCs0KnAubnVtR2x5cGhzLGc9cC52ZXJ0ZXhTdGFydEluZGV4O2c8ZDtnKz00KWUudGV4dC5pbmRleEFycmF5LmVtcGxhY2VCYWNrKGcsZysxLGcrMiksZS50ZXh0LmluZGV4QXJyYXkuZW1wbGFjZUJhY2soZysxLGcrMixnKzMpO3ZhciB2PWUuaWNvbi5wbGFjZWRTeW1ib2xBcnJheS5nZXQobCk7aWYodi5udW1HbHlwaHMpe3ZhciBtPXYudmVydGV4U3RhcnRJbmRleDtlLmljb24uaW5kZXhBcnJheS5lbXBsYWNlQmFjayhtLG0rMSxtKzIpLGUuaWNvbi5pbmRleEFycmF5LmVtcGxhY2VCYWNrKG0rMSxtKzIsbSszKX19dGhpcy50ZXh0LmluZGV4QnVmZmVyJiZ0aGlzLnRleHQuaW5kZXhCdWZmZXIudXBkYXRlRGF0YSh0aGlzLnRleHQuaW5kZXhBcnJheSksdGhpcy5pY29uLmluZGV4QnVmZmVyJiZ0aGlzLmljb24uaW5kZXhCdWZmZXIudXBkYXRlRGF0YSh0aGlzLmljb24uaW5kZXhBcnJheSl9fSxwcihcIlN5bWJvbEJ1Y2tldFwiLEhhLHtvbWl0OltcImxheWVyc1wiLFwiY29sbGlzaW9uQm94QXJyYXlcIixcImZlYXR1cmVzXCIsXCJjb21wYXJlVGV4dFwiXSxzaGFsbG93OltcInN5bWJvbEluc3RhbmNlc1wiXX0pLEhhLk1BWF9HTFlQSFM9NjU1MzUsSGEuYWRkRHluYW1pY0F0dHJpYnV0ZXM9VmE7dmFyIEdhPW5ldyBxcih7XCJzeW1ib2wtcGxhY2VtZW50XCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFtcInN5bWJvbC1wbGFjZW1lbnRcIl0pLFwic3ltYm9sLXNwYWNpbmdcIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sW1wic3ltYm9sLXNwYWNpbmdcIl0pLFwic3ltYm9sLWF2b2lkLWVkZ2VzXCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFtcInN5bWJvbC1hdm9pZC1lZGdlc1wiXSksXCJpY29uLWFsbG93LW92ZXJsYXBcIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sW1wiaWNvbi1hbGxvdy1vdmVybGFwXCJdKSxcImljb24taWdub3JlLXBsYWNlbWVudFwiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJpY29uLWlnbm9yZS1wbGFjZW1lbnRcIl0pLFwiaWNvbi1vcHRpb25hbFwiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJpY29uLW9wdGlvbmFsXCJdKSxcImljb24tcm90YXRpb24tYWxpZ25tZW50XCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFtcImljb24tcm90YXRpb24tYWxpZ25tZW50XCJdKSxcImljb24tc2l6ZVwiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbXCJpY29uLXNpemVcIl0pLFwiaWNvbi10ZXh0LWZpdFwiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJpY29uLXRleHQtZml0XCJdKSxcImljb24tdGV4dC1maXQtcGFkZGluZ1wiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJpY29uLXRleHQtZml0LXBhZGRpbmdcIl0pLFwiaWNvbi1pbWFnZVwiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbXCJpY29uLWltYWdlXCJdKSxcImljb24tcm90YXRlXCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFtcImljb24tcm90YXRlXCJdKSxcImljb24tcGFkZGluZ1wiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJpY29uLXBhZGRpbmdcIl0pLFwiaWNvbi1rZWVwLXVwcmlnaHRcIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sW1wiaWNvbi1rZWVwLXVwcmlnaHRcIl0pLFwiaWNvbi1vZmZzZXRcIjpuZXcganIoSS5sYXlvdXRfc3ltYm9sW1wiaWNvbi1vZmZzZXRcIl0pLFwiaWNvbi1hbmNob3JcIjpuZXcganIoSS5sYXlvdXRfc3ltYm9sW1wiaWNvbi1hbmNob3JcIl0pLFwiaWNvbi1waXRjaC1hbGlnbm1lbnRcIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sW1wiaWNvbi1waXRjaC1hbGlnbm1lbnRcIl0pLFwidGV4dC1waXRjaC1hbGlnbm1lbnRcIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sW1widGV4dC1waXRjaC1hbGlnbm1lbnRcIl0pLFwidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnRcIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sW1widGV4dC1yb3RhdGlvbi1hbGlnbm1lbnRcIl0pLFwidGV4dC1maWVsZFwiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LWZpZWxkXCJdKSxcInRleHQtZm9udFwiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LWZvbnRcIl0pLFwidGV4dC1zaXplXCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFtcInRleHQtc2l6ZVwiXSksXCJ0ZXh0LW1heC13aWR0aFwiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LW1heC13aWR0aFwiXSksXCJ0ZXh0LWxpbmUtaGVpZ2h0XCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFtcInRleHQtbGluZS1oZWlnaHRcIl0pLFwidGV4dC1sZXR0ZXItc3BhY2luZ1wiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LWxldHRlci1zcGFjaW5nXCJdKSxcInRleHQtanVzdGlmeVwiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LWp1c3RpZnlcIl0pLFwidGV4dC1hbmNob3JcIjpuZXcganIoSS5sYXlvdXRfc3ltYm9sW1widGV4dC1hbmNob3JcIl0pLFwidGV4dC1tYXgtYW5nbGVcIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sW1widGV4dC1tYXgtYW5nbGVcIl0pLFwidGV4dC1yb3RhdGVcIjpuZXcganIoSS5sYXlvdXRfc3ltYm9sW1widGV4dC1yb3RhdGVcIl0pLFwidGV4dC1wYWRkaW5nXCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFtcInRleHQtcGFkZGluZ1wiXSksXCJ0ZXh0LWtlZXAtdXByaWdodFwiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LWtlZXAtdXByaWdodFwiXSksXCJ0ZXh0LXRyYW5zZm9ybVwiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LXRyYW5zZm9ybVwiXSksXCJ0ZXh0LW9mZnNldFwiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LW9mZnNldFwiXSksXCJ0ZXh0LWFsbG93LW92ZXJsYXBcIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sW1widGV4dC1hbGxvdy1vdmVybGFwXCJdKSxcInRleHQtaWdub3JlLXBsYWNlbWVudFwiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnRcIl0pLFwidGV4dC1vcHRpb25hbFwiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LW9wdGlvbmFsXCJdKX0pLFlhPXtwYWludDpuZXcgcXIoe1wiaWNvbi1vcGFjaXR5XCI6bmV3IGpyKEkucGFpbnRfc3ltYm9sW1wiaWNvbi1vcGFjaXR5XCJdKSxcImljb24tY29sb3JcIjpuZXcganIoSS5wYWludF9zeW1ib2xbXCJpY29uLWNvbG9yXCJdKSxcImljb24taGFsby1jb2xvclwiOm5ldyBqcihJLnBhaW50X3N5bWJvbFtcImljb24taGFsby1jb2xvclwiXSksXCJpY29uLWhhbG8td2lkdGhcIjpuZXcganIoSS5wYWludF9zeW1ib2xbXCJpY29uLWhhbG8td2lkdGhcIl0pLFwiaWNvbi1oYWxvLWJsdXJcIjpuZXcganIoSS5wYWludF9zeW1ib2xbXCJpY29uLWhhbG8tYmx1clwiXSksXCJpY29uLXRyYW5zbGF0ZVwiOm5ldyBOcihJLnBhaW50X3N5bWJvbFtcImljb24tdHJhbnNsYXRlXCJdKSxcImljb24tdHJhbnNsYXRlLWFuY2hvclwiOm5ldyBOcihJLnBhaW50X3N5bWJvbFtcImljb24tdHJhbnNsYXRlLWFuY2hvclwiXSksXCJ0ZXh0LW9wYWNpdHlcIjpuZXcganIoSS5wYWludF9zeW1ib2xbXCJ0ZXh0LW9wYWNpdHlcIl0pLFwidGV4dC1jb2xvclwiOm5ldyBqcihJLnBhaW50X3N5bWJvbFtcInRleHQtY29sb3JcIl0pLFwidGV4dC1oYWxvLWNvbG9yXCI6bmV3IGpyKEkucGFpbnRfc3ltYm9sW1widGV4dC1oYWxvLWNvbG9yXCJdKSxcInRleHQtaGFsby13aWR0aFwiOm5ldyBqcihJLnBhaW50X3N5bWJvbFtcInRleHQtaGFsby13aWR0aFwiXSksXCJ0ZXh0LWhhbG8tYmx1clwiOm5ldyBqcihJLnBhaW50X3N5bWJvbFtcInRleHQtaGFsby1ibHVyXCJdKSxcInRleHQtdHJhbnNsYXRlXCI6bmV3IE5yKEkucGFpbnRfc3ltYm9sW1widGV4dC10cmFuc2xhdGVcIl0pLFwidGV4dC10cmFuc2xhdGUtYW5jaG9yXCI6bmV3IE5yKEkucGFpbnRfc3ltYm9sW1widGV4dC10cmFuc2xhdGUtYW5jaG9yXCJdKX0pLGxheW91dDpHYX0sV2E9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLFlhKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucmVjYWxjdWxhdGU9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUucmVjYWxjdWxhdGUuY2FsbCh0aGlzLGUpLFwiYXV0b1wiPT09dGhpcy5sYXlvdXQuZ2V0KFwiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnRcIikmJihcImxpbmVcIj09PXRoaXMubGF5b3V0LmdldChcInN5bWJvbC1wbGFjZW1lbnRcIik/dGhpcy5sYXlvdXQuX3ZhbHVlc1tcImljb24tcm90YXRpb24tYWxpZ25tZW50XCJdPVwibWFwXCI6dGhpcy5sYXlvdXQuX3ZhbHVlc1tcImljb24tcm90YXRpb24tYWxpZ25tZW50XCJdPVwidmlld3BvcnRcIiksXCJhdXRvXCI9PT10aGlzLmxheW91dC5nZXQoXCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudFwiKSYmKFwibGluZVwiPT09dGhpcy5sYXlvdXQuZ2V0KFwic3ltYm9sLXBsYWNlbWVudFwiKT90aGlzLmxheW91dC5fdmFsdWVzW1widGV4dC1yb3RhdGlvbi1hbGlnbm1lbnRcIl09XCJtYXBcIjp0aGlzLmxheW91dC5fdmFsdWVzW1widGV4dC1yb3RhdGlvbi1hbGlnbm1lbnRcIl09XCJ2aWV3cG9ydFwiKSxcImF1dG9cIj09PXRoaXMubGF5b3V0LmdldChcInRleHQtcGl0Y2gtYWxpZ25tZW50XCIpJiYodGhpcy5sYXlvdXQuX3ZhbHVlc1tcInRleHQtcGl0Y2gtYWxpZ25tZW50XCJdPXRoaXMubGF5b3V0LmdldChcInRleHQtcm90YXRpb24tYWxpZ25tZW50XCIpKSxcImF1dG9cIj09PXRoaXMubGF5b3V0LmdldChcImljb24tcGl0Y2gtYWxpZ25tZW50XCIpJiYodGhpcy5sYXlvdXQuX3ZhbHVlc1tcImljb24tcGl0Y2gtYWxpZ25tZW50XCJdPXRoaXMubGF5b3V0LmdldChcImljb24tcm90YXRpb24tYWxpZ25tZW50XCIpKX0sZS5wcm90b3R5cGUuZ2V0VmFsdWVBbmRSZXNvbHZlVG9rZW5zPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10aGlzLmxheW91dC5nZXQodCkuZXZhbHVhdGUoZSksaT10aGlzLl91bmV2YWx1YXRlZExheW91dC5fdmFsdWVzW3RdO3JldHVybiBpLmlzRGF0YURyaXZlbigpfHxfZShpLnZhbHVlKT9uOihyPWUucHJvcGVydGllcyxuLnJlcGxhY2UoL3soW157fV0rKX0vZyxmdW5jdGlvbih0LGUpe3JldHVybiBlIGluIHI/U3RyaW5nKHJbZV0pOlwiXCJ9KSl9LGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEhhKHQpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbigpe3JldHVybiAwfSxlLnByb3RvdHlwZS5xdWVyeUludGVyc2VjdHNGZWF0dXJlPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGV9KEhyKSxYYT17cGFpbnQ6bmV3IHFyKHtcImJhY2tncm91bmQtY29sb3JcIjpuZXcgTnIoSS5wYWludF9iYWNrZ3JvdW5kW1wiYmFja2dyb3VuZC1jb2xvclwiXSksXCJiYWNrZ3JvdW5kLXBhdHRlcm5cIjpuZXcgVnIoSS5wYWludF9iYWNrZ3JvdW5kW1wiYmFja2dyb3VuZC1wYXR0ZXJuXCJdKSxcImJhY2tncm91bmQtb3BhY2l0eVwiOm5ldyBOcihJLnBhaW50X2JhY2tncm91bmRbXCJiYWNrZ3JvdW5kLW9wYWNpdHlcIl0pfSl9LFphPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxYYSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGV9KEhyKSwkYT17cGFpbnQ6bmV3IHFyKHtcInJhc3Rlci1vcGFjaXR5XCI6bmV3IE5yKEkucGFpbnRfcmFzdGVyW1wicmFzdGVyLW9wYWNpdHlcIl0pLFwicmFzdGVyLWh1ZS1yb3RhdGVcIjpuZXcgTnIoSS5wYWludF9yYXN0ZXJbXCJyYXN0ZXItaHVlLXJvdGF0ZVwiXSksXCJyYXN0ZXItYnJpZ2h0bmVzcy1taW5cIjpuZXcgTnIoSS5wYWludF9yYXN0ZXJbXCJyYXN0ZXItYnJpZ2h0bmVzcy1taW5cIl0pLFwicmFzdGVyLWJyaWdodG5lc3MtbWF4XCI6bmV3IE5yKEkucGFpbnRfcmFzdGVyW1wicmFzdGVyLWJyaWdodG5lc3MtbWF4XCJdKSxcInJhc3Rlci1zYXR1cmF0aW9uXCI6bmV3IE5yKEkucGFpbnRfcmFzdGVyW1wicmFzdGVyLXNhdHVyYXRpb25cIl0pLFwicmFzdGVyLWNvbnRyYXN0XCI6bmV3IE5yKEkucGFpbnRfcmFzdGVyW1wicmFzdGVyLWNvbnRyYXN0XCJdKSxcInJhc3Rlci1mYWRlLWR1cmF0aW9uXCI6bmV3IE5yKEkucGFpbnRfcmFzdGVyW1wicmFzdGVyLWZhZGUtZHVyYXRpb25cIl0pfSl9LEphPXtjaXJjbGU6bmksaGVhdG1hcDpwaSxoaWxsc2hhZGU6Z2ksZmlsbDpKaSxcImZpbGwtZXh0cnVzaW9uXCI6YWEsbGluZTpTYSxzeW1ib2w6V2EsYmFja2dyb3VuZDpaYSxyYXN0ZXI6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLCRhKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZX0oSHIpfSxLYT1pKGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUscil7cj1yfHx7fSx0aGlzLnc9dHx8NjQsdGhpcy5oPWV8fDY0LHRoaXMuYXV0b1Jlc2l6ZT0hIXIuYXV0b1Jlc2l6ZSx0aGlzLnNoZWx2ZXM9W10sdGhpcy5mcmVlYmlucz1bXSx0aGlzLnN0YXRzPXt9LHRoaXMuYmlucz17fSx0aGlzLm1heElkPTB9ZnVuY3Rpb24gZSh0LGUscil7dGhpcy54PTAsdGhpcy55PXQsdGhpcy53PXRoaXMuZnJlZT1lLHRoaXMuaD1yfXJldHVybiB0LnByb3RvdHlwZS5wYWNrPWZ1bmN0aW9uKHQsZSl7dD1bXS5jb25jYXQodCksZT1lfHx7fTtmb3IodmFyIHIsbixpLGEsbz1bXSxzPTA7czx0Lmxlbmd0aDtzKyspaWYocj10W3NdLnd8fHRbc10ud2lkdGgsbj10W3NdLmh8fHRbc10uaGVpZ2h0LGk9dFtzXS5pZCxyJiZuKXtpZighKGE9dGhpcy5wYWNrT25lKHIsbixpKSkpY29udGludWU7ZS5pblBsYWNlJiYodFtzXS54PWEueCx0W3NdLnk9YS55LHRbc10uaWQ9YS5pZCksby5wdXNoKGEpfXJldHVybiB0aGlzLnNocmluaygpLG99LHQucHJvdG90eXBlLnBhY2tPbmU9ZnVuY3Rpb24odCxyLG4pe3ZhciBpLGEsbyxzLGwsYyx1LGgsZj17ZnJlZWJpbjotMSxzaGVsZjotMSx3YXN0ZToxLzB9LHA9MDtpZihcInN0cmluZ1wiPT10eXBlb2Ygbnx8XCJudW1iZXJcIj09dHlwZW9mIG4pe2lmKGk9dGhpcy5nZXRCaW4obikpcmV0dXJuIHRoaXMucmVmKGkpLGk7XCJudW1iZXJcIj09dHlwZW9mIG4mJih0aGlzLm1heElkPU1hdGgubWF4KG4sdGhpcy5tYXhJZCkpfWVsc2Ugbj0rK3RoaXMubWF4SWQ7Zm9yKHM9MDtzPHRoaXMuZnJlZWJpbnMubGVuZ3RoO3MrKyl7aWYocj09PShpPXRoaXMuZnJlZWJpbnNbc10pLm1heGgmJnQ9PT1pLm1heHcpcmV0dXJuIHRoaXMuYWxsb2NGcmVlYmluKHMsdCxyLG4pO3I+aS5tYXhofHx0PmkubWF4d3x8cjw9aS5tYXhoJiZ0PD1pLm1heHcmJihvPWkubWF4dyppLm1heGgtdCpyKTxmLndhc3RlJiYoZi53YXN0ZT1vLGYuZnJlZWJpbj1zKX1mb3Iocz0wO3M8dGhpcy5zaGVsdmVzLmxlbmd0aDtzKyspaWYocCs9KGE9dGhpcy5zaGVsdmVzW3NdKS5oLCEodD5hLmZyZWUpKXtpZihyPT09YS5oKXJldHVybiB0aGlzLmFsbG9jU2hlbGYocyx0LHIsbik7cj5hLmh8fHI8YS5oJiYobz0oYS5oLXIpKnQpPGYud2FzdGUmJihmLmZyZWViaW49LTEsZi53YXN0ZT1vLGYuc2hlbGY9cyl9cmV0dXJuLTEhPT1mLmZyZWViaW4/dGhpcy5hbGxvY0ZyZWViaW4oZi5mcmVlYmluLHQscixuKTotMSE9PWYuc2hlbGY/dGhpcy5hbGxvY1NoZWxmKGYuc2hlbGYsdCxyLG4pOnI8PXRoaXMuaC1wJiZ0PD10aGlzLnc/KGE9bmV3IGUocCx0aGlzLncsciksdGhpcy5hbGxvY1NoZWxmKHRoaXMuc2hlbHZlcy5wdXNoKGEpLTEsdCxyLG4pKTp0aGlzLmF1dG9SZXNpemU/KGw9Yz10aGlzLmgsKCh1PWg9dGhpcy53KTw9bHx8dD51KSYmKGg9MipNYXRoLm1heCh0LHUpKSwobDx1fHxyPmwpJiYoYz0yKk1hdGgubWF4KHIsbCkpLHRoaXMucmVzaXplKGgsYyksdGhpcy5wYWNrT25lKHQscixuKSk6bnVsbH0sdC5wcm90b3R5cGUuYWxsb2NGcmVlYmluPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuZnJlZWJpbnMuc3BsaWNlKHQsMSlbMF07cmV0dXJuIGkuaWQ9bixpLnc9ZSxpLmg9cixpLnJlZmNvdW50PTAsdGhpcy5iaW5zW25dPWksdGhpcy5yZWYoaSksaX0sdC5wcm90b3R5cGUuYWxsb2NTaGVsZj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLnNoZWx2ZXNbdF0uYWxsb2MoZSxyLG4pO3JldHVybiB0aGlzLmJpbnNbbl09aSx0aGlzLnJlZihpKSxpfSx0LnByb3RvdHlwZS5zaHJpbms9ZnVuY3Rpb24oKXtpZih0aGlzLnNoZWx2ZXMubGVuZ3RoPjApe2Zvcih2YXIgdD0wLGU9MCxyPTA7cjx0aGlzLnNoZWx2ZXMubGVuZ3RoO3IrKyl7dmFyIG49dGhpcy5zaGVsdmVzW3JdO2UrPW4uaCx0PU1hdGgubWF4KG4udy1uLmZyZWUsdCl9dGhpcy5yZXNpemUodCxlKX19LHQucHJvdG90eXBlLmdldEJpbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5iaW5zW3RdfSx0LnByb3RvdHlwZS5yZWY9ZnVuY3Rpb24odCl7aWYoMT09Kyt0LnJlZmNvdW50KXt2YXIgZT10Lmg7dGhpcy5zdGF0c1tlXT0xKygwfHRoaXMuc3RhdHNbZV0pfXJldHVybiB0LnJlZmNvdW50fSx0LnByb3RvdHlwZS51bnJlZj1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXQucmVmY291bnQ/MDooMD09LS10LnJlZmNvdW50JiYodGhpcy5zdGF0c1t0LmhdLS0sZGVsZXRlIHRoaXMuYmluc1t0LmlkXSx0aGlzLmZyZWViaW5zLnB1c2godCkpLHQucmVmY291bnQpfSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2hlbHZlcz1bXSx0aGlzLmZyZWViaW5zPVtdLHRoaXMuc3RhdHM9e30sdGhpcy5iaW5zPXt9LHRoaXMubWF4SWQ9MH0sdC5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQsZSl7dGhpcy53PXQsdGhpcy5oPWU7Zm9yKHZhciByPTA7cjx0aGlzLnNoZWx2ZXMubGVuZ3RoO3IrKyl0aGlzLnNoZWx2ZXNbcl0ucmVzaXplKHQpO3JldHVybiEwfSxlLnByb3RvdHlwZS5hbGxvYz1mdW5jdGlvbih0LGUscil7aWYodD50aGlzLmZyZWV8fGU+dGhpcy5oKXJldHVybiBudWxsO3ZhciBuPXRoaXMueDtyZXR1cm4gdGhpcy54Kz10LHRoaXMuZnJlZS09dCxuZXcgZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dGhpcy5pZD10LHRoaXMueD1lLHRoaXMueT1yLHRoaXMudz1uLHRoaXMuaD1pLHRoaXMubWF4dz1hfHxuLHRoaXMubWF4aD1vfHxpLHRoaXMucmVmY291bnQ9MH0ocixuLHRoaXMueSx0LGUsdCx0aGlzLmgpfSxlLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZnJlZSs9dC10aGlzLncsdGhpcy53PXQsITB9LHR9KCl9KSxRYT1mdW5jdGlvbih0LGUpe3ZhciByPWUucGl4ZWxSYXRpbzt0aGlzLnBhZGRlZFJlY3Q9dCx0aGlzLnBpeGVsUmF0aW89cn0sdG89e3RsOntjb25maWd1cmFibGU6ITB9LGJyOntjb25maWd1cmFibGU6ITB9LGRpc3BsYXlTaXplOntjb25maWd1cmFibGU6ITB9fTt0by50bC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5wYWRkZWRSZWN0LngrMSx0aGlzLnBhZGRlZFJlY3QueSsxXX0sdG8uYnIuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMucGFkZGVkUmVjdC54K3RoaXMucGFkZGVkUmVjdC53LTEsdGhpcy5wYWRkZWRSZWN0LnkrdGhpcy5wYWRkZWRSZWN0LmgtMV19LHRvLmRpc3BsYXlTaXplLmdldD1mdW5jdGlvbigpe3JldHVyblsodGhpcy5wYWRkZWRSZWN0LnctMikvdGhpcy5waXhlbFJhdGlvLCh0aGlzLnBhZGRlZFJlY3QuaC0yKS90aGlzLnBpeGVsUmF0aW9dfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhRYS5wcm90b3R5cGUsdG8pO3ZhciBlbz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgdWkoe3dpZHRoOjAsaGVpZ2h0OjB9KSxyPXt9LG49bmV3IEthKDAsMCx7YXV0b1Jlc2l6ZTohMH0pO2Zvcih2YXIgaSBpbiB0KXt2YXIgYT10W2ldLG89bi5wYWNrT25lKGEuZGF0YS53aWR0aCsyLGEuZGF0YS5oZWlnaHQrMik7ZS5yZXNpemUoe3dpZHRoOm4udyxoZWlnaHQ6bi5ofSksdWkuY29weShhLmRhdGEsZSx7eDowLHk6MH0se3g6by54KzEseTpvLnkrMX0sYS5kYXRhKSxyW2ldPW5ldyBRYShvLGEpfW4uc2hyaW5rKCksZS5yZXNpemUoe3dpZHRoOm4udyxoZWlnaHQ6bi5ofSksdGhpcy5pbWFnZT1lLHRoaXMucG9zaXRpb25zPXJ9O3ByKFwiSW1hZ2VQb3NpdGlvblwiLFFhKSxwcihcIkltYWdlQXRsYXNcIixlbyk7dmFyIHJvPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbyxzPTgqaS1uLTEsbD0oMTw8cyktMSxjPWw+PjEsdT0tNyxoPXI/aS0xOjAsZj1yPy0xOjEscD10W2UraF07Zm9yKGgrPWYsYT1wJigxPDwtdSktMSxwPj49LXUsdSs9czt1PjA7YT0yNTYqYSt0W2UraF0saCs9Zix1LT04KTtmb3Iobz1hJigxPDwtdSktMSxhPj49LXUsdSs9bjt1PjA7bz0yNTYqbyt0W2UraF0saCs9Zix1LT04KTtpZigwPT09YSlhPTEtYztlbHNle2lmKGE9PT1sKXJldHVybiBvP05hTjoxLzAqKHA/LTE6MSk7bys9TWF0aC5wb3coMixuKSxhLT1jfXJldHVybihwPy0xOjEpKm8qTWF0aC5wb3coMixhLW4pfSxubz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8scyxsLGM9OCphLWktMSx1PSgxPDxjKS0xLGg9dT4+MSxmPTIzPT09aT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAscD1uPzA6YS0xLGQ9bj8xOi0xLGc9ZTwwfHwwPT09ZSYmMS9lPDA/MTowO2ZvcihlPU1hdGguYWJzKGUpLGlzTmFOKGUpfHxlPT09MS8wPyhzPWlzTmFOKGUpPzE6MCxvPXUpOihvPU1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjIpLGUqKGw9TWF0aC5wb3coMiwtbykpPDEmJihvLS0sbCo9MiksKGUrPW8raD49MT9mL2w6ZipNYXRoLnBvdygyLDEtaCkpKmw+PTImJihvKyssbC89MiksbytoPj11PyhzPTAsbz11KTpvK2g+PTE/KHM9KGUqbC0xKSpNYXRoLnBvdygyLGkpLG8rPWgpOihzPWUqTWF0aC5wb3coMixoLTEpKk1hdGgucG93KDIsaSksbz0wKSk7aT49ODt0W3IrcF09MjU1JnMscCs9ZCxzLz0yNTYsaS09OCk7Zm9yKG89bzw8aXxzLGMrPWk7Yz4wO3RbcitwXT0yNTUmbyxwKz1kLG8vPTI1NixjLT04KTt0W3IrcC1kXXw9MTI4Kmd9LGlvPWFvO2Z1bmN0aW9uIGFvKHQpe3RoaXMuYnVmPUFycmF5QnVmZmVyLmlzVmlldyYmQXJyYXlCdWZmZXIuaXNWaWV3KHQpP3Q6bmV3IFVpbnQ4QXJyYXkodHx8MCksdGhpcy5wb3M9MCx0aGlzLnR5cGU9MCx0aGlzLmxlbmd0aD10aGlzLmJ1Zi5sZW5ndGh9ZnVuY3Rpb24gb28odCl7cmV0dXJuIHQudHlwZT09PWFvLkJ5dGVzP3QucmVhZFZhcmludCgpK3QucG9zOnQucG9zKzF9ZnVuY3Rpb24gc28odCxlLHIpe3JldHVybiByPzQyOTQ5NjcyOTYqZSsodD4+PjApOjQyOTQ5NjcyOTYqKGU+Pj4wKSsodD4+PjApfWZ1bmN0aW9uIGxvKHQsZSxyKXt2YXIgbj1lPD0xNjM4Mz8xOmU8PTIwOTcxNTE/MjplPD0yNjg0MzU0NTU/MzpNYXRoLmNlaWwoTWF0aC5sb2coZSkvKDcqTWF0aC5MTjIpKTtyLnJlYWxsb2Mobik7Zm9yKHZhciBpPXIucG9zLTE7aT49dDtpLS0pci5idWZbaStuXT1yLmJ1ZltpXX1mdW5jdGlvbiBjbyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVWYXJpbnQodFtyXSl9ZnVuY3Rpb24gdW8odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlU1ZhcmludCh0W3JdKX1mdW5jdGlvbiBobyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVGbG9hdCh0W3JdKX1mdW5jdGlvbiBmbyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVEb3VibGUodFtyXSl9ZnVuY3Rpb24gcG8odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlQm9vbGVhbih0W3JdKX1mdW5jdGlvbiBnbyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVGaXhlZDMyKHRbcl0pfWZ1bmN0aW9uIHZvKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZVNGaXhlZDMyKHRbcl0pfWZ1bmN0aW9uIG1vKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZUZpeGVkNjQodFtyXSl9ZnVuY3Rpb24geW8odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlU0ZpeGVkNjQodFtyXSl9ZnVuY3Rpb24geG8odCxlKXtyZXR1cm4odFtlXXx0W2UrMV08PDh8dFtlKzJdPDwxNikrMTY3NzcyMTYqdFtlKzNdfWZ1bmN0aW9uIGJvKHQsZSxyKXt0W3JdPWUsdFtyKzFdPWU+Pj44LHRbcisyXT1lPj4+MTYsdFtyKzNdPWU+Pj4yNH1mdW5jdGlvbiBfbyh0LGUpe3JldHVybih0W2VdfHRbZSsxXTw8OHx0W2UrMl08PDE2KSsodFtlKzNdPDwyNCl9YW8uVmFyaW50PTAsYW8uRml4ZWQ2ND0xLGFvLkJ5dGVzPTIsYW8uRml4ZWQzMj01LGFvLnByb3RvdHlwZT17ZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuYnVmPW51bGx9LHJlYWRGaWVsZHM6ZnVuY3Rpb24odCxlLHIpe2ZvcihyPXJ8fHRoaXMubGVuZ3RoO3RoaXMucG9zPHI7KXt2YXIgbj10aGlzLnJlYWRWYXJpbnQoKSxpPW4+PjMsYT10aGlzLnBvczt0aGlzLnR5cGU9NyZuLHQoaSxlLHRoaXMpLHRoaXMucG9zPT09YSYmdGhpcy5za2lwKG4pfXJldHVybiBlfSxyZWFkTWVzc2FnZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnJlYWRGaWVsZHModCxlLHRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zKX0scmVhZEZpeGVkMzI6ZnVuY3Rpb24oKXt2YXIgdD14byh0aGlzLmJ1Zix0aGlzLnBvcyk7cmV0dXJuIHRoaXMucG9zKz00LHR9LHJlYWRTRml4ZWQzMjpmdW5jdGlvbigpe3ZhciB0PV9vKHRoaXMuYnVmLHRoaXMucG9zKTtyZXR1cm4gdGhpcy5wb3MrPTQsdH0scmVhZEZpeGVkNjQ6ZnVuY3Rpb24oKXt2YXIgdD14byh0aGlzLmJ1Zix0aGlzLnBvcykrNDI5NDk2NzI5Nip4byh0aGlzLmJ1Zix0aGlzLnBvcys0KTtyZXR1cm4gdGhpcy5wb3MrPTgsdH0scmVhZFNGaXhlZDY0OmZ1bmN0aW9uKCl7dmFyIHQ9eG8odGhpcy5idWYsdGhpcy5wb3MpKzQyOTQ5NjcyOTYqX28odGhpcy5idWYsdGhpcy5wb3MrNCk7cmV0dXJuIHRoaXMucG9zKz04LHR9LHJlYWRGbG9hdDpmdW5jdGlvbigpe3ZhciB0PXJvKHRoaXMuYnVmLHRoaXMucG9zLCEwLDIzLDQpO3JldHVybiB0aGlzLnBvcys9NCx0fSxyZWFkRG91YmxlOmZ1bmN0aW9uKCl7dmFyIHQ9cm8odGhpcy5idWYsdGhpcy5wb3MsITAsNTIsOCk7cmV0dXJuIHRoaXMucG9zKz04LHR9LHJlYWRWYXJpbnQ6ZnVuY3Rpb24odCl7dmFyIGUscixuPXRoaXMuYnVmO3JldHVybiBlPTEyNyYocj1uW3RoaXMucG9zKytdKSxyPDEyOD9lOihlfD0oMTI3JihyPW5bdGhpcy5wb3MrK10pKTw8NyxyPDEyOD9lOihlfD0oMTI3JihyPW5bdGhpcy5wb3MrK10pKTw8MTQscjwxMjg/ZTooZXw9KDEyNyYocj1uW3RoaXMucG9zKytdKSk8PDIxLHI8MTI4P2U6ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1yLmJ1ZjtpZihuPSgxMTImKGk9YVtyLnBvcysrXSkpPj40LGk8MTI4KXJldHVybiBzbyh0LG4sZSk7aWYobnw9KDEyNyYoaT1hW3IucG9zKytdKSk8PDMsaTwxMjgpcmV0dXJuIHNvKHQsbixlKTtpZihufD0oMTI3JihpPWFbci5wb3MrK10pKTw8MTAsaTwxMjgpcmV0dXJuIHNvKHQsbixlKTtpZihufD0oMTI3JihpPWFbci5wb3MrK10pKTw8MTcsaTwxMjgpcmV0dXJuIHNvKHQsbixlKTtpZihufD0oMTI3JihpPWFbci5wb3MrK10pKTw8MjQsaTwxMjgpcmV0dXJuIHNvKHQsbixlKTtpZihufD0oMSYoaT1hW3IucG9zKytdKSk8PDMxLGk8MTI4KXJldHVybiBzbyh0LG4sZSk7dGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgdmFyaW50IG5vdCBtb3JlIHRoYW4gMTAgYnl0ZXNcIil9KGV8PSgxNSYocj1uW3RoaXMucG9zXSkpPDwyOCx0LHRoaXMpKSkpfSxyZWFkVmFyaW50NjQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkVmFyaW50KCEwKX0scmVhZFNWYXJpbnQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJlYWRWYXJpbnQoKTtyZXR1cm4gdCUyPT0xPyh0KzEpLy0yOnQvMn0scmVhZEJvb2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbih0aGlzLnJlYWRWYXJpbnQoKSl9LHJlYWRTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcyxlPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49XCJcIixpPWU7aTxyOyl7dmFyIGEsbyxzLGw9dFtpXSxjPW51bGwsdT1sPjIzOT80Omw+MjIzPzM6bD4xOTE/MjoxO2lmKGkrdT5yKWJyZWFrOzE9PT11P2w8MTI4JiYoYz1sKToyPT09dT8xMjg9PSgxOTImKGE9dFtpKzFdKSkmJihjPSgzMSZsKTw8Nnw2MyZhKTw9MTI3JiYoYz1udWxsKTozPT09dT8oYT10W2krMV0sbz10W2krMl0sMTI4PT0oMTkyJmEpJiYxMjg9PSgxOTImbykmJigoYz0oMTUmbCk8PDEyfCg2MyZhKTw8Nnw2MyZvKTw9MjA0N3x8Yz49NTUyOTYmJmM8PTU3MzQzKSYmKGM9bnVsbCkpOjQ9PT11JiYoYT10W2krMV0sbz10W2krMl0scz10W2krM10sMTI4PT0oMTkyJmEpJiYxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmKChjPSgxNSZsKTw8MTh8KDYzJmEpPDwxMnwoNjMmbyk8PDZ8NjMmcyk8PTY1NTM1fHxjPj0xMTE0MTEyKSYmKGM9bnVsbCkpLG51bGw9PT1jPyhjPTY1NTMzLHU9MSk6Yz42NTUzNSYmKGMtPTY1NTM2LG4rPVN0cmluZy5mcm9tQ2hhckNvZGUoYz4+PjEwJjEwMjN8NTUyOTYpLGM9NTYzMjB8MTAyMyZjKSxuKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGMpLGkrPXV9cmV0dXJuIG59KHRoaXMuYnVmLHRoaXMucG9zLHQpO3JldHVybiB0aGlzLnBvcz10LGV9LHJlYWRCeXRlczpmdW5jdGlvbigpe3ZhciB0PXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zLGU9dGhpcy5idWYuc3ViYXJyYXkodGhpcy5wb3MsdCk7cmV0dXJuIHRoaXMucG9zPXQsZX0scmVhZFBhY2tlZFZhcmludDpmdW5jdGlvbih0LGUpe3ZhciByPW9vKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPHI7KXQucHVzaCh0aGlzLnJlYWRWYXJpbnQoZSkpO3JldHVybiB0fSxyZWFkUGFja2VkU1ZhcmludDpmdW5jdGlvbih0KXt2YXIgZT1vbyh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkU1ZhcmludCgpKTtyZXR1cm4gdH0scmVhZFBhY2tlZEJvb2xlYW46ZnVuY3Rpb24odCl7dmFyIGU9b28odGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEJvb2xlYW4oKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRGbG9hdDpmdW5jdGlvbih0KXt2YXIgZT1vbyh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkRmxvYXQoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWREb3VibGU6ZnVuY3Rpb24odCl7dmFyIGU9b28odGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZERvdWJsZSgpKTtyZXR1cm4gdH0scmVhZFBhY2tlZEZpeGVkMzI6ZnVuY3Rpb24odCl7dmFyIGU9b28odGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEZpeGVkMzIoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRTRml4ZWQzMjpmdW5jdGlvbih0KXt2YXIgZT1vbyh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkU0ZpeGVkMzIoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRGaXhlZDY0OmZ1bmN0aW9uKHQpe3ZhciBlPW9vKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRGaXhlZDY0KCkpO3JldHVybiB0fSxyZWFkUGFja2VkU0ZpeGVkNjQ6ZnVuY3Rpb24odCl7dmFyIGU9b28odGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZFNGaXhlZDY0KCkpO3JldHVybiB0fSxza2lwOmZ1bmN0aW9uKHQpe3ZhciBlPTcmdDtpZihlPT09YW8uVmFyaW50KWZvcig7dGhpcy5idWZbdGhpcy5wb3MrK10+MTI3Oyk7ZWxzZSBpZihlPT09YW8uQnl0ZXMpdGhpcy5wb3M9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3M7ZWxzZSBpZihlPT09YW8uRml4ZWQzMil0aGlzLnBvcys9NDtlbHNle2lmKGUhPT1hby5GaXhlZDY0KXRocm93IG5ldyBFcnJvcihcIlVuaW1wbGVtZW50ZWQgdHlwZTogXCIrZSk7dGhpcy5wb3MrPTh9fSx3cml0ZVRhZzpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVWYXJpbnQodDw8M3xlKX0scmVhbGxvYzpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5sZW5ndGh8fDE2O2U8dGhpcy5wb3MrdDspZSo9MjtpZihlIT09dGhpcy5sZW5ndGgpe3ZhciByPW5ldyBVaW50OEFycmF5KGUpO3Iuc2V0KHRoaXMuYnVmKSx0aGlzLmJ1Zj1yLHRoaXMubGVuZ3RoPWV9fSxmaW5pc2g6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGg9dGhpcy5wb3MsdGhpcy5wb3M9MCx0aGlzLmJ1Zi5zdWJhcnJheSgwLHRoaXMubGVuZ3RoKX0sd3JpdGVGaXhlZDMyOmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg0KSxibyh0aGlzLmJ1Zix0LHRoaXMucG9zKSx0aGlzLnBvcys9NH0sd3JpdGVTRml4ZWQzMjpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoNCksYm8odGhpcy5idWYsdCx0aGlzLnBvcyksdGhpcy5wb3MrPTR9LHdyaXRlRml4ZWQ2NDpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoOCksYm8odGhpcy5idWYsLTEmdCx0aGlzLnBvcyksYm8odGhpcy5idWYsTWF0aC5mbG9vcih0KigxLzQyOTQ5NjcyOTYpKSx0aGlzLnBvcys0KSx0aGlzLnBvcys9OH0sd3JpdGVTRml4ZWQ2NDpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoOCksYm8odGhpcy5idWYsLTEmdCx0aGlzLnBvcyksYm8odGhpcy5idWYsTWF0aC5mbG9vcih0KigxLzQyOTQ5NjcyOTYpKSx0aGlzLnBvcys0KSx0aGlzLnBvcys9OH0sd3JpdGVWYXJpbnQ6ZnVuY3Rpb24odCl7KHQ9K3R8fDApPjI2ODQzNTQ1NXx8dDwwP2Z1bmN0aW9uKHQsZSl7dmFyIHIsbjtpZih0Pj0wPyhyPXQlNDI5NDk2NzI5NnwwLG49dC80Mjk0OTY3Mjk2fDApOihuPX4oLXQvNDI5NDk2NzI5NiksNDI5NDk2NzI5NV4ocj1+KC10JTQyOTQ5NjcyOTYpKT9yPXIrMXwwOihyPTAsbj1uKzF8MCkpLHQ+PTB4MTAwMDAwMDAwMDAwMDAwMDB8fHQ8LTB4MTAwMDAwMDAwMDAwMDAwMDApdGhyb3cgbmV3IEVycm9yKFwiR2l2ZW4gdmFyaW50IGRvZXNuJ3QgZml0IGludG8gMTAgYnl0ZXNcIik7ZS5yZWFsbG9jKDEwKSxmdW5jdGlvbih0LGUscil7ci5idWZbci5wb3MrK109MTI3JnR8MTI4LHQ+Pj49NyxyLmJ1ZltyLnBvcysrXT0xMjcmdHwxMjgsdD4+Pj03LHIuYnVmW3IucG9zKytdPTEyNyZ0fDEyOCx0Pj4+PTcsci5idWZbci5wb3MrK109MTI3JnR8MTI4LHQ+Pj49NyxyLmJ1ZltyLnBvc109MTI3JnR9KHIsMCxlKSxmdW5jdGlvbih0LGUpe3ZhciByPSg3JnQpPDw0O2UuYnVmW2UucG9zKytdfD1yfCgodD4+Pj0zKT8xMjg6MCksdCYmKGUuYnVmW2UucG9zKytdPTEyNyZ0fCgodD4+Pj03KT8xMjg6MCksdCYmKGUuYnVmW2UucG9zKytdPTEyNyZ0fCgodD4+Pj03KT8xMjg6MCksdCYmKGUuYnVmW2UucG9zKytdPTEyNyZ0fCgodD4+Pj03KT8xMjg6MCksdCYmKGUuYnVmW2UucG9zKytdPTEyNyZ0fCgodD4+Pj03KT8xMjg6MCksdCYmKGUuYnVmW2UucG9zKytdPTEyNyZ0KSkpKSl9KG4sZSl9KHQsdGhpcyk6KHRoaXMucmVhbGxvYyg0KSx0aGlzLmJ1Zlt0aGlzLnBvcysrXT0xMjcmdHwodD4xMjc/MTI4OjApLHQ8PTEyN3x8KHRoaXMuYnVmW3RoaXMucG9zKytdPTEyNyYodD4+Pj03KXwodD4xMjc/MTI4OjApLHQ8PTEyN3x8KHRoaXMuYnVmW3RoaXMucG9zKytdPTEyNyYodD4+Pj03KXwodD4xMjc/MTI4OjApLHQ8PTEyN3x8KHRoaXMuYnVmW3RoaXMucG9zKytdPXQ+Pj43JjEyNykpKSl9LHdyaXRlU1ZhcmludDpmdW5jdGlvbih0KXt0aGlzLndyaXRlVmFyaW50KHQ8MD8yKi10LTE6Mip0KX0sd3JpdGVCb29sZWFuOmZ1bmN0aW9uKHQpe3RoaXMud3JpdGVWYXJpbnQoQm9vbGVhbih0KSl9LHdyaXRlU3RyaW5nOmZ1bmN0aW9uKHQpe3Q9U3RyaW5nKHQpLHRoaXMucmVhbGxvYyg0KnQubGVuZ3RoKSx0aGlzLnBvcysrO3ZhciBlPXRoaXMucG9zO3RoaXMucG9zPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saSxhPTA7YTxlLmxlbmd0aDthKyspe2lmKChuPWUuY2hhckNvZGVBdChhKSk+NTUyOTUmJm48NTczNDQpe2lmKCFpKXtuPjU2MzE5fHxhKzE9PT1lLmxlbmd0aD8odFtyKytdPTIzOSx0W3IrK109MTkxLHRbcisrXT0xODkpOmk9bjtjb250aW51ZX1pZihuPDU2MzIwKXt0W3IrK109MjM5LHRbcisrXT0xOTEsdFtyKytdPTE4OSxpPW47Y29udGludWV9bj1pLTU1Mjk2PDwxMHxuLTU2MzIwfDY1NTM2LGk9bnVsbH1lbHNlIGkmJih0W3IrK109MjM5LHRbcisrXT0xOTEsdFtyKytdPTE4OSxpPW51bGwpO248MTI4P3RbcisrXT1uOihuPDIwNDg/dFtyKytdPW4+PjZ8MTkyOihuPDY1NTM2P3RbcisrXT1uPj4xMnwyMjQ6KHRbcisrXT1uPj4xOHwyNDAsdFtyKytdPW4+PjEyJjYzfDEyOCksdFtyKytdPW4+PjYmNjN8MTI4KSx0W3IrK109NjMmbnwxMjgpfXJldHVybiByfSh0aGlzLmJ1Zix0LHRoaXMucG9zKTt2YXIgcj10aGlzLnBvcy1lO3I+PTEyOCYmbG8oZSxyLHRoaXMpLHRoaXMucG9zPWUtMSx0aGlzLndyaXRlVmFyaW50KHIpLHRoaXMucG9zKz1yfSx3cml0ZUZsb2F0OmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg0KSxubyh0aGlzLmJ1Zix0LHRoaXMucG9zLCEwLDIzLDQpLHRoaXMucG9zKz00fSx3cml0ZURvdWJsZTpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoOCksbm8odGhpcy5idWYsdCx0aGlzLnBvcywhMCw1Miw4KSx0aGlzLnBvcys9OH0sd3JpdGVCeXRlczpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDt0aGlzLndyaXRlVmFyaW50KGUpLHRoaXMucmVhbGxvYyhlKTtmb3IodmFyIHI9MDtyPGU7cisrKXRoaXMuYnVmW3RoaXMucG9zKytdPXRbcl19LHdyaXRlUmF3TWVzc2FnZTpmdW5jdGlvbih0LGUpe3RoaXMucG9zKys7dmFyIHI9dGhpcy5wb3M7dChlLHRoaXMpO3ZhciBuPXRoaXMucG9zLXI7bj49MTI4JiZsbyhyLG4sdGhpcyksdGhpcy5wb3M9ci0xLHRoaXMud3JpdGVWYXJpbnQobiksdGhpcy5wb3MrPW59LHdyaXRlTWVzc2FnZTpmdW5jdGlvbih0LGUscil7dGhpcy53cml0ZVRhZyh0LGFvLkJ5dGVzKSx0aGlzLndyaXRlUmF3TWVzc2FnZShlLHIpfSx3cml0ZVBhY2tlZFZhcmludDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQsY28sZSl9LHdyaXRlUGFja2VkU1ZhcmludDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQsdW8sZSl9LHdyaXRlUGFja2VkQm9vbGVhbjpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQscG8sZSl9LHdyaXRlUGFja2VkRmxvYXQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlTWVzc2FnZSh0LGhvLGUpfSx3cml0ZVBhY2tlZERvdWJsZTpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQsZm8sZSl9LHdyaXRlUGFja2VkRml4ZWQzMjpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQsZ28sZSl9LHdyaXRlUGFja2VkU0ZpeGVkMzI6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlTWVzc2FnZSh0LHZvLGUpfSx3cml0ZVBhY2tlZEZpeGVkNjQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlTWVzc2FnZSh0LG1vLGUpfSx3cml0ZVBhY2tlZFNGaXhlZDY0OmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCx5byxlKX0sd3JpdGVCeXRlc0ZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LGFvLkJ5dGVzKSx0aGlzLndyaXRlQnl0ZXMoZSl9LHdyaXRlRml4ZWQzMkZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LGFvLkZpeGVkMzIpLHRoaXMud3JpdGVGaXhlZDMyKGUpfSx3cml0ZVNGaXhlZDMyRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsYW8uRml4ZWQzMiksdGhpcy53cml0ZVNGaXhlZDMyKGUpfSx3cml0ZUZpeGVkNjRGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxhby5GaXhlZDY0KSx0aGlzLndyaXRlRml4ZWQ2NChlKX0sd3JpdGVTRml4ZWQ2NEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LGFvLkZpeGVkNjQpLHRoaXMud3JpdGVTRml4ZWQ2NChlKX0sd3JpdGVWYXJpbnRGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxhby5WYXJpbnQpLHRoaXMud3JpdGVWYXJpbnQoZSl9LHdyaXRlU1ZhcmludEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LGFvLlZhcmludCksdGhpcy53cml0ZVNWYXJpbnQoZSl9LHdyaXRlU3RyaW5nRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsYW8uQnl0ZXMpLHRoaXMud3JpdGVTdHJpbmcoZSl9LHdyaXRlRmxvYXRGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxhby5GaXhlZDMyKSx0aGlzLndyaXRlRmxvYXQoZSl9LHdyaXRlRG91YmxlRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsYW8uRml4ZWQ2NCksdGhpcy53cml0ZURvdWJsZShlKX0sd3JpdGVCb29sZWFuRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVmFyaW50RmllbGQodCxCb29sZWFuKGUpKX19O3ZhciB3bz0zO2Z1bmN0aW9uIGtvKHQsZSxyKXsxPT09dCYmci5yZWFkTWVzc2FnZShBbyxlKX1mdW5jdGlvbiBBbyh0LGUscil7aWYoMz09PXQpe3ZhciBuPXIucmVhZE1lc3NhZ2UoVG8se30pLGk9bi5pZCxhPW4uYml0bWFwLG89bi53aWR0aCxzPW4uaGVpZ2h0LGw9bi5sZWZ0LGM9bi50b3AsdT1uLmFkdmFuY2U7ZS5wdXNoKHtpZDppLGJpdG1hcDpuZXcgY2koe3dpZHRoOm8rMip3byxoZWlnaHQ6cysyKndvfSxhKSxtZXRyaWNzOnt3aWR0aDpvLGhlaWdodDpzLGxlZnQ6bCx0b3A6YyxhZHZhbmNlOnV9fSl9fWZ1bmN0aW9uIFRvKHQsZSxyKXsxPT09dD9lLmlkPXIucmVhZFZhcmludCgpOjI9PT10P2UuYml0bWFwPXIucmVhZEJ5dGVzKCk6Mz09PXQ/ZS53aWR0aD1yLnJlYWRWYXJpbnQoKTo0PT09dD9lLmhlaWdodD1yLnJlYWRWYXJpbnQoKTo1PT09dD9lLmxlZnQ9ci5yZWFkU1ZhcmludCgpOjY9PT10P2UudG9wPXIucmVhZFNWYXJpbnQoKTo3PT09dCYmKGUuYWR2YW5jZT1yLnJlYWRWYXJpbnQoKSl9dmFyIE1vPXdvLFNvPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRhcmdldD10LHRoaXMucGFyZW50PWUsdGhpcy5tYXBJZD1yLHRoaXMuY2FsbGJhY2tzPXt9LHRoaXMuY2FsbGJhY2tJRD0wLGcoW1wicmVjZWl2ZVwiXSx0aGlzKSx0aGlzLnRhcmdldC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLHRoaXMucmVjZWl2ZSwhMSl9O1NvLnByb3RvdHlwZS5zZW5kPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXI/dGhpcy5tYXBJZCtcIjpcIit0aGlzLmNhbGxiYWNrSUQrKzpudWxsO3ImJih0aGlzLmNhbGxiYWNrc1tpXT1yKTt2YXIgYT1bXTt0aGlzLnRhcmdldC5wb3N0TWVzc2FnZSh7dGFyZ2V0TWFwSWQ6bixzb3VyY2VNYXBJZDp0aGlzLm1hcElkLHR5cGU6dCxpZDpTdHJpbmcoaSksZGF0YTpncihlLGEpfSxhKX0sU28ucHJvdG90eXBlLnJlY2VpdmU9ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLG49dC5kYXRhLGk9bi5pZDtpZighbi50YXJnZXRNYXBJZHx8dGhpcy5tYXBJZD09PW4udGFyZ2V0TWFwSWQpe3ZhciBhPWZ1bmN0aW9uKHQsZSl7dmFyIG49W107ci50YXJnZXQucG9zdE1lc3NhZ2Uoe3NvdXJjZU1hcElkOnIubWFwSWQsdHlwZTpcIjxyZXNwb25zZT5cIixpZDpTdHJpbmcoaSksZXJyb3I6dD9ncih0KTpudWxsLGRhdGE6Z3IoZSxuKX0sbil9O2lmKFwiPHJlc3BvbnNlPlwiPT09bi50eXBlKWU9dGhpcy5jYWxsYmFja3Nbbi5pZF0sZGVsZXRlIHRoaXMuY2FsbGJhY2tzW24uaWRdLGUmJm4uZXJyb3I/ZSh2cihuLmVycm9yKSk6ZSYmZShudWxsLHZyKG4uZGF0YSkpO2Vsc2UgaWYodm9pZCAwIT09bi5pZCYmdGhpcy5wYXJlbnRbbi50eXBlXSl0aGlzLnBhcmVudFtuLnR5cGVdKG4uc291cmNlTWFwSWQsdnIobi5kYXRhKSxhKTtlbHNlIGlmKHZvaWQgMCE9PW4uaWQmJnRoaXMucGFyZW50LmdldFdvcmtlclNvdXJjZSl7dmFyIG89bi50eXBlLnNwbGl0KFwiLlwiKTt0aGlzLnBhcmVudC5nZXRXb3JrZXJTb3VyY2Uobi5zb3VyY2VNYXBJZCxvWzBdLG9bMV0pW29bMl1dKHZyKG4uZGF0YSksYSl9ZWxzZSB0aGlzLnBhcmVudFtuLnR5cGVdKHZyKG4uZGF0YSkpfX0sU28ucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMudGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsdGhpcy5yZWNlaXZlLCExKX07dmFyIEVvPW4oaShmdW5jdGlvbih0LGUpeyFmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSxuKXt2YXIgaT1yKDI1Nip0LDI1NiooZT1NYXRoLnBvdygyLG4pLWUtMSksbiksYT1yKDI1NioodCsxKSwyNTYqKGUrMSksbik7cmV0dXJuIGlbMF0rXCIsXCIraVsxXStcIixcIithWzBdK1wiLFwiK2FbMV19ZnVuY3Rpb24gcih0LGUscil7dmFyIG49MipNYXRoLlBJKjYzNzgxMzcvMjU2L01hdGgucG93KDIscik7cmV0dXJuW3Qqbi0yKk1hdGguUEkqNjM3ODEzNy8yLGUqbi0yKk1hdGguUEkqNjM3ODEzNy8yXX10LmdldFVSTD1mdW5jdGlvbih0LHIsbixpLGEsbyl7cmV0dXJuIG89b3x8e30sdCtcIj9cIitbXCJiYm94PVwiK2UobixpLGEpLFwiZm9ybWF0PVwiKyhvLmZvcm1hdHx8XCJpbWFnZS9wbmdcIiksXCJzZXJ2aWNlPVwiKyhvLnNlcnZpY2V8fFwiV01TXCIpLFwidmVyc2lvbj1cIisoby52ZXJzaW9ufHxcIjEuMS4xXCIpLFwicmVxdWVzdD1cIisoby5yZXF1ZXN0fHxcIkdldE1hcFwiKSxcInNycz1cIisoby5zcnN8fFwiRVBTRzozODU3XCIpLFwid2lkdGg9XCIrKG8ud2lkdGh8fDI1NiksXCJoZWlnaHQ9XCIrKG8uaGVpZ2h0fHwyNTYpLFwibGF5ZXJzPVwiK3JdLmpvaW4oXCImXCIpfSx0LmdldFRpbGVCQm94PWUsdC5nZXRNZXJjQ29vcmRzPXIsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9KGUpfSkpLENvPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLno9dCx0aGlzLng9ZSx0aGlzLnk9cix0aGlzLmtleT1PbygwLHQsZSxyKX07Q28ucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy56PT09dC56JiZ0aGlzLng9PT10LngmJnRoaXMueT09PXQueX0sQ28ucHJvdG90eXBlLnVybD1mdW5jdGlvbih0LGUpe3ZhciByPUVvLmdldFRpbGVCQm94KHRoaXMueCx0aGlzLnksdGhpcy56KSxuPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saT1cIlwiLGE9dDthPjA7YS0tKWkrPShlJihuPTE8PGEtMSk/MTowKSsociZuPzI6MCk7cmV0dXJuIGl9KHRoaXMueix0aGlzLngsdGhpcy55KTtyZXR1cm4gdFsodGhpcy54K3RoaXMueSkldC5sZW5ndGhdLnJlcGxhY2UoXCJ7cHJlZml4fVwiLCh0aGlzLnglMTYpLnRvU3RyaW5nKDE2KSsodGhpcy55JTE2KS50b1N0cmluZygxNikpLnJlcGxhY2UoXCJ7en1cIixTdHJpbmcodGhpcy56KSkucmVwbGFjZShcInt4fVwiLFN0cmluZyh0aGlzLngpKS5yZXBsYWNlKFwie3l9XCIsU3RyaW5nKFwidG1zXCI9PT1lP01hdGgucG93KDIsdGhpcy56KS10aGlzLnktMTp0aGlzLnkpKS5yZXBsYWNlKFwie3F1YWRrZXl9XCIsbikucmVwbGFjZShcIntiYm94LWVwc2ctMzg1N31cIixyKX07dmFyIExvPWZ1bmN0aW9uKHQsZSl7dGhpcy53cmFwPXQsdGhpcy5jYW5vbmljYWw9ZSx0aGlzLmtleT1Pbyh0LGUueixlLngsZS55KX0sem89ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLm92ZXJzY2FsZWRaPXQsdGhpcy53cmFwPWUsdGhpcy5jYW5vbmljYWw9bmV3IENvKHIsK24sK2kpLHRoaXMua2V5PU9vKGUsdCxuLGkpfTtmdW5jdGlvbiBPbyh0LGUscixuKXsodCo9Mik8MCYmKHQ9LTEqdC0xKTt2YXIgaT0xPDxlO3JldHVybiAzMiooaSppKnQraSpuK3IpK2V9em8ucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vdmVyc2NhbGVkWj09PXQub3ZlcnNjYWxlZFomJnRoaXMud3JhcD09PXQud3JhcCYmdGhpcy5jYW5vbmljYWwuZXF1YWxzKHQuY2Fub25pY2FsKX0sem8ucHJvdG90eXBlLnNjYWxlZFRvPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY2Fub25pY2FsLnotdDtyZXR1cm4gdD50aGlzLmNhbm9uaWNhbC56P25ldyB6byh0LHRoaXMud3JhcCx0aGlzLmNhbm9uaWNhbC56LHRoaXMuY2Fub25pY2FsLngsdGhpcy5jYW5vbmljYWwueSk6bmV3IHpvKHQsdGhpcy53cmFwLHQsdGhpcy5jYW5vbmljYWwueD4+ZSx0aGlzLmNhbm9uaWNhbC55Pj5lKX0sem8ucHJvdG90eXBlLmlzQ2hpbGRPZj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNhbm9uaWNhbC56LXQuY2Fub25pY2FsLno7cmV0dXJuIDA9PT10Lm92ZXJzY2FsZWRafHx0Lm92ZXJzY2FsZWRaPHRoaXMub3ZlcnNjYWxlZFomJnQuY2Fub25pY2FsLng9PT10aGlzLmNhbm9uaWNhbC54Pj5lJiZ0LmNhbm9uaWNhbC55PT09dGhpcy5jYW5vbmljYWwueT4+ZX0sem8ucHJvdG90eXBlLmNoaWxkcmVuPWZ1bmN0aW9uKHQpe2lmKHRoaXMub3ZlcnNjYWxlZFo+PXQpcmV0dXJuW25ldyB6byh0aGlzLm92ZXJzY2FsZWRaKzEsdGhpcy53cmFwLHRoaXMuY2Fub25pY2FsLnosdGhpcy5jYW5vbmljYWwueCx0aGlzLmNhbm9uaWNhbC55KV07dmFyIGU9dGhpcy5jYW5vbmljYWwueisxLHI9Mip0aGlzLmNhbm9uaWNhbC54LG49Mip0aGlzLmNhbm9uaWNhbC55O3JldHVybltuZXcgem8oZSx0aGlzLndyYXAsZSxyLG4pLG5ldyB6byhlLHRoaXMud3JhcCxlLHIrMSxuKSxuZXcgem8oZSx0aGlzLndyYXAsZSxyLG4rMSksbmV3IHpvKGUsdGhpcy53cmFwLGUscisxLG4rMSldfSx6by5wcm90b3R5cGUuaXNMZXNzVGhhbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy53cmFwPHQud3JhcHx8ISh0aGlzLndyYXA+dC53cmFwKSYmKHRoaXMub3ZlcnNjYWxlZFo8dC5vdmVyc2NhbGVkWnx8ISh0aGlzLm92ZXJzY2FsZWRaPnQub3ZlcnNjYWxlZFopJiYodGhpcy5jYW5vbmljYWwueDx0LmNhbm9uaWNhbC54fHwhKHRoaXMuY2Fub25pY2FsLng+dC5jYW5vbmljYWwueCkmJnRoaXMuY2Fub25pY2FsLnk8dC5jYW5vbmljYWwueSkpfSx6by5wcm90b3R5cGUud3JhcHBlZD1mdW5jdGlvbigpe3JldHVybiBuZXcgem8odGhpcy5vdmVyc2NhbGVkWiwwLHRoaXMuY2Fub25pY2FsLnosdGhpcy5jYW5vbmljYWwueCx0aGlzLmNhbm9uaWNhbC55KX0sem8ucHJvdG90eXBlLnVud3JhcFRvPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgem8odGhpcy5vdmVyc2NhbGVkWix0LHRoaXMuY2Fub25pY2FsLnosdGhpcy5jYW5vbmljYWwueCx0aGlzLmNhbm9uaWNhbC55KX0sem8ucHJvdG90eXBlLm92ZXJzY2FsZUZhY3Rvcj1mdW5jdGlvbigpe3JldHVybiBNYXRoLnBvdygyLHRoaXMub3ZlcnNjYWxlZFotdGhpcy5jYW5vbmljYWwueil9LHpvLnByb3RvdHlwZS50b1Vud3JhcHBlZD1mdW5jdGlvbigpe3JldHVybiBuZXcgTG8odGhpcy53cmFwLHRoaXMuY2Fub25pY2FsKX0sem8ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3ZlcnNjYWxlZForXCIvXCIrdGhpcy5jYW5vbmljYWwueCtcIi9cIit0aGlzLmNhbm9uaWNhbC55fSx6by5wcm90b3R5cGUudG9Db29yZGluYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBzKHRoaXMuY2Fub25pY2FsLngrTWF0aC5wb3coMix0aGlzLndyYXApLHRoaXMuY2Fub25pY2FsLnksdGhpcy5jYW5vbmljYWwueil9LHByKFwiQ2Fub25pY2FsVGlsZUlEXCIsQ28pLHByKFwiT3ZlcnNjYWxlZFRpbGVJRFwiLHpvLHtvbWl0OltcInBvc01hdHJpeFwiXX0pO3ZhciBJbz1mdW5jdGlvbih0LGUscil7aWYodDw9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkxldmVsIG11c3QgaGF2ZSBwb3NpdGl2ZSBkaW1lbnNpb25cIik7dGhpcy5kaW09dCx0aGlzLmJvcmRlcj1lLHRoaXMuc3RyaWRlPXRoaXMuZGltKzIqdGhpcy5ib3JkZXIsdGhpcy5kYXRhPXJ8fG5ldyBJbnQzMkFycmF5KCh0aGlzLmRpbSsyKnRoaXMuYm9yZGVyKSoodGhpcy5kaW0rMip0aGlzLmJvcmRlcikpfTtJby5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmRhdGFbdGhpcy5faWR4KHQsZSldPXIrNjU1MzZ9LElvLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5kYXRhW3RoaXMuX2lkeCh0LGUpXS02NTUzNn0sSW8ucHJvdG90eXBlLl9pZHg9ZnVuY3Rpb24odCxlKXtpZih0PC10aGlzLmJvcmRlcnx8dD49dGhpcy5kaW0rdGhpcy5ib3JkZXJ8fGU8LXRoaXMuYm9yZGVyfHxlPj10aGlzLmRpbSt0aGlzLmJvcmRlcil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIm91dCBvZiByYW5nZSBzb3VyY2UgY29vcmRpbmF0ZXMgZm9yIERFTSBkYXRhXCIpO3JldHVybihlK3RoaXMuYm9yZGVyKSp0aGlzLnN0cmlkZSsodCt0aGlzLmJvcmRlcil9LHByKFwiTGV2ZWxcIixJbyk7dmFyIERvPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnVpZD10LHRoaXMuc2NhbGU9ZXx8MSx0aGlzLmxldmVsPXJ8fG5ldyBJbygyNTYsNTEyKSx0aGlzLmxvYWRlZD0hIXJ9O0RvLnByb3RvdHlwZS5sb2FkRnJvbUltYWdlPWZ1bmN0aW9uKHQsZSl7aWYodC5oZWlnaHQhPT10LndpZHRoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiREVNIHRpbGVzIG11c3QgYmUgc3F1YXJlXCIpO2lmKGUmJlwibWFwYm94XCIhPT1lJiZcInRlcnJhcml1bVwiIT09ZSlyZXR1cm4gXygnXCInK2UrJ1wiIGlzIG5vdCBhIHZhbGlkIGVuY29kaW5nIHR5cGUuIFZhbGlkIHR5cGVzIGluY2x1ZGUgXCJtYXBib3hcIiBhbmQgXCJ0ZXJyYXJpdW1cIi4nKTt2YXIgcj10aGlzLmxldmVsPW5ldyBJbyh0LndpZHRoLHQud2lkdGgvMiksbj10LmRhdGE7dGhpcy5fdW5wYWNrRGF0YShyLG4sZXx8XCJtYXBib3hcIik7Zm9yKHZhciBpPTA7aTxyLmRpbTtpKyspci5zZXQoLTEsaSxyLmdldCgwLGkpKSxyLnNldChyLmRpbSxpLHIuZ2V0KHIuZGltLTEsaSkpLHIuc2V0KGksLTEsci5nZXQoaSwwKSksci5zZXQoaSxyLmRpbSxyLmdldChpLHIuZGltLTEpKTtyLnNldCgtMSwtMSxyLmdldCgwLDApKSxyLnNldChyLmRpbSwtMSxyLmdldChyLmRpbS0xLDApKSxyLnNldCgtMSxyLmRpbSxyLmdldCgwLHIuZGltLTEpKSxyLnNldChyLmRpbSxyLmRpbSxyLmdldChyLmRpbS0xLHIuZGltLTEpKSx0aGlzLmxvYWRlZD0hMH0sRG8ucHJvdG90eXBlLl91bnBhY2tNYXBib3g9ZnVuY3Rpb24odCxlLHIpe3JldHVybigyNTYqdCoyNTYrMjU2KmUrcikvMTAtMWU0fSxEby5wcm90b3R5cGUuX3VucGFja1RlcnJhcml1bT1mdW5jdGlvbih0LGUscil7cmV0dXJuIDI1Nip0K2Urci8yNTYtMzI3Njh9LERvLnByb3RvdHlwZS5fdW5wYWNrRGF0YT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXttYXBib3g6dGhpcy5fdW5wYWNrTWFwYm94LHRlcnJhcml1bTp0aGlzLl91bnBhY2tUZXJyYXJpdW19W3JdLGk9MDtpPHQuZGltO2krKylmb3IodmFyIGE9MDthPHQuZGltO2ErKyl7dmFyIG89NCooaSp0LmRpbSthKTt0LnNldChhLGksdGhpcy5zY2FsZSpuKGVbb10sZVtvKzFdLGVbbysyXSkpfX0sRG8ucHJvdG90eXBlLmdldFBpeGVscz1mdW5jdGlvbigpe3JldHVybiBuZXcgdWkoe3dpZHRoOnRoaXMubGV2ZWwuZGltKzIqdGhpcy5sZXZlbC5ib3JkZXIsaGVpZ2h0OnRoaXMubGV2ZWwuZGltKzIqdGhpcy5sZXZlbC5ib3JkZXJ9LG5ldyBVaW50OEFycmF5KHRoaXMubGV2ZWwuZGF0YS5idWZmZXIpKX0sRG8ucHJvdG90eXBlLmJhY2tmaWxsQm9yZGVyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmxldmVsLGk9dC5sZXZlbDtpZihuLmRpbSE9PWkuZGltKXRocm93IG5ldyBFcnJvcihcImxldmVsIG1pc21hdGNoIChkZW0gZGltZW5zaW9uKVwiKTt2YXIgYT1lKm4uZGltLG89ZSpuLmRpbStuLmRpbSxzPXIqbi5kaW0sbD1yKm4uZGltK24uZGltO3N3aXRjaChlKXtjYXNlLTE6YT1vLTE7YnJlYWs7Y2FzZSAxOm89YSsxfXN3aXRjaChyKXtjYXNlLTE6cz1sLTE7YnJlYWs7Y2FzZSAxOmw9cysxfWZvcih2YXIgYz1mKGEsLW4uYm9yZGVyLG4uZGltK24uYm9yZGVyKSx1PWYobywtbi5ib3JkZXIsbi5kaW0rbi5ib3JkZXIpLGg9ZihzLC1uLmJvcmRlcixuLmRpbStuLmJvcmRlcikscD1mKGwsLW4uYm9yZGVyLG4uZGltK24uYm9yZGVyKSxkPS1lKm4uZGltLGc9LXIqbi5kaW0sdj1oO3Y8cDt2KyspZm9yKHZhciBtPWM7bTx1O20rKyluLnNldChtLHYsaS5nZXQobStkLHYrZykpfSxwcihcIkRFTURhdGFcIixEbyk7dmFyIFBvPWZ1bmN0aW9uKHQpe3RoaXMuX3N0cmluZ1RvTnVtYmVyPXt9LHRoaXMuX251bWJlclRvU3RyaW5nPVtdO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10W2VdO3RoaXMuX3N0cmluZ1RvTnVtYmVyW3JdPWUsdGhpcy5fbnVtYmVyVG9TdHJpbmdbZV09cn19O1BvLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3N0cmluZ1RvTnVtYmVyW3RdfSxQby5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9udW1iZXJUb1N0cmluZ1t0XX07dmFyIFJvPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMudHlwZT1cIkZlYXR1cmVcIix0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZT10LHQuX3o9ZSx0Ll94PXIsdC5feT1uLHRoaXMucHJvcGVydGllcz10LnByb3BlcnRpZXMsbnVsbCE9dC5pZCYmKHRoaXMuaWQ9dC5pZCl9LEZvPXtnZW9tZXRyeTp7Y29uZmlndXJhYmxlOiEwfX07Rm8uZ2VvbWV0cnkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMuX2dlb21ldHJ5JiYodGhpcy5fZ2VvbWV0cnk9dGhpcy5fdmVjdG9yVGlsZUZlYXR1cmUudG9HZW9KU09OKHRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlLl94LHRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlLl95LHRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlLl96KS5nZW9tZXRyeSksdGhpcy5fZ2VvbWV0cnl9LEZvLmdlb21ldHJ5LnNldD1mdW5jdGlvbih0KXt0aGlzLl9nZW9tZXRyeT10fSxSby5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIHQ9e2dlb21ldHJ5OnRoaXMuZ2VvbWV0cnl9O2Zvcih2YXIgZSBpbiB0aGlzKVwiX2dlb21ldHJ5XCIhPT1lJiZcIl92ZWN0b3JUaWxlRmVhdHVyZVwiIT09ZSYmKHRbZV09dGhpc1tlXSk7cmV0dXJuIHR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJvLnByb3RvdHlwZSxGbyk7dmFyIEJvPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRpbGVJRD10LHRoaXMueD10LmNhbm9uaWNhbC54LHRoaXMueT10LmNhbm9uaWNhbC55LHRoaXMuej10LmNhbm9uaWNhbC56LHRoaXMuZ3JpZD1lfHxuZXcgbHIoUG4sMTYsMCksdGhpcy5mZWF0dXJlSW5kZXhBcnJheT1yfHxuZXcgQW59O2Z1bmN0aW9uIE5vKHQsZSl7cmV0dXJuIGUtdH1Cby5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpcy5mZWF0dXJlSW5kZXhBcnJheS5sZW5ndGg7dGhpcy5mZWF0dXJlSW5kZXhBcnJheS5lbXBsYWNlQmFjayhyLG4saSk7Zm9yKHZhciBvPTA7bzxlLmxlbmd0aDtvKyspe2Zvcih2YXIgcz1lW29dLGw9WzEvMCwxLzAsLTEvMCwtMS8wXSxjPTA7YzxzLmxlbmd0aDtjKyspe3ZhciB1PXNbY107bFswXT1NYXRoLm1pbihsWzBdLHUueCksbFsxXT1NYXRoLm1pbihsWzFdLHUueSksbFsyXT1NYXRoLm1heChsWzJdLHUueCksbFszXT1NYXRoLm1heChsWzNdLHUueSl9bFswXTxQbiYmbFsxXTxQbiYmbFsyXT49MCYmbFszXT49MCYmdGhpcy5ncmlkLmluc2VydChhLGxbMF0sbFsxXSxsWzJdLGxbM10pfX0sQm8ucHJvdG90eXBlLmxvYWRWVExheWVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZ0TGF5ZXJzfHwodGhpcy52dExheWVycz1uZXcgZ2EuVmVjdG9yVGlsZShuZXcgaW8odGhpcy5yYXdUaWxlRGF0YSkpLmxheWVycyx0aGlzLnNvdXJjZUxheWVyQ29kZXI9bmV3IFBvKHRoaXMudnRMYXllcnM/T2JqZWN0LmtleXModGhpcy52dExheWVycykuc29ydCgpOltcIl9nZW9qc29uVGlsZUxheWVyXCJdKSksdGhpcy52dExheWVyc30sQm8ucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpczt0aGlzLmxvYWRWVExheWVycygpO2Zvcih2YXIgbj10LnBhcmFtc3x8e30saT1Qbi90LnRpbGVTaXplL3Quc2NhbGUsYT1SZShuLmZpbHRlciksbz10LnF1ZXJ5R2VvbWV0cnkscz10LnF1ZXJ5UGFkZGluZyppLGw9MS8wLGM9MS8wLHU9LTEvMCxoPS0xLzAsZj0wO2Y8by5sZW5ndGg7ZisrKWZvcih2YXIgcD1vW2ZdLGQ9MDtkPHAubGVuZ3RoO2QrKyl7dmFyIGc9cFtkXTtsPU1hdGgubWluKGwsZy54KSxjPU1hdGgubWluKGMsZy55KSx1PU1hdGgubWF4KHUsZy54KSxoPU1hdGgubWF4KGgsZy55KX12YXIgdj10aGlzLmdyaWQucXVlcnkobC1zLGMtcyx1K3MsaCtzKTt2LnNvcnQoTm8pO2Zvcih2YXIgbSx5PXt9LHg9ZnVuY3Rpb24ocyl7dmFyIGw9dltzXTtpZihsIT09bSl7bT1sO3ZhciBjPXIuZmVhdHVyZUluZGV4QXJyYXkuZ2V0KGwpLHU9bnVsbDtyLmxvYWRNYXRjaGluZ0ZlYXR1cmUoeSxjLmJ1Y2tldEluZGV4LGMuc291cmNlTGF5ZXJJbmRleCxjLmZlYXR1cmVJbmRleCxhLG4ubGF5ZXJzLGUsZnVuY3Rpb24oZSxuKXtyZXR1cm4gdXx8KHU9Rm4oZSkpLG4ucXVlcnlJbnRlcnNlY3RzRmVhdHVyZShvLGUsdSxyLnosdC50cmFuc2Zvcm0saSx0LnBvc01hdHJpeCl9KX19LGI9MDtiPHYubGVuZ3RoO2IrKyl4KGIpO3JldHVybiB5fSxCby5wcm90b3R5cGUubG9hZE1hdGNoaW5nRmVhdHVyZT1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3ZhciBsPXRoaXMuYnVja2V0TGF5ZXJJRHNbZV07aWYoIWF8fGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspaWYoZS5pbmRleE9mKHRbcl0pPj0wKXJldHVybiEwO3JldHVybiExfShhLGwpKXt2YXIgYz10aGlzLnNvdXJjZUxheWVyQ29kZXIuZGVjb2RlKHIpLHU9dGhpcy52dExheWVyc1tjXS5mZWF0dXJlKG4pO2lmKGkobmV3IExyKHRoaXMudGlsZUlELm92ZXJzY2FsZWRaKSx1KSlmb3IodmFyIGg9MDtoPGwubGVuZ3RoO2grKyl7dmFyIGY9bFtoXTtpZighKGEmJmEuaW5kZXhPZihmKTwwKSl7dmFyIHA9b1tmXTtpZihwJiYoIXN8fHModSxwKSkpe3ZhciBkPW5ldyBSbyh1LHRoaXMueix0aGlzLngsdGhpcy55KTtkLmxheWVyPXAuc2VyaWFsaXplKCk7dmFyIGc9dFtmXTt2b2lkIDA9PT1nJiYoZz10W2ZdPVtdKSxnLnB1c2goe2ZlYXR1cmVJbmRleDpuLGZlYXR1cmU6ZH0pfX19fX0sQm8ucHJvdG90eXBlLmxvb2t1cFN5bWJvbEZlYXR1cmVzPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz17fTt0aGlzLmxvYWRWVExheWVycygpO2Zvcih2YXIgcz1SZShuKSxsPTAsYz10O2w8Yy5sZW5ndGg7bCs9MSl7dmFyIHU9Y1tsXTt0aGlzLmxvYWRNYXRjaGluZ0ZlYXR1cmUobyxlLHIsdSxzLGksYSl9cmV0dXJuIG99LEJvLnByb3RvdHlwZS5oYXNMYXllcj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRoaXMuYnVja2V0TGF5ZXJJRHM7ZTxyLmxlbmd0aDtlKz0xKWZvcih2YXIgbj0wLGk9cltlXTtuPGkubGVuZ3RoO24rPTEpaWYodD09PWlbbl0pcmV0dXJuITA7cmV0dXJuITF9LHByKFwiRmVhdHVyZUluZGV4XCIsQm8se29taXQ6W1wicmF3VGlsZURhdGFcIixcInNvdXJjZUxheWVyQ29kZXJcIl19KTt2YXIgam89e2hvcml6b250YWw6MSx2ZXJ0aWNhbDoyLGhvcml6b250YWxPbmx5OjN9LFZvPXs5OiEwLDEwOiEwLDExOiEwLDEyOiEwLDEzOiEwLDMyOiEwfSxVbz17fTtmdW5jdGlvbiBxbyh0LGUscixuKXt2YXIgaT1NYXRoLnBvdyh0LWUsMik7cmV0dXJuIG4/dDxlP2kvMjoyKmk6aStNYXRoLmFicyhyKSpyfWZ1bmN0aW9uIEhvKHQsZSl7dmFyIHI9MDtyZXR1cm4gMTA9PT10JiYoci09MWU0KSw0MCE9PXQmJjY1Mjg4IT09dHx8KHIrPTUwKSw0MSE9PWUmJjY1Mjg5IT09ZXx8KHIrPTUwKSxyfWZ1bmN0aW9uIEdvKHQsZSxyLG4saSxhKXtmb3IodmFyIG89bnVsbCxzPXFvKGUscixpLGEpLGw9MCxjPW47bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdLGg9cW8oZS11LngscixpLGEpK3UuYmFkbmVzcztoPD1zJiYobz11LHM9aCl9cmV0dXJue2luZGV4OnQseDplLHByaW9yQnJlYWs6byxiYWRuZXNzOnN9fWZ1bmN0aW9uIFlvKHQsZSxyLG4pe2lmKCFyKXJldHVybltdO2lmKCF0KXJldHVybltdO2Zvcih2YXIgaSxhPVtdLG89ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTAsYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz1uW3QuY2hhckNvZGVBdChhKV07byYmKGkrPW8ubWV0cmljcy5hZHZhbmNlK2UpfXJldHVybiBpL01hdGgubWF4KDEsTWF0aC5jZWlsKGkvcikpfSh0LGUscixuKSxzPTAsbD0wO2w8dC5sZW5ndGg7bCsrKXt2YXIgYz10LmNoYXJDb2RlQXQobCksdT1uW2NdO3UmJiFWb1tjXSYmKHMrPXUubWV0cmljcy5hZHZhbmNlK2UpLGw8dC5sZW5ndGgtMSYmKFVvW2NdfHwhKChpPWMpPDExOTA0KSYmKHlyW1wiQm9wb21vZm8gRXh0ZW5kZWRcIl0oaSl8fHlyLkJvcG9tb2ZvKGkpfHx5cltcIkNKSyBDb21wYXRpYmlsaXR5IEZvcm1zXCJdKGkpfHx5cltcIkNKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHNcIl0oaSl8fHlyW1wiQ0pLIENvbXBhdGliaWxpdHlcIl0oaSl8fHlyW1wiQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnRcIl0oaSl8fHlyW1wiQ0pLIFN0cm9rZXNcIl0oaSl8fHlyW1wiQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uXCJdKGkpfHx5cltcIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEFcIl0oaSl8fHlyW1wiQ0pLIFVuaWZpZWQgSWRlb2dyYXBoc1wiXShpKXx8eXJbXCJFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzXCJdKGkpfHx5cltcIkhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zXCJdKGkpfHx5ci5IaXJhZ2FuYShpKXx8eXJbXCJJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzXCJdKGkpfHx5cltcIkthbmd4aSBSYWRpY2Fsc1wiXShpKXx8eXJbXCJLYXRha2FuYSBQaG9uZXRpYyBFeHRlbnNpb25zXCJdKGkpfHx5ci5LYXRha2FuYShpKXx8eXJbXCJWZXJ0aWNhbCBGb3Jtc1wiXShpKXx8eXJbXCJZaSBSYWRpY2Fsc1wiXShpKXx8eXJbXCJZaSBTeWxsYWJsZXNcIl0oaSkpKSYmYS5wdXNoKEdvKGwrMSxzLG8sYSxIbyhjLHQuY2hhckNvZGVBdChsKzEpKSwhMSkpfXJldHVybiBmdW5jdGlvbiB0KGUpe3JldHVybiBlP3QoZS5wcmlvckJyZWFrKS5jb25jYXQoZS5pbmRleCk6W119KEdvKHQubGVuZ3RoLHMsbyxhLDAsITApKX1mdW5jdGlvbiBXbyh0KXt2YXIgZT0uNSxyPS41O3N3aXRjaCh0KXtjYXNlXCJyaWdodFwiOmNhc2VcInRvcC1yaWdodFwiOmNhc2VcImJvdHRvbS1yaWdodFwiOmU9MTticmVhaztjYXNlXCJsZWZ0XCI6Y2FzZVwidG9wLWxlZnRcIjpjYXNlXCJib3R0b20tbGVmdFwiOmU9MH1zd2l0Y2godCl7Y2FzZVwiYm90dG9tXCI6Y2FzZVwiYm90dG9tLXJpZ2h0XCI6Y2FzZVwiYm90dG9tLWxlZnRcIjpyPTE7YnJlYWs7Y2FzZVwidG9wXCI6Y2FzZVwidG9wLXJpZ2h0XCI6Y2FzZVwidG9wLWxlZnRcIjpyPTB9cmV0dXJue2hvcml6b250YWxBbGlnbjplLHZlcnRpY2FsQWxpZ246cn19ZnVuY3Rpb24gWG8odCxlLHIsbixpKXtpZihpKXt2YXIgYT1lW3Rbbl0uZ2x5cGhdO2lmKGEpZm9yKHZhciBvPWEubWV0cmljcy5hZHZhbmNlLHM9KHRbbl0ueCtvKSppLGw9cjtsPD1uO2wrKyl0W2xdLngtPXN9fVVvWzEwXT0hMCxVb1szMl09ITAsVW9bMzhdPSEwLFVvWzQwXT0hMCxVb1s0MV09ITAsVW9bNDNdPSEwLFVvWzQ1XT0hMCxVb1s0N109ITAsVW9bMTczXT0hMCxVb1sxODNdPSEwLFVvWzgyMDNdPSEwLFVvWzgyMDhdPSEwLFVvWzgyMTFdPSEwLFVvWzgyMzFdPSEwLGUuY29tbW9uanNHbG9iYWw9cixlLnVud3JhcEV4cG9ydHM9bixlLmNyZWF0ZUNvbW1vbmpzTW9kdWxlPWksZS5kZWZhdWx0PXNlbGYsZS5kZWZhdWx0JDE9bCxlLmdldEpTT049ZnVuY3Rpb24odCxlKXt2YXIgcj1NKHQpO3JldHVybiByLnNldFJlcXVlc3RIZWFkZXIoXCJBY2NlcHRcIixcImFwcGxpY2F0aW9uL2pzb25cIiksci5vbmVycm9yPWZ1bmN0aW9uKCl7ZShuZXcgRXJyb3Ioci5zdGF0dXNUZXh0KSl9LHIub25sb2FkPWZ1bmN0aW9uKCl7aWYoci5zdGF0dXM+PTIwMCYmci5zdGF0dXM8MzAwJiZyLnJlc3BvbnNlKXt2YXIgbjt0cnl7bj1KU09OLnBhcnNlKHIucmVzcG9uc2UpfWNhdGNoKHQpe3JldHVybiBlKHQpfWUobnVsbCxuKX1lbHNlIDQwMT09PXIuc3RhdHVzJiZ0LnVybC5tYXRjaCgvbWFwYm94LmNvbS8pP2UobmV3IFQoci5zdGF0dXNUZXh0K1wiOiB5b3UgbWF5IGhhdmUgcHJvdmlkZWQgYW4gaW52YWxpZCBNYXBib3ggYWNjZXNzIHRva2VuLiBTZWUgaHR0cHM6Ly93d3cubWFwYm94LmNvbS9hcGktZG9jdW1lbnRhdGlvbi8jYWNjZXNzLXRva2Vuc1wiLHIuc3RhdHVzLHQudXJsKSk6ZShuZXcgVChyLnN0YXR1c1RleHQsci5zdGF0dXMsdC51cmwpKX0sci5zZW5kKCkscn0sZS5nZXRJbWFnZT1mdW5jdGlvbih0LGUpe3JldHVybiBTKHQsZnVuY3Rpb24odCxyKXtpZih0KWUodCk7ZWxzZSBpZihyKXt2YXIgbj1uZXcgc2VsZi5JbWFnZSxpPXNlbGYuVVJMfHxzZWxmLndlYmtpdFVSTDtuLm9ubG9hZD1mdW5jdGlvbigpe2UobnVsbCxuKSxpLnJldm9rZU9iamVjdFVSTChuLnNyYyl9O3ZhciBhPW5ldyBzZWxmLkJsb2IoW25ldyBVaW50OEFycmF5KHIuZGF0YSldLHt0eXBlOlwiaW1hZ2UvcG5nXCJ9KTtuLmNhY2hlQ29udHJvbD1yLmNhY2hlQ29udHJvbCxuLmV4cGlyZXM9ci5leHBpcmVzLG4uc3JjPXIuZGF0YS5ieXRlTGVuZ3RoP2kuY3JlYXRlT2JqZWN0VVJMKGEpOlwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFCQ0FZQUFBQWZGY1NKQUFBQUMwbEVRVlFZVjJOZ0FBSUFBQVVBQWFyVnlGRUFBQUFBU1VWT1JLNUNZSUk9XCJ9fSl9LGUuUmVzb3VyY2VUeXBlPUEsZS5SR0JBSW1hZ2U9dWksZS5kZWZhdWx0JDI9S2EsZS5JbWFnZVBvc2l0aW9uPVFhLGUuZ2V0QXJyYXlCdWZmZXI9UyxlLmRlZmF1bHQkMz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGlvKHQpLnJlYWRGaWVsZHMoa28sW10pfSxlLmRlZmF1bHQkND15cixlLmFzeW5jQWxsPWZ1bmN0aW9uKHQsZSxyKXtpZighdC5sZW5ndGgpcmV0dXJuIHIobnVsbCxbXSk7dmFyIG49dC5sZW5ndGgsaT1uZXcgQXJyYXkodC5sZW5ndGgpLGE9bnVsbDt0LmZvckVhY2goZnVuY3Rpb24odCxvKXtlKHQsZnVuY3Rpb24odCxlKXt0JiYoYT10KSxpW29dPWUsMD09LS1uJiZyKGEsaSl9KX0pfSxlLkFscGhhSW1hZ2U9Y2ksZS5kZWZhdWx0JDU9SSxlLmVuZHNXaXRoPXYsZS5leHRlbmQ9cCxlLnNwaGVyaWNhbFRvQ2FydGVzaWFuPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXTtyZXR1cm4gcis9OTAscio9TWF0aC5QSS8xODAsbio9TWF0aC5QSS8xODAse3g6ZSpNYXRoLmNvcyhyKSpNYXRoLnNpbihuKSx5OmUqTWF0aC5zaW4ocikqTWF0aC5zaW4obiksejplKk1hdGguY29zKG4pfX0sZS5FdmVudGVkPU8sZS52YWxpZGF0ZVN0eWxlPW5yLGUudmFsaWRhdGVMaWdodD1pcixlLmVtaXRWYWxpZGF0aW9uRXJyb3JzPXNyLGUuZGVmYXVsdCQ2PXR0LGUubnVtYmVyPXd0LGUuUHJvcGVydGllcz1xcixlLlRyYW5zaXRpb25hYmxlPUlyLGUuVHJhbnNpdGlvbmluZz1QcixlLlBvc3NpYmx5RXZhbHVhdGVkPUJyLGUuRGF0YUNvbnN0YW50UHJvcGVydHk9TnIsZS53YXJuT25jZT1fLGUudW5pcXVlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZCsrfSxlLmRlZmF1bHQkNz1TbyxlLnBpY2s9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9e30sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO2kgaW4gdCYmKHJbaV09dFtpXSl9cmV0dXJuIHJ9LGUud3JhcD1mdW5jdGlvbih0LGUscil7dmFyIG49ci1lLGk9KCh0LWUpJW4rbiklbitlO3JldHVybiBpPT09ZT9yOml9LGUuY2xhbXA9ZixlLkV2ZW50PUwsZS5FcnJvckV2ZW50PXosZS5PdmVyc2NhbGVkVGlsZUlEPXpvLGUuZGVmYXVsdCQ4PVBuLGUuY3JlYXRlTGF5b3V0PVhyLGUuZ2V0Q29vcmRpbmF0ZXNDZW50ZXI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTEvMCxyPTEvMCxuPS0xLzAsaT0tMS8wLGE9MDthPHQubGVuZ3RoO2ErKyllPU1hdGgubWluKGUsdFthXS5jb2x1bW4pLHI9TWF0aC5taW4ocix0W2FdLnJvdyksbj1NYXRoLm1heChuLHRbYV0uY29sdW1uKSxpPU1hdGgubWF4KGksdFthXS5yb3cpO3ZhciBvPW4tZSxsPWktcixjPU1hdGgubWF4KG8sbCksdT1NYXRoLm1heCgwLE1hdGguZmxvb3IoLU1hdGgubG9nKGMpL01hdGguTE4yKSk7cmV0dXJuIG5ldyBzKChlK24pLzIsKHIraSkvMiwwKS56b29tVG8odSl9LGUuQ2Fub25pY2FsVGlsZUlEPUNvLGUuUmFzdGVyQm91bmRzQXJyYXk9SnIsZS5nZXRWaWRlbz1mdW5jdGlvbih0LGUpe3ZhciByLG4saT1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ2aWRlb1wiKTtpLm9ubG9hZHN0YXJ0PWZ1bmN0aW9uKCl7ZShudWxsLGkpfTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic291cmNlXCIpO3I9dFthXSxuPXZvaWQgMCwobj1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpKS5ocmVmPXIsKG4ucHJvdG9jb2whPT1zZWxmLmRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sfHxuLmhvc3QhPT1zZWxmLmRvY3VtZW50LmxvY2F0aW9uLmhvc3QpJiYoaS5jcm9zc09yaWdpbj1cIkFub255bW91c1wiKSxvLnNyYz10W2FdLGkuYXBwZW5kQ2hpbGQobyl9cmV0dXJuIGl9LGUuZGVmYXVsdCQ5PUQsZS5iaW5kQWxsPWcsZS5kZWZhdWx0JDEwPWZ1bmN0aW9uIHQoZSxyKXtpZihBcnJheS5pc0FycmF5KGUpKXtpZighQXJyYXkuaXNBcnJheShyKXx8ZS5sZW5ndGghPT1yLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZighdChlW25dLHJbbl0pKXJldHVybiExO3JldHVybiEwfWlmKFwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmbnVsbCE9PXIpe2lmKFwib2JqZWN0XCIhPXR5cGVvZiByKXJldHVybiExO2lmKE9iamVjdC5rZXlzKGUpLmxlbmd0aCE9PU9iamVjdC5rZXlzKHIpLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGkgaW4gZSlpZighdChlW2ldLHJbaV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiBlPT09cn0sZS5wYXJzZUNhY2hlQ29udHJvbD1mdW5jdGlvbih0KXt2YXIgZT17fTtpZih0LnJlcGxhY2UoLyg/Ol58KD86XFxzKlxcLFxccyopKShbXlxceDAwLVxceDIwXFwoXFwpPD5AXFwsO1xcOlxcXFxcIlxcL1xcW1xcXVxcP1xcPVxce1xcfVxceDdGXSspKD86XFw9KD86KFteXFx4MDAtXFx4MjBcXChcXCk8PkBcXCw7XFw6XFxcXFwiXFwvXFxbXFxdXFw/XFw9XFx7XFx9XFx4N0ZdKyl8KD86XFxcIigoPzpbXlwiXFxcXF18XFxcXC4pKilcXFwiKSkpPy9nLGZ1bmN0aW9uKHQscixuLGkpe3ZhciBhPW58fGk7cmV0dXJuIGVbcl09IWF8fGEudG9Mb3dlckNhc2UoKSxcIlwifSksZVtcIm1heC1hZ2VcIl0pe3ZhciByPXBhcnNlSW50KGVbXCJtYXgtYWdlXCJdLDEwKTtpc05hTihyKT9kZWxldGUgZVtcIm1heC1hZ2VcIl06ZVtcIm1heC1hZ2VcIl09cn1yZXR1cm4gZX0sZS5kZWZhdWx0JDExPUJvLGUuZGVmYXVsdCQxMj1SbyxlLmRlZmF1bHQkMTM9UmUsZS5kZWZhdWx0JDE0PUhhLGUuQ29sbGlzaW9uQm94QXJyYXk9dm4sZS5kZWZhdWx0JDE1PU1uLGUuVHJpYW5nbGVJbmRleEFycmF5PWhuLGUuZGVmYXVsdCQxNj1McixlLmRlZmF1bHQkMTc9cyxlLmtleXNEaWZmZXJlbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107Zm9yKHZhciBuIGluIHQpbiBpbiBlfHxyLnB1c2gobik7cmV0dXJuIHJ9LGUuZGVmYXVsdCQxOD1bXCJ0eXBlXCIsXCJzb3VyY2VcIixcInNvdXJjZS1sYXllclwiLFwibWluem9vbVwiLFwibWF4em9vbVwiLFwiZmlsdGVyXCIsXCJsYXlvdXRcIl0sZS5tYXQ0PXJpLGUudmVjND1laSxlLmdldFNpemVEYXRhPUZhLGUuZXZhbHVhdGVTaXplRm9yRmVhdHVyZT1mdW5jdGlvbih0LGUscil7dmFyIG49ZTtyZXR1cm5cInNvdXJjZVwiPT09dC5mdW5jdGlvblR5cGU/ci5sb3dlclNpemUvMTA6XCJjb21wb3NpdGVcIj09PXQuZnVuY3Rpb25UeXBlP3d0KHIubG93ZXJTaXplLzEwLHIudXBwZXJTaXplLzEwLG4udVNpemVUKTpuLnVTaXplfSxlLmV2YWx1YXRlU2l6ZUZvclpvb209ZnVuY3Rpb24odCxlLHIpe2lmKFwiY29uc3RhbnRcIj09PXQuZnVuY3Rpb25UeXBlKXJldHVybnt1U2l6ZVQ6MCx1U2l6ZTp0LmxheW91dFNpemV9O2lmKFwic291cmNlXCI9PT10LmZ1bmN0aW9uVHlwZSlyZXR1cm57dVNpemVUOjAsdVNpemU6MH07aWYoXCJjYW1lcmFcIj09PXQuZnVuY3Rpb25UeXBlKXt2YXIgbj10LnByb3BlcnR5VmFsdWUsaT10Lnpvb21SYW5nZSxhPXQuc2l6ZVJhbmdlLG89ZihTZShuLHIuc3BlY2lmaWNhdGlvbikuaW50ZXJwb2xhdGlvbkZhY3RvcihlLGkubWluLGkubWF4KSwwLDEpO3JldHVybnt1U2l6ZVQ6MCx1U2l6ZTphLm1pbitvKihhLm1heC1hLm1pbil9fXZhciBzPXQucHJvcGVydHlWYWx1ZSxsPXQuem9vbVJhbmdlO3JldHVybnt1U2l6ZVQ6ZihTZShzLHIuc3BlY2lmaWNhdGlvbikuaW50ZXJwb2xhdGlvbkZhY3RvcihlLGwubWluLGwubWF4KSwwLDEpLHVTaXplOjB9fSxlLmFkZER5bmFtaWNBdHRyaWJ1dGVzPVZhLGUuZGVmYXVsdCQxOT1ZYSxlLldyaXRpbmdNb2RlPWpvLGUubXVsdGlQb2x5Z29uSW50ZXJzZWN0c0J1ZmZlcmVkUG9pbnQ9am4sZS5tdWx0aVBvbHlnb25JbnRlcnNlY3RzTXVsdGlQb2x5Z29uPVZuLGUubXVsdGlQb2x5Z29uSW50ZXJzZWN0c0J1ZmZlcmVkTXVsdGlMaW5lPVVuLGUucG9seWdvbkludGVyc2VjdHNQb2x5Z29uPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspaWYoWm4oZSx0W3JdKSlyZXR1cm4hMDtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihabih0LGVbbl0pKXJldHVybiEwO3JldHVybiEhSG4odCxlKX0sZS5kaXN0VG9TZWdtZW50U3F1YXJlZD1XbixlLmRlZmF1bHQkMjA9dGksZS5kZWZhdWx0JDIxPUhyLGUuZGVmYXVsdCQyMj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEphW3QudHlwZV0odCl9LGUuY2xvbmU9eCxlLmZpbHRlck9iamVjdD15LGUubWFwT2JqZWN0PW0sZS5yZWdpc3RlckZvclBsdWdpbkF2YWlsYWJpbGl0eT1mdW5jdGlvbih0KXtyZXR1cm4gTXI/dCh7cGx1Z2luVVJMOk1yLGNvbXBsZXRpb25DYWxsYmFjazpBcn0pOkVyLm9uY2UoXCJwbHVnaW5BdmFpbGFibGVcIix0KSx0fSxlLmV2ZW50ZWQ9RXIsZS5kZWZhdWx0JDIzPW1yLGUuZGVmYXVsdCQyND1PbixlLlBvc0FycmF5PSRyLGUuVW53cmFwcGVkVGlsZUlEPUxvLGUuZWFzZT1oLGUuYmV6aWVyPXUsZS5zZXRSVExUZXh0UGx1Z2luPWZ1bmN0aW9uKHQsZSl7aWYoVHIpdGhyb3cgbmV3IEVycm9yKFwic2V0UlRMVGV4dFBsdWdpbiBjYW5ub3QgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLlwiKTtUcj0hMCxNcj10LEFyPWZ1bmN0aW9uKHQpe3Q/KFRyPSExLE1yPW51bGwsZSYmZSh0KSk6U3I9ITB9LEVyLmZpcmUobmV3IEwoXCJwbHVnaW5BdmFpbGFibGVcIix7cGx1Z2luVVJMOk1yLGNvbXBsZXRpb25DYWxsYmFjazpBcn0pKX0sZS52YWx1ZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHRbcl0pO3JldHVybiBlfSxlLmRlZmF1bHQkMjU9UmEsZS5yZWdpc3Rlcj1wcixlLkdMWVBIX1BCRl9CT1JERVI9TW8sZS5zaGFwZVRleHQ9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyl7dmFyIHU9dC50cmltKCk7Yz09PWpvLnZlcnRpY2FsJiYodT1mdW5jdGlvbih0KXtmb3IodmFyIGU9XCJcIixyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXQuY2hhckNvZGVBdChyKzEpfHxudWxsLGk9dC5jaGFyQ29kZUF0KHItMSl8fG51bGw7biYmd3IobikmJiFQYVt0W3IrMV1dfHxpJiZ3cihpKSYmIVBhW3Rbci0xXV18fCFQYVt0W3JdXT9lKz10W3JdOmUrPVBhW3Rbcl1dfXJldHVybiBlfSh1KSk7dmFyIGg9W10sZj17cG9zaXRpb25lZEdseXBoczpoLHRleHQ6dSx0b3A6c1sxXSxib3R0b206c1sxXSxsZWZ0OnNbMF0scmlnaHQ6c1swXSx3cml0aW5nTW9kZTpjfSxwPUNyLnByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dDtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwpe2Zvcih2YXIgYz0wLHU9LTE3LGg9MCxmPXQucG9zaXRpb25lZEdseXBocyxwPVwicmlnaHRcIj09PWE/MTpcImxlZnRcIj09PWE/MDouNSxkPTAsZz1yO2Q8Zy5sZW5ndGg7ZCs9MSl7dmFyIHY9Z1tkXTtpZigodj12LnRyaW0oKSkubGVuZ3RoKXtmb3IodmFyIG09Zi5sZW5ndGgseT0wO3k8di5sZW5ndGg7eSsrKXt2YXIgeD12LmNoYXJDb2RlQXQoeSksYj1lW3hdO2ImJihfcih4KSYmbyE9PWpvLmhvcml6b250YWw/KGYucHVzaCh7Z2x5cGg6eCx4OmMseTowLHZlcnRpY2FsOiEwfSksYys9bCtzKTooZi5wdXNoKHtnbHlwaDp4LHg6Yyx5OnUsdmVydGljYWw6ITF9KSxjKz1iLm1ldHJpY3MuYWR2YW5jZStzKSl9aWYoZi5sZW5ndGghPT1tKXt2YXIgXz1jLXM7aD1NYXRoLm1heChfLGgpLFhvKGYsZSxtLGYubGVuZ3RoLTEscCl9Yz0wLHUrPW59ZWxzZSB1Kz1ufXZhciB3PVdvKGkpLGs9dy5ob3Jpem9udGFsQWxpZ24sQT13LnZlcnRpY2FsQWxpZ247IWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcz0oZS1yKSppLGw9KC1uKm8rLjUpKmEsYz0wO2M8dC5sZW5ndGg7YysrKXRbY10ueCs9cyx0W2NdLnkrPWx9KGYscCxrLEEsaCxuLHIubGVuZ3RoKTt2YXIgVD1yLmxlbmd0aCpuO3QudG9wKz0tQSpULHQuYm90dG9tPXQudG9wK1QsdC5sZWZ0Kz0taypoLHQucmlnaHQ9dC5sZWZ0K2h9KGYsZSxwP3AodSxZbyh1LG8scixlKSk6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj0wLGk9MCxhPWU7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO3IucHVzaCh0LnN1YnN0cmluZyhuLG8pKSxuPW99cmV0dXJuIG48dC5sZW5ndGgmJnIucHVzaCh0LnN1YnN0cmluZyhuLHQubGVuZ3RoKSkscn0odSxZbyh1LG8scixlKSksbixpLGEsYyxvLGwpLCEhaC5sZW5ndGgmJmZ9LGUuc2hhcGVJY29uPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1XbyhyKSxpPW4uaG9yaXpvbnRhbEFsaWduLGE9bi52ZXJ0aWNhbEFsaWduLG89ZVswXSxzPWVbMV0sbD1vLXQuZGlzcGxheVNpemVbMF0qaSxjPWwrdC5kaXNwbGF5U2l6ZVswXSx1PXMtdC5kaXNwbGF5U2l6ZVsxXSphO3JldHVybntpbWFnZTp0LHRvcDp1LGJvdHRvbTp1K3QuZGlzcGxheVNpemVbMV0sbGVmdDpsLHJpZ2h0OmN9fSxlLmFsbG93c1ZlcnRpY2FsV3JpdGluZ01vZGU9eHIsZS5hbGxvd3NMZXR0ZXJTcGFjaW5nPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dDtlPHIubGVuZ3RoO2UrPTEpaWYoIWJyKHJbZV0uY2hhckNvZGVBdCgwKSkpcmV0dXJuITE7cmV0dXJuITB9LGUuZGVmYXVsdCQyNj1XaSxlLmRlZmF1bHQkMjc9UG8sZS5kZWZhdWx0JDI4PWVvLGUuZGVmYXVsdCQyOT1nYSxlLmRlZmF1bHQkMzA9aW8sZS5kZWZhdWx0JDMxPURvLGUuX19tb2R1bGVFeHBvcnRzPWdhLGUuZGVmYXVsdCQzMj1sLGUuX19tb2R1bGVFeHBvcnRzJDE9aW8sZS5wbHVnaW49Q3J9KSxpKDAsZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXt2YXIgcj10eXBlb2YgdDtpZihcIm51bWJlclwiPT09cnx8XCJib29sZWFuXCI9PT1yfHxcInN0cmluZ1wiPT09cnx8bnVsbD09dClyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCk7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBuPVwiW1wiLGk9MCxhPXQ7aTxhLmxlbmd0aDtpKz0xKW4rPWUoYVtpXSkrXCIsXCI7cmV0dXJuIG4rXCJdXCJ9Zm9yKHZhciBvPU9iamVjdC5rZXlzKHQpLnNvcnQoKSxzPVwie1wiLGw9MDtsPG8ubGVuZ3RoO2wrKylzKz1KU09OLnN0cmluZ2lmeShvW2xdKStcIjpcIitlKHRbb1tsXV0pK1wiLFwiO3JldHVybiBzK1wifVwifWZ1bmN0aW9uIHIocil7Zm9yKHZhciBuPVwiXCIsaT0wLGE9dC5kZWZhdWx0JDE4O2k8YS5sZW5ndGg7aSs9MSluKz1cIi9cIitlKHJbYVtpXV0pO3JldHVybiBufXZhciBuPWZ1bmN0aW9uKHQpe3QmJnRoaXMucmVwbGFjZSh0KX07ZnVuY3Rpb24gaSh0LGUscixuLGkpe2lmKHZvaWQgMD09PWUuc2VnbWVudClyZXR1cm4hMDtmb3IodmFyIGE9ZSxvPWUuc2VnbWVudCsxLHM9MDtzPi1yLzI7KXtpZigtLW88MClyZXR1cm4hMTtzLT10W29dLmRpc3QoYSksYT10W29dfXMrPXRbb10uZGlzdCh0W28rMV0pLG8rKztmb3IodmFyIGw9W10sYz0wO3M8ci8yOyl7dmFyIHU9dFtvLTFdLGg9dFtvXSxmPXRbbysxXTtpZighZilyZXR1cm4hMTt2YXIgcD11LmFuZ2xlVG8oaCktaC5hbmdsZVRvKGYpO2ZvcihwPU1hdGguYWJzKChwKzMqTWF0aC5QSSklKDIqTWF0aC5QSSktTWF0aC5QSSksbC5wdXNoKHtkaXN0YW5jZTpzLGFuZ2xlRGVsdGE6cH0pLGMrPXA7cy1sWzBdLmRpc3RhbmNlPm47KWMtPWwuc2hpZnQoKS5hbmdsZURlbHRhO2lmKGM+aSlyZXR1cm4hMTtvKysscys9aC5kaXN0KGYpfXJldHVybiEwfWZ1bmN0aW9uIGEoZSxyLG4sYSxvLHMsbCxjLHUpe3ZhciBoPWE/LjYqcypsOjAsZj1NYXRoLm1heChhP2EucmlnaHQtYS5sZWZ0OjAsbz9vLnJpZ2h0LW8ubGVmdDowKSxwPTA9PT1lWzBdLnh8fGVbMF0ueD09PXV8fDA9PT1lWzBdLnl8fGVbMF0ueT09PXU7cmV0dXJuIHItZipsPHIvNCYmKHI9ZipsK3IvNCksZnVuY3Rpb24gZShyLG4sYSxvLHMsbCxjLHUsaCl7Zm9yKHZhciBmPWwvMixwPTAsZD0wO2Q8ci5sZW5ndGgtMTtkKyspcCs9cltkXS5kaXN0KHJbZCsxXSk7Zm9yKHZhciBnPTAsdj1uLWEsbT1bXSx5PTA7eTxyLmxlbmd0aC0xO3krKyl7Zm9yKHZhciB4PXJbeV0sYj1yW3krMV0sXz14LmRpc3QoYiksdz1iLmFuZ2xlVG8oeCk7dithPGcrXzspe3ZhciBrPSgodis9YSktZykvXyxBPXQubnVtYmVyKHgueCxiLngsayksVD10Lm51bWJlcih4LnksYi55LGspO2lmKEE+PTAmJkE8aCYmVD49MCYmVDxoJiZ2LWY+PTAmJnYrZjw9cCl7dmFyIE09bmV3IHQuZGVmYXVsdCQyNShBLFQsdyx5KTtNLl9yb3VuZCgpLG8mJiFpKHIsTSxsLG8scyl8fG0ucHVzaChNKX19Zys9X31yZXR1cm4gdXx8bS5sZW5ndGh8fGN8fChtPWUocixnLzIsYSxvLHMsbCxjLCEwLGgpKSxtfShlLHA/ci8yKmMlcjooZi8yKzIqcykqbCpjJXIscixoLG4sZipsLHAsITEsdSl9bi5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbih0KXt0aGlzLl9sYXllckNvbmZpZ3M9e30sdGhpcy5fbGF5ZXJzPXt9LHRoaXMudXBkYXRlKHQsW10pfSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSxuKXtmb3IodmFyIGk9dGhpcyxhPTAsbz1lO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXTtpLl9sYXllckNvbmZpZ3Nbcy5pZF09czt2YXIgbD1pLl9sYXllcnNbcy5pZF09dC5kZWZhdWx0JDIyKHMpO2wuX2ZlYXR1cmVGaWx0ZXI9dC5kZWZhdWx0JDEzKGwuZmlsdGVyKX1mb3IodmFyIGM9MCx1PW47Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgaD11W2NdO2RlbGV0ZSBpLl9sYXllckNvbmZpZ3NbaF0sZGVsZXRlIGkuX2xheWVyc1toXX10aGlzLmZhbWlsaWVzQnlTb3VyY2U9e307Zm9yKHZhciBmPTAscD1mdW5jdGlvbih0KXtmb3IodmFyIGU9e30sbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT1yKHRbbl0pLGE9ZVtpXTthfHwoYT1lW2ldPVtdKSxhLnB1c2godFtuXSl9dmFyIG89W107Zm9yKHZhciBzIGluIGUpby5wdXNoKGVbc10pO3JldHVybiBvfSh0LnZhbHVlcyh0aGlzLl9sYXllckNvbmZpZ3MpKTtmPHAubGVuZ3RoO2YrPTEpe3ZhciBkPXBbZl0ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBpLl9sYXllcnNbdC5pZF19KSxnPWRbMF07aWYoXCJub25lXCIhPT1nLnZpc2liaWxpdHkpe3ZhciB2PWcuc291cmNlfHxcIlwiLG09aS5mYW1pbGllc0J5U291cmNlW3ZdO218fChtPWkuZmFtaWxpZXNCeVNvdXJjZVt2XT17fSk7dmFyIHk9Zy5zb3VyY2VMYXllcnx8XCJfZ2VvanNvblRpbGVMYXllclwiLHg9bVt5XTt4fHwoeD1tW3ldPVtdKSx4LnB1c2goZCl9fX07dmFyIG89ZnVuY3Rpb24oKXt0aGlzLm9wYWNpdHk9MCx0aGlzLnRhcmdldE9wYWNpdHk9MCx0aGlzLnRpbWU9MH07by5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbztyZXR1cm4gdC5vcGFjaXR5PXRoaXMub3BhY2l0eSx0LnRhcmdldE9wYWNpdHk9dGhpcy50YXJnZXRPcGFjaXR5LHQudGltZT10aGlzLnRpbWUsdH0sdC5yZWdpc3RlcihcIk9wYWNpdHlTdGF0ZVwiLG8pO3ZhciBzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7dmFyIGg9by50b3Aqcy1sLGY9by5ib3R0b20qcytsLHA9by5sZWZ0KnMtbCxkPW8ucmlnaHQqcytsO2lmKHRoaXMuYm94U3RhcnRJbmRleD10Lmxlbmd0aCxjKXt2YXIgZz1mLWgsdj1kLXA7Zz4wJiYoZz1NYXRoLm1heCgxMCpzLGcpLHRoaXMuX2FkZExpbmVDb2xsaXNpb25DaXJjbGVzKHQsZSxyLHIuc2VnbWVudCx2LGcsbixpLGEsdSkpfWVsc2UgdC5lbXBsYWNlQmFjayhyLngsci55LHAsaCxkLGYsbixpLGEsMCwwKTt0aGlzLmJveEVuZEluZGV4PXQubGVuZ3RofTtzLnByb3RvdHlwZS5fYWRkTGluZUNvbGxpc2lvbkNpcmNsZXM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyl7dmFyIHU9YS8yLGg9TWF0aC5mbG9vcihpL3UpLGY9MSsuNCpNYXRoLmxvZyhjKS9NYXRoLkxOMixwPU1hdGguZmxvb3IoaCpmLzIpLGQ9LWEvMixnPXIsdj1uKzEsbT1kLHk9LWkvMix4PXktaS80O2Rve2lmKC0tdjwwKXtpZihtPnkpcmV0dXJuO3Y9MDticmVha31tLT1lW3ZdLmRpc3QoZyksZz1lW3ZdfXdoaWxlKG0+eCk7Zm9yKHZhciBiPWVbdl0uZGlzdChlW3YrMV0pLF89LXA7XzxoK3A7XysrKXt2YXIgdz1fKnUsaz15K3c7aWYodzwwJiYoays9dyksdz5pJiYoays9dy1pKSwhKGs8bSkpe2Zvcig7bStiPGs7KXtpZihtKz1iLCsrdisxPj1lLmxlbmd0aClyZXR1cm47Yj1lW3ZdLmRpc3QoZVt2KzFdKX12YXIgQT1rLW0sVD1lW3ZdLE09ZVt2KzFdLnN1YihUKS5fdW5pdCgpLl9tdWx0KEEpLl9hZGQoVCkuX3JvdW5kKCksUz1NYXRoLmFicyhrLWQpPHU/MDouOCooay1kKTt0LmVtcGxhY2VCYWNrKE0ueCxNLnksLWEvMiwtYS8yLGEvMixhLzIsbyxzLGwsYS8yLFMpfX19O3ZhciBsPXUsYz11O2Z1bmN0aW9uIHUodCxlKXtpZighKHRoaXMgaW5zdGFuY2VvZiB1KSlyZXR1cm4gbmV3IHUodCxlKTtpZih0aGlzLmRhdGE9dHx8W10sdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmNvbXBhcmU9ZXx8aCx0aGlzLmxlbmd0aD4wKWZvcih2YXIgcj0odGhpcy5sZW5ndGg+PjEpLTE7cj49MDtyLS0pdGhpcy5fZG93bihyKX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTowfWZ1bmN0aW9uIGYoZSxyLG4pe3ZvaWQgMD09PXImJihyPTEpLHZvaWQgMD09PW4mJihuPSExKTtmb3IodmFyIGk9MS8wLGE9MS8wLG89LTEvMCxzPS0xLzAsYz1lWzBdLHU9MDt1PGMubGVuZ3RoO3UrKyl7dmFyIGg9Y1t1XTsoIXV8fGgueDxpKSYmKGk9aC54KSwoIXV8fGgueTxhKSYmKGE9aC55KSwoIXV8fGgueD5vKSYmKG89aC54KSwoIXV8fGgueT5zKSYmKHM9aC55KX12YXIgZj1vLWksZz1zLWEsdj1NYXRoLm1pbihmLGcpLG09di8yLHk9bmV3IGwobnVsbCxwKTtpZigwPT09dilyZXR1cm4gbmV3IHQuZGVmYXVsdCQxKGksYSk7Zm9yKHZhciB4PWk7eDxvO3grPXYpZm9yKHZhciBiPWE7YjxzO2IrPXYpeS5wdXNoKG5ldyBkKHgrbSxiK20sbSxlKSk7Zm9yKHZhciBfPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MCxuPTAsaT10WzBdLGE9MCxvPWkubGVuZ3RoLHM9by0xO2E8bztzPWErKyl7dmFyIGw9aVthXSxjPWlbc10sdT1sLngqYy55LWMueCpsLnk7cis9KGwueCtjLngpKnUsbis9KGwueStjLnkpKnUsZSs9Myp1fXJldHVybiBuZXcgZChyL2Usbi9lLDAsdCl9KGUpLHc9eS5sZW5ndGg7eS5sZW5ndGg7KXt2YXIgaz15LnBvcCgpOyhrLmQ+Xy5kfHwhXy5kKSYmKF89ayxuJiZjb25zb2xlLmxvZyhcImZvdW5kIGJlc3QgJWQgYWZ0ZXIgJWQgcHJvYmVzXCIsTWF0aC5yb3VuZCgxZTQqay5kKS8xZTQsdykpLGsubWF4LV8uZDw9cnx8KG09ay5oLzIseS5wdXNoKG5ldyBkKGsucC54LW0say5wLnktbSxtLGUpKSx5LnB1c2gobmV3IGQoay5wLngrbSxrLnAueS1tLG0sZSkpLHkucHVzaChuZXcgZChrLnAueC1tLGsucC55K20sbSxlKSkseS5wdXNoKG5ldyBkKGsucC54K20say5wLnkrbSxtLGUpKSx3Kz00KX1yZXR1cm4gbiYmKGNvbnNvbGUubG9nKFwibnVtIHByb2JlczogXCIrdyksY29uc29sZS5sb2coXCJiZXN0IGRpc3RhbmNlOiBcIitfLmQpKSxfLnB9ZnVuY3Rpb24gcCh0LGUpe3JldHVybiBlLm1heC10Lm1heH1mdW5jdGlvbiBkKGUscixuLGkpe3RoaXMucD1uZXcgdC5kZWZhdWx0JDEoZSxyKSx0aGlzLmg9bix0aGlzLmQ9ZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49ITEsaT0xLzAsYT0wO2E8ci5sZW5ndGg7YSsrKWZvcih2YXIgbz1yW2FdLHM9MCxsPW8ubGVuZ3RoLGM9bC0xO3M8bDtjPXMrKyl7dmFyIHU9b1tzXSxoPW9bY107dS55PmUueSE9aC55PmUueSYmZS54PChoLngtdS54KSooZS55LXUueSkvKGgueS11LnkpK3UueCYmKG49IW4pLGk9TWF0aC5taW4oaSx0LmRpc3RUb1NlZ21lbnRTcXVhcmVkKGUsdSxoKSl9cmV0dXJuKG4/MTotMSkqTWF0aC5zcXJ0KGkpfSh0aGlzLnAsaSksdGhpcy5tYXg9dGhpcy5kK3RoaXMuaCpNYXRoLlNRUlQyfWZ1bmN0aW9uIGcoZSxyLG4saSxhLG8pe2UuY3JlYXRlQXJyYXlzKCksZS5zeW1ib2xJbnN0YW5jZXM9W107dmFyIHM9NTEyKmUub3ZlcnNjYWxpbmc7ZS50aWxlUGl4ZWxSYXRpbz10LmRlZmF1bHQkOC9zLGUuY29tcGFyZVRleHQ9e30sZS5pY29uc05lZWRMaW5lYXI9ITE7dmFyIGw9ZS5sYXllcnNbMF0ubGF5b3V0LGM9ZS5sYXllcnNbMF0uX3VuZXZhbHVhdGVkTGF5b3V0Ll92YWx1ZXMsdT17fTtpZihcImNvbXBvc2l0ZVwiPT09ZS50ZXh0U2l6ZURhdGEuZnVuY3Rpb25UeXBlKXt2YXIgaD1lLnRleHRTaXplRGF0YS56b29tUmFuZ2UsZj1oLm1pbixwPWgubWF4O3UuY29tcG9zaXRlVGV4dFNpemVzPVtjW1widGV4dC1zaXplXCJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHQuZGVmYXVsdCQxNihmKSksY1tcInRleHQtc2l6ZVwiXS5wb3NzaWJseUV2YWx1YXRlKG5ldyB0LmRlZmF1bHQkMTYocCkpXX1pZihcImNvbXBvc2l0ZVwiPT09ZS5pY29uU2l6ZURhdGEuZnVuY3Rpb25UeXBlKXt2YXIgZD1lLmljb25TaXplRGF0YS56b29tUmFuZ2UsZz1kLm1pbixtPWQubWF4O3UuY29tcG9zaXRlSWNvblNpemVzPVtjW1wiaWNvbi1zaXplXCJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHQuZGVmYXVsdCQxNihnKSksY1tcImljb24tc2l6ZVwiXS5wb3NzaWJseUV2YWx1YXRlKG5ldyB0LmRlZmF1bHQkMTYobSkpXX11LmxheW91dFRleHRTaXplPWNbXCJ0ZXh0LXNpemVcIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgdC5kZWZhdWx0JDE2KGUuem9vbSsxKSksdS5sYXlvdXRJY29uU2l6ZT1jW1wiaWNvbi1zaXplXCJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHQuZGVmYXVsdCQxNihlLnpvb20rMSkpLHUudGV4dE1heFNpemU9Y1tcInRleHQtc2l6ZVwiXS5wb3NzaWJseUV2YWx1YXRlKG5ldyB0LmRlZmF1bHQkMTYoMTgpKTtmb3IodmFyIHk9MjQqbC5nZXQoXCJ0ZXh0LWxpbmUtaGVpZ2h0XCIpLHg9XCJtYXBcIj09PWwuZ2V0KFwidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnRcIikmJlwibGluZVwiPT09bC5nZXQoXCJzeW1ib2wtcGxhY2VtZW50XCIpLGI9bC5nZXQoXCJ0ZXh0LWtlZXAtdXByaWdodFwiKSxfPTAsdz1lLmZlYXR1cmVzO188dy5sZW5ndGg7Xys9MSl7dmFyIGs9d1tfXSxBPWwuZ2V0KFwidGV4dC1mb250XCIpLmV2YWx1YXRlKGspLmpvaW4oXCIsXCIpLFQ9cltBXXx8e30sTT1uW0FdfHx7fSxTPXt9LEU9ay50ZXh0O2lmKEUpe3ZhciBDPWwuZ2V0KFwidGV4dC1vZmZzZXRcIikuZXZhbHVhdGUoaykubWFwKGZ1bmN0aW9uKHQpe3JldHVybiAyNCp0fSksTD0yNCpsLmdldChcInRleHQtbGV0dGVyLXNwYWNpbmdcIikuZXZhbHVhdGUoayksej10LmFsbG93c0xldHRlclNwYWNpbmcoRSk/TDowLE89bC5nZXQoXCJ0ZXh0LWFuY2hvclwiKS5ldmFsdWF0ZShrKSxJPWwuZ2V0KFwidGV4dC1qdXN0aWZ5XCIpLmV2YWx1YXRlKGspLEQ9XCJsaW5lXCIhPT1sLmdldChcInN5bWJvbC1wbGFjZW1lbnRcIik/MjQqbC5nZXQoXCJ0ZXh0LW1heC13aWR0aFwiKS5ldmFsdWF0ZShrKTowO1MuaG9yaXpvbnRhbD10LnNoYXBlVGV4dChFLFQsRCx5LE8sSSx6LEMsMjQsdC5Xcml0aW5nTW9kZS5ob3Jpem9udGFsKSx0LmFsbG93c1ZlcnRpY2FsV3JpdGluZ01vZGUoRSkmJngmJmImJihTLnZlcnRpY2FsPXQuc2hhcGVUZXh0KEUsVCxELHksTyxJLHosQywyNCx0LldyaXRpbmdNb2RlLnZlcnRpY2FsKSl9dmFyIFA9dm9pZCAwO2lmKGsuaWNvbil7dmFyIFI9aVtrLmljb25dO1ImJihQPXQuc2hhcGVJY29uKGFbay5pY29uXSxsLmdldChcImljb24tb2Zmc2V0XCIpLmV2YWx1YXRlKGspLGwuZ2V0KFwiaWNvbi1hbmNob3JcIikuZXZhbHVhdGUoaykpLHZvaWQgMD09PWUuc2RmSWNvbnM/ZS5zZGZJY29ucz1SLnNkZjplLnNkZkljb25zIT09Ui5zZGYmJnQud2Fybk9uY2UoXCJTdHlsZSBzaGVldCB3YXJuaW5nOiBDYW5ub3QgbWl4IFNERiBhbmQgbm9uLVNERiBpY29ucyBpbiBvbmUgYnVmZmVyXCIpLFIucGl4ZWxSYXRpbyE9PWUucGl4ZWxSYXRpbz9lLmljb25zTmVlZExpbmVhcj0hMDowIT09bC5nZXQoXCJpY29uLXJvdGF0ZVwiKS5jb25zdGFudE9yKDEpJiYoZS5pY29uc05lZWRMaW5lYXI9ITApKX0oUy5ob3Jpem9udGFsfHxQKSYmdihlLGssUyxQLE0sdSl9byYmZS5nZW5lcmF0ZUNvbGxpc2lvbkRlYnVnQnVmZmVycygpfWZ1bmN0aW9uIHYoZSxyLG4saSxsLGMpe3ZhciB1PWMubGF5b3V0VGV4dFNpemUuZXZhbHVhdGUociksaD1jLmxheW91dEljb25TaXplLmV2YWx1YXRlKHIpLHA9Yy50ZXh0TWF4U2l6ZS5ldmFsdWF0ZShyKTt2b2lkIDA9PT1wJiYocD11KTt2YXIgZD1lLmxheWVyc1swXS5sYXlvdXQsZz1kLmdldChcInRleHQtb2Zmc2V0XCIpLmV2YWx1YXRlKHIpLHY9ZC5nZXQoXCJpY29uLW9mZnNldFwiKS5ldmFsdWF0ZShyKSx4PXUvMjQsYj1lLnRpbGVQaXhlbFJhdGlvKngsXz1lLnRpbGVQaXhlbFJhdGlvKnAvMjQsdz1lLnRpbGVQaXhlbFJhdGlvKmgsaz1lLnRpbGVQaXhlbFJhdGlvKmQuZ2V0KFwic3ltYm9sLXNwYWNpbmdcIiksQT1kLmdldChcInRleHQtcGFkZGluZ1wiKSplLnRpbGVQaXhlbFJhdGlvLFQ9ZC5nZXQoXCJpY29uLXBhZGRpbmdcIikqZS50aWxlUGl4ZWxSYXRpbyxNPWQuZ2V0KFwidGV4dC1tYXgtYW5nbGVcIikvMTgwKk1hdGguUEksUz1cIm1hcFwiPT09ZC5nZXQoXCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudFwiKSYmXCJsaW5lXCI9PT1kLmdldChcInN5bWJvbC1wbGFjZW1lbnRcIiksRT1cIm1hcFwiPT09ZC5nZXQoXCJpY29uLXJvdGF0aW9uLWFsaWdubWVudFwiKSYmXCJsaW5lXCI9PT1kLmdldChcInN5bWJvbC1wbGFjZW1lbnRcIiksQz1rLzIsTD1mdW5jdGlvbihhLHUpe3UueDwwfHx1Lng+PXQuZGVmYXVsdCQ4fHx1Lnk8MHx8dS55Pj10LmRlZmF1bHQkOHx8ZS5zeW1ib2xJbnN0YW5jZXMucHVzaChmdW5jdGlvbihlLHIsbixpLGEsbCxjLHUsaCxmLHAsZCxnLHYseSx4LGIsXyx3LGssQSl7dmFyIFQsTSxTPWUuYWRkVG9MaW5lVmVydGV4QXJyYXkocixuKSxFPTAsQz0wLEw9MCx6PWkuaG9yaXpvbnRhbD9pLmhvcml6b250YWwudGV4dDpcIlwiLE89W107aS5ob3Jpem9udGFsJiYoVD1uZXcgcyhjLG4scix1LGgsZixpLmhvcml6b250YWwscCxkLGcsZS5vdmVyc2NhbGluZyksQys9bShlLHIsaS5ob3Jpem9udGFsLGwsZyx3LHYsUyxpLnZlcnRpY2FsP3QuV3JpdGluZ01vZGUuaG9yaXpvbnRhbDp0LldyaXRpbmdNb2RlLmhvcml6b250YWxPbmx5LE8sayxBKSxpLnZlcnRpY2FsJiYoTCs9bShlLHIsaS52ZXJ0aWNhbCxsLGcsdyx2LFMsdC5Xcml0aW5nTW9kZS52ZXJ0aWNhbCxPLGssQSkpKTt2YXIgST1UP1QuYm94U3RhcnRJbmRleDplLmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aCxEPVQ/VC5ib3hFbmRJbmRleDplLmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDtpZihhKXt2YXIgUD1mdW5jdGlvbihlLHIsbixpLGEsbyl7dmFyIHMsbCxjLHUsaD1yLmltYWdlLGY9bi5sYXlvdXQscD1yLnRvcC0xL2gucGl4ZWxSYXRpbyxkPXIubGVmdC0xL2gucGl4ZWxSYXRpbyxnPXIuYm90dG9tKzEvaC5waXhlbFJhdGlvLHY9ci5yaWdodCsxL2gucGl4ZWxSYXRpbztpZihcIm5vbmVcIiE9PWYuZ2V0KFwiaWNvbi10ZXh0LWZpdFwiKSYmYSl7dmFyIG09di1kLHk9Zy1wLHg9Zi5nZXQoXCJ0ZXh0LXNpemVcIikuZXZhbHVhdGUobykvMjQsYj1hLmxlZnQqeCxfPWEucmlnaHQqeCx3PWEudG9wKngsaz1fLWIsQT1hLmJvdHRvbSp4LXcsVD1mLmdldChcImljb24tdGV4dC1maXQtcGFkZGluZ1wiKVswXSxNPWYuZ2V0KFwiaWNvbi10ZXh0LWZpdC1wYWRkaW5nXCIpWzFdLFM9Zi5nZXQoXCJpY29uLXRleHQtZml0LXBhZGRpbmdcIilbMl0sRT1mLmdldChcImljb24tdGV4dC1maXQtcGFkZGluZ1wiKVszXSxDPVwid2lkdGhcIj09PWYuZ2V0KFwiaWNvbi10ZXh0LWZpdFwiKT8uNSooQS15KTowLEw9XCJoZWlnaHRcIj09PWYuZ2V0KFwiaWNvbi10ZXh0LWZpdFwiKT8uNSooay1tKTowLHo9XCJ3aWR0aFwiPT09Zi5nZXQoXCJpY29uLXRleHQtZml0XCIpfHxcImJvdGhcIj09PWYuZ2V0KFwiaWNvbi10ZXh0LWZpdFwiKT9rOm0sTz1cImhlaWdodFwiPT09Zi5nZXQoXCJpY29uLXRleHQtZml0XCIpfHxcImJvdGhcIj09PWYuZ2V0KFwiaWNvbi10ZXh0LWZpdFwiKT9BOnk7cz1uZXcgdC5kZWZhdWx0JDEoYitMLUUsdytDLVQpLGw9bmV3IHQuZGVmYXVsdCQxKGIrTCtNK3osdytDLVQpLGM9bmV3IHQuZGVmYXVsdCQxKGIrTCtNK3osdytDK1MrTyksdT1uZXcgdC5kZWZhdWx0JDEoYitMLUUsdytDK1MrTyl9ZWxzZSBzPW5ldyB0LmRlZmF1bHQkMShkLHApLGw9bmV3IHQuZGVmYXVsdCQxKHYscCksYz1uZXcgdC5kZWZhdWx0JDEodixnKSx1PW5ldyB0LmRlZmF1bHQkMShkLGcpO3ZhciBJPW4ubGF5b3V0LmdldChcImljb24tcm90YXRlXCIpLmV2YWx1YXRlKG8pKk1hdGguUEkvMTgwO2lmKEkpe3ZhciBEPU1hdGguc2luKEkpLFA9TWF0aC5jb3MoSSksUj1bUCwtRCxELFBdO3MuX21hdE11bHQoUiksbC5fbWF0TXVsdChSKSx1Ll9tYXRNdWx0KFIpLGMuX21hdE11bHQoUil9cmV0dXJuW3t0bDpzLHRyOmwsYmw6dSxicjpjLHRleDpoLnBhZGRlZFJlY3Qsd3JpdGluZ01vZGU6dm9pZCAwLGdseXBoT2Zmc2V0OlswLDBdfV19KDAsYSxsLDAsaS5ob3Jpem9udGFsLHcpO009bmV3IHMoYyxuLHIsdSxoLGYsYSx5LHgsITEsZS5vdmVyc2NhbGluZyksRT00KlAubGVuZ3RoO3ZhciBSPWUuaWNvblNpemVEYXRhLEY9bnVsbDtcInNvdXJjZVwiPT09Ui5mdW5jdGlvblR5cGU/Rj1bMTAqbC5sYXlvdXQuZ2V0KFwiaWNvbi1zaXplXCIpLmV2YWx1YXRlKHcpXTpcImNvbXBvc2l0ZVwiPT09Ui5mdW5jdGlvblR5cGUmJihGPVsxMCpBLmNvbXBvc2l0ZUljb25TaXplc1swXS5ldmFsdWF0ZSh3KSwxMCpBLmNvbXBvc2l0ZUljb25TaXplc1sxXS5ldmFsdWF0ZSh3KV0pLGUuYWRkU3ltYm9scyhlLmljb24sUCxGLF8sYix3LCExLHIsUy5saW5lU3RhcnRJbmRleCxTLmxpbmVMZW5ndGgpfXZhciBCPU0/TS5ib3hTdGFydEluZGV4OmUuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoLE49TT9NLmJveEVuZEluZGV4OmUuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoO3JldHVybiBlLmdseXBoT2Zmc2V0QXJyYXkubGVuZ3RoPj10LmRlZmF1bHQkMTQuTUFYX0dMWVBIUyYmdC53YXJuT25jZShcIlRvbyBtYW55IGdseXBocyBiZWluZyByZW5kZXJlZCBpbiBhIHRpbGUuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvMjkwN1wiKSx7a2V5OnosdGV4dEJveFN0YXJ0SW5kZXg6SSx0ZXh0Qm94RW5kSW5kZXg6RCxpY29uQm94U3RhcnRJbmRleDpCLGljb25Cb3hFbmRJbmRleDpOLHRleHRPZmZzZXQ6dixpY29uT2Zmc2V0Ol8sYW5jaG9yOnIsbGluZTpuLGZlYXR1cmVJbmRleDp1LGZlYXR1cmU6dyxudW1HbHlwaFZlcnRpY2VzOkMsbnVtVmVydGljYWxHbHlwaFZlcnRpY2VzOkwsbnVtSWNvblZlcnRpY2VzOkUsdGV4dE9wYWNpdHlTdGF0ZTpuZXcgbyxpY29uT3BhY2l0eVN0YXRlOm5ldyBvLGlzRHVwbGljYXRlOiExLHBsYWNlZFRleHRTeW1ib2xJbmRpY2VzOk8sY3Jvc3NUaWxlSUQ6MH19KGUsdSxhLG4saSxlLmxheWVyc1swXSxlLmNvbGxpc2lvbkJveEFycmF5LHIuaW5kZXgsci5zb3VyY2VMYXllckluZGV4LGUuaW5kZXgsYixBLFMsZyx3LFQsRSx2LHIsbCxjKSl9O2lmKFwibGluZVwiPT09ZC5nZXQoXCJzeW1ib2wtcGxhY2VtZW50XCIpKWZvcih2YXIgej0wLE89ZnVuY3Rpb24oZSxyLG4saSxhKXtmb3IodmFyIG89W10scz0wO3M8ZS5sZW5ndGg7cysrKWZvcih2YXIgbD1lW3NdLGM9dm9pZCAwLHU9MDt1PGwubGVuZ3RoLTE7dSsrKXt2YXIgaD1sW3VdLGY9bFt1KzFdO2gueDwwJiZmLng8MHx8KGgueDwwP2g9bmV3IHQuZGVmYXVsdCQxKDAsaC55KyhmLnktaC55KSooKDAtaC54KS8oZi54LWgueCkpKS5fcm91bmQoKTpmLng8MCYmKGY9bmV3IHQuZGVmYXVsdCQxKDAsaC55KyhmLnktaC55KSooKDAtaC54KS8oZi54LWgueCkpKS5fcm91bmQoKSksaC55PDAmJmYueTwwfHwoaC55PDA/aD1uZXcgdC5kZWZhdWx0JDEoaC54KyhmLngtaC54KSooKDAtaC55KS8oZi55LWgueSkpLDApLl9yb3VuZCgpOmYueTwwJiYoZj1uZXcgdC5kZWZhdWx0JDEoaC54KyhmLngtaC54KSooKDAtaC55KS8oZi55LWgueSkpLDApLl9yb3VuZCgpKSxoLng+PWkmJmYueD49aXx8KGgueD49aT9oPW5ldyB0LmRlZmF1bHQkMShpLGgueSsoZi55LWgueSkqKChpLWgueCkvKGYueC1oLngpKSkuX3JvdW5kKCk6Zi54Pj1pJiYoZj1uZXcgdC5kZWZhdWx0JDEoaSxoLnkrKGYueS1oLnkpKigoaS1oLngpLyhmLngtaC54KSkpLl9yb3VuZCgpKSxoLnk+PWEmJmYueT49YXx8KGgueT49YT9oPW5ldyB0LmRlZmF1bHQkMShoLngrKGYueC1oLngpKigoYS1oLnkpLyhmLnktaC55KSksYSkuX3JvdW5kKCk6Zi55Pj1hJiYoZj1uZXcgdC5kZWZhdWx0JDEoaC54KyhmLngtaC54KSooKGEtaC55KS8oZi55LWgueSkpLGEpLl9yb3VuZCgpKSxjJiZoLmVxdWFscyhjW2MubGVuZ3RoLTFdKXx8KGM9W2hdLG8ucHVzaChjKSksYy5wdXNoKGYpKSkpKX1yZXR1cm4gb30oci5nZW9tZXRyeSwwLDAsdC5kZWZhdWx0JDgsdC5kZWZhdWx0JDgpO3o8Ty5sZW5ndGg7eis9MSlmb3IodmFyIEk9T1t6XSxEPTAsUD1hKEksayxNLG4udmVydGljYWx8fG4uaG9yaXpvbnRhbCxpLDI0LF8sZS5vdmVyc2NhbGluZyx0LmRlZmF1bHQkOCk7RDxQLmxlbmd0aDtEKz0xKXt2YXIgUj1QW0RdLEY9bi5ob3Jpem9udGFsO0YmJnkoZSxGLnRleHQsQyxSKXx8TChJLFIpfWVsc2UgaWYoXCJQb2x5Z29uXCI9PT1yLnR5cGUpZm9yKHZhciBCPTAsTj10LmRlZmF1bHQkMjYoci5nZW9tZXRyeSwwKTtCPE4ubGVuZ3RoO0IrPTEpe3ZhciBqPU5bQl0sVj1mKGosMTYpO0woalswXSxuZXcgdC5kZWZhdWx0JDI1KFYueCxWLnksMCkpfWVsc2UgaWYoXCJMaW5lU3RyaW5nXCI9PT1yLnR5cGUpZm9yKHZhciBVPTAscT1yLmdlb21ldHJ5O1U8cS5sZW5ndGg7VSs9MSl7dmFyIEg9cVtVXTtMKEgsbmV3IHQuZGVmYXVsdCQyNShIWzBdLngsSFswXS55LDApKX1lbHNlIGlmKFwiUG9pbnRcIj09PXIudHlwZSlmb3IodmFyIEc9MCxZPXIuZ2VvbWV0cnk7RzxZLmxlbmd0aDtHKz0xKWZvcih2YXIgVz0wLFg9WVtHXTtXPFgubGVuZ3RoO1crPTEpe3ZhciBaPVhbV107TChbWl0sbmV3IHQuZGVmYXVsdCQyNShaLngsWi55LDApKX19ZnVuY3Rpb24gbShlLHIsbixpLGEsbyxzLGwsYyx1LGgsZil7dmFyIHA9ZnVuY3Rpb24oZSxyLG4saSxhLG8pe2Zvcih2YXIgcz1uLmxheW91dC5nZXQoXCJ0ZXh0LXJvdGF0ZVwiKS5ldmFsdWF0ZShhKSpNYXRoLlBJLzE4MCxsPW4ubGF5b3V0LmdldChcInRleHQtb2Zmc2V0XCIpLmV2YWx1YXRlKGEpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gMjQqdH0pLGM9ci5wb3NpdGlvbmVkR2x5cGhzLHU9W10saD0wO2g8Yy5sZW5ndGg7aCsrKXt2YXIgZj1jW2hdLHA9b1tmLmdseXBoXTtpZihwKXt2YXIgZD1wLnJlY3Q7aWYoZCl7dmFyIGc9dC5HTFlQSF9QQkZfQk9SREVSKzEsdj1wLm1ldHJpY3MuYWR2YW5jZS8yLG09aT9bZi54K3YsZi55XTpbMCwwXSx5PWk/WzAsMF06W2YueCt2K2xbMF0sZi55K2xbMV1dLHg9cC5tZXRyaWNzLmxlZnQtZy12K3lbMF0sYj0tcC5tZXRyaWNzLnRvcC1nK3lbMV0sXz14K2Qudyx3PWIrZC5oLGs9bmV3IHQuZGVmYXVsdCQxKHgsYiksQT1uZXcgdC5kZWZhdWx0JDEoXyxiKSxUPW5ldyB0LmRlZmF1bHQkMSh4LHcpLE09bmV3IHQuZGVmYXVsdCQxKF8sdyk7aWYoaSYmZi52ZXJ0aWNhbCl7dmFyIFM9bmV3IHQuZGVmYXVsdCQxKC12LHYpLEU9LU1hdGguUEkvMixDPW5ldyB0LmRlZmF1bHQkMSg1LDApO2suX3JvdGF0ZUFyb3VuZChFLFMpLl9hZGQoQyksQS5fcm90YXRlQXJvdW5kKEUsUykuX2FkZChDKSxULl9yb3RhdGVBcm91bmQoRSxTKS5fYWRkKEMpLE0uX3JvdGF0ZUFyb3VuZChFLFMpLl9hZGQoQyl9aWYocyl7dmFyIEw9TWF0aC5zaW4ocyksej1NYXRoLmNvcyhzKSxPPVt6LC1MLEwsel07ay5fbWF0TXVsdChPKSxBLl9tYXRNdWx0KE8pLFQuX21hdE11bHQoTyksTS5fbWF0TXVsdChPKX11LnB1c2goe3RsOmssdHI6QSxibDpULGJyOk0sdGV4OmQsd3JpdGluZ01vZGU6ci53cml0aW5nTW9kZSxnbHlwaE9mZnNldDptfSl9fX1yZXR1cm4gdX0oMCxuLGksYSxvLGgpLGQ9ZS50ZXh0U2l6ZURhdGEsZz1udWxsO3JldHVyblwic291cmNlXCI9PT1kLmZ1bmN0aW9uVHlwZT9nPVsxMCppLmxheW91dC5nZXQoXCJ0ZXh0LXNpemVcIikuZXZhbHVhdGUobyldOlwiY29tcG9zaXRlXCI9PT1kLmZ1bmN0aW9uVHlwZSYmKGc9WzEwKmYuY29tcG9zaXRlVGV4dFNpemVzWzBdLmV2YWx1YXRlKG8pLDEwKmYuY29tcG9zaXRlVGV4dFNpemVzWzFdLmV2YWx1YXRlKG8pXSksZS5hZGRTeW1ib2xzKGUudGV4dCxwLGcscyxhLG8sYyxyLGwubGluZVN0YXJ0SW5kZXgsbC5saW5lTGVuZ3RoKSx1LnB1c2goZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5Lmxlbmd0aC0xKSw0KnAubGVuZ3RofWZ1bmN0aW9uIHkodCxlLHIsbil7dmFyIGk9dC5jb21wYXJlVGV4dDtpZihlIGluIGkpe2Zvcih2YXIgYT1pW2VdLG89YS5sZW5ndGgtMTtvPj0wO28tLSlpZihuLmRpc3QoYVtvXSk8cilyZXR1cm4hMH1lbHNlIGlbZV09W107cmV0dXJuIGlbZV0ucHVzaChuKSwhMX11LnByb3RvdHlwZT17cHVzaDpmdW5jdGlvbih0KXt0aGlzLmRhdGEucHVzaCh0KSx0aGlzLmxlbmd0aCsrLHRoaXMuX3VwKHRoaXMubGVuZ3RoLTEpfSxwb3A6ZnVuY3Rpb24oKXtpZigwIT09dGhpcy5sZW5ndGgpe3ZhciB0PXRoaXMuZGF0YVswXTtyZXR1cm4gdGhpcy5sZW5ndGgtLSx0aGlzLmxlbmd0aD4wJiYodGhpcy5kYXRhWzBdPXRoaXMuZGF0YVt0aGlzLmxlbmd0aF0sdGhpcy5fZG93bigwKSksdGhpcy5kYXRhLnBvcCgpLHR9fSxwZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YVswXX0sX3VwOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmRhdGEscj10aGlzLmNvbXBhcmUsbj1lW3RdO3Q+MDspe3ZhciBpPXQtMT4+MSxhPWVbaV07aWYocihuLGEpPj0wKWJyZWFrO2VbdF09YSx0PWl9ZVt0XT1ufSxfZG93bjpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5kYXRhLHI9dGhpcy5jb21wYXJlLG49dGhpcy5sZW5ndGg+PjEsaT1lW3RdO3Q8bjspe3ZhciBhPTErKHQ8PDEpLG89YSsxLHM9ZVthXTtpZihvPHRoaXMubGVuZ3RoJiZyKGVbb10scyk8MCYmKGE9byxzPWVbb10pLHIocyxpKT49MClicmVhaztlW3RdPXMsdD1hfWVbdF09aX19LGwuZGVmYXVsdD1jO3ZhciB4PWZ1bmN0aW9uKGUpe3ZhciByPW5ldyB0LkFscGhhSW1hZ2Uoe3dpZHRoOjAsaGVpZ2h0OjB9KSxuPXt9LGk9bmV3IHQuZGVmYXVsdCQyKDAsMCx7YXV0b1Jlc2l6ZTohMH0pO2Zvcih2YXIgYSBpbiBlKXt2YXIgbz1lW2FdLHM9blthXT17fTtmb3IodmFyIGwgaW4gbyl7dmFyIGM9b1srbF07aWYoYyYmMCE9PWMuYml0bWFwLndpZHRoJiYwIT09Yy5iaXRtYXAuaGVpZ2h0KXt2YXIgdT1pLnBhY2tPbmUoYy5iaXRtYXAud2lkdGgrMixjLmJpdG1hcC5oZWlnaHQrMik7ci5yZXNpemUoe3dpZHRoOmkudyxoZWlnaHQ6aS5ofSksdC5BbHBoYUltYWdlLmNvcHkoYy5iaXRtYXAscix7eDowLHk6MH0se3g6dS54KzEseTp1LnkrMX0sYy5iaXRtYXApLHNbbF09e3JlY3Q6dSxtZXRyaWNzOmMubWV0cmljc319fX1pLnNocmluaygpLHIucmVzaXplKHt3aWR0aDppLncsaGVpZ2h0OmkuaH0pLHRoaXMuaW1hZ2U9cix0aGlzLnBvc2l0aW9ucz1ufTt0LnJlZ2lzdGVyKFwiR2x5cGhBdGxhc1wiLHgpO3ZhciBiPWZ1bmN0aW9uKGUpe3RoaXMudGlsZUlEPW5ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS50aWxlSUQub3ZlcnNjYWxlZFosZS50aWxlSUQud3JhcCxlLnRpbGVJRC5jYW5vbmljYWwueixlLnRpbGVJRC5jYW5vbmljYWwueCxlLnRpbGVJRC5jYW5vbmljYWwueSksdGhpcy51aWQ9ZS51aWQsdGhpcy56b29tPWUuem9vbSx0aGlzLnBpeGVsUmF0aW89ZS5waXhlbFJhdGlvLHRoaXMudGlsZVNpemU9ZS50aWxlU2l6ZSx0aGlzLnNvdXJjZT1lLnNvdXJjZSx0aGlzLm92ZXJzY2FsaW5nPXRoaXMudGlsZUlELm92ZXJzY2FsZUZhY3RvcigpLHRoaXMuc2hvd0NvbGxpc2lvbkJveGVzPWUuc2hvd0NvbGxpc2lvbkJveGVzLHRoaXMuY29sbGVjdFJlc291cmNlVGltaW5nPSEhZS5jb2xsZWN0UmVzb3VyY2VUaW1pbmd9O2Z1bmN0aW9uIF8oZSxyKXtmb3IodmFyIG49bmV3IHQuZGVmYXVsdCQxNihyKSxpPTAsYT1lO2k8YS5sZW5ndGg7aSs9MSlhW2ldLnJlY2FsY3VsYXRlKG4pfWIucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXRoaXM7dGhpcy5zdGF0dXM9XCJwYXJzaW5nXCIsdGhpcy5kYXRhPWUsdGhpcy5jb2xsaXNpb25Cb3hBcnJheT1uZXcgdC5Db2xsaXNpb25Cb3hBcnJheTt2YXIgbz1uZXcgdC5kZWZhdWx0JDI3KE9iamVjdC5rZXlzKGUubGF5ZXJzKS5zb3J0KCkpLHM9bmV3IHQuZGVmYXVsdCQxMSh0aGlzLnRpbGVJRCk7cy5idWNrZXRMYXllcklEcz1bXTt2YXIgbCxjLHUsaD17fSxmPXtmZWF0dXJlSW5kZXg6cyxpY29uRGVwZW5kZW5jaWVzOnt9LGdseXBoRGVwZW5kZW5jaWVzOnt9fSxwPXIuZmFtaWxpZXNCeVNvdXJjZVt0aGlzLnNvdXJjZV07Zm9yKHZhciBkIGluIHApe3ZhciB2PWUubGF5ZXJzW2RdO2lmKHYpezE9PT12LnZlcnNpb24mJnQud2Fybk9uY2UoJ1ZlY3RvciB0aWxlIHNvdXJjZSBcIicrYS5zb3VyY2UrJ1wiIGxheWVyIFwiJytkKydcIiBkb2VzIG5vdCB1c2UgdmVjdG9yIHRpbGUgc3BlYyB2MiBhbmQgdGhlcmVmb3JlIG1heSBoYXZlIHNvbWUgcmVuZGVyaW5nIGVycm9ycy4nKTtmb3IodmFyIG09by5lbmNvZGUoZCkseT1bXSxiPTA7Yjx2Lmxlbmd0aDtiKyspe3ZhciB3PXYuZmVhdHVyZShiKTt5LnB1c2goe2ZlYXR1cmU6dyxpbmRleDpiLHNvdXJjZUxheWVySW5kZXg6bX0pfWZvcih2YXIgaz0wLEE9cFtkXTtrPEEubGVuZ3RoO2srPTEpe3ZhciBUPUFba10sTT1UWzBdO00ubWluem9vbSYmYS56b29tPE1hdGguZmxvb3IoTS5taW56b29tKXx8TS5tYXh6b29tJiZhLnpvb20+PU0ubWF4em9vbXx8XCJub25lXCIhPT1NLnZpc2liaWxpdHkmJihfKFQsYS56b29tKSwoaFtNLmlkXT1NLmNyZWF0ZUJ1Y2tldCh7aW5kZXg6cy5idWNrZXRMYXllcklEcy5sZW5ndGgsbGF5ZXJzOlQsem9vbTphLnpvb20scGl4ZWxSYXRpbzphLnBpeGVsUmF0aW8sb3ZlcnNjYWxpbmc6YS5vdmVyc2NhbGluZyxjb2xsaXNpb25Cb3hBcnJheTphLmNvbGxpc2lvbkJveEFycmF5LHNvdXJjZUxheWVySW5kZXg6bX0pKS5wb3B1bGF0ZSh5LGYpLHMuYnVja2V0TGF5ZXJJRHMucHVzaChULm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSl9fX12YXIgUz10Lm1hcE9iamVjdChmLmdseXBoRGVwZW5kZW5jaWVzLGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5tYXAoTnVtYmVyKX0pO09iamVjdC5rZXlzKFMpLmxlbmd0aD9uLnNlbmQoXCJnZXRHbHlwaHNcIix7dWlkOnRoaXMudWlkLHN0YWNrczpTfSxmdW5jdGlvbih0LGUpe2x8fChsPXQsYz1lLEMuY2FsbChhKSl9KTpjPXt9O3ZhciBFPU9iamVjdC5rZXlzKGYuaWNvbkRlcGVuZGVuY2llcyk7ZnVuY3Rpb24gQygpe2lmKGwpcmV0dXJuIGkobCk7aWYoYyYmdSl7dmFyIGU9bmV3IHgoYykscj1uZXcgdC5kZWZhdWx0JDI4KHUpO2Zvcih2YXIgbiBpbiBoKXt2YXIgYT1oW25dO2EgaW5zdGFuY2VvZiB0LmRlZmF1bHQkMTQmJihfKGEubGF5ZXJzLHRoaXMuem9vbSksZyhhLGMsZS5wb3NpdGlvbnMsdSxyLnBvc2l0aW9ucyx0aGlzLnNob3dDb2xsaXNpb25Cb3hlcykpfXRoaXMuc3RhdHVzPVwiZG9uZVwiLGkobnVsbCx7YnVja2V0czp0LnZhbHVlcyhoKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuaXNFbXB0eSgpfSksZmVhdHVyZUluZGV4OnMsY29sbGlzaW9uQm94QXJyYXk6dGhpcy5jb2xsaXNpb25Cb3hBcnJheSxnbHlwaEF0bGFzSW1hZ2U6ZS5pbWFnZSxpY29uQXRsYXNJbWFnZTpyLmltYWdlfSl9fUUubGVuZ3RoP24uc2VuZChcImdldEltYWdlc1wiLHtpY29uczpFfSxmdW5jdGlvbih0LGUpe2x8fChsPXQsdT1lLEMuY2FsbChhKSl9KTp1PXt9LEMuY2FsbCh0aGlzKX07dmFyIHc9ZnVuY3Rpb24odCl7cmV0dXJuISghcGVyZm9ybWFuY2V8fCFwZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlOYW1lKSYmcGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5TmFtZSh0KX07ZnVuY3Rpb24gayhlLHIpe3ZhciBuPXQuZ2V0QXJyYXlCdWZmZXIoZS5yZXF1ZXN0LGZ1bmN0aW9uKGUsbil7ZT9yKGUpOm4mJnIobnVsbCx7dmVjdG9yVGlsZTpuZXcgdC5kZWZhdWx0JDI5LlZlY3RvclRpbGUobmV3IHQuZGVmYXVsdCQzMChuLmRhdGEpKSxyYXdEYXRhOm4uZGF0YSxjYWNoZUNvbnRyb2w6bi5jYWNoZUNvbnRyb2wsZXhwaXJlczpuLmV4cGlyZXN9KX0pO3JldHVybiBmdW5jdGlvbigpe24uYWJvcnQoKSxyKCl9fXZhciBBPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmFjdG9yPXQsdGhpcy5sYXllckluZGV4PWUsdGhpcy5sb2FkVmVjdG9yRGF0YT1yfHxrLHRoaXMubG9hZGluZz17fSx0aGlzLmxvYWRlZD17fX07QS5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLGk9ZS51aWQ7dGhpcy5sb2FkaW5nfHwodGhpcy5sb2FkaW5nPXt9KTt2YXIgYT10aGlzLmxvYWRpbmdbaV09bmV3IGIoZSk7YS5hYm9ydD10aGlzLmxvYWRWZWN0b3JEYXRhKGUsZnVuY3Rpb24obyxzKXtpZihkZWxldGUgbi5sb2FkaW5nW2ldLG98fCFzKXJldHVybiByKG8pO3ZhciBsPXMucmF3RGF0YSxjPXt9O3MuZXhwaXJlcyYmKGMuZXhwaXJlcz1zLmV4cGlyZXMpLHMuY2FjaGVDb250cm9sJiYoYy5jYWNoZUNvbnRyb2w9cy5jYWNoZUNvbnRyb2wpO3ZhciB1PXt9O2lmKGUucmVxdWVzdCYmZS5yZXF1ZXN0LmNvbGxlY3RSZXNvdXJjZVRpbWluZyl7dmFyIGg9dyhlLnJlcXVlc3QudXJsKTtoJiYodS5yZXNvdXJjZVRpbWluZz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGgpKSl9YS52ZWN0b3JUaWxlPXMudmVjdG9yVGlsZSxhLnBhcnNlKHMudmVjdG9yVGlsZSxuLmxheWVySW5kZXgsbi5hY3RvcixmdW5jdGlvbihlLG4pe2lmKGV8fCFuKXJldHVybiByKGUpO3IobnVsbCx0LmV4dGVuZCh7cmF3VGlsZURhdGE6bC5zbGljZSgwKX0sbixjLHUpKX0pLG4ubG9hZGVkPW4ubG9hZGVkfHx7fSxuLmxvYWRlZFtpXT1hfSl9LEEucHJvdG90eXBlLnJlbG9hZFRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxvYWRlZCxuPXQudWlkLGk9dGhpcztpZihyJiZyW25dKXt2YXIgYT1yW25dO2Euc2hvd0NvbGxpc2lvbkJveGVzPXQuc2hvd0NvbGxpc2lvbkJveGVzO3ZhciBvPWZ1bmN0aW9uKHQscil7dmFyIG49YS5yZWxvYWRDYWxsYmFjaztuJiYoZGVsZXRlIGEucmVsb2FkQ2FsbGJhY2ssYS5wYXJzZShhLnZlY3RvclRpbGUsaS5sYXllckluZGV4LGkuYWN0b3IsbikpLGUodCxyKX07XCJwYXJzaW5nXCI9PT1hLnN0YXR1cz9hLnJlbG9hZENhbGxiYWNrPW86XCJkb25lXCI9PT1hLnN0YXR1cyYmYS5wYXJzZShhLnZlY3RvclRpbGUsdGhpcy5sYXllckluZGV4LHRoaXMuYWN0b3Isbyl9fSxBLnByb3RvdHlwZS5hYm9ydFRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxvYWRpbmcsbj10LnVpZDtyJiZyW25dJiZyW25dLmFib3J0JiYocltuXS5hYm9ydCgpLGRlbGV0ZSByW25dKSxlKCl9LEEucHJvdG90eXBlLnJlbW92ZVRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxvYWRlZCxuPXQudWlkO3ImJnJbbl0mJmRlbGV0ZSByW25dLGUoKX07dmFyIFQ9ZnVuY3Rpb24oKXt0aGlzLmxvYWRpbmc9e30sdGhpcy5sb2FkZWQ9e319O1QucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49ZS51aWQsaT1lLmVuY29kaW5nLGE9bmV3IHQuZGVmYXVsdCQzMShuKTt0aGlzLmxvYWRpbmdbbl09YSxhLmxvYWRGcm9tSW1hZ2UoZS5yYXdJbWFnZURhdGEsaSksZGVsZXRlIHRoaXMubG9hZGluZ1tuXSx0aGlzLmxvYWRlZD10aGlzLmxvYWRlZHx8e30sdGhpcy5sb2FkZWRbbl09YSxyKG51bGwsYSl9LFQucHJvdG90eXBlLnJlbW92ZVRpbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sb2FkZWQscj10LnVpZDtlJiZlW3JdJiZkZWxldGUgZVtyXX07dmFyIE09e1JBRElVUzo2Mzc4MTM3LEZMQVRURU5JTkc6MS8yOTguMjU3MjIzNTYzLFBPTEFSX1JBRElVUzo2MzU2NzUyLjMxNDJ9O2Z1bmN0aW9uIFModCl7dmFyIGU9MDtpZih0JiZ0Lmxlbmd0aD4wKXtlKz1NYXRoLmFicyhFKHRbMF0pKTtmb3IodmFyIHI9MTtyPHQubGVuZ3RoO3IrKyllLT1NYXRoLmFicyhFKHRbcl0pKX1yZXR1cm4gZX1mdW5jdGlvbiBFKHQpe3ZhciBlLHIsbixpLGEsbyxzPTAsbD10Lmxlbmd0aDtpZihsPjIpe2ZvcihvPTA7bzxsO28rKylvPT09bC0yPyhuPWwtMixpPWwtMSxhPTApOm89PT1sLTE/KG49bC0xLGk9MCxhPTEpOihuPW8saT1vKzEsYT1vKzIpLGU9dFtuXSxyPXRbaV0scys9KEModFthXVswXSktQyhlWzBdKSkqTWF0aC5zaW4oQyhyWzFdKSk7cz1zKk0uUkFESVVTKk0uUkFESVVTLzJ9cmV0dXJuIHN9ZnVuY3Rpb24gQyh0KXtyZXR1cm4gdCpNYXRoLlBJLzE4MH12YXIgTD17Z2VvbWV0cnk6ZnVuY3Rpb24gdChlKXt2YXIgcixuPTA7c3dpdGNoKGUudHlwZSl7Y2FzZVwiUG9seWdvblwiOnJldHVybiBTKGUuY29vcmRpbmF0ZXMpO2Nhc2VcIk11bHRpUG9seWdvblwiOmZvcihyPTA7cjxlLmNvb3JkaW5hdGVzLmxlbmd0aDtyKyspbis9UyhlLmNvb3JkaW5hdGVzW3JdKTtyZXR1cm4gbjtjYXNlXCJQb2ludFwiOmNhc2VcIk11bHRpUG9pbnRcIjpjYXNlXCJMaW5lU3RyaW5nXCI6Y2FzZVwiTXVsdGlMaW5lU3RyaW5nXCI6cmV0dXJuIDA7Y2FzZVwiR2VvbWV0cnlDb2xsZWN0aW9uXCI6Zm9yKHI9MDtyPGUuZ2VvbWV0cmllcy5sZW5ndGg7cisrKW4rPXQoZS5nZW9tZXRyaWVzW3JdKTtyZXR1cm4gbn19LHJpbmc6RX07ZnVuY3Rpb24geih0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdChyLGUpfX1mdW5jdGlvbiBPKHQsZSl7ZT0hIWUsdFswXT1JKHRbMF0sZSk7Zm9yKHZhciByPTE7cjx0Lmxlbmd0aDtyKyspdFtyXT1JKHRbcl0sIWUpO3JldHVybiB0fWZ1bmN0aW9uIEkodCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEwucmluZyh0KT49MH0odCk9PT1lP3Q6dC5yZXZlcnNlKCl9dmFyIEQ9dC5kZWZhdWx0JDI5LlZlY3RvclRpbGVGZWF0dXJlLnByb3RvdHlwZS50b0dlb0pTT04sUD1mdW5jdGlvbihlKXt0aGlzLl9mZWF0dXJlPWUsdGhpcy5leHRlbnQ9dC5kZWZhdWx0JDgsdGhpcy50eXBlPWUudHlwZSx0aGlzLnByb3BlcnRpZXM9ZS50YWdzLFwiaWRcImluIGUmJiFpc05hTihlLmlkKSYmKHRoaXMuaWQ9cGFyc2VJbnQoZS5pZCwxMCkpfTtQLnByb3RvdHlwZS5sb2FkR2VvbWV0cnk9ZnVuY3Rpb24oKXtpZigxPT09dGhpcy5fZmVhdHVyZS50eXBlKXtmb3IodmFyIGU9W10scj0wLG49dGhpcy5fZmVhdHVyZS5nZW9tZXRyeTtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl07ZS5wdXNoKFtuZXcgdC5kZWZhdWx0JDEoaVswXSxpWzFdKV0pfXJldHVybiBlfWZvcih2YXIgYT1bXSxvPTAscz10aGlzLl9mZWF0dXJlLmdlb21ldHJ5O288cy5sZW5ndGg7bys9MSl7Zm9yKHZhciBsPVtdLGM9MCx1PXNbb107Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgaD11W2NdO2wucHVzaChuZXcgdC5kZWZhdWx0JDEoaFswXSxoWzFdKSl9YS5wdXNoKGwpfXJldHVybiBhfSxQLnByb3RvdHlwZS50b0dlb0pTT049ZnVuY3Rpb24odCxlLHIpe3JldHVybiBELmNhbGwodGhpcyx0LGUscil9O3ZhciBSPWZ1bmN0aW9uKGUpe3RoaXMubGF5ZXJzPXtfZ2VvanNvblRpbGVMYXllcjp0aGlzfSx0aGlzLm5hbWU9XCJfZ2VvanNvblRpbGVMYXllclwiLHRoaXMuZXh0ZW50PXQuZGVmYXVsdCQ4LHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuX2ZlYXR1cmVzPWV9O1IucHJvdG90eXBlLmZlYXR1cmU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBQKHRoaXMuX2ZlYXR1cmVzW3RdKX07dmFyIEY9dC5fX21vZHVsZUV4cG9ydHMuVmVjdG9yVGlsZUZlYXR1cmUsQj1OO2Z1bmN0aW9uIE4odCxlKXt0aGlzLm9wdGlvbnM9ZXx8e30sdGhpcy5mZWF0dXJlcz10LHRoaXMubGVuZ3RoPXQubGVuZ3RofWZ1bmN0aW9uIGoodCxlKXt0aGlzLmlkPVwibnVtYmVyXCI9PXR5cGVvZiB0LmlkP3QuaWQ6dm9pZCAwLHRoaXMudHlwZT10LnR5cGUsdGhpcy5yYXdHZW9tZXRyeT0xPT09dC50eXBlP1t0Lmdlb21ldHJ5XTp0Lmdlb21ldHJ5LHRoaXMucHJvcGVydGllcz10LnRhZ3MsdGhpcy5leHRlbnQ9ZXx8NDA5Nn1OLnByb3RvdHlwZS5mZWF0dXJlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaih0aGlzLmZlYXR1cmVzW3RdLHRoaXMub3B0aW9ucy5leHRlbnQpfSxqLnByb3RvdHlwZS5sb2FkR2VvbWV0cnk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJhd0dlb21ldHJ5O3RoaXMuZ2VvbWV0cnk9W107Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe2Zvcih2YXIgbj1lW3JdLGk9W10sYT0wO2E8bi5sZW5ndGg7YSsrKWkucHVzaChuZXcgdC5kZWZhdWx0JDMyKG5bYV1bMF0sblthXVsxXSkpO3RoaXMuZ2VvbWV0cnkucHVzaChpKX1yZXR1cm4gdGhpcy5nZW9tZXRyeX0sai5wcm90b3R5cGUuYmJveD1mdW5jdGlvbigpe3RoaXMuZ2VvbWV0cnl8fHRoaXMubG9hZEdlb21ldHJ5KCk7Zm9yKHZhciB0PXRoaXMuZ2VvbWV0cnksZT0xLzAscj0tMS8wLG49MS8wLGk9LTEvMCxhPTA7YTx0Lmxlbmd0aDthKyspZm9yKHZhciBvPXRbYV0scz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdO2U9TWF0aC5taW4oZSxsLngpLHI9TWF0aC5tYXgocixsLngpLG49TWF0aC5taW4obixsLnkpLGk9TWF0aC5tYXgoaSxsLnkpfXJldHVybltlLG4scixpXX0sai5wcm90b3R5cGUudG9HZW9KU09OPUYucHJvdG90eXBlLnRvR2VvSlNPTjt2YXIgVj1ILFU9SCxxPUI7ZnVuY3Rpb24gSChlKXt2YXIgcj1uZXcgdC5fX21vZHVsZUV4cG9ydHMkMTtyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdC5sYXllcnMpZS53cml0ZU1lc3NhZ2UoMyxHLHQubGF5ZXJzW3JdKX0oZSxyKSxyLmZpbmlzaCgpfWZ1bmN0aW9uIEcodCxlKXt2YXIgcjtlLndyaXRlVmFyaW50RmllbGQoMTUsdC52ZXJzaW9ufHwxKSxlLndyaXRlU3RyaW5nRmllbGQoMSx0Lm5hbWV8fFwiXCIpLGUud3JpdGVWYXJpbnRGaWVsZCg1LHQuZXh0ZW50fHw0MDk2KTt2YXIgbj17a2V5czpbXSx2YWx1ZXM6W10sa2V5Y2FjaGU6e30sdmFsdWVjYWNoZTp7fX07Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyluLmZlYXR1cmU9dC5mZWF0dXJlKHIpLGUud3JpdGVNZXNzYWdlKDIsWSxuKTt2YXIgaT1uLmtleXM7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyllLndyaXRlU3RyaW5nRmllbGQoMyxpW3JdKTt2YXIgYT1uLnZhbHVlcztmb3Iocj0wO3I8YS5sZW5ndGg7cisrKWUud3JpdGVNZXNzYWdlKDQsSixhW3JdKX1mdW5jdGlvbiBZKHQsZSl7dmFyIHI9dC5mZWF0dXJlO3ZvaWQgMCE9PXIuaWQmJmUud3JpdGVWYXJpbnRGaWVsZCgxLHIuaWQpLGUud3JpdGVNZXNzYWdlKDIsVyx0KSxlLndyaXRlVmFyaW50RmllbGQoMyxyLnR5cGUpLGUud3JpdGVNZXNzYWdlKDQsJCxyKX1mdW5jdGlvbiBXKHQsZSl7dmFyIHI9dC5mZWF0dXJlLG49dC5rZXlzLGk9dC52YWx1ZXMsYT10LmtleWNhY2hlLG89dC52YWx1ZWNhY2hlO2Zvcih2YXIgcyBpbiByLnByb3BlcnRpZXMpe3ZhciBsPWFbc107dm9pZCAwPT09bCYmKG4ucHVzaChzKSxsPW4ubGVuZ3RoLTEsYVtzXT1sKSxlLndyaXRlVmFyaW50KGwpO3ZhciBjPXIucHJvcGVydGllc1tzXSx1PXR5cGVvZiBjO1wic3RyaW5nXCIhPT11JiZcImJvb2xlYW5cIiE9PXUmJlwibnVtYmVyXCIhPT11JiYoYz1KU09OLnN0cmluZ2lmeShjKSk7dmFyIGg9dStcIjpcIitjLGY9b1toXTt2b2lkIDA9PT1mJiYoaS5wdXNoKGMpLGY9aS5sZW5ndGgtMSxvW2hdPWYpLGUud3JpdGVWYXJpbnQoZil9fWZ1bmN0aW9uIFgodCxlKXtyZXR1cm4oZTw8MykrKDcmdCl9ZnVuY3Rpb24gWih0KXtyZXR1cm4gdDw8MV50Pj4zMX1mdW5jdGlvbiAkKHQsZSl7Zm9yKHZhciByPXQubG9hZEdlb21ldHJ5KCksbj10LnR5cGUsaT0wLGE9MCxvPXIubGVuZ3RoLHM9MDtzPG87cysrKXt2YXIgbD1yW3NdLGM9MTsxPT09biYmKGM9bC5sZW5ndGgpLGUud3JpdGVWYXJpbnQoWCgxLGMpKTtmb3IodmFyIHU9Mz09PW4/bC5sZW5ndGgtMTpsLmxlbmd0aCxoPTA7aDx1O2grKyl7MT09PWgmJjEhPT1uJiZlLndyaXRlVmFyaW50KFgoMix1LTEpKTt2YXIgZj1sW2hdLngtaSxwPWxbaF0ueS1hO2Uud3JpdGVWYXJpbnQoWihmKSksZS53cml0ZVZhcmludChaKHApKSxpKz1mLGErPXB9Mz09PW4mJmUud3JpdGVWYXJpbnQoWCg3LDApKX19ZnVuY3Rpb24gSih0LGUpe3ZhciByPXR5cGVvZiB0O1wic3RyaW5nXCI9PT1yP2Uud3JpdGVTdHJpbmdGaWVsZCgxLHQpOlwiYm9vbGVhblwiPT09cj9lLndyaXRlQm9vbGVhbkZpZWxkKDcsdCk6XCJudW1iZXJcIj09PXImJih0JTEhPTA/ZS53cml0ZURvdWJsZUZpZWxkKDMsdCk6dDwwP2Uud3JpdGVTVmFyaW50RmllbGQoNix0KTplLndyaXRlVmFyaW50RmllbGQoNSx0KSl9Vi5mcm9tVmVjdG9yVGlsZUpzPVUsVi5mcm9tR2VvanNvblZ0PWZ1bmN0aW9uKHQsZSl7ZT1lfHx7fTt2YXIgcj17fTtmb3IodmFyIG4gaW4gdClyW25dPW5ldyBCKHRbbl0uZmVhdHVyZXMsZSkscltuXS5uYW1lPW4scltuXS52ZXJzaW9uPWUudmVyc2lvbixyW25dLmV4dGVudD1lLmV4dGVudDtyZXR1cm4gSCh7bGF5ZXJzOnJ9KX0sVi5HZW9KU09OV3JhcHBlcj1xO3ZhciBLPWZ1bmN0aW9uIHQoZSxyLG4saSxhLG8pe2lmKCEoYS1pPD1uKSl7dmFyIHM9TWF0aC5mbG9vcigoaSthKS8yKTshZnVuY3Rpb24gdChlLHIsbixpLGEsbyl7Zm9yKDthPmk7KXtpZihhLWk+NjAwKXt2YXIgcz1hLWkrMSxsPW4taSsxLGM9TWF0aC5sb2cocyksdT0uNSpNYXRoLmV4cCgyKmMvMyksaD0uNSpNYXRoLnNxcnQoYyp1KihzLXUpL3MpKihsLXMvMjwwPy0xOjEpO3QoZSxyLG4sTWF0aC5tYXgoaSxNYXRoLmZsb29yKG4tbCp1L3MraCkpLE1hdGgubWluKGEsTWF0aC5mbG9vcihuKyhzLWwpKnUvcytoKSksbyl9dmFyIGY9clsyKm4rb10scD1pLGQ9YTtmb3IoUShlLHIsaSxuKSxyWzIqYStvXT5mJiZRKGUscixpLGEpO3A8ZDspe2ZvcihRKGUscixwLGQpLHArKyxkLS07clsyKnArb108ZjspcCsrO2Zvcig7clsyKmQrb10+ZjspZC0tfXJbMippK29dPT09Zj9RKGUscixpLGQpOlEoZSxyLCsrZCxhKSxkPD1uJiYoaT1kKzEpLG48PWQmJihhPWQtMSl9fShlLHIscyxpLGEsbyUyKSx0KGUscixuLGkscy0xLG8rMSksdChlLHIsbixzKzEsYSxvKzEpfX07ZnVuY3Rpb24gUSh0LGUscixuKXt0dCh0LHIsbiksdHQoZSwyKnIsMipuKSx0dChlLDIqcisxLDIqbisxKX1mdW5jdGlvbiB0dCh0LGUscil7dmFyIG49dFtlXTt0W2VdPXRbcl0sdFtyXT1ufWZ1bmN0aW9uIGV0KHQsZSxyLG4pe3ZhciBpPXQtcixhPWUtbjtyZXR1cm4gaSppK2EqYX12YXIgcnQ9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gbmV3IG50KHQsZSxyLG4saSl9O2Z1bmN0aW9uIG50KHQsZSxyLG4saSl7ZT1lfHxpdCxyPXJ8fGF0LGk9aXx8QXJyYXksdGhpcy5ub2RlU2l6ZT1ufHw2NCx0aGlzLnBvaW50cz10LHRoaXMuaWRzPW5ldyBpKHQubGVuZ3RoKSx0aGlzLmNvb3Jkcz1uZXcgaSgyKnQubGVuZ3RoKTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl0aGlzLmlkc1thXT1hLHRoaXMuY29vcmRzWzIqYV09ZSh0W2FdKSx0aGlzLmNvb3Jkc1syKmErMV09cih0W2FdKTtLKHRoaXMuaWRzLHRoaXMuY29vcmRzLHRoaXMubm9kZVNpemUsMCx0aGlzLmlkcy5sZW5ndGgtMSwwKX1mdW5jdGlvbiBpdCh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBhdCh0KXtyZXR1cm4gdFsxXX1udC5wcm90b3R5cGU9e3JhbmdlOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBmdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHMsbCxjPVswLHQubGVuZ3RoLTEsMF0sdT1bXTtjLmxlbmd0aDspe3ZhciBoPWMucG9wKCksZj1jLnBvcCgpLHA9Yy5wb3AoKTtpZihmLXA8PW8pZm9yKHZhciBkPXA7ZDw9ZjtkKyspcz1lWzIqZF0sbD1lWzIqZCsxXSxzPj1yJiZzPD1pJiZsPj1uJiZsPD1hJiZ1LnB1c2godFtkXSk7ZWxzZXt2YXIgZz1NYXRoLmZsb29yKChwK2YpLzIpO3M9ZVsyKmddLGw9ZVsyKmcrMV0scz49ciYmczw9aSYmbD49biYmbDw9YSYmdS5wdXNoKHRbZ10pO3ZhciB2PShoKzEpJTI7KDA9PT1oP3I8PXM6bjw9bCkmJihjLnB1c2gocCksYy5wdXNoKGctMSksYy5wdXNoKHYpKSwoMD09PWg/aT49czphPj1sKSYmKGMucHVzaChnKzEpLGMucHVzaChmKSxjLnB1c2godikpfX1yZXR1cm4gdX0odGhpcy5pZHMsdGhpcy5jb29yZHMsdCxlLHIsbix0aGlzLm5vZGVTaXplKX0sd2l0aGluOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbz1bMCx0Lmxlbmd0aC0xLDBdLHM9W10sbD1pKmk7by5sZW5ndGg7KXt2YXIgYz1vLnBvcCgpLHU9by5wb3AoKSxoPW8ucG9wKCk7aWYodS1oPD1hKWZvcih2YXIgZj1oO2Y8PXU7ZisrKWV0KGVbMipmXSxlWzIqZisxXSxyLG4pPD1sJiZzLnB1c2godFtmXSk7ZWxzZXt2YXIgcD1NYXRoLmZsb29yKChoK3UpLzIpLGQ9ZVsyKnBdLGc9ZVsyKnArMV07ZXQoZCxnLHIsbik8PWwmJnMucHVzaCh0W3BdKTt2YXIgdj0oYysxKSUyOygwPT09Yz9yLWk8PWQ6bi1pPD1nKSYmKG8ucHVzaChoKSxvLnB1c2gocC0xKSxvLnB1c2godikpLCgwPT09Yz9yK2k+PWQ6bitpPj1nKSYmKG8ucHVzaChwKzEpLG8ucHVzaCh1KSxvLnB1c2godikpfX1yZXR1cm4gc30odGhpcy5pZHMsdGhpcy5jb29yZHMsdCxlLHIsdGhpcy5ub2RlU2l6ZSl9fTtmdW5jdGlvbiBvdCh0KXt0aGlzLm9wdGlvbnM9cHQoT2JqZWN0LmNyZWF0ZSh0aGlzLm9wdGlvbnMpLHQpLHRoaXMudHJlZXM9bmV3IEFycmF5KHRoaXMub3B0aW9ucy5tYXhab29tKzEpfWZ1bmN0aW9uIHN0KHQsZSxyLG4saSl7cmV0dXJue3g6dCx5OmUsem9vbToxLzAsaWQ6bixwcm9wZXJ0aWVzOmkscGFyZW50SWQ6LTEsbnVtUG9pbnRzOnJ9fWZ1bmN0aW9uIGx0KHQsZSl7dmFyIHI9dC5nZW9tZXRyeS5jb29yZGluYXRlcztyZXR1cm57eDpodChyWzBdKSx5OmZ0KHJbMV0pLHpvb206MS8wLGlkOmUscGFyZW50SWQ6LTF9fWZ1bmN0aW9uIGN0KHQpe3JldHVybnt0eXBlOlwiRmVhdHVyZVwiLHByb3BlcnRpZXM6dXQodCksZ2VvbWV0cnk6e3R5cGU6XCJQb2ludFwiLGNvb3JkaW5hdGVzOlsobj10LngsMzYwKihuLS41KSksKGU9dC55LHI9KDE4MC0zNjAqZSkqTWF0aC5QSS8xODAsMzYwKk1hdGguYXRhbihNYXRoLmV4cChyKSkvTWF0aC5QSS05MCldfX07dmFyIGUscixufWZ1bmN0aW9uIHV0KHQpe3ZhciBlPXQubnVtUG9pbnRzLHI9ZT49MWU0P01hdGgucm91bmQoZS8xZTMpK1wia1wiOmU+PTFlMz9NYXRoLnJvdW5kKGUvMTAwKS8xMCtcImtcIjplO3JldHVybiBwdChwdCh7fSx0LnByb3BlcnRpZXMpLHtjbHVzdGVyOiEwLGNsdXN0ZXJfaWQ6dC5pZCxwb2ludF9jb3VudDplLHBvaW50X2NvdW50X2FiYnJldmlhdGVkOnJ9KX1mdW5jdGlvbiBodCh0KXtyZXR1cm4gdC8zNjArLjV9ZnVuY3Rpb24gZnQodCl7dmFyIGU9TWF0aC5zaW4odCpNYXRoLlBJLzE4MCkscj0uNS0uMjUqTWF0aC5sb2coKDErZSkvKDEtZSkpL01hdGguUEk7cmV0dXJuIHI8MD8wOnI+MT8xOnJ9ZnVuY3Rpb24gcHQodCxlKXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl07cmV0dXJuIHR9ZnVuY3Rpb24gZHQodCl7cmV0dXJuIHQueH1mdW5jdGlvbiBndCh0KXtyZXR1cm4gdC55fWZ1bmN0aW9uIHZ0KHQsZSxyLG4saSxhKXt2YXIgbz1pLXIscz1hLW47aWYoMCE9PW98fDAhPT1zKXt2YXIgbD0oKHQtcikqbysoZS1uKSpzKS8obypvK3Mqcyk7bD4xPyhyPWksbj1hKTpsPjAmJihyKz1vKmwsbis9cypsKX1yZXR1cm4obz10LXIpKm8rKHM9ZS1uKSpzfWZ1bmN0aW9uIG10KHQsZSxyLG4pe3ZhciBpPXtpZDp0fHxudWxsLHR5cGU6ZSxnZW9tZXRyeTpyLHRhZ3M6bixtaW5YOjEvMCxtaW5ZOjEvMCxtYXhYOi0xLzAsbWF4WTotMS8wfTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5nZW9tZXRyeSxyPXQudHlwZTtpZihcIlBvaW50XCI9PT1yfHxcIk11bHRpUG9pbnRcIj09PXJ8fFwiTGluZVN0cmluZ1wiPT09cil5dCh0LGUpO2Vsc2UgaWYoXCJQb2x5Z29uXCI9PT1yfHxcIk11bHRpTGluZVN0cmluZ1wiPT09cilmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl5dCh0LGVbbl0pO2Vsc2UgaWYoXCJNdWx0aVBvbHlnb25cIj09PXIpZm9yKG49MDtuPGUubGVuZ3RoO24rKylmb3IodmFyIGk9MDtpPGVbbl0ubGVuZ3RoO2krKyl5dCh0LGVbbl1baV0pfShpKSxpfWZ1bmN0aW9uIHl0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKz0zKXQubWluWD1NYXRoLm1pbih0Lm1pblgsZVtyXSksdC5taW5ZPU1hdGgubWluKHQubWluWSxlW3IrMV0pLHQubWF4WD1NYXRoLm1heCh0Lm1heFgsZVtyXSksdC5tYXhZPU1hdGgubWF4KHQubWF4WSxlW3IrMV0pfWZ1bmN0aW9uIHh0KHQsZSxyKXtpZihlLmdlb21ldHJ5KXt2YXIgbj1lLmdlb21ldHJ5LmNvb3JkaW5hdGVzLGk9ZS5nZW9tZXRyeS50eXBlLGE9TWF0aC5wb3coci50b2xlcmFuY2UvKCgxPDxyLm1heFpvb20pKnIuZXh0ZW50KSwyKSxvPVtdO2lmKFwiUG9pbnRcIj09PWkpYnQobixvKTtlbHNlIGlmKFwiTXVsdGlQb2ludFwiPT09aSlmb3IodmFyIHM9MDtzPG4ubGVuZ3RoO3MrKylidChuW3NdLG8pO2Vsc2UgaWYoXCJMaW5lU3RyaW5nXCI9PT1pKV90KG4sbyxhLCExKTtlbHNlIGlmKFwiTXVsdGlMaW5lU3RyaW5nXCI9PT1pKWlmKHIubGluZU1ldHJpY3MpZm9yKHM9MDtzPG4ubGVuZ3RoO3MrKylyZXR1cm4gbz1bXSxfdChuW3NdLG8sYSwhMSksdm9pZCB0LnB1c2gobXQoZS5pZCxcIkxpbmVTdHJpbmdcIixvLGUucHJvcGVydGllcykpO2Vsc2Ugd3QobixvLGEsITEpO2Vsc2UgaWYoXCJQb2x5Z29uXCI9PT1pKXd0KG4sbyxhLCEwKTtlbHNle2lmKFwiTXVsdGlQb2x5Z29uXCIhPT1pKXtpZihcIkdlb21ldHJ5Q29sbGVjdGlvblwiPT09aSl7Zm9yKHM9MDtzPGUuZ2VvbWV0cnkuZ2VvbWV0cmllcy5sZW5ndGg7cysrKXh0KHQse2lkOmUuaWQsZ2VvbWV0cnk6ZS5nZW9tZXRyeS5nZW9tZXRyaWVzW3NdLHByb3BlcnRpZXM6ZS5wcm9wZXJ0aWVzfSxyKTtyZXR1cm59dGhyb3cgbmV3IEVycm9yKFwiSW5wdXQgZGF0YSBpcyBub3QgYSB2YWxpZCBHZW9KU09OIG9iamVjdC5cIil9Zm9yKHM9MDtzPG4ubGVuZ3RoO3MrKyl7dmFyIGw9W107d3QobltzXSxsLGEsITApLG8ucHVzaChsKX19dC5wdXNoKG10KGUuaWQsaSxvLGUucHJvcGVydGllcykpfX1mdW5jdGlvbiBidCh0LGUpe2UucHVzaChrdCh0WzBdKSksZS5wdXNoKEF0KHRbMV0pKSxlLnB1c2goMCl9ZnVuY3Rpb24gX3QodCxlLHIsbil7Zm9yKHZhciBpLGEsbz0wLHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIGw9a3QodFtzXVswXSksYz1BdCh0W3NdWzFdKTtlLnB1c2gobCksZS5wdXNoKGMpLGUucHVzaCgwKSxzPjAmJihvKz1uPyhpKmMtbCphKS8yOk1hdGguc3FydChNYXRoLnBvdyhsLWksMikrTWF0aC5wb3coYy1hLDIpKSksaT1sLGE9Y312YXIgdT1lLmxlbmd0aC0zO2VbMl09MSxmdW5jdGlvbiB0KGUscixuLGkpe2Zvcih2YXIgYSxvPWkscz1lW3JdLGw9ZVtyKzFdLGM9ZVtuXSx1PWVbbisxXSxoPXIrMztoPG47aCs9Myl7dmFyIGY9dnQoZVtoXSxlW2grMV0scyxsLGMsdSk7Zj5vJiYoYT1oLG89Zil9bz5pJiYoYS1yPjMmJnQoZSxyLGEsaSksZVthKzJdPW8sbi1hPjMmJnQoZSxhLG4saSkpfShlLDAsdSxyKSxlW3UrMl09MSxlLnNpemU9TWF0aC5hYnMobyksZS5zdGFydD0wLGUuZW5kPWUuc2l6ZX1mdW5jdGlvbiB3dCh0LGUscixuKXtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9W107X3QodFtpXSxhLHIsbiksZS5wdXNoKGEpfX1mdW5jdGlvbiBrdCh0KXtyZXR1cm4gdC8zNjArLjV9ZnVuY3Rpb24gQXQodCl7dmFyIGU9TWF0aC5zaW4odCpNYXRoLlBJLzE4MCkscj0uNS0uMjUqTWF0aC5sb2coKDErZSkvKDEtZSkpL01hdGguUEk7cmV0dXJuIHI8MD8wOnI+MT8xOnJ9ZnVuY3Rpb24gVHQodCxlLHIsbixpLGEsbyxzKXtpZihuLz1lLGE+PShyLz1lKSYmbzw9bilyZXR1cm4gdDtpZihhPm58fG88cilyZXR1cm4gbnVsbDtmb3IodmFyIGw9W10sYz0wO2M8dC5sZW5ndGg7YysrKXt2YXIgdT10W2NdLGg9dS5nZW9tZXRyeSxmPXUudHlwZSxwPTA9PT1pP3UubWluWDp1Lm1pblksZD0wPT09aT91Lm1heFg6dS5tYXhZO2lmKHA+PXImJmQ8PW4pbC5wdXNoKHUpO2Vsc2UgaWYoIShwPm58fGQ8cikpe3ZhciBnPVtdO2lmKFwiUG9pbnRcIj09PWZ8fFwiTXVsdGlQb2ludFwiPT09ZilNdChoLGcscixuLGkpO2Vsc2UgaWYoXCJMaW5lU3RyaW5nXCI9PT1mKVN0KGgsZyxyLG4saSwhMSxzLmxpbmVNZXRyaWNzKTtlbHNlIGlmKFwiTXVsdGlMaW5lU3RyaW5nXCI9PT1mKUN0KGgsZyxyLG4saSwhMSk7ZWxzZSBpZihcIlBvbHlnb25cIj09PWYpQ3QoaCxnLHIsbixpLCEwKTtlbHNlIGlmKFwiTXVsdGlQb2x5Z29uXCI9PT1mKWZvcih2YXIgdj0wO3Y8aC5sZW5ndGg7disrKXt2YXIgbT1bXTtDdChoW3ZdLG0scixuLGksITApLG0ubGVuZ3RoJiZnLnB1c2gobSl9aWYoZy5sZW5ndGgpe2lmKHMubGluZU1ldHJpY3MmJlwiTGluZVN0cmluZ1wiPT09Zil7Zm9yKHY9MDt2PGcubGVuZ3RoO3YrKylsLnB1c2gobXQodS5pZCxmLGdbdl0sdS50YWdzKSk7Y29udGludWV9XCJMaW5lU3RyaW5nXCIhPT1mJiZcIk11bHRpTGluZVN0cmluZ1wiIT09Znx8KDE9PT1nLmxlbmd0aD8oZj1cIkxpbmVTdHJpbmdcIixnPWdbMF0pOmY9XCJNdWx0aUxpbmVTdHJpbmdcIiksXCJQb2ludFwiIT09ZiYmXCJNdWx0aVBvaW50XCIhPT1mfHwoZj0zPT09Zy5sZW5ndGg/XCJQb2ludFwiOlwiTXVsdGlQb2ludFwiKSxsLnB1c2gobXQodS5pZCxmLGcsdS50YWdzKSl9fX1yZXR1cm4gbC5sZW5ndGg/bDpudWxsfWZ1bmN0aW9uIE10KHQsZSxyLG4saSl7Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKz0zKXt2YXIgbz10W2EraV07bz49ciYmbzw9biYmKGUucHVzaCh0W2FdKSxlLnB1c2godFthKzFdKSxlLnB1c2godFthKzJdKSl9fWZ1bmN0aW9uIFN0KHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcyxsLGM9RXQodCksdT0wPT09aT96dDpPdCxoPXQuc3RhcnQsZj0wO2Y8dC5sZW5ndGgtMztmKz0zKXt2YXIgcD10W2ZdLGQ9dFtmKzFdLGc9dFtmKzJdLHY9dFtmKzNdLG09dFtmKzRdLHk9MD09PWk/cDpkLHg9MD09PWk/djptLGI9ITE7byYmKHM9TWF0aC5zcXJ0KE1hdGgucG93KHAtdiwyKStNYXRoLnBvdyhkLW0sMikpKSx5PHI/eD49ciYmKGw9dShjLHAsZCx2LG0sciksbyYmKGMuc3RhcnQ9aCtzKmwpKTp5Pm4/eDw9biYmKGw9dShjLHAsZCx2LG0sbiksbyYmKGMuc3RhcnQ9aCtzKmwpKTpMdChjLHAsZCxnKSx4PHImJnk+PXImJihsPXUoYyxwLGQsdixtLHIpLGI9ITApLHg+biYmeTw9biYmKGw9dShjLHAsZCx2LG0sbiksYj0hMCksIWEmJmImJihvJiYoYy5lbmQ9aCtzKmwpLGUucHVzaChjKSxjPUV0KHQpKSxvJiYoaCs9cyl9dmFyIF89dC5sZW5ndGgtMztwPXRbX10sZD10W18rMV0sZz10W18rMl0sKHk9MD09PWk/cDpkKT49ciYmeTw9biYmTHQoYyxwLGQsZyksXz1jLmxlbmd0aC0zLGEmJl8+PTMmJihjW19dIT09Y1swXXx8Y1tfKzFdIT09Y1sxXSkmJkx0KGMsY1swXSxjWzFdLGNbMl0pLGMubGVuZ3RoJiZlLnB1c2goYyl9ZnVuY3Rpb24gRXQodCl7dmFyIGU9W107cmV0dXJuIGUuc2l6ZT10LnNpemUsZS5zdGFydD10LnN0YXJ0LGUuZW5kPXQuZW5kLGV9ZnVuY3Rpb24gQ3QodCxlLHIsbixpLGEpe2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKVN0KHRbb10sZSxyLG4saSxhLCExKX1mdW5jdGlvbiBMdCh0LGUscixuKXt0LnB1c2goZSksdC5wdXNoKHIpLHQucHVzaChuKX1mdW5jdGlvbiB6dCh0LGUscixuLGksYSl7dmFyIG89KGEtZSkvKG4tZSk7cmV0dXJuIHQucHVzaChhKSx0LnB1c2gocisoaS1yKSpvKSx0LnB1c2goMSksb31mdW5jdGlvbiBPdCh0LGUscixuLGksYSl7dmFyIG89KGEtcikvKGktcik7cmV0dXJuIHQucHVzaChlKyhuLWUpKm8pLHQucHVzaChhKSx0LnB1c2goMSksb31mdW5jdGlvbiBJdCh0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpLGE9dFtuXSxvPWEudHlwZTtpZihcIlBvaW50XCI9PT1vfHxcIk11bHRpUG9pbnRcIj09PW98fFwiTGluZVN0cmluZ1wiPT09bylpPUR0KGEuZ2VvbWV0cnksZSk7ZWxzZSBpZihcIk11bHRpTGluZVN0cmluZ1wiPT09b3x8XCJQb2x5Z29uXCI9PT1vKXtpPVtdO2Zvcih2YXIgcz0wO3M8YS5nZW9tZXRyeS5sZW5ndGg7cysrKWkucHVzaChEdChhLmdlb21ldHJ5W3NdLGUpKX1lbHNlIGlmKFwiTXVsdGlQb2x5Z29uXCI9PT1vKWZvcihpPVtdLHM9MDtzPGEuZ2VvbWV0cnkubGVuZ3RoO3MrKyl7Zm9yKHZhciBsPVtdLGM9MDtjPGEuZ2VvbWV0cnlbc10ubGVuZ3RoO2MrKylsLnB1c2goRHQoYS5nZW9tZXRyeVtzXVtjXSxlKSk7aS5wdXNoKGwpfXIucHVzaChtdChhLmlkLG8saSxhLnRhZ3MpKX1yZXR1cm4gcn1mdW5jdGlvbiBEdCh0LGUpe3ZhciByPVtdO3Iuc2l6ZT10LnNpemUsdm9pZCAwIT09dC5zdGFydCYmKHIuc3RhcnQ9dC5zdGFydCxyLmVuZD10LmVuZCk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKz0zKXIucHVzaCh0W25dK2UsdFtuKzFdLHRbbisyXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gUHQodCxlKXtpZih0LnRyYW5zZm9ybWVkKXJldHVybiB0O3ZhciByLG4saSxhPTE8PHQueixvPXQueCxzPXQueTtmb3Iocj0wO3I8dC5mZWF0dXJlcy5sZW5ndGg7cisrKXt2YXIgbD10LmZlYXR1cmVzW3JdLGM9bC5nZW9tZXRyeSx1PWwudHlwZTtpZihsLmdlb21ldHJ5PVtdLDE9PT11KWZvcihuPTA7bjxjLmxlbmd0aDtuKz0yKWwuZ2VvbWV0cnkucHVzaChSdChjW25dLGNbbisxXSxlLGEsbyxzKSk7ZWxzZSBmb3Iobj0wO248Yy5sZW5ndGg7bisrKXt2YXIgaD1bXTtmb3IoaT0wO2k8Y1tuXS5sZW5ndGg7aSs9MiloLnB1c2goUnQoY1tuXVtpXSxjW25dW2krMV0sZSxhLG8scykpO2wuZ2VvbWV0cnkucHVzaChoKX19cmV0dXJuIHQudHJhbnNmb3JtZWQ9ITAsdH1mdW5jdGlvbiBSdCh0LGUscixuLGksYSl7cmV0dXJuW01hdGgucm91bmQocioodCpuLWkpKSxNYXRoLnJvdW5kKHIqKGUqbi1hKSldfWZ1bmN0aW9uIEZ0KHQsZSxyLG4saSl7Zm9yKHZhciBhPWU9PT1pLm1heFpvb20/MDppLnRvbGVyYW5jZS8oKDE8PGUpKmkuZXh0ZW50KSxvPXtmZWF0dXJlczpbXSxudW1Qb2ludHM6MCxudW1TaW1wbGlmaWVkOjAsbnVtRmVhdHVyZXM6MCxzb3VyY2U6bnVsbCx4OnIseTpuLHo6ZSx0cmFuc2Zvcm1lZDohMSxtaW5YOjIsbWluWToxLG1heFg6LTEsbWF4WTowfSxzPTA7czx0Lmxlbmd0aDtzKyspe28ubnVtRmVhdHVyZXMrKyxCdChvLHRbc10sYSxpKTt2YXIgbD10W3NdLm1pblgsYz10W3NdLm1pblksdT10W3NdLm1heFgsaD10W3NdLm1heFk7bDxvLm1pblgmJihvLm1pblg9bCksYzxvLm1pblkmJihvLm1pblk9YyksdT5vLm1heFgmJihvLm1heFg9dSksaD5vLm1heFkmJihvLm1heFk9aCl9cmV0dXJuIG99ZnVuY3Rpb24gQnQodCxlLHIsbil7dmFyIGk9ZS5nZW9tZXRyeSxhPWUudHlwZSxvPVtdO2lmKFwiUG9pbnRcIj09PWF8fFwiTXVsdGlQb2ludFwiPT09YSlmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrPTMpby5wdXNoKGlbc10pLG8ucHVzaChpW3MrMV0pLHQubnVtUG9pbnRzKyssdC5udW1TaW1wbGlmaWVkKys7ZWxzZSBpZihcIkxpbmVTdHJpbmdcIj09PWEpTnQobyxpLHQsciwhMSwhMSk7ZWxzZSBpZihcIk11bHRpTGluZVN0cmluZ1wiPT09YXx8XCJQb2x5Z29uXCI9PT1hKWZvcihzPTA7czxpLmxlbmd0aDtzKyspTnQobyxpW3NdLHQscixcIlBvbHlnb25cIj09PWEsMD09PXMpO2Vsc2UgaWYoXCJNdWx0aVBvbHlnb25cIj09PWEpZm9yKHZhciBsPTA7bDxpLmxlbmd0aDtsKyspe3ZhciBjPWlbbF07Zm9yKHM9MDtzPGMubGVuZ3RoO3MrKylOdChvLGNbc10sdCxyLCEwLDA9PT1zKX1pZihvLmxlbmd0aCl7dmFyIHU9ZS50YWdzfHxudWxsO2lmKFwiTGluZVN0cmluZ1wiPT09YSYmbi5saW5lTWV0cmljcyl7Zm9yKHZhciBoIGluIHU9e30sZS50YWdzKXVbaF09ZS50YWdzW2hdO3UubWFwYm94X2NsaXBfc3RhcnQ9aS5zdGFydC9pLnNpemUsdS5tYXBib3hfY2xpcF9lbmQ9aS5lbmQvaS5zaXplfXZhciBmPXtnZW9tZXRyeTpvLHR5cGU6XCJQb2x5Z29uXCI9PT1hfHxcIk11bHRpUG9seWdvblwiPT09YT8zOlwiTGluZVN0cmluZ1wiPT09YXx8XCJNdWx0aUxpbmVTdHJpbmdcIj09PWE/MjoxLHRhZ3M6dX07bnVsbCE9PWUuaWQmJihmLmlkPWUuaWQpLHQuZmVhdHVyZXMucHVzaChmKX19ZnVuY3Rpb24gTnQodCxlLHIsbixpLGEpe3ZhciBvPW4qbjtpZihuPjAmJmUuc2l6ZTwoaT9vOm4pKXIubnVtUG9pbnRzKz1lLmxlbmd0aC8zO2Vsc2V7Zm9yKHZhciBzPVtdLGw9MDtsPGUubGVuZ3RoO2wrPTMpKDA9PT1ufHxlW2wrMl0+bykmJihyLm51bVNpbXBsaWZpZWQrKyxzLnB1c2goZVtsXSkscy5wdXNoKGVbbCsxXSkpLHIubnVtUG9pbnRzKys7aSYmZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTAsaT10Lmxlbmd0aCxhPWktMjtuPGk7YT1uLG4rPTIpcis9KHRbbl0tdFthXSkqKHRbbisxXSt0W2ErMV0pO2lmKHI+MD09PWUpZm9yKG49MCxpPXQubGVuZ3RoO248aS8yO24rPTIpe3ZhciBvPXRbbl0scz10W24rMV07dFtuXT10W2ktMi1uXSx0W24rMV09dFtpLTEtbl0sdFtpLTItbl09byx0W2ktMS1uXT1zfX0ocyxhKSx0LnB1c2gocyl9fWZ1bmN0aW9uIGp0KHQsZSl7dmFyIHI9KGU9dGhpcy5vcHRpb25zPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdO3JldHVybiB0fShPYmplY3QuY3JlYXRlKHRoaXMub3B0aW9ucyksZSkpLmRlYnVnO2lmKHImJmNvbnNvbGUudGltZShcInByZXByb2Nlc3MgZGF0YVwiKSxlLm1heFpvb208MHx8ZS5tYXhab29tPjI0KXRocm93IG5ldyBFcnJvcihcIm1heFpvb20gc2hvdWxkIGJlIGluIHRoZSAwLTI0IHJhbmdlXCIpO3ZhciBuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107aWYoXCJGZWF0dXJlQ29sbGVjdGlvblwiPT09dC50eXBlKWZvcih2YXIgbj0wO248dC5mZWF0dXJlcy5sZW5ndGg7bisrKXh0KHIsdC5mZWF0dXJlc1tuXSxlKTtlbHNlXCJGZWF0dXJlXCI9PT10LnR5cGU/eHQocix0LGUpOnh0KHIse2dlb21ldHJ5OnR9LGUpO3JldHVybiByfSh0LGUpO3RoaXMudGlsZXM9e30sdGhpcy50aWxlQ29vcmRzPVtdLHImJihjb25zb2xlLnRpbWVFbmQoXCJwcmVwcm9jZXNzIGRhdGFcIiksY29uc29sZS5sb2coXCJpbmRleDogbWF4Wm9vbTogJWQsIG1heFBvaW50czogJWRcIixlLmluZGV4TWF4Wm9vbSxlLmluZGV4TWF4UG9pbnRzKSxjb25zb2xlLnRpbWUoXCJnZW5lcmF0ZSB0aWxlc1wiKSx0aGlzLnN0YXRzPXt9LHRoaXMudG90YWw9MCksKG49ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmJ1ZmZlci9lLmV4dGVudCxuPXQsaT1UdCh0LDEsLTEtcixyLDAsLTEsMixlKSxhPVR0KHQsMSwxLXIsMityLDAsLTEsMixlKTtyZXR1cm4oaXx8YSkmJihuPVR0KHQsMSwtciwxK3IsMCwtMSwyLGUpfHxbXSxpJiYobj1JdChpLDEpLmNvbmNhdChuKSksYSYmKG49bi5jb25jYXQoSXQoYSwtMSkpKSksbn0obixlKSkubGVuZ3RoJiZ0aGlzLnNwbGl0VGlsZShuLDAsMCwwKSxyJiYobi5sZW5ndGgmJmNvbnNvbGUubG9nKFwiZmVhdHVyZXM6ICVkLCBwb2ludHM6ICVkXCIsdGhpcy50aWxlc1swXS5udW1GZWF0dXJlcyx0aGlzLnRpbGVzWzBdLm51bVBvaW50cyksY29uc29sZS50aW1lRW5kKFwiZ2VuZXJhdGUgdGlsZXNcIiksY29uc29sZS5sb2coXCJ0aWxlcyBnZW5lcmF0ZWQ6XCIsdGhpcy50b3RhbCxKU09OLnN0cmluZ2lmeSh0aGlzLnN0YXRzKSkpfWZ1bmN0aW9uIFZ0KHQsZSxyKXtyZXR1cm4gMzIqKCgxPDx0KSpyK2UpK3R9ZnVuY3Rpb24gVXQodCxlKXt2YXIgcj10LnRpbGVJRC5jYW5vbmljYWw7aWYoIXRoaXMuX2dlb0pTT05JbmRleClyZXR1cm4gZShudWxsLG51bGwpO3ZhciBuPXRoaXMuX2dlb0pTT05JbmRleC5nZXRUaWxlKHIueixyLngsci55KTtpZighbilyZXR1cm4gZShudWxsLG51bGwpO3ZhciBpPW5ldyBSKG4uZmVhdHVyZXMpLGE9VihpKTswPT09YS5ieXRlT2Zmc2V0JiZhLmJ5dGVMZW5ndGg9PT1hLmJ1ZmZlci5ieXRlTGVuZ3RofHwoYT1uZXcgVWludDhBcnJheShhKSksZShudWxsLHt2ZWN0b3JUaWxlOmkscmF3RGF0YTphLmJ1ZmZlcn0pfW90LnByb3RvdHlwZT17b3B0aW9uczp7bWluWm9vbTowLG1heFpvb206MTYscmFkaXVzOjQwLGV4dGVudDo1MTIsbm9kZVNpemU6NjQsbG9nOiExLHJlZHVjZTpudWxsLGluaXRpYWw6ZnVuY3Rpb24oKXtyZXR1cm57fX0sbWFwOmZ1bmN0aW9uKHQpe3JldHVybiB0fX0sbG9hZDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMubG9nO2UmJmNvbnNvbGUudGltZShcInRvdGFsIHRpbWVcIik7dmFyIHI9XCJwcmVwYXJlIFwiK3QubGVuZ3RoK1wiIHBvaW50c1wiO2UmJmNvbnNvbGUudGltZShyKSx0aGlzLnBvaW50cz10O3ZhciBuPXQubWFwKGx0KTtlJiZjb25zb2xlLnRpbWVFbmQocik7Zm9yKHZhciBpPXRoaXMub3B0aW9ucy5tYXhab29tO2k+PXRoaXMub3B0aW9ucy5taW5ab29tO2ktLSl7dmFyIGE9K0RhdGUubm93KCk7dGhpcy50cmVlc1tpKzFdPXJ0KG4sZHQsZ3QsdGhpcy5vcHRpb25zLm5vZGVTaXplLEZsb2F0MzJBcnJheSksbj10aGlzLl9jbHVzdGVyKG4saSksZSYmY29uc29sZS5sb2coXCJ6JWQ6ICVkIGNsdXN0ZXJzIGluICVkbXNcIixpLG4ubGVuZ3RoLCtEYXRlLm5vdygpLWEpfXJldHVybiB0aGlzLnRyZWVzW3RoaXMub3B0aW9ucy5taW5ab29tXT1ydChuLGR0LGd0LHRoaXMub3B0aW9ucy5ub2RlU2l6ZSxGbG9hdDMyQXJyYXkpLGUmJmNvbnNvbGUudGltZUVuZChcInRvdGFsIHRpbWVcIiksdGhpc30sZ2V0Q2x1c3RlcnM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy50cmVlc1t0aGlzLl9saW1pdFpvb20oZSldLG49ci5yYW5nZShodCh0WzBdKSxmdCh0WzNdKSxodCh0WzJdKSxmdCh0WzFdKSksaT1bXSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBvPXIucG9pbnRzW25bYV1dO2kucHVzaChvLm51bVBvaW50cz9jdChvKTp0aGlzLnBvaW50c1tvLmlkXSl9cmV0dXJuIGl9LGdldENoaWxkcmVuOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMudHJlZXNbZSsxXS5wb2ludHNbdF0sbj10aGlzLm9wdGlvbnMucmFkaXVzLyh0aGlzLm9wdGlvbnMuZXh0ZW50Kk1hdGgucG93KDIsZSkpLGk9dGhpcy50cmVlc1tlKzFdLndpdGhpbihyLngsci55LG4pLGE9W10sbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz10aGlzLnRyZWVzW2UrMV0ucG9pbnRzW2lbb11dO3MucGFyZW50SWQ9PT10JiZhLnB1c2gocy5udW1Qb2ludHM/Y3Qocyk6dGhpcy5wb2ludHNbcy5pZF0pfXJldHVybiBhfSxnZXRMZWF2ZXM6ZnVuY3Rpb24odCxlLHIsbil7cj1yfHwxMCxuPW58fDA7dmFyIGk9W107cmV0dXJuIHRoaXMuX2FwcGVuZExlYXZlcyhpLHQsZSxyLG4sMCksaX0sZ2V0VGlsZTpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy50cmVlc1t0aGlzLl9saW1pdFpvb20odCldLGk9TWF0aC5wb3coMix0KSxhPXRoaXMub3B0aW9ucy5leHRlbnQsbz10aGlzLm9wdGlvbnMucmFkaXVzL2Escz0oci1vKS9pLGw9KHIrMStvKS9pLGM9e2ZlYXR1cmVzOltdfTtyZXR1cm4gdGhpcy5fYWRkVGlsZUZlYXR1cmVzKG4ucmFuZ2UoKGUtbykvaSxzLChlKzErbykvaSxsKSxuLnBvaW50cyxlLHIsaSxjKSwwPT09ZSYmdGhpcy5fYWRkVGlsZUZlYXR1cmVzKG4ucmFuZ2UoMS1vL2kscywxLGwpLG4ucG9pbnRzLGkscixpLGMpLGU9PT1pLTEmJnRoaXMuX2FkZFRpbGVGZWF0dXJlcyhuLnJhbmdlKDAscyxvL2ksbCksbi5wb2ludHMsLTEscixpLGMpLGMuZmVhdHVyZXMubGVuZ3RoP2M6bnVsbH0sZ2V0Q2x1c3RlckV4cGFuc2lvblpvb206ZnVuY3Rpb24odCxlKXtmb3IoO2U8dGhpcy5vcHRpb25zLm1heFpvb207KXt2YXIgcj10aGlzLmdldENoaWxkcmVuKHQsZSk7aWYoZSsrLDEhPT1yLmxlbmd0aClicmVhazt0PXJbMF0ucHJvcGVydGllcy5jbHVzdGVyX2lkfXJldHVybiBlfSxfYXBwZW5kTGVhdmVzOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG89dGhpcy5nZXRDaGlsZHJlbihlLHIpLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXS5wcm9wZXJ0aWVzO2lmKGwuY2x1c3Rlcj9hK2wucG9pbnRfY291bnQ8PWk/YSs9bC5wb2ludF9jb3VudDphPXRoaXMuX2FwcGVuZExlYXZlcyh0LGwuY2x1c3Rlcl9pZCxyKzEsbixpLGEpOmE8aT9hKys6dC5wdXNoKG9bc10pLHQubGVuZ3RoPT09bilicmVha31yZXR1cm4gYX0sX2FkZFRpbGVGZWF0dXJlczpmdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPWVbdFtvXV07YS5mZWF0dXJlcy5wdXNoKHt0eXBlOjEsZ2VvbWV0cnk6W1tNYXRoLnJvdW5kKHRoaXMub3B0aW9ucy5leHRlbnQqKHMueCppLXIpKSxNYXRoLnJvdW5kKHRoaXMub3B0aW9ucy5leHRlbnQqKHMueSppLW4pKV1dLHRhZ3M6cy5udW1Qb2ludHM/dXQocyk6dGhpcy5wb2ludHNbcy5pZF0ucHJvcGVydGllc30pfX0sX2xpbWl0Wm9vbTpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgodGhpcy5vcHRpb25zLm1pblpvb20sTWF0aC5taW4odCx0aGlzLm9wdGlvbnMubWF4Wm9vbSsxKSl9LF9jbHVzdGVyOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49dGhpcy5vcHRpb25zLnJhZGl1cy8odGhpcy5vcHRpb25zLmV4dGVudCpNYXRoLnBvdygyLGUpKSxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPXRbaV07aWYoIShhLnpvb208PWUpKXthLnpvb209ZTt2YXIgbz10aGlzLnRyZWVzW2UrMV0scz1vLndpdGhpbihhLngsYS55LG4pLGw9YS5udW1Qb2ludHN8fDEsYz1hLngqbCx1PWEueSpsLGg9bnVsbDt0aGlzLm9wdGlvbnMucmVkdWNlJiYoaD10aGlzLm9wdGlvbnMuaW5pdGlhbCgpLHRoaXMuX2FjY3VtdWxhdGUoaCxhKSk7Zm9yKHZhciBmPTA7ZjxzLmxlbmd0aDtmKyspe3ZhciBwPW8ucG9pbnRzW3NbZl1dO2lmKGU8cC56b29tKXt2YXIgZD1wLm51bVBvaW50c3x8MTtwLnpvb209ZSxjKz1wLngqZCx1Kz1wLnkqZCxsKz1kLHAucGFyZW50SWQ9aSx0aGlzLm9wdGlvbnMucmVkdWNlJiZ0aGlzLl9hY2N1bXVsYXRlKGgscCl9fTE9PT1sP3IucHVzaChhKTooYS5wYXJlbnRJZD1pLHIucHVzaChzdChjL2wsdS9sLGwsaSxoKSkpfX1yZXR1cm4gcn0sX2FjY3VtdWxhdGU6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLm51bVBvaW50cz9lLnByb3BlcnRpZXM6dGhpcy5vcHRpb25zLm1hcCh0aGlzLnBvaW50c1tlLmlkXS5wcm9wZXJ0aWVzKTt0aGlzLm9wdGlvbnMucmVkdWNlKHQscil9fSxqdC5wcm90b3R5cGUub3B0aW9ucz17bWF4Wm9vbToxNCxpbmRleE1heFpvb206NSxpbmRleE1heFBvaW50czoxZTUsdG9sZXJhbmNlOjMsZXh0ZW50OjQwOTYsYnVmZmVyOjY0LGxpbmVNZXRyaWNzOiExLGRlYnVnOjB9LGp0LnByb3RvdHlwZS5zcGxpdFRpbGU9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPVt0LGUscixuXSxsPXRoaXMub3B0aW9ucyxjPWwuZGVidWc7cy5sZW5ndGg7KXtuPXMucG9wKCkscj1zLnBvcCgpLGU9cy5wb3AoKSx0PXMucG9wKCk7dmFyIHU9MTw8ZSxoPVZ0KGUscixuKSxmPXRoaXMudGlsZXNbaF07aWYoIWYmJihjPjEmJmNvbnNvbGUudGltZShcImNyZWF0aW9uXCIpLGY9dGhpcy50aWxlc1toXT1GdCh0LGUscixuLGwpLHRoaXMudGlsZUNvb3Jkcy5wdXNoKHt6OmUseDpyLHk6bn0pLGMpKXtjPjEmJihjb25zb2xlLmxvZyhcInRpbGUgeiVkLSVkLSVkIChmZWF0dXJlczogJWQsIHBvaW50czogJWQsIHNpbXBsaWZpZWQ6ICVkKVwiLGUscixuLGYubnVtRmVhdHVyZXMsZi5udW1Qb2ludHMsZi5udW1TaW1wbGlmaWVkKSxjb25zb2xlLnRpbWVFbmQoXCJjcmVhdGlvblwiKSk7dmFyIHA9XCJ6XCIrZTt0aGlzLnN0YXRzW3BdPSh0aGlzLnN0YXRzW3BdfHwwKSsxLHRoaXMudG90YWwrK31pZihmLnNvdXJjZT10LGkpe2lmKGU9PT1sLm1heFpvb218fGU9PT1pKWNvbnRpbnVlO3ZhciBkPTE8PGktZTtpZihyIT09TWF0aC5mbG9vcihhL2QpfHxuIT09TWF0aC5mbG9vcihvL2QpKWNvbnRpbnVlfWVsc2UgaWYoZT09PWwuaW5kZXhNYXhab29tfHxmLm51bVBvaW50czw9bC5pbmRleE1heFBvaW50cyljb250aW51ZTtpZihmLnNvdXJjZT1udWxsLDAhPT10Lmxlbmd0aCl7Yz4xJiZjb25zb2xlLnRpbWUoXCJjbGlwcGluZ1wiKTt2YXIgZyx2LG0seSx4LGIsXz0uNSpsLmJ1ZmZlci9sLmV4dGVudCx3PS41LV8saz0uNStfLEE9MStfO2c9dj1tPXk9bnVsbCx4PVR0KHQsdSxyLV8scitrLDAsZi5taW5YLGYubWF4WCxsKSxiPVR0KHQsdSxyK3cscitBLDAsZi5taW5YLGYubWF4WCxsKSx0PW51bGwseCYmKGc9VHQoeCx1LG4tXyxuK2ssMSxmLm1pblksZi5tYXhZLGwpLHY9VHQoeCx1LG4rdyxuK0EsMSxmLm1pblksZi5tYXhZLGwpLHg9bnVsbCksYiYmKG09VHQoYix1LG4tXyxuK2ssMSxmLm1pblksZi5tYXhZLGwpLHk9VHQoYix1LG4rdyxuK0EsMSxmLm1pblksZi5tYXhZLGwpLGI9bnVsbCksYz4xJiZjb25zb2xlLnRpbWVFbmQoXCJjbGlwcGluZ1wiKSxzLnB1c2goZ3x8W10sZSsxLDIqciwyKm4pLHMucHVzaCh2fHxbXSxlKzEsMipyLDIqbisxKSxzLnB1c2gobXx8W10sZSsxLDIqcisxLDIqbikscy5wdXNoKHl8fFtdLGUrMSwyKnIrMSwyKm4rMSl9fX0sanQucHJvdG90eXBlLmdldFRpbGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMub3B0aW9ucyxpPW4uZXh0ZW50LGE9bi5kZWJ1ZztpZih0PDB8fHQ+MjQpcmV0dXJuIG51bGw7dmFyIG89MTw8dCxzPVZ0KHQsZT0oZSVvK28pJW8scik7aWYodGhpcy50aWxlc1tzXSlyZXR1cm4gUHQodGhpcy50aWxlc1tzXSxpKTthPjEmJmNvbnNvbGUubG9nKFwiZHJpbGxpbmcgZG93biB0byB6JWQtJWQtJWRcIix0LGUscik7Zm9yKHZhciBsLGM9dCx1PWUsaD1yOyFsJiZjPjA7KWMtLSx1PU1hdGguZmxvb3IodS8yKSxoPU1hdGguZmxvb3IoaC8yKSxsPXRoaXMudGlsZXNbVnQoYyx1LGgpXTtyZXR1cm4gbCYmbC5zb3VyY2U/KGE+MSYmY29uc29sZS5sb2coXCJmb3VuZCBwYXJlbnQgdGlsZSB6JWQtJWQtJWRcIixjLHUsaCksYT4xJiZjb25zb2xlLnRpbWUoXCJkcmlsbGluZyBkb3duXCIpLHRoaXMuc3BsaXRUaWxlKGwuc291cmNlLGMsdSxoLHQsZSxyKSxhPjEmJmNvbnNvbGUudGltZUVuZChcImRyaWxsaW5nIGRvd25cIiksdGhpcy50aWxlc1tzXT9QdCh0aGlzLnRpbGVzW3NdLGkpOm51bGwpOm51bGx9O3ZhciBxdD1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHQscixuKXtlLmNhbGwodGhpcyx0LHIsVXQpLG4mJih0aGlzLmxvYWRHZW9KU09OPW4pfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkRGF0YT1mdW5jdGlvbih0LGUpe3RoaXMuX3BlbmRpbmdDYWxsYmFjayYmdGhpcy5fcGVuZGluZ0NhbGxiYWNrKG51bGwse2FiYW5kb25lZDohMH0pLHRoaXMuX3BlbmRpbmdDYWxsYmFjaz1lLHRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtcz10LHRoaXMuX3N0YXRlJiZcIklkbGVcIiE9PXRoaXMuX3N0YXRlP3RoaXMuX3N0YXRlPVwiTmVlZHNMb2FkRGF0YVwiOih0aGlzLl9zdGF0ZT1cIkNvYWxlc2NpbmdcIix0aGlzLl9sb2FkRGF0YSgpKX0sci5wcm90b3R5cGUuX2xvYWREYXRhPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0aGlzLl9wZW5kaW5nQ2FsbGJhY2smJnRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtcyl7dmFyIGU9dGhpcy5fcGVuZGluZ0NhbGxiYWNrLHI9dGhpcy5fcGVuZGluZ0xvYWREYXRhUGFyYW1zO2RlbGV0ZSB0aGlzLl9wZW5kaW5nQ2FsbGJhY2ssZGVsZXRlIHRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtcyx0aGlzLmxvYWRHZW9KU09OKHIsZnVuY3Rpb24obixpKXtpZihufHwhaSlyZXR1cm4gZShuKTtpZihcIm9iamVjdFwiIT10eXBlb2YgaSlyZXR1cm4gZShuZXcgRXJyb3IoXCJJbnB1dCBkYXRhIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LlwiKSk7IWZ1bmN0aW9uIHQoZSxyKXtzd2l0Y2goZSYmZS50eXBlfHxudWxsKXtjYXNlXCJGZWF0dXJlQ29sbGVjdGlvblwiOnJldHVybiBlLmZlYXR1cmVzPWUuZmVhdHVyZXMubWFwKHoodCxyKSksZTtjYXNlXCJGZWF0dXJlXCI6cmV0dXJuIGUuZ2VvbWV0cnk9dChlLmdlb21ldHJ5LHIpLGU7Y2FzZVwiUG9seWdvblwiOmNhc2VcIk11bHRpUG9seWdvblwiOnJldHVybiBmdW5jdGlvbih0LGUpe3JldHVyblwiUG9seWdvblwiPT09dC50eXBlP3QuY29vcmRpbmF0ZXM9Tyh0LmNvb3JkaW5hdGVzLGUpOlwiTXVsdGlQb2x5Z29uXCI9PT10LnR5cGUmJih0LmNvb3JkaW5hdGVzPXQuY29vcmRpbmF0ZXMubWFwKHooTyxlKSkpLHR9KGUscik7ZGVmYXVsdDpyZXR1cm4gZX19KGksITApO3RyeXt0Ll9nZW9KU09OSW5kZXg9ci5jbHVzdGVyP2Z1bmN0aW9uKHQpe3JldHVybiBuZXcgb3QodCl9KHIuc3VwZXJjbHVzdGVyT3B0aW9ucykubG9hZChpLmZlYXR1cmVzKTpuZXcganQoaSxyLmdlb2pzb25WdE9wdGlvbnMpfWNhdGNoKG4pe3JldHVybiBlKG4pfXQubG9hZGVkPXt9O3ZhciBhPXt9O2lmKHIucmVxdWVzdCYmci5yZXF1ZXN0LmNvbGxlY3RSZXNvdXJjZVRpbWluZyl7dmFyIG89dyhyLnJlcXVlc3QudXJsKTtvJiYoYS5yZXNvdXJjZVRpbWluZz17fSxhLnJlc291cmNlVGltaW5nW3Iuc291cmNlXT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG8pKSl9ZShudWxsLGEpfSl9fSxyLnByb3RvdHlwZS5jb2FsZXNjZT1mdW5jdGlvbigpe1wiQ29hbGVzY2luZ1wiPT09dGhpcy5fc3RhdGU/dGhpcy5fc3RhdGU9XCJJZGxlXCI6XCJOZWVkc0xvYWREYXRhXCI9PT10aGlzLl9zdGF0ZSYmKHRoaXMuX3N0YXRlPVwiQ29hbGVzY2luZ1wiLHRoaXMuX2xvYWREYXRhKCkpfSxyLnByb3RvdHlwZS5yZWxvYWRUaWxlPWZ1bmN0aW9uKHQscil7dmFyIG49dGhpcy5sb2FkZWQsaT10LnVpZDtyZXR1cm4gbiYmbltpXT9lLnByb3RvdHlwZS5yZWxvYWRUaWxlLmNhbGwodGhpcyx0LHIpOnRoaXMubG9hZFRpbGUodCxyKX0sci5wcm90b3R5cGUubG9hZEdlb0pTT049ZnVuY3Rpb24oZSxyKXtpZihlLnJlcXVlc3QpdC5nZXRKU09OKGUucmVxdWVzdCxyKTtlbHNle2lmKFwic3RyaW5nXCIhPXR5cGVvZiBlLmRhdGEpcmV0dXJuIHIobmV3IEVycm9yKFwiSW5wdXQgZGF0YSBpcyBub3QgYSB2YWxpZCBHZW9KU09OIG9iamVjdC5cIikpO3RyeXtyZXR1cm4gcihudWxsLEpTT04ucGFyc2UoZS5kYXRhKSl9Y2F0Y2godCl7cmV0dXJuIHIobmV3IEVycm9yKFwiSW5wdXQgZGF0YSBpcyBub3QgYSB2YWxpZCBHZW9KU09OIG9iamVjdC5cIikpfX19LHIucHJvdG90eXBlLnJlbW92ZVNvdXJjZT1mdW5jdGlvbih0LGUpe3RoaXMuX3BlbmRpbmdDYWxsYmFjayYmdGhpcy5fcGVuZGluZ0NhbGxiYWNrKG51bGwse2FiYW5kb25lZDohMH0pLGUoKX0scn0oQSksSHQ9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpczt0aGlzLnNlbGY9ZSx0aGlzLmFjdG9yPW5ldyB0LmRlZmF1bHQkNyhlLHRoaXMpLHRoaXMubGF5ZXJJbmRleGVzPXt9LHRoaXMud29ya2VyU291cmNlVHlwZXM9e3ZlY3RvcjpBLGdlb2pzb246cXR9LHRoaXMud29ya2VyU291cmNlcz17fSx0aGlzLmRlbVdvcmtlclNvdXJjZXM9e30sdGhpcy5zZWxmLnJlZ2lzdGVyV29ya2VyU291cmNlPWZ1bmN0aW9uKHQsZSl7aWYoci53b3JrZXJTb3VyY2VUeXBlc1t0XSl0aHJvdyBuZXcgRXJyb3IoJ1dvcmtlciBzb3VyY2Ugd2l0aCBuYW1lIFwiJyt0KydcIiBhbHJlYWR5IHJlZ2lzdGVyZWQuJyk7ci53b3JrZXJTb3VyY2VUeXBlc1t0XT1lfSx0aGlzLnNlbGYucmVnaXN0ZXJSVExUZXh0UGx1Z2luPWZ1bmN0aW9uKGUpe2lmKHQucGx1Z2luLmlzTG9hZGVkKCkpdGhyb3cgbmV3IEVycm9yKFwiUlRMIHRleHQgcGx1Z2luIGFscmVhZHkgcmVnaXN0ZXJlZC5cIik7dC5wbHVnaW4uYXBwbHlBcmFiaWNTaGFwaW5nPWUuYXBwbHlBcmFiaWNTaGFwaW5nLHQucGx1Z2luLnByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dD1lLnByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dH19O3JldHVybiBIdC5wcm90b3R5cGUuc2V0TGF5ZXJzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldExheWVySW5kZXgodCkucmVwbGFjZShlKSxyKCl9LEh0LnByb3RvdHlwZS51cGRhdGVMYXllcnM9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0TGF5ZXJJbmRleCh0KS51cGRhdGUoZS5sYXllcnMsZS5yZW1vdmVkSWRzKSxyKCl9LEh0LnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbih0LGUscil7dGhpcy5nZXRXb3JrZXJTb3VyY2UodCxlLnR5cGUsZS5zb3VyY2UpLmxvYWRUaWxlKGUscil9LEh0LnByb3RvdHlwZS5sb2FkREVNVGlsZT1mdW5jdGlvbih0LGUscil7dGhpcy5nZXRERU1Xb3JrZXJTb3VyY2UodCxlLnNvdXJjZSkubG9hZFRpbGUoZSxyKX0sSHQucHJvdG90eXBlLnJlbG9hZFRpbGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0V29ya2VyU291cmNlKHQsZS50eXBlLGUuc291cmNlKS5yZWxvYWRUaWxlKGUscil9LEh0LnByb3RvdHlwZS5hYm9ydFRpbGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0V29ya2VyU291cmNlKHQsZS50eXBlLGUuc291cmNlKS5hYm9ydFRpbGUoZSxyKX0sSHQucHJvdG90eXBlLnJlbW92ZVRpbGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0V29ya2VyU291cmNlKHQsZS50eXBlLGUuc291cmNlKS5yZW1vdmVUaWxlKGUscil9LEh0LnByb3RvdHlwZS5yZW1vdmVERU1UaWxlPWZ1bmN0aW9uKHQsZSl7dGhpcy5nZXRERU1Xb3JrZXJTb3VyY2UodCxlLnNvdXJjZSkucmVtb3ZlVGlsZShlKX0sSHQucHJvdG90eXBlLnJlbW92ZVNvdXJjZT1mdW5jdGlvbih0LGUscil7aWYodGhpcy53b3JrZXJTb3VyY2VzW3RdJiZ0aGlzLndvcmtlclNvdXJjZXNbdF1bZS50eXBlXSYmdGhpcy53b3JrZXJTb3VyY2VzW3RdW2UudHlwZV1bZS5zb3VyY2VdKXt2YXIgbj10aGlzLndvcmtlclNvdXJjZXNbdF1bZS50eXBlXVtlLnNvdXJjZV07ZGVsZXRlIHRoaXMud29ya2VyU291cmNlc1t0XVtlLnR5cGVdW2Uuc291cmNlXSx2b2lkIDAhPT1uLnJlbW92ZVNvdXJjZT9uLnJlbW92ZVNvdXJjZShlLHIpOnIoKX19LEh0LnByb3RvdHlwZS5sb2FkV29ya2VyU291cmNlPWZ1bmN0aW9uKHQsZSxyKXt0cnl7dGhpcy5zZWxmLmltcG9ydFNjcmlwdHMoZS51cmwpLHIoKX1jYXRjaCh0KXtyKHQudG9TdHJpbmcoKSl9fSxIdC5wcm90b3R5cGUubG9hZFJUTFRleHRQbHVnaW49ZnVuY3Rpb24oZSxyLG4pe3RyeXt0LnBsdWdpbi5pc0xvYWRlZCgpfHwodGhpcy5zZWxmLmltcG9ydFNjcmlwdHMociksbih0LnBsdWdpbi5pc0xvYWRlZCgpP251bGw6bmV3IEVycm9yKFwiUlRMIFRleHQgUGx1Z2luIGZhaWxlZCB0byBpbXBvcnQgc2NyaXB0cyBmcm9tIFwiK3IpKSl9Y2F0Y2godCl7bih0LnRvU3RyaW5nKCkpfX0sSHQucHJvdG90eXBlLmdldExheWVySW5kZXg9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXllckluZGV4ZXNbdF07cmV0dXJuIGV8fChlPXRoaXMubGF5ZXJJbmRleGVzW3RdPW5ldyBuKSxlfSxIdC5wcm90b3R5cGUuZ2V0V29ya2VyU291cmNlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzO2lmKHRoaXMud29ya2VyU291cmNlc1t0XXx8KHRoaXMud29ya2VyU291cmNlc1t0XT17fSksdGhpcy53b3JrZXJTb3VyY2VzW3RdW2VdfHwodGhpcy53b3JrZXJTb3VyY2VzW3RdW2VdPXt9KSwhdGhpcy53b3JrZXJTb3VyY2VzW3RdW2VdW3JdKXt2YXIgaT17c2VuZDpmdW5jdGlvbihlLHIsaSl7bi5hY3Rvci5zZW5kKGUscixpLHQpfX07dGhpcy53b3JrZXJTb3VyY2VzW3RdW2VdW3JdPW5ldyB0aGlzLndvcmtlclNvdXJjZVR5cGVzW2VdKGksdGhpcy5nZXRMYXllckluZGV4KHQpKX1yZXR1cm4gdGhpcy53b3JrZXJTb3VyY2VzW3RdW2VdW3JdfSxIdC5wcm90b3R5cGUuZ2V0REVNV29ya2VyU291cmNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZGVtV29ya2VyU291cmNlc1t0XXx8KHRoaXMuZGVtV29ya2VyU291cmNlc1t0XT17fSksdGhpcy5kZW1Xb3JrZXJTb3VyY2VzW3RdW2VdfHwodGhpcy5kZW1Xb3JrZXJTb3VyY2VzW3RdW2VdPW5ldyBUKSx0aGlzLmRlbVdvcmtlclNvdXJjZXNbdF1bZV19LFwidW5kZWZpbmVkXCIhPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYmJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmbmV3IEh0KHNlbGYpLEh0fSksaSgwLGZ1bmN0aW9uKHQpe3ZhciBlPXQuY3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm4hIShcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQmJkFycmF5LnByb3RvdHlwZSYmQXJyYXkucHJvdG90eXBlLmV2ZXJ5JiZBcnJheS5wcm90b3R5cGUuZmlsdGVyJiZBcnJheS5wcm90b3R5cGUuZm9yRWFjaCYmQXJyYXkucHJvdG90eXBlLmluZGV4T2YmJkFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiYmQXJyYXkucHJvdG90eXBlLm1hcCYmQXJyYXkucHJvdG90eXBlLnNvbWUmJkFycmF5LnByb3RvdHlwZS5yZWR1Y2UmJkFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCYmQXJyYXkuaXNBcnJheSYmRnVuY3Rpb24ucHJvdG90eXBlJiZGdW5jdGlvbi5wcm90b3R5cGUuYmluZCYmT2JqZWN0LmtleXMmJk9iamVjdC5jcmVhdGUmJk9iamVjdC5nZXRQcm90b3R5cGVPZiYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMmJk9iamVjdC5pc1NlYWxlZCYmT2JqZWN0LmlzRnJvemVuJiZPYmplY3QuaXNFeHRlbnNpYmxlJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJiZPYmplY3QuZGVmaW5lUHJvcGVydHkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzJiZPYmplY3Quc2VhbCYmT2JqZWN0LmZyZWV6ZSYmT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zJiZcIkpTT05cImluIHdpbmRvdyYmXCJwYXJzZVwiaW4gSlNPTiYmXCJzdHJpbmdpZnlcImluIEpTT04mJmZ1bmN0aW9uKCl7aWYoIShcIldvcmtlclwiaW4gd2luZG93JiZcIkJsb2JcImluIHdpbmRvdyYmXCJVUkxcImluIHdpbmRvdykpcmV0dXJuITE7dmFyIHQsZSxyPW5ldyBCbG9iKFtcIlwiXSx7dHlwZTpcInRleHQvamF2YXNjcmlwdFwifSksbj1VUkwuY3JlYXRlT2JqZWN0VVJMKHIpO3RyeXtlPW5ldyBXb3JrZXIobiksdD0hMH1jYXRjaChlKXt0PSExfXJldHVybiBlJiZlLnRlcm1pbmF0ZSgpLFVSTC5yZXZva2VPYmplY3RVUkwobiksdH0oKSYmXCJVaW50OENsYW1wZWRBcnJheVwiaW4gd2luZG93JiZmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09clt0XSYmKHJbdF09ZnVuY3Rpb24odCl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSxuPU9iamVjdC5jcmVhdGUoZS53ZWJHTENvbnRleHRBdHRyaWJ1dGVzKTtyZXR1cm4gbi5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0PXQsci5wcm9iYWJseVN1cHBvcnRzQ29udGV4dD9yLnByb2JhYmx5U3VwcG9ydHNDb250ZXh0KFwid2ViZ2xcIixuKXx8ci5wcm9iYWJseVN1cHBvcnRzQ29udGV4dChcImV4cGVyaW1lbnRhbC13ZWJnbFwiLG4pOnIuc3VwcG9ydHNDb250ZXh0P3Iuc3VwcG9ydHNDb250ZXh0KFwid2ViZ2xcIixuKXx8ci5zdXBwb3J0c0NvbnRleHQoXCJleHBlcmltZW50YWwtd2ViZ2xcIixuKTpyLmdldENvbnRleHQoXCJ3ZWJnbFwiLG4pfHxyLmdldENvbnRleHQoXCJleHBlcmltZW50YWwtd2ViZ2xcIixuKX0odCkpLHJbdF19KHQmJnQuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCkpfXQuZXhwb3J0cz90LmV4cG9ydHM9ZTp3aW5kb3cmJih3aW5kb3cubWFwYm94Z2w9d2luZG93Lm1hcGJveGdsfHx7fSx3aW5kb3cubWFwYm94Z2wuc3VwcG9ydGVkPWUpO3ZhciByPXt9O2Uud2ViR0xDb250ZXh0QXR0cmlidXRlcz17YW50aWFsaWFzOiExLGFscGhhOiEwLHN0ZW5jaWw6ITAsZGVwdGg6ITB9fSkscj10LmRlZmF1bHQucGVyZm9ybWFuY2UmJnQuZGVmYXVsdC5wZXJmb3JtYW5jZS5ub3c/dC5kZWZhdWx0LnBlcmZvcm1hbmNlLm5vdy5iaW5kKHQuZGVmYXVsdC5wZXJmb3JtYW5jZSk6RGF0ZS5ub3cuYmluZChEYXRlKSxuPXQuZGVmYXVsdC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHQuZGVmYXVsdC5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHQuZGVmYXVsdC53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHQuZGVmYXVsdC5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSxpPXQuZGVmYXVsdC5jYW5jZWxBbmltYXRpb25GcmFtZXx8dC5kZWZhdWx0Lm1vekNhbmNlbEFuaW1hdGlvbkZyYW1lfHx0LmRlZmF1bHQud2Via2l0Q2FuY2VsQW5pbWF0aW9uRnJhbWV8fHQuZGVmYXVsdC5tc0NhbmNlbEFuaW1hdGlvbkZyYW1lLGE9e25vdzpyLGZyYW1lOmZ1bmN0aW9uKHQpe3JldHVybiBuKHQpfSxjYW5jZWxGcmFtZTpmdW5jdGlvbih0KXtyZXR1cm4gaSh0KX0sZ2V0SW1hZ2VEYXRhOmZ1bmN0aW9uKGUpe3ZhciByPXQuZGVmYXVsdC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLG49ci5nZXRDb250ZXh0KFwiMmRcIik7aWYoIW4pdGhyb3cgbmV3IEVycm9yKFwiZmFpbGVkIHRvIGNyZWF0ZSBjYW52YXMgMmQgY29udGV4dFwiKTtyZXR1cm4gci53aWR0aD1lLndpZHRoLHIuaGVpZ2h0PWUuaGVpZ2h0LG4uZHJhd0ltYWdlKGUsMCwwLGUud2lkdGgsZS5oZWlnaHQpLG4uZ2V0SW1hZ2VEYXRhKDAsMCxlLndpZHRoLGUuaGVpZ2h0KX0saGFyZHdhcmVDb25jdXJyZW5jeTp0LmRlZmF1bHQubmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3l8fDQsZ2V0IGRldmljZVBpeGVsUmF0aW8oKXtyZXR1cm4gdC5kZWZhdWx0LmRldmljZVBpeGVsUmF0aW99LHN1cHBvcnRzV2VicDohMX07aWYodC5kZWZhdWx0LmRvY3VtZW50KXt2YXIgbz10LmRlZmF1bHQuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtvLm9ubG9hZD1mdW5jdGlvbigpe2Euc3VwcG9ydHNXZWJwPSEwfSxvLnNyYz1cImRhdGE6aW1hZ2Uvd2VicDtiYXNlNjQsVWtsR1JoNEFBQUJYUlVKUVZsQTRUQkVBQUFBdkFRQUFBQWZRLy83M3YvK0JpT2gvQUFBPVwifXZhciBzPXtjcmVhdGU6ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXQuZGVmYXVsdC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpO3JldHVybiByJiYoaS5jbGFzc05hbWU9ciksbiYmbi5hcHBlbmRDaGlsZChpKSxpfSxjcmVhdGVOUzpmdW5jdGlvbihlLHIpe3JldHVybiB0LmRlZmF1bHQuZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUscil9fSxsPXQuZGVmYXVsdC5kb2N1bWVudD90LmRlZmF1bHQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlOm51bGw7ZnVuY3Rpb24gYyh0KXtpZighbClyZXR1cm4gbnVsbDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdaW4gbClyZXR1cm4gdFtlXTtyZXR1cm4gdFswXX12YXIgdSxoPWMoW1widXNlclNlbGVjdFwiLFwiTW96VXNlclNlbGVjdFwiLFwiV2Via2l0VXNlclNlbGVjdFwiLFwibXNVc2VyU2VsZWN0XCJdKTtzLmRpc2FibGVEcmFnPWZ1bmN0aW9uKCl7bCYmaCYmKHU9bFtoXSxsW2hdPVwibm9uZVwiKX0scy5lbmFibGVEcmFnPWZ1bmN0aW9uKCl7bCYmaCYmKGxbaF09dSl9O3ZhciBmPWMoW1widHJhbnNmb3JtXCIsXCJXZWJraXRUcmFuc2Zvcm1cIl0pO3Muc2V0VHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSl7dC5zdHlsZVtmXT1lfTt2YXIgcD0hMTt0cnl7dmFyIGQ9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwicGFzc2l2ZVwiLHtnZXQ6ZnVuY3Rpb24oKXtwPSEwfX0pO3QuZGVmYXVsdC5hZGRFdmVudExpc3RlbmVyKFwidGVzdFwiLGQsZCksdC5kZWZhdWx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0ZXN0XCIsZCxkKX1jYXRjaCh0KXtwPSExfXMuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUscixuKXt2b2lkIDA9PT1uJiYobj17fSksXCJwYXNzaXZlXCJpbiBuJiZwP3QuYWRkRXZlbnRMaXN0ZW5lcihlLHIsbik6dC5hZGRFdmVudExpc3RlbmVyKGUscixuLmNhcHR1cmUpfSxzLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxlLHIsbil7dm9pZCAwPT09biYmKG49e30pLFwicGFzc2l2ZVwiaW4gbiYmcD90LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxyLG4pOnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHIsbi5jYXB0dXJlKX07dmFyIGc9ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksdC5kZWZhdWx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLGcsITApfTtzLnN1cHByZXNzQ2xpY2s9ZnVuY3Rpb24oKXt0LmRlZmF1bHQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsZywhMCksdC5kZWZhdWx0LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LmRlZmF1bHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsZywhMCl9LDApfSxzLm1vdXNlUG9zPWZ1bmN0aW9uKGUscil7dmFyIG49ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gcj1yLnRvdWNoZXM/ci50b3VjaGVzWzBdOnIsbmV3IHQuZGVmYXVsdCQxKHIuY2xpZW50WC1uLmxlZnQtZS5jbGllbnRMZWZ0LHIuY2xpZW50WS1uLnRvcC1lLmNsaWVudFRvcCl9LHMudG91Y2hQb3M9ZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPVtdLGE9XCJ0b3VjaGVuZFwiPT09ci50eXBlP3IuY2hhbmdlZFRvdWNoZXM6ci50b3VjaGVzLG89MDtvPGEubGVuZ3RoO28rKylpLnB1c2gobmV3IHQuZGVmYXVsdCQxKGFbb10uY2xpZW50WC1uLmxlZnQtZS5jbGllbnRMZWZ0LGFbb10uY2xpZW50WS1uLnRvcC1lLmNsaWVudFRvcCkpO3JldHVybiBpfSxzLm1vdXNlQnV0dG9uPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT10LmRlZmF1bHQuSW5zdGFsbFRyaWdnZXImJjI9PT1lLmJ1dHRvbiYmZS5jdHJsS2V5JiZ0LmRlZmF1bHQubmF2aWdhdG9yLnBsYXRmb3JtLnRvVXBwZXJDYXNlKCkuaW5kZXhPZihcIk1BQ1wiKT49MD8wOmUuYnV0dG9ufSxzLnJlbW92ZT1mdW5jdGlvbih0KXt0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KX07dmFyIHY9e0FQSV9VUkw6XCJodHRwczovL2FwaS5tYXBib3guY29tXCIsUkVRVUlSRV9BQ0NFU1NfVE9LRU46ITAsQUNDRVNTX1RPS0VOOm51bGx9LG09XCJTZWUgaHR0cHM6Ly93d3cubWFwYm94LmNvbS9hcGktZG9jdW1lbnRhdGlvbi8jYWNjZXNzLXRva2Vuc1wiO2Z1bmN0aW9uIHkodCxlKXt2YXIgcj1UKHYuQVBJX1VSTCk7aWYodC5wcm90b2NvbD1yLnByb3RvY29sLHQuYXV0aG9yaXR5PXIuYXV0aG9yaXR5LFwiL1wiIT09ci5wYXRoJiYodC5wYXRoPVwiXCIrci5wYXRoK3QucGF0aCksIXYuUkVRVUlSRV9BQ0NFU1NfVE9LRU4pcmV0dXJuIE0odCk7aWYoIShlPWV8fHYuQUNDRVNTX1RPS0VOKSl0aHJvdyBuZXcgRXJyb3IoXCJBbiBBUEkgYWNjZXNzIHRva2VuIGlzIHJlcXVpcmVkIHRvIHVzZSBNYXBib3ggR0wuIFwiK20pO2lmKFwic1wiPT09ZVswXSl0aHJvdyBuZXcgRXJyb3IoXCJVc2UgYSBwdWJsaWMgYWNjZXNzIHRva2VuIChway4qKSB3aXRoIE1hcGJveCBHTCwgbm90IGEgc2VjcmV0IGFjY2VzcyB0b2tlbiAoc2suKikuIFwiK20pO3JldHVybiB0LnBhcmFtcy5wdXNoKFwiYWNjZXNzX3Rva2VuPVwiK2UpLE0odCl9ZnVuY3Rpb24geCh0KXtyZXR1cm4gMD09PXQuaW5kZXhPZihcIm1hcGJveDpcIil9dmFyIGI9ZnVuY3Rpb24odCxlKXtpZigheCh0KSlyZXR1cm4gdDt2YXIgcj1UKHQpO3JldHVybiByLnBhdGg9XCIvdjQvXCIrci5hdXRob3JpdHkrXCIuanNvblwiLHIucGFyYW1zLnB1c2goXCJzZWN1cmVcIikseShyLGUpfSxfPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPVQodCk7cmV0dXJuIHgodCk/KGkucGF0aD1cIi9zdHlsZXMvdjFcIitpLnBhdGgrXCIvc3ByaXRlXCIrZStyLHkoaSxuKSk6KGkucGF0aCs9XCJcIitlK3IsTShpKSl9LHc9LyhcXC4ocG5nfGpwZylcXGQqKSg/PSQpLyxrPWZ1bmN0aW9uKHQsZSxyKXtpZighZXx8IXgoZSkpcmV0dXJuIHQ7dmFyIG49VCh0KSxpPWEuZGV2aWNlUGl4ZWxSYXRpbz49Mnx8NTEyPT09cj9cIkAyeFwiOlwiXCIsbz1hLnN1cHBvcnRzV2VicD9cIi53ZWJwXCI6XCIkMVwiO3JldHVybiBuLnBhdGg9bi5wYXRoLnJlcGxhY2UodyxcIlwiK2krbyksZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspMD09PXRbZV0uaW5kZXhPZihcImFjY2Vzc190b2tlbj10ay5cIikmJih0W2VdPVwiYWNjZXNzX3Rva2VuPVwiKyh2LkFDQ0VTU19UT0tFTnx8XCJcIikpfShuLnBhcmFtcyksTShuKX0sQT0vXihcXHcrKTpcXC9cXC8oW15cXC8/XSopKFxcL1teP10rKT9cXD8/KC4rKT8vO2Z1bmN0aW9uIFQodCl7dmFyIGU9dC5tYXRjaChBKTtpZighZSl0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gcGFyc2UgVVJMIG9iamVjdFwiKTtyZXR1cm57cHJvdG9jb2w6ZVsxXSxhdXRob3JpdHk6ZVsyXSxwYXRoOmVbM118fFwiL1wiLHBhcmFtczplWzRdP2VbNF0uc3BsaXQoXCImXCIpOltdfX1mdW5jdGlvbiBNKHQpe3ZhciBlPXQucGFyYW1zLmxlbmd0aD9cIj9cIit0LnBhcmFtcy5qb2luKFwiJlwiKTpcIlwiO3JldHVybiB0LnByb3RvY29sK1wiOi8vXCIrdC5hdXRob3JpdHkrdC5wYXRoK2V9dmFyIFM9dC5kZWZhdWx0LkhUTUxJbWFnZUVsZW1lbnQsRT10LmRlZmF1bHQuSFRNTENhbnZhc0VsZW1lbnQsQz10LmRlZmF1bHQuSFRNTFZpZGVvRWxlbWVudCxMPXQuZGVmYXVsdC5JbWFnZURhdGEsej1mdW5jdGlvbih0LGUscixuKXt0aGlzLmNvbnRleHQ9dCx0aGlzLmZvcm1hdD1yLHRoaXMudGV4dHVyZT10LmdsLmNyZWF0ZVRleHR1cmUoKSx0aGlzLnVwZGF0ZShlLG4pfTt6LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10LndpZHRoLG49dC5oZWlnaHQsaT0hdGhpcy5zaXplfHx0aGlzLnNpemVbMF0hPT1yfHx0aGlzLnNpemVbMV0hPT1uLGE9dGhpcy5jb250ZXh0LG89YS5nbDt0aGlzLnVzZU1pcG1hcD1Cb29sZWFuKGUmJmUudXNlTWlwbWFwKSxvLmJpbmRUZXh0dXJlKG8uVEVYVFVSRV8yRCx0aGlzLnRleHR1cmUpLGk/KHRoaXMuc2l6ZT1bcixuXSxhLnBpeGVsU3RvcmVVbnBhY2suc2V0KDEpLHRoaXMuZm9ybWF0IT09by5SR0JBfHxlJiYhMT09PWUucHJlbXVsdGlwbHl8fGEucGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGEuc2V0KCEwKSx0IGluc3RhbmNlb2YgU3x8dCBpbnN0YW5jZW9mIEV8fHQgaW5zdGFuY2VvZiBDfHx0IGluc3RhbmNlb2YgTD9vLnRleEltYWdlMkQoby5URVhUVVJFXzJELDAsdGhpcy5mb3JtYXQsdGhpcy5mb3JtYXQsby5VTlNJR05FRF9CWVRFLHQpOm8udGV4SW1hZ2UyRChvLlRFWFRVUkVfMkQsMCx0aGlzLmZvcm1hdCxyLG4sMCx0aGlzLmZvcm1hdCxvLlVOU0lHTkVEX0JZVEUsdC5kYXRhKSk6dCBpbnN0YW5jZW9mIFN8fHQgaW5zdGFuY2VvZiBFfHx0IGluc3RhbmNlb2YgQ3x8dCBpbnN0YW5jZW9mIEw/by50ZXhTdWJJbWFnZTJEKG8uVEVYVFVSRV8yRCwwLDAsMCxvLlJHQkEsby5VTlNJR05FRF9CWVRFLHQpOm8udGV4U3ViSW1hZ2UyRChvLlRFWFRVUkVfMkQsMCwwLDAscixuLG8uUkdCQSxvLlVOU0lHTkVEX0JZVEUsdC5kYXRhKSx0aGlzLnVzZU1pcG1hcCYmdGhpcy5pc1NpemVQb3dlck9mVHdvKCkmJm8uZ2VuZXJhdGVNaXBtYXAoby5URVhUVVJFXzJEKX0sei5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5jb250ZXh0LmdsO24uYmluZFRleHR1cmUobi5URVhUVVJFXzJELHRoaXMudGV4dHVyZSksciE9PW4uTElORUFSX01JUE1BUF9ORUFSRVNUfHx0aGlzLmlzU2l6ZVBvd2VyT2ZUd28oKXx8KHI9bi5MSU5FQVIpLHQhPT10aGlzLmZpbHRlciYmKG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX01BR19GSUxURVIsdCksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfTUlOX0ZJTFRFUixyfHx0KSx0aGlzLmZpbHRlcj10KSxlIT09dGhpcy53cmFwJiYobi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9TLGUpLG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX1dSQVBfVCxlKSx0aGlzLndyYXA9ZSl9LHoucHJvdG90eXBlLmlzU2l6ZVBvd2VyT2ZUd289ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplWzBdPT09dGhpcy5zaXplWzFdJiZNYXRoLmxvZyh0aGlzLnNpemVbMF0pL01hdGguTE4yJTE9PTB9LHoucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQuZ2wuZGVsZXRlVGV4dHVyZSh0aGlzLnRleHR1cmUpLHRoaXMudGV4dHVyZT1udWxsfTt2YXIgTz1mdW5jdGlvbigpe3RoaXMuaW1hZ2VzPXt9LHRoaXMubG9hZGVkPSExLHRoaXMucmVxdWVzdG9ycz1bXSx0aGlzLnNoZWxmUGFjaz1uZXcgdC5kZWZhdWx0JDIoNjQsNjQse2F1dG9SZXNpemU6ITB9KSx0aGlzLnBhdHRlcm5zPXt9LHRoaXMuYXRsYXNJbWFnZT1uZXcgdC5SR0JBSW1hZ2Uoe3dpZHRoOjY0LGhlaWdodDo2NH0pLHRoaXMuZGlydHk9ITB9O08ucHJvdG90eXBlLmlzTG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9hZGVkfSxPLnByb3RvdHlwZS5zZXRMb2FkZWQ9ZnVuY3Rpb24odCl7aWYodGhpcy5sb2FkZWQhPT10JiYodGhpcy5sb2FkZWQ9dCx0KSl7Zm9yKHZhciBlPTAscj10aGlzLnJlcXVlc3RvcnM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9bi5pZHMsYT1uLmNhbGxiYWNrO3RoaXMuX25vdGlmeShpLGEpfXRoaXMucmVxdWVzdG9ycz1bXX19LE8ucHJvdG90eXBlLmdldEltYWdlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltYWdlc1t0XX0sTy5wcm90b3R5cGUuYWRkSW1hZ2U9ZnVuY3Rpb24odCxlKXt0aGlzLmltYWdlc1t0XT1lfSxPLnByb3RvdHlwZS5yZW1vdmVJbWFnZT1mdW5jdGlvbih0KXtkZWxldGUgdGhpcy5pbWFnZXNbdF07dmFyIGU9dGhpcy5wYXR0ZXJuc1t0XTtlJiYodGhpcy5zaGVsZlBhY2sudW5yZWYoZS5iaW4pLGRlbGV0ZSB0aGlzLnBhdHRlcm5zW3RdKX0sTy5wcm90b3R5cGUuZ2V0SW1hZ2VzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ITA7aWYoIXRoaXMuaXNMb2FkZWQoKSlmb3IodmFyIG49MCxpPXQ7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO3RoaXMuaW1hZ2VzW2FdfHwocj0hMSl9dGhpcy5pc0xvYWRlZCgpfHxyP3RoaXMuX25vdGlmeSh0LGUpOnRoaXMucmVxdWVzdG9ycy5wdXNoKHtpZHM6dCxjYWxsYmFjazplfSl9LE8ucHJvdG90eXBlLl9ub3RpZnk9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9e30sbj0wLGk9dDtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl0sbz10aGlzLmltYWdlc1thXTtvJiYoclthXT17ZGF0YTpvLmRhdGEuY2xvbmUoKSxwaXhlbFJhdGlvOm8ucGl4ZWxSYXRpbyxzZGY6by5zZGZ9KX1lKG51bGwscil9LE8ucHJvdG90eXBlLmdldFBpeGVsU2l6ZT1mdW5jdGlvbigpe3JldHVybnt3aWR0aDp0aGlzLnNoZWxmUGFjay53LGhlaWdodDp0aGlzLnNoZWxmUGFjay5ofX0sTy5wcm90b3R5cGUuZ2V0UGF0dGVybj1mdW5jdGlvbihlKXt2YXIgcj10aGlzLnBhdHRlcm5zW2VdO2lmKHIpcmV0dXJuIHIucG9zaXRpb247dmFyIG49dGhpcy5nZXRJbWFnZShlKTtpZighbilyZXR1cm4gbnVsbDt2YXIgaT1uLmRhdGEud2lkdGgrMixhPW4uZGF0YS5oZWlnaHQrMixvPXRoaXMuc2hlbGZQYWNrLnBhY2tPbmUoaSxhKTtpZighbylyZXR1cm4gbnVsbDt0aGlzLmF0bGFzSW1hZ2UucmVzaXplKHRoaXMuZ2V0UGl4ZWxTaXplKCkpO3ZhciBzPW4uZGF0YSxsPXRoaXMuYXRsYXNJbWFnZSxjPW8ueCsxLHU9by55KzEsaD1zLndpZHRoLGY9cy5oZWlnaHQ7dC5SR0JBSW1hZ2UuY29weShzLGwse3g6MCx5OjB9LHt4OmMseTp1fSx7d2lkdGg6aCxoZWlnaHQ6Zn0pLHQuUkdCQUltYWdlLmNvcHkocyxsLHt4OjAseTpmLTF9LHt4OmMseTp1LTF9LHt3aWR0aDpoLGhlaWdodDoxfSksdC5SR0JBSW1hZ2UuY29weShzLGwse3g6MCx5OjB9LHt4OmMseTp1K2Z9LHt3aWR0aDpoLGhlaWdodDoxfSksdC5SR0JBSW1hZ2UuY29weShzLGwse3g6aC0xLHk6MH0se3g6Yy0xLHk6dX0se3dpZHRoOjEsaGVpZ2h0OmZ9KSx0LlJHQkFJbWFnZS5jb3B5KHMsbCx7eDowLHk6MH0se3g6YytoLHk6dX0se3dpZHRoOjEsaGVpZ2h0OmZ9KSx0aGlzLmRpcnR5PSEwO3ZhciBwPW5ldyB0LkltYWdlUG9zaXRpb24obyxuKTtyZXR1cm4gdGhpcy5wYXR0ZXJuc1tlXT17YmluOm8scG9zaXRpb246cH0scH0sTy5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0KXt2YXIgZT10LmdsO3RoaXMuYXRsYXNUZXh0dXJlP3RoaXMuZGlydHkmJih0aGlzLmF0bGFzVGV4dHVyZS51cGRhdGUodGhpcy5hdGxhc0ltYWdlKSx0aGlzLmRpcnR5PSExKTp0aGlzLmF0bGFzVGV4dHVyZT1uZXcgeih0LHRoaXMuYXRsYXNJbWFnZSxlLlJHQkEpLHRoaXMuYXRsYXNUZXh0dXJlLmJpbmQoZS5MSU5FQVIsZS5DTEFNUF9UT19FREdFKX07dmFyIEk9UCxEPTFlMjA7ZnVuY3Rpb24gUCh0LGUscixuLGksYSl7dGhpcy5mb250U2l6ZT10fHwyNCx0aGlzLmJ1ZmZlcj12b2lkIDA9PT1lPzM6ZSx0aGlzLmN1dG9mZj1ufHwuMjUsdGhpcy5mb250RmFtaWx5PWl8fFwic2Fucy1zZXJpZlwiLHRoaXMuZm9udFdlaWdodD1hfHxcIm5vcm1hbFwiLHRoaXMucmFkaXVzPXJ8fDg7dmFyIG89dGhpcy5zaXplPXRoaXMuZm9udFNpemUrMip0aGlzLmJ1ZmZlcjt0aGlzLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLHRoaXMuY2FudmFzLndpZHRoPXRoaXMuY2FudmFzLmhlaWdodD1vLHRoaXMuY3R4PXRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKSx0aGlzLmN0eC5mb250PXRoaXMuZm9udFdlaWdodCtcIiBcIit0aGlzLmZvbnRTaXplK1wicHggXCIrdGhpcy5mb250RmFtaWx5LHRoaXMuY3R4LnRleHRCYXNlbGluZT1cIm1pZGRsZVwiLHRoaXMuY3R4LmZpbGxTdHlsZT1cImJsYWNrXCIsdGhpcy5ncmlkT3V0ZXI9bmV3IEZsb2F0NjRBcnJheShvKm8pLHRoaXMuZ3JpZElubmVyPW5ldyBGbG9hdDY0QXJyYXkobypvKSx0aGlzLmY9bmV3IEZsb2F0NjRBcnJheShvKSx0aGlzLmQ9bmV3IEZsb2F0NjRBcnJheShvKSx0aGlzLno9bmV3IEZsb2F0NjRBcnJheShvKzEpLHRoaXMudj1uZXcgSW50MTZBcnJheShvKSx0aGlzLm1pZGRsZT1NYXRoLnJvdW5kKG8vMioobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwiR2Vja28vXCIpPj0wPzEuMjoxKSl9ZnVuY3Rpb24gUih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9MDtzPGU7cysrKXtmb3IodmFyIGw9MDtsPHI7bCsrKW5bbF09dFtsKmUrc107Zm9yKEYobixpLGEsbyxyKSxsPTA7bDxyO2wrKyl0W2wqZStzXT1pW2xdfWZvcihsPTA7bDxyO2wrKyl7Zm9yKHM9MDtzPGU7cysrKW5bc109dFtsKmUrc107Zm9yKEYobixpLGEsbyxlKSxzPTA7czxlO3MrKyl0W2wqZStzXT1NYXRoLnNxcnQoaVtzXSl9fWZ1bmN0aW9uIEYodCxlLHIsbixpKXtyWzBdPTAsblswXT0tRCxuWzFdPStEO2Zvcih2YXIgYT0xLG89MDthPGk7YSsrKXtmb3IodmFyIHM9KHRbYV0rYSphLSh0W3Jbb11dK3Jbb10qcltvXSkpLygyKmEtMipyW29dKTtzPD1uW29dOylvLS0scz0odFthXSthKmEtKHRbcltvXV0rcltvXSpyW29dKSkvKDIqYS0yKnJbb10pO3JbKytvXT1hLG5bb109cyxuW28rMV09K0R9Zm9yKGE9MCxvPTA7YTxpO2ErKyl7Zm9yKDtuW28rMV08YTspbysrO2VbYV09KGEtcltvXSkqKGEtcltvXSkrdFtyW29dXX19UC5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0KXt0aGlzLmN0eC5jbGVhclJlY3QoMCwwLHRoaXMuc2l6ZSx0aGlzLnNpemUpLHRoaXMuY3R4LmZpbGxUZXh0KHQsdGhpcy5idWZmZXIsdGhpcy5taWRkbGUpO2Zvcih2YXIgZT10aGlzLmN0eC5nZXRJbWFnZURhdGEoMCwwLHRoaXMuc2l6ZSx0aGlzLnNpemUpLHI9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHRoaXMuc2l6ZSp0aGlzLnNpemUpLG49MDtuPHRoaXMuc2l6ZSp0aGlzLnNpemU7bisrKXt2YXIgaT1lLmRhdGFbNCpuKzNdLzI1NTt0aGlzLmdyaWRPdXRlcltuXT0xPT09aT8wOjA9PT1pP0Q6TWF0aC5wb3coTWF0aC5tYXgoMCwuNS1pKSwyKSx0aGlzLmdyaWRJbm5lcltuXT0xPT09aT9EOjA9PT1pPzA6TWF0aC5wb3coTWF0aC5tYXgoMCxpLS41KSwyKX1mb3IoUih0aGlzLmdyaWRPdXRlcix0aGlzLnNpemUsdGhpcy5zaXplLHRoaXMuZix0aGlzLmQsdGhpcy52LHRoaXMueiksUih0aGlzLmdyaWRJbm5lcix0aGlzLnNpemUsdGhpcy5zaXplLHRoaXMuZix0aGlzLmQsdGhpcy52LHRoaXMueiksbj0wO248dGhpcy5zaXplKnRoaXMuc2l6ZTtuKyspe3ZhciBhPXRoaXMuZ3JpZE91dGVyW25dLXRoaXMuZ3JpZElubmVyW25dO3Jbbl09TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgyNTUtMjU1KihhL3RoaXMucmFkaXVzK3RoaXMuY3V0b2ZmKSkpKX1yZXR1cm4gcn07dmFyIEI9ZnVuY3Rpb24odCxlKXt0aGlzLnJlcXVlc3RUcmFuc2Zvcm09dCx0aGlzLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseT1lLHRoaXMuZW50cmllcz17fX07Qi5wcm90b3R5cGUuc2V0VVJMPWZ1bmN0aW9uKHQpe3RoaXMudXJsPXR9LEIucHJvdG90eXBlLmdldEdseXBocz1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMsaT1bXTtmb3IodmFyIGEgaW4gZSlmb3IodmFyIG89MCxzPWVbYV07bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dO2kucHVzaCh7c3RhY2s6YSxpZDpsfSl9dC5hc3luY0FsbChpLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGFjayxpPXQuaWQsYT1uLmVudHJpZXNbcl07YXx8KGE9bi5lbnRyaWVzW3JdPXtnbHlwaHM6e30scmVxdWVzdHM6e319KTt2YXIgbz1hLmdseXBoc1tpXTtpZih2b2lkIDA9PT1vKWlmKG89bi5fdGlueVNERihhLHIsaSkpZShudWxsLHtzdGFjazpyLGlkOmksZ2x5cGg6b30pO2Vsc2V7dmFyIHM9TWF0aC5mbG9vcihpLzI1Nik7aWYoMjU2KnM+NjU1MzUpZShuZXcgRXJyb3IoXCJnbHlwaHMgPiA2NTUzNSBub3Qgc3VwcG9ydGVkXCIpKTtlbHNle3ZhciBsPWEucmVxdWVzdHNbc107bHx8KGw9YS5yZXF1ZXN0c1tzXT1bXSxCLmxvYWRHbHlwaFJhbmdlKHIscyxuLnVybCxuLnJlcXVlc3RUcmFuc2Zvcm0sZnVuY3Rpb24odCxlKXtpZihlKWZvcih2YXIgciBpbiBlKWEuZ2x5cGhzWytyXT1lWytyXTtmb3IodmFyIG49MCxpPWw7bjxpLmxlbmd0aDtuKz0xKSgwLGlbbl0pKHQsZSk7ZGVsZXRlIGEucmVxdWVzdHNbc119KSksbC5wdXNoKGZ1bmN0aW9uKHQsbil7dD9lKHQpOm4mJmUobnVsbCx7c3RhY2s6cixpZDppLGdseXBoOm5baV18fG51bGx9KX0pfX1lbHNlIGUobnVsbCx7c3RhY2s6cixpZDppLGdseXBoOm99KX0sZnVuY3Rpb24odCxlKXtpZih0KXIodCk7ZWxzZSBpZihlKXtmb3IodmFyIG49e30saT0wLGE9ZTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV0scz1vLnN0YWNrLGw9by5pZCxjPW8uZ2x5cGg7KG5bc118fChuW3NdPXt9KSlbbF09YyYme2lkOmMuaWQsYml0bWFwOmMuYml0bWFwLmNsb25lKCksbWV0cmljczpjLm1ldHJpY3N9fXIobnVsbCxuKX19KX0sQi5wcm90b3R5cGUuX3RpbnlTREY9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXRoaXMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5O2lmKGkmJih0LmRlZmF1bHQkNFtcIkNKSyBVbmlmaWVkIElkZW9ncmFwaHNcIl0obil8fHQuZGVmYXVsdCQ0W1wiSGFuZ3VsIFN5bGxhYmxlc1wiXShuKSkpe3ZhciBhPWUudGlueVNERjtpZighYSl7dmFyIG89XCI0MDBcIjsvYm9sZC9pLnRlc3Qocik/bz1cIjkwMFwiOi9tZWRpdW0vaS50ZXN0KHIpP289XCI1MDBcIjovbGlnaHQvaS50ZXN0KHIpJiYobz1cIjIwMFwiKSxhPWUudGlueVNERj1uZXcgQi5UaW55U0RGKDI0LDMsOCwuMjUsaSxvKX1yZXR1cm57aWQ6bixiaXRtYXA6bmV3IHQuQWxwaGFJbWFnZSh7d2lkdGg6MzAsaGVpZ2h0OjMwfSxhLmRyYXcoU3RyaW5nLmZyb21DaGFyQ29kZShuKSkpLG1ldHJpY3M6e3dpZHRoOjI0LGhlaWdodDoyNCxsZWZ0OjAsdG9wOi04LGFkdmFuY2U6MjR9fX19LEIubG9hZEdseXBoUmFuZ2U9ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbz0yNTYqcixzPW8rMjU1LGw9aShmdW5jdGlvbih0LGUpe2lmKCF4KHQpKXJldHVybiB0O3ZhciByPVQodCk7cmV0dXJuIHIucGF0aD1cIi9mb250cy92MVwiK3IucGF0aCx5KHIsZSl9KG4pLnJlcGxhY2UoXCJ7Zm9udHN0YWNrfVwiLGUpLnJlcGxhY2UoXCJ7cmFuZ2V9XCIsbytcIi1cIitzKSx0LlJlc291cmNlVHlwZS5HbHlwaHMpO3QuZ2V0QXJyYXlCdWZmZXIobCxmdW5jdGlvbihlLHIpe2lmKGUpYShlKTtlbHNlIGlmKHIpe2Zvcih2YXIgbj17fSxpPTAsbz10LmRlZmF1bHQkMyhyLmRhdGEpO2k8by5sZW5ndGg7aSs9MSl7dmFyIHM9b1tpXTtuW3MuaWRdPXN9YShudWxsLG4pfX0pfSxCLlRpbnlTREY9STt2YXIgTj1mdW5jdGlvbigpe3RoaXMuc3BlY2lmaWNhdGlvbj10LmRlZmF1bHQkNS5saWdodC5wb3NpdGlvbn07Ti5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbihlLHIpe3JldHVybiB0LnNwaGVyaWNhbFRvQ2FydGVzaWFuKGUuZXhwcmVzc2lvbi5ldmFsdWF0ZShyKSl9LE4ucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKGUscixuKXtyZXR1cm57eDp0Lm51bWJlcihlLngsci54LG4pLHk6dC5udW1iZXIoZS55LHIueSxuKSx6OnQubnVtYmVyKGUueixyLnosbil9fTt2YXIgaj1uZXcgdC5Qcm9wZXJ0aWVzKHthbmNob3I6bmV3IHQuRGF0YUNvbnN0YW50UHJvcGVydHkodC5kZWZhdWx0JDUubGlnaHQuYW5jaG9yKSxwb3NpdGlvbjpuZXcgTixjb2xvcjpuZXcgdC5EYXRhQ29uc3RhbnRQcm9wZXJ0eSh0LmRlZmF1bHQkNS5saWdodC5jb2xvciksaW50ZW5zaXR5Om5ldyB0LkRhdGFDb25zdGFudFByb3BlcnR5KHQuZGVmYXVsdCQ1LmxpZ2h0LmludGVuc2l0eSl9KSxWPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocil7ZS5jYWxsKHRoaXMpLHRoaXMuX3RyYW5zaXRpb25hYmxlPW5ldyB0LlRyYW5zaXRpb25hYmxlKGopLHRoaXMuc2V0TGlnaHQociksdGhpcy5fdHJhbnNpdGlvbmluZz10aGlzLl90cmFuc2l0aW9uYWJsZS51bnRyYW5zaXRpb25lZCgpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5nZXRMaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uYWJsZS5zZXJpYWxpemUoKX0sci5wcm90b3R5cGUuc2V0TGlnaHQ9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVMaWdodCxlKSlmb3IodmFyIHIgaW4gZSl7dmFyIG49ZVtyXTt0LmVuZHNXaXRoKHIsXCItdHJhbnNpdGlvblwiKT90aGlzLl90cmFuc2l0aW9uYWJsZS5zZXRUcmFuc2l0aW9uKHIuc2xpY2UoMCwtXCItdHJhbnNpdGlvblwiLmxlbmd0aCksbik6dGhpcy5fdHJhbnNpdGlvbmFibGUuc2V0VmFsdWUocixuKX19LHIucHJvdG90eXBlLnVwZGF0ZVRyYW5zaXRpb25zPWZ1bmN0aW9uKHQpe3RoaXMuX3RyYW5zaXRpb25pbmc9dGhpcy5fdHJhbnNpdGlvbmFibGUudHJhbnNpdGlvbmVkKHQsdGhpcy5fdHJhbnNpdGlvbmluZyl9LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbmluZy5oYXNUcmFuc2l0aW9uKCl9LHIucHJvdG90eXBlLnJlY2FsY3VsYXRlPWZ1bmN0aW9uKHQpe3RoaXMucHJvcGVydGllcz10aGlzLl90cmFuc2l0aW9uaW5nLnBvc3NpYmx5RXZhbHVhdGUodCl9LHIucHJvdG90eXBlLl92YWxpZGF0ZT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmVtaXRWYWxpZGF0aW9uRXJyb3JzKHRoaXMsZS5jYWxsKHQudmFsaWRhdGVTdHlsZSx0LmV4dGVuZCh7dmFsdWU6cixzdHlsZTp7Z2x5cGhzOiEwLHNwcml0ZTohMH0sc3R5bGVTcGVjOnQuZGVmYXVsdCQ1fSkpKX0scn0odC5FdmVudGVkKSxVPWZ1bmN0aW9uKHQsZSl7dGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5uZXh0Um93PTAsdGhpcy5ieXRlcz00LHRoaXMuZGF0YT1uZXcgVWludDhBcnJheSh0aGlzLndpZHRoKnRoaXMuaGVpZ2h0KnRoaXMuYnl0ZXMpLHRoaXMucG9zaXRpb25zPXt9fTtVLnByb3RvdHlwZS5nZXREYXNoPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5qb2luKFwiLFwiKStTdHJpbmcoZSk7cmV0dXJuIHRoaXMucG9zaXRpb25zW3JdfHwodGhpcy5wb3NpdGlvbnNbcl09dGhpcy5hZGREYXNoKHQsZSkpLHRoaXMucG9zaXRpb25zW3JdfSxVLnByb3RvdHlwZS5hZGREYXNoPWZ1bmN0aW9uKGUscil7dmFyIG49cj83OjAsaT0yKm4rMTtpZih0aGlzLm5leHRSb3craT50aGlzLmhlaWdodClyZXR1cm4gdC53YXJuT25jZShcIkxpbmVBdGxhcyBvdXQgb2Ygc3BhY2VcIiksbnVsbDtmb3IodmFyIGE9MCxvPTA7bzxlLmxlbmd0aDtvKyspYSs9ZVtvXTtmb3IodmFyIHM9dGhpcy53aWR0aC9hLGw9cy8yLGM9ZS5sZW5ndGglMj09MSx1PS1uO3U8PW47dSsrKWZvcih2YXIgaD10aGlzLm5leHRSb3crbit1LGY9dGhpcy53aWR0aCpoLHA9Yz8tZVtlLmxlbmd0aC0xXTowLGQ9ZVswXSxnPTEsdj0wO3Y8dGhpcy53aWR0aDt2Kyspe2Zvcig7ZDx2L3M7KXA9ZCxkKz1lW2ddLGMmJmc9PT1lLmxlbmd0aC0xJiYoZCs9ZVswXSksZysrO3ZhciBtPU1hdGguYWJzKHYtcCpzKSx5PU1hdGguYWJzKHYtZCpzKSx4PU1hdGgubWluKG0seSksYj1nJTI9PTEsXz12b2lkIDA7aWYocil7dmFyIHc9bj91L24qKGwrMSk6MDtpZihiKXt2YXIgaz1sLU1hdGguYWJzKHcpO189TWF0aC5zcXJ0KHgqeCtrKmspfWVsc2UgXz1sLU1hdGguc3FydCh4Kngrdyp3KX1lbHNlIF89KGI/MTotMSkqeDt0aGlzLmRhdGFbMys0KihmK3YpXT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxfKzEyOCkpfXZhciBBPXt5Oih0aGlzLm5leHRSb3crbisuNSkvdGhpcy5oZWlnaHQsaGVpZ2h0OjIqbi90aGlzLmhlaWdodCx3aWR0aDphfTtyZXR1cm4gdGhpcy5uZXh0Um93Kz1pLHRoaXMuZGlydHk9ITAsQX0sVS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0KXt2YXIgZT10LmdsO3RoaXMudGV4dHVyZT8oZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKSx0aGlzLmRpcnR5JiYodGhpcy5kaXJ0eT0hMSxlLnRleFN1YkltYWdlMkQoZS5URVhUVVJFXzJELDAsMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsZS5SR0JBLGUuVU5TSUdORURfQllURSx0aGlzLmRhdGEpKSk6KHRoaXMudGV4dHVyZT1lLmNyZWF0ZVRleHR1cmUoKSxlLmJpbmRUZXh0dXJlKGUuVEVYVFVSRV8yRCx0aGlzLnRleHR1cmUpLGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX1dSQVBfUyxlLlJFUEVBVCksZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfV1JBUF9ULGUuUkVQRUFUKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NSU5fRklMVEVSLGUuTElORUFSKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NQUdfRklMVEVSLGUuTElORUFSKSxlLnRleEltYWdlMkQoZS5URVhUVVJFXzJELDAsZS5SR0JBLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsMCxlLlJHQkEsZS5VTlNJR05FRF9CWVRFLHRoaXMuZGF0YSkpfTt2YXIgcT1mdW5jdGlvbiBlKHIsbil7dGhpcy53b3JrZXJQb29sPXIsdGhpcy5hY3RvcnM9W10sdGhpcy5jdXJyZW50QWN0b3I9MCx0aGlzLmlkPXQudW5pcXVlSWQoKTtmb3IodmFyIGk9dGhpcy53b3JrZXJQb29sLmFjcXVpcmUodGhpcy5pZCksYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdLHM9bmV3IGUuQWN0b3IobyxuLHRoaXMuaWQpO3MubmFtZT1cIldvcmtlciBcIithLHRoaXMuYWN0b3JzLnB1c2gocyl9fTtmdW5jdGlvbiBIKGUscixuKXt2YXIgaT1mdW5jdGlvbihlLHIpe2lmKGUpcmV0dXJuIG4oZSk7aWYocil7dmFyIGk9dC5waWNrKHIsW1widGlsZXNcIixcIm1pbnpvb21cIixcIm1heHpvb21cIixcImF0dHJpYnV0aW9uXCIsXCJtYXBib3hfbG9nb1wiLFwiYm91bmRzXCJdKTtyLnZlY3Rvcl9sYXllcnMmJihpLnZlY3RvckxheWVycz1yLnZlY3Rvcl9sYXllcnMsaS52ZWN0b3JMYXllcklkcz1pLnZlY3RvckxheWVycy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSksbihudWxsLGkpfX07ZS51cmw/dC5nZXRKU09OKHIoYihlLnVybCksdC5SZXNvdXJjZVR5cGUuU291cmNlKSxpKTphLmZyYW1lKGZ1bmN0aW9uKCl7cmV0dXJuIGkobnVsbCxlKX0pfXEucHJvdG90eXBlLmJyb2FkY2FzdD1mdW5jdGlvbihlLHIsbil7bj1ufHxmdW5jdGlvbigpe30sdC5hc3luY0FsbCh0aGlzLmFjdG9ycyxmdW5jdGlvbih0LG4pe3Quc2VuZChlLHIsbil9LG4pfSxxLnByb3RvdHlwZS5zZW5kPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybihcIm51bWJlclwiIT10eXBlb2Ygbnx8aXNOYU4obikpJiYobj10aGlzLmN1cnJlbnRBY3Rvcj0odGhpcy5jdXJyZW50QWN0b3IrMSkldGhpcy5hY3RvcnMubGVuZ3RoKSx0aGlzLmFjdG9yc1tuXS5zZW5kKHQsZSxyKSxufSxxLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLmFjdG9ycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QucmVtb3ZlKCl9KSx0aGlzLmFjdG9ycz1bXSx0aGlzLndvcmtlclBvb2wucmVsZWFzZSh0aGlzLmlkKX0scS5BY3Rvcj10LmRlZmF1bHQkNzt2YXIgRz1mdW5jdGlvbih0LGUpe2lmKGlzTmFOKHQpfHxpc05hTihlKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIExuZ0xhdCBvYmplY3Q6IChcIit0K1wiLCBcIitlK1wiKVwiKTtpZih0aGlzLmxuZz0rdCx0aGlzLmxhdD0rZSx0aGlzLmxhdD45MHx8dGhpcy5sYXQ8LTkwKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgTG5nTGF0IGxhdGl0dWRlIHZhbHVlOiBtdXN0IGJlIGJldHdlZW4gLTkwIGFuZCA5MFwiKX07Ry5wcm90b3R5cGUud3JhcD1mdW5jdGlvbigpe3JldHVybiBuZXcgRyh0LndyYXAodGhpcy5sbmcsLTE4MCwxODApLHRoaXMubGF0KX0sRy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVyblt0aGlzLmxuZyx0aGlzLmxhdF19LEcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJMbmdMYXQoXCIrdGhpcy5sbmcrXCIsIFwiK3RoaXMubGF0K1wiKVwifSxHLnByb3RvdHlwZS50b0JvdW5kcz1mdW5jdGlvbih0KXt2YXIgZT0zNjAqdC80MDA3NTAxNyxyPWUvTWF0aC5jb3MoTWF0aC5QSS8xODAqdGhpcy5sYXQpO3JldHVybiBuZXcgWShuZXcgRyh0aGlzLmxuZy1yLHRoaXMubGF0LWUpLG5ldyBHKHRoaXMubG5nK3IsdGhpcy5sYXQrZSkpfSxHLmNvbnZlcnQ9ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIEcpcmV0dXJuIHQ7aWYoQXJyYXkuaXNBcnJheSh0KSYmKDI9PT10Lmxlbmd0aHx8Mz09PXQubGVuZ3RoKSlyZXR1cm4gbmV3IEcoTnVtYmVyKHRbMF0pLE51bWJlcih0WzFdKSk7aWYoIUFycmF5LmlzQXJyYXkodCkmJlwib2JqZWN0XCI9PXR5cGVvZiB0JiZudWxsIT09dClyZXR1cm4gbmV3IEcoTnVtYmVyKHQubG5nKSxOdW1iZXIodC5sYXQpKTt0aHJvdyBuZXcgRXJyb3IoXCJgTG5nTGF0TGlrZWAgYXJndW1lbnQgbXVzdCBiZSBzcGVjaWZpZWQgYXMgYSBMbmdMYXQgaW5zdGFuY2UsIGFuIG9iamVjdCB7bG5nOiA8bG5nPiwgbGF0OiA8bGF0Pn0sIG9yIGFuIGFycmF5IG9mIFs8bG5nPiwgPGxhdD5dXCIpfTt2YXIgWT1mdW5jdGlvbih0LGUpe3QmJihlP3RoaXMuc2V0U291dGhXZXN0KHQpLnNldE5vcnRoRWFzdChlKTo0PT09dC5sZW5ndGg/dGhpcy5zZXRTb3V0aFdlc3QoW3RbMF0sdFsxXV0pLnNldE5vcnRoRWFzdChbdFsyXSx0WzNdXSk6dGhpcy5zZXRTb3V0aFdlc3QodFswXSkuc2V0Tm9ydGhFYXN0KHRbMV0pKX07WS5wcm90b3R5cGUuc2V0Tm9ydGhFYXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9uZT10IGluc3RhbmNlb2YgRz9uZXcgRyh0LmxuZyx0LmxhdCk6Ry5jb252ZXJ0KHQpLHRoaXN9LFkucHJvdG90eXBlLnNldFNvdXRoV2VzdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fc3c9dCBpbnN0YW5jZW9mIEc/bmV3IEcodC5sbmcsdC5sYXQpOkcuY29udmVydCh0KSx0aGlzfSxZLnByb3RvdHlwZS5leHRlbmQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPXRoaXMuX3N3LGk9dGhpcy5fbmU7aWYodCBpbnN0YW5jZW9mIEcpZT10LHI9dDtlbHNle2lmKCEodCBpbnN0YW5jZW9mIFkpKXJldHVybiBBcnJheS5pc0FycmF5KHQpP3QuZXZlcnkoQXJyYXkuaXNBcnJheSk/dGhpcy5leHRlbmQoWS5jb252ZXJ0KHQpKTp0aGlzLmV4dGVuZChHLmNvbnZlcnQodCkpOnRoaXM7aWYoZT10Ll9zdyxyPXQuX25lLCFlfHwhcilyZXR1cm4gdGhpc31yZXR1cm4gbnx8aT8obi5sbmc9TWF0aC5taW4oZS5sbmcsbi5sbmcpLG4ubGF0PU1hdGgubWluKGUubGF0LG4ubGF0KSxpLmxuZz1NYXRoLm1heChyLmxuZyxpLmxuZyksaS5sYXQ9TWF0aC5tYXgoci5sYXQsaS5sYXQpKToodGhpcy5fc3c9bmV3IEcoZS5sbmcsZS5sYXQpLHRoaXMuX25lPW5ldyBHKHIubG5nLHIubGF0KSksdGhpc30sWS5wcm90b3R5cGUuZ2V0Q2VudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBHKCh0aGlzLl9zdy5sbmcrdGhpcy5fbmUubG5nKS8yLCh0aGlzLl9zdy5sYXQrdGhpcy5fbmUubGF0KS8yKX0sWS5wcm90b3R5cGUuZ2V0U291dGhXZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3fSxZLnByb3RvdHlwZS5nZXROb3J0aEVhc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmV9LFkucHJvdG90eXBlLmdldE5vcnRoV2VzdD1mdW5jdGlvbigpe3JldHVybiBuZXcgRyh0aGlzLmdldFdlc3QoKSx0aGlzLmdldE5vcnRoKCkpfSxZLnByb3RvdHlwZS5nZXRTb3V0aEVhc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEcodGhpcy5nZXRFYXN0KCksdGhpcy5nZXRTb3V0aCgpKX0sWS5wcm90b3R5cGUuZ2V0V2VzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdy5sbmd9LFkucHJvdG90eXBlLmdldFNvdXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3LmxhdH0sWS5wcm90b3R5cGUuZ2V0RWFzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9uZS5sbmd9LFkucHJvdG90eXBlLmdldE5vcnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25lLmxhdH0sWS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVyblt0aGlzLl9zdy50b0FycmF5KCksdGhpcy5fbmUudG9BcnJheSgpXX0sWS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIkxuZ0xhdEJvdW5kcyhcIit0aGlzLl9zdy50b1N0cmluZygpK1wiLCBcIit0aGlzLl9uZS50b1N0cmluZygpK1wiKVwifSxZLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuISh0aGlzLl9zdyYmdGhpcy5fbmUpfSxZLmNvbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIXR8fHQgaW5zdGFuY2VvZiBZP3Q6bmV3IFkodCl9O3ZhciBXPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmJvdW5kcz1ZLmNvbnZlcnQodGhpcy52YWxpZGF0ZUJvdW5kcyh0KSksdGhpcy5taW56b29tPWV8fDAsdGhpcy5tYXh6b29tPXJ8fDI0fTtXLnByb3RvdHlwZS52YWxpZGF0ZUJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmND09PXQubGVuZ3RoP1tNYXRoLm1heCgtMTgwLHRbMF0pLE1hdGgubWF4KC05MCx0WzFdKSxNYXRoLm1pbigxODAsdFsyXSksTWF0aC5taW4oOTAsdFszXSldOlstMTgwLC05MCwxODAsOTBdfSxXLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKHRoaXMubG5nWCh0aGlzLmJvdW5kcy5nZXRXZXN0KCksdC56KSkscj1NYXRoLmZsb29yKHRoaXMubGF0WSh0aGlzLmJvdW5kcy5nZXROb3J0aCgpLHQueikpLG49TWF0aC5jZWlsKHRoaXMubG5nWCh0aGlzLmJvdW5kcy5nZXRFYXN0KCksdC56KSksaT1NYXRoLmNlaWwodGhpcy5sYXRZKHRoaXMuYm91bmRzLmdldFNvdXRoKCksdC56KSk7cmV0dXJuIHQueD49ZSYmdC54PG4mJnQueT49ciYmdC55PGl9LFcucHJvdG90eXBlLmxuZ1g9ZnVuY3Rpb24odCxlKXtyZXR1cm4odCsxODApKihNYXRoLnBvdygyLGUpLzM2MCl9LFcucHJvdG90eXBlLmxhdFk9ZnVuY3Rpb24oZSxyKXt2YXIgbj10LmNsYW1wKE1hdGguc2luKE1hdGguUEkvMTgwKmUpLC0uOTk5OSwuOTk5OSksaT1NYXRoLnBvdygyLHIpLygyKk1hdGguUEkpO3JldHVybiBNYXRoLnBvdygyLHItMSkrLjUqTWF0aC5sb2coKDErbikvKDEtbikpKi1pfTt2YXIgWD1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpLGEpe2lmKGUuY2FsbCh0aGlzKSx0aGlzLmlkPXIsdGhpcy5kaXNwYXRjaGVyPWksdGhpcy50eXBlPVwidmVjdG9yXCIsdGhpcy5taW56b29tPTAsdGhpcy5tYXh6b29tPTIyLHRoaXMuc2NoZW1lPVwieHl6XCIsdGhpcy50aWxlU2l6ZT01MTIsdGhpcy5yZXBhcnNlT3ZlcnNjYWxlZD0hMCx0aGlzLmlzVGlsZUNsaXBwZWQ9ITAsdC5leHRlbmQodGhpcyx0LnBpY2sobixbXCJ1cmxcIixcInNjaGVtZVwiLFwidGlsZVNpemVcIl0pKSx0aGlzLl9vcHRpb25zPXQuZXh0ZW5kKHt0eXBlOlwidmVjdG9yXCJ9LG4pLHRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZz1uLmNvbGxlY3RSZXNvdXJjZVRpbWluZyw1MTIhPT10aGlzLnRpbGVTaXplKXRocm93IG5ldyBFcnJvcihcInZlY3RvciB0aWxlIHNvdXJjZXMgbXVzdCBoYXZlIGEgdGlsZVNpemUgb2YgNTEyXCIpO3RoaXMuc2V0RXZlbnRlZFBhcmVudChhKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YWxvYWRpbmdcIix7ZGF0YVR5cGU6XCJzb3VyY2VcIn0pKSxIKHRoaXMuX29wdGlvbnMsdGhpcy5tYXAuX3RyYW5zZm9ybVJlcXVlc3QsZnVuY3Rpb24ocixuKXtyP2UuZmlyZShuZXcgdC5FcnJvckV2ZW50KHIpKTpuJiYodC5leHRlbmQoZSxuKSxuLmJvdW5kcyYmKGUudGlsZUJvdW5kcz1uZXcgVyhuLmJvdW5kcyxlLm1pbnpvb20sZS5tYXh6b29tKSksZS5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YVwiLHtkYXRhVHlwZTpcInNvdXJjZVwiLHNvdXJjZURhdGFUeXBlOlwibWV0YWRhdGFcIn0pKSxlLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhXCIse2RhdGFUeXBlOlwic291cmNlXCIsc291cmNlRGF0YVR5cGU6XCJjb250ZW50XCJ9KSkpfSl9LHIucHJvdG90eXBlLmhhc1RpbGU9ZnVuY3Rpb24odCl7cmV0dXJuIXRoaXMudGlsZUJvdW5kc3x8dGhpcy50aWxlQm91bmRzLmNvbnRhaW5zKHQuY2Fub25pY2FsKX0sci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLmxvYWQoKX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZXh0ZW5kKHt9LHRoaXMuX29wdGlvbnMpfSxyLnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbihlLHIpe3ZhciBuPWsoZS50aWxlSUQuY2Fub25pY2FsLnVybCh0aGlzLnRpbGVzLHRoaXMuc2NoZW1lKSx0aGlzLnVybCksaT17cmVxdWVzdDp0aGlzLm1hcC5fdHJhbnNmb3JtUmVxdWVzdChuLHQuUmVzb3VyY2VUeXBlLlRpbGUpLHVpZDplLnVpZCx0aWxlSUQ6ZS50aWxlSUQsem9vbTplLnRpbGVJRC5vdmVyc2NhbGVkWix0aWxlU2l6ZTp0aGlzLnRpbGVTaXplKmUudGlsZUlELm92ZXJzY2FsZUZhY3RvcigpLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkLHBpeGVsUmF0aW86YS5kZXZpY2VQaXhlbFJhdGlvLHNob3dDb2xsaXNpb25Cb3hlczp0aGlzLm1hcC5zaG93Q29sbGlzaW9uQm94ZXN9O2Z1bmN0aW9uIG8odCxuKXtyZXR1cm4gZS5hYm9ydGVkP3IobnVsbCk6dD9yKHQpOihuJiZuLnJlc291cmNlVGltaW5nJiYoZS5yZXNvdXJjZVRpbWluZz1uLnJlc291cmNlVGltaW5nKSx0aGlzLm1hcC5fcmVmcmVzaEV4cGlyZWRUaWxlcyYmZS5zZXRFeHBpcnlEYXRhKG4pLGUubG9hZFZlY3RvckRhdGEobix0aGlzLm1hcC5wYWludGVyKSxyKG51bGwpLHZvaWQoZS5yZWxvYWRDYWxsYmFjayYmKHRoaXMubG9hZFRpbGUoZSxlLnJlbG9hZENhbGxiYWNrKSxlLnJlbG9hZENhbGxiYWNrPW51bGwpKSl9aS5yZXF1ZXN0LmNvbGxlY3RSZXNvdXJjZVRpbWluZz10aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcsdm9pZCAwPT09ZS53b3JrZXJJRHx8XCJleHBpcmVkXCI9PT1lLnN0YXRlP2Uud29ya2VySUQ9dGhpcy5kaXNwYXRjaGVyLnNlbmQoXCJsb2FkVGlsZVwiLGksby5iaW5kKHRoaXMpKTpcImxvYWRpbmdcIj09PWUuc3RhdGU/ZS5yZWxvYWRDYWxsYmFjaz1yOnRoaXMuZGlzcGF0Y2hlci5zZW5kKFwicmVsb2FkVGlsZVwiLGksby5iaW5kKHRoaXMpLGUud29ya2VySUQpfSxyLnByb3RvdHlwZS5hYm9ydFRpbGU9ZnVuY3Rpb24odCl7dGhpcy5kaXNwYXRjaGVyLnNlbmQoXCJhYm9ydFRpbGVcIix7dWlkOnQudWlkLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkfSx2b2lkIDAsdC53b3JrZXJJRCl9LHIucHJvdG90eXBlLnVubG9hZFRpbGU9ZnVuY3Rpb24odCl7dC51bmxvYWRWZWN0b3JEYXRhKCksdGhpcy5kaXNwYXRjaGVyLnNlbmQoXCJyZW1vdmVUaWxlXCIse3VpZDp0LnVpZCx0eXBlOnRoaXMudHlwZSxzb3VyY2U6dGhpcy5pZH0sdm9pZCAwLHQud29ya2VySUQpfSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHJ9KHQuRXZlbnRlZCksWj1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpLGEpe2UuY2FsbCh0aGlzKSx0aGlzLmlkPXIsdGhpcy5kaXNwYXRjaGVyPWksdGhpcy5zZXRFdmVudGVkUGFyZW50KGEpLHRoaXMudHlwZT1cInJhc3RlclwiLHRoaXMubWluem9vbT0wLHRoaXMubWF4em9vbT0yMix0aGlzLnJvdW5kWm9vbT0hMCx0aGlzLnNjaGVtZT1cInh5elwiLHRoaXMudGlsZVNpemU9NTEyLHRoaXMuX2xvYWRlZD0hMSx0aGlzLl9vcHRpb25zPXQuZXh0ZW5kKHt9LG4pLHQuZXh0ZW5kKHRoaXMsdC5waWNrKG4sW1widXJsXCIsXCJzY2hlbWVcIixcInRpbGVTaXplXCJdKSl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuZmlyZShuZXcgdC5FdmVudChcImRhdGFsb2FkaW5nXCIse2RhdGFUeXBlOlwic291cmNlXCJ9KSksSCh0aGlzLl9vcHRpb25zLHRoaXMubWFwLl90cmFuc2Zvcm1SZXF1ZXN0LGZ1bmN0aW9uKHIsbil7cj9lLmZpcmUobmV3IHQuRXJyb3JFdmVudChyKSk6biYmKHQuZXh0ZW5kKGUsbiksbi5ib3VuZHMmJihlLnRpbGVCb3VuZHM9bmV3IFcobi5ib3VuZHMsZS5taW56b29tLGUubWF4em9vbSkpLGUuZmlyZShuZXcgdC5FdmVudChcImRhdGFcIix7ZGF0YVR5cGU6XCJzb3VyY2VcIixzb3VyY2VEYXRhVHlwZTpcIm1ldGFkYXRhXCJ9KSksZS5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YVwiLHtkYXRhVHlwZTpcInNvdXJjZVwiLHNvdXJjZURhdGFUeXBlOlwiY29udGVudFwifSkpKX0pfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMubG9hZCgpfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5leHRlbmQoe30sdGhpcy5fb3B0aW9ucyl9LHIucHJvdG90eXBlLmhhc1RpbGU9ZnVuY3Rpb24odCl7cmV0dXJuIXRoaXMudGlsZUJvdW5kc3x8dGhpcy50aWxlQm91bmRzLmNvbnRhaW5zKHQuY2Fub25pY2FsKX0sci5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLGk9ayhlLnRpbGVJRC5jYW5vbmljYWwudXJsKHRoaXMudGlsZXMsdGhpcy5zY2hlbWUpLHRoaXMudXJsLHRoaXMudGlsZVNpemUpO2UucmVxdWVzdD10LmdldEltYWdlKHRoaXMubWFwLl90cmFuc2Zvcm1SZXF1ZXN0KGksdC5SZXNvdXJjZVR5cGUuVGlsZSksZnVuY3Rpb24odCxpKXtpZihkZWxldGUgZS5yZXF1ZXN0LGUuYWJvcnRlZCllLnN0YXRlPVwidW5sb2FkZWRcIixyKG51bGwpO2Vsc2UgaWYodCllLnN0YXRlPVwiZXJyb3JlZFwiLHIodCk7ZWxzZSBpZihpKXtuLm1hcC5fcmVmcmVzaEV4cGlyZWRUaWxlcyYmZS5zZXRFeHBpcnlEYXRhKGkpLGRlbGV0ZSBpLmNhY2hlQ29udHJvbCxkZWxldGUgaS5leHBpcmVzO3ZhciBhPW4ubWFwLnBhaW50ZXIuY29udGV4dCxvPWEuZ2w7ZS50ZXh0dXJlPW4ubWFwLnBhaW50ZXIuZ2V0VGlsZVRleHR1cmUoaS53aWR0aCksZS50ZXh0dXJlP2UudGV4dHVyZS51cGRhdGUoaSx7dXNlTWlwbWFwOiEwfSk6KGUudGV4dHVyZT1uZXcgeihhLGksby5SR0JBLHt1c2VNaXBtYXA6ITB9KSxlLnRleHR1cmUuYmluZChvLkxJTkVBUixvLkNMQU1QX1RPX0VER0Usby5MSU5FQVJfTUlQTUFQX05FQVJFU1QpLGEuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljJiZvLnRleFBhcmFtZXRlcmYoby5URVhUVVJFXzJELGEuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULGEuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljTWF4KSksZS5zdGF0ZT1cImxvYWRlZFwiLHIobnVsbCl9fSl9LHIucHJvdG90eXBlLmFib3J0VGlsZT1mdW5jdGlvbih0LGUpe3QucmVxdWVzdCYmKHQucmVxdWVzdC5hYm9ydCgpLGRlbGV0ZSB0LnJlcXVlc3QpLGUoKX0sci5wcm90b3R5cGUudW5sb2FkVGlsZT1mdW5jdGlvbih0LGUpe3QudGV4dHVyZSYmdGhpcy5tYXAucGFpbnRlci5zYXZlVGlsZVRleHR1cmUodC50ZXh0dXJlKSxlKCl9LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4hMX0scn0odC5FdmVudGVkKSwkPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGksYSl7ZS5jYWxsKHRoaXMscixuLGksYSksdGhpcy50eXBlPVwicmFzdGVyLWRlbVwiLHRoaXMubWF4em9vbT0yMix0aGlzLl9vcHRpb25zPXQuZXh0ZW5kKHt9LG4pLHRoaXMuZW5jb2Rpbmc9bi5lbmNvZGluZ3x8XCJtYXBib3hcIn1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6XCJyYXN0ZXItZGVtXCIsdXJsOnRoaXMudXJsLHRpbGVTaXplOnRoaXMudGlsZVNpemUsdGlsZXM6dGhpcy50aWxlcyxib3VuZHM6dGhpcy5ib3VuZHMsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZ319LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49ayhlLnRpbGVJRC5jYW5vbmljYWwudXJsKHRoaXMudGlsZXMsdGhpcy5zY2hlbWUpLHRoaXMudXJsLHRoaXMudGlsZVNpemUpO2UucmVxdWVzdD10LmdldEltYWdlKHRoaXMubWFwLl90cmFuc2Zvcm1SZXF1ZXN0KG4sdC5SZXNvdXJjZVR5cGUuVGlsZSksZnVuY3Rpb24odCxuKXtpZihkZWxldGUgZS5yZXF1ZXN0LGUuYWJvcnRlZCllLnN0YXRlPVwidW5sb2FkZWRcIixyKG51bGwpO2Vsc2UgaWYodCllLnN0YXRlPVwiZXJyb3JlZFwiLHIodCk7ZWxzZSBpZihuKXt0aGlzLm1hcC5fcmVmcmVzaEV4cGlyZWRUaWxlcyYmZS5zZXRFeHBpcnlEYXRhKG4pLGRlbGV0ZSBuLmNhY2hlQ29udHJvbCxkZWxldGUgbi5leHBpcmVzO3ZhciBpPWEuZ2V0SW1hZ2VEYXRhKG4pLG89e3VpZDplLnVpZCxjb29yZDplLnRpbGVJRCxzb3VyY2U6dGhpcy5pZCxyYXdJbWFnZURhdGE6aSxlbmNvZGluZzp0aGlzLmVuY29kaW5nfTtlLndvcmtlcklEJiZcImV4cGlyZWRcIiE9PWUuc3RhdGV8fChlLndvcmtlcklEPXRoaXMuZGlzcGF0Y2hlci5zZW5kKFwibG9hZERFTVRpbGVcIixvLGZ1bmN0aW9uKHQsbil7dCYmKGUuc3RhdGU9XCJlcnJvcmVkXCIscih0KSksbiYmKGUuZGVtPW4sZS5uZWVkc0hpbGxzaGFkZVByZXBhcmU9ITAsZS5zdGF0ZT1cImxvYWRlZFwiLHIobnVsbCkpfS5iaW5kKHRoaXMpKSl9fS5iaW5kKHRoaXMpKSxlLm5laWdoYm9yaW5nVGlsZXM9dGhpcy5fZ2V0TmVpZ2hib3JpbmdUaWxlcyhlLnRpbGVJRCl9LHIucHJvdG90eXBlLl9nZXROZWlnaGJvcmluZ1RpbGVzPWZ1bmN0aW9uKGUpe3ZhciByPWUuY2Fub25pY2FsLG49TWF0aC5wb3coMixyLnopLGk9KHIueC0xK24pJW4sYT0wPT09ci54P2Uud3JhcC0xOmUud3JhcCxvPShyLngrMStuKSVuLHM9ci54KzE9PT1uP2Uud3JhcCsxOmUud3JhcCxsPXt9O3JldHVybiBsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixhLHIueixpLHIueSkua2V5XT17YmFja2ZpbGxlZDohMX0sbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFoscyxyLnosbyxyLnkpLmtleV09e2JhY2tmaWxsZWQ6ITF9LHIueT4wJiYobFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFosYSxyLnosaSxyLnktMSkua2V5XT17YmFja2ZpbGxlZDohMX0sbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFosZS53cmFwLHIueixyLngsci55LTEpLmtleV09e2JhY2tmaWxsZWQ6ITF9LGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLHMsci56LG8sci55LTEpLmtleV09e2JhY2tmaWxsZWQ6ITF9KSxyLnkrMTxuJiYobFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFosYSxyLnosaSxyLnkrMSkua2V5XT17YmFja2ZpbGxlZDohMX0sbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFosZS53cmFwLHIueixyLngsci55KzEpLmtleV09e2JhY2tmaWxsZWQ6ITF9LGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLHMsci56LG8sci55KzEpLmtleV09e2JhY2tmaWxsZWQ6ITF9KSxsfSxyLnByb3RvdHlwZS51bmxvYWRUaWxlPWZ1bmN0aW9uKHQpe3QuZGVtVGV4dHVyZSYmdGhpcy5tYXAucGFpbnRlci5zYXZlVGlsZVRleHR1cmUodC5kZW1UZXh0dXJlKSx0LmZibyYmKHQuZmJvLmRlc3Ryb3koKSxkZWxldGUgdC5mYm8pLHQuZGVtJiZkZWxldGUgdC5kZW0sZGVsZXRlIHQubmVpZ2hib3JpbmdUaWxlcyx0LnN0YXRlPVwidW5sb2FkZWRcIix0aGlzLmRpc3BhdGNoZXIuc2VuZChcInJlbW92ZURFTVRpbGVcIix7dWlkOnQudWlkLHNvdXJjZTp0aGlzLmlkfSx2b2lkIDAsdC53b3JrZXJJRCl9LHJ9KFopLEo9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4saSxhKXtlLmNhbGwodGhpcyksdGhpcy5pZD1yLHRoaXMudHlwZT1cImdlb2pzb25cIix0aGlzLm1pbnpvb209MCx0aGlzLm1heHpvb209MTgsdGhpcy50aWxlU2l6ZT01MTIsdGhpcy5pc1RpbGVDbGlwcGVkPSEwLHRoaXMucmVwYXJzZU92ZXJzY2FsZWQ9ITAsdGhpcy5fcmVtb3ZlZD0hMSx0aGlzLmRpc3BhdGNoZXI9aSx0aGlzLnNldEV2ZW50ZWRQYXJlbnQoYSksdGhpcy5fZGF0YT1uLmRhdGEsdGhpcy5fb3B0aW9ucz10LmV4dGVuZCh7fSxuKSx0aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmc9bi5jb2xsZWN0UmVzb3VyY2VUaW1pbmcsdGhpcy5fcmVzb3VyY2VUaW1pbmc9W10sdm9pZCAwIT09bi5tYXh6b29tJiYodGhpcy5tYXh6b29tPW4ubWF4em9vbSksbi50eXBlJiYodGhpcy50eXBlPW4udHlwZSk7dmFyIG89dC5kZWZhdWx0JDgvdGhpcy50aWxlU2l6ZTt0aGlzLndvcmtlck9wdGlvbnM9dC5leHRlbmQoe3NvdXJjZTp0aGlzLmlkLGNsdXN0ZXI6bi5jbHVzdGVyfHwhMSxnZW9qc29uVnRPcHRpb25zOntidWZmZXI6KHZvaWQgMCE9PW4uYnVmZmVyP24uYnVmZmVyOjEyOCkqbyx0b2xlcmFuY2U6KHZvaWQgMCE9PW4udG9sZXJhbmNlP24udG9sZXJhbmNlOi4zNzUpKm8sZXh0ZW50OnQuZGVmYXVsdCQ4LG1heFpvb206dGhpcy5tYXh6b29tLGxpbmVNZXRyaWNzOm4ubGluZU1ldHJpY3N8fCExfSxzdXBlcmNsdXN0ZXJPcHRpb25zOnttYXhab29tOnZvaWQgMCE9PW4uY2x1c3Rlck1heFpvb20/TWF0aC5taW4obi5jbHVzdGVyTWF4Wm9vbSx0aGlzLm1heHpvb20tMSk6dGhpcy5tYXh6b29tLTEsZXh0ZW50OnQuZGVmYXVsdCQ4LHJhZGl1czoobi5jbHVzdGVyUmFkaXVzfHw1MCkqbyxsb2c6ITF9fSxuLndvcmtlck9wdGlvbnMpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhbG9hZGluZ1wiLHtkYXRhVHlwZTpcInNvdXJjZVwifSkpLHRoaXMuX3VwZGF0ZVdvcmtlckRhdGEoZnVuY3Rpb24ocil7aWYocillLmZpcmUobmV3IHQuRXJyb3JFdmVudChyKSk7ZWxzZXt2YXIgbj17ZGF0YVR5cGU6XCJzb3VyY2VcIixzb3VyY2VEYXRhVHlwZTpcIm1ldGFkYXRhXCJ9O2UuX2NvbGxlY3RSZXNvdXJjZVRpbWluZyYmZS5fcmVzb3VyY2VUaW1pbmcmJmUuX3Jlc291cmNlVGltaW5nLmxlbmd0aD4wJiYobi5yZXNvdXJjZVRpbWluZz1lLl9yZXNvdXJjZVRpbWluZyxlLl9yZXNvdXJjZVRpbWluZz1bXSksZS5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YVwiLG4pKX19KX0sci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLmxvYWQoKX0sci5wcm90b3R5cGUuc2V0RGF0YT1mdW5jdGlvbihlKXt2YXIgcj10aGlzO3JldHVybiB0aGlzLl9kYXRhPWUsdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YWxvYWRpbmdcIix7ZGF0YVR5cGU6XCJzb3VyY2VcIn0pKSx0aGlzLl91cGRhdGVXb3JrZXJEYXRhKGZ1bmN0aW9uKGUpe2lmKGUpcmV0dXJuIHIuZmlyZShuZXcgdC5FcnJvckV2ZW50KGUpKTt2YXIgbj17ZGF0YVR5cGU6XCJzb3VyY2VcIixzb3VyY2VEYXRhVHlwZTpcImNvbnRlbnRcIn07ci5fY29sbGVjdFJlc291cmNlVGltaW5nJiZyLl9yZXNvdXJjZVRpbWluZyYmci5fcmVzb3VyY2VUaW1pbmcubGVuZ3RoPjAmJihuLnJlc291cmNlVGltaW5nPXIuX3Jlc291cmNlVGltaW5nLHIuX3Jlc291cmNlVGltaW5nPVtdKSxyLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhXCIsbikpfSksdGhpc30sci5wcm90b3R5cGUuX3VwZGF0ZVdvcmtlckRhdGE9ZnVuY3Rpb24oZSl7dmFyIHIsbixpPXRoaXMsYT10LmV4dGVuZCh7fSx0aGlzLndvcmtlck9wdGlvbnMpLG89dGhpcy5fZGF0YTtcInN0cmluZ1wiPT10eXBlb2Ygbz8oYS5yZXF1ZXN0PXRoaXMubWFwLl90cmFuc2Zvcm1SZXF1ZXN0KChyPW8sKG49dC5kZWZhdWx0LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpKS5ocmVmPXIsbi5ocmVmKSx0LlJlc291cmNlVHlwZS5Tb3VyY2UpLGEucmVxdWVzdC5jb2xsZWN0UmVzb3VyY2VUaW1pbmc9dGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nKTphLmRhdGE9SlNPTi5zdHJpbmdpZnkobyksdGhpcy53b3JrZXJJRD10aGlzLmRpc3BhdGNoZXIuc2VuZCh0aGlzLnR5cGUrXCIuXCIrYS5zb3VyY2UrXCIubG9hZERhdGFcIixhLGZ1bmN0aW9uKHQscil7aS5fcmVtb3ZlZHx8ciYmci5hYmFuZG9uZWR8fChpLl9sb2FkZWQ9ITAsciYmci5yZXNvdXJjZVRpbWluZyYmci5yZXNvdXJjZVRpbWluZ1tpLmlkXSYmKGkuX3Jlc291cmNlVGltaW5nPXIucmVzb3VyY2VUaW1pbmdbaS5pZF0uc2xpY2UoMCkpLGkuZGlzcGF0Y2hlci5zZW5kKGkudHlwZStcIi5cIithLnNvdXJjZStcIi5jb2FsZXNjZVwiLG51bGwsbnVsbCxpLndvcmtlcklEKSxlKHQpKX0sdGhpcy53b3JrZXJJRCl9LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXZvaWQgMD09PXQud29ya2VySUQ/XCJsb2FkVGlsZVwiOlwicmVsb2FkVGlsZVwiLGk9e3R5cGU6dGhpcy50eXBlLHVpZDp0LnVpZCx0aWxlSUQ6dC50aWxlSUQsem9vbTp0LnRpbGVJRC5vdmVyc2NhbGVkWixtYXhab29tOnRoaXMubWF4em9vbSx0aWxlU2l6ZTp0aGlzLnRpbGVTaXplLHNvdXJjZTp0aGlzLmlkLHBpeGVsUmF0aW86YS5kZXZpY2VQaXhlbFJhdGlvLHNob3dDb2xsaXNpb25Cb3hlczp0aGlzLm1hcC5zaG93Q29sbGlzaW9uQm94ZXN9O3Qud29ya2VySUQ9dGhpcy5kaXNwYXRjaGVyLnNlbmQobixpLGZ1bmN0aW9uKGksYSl7cmV0dXJuIHQudW5sb2FkVmVjdG9yRGF0YSgpLHQuYWJvcnRlZD9lKG51bGwpOmk/ZShpKToodC5sb2FkVmVjdG9yRGF0YShhLHIubWFwLnBhaW50ZXIsXCJyZWxvYWRUaWxlXCI9PT1uKSxlKG51bGwpKX0sdGhpcy53b3JrZXJJRCl9LHIucHJvdG90eXBlLmFib3J0VGlsZT1mdW5jdGlvbih0KXt0LmFib3J0ZWQ9ITB9LHIucHJvdG90eXBlLnVubG9hZFRpbGU9ZnVuY3Rpb24odCl7dC51bmxvYWRWZWN0b3JEYXRhKCksdGhpcy5kaXNwYXRjaGVyLnNlbmQoXCJyZW1vdmVUaWxlXCIse3VpZDp0LnVpZCx0eXBlOnRoaXMudHlwZSxzb3VyY2U6dGhpcy5pZH0sbnVsbCx0LndvcmtlcklEKX0sci5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9yZW1vdmVkPSEwLHRoaXMuZGlzcGF0Y2hlci5zZW5kKFwicmVtb3ZlU291cmNlXCIse3R5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkfSxudWxsLHRoaXMud29ya2VySUQpfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5leHRlbmQoe30sdGhpcy5fb3B0aW9ucyx7dHlwZTp0aGlzLnR5cGUsZGF0YTp0aGlzLl9kYXRhfSl9LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4hMX0scn0odC5FdmVudGVkKSxLPXQuY3JlYXRlTGF5b3V0KFt7bmFtZTpcImFfcG9zXCIsdHlwZTpcIkludDE2XCIsY29tcG9uZW50czoyfSx7bmFtZTpcImFfdGV4dHVyZV9wb3NcIix0eXBlOlwiSW50MTZcIixjb21wb25lbnRzOjJ9XSksUT1mdW5jdGlvbigpe3RoaXMuYm91bmRQcm9ncmFtPW51bGwsdGhpcy5ib3VuZExheW91dFZlcnRleEJ1ZmZlcj1udWxsLHRoaXMuYm91bmRQYWludFZlcnRleEJ1ZmZlcnM9W10sdGhpcy5ib3VuZEluZGV4QnVmZmVyPW51bGwsdGhpcy5ib3VuZFZlcnRleE9mZnNldD1udWxsLHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyPW51bGwsdGhpcy52YW89bnVsbH07US5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3RoaXMuY29udGV4dD10O2Zvcih2YXIgbD10aGlzLmJvdW5kUGFpbnRWZXJ0ZXhCdWZmZXJzLmxlbmd0aCE9PW4ubGVuZ3RoLGM9MDshbCYmYzxuLmxlbmd0aDtjKyspdGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVyc1tjXSE9PW5bY10mJihsPSEwKTt2YXIgdT0hdGhpcy52YW98fHRoaXMuYm91bmRQcm9ncmFtIT09ZXx8dGhpcy5ib3VuZExheW91dFZlcnRleEJ1ZmZlciE9PXJ8fGx8fHRoaXMuYm91bmRJbmRleEJ1ZmZlciE9PWl8fHRoaXMuYm91bmRWZXJ0ZXhPZmZzZXQhPT1hfHx0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlciE9PW98fHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyMiE9PXM7IXQuZXh0VmVydGV4QXJyYXlPYmplY3R8fHU/dGhpcy5mcmVzaEJpbmQoZSxyLG4saSxhLG8scyk6KHQuYmluZFZlcnRleEFycmF5T0VTLnNldCh0aGlzLnZhbyksbyYmby5iaW5kKCksaSYmaS5keW5hbWljRHJhdyYmaS5iaW5kKCkscyYmcy5iaW5kKCkpfSxRLnByb3RvdHlwZS5mcmVzaEJpbmQ9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHMsbD10Lm51bUF0dHJpYnV0ZXMsYz10aGlzLmNvbnRleHQsdT1jLmdsO2lmKGMuZXh0VmVydGV4QXJyYXlPYmplY3QpdGhpcy52YW8mJnRoaXMuZGVzdHJveSgpLHRoaXMudmFvPWMuZXh0VmVydGV4QXJyYXlPYmplY3QuY3JlYXRlVmVydGV4QXJyYXlPRVMoKSxjLmJpbmRWZXJ0ZXhBcnJheU9FUy5zZXQodGhpcy52YW8pLHM9MCx0aGlzLmJvdW5kUHJvZ3JhbT10LHRoaXMuYm91bmRMYXlvdXRWZXJ0ZXhCdWZmZXI9ZSx0aGlzLmJvdW5kUGFpbnRWZXJ0ZXhCdWZmZXJzPXIsdGhpcy5ib3VuZEluZGV4QnVmZmVyPW4sdGhpcy5ib3VuZFZlcnRleE9mZnNldD1pLHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyPWEsdGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXIyPW87ZWxzZXtzPWMuY3VycmVudE51bUF0dHJpYnV0ZXN8fDA7Zm9yKHZhciBoPWw7aDxzO2grKyl1LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShoKX1lLmVuYWJsZUF0dHJpYnV0ZXModSx0KTtmb3IodmFyIGY9MCxwPXI7ZjxwLmxlbmd0aDtmKz0xKXBbZl0uZW5hYmxlQXR0cmlidXRlcyh1LHQpO2EmJmEuZW5hYmxlQXR0cmlidXRlcyh1LHQpLG8mJm8uZW5hYmxlQXR0cmlidXRlcyh1LHQpLGUuYmluZCgpLGUuc2V0VmVydGV4QXR0cmliUG9pbnRlcnModSx0LGkpO2Zvcih2YXIgZD0wLGc9cjtkPGcubGVuZ3RoO2QrPTEpe3ZhciB2PWdbZF07di5iaW5kKCksdi5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyh1LHQsaSl9YSYmKGEuYmluZCgpLGEuc2V0VmVydGV4QXR0cmliUG9pbnRlcnModSx0LGkpKSxuJiZuLmJpbmQoKSxvJiYoby5iaW5kKCksby5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyh1LHQsaSkpLGMuY3VycmVudE51bUF0dHJpYnV0ZXM9bH0sUS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMudmFvJiYodGhpcy5jb250ZXh0LmV4dFZlcnRleEFycmF5T2JqZWN0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHRoaXMudmFvKSx0aGlzLnZhbz1udWxsKX07dmFyIHR0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCxyLG4saSl7ZS5jYWxsKHRoaXMpLHRoaXMuaWQ9dCx0aGlzLmRpc3BhdGNoZXI9bix0aGlzLmNvb3JkaW5hdGVzPXIuY29vcmRpbmF0ZXMsdGhpcy50eXBlPVwiaW1hZ2VcIix0aGlzLm1pbnpvb209MCx0aGlzLm1heHpvb209MjIsdGhpcy50aWxlU2l6ZT01MTIsdGhpcy50aWxlcz17fSx0aGlzLnNldEV2ZW50ZWRQYXJlbnQoaSksdGhpcy5vcHRpb25zPXJ9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuZmlyZShuZXcgdC5FdmVudChcImRhdGFsb2FkaW5nXCIse2RhdGFUeXBlOlwic291cmNlXCJ9KSksdGhpcy51cmw9dGhpcy5vcHRpb25zLnVybCx0LmdldEltYWdlKHRoaXMubWFwLl90cmFuc2Zvcm1SZXF1ZXN0KHRoaXMudXJsLHQuUmVzb3VyY2VUeXBlLkltYWdlKSxmdW5jdGlvbihyLG4pe3I/ZS5maXJlKG5ldyB0LkVycm9yRXZlbnQocikpOm4mJihlLmltYWdlPWEuZ2V0SW1hZ2VEYXRhKG4pLGUuX2ZpbmlzaExvYWRpbmcoKSl9KX0sci5wcm90b3R5cGUuX2ZpbmlzaExvYWRpbmc9ZnVuY3Rpb24oKXt0aGlzLm1hcCYmKHRoaXMuc2V0Q29vcmRpbmF0ZXModGhpcy5jb29yZGluYXRlcyksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YVwiLHtkYXRhVHlwZTpcInNvdXJjZVwiLHNvdXJjZURhdGFUeXBlOlwibWV0YWRhdGFcIn0pKSl9LHIucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMubWFwPXQsdGhpcy5sb2FkKCl9LHIucHJvdG90eXBlLnNldENvb3JkaW5hdGVzPWZ1bmN0aW9uKGUpe3RoaXMuY29vcmRpbmF0ZXM9ZTt2YXIgcj10aGlzLm1hcCxuPWUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiByLnRyYW5zZm9ybS5sb2NhdGlvbkNvb3JkaW5hdGUoRy5jb252ZXJ0KHQpKS56b29tVG8oMCl9KSxpPXRoaXMuY2VudGVyQ29vcmQ9dC5nZXRDb29yZGluYXRlc0NlbnRlcihuKTtpLmNvbHVtbj1NYXRoLmZsb29yKGkuY29sdW1uKSxpLnJvdz1NYXRoLmZsb29yKGkucm93KSx0aGlzLnRpbGVJRD1uZXcgdC5DYW5vbmljYWxUaWxlSUQoaS56b29tLGkuY29sdW1uLGkucm93KSx0aGlzLm1pbnpvb209dGhpcy5tYXh6b29tPWkuem9vbTt2YXIgYT1uLm1hcChmdW5jdGlvbihlKXt2YXIgcj1lLnpvb21UbyhpLnpvb20pO3JldHVybiBuZXcgdC5kZWZhdWx0JDEoTWF0aC5yb3VuZCgoci5jb2x1bW4taS5jb2x1bW4pKnQuZGVmYXVsdCQ4KSxNYXRoLnJvdW5kKChyLnJvdy1pLnJvdykqdC5kZWZhdWx0JDgpKX0pO3JldHVybiB0aGlzLl9ib3VuZHNBcnJheT1uZXcgdC5SYXN0ZXJCb3VuZHNBcnJheSx0aGlzLl9ib3VuZHNBcnJheS5lbXBsYWNlQmFjayhhWzBdLngsYVswXS55LDAsMCksdGhpcy5fYm91bmRzQXJyYXkuZW1wbGFjZUJhY2soYVsxXS54LGFbMV0ueSx0LmRlZmF1bHQkOCwwKSx0aGlzLl9ib3VuZHNBcnJheS5lbXBsYWNlQmFjayhhWzNdLngsYVszXS55LDAsdC5kZWZhdWx0JDgpLHRoaXMuX2JvdW5kc0FycmF5LmVtcGxhY2VCYWNrKGFbMl0ueCxhWzJdLnksdC5kZWZhdWx0JDgsdC5kZWZhdWx0JDgpLHRoaXMuYm91bmRzQnVmZmVyJiYodGhpcy5ib3VuZHNCdWZmZXIuZGVzdHJveSgpLGRlbGV0ZSB0aGlzLmJvdW5kc0J1ZmZlciksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YVwiLHtkYXRhVHlwZTpcInNvdXJjZVwiLHNvdXJjZURhdGFUeXBlOlwiY29udGVudFwifSkpLHRoaXN9LHIucHJvdG90eXBlLnByZXBhcmU9ZnVuY3Rpb24oKXtpZigwIT09T2JqZWN0LmtleXModGhpcy50aWxlcykubGVuZ3RoJiZ0aGlzLmltYWdlKXt2YXIgdD10aGlzLm1hcC5wYWludGVyLmNvbnRleHQsZT10LmdsO2Zvcih2YXIgciBpbiB0aGlzLmJvdW5kc0J1ZmZlcnx8KHRoaXMuYm91bmRzQnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuX2JvdW5kc0FycmF5LEsubWVtYmVycykpLHRoaXMuYm91bmRzVkFPfHwodGhpcy5ib3VuZHNWQU89bmV3IFEpLHRoaXMudGV4dHVyZXx8KHRoaXMudGV4dHVyZT1uZXcgeih0LHRoaXMuaW1hZ2UsZS5SR0JBKSx0aGlzLnRleHR1cmUuYmluZChlLkxJTkVBUixlLkNMQU1QX1RPX0VER0UpKSx0aGlzLnRpbGVzKXt2YXIgbj10aGlzLnRpbGVzW3JdO1wibG9hZGVkXCIhPT1uLnN0YXRlJiYobi5zdGF0ZT1cImxvYWRlZFwiLG4udGV4dHVyZT10aGlzLnRleHR1cmUpfX19LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7dGhpcy50aWxlSUQmJnRoaXMudGlsZUlELmVxdWFscyh0LnRpbGVJRC5jYW5vbmljYWwpPyh0aGlzLnRpbGVzW1N0cmluZyh0LnRpbGVJRC53cmFwKV09dCx0LmJ1Y2tldHM9e30sZShudWxsKSk6KHQuc3RhdGU9XCJlcnJvcmVkXCIsZShudWxsKSl9LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOlwiaW1hZ2VcIix1cmw6dGhpcy5vcHRpb25zLnVybCxjb29yZGluYXRlczp0aGlzLmNvb3JkaW5hdGVzfX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiExfSxyfSh0LkV2ZW50ZWQpLGV0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCxyLG4saSl7ZS5jYWxsKHRoaXMsdCxyLG4saSksdGhpcy5yb3VuZFpvb209ITAsdGhpcy50eXBlPVwidmlkZW9cIix0aGlzLm9wdGlvbnM9cn1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMscj10aGlzLm9wdGlvbnM7dGhpcy51cmxzPVtdO2Zvcih2YXIgbj0wLGk9ci51cmxzO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtlLnVybHMucHVzaChlLm1hcC5fdHJhbnNmb3JtUmVxdWVzdChhLHQuUmVzb3VyY2VUeXBlLlNvdXJjZSkudXJsKX10LmdldFZpZGVvKHRoaXMudXJscyxmdW5jdGlvbihyLG4pe3I/ZS5maXJlKG5ldyB0LkVycm9yRXZlbnQocikpOm4mJihlLnZpZGVvPW4sZS52aWRlby5sb29wPSEwLGUudmlkZW8uYWRkRXZlbnRMaXN0ZW5lcihcInBsYXlpbmdcIixmdW5jdGlvbigpe2UubWFwLl9yZXJlbmRlcigpfSksZS5tYXAmJmUudmlkZW8ucGxheSgpLGUuX2ZpbmlzaExvYWRpbmcoKSl9KX0sci5wcm90b3R5cGUuZ2V0VmlkZW89ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWRlb30sci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXB8fCh0aGlzLm1hcD10LHRoaXMubG9hZCgpLHRoaXMudmlkZW8mJih0aGlzLnZpZGVvLnBsYXkoKSx0aGlzLnNldENvb3JkaW5hdGVzKHRoaXMuY29vcmRpbmF0ZXMpKSl9LHIucHJvdG90eXBlLnByZXBhcmU9ZnVuY3Rpb24oKXtpZighKDA9PT1PYmplY3Qua2V5cyh0aGlzLnRpbGVzKS5sZW5ndGh8fHRoaXMudmlkZW8ucmVhZHlTdGF0ZTwyKSl7dmFyIHQ9dGhpcy5tYXAucGFpbnRlci5jb250ZXh0LGU9dC5nbDtmb3IodmFyIHIgaW4gdGhpcy5ib3VuZHNCdWZmZXJ8fCh0aGlzLmJvdW5kc0J1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLl9ib3VuZHNBcnJheSxLLm1lbWJlcnMpKSx0aGlzLmJvdW5kc1ZBT3x8KHRoaXMuYm91bmRzVkFPPW5ldyBRKSx0aGlzLnRleHR1cmU/dGhpcy52aWRlby5wYXVzZWR8fCh0aGlzLnRleHR1cmUuYmluZChlLkxJTkVBUixlLkNMQU1QX1RPX0VER0UpLGUudGV4U3ViSW1hZ2UyRChlLlRFWFRVUkVfMkQsMCwwLDAsZS5SR0JBLGUuVU5TSUdORURfQllURSx0aGlzLnZpZGVvKSk6KHRoaXMudGV4dHVyZT1uZXcgeih0LHRoaXMudmlkZW8sZS5SR0JBKSx0aGlzLnRleHR1cmUuYmluZChlLkxJTkVBUixlLkNMQU1QX1RPX0VER0UpKSx0aGlzLnRpbGVzKXt2YXIgbj10aGlzLnRpbGVzW3JdO1wibG9hZGVkXCIhPT1uLnN0YXRlJiYobi5zdGF0ZT1cImxvYWRlZFwiLG4udGV4dHVyZT10aGlzLnRleHR1cmUpfX19LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOlwidmlkZW9cIix1cmxzOnRoaXMudXJscyxjb29yZGluYXRlczp0aGlzLmNvb3JkaW5hdGVzfX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZGVvJiYhdGhpcy52aWRlby5wYXVzZWR9LHJ9KHR0KSxydD1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpLGEpe2UuY2FsbCh0aGlzLHIsbixpLGEpLG4uY29vcmRpbmF0ZXM/QXJyYXkuaXNBcnJheShuLmNvb3JkaW5hdGVzKSYmND09PW4uY29vcmRpbmF0ZXMubGVuZ3RoJiYhbi5jb29yZGluYXRlcy5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiFBcnJheS5pc0FycmF5KHQpfHwyIT09dC5sZW5ndGh8fHQuc29tZShmdW5jdGlvbih0KXtyZXR1cm5cIm51bWJlclwiIT10eXBlb2YgdH0pfSl8fHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LmRlZmF1bHQkOShcInNvdXJjZXMuXCIrcixudWxsLCdcImNvb3JkaW5hdGVzXCIgcHJvcGVydHkgbXVzdCBiZSBhbiBhcnJheSBvZiA0IGxvbmdpdHVkZS9sYXRpdHVkZSBhcnJheSBwYWlycycpKSk6dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IHQuZGVmYXVsdCQ5KFwic291cmNlcy5cIityLG51bGwsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgXCJjb29yZGluYXRlc1wiJykpKSxuLmFuaW1hdGUmJlwiYm9vbGVhblwiIT10eXBlb2Ygbi5hbmltYXRlJiZ0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgdC5kZWZhdWx0JDkoXCJzb3VyY2VzLlwiK3IsbnVsbCwnb3B0aW9uYWwgXCJhbmltYXRlXCIgcHJvcGVydHkgbXVzdCBiZSBhIGJvb2xlYW4gdmFsdWUnKSkpLG4uY2FudmFzP1wic3RyaW5nXCI9PXR5cGVvZiBuLmNhbnZhc3x8bi5jYW52YXMgaW5zdGFuY2VvZiB0LmRlZmF1bHQuSFRNTENhbnZhc0VsZW1lbnR8fHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LmRlZmF1bHQkOShcInNvdXJjZXMuXCIrcixudWxsLCdcImNhbnZhc1wiIG11c3QgYmUgZWl0aGVyIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgSUQgb2YgdGhlIGNhbnZhcyBlbGVtZW50IGZyb20gd2hpY2ggdG8gcmVhZCwgb3IgYW4gSFRNTENhbnZhc0VsZW1lbnQgaW5zdGFuY2UnKSkpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LmRlZmF1bHQkOShcInNvdXJjZXMuXCIrcixudWxsLCdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5IFwiY2FudmFzXCInKSkpLHRoaXMub3B0aW9ucz1uLHRoaXMuYW5pbWF0ZT12b2lkIDA9PT1uLmFuaW1hdGV8fG4uYW5pbWF0ZX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3RoaXMuY2FudmFzfHwodGhpcy5jYW52YXM9dGhpcy5vcHRpb25zLmNhbnZhcyBpbnN0YW5jZW9mIHQuZGVmYXVsdC5IVE1MQ2FudmFzRWxlbWVudD90aGlzLm9wdGlvbnMuY2FudmFzOnQuZGVmYXVsdC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLm9wdGlvbnMuY2FudmFzKSksdGhpcy53aWR0aD10aGlzLmNhbnZhcy53aWR0aCx0aGlzLmhlaWdodD10aGlzLmNhbnZhcy5oZWlnaHQsdGhpcy5faGFzSW52YWxpZERpbWVuc2lvbnMoKT90aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoXCJDYW52YXMgZGltZW5zaW9ucyBjYW5ub3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8uXCIpKSk6KHRoaXMucGxheT1mdW5jdGlvbigpe3RoaXMuX3BsYXlpbmc9ITAsdGhpcy5tYXAuX3JlcmVuZGVyKCl9LHRoaXMucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLl9wbGF5aW5nPSExfSx0aGlzLl9maW5pc2hMb2FkaW5nKCkpfSxyLnByb3RvdHlwZS5nZXRDYW52YXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW52YXN9LHIucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMubWFwPXQsdGhpcy5sb2FkKCksdGhpcy5jYW52YXMmJnRoaXMuYW5pbWF0ZSYmdGhpcy5wbGF5KCl9LHIucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5wYXVzZSgpfSxyLnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKCl7dmFyIHQ9ITE7aWYodGhpcy5jYW52YXMud2lkdGghPT10aGlzLndpZHRoJiYodGhpcy53aWR0aD10aGlzLmNhbnZhcy53aWR0aCx0PSEwKSx0aGlzLmNhbnZhcy5oZWlnaHQhPT10aGlzLmhlaWdodCYmKHRoaXMuaGVpZ2h0PXRoaXMuY2FudmFzLmhlaWdodCx0PSEwKSwhdGhpcy5faGFzSW52YWxpZERpbWVuc2lvbnMoKSYmMCE9PU9iamVjdC5rZXlzKHRoaXMudGlsZXMpLmxlbmd0aCl7dmFyIGU9dGhpcy5tYXAucGFpbnRlci5jb250ZXh0LHI9ZS5nbDtmb3IodmFyIG4gaW4gdGhpcy5ib3VuZHNCdWZmZXJ8fCh0aGlzLmJvdW5kc0J1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLl9ib3VuZHNBcnJheSxLLm1lbWJlcnMpKSx0aGlzLmJvdW5kc1ZBT3x8KHRoaXMuYm91bmRzVkFPPW5ldyBRKSx0aGlzLnRleHR1cmU/dD90aGlzLnRleHR1cmUudXBkYXRlKHRoaXMuY2FudmFzKTp0aGlzLl9wbGF5aW5nJiYodGhpcy50ZXh0dXJlLmJpbmQoci5MSU5FQVIsci5DTEFNUF9UT19FREdFKSxyLnRleFN1YkltYWdlMkQoci5URVhUVVJFXzJELDAsMCwwLHIuUkdCQSxyLlVOU0lHTkVEX0JZVEUsdGhpcy5jYW52YXMpKToodGhpcy50ZXh0dXJlPW5ldyB6KGUsdGhpcy5jYW52YXMsci5SR0JBKSx0aGlzLnRleHR1cmUuYmluZChyLkxJTkVBUixyLkNMQU1QX1RPX0VER0UpKSx0aGlzLnRpbGVzKXt2YXIgaT10aGlzLnRpbGVzW25dO1wibG9hZGVkXCIhPT1pLnN0YXRlJiYoaS5zdGF0ZT1cImxvYWRlZFwiLGkudGV4dHVyZT10aGlzLnRleHR1cmUpfX19LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOlwiY2FudmFzXCIsY29vcmRpbmF0ZXM6dGhpcy5jb29yZGluYXRlc319LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGxheWluZ30sci5wcm90b3R5cGUuX2hhc0ludmFsaWREaW1lbnNpb25zPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT1bdGhpcy5jYW52YXMud2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0XTt0PGUubGVuZ3RoO3QrPTEpe3ZhciByPWVbdF07aWYoaXNOYU4ocil8fHI8PTApcmV0dXJuITB9cmV0dXJuITF9LHJ9KHR0KSxudD17dmVjdG9yOlgscmFzdGVyOlosXCJyYXN0ZXItZGVtXCI6JCxnZW9qc29uOkosdmlkZW86ZXQsaW1hZ2U6dHQsY2FudmFzOnJ0fSxpdD1mdW5jdGlvbihlLHIsbixpKXt2YXIgYT1uZXcgbnRbci50eXBlXShlLHIsbixpKTtpZihhLmlkIT09ZSl0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBTb3VyY2UgaWQgdG8gYmUgXCIrZStcIiBpbnN0ZWFkIG9mIFwiK2EuaWQpO3JldHVybiB0LmJpbmRBbGwoW1wibG9hZFwiLFwiYWJvcnRcIixcInVubG9hZFwiLFwic2VyaWFsaXplXCIsXCJwcmVwYXJlXCJdLGEpLGF9O2Z1bmN0aW9uIGF0KHQsZSxyLG4saSl7dmFyIGE9aS5tYXhQaXRjaFNjYWxlRmFjdG9yKCksbz10LnRpbGVzSW4ocixhKTtvLnNvcnQob3QpO2Zvcih2YXIgcz1bXSxsPTAsYz1vO2w8Yy5sZW5ndGg7bCs9MSl7dmFyIHU9Y1tsXTtzLnB1c2goe3dyYXBwZWRUaWxlSUQ6dS50aWxlSUQud3JhcHBlZCgpLmtleSxxdWVyeVJlc3VsdHM6dS50aWxlLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhlLHUucXVlcnlHZW9tZXRyeSx1LnNjYWxlLG4saSxhLHQudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeCh1LnRpbGVJRC50b1Vud3JhcHBlZCgpKSl9KX1yZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LHI9e30sbj0wLGk9dDtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl0sbz1hLnF1ZXJ5UmVzdWx0cyxzPWEud3JhcHBlZFRpbGVJRCxsPXJbc109cltzXXx8e307Zm9yKHZhciBjIGluIG8pZm9yKHZhciB1PW9bY10saD1sW2NdPWxbY118fHt9LGY9ZVtjXT1lW2NdfHxbXSxwPTAsZD11O3A8ZC5sZW5ndGg7cCs9MSl7dmFyIGc9ZFtwXTtoW2cuZmVhdHVyZUluZGV4XXx8KGhbZy5mZWF0dXJlSW5kZXhdPSEwLGYucHVzaChnLmZlYXR1cmUpKX19cmV0dXJuIGV9KHMpfWZ1bmN0aW9uIG90KHQsZSl7dmFyIHI9dC50aWxlSUQsbj1lLnRpbGVJRDtyZXR1cm4gci5vdmVyc2NhbGVkWi1uLm92ZXJzY2FsZWRafHxyLmNhbm9uaWNhbC55LW4uY2Fub25pY2FsLnl8fHIud3JhcC1uLndyYXB8fHIuY2Fub25pY2FsLngtbi5jYW5vbmljYWwueH12YXIgc3Q9ZnVuY3Rpb24oZSxyKXt0aGlzLnRpbGVJRD1lLHRoaXMudWlkPXQudW5pcXVlSWQoKSx0aGlzLnVzZXM9MCx0aGlzLnRpbGVTaXplPXIsdGhpcy5idWNrZXRzPXt9LHRoaXMuZXhwaXJhdGlvblRpbWU9bnVsbCx0aGlzLnF1ZXJ5UGFkZGluZz0wLHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuc3RhdGU9XCJsb2FkaW5nXCJ9O3N0LnByb3RvdHlwZS5yZWdpc3RlckZhZGVEdXJhdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10K3RoaXMudGltZUFkZGVkO2U8YS5ub3coKXx8dGhpcy5mYWRlRW5kVGltZSYmZTx0aGlzLmZhZGVFbmRUaW1lfHwodGhpcy5mYWRlRW5kVGltZT1lKX0sc3QucHJvdG90eXBlLndhc1JlcXVlc3RlZD1mdW5jdGlvbigpe3JldHVyblwiZXJyb3JlZFwiPT09dGhpcy5zdGF0ZXx8XCJsb2FkZWRcIj09PXRoaXMuc3RhdGV8fFwicmVsb2FkaW5nXCI9PT10aGlzLnN0YXRlfSxzdC5wcm90b3R5cGUubG9hZFZlY3RvckRhdGE9ZnVuY3Rpb24oZSxyLG4pe2lmKHRoaXMuaGFzRGF0YSgpJiZ0aGlzLnVubG9hZFZlY3RvckRhdGEoKSx0aGlzLnN0YXRlPVwibG9hZGVkXCIsZSl7aWYoZS5mZWF0dXJlSW5kZXgmJih0aGlzLmxhdGVzdEZlYXR1cmVJbmRleD1lLmZlYXR1cmVJbmRleCxlLnJhd1RpbGVEYXRhPyh0aGlzLmxhdGVzdFJhd1RpbGVEYXRhPWUucmF3VGlsZURhdGEsdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGE9ZS5yYXdUaWxlRGF0YSk6dGhpcy5sYXRlc3RSYXdUaWxlRGF0YSYmKHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LnJhd1RpbGVEYXRhPXRoaXMubGF0ZXN0UmF3VGlsZURhdGEpKSx0aGlzLmNvbGxpc2lvbkJveEFycmF5PWUuY29sbGlzaW9uQm94QXJyYXksdGhpcy5idWNrZXRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307aWYoIWUpcmV0dXJuIHI7Zm9yKHZhciBuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXSxvPWEubGF5ZXJJZHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlLmdldExheWVyKHQpfSkuZmlsdGVyKEJvb2xlYW4pO2lmKDAhPT1vLmxlbmd0aCl7YS5sYXllcnM9bztmb3IodmFyIHM9MCxsPW87czxsLmxlbmd0aDtzKz0xKXJbbFtzXS5pZF09YX19cmV0dXJuIHJ9KGUuYnVja2V0cyxyLnN0eWxlKSxuKWZvcih2YXIgaSBpbiB0aGlzLmJ1Y2tldHMpe3ZhciBhPXRoaXMuYnVja2V0c1tpXTthIGluc3RhbmNlb2YgdC5kZWZhdWx0JDE0JiYoYS5qdXN0UmVsb2FkZWQ9ITApfWZvcih2YXIgbyBpbiB0aGlzLnF1ZXJ5UGFkZGluZz0wLHRoaXMuYnVja2V0cyl7dmFyIHM9dGhpcy5idWNrZXRzW29dO3RoaXMucXVlcnlQYWRkaW5nPU1hdGgubWF4KHRoaXMucXVlcnlQYWRkaW5nLHIuc3R5bGUuZ2V0TGF5ZXIocy5sYXllcklkc1swXSkucXVlcnlSYWRpdXMocykpfWUuaWNvbkF0bGFzSW1hZ2UmJih0aGlzLmljb25BdGxhc0ltYWdlPWUuaWNvbkF0bGFzSW1hZ2UpLGUuZ2x5cGhBdGxhc0ltYWdlJiYodGhpcy5nbHlwaEF0bGFzSW1hZ2U9ZS5nbHlwaEF0bGFzSW1hZ2UpfWVsc2UgdGhpcy5jb2xsaXNpb25Cb3hBcnJheT1uZXcgdC5Db2xsaXNpb25Cb3hBcnJheX0sc3QucHJvdG90eXBlLnVubG9hZFZlY3RvckRhdGE9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5idWNrZXRzKXRoaXMuYnVja2V0c1t0XS5kZXN0cm95KCk7dGhpcy5idWNrZXRzPXt9LHRoaXMuaWNvbkF0bGFzVGV4dHVyZSYmdGhpcy5pY29uQXRsYXNUZXh0dXJlLmRlc3Ryb3koKSx0aGlzLmdseXBoQXRsYXNUZXh0dXJlJiZ0aGlzLmdseXBoQXRsYXNUZXh0dXJlLmRlc3Ryb3koKSx0aGlzLmxhdGVzdEZlYXR1cmVJbmRleD1udWxsLHRoaXMuc3RhdGU9XCJ1bmxvYWRlZFwifSxzdC5wcm90b3R5cGUudW5sb2FkREVNRGF0YT1mdW5jdGlvbigpe3RoaXMuZGVtPW51bGwsdGhpcy5uZWlnaGJvcmluZ1RpbGVzPW51bGwsdGhpcy5zdGF0ZT1cInVubG9hZGVkXCJ9LHN0LnByb3RvdHlwZS5nZXRCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYnVja2V0c1t0LmlkXX0sc3QucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5idWNrZXRzKXt2YXIgcj10aGlzLmJ1Y2tldHNbZV07ci51cGxvYWRlZHx8KHIudXBsb2FkKHQpLHIudXBsb2FkZWQ9ITApfXZhciBuPXQuZ2w7dGhpcy5pY29uQXRsYXNJbWFnZSYmKHRoaXMuaWNvbkF0bGFzVGV4dHVyZT1uZXcgeih0LHRoaXMuaWNvbkF0bGFzSW1hZ2Usbi5SR0JBKSx0aGlzLmljb25BdGxhc0ltYWdlPW51bGwpLHRoaXMuZ2x5cGhBdGxhc0ltYWdlJiYodGhpcy5nbHlwaEF0bGFzVGV4dHVyZT1uZXcgeih0LHRoaXMuZ2x5cGhBdGxhc0ltYWdlLG4uQUxQSEEpLHRoaXMuZ2x5cGhBdGxhc0ltYWdlPW51bGwpfSxzdC5wcm90b3R5cGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3JldHVybiB0aGlzLmxhdGVzdEZlYXR1cmVJbmRleCYmdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGE/dGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucXVlcnkoe3F1ZXJ5R2VvbWV0cnk6ZSxzY2FsZTpyLHRpbGVTaXplOnRoaXMudGlsZVNpemUscG9zTWF0cml4Om8sdHJhbnNmb3JtOmkscGFyYW1zOm4scXVlcnlQYWRkaW5nOnRoaXMucXVlcnlQYWRkaW5nKmF9LHQpOnt9fSxzdC5wcm90b3R5cGUucXVlcnlTb3VyY2VGZWF0dXJlcz1mdW5jdGlvbihlLHIpe2lmKHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4JiZ0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YSl7dmFyIG49dGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgubG9hZFZUTGF5ZXJzKCksaT1yP3Iuc291cmNlTGF5ZXI6XCJcIixhPW4uX2dlb2pzb25UaWxlTGF5ZXJ8fG5baV07aWYoYSlmb3IodmFyIG89dC5kZWZhdWx0JDEzKHImJnIuZmlsdGVyKSxzPXt6OnRoaXMudGlsZUlELm92ZXJzY2FsZWRaLHg6dGhpcy50aWxlSUQuY2Fub25pY2FsLngseTp0aGlzLnRpbGVJRC5jYW5vbmljYWwueX0sbD0wO2w8YS5sZW5ndGg7bCsrKXt2YXIgYz1hLmZlYXR1cmUobCk7aWYobyhuZXcgdC5kZWZhdWx0JDE2KHRoaXMudGlsZUlELm92ZXJzY2FsZWRaKSxjKSl7dmFyIHU9bmV3IHQuZGVmYXVsdCQxMihjLHMueixzLngscy55KTt1LnRpbGU9cyxlLnB1c2godSl9fX19LHN0LnByb3RvdHlwZS5jbGVhck1hc2s9ZnVuY3Rpb24oKXt0aGlzLnNlZ21lbnRzJiYodGhpcy5zZWdtZW50cy5kZXN0cm95KCksZGVsZXRlIHRoaXMuc2VnbWVudHMpLHRoaXMubWFza2VkQm91bmRzQnVmZmVyJiYodGhpcy5tYXNrZWRCb3VuZHNCdWZmZXIuZGVzdHJveSgpLGRlbGV0ZSB0aGlzLm1hc2tlZEJvdW5kc0J1ZmZlciksdGhpcy5tYXNrZWRJbmRleEJ1ZmZlciYmKHRoaXMubWFza2VkSW5kZXhCdWZmZXIuZGVzdHJveSgpLGRlbGV0ZSB0aGlzLm1hc2tlZEluZGV4QnVmZmVyKX0sc3QucHJvdG90eXBlLnNldE1hc2s9ZnVuY3Rpb24oZSxyKXtpZighdC5kZWZhdWx0JDEwKHRoaXMubWFzayxlKSYmKHRoaXMubWFzaz1lLHRoaXMuY2xlYXJNYXNrKCksIXQuZGVmYXVsdCQxMChlLHswOiEwfSkpKXt2YXIgbj1uZXcgdC5SYXN0ZXJCb3VuZHNBcnJheSxpPW5ldyB0LlRyaWFuZ2xlSW5kZXhBcnJheTt0aGlzLnNlZ21lbnRzPW5ldyB0LmRlZmF1bHQkMTUsdGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCgwLG4saSk7Zm9yKHZhciBhPU9iamVjdC5rZXlzKGUpLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9ZVthW29dXSxsPXQuZGVmYXVsdCQ4Pj5zLnosYz1uZXcgdC5kZWZhdWx0JDEocy54Kmwscy55KmwpLHU9bmV3IHQuZGVmYXVsdCQxKGMueCtsLGMueStsKSxoPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCxuLGkpO24uZW1wbGFjZUJhY2soYy54LGMueSxjLngsYy55KSxuLmVtcGxhY2VCYWNrKHUueCxjLnksdS54LGMueSksbi5lbXBsYWNlQmFjayhjLngsdS55LGMueCx1LnkpLG4uZW1wbGFjZUJhY2sodS54LHUueSx1LngsdS55KTt2YXIgZj1oLnZlcnRleExlbmd0aDtpLmVtcGxhY2VCYWNrKGYsZisxLGYrMiksaS5lbXBsYWNlQmFjayhmKzEsZisyLGYrMyksaC52ZXJ0ZXhMZW5ndGgrPTQsaC5wcmltaXRpdmVMZW5ndGgrPTJ9dGhpcy5tYXNrZWRCb3VuZHNCdWZmZXI9ci5jcmVhdGVWZXJ0ZXhCdWZmZXIobixLLm1lbWJlcnMpLHRoaXMubWFza2VkSW5kZXhCdWZmZXI9ci5jcmVhdGVJbmRleEJ1ZmZlcihpKX19LHN0LnByb3RvdHlwZS5oYXNEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuXCJsb2FkZWRcIj09PXRoaXMuc3RhdGV8fFwicmVsb2FkaW5nXCI9PT10aGlzLnN0YXRlfHxcImV4cGlyZWRcIj09PXRoaXMuc3RhdGV9LHN0LnByb3RvdHlwZS5zZXRFeHBpcnlEYXRhPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuZXhwaXJhdGlvblRpbWU7aWYoZS5jYWNoZUNvbnRyb2wpe3ZhciBuPXQucGFyc2VDYWNoZUNvbnRyb2woZS5jYWNoZUNvbnRyb2wpO25bXCJtYXgtYWdlXCJdJiYodGhpcy5leHBpcmF0aW9uVGltZT1EYXRlLm5vdygpKzFlMypuW1wibWF4LWFnZVwiXSl9ZWxzZSBlLmV4cGlyZXMmJih0aGlzLmV4cGlyYXRpb25UaW1lPW5ldyBEYXRlKGUuZXhwaXJlcykuZ2V0VGltZSgpKTtpZih0aGlzLmV4cGlyYXRpb25UaW1lKXt2YXIgaT1EYXRlLm5vdygpLGE9ITE7aWYodGhpcy5leHBpcmF0aW9uVGltZT5pKWE9ITE7ZWxzZSBpZihyKWlmKHRoaXMuZXhwaXJhdGlvblRpbWU8cilhPSEwO2Vsc2V7dmFyIG89dGhpcy5leHBpcmF0aW9uVGltZS1yO28/dGhpcy5leHBpcmF0aW9uVGltZT1pK01hdGgubWF4KG8sM2U0KTphPSEwfWVsc2UgYT0hMDthPyh0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQrKyx0aGlzLnN0YXRlPVwiZXhwaXJlZFwiKTp0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQ9MH19LHN0LnByb3RvdHlwZS5nZXRFeHBpcnlUaW1lb3V0PWZ1bmN0aW9uKCl7aWYodGhpcy5leHBpcmF0aW9uVGltZSlyZXR1cm4gdGhpcy5leHBpcmVkUmVxdWVzdENvdW50PzFlMyooMTw8TWF0aC5taW4odGhpcy5leHBpcmVkUmVxdWVzdENvdW50LTEsMzEpKTpNYXRoLm1pbih0aGlzLmV4cGlyYXRpb25UaW1lLShuZXcgRGF0ZSkuZ2V0VGltZSgpLE1hdGgucG93KDIsMzEpLTEpfTt2YXIgbHQ9ZnVuY3Rpb24odCxlKXt0aGlzLm1heD10LHRoaXMub25SZW1vdmU9ZSx0aGlzLnJlc2V0KCl9O2x0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLmRhdGEpZm9yKHZhciBlPTAscj10aGlzLmRhdGFbdF07ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdO24udGltZW91dCYmY2xlYXJUaW1lb3V0KG4udGltZW91dCksdGhpcy5vblJlbW92ZShuLnZhbHVlKX1yZXR1cm4gdGhpcy5kYXRhPXt9LHRoaXMub3JkZXI9W10sdGhpc30sbHQucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcyxpPXQud3JhcHBlZCgpLmtleTt2b2lkIDA9PT10aGlzLmRhdGFbaV0mJih0aGlzLmRhdGFbaV09W10pO3ZhciBhPXt2YWx1ZTplLHRpbWVvdXQ6dm9pZCAwfTtpZih2b2lkIDAhPT1yJiYoYS50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtuLnJlbW92ZSh0LGEpfSxyKSksdGhpcy5kYXRhW2ldLnB1c2goYSksdGhpcy5vcmRlci5wdXNoKGkpLHRoaXMub3JkZXIubGVuZ3RoPnRoaXMubWF4KXt2YXIgbz10aGlzLl9nZXRBbmRSZW1vdmVCeUtleSh0aGlzLm9yZGVyWzBdKTtvJiZ0aGlzLm9uUmVtb3ZlKG8pfXJldHVybiB0aGlzfSxsdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0LndyYXBwZWQoKS5rZXkgaW4gdGhpcy5kYXRhfSxsdC5wcm90b3R5cGUuZ2V0QW5kUmVtb3ZlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhcyh0KT90aGlzLl9nZXRBbmRSZW1vdmVCeUtleSh0LndyYXBwZWQoKS5rZXkpOm51bGx9LGx0LnByb3RvdHlwZS5fZ2V0QW5kUmVtb3ZlQnlLZXk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kYXRhW3RdLnNoaWZ0KCk7cmV0dXJuIGUudGltZW91dCYmY2xlYXJUaW1lb3V0KGUudGltZW91dCksMD09PXRoaXMuZGF0YVt0XS5sZW5ndGgmJmRlbGV0ZSB0aGlzLmRhdGFbdF0sdGhpcy5vcmRlci5zcGxpY2UodGhpcy5vcmRlci5pbmRleE9mKHQpLDEpLGUudmFsdWV9LGx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGFzKHQpP3RoaXMuZGF0YVt0LndyYXBwZWQoKS5rZXldWzBdLnZhbHVlOm51bGx9LGx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCxlKXtpZighdGhpcy5oYXModCkpcmV0dXJuIHRoaXM7dmFyIHI9dC53cmFwcGVkKCkua2V5LG49dm9pZCAwPT09ZT8wOnRoaXMuZGF0YVtyXS5pbmRleE9mKGUpLGk9dGhpcy5kYXRhW3JdW25dO3JldHVybiB0aGlzLmRhdGFbcl0uc3BsaWNlKG4sMSksaS50aW1lb3V0JiZjbGVhclRpbWVvdXQoaS50aW1lb3V0KSwwPT09dGhpcy5kYXRhW3JdLmxlbmd0aCYmZGVsZXRlIHRoaXMuZGF0YVtyXSx0aGlzLm9uUmVtb3ZlKGkudmFsdWUpLHRoaXMub3JkZXIuc3BsaWNlKHRoaXMub3JkZXIuaW5kZXhPZihyKSwxKSx0aGlzfSxsdC5wcm90b3R5cGUuc2V0TWF4U2l6ZT1mdW5jdGlvbih0KXtmb3IodGhpcy5tYXg9dDt0aGlzLm9yZGVyLmxlbmd0aD50aGlzLm1heDspe3ZhciBlPXRoaXMuX2dldEFuZFJlbW92ZUJ5S2V5KHRoaXMub3JkZXJbMF0pO2UmJnRoaXMub25SZW1vdmUoZSl9cmV0dXJuIHRoaXN9O3ZhciBjdD1mdW5jdGlvbih0LGUscil7dGhpcy5jb250ZXh0PXQ7dmFyIG49dC5nbDt0aGlzLmJ1ZmZlcj1uLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuZHluYW1pY0RyYXc9Qm9vbGVhbihyKSx0aGlzLnVuYmluZFZBTygpLHQuYmluZEVsZW1lbnRCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKSxuLmJ1ZmZlckRhdGEobi5FTEVNRU5UX0FSUkFZX0JVRkZFUixlLmFycmF5QnVmZmVyLHRoaXMuZHluYW1pY0RyYXc/bi5EWU5BTUlDX0RSQVc6bi5TVEFUSUNfRFJBVyksdGhpcy5keW5hbWljRHJhd3x8ZGVsZXRlIGUuYXJyYXlCdWZmZXJ9O2N0LnByb3RvdHlwZS51bmJpbmRWQU89ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQuZXh0VmVydGV4QXJyYXlPYmplY3QmJnRoaXMuY29udGV4dC5iaW5kVmVydGV4QXJyYXlPRVMuc2V0KG51bGwpfSxjdC5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe3RoaXMuY29udGV4dC5iaW5kRWxlbWVudEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpfSxjdC5wcm90b3R5cGUudXBkYXRlRGF0YT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy51bmJpbmRWQU8oKSx0aGlzLmJpbmQoKSxlLmJ1ZmZlclN1YkRhdGEoZS5FTEVNRU5UX0FSUkFZX0JVRkZFUiwwLHQuYXJyYXlCdWZmZXIpfSxjdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udGV4dC5nbDt0aGlzLmJ1ZmZlciYmKHQuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKSxkZWxldGUgdGhpcy5idWZmZXIpfTt2YXIgdXQ9e0ludDg6XCJCWVRFXCIsVWludDg6XCJVTlNJR05FRF9CWVRFXCIsSW50MTY6XCJTSE9SVFwiLFVpbnQxNjpcIlVOU0lHTkVEX1NIT1JUXCIsSW50MzI6XCJJTlRcIixVaW50MzI6XCJVTlNJR05FRF9JTlRcIixGbG9hdDMyOlwiRkxPQVRcIn0saHQ9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5hdHRyaWJ1dGVzPXIsdGhpcy5pdGVtU2l6ZT1lLmJ5dGVzUGVyRWxlbWVudCx0aGlzLmR5bmFtaWNEcmF3PW4sdGhpcy5jb250ZXh0PXQ7dmFyIGk9dC5nbDt0aGlzLmJ1ZmZlcj1pLmNyZWF0ZUJ1ZmZlcigpLHQuYmluZFZlcnRleEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpLGkuYnVmZmVyRGF0YShpLkFSUkFZX0JVRkZFUixlLmFycmF5QnVmZmVyLHRoaXMuZHluYW1pY0RyYXc/aS5EWU5BTUlDX0RSQVc6aS5TVEFUSUNfRFJBVyksdGhpcy5keW5hbWljRHJhd3x8ZGVsZXRlIGUuYXJyYXlCdWZmZXJ9O2h0LnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0LmJpbmRWZXJ0ZXhCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKX0saHQucHJvdG90eXBlLnVwZGF0ZURhdGE9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO3RoaXMuYmluZCgpLGUuYnVmZmVyU3ViRGF0YShlLkFSUkFZX0JVRkZFUiwwLHQuYXJyYXlCdWZmZXIpfSxodC5wcm90b3R5cGUuZW5hYmxlQXR0cmlidXRlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDtyKyspe3ZhciBuPXRoaXMuYXR0cmlidXRlc1tyXSxpPWUuYXR0cmlidXRlc1tuLm5hbWVdO3ZvaWQgMCE9PWkmJnQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSl9fSxodC5wcm90b3R5cGUuc2V0VmVydGV4QXR0cmliUG9pbnRlcnM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248dGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDtuKyspe3ZhciBpPXRoaXMuYXR0cmlidXRlc1tuXSxhPWUuYXR0cmlidXRlc1tpLm5hbWVdO3ZvaWQgMCE9PWEmJnQudmVydGV4QXR0cmliUG9pbnRlcihhLGkuY29tcG9uZW50cyx0W3V0W2kudHlwZV1dLCExLHRoaXMuaXRlbVNpemUsaS5vZmZzZXQrdGhpcy5pdGVtU2l6ZSoocnx8MCkpfX0saHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnRleHQuZ2w7dGhpcy5idWZmZXImJih0LmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlciksZGVsZXRlIHRoaXMuYnVmZmVyKX07dmFyIGZ0PWZ1bmN0aW9uKGUpe3RoaXMuY29udGV4dD1lLHRoaXMuY3VycmVudD10LmRlZmF1bHQkNi50cmFuc3BhcmVudH07ZnQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LGZ0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50O3Qucj09PWUuciYmdC5nPT09ZS5nJiZ0LmI9PT1lLmImJnQuYT09PWUuYXx8KHRoaXMuY29udGV4dC5nbC5jbGVhckNvbG9yKHQucix0LmcsdC5iLHQuYSksdGhpcy5jdXJyZW50PXQpfTt2YXIgcHQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PTF9O3B0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxwdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudCE9PXQmJih0aGlzLmNvbnRleHQuZ2wuY2xlYXJEZXB0aCh0KSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBkdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9MH07ZHQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LGR0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50IT09dCYmKHRoaXMuY29udGV4dC5nbC5jbGVhclN0ZW5jaWwodCksdGhpcy5jdXJyZW50PXQpfTt2YXIgZ3Q9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PVshMCwhMCwhMCwhMF19O2d0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxndC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDt0WzBdPT09ZVswXSYmdFsxXT09PWVbMV0mJnRbMl09PT1lWzJdJiZ0WzNdPT09ZVszXXx8KHRoaXMuY29udGV4dC5nbC5jb2xvck1hc2sodFswXSx0WzFdLHRbMl0sdFszXSksdGhpcy5jdXJyZW50PXQpfTt2YXIgdnQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PSEwfTt2dC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sdnQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQhPT10JiYodGhpcy5jb250ZXh0LmdsLmRlcHRoTWFzayh0KSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBtdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9MjU1fTttdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sbXQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQhPT10JiYodGhpcy5jb250ZXh0LmdsLnN0ZW5jaWxNYXNrKHQpLHRoaXMuY3VycmVudD10KX07dmFyIHl0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD17ZnVuYzp0LmdsLkFMV0FZUyxyZWY6MCxtYXNrOjI1NX19O3l0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSx5dC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDt0LmZ1bmM9PT1lLmZ1bmMmJnQucmVmPT09ZS5yZWYmJnQubWFzaz09PWUubWFza3x8KHRoaXMuY29udGV4dC5nbC5zdGVuY2lsRnVuYyh0LmZ1bmMsdC5yZWYsdC5tYXNrKSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciB4dD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dDt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5jdXJyZW50PVtlLktFRVAsZS5LRUVQLGUuS0VFUF19O3h0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSx4dC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDt0WzBdPT09ZVswXSYmdFsxXT09PWVbMV0mJnRbMl09PT1lWzJdfHwodGhpcy5jb250ZXh0LmdsLnN0ZW5jaWxPcCh0WzBdLHRbMV0sdFsyXSksdGhpcy5jdXJyZW50PXQpfTt2YXIgYnQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PSExfTtidC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sYnQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dD9lLmVuYWJsZShlLlNURU5DSUxfVEVTVCk6ZS5kaXNhYmxlKGUuU1RFTkNJTF9URVNUKSx0aGlzLmN1cnJlbnQ9dH19O3ZhciBfdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9WzAsMV19O190LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxfdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDt0WzBdPT09ZVswXSYmdFsxXT09PWVbMV18fCh0aGlzLmNvbnRleHQuZ2wuZGVwdGhSYW5nZSh0WzBdLHRbMV0pLHRoaXMuY3VycmVudD10KX07dmFyIHd0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD0hMX07d3QucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LHd0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5jdXJyZW50IT09dCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO3Q/ZS5lbmFibGUoZS5ERVBUSF9URVNUKTplLmRpc2FibGUoZS5ERVBUSF9URVNUKSx0aGlzLmN1cnJlbnQ9dH19O3ZhciBrdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9dC5nbC5MRVNTfTtrdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sa3QucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQhPT10JiYodGhpcy5jb250ZXh0LmdsLmRlcHRoRnVuYyh0KSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBBdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9ITF9O0F0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxBdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuY3VycmVudCE9PXQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDt0P2UuZW5hYmxlKGUuQkxFTkQpOmUuZGlzYWJsZShlLkJMRU5EKSx0aGlzLmN1cnJlbnQ9dH19O3ZhciBUdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dDt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5jdXJyZW50PVtlLk9ORSxlLlpFUk9dfTtUdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sVHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7dFswXT09PWVbMF0mJnRbMV09PT1lWzFdfHwodGhpcy5jb250ZXh0LmdsLmJsZW5kRnVuYyh0WzBdLHRbMV0pLHRoaXMuY3VycmVudD10KX07dmFyIE10PWZ1bmN0aW9uKGUpe3RoaXMuY29udGV4dD1lLHRoaXMuY3VycmVudD10LmRlZmF1bHQkNi50cmFuc3BhcmVudH07TXQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LE10LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50O3Qucj09PWUuciYmdC5nPT09ZS5nJiZ0LmI9PT1lLmImJnQuYT09PWUuYXx8KHRoaXMuY29udGV4dC5nbC5ibGVuZENvbG9yKHQucix0LmcsdC5iLHQuYSksdGhpcy5jdXJyZW50PXQpfTt2YXIgU3Q9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PW51bGx9O1N0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxTdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudCE9PXQmJih0aGlzLmNvbnRleHQuZ2wudXNlUHJvZ3JhbSh0KSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBFdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9MX07RXQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LEV0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5jb250ZXh0LmxpbmVXaWR0aFJhbmdlLG49dC5jbGFtcChlLHJbMF0sclsxXSk7dGhpcy5jdXJyZW50IT09biYmKHRoaXMuY29udGV4dC5nbC5saW5lV2lkdGgobiksdGhpcy5jdXJyZW50PWUpfTt2YXIgQ3Q9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PXQuZ2wuVEVYVFVSRTB9O0N0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxDdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudCE9PXQmJih0aGlzLmNvbnRleHQuZ2wuYWN0aXZlVGV4dHVyZSh0KSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBMdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dDt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5jdXJyZW50PVswLDAsZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XX07THQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LEx0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50O3RbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl0mJnRbM109PT1lWzNdfHwodGhpcy5jb250ZXh0LmdsLnZpZXdwb3J0KHRbMF0sdFsxXSx0WzJdLHRbM10pLHRoaXMuY3VycmVudD10KX07dmFyIHp0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1udWxsfTt6dC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0senQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7ZS5iaW5kRnJhbWVidWZmZXIoZS5GUkFNRUJVRkZFUix0KSx0aGlzLmN1cnJlbnQ9dH19O3ZhciBPdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9bnVsbH07T3QucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LE90LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5jdXJyZW50IT09dCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO2UuYmluZFJlbmRlcmJ1ZmZlcihlLlJFTkRFUkJVRkZFUix0KSx0aGlzLmN1cnJlbnQ9dH19O3ZhciBJdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9bnVsbH07SXQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LEl0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5jdXJyZW50IT09dCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO2UuYmluZFRleHR1cmUoZS5URVhUVVJFXzJELHQpLHRoaXMuY3VycmVudD10fX07dmFyIER0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1udWxsfTtEdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sRHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7ZS5iaW5kQnVmZmVyKGUuQVJSQVlfQlVGRkVSLHQpLHRoaXMuY3VycmVudD10fX07dmFyIFB0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1udWxsfTtQdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sUHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7ZS5iaW5kQnVmZmVyKGUuRUxFTUVOVF9BUlJBWV9CVUZGRVIsdCksdGhpcy5jdXJyZW50PXR9O3ZhciBSdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9bnVsbH07UnQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LFJ0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50IT09dCYmdGhpcy5jb250ZXh0LmV4dFZlcnRleEFycmF5T2JqZWN0JiYodGhpcy5jb250ZXh0LmV4dFZlcnRleEFycmF5T2JqZWN0LmJpbmRWZXJ0ZXhBcnJheU9FUyh0KSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBGdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9NH07RnQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LEZ0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5jdXJyZW50IT09dCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO2UucGl4ZWxTdG9yZWkoZS5VTlBBQ0tfQUxJR05NRU5ULHQpLHRoaXMuY3VycmVudD10fX07dmFyIEJ0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD0hMX07QnQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LEJ0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5jdXJyZW50IT09dCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO2UucGl4ZWxTdG9yZWkoZS5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsdCksdGhpcy5jdXJyZW50PXR9fTt2YXIgTnQ9ZnVuY3Rpb24odCxlKXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9bnVsbCx0aGlzLnBhcmVudD1lfTtOdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH07dmFyIGp0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXt0LmNhbGwodGhpcyxlLHIpLHRoaXMuZGlydHk9ITF9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmRpcnR5fHx0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5jb250ZXh0LmJpbmRGcmFtZWJ1ZmZlci5zZXQodGhpcy5wYXJlbnQpLGUuZnJhbWVidWZmZXJUZXh0dXJlMkQoZS5GUkFNRUJVRkZFUixlLkNPTE9SX0FUVEFDSE1FTlQwLGUuVEVYVFVSRV8yRCx0LDApLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlLnByb3RvdHlwZS5zZXREaXJ0eT1mdW5jdGlvbigpe3RoaXMuZGlydHk9ITB9LGV9KE50KSxWdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5jb250ZXh0LmJpbmRGcmFtZWJ1ZmZlci5zZXQodGhpcy5wYXJlbnQpLGUuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoZS5GUkFNRUJVRkZFUixlLkRFUFRIX0FUVEFDSE1FTlQsZS5SRU5ERVJCVUZGRVIsdCksdGhpcy5jdXJyZW50PXR9fSxlfShOdCksVXQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuY29udGV4dD10LHRoaXMud2lkdGg9ZSx0aGlzLmhlaWdodD1yO3ZhciBuPXQuZ2wsaT10aGlzLmZyYW1lYnVmZmVyPW4uY3JlYXRlRnJhbWVidWZmZXIoKTt0aGlzLmNvbG9yQXR0YWNobWVudD1uZXcganQodCxpKSx0aGlzLmRlcHRoQXR0YWNobWVudD1uZXcgVnQodCxpKX07VXQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnRleHQuZ2wsZT10aGlzLmNvbG9yQXR0YWNobWVudC5nZXQoKTtlJiZ0LmRlbGV0ZVRleHR1cmUoZSk7dmFyIHI9dGhpcy5kZXB0aEF0dGFjaG1lbnQuZ2V0KCk7ciYmdC5kZWxldGVSZW5kZXJidWZmZXIociksdC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKX07dmFyIHF0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmZ1bmM9dCx0aGlzLm1hc2s9ZSx0aGlzLnJhbmdlPXJ9O3F0LlJlYWRPbmx5PSExLHF0LlJlYWRXcml0ZT0hMCxxdC5kaXNhYmxlZD1uZXcgcXQoNTE5LHF0LlJlYWRPbmx5LFswLDFdKTt2YXIgSHQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMudGVzdD10LHRoaXMucmVmPWUsdGhpcy5tYXNrPXIsdGhpcy5mYWlsPW4sdGhpcy5kZXB0aEZhaWw9aSx0aGlzLnBhc3M9YX07SHQuZGlzYWJsZWQ9bmV3IEh0KHtmdW5jOjUxOSxtYXNrOjB9LDAsMCw3NjgwLDc2ODAsNzY4MCk7dmFyIEd0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmJsZW5kRnVuY3Rpb249dCx0aGlzLmJsZW5kQ29sb3I9ZSx0aGlzLm1hc2s9cn07R3QuZGlzYWJsZWQ9bmV3IEd0KEd0LlJlcGxhY2U9WzEsMF0sdC5kZWZhdWx0JDYudHJhbnNwYXJlbnQsWyExLCExLCExLCExXSksR3QudW5ibGVuZGVkPW5ldyBHdChHdC5SZXBsYWNlLHQuZGVmYXVsdCQ2LnRyYW5zcGFyZW50LFshMCwhMCwhMCwhMF0pLEd0LmFscGhhQmxlbmRlZD1uZXcgR3QoWzEsNzcxXSx0LmRlZmF1bHQkNi50cmFuc3BhcmVudCxbITAsITAsITAsITBdKTt2YXIgWXQ9ZnVuY3Rpb24odCl7dGhpcy5nbD10LHRoaXMuZXh0VmVydGV4QXJyYXlPYmplY3Q9dGhpcy5nbC5nZXRFeHRlbnNpb24oXCJPRVNfdmVydGV4X2FycmF5X29iamVjdFwiKSx0aGlzLmxpbmVXaWR0aFJhbmdlPXQuZ2V0UGFyYW1ldGVyKHQuQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFKSx0aGlzLmNsZWFyQ29sb3I9bmV3IGZ0KHRoaXMpLHRoaXMuY2xlYXJEZXB0aD1uZXcgcHQodGhpcyksdGhpcy5jbGVhclN0ZW5jaWw9bmV3IGR0KHRoaXMpLHRoaXMuY29sb3JNYXNrPW5ldyBndCh0aGlzKSx0aGlzLmRlcHRoTWFzaz1uZXcgdnQodGhpcyksdGhpcy5zdGVuY2lsTWFzaz1uZXcgbXQodGhpcyksdGhpcy5zdGVuY2lsRnVuYz1uZXcgeXQodGhpcyksdGhpcy5zdGVuY2lsT3A9bmV3IHh0KHRoaXMpLHRoaXMuc3RlbmNpbFRlc3Q9bmV3IGJ0KHRoaXMpLHRoaXMuZGVwdGhSYW5nZT1uZXcgX3QodGhpcyksdGhpcy5kZXB0aFRlc3Q9bmV3IHd0KHRoaXMpLHRoaXMuZGVwdGhGdW5jPW5ldyBrdCh0aGlzKSx0aGlzLmJsZW5kPW5ldyBBdCh0aGlzKSx0aGlzLmJsZW5kRnVuYz1uZXcgVHQodGhpcyksdGhpcy5ibGVuZENvbG9yPW5ldyBNdCh0aGlzKSx0aGlzLnByb2dyYW09bmV3IFN0KHRoaXMpLHRoaXMubGluZVdpZHRoPW5ldyBFdCh0aGlzKSx0aGlzLmFjdGl2ZVRleHR1cmU9bmV3IEN0KHRoaXMpLHRoaXMudmlld3BvcnQ9bmV3IEx0KHRoaXMpLHRoaXMuYmluZEZyYW1lYnVmZmVyPW5ldyB6dCh0aGlzKSx0aGlzLmJpbmRSZW5kZXJidWZmZXI9bmV3IE90KHRoaXMpLHRoaXMuYmluZFRleHR1cmU9bmV3IEl0KHRoaXMpLHRoaXMuYmluZFZlcnRleEJ1ZmZlcj1uZXcgRHQodGhpcyksdGhpcy5iaW5kRWxlbWVudEJ1ZmZlcj1uZXcgUHQodGhpcyksdGhpcy5iaW5kVmVydGV4QXJyYXlPRVM9dGhpcy5leHRWZXJ0ZXhBcnJheU9iamVjdCYmbmV3IFJ0KHRoaXMpLHRoaXMucGl4ZWxTdG9yZVVucGFjaz1uZXcgRnQodGhpcyksdGhpcy5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYT1uZXcgQnQodGhpcyksdGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM9dC5nZXRFeHRlbnNpb24oXCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWNcIil8fHQuZ2V0RXh0ZW5zaW9uKFwiTU9aX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpY1wiKXx8dC5nZXRFeHRlbnNpb24oXCJXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljXCIpLHRoaXMuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljJiYodGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNNYXg9dC5nZXRQYXJhbWV0ZXIodGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKSksdGhpcy5leHRUZXh0dXJlSGFsZkZsb2F0PXQuZ2V0RXh0ZW5zaW9uKFwiT0VTX3RleHR1cmVfaGFsZl9mbG9hdFwiKSx0aGlzLmV4dFRleHR1cmVIYWxmRmxvYXQmJnQuZ2V0RXh0ZW5zaW9uKFwiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXJcIil9O1l0LnByb3RvdHlwZS5jcmVhdGVJbmRleEJ1ZmZlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgY3QodGhpcyx0LGUpfSxZdC5wcm90b3R5cGUuY3JlYXRlVmVydGV4QnVmZmVyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbmV3IGh0KHRoaXMsdCxlLHIpfSxZdC5wcm90b3R5cGUuY3JlYXRlUmVuZGVyYnVmZmVyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmdsLGk9bi5jcmVhdGVSZW5kZXJidWZmZXIoKTtyZXR1cm4gdGhpcy5iaW5kUmVuZGVyYnVmZmVyLnNldChpKSxuLnJlbmRlcmJ1ZmZlclN0b3JhZ2Uobi5SRU5ERVJCVUZGRVIsdCxlLHIpLHRoaXMuYmluZFJlbmRlcmJ1ZmZlci5zZXQobnVsbCksaX0sWXQucHJvdG90eXBlLmNyZWF0ZUZyYW1lYnVmZmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBVdCh0aGlzLHQsZSl9LFl0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbih0KXt2YXIgZT10LmNvbG9yLHI9dC5kZXB0aCxuPXRoaXMuZ2wsaT0wO2UmJihpfD1uLkNPTE9SX0JVRkZFUl9CSVQsdGhpcy5jbGVhckNvbG9yLnNldChlKSx0aGlzLmNvbG9yTWFzay5zZXQoWyEwLCEwLCEwLCEwXSkpLHZvaWQgMCE9PXImJihpfD1uLkRFUFRIX0JVRkZFUl9CSVQsdGhpcy5jbGVhckRlcHRoLnNldChyKSx0aGlzLmRlcHRoTWFzay5zZXQoITApKSxuLmNsZWFyKGkpfSxZdC5wcm90b3R5cGUuc2V0RGVwdGhNb2RlPWZ1bmN0aW9uKHQpe3QuZnVuYyE9PXRoaXMuZ2wuQUxXQVlTfHx0Lm1hc2s/KHRoaXMuZGVwdGhUZXN0LnNldCghMCksdGhpcy5kZXB0aEZ1bmMuc2V0KHQuZnVuYyksdGhpcy5kZXB0aE1hc2suc2V0KHQubWFzayksdGhpcy5kZXB0aFJhbmdlLnNldCh0LnJhbmdlKSk6dGhpcy5kZXB0aFRlc3Quc2V0KCExKX0sWXQucHJvdG90eXBlLnNldFN0ZW5jaWxNb2RlPWZ1bmN0aW9uKHQpe3QudGVzdC5mdW5jIT09dGhpcy5nbC5BTFdBWVN8fHQubWFzaz8odGhpcy5zdGVuY2lsVGVzdC5zZXQoITApLHRoaXMuc3RlbmNpbE1hc2suc2V0KHQubWFzayksdGhpcy5zdGVuY2lsT3Auc2V0KFt0LmZhaWwsdC5kZXB0aEZhaWwsdC5wYXNzXSksdGhpcy5zdGVuY2lsRnVuYy5zZXQoe2Z1bmM6dC50ZXN0LmZ1bmMscmVmOnQucmVmLG1hc2s6dC50ZXN0Lm1hc2t9KSk6dGhpcy5zdGVuY2lsVGVzdC5zZXQoITEpfSxZdC5wcm90b3R5cGUuc2V0Q29sb3JNb2RlPWZ1bmN0aW9uKGUpe3QuZGVmYXVsdCQxMChlLmJsZW5kRnVuY3Rpb24sR3QuUmVwbGFjZSk/dGhpcy5ibGVuZC5zZXQoITEpOih0aGlzLmJsZW5kLnNldCghMCksdGhpcy5ibGVuZEZ1bmMuc2V0KGUuYmxlbmRGdW5jdGlvbiksdGhpcy5ibGVuZENvbG9yLnNldChlLmJsZW5kQ29sb3IpKSx0aGlzLmNvbG9yTWFzay5zZXQoZS5tYXNrKX07dmFyIFd0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCxyLG4pe3ZhciBpPXRoaXM7ZS5jYWxsKHRoaXMpLHRoaXMuaWQ9dCx0aGlzLmRpc3BhdGNoZXI9bix0aGlzLm9uKFwiZGF0YVwiLGZ1bmN0aW9uKHQpe1wic291cmNlXCI9PT10LmRhdGFUeXBlJiZcIm1ldGFkYXRhXCI9PT10LnNvdXJjZURhdGFUeXBlJiYoaS5fc291cmNlTG9hZGVkPSEwKSxpLl9zb3VyY2VMb2FkZWQmJiFpLl9wYXVzZWQmJlwic291cmNlXCI9PT10LmRhdGFUeXBlJiZcImNvbnRlbnRcIj09PXQuc291cmNlRGF0YVR5cGUmJihpLnJlbG9hZCgpLGkudHJhbnNmb3JtJiZpLnVwZGF0ZShpLnRyYW5zZm9ybSkpfSksdGhpcy5vbihcImVycm9yXCIsZnVuY3Rpb24oKXtpLl9zb3VyY2VFcnJvcmVkPSEwfSksdGhpcy5fc291cmNlPWl0KHQscixuLHRoaXMpLHRoaXMuX3RpbGVzPXt9LHRoaXMuX2NhY2hlPW5ldyBsdCgwLHRoaXMuX3VubG9hZFRpbGUuYmluZCh0aGlzKSksdGhpcy5fdGltZXJzPXt9LHRoaXMuX2NhY2hlVGltZXJzPXt9LHRoaXMuX21heFRpbGVDYWNoZVNpemU9bnVsbCx0aGlzLl9pc0lkUmVuZGVyYWJsZT10aGlzLl9pc0lkUmVuZGVyYWJsZS5iaW5kKHRoaXMpLHRoaXMuX2NvdmVyZWRUaWxlcz17fX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLl9tYXhUaWxlQ2FjaGVTaXplPXQ/dC5fbWF4VGlsZUNhY2hlU2l6ZTpudWxsLHRoaXMuX3NvdXJjZSYmdGhpcy5fc291cmNlLm9uQWRkJiZ0aGlzLl9zb3VyY2Uub25BZGQodCl9LHIucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKHQpe3RoaXMuX3NvdXJjZSYmdGhpcy5fc291cmNlLm9uUmVtb3ZlJiZ0aGlzLl9zb3VyY2Uub25SZW1vdmUodCl9LHIucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe2lmKHRoaXMuX3NvdXJjZUVycm9yZWQpcmV0dXJuITA7aWYoIXRoaXMuX3NvdXJjZUxvYWRlZClyZXR1cm4hMTtmb3IodmFyIHQgaW4gdGhpcy5fdGlsZXMpe3ZhciBlPXRoaXMuX3RpbGVzW3RdO2lmKFwibG9hZGVkXCIhPT1lLnN0YXRlJiZcImVycm9yZWRcIiE9PWUuc3RhdGUpcmV0dXJuITF9cmV0dXJuITB9LHIucHJvdG90eXBlLmdldFNvdXJjZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3VyY2V9LHIucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7dGhpcy5fcGF1c2VkPSEwfSxyLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXtpZih0aGlzLl9wYXVzZWQpe3ZhciB0PXRoaXMuX3Nob3VsZFJlbG9hZE9uUmVzdW1lO3RoaXMuX3BhdXNlZD0hMSx0aGlzLl9zaG91bGRSZWxvYWRPblJlc3VtZT0hMSx0JiZ0aGlzLnJlbG9hZCgpLHRoaXMudHJhbnNmb3JtJiZ0aGlzLnVwZGF0ZSh0aGlzLnRyYW5zZm9ybSl9fSxyLnByb3RvdHlwZS5fbG9hZFRpbGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fc291cmNlLmxvYWRUaWxlKHQsZSl9LHIucHJvdG90eXBlLl91bmxvYWRUaWxlPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX3NvdXJjZS51bmxvYWRUaWxlKXJldHVybiB0aGlzLl9zb3VyY2UudW5sb2FkVGlsZSh0LGZ1bmN0aW9uKCl7fSl9LHIucHJvdG90eXBlLl9hYm9ydFRpbGU9ZnVuY3Rpb24odCl7aWYodGhpcy5fc291cmNlLmFib3J0VGlsZSlyZXR1cm4gdGhpcy5fc291cmNlLmFib3J0VGlsZSh0LGZ1bmN0aW9uKCl7fSl9LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3VyY2Uuc2VyaWFsaXplKCl9LHIucHJvdG90eXBlLnByZXBhcmU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuX3NvdXJjZS5wcmVwYXJlJiZ0aGlzLl9zb3VyY2UucHJlcGFyZSgpLHRoaXMuX3RpbGVzKXRoaXMuX3RpbGVzW2VdLnVwbG9hZCh0KX0sci5wcm90b3R5cGUuZ2V0SWRzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fdGlsZXMpLm1hcChOdW1iZXIpLnNvcnQoZnVuY3Rpb24ocixuKXt2YXIgaT1lLl90aWxlc1tyXS50aWxlSUQsYT1lLl90aWxlc1tuXS50aWxlSUQsbz1uZXcgdC5kZWZhdWx0JDEoaS5jYW5vbmljYWwueCxpLmNhbm9uaWNhbC55KS5yb3RhdGUoZS50cmFuc2Zvcm0uYW5nbGUpLHM9bmV3IHQuZGVmYXVsdCQxKGEuY2Fub25pY2FsLngsYS5jYW5vbmljYWwueSkucm90YXRlKGUudHJhbnNmb3JtLmFuZ2xlKTtyZXR1cm4gaS5vdmVyc2NhbGVkWi1hLm92ZXJzY2FsZWRafHxzLnktby55fHxzLngtby54fSl9LHIucHJvdG90eXBlLmdldFJlbmRlcmFibGVJZHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRJZHMoKS5maWx0ZXIodGhpcy5faXNJZFJlbmRlcmFibGUpfSxyLnByb3RvdHlwZS5oYXNSZW5kZXJhYmxlUGFyZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZmluZExvYWRlZFBhcmVudCh0LDAse30pO3JldHVybiEhZSYmdGhpcy5faXNJZFJlbmRlcmFibGUoZS50aWxlSUQua2V5KX0sci5wcm90b3R5cGUuX2lzSWRSZW5kZXJhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl90aWxlc1t0XSYmdGhpcy5fdGlsZXNbdF0uaGFzRGF0YSgpJiYhdGhpcy5fY292ZXJlZFRpbGVzW3RdfSxyLnByb3RvdHlwZS5yZWxvYWQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9wYXVzZWQpdGhpcy5fc2hvdWxkUmVsb2FkT25SZXN1bWU9ITA7ZWxzZSBmb3IodmFyIHQgaW4gdGhpcy5fY2FjaGUucmVzZXQoKSx0aGlzLl90aWxlcyl0aGlzLl9yZWxvYWRUaWxlKHQsXCJyZWxvYWRpbmdcIil9LHIucHJvdG90eXBlLl9yZWxvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdGlsZXNbdF07ciYmKFwibG9hZGluZ1wiIT09ci5zdGF0ZSYmKHIuc3RhdGU9ZSksdGhpcy5fbG9hZFRpbGUocix0aGlzLl90aWxlTG9hZGVkLmJpbmQodGhpcyxyLHQsZSkpKX0sci5wcm90b3R5cGUuX3RpbGVMb2FkZWQ9ZnVuY3Rpb24oZSxyLG4saSl7aWYoaSlyZXR1cm4gZS5zdGF0ZT1cImVycm9yZWRcIix2b2lkKDQwNCE9PWkuc3RhdHVzP3RoaXMuX3NvdXJjZS5maXJlKG5ldyB0LkVycm9yRXZlbnQoaSx7dGlsZTplfSkpOnRoaXMudXBkYXRlKHRoaXMudHJhbnNmb3JtKSk7ZS50aW1lQWRkZWQ9YS5ub3coKSxcImV4cGlyZWRcIj09PW4mJihlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uPSEwKSx0aGlzLl9zZXRUaWxlUmVsb2FkVGltZXIocixlKSxcInJhc3Rlci1kZW1cIj09PXRoaXMuZ2V0U291cmNlKCkudHlwZSYmZS5kZW0mJnRoaXMuX2JhY2tmaWxsREVNKGUpLHRoaXMuX3NvdXJjZS5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YVwiLHtkYXRhVHlwZTpcInNvdXJjZVwiLHRpbGU6ZSxjb29yZDplLnRpbGVJRH0pKSx0aGlzLm1hcCYmKHRoaXMubWFwLnBhaW50ZXIudGlsZUV4dGVudFZBTy52YW89bnVsbCl9LHIucHJvdG90eXBlLl9iYWNrZmlsbERFTT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5nZXRSZW5kZXJhYmxlSWRzKCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO2lmKHQubmVpZ2hib3JpbmdUaWxlcyYmdC5uZWlnaGJvcmluZ1RpbGVzW25dKXt2YXIgaT10aGlzLmdldFRpbGVCeUlEKG4pO2EodCxpKSxhKGksdCl9fWZ1bmN0aW9uIGEodCxlKXt0Lm5lZWRzSGlsbHNoYWRlUHJlcGFyZT0hMDt2YXIgcj1lLnRpbGVJRC5jYW5vbmljYWwueC10LnRpbGVJRC5jYW5vbmljYWwueCxuPWUudGlsZUlELmNhbm9uaWNhbC55LXQudGlsZUlELmNhbm9uaWNhbC55LGk9TWF0aC5wb3coMix0LnRpbGVJRC5jYW5vbmljYWwueiksYT1lLnRpbGVJRC5rZXk7MD09PXImJjA9PT1ufHxNYXRoLmFicyhuKT4xfHwoTWF0aC5hYnMocik+MSYmKDE9PT1NYXRoLmFicyhyK2kpP3IrPWk6MT09PU1hdGguYWJzKHItaSkmJihyLT1pKSksZS5kZW0mJnQuZGVtJiYodC5kZW0uYmFja2ZpbGxCb3JkZXIoZS5kZW0scixuKSx0Lm5laWdoYm9yaW5nVGlsZXMmJnQubmVpZ2hib3JpbmdUaWxlc1thXSYmKHQubmVpZ2hib3JpbmdUaWxlc1thXS5iYWNrZmlsbGVkPSEwKSkpfX0sci5wcm90b3R5cGUuZ2V0VGlsZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXRUaWxlQnlJRCh0LmtleSl9LHIucHJvdG90eXBlLmdldFRpbGVCeUlEPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl90aWxlc1t0XX0sci5wcm90b3R5cGUuZ2V0Wm9vbT1mdW5jdGlvbih0KXtyZXR1cm4gdC56b29tK3Quc2NhbGVab29tKHQudGlsZVNpemUvdGhpcy5fc291cmNlLnRpbGVTaXplKX0sci5wcm90b3R5cGUuX2ZpbmRMb2FkZWRDaGlsZHJlbj1mdW5jdGlvbih0LGUscil7dmFyIG49ITE7Zm9yKHZhciBpIGluIHRoaXMuX3RpbGVzKXt2YXIgYT10aGlzLl90aWxlc1tpXTtpZighKHJbaV18fCFhLmhhc0RhdGEoKXx8YS50aWxlSUQub3ZlcnNjYWxlZFo8PXQub3ZlcnNjYWxlZFp8fGEudGlsZUlELm92ZXJzY2FsZWRaPmUpKXt2YXIgbz1NYXRoLnBvdygyLGEudGlsZUlELmNhbm9uaWNhbC56LXQuY2Fub25pY2FsLnopO2lmKE1hdGguZmxvb3IoYS50aWxlSUQuY2Fub25pY2FsLngvbyk9PT10LmNhbm9uaWNhbC54JiZNYXRoLmZsb29yKGEudGlsZUlELmNhbm9uaWNhbC55L28pPT09dC5jYW5vbmljYWwueSlmb3IocltpXT1hLnRpbGVJRCxuPSEwO2EmJmEudGlsZUlELm92ZXJzY2FsZWRaLTE+dC5vdmVyc2NhbGVkWjspe3ZhciBzPWEudGlsZUlELnNjYWxlZFRvKGEudGlsZUlELm92ZXJzY2FsZWRaLTEpO2lmKCFzKWJyZWFrOyhhPXRoaXMuX3RpbGVzW3Mua2V5XSkmJmEuaGFzRGF0YSgpJiYoZGVsZXRlIHJbaV0scltzLmtleV09cyl9fX1yZXR1cm4gbn0sci5wcm90b3R5cGUuZmluZExvYWRlZFBhcmVudD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQub3ZlcnNjYWxlZFotMTtuPj1lO24tLSl7dmFyIGk9dC5zY2FsZWRUbyhuKTtpZighaSlyZXR1cm47dmFyIGE9U3RyaW5nKGkua2V5KSxvPXRoaXMuX3RpbGVzW2FdO2lmKG8mJm8uaGFzRGF0YSgpKXJldHVybiByW2FdPWksbztpZih0aGlzLl9jYWNoZS5oYXMoaSkpcmV0dXJuIHJbYV09aSx0aGlzLl9jYWNoZS5nZXQoaSl9fSxyLnByb3RvdHlwZS51cGRhdGVDYWNoZVNpemU9ZnVuY3Rpb24odCl7dmFyIGU9KE1hdGguY2VpbCh0LndpZHRoL3RoaXMuX3NvdXJjZS50aWxlU2l6ZSkrMSkqKE1hdGguY2VpbCh0LmhlaWdodC90aGlzLl9zb3VyY2UudGlsZVNpemUpKzEpLHI9TWF0aC5mbG9vcig1KmUpLG49XCJudW1iZXJcIj09dHlwZW9mIHRoaXMuX21heFRpbGVDYWNoZVNpemU/TWF0aC5taW4odGhpcy5fbWF4VGlsZUNhY2hlU2l6ZSxyKTpyO3RoaXMuX2NhY2hlLnNldE1heFNpemUobil9LHIucHJvdG90eXBlLmhhbmRsZVdyYXBKdW1wPWZ1bmN0aW9uKHQpe3ZhciBlPSh0LSh2b2lkIDA9PT10aGlzLl9wcmV2TG5nP3Q6dGhpcy5fcHJldkxuZykpLzM2MCxyPU1hdGgucm91bmQoZSk7aWYodGhpcy5fcHJldkxuZz10LHIpe3ZhciBuPXt9O2Zvcih2YXIgaSBpbiB0aGlzLl90aWxlcyl7dmFyIGE9dGhpcy5fdGlsZXNbaV07YS50aWxlSUQ9YS50aWxlSUQudW53cmFwVG8oYS50aWxlSUQud3JhcCtyKSxuW2EudGlsZUlELmtleV09YX1mb3IodmFyIG8gaW4gdGhpcy5fdGlsZXM9bix0aGlzLl90aW1lcnMpY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyc1tvXSksZGVsZXRlIHRoaXMuX3RpbWVyc1tvXTtmb3IodmFyIHMgaW4gdGhpcy5fdGlsZXMpe3ZhciBsPXRoaXMuX3RpbGVzW3NdO3RoaXMuX3NldFRpbGVSZWxvYWRUaW1lcihzLGwpfX19LHIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlKXt2YXIgbj10aGlzO2lmKHRoaXMudHJhbnNmb3JtPWUsdGhpcy5fc291cmNlTG9hZGVkJiYhdGhpcy5fcGF1c2VkKXt2YXIgaTt0aGlzLnVwZGF0ZUNhY2hlU2l6ZShlKSx0aGlzLmhhbmRsZVdyYXBKdW1wKHRoaXMudHJhbnNmb3JtLmNlbnRlci5sbmcpLHRoaXMuX2NvdmVyZWRUaWxlcz17fSx0aGlzLnVzZWQ/dGhpcy5fc291cmNlLnRpbGVJRD9pPWUuZ2V0VmlzaWJsZVVud3JhcHBlZENvb3JkaW5hdGVzKHRoaXMuX3NvdXJjZS50aWxlSUQpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLmNhbm9uaWNhbC56LGUud3JhcCxlLmNhbm9uaWNhbC56LGUuY2Fub25pY2FsLngsZS5jYW5vbmljYWwueSl9KTooaT1lLmNvdmVyaW5nVGlsZXMoe3RpbGVTaXplOnRoaXMuX3NvdXJjZS50aWxlU2l6ZSxtaW56b29tOnRoaXMuX3NvdXJjZS5taW56b29tLG1heHpvb206dGhpcy5fc291cmNlLm1heHpvb20scm91bmRab29tOnRoaXMuX3NvdXJjZS5yb3VuZFpvb20scmVwYXJzZU92ZXJzY2FsZWQ6dGhpcy5fc291cmNlLnJlcGFyc2VPdmVyc2NhbGVkfSksdGhpcy5fc291cmNlLmhhc1RpbGUmJihpPWkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9zb3VyY2UuaGFzVGlsZSh0KX0pKSk6aT1bXTt2YXIgbyxzPSh0aGlzLl9zb3VyY2Uucm91bmRab29tP01hdGgucm91bmQ6TWF0aC5mbG9vcikodGhpcy5nZXRab29tKGUpKSxsPU1hdGgubWF4KHMtci5tYXhPdmVyem9vbWluZyx0aGlzLl9zb3VyY2UubWluem9vbSksYz1NYXRoLm1heChzK3IubWF4VW5kZXJ6b29taW5nLHRoaXMuX3NvdXJjZS5taW56b29tKSx1PXRoaXMuX3VwZGF0ZVJldGFpbmVkVGlsZXMoaSxzKSxoPXt9O2lmKFp0KHRoaXMuX3NvdXJjZS50eXBlKSlmb3IodmFyIGY9T2JqZWN0LmtleXModSkscD0wO3A8Zi5sZW5ndGg7cCsrKXt2YXIgZD1mW3BdLGc9dVtkXSx2PW4uX3RpbGVzW2RdO2lmKHYmJih2b2lkIDA9PT12LmZhZGVFbmRUaW1lfHx2LmZhZGVFbmRUaW1lPj1hLm5vdygpKSl7bi5fZmluZExvYWRlZENoaWxkcmVuKGcsYyx1KSYmKHVbZF09Zyk7dmFyIG09bi5maW5kTG9hZGVkUGFyZW50KGcsbCxoKTttJiZuLl9hZGRUaWxlKG0udGlsZUlEKX19Zm9yKG8gaW4gaCl1W29dfHwobi5fY292ZXJlZFRpbGVzW29dPSEwKTtmb3IobyBpbiBoKXVbb109aFtvXTtmb3IodmFyIHk9dC5rZXlzRGlmZmVyZW5jZSh0aGlzLl90aWxlcyx1KSx4PTA7eDx5Lmxlbmd0aDt4Kyspbi5fcmVtb3ZlVGlsZSh5W3hdKX19LHIucHJvdG90eXBlLl91cGRhdGVSZXRhaW5lZFRpbGVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXt9LGk9e30sYT1NYXRoLm1heChlLXIubWF4T3Zlcnpvb21pbmcsdGhpcy5fc291cmNlLm1pbnpvb20pLG89TWF0aC5tYXgoZStyLm1heFVuZGVyem9vbWluZyx0aGlzLl9zb3VyY2UubWluem9vbSkscz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbD10W3NdLGM9dGhpcy5fYWRkVGlsZShsKSx1PSExO2lmKGMuaGFzRGF0YSgpKW5bbC5rZXldPWw7ZWxzZXt1PWMud2FzUmVxdWVzdGVkKCksbltsLmtleV09bDt2YXIgaD0hMDtpZihlKzE+dGhpcy5fc291cmNlLm1heHpvb20pe3ZhciBmPWwuY2hpbGRyZW4odGhpcy5fc291cmNlLm1heHpvb20pWzBdLHA9dGhpcy5nZXRUaWxlKGYpO3AmJnAuaGFzRGF0YSgpP25bZi5rZXldPWY6aD0hMX1lbHNle3RoaXMuX2ZpbmRMb2FkZWRDaGlsZHJlbihsLG8sbik7Zm9yKHZhciBkPWwuY2hpbGRyZW4odGhpcy5fc291cmNlLm1heHpvb20pLGc9MDtnPGQubGVuZ3RoO2crKylpZighbltkW2ddLmtleV0pe2g9ITE7YnJlYWt9fWlmKCFoKWZvcih2YXIgdj1sLm92ZXJzY2FsZWRaLTE7dj49YTstLXYpe3ZhciBtPWwuc2NhbGVkVG8odik7aWYoaVttLmtleV0pYnJlYWs7aWYoaVttLmtleV09ITAsIShjPXRoaXMuZ2V0VGlsZShtKSkmJnUmJihjPXRoaXMuX2FkZFRpbGUobSkpLGMmJihuW20ua2V5XT1tLHU9Yy53YXNSZXF1ZXN0ZWQoKSxjLmhhc0RhdGEoKSkpYnJlYWt9fX1yZXR1cm4gbn0sci5wcm90b3R5cGUuX2FkZFRpbGU9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fdGlsZXNbZS5rZXldO2lmKHIpcmV0dXJuIHI7KHI9dGhpcy5fY2FjaGUuZ2V0QW5kUmVtb3ZlKGUpKSYmKHRoaXMuX3NldFRpbGVSZWxvYWRUaW1lcihlLmtleSxyKSxyLnRpbGVJRD1lKTt2YXIgbj1Cb29sZWFuKHIpO3JldHVybiBufHwocj1uZXcgc3QoZSx0aGlzLl9zb3VyY2UudGlsZVNpemUqZS5vdmVyc2NhbGVGYWN0b3IoKSksdGhpcy5fbG9hZFRpbGUocix0aGlzLl90aWxlTG9hZGVkLmJpbmQodGhpcyxyLGUua2V5LHIuc3RhdGUpKSkscj8oci51c2VzKyssdGhpcy5fdGlsZXNbZS5rZXldPXIsbnx8dGhpcy5fc291cmNlLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhbG9hZGluZ1wiLHt0aWxlOnIsY29vcmQ6ci50aWxlSUQsZGF0YVR5cGU6XCJzb3VyY2VcIn0pKSxyKTpudWxsfSxyLnByb3RvdHlwZS5fc2V0VGlsZVJlbG9hZFRpbWVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpczt0IGluIHRoaXMuX3RpbWVycyYmKGNsZWFyVGltZW91dCh0aGlzLl90aW1lcnNbdF0pLGRlbGV0ZSB0aGlzLl90aW1lcnNbdF0pO3ZhciBuPWUuZ2V0RXhwaXJ5VGltZW91dCgpO24mJih0aGlzLl90aW1lcnNbdF09c2V0VGltZW91dChmdW5jdGlvbigpe3IuX3JlbG9hZFRpbGUodCxcImV4cGlyZWRcIiksZGVsZXRlIHIuX3RpbWVyc1t0XX0sbikpfSxyLnByb3RvdHlwZS5fcmVtb3ZlVGlsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aWxlc1t0XTtlJiYoZS51c2VzLS0sZGVsZXRlIHRoaXMuX3RpbGVzW3RdLHRoaXMuX3RpbWVyc1t0XSYmKGNsZWFyVGltZW91dCh0aGlzLl90aW1lcnNbdF0pLGRlbGV0ZSB0aGlzLl90aW1lcnNbdF0pLGUudXNlcz4wfHwoZS5oYXNEYXRhKCk/dGhpcy5fY2FjaGUuYWRkKGUudGlsZUlELGUsZS5nZXRFeHBpcnlUaW1lb3V0KCkpOihlLmFib3J0ZWQ9ITAsdGhpcy5fYWJvcnRUaWxlKGUpLHRoaXMuX3VubG9hZFRpbGUoZSkpKSl9LHIucHJvdG90eXBlLmNsZWFyVGlsZXM9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fc2hvdWxkUmVsb2FkT25SZXN1bWU9ITEsdGhpcy5fcGF1c2VkPSExLHRoaXMuX3RpbGVzKXRoaXMuX3JlbW92ZVRpbGUodCk7dGhpcy5fY2FjaGUucmVzZXQoKX0sci5wcm90b3R5cGUudGlsZXNJbj1mdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1bXSxpPXRoaXMuZ2V0SWRzKCksYT0xLzAsbz0xLzAscz0tMS8wLGw9LTEvMCxjPWVbMF0uem9vbSx1PTA7dTxlLmxlbmd0aDt1Kyspe3ZhciBoPWVbdV07YT1NYXRoLm1pbihhLGguY29sdW1uKSxvPU1hdGgubWluKG8saC5yb3cpLHM9TWF0aC5tYXgocyxoLmNvbHVtbiksbD1NYXRoLm1heChsLGgucm93KX1mb3IodmFyIGY9MDtmPGkubGVuZ3RoO2YrKyl7dmFyIHA9dGhpcy5fdGlsZXNbaVtmXV0sZD1wLnRpbGVJRCxnPU1hdGgucG93KDIsdGhpcy50cmFuc2Zvcm0uem9vbS1wLnRpbGVJRC5vdmVyc2NhbGVkWiksdj1yKnAucXVlcnlQYWRkaW5nKnQuZGVmYXVsdCQ4L3AudGlsZVNpemUvZyxtPVtYdChkLG5ldyB0LmRlZmF1bHQkMTcoYSxvLGMpKSxYdChkLG5ldyB0LmRlZmF1bHQkMTcocyxsLGMpKV07aWYobVswXS54LXY8dC5kZWZhdWx0JDgmJm1bMF0ueS12PHQuZGVmYXVsdCQ4JiZtWzFdLngrdj49MCYmbVsxXS55K3Y+PTApe2Zvcih2YXIgeT1bXSx4PTA7eDxlLmxlbmd0aDt4KyspeS5wdXNoKFh0KGQsZVt4XSkpO24ucHVzaCh7dGlsZTpwLHRpbGVJRDpkLHF1ZXJ5R2VvbWV0cnk6W3ldLHNjYWxlOmd9KX19cmV0dXJuIG59LHIucHJvdG90eXBlLmdldFZpc2libGVDb29yZGluYXRlcz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9dGhpcy5nZXRSZW5kZXJhYmxlSWRzKCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll90aWxlc1tlXS50aWxlSUR9KSxyPTAsbj1lO3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXTtpLnBvc01hdHJpeD10LnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgoaS50b1Vud3JhcHBlZCgpKX1yZXR1cm4gZX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe2lmKHRoaXMuX3NvdXJjZS5oYXNUcmFuc2l0aW9uKCkpcmV0dXJuITA7aWYoWnQodGhpcy5fc291cmNlLnR5cGUpKWZvcih2YXIgdCBpbiB0aGlzLl90aWxlcyl7dmFyIGU9dGhpcy5fdGlsZXNbdF07aWYodm9pZCAwIT09ZS5mYWRlRW5kVGltZSYmZS5mYWRlRW5kVGltZT49YS5ub3coKSlyZXR1cm4hMH1yZXR1cm4hMX0scn0odC5FdmVudGVkKTtmdW5jdGlvbiBYdChlLHIpe3ZhciBuPXIuem9vbVRvKGUuY2Fub25pY2FsLnopO3JldHVybiBuZXcgdC5kZWZhdWx0JDEoKG4uY29sdW1uLShlLmNhbm9uaWNhbC54K2Uud3JhcCpNYXRoLnBvdygyLGUuY2Fub25pY2FsLnopKSkqdC5kZWZhdWx0JDgsKG4ucm93LWUuY2Fub25pY2FsLnkpKnQuZGVmYXVsdCQ4KX1mdW5jdGlvbiBadCh0KXtyZXR1cm5cInJhc3RlclwiPT09dHx8XCJpbWFnZVwiPT09dHx8XCJ2aWRlb1wiPT09dH1mdW5jdGlvbiAkdCgpe3JldHVybiBuZXcgdC5kZWZhdWx0LldvcmtlcihFbi53b3JrZXJVcmwpfVd0Lm1heE92ZXJ6b29taW5nPTEwLFd0Lm1heFVuZGVyem9vbWluZz0zO3ZhciBKdCxLdD1mdW5jdGlvbigpe3RoaXMuYWN0aXZlPXt9fTtmdW5jdGlvbiBRdChlLHIpe3ZhciBuPXt9O2Zvcih2YXIgaSBpbiBlKVwicmVmXCIhPT1pJiYobltpXT1lW2ldKTtyZXR1cm4gdC5kZWZhdWx0JDE4LmZvckVhY2goZnVuY3Rpb24odCl7dCBpbiByJiYoblt0XT1yW3RdKX0pLG59ZnVuY3Rpb24gdGUodCl7dD10LnNsaWNlKCk7Zm9yKHZhciBlPU9iamVjdC5jcmVhdGUobnVsbCkscj0wO3I8dC5sZW5ndGg7cisrKWVbdFtyXS5pZF09dFtyXTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylcInJlZlwiaW4gdFtuXSYmKHRbbl09UXQodFtuXSxlW3Rbbl0ucmVmXSkpO3JldHVybiB0fUt0LnByb3RvdHlwZS5hY3F1aXJlPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLndvcmtlcnMpe3ZhciBlPUVuLndvcmtlckNvdW50O2Zvcih0aGlzLndvcmtlcnM9W107dGhpcy53b3JrZXJzLmxlbmd0aDxlOyl0aGlzLndvcmtlcnMucHVzaChuZXcgJHQpfXJldHVybiB0aGlzLmFjdGl2ZVt0XT0hMCx0aGlzLndvcmtlcnMuc2xpY2UoKX0sS3QucHJvdG90eXBlLnJlbGVhc2U9ZnVuY3Rpb24odCl7ZGVsZXRlIHRoaXMuYWN0aXZlW3RdLDA9PT1PYmplY3Qua2V5cyh0aGlzLmFjdGl2ZSkubGVuZ3RoJiYodGhpcy53b3JrZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dC50ZXJtaW5hdGUoKX0pLHRoaXMud29ya2Vycz1udWxsKX07dmFyIGVlPXtzZXRTdHlsZTpcInNldFN0eWxlXCIsYWRkTGF5ZXI6XCJhZGRMYXllclwiLHJlbW92ZUxheWVyOlwicmVtb3ZlTGF5ZXJcIixzZXRQYWludFByb3BlcnR5Olwic2V0UGFpbnRQcm9wZXJ0eVwiLHNldExheW91dFByb3BlcnR5Olwic2V0TGF5b3V0UHJvcGVydHlcIixzZXRGaWx0ZXI6XCJzZXRGaWx0ZXJcIixhZGRTb3VyY2U6XCJhZGRTb3VyY2VcIixyZW1vdmVTb3VyY2U6XCJyZW1vdmVTb3VyY2VcIixzZXRHZW9KU09OU291cmNlRGF0YTpcInNldEdlb0pTT05Tb3VyY2VEYXRhXCIsc2V0TGF5ZXJab29tUmFuZ2U6XCJzZXRMYXllclpvb21SYW5nZVwiLHNldExheWVyUHJvcGVydHk6XCJzZXRMYXllclByb3BlcnR5XCIsc2V0Q2VudGVyOlwic2V0Q2VudGVyXCIsc2V0Wm9vbTpcInNldFpvb21cIixzZXRCZWFyaW5nOlwic2V0QmVhcmluZ1wiLHNldFBpdGNoOlwic2V0UGl0Y2hcIixzZXRTcHJpdGU6XCJzZXRTcHJpdGVcIixzZXRHbHlwaHM6XCJzZXRHbHlwaHNcIixzZXRUcmFuc2l0aW9uOlwic2V0VHJhbnNpdGlvblwiLHNldExpZ2h0Olwic2V0TGlnaHRcIn07ZnVuY3Rpb24gcmUodCxlLHIpe3IucHVzaCh7Y29tbWFuZDplZS5hZGRTb3VyY2UsYXJnczpbdCxlW3RdXX0pfWZ1bmN0aW9uIG5lKHQsZSxyKXtlLnB1c2goe2NvbW1hbmQ6ZWUucmVtb3ZlU291cmNlLGFyZ3M6W3RdfSksclt0XT0hMH1mdW5jdGlvbiBpZSh0LGUscixuKXtuZSh0LHIsbikscmUodCxlLHIpfWZ1bmN0aW9uIGFlKGUscixuKXt2YXIgaTtmb3IoaSBpbiBlW25dKWlmKGVbbl0uaGFzT3duUHJvcGVydHkoaSkmJlwiZGF0YVwiIT09aSYmIXQuZGVmYXVsdCQxMChlW25dW2ldLHJbbl1baV0pKXJldHVybiExO2ZvcihpIGluIHJbbl0paWYocltuXS5oYXNPd25Qcm9wZXJ0eShpKSYmXCJkYXRhXCIhPT1pJiYhdC5kZWZhdWx0JDEwKGVbbl1baV0scltuXVtpXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gb2UoZSxyLG4saSxhLG8pe3ZhciBzO2ZvcihzIGluIHI9cnx8e30sZT1lfHx7fSllLmhhc093blByb3BlcnR5KHMpJiYodC5kZWZhdWx0JDEwKGVbc10scltzXSl8fG4ucHVzaCh7Y29tbWFuZDpvLGFyZ3M6W2kscyxyW3NdLGFdfSkpO2ZvcihzIGluIHIpci5oYXNPd25Qcm9wZXJ0eShzKSYmIWUuaGFzT3duUHJvcGVydHkocykmJih0LmRlZmF1bHQkMTAoZVtzXSxyW3NdKXx8bi5wdXNoKHtjb21tYW5kOm8sYXJnczpbaSxzLHJbc10sYV19KSl9ZnVuY3Rpb24gc2UodCl7cmV0dXJuIHQuaWR9ZnVuY3Rpb24gbGUodCxlKXtyZXR1cm4gdFtlLmlkXT1lLHR9dmFyIGNlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmJveENlbGxzPVtdLGk9dGhpcy5jaXJjbGVDZWxscz1bXTt0aGlzLnhDZWxsQ291bnQ9TWF0aC5jZWlsKHQvciksdGhpcy55Q2VsbENvdW50PU1hdGguY2VpbChlL3IpO2Zvcih2YXIgYT0wO2E8dGhpcy54Q2VsbENvdW50KnRoaXMueUNlbGxDb3VudDthKyspbi5wdXNoKFtdKSxpLnB1c2goW10pO3RoaXMuY2lyY2xlS2V5cz1bXSx0aGlzLmJveEtleXM9W10sdGhpcy5iYm94ZXM9W10sdGhpcy5jaXJjbGVzPVtdLHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMueFNjYWxlPXRoaXMueENlbGxDb3VudC90LHRoaXMueVNjYWxlPXRoaXMueUNlbGxDb3VudC9lLHRoaXMuYm94VWlkPTAsdGhpcy5jaXJjbGVVaWQ9MH07Y2UucHJvdG90eXBlLmtleXNMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ib3hLZXlzLmxlbmd0aCt0aGlzLmNpcmNsZUtleXMubGVuZ3RofSxjZS5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5fZm9yRWFjaENlbGwoZSxyLG4saSx0aGlzLl9pbnNlcnRCb3hDZWxsLHRoaXMuYm94VWlkKyspLHRoaXMuYm94S2V5cy5wdXNoKHQpLHRoaXMuYmJveGVzLnB1c2goZSksdGhpcy5iYm94ZXMucHVzaChyKSx0aGlzLmJib3hlcy5wdXNoKG4pLHRoaXMuYmJveGVzLnB1c2goaSl9LGNlLnByb3RvdHlwZS5pbnNlcnRDaXJjbGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5fZm9yRWFjaENlbGwoZS1uLHItbixlK24scituLHRoaXMuX2luc2VydENpcmNsZUNlbGwsdGhpcy5jaXJjbGVVaWQrKyksdGhpcy5jaXJjbGVLZXlzLnB1c2godCksdGhpcy5jaXJjbGVzLnB1c2goZSksdGhpcy5jaXJjbGVzLnB1c2gociksdGhpcy5jaXJjbGVzLnB1c2gobil9LGNlLnByb3RvdHlwZS5faW5zZXJ0Qm94Q2VsbD1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5ib3hDZWxsc1tpXS5wdXNoKGEpfSxjZS5wcm90b3R5cGUuX2luc2VydENpcmNsZUNlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuY2lyY2xlQ2VsbHNbaV0ucHVzaChhKX0sY2UucHJvdG90eXBlLl9xdWVyeT1mdW5jdGlvbih0LGUscixuLGkpe2lmKHI8MHx8dD50aGlzLndpZHRofHxuPDB8fGU+dGhpcy5oZWlnaHQpcmV0dXJuIWkmJltdO3ZhciBhPVtdO2lmKHQ8PTAmJmU8PTAmJnRoaXMud2lkdGg8PXImJnRoaXMuaGVpZ2h0PD1uKXtpZihpKXJldHVybiEwO2Zvcih2YXIgbz0wO288dGhpcy5ib3hLZXlzLmxlbmd0aDtvKyspYS5wdXNoKHtrZXk6dGhpcy5ib3hLZXlzW29dLHgxOnRoaXMuYmJveGVzWzQqb10seTE6dGhpcy5iYm94ZXNbNCpvKzFdLHgyOnRoaXMuYmJveGVzWzQqbysyXSx5Mjp0aGlzLmJib3hlc1s0Km8rM119KTtmb3IodmFyIHM9MDtzPHRoaXMuY2lyY2xlS2V5cy5sZW5ndGg7cysrKXt2YXIgbD10aGlzLmNpcmNsZXNbMypzXSxjPXRoaXMuY2lyY2xlc1szKnMrMV0sdT10aGlzLmNpcmNsZXNbMypzKzJdO2EucHVzaCh7a2V5OnRoaXMuY2lyY2xlS2V5c1tzXSx4MTpsLXUseTE6Yy11LHgyOmwrdSx5MjpjK3V9KX19ZWxzZXt2YXIgaD17aGl0VGVzdDppLHNlZW5VaWRzOntib3g6e30sY2lyY2xlOnt9fX07dGhpcy5fZm9yRWFjaENlbGwodCxlLHIsbix0aGlzLl9xdWVyeUNlbGwsYSxoKX1yZXR1cm4gaT9hLmxlbmd0aD4wOmF9LGNlLnByb3RvdHlwZS5fcXVlcnlDaXJjbGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC1yLGE9dCtyLG89ZS1yLHM9ZStyO2lmKGE8MHx8aT50aGlzLndpZHRofHxzPDB8fG8+dGhpcy5oZWlnaHQpcmV0dXJuIW4mJltdO3ZhciBsPVtdLGM9e2hpdFRlc3Q6bixjaXJjbGU6e3g6dCx5OmUscmFkaXVzOnJ9LHNlZW5VaWRzOntib3g6e30sY2lyY2xlOnt9fX07cmV0dXJuIHRoaXMuX2ZvckVhY2hDZWxsKGksbyxhLHMsdGhpcy5fcXVlcnlDZWxsQ2lyY2xlLGwsYyksbj9sLmxlbmd0aD4wOmx9LGNlLnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdGhpcy5fcXVlcnkodCxlLHIsbiwhMSl9LGNlLnByb3RvdHlwZS5oaXRUZXN0PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLl9xdWVyeSh0LGUscixuLCEwKX0sY2UucHJvdG90eXBlLmhpdFRlc3RDaXJjbGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9xdWVyeUNpcmNsZSh0LGUsciwhMCl9LGNlLnByb3RvdHlwZS5fcXVlcnlDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPW8uc2VlblVpZHMsbD10aGlzLmJveENlbGxzW2ldO2lmKG51bGwhPT1sKWZvcih2YXIgYz10aGlzLmJib3hlcyx1PTAsaD1sO3U8aC5sZW5ndGg7dSs9MSl7dmFyIGY9aFt1XTtpZighcy5ib3hbZl0pe3MuYm94W2ZdPSEwO3ZhciBwPTQqZjtpZih0PD1jW3ArMl0mJmU8PWNbcCszXSYmcj49Y1twKzBdJiZuPj1jW3ArMV0pe2lmKG8uaGl0VGVzdClyZXR1cm4gYS5wdXNoKCEwKSwhMDthLnB1c2goe2tleTp0aGlzLmJveEtleXNbZl0seDE6Y1twXSx5MTpjW3ArMV0seDI6Y1twKzJdLHkyOmNbcCszXX0pfX19dmFyIGQ9dGhpcy5jaXJjbGVDZWxsc1tpXTtpZihudWxsIT09ZClmb3IodmFyIGc9dGhpcy5jaXJjbGVzLHY9MCxtPWQ7djxtLmxlbmd0aDt2Kz0xKXt2YXIgeT1tW3ZdO2lmKCFzLmNpcmNsZVt5XSl7cy5jaXJjbGVbeV09ITA7dmFyIHg9Myp5O2lmKHRoaXMuX2NpcmNsZUFuZFJlY3RDb2xsaWRlKGdbeF0sZ1t4KzFdLGdbeCsyXSx0LGUscixuKSl7aWYoby5oaXRUZXN0KXJldHVybiBhLnB1c2goITApLCEwO3ZhciBiPWdbeF0sXz1nW3grMV0sdz1nW3grMl07YS5wdXNoKHtrZXk6dGhpcy5jaXJjbGVLZXlzW3ldLHgxOmItdyx5MTpfLXcseDI6Yit3LHkyOl8rd30pfX19fSxjZS5wcm90b3R5cGUuX3F1ZXJ5Q2VsbENpcmNsZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz1vLmNpcmNsZSxsPW8uc2VlblVpZHMsYz10aGlzLmJveENlbGxzW2ldO2lmKG51bGwhPT1jKWZvcih2YXIgdT10aGlzLmJib3hlcyxoPTAsZj1jO2g8Zi5sZW5ndGg7aCs9MSl7dmFyIHA9ZltoXTtpZighbC5ib3hbcF0pe2wuYm94W3BdPSEwO3ZhciBkPTQqcDtpZih0aGlzLl9jaXJjbGVBbmRSZWN0Q29sbGlkZShzLngscy55LHMucmFkaXVzLHVbZCswXSx1W2QrMV0sdVtkKzJdLHVbZCszXSkpcmV0dXJuIGEucHVzaCghMCksITB9fXZhciBnPXRoaXMuY2lyY2xlQ2VsbHNbaV07aWYobnVsbCE9PWcpZm9yKHZhciB2PXRoaXMuY2lyY2xlcyxtPTAseT1nO208eS5sZW5ndGg7bSs9MSl7dmFyIHg9eVttXTtpZighbC5jaXJjbGVbeF0pe2wuY2lyY2xlW3hdPSEwO3ZhciBiPTMqeDtpZih0aGlzLl9jaXJjbGVzQ29sbGlkZSh2W2JdLHZbYisxXSx2W2IrMl0scy54LHMueSxzLnJhZGl1cykpcmV0dXJuIGEucHVzaCghMCksITB9fX0sY2UucHJvdG90eXBlLl9mb3JFYWNoQ2VsbD1mdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9dGhpcy5fY29udmVydFRvWENlbGxDb29yZCh0KSxsPXRoaXMuX2NvbnZlcnRUb1lDZWxsQ29vcmQoZSksYz10aGlzLl9jb252ZXJ0VG9YQ2VsbENvb3JkKHIpLHU9dGhpcy5fY29udmVydFRvWUNlbGxDb29yZChuKSxoPXM7aDw9YztoKyspZm9yKHZhciBmPWw7Zjw9dTtmKyspe3ZhciBwPXRoaXMueENlbGxDb3VudCpmK2g7aWYoaS5jYWxsKHRoaXMsdCxlLHIsbixwLGEsbykpcmV0dXJufX0sY2UucHJvdG90eXBlLl9jb252ZXJ0VG9YQ2VsbENvb3JkPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKHRoaXMueENlbGxDb3VudC0xLE1hdGguZmxvb3IodCp0aGlzLnhTY2FsZSkpKX0sY2UucHJvdG90eXBlLl9jb252ZXJ0VG9ZQ2VsbENvb3JkPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKHRoaXMueUNlbGxDb3VudC0xLE1hdGguZmxvb3IodCp0aGlzLnlTY2FsZSkpKX0sY2UucHJvdG90eXBlLl9jaXJjbGVzQ29sbGlkZT1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89bi10LHM9aS1lLGw9cithO3JldHVybiBsKmw+bypvK3Mqc30sY2UucHJvdG90eXBlLl9jaXJjbGVBbmRSZWN0Q29sbGlkZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz0oYS1uKS8yLGw9TWF0aC5hYnModC0obitzKSk7aWYobD5zK3IpcmV0dXJuITE7dmFyIGM9KG8taSkvMix1PU1hdGguYWJzKGUtKGkrYykpO2lmKHU+YytyKXJldHVybiExO2lmKGw8PXN8fHU8PWMpcmV0dXJuITA7dmFyIGg9bC1zLGY9dS1jO3JldHVybiBoKmgrZipmPD1yKnJ9O3ZhciB1ZT10LmRlZmF1bHQkMTkubGF5b3V0O2Z1bmN0aW9uIGhlKGUscixuLGksYSl7dmFyIG89dC5tYXQ0LmlkZW50aXR5KG5ldyBGbG9hdDMyQXJyYXkoMTYpKTtyZXR1cm4gcj8odC5tYXQ0LmlkZW50aXR5KG8pLHQubWF0NC5zY2FsZShvLG8sWzEvYSwxL2EsMV0pLG58fHQubWF0NC5yb3RhdGVaKG8sbyxpLmFuZ2xlKSk6KHQubWF0NC5zY2FsZShvLG8sW2kud2lkdGgvMiwtaS5oZWlnaHQvMiwxXSksdC5tYXQ0LnRyYW5zbGF0ZShvLG8sWzEsLTEsMF0pLHQubWF0NC5tdWx0aXBseShvLG8sZSkpLG99ZnVuY3Rpb24gZmUoZSxyLG4saSxhKXt2YXIgbz10Lm1hdDQuaWRlbnRpdHkobmV3IEZsb2F0MzJBcnJheSgxNikpO3JldHVybiByPyh0Lm1hdDQubXVsdGlwbHkobyxvLGUpLHQubWF0NC5zY2FsZShvLG8sW2EsYSwxXSksbnx8dC5tYXQ0LnJvdGF0ZVoobyxvLC1pLmFuZ2xlKSk6KHQubWF0NC5zY2FsZShvLG8sWzEsLTEsMV0pLHQubWF0NC50cmFuc2xhdGUobyxvLFstMSwtMSwwXSksdC5tYXQ0LnNjYWxlKG8sbyxbMi9pLndpZHRoLDIvaS5oZWlnaHQsMV0pKSxvfWZ1bmN0aW9uIHBlKGUscil7dmFyIG49W2UueCxlLnksMCwxXTtrZShuLG4scik7dmFyIGk9blszXTtyZXR1cm57cG9pbnQ6bmV3IHQuZGVmYXVsdCQxKG5bMF0vaSxuWzFdL2kpLHNpZ25lZERpc3RhbmNlRnJvbUNhbWVyYTppfX1mdW5jdGlvbiBkZSh0LGUpe3ZhciByPXRbMF0vdFszXSxuPXRbMV0vdFszXTtyZXR1cm4gcj49LWVbMF0mJnI8PWVbMF0mJm4+PS1lWzFdJiZuPD1lWzFdfWZ1bmN0aW9uIGdlKGUscixuLGksYSxvLHMsbCl7dmFyIGM9aT9lLnRleHRTaXplRGF0YTplLmljb25TaXplRGF0YSx1PXQuZXZhbHVhdGVTaXplRm9yWm9vbShjLG4udHJhbnNmb3JtLnpvb20sdWUucHJvcGVydGllc1tpP1widGV4dC1zaXplXCI6XCJpY29uLXNpemVcIl0pLGg9WzI1Ni9uLndpZHRoKjIrMSwyNTYvbi5oZWlnaHQqMisxXSxmPWk/ZS50ZXh0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheTplLmljb24uZHluYW1pY0xheW91dFZlcnRleEFycmF5O2YuY2xlYXIoKTtmb3IodmFyIHA9ZS5saW5lVmVydGV4QXJyYXksZD1pP2UudGV4dC5wbGFjZWRTeW1ib2xBcnJheTplLmljb24ucGxhY2VkU3ltYm9sQXJyYXksZz1uLnRyYW5zZm9ybS53aWR0aC9uLnRyYW5zZm9ybS5oZWlnaHQsdj0hMSxtPTA7bTxkLmxlbmd0aDttKyspe3ZhciB5PWQuZ2V0KG0pO2lmKHkuaGlkZGVufHx5LndyaXRpbmdNb2RlPT09dC5Xcml0aW5nTW9kZS52ZXJ0aWNhbCYmIXYpd2UoeS5udW1HbHlwaHMsZik7ZWxzZXt2PSExO3ZhciB4PVt5LmFuY2hvclgseS5hbmNob3JZLDAsMV07aWYodC52ZWM0LnRyYW5zZm9ybU1hdDQoeCx4LHIpLGRlKHgsaCkpe3ZhciBiPS41K3hbM10vbi50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSouNSxfPXQuZXZhbHVhdGVTaXplRm9yRmVhdHVyZShjLHUseSksdz1zP18qYjpfL2Isaz1uZXcgdC5kZWZhdWx0JDEoeS5hbmNob3JYLHkuYW5jaG9yWSksQT1wZShrLGEpLnBvaW50LFQ9e30sTT15ZSh5LHcsITEsbCxyLGEsbyxlLmdseXBoT2Zmc2V0QXJyYXkscCxmLEEsayxULGcpO3Y9TS51c2VWZXJ0aWNhbCwoTS5ub3RFbm91Z2hSb29tfHx2fHxNLm5lZWRzRmxpcHBpbmcmJnllKHksdywhMCxsLHIsYSxvLGUuZ2x5cGhPZmZzZXRBcnJheSxwLGYsQSxrLFQsZykubm90RW5vdWdoUm9vbSkmJndlKHkubnVtR2x5cGhzLGYpfWVsc2Ugd2UoeS5udW1HbHlwaHMsZil9fWk/ZS50ZXh0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShmKTplLmljb24uZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGYpfWZ1bmN0aW9uIHZlKHQsZSxyLG4saSxhLG8scyxsLGMsdSxoKXt2YXIgZj1zLmdseXBoU3RhcnRJbmRleCtzLm51bUdseXBocyxwPXMubGluZVN0YXJ0SW5kZXgsZD1zLmxpbmVTdGFydEluZGV4K3MubGluZUxlbmd0aCxnPWUuZ2V0b2Zmc2V0WChzLmdseXBoU3RhcnRJbmRleCksdj1lLmdldG9mZnNldFgoZi0xKSxtPWJlKHQqZyxyLG4saSxhLG8scy5zZWdtZW50LHAsZCxsLGMsdSxoKTtpZighbSlyZXR1cm4gbnVsbDt2YXIgeT1iZSh0KnYscixuLGksYSxvLHMuc2VnbWVudCxwLGQsbCxjLHUsaCk7cmV0dXJuIHk/e2ZpcnN0Om0sbGFzdDp5fTpudWxsfWZ1bmN0aW9uIG1lKGUscixuLGkpe3JldHVybiBlPT09dC5Xcml0aW5nTW9kZS5ob3Jpem9udGFsJiZNYXRoLmFicyhuLnktci55KT5NYXRoLmFicyhuLngtci54KSppP3t1c2VWZXJ0aWNhbDohMH06KGU9PT10LldyaXRpbmdNb2RlLnZlcnRpY2FsP3IueTxuLnk6ci54Pm4ueCk/e25lZWRzRmxpcHBpbmc6ITB9Om51bGx9ZnVuY3Rpb24geWUoZSxyLG4saSxhLG8scyxsLGMsdSxoLGYscCxkKXt2YXIgZyx2PXIvMjQsbT1lLmxpbmVPZmZzZXRYKnIseT1lLmxpbmVPZmZzZXRZKnI7aWYoZS5udW1HbHlwaHM+MSl7dmFyIHg9ZS5nbHlwaFN0YXJ0SW5kZXgrZS5udW1HbHlwaHMsYj1lLmxpbmVTdGFydEluZGV4LF89ZS5saW5lU3RhcnRJbmRleCtlLmxpbmVMZW5ndGgsdz12ZSh2LGwsbSx5LG4saCxmLGUsYyxvLHAsITEpO2lmKCF3KXJldHVybntub3RFbm91Z2hSb29tOiEwfTt2YXIgaz1wZSh3LmZpcnN0LnBvaW50LHMpLnBvaW50LEE9cGUody5sYXN0LnBvaW50LHMpLnBvaW50O2lmKGkmJiFuKXt2YXIgVD1tZShlLndyaXRpbmdNb2RlLGssQSxkKTtpZihUKXJldHVybiBUfWc9W3cuZmlyc3RdO2Zvcih2YXIgTT1lLmdseXBoU3RhcnRJbmRleCsxO008eC0xO00rKylnLnB1c2goYmUodipsLmdldG9mZnNldFgoTSksbSx5LG4saCxmLGUuc2VnbWVudCxiLF8sYyxvLHAsITEpKTtnLnB1c2gody5sYXN0KX1lbHNle2lmKGkmJiFuKXt2YXIgUz1wZShmLGEpLnBvaW50LEU9ZS5saW5lU3RhcnRJbmRleCtlLnNlZ21lbnQrMSxDPW5ldyB0LmRlZmF1bHQkMShjLmdldHgoRSksYy5nZXR5KEUpKSxMPXBlKEMsYSksej1MLnNpZ25lZERpc3RhbmNlRnJvbUNhbWVyYT4wP0wucG9pbnQ6eGUoZixDLFMsMSxhKSxPPW1lKGUud3JpdGluZ01vZGUsUyx6LGQpO2lmKE8pcmV0dXJuIE99dmFyIEk9YmUodipsLmdldG9mZnNldFgoZS5nbHlwaFN0YXJ0SW5kZXgpLG0seSxuLGgsZixlLnNlZ21lbnQsZS5saW5lU3RhcnRJbmRleCxlLmxpbmVTdGFydEluZGV4K2UubGluZUxlbmd0aCxjLG8scCwhMSk7aWYoIUkpcmV0dXJue25vdEVub3VnaFJvb206ITB9O2c9W0ldfWZvcih2YXIgRD0wLFA9ZztEPFAubGVuZ3RoO0QrPTEpe3ZhciBSPVBbRF07dC5hZGREeW5hbWljQXR0cmlidXRlcyh1LFIucG9pbnQsUi5hbmdsZSl9cmV0dXJue319ZnVuY3Rpb24geGUodCxlLHIsbixpKXt2YXIgYT1wZSh0LmFkZCh0LnN1YihlKS5fdW5pdCgpKSxpKS5wb2ludCxvPXIuc3ViKGEpO3JldHVybiByLmFkZChvLl9tdWx0KG4vby5tYWcoKSkpfWZ1bmN0aW9uIGJlKGUscixuLGksYSxvLHMsbCxjLHUsaCxmLHApe3ZhciBkPWk/ZS1yOmUrcixnPWQ+MD8xOi0xLHY9MDtpJiYoZyo9LTEsdj1NYXRoLlBJKSxnPDAmJih2Kz1NYXRoLlBJKTtmb3IodmFyIG09Zz4wP2wrczpsK3MrMSx5PW0seD1hLGI9YSxfPTAsdz0wLGs9TWF0aC5hYnMoZCk7Xyt3PD1rOyl7aWYoKG0rPWcpPGx8fG0+PWMpcmV0dXJuIG51bGw7aWYoYj14LHZvaWQgMD09PSh4PWZbbV0pKXt2YXIgQT1uZXcgdC5kZWZhdWx0JDEodS5nZXR4KG0pLHUuZ2V0eShtKSksVD1wZShBLGgpO2lmKFQuc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhPjApeD1mW21dPVQucG9pbnQ7ZWxzZXt2YXIgTT1tLWc7eD14ZSgwPT09Xz9vOm5ldyB0LmRlZmF1bHQkMSh1LmdldHgoTSksdS5nZXR5KE0pKSxBLGIsay1fKzEsaCl9fV8rPXcsdz1iLmRpc3QoeCl9dmFyIFM9KGstXykvdyxFPXguc3ViKGIpLEM9RS5tdWx0KFMpLl9hZGQoYik7cmV0dXJuIEMuX2FkZChFLl91bml0KCkuX3BlcnAoKS5fbXVsdChuKmcpKSx7cG9pbnQ6QyxhbmdsZTp2K01hdGguYXRhbjIoeC55LWIueSx4LngtYi54KSx0aWxlRGlzdGFuY2U6cD97cHJldlRpbGVEaXN0YW5jZTptLWc9PT15PzA6dS5nZXR0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcihtLWcpLGxhc3RTZWdtZW50Vmlld3BvcnREaXN0YW5jZTprLV99Om51bGx9fXZhciBfZT1uZXcgRmxvYXQzMkFycmF5KFstMS8wLC0xLzAsMCwtMS8wLC0xLzAsMCwtMS8wLC0xLzAsMCwtMS8wLC0xLzAsMF0pO2Z1bmN0aW9uIHdlKHQsZSl7Zm9yKHZhciByPTA7cjx0O3IrKyl7dmFyIG49ZS5sZW5ndGg7ZS5yZXNpemUobis0KSxlLmZsb2F0MzIuc2V0KF9lLDMqbil9fWZ1bmN0aW9uIGtlKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXTtyZXR1cm4gdFswXT1yWzBdKm4rcls0XSppK3JbMTJdLHRbMV09clsxXSpuK3JbNV0qaStyWzEzXSx0WzNdPXJbM10qbityWzddKmkrclsxNV0sdH10LmRlZmF1bHQkMjAubWF0NDt2YXIgQWU9ZnVuY3Rpb24odCxlLHIpe3ZvaWQgMD09PWUmJihlPW5ldyBjZSh0LndpZHRoKzIwMCx0LmhlaWdodCsyMDAsMjUpKSx2b2lkIDA9PT1yJiYocj1uZXcgY2UodC53aWR0aCsyMDAsdC5oZWlnaHQrMjAwLDI1KSksdGhpcy50cmFuc2Zvcm09dCx0aGlzLmdyaWQ9ZSx0aGlzLmlnbm9yZWRHcmlkPXIsdGhpcy5waXRjaGZhY3Rvcj1NYXRoLmNvcyh0Ll9waXRjaCkqdC5jYW1lcmFUb0NlbnRlckRpc3RhbmNlLHRoaXMuc2NyZWVuUmlnaHRCb3VuZGFyeT10LndpZHRoKzEwMCx0aGlzLnNjcmVlbkJvdHRvbUJvdW5kYXJ5PXQuaGVpZ2h0KzEwMH07ZnVuY3Rpb24gVGUodCxlLHIpe3RbZSs0XT1yPzE6MH1mdW5jdGlvbiBNZShlLHIsbil7cmV0dXJuIHIqKHQuZGVmYXVsdCQ4LyhlLnRpbGVTaXplKk1hdGgucG93KDIsbi1lLnRpbGVJRC5vdmVyc2NhbGVkWikpKX1BZS5wcm90b3R5cGUucGxhY2VDb2xsaXNpb25Cb3g9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5wcm9qZWN0QW5kR2V0UGVyc3BlY3RpdmVSYXRpbyhuLHQuYW5jaG9yUG9pbnRYLHQuYW5jaG9yUG9pbnRZKSxhPXIqaS5wZXJzcGVjdGl2ZVJhdGlvLG89dC54MSphK2kucG9pbnQueCxzPXQueTEqYStpLnBvaW50LnksbD10LngyKmEraS5wb2ludC54LGM9dC55MiphK2kucG9pbnQueTtyZXR1cm4hZSYmdGhpcy5ncmlkLmhpdFRlc3QobyxzLGwsYyk/e2JveDpbXSxvZmZzY3JlZW46ITF9Ontib3g6W28scyxsLGNdLG9mZnNjcmVlbjp0aGlzLmlzT2Zmc2NyZWVuKG8scyxsLGMpfX0sQWUucHJvdG90eXBlLmFwcHJveGltYXRlVGlsZURpc3RhbmNlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9aT8xOm4vdGhpcy5waXRjaGZhY3RvcixvPXQubGFzdFNlZ21lbnRWaWV3cG9ydERpc3RhbmNlKnI7cmV0dXJuIHQucHJldlRpbGVEaXN0YW5jZStvKyhhLTEpKm8qTWF0aC5hYnMoTWF0aC5zaW4oZSkpfSxBZS5wcm90b3R5cGUucGxhY2VDb2xsaXNpb25DaXJjbGVzPWZ1bmN0aW9uKGUscixuLGksYSxvLHMsbCxjLHUsaCxmLHApe3ZhciBkPVtdLGc9dGhpcy5wcm9qZWN0QW5jaG9yKHUsby5hbmNob3JYLG8uYW5jaG9yWSksdj1jLzI0LG09by5saW5lT2Zmc2V0WCpjLHk9by5saW5lT2Zmc2V0WSpjLHg9bmV3IHQuZGVmYXVsdCQxKG8uYW5jaG9yWCxvLmFuY2hvclkpLGI9dmUodixsLG0seSwhMSxwZSh4LGgpLnBvaW50LHgsbyxzLGgse30sITApLF89ITEsdz0hMCxrPWcucGVyc3BlY3RpdmVSYXRpbyppLEE9MS8oaSpuKSxUPTAsTT0wO2ImJihUPXRoaXMuYXBwcm94aW1hdGVUaWxlRGlzdGFuY2UoYi5maXJzdC50aWxlRGlzdGFuY2UsYi5maXJzdC5hbmdsZSxBLGcuY2FtZXJhRGlzdGFuY2UscCksTT10aGlzLmFwcHJveGltYXRlVGlsZURpc3RhbmNlKGIubGFzdC50aWxlRGlzdGFuY2UsYi5sYXN0LmFuZ2xlLEEsZy5jYW1lcmFEaXN0YW5jZSxwKSk7Zm9yKHZhciBTPTA7UzxlLmxlbmd0aDtTKz01KXt2YXIgRT1lW1NdLEM9ZVtTKzFdLEw9ZVtTKzJdLHo9ZVtTKzNdO2lmKCFifHx6PC1UfHx6Pk0pVGUoZSxTLCExKTtlbHNle3ZhciBPPXRoaXMucHJvamVjdFBvaW50KHUsRSxDKSxJPUwqaztpZihkLmxlbmd0aD4wKXt2YXIgRD1PLngtZFtkLmxlbmd0aC00XSxQPU8ueS1kW2QubGVuZ3RoLTNdO2lmKEkqSSoyPkQqRCtQKlAmJlMrODxlLmxlbmd0aCl7dmFyIFI9ZVtTKzhdO2lmKFI+LVQmJlI8TSl7VGUoZSxTLCExKTtjb250aW51ZX19fXZhciBGPVMvNTtpZihkLnB1c2goTy54LE8ueSxJLEYpLFRlKGUsUywhMCksdz13JiZ0aGlzLmlzT2Zmc2NyZWVuKE8ueC1JLE8ueS1JLE8ueCtJLE8ueStJKSwhciYmdGhpcy5ncmlkLmhpdFRlc3RDaXJjbGUoTy54LE8ueSxJKSl7aWYoIWYpcmV0dXJue2NpcmNsZXM6W10sb2Zmc2NyZWVuOiExfTtfPSEwfX19cmV0dXJue2NpcmNsZXM6Xz9bXTpkLG9mZnNjcmVlbjp3fX0sQWUucHJvdG90eXBlLnF1ZXJ5UmVuZGVyZWRTeW1ib2xzPWZ1bmN0aW9uKGUpe2lmKDA9PT1lLmxlbmd0aHx8MD09PXRoaXMuZ3JpZC5rZXlzTGVuZ3RoKCkmJjA9PT10aGlzLmlnbm9yZWRHcmlkLmtleXNMZW5ndGgoKSlyZXR1cm57fTtmb3IodmFyIHI9W10sbj0xLzAsaT0xLzAsYT0tMS8wLG89LTEvMCxzPTAsbD1lO3M8bC5sZW5ndGg7cys9MSl7dmFyIGM9bFtzXSx1PW5ldyB0LmRlZmF1bHQkMShjLngrMTAwLGMueSsxMDApO249TWF0aC5taW4obix1LngpLGk9TWF0aC5taW4oaSx1LnkpLGE9TWF0aC5tYXgoYSx1LngpLG89TWF0aC5tYXgobyx1LnkpLHIucHVzaCh1KX1mb3IodmFyIGg9e30sZj17fSxwPTAsZD10aGlzLmdyaWQucXVlcnkobixpLGEsbykuY29uY2F0KHRoaXMuaWdub3JlZEdyaWQucXVlcnkobixpLGEsbykpO3A8ZC5sZW5ndGg7cCs9MSl7dmFyIGc9ZFtwXSx2PWcua2V5O2lmKHZvaWQgMD09PWhbdi5idWNrZXRJbnN0YW5jZUlkXSYmKGhbdi5idWNrZXRJbnN0YW5jZUlkXT17fSksIWhbdi5idWNrZXRJbnN0YW5jZUlkXVt2LmZlYXR1cmVJbmRleF0pe3ZhciBtPVtuZXcgdC5kZWZhdWx0JDEoZy54MSxnLnkxKSxuZXcgdC5kZWZhdWx0JDEoZy54MixnLnkxKSxuZXcgdC5kZWZhdWx0JDEoZy54MixnLnkyKSxuZXcgdC5kZWZhdWx0JDEoZy54MSxnLnkyKV07dC5wb2x5Z29uSW50ZXJzZWN0c1BvbHlnb24ocixtKSYmKGhbdi5idWNrZXRJbnN0YW5jZUlkXVt2LmZlYXR1cmVJbmRleF09ITAsdm9pZCAwPT09Zlt2LmJ1Y2tldEluc3RhbmNlSWRdJiYoZlt2LmJ1Y2tldEluc3RhbmNlSWRdPVtdKSxmW3YuYnVja2V0SW5zdGFuY2VJZF0ucHVzaCh2LmZlYXR1cmVJbmRleCkpfX1yZXR1cm4gZn0sQWUucHJvdG90eXBlLmluc2VydENvbGxpc2lvbkJveD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT17YnVja2V0SW5zdGFuY2VJZDpyLGZlYXR1cmVJbmRleDpufTsoZT90aGlzLmlnbm9yZWRHcmlkOnRoaXMuZ3JpZCkuaW5zZXJ0KGksdFswXSx0WzFdLHRbMl0sdFszXSl9LEFlLnByb3RvdHlwZS5pbnNlcnRDb2xsaXNpb25DaXJjbGVzPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1lP3RoaXMuaWdub3JlZEdyaWQ6dGhpcy5ncmlkLGE9e2J1Y2tldEluc3RhbmNlSWQ6cixmZWF0dXJlSW5kZXg6bn0sbz0wO288dC5sZW5ndGg7bys9NClpLmluc2VydENpcmNsZShhLHRbb10sdFtvKzFdLHRbbysyXSl9LEFlLnByb3RvdHlwZS5wcm9qZWN0QW5jaG9yPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1bZSxyLDAsMV07cmV0dXJuIGtlKG4sbix0KSx7cGVyc3BlY3RpdmVSYXRpbzouNSt0aGlzLnRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlL25bM10qLjUsY2FtZXJhRGlzdGFuY2U6blszXX19LEFlLnByb3RvdHlwZS5wcm9qZWN0UG9pbnQ9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPVtyLG4sMCwxXTtyZXR1cm4ga2UoaSxpLGUpLG5ldyB0LmRlZmF1bHQkMSgoaVswXS9pWzNdKzEpLzIqdGhpcy50cmFuc2Zvcm0ud2lkdGgrMTAwLCgtaVsxXS9pWzNdKzEpLzIqdGhpcy50cmFuc2Zvcm0uaGVpZ2h0KzEwMCl9LEFlLnByb3RvdHlwZS5wcm9qZWN0QW5kR2V0UGVyc3BlY3RpdmVSYXRpbz1mdW5jdGlvbihlLHIsbil7dmFyIGk9W3IsbiwwLDFdO3JldHVybiBrZShpLGksZSkse3BvaW50Om5ldyB0LmRlZmF1bHQkMSgoaVswXS9pWzNdKzEpLzIqdGhpcy50cmFuc2Zvcm0ud2lkdGgrMTAwLCgtaVsxXS9pWzNdKzEpLzIqdGhpcy50cmFuc2Zvcm0uaGVpZ2h0KzEwMCkscGVyc3BlY3RpdmVSYXRpbzouNSt0aGlzLnRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlL2lbM10qLjV9fSxBZS5wcm90b3R5cGUuaXNPZmZzY3JlZW49ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHI8MTAwfHx0Pj10aGlzLnNjcmVlblJpZ2h0Qm91bmRhcnl8fG48MTAwfHxlPnRoaXMuc2NyZWVuQm90dG9tQm91bmRhcnl9O3ZhciBTZT10LmRlZmF1bHQkMTkubGF5b3V0LEVlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMub3BhY2l0eT10P01hdGgubWF4KDAsTWF0aC5taW4oMSx0Lm9wYWNpdHkrKHQucGxhY2VkP2U6LWUpKSk6biYmcj8xOjAsdGhpcy5wbGFjZWQ9cn07RWUucHJvdG90eXBlLmlzSGlkZGVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLm9wYWNpdHkmJiF0aGlzLnBsYWNlZH07dmFyIENlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy50ZXh0PW5ldyBFZSh0P3QudGV4dDpudWxsLGUscixpKSx0aGlzLmljb249bmV3IEVlKHQ/dC5pY29uOm51bGwsZSxuLGkpfTtDZS5wcm90b3R5cGUuaXNIaWRkZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0LmlzSGlkZGVuKCkmJnRoaXMuaWNvbi5pc0hpZGRlbigpfTt2YXIgTGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMudGV4dD10LHRoaXMuaWNvbj1lLHRoaXMuc2tpcEZhZGU9cn0semU9ZnVuY3Rpb24odCxlKXt0aGlzLnRyYW5zZm9ybT10LmNsb25lKCksdGhpcy5jb2xsaXNpb25JbmRleD1uZXcgQWUodGhpcy50cmFuc2Zvcm0pLHRoaXMucGxhY2VtZW50cz17fSx0aGlzLm9wYWNpdGllcz17fSx0aGlzLnN0YWxlPSExLHRoaXMuZmFkZUR1cmF0aW9uPWUsdGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YT17fX07ZnVuY3Rpb24gT2UodCxlLHIpe3QuZW1wbGFjZUJhY2soZT8xOjAscj8xOjApLHQuZW1wbGFjZUJhY2soZT8xOjAscj8xOjApLHQuZW1wbGFjZUJhY2soZT8xOjAscj8xOjApLHQuZW1wbGFjZUJhY2soZT8xOjAscj8xOjApfXplLnByb3RvdHlwZS5wbGFjZUxheWVyVGlsZT1mdW5jdGlvbihlLHIsbixpKXt2YXIgYT1yLmdldEJ1Y2tldChlKSxvPXIubGF0ZXN0RmVhdHVyZUluZGV4O2lmKGEmJm8mJmUuaWQ9PT1hLmxheWVySWRzWzBdKXt2YXIgcz1yLmNvbGxpc2lvbkJveEFycmF5LGw9YS5sYXllcnNbMF0ubGF5b3V0LGM9TWF0aC5wb3coMix0aGlzLnRyYW5zZm9ybS56b29tLXIudGlsZUlELm92ZXJzY2FsZWRaKSx1PXIudGlsZVNpemUvdC5kZWZhdWx0JDgsaD10aGlzLnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgoci50aWxlSUQudG9VbndyYXBwZWQoKSksZj1oZShoLFwibWFwXCI9PT1sLmdldChcInRleHQtcGl0Y2gtYWxpZ25tZW50XCIpLFwibWFwXCI9PT1sLmdldChcInRleHQtcm90YXRpb24tYWxpZ25tZW50XCIpLHRoaXMudHJhbnNmb3JtLE1lKHIsMSx0aGlzLnRyYW5zZm9ybS56b29tKSkscD1oZShoLFwibWFwXCI9PT1sLmdldChcImljb24tcGl0Y2gtYWxpZ25tZW50XCIpLFwibWFwXCI9PT1sLmdldChcImljb24tcm90YXRpb24tYWxpZ25tZW50XCIpLHRoaXMudHJhbnNmb3JtLE1lKHIsMSx0aGlzLnRyYW5zZm9ybS56b29tKSk7dGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YVthLmJ1Y2tldEluc3RhbmNlSWRdPW5ldyBmdW5jdGlvbih0LGUscixuLGkpe3RoaXMuYnVja2V0SW5zdGFuY2VJZD10LHRoaXMuZmVhdHVyZUluZGV4PWUsdGhpcy5zb3VyY2VMYXllckluZGV4PXIsdGhpcy5idWNrZXRJbmRleD1uLHRoaXMudGlsZUlEPWl9KGEuYnVja2V0SW5zdGFuY2VJZCxvLGEuc291cmNlTGF5ZXJJbmRleCxhLmluZGV4LHIudGlsZUlEKSx0aGlzLnBsYWNlTGF5ZXJCdWNrZXQoYSxoLGYscCxjLHUsbixpLHMpfX0semUucHJvdG90eXBlLnBsYWNlTGF5ZXJCdWNrZXQ9ZnVuY3Rpb24oZSxyLG4saSxhLG8scyxsLGMpe2Zvcih2YXIgdT1lLmxheWVyc1swXS5sYXlvdXQsaD10LmV2YWx1YXRlU2l6ZUZvclpvb20oZS50ZXh0U2l6ZURhdGEsdGhpcy50cmFuc2Zvcm0uem9vbSxTZS5wcm9wZXJ0aWVzW1widGV4dC1zaXplXCJdKSxmPSFlLmhhc1RleHREYXRhKCl8fHUuZ2V0KFwidGV4dC1vcHRpb25hbFwiKSxwPSFlLmhhc0ljb25EYXRhKCl8fHUuZ2V0KFwiaWNvbi1vcHRpb25hbFwiKSxkPTAsZz1lLnN5bWJvbEluc3RhbmNlcztkPGcubGVuZ3RoO2QrPTEpe3ZhciB2PWdbZF07aWYoIWxbdi5jcm9zc1RpbGVJRF0pe3ZhciBtPXZvaWQgMCE9PXYuZmVhdHVyZS50ZXh0LHk9dm9pZCAwIT09di5mZWF0dXJlLmljb24seD0hMCxiPW51bGwsXz1udWxsLHc9bnVsbCxrPTAsQT0wO3YuY29sbGlzaW9uQXJyYXlzfHwodi5jb2xsaXNpb25BcnJheXM9ZS5kZXNlcmlhbGl6ZUNvbGxpc2lvbkJveGVzKGMsdi50ZXh0Qm94U3RhcnRJbmRleCx2LnRleHRCb3hFbmRJbmRleCx2Lmljb25Cb3hTdGFydEluZGV4LHYuaWNvbkJveEVuZEluZGV4KSksdi5jb2xsaXNpb25BcnJheXMudGV4dEZlYXR1cmVJbmRleCYmKGs9di5jb2xsaXNpb25BcnJheXMudGV4dEZlYXR1cmVJbmRleCksdi5jb2xsaXNpb25BcnJheXMudGV4dEJveCYmKG09KGI9dGhpcy5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkJveCh2LmNvbGxpc2lvbkFycmF5cy50ZXh0Qm94LHUuZ2V0KFwidGV4dC1hbGxvdy1vdmVybGFwXCIpLG8scikpLmJveC5sZW5ndGg+MCx4PXgmJmIub2Zmc2NyZWVuKTt2YXIgVD12LmNvbGxpc2lvbkFycmF5cy50ZXh0Q2lyY2xlcztpZihUKXt2YXIgTT1lLnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KHYucGxhY2VkVGV4dFN5bWJvbEluZGljZXNbMF0pLFM9dC5ldmFsdWF0ZVNpemVGb3JGZWF0dXJlKGUudGV4dFNpemVEYXRhLGgsTSk7Xz10aGlzLmNvbGxpc2lvbkluZGV4LnBsYWNlQ29sbGlzaW9uQ2lyY2xlcyhULHUuZ2V0KFwidGV4dC1hbGxvdy1vdmVybGFwXCIpLGEsbyx2LmtleSxNLGUubGluZVZlcnRleEFycmF5LGUuZ2x5cGhPZmZzZXRBcnJheSxTLHIsbixzLFwibWFwXCI9PT11LmdldChcInRleHQtcGl0Y2gtYWxpZ25tZW50XCIpKSxtPXUuZ2V0KFwidGV4dC1hbGxvdy1vdmVybGFwXCIpfHxfLmNpcmNsZXMubGVuZ3RoPjAseD14JiZfLm9mZnNjcmVlbn12LmNvbGxpc2lvbkFycmF5cy5pY29uRmVhdHVyZUluZGV4JiYoQT12LmNvbGxpc2lvbkFycmF5cy5pY29uRmVhdHVyZUluZGV4KSx2LmNvbGxpc2lvbkFycmF5cy5pY29uQm94JiYoeT0odz10aGlzLmNvbGxpc2lvbkluZGV4LnBsYWNlQ29sbGlzaW9uQm94KHYuY29sbGlzaW9uQXJyYXlzLmljb25Cb3gsdS5nZXQoXCJpY29uLWFsbG93LW92ZXJsYXBcIiksbyxyKSkuYm94Lmxlbmd0aD4wLHg9eCYmdy5vZmZzY3JlZW4pLGZ8fHA/cD9mfHwoeT15JiZtKTptPXkmJm06eT1tPXkmJm0sbSYmYiYmdGhpcy5jb2xsaXNpb25JbmRleC5pbnNlcnRDb2xsaXNpb25Cb3goYi5ib3gsdS5nZXQoXCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnRcIiksZS5idWNrZXRJbnN0YW5jZUlkLGspLHkmJncmJnRoaXMuY29sbGlzaW9uSW5kZXguaW5zZXJ0Q29sbGlzaW9uQm94KHcuYm94LHUuZ2V0KFwiaWNvbi1pZ25vcmUtcGxhY2VtZW50XCIpLGUuYnVja2V0SW5zdGFuY2VJZCxBKSxtJiZfJiZ0aGlzLmNvbGxpc2lvbkluZGV4Lmluc2VydENvbGxpc2lvbkNpcmNsZXMoXy5jaXJjbGVzLHUuZ2V0KFwidGV4dC1pZ25vcmUtcGxhY2VtZW50XCIpLGUuYnVja2V0SW5zdGFuY2VJZCxrKSx0aGlzLnBsYWNlbWVudHNbdi5jcm9zc1RpbGVJRF09bmV3IExlKG0seSx4fHxlLmp1c3RSZWxvYWRlZCksbFt2LmNyb3NzVGlsZUlEXT0hMH19ZS5qdXN0UmVsb2FkZWQ9ITF9LHplLnByb3RvdHlwZS5jb21taXQ9ZnVuY3Rpb24odCxlKXt0aGlzLmNvbW1pdFRpbWU9ZTt2YXIgcj0hMSxuPXQmJjAhPT10aGlzLmZhZGVEdXJhdGlvbj8odGhpcy5jb21taXRUaW1lLXQuY29tbWl0VGltZSkvdGhpcy5mYWRlRHVyYXRpb246MSxpPXQ/dC5vcGFjaXRpZXM6e307Zm9yKHZhciBhIGluIHRoaXMucGxhY2VtZW50cyl7dmFyIG89dGhpcy5wbGFjZW1lbnRzW2FdLHM9aVthXTtzPyh0aGlzLm9wYWNpdGllc1thXT1uZXcgQ2UocyxuLG8udGV4dCxvLmljb24pLHI9cnx8by50ZXh0IT09cy50ZXh0LnBsYWNlZHx8by5pY29uIT09cy5pY29uLnBsYWNlZCk6KHRoaXMub3BhY2l0aWVzW2FdPW5ldyBDZShudWxsLG4sby50ZXh0LG8uaWNvbixvLnNraXBGYWRlKSxyPXJ8fG8udGV4dHx8by5pY29uKX1mb3IodmFyIGwgaW4gaSl7dmFyIGM9aVtsXTtpZighdGhpcy5vcGFjaXRpZXNbbF0pe3ZhciB1PW5ldyBDZShjLG4sITEsITEpO3UuaXNIaWRkZW4oKXx8KHRoaXMub3BhY2l0aWVzW2xdPXUscj1yfHxjLnRleHQucGxhY2VkfHxjLmljb24ucGxhY2VkKX19cj90aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lPWU6XCJudW1iZXJcIiE9dHlwZW9mIHRoaXMubGFzdFBsYWNlbWVudENoYW5nZVRpbWUmJih0aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lPXQ/dC5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZTplKX0semUucHJvdG90eXBlLnVwZGF0ZUxheWVyT3BhY2l0aWVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dLG89YS5nZXRCdWNrZXQodCk7byYmYS5sYXRlc3RGZWF0dXJlSW5kZXgmJnQuaWQ9PT1vLmxheWVySWRzWzBdJiZ0aGlzLnVwZGF0ZUJ1Y2tldE9wYWNpdGllcyhvLHIsYS5jb2xsaXNpb25Cb3hBcnJheSl9fSx6ZS5wcm90b3R5cGUudXBkYXRlQnVja2V0T3BhY2l0aWVzPWZ1bmN0aW9uKHQsZSxyKXt0Lmhhc1RleHREYXRhKCkmJnQudGV4dC5vcGFjaXR5VmVydGV4QXJyYXkuY2xlYXIoKSx0Lmhhc0ljb25EYXRhKCkmJnQuaWNvbi5vcGFjaXR5VmVydGV4QXJyYXkuY2xlYXIoKSx0Lmhhc0NvbGxpc2lvbkJveERhdGEoKSYmdC5jb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXkuY2xlYXIoKSx0Lmhhc0NvbGxpc2lvbkNpcmNsZURhdGEoKSYmdC5jb2xsaXNpb25DaXJjbGUuY29sbGlzaW9uVmVydGV4QXJyYXkuY2xlYXIoKTtmb3IodmFyIG49dC5sYXllcnNbMF0ubGF5b3V0LGk9bmV3IENlKG51bGwsMCwhMSwhMSwhMCksYT1uZXcgQ2UobnVsbCwwLG4uZ2V0KFwidGV4dC1hbGxvdy1vdmVybGFwXCIpLG4uZ2V0KFwiaWNvbi1hbGxvdy1vdmVybGFwXCIpLCEwKSxvPTA7bzx0LnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7bysrKXt2YXIgcz10LnN5bWJvbEluc3RhbmNlc1tvXSxsPWVbcy5jcm9zc1RpbGVJRF0sYz10aGlzLm9wYWNpdGllc1tzLmNyb3NzVGlsZUlEXTtsP2M9aTpjfHwoYz1hLHRoaXMub3BhY2l0aWVzW3MuY3Jvc3NUaWxlSURdPWMpLGVbcy5jcm9zc1RpbGVJRF09ITA7dmFyIHU9cy5udW1HbHlwaFZlcnRpY2VzPjB8fHMubnVtVmVydGljYWxHbHlwaFZlcnRpY2VzPjAsaD1zLm51bUljb25WZXJ0aWNlcz4wO2lmKHUpe2Zvcih2YXIgZj1qZShjLnRleHQpLHA9KHMubnVtR2x5cGhWZXJ0aWNlcytzLm51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcykvNCxkPTA7ZDxwO2QrKyl0LnRleHQub3BhY2l0eVZlcnRleEFycmF5LmVtcGxhY2VCYWNrKGYpO2Zvcih2YXIgZz0wLHY9cy5wbGFjZWRUZXh0U3ltYm9sSW5kaWNlcztnPHYubGVuZ3RoO2crPTEpe3ZhciBtPXZbZ107dC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChtKS5oaWRkZW49Yy50ZXh0LmlzSGlkZGVuKCl9fWlmKGgpe2Zvcih2YXIgeT1qZShjLmljb24pLHg9MDt4PHMubnVtSWNvblZlcnRpY2VzLzQ7eCsrKXQuaWNvbi5vcGFjaXR5VmVydGV4QXJyYXkuZW1wbGFjZUJhY2soeSk7dC5pY29uLnBsYWNlZFN5bWJvbEFycmF5LmdldChvKS5oaWRkZW49Yy5pY29uLmlzSGlkZGVuKCl9cy5jb2xsaXNpb25BcnJheXN8fChzLmNvbGxpc2lvbkFycmF5cz10LmRlc2VyaWFsaXplQ29sbGlzaW9uQm94ZXMocixzLnRleHRCb3hTdGFydEluZGV4LHMudGV4dEJveEVuZEluZGV4LHMuaWNvbkJveFN0YXJ0SW5kZXgscy5pY29uQm94RW5kSW5kZXgpKTt2YXIgYj1zLmNvbGxpc2lvbkFycmF5cztpZihiKXtiLnRleHRCb3gmJnQuaGFzQ29sbGlzaW9uQm94RGF0YSgpJiZPZSh0LmNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSxjLnRleHQucGxhY2VkLCExKSxiLmljb25Cb3gmJnQuaGFzQ29sbGlzaW9uQm94RGF0YSgpJiZPZSh0LmNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSxjLmljb24ucGxhY2VkLCExKTt2YXIgXz1iLnRleHRDaXJjbGVzO2lmKF8mJnQuaGFzQ29sbGlzaW9uQ2lyY2xlRGF0YSgpKWZvcih2YXIgdz0wO3c8Xy5sZW5ndGg7dys9NSl7dmFyIGs9bHx8MD09PV9bdys0XTtPZSh0LmNvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhBcnJheSxjLnRleHQucGxhY2VkLGspfX19dC5zb3J0RmVhdHVyZXModGhpcy50cmFuc2Zvcm0uYW5nbGUpLHRoaXMucmV0YWluZWRRdWVyeURhdGFbdC5idWNrZXRJbnN0YW5jZUlkXSYmKHRoaXMucmV0YWluZWRRdWVyeURhdGFbdC5idWNrZXRJbnN0YW5jZUlkXS5mZWF0dXJlU29ydE9yZGVyPXQuZmVhdHVyZVNvcnRPcmRlciksdC5oYXNUZXh0RGF0YSgpJiZ0LnRleHQub3BhY2l0eVZlcnRleEJ1ZmZlciYmdC50ZXh0Lm9wYWNpdHlWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YSh0LnRleHQub3BhY2l0eVZlcnRleEFycmF5KSx0Lmhhc0ljb25EYXRhKCkmJnQuaWNvbi5vcGFjaXR5VmVydGV4QnVmZmVyJiZ0Lmljb24ub3BhY2l0eVZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKHQuaWNvbi5vcGFjaXR5VmVydGV4QXJyYXkpLHQuaGFzQ29sbGlzaW9uQm94RGF0YSgpJiZ0LmNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhCdWZmZXImJnQuY29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKHQuY29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5KSx0Lmhhc0NvbGxpc2lvbkNpcmNsZURhdGEoKSYmdC5jb2xsaXNpb25DaXJjbGUuY29sbGlzaW9uVmVydGV4QnVmZmVyJiZ0LmNvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YSh0LmNvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhBcnJheSl9LHplLnByb3RvdHlwZS5zeW1ib2xGYWRlQ2hhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5mYWRlRHVyYXRpb24/MToodC10aGlzLmNvbW1pdFRpbWUpL3RoaXMuZmFkZUR1cmF0aW9ufSx6ZS5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3RhbGV8fHQtdGhpcy5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZTx0aGlzLmZhZGVEdXJhdGlvbn0semUucHJvdG90eXBlLnN0aWxsUmVjZW50PWZ1bmN0aW9uKHQpe3JldHVyblwidW5kZWZpbmVkXCIhPT10aGlzLmNvbW1pdFRpbWUmJnRoaXMuY29tbWl0VGltZSt0aGlzLmZhZGVEdXJhdGlvbj50fSx6ZS5wcm90b3R5cGUuc2V0U3RhbGU9ZnVuY3Rpb24oKXt0aGlzLnN0YWxlPSEwfTt2YXIgSWU9TWF0aC5wb3coMiwyNSksRGU9TWF0aC5wb3coMiwyNCksUGU9TWF0aC5wb3coMiwxNyksUmU9TWF0aC5wb3coMiwxNiksRmU9TWF0aC5wb3coMiw5KSxCZT1NYXRoLnBvdygyLDgpLE5lPU1hdGgucG93KDIsMSk7ZnVuY3Rpb24gamUodCl7aWYoMD09PXQub3BhY2l0eSYmIXQucGxhY2VkKXJldHVybiAwO2lmKDE9PT10Lm9wYWNpdHkmJnQucGxhY2VkKXJldHVybiA0Mjk0OTY3Mjk1O3ZhciBlPXQucGxhY2VkPzE6MCxyPU1hdGguZmxvb3IoMTI3KnQub3BhY2l0eSk7cmV0dXJuIHIqSWUrZSpEZStyKlBlK2UqUmUrcipGZStlKkJlK3IqTmUrZX12YXIgVmU9ZnVuY3Rpb24oKXt0aGlzLl9jdXJyZW50VGlsZUluZGV4PTAsdGhpcy5fc2VlbkNyb3NzVGlsZUlEcz17fX07VmUucHJvdG90eXBlLmNvbnRpbnVlUGxhY2VtZW50PWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKDt0aGlzLl9jdXJyZW50VGlsZUluZGV4PHQubGVuZ3RoOyl7dmFyIGE9dFt0aGlzLl9jdXJyZW50VGlsZUluZGV4XTtpZihlLnBsYWNlTGF5ZXJUaWxlKG4sYSxyLHRoaXMuX3NlZW5Dcm9zc1RpbGVJRHMpLHRoaXMuX2N1cnJlbnRUaWxlSW5kZXgrKyxpKCkpcmV0dXJuITB9fTt2YXIgVWU9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLnBsYWNlbWVudD1uZXcgemUodCxpKSx0aGlzLl9jdXJyZW50UGxhY2VtZW50SW5kZXg9ZS5sZW5ndGgtMSx0aGlzLl9mb3JjZUZ1bGxQbGFjZW1lbnQ9cix0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXM9bix0aGlzLl9kb25lPSExfTtVZS5wcm90b3R5cGUuaXNEb25lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvbmV9LFVlLnByb3RvdHlwZS5jb250aW51ZVBsYWNlbWVudD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXRoaXMsaT1hLm5vdygpLG89ZnVuY3Rpb24oKXt2YXIgdD1hLm5vdygpLWk7cmV0dXJuIW4uX2ZvcmNlRnVsbFBsYWNlbWVudCYmdD4yfTt0aGlzLl9jdXJyZW50UGxhY2VtZW50SW5kZXg+PTA7KXt2YXIgcz1lW3Rbbi5fY3VycmVudFBsYWNlbWVudEluZGV4XV0sbD1uLnBsYWNlbWVudC5jb2xsaXNpb25JbmRleC50cmFuc2Zvcm0uem9vbTtpZihcInN5bWJvbFwiPT09cy50eXBlJiYoIXMubWluem9vbXx8cy5taW56b29tPD1sKSYmKCFzLm1heHpvb218fHMubWF4em9vbT5sKSl7aWYobi5faW5Qcm9ncmVzc0xheWVyfHwobi5faW5Qcm9ncmVzc0xheWVyPW5ldyBWZSksbi5faW5Qcm9ncmVzc0xheWVyLmNvbnRpbnVlUGxhY2VtZW50KHJbcy5zb3VyY2VdLG4ucGxhY2VtZW50LG4uX3Nob3dDb2xsaXNpb25Cb3hlcyxzLG8pKXJldHVybjtkZWxldGUgbi5faW5Qcm9ncmVzc0xheWVyfW4uX2N1cnJlbnRQbGFjZW1lbnRJbmRleC0tfXRoaXMuX2RvbmU9ITB9LFVlLnByb3RvdHlwZS5jb21taXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5wbGFjZW1lbnQuY29tbWl0KHQsZSksdGhpcy5wbGFjZW1lbnR9O3ZhciBxZT01MTIvdC5kZWZhdWx0JDgvMixIZT1mdW5jdGlvbih0LGUscil7dGhpcy50aWxlSUQ9dCx0aGlzLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXM9e30sdGhpcy5idWNrZXRJbnN0YW5jZUlkPXI7Zm9yKHZhciBuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXSxvPWEua2V5O3RoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1tvXXx8KHRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1tvXT1bXSksdGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW29dLnB1c2goe2Nyb3NzVGlsZUlEOmEuY3Jvc3NUaWxlSUQsY29vcmQ6dGhpcy5nZXRTY2FsZWRDb29yZGluYXRlcyhhLHQpfSl9fTtIZS5wcm90b3R5cGUuZ2V0U2NhbGVkQ29vcmRpbmF0ZXM9ZnVuY3Rpb24oZSxyKXt2YXIgbj1yLmNhbm9uaWNhbC56LXRoaXMudGlsZUlELmNhbm9uaWNhbC56LGk9cWUvTWF0aC5wb3coMixuKSxhPWUuYW5jaG9yO3JldHVybnt4Ok1hdGguZmxvb3IoKHIuY2Fub25pY2FsLngqdC5kZWZhdWx0JDgrYS54KSppKSx5Ok1hdGguZmxvb3IoKHIuY2Fub25pY2FsLnkqdC5kZWZhdWx0JDgrYS55KSppKX19LEhlLnByb3RvdHlwZS5maW5kTWF0Y2hlcz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXRoaXMudGlsZUlELmNhbm9uaWNhbC56PGUuY2Fub25pY2FsLno/MTpNYXRoLnBvdygyLHRoaXMudGlsZUlELmNhbm9uaWNhbC56LWUuY2Fub25pY2FsLnopLGk9MCxhPXQ7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO2lmKCFvLmNyb3NzVGlsZUlEKXt2YXIgcz10aGlzLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNbby5rZXldO2lmKHMpZm9yKHZhciBsPXRoaXMuZ2V0U2NhbGVkQ29vcmRpbmF0ZXMobyxlKSxjPTAsdT1zO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGg9dVtjXTtpZihNYXRoLmFicyhoLmNvb3JkLngtbC54KTw9biYmTWF0aC5hYnMoaC5jb29yZC55LWwueSk8PW4mJiFyW2guY3Jvc3NUaWxlSURdKXtyW2guY3Jvc3NUaWxlSURdPSEwLG8uY3Jvc3NUaWxlSUQ9aC5jcm9zc1RpbGVJRDticmVha319fX19O3ZhciBHZT1mdW5jdGlvbigpe3RoaXMubWF4Q3Jvc3NUaWxlSUQ9MH07R2UucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLm1heENyb3NzVGlsZUlEfTt2YXIgWWU9ZnVuY3Rpb24oKXt0aGlzLmluZGV4ZXM9e30sdGhpcy51c2VkQ3Jvc3NUaWxlSURzPXt9LHRoaXMubG5nPTB9O1llLnByb3RvdHlwZS5oYW5kbGVXcmFwSnVtcD1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLnJvdW5kKCh0LXRoaXMubG5nKS8zNjApO2lmKDAhPT1lKWZvcih2YXIgciBpbiB0aGlzLmluZGV4ZXMpe3ZhciBuPXRoaXMuaW5kZXhlc1tyXSxpPXt9O2Zvcih2YXIgYSBpbiBuKXt2YXIgbz1uW2FdO28udGlsZUlEPW8udGlsZUlELnVud3JhcFRvKG8udGlsZUlELndyYXArZSksaVtvLnRpbGVJRC5rZXldPW99dGhpcy5pbmRleGVzW3JdPWl9dGhpcy5sbmc9dH0sWWUucHJvdG90eXBlLmFkZEJ1Y2tldD1mdW5jdGlvbih0LGUscil7aWYodGhpcy5pbmRleGVzW3Qub3ZlcnNjYWxlZFpdJiZ0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl1bdC5rZXldKXtpZih0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl1bdC5rZXldLmJ1Y2tldEluc3RhbmNlSWQ9PT1lLmJ1Y2tldEluc3RhbmNlSWQpcmV0dXJuITE7dGhpcy5yZW1vdmVCdWNrZXRDcm9zc1RpbGVJRHModC5vdmVyc2NhbGVkWix0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl1bdC5rZXldKX1mb3IodmFyIG49MCxpPWUuc3ltYm9sSW5zdGFuY2VzO248aS5sZW5ndGg7bis9MSlpW25dLmNyb3NzVGlsZUlEPTA7dGhpcy51c2VkQ3Jvc3NUaWxlSURzW3Qub3ZlcnNjYWxlZFpdfHwodGhpcy51c2VkQ3Jvc3NUaWxlSURzW3Qub3ZlcnNjYWxlZFpdPXt9KTt2YXIgYT10aGlzLnVzZWRDcm9zc1RpbGVJRHNbdC5vdmVyc2NhbGVkWl07Zm9yKHZhciBvIGluIHRoaXMuaW5kZXhlcyl7dmFyIHM9dGhpcy5pbmRleGVzW29dO2lmKE51bWJlcihvKT50Lm92ZXJzY2FsZWRaKWZvcih2YXIgbCBpbiBzKXt2YXIgYz1zW2xdO2MudGlsZUlELmlzQ2hpbGRPZih0KSYmYy5maW5kTWF0Y2hlcyhlLnN5bWJvbEluc3RhbmNlcyx0LGEpfWVsc2V7dmFyIHU9c1t0LnNjYWxlZFRvKE51bWJlcihvKSkua2V5XTt1JiZ1LmZpbmRNYXRjaGVzKGUuc3ltYm9sSW5zdGFuY2VzLHQsYSl9fWZvcih2YXIgaD0wLGY9ZS5zeW1ib2xJbnN0YW5jZXM7aDxmLmxlbmd0aDtoKz0xKXt2YXIgcD1mW2hdO3AuY3Jvc3NUaWxlSUR8fChwLmNyb3NzVGlsZUlEPXIuZ2VuZXJhdGUoKSxhW3AuY3Jvc3NUaWxlSURdPSEwKX1yZXR1cm4gdm9pZCAwPT09dGhpcy5pbmRleGVzW3Qub3ZlcnNjYWxlZFpdJiYodGhpcy5pbmRleGVzW3Qub3ZlcnNjYWxlZFpdPXt9KSx0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl1bdC5rZXldPW5ldyBIZSh0LGUuc3ltYm9sSW5zdGFuY2VzLGUuYnVja2V0SW5zdGFuY2VJZCksITB9LFllLnByb3RvdHlwZS5yZW1vdmVCdWNrZXRDcm9zc1RpbGVJRHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gZS5pbmRleGVkU3ltYm9sSW5zdGFuY2VzKWZvcih2YXIgbj0wLGk9ZS5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW3JdO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtkZWxldGUgdGhpcy51c2VkQ3Jvc3NUaWxlSURzW3RdW2EuY3Jvc3NUaWxlSURdfX0sWWUucHJvdG90eXBlLnJlbW92ZVN0YWxlQnVja2V0cz1mdW5jdGlvbih0KXt2YXIgZT0hMTtmb3IodmFyIHIgaW4gdGhpcy5pbmRleGVzKXt2YXIgbj10aGlzLmluZGV4ZXNbcl07Zm9yKHZhciBpIGluIG4pdFtuW2ldLmJ1Y2tldEluc3RhbmNlSWRdfHwodGhpcy5yZW1vdmVCdWNrZXRDcm9zc1RpbGVJRHMocixuW2ldKSxkZWxldGUgbltpXSxlPSEwKX1yZXR1cm4gZX07dmFyIFdlPWZ1bmN0aW9uKCl7dGhpcy5sYXllckluZGV4ZXM9e30sdGhpcy5jcm9zc1RpbGVJRHM9bmV3IEdlLHRoaXMubWF4QnVja2V0SW5zdGFuY2VJZD0wLHRoaXMuYnVja2V0c0luQ3VycmVudFBsYWNlbWVudD17fX07V2UucHJvdG90eXBlLmFkZExheWVyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmxheWVySW5kZXhlc1t0LmlkXTt2b2lkIDA9PT1uJiYobj10aGlzLmxheWVySW5kZXhlc1t0LmlkXT1uZXcgWWUpO3ZhciBpPSExLGE9e307bi5oYW5kbGVXcmFwSnVtcChyKTtmb3IodmFyIG89MCxzPWU7bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dLGM9bC5nZXRCdWNrZXQodCk7YyYmdC5pZD09PWMubGF5ZXJJZHNbMF0mJihjLmJ1Y2tldEluc3RhbmNlSWR8fChjLmJ1Y2tldEluc3RhbmNlSWQ9Kyt0aGlzLm1heEJ1Y2tldEluc3RhbmNlSWQpLG4uYWRkQnVja2V0KGwudGlsZUlELGMsdGhpcy5jcm9zc1RpbGVJRHMpJiYoaT0hMCksYVtjLmJ1Y2tldEluc3RhbmNlSWRdPSEwKX1yZXR1cm4gbi5yZW1vdmVTdGFsZUJ1Y2tldHMoYSkmJihpPSEwKSxpfSxXZS5wcm90b3R5cGUucHJ1bmVVbnVzZWRMYXllcnM9ZnVuY3Rpb24odCl7dmFyIGU9e307Zm9yKHZhciByIGluIHQuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPSEwfSksdGhpcy5sYXllckluZGV4ZXMpZVtyXXx8ZGVsZXRlIHRoaXMubGF5ZXJJbmRleGVzW3JdfTt2YXIgWGU9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5lbWl0VmFsaWRhdGlvbkVycm9ycyhlLHImJnIuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVyblwic291cmNlLmNhbnZhc1wiIT09dC5pZGVudGlmaWVyfSkpfSxaZT10LnBpY2soZWUsW1wiYWRkTGF5ZXJcIixcInJlbW92ZUxheWVyXCIsXCJzZXRQYWludFByb3BlcnR5XCIsXCJzZXRMYXlvdXRQcm9wZXJ0eVwiLFwic2V0RmlsdGVyXCIsXCJhZGRTb3VyY2VcIixcInJlbW92ZVNvdXJjZVwiLFwic2V0TGF5ZXJab29tUmFuZ2VcIixcInNldExpZ2h0XCIsXCJzZXRUcmFuc2l0aW9uXCIsXCJzZXRHZW9KU09OU291cmNlRGF0YVwiXSksJGU9dC5waWNrKGVlLFtcInNldENlbnRlclwiLFwic2V0Wm9vbVwiLFwic2V0QmVhcmluZ1wiLFwic2V0UGl0Y2hcIl0pLEplPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIobixpKXt2YXIgYT10aGlzO3ZvaWQgMD09PWkmJihpPXt9KSxlLmNhbGwodGhpcyksdGhpcy5tYXA9bix0aGlzLmRpc3BhdGNoZXI9bmV3IHEoKEp0fHwoSnQ9bmV3IEt0KSxKdCksdGhpcyksdGhpcy5pbWFnZU1hbmFnZXI9bmV3IE8sdGhpcy5nbHlwaE1hbmFnZXI9bmV3IEIobi5fdHJhbnNmb3JtUmVxdWVzdCxpLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseSksdGhpcy5saW5lQXRsYXM9bmV3IFUoMjU2LDUxMiksdGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleD1uZXcgV2UsdGhpcy5fbGF5ZXJzPXt9LHRoaXMuX29yZGVyPVtdLHRoaXMuc291cmNlQ2FjaGVzPXt9LHRoaXMuem9vbUhpc3Rvcnk9bmV3IHQuZGVmYXVsdCQyMyx0aGlzLl9sb2FkZWQ9ITEsdGhpcy5fcmVzZXRVcGRhdGVzKCk7dmFyIG89dGhpczt0aGlzLl9ydGxUZXh0UGx1Z2luQ2FsbGJhY2s9ci5yZWdpc3RlckZvclBsdWdpbkF2YWlsYWJpbGl0eShmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gby5kaXNwYXRjaGVyLmJyb2FkY2FzdChcImxvYWRSVExUZXh0UGx1Z2luXCIsdC5wbHVnaW5VUkwsdC5jb21wbGV0aW9uQ2FsbGJhY2spLG8uc291cmNlQ2FjaGVzKW8uc291cmNlQ2FjaGVzW2VdLnJlbG9hZCgpfSksdGhpcy5vbihcImRhdGFcIixmdW5jdGlvbih0KXtpZihcInNvdXJjZVwiPT09dC5kYXRhVHlwZSYmXCJtZXRhZGF0YVwiPT09dC5zb3VyY2VEYXRhVHlwZSl7dmFyIGU9YS5zb3VyY2VDYWNoZXNbdC5zb3VyY2VJZF07aWYoZSl7dmFyIHI9ZS5nZXRTb3VyY2UoKTtpZihyJiZyLnZlY3RvckxheWVySWRzKWZvcih2YXIgbiBpbiBhLl9sYXllcnMpe3ZhciBpPWEuX2xheWVyc1tuXTtpLnNvdXJjZT09PXIuaWQmJmEuX3ZhbGlkYXRlTGF5ZXIoaSl9fX19KX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZFVSTD1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7dm9pZCAwPT09ciYmKHI9e30pLHRoaXMuZmlyZShuZXcgdC5FdmVudChcImRhdGFsb2FkaW5nXCIse2RhdGFUeXBlOlwic3R5bGVcIn0pKTt2YXIgaT1cImJvb2xlYW5cIj09dHlwZW9mIHIudmFsaWRhdGU/ci52YWxpZGF0ZToheChlKTtlPWZ1bmN0aW9uKHQsZSl7aWYoIXgodCkpcmV0dXJuIHQ7dmFyIHI9VCh0KTtyZXR1cm4gci5wYXRoPVwiL3N0eWxlcy92MVwiK3IucGF0aCx5KHIsZSl9KGUsci5hY2Nlc3NUb2tlbik7dmFyIGE9dGhpcy5tYXAuX3RyYW5zZm9ybVJlcXVlc3QoZSx0LlJlc291cmNlVHlwZS5TdHlsZSk7dC5nZXRKU09OKGEsZnVuY3Rpb24oZSxyKXtlP24uZmlyZShuZXcgdC5FcnJvckV2ZW50KGUpKTpyJiZuLl9sb2FkKHIsaSl9KX0sci5wcm90b3R5cGUubG9hZEpTT049ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO3ZvaWQgMD09PXImJihyPXt9KSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhbG9hZGluZ1wiLHtkYXRhVHlwZTpcInN0eWxlXCJ9KSksYS5mcmFtZShmdW5jdGlvbigpe24uX2xvYWQoZSwhMSE9PXIudmFsaWRhdGUpfSl9LHIucHJvdG90eXBlLl9sb2FkPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcztpZighcnx8IVhlKHRoaXMsdC52YWxpZGF0ZVN0eWxlKGUpKSl7Zm9yKHZhciBpIGluIHRoaXMuX2xvYWRlZD0hMCx0aGlzLnN0eWxlc2hlZXQ9ZSxlLnNvdXJjZXMpbi5hZGRTb3VyY2UoaSxlLnNvdXJjZXNbaV0se3ZhbGlkYXRlOiExfSk7ZS5zcHJpdGU/ZnVuY3Rpb24oZSxyLG4pe3ZhciBpLG8scyxsPWEuZGV2aWNlUGl4ZWxSYXRpbz4xP1wiQDJ4XCI6XCJcIjtmdW5jdGlvbiBjKCl7aWYocyluKHMpO2Vsc2UgaWYoaSYmbyl7dmFyIGU9YS5nZXRJbWFnZURhdGEobykscj17fTtmb3IodmFyIGwgaW4gaSl7dmFyIGM9aVtsXSx1PWMud2lkdGgsaD1jLmhlaWdodCxmPWMueCxwPWMueSxkPWMuc2RmLGc9Yy5waXhlbFJhdGlvLHY9bmV3IHQuUkdCQUltYWdlKHt3aWR0aDp1LGhlaWdodDpofSk7dC5SR0JBSW1hZ2UuY29weShlLHYse3g6Zix5OnB9LHt4OjAseTowfSx7d2lkdGg6dSxoZWlnaHQ6aH0pLHJbbF09e2RhdGE6dixwaXhlbFJhdGlvOmcsc2RmOmR9fW4obnVsbCxyKX19dC5nZXRKU09OKHIoXyhlLGwsXCIuanNvblwiKSx0LlJlc291cmNlVHlwZS5TcHJpdGVKU09OKSxmdW5jdGlvbih0LGUpe3N8fChzPXQsaT1lLGMoKSl9KSx0LmdldEltYWdlKHIoXyhlLGwsXCIucG5nXCIpLHQuUmVzb3VyY2VUeXBlLlNwcml0ZUltYWdlKSxmdW5jdGlvbih0LGUpe3N8fChzPXQsbz1lLGMoKSl9KX0oZS5zcHJpdGUsdGhpcy5tYXAuX3RyYW5zZm9ybVJlcXVlc3QsZnVuY3Rpb24oZSxyKXtpZihlKW4uZmlyZShuZXcgdC5FcnJvckV2ZW50KGUpKTtlbHNlIGlmKHIpZm9yKHZhciBpIGluIHIpbi5pbWFnZU1hbmFnZXIuYWRkSW1hZ2UoaSxyW2ldKTtuLmltYWdlTWFuYWdlci5zZXRMb2FkZWQoITApLG4uZmlyZShuZXcgdC5FdmVudChcImRhdGFcIix7ZGF0YVR5cGU6XCJzdHlsZVwifSkpfSk6dGhpcy5pbWFnZU1hbmFnZXIuc2V0TG9hZGVkKCEwKSx0aGlzLmdseXBoTWFuYWdlci5zZXRVUkwoZS5nbHlwaHMpO3ZhciBvPXRlKHRoaXMuc3R5bGVzaGVldC5sYXllcnMpO3RoaXMuX29yZGVyPW8ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSksdGhpcy5fbGF5ZXJzPXt9O2Zvcih2YXIgcz0wLGw9bztzPGwubGVuZ3RoO3MrPTEpe3ZhciBjPWxbc107KGM9dC5kZWZhdWx0JDIyKGMpKS5zZXRFdmVudGVkUGFyZW50KG4se2xheWVyOntpZDpjLmlkfX0pLG4uX2xheWVyc1tjLmlkXT1jfXRoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QoXCJzZXRMYXllcnNcIix0aGlzLl9zZXJpYWxpemVMYXllcnModGhpcy5fb3JkZXIpKSx0aGlzLmxpZ2h0PW5ldyBWKHRoaXMuc3R5bGVzaGVldC5saWdodCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YVwiLHtkYXRhVHlwZTpcInN0eWxlXCJ9KSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwic3R5bGUubG9hZFwiKSl9fSxyLnByb3RvdHlwZS5fdmFsaWRhdGVMYXllcj1mdW5jdGlvbihlKXt2YXIgcj10aGlzLnNvdXJjZUNhY2hlc1tlLnNvdXJjZV07aWYocil7dmFyIG49ZS5zb3VyY2VMYXllcjtpZihuKXt2YXIgaT1yLmdldFNvdXJjZSgpOyhcImdlb2pzb25cIj09PWkudHlwZXx8aS52ZWN0b3JMYXllcklkcyYmLTE9PT1pLnZlY3RvckxheWVySWRzLmluZGV4T2YobikpJiZ0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ1NvdXJjZSBsYXllciBcIicrbisnXCIgZG9lcyBub3QgZXhpc3Qgb24gc291cmNlIFwiJytpLmlkKydcIiBhcyBzcGVjaWZpZWQgYnkgc3R5bGUgbGF5ZXIgXCInK2UuaWQrJ1wiJykpKX19fSxyLnByb3RvdHlwZS5sb2FkZWQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkKXJldHVybiExO2lmKE9iamVjdC5rZXlzKHRoaXMuX3VwZGF0ZWRTb3VyY2VzKS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciB0IGluIHRoaXMuc291cmNlQ2FjaGVzKWlmKCF0aGlzLnNvdXJjZUNhY2hlc1t0XS5sb2FkZWQoKSlyZXR1cm4hMTtyZXR1cm4hIXRoaXMuaW1hZ2VNYW5hZ2VyLmlzTG9hZGVkKCl9LHIucHJvdG90eXBlLl9zZXJpYWxpemVMYXllcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xheWVyc1t0XS5zZXJpYWxpemUoKX0pfSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9ucz1mdW5jdGlvbigpe2lmKHRoaXMubGlnaHQmJnRoaXMubGlnaHQuaGFzVHJhbnNpdGlvbigpKXJldHVybiEwO2Zvcih2YXIgdCBpbiB0aGlzLnNvdXJjZUNhY2hlcylpZih0aGlzLnNvdXJjZUNhY2hlc1t0XS5oYXNUcmFuc2l0aW9uKCkpcmV0dXJuITA7Zm9yKHZhciBlIGluIHRoaXMuX2xheWVycylpZih0aGlzLl9sYXllcnNbZV0uaGFzVHJhbnNpdGlvbigpKXJldHVybiEwO3JldHVybiExfSxyLnByb3RvdHlwZS5fY2hlY2tMb2FkZWQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkKXRocm93IG5ldyBFcnJvcihcIlN0eWxlIGlzIG5vdCBkb25lIGxvYWRpbmdcIil9LHIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlKXtpZih0aGlzLl9sb2FkZWQpe2lmKHRoaXMuX2NoYW5nZWQpe3ZhciByPU9iamVjdC5rZXlzKHRoaXMuX3VwZGF0ZWRMYXllcnMpLG49T2JqZWN0LmtleXModGhpcy5fcmVtb3ZlZExheWVycyk7Zm9yKHZhciBpIGluKHIubGVuZ3RofHxuLmxlbmd0aCkmJnRoaXMuX3VwZGF0ZVdvcmtlckxheWVycyhyLG4pLHRoaXMuX3VwZGF0ZWRTb3VyY2VzKXt2YXIgYT10aGlzLl91cGRhdGVkU291cmNlc1tpXTtcInJlbG9hZFwiPT09YT90aGlzLl9yZWxvYWRTb3VyY2UoaSk6XCJjbGVhclwiPT09YSYmdGhpcy5fY2xlYXJTb3VyY2UoaSl9Zm9yKHZhciBvIGluIHRoaXMuX3VwZGF0ZWRQYWludFByb3BzKXRoaXMuX2xheWVyc1tvXS51cGRhdGVUcmFuc2l0aW9ucyhlKTt0aGlzLmxpZ2h0LnVwZGF0ZVRyYW5zaXRpb25zKGUpLHRoaXMuX3Jlc2V0VXBkYXRlcygpLHRoaXMuZmlyZShuZXcgdC5FdmVudChcImRhdGFcIix7ZGF0YVR5cGU6XCJzdHlsZVwifSkpfWZvcih2YXIgcyBpbiB0aGlzLnNvdXJjZUNhY2hlcyl0aGlzLnNvdXJjZUNhY2hlc1tzXS51c2VkPSExO2Zvcih2YXIgbD0wLGM9dGhpcy5fb3JkZXI7bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdLGg9dGhpcy5fbGF5ZXJzW3VdO2gucmVjYWxjdWxhdGUoZSksIWguaXNIaWRkZW4oZS56b29tKSYmaC5zb3VyY2UmJih0aGlzLnNvdXJjZUNhY2hlc1toLnNvdXJjZV0udXNlZD0hMCl9dGhpcy5saWdodC5yZWNhbGN1bGF0ZShlKSx0aGlzLno9ZS56b29tfX0sci5wcm90b3R5cGUuX3VwZGF0ZVdvcmtlckxheWVycz1mdW5jdGlvbih0LGUpe3RoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QoXCJ1cGRhdGVMYXllcnNcIix7bGF5ZXJzOnRoaXMuX3NlcmlhbGl6ZUxheWVycyh0KSxyZW1vdmVkSWRzOmV9KX0sci5wcm90b3R5cGUuX3Jlc2V0VXBkYXRlcz1mdW5jdGlvbigpe3RoaXMuX2NoYW5nZWQ9ITEsdGhpcy5fdXBkYXRlZExheWVycz17fSx0aGlzLl9yZW1vdmVkTGF5ZXJzPXt9LHRoaXMuX3VwZGF0ZWRTb3VyY2VzPXt9LHRoaXMuX3VwZGF0ZWRQYWludFByb3BzPXt9fSxyLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzO2lmKHRoaXMuX2NoZWNrTG9hZGVkKCksWGUodGhpcyx0LnZhbGlkYXRlU3R5bGUoZSkpKXJldHVybiExOyhlPXQuY2xvbmUoZSkpLmxheWVycz10ZShlLmxheWVycyk7dmFyIG49ZnVuY3Rpb24oZSxyKXtpZighZSlyZXR1cm5be2NvbW1hbmQ6ZWUuc2V0U3R5bGUsYXJnczpbcl19XTt2YXIgbj1bXTt0cnl7aWYoIXQuZGVmYXVsdCQxMChlLnZlcnNpb24sci52ZXJzaW9uKSlyZXR1cm5be2NvbW1hbmQ6ZWUuc2V0U3R5bGUsYXJnczpbcl19XTt0LmRlZmF1bHQkMTAoZS5jZW50ZXIsci5jZW50ZXIpfHxuLnB1c2goe2NvbW1hbmQ6ZWUuc2V0Q2VudGVyLGFyZ3M6W3IuY2VudGVyXX0pLHQuZGVmYXVsdCQxMChlLnpvb20sci56b29tKXx8bi5wdXNoKHtjb21tYW5kOmVlLnNldFpvb20sYXJnczpbci56b29tXX0pLHQuZGVmYXVsdCQxMChlLmJlYXJpbmcsci5iZWFyaW5nKXx8bi5wdXNoKHtjb21tYW5kOmVlLnNldEJlYXJpbmcsYXJnczpbci5iZWFyaW5nXX0pLHQuZGVmYXVsdCQxMChlLnBpdGNoLHIucGl0Y2gpfHxuLnB1c2goe2NvbW1hbmQ6ZWUuc2V0UGl0Y2gsYXJnczpbci5waXRjaF19KSx0LmRlZmF1bHQkMTAoZS5zcHJpdGUsci5zcHJpdGUpfHxuLnB1c2goe2NvbW1hbmQ6ZWUuc2V0U3ByaXRlLGFyZ3M6W3Iuc3ByaXRlXX0pLHQuZGVmYXVsdCQxMChlLmdseXBocyxyLmdseXBocyl8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRHbHlwaHMsYXJnczpbci5nbHlwaHNdfSksdC5kZWZhdWx0JDEwKGUudHJhbnNpdGlvbixyLnRyYW5zaXRpb24pfHxuLnB1c2goe2NvbW1hbmQ6ZWUuc2V0VHJhbnNpdGlvbixhcmdzOltyLnRyYW5zaXRpb25dfSksdC5kZWZhdWx0JDEwKGUubGlnaHQsci5saWdodCl8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRMaWdodCxhcmdzOltyLmxpZ2h0XX0pO3ZhciBpPXt9LGE9W107IWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhO2ZvcihhIGluIHI9cnx8e30sZT1lfHx7fSllLmhhc093blByb3BlcnR5KGEpJiYoci5oYXNPd25Qcm9wZXJ0eShhKXx8bmUoYSxuLGkpKTtmb3IoYSBpbiByKXIuaGFzT3duUHJvcGVydHkoYSkmJihlLmhhc093blByb3BlcnR5KGEpP3QuZGVmYXVsdCQxMChlW2FdLHJbYV0pfHwoXCJnZW9qc29uXCI9PT1lW2FdLnR5cGUmJlwiZ2VvanNvblwiPT09clthXS50eXBlJiZhZShlLHIsYSk/bi5wdXNoKHtjb21tYW5kOmVlLnNldEdlb0pTT05Tb3VyY2VEYXRhLGFyZ3M6W2EsclthXS5kYXRhXX0pOmllKGEscixuLGkpKTpyZShhLHIsbikpfShlLnNvdXJjZXMsci5zb3VyY2VzLGEsaSk7dmFyIG89W107ZS5sYXllcnMmJmUubGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7aVt0LnNvdXJjZV0/bi5wdXNoKHtjb21tYW5kOmVlLnJlbW92ZUxheWVyLGFyZ3M6W3QuaWRdfSk6by5wdXNoKHQpfSksbj1uLmNvbmNhdChhKSxmdW5jdGlvbihlLHIsbil7cj1yfHxbXTt2YXIgaSxhLG8scyxsLGMsdSxoPShlPWV8fFtdKS5tYXAoc2UpLGY9ci5tYXAoc2UpLHA9ZS5yZWR1Y2UobGUse30pLGQ9ci5yZWR1Y2UobGUse30pLGc9aC5zbGljZSgpLHY9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IoaT0wLGE9MDtpPGgubGVuZ3RoO2krKylvPWhbaV0sZC5oYXNPd25Qcm9wZXJ0eShvKT9hKys6KG4ucHVzaCh7Y29tbWFuZDplZS5yZW1vdmVMYXllcixhcmdzOltvXX0pLGcuc3BsaWNlKGcuaW5kZXhPZihvLGEpLDEpKTtmb3IoaT0wLGE9MDtpPGYubGVuZ3RoO2krKylvPWZbZi5sZW5ndGgtMS1pXSxnW2cubGVuZ3RoLTEtaV0hPT1vJiYocC5oYXNPd25Qcm9wZXJ0eShvKT8obi5wdXNoKHtjb21tYW5kOmVlLnJlbW92ZUxheWVyLGFyZ3M6W29dfSksZy5zcGxpY2UoZy5sYXN0SW5kZXhPZihvLGcubGVuZ3RoLWEpLDEpKTphKyssYz1nW2cubGVuZ3RoLWldLG4ucHVzaCh7Y29tbWFuZDplZS5hZGRMYXllcixhcmdzOltkW29dLGNdfSksZy5zcGxpY2UoZy5sZW5ndGgtaSwwLG8pLHZbb109ITApO2ZvcihpPTA7aTxmLmxlbmd0aDtpKyspaWYocz1wW289ZltpXV0sbD1kW29dLCF2W29dJiYhdC5kZWZhdWx0JDEwKHMsbCkpaWYodC5kZWZhdWx0JDEwKHMuc291cmNlLGwuc291cmNlKSYmdC5kZWZhdWx0JDEwKHNbXCJzb3VyY2UtbGF5ZXJcIl0sbFtcInNvdXJjZS1sYXllclwiXSkmJnQuZGVmYXVsdCQxMChzLnR5cGUsbC50eXBlKSl7Zm9yKHUgaW4gb2Uocy5sYXlvdXQsbC5sYXlvdXQsbixvLG51bGwsZWUuc2V0TGF5b3V0UHJvcGVydHkpLG9lKHMucGFpbnQsbC5wYWludCxuLG8sbnVsbCxlZS5zZXRQYWludFByb3BlcnR5KSx0LmRlZmF1bHQkMTAocy5maWx0ZXIsbC5maWx0ZXIpfHxuLnB1c2goe2NvbW1hbmQ6ZWUuc2V0RmlsdGVyLGFyZ3M6W28sbC5maWx0ZXJdfSksdC5kZWZhdWx0JDEwKHMubWluem9vbSxsLm1pbnpvb20pJiZ0LmRlZmF1bHQkMTAocy5tYXh6b29tLGwubWF4em9vbSl8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRMYXllclpvb21SYW5nZSxhcmdzOltvLGwubWluem9vbSxsLm1heHpvb21dfSkscylzLmhhc093blByb3BlcnR5KHUpJiZcImxheW91dFwiIT09dSYmXCJwYWludFwiIT09dSYmXCJmaWx0ZXJcIiE9PXUmJlwibWV0YWRhdGFcIiE9PXUmJlwibWluem9vbVwiIT09dSYmXCJtYXh6b29tXCIhPT11JiYoMD09PXUuaW5kZXhPZihcInBhaW50LlwiKT9vZShzW3VdLGxbdV0sbixvLHUuc2xpY2UoNiksZWUuc2V0UGFpbnRQcm9wZXJ0eSk6dC5kZWZhdWx0JDEwKHNbdV0sbFt1XSl8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRMYXllclByb3BlcnR5LGFyZ3M6W28sdSxsW3VdXX0pKTtmb3IodSBpbiBsKWwuaGFzT3duUHJvcGVydHkodSkmJiFzLmhhc093blByb3BlcnR5KHUpJiZcImxheW91dFwiIT09dSYmXCJwYWludFwiIT09dSYmXCJmaWx0ZXJcIiE9PXUmJlwibWV0YWRhdGFcIiE9PXUmJlwibWluem9vbVwiIT09dSYmXCJtYXh6b29tXCIhPT11JiYoMD09PXUuaW5kZXhPZihcInBhaW50LlwiKT9vZShzW3VdLGxbdV0sbixvLHUuc2xpY2UoNiksZWUuc2V0UGFpbnRQcm9wZXJ0eSk6dC5kZWZhdWx0JDEwKHNbdV0sbFt1XSl8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRMYXllclByb3BlcnR5LGFyZ3M6W28sdSxsW3VdXX0pKX1lbHNlIG4ucHVzaCh7Y29tbWFuZDplZS5yZW1vdmVMYXllcixhcmdzOltvXX0pLGM9Z1tnLmxhc3RJbmRleE9mKG8pKzFdLG4ucHVzaCh7Y29tbWFuZDplZS5hZGRMYXllcixhcmdzOltsLGNdfSl9KG8sci5sYXllcnMsbil9Y2F0Y2godCl7Y29uc29sZS53YXJuKFwiVW5hYmxlIHRvIGNvbXB1dGUgc3R5bGUgZGlmZjpcIix0KSxuPVt7Y29tbWFuZDplZS5zZXRTdHlsZSxhcmdzOltyXX1dfXJldHVybiBufSh0aGlzLnNlcmlhbGl6ZSgpLGUpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hKHQuY29tbWFuZCBpbiAkZSl9KTtpZigwPT09bi5sZW5ndGgpcmV0dXJuITE7dmFyIGk9bi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuISh0LmNvbW1hbmQgaW4gWmUpfSk7aWYoaS5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoXCJVbmltcGxlbWVudGVkOiBcIitpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb21tYW5kfSkuam9pbihcIiwgXCIpK1wiLlwiKTtyZXR1cm4gbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe1wic2V0VHJhbnNpdGlvblwiIT09dC5jb21tYW5kJiZyW3QuY29tbWFuZF0uYXBwbHkocix0LmFyZ3MpfSksdGhpcy5zdHlsZXNoZWV0PWUsITB9LHIucHJvdG90eXBlLmFkZEltYWdlPWZ1bmN0aW9uKGUscil7aWYodGhpcy5nZXRJbWFnZShlKSlyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKFwiQW4gaW1hZ2Ugd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMuXCIpKSk7dGhpcy5pbWFnZU1hbmFnZXIuYWRkSW1hZ2UoZSxyKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhXCIse2RhdGFUeXBlOlwic3R5bGVcIn0pKX0sci5wcm90b3R5cGUuZ2V0SW1hZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW1hZ2VNYW5hZ2VyLmdldEltYWdlKHQpfSxyLnByb3RvdHlwZS5yZW1vdmVJbWFnZT1mdW5jdGlvbihlKXtpZighdGhpcy5nZXRJbWFnZShlKSlyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKFwiTm8gaW1hZ2Ugd2l0aCB0aGlzIG5hbWUgZXhpc3RzLlwiKSkpO3RoaXMuaW1hZ2VNYW5hZ2VyLnJlbW92ZUltYWdlKGUpLHRoaXMuZmlyZShuZXcgdC5FdmVudChcImRhdGFcIix7ZGF0YVR5cGU6XCJzdHlsZVwifSkpfSxyLnByb3RvdHlwZS5hZGRTb3VyY2U9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXRoaXM7aWYodGhpcy5fY2hlY2tMb2FkZWQoKSx2b2lkIDAhPT10aGlzLnNvdXJjZUNhY2hlc1tlXSl0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBhbHJlYWR5IGEgc291cmNlIHdpdGggdGhpcyBJRFwiKTtpZighci50eXBlKXRocm93IG5ldyBFcnJvcihcIlRoZSB0eXBlIHByb3BlcnR5IG11c3QgYmUgZGVmaW5lZCwgYnV0IHRoZSBvbmx5IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyB3ZXJlIGdpdmVuOiBcIitPYmplY3Qua2V5cyhyKS5qb2luKFwiLCBcIikrXCIuXCIpO2lmKCEoW1widmVjdG9yXCIsXCJyYXN0ZXJcIixcImdlb2pzb25cIixcInZpZGVvXCIsXCJpbWFnZVwiXS5pbmRleE9mKHIudHlwZSk+PTAmJnRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVTdHlsZS5zb3VyY2UsXCJzb3VyY2VzLlwiK2UscixudWxsLG4pKSl7dGhpcy5tYXAmJnRoaXMubWFwLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcmJihyLmNvbGxlY3RSZXNvdXJjZVRpbWluZz0hMCk7dmFyIGE9dGhpcy5zb3VyY2VDYWNoZXNbZV09bmV3IFd0KGUscix0aGlzLmRpc3BhdGNoZXIpO2Euc3R5bGU9dGhpcyxhLnNldEV2ZW50ZWRQYXJlbnQodGhpcyxmdW5jdGlvbigpe3JldHVybntpc1NvdXJjZUxvYWRlZDppLmxvYWRlZCgpLHNvdXJjZTphLnNlcmlhbGl6ZSgpLHNvdXJjZUlkOmV9fSksYS5vbkFkZCh0aGlzLm1hcCksdGhpcy5fY2hhbmdlZD0hMH19LHIucHJvdG90eXBlLnJlbW92ZVNvdXJjZT1mdW5jdGlvbihlKXtpZih0aGlzLl9jaGVja0xvYWRlZCgpLHZvaWQgMD09PXRoaXMuc291cmNlQ2FjaGVzW2VdKXRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIHNvdXJjZSB3aXRoIHRoaXMgSURcIik7Zm9yKHZhciByIGluIHRoaXMuX2xheWVycylpZih0aGlzLl9sYXllcnNbcl0uc291cmNlPT09ZSlyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCdTb3VyY2UgXCInK2UrJ1wiIGNhbm5vdCBiZSByZW1vdmVkIHdoaWxlIGxheWVyIFwiJytyKydcIiBpcyB1c2luZyBpdC4nKSkpO3ZhciBuPXRoaXMuc291cmNlQ2FjaGVzW2VdO2RlbGV0ZSB0aGlzLnNvdXJjZUNhY2hlc1tlXSxkZWxldGUgdGhpcy5fdXBkYXRlZFNvdXJjZXNbZV0sbi5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YVwiLHtzb3VyY2VEYXRhVHlwZTpcIm1ldGFkYXRhXCIsZGF0YVR5cGU6XCJzb3VyY2VcIixzb3VyY2VJZDplfSkpLG4uc2V0RXZlbnRlZFBhcmVudChudWxsKSxuLmNsZWFyVGlsZXMoKSxuLm9uUmVtb3ZlJiZuLm9uUmVtb3ZlKHRoaXMubWFwKSx0aGlzLl9jaGFuZ2VkPSEwfSxyLnByb3RvdHlwZS5zZXRHZW9KU09OU291cmNlRGF0YT1mdW5jdGlvbih0LGUpe3RoaXMuX2NoZWNrTG9hZGVkKCksdGhpcy5zb3VyY2VDYWNoZXNbdF0uZ2V0U291cmNlKCkuc2V0RGF0YShlKSx0aGlzLl9jaGFuZ2VkPSEwfSxyLnByb3RvdHlwZS5nZXRTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc291cmNlQ2FjaGVzW3RdJiZ0aGlzLnNvdXJjZUNhY2hlc1t0XS5nZXRTb3VyY2UoKX0sci5wcm90b3R5cGUuYWRkTGF5ZXI9ZnVuY3Rpb24oZSxyLG4pe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIGk9ZS5pZDtpZih0aGlzLmdldExheWVyKGkpKXRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignTGF5ZXIgd2l0aCBpZCBcIicraSsnXCIgYWxyZWFkeSBleGlzdHMgb24gdGhpcyBtYXAnKSkpO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIGUuc291cmNlJiYodGhpcy5hZGRTb3VyY2UoaSxlLnNvdXJjZSksZT10LmNsb25lKGUpLGU9dC5leHRlbmQoZSx7c291cmNlOml9KSksIXRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVTdHlsZS5sYXllcixcImxheWVycy5cIitpLGUse2FycmF5SW5kZXg6LTF9LG4pKXt2YXIgYT10LmRlZmF1bHQkMjIoZSk7dGhpcy5fdmFsaWRhdGVMYXllcihhKSxhLnNldEV2ZW50ZWRQYXJlbnQodGhpcyx7bGF5ZXI6e2lkOml9fSk7dmFyIG89cj90aGlzLl9vcmRlci5pbmRleE9mKHIpOnRoaXMuX29yZGVyLmxlbmd0aDtpZihyJiYtMT09PW8pdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCdMYXllciB3aXRoIGlkIFwiJytyKydcIiBkb2VzIG5vdCBleGlzdCBvbiB0aGlzIG1hcC4nKSkpO2Vsc2V7aWYodGhpcy5fb3JkZXIuc3BsaWNlKG8sMCxpKSx0aGlzLl9sYXllck9yZGVyQ2hhbmdlZD0hMCx0aGlzLl9sYXllcnNbaV09YSx0aGlzLl9yZW1vdmVkTGF5ZXJzW2ldJiZhLnNvdXJjZSl7dmFyIHM9dGhpcy5fcmVtb3ZlZExheWVyc1tpXTtkZWxldGUgdGhpcy5fcmVtb3ZlZExheWVyc1tpXSxzLnR5cGUhPT1hLnR5cGU/dGhpcy5fdXBkYXRlZFNvdXJjZXNbYS5zb3VyY2VdPVwiY2xlYXJcIjoodGhpcy5fdXBkYXRlZFNvdXJjZXNbYS5zb3VyY2VdPVwicmVsb2FkXCIsdGhpcy5zb3VyY2VDYWNoZXNbYS5zb3VyY2VdLnBhdXNlKCkpfXRoaXMuX3VwZGF0ZUxheWVyKGEpfX19LHIucHJvdG90eXBlLm1vdmVMYXllcj1mdW5jdGlvbihlLHIpe2lmKHRoaXMuX2NoZWNrTG9hZGVkKCksdGhpcy5fY2hhbmdlZD0hMCx0aGlzLl9sYXllcnNbZV0pe2lmKGUhPT1yKXt2YXIgbj10aGlzLl9vcmRlci5pbmRleE9mKGUpO3RoaXMuX29yZGVyLnNwbGljZShuLDEpO3ZhciBpPXI/dGhpcy5fb3JkZXIuaW5kZXhPZihyKTp0aGlzLl9vcmRlci5sZW5ndGg7ciYmLTE9PT1pP3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignTGF5ZXIgd2l0aCBpZCBcIicrcisnXCIgZG9lcyBub3QgZXhpc3Qgb24gdGhpcyBtYXAuJykpKToodGhpcy5fb3JkZXIuc3BsaWNlKGksMCxlKSx0aGlzLl9sYXllck9yZGVyQ2hhbmdlZD0hMCl9fWVsc2UgdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKFwiVGhlIGxheWVyICdcIitlK1wiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBtb3ZlZC5cIikpKX0sci5wcm90b3R5cGUucmVtb3ZlTGF5ZXI9ZnVuY3Rpb24oZSl7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgcj10aGlzLl9sYXllcnNbZV07aWYocil7ci5zZXRFdmVudGVkUGFyZW50KG51bGwpO3ZhciBuPXRoaXMuX29yZGVyLmluZGV4T2YoZSk7dGhpcy5fb3JkZXIuc3BsaWNlKG4sMSksdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQ9ITAsdGhpcy5fY2hhbmdlZD0hMCx0aGlzLl9yZW1vdmVkTGF5ZXJzW2VdPXIsZGVsZXRlIHRoaXMuX2xheWVyc1tlXSxkZWxldGUgdGhpcy5fdXBkYXRlZExheWVyc1tlXSxkZWxldGUgdGhpcy5fdXBkYXRlZFBhaW50UHJvcHNbZV19ZWxzZSB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoXCJUaGUgbGF5ZXIgJ1wiK2UrXCInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIHJlbW92ZWQuXCIpKSl9LHIucHJvdG90eXBlLmdldExheWVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sYXllcnNbdF19LHIucHJvdG90eXBlLnNldExheWVyWm9vbVJhbmdlPWZ1bmN0aW9uKGUscixuKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBpPXRoaXMuZ2V0TGF5ZXIoZSk7aT9pLm1pbnpvb209PT1yJiZpLm1heHpvb209PT1ufHwobnVsbCE9ciYmKGkubWluem9vbT1yKSxudWxsIT1uJiYoaS5tYXh6b29tPW4pLHRoaXMuX3VwZGF0ZUxheWVyKGkpKTp0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoXCJUaGUgbGF5ZXIgJ1wiK2UrXCInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGhhdmUgem9vbSBleHRlbnQuXCIpKSl9LHIucHJvdG90eXBlLnNldEZpbHRlcj1mdW5jdGlvbihlLHIpe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIG49dGhpcy5nZXRMYXllcihlKTtpZihuKXtpZighdC5kZWZhdWx0JDEwKG4uZmlsdGVyLHIpKXJldHVybiBudWxsPT1yPyhuLmZpbHRlcj12b2lkIDAsdm9pZCB0aGlzLl91cGRhdGVMYXllcihuKSk6dm9pZCh0aGlzLl92YWxpZGF0ZSh0LnZhbGlkYXRlU3R5bGUuZmlsdGVyLFwibGF5ZXJzLlwiK24uaWQrXCIuZmlsdGVyXCIscil8fChuLmZpbHRlcj10LmNsb25lKHIpLHRoaXMuX3VwZGF0ZUxheWVyKG4pKSl9ZWxzZSB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoXCJUaGUgbGF5ZXIgJ1wiK2UrXCInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIGZpbHRlcmVkLlwiKSkpfSxyLnByb3RvdHlwZS5nZXRGaWx0ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuY2xvbmUodGhpcy5nZXRMYXllcihlKS5maWx0ZXIpfSxyLnByb3RvdHlwZS5zZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbihlLHIsbil7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgaT10aGlzLmdldExheWVyKGUpO2k/dC5kZWZhdWx0JDEwKGkuZ2V0TGF5b3V0UHJvcGVydHkociksbil8fChpLnNldExheW91dFByb3BlcnR5KHIsbiksdGhpcy5fdXBkYXRlTGF5ZXIoaSkpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcihcIlRoZSBsYXllciAnXCIrZStcIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgc3R5bGVkLlwiKSkpfSxyLnByb3RvdHlwZS5nZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmdldExheWVyKHQpLmdldExheW91dFByb3BlcnR5KGUpfSxyLnByb3RvdHlwZS5zZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKGUscixuKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBpPXRoaXMuZ2V0TGF5ZXIoZSk7aWYoaSl7aWYoIXQuZGVmYXVsdCQxMChpLmdldFBhaW50UHJvcGVydHkociksbikpe3ZhciBhPWkuX3RyYW5zaXRpb25hYmxlUGFpbnQuX3ZhbHVlc1tyXS52YWx1ZS5pc0RhdGFEcml2ZW4oKTtpLnNldFBhaW50UHJvcGVydHkocixuKSwoaS5fdHJhbnNpdGlvbmFibGVQYWludC5fdmFsdWVzW3JdLnZhbHVlLmlzRGF0YURyaXZlbigpfHxhKSYmdGhpcy5fdXBkYXRlTGF5ZXIoaSksdGhpcy5fY2hhbmdlZD0hMCx0aGlzLl91cGRhdGVkUGFpbnRQcm9wc1tlXT0hMH19ZWxzZSB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoXCJUaGUgbGF5ZXIgJ1wiK2UrXCInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIHN0eWxlZC5cIikpKX0sci5wcm90b3R5cGUuZ2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmdldExheWVyKHQpLmdldFBhaW50UHJvcGVydHkoZSl9LHIucHJvdG90eXBlLmdldFRyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdC5leHRlbmQoe2R1cmF0aW9uOjMwMCxkZWxheTowfSx0aGlzLnN0eWxlc2hlZXQmJnRoaXMuc3R5bGVzaGVldC50cmFuc2l0aW9uKX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gdC5maWx0ZXJPYmplY3Qoe3ZlcnNpb246dGhpcy5zdHlsZXNoZWV0LnZlcnNpb24sbmFtZTp0aGlzLnN0eWxlc2hlZXQubmFtZSxtZXRhZGF0YTp0aGlzLnN0eWxlc2hlZXQubWV0YWRhdGEsbGlnaHQ6dGhpcy5zdHlsZXNoZWV0LmxpZ2h0LGNlbnRlcjp0aGlzLnN0eWxlc2hlZXQuY2VudGVyLHpvb206dGhpcy5zdHlsZXNoZWV0Lnpvb20sYmVhcmluZzp0aGlzLnN0eWxlc2hlZXQuYmVhcmluZyxwaXRjaDp0aGlzLnN0eWxlc2hlZXQucGl0Y2gsc3ByaXRlOnRoaXMuc3R5bGVzaGVldC5zcHJpdGUsZ2x5cGhzOnRoaXMuc3R5bGVzaGVldC5nbHlwaHMsdHJhbnNpdGlvbjp0aGlzLnN0eWxlc2hlZXQudHJhbnNpdGlvbixzb3VyY2VzOnQubWFwT2JqZWN0KHRoaXMuc291cmNlQ2FjaGVzLGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlcmlhbGl6ZSgpfSksbGF5ZXJzOnRoaXMuX29yZGVyLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5fbGF5ZXJzW3RdLnNlcmlhbGl6ZSgpfSl9LGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10fSl9LHIucHJvdG90eXBlLl91cGRhdGVMYXllcj1mdW5jdGlvbih0KXt0aGlzLl91cGRhdGVkTGF5ZXJzW3QuaWRdPSEwLHQuc291cmNlJiYhdGhpcy5fdXBkYXRlZFNvdXJjZXNbdC5zb3VyY2VdJiYodGhpcy5fdXBkYXRlZFNvdXJjZXNbdC5zb3VyY2VdPVwicmVsb2FkXCIsdGhpcy5zb3VyY2VDYWNoZXNbdC5zb3VyY2VdLnBhdXNlKCkpLHRoaXMuX2NoYW5nZWQ9ITB9LHIucHJvdG90eXBlLl9mbGF0dGVuUmVuZGVyZWRGZWF0dXJlcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj10aGlzLl9vcmRlci5sZW5ndGgtMTtyPj0wO3ItLSlmb3IodmFyIG49dGhpcy5fb3JkZXJbcl0saT0wLGE9dDtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV1bbl07aWYobylmb3IodmFyIHM9MCxsPW87czxsLmxlbmd0aDtzKz0xKXt2YXIgYz1sW3NdO2UucHVzaChjKX19cmV0dXJuIGV9LHIucHJvdG90eXBlLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcz1mdW5jdGlvbihlLHIsbil7ciYmci5maWx0ZXImJnRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVTdHlsZS5maWx0ZXIsXCJxdWVyeVJlbmRlcmVkRmVhdHVyZXMuZmlsdGVyXCIsci5maWx0ZXIpO3ZhciBpPXt9O2lmKHImJnIubGF5ZXJzKXtpZighQXJyYXkuaXNBcnJheShyLmxheWVycykpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcihcInBhcmFtZXRlcnMubGF5ZXJzIG11c3QgYmUgYW4gQXJyYXkuXCIpKSksW107Zm9yKHZhciBhPTAsbz1yLmxheWVyczthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV0sbD10aGlzLl9sYXllcnNbc107aWYoIWwpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcihcIlRoZSBsYXllciAnXCIrcytcIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgcXVlcmllZCBmb3IgZmVhdHVyZXMuXCIpKSksW107aVtsLnNvdXJjZV09ITB9fXZhciBjPVtdO2Zvcih2YXIgdSBpbiB0aGlzLnNvdXJjZUNhY2hlcylyLmxheWVycyYmIWlbdV18fGMucHVzaChhdCh0aGlzLnNvdXJjZUNhY2hlc1t1XSx0aGlzLl9sYXllcnMsZS53b3JsZENvb3JkaW5hdGUscixuKSk7cmV0dXJuIHRoaXMucGxhY2VtZW50JiZjLnB1c2goZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9e30sbz1uLnF1ZXJ5UmVuZGVyZWRTeW1ib2xzKGUpLHM9W10sbD0wLGM9T2JqZWN0LmtleXMobykubWFwKE51bWJlcik7bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdO3MucHVzaChpW3VdKX1zLnNvcnQob3QpO2Zvcih2YXIgaD1mdW5jdGlvbigpe3ZhciBlPXBbZl0sbj1lLmZlYXR1cmVJbmRleC5sb29rdXBTeW1ib2xGZWF0dXJlcyhvW2UuYnVja2V0SW5zdGFuY2VJZF0sZS5idWNrZXRJbmRleCxlLnNvdXJjZUxheWVySW5kZXgsci5maWx0ZXIsci5sYXllcnMsdCk7Zm9yKHZhciBpIGluIG4pe3ZhciBzPWFbaV09YVtpXXx8W10sbD1uW2ldO2wuc29ydChmdW5jdGlvbih0LHIpe3ZhciBuPWUuZmVhdHVyZVNvcnRPcmRlcjtpZihuKXt2YXIgaT1uLmluZGV4T2YodC5mZWF0dXJlSW5kZXgpO3JldHVybiBuLmluZGV4T2Yoci5mZWF0dXJlSW5kZXgpLWl9cmV0dXJuIHIuZmVhdHVyZUluZGV4LXQuZmVhdHVyZUluZGV4fSk7Zm9yKHZhciBjPTAsdT1sO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGg9dVtjXTtzLnB1c2goaC5mZWF0dXJlKX19fSxmPTAscD1zO2Y8cC5sZW5ndGg7Zis9MSloKCk7cmV0dXJuIGF9KHRoaXMuX2xheWVycyxlLnZpZXdwb3J0LHIsdGhpcy5wbGFjZW1lbnQuY29sbGlzaW9uSW5kZXgsdGhpcy5wbGFjZW1lbnQucmV0YWluZWRRdWVyeURhdGEpKSx0aGlzLl9mbGF0dGVuUmVuZGVyZWRGZWF0dXJlcyhjKX0sci5wcm90b3R5cGUucXVlcnlTb3VyY2VGZWF0dXJlcz1mdW5jdGlvbihlLHIpe3ImJnIuZmlsdGVyJiZ0aGlzLl92YWxpZGF0ZSh0LnZhbGlkYXRlU3R5bGUuZmlsdGVyLFwicXVlcnlTb3VyY2VGZWF0dXJlcy5maWx0ZXJcIixyLmZpbHRlcik7dmFyIG49dGhpcy5zb3VyY2VDYWNoZXNbZV07cmV0dXJuIG4/ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5nZXRSZW5kZXJhYmxlSWRzKCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0LmdldFRpbGVCeUlEKGUpfSksbj1bXSxpPXt9LGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIG89clthXSxzPW8udGlsZUlELmNhbm9uaWNhbC5rZXk7aVtzXXx8KGlbc109ITAsby5xdWVyeVNvdXJjZUZlYXR1cmVzKG4sZSkpfXJldHVybiBufShuLHIpOltdfSxyLnByb3RvdHlwZS5hZGRTb3VyY2VUeXBlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gci5nZXRTb3VyY2VUeXBlKHQpP24obmV3IEVycm9yKCdBIHNvdXJjZSB0eXBlIGNhbGxlZCBcIicrdCsnXCIgYWxyZWFkeSBleGlzdHMuJykpOihyLnNldFNvdXJjZVR5cGUodCxlKSxlLndvcmtlclNvdXJjZVVSTD92b2lkIHRoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QoXCJsb2FkV29ya2VyU291cmNlXCIse25hbWU6dCx1cmw6ZS53b3JrZXJTb3VyY2VVUkx9LG4pOm4obnVsbCxudWxsKSl9LHIucHJvdG90eXBlLmdldExpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGlnaHQuZ2V0TGlnaHQoKX0sci5wcm90b3R5cGUuc2V0TGlnaHQ9ZnVuY3Rpb24oZSl7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgcj10aGlzLmxpZ2h0LmdldExpZ2h0KCksbj0hMTtmb3IodmFyIGkgaW4gZSlpZighdC5kZWZhdWx0JDEwKGVbaV0scltpXSkpe249ITA7YnJlYWt9aWYobil7dmFyIG89e25vdzphLm5vdygpLHRyYW5zaXRpb246dC5leHRlbmQoe2R1cmF0aW9uOjMwMCxkZWxheTowfSx0aGlzLnN0eWxlc2hlZXQudHJhbnNpdGlvbil9O3RoaXMubGlnaHQuc2V0TGlnaHQoZSksdGhpcy5saWdodC51cGRhdGVUcmFuc2l0aW9ucyhvKX19LHIucHJvdG90eXBlLl92YWxpZGF0ZT1mdW5jdGlvbihlLHIsbixpLGEpe3JldHVybighYXx8ITEhPT1hLnZhbGlkYXRlKSYmWGUodGhpcyxlLmNhbGwodC52YWxpZGF0ZVN0eWxlLHQuZXh0ZW5kKHtrZXk6cixzdHlsZTp0aGlzLnNlcmlhbGl6ZSgpLHZhbHVlOm4sc3R5bGVTcGVjOnQuZGVmYXVsdCQ1fSxpKSkpfSxyLnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHQuZXZlbnRlZC5vZmYoXCJwbHVnaW5BdmFpbGFibGVcIix0aGlzLl9ydGxUZXh0UGx1Z2luQ2FsbGJhY2spLHRoaXMuc291cmNlQ2FjaGVzKXRoaXMuc291cmNlQ2FjaGVzW2VdLmNsZWFyVGlsZXMoKTt0aGlzLmRpc3BhdGNoZXIucmVtb3ZlKCl9LHIucHJvdG90eXBlLl9jbGVhclNvdXJjZT1mdW5jdGlvbih0KXt0aGlzLnNvdXJjZUNhY2hlc1t0XS5jbGVhclRpbGVzKCl9LHIucHJvdG90eXBlLl9yZWxvYWRTb3VyY2U9ZnVuY3Rpb24odCl7dGhpcy5zb3VyY2VDYWNoZXNbdF0ucmVzdW1lKCksdGhpcy5zb3VyY2VDYWNoZXNbdF0ucmVsb2FkKCl9LHIucHJvdG90eXBlLl91cGRhdGVTb3VyY2VzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLnNvdXJjZUNhY2hlcyl0aGlzLnNvdXJjZUNhY2hlc1tlXS51cGRhdGUodCl9LHIucHJvdG90eXBlLl9nZW5lcmF0ZUNvbGxpc2lvbkJveGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuc291cmNlQ2FjaGVzKXRoaXMuX3JlbG9hZFNvdXJjZSh0KX0sci5wcm90b3R5cGUuX3VwZGF0ZVBsYWNlbWVudD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPSExLGk9ITEsbz17fSxzPTAsbD10aGlzLl9vcmRlcjtzPGwubGVuZ3RoO3MrPTEpe3ZhciBjPWxbc10sdT10aGlzLl9sYXllcnNbY107aWYoXCJzeW1ib2xcIj09PXUudHlwZSl7aWYoIW9bdS5zb3VyY2VdKXt2YXIgaD10aGlzLnNvdXJjZUNhY2hlc1t1LnNvdXJjZV07b1t1LnNvdXJjZV09aC5nZXRSZW5kZXJhYmxlSWRzKCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBoLmdldFRpbGVCeUlEKHQpfSkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBlLnRpbGVJRC5vdmVyc2NhbGVkWi10LnRpbGVJRC5vdmVyc2NhbGVkWnx8KHQudGlsZUlELmlzTGVzc1RoYW4oZS50aWxlSUQpPy0xOjEpfSl9dmFyIGY9dGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleC5hZGRMYXllcih1LG9bdS5zb3VyY2VdLHQuY2VudGVyLmxuZyk7bj1ufHxmfX10aGlzLmNyb3NzVGlsZVN5bWJvbEluZGV4LnBydW5lVW51c2VkTGF5ZXJzKHRoaXMuX29yZGVyKTt2YXIgcD10aGlzLl9sYXllck9yZGVyQ2hhbmdlZDtpZigocHx8IXRoaXMucGF1c2VhYmxlUGxhY2VtZW50fHx0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKSYmIXRoaXMucGxhY2VtZW50LnN0aWxsUmVjZW50KGEubm93KCkpKSYmKHRoaXMucGF1c2VhYmxlUGxhY2VtZW50PW5ldyBVZSh0LHRoaXMuX29yZGVyLHAsZSxyKSx0aGlzLl9sYXllck9yZGVyQ2hhbmdlZD0hMSksdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuaXNEb25lKCk/dGhpcy5wbGFjZW1lbnQuc2V0U3RhbGUoKToodGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuY29udGludWVQbGFjZW1lbnQodGhpcy5fb3JkZXIsdGhpcy5fbGF5ZXJzLG8pLHRoaXMucGF1c2VhYmxlUGxhY2VtZW50LmlzRG9uZSgpJiYodGhpcy5wbGFjZW1lbnQ9dGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuY29tbWl0KHRoaXMucGxhY2VtZW50LGEubm93KCkpLGk9ITApLG4mJnRoaXMucGF1c2VhYmxlUGxhY2VtZW50LnBsYWNlbWVudC5zZXRTdGFsZSgpKSxpfHxuKWZvcih2YXIgZD0wLGc9dGhpcy5fb3JkZXI7ZDxnLmxlbmd0aDtkKz0xKXt2YXIgdj1nW2RdLG09dGhpcy5fbGF5ZXJzW3ZdO1wic3ltYm9sXCI9PT1tLnR5cGUmJnRoaXMucGxhY2VtZW50LnVwZGF0ZUxheWVyT3BhY2l0aWVzKG0sb1ttLnNvdXJjZV0pfXJldHVybiF0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKXx8dGhpcy5wbGFjZW1lbnQuaGFzVHJhbnNpdGlvbnMoYS5ub3coKSl9LHIucHJvdG90eXBlLmdldEltYWdlcz1mdW5jdGlvbih0LGUscil7dGhpcy5pbWFnZU1hbmFnZXIuZ2V0SW1hZ2VzKGUuaWNvbnMscil9LHIucHJvdG90eXBlLmdldEdseXBocz1mdW5jdGlvbih0LGUscil7dGhpcy5nbHlwaE1hbmFnZXIuZ2V0R2x5cGhzKGUuc3RhY2tzLHIpfSxyfSh0LkV2ZW50ZWQpO0plLmdldFNvdXJjZVR5cGU9ZnVuY3Rpb24odCl7cmV0dXJuIG50W3RdfSxKZS5zZXRTb3VyY2VUeXBlPWZ1bmN0aW9uKHQsZSl7bnRbdF09ZX0sSmUucmVnaXN0ZXJGb3JQbHVnaW5BdmFpbGFiaWxpdHk9dC5yZWdpc3RlckZvclBsdWdpbkF2YWlsYWJpbGl0eTt2YXIgS2U9dC5jcmVhdGVMYXlvdXQoW3tuYW1lOlwiYV9wb3NcIix0eXBlOlwiSW50MTZcIixjb21wb25lbnRzOjJ9XSksUWU9e3ByZWx1ZGU6e2ZyYWdtZW50U291cmNlOlwiI2lmZGVmIEdMX0VTXFxucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuI2Vsc2VcXG5cXG4jaWYgIWRlZmluZWQobG93cClcXG4jZGVmaW5lIGxvd3BcXG4jZW5kaWZcXG5cXG4jaWYgIWRlZmluZWQobWVkaXVtcClcXG4jZGVmaW5lIG1lZGl1bXBcXG4jZW5kaWZcXG5cXG4jaWYgIWRlZmluZWQoaGlnaHApXFxuI2RlZmluZSBoaWdocFxcbiNlbmRpZlxcblxcbiNlbmRpZlxcblwiLHZlcnRleFNvdXJjZTpcIiNpZmRlZiBHTF9FU1xcbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZWxzZVxcblxcbiNpZiAhZGVmaW5lZChsb3dwKVxcbiNkZWZpbmUgbG93cFxcbiNlbmRpZlxcblxcbiNpZiAhZGVmaW5lZChtZWRpdW1wKVxcbiNkZWZpbmUgbWVkaXVtcFxcbiNlbmRpZlxcblxcbiNpZiAhZGVmaW5lZChoaWdocClcXG4jZGVmaW5lIGhpZ2hwXFxuI2VuZGlmXFxuXFxuI2VuZGlmXFxuXFxuLy8gVW5wYWNrIGEgcGFpciBvZiB2YWx1ZXMgdGhhdCBoYXZlIGJlZW4gcGFja2VkIGludG8gYSBzaW5nbGUgZmxvYXQuXFxuLy8gVGhlIHBhY2tlZCB2YWx1ZXMgYXJlIGFzc3VtZWQgdG8gYmUgOC1iaXQgdW5zaWduZWQgaW50ZWdlcnMsIGFuZCBhcmVcXG4vLyBwYWNrZWQgbGlrZSBzbzpcXG4vLyBwYWNrZWRWYWx1ZSA9IGZsb29yKGlucHV0WzBdKSAqIDI1NiArIGlucHV0WzFdLFxcbnZlYzIgdW5wYWNrX2Zsb2F0KGNvbnN0IGZsb2F0IHBhY2tlZFZhbHVlKSB7XFxuICAgIGludCBwYWNrZWRJbnRWYWx1ZSA9IGludChwYWNrZWRWYWx1ZSk7XFxuICAgIGludCB2MCA9IHBhY2tlZEludFZhbHVlIC8gMjU2O1xcbiAgICByZXR1cm4gdmVjMih2MCwgcGFja2VkSW50VmFsdWUgLSB2MCAqIDI1Nik7XFxufVxcblxcbnZlYzIgdW5wYWNrX29wYWNpdHkoY29uc3QgZmxvYXQgcGFja2VkT3BhY2l0eSkge1xcbiAgICBpbnQgaW50T3BhY2l0eSA9IGludChwYWNrZWRPcGFjaXR5KSAvIDI7XFxuICAgIHJldHVybiB2ZWMyKGZsb2F0KGludE9wYWNpdHkpIC8gMTI3LjAsIG1vZChwYWNrZWRPcGFjaXR5LCAyLjApKTtcXG59XFxuXFxuLy8gVG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzIG5lZWRlZCwgd2UgZW5jb2RlIGEgNC1jb21wb25lbnRcXG4vLyBjb2xvciBpbnRvIGEgcGFpciBvZiBmbG9hdHMgKGkuZS4gYSB2ZWMyKSBhcyBmb2xsb3dzOlxcbi8vIFsgZmxvb3IoY29sb3IuciAqIDI1NSkgKiAyNTYgKyBjb2xvci5nICogMjU1LFxcbi8vICAgZmxvb3IoY29sb3IuYiAqIDI1NSkgKiAyNTYgKyBjb2xvci5nICogMjU1IF1cXG52ZWM0IGRlY29kZV9jb2xvcihjb25zdCB2ZWMyIGVuY29kZWRDb2xvcikge1xcbiAgICByZXR1cm4gdmVjNChcXG4gICAgICAgIHVucGFja19mbG9hdChlbmNvZGVkQ29sb3JbMF0pIC8gMjU1LjAsXFxuICAgICAgICB1bnBhY2tfZmxvYXQoZW5jb2RlZENvbG9yWzFdKSAvIDI1NS4wXFxuICAgICk7XFxufVxcblxcbi8vIFVucGFjayBhIHBhaXIgb2YgcGFpbnQgdmFsdWVzIGFuZCBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHRoZW0uXFxuZmxvYXQgdW5wYWNrX21peF92ZWMyKGNvbnN0IHZlYzIgcGFja2VkVmFsdWUsIGNvbnN0IGZsb2F0IHQpIHtcXG4gICAgcmV0dXJuIG1peChwYWNrZWRWYWx1ZVswXSwgcGFja2VkVmFsdWVbMV0sIHQpO1xcbn1cXG5cXG4vLyBVbnBhY2sgYSBwYWlyIG9mIHBhaW50IHZhbHVlcyBhbmQgaW50ZXJwb2xhdGUgYmV0d2VlbiB0aGVtLlxcbnZlYzQgdW5wYWNrX21peF92ZWM0KGNvbnN0IHZlYzQgcGFja2VkQ29sb3JzLCBjb25zdCBmbG9hdCB0KSB7XFxuICAgIHZlYzQgbWluQ29sb3IgPSBkZWNvZGVfY29sb3IodmVjMihwYWNrZWRDb2xvcnNbMF0sIHBhY2tlZENvbG9yc1sxXSkpO1xcbiAgICB2ZWM0IG1heENvbG9yID0gZGVjb2RlX2NvbG9yKHZlYzIocGFja2VkQ29sb3JzWzJdLCBwYWNrZWRDb2xvcnNbM10pKTtcXG4gICAgcmV0dXJuIG1peChtaW5Db2xvciwgbWF4Q29sb3IsIHQpO1xcbn1cXG5cXG4vLyBUaGUgb2Zmc2V0IGRlcGVuZHMgb24gaG93IG1hbnkgcGl4ZWxzIGFyZSBiZXR3ZWVuIHRoZSB3b3JsZCBvcmlnaW4gYW5kIHRoZSBlZGdlIG9mIHRoZSB0aWxlOlxcbi8vIHZlYzIgb2Zmc2V0ID0gbW9kKHBpeGVsX2Nvb3JkLCBzaXplKVxcbi8vXFxuLy8gQXQgaGlnaCB6b29tIGxldmVscyB0aGVyZSBhcmUgYSB0b24gb2YgcGl4ZWxzIGJldHdlZW4gdGhlIHdvcmxkIG9yaWdpbiBhbmQgdGhlIGVkZ2Ugb2YgdGhlIHRpbGUuXFxuLy8gVGhlIGdsc2wgc3BlYyBvbmx5IGd1YXJhbnRlZXMgMTYgYml0cyBvZiBwcmVjaXNpb24gZm9yIGhpZ2hwIGZsb2F0cy4gV2UgbmVlZCBtb3JlIHRoYW4gdGhhdC5cXG4vL1xcbi8vIFRoZSBwaXhlbF9jb29yZCBpcyBwYXNzZWQgaW4gYXMgdHdvIDE2IGJpdCB2YWx1ZXM6XFxuLy8gcGl4ZWxfY29vcmRfdXBwZXIgPSBmbG9vcihwaXhlbF9jb29yZCAvIDJeMTYpXFxuLy8gcGl4ZWxfY29vcmRfbG93ZXIgPSBtb2QocGl4ZWxfY29vcmQsIDJeMTYpXFxuLy9cXG4vLyBUaGUgb2Zmc2V0IGlzIGNhbGN1bGF0ZWQgaW4gYSBzZXJpZXMgb2Ygc3RlcHMgdGhhdCBzaG91bGQgcHJlc2VydmUgdGhpcyBwcmVjaXNpb246XFxudmVjMiBnZXRfcGF0dGVybl9wb3MoY29uc3QgdmVjMiBwaXhlbF9jb29yZF91cHBlciwgY29uc3QgdmVjMiBwaXhlbF9jb29yZF9sb3dlcixcXG4gICAgY29uc3QgdmVjMiBwYXR0ZXJuX3NpemUsIGNvbnN0IGZsb2F0IHRpbGVfdW5pdHNfdG9fcGl4ZWxzLCBjb25zdCB2ZWMyIHBvcykge1xcblxcbiAgICB2ZWMyIG9mZnNldCA9IG1vZChtb2QobW9kKHBpeGVsX2Nvb3JkX3VwcGVyLCBwYXR0ZXJuX3NpemUpICogMjU2LjAsIHBhdHRlcm5fc2l6ZSkgKiAyNTYuMCArIHBpeGVsX2Nvb3JkX2xvd2VyLCBwYXR0ZXJuX3NpemUpO1xcbiAgICByZXR1cm4gKHRpbGVfdW5pdHNfdG9fcGl4ZWxzICogcG9zICsgb2Zmc2V0KSAvIHBhdHRlcm5fc2l6ZTtcXG59XFxuXCJ9LGJhY2tncm91bmQ6e2ZyYWdtZW50U291cmNlOlwidW5pZm9ybSB2ZWM0IHVfY29sb3I7XFxudW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICBnbF9GcmFnQ29sb3IgPSB1X2NvbG9yICogdV9vcGFjaXR5O1xcblxcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xcbiNlbmRpZlxcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCJhdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG5cXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XFxufVxcblwifSxiYWNrZ3JvdW5kUGF0dGVybjp7ZnJhZ21lbnRTb3VyY2U6XCJ1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2E7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9icl9hO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYjtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2I7XFxudW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTtcXG51bmlmb3JtIGZsb2F0IHVfbWl4O1xcbnVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5O1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XFxuXFxudmFyeWluZyB2ZWMyIHZfcG9zX2E7XFxudmFyeWluZyB2ZWMyIHZfcG9zX2I7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICB2ZWMyIGltYWdlY29vcmQgPSBtb2Qodl9wb3NfYSwgMS4wKTtcXG4gICAgdmVjMiBwb3MgPSBtaXgodV9wYXR0ZXJuX3RsX2EgLyB1X3RleHNpemUsIHVfcGF0dGVybl9icl9hIC8gdV90ZXhzaXplLCBpbWFnZWNvb3JkKTtcXG4gICAgdmVjNCBjb2xvcjEgPSB0ZXh0dXJlMkQodV9pbWFnZSwgcG9zKTtcXG5cXG4gICAgdmVjMiBpbWFnZWNvb3JkX2IgPSBtb2Qodl9wb3NfYiwgMS4wKTtcXG4gICAgdmVjMiBwb3MyID0gbWl4KHVfcGF0dGVybl90bF9iIC8gdV90ZXhzaXplLCB1X3BhdHRlcm5fYnJfYiAvIHVfdGV4c2l6ZSwgaW1hZ2Vjb29yZF9iKTtcXG4gICAgdmVjNCBjb2xvcjIgPSB0ZXh0dXJlMkQodV9pbWFnZSwgcG9zMik7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IG1peChjb2xvcjEsIGNvbG9yMiwgdV9taXgpICogdV9vcGFjaXR5O1xcblxcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xcbiNlbmRpZlxcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2E7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2I7XFxudW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfdXBwZXI7XFxudW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfbG93ZXI7XFxudW5pZm9ybSBmbG9hdCB1X3NjYWxlX2E7XFxudW5pZm9ybSBmbG9hdCB1X3NjYWxlX2I7XFxudW5pZm9ybSBmbG9hdCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzO1xcblxcbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xcblxcbnZhcnlpbmcgdmVjMiB2X3Bvc19hO1xcbnZhcnlpbmcgdmVjMiB2X3Bvc19iO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xcblxcbiAgICB2X3Bvc19hID0gZ2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsIHVfcGl4ZWxfY29vcmRfbG93ZXIsIHVfc2NhbGVfYSAqIHVfcGF0dGVybl9zaXplX2EsIHVfdGlsZV91bml0c190b19waXhlbHMsIGFfcG9zKTtcXG4gICAgdl9wb3NfYiA9IGdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLCB1X3BpeGVsX2Nvb3JkX2xvd2VyLCB1X3NjYWxlX2IgKiB1X3BhdHRlcm5fc2l6ZV9iLCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLCBhX3Bvcyk7XFxufVxcblwifSxjaXJjbGU6e2ZyYWdtZW50U291cmNlOlwiI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgc3Ryb2tlX2NvbG9yXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHN0cm9rZV93aWR0aFxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBzdHJva2Vfb3BhY2l0eVxcblxcbnZhcnlpbmcgdmVjMyB2X2RhdGE7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgcmFkaXVzXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBzdHJva2VfY29sb3JcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBzdHJva2Vfd2lkdGhcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBzdHJva2Vfb3BhY2l0eVxcblxcbiAgICB2ZWMyIGV4dHJ1ZGUgPSB2X2RhdGEueHk7XFxuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoID0gbGVuZ3RoKGV4dHJ1ZGUpO1xcblxcbiAgICBsb3dwIGZsb2F0IGFudGlhbGlhc2JsdXIgPSB2X2RhdGEuejtcXG4gICAgZmxvYXQgYW50aWFsaWFzZWRfYmx1ciA9IC1tYXgoYmx1ciwgYW50aWFsaWFzYmx1cik7XFxuXFxuICAgIGZsb2F0IG9wYWNpdHlfdCA9IHNtb290aHN0ZXAoMC4wLCBhbnRpYWxpYXNlZF9ibHVyLCBleHRydWRlX2xlbmd0aCAtIDEuMCk7XFxuXFxuICAgIGZsb2F0IGNvbG9yX3QgPSBzdHJva2Vfd2lkdGggPCAwLjAxID8gMC4wIDogc21vb3Roc3RlcChcXG4gICAgICAgIGFudGlhbGlhc2VkX2JsdXIsXFxuICAgICAgICAwLjAsXFxuICAgICAgICBleHRydWRlX2xlbmd0aCAtIHJhZGl1cyAvIChyYWRpdXMgKyBzdHJva2Vfd2lkdGgpXFxuICAgICk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IG9wYWNpdHlfdCAqIG1peChjb2xvciAqIG9wYWNpdHksIHN0cm9rZV9jb2xvciAqIHN0cm9rZV9vcGFjaXR5LCBjb2xvcl90KTtcXG5cXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcXG4jZW5kaWZcXG59XFxuXCIsdmVydGV4U291cmNlOlwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcbnVuaWZvcm0gYm9vbCB1X3NjYWxlX3dpdGhfbWFwO1xcbnVuaWZvcm0gYm9vbCB1X3BpdGNoX3dpdGhfbWFwO1xcbnVuaWZvcm0gdmVjMiB1X2V4dHJ1ZGVfc2NhbGU7XFxudW5pZm9ybSBoaWdocCBmbG9hdCB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U7XFxuXFxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XFxuXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgc3Ryb2tlX2NvbG9yXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHN0cm9rZV93aWR0aFxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBzdHJva2Vfb3BhY2l0eVxcblxcbnZhcnlpbmcgdmVjMyB2X2RhdGE7XFxuXFxudm9pZCBtYWluKHZvaWQpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgc3Ryb2tlX2NvbG9yXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgc3Ryb2tlX3dpZHRoXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgc3Ryb2tlX29wYWNpdHlcXG5cXG4gICAgLy8gdW5lbmNvZGUgdGhlIGV4dHJ1c2lvbiB2ZWN0b3IgdGhhdCB3ZSBzbnVjayBpbnRvIHRoZSBhX3BvcyB2ZWN0b3JcXG4gICAgdmVjMiBleHRydWRlID0gdmVjMihtb2QoYV9wb3MsIDIuMCkgKiAyLjAgLSAxLjApO1xcblxcbiAgICAvLyBtdWx0aXBseSBhX3BvcyBieSAwLjUsIHNpbmNlIHdlIGhhZCBpdCAqIDIgaW4gb3JkZXIgdG8gc25lYWtcXG4gICAgLy8gaW4gZXh0cnVzaW9uIGRhdGFcXG4gICAgdmVjMiBjaXJjbGVfY2VudGVyID0gZmxvb3IoYV9wb3MgKiAwLjUpO1xcbiAgICBpZiAodV9waXRjaF93aXRoX21hcCkge1xcbiAgICAgICAgdmVjMiBjb3JuZXJfcG9zaXRpb24gPSBjaXJjbGVfY2VudGVyO1xcbiAgICAgICAgaWYgKHVfc2NhbGVfd2l0aF9tYXApIHtcXG4gICAgICAgICAgICBjb3JuZXJfcG9zaXRpb24gKz0gZXh0cnVkZSAqIChyYWRpdXMgKyBzdHJva2Vfd2lkdGgpICogdV9leHRydWRlX3NjYWxlO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAvLyBQaXRjaGluZyB0aGUgY2lyY2xlIHdpdGggdGhlIG1hcCBlZmZlY3RpdmVseSBzY2FsZXMgaXQgd2l0aCB0aGUgbWFwXFxuICAgICAgICAgICAgLy8gVG8gY291bnRlcmFjdCB0aGUgZWZmZWN0IGZvciBwaXRjaC1zY2FsZTogdmlld3BvcnQsIHdlIHJlc2NhbGUgdGhlXFxuICAgICAgICAgICAgLy8gd2hvbGUgY2lyY2xlIGJhc2VkIG9uIHRoZSBwaXRjaCBzY2FsaW5nIGVmZmVjdCBhdCBpdHMgY2VudHJhbCBwb2ludFxcbiAgICAgICAgICAgIHZlYzQgcHJvamVjdGVkX2NlbnRlciA9IHVfbWF0cml4ICogdmVjNChjaXJjbGVfY2VudGVyLCAwLCAxKTtcXG4gICAgICAgICAgICBjb3JuZXJfcG9zaXRpb24gKz0gZXh0cnVkZSAqIChyYWRpdXMgKyBzdHJva2Vfd2lkdGgpICogdV9leHRydWRlX3NjYWxlICogKHByb2plY3RlZF9jZW50ZXIudyAvIHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChjb3JuZXJfcG9zaXRpb24sIDAsIDEpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoY2lyY2xlX2NlbnRlciwgMCwgMSk7XFxuXFxuICAgICAgICBpZiAodV9zY2FsZV93aXRoX21hcCkge1xcbiAgICAgICAgICAgIGdsX1Bvc2l0aW9uLnh5ICs9IGV4dHJ1ZGUgKiAocmFkaXVzICsgc3Ryb2tlX3dpZHRoKSAqIHVfZXh0cnVkZV9zY2FsZSAqIHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgZ2xfUG9zaXRpb24ueHkgKz0gZXh0cnVkZSAqIChyYWRpdXMgKyBzdHJva2Vfd2lkdGgpICogdV9leHRydWRlX3NjYWxlICogZ2xfUG9zaXRpb24udztcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICAvLyBUaGlzIGlzIGEgbWluaW11bSBibHVyIGRpc3RhbmNlIHRoYXQgc2VydmVzIGFzIGEgZmF1eC1hbnRpYWxpYXNpbmcgZm9yXFxuICAgIC8vIHRoZSBjaXJjbGUuIHNpbmNlIGJsdXIgaXMgYSByYXRpbyBvZiB0aGUgY2lyY2xlJ3Mgc2l6ZSBhbmQgdGhlIGludGVudCBpc1xcbiAgICAvLyB0byBrZWVwIHRoZSBibHVyIGF0IHJvdWdobHkgMXB4LCB0aGUgdHdvIGFyZSBpbnZlcnNlbHkgcmVsYXRlZC5cXG4gICAgbG93cCBmbG9hdCBhbnRpYWxpYXNibHVyID0gMS4wIC8gREVWSUNFX1BJWEVMX1JBVElPIC8gKHJhZGl1cyArIHN0cm9rZV93aWR0aCk7XFxuXFxuICAgIHZfZGF0YSA9IHZlYzMoZXh0cnVkZS54LCBleHRydWRlLnksIGFudGlhbGlhc2JsdXIpO1xcbn1cXG5cIn0sY2xpcHBpbmdNYXNrOntmcmFnbWVudFNvdXJjZTpcInZvaWQgbWFpbigpIHtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCJhdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG5cXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XFxufVxcblwifSxoZWF0bWFwOntmcmFnbWVudFNvdXJjZTpcIiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgZmxvYXQgd2VpZ2h0XFxuXFxudW5pZm9ybSBoaWdocCBmbG9hdCB1X2ludGVuc2l0eTtcXG52YXJ5aW5nIHZlYzIgdl9leHRydWRlO1xcblxcbi8vIEdhdXNzaWFuIGtlcm5lbCBjb2VmZmljaWVudDogMSAvIHNxcnQoMiAqIFBJKVxcbiNkZWZpbmUgR0FVU1NfQ09FRiAwLjM5ODk0MjI4MDQwMTQzMjdcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIGZsb2F0IHdlaWdodFxcblxcbiAgICAvLyBLZXJuZWwgZGVuc2l0eSBlc3RpbWF0aW9uIHdpdGggYSBHYXVzc2lhbiBrZXJuZWwgb2Ygc2l6ZSA1eDVcXG4gICAgZmxvYXQgZCA9IC0wLjUgKiAzLjAgKiAzLjAgKiBkb3Qodl9leHRydWRlLCB2X2V4dHJ1ZGUpO1xcbiAgICBmbG9hdCB2YWwgPSB3ZWlnaHQgKiB1X2ludGVuc2l0eSAqIEdBVVNTX0NPRUYgKiBleHAoZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodmFsLCAxLjAsIDEuMCwgMS4wKTtcXG5cXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcXG4jZW5kaWZcXG59XFxuXCIsdmVydGV4U291cmNlOlwiI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCBmbG9hdCB3ZWlnaHRcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgcmFkaXVzXFxuXFxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcbnVuaWZvcm0gZmxvYXQgdV9leHRydWRlX3NjYWxlO1xcbnVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5O1xcbnVuaWZvcm0gZmxvYXQgdV9pbnRlbnNpdHk7XFxuXFxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XFxuXFxudmFyeWluZyB2ZWMyIHZfZXh0cnVkZTtcXG5cXG4vLyBFZmZlY3RpdmUgXFxcIjBcXFwiIGluIHRoZSBrZXJuZWwgZGVuc2l0eSB0ZXh0dXJlIHRvIGFkanVzdCB0aGUga2VybmVsIHNpemUgdG87XFxuLy8gdGhpcyBlbXBpcmljYWxseSBjaG9zZW4gbnVtYmVyIG1pbmltaXplcyBhcnRpZmFjdHMgb24gb3ZlcmxhcHBpbmcga2VybmVsc1xcbi8vIGZvciB0eXBpY2FsIGhlYXRtYXAgY2FzZXMgKGFzc3VtaW5nIGNsdXN0ZXJlZCBzb3VyY2UpXFxuY29uc3QgaGlnaHAgZmxvYXQgWkVSTyA9IDEuMCAvIDI1NS4wIC8gMTYuMDtcXG5cXG4vLyBHYXVzc2lhbiBrZXJuZWwgY29lZmZpY2llbnQ6IDEgLyBzcXJ0KDIgKiBQSSlcXG4jZGVmaW5lIEdBVVNTX0NPRUYgMC4zOTg5NDIyODA0MDE0MzI3XFxuXFxudm9pZCBtYWluKHZvaWQpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgZmxvYXQgd2VpZ2h0XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgcmFkaXVzXFxuXFxuICAgIC8vIHVuZW5jb2RlIHRoZSBleHRydXNpb24gdmVjdG9yIHRoYXQgd2Ugc251Y2sgaW50byB0aGUgYV9wb3MgdmVjdG9yXFxuICAgIHZlYzIgdW5zY2FsZWRfZXh0cnVkZSA9IHZlYzIobW9kKGFfcG9zLCAyLjApICogMi4wIC0gMS4wKTtcXG5cXG4gICAgLy8gVGhpcyAnZXh0cnVkZScgY29tZXMgaW4gcmFuZ2luZyBmcm9tIFstMSwgLTFdLCB0byBbMSwgMV0uICBXZSdsbCB1c2VcXG4gICAgLy8gaXQgdG8gcHJvZHVjZSB0aGUgdmVydGljZXMgb2YgYSBzcXVhcmUgbWVzaCBmcmFtaW5nIHRoZSBwb2ludCBmZWF0dXJlXFxuICAgIC8vIHdlJ3JlIGFkZGluZyB0byB0aGUga2VybmVsIGRlbnNpdHkgdGV4dHVyZS4gIFdlJ2xsIGFsc28gcGFzcyBpdCBhc1xcbiAgICAvLyBhIHZhcnlpbmcsIHNvIHRoYXQgdGhlIGZyYWdtZW50IHNoYWRlciBjYW4gZGV0ZXJtaW5lIHRoZSBkaXN0YW5jZSBvZlxcbiAgICAvLyBlYWNoIGZyYWdtZW50IGZyb20gdGhlIHBvaW50IGZlYXR1cmUuXFxuICAgIC8vIEJlZm9yZSB3ZSBkbyBzbywgd2UgbmVlZCB0byBzY2FsZSBpdCB1cCBzdWZmaWNpZW50bHkgc28gdGhhdCB0aGVcXG4gICAgLy8ga2VybmVsIGZhbGxzIGVmZmVjdGl2ZWx5IHRvIHplcm8gYXQgdGhlIGVkZ2Ugb2YgdGhlIG1lc2guXFxuICAgIC8vIFRoYXQgaXMsIHdlIHdhbnQgdG8ga25vdyBTIHN1Y2ggdGhhdFxcbiAgICAvLyB3ZWlnaHQgKiB1X2ludGVuc2l0eSAqIEdBVVNTX0NPRUYgKiBleHAoLTAuNSAqIDMuMF4yICogU14yKSA9PSBaRVJPXFxuICAgIC8vIFdoaWNoIHNvbHZlcyB0bzpcXG4gICAgLy8gUyA9IHNxcnQoLTIuMCAqIGxvZyhaRVJPIC8gKHdlaWdodCAqIHVfaW50ZW5zaXR5ICogR0FVU1NfQ09FRikpKSAvIDMuMFxcbiAgICBmbG9hdCBTID0gc3FydCgtMi4wICogbG9nKFpFUk8gLyB3ZWlnaHQgLyB1X2ludGVuc2l0eSAvIEdBVVNTX0NPRUYpKSAvIDMuMDtcXG5cXG4gICAgLy8gUGFzcyB0aGUgdmFyeWluZyBpbiB1bml0cyBvZiByYWRpdXNcXG4gICAgdl9leHRydWRlID0gUyAqIHVuc2NhbGVkX2V4dHJ1ZGU7XFxuXFxuICAgIC8vIFNjYWxlIGJ5IHJhZGl1cyBhbmQgdGhlIHpvb20tYmFzZWQgc2NhbGUgZmFjdG9yIHRvIHByb2R1Y2UgYWN0dWFsXFxuICAgIC8vIG1lc2ggcG9zaXRpb25cXG4gICAgdmVjMiBleHRydWRlID0gdl9leHRydWRlICogcmFkaXVzICogdV9leHRydWRlX3NjYWxlO1xcblxcbiAgICAvLyBtdWx0aXBseSBhX3BvcyBieSAwLjUsIHNpbmNlIHdlIGhhZCBpdCAqIDIgaW4gb3JkZXIgdG8gc25lYWtcXG4gICAgLy8gaW4gZXh0cnVzaW9uIGRhdGFcXG4gICAgdmVjNCBwb3MgPSB2ZWM0KGZsb29yKGFfcG9zICogMC41KSArIGV4dHJ1ZGUsIDAsIDEpO1xcblxcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogcG9zO1xcbn1cXG5cIn0saGVhdG1hcFRleHR1cmU6e2ZyYWdtZW50U291cmNlOlwidW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1X2NvbG9yX3JhbXA7XFxudW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7XFxudmFyeWluZyB2ZWMyIHZfcG9zO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgZmxvYXQgdCA9IHRleHR1cmUyRCh1X2ltYWdlLCB2X3BvcykucjtcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1X2NvbG9yX3JhbXAsIHZlYzIodCwgMC41KSk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yICogdV9vcGFjaXR5O1xcblxcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcbiNlbmRpZlxcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHVfd29ybGQ7XFxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XFxudmFyeWluZyB2ZWMyIHZfcG9zO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MgKiB1X3dvcmxkLCAwLCAxKTtcXG5cXG4gICAgdl9wb3MueCA9IGFfcG9zLng7XFxuICAgIHZfcG9zLnkgPSAxLjAgLSBhX3Bvcy55O1xcbn1cXG5cIn0sY29sbGlzaW9uQm94OntmcmFnbWVudFNvdXJjZTpcIlxcbnZhcnlpbmcgZmxvYXQgdl9wbGFjZWQ7XFxudmFyeWluZyBmbG9hdCB2X25vdFVzZWQ7XFxuXFxudm9pZCBtYWluKCkge1xcblxcbiAgICBmbG9hdCBhbHBoYSA9IDAuNTtcXG5cXG4gICAgLy8gUmVkID0gY29sbGlzaW9uLCBoaWRlIGxhYmVsXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wLCAwLjAsIDAuMCwgMS4wKSAqIGFscGhhO1xcblxcbiAgICAvLyBCbHVlID0gbm8gY29sbGlzaW9uLCBsYWJlbCBpcyBzaG93aW5nXFxuICAgIGlmICh2X3BsYWNlZCA+IDAuNSkge1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMS4wLCAwLjUpICogYWxwaGE7XFxuICAgIH1cXG5cXG4gICAgaWYgKHZfbm90VXNlZCA+IDAuNSkge1xcbiAgICAgICAgLy8gVGhpcyBib3ggbm90IHVzZWQsIGZhZGUgaXQgb3V0XFxuICAgICAgICBnbF9GcmFnQ29sb3IgKj0gLjE7XFxuICAgIH1cXG59XCIsdmVydGV4U291cmNlOlwiYXR0cmlidXRlIHZlYzIgYV9wb3M7XFxuYXR0cmlidXRlIHZlYzIgYV9hbmNob3JfcG9zO1xcbmF0dHJpYnV0ZSB2ZWMyIGFfZXh0cnVkZTtcXG5hdHRyaWJ1dGUgdmVjMiBhX3BsYWNlZDtcXG5cXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHVfZXh0cnVkZV9zY2FsZTtcXG51bmlmb3JtIGZsb2F0IHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTtcXG5cXG52YXJ5aW5nIGZsb2F0IHZfcGxhY2VkO1xcbnZhcnlpbmcgZmxvYXQgdl9ub3RVc2VkO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgdmVjNCBwcm9qZWN0ZWRQb2ludCA9IHVfbWF0cml4ICogdmVjNChhX2FuY2hvcl9wb3MsIDAsIDEpO1xcbiAgICBoaWdocCBmbG9hdCBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlID0gcHJvamVjdGVkUG9pbnQudztcXG4gICAgaGlnaHAgZmxvYXQgY29sbGlzaW9uX3BlcnNwZWN0aXZlX3JhdGlvID0gY2xhbXAoXFxuICAgICAgICAwLjUgKyAwLjUgKiAodV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlIC8gY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZSksXFxuICAgICAgICAwLjAsIC8vIFByZXZlbnRzIG92ZXJzaXplZCBuZWFyLWZpZWxkIGJveGVzIGluIHBpdGNoZWQvb3Zlcnpvb21lZCB0aWxlc1xcbiAgICAgICAgNC4wKTtcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAuMCwgMS4wKTtcXG4gICAgZ2xfUG9zaXRpb24ueHkgKz0gYV9leHRydWRlICogdV9leHRydWRlX3NjYWxlICogZ2xfUG9zaXRpb24udyAqIGNvbGxpc2lvbl9wZXJzcGVjdGl2ZV9yYXRpbztcXG5cXG4gICAgdl9wbGFjZWQgPSBhX3BsYWNlZC54O1xcbiAgICB2X25vdFVzZWQgPSBhX3BsYWNlZC55O1xcbn1cXG5cIn0sY29sbGlzaW9uQ2lyY2xlOntmcmFnbWVudFNvdXJjZTpcInVuaWZvcm0gZmxvYXQgdV9vdmVyc2NhbGVfZmFjdG9yO1xcblxcbnZhcnlpbmcgZmxvYXQgdl9wbGFjZWQ7XFxudmFyeWluZyBmbG9hdCB2X25vdFVzZWQ7XFxudmFyeWluZyBmbG9hdCB2X3JhZGl1cztcXG52YXJ5aW5nIHZlYzIgdl9leHRydWRlO1xcbnZhcnlpbmcgdmVjMiB2X2V4dHJ1ZGVfc2NhbGU7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICBmbG9hdCBhbHBoYSA9IDAuNTtcXG5cXG4gICAgLy8gUmVkID0gY29sbGlzaW9uLCBoaWRlIGxhYmVsXFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDEuMCwgMC4wLCAwLjAsIDEuMCkgKiBhbHBoYTtcXG5cXG4gICAgLy8gQmx1ZSA9IG5vIGNvbGxpc2lvbiwgbGFiZWwgaXMgc2hvd2luZ1xcbiAgICBpZiAodl9wbGFjZWQgPiAwLjUpIHtcXG4gICAgICAgIGNvbG9yID0gdmVjNCgwLjAsIDAuMCwgMS4wLCAwLjUpICogYWxwaGE7XFxuICAgIH1cXG5cXG4gICAgaWYgKHZfbm90VXNlZCA+IDAuNSkge1xcbiAgICAgICAgLy8gVGhpcyBib3ggbm90IHVzZWQsIGZhZGUgaXQgb3V0XFxuICAgICAgICBjb2xvciAqPSAuMjtcXG4gICAgfVxcblxcbiAgICBmbG9hdCBleHRydWRlX3NjYWxlX2xlbmd0aCA9IGxlbmd0aCh2X2V4dHJ1ZGVfc2NhbGUpO1xcbiAgICBmbG9hdCBleHRydWRlX2xlbmd0aCA9IGxlbmd0aCh2X2V4dHJ1ZGUpICogZXh0cnVkZV9zY2FsZV9sZW5ndGg7XFxuICAgIGZsb2F0IHN0cm9rZV93aWR0aCA9IDE1LjAgKiBleHRydWRlX3NjYWxlX2xlbmd0aCAvIHVfb3ZlcnNjYWxlX2ZhY3RvcjtcXG4gICAgZmxvYXQgcmFkaXVzID0gdl9yYWRpdXMgKiBleHRydWRlX3NjYWxlX2xlbmd0aDtcXG5cXG4gICAgZmxvYXQgZGlzdGFuY2VfdG9fZWRnZSA9IGFicyhleHRydWRlX2xlbmd0aCAtIHJhZGl1cyk7XFxuICAgIGZsb2F0IG9wYWNpdHlfdCA9IHNtb290aHN0ZXAoLXN0cm9rZV93aWR0aCwgMC4wLCAtZGlzdGFuY2VfdG9fZWRnZSk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IG9wYWNpdHlfdCAqIGNvbG9yO1xcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCJhdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG5hdHRyaWJ1dGUgdmVjMiBhX2FuY2hvcl9wb3M7XFxuYXR0cmlidXRlIHZlYzIgYV9leHRydWRlO1xcbmF0dHJpYnV0ZSB2ZWMyIGFfcGxhY2VkO1xcblxcbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG51bmlmb3JtIHZlYzIgdV9leHRydWRlX3NjYWxlO1xcbnVuaWZvcm0gZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO1xcblxcbnZhcnlpbmcgZmxvYXQgdl9wbGFjZWQ7XFxudmFyeWluZyBmbG9hdCB2X25vdFVzZWQ7XFxudmFyeWluZyBmbG9hdCB2X3JhZGl1cztcXG5cXG52YXJ5aW5nIHZlYzIgdl9leHRydWRlO1xcbnZhcnlpbmcgdmVjMiB2X2V4dHJ1ZGVfc2NhbGU7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICB2ZWM0IHByb2plY3RlZFBvaW50ID0gdV9tYXRyaXggKiB2ZWM0KGFfYW5jaG9yX3BvcywgMCwgMSk7XFxuICAgIGhpZ2hwIGZsb2F0IGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2UgPSBwcm9qZWN0ZWRQb2ludC53O1xcbiAgICBoaWdocCBmbG9hdCBjb2xsaXNpb25fcGVyc3BlY3RpdmVfcmF0aW8gPSBjbGFtcChcXG4gICAgICAgIDAuNSArIDAuNSAqICh1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UgLyBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlKSxcXG4gICAgICAgIDAuMCwgLy8gUHJldmVudHMgb3ZlcnNpemVkIG5lYXItZmllbGQgY2lyY2xlcyBpbiBwaXRjaGVkL292ZXJ6b29tZWQgdGlsZXNcXG4gICAgICAgIDQuMCk7XFxuXFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLjAsIDEuMCk7XFxuXFxuICAgIGhpZ2hwIGZsb2F0IHBhZGRpbmdfZmFjdG9yID0gMS4yOyAvLyBQYWQgdGhlIHZlcnRpY2VzIHNsaWdodGx5IHRvIG1ha2Ugcm9vbSBmb3IgYW50aS1hbGlhcyBibHVyXFxuICAgIGdsX1Bvc2l0aW9uLnh5ICs9IGFfZXh0cnVkZSAqIHVfZXh0cnVkZV9zY2FsZSAqIHBhZGRpbmdfZmFjdG9yICogZ2xfUG9zaXRpb24udyAqIGNvbGxpc2lvbl9wZXJzcGVjdGl2ZV9yYXRpbztcXG5cXG4gICAgdl9wbGFjZWQgPSBhX3BsYWNlZC54O1xcbiAgICB2X25vdFVzZWQgPSBhX3BsYWNlZC55O1xcbiAgICB2X3JhZGl1cyA9IGFicyhhX2V4dHJ1ZGUueSk7IC8vIFdlIGRvbid0IHBpdGNoIHRoZSBjaXJjbGVzLCBzbyBib3RoIHVuaXRzIG9mIHRoZSBleHRydXNpb24gdmVjdG9yIGFyZSBlcXVhbCBpbiBtYWduaXR1ZGUgdG8gdGhlIHJhZGl1c1xcblxcbiAgICB2X2V4dHJ1ZGUgPSBhX2V4dHJ1ZGUgKiBwYWRkaW5nX2ZhY3RvcjtcXG4gICAgdl9leHRydWRlX3NjYWxlID0gdV9leHRydWRlX3NjYWxlICogdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlICogY29sbGlzaW9uX3BlcnNwZWN0aXZlX3JhdGlvO1xcbn1cXG5cIn0sZGVidWc6e2ZyYWdtZW50U291cmNlOlwidW5pZm9ybSBoaWdocCB2ZWM0IHVfY29sb3I7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICBnbF9GcmFnQ29sb3IgPSB1X2NvbG9yO1xcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCJhdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG5cXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XFxufVxcblwifSxmaWxsOntmcmFnbWVudFNvdXJjZTpcIiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAqIG9wYWNpdHk7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xcblxcbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xcbn1cXG5cIn0sZmlsbE91dGxpbmU6e2ZyYWdtZW50U291cmNlOlwiI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IG91dGxpbmVfY29sb3JcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbnZhcnlpbmcgdmVjMiB2X3BvcztcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgb3V0bGluZV9jb2xvclxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG4gICAgZmxvYXQgZGlzdCA9IGxlbmd0aCh2X3BvcyAtIGdsX0ZyYWdDb29yZC54eSk7XFxuICAgIGZsb2F0IGFscGhhID0gMS4wIC0gc21vb3Roc3RlcCgwLjAsIDEuMCwgZGlzdCk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IG91dGxpbmVfY29sb3IgKiAoYWxwaGEgKiBvcGFjaXR5KTtcXG5cXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcXG4jZW5kaWZcXG59XFxuXCIsdmVydGV4U291cmNlOlwiYXR0cmlidXRlIHZlYzIgYV9wb3M7XFxuXFxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcbnVuaWZvcm0gdmVjMiB1X3dvcmxkO1xcblxcbnZhcnlpbmcgdmVjMiB2X3BvcztcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgb3V0bGluZV9jb2xvclxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IG91dGxpbmVfY29sb3JcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcXG4gICAgdl9wb3MgPSAoZ2xfUG9zaXRpb24ueHkgLyBnbF9Qb3NpdGlvbi53ICsgMS4wKSAvIDIuMCAqIHVfd29ybGQ7XFxufVxcblwifSxmaWxsT3V0bGluZVBhdHRlcm46e2ZyYWdtZW50U291cmNlOlwidW5pZm9ybSB2ZWMyIHVfcGF0dGVybl90bF9hO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYTtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2I7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9icl9iO1xcbnVuaWZvcm0gdmVjMiB1X3RleHNpemU7XFxudW5pZm9ybSBmbG9hdCB1X21peDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO1xcblxcbnZhcnlpbmcgdmVjMiB2X3Bvc19hO1xcbnZhcnlpbmcgdmVjMiB2X3Bvc19iO1xcbnZhcnlpbmcgdmVjMiB2X3BvcztcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxuICAgIHZlYzIgaW1hZ2Vjb29yZCA9IG1vZCh2X3Bvc19hLCAxLjApO1xcbiAgICB2ZWMyIHBvcyA9IG1peCh1X3BhdHRlcm5fdGxfYSAvIHVfdGV4c2l6ZSwgdV9wYXR0ZXJuX2JyX2EgLyB1X3RleHNpemUsIGltYWdlY29vcmQpO1xcbiAgICB2ZWM0IGNvbG9yMSA9IHRleHR1cmUyRCh1X2ltYWdlLCBwb3MpO1xcblxcbiAgICB2ZWMyIGltYWdlY29vcmRfYiA9IG1vZCh2X3Bvc19iLCAxLjApO1xcbiAgICB2ZWMyIHBvczIgPSBtaXgodV9wYXR0ZXJuX3RsX2IgLyB1X3RleHNpemUsIHVfcGF0dGVybl9icl9iIC8gdV90ZXhzaXplLCBpbWFnZWNvb3JkX2IpO1xcbiAgICB2ZWM0IGNvbG9yMiA9IHRleHR1cmUyRCh1X2ltYWdlLCBwb3MyKTtcXG5cXG4gICAgLy8gZmluZCBkaXN0YW5jZSB0byBvdXRsaW5lIGZvciBhbHBoYSBpbnRlcnBvbGF0aW9uXFxuXFxuICAgIGZsb2F0IGRpc3QgPSBsZW5ndGgodl9wb3MgLSBnbF9GcmFnQ29vcmQueHkpO1xcbiAgICBmbG9hdCBhbHBoYSA9IDEuMCAtIHNtb290aHN0ZXAoMC4wLCAxLjAsIGRpc3QpO1xcblxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBtaXgoY29sb3IxLCBjb2xvcjIsIHVfbWl4KSAqIGFscGhhICogb3BhY2l0eTtcXG5cXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcXG4jZW5kaWZcXG59XFxuXCIsdmVydGV4U291cmNlOlwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcbnVuaWZvcm0gdmVjMiB1X3dvcmxkO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9hO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9iO1xcbnVuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX3VwcGVyO1xcbnVuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX2xvd2VyO1xcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZV9hO1xcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZV9iO1xcbnVuaWZvcm0gZmxvYXQgdV90aWxlX3VuaXRzX3RvX3BpeGVscztcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG5cXG52YXJ5aW5nIHZlYzIgdl9wb3NfYTtcXG52YXJ5aW5nIHZlYzIgdl9wb3NfYjtcXG52YXJ5aW5nIHZlYzIgdl9wb3M7XFxuXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XFxuXFxuICAgIHZfcG9zX2EgPSBnZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlciwgdV9waXhlbF9jb29yZF9sb3dlciwgdV9zY2FsZV9hICogdV9wYXR0ZXJuX3NpemVfYSwgdV90aWxlX3VuaXRzX3RvX3BpeGVscywgYV9wb3MpO1xcbiAgICB2X3Bvc19iID0gZ2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsIHVfcGl4ZWxfY29vcmRfbG93ZXIsIHVfc2NhbGVfYiAqIHVfcGF0dGVybl9zaXplX2IsIHVfdGlsZV91bml0c190b19waXhlbHMsIGFfcG9zKTtcXG5cXG4gICAgdl9wb3MgPSAoZ2xfUG9zaXRpb24ueHkgLyBnbF9Qb3NpdGlvbi53ICsgMS4wKSAvIDIuMCAqIHVfd29ybGQ7XFxufVxcblwifSxmaWxsUGF0dGVybjp7ZnJhZ21lbnRTb3VyY2U6XCJ1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2E7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9icl9hO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYjtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2I7XFxudW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTtcXG51bmlmb3JtIGZsb2F0IHVfbWl4O1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XFxuXFxudmFyeWluZyB2ZWMyIHZfcG9zX2E7XFxudmFyeWluZyB2ZWMyIHZfcG9zX2I7XFxuXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbiAgICB2ZWMyIGltYWdlY29vcmQgPSBtb2Qodl9wb3NfYSwgMS4wKTtcXG4gICAgdmVjMiBwb3MgPSBtaXgodV9wYXR0ZXJuX3RsX2EgLyB1X3RleHNpemUsIHVfcGF0dGVybl9icl9hIC8gdV90ZXhzaXplLCBpbWFnZWNvb3JkKTtcXG4gICAgdmVjNCBjb2xvcjEgPSB0ZXh0dXJlMkQodV9pbWFnZSwgcG9zKTtcXG5cXG4gICAgdmVjMiBpbWFnZWNvb3JkX2IgPSBtb2Qodl9wb3NfYiwgMS4wKTtcXG4gICAgdmVjMiBwb3MyID0gbWl4KHVfcGF0dGVybl90bF9iIC8gdV90ZXhzaXplLCB1X3BhdHRlcm5fYnJfYiAvIHVfdGV4c2l6ZSwgaW1hZ2Vjb29yZF9iKTtcXG4gICAgdmVjNCBjb2xvcjIgPSB0ZXh0dXJlMkQodV9pbWFnZSwgcG9zMik7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IG1peChjb2xvcjEsIGNvbG9yMiwgdV9taXgpICogb3BhY2l0eTtcXG5cXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcXG4jZW5kaWZcXG59XFxuXCIsdmVydGV4U291cmNlOlwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9hO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9iO1xcbnVuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX3VwcGVyO1xcbnVuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX2xvd2VyO1xcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZV9hO1xcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZV9iO1xcbnVuaWZvcm0gZmxvYXQgdV90aWxlX3VuaXRzX3RvX3BpeGVscztcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG5cXG52YXJ5aW5nIHZlYzIgdl9wb3NfYTtcXG52YXJ5aW5nIHZlYzIgdl9wb3NfYjtcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcXG5cXG4gICAgdl9wb3NfYSA9IGdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLCB1X3BpeGVsX2Nvb3JkX2xvd2VyLCB1X3NjYWxlX2EgKiB1X3BhdHRlcm5fc2l6ZV9hLCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLCBhX3Bvcyk7XFxuICAgIHZfcG9zX2IgPSBnZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlciwgdV9waXhlbF9jb29yZF9sb3dlciwgdV9zY2FsZV9iICogdV9wYXR0ZXJuX3NpemVfYiwgdV90aWxlX3VuaXRzX3RvX3BpeGVscywgYV9wb3MpO1xcbn1cXG5cIn0sZmlsbEV4dHJ1c2lvbjp7ZnJhZ21lbnRTb3VyY2U6XCJ2YXJ5aW5nIHZlYzQgdl9jb2xvcjtcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmFzZVxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoZWlnaHRcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmFzZVxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhlaWdodFxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZfY29sb3I7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcInVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG51bmlmb3JtIHZlYzMgdV9saWdodGNvbG9yO1xcbnVuaWZvcm0gbG93cCB2ZWMzIHVfbGlnaHRwb3M7XFxudW5pZm9ybSBsb3dwIGZsb2F0IHVfbGlnaHRpbnRlbnNpdHk7XFxuXFxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XFxuYXR0cmlidXRlIHZlYzQgYV9ub3JtYWxfZWQ7XFxuXFxudmFyeWluZyB2ZWM0IHZfY29sb3I7XFxuXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJhc2VcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGVpZ2h0XFxuXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJhc2VcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoZWlnaHRcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxcblxcbiAgICB2ZWMzIG5vcm1hbCA9IGFfbm9ybWFsX2VkLnh5ejtcXG5cXG4gICAgYmFzZSA9IG1heCgwLjAsIGJhc2UpO1xcbiAgICBoZWlnaHQgPSBtYXgoMC4wLCBoZWlnaHQpO1xcblxcbiAgICBmbG9hdCB0ID0gbW9kKG5vcm1hbC54LCAyLjApO1xcblxcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgdCA+IDAuMCA/IGhlaWdodCA6IGJhc2UsIDEpO1xcblxcbiAgICAvLyBSZWxhdGl2ZSBsdW1pbmFuY2UgKGhvdyBkYXJrL2JyaWdodCBpcyB0aGUgc3VyZmFjZSBjb2xvcj8pXFxuICAgIGZsb2F0IGNvbG9ydmFsdWUgPSBjb2xvci5yICogMC4yMTI2ICsgY29sb3IuZyAqIDAuNzE1MiArIGNvbG9yLmIgKiAwLjA3MjI7XFxuXFxuICAgIHZfY29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuXFxuICAgIC8vIEFkZCBzbGlnaHQgYW1iaWVudCBsaWdodGluZyBzbyBubyBleHRydXNpb25zIGFyZSB0b3RhbGx5IGJsYWNrXFxuICAgIHZlYzQgYW1iaWVudGxpZ2h0ID0gdmVjNCgwLjAzLCAwLjAzLCAwLjAzLCAxLjApO1xcbiAgICBjb2xvciArPSBhbWJpZW50bGlnaHQ7XFxuXFxuICAgIC8vIENhbGN1bGF0ZSBjb3ModGhldGEpLCB3aGVyZSB0aGV0YSBpcyB0aGUgYW5nbGUgYmV0d2VlbiBzdXJmYWNlIG5vcm1hbCBhbmQgZGlmZnVzZSBsaWdodCByYXlcXG4gICAgZmxvYXQgZGlyZWN0aW9uYWwgPSBjbGFtcChkb3Qobm9ybWFsIC8gMTYzODQuMCwgdV9saWdodHBvcyksIDAuMCwgMS4wKTtcXG5cXG4gICAgLy8gQWRqdXN0IGRpcmVjdGlvbmFsIHNvIHRoYXRcXG4gICAgLy8gdGhlIHJhbmdlIG9mIHZhbHVlcyBmb3IgaGlnaGxpZ2h0L3NoYWRpbmcgaXMgbmFycm93ZXJcXG4gICAgLy8gd2l0aCBsb3dlciBsaWdodCBpbnRlbnNpdHlcXG4gICAgLy8gYW5kIHdpdGggbGlnaHRlci9icmlnaHRlciBzdXJmYWNlIGNvbG9yc1xcbiAgICBkaXJlY3Rpb25hbCA9IG1peCgoMS4wIC0gdV9saWdodGludGVuc2l0eSksIG1heCgoMS4wIC0gY29sb3J2YWx1ZSArIHVfbGlnaHRpbnRlbnNpdHkpLCAxLjApLCBkaXJlY3Rpb25hbCk7XFxuXFxuICAgIC8vIEFkZCBncmFkaWVudCBhbG9uZyB6IGF4aXMgb2Ygc2lkZSBzdXJmYWNlc1xcbiAgICBpZiAobm9ybWFsLnkgIT0gMC4wKSB7XFxuICAgICAgICBkaXJlY3Rpb25hbCAqPSBjbGFtcCgodCArIGJhc2UpICogcG93KGhlaWdodCAvIDE1MC4wLCAwLjUpLCBtaXgoMC43LCAwLjk4LCAxLjAgLSB1X2xpZ2h0aW50ZW5zaXR5KSwgMS4wKTtcXG4gICAgfVxcblxcbiAgICAvLyBBc3NpZ24gZmluYWwgY29sb3IgYmFzZWQgb24gc3VyZmFjZSArIGFtYmllbnQgbGlnaHQgY29sb3IsIGRpZmZ1c2UgbGlnaHQgZGlyZWN0aW9uYWwsIGFuZCBsaWdodCBjb2xvclxcbiAgICAvLyB3aXRoIGxvd2VyIGJvdW5kcyBhZGp1c3RlZCB0byBodWUgb2YgbGlnaHRcXG4gICAgLy8gc28gdGhhdCBzaGFkaW5nIGlzIHRpbnRlZCB3aXRoIHRoZSBjb21wbGVtZW50YXJ5IChvcHBvc2l0ZSkgY29sb3IgdG8gdGhlIGxpZ2h0IGNvbG9yXFxuICAgIHZfY29sb3IuciArPSBjbGFtcChjb2xvci5yICogZGlyZWN0aW9uYWwgKiB1X2xpZ2h0Y29sb3IuciwgbWl4KDAuMCwgMC4zLCAxLjAgLSB1X2xpZ2h0Y29sb3IuciksIDEuMCk7XFxuICAgIHZfY29sb3IuZyArPSBjbGFtcChjb2xvci5nICogZGlyZWN0aW9uYWwgKiB1X2xpZ2h0Y29sb3IuZywgbWl4KDAuMCwgMC4zLCAxLjAgLSB1X2xpZ2h0Y29sb3IuZyksIDEuMCk7XFxuICAgIHZfY29sb3IuYiArPSBjbGFtcChjb2xvci5iICogZGlyZWN0aW9uYWwgKiB1X2xpZ2h0Y29sb3IuYiwgbWl4KDAuMCwgMC4zLCAxLjAgLSB1X2xpZ2h0Y29sb3IuYiksIDEuMCk7XFxufVxcblwifSxmaWxsRXh0cnVzaW9uUGF0dGVybjp7ZnJhZ21lbnRTb3VyY2U6XCJ1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2E7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9icl9hO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYjtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2I7XFxudW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTtcXG51bmlmb3JtIGZsb2F0IHVfbWl4O1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XFxuXFxudmFyeWluZyB2ZWMyIHZfcG9zX2E7XFxudmFyeWluZyB2ZWMyIHZfcG9zX2I7XFxudmFyeWluZyB2ZWM0IHZfbGlnaHRpbmc7XFxuXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJhc2VcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGVpZ2h0XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJhc2VcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoZWlnaHRcXG5cXG4gICAgdmVjMiBpbWFnZWNvb3JkID0gbW9kKHZfcG9zX2EsIDEuMCk7XFxuICAgIHZlYzIgcG9zID0gbWl4KHVfcGF0dGVybl90bF9hIC8gdV90ZXhzaXplLCB1X3BhdHRlcm5fYnJfYSAvIHVfdGV4c2l6ZSwgaW1hZ2Vjb29yZCk7XFxuICAgIHZlYzQgY29sb3IxID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHBvcyk7XFxuXFxuICAgIHZlYzIgaW1hZ2Vjb29yZF9iID0gbW9kKHZfcG9zX2IsIDEuMCk7XFxuICAgIHZlYzIgcG9zMiA9IG1peCh1X3BhdHRlcm5fdGxfYiAvIHVfdGV4c2l6ZSwgdV9wYXR0ZXJuX2JyX2IgLyB1X3RleHNpemUsIGltYWdlY29vcmRfYik7XFxuICAgIHZlYzQgY29sb3IyID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHBvczIpO1xcblxcbiAgICB2ZWM0IG1peGVkQ29sb3IgPSBtaXgoY29sb3IxLCBjb2xvcjIsIHVfbWl4KTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gbWl4ZWRDb2xvciAqIHZfbGlnaHRpbmc7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcInVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3NpemVfYTtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3NpemVfYjtcXG51bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF91cHBlcjtcXG51bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF9sb3dlcjtcXG51bmlmb3JtIGZsb2F0IHVfc2NhbGVfYTtcXG51bmlmb3JtIGZsb2F0IHVfc2NhbGVfYjtcXG51bmlmb3JtIGZsb2F0IHVfdGlsZV91bml0c190b19waXhlbHM7XFxudW5pZm9ybSBmbG9hdCB1X2hlaWdodF9mYWN0b3I7XFxuXFxudW5pZm9ybSB2ZWMzIHVfbGlnaHRjb2xvcjtcXG51bmlmb3JtIGxvd3AgdmVjMyB1X2xpZ2h0cG9zO1xcbnVuaWZvcm0gbG93cCBmbG9hdCB1X2xpZ2h0aW50ZW5zaXR5O1xcblxcbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xcbmF0dHJpYnV0ZSB2ZWM0IGFfbm9ybWFsX2VkO1xcblxcbnZhcnlpbmcgdmVjMiB2X3Bvc19hO1xcbnZhcnlpbmcgdmVjMiB2X3Bvc19iO1xcbnZhcnlpbmcgdmVjNCB2X2xpZ2h0aW5nO1xcbnZhcnlpbmcgZmxvYXQgdl9kaXJlY3Rpb25hbDtcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmFzZVxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoZWlnaHRcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmFzZVxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhlaWdodFxcblxcbiAgICB2ZWMzIG5vcm1hbCA9IGFfbm9ybWFsX2VkLnh5ejtcXG4gICAgZmxvYXQgZWRnZWRpc3RhbmNlID0gYV9ub3JtYWxfZWQudztcXG5cXG4gICAgYmFzZSA9IG1heCgwLjAsIGJhc2UpO1xcbiAgICBoZWlnaHQgPSBtYXgoMC4wLCBoZWlnaHQpO1xcblxcbiAgICBmbG9hdCB0ID0gbW9kKG5vcm1hbC54LCAyLjApO1xcbiAgICBmbG9hdCB6ID0gdCA+IDAuMCA/IGhlaWdodCA6IGJhc2U7XFxuXFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCB6LCAxKTtcXG5cXG4gICAgdmVjMiBwb3MgPSBub3JtYWwueCA9PSAxLjAgJiYgbm9ybWFsLnkgPT0gMC4wICYmIG5vcm1hbC56ID09IDE2Mzg0LjBcXG4gICAgICAgID8gYV9wb3MgLy8gZXh0cnVzaW9uIHRvcFxcbiAgICAgICAgOiB2ZWMyKGVkZ2VkaXN0YW5jZSwgeiAqIHVfaGVpZ2h0X2ZhY3Rvcik7IC8vIGV4dHJ1c2lvbiBzaWRlXFxuXFxuICAgIHZfcG9zX2EgPSBnZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlciwgdV9waXhlbF9jb29yZF9sb3dlciwgdV9zY2FsZV9hICogdV9wYXR0ZXJuX3NpemVfYSwgdV90aWxlX3VuaXRzX3RvX3BpeGVscywgcG9zKTtcXG4gICAgdl9wb3NfYiA9IGdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLCB1X3BpeGVsX2Nvb3JkX2xvd2VyLCB1X3NjYWxlX2IgKiB1X3BhdHRlcm5fc2l6ZV9iLCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLCBwb3MpO1xcblxcbiAgICB2X2xpZ2h0aW5nID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICBmbG9hdCBkaXJlY3Rpb25hbCA9IGNsYW1wKGRvdChub3JtYWwgLyAxNjM4My4wLCB1X2xpZ2h0cG9zKSwgMC4wLCAxLjApO1xcbiAgICBkaXJlY3Rpb25hbCA9IG1peCgoMS4wIC0gdV9saWdodGludGVuc2l0eSksIG1heCgoMC41ICsgdV9saWdodGludGVuc2l0eSksIDEuMCksIGRpcmVjdGlvbmFsKTtcXG5cXG4gICAgaWYgKG5vcm1hbC55ICE9IDAuMCkge1xcbiAgICAgICAgZGlyZWN0aW9uYWwgKj0gY2xhbXAoKHQgKyBiYXNlKSAqIHBvdyhoZWlnaHQgLyAxNTAuMCwgMC41KSwgbWl4KDAuNywgMC45OCwgMS4wIC0gdV9saWdodGludGVuc2l0eSksIDEuMCk7XFxuICAgIH1cXG5cXG4gICAgdl9saWdodGluZy5yZ2IgKz0gY2xhbXAoZGlyZWN0aW9uYWwgKiB1X2xpZ2h0Y29sb3IsIG1peCh2ZWMzKDAuMCksIHZlYzMoMC4zKSwgMS4wIC0gdV9saWdodGNvbG9yKSwgdmVjMygxLjApKTtcXG59XFxuXCJ9LGV4dHJ1c2lvblRleHR1cmU6e2ZyYWdtZW50U291cmNlOlwidW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcXG51bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTtcXG52YXJ5aW5nIHZlYzIgdl9wb3M7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodV9pbWFnZSwgdl9wb3MpICogdV9vcGFjaXR5O1xcblxcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcbiNlbmRpZlxcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHVfd29ybGQ7XFxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XFxudmFyeWluZyB2ZWMyIHZfcG9zO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MgKiB1X3dvcmxkLCAwLCAxKTtcXG5cXG4gICAgdl9wb3MueCA9IGFfcG9zLng7XFxuICAgIHZfcG9zLnkgPSAxLjAgLSBhX3Bvcy55O1xcbn1cXG5cIn0saGlsbHNoYWRlUHJlcGFyZTp7ZnJhZ21lbnRTb3VyY2U6XCIjaWZkZWYgR0xfRVNcXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2VuZGlmXFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcXG52YXJ5aW5nIHZlYzIgdl9wb3M7XFxudW5pZm9ybSB2ZWMyIHVfZGltZW5zaW9uO1xcbnVuaWZvcm0gZmxvYXQgdV96b29tO1xcbnVuaWZvcm0gZmxvYXQgdV9tYXh6b29tO1xcblxcbmZsb2F0IGdldEVsZXZhdGlvbih2ZWMyIGNvb3JkLCBmbG9hdCBiaWFzKSB7XFxuICAgIC8vIENvbnZlcnQgZW5jb2RlZCBlbGV2YXRpb24gdmFsdWUgdG8gbWV0ZXJzXFxuICAgIHZlYzQgZGF0YSA9IHRleHR1cmUyRCh1X2ltYWdlLCBjb29yZCkgKiAyNTUuMDtcXG4gICAgcmV0dXJuIChkYXRhLnIgKyBkYXRhLmcgKiAyNTYuMCArIGRhdGEuYiAqIDI1Ni4wICogMjU2LjApIC8gNC4wO1xcbn1cXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIHZlYzIgZXBzaWxvbiA9IDEuMCAvIHVfZGltZW5zaW9uO1xcblxcbiAgICAvLyBxdWVyaWVkIHBpeGVsczpcXG4gICAgLy8gKy0tLS0tLS0tLS0tK1xcbiAgICAvLyB8ICAgfCAgIHwgICB8XFxuICAgIC8vIHwgYSB8IGIgfCBjIHxcXG4gICAgLy8gfCAgIHwgICB8ICAgfFxcbiAgICAvLyArLS0tLS0tLS0tLS0rXFxuICAgIC8vIHwgICB8ICAgfCAgIHxcXG4gICAgLy8gfCBkIHwgZSB8IGYgfFxcbiAgICAvLyB8ICAgfCAgIHwgICB8XFxuICAgIC8vICstLS0tLS0tLS0tLStcXG4gICAgLy8gfCAgIHwgICB8ICAgfFxcbiAgICAvLyB8IGcgfCBoIHwgaSB8XFxuICAgIC8vIHwgICB8ICAgfCAgIHxcXG4gICAgLy8gKy0tLS0tLS0tLS0tK1xcblxcbiAgICBmbG9hdCBhID0gZ2V0RWxldmF0aW9uKHZfcG9zICsgdmVjMigtZXBzaWxvbi54LCAtZXBzaWxvbi55KSwgMC4wKTtcXG4gICAgZmxvYXQgYiA9IGdldEVsZXZhdGlvbih2X3BvcyArIHZlYzIoMCwgLWVwc2lsb24ueSksIDAuMCk7XFxuICAgIGZsb2F0IGMgPSBnZXRFbGV2YXRpb24odl9wb3MgKyB2ZWMyKGVwc2lsb24ueCwgLWVwc2lsb24ueSksIDAuMCk7XFxuICAgIGZsb2F0IGQgPSBnZXRFbGV2YXRpb24odl9wb3MgKyB2ZWMyKC1lcHNpbG9uLngsIDApLCAwLjApO1xcbiAgICBmbG9hdCBlID0gZ2V0RWxldmF0aW9uKHZfcG9zLCAwLjApO1xcbiAgICBmbG9hdCBmID0gZ2V0RWxldmF0aW9uKHZfcG9zICsgdmVjMihlcHNpbG9uLngsIDApLCAwLjApO1xcbiAgICBmbG9hdCBnID0gZ2V0RWxldmF0aW9uKHZfcG9zICsgdmVjMigtZXBzaWxvbi54LCBlcHNpbG9uLnkpLCAwLjApO1xcbiAgICBmbG9hdCBoID0gZ2V0RWxldmF0aW9uKHZfcG9zICsgdmVjMigwLCBlcHNpbG9uLnkpLCAwLjApO1xcbiAgICBmbG9hdCBpID0gZ2V0RWxldmF0aW9uKHZfcG9zICsgdmVjMihlcHNpbG9uLngsIGVwc2lsb24ueSksIDAuMCk7XFxuXFxuICAgIC8vIGhlcmUgd2UgZGl2aWRlIHRoZSB4IGFuZCB5IHNsb3BlcyBieSA4ICogcGl4ZWwgc2l6ZVxcbiAgICAvLyB3aGVyZSBwaXhlbCBzaXplIChha2EgbWV0ZXJzL3BpeGVsKSBpczpcXG4gICAgLy8gY2lyY3VtZmVyZW5jZSBvZiB0aGUgd29ybGQgLyAocGl4ZWxzIHBlciB0aWxlICogbnVtYmVyIG9mIHRpbGVzKVxcbiAgICAvLyB3aGljaCBpcyBlcXVpdmFsZW50IHRvOiA4ICogNDAwNzUwMTYuNjg1NTc4NSAvICg1MTIgKiBwb3coMiwgdV96b29tKSlcXG4gICAgLy8gd2hpY2ggY2FuIGJlIHJlZHVjZWQgdG86IHBvdygyLCAxOS4yNTYxOTk3ODUyNyAtIHVfem9vbSlcXG4gICAgLy8gd2Ugd2FudCB0byB2ZXJ0aWNhbGx5IGV4YWdnZXJhdGUgdGhlIGhpbGxzaGFkaW5nIHRob3VnaCwgYmVjYXVzZSBvdGhlcndpc2VcXG4gICAgLy8gaXQgaXMgYmFyZWx5IG5vdGljZWFibGUgYXQgbG93IHpvb21zLiB0byBkbyB0aGlzLCB3ZSBtdWx0aXBseSB0aGlzIGJ5IHNvbWVcXG4gICAgLy8gc2NhbGUgZmFjdG9yIHBvdygyLCAodV96b29tIC0gdV9tYXh6b29tKSAqIGEpIHdoZXJlIGEgaXMgYW4gYXJiaXRyYXJ5IHZhbHVlXFxuICAgIC8vIEhlcmUgd2UgdXNlIGE9MC4zIHdoaWNoIHdvcmtzIG91dCB0byB0aGUgZXhwcmVzc2lvbiBiZWxvdy4gc2VlIFxcbiAgICAvLyBuaWNraWRsdWdhc2gncyBhd2Vzb21lIGJyZWFrZG93biBmb3IgbW9yZSBpbmZvXFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL3B1bGwvNTI4NiNkaXNjdXNzaW9uX3IxNDg0MTk1NTZcXG4gICAgZmxvYXQgZXhhZ2dlcmF0aW9uID0gdV96b29tIDwgMi4wID8gMC40IDogdV96b29tIDwgNC41ID8gMC4zNSA6IDAuMztcXG5cXG4gICAgdmVjMiBkZXJpdiA9IHZlYzIoXFxuICAgICAgICAoYyArIGYgKyBmICsgaSkgLSAoYSArIGQgKyBkICsgZyksXFxuICAgICAgICAoZyArIGggKyBoICsgaSkgLSAoYSArIGIgKyBiICsgYylcXG4gICAgKSAvICBwb3coMi4wLCAodV96b29tIC0gdV9tYXh6b29tKSAqIGV4YWdnZXJhdGlvbiArIDE5LjI1NjIgLSB1X3pvb20pO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjbGFtcCh2ZWM0KFxcbiAgICAgICAgZGVyaXYueCAvIDIuMCArIDAuNSxcXG4gICAgICAgIGRlcml2LnkgLyAyLjAgKyAwLjUsXFxuICAgICAgICAxLjAsXFxuICAgICAgICAxLjApLCAwLjAsIDEuMCk7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcInVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG5hdHRyaWJ1dGUgdmVjMiBhX3RleHR1cmVfcG9zO1xcblxcbnZhcnlpbmcgdmVjMiB2X3BvcztcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcXG4gICAgdl9wb3MgPSAoYV90ZXh0dXJlX3BvcyAvIDgxOTIuMCkgLyAyLjAgKyAwLjI1O1xcbn1cXG5cIn0saGlsbHNoYWRlOntmcmFnbWVudFNvdXJjZTpcInVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XFxudmFyeWluZyB2ZWMyIHZfcG9zO1xcblxcbnVuaWZvcm0gdmVjMiB1X2xhdHJhbmdlO1xcbnVuaWZvcm0gdmVjMiB1X2xpZ2h0O1xcbnVuaWZvcm0gdmVjNCB1X3NoYWRvdztcXG51bmlmb3JtIHZlYzQgdV9oaWdobGlnaHQ7XFxudW5pZm9ybSB2ZWM0IHVfYWNjZW50O1xcblxcbiNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OTNcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIHZlYzQgcGl4ZWwgPSB0ZXh0dXJlMkQodV9pbWFnZSwgdl9wb3MpO1xcblxcbiAgICB2ZWMyIGRlcml2ID0gKChwaXhlbC5yZyAqIDIuMCkgLSAxLjApO1xcblxcbiAgICAvLyBXZSBkaXZpZGUgdGhlIHNsb3BlIGJ5IGEgc2NhbGUgZmFjdG9yIGJhc2VkIG9uIHRoZSBjb3NpbiBvZiB0aGUgcGl4ZWwncyBhcHByb3hpbWF0ZSBsYXRpdHVkZVxcbiAgICAvLyB0byBhY2NvdW50IGZvciBtZXJjYXRvciBwcm9qZWN0aW9uIGRpc3RvcnRpb24uIHNlZSAjNDgwNyBmb3IgZGV0YWlsc1xcbiAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGNvcyhyYWRpYW5zKCh1X2xhdHJhbmdlWzBdIC0gdV9sYXRyYW5nZVsxXSkgKiAoMS4wIC0gdl9wb3MueSkgKyB1X2xhdHJhbmdlWzFdKSk7XFxuICAgIC8vIFdlIGFsc28gbXVsdGlwbHkgdGhlIHNsb3BlIGJ5IGFuIGFyYml0cmFyeSB6LWZhY3RvciBvZiAxLjI1XFxuICAgIGZsb2F0IHNsb3BlID0gYXRhbigxLjI1ICogbGVuZ3RoKGRlcml2KSAvIHNjYWxlRmFjdG9yKTtcXG4gICAgZmxvYXQgYXNwZWN0ID0gZGVyaXYueCAhPSAwLjAgPyBhdGFuKGRlcml2LnksIC1kZXJpdi54KSA6IFBJIC8gMi4wICogKGRlcml2LnkgPiAwLjAgPyAxLjAgOiAtMS4wKTtcXG5cXG4gICAgZmxvYXQgaW50ZW5zaXR5ID0gdV9saWdodC54O1xcbiAgICAvLyBXZSBhZGQgUEkgdG8gbWFrZSB0aGlzIHByb3BlcnR5IG1hdGNoIHRoZSBnbG9iYWwgbGlnaHQgb2JqZWN0LCB3aGljaCBhZGRzIFBJLzIgdG8gdGhlIGxpZ2h0J3MgYXppbXV0aGFsXFxuICAgIC8vIHBvc2l0aW9uIHByb3BlcnR5IHRvIGFjY291bnQgZm9yIDBkZWcgY29ycmVzcG9uZGluZyB0byBub3J0aC90aGUgdG9wIG9mIHRoZSB2aWV3cG9ydCBpbiB0aGUgc3R5bGUgc3BlY1xcbiAgICAvLyBhbmQgdGhlIG9yaWdpbmFsIHNoYWRlciB3YXMgd3JpdHRlbiB0byBhY2NlcHQgKC1pbGx1bWluYXRpb25EaXJlY3Rpb24gLSA5MCkgYXMgdGhlIGF6aW11dGhhbC5cXG4gICAgZmxvYXQgYXppbXV0aCA9IHVfbGlnaHQueSArIFBJO1xcblxcbiAgICAvLyBXZSBzY2FsZSB0aGUgc2xvcGUgZXhwb25lbnRpYWxseSBiYXNlZCBvbiBpbnRlbnNpdHksIHVzaW5nIGEgY2FsY3VsYXRpb24gc2ltaWxhciB0b1xcbiAgICAvLyB0aGUgZXhwb25lbnRpYWwgaW50ZXJwb2xhdGlvbiBmdW5jdGlvbiBpbiB0aGUgc3R5bGUgc3BlYzpcXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvYmxvYi9tYXN0ZXIvc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9pbnRlcnBvbGF0ZS5qcyNMMjE3LUwyMjhcXG4gICAgLy8gc28gdGhhdCBoaWdoZXIgaW50ZW5zaXR5IHZhbHVlcyBjcmVhdGUgbW9yZSBvcGFxdWUgaGlsbHNoYWRpbmcuXFxuICAgIGZsb2F0IGJhc2UgPSAxLjg3NSAtIGludGVuc2l0eSAqIDEuNzU7XFxuICAgIGZsb2F0IG1heFZhbHVlID0gMC41ICogUEk7XFxuICAgIGZsb2F0IHNjYWxlZFNsb3BlID0gaW50ZW5zaXR5ICE9IDAuNSA/ICgocG93KGJhc2UsIHNsb3BlKSAtIDEuMCkgLyAocG93KGJhc2UsIG1heFZhbHVlKSAtIDEuMCkpICogbWF4VmFsdWUgOiBzbG9wZTtcXG5cXG4gICAgLy8gVGhlIGFjY2VudCBjb2xvciBpcyBjYWxjdWxhdGVkIHdpdGggdGhlIGNvc2luZSBvZiB0aGUgc2xvcGUgd2hpbGUgdGhlIHNoYWRlIGNvbG9yIGlzIGNhbGN1bGF0ZWQgd2l0aCB0aGUgc2luZVxcbiAgICAvLyBzbyB0aGF0IHRoZSBhY2NlbnQgY29sb3IncyByYXRlIG9mIGNoYW5nZSBlYXNlcyBpbiB3aGlsZSB0aGUgc2hhZGUgY29sb3IncyBlYXNlcyBvdXQuXFxuICAgIGZsb2F0IGFjY2VudCA9IGNvcyhzY2FsZWRTbG9wZSk7XFxuICAgIC8vIFdlIG11bHRpcGx5IGJvdGggdGhlIGFjY2VudCBhbmQgc2hhZGUgY29sb3IgYnkgYSBjbGFtcGVkIGludGVuc2l0eSB2YWx1ZVxcbiAgICAvLyBzbyB0aGF0IGludGVuc2l0aWVzID49IDAuNSBkbyBub3QgYWRkaXRpb25hbGx5IGFmZmVjdCB0aGUgY29sb3IgdmFsdWVzXFxuICAgIC8vIHdoaWxlIGludGVuc2l0eSB2YWx1ZXMgPCAwLjUgbWFrZSB0aGUgb3ZlcmFsbCBjb2xvciBtb3JlIHRyYW5zcGFyZW50LlxcbiAgICB2ZWM0IGFjY2VudF9jb2xvciA9ICgxLjAgLSBhY2NlbnQpICogdV9hY2NlbnQgKiBjbGFtcChpbnRlbnNpdHkgKiAyLjAsIDAuMCwgMS4wKTtcXG4gICAgZmxvYXQgc2hhZGUgPSBhYnMobW9kKChhc3BlY3QgKyBhemltdXRoKSAvIFBJICsgMC41LCAyLjApIC0gMS4wKTtcXG4gICAgdmVjNCBzaGFkZV9jb2xvciA9IG1peCh1X3NoYWRvdywgdV9oaWdobGlnaHQsIHNoYWRlKSAqIHNpbihzY2FsZWRTbG9wZSkgKiBjbGFtcChpbnRlbnNpdHkgKiAyLjAsIDAuMCwgMS4wKTtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gYWNjZW50X2NvbG9yICogKDEuMCAtIHNoYWRlX2NvbG9yLmEpICsgc2hhZGVfY29sb3I7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcInVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG5hdHRyaWJ1dGUgdmVjMiBhX3RleHR1cmVfcG9zO1xcblxcbnZhcnlpbmcgdmVjMiB2X3BvcztcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcXG4gICAgdl9wb3MgPSBhX3RleHR1cmVfcG9zIC8gODE5Mi4wO1xcbn1cXG5cIn0sbGluZTp7ZnJhZ21lbnRTb3VyY2U6XCIjcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxudmFyeWluZyB2ZWMyIHZfd2lkdGgyO1xcbnZhcnlpbmcgdmVjMiB2X25vcm1hbDtcXG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBvZiB0aGUgcGl4ZWwgZnJvbSB0aGUgbGluZSBpbiBwaXhlbHMuXFxuICAgIGZsb2F0IGRpc3QgPSBsZW5ndGgodl9ub3JtYWwpICogdl93aWR0aDIucztcXG5cXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhbnRpYWxpYXNpbmcgZmFkZSBmYWN0b3IuIFRoaXMgaXMgZWl0aGVyIHdoZW4gZmFkaW5nIGluXFxuICAgIC8vIHRoZSBsaW5lIGluIGNhc2Ugb2YgYW4gb2Zmc2V0IGxpbmUgKHZfd2lkdGgyLnQpIG9yIHdoZW4gZmFkaW5nIG91dFxcbiAgICAvLyAodl93aWR0aDIucylcXG4gICAgZmxvYXQgYmx1cjIgPSAoYmx1ciArIDEuMCAvIERFVklDRV9QSVhFTF9SQVRJTykgKiB2X2dhbW1hX3NjYWxlO1xcbiAgICBmbG9hdCBhbHBoYSA9IGNsYW1wKG1pbihkaXN0IC0gKHZfd2lkdGgyLnQgLSBibHVyMiksIHZfd2lkdGgyLnMgLSBkaXN0KSAvIGJsdXIyLCAwLjAsIDEuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yICogKGFscGhhICogb3BhY2l0eSk7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcIlxcblxcbi8vIHRoZSBkaXN0YW5jZSBvdmVyIHdoaWNoIHRoZSBsaW5lIGVkZ2UgZmFkZXMgb3V0Llxcbi8vIFJldGluYSBkZXZpY2VzIG5lZWQgYSBzbWFsbGVyIGRpc3RhbmNlIHRvIGF2b2lkIGFsaWFzaW5nLlxcbiNkZWZpbmUgQU5USUFMSUFTSU5HIDEuMCAvIERFVklDRV9QSVhFTF9SQVRJTyAvIDIuMFxcblxcbi8vIGZsb29yKDEyNyAvIDIpID09IDYzLjBcXG4vLyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pdGVyIGxpbWl0IGlzIDIuMCBhdCB0aGUgbW9tZW50LiB0aGUgZXh0cnVkZSBub3JtYWwgaXNcXG4vLyBzdG9yZWQgaW4gYSBieXRlICgtMTI4Li4xMjcpLiB3ZSBzY2FsZSByZWd1bGFyIG5vcm1hbHMgdXAgdG8gbGVuZ3RoIDYzLCBidXRcXG4vLyB0aGVyZSBhcmUgYWxzbyBcXFwic3BlY2lhbFxcXCIgbm9ybWFscyB0aGF0IGhhdmUgYSBiaWdnZXIgbGVuZ3RoIChvZiB1cCB0byAxMjYgaW5cXG4vLyB0aGlzIGNhc2UpLlxcbi8vICNkZWZpbmUgc2NhbGUgNjMuMFxcbiNkZWZpbmUgc2NhbGUgMC4wMTU4NzMwMTZcXG5cXG5hdHRyaWJ1dGUgdmVjNCBhX3Bvc19ub3JtYWw7XFxuYXR0cmlidXRlIHZlYzQgYV9kYXRhO1xcblxcbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9yYXRpbztcXG51bmlmb3JtIHZlYzIgdV9nbF91bml0c190b19waXhlbHM7XFxuXFxudmFyeWluZyB2ZWMyIHZfbm9ybWFsO1xcbnZhcnlpbmcgdmVjMiB2X3dpZHRoMjtcXG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XFxudmFyeWluZyBoaWdocCBmbG9hdCB2X2xpbmVzb2ZhcjtcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9mZnNldFxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCB3aWR0aFxcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvZmZzZXRcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCB3aWR0aFxcblxcbiAgICB2ZWMyIGFfZXh0cnVkZSA9IGFfZGF0YS54eSAtIDEyOC4wO1xcbiAgICBmbG9hdCBhX2RpcmVjdGlvbiA9IG1vZChhX2RhdGEueiwgNC4wKSAtIDEuMDtcXG5cXG4gICAgdl9saW5lc29mYXIgPSAoZmxvb3IoYV9kYXRhLnogLyA0LjApICsgYV9kYXRhLncgKiA2NC4wKSAqIDIuMDtcXG5cXG4gICAgdmVjMiBwb3MgPSBhX3Bvc19ub3JtYWwueHk7XFxuXFxuICAgIC8vIHggaXMgMSBpZiBpdCdzIGEgcm91bmQgY2FwLCAwIG90aGVyd2lzZVxcbiAgICAvLyB5IGlzIDEgaWYgdGhlIG5vcm1hbCBwb2ludHMgdXAsIGFuZCAtMSBpZiBpdCBwb2ludHMgZG93blxcbiAgICBtZWRpdW1wIHZlYzIgbm9ybWFsID0gYV9wb3Nfbm9ybWFsLnp3O1xcbiAgICB2X25vcm1hbCA9IG5vcm1hbDtcXG5cXG4gICAgLy8gdGhlc2UgdHJhbnNmb3JtYXRpb25zIHVzZWQgdG8gYmUgYXBwbGllZCBpbiB0aGUgSlMgYW5kIG5hdGl2ZSBjb2RlIGJhc2VzLlxcbiAgICAvLyBtb3ZlZCB0aGVtIGludG8gdGhlIHNoYWRlciBmb3IgY2xhcml0eSBhbmQgc2ltcGxpY2l0eS5cXG4gICAgZ2Fwd2lkdGggPSBnYXB3aWR0aCAvIDIuMDtcXG4gICAgZmxvYXQgaGFsZndpZHRoID0gd2lkdGggLyAyLjA7XFxuICAgIG9mZnNldCA9IC0xLjAgKiBvZmZzZXQ7XFxuXFxuICAgIGZsb2F0IGluc2V0ID0gZ2Fwd2lkdGggKyAoZ2Fwd2lkdGggPiAwLjAgPyBBTlRJQUxJQVNJTkcgOiAwLjApO1xcbiAgICBmbG9hdCBvdXRzZXQgPSBnYXB3aWR0aCArIGhhbGZ3aWR0aCAqIChnYXB3aWR0aCA+IDAuMCA/IDIuMCA6IDEuMCkgKyBBTlRJQUxJQVNJTkc7XFxuXFxuICAgIC8vIFNjYWxlIHRoZSBleHRydXNpb24gdmVjdG9yIGRvd24gdG8gYSBub3JtYWwgYW5kIHRoZW4gdXAgYnkgdGhlIGxpbmUgd2lkdGhcXG4gICAgLy8gb2YgdGhpcyB2ZXJ0ZXguXFxuICAgIG1lZGl1bXAgdmVjMiBkaXN0ID0gb3V0c2V0ICogYV9leHRydWRlICogc2NhbGU7XFxuXFxuICAgIC8vIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IHdoZW4gZHJhd2luZyBhIGxpbmUgdGhhdCBpcyB0byB0aGUgc2lkZSBvZiB0aGUgYWN0dWFsIGxpbmUuXFxuICAgIC8vIFdlIGRvIHRoaXMgYnkgY3JlYXRpbmcgYSB2ZWN0b3IgdGhhdCBwb2ludHMgdG93YXJkcyB0aGUgZXh0cnVkZSwgYnV0IHJvdGF0ZVxcbiAgICAvLyBpdCB3aGVuIHdlJ3JlIGRyYXdpbmcgcm91bmQgZW5kIHBvaW50cyAoYV9kaXJlY3Rpb24gPSAtMSBvciAxKSBzaW5jZSB0aGVpclxcbiAgICAvLyBleHRydWRlIHZlY3RvciBwb2ludHMgaW4gYW5vdGhlciBkaXJlY3Rpb24uXFxuICAgIG1lZGl1bXAgZmxvYXQgdSA9IDAuNSAqIGFfZGlyZWN0aW9uO1xcbiAgICBtZWRpdW1wIGZsb2F0IHQgPSAxLjAgLSBhYnModSk7XFxuICAgIG1lZGl1bXAgdmVjMiBvZmZzZXQyID0gb2Zmc2V0ICogYV9leHRydWRlICogc2NhbGUgKiBub3JtYWwueSAqIG1hdDIodCwgLXUsIHUsIHQpO1xcblxcbiAgICB2ZWM0IHByb2plY3RlZF9leHRydWRlID0gdV9tYXRyaXggKiB2ZWM0KGRpc3QgLyB1X3JhdGlvLCAwLjAsIDAuMCk7XFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KHBvcyArIG9mZnNldDIgLyB1X3JhdGlvLCAwLjAsIDEuMCkgKyBwcm9qZWN0ZWRfZXh0cnVkZTtcXG5cXG4gICAgLy8gY2FsY3VsYXRlIGhvdyBtdWNoIHRoZSBwZXJzcGVjdGl2ZSB2aWV3IHNxdWlzaGVzIG9yIHN0cmV0Y2hlcyB0aGUgZXh0cnVkZVxcbiAgICBmbG9hdCBleHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlID0gbGVuZ3RoKGRpc3QpO1xcbiAgICBmbG9hdCBleHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlID0gbGVuZ3RoKHByb2plY3RlZF9leHRydWRlLnh5IC8gZ2xfUG9zaXRpb24udyAqIHVfZ2xfdW5pdHNfdG9fcGl4ZWxzKTtcXG4gICAgdl9nYW1tYV9zY2FsZSA9IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmUgLyBleHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlO1xcblxcbiAgICB2X3dpZHRoMiA9IHZlYzIob3V0c2V0LCBpbnNldCk7XFxufVxcblwifSxsaW5lR3JhZGllbnQ6e2ZyYWdtZW50U291cmNlOlwiXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XFxuXFxudmFyeWluZyB2ZWMyIHZfd2lkdGgyO1xcbnZhcnlpbmcgdmVjMiB2X25vcm1hbDtcXG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XFxudmFyeWluZyBoaWdocCBmbG9hdCB2X2xpbmVwcm9ncmVzcztcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBvZiB0aGUgcGl4ZWwgZnJvbSB0aGUgbGluZSBpbiBwaXhlbHMuXFxuICAgIGZsb2F0IGRpc3QgPSBsZW5ndGgodl9ub3JtYWwpICogdl93aWR0aDIucztcXG5cXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhbnRpYWxpYXNpbmcgZmFkZSBmYWN0b3IuIFRoaXMgaXMgZWl0aGVyIHdoZW4gZmFkaW5nIGluXFxuICAgIC8vIHRoZSBsaW5lIGluIGNhc2Ugb2YgYW4gb2Zmc2V0IGxpbmUgKHZfd2lkdGgyLnQpIG9yIHdoZW4gZmFkaW5nIG91dFxcbiAgICAvLyAodl93aWR0aDIucylcXG4gICAgZmxvYXQgYmx1cjIgPSAoYmx1ciArIDEuMCAvIERFVklDRV9QSVhFTF9SQVRJTykgKiB2X2dhbW1hX3NjYWxlO1xcbiAgICBmbG9hdCBhbHBoYSA9IGNsYW1wKG1pbihkaXN0IC0gKHZfd2lkdGgyLnQgLSBibHVyMiksIHZfd2lkdGgyLnMgLSBkaXN0KSAvIGJsdXIyLCAwLjAsIDEuMCk7XFxuXFxuICAgIC8vIEZvciBncmFkaWVudCBsaW5lcywgdl9saW5lcHJvZ3Jlc3MgaXMgdGhlIHJhdGlvIGFsb25nIHRoZSBlbnRpcmUgbGluZSxcXG4gICAgLy8gc2NhbGVkIHRvIFswLCAyXjE1KSwgYW5kIHRoZSBncmFkaWVudCByYW1wIGlzIHN0b3JlZCBpbiBhIHRleHR1cmUuXFxuICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodV9pbWFnZSwgdmVjMih2X2xpbmVwcm9ncmVzcywgMC41KSk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yICogKGFscGhhICogb3BhY2l0eSk7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcIlxcbi8vIHRoZSBhdHRyaWJ1dGUgY29udmV5aW5nIHByb2dyZXNzIGFsb25nIGEgbGluZSBpcyBzY2FsZWQgdG8gWzAsIDJeMTUpXFxuI2RlZmluZSBNQVhfTElORV9ESVNUQU5DRSAzMjc2Ny4wXFxuXFxuLy8gdGhlIGRpc3RhbmNlIG92ZXIgd2hpY2ggdGhlIGxpbmUgZWRnZSBmYWRlcyBvdXQuXFxuLy8gUmV0aW5hIGRldmljZXMgbmVlZCBhIHNtYWxsZXIgZGlzdGFuY2UgdG8gYXZvaWQgYWxpYXNpbmcuXFxuI2RlZmluZSBBTlRJQUxJQVNJTkcgMS4wIC8gREVWSUNFX1BJWEVMX1JBVElPIC8gMi4wXFxuXFxuLy8gZmxvb3IoMTI3IC8gMikgPT0gNjMuMFxcbi8vIHRoZSBtYXhpbXVtIGFsbG93ZWQgbWl0ZXIgbGltaXQgaXMgMi4wIGF0IHRoZSBtb21lbnQuIHRoZSBleHRydWRlIG5vcm1hbCBpc1xcbi8vIHN0b3JlZCBpbiBhIGJ5dGUgKC0xMjguLjEyNykuIHdlIHNjYWxlIHJlZ3VsYXIgbm9ybWFscyB1cCB0byBsZW5ndGggNjMsIGJ1dFxcbi8vIHRoZXJlIGFyZSBhbHNvIFxcXCJzcGVjaWFsXFxcIiBub3JtYWxzIHRoYXQgaGF2ZSBhIGJpZ2dlciBsZW5ndGggKG9mIHVwIHRvIDEyNiBpblxcbi8vIHRoaXMgY2FzZSkuXFxuLy8gI2RlZmluZSBzY2FsZSA2My4wXFxuI2RlZmluZSBzY2FsZSAwLjAxNTg3MzAxNlxcblxcbmF0dHJpYnV0ZSB2ZWM0IGFfcG9zX25vcm1hbDtcXG5hdHRyaWJ1dGUgdmVjNCBhX2RhdGE7XFxuXFxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcbnVuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X3JhdGlvO1xcbnVuaWZvcm0gdmVjMiB1X2dsX3VuaXRzX3RvX3BpeGVscztcXG5cXG52YXJ5aW5nIHZlYzIgdl9ub3JtYWw7XFxudmFyeWluZyB2ZWMyIHZfd2lkdGgyO1xcbnZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcXG52YXJ5aW5nIGhpZ2hwIGZsb2F0IHZfbGluZXByb2dyZXNzO1xcblxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb2Zmc2V0XFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHdpZHRoXFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvZmZzZXRcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCB3aWR0aFxcblxcbiAgICB2ZWMyIGFfZXh0cnVkZSA9IGFfZGF0YS54eSAtIDEyOC4wO1xcbiAgICBmbG9hdCBhX2RpcmVjdGlvbiA9IG1vZChhX2RhdGEueiwgNC4wKSAtIDEuMDtcXG5cXG4gICAgdl9saW5lcHJvZ3Jlc3MgPSAoZmxvb3IoYV9kYXRhLnogLyA0LjApICsgYV9kYXRhLncgKiA2NC4wKSAqIDIuMCAvIE1BWF9MSU5FX0RJU1RBTkNFO1xcblxcbiAgICB2ZWMyIHBvcyA9IGFfcG9zX25vcm1hbC54eTtcXG5cXG4gICAgLy8geCBpcyAxIGlmIGl0J3MgYSByb3VuZCBjYXAsIDAgb3RoZXJ3aXNlXFxuICAgIC8vIHkgaXMgMSBpZiB0aGUgbm9ybWFsIHBvaW50cyB1cCwgYW5kIC0xIGlmIGl0IHBvaW50cyBkb3duXFxuICAgIG1lZGl1bXAgdmVjMiBub3JtYWwgPSBhX3Bvc19ub3JtYWwuenc7XFxuICAgIHZfbm9ybWFsID0gbm9ybWFsO1xcblxcbiAgICAvLyB0aGVzZSB0cmFuc2Zvcm1hdGlvbnMgdXNlZCB0byBiZSBhcHBsaWVkIGluIHRoZSBKUyBhbmQgbmF0aXZlIGNvZGUgYmFzZXMuXFxuICAgIC8vIG1vdmVkIHRoZW0gaW50byB0aGUgc2hhZGVyIGZvciBjbGFyaXR5IGFuZCBzaW1wbGljaXR5LlxcbiAgICBnYXB3aWR0aCA9IGdhcHdpZHRoIC8gMi4wO1xcbiAgICBmbG9hdCBoYWxmd2lkdGggPSB3aWR0aCAvIDIuMDtcXG4gICAgb2Zmc2V0ID0gLTEuMCAqIG9mZnNldDtcXG5cXG4gICAgZmxvYXQgaW5zZXQgPSBnYXB3aWR0aCArIChnYXB3aWR0aCA+IDAuMCA/IEFOVElBTElBU0lORyA6IDAuMCk7XFxuICAgIGZsb2F0IG91dHNldCA9IGdhcHdpZHRoICsgaGFsZndpZHRoICogKGdhcHdpZHRoID4gMC4wID8gMi4wIDogMS4wKSArIEFOVElBTElBU0lORztcXG5cXG4gICAgLy8gU2NhbGUgdGhlIGV4dHJ1c2lvbiB2ZWN0b3IgZG93biB0byBhIG5vcm1hbCBhbmQgdGhlbiB1cCBieSB0aGUgbGluZSB3aWR0aFxcbiAgICAvLyBvZiB0aGlzIHZlcnRleC5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpc3QgPSBvdXRzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZTtcXG5cXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBvZmZzZXQgd2hlbiBkcmF3aW5nIGEgbGluZSB0aGF0IGlzIHRvIHRoZSBzaWRlIG9mIHRoZSBhY3R1YWwgbGluZS5cXG4gICAgLy8gV2UgZG8gdGhpcyBieSBjcmVhdGluZyBhIHZlY3RvciB0aGF0IHBvaW50cyB0b3dhcmRzIHRoZSBleHRydWRlLCBidXQgcm90YXRlXFxuICAgIC8vIGl0IHdoZW4gd2UncmUgZHJhd2luZyByb3VuZCBlbmQgcG9pbnRzIChhX2RpcmVjdGlvbiA9IC0xIG9yIDEpIHNpbmNlIHRoZWlyXFxuICAgIC8vIGV4dHJ1ZGUgdmVjdG9yIHBvaW50cyBpbiBhbm90aGVyIGRpcmVjdGlvbi5cXG4gICAgbWVkaXVtcCBmbG9hdCB1ID0gMC41ICogYV9kaXJlY3Rpb247XFxuICAgIG1lZGl1bXAgZmxvYXQgdCA9IDEuMCAtIGFicyh1KTtcXG4gICAgbWVkaXVtcCB2ZWMyIG9mZnNldDIgPSBvZmZzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZSAqIG5vcm1hbC55ICogbWF0Mih0LCAtdSwgdSwgdCk7XFxuXFxuICAgIHZlYzQgcHJvamVjdGVkX2V4dHJ1ZGUgPSB1X21hdHJpeCAqIHZlYzQoZGlzdCAvIHVfcmF0aW8sIDAuMCwgMC4wKTtcXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQocG9zICsgb2Zmc2V0MiAvIHVfcmF0aW8sIDAuMCwgMS4wKSArIHByb2plY3RlZF9leHRydWRlO1xcblxcbiAgICAvLyBjYWxjdWxhdGUgaG93IG11Y2ggdGhlIHBlcnNwZWN0aXZlIHZpZXcgc3F1aXNoZXMgb3Igc3RyZXRjaGVzIHRoZSBleHRydWRlXFxuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmUgPSBsZW5ndGgoZGlzdCk7XFxuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmUgPSBsZW5ndGgocHJvamVjdGVkX2V4dHJ1ZGUueHkgLyBnbF9Qb3NpdGlvbi53ICogdV9nbF91bml0c190b19waXhlbHMpO1xcbiAgICB2X2dhbW1hX3NjYWxlID0gZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZSAvIGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU7XFxuXFxuICAgIHZfd2lkdGgyID0gdmVjMihvdXRzZXQsIGluc2V0KTtcXG59XFxuXCJ9LGxpbmVQYXR0ZXJuOntmcmFnbWVudFNvdXJjZTpcInVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9hO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9iO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYTtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2E7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl90bF9iO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYjtcXG51bmlmb3JtIHZlYzIgdV90ZXhzaXplO1xcbnVuaWZvcm0gZmxvYXQgdV9mYWRlO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XFxuXFxudmFyeWluZyB2ZWMyIHZfbm9ybWFsO1xcbnZhcnlpbmcgdmVjMiB2X3dpZHRoMjtcXG52YXJ5aW5nIGZsb2F0IHZfbGluZXNvZmFyO1xcbnZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxuICAgIC8vIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2Ugb2YgdGhlIHBpeGVsIGZyb20gdGhlIGxpbmUgaW4gcGl4ZWxzLlxcbiAgICBmbG9hdCBkaXN0ID0gbGVuZ3RoKHZfbm9ybWFsKSAqIHZfd2lkdGgyLnM7XFxuXFxuICAgIC8vIENhbGN1bGF0ZSB0aGUgYW50aWFsaWFzaW5nIGZhZGUgZmFjdG9yLiBUaGlzIGlzIGVpdGhlciB3aGVuIGZhZGluZyBpblxcbiAgICAvLyB0aGUgbGluZSBpbiBjYXNlIG9mIGFuIG9mZnNldCBsaW5lICh2X3dpZHRoMi50KSBvciB3aGVuIGZhZGluZyBvdXRcXG4gICAgLy8gKHZfd2lkdGgyLnMpXFxuICAgIGZsb2F0IGJsdXIyID0gKGJsdXIgKyAxLjAgLyBERVZJQ0VfUElYRUxfUkFUSU8pICogdl9nYW1tYV9zY2FsZTtcXG4gICAgZmxvYXQgYWxwaGEgPSBjbGFtcChtaW4oZGlzdCAtICh2X3dpZHRoMi50IC0gYmx1cjIpLCB2X3dpZHRoMi5zIC0gZGlzdCkgLyBibHVyMiwgMC4wLCAxLjApO1xcblxcbiAgICBmbG9hdCB4X2EgPSBtb2Qodl9saW5lc29mYXIgLyB1X3BhdHRlcm5fc2l6ZV9hLngsIDEuMCk7XFxuICAgIGZsb2F0IHhfYiA9IG1vZCh2X2xpbmVzb2ZhciAvIHVfcGF0dGVybl9zaXplX2IueCwgMS4wKTtcXG5cXG4gICAgLy8gdl9ub3JtYWwueSBpcyAwIGF0IHRoZSBtaWRwb2ludCBvZiB0aGUgbGluZSwgLTEgYXQgdGhlIGxvd2VyIGVkZ2UsIDEgYXQgdGhlIHVwcGVyIGVkZ2VcXG4gICAgLy8gd2UgY2xhbXAgdGhlIGxpbmUgd2lkdGggb3V0c2V0IHRvIGJlIGJldHdlZW4gMCBhbmQgaGFsZiB0aGUgcGF0dGVybiBoZWlnaHQgcGx1cyBwYWRkaW5nICgyLjApXFxuICAgIC8vIHRvIGVuc3VyZSB3ZSBkb24ndCBzYW1wbGUgb3V0c2lkZSB0aGUgZGVzaWduYXRlZCBzeW1ib2wgb24gdGhlIHNwcml0ZSBzaGVldC5cXG4gICAgLy8gMC41IGlzIGFkZGVkIHRvIHNoaWZ0IHRoZSBjb21wb25lbnQgdG8gYmUgYm91bmRlZCBiZXR3ZWVuIDAgYW5kIDEgZm9yIGludGVycG9sYXRpb24gb2ZcXG4gICAgLy8gdGhlIHRleHR1cmUgY29vcmRpbmF0ZVxcbiAgICBmbG9hdCB5X2EgPSAwLjUgKyAodl9ub3JtYWwueSAqIGNsYW1wKHZfd2lkdGgyLnMsIDAuMCwgKHVfcGF0dGVybl9zaXplX2EueSArIDIuMCkgLyAyLjApIC8gdV9wYXR0ZXJuX3NpemVfYS55KTtcXG4gICAgZmxvYXQgeV9iID0gMC41ICsgKHZfbm9ybWFsLnkgKiBjbGFtcCh2X3dpZHRoMi5zLCAwLjAsICh1X3BhdHRlcm5fc2l6ZV9iLnkgKyAyLjApIC8gMi4wKSAvIHVfcGF0dGVybl9zaXplX2IueSk7XFxuICAgIHZlYzIgcG9zX2EgPSBtaXgodV9wYXR0ZXJuX3RsX2EgLyB1X3RleHNpemUsIHVfcGF0dGVybl9icl9hIC8gdV90ZXhzaXplLCB2ZWMyKHhfYSwgeV9hKSk7XFxuICAgIHZlYzIgcG9zX2IgPSBtaXgodV9wYXR0ZXJuX3RsX2IgLyB1X3RleHNpemUsIHVfcGF0dGVybl9icl9iIC8gdV90ZXhzaXplLCB2ZWMyKHhfYiwgeV9iKSk7XFxuXFxuICAgIHZlYzQgY29sb3IgPSBtaXgodGV4dHVyZTJEKHVfaW1hZ2UsIHBvc19hKSwgdGV4dHVyZTJEKHVfaW1hZ2UsIHBvc19iKSwgdV9mYWRlKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgKiBhbHBoYSAqIG9wYWNpdHk7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcIi8vIGZsb29yKDEyNyAvIDIpID09IDYzLjBcXG4vLyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pdGVyIGxpbWl0IGlzIDIuMCBhdCB0aGUgbW9tZW50LiB0aGUgZXh0cnVkZSBub3JtYWwgaXNcXG4vLyBzdG9yZWQgaW4gYSBieXRlICgtMTI4Li4xMjcpLiB3ZSBzY2FsZSByZWd1bGFyIG5vcm1hbHMgdXAgdG8gbGVuZ3RoIDYzLCBidXRcXG4vLyB0aGVyZSBhcmUgYWxzbyBcXFwic3BlY2lhbFxcXCIgbm9ybWFscyB0aGF0IGhhdmUgYSBiaWdnZXIgbGVuZ3RoIChvZiB1cCB0byAxMjYgaW5cXG4vLyB0aGlzIGNhc2UpLlxcbi8vICNkZWZpbmUgc2NhbGUgNjMuMFxcbiNkZWZpbmUgc2NhbGUgMC4wMTU4NzMwMTZcXG5cXG4vLyBXZSBzY2FsZSB0aGUgZGlzdGFuY2UgYmVmb3JlIGFkZGluZyBpdCB0byB0aGUgYnVmZmVycyBzbyB0aGF0IHdlIGNhbiBzdG9yZVxcbi8vIGxvbmcgZGlzdGFuY2VzIGZvciBsb25nIHNlZ21lbnRzLiBVc2UgdGhpcyB2YWx1ZSB0byB1bnNjYWxlIHRoZSBkaXN0YW5jZS5cXG4jZGVmaW5lIExJTkVfRElTVEFOQ0VfU0NBTEUgMi4wXFxuXFxuLy8gdGhlIGRpc3RhbmNlIG92ZXIgd2hpY2ggdGhlIGxpbmUgZWRnZSBmYWRlcyBvdXQuXFxuLy8gUmV0aW5hIGRldmljZXMgbmVlZCBhIHNtYWxsZXIgZGlzdGFuY2UgdG8gYXZvaWQgYWxpYXNpbmcuXFxuI2RlZmluZSBBTlRJQUxJQVNJTkcgMS4wIC8gREVWSUNFX1BJWEVMX1JBVElPIC8gMi4wXFxuXFxuYXR0cmlidXRlIHZlYzQgYV9wb3Nfbm9ybWFsO1xcbmF0dHJpYnV0ZSB2ZWM0IGFfZGF0YTtcXG5cXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfcmF0aW87XFxudW5pZm9ybSB2ZWMyIHVfZ2xfdW5pdHNfdG9fcGl4ZWxzO1xcblxcbnZhcnlpbmcgdmVjMiB2X25vcm1hbDtcXG52YXJ5aW5nIHZlYzIgdl93aWR0aDI7XFxudmFyeWluZyBmbG9hdCB2X2xpbmVzb2ZhcjtcXG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XFxuXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvZmZzZXRcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgd2lkdGhcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvZmZzZXRcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHdpZHRoXFxuXFxuICAgIHZlYzIgYV9leHRydWRlID0gYV9kYXRhLnh5IC0gMTI4LjA7XFxuICAgIGZsb2F0IGFfZGlyZWN0aW9uID0gbW9kKGFfZGF0YS56LCA0LjApIC0gMS4wO1xcbiAgICBmbG9hdCBhX2xpbmVzb2ZhciA9IChmbG9vcihhX2RhdGEueiAvIDQuMCkgKyBhX2RhdGEudyAqIDY0LjApICogTElORV9ESVNUQU5DRV9TQ0FMRTtcXG5cXG4gICAgdmVjMiBwb3MgPSBhX3Bvc19ub3JtYWwueHk7XFxuXFxuICAgIC8vIHggaXMgMSBpZiBpdCdzIGEgcm91bmQgY2FwLCAwIG90aGVyd2lzZVxcbiAgICAvLyB5IGlzIDEgaWYgdGhlIG5vcm1hbCBwb2ludHMgdXAsIGFuZCAtMSBpZiBpdCBwb2ludHMgZG93blxcbiAgICBtZWRpdW1wIHZlYzIgbm9ybWFsID0gYV9wb3Nfbm9ybWFsLnp3O1xcbiAgICB2X25vcm1hbCA9IG5vcm1hbDtcXG5cXG4gICAgLy8gdGhlc2UgdHJhbnNmb3JtYXRpb25zIHVzZWQgdG8gYmUgYXBwbGllZCBpbiB0aGUgSlMgYW5kIG5hdGl2ZSBjb2RlIGJhc2VzLlxcbiAgICAvLyBtb3ZlZCB0aGVtIGludG8gdGhlIHNoYWRlciBmb3IgY2xhcml0eSBhbmQgc2ltcGxpY2l0eS5cXG4gICAgZ2Fwd2lkdGggPSBnYXB3aWR0aCAvIDIuMDtcXG4gICAgZmxvYXQgaGFsZndpZHRoID0gd2lkdGggLyAyLjA7XFxuICAgIG9mZnNldCA9IC0xLjAgKiBvZmZzZXQ7XFxuXFxuICAgIGZsb2F0IGluc2V0ID0gZ2Fwd2lkdGggKyAoZ2Fwd2lkdGggPiAwLjAgPyBBTlRJQUxJQVNJTkcgOiAwLjApO1xcbiAgICBmbG9hdCBvdXRzZXQgPSBnYXB3aWR0aCArIGhhbGZ3aWR0aCAqIChnYXB3aWR0aCA+IDAuMCA/IDIuMCA6IDEuMCkgKyBBTlRJQUxJQVNJTkc7XFxuXFxuICAgIC8vIFNjYWxlIHRoZSBleHRydXNpb24gdmVjdG9yIGRvd24gdG8gYSBub3JtYWwgYW5kIHRoZW4gdXAgYnkgdGhlIGxpbmUgd2lkdGhcXG4gICAgLy8gb2YgdGhpcyB2ZXJ0ZXguXFxuICAgIG1lZGl1bXAgdmVjMiBkaXN0ID0gb3V0c2V0ICogYV9leHRydWRlICogc2NhbGU7XFxuXFxuICAgIC8vIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IHdoZW4gZHJhd2luZyBhIGxpbmUgdGhhdCBpcyB0byB0aGUgc2lkZSBvZiB0aGUgYWN0dWFsIGxpbmUuXFxuICAgIC8vIFdlIGRvIHRoaXMgYnkgY3JlYXRpbmcgYSB2ZWN0b3IgdGhhdCBwb2ludHMgdG93YXJkcyB0aGUgZXh0cnVkZSwgYnV0IHJvdGF0ZVxcbiAgICAvLyBpdCB3aGVuIHdlJ3JlIGRyYXdpbmcgcm91bmQgZW5kIHBvaW50cyAoYV9kaXJlY3Rpb24gPSAtMSBvciAxKSBzaW5jZSB0aGVpclxcbiAgICAvLyBleHRydWRlIHZlY3RvciBwb2ludHMgaW4gYW5vdGhlciBkaXJlY3Rpb24uXFxuICAgIG1lZGl1bXAgZmxvYXQgdSA9IDAuNSAqIGFfZGlyZWN0aW9uO1xcbiAgICBtZWRpdW1wIGZsb2F0IHQgPSAxLjAgLSBhYnModSk7XFxuICAgIG1lZGl1bXAgdmVjMiBvZmZzZXQyID0gb2Zmc2V0ICogYV9leHRydWRlICogc2NhbGUgKiBub3JtYWwueSAqIG1hdDIodCwgLXUsIHUsIHQpO1xcblxcbiAgICB2ZWM0IHByb2plY3RlZF9leHRydWRlID0gdV9tYXRyaXggKiB2ZWM0KGRpc3QgLyB1X3JhdGlvLCAwLjAsIDAuMCk7XFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KHBvcyArIG9mZnNldDIgLyB1X3JhdGlvLCAwLjAsIDEuMCkgKyBwcm9qZWN0ZWRfZXh0cnVkZTtcXG5cXG4gICAgLy8gY2FsY3VsYXRlIGhvdyBtdWNoIHRoZSBwZXJzcGVjdGl2ZSB2aWV3IHNxdWlzaGVzIG9yIHN0cmV0Y2hlcyB0aGUgZXh0cnVkZVxcbiAgICBmbG9hdCBleHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlID0gbGVuZ3RoKGRpc3QpO1xcbiAgICBmbG9hdCBleHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlID0gbGVuZ3RoKHByb2plY3RlZF9leHRydWRlLnh5IC8gZ2xfUG9zaXRpb24udyAqIHVfZ2xfdW5pdHNfdG9fcGl4ZWxzKTtcXG4gICAgdl9nYW1tYV9zY2FsZSA9IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmUgLyBleHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlO1xcblxcbiAgICB2X2xpbmVzb2ZhciA9IGFfbGluZXNvZmFyO1xcbiAgICB2X3dpZHRoMiA9IHZlYzIob3V0c2V0LCBpbnNldCk7XFxufVxcblwifSxsaW5lU0RGOntmcmFnbWVudFNvdXJjZTpcIlxcbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XFxudW5pZm9ybSBmbG9hdCB1X3NkZmdhbW1hO1xcbnVuaWZvcm0gZmxvYXQgdV9taXg7XFxuXFxudmFyeWluZyB2ZWMyIHZfbm9ybWFsO1xcbnZhcnlpbmcgdmVjMiB2X3dpZHRoMjtcXG52YXJ5aW5nIHZlYzIgdl90ZXhfYTtcXG52YXJ5aW5nIHZlYzIgdl90ZXhfYjtcXG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XFxuXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCB3aWR0aFxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBmbG9vcndpZHRoXFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCB3aWR0aFxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGZsb29yd2lkdGhcXG5cXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBvZiB0aGUgcGl4ZWwgZnJvbSB0aGUgbGluZSBpbiBwaXhlbHMuXFxuICAgIGZsb2F0IGRpc3QgPSBsZW5ndGgodl9ub3JtYWwpICogdl93aWR0aDIucztcXG5cXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhbnRpYWxpYXNpbmcgZmFkZSBmYWN0b3IuIFRoaXMgaXMgZWl0aGVyIHdoZW4gZmFkaW5nIGluXFxuICAgIC8vIHRoZSBsaW5lIGluIGNhc2Ugb2YgYW4gb2Zmc2V0IGxpbmUgKHZfd2lkdGgyLnQpIG9yIHdoZW4gZmFkaW5nIG91dFxcbiAgICAvLyAodl93aWR0aDIucylcXG4gICAgZmxvYXQgYmx1cjIgPSAoYmx1ciArIDEuMCAvIERFVklDRV9QSVhFTF9SQVRJTykgKiB2X2dhbW1hX3NjYWxlO1xcbiAgICBmbG9hdCBhbHBoYSA9IGNsYW1wKG1pbihkaXN0IC0gKHZfd2lkdGgyLnQgLSBibHVyMiksIHZfd2lkdGgyLnMgLSBkaXN0KSAvIGJsdXIyLCAwLjAsIDEuMCk7XFxuXFxuICAgIGZsb2F0IHNkZmRpc3RfYSA9IHRleHR1cmUyRCh1X2ltYWdlLCB2X3RleF9hKS5hO1xcbiAgICBmbG9hdCBzZGZkaXN0X2IgPSB0ZXh0dXJlMkQodV9pbWFnZSwgdl90ZXhfYikuYTtcXG4gICAgZmxvYXQgc2RmZGlzdCA9IG1peChzZGZkaXN0X2EsIHNkZmRpc3RfYiwgdV9taXgpO1xcbiAgICBhbHBoYSAqPSBzbW9vdGhzdGVwKDAuNSAtIHVfc2RmZ2FtbWEgLyBmbG9vcndpZHRoLCAwLjUgKyB1X3NkZmdhbW1hIC8gZmxvb3J3aWR0aCwgc2RmZGlzdCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yICogKGFscGhhICogb3BhY2l0eSk7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcIi8vIGZsb29yKDEyNyAvIDIpID09IDYzLjBcXG4vLyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pdGVyIGxpbWl0IGlzIDIuMCBhdCB0aGUgbW9tZW50LiB0aGUgZXh0cnVkZSBub3JtYWwgaXNcXG4vLyBzdG9yZWQgaW4gYSBieXRlICgtMTI4Li4xMjcpLiB3ZSBzY2FsZSByZWd1bGFyIG5vcm1hbHMgdXAgdG8gbGVuZ3RoIDYzLCBidXRcXG4vLyB0aGVyZSBhcmUgYWxzbyBcXFwic3BlY2lhbFxcXCIgbm9ybWFscyB0aGF0IGhhdmUgYSBiaWdnZXIgbGVuZ3RoIChvZiB1cCB0byAxMjYgaW5cXG4vLyB0aGlzIGNhc2UpLlxcbi8vICNkZWZpbmUgc2NhbGUgNjMuMFxcbiNkZWZpbmUgc2NhbGUgMC4wMTU4NzMwMTZcXG5cXG4vLyBXZSBzY2FsZSB0aGUgZGlzdGFuY2UgYmVmb3JlIGFkZGluZyBpdCB0byB0aGUgYnVmZmVycyBzbyB0aGF0IHdlIGNhbiBzdG9yZVxcbi8vIGxvbmcgZGlzdGFuY2VzIGZvciBsb25nIHNlZ21lbnRzLiBVc2UgdGhpcyB2YWx1ZSB0byB1bnNjYWxlIHRoZSBkaXN0YW5jZS5cXG4jZGVmaW5lIExJTkVfRElTVEFOQ0VfU0NBTEUgMi4wXFxuXFxuLy8gdGhlIGRpc3RhbmNlIG92ZXIgd2hpY2ggdGhlIGxpbmUgZWRnZSBmYWRlcyBvdXQuXFxuLy8gUmV0aW5hIGRldmljZXMgbmVlZCBhIHNtYWxsZXIgZGlzdGFuY2UgdG8gYXZvaWQgYWxpYXNpbmcuXFxuI2RlZmluZSBBTlRJQUxJQVNJTkcgMS4wIC8gREVWSUNFX1BJWEVMX1JBVElPIC8gMi4wXFxuXFxuYXR0cmlidXRlIHZlYzQgYV9wb3Nfbm9ybWFsO1xcbmF0dHJpYnV0ZSB2ZWM0IGFfZGF0YTtcXG5cXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfcmF0aW87XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybnNjYWxlX2E7XFxudW5pZm9ybSBmbG9hdCB1X3RleF95X2E7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybnNjYWxlX2I7XFxudW5pZm9ybSBmbG9hdCB1X3RleF95X2I7XFxudW5pZm9ybSB2ZWMyIHVfZ2xfdW5pdHNfdG9fcGl4ZWxzO1xcblxcbnZhcnlpbmcgdmVjMiB2X25vcm1hbDtcXG52YXJ5aW5nIHZlYzIgdl93aWR0aDI7XFxudmFyeWluZyB2ZWMyIHZfdGV4X2E7XFxudmFyeWluZyB2ZWMyIHZfdGV4X2I7XFxudmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xcblxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb2Zmc2V0XFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHdpZHRoXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGZsb29yd2lkdGhcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb2Zmc2V0XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgd2lkdGhcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBmbG9vcndpZHRoXFxuXFxuICAgIHZlYzIgYV9leHRydWRlID0gYV9kYXRhLnh5IC0gMTI4LjA7XFxuICAgIGZsb2F0IGFfZGlyZWN0aW9uID0gbW9kKGFfZGF0YS56LCA0LjApIC0gMS4wO1xcbiAgICBmbG9hdCBhX2xpbmVzb2ZhciA9IChmbG9vcihhX2RhdGEueiAvIDQuMCkgKyBhX2RhdGEudyAqIDY0LjApICogTElORV9ESVNUQU5DRV9TQ0FMRTtcXG5cXG4gICAgdmVjMiBwb3MgPSBhX3Bvc19ub3JtYWwueHk7XFxuXFxuICAgIC8vIHggaXMgMSBpZiBpdCdzIGEgcm91bmQgY2FwLCAwIG90aGVyd2lzZVxcbiAgICAvLyB5IGlzIDEgaWYgdGhlIG5vcm1hbCBwb2ludHMgdXAsIGFuZCAtMSBpZiBpdCBwb2ludHMgZG93blxcbiAgICBtZWRpdW1wIHZlYzIgbm9ybWFsID0gYV9wb3Nfbm9ybWFsLnp3O1xcbiAgICB2X25vcm1hbCA9IG5vcm1hbDtcXG5cXG4gICAgLy8gdGhlc2UgdHJhbnNmb3JtYXRpb25zIHVzZWQgdG8gYmUgYXBwbGllZCBpbiB0aGUgSlMgYW5kIG5hdGl2ZSBjb2RlIGJhc2VzLlxcbiAgICAvLyBtb3ZlZCB0aGVtIGludG8gdGhlIHNoYWRlciBmb3IgY2xhcml0eSBhbmQgc2ltcGxpY2l0eS5cXG4gICAgZ2Fwd2lkdGggPSBnYXB3aWR0aCAvIDIuMDtcXG4gICAgZmxvYXQgaGFsZndpZHRoID0gd2lkdGggLyAyLjA7XFxuICAgIG9mZnNldCA9IC0xLjAgKiBvZmZzZXQ7XFxuXFxuICAgIGZsb2F0IGluc2V0ID0gZ2Fwd2lkdGggKyAoZ2Fwd2lkdGggPiAwLjAgPyBBTlRJQUxJQVNJTkcgOiAwLjApO1xcbiAgICBmbG9hdCBvdXRzZXQgPSBnYXB3aWR0aCArIGhhbGZ3aWR0aCAqIChnYXB3aWR0aCA+IDAuMCA/IDIuMCA6IDEuMCkgKyBBTlRJQUxJQVNJTkc7XFxuXFxuICAgIC8vIFNjYWxlIHRoZSBleHRydXNpb24gdmVjdG9yIGRvd24gdG8gYSBub3JtYWwgYW5kIHRoZW4gdXAgYnkgdGhlIGxpbmUgd2lkdGhcXG4gICAgLy8gb2YgdGhpcyB2ZXJ0ZXguXFxuICAgIG1lZGl1bXAgdmVjMiBkaXN0ID1vdXRzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZTtcXG5cXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBvZmZzZXQgd2hlbiBkcmF3aW5nIGEgbGluZSB0aGF0IGlzIHRvIHRoZSBzaWRlIG9mIHRoZSBhY3R1YWwgbGluZS5cXG4gICAgLy8gV2UgZG8gdGhpcyBieSBjcmVhdGluZyBhIHZlY3RvciB0aGF0IHBvaW50cyB0b3dhcmRzIHRoZSBleHRydWRlLCBidXQgcm90YXRlXFxuICAgIC8vIGl0IHdoZW4gd2UncmUgZHJhd2luZyByb3VuZCBlbmQgcG9pbnRzIChhX2RpcmVjdGlvbiA9IC0xIG9yIDEpIHNpbmNlIHRoZWlyXFxuICAgIC8vIGV4dHJ1ZGUgdmVjdG9yIHBvaW50cyBpbiBhbm90aGVyIGRpcmVjdGlvbi5cXG4gICAgbWVkaXVtcCBmbG9hdCB1ID0gMC41ICogYV9kaXJlY3Rpb247XFxuICAgIG1lZGl1bXAgZmxvYXQgdCA9IDEuMCAtIGFicyh1KTtcXG4gICAgbWVkaXVtcCB2ZWMyIG9mZnNldDIgPSBvZmZzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZSAqIG5vcm1hbC55ICogbWF0Mih0LCAtdSwgdSwgdCk7XFxuXFxuICAgIHZlYzQgcHJvamVjdGVkX2V4dHJ1ZGUgPSB1X21hdHJpeCAqIHZlYzQoZGlzdCAvIHVfcmF0aW8sIDAuMCwgMC4wKTtcXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQocG9zICsgb2Zmc2V0MiAvIHVfcmF0aW8sIDAuMCwgMS4wKSArIHByb2plY3RlZF9leHRydWRlO1xcblxcbiAgICAvLyBjYWxjdWxhdGUgaG93IG11Y2ggdGhlIHBlcnNwZWN0aXZlIHZpZXcgc3F1aXNoZXMgb3Igc3RyZXRjaGVzIHRoZSBleHRydWRlXFxuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmUgPSBsZW5ndGgoZGlzdCk7XFxuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmUgPSBsZW5ndGgocHJvamVjdGVkX2V4dHJ1ZGUueHkgLyBnbF9Qb3NpdGlvbi53ICogdV9nbF91bml0c190b19waXhlbHMpO1xcbiAgICB2X2dhbW1hX3NjYWxlID0gZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZSAvIGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU7XFxuXFxuICAgIHZfdGV4X2EgPSB2ZWMyKGFfbGluZXNvZmFyICogdV9wYXR0ZXJuc2NhbGVfYS54IC8gZmxvb3J3aWR0aCwgbm9ybWFsLnkgKiB1X3BhdHRlcm5zY2FsZV9hLnkgKyB1X3RleF95X2EpO1xcbiAgICB2X3RleF9iID0gdmVjMihhX2xpbmVzb2ZhciAqIHVfcGF0dGVybnNjYWxlX2IueCAvIGZsb29yd2lkdGgsIG5vcm1hbC55ICogdV9wYXR0ZXJuc2NhbGVfYi55ICsgdV90ZXhfeV9iKTtcXG5cXG4gICAgdl93aWR0aDIgPSB2ZWMyKG91dHNldCwgaW5zZXQpO1xcbn1cXG5cIn0scmFzdGVyOntmcmFnbWVudFNvdXJjZTpcInVuaWZvcm0gZmxvYXQgdV9mYWRlX3Q7XFxudW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7XFxudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTA7XFxudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTE7XFxudmFyeWluZyB2ZWMyIHZfcG9zMDtcXG52YXJ5aW5nIHZlYzIgdl9wb3MxO1xcblxcbnVuaWZvcm0gZmxvYXQgdV9icmlnaHRuZXNzX2xvdztcXG51bmlmb3JtIGZsb2F0IHVfYnJpZ2h0bmVzc19oaWdoO1xcblxcbnVuaWZvcm0gZmxvYXQgdV9zYXR1cmF0aW9uX2ZhY3RvcjtcXG51bmlmb3JtIGZsb2F0IHVfY29udHJhc3RfZmFjdG9yO1xcbnVuaWZvcm0gdmVjMyB1X3NwaW5fd2VpZ2h0cztcXG5cXG52b2lkIG1haW4oKSB7XFxuXFxuICAgIC8vIHJlYWQgYW5kIGNyb3NzLWZhZGUgY29sb3JzIGZyb20gdGhlIG1haW4gYW5kIHBhcmVudCB0aWxlc1xcbiAgICB2ZWM0IGNvbG9yMCA9IHRleHR1cmUyRCh1X2ltYWdlMCwgdl9wb3MwKTtcXG4gICAgdmVjNCBjb2xvcjEgPSB0ZXh0dXJlMkQodV9pbWFnZTEsIHZfcG9zMSk7XFxuICAgIGlmIChjb2xvcjAuYSA+IDAuMCkge1xcbiAgICAgICAgY29sb3IwLnJnYiA9IGNvbG9yMC5yZ2IgLyBjb2xvcjAuYTtcXG4gICAgfVxcbiAgICBpZiAoY29sb3IxLmEgPiAwLjApIHtcXG4gICAgICAgIGNvbG9yMS5yZ2IgPSBjb2xvcjEucmdiIC8gY29sb3IxLmE7XFxuICAgIH1cXG4gICAgdmVjNCBjb2xvciA9IG1peChjb2xvcjAsIGNvbG9yMSwgdV9mYWRlX3QpO1xcbiAgICBjb2xvci5hICo9IHVfb3BhY2l0eTtcXG4gICAgdmVjMyByZ2IgPSBjb2xvci5yZ2I7XFxuXFxuICAgIC8vIHNwaW5cXG4gICAgcmdiID0gdmVjMyhcXG4gICAgICAgIGRvdChyZ2IsIHVfc3Bpbl93ZWlnaHRzLnh5eiksXFxuICAgICAgICBkb3QocmdiLCB1X3NwaW5fd2VpZ2h0cy56eHkpLFxcbiAgICAgICAgZG90KHJnYiwgdV9zcGluX3dlaWdodHMueXp4KSk7XFxuXFxuICAgIC8vIHNhdHVyYXRpb25cXG4gICAgZmxvYXQgYXZlcmFnZSA9IChjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmIpIC8gMy4wO1xcbiAgICByZ2IgKz0gKGF2ZXJhZ2UgLSByZ2IpICogdV9zYXR1cmF0aW9uX2ZhY3RvcjtcXG5cXG4gICAgLy8gY29udHJhc3RcXG4gICAgcmdiID0gKHJnYiAtIDAuNSkgKiB1X2NvbnRyYXN0X2ZhY3RvciArIDAuNTtcXG5cXG4gICAgLy8gYnJpZ2h0bmVzc1xcbiAgICB2ZWMzIHVfaGlnaF92ZWMgPSB2ZWMzKHVfYnJpZ2h0bmVzc19sb3csIHVfYnJpZ2h0bmVzc19sb3csIHVfYnJpZ2h0bmVzc19sb3cpO1xcbiAgICB2ZWMzIHVfbG93X3ZlYyA9IHZlYzModV9icmlnaHRuZXNzX2hpZ2gsIHVfYnJpZ2h0bmVzc19oaWdoLCB1X2JyaWdodG5lc3NfaGlnaCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQobWl4KHVfaGlnaF92ZWMsIHVfbG93X3ZlYywgcmdiKSAqIGNvbG9yLmEsIGNvbG9yLmEpO1xcblxcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xcbiNlbmRpZlxcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHVfdGxfcGFyZW50O1xcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZV9wYXJlbnQ7XFxudW5pZm9ybSBmbG9hdCB1X2J1ZmZlcl9zY2FsZTtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG5hdHRyaWJ1dGUgdmVjMiBhX3RleHR1cmVfcG9zO1xcblxcbnZhcnlpbmcgdmVjMiB2X3BvczA7XFxudmFyeWluZyB2ZWMyIHZfcG9zMTtcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcXG4gICAgLy8gV2UgYXJlIHVzaW5nIEludDE2IGZvciB0ZXh0dXJlIHBvc2l0aW9uIGNvb3JkaW5hdGVzIHRvIGdpdmUgdXMgZW5vdWdoIHByZWNpc2lvbiBmb3JcXG4gICAgLy8gZnJhY3Rpb25hbCBjb29yZGluYXRlcy4gV2UgdXNlIDgxOTIgdG8gc2NhbGUgdGhlIHRleHR1cmUgY29vcmRpbmF0ZXMgaW4gdGhlIGJ1ZmZlclxcbiAgICAvLyBhcyBhbiBhcmJpdHJhcmlseSBoaWdoIG51bWJlciB0byBwcmVzZXJ2ZSBhZGVxdWF0ZSBwcmVjaXNpb24gd2hlbiByZW5kZXJpbmcuXFxuICAgIC8vIFRoaXMgaXMgYWxzbyB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgRVhURU5UIHdlIGFyZSB1c2luZyBmb3Igb3VyIHRpbGUgYnVmZmVyIHBvcyBjb29yZGluYXRlcyxcXG4gICAgLy8gc28gbWF0aCBmb3IgbW9kaWZ5aW5nIGVpdGhlciBpcyBjb25zaXN0ZW50LlxcbiAgICB2X3BvczAgPSAoKChhX3RleHR1cmVfcG9zIC8gODE5Mi4wKSAtIDAuNSkgLyB1X2J1ZmZlcl9zY2FsZSApICsgMC41O1xcbiAgICB2X3BvczEgPSAodl9wb3MwICogdV9zY2FsZV9wYXJlbnQpICsgdV90bF9wYXJlbnQ7XFxufVxcblwifSxzeW1ib2xJY29uOntmcmFnbWVudFNvdXJjZTpcInVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTtcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbnZhcnlpbmcgdmVjMiB2X3RleDtcXG52YXJ5aW5nIGZsb2F0IHZfZmFkZV9vcGFjaXR5O1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxuICAgIGxvd3AgZmxvYXQgYWxwaGEgPSBvcGFjaXR5ICogdl9mYWRlX29wYWNpdHk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1X3RleHR1cmUsIHZfdGV4KSAqIGFscGhhO1xcblxcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xcbiNlbmRpZlxcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCJjb25zdCBmbG9hdCBQSSA9IDMuMTQxNTkyNjUzNTg5NzkzO1xcblxcbmF0dHJpYnV0ZSB2ZWM0IGFfcG9zX29mZnNldDtcXG5hdHRyaWJ1dGUgdmVjNCBhX2RhdGE7XFxuYXR0cmlidXRlIHZlYzMgYV9wcm9qZWN0ZWRfcG9zO1xcbmF0dHJpYnV0ZSBmbG9hdCBhX2ZhZGVfb3BhY2l0eTtcXG5cXG51bmlmb3JtIGJvb2wgdV9pc19zaXplX3pvb21fY29uc3RhbnQ7XFxudW5pZm9ybSBib29sIHVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50O1xcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9zaXplX3Q7IC8vIHVzZWQgdG8gaW50ZXJwb2xhdGUgYmV0d2VlbiB6b29tIHN0b3BzIHdoZW4gc2l6ZSBpcyBhIGNvbXBvc2l0ZSBmdW5jdGlvblxcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9zaXplOyAvLyB1c2VkIHdoZW4gc2l6ZSBpcyBib3RoIHpvb20gYW5kIGZlYXR1cmUgY29uc3RhbnRcXG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTtcXG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfcGl0Y2g7XFxudW5pZm9ybSBib29sIHVfcm90YXRlX3N5bWJvbDtcXG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfYXNwZWN0X3JhdGlvO1xcbnVuaWZvcm0gZmxvYXQgdV9mYWRlX2NoYW5nZTtcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG51bmlmb3JtIG1hdDQgdV9sYWJlbF9wbGFuZV9tYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVfZ2xfY29vcmRfbWF0cml4O1xcblxcbnVuaWZvcm0gYm9vbCB1X2lzX3RleHQ7XFxudW5pZm9ybSBib29sIHVfcGl0Y2hfd2l0aF9tYXA7XFxuXFxudW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTtcXG5cXG52YXJ5aW5nIHZlYzIgdl90ZXg7XFxudmFyeWluZyBmbG9hdCB2X2ZhZGVfb3BhY2l0eTtcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbiAgICB2ZWMyIGFfcG9zID0gYV9wb3Nfb2Zmc2V0Lnh5O1xcbiAgICB2ZWMyIGFfb2Zmc2V0ID0gYV9wb3Nfb2Zmc2V0Lnp3O1xcblxcbiAgICB2ZWMyIGFfdGV4ID0gYV9kYXRhLnh5O1xcbiAgICB2ZWMyIGFfc2l6ZSA9IGFfZGF0YS56dztcXG5cXG4gICAgaGlnaHAgZmxvYXQgc2VnbWVudF9hbmdsZSA9IC1hX3Byb2plY3RlZF9wb3NbMl07XFxuXFxuICAgIGZsb2F0IHNpemU7XFxuICAgIGlmICghdV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgIXVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSB7XFxuICAgICAgICBzaXplID0gbWl4KGFfc2l6ZVswXSwgYV9zaXplWzFdLCB1X3NpemVfdCkgLyAxMC4wO1xcbiAgICB9IGVsc2UgaWYgKHVfaXNfc2l6ZV96b29tX2NvbnN0YW50ICYmICF1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge1xcbiAgICAgICAgc2l6ZSA9IGFfc2l6ZVswXSAvIDEwLjA7XFxuICAgIH0gZWxzZSBpZiAoIXVfaXNfc2l6ZV96b29tX2NvbnN0YW50ICYmIHVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSB7XFxuICAgICAgICBzaXplID0gdV9zaXplO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgc2l6ZSA9IHVfc2l6ZTtcXG4gICAgfVxcblxcbiAgICB2ZWM0IHByb2plY3RlZFBvaW50ID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcXG4gICAgaGlnaHAgZmxvYXQgY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZSA9IHByb2plY3RlZFBvaW50Lnc7XFxuICAgIC8vIFNlZSBjb21tZW50cyBpbiBzeW1ib2xfc2RmLnZlcnRleFxcbiAgICBoaWdocCBmbG9hdCBkaXN0YW5jZV9yYXRpbyA9IHVfcGl0Y2hfd2l0aF9tYXAgP1xcbiAgICAgICAgY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZSAvIHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSA6XFxuICAgICAgICB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UgLyBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlO1xcbiAgICBoaWdocCBmbG9hdCBwZXJzcGVjdGl2ZV9yYXRpbyA9IGNsYW1wKFxcbiAgICAgICAgICAgIDAuNSArIDAuNSAqIGRpc3RhbmNlX3JhdGlvLFxcbiAgICAgICAgICAgIDAuMCwgLy8gUHJldmVudHMgb3ZlcnNpemVkIG5lYXItZmllbGQgc3ltYm9scyBpbiBwaXRjaGVkL292ZXJ6b29tZWQgdGlsZXNcXG4gICAgICAgICAgICA0LjApO1xcblxcbiAgICBzaXplICo9IHBlcnNwZWN0aXZlX3JhdGlvO1xcblxcbiAgICBmbG9hdCBmb250U2NhbGUgPSB1X2lzX3RleHQgPyBzaXplIC8gMjQuMCA6IHNpemU7XFxuXFxuICAgIGhpZ2hwIGZsb2F0IHN5bWJvbF9yb3RhdGlvbiA9IDAuMDtcXG4gICAgaWYgKHVfcm90YXRlX3N5bWJvbCkge1xcbiAgICAgICAgLy8gU2VlIGNvbW1lbnRzIGluIHN5bWJvbF9zZGYudmVydGV4XFxuICAgICAgICB2ZWM0IG9mZnNldFByb2plY3RlZFBvaW50ID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zICsgdmVjMigxLCAwKSwgMCwgMSk7XFxuXFxuICAgICAgICB2ZWMyIGEgPSBwcm9qZWN0ZWRQb2ludC54eSAvIHByb2plY3RlZFBvaW50Lnc7XFxuICAgICAgICB2ZWMyIGIgPSBvZmZzZXRQcm9qZWN0ZWRQb2ludC54eSAvIG9mZnNldFByb2plY3RlZFBvaW50Lnc7XFxuXFxuICAgICAgICBzeW1ib2xfcm90YXRpb24gPSBhdGFuKChiLnkgLSBhLnkpIC8gdV9hc3BlY3RfcmF0aW8sIGIueCAtIGEueCk7XFxuICAgIH1cXG5cXG4gICAgaGlnaHAgZmxvYXQgYW5nbGVfc2luID0gc2luKHNlZ21lbnRfYW5nbGUgKyBzeW1ib2xfcm90YXRpb24pO1xcbiAgICBoaWdocCBmbG9hdCBhbmdsZV9jb3MgPSBjb3Moc2VnbWVudF9hbmdsZSArIHN5bWJvbF9yb3RhdGlvbik7XFxuICAgIG1hdDIgcm90YXRpb25fbWF0cml4ID0gbWF0MihhbmdsZV9jb3MsIC0xLjAgKiBhbmdsZV9zaW4sIGFuZ2xlX3NpbiwgYW5nbGVfY29zKTtcXG5cXG4gICAgdmVjNCBwcm9qZWN0ZWRfcG9zID0gdV9sYWJlbF9wbGFuZV9tYXRyaXggKiB2ZWM0KGFfcHJvamVjdGVkX3Bvcy54eSwgMC4wLCAxLjApO1xcbiAgICBnbF9Qb3NpdGlvbiA9IHVfZ2xfY29vcmRfbWF0cml4ICogdmVjNChwcm9qZWN0ZWRfcG9zLnh5IC8gcHJvamVjdGVkX3Bvcy53ICsgcm90YXRpb25fbWF0cml4ICogKGFfb2Zmc2V0IC8gMzIuMCAqIGZvbnRTY2FsZSksIDAuMCwgMS4wKTtcXG5cXG4gICAgdl90ZXggPSBhX3RleCAvIHVfdGV4c2l6ZTtcXG4gICAgdmVjMiBmYWRlX29wYWNpdHkgPSB1bnBhY2tfb3BhY2l0eShhX2ZhZGVfb3BhY2l0eSk7XFxuICAgIGZsb2F0IGZhZGVfY2hhbmdlID0gZmFkZV9vcGFjaXR5WzFdID4gMC41ID8gdV9mYWRlX2NoYW5nZSA6IC11X2ZhZGVfY2hhbmdlO1xcbiAgICB2X2ZhZGVfb3BhY2l0eSA9IG1heCgwLjAsIG1pbigxLjAsIGZhZGVfb3BhY2l0eVswXSArIGZhZGVfY2hhbmdlKSk7XFxufVxcblwifSxzeW1ib2xTREY6e2ZyYWdtZW50U291cmNlOlwiI2RlZmluZSBTREZfUFggOC4wXFxuI2RlZmluZSBFREdFX0dBTU1BIDAuMTA1L0RFVklDRV9QSVhFTF9SQVRJT1xcblxcbnVuaWZvcm0gYm9vbCB1X2lzX2hhbG87XFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb19ibHVyXFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlO1xcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9nYW1tYV9zY2FsZTtcXG51bmlmb3JtIGJvb2wgdV9pc190ZXh0O1xcblxcbnZhcnlpbmcgdmVjMiB2X2RhdGEwO1xcbnZhcnlpbmcgdmVjMyB2X2RhdGExO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBmaWxsX2NvbG9yXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoYWxvX3dpZHRoXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb19ibHVyXFxuXFxuICAgIHZlYzIgdGV4ID0gdl9kYXRhMC54eTtcXG4gICAgZmxvYXQgZ2FtbWFfc2NhbGUgPSB2X2RhdGExLng7XFxuICAgIGZsb2F0IHNpemUgPSB2X2RhdGExLnk7XFxuICAgIGZsb2F0IGZhZGVfb3BhY2l0eSA9IHZfZGF0YTFbMl07XFxuXFxuICAgIGZsb2F0IGZvbnRTY2FsZSA9IHVfaXNfdGV4dCA/IHNpemUgLyAyNC4wIDogc2l6ZTtcXG5cXG4gICAgbG93cCB2ZWM0IGNvbG9yID0gZmlsbF9jb2xvcjtcXG4gICAgaGlnaHAgZmxvYXQgZ2FtbWEgPSBFREdFX0dBTU1BIC8gKGZvbnRTY2FsZSAqIHVfZ2FtbWFfc2NhbGUpO1xcbiAgICBsb3dwIGZsb2F0IGJ1ZmYgPSAoMjU2LjAgLSA2NC4wKSAvIDI1Ni4wO1xcbiAgICBpZiAodV9pc19oYWxvKSB7XFxuICAgICAgICBjb2xvciA9IGhhbG9fY29sb3I7XFxuICAgICAgICBnYW1tYSA9IChoYWxvX2JsdXIgKiAxLjE5IC8gU0RGX1BYICsgRURHRV9HQU1NQSkgLyAoZm9udFNjYWxlICogdV9nYW1tYV9zY2FsZSk7XFxuICAgICAgICBidWZmID0gKDYuMCAtIGhhbG9fd2lkdGggLyBmb250U2NhbGUpIC8gU0RGX1BYO1xcbiAgICB9XFxuXFxuICAgIGxvd3AgZmxvYXQgZGlzdCA9IHRleHR1cmUyRCh1X3RleHR1cmUsIHRleCkuYTtcXG4gICAgaGlnaHAgZmxvYXQgZ2FtbWFfc2NhbGVkID0gZ2FtbWEgKiBnYW1tYV9zY2FsZTtcXG4gICAgaGlnaHAgZmxvYXQgYWxwaGEgPSBzbW9vdGhzdGVwKGJ1ZmYgLSBnYW1tYV9zY2FsZWQsIGJ1ZmYgKyBnYW1tYV9zY2FsZWQsIGRpc3QpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAqIChhbHBoYSAqIG9wYWNpdHkgKiBmYWRlX29wYWNpdHkpO1xcblxcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xcbiNlbmRpZlxcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCJjb25zdCBmbG9hdCBQSSA9IDMuMTQxNTkyNjUzNTg5NzkzO1xcblxcbmF0dHJpYnV0ZSB2ZWM0IGFfcG9zX29mZnNldDtcXG5hdHRyaWJ1dGUgdmVjNCBhX2RhdGE7XFxuYXR0cmlidXRlIHZlYzMgYV9wcm9qZWN0ZWRfcG9zO1xcbmF0dHJpYnV0ZSBmbG9hdCBhX2ZhZGVfb3BhY2l0eTtcXG5cXG4vLyBjb250ZW50cyBvZiBhX3NpemUgdmFyeSBiYXNlZCBvbiB0aGUgdHlwZSBvZiBwcm9wZXJ0eSB2YWx1ZVxcbi8vIHVzZWQgZm9yIHt0ZXh0LGljb259LXNpemUuXFxuLy8gRm9yIGNvbnN0YW50cywgYV9zaXplIGlzIGRpc2FibGVkLlxcbi8vIEZvciBzb3VyY2UgZnVuY3Rpb25zLCB3ZSBiaW5kIG9ubHkgb25lIHZhbHVlIHBlciB2ZXJ0ZXg6IHRoZSB2YWx1ZSBvZiB7dGV4dCxpY29ufS1zaXplIGV2YWx1YXRlZCBmb3IgdGhlIGN1cnJlbnQgZmVhdHVyZS5cXG4vLyBGb3IgY29tcG9zaXRlIGZ1bmN0aW9uczpcXG4vLyBbIHRleHQtc2l6ZShsb3dlclpvb21TdG9wLCBmZWF0dXJlKSxcXG4vLyAgIHRleHQtc2l6ZSh1cHBlclpvb21TdG9wLCBmZWF0dXJlKSBdXFxudW5pZm9ybSBib29sIHVfaXNfc2l6ZV96b29tX2NvbnN0YW50O1xcbnVuaWZvcm0gYm9vbCB1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudDtcXG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfc2l6ZV90OyAvLyB1c2VkIHRvIGludGVycG9sYXRlIGJldHdlZW4gem9vbSBzdG9wcyB3aGVuIHNpemUgaXMgYSBjb21wb3NpdGUgZnVuY3Rpb25cXG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfc2l6ZTsgLy8gdXNlZCB3aGVuIHNpemUgaXMgYm90aCB6b29tIGFuZCBmZWF0dXJlIGNvbnN0YW50XFxuXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb19ibHVyXFxuXFxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1X2xhYmVsX3BsYW5lX21hdHJpeDtcXG51bmlmb3JtIG1hdDQgdV9nbF9jb29yZF9tYXRyaXg7XFxuXFxudW5pZm9ybSBib29sIHVfaXNfdGV4dDtcXG51bmlmb3JtIGJvb2wgdV9waXRjaF93aXRoX21hcDtcXG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfcGl0Y2g7XFxudW5pZm9ybSBib29sIHVfcm90YXRlX3N5bWJvbDtcXG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfYXNwZWN0X3JhdGlvO1xcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO1xcbnVuaWZvcm0gZmxvYXQgdV9mYWRlX2NoYW5nZTtcXG5cXG51bmlmb3JtIHZlYzIgdV90ZXhzaXplO1xcblxcbnZhcnlpbmcgdmVjMiB2X2RhdGEwO1xcbnZhcnlpbmcgdmVjMyB2X2RhdGExO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBmaWxsX2NvbG9yXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoYWxvX3dpZHRoXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb19ibHVyXFxuXFxuICAgIHZlYzIgYV9wb3MgPSBhX3Bvc19vZmZzZXQueHk7XFxuICAgIHZlYzIgYV9vZmZzZXQgPSBhX3Bvc19vZmZzZXQuenc7XFxuXFxuICAgIHZlYzIgYV90ZXggPSBhX2RhdGEueHk7XFxuICAgIHZlYzIgYV9zaXplID0gYV9kYXRhLnp3O1xcblxcbiAgICBoaWdocCBmbG9hdCBzZWdtZW50X2FuZ2xlID0gLWFfcHJvamVjdGVkX3Bvc1syXTtcXG4gICAgZmxvYXQgc2l6ZTtcXG5cXG4gICAgaWYgKCF1X2lzX3NpemVfem9vbV9jb25zdGFudCAmJiAhdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtcXG4gICAgICAgIHNpemUgPSBtaXgoYV9zaXplWzBdLCBhX3NpemVbMV0sIHVfc2l6ZV90KSAvIDEwLjA7XFxuICAgIH0gZWxzZSBpZiAodV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgIXVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSB7XFxuICAgICAgICBzaXplID0gYV9zaXplWzBdIC8gMTAuMDtcXG4gICAgfSBlbHNlIGlmICghdV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtcXG4gICAgICAgIHNpemUgPSB1X3NpemU7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBzaXplID0gdV9zaXplO1xcbiAgICB9XFxuXFxuICAgIHZlYzQgcHJvamVjdGVkUG9pbnQgPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xcbiAgICBoaWdocCBmbG9hdCBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlID0gcHJvamVjdGVkUG9pbnQudztcXG4gICAgLy8gSWYgdGhlIGxhYmVsIGlzIHBpdGNoZWQgd2l0aCB0aGUgbWFwLCBsYXlvdXQgaXMgZG9uZSBpbiBwaXRjaGVkIHNwYWNlLFxcbiAgICAvLyB3aGljaCBtYWtlcyBsYWJlbHMgaW4gdGhlIGRpc3RhbmNlIHNtYWxsZXIgcmVsYXRpdmUgdG8gdmlld3BvcnQgc3BhY2UuXFxuICAgIC8vIFdlIGNvdW50ZXJhY3QgcGFydCBvZiB0aGF0IGVmZmVjdCBieSBtdWx0aXBseWluZyBieSB0aGUgcGVyc3BlY3RpdmUgcmF0aW8uXFxuICAgIC8vIElmIHRoZSBsYWJlbCBpc24ndCBwaXRjaGVkIHdpdGggdGhlIG1hcCwgd2UgZG8gbGF5b3V0IGluIHZpZXdwb3J0IHNwYWNlLFxcbiAgICAvLyB3aGljaCBtYWtlcyBsYWJlbHMgaW4gdGhlIGRpc3RhbmNlIGxhcmdlciByZWxhdGl2ZSB0byB0aGUgZmVhdHVyZXMgYXJvdW5kXFxuICAgIC8vIHRoZW0uIFdlIGNvdW50ZXJhY3QgcGFydCBvZiB0aGF0IGVmZmVjdCBieSBkaXZpZGluZyBieSB0aGUgcGVyc3BlY3RpdmUgcmF0aW8uXFxuICAgIGhpZ2hwIGZsb2F0IGRpc3RhbmNlX3JhdGlvID0gdV9waXRjaF93aXRoX21hcCA/XFxuICAgICAgICBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlIC8gdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlIDpcXG4gICAgICAgIHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSAvIGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2U7XFxuICAgIGhpZ2hwIGZsb2F0IHBlcnNwZWN0aXZlX3JhdGlvID0gY2xhbXAoXFxuICAgICAgICAwLjUgKyAwLjUgKiBkaXN0YW5jZV9yYXRpbyxcXG4gICAgICAgIDAuMCwgLy8gUHJldmVudHMgb3ZlcnNpemVkIG5lYXItZmllbGQgc3ltYm9scyBpbiBwaXRjaGVkL292ZXJ6b29tZWQgdGlsZXNcXG4gICAgICAgIDQuMCk7XFxuXFxuICAgIHNpemUgKj0gcGVyc3BlY3RpdmVfcmF0aW87XFxuXFxuICAgIGZsb2F0IGZvbnRTY2FsZSA9IHVfaXNfdGV4dCA/IHNpemUgLyAyNC4wIDogc2l6ZTtcXG5cXG4gICAgaGlnaHAgZmxvYXQgc3ltYm9sX3JvdGF0aW9uID0gMC4wO1xcbiAgICBpZiAodV9yb3RhdGVfc3ltYm9sKSB7XFxuICAgICAgICAvLyBQb2ludCBsYWJlbHMgd2l0aCAncm90YXRpb24tYWxpZ25tZW50OiBtYXAnIGFyZSBob3Jpem9udGFsIHdpdGggcmVzcGVjdCB0byB0aWxlIHVuaXRzXFxuICAgICAgICAvLyBUbyBmaWd1cmUgb3V0IHRoYXQgYW5nbGUgaW4gcHJvamVjdGVkIHNwYWNlLCB3ZSBkcmF3IGEgc2hvcnQgaG9yaXpvbnRhbCBsaW5lIGluIHRpbGVcXG4gICAgICAgIC8vIHNwYWNlLCBwcm9qZWN0IGl0LCBhbmQgbWVhc3VyZSBpdHMgYW5nbGUgaW4gcHJvamVjdGVkIHNwYWNlLlxcbiAgICAgICAgdmVjNCBvZmZzZXRQcm9qZWN0ZWRQb2ludCA9IHVfbWF0cml4ICogdmVjNChhX3BvcyArIHZlYzIoMSwgMCksIDAsIDEpO1xcblxcbiAgICAgICAgdmVjMiBhID0gcHJvamVjdGVkUG9pbnQueHkgLyBwcm9qZWN0ZWRQb2ludC53O1xcbiAgICAgICAgdmVjMiBiID0gb2Zmc2V0UHJvamVjdGVkUG9pbnQueHkgLyBvZmZzZXRQcm9qZWN0ZWRQb2ludC53O1xcblxcbiAgICAgICAgc3ltYm9sX3JvdGF0aW9uID0gYXRhbigoYi55IC0gYS55KSAvIHVfYXNwZWN0X3JhdGlvLCBiLnggLSBhLngpO1xcbiAgICB9XFxuXFxuICAgIGhpZ2hwIGZsb2F0IGFuZ2xlX3NpbiA9IHNpbihzZWdtZW50X2FuZ2xlICsgc3ltYm9sX3JvdGF0aW9uKTtcXG4gICAgaGlnaHAgZmxvYXQgYW5nbGVfY29zID0gY29zKHNlZ21lbnRfYW5nbGUgKyBzeW1ib2xfcm90YXRpb24pO1xcbiAgICBtYXQyIHJvdGF0aW9uX21hdHJpeCA9IG1hdDIoYW5nbGVfY29zLCAtMS4wICogYW5nbGVfc2luLCBhbmdsZV9zaW4sIGFuZ2xlX2Nvcyk7XFxuXFxuICAgIHZlYzQgcHJvamVjdGVkX3BvcyA9IHVfbGFiZWxfcGxhbmVfbWF0cml4ICogdmVjNChhX3Byb2plY3RlZF9wb3MueHksIDAuMCwgMS4wKTtcXG4gICAgZ2xfUG9zaXRpb24gPSB1X2dsX2Nvb3JkX21hdHJpeCAqIHZlYzQocHJvamVjdGVkX3Bvcy54eSAvIHByb2plY3RlZF9wb3MudyArIHJvdGF0aW9uX21hdHJpeCAqIChhX29mZnNldCAvIDMyLjAgKiBmb250U2NhbGUpLCAwLjAsIDEuMCk7XFxuICAgIGZsb2F0IGdhbW1hX3NjYWxlID0gZ2xfUG9zaXRpb24udztcXG5cXG4gICAgdmVjMiB0ZXggPSBhX3RleCAvIHVfdGV4c2l6ZTtcXG4gICAgdmVjMiBmYWRlX29wYWNpdHkgPSB1bnBhY2tfb3BhY2l0eShhX2ZhZGVfb3BhY2l0eSk7XFxuICAgIGZsb2F0IGZhZGVfY2hhbmdlID0gZmFkZV9vcGFjaXR5WzFdID4gMC41ID8gdV9mYWRlX2NoYW5nZSA6IC11X2ZhZGVfY2hhbmdlO1xcbiAgICBmbG9hdCBpbnRlcnBvbGF0ZWRfZmFkZV9vcGFjaXR5ID0gbWF4KDAuMCwgbWluKDEuMCwgZmFkZV9vcGFjaXR5WzBdICsgZmFkZV9jaGFuZ2UpKTtcXG5cXG4gICAgdl9kYXRhMCA9IHZlYzIodGV4LngsIHRleC55KTtcXG4gICAgdl9kYXRhMSA9IHZlYzMoZ2FtbWFfc2NhbGUsIHNpemUsIGludGVycG9sYXRlZF9mYWRlX29wYWNpdHkpO1xcbn1cXG5cIn19LHRyPS8jcHJhZ21hIG1hcGJveDogKFtcXHddKykgKFtcXHddKykgKFtcXHddKykgKFtcXHddKykvZyxlcj1mdW5jdGlvbih0KXt2YXIgZT1RZVt0XSxyPXt9O2UuZnJhZ21lbnRTb3VyY2U9ZS5mcmFnbWVudFNvdXJjZS5yZXBsYWNlKHRyLGZ1bmN0aW9uKHQsZSxuLGksYSl7cmV0dXJuIHJbYV09ITAsXCJkZWZpbmVcIj09PWU/XCJcXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfXCIrYStcIlxcbnZhcnlpbmcgXCIrbitcIiBcIitpK1wiIFwiK2ErXCI7XFxuI2Vsc2VcXG51bmlmb3JtIFwiK24rXCIgXCIraStcIiB1X1wiK2ErXCI7XFxuI2VuZGlmXFxuXCI6XCJcXG4jaWZkZWYgSEFTX1VOSUZPUk1fdV9cIithK1wiXFxuICAgIFwiK24rXCIgXCIraStcIiBcIithK1wiID0gdV9cIithK1wiO1xcbiNlbmRpZlxcblwifSksZS52ZXJ0ZXhTb3VyY2U9ZS52ZXJ0ZXhTb3VyY2UucmVwbGFjZSh0cixmdW5jdGlvbih0LGUsbixpLGEpe3ZhciBvPVwiZmxvYXRcIj09PWk/XCJ2ZWMyXCI6XCJ2ZWM0XCI7cmV0dXJuIHJbYV0/XCJkZWZpbmVcIj09PWU/XCJcXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfXCIrYStcIlxcbnVuaWZvcm0gbG93cCBmbG9hdCBhX1wiK2ErXCJfdDtcXG5hdHRyaWJ1dGUgXCIrbitcIiBcIitvK1wiIGFfXCIrYStcIjtcXG52YXJ5aW5nIFwiK24rXCIgXCIraStcIiBcIithK1wiO1xcbiNlbHNlXFxudW5pZm9ybSBcIituK1wiIFwiK2krXCIgdV9cIithK1wiO1xcbiNlbmRpZlxcblwiOlwiXFxuI2lmbmRlZiBIQVNfVU5JRk9STV91X1wiK2ErXCJcXG4gICAgXCIrYStcIiA9IHVucGFja19taXhfXCIrbytcIihhX1wiK2ErXCIsIGFfXCIrYStcIl90KTtcXG4jZWxzZVxcbiAgICBcIituK1wiIFwiK2krXCIgXCIrYStcIiA9IHVfXCIrYStcIjtcXG4jZW5kaWZcXG5cIjpcImRlZmluZVwiPT09ZT9cIlxcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV9cIithK1wiXFxudW5pZm9ybSBsb3dwIGZsb2F0IGFfXCIrYStcIl90O1xcbmF0dHJpYnV0ZSBcIituK1wiIFwiK28rXCIgYV9cIithK1wiO1xcbiNlbHNlXFxudW5pZm9ybSBcIituK1wiIFwiK2krXCIgdV9cIithK1wiO1xcbiNlbmRpZlxcblwiOlwiXFxuI2lmbmRlZiBIQVNfVU5JRk9STV91X1wiK2ErXCJcXG4gICAgXCIrbitcIiBcIitpK1wiIFwiK2ErXCIgPSB1bnBhY2tfbWl4X1wiK28rXCIoYV9cIithK1wiLCBhX1wiK2ErXCJfdCk7XFxuI2Vsc2VcXG4gICAgXCIrbitcIiBcIitpK1wiIFwiK2ErXCIgPSB1X1wiK2ErXCI7XFxuI2VuZGlmXFxuXCJ9KX07Zm9yKHZhciByciBpbiBRZSllcihycik7dmFyIG5yPVFlLGlyPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuZ2w7dGhpcy5wcm9ncmFtPWkuY3JlYXRlUHJvZ3JhbSgpO3ZhciBvPXIuZGVmaW5lcygpLmNvbmNhdChcIiNkZWZpbmUgREVWSUNFX1BJWEVMX1JBVElPIFwiK2EuZGV2aWNlUGl4ZWxSYXRpby50b0ZpeGVkKDEpKTtuJiZvLnB1c2goXCIjZGVmaW5lIE9WRVJEUkFXX0lOU1BFQ1RPUjtcIik7dmFyIHM9by5jb25jYXQobnIucHJlbHVkZS5mcmFnbWVudFNvdXJjZSxlLmZyYWdtZW50U291cmNlKS5qb2luKFwiXFxuXCIpLGw9by5jb25jYXQobnIucHJlbHVkZS52ZXJ0ZXhTb3VyY2UsZS52ZXJ0ZXhTb3VyY2UpLmpvaW4oXCJcXG5cIiksYz1pLmNyZWF0ZVNoYWRlcihpLkZSQUdNRU5UX1NIQURFUik7aS5zaGFkZXJTb3VyY2UoYyxzKSxpLmNvbXBpbGVTaGFkZXIoYyksaS5hdHRhY2hTaGFkZXIodGhpcy5wcm9ncmFtLGMpO3ZhciB1PWkuY3JlYXRlU2hhZGVyKGkuVkVSVEVYX1NIQURFUik7aS5zaGFkZXJTb3VyY2UodSxsKSxpLmNvbXBpbGVTaGFkZXIodSksaS5hdHRhY2hTaGFkZXIodGhpcy5wcm9ncmFtLHUpO2Zvcih2YXIgaD1yLmxheW91dEF0dHJpYnV0ZXN8fFtdLGY9MDtmPGgubGVuZ3RoO2YrKylpLmJpbmRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sZixoW2ZdLm5hbWUpO2kubGlua1Byb2dyYW0odGhpcy5wcm9ncmFtKSx0aGlzLm51bUF0dHJpYnV0ZXM9aS5nZXRQcm9ncmFtUGFyYW1ldGVyKHRoaXMucHJvZ3JhbSxpLkFDVElWRV9BVFRSSUJVVEVTKSx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy51bmlmb3Jtcz17fTtmb3IodmFyIHA9MDtwPHRoaXMubnVtQXR0cmlidXRlcztwKyspe3ZhciBkPWkuZ2V0QWN0aXZlQXR0cmliKHRoaXMucHJvZ3JhbSxwKTtkJiYodGhpcy5hdHRyaWJ1dGVzW2QubmFtZV09aS5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sZC5uYW1lKSl9Zm9yKHZhciBnPWkuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLnByb2dyYW0saS5BQ1RJVkVfVU5JRk9STVMpLHY9MDt2PGc7disrKXt2YXIgbT1pLmdldEFjdGl2ZVVuaWZvcm0odGhpcy5wcm9ncmFtLHYpO20mJih0aGlzLnVuaWZvcm1zW20ubmFtZV09aS5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLG0ubmFtZSkpfX07ZnVuY3Rpb24gYXIoZSxyLG4saSxhKXtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKyl7dmFyIHM9bltvXTtpZihpLmlzTGVzc1RoYW4ocy50aWxlSUQpKWJyZWFrO2lmKHIua2V5PT09cy50aWxlSUQua2V5KXJldHVybjtpZihzLnRpbGVJRC5pc0NoaWxkT2Yocikpe2Zvcih2YXIgbD1yLmNoaWxkcmVuKDEvMCksYz0wO2M8bC5sZW5ndGg7YysrKWFyKGUsbFtjXSxuLnNsaWNlKG8pLGksYSk7cmV0dXJufX12YXIgdT1yLm92ZXJzY2FsZWRaLWUub3ZlcnNjYWxlZFosaD1uZXcgdC5DYW5vbmljYWxUaWxlSUQodSxyLmNhbm9uaWNhbC54LShlLmNhbm9uaWNhbC54PDx1KSxyLmNhbm9uaWNhbC55LShlLmNhbm9uaWNhbC55PDx1KSk7YVtoLmtleV09YVtoLmtleV18fGh9ZnVuY3Rpb24gb3IodCxlLHIsbixpKXt2YXIgYT10LmNvbnRleHQsbz1hLmdsLHM9aT90LnVzZVByb2dyYW0oXCJjb2xsaXNpb25DaXJjbGVcIik6dC51c2VQcm9ncmFtKFwiY29sbGlzaW9uQm94XCIpO2Euc2V0RGVwdGhNb2RlKHF0LmRpc2FibGVkKSxhLnNldFN0ZW5jaWxNb2RlKEh0LmRpc2FibGVkKSxhLnNldENvbG9yTW9kZSh0LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSk7Zm9yKHZhciBsPTA7bDxuLmxlbmd0aDtsKyspe3ZhciBjPW5bbF0sdT1lLmdldFRpbGUoYyksaD11LmdldEJ1Y2tldChyKTtpZihoKXt2YXIgZj1pP2guY29sbGlzaW9uQ2lyY2xlOmguY29sbGlzaW9uQm94O2lmKGYpe28udW5pZm9ybU1hdHJpeDRmdihzLnVuaWZvcm1zLnVfbWF0cml4LCExLGMucG9zTWF0cml4KSxpfHxhLmxpbmVXaWR0aC5zZXQoMSksby51bmlmb3JtMWYocy51bmlmb3Jtcy51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UsdC50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSk7dmFyIHA9TWUodSwxLHQudHJhbnNmb3JtLnpvb20pLGQ9TWF0aC5wb3coMix0LnRyYW5zZm9ybS56b29tLXUudGlsZUlELm92ZXJzY2FsZWRaKTtvLnVuaWZvcm0xZihzLnVuaWZvcm1zLnVfcGl4ZWxzX3RvX3RpbGVfdW5pdHMscCksby51bmlmb3JtMmYocy51bmlmb3Jtcy51X2V4dHJ1ZGVfc2NhbGUsdC50cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzWzBdLyhwKmQpLHQudHJhbnNmb3JtLnBpeGVsc1RvR0xVbml0c1sxXS8ocCpkKSksby51bmlmb3JtMWYocy51bmlmb3Jtcy51X292ZXJzY2FsZV9mYWN0b3IsdS50aWxlSUQub3ZlcnNjYWxlRmFjdG9yKCkpLHMuZHJhdyhhLGk/by5UUklBTkdMRVM6by5MSU5FUyxyLmlkLGYubGF5b3V0VmVydGV4QnVmZmVyLGYuaW5kZXhCdWZmZXIsZi5zZWdtZW50cyxudWxsLGYuY29sbGlzaW9uVmVydGV4QnVmZmVyLG51bGwpfX19fWlyLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsKXtmb3IodmFyIGMsdT10LmdsLGg9KGM9e30sY1t1LkxJTkVTXT0yLGNbdS5UUklBTkdMRVNdPTMsYylbZV0sZj0wLHA9YS5nZXQoKTtmPHAubGVuZ3RoO2YrPTEpe3ZhciBkPXBbZl0sZz1kLnZhb3N8fChkLnZhb3M9e30pOyhnW3JdfHwoZ1tyXT1uZXcgUSkpLmJpbmQodCx0aGlzLG4sbz9vLmdldFBhaW50VmVydGV4QnVmZmVycygpOltdLGksZC52ZXJ0ZXhPZmZzZXQscyxsKSx1LmRyYXdFbGVtZW50cyhlLGQucHJpbWl0aXZlTGVuZ3RoKmgsdS5VTlNJR05FRF9TSE9SVCxkLnByaW1pdGl2ZU9mZnNldCpoKjIpfX07dmFyIHNyPXQubWF0NC5pZGVudGl0eShuZXcgRmxvYXQzMkFycmF5KDE2KSksbHI9dC5kZWZhdWx0JDE5LmxheW91dDtmdW5jdGlvbiBjcih0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdSxoPXQuY29udGV4dCxmPWguZ2wscD10LnRyYW5zZm9ybSxkPVwibWFwXCI9PT1zLGc9XCJtYXBcIj09PWwsdj1kJiZcImxpbmVcIj09PXIubGF5b3V0LmdldChcInN5bWJvbC1wbGFjZW1lbnRcIiksbT1kJiYhZyYmIXYseT1nO2guc2V0RGVwdGhNb2RlKHk/dC5kZXB0aE1vZGVGb3JTdWJsYXllcigwLHF0LlJlYWRPbmx5KTpxdC5kaXNhYmxlZCk7Zm9yKHZhciB4PTAsYj1uO3g8Yi5sZW5ndGg7eCs9MSl7dmFyIF89Ylt4XSx3PWUuZ2V0VGlsZShfKSxrPXcuZ2V0QnVja2V0KHIpO2lmKGspe3ZhciBBPWk/ay50ZXh0OmsuaWNvbjtpZihBJiZBLnNlZ21lbnRzLmdldCgpLmxlbmd0aCl7dmFyIFQ9QS5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KHIuaWQpLE09aXx8ay5zZGZJY29ucyxTPWk/ay50ZXh0U2l6ZURhdGE6ay5pY29uU2l6ZURhdGE7aWYodXx8KHU9dC51c2VQcm9ncmFtKE0/XCJzeW1ib2xTREZcIjpcInN5bWJvbEljb25cIixUKSxULnNldFVuaWZvcm1zKHQuY29udGV4dCx1LHIucGFpbnQse3pvb206dC50cmFuc2Zvcm0uem9vbX0pLHVyKHUsdCxyLGksbSxnLFMpKSxoLmFjdGl2ZVRleHR1cmUuc2V0KGYuVEVYVFVSRTApLGYudW5pZm9ybTFpKHUudW5pZm9ybXMudV90ZXh0dXJlLDApLGkpdy5nbHlwaEF0bGFzVGV4dHVyZS5iaW5kKGYuTElORUFSLGYuQ0xBTVBfVE9fRURHRSksZi51bmlmb3JtMmZ2KHUudW5pZm9ybXMudV90ZXhzaXplLHcuZ2x5cGhBdGxhc1RleHR1cmUuc2l6ZSk7ZWxzZXt2YXIgRT0xIT09ci5sYXlvdXQuZ2V0KFwiaWNvbi1zaXplXCIpLmNvbnN0YW50T3IoMCl8fGsuaWNvbnNOZWVkTGluZWFyLEM9Z3x8MCE9PXAucGl0Y2g7dy5pY29uQXRsYXNUZXh0dXJlLmJpbmQoTXx8dC5vcHRpb25zLnJvdGF0aW5nfHx0Lm9wdGlvbnMuem9vbWluZ3x8RXx8Qz9mLkxJTkVBUjpmLk5FQVJFU1QsZi5DTEFNUF9UT19FREdFKSxmLnVuaWZvcm0yZnYodS51bmlmb3Jtcy51X3RleHNpemUsdy5pY29uQXRsYXNUZXh0dXJlLnNpemUpfWYudW5pZm9ybU1hdHJpeDRmdih1LnVuaWZvcm1zLnVfbWF0cml4LCExLHQudHJhbnNsYXRlUG9zTWF0cml4KF8ucG9zTWF0cml4LHcsYSxvKSk7dmFyIEw9TWUodywxLHQudHJhbnNmb3JtLnpvb20pLHo9aGUoXy5wb3NNYXRyaXgsZyxkLHQudHJhbnNmb3JtLEwpLE89ZmUoXy5wb3NNYXRyaXgsZyxkLHQudHJhbnNmb3JtLEwpO2YudW5pZm9ybU1hdHJpeDRmdih1LnVuaWZvcm1zLnVfZ2xfY29vcmRfbWF0cml4LCExLHQudHJhbnNsYXRlUG9zTWF0cml4KE8sdyxhLG8sITApKSx2PyhmLnVuaWZvcm1NYXRyaXg0ZnYodS51bmlmb3Jtcy51X2xhYmVsX3BsYW5lX21hdHJpeCwhMSxzciksZ2UoayxfLnBvc01hdHJpeCx0LGkseixPLGcsYykpOmYudW5pZm9ybU1hdHJpeDRmdih1LnVuaWZvcm1zLnVfbGFiZWxfcGxhbmVfbWF0cml4LCExLHopLGYudW5pZm9ybTFmKHUudW5pZm9ybXMudV9mYWRlX2NoYW5nZSx0Lm9wdGlvbnMuZmFkZUR1cmF0aW9uP3Quc3ltYm9sRmFkZUNoYW5nZToxKSxocih1LFQsdCxyLHcsQSxpLE0sZyl9fX19ZnVuY3Rpb24gdXIoZSxyLG4saSxhLG8scyl7dmFyIGw9ci5jb250ZXh0LmdsLGM9ci50cmFuc2Zvcm07bC51bmlmb3JtMWkoZS51bmlmb3Jtcy51X3BpdGNoX3dpdGhfbWFwLG8/MTowKSxsLnVuaWZvcm0xZihlLnVuaWZvcm1zLnVfaXNfdGV4dCxpPzE6MCksbC51bmlmb3JtMWYoZS51bmlmb3Jtcy51X3BpdGNoLGMucGl0Y2gvMzYwKjIqTWF0aC5QSSk7dmFyIHU9XCJjb25zdGFudFwiPT09cy5mdW5jdGlvblR5cGV8fFwic291cmNlXCI9PT1zLmZ1bmN0aW9uVHlwZSxoPVwiY29uc3RhbnRcIj09PXMuZnVuY3Rpb25UeXBlfHxcImNhbWVyYVwiPT09cy5mdW5jdGlvblR5cGU7bC51bmlmb3JtMWkoZS51bmlmb3Jtcy51X2lzX3NpemVfem9vbV9jb25zdGFudCx1PzE6MCksbC51bmlmb3JtMWkoZS51bmlmb3Jtcy51X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCxoPzE6MCksbC51bmlmb3JtMWYoZS51bmlmb3Jtcy51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UsYy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlKTt2YXIgZj10LmV2YWx1YXRlU2l6ZUZvclpvb20ocyxjLnpvb20sbHIucHJvcGVydGllc1tpP1widGV4dC1zaXplXCI6XCJpY29uLXNpemVcIl0pO3ZvaWQgMCE9PWYudVNpemVUJiZsLnVuaWZvcm0xZihlLnVuaWZvcm1zLnVfc2l6ZV90LGYudVNpemVUKSx2b2lkIDAhPT1mLnVTaXplJiZsLnVuaWZvcm0xZihlLnVuaWZvcm1zLnVfc2l6ZSxmLnVTaXplKSxsLnVuaWZvcm0xZihlLnVuaWZvcm1zLnVfYXNwZWN0X3JhdGlvLGMud2lkdGgvYy5oZWlnaHQpLGwudW5pZm9ybTFpKGUudW5pZm9ybXMudV9yb3RhdGVfc3ltYm9sLGE/MTowKX1mdW5jdGlvbiBocih0LGUscixuLGksYSxvLHMsbCl7dmFyIGM9ci5jb250ZXh0LHU9Yy5nbCxoPXIudHJhbnNmb3JtO2lmKHMpe3ZhciBmPTAhPT1uLnBhaW50LmdldChvP1widGV4dC1oYWxvLXdpZHRoXCI6XCJpY29uLWhhbG8td2lkdGhcIikuY29uc3RhbnRPcigxKSxwPWw/TWF0aC5jb3MoaC5fcGl0Y2gpKmguY2FtZXJhVG9DZW50ZXJEaXN0YW5jZToxO3UudW5pZm9ybTFmKHQudW5pZm9ybXMudV9nYW1tYV9zY2FsZSxwKSxmJiYodS51bmlmb3JtMWYodC51bmlmb3Jtcy51X2lzX2hhbG8sMSksZnIoYSxuLGMsdCkpLHUudW5pZm9ybTFmKHQudW5pZm9ybXMudV9pc19oYWxvLDApfWZyKGEsbixjLHQpfWZ1bmN0aW9uIGZyKHQsZSxyLG4pe24uZHJhdyhyLHIuZ2wuVFJJQU5HTEVTLGUuaWQsdC5sYXlvdXRWZXJ0ZXhCdWZmZXIsdC5pbmRleEJ1ZmZlcix0LnNlZ21lbnRzLHQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChlLmlkKSx0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIsdC5vcGFjaXR5VmVydGV4QnVmZmVyKX1mdW5jdGlvbiBwcih0LGUscixuLGksbyxzLGwsYyl7dmFyIHUsaCxmLHAsZD1lLmNvbnRleHQsZz1kLmdsLHY9aS5wYWludC5nZXQoXCJsaW5lLWRhc2hhcnJheVwiKSxtPWkucGFpbnQuZ2V0KFwibGluZS1wYXR0ZXJuXCIpO2lmKGx8fGMpe3ZhciB5PTEvTWUociwxLGUudHJhbnNmb3JtLnRpbGVab29tKTtpZih2KXt1PWUubGluZUF0bGFzLmdldERhc2godi5mcm9tLFwicm91bmRcIj09PWkubGF5b3V0LmdldChcImxpbmUtY2FwXCIpKSxoPWUubGluZUF0bGFzLmdldERhc2godi50byxcInJvdW5kXCI9PT1pLmxheW91dC5nZXQoXCJsaW5lLWNhcFwiKSk7dmFyIHg9dS53aWR0aCp2LmZyb21TY2FsZSxiPWgud2lkdGgqdi50b1NjYWxlO2cudW5pZm9ybTJmKHQudW5pZm9ybXMudV9wYXR0ZXJuc2NhbGVfYSx5L3gsLXUuaGVpZ2h0LzIpLGcudW5pZm9ybTJmKHQudW5pZm9ybXMudV9wYXR0ZXJuc2NhbGVfYix5L2IsLWguaGVpZ2h0LzIpLGcudW5pZm9ybTFmKHQudW5pZm9ybXMudV9zZGZnYW1tYSxlLmxpbmVBdGxhcy53aWR0aC8oMjU2Kk1hdGgubWluKHgsYikqYS5kZXZpY2VQaXhlbFJhdGlvKS8yKX1lbHNlIGlmKG0pe2lmKGY9ZS5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybihtLmZyb20pLHA9ZS5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybihtLnRvKSwhZnx8IXApcmV0dXJuO2cudW5pZm9ybTJmKHQudW5pZm9ybXMudV9wYXR0ZXJuX3NpemVfYSxmLmRpc3BsYXlTaXplWzBdKm0uZnJvbVNjYWxlL3ksZi5kaXNwbGF5U2l6ZVsxXSksZy51bmlmb3JtMmYodC51bmlmb3Jtcy51X3BhdHRlcm5fc2l6ZV9iLHAuZGlzcGxheVNpemVbMF0qbS50b1NjYWxlL3kscC5kaXNwbGF5U2l6ZVsxXSk7dmFyIF89ZS5pbWFnZU1hbmFnZXIuZ2V0UGl4ZWxTaXplKCksdz1fLndpZHRoLGs9Xy5oZWlnaHQ7Zy51bmlmb3JtMmZ2KHQudW5pZm9ybXMudV90ZXhzaXplLFt3LGtdKX1nLnVuaWZvcm0yZih0LnVuaWZvcm1zLnVfZ2xfdW5pdHNfdG9fcGl4ZWxzLDEvZS50cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzWzBdLDEvZS50cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzWzFdKX1sJiYodj8oZy51bmlmb3JtMWkodC51bmlmb3Jtcy51X2ltYWdlLDApLGQuYWN0aXZlVGV4dHVyZS5zZXQoZy5URVhUVVJFMCksZS5saW5lQXRsYXMuYmluZChkKSxnLnVuaWZvcm0xZih0LnVuaWZvcm1zLnVfdGV4X3lfYSx1LnkpLGcudW5pZm9ybTFmKHQudW5pZm9ybXMudV90ZXhfeV9iLGgueSksZy51bmlmb3JtMWYodC51bmlmb3Jtcy51X21peCx2LnQpKTptJiYoZy51bmlmb3JtMWkodC51bmlmb3Jtcy51X2ltYWdlLDApLGQuYWN0aXZlVGV4dHVyZS5zZXQoZy5URVhUVVJFMCksZS5pbWFnZU1hbmFnZXIuYmluZChkKSxnLnVuaWZvcm0yZnYodC51bmlmb3Jtcy51X3BhdHRlcm5fdGxfYSxmLnRsKSxnLnVuaWZvcm0yZnYodC51bmlmb3Jtcy51X3BhdHRlcm5fYnJfYSxmLmJyKSxnLnVuaWZvcm0yZnYodC51bmlmb3Jtcy51X3BhdHRlcm5fdGxfYixwLnRsKSxnLnVuaWZvcm0yZnYodC51bmlmb3Jtcy51X3BhdHRlcm5fYnJfYixwLmJyKSxnLnVuaWZvcm0xZih0LnVuaWZvcm1zLnVfZmFkZSxtLnQpKSksZC5zZXRTdGVuY2lsTW9kZShlLnN0ZW5jaWxNb2RlRm9yQ2xpcHBpbmcobykpO3ZhciBBPWUudHJhbnNsYXRlUG9zTWF0cml4KG8ucG9zTWF0cml4LHIsaS5wYWludC5nZXQoXCJsaW5lLXRyYW5zbGF0ZVwiKSxpLnBhaW50LmdldChcImxpbmUtdHJhbnNsYXRlLWFuY2hvclwiKSk7aWYoZy51bmlmb3JtTWF0cml4NGZ2KHQudW5pZm9ybXMudV9tYXRyaXgsITEsQSksZy51bmlmb3JtMWYodC51bmlmb3Jtcy51X3JhdGlvLDEvTWUociwxLGUudHJhbnNmb3JtLnpvb20pKSxpLnBhaW50LmdldChcImxpbmUtZ3JhZGllbnRcIikpe2QuYWN0aXZlVGV4dHVyZS5zZXQoZy5URVhUVVJFMCk7dmFyIFQ9aS5ncmFkaWVudFRleHR1cmU7aWYoIWkuZ3JhZGllbnQpcmV0dXJuO1R8fChUPWkuZ3JhZGllbnRUZXh0dXJlPW5ldyB6KGQsaS5ncmFkaWVudCxnLlJHQkEpKSxULmJpbmQoZy5MSU5FQVIsZy5DTEFNUF9UT19FREdFKSxnLnVuaWZvcm0xaSh0LnVuaWZvcm1zLnVfaW1hZ2UsMCl9dC5kcmF3KGQsZy5UUklBTkdMRVMsaS5pZCxuLmxheW91dFZlcnRleEJ1ZmZlcixuLmluZGV4QnVmZmVyLG4uc2VnbWVudHMscyl9dmFyIGRyPWZ1bmN0aW9uKHQsZSl7aWYoIXQpcmV0dXJuITE7dmFyIHI9ZS5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybih0LmZyb20pLG49ZS5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybih0LnRvKTtyZXR1cm4hcnx8IW59LGdyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLmNvbnRleHQsaT1uLmdsLGE9ZS5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybih0LmZyb20pLG89ZS5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybih0LnRvKTtpLnVuaWZvcm0xaShyLnVuaWZvcm1zLnVfaW1hZ2UsMCksaS51bmlmb3JtMmZ2KHIudW5pZm9ybXMudV9wYXR0ZXJuX3RsX2EsYS50bCksaS51bmlmb3JtMmZ2KHIudW5pZm9ybXMudV9wYXR0ZXJuX2JyX2EsYS5iciksaS51bmlmb3JtMmZ2KHIudW5pZm9ybXMudV9wYXR0ZXJuX3RsX2Isby50bCksaS51bmlmb3JtMmZ2KHIudW5pZm9ybXMudV9wYXR0ZXJuX2JyX2Isby5icik7dmFyIHM9ZS5pbWFnZU1hbmFnZXIuZ2V0UGl4ZWxTaXplKCksbD1zLndpZHRoLGM9cy5oZWlnaHQ7aS51bmlmb3JtMmZ2KHIudW5pZm9ybXMudV90ZXhzaXplLFtsLGNdKSxpLnVuaWZvcm0xZihyLnVuaWZvcm1zLnVfbWl4LHQudCksaS51bmlmb3JtMmZ2KHIudW5pZm9ybXMudV9wYXR0ZXJuX3NpemVfYSxhLmRpc3BsYXlTaXplKSxpLnVuaWZvcm0yZnYoci51bmlmb3Jtcy51X3BhdHRlcm5fc2l6ZV9iLG8uZGlzcGxheVNpemUpLGkudW5pZm9ybTFmKHIudW5pZm9ybXMudV9zY2FsZV9hLHQuZnJvbVNjYWxlKSxpLnVuaWZvcm0xZihyLnVuaWZvcm1zLnVfc2NhbGVfYix0LnRvU2NhbGUpLG4uYWN0aXZlVGV4dHVyZS5zZXQoaS5URVhUVVJFMCksZS5pbWFnZU1hbmFnZXIuYmluZChlLmNvbnRleHQpfSx2cj1mdW5jdGlvbih0LGUscil7dmFyIG49ZS5jb250ZXh0LmdsO24udW5pZm9ybTFmKHIudW5pZm9ybXMudV90aWxlX3VuaXRzX3RvX3BpeGVscywxL01lKHQsMSxlLnRyYW5zZm9ybS50aWxlWm9vbSkpO3ZhciBpPU1hdGgucG93KDIsdC50aWxlSUQub3ZlcnNjYWxlZFopLGE9dC50aWxlU2l6ZSpNYXRoLnBvdygyLGUudHJhbnNmb3JtLnRpbGVab29tKS9pLG89YSoodC50aWxlSUQuY2Fub25pY2FsLngrdC50aWxlSUQud3JhcCppKSxzPWEqdC50aWxlSUQuY2Fub25pY2FsLnk7bi51bmlmb3JtMmYoci51bmlmb3Jtcy51X3BpeGVsX2Nvb3JkX3VwcGVyLG8+PjE2LHM+PjE2KSxuLnVuaWZvcm0yZihyLnVuaWZvcm1zLnVfcGl4ZWxfY29vcmRfbG93ZXIsNjU1MzUmbyw2NTUzNSZzKX07ZnVuY3Rpb24gbXIodCxlLHIsbixpKXtpZighZHIoci5wYWludC5nZXQoXCJmaWxsLXBhdHRlcm5cIiksdCkpZm9yKHZhciBhPSEwLG89MCxzPW47bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dLGM9ZS5nZXRUaWxlKGwpLHU9Yy5nZXRCdWNrZXQocik7dSYmKHQuY29udGV4dC5zZXRTdGVuY2lsTW9kZSh0LnN0ZW5jaWxNb2RlRm9yQ2xpcHBpbmcobCkpLGkodCxlLHIsYyxsLHUsYSksYT0hMSl9fWZ1bmN0aW9uIHlyKHQsZSxyLG4saSxhLG8pe3ZhciBzPXQuY29udGV4dC5nbCxsPWEucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChyLmlkKTticihcImZpbGxcIixyLnBhaW50LmdldChcImZpbGwtcGF0dGVyblwiKSx0LGwscixuLGksbykuZHJhdyh0LmNvbnRleHQscy5UUklBTkdMRVMsci5pZCxhLmxheW91dFZlcnRleEJ1ZmZlcixhLmluZGV4QnVmZmVyLGEuc2VnbWVudHMsbCl9ZnVuY3Rpb24geHIodCxlLHIsbixpLGEsbyl7dmFyIHM9dC5jb250ZXh0LmdsLGw9YS5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KHIuaWQpLGM9YnIoXCJmaWxsT3V0bGluZVwiLHIuZ2V0UGFpbnRQcm9wZXJ0eShcImZpbGwtb3V0bGluZS1jb2xvclwiKT9udWxsOnIucGFpbnQuZ2V0KFwiZmlsbC1wYXR0ZXJuXCIpLHQsbCxyLG4saSxvKTtzLnVuaWZvcm0yZihjLnVuaWZvcm1zLnVfd29ybGQscy5kcmF3aW5nQnVmZmVyV2lkdGgscy5kcmF3aW5nQnVmZmVySGVpZ2h0KSxjLmRyYXcodC5jb250ZXh0LHMuTElORVMsci5pZCxhLmxheW91dFZlcnRleEJ1ZmZlcixhLmluZGV4QnVmZmVyMixhLnNlZ21lbnRzMixsKX1mdW5jdGlvbiBicih0LGUscixuLGksYSxvLHMpe3ZhciBsLGM9ci5jb250ZXh0LnByb2dyYW0uZ2V0KCk7cmV0dXJuIGU/KGw9ci51c2VQcm9ncmFtKHQrXCJQYXR0ZXJuXCIsbiksKHN8fGwucHJvZ3JhbSE9PWMpJiYobi5zZXRVbmlmb3JtcyhyLmNvbnRleHQsbCxpLnBhaW50LHt6b29tOnIudHJhbnNmb3JtLnpvb219KSxncihlLHIsbCkpLHZyKGEscixsKSk6KGw9ci51c2VQcm9ncmFtKHQsbiksKHN8fGwucHJvZ3JhbSE9PWMpJiZuLnNldFVuaWZvcm1zKHIuY29udGV4dCxsLGkucGFpbnQse3pvb206ci50cmFuc2Zvcm0uem9vbX0pKSxyLmNvbnRleHQuZ2wudW5pZm9ybU1hdHJpeDRmdihsLnVuaWZvcm1zLnVfbWF0cml4LCExLHIudHJhbnNsYXRlUG9zTWF0cml4KG8ucG9zTWF0cml4LGEsaS5wYWludC5nZXQoXCJmaWxsLXRyYW5zbGF0ZVwiKSxpLnBhaW50LmdldChcImZpbGwtdHJhbnNsYXRlLWFuY2hvclwiKSkpLGx9dmFyIF9yPXQuZGVmYXVsdCQyMC5tYXQzLHdyPXQuZGVmYXVsdCQyMC5tYXQ0LGtyPXQuZGVmYXVsdCQyMC52ZWMzO2Z1bmN0aW9uIEFyKHQsZSxyLG4saSxhLG8pe3ZhciBzPXQuY29udGV4dCxsPXMuZ2wsYz1yLnBhaW50LmdldChcImZpbGwtZXh0cnVzaW9uLXBhdHRlcm5cIiksdT10LmNvbnRleHQucHJvZ3JhbS5nZXQoKSxoPWEucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChyLmlkKSxmPXQudXNlUHJvZ3JhbShjP1wiZmlsbEV4dHJ1c2lvblBhdHRlcm5cIjpcImZpbGxFeHRydXNpb25cIixoKTtpZigob3x8Zi5wcm9ncmFtIT09dSkmJmguc2V0VW5pZm9ybXMocyxmLHIucGFpbnQse3pvb206dC50cmFuc2Zvcm0uem9vbX0pLGMpe2lmKGRyKGMsdCkpcmV0dXJuO2dyKGMsdCxmKSx2cihuLHQsZiksbC51bmlmb3JtMWYoZi51bmlmb3Jtcy51X2hlaWdodF9mYWN0b3IsLU1hdGgucG93KDIsaS5vdmVyc2NhbGVkWikvbi50aWxlU2l6ZS84KX10LmNvbnRleHQuZ2wudW5pZm9ybU1hdHJpeDRmdihmLnVuaWZvcm1zLnVfbWF0cml4LCExLHQudHJhbnNsYXRlUG9zTWF0cml4KGkucG9zTWF0cml4LG4sci5wYWludC5nZXQoXCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGVcIiksci5wYWludC5nZXQoXCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yXCIpKSksZnVuY3Rpb24odCxlKXt2YXIgcj1lLmNvbnRleHQuZ2wsbj1lLnN0eWxlLmxpZ2h0LGk9bi5wcm9wZXJ0aWVzLmdldChcInBvc2l0aW9uXCIpLGE9W2kueCxpLnksaS56XSxvPV9yLmNyZWF0ZSgpO1widmlld3BvcnRcIj09PW4ucHJvcGVydGllcy5nZXQoXCJhbmNob3JcIikmJl9yLmZyb21Sb3RhdGlvbihvLC1lLnRyYW5zZm9ybS5hbmdsZSksa3IudHJhbnNmb3JtTWF0MyhhLGEsbyk7dmFyIHM9bi5wcm9wZXJ0aWVzLmdldChcImNvbG9yXCIpO3IudW5pZm9ybTNmdih0LnVuaWZvcm1zLnVfbGlnaHRwb3MsYSksci51bmlmb3JtMWYodC51bmlmb3Jtcy51X2xpZ2h0aW50ZW5zaXR5LG4ucHJvcGVydGllcy5nZXQoXCJpbnRlbnNpdHlcIikpLHIudW5pZm9ybTNmKHQudW5pZm9ybXMudV9saWdodGNvbG9yLHMucixzLmcscy5iKX0oZix0KSxmLmRyYXcocyxsLlRSSUFOR0xFUyxyLmlkLGEubGF5b3V0VmVydGV4QnVmZmVyLGEuaW5kZXhCdWZmZXIsYS5zZWdtZW50cyxoKX1mdW5jdGlvbiBUcihlLHIsbil7dmFyIGk9ZS5jb250ZXh0LGE9aS5nbCxvPXIuZmJvO2lmKG8pe3ZhciBzPWUudXNlUHJvZ3JhbShcImhpbGxzaGFkZVwiKSxsPWUudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeChyLnRpbGVJRC50b1Vud3JhcHBlZCgpLCEwKTshZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIucGFpbnQuZ2V0KFwiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1kaXJlY3Rpb25cIikqKE1hdGguUEkvMTgwKTtcInZpZXdwb3J0XCI9PT1yLnBhaW50LmdldChcImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yXCIpJiYobi09ZS50cmFuc2Zvcm0uYW5nbGUpLGUuY29udGV4dC5nbC51bmlmb3JtMmYodC51bmlmb3Jtcy51X2xpZ2h0LHIucGFpbnQuZ2V0KFwiaGlsbHNoYWRlLWV4YWdnZXJhdGlvblwiKSxuKX0ocyxlLG4pO3ZhciBjPWZ1bmN0aW9uKGUscil7dmFyIG49ci50b0Nvb3JkaW5hdGUoKSxpPW5ldyB0LmRlZmF1bHQkMTcobi5jb2x1bW4sbi5yb3crMSxuLnpvb20pO3JldHVybltlLnRyYW5zZm9ybS5jb29yZGluYXRlTG9jYXRpb24obikubGF0LGUudHJhbnNmb3JtLmNvb3JkaW5hdGVMb2NhdGlvbihpKS5sYXRdfShlLHIudGlsZUlEKTtpLmFjdGl2ZVRleHR1cmUuc2V0KGEuVEVYVFVSRTApLGEuYmluZFRleHR1cmUoYS5URVhUVVJFXzJELG8uY29sb3JBdHRhY2htZW50LmdldCgpKSxhLnVuaWZvcm1NYXRyaXg0ZnYocy51bmlmb3Jtcy51X21hdHJpeCwhMSxsKSxhLnVuaWZvcm0yZnYocy51bmlmb3Jtcy51X2xhdHJhbmdlLGMpLGEudW5pZm9ybTFpKHMudW5pZm9ybXMudV9pbWFnZSwwKTt2YXIgdT1uLnBhaW50LmdldChcImhpbGxzaGFkZS1zaGFkb3ctY29sb3JcIik7YS51bmlmb3JtNGYocy51bmlmb3Jtcy51X3NoYWRvdyx1LnIsdS5nLHUuYix1LmEpO3ZhciBoPW4ucGFpbnQuZ2V0KFwiaGlsbHNoYWRlLWhpZ2hsaWdodC1jb2xvclwiKTthLnVuaWZvcm00ZihzLnVuaWZvcm1zLnVfaGlnaGxpZ2h0LGgucixoLmcsaC5iLGguYSk7dmFyIGY9bi5wYWludC5nZXQoXCJoaWxsc2hhZGUtYWNjZW50LWNvbG9yXCIpO2lmKGEudW5pZm9ybTRmKHMudW5pZm9ybXMudV9hY2NlbnQsZi5yLGYuZyxmLmIsZi5hKSxyLm1hc2tlZEJvdW5kc0J1ZmZlciYmci5tYXNrZWRJbmRleEJ1ZmZlciYmci5zZWdtZW50cylzLmRyYXcoaSxhLlRSSUFOR0xFUyxuLmlkLHIubWFza2VkQm91bmRzQnVmZmVyLHIubWFza2VkSW5kZXhCdWZmZXIsci5zZWdtZW50cyk7ZWxzZXt2YXIgcD1lLnJhc3RlckJvdW5kc0J1ZmZlcjtlLnJhc3RlckJvdW5kc1ZBTy5iaW5kKGkscyxwLFtdKSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRV9TVFJJUCwwLHAubGVuZ3RoKX19fWZ1bmN0aW9uIE1yKGUscixuKXt2YXIgaT1lLmNvbnRleHQsYT1pLmdsO2lmKHIuZGVtJiZyLmRlbS5sZXZlbCl7dmFyIG89ci5kZW0ubGV2ZWwuZGltLHM9ci5kZW0uZ2V0UGl4ZWxzKCk7aWYoaS5hY3RpdmVUZXh0dXJlLnNldChhLlRFWFRVUkUxKSxpLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLnNldCghMSksci5kZW1UZXh0dXJlPXIuZGVtVGV4dHVyZXx8ZS5nZXRUaWxlVGV4dHVyZShyLnRpbGVTaXplKSxyLmRlbVRleHR1cmUpe3ZhciBsPXIuZGVtVGV4dHVyZTtsLnVwZGF0ZShzLHtwcmVtdWx0aXBseTohMX0pLGwuYmluZChhLk5FQVJFU1QsYS5DTEFNUF9UT19FREdFKX1lbHNlIHIuZGVtVGV4dHVyZT1uZXcgeihpLHMsYS5SR0JBLHtwcmVtdWx0aXBseTohMX0pLHIuZGVtVGV4dHVyZS5iaW5kKGEuTkVBUkVTVCxhLkNMQU1QX1RPX0VER0UpO2kuYWN0aXZlVGV4dHVyZS5zZXQoYS5URVhUVVJFMCk7dmFyIGM9ci5mYm87aWYoIWMpe3ZhciB1PW5ldyB6KGkse3dpZHRoOm8saGVpZ2h0Om8sZGF0YTpudWxsfSxhLlJHQkEpO3UuYmluZChhLkxJTkVBUixhLkNMQU1QX1RPX0VER0UpLChjPXIuZmJvPWkuY3JlYXRlRnJhbWVidWZmZXIobyxvKSkuY29sb3JBdHRhY2htZW50LnNldCh1LnRleHR1cmUpfWkuYmluZEZyYW1lYnVmZmVyLnNldChjLmZyYW1lYnVmZmVyKSxpLnZpZXdwb3J0LnNldChbMCwwLG8sb10pO3ZhciBoPXQubWF0NC5jcmVhdGUoKTt0Lm1hdDQub3J0aG8oaCwwLHQuZGVmYXVsdCQ4LC10LmRlZmF1bHQkOCwwLDAsMSksdC5tYXQ0LnRyYW5zbGF0ZShoLGgsWzAsLXQuZGVmYXVsdCQ4LDBdKTt2YXIgZj1lLnVzZVByb2dyYW0oXCJoaWxsc2hhZGVQcmVwYXJlXCIpO2EudW5pZm9ybU1hdHJpeDRmdihmLnVuaWZvcm1zLnVfbWF0cml4LCExLGgpLGEudW5pZm9ybTFmKGYudW5pZm9ybXMudV96b29tLHIudGlsZUlELm92ZXJzY2FsZWRaKSxhLnVuaWZvcm0yZnYoZi51bmlmb3Jtcy51X2RpbWVuc2lvbixbMipvLDIqb10pLGEudW5pZm9ybTFpKGYudW5pZm9ybXMudV9pbWFnZSwxKSxhLnVuaWZvcm0xZihmLnVuaWZvcm1zLnVfbWF4em9vbSxuKTt2YXIgcD1lLnJhc3RlckJvdW5kc0J1ZmZlcjtlLnJhc3RlckJvdW5kc1ZBTy5iaW5kKGksZixwLFtdKSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRV9TVFJJUCwwLHAubGVuZ3RoKSxyLm5lZWRzSGlsbHNoYWRlUHJlcGFyZT0hMX19ZnVuY3Rpb24gU3IoZSxyLG4saSxvKXt2YXIgcz1pLnBhaW50LmdldChcInJhc3Rlci1mYWRlLWR1cmF0aW9uXCIpO2lmKHM+MCl7dmFyIGw9YS5ub3coKSxjPShsLWUudGltZUFkZGVkKS9zLHU9cj8obC1yLnRpbWVBZGRlZCkvczotMSxoPW4uZ2V0U291cmNlKCksZj1vLmNvdmVyaW5nWm9vbUxldmVsKHt0aWxlU2l6ZTpoLnRpbGVTaXplLHJvdW5kWm9vbTpoLnJvdW5kWm9vbX0pLHA9IXJ8fE1hdGguYWJzKHIudGlsZUlELm92ZXJzY2FsZWRaLWYpPk1hdGguYWJzKGUudGlsZUlELm92ZXJzY2FsZWRaLWYpLGQ9cCYmZS5yZWZyZXNoZWRVcG9uRXhwaXJhdGlvbj8xOnQuY2xhbXAocD9jOjEtdSwwLDEpO3JldHVybiBlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uJiZjPj0xJiYoZS5yZWZyZXNoZWRVcG9uRXhwaXJhdGlvbj0hMSkscj97b3BhY2l0eToxLG1peDoxLWR9OntvcGFjaXR5OmQsbWl4OjB9fXJldHVybntvcGFjaXR5OjEsbWl4OjB9fWZ1bmN0aW9uIEVyKGUscixuKXt2YXIgaT1lLmNvbnRleHQsbz1pLmdsO2kubGluZVdpZHRoLnNldCgxKmEuZGV2aWNlUGl4ZWxSYXRpbyk7dmFyIHM9bi5wb3NNYXRyaXgsbD1lLnVzZVByb2dyYW0oXCJkZWJ1Z1wiKTtpLnNldERlcHRoTW9kZShxdC5kaXNhYmxlZCksaS5zZXRTdGVuY2lsTW9kZShIdC5kaXNhYmxlZCksaS5zZXRDb2xvck1vZGUoZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpLG8udW5pZm9ybU1hdHJpeDRmdihsLnVuaWZvcm1zLnVfbWF0cml4LCExLHMpLG8udW5pZm9ybTRmKGwudW5pZm9ybXMudV9jb2xvciwxLDAsMCwxKSxlLmRlYnVnVkFPLmJpbmQoaSxsLGUuZGVidWdCdWZmZXIsW10pLG8uZHJhd0FycmF5cyhvLkxJTkVfU1RSSVAsMCxlLmRlYnVnQnVmZmVyLmxlbmd0aCk7Zm9yKHZhciBjPWZ1bmN0aW9uKHQsZSxyLG4pe249bnx8MTt2YXIgaSxhLG8scyxsLGMsdSxoLGY9W107Zm9yKGk9MCxhPXQubGVuZ3RoO2k8YTtpKyspaWYobD1Dclt0W2ldXSl7Zm9yKGg9bnVsbCxvPTAscz1sWzFdLmxlbmd0aDtvPHM7bys9MiktMT09PWxbMV1bb10mJi0xPT09bFsxXVtvKzFdP2g9bnVsbDooYz1lK2xbMV1bb10qbix1PTIwMC1sWzFdW28rMV0qbixoJiZmLnB1c2goaC54LGgueSxjLHUpLGg9e3g6Yyx5OnV9KTtlKz1sWzBdKm59cmV0dXJuIGZ9KG4udG9TdHJpbmcoKSw1MCwwLDUpLHU9bmV3IHQuUG9zQXJyYXksaD0wO2g8Yy5sZW5ndGg7aCs9Mil1LmVtcGxhY2VCYWNrKGNbaF0sY1toKzFdKTt2YXIgZj1pLmNyZWF0ZVZlcnRleEJ1ZmZlcih1LEtlLm1lbWJlcnMpOyhuZXcgUSkuYmluZChpLGwsZixbXSksby51bmlmb3JtNGYobC51bmlmb3Jtcy51X2NvbG9yLDEsMSwxLDEpO2Zvcih2YXIgcD1yLmdldFRpbGUobikudGlsZVNpemUsZD10LmRlZmF1bHQkOC8oTWF0aC5wb3coMixlLnRyYW5zZm9ybS56b29tLW4ub3ZlcnNjYWxlZFopKnApLGc9W1stMSwtMV0sWy0xLDFdLFsxLC0xXSxbMSwxXV0sdj0wO3Y8Zy5sZW5ndGg7disrKXt2YXIgbT1nW3ZdO28udW5pZm9ybU1hdHJpeDRmdihsLnVuaWZvcm1zLnVfbWF0cml4LCExLHQubWF0NC50cmFuc2xhdGUoW10scyxbZCptWzBdLGQqbVsxXSwwXSkpLG8uZHJhd0FycmF5cyhvLkxJTkVTLDAsZi5sZW5ndGgpfW8udW5pZm9ybTRmKGwudW5pZm9ybXMudV9jb2xvciwwLDAsMCwxKSxvLnVuaWZvcm1NYXRyaXg0ZnYobC51bmlmb3Jtcy51X21hdHJpeCwhMSxzKSxvLmRyYXdBcnJheXMoby5MSU5FUywwLGYubGVuZ3RoKX12YXIgQ3I9e1wiIFwiOlsxNixbXV0sXCIhXCI6WzEwLFs1LDIxLDUsNywtMSwtMSw1LDIsNCwxLDUsMCw2LDEsNSwyXV0sJ1wiJzpbMTYsWzQsMjEsNCwxNCwtMSwtMSwxMiwyMSwxMiwxNF1dLFwiI1wiOlsyMSxbMTEsMjUsNCwtNywtMSwtMSwxNywyNSwxMCwtNywtMSwtMSw0LDEyLDE4LDEyLC0xLC0xLDMsNiwxNyw2XV0sJDpbMjAsWzgsMjUsOCwtNCwtMSwtMSwxMiwyNSwxMiwtNCwtMSwtMSwxNywxOCwxNSwyMCwxMiwyMSw4LDIxLDUsMjAsMywxOCwzLDE2LDQsMTQsNSwxMyw3LDEyLDEzLDEwLDE1LDksMTYsOCwxNyw2LDE3LDMsMTUsMSwxMiwwLDgsMCw1LDEsMywzXV0sXCIlXCI6WzI0LFsyMSwyMSwzLDAsLTEsLTEsOCwyMSwxMCwxOSwxMCwxNyw5LDE1LDcsMTQsNSwxNCwzLDE2LDMsMTgsNCwyMCw2LDIxLDgsMjEsMTAsMjAsMTMsMTksMTYsMTksMTksMjAsMjEsMjEsLTEsLTEsMTcsNywxNSw2LDE0LDQsMTQsMiwxNiwwLDE4LDAsMjAsMSwyMSwzLDIxLDUsMTksNywxNyw3XV0sXCImXCI6WzI2LFsyMywxMiwyMywxMywyMiwxNCwyMSwxNCwyMCwxMywxOSwxMSwxNyw2LDE1LDMsMTMsMSwxMSwwLDcsMCw1LDEsNCwyLDMsNCwzLDYsNCw4LDUsOSwxMiwxMywxMywxNCwxNCwxNiwxNCwxOCwxMywyMCwxMSwyMSw5LDIwLDgsMTgsOCwxNiw5LDEzLDExLDEwLDE2LDMsMTgsMSwyMCwwLDIyLDAsMjMsMSwyMywyXV0sXCInXCI6WzEwLFs1LDE5LDQsMjAsNSwyMSw2LDIwLDYsMTgsNSwxNiw0LDE1XV0sXCIoXCI6WzE0LFsxMSwyNSw5LDIzLDcsMjAsNSwxNiw0LDExLDQsNyw1LDIsNywtMiw5LC01LDExLC03XV0sXCIpXCI6WzE0LFszLDI1LDUsMjMsNywyMCw5LDE2LDEwLDExLDEwLDcsOSwyLDcsLTIsNSwtNSwzLC03XV0sXCIqXCI6WzE2LFs4LDIxLDgsOSwtMSwtMSwzLDE4LDEzLDEyLC0xLC0xLDEzLDE4LDMsMTJdXSxcIitcIjpbMjYsWzEzLDE4LDEzLDAsLTEsLTEsNCw5LDIyLDldXSxcIixcIjpbMTAsWzYsMSw1LDAsNCwxLDUsMiw2LDEsNiwtMSw1LC0zLDQsLTRdXSxcIi1cIjpbMjYsWzQsOSwyMiw5XV0sXCIuXCI6WzEwLFs1LDIsNCwxLDUsMCw2LDEsNSwyXV0sXCIvXCI6WzIyLFsyMCwyNSwyLC03XV0sMDpbMjAsWzksMjEsNiwyMCw0LDE3LDMsMTIsMyw5LDQsNCw2LDEsOSwwLDExLDAsMTQsMSwxNiw0LDE3LDksMTcsMTIsMTYsMTcsMTQsMjAsMTEsMjEsOSwyMV1dLDE6WzIwLFs2LDE3LDgsMTgsMTEsMjEsMTEsMF1dLDI6WzIwLFs0LDE2LDQsMTcsNSwxOSw2LDIwLDgsMjEsMTIsMjEsMTQsMjAsMTUsMTksMTYsMTcsMTYsMTUsMTUsMTMsMTMsMTAsMywwLDE3LDBdXSwzOlsyMCxbNSwyMSwxNiwyMSwxMCwxMywxMywxMywxNSwxMiwxNiwxMSwxNyw4LDE3LDYsMTYsMywxNCwxLDExLDAsOCwwLDUsMSw0LDIsMyw0XV0sNDpbMjAsWzEzLDIxLDMsNywxOCw3LC0xLC0xLDEzLDIxLDEzLDBdXSw1OlsyMCxbMTUsMjEsNSwyMSw0LDEyLDUsMTMsOCwxNCwxMSwxNCwxNCwxMywxNiwxMSwxNyw4LDE3LDYsMTYsMywxNCwxLDExLDAsOCwwLDUsMSw0LDIsMyw0XV0sNjpbMjAsWzE2LDE4LDE1LDIwLDEyLDIxLDEwLDIxLDcsMjAsNSwxNyw0LDEyLDQsNyw1LDMsNywxLDEwLDAsMTEsMCwxNCwxLDE2LDMsMTcsNiwxNyw3LDE2LDEwLDE0LDEyLDExLDEzLDEwLDEzLDcsMTIsNSwxMCw0LDddXSw3OlsyMCxbMTcsMjEsNywwLC0xLC0xLDMsMjEsMTcsMjFdXSw4OlsyMCxbOCwyMSw1LDIwLDQsMTgsNCwxNiw1LDE0LDcsMTMsMTEsMTIsMTQsMTEsMTYsOSwxNyw3LDE3LDQsMTYsMiwxNSwxLDEyLDAsOCwwLDUsMSw0LDIsMyw0LDMsNyw0LDksNiwxMSw5LDEyLDEzLDEzLDE1LDE0LDE2LDE2LDE2LDE4LDE1LDIwLDEyLDIxLDgsMjFdXSw5OlsyMCxbMTYsMTQsMTUsMTEsMTMsOSwxMCw4LDksOCw2LDksNCwxMSwzLDE0LDMsMTUsNCwxOCw2LDIwLDksMjEsMTAsMjEsMTMsMjAsMTUsMTgsMTYsMTQsMTYsOSwxNSw0LDEzLDEsMTAsMCw4LDAsNSwxLDQsM11dLFwiOlwiOlsxMCxbNSwxNCw0LDEzLDUsMTIsNiwxMyw1LDE0LC0xLC0xLDUsMiw0LDEsNSwwLDYsMSw1LDJdXSxcIjtcIjpbMTAsWzUsMTQsNCwxMyw1LDEyLDYsMTMsNSwxNCwtMSwtMSw2LDEsNSwwLDQsMSw1LDIsNiwxLDYsLTEsNSwtMyw0LC00XV0sXCI8XCI6WzI0LFsyMCwxOCw0LDksMjAsMF1dLFwiPVwiOlsyNixbNCwxMiwyMiwxMiwtMSwtMSw0LDYsMjIsNl1dLFwiPlwiOlsyNCxbNCwxOCwyMCw5LDQsMF1dLFwiP1wiOlsxOCxbMywxNiwzLDE3LDQsMTksNSwyMCw3LDIxLDExLDIxLDEzLDIwLDE0LDE5LDE1LDE3LDE1LDE1LDE0LDEzLDEzLDEyLDksMTAsOSw3LC0xLC0xLDksMiw4LDEsOSwwLDEwLDEsOSwyXV0sXCJAXCI6WzI3LFsxOCwxMywxNywxNSwxNSwxNiwxMiwxNiwxMCwxNSw5LDE0LDgsMTEsOCw4LDksNiwxMSw1LDE0LDUsMTYsNiwxNyw4LC0xLC0xLDEyLDE2LDEwLDE0LDksMTEsOSw4LDEwLDYsMTEsNSwtMSwtMSwxOCwxNiwxNyw4LDE3LDYsMTksNSwyMSw1LDIzLDcsMjQsMTAsMjQsMTIsMjMsMTUsMjIsMTcsMjAsMTksMTgsMjAsMTUsMjEsMTIsMjEsOSwyMCw3LDE5LDUsMTcsNCwxNSwzLDEyLDMsOSw0LDYsNSw0LDcsMiw5LDEsMTIsMCwxNSwwLDE4LDEsMjAsMiwyMSwzLC0xLC0xLDE5LDE2LDE4LDgsMTgsNiwxOSw1XV0sQTpbMTgsWzksMjEsMSwwLC0xLC0xLDksMjEsMTcsMCwtMSwtMSw0LDcsMTQsN11dLEI6WzIxLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDEzLDIxLDE2LDIwLDE3LDE5LDE4LDE3LDE4LDE1LDE3LDEzLDE2LDEyLDEzLDExLC0xLC0xLDQsMTEsMTMsMTEsMTYsMTAsMTcsOSwxOCw3LDE4LDQsMTcsMiwxNiwxLDEzLDAsNCwwXV0sQzpbMjEsWzE4LDE2LDE3LDE4LDE1LDIwLDEzLDIxLDksMjEsNywyMCw1LDE4LDQsMTYsMywxMywzLDgsNCw1LDUsMyw3LDEsOSwwLDEzLDAsMTUsMSwxNywzLDE4LDVdXSxEOlsyMSxbNCwyMSw0LDAsLTEsLTEsNCwyMSwxMSwyMSwxNCwyMCwxNiwxOCwxNywxNiwxOCwxMywxOCw4LDE3LDUsMTYsMywxNCwxLDExLDAsNCwwXV0sRTpbMTksWzQsMjEsNCwwLC0xLC0xLDQsMjEsMTcsMjEsLTEsLTEsNCwxMSwxMiwxMSwtMSwtMSw0LDAsMTcsMF1dLEY6WzE4LFs0LDIxLDQsMCwtMSwtMSw0LDIxLDE3LDIxLC0xLC0xLDQsMTEsMTIsMTFdXSxHOlsyMSxbMTgsMTYsMTcsMTgsMTUsMjAsMTMsMjEsOSwyMSw3LDIwLDUsMTgsNCwxNiwzLDEzLDMsOCw0LDUsNSwzLDcsMSw5LDAsMTMsMCwxNSwxLDE3LDMsMTgsNSwxOCw4LC0xLC0xLDEzLDgsMTgsOF1dLEg6WzIyLFs0LDIxLDQsMCwtMSwtMSwxOCwyMSwxOCwwLC0xLC0xLDQsMTEsMTgsMTFdXSxJOls4LFs0LDIxLDQsMF1dLEo6WzE2LFsxMiwyMSwxMiw1LDExLDIsMTAsMSw4LDAsNiwwLDQsMSwzLDIsMiw1LDIsN11dLEs6WzIxLFs0LDIxLDQsMCwtMSwtMSwxOCwyMSw0LDcsLTEsLTEsOSwxMiwxOCwwXV0sTDpbMTcsWzQsMjEsNCwwLC0xLC0xLDQsMCwxNiwwXV0sTTpbMjQsWzQsMjEsNCwwLC0xLC0xLDQsMjEsMTIsMCwtMSwtMSwyMCwyMSwxMiwwLC0xLC0xLDIwLDIxLDIwLDBdXSxOOlsyMixbNCwyMSw0LDAsLTEsLTEsNCwyMSwxOCwwLC0xLC0xLDE4LDIxLDE4LDBdXSxPOlsyMixbOSwyMSw3LDIwLDUsMTgsNCwxNiwzLDEzLDMsOCw0LDUsNSwzLDcsMSw5LDAsMTMsMCwxNSwxLDE3LDMsMTgsNSwxOSw4LDE5LDEzLDE4LDE2LDE3LDE4LDE1LDIwLDEzLDIxLDksMjFdXSxQOlsyMSxbNCwyMSw0LDAsLTEsLTEsNCwyMSwxMywyMSwxNiwyMCwxNywxOSwxOCwxNywxOCwxNCwxNywxMiwxNiwxMSwxMywxMCw0LDEwXV0sUTpbMjIsWzksMjEsNywyMCw1LDE4LDQsMTYsMywxMywzLDgsNCw1LDUsMyw3LDEsOSwwLDEzLDAsMTUsMSwxNywzLDE4LDUsMTksOCwxOSwxMywxOCwxNiwxNywxOCwxNSwyMCwxMywyMSw5LDIxLC0xLC0xLDEyLDQsMTgsLTJdXSxSOlsyMSxbNCwyMSw0LDAsLTEsLTEsNCwyMSwxMywyMSwxNiwyMCwxNywxOSwxOCwxNywxOCwxNSwxNywxMywxNiwxMiwxMywxMSw0LDExLC0xLC0xLDExLDExLDE4LDBdXSxTOlsyMCxbMTcsMTgsMTUsMjAsMTIsMjEsOCwyMSw1LDIwLDMsMTgsMywxNiw0LDE0LDUsMTMsNywxMiwxMywxMCwxNSw5LDE2LDgsMTcsNiwxNywzLDE1LDEsMTIsMCw4LDAsNSwxLDMsM11dLFQ6WzE2LFs4LDIxLDgsMCwtMSwtMSwxLDIxLDE1LDIxXV0sVTpbMjIsWzQsMjEsNCw2LDUsMyw3LDEsMTAsMCwxMiwwLDE1LDEsMTcsMywxOCw2LDE4LDIxXV0sVjpbMTgsWzEsMjEsOSwwLC0xLC0xLDE3LDIxLDksMF1dLFc6WzI0LFsyLDIxLDcsMCwtMSwtMSwxMiwyMSw3LDAsLTEsLTEsMTIsMjEsMTcsMCwtMSwtMSwyMiwyMSwxNywwXV0sWDpbMjAsWzMsMjEsMTcsMCwtMSwtMSwxNywyMSwzLDBdXSxZOlsxOCxbMSwyMSw5LDExLDksMCwtMSwtMSwxNywyMSw5LDExXV0sWjpbMjAsWzE3LDIxLDMsMCwtMSwtMSwzLDIxLDE3LDIxLC0xLC0xLDMsMCwxNywwXV0sXCJbXCI6WzE0LFs0LDI1LDQsLTcsLTEsLTEsNSwyNSw1LC03LC0xLC0xLDQsMjUsMTEsMjUsLTEsLTEsNCwtNywxMSwtN11dLFwiXFxcXFwiOlsxNCxbMCwyMSwxNCwtM11dLFwiXVwiOlsxNCxbOSwyNSw5LC03LC0xLC0xLDEwLDI1LDEwLC03LC0xLC0xLDMsMjUsMTAsMjUsLTEsLTEsMywtNywxMCwtN11dLFwiXlwiOlsxNixbNiwxNSw4LDE4LDEwLDE1LC0xLC0xLDMsMTIsOCwxNywxMywxMiwtMSwtMSw4LDE3LDgsMF1dLF86WzE2LFswLC0yLDE2LC0yXV0sXCJgXCI6WzEwLFs2LDIxLDUsMjAsNCwxOCw0LDE2LDUsMTUsNiwxNiw1LDE3XV0sYTpbMTksWzE1LDE0LDE1LDAsLTEsLTEsMTUsMTEsMTMsMTMsMTEsMTQsOCwxNCw2LDEzLDQsMTEsMyw4LDMsNiw0LDMsNiwxLDgsMCwxMSwwLDEzLDEsMTUsM11dLGI6WzE5LFs0LDIxLDQsMCwtMSwtMSw0LDExLDYsMTMsOCwxNCwxMSwxNCwxMywxMywxNSwxMSwxNiw4LDE2LDYsMTUsMywxMywxLDExLDAsOCwwLDYsMSw0LDNdXSxjOlsxOCxbMTUsMTEsMTMsMTMsMTEsMTQsOCwxNCw2LDEzLDQsMTEsMyw4LDMsNiw0LDMsNiwxLDgsMCwxMSwwLDEzLDEsMTUsM11dLGQ6WzE5LFsxNSwyMSwxNSwwLC0xLC0xLDE1LDExLDEzLDEzLDExLDE0LDgsMTQsNiwxMyw0LDExLDMsOCwzLDYsNCwzLDYsMSw4LDAsMTEsMCwxMywxLDE1LDNdXSxlOlsxOCxbMyw4LDE1LDgsMTUsMTAsMTQsMTIsMTMsMTMsMTEsMTQsOCwxNCw2LDEzLDQsMTEsMyw4LDMsNiw0LDMsNiwxLDgsMCwxMSwwLDEzLDEsMTUsM11dLGY6WzEyLFsxMCwyMSw4LDIxLDYsMjAsNSwxNyw1LDAsLTEsLTEsMiwxNCw5LDE0XV0sZzpbMTksWzE1LDE0LDE1LC0yLDE0LC01LDEzLC02LDExLC03LDgsLTcsNiwtNiwtMSwtMSwxNSwxMSwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0saDpbMTksWzQsMjEsNCwwLC0xLC0xLDQsMTAsNywxMyw5LDE0LDEyLDE0LDE0LDEzLDE1LDEwLDE1LDBdXSxpOls4LFszLDIxLDQsMjAsNSwyMSw0LDIyLDMsMjEsLTEsLTEsNCwxNCw0LDBdXSxqOlsxMCxbNSwyMSw2LDIwLDcsMjEsNiwyMiw1LDIxLC0xLC0xLDYsMTQsNiwtMyw1LC02LDMsLTcsMSwtN11dLGs6WzE3LFs0LDIxLDQsMCwtMSwtMSwxNCwxNCw0LDQsLTEsLTEsOCw4LDE1LDBdXSxsOls4LFs0LDIxLDQsMF1dLG06WzMwLFs0LDE0LDQsMCwtMSwtMSw0LDEwLDcsMTMsOSwxNCwxMiwxNCwxNCwxMywxNSwxMCwxNSwwLC0xLC0xLDE1LDEwLDE4LDEzLDIwLDE0LDIzLDE0LDI1LDEzLDI2LDEwLDI2LDBdXSxuOlsxOSxbNCwxNCw0LDAsLTEsLTEsNCwxMCw3LDEzLDksMTQsMTIsMTQsMTQsMTMsMTUsMTAsMTUsMF1dLG86WzE5LFs4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzLDE2LDYsMTYsOCwxNSwxMSwxMywxMywxMSwxNCw4LDE0XV0scDpbMTksWzQsMTQsNCwtNywtMSwtMSw0LDExLDYsMTMsOCwxNCwxMSwxNCwxMywxMywxNSwxMSwxNiw4LDE2LDYsMTUsMywxMywxLDExLDAsOCwwLDYsMSw0LDNdXSxxOlsxOSxbMTUsMTQsMTUsLTcsLTEsLTEsMTUsMTEsMTMsMTMsMTEsMTQsOCwxNCw2LDEzLDQsMTEsMyw4LDMsNiw0LDMsNiwxLDgsMCwxMSwwLDEzLDEsMTUsM11dLHI6WzEzLFs0LDE0LDQsMCwtMSwtMSw0LDgsNSwxMSw3LDEzLDksMTQsMTIsMTRdXSxzOlsxNyxbMTQsMTEsMTMsMTMsMTAsMTQsNywxNCw0LDEzLDMsMTEsNCw5LDYsOCwxMSw3LDEzLDYsMTQsNCwxNCwzLDEzLDEsMTAsMCw3LDAsNCwxLDMsM11dLHQ6WzEyLFs1LDIxLDUsNCw2LDEsOCwwLDEwLDAsLTEsLTEsMiwxNCw5LDE0XV0sdTpbMTksWzQsMTQsNCw0LDUsMSw3LDAsMTAsMCwxMiwxLDE1LDQsLTEsLTEsMTUsMTQsMTUsMF1dLHY6WzE2LFsyLDE0LDgsMCwtMSwtMSwxNCwxNCw4LDBdXSx3OlsyMixbMywxNCw3LDAsLTEsLTEsMTEsMTQsNywwLC0xLC0xLDExLDE0LDE1LDAsLTEsLTEsMTksMTQsMTUsMF1dLHg6WzE3LFszLDE0LDE0LDAsLTEsLTEsMTQsMTQsMywwXV0seTpbMTYsWzIsMTQsOCwwLC0xLC0xLDE0LDE0LDgsMCw2LC00LDQsLTYsMiwtNywxLC03XV0sejpbMTcsWzE0LDE0LDMsMCwtMSwtMSwzLDE0LDE0LDE0LC0xLC0xLDMsMCwxNCwwXV0sXCJ7XCI6WzE0LFs5LDI1LDcsMjQsNiwyMyw1LDIxLDUsMTksNiwxNyw3LDE2LDgsMTQsOCwxMiw2LDEwLC0xLC0xLDcsMjQsNiwyMiw2LDIwLDcsMTgsOCwxNyw5LDE1LDksMTMsOCwxMSw0LDksOCw3LDksNSw5LDMsOCwxLDcsMCw2LC0yLDYsLTQsNywtNiwtMSwtMSw2LDgsOCw2LDgsNCw3LDIsNiwxLDUsLTEsNSwtMyw2LC01LDcsLTYsOSwtN11dLFwifFwiOls4LFs0LDI1LDQsLTddXSxcIn1cIjpbMTQsWzUsMjUsNywyNCw4LDIzLDksMjEsOSwxOSw4LDE3LDcsMTYsNiwxNCw2LDEyLDgsMTAsLTEsLTEsNywyNCw4LDIyLDgsMjAsNywxOCw2LDE3LDUsMTUsNSwxMyw2LDExLDEwLDksNiw3LDUsNSw1LDMsNiwxLDcsMCw4LC0yLDgsLTQsNywtNiwtMSwtMSw4LDgsNiw2LDYsNCw3LDIsOCwxLDksLTEsOSwtMyw4LC01LDcsLTYsNSwtN11dLFwiflwiOlsyNCxbMyw2LDMsOCw0LDExLDYsMTIsOCwxMiwxMCwxMSwxNCw4LDE2LDcsMTgsNywyMCw4LDIxLDEwLC0xLC0xLDMsOCw0LDEwLDYsMTEsOCwxMSwxMCwxMCwxNCw3LDE2LDYsMTgsNiwyMCw3LDIxLDEwLDIxLDEyXV19LExyPXtzeW1ib2w6ZnVuY3Rpb24odCxlLHIsbil7aWYoXCJ0cmFuc2x1Y2VudFwiPT09dC5yZW5kZXJQYXNzKXt2YXIgaT10LmNvbnRleHQ7aS5zZXRTdGVuY2lsTW9kZShIdC5kaXNhYmxlZCksaS5zZXRDb2xvck1vZGUodC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpLDAhPT1yLnBhaW50LmdldChcImljb24tb3BhY2l0eVwiKS5jb25zdGFudE9yKDEpJiZjcih0LGUscixuLCExLHIucGFpbnQuZ2V0KFwiaWNvbi10cmFuc2xhdGVcIiksci5wYWludC5nZXQoXCJpY29uLXRyYW5zbGF0ZS1hbmNob3JcIiksci5sYXlvdXQuZ2V0KFwiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnRcIiksci5sYXlvdXQuZ2V0KFwiaWNvbi1waXRjaC1hbGlnbm1lbnRcIiksci5sYXlvdXQuZ2V0KFwiaWNvbi1rZWVwLXVwcmlnaHRcIikpLDAhPT1yLnBhaW50LmdldChcInRleHQtb3BhY2l0eVwiKS5jb25zdGFudE9yKDEpJiZjcih0LGUscixuLCEwLHIucGFpbnQuZ2V0KFwidGV4dC10cmFuc2xhdGVcIiksci5wYWludC5nZXQoXCJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3JcIiksci5sYXlvdXQuZ2V0KFwidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnRcIiksci5sYXlvdXQuZ2V0KFwidGV4dC1waXRjaC1hbGlnbm1lbnRcIiksci5sYXlvdXQuZ2V0KFwidGV4dC1rZWVwLXVwcmlnaHRcIikpLGUubWFwLnNob3dDb2xsaXNpb25Cb3hlcyYmZnVuY3Rpb24odCxlLHIsbil7b3IodCxlLHIsbiwhMSksb3IodCxlLHIsbiwhMCl9KHQsZSxyLG4pfX0sY2lyY2xlOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKFwidHJhbnNsdWNlbnRcIj09PXQucmVuZGVyUGFzcyl7dmFyIGk9ci5wYWludC5nZXQoXCJjaXJjbGUtb3BhY2l0eVwiKSxhPXIucGFpbnQuZ2V0KFwiY2lyY2xlLXN0cm9rZS13aWR0aFwiKSxvPXIucGFpbnQuZ2V0KFwiY2lyY2xlLXN0cm9rZS1vcGFjaXR5XCIpO2lmKDAhPT1pLmNvbnN0YW50T3IoMSl8fDAhPT1hLmNvbnN0YW50T3IoMSkmJjAhPT1vLmNvbnN0YW50T3IoMSkpe3ZhciBzPXQuY29udGV4dCxsPXMuZ2w7cy5zZXREZXB0aE1vZGUodC5kZXB0aE1vZGVGb3JTdWJsYXllcigwLHF0LlJlYWRPbmx5KSkscy5zZXRTdGVuY2lsTW9kZShIdC5kaXNhYmxlZCkscy5zZXRDb2xvck1vZGUodC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpO2Zvcih2YXIgYz0hMCx1PTA7dTxuLmxlbmd0aDt1Kyspe3ZhciBoPW5bdV0sZj1lLmdldFRpbGUoaCkscD1mLmdldEJ1Y2tldChyKTtpZihwKXt2YXIgZD10LmNvbnRleHQucHJvZ3JhbS5nZXQoKSxnPXAucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChyLmlkKSx2PXQudXNlUHJvZ3JhbShcImNpcmNsZVwiLGcpO2lmKChjfHx2LnByb2dyYW0hPT1kKSYmKGcuc2V0VW5pZm9ybXMocyx2LHIucGFpbnQse3pvb206dC50cmFuc2Zvcm0uem9vbX0pLGM9ITEpLGwudW5pZm9ybTFmKHYudW5pZm9ybXMudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlLHQudHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UpLGwudW5pZm9ybTFpKHYudW5pZm9ybXMudV9zY2FsZV93aXRoX21hcCxcIm1hcFwiPT09ci5wYWludC5nZXQoXCJjaXJjbGUtcGl0Y2gtc2NhbGVcIik/MTowKSxcIm1hcFwiPT09ci5wYWludC5nZXQoXCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50XCIpKXtsLnVuaWZvcm0xaSh2LnVuaWZvcm1zLnVfcGl0Y2hfd2l0aF9tYXAsMSk7dmFyIG09TWUoZiwxLHQudHJhbnNmb3JtLnpvb20pO2wudW5pZm9ybTJmKHYudW5pZm9ybXMudV9leHRydWRlX3NjYWxlLG0sbSl9ZWxzZSBsLnVuaWZvcm0xaSh2LnVuaWZvcm1zLnVfcGl0Y2hfd2l0aF9tYXAsMCksbC51bmlmb3JtMmZ2KHYudW5pZm9ybXMudV9leHRydWRlX3NjYWxlLHQudHJhbnNmb3JtLnBpeGVsc1RvR0xVbml0cyk7bC51bmlmb3JtTWF0cml4NGZ2KHYudW5pZm9ybXMudV9tYXRyaXgsITEsdC50cmFuc2xhdGVQb3NNYXRyaXgoaC5wb3NNYXRyaXgsZixyLnBhaW50LmdldChcImNpcmNsZS10cmFuc2xhdGVcIiksci5wYWludC5nZXQoXCJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvclwiKSkpLHYuZHJhdyhzLGwuVFJJQU5HTEVTLHIuaWQscC5sYXlvdXRWZXJ0ZXhCdWZmZXIscC5pbmRleEJ1ZmZlcixwLnNlZ21lbnRzLGcpfX19fX0saGVhdG1hcDpmdW5jdGlvbihlLHIsbixpKXtpZigwIT09bi5wYWludC5nZXQoXCJoZWF0bWFwLW9wYWNpdHlcIikpaWYoXCJvZmZzY3JlZW5cIj09PWUucmVuZGVyUGFzcyl7dmFyIGE9ZS5jb250ZXh0LG89YS5nbDthLnNldERlcHRoTW9kZShlLmRlcHRoTW9kZUZvclN1YmxheWVyKDAscXQuUmVhZE9ubHkpKSxhLnNldFN0ZW5jaWxNb2RlKEh0LmRpc2FibGVkKSxmdW5jdGlvbih0LGUscil7dmFyIG49dC5nbDt0LmFjdGl2ZVRleHR1cmUuc2V0KG4uVEVYVFVSRTEpLHQudmlld3BvcnQuc2V0KFswLDAsZS53aWR0aC80LGUuaGVpZ2h0LzRdKTt2YXIgaT1yLmhlYXRtYXBGYm87aWYoaSluLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCxpLmNvbG9yQXR0YWNobWVudC5nZXQoKSksdC5iaW5kRnJhbWVidWZmZXIuc2V0KGkuZnJhbWVidWZmZXIpO2Vsc2V7dmFyIGE9bi5jcmVhdGVUZXh0dXJlKCk7bi5iaW5kVGV4dHVyZShuLlRFWFRVUkVfMkQsYSksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9TLG4uQ0xBTVBfVE9fRURHRSksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9ULG4uQ0xBTVBfVE9fRURHRSksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfTUlOX0ZJTFRFUixuLkxJTkVBUiksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfTUFHX0ZJTFRFUixuLkxJTkVBUiksaT1yLmhlYXRtYXBGYm89dC5jcmVhdGVGcmFtZWJ1ZmZlcihlLndpZHRoLzQsZS5oZWlnaHQvNCksZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgYT1lLmdsO2EudGV4SW1hZ2UyRChhLlRFWFRVUkVfMkQsMCxhLlJHQkEsci53aWR0aC80LHIuaGVpZ2h0LzQsMCxhLlJHQkEsZS5leHRUZXh0dXJlSGFsZkZsb2F0P2UuZXh0VGV4dHVyZUhhbGZGbG9hdC5IQUxGX0ZMT0FUX09FUzphLlVOU0lHTkVEX0JZVEUsbnVsbCksaS5jb2xvckF0dGFjaG1lbnQuc2V0KG4pLGUuZXh0VGV4dHVyZUhhbGZGbG9hdCYmYS5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGEuRlJBTUVCVUZGRVIpIT09YS5GUkFNRUJVRkZFUl9DT01QTEVURSYmKGUuZXh0VGV4dHVyZUhhbGZGbG9hdD1udWxsLGkuY29sb3JBdHRhY2htZW50LnNldERpcnR5KCksdChlLHIsbixpKSl9KHQsZSxhLGkpfX0oYSxlLG4pLGEuY2xlYXIoe2NvbG9yOnQuZGVmYXVsdCQ2LnRyYW5zcGFyZW50fSksYS5zZXRDb2xvck1vZGUobmV3IEd0KFtvLk9ORSxvLk9ORV0sdC5kZWZhdWx0JDYudHJhbnNwYXJlbnQsWyEwLCEwLCEwLCEwXSkpO2Zvcih2YXIgcz0hMCxsPTA7bDxpLmxlbmd0aDtsKyspe3ZhciBjPWlbbF07aWYoIXIuaGFzUmVuZGVyYWJsZVBhcmVudChjKSl7dmFyIHU9ci5nZXRUaWxlKGMpLGg9dS5nZXRCdWNrZXQobik7aWYoaCl7dmFyIGY9ZS5jb250ZXh0LnByb2dyYW0uZ2V0KCkscD1oLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQobi5pZCksZD1lLnVzZVByb2dyYW0oXCJoZWF0bWFwXCIscCksZz1lLnRyYW5zZm9ybS56b29tOyhzfHxkLnByb2dyYW0hPT1mKSYmKHAuc2V0VW5pZm9ybXMoZS5jb250ZXh0LGQsbi5wYWludCx7em9vbTpnfSkscz0hMSksby51bmlmb3JtMWYoZC51bmlmb3Jtcy51X2V4dHJ1ZGVfc2NhbGUsTWUodSwxLGcpKSxvLnVuaWZvcm0xZihkLnVuaWZvcm1zLnVfaW50ZW5zaXR5LG4ucGFpbnQuZ2V0KFwiaGVhdG1hcC1pbnRlbnNpdHlcIikpLG8udW5pZm9ybU1hdHJpeDRmdihkLnVuaWZvcm1zLnVfbWF0cml4LCExLGMucG9zTWF0cml4KSxkLmRyYXcoYSxvLlRSSUFOR0xFUyxuLmlkLGgubGF5b3V0VmVydGV4QnVmZmVyLGguaW5kZXhCdWZmZXIsaC5zZWdtZW50cyxwKX19fWEudmlld3BvcnQuc2V0KFswLDAsZS53aWR0aCxlLmhlaWdodF0pfWVsc2VcInRyYW5zbHVjZW50XCI9PT1lLnJlbmRlclBhc3MmJihlLmNvbnRleHQuc2V0Q29sb3JNb2RlKGUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKSxmdW5jdGlvbihlLHIpe3ZhciBuPWUuY29udGV4dCxpPW4uZ2wsYT1yLmhlYXRtYXBGYm87aWYoYSl7bi5hY3RpdmVUZXh0dXJlLnNldChpLlRFWFRVUkUwKSxpLmJpbmRUZXh0dXJlKGkuVEVYVFVSRV8yRCxhLmNvbG9yQXR0YWNobWVudC5nZXQoKSksbi5hY3RpdmVUZXh0dXJlLnNldChpLlRFWFRVUkUxKTt2YXIgbz1yLmNvbG9yUmFtcFRleHR1cmU7b3x8KG89ci5jb2xvclJhbXBUZXh0dXJlPW5ldyB6KG4sci5jb2xvclJhbXAsaS5SR0JBKSksby5iaW5kKGkuTElORUFSLGkuQ0xBTVBfVE9fRURHRSksbi5zZXREZXB0aE1vZGUocXQuZGlzYWJsZWQpO3ZhciBzPWUudXNlUHJvZ3JhbShcImhlYXRtYXBUZXh0dXJlXCIpLGw9ci5wYWludC5nZXQoXCJoZWF0bWFwLW9wYWNpdHlcIik7aS51bmlmb3JtMWYocy51bmlmb3Jtcy51X29wYWNpdHksbCksaS51bmlmb3JtMWkocy51bmlmb3Jtcy51X2ltYWdlLDApLGkudW5pZm9ybTFpKHMudW5pZm9ybXMudV9jb2xvcl9yYW1wLDEpO3ZhciBjPXQubWF0NC5jcmVhdGUoKTt0Lm1hdDQub3J0aG8oYywwLGUud2lkdGgsZS5oZWlnaHQsMCwwLDEpLGkudW5pZm9ybU1hdHJpeDRmdihzLnVuaWZvcm1zLnVfbWF0cml4LCExLGMpLGkudW5pZm9ybTJmKHMudW5pZm9ybXMudV93b3JsZCxpLmRyYXdpbmdCdWZmZXJXaWR0aCxpLmRyYXdpbmdCdWZmZXJIZWlnaHQpLGUudmlld3BvcnRWQU8uYmluZChlLmNvbnRleHQscyxlLnZpZXdwb3J0QnVmZmVyLFtdKSxpLmRyYXdBcnJheXMoaS5UUklBTkdMRV9TVFJJUCwwLDQpfX0oZSxuKSl9LGxpbmU6ZnVuY3Rpb24odCxlLHIsbil7aWYoXCJ0cmFuc2x1Y2VudFwiPT09dC5yZW5kZXJQYXNzJiYwIT09ci5wYWludC5nZXQoXCJsaW5lLW9wYWNpdHlcIikuY29uc3RhbnRPcigxKSl7dmFyIGk9dC5jb250ZXh0O2kuc2V0RGVwdGhNb2RlKHQuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCxxdC5SZWFkT25seSkpLGkuc2V0Q29sb3JNb2RlKHQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKTtmb3IodmFyIGEsbz1yLnBhaW50LmdldChcImxpbmUtZGFzaGFycmF5XCIpP1wibGluZVNERlwiOnIucGFpbnQuZ2V0KFwibGluZS1wYXR0ZXJuXCIpP1wibGluZVBhdHRlcm5cIjpyLnBhaW50LmdldChcImxpbmUtZ3JhZGllbnRcIik/XCJsaW5lR3JhZGllbnRcIjpcImxpbmVcIixzPSEwLGw9MCxjPW47bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdLGg9ZS5nZXRUaWxlKHUpLGY9aC5nZXRCdWNrZXQocik7aWYoZil7dmFyIHA9Zi5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KHIuaWQpLGQ9dC5jb250ZXh0LnByb2dyYW0uZ2V0KCksZz10LnVzZVByb2dyYW0obyxwKSx2PXN8fGcucHJvZ3JhbSE9PWQsbT1hIT09aC50aWxlSUQub3ZlcnNjYWxlZFo7diYmcC5zZXRVbmlmb3Jtcyh0LmNvbnRleHQsZyxyLnBhaW50LHt6b29tOnQudHJhbnNmb3JtLnpvb219KSxwcihnLHQsaCxmLHIsdSxwLHYsbSksYT1oLnRpbGVJRC5vdmVyc2NhbGVkWixzPSExfX19fSxmaWxsOmZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPW4ucGFpbnQuZ2V0KFwiZmlsbC1jb2xvclwiKSxvPW4ucGFpbnQuZ2V0KFwiZmlsbC1vcGFjaXR5XCIpO2lmKDAhPT1vLmNvbnN0YW50T3IoMSkpe3ZhciBzPWUuY29udGV4dDtzLnNldENvbG9yTW9kZShlLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSk7dmFyIGw9bi5wYWludC5nZXQoXCJmaWxsLXBhdHRlcm5cIil8fDEhPT1hLmNvbnN0YW50T3IodC5kZWZhdWx0JDYudHJhbnNwYXJlbnQpLmF8fDEhPT1vLmNvbnN0YW50T3IoMCk/XCJ0cmFuc2x1Y2VudFwiOlwib3BhcXVlXCI7ZS5yZW5kZXJQYXNzPT09bCYmKHMuc2V0RGVwdGhNb2RlKGUuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMSxcIm9wYXF1ZVwiPT09ZS5yZW5kZXJQYXNzP3F0LlJlYWRXcml0ZTpxdC5SZWFkT25seSkpLG1yKGUscixuLGkseXIpKSxcInRyYW5zbHVjZW50XCI9PT1lLnJlbmRlclBhc3MmJm4ucGFpbnQuZ2V0KFwiZmlsbC1hbnRpYWxpYXNcIikmJihzLmxpbmVXaWR0aC5zZXQoMikscy5zZXREZXB0aE1vZGUoZS5kZXB0aE1vZGVGb3JTdWJsYXllcihuLmdldFBhaW50UHJvcGVydHkoXCJmaWxsLW91dGxpbmUtY29sb3JcIik/MjowLHF0LlJlYWRPbmx5KSksbXIoZSxyLG4saSx4cikpfX0sXCJmaWxsLWV4dHJ1c2lvblwiOmZ1bmN0aW9uKGUscixuLGkpe2lmKDAhPT1uLnBhaW50LmdldChcImZpbGwtZXh0cnVzaW9uLW9wYWNpdHlcIikpaWYoXCJvZmZzY3JlZW5cIj09PWUucmVuZGVyUGFzcyl7IWZ1bmN0aW9uKGUscil7dmFyIG49ZS5jb250ZXh0LGk9bi5nbCxhPXIudmlld3BvcnRGcmFtZTtpZihlLmRlcHRoUmJvTmVlZHNDbGVhciYmZS5zZXR1cE9mZnNjcmVlbkRlcHRoUmVuZGVyYnVmZmVyKCksIWEpe3ZhciBvPW5ldyB6KG4se3dpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0LGRhdGE6bnVsbH0saS5SR0JBKTtvLmJpbmQoaS5MSU5FQVIsaS5DTEFNUF9UT19FREdFKSwoYT1yLnZpZXdwb3J0RnJhbWU9bi5jcmVhdGVGcmFtZWJ1ZmZlcihlLndpZHRoLGUuaGVpZ2h0KSkuY29sb3JBdHRhY2htZW50LnNldChvLnRleHR1cmUpfW4uYmluZEZyYW1lYnVmZmVyLnNldChhLmZyYW1lYnVmZmVyKSxhLmRlcHRoQXR0YWNobWVudC5zZXQoZS5kZXB0aFJibyksZS5kZXB0aFJib05lZWRzQ2xlYXImJihuLmNsZWFyKHtkZXB0aDoxfSksZS5kZXB0aFJib05lZWRzQ2xlYXI9ITEpLG4uY2xlYXIoe2NvbG9yOnQuZGVmYXVsdCQ2LnRyYW5zcGFyZW50fSksbi5zZXRTdGVuY2lsTW9kZShIdC5kaXNhYmxlZCksbi5zZXREZXB0aE1vZGUobmV3IHF0KGkuTEVRVUFMLHF0LlJlYWRXcml0ZSxbMCwxXSkpLG4uc2V0Q29sb3JNb2RlKGUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKX0oZSxuKTtmb3IodmFyIGE9ITAsbz0wLHM9aTtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb10sYz1yLmdldFRpbGUobCksdT1jLmdldEJ1Y2tldChuKTt1JiYoQXIoZSwwLG4sYyxsLHUsYSksYT0hMSl9fWVsc2VcInRyYW5zbHVjZW50XCI9PT1lLnJlbmRlclBhc3MmJmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS52aWV3cG9ydEZyYW1lO2lmKHIpe3ZhciBuPXQuY29udGV4dCxpPW4uZ2wsYT10LnVzZVByb2dyYW0oXCJleHRydXNpb25UZXh0dXJlXCIpO24uc2V0U3RlbmNpbE1vZGUoSHQuZGlzYWJsZWQpLG4uc2V0RGVwdGhNb2RlKHF0LmRpc2FibGVkKSxuLnNldENvbG9yTW9kZSh0LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSksbi5hY3RpdmVUZXh0dXJlLnNldChpLlRFWFRVUkUwKSxpLmJpbmRUZXh0dXJlKGkuVEVYVFVSRV8yRCxyLmNvbG9yQXR0YWNobWVudC5nZXQoKSksaS51bmlmb3JtMWYoYS51bmlmb3Jtcy51X29wYWNpdHksZS5wYWludC5nZXQoXCJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5XCIpKSxpLnVuaWZvcm0xaShhLnVuaWZvcm1zLnVfaW1hZ2UsMCk7dmFyIG89d3IuY3JlYXRlKCk7d3Iub3J0aG8obywwLHQud2lkdGgsdC5oZWlnaHQsMCwwLDEpLGkudW5pZm9ybU1hdHJpeDRmdihhLnVuaWZvcm1zLnVfbWF0cml4LCExLG8pLGkudW5pZm9ybTJmKGEudW5pZm9ybXMudV93b3JsZCxpLmRyYXdpbmdCdWZmZXJXaWR0aCxpLmRyYXdpbmdCdWZmZXJIZWlnaHQpLHQudmlld3BvcnRWQU8uYmluZChuLGEsdC52aWV3cG9ydEJ1ZmZlcixbXSksaS5kcmF3QXJyYXlzKGkuVFJJQU5HTEVfU1RSSVAsMCw0KX19KGUsbil9LGhpbGxzaGFkZTpmdW5jdGlvbih0LGUscixuKXtpZihcIm9mZnNjcmVlblwiPT09dC5yZW5kZXJQYXNzfHxcInRyYW5zbHVjZW50XCI9PT10LnJlbmRlclBhc3Mpe3ZhciBpPXQuY29udGV4dCxhPWUuZ2V0U291cmNlKCkubWF4em9vbTtpLnNldERlcHRoTW9kZSh0LmRlcHRoTW9kZUZvclN1YmxheWVyKDAscXQuUmVhZE9ubHkpKSxpLnNldFN0ZW5jaWxNb2RlKEh0LmRpc2FibGVkKSxpLnNldENvbG9yTW9kZSh0LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSk7Zm9yKHZhciBvPTAscz1uO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXSxjPWUuZ2V0VGlsZShsKTtjLm5lZWRzSGlsbHNoYWRlUHJlcGFyZSYmXCJvZmZzY3JlZW5cIj09PXQucmVuZGVyUGFzcz9Ncih0LGMsYSk6XCJ0cmFuc2x1Y2VudFwiPT09dC5yZW5kZXJQYXNzJiZUcih0LGMscil9aS52aWV3cG9ydC5zZXQoWzAsMCx0LndpZHRoLHQuaGVpZ2h0XSl9fSxyYXN0ZXI6ZnVuY3Rpb24odCxlLHIsbil7aWYoXCJ0cmFuc2x1Y2VudFwiPT09dC5yZW5kZXJQYXNzJiYwIT09ci5wYWludC5nZXQoXCJyYXN0ZXItb3BhY2l0eVwiKSl7dmFyIGksYSxvPXQuY29udGV4dCxzPW8uZ2wsbD1lLmdldFNvdXJjZSgpLGM9dC51c2VQcm9ncmFtKFwicmFzdGVyXCIpO28uc2V0U3RlbmNpbE1vZGUoSHQuZGlzYWJsZWQpLG8uc2V0Q29sb3JNb2RlKHQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKSxzLnVuaWZvcm0xZihjLnVuaWZvcm1zLnVfYnJpZ2h0bmVzc19sb3csci5wYWludC5nZXQoXCJyYXN0ZXItYnJpZ2h0bmVzcy1taW5cIikpLHMudW5pZm9ybTFmKGMudW5pZm9ybXMudV9icmlnaHRuZXNzX2hpZ2gsci5wYWludC5nZXQoXCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXhcIikpLHMudW5pZm9ybTFmKGMudW5pZm9ybXMudV9zYXR1cmF0aW9uX2ZhY3RvciwoaT1yLnBhaW50LmdldChcInJhc3Rlci1zYXR1cmF0aW9uXCIpKT4wPzEtMS8oMS4wMDEtaSk6LWkpLHMudW5pZm9ybTFmKGMudW5pZm9ybXMudV9jb250cmFzdF9mYWN0b3IsKGE9ci5wYWludC5nZXQoXCJyYXN0ZXItY29udHJhc3RcIikpPjA/MS8oMS1hKToxK2EpLHMudW5pZm9ybTNmdihjLnVuaWZvcm1zLnVfc3Bpbl93ZWlnaHRzLGZ1bmN0aW9uKHQpe3QqPU1hdGguUEkvMTgwO3ZhciBlPU1hdGguc2luKHQpLHI9TWF0aC5jb3ModCk7cmV0dXJuWygyKnIrMSkvMywoLU1hdGguc3FydCgzKSplLXIrMSkvMywoTWF0aC5zcXJ0KDMpKmUtcisxKS8zXX0oci5wYWludC5nZXQoXCJyYXN0ZXItaHVlLXJvdGF0ZVwiKSkpLHMudW5pZm9ybTFmKGMudW5pZm9ybXMudV9idWZmZXJfc2NhbGUsMSkscy51bmlmb3JtMWkoYy51bmlmb3Jtcy51X2ltYWdlMCwwKSxzLnVuaWZvcm0xaShjLnVuaWZvcm1zLnVfaW1hZ2UxLDEpO2Zvcih2YXIgdT1uLmxlbmd0aCYmblswXS5vdmVyc2NhbGVkWixoPTAsZj1uO2g8Zi5sZW5ndGg7aCs9MSl7dmFyIHA9ZltoXTtvLnNldERlcHRoTW9kZSh0LmRlcHRoTW9kZUZvclN1YmxheWVyKHAub3ZlcnNjYWxlZFotdSwxPT09ci5wYWludC5nZXQoXCJyYXN0ZXItb3BhY2l0eVwiKT9xdC5SZWFkV3JpdGU6cXQuUmVhZE9ubHkscy5MRVNTKSk7dmFyIGQ9ZS5nZXRUaWxlKHApLGc9dC50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KHAudG9VbndyYXBwZWQoKSwhMCk7ZC5yZWdpc3RlckZhZGVEdXJhdGlvbihyLnBhaW50LmdldChcInJhc3Rlci1mYWRlLWR1cmF0aW9uXCIpKSxzLnVuaWZvcm1NYXRyaXg0ZnYoYy51bmlmb3Jtcy51X21hdHJpeCwhMSxnKTt2YXIgdj1lLmZpbmRMb2FkZWRQYXJlbnQocCwwLHt9KSxtPVNyKGQsdixlLHIsdC50cmFuc2Zvcm0pLHk9dm9pZCAwLHg9dm9pZCAwO2lmKG8uYWN0aXZlVGV4dHVyZS5zZXQocy5URVhUVVJFMCksZC50ZXh0dXJlLmJpbmQocy5MSU5FQVIscy5DTEFNUF9UT19FREdFLHMuTElORUFSX01JUE1BUF9ORUFSRVNUKSxvLmFjdGl2ZVRleHR1cmUuc2V0KHMuVEVYVFVSRTEpLHY/KHYudGV4dHVyZS5iaW5kKHMuTElORUFSLHMuQ0xBTVBfVE9fRURHRSxzLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCkseT1NYXRoLnBvdygyLHYudGlsZUlELm92ZXJzY2FsZWRaLWQudGlsZUlELm92ZXJzY2FsZWRaKSx4PVtkLnRpbGVJRC5jYW5vbmljYWwueCp5JTEsZC50aWxlSUQuY2Fub25pY2FsLnkqeSUxXSk6ZC50ZXh0dXJlLmJpbmQocy5MSU5FQVIscy5DTEFNUF9UT19FREdFLHMuTElORUFSX01JUE1BUF9ORUFSRVNUKSxzLnVuaWZvcm0yZnYoYy51bmlmb3Jtcy51X3RsX3BhcmVudCx4fHxbMCwwXSkscy51bmlmb3JtMWYoYy51bmlmb3Jtcy51X3NjYWxlX3BhcmVudCx5fHwxKSxzLnVuaWZvcm0xZihjLnVuaWZvcm1zLnVfZmFkZV90LG0ubWl4KSxzLnVuaWZvcm0xZihjLnVuaWZvcm1zLnVfb3BhY2l0eSxtLm9wYWNpdHkqci5wYWludC5nZXQoXCJyYXN0ZXItb3BhY2l0eVwiKSksbCBpbnN0YW5jZW9mIHR0KXt2YXIgYj1sLmJvdW5kc0J1ZmZlcjtsLmJvdW5kc1ZBTy5iaW5kKG8sYyxiLFtdKSxzLmRyYXdBcnJheXMocy5UUklBTkdMRV9TVFJJUCwwLGIubGVuZ3RoKX1lbHNlIGlmKGQubWFza2VkQm91bmRzQnVmZmVyJiZkLm1hc2tlZEluZGV4QnVmZmVyJiZkLnNlZ21lbnRzKWMuZHJhdyhvLHMuVFJJQU5HTEVTLHIuaWQsZC5tYXNrZWRCb3VuZHNCdWZmZXIsZC5tYXNrZWRJbmRleEJ1ZmZlcixkLnNlZ21lbnRzKTtlbHNle3ZhciBfPXQucmFzdGVyQm91bmRzQnVmZmVyO3QucmFzdGVyQm91bmRzVkFPLmJpbmQobyxjLF8sW10pLHMuZHJhd0FycmF5cyhzLlRSSUFOR0xFX1NUUklQLDAsXy5sZW5ndGgpfX19fSxiYWNrZ3JvdW5kOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yLnBhaW50LmdldChcImJhY2tncm91bmQtY29sb3JcIiksaT1yLnBhaW50LmdldChcImJhY2tncm91bmQtb3BhY2l0eVwiKTtpZigwIT09aSl7dmFyIGE9dC5jb250ZXh0LG89YS5nbCxzPXQudHJhbnNmb3JtLGw9cy50aWxlU2l6ZSxjPXIucGFpbnQuZ2V0KFwiYmFja2dyb3VuZC1wYXR0ZXJuXCIpLHU9Y3x8MSE9PW4uYXx8MSE9PWk/XCJ0cmFuc2x1Y2VudFwiOlwib3BhcXVlXCI7aWYodC5yZW5kZXJQYXNzPT09dSl7dmFyIGg7aWYoYS5zZXRTdGVuY2lsTW9kZShIdC5kaXNhYmxlZCksYS5zZXREZXB0aE1vZGUodC5kZXB0aE1vZGVGb3JTdWJsYXllcigwLFwib3BhcXVlXCI9PT11P3F0LlJlYWRXcml0ZTpxdC5SZWFkT25seSkpLGEuc2V0Q29sb3JNb2RlKHQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKSxjKXtpZihkcihjLHQpKXJldHVybjtoPXQudXNlUHJvZ3JhbShcImJhY2tncm91bmRQYXR0ZXJuXCIpLGdyKGMsdCxoKSx0LnRpbGVFeHRlbnRQYXR0ZXJuVkFPLmJpbmQoYSxoLHQudGlsZUV4dGVudEJ1ZmZlcixbXSl9ZWxzZSBoPXQudXNlUHJvZ3JhbShcImJhY2tncm91bmRcIiksby51bmlmb3JtNGZ2KGgudW5pZm9ybXMudV9jb2xvcixbbi5yLG4uZyxuLmIsbi5hXSksdC50aWxlRXh0ZW50VkFPLmJpbmQoYSxoLHQudGlsZUV4dGVudEJ1ZmZlcixbXSk7by51bmlmb3JtMWYoaC51bmlmb3Jtcy51X29wYWNpdHksaSk7Zm9yKHZhciBmPTAscD1zLmNvdmVyaW5nVGlsZXMoe3RpbGVTaXplOmx9KTtmPHAubGVuZ3RoO2YrPTEpe3ZhciBkPXBbZl07YyYmdnIoe3RpbGVJRDpkLHRpbGVTaXplOmx9LHQsaCksby51bmlmb3JtTWF0cml4NGZ2KGgudW5pZm9ybXMudV9tYXRyaXgsITEsdC50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KGQudG9VbndyYXBwZWQoKSkpLG8uZHJhd0FycmF5cyhvLlRSSUFOR0xFX1NUUklQLDAsdC50aWxlRXh0ZW50QnVmZmVyLmxlbmd0aCl9fX19LGRlYnVnOmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKylFcih0LGUscltuXSl9fSx6cj1mdW5jdGlvbihlLHIpe3RoaXMuY29udGV4dD1uZXcgWXQoZSksdGhpcy50cmFuc2Zvcm09cix0aGlzLl90aWxlVGV4dHVyZXM9e30sdGhpcy5zZXR1cCgpLHRoaXMubnVtU3VibGF5ZXJzPVd0Lm1heFVuZGVyem9vbWluZytXdC5tYXhPdmVyem9vbWluZysxLHRoaXMuZGVwdGhFcHNpbG9uPTEvTWF0aC5wb3coMiwxNiksdGhpcy5kZXB0aFJib05lZWRzQ2xlYXI9ITAsdGhpcy5lbXB0eVByb2dyYW1Db25maWd1cmF0aW9uPW5ldyB0LmRlZmF1bHQkMjQsdGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleD1uZXcgV2V9O2Z1bmN0aW9uIE9yKHQsZSl7aWYodC5yb3c+ZS5yb3cpe3ZhciByPXQ7dD1lLGU9cn1yZXR1cm57eDA6dC5jb2x1bW4seTA6dC5yb3cseDE6ZS5jb2x1bW4seTE6ZS5yb3csZHg6ZS5jb2x1bW4tdC5jb2x1bW4sZHk6ZS5yb3ctdC5yb3d9fWZ1bmN0aW9uIElyKHQsZSxyLG4saSl7dmFyIGE9TWF0aC5tYXgocixNYXRoLmZsb29yKGUueTApKSxvPU1hdGgubWluKG4sTWF0aC5jZWlsKGUueTEpKTtpZih0LngwPT09ZS54MCYmdC55MD09PWUueTA/dC54MCtlLmR5L3QuZHkqdC5keDxlLngxOnQueDEtZS5keS90LmR5KnQuZHg8ZS54MCl7dmFyIHM9dDt0PWUsZT1zfWZvcih2YXIgbD10LmR4L3QuZHksYz1lLmR4L2UuZHksdT10LmR4PjAsaD1lLmR4PDAsZj1hO2Y8bztmKyspe3ZhciBwPWwqTWF0aC5tYXgoMCxNYXRoLm1pbih0LmR5LGYrdS10LnkwKSkrdC54MCxkPWMqTWF0aC5tYXgoMCxNYXRoLm1pbihlLmR5LGYraC1lLnkwKSkrZS54MDtpKE1hdGguZmxvb3IoZCksTWF0aC5jZWlsKHApLGYpfX1mdW5jdGlvbiBEcih0LGUscixuLGksYSl7dmFyIG8scz1Pcih0LGUpLGw9T3IoZSxyKSxjPU9yKHIsdCk7cy5keT5sLmR5JiYobz1zLHM9bCxsPW8pLHMuZHk+Yy5keSYmKG89cyxzPWMsYz1vKSxsLmR5PmMuZHkmJihvPWwsbD1jLGM9bykscy5keSYmSXIoYyxzLG4saSxhKSxsLmR5JiZJcihjLGwsbixpLGEpfXpyLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmNvbnRleHQuZ2w7aWYodGhpcy53aWR0aD10KmEuZGV2aWNlUGl4ZWxSYXRpbyx0aGlzLmhlaWdodD1lKmEuZGV2aWNlUGl4ZWxSYXRpbyx0aGlzLmNvbnRleHQudmlld3BvcnQuc2V0KFswLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodF0pLHRoaXMuc3R5bGUpZm9yKHZhciBuPTAsaT10aGlzLnN0eWxlLl9vcmRlcjtuPGkubGVuZ3RoO24rPTEpe3ZhciBvPWlbbl07dGhpcy5zdHlsZS5fbGF5ZXJzW29dLnJlc2l6ZSgpfXRoaXMuZGVwdGhSYm8mJihyLmRlbGV0ZVJlbmRlcmJ1ZmZlcih0aGlzLmRlcHRoUmJvKSx0aGlzLmRlcHRoUmJvPW51bGwpfSx6ci5wcm90b3R5cGUuc2V0dXA9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbnRleHQscj1uZXcgdC5Qb3NBcnJheTtyLmVtcGxhY2VCYWNrKDAsMCksci5lbXBsYWNlQmFjayh0LmRlZmF1bHQkOCwwKSxyLmVtcGxhY2VCYWNrKDAsdC5kZWZhdWx0JDgpLHIuZW1wbGFjZUJhY2sodC5kZWZhdWx0JDgsdC5kZWZhdWx0JDgpLHRoaXMudGlsZUV4dGVudEJ1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcihyLEtlLm1lbWJlcnMpLHRoaXMudGlsZUV4dGVudFZBTz1uZXcgUSx0aGlzLnRpbGVFeHRlbnRQYXR0ZXJuVkFPPW5ldyBRO3ZhciBuPW5ldyB0LlBvc0FycmF5O24uZW1wbGFjZUJhY2soMCwwKSxuLmVtcGxhY2VCYWNrKHQuZGVmYXVsdCQ4LDApLG4uZW1wbGFjZUJhY2sodC5kZWZhdWx0JDgsdC5kZWZhdWx0JDgpLG4uZW1wbGFjZUJhY2soMCx0LmRlZmF1bHQkOCksbi5lbXBsYWNlQmFjaygwLDApLHRoaXMuZGVidWdCdWZmZXI9ZS5jcmVhdGVWZXJ0ZXhCdWZmZXIobixLZS5tZW1iZXJzKSx0aGlzLmRlYnVnVkFPPW5ldyBRO3ZhciBpPW5ldyB0LlJhc3RlckJvdW5kc0FycmF5O2kuZW1wbGFjZUJhY2soMCwwLDAsMCksaS5lbXBsYWNlQmFjayh0LmRlZmF1bHQkOCwwLHQuZGVmYXVsdCQ4LDApLGkuZW1wbGFjZUJhY2soMCx0LmRlZmF1bHQkOCwwLHQuZGVmYXVsdCQ4KSxpLmVtcGxhY2VCYWNrKHQuZGVmYXVsdCQ4LHQuZGVmYXVsdCQ4LHQuZGVmYXVsdCQ4LHQuZGVmYXVsdCQ4KSx0aGlzLnJhc3RlckJvdW5kc0J1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcihpLEsubWVtYmVycyksdGhpcy5yYXN0ZXJCb3VuZHNWQU89bmV3IFE7dmFyIGE9bmV3IHQuUG9zQXJyYXk7YS5lbXBsYWNlQmFjaygwLDApLGEuZW1wbGFjZUJhY2soMSwwKSxhLmVtcGxhY2VCYWNrKDAsMSksYS5lbXBsYWNlQmFjaygxLDEpLHRoaXMudmlld3BvcnRCdWZmZXI9ZS5jcmVhdGVWZXJ0ZXhCdWZmZXIoYSxLZS5tZW1iZXJzKSx0aGlzLnZpZXdwb3J0VkFPPW5ldyBRfSx6ci5wcm90b3R5cGUuY2xlYXJTdGVuY2lsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0LHI9ZS5nbDtlLnNldENvbG9yTW9kZShHdC5kaXNhYmxlZCksZS5zZXREZXB0aE1vZGUocXQuZGlzYWJsZWQpLGUuc2V0U3RlbmNpbE1vZGUobmV3IEh0KHtmdW5jOnIuQUxXQVlTLG1hc2s6MH0sMCwyNTUsci5aRVJPLHIuWkVSTyxyLlpFUk8pKTt2YXIgbj10Lm1hdDQuY3JlYXRlKCk7dC5tYXQ0Lm9ydGhvKG4sMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LDAsMCwxKSx0Lm1hdDQuc2NhbGUobixuLFtyLmRyYXdpbmdCdWZmZXJXaWR0aCxyLmRyYXdpbmdCdWZmZXJIZWlnaHQsMF0pO3ZhciBpPXRoaXMudXNlUHJvZ3JhbShcImNsaXBwaW5nTWFza1wiKTtyLnVuaWZvcm1NYXRyaXg0ZnYoaS51bmlmb3Jtcy51X21hdHJpeCwhMSxuKSx0aGlzLnZpZXdwb3J0VkFPLmJpbmQoZSxpLHRoaXMudmlld3BvcnRCdWZmZXIsW10pLHIuZHJhd0FycmF5cyhyLlRSSUFOR0xFX1NUUklQLDAsNCl9LHpyLnByb3RvdHlwZS5fcmVuZGVyVGlsZUNsaXBwaW5nTWFza3M9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb250ZXh0LHI9ZS5nbDtlLnNldENvbG9yTW9kZShHdC5kaXNhYmxlZCksZS5zZXREZXB0aE1vZGUocXQuZGlzYWJsZWQpO3ZhciBuPTE7dGhpcy5fdGlsZUNsaXBwaW5nTWFza0lEcz17fTtmb3IodmFyIGk9MCxhPXQ7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldLHM9dGhpcy5fdGlsZUNsaXBwaW5nTWFza0lEc1tvLmtleV09bisrO2Uuc2V0U3RlbmNpbE1vZGUobmV3IEh0KHtmdW5jOnIuQUxXQVlTLG1hc2s6MH0scywyNTUsci5LRUVQLHIuS0VFUCxyLlJFUExBQ0UpKTt2YXIgbD10aGlzLnVzZVByb2dyYW0oXCJjbGlwcGluZ01hc2tcIik7ci51bmlmb3JtTWF0cml4NGZ2KGwudW5pZm9ybXMudV9tYXRyaXgsITEsby5wb3NNYXRyaXgpLHRoaXMudGlsZUV4dGVudFZBTy5iaW5kKHRoaXMuY29udGV4dCxsLHRoaXMudGlsZUV4dGVudEJ1ZmZlcixbXSksci5kcmF3QXJyYXlzKHIuVFJJQU5HTEVfU1RSSVAsMCx0aGlzLnRpbGVFeHRlbnRCdWZmZXIubGVuZ3RoKX19LHpyLnByb3RvdHlwZS5zdGVuY2lsTW9kZUZvckNsaXBwaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDtyZXR1cm4gbmV3IEh0KHtmdW5jOmUuRVFVQUwsbWFzazoyNTV9LHRoaXMuX3RpbGVDbGlwcGluZ01hc2tJRHNbdC5rZXldLDAsZS5LRUVQLGUuS0VFUCxlLlJFUExBQ0UpfSx6ci5wcm90b3R5cGUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGV4dC5nbDtyZXR1cm4gdGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yP25ldyBHdChbZS5DT05TVEFOVF9DT0xPUixlLk9ORV0sbmV3IHQuZGVmYXVsdCQ2KDEvOCwxLzgsMS84LDApLFshMCwhMCwhMCwhMF0pOlwib3BhcXVlXCI9PT10aGlzLnJlbmRlclBhc3M/R3QudW5ibGVuZGVkOkd0LmFscGhhQmxlbmRlZH0senIucHJvdG90eXBlLmRlcHRoTW9kZUZvclN1YmxheWVyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0xLSgoMSt0aGlzLmN1cnJlbnRMYXllcikqdGhpcy5udW1TdWJsYXllcnMrdCkqdGhpcy5kZXB0aEVwc2lsb24saT1uLTErdGhpcy5kZXB0aFJhbmdlO3JldHVybiBuZXcgcXQocnx8dGhpcy5jb250ZXh0LmdsLkxFUVVBTCxlLFtpLG5dKX0senIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7Zm9yKHZhciBpIGluIHRoaXMuc3R5bGU9ZSx0aGlzLm9wdGlvbnM9cix0aGlzLmxpbmVBdGxhcz1lLmxpbmVBdGxhcyx0aGlzLmltYWdlTWFuYWdlcj1lLmltYWdlTWFuYWdlcix0aGlzLmdseXBoTWFuYWdlcj1lLmdseXBoTWFuYWdlcix0aGlzLnN5bWJvbEZhZGVDaGFuZ2U9ZS5wbGFjZW1lbnQuc3ltYm9sRmFkZUNoYW5nZShhLm5vdygpKSxlLnNvdXJjZUNhY2hlcyl7dmFyIG89bi5zdHlsZS5zb3VyY2VDYWNoZXNbaV07by51c2VkJiZvLnByZXBhcmUobi5jb250ZXh0KX12YXIgcz10aGlzLnN0eWxlLl9vcmRlcixsPXQuZmlsdGVyT2JqZWN0KHRoaXMuc3R5bGUuc291cmNlQ2FjaGVzLGZ1bmN0aW9uKHQpe3JldHVyblwicmFzdGVyXCI9PT10LmdldFNvdXJjZSgpLnR5cGV8fFwicmFzdGVyLWRlbVwiPT09dC5nZXRTb3VyY2UoKS50eXBlfSksYz1mdW5jdGlvbihlKXt2YXIgcj1sW2VdOyFmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1lLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50aWxlSUQuaXNMZXNzVGhhbihlLnRpbGVJRCk/LTE6ZS50aWxlSUQuaXNMZXNzVGhhbih0LnRpbGVJRCk/MTowfSksaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT17fSxvPW5baV0scz1uLnNsaWNlKGkrMSk7YXIoby50aWxlSUQud3JhcHBlZCgpLG8udGlsZUlELHMsbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRCgwLG8udGlsZUlELndyYXArMSwwLDAsMCksYSksby5zZXRNYXNrKGEscil9fShyLmdldFZpc2libGVDb29yZGluYXRlcygpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gci5nZXRUaWxlKHQpfSksbi5jb250ZXh0KX07Zm9yKHZhciB1IGluIGwpYyh1KTt0aGlzLnJlbmRlclBhc3M9XCJvZmZzY3JlZW5cIjt2YXIgaCxmPVtdO3RoaXMuZGVwdGhSYm9OZWVkc0NsZWFyPSEwO2Zvcih2YXIgcD0wO3A8cy5sZW5ndGg7cCsrKXt2YXIgZD1uLnN0eWxlLl9sYXllcnNbc1twXV07ZC5oYXNPZmZzY3JlZW5QYXNzKCkmJiFkLmlzSGlkZGVuKG4udHJhbnNmb3JtLnpvb20pJiYoZC5zb3VyY2UhPT0oaCYmaC5pZCkmJihmPVtdLChoPW4uc3R5bGUuc291cmNlQ2FjaGVzW2Quc291cmNlXSkmJihmPWguZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCkpLnJldmVyc2UoKSksZi5sZW5ndGgmJm4ucmVuZGVyTGF5ZXIobixoLGQsZikpfXRoaXMuY29udGV4dC5iaW5kRnJhbWVidWZmZXIuc2V0KG51bGwpLHRoaXMuY29udGV4dC5jbGVhcih7Y29sb3I6ci5zaG93T3ZlcmRyYXdJbnNwZWN0b3I/dC5kZWZhdWx0JDYuYmxhY2s6dC5kZWZhdWx0JDYudHJhbnNwYXJlbnQsZGVwdGg6MX0pLHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcj1yLnNob3dPdmVyZHJhd0luc3BlY3Rvcix0aGlzLmRlcHRoUmFuZ2U9KGUuX29yZGVyLmxlbmd0aCsyKSp0aGlzLm51bVN1YmxheWVycyp0aGlzLmRlcHRoRXBzaWxvbix0aGlzLnJlbmRlclBhc3M9XCJvcGFxdWVcIjt2YXIgZyx2PVtdO2Zvcih0aGlzLmN1cnJlbnRMYXllcj1zLmxlbmd0aC0xLHRoaXMuY3VycmVudExheWVyO3RoaXMuY3VycmVudExheWVyPj0wO3RoaXMuY3VycmVudExheWVyLS0pe3ZhciBtPW4uc3R5bGUuX2xheWVyc1tzW24uY3VycmVudExheWVyXV07bS5zb3VyY2UhPT0oZyYmZy5pZCkmJih2PVtdLChnPW4uc3R5bGUuc291cmNlQ2FjaGVzW20uc291cmNlXSkmJihuLmNsZWFyU3RlbmNpbCgpLHY9Zy5nZXRWaXNpYmxlQ29vcmRpbmF0ZXMoKSxnLmdldFNvdXJjZSgpLmlzVGlsZUNsaXBwZWQmJm4uX3JlbmRlclRpbGVDbGlwcGluZ01hc2tzKHYpKSksbi5yZW5kZXJMYXllcihuLGcsbSx2KX10aGlzLnJlbmRlclBhc3M9XCJ0cmFuc2x1Y2VudFwiO3ZhciB5LHg9W107Zm9yKHRoaXMuY3VycmVudExheWVyPTAsdGhpcy5jdXJyZW50TGF5ZXI7dGhpcy5jdXJyZW50TGF5ZXI8cy5sZW5ndGg7dGhpcy5jdXJyZW50TGF5ZXIrKyl7dmFyIGI9bi5zdHlsZS5fbGF5ZXJzW3Nbbi5jdXJyZW50TGF5ZXJdXTtiLnNvdXJjZSE9PSh5JiZ5LmlkKSYmKHg9W10sKHk9bi5zdHlsZS5zb3VyY2VDYWNoZXNbYi5zb3VyY2VdKSYmKG4uY2xlYXJTdGVuY2lsKCkseD15LmdldFZpc2libGVDb29yZGluYXRlcygpLHkuZ2V0U291cmNlKCkuaXNUaWxlQ2xpcHBlZCYmbi5fcmVuZGVyVGlsZUNsaXBwaW5nTWFza3MoeCkpLHgucmV2ZXJzZSgpKSxuLnJlbmRlckxheWVyKG4seSxiLHgpfWlmKHRoaXMub3B0aW9ucy5zaG93VGlsZUJvdW5kYXJpZXMpe3ZhciBfPXRoaXMuc3R5bGUuc291cmNlQ2FjaGVzW09iamVjdC5rZXlzKHRoaXMuc3R5bGUuc291cmNlQ2FjaGVzKVswXV07XyYmTHIuZGVidWcodGhpcyxfLF8uZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCkpfX0senIucHJvdG90eXBlLnNldHVwT2Zmc2NyZWVuRGVwdGhSZW5kZXJidWZmZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnRleHQ7dGhpcy5kZXB0aFJib3x8KHRoaXMuZGVwdGhSYm89dC5jcmVhdGVSZW5kZXJidWZmZXIodC5nbC5ERVBUSF9DT01QT05FTlQxNix0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSl9LHpyLnByb3RvdHlwZS5yZW5kZXJMYXllcj1mdW5jdGlvbih0LGUscixuKXtyLmlzSGlkZGVuKHRoaXMudHJhbnNmb3JtLnpvb20pfHwoXCJiYWNrZ3JvdW5kXCI9PT1yLnR5cGV8fG4ubGVuZ3RoKSYmKHRoaXMuaWQ9ci5pZCxMcltyLnR5cGVdKHQsZSxyLG4pKX0senIucHJvdG90eXBlLnRyYW5zbGF0ZVBvc01hdHJpeD1mdW5jdGlvbihlLHIsbixpLGEpe2lmKCFuWzBdJiYhblsxXSlyZXR1cm4gZTt2YXIgbz1hP1wibWFwXCI9PT1pP3RoaXMudHJhbnNmb3JtLmFuZ2xlOjA6XCJ2aWV3cG9ydFwiPT09aT8tdGhpcy50cmFuc2Zvcm0uYW5nbGU6MDtpZihvKXt2YXIgcz1NYXRoLnNpbihvKSxsPU1hdGguY29zKG8pO249W25bMF0qbC1uWzFdKnMsblswXSpzK25bMV0qbF19dmFyIGM9W2E/blswXTpNZShyLG5bMF0sdGhpcy50cmFuc2Zvcm0uem9vbSksYT9uWzFdOk1lKHIsblsxXSx0aGlzLnRyYW5zZm9ybS56b29tKSwwXSx1PW5ldyBGbG9hdDMyQXJyYXkoMTYpO3JldHVybiB0Lm1hdDQudHJhbnNsYXRlKHUsZSxjKSx1fSx6ci5wcm90b3R5cGUuc2F2ZVRpbGVUZXh0dXJlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbGVUZXh0dXJlc1t0LnNpemVbMF1dO2U/ZS5wdXNoKHQpOnRoaXMuX3RpbGVUZXh0dXJlc1t0LnNpemVbMF1dPVt0XX0senIucHJvdG90eXBlLmdldFRpbGVUZXh0dXJlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbGVUZXh0dXJlc1t0XTtyZXR1cm4gZSYmZS5sZW5ndGg+MD9lLnBvcCgpOm51bGx9LHpyLnByb3RvdHlwZS5fY3JlYXRlUHJvZ3JhbUNhY2hlZD1mdW5jdGlvbih0LGUpe3RoaXMuY2FjaGU9dGhpcy5jYWNoZXx8e307dmFyIHI9XCJcIit0KyhlLmNhY2hlS2V5fHxcIlwiKSsodGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yP1wiL292ZXJkcmF3XCI6XCJcIik7cmV0dXJuIHRoaXMuY2FjaGVbcl18fCh0aGlzLmNhY2hlW3JdPW5ldyBpcih0aGlzLmNvbnRleHQsbnJbdF0sZSx0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3IpKSx0aGlzLmNhY2hlW3JdfSx6ci5wcm90b3R5cGUudXNlUHJvZ3JhbT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2NyZWF0ZVByb2dyYW1DYWNoZWQodCxlfHx0aGlzLmVtcHR5UHJvZ3JhbUNvbmZpZ3VyYXRpb24pO3JldHVybiB0aGlzLmNvbnRleHQucHJvZ3JhbS5zZXQoci5wcm9ncmFtKSxyfTt2YXIgUHI9dC5kZWZhdWx0JDIwLnZlYzQsUnI9dC5kZWZhdWx0JDIwLm1hdDQsRnI9dC5kZWZhdWx0JDIwLm1hdDIsQnI9ZnVuY3Rpb24odCxlLHIpe3RoaXMudGlsZVNpemU9NTEyLHRoaXMuX3JlbmRlcldvcmxkQ29waWVzPXZvaWQgMD09PXJ8fHIsdGhpcy5fbWluWm9vbT10fHwwLHRoaXMuX21heFpvb209ZXx8MjIsdGhpcy5sYXRSYW5nZT1bLTg1LjA1MTEzLDg1LjA1MTEzXSx0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MCx0aGlzLl9jZW50ZXI9bmV3IEcoMCwwKSx0aGlzLnpvb209MCx0aGlzLmFuZ2xlPTAsdGhpcy5fZm92PS42NDM1MDExMDg3OTMyODQ0LHRoaXMuX3BpdGNoPTAsdGhpcy5fdW5tb2RpZmllZD0hMCx0aGlzLl9wb3NNYXRyaXhDYWNoZT17fSx0aGlzLl9hbGlnbmVkUG9zTWF0cml4Q2FjaGU9e319LE5yPXttaW5ab29tOntjb25maWd1cmFibGU6ITB9LG1heFpvb206e2NvbmZpZ3VyYWJsZTohMH0scmVuZGVyV29ybGRDb3BpZXM6e2NvbmZpZ3VyYWJsZTohMH0sd29ybGRTaXplOntjb25maWd1cmFibGU6ITB9LGNlbnRlclBvaW50Ontjb25maWd1cmFibGU6ITB9LHNpemU6e2NvbmZpZ3VyYWJsZTohMH0sYmVhcmluZzp7Y29uZmlndXJhYmxlOiEwfSxwaXRjaDp7Y29uZmlndXJhYmxlOiEwfSxmb3Y6e2NvbmZpZ3VyYWJsZTohMH0sem9vbTp7Y29uZmlndXJhYmxlOiEwfSxjZW50ZXI6e2NvbmZpZ3VyYWJsZTohMH0sdW5tb2RpZmllZDp7Y29uZmlndXJhYmxlOiEwfSx4Ontjb25maWd1cmFibGU6ITB9LHk6e2NvbmZpZ3VyYWJsZTohMH0scG9pbnQ6e2NvbmZpZ3VyYWJsZTohMH19O0JyLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBCcih0aGlzLl9taW5ab29tLHRoaXMuX21heFpvb20sdGhpcy5fcmVuZGVyV29ybGRDb3BpZXMpO3JldHVybiB0LnRpbGVTaXplPXRoaXMudGlsZVNpemUsdC5sYXRSYW5nZT10aGlzLmxhdFJhbmdlLHQud2lkdGg9dGhpcy53aWR0aCx0LmhlaWdodD10aGlzLmhlaWdodCx0Ll9jZW50ZXI9dGhpcy5fY2VudGVyLHQuem9vbT10aGlzLnpvb20sdC5hbmdsZT10aGlzLmFuZ2xlLHQuX2Zvdj10aGlzLl9mb3YsdC5fcGl0Y2g9dGhpcy5fcGl0Y2gsdC5fdW5tb2RpZmllZD10aGlzLl91bm1vZGlmaWVkLHQuX2NhbGNNYXRyaWNlcygpLHR9LE5yLm1pblpvb20uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21pblpvb219LE5yLm1pblpvb20uc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX21pblpvb20hPT10JiYodGhpcy5fbWluWm9vbT10LHRoaXMuem9vbT1NYXRoLm1heCh0aGlzLnpvb20sdCkpfSxOci5tYXhab29tLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhab29tfSxOci5tYXhab29tLnNldD1mdW5jdGlvbih0KXt0aGlzLl9tYXhab29tIT09dCYmKHRoaXMuX21heFpvb209dCx0aGlzLnpvb209TWF0aC5taW4odGhpcy56b29tLHQpKX0sTnIucmVuZGVyV29ybGRDb3BpZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcldvcmxkQ29waWVzfSxOci5yZW5kZXJXb3JsZENvcGllcy5zZXQ9ZnVuY3Rpb24odCl7dm9pZCAwPT09dD90PSEwOm51bGw9PT10JiYodD0hMSksdGhpcy5fcmVuZGVyV29ybGRDb3BpZXM9dH0sTnIud29ybGRTaXplLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRpbGVTaXplKnRoaXMuc2NhbGV9LE5yLmNlbnRlclBvaW50LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemUuX2RpdigyKX0sTnIuc2l6ZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQuZGVmYXVsdCQxKHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpfSxOci5iZWFyaW5nLmdldD1mdW5jdGlvbigpe3JldHVybi10aGlzLmFuZ2xlL01hdGguUEkqMTgwfSxOci5iZWFyaW5nLnNldD1mdW5jdGlvbihlKXt2YXIgcj0tdC53cmFwKGUsLTE4MCwxODApKk1hdGguUEkvMTgwO3RoaXMuYW5nbGUhPT1yJiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLmFuZ2xlPXIsdGhpcy5fY2FsY01hdHJpY2VzKCksdGhpcy5yb3RhdGlvbk1hdHJpeD1Gci5jcmVhdGUoKSxGci5yb3RhdGUodGhpcy5yb3RhdGlvbk1hdHJpeCx0aGlzLnJvdGF0aW9uTWF0cml4LHRoaXMuYW5nbGUpKX0sTnIucGl0Y2guZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BpdGNoL01hdGguUEkqMTgwfSxOci5waXRjaC5zZXQ9ZnVuY3Rpb24oZSl7dmFyIHI9dC5jbGFtcChlLDAsNjApLzE4MCpNYXRoLlBJO3RoaXMuX3BpdGNoIT09ciYmKHRoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5fcGl0Y2g9cix0aGlzLl9jYWxjTWF0cmljZXMoKSl9LE5yLmZvdi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm92L01hdGguUEkqMTgwfSxOci5mb3Yuc2V0PWZ1bmN0aW9uKHQpe3Q9TWF0aC5tYXgoLjAxLE1hdGgubWluKDYwLHQpKSx0aGlzLl9mb3YhPT10JiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLl9mb3Y9dC8xODAqTWF0aC5QSSx0aGlzLl9jYWxjTWF0cmljZXMoKSl9LE5yLnpvb20uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pvb219LE5yLnpvb20uc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWluKE1hdGgubWF4KHQsdGhpcy5taW5ab29tKSx0aGlzLm1heFpvb20pO3RoaXMuX3pvb20hPT1lJiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLl96b29tPWUsdGhpcy5zY2FsZT10aGlzLnpvb21TY2FsZShlKSx0aGlzLnRpbGVab29tPU1hdGguZmxvb3IoZSksdGhpcy56b29tRnJhY3Rpb249ZS10aGlzLnRpbGVab29tLHRoaXMuX2NvbnN0cmFpbigpLHRoaXMuX2NhbGNNYXRyaWNlcygpKX0sTnIuY2VudGVyLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jZW50ZXJ9LE5yLmNlbnRlci5zZXQ9ZnVuY3Rpb24odCl7dC5sYXQ9PT10aGlzLl9jZW50ZXIubGF0JiZ0LmxuZz09PXRoaXMuX2NlbnRlci5sbmd8fCh0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuX2NlbnRlcj10LHRoaXMuX2NvbnN0cmFpbigpLHRoaXMuX2NhbGNNYXRyaWNlcygpKX0sQnIucHJvdG90eXBlLmNvdmVyaW5nWm9vbUxldmVsPWZ1bmN0aW9uKHQpe3JldHVybih0LnJvdW5kWm9vbT9NYXRoLnJvdW5kOk1hdGguZmxvb3IpKHRoaXMuem9vbSt0aGlzLnNjYWxlWm9vbSh0aGlzLnRpbGVTaXplL3QudGlsZVNpemUpKX0sQnIucHJvdG90eXBlLmdldFZpc2libGVVbndyYXBwZWRDb29yZGluYXRlcz1mdW5jdGlvbihlKXt2YXIgcj10aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgdC5kZWZhdWx0JDEoMCwwKSwwKSxuPXRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LmRlZmF1bHQkMSh0aGlzLndpZHRoLDApLDApLGk9TWF0aC5mbG9vcihyLmNvbHVtbiksYT1NYXRoLmZsb29yKG4uY29sdW1uKSxvPVtuZXcgdC5VbndyYXBwZWRUaWxlSUQoMCxlKV07aWYodGhpcy5fcmVuZGVyV29ybGRDb3BpZXMpZm9yKHZhciBzPWk7czw9YTtzKyspMCE9PXMmJm8ucHVzaChuZXcgdC5VbndyYXBwZWRUaWxlSUQocyxlKSk7cmV0dXJuIG99LEJyLnByb3RvdHlwZS5jb3ZlcmluZ1RpbGVzPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuY292ZXJpbmdab29tTGV2ZWwoZSksbj1yO2lmKHZvaWQgMCE9PWUubWluem9vbSYmcjxlLm1pbnpvb20pcmV0dXJuW107dm9pZCAwIT09ZS5tYXh6b29tJiZyPmUubWF4em9vbSYmKHI9ZS5tYXh6b29tKTt2YXIgaT10aGlzLnBvaW50Q29vcmRpbmF0ZSh0aGlzLmNlbnRlclBvaW50LHIpLGE9bmV3IHQuZGVmYXVsdCQxKGkuY29sdW1uLS41LGkucm93LS41KTtyZXR1cm4gZnVuY3Rpb24oZSxyLG4saSl7dm9pZCAwPT09aSYmKGk9ITApO3ZhciBhPTE8PGUsbz17fTtmdW5jdGlvbiBzKHIscyxsKXt2YXIgYyx1LGgsZjtpZihsPj0wJiZsPD1hKWZvcihjPXI7YzxzO2MrKyl1PU1hdGguZmxvb3IoYy9hKSxoPShjJWErYSklYSwwIT09dSYmITAhPT1pfHwoZj1uZXcgdC5PdmVyc2NhbGVkVGlsZUlEKG4sdSxlLGgsbCksb1tmLmtleV09Zil9cmV0dXJuIERyKHJbMF0sclsxXSxyWzJdLDAsYSxzKSxEcihyWzJdLHJbM10sclswXSwwLGEscyksT2JqZWN0LmtleXMobykubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBvW3RdfSl9KHIsW3RoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LmRlZmF1bHQkMSgwLDApLHIpLHRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LmRlZmF1bHQkMSh0aGlzLndpZHRoLDApLHIpLHRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LmRlZmF1bHQkMSh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSxyKSx0aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgdC5kZWZhdWx0JDEoMCx0aGlzLmhlaWdodCkscildLGUucmVwYXJzZU92ZXJzY2FsZWQ/bjpyLHRoaXMuX3JlbmRlcldvcmxkQ29waWVzKS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEuZGlzdCh0LmNhbm9uaWNhbCktYS5kaXN0KGUuY2Fub25pY2FsKX0pfSxCci5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQsZSl7dGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5waXhlbHNUb0dMVW5pdHM9WzIvdCwtMi9lXSx0aGlzLl9jb25zdHJhaW4oKSx0aGlzLl9jYWxjTWF0cmljZXMoKX0sTnIudW5tb2RpZmllZC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdW5tb2RpZmllZH0sQnIucHJvdG90eXBlLnpvb21TY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3coMix0KX0sQnIucHJvdG90eXBlLnNjYWxlWm9vbT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5MTjJ9LEJyLnByb3RvdHlwZS5wcm9qZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdC5kZWZhdWx0JDEodGhpcy5sbmdYKGUubG5nKSx0aGlzLmxhdFkoZS5sYXQpKX0sQnIucHJvdG90eXBlLnVucHJvamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEcodGhpcy54TG5nKHQueCksdGhpcy55TGF0KHQueSkpfSxOci54LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxuZ1godGhpcy5jZW50ZXIubG5nKX0sTnIueS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXRZKHRoaXMuY2VudGVyLmxhdCl9LE5yLnBvaW50LmdldD1mdW5jdGlvbigpe3JldHVybiBuZXcgdC5kZWZhdWx0JDEodGhpcy54LHRoaXMueSl9LEJyLnByb3RvdHlwZS5sbmdYPWZ1bmN0aW9uKHQpe3JldHVybigxODArdCkqdGhpcy53b3JsZFNpemUvMzYwfSxCci5wcm90b3R5cGUubGF0WT1mdW5jdGlvbih0KXtyZXR1cm4oMTgwLTE4MC9NYXRoLlBJKk1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCt0Kk1hdGguUEkvMzYwKSkpKnRoaXMud29ybGRTaXplLzM2MH0sQnIucHJvdG90eXBlLnhMbmc9ZnVuY3Rpb24odCl7cmV0dXJuIDM2MCp0L3RoaXMud29ybGRTaXplLTE4MH0sQnIucHJvdG90eXBlLnlMYXQ9ZnVuY3Rpb24odCl7dmFyIGU9MTgwLTM2MCp0L3RoaXMud29ybGRTaXplO3JldHVybiAzNjAvTWF0aC5QSSpNYXRoLmF0YW4oTWF0aC5leHAoZSpNYXRoLlBJLzE4MCkpLTkwfSxCci5wcm90b3R5cGUuc2V0TG9jYXRpb25BdFBvaW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5wb2ludENvb3JkaW5hdGUoZSkuX3N1Yih0aGlzLnBvaW50Q29vcmRpbmF0ZSh0aGlzLmNlbnRlclBvaW50KSk7dGhpcy5jZW50ZXI9dGhpcy5jb29yZGluYXRlTG9jYXRpb24odGhpcy5sb2NhdGlvbkNvb3JkaW5hdGUodCkuX3N1YihyKSksdGhpcy5fcmVuZGVyV29ybGRDb3BpZXMmJih0aGlzLmNlbnRlcj10aGlzLmNlbnRlci53cmFwKCkpfSxCci5wcm90b3R5cGUubG9jYXRpb25Qb2ludD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb29yZGluYXRlUG9pbnQodGhpcy5sb2NhdGlvbkNvb3JkaW5hdGUodCkpfSxCci5wcm90b3R5cGUucG9pbnRMb2NhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb29yZGluYXRlTG9jYXRpb24odGhpcy5wb2ludENvb3JkaW5hdGUodCkpfSxCci5wcm90b3R5cGUubG9jYXRpb25Db29yZGluYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdC5kZWZhdWx0JDE3KHRoaXMubG5nWChlLmxuZykvdGhpcy50aWxlU2l6ZSx0aGlzLmxhdFkoZS5sYXQpL3RoaXMudGlsZVNpemUsdGhpcy56b29tKS56b29tVG8odGhpcy50aWxlWm9vbSl9LEJyLnByb3RvdHlwZS5jb29yZGluYXRlTG9jYXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dC56b29tVG8odGhpcy56b29tKTtyZXR1cm4gbmV3IEcodGhpcy54TG5nKGUuY29sdW1uKnRoaXMudGlsZVNpemUpLHRoaXMueUxhdChlLnJvdyp0aGlzLnRpbGVTaXplKSl9LEJyLnByb3RvdHlwZS5wb2ludENvb3JkaW5hdGU9ZnVuY3Rpb24oZSxyKXt2b2lkIDA9PT1yJiYocj10aGlzLnRpbGVab29tKTt2YXIgbj1bZS54LGUueSwwLDFdLGk9W2UueCxlLnksMSwxXTtQci50cmFuc2Zvcm1NYXQ0KG4sbix0aGlzLnBpeGVsTWF0cml4SW52ZXJzZSksUHIudHJhbnNmb3JtTWF0NChpLGksdGhpcy5waXhlbE1hdHJpeEludmVyc2UpO3ZhciBhPW5bM10sbz1pWzNdLHM9blswXS9hLGw9aVswXS9vLGM9blsxXS9hLHU9aVsxXS9vLGg9blsyXS9hLGY9aVsyXS9vLHA9aD09PWY/MDooMC1oKS8oZi1oKTtyZXR1cm4gbmV3IHQuZGVmYXVsdCQxNyh0Lm51bWJlcihzLGwscCkvdGhpcy50aWxlU2l6ZSx0Lm51bWJlcihjLHUscCkvdGhpcy50aWxlU2l6ZSx0aGlzLnpvb20pLl96b29tVG8ocil9LEJyLnByb3RvdHlwZS5jb29yZGluYXRlUG9pbnQ9ZnVuY3Rpb24oZSl7dmFyIHI9ZS56b29tVG8odGhpcy56b29tKSxuPVtyLmNvbHVtbip0aGlzLnRpbGVTaXplLHIucm93KnRoaXMudGlsZVNpemUsMCwxXTtyZXR1cm4gUHIudHJhbnNmb3JtTWF0NChuLG4sdGhpcy5waXhlbE1hdHJpeCksbmV3IHQuZGVmYXVsdCQxKG5bMF0vblszXSxuWzFdL25bM10pfSxCci5wcm90b3R5cGUuY2FsY3VsYXRlUG9zTWF0cml4PWZ1bmN0aW9uKGUscil7dm9pZCAwPT09ciYmKHI9ITEpO3ZhciBuPWUua2V5LGk9cj90aGlzLl9hbGlnbmVkUG9zTWF0cml4Q2FjaGU6dGhpcy5fcG9zTWF0cml4Q2FjaGU7aWYoaVtuXSlyZXR1cm4gaVtuXTt2YXIgYT1lLmNhbm9uaWNhbCxvPXRoaXMud29ybGRTaXplL3RoaXMuem9vbVNjYWxlKGEueikscz1hLngrTWF0aC5wb3coMixhLnopKmUud3JhcCxsPVJyLmlkZW50aXR5KG5ldyBGbG9hdDY0QXJyYXkoMTYpKTtyZXR1cm4gUnIudHJhbnNsYXRlKGwsbCxbcypvLGEueSpvLDBdKSxSci5zY2FsZShsLGwsW28vdC5kZWZhdWx0JDgsby90LmRlZmF1bHQkOCwxXSksUnIubXVsdGlwbHkobCxyP3RoaXMuYWxpZ25lZFByb2pNYXRyaXg6dGhpcy5wcm9qTWF0cml4LGwpLGlbbl09bmV3IEZsb2F0MzJBcnJheShsKSxpW25dfSxCci5wcm90b3R5cGUuX2NvbnN0cmFpbj1mdW5jdGlvbigpe2lmKHRoaXMuY2VudGVyJiZ0aGlzLndpZHRoJiZ0aGlzLmhlaWdodCYmIXRoaXMuX2NvbnN0cmFpbmluZyl7dGhpcy5fY29uc3RyYWluaW5nPSEwO3ZhciBlLHIsbixpLGE9LTkwLG89OTAscz0tMTgwLGw9MTgwLGM9dGhpcy5zaXplLHU9dGhpcy5fdW5tb2RpZmllZDtpZih0aGlzLmxhdFJhbmdlKXt2YXIgaD10aGlzLmxhdFJhbmdlO2E9dGhpcy5sYXRZKGhbMV0pLGU9KG89dGhpcy5sYXRZKGhbMF0pKS1hPGMueT9jLnkvKG8tYSk6MH1pZih0aGlzLmxuZ1JhbmdlKXt2YXIgZj10aGlzLmxuZ1JhbmdlO3M9dGhpcy5sbmdYKGZbMF0pLHI9KGw9dGhpcy5sbmdYKGZbMV0pKS1zPGMueD9jLngvKGwtcyk6MH12YXIgcD1NYXRoLm1heChyfHwwLGV8fDApO2lmKHApcmV0dXJuIHRoaXMuY2VudGVyPXRoaXMudW5wcm9qZWN0KG5ldyB0LmRlZmF1bHQkMShyPyhsK3MpLzI6dGhpcy54LGU/KG8rYSkvMjp0aGlzLnkpKSx0aGlzLnpvb20rPXRoaXMuc2NhbGVab29tKHApLHRoaXMuX3VubW9kaWZpZWQ9dSx2b2lkKHRoaXMuX2NvbnN0cmFpbmluZz0hMSk7aWYodGhpcy5sYXRSYW5nZSl7dmFyIGQ9dGhpcy55LGc9Yy55LzI7ZC1nPGEmJihpPWErZyksZCtnPm8mJihpPW8tZyl9aWYodGhpcy5sbmdSYW5nZSl7dmFyIHY9dGhpcy54LG09Yy54LzI7di1tPHMmJihuPXMrbSksdittPmwmJihuPWwtbSl9dm9pZCAwPT09biYmdm9pZCAwPT09aXx8KHRoaXMuY2VudGVyPXRoaXMudW5wcm9qZWN0KG5ldyB0LmRlZmF1bHQkMSh2b2lkIDAhPT1uP246dGhpcy54LHZvaWQgMCE9PWk/aTp0aGlzLnkpKSksdGhpcy5fdW5tb2RpZmllZD11LHRoaXMuX2NvbnN0cmFpbmluZz0hMX19LEJyLnByb3RvdHlwZS5fY2FsY01hdHJpY2VzPWZ1bmN0aW9uKCl7aWYodGhpcy5oZWlnaHQpe3RoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZT0uNS9NYXRoLnRhbih0aGlzLl9mb3YvMikqdGhpcy5oZWlnaHQ7dmFyIHQ9dGhpcy5fZm92LzIsZT1NYXRoLlBJLzIrdGhpcy5fcGl0Y2gscj1NYXRoLnNpbih0KSp0aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UvTWF0aC5zaW4oTWF0aC5QSS1lLXQpLG49dGhpcy54LGk9dGhpcy55LGE9MS4wMSooTWF0aC5jb3MoTWF0aC5QSS8yLXRoaXMuX3BpdGNoKSpyK3RoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSksbz1uZXcgRmxvYXQ2NEFycmF5KDE2KTtSci5wZXJzcGVjdGl2ZShvLHRoaXMuX2Zvdix0aGlzLndpZHRoL3RoaXMuaGVpZ2h0LDEsYSksUnIuc2NhbGUobyxvLFsxLC0xLDFdKSxSci50cmFuc2xhdGUobyxvLFswLDAsLXRoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZV0pLFJyLnJvdGF0ZVgobyxvLHRoaXMuX3BpdGNoKSxSci5yb3RhdGVaKG8sbyx0aGlzLmFuZ2xlKSxSci50cmFuc2xhdGUobyxvLFstbiwtaSwwXSk7dmFyIHM9dGhpcy53b3JsZFNpemUvKDIqTWF0aC5QSSo2Mzc4MTM3Kk1hdGguYWJzKE1hdGguY29zKHRoaXMuY2VudGVyLmxhdCooTWF0aC5QSS8xODApKSkpO1JyLnNjYWxlKG8sbyxbMSwxLHMsMV0pLHRoaXMucHJvak1hdHJpeD1vO3ZhciBsPXRoaXMud2lkdGglMi8yLGM9dGhpcy5oZWlnaHQlMi8yLHU9TWF0aC5jb3ModGhpcy5hbmdsZSksaD1NYXRoLnNpbih0aGlzLmFuZ2xlKSxmPW4tTWF0aC5yb3VuZChuKSt1KmwraCpjLHA9aS1NYXRoLnJvdW5kKGkpK3UqYytoKmwsZD1uZXcgRmxvYXQ2NEFycmF5KG8pO2lmKFJyLnRyYW5zbGF0ZShkLGQsW2Y+LjU/Zi0xOmYscD4uNT9wLTE6cCwwXSksdGhpcy5hbGlnbmVkUHJvak1hdHJpeD1kLG89UnIuY3JlYXRlKCksUnIuc2NhbGUobyxvLFt0aGlzLndpZHRoLzIsLXRoaXMuaGVpZ2h0LzIsMV0pLFJyLnRyYW5zbGF0ZShvLG8sWzEsLTEsMF0pLHRoaXMucGl4ZWxNYXRyaXg9UnIubXVsdGlwbHkobmV3IEZsb2F0NjRBcnJheSgxNiksbyx0aGlzLnByb2pNYXRyaXgpLCEobz1Sci5pbnZlcnQobmV3IEZsb2F0NjRBcnJheSgxNiksdGhpcy5waXhlbE1hdHJpeCkpKXRocm93IG5ldyBFcnJvcihcImZhaWxlZCB0byBpbnZlcnQgbWF0cml4XCIpO3RoaXMucGl4ZWxNYXRyaXhJbnZlcnNlPW8sdGhpcy5fcG9zTWF0cml4Q2FjaGU9e30sdGhpcy5fYWxpZ25lZFBvc01hdHJpeENhY2hlPXt9fX0sQnIucHJvdG90eXBlLm1heFBpdGNoU2NhbGVGYWN0b3I9ZnVuY3Rpb24oKXtpZighdGhpcy5waXhlbE1hdHJpeEludmVyc2UpcmV0dXJuIDE7dmFyIGU9dGhpcy5wb2ludENvb3JkaW5hdGUobmV3IHQuZGVmYXVsdCQxKDAsMCkpLnpvb21Ubyh0aGlzLnpvb20pLHI9W2UuY29sdW1uKnRoaXMudGlsZVNpemUsZS5yb3cqdGhpcy50aWxlU2l6ZSwwLDFdO3JldHVybiBQci50cmFuc2Zvcm1NYXQ0KHIscix0aGlzLnBpeGVsTWF0cml4KVszXS90aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2V9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJyLnByb3RvdHlwZSxOcik7dmFyIGpyPWZ1bmN0aW9uKCl7dmFyIGUscixuLGk7dC5iaW5kQWxsKFtcIl9vbkhhc2hDaGFuZ2VcIixcIl91cGRhdGVIYXNoXCJdLHRoaXMpLHRoaXMuX3VwZGF0ZUhhc2g9KGU9dGhpcy5fdXBkYXRlSGFzaFVudGhyb3R0bGVkLmJpbmQodGhpcyksMzAwLHI9ITEsbj0wLGk9ZnVuY3Rpb24oKXtuPTAsciYmKGUoKSxuPXNldFRpbWVvdXQoaSwzMDApLHI9ITEpfSxmdW5jdGlvbigpe3JldHVybiByPSEwLG58fGkoKSxufSl9O2pyLnByb3RvdHlwZS5hZGRUbz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbWFwPWUsdC5kZWZhdWx0LmFkZEV2ZW50TGlzdGVuZXIoXCJoYXNoY2hhbmdlXCIsdGhpcy5fb25IYXNoQ2hhbmdlLCExKSx0aGlzLl9tYXAub24oXCJtb3ZlZW5kXCIsdGhpcy5fdXBkYXRlSGFzaCksdGhpc30sanIucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0LmRlZmF1bHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImhhc2hjaGFuZ2VcIix0aGlzLl9vbkhhc2hDaGFuZ2UsITEpLHRoaXMuX21hcC5vZmYoXCJtb3ZlZW5kXCIsdGhpcy5fdXBkYXRlSGFzaCksY2xlYXJUaW1lb3V0KHRoaXMuX3VwZGF0ZUhhc2goKSksZGVsZXRlIHRoaXMuX21hcCx0aGlzfSxqci5wcm90b3R5cGUuZ2V0SGFzaFN0cmluZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tYXAuZ2V0Q2VudGVyKCkscj1NYXRoLnJvdW5kKDEwMCp0aGlzLl9tYXAuZ2V0Wm9vbSgpKS8xMDAsbj1NYXRoLmNlaWwoKHIqTWF0aC5MTjIrTWF0aC5sb2coNTEyLzM2MC8uNSkpL01hdGguTE4xMCksaT1NYXRoLnBvdygxMCxuKSxhPU1hdGgucm91bmQoZS5sbmcqaSkvaSxvPU1hdGgucm91bmQoZS5sYXQqaSkvaSxzPXRoaXMuX21hcC5nZXRCZWFyaW5nKCksbD10aGlzLl9tYXAuZ2V0UGl0Y2goKSxjPVwiXCI7cmV0dXJuIGMrPXQ/XCIjL1wiK2ErXCIvXCIrbytcIi9cIityOlwiI1wiK3IrXCIvXCIrbytcIi9cIithLChzfHxsKSYmKGMrPVwiL1wiK01hdGgucm91bmQoMTAqcykvMTApLGwmJihjKz1cIi9cIitNYXRoLnJvdW5kKGwpKSxjfSxqci5wcm90b3R5cGUuX29uSGFzaENoYW5nZT1mdW5jdGlvbigpe3ZhciBlPXQuZGVmYXVsdC5sb2NhdGlvbi5oYXNoLnJlcGxhY2UoXCIjXCIsXCJcIikuc3BsaXQoXCIvXCIpO3JldHVybiBlLmxlbmd0aD49MyYmKHRoaXMuX21hcC5qdW1wVG8oe2NlbnRlcjpbK2VbMl0sK2VbMV1dLHpvb206K2VbMF0sYmVhcmluZzorKGVbM118fDApLHBpdGNoOisoZVs0XXx8MCl9KSwhMCl9LGpyLnByb3RvdHlwZS5fdXBkYXRlSGFzaFVudGhyb3R0bGVkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRIYXNoU3RyaW5nKCk7dC5kZWZhdWx0Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHQuZGVmYXVsdC5oaXN0b3J5LnN0YXRlLFwiXCIsZSl9O3ZhciBWcj1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpLGEpe3ZvaWQgMD09PWEmJihhPXt9KTt2YXIgbz1zLm1vdXNlUG9zKG4uZ2V0Q2FudmFzQ29udGFpbmVyKCksaSksbD1uLnVucHJvamVjdChvKTtlLmNhbGwodGhpcyxyLHQuZXh0ZW5kKHtwb2ludDpvLGxuZ0xhdDpsLG9yaWdpbmFsRXZlbnQ6aX0sYSkpLHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy50YXJnZXQ9bn1lJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cjt2YXIgbj17ZGVmYXVsdFByZXZlbnRlZDp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIHIucHJvdG90eXBlLnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKCl7dGhpcy5fZGVmYXVsdFByZXZlbnRlZD0hMH0sbi5kZWZhdWx0UHJldmVudGVkLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0UHJldmVudGVkfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhyLnByb3RvdHlwZSxuKSxyfSh0LkV2ZW50KSxVcj1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpKXt2YXIgYT1zLnRvdWNoUG9zKG4uZ2V0Q2FudmFzQ29udGFpbmVyKCksaSksbz1hLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbi51bnByb2plY3QodCl9KSxsPWEucmVkdWNlKGZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0LmFkZChlLmRpdihuLmxlbmd0aCkpfSxuZXcgdC5kZWZhdWx0JDEoMCwwKSksYz1uLnVucHJvamVjdChsKTtlLmNhbGwodGhpcyxyLHtwb2ludHM6YSxwb2ludDpsLGxuZ0xhdHM6byxsbmdMYXQ6YyxvcmlnaW5hbEV2ZW50Oml9KSx0aGlzLl9kZWZhdWx0UHJldmVudGVkPSExfWUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yO3ZhciBuPXtkZWZhdWx0UHJldmVudGVkOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5wcm90b3R5cGUucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oKXt0aGlzLl9kZWZhdWx0UHJldmVudGVkPSEwfSxuLmRlZmF1bHRQcmV2ZW50ZWQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHIucHJvdG90eXBlLG4pLHJ9KHQuRXZlbnQpLHFyPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyLG4pe3QuY2FsbCh0aGlzLGUse29yaWdpbmFsRXZlbnQ6bn0pLHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITF9dCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWU7dmFyIHI9e2RlZmF1bHRQcmV2ZW50ZWQ6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiBlLnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITB9LHIuZGVmYXVsdFByZXZlbnRlZC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdFByZXZlbnRlZH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsciksZX0odC5FdmVudCksSHI9ZnVuY3Rpb24oZSl7dGhpcy5fbWFwPWUsdGhpcy5fZWw9ZS5nZXRDYW52YXNDb250YWluZXIoKSx0aGlzLl9kZWx0YT0wLHQuYmluZEFsbChbXCJfb25XaGVlbFwiLFwiX29uVGltZW91dFwiLFwiX29uU2Nyb2xsRnJhbWVcIixcIl9vblNjcm9sbEZpbmlzaGVkXCJdLHRoaXMpfTtIci5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9lbmFibGVkfSxIci5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2FjdGl2ZX0sSHIucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbih0KXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fZW5hYmxlZD0hMCx0aGlzLl9hcm91bmRDZW50ZXI9dCYmXCJjZW50ZXJcIj09PXQuYXJvdW5kKX0sSHIucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpJiYodGhpcy5fZW5hYmxlZD0hMSl9LEhyLnByb3RvdHlwZS5vbldoZWVsPWZ1bmN0aW9uKGUpe2lmKHRoaXMuaXNFbmFibGVkKCkpe3ZhciByPWUuZGVsdGFNb2RlPT09dC5kZWZhdWx0LldoZWVsRXZlbnQuRE9NX0RFTFRBX0xJTkU/NDAqZS5kZWx0YVk6ZS5kZWx0YVksbj1hLm5vdygpLGk9bi0odGhpcy5fbGFzdFdoZWVsRXZlbnRUaW1lfHwwKTt0aGlzLl9sYXN0V2hlZWxFdmVudFRpbWU9biwwIT09ciYmciU0LjAwMDI0NDE0MDYyNT09MD90aGlzLl90eXBlPVwid2hlZWxcIjowIT09ciYmTWF0aC5hYnMocik8ND90aGlzLl90eXBlPVwidHJhY2twYWRcIjppPjQwMD8odGhpcy5fdHlwZT1udWxsLHRoaXMuX2xhc3RWYWx1ZT1yLHRoaXMuX3RpbWVvdXQ9c2V0VGltZW91dCh0aGlzLl9vblRpbWVvdXQsNDAsZSkpOnRoaXMuX3R5cGV8fCh0aGlzLl90eXBlPU1hdGguYWJzKGkqcik8MjAwP1widHJhY2twYWRcIjpcIndoZWVsXCIsdGhpcy5fdGltZW91dCYmKGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KSx0aGlzLl90aW1lb3V0PW51bGwscis9dGhpcy5fbGFzdFZhbHVlKSksZS5zaGlmdEtleSYmciYmKHIvPTQpLHRoaXMuX3R5cGUmJih0aGlzLl9sYXN0V2hlZWxFdmVudD1lLHRoaXMuX2RlbHRhLT1yLHRoaXMuaXNBY3RpdmUoKXx8dGhpcy5fc3RhcnQoZSkpLGUucHJldmVudERlZmF1bHQoKX19LEhyLnByb3RvdHlwZS5fb25UaW1lb3V0PWZ1bmN0aW9uKHQpe3RoaXMuX3R5cGU9XCJ3aGVlbFwiLHRoaXMuX2RlbHRhLT10aGlzLl9sYXN0VmFsdWUsdGhpcy5pc0FjdGl2ZSgpfHx0aGlzLl9zdGFydCh0KX0sSHIucHJvdG90eXBlLl9zdGFydD1mdW5jdGlvbihlKXtpZih0aGlzLl9kZWx0YSl7dGhpcy5fZnJhbWVJZCYmKHRoaXMuX21hcC5fY2FuY2VsUmVuZGVyRnJhbWUodGhpcy5fZnJhbWVJZCksdGhpcy5fZnJhbWVJZD1udWxsKSx0aGlzLl9hY3RpdmU9ITAsdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoXCJtb3Zlc3RhcnRcIix7b3JpZ2luYWxFdmVudDplfSkpLHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KFwiem9vbXN0YXJ0XCIse29yaWdpbmFsRXZlbnQ6ZX0pKSx0aGlzLl9maW5pc2hUaW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy5fZmluaXNoVGltZW91dCk7dmFyIHI9cy5tb3VzZVBvcyh0aGlzLl9lbCxlKTt0aGlzLl9hcm91bmQ9Ry5jb252ZXJ0KHRoaXMuX2Fyb3VuZENlbnRlcj90aGlzLl9tYXAuZ2V0Q2VudGVyKCk6dGhpcy5fbWFwLnVucHJvamVjdChyKSksdGhpcy5fYXJvdW5kUG9pbnQ9dGhpcy5fbWFwLnRyYW5zZm9ybS5sb2NhdGlvblBvaW50KHRoaXMuX2Fyb3VuZCksdGhpcy5fZnJhbWVJZHx8KHRoaXMuX2ZyYW1lSWQ9dGhpcy5fbWFwLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fb25TY3JvbGxGcmFtZSkpfX0sSHIucHJvdG90eXBlLl9vblNjcm9sbEZyYW1lPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZih0aGlzLl9mcmFtZUlkPW51bGwsdGhpcy5pc0FjdGl2ZSgpKXt2YXIgcj10aGlzLl9tYXAudHJhbnNmb3JtO2lmKDAhPT10aGlzLl9kZWx0YSl7dmFyIG49XCJ3aGVlbFwiPT09dGhpcy5fdHlwZSYmTWF0aC5hYnModGhpcy5fZGVsdGEpPjQuMDAwMjQ0MTQwNjI1PzEvNDUwOi4wMSxpPTIvKDErTWF0aC5leHAoLU1hdGguYWJzKHRoaXMuX2RlbHRhKm4pKSk7dGhpcy5fZGVsdGE8MCYmMCE9PWkmJihpPTEvaSk7dmFyIG89XCJudW1iZXJcIj09dHlwZW9mIHRoaXMuX3RhcmdldFpvb20/ci56b29tU2NhbGUodGhpcy5fdGFyZ2V0Wm9vbSk6ci5zY2FsZTt0aGlzLl90YXJnZXRab29tPU1hdGgubWluKHIubWF4Wm9vbSxNYXRoLm1heChyLm1pblpvb20sci5zY2FsZVpvb20obyppKSkpLFwid2hlZWxcIj09PXRoaXMuX3R5cGUmJih0aGlzLl9zdGFydFpvb209ci56b29tLHRoaXMuX2Vhc2luZz10aGlzLl9zbW9vdGhPdXRFYXNpbmcoMjAwKSksdGhpcy5fZGVsdGE9MH12YXIgcz0hMTtpZihcIndoZWVsXCI9PT10aGlzLl90eXBlKXt2YXIgbD1NYXRoLm1pbigoYS5ub3coKS10aGlzLl9sYXN0V2hlZWxFdmVudFRpbWUpLzIwMCwxKSxjPXRoaXMuX2Vhc2luZyhsKTtyLnpvb209dC5udW1iZXIodGhpcy5fc3RhcnRab29tLHRoaXMuX3RhcmdldFpvb20sYyksbDwxP3RoaXMuX2ZyYW1lSWR8fCh0aGlzLl9mcmFtZUlkPXRoaXMuX21hcC5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX29uU2Nyb2xsRnJhbWUpKTpzPSEwfWVsc2Ugci56b29tPXRoaXMuX3RhcmdldFpvb20scz0hMDtyLnNldExvY2F0aW9uQXRQb2ludCh0aGlzLl9hcm91bmQsdGhpcy5fYXJvdW5kUG9pbnQpLHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KFwibW92ZVwiLHtvcmlnaW5hbEV2ZW50OnRoaXMuX2xhc3RXaGVlbEV2ZW50fSkpLHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KFwiem9vbVwiLHtvcmlnaW5hbEV2ZW50OnRoaXMuX2xhc3RXaGVlbEV2ZW50fSkpLHMmJih0aGlzLl9hY3RpdmU9ITEsdGhpcy5fZmluaXNoVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5fbWFwLmZpcmUobmV3IHQuRXZlbnQoXCJ6b29tZW5kXCIse29yaWdpbmFsRXZlbnQ6ZS5fbGFzdFdoZWVsRXZlbnR9KSksZS5fbWFwLmZpcmUobmV3IHQuRXZlbnQoXCJtb3ZlZW5kXCIse29yaWdpbmFsRXZlbnQ6ZS5fbGFzdFdoZWVsRXZlbnR9KSksZGVsZXRlIGUuX3RhcmdldFpvb219LDIwMCkpfX0sSHIucHJvdG90eXBlLl9zbW9vdGhPdXRFYXNpbmc9ZnVuY3Rpb24oZSl7dmFyIHI9dC5lYXNlO2lmKHRoaXMuX3ByZXZFYXNlKXt2YXIgbj10aGlzLl9wcmV2RWFzZSxpPShhLm5vdygpLW4uc3RhcnQpL24uZHVyYXRpb24sbz1uLmVhc2luZyhpKy4wMSktbi5lYXNpbmcoaSkscz0uMjcvTWF0aC5zcXJ0KG8qbysxZS00KSouMDEsbD1NYXRoLnNxcnQoLjA3MjktcypzKTtyPXQuYmV6aWVyKHMsbCwuMjUsMSl9cmV0dXJuIHRoaXMuX3ByZXZFYXNlPXtzdGFydDphLm5vdygpLGR1cmF0aW9uOmUsZWFzaW5nOnJ9LHJ9O3ZhciBHcj1mdW5jdGlvbihlKXt0aGlzLl9tYXA9ZSx0aGlzLl9lbD1lLmdldENhbnZhc0NvbnRhaW5lcigpLHRoaXMuX2NvbnRhaW5lcj1lLmdldENvbnRhaW5lcigpLHQuYmluZEFsbChbXCJfb25Nb3VzZU1vdmVcIixcIl9vbk1vdXNlVXBcIixcIl9vbktleURvd25cIl0sdGhpcyl9O0dyLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2VuYWJsZWR9LEdyLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fYWN0aXZlfSxHci5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKXx8KHRoaXMuX2VuYWJsZWQ9ITApfSxHci5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCkmJih0aGlzLl9lbmFibGVkPSExKX0sR3IucHJvdG90eXBlLm9uTW91c2VEb3duPWZ1bmN0aW9uKGUpe3RoaXMuaXNFbmFibGVkKCkmJmUuc2hpZnRLZXkmJjA9PT1lLmJ1dHRvbiYmKHQuZGVmYXVsdC5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsdGhpcy5fb25Nb3VzZU1vdmUsITEpLHQuZGVmYXVsdC5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLHRoaXMuX29uS2V5RG93biwhMSksdC5kZWZhdWx0LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsdGhpcy5fb25Nb3VzZVVwLCExKSxzLmRpc2FibGVEcmFnKCksdGhpcy5fc3RhcnRQb3M9cy5tb3VzZVBvcyh0aGlzLl9lbCxlKSx0aGlzLl9hY3RpdmU9ITApfSxHci5wcm90b3R5cGUuX29uTW91c2VNb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3N0YXJ0UG9zLHI9cy5tb3VzZVBvcyh0aGlzLl9lbCx0KTt0aGlzLl9ib3h8fCh0aGlzLl9ib3g9cy5jcmVhdGUoXCJkaXZcIixcIm1hcGJveGdsLWJveHpvb21cIix0aGlzLl9jb250YWluZXIpLHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtY3Jvc3NoYWlyXCIpLHRoaXMuX2ZpcmVFdmVudChcImJveHpvb21zdGFydFwiLHQpKTt2YXIgbj1NYXRoLm1pbihlLngsci54KSxpPU1hdGgubWF4KGUueCxyLngpLGE9TWF0aC5taW4oZS55LHIueSksbz1NYXRoLm1heChlLnksci55KTtzLnNldFRyYW5zZm9ybSh0aGlzLl9ib3gsXCJ0cmFuc2xhdGUoXCIrbitcInB4LFwiK2ErXCJweClcIiksdGhpcy5fYm94LnN0eWxlLndpZHRoPWktbitcInB4XCIsdGhpcy5fYm94LnN0eWxlLmhlaWdodD1vLWErXCJweFwifSxHci5wcm90b3R5cGUuX29uTW91c2VVcD1mdW5jdGlvbihlKXtpZigwPT09ZS5idXR0b24pe3ZhciByPXRoaXMuX3N0YXJ0UG9zLG49cy5tb3VzZVBvcyh0aGlzLl9lbCxlKSxpPShuZXcgWSkuZXh0ZW5kKHRoaXMuX21hcC51bnByb2plY3QocikpLmV4dGVuZCh0aGlzLl9tYXAudW5wcm9qZWN0KG4pKTt0aGlzLl9maW5pc2goKSxzLnN1cHByZXNzQ2xpY2soKSxyLng9PT1uLngmJnIueT09PW4ueT90aGlzLl9maXJlRXZlbnQoXCJib3h6b29tY2FuY2VsXCIsZSk6dGhpcy5fbWFwLmZpdEJvdW5kcyhpLHtsaW5lYXI6ITB9KS5maXJlKG5ldyB0LkV2ZW50KFwiYm94em9vbWVuZFwiLHtvcmlnaW5hbEV2ZW50OmUsYm94Wm9vbUJvdW5kczppfSkpfX0sR3IucHJvdG90eXBlLl9vbktleURvd249ZnVuY3Rpb24odCl7Mjc9PT10LmtleUNvZGUmJih0aGlzLl9maW5pc2goKSx0aGlzLl9maXJlRXZlbnQoXCJib3h6b29tY2FuY2VsXCIsdCkpfSxHci5wcm90b3R5cGUuX2ZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMSx0LmRlZmF1bHQuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHRoaXMuX29uTW91c2VNb3ZlLCExKSx0LmRlZmF1bHQuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIix0aGlzLl9vbktleURvd24sITEpLHQuZGVmYXVsdC5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLHRoaXMuX29uTW91c2VVcCwhMSksdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1jcm9zc2hhaXJcIiksdGhpcy5fYm94JiYocy5yZW1vdmUodGhpcy5fYm94KSx0aGlzLl9ib3g9bnVsbCkscy5lbmFibGVEcmFnKCl9LEdyLnByb3RvdHlwZS5fZmlyZUV2ZW50PWZ1bmN0aW9uKGUscil7cmV0dXJuIHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KGUse29yaWdpbmFsRXZlbnQ6cn0pKX07dmFyIFlyPXQuYmV6aWVyKDAsMCwuMjUsMSksV3I9ZnVuY3Rpb24oZSxyKXt0aGlzLl9tYXA9ZSx0aGlzLl9lbD1yLmVsZW1lbnR8fGUuZ2V0Q2FudmFzQ29udGFpbmVyKCksdGhpcy5fc3RhdGU9XCJkaXNhYmxlZFwiLHRoaXMuX2J1dHRvbj1yLmJ1dHRvbnx8XCJyaWdodFwiLHRoaXMuX2JlYXJpbmdTbmFwPXIuYmVhcmluZ1NuYXB8fDAsdGhpcy5fcGl0Y2hXaXRoUm90YXRlPSExIT09ci5waXRjaFdpdGhSb3RhdGUsdC5iaW5kQWxsKFtcIl9vbk1vdXNlTW92ZVwiLFwiX29uTW91c2VVcFwiLFwiX29uQmx1clwiLFwiX29uRHJhZ0ZyYW1lXCJdLHRoaXMpfTtXci5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuXCJkaXNhYmxlZFwiIT09dGhpcy5fc3RhdGV9LFdyLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVyblwiYWN0aXZlXCI9PT10aGlzLl9zdGF0ZX0sV3IucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9zdGF0ZT1cImVuYWJsZWRcIil9LFdyLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7aWYodGhpcy5pc0VuYWJsZWQoKSlzd2l0Y2godGhpcy5fc3RhdGUpe2Nhc2VcImFjdGl2ZVwiOnRoaXMuX3N0YXRlPVwiZGlzYWJsZWRcIix0aGlzLl91bmJpbmQoKSx0aGlzLl9kZWFjdGl2YXRlKCksdGhpcy5fZmlyZUV2ZW50KFwicm90YXRlZW5kXCIpLHRoaXMuX3BpdGNoV2l0aFJvdGF0ZSYmdGhpcy5fZmlyZUV2ZW50KFwicGl0Y2hlbmRcIiksdGhpcy5fZmlyZUV2ZW50KFwibW92ZWVuZFwiKTticmVhaztjYXNlXCJwZW5kaW5nXCI6dGhpcy5fc3RhdGU9XCJkaXNhYmxlZFwiLHRoaXMuX3VuYmluZCgpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fc3RhdGU9XCJkaXNhYmxlZFwifX0sV3IucHJvdG90eXBlLm9uTW91c2VEb3duPWZ1bmN0aW9uKGUpe2lmKFwiZW5hYmxlZFwiPT09dGhpcy5fc3RhdGUpe2lmKFwicmlnaHRcIj09PXRoaXMuX2J1dHRvbil7aWYodGhpcy5fZXZlbnRCdXR0b249cy5tb3VzZUJ1dHRvbihlKSx0aGlzLl9ldmVudEJ1dHRvbiE9PShlLmN0cmxLZXk/MDoyKSlyZXR1cm59ZWxzZXtpZihlLmN0cmxLZXl8fDAhPT1zLm1vdXNlQnV0dG9uKGUpKXJldHVybjt0aGlzLl9ldmVudEJ1dHRvbj0wfXMuZGlzYWJsZURyYWcoKSx0LmRlZmF1bHQuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHRoaXMuX29uTW91c2VNb3ZlLHtjYXB0dXJlOiEwfSksdC5kZWZhdWx0LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsdGhpcy5fb25Nb3VzZVVwKSx0LmRlZmF1bHQuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIix0aGlzLl9vbkJsdXIpLHRoaXMuX3N0YXRlPVwicGVuZGluZ1wiLHRoaXMuX2luZXJ0aWE9W1thLm5vdygpLHRoaXMuX21hcC5nZXRCZWFyaW5nKCldXSx0aGlzLl9wcmV2aW91c1Bvcz1zLm1vdXNlUG9zKHRoaXMuX2VsLGUpLHRoaXMuX2NlbnRlcj10aGlzLl9tYXAudHJhbnNmb3JtLmNlbnRlclBvaW50LGUucHJldmVudERlZmF1bHQoKX19LFdyLnByb3RvdHlwZS5fb25Nb3VzZU1vdmU9ZnVuY3Rpb24odCl7dGhpcy5fbGFzdE1vdmVFdmVudD10LHRoaXMuX3Bvcz1zLm1vdXNlUG9zKHRoaXMuX2VsLHQpLFwicGVuZGluZ1wiPT09dGhpcy5fc3RhdGUmJih0aGlzLl9zdGF0ZT1cImFjdGl2ZVwiLHRoaXMuX2ZpcmVFdmVudChcInJvdGF0ZXN0YXJ0XCIsdCksdGhpcy5fZmlyZUV2ZW50KFwibW92ZXN0YXJ0XCIsdCksdGhpcy5fcGl0Y2hXaXRoUm90YXRlJiZ0aGlzLl9maXJlRXZlbnQoXCJwaXRjaHN0YXJ0XCIsdCkpLHRoaXMuX2ZyYW1lSWR8fCh0aGlzLl9mcmFtZUlkPXRoaXMuX21hcC5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX29uRHJhZ0ZyYW1lKSl9LFdyLnByb3RvdHlwZS5fb25EcmFnRnJhbWU9ZnVuY3Rpb24oKXt0aGlzLl9mcmFtZUlkPW51bGw7dmFyIHQ9dGhpcy5fbGFzdE1vdmVFdmVudDtpZih0KXt2YXIgZT10aGlzLl9tYXAudHJhbnNmb3JtLHI9dGhpcy5fcHJldmlvdXNQb3Msbj10aGlzLl9wb3MsaT0uOCooci54LW4ueCksbz0tLjUqKHIueS1uLnkpLHM9ZS5iZWFyaW5nLWksbD1lLnBpdGNoLW8sYz10aGlzLl9pbmVydGlhLHU9Y1tjLmxlbmd0aC0xXTt0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKSxjLnB1c2goW2Eubm93KCksdGhpcy5fbWFwLl9ub3JtYWxpemVCZWFyaW5nKHMsdVsxXSldKSxlLmJlYXJpbmc9cyx0aGlzLl9waXRjaFdpdGhSb3RhdGUmJih0aGlzLl9maXJlRXZlbnQoXCJwaXRjaFwiLHQpLGUucGl0Y2g9bCksdGhpcy5fZmlyZUV2ZW50KFwicm90YXRlXCIsdCksdGhpcy5fZmlyZUV2ZW50KFwibW92ZVwiLHQpLGRlbGV0ZSB0aGlzLl9sYXN0TW92ZUV2ZW50LHRoaXMuX3ByZXZpb3VzUG9zPXRoaXMuX3Bvc319LFdyLnByb3RvdHlwZS5fb25Nb3VzZVVwPWZ1bmN0aW9uKHQpe2lmKHMubW91c2VCdXR0b24odCk9PT10aGlzLl9ldmVudEJ1dHRvbilzd2l0Y2godGhpcy5fc3RhdGUpe2Nhc2VcImFjdGl2ZVwiOnRoaXMuX3N0YXRlPVwiZW5hYmxlZFwiLHMuc3VwcHJlc3NDbGljaygpLHRoaXMuX3VuYmluZCgpLHRoaXMuX2RlYWN0aXZhdGUoKSx0aGlzLl9pbmVydGlhbFJvdGF0ZSh0KTticmVhaztjYXNlXCJwZW5kaW5nXCI6dGhpcy5fc3RhdGU9XCJlbmFibGVkXCIsdGhpcy5fdW5iaW5kKCl9fSxXci5wcm90b3R5cGUuX29uQmx1cj1mdW5jdGlvbih0KXtzd2l0Y2godGhpcy5fc3RhdGUpe2Nhc2VcImFjdGl2ZVwiOnRoaXMuX3N0YXRlPVwiZW5hYmxlZFwiLHRoaXMuX3VuYmluZCgpLHRoaXMuX2RlYWN0aXZhdGUoKSx0aGlzLl9maXJlRXZlbnQoXCJyb3RhdGVlbmRcIix0KSx0aGlzLl9waXRjaFdpdGhSb3RhdGUmJnRoaXMuX2ZpcmVFdmVudChcInBpdGNoZW5kXCIsdCksdGhpcy5fZmlyZUV2ZW50KFwibW92ZWVuZFwiLHQpO2JyZWFrO2Nhc2VcInBlbmRpbmdcIjp0aGlzLl9zdGF0ZT1cImVuYWJsZWRcIix0aGlzLl91bmJpbmQoKX19LFdyLnByb3RvdHlwZS5fdW5iaW5kPWZ1bmN0aW9uKCl7dC5kZWZhdWx0LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIix0aGlzLl9vbk1vdXNlTW92ZSx7Y2FwdHVyZTohMH0pLHQuZGVmYXVsdC5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLHRoaXMuX29uTW91c2VVcCksdC5kZWZhdWx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJibHVyXCIsdGhpcy5fb25CbHVyKSxzLmVuYWJsZURyYWcoKX0sV3IucHJvdG90eXBlLl9kZWFjdGl2YXRlPWZ1bmN0aW9uKCl7dGhpcy5fZnJhbWVJZCYmKHRoaXMuX21hcC5fY2FuY2VsUmVuZGVyRnJhbWUodGhpcy5fZnJhbWVJZCksdGhpcy5fZnJhbWVJZD1udWxsKSxkZWxldGUgdGhpcy5fbGFzdE1vdmVFdmVudCxkZWxldGUgdGhpcy5fcHJldmlvdXNQb3N9LFdyLnByb3RvdHlwZS5faW5lcnRpYWxSb3RhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9maXJlRXZlbnQoXCJyb3RhdGVlbmRcIix0KSx0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKTt2YXIgcj10aGlzLl9tYXAsbj1yLmdldEJlYXJpbmcoKSxpPXRoaXMuX2luZXJ0aWEsYT1mdW5jdGlvbigpe01hdGguYWJzKG4pPGUuX2JlYXJpbmdTbmFwP3IucmVzZXROb3J0aCh7bm9Nb3ZlU3RhcnQ6ITB9LHtvcmlnaW5hbEV2ZW50OnR9KTplLl9maXJlRXZlbnQoXCJtb3ZlZW5kXCIsdCksZS5fcGl0Y2hXaXRoUm90YXRlJiZlLl9maXJlRXZlbnQoXCJwaXRjaGVuZFwiLHQpfTtpZihpLmxlbmd0aDwyKWEoKTtlbHNle3ZhciBvPWlbMF0scz1pW2kubGVuZ3RoLTFdLGw9aVtpLmxlbmd0aC0yXSxjPXIuX25vcm1hbGl6ZUJlYXJpbmcobixsWzFdKSx1PXNbMV0tb1sxXSxoPXU8MD8tMToxLGY9KHNbMF0tb1swXSkvMWUzO2lmKDAhPT11JiYwIT09Zil7dmFyIHA9TWF0aC5hYnModSooLjI1L2YpKTtwPjE4MCYmKHA9MTgwKTt2YXIgZD1wLzE4MDtjKz1oKnAqKGQvMiksTWF0aC5hYnMoci5fbm9ybWFsaXplQmVhcmluZyhjLDApKTx0aGlzLl9iZWFyaW5nU25hcCYmKGM9ci5fbm9ybWFsaXplQmVhcmluZygwLGMpKSxyLnJvdGF0ZVRvKGMse2R1cmF0aW9uOjFlMypkLGVhc2luZzpZcixub01vdmVTdGFydDohMH0se29yaWdpbmFsRXZlbnQ6dH0pfWVsc2UgYSgpfX0sV3IucHJvdG90eXBlLl9maXJlRXZlbnQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoZSxyP3tvcmlnaW5hbEV2ZW50OnJ9Ont9KSl9LFdyLnByb3RvdHlwZS5fZHJhaW5JbmVydGlhQnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2luZXJ0aWEsZT1hLm5vdygpO3QubGVuZ3RoPjAmJmUtdFswXVswXT4xNjA7KXQuc2hpZnQoKX07dmFyIFhyPXQuYmV6aWVyKDAsMCwuMywxKSxacj1mdW5jdGlvbihlKXt0aGlzLl9tYXA9ZSx0aGlzLl9lbD1lLmdldENhbnZhc0NvbnRhaW5lcigpLHRoaXMuX3N0YXRlPVwiZGlzYWJsZWRcIix0LmJpbmRBbGwoW1wiX29uTW92ZVwiLFwiX29uTW91c2VVcFwiLFwiX29uVG91Y2hFbmRcIixcIl9vbkJsdXJcIixcIl9vbkRyYWdGcmFtZVwiXSx0aGlzKX07WnIucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVyblwiZGlzYWJsZWRcIiE9PXRoaXMuX3N0YXRlfSxaci5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm5cImFjdGl2ZVwiPT09dGhpcy5fc3RhdGV9LFpyLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fZWwuY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLXRvdWNoLWRyYWctcGFuXCIpLHRoaXMuX3N0YXRlPVwiZW5hYmxlZFwiKX0sWnIucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXtpZih0aGlzLmlzRW5hYmxlZCgpKXN3aXRjaCh0aGlzLl9lbC5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtdG91Y2gtZHJhZy1wYW5cIiksdGhpcy5fc3RhdGUpe2Nhc2VcImFjdGl2ZVwiOnRoaXMuX3N0YXRlPVwiZGlzYWJsZWRcIix0aGlzLl91bmJpbmQoKSx0aGlzLl9kZWFjdGl2YXRlKCksdGhpcy5fZmlyZUV2ZW50KFwiZHJhZ2VuZFwiKSx0aGlzLl9maXJlRXZlbnQoXCJtb3ZlZW5kXCIpO2JyZWFrO2Nhc2VcInBlbmRpbmdcIjp0aGlzLl9zdGF0ZT1cImRpc2FibGVkXCIsdGhpcy5fdW5iaW5kKCk7YnJlYWs7ZGVmYXVsdDp0aGlzLl9zdGF0ZT1cImRpc2FibGVkXCJ9fSxaci5wcm90b3R5cGUub25Nb3VzZURvd249ZnVuY3Rpb24oZSl7XCJlbmFibGVkXCI9PT10aGlzLl9zdGF0ZSYmKGUuY3RybEtleXx8MCE9PXMubW91c2VCdXR0b24oZSl8fChzLmFkZEV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LmRvY3VtZW50LFwibW91c2Vtb3ZlXCIsdGhpcy5fb25Nb3ZlLHtjYXB0dXJlOiEwfSkscy5hZGRFdmVudExpc3RlbmVyKHQuZGVmYXVsdC5kb2N1bWVudCxcIm1vdXNldXBcIix0aGlzLl9vbk1vdXNlVXApLHRoaXMuX3N0YXJ0KGUpKSl9LFpyLnByb3RvdHlwZS5vblRvdWNoU3RhcnQ9ZnVuY3Rpb24oZSl7XCJlbmFibGVkXCI9PT10aGlzLl9zdGF0ZSYmKGUudG91Y2hlcy5sZW5ndGg+MXx8KHMuYWRkRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsXCJ0b3VjaG1vdmVcIix0aGlzLl9vbk1vdmUse2NhcHR1cmU6ITAscGFzc2l2ZTohMX0pLHMuYWRkRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsXCJ0b3VjaGVuZFwiLHRoaXMuX29uVG91Y2hFbmQpLHRoaXMuX3N0YXJ0KGUpKSl9LFpyLnByb3RvdHlwZS5fc3RhcnQ9ZnVuY3Rpb24oZSl7dC5kZWZhdWx0LmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsdGhpcy5fb25CbHVyKSx0aGlzLl9zdGF0ZT1cInBlbmRpbmdcIix0aGlzLl9wcmV2aW91c1Bvcz1zLm1vdXNlUG9zKHRoaXMuX2VsLGUpLHRoaXMuX2luZXJ0aWE9W1thLm5vdygpLHRoaXMuX3ByZXZpb3VzUG9zXV19LFpyLnByb3RvdHlwZS5fb25Nb3ZlPWZ1bmN0aW9uKHQpe3RoaXMuX2xhc3RNb3ZlRXZlbnQ9dCx0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fcG9zPXMubW91c2VQb3ModGhpcy5fZWwsdCksdGhpcy5fZHJhaW5JbmVydGlhQnVmZmVyKCksdGhpcy5faW5lcnRpYS5wdXNoKFthLm5vdygpLHRoaXMuX3Bvc10pLFwicGVuZGluZ1wiPT09dGhpcy5fc3RhdGUmJih0aGlzLl9zdGF0ZT1cImFjdGl2ZVwiLHRoaXMuX2ZpcmVFdmVudChcImRyYWdzdGFydFwiLHQpLHRoaXMuX2ZpcmVFdmVudChcIm1vdmVzdGFydFwiLHQpKSx0aGlzLl9mcmFtZUlkfHwodGhpcy5fZnJhbWVJZD10aGlzLl9tYXAuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9vbkRyYWdGcmFtZSkpfSxaci5wcm90b3R5cGUuX29uRHJhZ0ZyYW1lPWZ1bmN0aW9uKCl7dGhpcy5fZnJhbWVJZD1udWxsO3ZhciB0PXRoaXMuX2xhc3RNb3ZlRXZlbnQ7aWYodCl7dmFyIGU9dGhpcy5fbWFwLnRyYW5zZm9ybTtlLnNldExvY2F0aW9uQXRQb2ludChlLnBvaW50TG9jYXRpb24odGhpcy5fcHJldmlvdXNQb3MpLHRoaXMuX3BvcyksdGhpcy5fZmlyZUV2ZW50KFwiZHJhZ1wiLHQpLHRoaXMuX2ZpcmVFdmVudChcIm1vdmVcIix0KSx0aGlzLl9wcmV2aW91c1Bvcz10aGlzLl9wb3MsZGVsZXRlIHRoaXMuX2xhc3RNb3ZlRXZlbnR9fSxaci5wcm90b3R5cGUuX29uTW91c2VVcD1mdW5jdGlvbih0KXtpZigwPT09cy5tb3VzZUJ1dHRvbih0KSlzd2l0Y2godGhpcy5fc3RhdGUpe2Nhc2VcImFjdGl2ZVwiOnRoaXMuX3N0YXRlPVwiZW5hYmxlZFwiLHMuc3VwcHJlc3NDbGljaygpLHRoaXMuX3VuYmluZCgpLHRoaXMuX2RlYWN0aXZhdGUoKSx0aGlzLl9pbmVydGlhbFBhbih0KTticmVhaztjYXNlXCJwZW5kaW5nXCI6dGhpcy5fc3RhdGU9XCJlbmFibGVkXCIsdGhpcy5fdW5iaW5kKCl9fSxaci5wcm90b3R5cGUuX29uVG91Y2hFbmQ9ZnVuY3Rpb24odCl7c3dpdGNoKHRoaXMuX3N0YXRlKXtjYXNlXCJhY3RpdmVcIjp0aGlzLl9zdGF0ZT1cImVuYWJsZWRcIix0aGlzLl91bmJpbmQoKSx0aGlzLl9kZWFjdGl2YXRlKCksdGhpcy5faW5lcnRpYWxQYW4odCk7YnJlYWs7Y2FzZVwicGVuZGluZ1wiOnRoaXMuX3N0YXRlPVwiZW5hYmxlZFwiLHRoaXMuX3VuYmluZCgpfX0sWnIucHJvdG90eXBlLl9vbkJsdXI9ZnVuY3Rpb24odCl7c3dpdGNoKHRoaXMuX3N0YXRlKXtjYXNlXCJhY3RpdmVcIjp0aGlzLl9zdGF0ZT1cImVuYWJsZWRcIix0aGlzLl91bmJpbmQoKSx0aGlzLl9kZWFjdGl2YXRlKCksdGhpcy5fZmlyZUV2ZW50KFwiZHJhZ2VuZFwiLHQpLHRoaXMuX2ZpcmVFdmVudChcIm1vdmVlbmRcIix0KTticmVhaztjYXNlXCJwZW5kaW5nXCI6dGhpcy5fc3RhdGU9XCJlbmFibGVkXCIsdGhpcy5fdW5iaW5kKCl9fSxaci5wcm90b3R5cGUuX3VuYmluZD1mdW5jdGlvbigpe3MucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsXCJ0b3VjaG1vdmVcIix0aGlzLl9vbk1vdmUse2NhcHR1cmU6ITAscGFzc2l2ZTohMX0pLHMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsXCJ0b3VjaGVuZFwiLHRoaXMuX29uVG91Y2hFbmQpLHMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsXCJtb3VzZW1vdmVcIix0aGlzLl9vbk1vdmUse2NhcHR1cmU6ITB9KSxzLnJlbW92ZUV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LmRvY3VtZW50LFwibW91c2V1cFwiLHRoaXMuX29uTW91c2VVcCkscy5yZW1vdmVFdmVudExpc3RlbmVyKHQuZGVmYXVsdCxcImJsdXJcIix0aGlzLl9vbkJsdXIpfSxaci5wcm90b3R5cGUuX2RlYWN0aXZhdGU9ZnVuY3Rpb24oKXt0aGlzLl9mcmFtZUlkJiYodGhpcy5fbWFwLl9jYW5jZWxSZW5kZXJGcmFtZSh0aGlzLl9mcmFtZUlkKSx0aGlzLl9mcmFtZUlkPW51bGwpLGRlbGV0ZSB0aGlzLl9sYXN0TW92ZUV2ZW50LGRlbGV0ZSB0aGlzLl9wcmV2aW91c1BvcyxkZWxldGUgdGhpcy5fcG9zfSxaci5wcm90b3R5cGUuX2luZXJ0aWFsUGFuPWZ1bmN0aW9uKHQpe3RoaXMuX2ZpcmVFdmVudChcImRyYWdlbmRcIix0KSx0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKTt2YXIgZT10aGlzLl9pbmVydGlhO2lmKGUubGVuZ3RoPDIpdGhpcy5fZmlyZUV2ZW50KFwibW92ZWVuZFwiLHQpO2Vsc2V7dmFyIHI9ZVtlLmxlbmd0aC0xXSxuPWVbMF0saT1yWzFdLnN1YihuWzFdKSxhPShyWzBdLW5bMF0pLzFlMztpZigwPT09YXx8clsxXS5lcXVhbHMoblsxXSkpdGhpcy5fZmlyZUV2ZW50KFwibW92ZWVuZFwiLHQpO2Vsc2V7dmFyIG89aS5tdWx0KC4zL2EpLHM9by5tYWcoKTtzPjE0MDAmJihzPTE0MDAsby5fdW5pdCgpLl9tdWx0KHMpKTt2YXIgbD1zLzc1MCxjPW8ubXVsdCgtbC8yKTt0aGlzLl9tYXAucGFuQnkoYyx7ZHVyYXRpb246MWUzKmwsZWFzaW5nOlhyLG5vTW92ZVN0YXJ0OiEwfSx7b3JpZ2luYWxFdmVudDp0fSl9fX0sWnIucHJvdG90eXBlLl9maXJlRXZlbnQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoZSxyP3tvcmlnaW5hbEV2ZW50OnJ9Ont9KSl9LFpyLnByb3RvdHlwZS5fZHJhaW5JbmVydGlhQnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2luZXJ0aWEsZT1hLm5vdygpO3QubGVuZ3RoPjAmJmUtdFswXVswXT4xNjA7KXQuc2hpZnQoKX07dmFyICRyPWZ1bmN0aW9uKGUpe3RoaXMuX21hcD1lLHRoaXMuX2VsPWUuZ2V0Q2FudmFzQ29udGFpbmVyKCksdC5iaW5kQWxsKFtcIl9vbktleURvd25cIl0sdGhpcyl9O2Z1bmN0aW9uIEpyKHQpe3JldHVybiB0KigyLXQpfSRyLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2VuYWJsZWR9LCRyLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fZWwuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIix0aGlzLl9vbktleURvd24sITEpLHRoaXMuX2VuYWJsZWQ9ITApfSwkci5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCkmJih0aGlzLl9lbC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLHRoaXMuX29uS2V5RG93biksdGhpcy5fZW5hYmxlZD0hMSl9LCRyLnByb3RvdHlwZS5fb25LZXlEb3duPWZ1bmN0aW9uKHQpe2lmKCEodC5hbHRLZXl8fHQuY3RybEtleXx8dC5tZXRhS2V5KSl7dmFyIGU9MCxyPTAsbj0wLGk9MCxhPTA7c3dpdGNoKHQua2V5Q29kZSl7Y2FzZSA2MTpjYXNlIDEwNzpjYXNlIDE3MTpjYXNlIDE4NzplPTE7YnJlYWs7Y2FzZSAxODk6Y2FzZSAxMDk6Y2FzZSAxNzM6ZT0tMTticmVhaztjYXNlIDM3OnQuc2hpZnRLZXk/cj0tMToodC5wcmV2ZW50RGVmYXVsdCgpLGk9LTEpO2JyZWFrO2Nhc2UgMzk6dC5zaGlmdEtleT9yPTE6KHQucHJldmVudERlZmF1bHQoKSxpPTEpO2JyZWFrO2Nhc2UgMzg6dC5zaGlmdEtleT9uPTE6KHQucHJldmVudERlZmF1bHQoKSxhPS0xKTticmVhaztjYXNlIDQwOnQuc2hpZnRLZXk/bj0tMTooYT0xLHQucHJldmVudERlZmF1bHQoKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59dmFyIG89dGhpcy5fbWFwLHM9by5nZXRab29tKCksbD17ZHVyYXRpb246MzAwLGRlbGF5RW5kRXZlbnRzOjUwMCxlYXNpbmc6SnIsem9vbTplP01hdGgucm91bmQocykrZSoodC5zaGlmdEtleT8yOjEpOnMsYmVhcmluZzpvLmdldEJlYXJpbmcoKSsxNSpyLHBpdGNoOm8uZ2V0UGl0Y2goKSsxMCpuLG9mZnNldDpbMTAwKi1pLDEwMCotYV0sY2VudGVyOm8uZ2V0Q2VudGVyKCl9O28uZWFzZVRvKGwse29yaWdpbmFsRXZlbnQ6dH0pfX07dmFyIEtyPWZ1bmN0aW9uKGUpe3RoaXMuX21hcD1lLHQuYmluZEFsbChbXCJfb25EYmxDbGlja1wiLFwiX29uWm9vbUVuZFwiXSx0aGlzKX07S3IucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZW5hYmxlZH0sS3IucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9hY3RpdmV9LEtyLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fZW5hYmxlZD0hMCl9LEtyLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VuYWJsZWQ9ITEpfSxLci5wcm90b3R5cGUub25Ub3VjaFN0YXJ0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5pc0VuYWJsZWQoKSYmKHQucG9pbnRzLmxlbmd0aD4xfHwodGhpcy5fdGFwcGVkPyhjbGVhclRpbWVvdXQodGhpcy5fdGFwcGVkKSx0aGlzLl90YXBwZWQ9bnVsbCx0aGlzLl96b29tKHQpKTp0aGlzLl90YXBwZWQ9c2V0VGltZW91dChmdW5jdGlvbigpe2UuX3RhcHBlZD1udWxsfSwzMDApKSl9LEtyLnByb3RvdHlwZS5vbkRibENsaWNrPWZ1bmN0aW9uKHQpe3RoaXMuaXNFbmFibGVkKCkmJih0Lm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKSx0aGlzLl96b29tKHQpKX0sS3IucHJvdG90eXBlLl96b29tPWZ1bmN0aW9uKHQpe3RoaXMuX2FjdGl2ZT0hMCx0aGlzLl9tYXAub24oXCJ6b29tZW5kXCIsdGhpcy5fb25ab29tRW5kKSx0aGlzLl9tYXAuem9vbVRvKHRoaXMuX21hcC5nZXRab29tKCkrKHQub3JpZ2luYWxFdmVudC5zaGlmdEtleT8tMToxKSx7YXJvdW5kOnQubG5nTGF0fSx0KX0sS3IucHJvdG90eXBlLl9vblpvb21FbmQ9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITEsdGhpcy5fbWFwLm9mZihcInpvb21lbmRcIix0aGlzLl9vblpvb21FbmQpfTt2YXIgUXI9dC5iZXppZXIoMCwwLC4xNSwxKSx0bj1mdW5jdGlvbihlKXt0aGlzLl9tYXA9ZSx0aGlzLl9lbD1lLmdldENhbnZhc0NvbnRhaW5lcigpLHQuYmluZEFsbChbXCJfb25Nb3ZlXCIsXCJfb25FbmRcIixcIl9vblRvdWNoRnJhbWVcIl0sdGhpcyl9O3RuLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2VuYWJsZWR9LHRuLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24odCl7dGhpcy5pc0VuYWJsZWQoKXx8KHRoaXMuX2VsLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC10b3VjaC16b29tLXJvdGF0ZVwiKSx0aGlzLl9lbmFibGVkPSEwLHRoaXMuX2Fyb3VuZENlbnRlcj0hIXQmJlwiY2VudGVyXCI9PT10LmFyb3VuZCl9LHRuLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VsLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC10b3VjaC16b29tLXJvdGF0ZVwiKSx0aGlzLl9lbmFibGVkPSExKX0sdG4ucHJvdG90eXBlLmRpc2FibGVSb3RhdGlvbj1mdW5jdGlvbigpe3RoaXMuX3JvdGF0aW9uRGlzYWJsZWQ9ITB9LHRuLnByb3RvdHlwZS5lbmFibGVSb3RhdGlvbj1mdW5jdGlvbigpe3RoaXMuX3JvdGF0aW9uRGlzYWJsZWQ9ITF9LHRuLnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKGUpe2lmKHRoaXMuaXNFbmFibGVkKCkmJjI9PT1lLnRvdWNoZXMubGVuZ3RoKXt2YXIgcj1zLm1vdXNlUG9zKHRoaXMuX2VsLGUudG91Y2hlc1swXSksbj1zLm1vdXNlUG9zKHRoaXMuX2VsLGUudG91Y2hlc1sxXSk7dGhpcy5fc3RhcnRWZWM9ci5zdWIobiksdGhpcy5fZ2VzdHVyZUludGVudD12b2lkIDAsdGhpcy5faW5lcnRpYT1bXSxzLmFkZEV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LmRvY3VtZW50LFwidG91Y2htb3ZlXCIsdGhpcy5fb25Nb3ZlLHtwYXNzaXZlOiExfSkscy5hZGRFdmVudExpc3RlbmVyKHQuZGVmYXVsdC5kb2N1bWVudCxcInRvdWNoZW5kXCIsdGhpcy5fb25FbmQpfX0sdG4ucHJvdG90eXBlLl9nZXRUb3VjaEV2ZW50RGF0YT1mdW5jdGlvbih0KXt2YXIgZT1zLm1vdXNlUG9zKHRoaXMuX2VsLHQudG91Y2hlc1swXSkscj1zLm1vdXNlUG9zKHRoaXMuX2VsLHQudG91Y2hlc1sxXSksbj1lLnN1YihyKTtyZXR1cm57dmVjOm4sY2VudGVyOmUuYWRkKHIpLmRpdigyKSxzY2FsZTpuLm1hZygpL3RoaXMuX3N0YXJ0VmVjLm1hZygpLGJlYXJpbmc6dGhpcy5fcm90YXRpb25EaXNhYmxlZD8wOjE4MCpuLmFuZ2xlV2l0aCh0aGlzLl9zdGFydFZlYykvTWF0aC5QSX19LHRuLnByb3RvdHlwZS5fb25Nb3ZlPWZ1bmN0aW9uKGUpe2lmKDI9PT1lLnRvdWNoZXMubGVuZ3RoKXt2YXIgcj10aGlzLl9nZXRUb3VjaEV2ZW50RGF0YShlKSxuPXIudmVjLGk9ci5zY2FsZSxhPXIuYmVhcmluZztpZighdGhpcy5fZ2VzdHVyZUludGVudCl7dmFyIG89TWF0aC5hYnMoMS1pKT4uMTU7TWF0aC5hYnMoYSk+MTA/dGhpcy5fZ2VzdHVyZUludGVudD1cInJvdGF0ZVwiOm8mJih0aGlzLl9nZXN0dXJlSW50ZW50PVwiem9vbVwiKSx0aGlzLl9nZXN0dXJlSW50ZW50JiYodGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQodGhpcy5fZ2VzdHVyZUludGVudCtcInN0YXJ0XCIse29yaWdpbmFsRXZlbnQ6ZX0pKSx0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudChcIm1vdmVzdGFydFwiLHtvcmlnaW5hbEV2ZW50OmV9KSksdGhpcy5fc3RhcnRWZWM9bil9dGhpcy5fbGFzdFRvdWNoRXZlbnQ9ZSx0aGlzLl9mcmFtZUlkfHwodGhpcy5fZnJhbWVJZD10aGlzLl9tYXAuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9vblRvdWNoRnJhbWUpKSxlLnByZXZlbnREZWZhdWx0KCl9fSx0bi5wcm90b3R5cGUuX29uVG91Y2hGcmFtZT1mdW5jdGlvbigpe3RoaXMuX2ZyYW1lSWQ9bnVsbDt2YXIgZT10aGlzLl9nZXN0dXJlSW50ZW50O2lmKGUpe3ZhciByPXRoaXMuX21hcC50cmFuc2Zvcm07dGhpcy5fc3RhcnRTY2FsZXx8KHRoaXMuX3N0YXJ0U2NhbGU9ci5zY2FsZSx0aGlzLl9zdGFydEJlYXJpbmc9ci5iZWFyaW5nKTt2YXIgbj10aGlzLl9nZXRUb3VjaEV2ZW50RGF0YSh0aGlzLl9sYXN0VG91Y2hFdmVudCksaT1uLmNlbnRlcixvPW4uYmVhcmluZyxzPW4uc2NhbGUsbD1yLnBvaW50TG9jYXRpb24oaSksYz1yLmxvY2F0aW9uUG9pbnQobCk7XCJyb3RhdGVcIj09PWUmJihyLmJlYXJpbmc9dGhpcy5fc3RhcnRCZWFyaW5nK28pLHIuem9vbT1yLnNjYWxlWm9vbSh0aGlzLl9zdGFydFNjYWxlKnMpLHIuc2V0TG9jYXRpb25BdFBvaW50KGwsYyksdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoZSx7b3JpZ2luYWxFdmVudDp0aGlzLl9sYXN0VG91Y2hFdmVudH0pKSx0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudChcIm1vdmVcIix7b3JpZ2luYWxFdmVudDp0aGlzLl9sYXN0VG91Y2hFdmVudH0pKSx0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKSx0aGlzLl9pbmVydGlhLnB1c2goW2Eubm93KCkscyxpXSl9fSx0bi5wcm90b3R5cGUuX29uRW5kPWZ1bmN0aW9uKGUpe3MucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsXCJ0b3VjaG1vdmVcIix0aGlzLl9vbk1vdmUse3Bhc3NpdmU6ITF9KSxzLnJlbW92ZUV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LmRvY3VtZW50LFwidG91Y2hlbmRcIix0aGlzLl9vbkVuZCk7dmFyIHI9dGhpcy5fZ2VzdHVyZUludGVudCxuPXRoaXMuX3N0YXJ0U2NhbGU7aWYodGhpcy5fZnJhbWVJZCYmKHRoaXMuX21hcC5fY2FuY2VsUmVuZGVyRnJhbWUodGhpcy5fZnJhbWVJZCksdGhpcy5fZnJhbWVJZD1udWxsKSxkZWxldGUgdGhpcy5fZ2VzdHVyZUludGVudCxkZWxldGUgdGhpcy5fc3RhcnRTY2FsZSxkZWxldGUgdGhpcy5fc3RhcnRCZWFyaW5nLGRlbGV0ZSB0aGlzLl9sYXN0VG91Y2hFdmVudCxyKXt0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudChyK1wiZW5kXCIse29yaWdpbmFsRXZlbnQ6ZX0pKSx0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKTt2YXIgaT10aGlzLl9pbmVydGlhLGE9dGhpcy5fbWFwO2lmKGkubGVuZ3RoPDIpYS5zbmFwVG9Ob3J0aCh7fSx7b3JpZ2luYWxFdmVudDplfSk7ZWxzZXt2YXIgbz1pW2kubGVuZ3RoLTFdLGw9aVswXSxjPWEudHJhbnNmb3JtLnNjYWxlWm9vbShuKm9bMV0pLHU9YS50cmFuc2Zvcm0uc2NhbGVab29tKG4qbFsxXSksaD1jLXUsZj0ob1swXS1sWzBdKS8xZTMscD1vWzJdO2lmKDAhPT1mJiZjIT09dSl7dmFyIGQ9LjE1KmgvZjtNYXRoLmFicyhkKT4yLjUmJihkPWQ+MD8yLjU6LTIuNSk7dmFyIGc9MWUzKk1hdGguYWJzKGQvKDEyKi4xNSkpLHY9YytkKmcvMmUzO3Y8MCYmKHY9MCksYS5lYXNlVG8oe3pvb206dixkdXJhdGlvbjpnLGVhc2luZzpRcixhcm91bmQ6dGhpcy5fYXJvdW5kQ2VudGVyP2EuZ2V0Q2VudGVyKCk6YS51bnByb2plY3QocCksbm9Nb3ZlU3RhcnQ6ITB9LHtvcmlnaW5hbEV2ZW50OmV9KX1lbHNlIGEuc25hcFRvTm9ydGgoe30se29yaWdpbmFsRXZlbnQ6ZX0pfX19LHRuLnByb3RvdHlwZS5fZHJhaW5JbmVydGlhQnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2luZXJ0aWEsZT1hLm5vdygpO3QubGVuZ3RoPjImJmUtdFswXVswXT4xNjA7KXQuc2hpZnQoKX07dmFyIGVuPXtzY3JvbGxab29tOkhyLGJveFpvb206R3IsZHJhZ1JvdGF0ZTpXcixkcmFnUGFuOlpyLGtleWJvYXJkOiRyLGRvdWJsZUNsaWNrWm9vbTpLcix0b3VjaFpvb21Sb3RhdGU6dG59LHJuPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuKXtlLmNhbGwodGhpcyksdGhpcy5fbW92aW5nPSExLHRoaXMuX3pvb21pbmc9ITEsdGhpcy50cmFuc2Zvcm09cix0aGlzLl9iZWFyaW5nU25hcD1uLmJlYXJpbmdTbmFwLHQuYmluZEFsbChbXCJfcmVuZGVyRnJhbWVDYWxsYmFja1wiXSx0aGlzKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUuZ2V0Q2VudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLmNlbnRlcn0sci5wcm90b3R5cGUuc2V0Q2VudGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuanVtcFRvKHtjZW50ZXI6dH0sZSl9LHIucHJvdG90eXBlLnBhbkJ5PWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT10LmRlZmF1bHQkMS5jb252ZXJ0KGUpLm11bHQoLTEpLHRoaXMucGFuVG8odGhpcy50cmFuc2Zvcm0uY2VudGVyLHQuZXh0ZW5kKHtvZmZzZXQ6ZX0sciksbil9LHIucHJvdG90eXBlLnBhblRvPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdGhpcy5lYXNlVG8odC5leHRlbmQoe2NlbnRlcjplfSxyKSxuKX0sci5wcm90b3R5cGUuZ2V0Wm9vbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS56b29tfSxyLnByb3RvdHlwZS5zZXRab29tPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuanVtcFRvKHt6b29tOnR9LGUpLHRoaXN9LHIucHJvdG90eXBlLnpvb21Ubz1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHRoaXMuZWFzZVRvKHQuZXh0ZW5kKHt6b29tOmV9LHIpLG4pfSxyLnByb3RvdHlwZS56b29tSW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy56b29tVG8odGhpcy5nZXRab29tKCkrMSx0LGUpLHRoaXN9LHIucHJvdG90eXBlLnpvb21PdXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy56b29tVG8odGhpcy5nZXRab29tKCktMSx0LGUpLHRoaXN9LHIucHJvdG90eXBlLmdldEJlYXJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0uYmVhcmluZ30sci5wcm90b3R5cGUuc2V0QmVhcmluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmp1bXBUbyh7YmVhcmluZzp0fSxlKSx0aGlzfSxyLnByb3RvdHlwZS5yb3RhdGVUbz1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHRoaXMuZWFzZVRvKHQuZXh0ZW5kKHtiZWFyaW5nOmV9LHIpLG4pfSxyLnByb3RvdHlwZS5yZXNldE5vcnRoPWZ1bmN0aW9uKGUscil7cmV0dXJuIHRoaXMucm90YXRlVG8oMCx0LmV4dGVuZCh7ZHVyYXRpb246MWUzfSxlKSxyKSx0aGlzfSxyLnByb3RvdHlwZS5zbmFwVG9Ob3J0aD1mdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmFicyh0aGlzLmdldEJlYXJpbmcoKSk8dGhpcy5fYmVhcmluZ1NuYXA/dGhpcy5yZXNldE5vcnRoKHQsZSk6dGhpc30sci5wcm90b3R5cGUuZ2V0UGl0Y2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ucGl0Y2h9LHIucHJvdG90eXBlLnNldFBpdGNoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuanVtcFRvKHtwaXRjaDp0fSxlKSx0aGlzfSxyLnByb3RvdHlwZS5maXRCb3VuZHM9ZnVuY3Rpb24oZSxyLG4pe2lmKFwibnVtYmVyXCI9PXR5cGVvZihyPXQuZXh0ZW5kKHtwYWRkaW5nOnt0b3A6MCxib3R0b206MCxyaWdodDowLGxlZnQ6MH0sb2Zmc2V0OlswLDBdLG1heFpvb206dGhpcy50cmFuc2Zvcm0ubWF4Wm9vbX0scikpLnBhZGRpbmcpe3ZhciBpPXIucGFkZGluZztyLnBhZGRpbmc9e3RvcDppLGJvdHRvbTppLHJpZ2h0OmksbGVmdDppfX1pZighdC5kZWZhdWx0JDEwKE9iamVjdC5rZXlzKHIucGFkZGluZykuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6MH0pLFtcImJvdHRvbVwiLFwibGVmdFwiLFwicmlnaHRcIixcInRvcFwiXSkpcmV0dXJuIHQud2Fybk9uY2UoXCJvcHRpb25zLnBhZGRpbmcgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciwgb3IgYW4gT2JqZWN0IHdpdGgga2V5cyAnYm90dG9tJywgJ2xlZnQnLCAncmlnaHQnLCAndG9wJ1wiKSx0aGlzO2U9WS5jb252ZXJ0KGUpO3ZhciBhPVsoci5wYWRkaW5nLmxlZnQtci5wYWRkaW5nLnJpZ2h0KS8yLChyLnBhZGRpbmcudG9wLXIucGFkZGluZy5ib3R0b20pLzJdLG89TWF0aC5taW4oci5wYWRkaW5nLnJpZ2h0LHIucGFkZGluZy5sZWZ0KSxzPU1hdGgubWluKHIucGFkZGluZy50b3Asci5wYWRkaW5nLmJvdHRvbSk7ci5vZmZzZXQ9W3Iub2Zmc2V0WzBdK2FbMF0sci5vZmZzZXRbMV0rYVsxXV07dmFyIGw9dC5kZWZhdWx0JDEuY29udmVydChyLm9mZnNldCksYz10aGlzLnRyYW5zZm9ybSx1PWMucHJvamVjdChlLmdldE5vcnRoV2VzdCgpKSxoPWMucHJvamVjdChlLmdldFNvdXRoRWFzdCgpKSxmPWguc3ViKHUpLHA9KGMud2lkdGgtMipvLTIqTWF0aC5hYnMobC54KSkvZi54LGQ9KGMuaGVpZ2h0LTIqcy0yKk1hdGguYWJzKGwueSkpL2YueTtyZXR1cm4gZDwwfHxwPDA/KHQud2Fybk9uY2UoXCJNYXAgY2Fubm90IGZpdCB3aXRoaW4gY2FudmFzIHdpdGggdGhlIGdpdmVuIGJvdW5kcywgcGFkZGluZywgYW5kL29yIG9mZnNldC5cIiksdGhpcyk6KHIuY2VudGVyPWMudW5wcm9qZWN0KHUuYWRkKGgpLmRpdigyKSksci56b29tPU1hdGgubWluKGMuc2NhbGVab29tKGMuc2NhbGUqTWF0aC5taW4ocCxkKSksci5tYXhab29tKSxyLmJlYXJpbmc9MCxyLmxpbmVhcj90aGlzLmVhc2VUbyhyLG4pOnRoaXMuZmx5VG8ocixuKSl9LHIucHJvdG90eXBlLmp1bXBUbz1mdW5jdGlvbihlLHIpe3RoaXMuc3RvcCgpO3ZhciBuPXRoaXMudHJhbnNmb3JtLGk9ITEsYT0hMSxvPSExO3JldHVyblwiem9vbVwiaW4gZSYmbi56b29tIT09K2Uuem9vbSYmKGk9ITAsbi56b29tPStlLnpvb20pLHZvaWQgMCE9PWUuY2VudGVyJiYobi5jZW50ZXI9Ry5jb252ZXJ0KGUuY2VudGVyKSksXCJiZWFyaW5nXCJpbiBlJiZuLmJlYXJpbmchPT0rZS5iZWFyaW5nJiYoYT0hMCxuLmJlYXJpbmc9K2UuYmVhcmluZyksXCJwaXRjaFwiaW4gZSYmbi5waXRjaCE9PStlLnBpdGNoJiYobz0hMCxuLnBpdGNoPStlLnBpdGNoKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJtb3Zlc3RhcnRcIixyKSkuZmlyZShuZXcgdC5FdmVudChcIm1vdmVcIixyKSksaSYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiem9vbXN0YXJ0XCIscikpLmZpcmUobmV3IHQuRXZlbnQoXCJ6b29tXCIscikpLmZpcmUobmV3IHQuRXZlbnQoXCJ6b29tZW5kXCIscikpLGEmJnRoaXMuZmlyZShuZXcgdC5FdmVudChcInJvdGF0ZXN0YXJ0XCIscikpLmZpcmUobmV3IHQuRXZlbnQoXCJyb3RhdGVcIixyKSkuZmlyZShuZXcgdC5FdmVudChcInJvdGF0ZWVuZFwiLHIpKSxvJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJwaXRjaHN0YXJ0XCIscikpLmZpcmUobmV3IHQuRXZlbnQoXCJwaXRjaFwiLHIpKS5maXJlKG5ldyB0LkV2ZW50KFwicGl0Y2hlbmRcIixyKSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwibW92ZWVuZFwiLHIpKX0sci5wcm90b3R5cGUuZWFzZVRvPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpczt0aGlzLnN0b3AoKSwhMT09PShlPXQuZXh0ZW5kKHtvZmZzZXQ6WzAsMF0sZHVyYXRpb246NTAwLGVhc2luZzp0LmVhc2V9LGUpKS5hbmltYXRlJiYoZS5kdXJhdGlvbj0wKTt2YXIgaT10aGlzLnRyYW5zZm9ybSxhPXRoaXMuZ2V0Wm9vbSgpLG89dGhpcy5nZXRCZWFyaW5nKCkscz10aGlzLmdldFBpdGNoKCksbD1cInpvb21cImluIGU/K2Uuem9vbTphLGM9XCJiZWFyaW5nXCJpbiBlP3RoaXMuX25vcm1hbGl6ZUJlYXJpbmcoZS5iZWFyaW5nLG8pOm8sdT1cInBpdGNoXCJpbiBlPytlLnBpdGNoOnMsaD1pLmNlbnRlclBvaW50LmFkZCh0LmRlZmF1bHQkMS5jb252ZXJ0KGUub2Zmc2V0KSksZj1pLnBvaW50TG9jYXRpb24oaCkscD1HLmNvbnZlcnQoZS5jZW50ZXJ8fGYpO3RoaXMuX25vcm1hbGl6ZUNlbnRlcihwKTt2YXIgZCxnLHY9aS5wcm9qZWN0KGYpLG09aS5wcm9qZWN0KHApLnN1Yih2KSx5PWkuem9vbVNjYWxlKGwtYSk7cmV0dXJuIGUuYXJvdW5kJiYoZD1HLmNvbnZlcnQoZS5hcm91bmQpLGc9aS5sb2NhdGlvblBvaW50KGQpKSx0aGlzLl96b29taW5nPWwhPT1hLHRoaXMuX3JvdGF0aW5nPW8hPT1jLHRoaXMuX3BpdGNoaW5nPXUhPT1zLHRoaXMuX3ByZXBhcmVFYXNlKHIsZS5ub01vdmVTdGFydCksY2xlYXJUaW1lb3V0KHRoaXMuX2Vhc2VFbmRUaW1lb3V0SUQpLHRoaXMuX2Vhc2UoZnVuY3Rpb24oZSl7aWYobi5fem9vbWluZyYmKGkuem9vbT10Lm51bWJlcihhLGwsZSkpLG4uX3JvdGF0aW5nJiYoaS5iZWFyaW5nPXQubnVtYmVyKG8sYyxlKSksbi5fcGl0Y2hpbmcmJihpLnBpdGNoPXQubnVtYmVyKHMsdSxlKSksZClpLnNldExvY2F0aW9uQXRQb2ludChkLGcpO2Vsc2V7dmFyIGY9aS56b29tU2NhbGUoaS56b29tLWEpLHA9bD5hP01hdGgubWluKDIseSk6TWF0aC5tYXgoLjUseSkseD1NYXRoLnBvdyhwLDEtZSksYj1pLnVucHJvamVjdCh2LmFkZChtLm11bHQoZSp4KSkubXVsdChmKSk7aS5zZXRMb2NhdGlvbkF0UG9pbnQoaS5yZW5kZXJXb3JsZENvcGllcz9iLndyYXAoKTpiLGgpfW4uX2ZpcmVNb3ZlRXZlbnRzKHIpfSxmdW5jdGlvbigpe2UuZGVsYXlFbmRFdmVudHM/bi5fZWFzZUVuZFRpbWVvdXRJRD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2FmdGVyRWFzZShyKX0sZS5kZWxheUVuZEV2ZW50cyk6bi5fYWZ0ZXJFYXNlKHIpfSxlKSx0aGlzfSxyLnByb3RvdHlwZS5fcHJlcGFyZUVhc2U9ZnVuY3Rpb24oZSxyKXt0aGlzLl9tb3Zpbmc9ITAscnx8dGhpcy5maXJlKG5ldyB0LkV2ZW50KFwibW92ZXN0YXJ0XCIsZSkpLHRoaXMuX3pvb21pbmcmJnRoaXMuZmlyZShuZXcgdC5FdmVudChcInpvb21zdGFydFwiLGUpKSx0aGlzLl9yb3RhdGluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwicm90YXRlc3RhcnRcIixlKSksdGhpcy5fcGl0Y2hpbmcmJnRoaXMuZmlyZShuZXcgdC5FdmVudChcInBpdGNoc3RhcnRcIixlKSl9LHIucHJvdG90eXBlLl9maXJlTW92ZUV2ZW50cz1mdW5jdGlvbihlKXt0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJtb3ZlXCIsZSkpLHRoaXMuX3pvb21pbmcmJnRoaXMuZmlyZShuZXcgdC5FdmVudChcInpvb21cIixlKSksdGhpcy5fcm90YXRpbmcmJnRoaXMuZmlyZShuZXcgdC5FdmVudChcInJvdGF0ZVwiLGUpKSx0aGlzLl9waXRjaGluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwicGl0Y2hcIixlKSl9LHIucHJvdG90eXBlLl9hZnRlckVhc2U9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fem9vbWluZyxuPXRoaXMuX3JvdGF0aW5nLGk9dGhpcy5fcGl0Y2hpbmc7dGhpcy5fbW92aW5nPSExLHRoaXMuX3pvb21pbmc9ITEsdGhpcy5fcm90YXRpbmc9ITEsdGhpcy5fcGl0Y2hpbmc9ITEsciYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiem9vbWVuZFwiLGUpKSxuJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJyb3RhdGVlbmRcIixlKSksaSYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwicGl0Y2hlbmRcIixlKSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwibW92ZWVuZFwiLGUpKX0sci5wcm90b3R5cGUuZmx5VG89ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO3RoaXMuc3RvcCgpLGU9dC5leHRlbmQoe29mZnNldDpbMCwwXSxzcGVlZDoxLjIsY3VydmU6MS40MixlYXNpbmc6dC5lYXNlfSxlKTt2YXIgaT10aGlzLnRyYW5zZm9ybSxhPXRoaXMuZ2V0Wm9vbSgpLG89dGhpcy5nZXRCZWFyaW5nKCkscz10aGlzLmdldFBpdGNoKCksbD1cInpvb21cImluIGU/dC5jbGFtcCgrZS56b29tLGkubWluWm9vbSxpLm1heFpvb20pOmEsYz1cImJlYXJpbmdcImluIGU/dGhpcy5fbm9ybWFsaXplQmVhcmluZyhlLmJlYXJpbmcsbyk6byx1PVwicGl0Y2hcImluIGU/K2UucGl0Y2g6cyxoPWkuem9vbVNjYWxlKGwtYSksZj1pLmNlbnRlclBvaW50LmFkZCh0LmRlZmF1bHQkMS5jb252ZXJ0KGUub2Zmc2V0KSkscD1pLnBvaW50TG9jYXRpb24oZiksZD1HLmNvbnZlcnQoZS5jZW50ZXJ8fHApO3RoaXMuX25vcm1hbGl6ZUNlbnRlcihkKTt2YXIgZz1pLnByb2plY3QocCksdj1pLnByb2plY3QoZCkuc3ViKGcpLG09ZS5jdXJ2ZSx5PU1hdGgubWF4KGkud2lkdGgsaS5oZWlnaHQpLHg9eS9oLGI9di5tYWcoKTtpZihcIm1pblpvb21cImluIGUpe3ZhciBfPXQuY2xhbXAoTWF0aC5taW4oZS5taW5ab29tLGEsbCksaS5taW5ab29tLGkubWF4Wm9vbSksdz15L2kuem9vbVNjYWxlKF8tYSk7bT1NYXRoLnNxcnQody9iKjIpfXZhciBrPW0qbTtmdW5jdGlvbiBBKHQpe3ZhciBlPSh4KngteSp5Kyh0Py0xOjEpKmsqaypiKmIpLygyKih0P3g6eSkqaypiKTtyZXR1cm4gTWF0aC5sb2coTWF0aC5zcXJ0KGUqZSsxKS1lKX1mdW5jdGlvbiBUKHQpe3JldHVybihNYXRoLmV4cCh0KS1NYXRoLmV4cCgtdCkpLzJ9ZnVuY3Rpb24gTSh0KXtyZXR1cm4oTWF0aC5leHAodCkrTWF0aC5leHAoLXQpKS8yfXZhciBTPUEoMCksRT1mdW5jdGlvbih0KXtyZXR1cm4gTShTKS9NKFMrbSp0KX0sQz1mdW5jdGlvbih0KXtyZXR1cm4geSooKE0oUykqKFQoZT1TK20qdCkvTShlKSktVChTKSkvaykvYjt2YXIgZX0sTD0oQSgxKS1TKS9tO2lmKE1hdGguYWJzKGIpPDFlLTZ8fCFpc0Zpbml0ZShMKSl7aWYoTWF0aC5hYnMoeS14KTwxZS02KXJldHVybiB0aGlzLmVhc2VUbyhlLHIpO3ZhciB6PXg8eT8tMToxO0w9TWF0aC5hYnMoTWF0aC5sb2coeC95KSkvbSxDPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LEU9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguZXhwKHoqbSp0KX19aWYoXCJkdXJhdGlvblwiaW4gZSllLmR1cmF0aW9uPStlLmR1cmF0aW9uO2Vsc2V7dmFyIE89XCJzY3JlZW5TcGVlZFwiaW4gZT8rZS5zY3JlZW5TcGVlZC9tOitlLnNwZWVkO2UuZHVyYXRpb249MWUzKkwvT31yZXR1cm4gZS5tYXhEdXJhdGlvbiYmZS5kdXJhdGlvbj5lLm1heER1cmF0aW9uJiYoZS5kdXJhdGlvbj0wKSx0aGlzLl96b29taW5nPSEwLHRoaXMuX3JvdGF0aW5nPW8hPT1jLHRoaXMuX3BpdGNoaW5nPXUhPT1zLHRoaXMuX3ByZXBhcmVFYXNlKHIsITEpLHRoaXMuX2Vhc2UoZnVuY3Rpb24oZSl7dmFyIGw9ZSpMLGg9MS9FKGwpO2kuem9vbT1hK2kuc2NhbGVab29tKGgpLG4uX3JvdGF0aW5nJiYoaS5iZWFyaW5nPXQubnVtYmVyKG8sYyxlKSksbi5fcGl0Y2hpbmcmJihpLnBpdGNoPXQubnVtYmVyKHMsdSxlKSk7dmFyIHA9aS51bnByb2plY3QoZy5hZGQodi5tdWx0KEMobCkpKS5tdWx0KGgpKTtpLnNldExvY2F0aW9uQXRQb2ludChpLnJlbmRlcldvcmxkQ29waWVzP3Aud3JhcCgpOnAsZiksbi5fZmlyZU1vdmVFdmVudHMocil9LGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2FmdGVyRWFzZShyKX0sZSksdGhpc30sci5wcm90b3R5cGUuaXNFYXNpbmc9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2Vhc2VGcmFtZUlkfSxyLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7aWYodGhpcy5fZWFzZUZyYW1lSWQmJih0aGlzLl9jYW5jZWxSZW5kZXJGcmFtZSh0aGlzLl9lYXNlRnJhbWVJZCksZGVsZXRlIHRoaXMuX2Vhc2VGcmFtZUlkLGRlbGV0ZSB0aGlzLl9vbkVhc2VGcmFtZSksdGhpcy5fb25FYXNlRW5kKXt2YXIgdD10aGlzLl9vbkVhc2VFbmQ7ZGVsZXRlIHRoaXMuX29uRWFzZUVuZCx0LmNhbGwodGhpcyl9cmV0dXJuIHRoaXN9LHIucHJvdG90eXBlLl9lYXNlPWZ1bmN0aW9uKHQsZSxyKXshMT09PXIuYW5pbWF0ZXx8MD09PXIuZHVyYXRpb24/KHQoMSksZSgpKToodGhpcy5fZWFzZVN0YXJ0PWEubm93KCksdGhpcy5fZWFzZU9wdGlvbnM9cix0aGlzLl9vbkVhc2VGcmFtZT10LHRoaXMuX29uRWFzZUVuZD1lLHRoaXMuX2Vhc2VGcmFtZUlkPXRoaXMuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9yZW5kZXJGcmFtZUNhbGxiYWNrKSl9LHIucHJvdG90eXBlLl9yZW5kZXJGcmFtZUNhbGxiYWNrPWZ1bmN0aW9uKCl7dmFyIHQ9TWF0aC5taW4oKGEubm93KCktdGhpcy5fZWFzZVN0YXJ0KS90aGlzLl9lYXNlT3B0aW9ucy5kdXJhdGlvbiwxKTt0aGlzLl9vbkVhc2VGcmFtZSh0aGlzLl9lYXNlT3B0aW9ucy5lYXNpbmcodCkpLHQ8MT90aGlzLl9lYXNlRnJhbWVJZD10aGlzLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fcmVuZGVyRnJhbWVDYWxsYmFjayk6dGhpcy5zdG9wKCl9LHIucHJvdG90eXBlLl9ub3JtYWxpemVCZWFyaW5nPWZ1bmN0aW9uKGUscil7ZT10LndyYXAoZSwtMTgwLDE4MCk7dmFyIG49TWF0aC5hYnMoZS1yKTtyZXR1cm4gTWF0aC5hYnMoZS0zNjAtcik8biYmKGUtPTM2MCksTWF0aC5hYnMoZSszNjAtcik8biYmKGUrPTM2MCksZX0sci5wcm90b3R5cGUuX25vcm1hbGl6ZUNlbnRlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnRyYW5zZm9ybTtpZihlLnJlbmRlcldvcmxkQ29waWVzJiYhZS5sbmdSYW5nZSl7dmFyIHI9dC5sbmctZS5jZW50ZXIubG5nO3QubG5nKz1yPjE4MD8tMzYwOnI8LTE4MD8zNjA6MH19LHJ9KHQuRXZlbnRlZCksbm49ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9e30pLHRoaXMub3B0aW9ucz1lLHQuYmluZEFsbChbXCJfdXBkYXRlRWRpdExpbmtcIixcIl91cGRhdGVEYXRhXCIsXCJfdXBkYXRlQ29tcGFjdFwiXSx0aGlzKX07bm4ucHJvdG90eXBlLmdldERlZmF1bHRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVyblwiYm90dG9tLXJpZ2h0XCJ9LG5uLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5jb21wYWN0O3JldHVybiB0aGlzLl9tYXA9dCx0aGlzLl9jb250YWluZXI9cy5jcmVhdGUoXCJkaXZcIixcIm1hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1hdHRyaWJcIiksZSYmdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jb21wYWN0XCIpLHRoaXMuX3VwZGF0ZUF0dHJpYnV0aW9ucygpLHRoaXMuX3VwZGF0ZUVkaXRMaW5rKCksdGhpcy5fbWFwLm9uKFwic291cmNlZGF0YVwiLHRoaXMuX3VwZGF0ZURhdGEpLHRoaXMuX21hcC5vbihcIm1vdmVlbmRcIix0aGlzLl91cGRhdGVFZGl0TGluayksdm9pZCAwPT09ZSYmKHRoaXMuX21hcC5vbihcInJlc2l6ZVwiLHRoaXMuX3VwZGF0ZUNvbXBhY3QpLHRoaXMuX3VwZGF0ZUNvbXBhY3QoKSksdGhpcy5fY29udGFpbmVyfSxubi5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXtzLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLHRoaXMuX21hcC5vZmYoXCJzb3VyY2VkYXRhXCIsdGhpcy5fdXBkYXRlRGF0YSksdGhpcy5fbWFwLm9mZihcIm1vdmVlbmRcIix0aGlzLl91cGRhdGVFZGl0TGluayksdGhpcy5fbWFwLm9mZihcInJlc2l6ZVwiLHRoaXMuX3VwZGF0ZUNvbXBhY3QpLHRoaXMuX21hcD12b2lkIDB9LG5uLnByb3RvdHlwZS5fdXBkYXRlRWRpdExpbms9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9lZGl0TGluazt0fHwodD10aGlzLl9lZGl0TGluaz10aGlzLl9jb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5tYXBib3gtaW1wcm92ZS1tYXBcIikpO3ZhciBlPVt7a2V5Olwib3duZXJcIix2YWx1ZTp0aGlzLnN0eWxlT3duZXJ9LHtrZXk6XCJpZFwiLHZhbHVlOnRoaXMuc3R5bGVJZH0se2tleTpcImFjY2Vzc190b2tlblwiLHZhbHVlOnYuQUNDRVNTX1RPS0VOfV07aWYodCl7dmFyIHI9ZS5yZWR1Y2UoZnVuY3Rpb24odCxyLG4pe3JldHVybiByLnZhbHVlJiYodCs9ci5rZXkrXCI9XCIrci52YWx1ZSsobjxlLmxlbmd0aC0xP1wiJlwiOlwiXCIpKSx0fSxcIj9cIik7dC5ocmVmPVwiaHR0cHM6Ly93d3cubWFwYm94LmNvbS9mZWVkYmFjay9cIityKyh0aGlzLl9tYXAuX2hhc2g/dGhpcy5fbWFwLl9oYXNoLmdldEhhc2hTdHJpbmcoITApOlwiXCIpfX0sbm4ucHJvdG90eXBlLl91cGRhdGVEYXRhPWZ1bmN0aW9uKHQpe3QmJlwibWV0YWRhdGFcIj09PXQuc291cmNlRGF0YVR5cGUmJih0aGlzLl91cGRhdGVBdHRyaWJ1dGlvbnMoKSx0aGlzLl91cGRhdGVFZGl0TGluaygpKX0sbm4ucHJvdG90eXBlLl91cGRhdGVBdHRyaWJ1dGlvbnM9ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXAuc3R5bGUpe3ZhciB0PVtdO2lmKHRoaXMuX21hcC5zdHlsZS5zdHlsZXNoZWV0KXt2YXIgZT10aGlzLl9tYXAuc3R5bGUuc3R5bGVzaGVldDt0aGlzLnN0eWxlT3duZXI9ZS5vd25lcix0aGlzLnN0eWxlSWQ9ZS5pZH12YXIgcj10aGlzLl9tYXAuc3R5bGUuc291cmNlQ2FjaGVzO2Zvcih2YXIgbiBpbiByKXt2YXIgaT1yW25dLmdldFNvdXJjZSgpO2kuYXR0cmlidXRpb24mJnQuaW5kZXhPZihpLmF0dHJpYnV0aW9uKTwwJiZ0LnB1c2goaS5hdHRyaWJ1dGlvbil9dC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoLWUubGVuZ3RofSksKHQ9dC5maWx0ZXIoZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49cisxO248dC5sZW5ndGg7bisrKWlmKHRbbl0uaW5kZXhPZihlKT49MClyZXR1cm4hMTtyZXR1cm4hMH0pKS5sZW5ndGg/KHRoaXMuX2NvbnRhaW5lci5pbm5lckhUTUw9dC5qb2luKFwiIHwgXCIpLHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtYXR0cmliLWVtcHR5XCIpKTp0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLWF0dHJpYi1lbXB0eVwiKSx0aGlzLl9lZGl0TGluaz1udWxsfX0sbm4ucHJvdG90eXBlLl91cGRhdGVDb21wYWN0PWZ1bmN0aW9uKCl7dGhpcy5fbWFwLmdldENhbnZhc0NvbnRhaW5lcigpLm9mZnNldFdpZHRoPD02NDA/dGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jb21wYWN0XCIpOnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY29tcGFjdFwiKX07dmFyIGFuPWZ1bmN0aW9uKCl7dC5iaW5kQWxsKFtcIl91cGRhdGVMb2dvXCJdLHRoaXMpfTthbi5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQsdGhpcy5fY29udGFpbmVyPXMuY3JlYXRlKFwiZGl2XCIsXCJtYXBib3hnbC1jdHJsXCIpO3ZhciBlPXMuY3JlYXRlKFwiYVwiLFwibWFwYm94Z2wtY3RybC1sb2dvXCIpO3JldHVybiBlLnRhcmdldD1cIl9ibGFua1wiLGUuaHJlZj1cImh0dHBzOi8vd3d3Lm1hcGJveC5jb20vXCIsZS5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsXCJNYXBib3ggbG9nb1wiKSx0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQoZSksdGhpcy5fY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9XCJub25lXCIsdGhpcy5fbWFwLm9uKFwic291cmNlZGF0YVwiLHRoaXMuX3VwZGF0ZUxvZ28pLHRoaXMuX3VwZGF0ZUxvZ28oKSx0aGlzLl9jb250YWluZXJ9LGFuLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3MucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwLm9mZihcInNvdXJjZWRhdGFcIix0aGlzLl91cGRhdGVMb2dvKX0sYW4ucHJvdG90eXBlLmdldERlZmF1bHRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVyblwiYm90dG9tLWxlZnRcIn0sYW4ucHJvdG90eXBlLl91cGRhdGVMb2dvPWZ1bmN0aW9uKHQpe3QmJlwibWV0YWRhdGFcIiE9PXQuc291cmNlRGF0YVR5cGV8fCh0aGlzLl9jb250YWluZXIuc3R5bGUuZGlzcGxheT10aGlzLl9sb2dvUmVxdWlyZWQoKT9cImJsb2NrXCI6XCJub25lXCIpfSxhbi5wcm90b3R5cGUuX2xvZ29SZXF1aXJlZD1mdW5jdGlvbigpe2lmKHRoaXMuX21hcC5zdHlsZSl7dmFyIHQ9dGhpcy5fbWFwLnN0eWxlLnNvdXJjZUNhY2hlcztmb3IodmFyIGUgaW4gdClpZih0W2VdLmdldFNvdXJjZSgpLm1hcGJveF9sb2dvKXJldHVybiEwO3JldHVybiExfX07dmFyIG9uPWZ1bmN0aW9uKCl7dGhpcy5fcXVldWU9W10sdGhpcy5faWQ9MCx0aGlzLl9jbGVhcmVkPSExLHRoaXMuX2N1cnJlbnRseVJ1bm5pbmc9ITF9O29uLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7dmFyIGU9Kyt0aGlzLl9pZDtyZXR1cm4gdGhpcy5fcXVldWUucHVzaCh7Y2FsbGJhY2s6dCxpZDplLGNhbmNlbGxlZDohMX0pLGV9LG9uLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2N1cnJlbnRseVJ1bm5pbmcscj0wLG49ZT90aGlzLl9xdWV1ZS5jb25jYXQoZSk6dGhpcy5fcXVldWU7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdO2lmKGkuaWQ9PT10KXJldHVybiB2b2lkKGkuY2FuY2VsbGVkPSEwKX19LG9uLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jdXJyZW50bHlSdW5uaW5nPXRoaXMuX3F1ZXVlO3RoaXMuX3F1ZXVlPVtdO2Zvcih2YXIgZT0wLHI9dDtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV07aWYoIW4uY2FuY2VsbGVkJiYobi5jYWxsYmFjaygpLHRoaXMuX2NsZWFyZWQpKWJyZWFrfXRoaXMuX2NsZWFyZWQ9ITEsdGhpcy5fY3VycmVudGx5UnVubmluZz0hMX0sb24ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fY3VycmVudGx5UnVubmluZyYmKHRoaXMuX2NsZWFyZWQ9ITApLHRoaXMuX3F1ZXVlPVtdfTt2YXIgc249dC5kZWZhdWx0LkhUTUxJbWFnZUVsZW1lbnQsbG49dC5kZWZhdWx0LkhUTUxFbGVtZW50LGNuPXtjZW50ZXI6WzAsMF0sem9vbTowLGJlYXJpbmc6MCxwaXRjaDowLG1pblpvb206MCxtYXhab29tOjIyLGludGVyYWN0aXZlOiEwLHNjcm9sbFpvb206ITAsYm94Wm9vbTohMCxkcmFnUm90YXRlOiEwLGRyYWdQYW46ITAsa2V5Ym9hcmQ6ITAsZG91YmxlQ2xpY2tab29tOiEwLHRvdWNoWm9vbVJvdGF0ZTohMCxiZWFyaW5nU25hcDo3LGhhc2g6ITEsYXR0cmlidXRpb25Db250cm9sOiEwLGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6ITEscHJlc2VydmVEcmF3aW5nQnVmZmVyOiExLHRyYWNrUmVzaXplOiEwLHJlbmRlcldvcmxkQ29waWVzOiEwLHJlZnJlc2hFeHBpcmVkVGlsZXM6ITAsbWF4VGlsZUNhY2hlU2l6ZTpudWxsLHRyYW5zZm9ybVJlcXVlc3Q6bnVsbCxmYWRlRHVyYXRpb246MzAwfSx1bj1mdW5jdGlvbihyKXtmdW5jdGlvbiBuKGUpe2lmKG51bGwhPShlPXQuZXh0ZW5kKHt9LGNuLGUpKS5taW5ab29tJiZudWxsIT1lLm1heFpvb20mJmUubWluWm9vbT5lLm1heFpvb20pdGhyb3cgbmV3IEVycm9yKFwibWF4Wm9vbSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBtaW5ab29tXCIpO3ZhciBuPW5ldyBCcihlLm1pblpvb20sZS5tYXhab29tLGUucmVuZGVyV29ybGRDb3BpZXMpO3IuY2FsbCh0aGlzLG4sZSksdGhpcy5faW50ZXJhY3RpdmU9ZS5pbnRlcmFjdGl2ZSx0aGlzLl9tYXhUaWxlQ2FjaGVTaXplPWUubWF4VGlsZUNhY2hlU2l6ZSx0aGlzLl9mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0PWUuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCx0aGlzLl9wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZS5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIsdGhpcy5fdHJhY2tSZXNpemU9ZS50cmFja1Jlc2l6ZSx0aGlzLl9iZWFyaW5nU25hcD1lLmJlYXJpbmdTbmFwLHRoaXMuX3JlZnJlc2hFeHBpcmVkVGlsZXM9ZS5yZWZyZXNoRXhwaXJlZFRpbGVzLHRoaXMuX2ZhZGVEdXJhdGlvbj1lLmZhZGVEdXJhdGlvbix0aGlzLl9jcm9zc0ZhZGluZ0ZhY3Rvcj0xLHRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZz1lLmNvbGxlY3RSZXNvdXJjZVRpbWluZyx0aGlzLl9yZW5kZXJUYXNrUXVldWU9bmV3IG9uO3ZhciBpPWUudHJhbnNmb3JtUmVxdWVzdDtpZih0aGlzLl90cmFuc2Zvcm1SZXF1ZXN0PWk/ZnVuY3Rpb24odCxlKXtyZXR1cm4gaSh0LGUpfHx7dXJsOnR9fTpmdW5jdGlvbih0KXtyZXR1cm57dXJsOnR9fSxcInN0cmluZ1wiPT10eXBlb2YgZS5jb250YWluZXIpe3ZhciBhPXQuZGVmYXVsdC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlLmNvbnRhaW5lcik7aWYoIWEpdGhyb3cgbmV3IEVycm9yKFwiQ29udGFpbmVyICdcIitlLmNvbnRhaW5lcitcIicgbm90IGZvdW5kLlwiKTt0aGlzLl9jb250YWluZXI9YX1lbHNle2lmKCEoZS5jb250YWluZXIgaW5zdGFuY2VvZiBsbikpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB0eXBlOiAnY29udGFpbmVyJyBtdXN0IGJlIGEgU3RyaW5nIG9yIEhUTUxFbGVtZW50LlwiKTt0aGlzLl9jb250YWluZXI9ZS5jb250YWluZXJ9ZS5tYXhCb3VuZHMmJnRoaXMuc2V0TWF4Qm91bmRzKGUubWF4Qm91bmRzKSx0LmJpbmRBbGwoW1wiX29uV2luZG93T25saW5lXCIsXCJfb25XaW5kb3dSZXNpemVcIixcIl9jb250ZXh0TG9zdFwiLFwiX2NvbnRleHRSZXN0b3JlZFwiLFwiX3VwZGF0ZVwiLFwiX3JlbmRlclwiLFwiX29uRGF0YVwiLFwiX29uRGF0YUxvYWRpbmdcIl0sdGhpcyksdGhpcy5fc2V0dXBDb250YWluZXIoKSx0aGlzLl9zZXR1cFBhaW50ZXIoKSx0aGlzLm9uKFwibW92ZVwiLHRoaXMuX3VwZGF0ZS5iaW5kKHRoaXMsITEpKSx0aGlzLm9uKFwiem9vbVwiLHRoaXMuX3VwZGF0ZS5iaW5kKHRoaXMsITApKSx2b2lkIDAhPT10LmRlZmF1bHQmJih0LmRlZmF1bHQuYWRkRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLHRoaXMuX29uV2luZG93T25saW5lLCExKSx0LmRlZmF1bHQuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHRoaXMuX29uV2luZG93UmVzaXplLCExKSksZnVuY3Rpb24odCxlKXt2YXIgcj10LmdldENhbnZhc0NvbnRhaW5lcigpLG49bnVsbCxpPSExO2Zvcih2YXIgYSBpbiBlbil0W2FdPW5ldyBlblthXSh0LGUpLGUuaW50ZXJhY3RpdmUmJmVbYV0mJnRbYV0uZW5hYmxlKGVbYV0pO3MuYWRkRXZlbnRMaXN0ZW5lcihyLFwibW91c2VvdXRcIixmdW5jdGlvbihlKXt0LmZpcmUobmV3IFZyKFwibW91c2VvdXRcIix0LGUpKX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLFwibW91c2Vkb3duXCIsZnVuY3Rpb24ocil7aT0hMDt2YXIgbj1uZXcgVnIoXCJtb3VzZWRvd25cIix0LHIpO3QuZmlyZShuKSxuLmRlZmF1bHRQcmV2ZW50ZWR8fChlLmludGVyYWN0aXZlJiYhdC5kb3VibGVDbGlja1pvb20uaXNBY3RpdmUoKSYmdC5zdG9wKCksdC5ib3hab29tLm9uTW91c2VEb3duKHIpLHQuYm94Wm9vbS5pc0FjdGl2ZSgpfHx0LmRyYWdQYW4uaXNBY3RpdmUoKXx8dC5kcmFnUm90YXRlLm9uTW91c2VEb3duKHIpLHQuYm94Wm9vbS5pc0FjdGl2ZSgpfHx0LmRyYWdSb3RhdGUuaXNBY3RpdmUoKXx8dC5kcmFnUGFuLm9uTW91c2VEb3duKHIpKX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLFwibW91c2V1cFwiLGZ1bmN0aW9uKGUpe3ZhciByPXQuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpO24mJiFyJiZ0LmZpcmUobmV3IFZyKFwiY29udGV4dG1lbnVcIix0LG4pKSxuPW51bGwsaT0hMSx0LmZpcmUobmV3IFZyKFwibW91c2V1cFwiLHQsZSkpfSkscy5hZGRFdmVudExpc3RlbmVyKHIsXCJtb3VzZW1vdmVcIixmdW5jdGlvbihlKXtpZighdC5kcmFnUGFuLmlzQWN0aXZlKCkmJiF0LmRyYWdSb3RhdGUuaXNBY3RpdmUoKSl7Zm9yKHZhciBuPWUudG9FbGVtZW50fHxlLnRhcmdldDtuJiZuIT09cjspbj1uLnBhcmVudE5vZGU7bj09PXImJnQuZmlyZShuZXcgVnIoXCJtb3VzZW1vdmVcIix0LGUpKX19KSxzLmFkZEV2ZW50TGlzdGVuZXIocixcIm1vdXNlb3ZlclwiLGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj1lLnRvRWxlbWVudHx8ZS50YXJnZXQ7biYmbiE9PXI7KW49bi5wYXJlbnROb2RlO249PT1yJiZ0LmZpcmUobmV3IFZyKFwibW91c2VvdmVyXCIsdCxlKSl9KSxzLmFkZEV2ZW50TGlzdGVuZXIocixcInRvdWNoc3RhcnRcIixmdW5jdGlvbihyKXt2YXIgbj1uZXcgVXIoXCJ0b3VjaHN0YXJ0XCIsdCxyKTt0LmZpcmUobiksbi5kZWZhdWx0UHJldmVudGVkfHwoZS5pbnRlcmFjdGl2ZSYmdC5zdG9wKCksdC5ib3hab29tLmlzQWN0aXZlKCl8fHQuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpfHx0LmRyYWdQYW4ub25Ub3VjaFN0YXJ0KHIpLHQudG91Y2hab29tUm90YXRlLm9uU3RhcnQociksdC5kb3VibGVDbGlja1pvb20ub25Ub3VjaFN0YXJ0KG4pKX0se3Bhc3NpdmU6ITF9KSxzLmFkZEV2ZW50TGlzdGVuZXIocixcInRvdWNobW92ZVwiLGZ1bmN0aW9uKGUpe3QuZmlyZShuZXcgVXIoXCJ0b3VjaG1vdmVcIix0LGUpKX0se3Bhc3NpdmU6ITF9KSxzLmFkZEV2ZW50TGlzdGVuZXIocixcInRvdWNoZW5kXCIsZnVuY3Rpb24oZSl7dC5maXJlKG5ldyBVcihcInRvdWNoZW5kXCIsdCxlKSl9KSxzLmFkZEV2ZW50TGlzdGVuZXIocixcInRvdWNoY2FuY2VsXCIsZnVuY3Rpb24oZSl7dC5maXJlKG5ldyBVcihcInRvdWNoY2FuY2VsXCIsdCxlKSl9KSxzLmFkZEV2ZW50TGlzdGVuZXIocixcImNsaWNrXCIsZnVuY3Rpb24oZSl7dC5maXJlKG5ldyBWcihcImNsaWNrXCIsdCxlKSl9KSxzLmFkZEV2ZW50TGlzdGVuZXIocixcImRibGNsaWNrXCIsZnVuY3Rpb24oZSl7dmFyIHI9bmV3IFZyKFwiZGJsY2xpY2tcIix0LGUpO3QuZmlyZShyKSxyLmRlZmF1bHRQcmV2ZW50ZWR8fHQuZG91YmxlQ2xpY2tab29tLm9uRGJsQ2xpY2socil9KSxzLmFkZEV2ZW50TGlzdGVuZXIocixcImNvbnRleHRtZW51XCIsZnVuY3Rpb24oZSl7dmFyIHI9dC5kcmFnUm90YXRlLmlzQWN0aXZlKCk7aXx8cj9pJiYobj1lKTp0LmZpcmUobmV3IFZyKFwiY29udGV4dG1lbnVcIix0LGUpKSxlLnByZXZlbnREZWZhdWx0KCl9KSxzLmFkZEV2ZW50TGlzdGVuZXIocixcIndoZWVsXCIsZnVuY3Rpb24oZSl7dmFyIHI9bmV3IHFyKFwid2hlZWxcIix0LGUpO3QuZmlyZShyKSxyLmRlZmF1bHRQcmV2ZW50ZWR8fHQuc2Nyb2xsWm9vbS5vbldoZWVsKGUpfSx7cGFzc2l2ZTohMX0pfSh0aGlzLGUpLHRoaXMuX2hhc2g9ZS5oYXNoJiYobmV3IGpyKS5hZGRUbyh0aGlzKSx0aGlzLl9oYXNoJiZ0aGlzLl9oYXNoLl9vbkhhc2hDaGFuZ2UoKXx8dGhpcy5qdW1wVG8oe2NlbnRlcjplLmNlbnRlcix6b29tOmUuem9vbSxiZWFyaW5nOmUuYmVhcmluZyxwaXRjaDplLnBpdGNofSksdGhpcy5yZXNpemUoKSxlLnN0eWxlJiZ0aGlzLnNldFN0eWxlKGUuc3R5bGUse2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseTplLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseX0pLGUuYXR0cmlidXRpb25Db250cm9sJiZ0aGlzLmFkZENvbnRyb2wobmV3IG5uKSx0aGlzLmFkZENvbnRyb2wobmV3IGFuLGUubG9nb1Bvc2l0aW9uKSx0aGlzLm9uKFwic3R5bGUubG9hZFwiLGZ1bmN0aW9uKCl7dGhpcy50cmFuc2Zvcm0udW5tb2RpZmllZCYmdGhpcy5qdW1wVG8odGhpcy5zdHlsZS5zdHlsZXNoZWV0KX0pLHRoaXMub24oXCJkYXRhXCIsdGhpcy5fb25EYXRhKSx0aGlzLm9uKFwiZGF0YWxvYWRpbmdcIix0aGlzLl9vbkRhdGFMb2FkaW5nKX1yJiYobi5fX3Byb3RvX189ciksbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShyJiZyLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bjt2YXIgaT17c2hvd1RpbGVCb3VuZGFyaWVzOntjb25maWd1cmFibGU6ITB9LHNob3dDb2xsaXNpb25Cb3hlczp7Y29uZmlndXJhYmxlOiEwfSxzaG93T3ZlcmRyYXdJbnNwZWN0b3I6e2NvbmZpZ3VyYWJsZTohMH0scmVwYWludDp7Y29uZmlndXJhYmxlOiEwfSx2ZXJ0aWNlczp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIG4ucHJvdG90eXBlLmFkZENvbnRyb2w9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiZ0LmdldERlZmF1bHRQb3NpdGlvbiYmKGU9dC5nZXREZWZhdWx0UG9zaXRpb24oKSksdm9pZCAwPT09ZSYmKGU9XCJ0b3AtcmlnaHRcIik7dmFyIHI9dC5vbkFkZCh0aGlzKSxuPXRoaXMuX2NvbnRyb2xQb3NpdGlvbnNbZV07cmV0dXJuLTEhPT1lLmluZGV4T2YoXCJib3R0b21cIik/bi5pbnNlcnRCZWZvcmUocixuLmZpcnN0Q2hpbGQpOm4uYXBwZW5kQ2hpbGQociksdGhpc30sbi5wcm90b3R5cGUucmVtb3ZlQ29udHJvbD1mdW5jdGlvbih0KXtyZXR1cm4gdC5vblJlbW92ZSh0aGlzKSx0aGlzfSxuLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fY29udGFpbmVyRGltZW5zaW9ucygpLG49clswXSxpPXJbMV07cmV0dXJuIHRoaXMuX3Jlc2l6ZUNhbnZhcyhuLGkpLHRoaXMudHJhbnNmb3JtLnJlc2l6ZShuLGkpLHRoaXMucGFpbnRlci5yZXNpemUobixpKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJtb3Zlc3RhcnRcIixlKSkuZmlyZShuZXcgdC5FdmVudChcIm1vdmVcIixlKSkuZmlyZShuZXcgdC5FdmVudChcInJlc2l6ZVwiLGUpKS5maXJlKG5ldyB0LkV2ZW50KFwibW92ZWVuZFwiLGUpKX0sbi5wcm90b3R5cGUuZ2V0Qm91bmRzPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IFkodGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbihuZXcgdC5kZWZhdWx0JDEoMCx0aGlzLnRyYW5zZm9ybS5oZWlnaHQpKSx0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKG5ldyB0LmRlZmF1bHQkMSh0aGlzLnRyYW5zZm9ybS53aWR0aCwwKSkpO3JldHVybih0aGlzLnRyYW5zZm9ybS5hbmdsZXx8dGhpcy50cmFuc2Zvcm0ucGl0Y2gpJiYoZS5leHRlbmQodGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbihuZXcgdC5kZWZhdWx0JDEodGhpcy50cmFuc2Zvcm0uc2l6ZS54LDApKSksZS5leHRlbmQodGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbihuZXcgdC5kZWZhdWx0JDEoMCx0aGlzLnRyYW5zZm9ybS5zaXplLnkpKSkpLGV9LG4ucHJvdG90eXBlLmdldE1heEJvdW5kcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5sYXRSYW5nZSYmMj09PXRoaXMudHJhbnNmb3JtLmxhdFJhbmdlLmxlbmd0aCYmdGhpcy50cmFuc2Zvcm0ubG5nUmFuZ2UmJjI9PT10aGlzLnRyYW5zZm9ybS5sbmdSYW5nZS5sZW5ndGg/bmV3IFkoW3RoaXMudHJhbnNmb3JtLmxuZ1JhbmdlWzBdLHRoaXMudHJhbnNmb3JtLmxhdFJhbmdlWzBdXSxbdGhpcy50cmFuc2Zvcm0ubG5nUmFuZ2VbMV0sdGhpcy50cmFuc2Zvcm0ubGF0UmFuZ2VbMV1dKTpudWxsfSxuLnByb3RvdHlwZS5zZXRNYXhCb3VuZHM9ZnVuY3Rpb24odCl7aWYodCl7dmFyIGU9WS5jb252ZXJ0KHQpO3RoaXMudHJhbnNmb3JtLmxuZ1JhbmdlPVtlLmdldFdlc3QoKSxlLmdldEVhc3QoKV0sdGhpcy50cmFuc2Zvcm0ubGF0UmFuZ2U9W2UuZ2V0U291dGgoKSxlLmdldE5vcnRoKCldLHRoaXMudHJhbnNmb3JtLl9jb25zdHJhaW4oKSx0aGlzLl91cGRhdGUoKX1lbHNlIG51bGw9PXQmJih0aGlzLnRyYW5zZm9ybS5sbmdSYW5nZT1udWxsLHRoaXMudHJhbnNmb3JtLmxhdFJhbmdlPW51bGwsdGhpcy5fdXBkYXRlKCkpO3JldHVybiB0aGlzfSxuLnByb3RvdHlwZS5zZXRNaW5ab29tPWZ1bmN0aW9uKHQpe2lmKCh0PW51bGw9PXQ/MDp0KT49MCYmdDw9dGhpcy50cmFuc2Zvcm0ubWF4Wm9vbSlyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWluWm9vbT10LHRoaXMuX3VwZGF0ZSgpLHRoaXMuZ2V0Wm9vbSgpPHQmJnRoaXMuc2V0Wm9vbSh0KSx0aGlzO3Rocm93IG5ldyBFcnJvcihcIm1pblpvb20gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIHRoZSBjdXJyZW50IG1heFpvb20sIGluY2x1c2l2ZVwiKX0sbi5wcm90b3R5cGUuZ2V0TWluWm9vbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5taW5ab29tfSxuLnByb3RvdHlwZS5zZXRNYXhab29tPWZ1bmN0aW9uKHQpe2lmKCh0PW51bGw9PXQ/MjI6dCk+PXRoaXMudHJhbnNmb3JtLm1pblpvb20pcmV0dXJuIHRoaXMudHJhbnNmb3JtLm1heFpvb209dCx0aGlzLl91cGRhdGUoKSx0aGlzLmdldFpvb20oKT50JiZ0aGlzLnNldFpvb20odCksdGhpczt0aHJvdyBuZXcgRXJyb3IoXCJtYXhab29tIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG1pblpvb21cIil9LG4ucHJvdG90eXBlLmdldFJlbmRlcldvcmxkQ29waWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnJlbmRlcldvcmxkQ29waWVzfSxuLnByb3RvdHlwZS5zZXRSZW5kZXJXb3JsZENvcGllcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXM9dCx0aGlzLl91cGRhdGUoKSx0aGlzfSxuLnByb3RvdHlwZS5nZXRNYXhab29tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLm1heFpvb219LG4ucHJvdG90eXBlLnByb2plY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLmxvY2F0aW9uUG9pbnQoRy5jb252ZXJ0KHQpKX0sbi5wcm90b3R5cGUudW5wcm9qZWN0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKHQuZGVmYXVsdCQxLmNvbnZlcnQoZSkpfSxuLnByb3RvdHlwZS5pc01vdmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3Zpbmd8fHRoaXMuZHJhZ1Bhbi5pc0FjdGl2ZSgpfHx0aGlzLmRyYWdSb3RhdGUuaXNBY3RpdmUoKXx8dGhpcy5zY3JvbGxab29tLmlzQWN0aXZlKCl9LG4ucHJvdG90eXBlLmlzWm9vbWluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl96b29taW5nfHx0aGlzLnNjcm9sbFpvb20uaXNBY3RpdmUoKX0sbi5wcm90b3R5cGUuaXNSb3RhdGluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3RhdGluZ3x8dGhpcy5kcmFnUm90YXRlLmlzQWN0aXZlKCl9LG4ucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhPXRoaXM7aWYodm9pZCAwPT09bilyZXR1cm4gci5wcm90b3R5cGUub24uY2FsbCh0aGlzLHQsZSk7dmFyIG89ZnVuY3Rpb24oKXtpZihcIm1vdXNlZW50ZXJcIj09PXR8fFwibW91c2VvdmVyXCI9PT10KXt2YXIgcj0hMTtyZXR1cm57bGF5ZXI6ZSxsaXN0ZW5lcjpuLGRlbGVnYXRlczp7bW91c2Vtb3ZlOmZ1bmN0aW9uKGkpe3ZhciBvPWEuZ2V0TGF5ZXIoZSk/YS5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoaS5wb2ludCx7bGF5ZXJzOltlXX0pOltdO28ubGVuZ3RoP3J8fChyPSEwLG4uY2FsbChhLG5ldyBWcih0LGEsaS5vcmlnaW5hbEV2ZW50LHtmZWF0dXJlczpvfSkpKTpyPSExfSxtb3VzZW91dDpmdW5jdGlvbigpe3I9ITF9fX19aWYoXCJtb3VzZWxlYXZlXCI9PT10fHxcIm1vdXNlb3V0XCI9PT10KXt2YXIgbz0hMTtyZXR1cm57bGF5ZXI6ZSxsaXN0ZW5lcjpuLGRlbGVnYXRlczp7bW91c2Vtb3ZlOmZ1bmN0aW9uKHIpeyhhLmdldExheWVyKGUpP2EucXVlcnlSZW5kZXJlZEZlYXR1cmVzKHIucG9pbnQse2xheWVyczpbZV19KTpbXSkubGVuZ3RoP289ITA6byYmKG89ITEsbi5jYWxsKGEsbmV3IFZyKHQsYSxyLm9yaWdpbmFsRXZlbnQpKSl9LG1vdXNlb3V0OmZ1bmN0aW9uKGUpe28mJihvPSExLG4uY2FsbChhLG5ldyBWcih0LGEsZS5vcmlnaW5hbEV2ZW50KSkpfX19fXJldHVybntsYXllcjplLGxpc3RlbmVyOm4sZGVsZWdhdGVzOihpPXt9LGlbdF09ZnVuY3Rpb24odCl7dmFyIHI9YS5nZXRMYXllcihlKT9hLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyh0LnBvaW50LHtsYXllcnM6W2VdfSk6W107ci5sZW5ndGgmJih0LmZlYXR1cmVzPXIsbi5jYWxsKGEsdCksZGVsZXRlIHQuZmVhdHVyZXMpfSxpKX19KCk7Zm9yKHZhciBzIGluIHRoaXMuX2RlbGVnYXRlZExpc3RlbmVycz10aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnN8fHt9LHRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0XT10aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdF18fFtdLHRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0XS5wdXNoKG8pLG8uZGVsZWdhdGVzKWEub24ocyxvLmRlbGVnYXRlc1tzXSk7cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLm9mZj1mdW5jdGlvbih0LGUsbil7aWYodm9pZCAwPT09bilyZXR1cm4gci5wcm90b3R5cGUub2ZmLmNhbGwodGhpcyx0LGUpO2lmKHRoaXMuX2RlbGVnYXRlZExpc3RlbmVycyYmdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3RdKWZvcih2YXIgaT10aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdF0sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdO2lmKG8ubGF5ZXI9PT1lJiZvLmxpc3RlbmVyPT09bil7Zm9yKHZhciBzIGluIG8uZGVsZWdhdGVzKXRoaXMub2ZmKHMsby5kZWxlZ2F0ZXNbc10pO3JldHVybiBpLnNwbGljZShhLDEpLHRoaXN9fXJldHVybiB0aGlzfSxuLnByb3RvdHlwZS5xdWVyeVJlbmRlcmVkRmVhdHVyZXM9ZnVuY3Rpb24oZSxyKXt2YXIgbjtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGg/KGU9YXJndW1lbnRzWzBdLHI9YXJndW1lbnRzWzFdKToxPT09YXJndW1lbnRzLmxlbmd0aCYmKChuPWFyZ3VtZW50c1swXSlpbnN0YW5jZW9mIHQuZGVmYXVsdCQxfHxBcnJheS5pc0FycmF5KG4pKT8oZT1hcmd1bWVudHNbMF0scj17fSk6MT09PWFyZ3VtZW50cy5sZW5ndGg/KGU9dm9pZCAwLHI9YXJndW1lbnRzWzBdKTooZT12b2lkIDAscj17fSksdGhpcy5zdHlsZT90aGlzLnN0eWxlLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyh0aGlzLl9tYWtlUXVlcnlHZW9tZXRyeShlKSxyLHRoaXMudHJhbnNmb3JtKTpbXX0sbi5wcm90b3R5cGUuX21ha2VRdWVyeUdlb21ldHJ5PWZ1bmN0aW9uKGUpe3ZhciByLG49dGhpcztpZih2b2lkIDA9PT1lJiYoZT1bdC5kZWZhdWx0JDEuY29udmVydChbMCwwXSksdC5kZWZhdWx0JDEuY29udmVydChbdGhpcy50cmFuc2Zvcm0ud2lkdGgsdGhpcy50cmFuc2Zvcm0uaGVpZ2h0XSldKSxlIGluc3RhbmNlb2YgdC5kZWZhdWx0JDF8fFwibnVtYmVyXCI9PXR5cGVvZiBlWzBdKXI9W3QuZGVmYXVsdCQxLmNvbnZlcnQoZSldO2Vsc2V7dmFyIGk9W3QuZGVmYXVsdCQxLmNvbnZlcnQoZVswXSksdC5kZWZhdWx0JDEuY29udmVydChlWzFdKV07cj1baVswXSxuZXcgdC5kZWZhdWx0JDEoaVsxXS54LGlbMF0ueSksaVsxXSxuZXcgdC5kZWZhdWx0JDEoaVswXS54LGlbMV0ueSksaVswXV19cmV0dXJue3ZpZXdwb3J0OnIsd29ybGRDb29yZGluYXRlOnIubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBuLnRyYW5zZm9ybS5wb2ludENvb3JkaW5hdGUodCl9KX19LG4ucHJvdG90eXBlLnF1ZXJ5U291cmNlRmVhdHVyZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5xdWVyeVNvdXJjZUZlYXR1cmVzKHQsZSl9LG4ucHJvdG90eXBlLnNldFN0eWxlPWZ1bmN0aW9uKGUscil7aWYoKCFyfHwhMSE9PXIuZGlmZiYmIXIubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5KSYmdGhpcy5zdHlsZSYmZSYmXCJvYmplY3RcIj09dHlwZW9mIGUpdHJ5e3JldHVybiB0aGlzLnN0eWxlLnNldFN0YXRlKGUpJiZ0aGlzLl91cGRhdGUoITApLHRoaXN9Y2F0Y2goZSl7dC53YXJuT25jZShcIlVuYWJsZSB0byBwZXJmb3JtIHN0eWxlIGRpZmY6IFwiKyhlLm1lc3NhZ2V8fGUuZXJyb3J8fGUpK1wiLiAgUmVidWlsZGluZyB0aGUgc3R5bGUgZnJvbSBzY3JhdGNoLlwiKX1yZXR1cm4gdGhpcy5zdHlsZSYmKHRoaXMuc3R5bGUuc2V0RXZlbnRlZFBhcmVudChudWxsKSx0aGlzLnN0eWxlLl9yZW1vdmUoKSksZT8odGhpcy5zdHlsZT1uZXcgSmUodGhpcyxyfHx7fSksdGhpcy5zdHlsZS5zZXRFdmVudGVkUGFyZW50KHRoaXMse3N0eWxlOnRoaXMuc3R5bGV9KSxcInN0cmluZ1wiPT10eXBlb2YgZT90aGlzLnN0eWxlLmxvYWRVUkwoZSk6dGhpcy5zdHlsZS5sb2FkSlNPTihlKSx0aGlzKTooZGVsZXRlIHRoaXMuc3R5bGUsdGhpcyl9LG4ucHJvdG90eXBlLmdldFN0eWxlPWZ1bmN0aW9uKCl7aWYodGhpcy5zdHlsZSlyZXR1cm4gdGhpcy5zdHlsZS5zZXJpYWxpemUoKX0sbi5wcm90b3R5cGUuaXNTdHlsZUxvYWRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0eWxlP3RoaXMuc3R5bGUubG9hZGVkKCk6dC53YXJuT25jZShcIlRoZXJlIGlzIG5vIHN0eWxlIGFkZGVkIHRvIHRoZSBtYXAuXCIpfSxuLnByb3RvdHlwZS5hZGRTb3VyY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5hZGRTb3VyY2UodCxlKSx0aGlzLl91cGRhdGUoITApLHRoaXN9LG4ucHJvdG90eXBlLmlzU291cmNlTG9hZGVkPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuc3R5bGUmJnRoaXMuc3R5bGUuc291cmNlQ2FjaGVzW2VdO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHIubG9hZGVkKCk7dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gc291cmNlIHdpdGggSUQgJ1wiK2UrXCInXCIpKSl9LG4ucHJvdG90eXBlLmFyZVRpbGVzTG9hZGVkPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zdHlsZSYmdGhpcy5zdHlsZS5zb3VyY2VDYWNoZXM7Zm9yKHZhciBlIGluIHQpe3ZhciByPXRbZV0uX3RpbGVzO2Zvcih2YXIgbiBpbiByKXt2YXIgaT1yW25dO2lmKFwibG9hZGVkXCIhPT1pLnN0YXRlJiZcImVycm9yZWRcIiE9PWkuc3RhdGUpcmV0dXJuITF9fXJldHVybiEwfSxuLnByb3RvdHlwZS5hZGRTb3VyY2VUeXBlPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5zdHlsZS5hZGRTb3VyY2VUeXBlKHQsZSxyKX0sbi5wcm90b3R5cGUucmVtb3ZlU291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLnJlbW92ZVNvdXJjZSh0KSx0aGlzLl91cGRhdGUoITApLHRoaXN9LG4ucHJvdG90eXBlLmdldFNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRTb3VyY2UodCl9LG4ucHJvdG90eXBlLmFkZEltYWdlPWZ1bmN0aW9uKGUscixuKXt2b2lkIDA9PT1uJiYobj17fSk7dmFyIGk9bi5waXhlbFJhdGlvO3ZvaWQgMD09PWkmJihpPTEpO3ZhciBvPW4uc2RmO2lmKHZvaWQgMD09PW8mJihvPSExKSxyIGluc3RhbmNlb2Ygc24pe3ZhciBzPWEuZ2V0SW1hZ2VEYXRhKHIpLGw9cy53aWR0aCxjPXMuaGVpZ2h0LHU9cy5kYXRhO3RoaXMuc3R5bGUuYWRkSW1hZ2UoZSx7ZGF0YTpuZXcgdC5SR0JBSW1hZ2Uoe3dpZHRoOmwsaGVpZ2h0OmN9LHUpLHBpeGVsUmF0aW86aSxzZGY6b30pfWVsc2V7aWYodm9pZCAwPT09ci53aWR0aHx8dm9pZCAwPT09ci5oZWlnaHQpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnRzIHRvIG1hcC5hZGRJbWFnZSgpLiBUaGUgc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgYW4gYEhUTUxJbWFnZUVsZW1lbnRgLCBgSW1hZ2VEYXRhYCwgb3Igb2JqZWN0IHdpdGggYHdpZHRoYCwgYGhlaWdodGAsIGFuZCBgZGF0YWAgcHJvcGVydGllcyB3aXRoIHRoZSBzYW1lIGZvcm1hdCBhcyBgSW1hZ2VEYXRhYFwiKSkpO3ZhciBoPXIud2lkdGgsZj1yLmhlaWdodCxwPXIuZGF0YTt0aGlzLnN0eWxlLmFkZEltYWdlKGUse2RhdGE6bmV3IHQuUkdCQUltYWdlKHt3aWR0aDpoLGhlaWdodDpmfSxwLnNsaWNlKDApKSxwaXhlbFJhdGlvOmksc2RmOm99KX19LG4ucHJvdG90eXBlLmhhc0ltYWdlPWZ1bmN0aW9uKGUpe3JldHVybiBlPyEhdGhpcy5zdHlsZS5nZXRJbWFnZShlKToodGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKFwiTWlzc2luZyByZXF1aXJlZCBpbWFnZSBpZFwiKSkpLCExKX0sbi5wcm90b3R5cGUucmVtb3ZlSW1hZ2U9ZnVuY3Rpb24odCl7dGhpcy5zdHlsZS5yZW1vdmVJbWFnZSh0KX0sbi5wcm90b3R5cGUubG9hZEltYWdlPWZ1bmN0aW9uKGUscil7dC5nZXRJbWFnZSh0aGlzLl90cmFuc2Zvcm1SZXF1ZXN0KGUsdC5SZXNvdXJjZVR5cGUuSW1hZ2UpLHIpfSxuLnByb3RvdHlwZS5hZGRMYXllcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLmFkZExheWVyKHQsZSksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxuLnByb3RvdHlwZS5tb3ZlTGF5ZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5tb3ZlTGF5ZXIodCxlKSx0aGlzLl91cGRhdGUoITApLHRoaXN9LG4ucHJvdG90eXBlLnJlbW92ZUxheWVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLnJlbW92ZUxheWVyKHQpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sbi5wcm90b3R5cGUuZ2V0TGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0TGF5ZXIodCl9LG4ucHJvdG90eXBlLnNldEZpbHRlcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLnNldEZpbHRlcih0LGUpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sbi5wcm90b3R5cGUuc2V0TGF5ZXJab29tUmFuZ2U9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLnN0eWxlLnNldExheWVyWm9vbVJhbmdlKHQsZSxyKSx0aGlzLl91cGRhdGUoITApLHRoaXN9LG4ucHJvdG90eXBlLmdldEZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRGaWx0ZXIodCl9LG4ucHJvdG90eXBlLnNldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLnN0eWxlLnNldFBhaW50UHJvcGVydHkodCxlLHIpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sbi5wcm90b3R5cGUuZ2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLmdldFBhaW50UHJvcGVydHkodCxlKX0sbi5wcm90b3R5cGUuc2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLnN0eWxlLnNldExheW91dFByb3BlcnR5KHQsZSxyKSx0aGlzLl91cGRhdGUoITApLHRoaXN9LG4ucHJvdG90eXBlLmdldExheW91dFByb3BlcnR5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0TGF5b3V0UHJvcGVydHkodCxlKX0sbi5wcm90b3R5cGUuc2V0TGlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUuc2V0TGlnaHQodCksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxuLnByb3RvdHlwZS5nZXRMaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0eWxlLmdldExpZ2h0KCl9LG4ucHJvdG90eXBlLmdldENvbnRhaW5lcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXJ9LG4ucHJvdG90eXBlLmdldENhbnZhc0NvbnRhaW5lcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYW52YXNDb250YWluZXJ9LG4ucHJvdG90eXBlLmdldENhbnZhcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYW52YXN9LG4ucHJvdG90eXBlLl9jb250YWluZXJEaW1lbnNpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9MCxlPTA7cmV0dXJuIHRoaXMuX2NvbnRhaW5lciYmKHQ9dGhpcy5fY29udGFpbmVyLm9mZnNldFdpZHRofHw0MDAsZT10aGlzLl9jb250YWluZXIub2Zmc2V0SGVpZ2h0fHwzMDApLFt0LGVdfSxuLnByb3RvdHlwZS5fc2V0dXBDb250YWluZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250YWluZXI7dC5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtbWFwXCIpLCh0aGlzLl9taXNzaW5nQ1NTQ29udGFpbmVyPXMuY3JlYXRlKFwiZGl2XCIsXCJtYXBib3hnbC1taXNzaW5nLWNzc1wiLHQpKS5pbm5lckhUTUw9XCJNaXNzaW5nIE1hcGJveCBHTCBKUyBDU1NcIjt2YXIgZT10aGlzLl9jYW52YXNDb250YWluZXI9cy5jcmVhdGUoXCJkaXZcIixcIm1hcGJveGdsLWNhbnZhcy1jb250YWluZXJcIix0KTt0aGlzLl9pbnRlcmFjdGl2ZSYmZS5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtaW50ZXJhY3RpdmVcIiksdGhpcy5fY2FudmFzPXMuY3JlYXRlKFwiY2FudmFzXCIsXCJtYXBib3hnbC1jYW52YXNcIixlKSx0aGlzLl9jYW52YXMuc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwiLHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKFwid2ViZ2xjb250ZXh0bG9zdFwiLHRoaXMuX2NvbnRleHRMb3N0LCExKSx0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcIndlYmdsY29udGV4dHJlc3RvcmVkXCIsdGhpcy5fY29udGV4dFJlc3RvcmVkLCExKSx0aGlzLl9jYW52YXMuc2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIixcIjBcIiksdGhpcy5fY2FudmFzLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIixcIk1hcFwiKTt2YXIgcj10aGlzLl9jb250YWluZXJEaW1lbnNpb25zKCk7dGhpcy5fcmVzaXplQ2FudmFzKHJbMF0sclsxXSk7dmFyIG49dGhpcy5fY29udHJvbENvbnRhaW5lcj1zLmNyZWF0ZShcImRpdlwiLFwibWFwYm94Z2wtY29udHJvbC1jb250YWluZXJcIix0KSxpPXRoaXMuX2NvbnRyb2xQb3NpdGlvbnM9e307W1widG9wLWxlZnRcIixcInRvcC1yaWdodFwiLFwiYm90dG9tLWxlZnRcIixcImJvdHRvbS1yaWdodFwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lbdF09cy5jcmVhdGUoXCJkaXZcIixcIm1hcGJveGdsLWN0cmwtXCIrdCxuKX0pfSxuLnByb3RvdHlwZS5fcmVzaXplQ2FudmFzPWZ1bmN0aW9uKGUscil7dmFyIG49dC5kZWZhdWx0LmRldmljZVBpeGVsUmF0aW98fDE7dGhpcy5fY2FudmFzLndpZHRoPW4qZSx0aGlzLl9jYW52YXMuaGVpZ2h0PW4qcix0aGlzLl9jYW52YXMuc3R5bGUud2lkdGg9ZStcInB4XCIsdGhpcy5fY2FudmFzLnN0eWxlLmhlaWdodD1yK1wicHhcIn0sbi5wcm90b3R5cGUuX3NldHVwUGFpbnRlcj1mdW5jdGlvbigpe3ZhciByPXQuZXh0ZW5kKHtmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OnRoaXMuX2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQscHJlc2VydmVEcmF3aW5nQnVmZmVyOnRoaXMuX3ByZXNlcnZlRHJhd2luZ0J1ZmZlcn0sZS53ZWJHTENvbnRleHRBdHRyaWJ1dGVzKSxuPXRoaXMuX2NhbnZhcy5nZXRDb250ZXh0KFwid2ViZ2xcIixyKXx8dGhpcy5fY2FudmFzLmdldENvbnRleHQoXCJleHBlcmltZW50YWwtd2ViZ2xcIixyKTtuP3RoaXMucGFpbnRlcj1uZXcgenIobix0aGlzLnRyYW5zZm9ybSk6dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKFwiRmFpbGVkIHRvIGluaXRpYWxpemUgV2ViR0xcIikpKX0sbi5wcm90b3R5cGUuX2NvbnRleHRMb3N0PWZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSx0aGlzLl9mcmFtZUlkJiYoYS5jYW5jZWxGcmFtZSh0aGlzLl9mcmFtZUlkKSx0aGlzLl9mcmFtZUlkPW51bGwpLHRoaXMuZmlyZShuZXcgdC5FdmVudChcIndlYmdsY29udGV4dGxvc3RcIix7b3JpZ2luYWxFdmVudDplfSkpfSxuLnByb3RvdHlwZS5fY29udGV4dFJlc3RvcmVkPWZ1bmN0aW9uKGUpe3RoaXMuX3NldHVwUGFpbnRlcigpLHRoaXMucmVzaXplKCksdGhpcy5fdXBkYXRlKCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwid2ViZ2xjb250ZXh0cmVzdG9yZWRcIix7b3JpZ2luYWxFdmVudDplfSkpfSxuLnByb3RvdHlwZS5sb2FkZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fc3R5bGVEaXJ0eSYmIXRoaXMuX3NvdXJjZXNEaXJ0eSYmISghdGhpcy5zdHlsZXx8IXRoaXMuc3R5bGUubG9hZGVkKCkpfSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuc3R5bGUmJih0aGlzLl9zdHlsZURpcnR5PXRoaXMuX3N0eWxlRGlydHl8fHQsdGhpcy5fc291cmNlc0RpcnR5PSEwLHRoaXMuX3JlcmVuZGVyKCkpfSxuLnByb3RvdHlwZS5fcmVxdWVzdFJlbmRlckZyYW1lPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl91cGRhdGUoKSx0aGlzLl9yZW5kZXJUYXNrUXVldWUuYWRkKHQpfSxuLnByb3RvdHlwZS5fY2FuY2VsUmVuZGVyRnJhbWU9ZnVuY3Rpb24odCl7dGhpcy5fcmVuZGVyVGFza1F1ZXVlLnJlbW92ZSh0KX0sbi5wcm90b3R5cGUuX3JlbmRlcj1mdW5jdGlvbigpe3RoaXMuX3JlbmRlclRhc2tRdWV1ZS5ydW4oKTt2YXIgZT0hMTtpZih0aGlzLnN0eWxlJiZ0aGlzLl9zdHlsZURpcnR5KXt0aGlzLl9zdHlsZURpcnR5PSExO3ZhciByPXRoaXMudHJhbnNmb3JtLnpvb20sbj1hLm5vdygpO3RoaXMuc3R5bGUuem9vbUhpc3RvcnkudXBkYXRlKHIsbik7dmFyIGk9bmV3IHQuZGVmYXVsdCQxNihyLHtub3c6bixmYWRlRHVyYXRpb246dGhpcy5fZmFkZUR1cmF0aW9uLHpvb21IaXN0b3J5OnRoaXMuc3R5bGUuem9vbUhpc3RvcnksdHJhbnNpdGlvbjp0aGlzLnN0eWxlLmdldFRyYW5zaXRpb24oKX0pLG89aS5jcm9zc0ZhZGluZ0ZhY3RvcigpOzE9PT1vJiZvPT09dGhpcy5fY3Jvc3NGYWRpbmdGYWN0b3J8fChlPSEwLHRoaXMuX2Nyb3NzRmFkaW5nRmFjdG9yPW8pLHRoaXMuc3R5bGUudXBkYXRlKGkpfXJldHVybiB0aGlzLnN0eWxlJiZ0aGlzLl9zb3VyY2VzRGlydHkmJih0aGlzLl9zb3VyY2VzRGlydHk9ITEsdGhpcy5zdHlsZS5fdXBkYXRlU291cmNlcyh0aGlzLnRyYW5zZm9ybSkpLHRoaXMuX3BsYWNlbWVudERpcnR5PXRoaXMuc3R5bGUmJnRoaXMuc3R5bGUuX3VwZGF0ZVBsYWNlbWVudCh0aGlzLnBhaW50ZXIudHJhbnNmb3JtLHRoaXMuc2hvd0NvbGxpc2lvbkJveGVzLHRoaXMuX2ZhZGVEdXJhdGlvbiksdGhpcy5wYWludGVyLnJlbmRlcih0aGlzLnN0eWxlLHtzaG93VGlsZUJvdW5kYXJpZXM6dGhpcy5zaG93VGlsZUJvdW5kYXJpZXMsc2hvd092ZXJkcmF3SW5zcGVjdG9yOnRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcixyb3RhdGluZzp0aGlzLmlzUm90YXRpbmcoKSx6b29taW5nOnRoaXMuaXNab29taW5nKCksZmFkZUR1cmF0aW9uOnRoaXMuX2ZhZGVEdXJhdGlvbn0pLHRoaXMuZmlyZShuZXcgdC5FdmVudChcInJlbmRlclwiKSksdGhpcy5sb2FkZWQoKSYmIXRoaXMuX2xvYWRlZCYmKHRoaXMuX2xvYWRlZD0hMCx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJsb2FkXCIpKSksdGhpcy5zdHlsZSYmKHRoaXMuc3R5bGUuaGFzVHJhbnNpdGlvbnMoKXx8ZSkmJih0aGlzLl9zdHlsZURpcnR5PSEwKSwodGhpcy5fc291cmNlc0RpcnR5fHx0aGlzLl9yZXBhaW50fHx0aGlzLl9zdHlsZURpcnR5fHx0aGlzLl9wbGFjZW1lbnREaXJ0eSkmJnRoaXMuX3JlcmVuZGVyKCksdGhpc30sbi5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5faGFzaCYmdGhpcy5faGFzaC5yZW1vdmUoKSxhLmNhbmNlbEZyYW1lKHRoaXMuX2ZyYW1lSWQpLHRoaXMuX3JlbmRlclRhc2tRdWV1ZS5jbGVhcigpLHRoaXMuX2ZyYW1lSWQ9bnVsbCx0aGlzLnNldFN0eWxlKG51bGwpLHZvaWQgMCE9PXQuZGVmYXVsdCYmKHQuZGVmYXVsdC5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdGhpcy5fb25XaW5kb3dSZXNpemUsITEpLHQuZGVmYXVsdC5yZW1vdmVFdmVudExpc3RlbmVyKFwib25saW5lXCIsdGhpcy5fb25XaW5kb3dPbmxpbmUsITEpKTt2YXIgZT10aGlzLnBhaW50ZXIuY29udGV4dC5nbC5nZXRFeHRlbnNpb24oXCJXRUJHTF9sb3NlX2NvbnRleHRcIik7ZSYmZS5sb3NlQ29udGV4dCgpLGhuKHRoaXMuX2NhbnZhc0NvbnRhaW5lciksaG4odGhpcy5fY29udHJvbENvbnRhaW5lciksaG4odGhpcy5fbWlzc2luZ0NTU0NvbnRhaW5lciksdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1tYXBcIiksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwicmVtb3ZlXCIpKX0sbi5wcm90b3R5cGUuX3JlcmVuZGVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLnN0eWxlJiYhdGhpcy5fZnJhbWVJZCYmKHRoaXMuX2ZyYW1lSWQ9YS5mcmFtZShmdW5jdGlvbigpe3QuX2ZyYW1lSWQ9bnVsbCx0Ll9yZW5kZXIoKX0pKX0sbi5wcm90b3R5cGUuX29uV2luZG93T25saW5lPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlKCl9LG4ucHJvdG90eXBlLl9vbldpbmRvd1Jlc2l6ZT1mdW5jdGlvbigpe3RoaXMuX3RyYWNrUmVzaXplJiZ0aGlzLnN0b3AoKS5yZXNpemUoKS5fdXBkYXRlKCl9LGkuc2hvd1RpbGVCb3VuZGFyaWVzLmdldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fc2hvd1RpbGVCb3VuZGFyaWVzfSxpLnNob3dUaWxlQm91bmRhcmllcy5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc2hvd1RpbGVCb3VuZGFyaWVzIT09dCYmKHRoaXMuX3Nob3dUaWxlQm91bmRhcmllcz10LHRoaXMuX3VwZGF0ZSgpKX0saS5zaG93Q29sbGlzaW9uQm94ZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXN9LGkuc2hvd0NvbGxpc2lvbkJveGVzLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXMhPT10JiYodGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzPXQsdD90aGlzLnN0eWxlLl9nZW5lcmF0ZUNvbGxpc2lvbkJveGVzKCk6dGhpcy5fdXBkYXRlKCkpfSxpLnNob3dPdmVyZHJhd0luc3BlY3Rvci5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcn0saS5zaG93T3ZlcmRyYXdJbnNwZWN0b3Iuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3RvciE9PXQmJih0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3I9dCx0aGlzLl91cGRhdGUoKSl9LGkucmVwYWludC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3JlcGFpbnR9LGkucmVwYWludC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fcmVwYWludD10LHRoaXMuX3VwZGF0ZSgpfSxpLnZlcnRpY2VzLmdldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fdmVydGljZXN9LGkudmVydGljZXMuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3ZlcnRpY2VzPXQsdGhpcy5fdXBkYXRlKCl9LG4ucHJvdG90eXBlLl9vbkRhdGE9ZnVuY3Rpb24oZSl7dGhpcy5fdXBkYXRlKFwic3R5bGVcIj09PWUuZGF0YVR5cGUpLHRoaXMuZmlyZShuZXcgdC5FdmVudChlLmRhdGFUeXBlK1wiZGF0YVwiLGUpKX0sbi5wcm90b3R5cGUuX29uRGF0YUxvYWRpbmc9ZnVuY3Rpb24oZSl7dGhpcy5maXJlKG5ldyB0LkV2ZW50KGUuZGF0YVR5cGUrXCJkYXRhbG9hZGluZ1wiLGUpKX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobi5wcm90b3R5cGUsaSksbn0ocm4pO2Z1bmN0aW9uIGhuKHQpe3QucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfXZhciBmbj17c2hvd0NvbXBhc3M6ITAsc2hvd1pvb206ITB9LHBuPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7dGhpcy5vcHRpb25zPXQuZXh0ZW5kKHt9LGZuLGUpLHRoaXMuX2NvbnRhaW5lcj1zLmNyZWF0ZShcImRpdlwiLFwibWFwYm94Z2wtY3RybCBtYXBib3hnbC1jdHJsLWdyb3VwXCIpLHRoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpfSksdGhpcy5vcHRpb25zLnNob3dab29tJiYodGhpcy5fem9vbUluQnV0dG9uPXRoaXMuX2NyZWF0ZUJ1dHRvbihcIm1hcGJveGdsLWN0cmwtaWNvbiBtYXBib3hnbC1jdHJsLXpvb20taW5cIixcIlpvb20gSW5cIixmdW5jdGlvbigpe3JldHVybiByLl9tYXAuem9vbUluKCl9KSx0aGlzLl96b29tT3V0QnV0dG9uPXRoaXMuX2NyZWF0ZUJ1dHRvbihcIm1hcGJveGdsLWN0cmwtaWNvbiBtYXBib3hnbC1jdHJsLXpvb20tb3V0XCIsXCJab29tIE91dFwiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuX21hcC56b29tT3V0KCl9KSksdGhpcy5vcHRpb25zLnNob3dDb21wYXNzJiYodC5iaW5kQWxsKFtcIl9yb3RhdGVDb21wYXNzQXJyb3dcIl0sdGhpcyksdGhpcy5fY29tcGFzcz10aGlzLl9jcmVhdGVCdXR0b24oXCJtYXBib3hnbC1jdHJsLWljb24gbWFwYm94Z2wtY3RybC1jb21wYXNzXCIsXCJSZXNldCBOb3J0aFwiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuX21hcC5yZXNldE5vcnRoKCl9KSx0aGlzLl9jb21wYXNzQXJyb3c9cy5jcmVhdGUoXCJzcGFuXCIsXCJtYXBib3hnbC1jdHJsLWNvbXBhc3MtYXJyb3dcIix0aGlzLl9jb21wYXNzKSl9O2Z1bmN0aW9uIGRuKHQsZSxyKXtpZih0PW5ldyBHKHQubG5nLHQubGF0KSxlKXt2YXIgbj1uZXcgRyh0LmxuZy0zNjAsdC5sYXQpLGk9bmV3IEcodC5sbmcrMzYwLHQubGF0KSxhPXIubG9jYXRpb25Qb2ludCh0KS5kaXN0U3FyKGUpO3IubG9jYXRpb25Qb2ludChuKS5kaXN0U3FyKGUpPGE/dD1uOnIubG9jYXRpb25Qb2ludChpKS5kaXN0U3FyKGUpPGEmJih0PWkpfWZvcig7TWF0aC5hYnModC5sbmctci5jZW50ZXIubG5nKT4xODA7KXt2YXIgbz1yLmxvY2F0aW9uUG9pbnQodCk7aWYoby54Pj0wJiZvLnk+PTAmJm8ueDw9ci53aWR0aCYmby55PD1yLmhlaWdodClicmVhazt0LmxuZz5yLmNlbnRlci5sbmc/dC5sbmctPTM2MDp0LmxuZys9MzYwfXJldHVybiB0fXBuLnByb3RvdHlwZS5fcm90YXRlQ29tcGFzc0Fycm93PWZ1bmN0aW9uKCl7dmFyIHQ9XCJyb3RhdGUoXCIrdGhpcy5fbWFwLnRyYW5zZm9ybS5hbmdsZSooMTgwL01hdGguUEkpK1wiZGVnKVwiO3RoaXMuX2NvbXBhc3NBcnJvdy5zdHlsZS50cmFuc2Zvcm09dH0scG4ucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tYXA9dCx0aGlzLm9wdGlvbnMuc2hvd0NvbXBhc3MmJih0aGlzLl9tYXAub24oXCJyb3RhdGVcIix0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cpLHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdygpLHRoaXMuX2hhbmRsZXI9bmV3IFdyKHQse2J1dHRvbjpcImxlZnRcIixlbGVtZW50OnRoaXMuX2NvbXBhc3N9KSx0aGlzLl9oYW5kbGVyLmVuYWJsZSgpKSx0aGlzLl9jb250YWluZXJ9LHBuLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3MucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5vcHRpb25zLnNob3dDb21wYXNzJiYodGhpcy5fbWFwLm9mZihcInJvdGF0ZVwiLHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdyksdGhpcy5faGFuZGxlci5kaXNhYmxlKCksZGVsZXRlIHRoaXMuX2hhbmRsZXIpLGRlbGV0ZSB0aGlzLl9tYXB9LHBuLnByb3RvdHlwZS5fY3JlYXRlQnV0dG9uPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1zLmNyZWF0ZShcImJ1dHRvblwiLHQsdGhpcy5fY29udGFpbmVyKTtyZXR1cm4gbi50eXBlPVwiYnV0dG9uXCIsbi5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsZSksbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIixyKSxufTt2YXIgZ249e2NlbnRlcjpcInRyYW5zbGF0ZSgtNTAlLC01MCUpXCIsdG9wOlwidHJhbnNsYXRlKC01MCUsMClcIixcInRvcC1sZWZ0XCI6XCJ0cmFuc2xhdGUoMCwwKVwiLFwidG9wLXJpZ2h0XCI6XCJ0cmFuc2xhdGUoLTEwMCUsMClcIixib3R0b206XCJ0cmFuc2xhdGUoLTUwJSwtMTAwJSlcIixcImJvdHRvbS1sZWZ0XCI6XCJ0cmFuc2xhdGUoMCwtMTAwJSlcIixcImJvdHRvbS1yaWdodFwiOlwidHJhbnNsYXRlKC0xMDAlLC0xMDAlKVwiLGxlZnQ6XCJ0cmFuc2xhdGUoMCwtNTAlKVwiLHJpZ2h0OlwidHJhbnNsYXRlKC0xMDAlLC01MCUpXCJ9O2Z1bmN0aW9uIHZuKHQsZSxyKXt2YXIgbj10LmNsYXNzTGlzdDtmb3IodmFyIGkgaW4gZ24pbi5yZW1vdmUoXCJtYXBib3hnbC1cIityK1wiLWFuY2hvci1cIitpKTtuLmFkZChcIm1hcGJveGdsLVwiK3IrXCItYW5jaG9yLVwiK2UpfXZhciBtbj1mdW5jdGlvbihlKXtpZigoYXJndW1lbnRzWzBdaW5zdGFuY2VvZiB0LmRlZmF1bHQuSFRNTEVsZW1lbnR8fDI9PT1hcmd1bWVudHMubGVuZ3RoKSYmKGU9dC5leHRlbmQoe2VsZW1lbnQ6ZX0sYXJndW1lbnRzWzFdKSksdC5iaW5kQWxsKFtcIl91cGRhdGVcIixcIl9vbk1hcENsaWNrXCJdLHRoaXMpLHRoaXMuX2FuY2hvcj1lJiZlLmFuY2hvcnx8XCJjZW50ZXJcIix0aGlzLl9jb2xvcj1lJiZlLmNvbG9yfHxcIiMzRkIxQ0VcIixlJiZlLmVsZW1lbnQpdGhpcy5fZWxlbWVudD1lLmVsZW1lbnQsdGhpcy5fb2Zmc2V0PXQuZGVmYXVsdCQxLmNvbnZlcnQoZSYmZS5vZmZzZXR8fFswLDBdKTtlbHNle3RoaXMuX2RlZmF1bHRNYXJrZXI9ITAsdGhpcy5fZWxlbWVudD1zLmNyZWF0ZShcImRpdlwiKTt2YXIgcj1zLmNyZWF0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcInN2Z1wiKTtyLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJoZWlnaHRcIixcIjQxcHhcIiksci5zZXRBdHRyaWJ1dGVOUyhudWxsLFwid2lkdGhcIixcIjI3cHhcIiksci5zZXRBdHRyaWJ1dGVOUyhudWxsLFwidmlld0JveFwiLFwiMCAwIDI3IDQxXCIpO3ZhciBuPXMuY3JlYXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwiZ1wiKTtuLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJzdHJva2VcIixcIm5vbmVcIiksbi5zZXRBdHRyaWJ1dGVOUyhudWxsLFwic3Ryb2tlLXdpZHRoXCIsXCIxXCIpLG4uc2V0QXR0cmlidXRlTlMobnVsbCxcImZpbGxcIixcIm5vbmVcIiksbi5zZXRBdHRyaWJ1dGVOUyhudWxsLFwiZmlsbC1ydWxlXCIsXCJldmVub2RkXCIpO3ZhciBpPXMuY3JlYXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwiZ1wiKTtpLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJmaWxsLXJ1bGVcIixcIm5vbnplcm9cIik7dmFyIGE9cy5jcmVhdGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXCJnXCIpO2Euc2V0QXR0cmlidXRlTlMobnVsbCxcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKDMuMCwgMjkuMClcIiksYS5zZXRBdHRyaWJ1dGVOUyhudWxsLFwiZmlsbFwiLFwiIzAwMDAwMFwiKTtmb3IodmFyIG89MCxsPVt7cng6XCIxMC41XCIscnk6XCI1LjI1MDAyMjczXCJ9LHtyeDpcIjEwLjVcIixyeTpcIjUuMjUwMDIyNzNcIn0se3J4OlwiOS41XCIscnk6XCI0Ljc3Mjc1MDA3XCJ9LHtyeDpcIjguNVwiLHJ5OlwiNC4yOTU0OTkzNlwifSx7cng6XCI3LjVcIixyeTpcIjMuODE4MjIzMDhcIn0se3J4OlwiNi41XCIscnk6XCIzLjM0MDk0Njc5XCJ9LHtyeDpcIjUuNVwiLHJ5OlwiMi44NjM2NzA1MVwifSx7cng6XCI0LjVcIixyeTpcIjIuMzg2MzY4NjRcIn1dO288bC5sZW5ndGg7bys9MSl7dmFyIGM9bFtvXSx1PXMuY3JlYXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwiZWxsaXBzZVwiKTt1LnNldEF0dHJpYnV0ZU5TKG51bGwsXCJvcGFjaXR5XCIsXCIwLjA0XCIpLHUuc2V0QXR0cmlidXRlTlMobnVsbCxcImN4XCIsXCIxMC41XCIpLHUuc2V0QXR0cmlidXRlTlMobnVsbCxcImN5XCIsXCI1LjgwMDI5MDA4XCIpLHUuc2V0QXR0cmlidXRlTlMobnVsbCxcInJ4XCIsYy5yeCksdS5zZXRBdHRyaWJ1dGVOUyhudWxsLFwicnlcIixjLnJ5KSxhLmFwcGVuZENoaWxkKHUpfXZhciBoPXMuY3JlYXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwiZ1wiKTtoLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJmaWxsXCIsdGhpcy5fY29sb3IpO3ZhciBmPXMuY3JlYXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwicGF0aFwiKTtmLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJkXCIsXCJNMjcsMTMuNSBDMjcsMTkuMDc0NjQ0IDIwLjI1MDAwMSwyNy4wMDAwMDIgMTQuNzUsMzQuNTAwMDAyIEMxNC4wMTY2NjUsMzUuNTAwMDA0IDEyLjk4MzMzNSwzNS41MDAwMDQgMTIuMjUsMzQuNTAwMDAyIEM2Ljc0OTk5OTMsMjcuMDAwMDAyIDAsMTkuMjIyNTYyIDAsMTMuNSBDMCw2LjA0NDE1NTkgNi4wNDQxNTU5LDAgMTMuNSwwIEMyMC45NTU4NDQsMCAyNyw2LjA0NDE1NTkgMjcsMTMuNSBaXCIpLGguYXBwZW5kQ2hpbGQoZik7dmFyIHA9cy5jcmVhdGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXCJnXCIpO3Auc2V0QXR0cmlidXRlTlMobnVsbCxcIm9wYWNpdHlcIixcIjAuMjVcIikscC5zZXRBdHRyaWJ1dGVOUyhudWxsLFwiZmlsbFwiLFwiIzAwMDAwMFwiKTt2YXIgZD1zLmNyZWF0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcInBhdGhcIik7ZC5zZXRBdHRyaWJ1dGVOUyhudWxsLFwiZFwiLFwiTTEzLjUsMCBDNi4wNDQxNTU5LDAgMCw2LjA0NDE1NTkgMCwxMy41IEMwLDE5LjIyMjU2MiA2Ljc0OTk5OTMsMjcgMTIuMjUsMzQuNSBDMTMsMzUuNTIyNzI3IDE0LjAxNjY2NCwzNS41MDAwMDQgMTQuNzUsMzQuNSBDMjAuMjUwMDAxLDI3IDI3LDE5LjA3NDY0NCAyNywxMy41IEMyNyw2LjA0NDE1NTkgMjAuOTU1ODQ0LDAgMTMuNSwwIFogTTEzLjUsMSBDMjAuNDE1NDA0LDEgMjYsNi41ODQ1OTYgMjYsMTMuNSBDMjYsMTUuODk4NjU3IDI0LjQ5NTU4NCwxOS4xODE0MzEgMjIuMjIwNzAzLDIyLjczODI4MSBDMTkuOTQ1ODIzLDI2LjI5NTEzMiAxNi43MDUxMTksMzAuMTQyMTY3IDEzLjk0MzM1OSwzMy45MDgyMDMgQzEzLjc0MzQ0NSwzNC4xODA4MTQgMTMuNjEyNzE1LDM0LjMyMjczOCAxMy41LDM0LjQ0MTQwNiBDMTMuMzg3Mjg1LDM0LjMyMjczOCAxMy4yNTY1NTUsMzQuMTgwODE0IDEzLjA1NjY0MSwzMy45MDgyMDMgQzEwLjI4NDQ4MSwzMC4xMjc5ODUgNy40MTQ4Njg0LDI2LjMxNDE1OSA1LjAxNTYyNSwyMi43NzM0MzggQzIuNjE2MzgxNiwxOS4yMzI3MTUgMSwxNS45NTM1MzggMSwxMy41IEMxLDYuNTg0NTk2IDYuNTg0NTk2LDEgMTMuNSwxIFpcIikscC5hcHBlbmRDaGlsZChkKTt2YXIgZz1zLmNyZWF0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcImdcIik7Zy5zZXRBdHRyaWJ1dGVOUyhudWxsLFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoNi4wLCA3LjApXCIpLGcuc2V0QXR0cmlidXRlTlMobnVsbCxcImZpbGxcIixcIiNGRkZGRkZcIik7dmFyIHY9cy5jcmVhdGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXCJnXCIpO3Yuc2V0QXR0cmlidXRlTlMobnVsbCxcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKDguMCwgOC4wKVwiKTt2YXIgbT1zLmNyZWF0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcImNpcmNsZVwiKTttLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJmaWxsXCIsXCIjMDAwMDAwXCIpLG0uc2V0QXR0cmlidXRlTlMobnVsbCxcIm9wYWNpdHlcIixcIjAuMjVcIiksbS5zZXRBdHRyaWJ1dGVOUyhudWxsLFwiY3hcIixcIjUuNVwiKSxtLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJjeVwiLFwiNS41XCIpLG0uc2V0QXR0cmlidXRlTlMobnVsbCxcInJcIixcIjUuNDk5OTk2MlwiKTt2YXIgeT1zLmNyZWF0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcImNpcmNsZVwiKTt5LnNldEF0dHJpYnV0ZU5TKG51bGwsXCJmaWxsXCIsXCIjRkZGRkZGXCIpLHkuc2V0QXR0cmlidXRlTlMobnVsbCxcImN4XCIsXCI1LjVcIikseS5zZXRBdHRyaWJ1dGVOUyhudWxsLFwiY3lcIixcIjUuNVwiKSx5LnNldEF0dHJpYnV0ZU5TKG51bGwsXCJyXCIsXCI1LjQ5OTk5NjJcIiksdi5hcHBlbmRDaGlsZChtKSx2LmFwcGVuZENoaWxkKHkpLGkuYXBwZW5kQ2hpbGQoYSksaS5hcHBlbmRDaGlsZChoKSxpLmFwcGVuZENoaWxkKHApLGkuYXBwZW5kQ2hpbGQoZyksaS5hcHBlbmRDaGlsZCh2KSxyLmFwcGVuZENoaWxkKGkpLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQociksdGhpcy5fb2Zmc2V0PXQuZGVmYXVsdCQxLmNvbnZlcnQoZSYmZS5vZmZzZXR8fFswLC0xNF0pfXRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLW1hcmtlclwiKSx0aGlzLl9wb3B1cD1udWxsfTttbi5wcm90b3R5cGUuYWRkVG89ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVtb3ZlKCksdGhpcy5fbWFwPXQsdC5nZXRDYW52YXNDb250YWluZXIoKS5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KSx0Lm9uKFwibW92ZVwiLHRoaXMuX3VwZGF0ZSksdC5vbihcIm1vdmVlbmRcIix0aGlzLl91cGRhdGUpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX21hcC5vbihcImNsaWNrXCIsdGhpcy5fb25NYXBDbGljayksdGhpc30sbW4ucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJih0aGlzLl9tYXAub2ZmKFwiY2xpY2tcIix0aGlzLl9vbk1hcENsaWNrKSx0aGlzLl9tYXAub2ZmKFwibW92ZVwiLHRoaXMuX3VwZGF0ZSksdGhpcy5fbWFwLm9mZihcIm1vdmVlbmRcIix0aGlzLl91cGRhdGUpLGRlbGV0ZSB0aGlzLl9tYXApLHMucmVtb3ZlKHRoaXMuX2VsZW1lbnQpLHRoaXMuX3BvcHVwJiZ0aGlzLl9wb3B1cC5yZW1vdmUoKSx0aGlzfSxtbi5wcm90b3R5cGUuZ2V0TG5nTGF0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xuZ0xhdH0sbW4ucHJvdG90eXBlLnNldExuZ0xhdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbG5nTGF0PUcuY29udmVydCh0KSx0aGlzLl9wb3M9bnVsbCx0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuc2V0TG5nTGF0KHRoaXMuX2xuZ0xhdCksdGhpcy5fdXBkYXRlKCksdGhpc30sbW4ucHJvdG90eXBlLmdldEVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudH0sbW4ucHJvdG90eXBlLnNldFBvcHVwPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX3BvcHVwJiYodGhpcy5fcG9wdXAucmVtb3ZlKCksdGhpcy5fcG9wdXA9bnVsbCksdCl7aWYoIShcIm9mZnNldFwiaW4gdC5vcHRpb25zKSl7dmFyIGU9TWF0aC5zcXJ0KE1hdGgucG93KDEzLjUsMikvMik7dC5vcHRpb25zLm9mZnNldD10aGlzLl9kZWZhdWx0TWFya2VyP3t0b3A6WzAsMF0sXCJ0b3AtbGVmdFwiOlswLDBdLFwidG9wLXJpZ2h0XCI6WzAsMF0sYm90dG9tOlswLC0zOC4xXSxcImJvdHRvbS1sZWZ0XCI6W2UsLTEqKDI0LjYrZSldLFwiYm90dG9tLXJpZ2h0XCI6Wy1lLC0xKigyNC42K2UpXSxsZWZ0OlsxMy41LC0yNC42XSxyaWdodDpbLTEzLjUsLTI0LjZdfTp0aGlzLl9vZmZzZXR9dGhpcy5fcG9wdXA9dCx0aGlzLl9sbmdMYXQmJnRoaXMuX3BvcHVwLnNldExuZ0xhdCh0aGlzLl9sbmdMYXQpfXJldHVybiB0aGlzfSxtbi5wcm90b3R5cGUuX29uTWFwQ2xpY2s9ZnVuY3Rpb24odCl7dmFyIGU9dC5vcmlnaW5hbEV2ZW50LnRhcmdldCxyPXRoaXMuX2VsZW1lbnQ7dGhpcy5fcG9wdXAmJihlPT09cnx8ci5jb250YWlucyhlKSkmJnRoaXMudG9nZ2xlUG9wdXAoKX0sbW4ucHJvdG90eXBlLmdldFBvcHVwPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcHVwfSxtbi5wcm90b3R5cGUudG9nZ2xlUG9wdXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wb3B1cDtyZXR1cm4gdD8odC5pc09wZW4oKT90LnJlbW92ZSgpOnQuYWRkVG8odGhpcy5fbWFwKSx0aGlzKTp0aGlzfSxtbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLl9tYXAmJih0aGlzLl9tYXAudHJhbnNmb3JtLnJlbmRlcldvcmxkQ29waWVzJiYodGhpcy5fbG5nTGF0PWRuKHRoaXMuX2xuZ0xhdCx0aGlzLl9wb3MsdGhpcy5fbWFwLnRyYW5zZm9ybSkpLHRoaXMuX3Bvcz10aGlzLl9tYXAucHJvamVjdCh0aGlzLl9sbmdMYXQpLl9hZGQodGhpcy5fb2Zmc2V0KSx0JiZcIm1vdmVlbmRcIiE9PXQudHlwZXx8KHRoaXMuX3Bvcz10aGlzLl9wb3Mucm91bmQoKSkscy5zZXRUcmFuc2Zvcm0odGhpcy5fZWxlbWVudCxnblt0aGlzLl9hbmNob3JdK1wiIHRyYW5zbGF0ZShcIit0aGlzLl9wb3MueCtcInB4LCBcIit0aGlzLl9wb3MueStcInB4KVwiKSx2bih0aGlzLl9lbGVtZW50LHRoaXMuX2FuY2hvcixcIm1hcmtlclwiKSl9LG1uLnByb3RvdHlwZS5nZXRPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb2Zmc2V0fSxtbi5wcm90b3R5cGUuc2V0T2Zmc2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9vZmZzZXQ9dC5kZWZhdWx0JDEuY29udmVydChlKSx0aGlzLl91cGRhdGUoKSx0aGlzfTt2YXIgeW4seG49e3Bvc2l0aW9uT3B0aW9uczp7ZW5hYmxlSGlnaEFjY3VyYWN5OiExLG1heGltdW1BZ2U6MCx0aW1lb3V0OjZlM30sZml0Qm91bmRzT3B0aW9uczp7bWF4Wm9vbToxNX0sdHJhY2tVc2VyTG9jYXRpb246ITEsc2hvd1VzZXJMb2NhdGlvbjohMH0sYm49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyKXtlLmNhbGwodGhpcyksdGhpcy5vcHRpb25zPXQuZXh0ZW5kKHt9LHhuLHIpLHQuYmluZEFsbChbXCJfb25TdWNjZXNzXCIsXCJfb25FcnJvclwiLFwiX2ZpbmlzaFwiLFwiX3NldHVwVUlcIixcIl91cGRhdGVDYW1lcmFcIixcIl91cGRhdGVNYXJrZXJcIl0sdGhpcyl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKGUpe3ZhciByO3JldHVybiB0aGlzLl9tYXA9ZSx0aGlzLl9jb250YWluZXI9cy5jcmVhdGUoXCJkaXZcIixcIm1hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1ncm91cFwiKSxyPXRoaXMuX3NldHVwVUksdm9pZCAwIT09eW4/cih5bik6dm9pZCAwIT09dC5kZWZhdWx0Lm5hdmlnYXRvci5wZXJtaXNzaW9ucz90LmRlZmF1bHQubmF2aWdhdG9yLnBlcm1pc3Npb25zLnF1ZXJ5KHtuYW1lOlwiZ2VvbG9jYXRpb25cIn0pLnRoZW4oZnVuY3Rpb24odCl7eW49XCJkZW5pZWRcIiE9PXQuc3RhdGUscih5bil9KTooeW49ISF0LmRlZmF1bHQubmF2aWdhdG9yLmdlb2xvY2F0aW9uLHIoeW4pKSx0aGlzLl9jb250YWluZXJ9LHIucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7dm9pZCAwIT09dGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEJiYodC5kZWZhdWx0Lm5hdmlnYXRvci5nZW9sb2NhdGlvbi5jbGVhcldhdGNoKHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCksdGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEPXZvaWQgMCksdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJnRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlci5yZW1vdmUoKSxzLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLHRoaXMuX21hcD12b2lkIDB9LHIucHJvdG90eXBlLl9vblN1Y2Nlc3M9ZnVuY3Rpb24oZSl7aWYodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKXN3aXRjaCh0aGlzLl9sYXN0S25vd25Qb3NpdGlvbj1lLHRoaXMuX3dhdGNoU3RhdGUpe2Nhc2VcIldBSVRJTkdfQUNUSVZFXCI6Y2FzZVwiQUNUSVZFX0xPQ0tcIjpjYXNlXCJBQ1RJVkVfRVJST1JcIjp0aGlzLl93YXRjaFN0YXRlPVwiQUNUSVZFX0xPQ0tcIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmdcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3JcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmVcIik7YnJlYWs7Y2FzZVwiQkFDS0dST1VORFwiOmNhc2VcIkJBQ0tHUk9VTkRfRVJST1JcIjp0aGlzLl93YXRjaFN0YXRlPVwiQkFDS0dST1VORFwiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZ1wiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3JcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kXCIpfXRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiZcIk9GRlwiIT09dGhpcy5fd2F0Y2hTdGF0ZSYmdGhpcy5fdXBkYXRlTWFya2VyKGUpLHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbiYmXCJBQ1RJVkVfTE9DS1wiIT09dGhpcy5fd2F0Y2hTdGF0ZXx8dGhpcy5fdXBkYXRlQ2FtZXJhKGUpLHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiZ0aGlzLl9kb3RFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC11c2VyLWxvY2F0aW9uLWRvdC1zdGFsZVwiKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJnZW9sb2NhdGVcIixlKSksdGhpcy5fZmluaXNoKCl9LHIucHJvdG90eXBlLl91cGRhdGVDYW1lcmE9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEcodC5jb29yZHMubG9uZ2l0dWRlLHQuY29vcmRzLmxhdGl0dWRlKSxyPXQuY29vcmRzLmFjY3VyYWN5O3RoaXMuX21hcC5maXRCb3VuZHMoZS50b0JvdW5kcyhyKSx0aGlzLm9wdGlvbnMuZml0Qm91bmRzT3B0aW9ucyx7Z2VvbG9jYXRlU291cmNlOiEwfSl9LHIucHJvdG90eXBlLl91cGRhdGVNYXJrZXI9ZnVuY3Rpb24odCl7dD90aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXIuc2V0TG5nTGF0KFt0LmNvb3Jkcy5sb25naXR1ZGUsdC5jb29yZHMubGF0aXR1ZGVdKS5hZGRUbyh0aGlzLl9tYXApOnRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlci5yZW1vdmUoKX0sci5wcm90b3R5cGUuX29uRXJyb3I9ZnVuY3Rpb24oZSl7aWYodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKWlmKDE9PT1lLmNvZGUpdGhpcy5fd2F0Y2hTdGF0ZT1cIk9GRlwiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZ1wiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZVwiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvclwiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmRcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kLWVycm9yXCIpLHZvaWQgMCE9PXRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCYmdGhpcy5fY2xlYXJXYXRjaCgpO2Vsc2Ugc3dpdGNoKHRoaXMuX3dhdGNoU3RhdGUpe2Nhc2VcIldBSVRJTkdfQUNUSVZFXCI6dGhpcy5fd2F0Y2hTdGF0ZT1cIkFDVElWRV9FUlJPUlwiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlXCIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yXCIpO2JyZWFrO2Nhc2VcIkFDVElWRV9MT0NLXCI6dGhpcy5fd2F0Y2hTdGF0ZT1cIkFDVElWRV9FUlJPUlwiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlXCIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yXCIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZ1wiKTticmVhaztjYXNlXCJCQUNLR1JPVU5EXCI6dGhpcy5fd2F0Y2hTdGF0ZT1cIkJBQ0tHUk9VTkRfRVJST1JcIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmRcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kLWVycm9yXCIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZ1wiKX1cIk9GRlwiIT09dGhpcy5fd2F0Y2hTdGF0ZSYmdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJnRoaXMuX2RvdEVsZW1lbnQuY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLXVzZXItbG9jYXRpb24tZG90LXN0YWxlXCIpLHRoaXMuZmlyZShuZXcgdC5FdmVudChcImVycm9yXCIsZSkpLHRoaXMuX2ZpbmlzaCgpfSxyLnByb3RvdHlwZS5fZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fdGltZW91dElkJiZjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dElkKSx0aGlzLl90aW1lb3V0SWQ9dm9pZCAwfSxyLnByb3RvdHlwZS5fc2V0dXBVST1mdW5jdGlvbihlKXt2YXIgcj10aGlzOyExIT09ZSYmKHRoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpfSksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uPXMuY3JlYXRlKFwiYnV0dG9uXCIsXCJtYXBib3hnbC1jdHJsLWljb24gbWFwYm94Z2wtY3RybC1nZW9sb2NhdGVcIix0aGlzLl9jb250YWluZXIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi50eXBlPVwiYnV0dG9uXCIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIixcIkdlb2xvY2F0ZVwiKSx0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24mJih0aGlzLl9nZW9sb2NhdGVCdXR0b24uc2V0QXR0cmlidXRlKFwiYXJpYS1wcmVzc2VkXCIsXCJmYWxzZVwiKSx0aGlzLl93YXRjaFN0YXRlPVwiT0ZGXCIpLHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiYodGhpcy5fZG90RWxlbWVudD1zLmNyZWF0ZShcImRpdlwiLFwibWFwYm94Z2wtdXNlci1sb2NhdGlvbi1kb3RcIiksdGhpcy5fdXNlckxvY2F0aW9uRG90TWFya2VyPW5ldyBtbih0aGlzLl9kb3RFbGVtZW50KSx0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24mJih0aGlzLl93YXRjaFN0YXRlPVwiT0ZGXCIpKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdGhpcy50cmlnZ2VyLmJpbmQodGhpcykpLHRoaXMuX3NldHVwPSEwLHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbiYmdGhpcy5fbWFwLm9uKFwibW92ZXN0YXJ0XCIsZnVuY3Rpb24oZSl7ZS5nZW9sb2NhdGVTb3VyY2V8fFwiQUNUSVZFX0xPQ0tcIiE9PXIuX3dhdGNoU3RhdGV8fChyLl93YXRjaFN0YXRlPVwiQkFDS0dST1VORFwiLHIuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZFwiKSxyLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZVwiKSxyLmZpcmUobmV3IHQuRXZlbnQoXCJ0cmFja3VzZXJsb2NhdGlvbmVuZFwiKSkpfSkpfSxyLnByb3RvdHlwZS50cmlnZ2VyPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX3NldHVwKXJldHVybiB0Lndhcm5PbmNlKFwiR2VvbG9jYXRlIGNvbnRyb2wgdHJpZ2dlcmVkIGJlZm9yZSBhZGRlZCB0byBhIG1hcFwiKSwhMTtpZih0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24pe3N3aXRjaCh0aGlzLl93YXRjaFN0YXRlKXtjYXNlXCJPRkZcIjp0aGlzLl93YXRjaFN0YXRlPVwiV0FJVElOR19BQ1RJVkVcIix0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJ0cmFja3VzZXJsb2NhdGlvbnN0YXJ0XCIpKTticmVhaztjYXNlXCJXQUlUSU5HX0FDVElWRVwiOmNhc2VcIkFDVElWRV9MT0NLXCI6Y2FzZVwiQUNUSVZFX0VSUk9SXCI6Y2FzZVwiQkFDS0dST1VORF9FUlJPUlwiOnRoaXMuX3dhdGNoU3RhdGU9XCJPRkZcIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmdcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmVcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3JcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kXCIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvclwiKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJ0cmFja3VzZXJsb2NhdGlvbmVuZFwiKSk7YnJlYWs7Y2FzZVwiQkFDS0dST1VORFwiOnRoaXMuX3dhdGNoU3RhdGU9XCJBQ1RJVkVfTE9DS1wiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZFwiKSx0aGlzLl9sYXN0S25vd25Qb3NpdGlvbiYmdGhpcy5fdXBkYXRlQ2FtZXJhKHRoaXMuX2xhc3RLbm93blBvc2l0aW9uKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJ0cmFja3VzZXJsb2NhdGlvbnN0YXJ0XCIpKX1zd2l0Y2godGhpcy5fd2F0Y2hTdGF0ZSl7Y2FzZVwiV0FJVElOR19BQ1RJVkVcIjp0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmdcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmVcIik7YnJlYWs7Y2FzZVwiQUNUSVZFX0xPQ0tcIjp0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZVwiKTticmVhaztjYXNlXCJBQ1RJVkVfRVJST1JcIjp0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmdcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3JcIik7YnJlYWs7Y2FzZVwiQkFDS0dST1VORFwiOnRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZFwiKTticmVhaztjYXNlXCJCQUNLR1JPVU5EX0VSUk9SXCI6dGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nXCIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvclwiKX1cIk9GRlwiPT09dGhpcy5fd2F0Y2hTdGF0ZSYmdm9pZCAwIT09dGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEP3RoaXMuX2NsZWFyV2F0Y2goKTp2b2lkIDA9PT10aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQmJih0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmdcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZShcImFyaWEtcHJlc3NlZFwiLFwidHJ1ZVwiKSx0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQ9dC5kZWZhdWx0Lm5hdmlnYXRvci5nZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uKHRoaXMuX29uU3VjY2Vzcyx0aGlzLl9vbkVycm9yLHRoaXMub3B0aW9ucy5wb3NpdGlvbk9wdGlvbnMpKX1lbHNlIHQuZGVmYXVsdC5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHRoaXMuX29uU3VjY2Vzcyx0aGlzLl9vbkVycm9yLHRoaXMub3B0aW9ucy5wb3NpdGlvbk9wdGlvbnMpLHRoaXMuX3RpbWVvdXRJZD1zZXRUaW1lb3V0KHRoaXMuX2ZpbmlzaCwxZTQpO3JldHVybiEwfSxyLnByb3RvdHlwZS5fY2xlYXJXYXRjaD1mdW5jdGlvbigpe3QuZGVmYXVsdC5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCh0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQpLHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRD12b2lkIDAsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nXCIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoXCJhcmlhLXByZXNzZWRcIixcImZhbHNlXCIpLHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiZ0aGlzLl91cGRhdGVNYXJrZXIobnVsbCl9LHJ9KHQuRXZlbnRlZCksX249e21heFdpZHRoOjEwMCx1bml0OlwibWV0cmljXCJ9LHduPWZ1bmN0aW9uKGUpe3RoaXMub3B0aW9ucz10LmV4dGVuZCh7fSxfbixlKSx0LmJpbmRBbGwoW1wiX29uTW92ZVwiLFwic2V0VW5pdFwiXSx0aGlzKX07ZnVuY3Rpb24ga24odCxlLHIpe3ZhciBuLGksYSxvLHMsbCxjPXImJnIubWF4V2lkdGh8fDEwMCx1PXQuX2NvbnRhaW5lci5jbGllbnRIZWlnaHQvMixoPShuPXQudW5wcm9qZWN0KFswLHVdKSxpPXQudW5wcm9qZWN0KFtjLHVdKSxhPU1hdGguUEkvMTgwLG89bi5sYXQqYSxzPWkubGF0KmEsbD1NYXRoLnNpbihvKSpNYXRoLnNpbihzKStNYXRoLmNvcyhvKSpNYXRoLmNvcyhzKSpNYXRoLmNvcygoaS5sbmctbi5sbmcpKmEpLDYzNzFlMypNYXRoLmFjb3MoTWF0aC5taW4obCwxKSkpO2lmKHImJlwiaW1wZXJpYWxcIj09PXIudW5pdCl7dmFyIGY9My4yODA4Kmg7Zj41MjgwP0FuKGUsYyxmLzUyODAsXCJtaVwiKTpBbihlLGMsZixcImZ0XCIpfWVsc2UgciYmXCJuYXV0aWNhbFwiPT09ci51bml0P0FuKGUsYyxoLzE4NTIsXCJubVwiKTpBbihlLGMsaCxcIm1cIil9ZnVuY3Rpb24gQW4odCxlLHIsbil7dmFyIGksYSxvLHM9KGk9ciwoYT1NYXRoLnBvdygxMCwoXCJcIitNYXRoLmZsb29yKGkpKS5sZW5ndGgtMSkpKihvPShvPWkvYSk+PTEwPzEwOm8+PTU/NTpvPj0zPzM6bz49Mj8yOjEpKSxsPXMvcjtcIm1cIj09PW4mJnM+PTFlMyYmKHMvPTFlMyxuPVwia21cIiksdC5zdHlsZS53aWR0aD1lKmwrXCJweFwiLHQuaW5uZXJIVE1MPXMrbn13bi5wcm90b3R5cGUuZ2V0RGVmYXVsdFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuXCJib3R0b20tbGVmdFwifSx3bi5wcm90b3R5cGUuX29uTW92ZT1mdW5jdGlvbigpe2tuKHRoaXMuX21hcCx0aGlzLl9jb250YWluZXIsdGhpcy5vcHRpb25zKX0sd24ucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tYXA9dCx0aGlzLl9jb250YWluZXI9cy5jcmVhdGUoXCJkaXZcIixcIm1hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1zY2FsZVwiLHQuZ2V0Q29udGFpbmVyKCkpLHRoaXMuX21hcC5vbihcIm1vdmVcIix0aGlzLl9vbk1vdmUpLHRoaXMuX29uTW92ZSgpLHRoaXMuX2NvbnRhaW5lcn0sd24ucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7cy5yZW1vdmUodGhpcy5fY29udGFpbmVyKSx0aGlzLl9tYXAub2ZmKFwibW92ZVwiLHRoaXMuX29uTW92ZSksdGhpcy5fbWFwPXZvaWQgMH0sd24ucHJvdG90eXBlLnNldFVuaXQ9ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zLnVuaXQ9dCxrbih0aGlzLl9tYXAsdGhpcy5fY29udGFpbmVyLHRoaXMub3B0aW9ucyl9O3ZhciBUbj1mdW5jdGlvbigpe3RoaXMuX2Z1bGxzY3JlZW49ITEsdC5iaW5kQWxsKFtcIl9vbkNsaWNrRnVsbHNjcmVlblwiLFwiX2NoYW5nZUljb25cIl0sdGhpcyksXCJvbmZ1bGxzY3JlZW5jaGFuZ2VcImluIHQuZGVmYXVsdC5kb2N1bWVudD90aGlzLl9mdWxsc2NyZWVuY2hhbmdlPVwiZnVsbHNjcmVlbmNoYW5nZVwiOlwib25tb3pmdWxsc2NyZWVuY2hhbmdlXCJpbiB0LmRlZmF1bHQuZG9jdW1lbnQ/dGhpcy5fZnVsbHNjcmVlbmNoYW5nZT1cIm1vemZ1bGxzY3JlZW5jaGFuZ2VcIjpcIm9ud2Via2l0ZnVsbHNjcmVlbmNoYW5nZVwiaW4gdC5kZWZhdWx0LmRvY3VtZW50P3RoaXMuX2Z1bGxzY3JlZW5jaGFuZ2U9XCJ3ZWJraXRmdWxsc2NyZWVuY2hhbmdlXCI6XCJvbm1zZnVsbHNjcmVlbmNoYW5nZVwiaW4gdC5kZWZhdWx0LmRvY3VtZW50JiYodGhpcy5fZnVsbHNjcmVlbmNoYW5nZT1cIk1TRnVsbHNjcmVlbkNoYW5nZVwiKSx0aGlzLl9jbGFzc05hbWU9XCJtYXBib3hnbC1jdHJsXCJ9O1RuLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbWFwPWUsdGhpcy5fbWFwQ29udGFpbmVyPXRoaXMuX21hcC5nZXRDb250YWluZXIoKSx0aGlzLl9jb250YWluZXI9cy5jcmVhdGUoXCJkaXZcIix0aGlzLl9jbGFzc05hbWUrXCIgbWFwYm94Z2wtY3RybC1ncm91cFwiKSx0aGlzLl9jaGVja0Z1bGxzY3JlZW5TdXBwb3J0KCk/dGhpcy5fc2V0dXBVSSgpOih0aGlzLl9jb250YWluZXIuc3R5bGUuZGlzcGxheT1cIm5vbmVcIix0Lndhcm5PbmNlKFwiVGhpcyBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBmdWxsc2NyZWVuIG1vZGUuXCIpKSx0aGlzLl9jb250YWluZXJ9LFRuLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3MucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwPW51bGwsdC5kZWZhdWx0LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5fZnVsbHNjcmVlbmNoYW5nZSx0aGlzLl9jaGFuZ2VJY29uKX0sVG4ucHJvdG90eXBlLl9jaGVja0Z1bGxzY3JlZW5TdXBwb3J0PWZ1bmN0aW9uKCl7cmV0dXJuISEodC5kZWZhdWx0LmRvY3VtZW50LmZ1bGxzY3JlZW5FbmFibGVkfHx0LmRlZmF1bHQuZG9jdW1lbnQubW96RnVsbFNjcmVlbkVuYWJsZWR8fHQuZGVmYXVsdC5kb2N1bWVudC5tc0Z1bGxzY3JlZW5FbmFibGVkfHx0LmRlZmF1bHQuZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVuYWJsZWQpfSxUbi5wcm90b3R5cGUuX3NldHVwVUk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9mdWxsc2NyZWVuQnV0dG9uPXMuY3JlYXRlKFwiYnV0dG9uXCIsdGhpcy5fY2xhc3NOYW1lK1wiLWljb24gXCIrdGhpcy5fY2xhc3NOYW1lK1wiLWZ1bGxzY3JlZW5cIix0aGlzLl9jb250YWluZXIpO2Uuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLFwiVG9nZ2xlIGZ1bGxzY3JlZW5cIiksZS50eXBlPVwiYnV0dG9uXCIsdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLl9vbkNsaWNrRnVsbHNjcmVlbiksdC5kZWZhdWx0LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5fZnVsbHNjcmVlbmNoYW5nZSx0aGlzLl9jaGFuZ2VJY29uKX0sVG4ucHJvdG90eXBlLl9pc0Z1bGxzY3JlZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZnVsbHNjcmVlbn0sVG4ucHJvdG90eXBlLl9jaGFuZ2VJY29uPWZ1bmN0aW9uKCl7KHQuZGVmYXVsdC5kb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudHx8dC5kZWZhdWx0LmRvY3VtZW50Lm1vekZ1bGxTY3JlZW5FbGVtZW50fHx0LmRlZmF1bHQuZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVsZW1lbnR8fHQuZGVmYXVsdC5kb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50KT09PXRoaXMuX21hcENvbnRhaW5lciE9PXRoaXMuX2Z1bGxzY3JlZW4mJih0aGlzLl9mdWxsc2NyZWVuPSF0aGlzLl9mdWxsc2NyZWVuLHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24uY2xhc3NMaXN0LnRvZ2dsZSh0aGlzLl9jbGFzc05hbWUrXCItc2hyaW5rXCIpLHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24uY2xhc3NMaXN0LnRvZ2dsZSh0aGlzLl9jbGFzc05hbWUrXCItZnVsbHNjcmVlblwiKSl9LFRuLnByb3RvdHlwZS5fb25DbGlja0Z1bGxzY3JlZW49ZnVuY3Rpb24oKXt0aGlzLl9pc0Z1bGxzY3JlZW4oKT90LmRlZmF1bHQuZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4/dC5kZWZhdWx0LmRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKCk6dC5kZWZhdWx0LmRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4/dC5kZWZhdWx0LmRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4oKTp0LmRlZmF1bHQuZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbj90LmRlZmF1bHQuZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbigpOnQuZGVmYXVsdC5kb2N1bWVudC53ZWJraXRDYW5jZWxGdWxsU2NyZWVuJiZ0LmRlZmF1bHQuZG9jdW1lbnQud2Via2l0Q2FuY2VsRnVsbFNjcmVlbigpOnRoaXMuX21hcENvbnRhaW5lci5yZXF1ZXN0RnVsbHNjcmVlbj90aGlzLl9tYXBDb250YWluZXIucmVxdWVzdEZ1bGxzY3JlZW4oKTp0aGlzLl9tYXBDb250YWluZXIubW96UmVxdWVzdEZ1bGxTY3JlZW4/dGhpcy5fbWFwQ29udGFpbmVyLm1velJlcXVlc3RGdWxsU2NyZWVuKCk6dGhpcy5fbWFwQ29udGFpbmVyLm1zUmVxdWVzdEZ1bGxzY3JlZW4/dGhpcy5fbWFwQ29udGFpbmVyLm1zUmVxdWVzdEZ1bGxzY3JlZW4oKTp0aGlzLl9tYXBDb250YWluZXIud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4mJnRoaXMuX21hcENvbnRhaW5lci53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbigpfTt2YXIgTW49e2Nsb3NlQnV0dG9uOiEwLGNsb3NlT25DbGljazohMH0sU249ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyKXtlLmNhbGwodGhpcyksdGhpcy5vcHRpb25zPXQuZXh0ZW5kKE9iamVjdC5jcmVhdGUoTW4pLHIpLHQuYmluZEFsbChbXCJfdXBkYXRlXCIsXCJfb25DbGlja0Nsb3NlXCJdLHRoaXMpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5hZGRUbz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbWFwPWUsdGhpcy5fbWFwLm9uKFwibW92ZVwiLHRoaXMuX3VwZGF0ZSksdGhpcy5vcHRpb25zLmNsb3NlT25DbGljayYmdGhpcy5fbWFwLm9uKFwiY2xpY2tcIix0aGlzLl9vbkNsaWNrQ2xvc2UpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuZmlyZShuZXcgdC5FdmVudChcIm9wZW5cIikpLHRoaXN9LHIucHJvdG90eXBlLmlzT3Blbj1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fbWFwfSxyLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGVudCYmcy5yZW1vdmUodGhpcy5fY29udGVudCksdGhpcy5fY29udGFpbmVyJiYocy5yZW1vdmUodGhpcy5fY29udGFpbmVyKSxkZWxldGUgdGhpcy5fY29udGFpbmVyKSx0aGlzLl9tYXAmJih0aGlzLl9tYXAub2ZmKFwibW92ZVwiLHRoaXMuX3VwZGF0ZSksdGhpcy5fbWFwLm9mZihcImNsaWNrXCIsdGhpcy5fb25DbGlja0Nsb3NlKSxkZWxldGUgdGhpcy5fbWFwKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJjbG9zZVwiKSksdGhpc30sci5wcm90b3R5cGUuZ2V0TG5nTGF0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xuZ0xhdH0sci5wcm90b3R5cGUuc2V0TG5nTGF0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sbmdMYXQ9Ry5jb252ZXJ0KHQpLHRoaXMuX3Bvcz1udWxsLHRoaXMuX3VwZGF0ZSgpLHRoaXN9LHIucHJvdG90eXBlLnNldFRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2V0RE9NQ29udGVudCh0LmRlZmF1bHQuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSkpfSxyLnByb3RvdHlwZS5zZXRIVE1MPWZ1bmN0aW9uKGUpe3ZhciByLG49dC5kZWZhdWx0LmRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxpPXQuZGVmYXVsdC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYm9keVwiKTtmb3IoaS5pbm5lckhUTUw9ZTtyPWkuZmlyc3RDaGlsZDspbi5hcHBlbmRDaGlsZChyKTtyZXR1cm4gdGhpcy5zZXRET01Db250ZW50KG4pfSxyLnByb3RvdHlwZS5zZXRET01Db250ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jcmVhdGVDb250ZW50KCksdGhpcy5fY29udGVudC5hcHBlbmRDaGlsZCh0KSx0aGlzLl91cGRhdGUoKSx0aGlzfSxyLnByb3RvdHlwZS5fY3JlYXRlQ29udGVudD1mdW5jdGlvbigpe3RoaXMuX2NvbnRlbnQmJnMucmVtb3ZlKHRoaXMuX2NvbnRlbnQpLHRoaXMuX2NvbnRlbnQ9cy5jcmVhdGUoXCJkaXZcIixcIm1hcGJveGdsLXBvcHVwLWNvbnRlbnRcIix0aGlzLl9jb250YWluZXIpLHRoaXMub3B0aW9ucy5jbG9zZUJ1dHRvbiYmKHRoaXMuX2Nsb3NlQnV0dG9uPXMuY3JlYXRlKFwiYnV0dG9uXCIsXCJtYXBib3hnbC1wb3B1cC1jbG9zZS1idXR0b25cIix0aGlzLl9jb250ZW50KSx0aGlzLl9jbG9zZUJ1dHRvbi50eXBlPVwiYnV0dG9uXCIsdGhpcy5fY2xvc2VCdXR0b24uc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLFwiQ2xvc2UgcG9wdXBcIiksdGhpcy5fY2xvc2VCdXR0b24uaW5uZXJIVE1MPVwiJiMyMTU7XCIsdGhpcy5fY2xvc2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdGhpcy5fb25DbGlja0Nsb3NlKSl9LHIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXAmJnRoaXMuX2xuZ0xhdCYmdGhpcy5fY29udGVudCl7dGhpcy5fY29udGFpbmVyfHwodGhpcy5fY29udGFpbmVyPXMuY3JlYXRlKFwiZGl2XCIsXCJtYXBib3hnbC1wb3B1cFwiLHRoaXMuX21hcC5nZXRDb250YWluZXIoKSksdGhpcy5fdGlwPXMuY3JlYXRlKFwiZGl2XCIsXCJtYXBib3hnbC1wb3B1cC10aXBcIix0aGlzLl9jb250YWluZXIpLHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9jb250ZW50KSksdGhpcy5fbWFwLnRyYW5zZm9ybS5yZW5kZXJXb3JsZENvcGllcyYmKHRoaXMuX2xuZ0xhdD1kbih0aGlzLl9sbmdMYXQsdGhpcy5fcG9zLHRoaXMuX21hcC50cmFuc2Zvcm0pKTt2YXIgZT10aGlzLl9wb3M9dGhpcy5fbWFwLnByb2plY3QodGhpcy5fbG5nTGF0KSxyPXRoaXMub3B0aW9ucy5hbmNob3Isbj1mdW5jdGlvbiBlKHIpe2lmKHIpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiByKXt2YXIgbj1NYXRoLnJvdW5kKE1hdGguc3FydCguNSpNYXRoLnBvdyhyLDIpKSk7cmV0dXJue2NlbnRlcjpuZXcgdC5kZWZhdWx0JDEoMCwwKSx0b3A6bmV3IHQuZGVmYXVsdCQxKDAsciksXCJ0b3AtbGVmdFwiOm5ldyB0LmRlZmF1bHQkMShuLG4pLFwidG9wLXJpZ2h0XCI6bmV3IHQuZGVmYXVsdCQxKC1uLG4pLGJvdHRvbTpuZXcgdC5kZWZhdWx0JDEoMCwtciksXCJib3R0b20tbGVmdFwiOm5ldyB0LmRlZmF1bHQkMShuLC1uKSxcImJvdHRvbS1yaWdodFwiOm5ldyB0LmRlZmF1bHQkMSgtbiwtbiksbGVmdDpuZXcgdC5kZWZhdWx0JDEociwwKSxyaWdodDpuZXcgdC5kZWZhdWx0JDEoLXIsMCl9fWlmKHIgaW5zdGFuY2VvZiB0LmRlZmF1bHQkMXx8QXJyYXkuaXNBcnJheShyKSl7dmFyIGk9dC5kZWZhdWx0JDEuY29udmVydChyKTtyZXR1cm57Y2VudGVyOmksdG9wOmksXCJ0b3AtbGVmdFwiOmksXCJ0b3AtcmlnaHRcIjppLGJvdHRvbTppLFwiYm90dG9tLWxlZnRcIjppLFwiYm90dG9tLXJpZ2h0XCI6aSxsZWZ0OmkscmlnaHQ6aX19cmV0dXJue2NlbnRlcjp0LmRlZmF1bHQkMS5jb252ZXJ0KHIuY2VudGVyfHxbMCwwXSksdG9wOnQuZGVmYXVsdCQxLmNvbnZlcnQoci50b3B8fFswLDBdKSxcInRvcC1sZWZ0XCI6dC5kZWZhdWx0JDEuY29udmVydChyW1widG9wLWxlZnRcIl18fFswLDBdKSxcInRvcC1yaWdodFwiOnQuZGVmYXVsdCQxLmNvbnZlcnQocltcInRvcC1yaWdodFwiXXx8WzAsMF0pLGJvdHRvbTp0LmRlZmF1bHQkMS5jb252ZXJ0KHIuYm90dG9tfHxbMCwwXSksXCJib3R0b20tbGVmdFwiOnQuZGVmYXVsdCQxLmNvbnZlcnQocltcImJvdHRvbS1sZWZ0XCJdfHxbMCwwXSksXCJib3R0b20tcmlnaHRcIjp0LmRlZmF1bHQkMS5jb252ZXJ0KHJbXCJib3R0b20tcmlnaHRcIl18fFswLDBdKSxsZWZ0OnQuZGVmYXVsdCQxLmNvbnZlcnQoci5sZWZ0fHxbMCwwXSkscmlnaHQ6dC5kZWZhdWx0JDEuY29udmVydChyLnJpZ2h0fHxbMCwwXSl9fXJldHVybiBlKG5ldyB0LmRlZmF1bHQkMSgwLDApKX0odGhpcy5vcHRpb25zLm9mZnNldCk7aWYoIXIpe3ZhciBpLGE9dGhpcy5fY29udGFpbmVyLm9mZnNldFdpZHRoLG89dGhpcy5fY29udGFpbmVyLm9mZnNldEhlaWdodDtpPWUueStuLmJvdHRvbS55PG8/W1widG9wXCJdOmUueT50aGlzLl9tYXAudHJhbnNmb3JtLmhlaWdodC1vP1tcImJvdHRvbVwiXTpbXSxlLng8YS8yP2kucHVzaChcImxlZnRcIik6ZS54PnRoaXMuX21hcC50cmFuc2Zvcm0ud2lkdGgtYS8yJiZpLnB1c2goXCJyaWdodFwiKSxyPTA9PT1pLmxlbmd0aD9cImJvdHRvbVwiOmkuam9pbihcIi1cIil9dmFyIGw9ZS5hZGQobltyXSkucm91bmQoKTtzLnNldFRyYW5zZm9ybSh0aGlzLl9jb250YWluZXIsZ25bcl0rXCIgdHJhbnNsYXRlKFwiK2wueCtcInB4LFwiK2wueStcInB4KVwiKSx2bih0aGlzLl9jb250YWluZXIscixcInBvcHVwXCIpfX0sci5wcm90b3R5cGUuX29uQ2xpY2tDbG9zZT1mdW5jdGlvbigpe3RoaXMucmVtb3ZlKCl9LHJ9KHQuRXZlbnRlZCksRW49e3ZlcnNpb246XCIwLjQ1LjBcIixzdXBwb3J0ZWQ6ZSx3b3JrZXJDb3VudDpNYXRoLm1heChNYXRoLmZsb29yKGEuaGFyZHdhcmVDb25jdXJyZW5jeS8yKSwxKSxzZXRSVExUZXh0UGx1Z2luOnQuc2V0UlRMVGV4dFBsdWdpbixNYXA6dW4sTmF2aWdhdGlvbkNvbnRyb2w6cG4sR2VvbG9jYXRlQ29udHJvbDpibixBdHRyaWJ1dGlvbkNvbnRyb2w6bm4sU2NhbGVDb250cm9sOnduLEZ1bGxzY3JlZW5Db250cm9sOlRuLFBvcHVwOlNuLE1hcmtlcjptbixTdHlsZTpKZSxMbmdMYXQ6RyxMbmdMYXRCb3VuZHM6WSxQb2ludDp0LmRlZmF1bHQkMSxFdmVudGVkOnQuRXZlbnRlZCxjb25maWc6dixnZXQgYWNjZXNzVG9rZW4oKXtyZXR1cm4gdi5BQ0NFU1NfVE9LRU59LHNldCBhY2Nlc3NUb2tlbih0KXt2LkFDQ0VTU19UT0tFTj10fSx3b3JrZXJVcmw6XCJcIn07cmV0dXJuIEVufSksbn0pfSkuY2FsbCh0aGlzLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7fV0sNDIwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xPDx0KzEscj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT1hKHQsbik7cmV0dXJuIHJ9O3ZhciBuPXQoXCJjb252ZXgtaHVsbFwiKTtmdW5jdGlvbiBpKHQsZSxyKXtmb3IodmFyIG49bmV3IEFycmF5KHQpLGk9MDtpPHQ7KytpKW5baV09MCxpPT09ZSYmKG5baV0rPS41KSxpPT09ciYmKG5baV0rPS41KTtyZXR1cm4gbn1mdW5jdGlvbiBhKHQsZSl7aWYoMD09PWV8fGU9PT0oMTw8dCsxKS0xKXJldHVybltdO2Zvcih2YXIgcj1bXSxhPVtdLG89MDtvPD10OysrbylpZihlJjE8PG8pe3IucHVzaChpKHQsby0xLG8tMSkpLGEucHVzaChudWxsKTtmb3IodmFyIHM9MDtzPD10Oysrcyl+ZSYxPDxzJiYoci5wdXNoKGkodCxvLTEscy0xKSksYS5wdXNoKFtvLHNdKSl9dmFyIGw9bihyKSxjPVtdO3Q6Zm9yKG89MDtvPGwubGVuZ3RoOysrbyl7dmFyIHU9bFtvXSxoPVtdO2ZvcihzPTA7czx1Lmxlbmd0aDsrK3Mpe2lmKCFhW3Vbc11dKWNvbnRpbnVlIHQ7aC5wdXNoKGFbdVtzXV0uc2xpY2UoKSl9Yy5wdXNoKGgpfXJldHVybiBjfX0se1wiY29udmV4LWh1bGxcIjoxMjF9XSw0MjE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi9ub3JtYWxpemVcIiksaT10KFwiZ2wtbWF0NC9jcmVhdGVcIiksYT10KFwiZ2wtbWF0NC9jbG9uZVwiKSxvPXQoXCJnbC1tYXQ0L2RldGVybWluYW50XCIpLHM9dChcImdsLW1hdDQvaW52ZXJ0XCIpLGw9dChcImdsLW1hdDQvdHJhbnNwb3NlXCIpLGM9e2xlbmd0aDp0KFwiZ2wtdmVjMy9sZW5ndGhcIiksbm9ybWFsaXplOnQoXCJnbC12ZWMzL25vcm1hbGl6ZVwiKSxkb3Q6dChcImdsLXZlYzMvZG90XCIpLGNyb3NzOnQoXCJnbC12ZWMzL2Nyb3NzXCIpfSx1PWkoKSxoPWkoKSxmPVswLDAsMCwwXSxwPVtbMCwwLDBdLFswLDAsMF0sWzAsMCwwXV0sZD1bMCwwLDBdO2Z1bmN0aW9uIGcodCxlLHIsbixpKXt0WzBdPWVbMF0qbityWzBdKmksdFsxXT1lWzFdKm4rclsxXSppLHRbMl09ZVsyXSpuK3JbMl0qaX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSx2LG0pe2lmKGV8fChlPVswLDAsMF0pLHJ8fChyPVswLDAsMF0pLGl8fChpPVswLDAsMF0pLHZ8fCh2PVswLDAsMCwxXSksbXx8KG09WzAsMCwwLDFdKSwhbih1LHQpKXJldHVybiExO2lmKGEoaCx1KSxoWzNdPTAsaFs3XT0wLGhbMTFdPTAsaFsxNV09MSxNYXRoLmFicyhvKGgpPDFlLTgpKXJldHVybiExO3ZhciB5LHgsYixfLHcsayxBLFQ9dVszXSxNPXVbN10sUz11WzExXSxFPXVbMTJdLEM9dVsxM10sTD11WzE0XSx6PXVbMTVdO2lmKDAhPT1UfHwwIT09TXx8MCE9PVMpe2lmKGZbMF09VCxmWzFdPU0sZlsyXT1TLGZbM109eiwhcyhoLGgpKXJldHVybiExO2woaCxoKSx5PXYsYj1oLF89KHg9ZilbMF0sdz14WzFdLGs9eFsyXSxBPXhbM10seVswXT1iWzBdKl8rYls0XSp3K2JbOF0qaytiWzEyXSpBLHlbMV09YlsxXSpfK2JbNV0qdytiWzldKmsrYlsxM10qQSx5WzJdPWJbMl0qXytiWzZdKncrYlsxMF0qaytiWzE0XSpBLHlbM109YlszXSpfK2JbN10qdytiWzExXSprK2JbMTVdKkF9ZWxzZSB2WzBdPXZbMV09dlsyXT0wLHZbM109MTtpZihlWzBdPUUsZVsxXT1DLGVbMl09TCxmdW5jdGlvbih0LGUpe3RbMF1bMF09ZVswXSx0WzBdWzFdPWVbMV0sdFswXVsyXT1lWzJdLHRbMV1bMF09ZVs0XSx0WzFdWzFdPWVbNV0sdFsxXVsyXT1lWzZdLHRbMl1bMF09ZVs4XSx0WzJdWzFdPWVbOV0sdFsyXVsyXT1lWzEwXX0ocCx1KSxyWzBdPWMubGVuZ3RoKHBbMF0pLGMubm9ybWFsaXplKHBbMF0scFswXSksaVswXT1jLmRvdChwWzBdLHBbMV0pLGcocFsxXSxwWzFdLHBbMF0sMSwtaVswXSksclsxXT1jLmxlbmd0aChwWzFdKSxjLm5vcm1hbGl6ZShwWzFdLHBbMV0pLGlbMF0vPXJbMV0saVsxXT1jLmRvdChwWzBdLHBbMl0pLGcocFsyXSxwWzJdLHBbMF0sMSwtaVsxXSksaVsyXT1jLmRvdChwWzFdLHBbMl0pLGcocFsyXSxwWzJdLHBbMV0sMSwtaVsyXSksclsyXT1jLmxlbmd0aChwWzJdKSxjLm5vcm1hbGl6ZShwWzJdLHBbMl0pLGlbMV0vPXJbMl0saVsyXS89clsyXSxjLmNyb3NzKGQscFsxXSxwWzJdKSxjLmRvdChwWzBdLGQpPDApZm9yKHZhciBPPTA7TzwzO08rKylyW09dKj0tMSxwW09dWzBdKj0tMSxwW09dWzFdKj0tMSxwW09dWzJdKj0tMTtyZXR1cm4gbVswXT0uNSpNYXRoLnNxcnQoTWF0aC5tYXgoMStwWzBdWzBdLXBbMV1bMV0tcFsyXVsyXSwwKSksbVsxXT0uNSpNYXRoLnNxcnQoTWF0aC5tYXgoMS1wWzBdWzBdK3BbMV1bMV0tcFsyXVsyXSwwKSksbVsyXT0uNSpNYXRoLnNxcnQoTWF0aC5tYXgoMS1wWzBdWzBdLXBbMV1bMV0rcFsyXVsyXSwwKSksbVszXT0uNSpNYXRoLnNxcnQoTWF0aC5tYXgoMStwWzBdWzBdK3BbMV1bMV0rcFsyXVsyXSwwKSkscFsyXVsxXT5wWzFdWzJdJiYobVswXT0tbVswXSkscFswXVsyXT5wWzJdWzBdJiYobVsxXT0tbVsxXSkscFsxXVswXT5wWzBdWzFdJiYobVsyXT0tbVsyXSksITB9fSx7XCIuL25vcm1hbGl6ZVwiOjQyMixcImdsLW1hdDQvY2xvbmVcIjoyNTYsXCJnbC1tYXQ0L2NyZWF0ZVwiOjI1NyxcImdsLW1hdDQvZGV0ZXJtaW5hbnRcIjoyNTgsXCJnbC1tYXQ0L2ludmVydFwiOjI2MixcImdsLW1hdDQvdHJhbnNwb3NlXCI6MjczLFwiZ2wtdmVjMy9jcm9zc1wiOjMyNyxcImdsLXZlYzMvZG90XCI6MzMyLFwiZ2wtdmVjMy9sZW5ndGhcIjozNDIsXCJnbC12ZWMzL25vcm1hbGl6ZVwiOjM0OX1dLDQyMjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMTVdO2lmKDA9PT1yKXJldHVybiExO2Zvcih2YXIgbj0xL3IsaT0wO2k8MTY7aSsrKXRbaV09ZVtpXSpuO3JldHVybiEwfX0se31dLDQyMzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCJnbC12ZWMzL2xlcnBcIiksaT10KFwibWF0NC1yZWNvbXBvc2VcIiksYT10KFwibWF0NC1kZWNvbXBvc2VcIiksbz10KFwiZ2wtbWF0NC9kZXRlcm1pbmFudFwiKSxzPXQoXCJxdWF0LXNsZXJwXCIpLGw9aCgpLGM9aCgpLHU9aCgpO2Z1bmN0aW9uIGgoKXtyZXR1cm57dHJhbnNsYXRlOmYoKSxzY2FsZTpmKDEpLHNrZXc6ZigpLHBlcnNwZWN0aXZlOlswLDAsMCwxXSxxdWF0ZXJuaW9uOlswLDAsMCwxXX19ZnVuY3Rpb24gZih0KXtyZXR1cm5bdHx8MCx0fHwwLHR8fDBdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXtpZigwPT09byhlKXx8MD09PW8ocikpcmV0dXJuITE7dmFyIGY9YShlLGwudHJhbnNsYXRlLGwuc2NhbGUsbC5za2V3LGwucGVyc3BlY3RpdmUsbC5xdWF0ZXJuaW9uKSxwPWEocixjLnRyYW5zbGF0ZSxjLnNjYWxlLGMuc2tldyxjLnBlcnNwZWN0aXZlLGMucXVhdGVybmlvbik7cmV0dXJuISghZnx8IXB8fChuKHUudHJhbnNsYXRlLGwudHJhbnNsYXRlLGMudHJhbnNsYXRlLGgpLG4odS5za2V3LGwuc2tldyxjLnNrZXcsaCksbih1LnNjYWxlLGwuc2NhbGUsYy5zY2FsZSxoKSxuKHUucGVyc3BlY3RpdmUsbC5wZXJzcGVjdGl2ZSxjLnBlcnNwZWN0aXZlLGgpLHModS5xdWF0ZXJuaW9uLGwucXVhdGVybmlvbixjLnF1YXRlcm5pb24saCksaSh0LHUudHJhbnNsYXRlLHUuc2NhbGUsdS5za2V3LHUucGVyc3BlY3RpdmUsdS5xdWF0ZXJuaW9uKSwwKSl9fSx7XCJnbC1tYXQ0L2RldGVybWluYW50XCI6MjU4LFwiZ2wtdmVjMy9sZXJwXCI6MzQzLFwibWF0NC1kZWNvbXBvc2VcIjo0MjEsXCJtYXQ0LXJlY29tcG9zZVwiOjQyNCxcInF1YXQtc2xlcnBcIjo0NzZ9XSw0MjQ6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj17aWRlbnRpdHk6dChcImdsLW1hdDQvaWRlbnRpdHlcIiksdHJhbnNsYXRlOnQoXCJnbC1tYXQ0L3RyYW5zbGF0ZVwiKSxtdWx0aXBseTp0KFwiZ2wtbWF0NC9tdWx0aXBseVwiKSxjcmVhdGU6dChcImdsLW1hdDQvY3JlYXRlXCIpLHNjYWxlOnQoXCJnbC1tYXQ0L3NjYWxlXCIpLGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uOnQoXCJnbC1tYXQ0L2Zyb21Sb3RhdGlvblRyYW5zbGF0aW9uXCIpfSxpPShuLmNyZWF0ZSgpLG4uY3JlYXRlKCkpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8scyl7cmV0dXJuIG4uaWRlbnRpdHkodCksbi5mcm9tUm90YXRpb25UcmFuc2xhdGlvbih0LHMsZSksdFszXT1vWzBdLHRbN109b1sxXSx0WzExXT1vWzJdLHRbMTVdPW9bM10sbi5pZGVudGl0eShpKSwwIT09YVsyXSYmKGlbOV09YVsyXSxuLm11bHRpcGx5KHQsdCxpKSksMCE9PWFbMV0mJihpWzldPTAsaVs4XT1hWzFdLG4ubXVsdGlwbHkodCx0LGkpKSwwIT09YVswXSYmKGlbOF09MCxpWzRdPWFbMF0sbi5tdWx0aXBseSh0LHQsaSkpLG4uc2NhbGUodCx0LHIpLHR9fSx7XCJnbC1tYXQ0L2NyZWF0ZVwiOjI1NyxcImdsLW1hdDQvZnJvbVJvdGF0aW9uVHJhbnNsYXRpb25cIjoyNjAsXCJnbC1tYXQ0L2lkZW50aXR5XCI6MjYxLFwiZ2wtbWF0NC9tdWx0aXBseVwiOjI2NCxcImdsLW1hdDQvc2NhbGVcIjoyNzEsXCJnbC1tYXQ0L3RyYW5zbGF0ZVwiOjI3Mn1dLDQyNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1NYXRoLmxvZzJ8fGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KSpNYXRoLkxPRzJFfX0se31dLDQyNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiKSxpPXQoXCJtYXQ0LWludGVycG9sYXRlXCIpLGE9dChcImdsLW1hdDQvaW52ZXJ0XCIpLG89dChcImdsLW1hdDQvcm90YXRlWFwiKSxzPXQoXCJnbC1tYXQ0L3JvdGF0ZVlcIiksbD10KFwiZ2wtbWF0NC9yb3RhdGVaXCIpLGM9dChcImdsLW1hdDQvbG9va0F0XCIpLHU9dChcImdsLW1hdDQvdHJhbnNsYXRlXCIpLGg9KHQoXCJnbC1tYXQ0L3NjYWxlXCIpLHQoXCJnbC12ZWMzL25vcm1hbGl6ZVwiKSksZj1bMCwwLDBdO2Z1bmN0aW9uIHAodCl7dGhpcy5fY29tcG9uZW50cz10LnNsaWNlKCksdGhpcy5fdGltZT1bMF0sdGhpcy5wcmV2TWF0cml4PXQuc2xpY2UoKSx0aGlzLm5leHRNYXRyaXg9dC5zbGljZSgpLHRoaXMuY29tcHV0ZWRNYXRyaXg9dC5zbGljZSgpLHRoaXMuY29tcHV0ZWRJbnZlcnNlPXQuc2xpY2UoKSx0aGlzLmNvbXB1dGVkRXllPVswLDAsMF0sdGhpcy5jb21wdXRlZFVwPVswLDAsMF0sdGhpcy5jb21wdXRlZENlbnRlcj1bMCwwLDBdLHRoaXMuY29tcHV0ZWRSYWRpdXM9WzBdLHRoaXMuX2xpbWl0cz1bLTEvMCwxLzBdfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHAoKHQ9dHx8e30pLm1hdHJpeHx8WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdKX07dmFyIGQ9cC5wcm90b3R5cGU7ZC5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGltZSxyPW4ubGUoZSx0KSxvPXRoaXMuY29tcHV0ZWRNYXRyaXg7aWYoIShyPDApKXt2YXIgcz10aGlzLl9jb21wb25lbnRzO2lmKHI9PT1lLmxlbmd0aC0xKWZvcih2YXIgbD0xNipyLGM9MDtjPDE2OysrYylvW2NdPXNbbCsrXTtlbHNle3ZhciB1PWVbcisxXS1lW3JdLGY9KGw9MTYqcix0aGlzLnByZXZNYXRyaXgpLHA9ITA7Zm9yKGM9MDtjPDE2OysrYylmW2NdPXNbbCsrXTt2YXIgZD10aGlzLm5leHRNYXRyaXg7Zm9yKGM9MDtjPDE2OysrYylkW2NdPXNbbCsrXSxwPXAmJmZbY109PT1kW2NdO2lmKHU8MWUtNnx8cClmb3IoYz0wO2M8MTY7KytjKW9bY109ZltjXTtlbHNlIGkobyxmLGQsKHQtZVtyXSkvdSl9dmFyIGc9dGhpcy5jb21wdXRlZFVwO2dbMF09b1sxXSxnWzFdPW9bNV0sZ1syXT1vWzldLGgoZyxnKTt2YXIgdj10aGlzLmNvbXB1dGVkSW52ZXJzZTthKHYsbyk7dmFyIG09dGhpcy5jb21wdXRlZEV5ZSx5PXZbMTVdO21bMF09dlsxMl0veSxtWzFdPXZbMTNdL3ksbVsyXT12WzE0XS95O3ZhciB4PXRoaXMuY29tcHV0ZWRDZW50ZXIsYj1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKTtmb3IoYz0wO2M8MzsrK2MpeFtjXT1tW2NdLW9bMis0KmNdKmJ9fSxkLmlkbGU9ZnVuY3Rpb24odCl7aWYoISh0PHRoaXMubGFzdFQoKSkpe2Zvcih2YXIgZT10aGlzLl9jb21wb25lbnRzLHI9ZS5sZW5ndGgtMTYsbj0wO248MTY7KytuKWUucHVzaChlW3IrK10pO3RoaXMuX3RpbWUucHVzaCh0KX19LGQuZmx1c2g9ZnVuY3Rpb24odCl7dmFyIGU9bi5ndCh0aGlzLl90aW1lLHQpLTI7ZTwwfHwodGhpcy5fdGltZS5zcGxpY2UoMCxlKSx0aGlzLl9jb21wb25lbnRzLnNwbGljZSgwLDE2KmUpKX0sZC5sYXN0VD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90aW1lW3RoaXMuX3RpbWUubGVuZ3RoLTFdfSxkLmxvb2tBdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxlPWV8fHRoaXMuY29tcHV0ZWRFeWUscj1yfHxmLG49bnx8dGhpcy5jb21wdXRlZFVwLHRoaXMuc2V0TWF0cml4KHQsYyh0aGlzLmNvbXB1dGVkTWF0cml4LGUscixuKSk7Zm9yKHZhciBpPTAsYT0wO2E8MzsrK2EpaSs9TWF0aC5wb3coclthXS1lW2FdLDIpO2k9TWF0aC5sb2coTWF0aC5zcXJ0KGkpKSx0aGlzLmNvbXB1dGVkUmFkaXVzWzBdPWl9LGQucm90YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRJbnZlcnNlO2UmJnMoaSxpLGUpLHImJm8oaSxpLHIpLG4mJmwoaSxpLG4pLHRoaXMuc2V0TWF0cml4KHQsYSh0aGlzLmNvbXB1dGVkTWF0cml4LGkpKX07dmFyIGc9WzAsMCwwXTtkLnBhbj1mdW5jdGlvbih0LGUscixuKXtnWzBdPS0oZXx8MCksZ1sxXT0tKHJ8fDApLGdbMl09LShufHwwKSx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgaT10aGlzLmNvbXB1dGVkSW52ZXJzZTt1KGksaSxnKSx0aGlzLnNldE1hdHJpeCh0LGEoaSxpKSl9LGQudHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2dbMF09ZXx8MCxnWzFdPXJ8fDAsZ1syXT1ufHwwLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXg7dShpLGksZyksdGhpcy5zZXRNYXRyaXgodCxpKX0sZC5zZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXtpZighKHQ8dGhpcy5sYXN0VCgpKSl7dGhpcy5fdGltZS5wdXNoKHQpO2Zvcih2YXIgcj0wO3I8MTY7KytyKXRoaXMuX2NvbXBvbmVudHMucHVzaChlW3JdKX19LGQuc2V0RGlzdGFuY2U9ZnVuY3Rpb24odCxlKXt0aGlzLmNvbXB1dGVkUmFkaXVzWzBdPWV9LGQuc2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9saW1pdHM7clswXT10LHJbMV09ZX0sZC5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9saW1pdHM7cmV0dXJuIHQ/KHRbMF09ZVswXSx0WzFdPWVbMV0sdCk6ZX19LHtcImJpbmFyeS1zZWFyY2gtYm91bmRzXCI6ODIsXCJnbC1tYXQ0L2ludmVydFwiOjI2MixcImdsLW1hdDQvbG9va0F0XCI6MjYzLFwiZ2wtbWF0NC9yb3RhdGVYXCI6MjY4LFwiZ2wtbWF0NC9yb3RhdGVZXCI6MjY5LFwiZ2wtbWF0NC9yb3RhdGVaXCI6MjcwLFwiZ2wtbWF0NC9zY2FsZVwiOjI3MSxcImdsLW1hdDQvdHJhbnNsYXRlXCI6MjcyLFwiZ2wtdmVjMy9ub3JtYWxpemVcIjozNDksXCJtYXQ0LWludGVycG9sYXRlXCI6NDIzfV0sNDI3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGU8Myl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSlyW2ldPWk7cmV0dXJuIDI9PT1lJiZ0WzBdWzBdPT09dFsxXVswXSYmdFswXVsxXT09PXRbMV1bMV0/WzBdOnJ9Zm9yKHZhciBhPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSlhW2ldPWk7YS5zb3J0KGZ1bmN0aW9uKGUscil7dmFyIG49dFtlXVswXS10W3JdWzBdO3JldHVybiBufHx0W2VdWzFdLXRbcl1bMV19KTtmb3IodmFyIG89W2FbMF0sYVsxXV0scz1bYVswXSxhWzFdXSxpPTI7aTxlOysraSl7Zm9yKHZhciBsPWFbaV0sYz10W2xdLHU9by5sZW5ndGg7dT4xJiZuKHRbb1t1LTJdXSx0W29bdS0xXV0sYyk8PTA7KXUtPTEsby5wb3AoKTtmb3Ioby5wdXNoKGwpLHU9cy5sZW5ndGg7dT4xJiZuKHRbc1t1LTJdXSx0W3NbdS0xXV0sYyk+PTA7KXUtPTEscy5wb3AoKTtzLnB1c2gobCl9Zm9yKHZhciByPW5ldyBBcnJheShzLmxlbmd0aCtvLmxlbmd0aC0yKSxoPTAsaT0wLGY9by5sZW5ndGg7aTxmOysraSlyW2grK109b1tpXTtmb3IodmFyIHA9cy5sZW5ndGgtMjtwPjA7LS1wKXJbaCsrXT1zW3BdO3JldHVybiByfTt2YXIgbj10KFwicm9idXN0LW9yaWVudGF0aW9uXCIpWzNdfSx7XCJyb2J1c3Qtb3JpZW50YXRpb25cIjo0OTV9XSw0Mjg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlfHwoZT10LHQ9d2luZG93KTt2YXIgcj0wLGk9MCxhPTAsbz17c2hpZnQ6ITEsYWx0OiExLGNvbnRyb2w6ITEsbWV0YTohMX0scz0hMTtmdW5jdGlvbiBsKHQpe3ZhciBlPSExO3JldHVyblwiYWx0S2V5XCJpbiB0JiYoZT1lfHx0LmFsdEtleSE9PW8uYWx0LG8uYWx0PSEhdC5hbHRLZXkpLFwic2hpZnRLZXlcImluIHQmJihlPWV8fHQuc2hpZnRLZXkhPT1vLnNoaWZ0LG8uc2hpZnQ9ISF0LnNoaWZ0S2V5KSxcImN0cmxLZXlcImluIHQmJihlPWV8fHQuY3RybEtleSE9PW8uY29udHJvbCxvLmNvbnRyb2w9ISF0LmN0cmxLZXkpLFwibWV0YUtleVwiaW4gdCYmKGU9ZXx8dC5tZXRhS2V5IT09by5tZXRhLG8ubWV0YT0hIXQubWV0YUtleSksZX1mdW5jdGlvbiBjKHQscyl7dmFyIGM9bi54KHMpLHU9bi55KHMpO1wiYnV0dG9uc1wiaW4gcyYmKHQ9MHxzLmJ1dHRvbnMpLCh0IT09cnx8YyE9PWl8fHUhPT1hfHxsKHMpKSYmKHI9MHx0LGk9Y3x8MCxhPXV8fDAsZSYmZShyLGksYSxvKSl9ZnVuY3Rpb24gdSh0KXtjKDAsdCl9ZnVuY3Rpb24gaCgpeyhyfHxpfHxhfHxvLnNoaWZ0fHxvLmFsdHx8by5tZXRhfHxvLmNvbnRyb2wpJiYoaT1hPTAscj0wLG8uc2hpZnQ9by5hbHQ9by5jb250cm9sPW8ubWV0YT0hMSxlJiZlKDAsMCwwLG8pKX1mdW5jdGlvbiBmKHQpe2wodCkmJmUmJmUocixpLGEsbyl9ZnVuY3Rpb24gcCh0KXswPT09bi5idXR0b25zKHQpP2MoMCx0KTpjKHIsdCl9ZnVuY3Rpb24gZCh0KXtjKHJ8bi5idXR0b25zKHQpLHQpfWZ1bmN0aW9uIGcodCl7YyhyJn5uLmJ1dHRvbnModCksdCl9ZnVuY3Rpb24gdigpe3N8fChzPSEwLHQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHApLHQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLGQpLHQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixnKSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsdSksdC5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLHUpLHQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3V0XCIsdSksdC5hZGRFdmVudExpc3RlbmVyKFwibW91c2VvdmVyXCIsdSksdC5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLGgpLHQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsZiksdC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGYpLHQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXByZXNzXCIsZiksdCE9PXdpbmRvdyYmKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLGgpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIixmKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixmKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleXByZXNzXCIsZikpKX12KCk7dmFyIG09e2VsZW1lbnQ6dH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG0se2VuYWJsZWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBzfSxzZXQ6ZnVuY3Rpb24oZSl7ZT92KCk6cyYmKHM9ITEsdC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIscCksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsZCksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLGcpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIix1KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsdSksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2VvdXRcIix1KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIix1KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJibHVyXCIsaCksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIixmKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsZiksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5cHJlc3NcIixmKSx0IT09d2luZG93JiYod2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJibHVyXCIsaCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLGYpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGYpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5cHJlc3NcIixmKSkpfSxlbnVtZXJhYmxlOiEwfSxidXR0b25zOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcn0sZW51bWVyYWJsZTohMH0seDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGl9LGVudW1lcmFibGU6ITB9LHk6e2dldDpmdW5jdGlvbigpe3JldHVybiBhfSxlbnVtZXJhYmxlOiEwfSxtb2RzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gb30sZW51bWVyYWJsZTohMH19KSxtfTt2YXIgbj10KFwibW91c2UtZXZlbnRcIil9LHtcIm1vdXNlLWV2ZW50XCI6NDMwfV0sNDI5OltmdW5jdGlvbih0LGUscil7dmFyIG49e2xlZnQ6MCx0b3A6MH07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtlPWV8fHQuY3VycmVudFRhcmdldHx8dC5zcmNFbGVtZW50LEFycmF5LmlzQXJyYXkocil8fChyPVswLDBdKTt2YXIgaT10LmNsaWVudFh8fDAsYT10LmNsaWVudFl8fDAsbz0ocz1lLHM9PT13aW5kb3d8fHM9PT1kb2N1bWVudHx8cz09PWRvY3VtZW50LmJvZHk/bjpzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTt2YXIgcztyZXR1cm4gclswXT1pLW8ubGVmdCxyWzFdPWEtby50b3Ascn19LHt9XSw0MzA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe3JldHVybiB0LnRhcmdldHx8dC5zcmNFbGVtZW50fHx3aW5kb3d9ci5idXR0b25zPWZ1bmN0aW9uKHQpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KXtpZihcImJ1dHRvbnNcImluIHQpcmV0dXJuIHQuYnV0dG9ucztpZihcIndoaWNoXCJpbiB0KXtpZigyPT09KGU9dC53aGljaCkpcmV0dXJuIDQ7aWYoMz09PWUpcmV0dXJuIDI7aWYoZT4wKXJldHVybiAxPDxlLTF9ZWxzZSBpZihcImJ1dHRvblwiaW4gdCl7dmFyIGU7aWYoMT09PShlPXQuYnV0dG9uKSlyZXR1cm4gNDtpZigyPT09ZSlyZXR1cm4gMjtpZihlPj0wKXJldHVybiAxPDxlfX1yZXR1cm4gMH0sci5lbGVtZW50PW4sci54PWZ1bmN0aW9uKHQpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KXtpZihcIm9mZnNldFhcImluIHQpcmV0dXJuIHQub2Zmc2V0WDt2YXIgZT1uKHQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiB0LmNsaWVudFgtZS5sZWZ0fXJldHVybiAwfSxyLnk9ZnVuY3Rpb24odCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHQpe2lmKFwib2Zmc2V0WVwiaW4gdClyZXR1cm4gdC5vZmZzZXRZO3ZhciBlPW4odCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIHQuY2xpZW50WS1lLnRvcH1yZXR1cm4gMH19LHt9XSw0MzE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwidG8tcHhcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiYocj0hIWUsZT10LHQ9d2luZG93KTt2YXIgaT1uKFwiZXhcIix0KSxhPWZ1bmN0aW9uKHQpe3ImJnQucHJldmVudERlZmF1bHQoKTt2YXIgbj10LmRlbHRhWHx8MCxhPXQuZGVsdGFZfHwwLG89dC5kZWx0YVp8fDAscz10LmRlbHRhTW9kZSxsPTE7c3dpdGNoKHMpe2Nhc2UgMTpsPWk7YnJlYWs7Y2FzZSAyOmw9d2luZG93LmlubmVySGVpZ2h0fWlmKGEqPWwsbyo9bCwobio9bCl8fGF8fG8pcmV0dXJuIGUobixhLG8sdCl9O3JldHVybiB0LmFkZEV2ZW50TGlzdGVuZXIoXCJ3aGVlbFwiLGEpLGF9fSx7XCJ0by1weFwiOjUyNH1dLDQzMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJ0eXBlZGFycmF5LXBvb2xcIik7ZnVuY3Rpb24gaSh0KXtyZXR1cm5cImFcIit0fWZ1bmN0aW9uIGEodCl7cmV0dXJuXCJkXCIrdH1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuXCJjXCIrdCtcIl9cIitlfWZ1bmN0aW9uIHModCl7cmV0dXJuXCJzXCIrdH1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuXCJ0XCIrdCtcIl9cIitlfWZ1bmN0aW9uIGModCl7cmV0dXJuXCJvXCIrdH1mdW5jdGlvbiB1KHQpe3JldHVyblwieFwiK3R9ZnVuY3Rpb24gaCh0KXtyZXR1cm5cInBcIit0fWZ1bmN0aW9uIGYodCxlKXtyZXR1cm5cImRcIit0K1wiX1wiK2V9ZnVuY3Rpb24gcCh0KXtyZXR1cm5cImlcIit0fWZ1bmN0aW9uIGQodCxlKXtyZXR1cm5cInVcIit0K1wiX1wiK2V9ZnVuY3Rpb24gZyh0KXtyZXR1cm5cImJcIit0fWZ1bmN0aW9uIHYodCl7cmV0dXJuXCJ5XCIrdH1mdW5jdGlvbiBtKHQpe3JldHVyblwiZVwiK3R9ZnVuY3Rpb24geSh0KXtyZXR1cm5cInZcIit0fWUuZXhwb3J0cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3Rocm93IG5ldyBFcnJvcihcIm5kYXJyYXktZXh0cmFjdC1jb250b3VyOiBcIit0KX1cIm9iamVjdFwiIT10eXBlb2YgdCYmZShcIk11c3Qgc3BlY2lmeSBhcmd1bWVudHNcIik7dmFyIHI9dC5vcmRlcjtBcnJheS5pc0FycmF5KHIpfHxlKFwiTXVzdCBzcGVjaWZ5IG9yZGVyXCIpO3ZhciBNPXQuYXJyYXlBcmd1bWVudHN8fDE7TTwxJiZlKFwiTXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBhcnJheSBhcmd1bWVudFwiKTt2YXIgUz10LnNjYWxhckFyZ3VtZW50c3x8MDtTPDAmJmUoXCJTY2FsYXIgYXJnIGNvdW50IG11c3QgYmUgPiAwXCIpO1wiZnVuY3Rpb25cIiE9dHlwZW9mIHQudmVydGV4JiZlKFwiTXVzdCBzcGVjaWZ5IHZlcnRleCBjcmVhdGlvbiBmdW5jdGlvblwiKTtcImZ1bmN0aW9uXCIhPXR5cGVvZiB0LmNlbGwmJmUoXCJNdXN0IHNwZWNpZnkgY2VsbCBjcmVhdGlvbiBmdW5jdGlvblwiKTtcImZ1bmN0aW9uXCIhPXR5cGVvZiB0LnBoYXNlJiZlKFwiTXVzdCBzcGVjaWZ5IHBoYXNlIGZ1bmN0aW9uXCIpO2Zvcih2YXIgRT10LmdldHRlcnN8fFtdLEM9bmV3IEFycmF5KE0pLEw9MDtMPE07KytMKUUuaW5kZXhPZihMKT49MD9DW0xdPSEwOkNbTF09ITE7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLE0sUyxFKXt2YXIgQz1FLmxlbmd0aCxMPVMubGVuZ3RoO2lmKEw8Mil0aHJvdyBuZXcgRXJyb3IoXCJuZGFycmF5LWV4dHJhY3QtY29udG91cjogRGltZW5zaW9uIG11c3QgYmUgYXQgbGVhc3QgMlwiKTtmb3IodmFyIHo9XCJleHRyYWN0Q29udG91clwiK1Muam9pbihcIl9cIiksTz1bXSxJPVtdLEQ9W10sUD0wO1A8QzsrK1ApRC5wdXNoKGkoUCkpO2Zvcih2YXIgUD0wO1A8TTsrK1ApRC5wdXNoKHUoUCkpO2Zvcih2YXIgUD0wO1A8TDsrK1ApSS5wdXNoKHMoUCkrXCI9XCIraSgwKStcIi5zaGFwZVtcIitQK1wiXXwwXCIpO2Zvcih2YXIgUD0wO1A8QzsrK1Ape0kucHVzaChhKFApK1wiPVwiK2koUCkrXCIuZGF0YVwiLGMoUCkrXCI9XCIraShQKStcIi5vZmZzZXR8MFwiKTtmb3IodmFyIFI9MDtSPEw7KytSKUkucHVzaChsKFAsUikrXCI9XCIraShQKStcIi5zdHJpZGVbXCIrUitcIl18MFwiKX1mb3IodmFyIFA9MDtQPEM7KytQKXtJLnB1c2goaChQKStcIj1cIitjKFApKSxJLnB1c2gobyhQLDApKTtmb3IodmFyIFI9MTtSPDE8PEw7KytSKXtmb3IodmFyIEY9W10sQj0wO0I8TDsrK0IpUiYxPDxCJiZGLnB1c2goXCItXCIrbChQLEIpKTtJLnB1c2goZihQLFIpK1wiPShcIitGLmpvaW4oXCJcIikrXCIpfDBcIiksSS5wdXNoKG8oUCxSKStcIj0wXCIpfX1mb3IodmFyIFA9MDtQPEM7KytQKWZvcih2YXIgUj0wO1I8TDsrK1Ipe3ZhciBOPVtsKFAsU1tSXSldO1I+MCYmTi5wdXNoKGwoUCxTW1ItMV0pK1wiKlwiK3MoU1tSLTFdKSksSS5wdXNoKGQoUCxTW1JdKStcIj0oXCIrTi5qb2luKFwiLVwiKStcIil8MFwiKX1mb3IodmFyIFA9MDtQPEw7KytQKUkucHVzaChwKFApK1wiPTBcIik7SS5wdXNoKF8rXCI9MFwiKTtmb3IodmFyIGo9W1wiMlwiXSxQPUwtMjtQPj0wOy0tUClqLnB1c2gocyhTW1BdKSk7SS5wdXNoKHcrXCI9KFwiK2ouam9pbihcIipcIikrXCIpfDBcIixiK1wiPW1hbGxvY1VpbnQzMihcIit3K1wiKVwiLHgrXCI9bWFsbG9jVWludDMyKFwiK3crXCIpXCIsaytcIj0wXCIpLEkucHVzaChnKDApK1wiPTBcIik7Zm9yKHZhciBSPTE7UjwxPDxMOysrUil7Zm9yKHZhciBWPVtdLFU9W10sQj0wO0I8TDsrK0IpUiYxPDxCJiYoMD09PVUubGVuZ3RoP1YucHVzaChcIjFcIik6Vi51bnNoaWZ0KFUuam9pbihcIipcIikpKSxVLnB1c2gocyhTW0JdKSk7dmFyIHE9XCJcIjtWWzBdLmluZGV4T2YocyhTW0wtMl0pKTwwJiYocT1cIi1cIik7dmFyIEg9VChMLFIsUyk7SS5wdXNoKG0oSCkrXCI9KC1cIitWLmpvaW4oXCItXCIpK1wiKXwwXCIsdihIKStcIj0oXCIrcStWLmpvaW4oXCItXCIpK1wiKXwwXCIsZyhIKStcIj0wXCIpfWZ1bmN0aW9uIEcodCxlKXtPLnB1c2goXCJmb3IoXCIscChTW3RdKSxcIj1cIixlLFwiO1wiLHAoU1t0XSksXCI8XCIscyhTW3RdKSxcIjtcIixcIisrXCIscChTW3RdKSxcIil7XCIpfWZ1bmN0aW9uIFkodCl7Zm9yKHZhciBlPTA7ZTxDOysrZSlPLnB1c2goaChlKSxcIis9XCIsZChlLFNbdF0pLFwiO1wiKTtPLnB1c2goXCJ9XCIpfWZ1bmN0aW9uIFcoKXtmb3IodmFyIHQ9MTt0PDE8PEw7Kyt0KU8ucHVzaChBLFwiPVwiLG0odCksXCI7XCIsbSh0KSxcIj1cIix2KHQpLFwiO1wiLHYodCksXCI9XCIsQSxcIjtcIil9SS5wdXNoKHkoMCkrXCI9MFwiLEErXCI9MFwiKSxmdW5jdGlvbiB0KGUscil7aWYoZTwwKXJldHVybiB2b2lkIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8QzsrK2UpRVtlXT9PLnB1c2gobyhlLDApLFwiPVwiLGEoZSksXCIuZ2V0KFwiLGgoZSksXCIpO1wiKTpPLnB1c2gobyhlLDApLFwiPVwiLGEoZSksXCJbXCIsaChlKSxcIl07XCIpO2Zvcih2YXIgcj1bXSxlPTA7ZTxDOysrZSlyLnB1c2gobyhlLDApKTtmb3IodmFyIGU9MDtlPE07KytlKXIucHVzaCh1KGUpKTtPLnB1c2goZygwKSxcIj1cIixiLFwiW1wiLGssXCJdPXBoYXNlKFwiLHIuam9pbigpLFwiKTtcIik7Zm9yKHZhciBuPTE7bjwxPDxMOysrbilPLnB1c2goZyhuKSxcIj1cIixiLFwiW1wiLGssXCIrXCIsbShuKSxcIl07XCIpO2Zvcih2YXIgaT1bXSxuPTE7bjwxPDxMOysrbilpLnB1c2goXCIoXCIrZygwKStcIiE9PVwiK2cobikrXCIpXCIpO08ucHVzaChcImlmKFwiLGkuam9pbihcInx8XCIpLFwiKXtcIik7Zm9yKHZhciBzPVtdLGU9MDtlPEw7KytlKXMucHVzaChwKGUpKTtmb3IodmFyIGU9MDtlPEM7KytlKXtzLnB1c2gobyhlLDApKTtmb3IodmFyIG49MTtuPDE8PEw7KytuKUVbZV0/Ty5wdXNoKG8oZSxuKSxcIj1cIixhKGUpLFwiLmdldChcIixoKGUpLFwiK1wiLGYoZSxuKSxcIik7XCIpOk8ucHVzaChvKGUsbiksXCI9XCIsYShlKSxcIltcIixoKGUpLFwiK1wiLGYoZSxuKSxcIl07XCIpLHMucHVzaChvKGUsbikpfWZvcih2YXIgZT0wO2U8MTw8TDsrK2Upcy5wdXNoKGcoZSkpO2Zvcih2YXIgZT0wO2U8TTsrK2Upcy5wdXNoKHUoZSkpO08ucHVzaChcInZlcnRleChcIixzLmpvaW4oKSxcIik7XCIseSgwKSxcIj1cIix4LFwiW1wiLGssXCJdPVwiLF8sXCIrKztcIik7Zm9yKHZhciBsPSgxPDxMKS0xLGM9ZyhsKSxuPTA7bjxMOysrbilpZigwPT0odCZ+KDE8PG4pKSl7Zm9yKHZhciBkPWxeMTw8bix2PWcoZCksdz1bXSxBPWQ7QT4wO0E9QS0xJmQpdy5wdXNoKHgrXCJbXCIraytcIitcIittKEEpK1wiXVwiKTt3LnB1c2goeSgwKSk7Zm9yKHZhciBBPTA7QTxDOysrQSkxJm4/dy5wdXNoKG8oQSxsKSxvKEEsZCkpOncucHVzaChvKEEsZCksbyhBLGwpKTsxJm4/dy5wdXNoKGMsdik6dy5wdXNoKHYsYyk7Zm9yKHZhciBBPTA7QTxNOysrQSl3LnB1c2godShBKSk7Ty5wdXNoKFwiaWYoXCIsYyxcIiE9PVwiLHYsXCIpe1wiLFwiZmFjZShcIix3LmpvaW4oKSxcIil9XCIpfU8ucHVzaChcIn1cIixrLFwiKz0xO1wiKX0ocik7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LTE7ZT49MDstLWUpRyhlLDApO2Zvcih2YXIgcj1bXSxlPTA7ZTxDOysrZSlFW2VdP3IucHVzaChhKGUpK1wiLmdldChcIitoKGUpK1wiKVwiKTpyLnB1c2goYShlKStcIltcIitoKGUpK1wiXVwiKTtmb3IodmFyIGU9MDtlPE07KytlKXIucHVzaCh1KGUpKTtPLnB1c2goYixcIltcIixrLFwiKytdPXBoYXNlKFwiLHIuam9pbigpLFwiKTtcIik7Zm9yKHZhciBlPTA7ZTx0OysrZSlZKGUpO2Zvcih2YXIgbj0wO248QzsrK24pTy5wdXNoKGgobiksXCIrPVwiLGQobixTW3RdKSxcIjtcIil9KGUpO08ucHVzaChcImlmKFwiLHMoU1tlXSksXCI+MCl7XCIscChTW2VdKSxcIj0xO1wiKTt0KGUtMSxyfDE8PFNbZV0pO2Zvcih2YXIgbj0wO248QzsrK24pTy5wdXNoKGgobiksXCIrPVwiLGQobixTW2VdKSxcIjtcIik7ZT09PUwtMSYmKE8ucHVzaChrLFwiPTA7XCIpLFcoKSk7RyhlLDIpO3QoZS0xLHIpO2U9PT1MLTEmJihPLnB1c2goXCJpZihcIixwKFNbTC0xXSksXCImMSl7XCIsayxcIj0wO31cIiksVygpKTtZKGUpO08ucHVzaChcIn1cIil9KEwtMSwwKSxPLnB1c2goXCJmcmVlVWludDMyKFwiLHgsXCIpO2ZyZWVVaW50MzIoXCIsYixcIik7XCIpO3ZhciBYPVtcIid1c2Ugc3RyaWN0JztcIixcImZ1bmN0aW9uIFwiLHosXCIoXCIsRC5qb2luKCksXCIpe1wiLFwidmFyIFwiLEkuam9pbigpLFwiO1wiLE8uam9pbihcIlwiKSxcIn1cIixcInJldHVybiBcIix6XS5qb2luKFwiXCIpO3JldHVybiBuZXcgRnVuY3Rpb24oXCJ2ZXJ0ZXhcIixcImZhY2VcIixcInBoYXNlXCIsXCJtYWxsb2NVaW50MzJcIixcImZyZWVVaW50MzJcIixYKSh0LGUscixuLm1hbGxvY1VpbnQzMixuLmZyZWVVaW50MzIpfSh0LnZlcnRleCx0LmNlbGwsdC5waGFzZSxTLHIsQyl9O3ZhciB4PVwiVlwiLGI9XCJQXCIsXz1cIk5cIix3PVwiUVwiLGs9XCJYXCIsQT1cIlRcIjtmdW5jdGlvbiBUKHQsZSxyKXtmb3IodmFyIG49MCxpPTA7aTx0OysraSllJjE8PGkmJihufD0xPDxyW2ldKTtyZXR1cm4gbn19LHtcInR5cGVkYXJyYXktcG9vbFwiOjUzMH1dLDQzMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJjd2lzZS9saWIvd3JhcHBlclwiKSh7YXJnczpbXCJpbmRleFwiLFwiYXJyYXlcIixcInNjYWxhclwiXSxwcmU6e2JvZHk6XCJ7fVwiLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5Olwie19pbmxpbmVfMV9hcmcxXz1faW5saW5lXzFfYXJnMl8uYXBwbHkodm9pZCAwLF9pbmxpbmVfMV9hcmcwXyl9XCIsYXJnczpbe25hbWU6XCJfaW5saW5lXzFfYXJnMF9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xX2FyZzFfXCIsbHZhbHVlOiEwLHJ2YWx1ZTohMSxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfMV9hcmcyX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keTpcInt9XCIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGRlYnVnOiExLGZ1bmNOYW1lOlwiY3dpc2VcIixibG9ja1NpemU6NjR9KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LGUpLHR9fSx7XCJjd2lzZS9saWIvd3JhcHBlclwiOjE0MH1dLDQzNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoQXJyYXkuaXNBcnJheShyKSl7aWYoci5sZW5ndGghPT1lLmRpbWVuc2lvbil0aHJvdyBuZXcgRXJyb3IoXCJuZGFycmF5LWdyYWRpZW50OiBpbnZhbGlkIGJvdW5kYXJ5IGNvbmRpdGlvbnNcIil9ZWxzZSByPW4oZS5kaW1lbnNpb24sXCJzdHJpbmdcIj09dHlwZW9mIHI/cjpcImNsYW1wXCIpO2lmKHQuZGltZW5zaW9uIT09ZS5kaW1lbnNpb24rMSl0aHJvdyBuZXcgRXJyb3IoXCJuZGFycmF5LWdyYWRpZW50OiBvdXRwdXQgZGltZW5zaW9uIG11c3QgYmUgKzEgaW5wdXQgZGltZW5zaW9uXCIpO2lmKHQuc2hhcGVbZS5kaW1lbnNpb25dIT09ZS5kaW1lbnNpb24pdGhyb3cgbmV3IEVycm9yKFwibmRhcnJheS1ncmFkaWVudDogb3V0cHV0IHNoYXBlIG11c3QgbWF0Y2ggaW5wdXQgc2hhcGVcIik7Zm9yKHZhciBpPTA7aTxlLmRpbWVuc2lvbjsrK2kpaWYodC5zaGFwZVtpXSE9PWUuc2hhcGVbaV0pdGhyb3cgbmV3IEVycm9yKFwibmRhcnJheS1ncmFkaWVudDogc2hhcGUgbWlzbWF0Y2hcIik7aWYoMD09PWUuc2l6ZSlyZXR1cm4gdDtpZihlLmRpbWVuc2lvbjw9MClyZXR1cm4gdC5zZXQoMCksdDtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5qb2luKCk7aWYobT1vW2VdKXJldHVybiBtO3ZhciByPXQubGVuZ3RoLG49W1wiZnVuY3Rpb24gZ3JhZGllbnQoZHN0LHNyYyl7dmFyIHM9c3JjLnNoYXBlLnNsaWNlKCk7XCJdO2Z1bmN0aW9uIGkoZSl7Zm9yKHZhciBpPXItZS5sZW5ndGgsYT1bXSxvPVtdLHM9W10sbD0wO2w8cjsrK2wpZS5pbmRleE9mKGwrMSk+PTA/cy5wdXNoKFwiMFwiKTplLmluZGV4T2YoLShsKzEpKT49MD9zLnB1c2goXCJzW1wiK2wrXCJdLTFcIik6KHMucHVzaChcIi0xXCIpLGEucHVzaChcIjFcIiksby5wdXNoKFwic1tcIitsK1wiXS0yXCIpKTt2YXIgYz1cIi5sbyhcIithLmpvaW4oKStcIikuaGkoXCIrby5qb2luKCkrXCIpXCI7aWYoMD09PWEubGVuZ3RoJiYoYz1cIlwiKSxpPjApe24ucHVzaChcImlmKDFcIik7Zm9yKHZhciBsPTA7bDxyOysrbCllLmluZGV4T2YobCsxKT49MHx8ZS5pbmRleE9mKC0obCsxKSk+PTB8fG4ucHVzaChcIiYmc1tcIixsLFwiXT4yXCIpO24ucHVzaChcIil7Z3JhZFwiLGksXCIoc3JjLnBpY2soXCIscy5qb2luKCksXCIpXCIsYyk7Zm9yKHZhciBsPTA7bDxyOysrbCllLmluZGV4T2YobCsxKT49MHx8ZS5pbmRleE9mKC0obCsxKSk+PTB8fG4ucHVzaChcIixkc3QucGljayhcIixzLmpvaW4oKSxcIixcIixsLFwiKVwiLGMpO24ucHVzaChcIik7XCIpfWZvcih2YXIgbD0wO2w8ZS5sZW5ndGg7KytsKXt2YXIgdT1NYXRoLmFicyhlW2xdKS0xLGg9XCJkc3QucGljayhcIitzLmpvaW4oKStcIixcIit1K1wiKVwiK2M7c3dpdGNoKHRbdV0pe2Nhc2VcImNsYW1wXCI6dmFyIGY9cy5zbGljZSgpLHA9cy5zbGljZSgpO2VbbF08MD9mW3VdPVwic1tcIit1K1wiXS0yXCI6cFt1XT1cIjFcIiwwPT09aT9uLnB1c2goXCJpZihzW1wiLHUsXCJdPjEpe2RzdC5zZXQoXCIscy5qb2luKCksXCIsXCIsdSxcIiwwLjUqKHNyYy5nZXQoXCIsZi5qb2luKCksXCIpLXNyYy5nZXQoXCIscC5qb2luKCksXCIpKSl9ZWxzZXtkc3Quc2V0KFwiLHMuam9pbigpLFwiLFwiLHUsXCIsMCl9O1wiKTpuLnB1c2goXCJpZihzW1wiLHUsXCJdPjEpe2RpZmYoXCIsaCxcIixzcmMucGljayhcIixmLmpvaW4oKSxcIilcIixjLFwiLHNyYy5waWNrKFwiLHAuam9pbigpLFwiKVwiLGMsXCIpO31lbHNle3plcm8oXCIsaCxcIik7fTtcIik7YnJlYWs7Y2FzZVwibWlycm9yXCI6MD09PWk/bi5wdXNoKFwiZHN0LnNldChcIixzLmpvaW4oKSxcIixcIix1LFwiLDApO1wiKTpuLnB1c2goXCJ6ZXJvKFwiLGgsXCIpO1wiKTticmVhaztjYXNlXCJ3cmFwXCI6dmFyIGQ9cy5zbGljZSgpLGc9cy5zbGljZSgpO2VbbF08MD8oZFt1XT1cInNbXCIrdStcIl0tMlwiLGdbdV09XCIwXCIpOihkW3VdPVwic1tcIit1K1wiXS0xXCIsZ1t1XT1cIjFcIiksMD09PWk/bi5wdXNoKFwiaWYoc1tcIix1LFwiXT4yKXtkc3Quc2V0KFwiLHMuam9pbigpLFwiLFwiLHUsXCIsMC41KihzcmMuZ2V0KFwiLGQuam9pbigpLFwiKS1zcmMuZ2V0KFwiLGcuam9pbigpLFwiKSkpfWVsc2V7ZHN0LnNldChcIixzLmpvaW4oKSxcIixcIix1LFwiLDApfTtcIik6bi5wdXNoKFwiaWYoc1tcIix1LFwiXT4yKXtkaWZmKFwiLGgsXCIsc3JjLnBpY2soXCIsZC5qb2luKCksXCIpXCIsYyxcIixzcmMucGljayhcIixnLmpvaW4oKSxcIilcIixjLFwiKTt9ZWxzZXt6ZXJvKFwiLGgsXCIpO307XCIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwibmRhcnJheS1ncmFkaWVudDogSW52YWxpZCBib3VuZGFyeSBjb25kaXRpb25cIil9fWk+MCYmbi5wdXNoKFwifTtcIil9Zm9yKHZhciBzPTA7czwxPDxyOysrcyl7Zm9yKHZhciBoPVtdLGY9MDtmPHI7KytmKXMmMTw8ZiYmaC5wdXNoKGYrMSk7Zm9yKHZhciBwPTA7cDwxPDxoLmxlbmd0aDsrK3Ape2Zvcih2YXIgZD1oLnNsaWNlKCksZj0wO2Y8aC5sZW5ndGg7KytmKXAmMTw8ZiYmKGRbZl09LWRbZl0pO2koZCl9fW4ucHVzaChcInJldHVybiBkc3Q7fTtyZXR1cm4gZ3JhZGllbnRcIik7Zm9yKHZhciBnPVtcImRpZmZcIixcInplcm9cIl0sdj1bbCxjXSxzPTE7czw9cjsrK3MpZy5wdXNoKFwiZ3JhZFwiK3MpLHYucHVzaCh1KHMpKTtnLnB1c2gobi5qb2luKFwiXCIpKTt2YXIgbT1GdW5jdGlvbi5hcHBseSh2b2lkIDAsZykuYXBwbHkodm9pZCAwLHYpO3JldHVybiBhW2VdPW0sbX0ocikodCxlKX07dmFyIG49dChcImR1cFwiKSxpPXQoXCJjd2lzZS1jb21waWxlclwiKSxhPXt9LG89e30scz17Ym9keTpcIlwiLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxsPWkoe2FyZ3M6W1wiYXJyYXlcIixcImFycmF5XCIsXCJhcnJheVwiXSxwcmU6cyxwb3N0OnMsYm9keTp7YXJnczpbe25hbWU6XCJvdXRcIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOlwibGVmdFwiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJyaWdodFwiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6XCJvdXQ9MC41KihsZWZ0LXJpZ2h0KVwiLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZnVuY05hbWU6XCJjZGlmZlwifSksYz1pKHthcmdzOltcImFycmF5XCJdLHByZTpzLHBvc3Q6cyxib2R5OnthcmdzOlt7bmFtZTpcIm91dFwiLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX1dLGJvZHk6XCJvdXQ9MFwiLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZnVuY05hbWU6XCJ6ZXJvXCJ9KTtmdW5jdGlvbiB1KHQpe2lmKHQgaW4gYSlyZXR1cm4gYVt0XTtmb3IodmFyIGU9W10scj0wO3I8dDsrK3IpZS5wdXNoKFwib3V0XCIscixcInM9MC41KihpbnBcIixyLFwibC1pbnBcIixyLFwicik7XCIpO3ZhciBvPVtcImFycmF5XCJdLGw9W1wianVua1wiXTtmb3Iocj0wO3I8dDsrK3Ipe28ucHVzaChcImFycmF5XCIpLGwucHVzaChcIm91dFwiK3IrXCJzXCIpO3ZhciBjPW4odCk7Y1tyXT0tMSxvLnB1c2goe2FycmF5OjAsb2Zmc2V0OmMuc2xpY2UoKX0pLGNbcl09MSxvLnB1c2goe2FycmF5OjAsb2Zmc2V0OmMuc2xpY2UoKX0pLGwucHVzaChcImlucFwiK3IrXCJsXCIsXCJpbnBcIityK1wiclwiKX1yZXR1cm4gYVt0XT1pKHthcmdzOm8scHJlOnMscG9zdDpzLGJvZHk6e2JvZHk6ZS5qb2luKFwiXCIpLGFyZ3M6bC5tYXAoZnVuY3Rpb24odCl7cmV0dXJue25hbWU6dCxsdmFsdWU6MD09PXQuaW5kZXhPZihcIm91dFwiKSxydmFsdWU6MD09PXQuaW5kZXhPZihcImlucFwiKSxjb3VudDpcImp1bmtcIiE9PXR8MH19KSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGZ1bmNOYW1lOlwiZmRUZW1wbGF0ZVwiK3R9KX19LHtcImN3aXNlLWNvbXBpbGVyXCI6MTM3LGR1cDoxNjJ9XSw0MzU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwibmRhcnJheS13YXJwXCIpLGk9dChcImdsLW1hdHJpeC1pbnZlcnRcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1lLmRpbWVuc2lvbixvPWkoW10scik7cmV0dXJuIG4odCxlLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjxhOysrcil7dFtyXT1vWyhhKzEpKmErcl07Zm9yKHZhciBuPTA7bjxhOysrbil0W3JdKz1vWyhhKzEpKm4rcl0qZVtuXX12YXIgaT1vWyhhKzEpKihhKzEpLTFdO2ZvcihuPTA7bjxhOysrbilpKz1vWyhhKzEpKm4rYV0qZVtuXTt2YXIgcz0xL2k7Zm9yKHI9MDtyPGE7KytyKXRbcl0qPXM7cmV0dXJuIHR9KSx0fX0se1wiZ2wtbWF0cml4LWludmVydFwiOjI3NCxcIm5kYXJyYXktd2FycFwiOjQ0Mn1dLDQzNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1NYXRoLmZsb29yKGUpLG49ZS1yLGk9MDw9ciYmcjx0LnNoYXBlWzBdLGE9MDw9cisxJiZyKzE8dC5zaGFwZVswXTtyZXR1cm4oMS1uKSooaT8rdC5nZXQocik6MCkrbiooYT8rdC5nZXQocisxKTowKX1mdW5jdGlvbiBpKHQsZSxyKXt2YXIgbj1NYXRoLmZsb29yKGUpLGk9ZS1uLGE9MDw9biYmbjx0LnNoYXBlWzBdLG89MDw9bisxJiZuKzE8dC5zaGFwZVswXSxzPU1hdGguZmxvb3IociksbD1yLXMsYz0wPD1zJiZzPHQuc2hhcGVbMV0sdT0wPD1zKzEmJnMrMTx0LnNoYXBlWzFdLGg9YSYmYz90LmdldChuLHMpOjAsZj1hJiZ1P3QuZ2V0KG4scysxKTowO3JldHVybigxLWwpKigoMS1pKSpoK2kqKG8mJmM/dC5nZXQobisxLHMpOjApKStsKigoMS1pKSpmK2kqKG8mJnU/dC5nZXQobisxLHMrMSk6MCkpfWZ1bmN0aW9uIGEodCxlLHIsbil7dmFyIGk9TWF0aC5mbG9vcihlKSxhPWUtaSxvPTA8PWkmJmk8dC5zaGFwZVswXSxzPTA8PWkrMSYmaSsxPHQuc2hhcGVbMF0sbD1NYXRoLmZsb29yKHIpLGM9ci1sLHU9MDw9bCYmbDx0LnNoYXBlWzFdLGg9MDw9bCsxJiZsKzE8dC5zaGFwZVsxXSxmPU1hdGguZmxvb3IobikscD1uLWYsZD0wPD1mJiZmPHQuc2hhcGVbMl0sZz0wPD1mKzEmJmYrMTx0LnNoYXBlWzJdLHY9byYmdSYmZD90LmdldChpLGwsZik6MCxtPW8mJmgmJmQ/dC5nZXQoaSxsKzEsZik6MCx5PXMmJnUmJmQ/dC5nZXQoaSsxLGwsZik6MCx4PXMmJmgmJmQ/dC5nZXQoaSsxLGwrMSxmKTowLGI9byYmdSYmZz90LmdldChpLGwsZisxKTowLF89byYmaCYmZz90LmdldChpLGwrMSxmKzEpOjA7cmV0dXJuKDEtcCkqKCgxLWMpKigoMS1hKSp2K2EqeSkrYyooKDEtYSkqbSthKngpKStwKigoMS1jKSooKDEtYSkqYithKihzJiZ1JiZnP3QuZ2V0KGkrMSxsLGYrMSk6MCkpK2MqKCgxLWEpKl8rYSoocyYmaCYmZz90LmdldChpKzEsbCsxLGYrMSk6MCkpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7c3dpdGNoKHQuc2hhcGUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIDA7Y2FzZSAxOnJldHVybiBuKHQsZSk7Y2FzZSAyOnJldHVybiBpKHQsZSxyKTtjYXNlIDM6cmV0dXJuIGEodCxlLHIsbyk7ZGVmYXVsdDpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGUscixuPTB8dC5zaGFwZS5sZW5ndGgsaT1uZXcgQXJyYXkobiksYT1uZXcgQXJyYXkobiksbz1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobik7Zm9yKGU9MDtlPG47KytlKXI9K2FyZ3VtZW50c1tlKzFdLGlbZV09TWF0aC5mbG9vcihyKSxhW2VdPXItaVtlXSxvW2VdPTA8PWlbZV0mJmlbZV08dC5zaGFwZVtlXSxzW2VdPTA8PWlbZV0rMSYmaVtlXSsxPHQuc2hhcGVbZV07dmFyIGwsYyx1LGg9MDt0OmZvcihlPTA7ZTwxPDxuOysrZSl7Zm9yKGM9MSx1PXQub2Zmc2V0LGw9MDtsPG47KytsKWlmKGUmMTw8bCl7aWYoIXNbbF0pY29udGludWUgdDtjKj1hW2xdLHUrPXQuc3RyaWRlW2xdKihpW2xdKzEpfWVsc2V7aWYoIW9bbF0pY29udGludWUgdDtjKj0xLWFbbF0sdSs9dC5zdHJpZGVbbF0qaVtsXX1oKz1jKnQuZGF0YVt1XX1yZXR1cm4gaH0uYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fSxlLmV4cG9ydHMuZDE9bixlLmV4cG9ydHMuZDI9aSxlLmV4cG9ydHMuZDM9YX0se31dLDQzNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJjd2lzZS1jb21waWxlclwiKSxpPXtib2R5OlwiXCIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119O2Z1bmN0aW9uIGEodCl7aWYoIXQpcmV0dXJuIGk7Zm9yKHZhciBlPTA7ZTx0LmFyZ3MubGVuZ3RoOysrZSl7dmFyIHI9dC5hcmdzW2VdO3QuYXJnc1tlXT0wPT09ZT97bmFtZTpyLGx2YWx1ZTohMCxydmFsdWU6ISF0LnJ2YWx1ZSxjb3VudDp0LmNvdW50fHwxfTp7bmFtZTpyLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX19cmV0dXJuIHQudGhpc1ZhcnN8fCh0LnRoaXNWYXJzPVtdKSx0LmxvY2FsVmFyc3x8KHQubG9jYWxWYXJzPVtdKSx0fWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPVtdLHI9MDtyPHQuYXJncy5sZW5ndGg7KytyKWUucHVzaChcImFcIityKTtyZXR1cm4gbmV3IEZ1bmN0aW9uKFwiUFwiLFtcInJldHVybiBmdW5jdGlvbiBcIix0LmZ1bmNOYW1lLFwiX25kYXJyYXlvcHMoXCIsZS5qb2luKFwiLFwiKSxcIikge1AoXCIsZS5qb2luKFwiLFwiKSxcIik7cmV0dXJuIGEwfVwiXS5qb2luKFwiXCIpKShmdW5jdGlvbih0KXtyZXR1cm4gbih7YXJnczp0LmFyZ3MscHJlOmEodC5wcmUpLGJvZHk6YSh0LmJvZHkpLHBvc3Q6YSh0LnByb2MpLGZ1bmNOYW1lOnQuZnVuY05hbWV9KX0odCkpfXZhciBzPXthZGQ6XCIrXCIsc3ViOlwiLVwiLG11bDpcIipcIixkaXY6XCIvXCIsbW9kOlwiJVwiLGJhbmQ6XCImXCIsYm9yOlwifFwiLGJ4b3I6XCJeXCIsbHNoaWZ0OlwiPDxcIixyc2hpZnQ6XCI+PlwiLHJyc2hpZnQ6XCI+Pj5cIn07IWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHMpe3ZhciBlPXNbdF07clt0XT1vKHthcmdzOltcImFycmF5XCIsXCJhcnJheVwiLFwiYXJyYXlcIl0sYm9keTp7YXJnczpbXCJhXCIsXCJiXCIsXCJjXCJdLGJvZHk6XCJhPWJcIitlK1wiY1wifSxmdW5jTmFtZTp0fSksclt0K1wiZXFcIl09byh7YXJnczpbXCJhcnJheVwiLFwiYXJyYXlcIl0sYm9keTp7YXJnczpbXCJhXCIsXCJiXCJdLGJvZHk6XCJhXCIrZStcIj1iXCJ9LHJ2YWx1ZTohMCxmdW5jTmFtZTp0K1wiZXFcIn0pLHJbdCtcInNcIl09byh7YXJnczpbXCJhcnJheVwiLFwiYXJyYXlcIixcInNjYWxhclwiXSxib2R5OnthcmdzOltcImFcIixcImJcIixcInNcIl0sYm9keTpcImE9YlwiK2UrXCJzXCJ9LGZ1bmNOYW1lOnQrXCJzXCJ9KSxyW3QrXCJzZXFcIl09byh7YXJnczpbXCJhcnJheVwiLFwic2NhbGFyXCJdLGJvZHk6e2FyZ3M6W1wiYVwiLFwic1wiXSxib2R5OlwiYVwiK2UrXCI9c1wifSxydmFsdWU6ITAsZnVuY05hbWU6dCtcInNlcVwifSl9fSgpO3ZhciBsPXtub3Q6XCIhXCIsYm5vdDpcIn5cIixuZWc6XCItXCIscmVjaXA6XCIxLjAvXCJ9OyFmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBsKXt2YXIgZT1sW3RdO3JbdF09byh7YXJnczpbXCJhcnJheVwiLFwiYXJyYXlcIl0sYm9keTp7YXJnczpbXCJhXCIsXCJiXCJdLGJvZHk6XCJhPVwiK2UrXCJiXCJ9LGZ1bmNOYW1lOnR9KSxyW3QrXCJlcVwiXT1vKHthcmdzOltcImFycmF5XCJdLGJvZHk6e2FyZ3M6W1wiYVwiXSxib2R5OlwiYT1cIitlK1wiYVwifSxydmFsdWU6ITAsY291bnQ6MixmdW5jTmFtZTp0K1wiZXFcIn0pfX0oKTt2YXIgYz17YW5kOlwiJiZcIixvcjpcInx8XCIsZXE6XCI9PT1cIixuZXE6XCIhPT1cIixsdDpcIjxcIixndDpcIj5cIixsZXE6XCI8PVwiLGdlcTpcIj49XCJ9OyFmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBjKXt2YXIgZT1jW3RdO3JbdF09byh7YXJnczpbXCJhcnJheVwiLFwiYXJyYXlcIixcImFycmF5XCJdLGJvZHk6e2FyZ3M6W1wiYVwiLFwiYlwiLFwiY1wiXSxib2R5OlwiYT1iXCIrZStcImNcIn0sZnVuY05hbWU6dH0pLHJbdCtcInNcIl09byh7YXJnczpbXCJhcnJheVwiLFwiYXJyYXlcIixcInNjYWxhclwiXSxib2R5OnthcmdzOltcImFcIixcImJcIixcInNcIl0sYm9keTpcImE9YlwiK2UrXCJzXCJ9LGZ1bmNOYW1lOnQrXCJzXCJ9KSxyW3QrXCJlcVwiXT1vKHthcmdzOltcImFycmF5XCIsXCJhcnJheVwiXSxib2R5OnthcmdzOltcImFcIixcImJcIl0sYm9keTpcImE9YVwiK2UrXCJiXCJ9LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOnQrXCJlcVwifSksclt0K1wic2VxXCJdPW8oe2FyZ3M6W1wiYXJyYXlcIixcInNjYWxhclwiXSxib2R5OnthcmdzOltcImFcIixcInNcIl0sYm9keTpcImE9YVwiK2UrXCJzXCJ9LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOnQrXCJzZXFcIn0pfX0oKTt2YXIgdT1bXCJhYnNcIixcImFjb3NcIixcImFzaW5cIixcImF0YW5cIixcImNlaWxcIixcImNvc1wiLFwiZXhwXCIsXCJmbG9vclwiLFwibG9nXCIsXCJyb3VuZFwiLFwic2luXCIsXCJzcXJ0XCIsXCJ0YW5cIl07IWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDx1Lmxlbmd0aDsrK3Qpe3ZhciBlPXVbdF07cltlXT1vKHthcmdzOltcImFycmF5XCIsXCJhcnJheVwiXSxwcmU6e2FyZ3M6W10sYm9keTpcInRoaXNfZj1NYXRoLlwiK2UsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxib2R5OnthcmdzOltcImFcIixcImJcIl0sYm9keTpcImE9dGhpc19mKGIpXCIsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxmdW5jTmFtZTplfSkscltlK1wiZXFcIl09byh7YXJnczpbXCJhcnJheVwiXSxwcmU6e2FyZ3M6W10sYm9keTpcInRoaXNfZj1NYXRoLlwiK2UsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxib2R5OnthcmdzOltcImFcIl0sYm9keTpcImE9dGhpc19mKGEpXCIsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxydmFsdWU6ITAsY291bnQ6MixmdW5jTmFtZTplK1wiZXFcIn0pfX0oKTt2YXIgaD1bXCJtYXhcIixcIm1pblwiLFwiYXRhbjJcIixcInBvd1wiXTshZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGgubGVuZ3RoOysrdCl7dmFyIGU9aFt0XTtyW2VdPW8oe2FyZ3M6W1wiYXJyYXlcIixcImFycmF5XCIsXCJhcnJheVwiXSxwcmU6e2FyZ3M6W10sYm9keTpcInRoaXNfZj1NYXRoLlwiK2UsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxib2R5OnthcmdzOltcImFcIixcImJcIixcImNcIl0sYm9keTpcImE9dGhpc19mKGIsYylcIix0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LGZ1bmNOYW1lOmV9KSxyW2UrXCJzXCJdPW8oe2FyZ3M6W1wiYXJyYXlcIixcImFycmF5XCIsXCJzY2FsYXJcIl0scHJlOnthcmdzOltdLGJvZHk6XCJ0aGlzX2Y9TWF0aC5cIitlLHRoaXNWYXJzOltcInRoaXNfZlwiXX0sYm9keTp7YXJnczpbXCJhXCIsXCJiXCIsXCJjXCJdLGJvZHk6XCJhPXRoaXNfZihiLGMpXCIsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxmdW5jTmFtZTplK1wic1wifSkscltlK1wiZXFcIl09byh7YXJnczpbXCJhcnJheVwiLFwiYXJyYXlcIl0scHJlOnthcmdzOltdLGJvZHk6XCJ0aGlzX2Y9TWF0aC5cIitlLHRoaXNWYXJzOltcInRoaXNfZlwiXX0sYm9keTp7YXJnczpbXCJhXCIsXCJiXCJdLGJvZHk6XCJhPXRoaXNfZihhLGIpXCIsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxydmFsdWU6ITAsY291bnQ6MixmdW5jTmFtZTplK1wiZXFcIn0pLHJbZStcInNlcVwiXT1vKHthcmdzOltcImFycmF5XCIsXCJzY2FsYXJcIl0scHJlOnthcmdzOltdLGJvZHk6XCJ0aGlzX2Y9TWF0aC5cIitlLHRoaXNWYXJzOltcInRoaXNfZlwiXX0sYm9keTp7YXJnczpbXCJhXCIsXCJiXCJdLGJvZHk6XCJhPXRoaXNfZihhLGIpXCIsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxydmFsdWU6ITAsY291bnQ6MixmdW5jTmFtZTplK1wic2VxXCJ9KX19KCk7dmFyIGY9W1wiYXRhbjJcIixcInBvd1wiXTshZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGYubGVuZ3RoOysrdCl7dmFyIGU9Zlt0XTtyW2UrXCJvcFwiXT1vKHthcmdzOltcImFycmF5XCIsXCJhcnJheVwiLFwiYXJyYXlcIl0scHJlOnthcmdzOltdLGJvZHk6XCJ0aGlzX2Y9TWF0aC5cIitlLHRoaXNWYXJzOltcInRoaXNfZlwiXX0sYm9keTp7YXJnczpbXCJhXCIsXCJiXCIsXCJjXCJdLGJvZHk6XCJhPXRoaXNfZihjLGIpXCIsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxmdW5jTmFtZTplK1wib3BcIn0pLHJbZStcIm9wc1wiXT1vKHthcmdzOltcImFycmF5XCIsXCJhcnJheVwiLFwic2NhbGFyXCJdLHByZTp7YXJnczpbXSxib2R5OlwidGhpc19mPU1hdGguXCIrZSx0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LGJvZHk6e2FyZ3M6W1wiYVwiLFwiYlwiLFwiY1wiXSxib2R5OlwiYT10aGlzX2YoYyxiKVwiLHRoaXNWYXJzOltcInRoaXNfZlwiXX0sZnVuY05hbWU6ZStcIm9wc1wifSkscltlK1wib3BlcVwiXT1vKHthcmdzOltcImFycmF5XCIsXCJhcnJheVwiXSxwcmU6e2FyZ3M6W10sYm9keTpcInRoaXNfZj1NYXRoLlwiK2UsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxib2R5OnthcmdzOltcImFcIixcImJcIl0sYm9keTpcImE9dGhpc19mKGIsYSlcIix0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOmUrXCJvcGVxXCJ9KSxyW2UrXCJvcHNlcVwiXT1vKHthcmdzOltcImFycmF5XCIsXCJzY2FsYXJcIl0scHJlOnthcmdzOltdLGJvZHk6XCJ0aGlzX2Y9TWF0aC5cIitlLHRoaXNWYXJzOltcInRoaXNfZlwiXX0sYm9keTp7YXJnczpbXCJhXCIsXCJiXCJdLGJvZHk6XCJhPXRoaXNfZihiLGEpXCIsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxydmFsdWU6ITAsY291bnQ6MixmdW5jTmFtZTplK1wib3BzZXFcIn0pfX0oKSxyLmFueT1uKHthcmdzOltcImFycmF5XCJdLHByZTppLGJvZHk6e2FyZ3M6W3tuYW1lOlwiYVwiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6XCJpZihhKXtyZXR1cm4gdHJ1ZX1cIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W119LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOltdLGJvZHk6XCJyZXR1cm4gZmFsc2VcIn0sZnVuY05hbWU6XCJhbnlcIn0pLHIuYWxsPW4oe2FyZ3M6W1wiYXJyYXlcIl0scHJlOmksYm9keTp7YXJnczpbe25hbWU6XCJ4XCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sYm9keTpcImlmKCF4KXtyZXR1cm4gZmFsc2V9XCIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOltdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXSxib2R5OlwicmV0dXJuIHRydWVcIn0sZnVuY05hbWU6XCJhbGxcIn0pLHIuc3VtPW4oe2FyZ3M6W1wiYXJyYXlcIl0scHJlOnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXCJ0aGlzX3NcIl0sYm9keTpcInRoaXNfcz0wXCJ9LGJvZHk6e2FyZ3M6W3tuYW1lOlwiYVwiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6XCJ0aGlzX3MrPWFcIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W1widGhpc19zXCJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXCJ0aGlzX3NcIl0sYm9keTpcInJldHVybiB0aGlzX3NcIn0sZnVuY05hbWU6XCJzdW1cIn0pLHIucHJvZD1uKHthcmdzOltcImFycmF5XCJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W1widGhpc19zXCJdLGJvZHk6XCJ0aGlzX3M9MVwifSxib2R5OnthcmdzOlt7bmFtZTpcImFcIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSxib2R5OlwidGhpc19zKj1hXCIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOltcInRoaXNfc1wiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W1widGhpc19zXCJdLGJvZHk6XCJyZXR1cm4gdGhpc19zXCJ9LGZ1bmNOYW1lOlwicHJvZFwifSksci5ub3JtMnNxdWFyZWQ9bih7YXJnczpbXCJhcnJheVwiXSxwcmU6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOltcInRoaXNfc1wiXSxib2R5OlwidGhpc19zPTBcIn0sYm9keTp7YXJnczpbe25hbWU6XCJhXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfV0sYm9keTpcInRoaXNfcys9YSphXCIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOltcInRoaXNfc1wiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W1widGhpc19zXCJdLGJvZHk6XCJyZXR1cm4gdGhpc19zXCJ9LGZ1bmNOYW1lOlwibm9ybTJzcXVhcmVkXCJ9KSxyLm5vcm0yPW4oe2FyZ3M6W1wiYXJyYXlcIl0scHJlOnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXCJ0aGlzX3NcIl0sYm9keTpcInRoaXNfcz0wXCJ9LGJvZHk6e2FyZ3M6W3tuYW1lOlwiYVwiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn1dLGJvZHk6XCJ0aGlzX3MrPWEqYVwiLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXCJ0aGlzX3NcIl19LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOltcInRoaXNfc1wiXSxib2R5OlwicmV0dXJuIE1hdGguc3FydCh0aGlzX3MpXCJ9LGZ1bmNOYW1lOlwibm9ybTJcIn0pLHIubm9ybWluZj1uKHthcmdzOltcImFycmF5XCJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W1widGhpc19zXCJdLGJvZHk6XCJ0aGlzX3M9MFwifSxib2R5OnthcmdzOlt7bmFtZTpcImFcIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjR9XSxib2R5OlwiaWYoLWE+dGhpc19zKXt0aGlzX3M9LWF9ZWxzZSBpZihhPnRoaXNfcyl7dGhpc19zPWF9XCIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOltcInRoaXNfc1wiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W1widGhpc19zXCJdLGJvZHk6XCJyZXR1cm4gdGhpc19zXCJ9LGZ1bmNOYW1lOlwibm9ybWluZlwifSksci5ub3JtMT1uKHthcmdzOltcImFycmF5XCJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W1widGhpc19zXCJdLGJvZHk6XCJ0aGlzX3M9MFwifSxib2R5OnthcmdzOlt7bmFtZTpcImFcIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjN9XSxib2R5OlwidGhpc19zKz1hPDA/LWE6YVwiLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXCJ0aGlzX3NcIl19LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOltcInRoaXNfc1wiXSxib2R5OlwicmV0dXJuIHRoaXNfc1wifSxmdW5jTmFtZTpcIm5vcm0xXCJ9KSxyLnN1cD1uKHthcmdzOltcImFycmF5XCJdLHByZTp7Ym9keTpcInRoaXNfaD0tSW5maW5pdHlcIixhcmdzOltdLHRoaXNWYXJzOltcInRoaXNfaFwiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6XCJpZihfaW5saW5lXzFfYXJnMF8+dGhpc19oKXRoaXNfaD1faW5saW5lXzFfYXJnMF9cIixhcmdzOlt7bmFtZTpcIl9pbmxpbmVfMV9hcmcwX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn1dLHRoaXNWYXJzOltcInRoaXNfaFwiXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6XCJyZXR1cm4gdGhpc19oXCIsYXJnczpbXSx0aGlzVmFyczpbXCJ0aGlzX2hcIl0sbG9jYWxWYXJzOltdfX0pLHIuaW5mPW4oe2FyZ3M6W1wiYXJyYXlcIl0scHJlOntib2R5OlwidGhpc19oPUluZmluaXR5XCIsYXJnczpbXSx0aGlzVmFyczpbXCJ0aGlzX2hcIl0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OlwiaWYoX2lubGluZV8xX2FyZzBfPHRoaXNfaCl0aGlzX2g9X2lubGluZV8xX2FyZzBfXCIsYXJnczpbe25hbWU6XCJfaW5saW5lXzFfYXJnMF9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9XSx0aGlzVmFyczpbXCJ0aGlzX2hcIl0sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5OlwicmV0dXJuIHRoaXNfaFwiLGFyZ3M6W10sdGhpc1ZhcnM6W1widGhpc19oXCJdLGxvY2FsVmFyczpbXX19KSxyLmFyZ21pbj1uKHthcmdzOltcImluZGV4XCIsXCJhcnJheVwiLFwic2hhcGVcIl0scHJlOntib2R5Olwie3RoaXNfdj1JbmZpbml0eTt0aGlzX2k9X2lubGluZV8wX2FyZzJfLnNsaWNlKDApfVwiLGFyZ3M6W3tuYW1lOlwiX2lubGluZV8wX2FyZzBfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZTpcIl9pbmxpbmVfMF9hcmcxX1wiLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6XCJfaW5saW5lXzBfYXJnMl9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbXCJ0aGlzX2lcIixcInRoaXNfdlwiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6XCJ7aWYoX2lubGluZV8xX2FyZzFfPHRoaXNfdil7dGhpc192PV9pbmxpbmVfMV9hcmcxXztmb3IodmFyIF9pbmxpbmVfMV9rPTA7X2lubGluZV8xX2s8X2lubGluZV8xX2FyZzBfLmxlbmd0aDsrK19pbmxpbmVfMV9rKXt0aGlzX2lbX2lubGluZV8xX2tdPV9pbmxpbmVfMV9hcmcwX1tfaW5saW5lXzFfa119fX1cIixhcmdzOlt7bmFtZTpcIl9pbmxpbmVfMV9hcmcwX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn0se25hbWU6XCJfaW5saW5lXzFfYXJnMV9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9XSx0aGlzVmFyczpbXCJ0aGlzX2lcIixcInRoaXNfdlwiXSxsb2NhbFZhcnM6W1wiX2lubGluZV8xX2tcIl19LHBvc3Q6e2JvZHk6XCJ7cmV0dXJuIHRoaXNfaX1cIixhcmdzOltdLHRoaXNWYXJzOltcInRoaXNfaVwiXSxsb2NhbFZhcnM6W119fSksci5hcmdtYXg9bih7YXJnczpbXCJpbmRleFwiLFwiYXJyYXlcIixcInNoYXBlXCJdLHByZTp7Ym9keTpcInt0aGlzX3Y9LUluZmluaXR5O3RoaXNfaT1faW5saW5lXzBfYXJnMl8uc2xpY2UoMCl9XCIsYXJnczpbe25hbWU6XCJfaW5saW5lXzBfYXJnMF9cIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOlwiX2lubGluZV8wX2FyZzFfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZTpcIl9pbmxpbmVfMF9hcmcyX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOltcInRoaXNfaVwiLFwidGhpc192XCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keTpcIntpZihfaW5saW5lXzFfYXJnMV8+dGhpc192KXt0aGlzX3Y9X2lubGluZV8xX2FyZzFfO2Zvcih2YXIgX2lubGluZV8xX2s9MDtfaW5saW5lXzFfazxfaW5saW5lXzFfYXJnMF8ubGVuZ3RoOysrX2lubGluZV8xX2spe3RoaXNfaVtfaW5saW5lXzFfa109X2lubGluZV8xX2FyZzBfW19pbmxpbmVfMV9rXX19fVwiLGFyZ3M6W3tuYW1lOlwiX2lubGluZV8xX2FyZzBfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfSx7bmFtZTpcIl9pbmxpbmVfMV9hcmcxX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn1dLHRoaXNWYXJzOltcInRoaXNfaVwiLFwidGhpc192XCJdLGxvY2FsVmFyczpbXCJfaW5saW5lXzFfa1wiXX0scG9zdDp7Ym9keTpcIntyZXR1cm4gdGhpc19pfVwiLGFyZ3M6W10sdGhpc1ZhcnM6W1widGhpc19pXCJdLGxvY2FsVmFyczpbXX19KSxyLnJhbmRvbT1vKHthcmdzOltcImFycmF5XCJdLHByZTp7YXJnczpbXSxib2R5OlwidGhpc19mPU1hdGgucmFuZG9tXCIsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxib2R5OnthcmdzOltcImFcIl0sYm9keTpcImE9dGhpc19mKClcIix0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LGZ1bmNOYW1lOlwicmFuZG9tXCJ9KSxyLmFzc2lnbj1vKHthcmdzOltcImFycmF5XCIsXCJhcnJheVwiXSxib2R5OnthcmdzOltcImFcIixcImJcIl0sYm9keTpcImE9YlwifSxmdW5jTmFtZTpcImFzc2lnblwifSksci5hc3NpZ25zPW8oe2FyZ3M6W1wiYXJyYXlcIixcInNjYWxhclwiXSxib2R5OnthcmdzOltcImFcIixcImJcIl0sYm9keTpcImE9YlwifSxmdW5jTmFtZTpcImFzc2lnbnNcIn0pLHIuZXF1YWxzPW4oe2FyZ3M6W1wiYXJyYXlcIixcImFycmF5XCJdLHByZTppLGJvZHk6e2FyZ3M6W3tuYW1lOlwieFwiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJ5XCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sYm9keTpcImlmKHghPT15KXtyZXR1cm4gZmFsc2V9XCIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOltdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXSxib2R5OlwicmV0dXJuIHRydWVcIn0sZnVuY05hbWU6XCJlcXVhbHNcIn0pfSx7XCJjd2lzZS1jb21waWxlclwiOjEzN31dLDQzODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJuZGFycmF5XCIpLGk9dChcIi4vZG9Db252ZXJ0LmpzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxhPXQsbz0xO0FycmF5LmlzQXJyYXkoYSk7KXIucHVzaChhLmxlbmd0aCksbyo9YS5sZW5ndGgsYT1hWzBdO3JldHVybiAwPT09ci5sZW5ndGg/bigpOihlfHwoZT1uKG5ldyBGbG9hdDY0QXJyYXkobykscikpLGkoZSx0KSxlKX19LHtcIi4vZG9Db252ZXJ0LmpzXCI6NDM5LG5kYXJyYXk6NDQzfV0sNDM5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoXCJjd2lzZS1jb21waWxlclwiKSh7YXJnczpbXCJhcnJheVwiLFwic2NhbGFyXCIsXCJpbmRleFwiXSxwcmU6e2JvZHk6XCJ7fVwiLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5Olwie1xcbnZhciBfaW5saW5lXzFfdj1faW5saW5lXzFfYXJnMV8sX2lubGluZV8xX2lcXG5mb3IoX2lubGluZV8xX2k9MDtfaW5saW5lXzFfaTxfaW5saW5lXzFfYXJnMl8ubGVuZ3RoLTE7KytfaW5saW5lXzFfaSkge1xcbl9pbmxpbmVfMV92PV9pbmxpbmVfMV92W19pbmxpbmVfMV9hcmcyX1tfaW5saW5lXzFfaV1dXFxufVxcbl9pbmxpbmVfMV9hcmcwXz1faW5saW5lXzFfdltfaW5saW5lXzFfYXJnMl9bX2lubGluZV8xX2FyZzJfLmxlbmd0aC0xXV1cXG59XCIsYXJnczpbe25hbWU6XCJfaW5saW5lXzFfYXJnMF9cIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xX2FyZzFfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfMV9hcmcyX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6NH1dLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXCJfaW5saW5lXzFfaVwiLFwiX2lubGluZV8xX3ZcIl19LHBvc3Q6e2JvZHk6XCJ7fVwiLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxmdW5jTmFtZTpcImNvbnZlcnRcIixibG9ja1NpemU6NjR9KX0se1wiY3dpc2UtY29tcGlsZXJcIjoxMzd9XSw0NDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwidHlwZWRhcnJheS1wb29sXCIpLGk9MzI7ZnVuY3Rpb24gYSh0KXtzd2l0Y2godCl7Y2FzZVwidWludDhcIjpyZXR1cm5bbi5tYWxsb2NVaW50OCxuLmZyZWVVaW50OF07Y2FzZVwidWludDE2XCI6cmV0dXJuW24ubWFsbG9jVWludDE2LG4uZnJlZVVpbnQxNl07Y2FzZVwidWludDMyXCI6cmV0dXJuW24ubWFsbG9jVWludDMyLG4uZnJlZVVpbnQzMl07Y2FzZVwiaW50OFwiOnJldHVybltuLm1hbGxvY0ludDgsbi5mcmVlSW50OF07Y2FzZVwiaW50MTZcIjpyZXR1cm5bbi5tYWxsb2NJbnQxNixuLmZyZWVJbnQxNl07Y2FzZVwiaW50MzJcIjpyZXR1cm5bbi5tYWxsb2NJbnQzMixuLmZyZWVJbnQzMl07Y2FzZVwiZmxvYXQzMlwiOnJldHVybltuLm1hbGxvY0Zsb2F0LG4uZnJlZUZsb2F0XTtjYXNlXCJmbG9hdDY0XCI6cmV0dXJuW24ubWFsbG9jRG91YmxlLG4uZnJlZURvdWJsZV07ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9W10scj0wO3I8dDsrK3IpZS5wdXNoKFwic1wiK3IpO2ZvcihyPTA7cjx0OysrcillLnB1c2goXCJuXCIrcik7Zm9yKHI9MTtyPHQ7KytyKWUucHVzaChcImRcIityKTtmb3Iocj0xO3I8dDsrK3IpZS5wdXNoKFwiZVwiK3IpO2ZvcihyPTE7cjx0OysrcillLnB1c2goXCJmXCIrcik7cmV0dXJuIGV9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W1wiJ3VzZSBzdHJpY3QnXCJdLG49W1wibmRhcnJheVNvcnRXcmFwcGVyXCIsdC5qb2luKFwiZFwiKSxlXS5qb2luKFwiXCIpO3IucHVzaChbXCJmdW5jdGlvbiBcIixuLFwiKFwiLFtcImFycmF5XCJdLmpvaW4oXCIsXCIpLFwiKXtcIl0uam9pbihcIlwiKSk7Zm9yKHZhciBzPVtcImRhdGE9YXJyYXkuZGF0YSxvZmZzZXQ9YXJyYXkub2Zmc2V0fDAsc2hhcGU9YXJyYXkuc2hhcGUsc3RyaWRlPWFycmF5LnN0cmlkZVwiXSxsPTA7bDx0Lmxlbmd0aDsrK2wpcy5wdXNoKFtcInNcIixsLFwiPXN0cmlkZVtcIixsLFwiXXwwLG5cIixsLFwiPXNoYXBlW1wiLGwsXCJdfDBcIl0uam9pbihcIlwiKSk7dmFyIGM9bmV3IEFycmF5KHQubGVuZ3RoKSx1PVtdO2ZvcihsPTA7bDx0Lmxlbmd0aDsrK2wpMCE9PShwPXRbbF0pJiYoMD09PXUubGVuZ3RoP2NbcF09XCIxXCI6Y1twXT11LmpvaW4oXCIqXCIpLHUucHVzaChcIm5cIitwKSk7dmFyIGg9LTEsZj0tMTtmb3IobD0wO2w8dC5sZW5ndGg7KytsKXt2YXIgcCxkPXRbbF07MCE9PWQmJihoPjA/cy5wdXNoKFtcImRcIixkLFwiPXNcIixkLFwiLWRcIixoLFwiKm5cIixoXS5qb2luKFwiXCIpKTpzLnB1c2goW1wiZFwiLGQsXCI9c1wiLGRdLmpvaW4oXCJcIikpLGg9ZCksMCE9KHA9dC5sZW5ndGgtMS1sKSYmKGY+MD9zLnB1c2goW1wiZVwiLHAsXCI9c1wiLHAsXCItZVwiLGYsXCIqblwiLGYsXCIsZlwiLHAsXCI9XCIsY1twXSxcIi1mXCIsZixcIipuXCIsZl0uam9pbihcIlwiKSk6cy5wdXNoKFtcImVcIixwLFwiPXNcIixwLFwiLGZcIixwLFwiPVwiLGNbcF1dLmpvaW4oXCJcIikpLGY9cCl9ci5wdXNoKFwidmFyIFwiK3Muam9pbihcIixcIikpO3ZhciBnPVtcIjBcIixcIm4wLTFcIixcImRhdGFcIixcIm9mZnNldFwiXS5jb25jYXQobyh0Lmxlbmd0aCkpO3IucHVzaChbXCJpZihuMDw9XCIsaSxcIil7XCIsXCJpbnNlcnRpb25Tb3J0KFwiLGcuam9pbihcIixcIiksXCIpfWVsc2V7XCIsXCJxdWlja1NvcnQoXCIsZy5qb2luKFwiLFwiKSxcIil9XCJdLmpvaW4oXCJcIikpLHIucHVzaChcIn1yZXR1cm4gXCIrbik7dmFyIHY9bmV3IEZ1bmN0aW9uKFwiaW5zZXJ0aW9uU29ydFwiLFwicXVpY2tTb3J0XCIsci5qb2luKFwiXFxuXCIpKSxtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W1wiJ3VzZSBzdHJpY3QnXCJdLG49W1wibmRhcnJheUluc2VydGlvblNvcnRcIix0LmpvaW4oXCJkXCIpLGVdLmpvaW4oXCJcIiksaT1bXCJsZWZ0XCIsXCJyaWdodFwiLFwiZGF0YVwiLFwib2Zmc2V0XCJdLmNvbmNhdChvKHQubGVuZ3RoKSkscz1hKGUpLGw9W1wiaSxqLGNwdHIscHRyPWxlZnQqczArb2Zmc2V0XCJdO2lmKHQubGVuZ3RoPjEpe2Zvcih2YXIgYz1bXSx1PTE7dTx0Lmxlbmd0aDsrK3UpbC5wdXNoKFwiaVwiK3UpLGMucHVzaChcIm5cIit1KTtzP2wucHVzaChcInNjcmF0Y2g9bWFsbG9jKFwiK2Muam9pbihcIipcIikrXCIpXCIpOmwucHVzaChcInNjcmF0Y2g9bmV3IEFycmF5KFwiK2Muam9pbihcIipcIikrXCIpXCIpLGwucHVzaChcImRwdHJcIixcInNwdHJcIixcImFcIixcImJcIil9ZWxzZSBsLnB1c2goXCJzY3JhdGNoXCIpO2Z1bmN0aW9uIGgodCl7cmV0dXJuXCJnZW5lcmljXCI9PT1lP1tcImRhdGEuZ2V0KFwiLHQsXCIpXCJdLmpvaW4oXCJcIik6W1wiZGF0YVtcIix0LFwiXVwiXS5qb2luKFwiXCIpfWZ1bmN0aW9uIGYodCxyKXtyZXR1cm5cImdlbmVyaWNcIj09PWU/W1wiZGF0YS5zZXQoXCIsdCxcIixcIixyLFwiKVwiXS5qb2luKFwiXCIpOltcImRhdGFbXCIsdCxcIl09XCIscl0uam9pbihcIlwiKX1pZihyLnB1c2goW1wiZnVuY3Rpb24gXCIsbixcIihcIixpLmpvaW4oXCIsXCIpLFwiKXt2YXIgXCIsbC5qb2luKFwiLFwiKV0uam9pbihcIlwiKSxcImZvcihpPWxlZnQrMTtpPD1yaWdodDsrK2kpe1wiLFwiaj1pO3B0cis9czBcIixcImNwdHI9cHRyXCIpLHQubGVuZ3RoPjEpe2ZvcihyLnB1c2goXCJkcHRyPTA7c3B0cj1wdHJcIiksdT10Lmxlbmd0aC0xO3U+PTA7LS11KTAhPT0ocD10W3VdKSYmci5wdXNoKFtcImZvcihpXCIscCxcIj0wO2lcIixwLFwiPG5cIixwLFwiOysraVwiLHAsXCIpe1wiXS5qb2luKFwiXCIpKTtmb3Ioci5wdXNoKFwic2NyYXRjaFtkcHRyKytdPVwiLGgoXCJzcHRyXCIpKSx1PTA7dTx0Lmxlbmd0aDsrK3UpMCE9PShwPXRbdV0pJiZyLnB1c2goXCJzcHRyKz1kXCIrcCxcIn1cIik7Zm9yKHIucHVzaChcIl9fZzp3aGlsZShqLS1cXHgzZWxlZnQpe1wiLFwiZHB0cj0wXCIsXCJzcHRyPWNwdHItczBcIiksdT0xO3U8dC5sZW5ndGg7Kyt1KTE9PT11JiZyLnB1c2goXCJfX2w6XCIpLHIucHVzaChbXCJmb3IoaVwiLHUsXCI9MDtpXCIsdSxcIjxuXCIsdSxcIjsrK2lcIix1LFwiKXtcIl0uam9pbihcIlwiKSk7Zm9yKHIucHVzaChbXCJhPVwiLGgoXCJzcHRyXCIpLFwiXFxuYj1zY3JhdGNoW2RwdHJdXFxuaWYoYTxiKXticmVhayBfX2d9XFxuaWYoYT5iKXticmVhayBfX2x9XCJdLmpvaW4oXCJcIikpLHU9dC5sZW5ndGgtMTt1Pj0xOy0tdSlyLnB1c2goXCJzcHRyKz1lXCIrdSxcImRwdHIrPWZcIit1LFwifVwiKTtmb3Ioci5wdXNoKFwiZHB0cj1jcHRyO3NwdHI9Y3B0ci1zMFwiKSx1PXQubGVuZ3RoLTE7dT49MDstLXUpMCE9PShwPXRbdV0pJiZyLnB1c2goW1wiZm9yKGlcIixwLFwiPTA7aVwiLHAsXCI8blwiLHAsXCI7KytpXCIscCxcIil7XCJdLmpvaW4oXCJcIikpO2ZvcihyLnB1c2goZihcImRwdHJcIixoKFwic3B0clwiKSkpLHU9MDt1PHQubGVuZ3RoOysrdSkwIT09KHA9dFt1XSkmJnIucHVzaChbXCJkcHRyKz1kXCIscCxcIjtzcHRyKz1kXCIscF0uam9pbihcIlwiKSxcIn1cIik7Zm9yKHIucHVzaChcImNwdHItPXMwXFxufVwiKSxyLnB1c2goXCJkcHRyPWNwdHI7c3B0cj0wXCIpLHU9dC5sZW5ndGgtMTt1Pj0wOy0tdSkwIT09KHA9dFt1XSkmJnIucHVzaChbXCJmb3IoaVwiLHAsXCI9MDtpXCIscCxcIjxuXCIscCxcIjsrK2lcIixwLFwiKXtcIl0uam9pbihcIlwiKSk7Zm9yKHIucHVzaChmKFwiZHB0clwiLFwic2NyYXRjaFtzcHRyKytdXCIpKSx1PTA7dTx0Lmxlbmd0aDsrK3Upe3ZhciBwOzAhPT0ocD10W3VdKSYmci5wdXNoKFwiZHB0cis9ZFwiK3AsXCJ9XCIpfX1lbHNlIHIucHVzaChcInNjcmF0Y2g9XCIraChcInB0clwiKSxcIndoaWxlKChqLS1cXHgzZWxlZnQpJiYoXCIraChcImNwdHItczBcIikrXCI+c2NyYXRjaCkpe1wiLGYoXCJjcHRyXCIsaChcImNwdHItczBcIikpLFwiY3B0ci09czBcIixcIn1cIixmKFwiY3B0clwiLFwic2NyYXRjaFwiKSk7cmV0dXJuIHIucHVzaChcIn1cIiksdC5sZW5ndGg+MSYmcyYmci5wdXNoKFwiZnJlZShzY3JhdGNoKVwiKSxyLnB1c2goXCJ9IHJldHVybiBcIituKSxzP25ldyBGdW5jdGlvbihcIm1hbGxvY1wiLFwiZnJlZVwiLHIuam9pbihcIlxcblwiKSkoc1swXSxzWzFdKTpuZXcgRnVuY3Rpb24oci5qb2luKFwiXFxuXCIpKSgpfSh0LGUpLHk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVtcIid1c2Ugc3RyaWN0J1wiXSxzPVtcIm5kYXJyYXlRdWlja1NvcnRcIix0LmpvaW4oXCJkXCIpLGVdLmpvaW4oXCJcIiksbD1bXCJsZWZ0XCIsXCJyaWdodFwiLFwiZGF0YVwiLFwib2Zmc2V0XCJdLmNvbmNhdChvKHQubGVuZ3RoKSksYz1hKGUpLHU9MDtuLnB1c2goW1wiZnVuY3Rpb24gXCIscyxcIihcIixsLmpvaW4oXCIsXCIpLFwiKXtcIl0uam9pbihcIlwiKSk7dmFyIGg9W1wic2l4dGg9KChyaWdodC1sZWZ0KzEpLzYpfDBcIixcImluZGV4MT1sZWZ0K3NpeHRoXCIsXCJpbmRleDU9cmlnaHQtc2l4dGhcIixcImluZGV4Mz0obGVmdCtyaWdodCk+PjFcIixcImluZGV4Mj1pbmRleDMtc2l4dGhcIixcImluZGV4ND1pbmRleDMrc2l4dGhcIixcImVsMT1pbmRleDFcIixcImVsMj1pbmRleDJcIixcImVsMz1pbmRleDNcIixcImVsND1pbmRleDRcIixcImVsNT1pbmRleDVcIixcImxlc3M9bGVmdCsxXCIsXCJncmVhdD1yaWdodC0xXCIsXCJwaXZvdHNfYXJlX2VxdWFsPXRydWVcIixcInRtcFwiLFwidG1wMFwiLFwieFwiLFwieVwiLFwielwiLFwia1wiLFwicHRyMFwiLFwicHRyMVwiLFwicHRyMlwiLFwiY29tcF9waXZvdDE9MFwiLFwiY29tcF9waXZvdDI9MFwiLFwiY29tcD0wXCJdO2lmKHQubGVuZ3RoPjEpe2Zvcih2YXIgZj1bXSxwPTE7cDx0Lmxlbmd0aDsrK3ApZi5wdXNoKFwiblwiK3ApLGgucHVzaChcImlcIitwKTtmb3IocD0wO3A8ODsrK3ApaC5wdXNoKFwiYl9wdHJcIitwKTtoLnB1c2goXCJwdHIzXCIsXCJwdHI0XCIsXCJwdHI1XCIsXCJwdHI2XCIsXCJwdHI3XCIsXCJwaXZvdF9wdHJcIixcInB0cl9zaGlmdFwiLFwiZWxlbWVudFNpemU9XCIrZi5qb2luKFwiKlwiKSksYz9oLnB1c2goXCJwaXZvdDE9bWFsbG9jKGVsZW1lbnRTaXplKVwiLFwicGl2b3QyPW1hbGxvYyhlbGVtZW50U2l6ZSlcIik6aC5wdXNoKFwicGl2b3QxPW5ldyBBcnJheShlbGVtZW50U2l6ZSkscGl2b3QyPW5ldyBBcnJheShlbGVtZW50U2l6ZSlcIil9ZWxzZSBoLnB1c2goXCJwaXZvdDFcIixcInBpdm90MlwiKTtmdW5jdGlvbiBkKHQpe3JldHVybltcIihvZmZzZXQrXCIsdCxcIipzMClcIl0uam9pbihcIlwiKX1mdW5jdGlvbiBnKHQpe3JldHVyblwiZ2VuZXJpY1wiPT09ZT9bXCJkYXRhLmdldChcIix0LFwiKVwiXS5qb2luKFwiXCIpOltcImRhdGFbXCIsdCxcIl1cIl0uam9pbihcIlwiKX1mdW5jdGlvbiB2KHQscil7cmV0dXJuXCJnZW5lcmljXCI9PT1lP1tcImRhdGEuc2V0KFwiLHQsXCIsXCIscixcIilcIl0uam9pbihcIlwiKTpbXCJkYXRhW1wiLHQsXCJdPVwiLHJdLmpvaW4oXCJcIil9ZnVuY3Rpb24gbShlLHIsaSl7aWYoMT09PWUubGVuZ3RoKW4ucHVzaChcInB0cjA9XCIrZChlWzBdKSk7ZWxzZSBmb3IodmFyIGE9MDthPGUubGVuZ3RoOysrYSluLnB1c2goW1wiYl9wdHJcIixhLFwiPXMwKlwiLGVbYV1dLmpvaW4oXCJcIikpO2ZvcihyJiZuLnB1c2goXCJwaXZvdF9wdHI9MFwiKSxuLnB1c2goXCJwdHJfc2hpZnQ9b2Zmc2V0XCIpLGE9dC5sZW5ndGgtMTthPj0wOy0tYSkwIT09KG89dFthXSkmJm4ucHVzaChbXCJmb3IoaVwiLG8sXCI9MDtpXCIsbyxcIjxuXCIsbyxcIjsrK2lcIixvLFwiKXtcIl0uam9pbihcIlwiKSk7aWYoZS5sZW5ndGg+MSlmb3IoYT0wO2E8ZS5sZW5ndGg7KythKW4ucHVzaChbXCJwdHJcIixhLFwiPWJfcHRyXCIsYSxcIitwdHJfc2hpZnRcIl0uam9pbihcIlwiKSk7Zm9yKG4ucHVzaChpKSxyJiZuLnB1c2goXCIrK3Bpdm90X3B0clwiKSxhPTA7YTx0Lmxlbmd0aDsrK2Epe3ZhciBvOzAhPT0obz10W2FdKSYmKGUubGVuZ3RoPjE/bi5wdXNoKFwicHRyX3NoaWZ0Kz1kXCIrbyk6bi5wdXNoKFwicHRyMCs9ZFwiK28pLG4ucHVzaChcIn1cIikpfX1mdW5jdGlvbiB5KGUscixpLGEpe2lmKDE9PT1yLmxlbmd0aCluLnB1c2goXCJwdHIwPVwiK2QoclswXSkpO2Vsc2V7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDsrK28pbi5wdXNoKFtcImJfcHRyXCIsbyxcIj1zMCpcIixyW29dXS5qb2luKFwiXCIpKTtuLnB1c2goXCJwdHJfc2hpZnQ9b2Zmc2V0XCIpfWZvcihpJiZuLnB1c2goXCJwaXZvdF9wdHI9MFwiKSxlJiZuLnB1c2goZStcIjpcIiksbz0xO288dC5sZW5ndGg7KytvKW4ucHVzaChbXCJmb3IoaVwiLG8sXCI9MDtpXCIsbyxcIjxuXCIsbyxcIjsrK2lcIixvLFwiKXtcIl0uam9pbihcIlwiKSk7aWYoci5sZW5ndGg+MSlmb3Iobz0wO288ci5sZW5ndGg7KytvKW4ucHVzaChbXCJwdHJcIixvLFwiPWJfcHRyXCIsbyxcIitwdHJfc2hpZnRcIl0uam9pbihcIlwiKSk7Zm9yKG4ucHVzaChhKSxvPXQubGVuZ3RoLTE7bz49MTstLW8paSYmbi5wdXNoKFwicGl2b3RfcHRyKz1mXCIrbyksci5sZW5ndGg+MT9uLnB1c2goXCJwdHJfc2hpZnQrPWVcIitvKTpuLnB1c2goXCJwdHIwKz1lXCIrbyksbi5wdXNoKFwifVwiKX1mdW5jdGlvbiB4KCl7dC5sZW5ndGg+MSYmYyYmbi5wdXNoKFwiZnJlZShwaXZvdDEpXCIsXCJmcmVlKHBpdm90MilcIil9ZnVuY3Rpb24gYihlLHIpe3ZhciBpPVwiZWxcIitlLGE9XCJlbFwiK3I7aWYodC5sZW5ndGg+MSl7dmFyIG89XCJfX2xcIisgKyt1O3kobyxbaSxhXSwhMSxbXCJjb21wPVwiLGcoXCJwdHIwXCIpLFwiLVwiLGcoXCJwdHIxXCIpLFwiXFxuXCIsXCJpZihjb21wPjApe3RtcDA9XCIsaSxcIjtcIixpLFwiPVwiLGEsXCI7XCIsYSxcIj10bXAwO2JyZWFrIFwiLG8sXCJ9XFxuXCIsXCJpZihjb21wPDApe2JyZWFrIFwiLG8sXCJ9XCJdLmpvaW4oXCJcIikpfWVsc2Ugbi5wdXNoKFtcImlmKFwiLGcoZChpKSksXCI+XCIsZyhkKGEpKSxcIil7dG1wMD1cIixpLFwiO1wiLGksXCI9XCIsYSxcIjtcIixhLFwiPXRtcDB9XCJdLmpvaW4oXCJcIikpfWZ1bmN0aW9uIF8oZSxyKXt0Lmxlbmd0aD4xP20oW2Uscl0sITEsdihcInB0cjBcIixnKFwicHRyMVwiKSkpOm4ucHVzaCh2KGQoZSksZyhkKHIpKSkpfWZ1bmN0aW9uIHcoZSxyLGkpe2lmKHQubGVuZ3RoPjEpe3ZhciBhPVwiX19sXCIrICsrdTt5KGEsW3JdLCEwLFtlLFwiPVwiLGcoXCJwdHIwXCIpLFwiLXBpdm90XCIsaSxcIltwaXZvdF9wdHJdXFxuXCIsXCJpZihcIixlLFwiIT09MCl7YnJlYWsgXCIsYSxcIn1cIl0uam9pbihcIlwiKSl9ZWxzZSBuLnB1c2goW2UsXCI9XCIsZyhkKHIpKSxcIi1waXZvdFwiLGldLmpvaW4oXCJcIikpfWZ1bmN0aW9uIGsoZSxyKXt0Lmxlbmd0aD4xP20oW2Uscl0sITEsW1widG1wPVwiLGcoXCJwdHIwXCIpLFwiXFxuXCIsdihcInB0cjBcIixnKFwicHRyMVwiKSksXCJcXG5cIix2KFwicHRyMVwiLFwidG1wXCIpXS5qb2luKFwiXCIpKTpuLnB1c2goW1wicHRyMD1cIixkKGUpLFwiXFxuXCIsXCJwdHIxPVwiLGQociksXCJcXG5cIixcInRtcD1cIixnKFwicHRyMFwiKSxcIlxcblwiLHYoXCJwdHIwXCIsZyhcInB0cjFcIikpLFwiXFxuXCIsdihcInB0cjFcIixcInRtcFwiKV0uam9pbihcIlwiKSl9ZnVuY3Rpb24gQShlLHIsaSl7dC5sZW5ndGg+MT8obShbZSxyLGldLCExLFtcInRtcD1cIixnKFwicHRyMFwiKSxcIlxcblwiLHYoXCJwdHIwXCIsZyhcInB0cjFcIikpLFwiXFxuXCIsdihcInB0cjFcIixnKFwicHRyMlwiKSksXCJcXG5cIix2KFwicHRyMlwiLFwidG1wXCIpXS5qb2luKFwiXCIpKSxuLnB1c2goXCIrK1wiK3IsXCItLVwiK2kpKTpuLnB1c2goW1wicHRyMD1cIixkKGUpLFwiXFxuXCIsXCJwdHIxPVwiLGQociksXCJcXG5cIixcInB0cjI9XCIsZChpKSxcIlxcblwiLFwiKytcIixyLFwiXFxuXCIsXCItLVwiLGksXCJcXG5cIixcInRtcD1cIixnKFwicHRyMFwiKSxcIlxcblwiLHYoXCJwdHIwXCIsZyhcInB0cjFcIikpLFwiXFxuXCIsdihcInB0cjFcIixnKFwicHRyMlwiKSksXCJcXG5cIix2KFwicHRyMlwiLFwidG1wXCIpXS5qb2luKFwiXCIpKX1mdW5jdGlvbiBUKHQsZSl7ayh0LGUpLG4ucHVzaChcIi0tXCIrZSl9ZnVuY3Rpb24gTShlLHIsaSl7dC5sZW5ndGg+MT9tKFtlLHJdLCEwLFt2KFwicHRyMFwiLGcoXCJwdHIxXCIpKSxcIlxcblwiLHYoXCJwdHIxXCIsW1wicGl2b3RcIixpLFwiW3Bpdm90X3B0cl1cIl0uam9pbihcIlwiKSldLmpvaW4oXCJcIikpOm4ucHVzaCh2KGQoZSksZyhkKHIpKSksdihkKHIpLFwicGl2b3RcIitpKSl9ZnVuY3Rpb24gUyhlLHIpe24ucHVzaChbXCJpZigoXCIscixcIi1cIixlLFwiKTw9XCIsaSxcIil7XFxuXCIsXCJpbnNlcnRpb25Tb3J0KFwiLGUsXCIsXCIscixcIixkYXRhLG9mZnNldCxcIixvKHQubGVuZ3RoKS5qb2luKFwiLFwiKSxcIilcXG5cIixcIn1lbHNle1xcblwiLHMsXCIoXCIsZSxcIixcIixyLFwiLGRhdGEsb2Zmc2V0LFwiLG8odC5sZW5ndGgpLmpvaW4oXCIsXCIpLFwiKVxcblwiLFwifVwiXS5qb2luKFwiXCIpKX1mdW5jdGlvbiBFKGUscixpKXt0Lmxlbmd0aD4xPyhuLnB1c2goW1wiX19sXCIsKyt1LFwiOndoaWxlKHRydWUpe1wiXS5qb2luKFwiXCIpKSxtKFtlXSwhMCxbXCJpZihcIixnKFwicHRyMFwiKSxcIiE9PXBpdm90XCIscixcIltwaXZvdF9wdHJdKXticmVhayBfX2xcIix1LFwifVwiXS5qb2luKFwiXCIpKSxuLnB1c2goaSxcIn1cIikpOm4ucHVzaChbXCJ3aGlsZShcIixnKGQoZSkpLFwiPT09cGl2b3RcIixyLFwiKXtcIixpLFwifVwiXS5qb2luKFwiXCIpKX1yZXR1cm4gbi5wdXNoKFwidmFyIFwiK2guam9pbihcIixcIikpLGIoMSwyKSxiKDQsNSksYigxLDMpLGIoMiwzKSxiKDEsNCksYigzLDQpLGIoMiw1KSxiKDIsMyksYig0LDUpLHQubGVuZ3RoPjE/bShbXCJlbDFcIixcImVsMlwiLFwiZWwzXCIsXCJlbDRcIixcImVsNVwiLFwiaW5kZXgxXCIsXCJpbmRleDNcIixcImluZGV4NVwiXSwhMCxbXCJwaXZvdDFbcGl2b3RfcHRyXT1cIixnKFwicHRyMVwiKSxcIlxcblwiLFwicGl2b3QyW3Bpdm90X3B0cl09XCIsZyhcInB0cjNcIiksXCJcXG5cIixcInBpdm90c19hcmVfZXF1YWw9cGl2b3RzX2FyZV9lcXVhbCYmKHBpdm90MVtwaXZvdF9wdHJdPT09cGl2b3QyW3Bpdm90X3B0cl0pXFxuXCIsXCJ4PVwiLGcoXCJwdHIwXCIpLFwiXFxuXCIsXCJ5PVwiLGcoXCJwdHIyXCIpLFwiXFxuXCIsXCJ6PVwiLGcoXCJwdHI0XCIpLFwiXFxuXCIsdihcInB0cjVcIixcInhcIiksXCJcXG5cIix2KFwicHRyNlwiLFwieVwiKSxcIlxcblwiLHYoXCJwdHI3XCIsXCJ6XCIpXS5qb2luKFwiXCIpKTpuLnB1c2goW1wicGl2b3QxPVwiLGcoZChcImVsMlwiKSksXCJcXG5cIixcInBpdm90Mj1cIixnKGQoXCJlbDRcIikpLFwiXFxuXCIsXCJwaXZvdHNfYXJlX2VxdWFsPXBpdm90MT09PXBpdm90MlxcblwiLFwieD1cIixnKGQoXCJlbDFcIikpLFwiXFxuXCIsXCJ5PVwiLGcoZChcImVsM1wiKSksXCJcXG5cIixcIno9XCIsZyhkKFwiZWw1XCIpKSxcIlxcblwiLHYoZChcImluZGV4MVwiKSxcInhcIiksXCJcXG5cIix2KGQoXCJpbmRleDNcIiksXCJ5XCIpLFwiXFxuXCIsdihkKFwiaW5kZXg1XCIpLFwielwiKV0uam9pbihcIlwiKSksXyhcImluZGV4MlwiLFwibGVmdFwiKSxfKFwiaW5kZXg0XCIsXCJyaWdodFwiKSxuLnB1c2goXCJpZihwaXZvdHNfYXJlX2VxdWFsKXtcIiksbi5wdXNoKFwiZm9yKGs9bGVzcztrPD1ncmVhdDsrK2spe1wiKSx3KFwiY29tcFwiLFwia1wiLDEpLG4ucHVzaChcImlmKGNvbXA9PT0wKXtjb250aW51ZX1cIiksbi5wdXNoKFwiaWYoY29tcDwwKXtcIiksbi5wdXNoKFwiaWYoayE9PWxlc3Mpe1wiKSxrKFwia1wiLFwibGVzc1wiKSxuLnB1c2goXCJ9XCIpLG4ucHVzaChcIisrbGVzc1wiKSxuLnB1c2goXCJ9ZWxzZXtcIiksbi5wdXNoKFwid2hpbGUodHJ1ZSl7XCIpLHcoXCJjb21wXCIsXCJncmVhdFwiLDEpLG4ucHVzaChcImlmKGNvbXA+MCl7XCIpLG4ucHVzaChcImdyZWF0LS1cIiksbi5wdXNoKFwifWVsc2UgaWYoY29tcDwwKXtcIiksQShcImtcIixcImxlc3NcIixcImdyZWF0XCIpLG4ucHVzaChcImJyZWFrXCIpLG4ucHVzaChcIn1lbHNle1wiKSxUKFwia1wiLFwiZ3JlYXRcIiksbi5wdXNoKFwiYnJlYWtcIiksbi5wdXNoKFwifVwiKSxuLnB1c2goXCJ9XCIpLG4ucHVzaChcIn1cIiksbi5wdXNoKFwifVwiKSxuLnB1c2goXCJ9ZWxzZXtcIiksbi5wdXNoKFwiZm9yKGs9bGVzcztrPD1ncmVhdDsrK2spe1wiKSx3KFwiY29tcF9waXZvdDFcIixcImtcIiwxKSxuLnB1c2goXCJpZihjb21wX3Bpdm90MTwwKXtcIiksbi5wdXNoKFwiaWYoayE9PWxlc3Mpe1wiKSxrKFwia1wiLFwibGVzc1wiKSxuLnB1c2goXCJ9XCIpLG4ucHVzaChcIisrbGVzc1wiKSxuLnB1c2goXCJ9ZWxzZXtcIiksdyhcImNvbXBfcGl2b3QyXCIsXCJrXCIsMiksbi5wdXNoKFwiaWYoY29tcF9waXZvdDI+MCl7XCIpLG4ucHVzaChcIndoaWxlKHRydWUpe1wiKSx3KFwiY29tcFwiLFwiZ3JlYXRcIiwyKSxuLnB1c2goXCJpZihjb21wPjApe1wiKSxuLnB1c2goXCJpZigtLWdyZWF0PGspe2JyZWFrfVwiKSxuLnB1c2goXCJjb250aW51ZVwiKSxuLnB1c2goXCJ9ZWxzZXtcIiksdyhcImNvbXBcIixcImdyZWF0XCIsMSksbi5wdXNoKFwiaWYoY29tcDwwKXtcIiksQShcImtcIixcImxlc3NcIixcImdyZWF0XCIpLG4ucHVzaChcIn1lbHNle1wiKSxUKFwia1wiLFwiZ3JlYXRcIiksbi5wdXNoKFwifVwiKSxuLnB1c2goXCJicmVha1wiKSxuLnB1c2goXCJ9XCIpLG4ucHVzaChcIn1cIiksbi5wdXNoKFwifVwiKSxuLnB1c2goXCJ9XCIpLG4ucHVzaChcIn1cIiksbi5wdXNoKFwifVwiKSxNKFwibGVmdFwiLFwiKGxlc3MtMSlcIiwxKSxNKFwicmlnaHRcIixcIihncmVhdCsxKVwiLDIpLFMoXCJsZWZ0XCIsXCIobGVzcy0yKVwiKSxTKFwiKGdyZWF0KzIpXCIsXCJyaWdodFwiKSxuLnB1c2goXCJpZihwaXZvdHNfYXJlX2VxdWFsKXtcIikseCgpLG4ucHVzaChcInJldHVyblwiKSxuLnB1c2goXCJ9XCIpLG4ucHVzaChcImlmKGxlc3M8aW5kZXgxJiZncmVhdD5pbmRleDUpe1wiKSxFKFwibGVzc1wiLDEsXCIrK2xlc3NcIiksRShcImdyZWF0XCIsMixcIi0tZ3JlYXRcIiksbi5wdXNoKFwiZm9yKGs9bGVzcztrPD1ncmVhdDsrK2spe1wiKSx3KFwiY29tcF9waXZvdDFcIixcImtcIiwxKSxuLnB1c2goXCJpZihjb21wX3Bpdm90MT09PTApe1wiKSxuLnB1c2goXCJpZihrIT09bGVzcyl7XCIpLGsoXCJrXCIsXCJsZXNzXCIpLG4ucHVzaChcIn1cIiksbi5wdXNoKFwiKytsZXNzXCIpLG4ucHVzaChcIn1lbHNle1wiKSx3KFwiY29tcF9waXZvdDJcIixcImtcIiwyKSxuLnB1c2goXCJpZihjb21wX3Bpdm90Mj09PTApe1wiKSxuLnB1c2goXCJ3aGlsZSh0cnVlKXtcIiksdyhcImNvbXBcIixcImdyZWF0XCIsMiksbi5wdXNoKFwiaWYoY29tcD09PTApe1wiKSxuLnB1c2goXCJpZigtLWdyZWF0PGspe2JyZWFrfVwiKSxuLnB1c2goXCJjb250aW51ZVwiKSxuLnB1c2goXCJ9ZWxzZXtcIiksdyhcImNvbXBcIixcImdyZWF0XCIsMSksbi5wdXNoKFwiaWYoY29tcDwwKXtcIiksQShcImtcIixcImxlc3NcIixcImdyZWF0XCIpLG4ucHVzaChcIn1lbHNle1wiKSxUKFwia1wiLFwiZ3JlYXRcIiksbi5wdXNoKFwifVwiKSxuLnB1c2goXCJicmVha1wiKSxuLnB1c2goXCJ9XCIpLG4ucHVzaChcIn1cIiksbi5wdXNoKFwifVwiKSxuLnB1c2goXCJ9XCIpLG4ucHVzaChcIn1cIiksbi5wdXNoKFwifVwiKSx4KCksUyhcImxlc3NcIixcImdyZWF0XCIpLG4ucHVzaChcIn1yZXR1cm4gXCIrcyksdC5sZW5ndGg+MSYmYz9uZXcgRnVuY3Rpb24oXCJpbnNlcnRpb25Tb3J0XCIsXCJtYWxsb2NcIixcImZyZWVcIixuLmpvaW4oXCJcXG5cIikpKHIsY1swXSxjWzFdKTpuZXcgRnVuY3Rpb24oXCJpbnNlcnRpb25Tb3J0XCIsbi5qb2luKFwiXFxuXCIpKShyKX0odCxlLG0pO3JldHVybiB2KG0seSl9fSx7XCJ0eXBlZGFycmF5LXBvb2xcIjo1MzB9XSw0NDE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9saWIvY29tcGlsZV9zb3J0LmpzXCIpLGk9e307ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQub3JkZXIscj10LmR0eXBlLGE9W2Uscl0uam9pbihcIjpcIiksbz1pW2FdO3JldHVybiBvfHwoaVthXT1vPW4oZSxyKSksbyh0KSx0fX0se1wiLi9saWIvY29tcGlsZV9zb3J0LmpzXCI6NDQwfV0sNDQyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIm5kYXJyYXktbGluZWFyLWludGVycG9sYXRlXCIpLGk9dChcImN3aXNlL2xpYi93cmFwcGVyXCIpKHthcmdzOltcImluZGV4XCIsXCJhcnJheVwiLFwic2NhbGFyXCIsXCJzY2FsYXJcIixcInNjYWxhclwiXSxwcmU6e2JvZHk6XCJ7dGhpc193YXJwZWQ9bmV3IEFycmF5KF9pbmxpbmVfM19hcmc0Xyl9XCIsYXJnczpbe25hbWU6XCJfaW5saW5lXzNfYXJnMF9cIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOlwiX2lubGluZV8zX2FyZzFfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZTpcIl9pbmxpbmVfM19hcmcyX1wiLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6XCJfaW5saW5lXzNfYXJnM19cIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOlwiX2lubGluZV8zX2FyZzRfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sdGhpc1ZhcnM6W1widGhpc193YXJwZWRcIl0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5Olwie19pbmxpbmVfNF9hcmcyXyh0aGlzX3dhcnBlZCxfaW5saW5lXzRfYXJnMF8pLF9pbmxpbmVfNF9hcmcxXz1faW5saW5lXzRfYXJnM18uYXBwbHkodm9pZCAwLHRoaXNfd2FycGVkKX1cIixhcmdzOlt7bmFtZTpcIl9pbmxpbmVfNF9hcmcwX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzRfYXJnMV9cIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV80X2FyZzJfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfNF9hcmczX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzRfYXJnNF9cIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9XSx0aGlzVmFyczpbXCJ0aGlzX3dhcnBlZFwiXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6XCJ7fVwiLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxkZWJ1ZzohMSxmdW5jTmFtZTpcIndhcnBORFwiLGJsb2NrU2l6ZTo2NH0pLGE9dChcImN3aXNlL2xpYi93cmFwcGVyXCIpKHthcmdzOltcImluZGV4XCIsXCJhcnJheVwiLFwic2NhbGFyXCIsXCJzY2FsYXJcIixcInNjYWxhclwiXSxwcmU6e2JvZHk6XCJ7dGhpc193YXJwZWQ9WzBdfVwiLGFyZ3M6W10sdGhpc1ZhcnM6W1widGhpc193YXJwZWRcIl0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5Olwie19pbmxpbmVfN19hcmcyXyh0aGlzX3dhcnBlZCxfaW5saW5lXzdfYXJnMF8pLF9pbmxpbmVfN19hcmcxXz1faW5saW5lXzdfYXJnM18oX2lubGluZV83X2FyZzRfLHRoaXNfd2FycGVkWzBdKX1cIixhcmdzOlt7bmFtZTpcIl9pbmxpbmVfN19hcmcwX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzdfYXJnMV9cIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV83X2FyZzJfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfN19hcmczX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzdfYXJnNF9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbXCJ0aGlzX3dhcnBlZFwiXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6XCJ7fVwiLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxkZWJ1ZzohMSxmdW5jTmFtZTpcIndhcnAxRFwiLGJsb2NrU2l6ZTo2NH0pLG89dChcImN3aXNlL2xpYi93cmFwcGVyXCIpKHthcmdzOltcImluZGV4XCIsXCJhcnJheVwiLFwic2NhbGFyXCIsXCJzY2FsYXJcIixcInNjYWxhclwiXSxwcmU6e2JvZHk6XCJ7dGhpc193YXJwZWQ9WzAsMF19XCIsYXJnczpbXSx0aGlzVmFyczpbXCJ0aGlzX3dhcnBlZFwiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6XCJ7X2lubGluZV8xMF9hcmcyXyh0aGlzX3dhcnBlZCxfaW5saW5lXzEwX2FyZzBfKSxfaW5saW5lXzEwX2FyZzFfPV9pbmxpbmVfMTBfYXJnM18oX2lubGluZV8xMF9hcmc0Xyx0aGlzX3dhcnBlZFswXSx0aGlzX3dhcnBlZFsxXSl9XCIsYXJnczpbe25hbWU6XCJfaW5saW5lXzEwX2FyZzBfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfMTBfYXJnMV9cIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xMF9hcmcyX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzEwX2FyZzNfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfMTBfYXJnNF9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbXCJ0aGlzX3dhcnBlZFwiXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6XCJ7fVwiLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxkZWJ1ZzohMSxmdW5jTmFtZTpcIndhcnAyRFwiLGJsb2NrU2l6ZTo2NH0pLHM9dChcImN3aXNlL2xpYi93cmFwcGVyXCIpKHthcmdzOltcImluZGV4XCIsXCJhcnJheVwiLFwic2NhbGFyXCIsXCJzY2FsYXJcIixcInNjYWxhclwiXSxwcmU6e2JvZHk6XCJ7dGhpc193YXJwZWQ9WzAsMCwwXX1cIixhcmdzOltdLHRoaXNWYXJzOltcInRoaXNfd2FycGVkXCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keTpcIntfaW5saW5lXzEzX2FyZzJfKHRoaXNfd2FycGVkLF9pbmxpbmVfMTNfYXJnMF8pLF9pbmxpbmVfMTNfYXJnMV89X2lubGluZV8xM19hcmczXyhfaW5saW5lXzEzX2FyZzRfLHRoaXNfd2FycGVkWzBdLHRoaXNfd2FycGVkWzFdLHRoaXNfd2FycGVkWzJdKX1cIixhcmdzOlt7bmFtZTpcIl9pbmxpbmVfMTNfYXJnMF9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xM19hcmcxX1wiLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzEzX2FyZzJfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfMTNfYXJnM19cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xM19hcmc0X1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOltcInRoaXNfd2FycGVkXCJdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keTpcInt9XCIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGRlYnVnOiExLGZ1bmNOYW1lOlwid2FycDNEXCIsYmxvY2tTaXplOjY0fSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtzd2l0Y2goZS5zaGFwZS5sZW5ndGgpe2Nhc2UgMTphKHQscixuLmQxLGUpO2JyZWFrO2Nhc2UgMjpvKHQscixuLmQyLGUpO2JyZWFrO2Nhc2UgMzpzKHQscixuLmQzLGUpO2JyZWFrO2RlZmF1bHQ6aSh0LHIsbi5iaW5kKHZvaWQgMCxlKSxlLnNoYXBlLmxlbmd0aCl9cmV0dXJuIHR9fSx7XCJjd2lzZS9saWIvd3JhcHBlclwiOjE0MCxcIm5kYXJyYXktbGluZWFyLWludGVycG9sYXRlXCI6NDM2fV0sNDQzOltmdW5jdGlvbih0LGUscil7dmFyIG49dChcImlvdGEtYXJyYXlcIiksaT10KFwiaXMtYnVmZmVyXCIpLGE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIEZsb2F0NjRBcnJheTtmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHRbMF0tZVswXX1mdW5jdGlvbiBzKCl7dmFyIHQsZT10aGlzLnN0cmlkZSxyPW5ldyBBcnJheShlLmxlbmd0aCk7Zm9yKHQ9MDt0PHIubGVuZ3RoOysrdClyW3RdPVtNYXRoLmFicyhlW3RdKSx0XTtyLnNvcnQobyk7dmFyIG49bmV3IEFycmF5KHIubGVuZ3RoKTtmb3IodD0wO3Q8bi5sZW5ndGg7Kyt0KW5bdF09clt0XVsxXTtyZXR1cm4gbn1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9W1wiVmlld1wiLGUsXCJkXCIsdF0uam9pbihcIlwiKTtlPDAmJihyPVwiVmlld19OaWxcIit0KTt2YXIgaT1cImdlbmVyaWNcIj09PXQ7aWYoLTE9PT1lKXt2YXIgYT1cImZ1bmN0aW9uIFwiK3IrXCIoYSl7dGhpcy5kYXRhPWE7fTt2YXIgcHJvdG89XCIrcitcIi5wcm90b3R5cGU7cHJvdG8uZHR5cGU9J1wiK3QrXCInO3Byb3RvLmluZGV4PWZ1bmN0aW9uKCl7cmV0dXJuIC0xfTtwcm90by5zaXplPTA7cHJvdG8uZGltZW5zaW9uPS0xO3Byb3RvLnNoYXBlPXByb3RvLnN0cmlkZT1wcm90by5vcmRlcj1bXTtwcm90by5sbz1wcm90by5oaT1wcm90by50cmFuc3Bvc2U9cHJvdG8uc3RlcD1mdW5jdGlvbigpe3JldHVybiBuZXcgXCIrcitcIih0aGlzLmRhdGEpO307cHJvdG8uZ2V0PXByb3RvLnNldD1mdW5jdGlvbigpe307cHJvdG8ucGljaz1mdW5jdGlvbigpe3JldHVybiBudWxsfTtyZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0X1wiK3IrXCIoYSl7cmV0dXJuIG5ldyBcIityK1wiKGEpO31cIjtyZXR1cm4gbmV3IEZ1bmN0aW9uKGEpKCl9aWYoMD09PWUpe2E9XCJmdW5jdGlvbiBcIityK1wiKGEsZCkge3RoaXMuZGF0YSA9IGE7dGhpcy5vZmZzZXQgPSBkfTt2YXIgcHJvdG89XCIrcitcIi5wcm90b3R5cGU7cHJvdG8uZHR5cGU9J1wiK3QrXCInO3Byb3RvLmluZGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2Zmc2V0fTtwcm90by5kaW1lbnNpb249MDtwcm90by5zaXplPTE7cHJvdG8uc2hhcGU9cHJvdG8uc3RyaWRlPXByb3RvLm9yZGVyPVtdO3Byb3RvLmxvPXByb3RvLmhpPXByb3RvLnRyYW5zcG9zZT1wcm90by5zdGVwPWZ1bmN0aW9uIFwiK3IrXCJfY29weSgpIHtyZXR1cm4gbmV3IFwiK3IrXCIodGhpcy5kYXRhLHRoaXMub2Zmc2V0KX07cHJvdG8ucGljaz1mdW5jdGlvbiBcIityK1wiX3BpY2soKXtyZXR1cm4gVHJpdmlhbEFycmF5KHRoaXMuZGF0YSk7fTtwcm90by52YWx1ZU9mPXByb3RvLmdldD1mdW5jdGlvbiBcIityK1wiX2dldCgpe3JldHVybiBcIisoaT9cInRoaXMuZGF0YS5nZXQodGhpcy5vZmZzZXQpXCI6XCJ0aGlzLmRhdGFbdGhpcy5vZmZzZXRdXCIpK1wifTtwcm90by5zZXQ9ZnVuY3Rpb24gXCIrcitcIl9zZXQodil7cmV0dXJuIFwiKyhpP1widGhpcy5kYXRhLnNldCh0aGlzLm9mZnNldCx2KVwiOlwidGhpcy5kYXRhW3RoaXMub2Zmc2V0XT12XCIpK1wifTtyZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0X1wiK3IrXCIoYSxiLGMsZCl7cmV0dXJuIG5ldyBcIityK1wiKGEsZCl9XCI7cmV0dXJuIG5ldyBGdW5jdGlvbihcIlRyaXZpYWxBcnJheVwiLGEpKGNbdF1bMF0pfWE9W1wiJ3VzZSBzdHJpY3QnXCJdO3ZhciBvPW4oZSksbD1vLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cImlcIit0fSksdT1cInRoaXMub2Zmc2V0K1wiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwidGhpcy5zdHJpZGVbXCIrdCtcIl0qaVwiK3R9KS5qb2luKFwiK1wiKSxoPW8ubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiYlwiK3R9KS5qb2luKFwiLFwiKSxmPW8ubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiY1wiK3R9KS5qb2luKFwiLFwiKTthLnB1c2goXCJmdW5jdGlvbiBcIityK1wiKGEsXCIraCtcIixcIitmK1wiLGQpe3RoaXMuZGF0YT1hXCIsXCJ0aGlzLnNoYXBlPVtcIitoK1wiXVwiLFwidGhpcy5zdHJpZGU9W1wiK2YrXCJdXCIsXCJ0aGlzLm9mZnNldD1kfDB9XCIsXCJ2YXIgcHJvdG89XCIrcitcIi5wcm90b3R5cGVcIixcInByb3RvLmR0eXBlPSdcIit0K1wiJ1wiLFwicHJvdG8uZGltZW5zaW9uPVwiK2UpLGEucHVzaChcIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywnc2l6ZScse2dldDpmdW5jdGlvbiBcIityK1wiX3NpemUoKXtyZXR1cm4gXCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJ0aGlzLnNoYXBlW1wiK3QrXCJdXCJ9KS5qb2luKFwiKlwiKSxcIn19KVwiKSwxPT09ZT9hLnB1c2goXCJwcm90by5vcmRlcj1bMF1cIik6KGEucHVzaChcIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywnb3JkZXInLHtnZXQ6XCIpLGU8ND8oYS5wdXNoKFwiZnVuY3Rpb24gXCIrcitcIl9vcmRlcigpe1wiKSwyPT09ZT9hLnB1c2goXCJyZXR1cm4gKE1hdGguYWJzKHRoaXMuc3RyaWRlWzBdKT5NYXRoLmFicyh0aGlzLnN0cmlkZVsxXSkpP1sxLDBdOlswLDFdfX0pXCIpOjM9PT1lJiZhLnB1c2goXCJ2YXIgczA9TWF0aC5hYnModGhpcy5zdHJpZGVbMF0pLHMxPU1hdGguYWJzKHRoaXMuc3RyaWRlWzFdKSxzMj1NYXRoLmFicyh0aGlzLnN0cmlkZVsyXSk7aWYoczA+czEpe2lmKHMxPnMyKXtyZXR1cm4gWzIsMSwwXTt9ZWxzZSBpZihzMD5zMil7cmV0dXJuIFsxLDIsMF07fWVsc2V7cmV0dXJuIFsxLDAsMl07fX1lbHNlIGlmKHMwPnMyKXtyZXR1cm4gWzIsMCwxXTt9ZWxzZSBpZihzMj5zMSl7cmV0dXJuIFswLDEsMl07fWVsc2V7cmV0dXJuIFswLDIsMV07fX19KVwiKSk6YS5wdXNoKFwiT1JERVJ9KVwiKSksYS5wdXNoKFwicHJvdG8uc2V0PWZ1bmN0aW9uIFwiK3IrXCJfc2V0KFwiK2wuam9pbihcIixcIikrXCIsdil7XCIpLGk/YS5wdXNoKFwicmV0dXJuIHRoaXMuZGF0YS5zZXQoXCIrdStcIix2KX1cIik6YS5wdXNoKFwicmV0dXJuIHRoaXMuZGF0YVtcIit1K1wiXT12fVwiKSxhLnB1c2goXCJwcm90by5nZXQ9ZnVuY3Rpb24gXCIrcitcIl9nZXQoXCIrbC5qb2luKFwiLFwiKStcIil7XCIpLGk/YS5wdXNoKFwicmV0dXJuIHRoaXMuZGF0YS5nZXQoXCIrdStcIil9XCIpOmEucHVzaChcInJldHVybiB0aGlzLmRhdGFbXCIrdStcIl19XCIpLGEucHVzaChcInByb3RvLmluZGV4PWZ1bmN0aW9uIFwiK3IrXCJfaW5kZXgoXCIsbC5qb2luKCksXCIpe3JldHVybiBcIit1K1wifVwiKSxhLnB1c2goXCJwcm90by5oaT1mdW5jdGlvbiBcIityK1wiX2hpKFwiK2wuam9pbihcIixcIikrXCIpe3JldHVybiBuZXcgXCIrcitcIih0aGlzLmRhdGEsXCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW1wiKHR5cGVvZiBpXCIsdCxcIiE9PSdudW1iZXInfHxpXCIsdCxcIjwwKT90aGlzLnNoYXBlW1wiLHQsXCJdOmlcIix0LFwifDBcIl0uam9pbihcIlwiKX0pLmpvaW4oXCIsXCIpK1wiLFwiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwidGhpcy5zdHJpZGVbXCIrdCtcIl1cIn0pLmpvaW4oXCIsXCIpK1wiLHRoaXMub2Zmc2V0KX1cIik7dmFyIHA9by5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJhXCIrdCtcIj10aGlzLnNoYXBlW1wiK3QrXCJdXCJ9KSxkPW8ubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiY1wiK3QrXCI9dGhpcy5zdHJpZGVbXCIrdCtcIl1cIn0pO2EucHVzaChcInByb3RvLmxvPWZ1bmN0aW9uIFwiK3IrXCJfbG8oXCIrbC5qb2luKFwiLFwiKStcIil7dmFyIGI9dGhpcy5vZmZzZXQsZD0wLFwiK3Auam9pbihcIixcIikrXCIsXCIrZC5qb2luKFwiLFwiKSk7Zm9yKHZhciBnPTA7ZzxlOysrZylhLnB1c2goXCJpZih0eXBlb2YgaVwiK2crXCI9PT0nbnVtYmVyJyYmaVwiK2crXCI+PTApe2Q9aVwiK2crXCJ8MDtiKz1jXCIrZytcIipkO2FcIitnK1wiLT1kfVwiKTthLnB1c2goXCJyZXR1cm4gbmV3IFwiK3IrXCIodGhpcy5kYXRhLFwiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiYVwiK3R9KS5qb2luKFwiLFwiKStcIixcIitvLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cImNcIit0fSkuam9pbihcIixcIikrXCIsYil9XCIpLGEucHVzaChcInByb3RvLnN0ZXA9ZnVuY3Rpb24gXCIrcitcIl9zdGVwKFwiK2wuam9pbihcIixcIikrXCIpe3ZhciBcIitvLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cImFcIit0K1wiPXRoaXMuc2hhcGVbXCIrdCtcIl1cIn0pLmpvaW4oXCIsXCIpK1wiLFwiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiYlwiK3QrXCI9dGhpcy5zdHJpZGVbXCIrdCtcIl1cIn0pLmpvaW4oXCIsXCIpK1wiLGM9dGhpcy5vZmZzZXQsZD0wLGNlaWw9TWF0aC5jZWlsXCIpO2ZvcihnPTA7ZzxlOysrZylhLnB1c2goXCJpZih0eXBlb2YgaVwiK2crXCI9PT0nbnVtYmVyJyl7ZD1pXCIrZytcInwwO2lmKGQ8MCl7Yys9YlwiK2crXCIqKGFcIitnK1wiLTEpO2FcIitnK1wiPWNlaWwoLWFcIitnK1wiL2QpfWVsc2V7YVwiK2crXCI9Y2VpbChhXCIrZytcIi9kKX1iXCIrZytcIio9ZH1cIik7YS5wdXNoKFwicmV0dXJuIG5ldyBcIityK1wiKHRoaXMuZGF0YSxcIitvLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cImFcIit0fSkuam9pbihcIixcIikrXCIsXCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJiXCIrdH0pLmpvaW4oXCIsXCIpK1wiLGMpfVwiKTt2YXIgdj1uZXcgQXJyYXkoZSksbT1uZXcgQXJyYXkoZSk7Zm9yKGc9MDtnPGU7KytnKXZbZ109XCJhW2lcIitnK1wiXVwiLG1bZ109XCJiW2lcIitnK1wiXVwiO2EucHVzaChcInByb3RvLnRyYW5zcG9zZT1mdW5jdGlvbiBcIityK1wiX3RyYW5zcG9zZShcIitsK1wiKXtcIitsLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0K1wiPShcIit0K1wiPT09dW5kZWZpbmVkP1wiK2UrXCI6XCIrdCtcInwwKVwifSkuam9pbihcIjtcIiksXCJ2YXIgYT10aGlzLnNoYXBlLGI9dGhpcy5zdHJpZGU7cmV0dXJuIG5ldyBcIityK1wiKHRoaXMuZGF0YSxcIit2LmpvaW4oXCIsXCIpK1wiLFwiK20uam9pbihcIixcIikrXCIsdGhpcy5vZmZzZXQpfVwiKSxhLnB1c2goXCJwcm90by5waWNrPWZ1bmN0aW9uIFwiK3IrXCJfcGljayhcIitsK1wiKXt2YXIgYT1bXSxiPVtdLGM9dGhpcy5vZmZzZXRcIik7Zm9yKGc9MDtnPGU7KytnKWEucHVzaChcImlmKHR5cGVvZiBpXCIrZytcIj09PSdudW1iZXInJiZpXCIrZytcIj49MCl7Yz0oYyt0aGlzLnN0cmlkZVtcIitnK1wiXSppXCIrZytcIil8MH1lbHNle2EucHVzaCh0aGlzLnNoYXBlW1wiK2crXCJdKTtiLnB1c2godGhpcy5zdHJpZGVbXCIrZytcIl0pfVwiKTtyZXR1cm4gYS5wdXNoKFwidmFyIGN0b3I9Q1RPUl9MSVNUW2EubGVuZ3RoKzFdO3JldHVybiBjdG9yKHRoaXMuZGF0YSxhLGIsYyl9XCIpLGEucHVzaChcInJldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RfXCIrcitcIihkYXRhLHNoYXBlLHN0cmlkZSxvZmZzZXQpe3JldHVybiBuZXcgXCIrcitcIihkYXRhLFwiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwic2hhcGVbXCIrdCtcIl1cIn0pLmpvaW4oXCIsXCIpK1wiLFwiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwic3RyaWRlW1wiK3QrXCJdXCJ9KS5qb2luKFwiLFwiKStcIixvZmZzZXQpfVwiKSxuZXcgRnVuY3Rpb24oXCJDVE9SX0xJU1RcIixcIk9SREVSXCIsYS5qb2luKFwiXFxuXCIpKShjW3RdLHMpfXZhciBjPXtmbG9hdDMyOltdLGZsb2F0NjQ6W10saW50ODpbXSxpbnQxNjpbXSxpbnQzMjpbXSx1aW50ODpbXSx1aW50MTY6W10sdWludDMyOltdLGFycmF5OltdLHVpbnQ4X2NsYW1wZWQ6W10sYnVmZmVyOltdLGdlbmVyaWM6W119O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtpZih2b2lkIDA9PT10KXJldHVybigwLGMuYXJyYXlbMF0pKFtdKTtcIm51bWJlclwiPT10eXBlb2YgdCYmKHQ9W3RdKSx2b2lkIDA9PT1lJiYoZT1bdC5sZW5ndGhdKTt2YXIgbz1lLmxlbmd0aDtpZih2b2lkIDA9PT1yKXtyPW5ldyBBcnJheShvKTtmb3IodmFyIHM9by0xLHU9MTtzPj0wOy0tcylyW3NdPXUsdSo9ZVtzXX1pZih2b2lkIDA9PT1uKWZvcihuPTAscz0wO3M8bzsrK3MpcltzXTwwJiYobi09KGVbc10tMSkqcltzXSk7Zm9yKHZhciBoPWZ1bmN0aW9uKHQpe2lmKGkodCkpcmV0dXJuXCJidWZmZXJcIjtpZihhKXN3aXRjaChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpe2Nhc2VcIltvYmplY3QgRmxvYXQ2NEFycmF5XVwiOnJldHVyblwiZmxvYXQ2NFwiO2Nhc2VcIltvYmplY3QgRmxvYXQzMkFycmF5XVwiOnJldHVyblwiZmxvYXQzMlwiO2Nhc2VcIltvYmplY3QgSW50OEFycmF5XVwiOnJldHVyblwiaW50OFwiO2Nhc2VcIltvYmplY3QgSW50MTZBcnJheV1cIjpyZXR1cm5cImludDE2XCI7Y2FzZVwiW29iamVjdCBJbnQzMkFycmF5XVwiOnJldHVyblwiaW50MzJcIjtjYXNlXCJbb2JqZWN0IFVpbnQ4QXJyYXldXCI6cmV0dXJuXCJ1aW50OFwiO2Nhc2VcIltvYmplY3QgVWludDE2QXJyYXldXCI6cmV0dXJuXCJ1aW50MTZcIjtjYXNlXCJbb2JqZWN0IFVpbnQzMkFycmF5XVwiOnJldHVyblwidWludDMyXCI7Y2FzZVwiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV1cIjpyZXR1cm5cInVpbnQ4X2NsYW1wZWRcIn1yZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9cImFycmF5XCI6XCJnZW5lcmljXCJ9KHQpLGY9Y1toXTtmLmxlbmd0aDw9bysxOylmLnB1c2gobChoLGYubGVuZ3RoLTEpKTtyZXR1cm4oMCxmW28rMV0pKHQsZSxyLG4pfX0se1wiaW90YS1hcnJheVwiOjQwOSxcImlzLWJ1ZmZlclwiOjQxMX1dLDQ0NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkb3VibGUtYml0c1wiKSxpPU1hdGgucG93KDIsLTEwNzQpLGE9LTE+Pj4wO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKGlzTmFOKHQpfHxpc05hTihlKSlyZXR1cm4gTmFOO2lmKHQ9PT1lKXJldHVybiB0O2lmKDA9PT10KXJldHVybiBlPDA/LWk6aTt2YXIgcj1uLmhpKHQpLG89bi5sbyh0KTtlPnQ9PXQ+MD9vPT09YT8ocis9MSxvPTApOm8rPTE6MD09PW8/KG89YSxyLT0xKTpvLT0xO3JldHVybiBuLnBhY2sobyxyKX19LHtcImRvdWJsZS1iaXRzXCI6MTU5fV0sNDQ1OltmdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5QSSxpPWMoMTIwKTtmdW5jdGlvbiBhKHQsZSxyLG4pe3JldHVybltcIkNcIix0LGUscixuLHIsbl19ZnVuY3Rpb24gbyh0LGUscixuLGksYSl7cmV0dXJuW1wiQ1wiLHQvMysyLzMqcixlLzMrMi8zKm4saS8zKzIvMypyLGEvMysyLzMqbixpLGFdfWZ1bmN0aW9uIHModCxlLHIsYSxvLGMsdSxoLGYscCl7aWYocClrPXBbMF0sQT1wWzFdLF89cFsyXSx3PXBbM107ZWxzZXt2YXIgZD1sKHQsZSwtbyk7dD1kLngsZT1kLnk7dmFyIGc9KHQtKGg9KGQ9bChoLGYsLW8pKS54KSkvMix2PShlLShmPWQueSkpLzIsbT1nKmcvKHIqcikrdip2LyhhKmEpO20+MSYmKHIqPW09TWF0aC5zcXJ0KG0pLGEqPW0pO3ZhciB5PXIqcix4PWEqYSxiPShjPT11Py0xOjEpKk1hdGguc3FydChNYXRoLmFicygoeSp4LXkqdip2LXgqZypnKS8oeSp2KnYreCpnKmcpKSk7Yj09MS8wJiYoYj0xKTt2YXIgXz1iKnIqdi9hKyh0K2gpLzIsdz1iKi1hKmcvcisoZStmKS8yLGs9TWF0aC5hc2luKCgoZS13KS9hKS50b0ZpeGVkKDkpKSxBPU1hdGguYXNpbigoKGYtdykvYSkudG9GaXhlZCg5KSk7KGs9dDxfP24tazprKTwwJiYoaz0yKm4rayksKEE9aDxfP24tQTpBKTwwJiYoQT0yKm4rQSksdSYmaz5BJiYoay09MipuKSwhdSYmQT5rJiYoQS09MipuKX1pZihNYXRoLmFicyhBLWspPmkpe3ZhciBUPUEsTT1oLFM9ZjtBPWsraSoodSYmQT5rPzE6LTEpO3ZhciBFPXMoaD1fK3IqTWF0aC5jb3MoQSksZj13K2EqTWF0aC5zaW4oQSkscixhLG8sMCx1LE0sUyxbQSxULF8sd10pfXZhciBDPU1hdGgudGFuKChBLWspLzQpLEw9NC8zKnIqQyx6PTQvMyphKkMsTz1bMip0LSh0K0wqTWF0aC5zaW4oaykpLDIqZS0oZS16Kk1hdGguY29zKGspKSxoK0wqTWF0aC5zaW4oQSksZi16Kk1hdGguY29zKEEpLGgsZl07aWYocClyZXR1cm4gTztFJiYoTz1PLmNvbmNhdChFKSk7Zm9yKHZhciBJPTA7STxPLmxlbmd0aDspe3ZhciBEPWwoT1tJXSxPW0krMV0sbyk7T1tJKytdPUQueCxPW0krK109RC55fXJldHVybiBPfWZ1bmN0aW9uIGwodCxlLHIpe3JldHVybnt4OnQqTWF0aC5jb3MociktZSpNYXRoLnNpbihyKSx5OnQqTWF0aC5zaW4ocikrZSpNYXRoLmNvcyhyKX19ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdCoobi8xODApfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscj1bXSxuPTAsaT0wLGw9MCx1PTAsaD1udWxsLGY9bnVsbCxwPTAsZD0wLGc9MCx2PXQubGVuZ3RoO2c8djtnKyspe3ZhciBtPXRbZ10seT1tWzBdO3N3aXRjaCh5KXtjYXNlXCJNXCI6bD1tWzFdLHU9bVsyXTticmVhaztjYXNlXCJBXCI6KG09cyhwLGQsbVsxXSxtWzJdLGMobVszXSksbVs0XSxtWzVdLG1bNl0sbVs3XSkpLnVuc2hpZnQoXCJDXCIpLG0ubGVuZ3RoPjcmJihyLnB1c2gobS5zcGxpY2UoMCw3KSksbS51bnNoaWZ0KFwiQ1wiKSk7YnJlYWs7Y2FzZVwiU1wiOnZhciB4PXAsYj1kO1wiQ1wiIT1lJiZcIlNcIiE9ZXx8KHgrPXgtbixiKz1iLWkpLG09W1wiQ1wiLHgsYixtWzFdLG1bMl0sbVszXSxtWzRdXTticmVhaztjYXNlXCJUXCI6XCJRXCI9PWV8fFwiVFwiPT1lPyhoPTIqcC1oLGY9MipkLWYpOihoPXAsZj1kKSxtPW8ocCxkLGgsZixtWzFdLG1bMl0pO2JyZWFrO2Nhc2VcIlFcIjpoPW1bMV0sZj1tWzJdLG09byhwLGQsbVsxXSxtWzJdLG1bM10sbVs0XSk7YnJlYWs7Y2FzZVwiTFwiOm09YShwLGQsbVsxXSxtWzJdKTticmVhaztjYXNlXCJIXCI6bT1hKHAsZCxtWzFdLGQpO2JyZWFrO2Nhc2VcIlZcIjptPWEocCxkLHAsbVsxXSk7YnJlYWs7Y2FzZVwiWlwiOm09YShwLGQsbCx1KX1lPXkscD1tW20ubGVuZ3RoLTJdLGQ9bVttLmxlbmd0aC0xXSxtLmxlbmd0aD40PyhuPW1bbS5sZW5ndGgtNF0saT1tW20ubGVuZ3RoLTNdKToobj1wLGk9ZCksci5wdXNoKG0pfXJldHVybiByfX0se31dLDQ0NjpbZnVuY3Rpb24odCxlLHIpe3IudmVydGV4Tm9ybWFscz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLGE9dm9pZCAwPT09cj8xZS02OnIsbz0wO288bjsrK28paVtvXT1bMCwwLDBdO2ZvcihvPTA7bzx0Lmxlbmd0aDsrK28pZm9yKHZhciBzPXRbb10sbD0wLGM9c1tzLmxlbmd0aC0xXSx1PXNbMF0saD0wO2g8cy5sZW5ndGg7KytoKXtsPWMsYz11LHU9c1soaCsxKSVzLmxlbmd0aF07Zm9yKHZhciBmPWVbbF0scD1lW2NdLGQ9ZVt1XSxnPW5ldyBBcnJheSgzKSx2PTAsbT1uZXcgQXJyYXkoMykseT0wLHg9MDt4PDM7Kyt4KWdbeF09Zlt4XS1wW3hdLHYrPWdbeF0qZ1t4XSxtW3hdPWRbeF0tcFt4XSx5Kz1tW3hdKm1beF07aWYodip5PmEpe3ZhciBiPWlbY10sXz0xL01hdGguc3FydCh2KnkpO2Zvcih4PTA7eDwzOysreCl7dmFyIHc9KHgrMSklMyxrPSh4KzIpJTM7Ylt4XSs9XyoobVt3XSpnW2tdLW1ba10qZ1t3XSl9fX1mb3Iobz0wO288bjsrK28pe2I9aVtvXTt2YXIgQT0wO2Zvcih4PTA7eDwzOysreClBKz1iW3hdKmJbeF07aWYoQT5hKWZvcihfPTEvTWF0aC5zcXJ0KEEpLHg9MDt4PDM7Kyt4KWJbeF0qPV87ZWxzZSBmb3IoeD0wO3g8MzsrK3gpYlt4XT0wfXJldHVybiBpfSxyLmZhY2VOb3JtYWxzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC5sZW5ndGgsaT1uZXcgQXJyYXkobiksYT12b2lkIDA9PT1yPzFlLTY6cixvPTA7bzxuOysrbyl7Zm9yKHZhciBzPXRbb10sbD1uZXcgQXJyYXkoMyksYz0wO2M8MzsrK2MpbFtjXT1lW3NbY11dO3ZhciB1PW5ldyBBcnJheSgzKSxoPW5ldyBBcnJheSgzKTtmb3IoYz0wO2M8MzsrK2MpdVtjXT1sWzFdW2NdLWxbMF1bY10saFtjXT1sWzJdW2NdLWxbMF1bY107dmFyIGY9bmV3IEFycmF5KDMpLHA9MDtmb3IoYz0wO2M8MzsrK2Mpe3ZhciBkPShjKzEpJTMsZz0oYysyKSUzO2ZbY109dVtkXSpoW2ddLXVbZ10qaFtkXSxwKz1mW2NdKmZbY119cD1wPmE/MS9NYXRoLnNxcnQocCk6MDtmb3IoYz0wO2M8MzsrK2MpZltjXSo9cDtpW29dPWZ9cmV0dXJuIGl9fSx7fV0sNDQ3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksYT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO2UuZXhwb3J0cz1mdW5jdGlvbigpe3RyeXtpZighT2JqZWN0LmFzc2lnbilyZXR1cm4hMTt2YXIgdD1uZXcgU3RyaW5nKFwiYWJjXCIpO2lmKHRbNV09XCJkZVwiLFwiNVwiPT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModClbMF0pcmV0dXJuITE7Zm9yKHZhciBlPXt9LHI9MDtyPDEwO3IrKyllW1wiX1wiK1N0cmluZy5mcm9tQ2hhckNvZGUocildPXI7aWYoXCIwMTIzNDU2Nzg5XCIhPT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KS5qb2luKFwiXCIpKXJldHVybiExO3ZhciBuPXt9O3JldHVyblwiYWJjZGVmZ2hpamtsbW5vcHFyc3RcIi5zcGxpdChcIlwiKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe25bdF09dH0pLFwiYWJjZGVmZ2hpamtsbW5vcHFyc3RcIj09PU9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sbikpLmpvaW4oXCJcIil9Y2F0Y2godCl7cmV0dXJuITF9fSgpP09iamVjdC5hc3NpZ246ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbyxzPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkXCIpO3JldHVybiBPYmplY3QodCl9KHQpLGw9MTtsPGFyZ3VtZW50cy5sZW5ndGg7bCsrKXtmb3IodmFyIGMgaW4gcj1PYmplY3QoYXJndW1lbnRzW2xdKSlpLmNhbGwocixjKSYmKHNbY109cltjXSk7aWYobil7bz1uKHIpO2Zvcih2YXIgdT0wO3U8by5sZW5ndGg7dSsrKWEuY2FsbChyLG9bdV0pJiYoc1tvW3VdXT1yW29bdV1dKX19cmV0dXJuIHN9fSx7fV0sNDQ4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMpe3ZhciB1PWUrYStjO2lmKGg+MCl7dmFyIGg9TWF0aC5zcXJ0KHUrMSk7dFswXT0uNSooby1sKS9oLHRbMV09LjUqKHMtbikvaCx0WzJdPS41KihyLWEpL2gsdFszXT0uNSpofWVsc2V7dmFyIGY9TWF0aC5tYXgoZSxhLGMpLGg9TWF0aC5zcXJ0KDIqZi11KzEpO2U+PWY/KHRbMF09LjUqaCx0WzFdPS41KihpK3IpL2gsdFsyXT0uNSoocytuKS9oLHRbM109LjUqKG8tbCkvaCk6YT49Zj8odFswXT0uNSoocitpKS9oLHRbMV09LjUqaCx0WzJdPS41KihsK28pL2gsdFszXT0uNSoocy1uKS9oKToodFswXT0uNSoobitzKS9oLHRbMV09LjUqKG8rbCkvaCx0WzJdPS41KmgsdFszXT0uNSooci1pKS9oKX1yZXR1cm4gdH19LHt9XSw0NDk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9KHQ9dHx8e30pLmNlbnRlcnx8WzAsMCwwXSxyPXQucm90YXRpb258fFswLDAsMCwxXSxuPXQucmFkaXVzfHwxO2U9W10uc2xpY2UuY2FsbChlLDAsMyksdShyPVtdLnNsaWNlLmNhbGwociwwLDQpLHIpO3ZhciBpPW5ldyBoKHIsZSxNYXRoLmxvZyhuKSk7aS5zZXREaXN0YW5jZUxpbWl0cyh0Lnpvb21NaW4sdC56b29tTWF4KSwoXCJleWVcImluIHR8fFwidXBcImluIHQpJiZpLmxvb2tBdCgwLHQuZXllLHQuY2VudGVyLHQudXApO3JldHVybiBpfTt2YXIgbj10KFwiZmlsdGVyZWQtdmVjdG9yXCIpLGk9dChcImdsLW1hdDQvbG9va0F0XCIpLGE9dChcImdsLW1hdDQvZnJvbVF1YXRcIiksbz10KFwiZ2wtbWF0NC9pbnZlcnRcIikscz10KFwiLi9saWIvcXVhdEZyb21GcmFtZVwiKTtmdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHQsMikrTWF0aC5wb3coZSwyKStNYXRoLnBvdyhyLDIpKX1mdW5jdGlvbiBjKHQsZSxyLG4pe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codCwyKStNYXRoLnBvdyhlLDIpK01hdGgucG93KHIsMikrTWF0aC5wb3cobiwyKSl9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1jKHIsbixpLGEpO28+MWUtNj8odFswXT1yL28sdFsxXT1uL28sdFsyXT1pL28sdFszXT1hL28pOih0WzBdPXRbMV09dFsyXT0wLHRbM109MSl9ZnVuY3Rpb24gaCh0LGUscil7dGhpcy5yYWRpdXM9bihbcl0pLHRoaXMuY2VudGVyPW4oZSksdGhpcy5yb3RhdGlvbj1uKHQpLHRoaXMuY29tcHV0ZWRSYWRpdXM9dGhpcy5yYWRpdXMuY3VydmUoMCksdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLmNlbnRlci5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkUm90YXRpb249dGhpcy5yb3RhdGlvbi5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVXA9Wy4xLDAsMF0sdGhpcy5jb21wdXRlZEV5ZT1bLjEsMCwwXSx0aGlzLmNvbXB1dGVkTWF0cml4PVsuMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0sdGhpcy5yZWNhbGNNYXRyaXgoMCl9dmFyIGY9aC5wcm90b3R5cGU7Zi5sYXN0VD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1heCh0aGlzLnJhZGl1cy5sYXN0VCgpLHRoaXMuY2VudGVyLmxhc3RUKCksdGhpcy5yb3RhdGlvbi5sYXN0VCgpKX0sZi5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dGhpcy5yYWRpdXMuY3VydmUodCksdGhpcy5jZW50ZXIuY3VydmUodCksdGhpcy5yb3RhdGlvbi5jdXJ2ZSh0KTt2YXIgZT10aGlzLmNvbXB1dGVkUm90YXRpb247dShlLGUpO3ZhciByPXRoaXMuY29tcHV0ZWRNYXRyaXg7YShyLGUpO3ZhciBuPXRoaXMuY29tcHV0ZWRDZW50ZXIsaT10aGlzLmNvbXB1dGVkRXllLG89dGhpcy5jb21wdXRlZFVwLHM9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7aVswXT1uWzBdK3MqclsyXSxpWzFdPW5bMV0rcypyWzZdLGlbMl09blsyXStzKnJbMTBdLG9bMF09clsxXSxvWzFdPXJbNV0sb1syXT1yWzldO2Zvcih2YXIgbD0wO2w8MzsrK2wpe2Zvcih2YXIgYz0wLGg9MDtoPDM7KytoKWMrPXJbbCs0KmhdKmlbaF07clsxMitsXT0tY319LGYuZ2V0TWF0cml4PWZ1bmN0aW9uKHQsZSl7dGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIHI9dGhpcy5jb21wdXRlZE1hdHJpeDtpZihlKXtmb3IodmFyIG49MDtuPDE2OysrbillW25dPXJbbl07cmV0dXJuIGV9cmV0dXJuIHJ9LGYuaWRsZT1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5pZGxlKHQpLHRoaXMucmFkaXVzLmlkbGUodCksdGhpcy5yb3RhdGlvbi5pZGxlKHQpfSxmLmZsdXNoPWZ1bmN0aW9uKHQpe3RoaXMuY2VudGVyLmZsdXNoKHQpLHRoaXMucmFkaXVzLmZsdXNoKHQpLHRoaXMucm90YXRpb24uZmx1c2godCl9LGYucGFuPWZ1bmN0aW9uKHQsZSxyLG4pe2U9ZXx8MCxyPXJ8fDAsbj1ufHwwLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXgsYT1pWzFdLG89aVs1XSxzPWlbOV0sYz1sKGEsbyxzKTthLz1jLG8vPWMscy89Yzt2YXIgdT1pWzBdLGg9aVs0XSxmPWlbOF0scD11KmEraCpvK2YqcyxkPWwodS09YSpwLGgtPW8qcCxmLT1zKnApO3UvPWQsaC89ZCxmLz1kO3ZhciBnPWlbMl0sdj1pWzZdLG09aVsxMF0seT1nKmErdipvK20qcyx4PWcqdSt2KmgrbSpmLGI9bChnLT15KmEreCp1LHYtPXkqbyt4KmgsbS09eSpzK3gqZik7Zy89Yix2Lz1iLG0vPWI7dmFyIF89dSplK2Eqcix3PWgqZStvKnIsaz1mKmUrcypyO3RoaXMuY2VudGVyLm1vdmUodCxfLHcsayk7dmFyIEE9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7QT1NYXRoLm1heCgxZS00LEErbiksdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coQSkpfSxmLnJvdGF0ZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxlPWV8fDAscj1yfHwwO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXgsYT1pWzBdLG89aVs0XSxzPWlbOF0sdT1pWzFdLGg9aVs1XSxmPWlbOV0scD1pWzJdLGQ9aVs2XSxnPWlbMTBdLHY9ZSphK3IqdSxtPWUqbytyKmgseT1lKnMrcipmLHg9LShkKnktZyptKSxiPS0oZyp2LXAqeSksXz0tKHAqbS1kKnYpLHc9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMS1NYXRoLnBvdyh4LDIpLU1hdGgucG93KGIsMiktTWF0aC5wb3coXywyKSkpLGs9Yyh4LGIsXyx3KTtrPjFlLTY/KHgvPWssYi89ayxfLz1rLHcvPWspOih4PWI9Xz0wLHc9MSk7dmFyIEE9dGhpcy5jb21wdXRlZFJvdGF0aW9uLFQ9QVswXSxNPUFbMV0sUz1BWzJdLEU9QVszXSxDPVQqdytFKngrTSpfLVMqYixMPU0qdytFKmIrUyp4LVQqXyx6PVMqdytFKl8rVCpiLU0qeCxPPUUqdy1UKngtTSpiLVMqXztpZihuKXt4PXAsYj1kLF89Zzt2YXIgST1NYXRoLnNpbihuKS9sKHgsYixfKTt4Kj1JLGIqPUksXyo9SSxPPU8qKHc9TWF0aC5jb3MoZSkpLShDPUMqdytPKngrTCpfLXoqYikqeC0oTD1MKncrTypiK3oqeC1DKl8pKmItKHo9eip3K08qXytDKmItTCp4KSpffXZhciBEPWMoQyxMLHosTyk7RD4xZS02PyhDLz1ELEwvPUQsei89RCxPLz1EKTooQz1MPXo9MCxPPTEpLHRoaXMucm90YXRpb24uc2V0KHQsQyxMLHosTyl9LGYubG9va0F0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpLHI9cnx8dGhpcy5jb21wdXRlZENlbnRlcixlPWV8fHRoaXMuY29tcHV0ZWRFeWUsbj1ufHx0aGlzLmNvbXB1dGVkVXA7dmFyIGE9dGhpcy5jb21wdXRlZE1hdHJpeDtpKGEsZSxyLG4pO3ZhciBvPXRoaXMuY29tcHV0ZWRSb3RhdGlvbjtzKG8sYVswXSxhWzFdLGFbMl0sYVs0XSxhWzVdLGFbNl0sYVs4XSxhWzldLGFbMTBdKSx1KG8sbyksdGhpcy5yb3RhdGlvbi5zZXQodCxvWzBdLG9bMV0sb1syXSxvWzNdKTtmb3IodmFyIGw9MCxjPTA7YzwzOysrYylsKz1NYXRoLnBvdyhyW2NdLWVbY10sMik7dGhpcy5yYWRpdXMuc2V0KHQsLjUqTWF0aC5sb2coTWF0aC5tYXgobCwxZS02KSkpLHRoaXMuY2VudGVyLnNldCh0LHJbMF0sclsxXSxyWzJdKX0sZi50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5jZW50ZXIubW92ZSh0LGV8fDAscnx8MCxufHwwKX0sZi5zZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmNvbXB1dGVkUm90YXRpb247cyhyLGVbMF0sZVsxXSxlWzJdLGVbNF0sZVs1XSxlWzZdLGVbOF0sZVs5XSxlWzEwXSksdShyLHIpLHRoaXMucm90YXRpb24uc2V0KHQsclswXSxyWzFdLHJbMl0sclszXSk7dmFyIG49dGhpcy5jb21wdXRlZE1hdHJpeDtvKG4sZSk7dmFyIGk9blsxNV07aWYoTWF0aC5hYnMoaSk+MWUtNil7dmFyIGE9blsxMl0vaSxsPW5bMTNdL2ksYz1uWzE0XS9pO3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBoPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO3RoaXMuY2VudGVyLnNldCh0LGEtblsyXSpoLGwtbls2XSpoLGMtblsxMF0qaCksdGhpcy5yYWRpdXMuaWRsZSh0KX1lbHNlIHRoaXMuY2VudGVyLmlkbGUodCksdGhpcy5yYWRpdXMuaWRsZSh0KX0sZi5zZXREaXN0YW5jZT1mdW5jdGlvbih0LGUpe2U+MCYmdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coZSkpfSxmLnNldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQsZSl7dD10PjA/TWF0aC5sb2codCk6LTEvMCxlPWU+MD9NYXRoLmxvZyhlKToxLzAsZT1NYXRoLm1heChlLHQpLHRoaXMucmFkaXVzLmJvdW5kc1swXVswXT10LHRoaXMucmFkaXVzLmJvdW5kc1sxXVswXT1lfSxmLmdldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucmFkaXVzLmJvdW5kcztyZXR1cm4gdD8odFswXT1NYXRoLmV4cChlWzBdWzBdKSx0WzFdPU1hdGguZXhwKGVbMV1bMF0pLHQpOltNYXRoLmV4cChlWzBdWzBdKSxNYXRoLmV4cChlWzFdWzBdKV19LGYudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjYWxjTWF0cml4KHRoaXMubGFzdFQoKSkse2NlbnRlcjp0aGlzLmNvbXB1dGVkQ2VudGVyLnNsaWNlKCkscm90YXRpb246dGhpcy5jb21wdXRlZFJvdGF0aW9uLnNsaWNlKCksZGlzdGFuY2U6TWF0aC5sb2codGhpcy5jb21wdXRlZFJhZGl1c1swXSksem9vbU1pbjp0aGlzLnJhZGl1cy5ib3VuZHNbMF1bMF0sem9vbU1heDp0aGlzLnJhZGl1cy5ib3VuZHNbMV1bMF19fSxmLmZyb21KU09OPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXQuY2VudGVyO3ImJnRoaXMuY2VudGVyLnNldChlLHJbMF0sclsxXSxyWzJdKTt2YXIgbj10LnJvdGF0aW9uO24mJnRoaXMucm90YXRpb24uc2V0KGUsblswXSxuWzFdLG5bMl0sblszXSk7dmFyIGk9dC5kaXN0YW5jZTtpJiZpPjAmJnRoaXMucmFkaXVzLnNldChlLE1hdGgubG9nKGkpKSx0aGlzLnNldERpc3RhbmNlTGltaXRzKHQuem9vbU1pbix0Lnpvb21NYXgpfX0se1wiLi9saWIvcXVhdEZyb21GcmFtZVwiOjQ0OCxcImZpbHRlcmVkLXZlY3RvclwiOjIyMyxcImdsLW1hdDQvZnJvbVF1YXRcIjoyNTksXCJnbC1tYXQ0L2ludmVydFwiOjI2MixcImdsLW1hdDQvbG9va0F0XCI6MjYzfV0sNDUwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInJlcGVhdC1zdHJpbmdcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbihyPVwidW5kZWZpbmVkXCIhPXR5cGVvZiByP3IrXCJcIjpcIiBcIixlKSt0fX0se1wicmVwZWF0LXN0cmluZ1wiOjQ4OH1dLDQ1MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZihcInN0cmluZ1wiIT10eXBlb2YgdClyZXR1cm5bdF07dmFyIHI9W3RdO1wic3RyaW5nXCI9PXR5cGVvZiBlfHxBcnJheS5pc0FycmF5KGUpP2U9e2JyYWNrZXRzOmV9OmV8fChlPXt9KTt2YXIgbj1lLmJyYWNrZXRzP0FycmF5LmlzQXJyYXkoZS5icmFja2V0cyk/ZS5icmFja2V0czpbZS5icmFja2V0c106W1wie31cIixcIltdXCIsXCIoKVwiXSxpPWUuZXNjYXBlfHxcIl9fX1wiLGE9ISFlLmZsYXQ7bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBSZWdFeHAoW1wiXFxcXFwiLHRbMF0sXCJbXlxcXFxcIix0WzBdLFwiXFxcXFwiLHRbMV0sXCJdKlxcXFxcIix0WzFdXS5qb2luKFwiXCIpKSxuPVtdO2Z1bmN0aW9uIGEoZSxhLG8pe3ZhciBzPXIucHVzaChlLnNsaWNlKHRbMF0ubGVuZ3RoLC10WzFdLmxlbmd0aCkpLTE7cmV0dXJuIG4ucHVzaChzKSxpK3N9ci5mb3JFYWNoKGZ1bmN0aW9uKHQsbil7Zm9yKHZhciBpLG89MDt0IT1pOylpZihpPXQsdD10LnJlcGxhY2UoZSxhKSxvKys+MWU0KXRocm93IEVycm9yKFwiUmVmZXJlbmNlcyBoYXZlIGNpcmN1bGFyIGRlcGVuZGVuY3kuIFBsZWFzZSwgY2hlY2sgdGhlbS5cIik7cltuXT10fSksbj1uLnJldmVyc2UoKSxyPXIubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24ocil7ZT1lLnJlcGxhY2UobmV3IFJlZ0V4cChcIihcXFxcXCIraStyK1wiKD8hWzAtOV0pKVwiLFwiZ1wiKSx0WzBdK1wiJDFcIit0WzFdKX0pLGV9KX0pO3ZhciBvPW5ldyBSZWdFeHAoXCJcXFxcXCIraStcIihbMC05XSspXCIpO3JldHVybiBhP3I6ZnVuY3Rpb24gdChlLHIsbil7Zm9yKHZhciBpLGE9W10scz0wO2k9by5leGVjKGUpOyl7aWYocysrPjFlNCl0aHJvdyBFcnJvcihcIkNpcmN1bGFyIHJlZmVyZW5jZXMgaW4gcGFyZW50aGVzaXNcIik7YS5wdXNoKGUuc2xpY2UoMCxpLmluZGV4KSksYS5wdXNoKHQocltpWzFdXSxyKSksZT1lLnNsaWNlKGkuaW5kZXgraVswXS5sZW5ndGgpfXJldHVybiBhLnB1c2goZSksYX0oclswXSxyKX1mdW5jdGlvbiBpKHQsZSl7aWYoZSYmZS5mbGF0KXt2YXIgcixuPWUmJmUuZXNjYXBlfHxcIl9fX1wiLGk9dFswXTtpZighaSlyZXR1cm5cIlwiO2Zvcih2YXIgYT1uZXcgUmVnRXhwKFwiXFxcXFwiK24rXCIoWzAtOV0rKVwiKSxvPTA7aSE9cjspe2lmKG8rKz4xZTQpdGhyb3cgRXJyb3IoXCJDaXJjdWxhciByZWZlcmVuY2VzIGluIFwiK3QpO3I9aSxpPWkucmVwbGFjZShhLHMpfXJldHVybiBpfXJldHVybiB0LnJlZHVjZShmdW5jdGlvbiB0KGUscil7cmV0dXJuIEFycmF5LmlzQXJyYXkocikmJihyPXIucmVkdWNlKHQsXCJcIikpLGUrcn0sXCJcIik7ZnVuY3Rpb24gcyhlLHIpe2lmKG51bGw9PXRbcl0pdGhyb3cgRXJyb3IoXCJSZWZlcmVuY2UgXCIrcitcImlzIHVuZGVmaW5lZFwiKTtyZXR1cm4gdFtyXX19ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP2kodCxlKTpuKHQsZSl9YS5wYXJzZT1uLGEuc3RyaW5naWZ5PWksZS5leHBvcnRzPWF9LHt9XSw0NTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicGljay1ieS1hbGlhc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU7YXJndW1lbnRzLmxlbmd0aD4xJiYodD1hcmd1bWVudHMpO1wic3RyaW5nXCI9PXR5cGVvZiB0P3Q9dC5zcGxpdCgvXFxzLykubWFwKHBhcnNlRmxvYXQpOlwibnVtYmVyXCI9PXR5cGVvZiB0JiYodD1bdF0pO3QubGVuZ3RoJiZcIm51bWJlclwiPT10eXBlb2YgdFswXT9lPTE9PT10Lmxlbmd0aD97d2lkdGg6dFswXSxoZWlnaHQ6dFswXSx4OjAseTowfToyPT09dC5sZW5ndGg/e3dpZHRoOnRbMF0saGVpZ2h0OnRbMV0seDowLHk6MH06e3g6dFswXSx5OnRbMV0sd2lkdGg6dFsyXS10WzBdfHwwLGhlaWdodDp0WzNdLXRbMV18fDB9OnQmJih0PW4odCx7bGVmdDpcInggbCBsZWZ0IExlZnRcIix0b3A6XCJ5IHQgdG9wIFRvcFwiLHdpZHRoOlwidyB3aWR0aCBXIFdpZHRoXCIsaGVpZ2h0OlwiaCBoZWlnaHQgVyBXaWR0aFwiLGJvdHRvbTpcImIgYm90dG9tIEJvdHRvbVwiLHJpZ2h0OlwiciByaWdodCBSaWdodFwifSksZT17eDp0LmxlZnR8fDAseTp0LnRvcHx8MH0sbnVsbD09dC53aWR0aD90LnJpZ2h0P2Uud2lkdGg9dC5yaWdodC1lLng6ZS53aWR0aD0wOmUud2lkdGg9dC53aWR0aCxudWxsPT10LmhlaWdodD90LmJvdHRvbT9lLmhlaWdodD10LmJvdHRvbS1lLnk6ZS5oZWlnaHQ9MDplLmhlaWdodD10LmhlaWdodCk7cmV0dXJuIGV9fSx7XCJwaWNrLWJ5LWFsaWFzXCI6NDU4fV0sNDUzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiB0LnJlcGxhY2UoaSxmdW5jdGlvbih0LHIsaSl7dmFyIG89ci50b0xvd2VyQ2FzZSgpO2ZvcihpPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWF0Y2goYSk7cmV0dXJuIGU/ZS5tYXAoTnVtYmVyKTpbXX0oaSksXCJtXCI9PW8mJmkubGVuZ3RoPjImJihlLnB1c2goW3JdLmNvbmNhdChpLnNwbGljZSgwLDIpKSksbz1cImxcIixyPVwibVwiPT1yP1wibFwiOlwiTFwiKTs7KXtpZihpLmxlbmd0aD09bltvXSlyZXR1cm4gaS51bnNoaWZ0KHIpLGUucHVzaChpKTtpZihpLmxlbmd0aDxuW29dKXRocm93IG5ldyBFcnJvcihcIm1hbGZvcm1lZCBwYXRoIGRhdGFcIik7ZS5wdXNoKFtyXS5jb25jYXQoaS5zcGxpY2UoMCxuW29dKSkpfX0pLGV9O3ZhciBuPXthOjcsYzo2LGg6MSxsOjIsbToyLHE6NCxzOjQsdDoyLHY6MSx6OjB9LGk9LyhbYXN0dnpxbWhsY10pKFteYXN0dnpxbWhsY10qKS9naTt2YXIgYT0vLT9bMC05XSpcXC4/WzAtOV0rKD86ZVstK10/XFxkKyk/L2dpfSx7fV0sNDU0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9WzAsXCJcIl0pLHQ9U3RyaW5nKHQpO3ZhciByPXBhcnNlRmxvYXQodCwxMCk7cmV0dXJuIGVbMF09cixlWzFdPXQubWF0Y2goL1tcXGQuXFwtXFwrXSpcXHMqKC4qKS8pWzFdfHxcIlwiLGV9fSx7fV0sNDU1OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpeyhmdW5jdGlvbigpe3ZhciByLG4saSxhLG8scztcInVuZGVmaW5lZFwiIT10eXBlb2YgcGVyZm9ybWFuY2UmJm51bGwhPT1wZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P2UuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX06XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHQmJm51bGwhPT10JiZ0LmhydGltZT8oZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuKHIoKS1vKS8xZTZ9LG49dC5ocnRpbWUsYT0ocj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiAxZTkqKHQ9bigpKVswXSt0WzFdfSkoKSxzPTFlOSp0LnVwdGltZSgpLG89YS1zKTpEYXRlLm5vdz8oZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCktaX0saT1EYXRlLm5vdygpKTooZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCktaX0saT0obmV3IERhdGUpLmdldFRpbWUoKSl9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHQoXCJfcHJvY2Vzc1wiKSl9LHtfcHJvY2Vzczo0NzV9XSw0NTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoZTxuKXtmb3IodmFyIHI9MSxhPTA7YTxlOysrYSlmb3IodmFyIG89MDtvPGE7KytvKWlmKHRbYV08dFtvXSlyPS1yO2Vsc2UgaWYodFthXT09PXRbb10pcmV0dXJuIDA7cmV0dXJuIHJ9Zm9yKHZhciBzPWkubWFsbG9jVWludDgoZSksYT0wO2E8ZTsrK2Epc1thXT0wO2Zvcih2YXIgcj0xLGE9MDthPGU7KythKWlmKCFzW2FdKXt2YXIgbD0xO3NbYV09MTtmb3IodmFyIG89dFthXTtvIT09YTtvPXRbb10pe2lmKHNbb10pcmV0dXJuIGkuZnJlZVVpbnQ4KHMpLDA7bCs9MSxzW29dPTF9MSZsfHwocj0tcil9cmV0dXJuIGkuZnJlZVVpbnQ4KHMpLHJ9O3ZhciBuPTMyLGk9dChcInR5cGVkYXJyYXktcG9vbFwiKX0se1widHlwZWRhcnJheS1wb29sXCI6NTMwfV0sNDU3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInR5cGVkYXJyYXktcG9vbFwiKSxpPXQoXCJpbnZlcnQtcGVybXV0YXRpb25cIik7ci5yYW5rPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3N3aXRjaChlKXtjYXNlIDA6Y2FzZSAxOnJldHVybiAwO2Nhc2UgMjpyZXR1cm4gdFsxXX12YXIgcixhLG8scz1uLm1hbGxvY1VpbnQzMihlKSxsPW4ubWFsbG9jVWludDMyKGUpLGM9MDtmb3IoaSh0LGwpLG89MDtvPGU7KytvKXNbb109dFtvXTtmb3Iobz1lLTE7bz4wOy0tbylhPWxbb10scj1zW29dLHNbb109c1thXSxzW2FdPXIsbFtvXT1sW3JdLGxbcl09YSxjPShjK3IpKm87cmV0dXJuIG4uZnJlZVVpbnQzMihsKSxuLmZyZWVVaW50MzIocyksY30sci51bnJhbms9ZnVuY3Rpb24odCxlLHIpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHJ8fFtdO2Nhc2UgMTpyZXR1cm4gcj8oclswXT0wLHIpOlswXTtjYXNlIDI6cmV0dXJuIHI/KGU/KHJbMF09MCxyWzFdPTEpOihyWzBdPTEsclsxXT0wKSxyKTplP1swLDFdOlsxLDBdfXZhciBuLGksYSxvPTE7Zm9yKChyPXJ8fG5ldyBBcnJheSh0KSlbMF09MCxhPTE7YTx0OysrYSlyW2FdPWEsbz1vKmF8MDtmb3IoYT10LTE7YT4wOy0tYSllPWUtKG49ZS9vfDApKm98MCxvPW8vYXwwLGk9MHxyW2FdLHJbYV09MHxyW25dLHJbbl09MHxpO3JldHVybiByfX0se1wiaW52ZXJ0LXBlcm11dGF0aW9uXCI6NDA4LFwidHlwZWRhcnJheS1wb29sXCI6NTMwfV0sNDU4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixhLG89e307aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPWkoZSkpLEFycmF5LmlzQXJyYXkoZSkpe3ZhciBzPXt9O2ZvcihhPTA7YTxlLmxlbmd0aDthKyspc1tlW2FdXT0hMDtlPXN9Zm9yKG4gaW4gZSllW25dPWkoZVtuXSk7dmFyIGw9e307Zm9yKG4gaW4gZSl7dmFyIGM9ZVtuXTtpZihBcnJheS5pc0FycmF5KGMpKWZvcihhPTA7YTxjLmxlbmd0aDthKyspe3ZhciB1PWNbYV07aWYociYmKGxbdV09ITApLHUgaW4gdCl7aWYob1tuXT10W3VdLHIpZm9yKHZhciBoPWE7aDxjLmxlbmd0aDtoKyspbFtjW2hdXT0hMDticmVha319ZWxzZSBuIGluIHQmJihlW25dJiYob1tuXT10W25dKSxyJiYobFtuXT0hMCkpfWlmKHIpZm9yKG4gaW4gdClsW25dfHwob1tuXT10W25dKTtyZXR1cm4gb307dmFyIG49e307ZnVuY3Rpb24gaSh0KXtyZXR1cm4gblt0XT9uW3RdOihcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9blt0XT10LnNwbGl0KC9cXHMqLFxccyp8XFxzKy8pKSx0KX19LHt9XSw0NTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MHxlLmxlbmd0aCxpPXQubGVuZ3RoLGE9W25ldyBBcnJheShyKSxuZXcgQXJyYXkocildLG89MDtvPHI7KytvKWFbMF1bb109W10sYVsxXVtvXT1bXTtmb3IodmFyIG89MDtvPGk7KytvKXt2YXIgcz10W29dO2FbMF1bc1swXV0ucHVzaChzKSxhWzFdW3NbMV1dLnB1c2gocyl9Zm9yKHZhciBsPVtdLG89MDtvPHI7KytvKWFbMF1bb10ubGVuZ3RoK2FbMV1bb10ubGVuZ3RoPT09MCYmbC5wdXNoKFtvXSk7ZnVuY3Rpb24gYyh0LGUpe3ZhciByPWFbZV1bdFtlXV07ci5zcGxpY2Uoci5pbmRleE9mKHQpLDEpfWZ1bmN0aW9uIHUodCxyLGkpe2Zvcih2YXIgbyxzLGwsdT0wO3U8MjsrK3UpaWYoYVt1XVtyXS5sZW5ndGg+MCl7bz1hW3VdW3JdWzBdLGw9dTticmVha31zPW9bMV5sXTtmb3IodmFyIGg9MDtoPDI7KytoKWZvcih2YXIgZj1hW2hdW3JdLHA9MDtwPGYubGVuZ3RoOysrcCl7dmFyIGQ9ZltwXSxnPWRbMV5oXSx2PW4oZVt0XSxlW3JdLGVbc10sZVtnXSk7dj4wJiYobz1kLHM9ZyxsPWgpfXJldHVybiBpP3M6KG8mJmMobyxsKSxzKX1mdW5jdGlvbiBoKHQscil7dmFyIGk9YVtyXVt0XVswXSxvPVt0XTtjKGkscik7Zm9yKHZhciBzPWlbMV5yXTs7KXtmb3IoO3MhPT10OylvLnB1c2gocykscz11KG9bby5sZW5ndGgtMl0scywhMSk7aWYoYVswXVt0XS5sZW5ndGgrYVsxXVt0XS5sZW5ndGg9PT0wKWJyZWFrO3ZhciBsPW9bby5sZW5ndGgtMV0saD10LGY9b1sxXSxwPXUobCxoLCEwKTtpZihuKGVbbF0sZVtoXSxlW2ZdLGVbcF0pPDApYnJlYWs7by5wdXNoKHQpLHM9dShsLGgpfXJldHVybiBvfWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gZVsxXT09PWVbZS5sZW5ndGgtMV19Zm9yKHZhciBvPTA7bzxyOysrbylmb3IodmFyIHA9MDtwPDI7KytwKXtmb3IodmFyIGQ9W107YVtwXVtvXS5sZW5ndGg+MDspe2FbMF1bb10ubGVuZ3RoO3ZhciBnPWgobyxwKTtmKGQsZyk/ZC5wdXNoLmFwcGx5KGQsZyk6KGQubGVuZ3RoPjAmJmwucHVzaChkKSxkPWcpfWQubGVuZ3RoPjAmJmwucHVzaChkKX1yZXR1cm4gbH07dmFyIG49dChcImNvbXBhcmUtYW5nbGVcIil9LHtcImNvbXBhcmUtYW5nbGVcIjoxMTh9XSw0NjA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bih0LGUubGVuZ3RoKSxpPW5ldyBBcnJheShlLmxlbmd0aCksYT1uZXcgQXJyYXkoZS5sZW5ndGgpLG89W10scz0wO3M8ZS5sZW5ndGg7KytzKXt2YXIgbD1yW3NdLmxlbmd0aDthW3NdPWwsaVtzXT0hMCxsPD0xJiZvLnB1c2gocyl9Zm9yKDtvLmxlbmd0aD4wOyl7dmFyIGM9by5wb3AoKTtpW2NdPSExO2Zvcih2YXIgdT1yW2NdLHM9MDtzPHUubGVuZ3RoOysrcyl7dmFyIGg9dVtzXTswPT0tLWFbaF0mJm8ucHVzaChoKX19Zm9yKHZhciBmPW5ldyBBcnJheShlLmxlbmd0aCkscD1bXSxzPTA7czxlLmxlbmd0aDsrK3MpaWYoaVtzXSl7dmFyIGM9cC5sZW5ndGg7ZltzXT1jLHAucHVzaChlW3NdKX1lbHNlIGZbc109LTE7Zm9yKHZhciBkPVtdLHM9MDtzPHQubGVuZ3RoOysrcyl7dmFyIGc9dFtzXTtpW2dbMF1dJiZpW2dbMV1dJiZkLnB1c2goW2ZbZ1swXV0sZltnWzFdXV0pfXJldHVybltkLHBdfTt2YXIgbj10KFwiZWRnZXMtdG8tYWRqYWNlbmN5LWxpc3RcIil9LHtcImVkZ2VzLXRvLWFkamFjZW5jeS1saXN0XCI6MTY0fV0sNDYxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9Yyh0LGUpO3Q9clswXTtmb3IodmFyIGg9KGU9clsxXSkubGVuZ3RoLGY9KHQubGVuZ3RoLG4odCxlLmxlbmd0aCkpLHA9MDtwPGg7KytwKWlmKGZbcF0ubGVuZ3RoJTI9PTEpdGhyb3cgbmV3IEVycm9yKFwicGxhbmFyLWdyYXBoLXRvLXBvbHlsaW5lOiBncmFwaCBtdXN0IGJlIG1hbmlmb2xkXCIpO3ZhciBkPWkodCxlKTtmb3IodmFyIGc9KGQ9ZC5maWx0ZXIoZnVuY3Rpb24odCl7Zm9yKHZhciByPXQubGVuZ3RoLG49WzBdLGk9MDtpPHI7KytpKXt2YXIgYT1lW3RbaV1dLGw9ZVt0WyhpKzEpJXJdXSxjPW8oLWFbMF0sYVsxXSksdT1vKC1hWzBdLGxbMV0pLGg9byhsWzBdLGFbMV0pLGY9byhsWzBdLGxbMV0pO249cyhuLHMocyhjLHUpLHMoaCxmKSkpfXJldHVybiBuW24ubGVuZ3RoLTFdPjB9KSkubGVuZ3RoLHY9bmV3IEFycmF5KGcpLG09bmV3IEFycmF5KGcpLHA9MDtwPGc7KytwKXt2W3BdPXA7dmFyIHk9bmV3IEFycmF5KGcpLHg9ZFtwXS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KSxiPWEoW3hdKSxfPTA7dDpmb3IodmFyIHc9MDt3PGc7Kyt3KWlmKHlbd109MCxwIT09dyl7Zm9yKHZhciBrPWRbd10sQT1rLmxlbmd0aCxUPTA7VDxBOysrVCl7dmFyIE09YihlW2tbVF1dKTtpZigwIT09TSl7TTwwJiYoeVt3XT0xLF8rPTEpO2NvbnRpbnVlIHR9fXlbd109MSxfKz0xfW1bcF09W18scCx5XX1tLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS10WzBdfSk7Zm9yKHZhciBwPTA7cDxnOysrcClmb3IodmFyIHk9bVtwXSxTPXlbMV0sRT15WzJdLHc9MDt3PGc7Kyt3KUVbd10mJih2W3ddPVMpO2Zvcih2YXIgQz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKWVbcl09W107cmV0dXJuIGV9KGcpLHA9MDtwPGc7KytwKUNbcF0ucHVzaCh2W3BdKSxDW3ZbcF1dLnB1c2gocCk7Zm9yKHZhciBMPXt9LHo9dShoLCExKSxwPTA7cDxnOysrcClmb3IodmFyIGs9ZFtwXSxBPWsubGVuZ3RoLHc9MDt3PEE7Kyt3KXt2YXIgTz1rW3ddLEk9a1sodysxKSVBXSxEPU1hdGgubWluKE8sSSkrXCI6XCIrTWF0aC5tYXgoTyxJKTtpZihEIGluIEwpe3ZhciBQPUxbRF07Q1tQXS5wdXNoKHApLENbcF0ucHVzaChQKSx6W09dPXpbSV09ITB9ZWxzZSBMW0RdPXB9ZnVuY3Rpb24gUih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj0wO3I8ZTsrK3IpaWYoIXpbdFtyXV0pcmV0dXJuITE7cmV0dXJuITB9Zm9yKHZhciBGPVtdLEI9dShnLC0xKSxwPTA7cDxnOysrcCl2W3BdIT09cHx8UihkW3BdKT9CW3BdPS0xOihGLnB1c2gocCksQltwXT0wKTt2YXIgcj1bXTtmb3IoO0YubGVuZ3RoPjA7KXt2YXIgTj1GLnBvcCgpLGo9Q1tOXTtsKGosZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSk7dmFyIFYsVT1qLmxlbmd0aCxxPUJbTl07aWYoMD09PXEpe3ZhciBrPWRbTl07Vj1ba119Zm9yKHZhciBwPTA7cDxVOysrcCl7dmFyIEg9altwXTtpZighKEJbSF0+PTApJiYoQltIXT0xXnEsRi5wdXNoKEgpLDA9PT1xKSl7dmFyIGs9ZFtIXTtSKGspfHwoay5yZXZlcnNlKCksVi5wdXNoKGspKX19MD09PXEmJnIucHVzaChWKX1yZXR1cm4gcn07dmFyIG49dChcImVkZ2VzLXRvLWFkamFjZW5jeS1saXN0XCIpLGk9dChcInBsYW5hci1kdWFsXCIpLGE9dChcInBvaW50LWluLWJpZy1wb2x5Z29uXCIpLG89dChcInR3by1wcm9kdWN0XCIpLHM9dChcInJvYnVzdC1zdW1cIiksbD10KFwidW5pcVwiKSxjPXQoXCIuL2xpYi90cmltLWxlYXZlc1wiKTtmdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWU7cmV0dXJuIHJ9fSx7XCIuL2xpYi90cmltLWxlYXZlc1wiOjQ2MCxcImVkZ2VzLXRvLWFkamFjZW5jeS1saXN0XCI6MTY0LFwicGxhbmFyLWR1YWxcIjo0NTksXCJwb2ludC1pbi1iaWctcG9seWdvblwiOjQ2NSxcInJvYnVzdC1zdW1cIjo1MDAsXCJ0d28tcHJvZHVjdFwiOjUyOCx1bmlxOjUzMn1dLDQ2MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi9xdWFkXCIpfSx7XCIuL3F1YWRcIjo0NjR9XSw0NjM6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMTAyXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MTAyfV0sNDY0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImJpbmFyeS1zZWFyY2gtYm91bmRzXCIpLGk9dChcImNsYW1wXCIpLGE9dChcInBhcnNlLXJlY3RcIiksbz10KFwiYXJyYXktYm91bmRzXCIpLHM9dChcInBpY2stYnktYWxpYXNcIiksbD10KFwiZGVmaW5lZFwiKSxjPXQoXCJmbGF0dGVuLXZlcnRleC1kYXRhXCIpLHU9dChcImlzLW9ialwiKSxoPXQoXCJkdHlwZVwiKSxmPXQoXCJtYXRoLWxvZzJcIik7ZnVuY3Rpb24gcCh0LGUpe2Zvcih2YXIgcj1lWzBdLG49ZVsxXSxhPTEvKGVbMl0tciksbz0xLyhlWzNdLW4pLHM9bmV3IEFycmF5KHQubGVuZ3RoKSxsPTAsYz10Lmxlbmd0aC8yO2w8YztsKyspc1syKmxdPWkoKHRbMipsXS1yKSphLDAsMSksc1syKmwrMV09aSgodFsyKmwrMV0tbikqbywwLDEpO3JldHVybiBzfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2V8fChlPXt9KSx0PWModCxcImZsb2F0NjRcIiksZT1zKGUse2JvdW5kczpcInJhbmdlIGJvdW5kcyBkYXRhQm94IGRhdGFib3hcIixtYXhEZXB0aDpcImRlcHRoIG1heERlcHRoIG1heGRlcHRoIGxldmVsIG1heExldmVsIG1heGxldmVsIGxldmVsc1wiLGR0eXBlOlwidHlwZSBkdHlwZSBmb3JtYXQgb3V0IGRzdCBvdXRwdXQgZGVzdGluYXRpb25cIn0pO3ZhciByPWwoZS5tYXhEZXB0aCwyNTUpLGk9bChlLmJvdW5kcyxvKHQsMikpO2lbMF09PT1pWzJdJiZpWzJdKyssaVsxXT09PWlbM10mJmlbM10rKzt2YXIgZCxnPXAodCxpKSx2PXQubGVuZ3RoPj4+MTtlLmR0eXBlfHwoZS5kdHlwZT1cImFycmF5XCIpLFwic3RyaW5nXCI9PXR5cGVvZiBlLmR0eXBlP2Q9bmV3KGgoZS5kdHlwZSkpKHYpOmUuZHR5cGUmJihkPWUuZHR5cGUsQXJyYXkuaXNBcnJheShkKSYmKGQubGVuZ3RoPXYpKTtmb3IodmFyIG09MDttPHY7KyttKWRbbV09bTt2YXIgeT1bXSx4PVtdLGI9W10sXz1bXTshZnVuY3Rpb24gdChlLG4saSxhLG8scyl7aWYoIWEubGVuZ3RoKXJldHVybiBudWxsO3ZhciBsPXlbb118fCh5W29dPVtdKTt2YXIgYz1iW29dfHwoYltvXT1bXSk7dmFyIHU9eFtvXXx8KHhbb109W10pO3ZhciBoPWwubGVuZ3RoO28rKztpZihvPnIpe2Zvcih2YXIgZj0wO2Y8YS5sZW5ndGg7ZisrKWwucHVzaChhW2ZdKSxjLnB1c2gocyksdS5wdXNoKG51bGwsbnVsbCxudWxsLG51bGwpO3JldHVybiBofWwucHVzaChhWzBdKTtjLnB1c2gocyk7aWYoYS5sZW5ndGg8PTEpcmV0dXJuIHUucHVzaChudWxsLG51bGwsbnVsbCxudWxsKSxoO3ZhciBwPS41Kmk7dmFyIGQ9ZStwLHY9bitwO3ZhciBtPVtdLF89W10sdz1bXSxrPVtdO2Zvcih2YXIgQT0xLFQ9YS5sZW5ndGg7QTxUO0ErKyl7dmFyIE09YVtBXSxTPWdbMipNXSxFPWdbMipNKzFdO1M8ZD9FPHY/bS5wdXNoKE0pOl8ucHVzaChNKTpFPHY/dy5wdXNoKE0pOmsucHVzaChNKX1zPDw9Mjt1LnB1c2godChlLG4scCxtLG8scyksdChlLHYscCxfLG8scysxKSx0KGQsbixwLHcsbyxzKzIpLHQoZCx2LHAsayxvLHMrMykpO3JldHVybiBofSgwLDAsMSxkLDAsMSk7Zm9yKHZhciB3PTAsaz0wO2s8eS5sZW5ndGg7aysrKXt2YXIgQT15W2tdO2lmKGQuc2V0KWQuc2V0KEEsdyk7ZWxzZSBmb3IodmFyIFQ9MCxNPUEubGVuZ3RoO1Q8TTtUKyspZFtUK3ddPUFbVF07dmFyIFM9dyt5W2tdLmxlbmd0aDtfW2tdPVt3LFNdLHc9U31yZXR1cm4gZC5yYW5nZT1mdW5jdGlvbigpe3ZhciBlLHI9W10sbz1hcmd1bWVudHMubGVuZ3RoO2Zvcig7by0tOylyW29dPWFyZ3VtZW50c1tvXTtpZih1KHJbci5sZW5ndGgtMV0pKXt2YXIgYz1yLnBvcCgpO3IubGVuZ3RofHxudWxsPT1jLngmJm51bGw9PWMubCYmbnVsbD09Yy5sZWZ0fHwocj1bY10sZT17fSksZT1zKGMse2xldmVsOlwibGV2ZWwgbWF4TGV2ZWxcIixkOlwiZCBkaWFtIGRpYW1ldGVyIHIgcmFkaXVzIHB4IHB4U2l6ZSBwaXhlbCBwaXhlbFNpemUgbWF4RCBzaXplIG1pblNpemVcIixsb2Q6XCJsb2QgZGV0YWlscyByYW5nZXMgb2Zmc2V0c1wifSl9ZWxzZSBlPXt9O3IubGVuZ3RofHwocj1pKTt2YXIgaD1hLmFwcGx5KHZvaWQgMCxyKSxkPVtNYXRoLm1pbihoLngsaC54K2gud2lkdGgpLE1hdGgubWluKGgueSxoLnkraC5oZWlnaHQpLE1hdGgubWF4KGgueCxoLngraC53aWR0aCksTWF0aC5tYXgoaC55LGgueStoLmhlaWdodCldLGc9ZFswXSx2PWRbMV0sbT1kWzJdLHc9ZFszXSxrPXAoW2csdixtLHddLGkpLEE9a1swXSxUPWtbMV0sTT1rWzJdLFM9a1szXSxDPWwoZS5sZXZlbCx5Lmxlbmd0aCk7aWYobnVsbCE9ZS5kKXt2YXIgTDtcIm51bWJlclwiPT10eXBlb2YgZS5kP0w9W2UuZCxlLmRdOmUuZC5sZW5ndGgmJihMPWUuZCksQz1NYXRoLm1pbihNYXRoLm1heChNYXRoLmNlaWwoLWYoTWF0aC5hYnMoTFswXSkvKGlbMl0taVswXSkpKSxNYXRoLmNlaWwoLWYoTWF0aC5hYnMoTFsxXSkvKGlbM10taVsxXSkpKSksQyl9aWYoQz1NYXRoLm1pbihDLHkubGVuZ3RoKSxlLmxvZClyZXR1cm4gZnVuY3Rpb24odCxlLHIsaSxhKXtmb3IodmFyIG89W10scz0wO3M8YTtzKyspe3ZhciBsPWJbc10sYz1fW3NdWzBdLHU9RSh0LGUscyksaD1FKHIsaSxzKSxmPW4uZ2UobCx1KSxwPW4uZ3QobCxoLGYsbC5sZW5ndGgtMSk7b1tzXT1bZitjLHArY119cmV0dXJuIG99KEEsVCxNLFMsQyk7dmFyIHo9W107cmV0dXJuIGZ1bmN0aW9uIGUocixuLGksYSxvLHMpe2lmKG51bGwhPT1vJiZudWxsIT09cyl7dmFyIGw9citpLGM9bitpO2lmKCEoQT5sfHxUPmN8fE08cnx8UzxufHxhPj1DfHxvPT09cykpe3ZhciB1PXlbYV07dm9pZCAwPT09cyYmKHM9dS5sZW5ndGgpO2Zvcih2YXIgaD1vO2g8cztoKyspe3ZhciBmPXVbaF0scD10WzIqZl0sZD10WzIqZisxXTtwPj1nJiZwPD1tJiZkPj12JiZkPD13JiZ6LnB1c2goZil9dmFyIGI9eFthXSxfPWJbNCpvKzBdLGs9Yls0Km8rMV0sRT1iWzQqbysyXSxMPWJbNCpvKzNdLE89ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bnVsbCxuPTA7bnVsbD09PXI7KWlmKHI9dFs0KmUrbl0sKytuPnQubGVuZ3RoKXJldHVybiBudWxsO3JldHVybiByfShiLG8rMSksST0uNSppLEQ9YSsxO2UocixuLEksRCxfLGt8fEV8fEx8fE8pLGUocixuK0ksSSxELGssRXx8THx8TyksZShyK0ksbixJLEQsRSxMfHxPKSxlKHIrSSxuK0ksSSxELEwsTyl9fX0oMCwwLDEsMCwwLDEpLHp9LGQ7ZnVuY3Rpb24gRSh0LGUscil7Zm9yKHZhciBuPTEsaT0uNSxhPS41LG89LjUscz0wO3M8cjtzKyspbjw8PTIsbis9dDxpP2U8YT8wOjE6ZTxhPzI6MyxvKj0uNSxpKz10PGk/LW86byxhKz1lPGE/LW86bztyZXR1cm4gbn19fSx7XCJhcnJheS1ib3VuZHNcIjo1NixcImJpbmFyeS1zZWFyY2gtYm91bmRzXCI6NDYzLGNsYW1wOjEwNixkZWZpbmVkOjE1NixkdHlwZToxNjEsXCJmbGF0dGVuLXZlcnRleC1kYXRhXCI6MjI0LFwiaXMtb2JqXCI6NDE0LFwibWF0aC1sb2cyXCI6NDI1LFwicGFyc2UtcmVjdFwiOjQ1MixcInBpY2stYnktYWxpYXNcIjo0NTh9XSw0NjU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9W10sYT1bXSxzPTA7czxlOysrcylmb3IodmFyIHU9dFtzXSxoPXUubGVuZ3RoLGY9aC0xLHA9MDtwPGg7Zj1wKyspe3ZhciBkPXVbZl0sZz11W3BdO2RbMF09PT1nWzBdP2EucHVzaChbZCxnXSk6ci5wdXNoKFtkLGddKX1pZigwPT09ci5sZW5ndGgpcmV0dXJuIDA9PT1hLmxlbmd0aD9jOih2PWwoYSksZnVuY3Rpb24odCl7cmV0dXJuIHYodFswXSx0WzFdKT8wOjF9KTt2YXIgdjt2YXIgbT1pKHIpLHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIGk9by5sZShlLHJbMF0pO2lmKGk8MClyZXR1cm4gMTt2YXIgYT10W2ldO2lmKCFhKXtpZighKGk+MCYmZVtpXT09PXJbMF0pKXJldHVybiAxO2E9dFtpLTFdfWZvcih2YXIgcz0xO2E7KXt2YXIgbD1hLmtleSxjPW4ocixsWzBdLGxbMV0pO2lmKGxbMF1bMF08bFsxXVswXSlpZihjPDApYT1hLmxlZnQ7ZWxzZXtpZighKGM+MCkpcmV0dXJuIDA7cz0tMSxhPWEucmlnaHR9ZWxzZSBpZihjPjApYT1hLmxlZnQ7ZWxzZXtpZighKGM8MCkpcmV0dXJuIDA7cz0xLGE9YS5yaWdodH19cmV0dXJuIHN9fShtLnNsYWJzLG0uY29vcmRpbmF0ZXMpO3JldHVybiAwPT09YS5sZW5ndGg/eTpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdChyWzBdLHJbMV0pPzA6ZShyKX19KGwoYSkseSl9O3ZhciBuPXQoXCJyb2J1c3Qtb3JpZW50YXRpb25cIilbM10saT10KFwic2xhYi1kZWNvbXBvc2l0aW9uXCIpLGE9dChcImludGVydmFsLXRyZWUtMWRcIiksbz10KFwiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIik7ZnVuY3Rpb24gcygpe3JldHVybiEwfWZ1bmN0aW9uIGwodCl7Zm9yKHZhciBlPXt9LHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG49dFtyXSxpPW5bMF1bMF0sbz1uWzBdWzFdLGw9blsxXVsxXSxjPVtNYXRoLm1pbihvLGwpLE1hdGgubWF4KG8sbCldO2kgaW4gZT9lW2ldLnB1c2goYyk6ZVtpXT1bY119dmFyIHU9e30saD1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8aC5sZW5ndGg7KytyKXt2YXIgZj1lW2hbcl1dO3VbaFtyXV09YShmKX1yZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIG49dFtlXTtyZXR1cm4hIW4mJiEhbi5xdWVyeVBvaW50KHIscyl9fSh1KX1mdW5jdGlvbiBjKHQpe3JldHVybiAxfX0se1wiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIjo4MixcImludGVydmFsLXRyZWUtMWRcIjo0MDcsXCJyb2J1c3Qtb3JpZW50YXRpb25cIjo0OTUsXCJzbGFiLWRlY29tcG9zaXRpb25cIjo1MTF9XSw0NjY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbixpPXQoXCIuL2xpYi9idWlsZC1sb2dcIiksYT10KFwiLi9saWIvZXBzaWxvblwiKSxvPXQoXCIuL2xpYi9pbnRlcnNlY3RlclwiKSxzPXQoXCIuL2xpYi9zZWdtZW50LWNoYWluZXJcIiksbD10KFwiLi9saWIvc2VnbWVudC1zZWxlY3RvclwiKSxjPXQoXCIuL2xpYi9nZW9qc29uXCIpLHU9ITEsaD1hKCk7ZnVuY3Rpb24gZih0LGUscil7dmFyIGk9bi5zZWdtZW50cyh0KSxhPW4uc2VnbWVudHMoZSksbz1yKG4uY29tYmluZShpLGEpKTtyZXR1cm4gbi5wb2x5Z29uKG8pfW49e2J1aWxkTG9nOmZ1bmN0aW9uKHQpe3JldHVybiEwPT09dD91PWkoKTohMT09PXQmJih1PSExKSwhMSE9PXUmJnUubGlzdH0sZXBzaWxvbjpmdW5jdGlvbih0KXtyZXR1cm4gaC5lcHNpbG9uKHQpfSxzZWdtZW50czpmdW5jdGlvbih0KXt2YXIgZT1vKCEwLGgsdSk7cmV0dXJuIHQucmVnaW9ucy5mb3JFYWNoKGUuYWRkUmVnaW9uKSx7c2VnbWVudHM6ZS5jYWxjdWxhdGUodC5pbnZlcnRlZCksaW52ZXJ0ZWQ6dC5pbnZlcnRlZH19LGNvbWJpbmU6ZnVuY3Rpb24odCxlKXtyZXR1cm57Y29tYmluZWQ6byghMSxoLHUpLmNhbGN1bGF0ZSh0LnNlZ21lbnRzLHQuaW52ZXJ0ZWQsZS5zZWdtZW50cyxlLmludmVydGVkKSxpbnZlcnRlZDE6dC5pbnZlcnRlZCxpbnZlcnRlZDI6ZS5pbnZlcnRlZH19LHNlbGVjdFVuaW9uOmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLnVuaW9uKHQuY29tYmluZWQsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZDF8fHQuaW52ZXJ0ZWQyfX0sc2VsZWN0SW50ZXJzZWN0OmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLmludGVyc2VjdCh0LmNvbWJpbmVkLHUpLGludmVydGVkOnQuaW52ZXJ0ZWQxJiZ0LmludmVydGVkMn19LHNlbGVjdERpZmZlcmVuY2U6ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwuZGlmZmVyZW5jZSh0LmNvbWJpbmVkLHUpLGludmVydGVkOnQuaW52ZXJ0ZWQxJiYhdC5pbnZlcnRlZDJ9fSxzZWxlY3REaWZmZXJlbmNlUmV2OmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLmRpZmZlcmVuY2VSZXYodC5jb21iaW5lZCx1KSxpbnZlcnRlZDohdC5pbnZlcnRlZDEmJnQuaW52ZXJ0ZWQyfX0sc2VsZWN0WG9yOmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLnhvcih0LmNvbWJpbmVkLHUpLGludmVydGVkOnQuaW52ZXJ0ZWQxIT09dC5pbnZlcnRlZDJ9fSxwb2x5Z29uOmZ1bmN0aW9uKHQpe3JldHVybntyZWdpb25zOnModC5zZWdtZW50cyxoLHUpLGludmVydGVkOnQuaW52ZXJ0ZWR9fSxwb2x5Z29uRnJvbUdlb0pTT046ZnVuY3Rpb24odCl7cmV0dXJuIGMudG9Qb2x5Z29uKG4sdCl9LHBvbHlnb25Ub0dlb0pTT046ZnVuY3Rpb24odCl7cmV0dXJuIGMuZnJvbVBvbHlnb24obixoLHQpfSx1bmlvbjpmdW5jdGlvbih0LGUpe3JldHVybiBmKHQsZSxuLnNlbGVjdFVuaW9uKX0saW50ZXJzZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYodCxlLG4uc2VsZWN0SW50ZXJzZWN0KX0sZGlmZmVyZW5jZTpmdW5jdGlvbih0LGUpe3JldHVybiBmKHQsZSxuLnNlbGVjdERpZmZlcmVuY2UpfSxkaWZmZXJlbmNlUmV2OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYodCxlLG4uc2VsZWN0RGlmZmVyZW5jZVJldil9LHhvcjpmdW5jdGlvbih0LGUpe3JldHVybiBmKHQsZSxuLnNlbGVjdFhvcil9fSxcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiYod2luZG93LlBvbHlCb29sPW4pLGUuZXhwb3J0cz1ufSx7XCIuL2xpYi9idWlsZC1sb2dcIjo0NjcsXCIuL2xpYi9lcHNpbG9uXCI6NDY4LFwiLi9saWIvZ2VvanNvblwiOjQ2OSxcIi4vbGliL2ludGVyc2VjdGVyXCI6NDcwLFwiLi9saWIvc2VnbWVudC1jaGFpbmVyXCI6NDcyLFwiLi9saWIvc2VnbWVudC1zZWxlY3RvclwiOjQ3M31dLDQ2NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGU9MCxyPSExO2Z1bmN0aW9uIG4oZSxyKXtyZXR1cm4gdC5saXN0LnB1c2goe3R5cGU6ZSxkYXRhOnI/SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyKSk6dm9pZCAwfSksdH1yZXR1cm4gdD17bGlzdDpbXSxzZWdtZW50SWQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSsrfSxjaGVja0ludGVyc2VjdGlvbjpmdW5jdGlvbih0LGUpe3JldHVybiBuKFwiY2hlY2tcIix7c2VnMTp0LHNlZzI6ZX0pfSxzZWdtZW50Q2hvcDpmdW5jdGlvbih0LGUpe3JldHVybiBuKFwiZGl2X3NlZ1wiLHtzZWc6dCxwdDplfSksbihcImNob3BcIix7c2VnOnQscHQ6ZX0pfSxzdGF0dXNSZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJwb3Bfc2VnXCIse3NlZzp0fSl9LHNlZ21lbnRVcGRhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJzZWdfdXBkYXRlXCIse3NlZzp0fSl9LHNlZ21lbnROZXc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihcIm5ld19zZWdcIix7c2VnOnQscHJpbWFyeTplfSl9LHNlZ21lbnRSZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJyZW1fc2VnXCIse3NlZzp0fSl9LHRlbXBTdGF0dXM6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKFwidGVtcF9zdGF0dXNcIix7c2VnOnQsYWJvdmU6ZSxiZWxvdzpyfSl9LHJld2luZDpmdW5jdGlvbih0KXtyZXR1cm4gbihcInJld2luZFwiLHtzZWc6dH0pfSxzdGF0dXM6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKFwic3RhdHVzXCIse3NlZzp0LGFib3ZlOmUsYmVsb3c6cn0pfSx2ZXJ0OmZ1bmN0aW9uKGUpe3JldHVybiBlPT09cj90OihyPWUsbihcInZlcnRcIix7eDplfSkpfSxsb2c6ZnVuY3Rpb24odCl7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIHQmJih0PUpTT04uc3RyaW5naWZ5KHQsITEsXCIgIFwiKSksbihcImxvZ1wiLHt0eHQ6dH0pfSxyZXNldDpmdW5jdGlvbigpe3JldHVybiBuKFwicmVzZXRcIil9LHNlbGVjdGVkOmZ1bmN0aW9uKHQpe3JldHVybiBuKFwic2VsZWN0ZWRcIix7c2Vnczp0fSl9LGNoYWluU3RhcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJjaGFpbl9zdGFydFwiLHtzZWc6dH0pfSxjaGFpblJlbW92ZUhlYWQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihcImNoYWluX3JlbV9oZWFkXCIse2luZGV4OnQscHQ6ZX0pfSxjaGFpblJlbW92ZVRhaWw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihcImNoYWluX3JlbV90YWlsXCIse2luZGV4OnQscHQ6ZX0pfSxjaGFpbk5ldzpmdW5jdGlvbih0LGUpe3JldHVybiBuKFwiY2hhaW5fbmV3XCIse3B0MTp0LHB0MjplfSl9LGNoYWluTWF0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJjaGFpbl9tYXRjaFwiLHtpbmRleDp0fSl9LGNoYWluQ2xvc2U6ZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJjaGFpbl9jbG9zZVwiLHtpbmRleDp0fSl9LGNoYWluQWRkSGVhZDpmdW5jdGlvbih0LGUpe3JldHVybiBuKFwiY2hhaW5fYWRkX2hlYWRcIix7aW5kZXg6dCxwdDplfSl9LGNoYWluQWRkVGFpbDpmdW5jdGlvbih0LGUpe3JldHVybiBuKFwiY2hhaW5fYWRkX3RhaWxcIix7aW5kZXg6dCxwdDplfSl9LGNoYWluQ29ubmVjdDpmdW5jdGlvbih0LGUpe3JldHVybiBuKFwiY2hhaW5fY29uXCIse2luZGV4MTp0LGluZGV4MjplfSl9LGNoYWluUmV2ZXJzZTpmdW5jdGlvbih0KXtyZXR1cm4gbihcImNoYWluX3JldlwiLHtpbmRleDp0fSl9LGNoYWluSm9pbjpmdW5jdGlvbih0LGUpe3JldHVybiBuKFwiY2hhaW5fam9pblwiLHtpbmRleDE6dCxpbmRleDI6ZX0pfSxkb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG4oXCJkb25lXCIpfX19fSx7fV0sNDY4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe1wibnVtYmVyXCIhPXR5cGVvZiB0JiYodD0xZS0xMCk7dmFyIGU9e2Vwc2lsb246ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUmJih0PWUpLHR9LHBvaW50QWJvdmVPck9uTGluZTpmdW5jdGlvbihlLHIsbil7dmFyIGk9clswXSxhPXJbMV0sbz1uWzBdLHM9blsxXSxsPWVbMF07cmV0dXJuKG8taSkqKGVbMV0tYSktKHMtYSkqKGwtaSk+PS10fSxwb2ludEJldHdlZW46ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWVbMV0tclsxXSxhPW5bMF0tclswXSxvPWVbMF0tclswXSxzPW5bMV0tclsxXSxsPW8qYStpKnM7cmV0dXJuIShsPHR8fGwtKGEqYStzKnMpPi10KX0scG9pbnRzU2FtZVg6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gTWF0aC5hYnMoZVswXS1yWzBdKTx0fSxwb2ludHNTYW1lWTpmdW5jdGlvbihlLHIpe3JldHVybiBNYXRoLmFicyhlWzFdLXJbMV0pPHR9LHBvaW50c1NhbWU6ZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5wb2ludHNTYW1lWCh0LHIpJiZlLnBvaW50c1NhbWVZKHQscil9LHBvaW50c0NvbXBhcmU6ZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5wb2ludHNTYW1lWCh0LHIpP2UucG9pbnRzU2FtZVkodCxyKT8wOnRbMV08clsxXT8tMToxOnRbMF08clswXT8tMToxfSxwb2ludHNDb2xsaW5lYXI6ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWVbMF0tclswXSxhPWVbMV0tclsxXSxvPXJbMF0tblswXSxzPXJbMV0tblsxXTtyZXR1cm4gTWF0aC5hYnMoaSpzLW8qYSk8dH0sbGluZXNJbnRlcnNlY3Q6ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9clswXS1lWzBdLG89clsxXS1lWzFdLHM9aVswXS1uWzBdLGw9aVsxXS1uWzFdLGM9YSpsLW8qcztpZihNYXRoLmFicyhjKTx0KXJldHVybiExO3ZhciB1PWVbMF0tblswXSxoPWVbMV0tblsxXSxmPShzKmgtbCp1KS9jLHA9KGEqaC1vKnUpL2MsZD17YWxvbmdBOjAsYWxvbmdCOjAscHQ6W2VbMF0rZiphLGVbMV0rZipvXX07cmV0dXJuIGQuYWxvbmdBPWY8PS10Py0yOmY8dD8tMTpmLTE8PS10PzA6Zi0xPHQ/MToyLGQuYWxvbmdCPXA8PS10Py0yOnA8dD8tMTpwLTE8PS10PzA6cC0xPHQ/MToyLGR9LHBvaW50SW5zaWRlUmVnaW9uOmZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPWVbMF0saT1lWzFdLGE9cltyLmxlbmd0aC0xXVswXSxvPXJbci5sZW5ndGgtMV1bMV0scz0hMSxsPTA7bDxyLmxlbmd0aDtsKyspe3ZhciBjPXJbbF1bMF0sdT1yW2xdWzFdO3UtaT50IT1vLWk+dCYmKGEtYykqKGktdSkvKG8tdSkrYy1uPnQmJihzPSFzKSxhPWMsbz11fXJldHVybiBzfX07cmV0dXJuIGV9fSx7fV0sNDY5OltmdW5jdGlvbih0LGUscil7dmFyIG49e3RvUG9seWdvbjpmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoZSl7aWYoZS5sZW5ndGg8PTApcmV0dXJuIHQuc2VnbWVudHMoe2ludmVydGVkOiExLHJlZ2lvbnM6W119KTtmdW5jdGlvbiByKGUpe3ZhciByPWUuc2xpY2UoMCxlLmxlbmd0aC0xKTtyZXR1cm4gdC5zZWdtZW50cyh7aW52ZXJ0ZWQ6ITEscmVnaW9uczpbcl19KX1mb3IodmFyIG49cihlWzBdKSxpPTE7aTxlLmxlbmd0aDtpKyspbj10LnNlbGVjdERpZmZlcmVuY2UodC5jb21iaW5lKG4scihlW2ldKSkpO3JldHVybiBufWlmKFwiUG9seWdvblwiPT09ZS50eXBlKXJldHVybiB0LnBvbHlnb24ocihlLmNvb3JkaW5hdGVzKSk7aWYoXCJNdWx0aVBvbHlnb25cIj09PWUudHlwZSl7Zm9yKHZhciBuPXQuc2VnbWVudHMoe2ludmVydGVkOiExLHJlZ2lvbnM6W119KSxpPTA7aTxlLmNvb3JkaW5hdGVzLmxlbmd0aDtpKyspbj10LnNlbGVjdFVuaW9uKHQuY29tYmluZShuLHIoZS5jb29yZGluYXRlc1tpXSkpKTtyZXR1cm4gdC5wb2x5Z29uKG4pfXRocm93IG5ldyBFcnJvcihcIlBvbHlCb29sOiBDYW5ub3QgY29udmVydCBHZW9KU09OIG9iamVjdCB0byBQb2x5Qm9vbCBwb2x5Z29uXCIpfSxmcm9tUG9seWdvbjpmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LHIpe3JldHVybiBlLnBvaW50SW5zaWRlUmVnaW9uKFsuNSoodFswXVswXSt0WzFdWzBdKSwuNSoodFswXVsxXSt0WzFdWzFdKV0scil9ZnVuY3Rpb24gaSh0KXtyZXR1cm57cmVnaW9uOnQsY2hpbGRyZW46W119fXI9dC5wb2x5Z29uKHQuc2VnbWVudHMocikpO3ZhciBhPWkobnVsbCk7ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5jaGlsZHJlbi5sZW5ndGg7cisrKXtpZihuKGUsKHM9dC5jaGlsZHJlbltyXSkucmVnaW9uKSlyZXR1cm4gdm9pZCBvKHMsZSl9dmFyIGE9aShlKTtmb3Iocj0wO3I8dC5jaGlsZHJlbi5sZW5ndGg7cisrKXt2YXIgcztuKChzPXQuY2hpbGRyZW5bcl0pLnJlZ2lvbixlKSYmKGEuY2hpbGRyZW4ucHVzaChzKSx0LmNoaWxkcmVuLnNwbGljZShyLDEpLHItLSl9dC5jaGlsZHJlbi5wdXNoKGEpfWZvcih2YXIgcz0wO3M8ci5yZWdpb25zLmxlbmd0aDtzKyspe3ZhciBsPXIucmVnaW9uc1tzXTtsLmxlbmd0aDwzfHxvKGEsbCl9ZnVuY3Rpb24gYyh0LGUpe2Zvcih2YXIgcj0wLG49dFt0Lmxlbmd0aC0xXVswXSxpPXRbdC5sZW5ndGgtMV1bMV0sYT1bXSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb11bMF0sbD10W29dWzFdO2EucHVzaChbcyxsXSkscis9bCpuLXMqaSxuPXMsaT1sfXJldHVybiByPDAhPT1lJiZhLnJldmVyc2UoKSxhLnB1c2goW2FbMF1bMF0sYVswXVsxXV0pLGF9dmFyIHU9W107ZnVuY3Rpb24gaCh0KXt2YXIgZT1bYyh0LnJlZ2lvbiwhMSldO3UucHVzaChlKTtmb3IodmFyIHI9MDtyPHQuY2hpbGRyZW4ubGVuZ3RoO3IrKyllLnB1c2goZih0LmNoaWxkcmVuW3JdKSl9ZnVuY3Rpb24gZih0KXtmb3IodmFyIGU9MDtlPHQuY2hpbGRyZW4ubGVuZ3RoO2UrKyloKHQuY2hpbGRyZW5bZV0pO3JldHVybiBjKHQucmVnaW9uLCEwKX1mb3Iocz0wO3M8YS5jaGlsZHJlbi5sZW5ndGg7cysrKWgoYS5jaGlsZHJlbltzXSk7cmV0dXJuIHUubGVuZ3RoPD0wP3t0eXBlOlwiUG9seWdvblwiLGNvb3JkaW5hdGVzOltdfToxPT11Lmxlbmd0aD97dHlwZTpcIlBvbHlnb25cIixjb29yZGluYXRlczp1WzBdfTp7dHlwZTpcIk11bHRpUG9seWdvblwiLGNvb3JkaW5hdGVzOnV9fX07ZS5leHBvcnRzPW59LHt9XSw0NzA6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi9saW5rZWQtbGlzdFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGkodCxlLG4pe3JldHVybntpZDpyP3Iuc2VnbWVudElkKCk6LTEsc3RhcnQ6dCxlbmQ6ZSxteUZpbGw6e2Fib3ZlOm4ubXlGaWxsLmFib3ZlLGJlbG93Om4ubXlGaWxsLmJlbG93fSxvdGhlckZpbGw6bnVsbH19dmFyIGE9bi5jcmVhdGUoKTtmdW5jdGlvbiBvKHQscil7YS5pbnNlcnRCZWZvcmUodCxmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24odCxyLG4saSxhLG8pe3ZhciBzPWUucG9pbnRzQ29tcGFyZShyLGEpO3JldHVybiAwIT09cz9zOmUucG9pbnRzU2FtZShuLG8pPzA6dCE9PWk/dD8xOi0xOmUucG9pbnRBYm92ZU9yT25MaW5lKG4saT9hOm8saT9vOmEpPzE6LTF9KHQuaXNTdGFydCx0LnB0LHIsbi5pc1N0YXJ0LG4ucHQsbi5vdGhlci5wdCk8MH0pfWZ1bmN0aW9uIHModCxlKXt2YXIgcj1mdW5jdGlvbih0LGUpe3ZhciByPW4ubm9kZSh7aXNTdGFydDohMCxwdDp0LnN0YXJ0LHNlZzp0LHByaW1hcnk6ZSxvdGhlcjpudWxsLHN0YXR1czpudWxsfSk7cmV0dXJuIG8ocix0LmVuZCkscn0odCxlKTtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3ZhciBpPW4ubm9kZSh7aXNTdGFydDohMSxwdDplLmVuZCxzZWc6ZSxwcmltYXJ5OnIsb3RoZXI6dCxzdGF0dXM6bnVsbH0pO3Qub3RoZXI9aSxvKGksdC5wdCl9KHIsdCxlKSxyfWZ1bmN0aW9uIGwodCxlKXt2YXIgbj1pKGUsdC5zZWcuZW5kLHQuc2VnKTtyZXR1cm4gZnVuY3Rpb24odCxlKXtyJiZyLnNlZ21lbnRDaG9wKHQuc2VnLGUpLHQub3RoZXIucmVtb3ZlKCksdC5zZWcuZW5kPWUsdC5vdGhlci5wdD1lLG8odC5vdGhlcix0LnB0KX0odCxlKSxzKG4sdC5wcmltYXJ5KX1mdW5jdGlvbiBjKGksbyl7dmFyIHM9bi5jcmVhdGUoKTtmdW5jdGlvbiBjKHQpe3JldHVybiBzLmZpbmRUcmFuc2l0aW9uKGZ1bmN0aW9uKHIpe3ZhciBuLGksYSxvLHMsbDtyZXR1cm4gbj10LGk9ci5ldixhPW4uc2VnLnN0YXJ0LG89bi5zZWcuZW5kLHM9aS5zZWcuc3RhcnQsbD1pLnNlZy5lbmQsKGUucG9pbnRzQ29sbGluZWFyKGEscyxsKT9lLnBvaW50c0NvbGxpbmVhcihvLHMsbCk/MTplLnBvaW50QWJvdmVPck9uTGluZShvLHMsbCk/MTotMTplLnBvaW50QWJvdmVPck9uTGluZShhLHMsbCk/MTotMSk+MH0pfWZ1bmN0aW9uIHUodCxuKXt2YXIgaT10LnNlZyxhPW4uc2VnLG89aS5zdGFydCxzPWkuZW5kLGM9YS5zdGFydCx1PWEuZW5kO3ImJnIuY2hlY2tJbnRlcnNlY3Rpb24oaSxhKTt2YXIgaD1lLmxpbmVzSW50ZXJzZWN0KG8scyxjLHUpO2lmKCExPT09aCl7aWYoIWUucG9pbnRzQ29sbGluZWFyKG8scyxjKSlyZXR1cm4hMTtpZihlLnBvaW50c1NhbWUobyx1KXx8ZS5wb2ludHNTYW1lKHMsYykpcmV0dXJuITE7dmFyIGY9ZS5wb2ludHNTYW1lKG8sYykscD1lLnBvaW50c1NhbWUocyx1KTtpZihmJiZwKXJldHVybiBuO3ZhciBkPSFmJiZlLnBvaW50QmV0d2VlbihvLGMsdSksZz0hcCYmZS5wb2ludEJldHdlZW4ocyxjLHUpO2lmKGYpcmV0dXJuIGc/bChuLHMpOmwodCx1KSxuO2QmJihwfHwoZz9sKG4scyk6bCh0LHUpKSxsKG4sbykpfWVsc2UgMD09PWguYWxvbmdBJiYoLTE9PT1oLmFsb25nQj9sKHQsYyk6MD09PWguYWxvbmdCP2wodCxoLnB0KToxPT09aC5hbG9uZ0ImJmwodCx1KSksMD09PWguYWxvbmdCJiYoLTE9PT1oLmFsb25nQT9sKG4sbyk6MD09PWguYWxvbmdBP2wobixoLnB0KToxPT09aC5hbG9uZ0EmJmwobixzKSk7cmV0dXJuITF9Zm9yKHZhciBoPVtdOyFhLmlzRW1wdHkoKTspe3ZhciBmPWEuZ2V0SGVhZCgpO2lmKHImJnIudmVydChmLnB0WzBdKSxmLmlzU3RhcnQpe3ImJnIuc2VnbWVudE5ldyhmLnNlZyxmLnByaW1hcnkpO3ZhciBwPWMoZiksZD1wLmJlZm9yZT9wLmJlZm9yZS5ldjpudWxsLGc9cC5hZnRlcj9wLmFmdGVyLmV2Om51bGw7ZnVuY3Rpb24gdigpe2lmKGQpe3ZhciB0PXUoZixkKTtpZih0KXJldHVybiB0fXJldHVybiEhZyYmdShmLGcpfXImJnIudGVtcFN0YXR1cyhmLnNlZywhIWQmJmQuc2VnLCEhZyYmZy5zZWcpO3ZhciBtLHkseD12KCk7aWYoeCl0Pyh5PW51bGw9PT1mLnNlZy5teUZpbGwuYmVsb3d8fGYuc2VnLm15RmlsbC5hYm92ZSE9PWYuc2VnLm15RmlsbC5iZWxvdykmJih4LnNlZy5teUZpbGwuYWJvdmU9IXguc2VnLm15RmlsbC5hYm92ZSk6eC5zZWcub3RoZXJGaWxsPWYuc2VnLm15RmlsbCxyJiZyLnNlZ21lbnRVcGRhdGUoeC5zZWcpLGYub3RoZXIucmVtb3ZlKCksZi5yZW1vdmUoKTtpZihhLmdldEhlYWQoKSE9PWYpe3ImJnIucmV3aW5kKGYuc2VnKTtjb250aW51ZX10Pyh5PW51bGw9PT1mLnNlZy5teUZpbGwuYmVsb3d8fGYuc2VnLm15RmlsbC5hYm92ZSE9PWYuc2VnLm15RmlsbC5iZWxvdyxmLnNlZy5teUZpbGwuYmVsb3c9Zz9nLnNlZy5teUZpbGwuYWJvdmU6aSxmLnNlZy5teUZpbGwuYWJvdmU9eT8hZi5zZWcubXlGaWxsLmJlbG93OmYuc2VnLm15RmlsbC5iZWxvdyk6bnVsbD09PWYuc2VnLm90aGVyRmlsbCYmKG09Zz9mLnByaW1hcnk9PT1nLnByaW1hcnk/Zy5zZWcub3RoZXJGaWxsLmFib3ZlOmcuc2VnLm15RmlsbC5hYm92ZTpmLnByaW1hcnk/bzppLGYuc2VnLm90aGVyRmlsbD17YWJvdmU6bSxiZWxvdzptfSksciYmci5zdGF0dXMoZi5zZWcsISFkJiZkLnNlZywhIWcmJmcuc2VnKSxmLm90aGVyLnN0YXR1cz1wLmluc2VydChuLm5vZGUoe2V2OmZ9KSl9ZWxzZXt2YXIgYj1mLnN0YXR1cztpZihudWxsPT09Yil0aHJvdyBuZXcgRXJyb3IoXCJQb2x5Qm9vbDogWmVyby1sZW5ndGggc2VnbWVudCBkZXRlY3RlZDsgeW91ciBlcHNpbG9uIGlzIHByb2JhYmx5IHRvbyBzbWFsbCBvciB0b28gbGFyZ2VcIik7aWYocy5leGlzdHMoYi5wcmV2KSYmcy5leGlzdHMoYi5uZXh0KSYmdShiLnByZXYuZXYsYi5uZXh0LmV2KSxyJiZyLnN0YXR1c1JlbW92ZShiLmV2LnNlZyksYi5yZW1vdmUoKSwhZi5wcmltYXJ5KXt2YXIgXz1mLnNlZy5teUZpbGw7Zi5zZWcubXlGaWxsPWYuc2VnLm90aGVyRmlsbCxmLnNlZy5vdGhlckZpbGw9X31oLnB1c2goZi5zZWcpfWEuZ2V0SGVhZCgpLnJlbW92ZSgpfXJldHVybiByJiZyLmRvbmUoKSxofXJldHVybiB0P3thZGRSZWdpb246ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGksYSxvPXRbdC5sZW5ndGgtMV0sbD0wO2w8dC5sZW5ndGg7bCsrKXtuPW8sbz10W2xdO3ZhciBjPWUucG9pbnRzQ29tcGFyZShuLG8pOzAhPT1jJiZzKChpPWM8MD9uOm8sYT1jPDA/bzpuLHtpZDpyP3Iuc2VnbWVudElkKCk6LTEsc3RhcnQ6aSxlbmQ6YSxteUZpbGw6e2Fib3ZlOm51bGwsYmVsb3c6bnVsbH0sb3RoZXJGaWxsOm51bGx9KSwhMCl9fSxjYWxjdWxhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwhMSl9fTp7Y2FsY3VsYXRlOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7cyhpKHQuc3RhcnQsdC5lbmQsdCksITApfSksci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3MoaSh0LnN0YXJ0LHQuZW5kLHQpLCExKX0pLGMoZSxuKX19fX0se1wiLi9saW5rZWQtbGlzdFwiOjQ3MX1dLDQ3MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17Y3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9e3Jvb3Q6e3Jvb3Q6ITAsbmV4dDpudWxsfSxleGlzdHM6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lJiZlIT09dC5yb290fSxpc0VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10LnJvb3QubmV4dH0sZ2V0SGVhZDpmdW5jdGlvbigpe3JldHVybiB0LnJvb3QubmV4dH0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPXQucm9vdCxpPXQucm9vdC5uZXh0O251bGwhPT1pOyl7aWYocihpKSlyZXR1cm4gZS5wcmV2PWkucHJldixlLm5leHQ9aSxpLnByZXYubmV4dD1lLHZvaWQoaS5wcmV2PWUpO249aSxpPWkubmV4dH1uLm5leHQ9ZSxlLnByZXY9bixlLm5leHQ9bnVsbH0sZmluZFRyYW5zaXRpb246ZnVuY3Rpb24oZSl7Zm9yKHZhciByPXQucm9vdCxuPXQucm9vdC5uZXh0O251bGwhPT1uJiYhZShuKTspcj1uLG49bi5uZXh0O3JldHVybntiZWZvcmU6cj09PXQucm9vdD9udWxsOnIsYWZ0ZXI6bixpbnNlcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldj1yLHQubmV4dD1uLHIubmV4dD10LG51bGwhPT1uJiYobi5wcmV2PXQpLHR9fX19O3JldHVybiB0fSxub2RlOmZ1bmN0aW9uKHQpe3JldHVybiB0LnByZXY9bnVsbCx0Lm5leHQ9bnVsbCx0LnJlbW92ZT1mdW5jdGlvbigpe3QucHJldi5uZXh0PXQubmV4dCx0Lm5leHQmJih0Lm5leHQucHJldj10LnByZXYpLHQucHJldj1udWxsLHQubmV4dD1udWxsfSx0fX19LHt9XSw0NzI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVtdLGk9W107cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgYT10LnN0YXJ0LG89dC5lbmQ7aWYoZS5wb2ludHNTYW1lKGEsbykpY29uc29sZS53YXJuKFwiUG9seUJvb2w6IFdhcm5pbmc6IFplcm8tbGVuZ3RoIHNlZ21lbnQgZGV0ZWN0ZWQ7IHlvdXIgZXBzaWxvbiBpcyBwcm9iYWJseSB0b28gc21hbGwgb3IgdG9vIGxhcmdlXCIpO2Vsc2V7ciYmci5jaGFpblN0YXJ0KHQpO2Zvcih2YXIgcz17aW5kZXg6MCxtYXRjaGVzX2hlYWQ6ITEsbWF0Y2hlc19wdDE6ITF9LGw9e2luZGV4OjAsbWF0Y2hlc19oZWFkOiExLG1hdGNoZXNfcHQxOiExfSxjPXMsdT0wO3U8bi5sZW5ndGg7dSsrKXt2YXIgaD0odj1uW3VdKVswXSxmPSh2WzFdLHZbdi5sZW5ndGgtMV0pO2lmKHZbdi5sZW5ndGgtMl0sZS5wb2ludHNTYW1lKGgsYSkpe2lmKEEodSwhMCwhMCkpYnJlYWt9ZWxzZSBpZihlLnBvaW50c1NhbWUoaCxvKSl7aWYoQSh1LCEwLCExKSlicmVha31lbHNlIGlmKGUucG9pbnRzU2FtZShmLGEpKXtpZihBKHUsITEsITApKWJyZWFrfWVsc2UgaWYoZS5wb2ludHNTYW1lKGYsbykmJkEodSwhMSwhMSkpYnJlYWt9aWYoYz09PXMpcmV0dXJuIG4ucHVzaChbYSxvXSksdm9pZChyJiZyLmNoYWluTmV3KGEsbykpO2lmKGM9PT1sKXtyJiZyLmNoYWluTWF0Y2gocy5pbmRleCk7dmFyIHA9cy5pbmRleCxkPXMubWF0Y2hlc19wdDE/bzphLGc9cy5tYXRjaGVzX2hlYWQsdj1uW3BdLG09Zz92WzBdOnZbdi5sZW5ndGgtMV0seT1nP3ZbMV06dlt2Lmxlbmd0aC0yXSx4PWc/dlt2Lmxlbmd0aC0xXTp2WzBdLGI9Zz92W3YubGVuZ3RoLTJdOnZbMV07cmV0dXJuIGUucG9pbnRzQ29sbGluZWFyKHksbSxkKSYmKGc/KHImJnIuY2hhaW5SZW1vdmVIZWFkKHMuaW5kZXgsZCksdi5zaGlmdCgpKToociYmci5jaGFpblJlbW92ZVRhaWwocy5pbmRleCxkKSx2LnBvcCgpKSxtPXkpLGUucG9pbnRzU2FtZSh4LGQpPyhuLnNwbGljZShwLDEpLGUucG9pbnRzQ29sbGluZWFyKGIseCxtKSYmKGc/KHImJnIuY2hhaW5SZW1vdmVUYWlsKHMuaW5kZXgsbSksdi5wb3AoKSk6KHImJnIuY2hhaW5SZW1vdmVIZWFkKHMuaW5kZXgsbSksdi5zaGlmdCgpKSksciYmci5jaGFpbkNsb3NlKHMuaW5kZXgpLHZvaWQgaS5wdXNoKHYpKTp2b2lkKGc/KHImJnIuY2hhaW5BZGRIZWFkKHMuaW5kZXgsZCksdi51bnNoaWZ0KGQpKToociYmci5jaGFpbkFkZFRhaWwocy5pbmRleCxkKSx2LnB1c2goZCkpKX12YXIgXz1zLmluZGV4LHc9bC5pbmRleDtyJiZyLmNoYWluQ29ubmVjdChfLHcpO3ZhciBrPW5bX10ubGVuZ3RoPG5bd10ubGVuZ3RoO3MubWF0Y2hlc19oZWFkP2wubWF0Y2hlc19oZWFkP2s/KFQoXyksTShfLHcpKTooVCh3KSxNKHcsXykpOk0odyxfKTpsLm1hdGNoZXNfaGVhZD9NKF8sdyk6az8oVChfKSxNKHcsXykpOihUKHcpLE0oXyx3KSl9ZnVuY3Rpb24gQSh0LGUscil7cmV0dXJuIGMuaW5kZXg9dCxjLm1hdGNoZXNfaGVhZD1lLGMubWF0Y2hlc19wdDE9cixjPT09cz8oYz1sLCExKTooYz1udWxsLCEwKX1mdW5jdGlvbiBUKHQpe3ImJnIuY2hhaW5SZXZlcnNlKHQpLG5bdF0ucmV2ZXJzZSgpfWZ1bmN0aW9uIE0odCxpKXt2YXIgYT1uW3RdLG89bltpXSxzPWFbYS5sZW5ndGgtMV0sbD1hW2EubGVuZ3RoLTJdLGM9b1swXSx1PW9bMV07ZS5wb2ludHNDb2xsaW5lYXIobCxzLGMpJiYociYmci5jaGFpblJlbW92ZVRhaWwodCxzKSxhLnBvcCgpLHM9bCksZS5wb2ludHNDb2xsaW5lYXIocyxjLHUpJiYociYmci5jaGFpblJlbW92ZUhlYWQoaSxjKSxvLnNoaWZ0KCkpLHImJnIuY2hhaW5Kb2luKHQsaSksblt0XT1hLmNvbmNhdChvKSxuLnNwbGljZShpLDEpfX0pLGl9fSx7fV0sNDczOltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49W107cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgaT0odC5teUZpbGwuYWJvdmU/ODowKSsodC5teUZpbGwuYmVsb3c/NDowKSsodC5vdGhlckZpbGwmJnQub3RoZXJGaWxsLmFib3ZlPzI6MCkrKHQub3RoZXJGaWxsJiZ0Lm90aGVyRmlsbC5iZWxvdz8xOjApOzAhPT1lW2ldJiZuLnB1c2goe2lkOnI/ci5zZWdtZW50SWQoKTotMSxzdGFydDp0LnN0YXJ0LGVuZDp0LmVuZCxteUZpbGw6e2Fib3ZlOjE9PT1lW2ldLGJlbG93OjI9PT1lW2ldfSxvdGhlckZpbGw6bnVsbH0pfSksciYmci5zZWxlY3RlZChuKSxufXZhciBpPXt1bmlvbjpmdW5jdGlvbih0LGUpe3JldHVybiBuKHQsWzAsMiwxLDAsMiwyLDAsMCwxLDAsMSwwLDAsMCwwLDBdLGUpfSxpbnRlcnNlY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LFswLDAsMCwwLDAsMiwwLDIsMCwwLDEsMSwwLDIsMSwwXSxlKX0sZGlmZmVyZW5jZTpmdW5jdGlvbih0LGUpe3JldHVybiBuKHQsWzAsMCwwLDAsMiwwLDIsMCwxLDEsMCwwLDAsMSwyLDBdLGUpfSxkaWZmZXJlbmNlUmV2OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxbMCwyLDEsMCwwLDAsMSwxLDAsMiwwLDIsMCwwLDAsMF0sZSl9LHhvcjpmdW5jdGlvbih0LGUpe3JldHVybiBuKHQsWzAsMiwxLDAsMiwwLDAsMSwxLDAsMCwyLDAsMSwyLDBdLGUpfX07ZS5leHBvcnRzPWl9LHt9XSw0NzQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1uZXcgRmxvYXQ2NEFycmF5KDQpLGk9bmV3IEZsb2F0NjRBcnJheSg0KSxhPW5ldyBGbG9hdDY0QXJyYXkoNCk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyl7bi5sZW5ndGg8by5sZW5ndGgmJihuPW5ldyBGbG9hdDY0QXJyYXkoby5sZW5ndGgpLGk9bmV3IEZsb2F0NjRBcnJheShvLmxlbmd0aCksYT1uZXcgRmxvYXQ2NEFycmF5KG8ubGVuZ3RoKSk7Zm9yKHZhciBsPTA7bDxvLmxlbmd0aDsrK2wpbltsXT10W2xdLW9bbF0saVtsXT1lW2xdLXRbbF0sYVtsXT1yW2xdLXRbbF07dmFyIGM9MCx1PTAsaD0wLGY9MCxwPTAsZD0wO2ZvcihsPTA7bDxvLmxlbmd0aDsrK2wpe3ZhciBnPWlbbF0sdj1hW2xdLG09bltsXTtjKz1nKmcsdSs9Zyp2LGgrPXYqdixmKz1tKmcscCs9bSp2LGQrPW0qbX12YXIgeSx4LGIsXyx3LGs9TWF0aC5hYnMoYypoLXUqdSksQT11KnAtaCpmLFQ9dSpmLWMqcDtpZihBK1Q8PWspaWYoQTwwKVQ8MCYmZjwwPyhUPTAsLWY+PWM/KEE9MSx5PWMrMipmK2QpOnk9ZiooQT0tZi9jKStkKTooQT0wLHA+PTA/KFQ9MCx5PWQpOi1wPj1oPyhUPTEseT1oKzIqcCtkKTp5PXAqKFQ9LXAvaCkrZCk7ZWxzZSBpZihUPDApVD0wLGY+PTA/KEE9MCx5PWQpOi1mPj1jPyhBPTEseT1jKzIqZitkKTp5PWYqKEE9LWYvYykrZDtlbHNle3ZhciBNPTEvazt5PShBKj1NKSooYypBK3UqKFQqPU0pKzIqZikrVCoodSpBK2gqVCsyKnApK2R9ZWxzZSBBPDA/KGI9aCtwKT4oeD11K2YpPyhfPWIteCk+PSh3PWMtMip1K2gpPyhBPTEsVD0wLHk9YysyKmYrZCk6eT0oQT1fL3cpKihjKkErdSooVD0xLUEpKzIqZikrVCoodSpBK2gqVCsyKnApK2Q6KEE9MCxiPD0wPyhUPTEseT1oKzIqcCtkKTpwPj0wPyhUPTAseT1kKTp5PXAqKFQ9LXAvaCkrZCk6VDwwPyhiPWMrZik+KHg9dStwKT8oXz1iLXgpPj0odz1jLTIqdStoKT8oVD0xLEE9MCx5PWgrMipwK2QpOnk9KEE9MS0oVD1fL3cpKSooYypBK3UqVCsyKmYpK1QqKHUqQStoKlQrMipwKStkOihUPTAsYjw9MD8oQT0xLHk9YysyKmYrZCk6Zj49MD8oQT0wLHk9ZCk6eT1mKihBPS1mL2MpK2QpOihfPWgrcC11LWYpPD0wPyhBPTAsVD0xLHk9aCsyKnArZCk6Xz49KHc9Yy0yKnUraCk/KEE9MSxUPTAseT1jKzIqZitkKTp5PShBPV8vdykqKGMqQSt1KihUPTEtQSkrMipmKStUKih1KkEraCpUKzIqcCkrZDt2YXIgUz0xLUEtVDtmb3IobD0wO2w8by5sZW5ndGg7KytsKXNbbF09Uyp0W2xdK0EqZVtsXStUKnJbbF07cmV0dXJuIHk8MD8wOnl9fSx7fV0sNDc1OltmdW5jdGlvbih0LGUscil7dmFyIG4saSxhPWUuZXhwb3J0cz17fTtmdW5jdGlvbiBvKCl7dGhyb3cgbmV3IEVycm9yKFwic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZFwiKX1mdW5jdGlvbiBzKCl7dGhyb3cgbmV3IEVycm9yKFwiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfWZ1bmN0aW9uIGwodCl7aWYobj09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQodCwwKTtpZigobj09PW98fCFuKSYmc2V0VGltZW91dClyZXR1cm4gbj1zZXRUaW1lb3V0LHNldFRpbWVvdXQodCwwKTt0cnl7cmV0dXJuIG4odCwwKX1jYXRjaChlKXt0cnl7cmV0dXJuIG4uY2FsbChudWxsLHQsMCl9Y2F0Y2goZSl7cmV0dXJuIG4uY2FsbCh0aGlzLHQsMCl9fX0hZnVuY3Rpb24oKXt0cnl7bj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6b31jYXRjaCh0KXtuPW99dHJ5e2k9XCJmdW5jdGlvblwiPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDpzfWNhdGNoKHQpe2k9c319KCk7dmFyIGMsdT1bXSxoPSExLGY9LTE7ZnVuY3Rpb24gcCgpe2gmJmMmJihoPSExLGMubGVuZ3RoP3U9Yy5jb25jYXQodSk6Zj0tMSx1Lmxlbmd0aCYmZCgpKX1mdW5jdGlvbiBkKCl7aWYoIWgpe3ZhciB0PWwocCk7aD0hMDtmb3IodmFyIGU9dS5sZW5ndGg7ZTspe2ZvcihjPXUsdT1bXTsrK2Y8ZTspYyYmY1tmXS5ydW4oKTtmPS0xLGU9dS5sZW5ndGh9Yz1udWxsLGg9ITEsZnVuY3Rpb24odCl7aWYoaT09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KHQpO2lmKChpPT09c3x8IWkpJiZjbGVhclRpbWVvdXQpcmV0dXJuIGk9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dCh0KTt0cnl7aSh0KX1jYXRjaChlKXt0cnl7cmV0dXJuIGkuY2FsbChudWxsLHQpfWNhdGNoKGUpe3JldHVybiBpLmNhbGwodGhpcyx0KX19fSh0KX19ZnVuY3Rpb24gZyh0LGUpe3RoaXMuZnVuPXQsdGhpcy5hcnJheT1lfWZ1bmN0aW9uIHYoKXt9YS5uZXh0VGljaz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciByPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyllW3ItMV09YXJndW1lbnRzW3JdO3UucHVzaChuZXcgZyh0LGUpKSwxIT09dS5sZW5ndGh8fGh8fGwoZCl9LGcucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LGEudGl0bGU9XCJicm93c2VyXCIsYS5icm93c2VyPSEwLGEuZW52PXt9LGEuYXJndj1bXSxhLnZlcnNpb249XCJcIixhLnZlcnNpb25zPXt9LGEub249dixhLmFkZExpc3RlbmVyPXYsYS5vbmNlPXYsYS5vZmY9dixhLnJlbW92ZUxpc3RlbmVyPXYsYS5yZW1vdmVBbGxMaXN0ZW5lcnM9dixhLmVtaXQ9dixhLnByZXBlbmRMaXN0ZW5lcj12LGEucHJlcGVuZE9uY2VMaXN0ZW5lcj12LGEubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybltdfSxhLmJpbmRpbmc9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKFwicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWRcIil9LGEuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuXCIvXCJ9LGEuY2hkaXI9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKFwicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkXCIpfSxhLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSx7fV0sNDc2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoXCJnbC1xdWF0L3NsZXJwXCIpfSx7XCJnbC1xdWF0L3NsZXJwXCI6MjkwfV0sNDc3OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpe2Zvcih2YXIgbj10KFwicGVyZm9ybWFuY2Utbm93XCIpLGk9XCJ1bmRlZmluZWRcIj09dHlwZW9mIHdpbmRvdz9yOndpbmRvdyxhPVtcIm1velwiLFwid2Via2l0XCJdLG89XCJBbmltYXRpb25GcmFtZVwiLHM9aVtcInJlcXVlc3RcIitvXSxsPWlbXCJjYW5jZWxcIitvXXx8aVtcImNhbmNlbFJlcXVlc3RcIitvXSxjPTA7IXMmJmM8YS5sZW5ndGg7YysrKXM9aVthW2NdK1wiUmVxdWVzdFwiK29dLGw9aVthW2NdK1wiQ2FuY2VsXCIrb118fGlbYVtjXStcIkNhbmNlbFJlcXVlc3RcIitvXTtpZighc3x8IWwpe3ZhciB1PTAsaD0wLGY9W107cz1mdW5jdGlvbih0KXtpZigwPT09Zi5sZW5ndGgpe3ZhciBlPW4oKSxyPU1hdGgubWF4KDAsMWUzLzYwLShlLXUpKTt1PXIrZSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIHQ9Zi5zbGljZSgwKTtmLmxlbmd0aD0wO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKCF0W2VdLmNhbmNlbGxlZCl0cnl7dFtlXS5jYWxsYmFjayh1KX1jYXRjaCh0KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgdH0sMCl9fSxNYXRoLnJvdW5kKHIpKX1yZXR1cm4gZi5wdXNoKHtoYW5kbGU6KytoLGNhbGxiYWNrOnQsY2FuY2VsbGVkOiExfSksaH0sbD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPGYubGVuZ3RoO2UrKylmW2VdLmhhbmRsZT09PXQmJihmW2VdLmNhbmNlbGxlZD0hMCl9fWUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcy5jYWxsKGksdCl9LGUuZXhwb3J0cy5jYW5jZWw9ZnVuY3Rpb24oKXtsLmFwcGx5KGksYXJndW1lbnRzKX0sZS5leHBvcnRzLnBvbHlmaWxsPWZ1bmN0aW9uKHQpe3R8fCh0PWkpLHQucmVxdWVzdEFuaW1hdGlvbkZyYW1lPXMsdC5jYW5jZWxBbmltYXRpb25GcmFtZT1sfX0pLmNhbGwodGhpcyxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se1wicGVyZm9ybWFuY2Utbm93XCI6NDU1fV0sNDc4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImJpZy1yYXQvYWRkXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyOysrYSlpW2FdPW4odFthXSxlW2FdKTtyZXR1cm4gaX19LHtcImJpZy1yYXQvYWRkXCI6NjZ9XSw0Nzk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wO3I8dC5sZW5ndGg7KytyKWVbcl09bih0W3JdKTtyZXR1cm4gZX07dmFyIG49dChcImJpZy1yYXRcIil9LHtcImJpZy1yYXRcIjo2OX1dLDQ4MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJiaWctcmF0XCIpLGk9dChcImJpZy1yYXQvbXVsXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uKGUpLGE9dC5sZW5ndGgsbz1uZXcgQXJyYXkoYSkscz0wO3M8YTsrK3Mpb1tzXT1pKHRbc10scik7cmV0dXJuIG99fSx7XCJiaWctcmF0XCI6NjksXCJiaWctcmF0L211bFwiOjc4fV0sNDgxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImJpZy1yYXQvc3ViXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyOysrYSlpW2FdPW4odFthXSxlW2FdKTtyZXR1cm4gaX19LHtcImJpZy1yYXQvc3ViXCI6ODB9XSw0ODI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiY29tcGFyZS1jZWxsXCIpLGk9dChcImNvbXBhcmUtb3JpZW50ZWQtY2VsbFwiKSxhPXQoXCJjZWxsLW9yaWVudGF0aW9uXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt0LnNvcnQoaSk7Zm9yKHZhciBlPXQubGVuZ3RoLHI9MCxvPTA7bzxlOysrbyl7dmFyIHM9dFtvXSxsPWEocyk7aWYoMCE9PWwpe2lmKHI+MCl7dmFyIGM9dFtyLTFdO2lmKDA9PT1uKHMsYykmJmEoYykhPT1sKXtyLT0xO2NvbnRpbnVlfX10W3IrK109c319cmV0dXJuIHQubGVuZ3RoPXIsdH19LHtcImNlbGwtb3JpZW50YXRpb25cIjoxMDMsXCJjb21wYXJlLWNlbGxcIjoxMTksXCJjb21wYXJlLW9yaWVudGVkLWNlbGxcIjoxMjB9XSw0ODM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiYXJyYXktYm91bmRzXCIpLGk9dChcImNvbG9yLW5vcm1hbGl6ZVwiKSxhPXQoXCJ1cGRhdGUtZGlmZlwiKSxvPXQoXCJwaWNrLWJ5LWFsaWFzXCIpLHM9dChcIm9iamVjdC1hc3NpZ25cIiksbD10KFwiZmxhdHRlbi12ZXJ0ZXgtZGF0YVwiKSxjPXQoXCJ0by1mbG9hdDMyXCIpLHU9Yy5mbG9hdDMyLGg9Yy5mcmFjdDMyO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe1wiZnVuY3Rpb25cIj09dHlwZW9mIHQ/KGV8fChlPXt9KSxlLnJlZ2w9dCk6ZT10O2UubGVuZ3RoJiYoZS5wb3NpdGlvbnM9ZSk7aWYoISh0PWUucmVnbCkuaGFzRXh0ZW5zaW9uKFwiQU5HTEVfaW5zdGFuY2VkX2FycmF5c1wiKSl0aHJvdyBFcnJvcihcInJlZ2wtZXJyb3IyZDogYEFOR0xFX2luc3RhbmNlZF9hcnJheXNgIGV4dGVuc2lvbiBzaG91bGQgYmUgZW5hYmxlZFwiKTt2YXIgcixjLHAsZCxnLHYsbT10Ll9nbCx5PXtjb2xvcjpcImJsYWNrXCIsY2FwU2l6ZTo1LGxpbmVXaWR0aDoxLG9wYWNpdHk6MSx2aWV3cG9ydDpudWxsLHJhbmdlOm51bGwsb2Zmc2V0OjAsY291bnQ6MCxib3VuZHM6bnVsbCxwb3NpdGlvbnM6W10sZXJyb3JzOltdfSx4PVtdO3JldHVybiBkPXQuYnVmZmVyKHt1c2FnZTpcImR5bmFtaWNcIix0eXBlOlwidWludDhcIixkYXRhOm5ldyBVaW50OEFycmF5KDApfSksYz10LmJ1ZmZlcih7dXNhZ2U6XCJkeW5hbWljXCIsdHlwZTpcImZsb2F0XCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pLHA9dC5idWZmZXIoe3VzYWdlOlwiZHluYW1pY1wiLHR5cGU6XCJmbG9hdFwiLGRhdGE6bmV3IFVpbnQ4QXJyYXkoMCl9KSxnPXQuYnVmZmVyKHt1c2FnZTpcImR5bmFtaWNcIix0eXBlOlwiZmxvYXRcIixkYXRhOm5ldyBVaW50OEFycmF5KDApfSksdj10LmJ1ZmZlcih7dXNhZ2U6XCJzdGF0aWNcIix0eXBlOlwiZmxvYXRcIixkYXRhOmZ9KSxrKGUpLHI9dCh7dmVydDpcIlxcblxcdFxcdHByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG5cXHRcXHRhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbiwgcG9zaXRpb25GcmFjdDtcXG5cXHRcXHRhdHRyaWJ1dGUgdmVjNCBlcnJvcjtcXG5cXHRcXHRhdHRyaWJ1dGUgdmVjNCBjb2xvcjtcXG5cXG5cXHRcXHRhdHRyaWJ1dGUgdmVjMiBkaXJlY3Rpb24sIGxpbmVPZmZzZXQsIGNhcE9mZnNldDtcXG5cXG5cXHRcXHR1bmlmb3JtIHZlYzQgdmlld3BvcnQ7XFxuXFx0XFx0dW5pZm9ybSBmbG9hdCBsaW5lV2lkdGgsIGNhcFNpemU7XFxuXFx0XFx0dW5pZm9ybSB2ZWMyIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0O1xcblxcblxcdFxcdHZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxuXFxuXFx0XFx0dm9pZCBtYWluKCkge1xcblxcdFxcdFxcdGZyYWdDb2xvciA9IGNvbG9yIC8gMjU1LjtcXG5cXG5cXHRcXHRcXHR2ZWMyIHBpeGVsT2Zmc2V0ID0gbGluZVdpZHRoICogbGluZU9mZnNldCArIChjYXBTaXplICsgbGluZVdpZHRoKSAqIGNhcE9mZnNldDtcXG5cXG5cXHRcXHRcXHR2ZWMyIGR4eSA9IC1zdGVwKC41LCBkaXJlY3Rpb24ueHkpICogZXJyb3IueHogKyBzdGVwKGRpcmVjdGlvbi54eSwgdmVjMigtLjUpKSAqIGVycm9yLnl3O1xcblxcblxcdFxcdFxcdHZlYzIgcG9zaXRpb24gPSBwb3NpdGlvbiArIGR4eTtcXG5cXG5cXHRcXHRcXHR2ZWMyIHBvcyA9IChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZVxcblxcdFxcdFxcdFxcdCsgKHBvc2l0aW9uRnJhY3QgKyB0cmFuc2xhdGVGcmFjdCkgKiBzY2FsZVxcblxcdFxcdFxcdFxcdCsgKHBvc2l0aW9uICsgdHJhbnNsYXRlKSAqIHNjYWxlRnJhY3RcXG5cXHRcXHRcXHRcXHQrIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVGcmFjdDtcXG5cXG5cXHRcXHRcXHRwb3MgKz0gcGl4ZWxPZmZzZXQgLyB2aWV3cG9ydC56dztcXG5cXG5cXHRcXHRcXHRnbF9Qb3NpdGlvbiA9IHZlYzQocG9zICogMi4gLSAxLiwgMCwgMSk7XFxuXFx0XFx0fVxcblxcdFxcdFwiLGZyYWc6XCJcXG5cXHRcXHRwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuXFxuXFx0XFx0dmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcXG5cXG5cXHRcXHR1bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxuXFxuXFx0XFx0dm9pZCBtYWluKCkge1xcblxcdFxcdFxcdGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjtcXG5cXHRcXHRcXHRnbF9GcmFnQ29sb3IuYSAqPSBvcGFjaXR5O1xcblxcdFxcdH1cXG5cXHRcXHRcIix1bmlmb3Jtczp7cmFuZ2U6dC5wcm9wKFwicmFuZ2VcIiksbGluZVdpZHRoOnQucHJvcChcImxpbmVXaWR0aFwiKSxjYXBTaXplOnQucHJvcChcImNhcFNpemVcIiksb3BhY2l0eTp0LnByb3AoXCJvcGFjaXR5XCIpLHNjYWxlOnQucHJvcChcInNjYWxlXCIpLHRyYW5zbGF0ZTp0LnByb3AoXCJ0cmFuc2xhdGVcIiksc2NhbGVGcmFjdDp0LnByb3AoXCJzY2FsZUZyYWN0XCIpLHRyYW5zbGF0ZUZyYWN0OnQucHJvcChcInRyYW5zbGF0ZUZyYWN0XCIpLHZpZXdwb3J0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuW2Uudmlld3BvcnQueCxlLnZpZXdwb3J0LnksdC52aWV3cG9ydFdpZHRoLHQudmlld3BvcnRIZWlnaHRdfX0sYXR0cmlidXRlczp7Y29sb3I6e2J1ZmZlcjpkLG9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiA0KmUub2Zmc2V0fSxkaXZpc29yOjF9LHBvc2l0aW9uOntidWZmZXI6YyxvZmZzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gOCplLm9mZnNldH0sZGl2aXNvcjoxfSxwb3NpdGlvbkZyYWN0OntidWZmZXI6cCxvZmZzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gOCplLm9mZnNldH0sZGl2aXNvcjoxfSxlcnJvcjp7YnVmZmVyOmcsb2Zmc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDE2KmUub2Zmc2V0fSxkaXZpc29yOjF9LGRpcmVjdGlvbjp7YnVmZmVyOnYsc3RyaWRlOjI0LG9mZnNldDowfSxsaW5lT2Zmc2V0OntidWZmZXI6dixzdHJpZGU6MjQsb2Zmc2V0Ojh9LGNhcE9mZnNldDp7YnVmZmVyOnYsc3RyaWRlOjI0LG9mZnNldDoxNn19LHByaW1pdGl2ZTpcInRyaWFuZ2xlc1wiLGJsZW5kOntlbmFibGU6ITAsY29sb3I6WzAsMCwwLDBdLGVxdWF0aW9uOntyZ2I6XCJhZGRcIixhbHBoYTpcImFkZFwifSxmdW5jOntzcmNSR0I6XCJzcmMgYWxwaGFcIixkc3RSR0I6XCJvbmUgbWludXMgc3JjIGFscGhhXCIsc3JjQWxwaGE6XCJvbmUgbWludXMgZHN0IGFscGhhXCIsZHN0QWxwaGE6XCJvbmVcIn19LGRlcHRoOntlbmFibGU6ITF9LHNjaXNzb3I6e2VuYWJsZTohMCxib3g6dC5wcm9wKFwidmlld3BvcnRcIil9LHZpZXdwb3J0OnQucHJvcChcInZpZXdwb3J0XCIpLHN0ZW5jaWw6ITEsaW5zdGFuY2VzOnQucHJvcChcImNvdW50XCIpLGNvdW50OmYubGVuZ3RofSkscyhiLHt1cGRhdGU6ayxkcmF3Ol8sZGVzdHJveTpBLHJlZ2w6dCxnbDptLGNhbnZhczptLmNhbnZhcyxncm91cHM6eH0pLGI7ZnVuY3Rpb24gYih0KXt0P2sodCk6bnVsbD09PXQmJkEoKSxfKCl9ZnVuY3Rpb24gXyhlKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSlyZXR1cm4gdyhlKTtlJiYhQXJyYXkuaXNBcnJheShlKSYmKGU9W2VdKSx0Ll9yZWZyZXNoKCkseC5mb3JFYWNoKGZ1bmN0aW9uKHQscil7dCYmKGUmJihlW3JdP3QuZHJhdz0hMDp0LmRyYXc9ITEpLHQuZHJhdz93KHIpOnQuZHJhdz0hMCl9KX1mdW5jdGlvbiB3KHQpe1wibnVtYmVyXCI9PXR5cGVvZiB0JiYodD14W3RdKSxudWxsIT10JiZ0JiZ0LmNvdW50JiZ0LmNvbG9yJiZ0Lm9wYWNpdHkmJnQucG9zaXRpb25zJiZ0LnBvc2l0aW9ucy5sZW5ndGg+MSYmKHQuc2NhbGVSYXRpbz1bdC5zY2FsZVswXSp0LnZpZXdwb3J0LndpZHRoLHQuc2NhbGVbMV0qdC52aWV3cG9ydC5oZWlnaHRdLHIodCksdC5hZnRlciYmdC5hZnRlcih0KSl9ZnVuY3Rpb24gayh0KXtpZih0KXtudWxsIT10Lmxlbmd0aD9cIm51bWJlclwiPT10eXBlb2YgdFswXSYmKHQ9W3twb3NpdGlvbnM6dH1dKTpBcnJheS5pc0FycmF5KHQpfHwodD1bdF0pO3ZhciBlPTAscj0wO2lmKGIuZ3JvdXBzPXg9dC5tYXAoZnVuY3Rpb24odCxjKXt2YXIgdT14W2NdO3JldHVybiB0PyhcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q9e2FmdGVyOnR9OlwibnVtYmVyXCI9PXR5cGVvZiB0WzBdJiYodD17cG9zaXRpb25zOnR9KSx0PW8odCx7Y29sb3I6XCJjb2xvciBjb2xvcnMgZmlsbFwiLGNhcFNpemU6XCJjYXBTaXplIGNhcCBjYXBzaXplIGNhcC1zaXplXCIsbGluZVdpZHRoOlwibGluZVdpZHRoIGxpbmUtd2lkdGggd2lkdGggbGluZSB0aGlja25lc3NcIixvcGFjaXR5Olwib3BhY2l0eSBhbHBoYVwiLHJhbmdlOlwicmFuZ2UgZGF0YUJveFwiLHZpZXdwb3J0Olwidmlld3BvcnQgdmlld0JveFwiLGVycm9yczpcImVycm9ycyBlcnJvclwiLHBvc2l0aW9uczpcInBvc2l0aW9ucyBwb3NpdGlvbiBkYXRhIHBvaW50c1wifSksdXx8KHhbY109dT17aWQ6YyxzY2FsZTpudWxsLHRyYW5zbGF0ZTpudWxsLHNjYWxlRnJhY3Q6bnVsbCx0cmFuc2xhdGVGcmFjdDpudWxsLGRyYXc6ITB9LHQ9cyh7fSx5LHQpKSxhKHUsdCxbe2xpbmVXaWR0aDpmdW5jdGlvbih0KXtyZXR1cm4uNSordH0sY2FwU2l6ZTpmdW5jdGlvbih0KXtyZXR1cm4uNSordH0sb3BhY2l0eTpwYXJzZUZsb2F0LGVycm9yczpmdW5jdGlvbih0KXtyZXR1cm4gdD1sKHQpLHIrPXQubGVuZ3RoLHR9LHBvc2l0aW9uczpmdW5jdGlvbih0LHIpe3JldHVybiB0PWwodCxcImZsb2F0NjRcIiksci5jb3VudD1NYXRoLmZsb29yKHQubGVuZ3RoLzIpLHIuYm91bmRzPW4odCwyKSxyLm9mZnNldD1lLGUrPXIuY291bnQsdH19LHtjb2xvcjpmdW5jdGlvbih0LGUpe3ZhciByPWUuY291bnQ7aWYodHx8KHQ9XCJ0cmFuc3BhcmVudFwiKSwhQXJyYXkuaXNBcnJheSh0KXx8XCJudW1iZXJcIj09dHlwZW9mIHRbMF0pe3ZhciBuPXQ7dD1BcnJheShyKTtmb3IodmFyIGE9MDthPHI7YSsrKXRbYV09bn1pZih0Lmxlbmd0aDxyKXRocm93IEVycm9yKFwiTm90IGVub3VnaCBjb2xvcnNcIik7Zm9yKHZhciBvPW5ldyBVaW50OEFycmF5KDQqcikscz0wO3M8cjtzKyspe3ZhciBsPWkodFtzXSxcInVpbnQ4XCIpO28uc2V0KGwsNCpzKX1yZXR1cm4gb30scmFuZ2U6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuYm91bmRzO3JldHVybiB0fHwodD1uKSxlLnNjYWxlPVsxLyh0WzJdLXRbMF0pLDEvKHRbM10tdFsxXSldLGUudHJhbnNsYXRlPVstdFswXSwtdFsxXV0sZS5zY2FsZUZyYWN0PWgoZS5zY2FsZSksZS50cmFuc2xhdGVGcmFjdD1oKGUudHJhbnNsYXRlKSx0fSx2aWV3cG9ydDpmdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9lPXt4OnRbMF0seTp0WzFdLHdpZHRoOnRbMl0tdFswXSxoZWlnaHQ6dFszXS10WzFdfTp0PyhlPXt4OnQueHx8dC5sZWZ0fHwwLHk6dC55fHx0LnRvcHx8MH0sdC5yaWdodD9lLndpZHRoPXQucmlnaHQtZS54OmUud2lkdGg9dC53fHx0LndpZHRofHwwLHQuYm90dG9tP2UuaGVpZ2h0PXQuYm90dG9tLWUueTplLmhlaWdodD10Lmh8fHQuaGVpZ2h0fHwwKTplPXt4OjAseTowLHdpZHRoOm0uZHJhd2luZ0J1ZmZlcldpZHRoLGhlaWdodDptLmRyYXdpbmdCdWZmZXJIZWlnaHR9LGV9fV0pLHUpOnV9KSxlfHxyKXt2YXIgZj14LnJlZHVjZShmdW5jdGlvbih0LGUscil7cmV0dXJuIHQrKGU/ZS5jb3VudDowKX0sMCksdj1uZXcgRmxvYXQ2NEFycmF5KDIqZiksXz1uZXcgVWludDhBcnJheSg0KmYpLHc9bmV3IEZsb2F0MzJBcnJheSg0KmYpO3guZm9yRWFjaChmdW5jdGlvbih0LGUpe2lmKHQpe3ZhciByPXQucG9zaXRpb25zLG49dC5jb3VudCxpPXQub2Zmc2V0LGE9dC5jb2xvcixvPXQuZXJyb3JzO24mJihfLnNldChhLDQqaSksdy5zZXQobyw0KmkpLHYuc2V0KHIsMippKSl9fSksYyh1KHYpKSxwKGgodikpLGQoXyksZyh3KX19fWZ1bmN0aW9uIEEoKXtjLmRlc3Ryb3koKSxwLmRlc3Ryb3koKSxkLmRlc3Ryb3koKSxnLmRlc3Ryb3koKSx2LmRlc3Ryb3koKX19O3ZhciBmPVtbMSwwLDAsMSwwLDBdLFsxLDAsMCwtMSwwLDBdLFstMSwwLDAsLTEsMCwwXSxbLTEsMCwwLC0xLDAsMF0sWy0xLDAsMCwxLDAsMF0sWzEsMCwwLDEsMCwwXSxbMSwwLC0xLDAsMCwxXSxbMSwwLC0xLDAsMCwtMV0sWzEsMCwxLDAsMCwtMV0sWzEsMCwxLDAsMCwtMV0sWzEsMCwxLDAsMCwxXSxbMSwwLC0xLDAsMCwxXSxbLTEsMCwtMSwwLDAsMV0sWy0xLDAsLTEsMCwwLC0xXSxbLTEsMCwxLDAsMCwtMV0sWy0xLDAsMSwwLDAsLTFdLFstMSwwLDEsMCwwLDFdLFstMSwwLC0xLDAsMCwxXSxbMCwxLDEsMCwwLDBdLFswLDEsLTEsMCwwLDBdLFswLC0xLC0xLDAsMCwwXSxbMCwtMSwtMSwwLDAsMF0sWzAsMSwxLDAsMCwwXSxbMCwtMSwxLDAsMCwwXSxbMCwxLDAsLTEsMSwwXSxbMCwxLDAsLTEsLTEsMF0sWzAsMSwwLDEsLTEsMF0sWzAsMSwwLDEsMSwwXSxbMCwxLDAsLTEsMSwwXSxbMCwxLDAsMSwtMSwwXSxbMCwtMSwwLC0xLDEsMF0sWzAsLTEsMCwtMSwtMSwwXSxbMCwtMSwwLDEsLTEsMF0sWzAsLTEsMCwxLDEsMF0sWzAsLTEsMCwtMSwxLDBdLFswLC0xLDAsMSwtMSwwXV19LHtcImFycmF5LWJvdW5kc1wiOjU2LFwiY29sb3Itbm9ybWFsaXplXCI6MTExLFwiZmxhdHRlbi12ZXJ0ZXgtZGF0YVwiOjIyNCxcIm9iamVjdC1hc3NpZ25cIjo0NDcsXCJwaWNrLWJ5LWFsaWFzXCI6NDU4LFwidG8tZmxvYXQzMlwiOjUyMyxcInVwZGF0ZS1kaWZmXCI6NTM0fV0sNDg0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImNvbG9yLW5vcm1hbGl6ZVwiKSxpPXQoXCJhcnJheS1ib3VuZHNcIiksYT10KFwib2JqZWN0LWFzc2lnblwiKSxvPXQoXCJnbHNsaWZ5XCIpLHM9dChcInBpY2stYnktYWxpYXNcIiksbD10KFwiZmxhdHRlbi12ZXJ0ZXgtZGF0YVwiKSxjPXQoXCJlYXJjdXRcIiksdT10KFwiYXJyYXktbm9ybWFsaXplXCIpLGg9dChcInRvLWZsb2F0MzJcIiksZj1oLmZsb2F0MzIscD1oLmZyYWN0MzIsZD10KFwiZXM2LXdlYWstbWFwXCIpLGc9dChcInBhcnNlLXJlY3RcIik7ZnVuY3Rpb24gdih0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHYpKXJldHVybiBuZXcgdih0LGUpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/KGV8fChlPXt9KSxlLnJlZ2w9dCk6ZT10LGUubGVuZ3RoJiYoZS5wb3NpdGlvbnM9ZSksISh0PWUucmVnbCkuaGFzRXh0ZW5zaW9uKFwiQU5HTEVfaW5zdGFuY2VkX2FycmF5c1wiKSl0aHJvdyBFcnJvcihcInJlZ2wtZXJyb3IyZDogYEFOR0xFX2luc3RhbmNlZF9hcnJheXNgIGV4dGVuc2lvbiBzaG91bGQgYmUgZW5hYmxlZFwiKTt0aGlzLmdsPXQuX2dsLHRoaXMucmVnbD10LHRoaXMucGFzc2VzPVtdLHRoaXMuc2hhZGVycz12LnNoYWRlcnMuaGFzKHQpP3Yuc2hhZGVycy5nZXQodCk6di5zaGFkZXJzLnNldCh0LHYuY3JlYXRlU2hhZGVycyh0KSkuZ2V0KHQpLHRoaXMudXBkYXRlKGUpfWUuZXhwb3J0cz12LHYuZGFzaE11bHQ9Mix2Lm1heFBhdHRlcm5MZW5ndGg9MjU2LHYucHJlY2lzaW9uVGhyZXNob2xkPTNlNix2Lm1heFBvaW50cz0xZTQsdi5tYXhMaW5lcz0yMDQ4LHYuc2hhZGVycz1uZXcgZCx2LmNyZWF0ZVNoYWRlcnM9ZnVuY3Rpb24odCl7dmFyIGUscj10LmJ1ZmZlcih7dXNhZ2U6XCJzdGF0aWNcIix0eXBlOlwiZmxvYXRcIixkYXRhOlswLDEsMCwwLDEsMSwxLDBdfSksbj17cHJpbWl0aXZlOlwidHJpYW5nbGUgc3RyaXBcIixpbnN0YW5jZXM6dC5wcm9wKFwiY291bnRcIiksY291bnQ6NCxvZmZzZXQ6MCx1bmlmb3Jtczp7bWl0ZXJNb2RlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJyb3VuZFwiPT09ZS5qb2luPzI6MX0sbWl0ZXJMaW1pdDp0LnByb3AoXCJtaXRlckxpbWl0XCIpLHNjYWxlOnQucHJvcChcInNjYWxlXCIpLHNjYWxlRnJhY3Q6dC5wcm9wKFwic2NhbGVGcmFjdFwiKSx0cmFuc2xhdGVGcmFjdDp0LnByb3AoXCJ0cmFuc2xhdGVGcmFjdFwiKSx0cmFuc2xhdGU6dC5wcm9wKFwidHJhbnNsYXRlXCIpLHRoaWNrbmVzczp0LnByb3AoXCJ0aGlja25lc3NcIiksZGFzaFBhdHRlcm46dC5wcm9wKFwiZGFzaFRleHR1cmVcIiksb3BhY2l0eTp0LnByb3AoXCJvcGFjaXR5XCIpLHBpeGVsUmF0aW86dC5jb250ZXh0KFwicGl4ZWxSYXRpb1wiKSxpZDp0LnByb3AoXCJpZFwiKSxkYXNoU2l6ZTp0LnByb3AoXCJkYXNoTGVuZ3RoXCIpLHZpZXdwb3J0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuW2Uudmlld3BvcnQueCxlLnZpZXdwb3J0LnksdC52aWV3cG9ydFdpZHRoLHQudmlld3BvcnRIZWlnaHRdfSxkZXB0aDp0LnByb3AoXCJkZXB0aFwiKX0sYmxlbmQ6e2VuYWJsZTohMCxjb2xvcjpbMCwwLDAsMF0sZXF1YXRpb246e3JnYjpcImFkZFwiLGFscGhhOlwiYWRkXCJ9LGZ1bmM6e3NyY1JHQjpcInNyYyBhbHBoYVwiLGRzdFJHQjpcIm9uZSBtaW51cyBzcmMgYWxwaGFcIixzcmNBbHBoYTpcIm9uZSBtaW51cyBkc3QgYWxwaGFcIixkc3RBbHBoYTpcIm9uZVwifX0sZGVwdGg6e2VuYWJsZTpmdW5jdGlvbih0LGUpe3JldHVybiFlLm92ZXJsYXl9fSxzdGVuY2lsOntlbmFibGU6ITF9LHNjaXNzb3I6e2VuYWJsZTohMCxib3g6dC5wcm9wKFwidmlld3BvcnRcIil9LHZpZXdwb3J0OnQucHJvcChcInZpZXdwb3J0XCIpfSxpPXQoYSh7dmVydDpvKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMyIGFDb29yZCwgYkNvb3JkLCBhQ29vcmRGcmFjdCwgYkNvb3JkRnJhY3Q7XFxuYXR0cmlidXRlIHZlYzQgY29sb3I7XFxuYXR0cmlidXRlIGZsb2F0IGxpbmVFbmQsIGxpbmVUb3A7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0O1xcbnVuaWZvcm0gZmxvYXQgdGhpY2tuZXNzLCBwaXhlbFJhdGlvLCBpZCwgZGVwdGg7XFxudW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxudmFyeWluZyB2ZWMyIHRhbmdlbnQ7XFxuXFxudmVjMiBwcm9qZWN0KHZlYzIgcG9zaXRpb24sIHZlYzIgcG9zaXRpb25GcmFjdCwgdmVjMiBzY2FsZSwgdmVjMiBzY2FsZUZyYWN0LCB2ZWMyIHRyYW5zbGF0ZSwgdmVjMiB0cmFuc2xhdGVGcmFjdCkge1xcblxcdC8vIHRoZSBvcmRlciBpcyBpbXBvcnRhbnRcXG5cXHRyZXR1cm4gcG9zaXRpb24gKiBzY2FsZSArIHRyYW5zbGF0ZVxcbiAgICAgICArIHBvc2l0aW9uRnJhY3QgKiBzY2FsZSArIHRyYW5zbGF0ZUZyYWN0XFxuICAgICAgICsgcG9zaXRpb24gKiBzY2FsZUZyYWN0XFxuICAgICAgICsgcG9zaXRpb25GcmFjdCAqIHNjYWxlRnJhY3Q7XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG5cXHRmbG9hdCBsaW5lU3RhcnQgPSAxLiAtIGxpbmVFbmQ7XFxuXFx0ZmxvYXQgbGluZU9mZnNldCA9IGxpbmVUb3AgKiAyLiAtIDEuO1xcblxcblxcdHZlYzIgZGlmZiA9IChiQ29vcmQgKyBiQ29vcmRGcmFjdCAtIGFDb29yZCAtIGFDb29yZEZyYWN0KTtcXG5cXHR0YW5nZW50ID0gbm9ybWFsaXplKGRpZmYgKiBzY2FsZSAqIHZpZXdwb3J0Lnp3KTtcXG5cXHR2ZWMyIG5vcm1hbCA9IHZlYzIoLXRhbmdlbnQueSwgdGFuZ2VudC54KTtcXG5cXG5cXHR2ZWMyIHBvc2l0aW9uID0gcHJvamVjdChhQ29vcmQsIGFDb29yZEZyYWN0LCBzY2FsZSwgc2NhbGVGcmFjdCwgdHJhbnNsYXRlLCB0cmFuc2xhdGVGcmFjdCkgKiBsaW5lU3RhcnRcXG5cXHRcXHQrIHByb2plY3QoYkNvb3JkLCBiQ29vcmRGcmFjdCwgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3QpICogbGluZUVuZFxcblxcblxcdFxcdCsgdGhpY2tuZXNzICogbm9ybWFsICogLjUgKiBsaW5lT2Zmc2V0IC8gdmlld3BvcnQuenc7XFxuXFxuXFx0Z2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uICogMi4wIC0gMS4wLCBkZXB0aCwgMSk7XFxuXFxuXFx0ZnJhZ0NvbG9yID0gY29sb3IgLyAyNTUuO1xcbn1cXG5cIl0pLGZyYWc6byhbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCBkYXNoUGF0dGVybjtcXG5cXG51bmlmb3JtIGZsb2F0IGRhc2hTaXplLCBwaXhlbFJhdGlvLCB0aGlja25lc3MsIG9wYWNpdHksIGlkO1xcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxudmFyeWluZyB2ZWMyIHRhbmdlbnQ7XFxuXFxudm9pZCBtYWluKCkge1xcblxcdGZsb2F0IGFscGhhID0gMS47XFxuXFxuXFx0ZmxvYXQgdCA9IGZyYWN0KGRvdCh0YW5nZW50LCBnbF9GcmFnQ29vcmQueHkpIC8gZGFzaFNpemUpICogLjUgKyAuMjU7XFxuXFx0ZmxvYXQgZGFzaCA9IHRleHR1cmUyRChkYXNoUGF0dGVybiwgdmVjMih0LCAuNSkpLnI7XFxuXFxuXFx0Z2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xcblxcdGdsX0ZyYWdDb2xvci5hICo9IGFscGhhICogb3BhY2l0eSAqIGRhc2g7XFxufVxcblwiXSksYXR0cmlidXRlczp7bGluZUVuZDp7YnVmZmVyOnIsZGl2aXNvcjowLHN0cmlkZTo4LG9mZnNldDowfSxsaW5lVG9wOntidWZmZXI6cixkaXZpc29yOjAsc3RyaWRlOjgsb2Zmc2V0OjR9LGFDb29yZDp7YnVmZmVyOnQucHJvcChcInBvc2l0aW9uQnVmZmVyXCIpLHN0cmlkZTo4LG9mZnNldDo4LGRpdmlzb3I6MX0sYkNvb3JkOntidWZmZXI6dC5wcm9wKFwicG9zaXRpb25CdWZmZXJcIiksc3RyaWRlOjgsb2Zmc2V0OjE2LGRpdmlzb3I6MX0sYUNvb3JkRnJhY3Q6e2J1ZmZlcjp0LnByb3AoXCJwb3NpdGlvbkZyYWN0QnVmZmVyXCIpLHN0cmlkZTo4LG9mZnNldDo4LGRpdmlzb3I6MX0sYkNvb3JkRnJhY3Q6e2J1ZmZlcjp0LnByb3AoXCJwb3NpdGlvbkZyYWN0QnVmZmVyXCIpLHN0cmlkZTo4LG9mZnNldDoxNixkaXZpc29yOjF9LGNvbG9yOntidWZmZXI6dC5wcm9wKFwiY29sb3JCdWZmZXJcIiksc3RyaWRlOjQsb2Zmc2V0OjAsZGl2aXNvcjoxfX19LG4pKTt0cnl7ZT10KGEoe2N1bGw6e2VuYWJsZTohMCxmYWNlOlwiYmFja1wifSx2ZXJ0Om8oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzIgYUNvb3JkLCBiQ29vcmQsIG5leHRDb29yZCwgcHJldkNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvciwgYkNvbG9yO1xcbmF0dHJpYnV0ZSBmbG9hdCBsaW5lRW5kLCBsaW5lVG9wO1xcblxcbnVuaWZvcm0gdmVjMiBzY2FsZSwgdHJhbnNsYXRlO1xcbnVuaWZvcm0gZmxvYXQgdGhpY2tuZXNzLCBwaXhlbFJhdGlvLCBpZCwgZGVwdGg7XFxudW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xcbnVuaWZvcm0gZmxvYXQgbWl0ZXJMaW1pdCwgbWl0ZXJNb2RlO1xcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxudmFyeWluZyB2ZWM0IHN0YXJ0Q3V0b2ZmLCBlbmRDdXRvZmY7XFxudmFyeWluZyB2ZWMyIHRhbmdlbnQ7XFxudmFyeWluZyB2ZWMyIHN0YXJ0Q29vcmQsIGVuZENvb3JkO1xcbnZhcnlpbmcgZmxvYXQgZW5hYmxlU3RhcnRNaXRlciwgZW5hYmxlRW5kTWl0ZXI7XFxuXFxuY29uc3QgZmxvYXQgUkVWRVJTRV9USFJFU0hPTEQgPSAtLjg3NTtcXG5jb25zdCBmbG9hdCBNSU5fRElGRiA9IDFlLTY7XFxuXFxuLy8gVE9ETzogcG9zc2libGUgb3B0aW1pemF0aW9uczogYXZvaWQgb3ZlcmNhbGN1bGF0aW5nIGFsbCBmb3IgdmVydGljZXMgYW5kIGNhbGMganVzdCBvbmUgaW5zdGVhZFxcbi8vIFRPRE86IHByZWNhbGN1bGF0ZSBkb3QgcHJvZHVjdHMsIG5vcm1hbGl6ZSB0aGluZ3MgYmVmb3JlaGVhZCBldGMuXFxuLy8gVE9ETzogcmVmYWN0b3IgdG8gcmVjdGFuZ3VsYXIgYWxnb3JpdGhtXFxuXFxuZmxvYXQgZGlzdFRvTGluZSh2ZWMyIHAsIHZlYzIgYSwgdmVjMiBiKSB7XFxuXFx0dmVjMiBkaWZmID0gYiAtIGE7XFxuXFx0dmVjMiBwZXJwID0gbm9ybWFsaXplKHZlYzIoLWRpZmYueSwgZGlmZi54KSk7XFxuXFx0cmV0dXJuIGRvdChwIC0gYSwgcGVycCk7XFxufVxcblxcbmJvb2wgaXNOYU4oIGZsb2F0IHZhbCApe1xcbiAgcmV0dXJuICggdmFsIDwgMC4wIHx8IDAuMCA8IHZhbCB8fCB2YWwgPT0gMC4wICkgPyBmYWxzZSA6IHRydWU7XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG5cXHR2ZWMyIGFDb29yZCA9IGFDb29yZCwgYkNvb3JkID0gYkNvb3JkLCBwcmV2Q29vcmQgPSBwcmV2Q29vcmQsIG5leHRDb29yZCA9IG5leHRDb29yZDtcXG5cXG4gIHZlYzIgYWRqdXN0ZWRTY2FsZTtcXG4gIGFkanVzdGVkU2NhbGUueCA9IChhYnMoc2NhbGUueCkgPCBNSU5fRElGRikgPyBNSU5fRElGRiA6IHNjYWxlLng7XFxuICBhZGp1c3RlZFNjYWxlLnkgPSAoYWJzKHNjYWxlLnkpIDwgTUlOX0RJRkYpID8gTUlOX0RJRkYgOiBzY2FsZS55O1xcblxcbiAgdmVjMiBzY2FsZVJhdGlvID0gYWRqdXN0ZWRTY2FsZSAqIHZpZXdwb3J0Lnp3O1xcblxcdHZlYzIgbm9ybWFsV2lkdGggPSB0aGlja25lc3MgLyBzY2FsZVJhdGlvO1xcblxcblxcdGZsb2F0IGxpbmVTdGFydCA9IDEuIC0gbGluZUVuZDtcXG5cXHRmbG9hdCBsaW5lQm90ID0gMS4gLSBsaW5lVG9wO1xcblxcblxcdGZyYWdDb2xvciA9IChsaW5lU3RhcnQgKiBhQ29sb3IgKyBsaW5lRW5kICogYkNvbG9yKSAvIDI1NS47XFxuXFxuXFx0aWYgKGlzTmFOKGFDb29yZC54KSB8fCBpc05hTihhQ29vcmQueSkgfHwgaXNOYU4oYkNvb3JkLngpIHx8IGlzTmFOKGJDb29yZC55KSkgcmV0dXJuO1xcblxcblxcdGlmIChhQ29vcmQgPT0gcHJldkNvb3JkKSBwcmV2Q29vcmQgPSBhQ29vcmQgKyBub3JtYWxpemUoYkNvb3JkIC0gYUNvb3JkKTtcXG5cXHRpZiAoYkNvb3JkID09IG5leHRDb29yZCkgbmV4dENvb3JkID0gYkNvb3JkIC0gbm9ybWFsaXplKGJDb29yZCAtIGFDb29yZCk7XFxuXFxuXFx0dmVjMiBwcmV2RGlmZiA9IGFDb29yZCAtIHByZXZDb29yZDtcXG5cXHR2ZWMyIGN1cnJEaWZmID0gYkNvb3JkIC0gYUNvb3JkO1xcblxcdHZlYzIgbmV4dERpZmYgPSBuZXh0Q29vcmQgLSBiQ29vcmQ7XFxuXFxuXFx0dmVjMiBwcmV2VGFuZ2VudCA9IG5vcm1hbGl6ZShwcmV2RGlmZiAqIHNjYWxlUmF0aW8pO1xcblxcdHZlYzIgY3VyclRhbmdlbnQgPSBub3JtYWxpemUoY3VyckRpZmYgKiBzY2FsZVJhdGlvKTtcXG5cXHR2ZWMyIG5leHRUYW5nZW50ID0gbm9ybWFsaXplKG5leHREaWZmICogc2NhbGVSYXRpbyk7XFxuXFxuXFx0dmVjMiBwcmV2Tm9ybWFsID0gdmVjMigtcHJldlRhbmdlbnQueSwgcHJldlRhbmdlbnQueCk7XFxuXFx0dmVjMiBjdXJyTm9ybWFsID0gdmVjMigtY3VyclRhbmdlbnQueSwgY3VyclRhbmdlbnQueCk7XFxuXFx0dmVjMiBuZXh0Tm9ybWFsID0gdmVjMigtbmV4dFRhbmdlbnQueSwgbmV4dFRhbmdlbnQueCk7XFxuXFxuXFx0dmVjMiBzdGFydEpvaW5EaXJlY3Rpb24gPSBub3JtYWxpemUocHJldlRhbmdlbnQgLSBjdXJyVGFuZ2VudCk7XFxuXFx0dmVjMiBlbmRKb2luRGlyZWN0aW9uID0gbm9ybWFsaXplKGN1cnJUYW5nZW50IC0gbmV4dFRhbmdlbnQpO1xcblxcblxcdC8vIGNvbGxhcHNlZC91bmlkaXJlY3Rpb25hbCBzZWdtZW50IGNhc2VzXFxuXFx0Ly8gRklYTUU6IHRoZXJlIHNob3VsZCBiZSBtb3JlIGVsZWdhbnQgc29sdXRpb25cXG5cXHR2ZWMyIHByZXZUYW5EaWZmID0gYWJzKHByZXZUYW5nZW50IC0gY3VyclRhbmdlbnQpO1xcblxcdHZlYzIgbmV4dFRhbkRpZmYgPSBhYnMobmV4dFRhbmdlbnQgLSBjdXJyVGFuZ2VudCk7XFxuXFx0aWYgKG1heChwcmV2VGFuRGlmZi54LCBwcmV2VGFuRGlmZi55KSA8IE1JTl9ESUZGKSB7XFxuXFx0XFx0c3RhcnRKb2luRGlyZWN0aW9uID0gY3Vyck5vcm1hbDtcXG5cXHR9XFxuXFx0aWYgKG1heChuZXh0VGFuRGlmZi54LCBuZXh0VGFuRGlmZi55KSA8IE1JTl9ESUZGKSB7XFxuXFx0XFx0ZW5kSm9pbkRpcmVjdGlvbiA9IGN1cnJOb3JtYWw7XFxuXFx0fVxcblxcdGlmIChhQ29vcmQgPT0gYkNvb3JkKSB7XFxuXFx0XFx0ZW5kSm9pbkRpcmVjdGlvbiA9IHN0YXJ0Sm9pbkRpcmVjdGlvbjtcXG5cXHRcXHRjdXJyTm9ybWFsID0gcHJldk5vcm1hbDtcXG5cXHRcXHRjdXJyVGFuZ2VudCA9IHByZXZUYW5nZW50O1xcblxcdH1cXG5cXG5cXHR0YW5nZW50ID0gY3VyclRhbmdlbnQ7XFxuXFxuXFx0Ly9jYWxjdWxhdGUgam9pbiBzaGlmdHMgcmVsYXRpdmUgdG8gbm9ybWFsc1xcblxcdGZsb2F0IHN0YXJ0Sm9pblNoaWZ0ID0gZG90KGN1cnJOb3JtYWwsIHN0YXJ0Sm9pbkRpcmVjdGlvbik7XFxuXFx0ZmxvYXQgZW5kSm9pblNoaWZ0ID0gZG90KGN1cnJOb3JtYWwsIGVuZEpvaW5EaXJlY3Rpb24pO1xcblxcblxcdGZsb2F0IHN0YXJ0TWl0ZXJSYXRpbyA9IGFicygxLiAvIHN0YXJ0Sm9pblNoaWZ0KTtcXG5cXHRmbG9hdCBlbmRNaXRlclJhdGlvID0gYWJzKDEuIC8gZW5kSm9pblNoaWZ0KTtcXG5cXG5cXHR2ZWMyIHN0YXJ0Sm9pbiA9IHN0YXJ0Sm9pbkRpcmVjdGlvbiAqIHN0YXJ0TWl0ZXJSYXRpbztcXG5cXHR2ZWMyIGVuZEpvaW4gPSBlbmRKb2luRGlyZWN0aW9uICogZW5kTWl0ZXJSYXRpbztcXG5cXG5cXHR2ZWMyIHN0YXJ0VG9wSm9pbiwgc3RhcnRCb3RKb2luLCBlbmRUb3BKb2luLCBlbmRCb3RKb2luO1xcblxcdHN0YXJ0VG9wSm9pbiA9IHNpZ24oc3RhcnRKb2luU2hpZnQpICogc3RhcnRKb2luICogLjU7XFxuXFx0c3RhcnRCb3RKb2luID0gLXN0YXJ0VG9wSm9pbjtcXG5cXG5cXHRlbmRUb3BKb2luID0gc2lnbihlbmRKb2luU2hpZnQpICogZW5kSm9pbiAqIC41O1xcblxcdGVuZEJvdEpvaW4gPSAtZW5kVG9wSm9pbjtcXG5cXG5cXHR2ZWMyIGFUb3BDb29yZCA9IGFDb29yZCArIG5vcm1hbFdpZHRoICogc3RhcnRUb3BKb2luO1xcblxcdHZlYzIgYlRvcENvb3JkID0gYkNvb3JkICsgbm9ybWFsV2lkdGggKiBlbmRUb3BKb2luO1xcblxcdHZlYzIgYUJvdENvb3JkID0gYUNvb3JkICsgbm9ybWFsV2lkdGggKiBzdGFydEJvdEpvaW47XFxuXFx0dmVjMiBiQm90Q29vcmQgPSBiQ29vcmQgKyBub3JtYWxXaWR0aCAqIGVuZEJvdEpvaW47XFxuXFxuXFx0Ly9taXRlciBhbnRpLWNsaXBwaW5nXFxuXFx0ZmxvYXQgYmFDbGlwcGluZyA9IGRpc3RUb0xpbmUoYkNvb3JkLCBhQ29vcmQsIGFCb3RDb29yZCkgLyBkb3Qobm9ybWFsaXplKG5vcm1hbFdpZHRoICogZW5kQm90Sm9pbiksIG5vcm1hbGl6ZShub3JtYWxXaWR0aC55eCAqIHZlYzIoLXN0YXJ0Qm90Sm9pbi55LCBzdGFydEJvdEpvaW4ueCkpKTtcXG5cXHRmbG9hdCBhYkNsaXBwaW5nID0gZGlzdFRvTGluZShhQ29vcmQsIGJDb29yZCwgYlRvcENvb3JkKSAvIGRvdChub3JtYWxpemUobm9ybWFsV2lkdGggKiBzdGFydEJvdEpvaW4pLCBub3JtYWxpemUobm9ybWFsV2lkdGgueXggKiB2ZWMyKC1lbmRCb3RKb2luLnksIGVuZEJvdEpvaW4ueCkpKTtcXG5cXG5cXHQvL3ByZXZlbnQgY2xvc2UgdG8gcmV2ZXJzZSBkaXJlY3Rpb24gc3dpdGNoXFxuXFx0Ym9vbCBwcmV2UmV2ZXJzZSA9IGRvdChjdXJyVGFuZ2VudCwgcHJldlRhbmdlbnQpIDw9IFJFVkVSU0VfVEhSRVNIT0xEICYmIGFicyhkb3QoY3VyclRhbmdlbnQsIHByZXZOb3JtYWwpKSAqIG1pbihsZW5ndGgocHJldkRpZmYpLCBsZW5ndGgoY3VyckRpZmYpKSA8ICBsZW5ndGgobm9ybWFsV2lkdGggKiBjdXJyTm9ybWFsKTtcXG5cXHRib29sIG5leHRSZXZlcnNlID0gZG90KGN1cnJUYW5nZW50LCBuZXh0VGFuZ2VudCkgPD0gUkVWRVJTRV9USFJFU0hPTEQgJiYgYWJzKGRvdChjdXJyVGFuZ2VudCwgbmV4dE5vcm1hbCkpICogbWluKGxlbmd0aChuZXh0RGlmZiksIGxlbmd0aChjdXJyRGlmZikpIDwgIGxlbmd0aChub3JtYWxXaWR0aCAqIGN1cnJOb3JtYWwpO1xcblxcblxcdGlmIChwcmV2UmV2ZXJzZSkge1xcblxcdFxcdC8vbWFrZSBqb2luIHJlY3Rhbmd1bGFyXFxuXFx0XFx0dmVjMiBtaXRlclNoaWZ0ID0gbm9ybWFsV2lkdGggKiBzdGFydEpvaW5EaXJlY3Rpb24gKiBtaXRlckxpbWl0ICogLjU7XFxuXFx0XFx0ZmxvYXQgbm9ybWFsQWRqdXN0ID0gMS4gLSBtaW4obWl0ZXJMaW1pdCAvIHN0YXJ0TWl0ZXJSYXRpbywgMS4pO1xcblxcdFxcdGFCb3RDb29yZCA9IGFDb29yZCArIG1pdGVyU2hpZnQgLSBub3JtYWxBZGp1c3QgKiBub3JtYWxXaWR0aCAqIGN1cnJOb3JtYWwgKiAuNTtcXG5cXHRcXHRhVG9wQ29vcmQgPSBhQ29vcmQgKyBtaXRlclNoaWZ0ICsgbm9ybWFsQWRqdXN0ICogbm9ybWFsV2lkdGggKiBjdXJyTm9ybWFsICogLjU7XFxuXFx0fVxcblxcdGVsc2UgaWYgKCFuZXh0UmV2ZXJzZSAmJiBiYUNsaXBwaW5nID4gMC4gJiYgYmFDbGlwcGluZyA8IGxlbmd0aChub3JtYWxXaWR0aCAqIGVuZEJvdEpvaW4pKSB7XFxuXFx0XFx0Ly9oYW5kbGUgbWl0ZXIgY2xpcHBpbmdcXG5cXHRcXHRiVG9wQ29vcmQgLT0gbm9ybWFsV2lkdGggKiBlbmRUb3BKb2luO1xcblxcdFxcdGJUb3BDb29yZCArPSBub3JtYWxpemUoZW5kVG9wSm9pbiAqIG5vcm1hbFdpZHRoKSAqIGJhQ2xpcHBpbmc7XFxuXFx0fVxcblxcblxcdGlmIChuZXh0UmV2ZXJzZSkge1xcblxcdFxcdC8vbWFrZSBqb2luIHJlY3Rhbmd1bGFyXFxuXFx0XFx0dmVjMiBtaXRlclNoaWZ0ID0gbm9ybWFsV2lkdGggKiBlbmRKb2luRGlyZWN0aW9uICogbWl0ZXJMaW1pdCAqIC41O1xcblxcdFxcdGZsb2F0IG5vcm1hbEFkanVzdCA9IDEuIC0gbWluKG1pdGVyTGltaXQgLyBlbmRNaXRlclJhdGlvLCAxLik7XFxuXFx0XFx0YkJvdENvb3JkID0gYkNvb3JkICsgbWl0ZXJTaGlmdCAtIG5vcm1hbEFkanVzdCAqIG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCAqIC41O1xcblxcdFxcdGJUb3BDb29yZCA9IGJDb29yZCArIG1pdGVyU2hpZnQgKyBub3JtYWxBZGp1c3QgKiBub3JtYWxXaWR0aCAqIGN1cnJOb3JtYWwgKiAuNTtcXG5cXHR9XFxuXFx0ZWxzZSBpZiAoIXByZXZSZXZlcnNlICYmIGFiQ2xpcHBpbmcgPiAwLiAmJiBhYkNsaXBwaW5nIDwgbGVuZ3RoKG5vcm1hbFdpZHRoICogc3RhcnRCb3RKb2luKSkge1xcblxcdFxcdC8vaGFuZGxlIG1pdGVyIGNsaXBwaW5nXFxuXFx0XFx0YUJvdENvb3JkIC09IG5vcm1hbFdpZHRoICogc3RhcnRCb3RKb2luO1xcblxcdFxcdGFCb3RDb29yZCArPSBub3JtYWxpemUoc3RhcnRCb3RKb2luICogbm9ybWFsV2lkdGgpICogYWJDbGlwcGluZztcXG5cXHR9XFxuXFxuXFx0dmVjMiBhVG9wUG9zaXRpb24gPSAoYVRvcENvb3JkKSAqIGFkanVzdGVkU2NhbGUgKyB0cmFuc2xhdGU7XFxuXFx0dmVjMiBhQm90UG9zaXRpb24gPSAoYUJvdENvb3JkKSAqIGFkanVzdGVkU2NhbGUgKyB0cmFuc2xhdGU7XFxuXFxuXFx0dmVjMiBiVG9wUG9zaXRpb24gPSAoYlRvcENvb3JkKSAqIGFkanVzdGVkU2NhbGUgKyB0cmFuc2xhdGU7XFxuXFx0dmVjMiBiQm90UG9zaXRpb24gPSAoYkJvdENvb3JkKSAqIGFkanVzdGVkU2NhbGUgKyB0cmFuc2xhdGU7XFxuXFxuXFx0Ly9wb3NpdGlvbiBpcyBub3JtYWxpemVkIDAuLjEgY29vcmQgb24gdGhlIHNjcmVlblxcblxcdHZlYzIgcG9zaXRpb24gPSAoYVRvcFBvc2l0aW9uICogbGluZVRvcCArIGFCb3RQb3NpdGlvbiAqIGxpbmVCb3QpICogbGluZVN0YXJ0ICsgKGJUb3BQb3NpdGlvbiAqIGxpbmVUb3AgKyBiQm90UG9zaXRpb24gKiBsaW5lQm90KSAqIGxpbmVFbmQ7XFxuXFxuXFx0c3RhcnRDb29yZCA9IGFDb29yZCAqIHNjYWxlUmF0aW8gKyB0cmFuc2xhdGUgKiB2aWV3cG9ydC56dyArIHZpZXdwb3J0Lnh5O1xcblxcdGVuZENvb3JkID0gYkNvb3JkICogc2NhbGVSYXRpbyArIHRyYW5zbGF0ZSAqIHZpZXdwb3J0Lnp3ICsgdmlld3BvcnQueHk7XFxuXFxuXFx0Z2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uICAqIDIuMCAtIDEuMCwgZGVwdGgsIDEpO1xcblxcblxcdGVuYWJsZVN0YXJ0TWl0ZXIgPSBzdGVwKGRvdChjdXJyVGFuZ2VudCwgcHJldlRhbmdlbnQpLCAuNSk7XFxuXFx0ZW5hYmxlRW5kTWl0ZXIgPSBzdGVwKGRvdChjdXJyVGFuZ2VudCwgbmV4dFRhbmdlbnQpLCAuNSk7XFxuXFxuXFx0Ly9iZXZlbCBtaXRlciBjdXRvZmZzXFxuXFx0aWYgKG1pdGVyTW9kZSA9PSAxLikge1xcblxcdFxcdGlmIChlbmFibGVTdGFydE1pdGVyID09IDEuKSB7XFxuXFx0XFx0XFx0dmVjMiBzdGFydE1pdGVyV2lkdGggPSB2ZWMyKHN0YXJ0Sm9pbkRpcmVjdGlvbikgKiB0aGlja25lc3MgKiBtaXRlckxpbWl0ICogLjU7XFxuXFx0XFx0XFx0c3RhcnRDdXRvZmYgPSB2ZWM0KGFDb29yZCwgYUNvb3JkKTtcXG5cXHRcXHRcXHRzdGFydEN1dG9mZi56dyArPSB2ZWMyKC1zdGFydEpvaW5EaXJlY3Rpb24ueSwgc3RhcnRKb2luRGlyZWN0aW9uLngpIC8gc2NhbGVSYXRpbztcXG5cXHRcXHRcXHRzdGFydEN1dG9mZiA9IHN0YXJ0Q3V0b2ZmICogc2NhbGVSYXRpby54eXh5ICsgdHJhbnNsYXRlLnh5eHkgKiB2aWV3cG9ydC56d3p3O1xcblxcdFxcdFxcdHN0YXJ0Q3V0b2ZmICs9IHZpZXdwb3J0Lnh5eHk7XFxuXFx0XFx0XFx0c3RhcnRDdXRvZmYgKz0gc3RhcnRNaXRlcldpZHRoLnh5eHk7XFxuXFx0XFx0fVxcblxcblxcdFxcdGlmIChlbmFibGVFbmRNaXRlciA9PSAxLikge1xcblxcdFxcdFxcdHZlYzIgZW5kTWl0ZXJXaWR0aCA9IHZlYzIoZW5kSm9pbkRpcmVjdGlvbikgKiB0aGlja25lc3MgKiBtaXRlckxpbWl0ICogLjU7XFxuXFx0XFx0XFx0ZW5kQ3V0b2ZmID0gdmVjNChiQ29vcmQsIGJDb29yZCk7XFxuXFx0XFx0XFx0ZW5kQ3V0b2ZmLnp3ICs9IHZlYzIoLWVuZEpvaW5EaXJlY3Rpb24ueSwgZW5kSm9pbkRpcmVjdGlvbi54KSAgLyBzY2FsZVJhdGlvO1xcblxcdFxcdFxcdGVuZEN1dG9mZiA9IGVuZEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcXG5cXHRcXHRcXHRlbmRDdXRvZmYgKz0gdmlld3BvcnQueHl4eTtcXG5cXHRcXHRcXHRlbmRDdXRvZmYgKz0gZW5kTWl0ZXJXaWR0aC54eXh5O1xcblxcdFxcdH1cXG5cXHR9XFxuXFxuXFx0Ly9yb3VuZCBtaXRlciBjdXRvZmZzXFxuXFx0ZWxzZSBpZiAobWl0ZXJNb2RlID09IDIuKSB7XFxuXFx0XFx0aWYgKGVuYWJsZVN0YXJ0TWl0ZXIgPT0gMS4pIHtcXG5cXHRcXHRcXHR2ZWMyIHN0YXJ0TWl0ZXJXaWR0aCA9IHZlYzIoc3RhcnRKb2luRGlyZWN0aW9uKSAqIHRoaWNrbmVzcyAqIGFicyhkb3Qoc3RhcnRKb2luRGlyZWN0aW9uLCBjdXJyTm9ybWFsKSkgKiAuNTtcXG5cXHRcXHRcXHRzdGFydEN1dG9mZiA9IHZlYzQoYUNvb3JkLCBhQ29vcmQpO1xcblxcdFxcdFxcdHN0YXJ0Q3V0b2ZmLnp3ICs9IHZlYzIoLXN0YXJ0Sm9pbkRpcmVjdGlvbi55LCBzdGFydEpvaW5EaXJlY3Rpb24ueCkgLyBzY2FsZVJhdGlvO1xcblxcdFxcdFxcdHN0YXJ0Q3V0b2ZmID0gc3RhcnRDdXRvZmYgKiBzY2FsZVJhdGlvLnh5eHkgKyB0cmFuc2xhdGUueHl4eSAqIHZpZXdwb3J0Lnp3enc7XFxuXFx0XFx0XFx0c3RhcnRDdXRvZmYgKz0gdmlld3BvcnQueHl4eTtcXG5cXHRcXHRcXHRzdGFydEN1dG9mZiArPSBzdGFydE1pdGVyV2lkdGgueHl4eTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0aWYgKGVuYWJsZUVuZE1pdGVyID09IDEuKSB7XFxuXFx0XFx0XFx0dmVjMiBlbmRNaXRlcldpZHRoID0gdmVjMihlbmRKb2luRGlyZWN0aW9uKSAqIHRoaWNrbmVzcyAqIGFicyhkb3QoZW5kSm9pbkRpcmVjdGlvbiwgY3Vyck5vcm1hbCkpICogLjU7XFxuXFx0XFx0XFx0ZW5kQ3V0b2ZmID0gdmVjNChiQ29vcmQsIGJDb29yZCk7XFxuXFx0XFx0XFx0ZW5kQ3V0b2ZmLnp3ICs9IHZlYzIoLWVuZEpvaW5EaXJlY3Rpb24ueSwgZW5kSm9pbkRpcmVjdGlvbi54KSAgLyBzY2FsZVJhdGlvO1xcblxcdFxcdFxcdGVuZEN1dG9mZiA9IGVuZEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcXG5cXHRcXHRcXHRlbmRDdXRvZmYgKz0gdmlld3BvcnQueHl4eTtcXG5cXHRcXHRcXHRlbmRDdXRvZmYgKz0gZW5kTWl0ZXJXaWR0aC54eXh5O1xcblxcdFxcdH1cXG5cXHR9XFxufVxcblwiXSksZnJhZzpvKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnVuaWZvcm0gc2FtcGxlcjJEIGRhc2hQYXR0ZXJuO1xcbnVuaWZvcm0gZmxvYXQgZGFzaFNpemUsIHBpeGVsUmF0aW8sIHRoaWNrbmVzcywgb3BhY2l0eSwgaWQsIG1pdGVyTW9kZTtcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xcbnZhcnlpbmcgdmVjMiB0YW5nZW50O1xcbnZhcnlpbmcgdmVjNCBzdGFydEN1dG9mZiwgZW5kQ3V0b2ZmO1xcbnZhcnlpbmcgdmVjMiBzdGFydENvb3JkLCBlbmRDb29yZDtcXG52YXJ5aW5nIGZsb2F0IGVuYWJsZVN0YXJ0TWl0ZXIsIGVuYWJsZUVuZE1pdGVyO1xcblxcbmZsb2F0IGRpc3RUb0xpbmUodmVjMiBwLCB2ZWMyIGEsIHZlYzIgYikge1xcblxcdHZlYzIgZGlmZiA9IGIgLSBhO1xcblxcdHZlYzIgcGVycCA9IG5vcm1hbGl6ZSh2ZWMyKC1kaWZmLnksIGRpZmYueCkpO1xcblxcdHJldHVybiBkb3QocCAtIGEsIHBlcnApO1xcbn1cXG5cXG52b2lkIG1haW4oKSB7XFxuXFx0ZmxvYXQgYWxwaGEgPSAxLiwgZGlzdFRvU3RhcnQsIGRpc3RUb0VuZDtcXG5cXHRmbG9hdCBjdXRvZmYgPSB0aGlja25lc3MgKiAuNTtcXG5cXG5cXHQvL2JldmVsIG1pdGVyXFxuXFx0aWYgKG1pdGVyTW9kZSA9PSAxLikge1xcblxcdFxcdGlmIChlbmFibGVTdGFydE1pdGVyID09IDEuKSB7XFxuXFx0XFx0XFx0ZGlzdFRvU3RhcnQgPSBkaXN0VG9MaW5lKGdsX0ZyYWdDb29yZC54eSwgc3RhcnRDdXRvZmYueHksIHN0YXJ0Q3V0b2ZmLnp3KTtcXG5cXHRcXHRcXHRpZiAoZGlzdFRvU3RhcnQgPCAtMS4pIHtcXG5cXHRcXHRcXHRcXHRkaXNjYXJkO1xcblxcdFxcdFxcdFxcdHJldHVybjtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0XFx0YWxwaGEgKj0gbWluKG1heChkaXN0VG9TdGFydCArIDEuLCAwLiksIDEuKTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0aWYgKGVuYWJsZUVuZE1pdGVyID09IDEuKSB7XFxuXFx0XFx0XFx0ZGlzdFRvRW5kID0gZGlzdFRvTGluZShnbF9GcmFnQ29vcmQueHksIGVuZEN1dG9mZi54eSwgZW5kQ3V0b2ZmLnp3KTtcXG5cXHRcXHRcXHRpZiAoZGlzdFRvRW5kIDwgLTEuKSB7XFxuXFx0XFx0XFx0XFx0ZGlzY2FyZDtcXG5cXHRcXHRcXHRcXHRyZXR1cm47XFxuXFx0XFx0XFx0fVxcblxcdFxcdFxcdGFscGhhICo9IG1pbihtYXgoZGlzdFRvRW5kICsgMS4sIDAuKSwgMS4pO1xcblxcdFxcdH1cXG5cXHR9XFxuXFxuXFx0Ly8gcm91bmQgbWl0ZXJcXG5cXHRlbHNlIGlmIChtaXRlck1vZGUgPT0gMi4pIHtcXG5cXHRcXHRpZiAoZW5hYmxlU3RhcnRNaXRlciA9PSAxLikge1xcblxcdFxcdFxcdGRpc3RUb1N0YXJ0ID0gZGlzdFRvTGluZShnbF9GcmFnQ29vcmQueHksIHN0YXJ0Q3V0b2ZmLnh5LCBzdGFydEN1dG9mZi56dyk7XFxuXFx0XFx0XFx0aWYgKGRpc3RUb1N0YXJ0IDwgMC4pIHtcXG5cXHRcXHRcXHRcXHRmbG9hdCByYWRpdXMgPSBsZW5ndGgoZ2xfRnJhZ0Nvb3JkLnh5IC0gc3RhcnRDb29yZCk7XFxuXFxuXFx0XFx0XFx0XFx0aWYocmFkaXVzID4gY3V0b2ZmICsgLjUpIHtcXG5cXHRcXHRcXHRcXHRcXHRkaXNjYXJkO1xcblxcdFxcdFxcdFxcdFxcdHJldHVybjtcXG5cXHRcXHRcXHRcXHR9XFxuXFxuXFx0XFx0XFx0XFx0YWxwaGEgLT0gc21vb3Roc3RlcChjdXRvZmYgLSAuNSwgY3V0b2ZmICsgLjUsIHJhZGl1cyk7XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXG5cXHRcXHRpZiAoZW5hYmxlRW5kTWl0ZXIgPT0gMS4pIHtcXG5cXHRcXHRcXHRkaXN0VG9FbmQgPSBkaXN0VG9MaW5lKGdsX0ZyYWdDb29yZC54eSwgZW5kQ3V0b2ZmLnh5LCBlbmRDdXRvZmYuencpO1xcblxcdFxcdFxcdGlmIChkaXN0VG9FbmQgPCAwLikge1xcblxcdFxcdFxcdFxcdGZsb2F0IHJhZGl1cyA9IGxlbmd0aChnbF9GcmFnQ29vcmQueHkgLSBlbmRDb29yZCk7XFxuXFxuXFx0XFx0XFx0XFx0aWYocmFkaXVzID4gY3V0b2ZmICsgLjUpIHtcXG5cXHRcXHRcXHRcXHRcXHRkaXNjYXJkO1xcblxcdFxcdFxcdFxcdFxcdHJldHVybjtcXG5cXHRcXHRcXHRcXHR9XFxuXFxuXFx0XFx0XFx0XFx0YWxwaGEgLT0gc21vb3Roc3RlcChjdXRvZmYgLSAuNSwgY3V0b2ZmICsgLjUsIHJhZGl1cyk7XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXHR9XFxuXFxuXFx0ZmxvYXQgdCA9IGZyYWN0KGRvdCh0YW5nZW50LCBnbF9GcmFnQ29vcmQueHkpIC8gZGFzaFNpemUpICogLjUgKyAuMjU7XFxuXFx0ZmxvYXQgZGFzaCA9IHRleHR1cmUyRChkYXNoUGF0dGVybiwgdmVjMih0LCAuNSkpLnI7XFxuXFxuXFx0Z2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xcblxcdGdsX0ZyYWdDb2xvci5hICo9IGFscGhhICogb3BhY2l0eSAqIGRhc2g7XFxufVxcblwiXSksYXR0cmlidXRlczp7bGluZUVuZDp7YnVmZmVyOnIsZGl2aXNvcjowLHN0cmlkZTo4LG9mZnNldDowfSxsaW5lVG9wOntidWZmZXI6cixkaXZpc29yOjAsc3RyaWRlOjgsb2Zmc2V0OjR9LGFDb2xvcjp7YnVmZmVyOnQucHJvcChcImNvbG9yQnVmZmVyXCIpLHN0cmlkZTo0LG9mZnNldDowLGRpdmlzb3I6MX0sYkNvbG9yOntidWZmZXI6dC5wcm9wKFwiY29sb3JCdWZmZXJcIiksc3RyaWRlOjQsb2Zmc2V0OjQsZGl2aXNvcjoxfSxwcmV2Q29vcmQ6e2J1ZmZlcjp0LnByb3AoXCJwb3NpdGlvbkJ1ZmZlclwiKSxzdHJpZGU6OCxvZmZzZXQ6MCxkaXZpc29yOjF9LGFDb29yZDp7YnVmZmVyOnQucHJvcChcInBvc2l0aW9uQnVmZmVyXCIpLHN0cmlkZTo4LG9mZnNldDo4LGRpdmlzb3I6MX0sYkNvb3JkOntidWZmZXI6dC5wcm9wKFwicG9zaXRpb25CdWZmZXJcIiksc3RyaWRlOjgsb2Zmc2V0OjE2LGRpdmlzb3I6MX0sbmV4dENvb3JkOntidWZmZXI6dC5wcm9wKFwicG9zaXRpb25CdWZmZXJcIiksc3RyaWRlOjgsb2Zmc2V0OjI0LGRpdmlzb3I6MX19fSxuKSl9Y2F0Y2godCl7ZT1pfXJldHVybntmaWxsOnQoe3ByaW1pdGl2ZTpcInRyaWFuZ2xlXCIsZWxlbWVudHM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS50cmlhbmdsZXN9LG9mZnNldDowLHZlcnQ6byhbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbiwgcG9zaXRpb25GcmFjdDtcXG5cXG51bmlmb3JtIHZlYzQgY29sb3I7XFxudW5pZm9ybSB2ZWMyIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0O1xcbnVuaWZvcm0gZmxvYXQgcGl4ZWxSYXRpbywgaWQ7XFxudW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xcblxcbmNvbnN0IGZsb2F0IE1BWF9MSU5FUyA9IDI1Ni47XFxuXFxudm9pZCBtYWluKCkge1xcblxcdGZsb2F0IGRlcHRoID0gKE1BWF9MSU5FUyAtIDQuIC0gaWQpIC8gKE1BWF9MSU5FUyk7XFxuXFxuXFx0dmVjMiBwb3NpdGlvbiA9IHBvc2l0aW9uICogc2NhbGUgKyB0cmFuc2xhdGVcXG4gICAgICAgKyBwb3NpdGlvbkZyYWN0ICogc2NhbGUgKyB0cmFuc2xhdGVGcmFjdFxcbiAgICAgICArIHBvc2l0aW9uICogc2NhbGVGcmFjdFxcbiAgICAgICArIHBvc2l0aW9uRnJhY3QgKiBzY2FsZUZyYWN0O1xcblxcblxcdGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiAqIDIuMCAtIDEuMCwgZGVwdGgsIDEpO1xcblxcblxcdGZyYWdDb2xvciA9IGNvbG9yIC8gMjU1LjtcXG5cXHRmcmFnQ29sb3IuYSAqPSBvcGFjaXR5O1xcbn1cXG5cIl0pLGZyYWc6byhbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xcblxcbnZvaWQgbWFpbigpIHtcXG5cXHRnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XFxufVxcblwiXSksdW5pZm9ybXM6e3NjYWxlOnQucHJvcChcInNjYWxlXCIpLGNvbG9yOnQucHJvcChcImZpbGxcIiksc2NhbGVGcmFjdDp0LnByb3AoXCJzY2FsZUZyYWN0XCIpLHRyYW5zbGF0ZUZyYWN0OnQucHJvcChcInRyYW5zbGF0ZUZyYWN0XCIpLHRyYW5zbGF0ZTp0LnByb3AoXCJ0cmFuc2xhdGVcIiksb3BhY2l0eTp0LnByb3AoXCJvcGFjaXR5XCIpLHBpeGVsUmF0aW86dC5jb250ZXh0KFwicGl4ZWxSYXRpb1wiKSxpZDp0LnByb3AoXCJpZFwiKSx2aWV3cG9ydDpmdW5jdGlvbih0LGUpe3JldHVybltlLnZpZXdwb3J0LngsZS52aWV3cG9ydC55LHQudmlld3BvcnRXaWR0aCx0LnZpZXdwb3J0SGVpZ2h0XX19LGF0dHJpYnV0ZXM6e3Bvc2l0aW9uOntidWZmZXI6dC5wcm9wKFwicG9zaXRpb25CdWZmZXJcIiksc3RyaWRlOjgsb2Zmc2V0Ojh9LHBvc2l0aW9uRnJhY3Q6e2J1ZmZlcjp0LnByb3AoXCJwb3NpdGlvbkZyYWN0QnVmZmVyXCIpLHN0cmlkZTo4LG9mZnNldDo4fX0sYmxlbmQ6bi5ibGVuZCxkZXB0aDp7ZW5hYmxlOiExfSxzY2lzc29yOm4uc2Npc3NvcixzdGVuY2lsOm4uc3RlbmNpbCx2aWV3cG9ydDpuLnZpZXdwb3J0fSkscmVjdDppLG1pdGVyOmV9fSx2LmRlZmF1bHRzPXtkYXNoZXM6bnVsbCxqb2luOlwibWl0ZXJcIixtaXRlckxpbWl0OjEsdGhpY2tuZXNzOjEwLGNhcDpcInNxdWFyZVwiLGNvbG9yOlwiYmxhY2tcIixvcGFjaXR5OjEsb3ZlcmxheTohMSx2aWV3cG9ydDpudWxsLHJhbmdlOm51bGwsY2xvc2U6ITEsZmlsbDpudWxsfSx2LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGg7ci0tOyllW3JdPWFyZ3VtZW50c1tyXTtlLmxlbmd0aCYmKHQ9dGhpcykudXBkYXRlLmFwcGx5KHQsZSksdGhpcy5kcmF3KCl9LHYucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVtdLHI9YXJndW1lbnRzLmxlbmd0aDtyLS07KWVbcl09YXJndW1lbnRzW3JdO3JldHVybihlLmxlbmd0aD9lOnRoaXMucGFzc2VzKS5mb3JFYWNoKGZ1bmN0aW9uKGUscil7dmFyIG47aWYoZSYmQXJyYXkuaXNBcnJheShlKSlyZXR1cm4obj10KS5kcmF3LmFwcGx5KG4sZSk7XCJudW1iZXJcIj09dHlwZW9mIGUmJihlPXQucGFzc2VzW2VdKSxlJiZlLmNvdW50PjEmJmUub3BhY2l0eSYmKHQucmVnbC5fcmVmcmVzaCgpLGUuZmlsbCYmZS50cmlhbmdsZXMmJmUudHJpYW5nbGVzLmxlbmd0aD4yJiZ0LnNoYWRlcnMuZmlsbChlKSxlLnRoaWNrbmVzcyYmKGUuc2NhbGVbMF0qZS52aWV3cG9ydC53aWR0aD52LnByZWNpc2lvblRocmVzaG9sZHx8ZS5zY2FsZVsxXSplLnZpZXdwb3J0LmhlaWdodD52LnByZWNpc2lvblRocmVzaG9sZD90LnNoYWRlcnMucmVjdChlKTpcInJlY3RcIj09PWUuam9pbnx8IWUuam9pbiYmKGUudGhpY2tuZXNzPD0yfHxlLmNvdW50Pj12Lm1heFBvaW50cyk/dC5zaGFkZXJzLnJlY3QoZSk6dC5zaGFkZXJzLm1pdGVyKGUpKSl9KSx0aGlzfSx2LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0KXtudWxsIT10Lmxlbmd0aD9cIm51bWJlclwiPT10eXBlb2YgdFswXSYmKHQ9W3twb3NpdGlvbnM6dH1dKTpBcnJheS5pc0FycmF5KHQpfHwodD1bdF0pO3ZhciByPXRoaXMucmVnbCxvPXRoaXMuZ2w7aWYodC5mb3JFYWNoKGZ1bmN0aW9uKHQsaCl7dmFyIGQ9ZS5wYXNzZXNbaF07aWYodm9pZCAwIT09dClpZihudWxsIT09dCl7aWYoXCJudW1iZXJcIj09dHlwZW9mIHRbMF0mJih0PXtwb3NpdGlvbnM6dH0pLHQ9cyh0LHtwb3NpdGlvbnM6XCJwb3NpdGlvbnMgcG9pbnRzIGRhdGEgY29vcmRzXCIsdGhpY2tuZXNzOlwidGhpY2tuZXNzIGxpbmVXaWR0aCBsaW5lV2lkdGhzIGxpbmUtd2lkdGggbGluZXdpZHRoIHdpZHRoIHN0cm9rZS13aWR0aCBzdHJva2V3aWR0aCBzdHJva2VXaWR0aFwiLGpvaW46XCJsaW5lSm9pbiBsaW5lam9pbiBqb2luIHR5cGUgbW9kZVwiLG1pdGVyTGltaXQ6XCJtaXRlcmxpbWl0IG1pdGVyTGltaXRcIixkYXNoZXM6XCJkYXNoIGRhc2hlcyBkYXNoYXJyYXkgZGFzaC1hcnJheSBkYXNoQXJyYXlcIixjb2xvcjpcImNvbG9yIGNvbG91ciBzdHJva2UgY29sb3JzIGNvbG91cnMgc3Ryb2tlLWNvbG9yIHN0cm9rZUNvbG9yXCIsZmlsbDpcImZpbGwgZmlsbC1jb2xvciBmaWxsQ29sb3JcIixvcGFjaXR5OlwiYWxwaGEgb3BhY2l0eVwiLG92ZXJsYXk6XCJvdmVybGF5IGNyZWFzZSBvdmVybGFwIGludGVyc2VjdFwiLGNsb3NlOlwiY2xvc2VkIGNsb3NlIGNsb3NlZC1wYXRoIGNsb3NlUGF0aFwiLHJhbmdlOlwicmFuZ2UgZGF0YUJveFwiLHZpZXdwb3J0Olwidmlld3BvcnQgdmlld0JveFwiLGhvbGU6XCJob2xlcyBob2xlIGhvbGxvd1wifSksZHx8KGUucGFzc2VzW2hdPWQ9e2lkOmgsc2NhbGU6bnVsbCxzY2FsZUZyYWN0Om51bGwsdHJhbnNsYXRlOm51bGwsdHJhbnNsYXRlRnJhY3Q6bnVsbCxjb3VudDowLGhvbGU6W10sZGVwdGg6MCxkYXNoTGVuZ3RoOjEsZGFzaFRleHR1cmU6ci50ZXh0dXJlKHtjaGFubmVsczoxLGRhdGE6bmV3IFVpbnQ4QXJyYXkoWzI1NV0pLHdpZHRoOjEsaGVpZ2h0OjEsbWFnOlwibGluZWFyXCIsbWluOlwibGluZWFyXCJ9KSxjb2xvckJ1ZmZlcjpyLmJ1ZmZlcih7dXNhZ2U6XCJkeW5hbWljXCIsdHlwZTpcInVpbnQ4XCIsZGF0YTpuZXcgVWludDhBcnJheX0pLHBvc2l0aW9uQnVmZmVyOnIuYnVmZmVyKHt1c2FnZTpcImR5bmFtaWNcIix0eXBlOlwiZmxvYXRcIixkYXRhOm5ldyBVaW50OEFycmF5fSkscG9zaXRpb25GcmFjdEJ1ZmZlcjpyLmJ1ZmZlcih7dXNhZ2U6XCJkeW5hbWljXCIsdHlwZTpcImZsb2F0XCIsZGF0YTpuZXcgVWludDhBcnJheX0pfSx0PWEoe30sdi5kZWZhdWx0cyx0KSksbnVsbCE9dC50aGlja25lc3MmJihkLnRoaWNrbmVzcz1wYXJzZUZsb2F0KHQudGhpY2tuZXNzKSksbnVsbCE9dC5vcGFjaXR5JiYoZC5vcGFjaXR5PXBhcnNlRmxvYXQodC5vcGFjaXR5KSksbnVsbCE9dC5taXRlckxpbWl0JiYoZC5taXRlckxpbWl0PXBhcnNlRmxvYXQodC5taXRlckxpbWl0KSksbnVsbCE9dC5vdmVybGF5JiYoZC5vdmVybGF5PSEhdC5vdmVybGF5LGg8di5tYXhMaW5lcyYmKGQuZGVwdGg9Mioodi5tYXhMaW5lcy0xLWgldi5tYXhMaW5lcykvdi5tYXhMaW5lcy0xKSksbnVsbCE9dC5qb2luJiYoZC5qb2luPXQuam9pbiksbnVsbCE9dC5ob2xlJiYoZC5ob2xlPXQuaG9sZSksbnVsbCE9dC5maWxsJiYoZC5maWxsPXQuZmlsbD9uKHQuZmlsbCxcInVpbnQ4XCIpOm51bGwpLG51bGwhPXQudmlld3BvcnQmJihkLnZpZXdwb3J0PWcodC52aWV3cG9ydCkpLGQudmlld3BvcnR8fChkLnZpZXdwb3J0PWcoW28uZHJhd2luZ0J1ZmZlcldpZHRoLG8uZHJhd2luZ0J1ZmZlckhlaWdodF0pKSxudWxsIT10LmNsb3NlJiYoZC5jbG9zZT10LmNsb3NlKSxudWxsPT09dC5wb3NpdGlvbnMmJih0LnBvc2l0aW9ucz1bXSksdC5wb3NpdGlvbnMpe3ZhciBtLHk7aWYodC5wb3NpdGlvbnMueCYmdC5wb3NpdGlvbnMueSl7dmFyIHg9dC5wb3NpdGlvbnMueCxiPXQucG9zaXRpb25zLnk7eT1kLmNvdW50PU1hdGgubWF4KHgubGVuZ3RoLGIubGVuZ3RoKSxtPW5ldyBGbG9hdDY0QXJyYXkoMip5KTtmb3IodmFyIF89MDtfPHk7XysrKW1bMipfXT14W19dLG1bMipfKzFdPWJbX119ZWxzZSBtPWwodC5wb3NpdGlvbnMsXCJmbG9hdDY0XCIpLHk9ZC5jb3VudD1NYXRoLmZsb29yKG0ubGVuZ3RoLzIpO3ZhciB3PWQuYm91bmRzPWkobSwyKTtpZihkLmZpbGwpe2Zvcih2YXIgaz1bXSxBPXt9LFQ9MCxNPTAsUz0wLEU9ZC5jb3VudDtNPEU7TSsrKXt2YXIgQz1tWzIqTV0sTD1tWzIqTSsxXTtpc05hTihDKXx8aXNOYU4oTCl8fG51bGw9PUN8fG51bGw9PUw/KEM9bVsyKlRdLEw9bVsyKlQrMV0sQVtNXT1UKTpUPU0sa1tTKytdPUMsa1tTKytdPUx9Zm9yKHZhciB6PWMoayxkLmhvbGV8fFtdKSxPPTAsST16Lmxlbmd0aDtPPEk7TysrKW51bGwhPUFbeltPXV0mJih6W09dPUFbeltPXV0pO2QudHJpYW5nbGVzPXp9dmFyIEQ9bmV3IEZsb2F0NjRBcnJheShtKTt1KEQsMix3KTt2YXIgUD1uZXcgRmxvYXQ2NEFycmF5KDIqeSs2KTtkLmNsb3NlP21bMF09PT1tWzIqeS0yXSYmbVsxXT09PW1bMip5LTFdPyhQWzBdPURbMip5LTRdLFBbMV09RFsyKnktM10pOihQWzBdPURbMip5LTJdLFBbMV09RFsyKnktMV0pOihQWzBdPURbMF0sUFsxXT1EWzFdKSxQLnNldChELDIpLGQuY2xvc2U/bVswXT09PW1bMip5LTJdJiZtWzFdPT09bVsyKnktMV0/KFBbMip5KzJdPURbMl0sUFsyKnkrM109RFszXSxkLmNvdW50LT0xKTooUFsyKnkrMl09RFswXSxQWzIqeSszXT1EWzFdLFBbMip5KzRdPURbMl0sUFsyKnkrNV09RFszXSk6KFBbMip5KzJdPURbMip5LTJdLFBbMip5KzNdPURbMip5LTFdLFBbMip5KzRdPURbMip5LTJdLFBbMip5KzVdPURbMip5LTFdKSxkLnBvc2l0aW9uQnVmZmVyKGYoUCkpLGQucG9zaXRpb25GcmFjdEJ1ZmZlcihwKFApKX1pZih0LnJhbmdlP2QucmFuZ2U9dC5yYW5nZTpkLnJhbmdlfHwoZC5yYW5nZT1kLmJvdW5kcyksKHQucmFuZ2V8fHQucG9zaXRpb25zKSYmZC5jb3VudCl7dmFyIFI9ZC5ib3VuZHMsRj1SWzJdLVJbMF0sQj1SWzNdLVJbMV0sTj1kLnJhbmdlWzJdLWQucmFuZ2VbMF0saj1kLnJhbmdlWzNdLWQucmFuZ2VbMV07ZC5zY2FsZT1bRi9OLEIval0sZC50cmFuc2xhdGU9Wy1kLnJhbmdlWzBdL04rUlswXS9OfHwwLC1kLnJhbmdlWzFdL2orUlsxXS9qfHwwXSxkLnNjYWxlRnJhY3Q9cChkLnNjYWxlKSxkLnRyYW5zbGF0ZUZyYWN0PXAoZC50cmFuc2xhdGUpfWlmKHQuZGFzaGVzKXt2YXIgVixVPTA7aWYoIXQuZGFzaGVzfHx0LmRhc2hlcy5sZW5ndGg8MilVPTEsVj1uZXcgVWludDhBcnJheShbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0pO2Vsc2V7VT0wO2Zvcih2YXIgcT0wO3E8dC5kYXNoZXMubGVuZ3RoOysrcSlVKz10LmRhc2hlc1txXTtWPW5ldyBVaW50OEFycmF5KFUqdi5kYXNoTXVsdCk7Zm9yKHZhciBIPTAsRz0yNTUsWT0wO1k8MjtZKyspZm9yKHZhciBXPTA7Vzx0LmRhc2hlcy5sZW5ndGg7KytXKXtmb3IodmFyIFg9MCxaPXQuZGFzaGVzW1ddKnYuZGFzaE11bHQqLjU7WDxaOysrWClWW0grK109RztHXj0yNTV9fWQuZGFzaExlbmd0aD1VLGQuZGFzaFRleHR1cmUoe2NoYW5uZWxzOjEsZGF0YTpWLHdpZHRoOlYubGVuZ3RoLGhlaWdodDoxLG1hZzpcImxpbmVhclwiLG1pbjpcImxpbmVhclwifSwwLDApfWlmKHQuY29sb3Ipe3ZhciAkPWQuY291bnQsSj10LmNvbG9yO0p8fChKPVwidHJhbnNwYXJlbnRcIik7dmFyIEs9bmV3IFVpbnQ4QXJyYXkoNCokKzQpO2lmKEFycmF5LmlzQXJyYXkoSikmJlwibnVtYmVyXCIhPXR5cGVvZiBKWzBdKXtmb3IodmFyIFE9MDtRPCQ7USsrKXt2YXIgdHQ9bihKW1FdLFwidWludDhcIik7Sy5zZXQodHQsNCpRKX1LLnNldChuKEpbMF0sXCJ1aW50OFwiKSw0KiQpfWVsc2UgZm9yKHZhciBldD1uKEosXCJ1aW50OFwiKSxydD0wO3J0PCQrMTtydCsrKUsuc2V0KGV0LDQqcnQpO2QuY29sb3JCdWZmZXIoe3VzYWdlOlwiZHluYW1pY1wiLHR5cGU6XCJ1aW50OFwiLGRhdGE6S30pfX1lbHNlIGUucGFzc2VzW2hdPW51bGx9KSx0Lmxlbmd0aDx0aGlzLnBhc3Nlcy5sZW5ndGgpe2Zvcih2YXIgaD10Lmxlbmd0aDtoPHRoaXMucGFzc2VzLmxlbmd0aDtoKyspe3ZhciBkPWUucGFzc2VzW2hdO2QmJihkLmNvbG9yQnVmZmVyLmRlc3Ryb3koKSxkLnBvc2l0aW9uQnVmZmVyLmRlc3Ryb3koKSxkLmRhc2hUZXh0dXJlLmRlc3Ryb3koKSl9dGhpcy5wYXNzZXMubGVuZ3RoPXQubGVuZ3RofWZvcih2YXIgbT1bXSx5PTA7eTx0aGlzLnBhc3Nlcy5sZW5ndGg7eSsrKW51bGwhPT1lLnBhc3Nlc1t5XSYmbS5wdXNoKGUucGFzc2VzW3ldKTtyZXR1cm4gdGhpcy5wYXNzZXM9bSx0aGlzfX0sdi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY29sb3JCdWZmZXIuZGVzdHJveSgpLHQucG9zaXRpb25CdWZmZXIuZGVzdHJveSgpLHQuZGFzaFRleHR1cmUuZGVzdHJveSgpfSksdGhpcy5wYXNzZXMubGVuZ3RoPTAsdGhpc319LHtcImFycmF5LWJvdW5kc1wiOjU2LFwiYXJyYXktbm9ybWFsaXplXCI6NTcsXCJjb2xvci1ub3JtYWxpemVcIjoxMTEsZWFyY3V0OjE2MyxcImVzNi13ZWFrLW1hcFwiOjIxNyxcImZsYXR0ZW4tdmVydGV4LWRhdGFcIjoyMjQsZ2xzbGlmeTo0MDIsXCJvYmplY3QtYXNzaWduXCI6NDQ3LFwicGFyc2UtcmVjdFwiOjQ1MixcInBpY2stYnktYWxpYXNcIjo0NTgsXCJ0by1mbG9hdDMyXCI6NTIzfV0sNDg1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1bXSxuPSEwLGk9ITEsYT12b2lkIDA7dHJ5e2Zvcih2YXIgbyxzPXRbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz1zLm5leHQoKSkuZG9uZSkmJihyLnB1c2goby52YWx1ZSksIWV8fHIubGVuZ3RoIT09ZSk7bj0hMCk7fWNhdGNoKHQpe2k9ITAsYT10fWZpbmFsbHl7dHJ5e258fG51bGw9PXMucmV0dXJufHxzLnJldHVybigpfWZpbmFsbHl7aWYoaSl0aHJvdyBhfX1yZXR1cm4gcn0odCxlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKX0oKX1mdW5jdGlvbiBpKHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIGU9MCxyPW5ldyBBcnJheSh0Lmxlbmd0aCk7ZTx0Lmxlbmd0aDtlKyspcltlXT10W2VdO3JldHVybiByfX0odCl8fGZ1bmN0aW9uKHQpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QodCl8fFwiW29iamVjdCBBcmd1bWVudHNdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKX0oKX12YXIgYT10KFwiY29sb3Itbm9ybWFsaXplXCIpLG89dChcImFycmF5LWJvdW5kc1wiKSxzPXQoXCJjb2xvci1pZFwiKSxsPXQoXCJwb2ludC1jbHVzdGVyXCIpLGM9dChcIm9iamVjdC1hc3NpZ25cIiksdT10KFwiZ2xzbGlmeVwiKSxoPXQoXCJwaWNrLWJ5LWFsaWFzXCIpLGY9dChcInVwZGF0ZS1kaWZmXCIpLHA9dChcImZsYXR0ZW4tdmVydGV4LWRhdGFcIiksZD10KFwiaXMtaWV4cGxvcmVyXCIpLGc9dChcInRvLWZsb2F0MzJcIiksdj10KFwicGFyc2UtcmVjdFwiKSxtPXk7ZnVuY3Rpb24geSh0LGUpe3ZhciByPXRoaXM7aWYoISh0aGlzIGluc3RhbmNlb2YgeSkpcmV0dXJuIG5ldyB5KHQsZSk7XCJmdW5jdGlvblwiPT10eXBlb2YgdD8oZXx8KGU9e30pLGUucmVnbD10KTooZT10LHQ9bnVsbCksZSYmZS5sZW5ndGgmJihlLnBvc2l0aW9ucz1lKTt2YXIgbixpPSh0PWUucmVnbCkuX2dsLGE9W107dGhpcy50b29NYW55Q29sb3JzPWQsbj10LnRleHR1cmUoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMTAyMCksd2lkdGg6MjU1LGhlaWdodDoxLHR5cGU6XCJ1aW50OFwiLGZvcm1hdDpcInJnYmFcIix3cmFwUzpcImNsYW1wXCIsd3JhcFQ6XCJjbGFtcFwiLG1hZzpcIm5lYXJlc3RcIixtaW46XCJuZWFyZXN0XCJ9KSxjKHRoaXMse3JlZ2w6dCxnbDppLGdyb3VwczpbXSxtYXJrZXJDYWNoZTpbbnVsbF0sbWFya2VyVGV4dHVyZXM6W251bGxdLHBhbGV0dGU6YSxwYWxldHRlSWRzOnt9LHBhbGV0dGVUZXh0dXJlOm4sbWF4Q29sb3JzOjI1NSxtYXhTaXplOjEwMCxjYW52YXM6aS5jYW52YXN9KSx0aGlzLnVwZGF0ZShlKTt2YXIgbz17dW5pZm9ybXM6e3BpeGVsUmF0aW86dC5jb250ZXh0KFwicGl4ZWxSYXRpb1wiKSxwYWxldHRlOm4scGFsZXR0ZVNpemU6ZnVuY3Rpb24odCxlKXtyZXR1cm5bci50b29NYW55Q29sb3JzPzA6MjU1LG4uaGVpZ2h0XX0sc2NhbGU6dC5wcm9wKFwic2NhbGVcIiksc2NhbGVGcmFjdDp0LnByb3AoXCJzY2FsZUZyYWN0XCIpLHRyYW5zbGF0ZTp0LnByb3AoXCJ0cmFuc2xhdGVcIiksdHJhbnNsYXRlRnJhY3Q6dC5wcm9wKFwidHJhbnNsYXRlRnJhY3RcIiksb3BhY2l0eTp0LnByb3AoXCJvcGFjaXR5XCIpLG1hcmtlcjp0LnByb3AoXCJtYXJrZXJUZXh0dXJlXCIpfSxhdHRyaWJ1dGVzOnt4OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUueEF0dHJ8fHtidWZmZXI6ZS5wb3NpdGlvbkJ1ZmZlcixzdHJpZGU6OCxvZmZzZXQ6MH19LHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS55QXR0cnx8e2J1ZmZlcjplLnBvc2l0aW9uQnVmZmVyLHN0cmlkZTo4LG9mZnNldDo0fX0seEZyYWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUueEF0dHI/e2NvbnN0YW50OlswLDBdfTp7YnVmZmVyOmUucG9zaXRpb25GcmFjdEJ1ZmZlcixzdHJpZGU6OCxvZmZzZXQ6MH19LHlGcmFjdDpmdW5jdGlvbih0LGUpe3JldHVybiBlLnlBdHRyP3tjb25zdGFudDpbMCwwXX06e2J1ZmZlcjplLnBvc2l0aW9uRnJhY3RCdWZmZXIsc3RyaWRlOjgsb2Zmc2V0OjR9fSxzaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc2l6ZS5sZW5ndGg/e2J1ZmZlcjplLnNpemVCdWZmZXIsc3RyaWRlOjIsb2Zmc2V0OjB9Ontjb25zdGFudDpbTWF0aC5yb3VuZCgyNTUqZS5zaXplL3IubWF4U2l6ZSldfX0sYm9yZGVyU2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybiBlLmJvcmRlclNpemUubGVuZ3RoP3tidWZmZXI6ZS5zaXplQnVmZmVyLHN0cmlkZToyLG9mZnNldDoxfTp7Y29uc3RhbnQ6W01hdGgucm91bmQoMjU1KmUuYm9yZGVyU2l6ZS9yLm1heFNpemUpXX19LGNvbG9ySWQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5jb2xvci5sZW5ndGg/e2J1ZmZlcjplLmNvbG9yQnVmZmVyLHN0cmlkZTpyLnRvb01hbnlDb2xvcnM/ODo0LG9mZnNldDowfTp7Y29uc3RhbnQ6ci50b29NYW55Q29sb3JzP2Euc2xpY2UoNCplLmNvbG9yLDQqZS5jb2xvcis0KTpbZS5jb2xvcl19fSxib3JkZXJDb2xvcklkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuYm9yZGVyQ29sb3IubGVuZ3RoP3tidWZmZXI6ZS5jb2xvckJ1ZmZlcixzdHJpZGU6ci50b29NYW55Q29sb3JzPzg6NCxvZmZzZXQ6ci50b29NYW55Q29sb3JzPzQ6Mn06e2NvbnN0YW50OnIudG9vTWFueUNvbG9ycz9hLnNsaWNlKDQqZS5ib3JkZXJDb2xvciw0KmUuYm9yZGVyQ29sb3IrNCk6W2UuYm9yZGVyQ29sb3JdfX0saXNBY3RpdmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4hMD09PWUuYWN0aXZhdGlvbj97Y29uc3RhbnQ6WzFdfTplLmFjdGl2YXRpb24/ZS5hY3RpdmF0aW9uOntjb25zdGFudDpbMF19fX0sYmxlbmQ6e2VuYWJsZTohMCxjb2xvcjpbMCwwLDAsMV0sZnVuYzp7c3JjUkdCOlwic3JjIGFscGhhXCIsZHN0UkdCOlwib25lIG1pbnVzIHNyYyBhbHBoYVwiLHNyY0FscGhhOlwib25lIG1pbnVzIGRzdCBhbHBoYVwiLGRzdEFscGhhOlwib25lXCJ9fSxzY2lzc29yOntlbmFibGU6ITAsYm94OnQucHJvcChcInZpZXdwb3J0XCIpfSx2aWV3cG9ydDp0LnByb3AoXCJ2aWV3cG9ydFwiKSxzdGVuY2lsOntlbmFibGU6ITF9LGRlcHRoOntlbmFibGU6ITF9LGVsZW1lbnRzOnQucHJvcChcImVsZW1lbnRzXCIpLGNvdW50OnQucHJvcChcImNvdW50XCIpLG9mZnNldDp0LnByb3AoXCJvZmZzZXRcIikscHJpbWl0aXZlOlwicG9pbnRzXCJ9LHM9Yyh7fSxvKTtzLmZyYWc9dShbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yLCBmcmFnQm9yZGVyQ29sb3I7XFxudmFyeWluZyBmbG9hdCBmcmFnV2lkdGgsIGZyYWdCb3JkZXJDb2xvckxldmVsLCBmcmFnQ29sb3JMZXZlbDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCBtYXJrZXI7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFJhdGlvLCBvcGFjaXR5O1xcblxcbmZsb2F0IHNtb290aFN0ZXAoZmxvYXQgeCwgZmxvYXQgeSkge1xcbiAgcmV0dXJuIDEuMCAvICgxLjAgKyBleHAoNTAuMCooeCAtIHkpKSk7XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG4gIGZsb2F0IGRpc3QgPSB0ZXh0dXJlMkQobWFya2VyLCBnbF9Qb2ludENvb3JkKS5yLCBkZWx0YSA9IGZyYWdXaWR0aDtcXG5cXG4gIC8vIG1heC1kaXN0YW5jZSBhbHBoYVxcbiAgaWYgKGRpc3QgPCAwLjAwMykgZGlzY2FyZDtcXG5cXG4gIC8vIG51bGwtYm9yZGVyIGNhc2VcXG4gIGlmIChmcmFnQm9yZGVyQ29sb3JMZXZlbCA9PSBmcmFnQ29sb3JMZXZlbCB8fCBmcmFnQm9yZGVyQ29sb3IuYSA9PSAwLikge1xcbiAgICBmbG9hdCBjb2xvckFtdCA9IHNtb290aHN0ZXAoLjUgLSBkZWx0YSwgLjUgKyBkZWx0YSwgZGlzdCk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoZnJhZ0NvbG9yLnJnYiwgY29sb3JBbXQgKiBmcmFnQ29sb3IuYSAqIG9wYWNpdHkpO1xcbiAgfVxcbiAgZWxzZSB7XFxuICAgIGZsb2F0IGJvcmRlckNvbG9yQW10ID0gc21vb3Roc3RlcChmcmFnQm9yZGVyQ29sb3JMZXZlbCAtIGRlbHRhLCBmcmFnQm9yZGVyQ29sb3JMZXZlbCArIGRlbHRhLCBkaXN0KTtcXG4gICAgZmxvYXQgY29sb3JBbXQgPSBzbW9vdGhzdGVwKGZyYWdDb2xvckxldmVsIC0gZGVsdGEsIGZyYWdDb2xvckxldmVsICsgZGVsdGEsIGRpc3QpO1xcblxcbiAgICB2ZWM0IGNvbG9yID0gZnJhZ0JvcmRlckNvbG9yO1xcbiAgICBjb2xvci5hICo9IGJvcmRlckNvbG9yQW10O1xcbiAgICBjb2xvciA9IG1peChjb2xvciwgZnJhZ0NvbG9yLCBjb2xvckFtdCk7XFxuICAgIGNvbG9yLmEgKj0gb3BhY2l0eTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxuICB9XFxuXFxufVxcblwiXSkscy52ZXJ0PXUoW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIGZsb2F0IHgsIHksIHhGcmFjdCwgeUZyYWN0O1xcbmF0dHJpYnV0ZSBmbG9hdCBzaXplLCBib3JkZXJTaXplO1xcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9ySWQsIGJvcmRlckNvbG9ySWQ7XFxuYXR0cmlidXRlIGZsb2F0IGlzQWN0aXZlO1xcblxcbnVuaWZvcm0gdmVjMiBzY2FsZSwgc2NhbGVGcmFjdCwgdHJhbnNsYXRlLCB0cmFuc2xhdGVGcmFjdCwgcGFsZXR0ZVNpemU7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFJhdGlvO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHBhbGV0dGU7XFxuXFxuY29uc3QgZmxvYXQgbWF4U2l6ZSA9IDEwMC47XFxuY29uc3QgZmxvYXQgYm9yZGVyTGV2ZWwgPSAuNTtcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yLCBmcmFnQm9yZGVyQ29sb3I7XFxudmFyeWluZyBmbG9hdCBmcmFnUG9pbnRTaXplLCBmcmFnQm9yZGVyUmFkaXVzLCBmcmFnV2lkdGgsIGZyYWdCb3JkZXJDb2xvckxldmVsLCBmcmFnQ29sb3JMZXZlbDtcXG5cXG5ib29sIGlzRGlyZWN0ID0gKHBhbGV0dGVTaXplLnggPCAxLik7XFxuXFxudmVjNCBnZXRDb2xvcih2ZWM0IGlkKSB7XFxuICByZXR1cm4gaXNEaXJlY3QgPyBpZCAvIDI1NS4gOiB0ZXh0dXJlMkQocGFsZXR0ZSxcXG4gICAgdmVjMihcXG4gICAgICAoaWQueCArIC41KSAvIHBhbGV0dGVTaXplLngsXFxuICAgICAgKGlkLnkgKyAuNSkgLyBwYWxldHRlU2l6ZS55XFxuICAgIClcXG4gICk7XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmIChpc0FjdGl2ZSA9PSAwLikgcmV0dXJuO1xcblxcbiAgdmVjMiBwb3NpdGlvbiA9IHZlYzIoeCwgeSk7XFxuICB2ZWMyIHBvc2l0aW9uRnJhY3QgPSB2ZWMyKHhGcmFjdCwgeUZyYWN0KTtcXG5cXG4gIHZlYzQgY29sb3IgPSBnZXRDb2xvcihjb2xvcklkKTtcXG4gIHZlYzQgYm9yZGVyQ29sb3IgPSBnZXRDb2xvcihib3JkZXJDb2xvcklkKTtcXG5cXG4gIGZsb2F0IHNpemUgPSBzaXplICogbWF4U2l6ZSAvIDI1NS47XFxuICBmbG9hdCBib3JkZXJTaXplID0gYm9yZGVyU2l6ZSAqIG1heFNpemUgLyAyNTUuO1xcblxcbiAgZ2xfUG9pbnRTaXplID0gMi4gKiBzaXplICogcGl4ZWxSYXRpbztcXG4gIGZyYWdQb2ludFNpemUgPSBzaXplICogcGl4ZWxSYXRpbztcXG5cXG4gIHZlYzIgcG9zID0gKHBvc2l0aW9uICsgdHJhbnNsYXRlKSAqIHNjYWxlXFxuICAgICAgKyAocG9zaXRpb25GcmFjdCArIHRyYW5zbGF0ZUZyYWN0KSAqIHNjYWxlXFxuICAgICAgKyAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVGcmFjdFxcbiAgICAgICsgKHBvc2l0aW9uRnJhY3QgKyB0cmFuc2xhdGVGcmFjdCkgKiBzY2FsZUZyYWN0O1xcblxcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcyAqIDIuIC0gMS4sIDAsIDEpO1xcblxcbiAgZnJhZ0NvbG9yID0gY29sb3I7XFxuICBmcmFnQm9yZGVyQ29sb3IgPSBib3JkZXJDb2xvcjtcXG4gIGZyYWdXaWR0aCA9IDEuIC8gZ2xfUG9pbnRTaXplO1xcblxcbiAgZnJhZ0JvcmRlckNvbG9yTGV2ZWwgPSBjbGFtcChib3JkZXJMZXZlbCAtIGJvcmRlckxldmVsICogYm9yZGVyU2l6ZSAvIHNpemUsIDAuLCAxLik7XFxuICBmcmFnQ29sb3JMZXZlbCA9IGNsYW1wKGJvcmRlckxldmVsICsgKDEuIC0gYm9yZGVyTGV2ZWwpICogYm9yZGVyU2l6ZSAvIHNpemUsIDAuLCAxLik7XFxufVwiXSksdGhpcy5kcmF3TWFya2VyPXQocyk7dmFyIGw9Yyh7fSxvKTtsLmZyYWc9dShbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yLCBmcmFnQm9yZGVyQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xcbnZhcnlpbmcgZmxvYXQgZnJhZ0JvcmRlclJhZGl1cywgZnJhZ1dpZHRoO1xcblxcbmZsb2F0IHNtb290aFN0ZXAoZmxvYXQgZWRnZTAsIGZsb2F0IGVkZ2UxLCBmbG9hdCB4KSB7XFxuXFx0ZmxvYXQgdDtcXG5cXHR0ID0gY2xhbXAoKHggLSBlZGdlMCkgLyAoZWRnZTEgLSBlZGdlMCksIDAuMCwgMS4wKTtcXG5cXHRyZXR1cm4gdCAqIHQgKiAoMy4wIC0gMi4wICogdCk7XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG5cXHRmbG9hdCByYWRpdXMsIGFscGhhID0gMS4wLCBkZWx0YSA9IGZyYWdXaWR0aDtcXG5cXG5cXHRyYWRpdXMgPSBsZW5ndGgoMi4wICogZ2xfUG9pbnRDb29yZC54eSAtIDEuMCk7XFxuXFxuXFx0aWYgKHJhZGl1cyA+IDEuMCArIGRlbHRhKSB7XFxuXFx0XFx0ZGlzY2FyZDtcXG5cXHR9XFxuXFxuXFx0YWxwaGEgLT0gc21vb3Roc3RlcCgxLjAgLSBkZWx0YSwgMS4wICsgZGVsdGEsIHJhZGl1cyk7XFxuXFxuXFx0ZmxvYXQgYm9yZGVyUmFkaXVzID0gZnJhZ0JvcmRlclJhZGl1cztcXG5cXHRmbG9hdCByYXRpbyA9IHNtb290aHN0ZXAoYm9yZGVyUmFkaXVzIC0gZGVsdGEsIGJvcmRlclJhZGl1cyArIGRlbHRhLCByYWRpdXMpO1xcblxcdHZlYzQgY29sb3IgPSBtaXgoZnJhZ0NvbG9yLCBmcmFnQm9yZGVyQ29sb3IsIHJhdGlvKTtcXG5cXHRjb2xvci5hICo9IGFscGhhICogb3BhY2l0eTtcXG5cXHRnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCJdKSxsLnZlcnQ9dShbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgZmxvYXQgeCwgeSwgeEZyYWN0LCB5RnJhY3Q7XFxuYXR0cmlidXRlIGZsb2F0IHNpemUsIGJvcmRlclNpemU7XFxuYXR0cmlidXRlIHZlYzQgY29sb3JJZCwgYm9yZGVyQ29sb3JJZDtcXG5hdHRyaWJ1dGUgZmxvYXQgaXNBY3RpdmU7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0O1xcbnVuaWZvcm0gZmxvYXQgcGl4ZWxSYXRpbztcXG51bmlmb3JtIHNhbXBsZXIyRCBwYWxldHRlO1xcbnVuaWZvcm0gdmVjMiBwYWxldHRlU2l6ZTtcXG5cXG5jb25zdCBmbG9hdCBtYXhTaXplID0gMTAwLjtcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yLCBmcmFnQm9yZGVyQ29sb3I7XFxudmFyeWluZyBmbG9hdCBmcmFnQm9yZGVyUmFkaXVzLCBmcmFnV2lkdGg7XFxuXFxuYm9vbCBpc0RpcmVjdCA9IChwYWxldHRlU2l6ZS54IDwgMS4pO1xcblxcbnZlYzQgZ2V0Q29sb3IodmVjNCBpZCkge1xcbiAgcmV0dXJuIGlzRGlyZWN0ID8gaWQgLyAyNTUuIDogdGV4dHVyZTJEKHBhbGV0dGUsXFxuICAgIHZlYzIoXFxuICAgICAgKGlkLnggKyAuNSkgLyBwYWxldHRlU2l6ZS54LFxcbiAgICAgIChpZC55ICsgLjUpIC8gcGFsZXR0ZVNpemUueVxcbiAgICApXFxuICApO1xcbn1cXG5cXG52b2lkIG1haW4oKSB7XFxuICAvLyBpZ25vcmUgaW5hY3RpdmUgcG9pbnRzXFxuICBpZiAoaXNBY3RpdmUgPT0gMC4pIHJldHVybjtcXG5cXG4gIHZlYzIgcG9zaXRpb24gPSB2ZWMyKHgsIHkpO1xcbiAgdmVjMiBwb3NpdGlvbkZyYWN0ID0gdmVjMih4RnJhY3QsIHlGcmFjdCk7XFxuXFxuICB2ZWM0IGNvbG9yID0gZ2V0Q29sb3IoY29sb3JJZCk7XFxuICB2ZWM0IGJvcmRlckNvbG9yID0gZ2V0Q29sb3IoYm9yZGVyQ29sb3JJZCk7XFxuXFxuICBmbG9hdCBzaXplID0gc2l6ZSAqIG1heFNpemUgLyAyNTUuO1xcbiAgZmxvYXQgYm9yZGVyU2l6ZSA9IGJvcmRlclNpemUgKiBtYXhTaXplIC8gMjU1LjtcXG5cXG4gIGdsX1BvaW50U2l6ZSA9IChzaXplICsgYm9yZGVyU2l6ZSkgKiBwaXhlbFJhdGlvO1xcblxcbiAgdmVjMiBwb3MgPSAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVcXG4gICAgICArIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVcXG4gICAgICArIChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZUZyYWN0XFxuICAgICAgKyAocG9zaXRpb25GcmFjdCArIHRyYW5zbGF0ZUZyYWN0KSAqIHNjYWxlRnJhY3Q7XFxuXFxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zICogMi4gLSAxLiwgMCwgMSk7XFxuXFxuICBmcmFnQm9yZGVyUmFkaXVzID0gMS4gLSAyLiAqIGJvcmRlclNpemUgLyAoc2l6ZSArIGJvcmRlclNpemUpO1xcbiAgZnJhZ0NvbG9yID0gY29sb3I7XFxuICBmcmFnQm9yZGVyQ29sb3IgPSBib3JkZXJDb2xvci5hID09IDAuIHx8IGJvcmRlclNpemUgPT0gMC4gPyB2ZWM0KGNvbG9yLnJnYiwgMC4pIDogYm9yZGVyQ29sb3I7XFxuICBmcmFnV2lkdGggPSAxLiAvIGdsX1BvaW50U2l6ZTtcXG59XFxuXCJdKSxkJiYobC5mcmFnPWwuZnJhZy5yZXBsYWNlKFwic21vb3Roc3RlcFwiLFwic21vb3RoU3RlcFwiKSxzLmZyYWc9cy5mcmFnLnJlcGxhY2UoXCJzbW9vdGhzdGVwXCIsXCJzbW9vdGhTdGVwXCIpKSx0aGlzLmRyYXdDaXJjbGU9dChsKX15LmRlZmF1bHRzPXtjb2xvcjpcImJsYWNrXCIsYm9yZGVyQ29sb3I6XCJ0cmFuc3BhcmVudFwiLGJvcmRlclNpemU6MCxzaXplOjEyLG9wYWNpdHk6MSxtYXJrZXI6dm9pZCAwLHZpZXdwb3J0Om51bGwscmFuZ2U6bnVsbCxwaXhlbFNpemU6bnVsbCxjb3VudDowLG9mZnNldDowLGJvdW5kczpudWxsLHBvc2l0aW9uczpbXSxzbmFwOjFlNH0seS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJnRoaXMudXBkYXRlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLmRyYXcoKSx0aGlzfSx5LnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXJbbl09YXJndW1lbnRzW25dO3ZhciBpPXRoaXMuZ3JvdXBzO2lmKDE9PT1yLmxlbmd0aCYmQXJyYXkuaXNBcnJheShyWzBdKSYmKG51bGw9PT1yWzBdWzBdfHxBcnJheS5pc0FycmF5KHJbMF1bMF0pKSYmKHI9clswXSksdGhpcy5yZWdsLl9yZWZyZXNoKCksci5sZW5ndGgpZm9yKHZhciBhPTA7YTxyLmxlbmd0aDthKyspdGhpcy5kcmF3SXRlbShhLHJbYV0pO2Vsc2UgaS5mb3JFYWNoKGZ1bmN0aW9uKGUscil7dC5kcmF3SXRlbShyKX0pO3JldHVybiB0aGlzfSx5LnByb3RvdHlwZS5kcmF3SXRlbT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ3JvdXBzLG49clt0XTtpZihcIm51bWJlclwiPT10eXBlb2YgZSYmKHQ9ZSxuPXJbZV0sZT1udWxsKSxuJiZuLmNvdW50JiZuLm9wYWNpdHkpe24uYWN0aXZhdGlvblswXSYmdGhpcy5kcmF3Q2lyY2xlKHRoaXMuZ2V0TWFya2VyRHJhd09wdGlvbnMoMCxuLGUpKTtmb3IodmFyIGE9W10sbz0xO288bi5hY3RpdmF0aW9uLmxlbmd0aDtvKyspbi5hY3RpdmF0aW9uW29dJiYoITA9PT1uLmFjdGl2YXRpb25bb118fG4uYWN0aXZhdGlvbltvXS5kYXRhLmxlbmd0aCkmJmEucHVzaC5hcHBseShhLGkodGhpcy5nZXRNYXJrZXJEcmF3T3B0aW9ucyhvLG4sZSkpKTthLmxlbmd0aCYmdGhpcy5kcmF3TWFya2VyKGEpfX0seS5wcm90b3R5cGUuZ2V0TWFya2VyRHJhd09wdGlvbnM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUucmFuZ2UsYT1lLnRyZWUsbz1lLnZpZXdwb3J0LHM9ZS5hY3RpdmF0aW9uLGw9ZS5zZWxlY3Rpb25CdWZmZXIsdT1lLmNvdW50O3RoaXMucmVnbDtpZighYSlyZXR1cm4gcj9bYyh7fSxlLHttYXJrZXJUZXh0dXJlOnRoaXMubWFya2VyVGV4dHVyZXNbdF0sYWN0aXZhdGlvbjpzW3RdLGNvdW50OnIubGVuZ3RoLGVsZW1lbnRzOnIsb2Zmc2V0OjB9KV06W2Moe30sZSx7bWFya2VyVGV4dHVyZTp0aGlzLm1hcmtlclRleHR1cmVzW3RdLGFjdGl2YXRpb246c1t0XSxvZmZzZXQ6MH0pXTt2YXIgaD1bXSxmPWEucmFuZ2UoaSx7bG9kOiEwLHB4OlsoaVsyXS1pWzBdKS9vLndpZHRoLChpWzNdLWlbMV0pL28uaGVpZ2h0XX0pO2lmKHIpe2Zvcih2YXIgcD1zW3RdLmRhdGEsZD1uZXcgVWludDhBcnJheSh1KSxnPTA7ZzxyLmxlbmd0aDtnKyspe3ZhciB2PXJbZ107ZFt2XT1wP3Bbdl06MX1sLnN1YmRhdGEoZCl9Zm9yKHZhciBtPWYubGVuZ3RoO20tLTspe3ZhciB5PW4oZlttXSwyKSx4PXlbMF0sYj15WzFdO2gucHVzaChjKHt9LGUse21hcmtlclRleHR1cmU6dGhpcy5tYXJrZXJUZXh0dXJlc1t0XSxhY3RpdmF0aW9uOnI/bDpzW3RdLG9mZnNldDp4LGNvdW50OmIteH0pKX1yZXR1cm4gaH0seS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXJbbl09YXJndW1lbnRzW25dO2lmKHIubGVuZ3RoKXsxPT09ci5sZW5ndGgmJkFycmF5LmlzQXJyYXkoclswXSkmJihyPXJbMF0pO3ZhciBpPXRoaXMuZ3JvdXBzLGE9dGhpcy5nbCxzPXRoaXMucmVnbCx1PXRoaXMubWF4U2l6ZSxkPXRoaXMubWF4Q29sb3JzLG09dGhpcy5wYWxldHRlO3RoaXMuZ3JvdXBzPWk9ci5tYXAoZnVuY3Rpb24oZSxyKXt2YXIgbj1pW3JdO2lmKHZvaWQgMD09PWUpcmV0dXJuIG47bnVsbD09PWU/ZT17cG9zaXRpb25zOm51bGx9OlwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZT17b25kcmF3OmV9OlwibnVtYmVyXCI9PXR5cGVvZiBlWzBdJiYoZT17cG9zaXRpb25zOmV9KSxudWxsPT09KGU9aChlLHtwb3NpdGlvbnM6XCJwb3NpdGlvbnMgZGF0YSBwb2ludHNcIixzbmFwOlwic25hcCBjbHVzdGVyIGxvZCB0cmVlXCIsc2l6ZTpcInNpemVzIHNpemUgcmFkaXVzXCIsYm9yZGVyU2l6ZTpcImJvcmRlclNpemVzIGJvcmRlclNpemUgYm9yZGVyLXNpemUgYm9yZGVyc2l6ZSBib3JkZXJXaWR0aCBib3JkZXJXaWR0aHMgYm9yZGVyLXdpZHRoIGJvcmRlcndpZHRoIHN0cm9rZS13aWR0aCBzdHJva2VXaWR0aCBzdHJva2V3aWR0aCBvdXRsaW5lXCIsY29sb3I6XCJjb2xvcnMgY29sb3IgZmlsbCBmaWxsLWNvbG9yIGZpbGxDb2xvclwiLGJvcmRlckNvbG9yOlwiYm9yZGVyQ29sb3JzIGJvcmRlckNvbG9yIHN0cm9rZSBzdHJva2UtY29sb3Igc3Ryb2tlQ29sb3JcIixtYXJrZXI6XCJtYXJrZXJzIG1hcmtlciBzaGFwZVwiLHJhbmdlOlwicmFuZ2UgZGF0YUJveCBkYXRhYm94XCIsdmlld3BvcnQ6XCJ2aWV3cG9ydCB2aWV3UG9ydCB2aWV3Qm94IHZpZXdib3hcIixvcGFjaXR5Olwib3BhY2l0eSBhbHBoYSB0cmFuc3BhcmVuY3lcIixib3VuZHM6XCJib3VuZCBib3VuZHMgYm91bmRhcmllcyBsaW1pdHNcIix0b29NYW55Q29sb3JzOlwidG9vTWFueUNvbG9ycyBwYWxldHRlIHBhbGV0dGVNb2RlIG9wdGltaXplUGFsZXR0ZSBlbmFibGVQYWxldHRlXCJ9KSkucG9zaXRpb25zJiYoZS5wb3NpdGlvbnM9W10pLG51bGwhPWUudG9vTWFueUNvbG9ycyYmKHQudG9vTWFueUNvbG9ycz1lLnRvb01hbnlDb2xvcnMpLG58fChpW3JdPW49e2lkOnIsc2NhbGU6bnVsbCx0cmFuc2xhdGU6bnVsbCxzY2FsZUZyYWN0Om51bGwsdHJhbnNsYXRlRnJhY3Q6bnVsbCxhY3RpdmF0aW9uOltdLHNlbGVjdGlvbkJ1ZmZlcjpzLmJ1ZmZlcih7ZGF0YTpuZXcgVWludDhBcnJheSgwKSx1c2FnZTpcInN0cmVhbVwiLHR5cGU6XCJ1aW50OFwifSksc2l6ZUJ1ZmZlcjpzLmJ1ZmZlcih7ZGF0YTpuZXcgVWludDhBcnJheSgwKSx1c2FnZTpcImR5bmFtaWNcIix0eXBlOlwidWludDhcIn0pLGNvbG9yQnVmZmVyOnMuYnVmZmVyKHtkYXRhOm5ldyBVaW50OEFycmF5KDApLHVzYWdlOlwiZHluYW1pY1wiLHR5cGU6XCJ1aW50OFwifSkscG9zaXRpb25CdWZmZXI6cy5idWZmZXIoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMCksdXNhZ2U6XCJkeW5hbWljXCIsdHlwZTpcImZsb2F0XCJ9KSxwb3NpdGlvbkZyYWN0QnVmZmVyOnMuYnVmZmVyKHtkYXRhOm5ldyBVaW50OEFycmF5KDApLHVzYWdlOlwiZHluYW1pY1wiLHR5cGU6XCJmbG9hdFwifSl9LGU9Yyh7fSx5LmRlZmF1bHRzLGUpKSwhZS5wb3NpdGlvbnN8fFwibWFya2VyXCJpbiBlfHwoZS5tYXJrZXI9bi5tYXJrZXIsZGVsZXRlIG4ubWFya2VyKSwhZS5tYXJrZXJ8fFwicG9zaXRpb25zXCJpbiBlfHwoZS5wb3NpdGlvbnM9bi5wb3NpdGlvbnMsZGVsZXRlIG4ucG9zaXRpb25zKTt2YXIgeD0wLGI9MDtpZihmKG4sZSxbe3NuYXA6ITAsc2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10JiYodD15LmRlZmF1bHRzLnNpemUpLHgrPXQmJnQubGVuZ3RoPzE6MCx0fSxib3JkZXJTaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PXQmJih0PXkuZGVmYXVsdHMuYm9yZGVyU2l6ZSkseCs9dCYmdC5sZW5ndGg/MTowLHR9LG9wYWNpdHk6cGFyc2VGbG9hdCxjb2xvcjpmdW5jdGlvbihlLHIpe3JldHVybiBudWxsPT1lJiYoZT15LmRlZmF1bHRzLmNvbG9yKSxlPXQudXBkYXRlQ29sb3IoZSksYisrLGV9LGJvcmRlckNvbG9yOmZ1bmN0aW9uKGUscil7cmV0dXJuIG51bGw9PWUmJihlPXkuZGVmYXVsdHMuYm9yZGVyQ29sb3IpLGU9dC51cGRhdGVDb2xvcihlKSxiKyssZX0sYm91bmRzOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5cInJhbmdlXCJpbiByfHwoci5yYW5nZT1udWxsKSx0fSxwb3NpdGlvbnM6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuc25hcCxpPWUucG9zaXRpb25CdWZmZXIsYT1lLnBvc2l0aW9uRnJhY3RCdWZmZXIsYz1lLnNlbGVjdGlvbkJ1ZmZlcjtpZih0Lnh8fHQueSlyZXR1cm4gdC54Lmxlbmd0aD9lLnhBdHRyPXtidWZmZXI6cy5idWZmZXIodC54KSxvZmZzZXQ6MCxzdHJpZGU6NCxjb3VudDp0LngubGVuZ3RofTplLnhBdHRyPXtidWZmZXI6dC54LmJ1ZmZlcixvZmZzZXQ6NCp0Lngub2Zmc2V0fHwwLHN0cmlkZTo0Kih0Lnguc3RyaWRlfHwxKSxjb3VudDp0LnguY291bnR9LHQueS5sZW5ndGg/ZS55QXR0cj17YnVmZmVyOnMuYnVmZmVyKHQueSksb2Zmc2V0OjAsc3RyaWRlOjQsY291bnQ6dC55Lmxlbmd0aH06ZS55QXR0cj17YnVmZmVyOnQueS5idWZmZXIsb2Zmc2V0OjQqdC55Lm9mZnNldHx8MCxzdHJpZGU6NCoodC55LnN0cmlkZXx8MSksY291bnQ6dC55LmNvdW50fSxlLmNvdW50PU1hdGgubWF4KGUueEF0dHIuY291bnQsZS55QXR0ci5jb3VudCksdDt0PXAodCxcImZsb2F0NjRcIik7dmFyIHU9ZS5jb3VudD1NYXRoLmZsb29yKHQubGVuZ3RoLzIpLGg9ZS5ib3VuZHM9dT9vKHQsMik6bnVsbDtpZihyLnJhbmdlfHxlLnJhbmdlfHwoZGVsZXRlIGUucmFuZ2Usci5yYW5nZT1oKSxyLm1hcmtlcnx8ZS5tYXJrZXJ8fChkZWxldGUgZS5tYXJrZXIsci5tYXJrZXI9bnVsbCksbiYmKCEwPT09bnx8dT5uKT9lLnRyZWU9bCh0LHtib3VuZHM6aH0pOm4mJm4ubGVuZ3RoJiYoZS50cmVlPW4pLGUudHJlZSl7dmFyIGY9e3ByaW1pdGl2ZTpcInBvaW50c1wiLHVzYWdlOlwic3RhdGljXCIsZGF0YTplLnRyZWUsdHlwZTpcInVpbnQzMlwifTtlLmVsZW1lbnRzP2UuZWxlbWVudHMoZik6ZS5lbGVtZW50cz1zLmVsZW1lbnRzKGYpfXJldHVybiBpKHtkYXRhOmcuZmxvYXQodCksdXNhZ2U6XCJkeW5hbWljXCJ9KSxhKHtkYXRhOmcuZnJhY3QodCksdXNhZ2U6XCJkeW5hbWljXCJ9KSxjKHtkYXRhOm5ldyBVaW50OEFycmF5KHUpLHR5cGU6XCJ1aW50OFwiLHVzYWdlOlwic3RyZWFtXCJ9KSx0fX0se21hcmtlcjpmdW5jdGlvbihlLHIsbil7dmFyIGk9ci5hY3RpdmF0aW9uO2lmKGkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5kZXN0cm95JiZ0LmRlc3Ryb3koKX0pLGkubGVuZ3RoPTAsZSYmXCJudW1iZXJcIiE9dHlwZW9mIGVbMF0pe2Zvcih2YXIgYT1bXSxvPTAsbD1NYXRoLm1pbihlLmxlbmd0aCxyLmNvdW50KTtvPGw7bysrKXt2YXIgYz10LmFkZE1hcmtlcihlW29dKTthW2NdfHwoYVtjXT1uZXcgVWludDhBcnJheShyLmNvdW50KSksYVtjXVtvXT0xfWZvcih2YXIgdT0wO3U8YS5sZW5ndGg7dSsrKWlmKGFbdV0pe3ZhciBoPXtkYXRhOmFbdV0sdHlwZTpcInVpbnQ4XCIsdXNhZ2U6XCJzdGF0aWNcIn07aVt1XT9pW3VdKGgpOmlbdV09cy5idWZmZXIoaCksaVt1XS5kYXRhPWFbdV19fWVsc2V7aVt0LmFkZE1hcmtlcihlKV09ITB9cmV0dXJuIGV9LHJhbmdlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLmJvdW5kcztpZihuKXJldHVybiB0fHwodD1uKSxlLnNjYWxlPVsxLyh0WzJdLXRbMF0pLDEvKHRbM10tdFsxXSldLGUudHJhbnNsYXRlPVstdFswXSwtdFsxXV0sZS5zY2FsZUZyYWN0PWcuZnJhY3QoZS5zY2FsZSksZS50cmFuc2xhdGVGcmFjdD1nLmZyYWN0KGUudHJhbnNsYXRlKSx0fSx2aWV3cG9ydDpmdW5jdGlvbih0KXtyZXR1cm4gdih0fHxbYS5kcmF3aW5nQnVmZmVyV2lkdGgsYS5kcmF3aW5nQnVmZmVySGVpZ2h0XSl9fV0pLHgpe3ZhciBfPW4sdz1fLmNvdW50LGs9Xy5zaXplLEE9Xy5ib3JkZXJTaXplLFQ9Xy5zaXplQnVmZmVyLE09bmV3IFVpbnQ4QXJyYXkoMip3KTtpZihrLmxlbmd0aHx8QS5sZW5ndGgpZm9yKHZhciBTPTA7Uzx3O1MrKylNWzIqU109TWF0aC5yb3VuZCgyNTUqKG51bGw9PWtbU10/azprW1NdKS91KSxNWzIqUysxXT1NYXRoLnJvdW5kKDI1NSoobnVsbD09QVtTXT9BOkFbU10pL3UpO1Qoe2RhdGE6TSx1c2FnZTpcImR5bmFtaWNcIn0pfWlmKGIpe3ZhciBFLEM9bixMPUMuY291bnQsej1DLmNvbG9yLE89Qy5ib3JkZXJDb2xvcixJPUMuY29sb3JCdWZmZXI7aWYodC50b29NYW55Q29sb3JzKXtpZih6Lmxlbmd0aHx8Ty5sZW5ndGgpe0U9bmV3IFVpbnQ4QXJyYXkoOCpMKTtmb3IodmFyIEQ9MDtEPEw7RCsrKXt2YXIgUD16W0RdO0VbOCpEXT1tWzQqUF0sRVs4KkQrMV09bVs0KlArMV0sRVs4KkQrMl09bVs0KlArMl0sRVs4KkQrM109bVs0KlArM107dmFyIFI9T1tEXTtFWzgqRCs0XT1tWzQqUl0sRVs4KkQrNV09bVs0KlIrMV0sRVs4KkQrNl09bVs0KlIrMl0sRVs4KkQrN109bVs0KlIrM119fX1lbHNlIGlmKHoubGVuZ3RofHxPLmxlbmd0aCl7RT1uZXcgVWludDhBcnJheSg0KkwrMik7Zm9yKHZhciBGPTA7RjxMO0YrKyludWxsIT16W0ZdJiYoRVs0KkZdPXpbRl0lZCxFWzQqRisxXT1NYXRoLmZsb29yKHpbRl0vZCkpLG51bGwhPU9bRl0mJihFWzQqRisyXT1PW0ZdJWQsRVs0KkYrM109TWF0aC5mbG9vcihPW0ZdL2QpKX1JKHtkYXRhOkV8fG5ldyBVaW50OEFycmF5KDApLHR5cGU6XCJ1aW50OFwiLHVzYWdlOlwiZHluYW1pY1wifSl9cmV0dXJuIG59KX19LHkucHJvdG90eXBlLmFkZE1hcmtlcj1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMubWFya2VyVGV4dHVyZXMsbj10aGlzLnJlZ2wsaT10aGlzLm1hcmtlckNhY2hlLGE9bnVsbD09dD8wOmkuaW5kZXhPZih0KTtpZihhPj0wKXJldHVybiBhO2lmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpZT10O2Vsc2V7ZT1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCk7Zm9yKHZhciBvPTAscz10Lmxlbmd0aDtvPHM7bysrKWVbb109MjU1KnRbb119dmFyIGw9TWF0aC5mbG9vcihNYXRoLnNxcnQoZS5sZW5ndGgpKTtyZXR1cm4gYT1yLmxlbmd0aCxpLnB1c2godCksci5wdXNoKG4udGV4dHVyZSh7Y2hhbm5lbHM6MSxkYXRhOmUscmFkaXVzOmwsbWFnOlwibGluZWFyXCIsbWluOlwibGluZWFyXCJ9KSksYX0seS5wcm90b3R5cGUudXBkYXRlQ29sb3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wYWxldHRlSWRzLHI9dGhpcy5wYWxldHRlLG49dGhpcy5tYXhDb2xvcnM7QXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKTt2YXIgaT1bXTtpZihcIm51bWJlclwiPT10eXBlb2YgdFswXSl7dmFyIG89W107aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIGw9MDtsPHQubGVuZ3RoO2wrPTQpby5wdXNoKHQuc2xpY2UobCxsKzQpKTtlbHNlIGZvcih2YXIgYz0wO2M8dC5sZW5ndGg7Yys9NClvLnB1c2godC5zdWJhcnJheShjLGMrNCkpO3Q9b31mb3IodmFyIHU9MDt1PHQubGVuZ3RoO3UrKyl7dmFyIGg9dFt1XTtoPWEoaCxcInVpbnQ4XCIpO3ZhciBmPXMoaCwhMSk7aWYobnVsbD09ZVtmXSl7dmFyIHA9ci5sZW5ndGg7ZVtmXT1NYXRoLmZsb29yKHAvNCkscltwXT1oWzBdLHJbcCsxXT1oWzFdLHJbcCsyXT1oWzJdLHJbcCszXT1oWzNdfWlbdV09ZVtmXX1yZXR1cm4hdGhpcy50b29NYW55Q29sb3JzJiZyLmxlbmd0aD40Km4mJih0aGlzLnRvb01hbnlDb2xvcnM9ITApLHRoaXMudXBkYXRlUGFsZXR0ZShyKSwxPT09aS5sZW5ndGg/aVswXTppfSx5LnByb3RvdHlwZS51cGRhdGVQYWxldHRlPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLnRvb01hbnlDb2xvcnMpe3ZhciBlPXRoaXMubWF4Q29sb3JzLHI9dGhpcy5wYWxldHRlVGV4dHVyZSxuPU1hdGguY2VpbCguMjUqdC5sZW5ndGgvZSk7aWYobj4xKWZvcih2YXIgaT0uMjUqKHQ9dC5zbGljZSgpKS5sZW5ndGglZTtpPG4qZTtpKyspdC5wdXNoKDAsMCwwLDApO3IuaGVpZ2h0PG4mJnIucmVzaXplKGUsbiksci5zdWJpbWFnZSh7d2lkdGg6TWF0aC5taW4oLjI1KnQubGVuZ3RoLGUpLGhlaWdodDpuLGRhdGE6dH0sMCwwKX19LHkucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncm91cHMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnNpemVCdWZmZXIuZGVzdHJveSgpLHQucG9zaXRpb25CdWZmZXIuZGVzdHJveSgpLHQucG9zaXRpb25GcmFjdEJ1ZmZlci5kZXN0cm95KCksdC5jb2xvckJ1ZmZlci5kZXN0cm95KCksdC5hY3RpdmF0aW9uLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuZGVzdHJveSYmdC5kZXN0cm95KCl9KSx0LnNlbGVjdGlvbkJ1ZmZlci5kZXN0cm95KCksdC5lbGVtZW50cyYmdC5lbGVtZW50cy5kZXN0cm95KCl9KSx0aGlzLmdyb3Vwcy5sZW5ndGg9MCx0aGlzLnBhbGV0dGVUZXh0dXJlLmRlc3Ryb3koKSx0aGlzLm1hcmtlclRleHR1cmVzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuZGVzdHJveSYmdC5kZXN0cm95KCl9KSx0aGlzfTt2YXIgeD10KFwib2JqZWN0LWFzc2lnblwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgbSh0LGUpLG49ci5yZW5kZXIuYmluZChyKTtyZXR1cm4geChuLHtyZW5kZXI6bix1cGRhdGU6ci51cGRhdGUuYmluZChyKSxkcmF3OnIuZHJhdy5iaW5kKHIpLGRlc3Ryb3k6ci5kZXN0cm95LmJpbmQocikscmVnbDpyLnJlZ2wsZ2w6ci5nbCxjYW52YXM6ci5nbC5jYW52YXMsZ3JvdXBzOnIuZ3JvdXBzLG1hcmtlcnM6ci5tYXJrZXJDYWNoZSxwYWxldHRlOnIucGFsZXR0ZX0pLG59fSx7XCJhcnJheS1ib3VuZHNcIjo1NixcImNvbG9yLWlkXCI6MTA5LFwiY29sb3Itbm9ybWFsaXplXCI6MTExLFwiZmxhdHRlbi12ZXJ0ZXgtZGF0YVwiOjIyNCxnbHNsaWZ5OjQwMixcImlzLWlleHBsb3JlclwiOjQxMixcIm9iamVjdC1hc3NpZ25cIjo0NDcsXCJwYXJzZS1yZWN0XCI6NDUyLFwicGljay1ieS1hbGlhc1wiOjQ1OCxcInBvaW50LWNsdXN0ZXJcIjo0NjIsXCJ0by1mbG9hdDMyXCI6NTIzLFwidXBkYXRlLWRpZmZcIjo1MzR9XSw0ODY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicmVnbC1zY2F0dGVyMmRcIiksaT10KFwicGljay1ieS1hbGlhc1wiKSxhPXQoXCJhcnJheS1ib3VuZHNcIiksbz10KFwicmFmXCIpLHM9dChcImFycmF5LXJhbmdlXCIpLGw9dChcInBhcnNlLXJlY3RcIiksYz10KFwiZmxhdHRlbi12ZXJ0ZXgtZGF0YVwiKTtmdW5jdGlvbiB1KHQsZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgdSkpcmV0dXJuIG5ldyB1KHQsZSk7dGhpcy50cmFjZXM9W10sdGhpcy5wYXNzZXM9e30sdGhpcy5yZWdsPXQsdGhpcy5zY2F0dGVyPW4odCksdGhpcy5jYW52YXM9dGhpcy5zY2F0dGVyLmNhbnZhc31mdW5jdGlvbiBoKHQsZSxyKXtyZXR1cm4obnVsbCE9dC5pZD90LmlkOnQpPDwxNnwoMjU1JmUpPDw4fDI1NSZyfWZ1bmN0aW9uIGYodCxlLHIpe3ZhciBuLGksYSxvLHM9dFtlXSxsPXRbcl07cmV0dXJuIHMubGVuZ3RoPjI/KHNbMF0sc1syXSxuPXNbMV0saT1zWzNdKTpzLmxlbmd0aD8obj1zWzBdLGk9c1sxXSk6KHMueCxuPXMueSxzLngrcy53aWR0aCxpPXMueStzLmhlaWdodCksbC5sZW5ndGg+Mj8oYT1sWzBdLG89bFsyXSxsWzFdLGxbM10pOmwubGVuZ3RoPyhhPWxbMF0sbz1sWzFdKTooYT1sLngsbC55LG89bC54K2wud2lkdGgsbC55K2wuaGVpZ2h0KSxbYSxuLG8saV19ZnVuY3Rpb24gcCh0KXtpZihcIm51bWJlclwiPT10eXBlb2YgdClyZXR1cm5bdCx0LHQsdF07aWYoMj09PXQubGVuZ3RoKXJldHVyblt0WzBdLHRbMV0sdFswXSx0WzFdXTt2YXIgZT1sKHQpO3JldHVybltlLngsZS55LGUueCtlLndpZHRoLGUueStlLmhlaWdodF19ZS5leHBvcnRzPXUsdS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9dGhpcyxyPVtdLG49YXJndW1lbnRzLmxlbmd0aDtuLS07KXJbbl09YXJndW1lbnRzW25dO3JldHVybiByLmxlbmd0aCYmKHQ9dGhpcykudXBkYXRlLmFwcGx5KHQsciksdGhpcy5yZWdsLmF0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyP3RoaXMuZHJhdygpOih0aGlzLmRpcnR5P251bGw9PXRoaXMucGxhbm5lZCYmKHRoaXMucGxhbm5lZD1vKGZ1bmN0aW9uKCl7ZS5kcmF3KCksZS5kaXJ0eT0hMCxlLnBsYW5uZWQ9bnVsbH0pKToodGhpcy5kcmF3KCksdGhpcy5kaXJ0eT0hMCxvKGZ1bmN0aW9uKCl7ZS5kaXJ0eT0hMX0pKSx0aGlzKX0sdS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9W10scj1hcmd1bWVudHMubGVuZ3RoO3ItLTspZVtyXT1hcmd1bWVudHNbcl07aWYoZS5sZW5ndGgpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRoaXMudXBkYXRlSXRlbShuLGVbbl0pO3RoaXMudHJhY2VzPXRoaXMudHJhY2VzLmZpbHRlcihCb29sZWFuKTtmb3IodmFyIGk9W10sYT0wLG89MDtvPHRoaXMudHJhY2VzLmxlbmd0aDtvKyspe2Zvcih2YXIgcz10aGlzLnRyYWNlc1tvXSxsPXRoaXMudHJhY2VzW29dLnBhc3NlcyxjPTA7YzxsLmxlbmd0aDtjKyspaS5wdXNoKHRoaXMucGFzc2VzW2xbY11dKTtzLnBhc3NPZmZzZXQ9YSxhKz1zLnBhc3Nlcy5sZW5ndGh9cmV0dXJuKHQ9dGhpcy5zY2F0dGVyKS51cGRhdGUuYXBwbHkodCxpKSx0aGlzfX0sdS5wcm90b3R5cGUudXBkYXRlSXRlbT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMucmVnbDtpZihudWxsPT09ZSlyZXR1cm4gdGhpcy50cmFjZXNbdF09bnVsbCx0aGlzO2lmKCFlKXJldHVybiB0aGlzO3ZhciBuLG89aShlLHtkYXRhOlwiZGF0YSBpdGVtcyBjb2x1bW5zIHJvd3MgdmFsdWVzIGRpbWVuc2lvbnMgc2FtcGxlcyB4XCIsc25hcDpcInNuYXAgY2x1c3RlclwiLHNpemU6XCJzaXplcyBzaXplIHJhZGl1c1wiLGNvbG9yOlwiY29sb3JzIGNvbG9yIGZpbGwgZmlsbC1jb2xvciBmaWxsQ29sb3JcIixvcGFjaXR5Olwib3BhY2l0eSBhbHBoYSB0cmFuc3BhcmVuY3kgb3BhcXVlXCIsYm9yZGVyU2l6ZTpcImJvcmRlclNpemVzIGJvcmRlclNpemUgYm9yZGVyLXNpemUgYm9yZGVyc2l6ZSBib3JkZXJXaWR0aCBib3JkZXJXaWR0aHMgYm9yZGVyLXdpZHRoIGJvcmRlcndpZHRoIHN0cm9rZS13aWR0aCBzdHJva2VXaWR0aCBzdHJva2V3aWR0aCBvdXRsaW5lXCIsYm9yZGVyQ29sb3I6XCJib3JkZXJDb2xvcnMgYm9yZGVyQ29sb3IgYm9yZGVyY29sb3Igc3Ryb2tlIHN0cm9rZS1jb2xvciBzdHJva2VDb2xvclwiLG1hcmtlcjpcIm1hcmtlcnMgbWFya2VyIHNoYXBlXCIscmFuZ2U6XCJyYW5nZSByYW5nZXMgZGF0YWJveCBkYXRhQm94XCIsdmlld3BvcnQ6XCJ2aWV3cG9ydCB2aWV3Qm94IHZpZXdib3hcIixkb21haW46XCJkb21haW4gZG9tYWlucyBhcmVhIGFyZWFzXCIscGFkZGluZzpcInBhZCBwYWRkaW5nIHBhZGRpbmdzIHBhZHMgbWFyZ2luIG1hcmdpbnNcIix0cmFuc3Bvc2U6XCJ0cmFuc3Bvc2UgdHJhbnNwb3NlZFwiLGRpYWdvbmFsOlwiZGlhZ29uYWwgZGlhZyBzaG93RGlhZ29uYWxcIix1cHBlcjpcInVwcGVyIHVwIHRvcCB1cHBlcmhhbGYgdXBwZXJIYWxmIHNob3d1cHBlcmhhbGYgc2hvd1VwcGVyIHNob3dVcHBlckhhbGZcIixsb3dlcjpcImxvd2VyIGxvdyBib3R0b20gbG93ZXJoYWxmIGxvd2VySGFsZiBzaG93bG93ZXJoYWxmIHNob3dMb3dlckhhbGYgc2hvd0xvd2VyXCJ9KSxzPXRoaXMudHJhY2VzW3RdfHwodGhpcy50cmFjZXNbdF09e2lkOnQsYnVmZmVyOnIuYnVmZmVyKHt1c2FnZTpcImR5bmFtaWNcIix0eXBlOlwiZmxvYXRcIixkYXRhOm5ldyBVaW50OEFycmF5fSksY29sb3I6XCJibGFja1wiLG1hcmtlcjpudWxsLHNpemU6MTIsYm9yZGVyQ29sb3I6XCJ0cmFuc3BhcmVudFwiLGJvcmRlclNpemU6MSx2aWV3cG9ydDpsKFtyLl9nbC5kcmF3aW5nQnVmZmVyV2lkdGgsci5fZ2wuZHJhd2luZ0J1ZmZlckhlaWdodF0pLHBhZGRpbmc6WzAsMCwwLDBdLG9wYWNpdHk6MSxkaWFnb25hbDohMCx1cHBlcjohMCxsb3dlcjohMH0pO2lmKG51bGwhPW8uY29sb3ImJihzLmNvbG9yPW8uY29sb3IpLG51bGwhPW8uc2l6ZSYmKHMuc2l6ZT1vLnNpemUpLG51bGwhPW8ubWFya2VyJiYocy5tYXJrZXI9by5tYXJrZXIpLG51bGwhPW8uYm9yZGVyQ29sb3ImJihzLmJvcmRlckNvbG9yPW8uYm9yZGVyQ29sb3IpLG51bGwhPW8uYm9yZGVyU2l6ZSYmKHMuYm9yZGVyU2l6ZT1vLmJvcmRlclNpemUpLG51bGwhPW8ub3BhY2l0eSYmKHMub3BhY2l0eT1vLm9wYWNpdHkpLG8udmlld3BvcnQmJihzLnZpZXdwb3J0PWwoby52aWV3cG9ydCkpLG51bGwhPW8uZGlhZ29uYWwmJihzLmRpYWdvbmFsPW8uZGlhZ29uYWwpLG51bGwhPW8udXBwZXImJihzLnVwcGVyPW8udXBwZXIpLG51bGwhPW8ubG93ZXImJihzLmxvd2VyPW8ubG93ZXIpLG8uZGF0YSl7cy5idWZmZXIoYyhvLmRhdGEpKSxzLmNvbHVtbnM9by5kYXRhLmxlbmd0aCxzLmNvdW50PW8uZGF0YVswXS5sZW5ndGgscy5ib3VuZHM9W107Zm9yKHZhciB1PTA7dTxzLmNvbHVtbnM7dSsrKXMuYm91bmRzW3VdPWEoby5kYXRhW3VdLDEpfW8ucmFuZ2UmJihzLnJhbmdlPW8ucmFuZ2Usbj1zLnJhbmdlJiZcIm51bWJlclwiIT10eXBlb2Ygcy5yYW5nZVswXSksby5kb21haW4mJihzLmRvbWFpbj1vLmRvbWFpbik7dmFyIGQ9ITE7bnVsbCE9by5wYWRkaW5nJiYoQXJyYXkuaXNBcnJheShvLnBhZGRpbmcpJiZvLnBhZGRpbmcubGVuZ3RoPT09cy5jb2x1bW5zJiZcIm51bWJlclwiPT10eXBlb2Ygby5wYWRkaW5nW28ucGFkZGluZy5sZW5ndGgtMV0/KHMucGFkZGluZz1vLnBhZGRpbmcubWFwKHApLGQ9ITApOnMucGFkZGluZz1wKG8ucGFkZGluZykpO3ZhciBnPXMuY29sdW1ucyx2PXMuY291bnQsbT1zLnZpZXdwb3J0LndpZHRoLHk9cy52aWV3cG9ydC5oZWlnaHQseD1zLnZpZXdwb3J0LngsYj1zLnZpZXdwb3J0LnksXz1tL2csdz15L2c7cy5wYXNzZXM9W107Zm9yKHZhciBrPTA7azxnO2srKylmb3IodmFyIEE9MDtBPGc7QSsrKWlmKChzLmRpYWdvbmFsfHxBIT09aykmJihzLnVwcGVyfHwhKGs+QSkpJiYocy5sb3dlcnx8IShrPEEpKSl7dmFyIFQ9aChzLmlkLGssQSksTT10aGlzLnBhc3Nlc1tUXXx8KHRoaXMucGFzc2VzW1RdPXt9KTtpZihvLmRhdGEmJihvLnRyYW5zcG9zZT9NLnBvc2l0aW9ucz17eDp7YnVmZmVyOnMuYnVmZmVyLG9mZnNldDpBLGNvdW50OnYsc3RyaWRlOmd9LHk6e2J1ZmZlcjpzLmJ1ZmZlcixvZmZzZXQ6ayxjb3VudDp2LHN0cmlkZTpnfX06TS5wb3NpdGlvbnM9e3g6e2J1ZmZlcjpzLmJ1ZmZlcixvZmZzZXQ6QSp2LGNvdW50OnZ9LHk6e2J1ZmZlcjpzLmJ1ZmZlcixvZmZzZXQ6ayp2LGNvdW50OnZ9fSxNLmJvdW5kcz1mKHMuYm91bmRzLGssQSkpLG8uZG9tYWlufHxvLnZpZXdwb3J0fHxvLmRhdGEpe3ZhciBTPWQ/ZihzLnBhZGRpbmcsayxBKTpzLnBhZGRpbmc7aWYocy5kb21haW4pe3ZhciBFPWYocy5kb21haW4sayxBKSxDPUVbMF0sTD1FWzFdLHo9RVsyXSxPPUVbM107TS52aWV3cG9ydD1beCtDKm0rU1swXSxiK0wqeStTWzFdLHgreiptLVNbMl0sYitPKnktU1szXV19ZWxzZSBNLnZpZXdwb3J0PVt4K0EqXytfKlNbMF0sYitrKncrdypTWzFdLHgrKEErMSkqXy1fKlNbMl0sYisoaysxKSp3LXcqU1szXV19by5jb2xvciYmKE0uY29sb3I9cy5jb2xvciksby5zaXplJiYoTS5zaXplPXMuc2l6ZSksby5tYXJrZXImJihNLm1hcmtlcj1zLm1hcmtlciksby5ib3JkZXJTaXplJiYoTS5ib3JkZXJTaXplPXMuYm9yZGVyU2l6ZSksby5ib3JkZXJDb2xvciYmKE0uYm9yZGVyQ29sb3I9cy5ib3JkZXJDb2xvciksby5vcGFjaXR5JiYoTS5vcGFjaXR5PXMub3BhY2l0eSksby5yYW5nZSYmKE0ucmFuZ2U9bj9mKHMucmFuZ2UsayxBKTpzLnJhbmdlfHxNLmJvdW5kcykscy5wYXNzZXMucHVzaChUKX1yZXR1cm4gdGhpc30sdS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPVtdLHI9YXJndW1lbnRzLmxlbmd0aDtyLS07KWVbcl09YXJndW1lbnRzW3JdO2lmKGUubGVuZ3RoKXtmb3IodmFyIG49W10saT0wO2k8ZS5sZW5ndGg7aSsrKWlmKFwibnVtYmVyXCI9PXR5cGVvZiBlW2ldKXt2YXIgYT10aGlzLnRyYWNlc1tlW2ldXSxvPWEucGFzc2VzLGw9YS5wYXNzT2Zmc2V0O24ucHVzaC5hcHBseShuLHMobCxsK28ubGVuZ3RoKSl9ZWxzZSBpZihlW2ldLmxlbmd0aCl7dmFyIGM9ZVtpXSx1PXRoaXMudHJhY2VzW2ldLGg9dS5wYXNzZXMsZj11LnBhc3NPZmZzZXQ7aD1oLm1hcChmdW5jdGlvbih0LGUpe25bZitlXT1jfSl9KHQ9dGhpcy5zY2F0dGVyKS5kcmF3LmFwcGx5KHQsbil9ZWxzZSB0aGlzLnNjYXR0ZXIuZHJhdygpO3JldHVybiB0aGlzfSx1LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhY2VzLmZvckVhY2goZnVuY3Rpb24odCl7dC5idWZmZXImJnQuYnVmZmVyLmRlc3Ryb3kmJnQuYnVmZmVyLmRlc3Ryb3koKX0pLHRoaXMudHJhY2VzPW51bGwsdGhpcy5wYXNzZXM9bnVsbCx0aGlzLnNjYXR0ZXIuZGVzdHJveSgpLHRoaXN9fSx7XCJhcnJheS1ib3VuZHNcIjo1NixcImFycmF5LXJhbmdlXCI6NTgsXCJmbGF0dGVuLXZlcnRleC1kYXRhXCI6MjI0LFwicGFyc2UtcmVjdFwiOjQ1MixcInBpY2stYnktYWxpYXNcIjo0NTgscmFmOjQ3NyxcInJlZ2wtc2NhdHRlcjJkXCI6NDg1fV0sNDg3OltmdW5jdGlvbih0LGUscil7dmFyIG4saTtuPXRoaXMsaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLmlkPVYrKyx0aGlzLnR5cGU9dCx0aGlzLmRhdGE9ZX1mdW5jdGlvbiBlKHQpe3JldHVyblwiW1wiK2Z1bmN0aW9uIHQoZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybltdO3ZhciByPWUuY2hhckF0KDApLG49ZS5jaGFyQXQoZS5sZW5ndGgtMSk7aWYoMTxlLmxlbmd0aCYmcj09PW4mJignXCInPT09cnx8XCInXCI9PT1yKSlyZXR1cm5bJ1wiJytlLnN1YnN0cigxLGUubGVuZ3RoLTIpLnJlcGxhY2UoL1xcXFwvZyxcIlxcXFxcXFxcXCIpLnJlcGxhY2UoL1wiL2csJ1xcXFxcIicpKydcIiddO2lmKHI9L1xcWyhmYWxzZXx0cnVlfG51bGx8XFxkK3wnW14nXSonfFwiW15cIl0qXCIpXFxdLy5leGVjKGUpKXJldHVybiB0KGUuc3Vic3RyKDAsci5pbmRleCkpLmNvbmNhdCh0KHJbMV0pKS5jb25jYXQodChlLnN1YnN0cihyLmluZGV4K3JbMF0ubGVuZ3RoKSkpO2lmKDE9PT0ocj1lLnNwbGl0KFwiLlwiKSkubGVuZ3RoKXJldHVyblsnXCInK2UucmVwbGFjZSgvXFxcXC9nLFwiXFxcXFxcXFxcIikucmVwbGFjZSgvXCIvZywnXFxcXFwiJykrJ1wiJ107Zm9yKGU9W10sbj0wO248ci5sZW5ndGg7KytuKWU9ZS5jb25jYXQodChyW25dKSk7cmV0dXJuIGV9KHQpLmpvaW4oXCJdW1wiKStcIl1cIn1mdW5jdGlvbiByKHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0P3Quc3BsaXQoKTp0fWZ1bmN0aW9uIG4odCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQ/ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KTp0fWZ1bmN0aW9uIGkodCl7dmFyIGUsaSxhLG8scz10fHx7fTt0PXt9O3ZhciBsPVtdLGM9W10sdT1cInVuZGVmaW5lZFwiPT10eXBlb2Ygd2luZG93PzE6d2luZG93LmRldmljZVBpeGVsUmF0aW8saD0hMSxmPWZ1bmN0aW9uKHQpe30scD1mdW5jdGlvbigpe307aWYoXCJzdHJpbmdcIj09dHlwZW9mIHM/ZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHMpOlwib2JqZWN0XCI9PXR5cGVvZiBzJiYoXCJzdHJpbmdcIj09dHlwZW9mIHMubm9kZU5hbWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHMuYXBwZW5kQ2hpbGQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0P2U9czpcImZ1bmN0aW9uXCI9PXR5cGVvZiBzLmRyYXdBcnJheXN8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHMuZHJhd0VsZW1lbnRzP2E9KG89cykuY2FudmFzOihcImdsXCJpbiBzP289cy5nbDpcImNhbnZhc1wiaW4gcz9hPW4ocy5jYW52YXMpOlwiY29udGFpbmVyXCJpbiBzJiYoaT1uKHMuY29udGFpbmVyKSksXCJhdHRyaWJ1dGVzXCJpbiBzJiYodD1zLmF0dHJpYnV0ZXMpLFwiZXh0ZW5zaW9uc1wiaW4gcyYmKGw9cihzLmV4dGVuc2lvbnMpKSxcIm9wdGlvbmFsRXh0ZW5zaW9uc1wiaW4gcyYmKGM9cihzLm9wdGlvbmFsRXh0ZW5zaW9ucykpLFwib25Eb25lXCJpbiBzJiYoZj1zLm9uRG9uZSksXCJwcm9maWxlXCJpbiBzJiYoaD0hIXMucHJvZmlsZSksXCJwaXhlbFJhdGlvXCJpbiBzJiYodT0rcy5waXhlbFJhdGlvKSkpLGUmJihcImNhbnZhc1wiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP2E9ZTppPWUpLCFvKXtpZighYSl7aWYoIShlPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKCl7dmFyIGU9d2luZG93LmlubmVyV2lkdGgsbj13aW5kb3cuaW5uZXJIZWlnaHQ7dCE9PWRvY3VtZW50LmJvZHkmJihlPShuPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLnJpZ2h0LW4ubGVmdCxuPW4uYm90dG9tLW4udG9wKSxpLndpZHRoPXIqZSxpLmhlaWdodD1yKm4saihpLnN0eWxlLHt3aWR0aDplK1wicHhcIixoZWlnaHQ6bitcInB4XCJ9KX12YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO3JldHVybiBqKGkuc3R5bGUse2JvcmRlcjowLG1hcmdpbjowLHBhZGRpbmc6MCx0b3A6MCxsZWZ0OjB9KSx0LmFwcGVuZENoaWxkKGkpLHQ9PT1kb2N1bWVudC5ib2R5JiYoaS5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsaih0LnN0eWxlLHttYXJnaW46MCxwYWRkaW5nOjB9KSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIixuLCExKSxuKCkse2NhbnZhczppLG9uRGVzdHJveTpmdW5jdGlvbigpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsbiksdC5yZW1vdmVDaGlsZChpKX19fShpfHxkb2N1bWVudC5ib2R5LDAsdSkpKXJldHVybiBudWxsO2E9ZS5jYW52YXMscD1lLm9uRGVzdHJveX1vPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyKXt0cnl7cmV0dXJuIHQuZ2V0Q29udGV4dChyLGUpfWNhdGNoKHQpe3JldHVybiBudWxsfX1yZXR1cm4gcihcIndlYmdsXCIpfHxyKFwiZXhwZXJpbWVudGFsLXdlYmdsXCIpfHxyKFwid2ViZ2wtZXhwZXJpbWVudGFsXCIpfShhLHQpfXJldHVybiBvP3tnbDpvLGNhbnZhczphLGNvbnRhaW5lcjppLGV4dGVuc2lvbnM6bCxvcHRpb25hbEV4dGVuc2lvbnM6YyxwaXhlbFJhdGlvOnUscHJvZmlsZTpoLG9uRG9uZTpmLG9uRGVzdHJveTpwfToocCgpLGYoXCJ3ZWJnbCBub3Qgc3VwcG9ydGVkLCB0cnkgdXBncmFkaW5nIHlvdXIgYnJvd3NlciBvciBncmFwaGljcyBkcml2ZXJzIGh0dHA6Ly9nZXQud2ViZ2wub3JnXCIpLG51bGwpfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9QXJyYXkodCksbj0wO248dDsrK24pcltuXT1lKG4pO3JldHVybiByfWZ1bmN0aW9uIG8odCl7dmFyIGUscjtyZXR1cm4gZT0oNjU1MzU8dCk8PDQsZXw9cj0oMjU1PCh0Pj4+PWUpKTw8MywoZXw9cj0oMTU8KHQ+Pj49cikpPDwyKXwocj0oMzwodD4+Pj1yKSk8PDEpfHQ+Pj5yPj4xfWZ1bmN0aW9uIHMoKXtmdW5jdGlvbiB0KHQpe3Q6e2Zvcih2YXIgZT0xNjsyNjg0MzU0NTY+PWU7ZSo9MTYpaWYodDw9ZSl7dD1lO2JyZWFrIHR9dD0wfXJldHVybiAwPChlPXJbbyh0KT4+Ml0pLmxlbmd0aD9lLnBvcCgpOm5ldyBBcnJheUJ1ZmZlcih0KX1mdW5jdGlvbiBlKHQpe3Jbbyh0LmJ5dGVMZW5ndGgpPj4yXS5wdXNoKHQpfXZhciByPWEoOCxmdW5jdGlvbigpe3JldHVybltdfSk7cmV0dXJue2FsbG9jOnQsZnJlZTplLGFsbG9jVHlwZTpmdW5jdGlvbihlLHIpe3ZhciBuPW51bGw7c3dpdGNoKGUpe2Nhc2UgNTEyMDpuPW5ldyBJbnQ4QXJyYXkodChyKSwwLHIpO2JyZWFrO2Nhc2UgNTEyMTpuPW5ldyBVaW50OEFycmF5KHQociksMCxyKTticmVhaztjYXNlIDUxMjI6bj1uZXcgSW50MTZBcnJheSh0KDIqciksMCxyKTticmVhaztjYXNlIDUxMjM6bj1uZXcgVWludDE2QXJyYXkodCgyKnIpLDAscik7YnJlYWs7Y2FzZSA1MTI0Om49bmV3IEludDMyQXJyYXkodCg0KnIpLDAscik7YnJlYWs7Y2FzZSA1MTI1Om49bmV3IFVpbnQzMkFycmF5KHQoNCpyKSwwLHIpO2JyZWFrO2Nhc2UgNTEyNjpuPW5ldyBGbG9hdDMyQXJyYXkodCg0KnIpLDAscik7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gbnVsbH1yZXR1cm4gbi5sZW5ndGghPT1yP24uc3ViYXJyYXkoMCxyKTpufSxmcmVlVHlwZTpmdW5jdGlvbih0KXtlKHQuYnVmZmVyKX19fWZ1bmN0aW9uIGwodCl7cmV0dXJuISF0JiZcIm9iamVjdFwiPT10eXBlb2YgdCYmQXJyYXkuaXNBcnJheSh0LnNoYXBlKSYmQXJyYXkuaXNBcnJheSh0LnN0cmlkZSkmJlwibnVtYmVyXCI9PXR5cGVvZiB0Lm9mZnNldCYmdC5zaGFwZS5sZW5ndGg9PT10LnN0cmlkZS5sZW5ndGgmJihBcnJheS5pc0FycmF5KHQuZGF0YSl8fFcodC5kYXRhKSl9ZnVuY3Rpb24gYyh0LGUscixuLGksYSl7Zm9yKHZhciBvPTA7bzxlOysrbylmb3IodmFyIHM9dFtvXSxsPTA7bDxyOysrbClmb3IodmFyIGM9c1tsXSx1PTA7dTxuOysrdSlpW2ErK109Y1t1XX1mdW5jdGlvbiB1KHQpe3JldHVybiAwfCRbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpXX1mdW5jdGlvbiBoKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpdFtyXT1lW3JdfWZ1bmN0aW9uIGYodCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPTAsbD0wO2w8cjsrK2wpZm9yKHZhciBjPTA7YzxuOysrYyl0W3MrK109ZVtpKmwrYSpjK29dfWZ1bmN0aW9uIHAodCxlLHIsbil7ZnVuY3Rpb24gaShlKXt0aGlzLmlkPWMrKyx0aGlzLmJ1ZmZlcj10LmNyZWF0ZUJ1ZmZlcigpLHRoaXMudHlwZT1lLHRoaXMudXNhZ2U9MzUwNDQsdGhpcy5ieXRlTGVuZ3RoPTAsdGhpcy5kaW1lbnNpb249MSx0aGlzLmR0eXBlPTUxMjEsdGhpcy5wZXJzaXN0ZW50RGF0YT1udWxsLHIucHJvZmlsZSYmKHRoaXMuc3RhdHM9e3NpemU6MH0pfWZ1bmN0aW9uIGEoZSxyLG4pe2UuYnl0ZUxlbmd0aD1yLmJ5dGVMZW5ndGgsdC5idWZmZXJEYXRhKGUudHlwZSxyLG4pfWZ1bmN0aW9uIG8odCxlLHIsbixpLG8pe2lmKHQudXNhZ2U9cixBcnJheS5pc0FycmF5KGUpKXtpZih0LmR0eXBlPW58fDUxMjYsMDxlLmxlbmd0aClpZihBcnJheS5pc0FycmF5KGVbMF0pKXtpPXR0KGUpO2Zvcih2YXIgcz1uPTE7czxpLmxlbmd0aDsrK3Mpbio9aVtzXTt0LmRpbWVuc2lvbj1uLGEodCxlPVEoZSxpLHQuZHR5cGUpLHIpLG8/dC5wZXJzaXN0ZW50RGF0YT1lOkcuZnJlZVR5cGUoZSl9ZWxzZVwibnVtYmVyXCI9PXR5cGVvZiBlWzBdPyh0LmRpbWVuc2lvbj1pLGgoaT1HLmFsbG9jVHlwZSh0LmR0eXBlLGUubGVuZ3RoKSxlKSxhKHQsaSxyKSxvP3QucGVyc2lzdGVudERhdGE9aTpHLmZyZWVUeXBlKGkpKTpXKGVbMF0pJiYodC5kaW1lbnNpb249ZVswXS5sZW5ndGgsdC5kdHlwZT1ufHx1KGVbMF0pfHw1MTI2LGEodCxlPVEoZSxbZS5sZW5ndGgsZVswXS5sZW5ndGhdLHQuZHR5cGUpLHIpLG8/dC5wZXJzaXN0ZW50RGF0YT1lOkcuZnJlZVR5cGUoZSkpfWVsc2UgaWYoVyhlKSl0LmR0eXBlPW58fHUoZSksdC5kaW1lbnNpb249aSxhKHQsZSxyKSxvJiYodC5wZXJzaXN0ZW50RGF0YT1uZXcgVWludDhBcnJheShuZXcgVWludDhBcnJheShlLmJ1ZmZlcikpKTtlbHNlIGlmKGwoZSkpe2k9ZS5zaGFwZTt2YXIgYz1lLnN0cmlkZSxwPShzPWUub2Zmc2V0LDApLGQ9MCxnPTAsdj0wOzE9PT1pLmxlbmd0aD8ocD1pWzBdLGQ9MSxnPWNbMF0sdj0wKToyPT09aS5sZW5ndGgmJihwPWlbMF0sZD1pWzFdLGc9Y1swXSx2PWNbMV0pLHQuZHR5cGU9bnx8dShlLmRhdGEpfHw1MTI2LHQuZGltZW5zaW9uPWQsZihpPUcuYWxsb2NUeXBlKHQuZHR5cGUscCpkKSxlLmRhdGEscCxkLGcsdixzKSxhKHQsaSxyKSxvP3QucGVyc2lzdGVudERhdGE9aTpHLmZyZWVUeXBlKGkpfX1mdW5jdGlvbiBzKHIpe2UuYnVmZmVyQ291bnQtLTtmb3IodmFyIGk9MDtpPG4uc3RhdGUubGVuZ3RoOysraSl7dmFyIGE9bi5zdGF0ZVtpXTthLmJ1ZmZlcj09PXImJih0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKSxhLmJ1ZmZlcj1udWxsKX10LmRlbGV0ZUJ1ZmZlcihyLmJ1ZmZlciksci5idWZmZXI9bnVsbCxkZWxldGUgcFtyLmlkXX12YXIgYz0wLHA9e307aS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe3QuYmluZEJ1ZmZlcih0aGlzLnR5cGUsdGhpcy5idWZmZXIpfSxpLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cyh0aGlzKX07dmFyIGQ9W107cmV0dXJuIHIucHJvZmlsZSYmKGUuZ2V0VG90YWxCdWZmZXJTaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gT2JqZWN0LmtleXMocCkuZm9yRWFjaChmdW5jdGlvbihlKXt0Kz1wW2VdLnN0YXRzLnNpemV9KSx0fSkse2NyZWF0ZTpmdW5jdGlvbihuLGEsYyxkKXtmdW5jdGlvbiBnKGUpe3ZhciBuPTM1MDQ0LGk9bnVsbCxhPTAscz0wLGM9MTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKXx8VyhlKXx8bChlKT9pPWU6XCJudW1iZXJcIj09dHlwZW9mIGU/YT0wfGU6ZSYmKFwiZGF0YVwiaW4gZSYmKGk9ZS5kYXRhKSxcInVzYWdlXCJpbiBlJiYobj1LW2UudXNhZ2VdKSxcInR5cGVcImluIGUmJihzPUpbZS50eXBlXSksXCJkaW1lbnNpb25cImluIGUmJihjPTB8ZS5kaW1lbnNpb24pLFwibGVuZ3RoXCJpbiBlJiYoYT0wfGUubGVuZ3RoKSksdi5iaW5kKCksaT9vKHYsaSxuLHMsYyxkKTooYSYmdC5idWZmZXJEYXRhKHYudHlwZSxhLG4pLHYuZHR5cGU9c3x8NTEyMSx2LnVzYWdlPW4sdi5kaW1lbnNpb249Yyx2LmJ5dGVMZW5ndGg9YSksci5wcm9maWxlJiYodi5zdGF0cy5zaXplPXYuYnl0ZUxlbmd0aCpldFt2LmR0eXBlXSksZ31lLmJ1ZmZlckNvdW50Kys7dmFyIHY9bmV3IGkoYSk7cmV0dXJuIHBbdi5pZF09dixjfHxnKG4pLGcuX3JlZ2xUeXBlPVwiYnVmZmVyXCIsZy5fYnVmZmVyPXYsZy5zdWJkYXRhPWZ1bmN0aW9uKGUscil7dmFyIG4saT0wfChyfHwwKTtpZih2LmJpbmQoKSxXKGUpKXQuYnVmZmVyU3ViRGF0YSh2LnR5cGUsaSxlKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpe2lmKDA8ZS5sZW5ndGgpaWYoXCJudW1iZXJcIj09dHlwZW9mIGVbMF0pe3ZhciBhPUcuYWxsb2NUeXBlKHYuZHR5cGUsZS5sZW5ndGgpO2goYSxlKSx0LmJ1ZmZlclN1YkRhdGEodi50eXBlLGksYSksRy5mcmVlVHlwZShhKX1lbHNlKEFycmF5LmlzQXJyYXkoZVswXSl8fFcoZVswXSkpJiYobj10dChlKSxhPVEoZSxuLHYuZHR5cGUpLHQuYnVmZmVyU3ViRGF0YSh2LnR5cGUsaSxhKSxHLmZyZWVUeXBlKGEpKX1lbHNlIGlmKGwoZSkpe249ZS5zaGFwZTt2YXIgbz1lLnN0cmlkZSxzPWE9MCxjPTAscD0wOzE9PT1uLmxlbmd0aD8oYT1uWzBdLHM9MSxjPW9bMF0scD0wKToyPT09bi5sZW5ndGgmJihhPW5bMF0scz1uWzFdLGM9b1swXSxwPW9bMV0pLG49QXJyYXkuaXNBcnJheShlLmRhdGEpP3YuZHR5cGU6dShlLmRhdGEpLGYobj1HLmFsbG9jVHlwZShuLGEqcyksZS5kYXRhLGEscyxjLHAsZS5vZmZzZXQpLHQuYnVmZmVyU3ViRGF0YSh2LnR5cGUsaSxuKSxHLmZyZWVUeXBlKG4pfXJldHVybiBnfSxyLnByb2ZpbGUmJihnLnN0YXRzPXYuc3RhdHMpLGcuZGVzdHJveT1mdW5jdGlvbigpe3Modil9LGd9LGNyZWF0ZVN0cmVhbTpmdW5jdGlvbih0LGUpe3ZhciByPWQucG9wKCk7cmV0dXJuIHJ8fChyPW5ldyBpKHQpKSxyLmJpbmQoKSxvKHIsZSwzNTA0MCwwLDEsITEpLHJ9LGRlc3Ryb3lTdHJlYW06ZnVuY3Rpb24odCl7ZC5wdXNoKHQpfSxjbGVhcjpmdW5jdGlvbigpe1gocCkuZm9yRWFjaChzKSxkLmZvckVhY2gocyl9LGdldEJ1ZmZlcjpmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5fYnVmZmVyIGluc3RhbmNlb2YgaT90Ll9idWZmZXI6bnVsbH0scmVzdG9yZTpmdW5jdGlvbigpe1gocCkuZm9yRWFjaChmdW5jdGlvbihlKXtlLmJ1ZmZlcj10LmNyZWF0ZUJ1ZmZlcigpLHQuYmluZEJ1ZmZlcihlLnR5cGUsZS5idWZmZXIpLHQuYnVmZmVyRGF0YShlLnR5cGUsZS5wZXJzaXN0ZW50RGF0YXx8ZS5ieXRlTGVuZ3RoLGUudXNhZ2UpfSl9LF9pbml0QnVmZmVyOm99fWZ1bmN0aW9uIGQodCxlLHIsbil7ZnVuY3Rpb24gaSh0KXt0aGlzLmlkPWMrKyxzW3RoaXMuaWRdPXRoaXMsdGhpcy5idWZmZXI9dCx0aGlzLnByaW1UeXBlPTQsdGhpcy50eXBlPXRoaXMudmVydENvdW50PTB9ZnVuY3Rpb24gYShuLGksYSxvLHMsYyx1KXtpZihuLmJ1ZmZlci5iaW5kKCksaSl7dmFyIGg9dTt1fHxXKGkpJiYoIWwoaSl8fFcoaS5kYXRhKSl8fChoPWUub2VzX2VsZW1lbnRfaW5kZXhfdWludD81MTI1OjUxMjMpLHIuX2luaXRCdWZmZXIobi5idWZmZXIsaSxhLGgsMyl9ZWxzZSB0LmJ1ZmZlckRhdGEoMzQ5NjMsYyxhKSxuLmJ1ZmZlci5kdHlwZT1ofHw1MTIxLG4uYnVmZmVyLnVzYWdlPWEsbi5idWZmZXIuZGltZW5zaW9uPTMsbi5idWZmZXIuYnl0ZUxlbmd0aD1jO2lmKGg9dSwhdSl7c3dpdGNoKG4uYnVmZmVyLmR0eXBlKXtjYXNlIDUxMjE6Y2FzZSA1MTIwOmg9NTEyMTticmVhaztjYXNlIDUxMjM6Y2FzZSA1MTIyOmg9NTEyMzticmVhaztjYXNlIDUxMjU6Y2FzZSA1MTI0Omg9NTEyNX1uLmJ1ZmZlci5kdHlwZT1ofW4udHlwZT1oLDA+KGk9cykmJihpPW4uYnVmZmVyLmJ5dGVMZW5ndGgsNTEyMz09PWg/aT4+PTE6NTEyNT09PWgmJihpPj49MikpLG4udmVydENvdW50PWksaT1vLDA+byYmKGk9NCwxPT09KG89bi5idWZmZXIuZGltZW5zaW9uKSYmKGk9MCksMj09PW8mJihpPTEpLDM9PT1vJiYoaT00KSksbi5wcmltVHlwZT1pfWZ1bmN0aW9uIG8odCl7bi5lbGVtZW50c0NvdW50LS0sZGVsZXRlIHNbdC5pZF0sdC5idWZmZXIuZGVzdHJveSgpLHQuYnVmZmVyPW51bGx9dmFyIHM9e30sYz0wLHU9e3VpbnQ4OjUxMjEsdWludDE2OjUxMjN9O2Uub2VzX2VsZW1lbnRfaW5kZXhfdWludCYmKHUudWludDMyPTUxMjUpLGkucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmJ1ZmZlci5iaW5kKCl9O3ZhciBoPVtdO3JldHVybntjcmVhdGU6ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBzKHQpe2lmKHQpaWYoXCJudW1iZXJcIj09dHlwZW9mIHQpYyh0KSxoLnByaW1UeXBlPTQsaC52ZXJ0Q291bnQ9MHx0LGgudHlwZT01MTIxO2Vsc2V7dmFyIGU9bnVsbCxyPTM1MDQ0LG49LTEsaT0tMSxvPTAsZj0wO0FycmF5LmlzQXJyYXkodCl8fFcodCl8fGwodCk/ZT10OihcImRhdGFcImluIHQmJihlPXQuZGF0YSksXCJ1c2FnZVwiaW4gdCYmKHI9S1t0LnVzYWdlXSksXCJwcmltaXRpdmVcImluIHQmJihuPXJ0W3QucHJpbWl0aXZlXSksXCJjb3VudFwiaW4gdCYmKGk9MHx0LmNvdW50KSxcInR5cGVcImluIHQmJihmPXVbdC50eXBlXSksXCJsZW5ndGhcImluIHQ/bz0wfHQubGVuZ3RoOihvPWksNTEyMz09PWZ8fDUxMjI9PT1mP28qPTI6NTEyNSE9PWYmJjUxMjQhPT1mfHwobyo9NCkpKSxhKGgsZSxyLG4saSxvLGYpfWVsc2UgYygpLGgucHJpbVR5cGU9NCxoLnZlcnRDb3VudD0wLGgudHlwZT01MTIxO3JldHVybiBzfXZhciBjPXIuY3JlYXRlKG51bGwsMzQ5NjMsITApLGg9bmV3IGkoYy5fYnVmZmVyKTtyZXR1cm4gbi5lbGVtZW50c0NvdW50Kysscyh0KSxzLl9yZWdsVHlwZT1cImVsZW1lbnRzXCIscy5fZWxlbWVudHM9aCxzLnN1YmRhdGE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYy5zdWJkYXRhKHQsZSksc30scy5kZXN0cm95PWZ1bmN0aW9uKCl7byhoKX0sc30sY3JlYXRlU3RyZWFtOmZ1bmN0aW9uKHQpe3ZhciBlPWgucG9wKCk7cmV0dXJuIGV8fChlPW5ldyBpKHIuY3JlYXRlKG51bGwsMzQ5NjMsITAsITEpLl9idWZmZXIpKSxhKGUsdCwzNTA0MCwtMSwtMSwwLDApLGV9LGRlc3Ryb3lTdHJlYW06ZnVuY3Rpb24odCl7aC5wdXNoKHQpfSxnZXRFbGVtZW50czpmdW5jdGlvbih0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiZ0Ll9lbGVtZW50cyBpbnN0YW5jZW9mIGk/dC5fZWxlbWVudHM6bnVsbH0sY2xlYXI6ZnVuY3Rpb24oKXtYKHMpLmZvckVhY2gobyl9fX1mdW5jdGlvbiBnKHQpe2Zvcih2YXIgZT1HLmFsbG9jVHlwZSg1MTIzLHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDsrK3IpaWYoaXNOYU4odFtyXSkpZVtyXT02NTUzNTtlbHNlIGlmKDEvMD09PXRbcl0pZVtyXT0zMTc0NDtlbHNlIGlmKC0xLzA9PT10W3JdKWVbcl09NjQ1MTI7ZWxzZXtudFswXT10W3JdO3ZhciBuPShhPWl0WzBdKT4+PjMxPDwxNSxpPShhPDwxPj4+MjQpLTEyNyxhPWE+PjEzJjEwMjM7ZVtyXT0tMjQ+aT9uOi0xND5pP24rKGErMTAyND4+LTE0LWkpOjE1PGk/biszMTc0NDpuKyhpKzE1PDwxMCkrYX1yZXR1cm4gZX1mdW5jdGlvbiB2KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfHxXKHQpfWZ1bmN0aW9uIG0odCl7cmV0dXJuXCJbb2JqZWN0IFwiK3QrXCJdXCJ9ZnVuY3Rpb24geSh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmKDA9PT10Lmxlbmd0aHx8XCJudW1iZXJcIj09dHlwZW9mIHRbMF0pfWZ1bmN0aW9uIHgodCl7cmV0dXJuISghQXJyYXkuaXNBcnJheSh0KXx8MD09PXQubGVuZ3RofHwhdih0WzBdKSl9ZnVuY3Rpb24gYih0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIF8odCl7aWYoIXQpcmV0dXJuITE7dmFyIGU9Yih0KTtyZXR1cm4gMDw9cHQuaW5kZXhPZihlKXx8KHkodCl8fHgodCl8fGwodCkpfWZ1bmN0aW9uIHcodCxlKXszNjE5Mz09PXQudHlwZT8odC5kYXRhPWcoZSksRy5mcmVlVHlwZShlKSk6dC5kYXRhPWV9ZnVuY3Rpb24gayh0LGUscixuLGksYSl7aWYodD1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ3RbdF0/Z3RbdF06c3RbdF0qZHRbZV0sYSYmKHQqPTYpLGkpe2ZvcihuPTA7MTw9cjspbis9dCpyKnIsci89MjtyZXR1cm4gbn1yZXR1cm4gdCpyKm59ZnVuY3Rpb24gQSh0LGUscixuLGksYSxvKXtmdW5jdGlvbiBzKCl7dGhpcy5mb3JtYXQ9dGhpcy5pbnRlcm5hbGZvcm1hdD02NDA4LHRoaXMudHlwZT01MTIxLHRoaXMuZmxpcFk9dGhpcy5wcmVtdWx0aXBseUFscGhhPXRoaXMuY29tcHJlc3NlZD0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xLHRoaXMuY29sb3JTcGFjZT0zNzQ0NCx0aGlzLmNoYW5uZWxzPXRoaXMuaGVpZ2h0PXRoaXMud2lkdGg9MH1mdW5jdGlvbiBjKHQsZSl7dC5pbnRlcm5hbGZvcm1hdD1lLmludGVybmFsZm9ybWF0LHQuZm9ybWF0PWUuZm9ybWF0LHQudHlwZT1lLnR5cGUsdC5jb21wcmVzc2VkPWUuY29tcHJlc3NlZCx0LnByZW11bHRpcGx5QWxwaGE9ZS5wcmVtdWx0aXBseUFscGhhLHQuZmxpcFk9ZS5mbGlwWSx0LnVucGFja0FsaWdubWVudD1lLnVucGFja0FsaWdubWVudCx0LmNvbG9yU3BhY2U9ZS5jb2xvclNwYWNlLHQud2lkdGg9ZS53aWR0aCx0LmhlaWdodD1lLmhlaWdodCx0LmNoYW5uZWxzPWUuY2hhbm5lbHN9ZnVuY3Rpb24gdSh0LGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlJiZlKXtcInByZW11bHRpcGx5QWxwaGFcImluIGUmJih0LnByZW11bHRpcGx5QWxwaGE9ZS5wcmVtdWx0aXBseUFscGhhKSxcImZsaXBZXCJpbiBlJiYodC5mbGlwWT1lLmZsaXBZKSxcImFsaWdubWVudFwiaW4gZSYmKHQudW5wYWNrQWxpZ25tZW50PWUuYWxpZ25tZW50KSxcImNvbG9yU3BhY2VcImluIGUmJih0LmNvbG9yU3BhY2U9cVtlLmNvbG9yU3BhY2VdKSxcInR5cGVcImluIGUmJih0LnR5cGU9SFtlLnR5cGVdKTt2YXIgcj10LndpZHRoLG49dC5oZWlnaHQsaT10LmNoYW5uZWxzLGE9ITE7XCJzaGFwZVwiaW4gZT8ocj1lLnNoYXBlWzBdLG49ZS5zaGFwZVsxXSwzPT09ZS5zaGFwZS5sZW5ndGgmJihpPWUuc2hhcGVbMl0sYT0hMCkpOihcInJhZGl1c1wiaW4gZSYmKHI9bj1lLnJhZGl1cyksXCJ3aWR0aFwiaW4gZSYmKHI9ZS53aWR0aCksXCJoZWlnaHRcImluIGUmJihuPWUuaGVpZ2h0KSxcImNoYW5uZWxzXCJpbiBlJiYoaT1lLmNoYW5uZWxzLGE9ITApKSx0LndpZHRoPTB8cix0LmhlaWdodD0wfG4sdC5jaGFubmVscz0wfGkscj0hMSxcImZvcm1hdFwiaW4gZSYmKHI9ZS5mb3JtYXQsbj10LmludGVybmFsZm9ybWF0PVlbcl0sdC5mb3JtYXQ9cHRbbl0sciBpbiBIJiYhKFwidHlwZVwiaW4gZSkmJih0LnR5cGU9SFtyXSksciBpbiBKJiYodC5jb21wcmVzc2VkPSEwKSxyPSEwKSwhYSYmcj90LmNoYW5uZWxzPXN0W3QuZm9ybWF0XTphJiYhciYmdC5jaGFubmVscyE9PW90W3QuZm9ybWF0XSYmKHQuZm9ybWF0PXQuaW50ZXJuYWxmb3JtYXQ9b3RbdC5jaGFubmVsc10pfX1mdW5jdGlvbiBoKGUpe3QucGl4ZWxTdG9yZWkoMzc0NDAsZS5mbGlwWSksdC5waXhlbFN0b3JlaSgzNzQ0MSxlLnByZW11bHRpcGx5QWxwaGEpLHQucGl4ZWxTdG9yZWkoMzc0NDMsZS5jb2xvclNwYWNlKSx0LnBpeGVsU3RvcmVpKDMzMTcsZS51bnBhY2tBbGlnbm1lbnQpfWZ1bmN0aW9uIGYoKXtzLmNhbGwodGhpcyksdGhpcy55T2Zmc2V0PXRoaXMueE9mZnNldD0wLHRoaXMuZGF0YT1udWxsLHRoaXMubmVlZHNGcmVlPSExLHRoaXMuZWxlbWVudD1udWxsLHRoaXMubmVlZHNDb3B5PSExfWZ1bmN0aW9uIHAodCxlKXt2YXIgcj1udWxsO2lmKF8oZSk/cj1lOmUmJih1KHQsZSksXCJ4XCJpbiBlJiYodC54T2Zmc2V0PTB8ZS54KSxcInlcImluIGUmJih0LnlPZmZzZXQ9MHxlLnkpLF8oZS5kYXRhKSYmKHI9ZS5kYXRhKSksZS5jb3B5KXt2YXIgbj1pLnZpZXdwb3J0V2lkdGgsYT1pLnZpZXdwb3J0SGVpZ2h0O3Qud2lkdGg9dC53aWR0aHx8bi10LnhPZmZzZXQsdC5oZWlnaHQ9dC5oZWlnaHR8fGEtdC55T2Zmc2V0LHQubmVlZHNDb3B5PSEwfWVsc2UgaWYocil7aWYoVyhyKSl0LmNoYW5uZWxzPXQuY2hhbm5lbHN8fDQsdC5kYXRhPXIsXCJ0eXBlXCJpbiBlfHw1MTIxIT09dC50eXBlfHwodC50eXBlPTB8JFtPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocildKTtlbHNlIGlmKHkocikpe3N3aXRjaCh0LmNoYW5uZWxzPXQuY2hhbm5lbHN8fDQsYT0obj1yKS5sZW5ndGgsdC50eXBlKXtjYXNlIDUxMjE6Y2FzZSA1MTIzOmNhc2UgNTEyNTpjYXNlIDUxMjY6KGE9Ry5hbGxvY1R5cGUodC50eXBlLGEpKS5zZXQobiksdC5kYXRhPWE7YnJlYWs7Y2FzZSAzNjE5Mzp0LmRhdGE9ZyhuKX10LmFsaWdubWVudD0xLHQubmVlZHNGcmVlPSEwfWVsc2UgaWYobChyKSl7bj1yLmRhdGEsQXJyYXkuaXNBcnJheShuKXx8NTEyMSE9PXQudHlwZXx8KHQudHlwZT0wfCRbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pXSk7YT1yLnNoYXBlO3ZhciBvLHMsYyxoLGY9ci5zdHJpZGU7Mz09PWEubGVuZ3RoPyhjPWFbMl0saD1mWzJdKTpoPWM9MSxvPWFbMF0scz1hWzFdLGE9ZlswXSxmPWZbMV0sdC5hbGlnbm1lbnQ9MSx0LndpZHRoPW8sdC5oZWlnaHQ9cyx0LmNoYW5uZWxzPWMsdC5mb3JtYXQ9dC5pbnRlcm5hbGZvcm1hdD1vdFtjXSx0Lm5lZWRzRnJlZT0hMCxvPWgscj1yLm9mZnNldCxjPXQud2lkdGgsaD10LmhlaWdodCxzPXQuY2hhbm5lbHM7Zm9yKHZhciBwPUcuYWxsb2NUeXBlKDM2MTkzPT09dC50eXBlPzUxMjY6dC50eXBlLGMqaCpzKSxkPTAsbT0wO208aDsrK20pZm9yKHZhciBrPTA7azxjOysraylmb3IodmFyIEE9MDtBPHM7KytBKXBbZCsrXT1uW2EqaytmKm0rbypBK3JdO3codCxwKX1lbHNlIGlmKGIocik9PT1sdHx8YihyKT09PWN0KWIocik9PT1sdD90LmVsZW1lbnQ9cjp0LmVsZW1lbnQ9ci5jYW52YXMsdC53aWR0aD10LmVsZW1lbnQud2lkdGgsdC5oZWlnaHQ9dC5lbGVtZW50LmhlaWdodCx0LmNoYW5uZWxzPTQ7ZWxzZSBpZihiKHIpPT09dXQpdC5lbGVtZW50PXIsdC53aWR0aD1yLndpZHRoLHQuaGVpZ2h0PXIuaGVpZ2h0LHQuY2hhbm5lbHM9NDtlbHNlIGlmKGIocik9PT1odCl0LmVsZW1lbnQ9cix0LndpZHRoPXIubmF0dXJhbFdpZHRoLHQuaGVpZ2h0PXIubmF0dXJhbEhlaWdodCx0LmNoYW5uZWxzPTQ7ZWxzZSBpZihiKHIpPT09ZnQpdC5lbGVtZW50PXIsdC53aWR0aD1yLnZpZGVvV2lkdGgsdC5oZWlnaHQ9ci52aWRlb0hlaWdodCx0LmNoYW5uZWxzPTQ7ZWxzZSBpZih4KHIpKXtmb3Iobj10LndpZHRofHxyWzBdLmxlbmd0aCxhPXQuaGVpZ2h0fHxyLmxlbmd0aCxmPXQuY2hhbm5lbHMsZj12KHJbMF1bMF0pP2Z8fHJbMF1bMF0ubGVuZ3RoOmZ8fDEsbz1aLnNoYXBlKHIpLGM9MSxoPTA7aDxvLmxlbmd0aDsrK2gpYyo9b1toXTtjPUcuYWxsb2NUeXBlKDM2MTkzPT09dC50eXBlPzUxMjY6dC50eXBlLGMpLFouZmxhdHRlbihyLG8sXCJcIixjKSx3KHQsYyksdC5hbGlnbm1lbnQ9MSx0LndpZHRoPW4sdC5oZWlnaHQ9YSx0LmNoYW5uZWxzPWYsdC5mb3JtYXQ9dC5pbnRlcm5hbGZvcm1hdD1vdFtmXSx0Lm5lZWRzRnJlZT0hMH19ZWxzZSB0LndpZHRoPXQud2lkdGh8fDEsdC5oZWlnaHQ9dC5oZWlnaHR8fDEsdC5jaGFubmVscz10LmNoYW5uZWxzfHw0fWZ1bmN0aW9uIGQoZSxyLGksYSxvKXt2YXIgcz1lLmVsZW1lbnQsbD1lLmRhdGEsYz1lLmludGVybmFsZm9ybWF0LHU9ZS5mb3JtYXQsZj1lLnR5cGUscD1lLndpZHRoLGQ9ZS5oZWlnaHQ7aChlKSxzP3QudGV4U3ViSW1hZ2UyRChyLG8saSxhLHUsZixzKTplLmNvbXByZXNzZWQ/dC5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChyLG8saSxhLGMscCxkLGwpOmUubmVlZHNDb3B5PyhuKCksdC5jb3B5VGV4U3ViSW1hZ2UyRChyLG8saSxhLGUueE9mZnNldCxlLnlPZmZzZXQscCxkKSk6dC50ZXhTdWJJbWFnZTJEKHIsbyxpLGEscCxkLHUsZixsKX1mdW5jdGlvbiBtKCl7cmV0dXJuIGR0LnBvcCgpfHxuZXcgZn1mdW5jdGlvbiBBKHQpe3QubmVlZHNGcmVlJiZHLmZyZWVUeXBlKHQuZGF0YSksZi5jYWxsKHQpLGR0LnB1c2godCl9ZnVuY3Rpb24gVCgpe3MuY2FsbCh0aGlzKSx0aGlzLmdlbk1pcG1hcHM9ITEsdGhpcy5taXBtYXBIaW50PTQzNTIsdGhpcy5taXBtYXNrPTAsdGhpcy5pbWFnZXM9QXJyYXkoMTYpfWZ1bmN0aW9uIE0odCxlLHIpe3ZhciBuPXQuaW1hZ2VzWzBdPW0oKTt0Lm1pcG1hc2s9MSxuLndpZHRoPXQud2lkdGg9ZSxuLmhlaWdodD10LmhlaWdodD1yLG4uY2hhbm5lbHM9dC5jaGFubmVscz00fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1udWxsO2lmKF8oZSkpYyhyPXQuaW1hZ2VzWzBdPW0oKSx0KSxwKHIsZSksdC5taXBtYXNrPTE7ZWxzZSBpZih1KHQsZSksQXJyYXkuaXNBcnJheShlLm1pcG1hcCkpZm9yKHZhciBuPWUubWlwbWFwLGk9MDtpPG4ubGVuZ3RoOysraSljKHI9dC5pbWFnZXNbaV09bSgpLHQpLHIud2lkdGg+Pj1pLHIuaGVpZ2h0Pj49aSxwKHIsbltpXSksdC5taXBtYXNrfD0xPDxpO2Vsc2UgYyhyPXQuaW1hZ2VzWzBdPW0oKSx0KSxwKHIsZSksdC5taXBtYXNrPTE7Yyh0LHQuaW1hZ2VzWzBdKX1mdW5jdGlvbiBFKGUscil7Zm9yKHZhciBpPWUuaW1hZ2VzLGE9MDthPGkubGVuZ3RoJiZpW2FdOysrYSl7dmFyIG89aVthXSxzPXIsbD1hLGM9by5lbGVtZW50LHU9by5kYXRhLGY9by5pbnRlcm5hbGZvcm1hdCxwPW8uZm9ybWF0LGQ9by50eXBlLGc9by53aWR0aCx2PW8uaGVpZ2h0LG09by5jaGFubmVscztoKG8pLGM/dC50ZXhJbWFnZTJEKHMsbCxwLHAsZCxjKTpvLmNvbXByZXNzZWQ/dC5jb21wcmVzc2VkVGV4SW1hZ2UyRChzLGwsZixnLHYsMCx1KTpvLm5lZWRzQ29weT8obigpLHQuY29weVRleEltYWdlMkQocyxsLHAsby54T2Zmc2V0LG8ueU9mZnNldCxnLHYsMCkpOigobz0hdSkmJih1PUcuemVyby5hbGxvY1R5cGUoZCxnKnYqbSkpLHQudGV4SW1hZ2UyRChzLGwscCxnLHYsMCxwLGQsdSksbyYmdSYmRy56ZXJvLmZyZWVUeXBlKHUpKX19ZnVuY3Rpb24gQygpe3ZhciB0PWd0LnBvcCgpfHxuZXcgVDtzLmNhbGwodCk7Zm9yKHZhciBlPXQubWlwbWFzaz0wOzE2PmU7KytlKXQuaW1hZ2VzW2VdPW51bGw7cmV0dXJuIHR9ZnVuY3Rpb24gTCh0KXtmb3IodmFyIGU9dC5pbWFnZXMscj0wO3I8ZS5sZW5ndGg7KytyKWVbcl0mJkEoZVtyXSksZVtyXT1udWxsO2d0LnB1c2godCl9ZnVuY3Rpb24geigpe3RoaXMubWFnRmlsdGVyPXRoaXMubWluRmlsdGVyPTk3MjgsdGhpcy53cmFwVD10aGlzLndyYXBTPTMzMDcxLHRoaXMuYW5pc290cm9waWM9MSx0aGlzLmdlbk1pcG1hcHM9ITEsdGhpcy5taXBtYXBIaW50PTQzNTJ9ZnVuY3Rpb24gTyh0LGUpe1wibWluXCJpbiBlJiYodC5taW5GaWx0ZXI9VVtlLm1pbl0sMDw9YXQuaW5kZXhPZih0Lm1pbkZpbHRlcikmJiEoXCJmYWNlc1wiaW4gZSkmJih0Lmdlbk1pcG1hcHM9ITApKSxcIm1hZ1wiaW4gZSYmKHQubWFnRmlsdGVyPVZbZS5tYWddKTt2YXIgcj10LndyYXBTLG49dC53cmFwVDtpZihcIndyYXBcImluIGUpe3ZhciBpPWUud3JhcDtcInN0cmluZ1wiPT10eXBlb2YgaT9yPW49TltpXTpBcnJheS5pc0FycmF5KGkpJiYocj1OW2lbMF1dLG49TltpWzFdXSl9ZWxzZVwid3JhcFNcImluIGUmJihyPU5bZS53cmFwU10pLFwid3JhcFRcImluIGUmJihuPU5bZS53cmFwVF0pO2lmKHQud3JhcFM9cix0LndyYXBUPW4sXCJhbmlzb3Ryb3BpY1wiaW4gZSYmKHQuYW5pc290cm9waWM9ZS5hbmlzb3Ryb3BpYyksXCJtaXBtYXBcImluIGUpe3N3aXRjaChyPSExLHR5cGVvZiBlLm1pcG1hcCl7Y2FzZVwic3RyaW5nXCI6dC5taXBtYXBIaW50PUJbZS5taXBtYXBdLHI9dC5nZW5NaXBtYXBzPSEwO2JyZWFrO2Nhc2VcImJvb2xlYW5cIjpyPXQuZ2VuTWlwbWFwcz1lLm1pcG1hcDticmVhaztjYXNlXCJvYmplY3RcIjp0Lmdlbk1pcG1hcHM9ITEscj0hMH0hcnx8XCJtaW5cImluIGV8fCh0Lm1pbkZpbHRlcj05OTg0KX19ZnVuY3Rpb24gSShyLG4pe3QudGV4UGFyYW1ldGVyaShuLDEwMjQxLHIubWluRmlsdGVyKSx0LnRleFBhcmFtZXRlcmkobiwxMDI0MCxyLm1hZ0ZpbHRlciksdC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDIsci53cmFwUyksdC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDMsci53cmFwVCksZS5leHRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMmJnQudGV4UGFyYW1ldGVyaShuLDM0MDQ2LHIuYW5pc290cm9waWMpLHIuZ2VuTWlwbWFwcyYmKHQuaGludCgzMzE3MCxyLm1pcG1hcEhpbnQpLHQuZ2VuZXJhdGVNaXBtYXAobikpfWZ1bmN0aW9uIEQoZSl7cy5jYWxsKHRoaXMpLHRoaXMubWlwbWFzaz0wLHRoaXMuaW50ZXJuYWxmb3JtYXQ9NjQwOCx0aGlzLmlkPXZ0KyssdGhpcy5yZWZDb3VudD0xLHRoaXMudGFyZ2V0PWUsdGhpcy50ZXh0dXJlPXQuY3JlYXRlVGV4dHVyZSgpLHRoaXMudW5pdD0tMSx0aGlzLmJpbmRDb3VudD0wLHRoaXMudGV4SW5mbz1uZXcgeixvLnByb2ZpbGUmJih0aGlzLnN0YXRzPXtzaXplOjB9KX1mdW5jdGlvbiBQKGUpe3QuYWN0aXZlVGV4dHVyZSgzMzk4NCksdC5iaW5kVGV4dHVyZShlLnRhcmdldCxlLnRleHR1cmUpfWZ1bmN0aW9uIFIoKXt2YXIgZT14dFswXTtlP3QuYmluZFRleHR1cmUoZS50YXJnZXQsZS50ZXh0dXJlKTp0LmJpbmRUZXh0dXJlKDM1NTMsbnVsbCl9ZnVuY3Rpb24gRihlKXt2YXIgcj1lLnRleHR1cmUsbj1lLnVuaXQsaT1lLnRhcmdldDswPD1uJiYodC5hY3RpdmVUZXh0dXJlKDMzOTg0K24pLHQuYmluZFRleHR1cmUoaSxudWxsKSx4dFtuXT1udWxsKSx0LmRlbGV0ZVRleHR1cmUociksZS50ZXh0dXJlPW51bGwsZS5wYXJhbXM9bnVsbCxlLnBpeGVscz1udWxsLGUucmVmQ291bnQ9MCxkZWxldGUgbXRbZS5pZF0sYS50ZXh0dXJlQ291bnQtLX12YXIgQj17XCJkb24ndCBjYXJlXCI6NDM1MixcImRvbnQgY2FyZVwiOjQzNTIsbmljZTo0MzU0LGZhc3Q6NDM1M30sTj17cmVwZWF0OjEwNDk3LGNsYW1wOjMzMDcxLG1pcnJvcjozMzY0OH0sVj17bmVhcmVzdDo5NzI4LGxpbmVhcjo5NzI5fSxVPWooe21pcG1hcDo5OTg3LFwibmVhcmVzdCBtaXBtYXAgbmVhcmVzdFwiOjk5ODQsXCJsaW5lYXIgbWlwbWFwIG5lYXJlc3RcIjo5OTg1LFwibmVhcmVzdCBtaXBtYXAgbGluZWFyXCI6OTk4NixcImxpbmVhciBtaXBtYXAgbGluZWFyXCI6OTk4N30sVikscT17bm9uZTowLGJyb3dzZXI6Mzc0NDR9LEg9e3VpbnQ4OjUxMjEscmdiYTQ6MzI4MTkscmdiNTY1OjMzNjM1LFwicmdiNSBhMVwiOjMyODIwfSxZPXthbHBoYTo2NDA2LGx1bWluYW5jZTo2NDA5LFwibHVtaW5hbmNlIGFscGhhXCI6NjQxMCxyZ2I6NjQwNyxyZ2JhOjY0MDgscmdiYTQ6MzI4NTQsXCJyZ2I1IGExXCI6MzI4NTUscmdiNTY1OjM2MTk0fSxKPXt9O2UuZXh0X3NyZ2ImJihZLnNyZ2I9MzU5MDQsWS5zcmdiYT0zNTkwNiksZS5vZXNfdGV4dHVyZV9mbG9hdCYmKEguZmxvYXQzMj1ILmZsb2F0PTUxMjYpLGUub2VzX3RleHR1cmVfaGFsZl9mbG9hdCYmKEguZmxvYXQxNj1IW1wiaGFsZiBmbG9hdFwiXT0zNjE5MyksZS53ZWJnbF9kZXB0aF90ZXh0dXJlJiYoaihZLHtkZXB0aDo2NDAyLFwiZGVwdGggc3RlbmNpbFwiOjM0MDQxfSksaihILHt1aW50MTY6NTEyMyx1aW50MzI6NTEyNSxcImRlcHRoIHN0ZW5jaWxcIjozNDA0Mn0pKSxlLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJiZqKEose1wicmdiIHMzdGMgZHh0MVwiOjMzNzc2LFwicmdiYSBzM3RjIGR4dDFcIjozMzc3NyxcInJnYmEgczN0YyBkeHQzXCI6MzM3NzgsXCJyZ2JhIHMzdGMgZHh0NVwiOjMzNzc5fSksZS53ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfYXRjJiZqKEose1wicmdiIGF0Y1wiOjM1OTg2LFwicmdiYSBhdGMgZXhwbGljaXQgYWxwaGFcIjozNTk4NyxcInJnYmEgYXRjIGludGVycG9sYXRlZCBhbHBoYVwiOjM0Nzk4fSksZS53ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMmJmooSix7XCJyZ2IgcHZydGMgNGJwcHYxXCI6MzU4NDAsXCJyZ2IgcHZydGMgMmJwcHYxXCI6MzU4NDEsXCJyZ2JhIHB2cnRjIDRicHB2MVwiOjM1ODQyLFwicmdiYSBwdnJ0YyAyYnBwdjFcIjozNTg0M30pLGUud2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEmJihKW1wicmdiIGV0YzFcIl09MzYxOTYpO3ZhciBLPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQuZ2V0UGFyYW1ldGVyKDM0NDY3KSk7T2JqZWN0LmtleXMoSikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1KW3RdOzA8PUsuaW5kZXhPZihlKSYmKFlbdF09ZSl9KTt2YXIgUT1PYmplY3Qua2V5cyhZKTtyLnRleHR1cmVGb3JtYXRzPVE7dmFyIHR0PVtdO09iamVjdC5rZXlzKFkpLmZvckVhY2goZnVuY3Rpb24odCl7dHRbWVt0XV09dH0pO3ZhciBldD1bXTtPYmplY3Qua2V5cyhIKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2V0W0hbdF1dPXR9KTt2YXIgcnQ9W107T2JqZWN0LmtleXMoVikuZm9yRWFjaChmdW5jdGlvbih0KXtydFtWW3RdXT10fSk7dmFyIG50PVtdO09iamVjdC5rZXlzKFUpLmZvckVhY2goZnVuY3Rpb24odCl7bnRbVVt0XV09dH0pO3ZhciBpdD1bXTtPYmplY3Qua2V5cyhOKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2l0W05bdF1dPXR9KTt2YXIgcHQ9US5yZWR1Y2UoZnVuY3Rpb24odCxlKXt2YXIgcj1ZW2VdO3JldHVybiA2NDA5PT09cnx8NjQwNj09PXJ8fDY0MDk9PT1yfHw2NDEwPT09cnx8NjQwMj09PXJ8fDM0MDQxPT09cj90W3JdPXI6MzI4NTU9PT1yfHwwPD1lLmluZGV4T2YoXCJyZ2JhXCIpP3Rbcl09NjQwODp0W3JdPTY0MDcsdH0se30pLGR0PVtdLGd0PVtdLHZ0PTAsbXQ9e30seXQ9ci5tYXhUZXh0dXJlVW5pdHMseHQ9QXJyYXkoeXQpLm1hcChmdW5jdGlvbigpe3JldHVybiBudWxsfSk7cmV0dXJuIGooRC5wcm90b3R5cGUse2JpbmQ6ZnVuY3Rpb24oKXt0aGlzLmJpbmRDb3VudCs9MTt2YXIgZT10aGlzLnVuaXQ7aWYoMD5lKXtmb3IodmFyIHI9MDtyPHl0Oysrcil7dmFyIG49eHRbcl07aWYobil7aWYoMDxuLmJpbmRDb3VudCljb250aW51ZTtuLnVuaXQ9LTF9eHRbcl09dGhpcyxlPXI7YnJlYWt9by5wcm9maWxlJiZhLm1heFRleHR1cmVVbml0czxlKzEmJihhLm1heFRleHR1cmVVbml0cz1lKzEpLHRoaXMudW5pdD1lLHQuYWN0aXZlVGV4dHVyZSgzMzk4NCtlKSx0LmJpbmRUZXh0dXJlKHRoaXMudGFyZ2V0LHRoaXMudGV4dHVyZSl9cmV0dXJuIGV9LHVuYmluZDpmdW5jdGlvbigpey0tdGhpcy5iaW5kQ291bnR9LGRlY1JlZjpmdW5jdGlvbigpezA+PS0tdGhpcy5yZWZDb3VudCYmRih0aGlzKX19KSxvLnByb2ZpbGUmJihhLmdldFRvdGFsVGV4dHVyZVNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBPYmplY3Qua2V5cyhtdCkuZm9yRWFjaChmdW5jdGlvbihlKXt0Kz1tdFtlXS5zdGF0cy5zaXplfSksdH0pLHtjcmVhdGUyRDpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1pLnRleEluZm87ei5jYWxsKHIpO3ZhciBhPUMoKTtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdD9NKGEsMHx0LFwibnVtYmVyXCI9PXR5cGVvZiBlPzB8ZTowfHQpOnQ/KE8ocix0KSxTKGEsdCkpOk0oYSwxLDEpLHIuZ2VuTWlwbWFwcyYmKGEubWlwbWFzaz0oYS53aWR0aDw8MSktMSksaS5taXBtYXNrPWEubWlwbWFzayxjKGksYSksaS5pbnRlcm5hbGZvcm1hdD1hLmludGVybmFsZm9ybWF0LG4ud2lkdGg9YS53aWR0aCxuLmhlaWdodD1hLmhlaWdodCxQKGkpLEUoYSwzNTUzKSxJKHIsMzU1MyksUigpLEwoYSksby5wcm9maWxlJiYoaS5zdGF0cy5zaXplPWsoaS5pbnRlcm5hbGZvcm1hdCxpLnR5cGUsYS53aWR0aCxhLmhlaWdodCxyLmdlbk1pcG1hcHMsITEpKSxuLmZvcm1hdD10dFtpLmludGVybmFsZm9ybWF0XSxuLnR5cGU9ZXRbaS50eXBlXSxuLm1hZz1ydFtyLm1hZ0ZpbHRlcl0sbi5taW49bnRbci5taW5GaWx0ZXJdLG4ud3JhcFM9aXRbci53cmFwU10sbi53cmFwVD1pdFtyLndyYXBUXSxufXZhciBpPW5ldyBEKDM1NTMpO3JldHVybiBtdFtpLmlkXT1pLGEudGV4dHVyZUNvdW50KyssbihlLHIpLG4uc3ViaW1hZ2U9ZnVuY3Rpb24odCxlLHIsYSl7ZXw9MCxyfD0wLGF8PTA7dmFyIG89bSgpO3JldHVybiBjKG8saSksby53aWR0aD0wLG8uaGVpZ2h0PTAscChvLHQpLG8ud2lkdGg9by53aWR0aHx8KGkud2lkdGg+PmEpLWUsby5oZWlnaHQ9by5oZWlnaHR8fChpLmhlaWdodD4+YSktcixQKGkpLGQobywzNTUzLGUscixhKSxSKCksQShvKSxufSxuLnJlc2l6ZT1mdW5jdGlvbihlLHIpe3ZhciBhPTB8ZSxzPTB8cnx8YTtpZihhPT09aS53aWR0aCYmcz09PWkuaGVpZ2h0KXJldHVybiBuO24ud2lkdGg9aS53aWR0aD1hLG4uaGVpZ2h0PWkuaGVpZ2h0PXMsUChpKTtmb3IodmFyIGwsYz1pLmNoYW5uZWxzLHU9aS50eXBlLGg9MDtpLm1pcG1hc2s+Pmg7KytoKXt2YXIgZj1hPj5oLHA9cz4+aDtpZighZnx8IXApYnJlYWs7bD1HLnplcm8uYWxsb2NUeXBlKHUsZipwKmMpLHQudGV4SW1hZ2UyRCgzNTUzLGgsaS5mb3JtYXQsZixwLDAsaS5mb3JtYXQsaS50eXBlLGwpLGwmJkcuemVyby5mcmVlVHlwZShsKX1yZXR1cm4gUigpLG8ucHJvZmlsZSYmKGkuc3RhdHMuc2l6ZT1rKGkuaW50ZXJuYWxmb3JtYXQsaS50eXBlLGEscywhMSwhMSkpLG59LG4uX3JlZ2xUeXBlPVwidGV4dHVyZTJkXCIsbi5fdGV4dHVyZT1pLG8ucHJvZmlsZSYmKG4uc3RhdHM9aS5zdGF0cyksbi5kZXN0cm95PWZ1bmN0aW9uKCl7aS5kZWNSZWYoKX0sbn0sY3JlYXRlQ3ViZTpmdW5jdGlvbihlLHIsbixpLHMsbCl7ZnVuY3Rpb24gaCh0LGUscixuLGksYSl7dmFyIHMsbD1mLnRleEluZm87Zm9yKHouY2FsbChsKSxzPTA7Nj5zOysrcylnW3NdPUMoKTtpZihcIm51bWJlclwiIT10eXBlb2YgdCYmdCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHQpaWYoZSlTKGdbMF0sdCksUyhnWzFdLGUpLFMoZ1syXSxyKSxTKGdbM10sbiksUyhnWzRdLGkpLFMoZ1s1XSxhKTtlbHNlIGlmKE8obCx0KSx1KGYsdCksXCJmYWNlc1wiaW4gdClmb3IodD10LmZhY2VzLHM9MDs2PnM7KytzKWMoZ1tzXSxmKSxTKGdbc10sdFtzXSk7ZWxzZSBmb3Iocz0wOzY+czsrK3MpUyhnW3NdLHQpfWVsc2UgZm9yKHQ9MHx0fHwxLHM9MDs2PnM7KytzKU0oZ1tzXSx0LHQpO2ZvcihjKGYsZ1swXSksZi5taXBtYXNrPWwuZ2VuTWlwbWFwcz8oZ1swXS53aWR0aDw8MSktMTpnWzBdLm1pcG1hc2ssZi5pbnRlcm5hbGZvcm1hdD1nWzBdLmludGVybmFsZm9ybWF0LGgud2lkdGg9Z1swXS53aWR0aCxoLmhlaWdodD1nWzBdLmhlaWdodCxQKGYpLHM9MDs2PnM7KytzKUUoZ1tzXSwzNDA2OStzKTtmb3IoSShsLDM0MDY3KSxSKCksby5wcm9maWxlJiYoZi5zdGF0cy5zaXplPWsoZi5pbnRlcm5hbGZvcm1hdCxmLnR5cGUsaC53aWR0aCxoLmhlaWdodCxsLmdlbk1pcG1hcHMsITApKSxoLmZvcm1hdD10dFtmLmludGVybmFsZm9ybWF0XSxoLnR5cGU9ZXRbZi50eXBlXSxoLm1hZz1ydFtsLm1hZ0ZpbHRlcl0saC5taW49bnRbbC5taW5GaWx0ZXJdLGgud3JhcFM9aXRbbC53cmFwU10saC53cmFwVD1pdFtsLndyYXBUXSxzPTA7Nj5zOysrcylMKGdbc10pO3JldHVybiBofXZhciBmPW5ldyBEKDM0MDY3KTttdFtmLmlkXT1mLGEuY3ViZUNvdW50Kys7dmFyIGc9QXJyYXkoNik7cmV0dXJuIGgoZSxyLG4saSxzLGwpLGguc3ViaW1hZ2U9ZnVuY3Rpb24odCxlLHIsbixpKXtyfD0wLG58PTAsaXw9MDt2YXIgYT1tKCk7cmV0dXJuIGMoYSxmKSxhLndpZHRoPTAsYS5oZWlnaHQ9MCxwKGEsZSksYS53aWR0aD1hLndpZHRofHwoZi53aWR0aD4+aSktcixhLmhlaWdodD1hLmhlaWdodHx8KGYuaGVpZ2h0Pj5pKS1uLFAoZiksZChhLDM0MDY5K3QscixuLGkpLFIoKSxBKGEpLGh9LGgucmVzaXplPWZ1bmN0aW9uKGUpe2lmKChlfD0wKSE9PWYud2lkdGgpe2gud2lkdGg9Zi53aWR0aD1lLGguaGVpZ2h0PWYuaGVpZ2h0PWUsUChmKTtmb3IodmFyIHI9MDs2PnI7KytyKWZvcih2YXIgbj0wO2YubWlwbWFzaz4+bjsrK24pdC50ZXhJbWFnZTJEKDM0MDY5K3IsbixmLmZvcm1hdCxlPj5uLGU+Pm4sMCxmLmZvcm1hdCxmLnR5cGUsbnVsbCk7cmV0dXJuIFIoKSxvLnByb2ZpbGUmJihmLnN0YXRzLnNpemU9ayhmLmludGVybmFsZm9ybWF0LGYudHlwZSxoLndpZHRoLGguaGVpZ2h0LCExLCEwKSksaH19LGguX3JlZ2xUeXBlPVwidGV4dHVyZUN1YmVcIixoLl90ZXh0dXJlPWYsby5wcm9maWxlJiYoaC5zdGF0cz1mLnN0YXRzKSxoLmRlc3Ryb3k9ZnVuY3Rpb24oKXtmLmRlY1JlZigpfSxofSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8eXQ7KytlKXQuYWN0aXZlVGV4dHVyZSgzMzk4NCtlKSx0LmJpbmRUZXh0dXJlKDM1NTMsbnVsbCkseHRbZV09bnVsbDtYKG10KS5mb3JFYWNoKEYpLGEuY3ViZUNvdW50PTAsYS50ZXh0dXJlQ291bnQ9MH0sZ2V0VGV4dHVyZTpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0scmVzdG9yZTpmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8eXQ7KytlKXt2YXIgcj14dFtlXTtyJiYoci5iaW5kQ291bnQ9MCxyLnVuaXQ9LTEseHRbZV09bnVsbCl9WChtdCkuZm9yRWFjaChmdW5jdGlvbihlKXtlLnRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksdC5iaW5kVGV4dHVyZShlLnRhcmdldCxlLnRleHR1cmUpO2Zvcih2YXIgcj0wOzMyPnI7KytyKWlmKDAhPShlLm1pcG1hc2smMTw8cikpaWYoMzU1Mz09PWUudGFyZ2V0KXQudGV4SW1hZ2UyRCgzNTUzLHIsZS5pbnRlcm5hbGZvcm1hdCxlLndpZHRoPj5yLGUuaGVpZ2h0Pj5yLDAsZS5pbnRlcm5hbGZvcm1hdCxlLnR5cGUsbnVsbCk7ZWxzZSBmb3IodmFyIG49MDs2Pm47KytuKXQudGV4SW1hZ2UyRCgzNDA2OStuLHIsZS5pbnRlcm5hbGZvcm1hdCxlLndpZHRoPj5yLGUuaGVpZ2h0Pj5yLDAsZS5pbnRlcm5hbGZvcm1hdCxlLnR5cGUsbnVsbCk7SShlLnRleEluZm8sZS50YXJnZXQpfSl9fX1mdW5jdGlvbiBUKHQsZSxyLG4saSxhKXtmdW5jdGlvbiBvKHQsZSxyKXt0aGlzLnRhcmdldD10LHRoaXMudGV4dHVyZT1lLHRoaXMucmVuZGVyYnVmZmVyPXI7dmFyIG49dD0wO2U/KHQ9ZS53aWR0aCxuPWUuaGVpZ2h0KTpyJiYodD1yLndpZHRoLG49ci5oZWlnaHQpLHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1ufWZ1bmN0aW9uIHModCl7dCYmKHQudGV4dHVyZSYmdC50ZXh0dXJlLl90ZXh0dXJlLmRlY1JlZigpLHQucmVuZGVyYnVmZmVyJiZ0LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLmRlY1JlZigpKX1mdW5jdGlvbiBsKHQsZSxyKXt0JiYodC50ZXh0dXJlP3QudGV4dHVyZS5fdGV4dHVyZS5yZWZDb3VudCs9MTp0LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLnJlZkNvdW50Kz0xKX1mdW5jdGlvbiBjKGUscil7ciYmKHIudGV4dHVyZT90LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLGUsci50YXJnZXQsci50ZXh0dXJlLl90ZXh0dXJlLnRleHR1cmUsMCk6dC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCxlLDM2MTYxLHIucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIucmVuZGVyYnVmZmVyKSl9ZnVuY3Rpb24gdSh0KXt2YXIgZT0zNTUzLHI9bnVsbCxuPW51bGwsaT10O3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0JiYoaT10LmRhdGEsXCJ0YXJnZXRcImluIHQmJihlPTB8dC50YXJnZXQpKSxcInRleHR1cmUyZFwiPT09KHQ9aS5fcmVnbFR5cGUpP3I9aTpcInRleHR1cmVDdWJlXCI9PT10P3I9aTpcInJlbmRlcmJ1ZmZlclwiPT09dCYmKG49aSxlPTM2MTYxKSxuZXcgbyhlLHIsbil9ZnVuY3Rpb24gaCh0LGUscixhLHMpe3JldHVybiByPygodD1uLmNyZWF0ZTJEKHt3aWR0aDp0LGhlaWdodDplLGZvcm1hdDphLHR5cGU6c30pKS5fdGV4dHVyZS5yZWZDb3VudD0wLG5ldyBvKDM1NTMsdCxudWxsKSk6KCh0PWkuY3JlYXRlKHt3aWR0aDp0LGhlaWdodDplLGZvcm1hdDphfSkpLl9yZW5kZXJidWZmZXIucmVmQ291bnQ9MCxuZXcgbygzNjE2MSxudWxsLHQpKX1mdW5jdGlvbiBmKHQpe3JldHVybiB0JiYodC50ZXh0dXJlfHx0LnJlbmRlcmJ1ZmZlcil9ZnVuY3Rpb24gcCh0LGUscil7dCYmKHQudGV4dHVyZT90LnRleHR1cmUucmVzaXplKGUscik6dC5yZW5kZXJidWZmZXImJnQucmVuZGVyYnVmZmVyLnJlc2l6ZShlLHIpLHQud2lkdGg9ZSx0LmhlaWdodD1yKX1mdW5jdGlvbiBkKCl7dGhpcy5pZD1rKyssQVt0aGlzLmlkXT10aGlzLHRoaXMuZnJhbWVidWZmZXI9dC5jcmVhdGVGcmFtZWJ1ZmZlcigpLHRoaXMuaGVpZ2h0PXRoaXMud2lkdGg9MCx0aGlzLmNvbG9yQXR0YWNobWVudHM9W10sdGhpcy5kZXB0aFN0ZW5jaWxBdHRhY2htZW50PXRoaXMuc3RlbmNpbEF0dGFjaG1lbnQ9dGhpcy5kZXB0aEF0dGFjaG1lbnQ9bnVsbH1mdW5jdGlvbiBnKHQpe3QuY29sb3JBdHRhY2htZW50cy5mb3JFYWNoKHMpLHModC5kZXB0aEF0dGFjaG1lbnQpLHModC5zdGVuY2lsQXR0YWNobWVudCkscyh0LmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQpfWZ1bmN0aW9uIHYoZSl7dC5kZWxldGVGcmFtZWJ1ZmZlcihlLmZyYW1lYnVmZmVyKSxlLmZyYW1lYnVmZmVyPW51bGwsYS5mcmFtZWJ1ZmZlckNvdW50LS0sZGVsZXRlIEFbZS5pZF19ZnVuY3Rpb24gbShlKXt2YXIgbjt0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxlLmZyYW1lYnVmZmVyKTt2YXIgaT1lLmNvbG9yQXR0YWNobWVudHM7Zm9yKG49MDtuPGkubGVuZ3RoOysrbiljKDM2MDY0K24saVtuXSk7Zm9yKG49aS5sZW5ndGg7bjxyLm1heENvbG9yQXR0YWNobWVudHM7KytuKXQuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwNjQrbiwzNTUzLG51bGwsMCk7dC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzMzMwNiwzNTUzLG51bGwsMCksdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA5NiwzNTUzLG51bGwsMCksdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjEyOCwzNTUzLG51bGwsMCksYygzNjA5NixlLmRlcHRoQXR0YWNobWVudCksYygzNjEyOCxlLnN0ZW5jaWxBdHRhY2htZW50KSxjKDMzMzA2LGUuZGVwdGhTdGVuY2lsQXR0YWNobWVudCksdC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKDM2MTYwKSx0LmlzQ29udGV4dExvc3QoKSx0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCx4Lm5leHQ/eC5uZXh0LmZyYW1lYnVmZmVyOm51bGwpLHguY3VyPXgubmV4dCx0LmdldEVycm9yKCl9ZnVuY3Rpb24geSh0LGUpe2Z1bmN0aW9uIHIodCxlKXt2YXIgaSxhPTAsbz0wLHM9ITAsYz0hMDtpPW51bGw7dmFyIHA9ITAsZD1cInJnYmFcIix2PVwidWludDhcIix5PTEseD1udWxsLHc9bnVsbCxrPW51bGwsQT0hMTtcIm51bWJlclwiPT10eXBlb2YgdD8oYT0wfHQsbz0wfGV8fGEpOnQ/KFwic2hhcGVcImluIHQ/KGE9KG89dC5zaGFwZSlbMF0sbz1vWzFdKTooXCJyYWRpdXNcImluIHQmJihhPW89dC5yYWRpdXMpLFwid2lkdGhcImluIHQmJihhPXQud2lkdGgpLFwiaGVpZ2h0XCJpbiB0JiYobz10LmhlaWdodCkpLChcImNvbG9yXCJpbiB0fHxcImNvbG9yc1wiaW4gdCkmJihpPXQuY29sb3J8fHQuY29sb3JzLEFycmF5LmlzQXJyYXkoaSkpLGl8fChcImNvbG9yQ291bnRcImluIHQmJih5PTB8dC5jb2xvckNvdW50KSxcImNvbG9yVGV4dHVyZVwiaW4gdCYmKHA9ISF0LmNvbG9yVGV4dHVyZSxkPVwicmdiYTRcIiksXCJjb2xvclR5cGVcImluIHQmJih2PXQuY29sb3JUeXBlLCFwKSYmKFwiaGFsZiBmbG9hdFwiPT09dnx8XCJmbG9hdDE2XCI9PT12P2Q9XCJyZ2JhMTZmXCI6XCJmbG9hdFwiIT09diYmXCJmbG9hdDMyXCIhPT12fHwoZD1cInJnYmEzMmZcIikpLFwiY29sb3JGb3JtYXRcImluIHQmJihkPXQuY29sb3JGb3JtYXQsMDw9Yi5pbmRleE9mKGQpP3A9ITA6MDw9Xy5pbmRleE9mKGQpJiYocD0hMSkpKSwoXCJkZXB0aFRleHR1cmVcImluIHR8fFwiZGVwdGhTdGVuY2lsVGV4dHVyZVwiaW4gdCkmJihBPSEoIXQuZGVwdGhUZXh0dXJlJiYhdC5kZXB0aFN0ZW5jaWxUZXh0dXJlKSksXCJkZXB0aFwiaW4gdCYmKFwiYm9vbGVhblwiPT10eXBlb2YgdC5kZXB0aD9zPXQuZGVwdGg6KHg9dC5kZXB0aCxjPSExKSksXCJzdGVuY2lsXCJpbiB0JiYoXCJib29sZWFuXCI9PXR5cGVvZiB0LnN0ZW5jaWw/Yz10LnN0ZW5jaWw6KHc9dC5zdGVuY2lsLHM9ITEpKSxcImRlcHRoU3RlbmNpbFwiaW4gdCYmKFwiYm9vbGVhblwiPT10eXBlb2YgdC5kZXB0aFN0ZW5jaWw/cz1jPXQuZGVwdGhTdGVuY2lsOihrPXQuZGVwdGhTdGVuY2lsLGM9cz0hMSkpKTphPW89MTt2YXIgVD1udWxsLE09bnVsbCxTPW51bGwsRT1udWxsO2lmKEFycmF5LmlzQXJyYXkoaSkpVD1pLm1hcCh1KTtlbHNlIGlmKGkpVD1bdShpKV07ZWxzZSBmb3IoVD1BcnJheSh5KSxpPTA7aTx5OysraSlUW2ldPWgoYSxvLHAsZCx2KTtmb3IoYT1hfHxUWzBdLndpZHRoLG89b3x8VFswXS5oZWlnaHQseD9NPXUoeCk6cyYmIWMmJihNPWgoYSxvLEEsXCJkZXB0aFwiLFwidWludDMyXCIpKSx3P1M9dSh3KTpjJiYhcyYmKFM9aChhLG8sITEsXCJzdGVuY2lsXCIsXCJ1aW50OFwiKSksaz9FPXUoayk6IXgmJiF3JiZjJiZzJiYoRT1oKGEsbyxBLFwiZGVwdGggc3RlbmNpbFwiLFwiZGVwdGggc3RlbmNpbFwiKSkscz1udWxsLGk9MDtpPFQubGVuZ3RoOysraSlsKFRbaV0pLFRbaV0mJlRbaV0udGV4dHVyZSYmKGM9eXRbVFtpXS50ZXh0dXJlLl90ZXh0dXJlLmZvcm1hdF0qeHRbVFtpXS50ZXh0dXJlLl90ZXh0dXJlLnR5cGVdLG51bGw9PT1zJiYocz1jKSk7cmV0dXJuIGwoTSksbChTKSxsKEUpLGcobiksbi53aWR0aD1hLG4uaGVpZ2h0PW8sbi5jb2xvckF0dGFjaG1lbnRzPVQsbi5kZXB0aEF0dGFjaG1lbnQ9TSxuLnN0ZW5jaWxBdHRhY2htZW50PVMsbi5kZXB0aFN0ZW5jaWxBdHRhY2htZW50PUUsci5jb2xvcj1ULm1hcChmKSxyLmRlcHRoPWYoTSksci5zdGVuY2lsPWYoUyksci5kZXB0aFN0ZW5jaWw9ZihFKSxyLndpZHRoPW4ud2lkdGgsci5oZWlnaHQ9bi5oZWlnaHQsbShuKSxyfXZhciBuPW5ldyBkO3JldHVybiBhLmZyYW1lYnVmZmVyQ291bnQrKyxyKHQsZSksaihyLHtyZXNpemU6ZnVuY3Rpb24odCxlKXt2YXIgaT1NYXRoLm1heCgwfHQsMSksYT1NYXRoLm1heCgwfGV8fGksMSk7aWYoaT09PW4ud2lkdGgmJmE9PT1uLmhlaWdodClyZXR1cm4gcjtmb3IodmFyIG89bi5jb2xvckF0dGFjaG1lbnRzLHM9MDtzPG8ubGVuZ3RoOysrcylwKG9bc10saSxhKTtyZXR1cm4gcChuLmRlcHRoQXR0YWNobWVudCxpLGEpLHAobi5zdGVuY2lsQXR0YWNobWVudCxpLGEpLHAobi5kZXB0aFN0ZW5jaWxBdHRhY2htZW50LGksYSksbi53aWR0aD1yLndpZHRoPWksbi5oZWlnaHQ9ci5oZWlnaHQ9YSxtKG4pLHJ9LF9yZWdsVHlwZTpcImZyYW1lYnVmZmVyXCIsX2ZyYW1lYnVmZmVyOm4sZGVzdHJveTpmdW5jdGlvbigpe3YobiksZyhuKX0sdXNlOmZ1bmN0aW9uKHQpe3guc2V0RkJPKHtmcmFtZWJ1ZmZlcjpyfSx0KX19KX12YXIgeD17Y3VyOm51bGwsbmV4dDpudWxsLGRpcnR5OiExLHNldEZCTzpudWxsfSxiPVtcInJnYmFcIl0sXz1bXCJyZ2JhNFwiLFwicmdiNTY1XCIsXCJyZ2I1IGExXCJdO2UuZXh0X3NyZ2ImJl8ucHVzaChcInNyZ2JhXCIpLGUuZXh0X2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0JiZfLnB1c2goXCJyZ2JhMTZmXCIsXCJyZ2IxNmZcIiksZS53ZWJnbF9jb2xvcl9idWZmZXJfZmxvYXQmJl8ucHVzaChcInJnYmEzMmZcIik7dmFyIHc9W1widWludDhcIl07ZS5vZXNfdGV4dHVyZV9oYWxmX2Zsb2F0JiZ3LnB1c2goXCJoYWxmIGZsb2F0XCIsXCJmbG9hdDE2XCIpLGUub2VzX3RleHR1cmVfZmxvYXQmJncucHVzaChcImZsb2F0XCIsXCJmbG9hdDMyXCIpO3ZhciBrPTAsQT17fTtyZXR1cm4gaih4LHtnZXRGcmFtZWJ1ZmZlcjpmdW5jdGlvbih0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiZcImZyYW1lYnVmZmVyXCI9PT10Ll9yZWdsVHlwZSYmKHQ9dC5fZnJhbWVidWZmZXIpaW5zdGFuY2VvZiBkP3Q6bnVsbH0sY3JlYXRlOnksY3JlYXRlQ3ViZTpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3ZhciBpLGE9e2NvbG9yOm51bGx9LG89MCxzPW51bGw7aT1cInJnYmFcIjt2YXIgbD1cInVpbnQ4XCIsYz0xO2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0P289MHx0OnQ/KFwic2hhcGVcImluIHQ/bz10LnNoYXBlWzBdOihcInJhZGl1c1wiaW4gdCYmKG89MHx0LnJhZGl1cyksXCJ3aWR0aFwiaW4gdD9vPTB8dC53aWR0aDpcImhlaWdodFwiaW4gdCYmKG89MHx0LmhlaWdodCkpLChcImNvbG9yXCJpbiB0fHxcImNvbG9yc1wiaW4gdCkmJihzPXQuY29sb3J8fHQuY29sb3JzLEFycmF5LmlzQXJyYXkocykpLHN8fChcImNvbG9yQ291bnRcImluIHQmJihjPTB8dC5jb2xvckNvdW50KSxcImNvbG9yVHlwZVwiaW4gdCYmKGw9dC5jb2xvclR5cGUpLFwiY29sb3JGb3JtYXRcImluIHQmJihpPXQuY29sb3JGb3JtYXQpKSxcImRlcHRoXCJpbiB0JiYoYS5kZXB0aD10LmRlcHRoKSxcInN0ZW5jaWxcImluIHQmJihhLnN0ZW5jaWw9dC5zdGVuY2lsKSxcImRlcHRoU3RlbmNpbFwiaW4gdCYmKGEuZGVwdGhTdGVuY2lsPXQuZGVwdGhTdGVuY2lsKSk6bz0xLHMpaWYoQXJyYXkuaXNBcnJheShzKSlmb3IodD1bXSxpPTA7aTxzLmxlbmd0aDsrK2kpdFtpXT1zW2ldO2Vsc2UgdD1bc107ZWxzZSBmb3IodD1BcnJheShjKSxzPXtyYWRpdXM6byxmb3JtYXQ6aSx0eXBlOmx9LGk9MDtpPGM7KytpKXRbaV09bi5jcmVhdGVDdWJlKHMpO2ZvcihhLmNvbG9yPUFycmF5KHQubGVuZ3RoKSxpPTA7aTx0Lmxlbmd0aDsrK2kpYz10W2ldLG89b3x8Yy53aWR0aCxhLmNvbG9yW2ldPXt0YXJnZXQ6MzQwNjksZGF0YTp0W2ldfTtmb3IoaT0wOzY+aTsrK2kpe2ZvcihjPTA7Yzx0Lmxlbmd0aDsrK2MpYS5jb2xvcltjXS50YXJnZXQ9MzQwNjkraTswPGkmJihhLmRlcHRoPXJbMF0uZGVwdGgsYS5zdGVuY2lsPXJbMF0uc3RlbmNpbCxhLmRlcHRoU3RlbmNpbD1yWzBdLmRlcHRoU3RlbmNpbCkscltpXT9yW2ldKGEpOnJbaV09eShhKX1yZXR1cm4gaihlLHt3aWR0aDpvLGhlaWdodDpvLGNvbG9yOnR9KX12YXIgcj1BcnJheSg2KTtyZXR1cm4gZSh0KSxqKGUse2ZhY2VzOnIscmVzaXplOmZ1bmN0aW9uKHQpe3ZhciBuPTB8dDtpZihuPT09ZS53aWR0aClyZXR1cm4gZTt2YXIgaT1lLmNvbG9yO2Zvcih0PTA7dDxpLmxlbmd0aDsrK3QpaVt0XS5yZXNpemUobik7Zm9yKHQ9MDs2PnQ7Kyt0KXJbdF0ucmVzaXplKG4pO3JldHVybiBlLndpZHRoPWUuaGVpZ2h0PW4sZX0sX3JlZ2xUeXBlOlwiZnJhbWVidWZmZXJDdWJlXCIsZGVzdHJveTpmdW5jdGlvbigpe3IuZm9yRWFjaChmdW5jdGlvbih0KXt0LmRlc3Ryb3koKX0pfX0pfSxjbGVhcjpmdW5jdGlvbigpe1goQSkuZm9yRWFjaCh2KX0scmVzdG9yZTpmdW5jdGlvbigpe3guY3VyPW51bGwseC5uZXh0PW51bGwseC5kaXJ0eT0hMCxYKEEpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5mcmFtZWJ1ZmZlcj10LmNyZWF0ZUZyYW1lYnVmZmVyKCksbShlKX0pfX0pfWZ1bmN0aW9uIE0oKXt0aGlzLnc9dGhpcy56PXRoaXMueT10aGlzLng9dGhpcy5zdGF0ZT0wLHRoaXMuYnVmZmVyPW51bGwsdGhpcy5zaXplPTAsdGhpcy5ub3JtYWxpemVkPSExLHRoaXMudHlwZT01MTI2LHRoaXMuZGl2aXNvcj10aGlzLnN0cmlkZT10aGlzLm9mZnNldD0wfWZ1bmN0aW9uIFModCxlLHIsbil7ZnVuY3Rpb24gaSh0LGUscixuKXt0aGlzLm5hbWU9dCx0aGlzLmlkPWUsdGhpcy5sb2NhdGlvbj1yLHRoaXMuaW5mbz1ufWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcilpZih0W3JdLmlkPT09ZS5pZClyZXR1cm4gdm9pZCh0W3JdLmxvY2F0aW9uPWUubG9jYXRpb24pO3QucHVzaChlKX1mdW5jdGlvbiBvKHIsbixpKXtpZighKG89KGk9MzU2MzI9PT1yP2M6dSlbbl0pKXt2YXIgYT1lLnN0cihuKSxvPXQuY3JlYXRlU2hhZGVyKHIpO3Quc2hhZGVyU291cmNlKG8sYSksdC5jb21waWxlU2hhZGVyKG8pLGlbbl09b31yZXR1cm4gb31mdW5jdGlvbiBzKHQsZSl7dGhpcy5pZD1wKyssdGhpcy5mcmFnSWQ9dCx0aGlzLnZlcnRJZD1lLHRoaXMucHJvZ3JhbT1udWxsLHRoaXMudW5pZm9ybXM9W10sdGhpcy5hdHRyaWJ1dGVzPVtdLG4ucHJvZmlsZSYmKHRoaXMuc3RhdHM9e3VuaWZvcm1zQ291bnQ6MCxhdHRyaWJ1dGVzQ291bnQ6MH0pfWZ1bmN0aW9uIGwocixzKXt2YXIgbCxjO2w9bygzNTYzMixyLmZyYWdJZCksYz1vKDM1NjMzLHIudmVydElkKTt2YXIgdT1yLnByb2dyYW09dC5jcmVhdGVQcm9ncmFtKCk7dC5hdHRhY2hTaGFkZXIodSxsKSx0LmF0dGFjaFNoYWRlcih1LGMpLHQubGlua1Byb2dyYW0odSk7dmFyIGg9dC5nZXRQcm9ncmFtUGFyYW1ldGVyKHUsMzU3MTgpO24ucHJvZmlsZSYmKHIuc3RhdHMudW5pZm9ybXNDb3VudD1oKTt2YXIgZj1yLnVuaWZvcm1zO2ZvcihsPTA7bDxoOysrbClpZihjPXQuZ2V0QWN0aXZlVW5pZm9ybSh1LGwpKWlmKDE8Yy5zaXplKWZvcih2YXIgcD0wO3A8Yy5zaXplOysrcCl7dmFyIGQ9Yy5uYW1lLnJlcGxhY2UoXCJbMF1cIixcIltcIitwK1wiXVwiKTthKGYsbmV3IGkoZCxlLmlkKGQpLHQuZ2V0VW5pZm9ybUxvY2F0aW9uKHUsZCksYykpfWVsc2UgYShmLG5ldyBpKGMubmFtZSxlLmlkKGMubmFtZSksdC5nZXRVbmlmb3JtTG9jYXRpb24odSxjLm5hbWUpLGMpKTtmb3IoaD10LmdldFByb2dyYW1QYXJhbWV0ZXIodSwzNTcyMSksbi5wcm9maWxlJiYoci5zdGF0cy5hdHRyaWJ1dGVzQ291bnQ9aCksZj1yLmF0dHJpYnV0ZXMsbD0wO2w8aDsrK2wpKGM9dC5nZXRBY3RpdmVBdHRyaWIodSxsKSkmJmEoZixuZXcgaShjLm5hbWUsZS5pZChjLm5hbWUpLHQuZ2V0QXR0cmliTG9jYXRpb24odSxjLm5hbWUpLGMpKX12YXIgYz17fSx1PXt9LGg9e30sZj1bXSxwPTA7cmV0dXJuIG4ucHJvZmlsZSYmKHIuZ2V0TWF4VW5pZm9ybXNDb3VudD1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIGYuZm9yRWFjaChmdW5jdGlvbihlKXtlLnN0YXRzLnVuaWZvcm1zQ291bnQ+dCYmKHQ9ZS5zdGF0cy51bmlmb3Jtc0NvdW50KX0pLHR9LHIuZ2V0TWF4QXR0cmlidXRlc0NvdW50PWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gZi5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uuc3RhdHMuYXR0cmlidXRlc0NvdW50PnQmJih0PWUuc3RhdHMuYXR0cmlidXRlc0NvdW50KX0pLHR9KSx7Y2xlYXI6ZnVuY3Rpb24oKXt2YXIgZT10LmRlbGV0ZVNoYWRlci5iaW5kKHQpO1goYykuZm9yRWFjaChlKSxjPXt9LFgodSkuZm9yRWFjaChlKSx1PXt9LGYuZm9yRWFjaChmdW5jdGlvbihlKXt0LmRlbGV0ZVByb2dyYW0oZS5wcm9ncmFtKX0pLGYubGVuZ3RoPTAsaD17fSxyLnNoYWRlckNvdW50PTB9LHByb2dyYW06ZnVuY3Rpb24odCxlLG4pe3ZhciBpPWhbZV07aXx8KGk9aFtlXT17fSk7dmFyIGE9aVt0XTtyZXR1cm4gYXx8KGE9bmV3IHMoZSx0KSxyLnNoYWRlckNvdW50KyssbChhKSxpW3RdPWEsZi5wdXNoKGEpKSxhfSxyZXN0b3JlOmZ1bmN0aW9uKCl7Yz17fSx1PXt9O2Zvcih2YXIgdD0wO3Q8Zi5sZW5ndGg7Kyt0KWwoZlt0XSl9LHNoYWRlcjpvLGZyYWc6LTEsdmVydDotMX19ZnVuY3Rpb24gRSh0LGUscixuLGksYSxvKXtmdW5jdGlvbiBzKGkpe3ZhciBhO2E9bnVsbD09PWUubmV4dD81MTIxOmUubmV4dC5jb2xvckF0dGFjaG1lbnRzWzBdLnRleHR1cmUuX3RleHR1cmUudHlwZTt2YXIgbz0wLHM9MCxsPW4uZnJhbWVidWZmZXJXaWR0aCxjPW4uZnJhbWVidWZmZXJIZWlnaHQsdT1udWxsO3JldHVybiBXKGkpP3U9aTppJiYobz0wfGkueCxzPTB8aS55LGw9MHwoaS53aWR0aHx8bi5mcmFtZWJ1ZmZlcldpZHRoLW8pLGM9MHwoaS5oZWlnaHR8fG4uZnJhbWVidWZmZXJIZWlnaHQtcyksdT1pLmRhdGF8fG51bGwpLHIoKSxpPWwqYyo0LHV8fCg1MTIxPT09YT91PW5ldyBVaW50OEFycmF5KGkpOjUxMjY9PT1hJiYodT11fHxuZXcgRmxvYXQzMkFycmF5KGkpKSksdC5waXhlbFN0b3JlaSgzMzMzLDQpLHQucmVhZFBpeGVscyhvLHMsbCxjLDY0MDgsYSx1KSx1fXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCYmXCJmcmFtZWJ1ZmZlclwiaW4gdD9mdW5jdGlvbih0KXt2YXIgcjtyZXR1cm4gZS5zZXRGQk8oe2ZyYW1lYnVmZmVyOnQuZnJhbWVidWZmZXJ9LGZ1bmN0aW9uKCl7cj1zKHQpfSkscn0odCk6cyh0KX19ZnVuY3Rpb24gQyh0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCl9ZnVuY3Rpb24gTCh0KXtyZXR1cm4gQyh0KS5qb2luKFwiXCIpfWZ1bmN0aW9uIHooKXtmdW5jdGlvbiB0KCl7dmFyIHQ9W10sZT1bXTtyZXR1cm4gaihmdW5jdGlvbigpe3QucHVzaC5hcHBseSh0LEMoYXJndW1lbnRzKSl9LHtkZWY6ZnVuY3Rpb24oKXt2YXIgbj1cInZcIityKys7cmV0dXJuIGUucHVzaChuKSwwPGFyZ3VtZW50cy5sZW5ndGgmJih0LnB1c2gobixcIj1cIiksdC5wdXNoLmFwcGx5KHQsQyhhcmd1bWVudHMpKSx0LnB1c2goXCI7XCIpKSxufSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBMKFswPGUubGVuZ3RoP1widmFyIFwiK2UrXCI7XCI6XCJcIixMKHQpXSl9fSl9ZnVuY3Rpb24gZSgpe2Z1bmN0aW9uIGUodCxlKXtuKHQsZSxcIj1cIixyLmRlZih0LGUpLFwiO1wiKX12YXIgcj10KCksbj10KCksaT1yLnRvU3RyaW5nLGE9bi50b1N0cmluZztyZXR1cm4gaihmdW5jdGlvbigpe3IuYXBwbHkocixDKGFyZ3VtZW50cykpfSx7ZGVmOnIuZGVmLGVudHJ5OnIsZXhpdDpuLHNhdmU6ZSxzZXQ6ZnVuY3Rpb24odCxuLGkpe2UodCxuKSxyKHQsbixcIj1cIixpLFwiO1wiKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gaSgpK2EoKX19KX12YXIgcj0wLG49W10saT1bXSxhPXQoKSxvPXt9O3JldHVybntnbG9iYWw6YSxsaW5rOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8aS5sZW5ndGg7KytlKWlmKGlbZV09PT10KXJldHVybiBuW2VdO3JldHVybiBlPVwiZ1wiK3IrKyxuLnB1c2goZSksaS5wdXNoKHQpLGV9LGJsb2NrOnQscHJvYzpmdW5jdGlvbih0LHIpe2Z1bmN0aW9uIG4oKXt2YXIgdD1cImFcIitpLmxlbmd0aDtyZXR1cm4gaS5wdXNoKHQpLHR9dmFyIGk9W107cj1yfHwwO2Zvcih2YXIgYT0wO2E8cjsrK2EpbigpO3ZhciBzPShhPWUoKSkudG9TdHJpbmc7cmV0dXJuIG9bdF09aihhLHthcmc6bix0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBMKFtcImZ1bmN0aW9uKFwiLGkuam9pbigpLFwiKXtcIixzKCksXCJ9XCJdKX19KX0sc2NvcGU6ZSxjb25kOmZ1bmN0aW9uKCl7dmFyIHQ9TChhcmd1bWVudHMpLHI9ZSgpLG49ZSgpLGk9ci50b1N0cmluZyxhPW4udG9TdHJpbmc7cmV0dXJuIGoocix7dGhlbjpmdW5jdGlvbigpe3JldHVybiByLmFwcGx5KHIsQyhhcmd1bWVudHMpKSx0aGlzfSxlbHNlOmZ1bmN0aW9uKCl7cmV0dXJuIG4uYXBwbHkobixDKGFyZ3VtZW50cykpLHRoaXN9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9YSgpO3JldHVybiBlJiYoZT1cImVsc2V7XCIrZStcIn1cIiksTChbXCJpZihcIix0LFwiKXtcIixpKCksXCJ9XCIsZV0pfX0pfSxjb21waWxlOmZ1bmN0aW9uKCl7dmFyIHQ9WydcInVzZSBzdHJpY3RcIjsnLGEsXCJyZXR1cm4ge1wiXTtPYmplY3Qua2V5cyhvKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QucHVzaCgnXCInLGUsJ1wiOicsb1tlXS50b1N0cmluZygpLFwiLFwiKX0pLHQucHVzaChcIn1cIik7dmFyIGU9TCh0KS5yZXBsYWNlKC87L2csXCI7XFxuXCIpLnJlcGxhY2UoL30vZyxcIn1cXG5cIikucmVwbGFjZSgvey9nLFwie1xcblwiKTtyZXR1cm4gRnVuY3Rpb24uYXBwbHkobnVsbCxuLmNvbmNhdChlKSkuYXBwbHkobnVsbCxpKX19fWZ1bmN0aW9uIE8odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl8fFcodCl8fGwodCl9ZnVuY3Rpb24gSSh0KXtyZXR1cm4gdC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJ2aWV3cG9ydFwiPT09dD8tMTpcInZpZXdwb3J0XCI9PT1lPzE6dDxlPy0xOjF9KX1mdW5jdGlvbiBEKHQsZSxyLG4pe3RoaXMudGhpc0RlcD10LHRoaXMuY29udGV4dERlcD1lLHRoaXMucHJvcERlcD1yLHRoaXMuYXBwZW5kPW59ZnVuY3Rpb24gUCh0KXtyZXR1cm4gdCYmISh0LnRoaXNEZXB8fHQuY29udGV4dERlcHx8dC5wcm9wRGVwKX1mdW5jdGlvbiBSKHQpe3JldHVybiBuZXcgRCghMSwhMSwhMSx0KX1mdW5jdGlvbiBGKHQsZSl7dmFyIHI9dC50eXBlO3JldHVybiAwPT09cj9uZXcgRCghMCwxPD0ocj10LmRhdGEubGVuZ3RoKSwyPD1yLGUpOjQ9PT1yP25ldyBEKChyPXQuZGF0YSkudGhpc0RlcCxyLmNvbnRleHREZXAsci5wcm9wRGVwLGUpOm5ldyBEKDM9PT1yLDI9PT1yLDE9PT1yLGUpfWZ1bmN0aW9uIEIodCxlLHIsbixpLG8scyxsLGMsdSxoLGYscCxkLGcpe2Z1bmN0aW9uIG0odCl7cmV0dXJuIHQucmVwbGFjZShcIi5cIixcIl9cIil9ZnVuY3Rpb24geSh0LGUscil7dmFyIG49bSh0KTtudC5wdXNoKHQpLGV0W25dPXR0W25dPSEhcixpdFtuXT1lfWZ1bmN0aW9uIHgodCxlLHIpe3ZhciBuPW0odCk7bnQucHVzaCh0KSxBcnJheS5pc0FycmF5KHIpPyh0dFtuXT1yLnNsaWNlKCksZXRbbl09ci5zbGljZSgpKTp0dFtuXT1ldFtuXT1yLGF0W25dPWV9ZnVuY3Rpb24gYigpe3ZhciB0PXooKSxyPXQubGluayxuPXQuZ2xvYmFsO3QuaWQ9bHQrKyx0LmJhdGNoSWQ9XCIwXCI7dmFyIGk9cihvdCksYT10LnNoYXJlZD17cHJvcHM6XCJhMFwifTtPYmplY3Qua2V5cyhvdCkuZm9yRWFjaChmdW5jdGlvbih0KXthW3RdPW4uZGVmKGksXCIuXCIsdCl9KTt2YXIgbz10Lm5leHQ9e30scz10LmN1cnJlbnQ9e307T2JqZWN0LmtleXMoYXQpLmZvckVhY2goZnVuY3Rpb24odCl7QXJyYXkuaXNBcnJheSh0dFt0XSkmJihvW3RdPW4uZGVmKGEubmV4dCxcIi5cIix0KSxzW3RdPW4uZGVmKGEuY3VycmVudCxcIi5cIix0KSl9KTt2YXIgbD10LmNvbnN0YW50cz17fTtPYmplY3Qua2V5cyhzdCkuZm9yRWFjaChmdW5jdGlvbih0KXtsW3RdPW4uZGVmKEpTT04uc3RyaW5naWZ5KHN0W3RdKSl9KSx0Lmludm9rZT1mdW5jdGlvbihlLG4pe3N3aXRjaChuLnR5cGUpe2Nhc2UgMDp2YXIgaT1bXCJ0aGlzXCIsYS5jb250ZXh0LGEucHJvcHMsdC5iYXRjaElkXTtyZXR1cm4gZS5kZWYocihuLmRhdGEpLFwiLmNhbGwoXCIsaS5zbGljZSgwLE1hdGgubWF4KG4uZGF0YS5sZW5ndGgrMSw0KSksXCIpXCIpO2Nhc2UgMTpyZXR1cm4gZS5kZWYoYS5wcm9wcyxuLmRhdGEpO2Nhc2UgMjpyZXR1cm4gZS5kZWYoYS5jb250ZXh0LG4uZGF0YSk7Y2FzZSAzOnJldHVybiBlLmRlZihcInRoaXNcIixuLmRhdGEpO2Nhc2UgNDpyZXR1cm4gbi5kYXRhLmFwcGVuZCh0LGUpLG4uZGF0YS5yZWZ9fSx0LmF0dHJpYkNhY2hlPXt9O3ZhciBjPXt9O3JldHVybiB0LnNjb3BlQXR0cmliPWZ1bmN0aW9uKHQpe2lmKCh0PWUuaWQodCkpaW4gYylyZXR1cm4gY1t0XTt2YXIgbj11LnNjb3BlW3RdO3JldHVybiBufHwobj11LnNjb3BlW3RdPW5ldyBaKSxjW3RdPXIobil9LHR9ZnVuY3Rpb24gXyh0LGUpe3ZhciByPXQuc3RhdGljLG49dC5keW5hbWljO2lmKFwiZnJhbWVidWZmZXJcImluIHIpe3ZhciBpPXIuZnJhbWVidWZmZXI7cmV0dXJuIGk/KGk9bC5nZXRGcmFtZWJ1ZmZlcihpKSxSKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5saW5rKGkpLG49dC5zaGFyZWQ7cmV0dXJuIGUuc2V0KG4uZnJhbWVidWZmZXIsXCIubmV4dFwiLHIpLG49bi5jb250ZXh0LGUuc2V0KG4sXCIuZnJhbWVidWZmZXJXaWR0aFwiLHIrXCIud2lkdGhcIiksZS5zZXQobixcIi5mcmFtZWJ1ZmZlckhlaWdodFwiLHIrXCIuaGVpZ2h0XCIpLHJ9KSk6UihmdW5jdGlvbih0LGUpe3ZhciByPXQuc2hhcmVkO3JldHVybiBlLnNldChyLmZyYW1lYnVmZmVyLFwiLm5leHRcIixcIm51bGxcIikscj1yLmNvbnRleHQsZS5zZXQocixcIi5mcmFtZWJ1ZmZlcldpZHRoXCIscitcIi5kcmF3aW5nQnVmZmVyV2lkdGhcIiksZS5zZXQocixcIi5mcmFtZWJ1ZmZlckhlaWdodFwiLHIrXCIuZHJhd2luZ0J1ZmZlckhlaWdodFwiKSxcIm51bGxcIn0pfWlmKFwiZnJhbWVidWZmZXJcImluIG4pe3ZhciBhPW4uZnJhbWVidWZmZXI7cmV0dXJuIEYoYSxmdW5jdGlvbih0LGUpe3ZhciByPXQuaW52b2tlKGUsYSksbj10LnNoYXJlZCxpPW4uZnJhbWVidWZmZXI7cj1lLmRlZihpLFwiLmdldEZyYW1lYnVmZmVyKFwiLHIsXCIpXCIpO3JldHVybiBlLnNldChpLFwiLm5leHRcIixyKSxuPW4uY29udGV4dCxlLnNldChuLFwiLmZyYW1lYnVmZmVyV2lkdGhcIixyK1wiP1wiK3IrXCIud2lkdGg6XCIrbitcIi5kcmF3aW5nQnVmZmVyV2lkdGhcIiksZS5zZXQobixcIi5mcmFtZWJ1ZmZlckhlaWdodFwiLHIrXCI/XCIrcitcIi5oZWlnaHQ6XCIrbitcIi5kcmF3aW5nQnVmZmVySGVpZ2h0XCIpLHJ9KX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB3KHQpe2Z1bmN0aW9uIHIodCl7aWYodCBpbiBuKXt2YXIgcj1lLmlkKG5bdF0pO3JldHVybih0PVIoZnVuY3Rpb24oKXtyZXR1cm4gcn0pKS5pZD1yLHR9aWYodCBpbiBpKXt2YXIgYT1pW3RdO3JldHVybiBGKGEsZnVuY3Rpb24odCxlKXt2YXIgcj10Lmludm9rZShlLGEpO3JldHVybiBlLmRlZih0LnNoYXJlZC5zdHJpbmdzLFwiLmlkKFwiLHIsXCIpXCIpfSl9cmV0dXJuIG51bGx9dmFyIG49dC5zdGF0aWMsaT10LmR5bmFtaWMsYT1yKFwiZnJhZ1wiKSxvPXIoXCJ2ZXJ0XCIpLHM9bnVsbDtyZXR1cm4gUChhKSYmUChvKT8ocz1oLnByb2dyYW0oby5pZCxhLmlkKSx0PVIoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5saW5rKHMpfSkpOnQ9bmV3IEQoYSYmYS50aGlzRGVwfHxvJiZvLnRoaXNEZXAsYSYmYS5jb250ZXh0RGVwfHxvJiZvLmNvbnRleHREZXAsYSYmYS5wcm9wRGVwfHxvJiZvLnByb3BEZXAsZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dC5zaGFyZWQuc2hhZGVyO3JldHVybiByPWE/YS5hcHBlbmQodCxlKTplLmRlZihpLFwiLlwiLFwiZnJhZ1wiKSxuPW8/by5hcHBlbmQodCxlKTplLmRlZihpLFwiLlwiLFwidmVydFwiKSxlLmRlZihpK1wiLnByb2dyYW0oXCIrbitcIixcIityK1wiKVwiKX0pLHtmcmFnOmEsdmVydDpvLHByb2dWYXI6dCxwcm9ncmFtOnN9fWZ1bmN0aW9uIGsodCxlKXtmdW5jdGlvbiByKHQsZSl7aWYodCBpbiBuKXt2YXIgcj0wfG5bdF07cmV0dXJuIFIoZnVuY3Rpb24odCxuKXtyZXR1cm4gZSYmKHQuT0ZGU0VUPXIpLHJ9KX1pZih0IGluIGkpe3ZhciBvPWlbdF07cmV0dXJuIEYobyxmdW5jdGlvbih0LHIpe3ZhciBuPXQuaW52b2tlKHIsbyk7cmV0dXJuIGUmJih0Lk9GRlNFVD1uKSxufSl9cmV0dXJuIGUmJmE/UihmdW5jdGlvbih0LGUpe3JldHVybiB0Lk9GRlNFVD1cIjBcIiwwfSk6bnVsbH12YXIgbj10LnN0YXRpYyxpPXQuZHluYW1pYyxhPWZ1bmN0aW9uKCl7aWYoXCJlbGVtZW50c1wiaW4gbil7dmFyIHQ9bi5lbGVtZW50cztPKHQpP3Q9by5nZXRFbGVtZW50cyhvLmNyZWF0ZSh0LCEwKSk6dCYmKHQ9by5nZXRFbGVtZW50cyh0KSk7dmFyIGU9UihmdW5jdGlvbihlLHIpe2lmKHQpe3ZhciBuPWUubGluayh0KTtyZXR1cm4gZS5FTEVNRU5UUz1ufXJldHVybiBlLkVMRU1FTlRTPW51bGx9KTtyZXR1cm4gZS52YWx1ZT10LGV9aWYoXCJlbGVtZW50c1wiaW4gaSl7dmFyIHI9aS5lbGVtZW50cztyZXR1cm4gRihyLGZ1bmN0aW9uKHQsZSl7dmFyIG49KGk9dC5zaGFyZWQpLmlzQnVmZmVyQXJncyxpPWkuZWxlbWVudHMsYT10Lmludm9rZShlLHIpLG89ZS5kZWYoXCJudWxsXCIpO249ZS5kZWYobixcIihcIixhLFwiKVwiKSxhPXQuY29uZChuKS50aGVuKG8sXCI9XCIsaSxcIi5jcmVhdGVTdHJlYW0oXCIsYSxcIik7XCIpLmVsc2UobyxcIj1cIixpLFwiLmdldEVsZW1lbnRzKFwiLGEsXCIpO1wiKTtyZXR1cm4gZS5lbnRyeShhKSxlLmV4aXQodC5jb25kKG4pLnRoZW4oaSxcIi5kZXN0cm95U3RyZWFtKFwiLG8sXCIpO1wiKSksdC5FTEVNRU5UUz1vfSl9cmV0dXJuIG51bGx9KCkscz1yKFwib2Zmc2V0XCIsITApO3JldHVybntlbGVtZW50czphLHByaW1pdGl2ZTpmdW5jdGlvbigpe2lmKFwicHJpbWl0aXZlXCJpbiBuKXt2YXIgdD1uLnByaW1pdGl2ZTtyZXR1cm4gUihmdW5jdGlvbihlLHIpe3JldHVybiBydFt0XX0pfWlmKFwicHJpbWl0aXZlXCJpbiBpKXt2YXIgZT1pLnByaW1pdGl2ZTtyZXR1cm4gRihlLGZ1bmN0aW9uKHQscil7dmFyIG49dC5jb25zdGFudHMucHJpbVR5cGVzLGk9dC5pbnZva2UocixlKTtyZXR1cm4gci5kZWYobixcIltcIixpLFwiXVwiKX0pfXJldHVybiBhP1AoYSk/YS52YWx1ZT9SKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGVmKHQuRUxFTUVOVFMsXCIucHJpbVR5cGVcIil9KTpSKGZ1bmN0aW9uKCl7cmV0dXJuIDR9KTpuZXcgRChhLnRoaXNEZXAsYS5jb250ZXh0RGVwLGEucHJvcERlcCxmdW5jdGlvbih0LGUpe3ZhciByPXQuRUxFTUVOVFM7cmV0dXJuIGUuZGVmKHIsXCI/XCIscixcIi5wcmltVHlwZTpcIiw0KX0pOm51bGx9KCksY291bnQ6ZnVuY3Rpb24oKXtpZihcImNvdW50XCJpbiBuKXt2YXIgdD0wfG4uY291bnQ7cmV0dXJuIFIoZnVuY3Rpb24oKXtyZXR1cm4gdH0pfWlmKFwiY291bnRcImluIGkpe3ZhciBlPWkuY291bnQ7cmV0dXJuIEYoZSxmdW5jdGlvbih0LHIpe3JldHVybiB0Lmludm9rZShyLGUpfSl9cmV0dXJuIGE/UChhKT9hP3M/bmV3IEQocy50aGlzRGVwLHMuY29udGV4dERlcCxzLnByb3BEZXAsZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZWYodC5FTEVNRU5UUyxcIi52ZXJ0Q291bnQtXCIsdC5PRkZTRVQpfSk6UihmdW5jdGlvbih0LGUpe3JldHVybiBlLmRlZih0LkVMRU1FTlRTLFwiLnZlcnRDb3VudFwiKX0pOlIoZnVuY3Rpb24oKXtyZXR1cm4tMX0pOm5ldyBEKGEudGhpc0RlcHx8cy50aGlzRGVwLGEuY29udGV4dERlcHx8cy5jb250ZXh0RGVwLGEucHJvcERlcHx8cy5wcm9wRGVwLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5FTEVNRU5UUztyZXR1cm4gdC5PRkZTRVQ/ZS5kZWYocixcIj9cIixyLFwiLnZlcnRDb3VudC1cIix0Lk9GRlNFVCxcIjotMVwiKTplLmRlZihyLFwiP1wiLHIsXCIudmVydENvdW50Oi0xXCIpfSk6bnVsbH0oKSxpbnN0YW5jZXM6cihcImluc3RhbmNlc1wiLCExKSxvZmZzZXQ6c319ZnVuY3Rpb24gQSh0LHIpe3ZhciBuPXQuc3RhdGljLGE9dC5keW5hbWljLG89e307cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHI9blt0XSxhPWUuaWQodCkscz1uZXcgWjtpZihPKHIpKXMuc3RhdGU9MSxzLmJ1ZmZlcj1pLmdldEJ1ZmZlcihpLmNyZWF0ZShyLDM0OTYyLCExLCEwKSkscy50eXBlPTA7ZWxzZSBpZihjPWkuZ2V0QnVmZmVyKHIpKXMuc3RhdGU9MSxzLmJ1ZmZlcj1jLHMudHlwZT0wO2Vsc2UgaWYoXCJjb25zdGFudFwiaW4gcil7dmFyIGw9ci5jb25zdGFudDtzLmJ1ZmZlcj1cIm51bGxcIixzLnN0YXRlPTIsXCJudW1iZXJcIj09dHlwZW9mIGw/cy54PWw6YnQuZm9yRWFjaChmdW5jdGlvbih0LGUpe2U8bC5sZW5ndGgmJihzW3RdPWxbZV0pfSl9ZWxzZXt2YXIgYz1PKHIuYnVmZmVyKT9pLmdldEJ1ZmZlcihpLmNyZWF0ZShyLmJ1ZmZlciwzNDk2MiwhMSwhMCkpOmkuZ2V0QnVmZmVyKHIuYnVmZmVyKSx1PTB8ci5vZmZzZXQsaD0wfHIuc3RyaWRlLGY9MHxyLnNpemUscD0hIXIubm9ybWFsaXplZCxkPTA7XCJ0eXBlXCJpbiByJiYoZD1KW3IudHlwZV0pLHI9MHxyLmRpdmlzb3Iscy5idWZmZXI9YyxzLnN0YXRlPTEscy5zaXplPWYscy5ub3JtYWxpemVkPXAscy50eXBlPWR8fGMuZHR5cGUscy5vZmZzZXQ9dSxzLnN0cmlkZT1oLHMuZGl2aXNvcj1yfW9bdF09UihmdW5jdGlvbih0LGUpe3ZhciByPXQuYXR0cmliQ2FjaGU7aWYoYSBpbiByKXJldHVybiByW2FdO3ZhciBuPXtpc1N0cmVhbTohMX07cmV0dXJuIE9iamVjdC5rZXlzKHMpLmZvckVhY2goZnVuY3Rpb24odCl7blt0XT1zW3RdfSkscy5idWZmZXImJihuLmJ1ZmZlcj10Lmxpbmsocy5idWZmZXIpLG4udHlwZT1uLnR5cGV8fG4uYnVmZmVyK1wiLmR0eXBlXCIpLHJbYV09bn0pfSksT2JqZWN0LmtleXMoYSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1hW3RdO29bdF09RihlLGZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbih0KXtyKGxbdF0sXCI9XCIsaSxcIi5cIix0LFwifDA7XCIpfXZhciBpPXQuaW52b2tlKHIsZSksYT10LnNoYXJlZCxvPWEuaXNCdWZmZXJBcmdzLHM9YS5idWZmZXIsbD17aXNTdHJlYW06ci5kZWYoITEpfSxjPW5ldyBaO2Muc3RhdGU9MSxPYmplY3Qua2V5cyhjKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2xbdF09ci5kZWYoXCJcIitjW3RdKX0pO3ZhciB1PWwuYnVmZmVyLGg9bC50eXBlO3JldHVybiByKFwiaWYoXCIsbyxcIihcIixpLFwiKSl7XCIsbC5pc1N0cmVhbSxcIj10cnVlO1wiLHUsXCI9XCIscyxcIi5jcmVhdGVTdHJlYW0oXCIsMzQ5NjIsXCIsXCIsaSxcIik7XCIsaCxcIj1cIix1LFwiLmR0eXBlO1wiLFwifWVsc2V7XCIsdSxcIj1cIixzLFwiLmdldEJ1ZmZlcihcIixpLFwiKTtcIixcImlmKFwiLHUsXCIpe1wiLGgsXCI9XCIsdSxcIi5kdHlwZTtcIiwnfWVsc2UgaWYoXCJjb25zdGFudFwiIGluICcsaSxcIil7XCIsbC5zdGF0ZSxcIj1cIiwyLFwiO1wiLFwiaWYodHlwZW9mIFwiK2krJy5jb25zdGFudCA9PT0gXCJudW1iZXJcIil7JyxsW2J0WzBdXSxcIj1cIixpLFwiLmNvbnN0YW50O1wiLGJ0LnNsaWNlKDEpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbFt0XX0pLmpvaW4oXCI9XCIpLFwiPTA7XCIsXCJ9ZWxzZXtcIixidC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gbFt0XStcIj1cIitpK1wiLmNvbnN0YW50Lmxlbmd0aD5cIitlK1wiP1wiK2krXCIuY29uc3RhbnRbXCIrZStcIl06MDtcIn0pLmpvaW4oXCJcIiksXCJ9fWVsc2V7XCIsXCJpZihcIixvLFwiKFwiLGksXCIuYnVmZmVyKSl7XCIsdSxcIj1cIixzLFwiLmNyZWF0ZVN0cmVhbShcIiwzNDk2MixcIixcIixpLFwiLmJ1ZmZlcik7XCIsXCJ9ZWxzZXtcIix1LFwiPVwiLHMsXCIuZ2V0QnVmZmVyKFwiLGksXCIuYnVmZmVyKTtcIixcIn1cIixoLCc9XCJ0eXBlXCIgaW4gJyxpLFwiP1wiLGEuZ2xUeXBlcyxcIltcIixpLFwiLnR5cGVdOlwiLHUsXCIuZHR5cGU7XCIsbC5ub3JtYWxpemVkLFwiPSEhXCIsaSxcIi5ub3JtYWxpemVkO1wiKSxuKFwic2l6ZVwiKSxuKFwib2Zmc2V0XCIpLG4oXCJzdHJpZGVcIiksbihcImRpdmlzb3JcIikscihcIn19XCIpLHIuZXhpdChcImlmKFwiLGwuaXNTdHJlYW0sXCIpe1wiLHMsXCIuZGVzdHJveVN0cmVhbShcIix1LFwiKTtcIixcIn1cIiksbH0pfSksb31mdW5jdGlvbiBUKHQsZSxyLG4saSl7dmFyIG89Xyh0KSxzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe2lmKHQgaW4gaSl7dmFyIHI9aVt0XTt0PSEwO3ZhciBuLG8scz0wfHIueCxsPTB8ci55O3JldHVyblwid2lkdGhcImluIHI/bj0wfHIud2lkdGg6dD0hMSxcImhlaWdodFwiaW4gcj9vPTB8ci5oZWlnaHQ6dD0hMSxuZXcgRCghdCYmZSYmZS50aGlzRGVwLCF0JiZlJiZlLmNvbnRleHREZXAsIXQmJmUmJmUucHJvcERlcCxmdW5jdGlvbih0LGUpe3ZhciBpPXQuc2hhcmVkLmNvbnRleHQsYT1uO1wid2lkdGhcImluIHJ8fChhPWUuZGVmKGksXCIuXCIsXCJmcmFtZWJ1ZmZlcldpZHRoXCIsXCItXCIscykpO3ZhciBjPW87cmV0dXJuXCJoZWlnaHRcImluIHJ8fChjPWUuZGVmKGksXCIuXCIsXCJmcmFtZWJ1ZmZlckhlaWdodFwiLFwiLVwiLGwpKSxbcyxsLGEsY119KX1pZih0IGluIGEpe3ZhciBjPWFbdF07cmV0dXJuIHQ9RihjLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pbnZva2UoZSxjKSxuPXQuc2hhcmVkLmNvbnRleHQsaT1lLmRlZihyLFwiLnh8MFwiKSxhPWUuZGVmKHIsXCIueXwwXCIpO3JldHVybltpLGEsZS5kZWYoJ1wid2lkdGhcIiBpbiAnLHIsXCI/XCIscixcIi53aWR0aHwwOlwiLFwiKFwiLG4sXCIuXCIsXCJmcmFtZWJ1ZmZlcldpZHRoXCIsXCItXCIsaSxcIilcIikscj1lLmRlZignXCJoZWlnaHRcIiBpbiAnLHIsXCI/XCIscixcIi5oZWlnaHR8MDpcIixcIihcIixuLFwiLlwiLFwiZnJhbWVidWZmZXJIZWlnaHRcIixcIi1cIixhLFwiKVwiKV19KSxlJiYodC50aGlzRGVwPXQudGhpc0RlcHx8ZS50aGlzRGVwLHQuY29udGV4dERlcD10LmNvbnRleHREZXB8fGUuY29udGV4dERlcCx0LnByb3BEZXA9dC5wcm9wRGVwfHxlLnByb3BEZXApLHR9cmV0dXJuIGU/bmV3IEQoZS50aGlzRGVwLGUuY29udGV4dERlcCxlLnByb3BEZXAsZnVuY3Rpb24odCxlKXt2YXIgcj10LnNoYXJlZC5jb250ZXh0O3JldHVyblswLDAsZS5kZWYocixcIi5cIixcImZyYW1lYnVmZmVyV2lkdGhcIiksZS5kZWYocixcIi5cIixcImZyYW1lYnVmZmVySGVpZ2h0XCIpXX0pOm51bGx9dmFyIGk9dC5zdGF0aWMsYT10LmR5bmFtaWM7aWYodD1uKFwidmlld3BvcnRcIikpe3ZhciBvPXQ7dD1uZXcgRCh0LnRoaXNEZXAsdC5jb250ZXh0RGVwLHQucHJvcERlcCxmdW5jdGlvbih0LGUpe3ZhciByPW8uYXBwZW5kKHQsZSksbj10LnNoYXJlZC5jb250ZXh0O3JldHVybiBlLnNldChuLFwiLnZpZXdwb3J0V2lkdGhcIixyWzJdKSxlLnNldChuLFwiLnZpZXdwb3J0SGVpZ2h0XCIsclszXSkscn0pfXJldHVybnt2aWV3cG9ydDp0LHNjaXNzb3JfYm94Om4oXCJzY2lzc29yLmJveFwiKX19KHQsbyksbD1rKHQpLGM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnN0YXRpYyxuPXQuZHluYW1pYyxpPXt9O3JldHVybiBudC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxhKXtpZih0IGluIHIpe3ZhciBzPWUoclt0XSk7aVtvXT1SKGZ1bmN0aW9uKCl7cmV0dXJuIHN9KX1lbHNlIGlmKHQgaW4gbil7dmFyIGw9blt0XTtpW29dPUYobCxmdW5jdGlvbih0LGUpe3JldHVybiBhKHQsZSx0Lmludm9rZShlLGwpKX0pfX12YXIgbz1tKHQpO3N3aXRjaCh0KXtjYXNlXCJjdWxsLmVuYWJsZVwiOmNhc2VcImJsZW5kLmVuYWJsZVwiOmNhc2VcImRpdGhlclwiOmNhc2VcInN0ZW5jaWwuZW5hYmxlXCI6Y2FzZVwiZGVwdGguZW5hYmxlXCI6Y2FzZVwic2Npc3Nvci5lbmFibGVcIjpjYXNlXCJwb2x5Z29uT2Zmc2V0LmVuYWJsZVwiOmNhc2VcInNhbXBsZS5hbHBoYVwiOmNhc2VcInNhbXBsZS5lbmFibGVcIjpjYXNlXCJkZXB0aC5tYXNrXCI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuIHR9LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gcn0pO2Nhc2VcImRlcHRoLmZ1bmNcIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm4ga3RbdF19LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5kZWYodC5jb25zdGFudHMuY29tcGFyZUZ1bmNzLFwiW1wiLHIsXCJdXCIpfSk7Y2FzZVwiZGVwdGgucmFuZ2VcIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm4gdH0sZnVuY3Rpb24odCxlLHIpe3JldHVybltlLmRlZihcIitcIixyLFwiWzBdXCIpLGU9ZS5kZWYoXCIrXCIscixcIlsxXVwiKV19KTtjYXNlXCJibGVuZC5mdW5jXCI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuW3d0W1wic3JjUkdCXCJpbiB0P3Quc3JjUkdCOnQuc3JjXSx3dFtcImRzdFJHQlwiaW4gdD90LmRzdFJHQjp0LmRzdF0sd3RbXCJzcmNBbHBoYVwiaW4gdD90LnNyY0FscGhhOnQuc3JjXSx3dFtcImRzdEFscGhhXCJpbiB0P3QuZHN0QWxwaGE6dC5kc3RdXX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxuKXtyZXR1cm4gZS5kZWYoJ1wiJyx0LG4sJ1wiIGluICcscixcIj9cIixyLFwiLlwiLHQsbixcIjpcIixyLFwiLlwiLHQpfXQ9dC5jb25zdGFudHMuYmxlbmRGdW5jczt2YXIgaT1uKFwic3JjXCIsXCJSR0JcIiksYT1uKFwiZHN0XCIsXCJSR0JcIiksbz0oaT1lLmRlZih0LFwiW1wiLGksXCJdXCIpLGUuZGVmKHQsXCJbXCIsbihcInNyY1wiLFwiQWxwaGFcIiksXCJdXCIpKTtyZXR1cm5baSxhPWUuZGVmKHQsXCJbXCIsYSxcIl1cIiksbyx0PWUuZGVmKHQsXCJbXCIsbihcImRzdFwiLFwiQWxwaGFcIiksXCJdXCIpXX0pO2Nhc2VcImJsZW5kLmVxdWF0aW9uXCI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQ/WyRbdF0sJFt0XV06XCJvYmplY3RcIj09dHlwZW9mIHQ/WyRbdC5yZ2JdLCRbdC5hbHBoYV1dOnZvaWQgMH0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuY29uc3RhbnRzLmJsZW5kRXF1YXRpb25zLGk9ZS5kZWYoKSxhPWUuZGVmKCk7cmV0dXJuKHQ9dC5jb25kKFwidHlwZW9mIFwiLHIsJz09PVwic3RyaW5nXCInKSkudGhlbihpLFwiPVwiLGEsXCI9XCIsbixcIltcIixyLFwiXTtcIiksdC5lbHNlKGksXCI9XCIsbixcIltcIixyLFwiLnJnYl07XCIsYSxcIj1cIixuLFwiW1wiLHIsXCIuYWxwaGFdO1wiKSxlKHQpLFtpLGFdfSk7Y2FzZVwiYmxlbmQuY29sb3JcIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm4gYSg0LGZ1bmN0aW9uKGUpe3JldHVybit0W2VdfSl9LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gYSg0LGZ1bmN0aW9uKHQpe3JldHVybiBlLmRlZihcIitcIixyLFwiW1wiLHQsXCJdXCIpfSl9KTtjYXNlXCJzdGVuY2lsLm1hc2tcIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm4gMHx0fSxmdW5jdGlvbih0LGUscil7cmV0dXJuIGUuZGVmKHIsXCJ8MFwiKX0pO2Nhc2VcInN0ZW5jaWwuZnVuY1wiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVybltrdFt0LmNtcHx8XCJrZWVwXCJdLHQucmVmfHwwLFwibWFza1wiaW4gdD90Lm1hc2s6LTFdfSxmdW5jdGlvbih0LGUscil7cmV0dXJuW3Q9ZS5kZWYoJ1wiY21wXCIgaW4gJyxyLFwiP1wiLHQuY29uc3RhbnRzLmNvbXBhcmVGdW5jcyxcIltcIixyLFwiLmNtcF1cIixcIjpcIiw3NjgwKSxlLmRlZihyLFwiLnJlZnwwXCIpLGU9ZS5kZWYoJ1wibWFza1wiIGluICcscixcIj9cIixyLFwiLm1hc2t8MDotMVwiKV19KTtjYXNlXCJzdGVuY2lsLm9wRnJvbnRcIjpjYXNlXCJzdGVuY2lsLm9wQmFja1wiOnJldHVybiBlKGZ1bmN0aW9uKGUpe3JldHVybltcInN0ZW5jaWwub3BCYWNrXCI9PT10PzEwMjk6MTAyOCxBdFtlLmZhaWx8fFwia2VlcFwiXSxBdFtlLnpmYWlsfHxcImtlZXBcIl0sQXRbZS56cGFzc3x8XCJrZWVwXCJdXX0sZnVuY3Rpb24oZSxyLG4pe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHIuZGVmKCdcIicsdCwnXCIgaW4gJyxuLFwiP1wiLGEsXCJbXCIsbixcIi5cIix0LFwiXTpcIiw3NjgwKX12YXIgYT1lLmNvbnN0YW50cy5zdGVuY2lsT3BzO3JldHVybltcInN0ZW5jaWwub3BCYWNrXCI9PT10PzEwMjk6MTAyOCxpKFwiZmFpbFwiKSxpKFwiemZhaWxcIiksaShcInpwYXNzXCIpXX0pO2Nhc2VcInBvbHlnb25PZmZzZXQub2Zmc2V0XCI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuWzB8dC5mYWN0b3IsMHx0LnVuaXRzXX0sZnVuY3Rpb24odCxlLHIpe3JldHVybltlLmRlZihyLFwiLmZhY3RvcnwwXCIpLGU9ZS5kZWYocixcIi51bml0c3wwXCIpXX0pO2Nhc2VcImN1bGwuZmFjZVwiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3ZhciBlPTA7cmV0dXJuXCJmcm9udFwiPT09dD9lPTEwMjg6XCJiYWNrXCI9PT10JiYoZT0xMDI5KSxlfSxmdW5jdGlvbih0LGUscil7cmV0dXJuIGUuZGVmKHIsJz09PVwiZnJvbnRcIj8nLDEwMjgsXCI6XCIsMTAyOSl9KTtjYXNlXCJsaW5lV2lkdGhcIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm4gdH0sZnVuY3Rpb24odCxlLHIpe3JldHVybiByfSk7Y2FzZVwiZnJvbnRGYWNlXCI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuIFR0W3RdfSxmdW5jdGlvbih0LGUscil7cmV0dXJuIGUuZGVmKHIrJz09PVwiY3dcIj8yMzA0OjIzMDUnKX0pO2Nhc2VcImNvbG9yTWFza1wiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4hIXR9KX0sZnVuY3Rpb24odCxlLHIpe3JldHVybiBhKDQsZnVuY3Rpb24odCl7cmV0dXJuXCIhIVwiK3IrXCJbXCIrdCtcIl1cIn0pfSk7Y2FzZVwic2FtcGxlLmNvdmVyYWdlXCI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuW1widmFsdWVcImluIHQ/dC52YWx1ZToxLCEhdC5pbnZlcnRdfSxmdW5jdGlvbih0LGUscil7cmV0dXJuW2UuZGVmKCdcInZhbHVlXCIgaW4gJyxyLFwiPytcIixyLFwiLnZhbHVlOjFcIiksZT1lLmRlZihcIiEhXCIscixcIi5pbnZlcnRcIildfSl9fSksaX0odCksdT13KHQpLGg9cy52aWV3cG9ydDtyZXR1cm4gaCYmKGMudmlld3BvcnQ9aCksKHM9c1toPW0oXCJzY2lzc29yLmJveFwiKV0pJiYoY1toXT1zKSwobz17ZnJhbWVidWZmZXI6byxkcmF3Omwsc2hhZGVyOnUsc3RhdGU6YyxkaXJ0eTpzPTA8T2JqZWN0LmtleXMoYykubGVuZ3RofSkucHJvZmlsZT1mdW5jdGlvbih0KXt2YXIgZSxyPXQuc3RhdGljO2lmKHQ9dC5keW5hbWljLFwicHJvZmlsZVwiaW4gcil7dmFyIG49ISFyLnByb2ZpbGU7KGU9UihmdW5jdGlvbih0LGUpe3JldHVybiBufSkpLmVuYWJsZT1ufWVsc2UgaWYoXCJwcm9maWxlXCJpbiB0KXt2YXIgaT10LnByb2ZpbGU7ZT1GKGksZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbnZva2UoZSxpKX0pfXJldHVybiBlfSh0KSxvLnVuaWZvcm1zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGF0aWMsbj10LmR5bmFtaWMsaT17fTtyZXR1cm4gT2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZSxuPXJbdF07aWYoXCJudW1iZXJcIj09dHlwZW9mIG58fFwiYm9vbGVhblwiPT10eXBlb2YgbillPVIoZnVuY3Rpb24oKXtyZXR1cm4gbn0pO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygbil7dmFyIG89bi5fcmVnbFR5cGU7XCJ0ZXh0dXJlMmRcIj09PW98fFwidGV4dHVyZUN1YmVcIj09PW8/ZT1SKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxpbmsobil9KTpcImZyYW1lYnVmZmVyXCIhPT1vJiZcImZyYW1lYnVmZmVyQ3ViZVwiIT09b3x8KGU9UihmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5rKG4uY29sb3JbMF0pfSkpfWVsc2UgdihuKSYmKGU9UihmdW5jdGlvbih0KXtyZXR1cm4gdC5nbG9iYWwuZGVmKFwiW1wiLGEobi5sZW5ndGgsZnVuY3Rpb24odCl7cmV0dXJuIG5bdF19KSxcIl1cIil9KSk7ZS52YWx1ZT1uLGlbdF09ZX0pLE9iamVjdC5rZXlzKG4pLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9blt0XTtpW3RdPUYoZSxmdW5jdGlvbih0LHIpe3JldHVybiB0Lmludm9rZShyLGUpfSl9KSxpfShyKSxvLmF0dHJpYnV0ZXM9QShlKSxvLmNvbnRleHQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5zdGF0aWMscj10LmR5bmFtaWMsbj17fTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcj1lW3RdO25bdF09UihmdW5jdGlvbih0LGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiByfHxcImJvb2xlYW5cIj09dHlwZW9mIHI/XCJcIityOnQubGluayhyKX0pfSksT2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1yW3RdO25bdF09RihlLGZ1bmN0aW9uKHQscil7cmV0dXJuIHQuaW52b2tlKHIsZSl9KX0pLG59KG4pLG99ZnVuY3Rpb24gTSh0LGUscil7dmFyIG49dC5zaGFyZWQuY29udGV4dCxpPXQuc2NvcGUoKTtPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Uuc2F2ZShuLFwiLlwiK2EpLGkobixcIi5cIixhLFwiPVwiLHJbYV0uYXBwZW5kKHQsZSksXCI7XCIpfSksZShpKX1mdW5jdGlvbiBTKHQsZSxyLG4pe3ZhciBpLGE9KHM9dC5zaGFyZWQpLmdsLG89cy5mcmFtZWJ1ZmZlcjtRJiYoaT1lLmRlZihzLmV4dGVuc2lvbnMsXCIud2ViZ2xfZHJhd19idWZmZXJzXCIpKTt2YXIgcz0obD10LmNvbnN0YW50cykuZHJhd0J1ZmZlcixsPWwuYmFja0J1ZmZlcjt0PXI/ci5hcHBlbmQodCxlKTplLmRlZihvLFwiLm5leHRcIiksbnx8ZShcImlmKFwiLHQsXCIhPT1cIixvLFwiLmN1cil7XCIpLGUoXCJpZihcIix0LFwiKXtcIixhLFwiLmJpbmRGcmFtZWJ1ZmZlcihcIiwzNjE2MCxcIixcIix0LFwiLmZyYW1lYnVmZmVyKTtcIiksUSYmZShpLFwiLmRyYXdCdWZmZXJzV0VCR0woXCIscyxcIltcIix0LFwiLmNvbG9yQXR0YWNobWVudHMubGVuZ3RoXSk7XCIpLGUoXCJ9ZWxzZXtcIixhLFwiLmJpbmRGcmFtZWJ1ZmZlcihcIiwzNjE2MCxcIixudWxsKTtcIiksUSYmZShpLFwiLmRyYXdCdWZmZXJzV0VCR0woXCIsbCxcIik7XCIpLGUoXCJ9XCIsbyxcIi5jdXI9XCIsdCxcIjtcIiksbnx8ZShcIn1cIil9ZnVuY3Rpb24gRSh0LGUscil7dmFyIG49dC5zaGFyZWQsaT1uLmdsLG89dC5jdXJyZW50LHM9dC5uZXh0LGw9bi5jdXJyZW50LGM9bi5uZXh0LHU9dC5jb25kKGwsXCIuZGlydHlcIik7bnQuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbixoO2lmKCEoKGU9bShlKSlpbiByLnN0YXRlKSlpZihlIGluIHMpe249c1tlXSxoPW9bZV07dmFyIGY9YSh0dFtlXS5sZW5ndGgsZnVuY3Rpb24odCl7cmV0dXJuIHUuZGVmKG4sXCJbXCIsdCxcIl1cIil9KTt1KHQuY29uZChmLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0K1wiIT09XCIraCtcIltcIitlK1wiXVwifSkuam9pbihcInx8XCIpKS50aGVuKGksXCIuXCIsYXRbZV0sXCIoXCIsZixcIik7XCIsZi5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gaCtcIltcIitlK1wiXT1cIit0fSkuam9pbihcIjtcIiksXCI7XCIpKX1lbHNlIG49dS5kZWYoYyxcIi5cIixlKSxmPXQuY29uZChuLFwiIT09XCIsbCxcIi5cIixlKSx1KGYpLGUgaW4gaXQ/Zih0LmNvbmQobikudGhlbihpLFwiLmVuYWJsZShcIixpdFtlXSxcIik7XCIpLmVsc2UoaSxcIi5kaXNhYmxlKFwiLGl0W2VdLFwiKTtcIiksbCxcIi5cIixlLFwiPVwiLG4sXCI7XCIpOmYoaSxcIi5cIixhdFtlXSxcIihcIixuLFwiKTtcIixsLFwiLlwiLGUsXCI9XCIsbixcIjtcIil9KSwwPT09T2JqZWN0LmtleXMoci5zdGF0ZSkubGVuZ3RoJiZ1KGwsXCIuZGlydHk9ZmFsc2U7XCIpLGUodSl9ZnVuY3Rpb24gQyh0LGUscixuKXt2YXIgaT10LnNoYXJlZCxhPXQuY3VycmVudCxvPWkuY3VycmVudCxzPWkuZ2w7SShPYmplY3Qua2V5cyhyKSkuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgbD1yW2ldO2lmKCFufHxuKGwpKXt2YXIgYz1sLmFwcGVuZCh0LGUpO2lmKGl0W2ldKXt2YXIgdT1pdFtpXTtQKGwpP2UocyxjP1wiLmVuYWJsZShcIjpcIi5kaXNhYmxlKFwiLHUsXCIpO1wiKTplKHQuY29uZChjKS50aGVuKHMsXCIuZW5hYmxlKFwiLHUsXCIpO1wiKS5lbHNlKHMsXCIuZGlzYWJsZShcIix1LFwiKTtcIikpLGUobyxcIi5cIixpLFwiPVwiLGMsXCI7XCIpfWVsc2UgaWYodihjKSl7dmFyIGg9YVtpXTtlKHMsXCIuXCIsYXRbaV0sXCIoXCIsYyxcIik7XCIsYy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gaCtcIltcIitlK1wiXT1cIit0fSkuam9pbihcIjtcIiksXCI7XCIpfWVsc2UgZShzLFwiLlwiLGF0W2ldLFwiKFwiLGMsXCIpO1wiLG8sXCIuXCIsaSxcIj1cIixjLFwiO1wiKX19KX1mdW5jdGlvbiBMKHQsZSl7SyYmKHQuaW5zdGFuY2luZz1lLmRlZih0LnNoYXJlZC5leHRlbnNpb25zLFwiLmFuZ2xlX2luc3RhbmNlZF9hcnJheXNcIikpfWZ1bmN0aW9uIEIodCxlLHIsbixpKXtmdW5jdGlvbiBhKCl7cmV0dXJuXCJ1bmRlZmluZWRcIj09dHlwZW9mIHBlcmZvcm1hbmNlP1wiRGF0ZS5ub3coKVwiOlwicGVyZm9ybWFuY2Uubm93KClcIn1mdW5jdGlvbiBvKHQpe3QoYz1lLmRlZigpLFwiPVwiLGEoKSxcIjtcIiksXCJzdHJpbmdcIj09dHlwZW9mIGk/dChmLFwiLmNvdW50Kz1cIixpLFwiO1wiKTp0KGYsXCIuY291bnQrKztcIiksZCYmKG4/dCh1PWUuZGVmKCksXCI9XCIsZyxcIi5nZXROdW1QZW5kaW5nUXVlcmllcygpO1wiKTp0KGcsXCIuYmVnaW5RdWVyeShcIixmLFwiKTtcIikpfWZ1bmN0aW9uIHModCl7dChmLFwiLmNwdVRpbWUrPVwiLGEoKSxcIi1cIixjLFwiO1wiKSxkJiYobj90KGcsXCIucHVzaFNjb3BlU3RhdHMoXCIsdSxcIixcIixnLFwiLmdldE51bVBlbmRpbmdRdWVyaWVzKCksXCIsZixcIik7XCIpOnQoZyxcIi5lbmRRdWVyeSgpO1wiKSl9ZnVuY3Rpb24gbCh0KXt2YXIgcj1lLmRlZihwLFwiLnByb2ZpbGVcIik7ZShwLFwiLnByb2ZpbGU9XCIsdCxcIjtcIiksZS5leGl0KHAsXCIucHJvZmlsZT1cIixyLFwiO1wiKX12YXIgYyx1LGg9dC5zaGFyZWQsZj10LnN0YXRzLHA9aC5jdXJyZW50LGc9aC50aW1lcjtpZihyPXIucHJvZmlsZSl7aWYoUChyKSlyZXR1cm4gdm9pZChyLmVuYWJsZT8obyhlKSxzKGUuZXhpdCksbChcInRydWVcIikpOmwoXCJmYWxzZVwiKSk7bChyPXIuYXBwZW5kKHQsZSkpfWVsc2Ugcj1lLmRlZihwLFwiLnByb2ZpbGVcIik7byhoPXQuYmxvY2soKSksZShcImlmKFwiLHIsXCIpe1wiLGgsXCJ9XCIpLHModD10LmJsb2NrKCkpLGUuZXhpdChcImlmKFwiLHIsXCIpe1wiLHQsXCJ9XCIpfWZ1bmN0aW9uIE4odCxlLHIsbixpKXtmdW5jdGlvbiBhKHIsbixpKXtmdW5jdGlvbiBhKCl7ZShcImlmKCFcIix1LFwiLmJ1ZmZlcil7XCIsbCxcIi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShcIixjLFwiKTt9XCIpO3ZhciByLGE9aS50eXBlO3I9aS5zaXplP2UuZGVmKGkuc2l6ZSxcInx8XCIsbik6bixlKFwiaWYoXCIsdSxcIi50eXBlIT09XCIsYSxcInx8XCIsdSxcIi5zaXplIT09XCIscixcInx8XCIscC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHUrXCIuXCIrdCtcIiE9PVwiK2lbdF19KS5qb2luKFwifHxcIiksXCIpe1wiLGwsXCIuYmluZEJ1ZmZlcihcIiwzNDk2MixcIixcIixoLFwiLmJ1ZmZlcik7XCIsbCxcIi52ZXJ0ZXhBdHRyaWJQb2ludGVyKFwiLFtjLHIsYSxpLm5vcm1hbGl6ZWQsaS5zdHJpZGUsaS5vZmZzZXRdLFwiKTtcIix1LFwiLnR5cGU9XCIsYSxcIjtcIix1LFwiLnNpemU9XCIscixcIjtcIixwLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdStcIi5cIit0K1wiPVwiK2lbdF0rXCI7XCJ9KS5qb2luKFwiXCIpLFwifVwiKSxLJiYoYT1pLmRpdmlzb3IsZShcImlmKFwiLHUsXCIuZGl2aXNvciE9PVwiLGEsXCIpe1wiLHQuaW5zdGFuY2luZyxcIi52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoXCIsW2MsYV0sXCIpO1wiLHUsXCIuZGl2aXNvcj1cIixhLFwiO31cIikpfWZ1bmN0aW9uIHMoKXtlKFwiaWYoXCIsdSxcIi5idWZmZXIpe1wiLGwsXCIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KFwiLGMsXCIpO1wiLFwifWlmKFwiLGJ0Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB1K1wiLlwiK3QrXCIhPT1cIitmW2VdfSkuam9pbihcInx8XCIpLFwiKXtcIixsLFwiLnZlcnRleEF0dHJpYjRmKFwiLGMsXCIsXCIsZixcIik7XCIsYnQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUrXCIuXCIrdCtcIj1cIitmW2VdK1wiO1wifSkuam9pbihcIlwiKSxcIn1cIil9dmFyIGw9by5nbCxjPWUuZGVmKHIsXCIubG9jYXRpb25cIiksdT1lLmRlZihvLmF0dHJpYnV0ZXMsXCJbXCIsYyxcIl1cIik7cj1pLnN0YXRlO3ZhciBoPWkuYnVmZmVyLGY9W2kueCxpLnksaS56LGkud10scD1bXCJidWZmZXJcIixcIm5vcm1hbGl6ZWRcIixcIm9mZnNldFwiLFwic3RyaWRlXCJdOzE9PT1yP2EoKToyPT09cj9zKCk6KGUoXCJpZihcIixyLFwiPT09XCIsMSxcIil7XCIpLGEoKSxlKFwifWVsc2V7XCIpLHMoKSxlKFwifVwiKSl9dmFyIG89dC5zaGFyZWQ7bi5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBvLHM9bi5uYW1lLGw9ci5hdHRyaWJ1dGVzW3NdO2lmKGwpe2lmKCFpKGwpKXJldHVybjtvPWwuYXBwZW5kKHQsZSl9ZWxzZXtpZighaShNdCkpcmV0dXJuO3ZhciBjPXQuc2NvcGVBdHRyaWIocyk7bz17fSxPYmplY3Qua2V5cyhuZXcgWikuZm9yRWFjaChmdW5jdGlvbih0KXtvW3RdPWUuZGVmKGMsXCIuXCIsdCl9KX1hKHQubGluayhuKSxmdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAzNTY2NDpjYXNlIDM1NjY3OmNhc2UgMzU2NzE6cmV0dXJuIDI7Y2FzZSAzNTY2NTpjYXNlIDM1NjY4OmNhc2UgMzU2NzI6cmV0dXJuIDM7Y2FzZSAzNTY2NjpjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cmV0dXJuIDQ7ZGVmYXVsdDpyZXR1cm4gMX19KG4uaW5mby50eXBlKSxvKX0pfWZ1bmN0aW9uIGoodCxyLG4saSxvKXtmb3IodmFyIHMsbD10LnNoYXJlZCxjPWwuZ2wsdT0wO3U8aS5sZW5ndGg7Kyt1KXt2YXIgaCxmPShnPWlbdV0pLm5hbWUscD1nLmluZm8udHlwZSxkPW4udW5pZm9ybXNbZl0sZz10LmxpbmsoZykrXCIubG9jYXRpb25cIjtpZihkKXtpZighbyhkKSljb250aW51ZTtpZihQKGQpKXtpZihmPWQudmFsdWUsMzU2Nzg9PT1wfHwzNTY4MD09PXApcihjLFwiLnVuaWZvcm0xaShcIixnLFwiLFwiLChwPXQubGluayhmLl90ZXh0dXJlfHxmLmNvbG9yWzBdLl90ZXh0dXJlKSkrXCIuYmluZCgpKTtcIiksci5leGl0KHAsXCIudW5iaW5kKCk7XCIpO2Vsc2UgaWYoMzU2NzQ9PT1wfHwzNTY3NT09PXB8fDM1Njc2PT09cClkPTIsMzU2NzU9PT1wP2Q9MzozNTY3Nj09PXAmJihkPTQpLHIoYyxcIi51bmlmb3JtTWF0cml4XCIsZCxcImZ2KFwiLGcsXCIsZmFsc2UsXCIsZj10Lmdsb2JhbC5kZWYoXCJuZXcgRmxvYXQzMkFycmF5KFtcIitBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmKStcIl0pXCIpLFwiKTtcIik7ZWxzZXtzd2l0Y2gocCl7Y2FzZSA1MTI2OnM9XCIxZlwiO2JyZWFrO2Nhc2UgMzU2NjQ6cz1cIjJmXCI7YnJlYWs7Y2FzZSAzNTY2NTpzPVwiM2ZcIjticmVhaztjYXNlIDM1NjY2OnM9XCI0ZlwiO2JyZWFrO2Nhc2UgMzU2NzA6Y2FzZSA1MTI0OnM9XCIxaVwiO2JyZWFrO2Nhc2UgMzU2NzE6Y2FzZSAzNTY2NzpzPVwiMmlcIjticmVhaztjYXNlIDM1NjcyOmNhc2UgMzU2Njg6cz1cIjNpXCI7YnJlYWs7Y2FzZSAzNTY3MzpzPVwiNGlcIjticmVhaztjYXNlIDM1NjY5OnM9XCI0aVwifXIoYyxcIi51bmlmb3JtXCIscyxcIihcIixnLFwiLFwiLHYoZik/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZik6ZixcIik7XCIpfWNvbnRpbnVlfWg9ZC5hcHBlbmQodCxyKX1lbHNle2lmKCFvKE10KSljb250aW51ZTtoPXIuZGVmKGwudW5pZm9ybXMsXCJbXCIsZS5pZChmKSxcIl1cIil9c3dpdGNoKDM1Njc4PT09cD9yKFwiaWYoXCIsaCxcIiYmXCIsaCwnLl9yZWdsVHlwZT09PVwiZnJhbWVidWZmZXJcIil7JyxoLFwiPVwiLGgsXCIuY29sb3JbMF07XCIsXCJ9XCIpOjM1NjgwPT09cCYmcihcImlmKFwiLGgsXCImJlwiLGgsJy5fcmVnbFR5cGU9PT1cImZyYW1lYnVmZmVyQ3ViZVwiKXsnLGgsXCI9XCIsaCxcIi5jb2xvclswXTtcIixcIn1cIiksZj0xLHApe2Nhc2UgMzU2Nzg6Y2FzZSAzNTY4MDpwPXIuZGVmKGgsXCIuX3RleHR1cmVcIikscihjLFwiLnVuaWZvcm0xaShcIixnLFwiLFwiLHAsXCIuYmluZCgpKTtcIiksci5leGl0KHAsXCIudW5iaW5kKCk7XCIpO2NvbnRpbnVlO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnM9XCIxaVwiO2JyZWFrO2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpzPVwiMmlcIixmPTI7YnJlYWs7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnM9XCIzaVwiLGY9MzticmVhaztjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cz1cIjRpXCIsZj00O2JyZWFrO2Nhc2UgNTEyNjpzPVwiMWZcIjticmVhaztjYXNlIDM1NjY0OnM9XCIyZlwiLGY9MjticmVhaztjYXNlIDM1NjY1OnM9XCIzZlwiLGY9MzticmVhaztjYXNlIDM1NjY2OnM9XCI0ZlwiLGY9NDticmVhaztjYXNlIDM1Njc0OnM9XCJNYXRyaXgyZnZcIjticmVhaztjYXNlIDM1Njc1OnM9XCJNYXRyaXgzZnZcIjticmVhaztjYXNlIDM1Njc2OnM9XCJNYXRyaXg0ZnZcIn1pZihyKGMsXCIudW5pZm9ybVwiLHMsXCIoXCIsZyxcIixcIiksXCJNXCI9PT1zLmNoYXJBdCgwKSl7Zz1NYXRoLnBvdyhwLTM1Njc0KzIsMik7dmFyIG09dC5nbG9iYWwuZGVmKFwibmV3IEZsb2F0MzJBcnJheShcIixnLFwiKVwiKTtyKFwiZmFsc2UsKEFycmF5LmlzQXJyYXkoXCIsaCxcIil8fFwiLGgsXCIgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpP1wiLGgsXCI6KFwiLGEoZyxmdW5jdGlvbih0KXtyZXR1cm4gbStcIltcIit0K1wiXT1cIitoK1wiW1wiK3QrXCJdXCJ9KSxcIixcIixtLFwiKVwiKX1lbHNlIHIoMTxmP2EoZixmdW5jdGlvbih0KXtyZXR1cm4gaCtcIltcIit0K1wiXVwifSk6aCk7cihcIik7XCIpfX1mdW5jdGlvbiBWKHQsZSxyLG4pe2Z1bmN0aW9uIGkoaSl7dmFyIGE9ZltpXTtyZXR1cm4gYT9hLmNvbnRleHREZXAmJm4uY29udGV4dER5bmFtaWN8fGEucHJvcERlcD9hLmFwcGVuZCh0LHIpOmEuYXBwZW5kKHQsZSk6ZS5kZWYoaCxcIi5cIixpKX1mdW5jdGlvbiBhKCl7ZnVuY3Rpb24gdCgpe3IobCxcIi5kcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShcIixbZCx2LG0sZytcIjw8KChcIittK1wiLTUxMjEpPj4xKVwiLHNdLFwiKTtcIil9ZnVuY3Rpb24gZSgpe3IobCxcIi5kcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoXCIsW2QsZyx2LHNdLFwiKTtcIil9cD95P3QoKToocihcImlmKFwiLHAsXCIpe1wiKSx0KCkscihcIn1lbHNle1wiKSxlKCkscihcIn1cIikpOmUoKX1mdW5jdGlvbiBvKCl7ZnVuY3Rpb24gdCgpe3IodStcIi5kcmF3RWxlbWVudHMoXCIrW2QsdixtLGcrXCI8PCgoXCIrbStcIi01MTIxKT4+MSlcIl0rXCIpO1wiKX1mdW5jdGlvbiBlKCl7cih1K1wiLmRyYXdBcnJheXMoXCIrW2QsZyx2XStcIik7XCIpfXA/eT90KCk6KHIoXCJpZihcIixwLFwiKXtcIiksdCgpLHIoXCJ9ZWxzZXtcIiksZSgpLHIoXCJ9XCIpKTplKCl9dmFyIHMsbCxjPXQuc2hhcmVkLHU9Yy5nbCxoPWMuZHJhdyxmPW4uZHJhdyxwPWZ1bmN0aW9uKCl7dmFyIGk9Zi5lbGVtZW50cyxhPWU7cmV0dXJuIGk/KChpLmNvbnRleHREZXAmJm4uY29udGV4dER5bmFtaWN8fGkucHJvcERlcCkmJihhPXIpLGk9aS5hcHBlbmQodCxhKSk6aT1hLmRlZihoLFwiLlwiLFwiZWxlbWVudHNcIiksaSYmYShcImlmKFwiK2krXCIpXCIrdStcIi5iaW5kQnVmZmVyKDM0OTYzLFwiK2krXCIuYnVmZmVyLmJ1ZmZlcik7XCIpLGl9KCksZD1pKFwicHJpbWl0aXZlXCIpLGc9aShcIm9mZnNldFwiKSx2PWZ1bmN0aW9uKCl7dmFyIGk9Zi5jb3VudCxhPWU7cmV0dXJuIGk/KChpLmNvbnRleHREZXAmJm4uY29udGV4dER5bmFtaWN8fGkucHJvcERlcCkmJihhPXIpLGk9aS5hcHBlbmQodCxhKSk6aT1hLmRlZihoLFwiLlwiLFwiY291bnRcIiksaX0oKTtpZihcIm51bWJlclwiPT10eXBlb2Ygdil7aWYoMD09PXYpcmV0dXJufWVsc2UgcihcImlmKFwiLHYsXCIpe1wiKSxyLmV4aXQoXCJ9XCIpO0smJihzPWkoXCJpbnN0YW5jZXNcIiksbD10Lmluc3RhbmNpbmcpO3ZhciBtPXArXCIudHlwZVwiLHk9Zi5lbGVtZW50cyYmUChmLmVsZW1lbnRzKTtLJiYoXCJudW1iZXJcIiE9dHlwZW9mIHN8fDA8PXMpP1wic3RyaW5nXCI9PXR5cGVvZiBzPyhyKFwiaWYoXCIscyxcIj4wKXtcIiksYSgpLHIoXCJ9ZWxzZSBpZihcIixzLFwiPDApe1wiKSxvKCkscihcIn1cIikpOmEoKTpvKCl9ZnVuY3Rpb24gcSh0LGUscixuLGkpe3JldHVybiBpPShlPWIoKSkucHJvYyhcImJvZHlcIixpKSxLJiYoZS5pbnN0YW5jaW5nPWkuZGVmKGUuc2hhcmVkLmV4dGVuc2lvbnMsXCIuYW5nbGVfaW5zdGFuY2VkX2FycmF5c1wiKSksdChlLGkscixuKSxlLmNvbXBpbGUoKS5ib2R5fWZ1bmN0aW9uIEgodCxlLHIsbil7TCh0LGUpLE4odCxlLHIsbi5hdHRyaWJ1dGVzLGZ1bmN0aW9uKCl7cmV0dXJuITB9KSxqKHQsZSxyLG4udW5pZm9ybXMsZnVuY3Rpb24oKXtyZXR1cm4hMH0pLFYodCxlLGUscil9ZnVuY3Rpb24gRyh0LGUscixuKXtmdW5jdGlvbiBpKCl7cmV0dXJuITB9dC5iYXRjaElkPVwiYTFcIixMKHQsZSksTih0LGUscixuLmF0dHJpYnV0ZXMsaSksaih0LGUscixuLnVuaWZvcm1zLGkpLFYodCxlLGUscil9ZnVuY3Rpb24gWSh0LGUscixuKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0LmNvbnRleHREZXAmJm98fHQucHJvcERlcH1mdW5jdGlvbiBhKHQpe3JldHVybiFpKHQpfUwodCxlKTt2YXIgbz1yLmNvbnRleHREZXAscz1lLmRlZigpLGw9ZS5kZWYoKTt0LnNoYXJlZC5wcm9wcz1sLHQuYmF0Y2hJZD1zO3ZhciBjPXQuc2NvcGUoKSx1PXQuc2NvcGUoKTtlKGMuZW50cnksXCJmb3IoXCIscyxcIj0wO1wiLHMsXCI8XCIsXCJhMVwiLFwiOysrXCIscyxcIil7XCIsbCxcIj1cIixcImEwXCIsXCJbXCIscyxcIl07XCIsdSxcIn1cIixjLmV4aXQpLHIubmVlZHNDb250ZXh0JiZNKHQsdSxyLmNvbnRleHQpLHIubmVlZHNGcmFtZWJ1ZmZlciYmUyh0LHUsci5mcmFtZWJ1ZmZlciksQyh0LHUsci5zdGF0ZSxpKSxyLnByb2ZpbGUmJmkoci5wcm9maWxlKSYmQih0LHUsciwhMSwhMCksbj8oTih0LGMscixuLmF0dHJpYnV0ZXMsYSksTih0LHUscixuLmF0dHJpYnV0ZXMsaSksaih0LGMscixuLnVuaWZvcm1zLGEpLGoodCx1LHIsbi51bmlmb3JtcyxpKSxWKHQsYyx1LHIpKTooZT10Lmdsb2JhbC5kZWYoXCJ7fVwiKSxuPXIuc2hhZGVyLnByb2dWYXIuYXBwZW5kKHQsdSksbD11LmRlZihuLFwiLmlkXCIpLGM9dS5kZWYoZSxcIltcIixsLFwiXVwiKSx1KHQuc2hhcmVkLmdsLFwiLnVzZVByb2dyYW0oXCIsbixcIi5wcm9ncmFtKTtcIixcImlmKCFcIixjLFwiKXtcIixjLFwiPVwiLGUsXCJbXCIsbCxcIl09XCIsdC5saW5rKGZ1bmN0aW9uKGUpe3JldHVybiBxKEcsdCxyLGUsMil9KSxcIihcIixuLFwiKTt9XCIsYyxcIi5jYWxsKHRoaXMsYTBbXCIscyxcIl0sXCIscyxcIik7XCIpKX1mdW5jdGlvbiBXKHQscil7ZnVuY3Rpb24gbihlKXt2YXIgbj1yLnNoYWRlcltlXTtuJiZpLnNldChhLnNoYWRlcixcIi5cIitlLG4uYXBwZW5kKHQsaSkpfXZhciBpPXQucHJvYyhcInNjb3BlXCIsMyk7dC5iYXRjaElkPVwiYTJcIjt2YXIgYT10LnNoYXJlZCxvPWEuY3VycmVudDtNKHQsaSxyLmNvbnRleHQpLHIuZnJhbWVidWZmZXImJnIuZnJhbWVidWZmZXIuYXBwZW5kKHQsaSksSShPYmplY3Qua2V5cyhyLnN0YXRlKSkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj1yLnN0YXRlW2VdLmFwcGVuZCh0LGkpO3Yobik/bi5mb3JFYWNoKGZ1bmN0aW9uKHIsbil7aS5zZXQodC5uZXh0W2VdLFwiW1wiK24rXCJdXCIscil9KTppLnNldChhLm5leHQsXCIuXCIrZSxuKX0pLEIodCxpLHIsITAsITApLFtcImVsZW1lbnRzXCIsXCJvZmZzZXRcIixcImNvdW50XCIsXCJpbnN0YW5jZXNcIixcInByaW1pdGl2ZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXIuZHJhd1tlXTtuJiZpLnNldChhLmRyYXcsXCIuXCIrZSxcIlwiK24uYXBwZW5kKHQsaSkpfSksT2JqZWN0LmtleXMoci51bmlmb3JtcykuZm9yRWFjaChmdW5jdGlvbihuKXtpLnNldChhLnVuaWZvcm1zLFwiW1wiK2UuaWQobikrXCJdXCIsci51bmlmb3Jtc1tuXS5hcHBlbmQodCxpKSl9KSxPYmplY3Qua2V5cyhyLmF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49ci5hdHRyaWJ1dGVzW2VdLmFwcGVuZCh0LGkpLGE9dC5zY29wZUF0dHJpYihlKTtPYmplY3Qua2V5cyhuZXcgWikuZm9yRWFjaChmdW5jdGlvbih0KXtpLnNldChhLFwiLlwiK3Qsblt0XSl9KX0pLG4oXCJ2ZXJ0XCIpLG4oXCJmcmFnXCIpLDA8T2JqZWN0LmtleXMoci5zdGF0ZSkubGVuZ3RoJiYoaShvLFwiLmRpcnR5PXRydWU7XCIpLGkuZXhpdChvLFwiLmRpcnR5PXRydWU7XCIpKSxpKFwiYTEoXCIsdC5zaGFyZWQuY29udGV4dCxcIixhMCxcIix0LmJhdGNoSWQsXCIpO1wiKX1mdW5jdGlvbiBYKHQsZSxyKXt2YXIgbj1lLnN0YXRpY1tyXTtpZihuJiZmdW5jdGlvbih0KXtpZihcIm9iamVjdFwiPT10eXBlb2YgdCYmIXYodCkpe2Zvcih2YXIgZT1PYmplY3Qua2V5cyh0KSxyPTA7cjxlLmxlbmd0aDsrK3IpaWYoVS5pc0R5bmFtaWModFtlW3JdXSkpcmV0dXJuITA7cmV0dXJuITF9fShuKSl7dmFyIGk9dC5nbG9iYWwsYT1PYmplY3Qua2V5cyhuKSxvPSExLHM9ITEsbD0hMSxjPXQuZ2xvYmFsLmRlZihcInt9XCIpO2EuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcj1uW2VdO2lmKFUuaXNEeW5hbWljKHIpKVwiZnVuY3Rpb25cIj09dHlwZW9mIHImJihyPW5bZV09VS51bmJveChyKSksZT1GKHIsbnVsbCksbz1vfHxlLnRoaXNEZXAsbD1sfHxlLnByb3BEZXAscz1zfHxlLmNvbnRleHREZXA7ZWxzZXtzd2l0Y2goaShjLFwiLlwiLGUsXCI9XCIpLHR5cGVvZiByKXtjYXNlXCJudW1iZXJcIjppKHIpO2JyZWFrO2Nhc2VcInN0cmluZ1wiOmkoJ1wiJyxyLCdcIicpO2JyZWFrO2Nhc2VcIm9iamVjdFwiOkFycmF5LmlzQXJyYXkocikmJmkoXCJbXCIsci5qb2luKCksXCJdXCIpO2JyZWFrO2RlZmF1bHQ6aSh0LmxpbmsocikpfWkoXCI7XCIpfX0pLGUuZHluYW1pY1tyXT1uZXcgVS5EeW5hbWljVmFyaWFibGUoNCx7dGhpc0RlcDpvLGNvbnRleHREZXA6cyxwcm9wRGVwOmwscmVmOmMsYXBwZW5kOmZ1bmN0aW9uKHQsZSl7YS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBpPW5bcl07VS5pc0R5bmFtaWMoaSkmJihpPXQuaW52b2tlKGUsaSksZShjLFwiLlwiLHIsXCI9XCIsaSxcIjtcIikpfSl9fSksZGVsZXRlIGUuc3RhdGljW3JdfX12YXIgWj11LlJlY29yZCwkPXthZGQ6MzI3NzQsc3VidHJhY3Q6MzI3NzgsXCJyZXZlcnNlIHN1YnRyYWN0XCI6MzI3Nzl9O3IuZXh0X2JsZW5kX21pbm1heCYmKCQubWluPTMyNzc1LCQubWF4PTMyNzc2KTt2YXIgSz1yLmFuZ2xlX2luc3RhbmNlZF9hcnJheXMsUT1yLndlYmdsX2RyYXdfYnVmZmVycyx0dD17ZGlydHk6ITAscHJvZmlsZTpnLnByb2ZpbGV9LGV0PXt9LG50PVtdLGl0PXt9LGF0PXt9O3koXCJkaXRoZXJcIiwzMDI0KSx5KFwiYmxlbmQuZW5hYmxlXCIsMzA0MikseChcImJsZW5kLmNvbG9yXCIsXCJibGVuZENvbG9yXCIsWzAsMCwwLDBdKSx4KFwiYmxlbmQuZXF1YXRpb25cIixcImJsZW5kRXF1YXRpb25TZXBhcmF0ZVwiLFszMjc3NCwzMjc3NF0pLHgoXCJibGVuZC5mdW5jXCIsXCJibGVuZEZ1bmNTZXBhcmF0ZVwiLFsxLDAsMSwwXSkseShcImRlcHRoLmVuYWJsZVwiLDI5MjksITApLHgoXCJkZXB0aC5mdW5jXCIsXCJkZXB0aEZ1bmNcIiw1MTMpLHgoXCJkZXB0aC5yYW5nZVwiLFwiZGVwdGhSYW5nZVwiLFswLDFdKSx4KFwiZGVwdGgubWFza1wiLFwiZGVwdGhNYXNrXCIsITApLHgoXCJjb2xvck1hc2tcIixcImNvbG9yTWFza1wiLFshMCwhMCwhMCwhMF0pLHkoXCJjdWxsLmVuYWJsZVwiLDI4ODQpLHgoXCJjdWxsLmZhY2VcIixcImN1bGxGYWNlXCIsMTAyOSkseChcImZyb250RmFjZVwiLFwiZnJvbnRGYWNlXCIsMjMwNSkseChcImxpbmVXaWR0aFwiLFwibGluZVdpZHRoXCIsMSkseShcInBvbHlnb25PZmZzZXQuZW5hYmxlXCIsMzI4MjMpLHgoXCJwb2x5Z29uT2Zmc2V0Lm9mZnNldFwiLFwicG9seWdvbk9mZnNldFwiLFswLDBdKSx5KFwic2FtcGxlLmFscGhhXCIsMzI5MjYpLHkoXCJzYW1wbGUuZW5hYmxlXCIsMzI5MjgpLHgoXCJzYW1wbGUuY292ZXJhZ2VcIixcInNhbXBsZUNvdmVyYWdlXCIsWzEsITFdKSx5KFwic3RlbmNpbC5lbmFibGVcIiwyOTYwKSx4KFwic3RlbmNpbC5tYXNrXCIsXCJzdGVuY2lsTWFza1wiLC0xKSx4KFwic3RlbmNpbC5mdW5jXCIsXCJzdGVuY2lsRnVuY1wiLFs1MTksMCwtMV0pLHgoXCJzdGVuY2lsLm9wRnJvbnRcIixcInN0ZW5jaWxPcFNlcGFyYXRlXCIsWzEwMjgsNzY4MCw3NjgwLDc2ODBdKSx4KFwic3RlbmNpbC5vcEJhY2tcIixcInN0ZW5jaWxPcFNlcGFyYXRlXCIsWzEwMjksNzY4MCw3NjgwLDc2ODBdKSx5KFwic2Npc3Nvci5lbmFibGVcIiwzMDg5KSx4KFwic2Npc3Nvci5ib3hcIixcInNjaXNzb3JcIixbMCwwLHQuZHJhd2luZ0J1ZmZlcldpZHRoLHQuZHJhd2luZ0J1ZmZlckhlaWdodF0pLHgoXCJ2aWV3cG9ydFwiLFwidmlld3BvcnRcIixbMCwwLHQuZHJhd2luZ0J1ZmZlcldpZHRoLHQuZHJhd2luZ0J1ZmZlckhlaWdodF0pO3ZhciBvdD17Z2w6dCxjb250ZXh0OnAsc3RyaW5nczplLG5leHQ6ZXQsY3VycmVudDp0dCxkcmF3OmYsZWxlbWVudHM6byxidWZmZXI6aSxzaGFkZXI6aCxhdHRyaWJ1dGVzOnUuc3RhdGUsdW5pZm9ybXM6YyxmcmFtZWJ1ZmZlcjpsLGV4dGVuc2lvbnM6cix0aW1lcjpkLGlzQnVmZmVyQXJnczpPfSxzdD17cHJpbVR5cGVzOnJ0LGNvbXBhcmVGdW5jczprdCxibGVuZEZ1bmNzOnd0LGJsZW5kRXF1YXRpb25zOiQsc3RlbmNpbE9wczpBdCxnbFR5cGVzOkosb3JpZW50YXRpb25UeXBlOlR0fTtRJiYoc3QuYmFja0J1ZmZlcj1bMTAyOV0sc3QuZHJhd0J1ZmZlcj1hKG4ubWF4RHJhd2J1ZmZlcnMsZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10P1swXTphKHQsZnVuY3Rpb24odCl7cmV0dXJuIDM2MDY0K3R9KX0pKTt2YXIgbHQ9MDtyZXR1cm57bmV4dDpldCxjdXJyZW50OnR0LHByb2NzOmZ1bmN0aW9uKCl7dmFyIHQ9YigpLGU9dC5wcm9jKFwicG9sbFwiKSxyPXQucHJvYyhcInJlZnJlc2hcIiksaT10LmJsb2NrKCk7ZShpKSxyKGkpO3ZhciBvLHM9dC5zaGFyZWQsbD1zLmdsLGM9cy5uZXh0LHU9cy5jdXJyZW50O2kodSxcIi5kaXJ0eT1mYWxzZTtcIiksUyh0LGUpLFModCxyLG51bGwsITApLEsmJihvPXQubGluayhLKSk7Zm9yKHZhciBoPTA7aDxuLm1heEF0dHJpYnV0ZXM7KytoKXt2YXIgZj1yLmRlZihzLmF0dHJpYnV0ZXMsXCJbXCIsaCxcIl1cIikscD10LmNvbmQoZixcIi5idWZmZXJcIik7cC50aGVuKGwsXCIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoXCIsaCxcIik7XCIsbCxcIi5iaW5kQnVmZmVyKFwiLDM0OTYyLFwiLFwiLGYsXCIuYnVmZmVyLmJ1ZmZlcik7XCIsbCxcIi52ZXJ0ZXhBdHRyaWJQb2ludGVyKFwiLGgsXCIsXCIsZixcIi5zaXplLFwiLGYsXCIudHlwZSxcIixmLFwiLm5vcm1hbGl6ZWQsXCIsZixcIi5zdHJpZGUsXCIsZixcIi5vZmZzZXQpO1wiKS5lbHNlKGwsXCIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KFwiLGgsXCIpO1wiLGwsXCIudmVydGV4QXR0cmliNGYoXCIsaCxcIixcIixmLFwiLngsXCIsZixcIi55LFwiLGYsXCIueixcIixmLFwiLncpO1wiLGYsXCIuYnVmZmVyPW51bGw7XCIpLHIocCksSyYmcihvLFwiLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShcIixoLFwiLFwiLGYsXCIuZGl2aXNvcik7XCIpfXJldHVybiBPYmplY3Qua2V5cyhpdCkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgYT1pdFtuXSxvPWkuZGVmKGMsXCIuXCIsbikscz10LmJsb2NrKCk7cyhcImlmKFwiLG8sXCIpe1wiLGwsXCIuZW5hYmxlKFwiLGEsXCIpfWVsc2V7XCIsbCxcIi5kaXNhYmxlKFwiLGEsXCIpfVwiLHUsXCIuXCIsbixcIj1cIixvLFwiO1wiKSxyKHMpLGUoXCJpZihcIixvLFwiIT09XCIsdSxcIi5cIixuLFwiKXtcIixzLFwifVwiKX0pLE9iamVjdC5rZXlzKGF0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBvLHMsaD1hdFtuXSxmPXR0W25dLHA9dC5ibG9jaygpO3AobCxcIi5cIixoLFwiKFwiKSx2KGYpPyhoPWYubGVuZ3RoLG89dC5nbG9iYWwuZGVmKGMsXCIuXCIsbikscz10Lmdsb2JhbC5kZWYodSxcIi5cIixuKSxwKGEoaCxmdW5jdGlvbih0KXtyZXR1cm4gbytcIltcIit0K1wiXVwifSksXCIpO1wiLGEoaCxmdW5jdGlvbih0KXtyZXR1cm4gcytcIltcIit0K1wiXT1cIitvK1wiW1wiK3QrXCJdO1wifSkuam9pbihcIlwiKSksZShcImlmKFwiLGEoaCxmdW5jdGlvbih0KXtyZXR1cm4gbytcIltcIit0K1wiXSE9PVwiK3MrXCJbXCIrdCtcIl1cIn0pLmpvaW4oXCJ8fFwiKSxcIil7XCIscCxcIn1cIikpOihvPWkuZGVmKGMsXCIuXCIsbikscz1pLmRlZih1LFwiLlwiLG4pLHAobyxcIik7XCIsdSxcIi5cIixuLFwiPVwiLG8sXCI7XCIpLGUoXCJpZihcIixvLFwiIT09XCIscyxcIil7XCIscCxcIn1cIikpLHIocCl9KSx0LmNvbXBpbGUoKX0oKSxjb21waWxlOmZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9YigpO3JldHVybiBhLnN0YXRzPWEubGluayhpKSxPYmplY3Qua2V5cyhlLnN0YXRpYykuZm9yRWFjaChmdW5jdGlvbih0KXtYKGEsZSx0KX0pLF90LmZvckVhY2goZnVuY3Rpb24oZSl7WChhLHQsZSl9KSxyPVQodCxlLHIsbiksZnVuY3Rpb24odCxlKXt2YXIgcj10LnByb2MoXCJkcmF3XCIsMSk7TCh0LHIpLE0odCxyLGUuY29udGV4dCksUyh0LHIsZS5mcmFtZWJ1ZmZlciksRSh0LHIsZSksQyh0LHIsZS5zdGF0ZSksQih0LHIsZSwhMSwhMCk7dmFyIG49ZS5zaGFkZXIucHJvZ1Zhci5hcHBlbmQodCxyKTtpZihyKHQuc2hhcmVkLmdsLFwiLnVzZVByb2dyYW0oXCIsbixcIi5wcm9ncmFtKTtcIiksZS5zaGFkZXIucHJvZ3JhbSlIKHQscixlLGUuc2hhZGVyLnByb2dyYW0pO2Vsc2V7dmFyIGk9dC5nbG9iYWwuZGVmKFwie31cIiksYT1yLmRlZihuLFwiLmlkXCIpLG89ci5kZWYoaSxcIltcIixhLFwiXVwiKTtyKHQuY29uZChvKS50aGVuKG8sXCIuY2FsbCh0aGlzLGEwKTtcIikuZWxzZShvLFwiPVwiLGksXCJbXCIsYSxcIl09XCIsdC5saW5rKGZ1bmN0aW9uKHIpe3JldHVybiBxKEgsdCxlLHIsMSl9KSxcIihcIixuLFwiKTtcIixvLFwiLmNhbGwodGhpcyxhMCk7XCIpKX0wPE9iamVjdC5rZXlzKGUuc3RhdGUpLmxlbmd0aCYmcih0LnNoYXJlZC5jdXJyZW50LFwiLmRpcnR5PXRydWU7XCIpfShhLHIpLFcoYSxyKSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIHQuY29udGV4dERlcCYmaXx8dC5wcm9wRGVwfXZhciBuPXQucHJvYyhcImJhdGNoXCIsMik7dC5iYXRjaElkPVwiMFwiLEwodCxuKTt2YXIgaT0hMSxhPSEwO09iamVjdC5rZXlzKGUuY29udGV4dCkuZm9yRWFjaChmdW5jdGlvbih0KXtpPWl8fGUuY29udGV4dFt0XS5wcm9wRGVwfSksaXx8KE0odCxuLGUuY29udGV4dCksYT0hMSk7dmFyIG89ITE7aWYoKHM9ZS5mcmFtZWJ1ZmZlcik/KHMucHJvcERlcD9pPW89ITA6cy5jb250ZXh0RGVwJiZpJiYobz0hMCksb3x8Uyh0LG4scykpOlModCxuLG51bGwpLGUuc3RhdGUudmlld3BvcnQmJmUuc3RhdGUudmlld3BvcnQucHJvcERlcCYmKGk9ITApLEUodCxuLGUpLEModCxuLGUuc3RhdGUsZnVuY3Rpb24odCl7cmV0dXJuIXIodCl9KSxlLnByb2ZpbGUmJnIoZS5wcm9maWxlKXx8Qih0LG4sZSwhMSxcImExXCIpLGUuY29udGV4dERlcD1pLGUubmVlZHNDb250ZXh0PWEsZS5uZWVkc0ZyYW1lYnVmZmVyPW8sKGE9ZS5zaGFkZXIucHJvZ1ZhcikuY29udGV4dERlcCYmaXx8YS5wcm9wRGVwKVkodCxuLGUsbnVsbCk7ZWxzZSBpZihhPWEuYXBwZW5kKHQsbiksbih0LnNoYXJlZC5nbCxcIi51c2VQcm9ncmFtKFwiLGEsXCIucHJvZ3JhbSk7XCIpLGUuc2hhZGVyLnByb2dyYW0pWSh0LG4sZSxlLnNoYWRlci5wcm9ncmFtKTtlbHNle3ZhciBzPXQuZ2xvYmFsLmRlZihcInt9XCIpLGw9KG89bi5kZWYoYSxcIi5pZFwiKSxuLmRlZihzLFwiW1wiLG8sXCJdXCIpKTtuKHQuY29uZChsKS50aGVuKGwsXCIuY2FsbCh0aGlzLGEwLGExKTtcIikuZWxzZShsLFwiPVwiLHMsXCJbXCIsbyxcIl09XCIsdC5saW5rKGZ1bmN0aW9uKHIpe3JldHVybiBxKFksdCxlLHIsMil9KSxcIihcIixhLFwiKTtcIixsLFwiLmNhbGwodGhpcyxhMCxhMSk7XCIpKX0wPE9iamVjdC5rZXlzKGUuc3RhdGUpLmxlbmd0aCYmbih0LnNoYXJlZC5jdXJyZW50LFwiLmRpcnR5PXRydWU7XCIpfShhLHIpLGEuY29tcGlsZSgpfX19ZnVuY3Rpb24gTih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKWlmKHRbcl09PT1lKXJldHVybiByO3JldHVybi0xfXZhciBqPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPU9iamVjdC5rZXlzKGUpLG49MDtuPHIubGVuZ3RoOysrbil0W3Jbbl1dPWVbcltuXV07cmV0dXJuIHR9LFY9MCxVPXtEeW5hbWljVmFyaWFibGU6dCxkZWZpbmU6ZnVuY3Rpb24ocixuKXtyZXR1cm4gbmV3IHQocixlKG4rXCJcIikpfSxpc0R5bmFtaWM6ZnVuY3Rpb24oZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmIWUuX3JlZ2xUeXBlfHxlIGluc3RhbmNlb2YgdH0sdW5ib3g6ZnVuY3Rpb24oZSxyKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP25ldyB0KDAsZSk6ZX0sYWNjZXNzb3I6ZX0scT17bmV4dDpcImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU/ZnVuY3Rpb24odCl7cmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0KX06ZnVuY3Rpb24odCl7cmV0dXJuIHNldFRpbWVvdXQodCwxNil9LGNhbmNlbDpcImZ1bmN0aW9uXCI9PXR5cGVvZiBjYW5jZWxBbmltYXRpb25GcmFtZT9mdW5jdGlvbih0KXtyZXR1cm4gY2FuY2VsQW5pbWF0aW9uRnJhbWUodCl9OmNsZWFyVGltZW91dH0sSD1cInVuZGVmaW5lZFwiIT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX06ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9LEc9cygpO0cuemVybz1zKCk7dmFyIFk9ZnVuY3Rpb24odCxlKXt2YXIgcj0xO2UuZXh0X3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJiYocj10LmdldFBhcmFtZXRlcigzNDA0NykpO3ZhciBuPTEsaT0xO2Uud2ViZ2xfZHJhd19idWZmZXJzJiYobj10LmdldFBhcmFtZXRlcigzNDg1MiksaT10LmdldFBhcmFtZXRlcigzNjA2MykpO3ZhciBhPSEhZS5vZXNfdGV4dHVyZV9mbG9hdDtpZihhKXthPXQuY3JlYXRlVGV4dHVyZSgpLHQuYmluZFRleHR1cmUoMzU1MyxhKSx0LnRleEltYWdlMkQoMzU1MywwLDY0MDgsMSwxLDAsNjQwOCw1MTI2LG51bGwpO3ZhciBvPXQuY3JlYXRlRnJhbWVidWZmZXIoKTtpZih0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxvKSx0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDY0LDM1NTMsYSwwKSx0LmJpbmRUZXh0dXJlKDM1NTMsbnVsbCksMzYwNTMhPT10LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoMzYxNjApKWE9ITE7ZWxzZXt0LnZpZXdwb3J0KDAsMCwxLDEpLHQuY2xlYXJDb2xvcigxLDAsMCwxKSx0LmNsZWFyKDE2Mzg0KTt2YXIgcz1HLmFsbG9jVHlwZSg1MTI2LDQpO3QucmVhZFBpeGVscygwLDAsMSwxLDY0MDgsNTEyNixzKSx0LmdldEVycm9yKCk/YT0hMToodC5kZWxldGVGcmFtZWJ1ZmZlcihvKSx0LmRlbGV0ZVRleHR1cmUoYSksYT0xPT09c1swXSksRy5mcmVlVHlwZShzKX19cmV0dXJuIHM9ITAsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvciYmKC9NU0lFLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpfHwvVHJpZGVudFxcLy8udGVzdChuYXZpZ2F0b3IuYXBwVmVyc2lvbil8fC9FZGdlLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKXx8KHM9dC5jcmVhdGVUZXh0dXJlKCksbz1HLmFsbG9jVHlwZSg1MTIxLDM2KSx0LmFjdGl2ZVRleHR1cmUoMzM5ODQpLHQuYmluZFRleHR1cmUoMzQwNjcscyksdC50ZXhJbWFnZTJEKDM0MDY5LDAsNjQwOCwzLDMsMCw2NDA4LDUxMjEsbyksRy5mcmVlVHlwZShvKSx0LmJpbmRUZXh0dXJlKDM0MDY3LG51bGwpLHQuZGVsZXRlVGV4dHVyZShzKSxzPSF0LmdldEVycm9yKCkpLHtjb2xvckJpdHM6W3QuZ2V0UGFyYW1ldGVyKDM0MTApLHQuZ2V0UGFyYW1ldGVyKDM0MTEpLHQuZ2V0UGFyYW1ldGVyKDM0MTIpLHQuZ2V0UGFyYW1ldGVyKDM0MTMpXSxkZXB0aEJpdHM6dC5nZXRQYXJhbWV0ZXIoMzQxNCksc3RlbmNpbEJpdHM6dC5nZXRQYXJhbWV0ZXIoMzQxNSksc3VicGl4ZWxCaXRzOnQuZ2V0UGFyYW1ldGVyKDM0MDgpLGV4dGVuc2lvbnM6T2JqZWN0LmtleXMoZSkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEhZVt0XX0pLG1heEFuaXNvdHJvcGljOnIsbWF4RHJhd2J1ZmZlcnM6bixtYXhDb2xvckF0dGFjaG1lbnRzOmkscG9pbnRTaXplRGltczp0LmdldFBhcmFtZXRlcigzMzkwMSksbGluZVdpZHRoRGltczp0LmdldFBhcmFtZXRlcigzMzkwMiksbWF4Vmlld3BvcnREaW1zOnQuZ2V0UGFyYW1ldGVyKDMzODYpLG1heENvbWJpbmVkVGV4dHVyZVVuaXRzOnQuZ2V0UGFyYW1ldGVyKDM1NjYxKSxtYXhDdWJlTWFwU2l6ZTp0LmdldFBhcmFtZXRlcigzNDA3NiksbWF4UmVuZGVyYnVmZmVyU2l6ZTp0LmdldFBhcmFtZXRlcigzNDAyNCksbWF4VGV4dHVyZVVuaXRzOnQuZ2V0UGFyYW1ldGVyKDM0OTMwKSxtYXhUZXh0dXJlU2l6ZTp0LmdldFBhcmFtZXRlcigzMzc5KSxtYXhBdHRyaWJ1dGVzOnQuZ2V0UGFyYW1ldGVyKDM0OTIxKSxtYXhWZXJ0ZXhVbmlmb3Jtczp0LmdldFBhcmFtZXRlcigzNjM0NyksbWF4VmVydGV4VGV4dHVyZVVuaXRzOnQuZ2V0UGFyYW1ldGVyKDM1NjYwKSxtYXhWYXJ5aW5nVmVjdG9yczp0LmdldFBhcmFtZXRlcigzNjM0OCksbWF4RnJhZ21lbnRVbmlmb3Jtczp0LmdldFBhcmFtZXRlcigzNjM0OSksZ2xzbDp0LmdldFBhcmFtZXRlcigzNTcyNCkscmVuZGVyZXI6dC5nZXRQYXJhbWV0ZXIoNzkzNyksdmVuZG9yOnQuZ2V0UGFyYW1ldGVyKDc5MzYpLHZlcnNpb246dC5nZXRQYXJhbWV0ZXIoNzkzOCkscmVhZEZsb2F0OmEsbnBvdFRleHR1cmVDdWJlOnN9fSxXPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgVWludDhBcnJheXx8dCBpbnN0YW5jZW9mIFVpbnQxNkFycmF5fHx0IGluc3RhbmNlb2YgVWludDMyQXJyYXl8fHQgaW5zdGFuY2VvZiBJbnQ4QXJyYXl8fHQgaW5zdGFuY2VvZiBJbnQxNkFycmF5fHx0IGluc3RhbmNlb2YgSW50MzJBcnJheXx8dCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheXx8dCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheXx8dCBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5fSxYPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KX0sWj17c2hhcGU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdO3QubGVuZ3RoO3Q9dFswXSllLnB1c2godC5sZW5ndGgpO3JldHVybiBlfSxmbGF0dGVuOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTE7aWYoZS5sZW5ndGgpZm9yKHZhciBhPTA7YTxlLmxlbmd0aDsrK2EpaSo9ZVthXTtlbHNlIGk9MDtzd2l0Y2gocj1ufHxHLmFsbG9jVHlwZShyLGkpLGUubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmZvcihuPWVbMF0sZT0wO2U8bjsrK2UpcltlXT10W2VdO2JyZWFrO2Nhc2UgMjpmb3Iobj1lWzBdLGU9ZVsxXSxhPWk9MDthPG47KythKWZvcih2YXIgbz10W2FdLHM9MDtzPGU7KytzKXJbaSsrXT1vW3NdO2JyZWFrO2Nhc2UgMzpjKHQsZVswXSxlWzFdLGVbMl0sciwwKTticmVhaztkZWZhdWx0OiFmdW5jdGlvbiB0KGUscixuLGksYSl7Zm9yKHZhciBvPTEscz1uKzE7czxyLmxlbmd0aDsrK3Mpbyo9cltzXTt2YXIgbD1yW25dO2lmKDQ9PXIubGVuZ3RoLW4pe3ZhciB1PXJbbisxXSxoPXJbbisyXTtmb3Iocj1yW24rM10scz0wO3M8bDsrK3MpYyhlW3NdLHUsaCxyLGksYSksYSs9b31lbHNlIGZvcihzPTA7czxsOysrcyl0KGVbc10scixuKzEsaSxhKSxhKz1vfSh0LGUsMCxyLDApfXJldHVybiByfX0sJD17XCJbb2JqZWN0IEludDhBcnJheV1cIjo1MTIwLFwiW29iamVjdCBJbnQxNkFycmF5XVwiOjUxMjIsXCJbb2JqZWN0IEludDMyQXJyYXldXCI6NTEyNCxcIltvYmplY3QgVWludDhBcnJheV1cIjo1MTIxLFwiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV1cIjo1MTIxLFwiW29iamVjdCBVaW50MTZBcnJheV1cIjo1MTIzLFwiW29iamVjdCBVaW50MzJBcnJheV1cIjo1MTI1LFwiW29iamVjdCBGbG9hdDMyQXJyYXldXCI6NTEyNixcIltvYmplY3QgRmxvYXQ2NEFycmF5XVwiOjUxMjEsXCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiOjUxMjF9LEo9e2ludDg6NTEyMCxpbnQxNjo1MTIyLGludDMyOjUxMjQsdWludDg6NTEyMSx1aW50MTY6NTEyMyx1aW50MzI6NTEyNSxmbG9hdDo1MTI2LGZsb2F0MzI6NTEyNn0sSz17ZHluYW1pYzozNTA0OCxzdHJlYW06MzUwNDAsc3RhdGljOjM1MDQ0fSxRPVouZmxhdHRlbix0dD1aLnNoYXBlLGV0PVtdO2V0WzUxMjBdPTEsZXRbNTEyMl09MixldFs1MTI0XT00LGV0WzUxMjFdPTEsZXRbNTEyM109MixldFs1MTI1XT00LGV0WzUxMjZdPTQ7dmFyIHJ0PXtwb2ludHM6MCxwb2ludDowLGxpbmVzOjEsbGluZToxLHRyaWFuZ2xlczo0LHRyaWFuZ2xlOjQsXCJsaW5lIGxvb3BcIjoyLFwibGluZSBzdHJpcFwiOjMsXCJ0cmlhbmdsZSBzdHJpcFwiOjUsXCJ0cmlhbmdsZSBmYW5cIjo2fSxudD1uZXcgRmxvYXQzMkFycmF5KDEpLGl0PW5ldyBVaW50MzJBcnJheShudC5idWZmZXIpLGF0PVs5OTg0LDk5ODYsOTk4NSw5OTg3XSxvdD1bMCw2NDA5LDY0MTAsNjQwNyw2NDA4XSxzdD17fTtzdFs2NDA5XT1zdFs2NDA2XT1zdFs2NDAyXT0xLHN0WzM0MDQxXT1zdFs2NDEwXT0yLHN0WzY0MDddPXN0WzM1OTA0XT0zLHN0WzY0MDhdPXN0WzM1OTA2XT00O3ZhciBsdD1tKFwiSFRNTENhbnZhc0VsZW1lbnRcIiksY3Q9bShcIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFwiKSx1dD1tKFwiSW1hZ2VCaXRtYXBcIiksaHQ9bShcIkhUTUxJbWFnZUVsZW1lbnRcIiksZnQ9bShcIkhUTUxWaWRlb0VsZW1lbnRcIikscHQ9T2JqZWN0LmtleXMoJCkuY29uY2F0KFtsdCxjdCx1dCxodCxmdF0pLGR0PVtdO2R0WzUxMjFdPTEsZHRbNTEyNl09NCxkdFszNjE5M109MixkdFs1MTIzXT0yLGR0WzUxMjVdPTQ7dmFyIGd0PVtdO2d0WzMyODU0XT0yLGd0WzMyODU1XT0yLGd0WzM2MTk0XT0yLGd0WzM0MDQxXT00LGd0WzMzNzc2XT0uNSxndFszMzc3N109LjUsZ3RbMzM3NzhdPTEsZ3RbMzM3NzldPTEsZ3RbMzU5ODZdPS41LGd0WzM1OTg3XT0xLGd0WzM0Nzk4XT0xLGd0WzM1ODQwXT0uNSxndFszNTg0MV09LjI1LGd0WzM1ODQyXT0uNSxndFszNTg0M109LjI1LGd0WzM2MTk2XT0uNTt2YXIgdnQ9W107dnRbMzI4NTRdPTIsdnRbMzI4NTVdPTIsdnRbMzYxOTRdPTIsdnRbMzMxODldPTIsdnRbMzYxNjhdPTEsdnRbMzQwNDFdPTQsdnRbMzU5MDddPTQsdnRbMzQ4MzZdPTE2LHZ0WzM0ODQyXT04LHZ0WzM0ODQzXT02O3ZhciBtdD1mdW5jdGlvbih0LGUscixuLGkpe2Z1bmN0aW9uIGEodCl7dGhpcy5pZD1jKyssdGhpcy5yZWZDb3VudD0xLHRoaXMucmVuZGVyYnVmZmVyPXQsdGhpcy5mb3JtYXQ9MzI4NTQsdGhpcy5oZWlnaHQ9dGhpcy53aWR0aD0wLGkucHJvZmlsZSYmKHRoaXMuc3RhdHM9e3NpemU6MH0pfWZ1bmN0aW9uIG8oZSl7dmFyIHI9ZS5yZW5kZXJidWZmZXI7dC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpLHQuZGVsZXRlUmVuZGVyYnVmZmVyKHIpLGUucmVuZGVyYnVmZmVyPW51bGwsZS5yZWZDb3VudD0wLGRlbGV0ZSB1W2UuaWRdLG4ucmVuZGVyYnVmZmVyQ291bnQtLX12YXIgcz17cmdiYTQ6MzI4NTQscmdiNTY1OjM2MTk0LFwicmdiNSBhMVwiOjMyODU1LGRlcHRoOjMzMTg5LHN0ZW5jaWw6MzYxNjgsXCJkZXB0aCBzdGVuY2lsXCI6MzQwNDF9O2UuZXh0X3NyZ2ImJihzLnNyZ2JhPTM1OTA3KSxlLmV4dF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCYmKHMucmdiYTE2Zj0zNDg0MixzLnJnYjE2Zj0zNDg0MyksZS53ZWJnbF9jb2xvcl9idWZmZXJfZmxvYXQmJihzLnJnYmEzMmY9MzQ4MzYpO3ZhciBsPVtdO09iamVjdC5rZXlzKHMpLmZvckVhY2goZnVuY3Rpb24odCl7bFtzW3RdXT10fSk7dmFyIGM9MCx1PXt9O3JldHVybiBhLnByb3RvdHlwZS5kZWNSZWY9ZnVuY3Rpb24oKXswPj0tLXRoaXMucmVmQ291bnQmJm8odGhpcyl9LGkucHJvZmlsZSYmKG4uZ2V0VG90YWxSZW5kZXJidWZmZXJTaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gT2JqZWN0LmtleXModSkuZm9yRWFjaChmdW5jdGlvbihlKXt0Kz11W2VdLnN0YXRzLnNpemV9KSx0fSkse2NyZWF0ZTpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG8oZSxyKXt2YXIgbj0wLGE9MCx1PTMyODU0O2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlJiZlPyhcInNoYXBlXCJpbiBlPyhuPTB8KGE9ZS5zaGFwZSlbMF0sYT0wfGFbMV0pOihcInJhZGl1c1wiaW4gZSYmKG49YT0wfGUucmFkaXVzKSxcIndpZHRoXCJpbiBlJiYobj0wfGUud2lkdGgpLFwiaGVpZ2h0XCJpbiBlJiYoYT0wfGUuaGVpZ2h0KSksXCJmb3JtYXRcImluIGUmJih1PXNbZS5mb3JtYXRdKSk6XCJudW1iZXJcIj09dHlwZW9mIGU/KG49MHxlLGE9XCJudW1iZXJcIj09dHlwZW9mIHI/MHxyOm4pOmV8fChuPWE9MSksbiE9PWMud2lkdGh8fGEhPT1jLmhlaWdodHx8dSE9PWMuZm9ybWF0KXJldHVybiBvLndpZHRoPWMud2lkdGg9bixvLmhlaWdodD1jLmhlaWdodD1hLGMuZm9ybWF0PXUsdC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLGMucmVuZGVyYnVmZmVyKSx0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsdSxuLGEpLGkucHJvZmlsZSYmKGMuc3RhdHMuc2l6ZT12dFtjLmZvcm1hdF0qYy53aWR0aCpjLmhlaWdodCksby5mb3JtYXQ9bFtjLmZvcm1hdF0sb312YXIgYz1uZXcgYSh0LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpKTtyZXR1cm4gdVtjLmlkXT1jLG4ucmVuZGVyYnVmZmVyQ291bnQrKyxvKGUsciksby5yZXNpemU9ZnVuY3Rpb24oZSxyKXt2YXIgbj0wfGUsYT0wfHJ8fG47cmV0dXJuIG49PT1jLndpZHRoJiZhPT09Yy5oZWlnaHQ/bzooby53aWR0aD1jLndpZHRoPW4sby5oZWlnaHQ9Yy5oZWlnaHQ9YSx0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsYy5yZW5kZXJidWZmZXIpLHQucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxjLmZvcm1hdCxuLGEpLGkucHJvZmlsZSYmKGMuc3RhdHMuc2l6ZT12dFtjLmZvcm1hdF0qYy53aWR0aCpjLmhlaWdodCksbyl9LG8uX3JlZ2xUeXBlPVwicmVuZGVyYnVmZmVyXCIsby5fcmVuZGVyYnVmZmVyPWMsaS5wcm9maWxlJiYoby5zdGF0cz1jLnN0YXRzKSxvLmRlc3Ryb3k9ZnVuY3Rpb24oKXtjLmRlY1JlZigpfSxvfSxjbGVhcjpmdW5jdGlvbigpe1godSkuZm9yRWFjaChvKX0scmVzdG9yZTpmdW5jdGlvbigpe1godSkuZm9yRWFjaChmdW5jdGlvbihlKXtlLnJlbmRlcmJ1ZmZlcj10LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLHQuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxlLnJlbmRlcmJ1ZmZlciksdC5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLGUuZm9ybWF0LGUud2lkdGgsZS5oZWlnaHQpfSksdC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpfX19LHl0PVtdO3l0WzY0MDhdPTQseXRbNjQwN109Mzt2YXIgeHQ9W107eHRbNTEyMV09MSx4dFs1MTI2XT00LHh0WzM2MTkzXT0yO3ZhciBidD1bXCJ4XCIsXCJ5XCIsXCJ6XCIsXCJ3XCJdLF90PVwiYmxlbmQuZnVuYyBibGVuZC5lcXVhdGlvbiBzdGVuY2lsLmZ1bmMgc3RlbmNpbC5vcEZyb250IHN0ZW5jaWwub3BCYWNrIHNhbXBsZS5jb3ZlcmFnZSB2aWV3cG9ydCBzY2lzc29yLmJveCBwb2x5Z29uT2Zmc2V0Lm9mZnNldFwiLnNwbGl0KFwiIFwiKSx3dD17MDowLDE6MSx6ZXJvOjAsb25lOjEsXCJzcmMgY29sb3JcIjo3NjgsXCJvbmUgbWludXMgc3JjIGNvbG9yXCI6NzY5LFwic3JjIGFscGhhXCI6NzcwLFwib25lIG1pbnVzIHNyYyBhbHBoYVwiOjc3MSxcImRzdCBjb2xvclwiOjc3NCxcIm9uZSBtaW51cyBkc3QgY29sb3JcIjo3NzUsXCJkc3QgYWxwaGFcIjo3NzIsXCJvbmUgbWludXMgZHN0IGFscGhhXCI6NzczLFwiY29uc3RhbnQgY29sb3JcIjozMjc2OSxcIm9uZSBtaW51cyBjb25zdGFudCBjb2xvclwiOjMyNzcwLFwiY29uc3RhbnQgYWxwaGFcIjozMjc3MSxcIm9uZSBtaW51cyBjb25zdGFudCBhbHBoYVwiOjMyNzcyLFwic3JjIGFscGhhIHNhdHVyYXRlXCI6Nzc2fSxrdD17bmV2ZXI6NTEyLGxlc3M6NTEzLFwiPFwiOjUxMyxlcXVhbDo1MTQsXCI9XCI6NTE0LFwiPT1cIjo1MTQsXCI9PT1cIjo1MTQsbGVxdWFsOjUxNSxcIjw9XCI6NTE1LGdyZWF0ZXI6NTE2LFwiPlwiOjUxNixub3RlcXVhbDo1MTcsXCIhPVwiOjUxNyxcIiE9PVwiOjUxNyxnZXF1YWw6NTE4LFwiPj1cIjo1MTgsYWx3YXlzOjUxOX0sQXQ9ezA6MCx6ZXJvOjAsa2VlcDo3NjgwLHJlcGxhY2U6NzY4MSxpbmNyZW1lbnQ6NzY4MixkZWNyZW1lbnQ6NzY4MyxcImluY3JlbWVudCB3cmFwXCI6MzQwNTUsXCJkZWNyZW1lbnQgd3JhcFwiOjM0MDU2LGludmVydDo1Mzg2fSxUdD17Y3c6MjMwNCxjY3c6MjMwNX0sTXQ9bmV3IEQoITEsITEsITEsZnVuY3Rpb24oKXt9KTtyZXR1cm4gZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe2lmKDA9PT1aLmxlbmd0aCl3JiZ3LnVwZGF0ZSgpLFE9bnVsbDtlbHNle1E9cS5uZXh0KGUpLGgoKTtmb3IodmFyIHQ9Wi5sZW5ndGgtMTswPD10Oy0tdCl7dmFyIHI9Wlt0XTtyJiZyKHosbnVsbCwwKX12LmZsdXNoKCksdyYmdy51cGRhdGUoKX19ZnVuY3Rpb24gcigpeyFRJiYwPFoubGVuZ3RoJiYoUT1xLm5leHQoZSkpfWZ1bmN0aW9uIG4oKXtRJiYocS5jYW5jZWwoZSksUT1udWxsKX1mdW5jdGlvbiBhKHQpe3QucHJldmVudERlZmF1bHQoKSxuKCksJC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QoKX0pfWZ1bmN0aW9uIG8odCl7di5nZXRFcnJvcigpLHkucmVzdG9yZSgpLFAucmVzdG9yZSgpLEkucmVzdG9yZSgpLFIucmVzdG9yZSgpLEYucmVzdG9yZSgpLFYucmVzdG9yZSgpLHcmJncucmVzdG9yZSgpLEcucHJvY3MucmVmcmVzaCgpLHIoKSxKLmZvckVhY2goZnVuY3Rpb24odCl7dCgpfSl9ZnVuY3Rpb24gcyh0KXtmdW5jdGlvbiBlKHQpe3ZhciBlPXt9LHI9e307cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIGk9dFtuXTtVLmlzRHluYW1pYyhpKT9yW25dPVUudW5ib3goaSxuKTplW25dPWl9KSx7ZHluYW1pYzpyLHN0YXRpYzplfX12YXIgcj1lKHQuY29udGV4dHx8e30pLG49ZSh0LnVuaWZvcm1zfHx7fSksaT1lKHQuYXR0cmlidXRlc3x8e30pLGE9ZShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe2lmKHQgaW4gcil7dmFyIGU9clt0XTtkZWxldGUgclt0XSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JbdCtcIi5cIituXT1lW25dfSl9fXZhciByPWooe30sdCk7cmV0dXJuIGRlbGV0ZSByLnVuaWZvcm1zLGRlbGV0ZSByLmF0dHJpYnV0ZXMsZGVsZXRlIHIuY29udGV4dCxcInN0ZW5jaWxcImluIHImJnIuc3RlbmNpbC5vcCYmKHIuc3RlbmNpbC5vcEJhY2s9ci5zdGVuY2lsLm9wRnJvbnQ9ci5zdGVuY2lsLm9wLGRlbGV0ZSByLnN0ZW5jaWwub3ApLGUoXCJibGVuZFwiKSxlKFwiZGVwdGhcIiksZShcImN1bGxcIiksZShcInN0ZW5jaWxcIiksZShcInBvbHlnb25PZmZzZXRcIiksZShcInNjaXNzb3JcIiksZShcInNhbXBsZVwiKSxyfSh0KSk7dD17Z3B1VGltZTowLGNwdVRpbWU6MCxjb3VudDowfTt2YXIgbz0ocj1HLmNvbXBpbGUoYSxpLG4scix0KSkuZHJhdyxzPXIuYmF0Y2gsbD1yLnNjb3BlLGM9W107cmV0dXJuIGooZnVuY3Rpb24odCxlKXt2YXIgcjtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KXJldHVybiBsLmNhbGwodGhpcyxudWxsLHQsMCk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZSlpZihcIm51bWJlclwiPT10eXBlb2YgdClmb3Iocj0wO3I8dDsrK3IpbC5jYWxsKHRoaXMsbnVsbCxlLHIpO2Vsc2V7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGwuY2FsbCh0aGlzLHQsZSwwKTtmb3Iocj0wO3I8dC5sZW5ndGg7KytyKWwuY2FsbCh0aGlzLHRbcl0sZSxyKX1lbHNlIGlmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXtpZigwPHQpcmV0dXJuIHMuY2FsbCh0aGlzLGZ1bmN0aW9uKHQpe2Zvcig7Yy5sZW5ndGg8dDspYy5wdXNoKG51bGwpO3JldHVybiBjfSgwfHQpLDB8dCl9ZWxzZXtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gby5jYWxsKHRoaXMsdCk7aWYodC5sZW5ndGgpcmV0dXJuIHMuY2FsbCh0aGlzLHQsdC5sZW5ndGgpfX0se3N0YXRzOnR9KX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9MDtHLnByb2NzLnBvbGwoKTt2YXIgbj1lLmNvbG9yO24mJih2LmNsZWFyQ29sb3IoK25bMF18fDAsK25bMV18fDAsK25bMl18fDAsK25bM118fDApLHJ8PTE2Mzg0KSxcImRlcHRoXCJpbiBlJiYodi5jbGVhckRlcHRoKCtlLmRlcHRoKSxyfD0yNTYpLFwic3RlbmNpbFwiaW4gZSYmKHYuY2xlYXJTdGVuY2lsKDB8ZS5zdGVuY2lsKSxyfD0xMDI0KSx2LmNsZWFyKHIpfWZ1bmN0aW9uIGModCl7cmV0dXJuIFoucHVzaCh0KSxyKCkse2NhbmNlbDpmdW5jdGlvbigpe3ZhciBlPU4oWix0KTtaW2VdPWZ1bmN0aW9uIHQoKXt2YXIgZT1OKFosdCk7WltlXT1aW1oubGVuZ3RoLTFdLC0tWi5sZW5ndGgsMD49Wi5sZW5ndGgmJm4oKX19fX1mdW5jdGlvbiB1KCl7dmFyIHQ9Vy52aWV3cG9ydCxlPVcuc2Npc3Nvcl9ib3g7dFswXT10WzFdPWVbMF09ZVsxXT0wLHoudmlld3BvcnRXaWR0aD16LmZyYW1lYnVmZmVyV2lkdGg9ei5kcmF3aW5nQnVmZmVyV2lkdGg9dFsyXT1lWzJdPXYuZHJhd2luZ0J1ZmZlcldpZHRoLHoudmlld3BvcnRIZWlnaHQ9ei5mcmFtZWJ1ZmZlckhlaWdodD16LmRyYXdpbmdCdWZmZXJIZWlnaHQ9dFszXT1lWzNdPXYuZHJhd2luZ0J1ZmZlckhlaWdodH1mdW5jdGlvbiBoKCl7ei50aWNrKz0xLHoudGltZT1nKCksdSgpLEcucHJvY3MucG9sbCgpfWZ1bmN0aW9uIGYoKXt1KCksRy5wcm9jcy5yZWZyZXNoKCksdyYmdy51cGRhdGUoKX1mdW5jdGlvbiBnKCl7cmV0dXJuKEgoKS1rKS8xZTN9aWYoISh0PWkodCkpKXJldHVybiBudWxsO3ZhciB2PXQuZ2wsbT12LmdldENvbnRleHRBdHRyaWJ1dGVzKCk7di5pc0NvbnRleHRMb3N0KCk7dmFyIHk9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKGUpe3ZhciByO2U9ZS50b0xvd2VyQ2FzZSgpO3RyeXtyPW5bZV09dC5nZXRFeHRlbnNpb24oZSl9Y2F0Y2godCl7fXJldHVybiEhcn1mb3IodmFyIG49e30saT0wO2k8ZS5leHRlbnNpb25zLmxlbmd0aDsrK2kpe3ZhciBhPWUuZXh0ZW5zaW9uc1tpXTtpZighcihhKSlyZXR1cm4gZS5vbkRlc3Ryb3koKSxlLm9uRG9uZSgnXCInK2ErJ1wiIGV4dGVuc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IFdlYkdMIGNvbnRleHQsIHRyeSB1cGdyYWRpbmcgeW91ciBzeXN0ZW0gb3IgYSBkaWZmZXJlbnQgYnJvd3NlcicpLG51bGx9cmV0dXJuIGUub3B0aW9uYWxFeHRlbnNpb25zLmZvckVhY2gocikse2V4dGVuc2lvbnM6bixyZXN0b3JlOmZ1bmN0aW9uKCl7T2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbih0KXtpZihuW3RdJiYhcih0KSl0aHJvdyBFcnJvcihcIihyZWdsKTogZXJyb3IgcmVzdG9yaW5nIGV4dGVuc2lvbiBcIit0KX0pfX19KHYsdCk7aWYoIXkpcmV0dXJuIG51bGw7dmFyIHg9ZnVuY3Rpb24oKXt2YXIgdD17XCJcIjowfSxlPVtcIlwiXTtyZXR1cm57aWQ6ZnVuY3Rpb24ocil7dmFyIG49dFtyXTtyZXR1cm4gbnx8KG49dFtyXT1lLmxlbmd0aCxlLnB1c2gociksbil9LHN0cjpmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX19fSgpLGI9e2J1ZmZlckNvdW50OjAsZWxlbWVudHNDb3VudDowLGZyYW1lYnVmZmVyQ291bnQ6MCxzaGFkZXJDb3VudDowLHRleHR1cmVDb3VudDowLGN1YmVDb3VudDowLHJlbmRlcmJ1ZmZlckNvdW50OjAsbWF4VGV4dHVyZVVuaXRzOjB9LF89eS5leHRlbnNpb25zLHc9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKCl7dGhpcy5lbmRRdWVyeUluZGV4PXRoaXMuc3RhcnRRdWVyeUluZGV4PS0xLHRoaXMuc3VtPTAsdGhpcy5zdGF0cz1udWxsfWZ1bmN0aW9uIG4odCxlLG4pe3ZhciBpPW8ucG9wKCl8fG5ldyByO2kuc3RhcnRRdWVyeUluZGV4PXQsaS5lbmRRdWVyeUluZGV4PWUsaS5zdW09MCxpLnN0YXRzPW4scy5wdXNoKGkpfWlmKCFlLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeSlyZXR1cm4gbnVsbDt2YXIgaT1bXSxhPVtdLG89W10scz1bXSxsPVtdLGM9W107cmV0dXJue2JlZ2luUXVlcnk6ZnVuY3Rpb24odCl7dmFyIHI9aS5wb3AoKXx8ZS5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuY3JlYXRlUXVlcnlFWFQoKTtlLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5iZWdpblF1ZXJ5RVhUKDM1MDA3LHIpLGEucHVzaChyKSxuKGEubGVuZ3RoLTEsYS5sZW5ndGgsdCl9LGVuZFF1ZXJ5OmZ1bmN0aW9uKCl7ZS5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuZW5kUXVlcnlFWFQoMzUwMDcpfSxwdXNoU2NvcGVTdGF0czpuLHVwZGF0ZTpmdW5jdGlvbigpe3ZhciB0LHI7aWYoMCE9PSh0PWEubGVuZ3RoKSl7Yy5sZW5ndGg9TWF0aC5tYXgoYy5sZW5ndGgsdCsxKSxsLmxlbmd0aD1NYXRoLm1heChsLmxlbmd0aCx0KzEpLGxbMF09MDt2YXIgbj1jWzBdPTA7Zm9yKHI9dD0wO3I8YS5sZW5ndGg7KytyKXt2YXIgdT1hW3JdO2UuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmdldFF1ZXJ5T2JqZWN0RVhUKHUsMzQ5MTkpPyhuKz1lLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5nZXRRdWVyeU9iamVjdEVYVCh1LDM0OTE4KSxpLnB1c2godSkpOmFbdCsrXT11LGxbcisxXT1uLGNbcisxXT10fWZvcihhLmxlbmd0aD10LHI9dD0wO3I8cy5sZW5ndGg7KytyKXt2YXIgaD0obj1zW3JdKS5zdGFydFF1ZXJ5SW5kZXg7dT1uLmVuZFF1ZXJ5SW5kZXgsbi5zdW0rPWxbdV0tbFtoXSxoPWNbaF0sKHU9Y1t1XSk9PT1oPyhuLnN0YXRzLmdwdVRpbWUrPW4uc3VtLzFlNixvLnB1c2gobikpOihuLnN0YXJ0UXVlcnlJbmRleD1oLG4uZW5kUXVlcnlJbmRleD11LHNbdCsrXT1uKX1zLmxlbmd0aD10fX0sZ2V0TnVtUGVuZGluZ1F1ZXJpZXM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5sZW5ndGh9LGNsZWFyOmZ1bmN0aW9uKCl7aS5wdXNoLmFwcGx5KGksYSk7Zm9yKHZhciB0PTA7dDxpLmxlbmd0aDt0KyspZS5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuZGVsZXRlUXVlcnlFWFQoaVt0XSk7YS5sZW5ndGg9MCxpLmxlbmd0aD0wfSxyZXN0b3JlOmZ1bmN0aW9uKCl7YS5sZW5ndGg9MCxpLmxlbmd0aD0wfX19KDAsXyksaz1IKCksQz12LmRyYXdpbmdCdWZmZXJXaWR0aCxMPXYuZHJhd2luZ0J1ZmZlckhlaWdodCx6PXt0aWNrOjAsdGltZTowLHZpZXdwb3J0V2lkdGg6Qyx2aWV3cG9ydEhlaWdodDpMLGZyYW1lYnVmZmVyV2lkdGg6QyxmcmFtZWJ1ZmZlckhlaWdodDpMLGRyYXdpbmdCdWZmZXJXaWR0aDpDLGRyYXdpbmdCdWZmZXJIZWlnaHQ6TCxwaXhlbFJhdGlvOnQucGl4ZWxSYXRpb30sTz1ZKHYsXyksST0oQz1mdW5jdGlvbih0LGUscixuKXtmb3IodD1yLm1heEF0dHJpYnV0ZXMsZT1BcnJheSh0KSxyPTA7cjx0OysrcillW3JdPW5ldyBNO3JldHVybntSZWNvcmQ6TSxzY29wZTp7fSxzdGF0ZTplfX0odixfLE8pLHAodixiLHQsQykpLEQ9ZCh2LF8sSSxiKSxQPVModix4LGIsdCksUj1BKHYsXyxPLGZ1bmN0aW9uKCl7Ry5wcm9jcy5wb2xsKCl9LHosYix0KSxGPW10KHYsXywwLGIsdCksVj1UKHYsXyxPLFIsRixiKSxHPUIodix4LF8sTyxJLEQsMCxWLHt9LEMsUCx7ZWxlbWVudHM6bnVsbCxwcmltaXRpdmU6NCxjb3VudDotMSxvZmZzZXQ6MCxpbnN0YW5jZXM6LTF9LHosdyx0KSxXPSh4PUUodixWLEcucHJvY3MucG9sbCx6KSxHLm5leHQpLFg9di5jYW52YXMsWj1bXSwkPVtdLEo9W10sSz1bdC5vbkRlc3Ryb3ldLFE9bnVsbDtYJiYoWC5hZGRFdmVudExpc3RlbmVyKFwid2ViZ2xjb250ZXh0bG9zdFwiLGEsITEpLFguYWRkRXZlbnRMaXN0ZW5lcihcIndlYmdsY29udGV4dHJlc3RvcmVkXCIsbywhMSkpO3ZhciB0dD1WLnNldEZCTz1zKHtmcmFtZWJ1ZmZlcjpVLmRlZmluZS5jYWxsKG51bGwsMSxcImZyYW1lYnVmZmVyXCIpfSk7cmV0dXJuIGYoKSxtPWoocyx7Y2xlYXI6ZnVuY3Rpb24odCl7aWYoXCJmcmFtZWJ1ZmZlclwiaW4gdClpZih0LmZyYW1lYnVmZmVyJiZcImZyYW1lYnVmZmVyQ3ViZVwiPT09dC5mcmFtZWJ1ZmZlcl9yZWdsVHlwZSlmb3IodmFyIGU9MDs2PmU7KytlKXR0KGooe2ZyYW1lYnVmZmVyOnQuZnJhbWVidWZmZXIuZmFjZXNbZV19LHQpLGwpO2Vsc2UgdHQodCxsKTtlbHNlIGwoMCx0KX0scHJvcDpVLmRlZmluZS5iaW5kKG51bGwsMSksY29udGV4dDpVLmRlZmluZS5iaW5kKG51bGwsMiksdGhpczpVLmRlZmluZS5iaW5kKG51bGwsMyksZHJhdzpzKHt9KSxidWZmZXI6ZnVuY3Rpb24odCl7cmV0dXJuIEkuY3JlYXRlKHQsMzQ5NjIsITEsITEpfSxlbGVtZW50czpmdW5jdGlvbih0KXtyZXR1cm4gRC5jcmVhdGUodCwhMSl9LHRleHR1cmU6Ui5jcmVhdGUyRCxjdWJlOlIuY3JlYXRlQ3ViZSxyZW5kZXJidWZmZXI6Ri5jcmVhdGUsZnJhbWVidWZmZXI6Vi5jcmVhdGUsZnJhbWVidWZmZXJDdWJlOlYuY3JlYXRlQ3ViZSxhdHRyaWJ1dGVzOm0sZnJhbWU6YyxvbjpmdW5jdGlvbih0LGUpe3ZhciByO3N3aXRjaCh0KXtjYXNlXCJmcmFtZVwiOnJldHVybiBjKGUpO2Nhc2VcImxvc3RcIjpyPSQ7YnJlYWs7Y2FzZVwicmVzdG9yZVwiOnI9SjticmVhaztjYXNlXCJkZXN0cm95XCI6cj1LfXJldHVybiByLnB1c2goZSkse2NhbmNlbDpmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8ci5sZW5ndGg7Kyt0KWlmKHJbdF09PT1lKXtyW3RdPXJbci5sZW5ndGgtMV0sci5wb3AoKTticmVha319fX0sbGltaXRzOk8saGFzRXh0ZW5zaW9uOmZ1bmN0aW9uKHQpe3JldHVybiAwPD1PLmV4dGVuc2lvbnMuaW5kZXhPZih0LnRvTG93ZXJDYXNlKCkpfSxyZWFkOngsZGVzdHJveTpmdW5jdGlvbigpe1oubGVuZ3RoPTAsbigpLFgmJihYLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ3ZWJnbGNvbnRleHRsb3N0XCIsYSksWC5yZW1vdmVFdmVudExpc3RlbmVyKFwid2ViZ2xjb250ZXh0cmVzdG9yZWRcIixvKSksUC5jbGVhcigpLFYuY2xlYXIoKSxGLmNsZWFyKCksUi5jbGVhcigpLEQuY2xlYXIoKSxJLmNsZWFyKCksdyYmdy5jbGVhcigpLEsuZm9yRWFjaChmdW5jdGlvbih0KXt0KCl9KX0sX2dsOnYsX3JlZnJlc2g6Zixwb2xsOmZ1bmN0aW9uKCl7aCgpLHcmJncudXBkYXRlKCl9LG5vdzpnLHN0YXRzOmJ9KSx0Lm9uRG9uZShudWxsLG0pLG19fSxcIm9iamVjdFwiPT10eXBlb2YgciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGU/ZS5leHBvcnRzPWkoKTpuLmNyZWF0ZVJFR0w9aSgpfSx7fV0sNDg4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saT1cIlwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJleHBlY3RlZCBhIHN0cmluZ1wiKTtpZigxPT09ZSlyZXR1cm4gdDtpZigyPT09ZSlyZXR1cm4gdCt0O3ZhciByPXQubGVuZ3RoKmU7aWYobiE9PXR8fFwidW5kZWZpbmVkXCI9PXR5cGVvZiBuKW49dCxpPVwiXCI7ZWxzZSBpZihpLmxlbmd0aD49cilyZXR1cm4gaS5zdWJzdHIoMCxyKTtmb3IoO3I+aS5sZW5ndGgmJmU+MTspMSZlJiYoaSs9dCksZT4+PTEsdCs9dDtyZXR1cm4gaT0oaSs9dCkuc3Vic3RyKDAscil9fSx7fV0sNDg5OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2UuZXhwb3J0cz10LnBlcmZvcm1hbmNlJiZ0LnBlcmZvcm1hbmNlLm5vdz9mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX06RGF0ZS5ub3d8fGZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfX0pLmNhbGwodGhpcyxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDQ5MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj10W3QubGVuZ3RoLTFdLG49ZSxpPWUtMjtpPj0wOy0taSl7dmFyIGE9cixvPXRbaV0scz0ocj1hK28pLWEsbD1vLXM7bCYmKHRbLS1uXT1yLHI9bCl9Zm9yKHZhciBjPTAsaT1uO2k8ZTsrK2kpe3ZhciBhPXRbaV0sbz1yLHM9KHI9YStvKS1hLGw9by1zO2wmJih0W2MrK109bCl9cmV0dXJuIHRbYysrXT1yLHQubGVuZ3RoPWMsdH19LHt9XSw0OTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwidHdvLXByb2R1Y3RcIiksaT10KFwicm9idXN0LXN1bVwiKSxhPXQoXCJyb2J1c3Qtc2NhbGVcIiksbz10KFwicm9idXN0LWNvbXByZXNzXCIpLHM9NjtmdW5jdGlvbiBsKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxuPTE7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXJbbi0xXT1uZXcgQXJyYXkodC5sZW5ndGgtMSksYT0wLG89MDthPHQubGVuZ3RoOysrYSlhIT09ZSYmKGlbbysrXT10W25dW2FdKTtyZXR1cm4gcn1mdW5jdGlvbiBjKHQpe2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bXCJzdW0ocHJvZChcIix0WzBdWzBdLFwiLFwiLHRbMV1bMV0sXCIpLHByb2QoLVwiLHRbMF1bMV0sXCIsXCIsdFsxXVswXSxcIikpXCJdLmpvaW4oXCJcIik7Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2goW1wic2NhbGUoXCIsYyhsKHQscikpLFwiLFwiLChuPXIsMSZuP1wiLVwiOlwiXCIpLHRbMF1bcl0sXCIpXCJdLmpvaW4oXCJcIikpO3JldHVybiBmdW5jdGlvbiB0KGUpe2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gZVswXTtpZigyPT09ZS5sZW5ndGgpcmV0dXJuW1wic3VtKFwiLGVbMF0sXCIsXCIsZVsxXSxcIilcIl0uam9pbihcIlwiKTt2YXIgcj1lLmxlbmd0aD4+MTtyZXR1cm5bXCJzdW0oXCIsdChlLnNsaWNlKDAscikpLFwiLFwiLHQoZS5zbGljZShyKSksXCIpXCJdLmpvaW4oXCJcIil9KGUpO3ZhciBufWZ1bmN0aW9uIHUodCl7cmV0dXJuIG5ldyBGdW5jdGlvbihcInN1bVwiLFwic2NhbGVcIixcInByb2RcIixcImNvbXByZXNzXCIsW1wiZnVuY3Rpb24gcm9idXN0RGV0ZXJtaW5hbnRcIix0LFwiKG0pe3JldHVybiBjb21wcmVzcyhcIixjKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3Ipe2Vbcl09bmV3IEFycmF5KHQpO2Zvcih2YXIgbj0wO248dDsrK24pZVtyXVtuXT1bXCJtW1wiLHIsXCJdW1wiLG4sXCJdXCJdLmpvaW4oXCJcIil9cmV0dXJuIGV9KHQpKSxcIil9O3JldHVybiByb2J1c3REZXRlcm1pbmFudFwiLHRdLmpvaW4oXCJcIikpKGksYSxuLG8pfXZhciBoPVtmdW5jdGlvbigpe3JldHVyblswXX0sZnVuY3Rpb24odCl7cmV0dXJuW3RbMF1bMF1dfV07IWZ1bmN0aW9uKCl7Zm9yKDtoLmxlbmd0aDxzOyloLnB1c2godShoLmxlbmd0aCkpO2Zvcih2YXIgdD1bXSxyPVtcImZ1bmN0aW9uIHJvYnVzdERldGVybWluYW50KG0pe3N3aXRjaChtLmxlbmd0aCl7XCJdLG49MDtuPHM7KytuKXQucHVzaChcImRldFwiK24pLHIucHVzaChcImNhc2UgXCIsbixcIjpyZXR1cm4gZGV0XCIsbixcIihtKTtcIik7ci5wdXNoKFwifXZhciBkZXQ9Q0FDSEVbbS5sZW5ndGhdO2lmKCFkZXQpZGV0PUNBQ0hFW20ubGVuZ3RoXT1nZW4obS5sZW5ndGgpO3JldHVybiBkZXQobSk7fXJldHVybiByb2J1c3REZXRlcm1pbmFudFwiKSx0LnB1c2goXCJDQUNIRVwiLFwiZ2VuXCIsci5qb2luKFwiXCIpKTt2YXIgaT1GdW5jdGlvbi5hcHBseSh2b2lkIDAsdCk7Zm9yKGUuZXhwb3J0cz1pLmFwcGx5KHZvaWQgMCxoLmNvbmNhdChbaCx1XSkpLG49MDtuPGgubGVuZ3RoOysrbillLmV4cG9ydHNbbl09aFtuXX0oKX0se1wicm9idXN0LWNvbXByZXNzXCI6NDkwLFwicm9idXN0LXNjYWxlXCI6NDk3LFwicm9idXN0LXN1bVwiOjUwMCxcInR3by1wcm9kdWN0XCI6NTI4fV0sNDkyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInR3by1wcm9kdWN0XCIpLGk9dChcInJvYnVzdC1zdW1cIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW4odFswXSxlWzBdKSxhPTE7YTx0Lmxlbmd0aDsrK2Epcj1pKHIsbih0W2FdLGVbYV0pKTtyZXR1cm4gcn19LHtcInJvYnVzdC1zdW1cIjo1MDAsXCJ0d28tcHJvZHVjdFwiOjUyOH1dLDQ5MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJ0d28tcHJvZHVjdFwiKSxpPXQoXCJyb2J1c3Qtc3VtXCIpLGE9dChcInJvYnVzdC1zdWJ0cmFjdFwiKSxvPXQoXCJyb2J1c3Qtc2NhbGVcIikscz02O2Z1bmN0aW9uIGwodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoLTEpLG49MTtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9cltuLTFdPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxhPTAsbz0wO2E8dC5sZW5ndGg7KythKWEhPT1lJiYoaVtvKytdPXRbbl1bYV0pO3JldHVybiByfWZ1bmN0aW9uIGModCl7aWYoMT09PXQubGVuZ3RoKXJldHVybiB0WzBdO2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bXCJzdW0oXCIsdFswXSxcIixcIix0WzFdLFwiKVwiXS5qb2luKFwiXCIpO3ZhciBlPXQubGVuZ3RoPj4xO3JldHVybltcInN1bShcIixjKHQuc2xpY2UoMCxlKSksXCIsXCIsYyh0LnNsaWNlKGUpKSxcIilcIl0uam9pbihcIlwiKX1mdW5jdGlvbiB1KHQsZSl7aWYoXCJtXCI9PT10LmNoYXJBdCgwKSl7aWYoXCJ3XCI9PT1lLmNoYXJBdCgwKSl7dmFyIHI9dC5zcGxpdChcIltcIik7cmV0dXJuW1wid1wiLGUuc3Vic3RyKDEpLFwibVwiLHJbMF0uc3Vic3RyKDEpXS5qb2luKFwiXCIpfXJldHVybltcInByb2QoXCIsdCxcIixcIixlLFwiKVwiXS5qb2luKFwiXCIpfXJldHVybiB1KGUsdCl9ZnVuY3Rpb24gaCh0KXtpZigyPT09dC5sZW5ndGgpcmV0dXJuW1tcImRpZmYoXCIsdSh0WzBdWzBdLHRbMV1bMV0pLFwiLFwiLHUodFsxXVswXSx0WzBdWzFdKSxcIilcIl0uam9pbihcIlwiKV07Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2goW1wic2NhbGUoXCIsYyhoKGwodCxyKSkpLFwiLFwiLChuPXIsITAmbj9cIi1cIjpcIlwiKSx0WzBdW3JdLFwiKVwiXS5qb2luKFwiXCIpKTtyZXR1cm4gZTt2YXIgbn1mdW5jdGlvbiBmKHQsZSl7Zm9yKHZhciByPVtdLG49MDtuPGUtMjsrK24pci5wdXNoKFtcInByb2QobVwiLHQsXCJbXCIsbixcIl0sbVwiLHQsXCJbXCIsbixcIl0pXCJdLmpvaW4oXCJcIikpO3JldHVybiBjKHIpfWZ1bmN0aW9uIHAodCl7Zm9yKHZhciBlPVtdLHI9W10scz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKXtlW3JdPW5ldyBBcnJheSh0KTtmb3IodmFyIG49MDtuPHQ7KytuKWVbcl1bbl09W1wibVwiLG4sXCJbXCIsdC1yLTIsXCJdXCJdLmpvaW4oXCJcIil9cmV0dXJuIGV9KHQpLHU9MDt1PHQ7Kyt1KXNbMF1bdV09XCIxXCIsc1t0LTFdW3VdPVwid1wiK3U7Zm9yKHU9MDt1PHQ7Kyt1KTA9PSgxJnUpP2UucHVzaC5hcHBseShlLGgobChzLHUpKSk6ci5wdXNoLmFwcGx5KHIsaChsKHMsdSkpKTt2YXIgcD1jKGUpLGQ9YyhyKSxnPVwiZXhhY3RJblNwaGVyZVwiK3Qsdj1bXTtmb3IodT0wO3U8dDsrK3Updi5wdXNoKFwibVwiK3UpO3ZhciBtPVtcImZ1bmN0aW9uIFwiLGcsXCIoXCIsdi5qb2luKCksXCIpe1wiXTtmb3IodT0wO3U8dDsrK3Upe20ucHVzaChcInZhciB3XCIsdSxcIj1cIixmKHUsdCksXCI7XCIpO2Zvcih2YXIgeT0wO3k8dDsrK3kpeSE9PXUmJm0ucHVzaChcInZhciB3XCIsdSxcIm1cIix5LFwiPXNjYWxlKHdcIix1LFwiLG1cIix5LFwiWzBdKTtcIil9cmV0dXJuIG0ucHVzaChcInZhciBwPVwiLHAsXCIsbj1cIixkLFwiLGQ9ZGlmZihwLG4pO3JldHVybiBkW2QubGVuZ3RoLTFdO31yZXR1cm4gXCIsZyksbmV3IEZ1bmN0aW9uKFwic3VtXCIsXCJkaWZmXCIsXCJwcm9kXCIsXCJzY2FsZVwiLG0uam9pbihcIlwiKSkoaSxhLG4sbyl9dmFyIGQ9W2Z1bmN0aW9uKCl7cmV0dXJuIDB9LGZ1bmN0aW9uKCl7cmV0dXJuIDB9LGZ1bmN0aW9uKCl7cmV0dXJuIDB9XTshZnVuY3Rpb24oKXtmb3IoO2QubGVuZ3RoPD1zOylkLnB1c2gocChkLmxlbmd0aCkpO2Zvcih2YXIgdD1bXSxyPVtcInNsb3dcIl0sbj0wO248PXM7KytuKXQucHVzaChcImFcIituKSxyLnB1c2goXCJvXCIrbik7dmFyIGk9W1wiZnVuY3Rpb24gdGVzdEluU3BoZXJlKFwiLHQuam9pbigpLFwiKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gMDtcIl07Zm9yKG49MjtuPD1zOysrbilpLnB1c2goXCJjYXNlIFwiLG4sXCI6cmV0dXJuIG9cIixuLFwiKFwiLHQuc2xpY2UoMCxuKS5qb2luKCksXCIpO1wiKTtpLnB1c2goXCJ9dmFyIHM9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8YXJndW1lbnRzLmxlbmd0aDsrK2kpe3NbaV09YXJndW1lbnRzW2ldfTtyZXR1cm4gc2xvdyhzKTt9cmV0dXJuIHRlc3RJblNwaGVyZVwiKSxyLnB1c2goaS5qb2luKFwiXCIpKTt2YXIgYT1GdW5jdGlvbi5hcHBseSh2b2lkIDAscik7Zm9yKGUuZXhwb3J0cz1hLmFwcGx5KHZvaWQgMCxbZnVuY3Rpb24odCl7dmFyIGU9ZFt0Lmxlbmd0aF07cmV0dXJuIGV8fChlPWRbdC5sZW5ndGhdPXAodC5sZW5ndGgpKSxlLmFwcGx5KHZvaWQgMCx0KX1dLmNvbmNhdChkKSksbj0wO248PXM7KytuKWUuZXhwb3J0c1tuXT1kW25dfSgpfSx7XCJyb2J1c3Qtc2NhbGVcIjo0OTcsXCJyb2J1c3Qtc3VidHJhY3RcIjo0OTksXCJyb2J1c3Qtc3VtXCI6NTAwLFwidHdvLXByb2R1Y3RcIjo1Mjh9XSw0OTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicm9idXN0LWRldGVybWluYW50XCIpLGk9NjtmdW5jdGlvbiBhKHQpe2Zvcih2YXIgZT1cInJvYnVzdExpbmVhclNvbHZlXCIrdCtcImRcIixyPVtcImZ1bmN0aW9uIFwiLGUsXCIoQSxiKXtyZXR1cm4gW1wiXSxpPTA7aTx0OysraSl7ci5wdXNoKFwiZGV0KFtcIik7Zm9yKHZhciBhPTA7YTx0OysrYSl7YT4wJiZyLnB1c2goXCIsXCIpLHIucHVzaChcIltcIik7Zm9yKHZhciBvPTA7bzx0OysrbylvPjAmJnIucHVzaChcIixcIiksbz09PWk/ci5wdXNoKFwiK2JbXCIsYSxcIl1cIik6ci5wdXNoKFwiK0FbXCIsYSxcIl1bXCIsbyxcIl1cIik7ci5wdXNoKFwiXVwiKX1yLnB1c2goXCJdKSxcIil9ci5wdXNoKFwiZGV0KEEpXX1yZXR1cm4gXCIsZSk7dmFyIHM9bmV3IEZ1bmN0aW9uKFwiZGV0XCIsci5qb2luKFwiXCIpKTtyZXR1cm4gcyh0PDY/blt0XTpuKX12YXIgbz1bZnVuY3Rpb24oKXtyZXR1cm5bMF19LGZ1bmN0aW9uKHQsZSl7cmV0dXJuW1tlWzBdXSxbdFswXVswXV1dfV07IWZ1bmN0aW9uKCl7Zm9yKDtvLmxlbmd0aDxpOylvLnB1c2goYShvLmxlbmd0aCkpO2Zvcih2YXIgdD1bXSxyPVtcImZ1bmN0aW9uIGRpc3BhdGNoTGluZWFyU29sdmUoQSxiKXtzd2l0Y2goQS5sZW5ndGgpe1wiXSxuPTA7bjxpOysrbil0LnB1c2goXCJzXCIrbiksci5wdXNoKFwiY2FzZSBcIixuLFwiOnJldHVybiBzXCIsbixcIihBLGIpO1wiKTtyLnB1c2goXCJ9dmFyIHM9Q0FDSEVbQS5sZW5ndGhdO2lmKCFzKXM9Q0FDSEVbQS5sZW5ndGhdPWcoQS5sZW5ndGgpO3JldHVybiBzKEEsYil9cmV0dXJuIGRpc3BhdGNoTGluZWFyU29sdmVcIiksdC5wdXNoKFwiQ0FDSEVcIixcImdcIixyLmpvaW4oXCJcIikpO3ZhciBzPUZ1bmN0aW9uLmFwcGx5KHZvaWQgMCx0KTtmb3IoZS5leHBvcnRzPXMuYXBwbHkodm9pZCAwLG8uY29uY2F0KFtvLGFdKSksbj0wO248aTsrK24pZS5leHBvcnRzW25dPW9bbl19KCl9LHtcInJvYnVzdC1kZXRlcm1pbmFudFwiOjQ5MX1dLDQ5NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJ0d28tcHJvZHVjdFwiKSxpPXQoXCJyb2J1c3Qtc3VtXCIpLGE9dChcInJvYnVzdC1zY2FsZVwiKSxvPXQoXCJyb2J1c3Qtc3VidHJhY3RcIikscz01O2Z1bmN0aW9uIGwodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoLTEpLG49MTtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9cltuLTFdPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxhPTAsbz0wO2E8dC5sZW5ndGg7KythKWEhPT1lJiYoaVtvKytdPXRbbl1bYV0pO3JldHVybiByfWZ1bmN0aW9uIGModCl7aWYoMT09PXQubGVuZ3RoKXJldHVybiB0WzBdO2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bXCJzdW0oXCIsdFswXSxcIixcIix0WzFdLFwiKVwiXS5qb2luKFwiXCIpO3ZhciBlPXQubGVuZ3RoPj4xO3JldHVybltcInN1bShcIixjKHQuc2xpY2UoMCxlKSksXCIsXCIsYyh0LnNsaWNlKGUpKSxcIilcIl0uam9pbihcIlwiKX1mdW5jdGlvbiB1KHQpe2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bW1wic3VtKHByb2QoXCIsdFswXVswXSxcIixcIix0WzFdWzFdLFwiKSxwcm9kKC1cIix0WzBdWzFdLFwiLFwiLHRbMV1bMF0sXCIpKVwiXS5qb2luKFwiXCIpXTtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaChbXCJzY2FsZShcIixjKHUobCh0LHIpKSksXCIsXCIsKG49ciwxJm4/XCItXCI6XCJcIiksdFswXVtyXSxcIilcIl0uam9pbihcIlwiKSk7cmV0dXJuIGU7dmFyIG59ZnVuY3Rpb24gaCh0KXtmb3IodmFyIGU9W10scj1bXSxzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3Ipe2Vbcl09bmV3IEFycmF5KHQpO2Zvcih2YXIgbj0wO248dDsrK24pZVtyXVtuXT1bXCJtXCIsbixcIltcIix0LXItMSxcIl1cIl0uam9pbihcIlwiKX1yZXR1cm4gZX0odCksaD1bXSxmPTA7Zjx0OysrZikwPT0oMSZmKT9lLnB1c2guYXBwbHkoZSx1KGwocyxmKSkpOnIucHVzaC5hcHBseShyLHUobChzLGYpKSksaC5wdXNoKFwibVwiK2YpO3ZhciBwPWMoZSksZD1jKHIpLGc9XCJvcmllbnRhdGlvblwiK3QrXCJFeGFjdFwiLHY9W1wiZnVuY3Rpb24gXCIsZyxcIihcIixoLmpvaW4oKSxcIil7dmFyIHA9XCIscCxcIixuPVwiLGQsXCIsZD1zdWIocCxuKTtyZXR1cm4gZFtkLmxlbmd0aC0xXTt9O3JldHVybiBcIixnXS5qb2luKFwiXCIpO3JldHVybiBuZXcgRnVuY3Rpb24oXCJzdW1cIixcInByb2RcIixcInNjYWxlXCIsXCJzdWJcIix2KShpLG4sYSxvKX12YXIgZj1oKDMpLHA9aCg0KSxkPVtmdW5jdGlvbigpe3JldHVybiAwfSxmdW5jdGlvbigpe3JldHVybiAwfSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLXRbMF19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPSh0WzFdLXJbMV0pKihlWzBdLXJbMF0pLGE9KHRbMF0tclswXSkqKGVbMV0tclsxXSksbz1pLWE7aWYoaT4wKXtpZihhPD0wKXJldHVybiBvO249aSthfWVsc2V7aWYoIShpPDApKXJldHVybiBvO2lmKGE+PTApcmV0dXJuIG87bj0tKGkrYSl9dmFyIHM9My4zMzA2NjkwNzM4NzU0NzE2ZS0xNipuO3JldHVybiBvPj1zfHxvPD0tcz9vOmYodCxlLHIpfSxmdW5jdGlvbih0LGUscixuKXt2YXIgaT10WzBdLW5bMF0sYT1lWzBdLW5bMF0sbz1yWzBdLW5bMF0scz10WzFdLW5bMV0sbD1lWzFdLW5bMV0sYz1yWzFdLW5bMV0sdT10WzJdLW5bMl0saD1lWzJdLW5bMl0sZj1yWzJdLW5bMl0sZD1hKmMsZz1vKmwsdj1vKnMsbT1pKmMseT1pKmwseD1hKnMsYj11KihkLWcpK2gqKHYtbSkrZiooeS14KSxfPTcuNzcxNTYxMTcyMzc2MTAzZS0xNiooKE1hdGguYWJzKGQpK01hdGguYWJzKGcpKSpNYXRoLmFicyh1KSsoTWF0aC5hYnModikrTWF0aC5hYnMobSkpKk1hdGguYWJzKGgpKyhNYXRoLmFicyh5KStNYXRoLmFicyh4KSkqTWF0aC5hYnMoZikpO3JldHVybiBiPl98fC1iPl8/YjpwKHQsZSxyLG4pfV07IWZ1bmN0aW9uKCl7Zm9yKDtkLmxlbmd0aDw9czspZC5wdXNoKGgoZC5sZW5ndGgpKTtmb3IodmFyIHQ9W10scj1bXCJzbG93XCJdLG49MDtuPD1zOysrbil0LnB1c2goXCJhXCIrbiksci5wdXNoKFwib1wiK24pO3ZhciBpPVtcImZ1bmN0aW9uIGdldE9yaWVudGF0aW9uKFwiLHQuam9pbigpLFwiKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gMDtcIl07Zm9yKG49MjtuPD1zOysrbilpLnB1c2goXCJjYXNlIFwiLG4sXCI6cmV0dXJuIG9cIixuLFwiKFwiLHQuc2xpY2UoMCxuKS5qb2luKCksXCIpO1wiKTtpLnB1c2goXCJ9dmFyIHM9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8YXJndW1lbnRzLmxlbmd0aDsrK2kpe3NbaV09YXJndW1lbnRzW2ldfTtyZXR1cm4gc2xvdyhzKTt9cmV0dXJuIGdldE9yaWVudGF0aW9uXCIpLHIucHVzaChpLmpvaW4oXCJcIikpO3ZhciBhPUZ1bmN0aW9uLmFwcGx5KHZvaWQgMCxyKTtmb3IoZS5leHBvcnRzPWEuYXBwbHkodm9pZCAwLFtmdW5jdGlvbih0KXt2YXIgZT1kW3QubGVuZ3RoXTtyZXR1cm4gZXx8KGU9ZFt0Lmxlbmd0aF09aCh0Lmxlbmd0aCkpLGUuYXBwbHkodm9pZCAwLHQpfV0uY29uY2F0KGQpKSxuPTA7bjw9czsrK24pZS5leHBvcnRzW25dPWRbbl19KCl9LHtcInJvYnVzdC1zY2FsZVwiOjQ5NyxcInJvYnVzdC1zdWJ0cmFjdFwiOjQ5OSxcInJvYnVzdC1zdW1cIjo1MDAsXCJ0d28tcHJvZHVjdFwiOjUyOH1dLDQ5NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJyb2J1c3Qtc3VtXCIpLGk9dChcInJvYnVzdC1zY2FsZVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZigxPT09dC5sZW5ndGgpcmV0dXJuIGkoZSx0WzBdKTtpZigxPT09ZS5sZW5ndGgpcmV0dXJuIGkodCxlWzBdKTtpZigwPT09dC5sZW5ndGh8fDA9PT1lLmxlbmd0aClyZXR1cm5bMF07dmFyIHI9WzBdO2lmKHQubGVuZ3RoPGUubGVuZ3RoKWZvcih2YXIgYT0wO2E8dC5sZW5ndGg7KythKXI9bihyLGkoZSx0W2FdKSk7ZWxzZSBmb3IodmFyIGE9MDthPGUubGVuZ3RoOysrYSlyPW4ocixpKHQsZVthXSkpO3JldHVybiByfX0se1wicm9idXN0LXNjYWxlXCI6NDk3LFwicm9idXN0LXN1bVwiOjUwMH1dLDQ5NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJ0d28tcHJvZHVjdFwiKSxpPXQoXCJ0d28tc3VtXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoO2lmKDE9PT1yKXt2YXIgYT1uKHRbMF0sZSk7cmV0dXJuIGFbMF0/YTpbYVsxXV19dmFyIG89bmV3IEFycmF5KDIqcikscz1bLjEsLjFdLGw9Wy4xLC4xXSxjPTA7bih0WzBdLGUscyksc1swXSYmKG9bYysrXT1zWzBdKTtmb3IodmFyIHU9MTt1PHI7Kyt1KXtuKHRbdV0sZSxsKTt2YXIgaD1zWzFdO2koaCxsWzBdLHMpLHNbMF0mJihvW2MrK109c1swXSk7dmFyIGY9bFsxXSxwPXNbMV0sZD1mK3AsZz1kLWYsdj1wLWc7c1sxXT1kLHYmJihvW2MrK109dil9c1sxXSYmKG9bYysrXT1zWzFdKTswPT09YyYmKG9bYysrXT0wKTtyZXR1cm4gby5sZW5ndGg9YyxvfX0se1widHdvLXByb2R1Y3RcIjo1MjgsXCJ0d28tc3VtXCI6NTI5fV0sNDk4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPW4odCxyLGkpLG89bihlLHIsaSk7aWYoYT4wJiZvPjB8fGE8MCYmbzwwKXJldHVybiExO3ZhciBzPW4ocix0LGUpLGw9bihpLHQsZSk7aWYocz4wJiZsPjB8fHM8MCYmbDwwKXJldHVybiExO2lmKDA9PT1hJiYwPT09byYmMD09PXMmJjA9PT1sKXJldHVybiBmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9MDtpPDI7KytpKXt2YXIgYT10W2ldLG89ZVtpXSxzPU1hdGgubWluKGEsbyksbD1NYXRoLm1heChhLG8pLGM9cltpXSx1PW5baV0saD1NYXRoLm1pbihjLHUpLGY9TWF0aC5tYXgoYyx1KTtpZihmPHN8fGw8aClyZXR1cm4hMX1yZXR1cm4hMH0odCxlLHIsaSk7cmV0dXJuITB9O3ZhciBuPXQoXCJyb2J1c3Qtb3JpZW50YXRpb25cIilbM119LHtcInJvYnVzdC1vcmllbnRhdGlvblwiOjQ5NX1dLDQ5OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPTB8dC5sZW5ndGgsbj0wfGUubGVuZ3RoO2lmKDE9PT1yJiYxPT09bilyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj10K2Usbj1yLXQsaT10LShyLW4pKyhlLW4pO2lmKGkpcmV0dXJuW2kscl07cmV0dXJuW3JdfSh0WzBdLC1lWzBdKTt2YXIgaSxhLG89bmV3IEFycmF5KHIrbikscz0wLGw9MCxjPTAsdT1NYXRoLmFicyxoPXRbbF0sZj11KGgpLHA9LWVbY10sZD11KHApO2Y8ZD8oYT1oLChsKz0xKTxyJiYoaD10W2xdLGY9dShoKSkpOihhPXAsKGMrPTEpPG4mJihwPS1lW2NdLGQ9dShwKSkpO2w8ciYmZjxkfHxjPj1uPyhpPWgsKGwrPTEpPHImJihoPXRbbF0sZj11KGgpKSk6KGk9cCwoYys9MSk8biYmKHA9LWVbY10sZD11KHApKSk7dmFyIGcsdixtPWkrYSx5PW0taSx4PWEteSxiPXgsXz1tO2Zvcig7bDxyJiZjPG47KWY8ZD8oaT1oLChsKz0xKTxyJiYoaD10W2xdLGY9dShoKSkpOihpPXAsKGMrPTEpPG4mJihwPS1lW2NdLGQ9dShwKSkpLCh4PShhPWIpLSh5PShtPWkrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKGc9XyttKS0odj1nLV8pKSsobS12KSxfPWc7Zm9yKDtsPHI7KSh4PShhPWIpLSh5PShtPShpPWgpK2EpLWkpKSYmKG9bcysrXT14KSxiPV8tKChnPV8rbSktKHY9Zy1fKSkrKG0tdiksXz1nLChsKz0xKTxyJiYoaD10W2xdKTtmb3IoO2M8bjspKHg9KGE9YiktKHk9KG09KGk9cCkrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKGc9XyttKS0odj1nLV8pKSsobS12KSxfPWcsKGMrPTEpPG4mJihwPS1lW2NdKTtiJiYob1tzKytdPWIpO18mJihvW3MrK109Xyk7c3x8KG9bcysrXT0wKTtyZXR1cm4gby5sZW5ndGg9cyxvfX0se31dLDUwMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPTB8dC5sZW5ndGgsbj0wfGUubGVuZ3RoO2lmKDE9PT1yJiYxPT09bilyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj10K2Usbj1yLXQsaT10LShyLW4pKyhlLW4pO2lmKGkpcmV0dXJuW2kscl07cmV0dXJuW3JdfSh0WzBdLGVbMF0pO3ZhciBpLGEsbz1uZXcgQXJyYXkocituKSxzPTAsbD0wLGM9MCx1PU1hdGguYWJzLGg9dFtsXSxmPXUoaCkscD1lW2NdLGQ9dShwKTtmPGQ/KGE9aCwobCs9MSk8ciYmKGg9dFtsXSxmPXUoaCkpKTooYT1wLChjKz0xKTxuJiYocD1lW2NdLGQ9dShwKSkpO2w8ciYmZjxkfHxjPj1uPyhpPWgsKGwrPTEpPHImJihoPXRbbF0sZj11KGgpKSk6KGk9cCwoYys9MSk8biYmKHA9ZVtjXSxkPXUocCkpKTt2YXIgZyx2LG09aSthLHk9bS1pLHg9YS15LGI9eCxfPW07Zm9yKDtsPHImJmM8bjspZjxkPyhpPWgsKGwrPTEpPHImJihoPXRbbF0sZj11KGgpKSk6KGk9cCwoYys9MSk8biYmKHA9ZVtjXSxkPXUocCkpKSwoeD0oYT1iKS0oeT0obT1pK2EpLWkpKSYmKG9bcysrXT14KSxiPV8tKChnPV8rbSktKHY9Zy1fKSkrKG0tdiksXz1nO2Zvcig7bDxyOykoeD0oYT1iKS0oeT0obT0oaT1oKSthKS1pKSkmJihvW3MrK109eCksYj1fLSgoZz1fK20pLSh2PWctXykpKyhtLXYpLF89ZywobCs9MSk8ciYmKGg9dFtsXSk7Zm9yKDtjPG47KSh4PShhPWIpLSh5PShtPShpPXApK2EpLWkpKSYmKG9bcysrXT14KSxiPV8tKChnPV8rbSktKHY9Zy1fKSkrKG0tdiksXz1nLChjKz0xKTxuJiYocD1lW2NdKTtiJiYob1tzKytdPWIpO18mJihvW3MrK109Xyk7c3x8KG9bcysrXT0wKTtyZXR1cm4gby5sZW5ndGg9cyxvfX0se31dLDUwMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdDwwPy0xOnQ+MD8xOjB9fSx7fV0sNTAyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKG4odCkpfTt2YXIgbj10KFwiYm91bmRhcnktY2VsbHNcIiksaT10KFwicmVkdWNlLXNpbXBsaWNpYWwtY29tcGxleFwiKX0se1wiYm91bmRhcnktY2VsbHNcIjo4NixcInJlZHVjZS1zaW1wbGljaWFsLWNvbXBsZXhcIjo0ODJ9XSw1MDM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7cj1yfHwwLFwidW5kZWZpbmVkXCI9PXR5cGVvZiBzJiYocz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj0wLG49MDtuPGU7KytuKXI9MHxNYXRoLm1heChyLHRbbl0ubGVuZ3RoKTtyZXR1cm4gci0xfSh0KSk7aWYoMD09PXQubGVuZ3RofHxzPDEpcmV0dXJue2NlbGxzOltdLHZlcnRleElkczpbXSx2ZXJ0ZXhXZWlnaHRzOltdfTt2YXIgbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPWkubWFsbG9jVWludDgociksYT0wO2E8cjsrK2EpblthXT10W2FdPGV8MDtyZXR1cm4gbn0oZSwrciksYz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxvPWUqKGUrMSkvMipyfDAscz1pLm1hbGxvY1VpbnQzMigyKm8pLGw9MCxjPTA7YzxyOysrYylmb3IodmFyIHU9dFtjXSxlPXUubGVuZ3RoLGg9MDtoPGU7KytoKWZvcih2YXIgZj0wO2Y8aDsrK2Ype3ZhciBwPXVbZl0sZD11W2hdO3NbbCsrXT0wfE1hdGgubWluKHAsZCksc1tsKytdPTB8TWF0aC5tYXgocCxkKX1hKG4ocyxbbC8yfDAsMl0pKTtmb3IodmFyIGc9MixjPTI7YzxsO2MrPTIpc1tjLTJdPT09c1tjXSYmc1tjLTFdPT09c1tjKzFdfHwoc1tnKytdPXNbY10sc1tnKytdPXNbYysxXSk7cmV0dXJuIG4ocyxbZy8yfDAsMl0pfSh0LHMpLHU9ZnVuY3Rpb24odCxlLHIsYSl7Zm9yKHZhciBvPXQuZGF0YSxzPXQuc2hhcGVbMF0sbD1pLm1hbGxvY0RvdWJsZShzKSxjPTAsdT0wO3U8czsrK3Upe3ZhciBoPW9bMip1XSxmPW9bMip1KzFdO2lmKHJbaF0hPT1yW2ZdKXt2YXIgcD1lW2hdLGQ9ZVtmXTtvWzIqY109aCxvWzIqYysxXT1mLGxbYysrXT0oZC1hKS8oZC1wKX19cmV0dXJuIHQuc2hhcGVbMF09YyxuKGwsW2NdKX0oYyxlLGwsK3IpLGg9ZnVuY3Rpb24odCxlKXt2YXIgcj1pLm1hbGxvY0ludDMyKDIqZSksbj10LnNoYXBlWzBdLGE9dC5kYXRhO3JbMF09MDtmb3IodmFyIG89MCxzPTA7czxuOysrcyl7dmFyIGw9YVsyKnNdO2lmKGwhPT1vKXtmb3IoclsyKm8rMV09czsrK288bDspclsyKm9dPXMsclsyKm8rMV09cztyWzIqb109c319clsyKm8rMV09bjtmb3IoOysrbzxlOylyWzIqb109clsyKm8rMV09bjtyZXR1cm4gcn0oYywwfGUubGVuZ3RoKSxmPW8ocykodCxjLmRhdGEsaCxsKSxwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wfHQuc2hhcGVbMF0scj10LmRhdGEsbj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpbltpXT1bclsyKmldLHJbMippKzFdXTtyZXR1cm4gbn0oYyksZD1bXS5zbGljZS5jYWxsKHUuZGF0YSwwLHUuc2hhcGVbMF0pO3JldHVybiBpLmZyZWUobCksaS5mcmVlKGMuZGF0YSksaS5mcmVlKHUuZGF0YSksaS5mcmVlKGgpLHtjZWxsczpmLHZlcnRleElkczpwLHZlcnRleFdlaWdodHM6ZH19O3ZhciBuPXQoXCJuZGFycmF5XCIpLGk9dChcInR5cGVkYXJyYXktcG9vbFwiKSxhPXQoXCJuZGFycmF5LXNvcnRcIiksbz10KFwiLi9saWIvY29kZWdlblwiKX0se1wiLi9saWIvY29kZWdlblwiOjUwNCxuZGFycmF5OjQ0MyxcIm5kYXJyYXktc29ydFwiOjQ0MSxcInR5cGVkYXJyYXktcG9vbFwiOjUzMH1dLDUwNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1hW3RdO2V8fChlPWFbdF09ZnVuY3Rpb24odCl7dmFyIGU9MCxyPW5ldyBBcnJheSh0KzEpO3JbMF09W1tdXTtmb3IodmFyIGE9MTthPD10OysrYSlmb3IodmFyIG89clthXT1pKGEpLHM9MDtzPG8ubGVuZ3RoOysrcyllPU1hdGgubWF4KGUsb1thXS5sZW5ndGgpO3ZhciBsPVtcImZ1bmN0aW9uIEIoQyxFLGksail7XCIsXCJ2YXIgYT1NYXRoLm1pbihpLGopfDAsYj1NYXRoLm1heChpLGopfDAsbD1DWzIqYV0saD1DWzIqYSsxXTtcIixcIndoaWxlKGw8aCl7XCIsXCJ2YXIgbT0obCtoKT4+MSx2PUVbMiptKzFdO1wiLFwiaWYodj09PWIpe3JldHVybiBtfVwiLFwiaWYoYjx2KXtoPW19ZWxzZXtsPW0rMX1cIixcIn1cIixcInJldHVybiBsO1wiLFwifTtcIixcImZ1bmN0aW9uIGdldENvbnRvdXJcIix0LFwiZChGLEUsQyxTKXtcIixcInZhciBuPUYubGVuZ3RoLFI9W107XCIsXCJmb3IodmFyIGk9MDtpPG47KytpKXt2YXIgYz1GW2ldLGw9Yy5sZW5ndGg7XCJdO2Z1bmN0aW9uIGModCl7aWYoISh0Lmxlbmd0aDw9MCkpe2wucHVzaChcIlIucHVzaChcIik7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDsrK2Upe3ZhciByPXRbZV07ZT4wJiZsLnB1c2goXCIsXCIpLGwucHVzaChcIltcIik7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24pe3ZhciBpPXJbbl07bj4wJiZsLnB1c2goXCIsXCIpLGwucHVzaChcIkIoQyxFLGNbXCIsaVswXSxcIl0sY1tcIixpWzFdLFwiXSlcIil9bC5wdXNoKFwiXVwiKX1sLnB1c2goXCIpO1wiKX19Zm9yKHZhciBhPXQrMTthPjE7LS1hKXthPHQrMSYmbC5wdXNoKFwiZWxzZSBcIiksbC5wdXNoKFwiaWYobD09PVwiLGEsXCIpe1wiKTtmb3IodmFyIHU9W10scz0wO3M8YTsrK3MpdS5wdXNoKFwiKFNbY1tcIitzK1wiXV08PFwiK3MrXCIpXCIpO2wucHVzaChcInZhciBNPVwiLHUuam9pbihcIitcIiksXCI7aWYoTT09PTB8fE09PT1cIiwoMTw8YSktMSxcIil7Y29udGludWV9c3dpdGNoKE0pe1wiKTtmb3IodmFyIG89clthLTFdLHM9MDtzPG8ubGVuZ3RoOysrcylsLnB1c2goXCJjYXNlIFwiLHMsXCI6XCIpLGMob1tzXSksbC5wdXNoKFwiYnJlYWs7XCIpO2wucHVzaChcIn19XCIpfXJldHVybiBsLnB1c2goXCJ9cmV0dXJuIFI7fTtyZXR1cm4gZ2V0Q29udG91clwiLHQsXCJkXCIpLG5ldyBGdW5jdGlvbihcInBvb2xcIixsLmpvaW4oXCJcIikpKG4pfSh0KSk7cmV0dXJuIGV9O3ZhciBuPXQoXCJ0eXBlZGFycmF5LXBvb2xcIiksaT10KFwibWFyY2hpbmctc2ltcGxleC10YWJsZVwiKSxhPXt9fSx7XCJtYXJjaGluZy1zaW1wbGV4LXRhYmxlXCI6NDIwLFwidHlwZWRhcnJheS1wb29sXCI6NTMwfV0sNTA1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImJpdC10d2lkZGxlXCIpLGk9dChcInVuaW9uLWZpbmRcIik7ZnVuY3Rpb24gYSh0LGUpe3ZhciByPXQubGVuZ3RoLG49dC5sZW5ndGgtZS5sZW5ndGgsaT1NYXRoLm1pbjtpZihuKXJldHVybiBuO3N3aXRjaChyKXtjYXNlIDA6cmV0dXJuIDA7Y2FzZSAxOnJldHVybiB0WzBdLWVbMF07Y2FzZSAyOnJldHVybihzPXRbMF0rdFsxXS1lWzBdLWVbMV0pfHxpKHRbMF0sdFsxXSktaShlWzBdLGVbMV0pO2Nhc2UgMzp2YXIgYT10WzBdK3RbMV0sbz1lWzBdK2VbMV07aWYocz1hK3RbMl0tKG8rZVsyXSkpcmV0dXJuIHM7dmFyIHMsbD1pKHRbMF0sdFsxXSksYz1pKGVbMF0sZVsxXSk7cmV0dXJuKHM9aShsLHRbMl0pLWkoYyxlWzJdKSl8fGkobCt0WzJdLGEpLWkoYytlWzJdLG8pO2RlZmF1bHQ6dmFyIHU9dC5zbGljZSgwKTt1LnNvcnQoKTt2YXIgaD1lLnNsaWNlKDApO2guc29ydCgpO2Zvcih2YXIgZj0wO2Y8cjsrK2YpaWYobj11W2ZdLWhbZl0pcmV0dXJuIG47cmV0dXJuIDB9fWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gYSh0WzBdLGVbMF0pfWZ1bmN0aW9uIHModCxlKXtpZihlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpbltpXT1bdFtpXSxlW2ldXTtuLnNvcnQobyk7Zm9yKGk9MDtpPHI7KytpKXRbaV09bltpXVswXSxlW2ldPW5baV1bMV07cmV0dXJuIHR9cmV0dXJuIHQuc29ydChhKSx0fWZ1bmN0aW9uIGwodCl7aWYoMD09PXQubGVuZ3RoKXJldHVybltdO2Zvcih2YXIgZT0xLHI9dC5sZW5ndGgsbj0xO248cjsrK24pe3ZhciBpPXRbbl07aWYoYShpLHRbbi0xXSkpe2lmKG49PT1lKXtlKys7Y29udGludWV9dFtlKytdPWl9fXJldHVybiB0Lmxlbmd0aD1lLHR9ZnVuY3Rpb24gYyh0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGgtMSxpPS0xO3I8PW47KXt2YXIgbz1yK24+PjEscz1hKHRbb10sZSk7czw9MD8oMD09PXMmJihpPW8pLHI9bysxKTpzPjAmJihuPW8tMSl9cmV0dXJuIGl9ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodC5sZW5ndGgpLGk9MCxvPXIubGVuZ3RoO2k8bzsrK2kpcltpXT1bXTtmb3IodmFyIHM9W10sbD0oaT0wLGUubGVuZ3RoKTtpPGw7KytpKWZvcih2YXIgdT1lW2ldLGg9dS5sZW5ndGgsZj0xLHA9MTw8aDtmPHA7KytmKXtzLmxlbmd0aD1uLnBvcENvdW50KGYpO2Zvcih2YXIgZD0wLGc9MDtnPGg7KytnKWYmMTw8ZyYmKHNbZCsrXT11W2ddKTt2YXIgdj1jKHQscyk7aWYoISh2PDApKWZvcig7clt2KytdLnB1c2goaSksISh2Pj10Lmxlbmd0aHx8MCE9PWEodFt2XSxzKSk7KTt9cmV0dXJuIHJ9ZnVuY3Rpb24gaCh0LGUpe2lmKGU8MClyZXR1cm5bXTtmb3IodmFyIHI9W10saT0oMTw8ZSsxKS0xLGE9MDthPHQubGVuZ3RoOysrYSlmb3IodmFyIG89dFthXSxsPWk7bDwxPDxvLmxlbmd0aDtsPW4ubmV4dENvbWJpbmF0aW9uKGwpKXtmb3IodmFyIGM9bmV3IEFycmF5KGUrMSksdT0wLGg9MDtoPG8ubGVuZ3RoOysraClsJjE8PGgmJihjW3UrK109b1toXSk7ci5wdXNoKGMpfXJldHVybiBzKHIpfXIuZGltZW5zaW9uPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9TWF0aC5tYXgsbj0wLGk9dC5sZW5ndGg7bjxpOysrbillPXIoZSx0W25dLmxlbmd0aCk7cmV0dXJuIGUtMX0sci5jb3VudFZlcnRpY2VzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0tMSxyPU1hdGgubWF4LG49MCxpPXQubGVuZ3RoO248aTsrK24pZm9yKHZhciBhPXRbbl0sbz0wLHM9YS5sZW5ndGg7bzxzOysrbyllPXIoZSxhW29dKTtyZXR1cm4gZSsxfSxyLmNsb25lQ2VsbHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wLG49dC5sZW5ndGg7cjxuOysrcillW3JdPXRbcl0uc2xpY2UoMCk7cmV0dXJuIGV9LHIuY29tcGFyZUNlbGxzPWEsci5ub3JtYWxpemU9cyxyLnVuaXF1ZT1sLHIuZmluZENlbGw9YyxyLmluY2lkZW5jZT11LHIuZHVhbD1mdW5jdGlvbih0LGUpe2lmKCFlKXJldHVybiB1KGwoaCh0LDApKSx0KTtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09W107bj0wO2Zvcih2YXIgaT10Lmxlbmd0aDtuPGk7KytuKWZvcih2YXIgYT10W25dLG89MCxzPWEubGVuZ3RoO288czsrK28pclthW29dXS5wdXNoKG4pO3JldHVybiByfSxyLmV4cGxvZGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sYT0wfGkubGVuZ3RoLG89MSxsPTE8PGE7bzxsOysrbyl7Zm9yKHZhciBjPVtdLHU9MDt1PGE7Kyt1KW8+Pj51JjEmJmMucHVzaChpW3VdKTtlLnB1c2goYyl9cmV0dXJuIHMoZSl9LHIuc2tlbGV0b249aCxyLmJvdW5kYXJ5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWZvcih2YXIgaT10W3JdLGE9MCxvPWkubGVuZ3RoO2E8bzsrK2Epe2Zvcih2YXIgbD1uZXcgQXJyYXkoaS5sZW5ndGgtMSksYz0wLHU9MDtjPG87KytjKWMhPT1hJiYobFt1KytdPWlbY10pO2UucHVzaChsKX1yZXR1cm4gcyhlKX0sci5jb25uZWN0ZWRDb21wb25lbnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IGkoZSksbj0wO248dC5sZW5ndGg7KytuKWZvcih2YXIgYT10W25dLG89MDtvPGEubGVuZ3RoOysrbylmb3IodmFyIHM9bysxO3M8YS5sZW5ndGg7KytzKXIubGluayhhW29dLGFbc10pO3ZhciBsPVtdLGM9ci5yYW5rcztmb3Iobj0wO248Yy5sZW5ndGg7KytuKWNbbl09LTE7Zm9yKG49MDtuPHQubGVuZ3RoOysrbil7dmFyIHU9ci5maW5kKHRbbl1bMF0pO2NbdV08MD8oY1t1XT1sLmxlbmd0aCxsLnB1c2goW3Rbbl0uc2xpY2UoMCldKSk6bFtjW3VdXS5wdXNoKHRbbl0uc2xpY2UoMCkpfXJldHVybiBsfSh0LGUpOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1sKHMoaCh0LDApKSkscj1uZXcgaShlLmxlbmd0aCksbj0wO248dC5sZW5ndGg7KytuKWZvcih2YXIgYT10W25dLG89MDtvPGEubGVuZ3RoOysrbylmb3IodmFyIHU9YyhlLFthW29dXSksZj1vKzE7ZjxhLmxlbmd0aDsrK2Ypci5saW5rKHUsYyhlLFthW2ZdXSkpO3ZhciBwPVtdLGQ9ci5yYW5rcztmb3Iobj0wO248ZC5sZW5ndGg7KytuKWRbbl09LTE7Zm9yKG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGc9ci5maW5kKGMoZSxbdFtuXVswXV0pKTtkW2ddPDA/KGRbZ109cC5sZW5ndGgscC5wdXNoKFt0W25dLnNsaWNlKDApXSkpOnBbZFtnXV0ucHVzaCh0W25dLnNsaWNlKDApKX1yZXR1cm4gcH0odCl9fSx7XCJiaXQtdHdpZGRsZVwiOjgzLFwidW5pb24tZmluZFwiOjUzMX1dLDUwNjpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVs4M11bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjgzfV0sNTA3OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzUwNV1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7XCJiaXQtdHdpZGRsZVwiOjUwNixkdXA6NTA1LFwidW5pb24tZmluZFwiOjUwOH1dLDUwODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7dGhpcy5yb290cz1uZXcgQXJyYXkodCksdGhpcy5yYW5rcz1uZXcgQXJyYXkodCk7Zm9yKHZhciBlPTA7ZTx0OysrZSl0aGlzLnJvb3RzW2VdPWUsdGhpcy5yYW5rc1tlXT0wfWUuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3RzLmxlbmd0aH0sbi5wcm90b3R5cGUubWFrZVNldD1mdW5jdGlvbigpe3ZhciB0PXRoaXMucm9vdHMubGVuZ3RoO3JldHVybiB0aGlzLnJvb3RzLnB1c2godCksdGhpcy5yYW5rcy5wdXNoKDApLHR9LG4ucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMucm9vdHM7ZVt0XSE9PXQ7KXt2YXIgcj1lW3RdO2VbdF09ZVtyXSx0PXJ9cmV0dXJuIHR9LG4ucHJvdG90eXBlLmxpbms9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmZpbmQodCksbj10aGlzLmZpbmQoZSk7aWYociE9PW4pe3ZhciBpPXRoaXMucmFua3MsYT10aGlzLnJvb3RzLG89aVtyXSxzPWlbbl07bzxzP2Fbcl09bjpzPG8/YVtuXT1yOihhW25dPXIsKytpW3JdKX19fSx7fV0sNTA5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGE9ZS5sZW5ndGgsbz10Lmxlbmd0aCxzPW5ldyBBcnJheShhKSxsPW5ldyBBcnJheShhKSxjPW5ldyBBcnJheShhKSx1PW5ldyBBcnJheShhKSxoPTA7aDxhOysraClzW2hdPWxbaF09LTEsY1toXT0xLzAsdVtoXT0hMTtmb3IodmFyIGg9MDtoPG87KytoKXt2YXIgZj10W2hdO2lmKDIhPT1mLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJJbnB1dCBtdXN0IGJlIGEgZ3JhcGhcIik7dmFyIHA9ZlsxXSxkPWZbMF07LTEhPT1sW2RdP2xbZF09LTI6bFtkXT1wLC0xIT09c1twXT9zW3BdPS0yOnNbcF09ZH1mdW5jdGlvbiBnKHQpe2lmKHVbdF0pcmV0dXJuIDEvMDt2YXIgcixpLGEsbyxjLGg9c1t0XSxmPWxbdF07cmV0dXJuIGg8MHx8ZjwwPzEvMDoocj1lW3RdLGk9ZVtoXSxhPWVbZl0sbz1NYXRoLmFicyhuKHIsaSxhKSksYz1NYXRoLnNxcnQoTWF0aC5wb3coaVswXS1hWzBdLDIpK01hdGgucG93KGlbMV0tYVsxXSwyKSksby9jKX1mdW5jdGlvbiB2KHQsZSl7dmFyIHI9QVt0XSxuPUFbZV07QVt0XT1uLEFbZV09cixUW3JdPWUsVFtuXT10fWZ1bmN0aW9uIG0odCl7cmV0dXJuIGNbQVt0XV19ZnVuY3Rpb24geSh0KXtyZXR1cm4gMSZ0P3QtMT4+MToodD4+MSktMX1mdW5jdGlvbiB4KHQpe2Zvcih2YXIgZT1tKHQpOzspe3ZhciByPWUsbj0yKnQrMSxpPTIqKHQrMSksYT10O2lmKG48Uyl7dmFyIG89bShuKTtvPHImJihhPW4scj1vKX1pZihpPFMpe3ZhciBzPW0oaSk7czxyJiYoYT1pKX1pZihhPT09dClyZXR1cm4gdDt2KHQsYSksdD1hfX1mdW5jdGlvbiBiKHQpe2Zvcih2YXIgZT1tKHQpO3Q+MDspe3ZhciByPXkodCk7aWYocj49MCl7dmFyIG49bShyKTtpZihlPG4pe3YodCxyKSx0PXI7Y29udGludWV9fXJldHVybiB0fX1mdW5jdGlvbiBfKCl7aWYoUz4wKXt2YXIgdD1BWzBdO3JldHVybiB2KDAsUy0xKSxTLT0xLHgoMCksdH1yZXR1cm4tMX1mdW5jdGlvbiB3KHQsZSl7dmFyIHI9QVt0XTtyZXR1cm4gY1tyXT09PWU/dDooY1tyXT0tMS8wLGIodCksXygpLGNbcl09ZSxiKChTKz0xKS0xKSl9ZnVuY3Rpb24gayh0KXtpZighdVt0XSl7dVt0XT0hMDt2YXIgZT1zW3RdLHI9bFt0XTtzW3JdPj0wJiYoc1tyXT1lKSxsW2VdPj0wJiYobFtlXT1yKSxUW2VdPj0wJiZ3KFRbZV0sZyhlKSksVFtyXT49MCYmdyhUW3JdLGcocikpfX1mb3IodmFyIEE9W10sVD1uZXcgQXJyYXkoYSksaD0wO2g8YTsrK2gpe3ZhciBNPWNbaF09ZyhoKTtNPDEvMD8oVFtoXT1BLmxlbmd0aCxBLnB1c2goaCkpOlRbaF09LTF9Zm9yKHZhciBTPUEubGVuZ3RoLGg9Uz4+MTtoPj0wOy0taCl4KGgpO2Zvcig7Oyl7dmFyIEU9XygpO2lmKEU8MHx8Y1tFXT5yKWJyZWFrO2soRSl9Zm9yKHZhciBDPVtdLGg9MDtoPGE7KytoKXVbaF18fChUW2hdPUMubGVuZ3RoLEMucHVzaChlW2hdLnNsaWNlKCkpKTtDLmxlbmd0aDtmdW5jdGlvbiBMKHQsZSl7aWYodFtlXTwwKXJldHVybiBlO3ZhciByPWUsbj1lO2Rve3ZhciBpPXRbbl07aWYoIXVbbl18fGk8MHx8aT09PW4pYnJlYWs7aWYoaT10W249aV0sIXVbbl18fGk8MHx8aT09PW4pYnJlYWs7bj1pLHI9dFtyXX13aGlsZShyIT09bik7Zm9yKHZhciBhPWU7YSE9PW47YT10W2FdKXRbYV09bjtyZXR1cm4gbn12YXIgej1bXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPUwocyx0WzBdKSxyPUwobCx0WzFdKTtpZihlPj0wJiZyPj0wJiZlIT09cil7dmFyIG49VFtlXSxpPVRbcl07biE9PWkmJnoucHVzaChbbixpXSl9fSksaS51bmlxdWUoaS5ub3JtYWxpemUoeikpLHtwb3NpdGlvbnM6QyxlZGdlczp6fX07dmFyIG49dChcInJvYnVzdC1vcmllbnRhdGlvblwiKSxpPXQoXCJzaW1wbGljaWFsLWNvbXBsZXhcIil9LHtcInJvYnVzdC1vcmllbnRhdGlvblwiOjQ5NSxcInNpbXBsaWNpYWwtY29tcGxleFwiOjUwN31dLDUxMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGEsbyxzO2lmKGVbMF1bMF08ZVsxXVswXSlyPWVbMF0sYT1lWzFdO2Vsc2V7aWYoIShlWzBdWzBdPmVbMV1bMF0pKXJldHVybiBpKGUsdCk7cj1lWzFdLGE9ZVswXX1pZih0WzBdWzBdPHRbMV1bMF0pbz10WzBdLHM9dFsxXTtlbHNle2lmKCEodFswXVswXT50WzFdWzBdKSlyZXR1cm4taSh0LGUpO289dFsxXSxzPXRbMF19dmFyIGw9bihyLGEscyksYz1uKHIsYSxvKTtpZihsPDApe2lmKGM8PTApcmV0dXJuIGx9ZWxzZSBpZihsPjApe2lmKGM+PTApcmV0dXJuIGx9ZWxzZSBpZihjKXJldHVybiBjO2lmKGw9bihzLG8sYSksYz1uKHMsbyxyKSxsPDApe2lmKGM8PTApcmV0dXJuIGx9ZWxzZSBpZihsPjApe2lmKGM+PTApcmV0dXJuIGx9ZWxzZSBpZihjKXJldHVybiBjO3JldHVybiBhWzBdLXNbMF19O3ZhciBuPXQoXCJyb2J1c3Qtb3JpZW50YXRpb25cIik7ZnVuY3Rpb24gaSh0LGUpe3ZhciByLGksYSxvO2lmKGVbMF1bMF08ZVsxXVswXSlyPWVbMF0saT1lWzFdO2Vsc2V7aWYoIShlWzBdWzBdPmVbMV1bMF0pKXt2YXIgcz1NYXRoLm1pbih0WzBdWzFdLHRbMV1bMV0pLGw9TWF0aC5tYXgodFswXVsxXSx0WzFdWzFdKSxjPU1hdGgubWluKGVbMF1bMV0sZVsxXVsxXSksdT1NYXRoLm1heChlWzBdWzFdLGVbMV1bMV0pO3JldHVybiBsPGM/bC1jOnM+dT9zLXU6bC11fXI9ZVsxXSxpPWVbMF19dFswXVsxXTx0WzFdWzFdPyhhPXRbMF0sbz10WzFdKTooYT10WzFdLG89dFswXSk7dmFyIGg9bihpLHIsYSk7cmV0dXJuIGh8fCgoaD1uKGkscixvKSl8fG8taSl9fSx7XCJyb2J1c3Qtb3JpZW50YXRpb25cIjo0OTV9XSw1MTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9MiplLG49bmV3IEFycmF5KHIpLGE9MDthPGU7KythKXt2YXIgbD10W2FdLGM9bFswXVswXTxsWzFdWzBdO25bMiphXT1uZXcgaChsWzBdWzBdLGwsYyxhKSxuWzIqYSsxXT1uZXcgaChsWzFdWzBdLGwsIWMsYSl9bi5zb3J0KGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC54LWUueDtyZXR1cm4gcnx8KChyPXQuY3JlYXRlLWUuY3JlYXRlKXx8TWF0aC5taW4odC5zZWdtZW50WzBdWzFdLHQuc2VnbWVudFsxXVsxXSktTWF0aC5taW4oZS5zZWdtZW50WzBdWzFdLGUuc2VnbWVudFsxXVsxXSkpfSk7Zm9yKHZhciBmPWkobykscD1bXSxkPVtdLGc9W10sYT0wO2E8cjspe2Zvcih2YXIgdj1uW2FdLngsbT1bXTthPHI7KXt2YXIgeT1uW2FdO2lmKHkueCE9PXYpYnJlYWs7YSs9MSx5LnNlZ21lbnRbMF1bMF09PT15LngmJnkuc2VnbWVudFsxXVswXT09PXkueD95LmNyZWF0ZSYmKHkuc2VnbWVudFswXVsxXTx5LnNlZ21lbnRbMV1bMV0/KG0ucHVzaChuZXcgdSh5LnNlZ21lbnRbMF1bMV0seS5pbmRleCwhMCwhMCkpLG0ucHVzaChuZXcgdSh5LnNlZ21lbnRbMV1bMV0seS5pbmRleCwhMSwhMSkpKToobS5wdXNoKG5ldyB1KHkuc2VnbWVudFsxXVsxXSx5LmluZGV4LCEwLCExKSksbS5wdXNoKG5ldyB1KHkuc2VnbWVudFswXVsxXSx5LmluZGV4LCExLCEwKSkpKTpmPXkuY3JlYXRlP2YuaW5zZXJ0KHkuc2VnbWVudCx5LmluZGV4KTpmLnJlbW92ZSh5LnNlZ21lbnQpfXAucHVzaChmLnJvb3QpLGQucHVzaCh2KSxnLnB1c2gobSl9cmV0dXJuIG5ldyBzKHAsZCxnKX07dmFyIG49dChcImJpbmFyeS1zZWFyY2gtYm91bmRzXCIpLGk9dChcImZ1bmN0aW9uYWwtcmVkLWJsYWNrLXRyZWVcIiksYT10KFwicm9idXN0LW9yaWVudGF0aW9uXCIpLG89dChcIi4vbGliL29yZGVyLXNlZ21lbnRzXCIpO2Z1bmN0aW9uIHModCxlLHIpe3RoaXMuc2xhYnM9dCx0aGlzLmNvb3JkaW5hdGVzPWUsdGhpcy5ob3Jpem9udGFsPXJ9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0LnktZX1mdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciByPW51bGw7dDspe3ZhciBuLGksbz10LmtleTtvWzBdWzBdPG9bMV1bMF0/KG49b1swXSxpPW9bMV0pOihuPW9bMV0saT1vWzBdKTt2YXIgcz1hKG4saSxlKTtpZihzPDApdD10LmxlZnQ7ZWxzZSBpZihzPjApaWYoZVswXSE9PW9bMV1bMF0pcj10LHQ9dC5yaWdodDtlbHNle2lmKGw9Yyh0LnJpZ2h0LGUpKXJldHVybiBsO3Q9dC5sZWZ0fWVsc2V7aWYoZVswXSE9PW9bMV1bMF0pcmV0dXJuIHQ7dmFyIGw7aWYobD1jKHQucmlnaHQsZSkpcmV0dXJuIGw7dD10LmxlZnR9fXJldHVybiByfWZ1bmN0aW9uIHUodCxlLHIsbil7dGhpcy55PXQsdGhpcy5pbmRleD1lLHRoaXMuc3RhcnQ9cix0aGlzLmNsb3NlZD1ufWZ1bmN0aW9uIGgodCxlLHIsbil7dGhpcy54PXQsdGhpcy5zZWdtZW50PWUsdGhpcy5jcmVhdGU9cix0aGlzLmluZGV4PW59cy5wcm90b3R5cGUuY2FzdFVwPWZ1bmN0aW9uKHQpe3ZhciBlPW4ubGUodGhpcy5jb29yZGluYXRlcyx0WzBdKTtpZihlPDApcmV0dXJuLTE7dGhpcy5zbGFic1tlXTt2YXIgcj1jKHRoaXMuc2xhYnNbZV0sdCksaT0tMTtpZihyJiYoaT1yLnZhbHVlKSx0aGlzLmNvb3JkaW5hdGVzW2VdPT09dFswXSl7dmFyIHM9bnVsbDtpZihyJiYocz1yLmtleSksZT4wKXt2YXIgdT1jKHRoaXMuc2xhYnNbZS0xXSx0KTt1JiYocz9vKHUua2V5LHMpPjAmJihzPXUua2V5LGk9dS52YWx1ZSk6KGk9dS52YWx1ZSxzPXUua2V5KSl9dmFyIGg9dGhpcy5ob3Jpem9udGFsW2VdO2lmKGgubGVuZ3RoPjApe3ZhciBmPW4uZ2UoaCx0WzFdLGwpO2lmKGY8aC5sZW5ndGgpe3ZhciBwPWhbZl07aWYodFsxXT09PXAueSl7aWYocC5jbG9zZWQpcmV0dXJuIHAuaW5kZXg7Zm9yKDtmPGgubGVuZ3RoLTEmJmhbZisxXS55PT09dFsxXTspaWYoKHA9aFtmKz0xXSkuY2xvc2VkKXJldHVybiBwLmluZGV4O2lmKHAueT09PXRbMV0mJiFwLnN0YXJ0KXtpZigoZis9MSk+PWgubGVuZ3RoKXJldHVybiBpO3A9aFtmXX19aWYocC5zdGFydClpZihzKXt2YXIgZD1hKHNbMF0sc1sxXSxbdFswXSxwLnldKTtzWzBdWzBdPnNbMV1bMF0mJihkPS1kKSxkPjAmJihpPXAuaW5kZXgpfWVsc2UgaT1wLmluZGV4O2Vsc2UgcC55IT09dFsxXSYmKGk9cC5pbmRleCl9fX1yZXR1cm4gaX19LHtcIi4vbGliL29yZGVyLXNlZ21lbnRzXCI6NTEwLFwiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIjo4MixcImZ1bmN0aW9uYWwtcmVkLWJsYWNrLXRyZWVcIjoyMjcsXCJyb2J1c3Qtb3JpZW50YXRpb25cIjo0OTV9XSw1MTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicm9idXN0LWRvdC1wcm9kdWN0XCIpLGk9dChcInJvYnVzdC1zdW1cIik7ZnVuY3Rpb24gYSh0LGUpe3ZhciByPWkobih0LGUpLFtlW2UubGVuZ3RoLTFdXSk7cmV0dXJuIHJbci5sZW5ndGgtMV19ZnVuY3Rpb24gbyh0LGUscixuKXt2YXIgaT0tZS8obi1lKTtpPDA/aT0wOmk+MSYmKGk9MSk7Zm9yKHZhciBhPTEtaSxvPXQubGVuZ3RoLHM9bmV3IEFycmF5KG8pLGw9MDtsPG87KytsKXNbbF09aSp0W2xdK2EqcltsXTtyZXR1cm4gc31lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj1bXSxpPWEodFt0Lmxlbmd0aC0xXSxlKSxzPXRbdC5sZW5ndGgtMV0sbD10WzBdLGM9MDtjPHQubGVuZ3RoOysrYyxzPWwpe3ZhciB1PWEobD10W2NdLGUpO2lmKGk8MCYmdT4wfHxpPjAmJnU8MCl7dmFyIGg9byhzLHUsbCxpKTtyLnB1c2goaCksbi5wdXNoKGguc2xpY2UoKSl9dTwwP24ucHVzaChsLnNsaWNlKCkpOnU+MD9yLnB1c2gobC5zbGljZSgpKTooci5wdXNoKGwuc2xpY2UoKSksbi5wdXNoKGwuc2xpY2UoKSkpLGk9dX1yZXR1cm57cG9zaXRpdmU6cixuZWdhdGl2ZTpufX0sZS5leHBvcnRzLnBvc2l0aXZlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49YSh0W3QubGVuZ3RoLTFdLGUpLGk9dFt0Lmxlbmd0aC0xXSxzPXRbMF0sbD0wO2w8dC5sZW5ndGg7KytsLGk9cyl7dmFyIGM9YShzPXRbbF0sZSk7KG48MCYmYz4wfHxuPjAmJmM8MCkmJnIucHVzaChvKGksYyxzLG4pKSxjPj0wJiZyLnB1c2gocy5zbGljZSgpKSxuPWN9cmV0dXJuIHJ9LGUuZXhwb3J0cy5uZWdhdGl2ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPWEodFt0Lmxlbmd0aC0xXSxlKSxpPXRbdC5sZW5ndGgtMV0scz10WzBdLGw9MDtsPHQubGVuZ3RoOysrbCxpPXMpe3ZhciBjPWEocz10W2xdLGUpOyhuPDAmJmM+MHx8bj4wJiZjPDApJiZyLnB1c2gobyhpLGMscyxuKSksYzw9MCYmci5wdXNoKHMuc2xpY2UoKSksbj1jfXJldHVybiByfX0se1wicm9idXN0LWRvdC1wcm9kdWN0XCI6NDkyLFwicm9idXN0LXN1bVwiOjUwMH1dLDUxMzpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciB0PXtub3Rfc3RyaW5nOi9bXnNdLyxub3RfYm9vbDovW150XS8sbm90X3R5cGU6L1teVF0vLG5vdF9wcmltaXRpdmU6L1tedl0vLG51bWJlcjovW2RpZWZnXS8sbnVtZXJpY19hcmc6L1tiY2RpZWZndXhYXS8sanNvbjovW2pdLyxub3RfanNvbjovW15qXS8sdGV4dDovXlteXFx4MjVdKy8sbW9kdWxvOi9eXFx4MjV7Mn0vLHBsYWNlaG9sZGVyOi9eXFx4MjUoPzooWzEtOV1cXGQqKVxcJHxcXCgoW14pXSspXFwpKT8oXFwrKT8oMHwnW14kXSk/KC0pPyhcXGQrKT8oPzpcXC4oXFxkKykpPyhbYi1naWpvc3RUdXZ4WF0pLyxrZXk6L14oW2Etel9dW2Etel9cXGRdKikvaSxrZXlfYWNjZXNzOi9eXFwuKFthLXpfXVthLXpfXFxkXSopL2ksaW5kZXhfYWNjZXNzOi9eXFxbKFxcZCspXFxdLyxzaWduOi9eWystXS99O2Z1bmN0aW9uIGUocil7cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGksYSxvLHMsbCxjLHUsaCxmLHA9MSxkPXIubGVuZ3RoLGc9XCJcIjtmb3IoYT0wO2E8ZDthKyspaWYoXCJzdHJpbmdcIj09dHlwZW9mIHJbYV0pZys9clthXTtlbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiByW2FdKXtpZigocz1yW2FdKS5rZXlzKWZvcihpPW5bcF0sbz0wO288cy5rZXlzLmxlbmd0aDtvKyspe2lmKG51bGw9PWkpdGhyb3cgbmV3IEVycm9yKGUoJ1tzcHJpbnRmXSBDYW5ub3QgYWNjZXNzIHByb3BlcnR5IFwiJXNcIiBvZiB1bmRlZmluZWQgdmFsdWUgXCIlc1wiJyxzLmtleXNbb10scy5rZXlzW28tMV0pKTtpPWlbcy5rZXlzW29dXX1lbHNlIGk9cy5wYXJhbV9ubz9uW3MucGFyYW1fbm9dOm5bcCsrXTtpZih0Lm5vdF90eXBlLnRlc3Qocy50eXBlKSYmdC5ub3RfcHJpbWl0aXZlLnRlc3Qocy50eXBlKSYmaSBpbnN0YW5jZW9mIEZ1bmN0aW9uJiYoaT1pKCkpLHQubnVtZXJpY19hcmcudGVzdChzLnR5cGUpJiZcIm51bWJlclwiIT10eXBlb2YgaSYmaXNOYU4oaSkpdGhyb3cgbmV3IFR5cGVFcnJvcihlKFwiW3NwcmludGZdIGV4cGVjdGluZyBudW1iZXIgYnV0IGZvdW5kICVUXCIsaSkpO3N3aXRjaCh0Lm51bWJlci50ZXN0KHMudHlwZSkmJihoPWk+PTApLHMudHlwZSl7Y2FzZVwiYlwiOmk9cGFyc2VJbnQoaSwxMCkudG9TdHJpbmcoMik7YnJlYWs7Y2FzZVwiY1wiOmk9U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChpLDEwKSk7YnJlYWs7Y2FzZVwiZFwiOmNhc2VcImlcIjppPXBhcnNlSW50KGksMTApO2JyZWFrO2Nhc2VcImpcIjppPUpTT04uc3RyaW5naWZ5KGksbnVsbCxzLndpZHRoP3BhcnNlSW50KHMud2lkdGgpOjApO2JyZWFrO2Nhc2VcImVcIjppPXMucHJlY2lzaW9uP3BhcnNlRmxvYXQoaSkudG9FeHBvbmVudGlhbChzLnByZWNpc2lvbik6cGFyc2VGbG9hdChpKS50b0V4cG9uZW50aWFsKCk7YnJlYWs7Y2FzZVwiZlwiOmk9cy5wcmVjaXNpb24/cGFyc2VGbG9hdChpKS50b0ZpeGVkKHMucHJlY2lzaW9uKTpwYXJzZUZsb2F0KGkpO2JyZWFrO2Nhc2VcImdcIjppPXMucHJlY2lzaW9uP1N0cmluZyhOdW1iZXIoaS50b1ByZWNpc2lvbihzLnByZWNpc2lvbikpKTpwYXJzZUZsb2F0KGkpO2JyZWFrO2Nhc2VcIm9cIjppPShwYXJzZUludChpLDEwKT4+PjApLnRvU3RyaW5nKDgpO2JyZWFrO2Nhc2VcInNcIjppPVN0cmluZyhpKSxpPXMucHJlY2lzaW9uP2kuc3Vic3RyaW5nKDAscy5wcmVjaXNpb24pOmk7YnJlYWs7Y2FzZVwidFwiOmk9U3RyaW5nKCEhaSksaT1zLnByZWNpc2lvbj9pLnN1YnN0cmluZygwLHMucHJlY2lzaW9uKTppO2JyZWFrO2Nhc2VcIlRcIjppPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKS5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpLGk9cy5wcmVjaXNpb24/aS5zdWJzdHJpbmcoMCxzLnByZWNpc2lvbik6aTticmVhaztjYXNlXCJ1XCI6aT1wYXJzZUludChpLDEwKT4+PjA7YnJlYWs7Y2FzZVwidlwiOmk9aS52YWx1ZU9mKCksaT1zLnByZWNpc2lvbj9pLnN1YnN0cmluZygwLHMucHJlY2lzaW9uKTppO2JyZWFrO2Nhc2VcInhcIjppPShwYXJzZUludChpLDEwKT4+PjApLnRvU3RyaW5nKDE2KTticmVhaztjYXNlXCJYXCI6aT0ocGFyc2VJbnQoaSwxMCk+Pj4wKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX10Lmpzb24udGVzdChzLnR5cGUpP2crPWk6KCF0Lm51bWJlci50ZXN0KHMudHlwZSl8fGgmJiFzLnNpZ24/Zj1cIlwiOihmPWg/XCIrXCI6XCItXCIsaT1pLnRvU3RyaW5nKCkucmVwbGFjZSh0LnNpZ24sXCJcIikpLGM9cy5wYWRfY2hhcj9cIjBcIj09PXMucGFkX2NoYXI/XCIwXCI6cy5wYWRfY2hhci5jaGFyQXQoMSk6XCIgXCIsdT1zLndpZHRoLShmK2kpLmxlbmd0aCxsPXMud2lkdGgmJnU+MD9jLnJlcGVhdCh1KTpcIlwiLGcrPXMuYWxpZ24/ZitpK2w6XCIwXCI9PT1jP2YrbCtpOmwrZitpKX1yZXR1cm4gZ30oZnVuY3Rpb24oZSl7aWYoaVtlXSlyZXR1cm4gaVtlXTt2YXIgcixuPWUsYT1bXSxvPTA7Zm9yKDtuOyl7aWYobnVsbCE9PShyPXQudGV4dC5leGVjKG4pKSlhLnB1c2goclswXSk7ZWxzZSBpZihudWxsIT09KHI9dC5tb2R1bG8uZXhlYyhuKSkpYS5wdXNoKFwiJVwiKTtlbHNle2lmKG51bGw9PT0ocj10LnBsYWNlaG9sZGVyLmV4ZWMobikpKXRocm93IG5ldyBTeW50YXhFcnJvcihcIltzcHJpbnRmXSB1bmV4cGVjdGVkIHBsYWNlaG9sZGVyXCIpO2lmKHJbMl0pe298PTE7dmFyIHM9W10sbD1yWzJdLGM9W107aWYobnVsbD09PShjPXQua2V5LmV4ZWMobCkpKXRocm93IG5ldyBTeW50YXhFcnJvcihcIltzcHJpbnRmXSBmYWlsZWQgdG8gcGFyc2UgbmFtZWQgYXJndW1lbnQga2V5XCIpO2ZvcihzLnB1c2goY1sxXSk7XCJcIiE9PShsPWwuc3Vic3RyaW5nKGNbMF0ubGVuZ3RoKSk7KWlmKG51bGwhPT0oYz10LmtleV9hY2Nlc3MuZXhlYyhsKSkpcy5wdXNoKGNbMV0pO2Vsc2V7aWYobnVsbD09PShjPXQuaW5kZXhfYWNjZXNzLmV4ZWMobCkpKXRocm93IG5ldyBTeW50YXhFcnJvcihcIltzcHJpbnRmXSBmYWlsZWQgdG8gcGFyc2UgbmFtZWQgYXJndW1lbnQga2V5XCIpO3MucHVzaChjWzFdKX1yWzJdPXN9ZWxzZSBvfD0yO2lmKDM9PT1vKXRocm93IG5ldyBFcnJvcihcIltzcHJpbnRmXSBtaXhpbmcgcG9zaXRpb25hbCBhbmQgbmFtZWQgcGxhY2Vob2xkZXJzIGlzIG5vdCAoeWV0KSBzdXBwb3J0ZWRcIik7YS5wdXNoKHtwbGFjZWhvbGRlcjpyWzBdLHBhcmFtX25vOnJbMV0sa2V5czpyWzJdLHNpZ246clszXSxwYWRfY2hhcjpyWzRdLGFsaWduOnJbNV0sd2lkdGg6cls2XSxwcmVjaXNpb246cls3XSx0eXBlOnJbOF19KX1uPW4uc3Vic3RyaW5nKHJbMF0ubGVuZ3RoKX1yZXR1cm4gaVtlXT1hfShyKSxhcmd1bWVudHMpfWZ1bmN0aW9uIG4odCxyKXtyZXR1cm4gZS5hcHBseShudWxsLFt0XS5jb25jYXQocnx8W10pKX12YXIgaT1PYmplY3QuY3JlYXRlKG51bGwpO1widW5kZWZpbmVkXCIhPXR5cGVvZiByJiYoci5zcHJpbnRmPWUsci52c3ByaW50Zj1uKSxcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiYod2luZG93LnNwcmludGY9ZSx3aW5kb3cudnNwcmludGY9bil9KCl9LHt9XSw1MTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicGFyZW50aGVzaXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZihudWxsPT10KXRocm93IEVycm9yKFwiRmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIGEgc3RyaW5nXCIpO2lmKG51bGw9PWUpdGhyb3cgRXJyb3IoXCJTZXBhcmF0b3Igc2hvdWxkIGJlIGEgc3RyaW5nIG9yIGEgUmVnRXhwXCIpO3I/KFwic3RyaW5nXCI9PXR5cGVvZiByfHxBcnJheS5pc0FycmF5KHIpKSYmKHI9e2lnbm9yZTpyfSk6cj17fSxudWxsPT1yLmVzY2FwZSYmKHIuZXNjYXBlPSEwKSxudWxsPT1yLmlnbm9yZT9yLmlnbm9yZT1bXCJbXVwiLFwiKClcIixcInt9XCIsXCI8PlwiLCdcIlwiJyxcIicnXCIsXCJgYFwiLFwiXFx1MjAxY1xcdTIwMWRcIixcIlxceGFiXFx4YmJcIl06KFwic3RyaW5nXCI9PXR5cGVvZiByLmlnbm9yZSYmKHIuaWdub3JlPVtyLmlnbm9yZV0pLHIuaWdub3JlPXIuaWdub3JlLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQubGVuZ3RoJiYodCs9dCksdH0pKTt2YXIgaT1uLnBhcnNlKHQse2ZsYXQ6ITAsYnJhY2tldHM6ci5pZ25vcmV9KSxhPWlbMF0uc3BsaXQoZSk7aWYoci5lc2NhcGUpe2Zvcih2YXIgbz1bXSxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc10sYz1hW3MrMV07XCJcXFxcXCI9PT1sW2wubGVuZ3RoLTFdJiZcIlxcXFxcIiE9PWxbbC5sZW5ndGgtMl0/KG8ucHVzaChsK2UrYykscysrKTpvLnB1c2gobCl9YT1vfWZvcihzPTA7czxhLmxlbmd0aDtzKyspaVswXT1hW3NdLGFbc109bi5zdHJpbmdpZnkoaSx7ZmxhdDohMH0pO3JldHVybiBhfX0se3BhcmVudGhlc2lzOjQ1MX1dLDUxNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj1uZXcgQXJyYXkoZSksaT1uZXcgQXJyYXkoZSksYT1uZXcgQXJyYXkoZSksbz1uZXcgQXJyYXkoZSkscz1uZXcgQXJyYXkoZSksbD0wO2w8ZTsrK2wpcltsXT0tMSxuW2xdPTAsaVtsXT0hMSxhW2xdPTAsb1tsXT0tMSxzW2xdPVtdO3ZhciBjLHU9MCxoPVtdLGY9W107ZnVuY3Rpb24gcChlKXt2YXIgbD1bZV0sYz1bZV07Zm9yKHJbZV09bltlXT11LGlbZV09ITAsdSs9MTtjLmxlbmd0aD4wOyl7ZT1jW2MubGVuZ3RoLTFdO3ZhciBwPXRbZV07aWYoYVtlXTxwLmxlbmd0aCl7Zm9yKHZhciBkPWFbZV07ZDxwLmxlbmd0aDsrK2Qpe3ZhciBnPXBbZF07aWYocltnXTwwKXtyW2ddPW5bZ109dSxpW2ddPSEwLHUrPTEsbC5wdXNoKGcpLGMucHVzaChnKTticmVha31pW2ddJiYobltlXT0wfE1hdGgubWluKG5bZV0sbltnXSkpLG9bZ10+PTAmJnNbZV0ucHVzaChvW2ddKX1hW2VdPWR9ZWxzZXtpZihuW2VdPT09cltlXSl7Zm9yKHZhciB2PVtdLG09W10seT0wLGQ9bC5sZW5ndGgtMTtkPj0wOy0tZCl7dmFyIHg9bFtkXTtpZihpW3hdPSExLHYucHVzaCh4KSxtLnB1c2goc1t4XSkseSs9c1t4XS5sZW5ndGgsb1t4XT1oLmxlbmd0aCx4PT09ZSl7bC5sZW5ndGg9ZDticmVha319aC5wdXNoKHYpO2Zvcih2YXIgYj1uZXcgQXJyYXkoeSksZD0wO2Q8bS5sZW5ndGg7ZCsrKWZvcih2YXIgXz0wO188bVtkXS5sZW5ndGg7XysrKWJbLS15XT1tW2RdW19dO2YucHVzaChiKX1jLnBvcCgpfX19Zm9yKHZhciBsPTA7bDxlOysrbClyW2xdPDAmJnAobCk7Zm9yKHZhciBsPTA7bDxmLmxlbmd0aDtsKyspe3ZhciBkPWZbbF07aWYoMCE9PWQubGVuZ3RoKXtkLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSksYz1bZFswXV07Zm9yKHZhciBnPTE7ZzxkLmxlbmd0aDtnKyspZFtnXSE9PWRbZy0xXSYmYy5wdXNoKGRbZ10pO2ZbbF09Y319cmV0dXJue2NvbXBvbmVudHM6aCxhZGphY2VuY3lMaXN0OmZ9fX0se31dLDUxNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHQuZGltZW5zaW9uPD0wKXJldHVybntwb3NpdGlvbnM6W10sY2VsbHM6W119O2lmKDE9PT10LmRpbWVuc2lvbilyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9YSh0LGUpLG49ci5sZW5ndGgsaT1uZXcgQXJyYXkobiksbz1uZXcgQXJyYXkobikscz0wO3M8bjsrK3MpaVtzXT1bcltzXV0sb1tzXT1bc107cmV0dXJue3Bvc2l0aW9uczppLGNlbGxzOm99fSh0LGUpO3ZhciByPXQub3JkZXIuam9pbigpK1wiLVwiK3QuZHR5cGUscz1vW3JdLGU9K2V8fDA7c3x8KHM9b1tyXT1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoLGE9W1wiJ3VzZSBzdHJpY3QnO1wiXSxvPVwic3VyZmFjZU5ldHNcIit0LmpvaW4oXCJfXCIpK1wiZFwiK2U7YS5wdXNoKFwidmFyIGNvbnRvdXI9Z2VuQ29udG91cih7XCIsXCJvcmRlcjpbXCIsdC5qb2luKCksXCJdLFwiLFwic2NhbGFyQXJndW1lbnRzOiAzLFwiLFwicGhhc2U6ZnVuY3Rpb24gcGhhc2VGdW5jKHAsYSxiLGMpIHsgcmV0dXJuIChwID4gYyl8MCB9LFwiKSxcImdlbmVyaWNcIj09PWUmJmEucHVzaChcImdldHRlcnM6WzBdLFwiKTtmb3IodmFyIHM9W10sbD1bXSxjPTA7YzxyOysrYylzLnB1c2goXCJkXCIrYyksbC5wdXNoKFwiZFwiK2MpO2Zvcih2YXIgYz0wO2M8MTw8cjsrK2Mpcy5wdXNoKFwidlwiK2MpLGwucHVzaChcInZcIitjKTtmb3IodmFyIGM9MDtjPDE8PHI7KytjKXMucHVzaChcInBcIitjKSxsLnB1c2goXCJwXCIrYyk7cy5wdXNoKFwiYVwiLFwiYlwiLFwiY1wiKSxsLnB1c2goXCJhXCIsXCJjXCIpLGEucHVzaChcInZlcnRleDpmdW5jdGlvbiB2ZXJ0ZXhGdW5jKFwiLHMuam9pbigpLFwiKXtcIik7Zm9yKHZhciB1PVtdLGM9MDtjPDE8PHI7KytjKXUucHVzaChcIihwXCIrYytcIjw8XCIrYytcIilcIik7YS5wdXNoKFwidmFyIG09KFwiLHUuam9pbihcIitcIiksXCIpfDA7aWYobT09PTB8fG09PT1cIiwoMTw8KDE8PHIpKS0xLFwiKXtyZXR1cm59XCIpO3ZhciBoPVtdLGY9W107MTw8KDE8PHIpPD0xMjg/KGEucHVzaChcInN3aXRjaChtKXtcIiksZj1hKTphLnB1c2goXCJzd2l0Y2gobT4+Pjcpe1wiKTtmb3IodmFyIGM9MDtjPDE8PCgxPDxyKTsrK2Mpe2lmKDE8PCgxPDxyKT4xMjgmJmMlMTI4PT0wKXtoLmxlbmd0aD4wJiZmLnB1c2goXCJ9fVwiKTt2YXIgcD1cInZFeHRyYVwiK2gubGVuZ3RoO2EucHVzaChcImNhc2UgXCIsYz4+PjcsXCI6XCIscCxcIihtJjB4N2YsXCIsbC5qb2luKCksXCIpO2JyZWFrO1wiKSxmPVtcImZ1bmN0aW9uIFwiLHAsXCIobSxcIixsLmpvaW4oKSxcIil7c3dpdGNoKG0pe1wiXSxoLnB1c2goZil9Zi5wdXNoKFwiY2FzZSBcIiwxMjcmYyxcIjpcIik7Zm9yKHZhciBkPW5ldyBBcnJheShyKSxnPW5ldyBBcnJheShyKSx2PW5ldyBBcnJheShyKSxtPW5ldyBBcnJheShyKSx5PTAseD0wO3g8cjsrK3gpZFt4XT1bXSxnW3hdPVtdLHZbeF09MCxtW3hdPTA7Zm9yKHZhciB4PTA7eDwxPDxyOysreClmb3IodmFyIGI9MDtiPHI7KytiKXt2YXIgXz14XjE8PGI7aWYoIShfPngpJiYhKGMmMTw8XykhPSEoYyYxPDx4KSl7dmFyIHc9MTtjJjE8PF8/Z1tiXS5wdXNoKFwidlwiK18rXCItdlwiK3gpOihnW2JdLnB1c2goXCJ2XCIreCtcIi12XCIrXyksdz0tdyksdzwwPyhkW2JdLnB1c2goXCItdlwiK3grXCItdlwiK18pLHZbYl0rPTIpOihkW2JdLnB1c2goXCJ2XCIreCtcIit2XCIrXyksdltiXS09MikseSs9MTtmb3IodmFyIGs9MDtrPHI7KytrKWshPT1iJiYoXyYxPDxrP21ba10rPTE6bVtrXS09MSl9fWZvcih2YXIgQT1bXSxiPTA7YjxyOysrYilpZigwPT09ZFtiXS5sZW5ndGgpQS5wdXNoKFwiZFwiK2IrXCItMC41XCIpO2Vsc2V7dmFyIFQ9XCJcIjt2W2JdPDA/VD12W2JdK1wiKmNcIjp2W2JdPjAmJihUPVwiK1wiK3ZbYl0rXCIqY1wiKTt2YXIgTT1kW2JdLmxlbmd0aC95Ki41LFM9LjUrbVtiXS95Ki41O0EucHVzaChcImRcIitiK1wiLVwiK1MrXCItXCIrTStcIiooXCIrZFtiXS5qb2luKFwiK1wiKStUK1wiKS8oXCIrZ1tiXS5qb2luKFwiK1wiKStcIilcIil9Zi5wdXNoKFwiYS5wdXNoKFtcIixBLmpvaW4oKSxcIl0pO1wiLFwiYnJlYWs7XCIpfWEucHVzaChcIn19LFwiKSxoLmxlbmd0aD4wJiZmLnB1c2goXCJ9fVwiKTtmb3IodmFyIEU9W10sYz0wO2M8MTw8ci0xOysrYylFLnB1c2goXCJ2XCIrYyk7RS5wdXNoKFwiYzBcIixcImMxXCIsXCJwMFwiLFwicDFcIixcImFcIixcImJcIixcImNcIiksYS5wdXNoKFwiY2VsbDpmdW5jdGlvbiBjZWxsRnVuYyhcIixFLmpvaW4oKSxcIil7XCIpO3ZhciBDPWkoci0xKTthLnB1c2goXCJpZihwMCl7Yi5wdXNoKFwiLEMubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiW1wiK3QubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwidlwiK3R9KStcIl1cIn0pLmpvaW4oKSxcIil9ZWxzZXtiLnB1c2goXCIsQy5tYXAoZnVuY3Rpb24odCl7dmFyIGU9dC5zbGljZSgpO3JldHVybiBlLnJldmVyc2UoKSxcIltcIitlLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cInZcIit0fSkrXCJdXCJ9KS5qb2luKCksXCIpfX19KTtmdW5jdGlvbiBcIixvLFwiKGFycmF5LGxldmVsKXt2YXIgdmVydHM9W10sY2VsbHM9W107Y29udG91cihhcnJheSx2ZXJ0cyxjZWxscyxsZXZlbCk7cmV0dXJuIHtwb3NpdGlvbnM6dmVydHMsY2VsbHM6Y2VsbHN9O30gcmV0dXJuIFwiLG8sXCI7XCIpO2Zvcih2YXIgYz0wO2M8aC5sZW5ndGg7KytjKWEucHVzaChoW2NdLmpvaW4oXCJcIikpO3JldHVybiBuZXcgRnVuY3Rpb24oXCJnZW5Db250b3VyXCIsYS5qb2luKFwiXCIpKShuKX0odC5vcmRlcix0LmR0eXBlKSk7cmV0dXJuIHModCxlKX07dmFyIG49dChcIm5kYXJyYXktZXh0cmFjdC1jb250b3VyXCIpLGk9dChcInRyaWFuZ3VsYXRlLWh5cGVyY3ViZVwiKSxhPXQoXCJ6ZXJvLWNyb3NzaW5nc1wiKTt2YXIgbz17fX0se1wibmRhcnJheS1leHRyYWN0LWNvbnRvdXJcIjo0MzIsXCJ0cmlhbmd1bGF0ZS1oeXBlcmN1YmVcIjo1MjYsXCJ6ZXJvLWNyb3NzaW5nc1wiOjU1OX1dLDUxNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdDtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KHQpKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPVtdLG49ITAsaT0hMSxhPXZvaWQgMDt0cnl7Zm9yKHZhciBvLHM9dFtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShvPXMubmV4dCgpKS5kb25lKSYmKHIucHVzaChvLnZhbHVlKSwhZXx8ci5sZW5ndGghPT1lKTtuPSEwKTt9Y2F0Y2godCl7aT0hMCxhPXR9ZmluYWxseXt0cnl7IW4mJnMucmV0dXJuJiZzLnJldHVybigpfWZpbmFsbHl7aWYoaSl0aHJvdyBhfX1yZXR1cm4gcn0odCxlKTt0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKX19KCksaT0yKk1hdGguUEksYT1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz10LngsbD10Lnk7cmV0dXJue3g6bioocyo9ZSktaSoobCo9cikrYSx5OmkqcytuKmwrb319LG89ZnVuY3Rpb24odCxlKXt2YXIgcj0uNTUxOTE1MDI0NDk0LG49TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KSxhPU1hdGguY29zKHQrZSksbz1NYXRoLnNpbih0K2UpO3JldHVyblt7eDpuLWkqcix5OmkrbipyfSx7eDphK28qcix5Om8tYSpyfSx7eDphLHk6b31dfSxzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQqbi1lKnI8MD8tMToxLGE9KHQqcitlKm4pLyhNYXRoLnNxcnQodCp0K2UqZSkqTWF0aC5zcXJ0KHQqdCtlKmUpKTtyZXR1cm4gYT4xJiYoYT0xKSxhPC0xJiYoYT0tMSksaSpNYXRoLmFjb3MoYSl9O3IuZGVmYXVsdD1mdW5jdGlvbih0KXt2YXIgZT10LnB4LHI9dC5weSxsPXQuY3gsYz10LmN5LHU9dC5yeCxoPXQucnksZj10LnhBeGlzUm90YXRpb24scD12b2lkIDA9PT1mPzA6ZixkPXQubGFyZ2VBcmNGbGFnLGc9dm9pZCAwPT09ZD8wOmQsdj10LnN3ZWVwRmxhZyxtPXZvaWQgMD09PXY/MDp2LHk9W107aWYoMD09PXV8fDA9PT1oKXJldHVybltdO3ZhciB4PU1hdGguc2luKHAqaS8zNjApLGI9TWF0aC5jb3MocCppLzM2MCksXz1iKihlLWwpLzIreCooci1jKS8yLHc9LXgqKGUtbCkvMitiKihyLWMpLzI7aWYoMD09PV8mJjA9PT13KXJldHVybltdO3U9TWF0aC5hYnModSksaD1NYXRoLmFicyhoKTt2YXIgaz1NYXRoLnBvdyhfLDIpL01hdGgucG93KHUsMikrTWF0aC5wb3codywyKS9NYXRoLnBvdyhoLDIpO2s+MSYmKHUqPU1hdGguc3FydChrKSxoKj1NYXRoLnNxcnQoaykpO3ZhciBBPWZ1bmN0aW9uKHQsZSxyLG4sYSxvLGwsYyx1LGgsZixwKXt2YXIgZD1NYXRoLnBvdyhhLDIpLGc9TWF0aC5wb3cobywyKSx2PU1hdGgucG93KGYsMiksbT1NYXRoLnBvdyhwLDIpLHk9ZCpnLWQqbS1nKnY7eTwwJiYoeT0wKSx5Lz1kKm0rZyp2O3ZhciB4PSh5PU1hdGguc3FydCh5KSoobD09PWM/LTE6MSkpKmEvbypwLGI9eSotby9hKmYsXz1oKngtdSpiKyh0K3IpLzIsdz11KngraCpiKyhlK24pLzIsaz0oZi14KS9hLEE9KHAtYikvbyxUPSgtZi14KS9hLE09KC1wLWIpL28sUz1zKDEsMCxrLEEpLEU9cyhrLEEsVCxNKTtyZXR1cm4gMD09PWMmJkU+MCYmKEUtPWkpLDE9PT1jJiZFPDAmJihFKz1pKSxbXyx3LFMsRV19KGUscixsLGMsdSxoLGcsbSx4LGIsXyx3KSxUPW4oQSw0KSxNPVRbMF0sUz1UWzFdLEU9VFsyXSxDPVRbM10sTD1NYXRoLmFicyhDKS8oaS80KTtNYXRoLmFicygxLUwpPDFlLTcmJihMPTEpO3ZhciB6PU1hdGgubWF4KE1hdGguY2VpbChMKSwxKTtDLz16O2Zvcih2YXIgTz0wO088ejtPKyspeS5wdXNoKG8oRSxDKSksRSs9QztyZXR1cm4geS5tYXAoZnVuY3Rpb24odCl7dmFyIGU9YSh0WzBdLHUsaCxiLHgsTSxTKSxyPWUueCxuPWUueSxpPWEodFsxXSx1LGgsYix4LE0sUyksbz1pLngscz1pLnksbD1hKHRbMl0sdSxoLGIseCxNLFMpO3JldHVybnt4MTpyLHkxOm4seDI6byx5MjpzLHg6bC54LHk6bC55fX0pfSxlLmV4cG9ydHM9ci5kZWZhdWx0fSx7fV0sNTE4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInBhcnNlLXN2Zy1wYXRoXCIpLGk9dChcImFicy1zdmctcGF0aFwiKSxhPXQoXCJub3JtYWxpemUtc3ZnLXBhdGhcIiksbz10KFwiaXMtc3ZnLXBhdGhcIikscz10KFwiYXNzZXJ0XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtBcnJheS5pc0FycmF5KHQpJiYxPT09dC5sZW5ndGgmJlwic3RyaW5nXCI9PXR5cGVvZiB0WzBdJiYodD10WzBdKTtcInN0cmluZ1wiPT10eXBlb2YgdCYmKHMobyh0KSxcIlN0cmluZyBpcyBub3QgYW4gU1ZHIHBhdGguXCIpLHQ9bih0KSk7aWYocyhBcnJheS5pc0FycmF5KHQpLFwiQXJndW1lbnQgc2hvdWxkIGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHBhdGggc2VnbWVudHMuXCIpLHQ9aSh0KSwhKHQ9YSh0KSkubGVuZ3RoKXJldHVyblswLDAsMCwwXTtmb3IodmFyIGU9WzEvMCwxLzAsLTEvMCwtMS8wXSxyPTAsbD10Lmxlbmd0aDtyPGw7cisrKWZvcih2YXIgYz10W3JdLnNsaWNlKDEpLHU9MDt1PGMubGVuZ3RoO3UrPTIpY1t1KzBdPGVbMF0mJihlWzBdPWNbdSswXSksY1t1KzFdPGVbMV0mJihlWzFdPWNbdSsxXSksY1t1KzBdPmVbMl0mJihlWzJdPWNbdSswXSksY1t1KzFdPmVbM10mJihlWzNdPWNbdSsxXSk7cmV0dXJuIGV9fSx7XCJhYnMtc3ZnLXBhdGhcIjo1MSxhc3NlcnQ6NTksXCJpcy1zdmctcGF0aFwiOjQxNyxcIm5vcm1hbGl6ZS1zdmctcGF0aFwiOjUxOSxcInBhcnNlLXN2Zy1wYXRoXCI6NDUzfV0sNTE5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPVtdLG89MCxzPTAsbD0wLGM9MCx1PW51bGwsaD1udWxsLGY9MCxwPTAsZD0wLGc9dC5sZW5ndGg7ZDxnO2QrKyl7dmFyIHY9dFtkXSxtPXZbMF07c3dpdGNoKG0pe2Nhc2VcIk1cIjpsPXZbMV0sYz12WzJdO2JyZWFrO2Nhc2VcIkFcIjp2YXIgeT1uKHtweDpmLHB5OnAsY3g6dls2XSxjeTp2WzddLHJ4OnZbMV0scnk6dlsyXSx4QXhpc1JvdGF0aW9uOnZbM10sbGFyZ2VBcmNGbGFnOnZbNF0sc3dlZXBGbGFnOnZbNV19KTtpZigheS5sZW5ndGgpY29udGludWU7Zm9yKHZhciB4LGI9MDtiPHkubGVuZ3RoO2IrKyl4PXlbYl0sdj1bXCJDXCIseC54MSx4LnkxLHgueDIseC55Mix4LngseC55XSxiPHkubGVuZ3RoLTEmJnIucHVzaCh2KTticmVhaztjYXNlXCJTXCI6dmFyIF89Zix3PXA7XCJDXCIhPWUmJlwiU1wiIT1lfHwoXys9Xy1vLHcrPXctcyksdj1bXCJDXCIsXyx3LHZbMV0sdlsyXSx2WzNdLHZbNF1dO2JyZWFrO2Nhc2VcIlRcIjpcIlFcIj09ZXx8XCJUXCI9PWU/KHU9MipmLXUsaD0yKnAtaCk6KHU9ZixoPXApLHY9YShmLHAsdSxoLHZbMV0sdlsyXSk7YnJlYWs7Y2FzZVwiUVwiOnU9dlsxXSxoPXZbMl0sdj1hKGYscCx2WzFdLHZbMl0sdlszXSx2WzRdKTticmVhaztjYXNlXCJMXCI6dj1pKGYscCx2WzFdLHZbMl0pO2JyZWFrO2Nhc2VcIkhcIjp2PWkoZixwLHZbMV0scCk7YnJlYWs7Y2FzZVwiVlwiOnY9aShmLHAsZix2WzFdKTticmVhaztjYXNlXCJaXCI6dj1pKGYscCxsLGMpfWU9bSxmPXZbdi5sZW5ndGgtMl0scD12W3YubGVuZ3RoLTFdLHYubGVuZ3RoPjQ/KG89dlt2Lmxlbmd0aC00XSxzPXZbdi5sZW5ndGgtM10pOihvPWYscz1wKSxyLnB1c2godil9cmV0dXJuIHJ9O3ZhciBuPXQoXCJzdmctYXJjLXRvLWN1YmljLWJlemllclwiKTtmdW5jdGlvbiBpKHQsZSxyLG4pe3JldHVybltcIkNcIix0LGUscixuLHIsbl19ZnVuY3Rpb24gYSh0LGUscixuLGksYSl7cmV0dXJuW1wiQ1wiLHQvMysyLzMqcixlLzMrMi8zKm4saS8zKzIvMypyLGEvMysyLzMqbixpLGFdfX0se1wic3ZnLWFyYy10by1jdWJpYy1iZXppZXJcIjo1MTd9XSw1MjA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbixpPXQoXCJzdmctcGF0aC1ib3VuZHNcIiksYT10KFwicGFyc2Utc3ZnLXBhdGhcIiksbz10KFwiZHJhdy1zdmctcGF0aFwiKSxzPXQoXCJpcy1zdmctcGF0aFwiKSxsPXQoXCJiaXRtYXAtc2RmXCIpLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSx1PWMuZ2V0Q29udGV4dChcIjJkXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCFzKHQpKXRocm93IEVycm9yKFwiQXJndW1lbnQgc2hvdWxkIGJlIHZhbGlkIHN2ZyBwYXRoIHN0cmluZ1wiKTtlfHwoZT17fSk7dmFyIHIsaDtlLnNoYXBlPyhyPWUuc2hhcGVbMF0saD1lLnNoYXBlWzFdKToocj1jLndpZHRoPWUud3x8ZS53aWR0aHx8MjAwLGg9Yy5oZWlnaHQ9ZS5ofHxlLmhlaWdodHx8MjAwKTt2YXIgZj1NYXRoLm1pbihyLGgpLHA9ZS5zdHJva2V8fDAsZD1lLnZpZXdib3h8fGUudmlld0JveHx8aSh0KSxnPVtyLyhkWzJdLWRbMF0pLGgvKGRbM10tZFsxXSldLHY9TWF0aC5taW4oZ1swXXx8MCxnWzFdfHwwKS8yO3UuZmlsbFN0eWxlPVwiYmxhY2tcIix1LmZpbGxSZWN0KDAsMCxyLGgpLHUuZmlsbFN0eWxlPVwid2hpdGVcIixwJiYoXCJudW1iZXJcIiE9dHlwZW9mIHAmJihwPTEpLHUuc3Ryb2tlU3R5bGU9cD4wP1wid2hpdGVcIjpcImJsYWNrXCIsdS5saW5lV2lkdGg9TWF0aC5hYnMocCkpO2lmKHUudHJhbnNsYXRlKC41KnIsLjUqaCksdS5zY2FsZSh2LHYpLGZ1bmN0aW9uKCl7aWYobnVsbCE9bilyZXR1cm4gbjt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLmdldENvbnRleHQoXCIyZFwiKTtpZih0LmNhbnZhcy53aWR0aD10LmNhbnZhcy5oZWlnaHQ9MSwhd2luZG93LlBhdGgyRClyZXR1cm4gbj0hMTt2YXIgZT1uZXcgUGF0aDJEKFwiTTAsMGgxdjFoLTF2LTFaXCIpO3QuZmlsbFN0eWxlPVwiYmxhY2tcIix0LmZpbGwoZSk7dmFyIHI9dC5nZXRJbWFnZURhdGEoMCwwLDEsMSk7cmV0dXJuIG49ciYmci5kYXRhJiYyNTU9PT1yLmRhdGFbM119KCkpe3ZhciBtPW5ldyBQYXRoMkQodCk7dS5maWxsKG0pLHAmJnUuc3Ryb2tlKG0pfWVsc2V7dmFyIHk9YSh0KTtvKHUseSksdS5maWxsKCkscCYmdS5zdHJva2UoKX1yZXR1cm4gdS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGwodSx7Y3V0b2ZmOm51bGwhPWUuY3V0b2ZmP2UuY3V0b2ZmOi41LHJhZGl1czpudWxsIT1lLnJhZGl1cz9lLnJhZGl1czouNSpmfSl9fSx7XCJiaXRtYXAtc2RmXCI6ODQsXCJkcmF3LXN2Zy1wYXRoXCI6MTYwLFwiaXMtc3ZnLXBhdGhcIjo0MTcsXCJwYXJzZS1zdmctcGF0aFwiOjQ1MyxcInN2Zy1wYXRoLWJvdW5kc1wiOjUxOH1dLDUyMTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24gdChlLHIsaSl7dmFyIGk9aXx8e307dmFyIG89YVtlXTtvfHwobz1hW2VdPXtcIiBcIjp7ZGF0YTpuZXcgRmxvYXQzMkFycmF5KDApLHNoYXBlOi4yfX0pO3ZhciBzPW9bcl07aWYoIXMpaWYoci5sZW5ndGg8PTF8fCEvXFxkLy50ZXN0KHIpKXM9b1tyXT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jZWxscyxyPXQucG9zaXRpb25zLG49bmV3IEZsb2F0MzJBcnJheSg2KmUubGVuZ3RoKSxpPTAsYT0wLG89MDtvPGUubGVuZ3RoOysrbylmb3IodmFyIHM9ZVtvXSxsPTA7bDwzOysrbCl7dmFyIGM9cltzW2xdXTtuW2krK109Y1swXSxuW2krK109Y1sxXSsxLjQsYT1NYXRoLm1heChjWzBdLGEpfXJldHVybntkYXRhOm4sc2hhcGU6YX19KG4ocix7dHJpYW5nbGVzOiEwLGZvbnQ6ZSx0ZXh0QWxpZ246aS50ZXh0QWxpZ258fFwibGVmdFwiLHRleHRCYXNlbGluZTpcImFscGhhYmV0aWNcIixzdHlsZXRhZ3M6e2JyZWFrbGluZXM6ITAsYm9sZHM6ITAsaXRhbGljczohMCxzdWJzY3JpcHRzOiEwLHN1cGVyc2NyaXB0czohMH19KSk7ZWxzZXtmb3IodmFyIGw9ci5zcGxpdCgvKFxcZHxcXHMpLyksYz1uZXcgQXJyYXkobC5sZW5ndGgpLHU9MCxoPTAsZj0wO2Y8bC5sZW5ndGg7KytmKWNbZl09dChlLGxbZl0pLHUrPWNbZl0uZGF0YS5sZW5ndGgsaCs9Y1tmXS5zaGFwZSxmPjAmJihoKz0uMDIpO2Zvcih2YXIgcD1uZXcgRmxvYXQzMkFycmF5KHUpLGQ9MCxnPS0uNSpoLGY9MDtmPGMubGVuZ3RoOysrZil7Zm9yKHZhciB2PWNbZl0uZGF0YSxtPTA7bTx2Lmxlbmd0aDttKz0yKXBbZCsrXT12W21dK2cscFtkKytdPXZbbSsxXTtnKz1jW2ZdLnNoYXBlKy4wMn1zPW9bcl09e2RhdGE6cCxzaGFwZTpofX1yZXR1cm4gc307dmFyIG49dChcInZlY3Rvcml6ZS10ZXh0XCIpLGk9d2luZG93fHxyLmdsb2JhbHx8e30sYT1pLl9fVEVYVF9DQUNIRXx8e307aS5fX1RFWFRfQ0FDSEU9e319KS5jYWxsKHRoaXMsdChcIl9wcm9jZXNzXCIpKX0se19wcm9jZXNzOjQ3NSxcInZlY3Rvcml6ZS10ZXh0XCI6NTM1fV0sNTIyOltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQpe3ZhciByPS9eXFxzKy8sbj0vXFxzKyQvLGk9MCxhPXQucm91bmQsbz10Lm1pbixzPXQubWF4LGw9dC5yYW5kb207ZnVuY3Rpb24gYyhlLGwpe2lmKGw9bHx8e30sKGU9ZXx8XCJcIilpbnN0YW5jZW9mIGMpcmV0dXJuIGU7aWYoISh0aGlzIGluc3RhbmNlb2YgYykpcmV0dXJuIG5ldyBjKGUsbCk7dmFyIHU9ZnVuY3Rpb24oZSl7dmFyIGk9e3I6MCxnOjAsYjowfSxhPTEsbD1udWxsLGM9bnVsbCx1PW51bGwsaD0hMSxmPSExO1wic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1mdW5jdGlvbih0KXt0PXQucmVwbGFjZShyLFwiXCIpLnJlcGxhY2UobixcIlwiKS50b0xvd2VyQ2FzZSgpO3ZhciBlLGk9ITE7aWYoU1t0XSl0PVNbdF0saT0hMDtlbHNlIGlmKFwidHJhbnNwYXJlbnRcIj09dClyZXR1cm57cjowLGc6MCxiOjAsYTowLGZvcm1hdDpcIm5hbWVcIn07aWYoZT1qLnJnYi5leGVjKHQpKXJldHVybntyOmVbMV0sZzplWzJdLGI6ZVszXX07aWYoZT1qLnJnYmEuZXhlYyh0KSlyZXR1cm57cjplWzFdLGc6ZVsyXSxiOmVbM10sYTplWzRdfTtpZihlPWouaHNsLmV4ZWModCkpcmV0dXJue2g6ZVsxXSxzOmVbMl0sbDplWzNdfTtpZihlPWouaHNsYS5leGVjKHQpKXJldHVybntoOmVbMV0sczplWzJdLGw6ZVszXSxhOmVbNF19O2lmKGU9ai5oc3YuZXhlYyh0KSlyZXR1cm57aDplWzFdLHM6ZVsyXSx2OmVbM119O2lmKGU9ai5oc3ZhLmV4ZWModCkpcmV0dXJue2g6ZVsxXSxzOmVbMl0sdjplWzNdLGE6ZVs0XX07aWYoZT1qLmhleDguZXhlYyh0KSlyZXR1cm57cjpPKGVbMV0pLGc6TyhlWzJdKSxiOk8oZVszXSksYTpSKGVbNF0pLGZvcm1hdDppP1wibmFtZVwiOlwiaGV4OFwifTtpZihlPWouaGV4Ni5leGVjKHQpKXJldHVybntyOk8oZVsxXSksZzpPKGVbMl0pLGI6TyhlWzNdKSxmb3JtYXQ6aT9cIm5hbWVcIjpcImhleFwifTtpZihlPWouaGV4NC5leGVjKHQpKXJldHVybntyOk8oZVsxXStcIlwiK2VbMV0pLGc6TyhlWzJdK1wiXCIrZVsyXSksYjpPKGVbM10rXCJcIitlWzNdKSxhOlIoZVs0XStcIlwiK2VbNF0pLGZvcm1hdDppP1wibmFtZVwiOlwiaGV4OFwifTtpZihlPWouaGV4My5leGVjKHQpKXJldHVybntyOk8oZVsxXStcIlwiK2VbMV0pLGc6TyhlWzJdK1wiXCIrZVsyXSksYjpPKGVbM10rXCJcIitlWzNdKSxmb3JtYXQ6aT9cIm5hbWVcIjpcImhleFwifTtyZXR1cm4hMX0oZSkpO1wib2JqZWN0XCI9PXR5cGVvZiBlJiYoVihlLnIpJiZWKGUuZykmJlYoZS5iKT8ocD1lLnIsZD1lLmcsZz1lLmIsaT17cjoyNTUqTChwLDI1NSksZzoyNTUqTChkLDI1NSksYjoyNTUqTChnLDI1NSl9LGg9ITAsZj1cIiVcIj09PVN0cmluZyhlLnIpLnN1YnN0cigtMSk/XCJwcmdiXCI6XCJyZ2JcIik6VihlLmgpJiZWKGUucykmJlYoZS52KT8obD1EKGUucyksYz1EKGUudiksaT1mdW5jdGlvbihlLHIsbil7ZT02KkwoZSwzNjApLHI9TChyLDEwMCksbj1MKG4sMTAwKTt2YXIgaT10LmZsb29yKGUpLGE9ZS1pLG89biooMS1yKSxzPW4qKDEtYSpyKSxsPW4qKDEtKDEtYSkqciksYz1pJTY7cmV0dXJue3I6MjU1KltuLHMsbyxvLGwsbl1bY10sZzoyNTUqW2wsbixuLHMsbyxvXVtjXSxiOjI1NSpbbyxvLGwsbixuLHNdW2NdfX0oZS5oLGwsYyksaD0hMCxmPVwiaHN2XCIpOlYoZS5oKSYmVihlLnMpJiZWKGUubCkmJihsPUQoZS5zKSx1PUQoZS5sKSxpPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE7ZnVuY3Rpb24gbyh0LGUscil7cmV0dXJuIHI8MCYmKHIrPTEpLHI+MSYmKHItPTEpLHI8MS82P3QrNiooZS10KSpyOnI8LjU/ZTpyPDIvMz90KyhlLXQpKigyLzMtcikqNjp0fWlmKHQ9TCh0LDM2MCksZT1MKGUsMTAwKSxyPUwociwxMDApLDA9PT1lKW49aT1hPXI7ZWxzZXt2YXIgcz1yPC41P3IqKDErZSk6citlLXIqZSxsPTIqci1zO249byhsLHMsdCsxLzMpLGk9byhsLHMsdCksYT1vKGwscyx0LTEvMyl9cmV0dXJue3I6MjU1Km4sZzoyNTUqaSxiOjI1NSphfX0oZS5oLGwsdSksaD0hMCxmPVwiaHNsXCIpLGUuaGFzT3duUHJvcGVydHkoXCJhXCIpJiYoYT1lLmEpKTt2YXIgcCxkLGc7cmV0dXJuIGE9QyhhKSx7b2s6aCxmb3JtYXQ6ZS5mb3JtYXR8fGYscjpvKDI1NSxzKGkuciwwKSksZzpvKDI1NSxzKGkuZywwKSksYjpvKDI1NSxzKGkuYiwwKSksYTphfX0oZSk7dGhpcy5fb3JpZ2luYWxJbnB1dD1lLHRoaXMuX3I9dS5yLHRoaXMuX2c9dS5nLHRoaXMuX2I9dS5iLHRoaXMuX2E9dS5hLHRoaXMuX3JvdW5kQT1hKDEwMCp0aGlzLl9hKS8xMDAsdGhpcy5fZm9ybWF0PWwuZm9ybWF0fHx1LmZvcm1hdCx0aGlzLl9ncmFkaWVudFR5cGU9bC5ncmFkaWVudFR5cGUsdGhpcy5fcjwxJiYodGhpcy5fcj1hKHRoaXMuX3IpKSx0aGlzLl9nPDEmJih0aGlzLl9nPWEodGhpcy5fZykpLHRoaXMuX2I8MSYmKHRoaXMuX2I9YSh0aGlzLl9iKSksdGhpcy5fb2s9dS5vayx0aGlzLl90Y19pZD1pKyt9ZnVuY3Rpb24gdSh0LGUscil7dD1MKHQsMjU1KSxlPUwoZSwyNTUpLHI9TChyLDI1NSk7dmFyIG4saSxhPXModCxlLHIpLGw9byh0LGUsciksYz0oYStsKS8yO2lmKGE9PWwpbj1pPTA7ZWxzZXt2YXIgdT1hLWw7c3dpdGNoKGk9Yz4uNT91LygyLWEtbCk6dS8oYStsKSxhKXtjYXNlIHQ6bj0oZS1yKS91KyhlPHI/NjowKTticmVhaztjYXNlIGU6bj0oci10KS91KzI7YnJlYWs7Y2FzZSByOm49KHQtZSkvdSs0fW4vPTZ9cmV0dXJue2g6bixzOmksbDpjfX1mdW5jdGlvbiBoKHQsZSxyKXt0PUwodCwyNTUpLGU9TChlLDI1NSkscj1MKHIsMjU1KTt2YXIgbixpLGE9cyh0LGUsciksbD1vKHQsZSxyKSxjPWEsdT1hLWw7aWYoaT0wPT09YT8wOnUvYSxhPT1sKW49MDtlbHNle3N3aXRjaChhKXtjYXNlIHQ6bj0oZS1yKS91KyhlPHI/NjowKTticmVhaztjYXNlIGU6bj0oci10KS91KzI7YnJlYWs7Y2FzZSByOm49KHQtZSkvdSs0fW4vPTZ9cmV0dXJue2g6bixzOmksdjpjfX1mdW5jdGlvbiBmKHQsZSxyLG4pe3ZhciBpPVtJKGEodCkudG9TdHJpbmcoMTYpKSxJKGEoZSkudG9TdHJpbmcoMTYpKSxJKGEocikudG9TdHJpbmcoMTYpKV07cmV0dXJuIG4mJmlbMF0uY2hhckF0KDApPT1pWzBdLmNoYXJBdCgxKSYmaVsxXS5jaGFyQXQoMCk9PWlbMV0uY2hhckF0KDEpJiZpWzJdLmNoYXJBdCgwKT09aVsyXS5jaGFyQXQoMSk/aVswXS5jaGFyQXQoMCkraVsxXS5jaGFyQXQoMCkraVsyXS5jaGFyQXQoMCk6aS5qb2luKFwiXCIpfWZ1bmN0aW9uIHAodCxlLHIsbil7cmV0dXJuW0koUChuKSksSShhKHQpLnRvU3RyaW5nKDE2KSksSShhKGUpLnRvU3RyaW5nKDE2KSksSShhKHIpLnRvU3RyaW5nKDE2KSldLmpvaW4oXCJcIil9ZnVuY3Rpb24gZCh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1jKHQpLnRvSHNsKCk7cmV0dXJuIHIucy09ZS8xMDAsci5zPXooci5zKSxjKHIpfWZ1bmN0aW9uIGcodCxlKXtlPTA9PT1lPzA6ZXx8MTA7dmFyIHI9Yyh0KS50b0hzbCgpO3JldHVybiByLnMrPWUvMTAwLHIucz16KHIucyksYyhyKX1mdW5jdGlvbiB2KHQpe3JldHVybiBjKHQpLmRlc2F0dXJhdGUoMTAwKX1mdW5jdGlvbiBtKHQsZSl7ZT0wPT09ZT8wOmV8fDEwO3ZhciByPWModCkudG9Ic2woKTtyZXR1cm4gci5sKz1lLzEwMCxyLmw9eihyLmwpLGMocil9ZnVuY3Rpb24geSh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1jKHQpLnRvUmdiKCk7cmV0dXJuIHIucj1zKDAsbygyNTUsci5yLWEoLWUvMTAwKjI1NSkpKSxyLmc9cygwLG8oMjU1LHIuZy1hKC1lLzEwMCoyNTUpKSksci5iPXMoMCxvKDI1NSxyLmItYSgtZS8xMDAqMjU1KSkpLGMocil9ZnVuY3Rpb24geCh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1jKHQpLnRvSHNsKCk7cmV0dXJuIHIubC09ZS8xMDAsci5sPXooci5sKSxjKHIpfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj1jKHQpLnRvSHNsKCksbj0oci5oK2UpJTM2MDtyZXR1cm4gci5oPW48MD8zNjArbjpuLGMocil9ZnVuY3Rpb24gXyh0KXt2YXIgZT1jKHQpLnRvSHNsKCk7cmV0dXJuIGUuaD0oZS5oKzE4MCklMzYwLGMoZSl9ZnVuY3Rpb24gdyh0KXt2YXIgZT1jKHQpLnRvSHNsKCkscj1lLmg7cmV0dXJuW2ModCksYyh7aDoocisxMjApJTM2MCxzOmUucyxsOmUubH0pLGMoe2g6KHIrMjQwKSUzNjAsczplLnMsbDplLmx9KV19ZnVuY3Rpb24gayh0KXt2YXIgZT1jKHQpLnRvSHNsKCkscj1lLmg7cmV0dXJuW2ModCksYyh7aDoocis5MCklMzYwLHM6ZS5zLGw6ZS5sfSksYyh7aDoocisxODApJTM2MCxzOmUucyxsOmUubH0pLGMoe2g6KHIrMjcwKSUzNjAsczplLnMsbDplLmx9KV19ZnVuY3Rpb24gQSh0KXt2YXIgZT1jKHQpLnRvSHNsKCkscj1lLmg7cmV0dXJuW2ModCksYyh7aDoocis3MiklMzYwLHM6ZS5zLGw6ZS5sfSksYyh7aDoocisyMTYpJTM2MCxzOmUucyxsOmUubH0pXX1mdW5jdGlvbiBUKHQsZSxyKXtlPWV8fDYscj1yfHwzMDt2YXIgbj1jKHQpLnRvSHNsKCksaT0zNjAvcixhPVtjKHQpXTtmb3Iobi5oPShuLmgtKGkqZT4+MSkrNzIwKSUzNjA7LS1lOyluLmg9KG4uaCtpKSUzNjAsYS5wdXNoKGMobikpO3JldHVybiBhfWZ1bmN0aW9uIE0odCxlKXtlPWV8fDY7Zm9yKHZhciByPWModCkudG9Ic3YoKSxuPXIuaCxpPXIucyxhPXIudixvPVtdLHM9MS9lO2UtLTspby5wdXNoKGMoe2g6bixzOmksdjphfSkpLGE9KGErcyklMTtyZXR1cm4gb31jLnByb3RvdHlwZT17aXNEYXJrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnJpZ2h0bmVzcygpPDEyOH0saXNMaWdodDpmdW5jdGlvbigpe3JldHVybiF0aGlzLmlzRGFyaygpfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29rfSxnZXRPcmlnaW5hbElucHV0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWdpbmFsSW5wdXR9LGdldEZvcm1hdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb3JtYXR9LGdldEFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F9LGdldEJyaWdodG5lc3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRvUmdiKCk7cmV0dXJuKDI5OSp0LnIrNTg3KnQuZysxMTQqdC5iKS8xZTN9LGdldEx1bWluYW5jZTpmdW5jdGlvbigpe3ZhciBlLHIsbixpPXRoaXMudG9SZ2IoKTtyZXR1cm4gZT1pLnIvMjU1LHI9aS5nLzI1NSxuPWkuYi8yNTUsLjIxMjYqKGU8PS4wMzkyOD9lLzEyLjkyOnQucG93KChlKy4wNTUpLzEuMDU1LDIuNCkpKy43MTUyKihyPD0uMDM5Mjg/ci8xMi45Mjp0LnBvdygocisuMDU1KS8xLjA1NSwyLjQpKSsuMDcyMioobjw9LjAzOTI4P24vMTIuOTI6dC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KSl9LHNldEFscGhhOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hPUModCksdGhpcy5fcm91bmRBPWEoMTAwKnRoaXMuX2EpLzEwMCx0aGlzfSx0b0hzdjpmdW5jdGlvbigpe3ZhciB0PWgodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpO3JldHVybntoOjM2MCp0Lmgsczp0LnMsdjp0LnYsYTp0aGlzLl9hfX0sdG9Ic3ZTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD1oKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKSxlPWEoMzYwKnQuaCkscj1hKDEwMCp0LnMpLG49YSgxMDAqdC52KTtyZXR1cm4gMT09dGhpcy5fYT9cImhzdihcIitlK1wiLCBcIityK1wiJSwgXCIrbitcIiUpXCI6XCJoc3ZhKFwiK2UrXCIsIFwiK3IrXCIlLCBcIituK1wiJSwgXCIrdGhpcy5fcm91bmRBK1wiKVwifSx0b0hzbDpmdW5jdGlvbigpe3ZhciB0PXUodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpO3JldHVybntoOjM2MCp0Lmgsczp0LnMsbDp0LmwsYTp0aGlzLl9hfX0sdG9Ic2xTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD11KHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKSxlPWEoMzYwKnQuaCkscj1hKDEwMCp0LnMpLG49YSgxMDAqdC5sKTtyZXR1cm4gMT09dGhpcy5fYT9cImhzbChcIitlK1wiLCBcIityK1wiJSwgXCIrbitcIiUpXCI6XCJoc2xhKFwiK2UrXCIsIFwiK3IrXCIlLCBcIituK1wiJSwgXCIrdGhpcy5fcm91bmRBK1wiKVwifSx0b0hleDpmdW5jdGlvbih0KXtyZXR1cm4gZih0aGlzLl9yLHRoaXMuX2csdGhpcy5fYix0KX0sdG9IZXhTdHJpbmc6ZnVuY3Rpb24odCl7cmV0dXJuXCIjXCIrdGhpcy50b0hleCh0KX0sdG9IZXg4OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGkpe3ZhciBvPVtJKGEodCkudG9TdHJpbmcoMTYpKSxJKGEoZSkudG9TdHJpbmcoMTYpKSxJKGEocikudG9TdHJpbmcoMTYpKSxJKFAobikpXTtpZihpJiZvWzBdLmNoYXJBdCgwKT09b1swXS5jaGFyQXQoMSkmJm9bMV0uY2hhckF0KDApPT1vWzFdLmNoYXJBdCgxKSYmb1syXS5jaGFyQXQoMCk9PW9bMl0uY2hhckF0KDEpJiZvWzNdLmNoYXJBdCgwKT09b1szXS5jaGFyQXQoMSkpcmV0dXJuIG9bMF0uY2hhckF0KDApK29bMV0uY2hhckF0KDApK29bMl0uY2hhckF0KDApK29bM10uY2hhckF0KDApO3JldHVybiBvLmpvaW4oXCJcIil9KHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLHRoaXMuX2EsdCl9LHRvSGV4OFN0cmluZzpmdW5jdGlvbih0KXtyZXR1cm5cIiNcIit0aGlzLnRvSGV4OCh0KX0sdG9SZ2I6ZnVuY3Rpb24oKXtyZXR1cm57cjphKHRoaXMuX3IpLGc6YSh0aGlzLl9nKSxiOmEodGhpcy5fYiksYTp0aGlzLl9hfX0sdG9SZ2JTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMT09dGhpcy5fYT9cInJnYihcIithKHRoaXMuX3IpK1wiLCBcIithKHRoaXMuX2cpK1wiLCBcIithKHRoaXMuX2IpK1wiKVwiOlwicmdiYShcIithKHRoaXMuX3IpK1wiLCBcIithKHRoaXMuX2cpK1wiLCBcIithKHRoaXMuX2IpK1wiLCBcIit0aGlzLl9yb3VuZEErXCIpXCJ9LHRvUGVyY2VudGFnZVJnYjpmdW5jdGlvbigpe3JldHVybntyOmEoMTAwKkwodGhpcy5fciwyNTUpKStcIiVcIixnOmEoMTAwKkwodGhpcy5fZywyNTUpKStcIiVcIixiOmEoMTAwKkwodGhpcy5fYiwyNTUpKStcIiVcIixhOnRoaXMuX2F9fSx0b1BlcmNlbnRhZ2VSZ2JTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMT09dGhpcy5fYT9cInJnYihcIithKDEwMCpMKHRoaXMuX3IsMjU1KSkrXCIlLCBcIithKDEwMCpMKHRoaXMuX2csMjU1KSkrXCIlLCBcIithKDEwMCpMKHRoaXMuX2IsMjU1KSkrXCIlKVwiOlwicmdiYShcIithKDEwMCpMKHRoaXMuX3IsMjU1KSkrXCIlLCBcIithKDEwMCpMKHRoaXMuX2csMjU1KSkrXCIlLCBcIithKDEwMCpMKHRoaXMuX2IsMjU1KSkrXCIlLCBcIit0aGlzLl9yb3VuZEErXCIpXCJ9LHRvTmFtZTpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5fYT9cInRyYW5zcGFyZW50XCI6ISh0aGlzLl9hPDEpJiYoRVtmKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLCEwKV18fCExKX0sdG9GaWx0ZXI6ZnVuY3Rpb24odCl7dmFyIGU9XCIjXCIrcCh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYix0aGlzLl9hKSxyPWUsbj10aGlzLl9ncmFkaWVudFR5cGU/XCJHcmFkaWVudFR5cGUgPSAxLCBcIjpcIlwiO2lmKHQpe3ZhciBpPWModCk7cj1cIiNcIitwKGkuX3IsaS5fZyxpLl9iLGkuX2EpfXJldHVyblwicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KFwiK24rXCJzdGFydENvbG9yc3RyPVwiK2UrXCIsZW5kQ29sb3JzdHI9XCIrcitcIilcIn0sdG9TdHJpbmc6ZnVuY3Rpb24odCl7dmFyIGU9ISF0O3Q9dHx8dGhpcy5fZm9ybWF0O3ZhciByPSExLG49dGhpcy5fYTwxJiZ0aGlzLl9hPj0wO3JldHVybiBlfHwhbnx8XCJoZXhcIiE9PXQmJlwiaGV4NlwiIT09dCYmXCJoZXgzXCIhPT10JiZcImhleDRcIiE9PXQmJlwiaGV4OFwiIT09dCYmXCJuYW1lXCIhPT10PyhcInJnYlwiPT09dCYmKHI9dGhpcy50b1JnYlN0cmluZygpKSxcInByZ2JcIj09PXQmJihyPXRoaXMudG9QZXJjZW50YWdlUmdiU3RyaW5nKCkpLFwiaGV4XCIhPT10JiZcImhleDZcIiE9PXR8fChyPXRoaXMudG9IZXhTdHJpbmcoKSksXCJoZXgzXCI9PT10JiYocj10aGlzLnRvSGV4U3RyaW5nKCEwKSksXCJoZXg0XCI9PT10JiYocj10aGlzLnRvSGV4OFN0cmluZyghMCkpLFwiaGV4OFwiPT09dCYmKHI9dGhpcy50b0hleDhTdHJpbmcoKSksXCJuYW1lXCI9PT10JiYocj10aGlzLnRvTmFtZSgpKSxcImhzbFwiPT09dCYmKHI9dGhpcy50b0hzbFN0cmluZygpKSxcImhzdlwiPT09dCYmKHI9dGhpcy50b0hzdlN0cmluZygpKSxyfHx0aGlzLnRvSGV4U3RyaW5nKCkpOlwibmFtZVwiPT09dCYmMD09PXRoaXMuX2E/dGhpcy50b05hbWUoKTp0aGlzLnRvUmdiU3RyaW5nKCl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIGModGhpcy50b1N0cmluZygpKX0sX2FwcGx5TW9kaWZpY2F0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5hcHBseShudWxsLFt0aGlzXS5jb25jYXQoW10uc2xpY2UuY2FsbChlKSkpO3JldHVybiB0aGlzLl9yPXIuX3IsdGhpcy5fZz1yLl9nLHRoaXMuX2I9ci5fYix0aGlzLnNldEFscGhhKHIuX2EpLHRoaXN9LGxpZ2h0ZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24obSxhcmd1bWVudHMpfSxicmlnaHRlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbih5LGFyZ3VtZW50cyl9LGRhcmtlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbih4LGFyZ3VtZW50cyl9LGRlc2F0dXJhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oZCxhcmd1bWVudHMpfSxzYXR1cmF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihnLGFyZ3VtZW50cyl9LGdyZXlzY2FsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbih2LGFyZ3VtZW50cyl9LHNwaW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oYixhcmd1bWVudHMpfSxfYXBwbHlDb21iaW5hdGlvbjpmdW5jdGlvbih0LGUpe3JldHVybiB0LmFwcGx5KG51bGwsW3RoaXNdLmNvbmNhdChbXS5zbGljZS5jYWxsKGUpKSl9LGFuYWxvZ291czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKFQsYXJndW1lbnRzKX0sY29tcGxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKF8sYXJndW1lbnRzKX0sbW9ub2Nocm9tYXRpYzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKE0sYXJndW1lbnRzKX0sc3BsaXRjb21wbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oQSxhcmd1bWVudHMpfSx0cmlhZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKHcsYXJndW1lbnRzKX0sdGV0cmFkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oayxhcmd1bWVudHMpfX0sYy5mcm9tUmF0aW89ZnVuY3Rpb24odCxlKXtpZihcIm9iamVjdFwiPT10eXBlb2YgdCl7dmFyIHI9e307Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKHJbbl09XCJhXCI9PT1uP3Rbbl06RCh0W25dKSk7dD1yfXJldHVybiBjKHQsZSl9LGMuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuISghdHx8IWUpJiZjKHQpLnRvUmdiU3RyaW5nKCk9PWMoZSkudG9SZ2JTdHJpbmcoKX0sYy5yYW5kb209ZnVuY3Rpb24oKXtyZXR1cm4gYy5mcm9tUmF0aW8oe3I6bCgpLGc6bCgpLGI6bCgpfSl9LGMubWl4PWZ1bmN0aW9uKHQsZSxyKXtyPTA9PT1yPzA6cnx8NTA7dmFyIG49Yyh0KS50b1JnYigpLGk9YyhlKS50b1JnYigpLGE9ci8xMDA7cmV0dXJuIGMoe3I6KGkuci1uLnIpKmErbi5yLGc6KGkuZy1uLmcpKmErbi5nLGI6KGkuYi1uLmIpKmErbi5iLGE6KGkuYS1uLmEpKmErbi5hfSl9LGMucmVhZGFiaWxpdHk9ZnVuY3Rpb24oZSxyKXt2YXIgbj1jKGUpLGk9YyhyKTtyZXR1cm4odC5tYXgobi5nZXRMdW1pbmFuY2UoKSxpLmdldEx1bWluYW5jZSgpKSsuMDUpLyh0Lm1pbihuLmdldEx1bWluYW5jZSgpLGkuZ2V0THVtaW5hbmNlKCkpKy4wNSl9LGMuaXNSZWFkYWJsZT1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhPWMucmVhZGFiaWxpdHkodCxlKTtzd2l0Y2goaT0hMSwobj1mdW5jdGlvbih0KXt2YXIgZSxyO2U9KCh0PXR8fHtsZXZlbDpcIkFBXCIsc2l6ZTpcInNtYWxsXCJ9KS5sZXZlbHx8XCJBQVwiKS50b1VwcGVyQ2FzZSgpLHI9KHQuc2l6ZXx8XCJzbWFsbFwiKS50b0xvd2VyQ2FzZSgpLFwiQUFcIiE9PWUmJlwiQUFBXCIhPT1lJiYoZT1cIkFBXCIpO1wic21hbGxcIiE9PXImJlwibGFyZ2VcIiE9PXImJihyPVwic21hbGxcIik7cmV0dXJue2xldmVsOmUsc2l6ZTpyfX0ocikpLmxldmVsK24uc2l6ZSl7Y2FzZVwiQUFzbWFsbFwiOmNhc2VcIkFBQWxhcmdlXCI6aT1hPj00LjU7YnJlYWs7Y2FzZVwiQUFsYXJnZVwiOmk9YT49MzticmVhaztjYXNlXCJBQUFzbWFsbFwiOmk9YT49N31yZXR1cm4gaX0sYy5tb3N0UmVhZGFibGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHM9bnVsbCxsPTA7aT0ocj1yfHx7fSkuaW5jbHVkZUZhbGxiYWNrQ29sb3JzLGE9ci5sZXZlbCxvPXIuc2l6ZTtmb3IodmFyIHU9MDt1PGUubGVuZ3RoO3UrKykobj1jLnJlYWRhYmlsaXR5KHQsZVt1XSkpPmwmJihsPW4scz1jKGVbdV0pKTtyZXR1cm4gYy5pc1JlYWRhYmxlKHQscyx7bGV2ZWw6YSxzaXplOm99KXx8IWk/czooci5pbmNsdWRlRmFsbGJhY2tDb2xvcnM9ITEsYy5tb3N0UmVhZGFibGUodCxbXCIjZmZmXCIsXCIjMDAwXCJdLHIpKX07dmFyIFM9Yy5uYW1lcz17YWxpY2VibHVlOlwiZjBmOGZmXCIsYW50aXF1ZXdoaXRlOlwiZmFlYmQ3XCIsYXF1YTpcIjBmZlwiLGFxdWFtYXJpbmU6XCI3ZmZmZDRcIixhenVyZTpcImYwZmZmZlwiLGJlaWdlOlwiZjVmNWRjXCIsYmlzcXVlOlwiZmZlNGM0XCIsYmxhY2s6XCIwMDBcIixibGFuY2hlZGFsbW9uZDpcImZmZWJjZFwiLGJsdWU6XCIwMGZcIixibHVldmlvbGV0OlwiOGEyYmUyXCIsYnJvd246XCJhNTJhMmFcIixidXJseXdvb2Q6XCJkZWI4ODdcIixidXJudHNpZW5uYTpcImVhN2U1ZFwiLGNhZGV0Ymx1ZTpcIjVmOWVhMFwiLGNoYXJ0cmV1c2U6XCI3ZmZmMDBcIixjaG9jb2xhdGU6XCJkMjY5MWVcIixjb3JhbDpcImZmN2Y1MFwiLGNvcm5mbG93ZXJibHVlOlwiNjQ5NWVkXCIsY29ybnNpbGs6XCJmZmY4ZGNcIixjcmltc29uOlwiZGMxNDNjXCIsY3lhbjpcIjBmZlwiLGRhcmtibHVlOlwiMDAwMDhiXCIsZGFya2N5YW46XCIwMDhiOGJcIixkYXJrZ29sZGVucm9kOlwiYjg4NjBiXCIsZGFya2dyYXk6XCJhOWE5YTlcIixkYXJrZ3JlZW46XCIwMDY0MDBcIixkYXJrZ3JleTpcImE5YTlhOVwiLGRhcmtraGFraTpcImJkYjc2YlwiLGRhcmttYWdlbnRhOlwiOGIwMDhiXCIsZGFya29saXZlZ3JlZW46XCI1NTZiMmZcIixkYXJrb3JhbmdlOlwiZmY4YzAwXCIsZGFya29yY2hpZDpcIjk5MzJjY1wiLGRhcmtyZWQ6XCI4YjAwMDBcIixkYXJrc2FsbW9uOlwiZTk5NjdhXCIsZGFya3NlYWdyZWVuOlwiOGZiYzhmXCIsZGFya3NsYXRlYmx1ZTpcIjQ4M2Q4YlwiLGRhcmtzbGF0ZWdyYXk6XCIyZjRmNGZcIixkYXJrc2xhdGVncmV5OlwiMmY0ZjRmXCIsZGFya3R1cnF1b2lzZTpcIjAwY2VkMVwiLGRhcmt2aW9sZXQ6XCI5NDAwZDNcIixkZWVwcGluazpcImZmMTQ5M1wiLGRlZXBza3libHVlOlwiMDBiZmZmXCIsZGltZ3JheTpcIjY5Njk2OVwiLGRpbWdyZXk6XCI2OTY5NjlcIixkb2RnZXJibHVlOlwiMWU5MGZmXCIsZmlyZWJyaWNrOlwiYjIyMjIyXCIsZmxvcmFsd2hpdGU6XCJmZmZhZjBcIixmb3Jlc3RncmVlbjpcIjIyOGIyMlwiLGZ1Y2hzaWE6XCJmMGZcIixnYWluc2Jvcm86XCJkY2RjZGNcIixnaG9zdHdoaXRlOlwiZjhmOGZmXCIsZ29sZDpcImZmZDcwMFwiLGdvbGRlbnJvZDpcImRhYTUyMFwiLGdyYXk6XCI4MDgwODBcIixncmVlbjpcIjAwODAwMFwiLGdyZWVueWVsbG93OlwiYWRmZjJmXCIsZ3JleTpcIjgwODA4MFwiLGhvbmV5ZGV3OlwiZjBmZmYwXCIsaG90cGluazpcImZmNjliNFwiLGluZGlhbnJlZDpcImNkNWM1Y1wiLGluZGlnbzpcIjRiMDA4MlwiLGl2b3J5OlwiZmZmZmYwXCIsa2hha2k6XCJmMGU2OGNcIixsYXZlbmRlcjpcImU2ZTZmYVwiLGxhdmVuZGVyYmx1c2g6XCJmZmYwZjVcIixsYXduZ3JlZW46XCI3Y2ZjMDBcIixsZW1vbmNoaWZmb246XCJmZmZhY2RcIixsaWdodGJsdWU6XCJhZGQ4ZTZcIixsaWdodGNvcmFsOlwiZjA4MDgwXCIsbGlnaHRjeWFuOlwiZTBmZmZmXCIsbGlnaHRnb2xkZW5yb2R5ZWxsb3c6XCJmYWZhZDJcIixsaWdodGdyYXk6XCJkM2QzZDNcIixsaWdodGdyZWVuOlwiOTBlZTkwXCIsbGlnaHRncmV5OlwiZDNkM2QzXCIsbGlnaHRwaW5rOlwiZmZiNmMxXCIsbGlnaHRzYWxtb246XCJmZmEwN2FcIixsaWdodHNlYWdyZWVuOlwiMjBiMmFhXCIsbGlnaHRza3libHVlOlwiODdjZWZhXCIsbGlnaHRzbGF0ZWdyYXk6XCI3ODlcIixsaWdodHNsYXRlZ3JleTpcIjc4OVwiLGxpZ2h0c3RlZWxibHVlOlwiYjBjNGRlXCIsbGlnaHR5ZWxsb3c6XCJmZmZmZTBcIixsaW1lOlwiMGYwXCIsbGltZWdyZWVuOlwiMzJjZDMyXCIsbGluZW46XCJmYWYwZTZcIixtYWdlbnRhOlwiZjBmXCIsbWFyb29uOlwiODAwMDAwXCIsbWVkaXVtYXF1YW1hcmluZTpcIjY2Y2RhYVwiLG1lZGl1bWJsdWU6XCIwMDAwY2RcIixtZWRpdW1vcmNoaWQ6XCJiYTU1ZDNcIixtZWRpdW1wdXJwbGU6XCI5MzcwZGJcIixtZWRpdW1zZWFncmVlbjpcIjNjYjM3MVwiLG1lZGl1bXNsYXRlYmx1ZTpcIjdiNjhlZVwiLG1lZGl1bXNwcmluZ2dyZWVuOlwiMDBmYTlhXCIsbWVkaXVtdHVycXVvaXNlOlwiNDhkMWNjXCIsbWVkaXVtdmlvbGV0cmVkOlwiYzcxNTg1XCIsbWlkbmlnaHRibHVlOlwiMTkxOTcwXCIsbWludGNyZWFtOlwiZjVmZmZhXCIsbWlzdHlyb3NlOlwiZmZlNGUxXCIsbW9jY2FzaW46XCJmZmU0YjVcIixuYXZham93aGl0ZTpcImZmZGVhZFwiLG5hdnk6XCIwMDAwODBcIixvbGRsYWNlOlwiZmRmNWU2XCIsb2xpdmU6XCI4MDgwMDBcIixvbGl2ZWRyYWI6XCI2YjhlMjNcIixvcmFuZ2U6XCJmZmE1MDBcIixvcmFuZ2VyZWQ6XCJmZjQ1MDBcIixvcmNoaWQ6XCJkYTcwZDZcIixwYWxlZ29sZGVucm9kOlwiZWVlOGFhXCIscGFsZWdyZWVuOlwiOThmYjk4XCIscGFsZXR1cnF1b2lzZTpcImFmZWVlZVwiLHBhbGV2aW9sZXRyZWQ6XCJkYjcwOTNcIixwYXBheWF3aGlwOlwiZmZlZmQ1XCIscGVhY2hwdWZmOlwiZmZkYWI5XCIscGVydTpcImNkODUzZlwiLHBpbms6XCJmZmMwY2JcIixwbHVtOlwiZGRhMGRkXCIscG93ZGVyYmx1ZTpcImIwZTBlNlwiLHB1cnBsZTpcIjgwMDA4MFwiLHJlYmVjY2FwdXJwbGU6XCI2NjMzOTlcIixyZWQ6XCJmMDBcIixyb3N5YnJvd246XCJiYzhmOGZcIixyb3lhbGJsdWU6XCI0MTY5ZTFcIixzYWRkbGVicm93bjpcIjhiNDUxM1wiLHNhbG1vbjpcImZhODA3MlwiLHNhbmR5YnJvd246XCJmNGE0NjBcIixzZWFncmVlbjpcIjJlOGI1N1wiLHNlYXNoZWxsOlwiZmZmNWVlXCIsc2llbm5hOlwiYTA1MjJkXCIsc2lsdmVyOlwiYzBjMGMwXCIsc2t5Ymx1ZTpcIjg3Y2VlYlwiLHNsYXRlYmx1ZTpcIjZhNWFjZFwiLHNsYXRlZ3JheTpcIjcwODA5MFwiLHNsYXRlZ3JleTpcIjcwODA5MFwiLHNub3c6XCJmZmZhZmFcIixzcHJpbmdncmVlbjpcIjAwZmY3ZlwiLHN0ZWVsYmx1ZTpcIjQ2ODJiNFwiLHRhbjpcImQyYjQ4Y1wiLHRlYWw6XCIwMDgwODBcIix0aGlzdGxlOlwiZDhiZmQ4XCIsdG9tYXRvOlwiZmY2MzQ3XCIsdHVycXVvaXNlOlwiNDBlMGQwXCIsdmlvbGV0OlwiZWU4MmVlXCIsd2hlYXQ6XCJmNWRlYjNcIix3aGl0ZTpcImZmZlwiLHdoaXRlc21va2U6XCJmNWY1ZjVcIix5ZWxsb3c6XCJmZjBcIix5ZWxsb3dncmVlbjpcIjlhY2QzMlwifSxFPWMuaGV4TmFtZXM9ZnVuY3Rpb24odCl7dmFyIGU9e307Zm9yKHZhciByIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShyKSYmKGVbdFtyXV09cik7cmV0dXJuIGV9KFMpO2Z1bmN0aW9uIEModCl7cmV0dXJuIHQ9cGFyc2VGbG9hdCh0KSwoaXNOYU4odCl8fHQ8MHx8dD4xKSYmKHQ9MSksdH1mdW5jdGlvbiBMKGUscil7KGZ1bmN0aW9uKHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiYtMSE9dC5pbmRleE9mKFwiLlwiKSYmMT09PXBhcnNlRmxvYXQodCl9KShlKSYmKGU9XCIxMDAlXCIpO3ZhciBuPWZ1bmN0aW9uKHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiYtMSE9dC5pbmRleE9mKFwiJVwiKX0oZSk7cmV0dXJuIGU9byhyLHMoMCxwYXJzZUZsb2F0KGUpKSksbiYmKGU9cGFyc2VJbnQoZSpyLDEwKS8xMDApLHQuYWJzKGUtcik8MWUtNj8xOmUlci9wYXJzZUZsb2F0KHIpfWZ1bmN0aW9uIHoodCl7cmV0dXJuIG8oMSxzKDAsdCkpfWZ1bmN0aW9uIE8odCl7cmV0dXJuIHBhcnNlSW50KHQsMTYpfWZ1bmN0aW9uIEkodCl7cmV0dXJuIDE9PXQubGVuZ3RoP1wiMFwiK3Q6XCJcIit0fWZ1bmN0aW9uIEQodCl7cmV0dXJuIHQ8PTEmJih0PTEwMCp0K1wiJVwiKSx0fWZ1bmN0aW9uIFAoZSl7cmV0dXJuIHQucm91bmQoMjU1KnBhcnNlRmxvYXQoZSkpLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBSKHQpe3JldHVybiBPKHQpLzI1NX12YXIgRixCLE4saj0oQj1cIltcXFxcc3xcXFxcKF0rKFwiKyhGPVwiKD86Wy1cXFxcK10/XFxcXGQqXFxcXC5cXFxcZCslPyl8KD86Wy1cXFxcK10/XFxcXGQrJT8pXCIpK1wiKVssfFxcXFxzXSsoXCIrRitcIilbLHxcXFxcc10rKFwiK0YrXCIpXFxcXHMqXFxcXCk/XCIsTj1cIltcXFxcc3xcXFxcKF0rKFwiK0YrXCIpWyx8XFxcXHNdKyhcIitGK1wiKVssfFxcXFxzXSsoXCIrRitcIilbLHxcXFxcc10rKFwiK0YrXCIpXFxcXHMqXFxcXCk/XCIse0NTU19VTklUOm5ldyBSZWdFeHAoRikscmdiOm5ldyBSZWdFeHAoXCJyZ2JcIitCKSxyZ2JhOm5ldyBSZWdFeHAoXCJyZ2JhXCIrTiksaHNsOm5ldyBSZWdFeHAoXCJoc2xcIitCKSxoc2xhOm5ldyBSZWdFeHAoXCJoc2xhXCIrTiksaHN2Om5ldyBSZWdFeHAoXCJoc3ZcIitCKSxoc3ZhOm5ldyBSZWdFeHAoXCJoc3ZhXCIrTiksaGV4MzovXiM/KFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8saGV4NjovXiM/KFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pJC8saGV4NDovXiM/KFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KSQvLGhleDg6L14jPyhbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkkL30pO2Z1bmN0aW9uIFYodCl7cmV0dXJuISFqLkNTU19VTklULmV4ZWModCl9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGUmJmUuZXhwb3J0cz9lLmV4cG9ydHM9Yzp3aW5kb3cudGlueWNvbG9yPWN9KE1hdGgpfSx7fV0sNTIzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWksZS5leHBvcnRzLmZsb2F0MzI9ZS5leHBvcnRzLmZsb2F0PWksZS5leHBvcnRzLmZyYWN0MzI9ZS5leHBvcnRzLmZyYWN0PWZ1bmN0aW9uKHQpe2lmKHQubGVuZ3RoKXtmb3IodmFyIGU9aSh0KSxyPTAsbj1lLmxlbmd0aDtyPG47cisrKWVbcl09dFtyXS1lW3JdO3JldHVybiBlfXJldHVybiBpKHQtaSh0KSl9O3ZhciBuPW5ldyBGbG9hdDMyQXJyYXkoMSk7ZnVuY3Rpb24gaSh0KXtpZih0Lmxlbmd0aCl7aWYodCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlyZXR1cm4gdDt2YXIgZT1uZXcgRmxvYXQzMkFycmF5KHQpO3JldHVybiBlLnNldCh0KSxlfXJldHVybiBuWzBdPXQsblswXX19LHt9XSw1MjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicGFyc2UtdW5pdFwiKTtlLmV4cG9ydHM9bzt2YXIgaT05NjtmdW5jdGlvbiBhKHQsZSl7dmFyIHI9bihnZXRDb21wdXRlZFN0eWxlKHQpLmdldFByb3BlcnR5VmFsdWUoZSkpO3JldHVybiByWzBdKm8oclsxXSx0KX1mdW5jdGlvbiBvKHQsZSl7c3dpdGNoKGU9ZXx8ZG9jdW1lbnQuYm9keSx0PSh0fHxcInB4XCIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLGUhPT13aW5kb3cmJmUhPT1kb2N1bWVudHx8KGU9ZG9jdW1lbnQuYm9keSksdCl7Y2FzZVwiJVwiOnJldHVybiBlLmNsaWVudEhlaWdodC8xMDA7Y2FzZVwiY2hcIjpjYXNlXCJleFwiOnJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7ci5zdHlsZVtcImZvbnQtc2l6ZVwiXT1cIjEyOFwiK3QsZS5hcHBlbmRDaGlsZChyKTt2YXIgbj1hKHIsXCJmb250LXNpemVcIikvMTI4O3JldHVybiBlLnJlbW92ZUNoaWxkKHIpLG59KHQsZSk7Y2FzZVwiZW1cIjpyZXR1cm4gYShlLFwiZm9udC1zaXplXCIpO2Nhc2VcInJlbVwiOnJldHVybiBhKGRvY3VtZW50LmJvZHksXCJmb250LXNpemVcIik7Y2FzZVwidndcIjpyZXR1cm4gd2luZG93LmlubmVyV2lkdGgvMTAwO2Nhc2VcInZoXCI6cmV0dXJuIHdpbmRvdy5pbm5lckhlaWdodC8xMDA7Y2FzZVwidm1pblwiOnJldHVybiBNYXRoLm1pbih3aW5kb3cuaW5uZXJXaWR0aCx3aW5kb3cuaW5uZXJIZWlnaHQpLzEwMDtjYXNlXCJ2bWF4XCI6cmV0dXJuIE1hdGgubWF4KHdpbmRvdy5pbm5lcldpZHRoLHdpbmRvdy5pbm5lckhlaWdodCkvMTAwO2Nhc2VcImluXCI6cmV0dXJuIGk7Y2FzZVwiY21cIjpyZXR1cm4gaS8yLjU0O2Nhc2VcIm1tXCI6cmV0dXJuIGkvMjUuNDtjYXNlXCJwdFwiOnJldHVybiBpLzcyO2Nhc2VcInBjXCI6cmV0dXJuIGkvNn1yZXR1cm4gMX19LHtcInBhcnNlLXVuaXRcIjo0NTR9XSw1MjU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbjtuPXRoaXMsZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHI9ZnVuY3Rpb24odCl7aWYobnVsbD09KHI9dC50cmFuc2Zvcm0pKXJldHVybiBlO3ZhciByLG4saSxhPXIuc2NhbGVbMF0sbz1yLnNjYWxlWzFdLHM9ci50cmFuc2xhdGVbMF0sbD1yLnRyYW5zbGF0ZVsxXTtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8KG49aT0wKSx0WzBdPShuKz10WzBdKSphK3MsdFsxXT0oaSs9dFsxXSkqbytsLHR9fSxuPWZ1bmN0aW9uKHQpe3ZhciBlPXQuYmJveDtmdW5jdGlvbiBuKHQpe2xbMF09dFswXSxsWzFdPXRbMV0scyhsKSxsWzBdPGMmJihjPWxbMF0pLGxbMF0+aCYmKGg9bFswXSksbFsxXTx1JiYodT1sWzFdKSxsWzFdPmYmJihmPWxbMV0pfWZ1bmN0aW9uIGkodCl7c3dpdGNoKHQudHlwZSl7Y2FzZVwiR2VvbWV0cnlDb2xsZWN0aW9uXCI6dC5nZW9tZXRyaWVzLmZvckVhY2goaSk7YnJlYWs7Y2FzZVwiUG9pbnRcIjpuKHQuY29vcmRpbmF0ZXMpO2JyZWFrO2Nhc2VcIk11bHRpUG9pbnRcIjp0LmNvb3JkaW5hdGVzLmZvckVhY2gobil9fWlmKCFlKXt2YXIgYSxvLHM9cih0KSxsPW5ldyBBcnJheSgyKSxjPTEvMCx1PWMsaD0tYyxmPS1jO2ZvcihvIGluIHQuYXJjcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0tMSxyPXQubGVuZ3RoOysrZTxyOylhPXRbZV0sbFswXT1hWzBdLGxbMV09YVsxXSxzKGwsZSksbFswXTxjJiYoYz1sWzBdKSxsWzBdPmgmJihoPWxbMF0pLGxbMV08dSYmKHU9bFsxXSksbFsxXT5mJiYoZj1sWzFdKX0pLHQub2JqZWN0cylpKHQub2JqZWN0c1tvXSk7ZT10LmJib3g9W2MsdSxoLGZdfXJldHVybiBlfSxpPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC5sZW5ndGgsaT1uLWU7aTwtLW47KXI9dFtpXSx0W2krK109dFtuXSx0W25dPXJ9O2Z1bmN0aW9uIGEodCxlKXt2YXIgcj1lLmlkLG49ZS5iYm94LGk9bnVsbD09ZS5wcm9wZXJ0aWVzP3t9OmUucHJvcGVydGllcyxhPW8odCxlKTtyZXR1cm4gbnVsbD09ciYmbnVsbD09bj97dHlwZTpcIkZlYXR1cmVcIixwcm9wZXJ0aWVzOmksZ2VvbWV0cnk6YX06bnVsbD09bj97dHlwZTpcIkZlYXR1cmVcIixpZDpyLHByb3BlcnRpZXM6aSxnZW9tZXRyeTphfTp7dHlwZTpcIkZlYXR1cmVcIixpZDpyLGJib3g6bixwcm9wZXJ0aWVzOmksZ2VvbWV0cnk6YX19ZnVuY3Rpb24gbyh0LGUpe3ZhciBuPXIodCksYT10LmFyY3M7ZnVuY3Rpb24gbyh0LGUpe2UubGVuZ3RoJiZlLnBvcCgpO2Zvcih2YXIgcj1hW3Q8MD9+dDp0XSxvPTAscz1yLmxlbmd0aDtvPHM7KytvKWUucHVzaChuKHJbb10uc2xpY2UoKSxvKSk7dDwwJiZpKGUscyl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gbih0LnNsaWNlKCkpfWZ1bmN0aW9uIGwodCl7Zm9yKHZhciBlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3Ipbyh0W3JdLGUpO3JldHVybiBlLmxlbmd0aDwyJiZlLnB1c2goZVswXS5zbGljZSgpKSxlfWZ1bmN0aW9uIGModCl7Zm9yKHZhciBlPWwodCk7ZS5sZW5ndGg8NDspZS5wdXNoKGVbMF0uc2xpY2UoKSk7cmV0dXJuIGV9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC5tYXAoYyl9cmV0dXJuIGZ1bmN0aW9uIHQoZSl7dmFyIHIsbj1lLnR5cGU7c3dpdGNoKG4pe2Nhc2VcIkdlb21ldHJ5Q29sbGVjdGlvblwiOnJldHVybnt0eXBlOm4sZ2VvbWV0cmllczplLmdlb21ldHJpZXMubWFwKHQpfTtjYXNlXCJQb2ludFwiOnI9cyhlLmNvb3JkaW5hdGVzKTticmVhaztjYXNlXCJNdWx0aVBvaW50XCI6cj1lLmNvb3JkaW5hdGVzLm1hcChzKTticmVhaztjYXNlXCJMaW5lU3RyaW5nXCI6cj1sKGUuYXJjcyk7YnJlYWs7Y2FzZVwiTXVsdGlMaW5lU3RyaW5nXCI6cj1lLmFyY3MubWFwKGwpO2JyZWFrO2Nhc2VcIlBvbHlnb25cIjpyPXUoZS5hcmNzKTticmVhaztjYXNlXCJNdWx0aVBvbHlnb25cIjpyPWUuYXJjcy5tYXAodSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gbnVsbH1yZXR1cm57dHlwZTpuLGNvb3JkaW5hdGVzOnJ9fShlKX12YXIgcz1mdW5jdGlvbih0LGUpe3ZhciByPXt9LG49e30saT17fSxhPVtdLG89LTE7ZnVuY3Rpb24gcyh0LGUpe2Zvcih2YXIgbiBpbiB0KXt2YXIgaT10W25dO2RlbGV0ZSBlW2kuc3RhcnRdLGRlbGV0ZSBpLnN0YXJ0LGRlbGV0ZSBpLmVuZCxpLmZvckVhY2goZnVuY3Rpb24odCl7clt0PDA/fnQ6dF09MX0pLGEucHVzaChpKX19cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihyLG4pe3ZhciBpLGE9dC5hcmNzW3I8MD9+cjpyXTthLmxlbmd0aDwzJiYhYVsxXVswXSYmIWFbMV1bMV0mJihpPWVbKytvXSxlW29dPXIsZVtuXT1pKX0pLGUuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcixhLG89ZnVuY3Rpb24oZSl7dmFyIHIsbj10LmFyY3NbZTwwP35lOmVdLGk9blswXTt0LnRyYW5zZm9ybT8ocj1bMCwwXSxuLmZvckVhY2goZnVuY3Rpb24odCl7clswXSs9dFswXSxyWzFdKz10WzFdfSkpOnI9bltuLmxlbmd0aC0xXTtyZXR1cm4gZTwwP1tyLGldOltpLHJdfShlKSxzPW9bMF0sbD1vWzFdO2lmKHI9aVtzXSlpZihkZWxldGUgaVtyLmVuZF0sci5wdXNoKGUpLHIuZW5kPWwsYT1uW2xdKXtkZWxldGUgblthLnN0YXJ0XTt2YXIgYz1hPT09cj9yOnIuY29uY2F0KGEpO25bYy5zdGFydD1yLnN0YXJ0XT1pW2MuZW5kPWEuZW5kXT1jfWVsc2UgbltyLnN0YXJ0XT1pW3IuZW5kXT1yO2Vsc2UgaWYocj1uW2xdKWlmKGRlbGV0ZSBuW3Iuc3RhcnRdLHIudW5zaGlmdChlKSxyLnN0YXJ0PXMsYT1pW3NdKXtkZWxldGUgaVthLmVuZF07dmFyIHU9YT09PXI/cjphLmNvbmNhdChyKTtuW3Uuc3RhcnQ9YS5zdGFydF09aVt1LmVuZD1yLmVuZF09dX1lbHNlIG5bci5zdGFydF09aVtyLmVuZF09cjtlbHNlIG5bKHI9W2VdKS5zdGFydD1zXT1pW3IuZW5kPWxdPXJ9KSxzKGksbikscyhuLGkpLGUuZm9yRWFjaChmdW5jdGlvbih0KXtyW3Q8MD9+dDp0XXx8YS5wdXNoKFt0XSl9KSxhfTtmdW5jdGlvbiBsKHQsZSxyKXt2YXIgbixpLGE7aWYoYXJndW1lbnRzLmxlbmd0aD4xKW49ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9W10sYT1bXTtmdW5jdGlvbiBvKHQpe3ZhciBlPXQ8MD9+dDp0OyhhW2VdfHwoYVtlXT1bXSkpLnB1c2goe2k6dCxnOm59KX1mdW5jdGlvbiBzKHQpe3QuZm9yRWFjaChvKX1mdW5jdGlvbiBsKHQpe3QuZm9yRWFjaChzKX1yZXR1cm4gZnVuY3Rpb24gdChlKXtzd2l0Y2gobj1lLGUudHlwZSl7Y2FzZVwiR2VvbWV0cnlDb2xsZWN0aW9uXCI6ZS5nZW9tZXRyaWVzLmZvckVhY2godCk7YnJlYWs7Y2FzZVwiTGluZVN0cmluZ1wiOnMoZS5hcmNzKTticmVhaztjYXNlXCJNdWx0aUxpbmVTdHJpbmdcIjpjYXNlXCJQb2x5Z29uXCI6bChlLmFyY3MpO2JyZWFrO2Nhc2VcIk11bHRpUG9seWdvblwiOmUuYXJjcy5mb3JFYWNoKGwpfX0oZSksYS5mb3JFYWNoKG51bGw9PXI/ZnVuY3Rpb24odCl7aS5wdXNoKHRbMF0uaSl9OmZ1bmN0aW9uKHQpe3IodFswXS5nLHRbdC5sZW5ndGgtMV0uZykmJmkucHVzaCh0WzBdLmkpfSksaX0oMCxlLHIpO2Vsc2UgZm9yKGk9MCxuPW5ldyBBcnJheShhPXQuYXJjcy5sZW5ndGgpO2k8YTsrK2kpbltpXT1pO3JldHVybnt0eXBlOlwiTXVsdGlMaW5lU3RyaW5nXCIsYXJjczpzKHQsbil9fWZ1bmN0aW9uIGModCxlKXt2YXIgcj17fSxuPVtdLGk9W107ZnVuY3Rpb24gYSh0KXt0LmZvckVhY2goZnVuY3Rpb24oZSl7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpeyhyW2U9ZTwwP35lOmVdfHwocltlXT1bXSkpLnB1c2godCl9KX0pLG4ucHVzaCh0KX1mdW5jdGlvbiBsKGUpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGUscj0tMSxuPXQubGVuZ3RoLGk9dFtuLTFdLGE9MDsrK3I8bjspZT1pLGk9dFtyXSxhKz1lWzBdKmlbMV0tZVsxXSppWzBdO3JldHVybiBNYXRoLmFicyhhKX0obyh0LHt0eXBlOlwiUG9seWdvblwiLGFyY3M6W2VdfSkuY29vcmRpbmF0ZXNbMF0pfXJldHVybiBlLmZvckVhY2goZnVuY3Rpb24gdChlKXtzd2l0Y2goZS50eXBlKXtjYXNlXCJHZW9tZXRyeUNvbGxlY3Rpb25cIjplLmdlb21ldHJpZXMuZm9yRWFjaCh0KTticmVhaztjYXNlXCJQb2x5Z29uXCI6YShlLmFyY3MpO2JyZWFrO2Nhc2VcIk11bHRpUG9seWdvblwiOmUuYXJjcy5mb3JFYWNoKGEpfX0pLG4uZm9yRWFjaChmdW5jdGlvbih0KXtpZighdC5fKXt2YXIgZT1bXSxuPVt0XTtmb3IodC5fPTEsaS5wdXNoKGUpO3Q9bi5wb3AoKTspZS5wdXNoKHQpLHQuZm9yRWFjaChmdW5jdGlvbih0KXt0LmZvckVhY2goZnVuY3Rpb24odCl7clt0PDA/fnQ6dF0uZm9yRWFjaChmdW5jdGlvbih0KXt0Ll98fCh0Ll89MSxuLnB1c2godCkpfSl9KX0pfX0pLG4uZm9yRWFjaChmdW5jdGlvbih0KXtkZWxldGUgdC5ffSkse3R5cGU6XCJNdWx0aVBvbHlnb25cIixhcmNzOmkubWFwKGZ1bmN0aW9uKGUpe3ZhciBuLGk9W107aWYoZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaChmdW5jdGlvbih0KXt0LmZvckVhY2goZnVuY3Rpb24odCl7clt0PDA/fnQ6dF0ubGVuZ3RoPDImJmkucHVzaCh0KX0pfSl9KSwobj0oaT1zKHQsaSkpLmxlbmd0aCk+MSlmb3IodmFyIGEsbyxjPTEsdT1sKGlbMF0pO2M8bjsrK2MpKGE9bChpW2NdKSk+dSYmKG89aVswXSxpWzBdPWlbY10saVtjXT1vLHU9YSk7cmV0dXJuIGl9KX19dmFyIHU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjspe3ZhciBpPXIrbj4+PjE7dFtpXTxlP3I9aSsxOm49aX1yZXR1cm4gcn07dC5iYm94PW4sdC5mZWF0dXJlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJHZW9tZXRyeUNvbGxlY3Rpb25cIj09PWUudHlwZT97dHlwZTpcIkZlYXR1cmVDb2xsZWN0aW9uXCIsZmVhdHVyZXM6ZS5nZW9tZXRyaWVzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gYSh0LGUpfSl9OmEodCxlKX0sdC5tZXNoPWZ1bmN0aW9uKHQpe3JldHVybiBvKHQsbC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSx0Lm1lc2hBcmNzPWwsdC5tZXJnZT1mdW5jdGlvbih0KXtyZXR1cm4gbyh0LGMuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sdC5tZXJnZUFyY3M9Yyx0Lm5laWdoYm9ycz1mdW5jdGlvbih0KXt2YXIgZT17fSxyPXQubWFwKGZ1bmN0aW9uKCl7cmV0dXJuW119KTtmdW5jdGlvbiBuKHQscil7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Q8MCYmKHQ9fnQpO3ZhciBuPWVbdF07bj9uLnB1c2gocik6ZVt0XT1bcl19KX1mdW5jdGlvbiBpKHQsZSl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe24odCxlKX0pfXZhciBhPXtMaW5lU3RyaW5nOm4sTXVsdGlMaW5lU3RyaW5nOmksUG9seWdvbjppLE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe3QuZm9yRWFjaChmdW5jdGlvbih0KXtpKHQsZSl9KX19O2Zvcih2YXIgbyBpbiB0LmZvckVhY2goZnVuY3Rpb24gdChlLHIpe1wiR2VvbWV0cnlDb2xsZWN0aW9uXCI9PT1lLnR5cGU/ZS5nZW9tZXRyaWVzLmZvckVhY2goZnVuY3Rpb24oZSl7dChlLHIpfSk6ZS50eXBlIGluIGEmJmFbZS50eXBlXShlLmFyY3Mscil9KSxlKWZvcih2YXIgcz1lW29dLGw9cy5sZW5ndGgsYz0wO2M8bDsrK2MpZm9yKHZhciBoPWMrMTtoPGw7KytoKXt2YXIgZixwPXNbY10sZD1zW2hdOyhmPXJbcF0pW289dShmLGQpXSE9PWQmJmYuc3BsaWNlKG8sMCxkKSwoZj1yW2RdKVtvPXUoZixwKV0hPT1wJiZmLnNwbGljZShvLDAscCl9cmV0dXJuIHJ9LHQucXVhbnRpemU9ZnVuY3Rpb24odCxlKXtpZighKChlPU1hdGguZmxvb3IoZSkpPj0yKSl0aHJvdyBuZXcgRXJyb3IoXCJuIG11c3QgYmUgXFx1MjI2NTJcIik7aWYodC50cmFuc2Zvcm0pdGhyb3cgbmV3IEVycm9yKFwiYWxyZWFkeSBxdWFudGl6ZWRcIik7dmFyIHIsaT1uKHQpLGE9aVswXSxvPShpWzJdLWEpLyhlLTEpfHwxLHM9aVsxXSxsPShpWzNdLXMpLyhlLTEpfHwxO2Z1bmN0aW9uIGModCl7dFswXT1NYXRoLnJvdW5kKCh0WzBdLWEpL28pLHRbMV09TWF0aC5yb3VuZCgodFsxXS1zKS9sKX1mdW5jdGlvbiB1KHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2VcIkdlb21ldHJ5Q29sbGVjdGlvblwiOnQuZ2VvbWV0cmllcy5mb3JFYWNoKHUpO2JyZWFrO2Nhc2VcIlBvaW50XCI6Yyh0LmNvb3JkaW5hdGVzKTticmVhaztjYXNlXCJNdWx0aVBvaW50XCI6dC5jb29yZGluYXRlcy5mb3JFYWNoKGMpfX1mb3IociBpbiB0LmFyY3MuZm9yRWFjaChmdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGk9MSxjPTEsdT10Lmxlbmd0aCxoPXRbMF0sZj1oWzBdPU1hdGgucm91bmQoKGhbMF0tYSkvbykscD1oWzFdPU1hdGgucm91bmQoKGhbMV0tcykvbCk7aTx1OysraSloPXRbaV0scj1NYXRoLnJvdW5kKChoWzBdLWEpL28pLG49TWF0aC5yb3VuZCgoaFsxXS1zKS9sKSxyPT09ZiYmbj09PXB8fCgoZT10W2MrK10pWzBdPXItZixmPXIsZVsxXT1uLXAscD1uKTtjPDImJigoZT10W2MrK10pWzBdPTAsZVsxXT0wKSx0Lmxlbmd0aD1jfSksdC5vYmplY3RzKXUodC5vYmplY3RzW3JdKTtyZXR1cm4gdC50cmFuc2Zvcm09e3NjYWxlOltvLGxdLHRyYW5zbGF0ZTpbYSxzXX0sdH0sdC50cmFuc2Zvcm09cix0LnVudHJhbnNmb3JtPWZ1bmN0aW9uKHQpe2lmKG51bGw9PShyPXQudHJhbnNmb3JtKSlyZXR1cm4gZTt2YXIgcixuLGksYT1yLnNjYWxlWzBdLG89ci5zY2FsZVsxXSxzPXIudHJhbnNsYXRlWzBdLGw9ci50cmFuc2xhdGVbMV07cmV0dXJuIGZ1bmN0aW9uKHQsZSl7ZXx8KG49aT0wKTt2YXIgcj1NYXRoLnJvdW5kKCh0WzBdLXMpL2EpLGM9TWF0aC5yb3VuZCgodFsxXS1sKS9vKTtyZXR1cm4gdFswXT1yLW4sbj1yLHRbMV09Yy1pLGk9Yyx0fX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9KFwib2JqZWN0XCI9PXR5cGVvZiByJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZT9yOm4udG9wb2pzb249bi50b3BvanNvbnx8e30pfSx7fV0sNTI2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKHQ8MClyZXR1cm5bXTtpZigwPT09dClyZXR1cm5bWzBdXTtmb3IodmFyIGU9MHxNYXRoLnJvdW5kKGEodCsxKSkscj1bXSxvPTA7bzxlOysrbyl7Zm9yKHZhciBzPW4udW5yYW5rKHQsbyksbD1bMF0sYz0wLHU9MDt1PHMubGVuZ3RoOysrdSljKz0xPDxzW3VdLGwucHVzaChjKTtpKHMpPDEmJihsWzBdPWMsbFt0XT0wKSxyLnB1c2gobCl9cmV0dXJuIHJ9O3ZhciBuPXQoXCJwZXJtdXRhdGlvbi1yYW5rXCIpLGk9dChcInBlcm11dGF0aW9uLXBhcml0eVwiKSxhPXQoXCJnYW1tYVwiKX0se2dhbW1hOjIyOCxcInBlcm11dGF0aW9uLXBhcml0eVwiOjQ1NixcInBlcm11dGF0aW9uLXJhbmtcIjo0NTd9XSw1Mjc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9KHQ9dHx8e30pLmNlbnRlcnx8WzAsMCwwXSxyPXQudXB8fFswLDEsMF0sbj10LnJpZ2h0fHxoKHIpLGk9dC5yYWRpdXN8fDEsYT10LnRoZXRhfHwwLHU9dC5waGl8fDA7aWYoZT1bXS5zbGljZS5jYWxsKGUsMCwzKSxyPVtdLnNsaWNlLmNhbGwociwwLDMpLHMocixyKSxuPVtdLnNsaWNlLmNhbGwobiwwLDMpLHMobixuKSxcImV5ZVwiaW4gdCl7dmFyIHA9dC5leWUsZD1bcFswXS1lWzBdLHBbMV0tZVsxXSxwWzJdLWVbMl1dO28obixkLHIpLGMoblswXSxuWzFdLG5bMl0pPDFlLTY/bj1oKHIpOnMobixuKSxpPWMoZFswXSxkWzFdLGRbMl0pO3ZhciBnPWwocixkKS9pLHY9bChuLGQpL2k7dT1NYXRoLmFjb3MoZyksYT1NYXRoLmFjb3Modil9cmV0dXJuIGk9TWF0aC5sb2coaSksbmV3IGYodC56b29tTWluLHQuem9vbU1heCxlLHIsbixpLGEsdSl9O3ZhciBuPXQoXCJmaWx0ZXJlZC12ZWN0b3JcIiksaT10KFwiZ2wtbWF0NC9pbnZlcnRcIiksYT10KFwiZ2wtbWF0NC9yb3RhdGVcIiksbz10KFwiZ2wtdmVjMy9jcm9zc1wiKSxzPXQoXCJnbC12ZWMzL25vcm1hbGl6ZVwiKSxsPXQoXCJnbC12ZWMzL2RvdFwiKTtmdW5jdGlvbiBjKHQsZSxyKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHQsMikrTWF0aC5wb3coZSwyKStNYXRoLnBvdyhyLDIpKX1mdW5jdGlvbiB1KHQpe3JldHVybiBNYXRoLm1pbigxLE1hdGgubWF4KC0xLHQpKX1mdW5jdGlvbiBoKHQpe3ZhciBlPU1hdGguYWJzKHRbMF0pLHI9TWF0aC5hYnModFsxXSksbj1NYXRoLmFicyh0WzJdKSxpPVswLDAsMF07ZT5NYXRoLm1heChyLG4pP2lbMl09MTpyPk1hdGgubWF4KGUsbik/aVswXT0xOmlbMV09MTtmb3IodmFyIGE9MCxvPTAsbD0wO2w8MzsrK2wpYSs9dFtsXSp0W2xdLG8rPWlbbF0qdFtsXTtmb3IobD0wO2w8MzsrK2wpaVtsXS09by9hKnRbbF07cmV0dXJuIHMoaSxpKSxpfWZ1bmN0aW9uIGYodCxlLHIsaSxhLG8scyxsKXt0aGlzLmNlbnRlcj1uKHIpLHRoaXMudXA9bihpKSx0aGlzLnJpZ2h0PW4oYSksdGhpcy5yYWRpdXM9bihbb10pLHRoaXMuYW5nbGU9bihbcyxsXSksdGhpcy5hbmdsZS5ib3VuZHM9W1stMS8wLC1NYXRoLlBJLzJdLFsxLzAsTWF0aC5QSS8yXV0sdGhpcy5zZXREaXN0YW5jZUxpbWl0cyh0LGUpLHRoaXMuY29tcHV0ZWRDZW50ZXI9dGhpcy5jZW50ZXIuY3VydmUoMCksdGhpcy5jb21wdXRlZFVwPXRoaXMudXAuY3VydmUoMCksdGhpcy5jb21wdXRlZFJpZ2h0PXRoaXMucmlnaHQuY3VydmUoMCksdGhpcy5jb21wdXRlZFJhZGl1cz10aGlzLnJhZGl1cy5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkQW5nbGU9dGhpcy5hbmdsZS5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVG93YXJkPVswLDAsMF0sdGhpcy5jb21wdXRlZEV5ZT1bMCwwLDBdLHRoaXMuY29tcHV0ZWRNYXRyaXg9bmV3IEFycmF5KDE2KTtmb3IodmFyIGM9MDtjPDE2OysrYyl0aGlzLmNvbXB1dGVkTWF0cml4W2NdPS41O3RoaXMucmVjYWxjTWF0cml4KDApfXZhciBwPWYucHJvdG90eXBlO3Auc2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCxlKXt0PXQ+MD9NYXRoLmxvZyh0KTotMS8wLGU9ZT4wP01hdGgubG9nKGUpOjEvMCxlPU1hdGgubWF4KGUsdCksdGhpcy5yYWRpdXMuYm91bmRzWzBdWzBdPXQsdGhpcy5yYWRpdXMuYm91bmRzWzFdWzBdPWV9LHAuZ2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5yYWRpdXMuYm91bmRzWzBdO3JldHVybiB0Pyh0WzBdPU1hdGguZXhwKGVbMF1bMF0pLHRbMV09TWF0aC5leHAoZVsxXVswXSksdCk6W01hdGguZXhwKGVbMF1bMF0pLE1hdGguZXhwKGVbMV1bMF0pXX0scC5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dGhpcy5jZW50ZXIuY3VydmUodCksdGhpcy51cC5jdXJ2ZSh0KSx0aGlzLnJpZ2h0LmN1cnZlKHQpLHRoaXMucmFkaXVzLmN1cnZlKHQpLHRoaXMuYW5nbGUuY3VydmUodCk7Zm9yKHZhciBlPXRoaXMuY29tcHV0ZWRVcCxyPXRoaXMuY29tcHV0ZWRSaWdodCxuPTAsaT0wLGE9MDthPDM7KythKWkrPWVbYV0qclthXSxuKz1lW2FdKmVbYV07dmFyIGw9TWF0aC5zcXJ0KG4pLHU9MDtmb3IoYT0wO2E8MzsrK2EpclthXS09ZVthXSppL24sdSs9clthXSpyW2FdLGVbYV0vPWw7dmFyIGg9TWF0aC5zcXJ0KHUpO2ZvcihhPTA7YTwzOysrYSlyW2FdLz1oO3ZhciBmPXRoaXMuY29tcHV0ZWRUb3dhcmQ7byhmLGUscikscyhmLGYpO3ZhciBwPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pLGQ9dGhpcy5jb21wdXRlZEFuZ2xlWzBdLGc9dGhpcy5jb21wdXRlZEFuZ2xlWzFdLHY9TWF0aC5jb3MoZCksbT1NYXRoLnNpbihkKSx5PU1hdGguY29zKGcpLHg9TWF0aC5zaW4oZyksYj10aGlzLmNvbXB1dGVkQ2VudGVyLF89dip5LHc9bSp5LGs9eCxBPS12KngsVD0tbSp4LE09eSxTPXRoaXMuY29tcHV0ZWRFeWUsRT10aGlzLmNvbXB1dGVkTWF0cml4O2ZvcihhPTA7YTwzOysrYSl7dmFyIEM9XypyW2FdK3cqZlthXStrKmVbYV07RVs0KmErMV09QSpyW2FdK1QqZlthXStNKmVbYV0sRVs0KmErMl09QyxFWzQqYSszXT0wfXZhciBMPUVbMV0sej1FWzVdLE89RVs5XSxJPUVbMl0sRD1FWzZdLFA9RVsxMF0sUj16KlAtTypELEY9TypJLUwqUCxCPUwqRC16KkksTj1jKFIsRixCKTtSLz1OLEYvPU4sQi89TixFWzBdPVIsRVs0XT1GLEVbOF09Qjtmb3IoYT0wO2E8MzsrK2EpU1thXT1iW2FdK0VbMis0KmFdKnA7Zm9yKGE9MDthPDM7KythKXt1PTA7Zm9yKHZhciBqPTA7ajwzOysrail1Kz1FW2ErNCpqXSpTW2pdO0VbMTIrYV09LXV9RVsxNV09MX0scC5nZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXt0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgcj10aGlzLmNvbXB1dGVkTWF0cml4O2lmKGUpe2Zvcih2YXIgbj0wO248MTY7KytuKWVbbl09cltuXTtyZXR1cm4gZX1yZXR1cm4gcn07dmFyIGQ9WzAsMCwwXTtwLnJvdGF0ZT1mdW5jdGlvbih0LGUscixuKXtpZih0aGlzLmFuZ2xlLm1vdmUodCxlLHIpLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXg7ZFswXT1pWzJdLGRbMV09aVs2XSxkWzJdPWlbMTBdO2Zvcih2YXIgbz10aGlzLmNvbXB1dGVkVXAscz10aGlzLmNvbXB1dGVkUmlnaHQsbD10aGlzLmNvbXB1dGVkVG93YXJkLGM9MDtjPDM7KytjKWlbNCpjXT1vW2NdLGlbNCpjKzFdPXNbY10saVs0KmMrMl09bFtjXTthKGksaSxuLGQpO2ZvcihjPTA7YzwzOysrYylvW2NdPWlbNCpjXSxzW2NdPWlbNCpjKzFdO3RoaXMudXAuc2V0KHQsb1swXSxvWzFdLG9bMl0pLHRoaXMucmlnaHQuc2V0KHQsc1swXSxzWzFdLHNbMl0pfX0scC5wYW49ZnVuY3Rpb24odCxlLHIsbil7ZT1lfHwwLHI9cnx8MCxuPW58fDAsdGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZE1hdHJpeCxhPShNYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKSxpWzFdKSxvPWlbNV0scz1pWzldLGw9YyhhLG8scyk7YS89bCxvLz1sLHMvPWw7dmFyIHU9aVswXSxoPWlbNF0sZj1pWzhdLHA9dSphK2gqbytmKnMsZD1jKHUtPWEqcCxoLT1vKnAsZi09cypwKSxnPSh1Lz1kKSplK2Eqcix2PShoLz1kKSplK28qcixtPShmLz1kKSplK3Mqcjt0aGlzLmNlbnRlci5tb3ZlKHQsZyx2LG0pO3ZhciB5PU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO3k9TWF0aC5tYXgoMWUtNCx5K24pLHRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKHkpKX0scC50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5jZW50ZXIubW92ZSh0LGV8fDAscnx8MCxufHwwKX0scC5zZXRNYXRyaXg9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9MTtcIm51bWJlclwiPT10eXBlb2YgciYmKGE9MHxyKSwoYTwwfHxhPjMpJiYoYT0xKTt2YXIgbz0oYSsyKSUzO2V8fCh0aGlzLnJlY2FsY01hdHJpeCh0KSxlPXRoaXMuY29tcHV0ZWRNYXRyaXgpO3ZhciBzPWVbYV0sbD1lW2ErNF0saD1lW2ErOF07aWYobil7dmFyIGY9TWF0aC5hYnMocykscD1NYXRoLmFicyhsKSxkPU1hdGguYWJzKGgpLGc9TWF0aC5tYXgoZixwLGQpO2Y9PT1nPyhzPXM8MD8tMToxLGw9aD0wKTpkPT09Zz8oaD1oPDA/LTE6MSxzPWw9MCk6KGw9bDwwPy0xOjEscz1oPTApfWVsc2V7dmFyIHY9YyhzLGwsaCk7cy89dixsLz12LGgvPXZ9dmFyIG0seSx4PWVbb10sYj1lW28rNF0sXz1lW28rOF0sdz14KnMrYipsK18qaCxrPWMoeC09cyp3LGItPWwqdyxfLT1oKncpLEE9bCooXy89ayktaCooYi89ayksVD1oKih4Lz1rKS1zKl8sTT1zKmItbCp4LFM9YyhBLFQsTSk7aWYoQS89UyxULz1TLE0vPVMsdGhpcy5jZW50ZXIuanVtcCh0LEgsRyxZKSx0aGlzLnJhZGl1cy5pZGxlKHQpLHRoaXMudXAuanVtcCh0LHMsbCxoKSx0aGlzLnJpZ2h0Lmp1bXAodCx4LGIsXyksMj09PWEpe3ZhciBFPWVbMV0sQz1lWzVdLEw9ZVs5XSx6PUUqeCtDKmIrTCpfLE89RSpBK0MqVCtMKk07bT1SPDA/LU1hdGguUEkvMjpNYXRoLlBJLzIseT1NYXRoLmF0YW4yKE8seil9ZWxzZXt2YXIgST1lWzJdLEQ9ZVs2XSxQPWVbMTBdLFI9SSpzK0QqbCtQKmgsRj1JKngrRCpiK1AqXyxCPUkqQStEKlQrUCpNO209TWF0aC5hc2luKHUoUikpLHk9TWF0aC5hdGFuMihCLEYpfXRoaXMuYW5nbGUuanVtcCh0LHksbSksdGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIE49ZVsyXSxqPWVbNl0sVj1lWzEwXSxVPXRoaXMuY29tcHV0ZWRNYXRyaXg7aShVLGUpO3ZhciBxPVVbMTVdLEg9VVsxMl0vcSxHPVVbMTNdL3EsWT1VWzE0XS9xLFc9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7dGhpcy5jZW50ZXIuanVtcCh0LEgtTipXLEctaipXLFktVipXKX0scC5sYXN0VD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1heCh0aGlzLmNlbnRlci5sYXN0VCgpLHRoaXMudXAubGFzdFQoKSx0aGlzLnJpZ2h0Lmxhc3RUKCksdGhpcy5yYWRpdXMubGFzdFQoKSx0aGlzLmFuZ2xlLmxhc3RUKCkpfSxwLmlkbGU9ZnVuY3Rpb24odCl7dGhpcy5jZW50ZXIuaWRsZSh0KSx0aGlzLnVwLmlkbGUodCksdGhpcy5yaWdodC5pZGxlKHQpLHRoaXMucmFkaXVzLmlkbGUodCksdGhpcy5hbmdsZS5pZGxlKHQpfSxwLmZsdXNoPWZ1bmN0aW9uKHQpe3RoaXMuY2VudGVyLmZsdXNoKHQpLHRoaXMudXAuZmx1c2godCksdGhpcy5yaWdodC5mbHVzaCh0KSx0aGlzLnJhZGl1cy5mbHVzaCh0KSx0aGlzLmFuZ2xlLmZsdXNoKHQpfSxwLnNldERpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7ZT4wJiZ0aGlzLnJhZGl1cy5zZXQodCxNYXRoLmxvZyhlKSl9LHAubG9va0F0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpLGU9ZXx8dGhpcy5jb21wdXRlZEV5ZSxyPXJ8fHRoaXMuY29tcHV0ZWRDZW50ZXI7dmFyIGk9KG49bnx8dGhpcy5jb21wdXRlZFVwKVswXSxhPW5bMV0sbz1uWzJdLHM9YyhpLGEsbyk7aWYoIShzPDFlLTYpKXtpLz1zLGEvPXMsby89czt2YXIgbD1lWzBdLXJbMF0saD1lWzFdLXJbMV0sZj1lWzJdLXJbMl0scD1jKGwsaCxmKTtpZighKHA8MWUtNikpe2wvPXAsaC89cCxmLz1wO3ZhciBkPXRoaXMuY29tcHV0ZWRSaWdodCxnPWRbMF0sdj1kWzFdLG09ZFsyXSx5PWkqZythKnYrbyptLHg9YyhnLT15Kmksdi09eSphLG0tPXkqbyk7aWYoISh4PC4wMSYmKHg9YyhnPWEqZi1vKmgsdj1vKmwtaSpmLG09aSpoLWEqbCkpPDFlLTYpKXtnLz14LHYvPXgsbS89eCx0aGlzLnVwLnNldCh0LGksYSxvKSx0aGlzLnJpZ2h0LnNldCh0LGcsdixtKSx0aGlzLmNlbnRlci5zZXQodCxyWzBdLHJbMV0sclsyXSksdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2cocCkpO3ZhciBiPWEqbS1vKnYsXz1vKmctaSptLHc9aSp2LWEqZyxrPWMoYixfLHcpLEE9aSpsK2EqaCtvKmYsVD1nKmwrdipoK20qZixNPShiLz1rKSpsKyhfLz1rKSpoKyh3Lz1rKSpmLFM9TWF0aC5hc2luKHUoQSkpLEU9TWF0aC5hdGFuMihNLFQpLEM9dGhpcy5hbmdsZS5fc3RhdGUsTD1DW0MubGVuZ3RoLTFdLHo9Q1tDLmxlbmd0aC0yXTtMJT0yKk1hdGguUEk7dmFyIE89TWF0aC5hYnMoTCsyKk1hdGguUEktRSksST1NYXRoLmFicyhMLUUpLEQ9TWF0aC5hYnMoTC0yKk1hdGguUEktRSk7TzxJJiYoTCs9MipNYXRoLlBJKSxEPEkmJihMLT0yKk1hdGguUEkpLHRoaXMuYW5nbGUuanVtcCh0aGlzLmFuZ2xlLmxhc3RUKCksTCx6KSx0aGlzLmFuZ2xlLnNldCh0LEUsUyl9fX19fSx7XCJmaWx0ZXJlZC12ZWN0b3JcIjoyMjMsXCJnbC1tYXQ0L2ludmVydFwiOjI2MixcImdsLW1hdDQvcm90YXRlXCI6MjY3LFwiZ2wtdmVjMy9jcm9zc1wiOjMyNyxcImdsLXZlYzMvZG90XCI6MzMyLFwiZ2wtdmVjMy9ub3JtYWxpemVcIjozNDl9XSw1Mjg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQqZSxhPW4qdCxvPWEtKGEtdCkscz10LW8sbD1uKmUsYz1sLShsLWUpLHU9ZS1jLGg9cyp1LShpLW8qYy1zKmMtbyp1KTtpZihyKXJldHVybiByWzBdPWgsclsxXT1pLHI7cmV0dXJuW2gsaV19O3ZhciBuPSsoTWF0aC5wb3coMiwyNykrMSl9LHt9XSw1Mjk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQrZSxpPW4tdCxhPWUtaSxvPXQtKG4taSk7aWYocilyZXR1cm4gclswXT1vK2EsclsxXT1uLHI7cmV0dXJuW28rYSxuXX19LHt9XSw1MzA6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgaT10KFwiYml0LXR3aWRkbGVcIiksYT10KFwiZHVwXCIpO2UuX19UWVBFREFSUkFZX1BPT0x8fChlLl9fVFlQRURBUlJBWV9QT09MPXtVSU5UODphKFszMiwwXSksVUlOVDE2OmEoWzMyLDBdKSxVSU5UMzI6YShbMzIsMF0pLElOVDg6YShbMzIsMF0pLElOVDE2OmEoWzMyLDBdKSxJTlQzMjphKFszMiwwXSksRkxPQVQ6YShbMzIsMF0pLERPVUJMRTphKFszMiwwXSksREFUQTphKFszMiwwXSksVUlOVDhDOmEoWzMyLDBdKSxCVUZGRVI6YShbMzIsMF0pfSk7dmFyIG89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5LHM9ZS5fX1RZUEVEQVJSQVlfUE9PTDtzLlVJTlQ4Q3x8KHMuVUlOVDhDPWEoWzMyLDBdKSkscy5CVUZGRVJ8fChzLkJVRkZFUj1hKFszMiwwXSkpO3ZhciBsPXMuREFUQSxjPXMuQlVGRkVSO2Z1bmN0aW9uIHUodCl7aWYodCl7dmFyIGU9dC5sZW5ndGh8fHQuYnl0ZUxlbmd0aCxyPWkubG9nMihlKTtsW3JdLnB1c2godCl9fWZ1bmN0aW9uIGgodCl7dD1pLm5leHRQb3cyKHQpO3ZhciBlPWkubG9nMih0KSxyPWxbZV07cmV0dXJuIHIubGVuZ3RoPjA/ci5wb3AoKTpuZXcgQXJyYXlCdWZmZXIodCl9ZnVuY3Rpb24gZih0KXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoaCh0KSwwLHQpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIG5ldyBVaW50MTZBcnJheShoKDIqdCksMCx0KX1mdW5jdGlvbiBkKHQpe3JldHVybiBuZXcgVWludDMyQXJyYXkoaCg0KnQpLDAsdCl9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gbmV3IEludDhBcnJheShoKHQpLDAsdCl9ZnVuY3Rpb24gdih0KXtyZXR1cm4gbmV3IEludDE2QXJyYXkoaCgyKnQpLDAsdCl9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gbmV3IEludDMyQXJyYXkoaCg0KnQpLDAsdCl9ZnVuY3Rpb24geSh0KXtyZXR1cm4gbmV3IEZsb2F0MzJBcnJheShoKDQqdCksMCx0KX1mdW5jdGlvbiB4KHQpe3JldHVybiBuZXcgRmxvYXQ2NEFycmF5KGgoOCp0KSwwLHQpfWZ1bmN0aW9uIGIodCl7cmV0dXJuIG8/bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGgodCksMCx0KTpmKHQpfWZ1bmN0aW9uIF8odCl7cmV0dXJuIG5ldyBEYXRhVmlldyhoKHQpLDAsdCl9ZnVuY3Rpb24gdyh0KXt0PWkubmV4dFBvdzIodCk7dmFyIGU9aS5sb2cyKHQpLHI9Y1tlXTtyZXR1cm4gci5sZW5ndGg+MD9yLnBvcCgpOm5ldyBuKHQpfXIuZnJlZT1mdW5jdGlvbih0KXtpZihuLmlzQnVmZmVyKHQpKWNbaS5sb2cyKHQubGVuZ3RoKV0ucHVzaCh0KTtlbHNle2lmKFwiW29iamVjdCBBcnJheUJ1ZmZlcl1cIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSYmKHQ9dC5idWZmZXIpLCF0KXJldHVybjt2YXIgZT10Lmxlbmd0aHx8dC5ieXRlTGVuZ3RoLHI9MHxpLmxvZzIoZSk7bFtyXS5wdXNoKHQpfX0sci5mcmVlVWludDg9ci5mcmVlVWludDE2PXIuZnJlZVVpbnQzMj1yLmZyZWVJbnQ4PXIuZnJlZUludDE2PXIuZnJlZUludDMyPXIuZnJlZUZsb2F0MzI9ci5mcmVlRmxvYXQ9ci5mcmVlRmxvYXQ2ND1yLmZyZWVEb3VibGU9ci5mcmVlVWludDhDbGFtcGVkPXIuZnJlZURhdGFWaWV3PWZ1bmN0aW9uKHQpe3UodC5idWZmZXIpfSxyLmZyZWVBcnJheUJ1ZmZlcj11LHIuZnJlZUJ1ZmZlcj1mdW5jdGlvbih0KXtjW2kubG9nMih0Lmxlbmd0aCldLnB1c2godCl9LHIubWFsbG9jPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09ZXx8XCJhcnJheWJ1ZmZlclwiPT09ZSlyZXR1cm4gaCh0KTtzd2l0Y2goZSl7Y2FzZVwidWludDhcIjpyZXR1cm4gZih0KTtjYXNlXCJ1aW50MTZcIjpyZXR1cm4gcCh0KTtjYXNlXCJ1aW50MzJcIjpyZXR1cm4gZCh0KTtjYXNlXCJpbnQ4XCI6cmV0dXJuIGcodCk7Y2FzZVwiaW50MTZcIjpyZXR1cm4gdih0KTtjYXNlXCJpbnQzMlwiOnJldHVybiBtKHQpO2Nhc2VcImZsb2F0XCI6Y2FzZVwiZmxvYXQzMlwiOnJldHVybiB5KHQpO2Nhc2VcImRvdWJsZVwiOmNhc2VcImZsb2F0NjRcIjpyZXR1cm4geCh0KTtjYXNlXCJ1aW50OF9jbGFtcGVkXCI6cmV0dXJuIGIodCk7Y2FzZVwiYnVmZmVyXCI6cmV0dXJuIHcodCk7Y2FzZVwiZGF0YVwiOmNhc2VcImRhdGF2aWV3XCI6cmV0dXJuIF8odCk7ZGVmYXVsdDpyZXR1cm4gbnVsbH1yZXR1cm4gbnVsbH0sci5tYWxsb2NBcnJheUJ1ZmZlcj1oLHIubWFsbG9jVWludDg9ZixyLm1hbGxvY1VpbnQxNj1wLHIubWFsbG9jVWludDMyPWQsci5tYWxsb2NJbnQ4PWcsci5tYWxsb2NJbnQxNj12LHIubWFsbG9jSW50MzI9bSxyLm1hbGxvY0Zsb2F0MzI9ci5tYWxsb2NGbG9hdD15LHIubWFsbG9jRmxvYXQ2ND1yLm1hbGxvY0RvdWJsZT14LHIubWFsbG9jVWludDhDbGFtcGVkPWIsci5tYWxsb2NEYXRhVmlldz1fLHIubWFsbG9jQnVmZmVyPXcsci5jbGVhckNhY2hlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDwzMjsrK3Qpcy5VSU5UOFt0XS5sZW5ndGg9MCxzLlVJTlQxNlt0XS5sZW5ndGg9MCxzLlVJTlQzMlt0XS5sZW5ndGg9MCxzLklOVDhbdF0ubGVuZ3RoPTAscy5JTlQxNlt0XS5sZW5ndGg9MCxzLklOVDMyW3RdLmxlbmd0aD0wLHMuRkxPQVRbdF0ubGVuZ3RoPTAscy5ET1VCTEVbdF0ubGVuZ3RoPTAscy5VSU5UOENbdF0ubGVuZ3RoPTAsbFt0XS5sZW5ndGg9MCxjW3RdLmxlbmd0aD0wfX0pLmNhbGwodGhpcyxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9LHQoXCJidWZmZXJcIikuQnVmZmVyKX0se1wiYml0LXR3aWRkbGVcIjo4MyxidWZmZXI6OTYsZHVwOjE2Mn1dLDUzMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7dGhpcy5yb290cz1uZXcgQXJyYXkodCksdGhpcy5yYW5rcz1uZXcgQXJyYXkodCk7Zm9yKHZhciBlPTA7ZTx0OysrZSl0aGlzLnJvb3RzW2VdPWUsdGhpcy5yYW5rc1tlXT0wfWUuZXhwb3J0cz1uO3ZhciBpPW4ucHJvdG90eXBlO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFwibGVuZ3RoXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3RzLmxlbmd0aH19KSxpLm1ha2VTZXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJvb3RzLmxlbmd0aDtyZXR1cm4gdGhpcy5yb290cy5wdXNoKHQpLHRoaXMucmFua3MucHVzaCgwKSx0fSxpLmZpbmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQscj10aGlzLnJvb3RzO3JbdF0hPT10Oyl0PXJbdF07Zm9yKDtyW2VdIT09dDspe3ZhciBuPXJbZV07cltlXT10LGU9bn1yZXR1cm4gdH0saS5saW5rPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5maW5kKHQpLG49dGhpcy5maW5kKGUpO2lmKHIhPT1uKXt2YXIgaT10aGlzLnJhbmtzLGE9dGhpcy5yb290cyxvPWlbcl0scz1pW25dO288cz9hW3JdPW46czxvP2Fbbl09cjooYVtuXT1yLCsraVtyXSl9fX0se31dLDUzMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIDA9PT10Lmxlbmd0aD90OmU/KHJ8fHQuc29ydChlKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xLG49dC5sZW5ndGgsaT10WzBdLGE9dFswXSxvPTE7bzxuOysrbylpZihhPWksZShpPXRbb10sYSkpe2lmKG89PT1yKXtyKys7Y29udGludWV9dFtyKytdPWl9cmV0dXJuIHQubGVuZ3RoPXIsdH0odCxlKSk6KHJ8fHQuc29ydCgpLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xLHI9dC5sZW5ndGgsbj10WzBdLGk9dFswXSxhPTE7YTxyOysrYSxpPW4paWYoaT1uLChuPXRbYV0pIT09aSl7aWYoYT09PWUpe2UrKztjb250aW51ZX10W2UrK109bn1yZXR1cm4gdC5sZW5ndGg9ZSx0fSh0KSl9fSx7fV0sNTMzOltmdW5jdGlvbih0LGUscil7dmFyIG49L1tcXCdcXFwiXS87ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PyhuLnRlc3QodC5jaGFyQXQoMCkpJiYodD10LnN1YnN0cigxKSksbi50ZXN0KHQuY2hhckF0KHQubGVuZ3RoLTEpKSYmKHQ9dC5zdWJzdHIoMCx0Lmxlbmd0aC0xKSksdCk6XCJcIn19LHt9XSw1MzQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe0FycmF5LmlzQXJyYXkocil8fChyPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpKTtmb3IodmFyIG49MCxpPXIubGVuZ3RoO248aTtuKyspe3ZhciBhPXJbbl07Zm9yKHZhciBvIGluIGEpaWYoKHZvaWQgMD09PWVbb118fEFycmF5LmlzQXJyYXkoZVtvXSl8fHRbb10hPT1lW29dKSYmbyBpbiBlKXt2YXIgcztpZighMD09PWFbb10pcz1lW29dO2Vsc2V7aWYoITE9PT1hW29dKWNvbnRpbnVlO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGFbb10mJnZvaWQgMD09PShzPWFbb10oZVtvXSx0LGUpKSljb250aW51ZX10W29dPXN9fXJldHVybiB0fX0se31dLDUzNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZXx8KGU9e30pO3JldHVybiBuKHQsZS5jYW52YXN8fGksZS5jb250ZXh0fHxhLGUpfTt2YXIgbj10KFwiLi9saWIvdnRleHRcIiksaT1udWxsLGE9bnVsbDtcInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQmJigoaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpKS53aWR0aD04MTkyLGkuaGVpZ2h0PTEwMjQsYT1pLmdldENvbnRleHQoXCIyZFwiKSl9LHtcIi4vbGliL3Z0ZXh0XCI6NTM2fV0sNTM2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPTY0LG89MS4yNSxzPXticmVha2xpbmVzOiExLGJvbGRzOiExLGl0YWxpY3M6ITEsc3Vic2NyaXB0czohMSxzdXBlcnNjcmlwdHM6ITF9O24mJihuLnNpemUmJm4uc2l6ZT4wJiYoYT1uLnNpemUpLG4ubGluZVNwYWNpbmcmJm4ubGluZVNwYWNpbmc+MCYmKG89bi5saW5lU3BhY2luZyksbi5zdHlsZXRhZ3MmJm4uc3R5bGV0YWdzLmJyZWFrbGluZXMmJihzLmJyZWFrbGluZXM9ISFuLnN0eWxldGFncy5icmVha2xpbmVzKSxuLnN0eWxldGFncyYmbi5zdHlsZXRhZ3MuYm9sZHMmJihzLmJvbGRzPSEhbi5zdHlsZXRhZ3MuYm9sZHMpLG4uc3R5bGV0YWdzJiZuLnN0eWxldGFncy5pdGFsaWNzJiYocy5pdGFsaWNzPSEhbi5zdHlsZXRhZ3MuaXRhbGljcyksbi5zdHlsZXRhZ3MmJm4uc3R5bGV0YWdzLnN1YnNjcmlwdHMmJihzLnN1YnNjcmlwdHM9ISFuLnN0eWxldGFncy5zdWJzY3JpcHRzKSxuLnN0eWxldGFncyYmbi5zdHlsZXRhZ3Muc3VwZXJzY3JpcHRzJiYocy5zdXBlcnNjcmlwdHM9ISFuLnN0eWxldGFncy5zdXBlcnNjcmlwdHMpKTtyZXR1cm4gci5mb250PVtuLmZvbnRTdHlsZSxuLmZvbnRWYXJpYW50LG4uZm9udFdlaWdodCxhK1wicHhcIixuLmZvbnRdLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdH0pLmpvaW4oXCIgXCIpLHIudGV4dEFsaWduPVwic3RhcnRcIixyLnRleHRCYXNlbGluZT1cImFscGhhYmV0aWNcIixyLmRpcmVjdGlvbj1cImx0clwiLHcoZnVuY3Rpb24odCxlLHIsbixhLG8pe3I9ci5yZXBsYWNlKC9cXG4vZyxcIlwiKSxyPSEwPT09by5icmVha2xpbmVzP3IucmVwbGFjZSgvXFw8YnJcXD4vZyxcIlxcblwiKTpyLnJlcGxhY2UoL1xcPGJyXFw+L2csXCIgXCIpO3ZhciBzPVwiXCIsbD1bXTtmb3Ioaz0wO2s8ci5sZW5ndGg7KytrKWxba109czshMD09PW8uYm9sZHMmJihsPXgoYyx1LHIsbCkpLCEwPT09by5pdGFsaWNzJiYobD14KGgsZixyLGwpKSwhMD09PW8uc3VwZXJzY3JpcHRzJiYobD14KHAsZyxyLGwpKSwhMD09PW8uc3Vic2NyaXB0cyYmKGw9eCh2LHkscixsKSk7dmFyIGI9W10sXz1cIlwiO2ZvcihrPTA7azxyLmxlbmd0aDsrK2spbnVsbCE9PWxba10mJihfKz1yW2tdLGIucHVzaChsW2tdKSk7dmFyIHcsayxBLFQsTSxTPV8uc3BsaXQoXCJcXG5cIiksRT1TLmxlbmd0aCxDPU1hdGgucm91bmQoYSpuKSxMPW4sej0yKm4sTz0wLEk9RSpDK3o7dC5oZWlnaHQ8SSYmKHQuaGVpZ2h0PUkpLGUuZmlsbFN0eWxlPVwiIzAwMFwiLGUuZmlsbFJlY3QoMCwwLHQud2lkdGgsdC5oZWlnaHQpLGUuZmlsbFN0eWxlPVwiI2ZmZlwiO3ZhciBEPTAsUD1cIlwiO2Z1bmN0aW9uIFIoKXtpZihcIlwiIT09UCl7dmFyIHQ9ZS5tZWFzdXJlVGV4dChQKS53aWR0aDtlLmZpbGxUZXh0KFAsTCtBLHorVCksQSs9dH19ZnVuY3Rpb24gRigpe3JldHVybiBNYXRoLnJvdW5kKE0pK1wicHggXCJ9ZnVuY3Rpb24gQih0LHIpe3ZhciBuPVwiXCIrZS5mb250O2lmKCEwPT09by5zdWJzY3JpcHRzKXt2YXIgaT10LmluZGV4T2YobSksYT1yLmluZGV4T2YobSkscz1pPi0xP3BhcnNlSW50KHRbMStpXSk6MCxsPWE+LTE/cGFyc2VJbnQoclsxK2FdKTowO3MhPT1sJiYobj1uLnJlcGxhY2UoRigpLFwiP3B4IFwiKSxNKj1NYXRoLnBvdyguNzUsbC1zKSxuPW4ucmVwbGFjZShcIj9weCBcIixGKCkpKSxUKz0uMjUqQyoobC1zKX1pZighMD09PW8uc3VwZXJzY3JpcHRzKXt2YXIgYz10LmluZGV4T2YoZCksaD1yLmluZGV4T2YoZCkscD1jPi0xP3BhcnNlSW50KHRbMStjXSk6MCxnPWg+LTE/cGFyc2VJbnQoclsxK2hdKTowO3AhPT1nJiYobj1uLnJlcGxhY2UoRigpLFwiP3B4IFwiKSxNKj1NYXRoLnBvdyguNzUsZy1wKSxuPW4ucmVwbGFjZShcIj9weCBcIixGKCkpKSxULT0uMjUqQyooZy1wKX1pZighMD09PW8uYm9sZHMpe3ZhciB2PXQuaW5kZXhPZih1KT4tMSx5PXIuaW5kZXhPZih1KT4tMTshdiYmeSYmKG49eD9uLnJlcGxhY2UoXCJpdGFsaWMgXCIsXCJpdGFsaWMgYm9sZCBcIik6XCJib2xkIFwiK24pLHYmJiF5JiYobj1uLnJlcGxhY2UoXCJib2xkIFwiLFwiXCIpKX1pZighMD09PW8uaXRhbGljcyl7dmFyIHg9dC5pbmRleE9mKGYpPi0xLGI9ci5pbmRleE9mKGYpPi0xOyF4JiZiJiYobj1cIml0YWxpYyBcIituKSx4JiYhYiYmKG49bi5yZXBsYWNlKFwiaXRhbGljIFwiLFwiXCIpKX1lLmZvbnQ9bn1mb3Iodz0wO3c8RTsrK3cpe3ZhciBOPVNbd10rXCJcXG5cIjtmb3IoQT0wLFQ9dypDLE09bixQPVwiXCIsaz0wO2s8Ti5sZW5ndGg7KytrKXt2YXIgaj1rK0Q8Yi5sZW5ndGg/YltrK0RdOmJbYi5sZW5ndGgtMV07cz09PWo/UCs9TltrXTooUigpLFA9TltrXSx2b2lkIDAhPT1qJiYoQihzLGopLHM9aikpfVIoKSxEKz1OLmxlbmd0aDt2YXIgVj0wfE1hdGgucm91bmQoQSsyKkwpO088ViYmKE89Vil9dmFyIFU9TyxxPXorQypFO3JldHVybiBpKGUuZ2V0SW1hZ2VEYXRhKDAsMCxVLHEpLmRhdGEsW3EsVSw0XSkucGljaygtMSwtMSwwKS50cmFuc3Bvc2UoMSwwKX0oZSxyLHQsYSxvLHMpLG4sYSl9LGUuZXhwb3J0cy5wcm9jZXNzUGl4ZWxzPXc7dmFyIG49dChcInN1cmZhY2UtbmV0c1wiKSxpPXQoXCJuZGFycmF5XCIpLGE9dChcInNpbXBsaWZ5LXBsYW5hci1ncmFwaFwiKSxvPXQoXCJjbGVhbi1wc2xnXCIpLHM9dChcImNkdDJkXCIpLGw9dChcInBsYW5hci1ncmFwaC10by1wb2x5bGluZVwiKSxjPVwiYlwiLHU9XCJifFwiLGg9XCJpXCIsZj1cIml8XCIscD1cInN1cFwiLGQ9XCIrXCIsZz1cIisxXCIsdj1cInN1YlwiLG09XCItXCIseT1cIi0xXCI7ZnVuY3Rpb24geCh0LGUscixuKXtmb3IodmFyIGk9XCI8XCIrdCtcIj5cIixhPVwiPC9cIit0K1wiPlwiLG89aS5sZW5ndGgscz1hLmxlbmd0aCxsPWVbMF09PT1kfHxlWzBdPT09bSxjPTAsdT0tcztjPi0xJiYtMSE9PShjPXIuaW5kZXhPZihpLGMpKSYmLTEhPT0odT1yLmluZGV4T2YoYSxjK28pKSYmISh1PD1jKTspe2Zvcih2YXIgaD1jO2g8dStzOysraClpZihoPGMrb3x8aD49dSluW2hdPW51bGwscj1yLnN1YnN0cigwLGgpK1wiIFwiK3Iuc3Vic3RyKGgrMSk7ZWxzZSBpZihudWxsIT09bltoXSl7dmFyIGY9bltoXS5pbmRleE9mKGVbMF0pOy0xPT09Zj9uW2hdKz1lOmwmJihuW2hdPW5baF0uc3Vic3RyKDAsZisxKSsoMStwYXJzZUludChuW2hdW2YrMV0pKStuW2hdLnN1YnN0cihmKzIpKX12YXIgcD1jK28sZz1yLnN1YnN0cihwLHUtcCkuaW5kZXhPZihpKTtjPS0xIT09Zz9nOnUrc31yZXR1cm4gbn1mdW5jdGlvbiBiKHQsZSl7dmFyIHI9bih0LDEyOCk7cmV0dXJuIGU/YShyLmNlbGxzLHIucG9zaXRpb25zLC4yNSk6e2VkZ2VzOnIuY2VsbHMscG9zaXRpb25zOnIucG9zaXRpb25zfX1mdW5jdGlvbiBfKHQsZSxyLG4pe3ZhciBpPWIodCxuKSxhPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ZS50ZXh0QWxpZ258fFwic3RhcnRcIixpPWUudGV4dEJhc2VsaW5lfHxcImFscGhhYmV0aWNcIixhPVsxPDwzMCwxPDwzMF0sbz1bMCwwXSxzPXQubGVuZ3RoLGw9MDtsPHM7KytsKWZvcih2YXIgYz10W2xdLHU9MDt1PDI7Kyt1KWFbdV09MHxNYXRoLm1pbihhW3VdLGNbdV0pLG9bdV09MHxNYXRoLm1heChvW3VdLGNbdV0pO3ZhciBoPTA7c3dpdGNoKG4pe2Nhc2VcImNlbnRlclwiOmg9LS41KihhWzBdK29bMF0pO2JyZWFrO2Nhc2VcInJpZ2h0XCI6Y2FzZVwiZW5kXCI6aD0tb1swXTticmVhaztjYXNlXCJsZWZ0XCI6Y2FzZVwic3RhcnRcIjpoPS1hWzBdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwidmVjdG9yaXplLXRleHQ6IFVucmVjb2duaXplZCB0ZXh0QWxpZ246ICdcIituK1wiJ1wiKX12YXIgZj0wO3N3aXRjaChpKXtjYXNlXCJoYW5naW5nXCI6Y2FzZVwidG9wXCI6Zj0tYVsxXTticmVhaztjYXNlXCJtaWRkbGVcIjpmPS0uNSooYVsxXStvWzFdKTticmVhaztjYXNlXCJhbHBoYWJldGljXCI6Y2FzZVwiaWRlb2dyYXBoaWNcIjpmPS0zKnI7YnJlYWs7Y2FzZVwiYm90dG9tXCI6Zj0tb1sxXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcInZlY3Rvcml6ZS10ZXh0OiBVbnJlY29naW5pemVkIHRleHRCYXNlbGluZTogJ1wiK2krXCInXCIpfXZhciBwPTEvcjtyZXR1cm5cImxpbmVIZWlnaHRcImluIGU/cCo9K2UubGluZUhlaWdodDpcIndpZHRoXCJpbiBlP3A9ZS53aWR0aC8ob1swXS1hWzBdKTpcImhlaWdodFwiaW4gZSYmKHA9ZS5oZWlnaHQvKG9bMV0tYVsxXSkpLHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybltwKih0WzBdK2gpLHAqKHRbMV0rZildfSl9KGkucG9zaXRpb25zLGUsciksYz1pLmVkZ2VzLHU9XCJjY3dcIj09PWUub3JpZW50YXRpb247aWYobyhhLGMpLGUucG9seWdvbnN8fGUucG9seWdvbnx8ZS5wb2x5bGluZSl7Zm9yKHZhciBoPWwoYyxhKSxmPW5ldyBBcnJheShoLmxlbmd0aCkscD0wO3A8aC5sZW5ndGg7KytwKXtmb3IodmFyIGQ9aFtwXSxnPW5ldyBBcnJheShkLmxlbmd0aCksdj0wO3Y8ZC5sZW5ndGg7Kyt2KXtmb3IodmFyIG09ZFt2XSx5PW5ldyBBcnJheShtLmxlbmd0aCkseD0wO3g8bS5sZW5ndGg7Kyt4KXlbeF09YVttW3hdXS5zbGljZSgpO3UmJnkucmV2ZXJzZSgpLGdbdl09eX1mW3BdPWd9cmV0dXJuIGZ9cmV0dXJuIGUudHJpYW5nbGVzfHxlLnRyaWFuZ3VsYXRlfHxlLnRyaWFuZ2xlP3tjZWxsczpzKGEsYyx7ZGVsYXVuYXk6ITEsZXh0ZXJpb3I6ITEsaW50ZXJpb3I6ITB9KSxwb3NpdGlvbnM6YX06e2VkZ2VzOmMscG9zaXRpb25zOmF9fWZ1bmN0aW9uIHcodCxlLHIpe3RyeXtyZXR1cm4gXyh0LGUsciwhMCl9Y2F0Y2godCl7fXRyeXtyZXR1cm4gXyh0LGUsciwhMSl9Y2F0Y2godCl7fXJldHVybiBlLnBvbHlnb25zfHxlLnBvbHlsaW5lfHxlLnBvbHlnb24/W106ZS50cmlhbmdsZXN8fGUudHJpYW5ndWxhdGV8fGUudHJpYW5nbGU/e2NlbGxzOltdLHBvc2l0aW9uczpbXX06e2VkZ2VzOltdLHBvc2l0aW9uczpbXX19fSx7Y2R0MmQ6OTcsXCJjbGVhbi1wc2xnXCI6MTA3LG5kYXJyYXk6NDQzLFwicGxhbmFyLWdyYXBoLXRvLXBvbHlsaW5lXCI6NDYxLFwic2ltcGxpZnktcGxhbmFyLWdyYXBoXCI6NTA5LFwic3VyZmFjZS1uZXRzXCI6NTE2fV0sNTM3OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIHNlc3x8IXNlcy5va3x8c2VzLm9rKCkpe1widW5kZWZpbmVkXCIhPXR5cGVvZiBzZXMmJihzZXMud2Vha01hcFBlcm1pdEhvc3RPYmplY3RzPXYpO3ZhciB0PSExO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIFdlYWtNYXApe3ZhciByPVdlYWtNYXA7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvciYmL0ZpcmVmb3gvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpO2Vsc2V7dmFyIG49bmV3IHIsaT1PYmplY3QuZnJlZXplKHt9KTtpZihuLnNldChpLDEpLDE9PT1uLmdldChpKSlyZXR1cm4gdm9pZChlLmV4cG9ydHM9V2Vha01hcCk7dD0hMH19T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyxvPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxzPU9iamVjdC5pc0V4dGVuc2libGUsbD1cIndlYWttYXA6XCIsYz1sK1wiaWRlbnQ6XCIrTWF0aC5yYW5kb20oKStcIl9fX1wiO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBjcnlwdG8mJlwiZnVuY3Rpb25cIj09dHlwZW9mIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMmJlwiZnVuY3Rpb25cIj09dHlwZW9mIEFycmF5QnVmZmVyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBVaW50OEFycmF5KXt2YXIgdT1uZXcgQXJyYXlCdWZmZXIoMjUpLGg9bmV3IFVpbnQ4QXJyYXkodSk7Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyhoKSxjPWwrXCJyYW5kOlwiK0FycmF5LnByb3RvdHlwZS5tYXAuY2FsbChoLGZ1bmN0aW9uKHQpe3JldHVybih0JTM2KS50b1N0cmluZygzNil9KS5qb2luKFwiXCIpK1wiX19fXCJ9aWYobyhPYmplY3QsXCJnZXRPd25Qcm9wZXJ0eU5hbWVzXCIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBhKHQpLmZpbHRlcihtKX19KSxcImdldFByb3BlcnR5TmFtZXNcImluIE9iamVjdCl7dmFyIGY9T2JqZWN0LmdldFByb3BlcnR5TmFtZXM7byhPYmplY3QsXCJnZXRQcm9wZXJ0eU5hbWVzXCIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBmKHQpLmZpbHRlcihtKX19KX0hZnVuY3Rpb24oKXt2YXIgdD1PYmplY3QuZnJlZXplO28oT2JqZWN0LFwiZnJlZXplXCIse3ZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB5KGUpLHQoZSl9fSk7dmFyIGU9T2JqZWN0LnNlYWw7byhPYmplY3QsXCJzZWFsXCIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB5KHQpLGUodCl9fSk7dmFyIHI9T2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO28oT2JqZWN0LFwicHJldmVudEV4dGVuc2lvbnNcIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHkodCkscih0KX19KX0oKTt2YXIgcD0hMSxkPTAsZz1mdW5jdGlvbigpe3RoaXMgaW5zdGFuY2VvZiBnfHxiKCk7dmFyIHQ9W10sZT1bXSxyPWQrKztyZXR1cm4gT2JqZWN0LmNyZWF0ZShnLnByb3RvdHlwZSx7Z2V0X19fOnt2YWx1ZTp4KGZ1bmN0aW9uKG4saSl7dmFyIGEsbz15KG4pO3JldHVybiBvP3IgaW4gbz9vW3JdOmk6KGE9dC5pbmRleE9mKG4pKT49MD9lW2FdOml9KX0saGFzX19fOnt2YWx1ZTp4KGZ1bmN0aW9uKGUpe3ZhciBuPXkoZSk7cmV0dXJuIG4/ciBpbiBuOnQuaW5kZXhPZihlKT49MH0pfSxzZXRfX186e3ZhbHVlOngoZnVuY3Rpb24obixpKXt2YXIgYSxvPXkobik7cmV0dXJuIG8/b1tyXT1pOihhPXQuaW5kZXhPZihuKSk+PTA/ZVthXT1pOihhPXQubGVuZ3RoLGVbYV09aSx0W2FdPW4pLHRoaXN9KX0sZGVsZXRlX19fOnt2YWx1ZTp4KGZ1bmN0aW9uKG4pe3ZhciBpLGEsbz15KG4pO3JldHVybiBvP3IgaW4gbyYmZGVsZXRlIG9bcl06ISgoaT10LmluZGV4T2YobikpPDB8fChhPXQubGVuZ3RoLTEsdFtpXT12b2lkIDAsZVtpXT1lW2FdLHRbaV09dFthXSx0Lmxlbmd0aD1hLGUubGVuZ3RoPWEsMCkpfSl9fSl9O2cucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoT2JqZWN0LnByb3RvdHlwZSx7Z2V0Ont2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmdldF9fXyh0LGUpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9LGhhczp7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGFzX19fKHQpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9LHNldDp7dmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zZXRfX18odCxlKX0sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxkZWxldGU6e3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGV0ZV9fXyh0KX0sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLFwiZnVuY3Rpb25cIj09dHlwZW9mIHI/ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7dGhpcyBpbnN0YW5jZW9mIGd8fGIoKTt2YXIgZSxuPW5ldyByLGk9dm9pZCAwLGE9ITE7cmV0dXJuIGU9dD9mdW5jdGlvbih0LGUpe3JldHVybiBuLnNldCh0LGUpLG4uaGFzKHQpfHwoaXx8KGk9bmV3IGcpLGkuc2V0KHQsZSkpLHRoaXN9OmZ1bmN0aW9uKHQsZSl7aWYoYSl0cnl7bi5zZXQodCxlKX1jYXRjaChyKXtpfHwoaT1uZXcgZyksaS5zZXRfX18odCxlKX1lbHNlIG4uc2V0KHQsZSk7cmV0dXJuIHRoaXN9LE9iamVjdC5jcmVhdGUoZy5wcm90b3R5cGUse2dldF9fXzp7dmFsdWU6eChmdW5jdGlvbih0LGUpe3JldHVybiBpP24uaGFzKHQpP24uZ2V0KHQpOmkuZ2V0X19fKHQsZSk6bi5nZXQodCxlKX0pfSxoYXNfX186e3ZhbHVlOngoZnVuY3Rpb24odCl7cmV0dXJuIG4uaGFzKHQpfHwhIWkmJmkuaGFzX19fKHQpfSl9LHNldF9fXzp7dmFsdWU6eChlKX0sZGVsZXRlX19fOnt2YWx1ZTp4KGZ1bmN0aW9uKHQpe3ZhciBlPSEhbi5kZWxldGUodCk7cmV0dXJuIGkmJmkuZGVsZXRlX19fKHQpfHxlfSl9LHBlcm1pdEhvc3RPYmplY3RzX19fOnt2YWx1ZTp4KGZ1bmN0aW9uKHQpe2lmKHQhPT12KXRocm93IG5ldyBFcnJvcihcImJvZ3VzIGNhbGwgdG8gcGVybWl0SG9zdE9iamVjdHNfX19cIik7YT0hMH0pfX0pfXQmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBQcm94eSYmKFByb3h5PXZvaWQgMCksbi5wcm90b3R5cGU9Zy5wcm90b3R5cGUsZS5leHBvcnRzPW4sT2JqZWN0LmRlZmluZVByb3BlcnR5KFdlYWtNYXAucHJvdG90eXBlLFwiY29uc3RydWN0b3JcIix7dmFsdWU6V2Vha01hcCxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfSgpOihcInVuZGVmaW5lZFwiIT10eXBlb2YgUHJveHkmJihQcm94eT12b2lkIDApLGUuZXhwb3J0cz1nKX1mdW5jdGlvbiB2KHQpe3QucGVybWl0SG9zdE9iamVjdHNfX18mJnQucGVybWl0SG9zdE9iamVjdHNfX18odil9ZnVuY3Rpb24gbSh0KXtyZXR1cm4hKHQuc3Vic3RyKDAsbC5sZW5ndGgpPT1sJiZcIl9fX1wiPT09dC5zdWJzdHIodC5sZW5ndGgtMykpfWZ1bmN0aW9uIHkodCl7aWYodCE9PU9iamVjdCh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm90IGFuIG9iamVjdDogXCIrdCk7dmFyIGU9dFtjXTtpZihlJiZlLmtleT09PXQpcmV0dXJuIGU7aWYocyh0KSl7ZT17a2V5OnR9O3RyeXtyZXR1cm4gbyh0LGMse3ZhbHVlOmUsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITF9KSxlfWNhdGNoKHQpe3JldHVybn19fWZ1bmN0aW9uIHgodCl7cmV0dXJuIHQucHJvdG90eXBlPW51bGwsT2JqZWN0LmZyZWV6ZSh0KX1mdW5jdGlvbiBiKCl7cHx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIGNvbnNvbGV8fChwPSEwLGNvbnNvbGUud2FybihcIldlYWtNYXAgc2hvdWxkIGJlIGludm9rZWQgYXMgbmV3IFdlYWtNYXAoKSwgbm90IFdlYWtNYXAoKS4gVGhpcyB3aWxsIGJlIGFuIGVycm9yIGluIHRoZSBmdXR1cmUuXCIpKX19KCl9LHt9XSw1Mzg6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi9oaWRkZW4tc3RvcmUuanNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9e307cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKChcIm9iamVjdFwiIT10eXBlb2YgZXx8bnVsbD09PWUpJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcihcIldlYWttYXAtc2hpbTogS2V5IG11c3QgYmUgb2JqZWN0XCIpO3ZhciByPWUudmFsdWVPZih0KTtyZXR1cm4gciYmci5pZGVudGl0eT09PXQ/cjpuKGUsdCl9fX0se1wiLi9oaWRkZW4tc3RvcmUuanNcIjo1Mzl9XSw1Mzk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17aWRlbnRpdHk6ZX0sbj10LnZhbHVlT2Y7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwidmFsdWVPZlwiLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdCE9PWU/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6cn0sd3JpdGFibGU6ITB9KSxyfX0se31dLDU0MDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuL2NyZWF0ZS1zdG9yZS5qc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1uKCk7cmV0dXJue2dldDpmdW5jdGlvbihlLHIpe3ZhciBuPXQoZSk7cmV0dXJuIG4uaGFzT3duUHJvcGVydHkoXCJ2YWx1ZVwiKT9uLnZhbHVlOnJ9LHNldDpmdW5jdGlvbihlLHIpe3JldHVybiB0KGUpLnZhbHVlPXIsdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVyblwidmFsdWVcImluIHQoZSl9LGRlbGV0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZGVsZXRlIHQoZSkudmFsdWV9fX19LHtcIi4vY3JlYXRlLXN0b3JlLmpzXCI6NTM4fV0sNTQxOltmdW5jdGlvbih0LGUscil7dmFyIG49dChcImdldC1jYW52YXMtY29udGV4dFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJ3ZWJnbFwiLHQpfX0se1wiZ2V0LWNhbnZhcy1jb250ZXh0XCI6MjI5fV0sNTQyOltmdW5jdGlvbih0LGUscil7dmFyIG49dChcIi4uL21haW5cIiksaT10KFwib2JqZWN0LWFzc2lnblwiKSxhPW4uaW5zdGFuY2UoKTtmdW5jdGlvbiBvKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8XCJcIl18fHRoaXMucmVnaW9uYWxPcHRpb25zW1wiXCJdfW8ucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKG8ucHJvdG90eXBlLHtuYW1lOlwiQ2hpbmVzZVwiLGpkRXBvY2g6MTcyMTQyNS41LGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjAsZmlyc3RNb250aDowLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7XCJcIjp7bmFtZTpcIkNoaW5lc2VcIixlcG9jaHM6W1wiQkVDXCIsXCJFQ1wiXSxtb250aE51bWJlcnM6ZnVuY3Rpb24odCxlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7dmFyIHI9dC5tYXRjaChsKTtyZXR1cm4gcj9yWzBdOlwiXCJ9dmFyIG49dGhpcy5fdmFsaWRhdGVZZWFyKHQpLGk9dC5tb250aCgpLGE9XCJcIit0aGlzLnRvQ2hpbmVzZU1vbnRoKG4saSk7cmV0dXJuIGUmJmEubGVuZ3RoPDImJihhPVwiMFwiK2EpLHRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKG4saSkmJihhKz1cImlcIiksYX0sbW9udGhOYW1lczpmdW5jdGlvbih0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7dmFyIGU9dC5tYXRjaChjKTtyZXR1cm4gZT9lWzBdOlwiXCJ9dmFyIHI9dGhpcy5fdmFsaWRhdGVZZWFyKHQpLG49dC5tb250aCgpLGk9W1wiXFx1NGUwMFxcdTY3MDhcIixcIlxcdTRlOGNcXHU2NzA4XCIsXCJcXHU0ZTA5XFx1NjcwOFwiLFwiXFx1NTZkYlxcdTY3MDhcIixcIlxcdTRlOTRcXHU2NzA4XCIsXCJcXHU1MTZkXFx1NjcwOFwiLFwiXFx1NGUwM1xcdTY3MDhcIixcIlxcdTUxNmJcXHU2NzA4XCIsXCJcXHU0ZTVkXFx1NjcwOFwiLFwiXFx1NTM0MVxcdTY3MDhcIixcIlxcdTUzNDFcXHU0ZTAwXFx1NjcwOFwiLFwiXFx1NTM0MVxcdTRlOGNcXHU2NzA4XCJdW3RoaXMudG9DaGluZXNlTW9udGgocixuKS0xXTtyZXR1cm4gdGhpcy5pc0ludGVyY2FsYXJ5TW9udGgocixuKSYmKGk9XCJcXHU5NWYwXCIraSksaX0sbW9udGhOYW1lc1Nob3J0OmZ1bmN0aW9uKHQpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXt2YXIgZT10Lm1hdGNoKHUpO3JldHVybiBlP2VbMF06XCJcIn12YXIgcj10aGlzLl92YWxpZGF0ZVllYXIodCksbj10Lm1vbnRoKCksaT1bXCJcXHU0ZTAwXCIsXCJcXHU0ZThjXCIsXCJcXHU0ZTA5XCIsXCJcXHU1NmRiXCIsXCJcXHU0ZTk0XCIsXCJcXHU1MTZkXCIsXCJcXHU0ZTAzXCIsXCJcXHU1MTZiXCIsXCJcXHU0ZTVkXCIsXCJcXHU1MzQxXCIsXCJcXHU1MzQxXFx1NGUwMFwiLFwiXFx1NTM0MVxcdTRlOGNcIl1bdGhpcy50b0NoaW5lc2VNb250aChyLG4pLTFdO3JldHVybiB0aGlzLmlzSW50ZXJjYWxhcnlNb250aChyLG4pJiYoaT1cIlxcdTk1ZjBcIitpKSxpfSxwYXJzZU1vbnRoOmZ1bmN0aW9uKHQsZSl7dD10aGlzLl92YWxpZGF0ZVllYXIodCk7dmFyIHIsbj1wYXJzZUludChlKTtpZihpc05hTihuKSlcIlxcdTk1ZjBcIj09PWVbMF0mJihyPSEwLGU9ZS5zdWJzdHJpbmcoMSkpLFwiXFx1NjcwOFwiPT09ZVtlLmxlbmd0aC0xXSYmKGU9ZS5zdWJzdHJpbmcoMCxlLmxlbmd0aC0xKSksbj0xK1tcIlxcdTRlMDBcIixcIlxcdTRlOGNcIixcIlxcdTRlMDlcIixcIlxcdTU2ZGJcIixcIlxcdTRlOTRcIixcIlxcdTUxNmRcIixcIlxcdTRlMDNcIixcIlxcdTUxNmJcIixcIlxcdTRlNWRcIixcIlxcdTUzNDFcIixcIlxcdTUzNDFcXHU0ZTAwXCIsXCJcXHU1MzQxXFx1NGU4Y1wiXS5pbmRleE9mKGUpO2Vsc2V7dmFyIGk9ZVtlLmxlbmd0aC0xXTtyPVwiaVwiPT09aXx8XCJJXCI9PT1pfXJldHVybiB0aGlzLnRvTW9udGhJbmRleCh0LG4scil9LGRheU5hbWVzOltcIlN1bmRheVwiLFwiTW9uZGF5XCIsXCJUdWVzZGF5XCIsXCJXZWRuZXNkYXlcIixcIlRodXJzZGF5XCIsXCJGcmlkYXlcIixcIlNhdHVyZGF5XCJdLGRheU5hbWVzU2hvcnQ6W1wiU3VuXCIsXCJNb25cIixcIlR1ZVwiLFwiV2VkXCIsXCJUaHVcIixcIkZyaVwiLFwiU2F0XCJdLGRheU5hbWVzTWluOltcIlN1XCIsXCJNb1wiLFwiVHVcIixcIldlXCIsXCJUaFwiLFwiRnJcIixcIlNhXCJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6XCJ5eXl5L21tL2RkXCIsZmlyc3REYXk6MSxpc1JUTDohMX19LF92YWxpZGF0ZVllYXI6ZnVuY3Rpb24odCxlKXtpZih0LnllYXImJih0PXQueWVhcigpKSxcIm51bWJlclwiIT10eXBlb2YgdHx8dDwxODg4fHx0PjIxMTEpdGhyb3cgZS5yZXBsYWNlKC9cXHswXFx9Lyx0aGlzLmxvY2FsLm5hbWUpO3JldHVybiB0fSx0b01vbnRoSW5kZXg6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuaW50ZXJjYWxhcnlNb250aCh0KTtpZihyJiZlIT09aXx8ZTwxfHxlPjEyKXRocm93IG4ubG9jYWwuaW52YWxpZE1vbnRoLnJlcGxhY2UoL1xcezBcXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIGk/IXImJmU8PWk/ZS0xOmU6ZS0xfSx0b0NoaW5lc2VNb250aDpmdW5jdGlvbih0LGUpe3QueWVhciYmKGU9KHQ9dC55ZWFyKCkpLm1vbnRoKCkpO3ZhciByPXRoaXMuaW50ZXJjYWxhcnlNb250aCh0KTtpZihlPDB8fGU+KHI/MTI6MTEpKXRocm93IG4ubG9jYWwuaW52YWxpZE1vbnRoLnJlcGxhY2UoL1xcezBcXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIHI/ZTxyP2UrMTplOmUrMX0saW50ZXJjYWxhcnlNb250aDpmdW5jdGlvbih0KXtyZXR1cm4gdD10aGlzLl92YWxpZGF0ZVllYXIodCksaFt0LWhbMF1dPj4xM30saXNJbnRlcmNhbGFyeU1vbnRoOmZ1bmN0aW9uKHQsZSl7dC55ZWFyJiYoZT0odD10LnllYXIoKSkubW9udGgoKSk7dmFyIHI9dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpO3JldHVybiEhciYmcj09PWV9LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiAwIT09dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxvPXRoaXMuX3ZhbGlkYXRlWWVhcih0LG4ubG9jYWwuaW52YWxpZHllYXIpLHM9ZltvLWZbMF1dLGw9cz4+OSY0MDk1LGM9cz4+NSYxNSx1PTMxJnM7KGk9YS5uZXdEYXRlKGwsYyx1KSkuYWRkKDQtKGkuZGF5T2ZXZWVrKCl8fDcpLFwiZFwiKTt2YXIgaD10aGlzLnRvSkQodCxlLHIpLWkudG9KRCgpO3JldHVybiAxK01hdGguZmxvb3IoaC83KX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlYXBZZWFyKHQpPzEzOjEyfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3QueWVhciYmKGU9dC5tb250aCgpLHQ9dC55ZWFyKCkpLHQ9dGhpcy5fdmFsaWRhdGVZZWFyKHQpO3ZhciByPWhbdC1oWzBdXTtpZihlPihyPj4xMz8xMjoxMSkpdGhyb3cgbi5sb2NhbC5pbnZhbGlkTW9udGgucmVwbGFjZSgvXFx7MFxcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gciYxPDwxMi1lPzMwOjI5fSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LHMscixuLmxvY2FsLmludmFsaWREYXRlKTt0PXRoaXMuX3ZhbGlkYXRlWWVhcihpLnllYXIoKSksZT1pLm1vbnRoKCkscj1pLmRheSgpO3ZhciBvPXRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKHQsZSkscz10aGlzLnRvQ2hpbmVzZU1vbnRoKHQsZSksbD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLG8scztpZihcIm9iamVjdFwiPT10eXBlb2YgdClvPXQsYT1lfHx7fTtlbHNle3ZhciBsPVwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0xODg4JiZ0PD0yMTExO2lmKCFsKXRocm93IG5ldyBFcnJvcihcIkx1bmFyIHllYXIgb3V0c2lkZSByYW5nZSAxODg4LTIxMTFcIik7dmFyIGM9XCJudW1iZXJcIj09dHlwZW9mIGUmJmU+PTEmJmU8PTEyO2lmKCFjKXRocm93IG5ldyBFcnJvcihcIkx1bmFyIG1vbnRoIG91dHNpZGUgcmFuZ2UgMSAtIDEyXCIpO3ZhciB1LHA9XCJudW1iZXJcIj09dHlwZW9mIHImJnI+PTEmJnI8PTMwO2lmKCFwKXRocm93IG5ldyBFcnJvcihcIkx1bmFyIGRheSBvdXRzaWRlIHJhbmdlIDEgLSAzMFwiKTtcIm9iamVjdFwiPT10eXBlb2Ygbj8odT0hMSxhPW4pOih1PSEhbixhPWl8fHt9KSxvPXt5ZWFyOnQsbW9udGg6ZSxkYXk6cixpc0ludGVyY2FsYXJ5OnV9fXM9by5kYXktMTt2YXIgZCxnPWhbby55ZWFyLWhbMF1dLHY9Zz4+MTM7ZD12P28ubW9udGg+dj9vLm1vbnRoOm8uaXNJbnRlcmNhbGFyeT9vLm1vbnRoOm8ubW9udGgtMTpvLm1vbnRoLTE7Zm9yKHZhciBtPTA7bTxkO20rKyl7dmFyIHk9ZyYxPDwxMi1tPzMwOjI5O3MrPXl9dmFyIHg9ZltvLnllYXItZlswXV0sYj1uZXcgRGF0ZSh4Pj45JjQwOTUsKHg+PjUmMTUpLTEsKDMxJngpK3MpO3JldHVybiBhLnllYXI9Yi5nZXRGdWxsWWVhcigpLGEubW9udGg9MStiLmdldE1vbnRoKCksYS5kYXk9Yi5nZXREYXRlKCksYX0odCxzLHIsbyk7cmV0dXJuIGEudG9KRChsLnllYXIsbC5tb250aCxsLmRheSl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1hLmZyb21KRCh0KSxyPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE7aWYoXCJvYmplY3RcIj09dHlwZW9mIHQpaT10LGE9ZXx8e307ZWxzZXt2YXIgbz1cIm51bWJlclwiPT10eXBlb2YgdCYmdD49MTg4OCYmdDw9MjExMTtpZighbyl0aHJvdyBuZXcgRXJyb3IoXCJTb2xhciB5ZWFyIG91dHNpZGUgcmFuZ2UgMTg4OC0yMTExXCIpO3ZhciBzPVwibnVtYmVyXCI9PXR5cGVvZiBlJiZlPj0xJiZlPD0xMjtpZighcyl0aHJvdyBuZXcgRXJyb3IoXCJTb2xhciBtb250aCBvdXRzaWRlIHJhbmdlIDEgLSAxMlwiKTt2YXIgbD1cIm51bWJlclwiPT10eXBlb2YgciYmcj49MSYmcjw9MzE7aWYoIWwpdGhyb3cgbmV3IEVycm9yKFwiU29sYXIgZGF5IG91dHNpZGUgcmFuZ2UgMSAtIDMxXCIpO2k9e3llYXI6dCxtb250aDplLGRheTpyfSxhPW58fHt9fXZhciBjPWZbaS55ZWFyLWZbMF1dLHU9aS55ZWFyPDw5fGkubW9udGg8PDV8aS5kYXk7YS55ZWFyPXU+PWM/aS55ZWFyOmkueWVhci0xLGM9ZlthLnllYXItZlswXV07dmFyIHAsZD1uZXcgRGF0ZShjPj45JjQwOTUsKGM+PjUmMTUpLTEsMzEmYyksZz1uZXcgRGF0ZShpLnllYXIsaS5tb250aC0xLGkuZGF5KTtwPU1hdGgucm91bmQoKGctZCkvODY0ZTUpO3ZhciB2LG09aFthLnllYXItaFswXV07Zm9yKHY9MDt2PDEzO3YrKyl7dmFyIHk9bSYxPDwxMi12PzMwOjI5O2lmKHA8eSlicmVhaztwLT15fXZhciB4PW0+PjEzOyF4fHx2PHg/KGEuaXNJbnRlcmNhbGFyeT0hMSxhLm1vbnRoPTErdik6dj09PXg/KGEuaXNJbnRlcmNhbGFyeT0hMCxhLm1vbnRoPXYpOihhLmlzSW50ZXJjYWxhcnk9ITEsYS5tb250aD12KTtyZXR1cm4gYS5kYXk9MStwLGF9KGUueWVhcigpLGUubW9udGgoKSxlLmRheSgpKSxuPXRoaXMudG9Nb250aEluZGV4KHIueWVhcixyLm1vbnRoLHIuaXNJbnRlcmNhbGFyeSk7cmV0dXJuIHRoaXMubmV3RGF0ZShyLnllYXIsbixyLmRheSl9LGZyb21TdHJpbmc6ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaChzKSxyPXRoaXMuX3ZhbGlkYXRlWWVhcigrZVsxXSksbj0rZVsyXSxpPSEhZVszXSxhPXRoaXMudG9Nb250aEluZGV4KHIsbixpKSxvPStlWzRdO3JldHVybiB0aGlzLm5ld0RhdGUocixhLG8pfSxhZGQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQueWVhcigpLGk9dC5tb250aCgpLGE9dGhpcy5pc0ludGVyY2FsYXJ5TW9udGgobixpKSxzPXRoaXMudG9DaGluZXNlTW9udGgobixpKSxsPU9iamVjdC5nZXRQcm90b3R5cGVPZihvLnByb3RvdHlwZSkuYWRkLmNhbGwodGhpcyx0LGUscik7aWYoXCJ5XCI9PT1yKXt2YXIgYz1sLnllYXIoKSx1PWwubW9udGgoKSxoPXRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKGMscyksZj1hJiZoP3RoaXMudG9Nb250aEluZGV4KGMscywhMCk6dGhpcy50b01vbnRoSW5kZXgoYyxzLCExKTtmIT09dSYmbC5tb250aChmKX1yZXR1cm4gbH19KTt2YXIgcz0vXlxccyooLT9cXGRcXGRcXGRcXGR8XFxkXFxkKVstXFwvXShcXGQ/XFxkKShbaUldPylbLVxcL10oXFxkP1xcZCkvbSxsPS9eXFxkP1xcZFtpSV0/L20sYz0vXlxcdTk1ZjA/XFx1NTM0MT9bXFx1NGUwMFxcdTRlOGNcXHU0ZTA5XFx1NTZkYlxcdTRlOTRcXHU1MTZkXFx1NGUwM1xcdTUxNmJcXHU0ZTVkXT9cXHU2NzA4L20sdT0vXlxcdTk1ZjA/XFx1NTM0MT9bXFx1NGUwMFxcdTRlOGNcXHU0ZTA5XFx1NTZkYlxcdTRlOTRcXHU1MTZkXFx1NGUwM1xcdTUxNmJcXHU0ZTVkXT8vbTtuLmNhbGVuZGFycy5jaGluZXNlPW87dmFyIGg9WzE4ODcsNTc4MCw1ODAyLDE5MTU3LDI3NDIsNTAzNTksMTE5OCwyNjQ2LDQ2Mzc4LDc0NjYsMzQxMiwzMDEyMiw1NDgyLDY3OTQ5LDIzOTYsNTI5NCw0MzU5Nyw2NzMyLDY5NTQsMzYxODEsMjc3Miw0OTU0LDE4NzgxLDIzOTYsNTQ0MjcsNTI3NCw2NzMwLDQ3NzgxLDU4MDAsNjg2OCwyMTIxMCw0NzkwLDU5NzAzLDIzNTAsNTI3MCw0NjY2NywzNDAyLDM0OTYsMzgzMjUsMTM4OCw0NzgyLDE4NzM1LDIzNTAsNTIzNzQsNjgwNCw3NDk4LDQ0NDU3LDI5MDYsMTM4OCwyOTI5NCw0NzAwLDYzNzg5LDY0NDIsNjgwNCw1NjEzOCw1ODAyLDI3NzIsMzgyMzUsMTIxMCw0Njk4LDIyODI3LDU0MTgsNjMxMjUsMzQ3Niw1ODAyLDQzNzAxLDI0ODQsNTMwMiwyNzIyMywyNjQ2LDcwOTU0LDc0NjYsMzQxMiw1NDY5OCw1NDgyLDI0MTIsMzgwNjIsNTI5NCwyNjM2LDMyMDM4LDY5NTQsNjAyNDUsMjc3Miw0ODI2LDQzMzU3LDIzOTQsNTI3NCwzOTUwMSw2NzMwLDcyMzU3LDU4MDAsNTg0NCw1Mzk3OCw0NzkwLDIzNTgsMzgwMzksNTI3MCw4NzYyNywzNDAyLDM0OTYsNTQ3MDgsNTQ4NCw0NzgyLDQzMzExLDIzNTAsMzIyMiwyNzk3OCw3NDk4LDY4OTY1LDI5MDQsNTQ4NCw0NTY3Nyw0NzAwLDY0NDQsMzk1NzMsNjgwNCw2OTg2LDE5Mjg1LDI3NzIsNjI4MTEsMTIxMCw0Njk4LDQ3NDAzLDU0MTgsNTc4MCwzODU3MCw1NTQ2LDc2NDY5LDI0MjAsNTMwMiw1MTc5OSwyNjQ2LDU0MTQsMzY1MDEsMzQxMiw1NTQ2LDE4ODY5LDI0MTIsNTQ0NDYsNTI3Niw2NzMyLDQ4NDIyLDY4MjIsMjkwMCwyODAxMCw0ODI2LDkyNTA5LDIzOTQsNTI3NCw1NTg4Myw2NzMwLDY4MjAsNDc5NTYsNTgxMiwyNzc4LDE4Nzc5LDIzNTgsNjI2MTUsNTI3MCw1NDUwLDQ2NzU3LDM0OTIsNTU1NiwyNzMxOCw0NzE4LDY3ODg3LDIzNTAsMzIyMiw1MjU1NCw3NDk4LDM0MjgsMzgyNTIsNTQ2OCw0NzAwLDMxMDIyLDY0NDQsNjQxNDksNjgwNCw2OTg2LDQzODYxLDI3NzIsNTMzOCwzNTQyMSwyNjUwLDcwOTU1LDU0MTgsNTc4MCw1NDk1NCw1NTQ2LDI3NDAsMzgwNzQsNTMwMiwyNjQ2LDI5OTkxLDMzNjYsNjEwMTEsMzQxMiw1NTQ2LDQzNDQ1LDI0MTIsNTI5NCwzNTQwNiw2NzMyLDcyOTk4LDY4MjAsNjk5Niw1MjU4NiwyNzc4LDIzOTYsMzgwNDUsNTI3NCw2Njk4LDIzMzMzLDY4MjAsNjQzMzgsNTgxMiwyNzQ2LDQzMzU1LDIzNTgsNTI3MCwzOTQ5OSw1NDUwLDc5NTI1LDM0OTIsNTU0OF0sZj1bMTg4Nyw5NjY3MzIsOTY3MjMxLDk2NzczMyw5NjgyNjUsOTY4NzY2LDk2OTI5Nyw5Njk3OTgsOTcwMjk4LDk3MDgyOSw5NzEzMzAsOTcxODMwLDk3MjM2Miw5NzI4NjMsOTczMzk1LDk3Mzg5Niw5NzQzOTcsOTc0OTI4LDk3NTQyOCw5NzU5MjksOTc2NDYxLDk3Njk2Miw5Nzc0NjIsOTc3OTk0LDk3ODQ5NCw5NzkwMjYsOTc5NTI2LDk4MDAyNiw5ODA1NTgsOTgxMDU5LDk4MTU1OSw5ODIwOTEsOTgyNTkzLDk4MzEyNCw5ODM2MjQsOTg0MTI0LDk4NDY1Niw5ODUxNTcsOTg1NjU2LDk4NjE4OSw5ODY2OTAsOTg3MTkxLDk4NzcyMiw5ODgyMjIsOTg4NzUzLDk4OTI1NCw5ODk3NTQsOTkwMjg2LDk5MDc4OCw5OTEyODgsOTkxODE5LDk5MjMxOSw5OTI4NTEsOTkzMzUyLDk5Mzg1MSw5OTQzODMsOTk0ODg1LDk5NTM4NSw5OTU5MTcsOTk2NDE4LDk5NjkxOCw5OTc0NTAsOTk3OTQ5LDk5ODQ4MSw5OTg5ODIsOTk5NDgzLDEwMDAwMTQsMTAwMDUxNSwxMDAxMDE2LDEwMDE1NDgsMTAwMjA0NywxMDAyNTc4LDEwMDMwODAsMTAwMzU4MCwxMDA0MTExLDEwMDQ2MTMsMTAwNTExMywxMDA1NjQ1LDEwMDYxNDYsMTAwNjY0NSwxMDA3MTc3LDEwMDc2NzgsMTAwODIwOSwxMDA4NzEwLDEwMDkyMTEsMTAwOTc0MywxMDEwMjQzLDEwMTA3NDMsMTAxMTI3NSwxMDExNzc1LDEwMTIzMDYsMTAxMjgwNywxMDEzMzA4LDEwMTM4NDAsMTAxNDM0MSwxMDE0ODQxLDEwMTUzNzMsMTAxNTg3NCwxMDE2NDA0LDEwMTY5MDUsMTAxNzQwNSwxMDE3OTM3LDEwMTg0MzgsMTAxODkzOSwxMDE5NDcxLDEwMTk5NzIsMTAyMDQ3MSwxMDIxMDAyLDEwMjE1MDMsMTAyMjAzNSwxMDIyNTM1LDEwMjMwMzYsMTAyMzU2OCwxMDI0MDY5LDEwMjQ1NjgsMTAyNTEwMCwxMDI1NjAxLDEwMjYxMDIsMTAyNjYzMywxMDI3MTMzLDEwMjc2NjYsMTAyODE2NywxMDI4NjY2LDEwMjkxOTgsMTAyOTY5OSwxMDMwMTk5LDEwMzA3MzAsMTAzMTIzMSwxMDMxNzYzLDEwMzIyNjQsMTAzMjc2NCwxMDMzMjk2LDEwMzM3OTcsMTAzNDI5NywxMDM0ODI4LDEwMzUzMjksMTAzNTgzMCwxMDM2MzYyLDEwMzY4NjEsMTAzNzM5MywxMDM3ODk0LDEwMzgzOTQsMTAzODkyNSwxMDM5NDI3LDEwMzk5MjcsMTA0MDQ1OSwxMDQwOTU5LDEwNDE0OTEsMTA0MTk5MiwxMDQyNDkyLDEwNDMwMjMsMTA0MzUyNCwxMDQ0MDI0LDEwNDQ1NTYsMTA0NTA1NywxMDQ1NTU4LDEwNDYwOTAsMTA0NjU5MCwxMDQ3MTIxLDEwNDc2MjIsMTA0ODEyMiwxMDQ4NjU0LDEwNDkxNTQsMTA0OTY1NSwxMDUwMTg3LDEwNTA2ODksMTA1MTIxOSwxMDUxNzIwLDEwNTIyMjAsMTA1Mjc1MSwxMDUzMjUyLDEwNTM3NTIsMTA1NDI4NCwxMDU0Nzg2LDEwNTUyODUsMTA1NTgxNywxMDU2MzE3LDEwNTY4NDksMTA1NzM0OSwxMDU3ODUwLDEwNTgzODIsMTA1ODg4MywxMDU5MzgzLDEwNTk5MTUsMTA2MDQxNSwxMDYwOTQ3LDEwNjE0NDcsMTA2MTk0NywxMDYyNDc5LDEwNjI5ODEsMTA2MzQ4MCwxMDY0MDEyLDEwNjQ1MTQsMTA2NTAxNCwxMDY1NTQ1LDEwNjYwNDUsMTA2NjU3NywxMDY3MDc4LDEwNjc1NzgsMTA2ODExMCwxMDY4NjExLDEwNjkxMTIsMTA2OTY0MiwxMDcwMTQyLDEwNzA2NzQsMTA3MTE3NSwxMDcxNjc1LDEwNzIyMDcsMTA3MjcwOSwxMDczMjA5LDEwNzM3NDAsMTA3NDI0MSwxMDc0NzQxLDEwNzUyNzMsMTA3NTc3MywxMDc2MzA1LDEwNzY4MDcsMTA3NzMwOCwxMDc3ODM5LDEwNzgzNDAsMTA3ODg0MCwxMDc5MzcyLDEwNzk4NzEsMTA4MDQwMywxMDgwOTA0XX0se1wiLi4vbWFpblwiOjU1NixcIm9iamVjdC1hc3NpZ25cIjo0NDd9XSw1NDM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi4vbWFpblwiKSxpPXQoXCJvYmplY3QtYXNzaWduXCIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHxcIlwiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbXCJcIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6XCJDb3B0aWNcIixqZEVwb2NoOjE4MjUwMjkuNSxkYXlzUGVyTW9udGg6WzMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDVdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7XCJcIjp7bmFtZTpcIkNvcHRpY1wiLGVwb2NoczpbXCJCQU1cIixcIkFNXCJdLG1vbnRoTmFtZXM6W1wiVGhvdXRcIixcIlBhb3BpXCIsXCJIYXRob3JcIixcIktvaWFrXCIsXCJUb2JpXCIsXCJNZXNoaXJcIixcIlBhcmVtaGF0XCIsXCJQYXJlbW91ZGVcIixcIlBhc2hvbnNcIixcIlBhb25pXCIsXCJFcGlwXCIsXCJNZXNvcmlcIixcIlBpIEtvZ2kgRW5hdm90XCJdLG1vbnRoTmFtZXNTaG9ydDpbXCJUaG9cIixcIlBhb1wiLFwiSGF0aFwiLFwiS29pXCIsXCJUb2JcIixcIk1lc2hcIixcIlBhdFwiLFwiUGFkXCIsXCJQYXNoXCIsXCJQYW9cIixcIkVwaVwiLFwiTWVzb1wiLFwiUGlLXCJdLGRheU5hbWVzOltcIlRreXJpYWthXCIsXCJQZXNuYXVcIixcIlBzaG9tZW50XCIsXCJQZWZ0b291XCIsXCJQdGlvdVwiLFwiUHNvb3VcIixcIlBzYWJiYXRvblwiXSxkYXlOYW1lc1Nob3J0OltcIlRreVwiLFwiUGVzXCIsXCJQc2hcIixcIlBlZlwiLFwiUHRpXCIsXCJQc29cIixcIlBzYVwiXSxkYXlOYW1lc01pbjpbXCJUa1wiLFwiUGVzXCIsXCJQc2hcIixcIlBlZlwiLFwiUHRcIixcIlBzb1wiLFwiUHNhXCJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6XCJkZC9tbS95eXl5XCIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4odD1lLnllYXIoKSsoZS55ZWFyKCk8MD8xOjApKSU0PT0zfHx0JTQ9PS0xfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyfHxuLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkWWVhciksMTN9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLFwiZFwiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMz09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuKHQ9aS55ZWFyKCkpPDAmJnQrKyxpLmRheSgpKzMwKihpLm1vbnRoKCktMSkrMzY1Kih0LTEpK01hdGguZmxvb3IodC80KSt0aGlzLmpkRXBvY2gtMX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodCkrLjUtdGhpcy5qZEVwb2NoLHI9TWF0aC5mbG9vcigoZS1NYXRoLmZsb29yKChlKzM2NikvMTQ2MSkpLzM2NSkrMTtyPD0wJiZyLS0sZT1NYXRoLmZsb29yKHQpKy41LXRoaXMubmV3RGF0ZShyLDEsMSkudG9KRCgpO3ZhciBuPU1hdGguZmxvb3IoZS8zMCkrMSxpPWUtMzAqKG4tMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIsbixpKX19KSxuLmNhbGVuZGFycy5jb3B0aWM9YX0se1wiLi4vbWFpblwiOjU1NixcIm9iamVjdC1hc3NpZ25cIjo0NDd9XSw1NDQ6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi4vbWFpblwiKSxpPXQoXCJvYmplY3QtYXNzaWduXCIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHxcIlwiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbXCJcIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6XCJEaXNjd29ybGRcIixqZEVwb2NoOjE3MjE0MjUuNSxkYXlzUGVyTW9udGg6WzE2LDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6e1wiXCI6e25hbWU6XCJEaXNjd29ybGRcIixlcG9jaHM6W1wiQlVDXCIsXCJVQ1wiXSxtb250aE5hbWVzOltcIklja1wiLFwiT2ZmbGVcIixcIkZlYnJ1YXJ5XCIsXCJNYXJjaFwiLFwiQXByaWxcIixcIk1heVwiLFwiSnVuZVwiLFwiR3J1bmVcIixcIkF1Z3VzdFwiLFwiU3B1bmVcIixcIlNla3RvYmVyXCIsXCJFbWJlclwiLFwiRGVjZW1iZXJcIl0sbW9udGhOYW1lc1Nob3J0OltcIklja1wiLFwiT2ZmXCIsXCJGZWJcIixcIk1hclwiLFwiQXByXCIsXCJNYXlcIixcIkp1blwiLFwiR3J1XCIsXCJBdWdcIixcIlNwdVwiLFwiU2VrXCIsXCJFbWJcIixcIkRlY1wiXSxkYXlOYW1lczpbXCJTdW5kYXlcIixcIk9jdGVkYXlcIixcIk1vbmRheVwiLFwiVHVlc2RheVwiLFwiV2VkbmVzZGF5XCIsXCJUaHVyc2RheVwiLFwiRnJpZGF5XCIsXCJTYXR1cmRheVwiXSxkYXlOYW1lc1Nob3J0OltcIlN1blwiLFwiT2N0XCIsXCJNb25cIixcIlR1ZVwiLFwiV2VkXCIsXCJUaHVcIixcIkZyaVwiLFwiU2F0XCJdLGRheU5hbWVzTWluOltcIlN1XCIsXCJPY1wiLFwiTW9cIixcIlR1XCIsXCJXZVwiLFwiVGhcIixcIkZyXCIsXCJTYVwiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OlwieXl5eS9tbS9kZFwiLGZpcnN0RGF5OjIsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLCExfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKSwxM30sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLDQwMH0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksXCJkXCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvOCkrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV19LGRheXNJbldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gOH0sZGF5T2ZXZWVrOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSkuZGF5KCkrMSklOH0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5kYXlPZldlZWsodCxlLHIpO3JldHVybiBuPj0yJiZuPD02fSxleHRyYUluZm86ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybntjZW50dXJ5Om9bTWF0aC5mbG9vcigoaS55ZWFyKCktMSkvMTAwKSsxXXx8XCJcIn19LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybiB0PWkueWVhcigpKyhpLnllYXIoKTwwPzE6MCksZT1pLm1vbnRoKCksKHI9aS5kYXkoKSkrKGU+MT8xNjowKSsoZT4yPzMyKihlLTIpOjApKzQwMCoodC0xKSt0aGlzLmpkRXBvY2gtMX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3Q9TWF0aC5mbG9vcih0Ky41KS1NYXRoLmZsb29yKHRoaXMuamRFcG9jaCktMTt2YXIgZT1NYXRoLmZsb29yKHQvNDAwKSsxO3QtPTQwMCooZS0xKSx0Kz10PjE1PzE2OjA7dmFyIHI9TWF0aC5mbG9vcih0LzMyKSsxLG49dC0zMiooci0xKSsxO3JldHVybiB0aGlzLm5ld0RhdGUoZTw9MD9lLTE6ZSxyLG4pfX0pO3ZhciBvPXsyMDpcIkZydWl0YmF0XCIsMjE6XCJBbmNob3Z5XCJ9O24uY2FsZW5kYXJzLmRpc2N3b3JsZD1hfSx7XCIuLi9tYWluXCI6NTU2LFwib2JqZWN0LWFzc2lnblwiOjQ0N31dLDU0NTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuLi9tYWluXCIpLGk9dChcIm9iamVjdC1hc3NpZ25cIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fFwiXCJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZTpcIkV0aGlvcGlhblwiLGpkRXBvY2g6MTcyNDIyMC41LGRheXNQZXJNb250aDpbMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsNV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOntcIlwiOntuYW1lOlwiRXRoaW9waWFuXCIsZXBvY2hzOltcIkJFRVwiLFwiRUVcIl0sbW9udGhOYW1lczpbXCJNZXNrZXJlbVwiLFwiVGlrZW1ldFwiLFwiSGlkYXJcIixcIlRhaGVzYXNcIixcIlRpclwiLFwiWWVrYXRpdFwiLFwiTWVnYWJpdFwiLFwiTWlhemlhXCIsXCJHZW5ib3RcIixcIlNlbmVcIixcIkhhbWxlXCIsXCJOZWhhc2VcIixcIlBhZ3VtZVwiXSxtb250aE5hbWVzU2hvcnQ6W1wiTWVzXCIsXCJUaWtcIixcIkhpZFwiLFwiVGFoXCIsXCJUaXJcIixcIllla1wiLFwiTWVnXCIsXCJNaWFcIixcIkdlblwiLFwiU2VuXCIsXCJIYW1cIixcIk5laFwiLFwiUGFnXCJdLGRheU5hbWVzOltcIkVodWRcIixcIlNlZ25vXCIsXCJNYWtzZWdub1wiLFwiSXJvYlwiLFwiSGFtdXNcIixcIkFyYlwiLFwiS2lkYW1lXCJdLGRheU5hbWVzU2hvcnQ6W1wiRWh1XCIsXCJTZWdcIixcIk1ha1wiLFwiSXJvXCIsXCJIYW1cIixcIkFyYlwiLFwiS2lkXCJdLGRheU5hbWVzTWluOltcIkVoXCIsXCJTZVwiLFwiTWFcIixcIklyXCIsXCJIYVwiLFwiQXJcIixcIktpXCJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6XCJkZC9tbS95eXl5XCIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4odD1lLnllYXIoKSsoZS55ZWFyKCk8MD8xOjApKSU0PT0zfHx0JTQ9PS0xfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyfHxuLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkWWVhciksMTN9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLFwiZFwiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMz09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuKHQ9aS55ZWFyKCkpPDAmJnQrKyxpLmRheSgpKzMwKihpLm1vbnRoKCktMSkrMzY1Kih0LTEpK01hdGguZmxvb3IodC80KSt0aGlzLmpkRXBvY2gtMX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodCkrLjUtdGhpcy5qZEVwb2NoLHI9TWF0aC5mbG9vcigoZS1NYXRoLmZsb29yKChlKzM2NikvMTQ2MSkpLzM2NSkrMTtyPD0wJiZyLS0sZT1NYXRoLmZsb29yKHQpKy41LXRoaXMubmV3RGF0ZShyLDEsMSkudG9KRCgpO3ZhciBuPU1hdGguZmxvb3IoZS8zMCkrMSxpPWUtMzAqKG4tMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIsbixpKX19KSxuLmNhbGVuZGFycy5ldGhpb3BpYW49YX0se1wiLi4vbWFpblwiOjU1NixcIm9iamVjdC1hc3NpZ25cIjo0NDd9XSw1NDY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi4vbWFpblwiKSxpPXQoXCJvYmplY3QtYXNzaWduXCIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHxcIlwiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbXCJcIl19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0LWUqTWF0aC5mbG9vcih0L2UpfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOlwiSGVicmV3XCIsamRFcG9jaDozNDc5OTUuNSxkYXlzUGVyTW9udGg6WzMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5LDI5XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6NyxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6e1wiXCI6e25hbWU6XCJIZWJyZXdcIixlcG9jaHM6W1wiQkFNXCIsXCJBTVwiXSxtb250aE5hbWVzOltcIk5pc2FuXCIsXCJJeWFyXCIsXCJTaXZhblwiLFwiVGFtbXV6XCIsXCJBdlwiLFwiRWx1bFwiLFwiVGlzaHJlaVwiLFwiQ2hlc2h2YW5cIixcIktpc2xldlwiLFwiVGV2ZXRcIixcIlNoZXZhdFwiLFwiQWRhclwiLFwiQWRhciBJSVwiXSxtb250aE5hbWVzU2hvcnQ6W1wiTmlzXCIsXCJJeWFcIixcIlNpdlwiLFwiVGFtXCIsXCJBdlwiLFwiRWx1XCIsXCJUaXNcIixcIkNoZVwiLFwiS2lzXCIsXCJUZXZcIixcIlNoZVwiLFwiQWRhXCIsXCJBZDJcIl0sZGF5TmFtZXM6W1wiWW9tIFJpc2hvblwiLFwiWW9tIFNoZW5pXCIsXCJZb20gU2hsaXNoaVwiLFwiWW9tIFJldmknaVwiLFwiWW9tIENoYW1pc2hpXCIsXCJZb20gU2hpc2hpXCIsXCJZb20gU2hhYmJhdFwiXSxkYXlOYW1lc1Nob3J0OltcIlJpc1wiLFwiU2hlXCIsXCJTaGxcIixcIlJldlwiLFwiQ2hhXCIsXCJTaGlcIixcIlNoYVwiXSxkYXlOYW1lc01pbjpbXCJSaVwiLFwiU2hlXCIsXCJTaGxcIixcIlJlXCIsXCJDaFwiLFwiU2hpXCIsXCJTaGFcIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDpcImRkL21tL3l5eXlcIixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybiB0aGlzLl9sZWFwWWVhcihlLnllYXIoKSl9LF9sZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gbyg3Kih0PXQ8MD90KzE6dCkrMSwxOSk8N30sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksdGhpcy5fbGVhcFllYXIodC55ZWFyP3QueWVhcigpOnQpPzEzOjEyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSxcImRcIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0PXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCksdGhpcy50b0pEKC0xPT09dD8xOnQrMSw3LDEpLXRoaXMudG9KRCh0LDcsMSl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueWVhciYmKGU9dC5tb250aCgpLHQ9dC55ZWFyKCkpLHRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCksMTI9PT1lJiZ0aGlzLmxlYXBZZWFyKHQpPzMwOjg9PT1lJiY1PT09byh0aGlzLmRheXNJblllYXIodCksMTApPzMwOjk9PT1lJiYzPT09byh0aGlzLmRheXNJblllYXIodCksMTApPzI5OnRoaXMuZGF5c1Blck1vbnRoW2UtMV19LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiA2IT09dGhpcy5kYXlPZldlZWsodCxlLHIpfSxleHRyYUluZm86ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybnt5ZWFyVHlwZToodGhpcy5sZWFwWWVhcihpKT9cImVtYm9saXNtaWNcIjpcImNvbW1vblwiKStcIiBcIitbXCJkZWZpY2llbnRcIixcInJlZ3VsYXJcIixcImNvbXBsZXRlXCJdW3RoaXMuZGF5c0luWWVhcihpKSUxMC0zXX19LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3Q9aS55ZWFyKCksZT1pLm1vbnRoKCkscj1pLmRheSgpO3ZhciBhPXQ8PTA/dCsxOnQsbz10aGlzLmpkRXBvY2grdGhpcy5fZGVsYXkxKGEpK3RoaXMuX2RlbGF5MihhKStyKzE7aWYoZTw3KXtmb3IodmFyIHM9NztzPD10aGlzLm1vbnRoc0luWWVhcih0KTtzKyspbys9dGhpcy5kYXlzSW5Nb250aCh0LHMpO2ZvcihzPTE7czxlO3MrKylvKz10aGlzLmRheXNJbk1vbnRoKHQscyl9ZWxzZSBmb3Iocz03O3M8ZTtzKyspbys9dGhpcy5kYXlzSW5Nb250aCh0LHMpO3JldHVybiBvfSxfZGVsYXkxOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IoKDIzNSp0LTIzNCkvMTkpLHI9MTIwODQrMTM3NTMqZSxuPTI5KmUrTWF0aC5mbG9vcihyLzI1OTIwKTtyZXR1cm4gbygzKihuKzEpLDcpPDMmJm4rKyxufSxfZGVsYXkyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2RlbGF5MSh0LTEpLHI9dGhpcy5fZGVsYXkxKHQpO3JldHVybiB0aGlzLl9kZWxheTEodCsxKS1yPT0zNTY/MjpyLWU9PTM4Mj8xOjB9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCkrLjU7Zm9yKHZhciBlPU1hdGguZmxvb3IoOTg0OTYqKHQtdGhpcy5qZEVwb2NoKS8zNTk3NTM1MSktMTt0Pj10aGlzLnRvSkQoLTE9PT1lPzE6ZSsxLDcsMSk7KWUrKztmb3IodmFyIHI9dDx0aGlzLnRvSkQoZSwxLDEpPzc6MTt0PnRoaXMudG9KRChlLHIsdGhpcy5kYXlzSW5Nb250aChlLHIpKTspcisrO3ZhciBuPXQtdGhpcy50b0pEKGUsciwxKSsxO3JldHVybiB0aGlzLm5ld0RhdGUoZSxyLG4pfX0pLG4uY2FsZW5kYXJzLmhlYnJldz1hfSx7XCIuLi9tYWluXCI6NTU2LFwib2JqZWN0LWFzc2lnblwiOjQ0N31dLDU0NzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuLi9tYWluXCIpLGk9dChcIm9iamVjdC1hc3NpZ25cIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fFwiXCJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZTpcIklzbGFtaWNcIixqZEVwb2NoOjE5NDg0MzkuNSxkYXlzUGVyTW9udGg6WzMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6e1wiXCI6e25hbWU6XCJJc2xhbWljXCIsZXBvY2hzOltcIkJIXCIsXCJBSFwiXSxtb250aE5hbWVzOltcIk11aGFycmFtXCIsXCJTYWZhclwiLFwiUmFiaScgYWwtYXd3YWxcIixcIlJhYmknIGFsLXRoYW5pXCIsXCJKdW1hZGEgYWwtYXd3YWxcIixcIkp1bWFkYSBhbC10aGFuaVwiLFwiUmFqYWJcIixcIlNoYSdhYmFuXCIsXCJSYW1hZGFuXCIsXCJTaGF3d2FsXCIsXCJEaHUgYWwtUWknZGFoXCIsXCJEaHUgYWwtSGlqamFoXCJdLG1vbnRoTmFtZXNTaG9ydDpbXCJNdWhcIixcIlNhZlwiLFwiUmFiMVwiLFwiUmFiMlwiLFwiSnVtMVwiLFwiSnVtMlwiLFwiUmFqXCIsXCJTaGEnXCIsXCJSYW1cIixcIlNoYXdcIixcIkRodVFcIixcIkRodUhcIl0sZGF5TmFtZXM6W1wiWWF3bSBhbC1haGFkXCIsXCJZYXdtIGFsLWl0aG5heW5cIixcIllhd20gYXRoLXRodWxhYXRoYWEnXCIsXCJZYXdtIGFsLWFyYmknYWEnXCIsXCJZYXdtIGFsLWtoYW1cXHUwMTJic1wiLFwiWWF3bSBhbC1qdW0nYVwiLFwiWWF3bSBhcy1zYWJ0XCJdLGRheU5hbWVzU2hvcnQ6W1wiQWhhXCIsXCJJdGhcIixcIlRodVwiLFwiQXJiXCIsXCJLaGFcIixcIkp1bVwiLFwiU2FiXCJdLGRheU5hbWVzTWluOltcIkFoXCIsXCJJdFwiLFwiVGhcIixcIkFyXCIsXCJLaFwiLFwiSnVcIixcIlNhXCJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6XCJ5eXl5L21tL2RkXCIsZmlyc3REYXk6Nixpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybigxMSp0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcikueWVhcigpKzE0KSUzMDwxMX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksXCJkXCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZWFwWWVhcih0KT8zNTU6MzU0fSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMTI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiA1IT09dGhpcy5kYXlPZldlZWsodCxlLHIpfSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4gdD1pLnllYXIoKSxlPWkubW9udGgoKSx0PXQ8PTA/dCsxOnQsKHI9aS5kYXkoKSkrTWF0aC5jZWlsKDI5LjUqKGUtMSkpKzM1NCoodC0xKStNYXRoLmZsb29yKCgzKzExKnQpLzMwKSt0aGlzLmpkRXBvY2gtMX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3Q9TWF0aC5mbG9vcih0KSsuNTt2YXIgZT1NYXRoLmZsb29yKCgzMCoodC10aGlzLmpkRXBvY2gpKzEwNjQ2KS8xMDYzMSk7ZT1lPD0wP2UtMTplO3ZhciByPU1hdGgubWluKDEyLE1hdGguY2VpbCgodC0yOS10aGlzLnRvSkQoZSwxLDEpKS8yOS41KSsxKSxuPXQtdGhpcy50b0pEKGUsciwxKSsxO3JldHVybiB0aGlzLm5ld0RhdGUoZSxyLG4pfX0pLG4uY2FsZW5kYXJzLmlzbGFtaWM9YX0se1wiLi4vbWFpblwiOjU1NixcIm9iamVjdC1hc3NpZ25cIjo0NDd9XSw1NDg6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi4vbWFpblwiKSxpPXQoXCJvYmplY3QtYXNzaWduXCIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHxcIlwiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbXCJcIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6XCJKdWxpYW5cIixqZEVwb2NoOjE3MjE0MjMuNSxkYXlzUGVyTW9udGg6WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6e1wiXCI6e25hbWU6XCJKdWxpYW5cIixlcG9jaHM6W1wiQkNcIixcIkFEXCJdLG1vbnRoTmFtZXM6W1wiSmFudWFyeVwiLFwiRmVicnVhcnlcIixcIk1hcmNoXCIsXCJBcHJpbFwiLFwiTWF5XCIsXCJKdW5lXCIsXCJKdWx5XCIsXCJBdWd1c3RcIixcIlNlcHRlbWJlclwiLFwiT2N0b2JlclwiLFwiTm92ZW1iZXJcIixcIkRlY2VtYmVyXCJdLG1vbnRoTmFtZXNTaG9ydDpbXCJKYW5cIixcIkZlYlwiLFwiTWFyXCIsXCJBcHJcIixcIk1heVwiLFwiSnVuXCIsXCJKdWxcIixcIkF1Z1wiLFwiU2VwXCIsXCJPY3RcIixcIk5vdlwiLFwiRGVjXCJdLGRheU5hbWVzOltcIlN1bmRheVwiLFwiTW9uZGF5XCIsXCJUdWVzZGF5XCIsXCJXZWRuZXNkYXlcIixcIlRodXJzZGF5XCIsXCJGcmlkYXlcIixcIlNhdHVyZGF5XCJdLGRheU5hbWVzU2hvcnQ6W1wiU3VuXCIsXCJNb25cIixcIlR1ZVwiLFwiV2VkXCIsXCJUaHVcIixcIkZyaVwiLFwiU2F0XCJdLGRheU5hbWVzTWluOltcIlN1XCIsXCJNb1wiLFwiVHVcIixcIldlXCIsXCJUaFwiLFwiRnJcIixcIlNhXCJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6XCJtbS9kZC95eXl5XCIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4odD1lLnllYXIoKTwwP2UueWVhcigpKzE6ZS55ZWFyKCkpJTQ9PTB9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKDQtKG4uZGF5T2ZXZWVrKCl8fDcpLFwiZFwiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4gdD1pLnllYXIoKSxlPWkubW9udGgoKSxyPWkuZGF5KCksdDwwJiZ0KyssZTw9MiYmKHQtLSxlKz0xMiksTWF0aC5mbG9vcigzNjUuMjUqKHQrNDcxNikpK01hdGguZmxvb3IoMzAuNjAwMSooZSsxKSkrci0xNTI0LjV9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKHQrLjUpKzE1MjQscj1NYXRoLmZsb29yKChlLTEyMi4xKS8zNjUuMjUpLG49TWF0aC5mbG9vcigzNjUuMjUqciksaT1NYXRoLmZsb29yKChlLW4pLzMwLjYwMDEpLGE9aS1NYXRoLmZsb29yKGk8MTQ/MToxMyksbz1yLU1hdGguZmxvb3IoYT4yPzQ3MTY6NDcxNSkscz1lLW4tTWF0aC5mbG9vcigzMC42MDAxKmkpO3JldHVybiBvPD0wJiZvLS0sdGhpcy5uZXdEYXRlKG8sYSxzKX19KSxuLmNhbGVuZGFycy5qdWxpYW49YX0se1wiLi4vbWFpblwiOjU1NixcIm9iamVjdC1hc3NpZ25cIjo0NDd9XSw1NDk6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi4vbWFpblwiKSxpPXQoXCJvYmplY3QtYXNzaWduXCIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHxcIlwiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbXCJcIl19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0LWUqTWF0aC5mbG9vcih0L2UpfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gbyh0LTEsZSkrMX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZTpcIk1heWFuXCIsamRFcG9jaDo1ODQyODIuNSxoYXNZZWFyWmVybzohMCxtaW5Nb250aDowLGZpcnN0TW9udGg6MCxtaW5EYXk6MCxyZWdpb25hbE9wdGlvbnM6e1wiXCI6e25hbWU6XCJNYXlhblwiLGVwb2NoczpbXCJcIixcIlwiXSxtb250aE5hbWVzOltcIjBcIixcIjFcIixcIjJcIixcIjNcIixcIjRcIixcIjVcIixcIjZcIixcIjdcIixcIjhcIixcIjlcIixcIjEwXCIsXCIxMVwiLFwiMTJcIixcIjEzXCIsXCIxNFwiLFwiMTVcIixcIjE2XCIsXCIxN1wiXSxtb250aE5hbWVzU2hvcnQ6W1wiMFwiLFwiMVwiLFwiMlwiLFwiM1wiLFwiNFwiLFwiNVwiLFwiNlwiLFwiN1wiLFwiOFwiLFwiOVwiLFwiMTBcIixcIjExXCIsXCIxMlwiLFwiMTNcIixcIjE0XCIsXCIxNVwiLFwiMTZcIixcIjE3XCJdLGRheU5hbWVzOltcIjBcIixcIjFcIixcIjJcIixcIjNcIixcIjRcIixcIjVcIixcIjZcIixcIjdcIixcIjhcIixcIjlcIixcIjEwXCIsXCIxMVwiLFwiMTJcIixcIjEzXCIsXCIxNFwiLFwiMTVcIixcIjE2XCIsXCIxN1wiLFwiMThcIixcIjE5XCJdLGRheU5hbWVzU2hvcnQ6W1wiMFwiLFwiMVwiLFwiMlwiLFwiM1wiLFwiNFwiLFwiNVwiLFwiNlwiLFwiN1wiLFwiOFwiLFwiOVwiLFwiMTBcIixcIjExXCIsXCIxMlwiLFwiMTNcIixcIjE0XCIsXCIxNVwiLFwiMTZcIixcIjE3XCIsXCIxOFwiLFwiMTlcIl0sZGF5TmFtZXNNaW46W1wiMFwiLFwiMVwiLFwiMlwiLFwiM1wiLFwiNFwiLFwiNVwiLFwiNlwiLFwiN1wiLFwiOFwiLFwiOVwiLFwiMTBcIixcIjExXCIsXCIxMlwiLFwiMTNcIixcIjE0XCIsXCIxNVwiLFwiMTZcIixcIjE3XCIsXCIxOFwiLFwiMTlcIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDpcIllZWVkubS5kXCIsZmlyc3REYXk6MCxpc1JUTDohMSxoYWFiTW9udGhzOltcIlBvcFwiLFwiVW9cIixcIlppcFwiLFwiWm90elwiLFwiVHplY1wiLFwiWHVsXCIsXCJZYXhraW5cIixcIk1vbFwiLFwiQ2hlblwiLFwiWWF4XCIsXCJaYWNcIixcIkNlaFwiLFwiTWFjXCIsXCJLYW5raW5cIixcIk11YW5cIixcIlBheFwiLFwiS2F5YWJcIixcIkN1bWt1XCIsXCJVYXllYlwiXSx0em9sa2luTW9udGhzOltcIkltaXhcIixcIklrXCIsXCJBa2JhbFwiLFwiS2FuXCIsXCJDaGljY2hhblwiLFwiQ2ltaVwiLFwiTWFuaWtcIixcIkxhbWF0XCIsXCJNdWx1Y1wiLFwiT2NcIixcIkNodWVuXCIsXCJFYlwiLFwiQmVuXCIsXCJJeFwiLFwiTWVuXCIsXCJDaWJcIixcIkNhYmFuXCIsXCJFdHpuYWJcIixcIkNhdWFjXCIsXCJBaGF1XCJdfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKSwhMX0sZm9ybWF0WWVhcjpmdW5jdGlvbih0KXt0PXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCk7dmFyIGU9TWF0aC5mbG9vcih0LzQwMCk7cmV0dXJuIHQlPTQwMCx0Kz10PDA/NDAwOjAsZStcIi5cIitNYXRoLmZsb29yKHQvMjApK1wiLlwiK3QlMjB9LGZvclllYXI6ZnVuY3Rpb24odCl7aWYoKHQ9dC5zcGxpdChcIi5cIikpLmxlbmd0aDwzKXRocm93XCJJbnZhbGlkIE1heWFuIHllYXJcIjtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXBhcnNlSW50KHRbcl0sMTApO2lmKE1hdGguYWJzKG4pPjE5fHxyPjAmJm48MCl0aHJvd1wiSW52YWxpZCBNYXlhbiB5ZWFyXCI7ZT0yMCplK259cmV0dXJuIGV9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLDE4fSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSksMH0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLDM2MH0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKSwyMH0sZGF5c0luV2VlazpmdW5jdGlvbigpe3JldHVybiA1fSxkYXlPZldlZWs6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKS5kYXkoKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpLCEwfSxleHRyYUluZm86ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpLnRvSkQoKSxhPXRoaXMuX3RvSGFhYihpKSxvPXRoaXMuX3RvVHpvbGtpbihpKTtyZXR1cm57aGFhYk1vbnRoTmFtZTp0aGlzLmxvY2FsLmhhYWJNb250aHNbYVswXS0xXSxoYWFiTW9udGg6YVswXSxoYWFiRGF5OmFbMV0sdHpvbGtpbkRheU5hbWU6dGhpcy5sb2NhbC50em9sa2luTW9udGhzW29bMF0tMV0sdHpvbGtpbkRheTpvWzBdLHR6b2xraW5UcmVjZW5hOm9bMV19fSxfdG9IYWFiOmZ1bmN0aW9uKHQpe3ZhciBlPW8oKHQtPXRoaXMuamRFcG9jaCkrOCszNDAsMzY1KTtyZXR1cm5bTWF0aC5mbG9vcihlLzIwKSsxLG8oZSwyMCldfSxfdG9Uem9sa2luOmZ1bmN0aW9uKHQpe3JldHVybltzKCh0LT10aGlzLmpkRXBvY2gpKzIwLDIwKSxzKHQrNCwxMyldfSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4gaS5kYXkoKSsyMCppLm1vbnRoKCkrMzYwKmkueWVhcigpK3RoaXMuamRFcG9jaH0sZnJvbUpEOmZ1bmN0aW9uKHQpe3Q9TWF0aC5mbG9vcih0KSsuNS10aGlzLmpkRXBvY2g7dmFyIGU9TWF0aC5mbG9vcih0LzM2MCk7dCU9MzYwLHQrPXQ8MD8zNjA6MDt2YXIgcj1NYXRoLmZsb29yKHQvMjApLG49dCUyMDtyZXR1cm4gdGhpcy5uZXdEYXRlKGUscixuKX19KSxuLmNhbGVuZGFycy5tYXlhbj1hfSx7XCIuLi9tYWluXCI6NTU2LFwib2JqZWN0LWFzc2lnblwiOjQ0N31dLDU1MDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuLi9tYWluXCIpLGk9dChcIm9iamVjdC1hc3NpZ25cIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fFwiXCJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXI7dmFyIG89bi5pbnN0YW5jZShcImdyZWdvcmlhblwiKTtpKGEucHJvdG90eXBlLHtuYW1lOlwiTmFuYWtzaGFoaVwiLGpkRXBvY2g6MjI1NzY3My41LGRheXNQZXJNb250aDpbMzEsMzEsMzEsMzEsMzEsMzAsMzAsMzAsMzAsMzAsMzAsMzBdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7XCJcIjp7bmFtZTpcIk5hbmFrc2hhaGlcIixlcG9jaHM6W1wiQk5cIixcIkFOXCJdLG1vbnRoTmFtZXM6W1wiQ2hldFwiLFwiVmFpc2FraFwiLFwiSmV0aFwiLFwiSGFyaFwiLFwiU2F3YW5cIixcIkJoYWRvblwiLFwiQXNzdVwiLFwiS2F0YWtcIixcIk1hZ2hhclwiLFwiUG9oXCIsXCJNYWdoXCIsXCJQaGFndW5cIl0sbW9udGhOYW1lc1Nob3J0OltcIkNoZVwiLFwiVmFpXCIsXCJKZXRcIixcIkhhclwiLFwiU2F3XCIsXCJCaGFcIixcIkFzc1wiLFwiS2F0XCIsXCJNZ3JcIixcIlBvaFwiLFwiTWdoXCIsXCJQaGFcIl0sZGF5TmFtZXM6W1wiU29tdmFhclwiLFwiTWFuZ2FsdmFyXCIsXCJCdWRodmFhclwiLFwiVmVlcnZhYXJcIixcIlNodWthcnZhYXJcIixcIlNhbmljaGFydmFhclwiLFwiRXR2YWFyXCJdLGRheU5hbWVzU2hvcnQ6W1wiU29tXCIsXCJNYW5nYWxcIixcIkJ1ZGhcIixcIlZlZXJcIixcIlNodWthclwiLFwiU2FuaWNoYXJcIixcIkV0XCJdLGRheU5hbWVzTWluOltcIlNvXCIsXCJNYVwiLFwiQnVcIixcIlZlXCIsXCJTaFwiLFwiU2FcIixcIkV0XCJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6XCJkZC1tbS15eXl5XCIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyfHxuLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkWWVhcik7cmV0dXJuIG8ubGVhcFllYXIoZS55ZWFyKCkrKGUueWVhcigpPDE/MTowKSsxNDY5KX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoMS0obi5kYXlPZldlZWsoKXx8NyksXCJkXCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDEyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWRNb250aCk7KHQ9aS55ZWFyKCkpPDAmJnQrKztmb3IodmFyIGE9aS5kYXkoKSxzPTE7czxpLm1vbnRoKCk7cysrKWErPXRoaXMuZGF5c1Blck1vbnRoW3MtMV07cmV0dXJuIGErby50b0pEKHQrMTQ2OCwzLDEzKX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3Q9TWF0aC5mbG9vcih0Ky41KTtmb3IodmFyIGU9TWF0aC5mbG9vcigodC0odGhpcy5qZEVwb2NoLTEpKS8zNjYpO3Q+PXRoaXMudG9KRChlKzEsMSwxKTspZSsrO2Zvcih2YXIgcj10LU1hdGguZmxvb3IodGhpcy50b0pEKGUsMSwxKSsuNSkrMSxuPTE7cj50aGlzLmRheXNJbk1vbnRoKGUsbik7KXItPXRoaXMuZGF5c0luTW9udGgoZSxuKSxuKys7cmV0dXJuIHRoaXMubmV3RGF0ZShlLG4scil9fSksbi5jYWxlbmRhcnMubmFuYWtzaGFoaT1hfSx7XCIuLi9tYWluXCI6NTU2LFwib2JqZWN0LWFzc2lnblwiOjQ0N31dLDU1MTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuLi9tYWluXCIpLGk9dChcIm9iamVjdC1hc3NpZ25cIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fFwiXCJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZTpcIk5lcGFsaVwiLGpkRXBvY2g6MTcwMDcwOS41LGRheXNQZXJNb250aDpbMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLGRheXNQZXJZZWFyOjM2NSxyZWdpb25hbE9wdGlvbnM6e1wiXCI6e25hbWU6XCJOZXBhbGlcIixlcG9jaHM6W1wiQkJTXCIsXCJBQlNcIl0sbW9udGhOYW1lczpbXCJCYWlzYWtoXCIsXCJKZXN0aGFcIixcIkFzaGFkaFwiLFwiU2hyYXdhblwiLFwiQmhhZHJhXCIsXCJBc2h3aW5cIixcIkthcnRpa1wiLFwiTWFuZ3NpclwiLFwiUGF1c2hcIixcIk1hbmdoXCIsXCJGYWxndW5cIixcIkNoYWl0cmFcIl0sbW9udGhOYW1lc1Nob3J0OltcIkJhaVwiLFwiSmVcIixcIkFzXCIsXCJTaHJhXCIsXCJCaGFcIixcIkFzaFwiLFwiS2FyXCIsXCJNYW5nXCIsXCJQYXVcIixcIk1hXCIsXCJGYWxcIixcIkNoYWlcIl0sZGF5TmFtZXM6W1wiQWFpdGFiYWFyXCIsXCJTb21iYWFyXCIsXCJNYW5nbGJhYXJcIixcIkJ1ZGhhYmFhclwiLFwiQmloaWJhYXJcIixcIlNodWtyYWJhYXJcIixcIlNoYW5pYmFhclwiXSxkYXlOYW1lc1Nob3J0OltcIkFhaXRhXCIsXCJTb21cIixcIk1hbmdsXCIsXCJCdWRoYVwiLFwiQmloaVwiLFwiU2h1a3JhXCIsXCJTaGFuaVwiXSxkYXlOYW1lc01pbjpbXCJBYWlcIixcIlNvXCIsXCJNYW5cIixcIkJ1XCIsXCJCaVwiLFwiU2h1XCIsXCJTaGFcIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDpcImRkL21tL3l5eXlcIixmaXJzdERheToxLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGF5c0luWWVhcih0KSE9PXRoaXMuZGF5c1BlclllYXJ9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLFwiZFwiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7aWYodD10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcikueWVhcigpLFwidW5kZWZpbmVkXCI9PXR5cGVvZiB0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3RdKXJldHVybiB0aGlzLmRheXNQZXJZZWFyO2Zvcih2YXIgZT0wLHI9dGhpcy5taW5Nb250aDtyPD0xMjtyKyspZSs9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVt0XVtyXTtyZXR1cm4gZX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC55ZWFyJiYoZT10Lm1vbnRoKCksdD10LnllYXIoKSksdGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKSxcInVuZGVmaW5lZFwiPT10eXBlb2YgdGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVt0XT90aGlzLmRheXNQZXJNb250aFtlLTFdOnRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbdF1bZV19LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiA2IT09dGhpcy5kYXlPZldlZWsodCxlLHIpfSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTt0PWkueWVhcigpLGU9aS5tb250aCgpLHI9aS5kYXkoKTt2YXIgYT1uLmluc3RhbmNlKCksbz0wLHM9ZSxsPXQ7dGhpcy5fY3JlYXRlTWlzc2luZ0NhbGVuZGFyRGF0YSh0KTt2YXIgYz10LShzPjl8fDk9PT1zJiZyPj10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdWzBdPzU2OjU3KTtmb3IoOSE9PWUmJihvPXIscy0tKTs5IT09czspczw9MCYmKHM9MTIsbC0tKSxvKz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdW3NdLHMtLTtyZXR1cm4gOT09PWU/KG8rPXItdGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtsXVswXSk8MCYmKG8rPWEuZGF5c0luWWVhcihjKSk6bys9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtsXVs5XS10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdWzBdLGEubmV3RGF0ZShjLDEsMSkuYWRkKG8sXCJkXCIpLnRvSkQoKX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPW4uaW5zdGFuY2UoKS5mcm9tSkQodCkscj1lLnllYXIoKSxpPWUuZGF5T2ZZZWFyKCksYT1yKzU2O3RoaXMuX2NyZWF0ZU1pc3NpbmdDYWxlbmRhckRhdGEoYSk7Zm9yKHZhciBvPTkscz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2FdWzBdLGw9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVthXVtvXS1zKzE7aT5sOykrK28+MTImJihvPTEsYSsrKSxsKz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2FdW29dO3ZhciBjPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbYV1bb10tKGwtaSk7cmV0dXJuIHRoaXMubmV3RGF0ZShhLG8sYyl9LF9jcmVhdGVNaXNzaW5nQ2FsZW5kYXJEYXRhOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGF5c1Blck1vbnRoLnNsaWNlKDApO2UudW5zaGlmdCgxNyk7Zm9yKHZhciByPXQtMTtyPHQrMjtyKyspXCJ1bmRlZmluZWRcIj09dHlwZW9mIHRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbcl0mJih0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3JdPWUpfSxORVBBTElfQ0FMRU5EQVJfREFUQTp7MTk3MDpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5NzE6WzE4LDMxLDMxLDMyLDMxLDMyLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTcyOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMTk3MzpbMTksMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDE5NzQ6WzE5LDMxLDMxLDMyLDMwLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTc1OlsxOCwzMSwzMSwzMiwzMiwzMCwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3NjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDE5Nzc6WzE4LDMxLDMyLDMxLDMyLDMxLDMxLDI5LDMwLDI5LDMwLDI5LDMxXSwxOTc4OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3OTpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5ODA6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwxOTgxOlsxOCwzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwzMCwzMF0sMTk4MjpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5ODM6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTg0OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMTk4NTpbMTgsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDE5ODY6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTg3OlsxOCwzMSwzMiwzMSwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMTk4ODpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDE5ODk6WzE4LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTkwOlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5MTpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5OTI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwxOTkzOlsxOCwzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5NDpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTU6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwxOTk2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMTk5NzpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTg6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTk5OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAwMDpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMDE6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDAyOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwMzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMDQ6WzE3LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDA1OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwNjpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMDc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDA4OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwyOSwzMV0sMjAwOTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMTA6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDExOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAxMjpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwMTM6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDE0OlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxNTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMTY6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDE3OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxODpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMTk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDIwOlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAyMTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDIzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjAyNDpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjU6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDI2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAyNzpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMjg6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDI5OlsxOCwzMSwzMSwzMiwzMSwzMiwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAzMDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMzAsMzAsMzAsMzFdLDIwMzE6WzE3LDMxLDMyLDMxLDMyLDMxLDMxLDMxLDMxLDMxLDMxLDMxLDMxXSwyMDMyOlsxNywzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMl0sMjAzMzpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMzQ6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDM1OlsxNywzMCwzMiwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwyOSwzMV0sMjAzNjpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMzc6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDM4OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAzOTpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwNDA6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDQxOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNDM6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDQ0OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0NTpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNDY6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDQ3OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0ODpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNDk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDUwOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA1MTpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNTI6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDUzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjA1NDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwNTU6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDMwLDI5LDMwXSwyMDU2OlsxNywzMSwzMSwzMiwzMSwzMiwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA1NzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNTg6WzE3LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDU5OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2MDpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNjE6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDYyOlsxNywzMCwzMiwzMSwzMiwzMSwzMSwyOSwzMCwyOSwzMCwyOSwzMV0sMjA2MzpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNjQ6WzE3LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY1OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA2NjpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMjksMzFdLDIwNjc6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY4OlsxNywzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2OTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNzA6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDcxOlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNzM6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDc0OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3NTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNzY6WzE2LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDc3OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA3ODpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNzk6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDgwOlsxNiwzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjA4MTpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDgzOlsxNywzMSwzMSwzMiwzMSwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NDpbMTcsMzEsMzEsMzIsMzEsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODU6WzE3LDMxLDMyLDMxLDMyLDMxLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NzpbMTYsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMzAsMjksMzAsMzAsMzBdLDIwODg6WzE2LDMwLDMxLDMyLDMyLDMwLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg5OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTE6WzE2LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDkyOlsxNiwzMSwzMSwzMiwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTQ6WzE3LDMxLDMxLDMyLDMxLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDk1OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwzMCwzMCwzMF0sMjA5NjpbMTcsMzAsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwOTc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDk4OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwyOSwzMCwyOSwzMCwzMCwzMV0sMjA5OTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMjksMzAsMzAsMzBdLDIxMDA6WzE3LDMxLDMyLDMxLDMyLDMwLDMxLDMwLDI5LDMwLDI5LDMwLDMwXX19KSxuLmNhbGVuZGFycy5uZXBhbGk9YX0se1wiLi4vbWFpblwiOjU1NixcIm9iamVjdC1hc3NpZ25cIjo0NDd9XSw1NTI6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi4vbWFpblwiKSxpPXQoXCJvYmplY3QtYXNzaWduXCIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHxcIlwiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbXCJcIl19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0LWUqTWF0aC5mbG9vcih0L2UpfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOlwiUGVyc2lhblwiLGpkRXBvY2g6MTk0ODMyMC41LGRheXNQZXJNb250aDpbMzEsMzEsMzEsMzEsMzEsMzEsMzAsMzAsMzAsMzAsMzAsMjldLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7XCJcIjp7bmFtZTpcIlBlcnNpYW5cIixlcG9jaHM6W1wiQlBcIixcIkFQXCJdLG1vbnRoTmFtZXM6W1wiRmFydmFyZGluXCIsXCJPcmRpYmVoZXNodFwiLFwiS2hvcmRhZFwiLFwiVGlyXCIsXCJNb3JkYWRcIixcIlNoYWhyaXZhclwiLFwiTWVoclwiLFwiQWJhblwiLFwiQXphclwiLFwiRGF5XCIsXCJCYWhtYW5cIixcIkVzZmFuZFwiXSxtb250aE5hbWVzU2hvcnQ6W1wiRmFyXCIsXCJPcmRcIixcIktob1wiLFwiVGlyXCIsXCJNb3JcIixcIlNoYVwiLFwiTWVoXCIsXCJBYmFcIixcIkF6YVwiLFwiRGF5XCIsXCJCYWhcIixcIkVzZlwiXSxkYXlOYW1lczpbXCJZZWtzaGFtYmVcIixcIkRvc2hhbWJlXCIsXCJTZXNoYW1iZVwiLFwiQ2hcXHhlNmhhcnNoYW1iZVwiLFwiUGFuanNoYW1iZVwiLFwiSm9tJ2VcIixcIlNoYW1iZVwiXSxkYXlOYW1lc1Nob3J0OltcIllla1wiLFwiRG9cIixcIlNlXCIsXCJDaFxceGU2XCIsXCJQYW5qXCIsXCJKb21cIixcIlNoYVwiXSxkYXlOYW1lc01pbjpbXCJZZVwiLFwiRG9cIixcIlNlXCIsXCJDaFwiLFwiUGFcIixcIkpvXCIsXCJTaFwiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OlwieXl5eS9tbS9kZFwiLGZpcnN0RGF5OjYsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7cmV0dXJuIDY4MiooKGUueWVhcigpLShlLnllYXIoKT4wPzQ3NDo0NzMpKSUyODIwKzQ3NCszOCklMjgxNjw2ODJ9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC0obi5kYXlPZldlZWsoKSsxKSU3LFwiZFwiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIDUhPT10aGlzLmRheU9mV2Vlayh0LGUscil9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3Q9aS55ZWFyKCksZT1pLm1vbnRoKCkscj1pLmRheSgpO3ZhciBhPXQtKHQ+PTA/NDc0OjQ3Mykscz00NzQrbyhhLDI4MjApO3JldHVybiByKyhlPD03PzMxKihlLTEpOjMwKihlLTEpKzYpK01hdGguZmxvb3IoKDY4MipzLTExMCkvMjgxNikrMzY1KihzLTEpKzEwMjk5ODMqTWF0aC5mbG9vcihhLzI4MjApK3RoaXMuamRFcG9jaC0xfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9KHQ9TWF0aC5mbG9vcih0KSsuNSktdGhpcy50b0pEKDQ3NSwxLDEpLHI9TWF0aC5mbG9vcihlLzEwMjk5ODMpLG49byhlLDEwMjk5ODMpLGk9MjgyMDtpZigxMDI5OTgyIT09bil7dmFyIGE9TWF0aC5mbG9vcihuLzM2Nikscz1vKG4sMzY2KTtpPU1hdGguZmxvb3IoKDIxMzQqYSsyODE2KnMrMjgxNSkvMTAyODUyMikrYSsxfXZhciBsPWkrMjgyMCpyKzQ3NDtsPWw8PTA/bC0xOmw7dmFyIGM9dC10aGlzLnRvSkQobCwxLDEpKzEsdT1jPD0xODY/TWF0aC5jZWlsKGMvMzEpOk1hdGguY2VpbCgoYy02KS8zMCksaD10LXRoaXMudG9KRChsLHUsMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKGwsdSxoKX19KSxuLmNhbGVuZGFycy5wZXJzaWFuPWEsbi5jYWxlbmRhcnMuamFsYWxpPWF9LHtcIi4uL21haW5cIjo1NTYsXCJvYmplY3QtYXNzaWduXCI6NDQ3fV0sNTUzOltmdW5jdGlvbih0LGUscil7dmFyIG49dChcIi4uL21haW5cIiksaT10KFwib2JqZWN0LWFzc2lnblwiKSxhPW4uaW5zdGFuY2UoKTtmdW5jdGlvbiBvKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8XCJcIl18fHRoaXMucmVnaW9uYWxPcHRpb25zW1wiXCJdfW8ucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKG8ucHJvdG90eXBlLHtuYW1lOlwiVGFpd2FuXCIsamRFcG9jaDoyNDE5NDAyLjUseWVhcnNPZmZzZXQ6MTkxMSxkYXlzUGVyTW9udGg6WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6e1wiXCI6e25hbWU6XCJUYWl3YW5cIixlcG9jaHM6W1wiQlJPQ1wiLFwiUk9DXCJdLG1vbnRoTmFtZXM6W1wiSmFudWFyeVwiLFwiRmVicnVhcnlcIixcIk1hcmNoXCIsXCJBcHJpbFwiLFwiTWF5XCIsXCJKdW5lXCIsXCJKdWx5XCIsXCJBdWd1c3RcIixcIlNlcHRlbWJlclwiLFwiT2N0b2JlclwiLFwiTm92ZW1iZXJcIixcIkRlY2VtYmVyXCJdLG1vbnRoTmFtZXNTaG9ydDpbXCJKYW5cIixcIkZlYlwiLFwiTWFyXCIsXCJBcHJcIixcIk1heVwiLFwiSnVuXCIsXCJKdWxcIixcIkF1Z1wiLFwiU2VwXCIsXCJPY3RcIixcIk5vdlwiLFwiRGVjXCJdLGRheU5hbWVzOltcIlN1bmRheVwiLFwiTW9uZGF5XCIsXCJUdWVzZGF5XCIsXCJXZWRuZXNkYXlcIixcIlRodXJzZGF5XCIsXCJGcmlkYXlcIixcIlNhdHVyZGF5XCJdLGRheU5hbWVzU2hvcnQ6W1wiU3VuXCIsXCJNb25cIixcIlR1ZVwiLFwiV2VkXCIsXCJUaHVcIixcIkZyaVwiLFwiU2F0XCJdLGRheU5hbWVzTWluOltcIlN1XCIsXCJNb1wiLFwiVHVcIixcIldlXCIsXCJUaFwiLFwiRnJcIixcIlNhXCJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6XCJ5eXl5L21tL2RkXCIsZmlyc3REYXk6MSxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTt0PXRoaXMuX3QyZ1llYXIoZS55ZWFyKCkpO3JldHVybiBhLmxlYXBZZWFyKHQpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7dD10aGlzLl90MmdZZWFyKGkueWVhcigpKTtyZXR1cm4gYS53ZWVrT2ZZZWFyKHQsaS5tb250aCgpLGkuZGF5KCkpfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7dD10aGlzLl90MmdZZWFyKGkueWVhcigpKTtyZXR1cm4gYS50b0pEKHQsaS5tb250aCgpLGkuZGF5KCkpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9YS5mcm9tSkQodCkscj10aGlzLl9nMnRZZWFyKGUueWVhcigpKTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIsZS5tb250aCgpLGUuZGF5KCkpfSxfdDJnWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdCt0aGlzLnllYXJzT2Zmc2V0Kyh0Pj0tdGhpcy55ZWFyc09mZnNldCYmdDw9LTE/MTowKX0sX2cydFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQtdGhpcy55ZWFyc09mZnNldC0odD49MSYmdDw9dGhpcy55ZWFyc09mZnNldD8xOjApfX0pLG4uY2FsZW5kYXJzLnRhaXdhbj1vfSx7XCIuLi9tYWluXCI6NTU2LFwib2JqZWN0LWFzc2lnblwiOjQ0N31dLDU1NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuLi9tYWluXCIpLGk9dChcIm9iamVjdC1hc3NpZ25cIiksYT1uLmluc3RhbmNlKCk7ZnVuY3Rpb24gbyh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fFwiXCJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXX1vLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShvLnByb3RvdHlwZSx7bmFtZTpcIlRoYWlcIixqZEVwb2NoOjE1MjMwOTguNSx5ZWFyc09mZnNldDo1NDMsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOntcIlwiOntuYW1lOlwiVGhhaVwiLGVwb2NoczpbXCJCQkVcIixcIkJFXCJdLG1vbnRoTmFtZXM6W1wiSmFudWFyeVwiLFwiRmVicnVhcnlcIixcIk1hcmNoXCIsXCJBcHJpbFwiLFwiTWF5XCIsXCJKdW5lXCIsXCJKdWx5XCIsXCJBdWd1c3RcIixcIlNlcHRlbWJlclwiLFwiT2N0b2JlclwiLFwiTm92ZW1iZXJcIixcIkRlY2VtYmVyXCJdLG1vbnRoTmFtZXNTaG9ydDpbXCJKYW5cIixcIkZlYlwiLFwiTWFyXCIsXCJBcHJcIixcIk1heVwiLFwiSnVuXCIsXCJKdWxcIixcIkF1Z1wiLFwiU2VwXCIsXCJPY3RcIixcIk5vdlwiLFwiRGVjXCJdLGRheU5hbWVzOltcIlN1bmRheVwiLFwiTW9uZGF5XCIsXCJUdWVzZGF5XCIsXCJXZWRuZXNkYXlcIixcIlRodXJzZGF5XCIsXCJGcmlkYXlcIixcIlNhdHVyZGF5XCJdLGRheU5hbWVzU2hvcnQ6W1wiU3VuXCIsXCJNb25cIixcIlR1ZVwiLFwiV2VkXCIsXCJUaHVcIixcIkZyaVwiLFwiU2F0XCJdLGRheU5hbWVzTWluOltcIlN1XCIsXCJNb1wiLFwiVHVcIixcIldlXCIsXCJUaFwiLFwiRnJcIixcIlNhXCJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6XCJkZC9tbS95eXl5XCIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTt0PXRoaXMuX3QyZ1llYXIoZS55ZWFyKCkpO3JldHVybiBhLmxlYXBZZWFyKHQpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7dD10aGlzLl90MmdZZWFyKGkueWVhcigpKTtyZXR1cm4gYS53ZWVrT2ZZZWFyKHQsaS5tb250aCgpLGkuZGF5KCkpfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7dD10aGlzLl90MmdZZWFyKGkueWVhcigpKTtyZXR1cm4gYS50b0pEKHQsaS5tb250aCgpLGkuZGF5KCkpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9YS5mcm9tSkQodCkscj10aGlzLl9nMnRZZWFyKGUueWVhcigpKTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIsZS5tb250aCgpLGUuZGF5KCkpfSxfdDJnWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdC10aGlzLnllYXJzT2Zmc2V0LSh0Pj0xJiZ0PD10aGlzLnllYXJzT2Zmc2V0PzE6MCl9LF9nMnRZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0K3RoaXMueWVhcnNPZmZzZXQrKHQ+PS10aGlzLnllYXJzT2Zmc2V0JiZ0PD0tMT8xOjApfX0pLG4uY2FsZW5kYXJzLnRoYWk9b30se1wiLi4vbWFpblwiOjU1NixcIm9iamVjdC1hc3NpZ25cIjo0NDd9XSw1NTU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi4vbWFpblwiKSxpPXQoXCJvYmplY3QtYXNzaWduXCIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHxcIlwiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbXCJcIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6XCJVbW1BbFF1cmFcIixoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6e1wiXCI6e25hbWU6XCJVbW0gYWwtUXVyYVwiLGVwb2NoczpbXCJCSFwiLFwiQUhcIl0sbW9udGhOYW1lczpbXCJBbC1NdWhhcnJhbVwiLFwiU2FmYXJcIixcIlJhYmknIGFsLWF3d2FsXCIsXCJSYWJpJyBBbC1UaGFuaVwiLFwiSnVtYWRhIEFsLUF3d2FsXCIsXCJKdW1hZGEgQWwtVGhhbmlcIixcIlJhamFiXCIsXCJTaGEnYWJhblwiLFwiUmFtYWRhblwiLFwiU2hhd3dhbFwiLFwiRGh1IGFsLVFpJ2RhaFwiLFwiRGh1IGFsLUhpamphaFwiXSxtb250aE5hbWVzU2hvcnQ6W1wiTXVoXCIsXCJTYWZcIixcIlJhYjFcIixcIlJhYjJcIixcIkp1bTFcIixcIkp1bTJcIixcIlJhalwiLFwiU2hhJ1wiLFwiUmFtXCIsXCJTaGF3XCIsXCJEaHVRXCIsXCJEaHVIXCJdLGRheU5hbWVzOltcIllhd20gYWwtQWhhZFwiLFwiWWF3bSBhbC1JdGhuYWluXCIsXCJZYXdtIGFsLVRoYWxcXHUwMTAxdGhcXHUwMTAxXFx1MjAxOVwiLFwiWWF3bSBhbC1BcmJhXFx1MjAxOFxcdTAxMDFcXHUyMDE5XCIsXCJZYXdtIGFsLUtoYW1cXHUwMTJic1wiLFwiWWF3bSBhbC1KdW1cXHUyMDE4YVwiLFwiWWF3bSBhbC1TYWJ0XCJdLGRheU5hbWVzTWluOltcIkFoXCIsXCJJdGhcIixcIlRoXCIsXCJBclwiLFwiS2hcIixcIkp1XCIsXCJTYVwiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OlwieXl5eS9tbS9kZFwiLGZpcnN0RGF5OjYsaXNSVEw6ITB9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7cmV0dXJuIDM1NT09PXRoaXMuZGF5c0luWWVhcihlLnllYXIoKSl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLFwiZFwiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0xO3I8PTEyO3IrKyllKz10aGlzLmRheXNJbk1vbnRoKHQscik7cmV0dXJuIGV9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCkudG9KRCgpLTI0ZTUrLjUsaT0wLGE9MDthPG8ubGVuZ3RoO2ErKyl7aWYob1thXT5yKXJldHVybiBvW2ldLW9baS0xXTtpKyt9cmV0dXJuIDMwfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNSE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSksYT0xMiooaS55ZWFyKCktMSkraS5tb250aCgpLTE1MjkyO3JldHVybiBpLmRheSgpK29bYS0xXS0xKzI0ZTUtLjV9LGZyb21KRDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC0yNGU1Ky41LHI9MCxuPTA7bjxvLmxlbmd0aCYmIShvW25dPmUpO24rKylyKys7dmFyIGk9cisxNTI5MixhPU1hdGguZmxvb3IoKGktMSkvMTIpLHM9YSsxLGw9aS0xMiphLGM9ZS1vW3ItMV0rMTtyZXR1cm4gdGhpcy5uZXdEYXRlKHMsbCxjKX0saXNWYWxpZDpmdW5jdGlvbih0LGUscil7dmFyIGk9bi5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLmlzVmFsaWQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpJiYoaT0odD1udWxsIT10LnllYXI/dC55ZWFyOnQpPj0xMjc2JiZ0PD0xNTAwKSxpfSxfdmFsaWRhdGU6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9bi5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLl92YWxpZGF0ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoYS55ZWFyPDEyNzZ8fGEueWVhcj4xNTAwKXRocm93IGkucmVwbGFjZSgvXFx7MFxcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gYX19KSxuLmNhbGVuZGFycy51bW1hbHF1cmE9YTt2YXIgbz1bMjAsNTAsNzksMTA5LDEzOCwxNjgsMTk3LDIyNywyNTYsMjg2LDMxNSwzNDUsMzc0LDQwNCw0MzMsNDYzLDQ5Miw1MjIsNTUxLDU4MSw2MTEsNjQxLDY3MCw3MDAsNzI5LDc1OSw3ODgsODE4LDg0Nyw4NzcsOTA2LDkzNiw5NjUsOTk1LDEwMjQsMTA1NCwxMDgzLDExMTMsMTE0MiwxMTcyLDEyMDEsMTIzMSwxMjYwLDEyOTAsMTMyMCwxMzUwLDEzNzksMTQwOSwxNDM4LDE0NjgsMTQ5NywxNTI3LDE1NTYsMTU4NiwxNjE1LDE2NDUsMTY3NCwxNzA0LDE3MzMsMTc2MywxNzkyLDE4MjIsMTg1MSwxODgxLDE5MTAsMTk0MCwxOTY5LDE5OTksMjAyOCwyMDU4LDIwODcsMjExNywyMTQ2LDIxNzYsMjIwNSwyMjM1LDIyNjQsMjI5NCwyMzIzLDIzNTMsMjM4MywyNDEzLDI0NDIsMjQ3MiwyNTAxLDI1MzEsMjU2MCwyNTkwLDI2MTksMjY0OSwyNjc4LDI3MDgsMjczNywyNzY3LDI3OTYsMjgyNiwyODU1LDI4ODUsMjkxNCwyOTQ0LDI5NzMsMzAwMywzMDMyLDMwNjIsMzA5MSwzMTIxLDMxNTAsMzE4MCwzMjA5LDMyMzksMzI2OCwzMjk4LDMzMjcsMzM1NywzMzg2LDM0MTYsMzQ0NiwzNDc2LDM1MDUsMzUzNSwzNTY0LDM1OTQsMzYyMywzNjUzLDM2ODIsMzcxMiwzNzQxLDM3NzEsMzgwMCwzODMwLDM4NTksMzg4OSwzOTE4LDM5NDgsMzk3Nyw0MDA3LDQwMzYsNDA2Niw0MDk1LDQxMjUsNDE1NSw0MTg1LDQyMTQsNDI0NCw0MjczLDQzMDMsNDMzMiw0MzYyLDQzOTEsNDQyMSw0NDUwLDQ0ODAsNDUwOSw0NTM5LDQ1NjgsNDU5OCw0NjI3LDQ2NTcsNDY4Niw0NzE2LDQ3NDUsNDc3NSw0ODA0LDQ4MzQsNDg2Myw0ODkzLDQ5MjIsNDk1Miw0OTgxLDUwMTEsNTA0MCw1MDcwLDUwOTksNTEyOSw1MTU4LDUxODgsNTIxOCw1MjQ4LDUyNzcsNTMwNyw1MzM2LDUzNjYsNTM5NSw1NDI1LDU0NTQsNTQ4NCw1NTEzLDU1NDMsNTU3Miw1NjAyLDU2MzEsNTY2MSw1NjkwLDU3MjAsNTc0OSw1Nzc5LDU4MDgsNTgzOCw1ODY3LDU4OTcsNTkyNiw1OTU2LDU5ODUsNjAxNSw2MDQ0LDYwNzQsNjEwMyw2MTMzLDYxNjIsNjE5Miw2MjIxLDYyNTEsNjI4MSw2MzExLDYzNDAsNjM3MCw2Mzk5LDY0MjksNjQ1OCw2NDg4LDY1MTcsNjU0Nyw2NTc2LDY2MDYsNjYzNSw2NjY1LDY2OTQsNjcyNCw2NzUzLDY3ODMsNjgxMiw2ODQyLDY4NzEsNjkwMSw2OTMwLDY5NjAsNjk4OSw3MDE5LDcwNDgsNzA3OCw3MTA3LDcxMzcsNzE2Niw3MTk2LDcyMjUsNzI1NSw3Mjg0LDczMTQsNzM0NCw3Mzc0LDc0MDMsNzQzMyw3NDYyLDc0OTIsNzUyMSw3NTUxLDc1ODAsNzYxMCw3NjM5LDc2NjksNzY5OCw3NzI4LDc3NTcsNzc4Nyw3ODE2LDc4NDYsNzg3NSw3OTA1LDc5MzQsNzk2NCw3OTkzLDgwMjMsODA1Myw4MDgzLDgxMTIsODE0Miw4MTcxLDgyMDEsODIzMCw4MjYwLDgyODksODMxOSw4MzQ4LDgzNzgsODQwNyw4NDM3LDg0NjYsODQ5Niw4NTI1LDg1NTUsODU4NCw4NjE0LDg2NDMsODY3Myw4NzAyLDg3MzIsODc2MSw4NzkxLDg4MjEsODg1MCw4ODgwLDg5MDksODkzOCw4OTY4LDg5OTcsOTAyNyw5MDU2LDkwODYsOTExNSw5MTQ1LDkxNzUsOTIwNSw5MjM0LDkyNjQsOTI5Myw5MzIyLDkzNTIsOTM4MSw5NDEwLDk0NDAsOTQ3MCw5NDk5LDk1MjksOTU1OSw5NTg5LDk2MTgsOTY0OCw5Njc3LDk3MDYsOTczNiw5NzY1LDk3OTQsOTgyNCw5ODUzLDk4ODMsOTkxMyw5OTQzLDk5NzIsMTAwMDIsMTAwMzIsMTAwNjEsMTAwOTAsMTAxMjAsMTAxNDksMTAxNzgsMTAyMDgsMTAyMzcsMTAyNjcsMTAyOTcsMTAzMjYsMTAzNTYsMTAzODYsMTA0MTUsMTA0NDUsMTA0NzQsMTA1MDQsMTA1MzMsMTA1NjIsMTA1OTIsMTA2MjEsMTA2NTEsMTA2ODAsMTA3MTAsMTA3NDAsMTA3NzAsMTA3OTksMTA4MjksMTA4NTgsMTA4ODgsMTA5MTcsMTA5NDcsMTA5NzYsMTEwMDUsMTEwMzUsMTEwNjQsMTEwOTQsMTExMjQsMTExNTMsMTExODMsMTEyMTMsMTEyNDIsMTEyNzIsMTEzMDEsMTEzMzEsMTEzNjAsMTEzODksMTE0MTksMTE0NDgsMTE0NzgsMTE1MDcsMTE1MzcsMTE1NjcsMTE1OTYsMTE2MjYsMTE2NTUsMTE2ODUsMTE3MTUsMTE3NDQsMTE3NzQsMTE4MDMsMTE4MzIsMTE4NjIsMTE4OTEsMTE5MjEsMTE5NTAsMTE5ODAsMTIwMTAsMTIwMzksMTIwNjksMTIwOTksMTIxMjgsMTIxNTgsMTIxODcsMTIyMTYsMTIyNDYsMTIyNzUsMTIzMDQsMTIzMzQsMTIzNjQsMTIzOTMsMTI0MjMsMTI0NTMsMTI0ODMsMTI1MTIsMTI1NDIsMTI1NzEsMTI2MDAsMTI2MzAsMTI2NTksMTI2ODgsMTI3MTgsMTI3NDcsMTI3NzcsMTI4MDcsMTI4MzcsMTI4NjYsMTI4OTYsMTI5MjYsMTI5NTUsMTI5ODQsMTMwMTQsMTMwNDMsMTMwNzIsMTMxMDIsMTMxMzEsMTMxNjEsMTMxOTEsMTMyMjAsMTMyNTAsMTMyODAsMTMzMTAsMTMzMzksMTMzNjgsMTMzOTgsMTM0MjcsMTM0NTYsMTM0ODYsMTM1MTUsMTM1NDUsMTM1NzQsMTM2MDQsMTM2MzQsMTM2NjQsMTM2OTMsMTM3MjMsMTM3NTIsMTM3ODIsMTM4MTEsMTM4NDAsMTM4NzAsMTM4OTksMTM5MjksMTM5NTgsMTM5ODgsMTQwMTgsMTQwNDcsMTQwNzcsMTQxMDcsMTQxMzYsMTQxNjYsMTQxOTUsMTQyMjQsMTQyNTQsMTQyODMsMTQzMTMsMTQzNDIsMTQzNzIsMTQ0MDEsMTQ0MzEsMTQ0NjEsMTQ0OTAsMTQ1MjAsMTQ1NTAsMTQ1NzksMTQ2MDksMTQ2MzgsMTQ2NjcsMTQ2OTcsMTQ3MjYsMTQ3NTYsMTQ3ODUsMTQ4MTUsMTQ4NDQsMTQ4NzQsMTQ5MDQsMTQ5MzMsMTQ5NjMsMTQ5OTMsMTUwMjEsMTUwNTEsMTUwODEsMTUxMTAsMTUxNDAsMTUxNjksMTUxOTksMTUyMjgsMTUyNTgsMTUyODcsMTUzMTcsMTUzNDcsMTUzNzcsMTU0MDYsMTU0MzYsMTU0NjUsMTU0OTQsMTU1MjQsMTU1NTMsMTU1ODIsMTU2MTIsMTU2NDEsMTU2NzEsMTU3MDEsMTU3MzEsMTU3NjAsMTU3OTAsMTU4MjAsMTU4NDksMTU4NzgsMTU5MDgsMTU5MzcsMTU5NjYsMTU5OTYsMTYwMjUsMTYwNTUsMTYwODUsMTYxMTQsMTYxNDQsMTYxNzQsMTYyMDQsMTYyMzMsMTYyNjIsMTYyOTIsMTYzMjEsMTYzNTAsMTYzODAsMTY0MDksMTY0MzksMTY0NjgsMTY0OTgsMTY1MjgsMTY1NTgsMTY1ODcsMTY2MTcsMTY2NDYsMTY2NzYsMTY3MDUsMTY3MzQsMTY3NjQsMTY3OTMsMTY4MjMsMTY4NTIsMTY4ODIsMTY5MTIsMTY5NDEsMTY5NzEsMTcwMDEsMTcwMzAsMTcwNjAsMTcwODksMTcxMTgsMTcxNDgsMTcxNzcsMTcyMDcsMTcyMzYsMTcyNjYsMTcyOTUsMTczMjUsMTczNTUsMTczODQsMTc0MTQsMTc0NDQsMTc0NzMsMTc1MDIsMTc1MzIsMTc1NjEsMTc1OTEsMTc2MjAsMTc2NTAsMTc2NzksMTc3MDksMTc3MzgsMTc3NjgsMTc3OTgsMTc4MjcsMTc4NTcsMTc4ODYsMTc5MTYsMTc5NDUsMTc5NzUsMTgwMDQsMTgwMzQsMTgwNjMsMTgwOTMsMTgxMjIsMTgxNTIsMTgxODEsMTgyMTEsMTgyNDEsMTgyNzAsMTgzMDAsMTgzMzAsMTgzNTksMTgzODgsMTg0MTgsMTg0NDcsMTg0NzYsMTg1MDYsMTg1MzUsMTg1NjUsMTg1OTUsMTg2MjUsMTg2NTQsMTg2ODQsMTg3MTQsMTg3NDMsMTg3NzIsMTg4MDIsMTg4MzEsMTg4NjAsMTg4OTAsMTg5MTksMTg5NDksMTg5NzksMTkwMDgsMTkwMzgsMTkwNjgsMTkwOTgsMTkxMjcsMTkxNTYsMTkxODYsMTkyMTUsMTkyNDQsMTkyNzQsMTkzMDMsMTkzMzMsMTkzNjIsMTkzOTIsMTk0MjIsMTk0NTIsMTk0ODEsMTk1MTEsMTk1NDAsMTk1NzAsMTk1OTksMTk2MjgsMTk2NTgsMTk2ODcsMTk3MTcsMTk3NDYsMTk3NzYsMTk4MDYsMTk4MzYsMTk4NjUsMTk4OTUsMTk5MjQsMTk5NTQsMTk5ODMsMjAwMTIsMjAwNDIsMjAwNzEsMjAxMDEsMjAxMzAsMjAxNjAsMjAxOTAsMjAyMTksMjAyNDksMjAyNzksMjAzMDgsMjAzMzgsMjAzNjcsMjAzOTYsMjA0MjYsMjA0NTUsMjA0ODUsMjA1MTQsMjA1NDQsMjA1NzMsMjA2MDMsMjA2MzMsMjA2NjIsMjA2OTIsMjA3MjEsMjA3NTEsMjA3ODAsMjA4MTAsMjA4MzksMjA4NjksMjA4OTgsMjA5MjgsMjA5NTcsMjA5ODcsMjEwMTYsMjEwNDYsMjEwNzYsMjExMDUsMjExMzUsMjExNjQsMjExOTQsMjEyMjMsMjEyNTMsMjEyODIsMjEzMTIsMjEzNDEsMjEzNzEsMjE0MDAsMjE0MzAsMjE0NTksMjE0ODksMjE1MTksMjE1NDgsMjE1NzgsMjE2MDcsMjE2MzcsMjE2NjYsMjE2OTYsMjE3MjUsMjE3NTQsMjE3ODQsMjE4MTMsMjE4NDMsMjE4NzMsMjE5MDIsMjE5MzIsMjE5NjIsMjE5OTEsMjIwMjEsMjIwNTAsMjIwODAsMjIxMDksMjIxMzgsMjIxNjgsMjIxOTcsMjIyMjcsMjIyNTYsMjIyODYsMjIzMTYsMjIzNDYsMjIzNzUsMjI0MDUsMjI0MzQsMjI0NjQsMjI0OTMsMjI1MjIsMjI1NTIsMjI1ODEsMjI2MTEsMjI2NDAsMjI2NzAsMjI3MDAsMjI3MzAsMjI3NTksMjI3ODksMjI4MTgsMjI4NDgsMjI4NzcsMjI5MDYsMjI5MzYsMjI5NjUsMjI5OTQsMjMwMjQsMjMwNTQsMjMwODMsMjMxMTMsMjMxNDMsMjMxNzMsMjMyMDIsMjMyMzIsMjMyNjEsMjMyOTAsMjMzMjAsMjMzNDksMjMzNzksMjM0MDgsMjM0MzgsMjM0NjcsMjM0OTcsMjM1MjcsMjM1NTYsMjM1ODYsMjM2MTYsMjM2NDUsMjM2NzQsMjM3MDQsMjM3MzMsMjM3NjMsMjM3OTIsMjM4MjIsMjM4NTEsMjM4ODEsMjM5MTAsMjM5NDAsMjM5NzAsMjM5OTksMjQwMjksMjQwNTgsMjQwODgsMjQxMTcsMjQxNDcsMjQxNzYsMjQyMDYsMjQyMzUsMjQyNjUsMjQyOTQsMjQzMjQsMjQzNTMsMjQzODMsMjQ0MTMsMjQ0NDIsMjQ0NzIsMjQ1MDEsMjQ1MzEsMjQ1NjAsMjQ1OTAsMjQ2MTksMjQ2NDgsMjQ2NzgsMjQ3MDcsMjQ3MzcsMjQ3NjcsMjQ3OTYsMjQ4MjYsMjQ4NTYsMjQ4ODUsMjQ5MTUsMjQ5NDQsMjQ5NzQsMjUwMDMsMjUwMzIsMjUwNjIsMjUwOTEsMjUxMjEsMjUxNTAsMjUxODAsMjUyMTAsMjUyNDAsMjUyNjksMjUyOTksMjUzMjgsMjUzNTgsMjUzODcsMjU0MTYsMjU0NDYsMjU0NzUsMjU1MDUsMjU1MzQsMjU1NjQsMjU1OTQsMjU2MjQsMjU2NTMsMjU2ODMsMjU3MTIsMjU3NDIsMjU3NzEsMjU4MDAsMjU4MzAsMjU4NTksMjU4ODgsMjU5MTgsMjU5NDgsMjU5NzcsMjYwMDcsMjYwMzcsMjYwNjcsMjYwOTYsMjYxMjYsMjYxNTUsMjYxODQsMjYyMTQsMjYyNDMsMjYyNzIsMjYzMDIsMjYzMzIsMjYzNjEsMjYzOTEsMjY0MjEsMjY0NTEsMjY0ODAsMjY1MTAsMjY1MzksMjY1NjgsMjY1OTgsMjY2MjcsMjY2NTYsMjY2ODYsMjY3MTUsMjY3NDUsMjY3NzUsMjY4MDUsMjY4MzQsMjY4NjQsMjY4OTMsMjY5MjMsMjY5NTIsMjY5ODIsMjcwMTEsMjcwNDEsMjcwNzAsMjcwOTksMjcxMjksMjcxNTksMjcxODgsMjcyMTgsMjcyNDgsMjcyNzcsMjczMDcsMjczMzYsMjczNjYsMjczOTUsMjc0MjUsMjc0NTQsMjc0ODQsMjc1MTMsMjc1NDIsMjc1NzIsMjc2MDIsMjc2MzEsMjc2NjEsMjc2OTEsMjc3MjAsMjc3NTAsMjc3NzksMjc4MDksMjc4MzgsMjc4NjgsMjc4OTcsMjc5MjYsMjc5NTYsMjc5ODUsMjgwMTUsMjgwNDUsMjgwNzQsMjgxMDQsMjgxMzQsMjgxNjMsMjgxOTMsMjgyMjIsMjgyNTIsMjgyODEsMjgzMTAsMjgzNDAsMjgzNjksMjgzOTksMjg0MjgsMjg0NTgsMjg0ODgsMjg1MTcsMjg1NDcsMjg1NzcsMjg2MDcsMjg2MzYsMjg2NjUsMjg2OTUsMjg3MjQsMjg3NTQsMjg3ODMsMjg4MTMsMjg4NDMsMjg4NzIsMjg5MDEsMjg5MzEsMjg5NjAsMjg5OTAsMjkwMTksMjkwNDksMjkwNzgsMjkxMDgsMjkxMzcsMjkxNjcsMjkxOTYsMjkyMjYsMjkyNTUsMjkyODUsMjkzMTUsMjkzNDUsMjkzNzUsMjk0MDQsMjk0MzQsMjk0NjMsMjk0OTIsMjk1MjIsMjk1NTEsMjk1ODAsMjk2MTAsMjk2NDAsMjk2NjksMjk2OTksMjk3MjksMjk3NTksMjk3ODgsMjk4MTgsMjk4NDcsMjk4NzYsMjk5MDYsMjk5MzUsMjk5NjQsMjk5OTQsMzAwMjMsMzAwNTMsMzAwODIsMzAxMTIsMzAxNDEsMzAxNzEsMzAyMDAsMzAyMzAsMzAyNTksMzAyODksMzAzMTgsMzAzNDgsMzAzNzgsMzA0MDgsMzA0MzcsMzA0NjcsMzA0OTYsMzA1MjYsMzA1NTUsMzA1ODUsMzA2MTQsMzA2NDQsMzA2NzMsMzA3MDMsMzA3MzIsMzA3NjIsMzA3OTEsMzA4MjEsMzA4NTAsMzA4ODAsMzA5MDksMzA5MzksMzA5NjgsMzA5OTgsMzEwMjcsMzEwNTcsMzEwODYsMzExMTYsMzExNDUsMzExNzUsMzEyMDQsMzEyMzQsMzEyNjMsMzEyOTMsMzEzMjIsMzEzNTIsMzEzODEsMzE0MTEsMzE0NDEsMzE0NzEsMzE1MDAsMzE1MzAsMzE1NTksMzE1ODksMzE2MTgsMzE2NDgsMzE2NzYsMzE3MDYsMzE3MzYsMzE3NjYsMzE3OTUsMzE4MjUsMzE4NTQsMzE4ODQsMzE5MTMsMzE5NDMsMzE5NzIsMzIwMDIsMzIwMzEsMzIwNjEsMzIwOTAsMzIxMjAsMzIxNTAsMzIxODAsMzIyMDksMzIyMzksMzIyNjgsMzIyOTgsMzIzMjcsMzIzNTcsMzIzODYsMzI0MTYsMzI0NDUsMzI0NzUsMzI1MDQsMzI1MzQsMzI1NjMsMzI1OTMsMzI2MjIsMzI2NTIsMzI2ODEsMzI3MTEsMzI3NDAsMzI3NzAsMzI3OTksMzI4MjksMzI4NTgsMzI4ODgsMzI5MTcsMzI5NDcsMzI5NzYsMzMwMDYsMzMwMzUsMzMwNjUsMzMwOTQsMzMxMjQsMzMxNTMsMzMxODMsMzMyMTMsMzMyNDMsMzMyNzIsMzMzMDIsMzMzMzEsMzMzNjEsMzMzOTAsMzM0MjAsMzM0NTAsMzM0NzksMzM1MDksMzM1MzksMzM1NjgsMzM1OTgsMzM2MjcsMzM2NTcsMzM2ODYsMzM3MTYsMzM3NDUsMzM3NzUsMzM4MDQsMzM4MzQsMzM4NjMsMzM4OTMsMzM5MjIsMzM5NTIsMzM5ODEsMzQwMTEsMzQwNDAsMzQwNjksMzQwOTksMzQxMjgsMzQxNTgsMzQxODcsMzQyMTcsMzQyNDcsMzQyNzcsMzQzMDYsMzQzMzYsMzQzNjUsMzQzOTUsMzQ0MjQsMzQ0NTQsMzQ0ODMsMzQ1MTIsMzQ1NDIsMzQ1NzEsMzQ2MDEsMzQ2MzEsMzQ2NjAsMzQ2OTAsMzQ3MTksMzQ3NDksMzQ3NzgsMzQ4MDgsMzQ4MzcsMzQ4NjcsMzQ4OTYsMzQ5MjYsMzQ5NTUsMzQ5ODUsMzUwMTUsMzUwNDQsMzUwNzQsMzUxMDMsMzUxMzMsMzUxNjIsMzUxOTIsMzUyMjIsMzUyNTEsMzUyODAsMzUzMTAsMzUzNDAsMzUzNzAsMzUzOTksMzU0MjksMzU0NTgsMzU0ODgsMzU1MTcsMzU1NDcsMzU1NzYsMzU2MDUsMzU2MzUsMzU2NjUsMzU2OTQsMzU3MjMsMzU3NTMsMzU3ODIsMzU4MTEsMzU4NDEsMzU4NzEsMzU5MDEsMzU5MzAsMzU5NjAsMzU5ODksMzYwMTksMzYwNDgsMzYwNzgsMzYxMDcsMzYxMzYsMzYxNjYsMzYxOTUsMzYyMjUsMzYyNTQsMzYyODQsMzYzMTQsMzYzNDMsMzYzNzMsMzY0MDMsMzY0MzMsMzY0NjIsMzY0OTIsMzY1MjEsMzY1NTEsMzY1ODAsMzY2MTAsMzY2MzksMzY2NjksMzY2OTgsMzY3MjgsMzY3NTcsMzY3ODYsMzY4MTYsMzY4NDUsMzY4NzUsMzY5MDQsMzY5MzQsMzY5NjMsMzY5OTMsMzcwMjIsMzcwNTIsMzcwODEsMzcxMTEsMzcxNDEsMzcxNzAsMzcyMDAsMzcyMjksMzcyNTksMzcyODgsMzczMTgsMzczNDcsMzczNzcsMzc0MDYsMzc0MzYsMzc0NjUsMzc0OTUsMzc1MjQsMzc1NTQsMzc1ODQsMzc2MTMsMzc2NDMsMzc2NzIsMzc3MDEsMzc3MzEsMzc3NjAsMzc3OTAsMzc4MTksMzc4NDksMzc4NzgsMzc5MDgsMzc5MzgsMzc5NjcsMzc5OTcsMzgwMjcsMzgwNTYsMzgwODUsMzgxMTUsMzgxNDQsMzgxNzQsMzgyMDMsMzgyMzMsMzgyNjIsMzgyOTIsMzgzMjIsMzgzNTEsMzgzODEsMzg0MTAsMzg0NDAsMzg0NjksMzg0OTksMzg1MjgsMzg1NTgsMzg1ODcsMzg2MTcsMzg2NDYsMzg2NzYsMzg3MDUsMzg3MzUsMzg3NjQsMzg3OTQsMzg4MjMsMzg4NTMsMzg4ODIsMzg5MTIsMzg5NDEsMzg5NzEsMzkwMDEsMzkwMzAsMzkwNTksMzkwODksMzkxMTgsMzkxNDgsMzkxNzgsMzkyMDgsMzkyMzcsMzkyNjcsMzkyOTcsMzkzMjYsMzkzNTUsMzkzODUsMzk0MTQsMzk0NDQsMzk0NzMsMzk1MDMsMzk1MzIsMzk1NjIsMzk1OTIsMzk2MjEsMzk2NTAsMzk2ODAsMzk3MDksMzk3MzksMzk3NjgsMzk3OTgsMzk4MjcsMzk4NTcsMzk4ODYsMzk5MTYsMzk5NDYsMzk5NzUsNDAwMDUsNDAwMzUsNDAwNjQsNDAwOTQsNDAxMjMsNDAxNTMsNDAxODIsNDAyMTIsNDAyNDEsNDAyNzEsNDAzMDAsNDAzMzAsNDAzNTksNDAzODksNDA0MTgsNDA0NDgsNDA0NzcsNDA1MDcsNDA1MzYsNDA1NjYsNDA1OTUsNDA2MjUsNDA2NTUsNDA2ODUsNDA3MTQsNDA3NDQsNDA3NzMsNDA4MDMsNDA4MzIsNDA4NjIsNDA4OTIsNDA5MjEsNDA5NTEsNDA5ODAsNDEwMDksNDEwMzksNDEwNjgsNDEwOTgsNDExMjcsNDExNTcsNDExODYsNDEyMTYsNDEyNDUsNDEyNzUsNDEzMDQsNDEzMzQsNDEzNjQsNDEzOTMsNDE0MjIsNDE0NTIsNDE0ODEsNDE1MTEsNDE1NDAsNDE1NzAsNDE1OTksNDE2MjksNDE2NTgsNDE2ODgsNDE3MTgsNDE3NDgsNDE3NzcsNDE4MDcsNDE4MzYsNDE4NjUsNDE4OTQsNDE5MjQsNDE5NTMsNDE5ODMsNDIwMTIsNDIwNDIsNDIwNzIsNDIxMDIsNDIxMzEsNDIxNjEsNDIxOTAsNDIyMjAsNDIyNDksNDIyNzksNDIzMDgsNDIzMzcsNDIzNjcsNDIzOTcsNDI0MjYsNDI0NTYsNDI0ODUsNDI1MTUsNDI1NDUsNDI1NzQsNDI2MDQsNDI2MzMsNDI2NjIsNDI2OTIsNDI3MjEsNDI3NTEsNDI3ODAsNDI4MTAsNDI4MzksNDI4NjksNDI4OTksNDI5MjksNDI5NTgsNDI5ODgsNDMwMTcsNDMwNDYsNDMwNzYsNDMxMDUsNDMxMzUsNDMxNjQsNDMxOTQsNDMyMjMsNDMyNTMsNDMyODMsNDMzMTIsNDMzNDIsNDMzNzEsNDM0MDEsNDM0MzAsNDM0NjAsNDM0ODksNDM1MTksNDM1NDgsNDM1NzgsNDM2MDcsNDM2MzcsNDM2NjYsNDM2OTYsNDM3MjYsNDM3NTUsNDM3ODUsNDM4MTQsNDM4NDQsNDM4NzMsNDM5MDMsNDM5MzIsNDM5NjIsNDM5OTEsNDQwMjEsNDQwNTAsNDQwODAsNDQxMDksNDQxMzksNDQxNjksNDQxOTgsNDQyMjgsNDQyNTgsNDQyODcsNDQzMTcsNDQzNDYsNDQzNzUsNDQ0MDUsNDQ0MzQsNDQ0NjQsNDQ0OTMsNDQ1MjMsNDQ1NTMsNDQ1ODIsNDQ2MTIsNDQ2NDEsNDQ2NzEsNDQ3MDAsNDQ3MzAsNDQ3NTksNDQ3ODgsNDQ4MTgsNDQ4NDcsNDQ4NzcsNDQ5MDYsNDQ5MzYsNDQ5NjYsNDQ5OTYsNDUwMjUsNDUwNTUsNDUwODQsNDUxMTQsNDUxNDMsNDUxNzIsNDUyMDIsNDUyMzEsNDUyNjEsNDUyOTAsNDUzMjAsNDUzNTAsNDUzODAsNDU0MDksNDU0MzksNDU0NjgsNDU0OTgsNDU1MjcsNDU1NTYsNDU1ODYsNDU2MTUsNDU2NDQsNDU2NzQsNDU3MDQsNDU3MzMsNDU3NjMsNDU3OTMsNDU4MjMsNDU4NTIsNDU4ODIsNDU5MTEsNDU5NDAsNDU5NzAsNDU5OTksNDYwMjgsNDYwNTgsNDYwODgsNDYxMTcsNDYxNDcsNDYxNzcsNDYyMDYsNDYyMzYsNDYyNjUsNDYyOTUsNDYzMjQsNDYzNTQsNDYzODMsNDY0MTMsNDY0NDIsNDY0NzIsNDY1MDEsNDY1MzEsNDY1NjAsNDY1OTAsNDY2MjAsNDY2NDksNDY2NzksNDY3MDgsNDY3MzgsNDY3NjcsNDY3OTcsNDY4MjYsNDY4NTYsNDY4ODUsNDY5MTUsNDY5NDQsNDY5NzQsNDcwMDMsNDcwMzMsNDcwNjMsNDcwOTIsNDcxMjIsNDcxNTEsNDcxODEsNDcyMTAsNDcyNDAsNDcyNjksNDcyOTgsNDczMjgsNDczNTcsNDczODcsNDc0MTcsNDc0NDYsNDc0NzYsNDc1MDYsNDc1MzUsNDc1NjUsNDc1OTQsNDc2MjQsNDc2NTMsNDc2ODIsNDc3MTIsNDc3NDEsNDc3NzEsNDc4MDAsNDc4MzAsNDc4NjAsNDc4OTAsNDc5MTksNDc5NDksNDc5NzgsNDgwMDgsNDgwMzcsNDgwNjYsNDgwOTYsNDgxMjUsNDgxNTUsNDgxODQsNDgyMTQsNDgyNDQsNDgyNzMsNDgzMDMsNDgzMzMsNDgzNjIsNDgzOTIsNDg0MjEsNDg0NTAsNDg0ODAsNDg1MDksNDg1MzgsNDg1NjgsNDg1OTgsNDg2MjcsNDg2NTcsNDg2ODcsNDg3MTcsNDg3NDYsNDg3NzYsNDg4MDUsNDg4MzQsNDg4NjQsNDg4OTMsNDg5MjIsNDg5NTIsNDg5ODIsNDkwMTEsNDkwNDEsNDkwNzEsNDkxMDAsNDkxMzAsNDkxNjAsNDkxODksNDkyMTgsNDkyNDgsNDkyNzcsNDkzMDYsNDkzMzYsNDkzNjUsNDkzOTUsNDk0MjUsNDk0NTUsNDk0ODQsNDk1MTQsNDk1NDMsNDk1NzMsNDk2MDIsNDk2MzIsNDk2NjEsNDk2OTAsNDk3MjAsNDk3NDksNDk3NzksNDk4MDksNDk4MzgsNDk4NjgsNDk4OTgsNDk5MjcsNDk5NTcsNDk5ODYsNTAwMTYsNTAwNDUsNTAwNzUsNTAxMDQsNTAxMzMsNTAxNjMsNTAxOTIsNTAyMjIsNTAyNTIsNTAyODEsNTAzMTEsNTAzNDAsNTAzNzAsNTA0MDAsNTA0MjksNTA0NTksNTA0ODgsNTA1MTgsNTA1NDcsNTA1NzYsNTA2MDYsNTA2MzUsNTA2NjUsNTA2OTQsNTA3MjQsNTA3NTQsNTA3ODQsNTA4MTMsNTA4NDMsNTA4NzIsNTA5MDIsNTA5MzEsNTA5NjAsNTA5OTAsNTEwMTksNTEwNDksNTEwNzgsNTExMDgsNTExMzgsNTExNjcsNTExOTcsNTEyMjcsNTEyNTYsNTEyODYsNTEzMTUsNTEzNDUsNTEzNzQsNTE0MDMsNTE0MzMsNTE0NjIsNTE0OTIsNTE1MjIsNTE1NTIsNTE1ODIsNTE2MTEsNTE2NDEsNTE2NzAsNTE2OTksNTE3MjksNTE3NTgsNTE3ODcsNTE4MTYsNTE4NDYsNTE4NzYsNTE5MDYsNTE5MzYsNTE5NjUsNTE5OTUsNTIwMjUsNTIwNTQsNTIwODMsNTIxMTMsNTIxNDIsNTIxNzEsNTIyMDAsNTIyMzAsNTIyNjAsNTIyOTAsNTIzMTksNTIzNDksNTIzNzksNTI0MDgsNTI0MzgsNTI0NjcsNTI0OTcsNTI1MjYsNTI1NTUsNTI1ODUsNTI2MTQsNTI2NDQsNTI2NzMsNTI3MDMsNTI3MzMsNTI3NjIsNTI3OTIsNTI4MjIsNTI4NTEsNTI4ODEsNTI5MTAsNTI5MzksNTI5NjksNTI5OTgsNTMwMjgsNTMwNTcsNTMwODcsNTMxMTYsNTMxNDYsNTMxNzYsNTMyMDUsNTMyMzUsNTMyNjQsNTMyOTQsNTMzMjQsNTMzNTMsNTMzODMsNTM0MTIsNTM0NDEsNTM0NzEsNTM1MDAsNTM1MzAsNTM1NTksNTM1ODksNTM2MTksNTM2NDgsNTM2NzgsNTM3MDgsNTM3MzcsNTM3NjcsNTM3OTYsNTM4MjUsNTM4NTUsNTM4ODQsNTM5MTMsNTM5NDMsNTM5NzMsNTQwMDMsNTQwMzIsNTQwNjIsNTQwOTIsNTQxMjEsNTQxNTEsNTQxODAsNTQyMDksNTQyMzksNTQyNjgsNTQyOTcsNTQzMjcsNTQzNTcsNTQzODcsNTQ0MTYsNTQ0NDYsNTQ0NzYsNTQ1MDUsNTQ1MzUsNTQ1NjQsNTQ1OTMsNTQ2MjMsNTQ2NTIsNTQ2ODEsNTQ3MTEsNTQ3NDEsNTQ3NzAsNTQ4MDAsNTQ4MzAsNTQ4NTksNTQ4ODksNTQ5MTksNTQ5NDgsNTQ5NzcsNTUwMDcsNTUwMzYsNTUwNjYsNTUwOTUsNTUxMjUsNTUxNTQsNTUxODQsNTUyMTMsNTUyNDMsNTUyNzMsNTUzMDIsNTUzMzIsNTUzNjEsNTUzOTEsNTU0MjAsNTU0NTAsNTU0NzksNTU1MDgsNTU1MzgsNTU1NjcsNTU1OTcsNTU2MjcsNTU2NTcsNTU2ODYsNTU3MTYsNTU3NDUsNTU3NzUsNTU4MDQsNTU4MzQsNTU4NjMsNTU4OTIsNTU5MjIsNTU5NTEsNTU5ODEsNTYwMTEsNTYwNDAsNTYwNzAsNTYxMDAsNTYxMjksNTYxNTksNTYxODgsNTYyMTgsNTYyNDcsNTYyNzYsNTYzMDYsNTYzMzUsNTYzNjUsNTYzOTQsNTY0MjQsNTY0NTQsNTY0ODMsNTY1MTMsNTY1NDMsNTY1NzIsNTY2MDEsNTY2MzEsNTY2NjAsNTY2OTAsNTY3MTksNTY3NDksNTY3NzgsNTY4MDgsNTY4MzcsNTY4NjcsNTY4OTcsNTY5MjYsNTY5NTYsNTY5ODUsNTcwMTUsNTcwNDQsNTcwNzQsNTcxMDMsNTcxMzMsNTcxNjIsNTcxOTIsNTcyMjEsNTcyNTEsNTcyODAsNTczMTAsNTczNDAsNTczNjksNTczOTksNTc0MjksNTc0NTgsNTc0ODcsNTc1MTcsNTc1NDYsNTc1NzYsNTc2MDUsNTc2MzQsNTc2NjQsNTc2OTQsNTc3MjMsNTc3NTMsNTc3ODMsNTc4MTMsNTc4NDIsNTc4NzEsNTc5MDEsNTc5MzAsNTc5NTksNTc5ODksNTgwMTgsNTgwNDgsNTgwNzcsNTgxMDcsNTgxMzcsNTgxNjcsNTgxOTYsNTgyMjYsNTgyNTUsNTgyODUsNTgzMTQsNTgzNDMsNTgzNzMsNTg0MDIsNTg0MzIsNTg0NjEsNTg0OTEsNTg1MjEsNTg1NTEsNTg1ODAsNTg2MTAsNTg2MzksNTg2NjksNTg2OTgsNTg3MjcsNTg3NTcsNTg3ODYsNTg4MTYsNTg4NDUsNTg4NzUsNTg5MDUsNTg5MzQsNTg5NjQsNTg5OTQsNTkwMjMsNTkwNTMsNTkwODIsNTkxMTEsNTkxNDEsNTkxNzAsNTkyMDAsNTkyMjksNTkyNTksNTkyODgsNTkzMTgsNTkzNDgsNTkzNzcsNTk0MDcsNTk0MzYsNTk0NjYsNTk0OTUsNTk1MjUsNTk1NTQsNTk1ODQsNTk2MTMsNTk2NDMsNTk2NzIsNTk3MDIsNTk3MzEsNTk3NjEsNTk3OTEsNTk4MjAsNTk4NTAsNTk4NzksNTk5MDksNTk5MzksNTk5NjgsNTk5OTcsNjAwMjcsNjAwNTYsNjAwODYsNjAxMTUsNjAxNDUsNjAxNzQsNjAyMDQsNjAyMzQsNjAyNjQsNjAyOTMsNjAzMjMsNjAzNTIsNjAzODEsNjA0MTEsNjA0NDAsNjA0NjksNjA0OTksNjA1MjgsNjA1NTgsNjA1ODgsNjA2MTgsNjA2NDgsNjA2NzcsNjA3MDcsNjA3MzYsNjA3NjUsNjA3OTUsNjA4MjQsNjA4NTMsNjA4ODMsNjA5MTIsNjA5NDIsNjA5NzIsNjEwMDIsNjEwMzEsNjEwNjEsNjEwOTAsNjExMjAsNjExNDksNjExNzksNjEyMDgsNjEyMzcsNjEyNjcsNjEyOTYsNjEzMjYsNjEzNTYsNjEzODUsNjE0MTUsNjE0NDUsNjE0NzQsNjE1MDQsNjE1MzMsNjE1NjMsNjE1OTIsNjE2MjEsNjE2NTEsNjE2ODAsNjE3MTAsNjE3MzksNjE3NjksNjE3OTksNjE4MjgsNjE4NTgsNjE4ODgsNjE5MTcsNjE5NDcsNjE5NzYsNjIwMDYsNjIwMzUsNjIwNjQsNjIwOTQsNjIxMjMsNjIxNTMsNjIxODIsNjIyMTIsNjIyNDIsNjIyNzEsNjIzMDEsNjIzMzEsNjIzNjAsNjIzOTAsNjI0MTksNjI0NDgsNjI0NzgsNjI1MDcsNjI1MzcsNjI1NjYsNjI1OTYsNjI2MjUsNjI2NTUsNjI2ODUsNjI3MTUsNjI3NDQsNjI3NzQsNjI4MDMsNjI4MzIsNjI4NjIsNjI4OTEsNjI5MjEsNjI5NTAsNjI5ODAsNjMwMDksNjMwMzksNjMwNjksNjMwOTksNjMxMjgsNjMxNTcsNjMxODcsNjMyMTYsNjMyNDYsNjMyNzUsNjMzMDUsNjMzMzQsNjMzNjMsNjMzOTMsNjM0MjMsNjM0NTMsNjM0ODIsNjM1MTIsNjM1NDEsNjM1NzEsNjM2MDAsNjM2MzAsNjM2NTksNjM2ODksNjM3MTgsNjM3NDcsNjM3NzcsNjM4MDcsNjM4MzYsNjM4NjYsNjM4OTUsNjM5MjUsNjM5NTUsNjM5ODQsNjQwMTQsNjQwNDMsNjQwNzMsNjQxMDIsNjQxMzEsNjQxNjEsNjQxOTAsNjQyMjAsNjQyNDksNjQyNzksNjQzMDksNjQzMzksNjQzNjgsNjQzOTgsNjQ0MjcsNjQ0NTcsNjQ0ODYsNjQ1MTUsNjQ1NDUsNjQ1NzQsNjQ2MDMsNjQ2MzMsNjQ2NjMsNjQ2OTIsNjQ3MjIsNjQ3NTIsNjQ3ODIsNjQ4MTEsNjQ4NDEsNjQ4NzAsNjQ4OTksNjQ5MjksNjQ5NTgsNjQ5ODcsNjUwMTcsNjUwNDcsNjUwNzYsNjUxMDYsNjUxMzYsNjUxNjYsNjUxOTUsNjUyMjUsNjUyNTQsNjUyODMsNjUzMTMsNjUzNDIsNjUzNzEsNjU0MDEsNjU0MzEsNjU0NjAsNjU0OTAsNjU1MjAsNjU1NDksNjU1NzksNjU2MDgsNjU2MzgsNjU2NjcsNjU2OTcsNjU3MjYsNjU3NTUsNjU3ODUsNjU4MTUsNjU4NDQsNjU4NzQsNjU5MDMsNjU5MzMsNjU5NjMsNjU5OTIsNjYwMjIsNjYwNTEsNjYwODEsNjYxMTAsNjYxNDAsNjYxNjksNjYxOTksNjYyMjgsNjYyNTgsNjYyODcsNjYzMTcsNjYzNDYsNjYzNzYsNjY0MDUsNjY0MzUsNjY0NjUsNjY0OTQsNjY1MjQsNjY1NTMsNjY1ODMsNjY2MTIsNjY2NDEsNjY2NzEsNjY3MDAsNjY3MzAsNjY3NjAsNjY3ODksNjY4MTksNjY4NDksNjY4NzgsNjY5MDgsNjY5MzcsNjY5NjcsNjY5OTYsNjcwMjUsNjcwNTUsNjcwODQsNjcxMTQsNjcxNDMsNjcxNzMsNjcyMDMsNjcyMzMsNjcyNjIsNjcyOTIsNjczMjEsNjczNTEsNjczODAsNjc0MDksNjc0MzksNjc0NjgsNjc0OTcsNjc1MjcsNjc1NTcsNjc1ODcsNjc2MTcsNjc2NDYsNjc2NzYsNjc3MDUsNjc3MzUsNjc3NjQsNjc3OTMsNjc4MjMsNjc4NTIsNjc4ODIsNjc5MTEsNjc5NDEsNjc5NzEsNjhlMyw2ODAzMCw2ODA2MCw2ODA4OSw2ODExOSw2ODE0OCw2ODE3Nyw2ODIwNyw2ODIzNiw2ODI2Niw2ODI5NSw2ODMyNSw2ODM1NCw2ODM4NCw2ODQxNCw2ODQ0Myw2ODQ3Myw2ODUwMiw2ODUzMiw2ODU2MSw2ODU5MSw2ODYyMCw2ODY1MCw2ODY3OSw2ODcwOCw2ODczOCw2ODc2OCw2ODc5Nyw2ODgyNyw2ODg1Nyw2ODg4Niw2ODkxNiw2ODk0Niw2ODk3NSw2OTAwNCw2OTAzNCw2OTA2Myw2OTA5Miw2OTEyMiw2OTE1Miw2OTE4MSw2OTIxMSw2OTI0MCw2OTI3MCw2OTMwMCw2OTMzMCw2OTM1OSw2OTM4OCw2OTQxOCw2OTQ0Nyw2OTQ3Niw2OTUwNiw2OTUzNSw2OTU2NSw2OTU5NSw2OTYyNCw2OTY1NCw2OTY4NCw2OTcxMyw2OTc0Myw2OTc3Miw2OTgwMiw2OTgzMSw2OTg2MSw2OTg5MCw2OTkxOSw2OTk0OSw2OTk3OCw3MDAwOCw3MDAzOCw3MDA2Nyw3MDA5Nyw3MDEyNiw3MDE1Niw3MDE4Niw3MDIxNSw3MDI0NSw3MDI3NCw3MDMwMyw3MDMzMyw3MDM2Miw3MDM5Miw3MDQyMSw3MDQ1MSw3MDQ4MSw3MDUxMCw3MDU0MCw3MDU3MCw3MDU5OSw3MDYyOSw3MDY1OCw3MDY4Nyw3MDcxNyw3MDc0Niw3MDc3Niw3MDgwNSw3MDgzNSw3MDg2NCw3MDg5NCw3MDkyNCw3MDk1NCw3MDk4Myw3MTAxMyw3MTA0Miw3MTA3MSw3MTEwMSw3MTEzMCw3MTE1OSw3MTE4OSw3MTIxOCw3MTI0OCw3MTI3OCw3MTMwOCw3MTMzNyw3MTM2Nyw3MTM5Nyw3MTQyNiw3MTQ1NSw3MTQ4NSw3MTUxNCw3MTU0Myw3MTU3Myw3MTYwMiw3MTYzMiw3MTY2Miw3MTY5MSw3MTcyMSw3MTc1MSw3MTc4MSw3MTgxMCw3MTgzOSw3MTg2OSw3MTg5OCw3MTkyNyw3MTk1Nyw3MTk4Niw3MjAxNiw3MjA0Niw3MjA3NSw3MjEwNSw3MjEzNSw3MjE2NCw3MjE5NCw3MjIyMyw3MjI1Myw3MjI4Miw3MjMxMSw3MjM0MSw3MjM3MCw3MjQwMCw3MjQyOSw3MjQ1OSw3MjQ4OSw3MjUxOCw3MjU0OCw3MjU3Nyw3MjYwNyw3MjYzNyw3MjY2Niw3MjY5NSw3MjcyNSw3Mjc1NCw3Mjc4NCw3MjgxMyw3Mjg0Myw3Mjg3Miw3MjkwMiw3MjkzMSw3Mjk2MSw3Mjk5MSw3MzAyMCw3MzA1MCw3MzA4MCw3MzEwOSw3MzEzOSw3MzE2OCw3MzE5Nyw3MzIyNyw3MzI1Niw3MzI4Niw3MzMxNSw3MzM0NSw3MzM3NSw3MzQwNCw3MzQzNCw3MzQ2NCw3MzQ5Myw3MzUyMyw3MzU1Miw3MzU4MSw3MzYxMSw3MzY0MCw3MzY2OSw3MzY5OSw3MzcyOSw3Mzc1OCw3Mzc4OCw3MzgxOCw3Mzg0OCw3Mzg3Nyw3MzkwNyw3MzkzNiw3Mzk2NSw3Mzk5NSw3NDAyNCw3NDA1Myw3NDA4Myw3NDExMyw3NDE0Miw3NDE3Miw3NDIwMiw3NDIzMSw3NDI2MSw3NDI5MSw3NDMyMCw3NDM0OSw3NDM3OSw3NDQwOCw3NDQzNyw3NDQ2Nyw3NDQ5Nyw3NDUyNiw3NDU1Niw3NDU4Niw3NDYxNSw3NDY0NSw3NDY3NSw3NDcwNCw3NDczMyw3NDc2Myw3NDc5Miw3NDgyMiw3NDg1MSw3NDg4MSw3NDkxMCw3NDk0MCw3NDk2OSw3NDk5OSw3NTAyOSw3NTA1OCw3NTA4OCw3NTExNyw3NTE0Nyw3NTE3Niw3NTIwNiw3NTIzNSw3NTI2NCw3NTI5NCw3NTMyMyw3NTM1Myw3NTM4Myw3NTQxMiw3NTQ0Miw3NTQ3Miw3NTUwMSw3NTUzMSw3NTU2MCw3NTU5MCw3NTYxOSw3NTY0OCw3NTY3OCw3NTcwNyw3NTczNyw3NTc2Niw3NTc5Niw3NTgyNiw3NTg1Niw3NTg4NSw3NTkxNSw3NTk0NCw3NTk3NCw3NjAwMyw3NjAzMiw3NjA2Miw3NjA5MSw3NjEyMSw3NjE1MCw3NjE4MCw3NjIxMCw3NjIzOSw3NjI2OSw3NjI5OSw3NjMyOCw3NjM1OCw3NjM4Nyw3NjQxNiw3NjQ0Niw3NjQ3NSw3NjUwNSw3NjUzNCw3NjU2NCw3NjU5Myw3NjYyMyw3NjY1Myw3NjY4Miw3NjcxMiw3Njc0MSw3Njc3MSw3NjgwMSw3NjgzMCw3Njg1OSw3Njg4OSw3NjkxOCw3Njk0OCw3Njk3Nyw3NzAwNyw3NzAzNiw3NzA2Niw3NzA5Niw3NzEyNSw3NzE1NSw3NzE4NSw3NzIxNCw3NzI0Myw3NzI3Myw3NzMwMiw3NzMzMiw3NzM2MSw3NzM5MCw3NzQyMCw3NzQ1MCw3NzQ3OSw3NzUwOSw3NzUzOSw3NzU2OSw3NzU5OCw3NzYyNyw3NzY1Nyw3NzY4Niw3NzcxNSw3Nzc0NSw3Nzc3NCw3NzgwNCw3NzgzMyw3Nzg2Myw3Nzg5Myw3NzkyMyw3Nzk1Miw3Nzk4Miw3ODAxMSw3ODA0MSw3ODA3MCw3ODA5OSw3ODEyOSw3ODE1OCw3ODE4OCw3ODIxNyw3ODI0Nyw3ODI3Nyw3ODMwNyw3ODMzNiw3ODM2Niw3ODM5NSw3ODQyNSw3ODQ1NCw3ODQ4Myw3ODUxMyw3ODU0Miw3ODU3Miw3ODYwMSw3ODYzMSw3ODY2MSw3ODY5MCw3ODcyMCw3ODc1MCw3ODc3OSw3ODgwOCw3ODgzOCw3ODg2Nyw3ODg5Nyw3ODkyNiw3ODk1Niw3ODk4NSw3OTAxNSw3OTA0NCw3OTA3NCw3OTEwNCw3OTEzMyw3OTE2Myw3OTE5Miw3OTIyMiw3OTI1MSw3OTI4MSw3OTMxMCw3OTM0MCw3OTM2OSw3OTM5OSw3OTQyOCw3OTQ1OCw3OTQ4Nyw3OTUxNyw3OTU0Niw3OTU3Niw3OTYwNiw3OTYzNSw3OTY2NSw3OTY5NSw3OTcyNCw3OTc1Myw3OTc4Myw3OTgxMiw3OTg0MSw3OTg3MSw3OTkwMCw3OTkzMCw3OTk2MCw3OTk5MF19LHtcIi4uL21haW5cIjo1NTYsXCJvYmplY3QtYXNzaWduXCI6NDQ3fV0sNTU2OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcIm9iamVjdC1hc3NpZ25cIik7ZnVuY3Rpb24gaSgpe3RoaXMucmVnaW9uYWxPcHRpb25zPVtdLHRoaXMucmVnaW9uYWxPcHRpb25zW1wiXCJdPXtpbnZhbGlkQ2FsZW5kYXI6XCJDYWxlbmRhciB7MH0gbm90IGZvdW5kXCIsaW52YWxpZERhdGU6XCJJbnZhbGlkIHswfSBkYXRlXCIsaW52YWxpZE1vbnRoOlwiSW52YWxpZCB7MH0gbW9udGhcIixpbnZhbGlkWWVhcjpcIkludmFsaWQgezB9IHllYXJcIixkaWZmZXJlbnRDYWxlbmRhcnM6XCJDYW5ub3QgbWl4IHswfSBhbmQgezF9IGRhdGVzXCJ9LHRoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbXCJcIl0sdGhpcy5jYWxlbmRhcnM9e30sdGhpcy5fbG9jYWxDYWxzPXt9fWZ1bmN0aW9uIGEodCxlLHIsbil7aWYodGhpcy5fY2FsZW5kYXI9dCx0aGlzLl95ZWFyPWUsdGhpcy5fbW9udGg9cix0aGlzLl9kYXk9biwwPT09dGhpcy5fY2FsZW5kYXIuX3ZhbGlkYXRlTGV2ZWwmJiF0aGlzLl9jYWxlbmRhci5pc1ZhbGlkKHRoaXMuX3llYXIsdGhpcy5fbW9udGgsdGhpcy5fZGF5KSl0aHJvdyhjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkRGF0ZSkucmVwbGFjZSgvXFx7MFxcfS8sdGhpcy5fY2FsZW5kYXIubG9jYWwubmFtZSl9ZnVuY3Rpb24gbyh0LGUpe3JldHVyblwiMDAwMDAwXCIuc3Vic3RyaW5nKDAsZS0odD1cIlwiK3QpLmxlbmd0aCkrdH1mdW5jdGlvbiBzKCl7dGhpcy5zaG9ydFllYXJDdXRvZmY9XCIrMTBcIn1mdW5jdGlvbiBsKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdF18fHRoaXMucmVnaW9uYWxPcHRpb25zW1wiXCJdfW4oaS5wcm90b3R5cGUse2luc3RhbmNlOmZ1bmN0aW9uKHQsZSl7dD0odHx8XCJncmVnb3JpYW5cIikudG9Mb3dlckNhc2UoKSxlPWV8fFwiXCI7dmFyIHI9dGhpcy5fbG9jYWxDYWxzW3QrXCItXCIrZV07aWYoIXImJnRoaXMuY2FsZW5kYXJzW3RdJiYocj1uZXcgdGhpcy5jYWxlbmRhcnNbdF0oZSksdGhpcy5fbG9jYWxDYWxzW3QrXCItXCIrZV09ciksIXIpdGhyb3codGhpcy5sb2NhbC5pbnZhbGlkQ2FsZW5kYXJ8fHRoaXMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWRDYWxlbmRhcikucmVwbGFjZSgvXFx7MFxcfS8sdCk7cmV0dXJuIHJ9LG5ld0RhdGU6ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4obj0obnVsbCE9dCYmdC55ZWFyP3QuY2FsZW5kYXIoKTpcInN0cmluZ1wiPT10eXBlb2Ygbj90aGlzLmluc3RhbmNlKG4saSk6bil8fHRoaXMuaW5zdGFuY2UoKSkubmV3RGF0ZSh0LGUscil9LHN1YnN0aXR1dGVEaWdpdHM6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybihlK1wiXCIpLnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KX19LHN1YnN0aXR1dGVDaGluZXNlRGlnaXRzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe2Zvcih2YXIgbj1cIlwiLGk9MDtyPjA7KXt2YXIgYT1yJTEwO249KDA9PT1hP1wiXCI6dFthXStlW2ldKStuLGkrKyxyPU1hdGguZmxvb3Ioci8xMCl9cmV0dXJuIDA9PT1uLmluZGV4T2YodFsxXStlWzFdKSYmKG49bi5zdWJzdHIoMSkpLG58fHRbMF19fX0pLG4oYS5wcm90b3R5cGUse25ld0RhdGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9jYWxlbmRhci5uZXdEYXRlKG51bGw9PXQ/dGhpczp0LGUscil9LHllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX3llYXI6dGhpcy5zZXQodCxcInlcIil9LG1vbnRoOmZ1bmN0aW9uKHQpe3JldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLl9tb250aDp0aGlzLnNldCh0LFwibVwiKX0sZGF5OmZ1bmN0aW9uKHQpe3JldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLl9kYXk6dGhpcy5zZXQodCxcImRcIil9LGRhdGU6ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLl9jYWxlbmRhci5pc1ZhbGlkKHQsZSxyKSl0aHJvdyhjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkRGF0ZSkucmVwbGFjZSgvXFx7MFxcfS8sdGhpcy5fY2FsZW5kYXIubG9jYWwubmFtZSk7cmV0dXJuIHRoaXMuX3llYXI9dCx0aGlzLl9tb250aD1lLHRoaXMuX2RheT1yLHRoaXN9LGxlYXBZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmxlYXBZZWFyKHRoaXMpfSxlcG9jaDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5lcG9jaCh0aGlzKX0sZm9ybWF0WWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5mb3JtYXRZZWFyKHRoaXMpfSxtb250aE9mWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5tb250aE9mWWVhcih0aGlzKX0sd2Vla09mWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci53ZWVrT2ZZZWFyKHRoaXMpfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheXNJblllYXIodGhpcyl9LGRheU9mWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5kYXlPZlllYXIodGhpcyl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheXNJbk1vbnRoKHRoaXMpfSxkYXlPZldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5T2ZXZWVrKHRoaXMpfSx3ZWVrRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLndlZWtEYXkodGhpcyl9LGV4dHJhSW5mbzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5leHRyYUluZm8odGhpcyl9LGFkZDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9jYWxlbmRhci5hZGQodGhpcyx0LGUpfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuc2V0KHRoaXMsdCxlKX0sY29tcGFyZVRvOmZ1bmN0aW9uKHQpe2lmKHRoaXMuX2NhbGVuZGFyLm5hbWUhPT10Ll9jYWxlbmRhci5uYW1lKXRocm93KGMubG9jYWwuZGlmZmVyZW50Q2FsZW5kYXJzfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5kaWZmZXJlbnRDYWxlbmRhcnMpLnJlcGxhY2UoL1xcezBcXH0vLHRoaXMuX2NhbGVuZGFyLmxvY2FsLm5hbWUpLnJlcGxhY2UoL1xcezFcXH0vLHQuX2NhbGVuZGFyLmxvY2FsLm5hbWUpO3ZhciBlPXRoaXMuX3llYXIhPT10Ll95ZWFyP3RoaXMuX3llYXItdC5feWVhcjp0aGlzLl9tb250aCE9PXQuX21vbnRoP3RoaXMubW9udGhPZlllYXIoKS10Lm1vbnRoT2ZZZWFyKCk6dGhpcy5fZGF5LXQuX2RheTtyZXR1cm4gMD09PWU/MDplPDA/LTE6MX0sY2FsZW5kYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXJ9LHRvSkQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIudG9KRCh0aGlzKX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jYWxlbmRhci5mcm9tSkQodCl9LHRvSlNEYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLnRvSlNEYXRlKHRoaXMpfSxmcm9tSlNEYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jYWxlbmRhci5mcm9tSlNEYXRlKHQpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybih0aGlzLnllYXIoKTwwP1wiLVwiOlwiXCIpK28oTWF0aC5hYnModGhpcy55ZWFyKCkpLDQpK1wiLVwiK28odGhpcy5tb250aCgpLDIpK1wiLVwiK28odGhpcy5kYXkoKSwyKX19KSxuKHMucHJvdG90eXBlLHtfdmFsaWRhdGVMZXZlbDowLG5ld0RhdGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBudWxsPT10P3RoaXMudG9kYXkoKToodC55ZWFyJiYodGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbXCJcIl0uaW52YWxpZERhdGUpLHI9dC5kYXkoKSxlPXQubW9udGgoKSx0PXQueWVhcigpKSxuZXcgYSh0aGlzLHQsZSxyKSl9LHRvZGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZnJvbUpTRGF0ZShuZXcgRGF0ZSl9LGVwb2NoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbXCJcIl0uaW52YWxpZFllYXIpLnllYXIoKTwwP3RoaXMubG9jYWwuZXBvY2hzWzBdOnRoaXMubG9jYWwuZXBvY2hzWzFdfSxmb3JtYXRZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRZZWFyfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkWWVhcik7cmV0dXJuKGUueWVhcigpPDA/XCItXCI6XCJcIikrbyhNYXRoLmFicyhlLnllYXIoKSksNCl9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZFllYXJ8fGMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWRZZWFyKSwxMn0sbW9udGhPZlllYXI6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkTW9udGh8fGMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWRNb250aCk7cmV0dXJuKHIubW9udGgoKSt0aGlzLm1vbnRoc0luWWVhcihyKS10aGlzLmZpcnN0TW9udGgpJXRoaXMubW9udGhzSW5ZZWFyKHIpK3RoaXMubWluTW9udGh9LGZyb21Nb250aE9mWWVhcjpmdW5jdGlvbih0LGUpe3ZhciByPShlK3RoaXMuZmlyc3RNb250aC0yKnRoaXMubWluTW9udGgpJXRoaXMubW9udGhzSW5ZZWFyKHQpK3RoaXMubWluTW9udGg7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQscix0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRNb250aHx8Yy5yZWdpb25hbE9wdGlvbnNbXCJcIl0uaW52YWxpZE1vbnRoKSxyfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRZZWFyfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkWWVhcik7cmV0dXJuIHRoaXMubGVhcFllYXIoZSk/MzY2OjM2NX0sZGF5T2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkRGF0ZSk7cmV0dXJuIG4udG9KRCgpLXRoaXMubmV3RGF0ZShuLnllYXIoKSx0aGlzLmZyb21Nb250aE9mWWVhcihuLnllYXIoKSx0aGlzLm1pbk1vbnRoKSx0aGlzLm1pbkRheSkudG9KRCgpKzF9LGRheXNJbldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gN30sZGF5T2ZXZWVrOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkRGF0ZSk7cmV0dXJuKE1hdGguZmxvb3IodGhpcy50b0pEKG4pKSsyKSV0aGlzLmRheXNJbldlZWsoKX0sZXh0cmFJbmZvOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbXCJcIl0uaW52YWxpZERhdGUpLHt9fSxhZGQ6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbXCJcIl0uaW52YWxpZERhdGUpLHRoaXMuX2NvcnJlY3RBZGQodCx0aGlzLl9hZGQodCxlLHIpLGUscil9LF9hZGQ6ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuX3ZhbGlkYXRlTGV2ZWwrKyxcImRcIj09PXJ8fFwid1wiPT09cil7dmFyIG49dC50b0pEKCkrZSooXCJ3XCI9PT1yP3RoaXMuZGF5c0luV2VlaygpOjEpLGk9dC5jYWxlbmRhcigpLmZyb21KRChuKTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLFtpLnllYXIoKSxpLm1vbnRoKCksaS5kYXkoKV19dHJ5e3ZhciBhPXQueWVhcigpKyhcInlcIj09PXI/ZTowKSxvPXQubW9udGhPZlllYXIoKSsoXCJtXCI9PT1yP2U6MCk7aT10LmRheSgpO1wieVwiPT09cj8odC5tb250aCgpIT09dGhpcy5mcm9tTW9udGhPZlllYXIoYSxvKSYmKG89dGhpcy5uZXdEYXRlKGEsdC5tb250aCgpLHRoaXMubWluRGF5KS5tb250aE9mWWVhcigpKSxvPU1hdGgubWluKG8sdGhpcy5tb250aHNJblllYXIoYSkpLGk9TWF0aC5taW4oaSx0aGlzLmRheXNJbk1vbnRoKGEsdGhpcy5mcm9tTW9udGhPZlllYXIoYSxvKSkpKTpcIm1cIj09PXImJighZnVuY3Rpb24odCl7Zm9yKDtvPHQubWluTW9udGg7KWEtLSxvKz10Lm1vbnRoc0luWWVhcihhKTtmb3IodmFyIGU9dC5tb250aHNJblllYXIoYSk7bz5lLTErdC5taW5Nb250aDspYSsrLG8tPWUsZT10Lm1vbnRoc0luWWVhcihhKX0odGhpcyksaT1NYXRoLm1pbihpLHRoaXMuZGF5c0luTW9udGgoYSx0aGlzLmZyb21Nb250aE9mWWVhcihhLG8pKSkpO3ZhciBzPVthLHRoaXMuZnJvbU1vbnRoT2ZZZWFyKGEsbyksaV07cmV0dXJuIHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLSxzfWNhdGNoKHQpe3Rocm93IHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLSx0fX0sX2NvcnJlY3RBZGQ6ZnVuY3Rpb24odCxlLHIsbil7aWYoISh0aGlzLmhhc1llYXJaZXJvfHxcInlcIiE9PW4mJlwibVwiIT09bnx8MCE9PWVbMF0mJnQueWVhcigpPjA9PWVbMF0+MCkpe3ZhciBpPXt5OlsxLDEsXCJ5XCJdLG06WzEsdGhpcy5tb250aHNJblllYXIoLTEpLFwibVwiXSx3Olt0aGlzLmRheXNJbldlZWsoKSx0aGlzLmRheXNJblllYXIoLTEpLFwiZFwiXSxkOlsxLHRoaXMuZGF5c0luWWVhcigtMSksXCJkXCJdfVtuXSxhPXI8MD8tMToxO2U9dGhpcy5fYWRkKHQscippWzBdK2EqaVsxXSxpWzJdKX1yZXR1cm4gdC5kYXRlKGVbMF0sZVsxXSxlWzJdKX0sc2V0OmZ1bmN0aW9uKHQsZSxyKXt0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbXCJcIl0uaW52YWxpZERhdGUpO3ZhciBuPVwieVwiPT09cj9lOnQueWVhcigpLGk9XCJtXCI9PT1yP2U6dC5tb250aCgpLGE9XCJkXCI9PT1yP2U6dC5kYXkoKTtyZXR1cm5cInlcIiE9PXImJlwibVwiIT09cnx8KGE9TWF0aC5taW4oYSx0aGlzLmRheXNJbk1vbnRoKG4saSkpKSx0LmRhdGUobixpLGEpfSxpc1ZhbGlkOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLl92YWxpZGF0ZUxldmVsKys7dmFyIG49dGhpcy5oYXNZZWFyWmVyb3x8MCE9PXQ7aWYobil7dmFyIGk9dGhpcy5uZXdEYXRlKHQsZSx0aGlzLm1pbkRheSk7bj1lPj10aGlzLm1pbk1vbnRoJiZlLXRoaXMubWluTW9udGg8dGhpcy5tb250aHNJblllYXIoaSkmJnI+PXRoaXMubWluRGF5JiZyLXRoaXMubWluRGF5PHRoaXMuZGF5c0luTW9udGgoaSl9cmV0dXJuIHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLSxufSx0b0pTRGF0ZTpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbXCJcIl0uaW52YWxpZERhdGUpO3JldHVybiBjLmluc3RhbmNlKCkuZnJvbUpEKHRoaXMudG9KRChuKSkudG9KU0RhdGUoKX0sZnJvbUpTRGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mcm9tSkQoYy5pbnN0YW5jZSgpLmZyb21KU0RhdGUodCkudG9KRCgpKX0sX3ZhbGlkYXRlOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQueWVhcil7aWYoMD09PXRoaXMuX3ZhbGlkYXRlTGV2ZWwmJnRoaXMubmFtZSE9PXQuY2FsZW5kYXIoKS5uYW1lKXRocm93KGMubG9jYWwuZGlmZmVyZW50Q2FsZW5kYXJzfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5kaWZmZXJlbnRDYWxlbmRhcnMpLnJlcGxhY2UoL1xcezBcXH0vLHRoaXMubG9jYWwubmFtZSkucmVwbGFjZSgvXFx7MVxcfS8sdC5jYWxlbmRhcigpLmxvY2FsLm5hbWUpO3JldHVybiB0fXRyeXtpZih0aGlzLl92YWxpZGF0ZUxldmVsKyssMT09PXRoaXMuX3ZhbGlkYXRlTGV2ZWwmJiF0aGlzLmlzVmFsaWQodCxlLHIpKXRocm93IG4ucmVwbGFjZSgvXFx7MFxcfS8sdGhpcy5sb2NhbC5uYW1lKTt2YXIgaT10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiB0aGlzLl92YWxpZGF0ZUxldmVsLS0saX1jYXRjaCh0KXt0aHJvdyB0aGlzLl92YWxpZGF0ZUxldmVsLS0sdH19fSksbC5wcm90b3R5cGU9bmV3IHMsbihsLnByb3RvdHlwZSx7bmFtZTpcIkdyZWdvcmlhblwiLGpkRXBvY2g6MTcyMTQyNS41LGRheXNQZXJNb250aDpbMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7XCJcIjp7bmFtZTpcIkdyZWdvcmlhblwiLGVwb2NoczpbXCJCQ0VcIixcIkNFXCJdLG1vbnRoTmFtZXM6W1wiSmFudWFyeVwiLFwiRmVicnVhcnlcIixcIk1hcmNoXCIsXCJBcHJpbFwiLFwiTWF5XCIsXCJKdW5lXCIsXCJKdWx5XCIsXCJBdWd1c3RcIixcIlNlcHRlbWJlclwiLFwiT2N0b2JlclwiLFwiTm92ZW1iZXJcIixcIkRlY2VtYmVyXCJdLG1vbnRoTmFtZXNTaG9ydDpbXCJKYW5cIixcIkZlYlwiLFwiTWFyXCIsXCJBcHJcIixcIk1heVwiLFwiSnVuXCIsXCJKdWxcIixcIkF1Z1wiLFwiU2VwXCIsXCJPY3RcIixcIk5vdlwiLFwiRGVjXCJdLGRheU5hbWVzOltcIlN1bmRheVwiLFwiTW9uZGF5XCIsXCJUdWVzZGF5XCIsXCJXZWRuZXNkYXlcIixcIlRodXJzZGF5XCIsXCJGcmlkYXlcIixcIlNhdHVyZGF5XCJdLGRheU5hbWVzU2hvcnQ6W1wiU3VuXCIsXCJNb25cIixcIlR1ZVwiLFwiV2VkXCIsXCJUaHVcIixcIkZyaVwiLFwiU2F0XCJdLGRheU5hbWVzTWluOltcIlN1XCIsXCJNb1wiLFwiVHVcIixcIldlXCIsXCJUaFwiLFwiRnJcIixcIlNhXCJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6XCJtbS9kZC95eXl5XCIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRZZWFyfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkWWVhcik7cmV0dXJuKHQ9ZS55ZWFyKCkrKGUueWVhcigpPDA/MTowKSklND09MCYmKHQlMTAwIT0wfHx0JTQwMD09MCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKDQtKG4uZGF5T2ZXZWVrKCl8fDcpLFwiZFwiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZE1vbnRofHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWREYXRlKTt0PW4ueWVhcigpLGU9bi5tb250aCgpLHI9bi5kYXkoKSx0PDAmJnQrKyxlPDMmJihlKz0xMix0LS0pO3ZhciBpPU1hdGguZmxvb3IodC8xMDApLGE9Mi1pK01hdGguZmxvb3IoaS80KTtyZXR1cm4gTWF0aC5mbG9vcigzNjUuMjUqKHQrNDcxNikpK01hdGguZmxvb3IoMzAuNjAwMSooZSsxKSkrcithLTE1MjQuNX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodCsuNSkscj1NYXRoLmZsb29yKChlLTE4NjcyMTYuMjUpLzM2NTI0LjI1KSxuPShyPWUrMStyLU1hdGguZmxvb3Ioci80KSkrMTUyNCxpPU1hdGguZmxvb3IoKG4tMTIyLjEpLzM2NS4yNSksYT1NYXRoLmZsb29yKDM2NS4yNSppKSxvPU1hdGguZmxvb3IoKG4tYSkvMzAuNjAwMSkscz1uLWEtTWF0aC5mbG9vcigzMC42MDAxKm8pLGw9by0obz4xMy41PzEzOjEpLGM9aS0obD4yLjU/NDcxNjo0NzE1KTtyZXR1cm4gYzw9MCYmYy0tLHRoaXMubmV3RGF0ZShjLGwscyl9LHRvSlNEYXRlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkRGF0ZSksaT1uZXcgRGF0ZShuLnllYXIoKSxuLm1vbnRoKCktMSxuLmRheSgpKTtyZXR1cm4gaS5zZXRIb3VycygwKSxpLnNldE1pbnV0ZXMoMCksaS5zZXRTZWNvbmRzKDApLGkuc2V0TWlsbGlzZWNvbmRzKDApLGkuc2V0SG91cnMoaS5nZXRIb3VycygpPjEyP2kuZ2V0SG91cnMoKSsyOjApLGl9LGZyb21KU0RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubmV3RGF0ZSh0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpKzEsdC5nZXREYXRlKCkpfX0pO3ZhciBjPWUuZXhwb3J0cz1uZXcgaTtjLmNkYXRlPWEsYy5iYXNlQ2FsZW5kYXI9cyxjLmNhbGVuZGFycy5ncmVnb3JpYW49bH0se1wib2JqZWN0LWFzc2lnblwiOjQ0N31dLDU1NzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCJvYmplY3QtYXNzaWduXCIpLGk9dChcIi4vbWFpblwiKTtuKGkucmVnaW9uYWxPcHRpb25zW1wiXCJdLHtpbnZhbGlkQXJndW1lbnRzOlwiSW52YWxpZCBhcmd1bWVudHNcIixpbnZhbGlkRm9ybWF0OlwiQ2Fubm90IGZvcm1hdCBhIGRhdGUgZnJvbSBhbm90aGVyIGNhbGVuZGFyXCIsbWlzc2luZ051bWJlckF0OlwiTWlzc2luZyBudW1iZXIgYXQgcG9zaXRpb24gezB9XCIsdW5rbm93bk5hbWVBdDpcIlVua25vd24gbmFtZSBhdCBwb3NpdGlvbiB7MH1cIix1bmV4cGVjdGVkTGl0ZXJhbEF0OlwiVW5leHBlY3RlZCBsaXRlcmFsIGF0IHBvc2l0aW9uIHswfVwiLHVuZXhwZWN0ZWRUZXh0OlwiQWRkaXRpb25hbCB0ZXh0IGZvdW5kIGF0IGVuZFwifSksaS5sb2NhbD1pLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXSxuKGkuY2RhdGUucHJvdG90eXBlLHtmb3JtYXREYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIHQmJihlPXQsdD1cIlwiKSx0aGlzLl9jYWxlbmRhci5mb3JtYXREYXRlKHR8fFwiXCIsdGhpcyxlKX19KSxuKGkuYmFzZUNhbGVuZGFyLnByb3RvdHlwZSx7VU5JWF9FUE9DSDppLmluc3RhbmNlKCkubmV3RGF0ZSgxOTcwLDEsMSkudG9KRCgpLFNFQ1NfUEVSX0RBWTo4NjQwMCxUSUNLU19FUE9DSDppLmluc3RhbmNlKCkuamRFcG9jaCxUSUNLU19QRVJfREFZOjg2NGU5LEFUT006XCJ5eXl5LW1tLWRkXCIsQ09PS0lFOlwiRCwgZGQgTSB5eXl5XCIsRlVMTDpcIkRELCBNTSBkLCB5eXl5XCIsSVNPXzg2MDE6XCJ5eXl5LW1tLWRkXCIsSlVMSUFOOlwiSlwiLFJGQ184MjI6XCJELCBkIE0geXlcIixSRkNfODUwOlwiREQsIGRkLU0teXlcIixSRkNfMTAzNjpcIkQsIGQgTSB5eVwiLFJGQ18xMTIzOlwiRCwgZCBNIHl5eXlcIixSRkNfMjgyMjpcIkQsIGQgTSB5eXl5XCIsUlNTOlwiRCwgZCBNIHl5XCIsVElDS1M6XCIhXCIsVElNRVNUQU1QOlwiQFwiLFczQzpcInl5eXktbW0tZGRcIixmb3JtYXREYXRlOmZ1bmN0aW9uKHQsZSxyKXtpZihcInN0cmluZ1wiIT10eXBlb2YgdCYmKHI9ZSxlPXQsdD1cIlwiKSwhZSlyZXR1cm5cIlwiO2lmKGUuY2FsZW5kYXIoKSE9PXRoaXMpdGhyb3cgaS5sb2NhbC5pbnZhbGlkRm9ybWF0fHxpLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkRm9ybWF0O3Q9dHx8dGhpcy5sb2NhbC5kYXRlRm9ybWF0O2Zvcih2YXIgbixhLG8scyxsPShyPXJ8fHt9KS5kYXlOYW1lc1Nob3J0fHx0aGlzLmxvY2FsLmRheU5hbWVzU2hvcnQsYz1yLmRheU5hbWVzfHx0aGlzLmxvY2FsLmRheU5hbWVzLHU9ci5tb250aE51bWJlcnN8fHRoaXMubG9jYWwubW9udGhOdW1iZXJzLGg9ci5tb250aE5hbWVzU2hvcnR8fHRoaXMubG9jYWwubW9udGhOYW1lc1Nob3J0LGY9ci5tb250aE5hbWVzfHx0aGlzLmxvY2FsLm1vbnRoTmFtZXMscD0oci5jYWxjdWxhdGVXZWVrfHx0aGlzLmxvY2FsLmNhbGN1bGF0ZVdlZWssZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MTt3K248dC5sZW5ndGgmJnQuY2hhckF0KHcrbik9PT1lOyluKys7cmV0dXJuIHcrPW4tMSxNYXRoLmZsb29yKG4vKHJ8fDEpKT4xfSksZD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1cIlwiK2U7aWYocCh0LG4pKWZvcig7aS5sZW5ndGg8cjspaT1cIjBcIitpO3JldHVybiBpfSxnPXRoaXMsdj1mdW5jdGlvbih0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB1P3UuY2FsbChnLHQscChcIm1cIikpOngoZChcIm1cIix0Lm1vbnRoKCksMikpfSxtPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/XCJmdW5jdGlvblwiPT10eXBlb2YgZj9mLmNhbGwoZyx0KTpmW3QubW9udGgoKS1nLm1pbk1vbnRoXTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBoP2guY2FsbChnLHQpOmhbdC5tb250aCgpLWcubWluTW9udGhdfSx5PXRoaXMubG9jYWwuZGlnaXRzLHg9ZnVuY3Rpb24odCl7cmV0dXJuIHIubG9jYWxOdW1iZXJzJiZ5P3kodCk6dH0sYj1cIlwiLF89ITEsdz0wO3c8dC5sZW5ndGg7dysrKWlmKF8pXCInXCIhPT10LmNoYXJBdCh3KXx8cChcIidcIik/Yis9dC5jaGFyQXQodyk6Xz0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdCh3KSl7Y2FzZVwiZFwiOmIrPXgoZChcImRcIixlLmRheSgpLDIpKTticmVhaztjYXNlXCJEXCI6Yis9KG49XCJEXCIsYT1lLmRheU9mV2VlaygpLG89bCxzPWMscChuKT9zW2FdOm9bYV0pO2JyZWFrO2Nhc2VcIm9cIjpiKz1kKFwib1wiLGUuZGF5T2ZZZWFyKCksMyk7YnJlYWs7Y2FzZVwid1wiOmIrPWQoXCJ3XCIsZS53ZWVrT2ZZZWFyKCksMik7YnJlYWs7Y2FzZVwibVwiOmIrPXYoZSk7YnJlYWs7Y2FzZVwiTVwiOmIrPW0oZSxwKFwiTVwiKSk7YnJlYWs7Y2FzZVwieVwiOmIrPXAoXCJ5XCIsMik/ZS55ZWFyKCk6KGUueWVhcigpJTEwMDwxMD9cIjBcIjpcIlwiKStlLnllYXIoKSUxMDA7YnJlYWs7Y2FzZVwiWVwiOnAoXCJZXCIsMiksYis9ZS5mb3JtYXRZZWFyKCk7YnJlYWs7Y2FzZVwiSlwiOmIrPWUudG9KRCgpO2JyZWFrO2Nhc2VcIkBcIjpiKz0oZS50b0pEKCktdGhpcy5VTklYX0VQT0NIKSp0aGlzLlNFQ1NfUEVSX0RBWTticmVhaztjYXNlXCIhXCI6Yis9KGUudG9KRCgpLXRoaXMuVElDS1NfRVBPQ0gpKnRoaXMuVElDS1NfUEVSX0RBWTticmVhaztjYXNlXCInXCI6cChcIidcIik/Yis9XCInXCI6Xz0hMDticmVhaztkZWZhdWx0OmIrPXQuY2hhckF0KHcpfXJldHVybiBifSxwYXJzZURhdGU6ZnVuY3Rpb24odCxlLHIpe2lmKG51bGw9PWUpdGhyb3cgaS5sb2NhbC5pbnZhbGlkQXJndW1lbnRzfHxpLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkQXJndW1lbnRzO2lmKFwiXCI9PT0oZT1cIm9iamVjdFwiPT10eXBlb2YgZT9lLnRvU3RyaW5nKCk6ZStcIlwiKSlyZXR1cm4gbnVsbDt0PXR8fHRoaXMubG9jYWwuZGF0ZUZvcm1hdDt2YXIgbj0ocj1yfHx7fSkuc2hvcnRZZWFyQ3V0b2ZmfHx0aGlzLnNob3J0WWVhckN1dG9mZjtuPVwic3RyaW5nXCIhPXR5cGVvZiBuP246dGhpcy50b2RheSgpLnllYXIoKSUxMDArcGFyc2VJbnQobiwxMCk7Zm9yKHZhciBhPXIuZGF5TmFtZXNTaG9ydHx8dGhpcy5sb2NhbC5kYXlOYW1lc1Nob3J0LG89ci5kYXlOYW1lc3x8dGhpcy5sb2NhbC5kYXlOYW1lcyxzPXIucGFyc2VNb250aHx8dGhpcy5sb2NhbC5wYXJzZU1vbnRoLGw9ci5tb250aE51bWJlcnN8fHRoaXMubG9jYWwubW9udGhOdW1iZXJzLGM9ci5tb250aE5hbWVzU2hvcnR8fHRoaXMubG9jYWwubW9udGhOYW1lc1Nob3J0LHU9ci5tb250aE5hbWVzfHx0aGlzLmxvY2FsLm1vbnRoTmFtZXMsaD0tMSxmPS0xLHA9LTEsZD0tMSxnPS0xLHY9ITEsbT0hMSx5PWZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPTE7TStuPHQubGVuZ3RoJiZ0LmNoYXJBdChNK24pPT09ZTspbisrO3JldHVybiBNKz1uLTEsTWF0aC5mbG9vcihuLyhyfHwxKSk+MX0seD1mdW5jdGlvbih0LHIpe3ZhciBuPXkodCxyKSxhPVsyLDMsbj80OjIsbj80OjIsMTAsMTEsMjBdW1wib3lZSkAhXCIuaW5kZXhPZih0KSsxXSxvPW5ldyBSZWdFeHAoXCJeLT9cXFxcZHsxLFwiK2ErXCJ9XCIpLHM9ZS5zdWJzdHJpbmcoVCkubWF0Y2gobyk7aWYoIXMpdGhyb3coaS5sb2NhbC5taXNzaW5nTnVtYmVyQXR8fGkucmVnaW9uYWxPcHRpb25zW1wiXCJdLm1pc3NpbmdOdW1iZXJBdCkucmVwbGFjZSgvXFx7MFxcfS8sVCk7cmV0dXJuIFQrPXNbMF0ubGVuZ3RoLHBhcnNlSW50KHNbMF0sMTApfSxiPXRoaXMsXz1mdW5jdGlvbigpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGwpe3koXCJtXCIpO3ZhciB0PWwuY2FsbChiLGUuc3Vic3RyaW5nKFQpKTtyZXR1cm4gVCs9dC5sZW5ndGgsdH1yZXR1cm4geChcIm1cIil9LHc9ZnVuY3Rpb24odCxyLG4sYSl7Zm9yKHZhciBvPXkodCxhKT9uOnIscz0wO3M8by5sZW5ndGg7cysrKWlmKGUuc3Vic3RyKFQsb1tzXS5sZW5ndGgpLnRvTG93ZXJDYXNlKCk9PT1vW3NdLnRvTG93ZXJDYXNlKCkpcmV0dXJuIFQrPW9bc10ubGVuZ3RoLHMrYi5taW5Nb250aDt0aHJvdyhpLmxvY2FsLnVua25vd25OYW1lQXR8fGkucmVnaW9uYWxPcHRpb25zW1wiXCJdLnVua25vd25OYW1lQXQpLnJlcGxhY2UoL1xcezBcXH0vLFQpfSxrPWZ1bmN0aW9uKCl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdSl7dmFyIHQ9eShcIk1cIik/dS5jYWxsKGIsZS5zdWJzdHJpbmcoVCkpOmMuY2FsbChiLGUuc3Vic3RyaW5nKFQpKTtyZXR1cm4gVCs9dC5sZW5ndGgsdH1yZXR1cm4gdyhcIk1cIixjLHUpfSxBPWZ1bmN0aW9uKCl7aWYoZS5jaGFyQXQoVCkhPT10LmNoYXJBdChNKSl0aHJvdyhpLmxvY2FsLnVuZXhwZWN0ZWRMaXRlcmFsQXR8fGkucmVnaW9uYWxPcHRpb25zW1wiXCJdLnVuZXhwZWN0ZWRMaXRlcmFsQXQpLnJlcGxhY2UoL1xcezBcXH0vLFQpO1QrK30sVD0wLE09MDtNPHQubGVuZ3RoO00rKylpZihtKVwiJ1wiIT09dC5jaGFyQXQoTSl8fHkoXCInXCIpP0EoKTptPSExO2Vsc2Ugc3dpdGNoKHQuY2hhckF0KE0pKXtjYXNlXCJkXCI6ZD14KFwiZFwiKTticmVhaztjYXNlXCJEXCI6dyhcIkRcIixhLG8pO2JyZWFrO2Nhc2VcIm9cIjpnPXgoXCJvXCIpO2JyZWFrO2Nhc2VcIndcIjp4KFwid1wiKTticmVhaztjYXNlXCJtXCI6cD1fKCk7YnJlYWs7Y2FzZVwiTVwiOnA9aygpO2JyZWFrO2Nhc2VcInlcIjp2YXIgUz1NO3Y9IXkoXCJ5XCIsMiksTT1TLGY9eChcInlcIiwyKTticmVhaztjYXNlXCJZXCI6Zj14KFwiWVwiLDIpO2JyZWFrO2Nhc2VcIkpcIjpoPXgoXCJKXCIpKy41LFwiLlwiPT09ZS5jaGFyQXQoVCkmJihUKysseChcIkpcIikpO2JyZWFrO2Nhc2VcIkBcIjpoPXgoXCJAXCIpL3RoaXMuU0VDU19QRVJfREFZK3RoaXMuVU5JWF9FUE9DSDticmVhaztjYXNlXCIhXCI6aD14KFwiIVwiKS90aGlzLlRJQ0tTX1BFUl9EQVkrdGhpcy5USUNLU19FUE9DSDticmVhaztjYXNlXCIqXCI6VD1lLmxlbmd0aDticmVhaztjYXNlXCInXCI6eShcIidcIik/QSgpOm09ITA7YnJlYWs7ZGVmYXVsdDpBKCl9aWYoVDxlLmxlbmd0aCl0aHJvdyBpLmxvY2FsLnVuZXhwZWN0ZWRUZXh0fHxpLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS51bmV4cGVjdGVkVGV4dDtpZigtMT09PWY/Zj10aGlzLnRvZGF5KCkueWVhcigpOmY8MTAwJiZ2JiYoZis9LTE9PT1uPzE5MDA6dGhpcy50b2RheSgpLnllYXIoKS10aGlzLnRvZGF5KCkueWVhcigpJTEwMC0oZjw9bj8wOjEwMCkpLFwic3RyaW5nXCI9PXR5cGVvZiBwJiYocD1zLmNhbGwodGhpcyxmLHApKSxnPi0xKXtwPTEsZD1nO2Zvcih2YXIgRT10aGlzLmRheXNJbk1vbnRoKGYscCk7ZD5FO0U9dGhpcy5kYXlzSW5Nb250aChmLHApKXArKyxkLT1FfXJldHVybiBoPi0xP3RoaXMuZnJvbUpEKGgpOnRoaXMubmV3RGF0ZShmLHAsZCl9LGRldGVybWluZURhdGU6ZnVuY3Rpb24odCxlLHIsbixpKXtyJiZcIm9iamVjdFwiIT10eXBlb2YgciYmKGk9bixuPXIscj1udWxsKSxcInN0cmluZ1wiIT10eXBlb2YgbiYmKGk9bixuPVwiXCIpO3ZhciBhPXRoaXM7cmV0dXJuIGU9ZT9lLm5ld0RhdGUoKTpudWxsLHQ9bnVsbD09dD9lOlwic3RyaW5nXCI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3RyeXtyZXR1cm4gYS5wYXJzZURhdGUobix0LGkpfWNhdGNoKHQpe31mb3IodmFyIGU9KCh0PXQudG9Mb3dlckNhc2UoKSkubWF0Y2goL15jLykmJnI/ci5uZXdEYXRlKCk6bnVsbCl8fGEudG9kYXkoKSxvPS8oWystXT9bMC05XSspXFxzKihkfHd8bXx5KT8vZyxzPW8uZXhlYyh0KTtzOyllLmFkZChwYXJzZUludChzWzFdLDEwKSxzWzJdfHxcImRcIikscz1vLmV4ZWModCk7cmV0dXJuIGV9KHQpOlwibnVtYmVyXCI9PXR5cGVvZiB0P2lzTmFOKHQpfHx0PT09MS8wfHx0PT09LTEvMD9lOmEudG9kYXkoKS5hZGQodCxcImRcIik6YS5uZXdEYXRlKHQpfX0pfSx7XCIuL21haW5cIjo1NTYsXCJvYmplY3QtYXNzaWduXCI6NDQ3fV0sNTU4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoXCJjd2lzZS1jb21waWxlclwiKSh7YXJnczpbXCJhcnJheVwiLHtvZmZzZXQ6WzFdLGFycmF5OjB9LFwic2NhbGFyXCIsXCJzY2FsYXJcIixcImluZGV4XCJdLHByZTp7Ym9keTpcInt9XCIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6XCJ7fVwiLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5Olwie1xcbiAgICAgICAgdmFyIF9pbmxpbmVfMV9kYSA9IF9pbmxpbmVfMV9hcmcwXyAtIF9pbmxpbmVfMV9hcmczX1xcbiAgICAgICAgdmFyIF9pbmxpbmVfMV9kYiA9IF9pbmxpbmVfMV9hcmcxXyAtIF9pbmxpbmVfMV9hcmczX1xcbiAgICAgICAgaWYoKF9pbmxpbmVfMV9kYSA+PSAwKSAhPT0gKF9pbmxpbmVfMV9kYiA+PSAwKSkge1xcbiAgICAgICAgICBfaW5saW5lXzFfYXJnMl8ucHVzaChfaW5saW5lXzFfYXJnNF9bMF0gKyAwLjUgKyAwLjUgKiAoX2lubGluZV8xX2RhICsgX2lubGluZV8xX2RiKSAvIChfaW5saW5lXzFfZGEgLSBfaW5saW5lXzFfZGIpKVxcbiAgICAgICAgfVxcbiAgICAgIH1cIixhcmdzOlt7bmFtZTpcIl9pbmxpbmVfMV9hcmcwX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzFfYXJnMV9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xX2FyZzJfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfMV9hcmczX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn0se25hbWU6XCJfaW5saW5lXzFfYXJnNF9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W1wiX2lubGluZV8xX2RhXCIsXCJfaW5saW5lXzFfZGJcIl19LGZ1bmNOYW1lOlwiemVyb0Nyb3NzaW5nc1wifSl9LHtcImN3aXNlLWNvbXBpbGVyXCI6MTM3fV0sNTU5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107cmV0dXJuIGU9K2V8fDAsbih0LmhpKHQuc2hhcGVbMF0tMSkscixlKSxyfTt2YXIgbj10KFwiLi9saWIvemMtY29yZVwiKX0se1wiLi9saWIvemMtY29yZVwiOjU1OH1dLDU2MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1be3BhdGg6XCJcIixiYWNrb2ZmOjB9LHtwYXRoOlwiTS0yLjQsLTNWM0wwLjYsMFpcIixiYWNrb2ZmOi42fSx7cGF0aDpcIk0tMy43LC0yLjVWMi41TDEuMywwWlwiLGJhY2tvZmY6MS4zfSx7cGF0aDpcIk0tNC40NSwtM0wtMS42NSwtMC4yVjAuMkwtNC40NSwzTDEuNTUsMFpcIixiYWNrb2ZmOjEuNTV9LHtwYXRoOlwiTS0yLjIsLTIuMkwtMC4yLC0wLjJWMC4yTC0yLjIsMi4yTC0xLjQsM0wxLjYsMEwtMS40LC0zWlwiLGJhY2tvZmY6MS42fSx7cGF0aDpcIk0tNC40LC0yLjFMLTAuNiwtMC4yVjAuMkwtNC40LDIuMUwtNCwzTDIsMEwtNCwtM1pcIixiYWNrb2ZmOjJ9LHtwYXRoOlwiTTIsMEEyLDIgMCAxLDEgMCwtMkEyLDIgMCAwLDEgMiwwWlwiLGJhY2tvZmY6MCxub1JvdGF0ZTohMH0se3BhdGg6XCJNMiwyVi0ySC0yVjJaXCIsYmFja29mZjowLG5vUm90YXRlOiEwfV19LHt9XSw1NjE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9hcnJvd19wYXRoc1wiKSxpPXQoXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50c1wiKSxvPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLnRlbXBsYXRlZEFycmF5O2UuZXhwb3J0cz1vKFwiYW5ub3RhdGlvblwiLHt2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSx0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSx0ZXh0YW5nbGU6e3ZhbFR5cGU6XCJhbmdsZVwiLGRmbHQ6MCxlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LGZvbnQ6aSh7ZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wiLGNvbG9yRWRpdFR5cGU6XCJhcnJheWRyYXdcIn0pLHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjEsZGZsdDpudWxsLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0saGVpZ2h0Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjEsZGZsdDpudWxsLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0sb3BhY2l0eTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZTpcImFycmF5ZHJhd1wifSxhbGlnbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibGVmdFwiLFwiY2VudGVyXCIsXCJyaWdodFwiXSxkZmx0OlwiY2VudGVyXCIsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0sdmFsaWduOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ0b3BcIixcIm1pZGRsZVwiLFwiYm90dG9tXCJdLGRmbHQ6XCJtaWRkbGVcIixlZGl0VHlwZTpcImFycmF5ZHJhd1wifSxiZ2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OlwicmdiYSgwLDAsMCwwKVwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OlwicmdiYSgwLDAsMCwwKVwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGJvcmRlcnBhZDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0sc2hvd2Fycm93Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSxhcnJvd2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcImFycmF5ZHJhd1wifSxhcnJvd2hlYWQ6e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsbWluOjAsbWF4Om4ubGVuZ3RoLGRmbHQ6MSxlZGl0VHlwZTpcImFycmF5ZHJhd1wifSxzdGFydGFycm93aGVhZDp7dmFsVHlwZTpcImludGVnZXJcIixtaW46MCxtYXg6bi5sZW5ndGgsZGZsdDoxLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGFycm93c2lkZTp7dmFsVHlwZTpcImZsYWdsaXN0XCIsZmxhZ3M6W1wiZW5kXCIsXCJzdGFydFwiXSxleHRyYXM6W1wibm9uZVwiXSxkZmx0OlwiZW5kXCIsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0sYXJyb3dzaXplOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOi4zLGRmbHQ6MSxlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LHN0YXJ0YXJyb3dzaXplOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOi4zLGRmbHQ6MSxlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LGFycm93d2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46LjEsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSxzdGFuZG9mZjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LHN0YXJ0c3RhbmRvZmY6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSxheDp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0sYXk6e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LGF4cmVmOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLGRmbHQ6XCJwaXhlbFwiLHZhbHVlczpbXCJwaXhlbFwiLGEuaWRSZWdleC54LnRvU3RyaW5nKCldLGVkaXRUeXBlOlwiY2FsY1wifSxheXJlZjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIixkZmx0OlwicGl4ZWxcIix2YWx1ZXM6W1wicGl4ZWxcIixhLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZTpcImNhbGNcIn0seHJlZjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wicGFwZXJcIixhLmlkUmVnZXgueC50b1N0cmluZygpXSxlZGl0VHlwZTpcImNhbGNcIn0seDp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0seGFuY2hvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYXV0b1wiLFwibGVmdFwiLFwiY2VudGVyXCIsXCJyaWdodFwiXSxkZmx0OlwiYXV0b1wiLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0seHNoaWZ0Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0seXJlZjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wicGFwZXJcIixhLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZTpcImNhbGNcIn0seTp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0seWFuY2hvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYXV0b1wiLFwidG9wXCIsXCJtaWRkbGVcIixcImJvdHRvbVwiXSxkZmx0OlwiYXV0b1wiLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0seXNoaWZ0Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0sY2xpY2t0b3Nob3c6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOlshMSxcIm9ub2ZmXCIsXCJvbm91dFwiXSxkZmx0OiExLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LHhjbGljazp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LHljbGljazp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGhvdmVydGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGhvdmVybGFiZWw6e2JnY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcImFycmF5ZHJhd1wifSxmb250Omkoe2VkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9KSxlZGl0VHlwZTpcImFycmF5ZHJhd1wifSxjYXB0dXJlZXZlbnRzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGVkaXRUeXBlOlwiY2FsY1wiLF9kZXByZWNhdGVkOntyZWY6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcImNhbGNcIn19fSl9LHtcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzXCI6NzU1LFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCI6Nzc1LFwiLi9hcnJvd19wYXRoc1wiOjU2MH1dLDU2MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksYT10KFwiLi9kcmF3XCIpLmRyYXc7ZnVuY3Rpb24gbyh0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O24uZmlsdGVyVmlzaWJsZShlLmFubm90YXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWkuZ2V0RnJvbUlkKHQsZS54cmVmKSxuPWkuZ2V0RnJvbUlkKHQsZS55cmVmKTtlLl9leHRyZW1lcz17fSxyJiZzKGUsciksbiYmcyhlLG4pfSl9ZnVuY3Rpb24gcyh0LGUpe3ZhciByLG49ZS5faWQsYT1uLmNoYXJBdCgwKSxvPXRbYV0scz10W1wiYVwiK2FdLGw9dFthK1wicmVmXCJdLGM9dFtcImFcIithK1wicmVmXCJdLHU9dFtcIl9cIithK1wicGFkcGx1c1wiXSxoPXRbXCJfXCIrYStcInBhZG1pbnVzXCJdLGY9e3g6MSx5Oi0xfVthXSp0W2ErXCJzaGlmdFwiXSxwPTMqdC5hcnJvd3NpemUqdC5hcnJvd3dpZHRofHwwLGQ9cCtmLGc9cC1mLHY9Myp0LnN0YXJ0YXJyb3dzaXplKnQuYXJyb3d3aWR0aHx8MCxtPXYrZix5PXYtZjtpZihjPT09bCl7dmFyIHg9aS5maW5kRXh0cmVtZXMoZSxbZS5yMmMobyldLHtwcGFkcGx1czpkLHBwYWRtaW51czpnfSksYj1pLmZpbmRFeHRyZW1lcyhlLFtlLnIyYyhzKV0se3BwYWRwbHVzOk1hdGgubWF4KHUsbSkscHBhZG1pbnVzOk1hdGgubWF4KGgseSl9KTtyPXttaW46W3gubWluWzBdLGIubWluWzBdXSxtYXg6W3gubWF4WzBdLGIubWF4WzBdXX19ZWxzZSBtPXM/bStzOm0seT1zP3ktczp5LHI9aS5maW5kRXh0cmVtZXMoZSxbZS5yMmMobyldLHtwcGFkcGx1czpNYXRoLm1heCh1LGQsbSkscHBhZG1pbnVzOk1hdGgubWF4KGgsZyx5KX0pO3QuX2V4dHJlbWVzW25dPXJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7aWYobi5maWx0ZXJWaXNpYmxlKGUuYW5ub3RhdGlvbnMpLmxlbmd0aCYmdC5fZnVsbERhdGEubGVuZ3RoKXJldHVybiBuLnN5bmNPckFzeW5jKFthLG9dLHQpfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuL2RyYXdcIjo1Njd9XSw1NjM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGE9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIikuYXJyYXlFZGl0b3I7ZnVuY3Rpb24gbyh0LGUpe3ZhciByLG4saSxhLG8sbCxjLHU9dC5fZnVsbExheW91dC5hbm5vdGF0aW9ucyxoPVtdLGY9W10scD1bXSxkPShlfHxbXSkubGVuZ3RoO2ZvcihyPTA7cjx1Lmxlbmd0aDtyKyspaWYoYT0oaT11W3JdKS5jbGlja3Rvc2hvdyl7Zm9yKG49MDtuPGQ7bisrKWlmKGw9KG89ZVtuXSkueGF4aXMsYz1vLnlheGlzLGwuX2lkPT09aS54cmVmJiZjLl9pZD09PWkueXJlZiYmbC5kMnIoby54KT09PXMoaS5feGNsaWNrLGwpJiZjLmQycihvLnkpPT09cyhpLl95Y2xpY2ssYykpeyhpLnZpc2libGU/XCJvbm91dFwiPT09YT9mOnA6aCkucHVzaChyKTticmVha31uPT09ZCYmaS52aXNpYmxlJiZcIm9ub3V0XCI9PT1hJiZmLnB1c2gocil9cmV0dXJue29uOmgsb2ZmOmYsZXhwbGljaXRPZmY6cH19ZnVuY3Rpb24gcyh0LGUpe3JldHVyblwibG9nXCI9PT1lLnR5cGU/ZS5sMnIodCk6ZS5kMnIodCl9ZS5leHBvcnRzPXtoYXNDbGlja1RvU2hvdzpmdW5jdGlvbih0LGUpe3ZhciByPW8odCxlKTtyZXR1cm4gci5vbi5sZW5ndGg+MHx8ci5leHBsaWNpdE9mZi5sZW5ndGg+MH0sb25DbGljazpmdW5jdGlvbih0LGUpe3ZhciByLHMsbD1vKHQsZSksYz1sLm9uLHU9bC5vZmYuY29uY2F0KGwuZXhwbGljaXRPZmYpLGg9e30sZj10Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zO2lmKCFjLmxlbmd0aCYmIXUubGVuZ3RoKXJldHVybjtmb3Iocj0wO3I8Yy5sZW5ndGg7cisrKShzPWEodC5sYXlvdXQsXCJhbm5vdGF0aW9uc1wiLGZbY1tyXV0pKS5tb2RpZnlJdGVtKFwidmlzaWJsZVwiLCEwKSxuLmV4dGVuZEZsYXQoaCxzLmdldFVwZGF0ZU9iaigpKTtmb3Iocj0wO3I8dS5sZW5ndGg7cisrKShzPWEodC5sYXlvdXQsXCJhbm5vdGF0aW9uc1wiLGZbdVtyXV0pKS5tb2RpZnlJdGVtKFwidmlzaWJsZVwiLCExKSxuLmV4dGVuZEZsYXQoaCxzLmdldFVwZGF0ZU9iaigpKTtyZXR1cm4gaS5jYWxsKFwidXBkYXRlXCIsdCx7fSxoKX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vcmVnaXN0cnlcIjo4Mjl9XSw1NjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uL2NvbG9yXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXthKFwib3BhY2l0eVwiKTt2YXIgbz1hKFwiYmdjb2xvclwiKSxzPWEoXCJib3JkZXJjb2xvclwiKSxsPWkub3BhY2l0eShzKTthKFwiYm9yZGVycGFkXCIpO3ZhciBjPWEoXCJib3JkZXJ3aWR0aFwiKSx1PWEoXCJzaG93YXJyb3dcIik7aWYoYShcInRleHRcIix1P1wiIFwiOnIuX2RmbHRUaXRsZS5hbm5vdGF0aW9uKSxhKFwidGV4dGFuZ2xlXCIpLG4uY29lcmNlRm9udChhLFwiZm9udFwiLHIuZm9udCksYShcIndpZHRoXCIpLGEoXCJhbGlnblwiKSxhKFwiaGVpZ2h0XCIpJiZhKFwidmFsaWduXCIpLHUpe3ZhciBoLGYscD1hKFwiYXJyb3dzaWRlXCIpOy0xIT09cC5pbmRleE9mKFwiZW5kXCIpJiYoaD1hKFwiYXJyb3doZWFkXCIpLGY9YShcImFycm93c2l6ZVwiKSksLTEhPT1wLmluZGV4T2YoXCJzdGFydFwiKSYmKGEoXCJzdGFydGFycm93aGVhZFwiLGgpLGEoXCJzdGFydGFycm93c2l6ZVwiLGYpKSxhKFwiYXJyb3djb2xvclwiLGw/ZS5ib3JkZXJjb2xvcjppLmRlZmF1bHRMaW5lKSxhKFwiYXJyb3d3aWR0aFwiLDIqKGwmJmN8fDEpKSxhKFwic3RhbmRvZmZcIiksYShcInN0YXJ0c3RhbmRvZmZcIil9dmFyIGQ9YShcImhvdmVydGV4dFwiKSxnPXIuaG92ZXJsYWJlbHx8e307aWYoZCl7dmFyIHY9YShcImhvdmVybGFiZWwuYmdjb2xvclwiLGcuYmdjb2xvcnx8KGkub3BhY2l0eShvKT9pLnJnYihvKTppLmRlZmF1bHRMaW5lKSksbT1hKFwiaG92ZXJsYWJlbC5ib3JkZXJjb2xvclwiLGcuYm9yZGVyY29sb3J8fGkuY29udHJhc3QodikpO24uY29lcmNlRm9udChhLFwiaG92ZXJsYWJlbC5mb250XCIse2ZhbWlseTpnLmZvbnQuZmFtaWx5LHNpemU6Zy5mb250LnNpemUsY29sb3I6Zy5mb250LmNvbG9yfHxtfSl9YShcImNhcHR1cmVldmVudHNcIiwhIWQpfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vY29sb3JcIjo1Nzh9XSw1NjU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vLi4vbGliL3RvX2xvZ19yYW5nZVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7ZT1lfHx7fTt2YXIgbz1cImxvZ1wiPT09ciYmXCJsaW5lYXJcIj09PWUudHlwZSxzPVwibGluZWFyXCI9PT1yJiZcImxvZ1wiPT09ZS50eXBlO2lmKG98fHMpZm9yKHZhciBsLGMsdT10Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zLGg9ZS5faWQuY2hhckF0KDApLGY9MDtmPHUubGVuZ3RoO2YrKylsPXVbZl0sYz1cImFubm90YXRpb25zW1wiK2YrXCJdLlwiLGxbaCtcInJlZlwiXT09PWUuX2lkJiZwKGgpLGxbXCJhXCIraCtcInJlZlwiXT09PWUuX2lkJiZwKFwiYVwiK2gpO2Z1bmN0aW9uIHAodCl7dmFyIHI9bFt0XSxzPW51bGw7cz1vP2kocixlLnJhbmdlKTpNYXRoLnBvdygxMCxyKSxuKHMpfHwocz1udWxsKSxhKGMrdCxzKX19fSx7XCIuLi8uLi9saWIvdG9fbG9nX3JhbmdlXCI6NzI3LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw1NjY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0c1wiKSxvPXQoXCIuL2NvbW1vbl9kZWZhdWx0c1wiKSxzPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZnVuY3Rpb24gbCh0LGUscil7ZnVuY3Rpb24gYShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfXZhciBsPWEoXCJ2aXNpYmxlXCIpLGM9YShcImNsaWNrdG9zaG93XCIpO2lmKGx8fGMpe28odCxlLHIsYSk7Zm9yKHZhciB1PWUuc2hvd2Fycm93LGg9W1wieFwiLFwieVwiXSxmPVstMTAsLTMwXSxwPXtfZnVsbExheW91dDpyfSxkPTA7ZDwyO2QrKyl7dmFyIGc9aFtkXSx2PWkuY29lcmNlUmVmKHQsZSxwLGcsXCJcIixcInBhcGVyXCIpO2lmKFwicGFwZXJcIiE9PXYpaS5nZXRGcm9tSWQocCx2KS5fYW5uSW5kaWNlcy5wdXNoKGUuX2luZGV4KTtpZihpLmNvZXJjZVBvc2l0aW9uKGUscCxhLHYsZywuNSksdSl7dmFyIG09XCJhXCIrZyx5PWkuY29lcmNlUmVmKHQsZSxwLG0sXCJwaXhlbFwiKTtcInBpeGVsXCIhPT15JiZ5IT09diYmKHk9ZVttXT1cInBpeGVsXCIpO3ZhciB4PVwicGl4ZWxcIj09PXk/ZltkXTouNDtpLmNvZXJjZVBvc2l0aW9uKGUscCxhLHksbSx4KX1hKGcrXCJhbmNob3JcIiksYShnK1wic2hpZnRcIil9aWYobi5ub25lT3JBbGwodCxlLFtcInhcIixcInlcIl0pLHUmJm4ubm9uZU9yQWxsKHQsZSxbXCJheFwiLFwiYXlcIl0pLGMpe3ZhciBiPWEoXCJ4Y2xpY2tcIiksXz1hKFwieWNsaWNrXCIpO2UuX3hjbGljaz12b2lkIDA9PT1iP2UueDppLmNsZWFuUG9zaXRpb24oYixwLGUueHJlZiksZS5feWNsaWNrPXZvaWQgMD09PV8/ZS55OmkuY2xlYW5Qb3NpdGlvbihfLHAsZS55cmVmKX19fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2EodCxlLHtuYW1lOlwiYW5ub3RhdGlvbnNcIixoYW5kbGVJdGVtRGVmYXVsdHM6bH0pfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCI6NzQ1LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuL2F0dHJpYnV0ZXNcIjo1NjEsXCIuL2NvbW1vbl9kZWZhdWx0c1wiOjU2NH1dLDU2NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxhPXQoXCIuLi8uLi9wbG90cy9wbG90c1wiKSxvPXQoXCIuLi8uLi9saWJcIikscz10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksbD10KFwiLi4vY29sb3JcIiksYz10KFwiLi4vZHJhd2luZ1wiKSx1PXQoXCIuLi9meFwiKSxoPXQoXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIiksZj10KFwiLi4vLi4vbGliL3NldGN1cnNvclwiKSxwPXQoXCIuLi9kcmFnZWxlbWVudFwiKSxkPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLmFycmF5RWRpdG9yLGc9dChcIi4vZHJhd19hcnJvd19oZWFkXCIpO2Z1bmN0aW9uIHYodCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zW2VdfHx7fSxuPXMuZ2V0RnJvbUlkKHQsci54cmVmKSxpPXMuZ2V0RnJvbUlkKHQsci55cmVmKTtuJiZuLnNldFNjYWxlKCksaSYmaS5zZXRTY2FsZSgpLG0odCxyLGUsITEsbixpKX1mdW5jdGlvbiBtKHQsZSxyLGEscyx2KXt2YXIgbSx5LHg9dC5fZnVsbExheW91dCxiPXQuX2Z1bGxMYXlvdXQuX3NpemUsXz10Ll9jb250ZXh0LmVkaXRzO2E/KG09XCJhbm5vdGF0aW9uLVwiK2EseT1hK1wiLmFubm90YXRpb25zXCIpOihtPVwiYW5ub3RhdGlvblwiLHk9XCJhbm5vdGF0aW9uc1wiKTt2YXIgdz1kKHQubGF5b3V0LHksZSksaz13Lm1vZGlmeUJhc2UsQT13Lm1vZGlmeUl0ZW0sVD13LmdldFVwZGF0ZU9iajt4Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKFwiLlwiK20rJ1tkYXRhLWluZGV4PVwiJytyKydcIl0nKS5yZW1vdmUoKTt2YXIgTT1cImNsaXBcIit4Ll91aWQrXCJfYW5uXCIrcjtpZihlLl9pbnB1dCYmITEhPT1lLnZpc2libGUpe3ZhciBTPXt4Ont9LHk6e319LEU9K2UudGV4dGFuZ2xlfHwwLEM9eC5faW5mb2xheWVyLmFwcGVuZChcImdcIikuY2xhc3NlZChtLCEwKS5hdHRyKFwiZGF0YS1pbmRleFwiLFN0cmluZyhyKSkuc3R5bGUoXCJvcGFjaXR5XCIsZS5vcGFjaXR5KSxMPUMuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiYW5ub3RhdGlvbi10ZXh0LWdcIiwhMCksej1fW2Uuc2hvd2Fycm93P1wiYW5ub3RhdGlvblRhaWxcIjpcImFubm90YXRpb25Qb3NpdGlvblwiXSxPPWUuY2FwdHVyZWV2ZW50c3x8Xy5hbm5vdGF0aW9uVGV4dHx8eixJPUwuYXBwZW5kKFwiZ1wiKS5zdHlsZShcInBvaW50ZXItZXZlbnRzXCIsTz9cImFsbFwiOm51bGwpLmNhbGwoZixcInBvaW50ZXJcIikub24oXCJjbGlja1wiLGZ1bmN0aW9uKCl7dC5fZHJhZ2dpbmc9ITE7dmFyIGk9e2luZGV4OnIsYW5ub3RhdGlvbjplLl9pbnB1dCxmdWxsQW5ub3RhdGlvbjplLGV2ZW50Om4uZXZlbnR9O2EmJihpLnN1YnBsb3RJZD1hKSx0LmVtaXQoXCJwbG90bHlfY2xpY2thbm5vdGF0aW9uXCIsaSl9KTtlLmhvdmVydGV4dCYmSS5vbihcIm1vdXNlb3ZlclwiLGZ1bmN0aW9uKCl7dmFyIHI9ZS5ob3ZlcmxhYmVsLG49ci5mb250LGk9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dS5sb25lSG92ZXIoe3gwOmkubGVmdC1hLmxlZnQseDE6aS5yaWdodC1hLmxlZnQseTooaS50b3AraS5ib3R0b20pLzItYS50b3AsdGV4dDplLmhvdmVydGV4dCxjb2xvcjpyLmJnY29sb3IsYm9yZGVyQ29sb3I6ci5ib3JkZXJjb2xvcixmb250RmFtaWx5Om4uZmFtaWx5LGZvbnRTaXplOm4uc2l6ZSxmb250Q29sb3I6bi5jb2xvcn0se2NvbnRhaW5lcjp4Ll9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjp4Ll9wYXBlci5ub2RlKCksZ2Q6dH0pfSkub24oXCJtb3VzZW91dFwiLGZ1bmN0aW9uKCl7dS5sb25lVW5ob3Zlcih4Ll9ob3ZlcmxheWVyLm5vZGUoKSl9KTt2YXIgRD1lLmJvcmRlcndpZHRoLFA9ZS5ib3JkZXJwYWQsUj1EK1AsRj1JLmFwcGVuZChcInJlY3RcIikuYXR0cihcImNsYXNzXCIsXCJiZ1wiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLEQrXCJweFwiKS5jYWxsKGwuc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwobC5maWxsLGUuYmdjb2xvciksQj1lLndpZHRofHxlLmhlaWdodCxOPXguX3RvcGNsaXBzLnNlbGVjdEFsbChcIiNcIitNKS5kYXRhKEI/WzBdOltdKTtOLmVudGVyKCkuYXBwZW5kKFwiY2xpcFBhdGhcIikuY2xhc3NlZChcImFubmNsaXBcIiwhMCkuYXR0cihcImlkXCIsTSkuYXBwZW5kKFwicmVjdFwiKSxOLmV4aXQoKS5yZW1vdmUoKTt2YXIgaj1lLmZvbnQsVj14Lm1ldGE/by50ZW1wbGF0ZVN0cmluZyhlLnRleHQse21ldGE6eC5tZXRhfSk6ZS50ZXh0LFU9SS5hcHBlbmQoXCJ0ZXh0XCIpLmNsYXNzZWQoXCJhbm5vdGF0aW9uLXRleHRcIiwhMCkudGV4dChWKTtfLmFubm90YXRpb25UZXh0P1UuY2FsbChoLm1ha2VFZGl0YWJsZSx7ZGVsZWdhdGU6SSxnZDp0fSkuY2FsbChxKS5vbihcImVkaXRcIixmdW5jdGlvbihyKXtlLnRleHQ9cix0aGlzLmNhbGwocSksQShcInRleHRcIixyKSxzJiZzLmF1dG9yYW5nZSYmayhzLl9uYW1lK1wiLmF1dG9yYW5nZVwiLCEwKSx2JiZ2LmF1dG9yYW5nZSYmayh2Ll9uYW1lK1wiLmF1dG9yYW5nZVwiLCEwKSxpLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix0LFQoKSl9KTpVLmNhbGwocSl9ZWxzZSBuLnNlbGVjdEFsbChcIiNcIitNKS5yZW1vdmUoKTtmdW5jdGlvbiBxKHIpe3JldHVybiByLmNhbGwoYy5mb250LGopLmF0dHIoe1widGV4dC1hbmNob3JcIjp7bGVmdDpcInN0YXJ0XCIscmlnaHQ6XCJlbmRcIn1bZS5hbGlnbl18fFwibWlkZGxlXCJ9KSxoLmNvbnZlcnRUb1RzcGFucyhyLHQsSCkscn1mdW5jdGlvbiBIKCl7dmFyIHI9VS5zZWxlY3RBbGwoXCJhXCIpOzE9PT1yLnNpemUoKSYmci50ZXh0KCk9PT1VLnRleHQoKSYmSS5pbnNlcnQoXCJhXCIsXCI6Zmlyc3QtY2hpbGRcIikuYXR0cih7XCJ4bGluazp4bGluazpocmVmXCI6ci5hdHRyKFwieGxpbms6aHJlZlwiKSxcInhsaW5rOnhsaW5rOnNob3dcIjpyLmF0dHIoXCJ4bGluazpzaG93XCIpfSkuc3R5bGUoe2N1cnNvcjpcInBvaW50ZXJcIn0pLm5vZGUoKS5hcHBlbmRDaGlsZChGLm5vZGUoKSk7dmFyIG49SS5zZWxlY3QoXCIuYW5ub3RhdGlvbi10ZXh0LW1hdGgtZ3JvdXBcIiksdT0hbi5lbXB0eSgpLGQ9Yy5iQm94KCh1P246VSkubm9kZSgpKSxtPWQud2lkdGgseT1kLmhlaWdodCx3PWUud2lkdGh8fG0sTz1lLmhlaWdodHx8eSxQPU1hdGgucm91bmQodysyKlIpLGo9TWF0aC5yb3VuZChPKzIqUik7ZnVuY3Rpb24gVih0LGUpe3JldHVyblwiYXV0b1wiPT09ZSYmKGU9dDwxLzM/XCJsZWZ0XCI6dD4yLzM/XCJyaWdodFwiOlwiY2VudGVyXCIpLHtjZW50ZXI6MCxtaWRkbGU6MCxsZWZ0Oi41LGJvdHRvbTotLjUscmlnaHQ6LS41LHRvcDouNX1bZV19Zm9yKHZhciBxPSExLEg9W1wieFwiLFwieVwiXSxHPTA7RzxILmxlbmd0aDtHKyspe3ZhciBZLFcsWCxaLCQsSj1IW0ddLEs9ZVtKK1wicmVmXCJdfHxKLFE9ZVtcImFcIitKK1wicmVmXCJdLHR0PXt4OnMseTp2fVtKXSxldD0oRSsoXCJ4XCI9PT1KPzA6LTkwKSkqTWF0aC5QSS8xODAscnQ9UCpNYXRoLmNvcyhldCksbnQ9aipNYXRoLnNpbihldCksaXQ9TWF0aC5hYnMocnQpK01hdGguYWJzKG50KSxhdD1lW0orXCJhbmNob3JcIl0sb3Q9ZVtKK1wic2hpZnRcIl0qKFwieFwiPT09Sj8xOi0xKSxzdD1TW0pdO2lmKHR0KXt2YXIgbHQ9dHQucjJmcmFjdGlvbihlW0pdKTsobHQ8MHx8bHQ+MSkmJihRPT09Sz8oKGx0PXR0LnIyZnJhY3Rpb24oZVtcImFcIitKXSkpPDB8fGx0PjEpJiYocT0hMCk6cT0hMCksWT10dC5fb2Zmc2V0K3R0LnIycChlW0pdKSxaPS41fWVsc2VcInhcIj09PUo/KFg9ZVtKXSxZPWIubCtiLncqWCk6KFg9MS1lW0pdLFk9Yi50K2IuaCpYKSxaPWUuc2hvd2Fycm93Py41Olg7aWYoZS5zaG93YXJyb3cpe3N0LmhlYWQ9WTt2YXIgY3Q9ZVtcImFcIitKXTskPXJ0KlYoLjUsZS54YW5jaG9yKS1udCpWKC41LGUueWFuY2hvciksUT09PUs/KHN0LnRhaWw9dHQuX29mZnNldCt0dC5yMnAoY3QpLFc9JCk6KHN0LnRhaWw9WStjdCxXPSQrY3QpLHN0LnRleHQ9c3QudGFpbCskO3ZhciB1dD14W1wieFwiPT09Sj9cIndpZHRoXCI6XCJoZWlnaHRcIl07aWYoXCJwYXBlclwiPT09SyYmKHN0LmhlYWQ9by5jb25zdHJhaW4oc3QuaGVhZCwxLHV0LTEpKSxcInBpeGVsXCI9PT1RKXt2YXIgaHQ9LU1hdGgubWF4KHN0LnRhaWwtMyxzdC50ZXh0KSxmdD1NYXRoLm1pbihzdC50YWlsKzMsc3QudGV4dCktdXQ7aHQ+MD8oc3QudGFpbCs9aHQsc3QudGV4dCs9aHQpOmZ0PjAmJihzdC50YWlsLT1mdCxzdC50ZXh0LT1mdCl9c3QudGFpbCs9b3Qsc3QuaGVhZCs9b3R9ZWxzZSBXPSQ9aXQqVihaLGF0KSxzdC50ZXh0PVkrJDtzdC50ZXh0Kz1vdCwkKz1vdCxXKz1vdCxlW1wiX1wiK0orXCJwYWRwbHVzXCJdPWl0LzIrVyxlW1wiX1wiK0orXCJwYWRtaW51c1wiXT1pdC8yLVcsZVtcIl9cIitKK1wic2l6ZVwiXT1pdCxlW1wiX1wiK0orXCJzaGlmdFwiXT0kfWlmKHQuX2RyYWdnaW5nfHwhcSl7dmFyIHB0PTAsZHQ9MDtpZihcImxlZnRcIiE9PWUuYWxpZ24mJihwdD0ody1tKSooXCJjZW50ZXJcIj09PWUuYWxpZ24/LjU6MSkpLFwidG9wXCIhPT1lLnZhbGlnbiYmKGR0PShPLXkpKihcIm1pZGRsZVwiPT09ZS52YWxpZ24/LjU6MSkpLHUpbi5zZWxlY3QoXCJzdmdcIikuYXR0cih7eDpSK3B0LTEseTpSK2R0fSkuY2FsbChjLnNldENsaXBVcmwsQj9NOm51bGwsdCk7ZWxzZXt2YXIgZ3Q9UitkdC1kLnRvcCx2dD1SK3B0LWQubGVmdDtVLmNhbGwoaC5wb3NpdGlvblRleHQsdnQsZ3QpLmNhbGwoYy5zZXRDbGlwVXJsLEI/TTpudWxsLHQpfU4uc2VsZWN0KFwicmVjdFwiKS5jYWxsKGMuc2V0UmVjdCxSLFIsdyxPKSxGLmNhbGwoYy5zZXRSZWN0LEQvMixELzIsUC1ELGotRCksSS5jYWxsKGMuc2V0VHJhbnNsYXRlLE1hdGgucm91bmQoUy54LnRleHQtUC8yKSxNYXRoLnJvdW5kKFMueS50ZXh0LWovMikpLEwuYXR0cih7dHJhbnNmb3JtOlwicm90YXRlKFwiK0UrXCIsXCIrUy54LnRleHQrXCIsXCIrUy55LnRleHQrXCIpXCJ9KTt2YXIgbXQseXQ9ZnVuY3Rpb24ocixuKXtDLnNlbGVjdEFsbChcIi5hbm5vdGF0aW9uLWFycm93LWdcIikucmVtb3ZlKCk7dmFyIHU9Uy54LmhlYWQsaD1TLnkuaGVhZCxmPVMueC50YWlsK3IsZD1TLnkudGFpbCtuLG09Uy54LnRleHQrcix5PVMueS50ZXh0K24seD1vLnJvdGF0aW9uWFlNYXRyaXgoRSxtLHkpLHc9by5hcHBseTJEVHJhbnNmb3JtKHgpLE09by5hcHBseTJEVHJhbnNmb3JtMih4KSx6PStGLmF0dHIoXCJ3aWR0aFwiKSxPPStGLmF0dHIoXCJoZWlnaHRcIiksRD1tLS41KnosUD1EK3osUj15LS41Kk8sQj1SK08sTj1bW0QsUixELEJdLFtELEIsUCxCXSxbUCxCLFAsUl0sW1AsUixELFJdXS5tYXAoTSk7aWYoIU4ucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHReISFvLnNlZ21lbnRzSW50ZXJzZWN0KHUsaCx1KzFlNixoKzFlNixlWzBdLGVbMV0sZVsyXSxlWzNdKX0sITEpKXtOLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9by5zZWdtZW50c0ludGVyc2VjdChmLGQsdSxoLHRbMF0sdFsxXSx0WzJdLHRbM10pO2UmJihmPWUueCxkPWUueSl9KTt2YXIgaj1lLmFycm93d2lkdGgsVj1lLmFycm93Y29sb3IsVT1lLmFycm93c2lkZSxxPUMuYXBwZW5kKFwiZ1wiKS5zdHlsZSh7b3BhY2l0eTpsLm9wYWNpdHkoVil9KS5jbGFzc2VkKFwiYW5ub3RhdGlvbi1hcnJvdy1nXCIsITApLEg9cS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsXCJNXCIrZitcIixcIitkK1wiTFwiK3UrXCIsXCIraCkuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixqK1wicHhcIikuY2FsbChsLnN0cm9rZSxsLnJnYihWKSk7aWYoZyhILFUsZSksXy5hbm5vdGF0aW9uUG9zaXRpb24mJkgubm9kZSgpLnBhcmVudE5vZGUmJiFhKXt2YXIgRz11LFk9aDtpZihlLnN0YW5kb2ZmKXt2YXIgVz1NYXRoLnNxcnQoTWF0aC5wb3codS1mLDIpK01hdGgucG93KGgtZCwyKSk7Rys9ZS5zdGFuZG9mZiooZi11KS9XLFkrPWUuc3RhbmRvZmYqKGQtaCkvV312YXIgWCxaLCQ9cS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoXCJhbm5vdGF0aW9uLWFycm93XCIsITApLmNsYXNzZWQoXCJhbm5kcmFnXCIsITApLmNsYXNzZWQoXCJjdXJzb3ItbW92ZVwiLCEwKS5hdHRyKHtkOlwiTTMsM0gtM1YtM0gzWk0wLDBMXCIrKGYtRykrXCIsXCIrKGQtWSksdHJhbnNmb3JtOlwidHJhbnNsYXRlKFwiK0crXCIsXCIrWStcIilcIn0pLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsais2K1wicHhcIikuY2FsbChsLnN0cm9rZSxcInJnYmEoMCwwLDAsMClcIikuY2FsbChsLmZpbGwsXCJyZ2JhKDAsMCwwLDApXCIpO3AuaW5pdCh7ZWxlbWVudDokLm5vZGUoKSxnZDp0LHByZXBGbjpmdW5jdGlvbigpe3ZhciB0PWMuZ2V0VHJhbnNsYXRlKEkpO1g9dC54LFo9dC55LHMmJnMuYXV0b3JhbmdlJiZrKHMuX25hbWUrXCIuYXV0b3JhbmdlXCIsITApLHYmJnYuYXV0b3JhbmdlJiZrKHYuX25hbWUrXCIuYXV0b3JhbmdlXCIsITApfSxtb3ZlRm46ZnVuY3Rpb24odCxyKXt2YXIgbj13KFgsWiksaT1uWzBdK3QsYT1uWzFdK3I7SS5jYWxsKGMuc2V0VHJhbnNsYXRlLGksYSksQShcInhcIixzP3MucDJyKHMucjJwKGUueCkrdCk6ZS54K3QvYi53KSxBKFwieVwiLHY/di5wMnIodi5yMnAoZS55KStyKTplLnktci9iLmgpLGUuYXhyZWY9PT1lLnhyZWYmJkEoXCJheFwiLHMucDJyKHMucjJwKGUuYXgpK3QpKSxlLmF5cmVmPT09ZS55cmVmJiZBKFwiYXlcIix2LnAycih2LnIycChlLmF5KStyKSkscS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrdCtcIixcIityK1wiKVwiKSxMLmF0dHIoe3RyYW5zZm9ybTpcInJvdGF0ZShcIitFK1wiLFwiK2krXCIsXCIrYStcIilcIn0pfSxkb25lRm46ZnVuY3Rpb24oKXtpLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix0LFQoKSk7dmFyIGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5qcy1ub3Rlcy1ib3gtcGFuZWxcIik7ZSYmZS5yZWRyYXcoZS5zZWxlY3RlZE9iail9fSl9fX07aWYoZS5zaG93YXJyb3cmJnl0KDAsMCkseilwLmluaXQoe2VsZW1lbnQ6SS5ub2RlKCksZ2Q6dCxwcmVwRm46ZnVuY3Rpb24oKXttdD1MLmF0dHIoXCJ0cmFuc2Zvcm1cIil9LG1vdmVGbjpmdW5jdGlvbih0LHIpe3ZhciBuPVwicG9pbnRlclwiO2lmKGUuc2hvd2Fycm93KWUuYXhyZWY9PT1lLnhyZWY/QShcImF4XCIscy5wMnIocy5yMnAoZS5heCkrdCkpOkEoXCJheFwiLGUuYXgrdCksZS5heXJlZj09PWUueXJlZj9BKFwiYXlcIix2LnAycih2LnIycChlLmF5KStyKSk6QShcImF5XCIsZS5heStyKSx5dCh0LHIpO2Vsc2V7aWYoYSlyZXR1cm47dmFyIGksbztpZihzKWk9cy5wMnIocy5yMnAoZS54KSt0KTtlbHNle3ZhciBsPWUuX3hzaXplL2IudyxjPWUueCsoZS5feHNoaWZ0LWUueHNoaWZ0KS9iLnctbC8yO2k9cC5hbGlnbihjK3QvYi53LGwsMCwxLGUueGFuY2hvcil9aWYodilvPXYucDJyKHYucjJwKGUueSkrcik7ZWxzZXt2YXIgdT1lLl95c2l6ZS9iLmgsaD1lLnktKGUuX3lzaGlmdCtlLnlzaGlmdCkvYi5oLXUvMjtvPXAuYWxpZ24oaC1yL2IuaCx1LDAsMSxlLnlhbmNob3IpfUEoXCJ4XCIsaSksQShcInlcIixvKSxzJiZ2fHwobj1wLmdldEN1cnNvcihzPy41Omksdj8uNTpvLGUueGFuY2hvcixlLnlhbmNob3IpKX1MLmF0dHIoe3RyYW5zZm9ybTpcInRyYW5zbGF0ZShcIit0K1wiLFwiK3IrXCIpXCIrbXR9KSxmKEksbil9LGRvbmVGbjpmdW5jdGlvbigpe2YoSSksaS5jYWxsKFwiX2d1aVJlbGF5b3V0XCIsdCxUKCkpO3ZhciBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuanMtbm90ZXMtYm94LXBhbmVsXCIpO2UmJmUucmVkcmF3KGUuc2VsZWN0ZWRPYmopfX0pfWVsc2UgSS5yZW1vdmUoKX19ZS5leHBvcnRzPXtkcmF3OmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7ZS5faW5mb2xheWVyLnNlbGVjdEFsbChcIi5hbm5vdGF0aW9uXCIpLnJlbW92ZSgpO2Zvcih2YXIgcj0wO3I8ZS5hbm5vdGF0aW9ucy5sZW5ndGg7cisrKWUuYW5ub3RhdGlvbnNbcl0udmlzaWJsZSYmdih0LHIpO3JldHVybiBhLnByZXZpb3VzUHJvbWlzZXModCl9LGRyYXdPbmU6dixkcmF3UmF3Om19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvc2V0Y3Vyc29yXCI6NzIxLFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCI6NzI1LFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vLi4vcGxvdHMvcGxvdHNcIjo4MTAsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL2NvbG9yXCI6NTc4LFwiLi4vZHJhZ2VsZW1lbnRcIjo1OTYsXCIuLi9kcmF3aW5nXCI6NTk5LFwiLi4vZnhcIjo2MTcsXCIuL2RyYXdfYXJyb3dfaGVhZFwiOjU2OCxkMzoxNTV9XSw1Njg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vY29sb3JcIiksYT10KFwiLi9hcnJvd19wYXRoc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvLHMsbCxjLHU9dC5ub2RlKCksaD1hW3IuYXJyb3doZWFkfHwwXSxmPWFbci5zdGFydGFycm93aGVhZHx8MF0scD0oci5hcnJvd3dpZHRofHwxKSooci5hcnJvd3NpemV8fDEpLGQ9KHIuYXJyb3d3aWR0aHx8MSkqKHIuc3RhcnRhcnJvd3NpemV8fDEpLGc9ZS5pbmRleE9mKFwic3RhcnRcIik+PTAsdj1lLmluZGV4T2YoXCJlbmRcIik+PTAsbT1oLmJhY2tvZmYqcCtyLnN0YW5kb2ZmLHk9Zi5iYWNrb2ZmKmQrci5zdGFydHN0YW5kb2ZmO2lmKFwibGluZVwiPT09dS5ub2RlTmFtZSl7bz17eDordC5hdHRyKFwieDFcIikseTordC5hdHRyKFwieTFcIil9LHM9e3g6K3QuYXR0cihcIngyXCIpLHk6K3QuYXR0cihcInkyXCIpfTt2YXIgeD1vLngtcy54LGI9by55LXMueTtpZihjPShsPU1hdGguYXRhbjIoYix4KSkrTWF0aC5QSSxtJiZ5JiZtK3k+TWF0aC5zcXJ0KHgqeCtiKmIpKXJldHVybiB2b2lkIHooKTtpZihtKXtpZihtKm0+eCp4K2IqYilyZXR1cm4gdm9pZCB6KCk7dmFyIF89bSpNYXRoLmNvcyhsKSx3PW0qTWF0aC5zaW4obCk7cy54Kz1fLHMueSs9dyx0LmF0dHIoe3gyOnMueCx5MjpzLnl9KX1pZih5KXtpZih5Knk+eCp4K2IqYilyZXR1cm4gdm9pZCB6KCk7dmFyIGs9eSpNYXRoLmNvcyhsKSxBPXkqTWF0aC5zaW4obCk7by54LT1rLG8ueS09QSx0LmF0dHIoe3gxOm8ueCx5MTpvLnl9KX19ZWxzZSBpZihcInBhdGhcIj09PXUubm9kZU5hbWUpe3ZhciBUPXUuZ2V0VG90YWxMZW5ndGgoKSxNPVwiXCI7aWYoVDxtK3kpcmV0dXJuIHZvaWQgeigpO3ZhciBTPXUuZ2V0UG9pbnRBdExlbmd0aCgwKSxFPXUuZ2V0UG9pbnRBdExlbmd0aCguMSk7bD1NYXRoLmF0YW4yKFMueS1FLnksUy54LUUueCksbz11LmdldFBvaW50QXRMZW5ndGgoTWF0aC5taW4oeSxUKSksTT1cIjBweCxcIit5K1wicHgsXCI7dmFyIEM9dS5nZXRQb2ludEF0TGVuZ3RoKFQpLEw9dS5nZXRQb2ludEF0TGVuZ3RoKFQtLjEpO2M9TWF0aC5hdGFuMihDLnktTC55LEMueC1MLngpLHM9dS5nZXRQb2ludEF0TGVuZ3RoKE1hdGgubWF4KDAsVC1tKSksTSs9VC0oTT95K206bSkrXCJweCxcIitUK1wicHhcIix0LnN0eWxlKFwic3Ryb2tlLWRhc2hhcnJheVwiLE0pfWZ1bmN0aW9uIHooKXt0LnN0eWxlKFwic3Ryb2tlLWRhc2hhcnJheVwiLFwiMHB4LDEwMHB4XCIpfWZ1bmN0aW9uIE8oZSxhLG8scyl7ZS5wYXRoJiYoZS5ub1JvdGF0ZSYmKG89MCksbi5zZWxlY3QodS5wYXJlbnROb2RlKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoe2NsYXNzOnQuYXR0cihcImNsYXNzXCIpLGQ6ZS5wYXRoLHRyYW5zZm9ybTpcInRyYW5zbGF0ZShcIithLngrXCIsXCIrYS55K1wiKVwiKyhvP1wicm90YXRlKFwiKzE4MCpvL01hdGguUEkrXCIpXCI6XCJcIikrXCJzY2FsZShcIitzK1wiKVwifSkuc3R5bGUoe2ZpbGw6aS5yZ2Ioci5hcnJvd2NvbG9yKSxcInN0cm9rZS13aWR0aFwiOjB9KSl9ZyYmTyhmLG8sbCxkKSx2JiZPKGgscyxjLHApfX0se1wiLi4vY29sb3JcIjo1NzgsXCIuL2Fycm93X3BhdGhzXCI6NTYwLGQzOjE1NX1dLDU2OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2RyYXdcIiksaT10KFwiLi9jbGlja1wiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6XCJjb21wb25lbnRcIixuYW1lOlwiYW5ub3RhdGlvbnNcIixsYXlvdXRBdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIiksaW5jbHVkZUJhc2VQbG90OnQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzXCIpKFwiYW5ub3RhdGlvbnNcIiksY2FsY0F1dG9yYW5nZTp0KFwiLi9jYWxjX2F1dG9yYW5nZVwiKSxkcmF3Om4uZHJhdyxkcmF3T25lOm4uZHJhd09uZSxkcmF3UmF3Om4uZHJhd1JhdyxoYXNDbGlja1RvU2hvdzppLmhhc0NsaWNrVG9TaG93LG9uQ2xpY2s6aS5vbkNsaWNrLGNvbnZlcnRDb29yZHM6dChcIi4vY29udmVydF9jb29yZHNcIil9fSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzXCI6NzU5LFwiLi9hdHRyaWJ1dGVzXCI6NTYxLFwiLi9jYWxjX2F1dG9yYW5nZVwiOjU2MixcIi4vY2xpY2tcIjo1NjMsXCIuL2NvbnZlcnRfY29vcmRzXCI6NTY1LFwiLi9kZWZhdWx0c1wiOjU2NixcIi4vZHJhd1wiOjU2N31dLDU3MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGwsYT10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKS50ZW1wbGF0ZWRBcnJheTtlLmV4cG9ydHM9aShhKFwiYW5ub3RhdGlvblwiLHt2aXNpYmxlOm4udmlzaWJsZSx4Ont2YWxUeXBlOlwiYW55XCJ9LHk6e3ZhbFR5cGU6XCJhbnlcIn0sejp7dmFsVHlwZTpcImFueVwifSxheDp7dmFsVHlwZTpcIm51bWJlclwifSxheTp7dmFsVHlwZTpcIm51bWJlclwifSx4YW5jaG9yOm4ueGFuY2hvcix4c2hpZnQ6bi54c2hpZnQseWFuY2hvcjpuLnlhbmNob3IseXNoaWZ0Om4ueXNoaWZ0LHRleHQ6bi50ZXh0LHRleHRhbmdsZTpuLnRleHRhbmdsZSxmb250Om4uZm9udCx3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCxvcGFjaXR5Om4ub3BhY2l0eSxhbGlnbjpuLmFsaWduLHZhbGlnbjpuLnZhbGlnbixiZ2NvbG9yOm4uYmdjb2xvcixib3JkZXJjb2xvcjpuLmJvcmRlcmNvbG9yLGJvcmRlcnBhZDpuLmJvcmRlcnBhZCxib3JkZXJ3aWR0aDpuLmJvcmRlcndpZHRoLHNob3dhcnJvdzpuLnNob3dhcnJvdyxhcnJvd2NvbG9yOm4uYXJyb3djb2xvcixhcnJvd2hlYWQ6bi5hcnJvd2hlYWQsc3RhcnRhcnJvd2hlYWQ6bi5zdGFydGFycm93aGVhZCxhcnJvd3NpZGU6bi5hcnJvd3NpZGUsYXJyb3dzaXplOm4uYXJyb3dzaXplLHN0YXJ0YXJyb3dzaXplOm4uc3RhcnRhcnJvd3NpemUsYXJyb3d3aWR0aDpuLmFycm93d2lkdGgsc3RhbmRvZmY6bi5zdGFuZG9mZixzdGFydHN0YW5kb2ZmOm4uc3RhcnRzdGFuZG9mZixob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJsYWJlbDpuLmhvdmVybGFiZWwsY2FwdHVyZWV2ZW50czpuLmNhcHR1cmVldmVudHN9KSxcImNhbGNcIixcImZyb20tcm9vdFwiKX0se1wiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzXCI6NTYxfV0sNTcxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKTtmdW5jdGlvbiBhKHQsZSl7dmFyIHI9ZS5mdWxsU2NlbmVMYXlvdXQuZG9tYWluLGE9ZS5mdWxsTGF5b3V0Ll9zaXplLG89e3BkYXRhOm51bGwsdHlwZTpcImxpbmVhclwiLGF1dG9yYW5nZTohMSxyYW5nZTpbLTEvMCwxLzBdfTt0Ll94YT17fSxuLmV4dGVuZEZsYXQodC5feGEsbyksaS5zZXRDb252ZXJ0KHQuX3hhKSx0Ll94YS5fb2Zmc2V0PWEubCtyLnhbMF0qYS53LHQuX3hhLmwycD1mdW5jdGlvbigpe3JldHVybi41KigxK3QuX3BkYXRhWzBdL3QuX3BkYXRhWzNdKSphLncqKHIueFsxXS1yLnhbMF0pfSx0Ll95YT17fSxuLmV4dGVuZEZsYXQodC5feWEsbyksaS5zZXRDb252ZXJ0KHQuX3lhKSx0Ll95YS5fb2Zmc2V0PWEudCsoMS1yLnlbMV0pKmEuaCx0Ll95YS5sMnA9ZnVuY3Rpb24oKXtyZXR1cm4uNSooMS10Ll9wZGF0YVsxXS90Ll9wZGF0YVszXSkqYS5oKihyLnlbMV0tci55WzBdKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmZ1bGxTY2VuZUxheW91dC5hbm5vdGF0aW9ucyxyPTA7cjxlLmxlbmd0aDtyKyspYShlW3JdLHQpO3QuZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdEFsbChcIi5hbm5vdGF0aW9uLVwiK3QuaWQpLnJlbW92ZSgpfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDl9XSw1NzI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0c1wiKSxvPXQoXCIuLi9hbm5vdGF0aW9ucy9jb21tb25fZGVmYXVsdHNcIikscz10KFwiLi9hdHRyaWJ1dGVzXCIpO2Z1bmN0aW9uIGwodCxlLHIsYSl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfWZ1bmN0aW9uIGModCl7dmFyIG49dCtcImF4aXNcIixhPXtfZnVsbExheW91dDp7fX07cmV0dXJuIGEuX2Z1bGxMYXlvdXRbbl09cltuXSxpLmNvZXJjZVBvc2l0aW9uKGUsYSxsLHQsdCwuNSl9bChcInZpc2libGVcIikmJihvKHQsZSxhLmZ1bGxMYXlvdXQsbCksYyhcInhcIiksYyhcInlcIiksYyhcInpcIiksbi5ub25lT3JBbGwodCxlLFtcInhcIixcInlcIixcInpcIl0pLGUueHJlZj1cInhcIixlLnlyZWY9XCJ5XCIsZS56cmVmPVwielwiLGwoXCJ4YW5jaG9yXCIpLGwoXCJ5YW5jaG9yXCIpLGwoXCJ4c2hpZnRcIiksbChcInlzaGlmdFwiKSxlLnNob3dhcnJvdyYmKGUuYXhyZWY9XCJwaXhlbFwiLGUuYXlyZWY9XCJwaXhlbFwiLGwoXCJheFwiLC0xMCksbChcImF5XCIsLTMwKSxuLm5vbmVPckFsbCh0LGUsW1wiYXhcIixcImF5XCJdKSkpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7YSh0LGUse25hbWU6XCJhbm5vdGF0aW9uc1wiLGhhbmRsZUl0ZW1EZWZhdWx0czpsLGZ1bGxMYXlvdXQ6ci5mdWxsTGF5b3V0fSl9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIjo3NDUsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL2Fubm90YXRpb25zL2NvbW1vbl9kZWZhdWx0c1wiOjU2NCxcIi4vYXR0cmlidXRlc1wiOjU3MH1dLDU3MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9hbm5vdGF0aW9ucy9kcmF3XCIpLmRyYXdSYXcsaT10KFwiLi4vLi4vcGxvdHMvZ2wzZC9wcm9qZWN0XCIpLGE9W1wieFwiLFwieVwiLFwielwiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuZnVsbFNjZW5lTGF5b3V0LHI9dC5kYXRhU2NhbGUsbz1lLmFubm90YXRpb25zLHM9MDtzPG8ubGVuZ3RoO3MrKyl7Zm9yKHZhciBsPW9bc10sYz0hMSx1PTA7dTwzO3UrKyl7dmFyIGg9YVt1XSxmPWxbaF0scD1lW2grXCJheGlzXCJdLnIyZnJhY3Rpb24oZik7aWYocDwwfHxwPjEpe2M9ITA7YnJlYWt9fWM/dC5mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0KFwiLmFubm90YXRpb24tXCIrdC5pZCsnW2RhdGEtaW5kZXg9XCInK3MrJ1wiXScpLnJlbW92ZSgpOihsLl9wZGF0YT1pKHQuZ2xwbG90LmNhbWVyYVBhcmFtcyxbZS54YXhpcy5yMmwobC54KSpyWzBdLGUueWF4aXMucjJsKGwueSkqclsxXSxlLnpheGlzLnIybChsLnopKnJbMl1dKSxuKHQuZ3JhcGhEaXYsbCxzLHQuaWQsbC5feGEsbC5feWEpKX19fSx7XCIuLi8uLi9wbG90cy9nbDNkL3Byb2plY3RcIjo3OTgsXCIuLi9hbm5vdGF0aW9ucy9kcmF3XCI6NTY3fV0sNTc0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uLy4uL2xpYlwiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6XCJjb21wb25lbnRcIixuYW1lOlwiYW5ub3RhdGlvbnMzZFwiLHNjaGVtYTp7c3VicGxvdHM6e3NjZW5lOnthbm5vdGF0aW9uczp0KFwiLi9hdHRyaWJ1dGVzXCIpfX19LGxheW91dEF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxoYW5kbGVEZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxpbmNsdWRlQmFzZVBsb3Q6ZnVuY3Rpb24odCxlKXt2YXIgcj1uLnN1YnBsb3RzUmVnaXN0cnkuZ2wzZDtpZighcilyZXR1cm47Zm9yKHZhciBhPXIuYXR0clJlZ2V4LG89T2JqZWN0LmtleXModCkscz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdO2EudGVzdChsKSYmKHRbbF0uYW5ub3RhdGlvbnN8fFtdKS5sZW5ndGgmJihpLnB1c2hVbmlxdWUoZS5fYmFzZVBsb3RNb2R1bGVzLHIpLGkucHVzaFVuaXF1ZShlLl9zdWJwbG90cy5nbDNkLGwpKX19LGNvbnZlcnQ6dChcIi4vY29udmVydFwiKSxkcmF3OnQoXCIuL2RyYXdcIil9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vYXR0cmlidXRlc1wiOjU3MCxcIi4vY29udmVydFwiOjU3MSxcIi4vZGVmYXVsdHNcIjo1NzIsXCIuL2RyYXdcIjo1NzN9XSw1NzU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIndvcmxkLWNhbGVuZGFycy9kaXN0L21haW5cIiksdChcIndvcmxkLWNhbGVuZGFycy9kaXN0L3BsdXNcIiksdChcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9jaGluZXNlXCIpLHQoXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvY29wdGljXCIpLHQoXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvZGlzY3dvcmxkXCIpLHQoXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvZXRoaW9waWFuXCIpLHQoXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvaGVicmV3XCIpLHQoXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvaXNsYW1pY1wiKSx0KFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2p1bGlhblwiKSx0KFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL21heWFuXCIpLHQoXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmFuYWtzaGFoaVwiKSx0KFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL25lcGFsaVwiKSx0KFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3BlcnNpYW5cIiksdChcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy90YWl3YW5cIiksdChcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy90aGFpXCIpLHQoXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdW1tYWxxdXJhXCIpfSx7XCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvY2hpbmVzZVwiOjU0MixcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9jb3B0aWNcIjo1NDMsXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvZGlzY3dvcmxkXCI6NTQ0LFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2V0aGlvcGlhblwiOjU0NSxcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9oZWJyZXdcIjo1NDYsXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvaXNsYW1pY1wiOjU0NyxcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9qdWxpYW5cIjo1NDgsXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbWF5YW5cIjo1NDksXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmFuYWtzaGFoaVwiOjU1MCxcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9uZXBhbGlcIjo1NTEsXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvcGVyc2lhblwiOjU1MixcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy90YWl3YW5cIjo1NTMsXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdGhhaVwiOjU1NCxcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy91bW1hbHF1cmFcIjo1NTUsXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9tYWluXCI6NTU2LFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvcGx1c1wiOjU1N31dLDU3NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2NhbGVuZGFyc1wiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKSxvPWEuRVBPQ0hKRCxzPWEuT05FREFZLGw9e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOk9iamVjdC5rZXlzKG4uY2FsZW5kYXJzKSxlZGl0VHlwZTpcImNhbGNcIixkZmx0OlwiZ3JlZ29yaWFuXCJ9LGM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9e307cmV0dXJuIGFbcl09bCxpLmNvZXJjZSh0LGUsYSxyLG4pfSx1PVwiIyNcIixoPXtkOnswOlwiZGRcIixcIi1cIjpcImRcIn0sZTp7MDpcImRcIixcIi1cIjpcImRcIn0sYTp7MDpcIkRcIixcIi1cIjpcIkRcIn0sQTp7MDpcIkREXCIsXCItXCI6XCJERFwifSxqOnswOlwib29cIixcIi1cIjpcIm9cIn0sVzp7MDpcInd3XCIsXCItXCI6XCJ3XCJ9LG06ezA6XCJtbVwiLFwiLVwiOlwibVwifSxiOnswOlwiTVwiLFwiLVwiOlwiTVwifSxCOnswOlwiTU1cIixcIi1cIjpcIk1NXCJ9LHk6ezA6XCJ5eVwiLFwiLVwiOlwieXlcIn0sWTp7MDpcInl5eXlcIixcIi1cIjpcInl5eXlcIn0sVTp1LHc6dSxjOnswOlwiRCBNIGQgJVggeXl5eVwiLFwiLVwiOlwiRCBNIGQgJVggeXl5eVwifSx4OnswOlwibW0vZGQveXl5eVwiLFwiLVwiOlwibW0vZGQveXl5eVwifX07dmFyIGY9e307ZnVuY3Rpb24gcCh0KXt2YXIgZT1mW3RdO3JldHVybiBlfHwoZT1mW3RdPW4uaW5zdGFuY2UodCkpfWZ1bmN0aW9uIGQodCl7cmV0dXJuIGkuZXh0ZW5kRmxhdCh7fSxsLHtkZXNjcmlwdGlvbjp0fSl9ZnVuY3Rpb24gZyh0KXtyZXR1cm5cIlNldHMgdGhlIGNhbGVuZGFyIHN5c3RlbSB0byB1c2Ugd2l0aCBgXCIrdCtcImAgZGF0ZSBkYXRhLlwifXZhciB2PXt4Y2FsZW5kYXI6ZChnKFwieFwiKSl9LG09aS5leHRlbmRGbGF0KHt9LHYse3ljYWxlbmRhcjpkKGcoXCJ5XCIpKX0pLHk9aS5leHRlbmRGbGF0KHt9LG0se3pjYWxlbmRhcjpkKGcoXCJ6XCIpKX0pLHg9ZChbXCJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIGZvciBgcmFuZ2VgIGFuZCBgdGljazBgXCIsXCJpZiB0aGlzIGlzIGEgZGF0ZSBheGlzLiBUaGlzIGRvZXMgbm90IHNldCB0aGUgY2FsZW5kYXIgZm9yXCIsXCJpbnRlcnByZXRpbmcgZGF0YSBvbiB0aGlzIGF4aXMsIHRoYXQncyBzcGVjaWZpZWQgaW4gdGhlIHRyYWNlXCIsXCJvciB2aWEgdGhlIGdsb2JhbCBgbGF5b3V0LmNhbGVuZGFyYFwiXS5qb2luKFwiIFwiKSk7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwiY29tcG9uZW50XCIsbmFtZTpcImNhbGVuZGFyc1wiLHNjaGVtYTp7dHJhY2VzOntzY2F0dGVyOm0sYmFyOm0sYm94Om0saGVhdG1hcDptLGNvbnRvdXI6bSxoaXN0b2dyYW06bSxoaXN0b2dyYW0yZDptLGhpc3RvZ3JhbTJkY29udG91cjptLHNjYXR0ZXIzZDp5LHN1cmZhY2U6eSxtZXNoM2Q6eSxzY2F0dGVyZ2w6bSxvaGxjOnYsY2FuZGxlc3RpY2s6dn0sbGF5b3V0OntjYWxlbmRhcjpkKFtcIlNldHMgdGhlIGRlZmF1bHQgY2FsZW5kYXIgc3lzdGVtIHRvIHVzZSBmb3IgaW50ZXJwcmV0aW5nIGFuZFwiLFwiZGlzcGxheWluZyBkYXRlcyB0aHJvdWdob3V0IHRoZSBwbG90LlwiXS5qb2luKFwiIFwiKSl9LHN1YnBsb3RzOnt4YXhpczp7Y2FsZW5kYXI6eH0seWF4aXM6e2NhbGVuZGFyOnh9LHNjZW5lOnt4YXhpczp7Y2FsZW5kYXI6eH0seWF4aXM6e2NhbGVuZGFyOnh9LHpheGlzOntjYWxlbmRhcjp4fX0scG9sYXI6e3JhZGlhbGF4aXM6e2NhbGVuZGFyOnh9fX0sdHJhbnNmb3Jtczp7ZmlsdGVyOnt2YWx1ZWNhbGVuZGFyOmQoW1wiU2V0cyB0aGUgY2FsZW5kYXIgc3lzdGVtIHRvIHVzZSBmb3IgYHZhbHVlYCwgaWYgaXQgaXMgYSBkYXRlLlwiXS5qb2luKFwiIFwiKSksdGFyZ2V0Y2FsZW5kYXI6ZChbXCJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIGZvciBgdGFyZ2V0YCwgaWYgaXQgaXMgYW5cIixcImFycmF5IG9mIGRhdGVzLiBJZiBgdGFyZ2V0YCBpcyBhIHN0cmluZyAoZWcgKngqKSB3ZSB1c2UgdGhlXCIsXCJjb3JyZXNwb25kaW5nIHRyYWNlIGF0dHJpYnV0ZSAoZWcgYHhjYWxlbmRhcmApIGlmIGl0IGV4aXN0cyxcIixcImV2ZW4gaWYgYHRhcmdldGNhbGVuZGFyYCBpcyBwcm92aWRlZC5cIl0uam9pbihcIiBcIikpfX19LGxheW91dEF0dHJpYnV0ZXM6bCxoYW5kbGVEZWZhdWx0czpjLGhhbmRsZVRyYWNlRGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspYyh0LGUscltpXStcImNhbGVuZGFyXCIsbi5jYWxlbmRhcil9LENBTk9OSUNBTF9TVU5EQVk6e2NoaW5lc2U6XCIyMDAwLTAxLTAyXCIsY29wdGljOlwiMjAwMC0wMS0wM1wiLGRpc2N3b3JsZDpcIjIwMDAtMDEtMDNcIixldGhpb3BpYW46XCIyMDAwLTAxLTA1XCIsaGVicmV3OlwiNTAwMC0wMS0wMVwiLGlzbGFtaWM6XCIxMDAwLTAxLTAyXCIsanVsaWFuOlwiMjAwMC0wMS0wM1wiLG1heWFuOlwiNTAwMC0wMS0wMVwiLG5hbmFrc2hhaGk6XCIxMDAwLTAxLTA1XCIsbmVwYWxpOlwiMjAwMC0wMS0wNVwiLHBlcnNpYW46XCIxMDAwLTAxLTAxXCIsamFsYWxpOlwiMTAwMC0wMS0wMVwiLHRhaXdhbjpcIjEwMDAtMDEtMDRcIix0aGFpOlwiMjAwMC0wMS0wNFwiLHVtbWFscXVyYTpcIjE0MDAtMDEtMDZcIn0sQ0FOT05JQ0FMX1RJQ0s6e2NoaW5lc2U6XCIyMDAwLTAxLTAxXCIsY29wdGljOlwiMjAwMC0wMS0wMVwiLGRpc2N3b3JsZDpcIjIwMDAtMDEtMDFcIixldGhpb3BpYW46XCIyMDAwLTAxLTAxXCIsaGVicmV3OlwiNTAwMC0wMS0wMVwiLGlzbGFtaWM6XCIxMDAwLTAxLTAxXCIsanVsaWFuOlwiMjAwMC0wMS0wMVwiLG1heWFuOlwiNTAwMC0wMS0wMVwiLG5hbmFrc2hhaGk6XCIxMDAwLTAxLTAxXCIsbmVwYWxpOlwiMjAwMC0wMS0wMVwiLHBlcnNpYW46XCIxMDAwLTAxLTAxXCIsamFsYWxpOlwiMTAwMC0wMS0wMVwiLHRhaXdhbjpcIjEwMDAtMDEtMDFcIix0aGFpOlwiMjAwMC0wMS0wMVwiLHVtbWFscXVyYTpcIjE0MDAtMDEtMDFcIn0sREZMVFJBTkdFOntjaGluZXNlOltcIjIwMDAtMDEtMDFcIixcIjIwMDEtMDEtMDFcIl0sY29wdGljOltcIjE3MDAtMDEtMDFcIixcIjE3MDEtMDEtMDFcIl0sZGlzY3dvcmxkOltcIjE4MDAtMDEtMDFcIixcIjE4MDEtMDEtMDFcIl0sZXRoaW9waWFuOltcIjIwMDAtMDEtMDFcIixcIjIwMDEtMDEtMDFcIl0saGVicmV3OltcIjU3MDAtMDEtMDFcIixcIjU3MDEtMDEtMDFcIl0saXNsYW1pYzpbXCIxNDAwLTAxLTAxXCIsXCIxNDAxLTAxLTAxXCJdLGp1bGlhbjpbXCIyMDAwLTAxLTAxXCIsXCIyMDAxLTAxLTAxXCJdLG1heWFuOltcIjUyMDAtMDEtMDFcIixcIjUyMDEtMDEtMDFcIl0sbmFuYWtzaGFoaTpbXCIwNTAwLTAxLTAxXCIsXCIwNTAxLTAxLTAxXCJdLG5lcGFsaTpbXCIyMDAwLTAxLTAxXCIsXCIyMDAxLTAxLTAxXCJdLHBlcnNpYW46W1wiMTQwMC0wMS0wMVwiLFwiMTQwMS0wMS0wMVwiXSxqYWxhbGk6W1wiMTQwMC0wMS0wMVwiLFwiMTQwMS0wMS0wMVwiXSx0YWl3YW46W1wiMDEwMC0wMS0wMVwiLFwiMDEwMS0wMS0wMVwiXSx0aGFpOltcIjI1MDAtMDEtMDFcIixcIjI1MDEtMDEtMDFcIl0sdW1tYWxxdXJhOltcIjE0MDAtMDEtMDFcIixcIjE0MDEtMDEtMDFcIl19LGdldENhbDpwLHdvcmxkQ2FsRm10OmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saSxhLGwsYyxmPU1hdGguZmxvb3IoKGUrLjA1KS9zKStvLGQ9cChyKS5mcm9tSkQoZiksZz0wOy0xIT09KGc9dC5pbmRleE9mKFwiJVwiLGcpKTspXCIwXCI9PT0obj10LmNoYXJBdChnKzEpKXx8XCItXCI9PT1ufHxcIl9cIj09PW4/KGE9MyxpPXQuY2hhckF0KGcrMiksXCJfXCI9PT1uJiYobj1cIi1cIikpOihpPW4sbj1cIjBcIixhPTIpLChsPWhbaV0pPyhjPWw9PT11P3U6ZC5mb3JtYXREYXRlKGxbbl0pLHQ9dC5zdWJzdHIoMCxnKStjK3Quc3Vic3RyKGcrYSksZys9Yy5sZW5ndGgpOmcrPWE7cmV0dXJuIHR9fX0se1wiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4vY2FsZW5kYXJzXCI6NTc1fV0sNTc3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ci5kZWZhdWx0cz1bXCIjMWY3N2I0XCIsXCIjZmY3ZjBlXCIsXCIjMmNhMDJjXCIsXCIjZDYyNzI4XCIsXCIjOTQ2N2JkXCIsXCIjOGM1NjRiXCIsXCIjZTM3N2MyXCIsXCIjN2Y3ZjdmXCIsXCIjYmNiZDIyXCIsXCIjMTdiZWNmXCJdLHIuZGVmYXVsdExpbmU9XCIjNDQ0XCIsci5saWdodExpbmU9XCIjZWVlXCIsci5iYWNrZ3JvdW5kPVwiI2ZmZlwiLHIuYm9yZGVyTGluZT1cIiNCRUM4RDlcIixyLmxpZ2h0RnJhY3Rpb249MWUzLzExfSx7fV0sNTc4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInRpbnljb2xvcjJcIiksaT10KFwiZmFzdC1pc251bWVyaWNcIiksYT1lLmV4cG9ydHM9e30sbz10KFwiLi9hdHRyaWJ1dGVzXCIpO2EuZGVmYXVsdHM9by5kZWZhdWx0czt2YXIgcz1hLmRlZmF1bHRMaW5lPW8uZGVmYXVsdExpbmU7YS5saWdodExpbmU9by5saWdodExpbmU7dmFyIGw9YS5iYWNrZ3JvdW5kPW8uYmFja2dyb3VuZDtmdW5jdGlvbiBjKHQpe2lmKGkodCl8fFwic3RyaW5nXCIhPXR5cGVvZiB0KXJldHVybiB0O3ZhciBlPXQudHJpbSgpO2lmKFwicmdiXCIhPT1lLnN1YnN0cigwLDMpKXJldHVybiB0O3ZhciByPWUubWF0Y2goL15yZ2JhP1xccypcXCgoW14oKV0qKVxcKSQvKTtpZighcilyZXR1cm4gdDt2YXIgbj1yWzFdLnRyaW0oKS5zcGxpdCgvXFxzKltcXHMsXVxccyovKSxhPVwiYVwiPT09ZS5jaGFyQXQoMykmJjQ9PT1uLmxlbmd0aDtpZighYSYmMyE9PW4ubGVuZ3RoKXJldHVybiB0O2Zvcih2YXIgbz0wO288bi5sZW5ndGg7bysrKXtpZighbltvXS5sZW5ndGgpcmV0dXJuIHQ7aWYobltvXT1OdW1iZXIobltvXSksIShuW29dPj0wKSlyZXR1cm4gdDtpZigzPT09byluW29dPjEmJihuW29dPTEpO2Vsc2UgaWYobltvXT49MSlyZXR1cm4gdH12YXIgcz1NYXRoLnJvdW5kKDI1NSpuWzBdKStcIiwgXCIrTWF0aC5yb3VuZCgyNTUqblsxXSkrXCIsIFwiK01hdGgucm91bmQoMjU1Km5bMl0pO3JldHVybiBhP1wicmdiYShcIitzK1wiLCBcIituWzNdK1wiKVwiOlwicmdiKFwiK3MrXCIpXCJ9YS50aW55UkdCPWZ1bmN0aW9uKHQpe3ZhciBlPXQudG9SZ2IoKTtyZXR1cm5cInJnYihcIitNYXRoLnJvdW5kKGUucikrXCIsIFwiK01hdGgucm91bmQoZS5nKStcIiwgXCIrTWF0aC5yb3VuZChlLmIpK1wiKVwifSxhLnJnYj1mdW5jdGlvbih0KXtyZXR1cm4gYS50aW55UkdCKG4odCkpfSxhLm9wYWNpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/bih0KS5nZXRBbHBoYSgpOjB9LGEuYWRkT3BhY2l0eT1mdW5jdGlvbih0LGUpe3ZhciByPW4odCkudG9SZ2IoKTtyZXR1cm5cInJnYmEoXCIrTWF0aC5yb3VuZChyLnIpK1wiLCBcIitNYXRoLnJvdW5kKHIuZykrXCIsIFwiK01hdGgucm91bmQoci5iKStcIiwgXCIrZStcIilcIn0sYS5jb21iaW5lPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0KS50b1JnYigpO2lmKDE9PT1yLmEpcmV0dXJuIG4odCkudG9SZ2JTdHJpbmcoKTt2YXIgaT1uKGV8fGwpLnRvUmdiKCksYT0xPT09aS5hP2k6e3I6MjU1KigxLWkuYSkraS5yKmkuYSxnOjI1NSooMS1pLmEpK2kuZyppLmEsYjoyNTUqKDEtaS5hKStpLmIqaS5hfSxvPXtyOmEuciooMS1yLmEpK3IucipyLmEsZzphLmcqKDEtci5hKStyLmcqci5hLGI6YS5iKigxLXIuYSkrci5iKnIuYX07cmV0dXJuIG4obykudG9SZ2JTdHJpbmcoKX0sYS5jb250cmFzdD1mdW5jdGlvbih0LGUscil7dmFyIGk9bih0KTtyZXR1cm4gMSE9PWkuZ2V0QWxwaGEoKSYmKGk9bihhLmNvbWJpbmUodCxsKSkpLChpLmlzRGFyaygpP2U/aS5saWdodGVuKGUpOmw6cj9pLmRhcmtlbihyKTpzKS50b1N0cmluZygpfSxhLnN0cm9rZT1mdW5jdGlvbih0LGUpe3ZhciByPW4oZSk7dC5zdHlsZSh7c3Ryb2tlOmEudGlueVJHQihyKSxcInN0cm9rZS1vcGFjaXR5XCI6ci5nZXRBbHBoYSgpfSl9LGEuZmlsbD1mdW5jdGlvbih0LGUpe3ZhciByPW4oZSk7dC5zdHlsZSh7ZmlsbDphLnRpbnlSR0IociksXCJmaWxsLW9wYWNpdHlcIjpyLmdldEFscGhhKCl9KX0sYS5jbGVhbj1mdW5jdGlvbih0KXtpZih0JiZcIm9iamVjdFwiPT10eXBlb2YgdCl7dmFyIGUscixuLGksbz1PYmplY3Qua2V5cyh0KTtmb3IoZT0wO2U8by5sZW5ndGg7ZSsrKWlmKGk9dFtuPW9bZV1dLFwiY29sb3JcIj09PW4uc3Vic3RyKG4ubGVuZ3RoLTUpKWlmKEFycmF5LmlzQXJyYXkoaSkpZm9yKHI9MDtyPGkubGVuZ3RoO3IrKylpW3JdPWMoaVtyXSk7ZWxzZSB0W25dPWMoaSk7ZWxzZSBpZihcImNvbG9yc2NhbGVcIj09PW4uc3Vic3RyKG4ubGVuZ3RoLTEwKSYmQXJyYXkuaXNBcnJheShpKSlmb3Iocj0wO3I8aS5sZW5ndGg7cisrKUFycmF5LmlzQXJyYXkoaVtyXSkmJihpW3JdWzFdPWMoaVtyXVsxXSkpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShpKSl7dmFyIHM9aVswXTtpZighQXJyYXkuaXNBcnJheShzKSYmcyYmXCJvYmplY3RcIj09dHlwZW9mIHMpZm9yKHI9MDtyPGkubGVuZ3RoO3IrKylhLmNsZWFuKGlbcl0pfWVsc2UgaSYmXCJvYmplY3RcIj09dHlwZW9mIGkmJmEuY2xlYW4oaSl9fX0se1wiLi9hdHRyaWJ1dGVzXCI6NTc3LFwiZmFzdC1pc251bWVyaWNcIjoyMjIsdGlueWNvbG9yMjo1MjJ9XSw1Nzk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsbz10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbDtlLmV4cG9ydHM9byh7dGhpY2tuZXNzbW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiZnJhY3Rpb25cIixcInBpeGVsc1wiXSxkZmx0OlwicGl4ZWxzXCJ9LHRoaWNrbmVzczp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MzB9LGxlbm1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImZyYWN0aW9uXCIsXCJwaXhlbHNcIl0sZGZsdDpcImZyYWN0aW9uXCJ9LGxlbjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MX0seDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MS4wMixtaW46LTIsbWF4OjN9LHhhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImxlZnRcIixcImNlbnRlclwiLFwicmlnaHRcIl0sZGZsdDpcImxlZnRcIn0seHBhZDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MTB9LHk6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0Oi41LG1pbjotMixtYXg6M30seWFuY2hvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1widG9wXCIsXCJtaWRkbGVcIixcImJvdHRvbVwiXSxkZmx0OlwibWlkZGxlXCJ9LHlwYWQ6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjEwfSxvdXRsaW5lY29sb3I6bi5saW5lY29sb3Isb3V0bGluZXdpZHRoOm4ubGluZXdpZHRoLGJvcmRlcmNvbG9yOm4ubGluZWNvbG9yLGJvcmRlcndpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDowfSxiZ2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OlwicmdiYSgwLDAsMCwwKVwifSx0aWNrbW9kZTpuLnRpY2ttb2RlLG50aWNrczpuLm50aWNrcyx0aWNrMDpuLnRpY2swLGR0aWNrOm4uZHRpY2ssdGlja3ZhbHM6bi50aWNrdmFscyx0aWNrdGV4dDpuLnRpY2t0ZXh0LHRpY2tzOmEoe30sbi50aWNrcyx7ZGZsdDpcIlwifSksdGlja2xlbjpuLnRpY2tsZW4sdGlja3dpZHRoOm4udGlja3dpZHRoLHRpY2tjb2xvcjpuLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczpuLnNob3d0aWNrbGFiZWxzLHRpY2tmb250Omkoe30pLHRpY2thbmdsZTpuLnRpY2thbmdsZSx0aWNrZm9ybWF0Om4udGlja2Zvcm1hdCx0aWNrZm9ybWF0c3RvcHM6bi50aWNrZm9ybWF0c3RvcHMsdGlja3ByZWZpeDpuLnRpY2twcmVmaXgsc2hvd3RpY2twcmVmaXg6bi5zaG93dGlja3ByZWZpeCx0aWNrc3VmZml4Om4udGlja3N1ZmZpeCxzaG93dGlja3N1ZmZpeDpuLnNob3d0aWNrc3VmZml4LHNlcGFyYXRldGhvdXNhbmRzOm4uc2VwYXJhdGV0aG91c2FuZHMsZXhwb25lbnRmb3JtYXQ6bi5leHBvbmVudGZvcm1hdCxzaG93ZXhwb25lbnQ6bi5zaG93ZXhwb25lbnQsdGl0bGU6e3RleHQ6e3ZhbFR5cGU6XCJzdHJpbmdcIn0sZm9udDppKHt9KSxzaWRlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJyaWdodFwiLFwidG9wXCIsXCJib3R0b21cIl0sZGZsdDpcInRvcFwifX0sX2RlcHJlY2F0ZWQ6e3RpdGxlOnt2YWxUeXBlOlwic3RyaW5nXCJ9LHRpdGxlZm9udDppKHt9KSx0aXRsZXNpZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInJpZ2h0XCIsXCJ0b3BcIixcImJvdHRvbVwiXSxkZmx0OlwidG9wXCJ9fX0sXCJjb2xvcmJhcnNcIixcImZyb20tcm9vdFwiKX0se1wiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo3NjEsXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIjo3NzV9XSw1ODA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9kcmF3XCIpLGk9dChcIi4uL2NvbG9yc2NhbGUvaGVscGVyc1wiKS5mbGlwU2NhbGU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiByKXJldHVybiByKHQsZSk7dmFyIGE9ZVswXS50cmFjZSxvPVwiY2JcIithLnVpZDtyPUFycmF5LmlzQXJyYXkocik/cjpbcl07Zm9yKHZhciBzPTA7czxyLmxlbmd0aDtzKyspe3ZhciBsPXJbc10uY29udGFpbmVyLGM9bD9hW2xdOmE7aWYodC5fZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdEFsbChcIi5cIitvKS5yZW1vdmUoKSxjJiZjLnNob3dzY2FsZSl7dmFyIHU9ZVswXS50LmNiPW4odCxvKSxoPWMucmV2ZXJzZXNjYWxlP2koYy5jb2xvcnNjYWxlKTpjLmNvbG9yc2NhbGU7cmV0dXJuIHZvaWQgdS5maWxsZ3JhZGllbnQoaCkuenJhbmdlKFtjW3Jbc10ubWluXSxjW3Jbc10ubWF4XV0pLm9wdGlvbnMoYy5jb2xvcmJhcikoKX19fX0se1wiLi4vY29sb3JzY2FsZS9oZWxwZXJzXCI6NTg5LFwiLi9kcmF3XCI6NTgzfV0sNTgxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtjbjp7Y29sb3JiYXI6XCJjb2xvcmJhclwiLGNiYmc6XCJjYmJnXCIsY2JmaWxsOlwiY2JmaWxsXCIsY2JmaWxsczpcImNiZmlsbHNcIixjYmxpbmU6XCJjYmxpbmVcIixjYmxpbmVzOlwiY2JsaW5lc1wiLGNiYXhpczpcImNiYXhpc1wiLGNidGl0bGV1bnNoaWZ0OlwiY2J0aXRsZXVuc2hpZnRcIixjYnRpdGxlOlwiY2J0aXRsZVwiLGNib3V0bGluZTpcImNib3V0bGluZVwiLGNyaXNwOlwiY3Jpc3BcIixqc1BsYWNlaG9sZGVyOlwianMtcGxhY2Vob2xkZXJcIn19fSx7fV0sNTgyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzXCIpLG89dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHNcIikscz10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHNcIiksbD10KFwiLi9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGM9aS5uZXdDb250YWluZXIoZSxcImNvbG9yYmFyXCIpLHU9dC5jb2xvcmJhcnx8e307ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBuLmNvZXJjZSh1LGMsbCx0LGUpfXZhciBmPWgoXCJ0aGlja25lc3Ntb2RlXCIpO2goXCJ0aGlja25lc3NcIixcImZyYWN0aW9uXCI9PT1mPzMwLyhyLndpZHRoLXIubWFyZ2luLmwtci5tYXJnaW4ucik6MzApO3ZhciBwPWgoXCJsZW5tb2RlXCIpO2goXCJsZW5cIixcImZyYWN0aW9uXCI9PT1wPzE6ci5oZWlnaHQtci5tYXJnaW4udC1yLm1hcmdpbi5iKSxoKFwieFwiKSxoKFwieGFuY2hvclwiKSxoKFwieHBhZFwiKSxoKFwieVwiKSxoKFwieWFuY2hvclwiKSxoKFwieXBhZFwiKSxuLm5vbmVPckFsbCh1LGMsW1wieFwiLFwieVwiXSksaChcIm91dGxpbmVjb2xvclwiKSxoKFwib3V0bGluZXdpZHRoXCIpLGgoXCJib3JkZXJjb2xvclwiKSxoKFwiYm9yZGVyd2lkdGhcIiksaChcImJnY29sb3JcIiksYSh1LGMsaCxcImxpbmVhclwiKTt2YXIgZD17b3V0ZXJUaWNrczohMSxmb250OnIuZm9udH07cyh1LGMsaCxcImxpbmVhclwiLGQpLG8odSxjLGgsXCJsaW5lYXJcIixkKSxoKFwidGl0bGUudGV4dFwiLHIuX2RmbHRUaXRsZS5jb2xvcmJhciksbi5jb2VyY2VGb250KGgsXCJ0aXRsZS5mb250XCIsci5mb250KSxoKFwidGl0bGUuc2lkZVwiKX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0c1wiOjc2OCxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHNcIjo3NjksXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0c1wiOjc3MCxcIi4vYXR0cmlidXRlc1wiOjU3OX1dLDU4MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJ0aW55Y29sb3IyXCIpLGE9dChcIi4uLy4uL3Bsb3RzL3Bsb3RzXCIpLG89dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLHM9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGw9dChcIi4uL2RyYWdlbGVtZW50XCIpLGM9dChcIi4uLy4uL2xpYlwiKSx1PXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsaD10KFwiLi4vLi4vbGliL3NldGN1cnNvclwiKSxmPXQoXCIuLi9kcmF3aW5nXCIpLHA9dChcIi4uL2NvbG9yXCIpLGQ9dChcIi4uL3RpdGxlc1wiKSxnPXQoXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIiksdj10KFwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiKSxtPXYuTElORV9TUEFDSU5HLHk9di5GUk9NX1RMLHg9di5GUk9NX0JSLGI9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzXCIpLF89dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9wb3NpdGlvbl9kZWZhdWx0c1wiKSx3PXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksaz10KFwiLi9hdHRyaWJ1dGVzXCIpLEE9dChcIi4vY29uc3RhbnRzXCIpLmNuO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXt9O2Zvcih2YXIgdiBpbiBrKXJbdl09bnVsbDtmdW5jdGlvbiBUKCl7dmFyIHY9dC5fZnVsbExheW91dCxrPXYuX3NpemU7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygci5maWxsY29sb3J8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHIubGluZS5jb2xvcnx8ci5maWxsZ3JhZGllbnQpe3ZhciBFLEMsTD1yLnpyYW5nZXx8bi5leHRlbnQoKFwiZnVuY3Rpb25cIj09dHlwZW9mIHIuZmlsbGNvbG9yP3IuZmlsbGNvbG9yOnIubGluZS5jb2xvcikuZG9tYWluKCkpLHo9W10sTz1bXSxJPVwiZnVuY3Rpb25cIj09dHlwZW9mIHIubGluZS5jb2xvcj9yLmxpbmUuY29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gci5saW5lLmNvbG9yfSxEPVwiZnVuY3Rpb25cIj09dHlwZW9mIHIuZmlsbGNvbG9yP3IuZmlsbGNvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHIuZmlsbGNvbG9yfSxQPXIubGV2ZWxzLmVuZCtyLmxldmVscy5zaXplLzEwMCxSPXIubGV2ZWxzLnNpemUsRj0xLjAwMSpMWzBdLS4wMDEqTFsxXSxCPTEuMDAxKkxbMV0tLjAwMSpMWzBdO2ZvcihDPTA7QzwxZTUmJihFPXIubGV2ZWxzLnN0YXJ0K0MqUiwhKFI+MD9FPj1QOkU8PVApKTtDKyspRT5GJiZFPEImJnoucHVzaChFKTtpZihyLmZpbGxncmFkaWVudClPPVswXTtlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHIuZmlsbGNvbG9yKWlmKHIuZmlsbGxldmVscylmb3IoUD1yLmZpbGxsZXZlbHMuZW5kK3IuZmlsbGxldmVscy5zaXplLzEwMCxSPXIuZmlsbGxldmVscy5zaXplLEM9MDtDPDFlNSYmKEU9ci5maWxsbGV2ZWxzLnN0YXJ0K0MqUiwhKFI+MD9FPj1QOkU8PVApKTtDKyspRT5MWzBdJiZFPExbMV0mJk8ucHVzaChFKTtlbHNlKE89ei5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQtci5sZXZlbHMuc2l6ZS8yfSkpLnB1c2goT1tPLmxlbmd0aC0xXStyLmxldmVscy5zaXplKTtlbHNlIHIuZmlsbGNvbG9yJiZcInN0cmluZ1wiPT10eXBlb2Ygci5maWxsY29sb3ImJihPPVswXSk7ci5sZXZlbHMuc2l6ZTwwJiYoei5yZXZlcnNlKCksTy5yZXZlcnNlKCkpO3ZhciBOLGo9ay5oLFY9ay53LFU9TWF0aC5yb3VuZChyLnRoaWNrbmVzcyooXCJmcmFjdGlvblwiPT09ci50aGlja25lc3Ntb2RlP1Y6MSkpLHE9VS9rLncsSD1NYXRoLnJvdW5kKHIubGVuKihcImZyYWN0aW9uXCI9PT1yLmxlbm1vZGU/ajoxKSksRz1IL2suaCxZPXIueHBhZC9rLncsVz0oci5ib3JkZXJ3aWR0aCtyLm91dGxpbmV3aWR0aCkvMixYPXIueXBhZC9rLmgsWj1NYXRoLnJvdW5kKHIueCprLncrci54cGFkKSwkPXIueC1xKih7bWlkZGxlOi41LHJpZ2h0OjF9W3IueGFuY2hvcl18fDApLEo9ci55K0cqKCh7dG9wOi0uNSxib3R0b206LjV9W3IueWFuY2hvcl18fDApLS41KSxLPU1hdGgucm91bmQoay5oKigxLUopKSxRPUstSCx0dD17dHlwZTpcImxpbmVhclwiLHJhbmdlOkwsdGlja21vZGU6ci50aWNrbW9kZSxudGlja3M6ci5udGlja3MsdGljazA6ci50aWNrMCxkdGljazpyLmR0aWNrLHRpY2t2YWxzOnIudGlja3ZhbHMsdGlja3RleHQ6ci50aWNrdGV4dCx0aWNrczpyLnRpY2tzLHRpY2tsZW46ci50aWNrbGVuLHRpY2t3aWR0aDpyLnRpY2t3aWR0aCx0aWNrY29sb3I6ci50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6ci5zaG93dGlja2xhYmVscyx0aWNrZm9udDpyLnRpY2tmb250LHRpY2thbmdsZTpyLnRpY2thbmdsZSx0aWNrZm9ybWF0OnIudGlja2Zvcm1hdCxleHBvbmVudGZvcm1hdDpyLmV4cG9uZW50Zm9ybWF0LHNlcGFyYXRldGhvdXNhbmRzOnIuc2VwYXJhdGV0aG91c2FuZHMsc2hvd2V4cG9uZW50OnIuc2hvd2V4cG9uZW50LHNob3d0aWNrcHJlZml4OnIuc2hvd3RpY2twcmVmaXgsdGlja3ByZWZpeDpyLnRpY2twcmVmaXgsc2hvd3RpY2tzdWZmaXg6ci5zaG93dGlja3N1ZmZpeCx0aWNrc3VmZml4OnIudGlja3N1ZmZpeCx0aXRsZTpyLnRpdGxlLHNob3dsaW5lOiEwLGFuY2hvcjpcImZyZWVcIixzaWRlOlwicmlnaHRcIixwb3NpdGlvbjoxfSxldD17dHlwZTpcImxpbmVhclwiLF9pZDpcInlcIitlfSxydD17bGV0dGVyOlwieVwiLGZvbnQ6di5mb250LG5vSG92ZXI6ITAsbm9UaWNrc29uOiEwLGNhbGVuZGFyOnYuY2FsZW5kYXJ9O2lmKGIodHQsZXQseXQscnQsdiksXyh0dCxldCx5dCxydCksZXQucG9zaXRpb249ci54K1krcSxULmF4aXM9ZXQsLTEhPT1bXCJ0b3BcIixcImJvdHRvbVwiXS5pbmRleE9mKHIudGl0bGUuc2lkZSkmJihldC50aXRsZS5zaWRlPXIudGl0bGUuc2lkZSxldC50aXRsZXg9ci54K1ksZXQudGl0bGV5PUorKFwidG9wXCI9PT1yLnRpdGxlLnNpZGU/Ry1YOlgpKSxyLmxpbmUuY29sb3ImJlwiYXV0b1wiPT09ci50aWNrbW9kZSl7ZXQudGlja21vZGU9XCJsaW5lYXJcIixldC50aWNrMD1yLmxldmVscy5zdGFydDt2YXIgbnQ9ci5sZXZlbHMuc2l6ZSxpdD1jLmNvbnN0cmFpbigoSy1RKS81MCw0LDE1KSsxLGF0PShMWzFdLUxbMF0pLygoci5udGlja3N8fGl0KSpudCk7aWYoYXQ+MSl7dmFyIG90PU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coYXQpL01hdGguTE4xMCkpO250Kj1vdCpjLnJvdW5kVXAoYXQvb3QsWzIsNSwxMF0pLChNYXRoLmFicyhyLmxldmVscy5zdGFydCkvci5sZXZlbHMuc2l6ZSsxZS02KSUxPDJlLTYmJihldC50aWNrMD0wKX1ldC5kdGljaz1udH1ldC5kb21haW49W0orWCxKK0ctWF0sZXQuc2V0U2NhbGUoKTt2YXIgc3Q9Yy5lbnN1cmVTaW5nbGUodi5faW5mb2xheWVyLFwiZ1wiLGUsZnVuY3Rpb24odCl7dC5jbGFzc2VkKEEuY29sb3JiYXIsITApLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTt0LmFwcGVuZChcInJlY3RcIikuY2xhc3NlZChBLmNiYmcsITApLHQuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKEEuY2JmaWxscywhMCksdC5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoQS5jYmxpbmVzLCEwKSx0LmFwcGVuZChcImdcIikuY2xhc3NlZChBLmNiYXhpcywhMCkuY2xhc3NlZChBLmNyaXNwLCEwKSx0LmFwcGVuZChcImdcIikuY2xhc3NlZChBLmNidGl0bGV1bnNoaWZ0LCEwKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoQS5jYnRpdGxlLCEwKSx0LmFwcGVuZChcInJlY3RcIikuY2xhc3NlZChBLmNib3V0bGluZSwhMCksdC5zZWxlY3QoXCIuY2J0aXRsZVwiKS5kYXR1bSgwKX0pfSk7c3QuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK01hdGgucm91bmQoay5sKStcIixcIitNYXRoLnJvdW5kKGsudCkrXCIpXCIpO3ZhciBsdD1zdC5zZWxlY3QoXCIuY2J0aXRsZXVuc2hpZnRcIikuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKC1cIitNYXRoLnJvdW5kKGsubCkrXCIsLVwiK01hdGgucm91bmQoay50KStcIilcIiksY3Q9c3Quc2VsZWN0KFwiLmNiYXhpc1wiKSx1dD0wO2lmKC0xIT09W1widG9wXCIsXCJib3R0b21cIl0uaW5kZXhPZihyLnRpdGxlLnNpZGUpKXt2YXIgaHQsZnQ9ay5sKyhyLngrWSkqay53LHB0PWV0LnRpdGxlLmZvbnQuc2l6ZTtodD1cInRvcFwiPT09ci50aXRsZS5zaWRlPygxLShKK0ctWCkpKmsuaCtrLnQrMysuNzUqcHQ6KDEtKEorWCkpKmsuaCtrLnQtMy0uMjUqcHQseHQoZXQuX2lkK1widGl0bGVcIix7YXR0cmlidXRlczp7eDpmdCx5Omh0LFwidGV4dC1hbmNob3JcIjpcInN0YXJ0XCJ9fSl9dmFyIGR0LGd0LHZ0LG10PWMuc3luY09yQXN5bmMoW2EucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe2lmKC0xIT09W1widG9wXCIsXCJib3R0b21cIl0uaW5kZXhPZihyLnRpdGxlLnNpZGUpKXt2YXIgYT1zdC5zZWxlY3QoXCIuY2J0aXRsZVwiKSxvPWEuc2VsZWN0KFwidGV4dFwiKSxsPVstci5vdXRsaW5ld2lkdGgvMixyLm91dGxpbmV3aWR0aC8yXSx1PWEuc2VsZWN0KFwiLmhcIitldC5faWQrXCJ0aXRsZS1tYXRoLWdyb3VwXCIpLm5vZGUoKSxoPTE1LjY7aWYoby5ub2RlKCkmJihoPXBhcnNlSW50KG8ubm9kZSgpLnN0eWxlLmZvbnRTaXplLDEwKSptKSx1Pyh1dD1mLmJCb3godSkuaGVpZ2h0KT5oJiYobFsxXS09KHV0LWgpLzIpOm8ubm9kZSgpJiYhby5jbGFzc2VkKEEuanNQbGFjZWhvbGRlcikmJih1dD1mLmJCb3goby5ub2RlKCkpLmhlaWdodCksdXQpe2lmKHV0Kz01LFwidG9wXCI9PT1yLnRpdGxlLnNpZGUpZXQuZG9tYWluWzFdLT11dC9rLmgsbFsxXSo9LTE7ZWxzZXtldC5kb21haW5bMF0rPXV0L2suaDt2YXIgcD1nLmxpbmVDb3VudChvKTtsWzFdKz0oMS1wKSpofWEuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK2wrXCIpXCIpLGV0LnNldFNjYWxlKCl9fXN0LnNlbGVjdEFsbChcIi5jYmZpbGxzLC5jYmxpbmVzXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZSgwLFwiK01hdGgucm91bmQoay5oKigxLWV0LmRvbWFpblsxXSkpK1wiKVwiKSxjdC5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoMCxcIitNYXRoLnJvdW5kKC1rLnQpK1wiKVwiKTt2YXIgZD1zdC5zZWxlY3QoXCIuY2JmaWxsc1wiKS5zZWxlY3RBbGwoXCJyZWN0LmNiZmlsbFwiKS5kYXRhKE8pO2QuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpLmNsYXNzZWQoQS5jYmZpbGwsITApLnN0eWxlKFwic3Ryb2tlXCIsXCJub25lXCIpLGQuZXhpdCgpLnJlbW92ZSgpO3ZhciB5PUwubWFwKGV0LmMycCkubWFwKE1hdGgucm91bmQpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSk7ZC5lYWNoKGZ1bmN0aW9uKGEsbyl7dmFyIHM9WzA9PT1vP0xbMF06KE9bb10rT1tvLTFdKS8yLG89PT1PLmxlbmd0aC0xP0xbMV06KE9bb10rT1tvKzFdKS8yXS5tYXAoZXQuYzJwKS5tYXAoTWF0aC5yb3VuZCk7c1sxXT1jLmNvbnN0cmFpbihzWzFdKyhzWzFdPnNbMF0pPzE6LTEseVswXSx5WzFdKTt2YXIgbD1uLnNlbGVjdCh0aGlzKS5hdHRyKHt4Olosd2lkdGg6TWF0aC5tYXgoVSwyKSx5Om4ubWluKHMpLGhlaWdodDpNYXRoLm1heChuLm1heChzKS1uLm1pbihzKSwyKX0pO2lmKHIuZmlsbGdyYWRpZW50KWYuZ3JhZGllbnQobCx0LGUsXCJ2ZXJ0aWNhbFwiLHIuZmlsbGdyYWRpZW50LFwiZmlsbFwiKTtlbHNle3ZhciB1PUQoYSkucmVwbGFjZShcImUtXCIsXCJcIik7bC5hdHRyKFwiZmlsbFwiLGkodSkudG9IZXhTdHJpbmcoKSl9fSk7dmFyIHg9c3Quc2VsZWN0KFwiLmNibGluZXNcIikuc2VsZWN0QWxsKFwicGF0aC5jYmxpbmVcIikuZGF0YShyLmxpbmUuY29sb3ImJnIubGluZS53aWR0aD96OltdKTtyZXR1cm4geC5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChBLmNibGluZSwhMCkseC5leGl0KCkucmVtb3ZlKCkseC5lYWNoKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmF0dHIoXCJkXCIsXCJNXCIrWitcIixcIisoTWF0aC5yb3VuZChldC5jMnAodCkpK3IubGluZS53aWR0aC8yJTEpK1wiaFwiK1UpLmNhbGwoZi5saW5lR3JvdXBTdHlsZSxyLmxpbmUud2lkdGgsSSh0KSxyLmxpbmUuZGFzaCl9KSxjdC5zZWxlY3RBbGwoXCJnLlwiK2V0Ll9pZCtcInRpY2sscGF0aFwiKS5yZW1vdmUoKSxjLnN5bmNPckFzeW5jKFtmdW5jdGlvbigpe3ZhciBlPVorVSsoci5vdXRsaW5ld2lkdGh8fDApLzItKFwib3V0c2lkZVwiPT09ci50aWNrcz8xOjApLG49cy5jYWxjVGlja3MoZXQpLGk9cy5tYWtlVHJhbnNGbihldCksYT1zLmdldFRpY2tTaWducyhldClbMl07cmV0dXJuIHMuZHJhd1RpY2tzKHQsZXQse3ZhbHM6XCJpbnNpZGVcIj09PWV0LnRpY2tzP3MuY2xpcEVuZHMoZXQsbik6bixsYXllcjpjdCxwYXRoOnMubWFrZVRpY2tQYXRoKGV0LGUsYSksdHJhbnNGbjppfSkscy5kcmF3TGFiZWxzKHQsZXQse3ZhbHM6bixsYXllcjpjdCx0cmFuc0ZuOmksbGFiZWxGbnM6cy5tYWtlTGFiZWxGbnMoZXQsZSl9KX0sZnVuY3Rpb24oKXtpZigtMT09PVtcInRvcFwiLFwiYm90dG9tXCJdLmluZGV4T2Yoci50aXRsZS5zaWRlKSl7dmFyIGU9ZXQudGl0bGUuZm9udC5zaXplLGk9ZXQuX29mZnNldCtldC5fbGVuZ3RoLzIsYT1rLmwrKGV0LnBvc2l0aW9ufHwwKSprLncrKFwicmlnaHRcIj09PWV0LnNpZGU/MTArZSooZXQuc2hvd3RpY2tsYWJlbHM/MTouNSk6LTEwLWUqKGV0LnNob3d0aWNrbGFiZWxzPy41OjApKTt4dChcImhcIitldC5faWQrXCJ0aXRsZVwiLHthdm9pZDp7c2VsZWN0aW9uOm4uc2VsZWN0KHQpLnNlbGVjdEFsbChcImcuXCIrZXQuX2lkK1widGlja1wiKSxzaWRlOnIudGl0bGUuc2lkZSxvZmZzZXRMZWZ0OmsubCxvZmZzZXRUb3A6MCxtYXhTaGlmdDp2LndpZHRofSxhdHRyaWJ1dGVzOnt4OmEseTppLFwidGV4dC1hbmNob3JcIjpcIm1pZGRsZVwifSx0cmFuc2Zvcm06e3JvdGF0ZTpcIi05MFwiLG9mZnNldDowfX0pfX1dKX0sYS5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7dmFyIG49VStyLm91dGxpbmV3aWR0aC8yK2YuYkJveChjdC5ub2RlKCkpLndpZHRoO2lmKChOPWx0LnNlbGVjdChcInRleHRcIikpLm5vZGUoKSYmIU4uY2xhc3NlZChBLmpzUGxhY2Vob2xkZXIpKXt2YXIgaSxvPWx0LnNlbGVjdChcIi5oXCIrZXQuX2lkK1widGl0bGUtbWF0aC1ncm91cFwiKS5ub2RlKCk7aT1vJiYtMSE9PVtcInRvcFwiLFwiYm90dG9tXCJdLmluZGV4T2Yoci50aXRsZS5zaWRlKT9mLmJCb3gobykud2lkdGg6Zi5iQm94KGx0Lm5vZGUoKSkucmlnaHQtWi1rLmwsbj1NYXRoLm1heChuLGkpfXZhciBzPTIqci54cGFkK24rci5ib3JkZXJ3aWR0aCtyLm91dGxpbmV3aWR0aC8yLGw9Sy1RO3N0LnNlbGVjdChcIi5jYmJnXCIpLmF0dHIoe3g6Wi1yLnhwYWQtKHIuYm9yZGVyd2lkdGgrci5vdXRsaW5ld2lkdGgpLzIseTpRLVcsd2lkdGg6TWF0aC5tYXgocywyKSxoZWlnaHQ6TWF0aC5tYXgobCsyKlcsMil9KS5jYWxsKHAuZmlsbCxyLmJnY29sb3IpLmNhbGwocC5zdHJva2Usci5ib3JkZXJjb2xvcikuc3R5bGUoe1wic3Ryb2tlLXdpZHRoXCI6ci5ib3JkZXJ3aWR0aH0pLHN0LnNlbGVjdEFsbChcIi5jYm91dGxpbmVcIikuYXR0cih7eDpaLHk6UStyLnlwYWQrKFwidG9wXCI9PT1yLnRpdGxlLnNpZGU/dXQ6MCksd2lkdGg6TWF0aC5tYXgoVSwyKSxoZWlnaHQ6TWF0aC5tYXgobC0yKnIueXBhZC11dCwyKX0pLmNhbGwocC5zdHJva2Usci5vdXRsaW5lY29sb3IpLnN0eWxlKHtmaWxsOlwiTm9uZVwiLFwic3Ryb2tlLXdpZHRoXCI6ci5vdXRsaW5ld2lkdGh9KTt2YXIgYz0oe2NlbnRlcjouNSxyaWdodDoxfVtyLnhhbmNob3JdfHwwKSpzO3N0LmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIisoay5sLWMpK1wiLFwiK2sudCtcIilcIik7dmFyIHU9e30saD15W3IueWFuY2hvcl0sZD14W3IueWFuY2hvcl07XCJwaXhlbHNcIj09PXIubGVubW9kZT8odS55PXIueSx1LnQ9bCpoLHUuYj1sKmQpOih1LnQ9dS5iPTAsdS55dD1yLnkrci5sZW4qaCx1LnliPXIueS1yLmxlbipkKTt2YXIgZz15W3IueGFuY2hvcl0sdj14W3IueGFuY2hvcl07aWYoXCJwaXhlbHNcIj09PXIudGhpY2tuZXNzbW9kZSl1Lng9ci54LHUubD1zKmcsdS5yPXMqdjtlbHNle3ZhciBtPXMtVTt1Lmw9bSpnLHUucj1tKnYsdS54bD1yLngtci50aGlja25lc3MqZyx1LnhyPXIueCtyLnRoaWNrbmVzcyp2fWEuYXV0b01hcmdpbih0LGUsdSl9XSx0KTtpZihtdCYmbXQudGhlbiYmKHQuX3Byb21pc2VzfHxbXSkucHVzaChtdCksdC5fY29udGV4dC5lZGl0cy5jb2xvcmJhclBvc2l0aW9uKWwuaW5pdCh7ZWxlbWVudDpzdC5ub2RlKCksZ2Q6dCxwcmVwRm46ZnVuY3Rpb24oKXtkdD1zdC5hdHRyKFwidHJhbnNmb3JtXCIpLGgoc3QpfSxtb3ZlRm46ZnVuY3Rpb24odCxlKXtzdC5hdHRyKFwidHJhbnNmb3JtXCIsZHQrXCIgdHJhbnNsYXRlKFwiK3QrXCIsXCIrZStcIilcIiksZ3Q9bC5hbGlnbigkK3Qvay53LHEsMCwxLHIueGFuY2hvciksdnQ9bC5hbGlnbihKLWUvay5oLEcsMCwxLHIueWFuY2hvcik7dmFyIG49bC5nZXRDdXJzb3IoZ3QsdnQsci54YW5jaG9yLHIueWFuY2hvcik7aChzdCxuKX0sZG9uZUZuOmZ1bmN0aW9uKCl7aWYoaChzdCksdm9pZCAwIT09Z3QmJnZvaWQgMCE9PXZ0KXt2YXIgZT17fTtlW1MoXCJ4XCIpXT1ndCxlW1MoXCJ5XCIpXT12dCxvLmNhbGwoXCJfZ3VpUmVzdHlsZVwiLHQsZSxNKCkuaW5kZXgpfX19KTtyZXR1cm4gbXR9ZnVuY3Rpb24geXQodCxlKXtyZXR1cm4gYy5jb2VyY2UodHQsZXQsdyx0LGUpfWZ1bmN0aW9uIHh0KGUscil7dmFyIG49e3Byb3BDb250YWluZXI6ZXQscHJvcE5hbWU6UyhcInRpdGxlXCIpLHRyYWNlSW5kZXg6TSgpLmluZGV4LHBsYWNlaG9sZGVyOnYuX2RmbHRUaXRsZS5jb2xvcmJhcixjb250YWluZXJHcm91cDpzdC5zZWxlY3QoXCIuY2J0aXRsZVwiKX0saT1cImhcIj09PWUuY2hhckF0KDApP2Uuc3Vic3RyKDEpOlwiaFwiK2U7c3Quc2VsZWN0QWxsKFwiLlwiK2krXCIsLlwiK2krXCItbWF0aC1ncm91cFwiKS5yZW1vdmUoKSxkLmRyYXcodCxlLHUobixyfHx7fSkpfXYuX2luZm9sYXllci5zZWxlY3RBbGwoXCJnLlwiK2UpLnJlbW92ZSgpfWZ1bmN0aW9uIE0oKXtmb3IodmFyIHI9ZS5zdWJzdHIoMiksbj0wO248dC5fZnVsbERhdGEubGVuZ3RoO24rKyl7dmFyIGk9dC5fZnVsbERhdGFbbl07aWYoaS51aWQ9PT1yKXJldHVybiBpfX1mdW5jdGlvbiBTKHQpe3ZhciBlPVwiY29sb3JiYXIuXCIscj1NKCkuX21vZHVsZS5jb2xvcmJhci5jb250YWluZXI7cmV0dXJuIHImJihlPXIrXCIuXCIrZSksZSt0fXJldHVybiByLmZpbGxjb2xvcj1udWxsLHIubGluZT17Y29sb3I6bnVsbCx3aWR0aDpudWxsLGRhc2g6bnVsbH0sci5sZXZlbHM9e3N0YXJ0Om51bGwsZW5kOm51bGwsc2l6ZTpudWxsfSxyLmZpbGxsZXZlbHM9bnVsbCxyLmZpbGxncmFkaWVudD1udWxsLHIuenJhbmdlPW51bGwsT2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbih0KXtUW3RdPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyW3RdPWMuaXNQbGFpbk9iamVjdChyW3RdKT9jLmV4dGVuZEZsYXQoclt0XSxlKTplLFQpOnJbdF19fSksVC5vcHRpb25zPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KVwiZnVuY3Rpb25cIj09dHlwZW9mIFRbZV0mJlRbZV0odFtlXSk7cmV0dXJuIFR9LFQuX29wdHM9cixUfX0se1wiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiOjY3MyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9saWIvc2V0Y3Vyc29yXCI6NzIxLFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCI6NzI1LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19kZWZhdWx0c1wiOjc1MSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlc1wiOjc2MSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9wb3NpdGlvbl9kZWZhdWx0c1wiOjc2NCxcIi4uLy4uL3Bsb3RzL3Bsb3RzXCI6ODEwLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9jb2xvclwiOjU3OCxcIi4uL2RyYWdlbGVtZW50XCI6NTk2LFwiLi4vZHJhd2luZ1wiOjU5OSxcIi4uL3RpdGxlc1wiOjY2NixcIi4vYXR0cmlidXRlc1wiOjU3OSxcIi4vY29uc3RhbnRzXCI6NTgxLGQzOjE1NSx0aW55Y29sb3IyOjUyMn1dLDU4NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuLmlzUGxhaW5PYmplY3QodC5jb2xvcmJhcil9fSx7XCIuLi8uLi9saWJcIjo3MDF9XSw1ODU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9zY2FsZXMuanNcIikuc2NhbGVzO09iamVjdC5rZXlzKG4pO2Z1bmN0aW9uIGkodCl7cmV0dXJuXCJgXCIrdCtcImBcIn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0PXR8fFwiXCI7dmFyIHIsYT0oZT1lfHx7fSkuY0xldHRlcnx8XCJjXCIsbz0oXCJvbmx5SWZOdW1lcmljYWxcImluIGU/ZS5vbmx5SWZOdW1lcmljYWw6Qm9vbGVhbih0KSxcIm5vU2NhbGVcImluIGU/ZS5ub1NjYWxlOlwibWFya2VyLmxpbmVcIj09PXQpLHM9XCJzaG93U2NhbGVEZmx0XCJpbiBlP2Uuc2hvd1NjYWxlRGZsdDpcInpcIj09PWEsbD1cInN0cmluZ1wiPT10eXBlb2YgZS5jb2xvcnNjYWxlRGZsdD9uW2UuY29sb3JzY2FsZURmbHRdOm51bGwsYz1lLmVkaXRUeXBlT3ZlcnJpZGV8fFwiXCIsdT10P3QrXCIuXCI6XCJcIjtcImNvbG9yQXR0clwiaW4gZT8ocj1lLmNvbG9yQXR0cixlLmNvbG9yQXR0cik6aSh1KyhyPXt6OlwielwiLGM6XCJjb2xvclwifVthXSkpO3ZhciBoPWErXCJhdXRvXCIsZj1hK1wibWluXCIscD1hK1wibWF4XCIsZD1hK1wibWlkXCIsZz0oaSh1K2gpLGkodStmKSxpKHUrcCkse30pO2dbZl09Z1twXT12b2lkIDA7dmFyIHY9e307dltoXT0hMTt2YXIgbT17fTtyZXR1cm5cImNvbG9yXCI9PT1yJiYobS5jb2xvcj17dmFsVHlwZTpcImNvbG9yXCIsYXJyYXlPazohMCxlZGl0VHlwZTpjfHxcInN0eWxlXCJ9LGUuYW5pbSYmKG0uY29sb3IuYW5pbT0hMCkpLG1baF09e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcImNhbGNcIixpbXBsaWVkRWRpdHM6Z30sbVtmXT17dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6bnVsbCxlZGl0VHlwZTpjfHxcInBsb3RcIixpbXBsaWVkRWRpdHM6dn0sbVtwXT17dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6bnVsbCxlZGl0VHlwZTpjfHxcInBsb3RcIixpbXBsaWVkRWRpdHM6dn0sbVtkXT17dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6bnVsbCxlZGl0VHlwZTpcImNhbGNcIixpbXBsaWVkRWRpdHM6Z30sbS5jb2xvcnNjYWxlPXt2YWxUeXBlOlwiY29sb3JzY2FsZVwiLGVkaXRUeXBlOlwiY2FsY1wiLGRmbHQ6bCxpbXBsaWVkRWRpdHM6e2F1dG9jb2xvcnNjYWxlOiExfX0sbS5hdXRvY29sb3JzY2FsZT17dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExIT09ZS5hdXRvQ29sb3JEZmx0LGVkaXRUeXBlOlwiY2FsY1wiLGltcGxpZWRFZGl0czp7Y29sb3JzY2FsZTp2b2lkIDB9fSxtLnJldmVyc2VzY2FsZT17dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwicGxvdFwifSxvfHwobS5zaG93c2NhbGU9e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDpzLGVkaXRUeXBlOlwiY2FsY1wifSksbX19LHtcIi4vc2NhbGVzLmpzXCI6NTkzfV0sNTg2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQuX2Z1bGxMYXlvdXQsYT1yLnZhbHMsbz1yLmNvbnRhaW5lclN0cixzPXIuY0xldHRlcixsPW8/bi5uZXN0ZWRQcm9wZXJ0eShlLG8pLmdldCgpOmUsYz1zK1wibWluXCIsdT1zK1wibWF4XCIsaD1zK1wibWlkXCIsZj1sW3MrXCJhdXRvXCJdLHA9bFtjXSxkPWxbdV0sZz1sW2hdLHY9bC5jb2xvcnNjYWxlOyExPT09ZiYmdm9pZCAwIT09cHx8KHA9bi5hZ2dOdW1zKE1hdGgubWluLG51bGwsYSkpLCExPT09ZiYmdm9pZCAwIT09ZHx8KGQ9bi5hZ2dOdW1zKE1hdGgubWF4LG51bGwsYSkpLCExIT09ZiYmdm9pZCAwIT09ZyYmKGQtZz5nLXA/cD1nLShkLWcpOmQtZzxnLXAmJihkPWcrKGctcCkpKSxwPT09ZCYmKHAtPS41LGQrPS41KSxsW1wiX1wiK2NdPWxbY109cCxsW1wiX1wiK3VdPWxbdV09ZCxsLmF1dG9jb2xvcnNjYWxlJiYodj1wKmQ8MD9pLmNvbG9yc2NhbGUuZGl2ZXJnaW5nOnA+PTA/aS5jb2xvcnNjYWxlLnNlcXVlbnRpYWw6aS5jb2xvcnNjYWxlLnNlcXVlbnRpYWxtaW51cyxsLl9jb2xvcnNjYWxlPWwuY29sb3JzY2FsZT12KX19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDU4NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9oZWxwZXJzXCIpLmhhc0NvbG9yc2NhbGU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlKXt2YXIgcj10W1wiX1wiK2VdO3ZvaWQgMCE9PXImJih0W2VdPXIpfWZ1bmN0aW9uIHIodCxyKXt2YXIgaT1yLmNvbnRhaW5lcj9uLm5lc3RlZFByb3BlcnR5KHQsci5jb250YWluZXIpLmdldCgpOnQ7aWYoaSl7dmFyIGE9aS56YXV0b3x8aS5jYXV0byxvPXIubWluLHM9ci5tYXg7KGF8fHZvaWQgMD09PWlbb10pJiZlKGksbyksKGF8fHZvaWQgMD09PWlbc10pJiZlKGkscyksaS5hdXRvY29sb3JzY2FsZSYmZShpLFwiY29sb3JzY2FsZVwiKX19Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBvPXRbYV0scz1vLl9tb2R1bGUuY29sb3JiYXI7aWYocylpZihBcnJheS5pc0FycmF5KHMpKWZvcih2YXIgbD0wO2w8cy5sZW5ndGg7bCsrKXIobyxzW2xdKTtlbHNlIHIobyxzKTtpKG8sXCJtYXJrZXIubGluZVwiKSYmcihvLHtjb250YWluZXI6XCJtYXJrZXIubGluZVwiLG1pbjpcImNtaW5cIixtYXg6XCJjbWF4XCJ9KSxpKG8sXCJsaW5lXCIpJiZyKG8se2NvbnRhaW5lcjpcImxpbmVcIixtaW46XCJjbWluXCIsbWF4OlwiY21heFwifSl9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi9oZWxwZXJzXCI6NTg5fV0sNTg4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi9jb2xvcmJhci9oYXNfY29sb3JiYXJcIiksbz10KFwiLi4vY29sb3JiYXIvZGVmYXVsdHNcIikscz10KFwiLi9zY2FsZXNcIikuaXNWYWxpZDtmdW5jdGlvbiBsKHQsZSl7dmFyIHI9ZS5zbGljZSgwLGUubGVuZ3RoLTEpO3JldHVybiBlP2kubmVzdGVkUHJvcGVydHkodCxyKS5nZXQoKXx8e306dH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSxjKXt2YXIgdT1jLnByZWZpeCxoPWMuY0xldHRlcixmPWwodCx1KSxwPWwoZSx1KSxkPWwoZS5fdGVtcGxhdGV8fHt9LHUpfHx7fSxnPWZbaCtcIm1pblwiXSx2PWZbaCtcIm1heFwiXTtpKHUraCtcImF1dG9cIiwhKG4oZykmJm4odikmJmc8dikpP2kodStoK1wibWlkXCIpOihpKHUraCtcIm1pblwiKSxpKHUraCtcIm1heFwiKSk7dmFyIG0seSx4PWYuY29sb3JzY2FsZSxiPWQuY29sb3JzY2FsZTsodm9pZCAwIT09eCYmKG09IXMoeCkpLHZvaWQgMCE9PWImJihtPSFzKGIpKSxpKHUrXCJhdXRvY29sb3JzY2FsZVwiLG0pLGkodStcImNvbG9yc2NhbGVcIiksaSh1K1wicmV2ZXJzZXNjYWxlXCIpLGMubm9TY2FsZXx8XCJtYXJrZXIubGluZS5cIj09PXUpfHwodSYmKHk9YShmKSksaSh1K1wic2hvd3NjYWxlXCIseSkmJm8oZixwLHIpKX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2NvbG9yYmFyL2RlZmF1bHRzXCI6NTgyLFwiLi4vY29sb3JiYXIvaGFzX2NvbG9yYmFyXCI6NTg0LFwiLi9zY2FsZXNcIjo1OTMsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDU4OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJ0aW55Y29sb3IyXCIpLGE9dChcImZhc3QtaXNudW1lcmljXCIpLG89dChcIi4uLy4uL2xpYlwiKSxzPXQoXCIuLi9jb2xvclwiKSxsPXQoXCIuL3NjYWxlc1wiKS5pc1ZhbGlkO2Z1bmN0aW9uIGModCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49ZS0xLGk9MDtuPj0wO24tLSxpKyspe3ZhciBhPXRbbl07cltpXT1bMS1hWzBdLGFbMV1dfXJldHVybiByfWZ1bmN0aW9uIHUodCl7dmFyIGU9e3I6dFswXSxnOnRbMV0sYjp0WzJdLGE6dFszXX07cmV0dXJuIGkoZSkudG9SZ2JTdHJpbmcoKX1lLmV4cG9ydHM9e2hhc0NvbG9yc2NhbGU6ZnVuY3Rpb24odCxlKXt2YXIgcj1lP28ubmVzdGVkUHJvcGVydHkodCxlKS5nZXQoKXx8e306dCxuPXIuY29sb3IsaT0hMTtpZihvLmlzQXJyYXlPclR5cGVkQXJyYXkobikpZm9yKHZhciBzPTA7czxuLmxlbmd0aDtzKyspaWYoYShuW3NdKSl7aT0hMDticmVha31yZXR1cm4gby5pc1BsYWluT2JqZWN0KHIpJiYoaXx8ITA9PT1yLnNob3dzY2FsZXx8YShyLmNtaW4pJiZhKHIuY21heCl8fGwoci5jb2xvcnNjYWxlKXx8by5pc1BsYWluT2JqZWN0KHIuY29sb3JiYXIpKX0sZXh0cmFjdFNjYWxlOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUuY0xldHRlcixuPXQucmV2ZXJzZXNjYWxlP2ModC5jb2xvcnNjYWxlKTp0LmNvbG9yc2NhbGUsaT10W3IrXCJtaW5cIl0sYT10W3IrXCJtYXhcIl0sbz1uLmxlbmd0aCxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSx1PTA7dTxvO3UrKyl7dmFyIGg9blt1XTtzW3VdPWkraFswXSooYS1pKSxsW3VdPWhbMV19cmV0dXJue2RvbWFpbjpzLHJhbmdlOmx9fSxmbGlwU2NhbGU6YyxtYWtlQ29sb3JTY2FsZUZ1bmM6ZnVuY3Rpb24odCxlKXtlPWV8fHt9O2Zvcih2YXIgcj10LmRvbWFpbixvPXQucmFuZ2UsbD1vLmxlbmd0aCxjPW5ldyBBcnJheShsKSxoPTA7aDxsO2grKyl7dmFyIGY9aShvW2hdKS50b1JnYigpO2NbaF09W2YucixmLmcsZi5iLGYuYV19dmFyIHAsZD1uLnNjYWxlLmxpbmVhcigpLmRvbWFpbihyKS5yYW5nZShjKS5jbGFtcCghMCksZz1lLm5vTnVtZXJpY0NoZWNrLHY9ZS5yZXR1cm5BcnJheTtyZXR1cm4ocD1nJiZ2P2Q6Zz9mdW5jdGlvbih0KXtyZXR1cm4gdShkKHQpKX06dj9mdW5jdGlvbih0KXtyZXR1cm4gYSh0KT9kKHQpOmkodCkuaXNWYWxpZCgpP3Q6cy5kZWZhdWx0TGluZX06ZnVuY3Rpb24odCl7cmV0dXJuIGEodCk/dShkKHQpKTppKHQpLmlzVmFsaWQoKT90OnMuZGVmYXVsdExpbmV9KS5kb21haW49ZC5kb21haW4scC5yYW5nZT1mdW5jdGlvbigpe3JldHVybiBvfSxwfX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2NvbG9yXCI6NTc4LFwiLi9zY2FsZXNcIjo1OTMsZDM6MTU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjIsdGlueWNvbG9yMjo1MjJ9XSw1OTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9zY2FsZXNcIiksaT10KFwiLi9oZWxwZXJzXCIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZTpcImNvbXBvbmVudFwiLG5hbWU6XCJjb2xvcnNjYWxlXCIsYXR0cmlidXRlczp0KFwiLi9hdHRyaWJ1dGVzXCIpLGxheW91dEF0dHJpYnV0ZXM6dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dChcIi4vbGF5b3V0X2RlZmF1bHRzXCIpLGhhbmRsZURlZmF1bHRzOnQoXCIuL2RlZmF1bHRzXCIpLGNyb3NzVHJhY2VEZWZhdWx0czp0KFwiLi9jcm9zc190cmFjZV9kZWZhdWx0c1wiKSxjYWxjOnQoXCIuL2NhbGNcIiksc2NhbGVzOm4uc2NhbGVzLGRlZmF1bHRTY2FsZTpuLmRlZmF1bHRTY2FsZSxnZXRTY2FsZTpuLmdldCxpc1ZhbGlkU2NhbGU6bi5pc1ZhbGlkLGhhc0NvbG9yc2NhbGU6aS5oYXNDb2xvcnNjYWxlLGZsaXBTY2FsZTppLmZsaXBTY2FsZSxleHRyYWN0U2NhbGU6aS5leHRyYWN0U2NhbGUsbWFrZUNvbG9yU2NhbGVGdW5jOmkubWFrZUNvbG9yU2NhbGVGdW5jfX0se1wiLi9hdHRyaWJ1dGVzXCI6NTg1LFwiLi9jYWxjXCI6NTg2LFwiLi9jcm9zc190cmFjZV9kZWZhdWx0c1wiOjU4NyxcIi4vZGVmYXVsdHNcIjo1ODgsXCIuL2hlbHBlcnNcIjo1ODksXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6NTkxLFwiLi9sYXlvdXRfZGVmYXVsdHNcIjo1OTIsXCIuL3NjYWxlc1wiOjU5M31dLDU5MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL3NjYWxlc1wiKS5zY2FsZXM7ZS5leHBvcnRzPXtlZGl0VHlwZTpcImNhbGNcIixzZXF1ZW50aWFsOnt2YWxUeXBlOlwiY29sb3JzY2FsZVwiLGRmbHQ6bi5SZWRzLGVkaXRUeXBlOlwiY2FsY1wifSxzZXF1ZW50aWFsbWludXM6e3ZhbFR5cGU6XCJjb2xvcnNjYWxlXCIsZGZsdDpuLkJsdWVzLGVkaXRUeXBlOlwiY2FsY1wifSxkaXZlcmdpbmc6e3ZhbFR5cGU6XCJjb2xvcnNjYWxlXCIsZGZsdDpuLlJkQnUsZWRpdFR5cGU6XCJjYWxjXCJ9fX0se1wiLi9zY2FsZXNcIjo1OTN9XSw1OTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmNvbG9yc2NhbGUsbz1hLm5ld0NvbnRhaW5lcihlLFwiY29sb3JzY2FsZVwiKTtmdW5jdGlvbiBzKHQsZSl7cmV0dXJuIG4uY29lcmNlKHIsbyxpLHQsZSl9cyhcInNlcXVlbnRpYWxcIikscyhcInNlcXVlbnRpYWxtaW51c1wiKSxzKFwiZGl2ZXJnaW5nXCIpfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo1OTF9XSw1OTM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwidGlueWNvbG9yMlwiKSxpPXtHcmV5czpbWzAsXCJyZ2IoMCwwLDApXCJdLFsxLFwicmdiKDI1NSwyNTUsMjU1KVwiXV0sWWxHbkJ1OltbMCxcInJnYig4LDI5LDg4KVwiXSxbLjEyNSxcInJnYigzNyw1MiwxNDgpXCJdLFsuMjUsXCJyZ2IoMzQsOTQsMTY4KVwiXSxbLjM3NSxcInJnYigyOSwxNDUsMTkyKVwiXSxbLjUsXCJyZ2IoNjUsMTgyLDE5NilcIl0sWy42MjUsXCJyZ2IoMTI3LDIwNSwxODcpXCJdLFsuNzUsXCJyZ2IoMTk5LDIzMywxODApXCJdLFsuODc1LFwicmdiKDIzNywyNDgsMjE3KVwiXSxbMSxcInJnYigyNTUsMjU1LDIxNylcIl1dLEdyZWVuczpbWzAsXCJyZ2IoMCw2OCwyNylcIl0sWy4xMjUsXCJyZ2IoMCwxMDksNDQpXCJdLFsuMjUsXCJyZ2IoMzUsMTM5LDY5KVwiXSxbLjM3NSxcInJnYig2NSwxNzEsOTMpXCJdLFsuNSxcInJnYigxMTYsMTk2LDExOClcIl0sWy42MjUsXCJyZ2IoMTYxLDIxNywxNTUpXCJdLFsuNzUsXCJyZ2IoMTk5LDIzMywxOTIpXCJdLFsuODc1LFwicmdiKDIyOSwyNDUsMjI0KVwiXSxbMSxcInJnYigyNDcsMjUyLDI0NSlcIl1dLFlsT3JSZDpbWzAsXCJyZ2IoMTI4LDAsMzgpXCJdLFsuMTI1LFwicmdiKDE4OSwwLDM4KVwiXSxbLjI1LFwicmdiKDIyNywyNiwyOClcIl0sWy4zNzUsXCJyZ2IoMjUyLDc4LDQyKVwiXSxbLjUsXCJyZ2IoMjUzLDE0MSw2MClcIl0sWy42MjUsXCJyZ2IoMjU0LDE3OCw3NilcIl0sWy43NSxcInJnYigyNTQsMjE3LDExOClcIl0sWy44NzUsXCJyZ2IoMjU1LDIzNywxNjApXCJdLFsxLFwicmdiKDI1NSwyNTUsMjA0KVwiXV0sQmx1ZXJlZDpbWzAsXCJyZ2IoMCwwLDI1NSlcIl0sWzEsXCJyZ2IoMjU1LDAsMClcIl1dLFJkQnU6W1swLFwicmdiKDUsMTAsMTcyKVwiXSxbLjM1LFwicmdiKDEwNiwxMzcsMjQ3KVwiXSxbLjUsXCJyZ2IoMTkwLDE5MCwxOTApXCJdLFsuNixcInJnYigyMjAsMTcwLDEzMilcIl0sWy43LFwicmdiKDIzMCwxNDUsOTApXCJdLFsxLFwicmdiKDE3OCwxMCwyOClcIl1dLFJlZHM6W1swLFwicmdiKDIyMCwyMjAsMjIwKVwiXSxbLjIsXCJyZ2IoMjQ1LDE5NSwxNTcpXCJdLFsuNCxcInJnYigyNDUsMTYwLDEwNSlcIl0sWzEsXCJyZ2IoMTc4LDEwLDI4KVwiXV0sQmx1ZXM6W1swLFwicmdiKDUsMTAsMTcyKVwiXSxbLjM1LFwicmdiKDQwLDYwLDE5MClcIl0sWy41LFwicmdiKDcwLDEwMCwyNDUpXCJdLFsuNixcInJnYig5MCwxMjAsMjQ1KVwiXSxbLjcsXCJyZ2IoMTA2LDEzNywyNDcpXCJdLFsxLFwicmdiKDIyMCwyMjAsMjIwKVwiXV0sUGljbmljOltbMCxcInJnYigwLDAsMjU1KVwiXSxbLjEsXCJyZ2IoNTEsMTUzLDI1NSlcIl0sWy4yLFwicmdiKDEwMiwyMDQsMjU1KVwiXSxbLjMsXCJyZ2IoMTUzLDIwNCwyNTUpXCJdLFsuNCxcInJnYigyMDQsMjA0LDI1NSlcIl0sWy41LFwicmdiKDI1NSwyNTUsMjU1KVwiXSxbLjYsXCJyZ2IoMjU1LDIwNCwyNTUpXCJdLFsuNyxcInJnYigyNTUsMTUzLDI1NSlcIl0sWy44LFwicmdiKDI1NSwxMDIsMjA0KVwiXSxbLjksXCJyZ2IoMjU1LDEwMiwxMDIpXCJdLFsxLFwicmdiKDI1NSwwLDApXCJdXSxSYWluYm93OltbMCxcInJnYigxNTAsMCw5MClcIl0sWy4xMjUsXCJyZ2IoMCwwLDIwMClcIl0sWy4yNSxcInJnYigwLDI1LDI1NSlcIl0sWy4zNzUsXCJyZ2IoMCwxNTIsMjU1KVwiXSxbLjUsXCJyZ2IoNDQsMjU1LDE1MClcIl0sWy42MjUsXCJyZ2IoMTUxLDI1NSwwKVwiXSxbLjc1LFwicmdiKDI1NSwyMzQsMClcIl0sWy44NzUsXCJyZ2IoMjU1LDExMSwwKVwiXSxbMSxcInJnYigyNTUsMCwwKVwiXV0sUG9ydGxhbmQ6W1swLFwicmdiKDEyLDUxLDEzMSlcIl0sWy4yNSxcInJnYigxMCwxMzYsMTg2KVwiXSxbLjUsXCJyZ2IoMjQyLDIxMSw1NilcIl0sWy43NSxcInJnYigyNDIsMTQzLDU2KVwiXSxbMSxcInJnYigyMTcsMzAsMzApXCJdXSxKZXQ6W1swLFwicmdiKDAsMCwxMzEpXCJdLFsuMTI1LFwicmdiKDAsNjAsMTcwKVwiXSxbLjM3NSxcInJnYig1LDI1NSwyNTUpXCJdLFsuNjI1LFwicmdiKDI1NSwyNTUsMClcIl0sWy44NzUsXCJyZ2IoMjUwLDAsMClcIl0sWzEsXCJyZ2IoMTI4LDAsMClcIl1dLEhvdDpbWzAsXCJyZ2IoMCwwLDApXCJdLFsuMyxcInJnYigyMzAsMCwwKVwiXSxbLjYsXCJyZ2IoMjU1LDIxMCwwKVwiXSxbMSxcInJnYigyNTUsMjU1LDI1NSlcIl1dLEJsYWNrYm9keTpbWzAsXCJyZ2IoMCwwLDApXCJdLFsuMixcInJnYigyMzAsMCwwKVwiXSxbLjQsXCJyZ2IoMjMwLDIxMCwwKVwiXSxbLjcsXCJyZ2IoMjU1LDI1NSwyNTUpXCJdLFsxLFwicmdiKDE2MCwyMDAsMjU1KVwiXV0sRWFydGg6W1swLFwicmdiKDAsMCwxMzApXCJdLFsuMSxcInJnYigwLDE4MCwxODApXCJdLFsuMixcInJnYig0MCwyMTAsNDApXCJdLFsuNCxcInJnYigyMzAsMjMwLDUwKVwiXSxbLjYsXCJyZ2IoMTIwLDcwLDIwKVwiXSxbMSxcInJnYigyNTUsMjU1LDI1NSlcIl1dLEVsZWN0cmljOltbMCxcInJnYigwLDAsMClcIl0sWy4xNSxcInJnYigzMCwwLDEwMClcIl0sWy40LFwicmdiKDEyMCwwLDEwMClcIl0sWy42LFwicmdiKDE2MCw5MCwwKVwiXSxbLjgsXCJyZ2IoMjMwLDIwMCwwKVwiXSxbMSxcInJnYigyNTUsMjUwLDIyMClcIl1dLFZpcmlkaXM6W1swLFwiIzQ0MDE1NFwiXSxbLjA2Mjc0NTA5ODAzOTIxNTY5LFwiIzQ4MTg2YVwiXSxbLjEyNTQ5MDE5NjA3ODQzMTM3LFwiIzQ3MmQ3YlwiXSxbLjE4ODIzNTI5NDExNzY0NzA2LFwiIzQyNDA4NlwiXSxbLjI1MDk4MDM5MjE1Njg2Mjc0LFwiIzNiNTI4YlwiXSxbLjMxMzcyNTQ5MDE5NjA3ODQsXCIjMzM2MzhkXCJdLFsuMzc2NDcwNTg4MjM1Mjk0MSxcIiMyYzcyOGVcIl0sWy40MzkyMTU2ODYyNzQ1MDk4LFwiIzI2ODI4ZVwiXSxbLjUwMTk2MDc4NDMxMzcyNTUsXCIjMjE5MThjXCJdLFsuNTY0NzA1ODgyMzUyOTQxMixcIiMxZmEwODhcIl0sWy42Mjc0NTA5ODAzOTIxNTY5LFwiIzI4YWU4MFwiXSxbLjY5MDE5NjA3ODQzMTM3MjUsXCIjM2ZiYzczXCJdLFsuNzUyOTQxMTc2NDcwNTg4MixcIiM1ZWM5NjJcIl0sWy44MTU2ODYyNzQ1MDk4MDM5LFwiIzg0ZDQ0YlwiXSxbLjg3ODQzMTM3MjU0OTAxOTYsXCIjYWRkYzMwXCJdLFsuOTQxMTc2NDcwNTg4MjM1MyxcIiNkOGUyMTlcIl0sWzEsXCIjZmRlNzI1XCJdXSxDaXZpZGlzOltbMCxcInJnYigwLDMyLDc2KVwiXSxbLjA1ODgyNCxcInJnYigwLDQyLDEwMilcIl0sWy4xMTc2NDcsXCJyZ2IoMCw1MiwxMTApXCJdLFsuMTc2NDcxLFwicmdiKDM5LDYzLDEwOClcIl0sWy4yMzUyOTQsXCJyZ2IoNjAsNzQsMTA3KVwiXSxbLjI5NDExOCxcInJnYig3Niw4NSwxMDcpXCJdLFsuMzUyOTQxLFwicmdiKDkxLDk1LDEwOSlcIl0sWy40MTE3NjUsXCJyZ2IoMTA0LDEwNiwxMTIpXCJdLFsuNDcwNTg4LFwicmdiKDExNywxMTcsMTE3KVwiXSxbLjUyOTQxMixcInJnYigxMzEsMTI5LDEyMClcIl0sWy41ODgyMzUsXCJyZ2IoMTQ2LDE0MCwxMjApXCJdLFsuNjQ3MDU5LFwicmdiKDE2MSwxNTIsMTE4KVwiXSxbLjcwNTg4MixcInJnYigxNzYsMTY1LDExNClcIl0sWy43NjQ3MDYsXCJyZ2IoMTkyLDE3NywxMDkpXCJdLFsuODIzNTI5LFwicmdiKDIwOSwxOTEsMTAyKVwiXSxbLjg4MjM1MyxcInJnYigyMjUsMjA0LDkyKVwiXSxbLjk0MTE3NixcInJnYigyNDMsMjE5LDc5KVwiXSxbMSxcInJnYigyNTUsMjMzLDY5KVwiXV19LGE9aS5SZEJ1O2Z1bmN0aW9uIG8odCl7dmFyIGU9MDtpZighQXJyYXkuaXNBcnJheSh0KXx8dC5sZW5ndGg8MilyZXR1cm4hMTtpZighdFswXXx8IXRbdC5sZW5ndGgtMV0pcmV0dXJuITE7aWYoMCE9K3RbMF1bMF18fDEhPSt0W3QubGVuZ3RoLTFdWzBdKXJldHVybiExO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgaT10W3JdO2lmKDIhPT1pLmxlbmd0aHx8K2lbMF08ZXx8IW4oaVsxXSkuaXNWYWxpZCgpKXJldHVybiExO2U9K2lbMF19cmV0dXJuITB9ZS5leHBvcnRzPXtzY2FsZXM6aSxkZWZhdWx0U2NhbGU6YSxnZXQ6ZnVuY3Rpb24odCxlKXtpZihlfHwoZT1hKSwhdClyZXR1cm4gZTtmdW5jdGlvbiByKCl7dHJ5e3Q9aVt0XXx8SlNPTi5wYXJzZSh0KX1jYXRjaChyKXt0PWV9fXJldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiYocigpLFwic3RyaW5nXCI9PXR5cGVvZiB0JiZyKCkpLG8odCk/dDplfSxpc1ZhbGlkOmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT1pW3RdfHxvKHQpfX19LHt0aW55Y29sb3IyOjUyMn1dLDU5NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPSh0LXIpLyhuLXIpLG89YStlLyhuLXIpLHM9KGErbykvMjtyZXR1cm5cImxlZnRcIj09PWl8fFwiYm90dG9tXCI9PT1pP2E6XCJjZW50ZXJcIj09PWl8fFwibWlkZGxlXCI9PT1pP3M6XCJyaWdodFwiPT09aXx8XCJ0b3BcIj09PWk/bzphPDIvMy1zP2E6bz40LzMtcz9vOnN9fSx7fV0sNTk1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPVtbXCJzdy1yZXNpemVcIixcInMtcmVzaXplXCIsXCJzZS1yZXNpemVcIl0sW1widy1yZXNpemVcIixcIm1vdmVcIixcImUtcmVzaXplXCJdLFtcIm53LXJlc2l6ZVwiLFwibi1yZXNpemVcIixcIm5lLXJlc2l6ZVwiXV07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3JldHVybiB0PVwibGVmdFwiPT09cj8wOlwiY2VudGVyXCI9PT1yPzE6XCJyaWdodFwiPT09cj8yOm4uY29uc3RyYWluKE1hdGguZmxvb3IoMyp0KSwwLDIpLGU9XCJib3R0b21cIj09PWE/MDpcIm1pZGRsZVwiPT09YT8xOlwidG9wXCI9PT1hPzI6bi5jb25zdHJhaW4oTWF0aC5mbG9vcigzKmUpLDAsMiksaVtlXVt0XX19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDU5NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJtb3VzZS1ldmVudC1vZmZzZXRcIiksaT10KFwiaGFzLWhvdmVyXCIpLGE9dChcImhhcy1wYXNzaXZlLWV2ZW50c1wiKSxvPXQoXCIuLi8uLi9saWJcIikucmVtb3ZlRWxlbWVudCxzPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzXCIpLGw9dChcIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnNcIiksYz1lLmV4cG9ydHM9e307Yy5hbGlnbj10KFwiLi9hbGlnblwiKSxjLmdldEN1cnNvcj10KFwiLi9jdXJzb3JcIik7dmFyIHU9dChcIi4vdW5ob3ZlclwiKTtmdW5jdGlvbiBoKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTt0LmNsYXNzTmFtZT1cImRyYWdjb3ZlclwiO3ZhciBlPXQuc3R5bGU7cmV0dXJuIGUucG9zaXRpb249XCJmaXhlZFwiLGUubGVmdD0wLGUucmlnaHQ9MCxlLnRvcD0wLGUuYm90dG9tPTAsZS56SW5kZXg9OTk5OTk5OTk5LGUuYmFja2dyb3VuZD1cIm5vbmVcIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLHR9ZnVuY3Rpb24gZih0KXtyZXR1cm4gbih0LmNoYW5nZWRUb3VjaGVzP3QuY2hhbmdlZFRvdWNoZXNbMF06dCxkb2N1bWVudC5ib2R5KX1jLnVuaG92ZXI9dS53cmFwcGVkLGMudW5ob3ZlclJhdz11LnJhdyxjLmluaXQ9ZnVuY3Rpb24odCl7dmFyIGUscixuLHUscCxkLGcsdixtPXQuZ2QseT0xLHg9bC5EQkxDTElDS0RFTEFZLGI9dC5lbGVtZW50O20uX21vdXNlRG93blRpbWV8fChtLl9tb3VzZURvd25UaW1lPTApLGIuc3R5bGUucG9pbnRlckV2ZW50cz1cImFsbFwiLGIub25tb3VzZWRvd249dyxhPyhiLl9vbnRvdWNoc3RhcnQmJmIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIixiLl9vbnRvdWNoc3RhcnQpLGIuX29udG91Y2hzdGFydD13LGIuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIix3LHtwYXNzaXZlOiExfSkpOmIub250b3VjaHN0YXJ0PXc7dmFyIF89dC5jbGFtcEZufHxmdW5jdGlvbih0LGUscil7cmV0dXJuIE1hdGguYWJzKHQpPHImJih0PTApLE1hdGguYWJzKGUpPHImJihlPTApLFt0LGVdfTtmdW5jdGlvbiB3KGEpe20uX2RyYWdnZWQ9ITEsbS5fZHJhZ2dpbmc9ITA7dmFyIG89ZihhKTtlPW9bMF0scj1vWzFdLGc9YS50YXJnZXQsZD1hLHY9Mj09PWEuYnV0dG9uc3x8YS5jdHJsS2V5LFwidW5kZWZpbmVkXCI9PXR5cGVvZiBhLmNsaWVudFgmJlwidW5kZWZpbmVkXCI9PXR5cGVvZiBhLmNsaWVudFkmJihhLmNsaWVudFg9ZSxhLmNsaWVudFk9ciksKG49KG5ldyBEYXRlKS5nZXRUaW1lKCkpLW0uX21vdXNlRG93blRpbWU8eD95Kz0xOih5PTEsbS5fbW91c2VEb3duVGltZT1uKSx0LnByZXBGbiYmdC5wcmVwRm4oYSxlLHIpLGkmJiF2PyhwPWgoKSkuc3R5bGUuY3Vyc29yPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGIpLmN1cnNvcjppfHwocD1kb2N1bWVudCx1PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuY3Vyc29yLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5jdXJzb3I9d2luZG93LmdldENvbXB1dGVkU3R5bGUoYikuY3Vyc29yKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLEEpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLEEpLCExIT09dC5kcmFnbW9kZSYmKGEucHJldmVudERlZmF1bHQoKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsayksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLGspKX1mdW5jdGlvbiBrKG4pe24ucHJldmVudERlZmF1bHQoKTt2YXIgaT1mKG4pLGE9dC5taW5EcmFnfHxzLk1JTkRSQUcsbz1fKGlbMF0tZSxpWzFdLXIsYSksbD1vWzBdLHU9b1sxXTsobHx8dSkmJihtLl9kcmFnZ2VkPSEwLGMudW5ob3ZlcihtKSksbS5fZHJhZ2dlZCYmdC5tb3ZlRm4mJiF2JiYobS5fZHJhZ2RhdGE9e2VsZW1lbnQ6YixkeDpsLGR5OnV9LHQubW92ZUZuKGwsdSkpfWZ1bmN0aW9uIEEoZSl7aWYoZGVsZXRlIG0uX2RyYWdkYXRhLCExIT09dC5kcmFnbW9kZSYmKGUucHJldmVudERlZmF1bHQoKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsayksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLGspKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLEEpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLEEpLGk/byhwKTp1JiYocC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuY3Vyc29yPXUsdT1udWxsKSxtLl9kcmFnZ2luZyl7aWYobS5fZHJhZ2dpbmc9ITEsKG5ldyBEYXRlKS5nZXRUaW1lKCktbS5fbW91c2VEb3duVGltZT54JiYoeT1NYXRoLm1heCh5LTEsMSkpLG0uX2RyYWdnZWQpdC5kb25lRm4mJnQuZG9uZUZuKCk7ZWxzZSBpZih0LmNsaWNrRm4mJnQuY2xpY2tGbih5LGQpLCF2KXt2YXIgcjt0cnl7cj1uZXcgTW91c2VFdmVudChcImNsaWNrXCIsZSl9Y2F0Y2godCl7dmFyIG49ZihlKTsocj1kb2N1bWVudC5jcmVhdGVFdmVudChcIk1vdXNlRXZlbnRzXCIpKS5pbml0TW91c2VFdmVudChcImNsaWNrXCIsZS5idWJibGVzLGUuY2FuY2VsYWJsZSxlLnZpZXcsZS5kZXRhaWwsZS5zY3JlZW5YLGUuc2NyZWVuWSxuWzBdLG5bMV0sZS5jdHJsS2V5LGUuYWx0S2V5LGUuc2hpZnRLZXksZS5tZXRhS2V5LGUuYnV0dG9uLGUucmVsYXRlZFRhcmdldCl9Zy5kaXNwYXRjaEV2ZW50KHIpfW0uX2RyYWdnaW5nPSExLG0uX2RyYWdnZWQ9ITF9ZWxzZSBtLl9kcmFnZ2VkPSExfX0sYy5jb3ZlclNsaXA9aH0se1wiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9uc1wiOjY3NyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHNcIjo3NTUsXCIuL2FsaWduXCI6NTk0LFwiLi9jdXJzb3JcIjo1OTUsXCIuL3VuaG92ZXJcIjo1OTcsXCJoYXMtaG92ZXJcIjo0MDMsXCJoYXMtcGFzc2l2ZS1ldmVudHNcIjo0MDQsXCJtb3VzZS1ldmVudC1vZmZzZXRcIjo0Mjl9XSw1OTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliL2V2ZW50c1wiKSxpPXQoXCIuLi8uLi9saWIvdGhyb3R0bGVcIiksYT10KFwiLi4vLi4vbGliL2dldF9ncmFwaF9kaXZcIiksbz10KFwiLi4vZngvY29uc3RhbnRzXCIpLHM9ZS5leHBvcnRzPXt9O3Mud3JhcHBlZD1mdW5jdGlvbih0LGUscil7KHQ9YSh0KSkuX2Z1bGxMYXlvdXQmJmkuY2xlYXIodC5fZnVsbExheW91dC5fdWlkK28uSE9WRVJJRCkscy5yYXcodCxlLHIpfSxzLnJhdz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsaT10Ll9ob3ZlcmRhdGE7ZXx8KGU9e30pLGUudGFyZ2V0JiYhMT09PW4udHJpZ2dlckhhbmRsZXIodCxcInBsb3RseV9iZWZvcmVob3ZlclwiLGUpfHwoci5faG92ZXJsYXllci5zZWxlY3RBbGwoXCJnXCIpLnJlbW92ZSgpLHIuX2hvdmVybGF5ZXIuc2VsZWN0QWxsKFwibGluZVwiKS5yZW1vdmUoKSxyLl9ob3ZlcmxheWVyLnNlbGVjdEFsbChcImNpcmNsZVwiKS5yZW1vdmUoKSx0Ll9ob3ZlcmRhdGE9dm9pZCAwLGUudGFyZ2V0JiZpJiZ0LmVtaXQoXCJwbG90bHlfdW5ob3ZlclwiLHtldmVudDplLHBvaW50czppfSkpfX0se1wiLi4vLi4vbGliL2V2ZW50c1wiOjY5MCxcIi4uLy4uL2xpYi9nZXRfZ3JhcGhfZGl2XCI6Njk3LFwiLi4vLi4vbGliL3Rocm90dGxlXCI6NzI2LFwiLi4vZngvY29uc3RhbnRzXCI6NjExfV0sNTk4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ci5kYXNoPXt2YWxUeXBlOlwic3RyaW5nXCIsdmFsdWVzOltcInNvbGlkXCIsXCJkb3RcIixcImRhc2hcIixcImxvbmdkYXNoXCIsXCJkYXNoZG90XCIsXCJsb25nZGFzaGRvdFwiXSxkZmx0Olwic29saWRcIixlZGl0VHlwZTpcInN0eWxlXCJ9fSx7fV0sNTk5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcImZhc3QtaXNudW1lcmljXCIpLGE9dChcInRpbnljb2xvcjJcIiksbz10KFwiLi4vLi4vcmVnaXN0cnlcIikscz10KFwiLi4vY29sb3JcIiksbD10KFwiLi4vY29sb3JzY2FsZVwiKSxjPXQoXCIuLi8uLi9saWJcIiksdT10KFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCIpLGg9dChcIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzXCIpLGY9dChcIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIikuTElORV9TUEFDSU5HLHA9dChcIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnNcIikuREVTRUxFQ1RESU0sZD10KFwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXNcIiksZz10KFwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jXCIpLHY9ZS5leHBvcnRzPXt9O3YuZm9udD1mdW5jdGlvbih0LGUscixuKXtjLmlzUGxhaW5PYmplY3QoZSkmJihuPWUuY29sb3Iscj1lLnNpemUsZT1lLmZhbWlseSksZSYmdC5zdHlsZShcImZvbnQtZmFtaWx5XCIsZSkscisxJiZ0LnN0eWxlKFwiZm9udC1zaXplXCIscitcInB4XCIpLG4mJnQuY2FsbChzLmZpbGwsbil9LHYuc2V0UG9zaXRpb249ZnVuY3Rpb24odCxlLHIpe3QuYXR0cihcInhcIixlKS5hdHRyKFwieVwiLHIpfSx2LnNldFNpemU9ZnVuY3Rpb24odCxlLHIpe3QuYXR0cihcIndpZHRoXCIsZSkuYXR0cihcImhlaWdodFwiLHIpfSx2LnNldFJlY3Q9ZnVuY3Rpb24odCxlLHIsbixpKXt0LmNhbGwodi5zZXRQb3NpdGlvbixlLHIpLmNhbGwodi5zZXRTaXplLG4saSl9LHYudHJhbnNsYXRlUG9pbnQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9ci5jMnAodC54KSxvPW4uYzJwKHQueSk7cmV0dXJuISEoaShhKSYmaShvKSYmZS5ub2RlKCkpJiYoXCJ0ZXh0XCI9PT1lLm5vZGUoKS5ub2RlTmFtZT9lLmF0dHIoXCJ4XCIsYSkuYXR0cihcInlcIixvKTplLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIithK1wiLFwiK28rXCIpXCIpLCEwKX0sdi50cmFuc2xhdGVQb2ludHM9ZnVuY3Rpb24odCxlLHIpe3QuZWFjaChmdW5jdGlvbih0KXt2YXIgaT1uLnNlbGVjdCh0aGlzKTt2LnRyYW5zbGF0ZVBvaW50KHQsaSxlLHIpfSl9LHYuaGlkZU91dHNpZGVSYW5nZVBvaW50PWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtlLmF0dHIoXCJkaXNwbGF5XCIsci5pc1B0V2l0aGluUmFuZ2UodCxpKSYmbi5pc1B0V2l0aGluUmFuZ2UodCxhKT9udWxsOlwibm9uZVwiKX0sdi5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzPWZ1bmN0aW9uKHQsZSl7aWYoZS5faGFzQ2xpcE9uQXhpc0ZhbHNlKXt2YXIgcj1lLnhheGlzLGk9ZS55YXhpczt0LmVhY2goZnVuY3Rpb24oZSl7dmFyIGE9ZVswXS50cmFjZSxvPWEueGNhbGVuZGFyLHM9YS55Y2FsZW5kYXIsbD1cImJhclwiPT09YS50eXBlP1wiLmJhcnRleHRcIjpcIndhdGVyZmFsbFwiPT09YS50eXBlP1wiLmJhcnRleHQsLmxpbmVcIjpcIi5wb2ludCwudGV4dHBvaW50XCI7dC5zZWxlY3RBbGwobCkuZWFjaChmdW5jdGlvbih0KXt2LmhpZGVPdXRzaWRlUmFuZ2VQb2ludCh0LG4uc2VsZWN0KHRoaXMpLHIsaSxvLHMpfSl9KX19LHYuY3Jpc3BSb3VuZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIGUmJmkoZSk/dC5fY29udGV4dC5zdGF0aWNQbG90P2U6ZTwxPzE6TWF0aC5yb3VuZChlKTpyfHwwfSx2LnNpbmdsZUxpbmVTdHlsZT1mdW5jdGlvbih0LGUscixuLGkpe2Uuc3R5bGUoXCJmaWxsXCIsXCJub25lXCIpO3ZhciBhPSgoKHR8fFtdKVswXXx8e30pLnRyYWNlfHx7fSkubGluZXx8e30sbz1yfHxhLndpZHRofHwwLGw9aXx8YS5kYXNofHxcIlwiO3Muc3Ryb2tlKGUsbnx8YS5jb2xvciksdi5kYXNoTGluZShlLGwsbyl9LHYubGluZUdyb3VwU3R5bGU9ZnVuY3Rpb24odCxlLHIsaSl7dC5zdHlsZShcImZpbGxcIixcIm5vbmVcIikuZWFjaChmdW5jdGlvbih0KXt2YXIgYT0oKCh0fHxbXSlbMF18fHt9KS50cmFjZXx8e30pLmxpbmV8fHt9LG89ZXx8YS53aWR0aHx8MCxsPWl8fGEuZGFzaHx8XCJcIjtuLnNlbGVjdCh0aGlzKS5jYWxsKHMuc3Ryb2tlLHJ8fGEuY29sb3IpLmNhbGwodi5kYXNoTGluZSxsLG8pfSl9LHYuZGFzaExpbmU9ZnVuY3Rpb24odCxlLHIpe3I9K3J8fDAsZT12LmRhc2hTdHlsZShlLHIpLHQuc3R5bGUoe1wic3Ryb2tlLWRhc2hhcnJheVwiOmUsXCJzdHJva2Utd2lkdGhcIjpyK1wicHhcIn0pfSx2LmRhc2hTdHlsZT1mdW5jdGlvbih0LGUpe2U9K2V8fDE7dmFyIHI9TWF0aC5tYXgoZSwzKTtyZXR1cm5cInNvbGlkXCI9PT10P3Q9XCJcIjpcImRvdFwiPT09dD90PXIrXCJweCxcIityK1wicHhcIjpcImRhc2hcIj09PXQ/dD0zKnIrXCJweCxcIiszKnIrXCJweFwiOlwibG9uZ2Rhc2hcIj09PXQ/dD01KnIrXCJweCxcIis1KnIrXCJweFwiOlwiZGFzaGRvdFwiPT09dD90PTMqcitcInB4LFwiK3IrXCJweCxcIityK1wicHgsXCIrcitcInB4XCI6XCJsb25nZGFzaGRvdFwiPT09dCYmKHQ9NSpyK1wicHgsXCIrMipyK1wicHgsXCIrcitcInB4LFwiKzIqcitcInB4XCIpLHR9LHYuc2luZ2xlRmlsbFN0eWxlPWZ1bmN0aW9uKHQpe3ZhciBlPSgoKG4uc2VsZWN0KHQubm9kZSgpKS5kYXRhKClbMF18fFtdKVswXXx8e30pLnRyYWNlfHx7fSkuZmlsbGNvbG9yO2UmJnQuY2FsbChzLmZpbGwsZSl9LHYuZmlsbEdyb3VwU3R5bGU9ZnVuY3Rpb24odCl7dC5zdHlsZShcInN0cm9rZS13aWR0aFwiLDApLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcyk7dFswXS50cmFjZSYmZS5jYWxsKHMuZmlsbCx0WzBdLnRyYWNlLmZpbGxjb2xvcil9KX07dmFyIG09dChcIi4vc3ltYm9sX2RlZnNcIik7di5zeW1ib2xOYW1lcz1bXSx2LnN5bWJvbEZ1bmNzPVtdLHYuc3ltYm9sTmVlZExpbmVzPXt9LHYuc3ltYm9sTm9Eb3Q9e30sdi5zeW1ib2xOb0ZpbGw9e30sdi5zeW1ib2xMaXN0PVtdLE9iamVjdC5rZXlzKG0pLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9bVt0XTt2LnN5bWJvbExpc3Q9di5zeW1ib2xMaXN0LmNvbmNhdChbZS5uLHQsZS5uKzEwMCx0K1wiLW9wZW5cIl0pLHYuc3ltYm9sTmFtZXNbZS5uXT10LHYuc3ltYm9sRnVuY3NbZS5uXT1lLmYsZS5uZWVkTGluZSYmKHYuc3ltYm9sTmVlZExpbmVzW2Uubl09ITApLGUubm9Eb3Q/di5zeW1ib2xOb0RvdFtlLm5dPSEwOnYuc3ltYm9sTGlzdD12LnN5bWJvbExpc3QuY29uY2F0KFtlLm4rMjAwLHQrXCItZG90XCIsZS5uKzMwMCx0K1wiLW9wZW4tZG90XCJdKSxlLm5vRmlsbCYmKHYuc3ltYm9sTm9GaWxsW2Uubl09ITApfSk7dmFyIHk9di5zeW1ib2xOYW1lcy5sZW5ndGgseD1cIk0wLDAuNUwwLjUsMEwwLC0wLjVMLTAuNSwwWlwiO2Z1bmN0aW9uIGIodCxlKXt2YXIgcj10JTEwMDtyZXR1cm4gdi5zeW1ib2xGdW5jc1tyXShlKSsodD49MjAwP3g6XCJcIil9di5zeW1ib2xOdW1iZXI9ZnVuY3Rpb24odCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpe3ZhciBlPTA7dC5pbmRleE9mKFwiLW9wZW5cIik+MCYmKGU9MTAwLHQ9dC5yZXBsYWNlKFwiLW9wZW5cIixcIlwiKSksdC5pbmRleE9mKFwiLWRvdFwiKT4wJiYoZSs9MjAwLHQ9dC5yZXBsYWNlKFwiLWRvdFwiLFwiXCIpKSwodD12LnN5bWJvbE5hbWVzLmluZGV4T2YodCkpPj0wJiYodCs9ZSl9cmV0dXJuIHQlMTAwPj15fHx0Pj00MDA/MDpNYXRoLmZsb29yKE1hdGgubWF4KHQsMCkpfTt2YXIgXz17eDE6MSx4MjowLHkxOjAseTI6MH0sdz17eDE6MCx4MjowLHkxOjEseTI6MH0saz1uLmZvcm1hdChcIn4uMWZcIiksQT17cmFkaWFsOntub2RlOlwicmFkaWFsR3JhZGllbnRcIn0scmFkaWFscmV2ZXJzZWQ6e25vZGU6XCJyYWRpYWxHcmFkaWVudFwiLHJldmVyc2VkOiEwfSxob3Jpem9udGFsOntub2RlOlwibGluZWFyR3JhZGllbnRcIixhdHRyczpffSxob3Jpem9udGFscmV2ZXJzZWQ6e25vZGU6XCJsaW5lYXJHcmFkaWVudFwiLGF0dHJzOl8scmV2ZXJzZWQ6ITB9LHZlcnRpY2FsOntub2RlOlwibGluZWFyR3JhZGllbnRcIixhdHRyczp3fSx2ZXJ0aWNhbHJldmVyc2VkOntub2RlOlwibGluZWFyR3JhZGllbnRcIixhdHRyczp3LHJldmVyc2VkOiEwfX07di5ncmFkaWVudD1mdW5jdGlvbih0LGUscixpLG8sbCl7Zm9yKHZhciB1PW8ubGVuZ3RoLGg9QVtpXSxmPW5ldyBBcnJheSh1KSxwPTA7cDx1O3ArKyloLnJldmVyc2VkP2ZbdS0xLXBdPVtrKDEwMCooMS1vW3BdWzBdKSksb1twXVsxXV06ZltwXT1baygxMDAqb1twXVswXSksb1twXVsxXV07dmFyIGQ9XCJnXCIrZS5fZnVsbExheW91dC5fdWlkK1wiLVwiK3IsZz1lLl9mdWxsTGF5b3V0Ll9kZWZzLnNlbGVjdChcIi5ncmFkaWVudHNcIikuc2VsZWN0QWxsKFwiI1wiK2QpLmRhdGEoW2krZi5qb2luKFwiO1wiKV0sYy5pZGVudGl0eSk7Zy5leGl0KCkucmVtb3ZlKCksZy5lbnRlcigpLmFwcGVuZChoLm5vZGUpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTtoLmF0dHJzJiZ0LmF0dHIoaC5hdHRycyksdC5hdHRyKFwiaWRcIixkKTt2YXIgZT10LnNlbGVjdEFsbChcInN0b3BcIikuZGF0YShmKTtlLmV4aXQoKS5yZW1vdmUoKSxlLmVudGVyKCkuYXBwZW5kKFwic3RvcFwiKSxlLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9YSh0WzFdKTtuLnNlbGVjdCh0aGlzKS5hdHRyKHtvZmZzZXQ6dFswXStcIiVcIixcInN0b3AtY29sb3JcIjpzLnRpbnlSR0IoZSksXCJzdG9wLW9wYWNpdHlcIjplLmdldEFscGhhKCl9KX0pfSksdC5zdHlsZShsLEQoZCxlKSkuc3R5bGUobCtcIi1vcGFjaXR5XCIsbnVsbCl9LHYuaW5pdEdyYWRpZW50cz1mdW5jdGlvbih0KXtjLmVuc3VyZVNpbmdsZSh0Ll9mdWxsTGF5b3V0Ll9kZWZzLFwiZ1wiLFwiZ3JhZGllbnRzXCIpLnNlbGVjdEFsbChcImxpbmVhckdyYWRpZW50LHJhZGlhbEdyYWRpZW50XCIpLnJlbW92ZSgpfSx2LnBvaW50U3R5bGU9ZnVuY3Rpb24odCxlLHIpe2lmKHQuc2l6ZSgpKXt2YXIgaT12Lm1ha2VQb2ludFN0eWxlRm5zKGUpO3QuZWFjaChmdW5jdGlvbih0KXt2LnNpbmdsZVBvaW50U3R5bGUodCxuLnNlbGVjdCh0aGlzKSxlLGkscil9KX19LHYuc2luZ2xlUG9pbnRTdHlsZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXIubWFya2VyLG89YS5saW5lO2lmKGUuc3R5bGUoXCJvcGFjaXR5XCIsbi5zZWxlY3RlZE9wYWNpdHlGbj9uLnNlbGVjdGVkT3BhY2l0eUZuKHQpOnZvaWQgMD09PXQubW8/YS5vcGFjaXR5OnQubW8pLG4ubXMybXJjKXt2YXIgbDtsPVwidmFyaW91c1wiPT09dC5tc3x8XCJ2YXJpb3VzXCI9PT1hLnNpemU/MzpuLm1zMm1yYyh0Lm1zKSx0Lm1yYz1sLG4uc2VsZWN0ZWRTaXplRm4mJihsPXQubXJjPW4uc2VsZWN0ZWRTaXplRm4odCkpO3ZhciB1PXYuc3ltYm9sTnVtYmVyKHQubXh8fGEuc3ltYm9sKXx8MDt0Lm9tPXUlMjAwPj0xMDAsZS5hdHRyKFwiZFwiLGIodSxsKSl9dmFyIGgsZixwLGQ9ITE7aWYodC5zbylwPW8ub3V0bGllcndpZHRoLGY9by5vdXRsaWVyY29sb3IsaD1hLm91dGxpZXJjb2xvcjtlbHNle3ZhciBnPShvfHx7fSkud2lkdGg7cD0odC5tbHcrMXx8ZysxfHwodC50cmFjZT8odC50cmFjZS5tYXJrZXIubGluZXx8e30pLndpZHRoOjApKzEpLTF8fDAsZj1cIm1sY1wiaW4gdD90Lm1sY2M9bi5saW5lU2NhbGUodC5tbGMpOmMuaXNBcnJheU9yVHlwZWRBcnJheShvLmNvbG9yKT9zLmRlZmF1bHRMaW5lOm8uY29sb3IsYy5pc0FycmF5T3JUeXBlZEFycmF5KGEuY29sb3IpJiYoaD1zLmRlZmF1bHRMaW5lLGQ9ITApLGg9XCJtY1wiaW4gdD90Lm1jYz1uLm1hcmtlclNjYWxlKHQubWMpOmEuY29sb3J8fFwicmdiYSgwLDAsMCwwKVwiLG4uc2VsZWN0ZWRDb2xvckZuJiYoaD1uLnNlbGVjdGVkQ29sb3JGbih0KSl9aWYodC5vbSllLmNhbGwocy5zdHJva2UsaCkuc3R5bGUoe1wic3Ryb2tlLXdpZHRoXCI6KHB8fDEpK1wicHhcIixmaWxsOlwibm9uZVwifSk7ZWxzZXtlLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIscCtcInB4XCIpO3ZhciBtPWEuZ3JhZGllbnQseT10Lm1ndDtpZih5P2Q9ITA6eT1tJiZtLnR5cGUsQXJyYXkuaXNBcnJheSh5KSYmKHk9eVswXSxBW3ldfHwoeT0wKSkseSYmXCJub25lXCIhPT15KXt2YXIgeD10Lm1nYzt4P2Q9ITA6eD1tLmNvbG9yO3ZhciBfPXIudWlkO2QmJihfKz1cIi1cIit0LmkpLHYuZ3JhZGllbnQoZSxpLF8seSxbWzAseF0sWzEsaF1dLFwiZmlsbFwiKX1lbHNlIHMuZmlsbChlLGgpO3AmJnMuc3Ryb2tlKGUsZil9fSx2Lm1ha2VQb2ludFN0eWxlRm5zPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LHI9dC5tYXJrZXI7cmV0dXJuIGUubWFya2VyU2NhbGU9di50cnlDb2xvcnNjYWxlKHIsXCJcIiksZS5saW5lU2NhbGU9di50cnlDb2xvcnNjYWxlKHIsXCJsaW5lXCIpLG8udHJhY2VJcyh0LFwic3ltYm9sc1wiKSYmKGUubXMybXJjPWQuaXNCdWJibGUodCk/Zyh0KTpmdW5jdGlvbigpe3JldHVybihyLnNpemV8fDYpLzJ9KSx0LnNlbGVjdGVkcG9pbnRzJiZjLmV4dGVuZEZsYXQoZSx2Lm1ha2VTZWxlY3RlZFBvaW50U3R5bGVGbnModCkpLGV9LHYubWFrZVNlbGVjdGVkUG9pbnRTdHlsZUZucz1mdW5jdGlvbih0KXt2YXIgZT17fSxyPXQuc2VsZWN0ZWR8fHt9LG49dC51bnNlbGVjdGVkfHx7fSxpPXQubWFya2VyfHx7fSxhPXIubWFya2VyfHx7fSxzPW4ubWFya2VyfHx7fSxsPWkub3BhY2l0eSx1PWEub3BhY2l0eSxoPXMub3BhY2l0eSxmPXZvaWQgMCE9PXUsZD12b2lkIDAhPT1oOyhjLmlzQXJyYXlPclR5cGVkQXJyYXkobCl8fGZ8fGQpJiYoZS5zZWxlY3RlZE9wYWNpdHlGbj1mdW5jdGlvbih0KXt2YXIgZT12b2lkIDA9PT10Lm1vP2kub3BhY2l0eTp0Lm1vO3JldHVybiB0LnNlbGVjdGVkP2Y/dTplOmQ/aDpwKmV9KTt2YXIgZz1pLmNvbG9yLHY9YS5jb2xvcixtPXMuY29sb3I7KHZ8fG0pJiYoZS5zZWxlY3RlZENvbG9yRm49ZnVuY3Rpb24odCl7dmFyIGU9dC5tY2N8fGc7cmV0dXJuIHQuc2VsZWN0ZWQ/dnx8ZTptfHxlfSk7dmFyIHk9aS5zaXplLHg9YS5zaXplLGI9cy5zaXplLF89dm9pZCAwIT09eCx3PXZvaWQgMCE9PWI7cmV0dXJuIG8udHJhY2VJcyh0LFwic3ltYm9sc1wiKSYmKF98fHcpJiYoZS5zZWxlY3RlZFNpemVGbj1mdW5jdGlvbih0KXt2YXIgZT10Lm1yY3x8eS8yO3JldHVybiB0LnNlbGVjdGVkP18/eC8yOmU6dz9iLzI6ZX0pLGV9LHYubWFrZVNlbGVjdGVkVGV4dFN0eWxlRm5zPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LHI9dC5zZWxlY3RlZHx8e30sbj10LnVuc2VsZWN0ZWR8fHt9LGk9dC50ZXh0Zm9udHx8e30sYT1yLnRleHRmb250fHx7fSxvPW4udGV4dGZvbnR8fHt9LGw9aS5jb2xvcixjPWEuY29sb3IsdT1vLmNvbG9yO3JldHVybiBlLnNlbGVjdGVkVGV4dENvbG9yRm49ZnVuY3Rpb24odCl7dmFyIGU9dC50Y3x8bDtyZXR1cm4gdC5zZWxlY3RlZD9jfHxlOnV8fChjP2U6cy5hZGRPcGFjaXR5KGUscCkpfSxlfSx2LnNlbGVjdGVkUG9pbnRTdHlsZT1mdW5jdGlvbih0LGUpe2lmKHQuc2l6ZSgpJiZlLnNlbGVjdGVkcG9pbnRzKXt2YXIgcj12Lm1ha2VTZWxlY3RlZFBvaW50U3R5bGVGbnMoZSksaT1lLm1hcmtlcnx8e30sYT1bXTtyLnNlbGVjdGVkT3BhY2l0eUZuJiZhLnB1c2goZnVuY3Rpb24odCxlKXt0LnN0eWxlKFwib3BhY2l0eVwiLHIuc2VsZWN0ZWRPcGFjaXR5Rm4oZSkpfSksci5zZWxlY3RlZENvbG9yRm4mJmEucHVzaChmdW5jdGlvbih0LGUpe3MuZmlsbCh0LHIuc2VsZWN0ZWRDb2xvckZuKGUpKX0pLHIuc2VsZWN0ZWRTaXplRm4mJmEucHVzaChmdW5jdGlvbih0LGUpe3ZhciBuPWUubXh8fGkuc3ltYm9sfHwwLGE9ci5zZWxlY3RlZFNpemVGbihlKTt0LmF0dHIoXCJkXCIsYih2LnN5bWJvbE51bWJlcihuKSxhKSksZS5tcmMyPWF9KSxhLmxlbmd0aCYmdC5lYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPTA7cjxhLmxlbmd0aDtyKyspYVtyXShlLHQpfSl9fSx2LnRyeUNvbG9yc2NhbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lP2MubmVzdGVkUHJvcGVydHkodCxlKS5nZXQoKTp0O2lmKHIpe3ZhciBuPXIuY29sb3JzY2FsZSxpPXIuY29sb3I7aWYobiYmYy5pc0FycmF5T3JUeXBlZEFycmF5KGkpKXJldHVybiBsLm1ha2VDb2xvclNjYWxlRnVuYyhsLmV4dHJhY3RTY2FsZShyLHtjTGV0dGVyOlwiY1wifSkpfXJldHVybiBjLmlkZW50aXR5fTt2YXIgVD17c3RhcnQ6MSxlbmQ6LTEsbWlkZGxlOjAsYm90dG9tOjEsdG9wOi0xfTtmdW5jdGlvbiBNKHQsZSxyLGkpe3ZhciBhPW4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpLG89LTEhPT1lLmluZGV4T2YoXCJ0b3BcIik/XCJ0b3BcIjotMSE9PWUuaW5kZXhPZihcImJvdHRvbVwiKT9cImJvdHRvbVwiOlwibWlkZGxlXCIscz0tMSE9PWUuaW5kZXhPZihcImxlZnRcIik/XCJlbmRcIjotMSE9PWUuaW5kZXhPZihcInJpZ2h0XCIpP1wic3RhcnRcIjpcIm1pZGRsZVwiLGw9aT9pLy44KzE6MCxjPSh1LmxpbmVDb3VudCh0KS0xKSpmKzEsaD1UW3NdKmwscD0uNzUqcitUW29dKmwrKFRbb10tMSkqYypyLzI7dC5hdHRyKFwidGV4dC1hbmNob3JcIixzKSxhLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIitoK1wiLFwiK3ArXCIpXCIpfWZ1bmN0aW9uIFModCxlKXt2YXIgcj10LnRzfHxlLnRleHRmb250LnNpemU7cmV0dXJuIGkocikmJnI+MD9yOjB9di50ZXh0UG9pbnRTdHlsZT1mdW5jdGlvbih0LGUscil7aWYodC5zaXplKCkpe3ZhciBpO2lmKGUuc2VsZWN0ZWRwb2ludHMpe3ZhciBhPXYubWFrZVNlbGVjdGVkVGV4dFN0eWxlRm5zKGUpO2k9YS5zZWxlY3RlZFRleHRDb2xvckZufXQuZWFjaChmdW5jdGlvbih0KXt2YXIgYT1uLnNlbGVjdCh0aGlzKSxvPWMuZXh0cmFjdE9wdGlvbih0LGUsXCJ0eFwiLFwidGV4dFwiKTtpZihvfHwwPT09byl7dmFyIHM9dC50cHx8ZS50ZXh0cG9zaXRpb24sbD1TKHQsZSksaD1pP2kodCk6dC50Y3x8ZS50ZXh0Zm9udC5jb2xvcjthLmNhbGwodi5mb250LHQudGZ8fGUudGV4dGZvbnQuZmFtaWx5LGwsaCkudGV4dChvKS5jYWxsKHUuY29udmVydFRvVHNwYW5zLHIpLmNhbGwoTSxzLGwsdC5tcmMpfWVsc2UgYS5yZW1vdmUoKX0pfX0sdi5zZWxlY3RlZFRleHRTdHlsZT1mdW5jdGlvbih0LGUpe2lmKHQuc2l6ZSgpJiZlLnNlbGVjdGVkcG9pbnRzKXt2YXIgcj12Lm1ha2VTZWxlY3RlZFRleHRTdHlsZUZucyhlKTt0LmVhY2goZnVuY3Rpb24odCl7dmFyIGk9bi5zZWxlY3QodGhpcyksYT1yLnNlbGVjdGVkVGV4dENvbG9yRm4odCksbz10LnRwfHxlLnRleHRwb3NpdGlvbixsPVModCxlKTtzLmZpbGwoaSxhKSxNKGksbyxsLHQubXJjMnx8dC5tcmMpfSl9fTt2YXIgRT0uNTtmdW5jdGlvbiBDKHQsZSxyLGkpe3ZhciBhPXRbMF0tZVswXSxvPXRbMV0tZVsxXSxzPXJbMF0tZVswXSxsPXJbMV0tZVsxXSxjPU1hdGgucG93KGEqYStvKm8sRS8yKSx1PU1hdGgucG93KHMqcytsKmwsRS8yKSxoPSh1KnUqYS1jKmMqcykqaSxmPSh1KnUqby1jKmMqbCkqaSxwPTMqdSooYyt1KSxkPTMqYyooYyt1KTtyZXR1cm5bW24ucm91bmQoZVswXSsocCYmaC9wKSwyKSxuLnJvdW5kKGVbMV0rKHAmJmYvcCksMildLFtuLnJvdW5kKGVbMF0tKGQmJmgvZCksMiksbi5yb3VuZChlWzFdLShkJiZmL2QpLDIpXV19di5zbW9vdGhvcGVuPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MylyZXR1cm5cIk1cIit0LmpvaW4oXCJMXCIpO3ZhciByLG49XCJNXCIrdFswXSxpPVtdO2ZvcihyPTE7cjx0Lmxlbmd0aC0xO3IrKylpLnB1c2goQyh0W3ItMV0sdFtyXSx0W3IrMV0sZSkpO2ZvcihuKz1cIlFcIitpWzBdWzBdK1wiIFwiK3RbMV0scj0yO3I8dC5sZW5ndGgtMTtyKyspbis9XCJDXCIraVtyLTJdWzFdK1wiIFwiK2lbci0xXVswXStcIiBcIit0W3JdO3JldHVybiBuKz1cIlFcIitpW3QubGVuZ3RoLTNdWzFdK1wiIFwiK3RbdC5sZW5ndGgtMV19LHYuc21vb3RoY2xvc2VkPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MylyZXR1cm5cIk1cIit0LmpvaW4oXCJMXCIpK1wiWlwiO3ZhciByLG49XCJNXCIrdFswXSxpPXQubGVuZ3RoLTEsYT1bQyh0W2ldLHRbMF0sdFsxXSxlKV07Zm9yKHI9MTtyPGk7cisrKWEucHVzaChDKHRbci0xXSx0W3JdLHRbcisxXSxlKSk7Zm9yKGEucHVzaChDKHRbaS0xXSx0W2ldLHRbMF0sZSkpLHI9MTtyPD1pO3IrKyluKz1cIkNcIithW3ItMV1bMV0rXCIgXCIrYVtyXVswXStcIiBcIit0W3JdO3JldHVybiBuKz1cIkNcIithW2ldWzFdK1wiIFwiK2FbMF1bMF0rXCIgXCIrdFswXStcIlpcIn07dmFyIEw9e2h2OmZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJIXCIrbi5yb3VuZChlWzBdLDIpK1wiVlwiK24ucm91bmQoZVsxXSwyKX0sdmg6ZnVuY3Rpb24odCxlKXtyZXR1cm5cIlZcIituLnJvdW5kKGVbMV0sMikrXCJIXCIrbi5yb3VuZChlWzBdLDIpfSxodmg6ZnVuY3Rpb24odCxlKXtyZXR1cm5cIkhcIituLnJvdW5kKCh0WzBdK2VbMF0pLzIsMikrXCJWXCIrbi5yb3VuZChlWzFdLDIpK1wiSFwiK24ucm91bmQoZVswXSwyKX0sdmh2OmZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJWXCIrbi5yb3VuZCgodFsxXStlWzFdKS8yLDIpK1wiSFwiK24ucm91bmQoZVswXSwyKStcIlZcIituLnJvdW5kKGVbMV0sMil9fSx6PWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJMXCIrbi5yb3VuZChlWzBdLDIpK1wiLFwiK24ucm91bmQoZVsxXSwyKX07di5zdGVwcz1mdW5jdGlvbih0KXt2YXIgZT1MW3RdfHx6O3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIHI9XCJNXCIrbi5yb3VuZCh0WzBdWzBdLDIpK1wiLFwiK24ucm91bmQodFswXVsxXSwyKSxpPTE7aTx0Lmxlbmd0aDtpKyspcis9ZSh0W2ktMV0sdFtpXSk7cmV0dXJuIHJ9fSx2Lm1ha2VUZXN0ZXI9ZnVuY3Rpb24oKXt2YXIgdD1jLmVuc3VyZVNpbmdsZUJ5SWQobi5zZWxlY3QoXCJib2R5XCIpLFwic3ZnXCIsXCJqcy1wbG90bHktdGVzdGVyXCIsZnVuY3Rpb24odCl7dC5hdHRyKGguc3ZnQXR0cnMpLnN0eWxlKHtwb3NpdGlvbjpcImFic29sdXRlXCIsbGVmdDpcIi0xMDAwMHB4XCIsdG9wOlwiLTEwMDAwcHhcIix3aWR0aDpcIjkwMDBweFwiLGhlaWdodDpcIjkwMDBweFwiLFwiei1pbmRleFwiOlwiMVwifSl9KSxlPWMuZW5zdXJlU2luZ2xlKHQsXCJwYXRoXCIsXCJqcy1yZWZlcmVuY2UtcG9pbnRcIixmdW5jdGlvbih0KXt0LmF0dHIoXCJkXCIsXCJNMCwwSDFWMUgwWlwiKS5zdHlsZSh7XCJzdHJva2Utd2lkdGhcIjowLGZpbGw6XCJibGFja1wifSl9KTt2LnRlc3Rlcj10LHYudGVzdHJlZj1lfSx2LnNhdmVkQkJveGVzPXt9O3ZhciBPPTA7ZnVuY3Rpb24gSSh0KXt2YXIgZT10LmdldEF0dHJpYnV0ZShcImRhdGEtdW5mb3JtYXR0ZWRcIik7aWYobnVsbCE9PWUpcmV0dXJuIGUrdC5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1hdGhcIikrdC5nZXRBdHRyaWJ1dGUoXCJ0ZXh0LWFuY2hvclwiKSt0LmdldEF0dHJpYnV0ZShcInN0eWxlXCIpfWZ1bmN0aW9uIEQodCxlKXtpZighdClyZXR1cm4gbnVsbDt2YXIgcj1lLl9jb250ZXh0O3JldHVyblwidXJsKCdcIisoci5fZXhwb3J0ZWRQbG90P1wiXCI6ci5fYmFzZVVybHx8XCJcIikrXCIjXCIrdCtcIicpXCJ9di5iQm94PWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLG87aWYocnx8KHI9SSh0KSkscil7aWYoaT12LnNhdmVkQkJveGVzW3JdKXJldHVybiBjLmV4dGVuZEZsYXQoe30saSl9ZWxzZSBpZigxPT09dC5jaGlsZE5vZGVzLmxlbmd0aCl7dmFyIHM9dC5jaGlsZE5vZGVzWzBdO2lmKHI9SShzKSl7dmFyIGw9K3MuZ2V0QXR0cmlidXRlKFwieFwiKXx8MCxoPStzLmdldEF0dHJpYnV0ZShcInlcIil8fDAsZj1zLmdldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiKTtpZighZil7dmFyIHA9di5iQm94KHMsITEscik7cmV0dXJuIGwmJihwLmxlZnQrPWwscC5yaWdodCs9bCksaCYmKHAudG9wKz1oLHAuYm90dG9tKz1oKSxwfWlmKHIrPVwiflwiK2wrXCJ+XCIraCtcIn5cIitmLGk9di5zYXZlZEJCb3hlc1tyXSlyZXR1cm4gYy5leHRlbmRGbGF0KHt9LGkpfX1lP2E9dDoobz12LnRlc3Rlci5ub2RlKCksYT10LmNsb25lTm9kZSghMCksby5hcHBlbmRDaGlsZChhKSksbi5zZWxlY3QoYSkuYXR0cihcInRyYW5zZm9ybVwiLG51bGwpLmNhbGwodS5wb3NpdGlvblRleHQsMCwwKTt2YXIgZD1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGc9di50ZXN0cmVmLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlfHxvLnJlbW92ZUNoaWxkKGEpO3ZhciBtPXtoZWlnaHQ6ZC5oZWlnaHQsd2lkdGg6ZC53aWR0aCxsZWZ0OmQubGVmdC1nLmxlZnQsdG9wOmQudG9wLWcudG9wLHJpZ2h0OmQucmlnaHQtZy5sZWZ0LGJvdHRvbTpkLmJvdHRvbS1nLnRvcH07cmV0dXJuIE8+PTFlNCYmKHYuc2F2ZWRCQm94ZXM9e30sTz0wKSxyJiYodi5zYXZlZEJCb3hlc1tyXT1tKSxPKyssYy5leHRlbmRGbGF0KHt9LG0pfSx2LnNldENsaXBVcmw9ZnVuY3Rpb24odCxlLHIpe3QuYXR0cihcImNsaXAtcGF0aFwiLEQoZSxyKSl9LHYuZ2V0VHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPSh0W3QuYXR0cj9cImF0dHJcIjpcImdldEF0dHJpYnV0ZVwiXShcInRyYW5zZm9ybVwiKXx8XCJcIikucmVwbGFjZSgvLipcXGJ0cmFuc2xhdGVcXCgoLT9cXGQqXFwuP1xcZCopW14tXFxkXSooLT9cXGQqXFwuP1xcZCopW15cXGRdLiovLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZSxyXS5qb2luKFwiIFwiKX0pLnNwbGl0KFwiIFwiKTtyZXR1cm57eDorZVswXXx8MCx5OitlWzFdfHwwfX0sdi5zZXRUcmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuYXR0cj9cImF0dHJcIjpcImdldEF0dHJpYnV0ZVwiLGk9dC5hdHRyP1wiYXR0clwiOlwic2V0QXR0cmlidXRlXCIsYT10W25dKFwidHJhbnNmb3JtXCIpfHxcIlwiO3JldHVybiBlPWV8fDAscj1yfHwwLGE9YS5yZXBsYWNlKC8oXFxidHJhbnNsYXRlXFwoLio/XFwpOz8pLyxcIlwiKS50cmltKCksYT0oYSs9XCIgdHJhbnNsYXRlKFwiK2UrXCIsIFwiK3IrXCIpXCIpLnRyaW0oKSx0W2ldKFwidHJhbnNmb3JtXCIsYSksYX0sdi5nZXRTY2FsZT1mdW5jdGlvbih0KXt2YXIgZT0odFt0LmF0dHI/XCJhdHRyXCI6XCJnZXRBdHRyaWJ1dGVcIl0oXCJ0cmFuc2Zvcm1cIil8fFwiXCIpLnJlcGxhY2UoLy4qXFxic2NhbGVcXCgoXFxkKlxcLj9cXGQqKVteXFxkXSooXFxkKlxcLj9cXGQqKVteXFxkXS4qLyxmdW5jdGlvbih0LGUscil7cmV0dXJuW2Uscl0uam9pbihcIiBcIil9KS5zcGxpdChcIiBcIik7cmV0dXJue3g6K2VbMF18fDEseTorZVsxXXx8MX19LHYuc2V0U2NhbGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuYXR0cj9cImF0dHJcIjpcImdldEF0dHJpYnV0ZVwiLGk9dC5hdHRyP1wiYXR0clwiOlwic2V0QXR0cmlidXRlXCIsYT10W25dKFwidHJhbnNmb3JtXCIpfHxcIlwiO3JldHVybiBlPWV8fDEscj1yfHwxLGE9YS5yZXBsYWNlKC8oXFxic2NhbGVcXCguKj9cXCk7PykvLFwiXCIpLnRyaW0oKSxhPShhKz1cIiBzY2FsZShcIitlK1wiLCBcIityK1wiKVwiKS50cmltKCksdFtpXShcInRyYW5zZm9ybVwiLGEpLGF9O3ZhciBQPS9cXHMqc2MuKi87di5zZXRQb2ludEdyb3VwU2NhbGU9ZnVuY3Rpb24odCxlLHIpe2lmKGU9ZXx8MSxyPXJ8fDEsdCl7dmFyIG49MT09PWUmJjE9PT1yP1wiXCI6XCIgc2NhbGUoXCIrZStcIixcIityK1wiKVwiO3QuZWFjaChmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmdldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiKXx8XCJcIikucmVwbGFjZShQLFwiXCIpO3Q9KHQrPW4pLnRyaW0oKSx0aGlzLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLHQpfSl9fTt2YXIgUj0vdHJhbnNsYXRlXFwoW14pXSpcXClcXHMqJC87di5zZXRUZXh0UG9pbnRzU2NhbGU9ZnVuY3Rpb24odCxlLHIpe3QmJnQuZWFjaChmdW5jdGlvbigpe3ZhciB0LGk9bi5zZWxlY3QodGhpcyksYT1pLnNlbGVjdChcInRleHRcIik7aWYoYS5ub2RlKCkpe3ZhciBvPXBhcnNlRmxvYXQoYS5hdHRyKFwieFwiKXx8MCkscz1wYXJzZUZsb2F0KGEuYXR0cihcInlcIil8fDApLGw9KGkuYXR0cihcInRyYW5zZm9ybVwiKXx8XCJcIikubWF0Y2goUik7dD0xPT09ZSYmMT09PXI/W106W1widHJhbnNsYXRlKFwiK28rXCIsXCIrcytcIilcIixcInNjYWxlKFwiK2UrXCIsXCIrcitcIilcIixcInRyYW5zbGF0ZShcIistbytcIixcIistcytcIilcIl0sbCYmdC5wdXNoKGwpLGkuYXR0cihcInRyYW5zZm9ybVwiLHQuam9pbihcIiBcIikpfX0pfX0se1wiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiOjY3MyxcIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnNcIjo2NzcsXCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiOjY3OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiOjcyNSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jXCI6MTA2OSxcIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzXCI6MTA3NixcIi4uL2NvbG9yXCI6NTc4LFwiLi4vY29sb3JzY2FsZVwiOjU5MCxcIi4vc3ltYm9sX2RlZnNcIjo2MDAsZDM6MTU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjIsdGlueWNvbG9yMjo1MjJ9XSw2MDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIik7ZS5leHBvcnRzPXtjaXJjbGU6e246MCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm5cIk1cIitlK1wiLDBBXCIrZStcIixcIitlK1wiIDAgMSwxIDAsLVwiK2UrXCJBXCIrZStcIixcIitlK1wiIDAgMCwxIFwiK2UrXCIsMFpcIn19LHNxdWFyZTp7bjoxLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVyblwiTVwiK2UrXCIsXCIrZStcIkgtXCIrZStcIlYtXCIrZStcIkhcIitlK1wiWlwifX0sZGlhbW9uZDp7bjoyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjMqdCwyKTtyZXR1cm5cIk1cIitlK1wiLDBMMCxcIitlK1wiTC1cIitlK1wiLDBMMCwtXCIrZStcIlpcIn19LGNyb3NzOntuOjMsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC40KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVyblwiTVwiK3IrXCIsXCIrZStcIkhcIitlK1wiVlwiK3IrXCJILVwiK2UrXCJWXCIrZStcIkgtXCIrcitcIlYtXCIrZStcIkgtXCIrZStcIlYtXCIrcitcIkhcIitlK1wiVi1cIitlK1wiSFwiK3IrXCJaXCJ9fSx4OntuOjQsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC44KnQvTWF0aC5zcXJ0KDIpLDIpLHI9XCJsXCIrZStcIixcIitlLGk9XCJsXCIrZStcIiwtXCIrZSxhPVwibC1cIitlK1wiLC1cIitlLG89XCJsLVwiK2UrXCIsXCIrZTtyZXR1cm5cIk0wLFwiK2UrcitpK2EraSthK28rYStvK3IrbytyK1wiWlwifX0sXCJ0cmlhbmdsZS11cFwiOntuOjUsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdC9NYXRoLnNxcnQoMyksMik7cmV0dXJuXCJNLVwiK2UrXCIsXCIrbi5yb3VuZCh0LzIsMikrXCJIXCIrZStcIkwwLC1cIituLnJvdW5kKHQsMikrXCJaXCJ9fSxcInRyaWFuZ2xlLWRvd25cIjp7bjo2LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQvTWF0aC5zcXJ0KDMpLDIpO3JldHVyblwiTS1cIitlK1wiLC1cIituLnJvdW5kKHQvMiwyKStcIkhcIitlK1wiTDAsXCIrbi5yb3VuZCh0LDIpK1wiWlwifX0sXCJ0cmlhbmdsZS1sZWZ0XCI6e246NyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0L01hdGguc3FydCgzKSwyKTtyZXR1cm5cIk1cIituLnJvdW5kKHQvMiwyKStcIiwtXCIrZStcIlZcIitlK1wiTC1cIituLnJvdW5kKHQsMikrXCIsMFpcIn19LFwidHJpYW5nbGUtcmlnaHRcIjp7bjo4LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQvTWF0aC5zcXJ0KDMpLDIpO3JldHVyblwiTS1cIituLnJvdW5kKHQvMiwyKStcIiwtXCIrZStcIlZcIitlK1wiTFwiK24ucm91bmQodCwyKStcIiwwWlwifX0sXCJ0cmlhbmdsZS1uZVwiOntuOjksZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC42KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVyblwiTS1cIityK1wiLC1cIitlK1wiSFwiK2UrXCJWXCIrcitcIlpcIn19LFwidHJpYW5nbGUtc2VcIjp7bjoxMCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjYqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuXCJNXCIrZStcIiwtXCIrcitcIlZcIitlK1wiSC1cIityK1wiWlwifX0sXCJ0cmlhbmdsZS1zd1wiOntuOjExLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNip0LDIpLHI9bi5yb3VuZCgxLjIqdCwyKTtyZXR1cm5cIk1cIityK1wiLFwiK2UrXCJILVwiK2UrXCJWLVwiK3IrXCJaXCJ9fSxcInRyaWFuZ2xlLW53XCI6e246MTIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC42KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVyblwiTS1cIitlK1wiLFwiK3IrXCJWLVwiK2UrXCJIXCIrcitcIlpcIn19LHBlbnRhZ29uOntuOjEzLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguOTUxKnQsMikscj1uLnJvdW5kKC41ODgqdCwyKSxpPW4ucm91bmQoLXQsMiksYT1uLnJvdW5kKC0uMzA5KnQsMik7cmV0dXJuXCJNXCIrZStcIixcIithK1wiTFwiK3IrXCIsXCIrbi5yb3VuZCguODA5KnQsMikrXCJILVwiK3IrXCJMLVwiK2UrXCIsXCIrYStcIkwwLFwiK2krXCJaXCJ9fSxoZXhhZ29uOntuOjE0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpLHI9bi5yb3VuZCh0LzIsMiksaT1uLnJvdW5kKHQqTWF0aC5zcXJ0KDMpLzIsMik7cmV0dXJuXCJNXCIraStcIiwtXCIrcitcIlZcIityK1wiTDAsXCIrZStcIkwtXCIraStcIixcIityK1wiVi1cIityK1wiTDAsLVwiK2UrXCJaXCJ9fSxoZXhhZ29uMjp7bjoxNSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKSxyPW4ucm91bmQodC8yLDIpLGk9bi5yb3VuZCh0Kk1hdGguc3FydCgzKS8yLDIpO3JldHVyblwiTS1cIityK1wiLFwiK2krXCJIXCIrcitcIkxcIitlK1wiLDBMXCIrcitcIiwtXCIraStcIkgtXCIrcitcIkwtXCIrZStcIiwwWlwifX0sb2N0YWdvbjp7bjoxNixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjkyNCp0LDIpLHI9bi5yb3VuZCguMzgzKnQsMik7cmV0dXJuXCJNLVwiK3IrXCIsLVwiK2UrXCJIXCIrcitcIkxcIitlK1wiLC1cIityK1wiVlwiK3IrXCJMXCIrcitcIixcIitlK1wiSC1cIityK1wiTC1cIitlK1wiLFwiK3IrXCJWLVwiK3IrXCJaXCJ9fSxzdGFyOntuOjE3LGY6ZnVuY3Rpb24odCl7dmFyIGU9MS40KnQscj1uLnJvdW5kKC4yMjUqZSwyKSxpPW4ucm91bmQoLjk1MSplLDIpLGE9bi5yb3VuZCguMzYzKmUsMiksbz1uLnJvdW5kKC41ODgqZSwyKSxzPW4ucm91bmQoLWUsMiksbD1uLnJvdW5kKC0uMzA5KmUsMiksYz1uLnJvdW5kKC4xMTgqZSwyKSx1PW4ucm91bmQoLjgwOSplLDIpO3JldHVyblwiTVwiK3IrXCIsXCIrbCtcIkhcIitpK1wiTFwiK2ErXCIsXCIrYytcIkxcIitvK1wiLFwiK3UrXCJMMCxcIituLnJvdW5kKC4zODIqZSwyKStcIkwtXCIrbytcIixcIit1K1wiTC1cIithK1wiLFwiK2MrXCJMLVwiK2krXCIsXCIrbCtcIkgtXCIrcitcIkwwLFwiK3MrXCJaXCJ9fSxoZXhhZ3JhbTp7bjoxOCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjY2KnQsMikscj1uLnJvdW5kKC4zOCp0LDIpLGk9bi5yb3VuZCguNzYqdCwyKTtyZXR1cm5cIk0tXCIraStcIiwwbC1cIityK1wiLC1cIitlK1wiaFwiK2krXCJsXCIrcitcIiwtXCIrZStcImxcIityK1wiLFwiK2UrXCJoXCIraStcImwtXCIrcitcIixcIitlK1wibFwiK3IrXCIsXCIrZStcImgtXCIraStcImwtXCIrcitcIixcIitlK1wibC1cIityK1wiLC1cIitlK1wiaC1cIitpK1wiWlwifX0sXCJzdGFyLXRyaWFuZ2xlLXVwXCI6e246MTksZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQqTWF0aC5zcXJ0KDMpKi44LDIpLHI9bi5yb3VuZCguOCp0LDIpLGk9bi5yb3VuZCgxLjYqdCwyKSxhPW4ucm91bmQoNCp0LDIpLG89XCJBIFwiK2ErXCIsXCIrYStcIiAwIDAgMSBcIjtyZXR1cm5cIk0tXCIrZStcIixcIityK28rZStcIixcIityK28rXCIwLC1cIitpK28rXCItXCIrZStcIixcIityK1wiWlwifX0sXCJzdGFyLXRyaWFuZ2xlLWRvd25cIjp7bjoyMCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCpNYXRoLnNxcnQoMykqLjgsMikscj1uLnJvdW5kKC44KnQsMiksaT1uLnJvdW5kKDEuNip0LDIpLGE9bi5yb3VuZCg0KnQsMiksbz1cIkEgXCIrYStcIixcIithK1wiIDAgMCAxIFwiO3JldHVyblwiTVwiK2UrXCIsLVwiK3IrbytcIi1cIitlK1wiLC1cIityK28rXCIwLFwiK2krbytlK1wiLC1cIityK1wiWlwifX0sXCJzdGFyLXNxdWFyZVwiOntuOjIxLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjEqdCwyKSxyPW4ucm91bmQoMip0LDIpLGk9XCJBIFwiK3IrXCIsXCIrcitcIiAwIDAgMSBcIjtyZXR1cm5cIk0tXCIrZStcIiwtXCIrZStpK1wiLVwiK2UrXCIsXCIrZStpK2UrXCIsXCIrZStpK2UrXCIsLVwiK2UraStcIi1cIitlK1wiLC1cIitlK1wiWlwifX0sXCJzdGFyLWRpYW1vbmRcIjp7bjoyMixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS40KnQsMikscj1uLnJvdW5kKDEuOSp0LDIpLGk9XCJBIFwiK3IrXCIsXCIrcitcIiAwIDAgMSBcIjtyZXR1cm5cIk0tXCIrZStcIiwwXCIraStcIjAsXCIrZStpK2UrXCIsMFwiK2krXCIwLC1cIitlK2krXCItXCIrZStcIiwwWlwifX0sXCJkaWFtb25kLXRhbGxcIjp7bjoyMyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjcqdCwyKSxyPW4ucm91bmQoMS40KnQsMik7cmV0dXJuXCJNMCxcIityK1wiTFwiK2UrXCIsMEwwLC1cIityK1wiTC1cIitlK1wiLDBaXCJ9fSxcImRpYW1vbmQtd2lkZVwiOntuOjI0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjQqdCwyKSxyPW4ucm91bmQoLjcqdCwyKTtyZXR1cm5cIk0wLFwiK3IrXCJMXCIrZStcIiwwTDAsLVwiK3IrXCJMLVwiK2UrXCIsMFpcIn19LGhvdXJnbGFzczp7bjoyNSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm5cIk1cIitlK1wiLFwiK2UrXCJILVwiK2UrXCJMXCIrZStcIiwtXCIrZStcIkgtXCIrZStcIlpcIn0sbm9Eb3Q6ITB9LGJvd3RpZTp7bjoyNixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm5cIk1cIitlK1wiLFwiK2UrXCJWLVwiK2UrXCJMLVwiK2UrXCIsXCIrZStcIlYtXCIrZStcIlpcIn0sbm9Eb3Q6ITB9LFwiY2lyY2xlLWNyb3NzXCI6e246MjcsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuXCJNMCxcIitlK1wiVi1cIitlK1wiTVwiK2UrXCIsMEgtXCIrZStcIk1cIitlK1wiLDBBXCIrZStcIixcIitlK1wiIDAgMSwxIDAsLVwiK2UrXCJBXCIrZStcIixcIitlK1wiIDAgMCwxIFwiK2UrXCIsMFpcIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LFwiY2lyY2xlLXhcIjp7bjoyOCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKSxyPW4ucm91bmQodC9NYXRoLnNxcnQoMiksMik7cmV0dXJuXCJNXCIrcitcIixcIityK1wiTC1cIityK1wiLC1cIityK1wiTVwiK3IrXCIsLVwiK3IrXCJMLVwiK3IrXCIsXCIrcitcIk1cIitlK1wiLDBBXCIrZStcIixcIitlK1wiIDAgMSwxIDAsLVwiK2UrXCJBXCIrZStcIixcIitlK1wiIDAgMCwxIFwiK2UrXCIsMFpcIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LFwic3F1YXJlLWNyb3NzXCI6e246MjksZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuXCJNMCxcIitlK1wiVi1cIitlK1wiTVwiK2UrXCIsMEgtXCIrZStcIk1cIitlK1wiLFwiK2UrXCJILVwiK2UrXCJWLVwiK2UrXCJIXCIrZStcIlpcIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LFwic3F1YXJlLXhcIjp7bjozMCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm5cIk1cIitlK1wiLFwiK2UrXCJMLVwiK2UrXCIsLVwiK2UrXCJNXCIrZStcIiwtXCIrZStcIkwtXCIrZStcIixcIitlK1wiTVwiK2UrXCIsXCIrZStcIkgtXCIrZStcIlYtXCIrZStcIkhcIitlK1wiWlwifSxuZWVkTGluZTohMCxub0RvdDohMH0sXCJkaWFtb25kLWNyb3NzXCI6e246MzEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMyp0LDIpO3JldHVyblwiTVwiK2UrXCIsMEwwLFwiK2UrXCJMLVwiK2UrXCIsMEwwLC1cIitlK1wiWk0wLC1cIitlK1wiVlwiK2UrXCJNLVwiK2UrXCIsMEhcIitlfSxuZWVkTGluZTohMCxub0RvdDohMH0sXCJkaWFtb25kLXhcIjp7bjozMixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4zKnQsMikscj1uLnJvdW5kKC42NSp0LDIpO3JldHVyblwiTVwiK2UrXCIsMEwwLFwiK2UrXCJMLVwiK2UrXCIsMEwwLC1cIitlK1wiWk0tXCIrcitcIiwtXCIrcitcIkxcIityK1wiLFwiK3IrXCJNLVwiK3IrXCIsXCIrcitcIkxcIityK1wiLC1cIityfSxuZWVkTGluZTohMCxub0RvdDohMH0sXCJjcm9zcy10aGluXCI6e246MzMsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpO3JldHVyblwiTTAsXCIrZStcIlYtXCIrZStcIk1cIitlK1wiLDBILVwiK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sXCJ4LXRoaW5cIjp7bjozNCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm5cIk1cIitlK1wiLFwiK2UrXCJMLVwiK2UrXCIsLVwiK2UrXCJNXCIrZStcIiwtXCIrZStcIkwtXCIrZStcIixcIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LGFzdGVyaXNrOntuOjM1LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjIqdCwyKSxyPW4ucm91bmQoLjg1KnQsMik7cmV0dXJuXCJNMCxcIitlK1wiVi1cIitlK1wiTVwiK2UrXCIsMEgtXCIrZStcIk1cIityK1wiLFwiK3IrXCJMLVwiK3IrXCIsLVwiK3IrXCJNXCIrcitcIiwtXCIrcitcIkwtXCIrcitcIixcIityfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LGhhc2g6e246MzYsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQvMiwyKSxyPW4ucm91bmQodCwyKTtyZXR1cm5cIk1cIitlK1wiLFwiK3IrXCJWLVwiK3IrXCJtLVwiK3IrXCIsMFZcIityK1wiTVwiK3IrXCIsXCIrZStcIkgtXCIrcitcIm0wLC1cIityK1wiSFwiK3J9LG5lZWRMaW5lOiEwLG5vRmlsbDohMH0sXCJ5LXVwXCI6e246MzcsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMip0LDIpLHI9bi5yb3VuZCgxLjYqdCwyKSxpPW4ucm91bmQoLjgqdCwyKTtyZXR1cm5cIk0tXCIrZStcIixcIitpK1wiTDAsME1cIitlK1wiLFwiK2krXCJMMCwwTTAsLVwiK3IrXCJMMCwwXCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sXCJ5LWRvd25cIjp7bjozOCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKDEuNip0LDIpLGk9bi5yb3VuZCguOCp0LDIpO3JldHVyblwiTS1cIitlK1wiLC1cIitpK1wiTDAsME1cIitlK1wiLC1cIitpK1wiTDAsME0wLFwiK3IrXCJMMCwwXCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sXCJ5LWxlZnRcIjp7bjozOSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKDEuNip0LDIpLGk9bi5yb3VuZCguOCp0LDIpO3JldHVyblwiTVwiK2krXCIsXCIrZStcIkwwLDBNXCIraStcIiwtXCIrZStcIkwwLDBNLVwiK3IrXCIsMEwwLDBcIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSxcInktcmlnaHRcIjp7bjo0MCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKDEuNip0LDIpLGk9bi5yb3VuZCguOCp0LDIpO3JldHVyblwiTS1cIitpK1wiLFwiK2UrXCJMMCwwTS1cIitpK1wiLC1cIitlK1wiTDAsME1cIityK1wiLDBMMCwwXCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sXCJsaW5lLWV3XCI6e246NDEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpO3JldHVyblwiTVwiK2UrXCIsMEgtXCIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSxcImxpbmUtbnNcIjp7bjo0MixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS40KnQsMik7cmV0dXJuXCJNMCxcIitlK1wiVi1cIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LFwibGluZS1uZVwiOntuOjQzLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVyblwiTVwiK2UrXCIsLVwiK2UrXCJMLVwiK2UrXCIsXCIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSxcImxpbmUtbndcIjp7bjo0NCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm5cIk1cIitlK1wiLFwiK2UrXCJMLVwiK2UrXCIsLVwiK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH19fSx7ZDM6MTU1fV0sNjAxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXt2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGVkaXRUeXBlOlwiY2FsY1wifSx0eXBlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJwZXJjZW50XCIsXCJjb25zdGFudFwiLFwic3FydFwiLFwiZGF0YVwiXSxlZGl0VHlwZTpcImNhbGNcIn0sc3ltbWV0cmljOnt2YWxUeXBlOlwiYm9vbGVhblwiLGVkaXRUeXBlOlwiY2FsY1wifSxhcnJheTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sYXJyYXltaW51czp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sdmFsdWU6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjEwLGVkaXRUeXBlOlwiY2FsY1wifSx2YWx1ZW1pbnVzOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxMCxlZGl0VHlwZTpcImNhbGNcIn0sdHJhY2VyZWY6e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsbWluOjAsZGZsdDowLGVkaXRUeXBlOlwic3R5bGVcIn0sdHJhY2VyZWZtaW51czp7dmFsVHlwZTpcImludGVnZXJcIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6XCJzdHlsZVwifSxjb3B5X3lzdHlsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixlZGl0VHlwZTpcInBsb3RcIn0sY29weV96c3R5bGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZWRpdFR5cGU6XCJzdHlsZVwifSxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJzdHlsZVwifSx0aGlja25lc3M6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjIsZWRpdFR5cGU6XCJzdHlsZVwifSx3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGVkaXRUeXBlOlwicGxvdFwifSxlZGl0VHlwZTpcImNhbGNcIixfZGVwcmVjYXRlZDp7b3BhY2l0eTp7dmFsVHlwZTpcIm51bWJlclwiLGVkaXRUeXBlOlwic3R5bGVcIn19fX0se31dLDYwMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxhPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxvPXQoXCIuLi8uLi9saWJcIikscz10KFwiLi9jb21wdXRlX2Vycm9yXCIpO2Z1bmN0aW9uIGwodCxlLHIsaSl7dmFyIGw9ZVtcImVycm9yX1wiK2ldfHx7fSxjPVtdO2lmKGwudmlzaWJsZSYmLTEhPT1bXCJsaW5lYXJcIixcImxvZ1wiXS5pbmRleE9mKHIudHlwZSkpe2Zvcih2YXIgdT1zKGwpLGg9MDtoPHQubGVuZ3RoO2grKyl7dmFyIGY9dFtoXSxwPWYuaTtpZih2b2lkIDA9PT1wKXA9aDtlbHNlIGlmKG51bGw9PT1wKWNvbnRpbnVlO3ZhciBkPWZbaV07aWYobihyLmMybChkKSkpe3ZhciBnPXUoZCxwKTtpZihuKGdbMF0pJiZuKGdbMV0pKXt2YXIgdj1mW2krXCJzXCJdPWQtZ1swXSxtPWZbaStcImhcIl09ZCtnWzFdO2MucHVzaCh2LG0pfX19dmFyIHk9ci5faWQseD1lLl9leHRyZW1lc1t5XSxiPWEuZmluZEV4dHJlbWVzKHIsYyxvLmV4dGVuZEZsYXQoe3RvemVybzp4Lm9wdHMudG96ZXJvfSx7cGFkZGVkOiEwfSkpO3gubWluPXgubWluLmNvbmNhdChiLm1pbikseC5tYXg9eC5tYXguY29uY2F0KGIubWF4KX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmNhbGNkYXRhLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXSxvPW5bMF0udHJhY2U7aWYoITA9PT1vLnZpc2libGUmJmkudHJhY2VJcyhvLFwiZXJyb3JCYXJzT0tcIikpe3ZhciBzPWEuZ2V0RnJvbUlkKHQsby54YXhpcyksYz1hLmdldEZyb21JZCh0LG8ueWF4aXMpO2wobixvLHMsXCJ4XCIpLGwobixvLGMsXCJ5XCIpfX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9jb21wdXRlX2Vycm9yXCI6NjAzLFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw2MDM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuXCJwZXJjZW50XCI9PT10P2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0KmUvMTAwKX06XCJjb25zdGFudFwiPT09dD9mdW5jdGlvbigpe3JldHVybiBNYXRoLmFicyhlKX06XCJzcXJ0XCI9PT10P2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5hYnModCkpfTp2b2lkIDB9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQudHlwZSxyPXQuc3ltbWV0cmljO2lmKFwiZGF0YVwiPT09ZSl7dmFyIGk9dC5hcnJheXx8W107aWYocilyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj0raVtlXTtyZXR1cm5bcixyXX07dmFyIGE9dC5hcnJheW1pbnVzfHxbXTtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj0raVtlXSxuPSthW2VdO3JldHVybiBpc05hTihyKSYmaXNOYU4obik/W05hTixOYU5dOltufHwwLHJ8fDBdfX12YXIgbz1uKGUsdC52YWx1ZSkscz1uKGUsdC52YWx1ZW1pbnVzKTtyZXR1cm4gcnx8dm9pZCAwPT09dC52YWx1ZW1pbnVzP2Z1bmN0aW9uKHQpe3ZhciBlPW8odCk7cmV0dXJuW2UsZV19OmZ1bmN0aW9uKHQpe3JldHVybltzKHQpLG8odCldfX19LHt9XSw2MDQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vLi4vcmVnaXN0cnlcIiksYT10KFwiLi4vLi4vbGliXCIpLG89dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIikscz10KFwiLi9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXt2YXIgYz1cImVycm9yX1wiK2wuYXhpcyx1PW8ubmV3Q29udGFpbmVyKGUsYyksaD10W2NdfHx7fTtmdW5jdGlvbiBmKHQsZSl7cmV0dXJuIGEuY29lcmNlKGgsdSxzLHQsZSl9aWYoITEhPT1mKFwidmlzaWJsZVwiLHZvaWQgMCE9PWguYXJyYXl8fHZvaWQgMCE9PWgudmFsdWV8fFwic3FydFwiPT09aC50eXBlKSl7dmFyIHA9ZihcInR5cGVcIixcImFycmF5XCJpbiBoP1wiZGF0YVwiOlwicGVyY2VudFwiKSxkPSEwO1wic3FydFwiIT09cCYmKGQ9ZihcInN5bW1ldHJpY1wiLCEoKFwiZGF0YVwiPT09cD9cImFycmF5bWludXNcIjpcInZhbHVlbWludXNcIilpbiBoKSkpLFwiZGF0YVwiPT09cD8oZihcImFycmF5XCIpLGYoXCJ0cmFjZXJlZlwiKSxkfHwoZihcImFycmF5bWludXNcIiksZihcInRyYWNlcmVmbWludXNcIikpKTpcInBlcmNlbnRcIiE9PXAmJlwiY29uc3RhbnRcIiE9PXB8fChmKFwidmFsdWVcIiksZHx8ZihcInZhbHVlbWludXNcIikpO3ZhciBnPVwiY29weV9cIitsLmluaGVyaXQrXCJzdHlsZVwiO2lmKGwuaW5oZXJpdCkoZVtcImVycm9yX1wiK2wuaW5oZXJpdF18fHt9KS52aXNpYmxlJiZmKGcsIShoLmNvbG9yfHxuKGgudGhpY2tuZXNzKXx8bihoLndpZHRoKSkpO2wuaW5oZXJpdCYmdVtnXXx8KGYoXCJjb2xvclwiLHIpLGYoXCJ0aGlja25lc3NcIiksZihcIndpZHRoXCIsaS50cmFjZUlzKGUsXCJnbDNkXCIpPzA6NCkpfX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vYXR0cmlidXRlc1wiOjYwMSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sNjA1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsLGE9dChcIi4vYXR0cmlidXRlc1wiKSxvPXtlcnJvcl94Om4uZXh0ZW5kRmxhdCh7fSxhKSxlcnJvcl95Om4uZXh0ZW5kRmxhdCh7fSxhKX07ZGVsZXRlIG8uZXJyb3JfeC5jb3B5X3pzdHlsZSxkZWxldGUgby5lcnJvcl95LmNvcHlfenN0eWxlLGRlbGV0ZSBvLmVycm9yX3kuY29weV95c3R5bGU7dmFyIHM9e2Vycm9yX3g6bi5leHRlbmRGbGF0KHt9LGEpLGVycm9yX3k6bi5leHRlbmRGbGF0KHt9LGEpLGVycm9yX3o6bi5leHRlbmRGbGF0KHt9LGEpfTtkZWxldGUgcy5lcnJvcl94LmNvcHlfeXN0eWxlLGRlbGV0ZSBzLmVycm9yX3kuY29weV95c3R5bGUsZGVsZXRlIHMuZXJyb3Jfei5jb3B5X3lzdHlsZSxkZWxldGUgcy5lcnJvcl96LmNvcHlfenN0eWxlLGUuZXhwb3J0cz17bW9kdWxlVHlwZTpcImNvbXBvbmVudFwiLG5hbWU6XCJlcnJvcmJhcnNcIixzY2hlbWE6e3RyYWNlczp7c2NhdHRlcjpvLGJhcjpvLGhpc3RvZ3JhbTpvLHNjYXR0ZXIzZDppKHMsXCJjYWxjXCIsXCJuZXN0ZWRcIiksc2NhdHRlcmdsOmkobyxcImNhbGNcIixcIm5lc3RlZFwiKX19LHN1cHBseURlZmF1bHRzOnQoXCIuL2RlZmF1bHRzXCIpLGNhbGM6dChcIi4vY2FsY1wiKSxtYWtlQ29tcHV0ZUVycm9yOnQoXCIuL2NvbXB1dGVfZXJyb3JcIikscGxvdDp0KFwiLi9wbG90XCIpLHN0eWxlOnQoXCIuL3N0eWxlXCIpLGhvdmVySW5mbzpmdW5jdGlvbih0LGUscil7KGUuZXJyb3JfeXx8e30pLnZpc2libGUmJihyLnllcnI9dC55aC10LnksZS5lcnJvcl95LnN5bW1ldHJpY3x8KHIueWVycm5lZz10LnktdC55cykpOyhlLmVycm9yX3h8fHt9KS52aXNpYmxlJiYoci54ZXJyPXQueGgtdC54LGUuZXJyb3JfeC5zeW1tZXRyaWN8fChyLnhlcnJuZWc9dC54LXQueHMpKX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi9hdHRyaWJ1dGVzXCI6NjAxLFwiLi9jYWxjXCI6NjAyLFwiLi9jb21wdXRlX2Vycm9yXCI6NjAzLFwiLi9kZWZhdWx0c1wiOjYwNCxcIi4vcGxvdFwiOjYwNixcIi4vc3R5bGVcIjo2MDd9XSw2MDY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiZmFzdC1pc251bWVyaWNcIiksYT10KFwiLi4vZHJhd2luZ1wiKSxvPXQoXCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7dmFyIGw9ci54YXhpcyxjPXIueWF4aXMsdT1zJiZzLmR1cmF0aW9uPjA7ZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBoLGY9ZVswXS50cmFjZSxwPWYuZXJyb3JfeHx8e30sZD1mLmVycm9yX3l8fHt9O2YuaWRzJiYoaD1mdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pO3ZhciBnPW8uaGFzTWFya2VycyhmKSYmZi5tYXJrZXIubWF4ZGlzcGxheWVkPjA7ZC52aXNpYmxlfHxwLnZpc2libGV8fChlPVtdKTt2YXIgdj1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoXCJnLmVycm9yYmFyXCIpLmRhdGEoZSxoKTtpZih2LmV4aXQoKS5yZW1vdmUoKSxlLmxlbmd0aCl7cC52aXNpYmxlfHx2LnNlbGVjdEFsbChcInBhdGgueGVycm9yXCIpLnJlbW92ZSgpLGQudmlzaWJsZXx8di5zZWxlY3RBbGwoXCJwYXRoLnllcnJvclwiKS5yZW1vdmUoKSx2LnN0eWxlKFwib3BhY2l0eVwiLDEpO3ZhciBtPXYuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJlcnJvcmJhclwiLCEwKTt1JiZtLnN0eWxlKFwib3BhY2l0eVwiLDApLnRyYW5zaXRpb24oKS5kdXJhdGlvbihzLmR1cmF0aW9uKS5zdHlsZShcIm9wYWNpdHlcIiwxKSxhLnNldENsaXBVcmwodixyLmxheWVyQ2xpcElkLHQpLHYuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj17eDplLmMycCh0LngpLHk6ci5jMnAodC55KX07dm9pZCAwIT09dC55aCYmKG4ueWg9ci5jMnAodC55aCksbi55cz1yLmMycCh0LnlzKSxpKG4ueXMpfHwobi5ub1lTPSEwLG4ueXM9ci5jMnAodC55cywhMCkpKTt2b2lkIDAhPT10LnhoJiYobi54aD1lLmMycCh0LnhoKSxuLnhzPWUuYzJwKHQueHMpLGkobi54cyl8fChuLm5vWFM9ITAsbi54cz1lLmMycCh0LnhzLCEwKSkpO3JldHVybiBufSh0LGwsYyk7aWYoIWd8fHQudmlzKXt2YXIgYSxvPWUuc2VsZWN0KFwicGF0aC55ZXJyb3JcIik7aWYoZC52aXNpYmxlJiZpKHIueCkmJmkoci55aCkmJmkoci55cykpe3ZhciBoPWQud2lkdGg7YT1cIk1cIisoci54LWgpK1wiLFwiK3IueWgrXCJoXCIrMipoK1wibS1cIitoK1wiLDBWXCIrci55cyxyLm5vWVN8fChhKz1cIm0tXCIraCtcIiwwaFwiKzIqaCksIW8uc2l6ZSgpP289ZS5hcHBlbmQoXCJwYXRoXCIpLnN0eWxlKFwidmVjdG9yLWVmZmVjdFwiLFwibm9uLXNjYWxpbmctc3Ryb2tlXCIpLmNsYXNzZWQoXCJ5ZXJyb3JcIiwhMCk6dSYmKG89by50cmFuc2l0aW9uKCkuZHVyYXRpb24ocy5kdXJhdGlvbikuZWFzZShzLmVhc2luZykpLG8uYXR0cihcImRcIixhKX1lbHNlIG8ucmVtb3ZlKCk7dmFyIGY9ZS5zZWxlY3QoXCJwYXRoLnhlcnJvclwiKTtpZihwLnZpc2libGUmJmkoci55KSYmaShyLnhoKSYmaShyLnhzKSl7dmFyIHY9KHAuY29weV95c3R5bGU/ZDpwKS53aWR0aDthPVwiTVwiK3IueGgrXCIsXCIrKHIueS12KStcInZcIisyKnYrXCJtMCwtXCIrditcIkhcIityLnhzLHIubm9YU3x8KGErPVwibTAsLVwiK3YrXCJ2XCIrMip2KSwhZi5zaXplKCk/Zj1lLmFwcGVuZChcInBhdGhcIikuc3R5bGUoXCJ2ZWN0b3ItZWZmZWN0XCIsXCJub24tc2NhbGluZy1zdHJva2VcIikuY2xhc3NlZChcInhlcnJvclwiLCEwKTp1JiYoZj1mLnRyYW5zaXRpb24oKS5kdXJhdGlvbihzLmR1cmF0aW9uKS5lYXNlKHMuZWFzaW5nKSksZi5hdHRyKFwiZFwiLGEpfWVsc2UgZi5yZW1vdmUoKX19KX19KX19LHtcIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzXCI6MTA3NixcIi4uL2RyYXdpbmdcIjo1OTksZDM6MTU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw2MDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vY29sb3JcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3QuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9ZS5lcnJvcl95fHx7fSxhPWUuZXJyb3JfeHx8e30sbz1uLnNlbGVjdCh0aGlzKTtvLnNlbGVjdEFsbChcInBhdGgueWVycm9yXCIpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsci50aGlja25lc3MrXCJweFwiKS5jYWxsKGkuc3Ryb2tlLHIuY29sb3IpLGEuY29weV95c3R5bGUmJihhPXIpLG8uc2VsZWN0QWxsKFwicGF0aC54ZXJyb3JcIikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixhLnRoaWNrbmVzcytcInB4XCIpLmNhbGwoaS5zdHJva2UsYS5jb2xvcil9KX19LHtcIi4uL2NvbG9yXCI6NTc4LGQzOjE1NX1dLDYwODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIiksaT10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKS5ob3ZlcmxhYmVsLGE9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2hvdmVybGFiZWw6e2JnY29sb3I6YSh7fSxpLmJnY29sb3Ise2FycmF5T2s6ITB9KSxib3JkZXJjb2xvcjphKHt9LGkuYm9yZGVyY29sb3Ise2FycmF5T2s6ITB9KSxmb250Om4oe2FycmF5T2s6ITAsZWRpdFR5cGU6XCJub25lXCJ9KSxhbGlnbjphKHt9LGkuYWxpZ24se2FycmF5T2s6ITB9KSxuYW1lbGVuZ3RoOmEoe30saS5uYW1lbGVuZ3RoLHthcnJheU9rOiEwfSksZWRpdFR5cGU6XCJub25lXCJ9fX0se1wiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiOjc3NSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo2MTh9XSw2MDk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpO2Z1bmN0aW9uIGEodCxlLHIsaSl7aT1pfHxuLmlkZW50aXR5LEFycmF5LmlzQXJyYXkodCkmJihlWzBdW3JdPWkodCkpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmNhbGNkYXRhLHI9dC5fZnVsbExheW91dDtmdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbi5jb2VyY2VIb3ZlcmluZm8oe2hvdmVyaW5mbzplfSx7X21vZHVsZTp0Ll9tb2R1bGV9LHIpfX1mb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKyl7dmFyIGw9ZVtzXSxjPWxbMF0udHJhY2U7aWYoIWkudHJhY2VJcyhjLFwicGllXCIpKXt2YXIgdT1pLnRyYWNlSXMoYyxcIjJkTWFwXCIpP2E6bi5maWxsQXJyYXk7dShjLmhvdmVyaW5mbyxsLFwiaGlcIixvKGMpKSxjLmhvdmVydGVtcGxhdGUmJnUoYy5ob3ZlcnRlbXBsYXRlLGwsXCJodFwiKSxjLmhvdmVybGFiZWwmJih1KGMuaG92ZXJsYWJlbC5iZ2NvbG9yLGwsXCJoYmdcIiksdShjLmhvdmVybGFiZWwuYm9yZGVyY29sb3IsbCxcImhiY1wiKSx1KGMuaG92ZXJsYWJlbC5mb250LnNpemUsbCxcImh0c1wiKSx1KGMuaG92ZXJsYWJlbC5mb250LmNvbG9yLGwsXCJodGNcIiksdShjLmhvdmVybGFiZWwuZm9udC5mYW1pbHksbCxcImh0ZlwiKSx1KGMuaG92ZXJsYWJlbC5uYW1lbGVuZ3RoLGwsXCJobmxcIiksdShjLmhvdmVybGFiZWwuYWxpZ24sbCxcImh0YVwiKSl9fX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5fV0sNjEwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4vaG92ZXJcIikuaG92ZXI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1uLmdldENvbXBvbmVudE1ldGhvZChcImFubm90YXRpb25zXCIsXCJvbkNsaWNrXCIpKHQsdC5faG92ZXJkYXRhKTtmdW5jdGlvbiBvKCl7dC5lbWl0KFwicGxvdGx5X2NsaWNrXCIse3BvaW50czp0Ll9ob3ZlcmRhdGEsZXZlbnQ6ZX0pfXZvaWQgMCE9PXImJmkodCxlLHIsITApLHQuX2hvdmVyZGF0YSYmZSYmZS50YXJnZXQmJihhJiZhLnRoZW4/YS50aGVuKG8pOm8oKSxlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiYmZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9fSx7XCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vaG92ZXJcIjo2MTR9XSw2MTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e1lBTkdMRTo2MCxIT1ZFUkFSUk9XU0laRTo2LEhPVkVSVEVYVFBBRDozLEhPVkVSRk9OVFNJWkU6MTMsSE9WRVJGT05UOlwiQXJpYWwsIHNhbnMtc2VyaWZcIixIT1ZFUk1JTlRJTUU6NTAsSE9WRVJJRDpcIi1ob3ZlclwifX0se31dLDYxMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9hdHRyaWJ1dGVzXCIpLGE9dChcIi4vaG92ZXJsYWJlbF9kZWZhdWx0c1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHM9bi5leHRlbmRGbGF0KHt9LG8uaG92ZXJsYWJlbCk7ZS5ob3ZlcnRlbXBsYXRlJiYocy5uYW1lbGVuZ3RoPS0xKSxhKHQsZSxmdW5jdGlvbihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfSxzKX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4vYXR0cmlidXRlc1wiOjYwOCxcIi4vaG92ZXJsYWJlbF9kZWZhdWx0c1wiOjYxNX1dLDYxMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIik7ci5nZXRTdWJwbG90PWZ1bmN0aW9uKHQpe3JldHVybiB0LnN1YnBsb3R8fHQueGF4aXMrdC55YXhpc3x8dC5nZW99LHIuaXNUcmFjZUluU3VicGxvdHM9ZnVuY3Rpb24odCxlKXtpZihcInNwbG9tXCI9PT10LnR5cGUpe2Zvcih2YXIgbj10LnhheGVzfHxbXSxpPXQueWF4ZXN8fFtdLGE9MDthPG4ubGVuZ3RoO2ErKylmb3IodmFyIG89MDtvPGkubGVuZ3RoO28rKylpZigtMSE9PWUuaW5kZXhPZihuW2FdK2lbb10pKXJldHVybiEwO3JldHVybiExfXJldHVybi0xIT09ZS5pbmRleE9mKHIuZ2V0U3VicGxvdCh0KSl9LHIuZmxhdD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodC5sZW5ndGgpLG49MDtuPHQubGVuZ3RoO24rKylyW25dPWU7cmV0dXJuIHJ9LHIucDJjPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aCksbj0wO248dC5sZW5ndGg7bisrKXJbbl09dFtuXS5wMmMoZSk7cmV0dXJuIHJ9LHIuZ2V0RGlzdGFuY2VGdW5jdGlvbj1mdW5jdGlvbih0LGUsbixpKXtyZXR1cm5cImNsb3Nlc3RcIj09PXQ/aXx8ci5xdWFkcmF0dXJlKGUsbik6XCJ4XCI9PT10P2U6bn0sci5nZXRDbG9zZXN0PWZ1bmN0aW9uKHQsZSxyKXtpZighMSE9PXIuaW5kZXgpci5pbmRleD49MCYmci5pbmRleDx0Lmxlbmd0aD9yLmRpc3RhbmNlPTA6ci5pbmRleD0hMTtlbHNlIGZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT1lKHRbbl0pO2k8PXIuZGlzdGFuY2UmJihyLmluZGV4PW4sci5kaXN0YW5jZT1pKX1yZXR1cm4gcn0sci5pbmJveD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQqZTwwfHwwPT09dD9yOjEvMH0sci5xdWFkcmF0dXJlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXQociksaT1lKHIpO3JldHVybiBNYXRoLnNxcnQobipuK2kqaSl9fSxyLm1ha2VFdmVudERhdGE9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPVwiaW5kZXhcImluIHQ/dC5pbmRleDp0LnBvaW50TnVtYmVyLGE9e2RhdGE6ZS5faW5wdXQsZnVsbERhdGE6ZSxjdXJ2ZU51bWJlcjplLmluZGV4LHBvaW50TnVtYmVyOml9O2lmKGUuX2luZGV4VG9Qb2ludHMpe3ZhciBvPWUuX2luZGV4VG9Qb2ludHNbaV07MT09PW8ubGVuZ3RoP2EucG9pbnRJbmRleD1vWzBdOmEucG9pbnRJbmRpY2VzPW99ZWxzZSBhLnBvaW50SW5kZXg9aTtyZXR1cm4gZS5fbW9kdWxlLmV2ZW50RGF0YT9hPWUuX21vZHVsZS5ldmVudERhdGEoYSx0LGUsbixpKTooXCJ4VmFsXCJpbiB0P2EueD10LnhWYWw6XCJ4XCJpbiB0JiYoYS54PXQueCksXCJ5VmFsXCJpbiB0P2EueT10LnlWYWw6XCJ5XCJpbiB0JiYoYS55PXQueSksdC54YSYmKGEueGF4aXM9dC54YSksdC55YSYmKGEueWF4aXM9dC55YSksdm9pZCAwIT09dC56TGFiZWxWYWwmJihhLno9dC56TGFiZWxWYWwpKSxyLmFwcGVuZEFycmF5UG9pbnRWYWx1ZShhLGUsaSksYX0sci5hcHBlbmRBcnJheVBvaW50VmFsdWU9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUuX2FycmF5QXR0cnM7aWYoaSlmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXSxjPWEobCk7aWYodm9pZCAwPT09dFtjXSl7dmFyIHU9byhuLm5lc3RlZFByb3BlcnR5KGUsbCkuZ2V0KCkscik7dm9pZCAwIT09dSYmKHRbY109dSl9fX0sci5hcHBlbmRBcnJheU11bHRpUG9pbnRWYWx1ZXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUuX2FycmF5QXR0cnM7aWYoaSlmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXSxjPWEobCk7aWYodm9pZCAwPT09dFtjXSl7Zm9yKHZhciB1PW4ubmVzdGVkUHJvcGVydHkoZSxsKS5nZXQoKSxoPW5ldyBBcnJheShyLmxlbmd0aCksZj0wO2Y8ci5sZW5ndGg7ZisrKWhbZl09byh1LHJbZl0pO3RbY109aH19fTt2YXIgaT17aWRzOlwiaWRcIixsb2NhdGlvbnM6XCJsb2NhdGlvblwiLGxhYmVsczpcImxhYmVsXCIsdmFsdWVzOlwidmFsdWVcIixcIm1hcmtlci5jb2xvcnNcIjpcImNvbG9yXCIscGFyZW50czpcInBhcmVudFwifTtmdW5jdGlvbiBhKHQpe3JldHVybiBpW3RdfHx0fWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9BcnJheS5pc0FycmF5KHQpJiZBcnJheS5pc0FycmF5KHRbZVswXV0pP3RbZVswXV1bZVsxXV06dm9pZCAwOnRbZV19fSx7XCIuLi8uLi9saWJcIjo3MDF9XSw2MTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiZmFzdC1pc251bWVyaWNcIiksYT10KFwidGlueWNvbG9yMlwiKSxvPXQoXCIuLi8uLi9saWJcIikscz10KFwiLi4vLi4vbGliL2V2ZW50c1wiKSxsPXQoXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIiksYz10KFwiLi4vLi4vbGliL292ZXJyaWRlX2N1cnNvclwiKSx1PXQoXCIuLi9kcmF3aW5nXCIpLGg9dChcIi4uL2NvbG9yXCIpLGY9dChcIi4uL2RyYWdlbGVtZW50XCIpLHA9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGQ9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGc9dChcIi4vaGVscGVyc1wiKSx2PXQoXCIuL2NvbnN0YW50c1wiKSxtPXYuWUFOR0xFLHk9TWF0aC5QSSptLzE4MCx4PTEvTWF0aC5zaW4oeSksYj1NYXRoLmNvcyh5KSxfPU1hdGguc2luKHkpLHc9di5IT1ZFUkFSUk9XU0laRSxrPXYuSE9WRVJURVhUUEFEO3IuaG92ZXI9ZnVuY3Rpb24odCxlLHIsYSl7dD1vLmdldEdyYXBoRGl2KHQpLG8udGhyb3R0bGUodC5fZnVsbExheW91dC5fdWlkK3YuSE9WRVJJRCx2LkhPVkVSTUlOVElNRSxmdW5jdGlvbigpeyFmdW5jdGlvbih0LGUscixhKXtyfHwocj1cInh5XCIpO3ZhciBsPUFycmF5LmlzQXJyYXkocik/cjpbcl0sdT10Ll9mdWxsTGF5b3V0LHY9dS5fcGxvdHN8fFtdLG09dltyXSx5PXUuX2hhcyhcImNhcnRlc2lhblwiKTtpZihtKXt2YXIgYj1tLm92ZXJsYXlzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pO2w9bC5jb25jYXQoYil9Zm9yKHZhciBfPWwubGVuZ3RoLHc9bmV3IEFycmF5KF8pLGs9bmV3IEFycmF5KF8pLEE9ITEsTD0wO0w8XztMKyspe3ZhciB6PWxbTF0sTz12W3pdO2lmKE8pQT0hMCx3W0xdPXAuZ2V0RnJvbUlkKHQsTy54YXhpcy5faWQpLGtbTF09cC5nZXRGcm9tSWQodCxPLnlheGlzLl9pZCk7ZWxzZXt2YXIgST11W3pdLl9zdWJwbG90O3dbTF09SS54YXhpcyxrW0xdPUkueWF4aXN9fXZhciBEPWUuaG92ZXJtb2RlfHx1LmhvdmVybW9kZTtEJiYhQSYmKEQ9XCJjbG9zZXN0XCIpO2lmKC0xPT09W1wieFwiLFwieVwiLFwiY2xvc2VzdFwiXS5pbmRleE9mKEQpfHwhdC5jYWxjZGF0YXx8dC5xdWVyeVNlbGVjdG9yKFwiLnpvb21ib3hcIil8fHQuX2RyYWdnaW5nKXJldHVybiBmLnVuaG92ZXJSYXcodCxlKTt2YXIgUCxSLEYsQixOLGosVixVLHEsSCxHLFksVyxYPS0xPT09dS5ob3ZlcmRpc3RhbmNlPzEvMDp1LmhvdmVyZGlzdGFuY2UsWj0tMT09PXUuc3Bpa2VkaXN0YW5jZT8xLzA6dS5zcGlrZWRpc3RhbmNlLCQ9W10sSj1bXSxLPXtoTGluZVBvaW50Om51bGwsdkxpbmVQb2ludDpudWxsfSxRPSExO2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKEQ9XCJhcnJheVwiLEY9MDtGPGUubGVuZ3RoO0YrKykoTj10LmNhbGNkYXRhW2VbRl0uY3VydmVOdW1iZXJ8fDBdKSYmKGo9TlswXS50cmFjZSxcInNraXBcIiE9PU5bMF0udHJhY2UuaG92ZXJpbmZvJiYoSi5wdXNoKE4pLFwiaFwiPT09ai5vcmllbnRhdGlvbiYmKFE9ITApKSk7ZWxzZXtmb3IoQj0wO0I8dC5jYWxjZGF0YS5sZW5ndGg7QisrKU49dC5jYWxjZGF0YVtCXSxcInNraXBcIiE9PShqPU5bMF0udHJhY2UpLmhvdmVyaW5mbyYmZy5pc1RyYWNlSW5TdWJwbG90cyhqLGwpJiYoSi5wdXNoKE4pLFwiaFwiPT09ai5vcmllbnRhdGlvbiYmKFE9ITApKTt2YXIgdHQsZXQscnQ9IWUudGFyZ2V0O2lmKHJ0KXR0PVwieHB4XCJpbiBlP2UueHB4OndbMF0uX2xlbmd0aC8yLGV0PVwieXB4XCJpbiBlP2UueXB4OmtbMF0uX2xlbmd0aC8yO2Vsc2V7aWYoITE9PT1zLnRyaWdnZXJIYW5kbGVyKHQsXCJwbG90bHlfYmVmb3JlaG92ZXJcIixlKSlyZXR1cm47dmFyIG50PWUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKHR0PWUuY2xpZW50WC1udC5sZWZ0LGV0PWUuY2xpZW50WS1udC50b3AsdHQ8MHx8dHQ+d1swXS5fbGVuZ3RofHxldDwwfHxldD5rWzBdLl9sZW5ndGgpcmV0dXJuIGYudW5ob3ZlclJhdyh0LGUpfWlmKGUucG9pbnRlclg9dHQrd1swXS5fb2Zmc2V0LGUucG9pbnRlclk9ZXQra1swXS5fb2Zmc2V0LFA9XCJ4dmFsXCJpbiBlP2cuZmxhdChsLGUueHZhbCk6Zy5wMmModyx0dCksUj1cInl2YWxcImluIGU/Zy5mbGF0KGwsZS55dmFsKTpnLnAyYyhrLGV0KSwhaShQWzBdKXx8IWkoUlswXSkpcmV0dXJuIG8ud2FybihcIkZ4LmhvdmVyIGZhaWxlZFwiLGUsdCksZi51bmhvdmVyUmF3KHQsZSl9dmFyIGl0PTEvMDtmb3IoQj0wO0I8Si5sZW5ndGg7QisrKWlmKChOPUpbQl0pJiZOWzBdJiZOWzBdLnRyYWNlJiYhMD09PU5bMF0udHJhY2UudmlzaWJsZSYmKGo9TlswXS50cmFjZSwtMT09PVtcImNhcnBldFwiLFwiY29udG91cmNhcnBldFwiXS5pbmRleE9mKGouX21vZHVsZS5uYW1lKSkpe2lmKFwic3Bsb21cIj09PWoudHlwZT9WPWxbVT0wXTooVj1nLmdldFN1YnBsb3QoaiksVT1sLmluZGV4T2YoVikpLHE9RCxZPXtjZDpOLHRyYWNlOmoseGE6d1tVXSx5YTprW1VdLG1heEhvdmVyRGlzdGFuY2U6WCxtYXhTcGlrZURpc3RhbmNlOlosaW5kZXg6ITEsZGlzdGFuY2U6TWF0aC5taW4oaXQsWCksc3Bpa2VEaXN0YW5jZToxLzAseFNwaWtlOnZvaWQgMCx5U3Bpa2U6dm9pZCAwLGNvbG9yOmguZGVmYXVsdExpbmUsbmFtZTpqLm5hbWUseDA6dm9pZCAwLHgxOnZvaWQgMCx5MDp2b2lkIDAseTE6dm9pZCAwLHhMYWJlbFZhbDp2b2lkIDAseUxhYmVsVmFsOnZvaWQgMCx6TGFiZWxWYWw6dm9pZCAwLHRleHQ6dm9pZCAwfSx1W1ZdJiYoWS5zdWJwbG90PXVbVl0uX3N1YnBsb3QpLHUuX3NwbG9tU2NlbmVzJiZ1Ll9zcGxvbVNjZW5lc1tqLnVpZF0mJihZLnNjZW5lPXUuX3NwbG9tU2NlbmVzW2oudWlkXSksVz0kLmxlbmd0aCxcImFycmF5XCI9PT1xKXt2YXIgYXQ9ZVtCXTtcInBvaW50TnVtYmVyXCJpbiBhdD8oWS5pbmRleD1hdC5wb2ludE51bWJlcixxPVwiY2xvc2VzdFwiKToocT1cIlwiLFwieHZhbFwiaW4gYXQmJihIPWF0Lnh2YWwscT1cInhcIiksXCJ5dmFsXCJpbiBhdCYmKEc9YXQueXZhbCxxPXE/XCJjbG9zZXN0XCI6XCJ5XCIpKX1lbHNlIEg9UFtVXSxHPVJbVV07aWYoMCE9PVgpaWYoai5fbW9kdWxlJiZqLl9tb2R1bGUuaG92ZXJQb2ludHMpe3ZhciBvdD1qLl9tb2R1bGUuaG92ZXJQb2ludHMoWSxILEcscSx1Ll9ob3ZlcmxheWVyKTtpZihvdClmb3IodmFyIHN0LGx0PTA7bHQ8b3QubGVuZ3RoO2x0Kyspc3Q9b3RbbHRdLGkoc3QueDApJiZpKHN0LnkwKSYmJC5wdXNoKFMoc3QsRCkpfWVsc2Ugby5sb2coXCJVbnJlY29nbml6ZWQgdHJhY2UgdHlwZSBpbiBob3ZlcjpcIixqKTtpZihcImNsb3Nlc3RcIj09PUQmJiQubGVuZ3RoPlcmJigkLnNwbGljZSgwLFcpLGl0PSRbMF0uZGlzdGFuY2UpLHkmJjAhPT1aJiYwPT09JC5sZW5ndGgpe1kuZGlzdGFuY2U9WixZLmluZGV4PSExO3ZhciBjdD1qLl9tb2R1bGUuaG92ZXJQb2ludHMoWSxILEcsXCJjbG9zZXN0XCIsdS5faG92ZXJsYXllcik7aWYoY3QmJihjdD1jdC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3Bpa2VEaXN0YW5jZTw9Wn0pKSxjdCYmY3QubGVuZ3RoKXt2YXIgdXQsaHQ9Y3QuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnhhLnNob3dzcGlrZXN9KTtpZihodC5sZW5ndGgpe3ZhciBmdD1odFswXTtpKGZ0LngwKSYmaShmdC55MCkmJih1dD12dChmdCksKCFLLnZMaW5lUG9pbnR8fEsudkxpbmVQb2ludC5zcGlrZURpc3RhbmNlPnV0LnNwaWtlRGlzdGFuY2UpJiYoSy52TGluZVBvaW50PXV0KSl9dmFyIHB0PWN0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC55YS5zaG93c3Bpa2VzfSk7aWYocHQubGVuZ3RoKXt2YXIgZHQ9cHRbMF07aShkdC54MCkmJmkoZHQueTApJiYodXQ9dnQoZHQpLCghSy5oTGluZVBvaW50fHxLLmhMaW5lUG9pbnQuc3Bpa2VEaXN0YW5jZT51dC5zcGlrZURpc3RhbmNlKSYmKEsuaExpbmVQb2ludD11dCkpfX19fWZ1bmN0aW9uIGd0KHQsZSl7Zm9yKHZhciByLG49bnVsbCxpPTEvMCxhPTA7YTx0Lmxlbmd0aDthKyspKHI9dFthXS5zcGlrZURpc3RhbmNlKTxpJiZyPD1lJiYobj10W2FdLGk9cik7cmV0dXJuIG59ZnVuY3Rpb24gdnQodCl7cmV0dXJuIHQ/e3hhOnQueGEseWE6dC55YSx4OnZvaWQgMCE9PXQueFNwaWtlP3QueFNwaWtlOih0LngwK3QueDEpLzIseTp2b2lkIDAhPT10LnlTcGlrZT90LnlTcGlrZToodC55MCt0LnkxKS8yLGRpc3RhbmNlOnQuZGlzdGFuY2Usc3Bpa2VEaXN0YW5jZTp0LnNwaWtlRGlzdGFuY2UsY3VydmVOdW1iZXI6dC50cmFjZS5pbmRleCxjb2xvcjp0LmNvbG9yLHBvaW50TnVtYmVyOnQuaW5kZXh9Om51bGx9dmFyIG10PXtmdWxsTGF5b3V0OnUsY29udGFpbmVyOnUuX2hvdmVybGF5ZXIsb3V0ZXJDb250YWluZXI6dS5fcGFwZXJkaXYsZXZlbnQ6ZX0seXQ9dC5fc3Bpa2Vwb2ludHMseHQ9e3ZMaW5lUG9pbnQ6Sy52TGluZVBvaW50LGhMaW5lUG9pbnQ6Sy5oTGluZVBvaW50fTtpZih0Ll9zcGlrZXBvaW50cz14dCx5JiYwIT09WiYmMCE9PSQubGVuZ3RoKXt2YXIgYnQ9JC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQueWEuc2hvd3NwaWtlc30pLF90PWd0KGJ0LFopO0suaExpbmVQb2ludD12dChfdCk7dmFyIHd0PSQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnhhLnNob3dzcGlrZXN9KSxrdD1ndCh3dCxaKTtLLnZMaW5lUG9pbnQ9dnQoa3QpfWlmKDA9PT0kLmxlbmd0aCl7dmFyIEF0PWYudW5ob3ZlclJhdyh0LGUpO3JldHVybiF5fHxudWxsPT09Sy5oTGluZVBvaW50JiZudWxsPT09Sy52TGluZVBvaW50fHxDKHl0KSYmRShLLG10KSxBdH15JiZDKHl0KSYmRShLLG10KTskLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kaXN0YW5jZS1lLmRpc3RhbmNlfSk7dmFyIFR0PXQuX2hvdmVyZGF0YSxNdD1bXTtmb3IoRj0wO0Y8JC5sZW5ndGg7RisrKXt2YXIgU3Q9JFtGXSxFdD1nLm1ha2VFdmVudERhdGEoU3QsU3QudHJhY2UsU3QuY2QpO2lmKCExIT09U3QuaG92ZXJ0ZW1wbGF0ZSl7dmFyIEN0PSExO1N0LmNkW1N0LmluZGV4XSYmU3QuY2RbU3QuaW5kZXhdLmh0JiYoQ3Q9U3QuY2RbU3QuaW5kZXhdLmh0KSxTdC5ob3ZlcnRlbXBsYXRlPUN0fHxTdC50cmFjZS5ob3ZlcnRlbXBsYXRlfHwhMX1TdC5ldmVudERhdGE9W0V0XSxNdC5wdXNoKEV0KX10Ll9ob3ZlcmRhdGE9TXQ7dmFyIEx0PVwieVwiPT09RCYmKEoubGVuZ3RoPjF8fCQubGVuZ3RoPjEpfHxcImNsb3Nlc3RcIj09PUQmJlEmJiQubGVuZ3RoPjEsenQ9aC5jb21iaW5lKHUucGxvdF9iZ2NvbG9yfHxoLmJhY2tncm91bmQsdS5wYXBlcl9iZ2NvbG9yKSxPdD17aG92ZXJtb2RlOkQscm90YXRlTGFiZWxzOkx0LGJnQ29sb3I6enQsY29udGFpbmVyOnUuX2hvdmVybGF5ZXIsb3V0ZXJDb250YWluZXI6dS5fcGFwZXJkaXYsY29tbW9uTGFiZWxPcHRzOnUuaG92ZXJsYWJlbCxob3ZlcmRpc3RhbmNlOnUuaG92ZXJkaXN0YW5jZX0sSXQ9VCgkLE90LHQpO2lmKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzLGwsYyx1PTAsaD0xLGY9dC5zaXplKCkscD1uZXcgQXJyYXkoZik7ZnVuY3Rpb24gZCh0KXt2YXIgZT10WzBdLHI9dFt0Lmxlbmd0aC0xXTtpZihpPWUucG1pbi1lLnBvcy1lLmRwK2Uuc2l6ZSxhPXIucG9zK3IuZHArci5zaXplLWUucG1heCxpPi4wMSl7Zm9yKHM9dC5sZW5ndGgtMTtzPj0wO3MtLSl0W3NdLmRwKz1pO249ITF9aWYoIShhPC4wMSkpe2lmKGk8LS4wMSl7Zm9yKHM9dC5sZW5ndGgtMTtzPj0wO3MtLSl0W3NdLmRwLT1hO249ITF9aWYobil7dmFyIGM9MDtmb3Iobz0wO288dC5sZW5ndGg7bysrKShsPXRbb10pLnBvcytsLmRwK2wuc2l6ZT5lLnBtYXgmJmMrKztmb3Iobz10Lmxlbmd0aC0xO28+PTAmJiEoYzw9MCk7by0tKShsPXRbb10pLnBvcz5lLnBtYXgtMSYmKGwuZGVsPSEwLGMtLSk7Zm9yKG89MDtvPHQubGVuZ3RoJiYhKGM8PTApO28rKylpZigobD10W29dKS5wb3M8ZS5wbWluKzEpZm9yKGwuZGVsPSEwLGMtLSxhPTIqbC5zaXplLHM9dC5sZW5ndGgtMTtzPj0wO3MtLSl0W3NdLmRwLT1hO2ZvcihvPXQubGVuZ3RoLTE7bz49MCYmIShjPD0wKTtvLS0pKGw9dFtvXSkucG9zK2wuZHArbC5zaXplPmUucG1heCYmKGwuZGVsPSEwLGMtLSl9fX1mb3IodC5lYWNoKGZ1bmN0aW9uKHQsbil7dmFyIGk9dFtlXSxhPVwieFwiPT09aS5faWQuY2hhckF0KDApLG89aS5yYW5nZTshbiYmbyYmb1swXT5vWzFdIT09YSYmKGg9LTEpLHBbbl09W3tkYXR1bTp0LGk6bix0cmFjZUluZGV4OnQudHJhY2UuaW5kZXgsZHA6MCxwb3M6dC5wb3MscG9zcmVmOnQucG9zcmVmLHNpemU6dC5ieSooYT94OjEpLzIscG1pbjowLHBtYXg6YT9yLndpZHRoOnIuaGVpZ2h0fV19KSxwLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXS5wb3NyZWYtZVswXS5wb3NyZWZ8fGgqKGVbMF0udHJhY2VJbmRleC10WzBdLnRyYWNlSW5kZXgpfSk7IW4mJnU8PWY7KXtmb3IodSsrLG49ITAsbz0wO288cC5sZW5ndGgtMTspe3ZhciBnPXBbb10sdj1wW28rMV0sbT1nW2cubGVuZ3RoLTFdLHk9dlswXTtpZigoaT1tLnBvcyttLmRwK20uc2l6ZS15LnBvcy15LmRwK3kuc2l6ZSk+LjAxJiZtLnBtaW49PT15LnBtaW4mJm0ucG1heD09PXkucG1heCl7Zm9yKHM9di5sZW5ndGgtMTtzPj0wO3MtLSl2W3NdLmRwKz1pO2ZvcihnLnB1c2guYXBwbHkoZyx2KSxwLnNwbGljZShvKzEsMSksYz0wLHM9Zy5sZW5ndGgtMTtzPj0wO3MtLSljKz1nW3NdLmRwO2ZvcihhPWMvZy5sZW5ndGgscz1nLmxlbmd0aC0xO3M+PTA7cy0tKWdbc10uZHAtPWE7bj0hMX1lbHNlIG8rK31wLmZvckVhY2goZCl9Zm9yKG89cC5sZW5ndGgtMTtvPj0wO28tLSl7dmFyIGI9cFtvXTtmb3Iocz1iLmxlbmd0aC0xO3M+PTA7cy0tKXt2YXIgXz1iW3NdLHc9Xy5kYXR1bTt3Lm9mZnNldD1fLmRwLHcuZGVsPV8uZGVsfX19KEl0LEx0P1wieGFcIjpcInlhXCIsdSksTShJdCxMdCksZS50YXJnZXQmJmUudGFyZ2V0LnRhZ05hbWUpe3ZhciBEdD1kLmdldENvbXBvbmVudE1ldGhvZChcImFubm90YXRpb25zXCIsXCJoYXNDbGlja1RvU2hvd1wiKSh0LE10KTtjKG4uc2VsZWN0KGUudGFyZ2V0KSxEdD9cInBvaW50ZXJcIjpcIlwiKX1pZighZS50YXJnZXR8fGF8fCFmdW5jdGlvbih0LGUscil7aWYoIXJ8fHIubGVuZ3RoIT09dC5faG92ZXJkYXRhLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG49ci5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIGk9cltuXSxhPXQuX2hvdmVyZGF0YVtuXTtpZihpLmN1cnZlTnVtYmVyIT09YS5jdXJ2ZU51bWJlcnx8U3RyaW5nKGkucG9pbnROdW1iZXIpIT09U3RyaW5nKGEucG9pbnROdW1iZXIpfHxTdHJpbmcoaS5wb2ludE51bWJlcnMpIT09U3RyaW5nKGEucG9pbnROdW1iZXJzKSlyZXR1cm4hMH1yZXR1cm4hMX0odCwwLFR0KSlyZXR1cm47VHQmJnQuZW1pdChcInBsb3RseV91bmhvdmVyXCIse2V2ZW50OmUscG9pbnRzOlR0fSk7dC5lbWl0KFwicGxvdGx5X2hvdmVyXCIse2V2ZW50OmUscG9pbnRzOnQuX2hvdmVyZGF0YSx4YXhlczp3LHlheGVzOmsseHZhbHM6UCx5dmFsczpSfSl9KHQsZSxyLGEpfSl9LHIubG9uZUhvdmVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e2NvbG9yOnQuY29sb3J8fGguZGVmYXVsdExpbmUseDA6dC54MHx8dC54fHwwLHgxOnQueDF8fHQueHx8MCx5MDp0LnkwfHx0Lnl8fDAseTE6dC55MXx8dC55fHwwLHhMYWJlbDp0LnhMYWJlbCx5TGFiZWw6dC55TGFiZWwsekxhYmVsOnQuekxhYmVsLHRleHQ6dC50ZXh0LG5hbWU6dC5uYW1lLGlkZWFsQWxpZ246dC5pZGVhbEFsaWduLGJvcmRlckNvbG9yOnQuYm9yZGVyQ29sb3IsZm9udEZhbWlseTp0LmZvbnRGYW1pbHksZm9udFNpemU6dC5mb250U2l6ZSxmb250Q29sb3I6dC5mb250Q29sb3IsbmFtZUxlbmd0aDp0Lm5hbWVMZW5ndGgsdGV4dEFsaWduOnQudGV4dEFsaWduLHRyYWNlOnQudHJhY2V8fHtpbmRleDowLGhvdmVyaW5mbzpcIlwifSx4YTp7X29mZnNldDowfSx5YTp7X29mZnNldDowfSxpbmRleDowLGhvdmVydGVtcGxhdGU6dC5ob3ZlcnRlbXBsYXRlfHwhMSxldmVudERhdGE6dC5ldmVudERhdGF8fCExLGhvdmVydGVtcGxhdGVMYWJlbHM6dC5ob3ZlcnRlbXBsYXRlTGFiZWxzfHwhMX0saT1uLnNlbGVjdChlLmNvbnRhaW5lciksYT1lLm91dGVyQ29udGFpbmVyP24uc2VsZWN0KGUub3V0ZXJDb250YWluZXIpOmksbz17aG92ZXJtb2RlOlwiY2xvc2VzdFwiLHJvdGF0ZUxhYmVsczohMSxiZ0NvbG9yOmUuYmdDb2xvcnx8aC5iYWNrZ3JvdW5kLGNvbnRhaW5lcjppLG91dGVyQ29udGFpbmVyOmF9LHM9VChbcl0sbyxlLmdkKTtyZXR1cm4gTShzLG8ucm90YXRlTGFiZWxzKSxzLm5vZGUoKX0sci5tdWx0aUhvdmVycz1mdW5jdGlvbih0LGUpe0FycmF5LmlzQXJyYXkodCl8fCh0PVt0XSk7dmFyIHI9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJue2NvbG9yOnQuY29sb3J8fGguZGVmYXVsdExpbmUseDA6dC54MHx8dC54fHwwLHgxOnQueDF8fHQueHx8MCx5MDp0LnkwfHx0Lnl8fDAseTE6dC55MXx8dC55fHwwLHhMYWJlbDp0LnhMYWJlbCx5TGFiZWw6dC55TGFiZWwsekxhYmVsOnQuekxhYmVsLHRleHQ6dC50ZXh0LG5hbWU6dC5uYW1lLGlkZWFsQWxpZ246dC5pZGVhbEFsaWduLGJvcmRlckNvbG9yOnQuYm9yZGVyQ29sb3IsZm9udEZhbWlseTp0LmZvbnRGYW1pbHksZm9udFNpemU6dC5mb250U2l6ZSxmb250Q29sb3I6dC5mb250Q29sb3IsbmFtZUxlbmd0aDp0Lm5hbWVMZW5ndGgsdGV4dEFsaWduOnQudGV4dEFsaWduLHRyYWNlOnQudHJhY2V8fHtpbmRleDowLGhvdmVyaW5mbzpcIlwifSx4YTp7X29mZnNldDowfSx5YTp7X29mZnNldDowfSxpbmRleDowLGhvdmVydGVtcGxhdGU6dC5ob3ZlcnRlbXBsYXRlfHwhMSxldmVudERhdGE6dC5ldmVudERhdGF8fCExLGhvdmVydGVtcGxhdGVMYWJlbHM6dC5ob3ZlcnRlbXBsYXRlTGFiZWxzfHwhMX19KSxpPW4uc2VsZWN0KGUuY29udGFpbmVyKSxhPWUub3V0ZXJDb250YWluZXI/bi5zZWxlY3QoZS5vdXRlckNvbnRhaW5lcik6aSxvPXtob3Zlcm1vZGU6XCJjbG9zZXN0XCIscm90YXRlTGFiZWxzOiExLGJnQ29sb3I6ZS5iZ0NvbG9yfHxoLmJhY2tncm91bmQsY29udGFpbmVyOmksb3V0ZXJDb250YWluZXI6YX0scz1UKHIsbyxlLmdkKSxsPTAsYz0wO3JldHVybiBzLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC55MC1lLnkwfSkuZWFjaChmdW5jdGlvbih0LHIpe3ZhciBuPXQueTAtdC5ieS8yO3Qub2Zmc2V0PW4tNTxsP2wtbis1OjAsbD1uK3QuYnkrdC5vZmZzZXQscj09PWUuYW5jaG9ySW5kZXgmJihjPXQub2Zmc2V0KX0pLmVhY2goZnVuY3Rpb24odCl7dC5vZmZzZXQtPWN9KSxNKHMsby5yb3RhdGVMYWJlbHMpLHN9O3ZhciBBPS88ZXh0cmE+KFtcXHNcXFNdKik8XFwvZXh0cmE+LztmdW5jdGlvbiBUKHQsZSxyKXt2YXIgaT1yLl9mdWxsTGF5b3V0LGE9ZS5ob3Zlcm1vZGUscz1lLnJvdGF0ZUxhYmVscyxjPWUuYmdDb2xvcixmPWUuY29udGFpbmVyLHA9ZS5vdXRlckNvbnRhaW5lcixkPWUuY29tbW9uTGFiZWxPcHRzfHx7fSxnPWUuZm9udEZhbWlseXx8di5IT1ZFUkZPTlQseT1lLmZvbnRTaXplfHx2LkhPVkVSRk9OVFNJWkUseD10WzBdLGI9eC54YSxfPXgueWEsVD1cInlcIj09PWE/XCJ5TGFiZWxcIjpcInhMYWJlbFwiLE09eFtUXSxTPShTdHJpbmcoTSl8fFwiXCIpLnNwbGl0KFwiIFwiKVswXSxFPXAubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEM9RS50b3Asej1FLndpZHRoLE89RS5oZWlnaHQsST12b2lkIDAhPT1NJiZ4LmRpc3RhbmNlPD1lLmhvdmVyZGlzdGFuY2UmJihcInhcIj09PWF8fFwieVwiPT09YSk7aWYoSSl7dmFyIEQsUCxSPSEwO2ZvcihEPTA7RDx0Lmxlbmd0aDtEKyspaWYoUiYmdm9pZCAwPT09dFtEXS56TGFiZWwmJihSPSExKSxQPXRbRF0uaG92ZXJpbmZvfHx0W0RdLnRyYWNlLmhvdmVyaW5mbyl7dmFyIEY9QXJyYXkuaXNBcnJheShQKT9QOlAuc3BsaXQoXCIrXCIpO2lmKC0xPT09Ri5pbmRleE9mKFwiYWxsXCIpJiYtMT09PUYuaW5kZXhPZihhKSl7ST0hMTticmVha319UiYmKEk9ITEpfXZhciBCPWYuc2VsZWN0QWxsKFwiZy5heGlzdGV4dFwiKS5kYXRhKEk/WzBdOltdKTtCLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiYXhpc3RleHRcIiwhMCksQi5leGl0KCkucmVtb3ZlKCksQi5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9bi5zZWxlY3QodGhpcyksaT1vLmVuc3VyZVNpbmdsZShlLFwicGF0aFwiLFwiXCIsZnVuY3Rpb24odCl7dC5zdHlsZSh7XCJzdHJva2Utd2lkdGhcIjpcIjFweFwifSl9KSxzPW8uZW5zdXJlU2luZ2xlKGUsXCJ0ZXh0XCIsXCJcIixmdW5jdGlvbih0KXt0LmF0dHIoXCJkYXRhLW5vdGV4XCIsMSl9KSxjPWQuYmdjb2xvcnx8aC5kZWZhdWx0TGluZSxmPWQuYm9yZGVyY29sb3J8fGguY29udHJhc3QoYykscD1oLmNvbnRyYXN0KGMpO2kuc3R5bGUoe2ZpbGw6YyxzdHJva2U6Zn0pLHMudGV4dChNKS5jYWxsKHUuZm9udCxkLmZvbnQuZmFtaWx5fHxnLGQuZm9udC5zaXplfHx5LGQuZm9udC5jb2xvcnx8cCkuY2FsbChsLnBvc2l0aW9uVGV4dCwwLDApLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsciksZS5hdHRyKFwidHJhbnNmb3JtXCIsXCJcIik7dmFyIHY9cy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoXCJ4XCI9PT1hKXtzLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLFwibWlkZGxlXCIpLmNhbGwobC5wb3NpdGlvblRleHQsMCxcInRvcFwiPT09Yi5zaWRlP0Mtdi5ib3R0b20tdy1rOkMtdi50b3ArdytrKTt2YXIgbT1cInRvcFwiPT09Yi5zaWRlP1wiLVwiOlwiXCI7aS5hdHRyKFwiZFwiLFwiTTAsMExcIit3K1wiLFwiK20rdytcIkhcIisoayt2LndpZHRoLzIpK1widlwiK20rKDIqayt2LmhlaWdodCkrXCJILVwiKyhrK3Yud2lkdGgvMikrXCJWXCIrbSt3K1wiSC1cIit3K1wiWlwiKSxlLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIisoYi5fb2Zmc2V0Kyh4LngwK3gueDEpLzIpK1wiLFwiKyhfLl9vZmZzZXQrKFwidG9wXCI9PT1iLnNpZGU/MDpfLl9sZW5ndGgpKStcIilcIil9ZWxzZXtzLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLFwicmlnaHRcIj09PV8uc2lkZT9cInN0YXJ0XCI6XCJlbmRcIikuY2FsbChsLnBvc2l0aW9uVGV4dCwoXCJyaWdodFwiPT09Xy5zaWRlPzE6LTEpKihrK3cpLEMtdi50b3Atdi5oZWlnaHQvMik7dmFyIEE9XCJyaWdodFwiPT09Xy5zaWRlP1wiXCI6XCItXCI7aS5hdHRyKFwiZFwiLFwiTTAsMExcIitBK3crXCIsXCIrdytcIlZcIisoayt2LmhlaWdodC8yKStcImhcIitBKygyKmsrdi53aWR0aCkrXCJWLVwiKyhrK3YuaGVpZ2h0LzIpK1wiSFwiK0ErdytcIlYtXCIrdytcIlpcIiksZS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrKGIuX29mZnNldCsoXCJyaWdodFwiPT09Xy5zaWRlP2IuX2xlbmd0aDowKSkrXCIsXCIrKF8uX29mZnNldCsoeC55MCt4LnkxKS8yKStcIilcIil9dD10LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dC56TGFiZWxWYWx8fCh0W1RdfHxcIlwiKS5zcGxpdChcIiBcIilbMF09PT1TfSl9KTt2YXIgTj1mLnNlbGVjdEFsbChcImcuaG92ZXJ0ZXh0XCIpLmRhdGEodCxmdW5jdGlvbih0KXtyZXR1cm5bdC50cmFjZS5pbmRleCx0LmluZGV4LHQueDAsdC55MCx0Lm5hbWUsdC5hdHRyLHQueGEsdC55YXx8XCJcIl0uam9pbihcIixcIil9KTtyZXR1cm4gTi5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcImhvdmVydGV4dFwiLCEwKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7dC5hcHBlbmQoXCJyZWN0XCIpLmNhbGwoaC5maWxsLGguYWRkT3BhY2l0eShjLC44KSksdC5hcHBlbmQoXCJ0ZXh0XCIpLmNsYXNzZWQoXCJuYW1lXCIsITApLHQuYXBwZW5kKFwicGF0aFwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLFwiMXB4XCIpLHQuYXBwZW5kKFwidGV4dFwiKS5jbGFzc2VkKFwibnVtc1wiLCEwKS5jYWxsKHUuZm9udCxnLHkpfSksTi5leGl0KCkucmVtb3ZlKCksTi5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLmF0dHIoXCJ0cmFuc2Zvcm1cIixcIlwiKSxmPVwiXCIscD1cIlwiLGQ9dC5iZ2NvbG9yfHx0LmNvbG9yLHY9aC5jb21iaW5lKGgub3BhY2l0eShkKT9kOmguZGVmYXVsdExpbmUsYykseD1oLmNvbWJpbmUoaC5vcGFjaXR5KHQuY29sb3IpP3QuY29sb3I6aC5kZWZhdWx0TGluZSxjKSxiPXQuYm9yZGVyQ29sb3J8fGguY29udHJhc3Qodik7dm9pZCAwIT09dC5uYW1lT3ZlcnJpZGUmJih0Lm5hbWU9dC5uYW1lT3ZlcnJpZGUpLHQubmFtZSYmKGkubWV0YSYmKHQubmFtZT1vLnRlbXBsYXRlU3RyaW5nKHQubmFtZSx7bWV0YTppLm1ldGF9KSksZj1MKHQubmFtZSx0Lm5hbWVMZW5ndGgpKSx2b2lkIDAhPT10LnpMYWJlbD8odm9pZCAwIT09dC54TGFiZWwmJihwKz1cIng6IFwiK3QueExhYmVsK1wiPGJyPlwiKSx2b2lkIDAhPT10LnlMYWJlbCYmKHArPVwieTogXCIrdC55TGFiZWwrXCI8YnI+XCIpLHArPShwP1wiejogXCI6XCJcIikrdC56TGFiZWwpOkkmJnRbYStcIkxhYmVsXCJdPT09TT9wPXRbKFwieFwiPT09YT9cInlcIjpcInhcIikrXCJMYWJlbFwiXXx8XCJcIjp2b2lkIDA9PT10LnhMYWJlbD92b2lkIDAhPT10LnlMYWJlbCYmXCJzY2F0dGVyY2FycGV0XCIhPT10LnRyYWNlLnR5cGUmJihwPXQueUxhYmVsKTpwPXZvaWQgMD09PXQueUxhYmVsP3QueExhYmVsOlwiKFwiK3QueExhYmVsK1wiLCBcIit0LnlMYWJlbCtcIilcIiwhdC50ZXh0JiYwIT09dC50ZXh0fHxBcnJheS5pc0FycmF5KHQudGV4dCl8fChwKz0ocD9cIjxicj5cIjpcIlwiKSt0LnRleHQpLHZvaWQgMCE9PXQuZXh0cmFUZXh0JiYocCs9KHA/XCI8YnI+XCI6XCJcIikrdC5leHRyYVRleHQpLFwiXCIhPT1wfHx0LmhvdmVydGVtcGxhdGV8fChcIlwiPT09ZiYmZS5yZW1vdmUoKSxwPWYpO3ZhciBfPXIuX2Z1bGxMYXlvdXQuX2QzbG9jYWxlLFQ9dC5ob3ZlcnRlbXBsYXRlfHwhMSxTPXQuaG92ZXJ0ZW1wbGF0ZUxhYmVsc3x8dCxFPXQuZXZlbnREYXRhWzBdfHx7fTtUJiYocD0ocD1vLmhvdmVydGVtcGxhdGVTdHJpbmcoVCxTLF8sRSx7bWV0YTppLm1ldGF9KSkucmVwbGFjZShBLGZ1bmN0aW9uKGUscil7cmV0dXJuIGY9TChyLHQubmFtZUxlbmd0aCksXCJcIn0pKTt2YXIgRD1lLnNlbGVjdChcInRleHQubnVtc1wiKS5jYWxsKHUuZm9udCx0LmZvbnRGYW1pbHl8fGcsdC5mb250U2l6ZXx8eSx0LmZvbnRDb2xvcnx8YikudGV4dChwKS5hdHRyKFwiZGF0YS1ub3RleFwiLDEpLmNhbGwobC5wb3NpdGlvblRleHQsMCwwKS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHIpLFA9ZS5zZWxlY3QoXCJ0ZXh0Lm5hbWVcIiksUj0wLEY9MDtpZihmJiZmIT09cCl7UC5jYWxsKHUuZm9udCx0LmZvbnRGYW1pbHl8fGcsdC5mb250U2l6ZXx8eSx4KS50ZXh0KGYpLmF0dHIoXCJkYXRhLW5vdGV4XCIsMSkuY2FsbChsLnBvc2l0aW9uVGV4dCwwLDApLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMscik7dmFyIEI9UC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Uj1CLndpZHRoKzIqayxGPUIuaGVpZ2h0KzIqa31lbHNlIFAucmVtb3ZlKCksZS5zZWxlY3QoXCJyZWN0XCIpLnJlbW92ZSgpO2Uuc2VsZWN0KFwicGF0aFwiKS5zdHlsZSh7ZmlsbDp2LHN0cm9rZTpifSk7dmFyIE4saixWPUQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFU9dC54YS5fb2Zmc2V0Kyh0LngwK3QueDEpLzIscT10LnlhLl9vZmZzZXQrKHQueTArdC55MSkvMixIPU1hdGguYWJzKHQueDEtdC54MCksRz1NYXRoLmFicyh0LnkxLXQueTApLFk9Vi53aWR0aCt3K2srUjtpZih0LnR5MD1DLVYudG9wLHQuYng9Vi53aWR0aCsyKmssdC5ieT1NYXRoLm1heChWLmhlaWdodCsyKmssRiksdC5hbmNob3I9XCJzdGFydFwiLHQudHh3aWR0aD1WLndpZHRoLHQudHgyd2lkdGg9Uix0Lm9mZnNldD0wLHMpdC5wb3M9VSxOPXErRy8yK1k8PU8saj1xLUcvMi1ZPj0wLFwidG9wXCIhPT10LmlkZWFsQWxpZ24mJk58fCFqP04/KHErPUcvMix0LmFuY2hvcj1cInN0YXJ0XCIpOnQuYW5jaG9yPVwibWlkZGxlXCI6KHEtPUcvMix0LmFuY2hvcj1cImVuZFwiKTtlbHNlIGlmKHQucG9zPXEsTj1VK0gvMitZPD16LGo9VS1ILzItWT49MCxcImxlZnRcIiE9PXQuaWRlYWxBbGlnbiYmTnx8IWopaWYoTilVKz1ILzIsdC5hbmNob3I9XCJzdGFydFwiO2Vsc2V7dC5hbmNob3I9XCJtaWRkbGVcIjt2YXIgVz1ZLzIsWD1VK1cteixaPVUtVztYPjAmJihVLT1YKSxaPDAmJihVKz0tWil9ZWxzZSBVLT1ILzIsdC5hbmNob3I9XCJlbmRcIjtELmF0dHIoXCJ0ZXh0LWFuY2hvclwiLHQuYW5jaG9yKSxSJiZQLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLHQuYW5jaG9yKSxlLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIitVK1wiLFwiK3ErXCIpXCIrKHM/XCJyb3RhdGUoXCIrbStcIilcIjpcIlwiKSl9KSxOfWZ1bmN0aW9uIE0odCxlKXt0LmVhY2goZnVuY3Rpb24odCl7dmFyIHI9bi5zZWxlY3QodGhpcyk7aWYodC5kZWwpcmV0dXJuIHIucmVtb3ZlKCk7dmFyIGk9ci5zZWxlY3QoXCJ0ZXh0Lm51bXNcIiksYT10LmFuY2hvcixvPVwiZW5kXCI9PT1hPy0xOjEscz17c3RhcnQ6MSxlbmQ6LTEsbWlkZGxlOjB9W2FdLGM9cyoodytrKSxoPWMrcyoodC50eHdpZHRoK2spLGY9MCxwPXQub2Zmc2V0O1wibWlkZGxlXCI9PT1hJiYoYy09dC50eDJ3aWR0aC8yLGgrPXQudHh3aWR0aC8yK2spLGUmJihwKj0tXyxmPXQub2Zmc2V0KmIpLHIuc2VsZWN0KFwicGF0aFwiKS5hdHRyKFwiZFwiLFwibWlkZGxlXCI9PT1hP1wiTS1cIisodC5ieC8yK3QudHgyd2lkdGgvMikrXCIsXCIrKHAtdC5ieS8yKStcImhcIit0LmJ4K1widlwiK3QuYnkrXCJoLVwiK3QuYngrXCJaXCI6XCJNMCwwTFwiKyhvKncrZikrXCIsXCIrKHcrcCkrXCJ2XCIrKHQuYnkvMi13KStcImhcIitvKnQuYngrXCJ2LVwiK3QuYnkrXCJIXCIrKG8qdytmKStcIlZcIisocC13KStcIlpcIik7dmFyIGQ9YytmLGc9cCt0LnR5MC10LmJ5LzIrayx2PXQudGV4dEFsaWdufHxcImF1dG9cIjtcImF1dG9cIiE9PXYmJihcImxlZnRcIj09PXYmJlwic3RhcnRcIiE9PWE/KGkuYXR0cihcInRleHQtYW5jaG9yXCIsXCJzdGFydFwiKSxkPS10LmJ4LWspOlwicmlnaHRcIj09PXYmJlwiZW5kXCIhPT1hJiYoaS5hdHRyKFwidGV4dC1hbmNob3JcIixcImVuZFwiKSxkPXQuYngraykpLGkuY2FsbChsLnBvc2l0aW9uVGV4dCxkLGcpLHQudHgyd2lkdGgmJihyLnNlbGVjdChcInRleHQubmFtZVwiKS5jYWxsKGwucG9zaXRpb25UZXh0LGgrcyprK2YscCt0LnR5MC10LmJ5LzIrayksci5zZWxlY3QoXCJyZWN0XCIpLmNhbGwodS5zZXRSZWN0LGgrKHMtMSkqdC50eDJ3aWR0aC8yK2YscC10LmJ5LzItMSx0LnR4MndpZHRoLHQuYnkrMikpfSl9ZnVuY3Rpb24gUyh0LGUpe3ZhciByPXQuaW5kZXgsbj10LnRyYWNlfHx7fSxhPXQuY2RbMF0scz10LmNkW3JdfHx7fTtmdW5jdGlvbiBsKHQpe3JldHVybiB0fHxpKHQpJiYwPT09dH12YXIgYz1BcnJheS5pc0FycmF5KHIpP2Z1bmN0aW9uKHQsZSl7dmFyIGk9by5jYXN0T3B0aW9uKGEscix0KTtyZXR1cm4gbChpKT9pOm8uZXh0cmFjdE9wdGlvbih7fSxuLFwiXCIsZSl9OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8uZXh0cmFjdE9wdGlvbihzLG4sdCxlKX07ZnVuY3Rpb24gdShlLHIsbil7dmFyIGk9YyhyLG4pO2woaSkmJih0W2VdPWkpfWlmKHUoXCJob3ZlcmluZm9cIixcImhpXCIsXCJob3ZlcmluZm9cIiksdShcImJnY29sb3JcIixcImhiZ1wiLFwiaG92ZXJsYWJlbC5iZ2NvbG9yXCIpLHUoXCJib3JkZXJDb2xvclwiLFwiaGJjXCIsXCJob3ZlcmxhYmVsLmJvcmRlcmNvbG9yXCIpLHUoXCJmb250RmFtaWx5XCIsXCJodGZcIixcImhvdmVybGFiZWwuZm9udC5mYW1pbHlcIiksdShcImZvbnRTaXplXCIsXCJodHNcIixcImhvdmVybGFiZWwuZm9udC5zaXplXCIpLHUoXCJmb250Q29sb3JcIixcImh0Y1wiLFwiaG92ZXJsYWJlbC5mb250LmNvbG9yXCIpLHUoXCJuYW1lTGVuZ3RoXCIsXCJobmxcIixcImhvdmVybGFiZWwubmFtZWxlbmd0aFwiKSx1KFwidGV4dEFsaWduXCIsXCJodGFcIixcImhvdmVybGFiZWwuYWxpZ25cIiksdC5wb3NyZWY9XCJ5XCI9PT1lfHxcImNsb3Nlc3RcIj09PWUmJlwiaFwiPT09bi5vcmllbnRhdGlvbj90LnhhLl9vZmZzZXQrKHQueDArdC54MSkvMjp0LnlhLl9vZmZzZXQrKHQueTArdC55MSkvMix0LngwPW8uY29uc3RyYWluKHQueDAsMCx0LnhhLl9sZW5ndGgpLHQueDE9by5jb25zdHJhaW4odC54MSwwLHQueGEuX2xlbmd0aCksdC55MD1vLmNvbnN0cmFpbih0LnkwLDAsdC55YS5fbGVuZ3RoKSx0LnkxPW8uY29uc3RyYWluKHQueTEsMCx0LnlhLl9sZW5ndGgpLHZvaWQgMCE9PXQueExhYmVsVmFsJiYodC54TGFiZWw9XCJ4TGFiZWxcImluIHQ/dC54TGFiZWw6cC5ob3ZlckxhYmVsVGV4dCh0LnhhLHQueExhYmVsVmFsKSx0LnhWYWw9dC54YS5jMmQodC54TGFiZWxWYWwpKSx2b2lkIDAhPT10LnlMYWJlbFZhbCYmKHQueUxhYmVsPVwieUxhYmVsXCJpbiB0P3QueUxhYmVsOnAuaG92ZXJMYWJlbFRleHQodC55YSx0LnlMYWJlbFZhbCksdC55VmFsPXQueWEuYzJkKHQueUxhYmVsVmFsKSksdm9pZCAwIT09dC56TGFiZWxWYWwmJnZvaWQgMD09PXQuekxhYmVsJiYodC56TGFiZWw9U3RyaW5nKHQuekxhYmVsVmFsKSksIShpc05hTih0LnhlcnIpfHxcImxvZ1wiPT09dC54YS50eXBlJiZ0LnhlcnI8PTApKXt2YXIgaD1wLnRpY2tUZXh0KHQueGEsdC54YS5jMmwodC54ZXJyKSxcImhvdmVyXCIpLnRleHQ7dm9pZCAwIT09dC54ZXJybmVnP3QueExhYmVsKz1cIiArXCIraCtcIiAvIC1cIitwLnRpY2tUZXh0KHQueGEsdC54YS5jMmwodC54ZXJybmVnKSxcImhvdmVyXCIpLnRleHQ6dC54TGFiZWwrPVwiIFxceGIxIFwiK2gsXCJ4XCI9PT1lJiYodC5kaXN0YW5jZSs9MSl9aWYoIShpc05hTih0LnllcnIpfHxcImxvZ1wiPT09dC55YS50eXBlJiZ0LnllcnI8PTApKXt2YXIgZj1wLnRpY2tUZXh0KHQueWEsdC55YS5jMmwodC55ZXJyKSxcImhvdmVyXCIpLnRleHQ7dm9pZCAwIT09dC55ZXJybmVnP3QueUxhYmVsKz1cIiArXCIrZitcIiAvIC1cIitwLnRpY2tUZXh0KHQueWEsdC55YS5jMmwodC55ZXJybmVnKSxcImhvdmVyXCIpLnRleHQ6dC55TGFiZWwrPVwiIFxceGIxIFwiK2YsXCJ5XCI9PT1lJiYodC5kaXN0YW5jZSs9MSl9dmFyIGQ9dC5ob3ZlcmluZm98fHQudHJhY2UuaG92ZXJpbmZvO3JldHVybiBkJiZcImFsbFwiIT09ZCYmKC0xPT09KGQ9QXJyYXkuaXNBcnJheShkKT9kOmQuc3BsaXQoXCIrXCIpKS5pbmRleE9mKFwieFwiKSYmKHQueExhYmVsPXZvaWQgMCksLTE9PT1kLmluZGV4T2YoXCJ5XCIpJiYodC55TGFiZWw9dm9pZCAwKSwtMT09PWQuaW5kZXhPZihcInpcIikmJih0LnpMYWJlbD12b2lkIDApLC0xPT09ZC5pbmRleE9mKFwidGV4dFwiKSYmKHQudGV4dD12b2lkIDApLC0xPT09ZC5pbmRleE9mKFwibmFtZVwiKSYmKHQubmFtZT12b2lkIDApKSx0fWZ1bmN0aW9uIEUodCxlKXt2YXIgcixuLGk9ZS5jb250YWluZXIsbz1lLmZ1bGxMYXlvdXQscz1lLmV2ZW50LGw9ISF0LmhMaW5lUG9pbnQsYz0hIXQudkxpbmVQb2ludDtpZihpLnNlbGVjdEFsbChcIi5zcGlrZWxpbmVcIikucmVtb3ZlKCksY3x8bCl7dmFyIGY9aC5jb21iaW5lKG8ucGxvdF9iZ2NvbG9yLG8ucGFwZXJfYmdjb2xvcik7aWYobCl7dmFyIHAsZCxnPXQuaExpbmVQb2ludDtyPWcmJmcueGEsXCJjdXJzb3JcIj09PShuPWcmJmcueWEpLnNwaWtlc25hcD8ocD1zLnBvaW50ZXJYLGQ9cy5wb2ludGVyWSk6KHA9ci5fb2Zmc2V0K2cueCxkPW4uX29mZnNldCtnLnkpO3ZhciB2LG0seT1hLnJlYWRhYmlsaXR5KGcuY29sb3IsZik8MS41P2guY29udHJhc3QoZik6Zy5jb2xvcix4PW4uc3Bpa2Vtb2RlLGI9bi5zcGlrZXRoaWNrbmVzcyxfPW4uc3Bpa2Vjb2xvcnx8eSx3PW4uX2JvdW5kaW5nQm94LGs9KHcubGVmdCt3LnJpZ2h0KS8yPHA/dy5yaWdodDp3LmxlZnQ7LTE9PT14LmluZGV4T2YoXCJ0b2F4aXNcIikmJi0xPT09eC5pbmRleE9mKFwiYWNyb3NzXCIpfHwoLTEhPT14LmluZGV4T2YoXCJ0b2F4aXNcIikmJih2PWssbT1wKSwtMSE9PXguaW5kZXhPZihcImFjcm9zc1wiKSYmKHY9bi5fY291bnRlclNwYW5bMF0sbT1uLl9jb3VudGVyU3BhblsxXSksaS5pbnNlcnQoXCJsaW5lXCIsXCI6Zmlyc3QtY2hpbGRcIikuYXR0cih7eDE6dix4MjptLHkxOmQseTI6ZCxcInN0cm9rZS13aWR0aFwiOmIsc3Ryb2tlOl8sXCJzdHJva2UtZGFzaGFycmF5XCI6dS5kYXNoU3R5bGUobi5zcGlrZWRhc2gsYil9KS5jbGFzc2VkKFwic3Bpa2VsaW5lXCIsITApLmNsYXNzZWQoXCJjcmlzcFwiLCEwKSxpLmluc2VydChcImxpbmVcIixcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKHt4MTp2LHgyOm0seTE6ZCx5MjpkLFwic3Ryb2tlLXdpZHRoXCI6YisyLHN0cm9rZTpmfSkuY2xhc3NlZChcInNwaWtlbGluZVwiLCEwKS5jbGFzc2VkKFwiY3Jpc3BcIiwhMCkpLC0xIT09eC5pbmRleE9mKFwibWFya2VyXCIpJiZpLmluc2VydChcImNpcmNsZVwiLFwiOmZpcnN0LWNoaWxkXCIpLmF0dHIoe2N4OmsrKFwicmlnaHRcIiE9PW4uc2lkZT9iOi1iKSxjeTpkLHI6YixmaWxsOl99KS5jbGFzc2VkKFwic3Bpa2VsaW5lXCIsITApfWlmKGMpe3ZhciBBLFQsTT10LnZMaW5lUG9pbnQ7cj1NJiZNLnhhLG49TSYmTS55YSxcImN1cnNvclwiPT09ci5zcGlrZXNuYXA/KEE9cy5wb2ludGVyWCxUPXMucG9pbnRlclkpOihBPXIuX29mZnNldCtNLngsVD1uLl9vZmZzZXQrTS55KTt2YXIgUyxFLEM9YS5yZWFkYWJpbGl0eShNLmNvbG9yLGYpPDEuNT9oLmNvbnRyYXN0KGYpOk0uY29sb3IsTD1yLnNwaWtlbW9kZSx6PXIuc3Bpa2V0aGlja25lc3MsTz1yLnNwaWtlY29sb3J8fEMsST1yLl9ib3VuZGluZ0JveCxEPShJLnRvcCtJLmJvdHRvbSkvMjxUP0kuYm90dG9tOkkudG9wOy0xPT09TC5pbmRleE9mKFwidG9heGlzXCIpJiYtMT09PUwuaW5kZXhPZihcImFjcm9zc1wiKXx8KC0xIT09TC5pbmRleE9mKFwidG9heGlzXCIpJiYoUz1ELEU9VCksLTEhPT1MLmluZGV4T2YoXCJhY3Jvc3NcIikmJihTPXIuX2NvdW50ZXJTcGFuWzBdLEU9ci5fY291bnRlclNwYW5bMV0pLGkuaW5zZXJ0KFwibGluZVwiLFwiOmZpcnN0LWNoaWxkXCIpLmF0dHIoe3gxOkEseDI6QSx5MTpTLHkyOkUsXCJzdHJva2Utd2lkdGhcIjp6LHN0cm9rZTpPLFwic3Ryb2tlLWRhc2hhcnJheVwiOnUuZGFzaFN0eWxlKHIuc3Bpa2VkYXNoLHopfSkuY2xhc3NlZChcInNwaWtlbGluZVwiLCEwKS5jbGFzc2VkKFwiY3Jpc3BcIiwhMCksaS5pbnNlcnQoXCJsaW5lXCIsXCI6Zmlyc3QtY2hpbGRcIikuYXR0cih7eDE6QSx4MjpBLHkxOlMseTI6RSxcInN0cm9rZS13aWR0aFwiOnorMixzdHJva2U6Zn0pLmNsYXNzZWQoXCJzcGlrZWxpbmVcIiwhMCkuY2xhc3NlZChcImNyaXNwXCIsITApKSwtMSE9PUwuaW5kZXhPZihcIm1hcmtlclwiKSYmaS5pbnNlcnQoXCJjaXJjbGVcIixcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKHtjeDpBLGN5OkQtKFwidG9wXCIhPT1yLnNpZGU/ejoteikscjp6LGZpbGw6T30pLmNsYXNzZWQoXCJzcGlrZWxpbmVcIiwhMCl9fX1mdW5jdGlvbiBDKHQsZSl7cmV0dXJuIWV8fChlLnZMaW5lUG9pbnQhPT10Ll9zcGlrZXBvaW50cy52TGluZVBvaW50fHxlLmhMaW5lUG9pbnQhPT10Ll9zcGlrZXBvaW50cy5oTGluZVBvaW50KX1mdW5jdGlvbiBMKHQsZSl7cmV0dXJuIGwucGxhaW5UZXh0KHR8fFwiXCIse2xlbjplLGFsbG93ZWRUYWdzOltcImJyXCIsXCJzdWJcIixcInN1cFwiLFwiYlwiLFwiaVwiLFwiZW1cIl19KX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9ldmVudHNcIjo2OTAsXCIuLi8uLi9saWIvb3ZlcnJpZGVfY3Vyc29yXCI6NzEyLFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCI6NzI1LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL2NvbG9yXCI6NTc4LFwiLi4vZHJhZ2VsZW1lbnRcIjo1OTYsXCIuLi9kcmF3aW5nXCI6NTk5LFwiLi9jb25zdGFudHNcIjo2MTEsXCIuL2hlbHBlcnNcIjo2MTMsZDM6MTU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjIsdGlueWNvbG9yMjo1MjJ9XSw2MTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXtyKFwiaG92ZXJsYWJlbC5iZ2NvbG9yXCIsKGk9aXx8e30pLmJnY29sb3IpLHIoXCJob3ZlcmxhYmVsLmJvcmRlcmNvbG9yXCIsaS5ib3JkZXJjb2xvcikscihcImhvdmVybGFiZWwubmFtZWxlbmd0aFwiLGkubmFtZWxlbmd0aCksbi5jb2VyY2VGb250KHIsXCJob3ZlcmxhYmVsLmZvbnRcIixpLmZvbnQpLHIoXCJob3ZlcmxhYmVsLmFsaWduXCIsaS5hbGlnbil9fSx7XCIuLi8uLi9saWJcIjo3MDF9XSw2MTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0PXR8fHt9OyhlPWV8fHt9KS5kZXNjcmlwdGlvbiYmZS5kZXNjcmlwdGlvbjt2YXIgcj1lLmtleXN8fFtdO2lmKHIubGVuZ3RoPjApe2Zvcih2YXIgbj1bXSxpPTA7aTxyLmxlbmd0aDtpKyspbltpXT1cImBcIityW2ldK1wiYFwiO1wiRmluYWxseSwgdGhlIHRlbXBsYXRlIHN0cmluZyBoYXMgYWNjZXNzIHRvIFwiLDE9PT1yLmxlbmd0aD9cInZhcmlhYmxlIFwiK25bMF06XCJ2YXJpYWJsZXMgXCIrbi5zbGljZSgwLC0xKS5qb2luKFwiLCBcIikrXCIgYW5kIFwiK24uc2xpY2UoLTEpK1wiLlwifXZhciBhPXt2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOnQuZWRpdFR5cGV8fFwibm9uZVwifTtyZXR1cm4hMSE9PXQuYXJyYXlPayYmKGEuYXJyYXlPaz0hMCksYX19LHt9XSw2MTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uL2RyYWdlbGVtZW50XCIpLG89dChcIi4vaGVscGVyc1wiKSxzPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLGw9dChcIi4vaG92ZXJcIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwiY29tcG9uZW50XCIsbmFtZTpcImZ4XCIsY29uc3RhbnRzOnQoXCIuL2NvbnN0YW50c1wiKSxzY2hlbWE6e2xheW91dDpzfSxhdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksbGF5b3V0QXR0cmlidXRlczpzLHN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzOnQoXCIuL2xheW91dF9nbG9iYWxfZGVmYXVsdHNcIiksc3VwcGx5RGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dChcIi4vbGF5b3V0X2RlZmF1bHRzXCIpLGNhbGM6dChcIi4vY2FsY1wiKSxnZXREaXN0YW5jZUZ1bmN0aW9uOm8uZ2V0RGlzdGFuY2VGdW5jdGlvbixnZXRDbG9zZXN0Om8uZ2V0Q2xvc2VzdCxpbmJveDpvLmluYm94LHF1YWRyYXR1cmU6by5xdWFkcmF0dXJlLGFwcGVuZEFycmF5UG9pbnRWYWx1ZTpvLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSxjYXN0SG92ZXJPcHRpb246ZnVuY3Rpb24odCxlLHIpe3JldHVybiBpLmNhc3RPcHRpb24odCxlLFwiaG92ZXJsYWJlbC5cIityKX0sY2FzdEhvdmVyaW5mbzpmdW5jdGlvbih0LGUscil7cmV0dXJuIGkuY2FzdE9wdGlvbih0LHIsXCJob3ZlcmluZm9cIixmdW5jdGlvbihyKXtyZXR1cm4gaS5jb2VyY2VIb3ZlcmluZm8oe2hvdmVyaW5mbzpyfSx7X21vZHVsZTp0Ll9tb2R1bGV9LGUpfSl9LGhvdmVyOmwuaG92ZXIsdW5ob3ZlcjphLnVuaG92ZXIsbG9uZUhvdmVyOmwubG9uZUhvdmVyLG11bHRpSG92ZXJzOmwubXVsdGlIb3ZlcnMsbG9uZVVuaG92ZXI6ZnVuY3Rpb24odCl7dmFyIGU9aS5pc0QzU2VsZWN0aW9uKHQpP3Q6bi5zZWxlY3QodCk7ZS5zZWxlY3RBbGwoXCJnLmhvdmVydGV4dFwiKS5yZW1vdmUoKSxlLnNlbGVjdEFsbChcIi5zcGlrZWxpbmVcIikucmVtb3ZlKCl9LGNsaWNrOnQoXCIuL2NsaWNrXCIpfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vZHJhZ2VsZW1lbnRcIjo1OTYsXCIuL2F0dHJpYnV0ZXNcIjo2MDgsXCIuL2NhbGNcIjo2MDksXCIuL2NsaWNrXCI6NjEwLFwiLi9jb25zdGFudHNcIjo2MTEsXCIuL2RlZmF1bHRzXCI6NjEyLFwiLi9oZWxwZXJzXCI6NjEzLFwiLi9ob3ZlclwiOjYxNCxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo2MTgsXCIuL2xheW91dF9kZWZhdWx0c1wiOjYxOSxcIi4vbGF5b3V0X2dsb2JhbF9kZWZhdWx0c1wiOjYyMCxkMzoxNTV9XSw2MTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9jb25zdGFudHNcIiksaT10KFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCIpKHtlZGl0VHlwZTpcIm5vbmVcIn0pO2kuZmFtaWx5LmRmbHQ9bi5IT1ZFUkZPTlQsaS5zaXplLmRmbHQ9bi5IT1ZFUkZPTlRTSVpFLGUuZXhwb3J0cz17Y2xpY2ttb2RlOnt2YWxUeXBlOlwiZmxhZ2xpc3RcIixmbGFnczpbXCJldmVudFwiLFwic2VsZWN0XCJdLGRmbHQ6XCJldmVudFwiLGVkaXRUeXBlOlwicGxvdFwiLGV4dHJhczpbXCJub25lXCJdfSxkcmFnbW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiem9vbVwiLFwicGFuXCIsXCJzZWxlY3RcIixcImxhc3NvXCIsXCJvcmJpdFwiLFwidHVybnRhYmxlXCIsITFdLGRmbHQ6XCJ6b29tXCIsZWRpdFR5cGU6XCJtb2RlYmFyXCJ9LGhvdmVybW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wieFwiLFwieVwiLFwiY2xvc2VzdFwiLCExXSxlZGl0VHlwZTpcIm1vZGViYXJcIn0saG92ZXJkaXN0YW5jZTp7dmFsVHlwZTpcImludGVnZXJcIixtaW46LTEsZGZsdDoyMCxlZGl0VHlwZTpcIm5vbmVcIn0sc3Bpa2VkaXN0YW5jZTp7dmFsVHlwZTpcImludGVnZXJcIixtaW46LTEsZGZsdDoyMCxlZGl0VHlwZTpcIm5vbmVcIn0saG92ZXJsYWJlbDp7Ymdjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJub25lXCJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcIm5vbmVcIn0sZm9udDppLGFsaWduOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJsZWZ0XCIsXCJyaWdodFwiLFwiYXV0b1wiXSxkZmx0OlwiYXV0b1wiLGVkaXRUeXBlOlwibm9uZVwifSxuYW1lbGVuZ3RoOnt2YWxUeXBlOlwiaW50ZWdlclwiLG1pbjotMSxkZmx0OjE1LGVkaXRUeXBlOlwibm9uZVwifSxlZGl0VHlwZTpcIm5vbmVcIn0sc2VsZWN0ZGlyZWN0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJoXCIsXCJ2XCIsXCJkXCIsXCJhbnlcIl0sZGZsdDpcImFueVwiLGVkaXRUeXBlOlwibm9uZVwifX19LHtcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiOjc3NSxcIi4vY29uc3RhbnRzXCI6NjExfV0sNjE5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gYShyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXZhciBvLHM9YShcImNsaWNrbW9kZVwiKTtcInNlbGVjdFwiPT09YShcImRyYWdtb2RlXCIpJiZhKFwic2VsZWN0ZGlyZWN0aW9uXCIpLGUuX2hhcyhcImNhcnRlc2lhblwiKT9zLmluZGV4T2YoXCJzZWxlY3RcIik+LTE/bz1cImNsb3Nlc3RcIjooZS5faXNIb3Jpej1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLl9zY2F0dGVyU3RhY2tPcHRzfHx7fSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl0sYT1pLnhheGlzK2kueWF4aXMsbz1yW2FdfHx7fSxzPW9baS5zdGFja2dyb3VwXXx8e307aWYoXCJoXCIhPT1pLm9yaWVudGF0aW9uJiZcImhcIiE9PXMub3JpZW50YXRpb24pcmV0dXJuITF9cmV0dXJuITB9KHIsZSksbz1lLl9pc0hvcml6P1wieVwiOlwieFwiKTpvPVwiY2xvc2VzdFwiLGEoXCJob3Zlcm1vZGVcIixvKSYmKGEoXCJob3ZlcmRpc3RhbmNlXCIpLGEoXCJzcGlrZWRpc3RhbmNlXCIpKTt2YXIgbD1lLl9oYXMoXCJtYXBib3hcIiksYz1lLl9oYXMoXCJnZW9cIiksdT1lLl9iYXNlUGxvdE1vZHVsZXMubGVuZ3RoO1wiem9vbVwiPT09ZS5kcmFnbW9kZSYmKChsfHxjKSYmMT09PXV8fGwmJmMmJjI9PT11KSYmKGUuZHJhZ21vZGU9XCJwYW5cIil9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6NjE4fV0sNjIwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2hvdmVybGFiZWxfZGVmYXVsdHNcIiksYT10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpKHQsZSxmdW5jdGlvbihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfSl9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuL2hvdmVybGFiZWxfZGVmYXVsdHNcIjo2MTUsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6NjE4fV0sNjIxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9saWIvcmVnZXhcIikuY291bnRlcixhPXQoXCIuLi8uLi9wbG90cy9kb21haW5cIikuYXR0cmlidXRlcyxvPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzXCIpLmlkUmVnZXgscz10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKSxsPXtyb3dzOnt2YWxUeXBlOlwiaW50ZWdlclwiLG1pbjoxLGVkaXRUeXBlOlwicGxvdFwifSxyb3dvcmRlcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1widG9wIHRvIGJvdHRvbVwiLFwiYm90dG9tIHRvIHRvcFwiXSxkZmx0OlwidG9wIHRvIGJvdHRvbVwiLGVkaXRUeXBlOlwicGxvdFwifSxjb2x1bW5zOnt2YWxUeXBlOlwiaW50ZWdlclwiLG1pbjoxLGVkaXRUeXBlOlwicGxvdFwifSxzdWJwbG90czp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixmcmVlTGVuZ3RoOiEwLGRpbWVuc2lvbnM6MixpdGVtczp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W2koXCJ4eVwiKS50b1N0cmluZygpLFwiXCJdLGVkaXRUeXBlOlwicGxvdFwifSxlZGl0VHlwZTpcInBsb3RcIn0seGF4ZXM6e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsZnJlZUxlbmd0aDohMCxpdGVtczp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W28ueC50b1N0cmluZygpLFwiXCJdLGVkaXRUeXBlOlwicGxvdFwifSxlZGl0VHlwZTpcInBsb3RcIn0seWF4ZXM6e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsZnJlZUxlbmd0aDohMCxpdGVtczp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W28ueS50b1N0cmluZygpLFwiXCJdLGVkaXRUeXBlOlwicGxvdFwifSxlZGl0VHlwZTpcInBsb3RcIn0scGF0dGVybjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiaW5kZXBlbmRlbnRcIixcImNvdXBsZWRcIl0sZGZsdDpcImNvdXBsZWRcIixlZGl0VHlwZTpcInBsb3RcIn0seGdhcDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGVkaXRUeXBlOlwicGxvdFwifSx5Z2FwOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZWRpdFR5cGU6XCJwbG90XCJ9LGRvbWFpbjphKHtuYW1lOlwiZ3JpZFwiLGVkaXRUeXBlOlwicGxvdFwiLG5vR3JpZENlbGw6ITB9LHt9KSx4c2lkZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYm90dG9tXCIsXCJib3R0b20gcGxvdFwiLFwidG9wIHBsb3RcIixcInRvcFwiXSxkZmx0OlwiYm90dG9tIHBsb3RcIixlZGl0VHlwZTpcInBsb3RcIn0seXNpZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImxlZnRcIixcImxlZnQgcGxvdFwiLFwicmlnaHQgcGxvdFwiLFwicmlnaHRcIl0sZGZsdDpcImxlZnQgcGxvdFwiLGVkaXRUeXBlOlwicGxvdFwifSxlZGl0VHlwZTpcInBsb3RcIn07ZnVuY3Rpb24gYyh0LGUscil7dmFyIG49ZVtyK1wiYXhlc1wiXSxpPU9iamVjdC5rZXlzKCh0Ll9zcGxvbUF4ZXN8fHt9KVtyXXx8e30pO3JldHVybiBBcnJheS5pc0FycmF5KG4pP246aS5sZW5ndGg/aTp2b2lkIDB9ZnVuY3Rpb24gdSh0LGUscixuLGksYSl7dmFyIG89ZSh0K1wiZ2FwXCIscikscz1lKFwiZG9tYWluLlwiK3QpO2UodCtcInNpZGVcIixuKTtmb3IodmFyIGw9bmV3IEFycmF5KGkpLGM9c1swXSx1PShzWzFdLWMpLyhpLW8pLGg9dSooMS1vKSxmPTA7ZjxpO2YrKyl7dmFyIHA9Yyt1KmY7bFthP2ktMS1mOmZdPVtwLHAraF19cmV0dXJuIGx9ZnVuY3Rpb24gaCh0LGUscixuLGkpe3ZhciBhLG89bmV3IEFycmF5KHIpO2Z1bmN0aW9uIHModCxyKXstMSE9PWUuaW5kZXhPZihyKSYmdm9pZCAwPT09bltyXT8ob1t0XT1yLG5bcl09dCk6b1t0XT1cIlwifWlmKEFycmF5LmlzQXJyYXkodCkpZm9yKGE9MDthPHI7YSsrKXMoYSx0W2FdKTtlbHNlIGZvcihzKDAsaSksYT0xO2E8cjthKyspcyhhLGkrKGErMSkpO3JldHVybiBvfWUuZXhwb3J0cz17bW9kdWxlVHlwZTpcImNvbXBvbmVudFwiLG5hbWU6XCJncmlkXCIsc2NoZW1hOntsYXlvdXQ6e2dyaWQ6bH19LGxheW91dEF0dHJpYnV0ZXM6bCxzaXplRGVmYXVsdHM6ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdyaWR8fHt9LGk9YyhlLHIsXCJ4XCIpLGE9YyhlLHIsXCJ5XCIpO2lmKHQuZ3JpZHx8aXx8YSl7dmFyIG8saCxmPUFycmF5LmlzQXJyYXkoci5zdWJwbG90cykmJkFycmF5LmlzQXJyYXkoci5zdWJwbG90c1swXSkscD1BcnJheS5pc0FycmF5KGkpLGQ9QXJyYXkuaXNBcnJheShhKSxnPXAmJmkhPT1yLnhheGVzJiZkJiZhIT09ci55YXhlcztmPyhvPXIuc3VicGxvdHMubGVuZ3RoLGg9ci5zdWJwbG90c1swXS5sZW5ndGgpOihkJiYobz1hLmxlbmd0aCkscCYmKGg9aS5sZW5ndGgpKTt2YXIgdj1zLm5ld0NvbnRhaW5lcihlLFwiZ3JpZFwiKSxtPUEoXCJyb3dzXCIsbykseT1BKFwiY29sdW1uc1wiLGgpO2lmKG0qeT4xKXtmfHxwfHxkfHxcImluZGVwZW5kZW50XCI9PT1BKFwicGF0dGVyblwiKSYmKGY9ITApLHYuX2hhc1N1YnBsb3RHcmlkPWY7dmFyIHgsYixfPVwidG9wIHRvIGJvdHRvbVwiPT09QShcInJvd29yZGVyXCIpLHc9Zj8uMjouMSxrPWY/LjM6LjE7ZyYmZS5fc3Bsb21HcmlkRGZsdCYmKHg9ZS5fc3Bsb21HcmlkRGZsdC54c2lkZSxiPWUuX3NwbG9tR3JpZERmbHQueXNpZGUpLHYuX2RvbWFpbnM9e3g6dShcInhcIixBLHcseCx5KSx5OnUoXCJ5XCIsQSxrLGIsbSxfKX19ZWxzZSBkZWxldGUgZS5ncmlkfWZ1bmN0aW9uIEEodCxlKXtyZXR1cm4gbi5jb2VyY2Uocix2LGwsdCxlKX19LGNvbnRlbnREZWZhdWx0czpmdW5jdGlvbih0LGUpe3ZhciByPWUuZ3JpZDtpZihyJiZyLl9kb21haW5zKXt2YXIgbixpLGEsbyxzLGwsdSxmPXQuZ3JpZHx8e30scD1lLl9zdWJwbG90cyxkPXIuX2hhc1N1YnBsb3RHcmlkLGc9ci5yb3dzLHY9ci5jb2x1bW5zLG09XCJpbmRlcGVuZGVudFwiPT09ci5wYXR0ZXJuLHk9ci5fYXhpc01hcD17fTtpZihkKXt2YXIgeD1mLnN1YnBsb3RzfHxbXTtsPXIuc3VicGxvdHM9bmV3IEFycmF5KGcpO3ZhciBiPTE7Zm9yKG49MDtuPGc7bisrKXt2YXIgXz1sW25dPW5ldyBBcnJheSh2KSx3PXhbbl18fFtdO2ZvcihpPTA7aTx2O2krKylpZihtPyhzPTE9PT1iP1wieHlcIjpcInhcIitiK1wieVwiK2IsYisrKTpzPXdbaV0sX1tpXT1cIlwiLC0xIT09cC5jYXJ0ZXNpYW4uaW5kZXhPZihzKSl7aWYodT1zLmluZGV4T2YoXCJ5XCIpLGE9cy5zbGljZSgwLHUpLG89cy5zbGljZSh1KSx2b2lkIDAhPT15W2FdJiZ5W2FdIT09aXx8dm9pZCAwIT09eVtvXSYmeVtvXSE9PW4pY29udGludWU7X1tpXT1zLHlbYV09aSx5W29dPW59fX1lbHNle3ZhciBrPWMoZSxmLFwieFwiKSxBPWMoZSxmLFwieVwiKTtyLnhheGVzPWgoayxwLnhheGlzLHYseSxcInhcIiksci55YXhlcz1oKEEscC55YXhpcyxnLHksXCJ5XCIpfXZhciBUPXIuX2FuY2hvcnM9e30sTT1cInRvcCB0byBib3R0b21cIj09PXIucm93b3JkZXI7Zm9yKHZhciBTIGluIHkpe3ZhciBFLEMsTCx6PVMuY2hhckF0KDApLE89clt6K1wic2lkZVwiXTtpZihPLmxlbmd0aDw4KVRbU109XCJmcmVlXCI7ZWxzZSBpZihcInhcIj09PXope2lmKFwidFwiPT09Ty5jaGFyQXQoMCk9PT1NPyhFPTAsQz0xLEw9Zyk6KEU9Zy0xLEM9LTEsTD0tMSksZCl7dmFyIEk9eVtTXTtmb3Iobj1FO24hPT1MO24rPUMpaWYoKHM9bFtuXVtJXSkmJih1PXMuaW5kZXhPZihcInlcIikscy5zbGljZSgwLHUpPT09Uykpe1RbU109cy5zbGljZSh1KTticmVha319ZWxzZSBmb3Iobj1FO24hPT1MO24rPUMpaWYobz1yLnlheGVzW25dLC0xIT09cC5jYXJ0ZXNpYW4uaW5kZXhPZihTK28pKXtUW1NdPW87YnJlYWt9fWVsc2UgaWYoXCJsXCI9PT1PLmNoYXJBdCgwKT8oRT0wLEM9MSxMPXYpOihFPXYtMSxDPS0xLEw9LTEpLGQpe3ZhciBEPXlbU107Zm9yKG49RTtuIT09TDtuKz1DKWlmKChzPWxbRF1bbl0pJiYodT1zLmluZGV4T2YoXCJ5XCIpLHMuc2xpY2UodSk9PT1TKSl7VFtTXT1zLnNsaWNlKDAsdSk7YnJlYWt9fWVsc2UgZm9yKG49RTtuIT09TDtuKz1DKWlmKGE9ci54YXhlc1tuXSwtMSE9PXAuY2FydGVzaWFuLmluZGV4T2YoYStTKSl7VFtTXT1hO2JyZWFrfX19fX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9yZWdleFwiOjcxNyxcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzXCI6NzU1LFwiLi4vLi4vcGxvdHMvZG9tYWluXCI6Nzc0fV0sNjIyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHNcIiksaT10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKS50ZW1wbGF0ZWRBcnJheTtlLmV4cG9ydHM9aShcImltYWdlXCIse3Zpc2libGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcImFycmF5ZHJhd1wifSxzb3VyY2U6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcImFycmF5ZHJhd1wifSxsYXllcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYmVsb3dcIixcImFib3ZlXCJdLGRmbHQ6XCJhYm92ZVwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LHNpemV4Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LHNpemV5Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LHNpemluZzp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiZmlsbFwiLFwiY29udGFpblwiLFwic3RyZXRjaFwiXSxkZmx0OlwiY29udGFpblwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LG9wYWNpdHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0seDp7dmFsVHlwZTpcImFueVwiLGRmbHQ6MCxlZGl0VHlwZTpcImFycmF5ZHJhd1wifSx5Ont2YWxUeXBlOlwiYW55XCIsZGZsdDowLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LHhhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImxlZnRcIixcImNlbnRlclwiLFwicmlnaHRcIl0sZGZsdDpcImxlZnRcIixlZGl0VHlwZTpcImFycmF5ZHJhd1wifSx5YW5jaG9yOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ0b3BcIixcIm1pZGRsZVwiLFwiYm90dG9tXCJdLGRmbHQ6XCJ0b3BcIixlZGl0VHlwZTpcImFycmF5ZHJhd1wifSx4cmVmOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJwYXBlclwiLG4uaWRSZWdleC54LnRvU3RyaW5nKCldLGRmbHQ6XCJwYXBlclwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LHlyZWY6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInBhcGVyXCIsbi5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZGZsdDpcInBhcGVyXCIsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0sZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0pfSx7XCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50c1wiOjc1NX1dLDYyMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuLi8uLi9saWIvdG9fbG9nX3JhbmdlXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtlPWV8fHt9O3ZhciBvPVwibG9nXCI9PT1yJiZcImxpbmVhclwiPT09ZS50eXBlLHM9XCJsaW5lYXJcIj09PXImJlwibG9nXCI9PT1lLnR5cGU7aWYob3x8cylmb3IodmFyIGwsYyx1PXQuX2Z1bGxMYXlvdXQuaW1hZ2VzLGg9ZS5faWQuY2hhckF0KDApLGY9MDtmPHUubGVuZ3RoO2YrKylpZihjPVwiaW1hZ2VzW1wiK2YrXCJdLlwiLChsPXVbZl0pW2grXCJyZWZcIl09PT1lLl9pZCl7dmFyIHA9bFtoXSxkPWxbXCJzaXplXCIraF0sZz1udWxsLHY9bnVsbDtpZihvKXtnPWkocCxlLnJhbmdlKTt2YXIgbT1kL01hdGgucG93KDEwLGcpLzI7dj0yKk1hdGgubG9nKG0rTWF0aC5zcXJ0KDErbSptKSkvTWF0aC5MTjEwfWVsc2Ugdj0oZz1NYXRoLnBvdygxMCxwKSkqKE1hdGgucG93KDEwLGQvMiktTWF0aC5wb3coMTAsLWQvMikpO24oZyk/bih2KXx8KHY9bnVsbCk6KGc9bnVsbCx2PW51bGwpLGEoYytoLGcpLGEoYytcInNpemVcIitoLHYpfX19LHtcIi4uLy4uL2xpYi90b19sb2dfcmFuZ2VcIjo3MjcsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDYyNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksYT10KFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCIpLG89dChcIi4vYXR0cmlidXRlc1wiKTtmdW5jdGlvbiBzKHQsZSxyKXtmdW5jdGlvbiBhKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxvLHIsaSl9dmFyIHM9YShcInNvdXJjZVwiKTtpZighYShcInZpc2libGVcIiwhIXMpKXJldHVybiBlO2EoXCJsYXllclwiKSxhKFwieGFuY2hvclwiKSxhKFwieWFuY2hvclwiKSxhKFwic2l6ZXhcIiksYShcInNpemV5XCIpLGEoXCJzaXppbmdcIiksYShcIm9wYWNpdHlcIik7Zm9yKHZhciBsPXtfZnVsbExheW91dDpyfSxjPVtcInhcIixcInlcIl0sdT0wO3U8Mjt1Kyspe3ZhciBoPWNbdV0sZj1pLmNvZXJjZVJlZih0LGUsbCxoLFwicGFwZXJcIik7aWYoXCJwYXBlclwiIT09ZilpLmdldEZyb21JZChsLGYpLl9pbWdJbmRpY2VzLnB1c2goZS5faW5kZXgpO2kuY29lcmNlUG9zaXRpb24oZSxsLGEsZixoLDApfXJldHVybiBlfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2EodCxlLHtuYW1lOlwiaW1hZ2VzXCIsaGFuZGxlSXRlbURlZmF1bHRzOnN9KX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0c1wiOjc0NSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi9hdHRyaWJ1dGVzXCI6NjIyfV0sNjI1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uL2RyYXdpbmdcIiksYT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksbz10KFwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIscz10Ll9mdWxsTGF5b3V0LGw9W10sYz17fSx1PVtdO2ZvcihyPTA7cjxzLmltYWdlcy5sZW5ndGg7cisrKXt2YXIgaD1zLmltYWdlc1tyXTtpZihoLnZpc2libGUpaWYoXCJiZWxvd1wiPT09aC5sYXllciYmXCJwYXBlclwiIT09aC54cmVmJiZcInBhcGVyXCIhPT1oLnlyZWYpe2U9aC54cmVmK2gueXJlZjt2YXIgZj1zLl9wbG90c1tlXTtpZighZil7dS5wdXNoKGgpO2NvbnRpbnVlfWYubWFpbnBsb3QmJihlPWYubWFpbnBsb3QuaWQpLGNbZV18fChjW2VdPVtdKSxjW2VdLnB1c2goaCl9ZWxzZVwiYWJvdmVcIj09PWgubGF5ZXI/bC5wdXNoKGgpOnUucHVzaChoKX12YXIgcD17eDp7bGVmdDp7c2l6aW5nOlwieE1pblwiLG9mZnNldDowfSxjZW50ZXI6e3NpemluZzpcInhNaWRcIixvZmZzZXQ6LS41fSxyaWdodDp7c2l6aW5nOlwieE1heFwiLG9mZnNldDotMX19LHk6e3RvcDp7c2l6aW5nOlwiWU1pblwiLG9mZnNldDowfSxtaWRkbGU6e3NpemluZzpcIllNaWRcIixvZmZzZXQ6LS41fSxib3R0b206e3NpemluZzpcIllNYXhcIixvZmZzZXQ6LTF9fX07ZnVuY3Rpb24gZChlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtpZighdGhpcy5pbWd8fHRoaXMuaW1nLnNyYyE9PWUuc291cmNlKXtyLmF0dHIoXCJ4bWxuc1wiLG8uc3ZnKTt2YXIgaT1uZXcgUHJvbWlzZShmdW5jdGlvbih0KXt2YXIgbj1uZXcgSW1hZ2U7ZnVuY3Rpb24gaSgpe3IucmVtb3ZlKCksdCgpfXRoaXMuaW1nPW4sbi5zZXRBdHRyaWJ1dGUoXCJjcm9zc09yaWdpblwiLFwiYW5vbnltb3VzXCIpLG4ub25lcnJvcj1pLG4ub25sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtlLndpZHRoPXRoaXMud2lkdGgsZS5oZWlnaHQ9dGhpcy5oZWlnaHQsZS5nZXRDb250ZXh0KFwiMmRcIikuZHJhd0ltYWdlKHRoaXMsMCwwKTt2YXIgbj1lLnRvRGF0YVVSTChcImltYWdlL3BuZ1wiKTtyLmF0dHIoXCJ4bGluazpocmVmXCIsbiksdCgpfSxyLm9uKFwiZXJyb3JcIixpKSxuLnNyYz1lLnNvdXJjZX0uYmluZCh0aGlzKSk7dC5fcHJvbWlzZXMucHVzaChpKX19ZnVuY3Rpb24gZyhlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxvPWEuZ2V0RnJvbUlkKHQsZS54cmVmKSxsPWEuZ2V0RnJvbUlkKHQsZS55cmVmKSxjPXMuX3NpemUsdT1vP01hdGguYWJzKG8ubDJwKGUuc2l6ZXgpLW8ubDJwKDApKTplLnNpemV4KmMudyxoPWw/TWF0aC5hYnMobC5sMnAoZS5zaXpleSktbC5sMnAoMCkpOmUuc2l6ZXkqYy5oLGY9dSpwLnhbZS54YW5jaG9yXS5vZmZzZXQsZD1oKnAueVtlLnlhbmNob3JdLm9mZnNldCxnPXAueFtlLnhhbmNob3JdLnNpemluZytwLnlbZS55YW5jaG9yXS5zaXppbmcsdj0obz9vLnIycChlLngpK28uX29mZnNldDplLngqYy53K2MubCkrZixtPShsP2wucjJwKGUueSkrbC5fb2Zmc2V0OmMuaC1lLnkqYy5oK2MudCkrZDtzd2l0Y2goZS5zaXppbmcpe2Nhc2VcImZpbGxcIjpnKz1cIiBzbGljZVwiO2JyZWFrO2Nhc2VcInN0cmV0Y2hcIjpnPVwibm9uZVwifXIuYXR0cih7eDp2LHk6bSx3aWR0aDp1LGhlaWdodDpoLHByZXNlcnZlQXNwZWN0UmF0aW86ZyxvcGFjaXR5OmUub3BhY2l0eX0pO3ZhciB5PShvP28uX2lkOlwiXCIpKyhsP2wuX2lkOlwiXCIpO2kuc2V0Q2xpcFVybChyLHk/XCJjbGlwXCIrcy5fdWlkK3k6bnVsbCx0KX12YXIgdj1zLl9pbWFnZUxvd2VyTGF5ZXIuc2VsZWN0QWxsKFwiaW1hZ2VcIikuZGF0YSh1KSxtPXMuX2ltYWdlVXBwZXJMYXllci5zZWxlY3RBbGwoXCJpbWFnZVwiKS5kYXRhKGwpO3YuZW50ZXIoKS5hcHBlbmQoXCJpbWFnZVwiKSxtLmVudGVyKCkuYXBwZW5kKFwiaW1hZ2VcIiksdi5leGl0KCkucmVtb3ZlKCksbS5leGl0KCkucmVtb3ZlKCksdi5lYWNoKGZ1bmN0aW9uKHQpe2QuYmluZCh0aGlzKSh0KSxnLmJpbmQodGhpcykodCl9KSxtLmVhY2goZnVuY3Rpb24odCl7ZC5iaW5kKHRoaXMpKHQpLGcuYmluZCh0aGlzKSh0KX0pO3ZhciB5PU9iamVjdC5rZXlzKHMuX3Bsb3RzKTtmb3Iocj0wO3I8eS5sZW5ndGg7cisrKXtlPXlbcl07dmFyIHg9cy5fcGxvdHNbZV07aWYoeC5pbWFnZWxheWVyKXt2YXIgYj14LmltYWdlbGF5ZXIuc2VsZWN0QWxsKFwiaW1hZ2VcIikuZGF0YShjW2VdfHxbXSk7Yi5lbnRlcigpLmFwcGVuZChcImltYWdlXCIpLGIuZXhpdCgpLnJlbW92ZSgpLGIuZWFjaChmdW5jdGlvbih0KXtkLmJpbmQodGhpcykodCksZy5iaW5kKHRoaXMpKHQpfSl9fX19LHtcIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzXCI6Njc5LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9kcmF3aW5nXCI6NTk5LGQzOjE1NX1dLDYyNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17bW9kdWxlVHlwZTpcImNvbXBvbmVudFwiLG5hbWU6XCJpbWFnZXNcIixsYXlvdXRBdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIiksaW5jbHVkZUJhc2VQbG90OnQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzXCIpKFwiaW1hZ2VzXCIpLGRyYXc6dChcIi4vZHJhd1wiKSxjb252ZXJ0Q29vcmRzOnQoXCIuL2NvbnZlcnRfY29vcmRzXCIpfX0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2luY2x1ZGVfY29tcG9uZW50c1wiOjc1OSxcIi4vYXR0cmlidXRlc1wiOjYyMixcIi4vY29udmVydF9jb29yZHNcIjo2MjMsXCIuL2RlZmF1bHRzXCI6NjI0LFwiLi9kcmF3XCI6NjI1fV0sNjI3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiKSxpPXQoXCIuLi9jb2xvci9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz17Ymdjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJsZWdlbmRcIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZTpcImxlZ2VuZFwifSxib3JkZXJ3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTpcImxlZ2VuZFwifSxmb250Om4oe2VkaXRUeXBlOlwibGVnZW5kXCJ9KSxvcmllbnRhdGlvbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1widlwiLFwiaFwiXSxkZmx0OlwidlwiLGVkaXRUeXBlOlwibGVnZW5kXCJ9LHRyYWNlb3JkZXI6e3ZhbFR5cGU6XCJmbGFnbGlzdFwiLGZsYWdzOltcInJldmVyc2VkXCIsXCJncm91cGVkXCJdLGV4dHJhczpbXCJub3JtYWxcIl0sZWRpdFR5cGU6XCJsZWdlbmRcIn0sdHJhY2Vncm91cGdhcDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MTAsZWRpdFR5cGU6XCJsZWdlbmRcIn0saXRlbXNpemluZzp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1widHJhY2VcIixcImNvbnN0YW50XCJdLGRmbHQ6XCJ0cmFjZVwiLGVkaXRUeXBlOlwibGVnZW5kXCJ9LHg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46LTIsbWF4OjMsZGZsdDoxLjAyLGVkaXRUeXBlOlwibGVnZW5kXCJ9LHhhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImF1dG9cIixcImxlZnRcIixcImNlbnRlclwiLFwicmlnaHRcIl0sZGZsdDpcImxlZnRcIixlZGl0VHlwZTpcImxlZ2VuZFwifSx5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOi0yLG1heDozLGRmbHQ6MSxlZGl0VHlwZTpcImxlZ2VuZFwifSx5YW5jaG9yOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhdXRvXCIsXCJ0b3BcIixcIm1pZGRsZVwiLFwiYm90dG9tXCJdLGRmbHQ6XCJhdXRvXCIsZWRpdFR5cGU6XCJsZWdlbmRcIn0sdWlyZXZpc2lvbjp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwibm9uZVwifSx2YWxpZ246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInRvcFwiLFwibWlkZGxlXCIsXCJib3R0b21cIl0sZGZsdDpcIm1pZGRsZVwiLGVkaXRUeXBlOlwibGVnZW5kXCJ9LGVkaXRUeXBlOlwibGVnZW5kXCJ9fSx7XCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIjo3NzUsXCIuLi9jb2xvci9hdHRyaWJ1dGVzXCI6NTc3fV0sNjI4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtzY3JvbGxCYXJXaWR0aDo2LHNjcm9sbEJhck1pbkhlaWdodDoyMCxzY3JvbGxCYXJDb2xvcjpcIiM4MDhCQTRcIixzY3JvbGxCYXJNYXJnaW46NCx0ZXh0T2Zmc2V0WDo0MH19LHt9XSw2Mjk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIiksbz10KFwiLi9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzXCIpLGw9dChcIi4vaGVscGVyc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgYyx1LGgsZixwPXQubGVnZW5kfHx7fSxkPTAsZz0hMSx2PVwibm9ybWFsXCIsbT0wO208ci5sZW5ndGg7bSsrKXt2YXIgeT1yW21dO3kudmlzaWJsZSYmKCh5LnNob3dsZWdlbmR8fHkuX2RmbHRTaG93TGVnZW5kKSYmKGQrKyx5LnNob3dsZWdlbmQmJihnPSEwLChuLnRyYWNlSXMoeSxcInBpZVwiKXx8ITA9PT15Ll9pbnB1dC5zaG93bGVnZW5kKSYmZCsrKSksKG4udHJhY2VJcyh5LFwiYmFyXCIpJiZcInN0YWNrXCI9PT1lLmJhcm1vZGV8fC0xIT09W1widG9uZXh0eFwiLFwidG9uZXh0eVwiXS5pbmRleE9mKHkuZmlsbCkpJiYodj1sLmlzR3JvdXBlZCh7dHJhY2VvcmRlcjp2fSk/XCJncm91cGVkK3JldmVyc2VkXCI6XCJyZXZlcnNlZFwiKSx2b2lkIDAhPT15LmxlZ2VuZGdyb3VwJiZcIlwiIT09eS5sZWdlbmRncm91cCYmKHY9bC5pc1JldmVyc2VkKHt0cmFjZW9yZGVyOnZ9KT9cInJldmVyc2VkK2dyb3VwZWRcIjpcImdyb3VwZWRcIikpfXZhciB4PWkuY29lcmNlKHQsZSxzLFwic2hvd2xlZ2VuZFwiLGcmJmQ+MSk7aWYoITEhPT14fHxwLnVpcmV2aXNpb24pe3ZhciBiPWEubmV3Q29udGFpbmVyKGUsXCJsZWdlbmRcIik7aWYodyhcInVpcmV2aXNpb25cIixlLnVpcmV2aXNpb24pLCExIT09eCl7aWYodyhcImJnY29sb3JcIixlLnBhcGVyX2JnY29sb3IpLHcoXCJib3JkZXJjb2xvclwiKSx3KFwiYm9yZGVyd2lkdGhcIiksaS5jb2VyY2VGb250KHcsXCJmb250XCIsZS5mb250KSx3KFwib3JpZW50YXRpb25cIiksXCJoXCI9PT1iLm9yaWVudGF0aW9uKXt2YXIgXz10LnhheGlzO24uZ2V0Q29tcG9uZW50TWV0aG9kKFwicmFuZ2VzbGlkZXJcIixcImlzVmlzaWJsZVwiKShfKT8oYz0wLGg9XCJsZWZ0XCIsdT0xLjEsZj1cImJvdHRvbVwiKTooYz0wLGg9XCJsZWZ0XCIsdT0tLjEsZj1cInRvcFwiKX13KFwidHJhY2VvcmRlclwiLHYpLGwuaXNHcm91cGVkKGUubGVnZW5kKSYmdyhcInRyYWNlZ3JvdXBnYXBcIiksdyhcIml0ZW1zaXppbmdcIiksdyhcInhcIixjKSx3KFwieGFuY2hvclwiLGgpLHcoXCJ5XCIsdSksdyhcInlhbmNob3JcIixmKSx3KFwidmFsaWduXCIpLGkubm9uZU9yQWxsKHAsYixbXCJ4XCIsXCJ5XCJdKX19ZnVuY3Rpb24gdyh0LGUpe3JldHVybiBpLmNvZXJjZShwLGIsbyx0LGUpfX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlc1wiOjgwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9hdHRyaWJ1dGVzXCI6NjI3LFwiLi9oZWxwZXJzXCI6NjMzfV0sNjMwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9wbG90cy9wbG90c1wiKSxvPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxzPXQoXCIuLi8uLi9saWIvZXZlbnRzXCIpLGw9dChcIi4uL2RyYWdlbGVtZW50XCIpLGM9dChcIi4uL2RyYXdpbmdcIiksdT10KFwiLi4vY29sb3JcIiksaD10KFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCIpLGY9dChcIi4vaGFuZGxlX2NsaWNrXCIpLHA9dChcIi4vY29uc3RhbnRzXCIpLGQ9dChcIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnNcIiksZz10KFwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiKSx2PWcuTElORV9TUEFDSU5HLG09Zy5GUk9NX1RMLHk9Zy5GUk9NX0JSLHg9dChcIi4vZ2V0X2xlZ2VuZF9kYXRhXCIpLGI9dChcIi4vc3R5bGVcIiksXz10KFwiLi9oZWxwZXJzXCIpLHc9ZC5EQkxDTElDS0RFTEFZO2Z1bmN0aW9uIGsodCxlLHIsbixpKXt2YXIgYT1yLmRhdGEoKVswXVswXS50cmFjZSxvPXtldmVudDppLG5vZGU6ci5ub2RlKCksY3VydmVOdW1iZXI6YS5pbmRleCxleHBhbmRlZEluZGV4OmEuX2V4cGFuZGVkSW5kZXgsZGF0YTp0LmRhdGEsbGF5b3V0OnQubGF5b3V0LGZyYW1lczp0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLGNvbmZpZzp0Ll9jb250ZXh0LGZ1bGxEYXRhOnQuX2Z1bGxEYXRhLGZ1bGxMYXlvdXQ6dC5fZnVsbExheW91dH07aWYoYS5fZ3JvdXAmJihvLmdyb3VwPWEuX2dyb3VwKSxcInBpZVwiPT09YS50eXBlJiYoby5sYWJlbD1yLmRhdHVtKClbMF0ubGFiZWwpLCExIT09cy50cmlnZ2VySGFuZGxlcih0LFwicGxvdGx5X2xlZ2VuZGNsaWNrXCIsbykpaWYoMT09PW4pZS5fY2xpY2tUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtmKHIsdCxuKX0sdyk7ZWxzZSBpZigyPT09bil7ZS5fY2xpY2tUaW1lb3V0JiZjbGVhclRpbWVvdXQoZS5fY2xpY2tUaW1lb3V0KSx0Ll9sZWdlbmRNb3VzZURvd25UaW1lPTAsITEhPT1zLnRyaWdnZXJIYW5kbGVyKHQsXCJwbG90bHlfbGVnZW5kZG91YmxlY2xpY2tcIixvKSYmZihyLHQsbil9fWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBuPXQuZGF0YSgpWzBdWzBdLGE9ZS5fZnVsbExheW91dCxzPW4udHJhY2UsbD1vLnRyYWNlSXMocyxcInBpZVwiKSx1PXMuaW5kZXgsZj1lLl9jb250ZXh0LmVkaXRzLmxlZ2VuZFRleHQmJiFsLGQ9bD9uLmxhYmVsOnMubmFtZTthLm1ldGEmJihkPWkudGVtcGxhdGVTdHJpbmcoZCx7bWV0YTphLm1ldGF9KSk7dmFyIGc9aS5lbnN1cmVTaW5nbGUodCxcInRleHRcIixcImxlZ2VuZHRleHRcIik7ZnVuY3Rpb24gbShyKXtoLmNvbnZlcnRUb1RzcGFucyhyLGUsZnVuY3Rpb24oKXshZnVuY3Rpb24odCxlKXt2YXIgcj10LmRhdGEoKVswXVswXTtpZighci50cmFjZS5zaG93bGVnZW5kKXJldHVybiB2b2lkIHQucmVtb3ZlKCk7dmFyIG4saSxhPXQuc2VsZWN0KFwiZ1tjbGFzcyo9bWF0aC1ncm91cF1cIiksbz1hLm5vZGUoKSxzPWUuX2Z1bGxMYXlvdXQubGVnZW5kLmZvbnQuc2l6ZSp2O2lmKG8pe3ZhciBsPWMuYkJveChvKTtuPWwuaGVpZ2h0LGk9bC53aWR0aCxjLnNldFRyYW5zbGF0ZShhLDAsbi80KX1lbHNle3ZhciB1PXQuc2VsZWN0KFwiLmxlZ2VuZHRleHRcIiksZj1oLmxpbmVDb3VudCh1KSxkPXUubm9kZSgpO249cypmLGk9ZD9jLmJCb3goZCkud2lkdGg6MDt2YXIgZz1zKiguMysoMS1mKS8yKTtoLnBvc2l0aW9uVGV4dCh1LHAudGV4dE9mZnNldFgsZyl9ci5saW5lSGVpZ2h0PXMsci5oZWlnaHQ9TWF0aC5tYXgobiwxNikrMyxyLndpZHRoPWl9KHQsZSl9KX1nLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLFwic3RhcnRcIikuY2xhc3NlZChcInVzZXItc2VsZWN0LW5vbmVcIiwhMCkuY2FsbChjLmZvbnQsYS5sZWdlbmQuZm9udCkudGV4dChmP1QoZCxyKTpkKSxoLnBvc2l0aW9uVGV4dChnLHAudGV4dE9mZnNldFgsMCksZj9nLmNhbGwoaC5tYWtlRWRpdGFibGUse2dkOmUsdGV4dDpkfSkuY2FsbChtKS5vbihcImVkaXRcIixmdW5jdGlvbih0KXt0aGlzLnRleHQoVCh0LHIpKS5jYWxsKG0pO3ZhciBhPW4udHJhY2UuX2Z1bGxJbnB1dHx8e30scz17fTtpZihvLmhhc1RyYW5zZm9ybShhLFwiZ3JvdXBieVwiKSl7dmFyIGw9by5nZXRUcmFuc2Zvcm1JbmRpY2VzKGEsXCJncm91cGJ5XCIpLGM9bFtsLmxlbmd0aC0xXSxoPWkua2V5ZWRDb250YWluZXIoYSxcInRyYW5zZm9ybXNbXCIrYytcIl0uc3R5bGVzXCIsXCJ0YXJnZXRcIixcInZhbHVlLm5hbWVcIik7aC5zZXQobi50cmFjZS5fZ3JvdXAsdCkscz1oLmNvbnN0cnVjdFVwZGF0ZSgpfWVsc2Ugcy5uYW1lPXQ7cmV0dXJuIG8uY2FsbChcIl9ndWlSZXN0eWxlXCIsZSxzLHUpfSk6bShnKX1mdW5jdGlvbiBUKHQsZSl7dmFyIHI9TWF0aC5tYXgoNCxlKTtpZih0JiZ0LnRyaW0oKS5sZW5ndGg+PXIvMilyZXR1cm4gdDtmb3IodmFyIG49ci0odD10fHxcIlwiKS5sZW5ndGg7bj4wO24tLSl0Kz1cIiBcIjtyZXR1cm4gdH1mdW5jdGlvbiBNKHQsZSl7dmFyIHIsYT0xLG89aS5lbnN1cmVTaW5nbGUodCxcInJlY3RcIixcImxlZ2VuZHRvZ2dsZVwiLGZ1bmN0aW9uKHQpe3Quc3R5bGUoXCJjdXJzb3JcIixcInBvaW50ZXJcIikuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsXCJhbGxcIikuY2FsbCh1LmZpbGwsXCJyZ2JhKDAsMCwwLDApXCIpfSk7by5vbihcIm1vdXNlZG93blwiLGZ1bmN0aW9uKCl7KHI9KG5ldyBEYXRlKS5nZXRUaW1lKCkpLWUuX2xlZ2VuZE1vdXNlRG93blRpbWU8dz9hKz0xOihhPTEsZS5fbGVnZW5kTW91c2VEb3duVGltZT1yKX0pLG8ub24oXCJtb3VzZXVwXCIsZnVuY3Rpb24oKXtpZighZS5fZHJhZ2dlZCYmIWUuX2VkaXRpbmcpe3ZhciByPWUuX2Z1bGxMYXlvdXQubGVnZW5kOyhuZXcgRGF0ZSkuZ2V0VGltZSgpLWUuX2xlZ2VuZE1vdXNlRG93blRpbWU+dyYmKGE9TWF0aC5tYXgoYS0xLDEpKSxrKGUscix0LGEsbi5ldmVudCl9fSl9ZnVuY3Rpb24gUyh0LGUscil7dmFyIGE9dC5fZnVsbExheW91dCxvPWEubGVnZW5kLHM9by5ib3JkZXJ3aWR0aCxsPV8uaXNHcm91cGVkKG8pLHU9MDtpZihvLl93aWR0aD0wLG8uX2hlaWdodD0wLF8uaXNWZXJ0aWNhbChvKSlsJiZlLmVhY2goZnVuY3Rpb24odCxlKXtjLnNldFRyYW5zbGF0ZSh0aGlzLDAsZSpvLnRyYWNlZ3JvdXBnYXApfSksci5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj1lLmhlaWdodCxuPWUud2lkdGg7Yy5zZXRUcmFuc2xhdGUodGhpcyxzLDUrcytvLl9oZWlnaHQrci8yKSxvLl9oZWlnaHQrPXIsby5fd2lkdGg9TWF0aC5tYXgoby5fd2lkdGgsbil9KSxvLl93aWR0aCs9NDUrMipzLG8uX2hlaWdodCs9MTArMipzLGwmJihvLl9oZWlnaHQrPShvLl9sZ3JvdXBzTGVuZ3RoLTEpKm8udHJhY2Vncm91cGdhcCksdT00MDtlbHNlIGlmKGwpe3ZhciBoLGY9MCxwPTAsZD1lLmRhdGEoKSxnPTA7Zm9yKGg9MDtoPGQubGVuZ3RoO2grKyl7dmFyIHY9ZFtoXSxtPXYubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLndpZHRofSkseT1pLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxtKSx4PXYucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZVswXS5oZWlnaHR9LDApO3A9TWF0aC5tYXgocCx5KSxmPU1hdGgubWF4KGYseCksZz1NYXRoLm1heChnLHYubGVuZ3RoKX1wKz01LHArPTQwO3ZhciBiPVtvLl93aWR0aF0sdz1bXSxrPTA7Zm9yKGg9MDtoPGQubGVuZ3RoO2grKyl7YS5fc2l6ZS53PHMrby5fd2lkdGgrNStwPyhiW2IubGVuZ3RoLTFdPWJbMF0sby5fd2lkdGg9cCxrKyspOm8uX3dpZHRoKz1wK3M7dmFyIEE9aypmO0ErPWs+MD9vLnRyYWNlZ3JvdXBnYXA6MCx3LnB1c2goQSksYi5wdXNoKG8uX3dpZHRoKX1lLmVhY2goZnVuY3Rpb24odCxlKXtjLnNldFRyYW5zbGF0ZSh0aGlzLGJbZV0sd1tlXSl9KSxlLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoXCJnLnRyYWNlc1wiKSxlPTA7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPXRbMF0uaGVpZ2h0O2Muc2V0VHJhbnNsYXRlKHRoaXMsMCw1K3MrZStyLzIpLGUrPXJ9KX0pO3ZhciBUPXdbdy5sZW5ndGgtMV0rZjtvLl9oZWlnaHQ9MTArMipzK1Q7dmFyIE09TWF0aC5tYXguYXBwbHkobnVsbCxiKTtvLl93aWR0aD1NK3ArNDAsby5fd2lkdGgrPTIqc31lbHNle3ZhciBTPTAsRT0wLEM9MCxMPTAsej0wO3IuZWFjaChmdW5jdGlvbih0KXtDPU1hdGgubWF4KDQwK3RbMF0ud2lkdGgsQykseis9NDArdFswXS53aWR0aCs1fSk7dmFyIE89YS5fc2l6ZS53PnMrei01O3IuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9Tz80MCt0WzBdLndpZHRoOkM7cytMKzUrcj5hLl9zaXplLncmJihMPTAsUys9RSxvLl9oZWlnaHQrPUUsRT0wKSxjLnNldFRyYW5zbGF0ZSh0aGlzLHMrTCw1K3MrZS5oZWlnaHQvMitTKSxvLl93aWR0aCs9NStyLEwrPTUrcixFPU1hdGgubWF4KGUuaGVpZ2h0LEUpfSksTz9vLl9oZWlnaHQ9RTpvLl9oZWlnaHQrPUUsby5fd2lkdGgrPTIqcyxvLl9oZWlnaHQrPTEwKzIqc31vLl93aWR0aD1NYXRoLmNlaWwoby5fd2lkdGgpLG8uX2hlaWdodD1NYXRoLmNlaWwoby5faGVpZ2h0KTt2YXIgST10Ll9jb250ZXh0LmVkaXRzLmxlZ2VuZFRleHR8fHQuX2NvbnRleHQuZWRpdHMubGVnZW5kUG9zaXRpb247ci5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoXCIubGVnZW5kdG9nZ2xlXCIpO2Muc2V0UmVjdChyLDAsLWUuaGVpZ2h0LzIsKEk/MDpvLl93aWR0aCkrdSxlLmhlaWdodCl9KX1mdW5jdGlvbiBFKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQubGVnZW5kLHI9XCJsZWZ0XCI7aS5pc1JpZ2h0QW5jaG9yKGUpP3I9XCJyaWdodFwiOmkuaXNDZW50ZXJBbmNob3IoZSkmJihyPVwiY2VudGVyXCIpO3ZhciBuPVwidG9wXCI7aS5pc0JvdHRvbUFuY2hvcihlKT9uPVwiYm90dG9tXCI6aS5pc01pZGRsZUFuY2hvcihlKSYmKG49XCJtaWRkbGVcIiksYS5hdXRvTWFyZ2luKHQsXCJsZWdlbmRcIix7eDplLngseTplLnksbDplLl93aWR0aCptW3JdLHI6ZS5fd2lkdGgqeVtyXSxiOmUuX2hlaWdodCp5W25dLHQ6ZS5faGVpZ2h0Km1bbl19KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPVwibGVnZW5kXCIrZS5fdWlkO2lmKGUuX2luZm9sYXllciYmdC5jYWxjZGF0YSl7dC5fbGVnZW5kTW91c2VEb3duVGltZXx8KHQuX2xlZ2VuZE1vdXNlRG93blRpbWU9MCk7dmFyIHM9ZS5sZWdlbmQsaD1lLnNob3dsZWdlbmQmJngodC5jYWxjZGF0YSxzKSxmPWUuaGlkZGVubGFiZWxzfHxbXTtpZighZS5zaG93bGVnZW5kfHwhaC5sZW5ndGgpcmV0dXJuIGUuX2luZm9sYXllci5zZWxlY3RBbGwoXCIubGVnZW5kXCIpLnJlbW92ZSgpLGUuX3RvcGRlZnMuc2VsZWN0KFwiI1wiK3IpLnJlbW92ZSgpLHZvaWQgYS5hdXRvTWFyZ2luKHQsXCJsZWdlbmRcIik7Zm9yKHZhciBkPTAsZz0wO2c8aC5sZW5ndGg7ZysrKWZvcih2YXIgdj0wO3Y8aFtnXS5sZW5ndGg7disrKXt2YXIgXz1oW2ddW3ZdWzBdLHc9Xy50cmFjZSxUPW8udHJhY2VJcyh3LFwicGllXCIpP18ubGFiZWw6dy5uYW1lO2Q9TWF0aC5tYXgoZCxUJiZULmxlbmd0aHx8MCl9dmFyIEM9ITEsTD1pLmVuc3VyZVNpbmdsZShlLl9pbmZvbGF5ZXIsXCJnXCIsXCJsZWdlbmRcIixmdW5jdGlvbih0KXt0LmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpLEM9ITB9KSx6PWkuZW5zdXJlU2luZ2xlQnlJZChlLl90b3BkZWZzLFwiY2xpcFBhdGhcIixyLGZ1bmN0aW9uKHQpe3QuYXBwZW5kKFwicmVjdFwiKX0pLE89aS5lbnN1cmVTaW5nbGUoTCxcInJlY3RcIixcImJnXCIsZnVuY3Rpb24odCl7dC5hdHRyKFwic2hhcGUtcmVuZGVyaW5nXCIsXCJjcmlzcEVkZ2VzXCIpfSk7Ty5jYWxsKHUuc3Ryb2tlLHMuYm9yZGVyY29sb3IpLmNhbGwodS5maWxsLHMuYmdjb2xvcikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixzLmJvcmRlcndpZHRoK1wicHhcIik7dmFyIEk9aS5lbnN1cmVTaW5nbGUoTCxcImdcIixcInNjcm9sbGJveFwiKSxEPWkuZW5zdXJlU2luZ2xlKEwsXCJyZWN0XCIsXCJzY3JvbGxiYXJcIixmdW5jdGlvbih0KXt0LmF0dHIoe3J4OjIwLHJ5OjMsd2lkdGg6MCxoZWlnaHQ6MH0pLmNhbGwodS5maWxsLFwiIzgwOEJBNFwiKX0pLFA9SS5zZWxlY3RBbGwoXCJnLmdyb3Vwc1wiKS5kYXRhKGgpO1AuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLFwiZ3JvdXBzXCIpLFAuZXhpdCgpLnJlbW92ZSgpO3ZhciBSPVAuc2VsZWN0QWxsKFwiZy50cmFjZXNcIikuZGF0YShpLmlkZW50aXR5KTtSLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIixcInRyYWNlc1wiKSxSLmV4aXQoKS5yZW1vdmUoKSxSLnN0eWxlKFwib3BhY2l0eVwiLGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2U7cmV0dXJuIG8udHJhY2VJcyhlLFwicGllXCIpPy0xIT09Zi5pbmRleE9mKHRbMF0ubGFiZWwpPy41OjE6XCJsZWdlbmRvbmx5XCI9PT1lLnZpc2libGU/LjU6MX0pLmVhY2goZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5jYWxsKEEsdCxkKX0pLmNhbGwoYix0KS5lYWNoKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuY2FsbChNLHQpfSksaS5zeW5jT3JBc3luYyhbYS5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7QyYmKFModCxQLFIpLEUodCkpO3ZhciB1PWUud2lkdGgsaD1lLmhlaWdodDtTKHQsUCxSKSxzLl9oZWlnaHQ+aD9mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LmxlZ2VuZCxyPVwibGVmdFwiO2kuaXNSaWdodEFuY2hvcihlKT9yPVwicmlnaHRcIjppLmlzQ2VudGVyQW5jaG9yKGUpJiYocj1cImNlbnRlclwiKTthLmF1dG9NYXJnaW4odCxcImxlZ2VuZFwiLHt4OmUueCx5Oi41LGw6ZS5fd2lkdGgqbVtyXSxyOmUuX3dpZHRoKnlbcl0sYjowLHQ6MH0pfSh0KTpFKHQpO3ZhciBmPWUuX3NpemUsZD1mLmwrZi53KnMueCxnPWYudCtmLmgqKDEtcy55KTtpLmlzUmlnaHRBbmNob3Iocyk/ZC09cy5fd2lkdGg6aS5pc0NlbnRlckFuY2hvcihzKSYmKGQtPXMuX3dpZHRoLzIpLGkuaXNCb3R0b21BbmNob3Iocyk/Zy09cy5faGVpZ2h0OmkuaXNNaWRkbGVBbmNob3IocykmJihnLT1zLl9oZWlnaHQvMik7dmFyIHY9cy5fd2lkdGgseD1mLnc7dj54PyhkPWYubCx2PXgpOihkK3Y+dSYmKGQ9dS12KSxkPDAmJihkPTApLHY9TWF0aC5taW4odS1kLHMuX3dpZHRoKSk7dmFyIGIsXyx3LEEsVD1zLl9oZWlnaHQsTT1mLmg7aWYoVD5NPyhnPWYudCxUPU0pOihnK1Q+aCYmKGc9aC1UKSxnPDAmJihnPTApLFQ9TWF0aC5taW4oaC1nLHMuX2hlaWdodCkpLGMuc2V0VHJhbnNsYXRlKEwsZCxnKSxELm9uKFwiLmRyYWdcIixudWxsKSxMLm9uKFwid2hlZWxcIixudWxsKSxzLl9oZWlnaHQ8PVR8fHQuX2NvbnRleHQuc3RhdGljUGxvdClPLmF0dHIoe3dpZHRoOnYtcy5ib3JkZXJ3aWR0aCxoZWlnaHQ6VC1zLmJvcmRlcndpZHRoLHg6cy5ib3JkZXJ3aWR0aC8yLHk6cy5ib3JkZXJ3aWR0aC8yfSksYy5zZXRUcmFuc2xhdGUoSSwwLDApLHouc2VsZWN0KFwicmVjdFwiKS5hdHRyKHt3aWR0aDp2LTIqcy5ib3JkZXJ3aWR0aCxoZWlnaHQ6VC0yKnMuYm9yZGVyd2lkdGgseDpzLmJvcmRlcndpZHRoLHk6cy5ib3JkZXJ3aWR0aH0pLGMuc2V0Q2xpcFVybChJLHIsdCksYy5zZXRSZWN0KEQsMCwwLDAsMCksZGVsZXRlIHMuX3Njcm9sbFk7ZWxzZXt2YXIgRixCLE49TWF0aC5tYXgocC5zY3JvbGxCYXJNaW5IZWlnaHQsVCpUL3MuX2hlaWdodCksaj1ULU4tMipwLnNjcm9sbEJhck1hcmdpbixWPXMuX2hlaWdodC1ULFU9ai9WLHE9TWF0aC5taW4ocy5fc2Nyb2xsWXx8MCxWKTtPLmF0dHIoe3dpZHRoOnYtMipzLmJvcmRlcndpZHRoK3Auc2Nyb2xsQmFyV2lkdGgrcC5zY3JvbGxCYXJNYXJnaW4saGVpZ2h0OlQtcy5ib3JkZXJ3aWR0aCx4OnMuYm9yZGVyd2lkdGgvMix5OnMuYm9yZGVyd2lkdGgvMn0pLHouc2VsZWN0KFwicmVjdFwiKS5hdHRyKHt3aWR0aDp2LTIqcy5ib3JkZXJ3aWR0aCtwLnNjcm9sbEJhcldpZHRoK3Auc2Nyb2xsQmFyTWFyZ2luLGhlaWdodDpULTIqcy5ib3JkZXJ3aWR0aCx4OnMuYm9yZGVyd2lkdGgseTpzLmJvcmRlcndpZHRoK3F9KSxjLnNldENsaXBVcmwoSSxyLHQpLEcocSxOLFUpLEwub24oXCJ3aGVlbFwiLGZ1bmN0aW9uKCl7RyhxPWkuY29uc3RyYWluKHMuX3Njcm9sbFkrbi5ldmVudC5kZWx0YVkvaipWLDAsViksTixVKSwwIT09cSYmcSE9PVYmJm4uZXZlbnQucHJldmVudERlZmF1bHQoKX0pO3ZhciBIPW4uYmVoYXZpb3IuZHJhZygpLm9uKFwiZHJhZ3N0YXJ0XCIsZnVuY3Rpb24oKXtGPW4uZXZlbnQuc291cmNlRXZlbnQuY2xpZW50WSxCPXF9KS5vbihcImRyYWdcIixmdW5jdGlvbigpe3ZhciB0PW4uZXZlbnQuc291cmNlRXZlbnQ7Mj09PXQuYnV0dG9uc3x8dC5jdHJsS2V5fHxHKHE9aS5jb25zdHJhaW4oKHQuY2xpZW50WS1GKS9VK0IsMCxWKSxOLFUpfSk7RC5jYWxsKEgpfWZ1bmN0aW9uIEcoZSxyLG4pe3MuX3Njcm9sbFk9dC5fZnVsbExheW91dC5sZWdlbmQuX3Njcm9sbFk9ZSxjLnNldFRyYW5zbGF0ZShJLDAsLWUpLGMuc2V0UmVjdChELHYscC5zY3JvbGxCYXJNYXJnaW4rZSpuLHAuc2Nyb2xsQmFyV2lkdGgsciksei5zZWxlY3QoXCJyZWN0XCIpLmF0dHIoe3k6cy5ib3JkZXJ3aWR0aCtlfSl9dC5fY29udGV4dC5lZGl0cy5sZWdlbmRQb3NpdGlvbiYmKEwuY2xhc3NlZChcImN1cnNvci1tb3ZlXCIsITApLGwuaW5pdCh7ZWxlbWVudDpMLm5vZGUoKSxnZDp0LHByZXBGbjpmdW5jdGlvbigpe3ZhciB0PWMuZ2V0VHJhbnNsYXRlKEwpO3c9dC54LEE9dC55fSxtb3ZlRm46ZnVuY3Rpb24odCxlKXt2YXIgcj13K3Qsbj1BK2U7Yy5zZXRUcmFuc2xhdGUoTCxyLG4pLGI9bC5hbGlnbihyLDAsZi5sLGYubCtmLncscy54YW5jaG9yKSxfPWwuYWxpZ24obiwwLGYudCtmLmgsZi50LHMueWFuY2hvcil9LGRvbmVGbjpmdW5jdGlvbigpe3ZvaWQgMCE9PWImJnZvaWQgMCE9PV8mJm8uY2FsbChcIl9ndWlSZWxheW91dFwiLHQse1wibGVnZW5kLnhcIjpiLFwibGVnZW5kLnlcIjpffSl9LGNsaWNrRm46ZnVuY3Rpb24ocixuKXt2YXIgaT1lLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKFwiZy50cmFjZXNcIikuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gbi5jbGllbnRYPj10LmxlZnQmJm4uY2xpZW50WDw9dC5yaWdodCYmbi5jbGllbnRZPj10LnRvcCYmbi5jbGllbnRZPD10LmJvdHRvbX0pO2kuc2l6ZSgpPjAmJmsodCxMLGkscixuKX19KSl9XSx0KX19fSx7XCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCI6NjczLFwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9uc1wiOjY3NyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9ldmVudHNcIjo2OTAsXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIjo3MjUsXCIuLi8uLi9wbG90cy9wbG90c1wiOjgxMCxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vY29sb3JcIjo1NzgsXCIuLi9kcmFnZWxlbWVudFwiOjU5NixcIi4uL2RyYXdpbmdcIjo1OTksXCIuL2NvbnN0YW50c1wiOjYyOCxcIi4vZ2V0X2xlZ2VuZF9kYXRhXCI6NjMxLFwiLi9oYW5kbGVfY2xpY2tcIjo2MzIsXCIuL2hlbHBlcnNcIjo2MzMsXCIuL3N0eWxlXCI6NjM1LGQzOjE1NX1dLDYzMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxpPXQoXCIuL2hlbHBlcnNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvPXt9LHM9W10sbD0hMSxjPXt9LHU9MDtmdW5jdGlvbiBoKHQscil7aWYoXCJcIiE9PXQmJmkuaXNHcm91cGVkKGUpKS0xPT09cy5pbmRleE9mKHQpPyhzLnB1c2godCksbD0hMCxvW3RdPVtbcl1dKTpvW3RdLnB1c2goW3JdKTtlbHNle3ZhciBuPVwifn5pXCIrdTtzLnB1c2gobiksb1tuXT1bW3JdXSx1Kyt9fWZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBmPXRbcl0scD1mWzBdLGQ9cC50cmFjZSxnPWQubGVnZW5kZ3JvdXA7aWYoZC52aXNpYmxlJiZkLnNob3dsZWdlbmQpaWYobi50cmFjZUlzKGQsXCJwaWVcIikpZm9yKGNbZ118fChjW2ddPXt9KSxhPTA7YTxmLmxlbmd0aDthKyspe3ZhciB2PWZbYV0ubGFiZWw7Y1tnXVt2XXx8KGgoZyx7bGFiZWw6dixjb2xvcjpmW2FdLmNvbG9yLGk6ZlthXS5pLHRyYWNlOmQscHRzOmZbYV0ucHRzfSksY1tnXVt2XT0hMCl9ZWxzZSBoKGcscCl9aWYoIXMubGVuZ3RoKXJldHVybltdO3ZhciBtLHkseD1zLmxlbmd0aDtpZihsJiZpLmlzR3JvdXBlZChlKSlmb3IoeT1uZXcgQXJyYXkoeCkscj0wO3I8eDtyKyspbT1vW3Nbcl1dLHlbcl09aS5pc1JldmVyc2VkKGUpP20ucmV2ZXJzZSgpOm07ZWxzZXtmb3IoeT1bbmV3IEFycmF5KHgpXSxyPTA7cjx4O3IrKyltPW9bc1tyXV1bMF0seVswXVtpLmlzUmV2ZXJzZWQoZSk/eC1yLTE6cl09bTt4PTF9cmV0dXJuIGUuX2xncm91cHNMZW5ndGg9eCx5fX0se1wiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2hlbHBlcnNcIjo2MzN9XSw2MzI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGE9ITA7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZighZS5fZHJhZ2dlZCYmIWUuX2VkaXRpbmcpe3ZhciBvLHMsbCxjLHUsaD1lLl9mdWxsTGF5b3V0LmhpZGRlbmxhYmVscz9lLl9mdWxsTGF5b3V0LmhpZGRlbmxhYmVscy5zbGljZSgpOltdLGY9dC5kYXRhKClbMF1bMF0scD1lLl9mdWxsRGF0YSxkPWYudHJhY2UsZz1kLmxlZ2VuZGdyb3VwLHY9e30sbT1bXSx5PVtdLHg9W107aWYoMT09PXImJmEmJmUuZGF0YSYmZS5fY29udGV4dC5zaG93VGlwcz8obi5ub3RpZmllcihuLl8oZSxcIkRvdWJsZS1jbGljayBvbiBsZWdlbmQgdG8gaXNvbGF0ZSBvbmUgdHJhY2VcIiksXCJsb25nXCIpLGE9ITEpOmE9ITEsaS50cmFjZUlzKGQsXCJwaWVcIikpe3ZhciBiPWYubGFiZWwsXz1oLmluZGV4T2YoYik7MT09PXI/LTE9PT1fP2gucHVzaChiKTpoLnNwbGljZShfLDEpOjI9PT1yJiYoaD1bXSxlLmNhbGNkYXRhWzBdLmZvckVhY2goZnVuY3Rpb24odCl7YiE9PXQubGFiZWwmJmgucHVzaCh0LmxhYmVsKX0pLGUuX2Z1bGxMYXlvdXQuaGlkZGVubGFiZWxzJiZlLl9mdWxsTGF5b3V0LmhpZGRlbmxhYmVscy5sZW5ndGg9PT1oLmxlbmd0aCYmLTE9PT1fJiYoaD1bXSkpLGkuY2FsbChcIl9ndWlSZWxheW91dFwiLGUsXCJoaWRkZW5sYWJlbHNcIixoKX1lbHNle3ZhciB3LGs9ZyYmZy5sZW5ndGgsQT1bXTtpZihrKWZvcihvPTA7bzxwLmxlbmd0aDtvKyspKHc9cFtvXSkudmlzaWJsZSYmdy5sZWdlbmRncm91cD09PWcmJkEucHVzaChvKTtpZigxPT09cil7dmFyIFQ7c3dpdGNoKGQudmlzaWJsZSl7Y2FzZSEwOlQ9XCJsZWdlbmRvbmx5XCI7YnJlYWs7Y2FzZSExOlQ9ITE7YnJlYWs7Y2FzZVwibGVnZW5kb25seVwiOlQ9ITB9aWYoaylmb3Iobz0wO288cC5sZW5ndGg7bysrKSExIT09cFtvXS52aXNpYmxlJiZwW29dLmxlZ2VuZGdyb3VwPT09ZyYmTyhwW29dLFQpO2Vsc2UgTyhkLFQpfWVsc2UgaWYoMj09PXIpe3ZhciBNLFMsRT0hMDtmb3Iobz0wO288cC5sZW5ndGg7bysrKWlmKCEocFtvXT09PWQpJiYhKE09ayYmcFtvXS5sZWdlbmRncm91cD09PWcpJiYhMD09PXBbb10udmlzaWJsZSYmIWkudHJhY2VJcyhwW29dLFwibm90TGVnZW5kSXNvbGF0YWJsZVwiKSl7RT0hMTticmVha31mb3Iobz0wO288cC5sZW5ndGg7bysrKWlmKCExIT09cFtvXS52aXNpYmxlJiYhaS50cmFjZUlzKHBbb10sXCJub3RMZWdlbmRJc29sYXRhYmxlXCIpKXN3aXRjaChkLnZpc2libGUpe2Nhc2VcImxlZ2VuZG9ubHlcIjpPKHBbb10sITApO2JyZWFrO2Nhc2UhMDpTPSEhRXx8XCJsZWdlbmRvbmx5XCIsTT1wW29dPT09ZHx8ayYmcFtvXS5sZWdlbmRncm91cD09PWcsTyhwW29dLCEhTXx8Uyl9fWZvcihvPTA7bzx5Lmxlbmd0aDtvKyspaWYobD15W29dKXt2YXIgQz1sLmNvbnN0cnVjdFVwZGF0ZSgpLEw9T2JqZWN0LmtleXMoQyk7Zm9yKHM9MDtzPEwubGVuZ3RoO3MrKyljPUxbc10sKHZbY109dltjXXx8W10pW3hbb11dPUNbY119Zm9yKHU9T2JqZWN0LmtleXModiksbz0wO288dS5sZW5ndGg7bysrKWZvcihjPXVbb10scz0wO3M8bS5sZW5ndGg7cysrKXZbY10uaGFzT3duUHJvcGVydHkocyl8fCh2W2NdW3NdPXZvaWQgMCk7aS5jYWxsKFwiX2d1aVJlc3R5bGVcIixlLHYsbSl9fWZ1bmN0aW9uIHoodCxlLHIpe3ZhciBuPW0uaW5kZXhPZih0KSxpPXZbZV07cmV0dXJuIGl8fChpPXZbZV09W10pLC0xPT09bS5pbmRleE9mKHQpJiYobS5wdXNoKHQpLG49bS5sZW5ndGgtMSksaVtuXT1yLG59ZnVuY3Rpb24gTyh0LGUpe3ZhciByPXQuX2Z1bGxJbnB1dDtpZihpLmhhc1RyYW5zZm9ybShyLFwiZ3JvdXBieVwiKSl7dmFyIGE9eVtyLmluZGV4XTtpZighYSl7dmFyIG89aS5nZXRUcmFuc2Zvcm1JbmRpY2VzKHIsXCJncm91cGJ5XCIpLHM9b1tvLmxlbmd0aC0xXTthPW4ua2V5ZWRDb250YWluZXIocixcInRyYW5zZm9ybXNbXCIrcytcIl0uc3R5bGVzXCIsXCJ0YXJnZXRcIixcInZhbHVlLnZpc2libGVcIikseVtyLmluZGV4XT1hfXZhciBsPWEuZ2V0KHQuX2dyb3VwKTt2b2lkIDA9PT1sJiYobD0hMCksITEhPT1sJiZhLnNldCh0Ll9ncm91cCxlKSx4W3IuaW5kZXhdPXooci5pbmRleCxcInZpc2libGVcIiwhMSE9PXIudmlzaWJsZSl9ZWxzZXt2YXIgYz0hMSE9PXIudmlzaWJsZSYmZTt6KHIuaW5kZXgsXCJ2aXNpYmxlXCIsYyl9fX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5fV0sNjMzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ci5pc0dyb3VwZWQ9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT0odC50cmFjZW9yZGVyfHxcIlwiKS5pbmRleE9mKFwiZ3JvdXBlZFwiKX0sci5pc1ZlcnRpY2FsPWZ1bmN0aW9uKHQpe3JldHVyblwiaFwiIT09dC5vcmllbnRhdGlvbn0sci5pc1JldmVyc2VkPWZ1bmN0aW9uKHQpe3JldHVybi0xIT09KHQudHJhY2VvcmRlcnx8XCJcIikuaW5kZXhPZihcInJldmVyc2VkXCIpfX0se31dLDYzNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17bW9kdWxlVHlwZTpcImNvbXBvbmVudFwiLG5hbWU6XCJsZWdlbmRcIixsYXlvdXRBdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIiksZHJhdzp0KFwiLi9kcmF3XCIpLHN0eWxlOnQoXCIuL3N0eWxlXCIpfX0se1wiLi9hdHRyaWJ1dGVzXCI6NjI3LFwiLi9kZWZhdWx0c1wiOjYyOSxcIi4vZHJhd1wiOjYzMCxcIi4vc3R5bGVcIjo2MzV9XSw2MzU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vcmVnaXN0cnlcIiksYT10KFwiLi4vLi4vbGliXCIpLG89dChcIi4uL2RyYXdpbmdcIikscz10KFwiLi4vY29sb3JcIiksbD10KFwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXNcIiksYz10KFwiLi4vLi4vdHJhY2VzL3BpZS9zdHlsZV9vbmVcIiksdT10KFwiLi4vLi4vdHJhY2VzL3BpZS9oZWxwZXJzXCIpLmNhc3RPcHRpb24saD0xMixmPTUscD0yLGQ9MTAsZz01O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUuX2Z1bGxMYXlvdXQubGVnZW5kLHY9XCJjb25zdGFudFwiPT09ci5pdGVtc2l6aW5nO2Z1bmN0aW9uIG0odCxlLHIsbil7dmFyIGk7aWYodCsxKWk9dDtlbHNle2lmKCEoZSYmZS53aWR0aD4wKSlyZXR1cm4gMDtpPWUud2lkdGh9cmV0dXJuIHY/bjpNYXRoLm1pbihpLHIpfXQuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxpPWEuZW5zdXJlU2luZ2xlKGUsXCJnXCIsXCJsYXllcnNcIik7aS5zdHlsZShcIm9wYWNpdHlcIix0WzBdLnRyYWNlLm9wYWNpdHkpO3ZhciBvPXIudmFsaWduLHM9dFswXS5saW5lSGVpZ2h0LGw9dFswXS5oZWlnaHQ7aWYoXCJtaWRkbGVcIiE9PW8mJnMmJmwpe3ZhciBjPXt0b3A6MSxib3R0b206LTF9W29dKiguNSoocy1sKzMpKTtpLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZSgwLFwiK2MrXCIpXCIpfWVsc2UgaS5hdHRyKFwidHJhbnNmb3JtXCIsbnVsbCk7aS5zZWxlY3RBbGwoXCJnLmxlZ2VuZGZpbGxcIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwibGVnZW5kZmlsbFwiLCEwKSxpLnNlbGVjdEFsbChcImcubGVnZW5kbGluZXNcIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwibGVnZW5kbGluZXNcIiwhMCk7dmFyIHU9aS5zZWxlY3RBbGwoXCJnLmxlZ2VuZHN5bWJvbHNcIikuZGF0YShbdF0pO3UuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJsZWdlbmRzeW1ib2xzXCIsITApLHUuc2VsZWN0QWxsKFwiZy5sZWdlbmRwb2ludHNcIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwibGVnZW5kcG9pbnRzXCIsITApfSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9W107XCJ3YXRlcmZhbGxcIj09PWUudHlwZSYmZS52aXNpYmxlJiYocj10WzBdLmhhc1RvdGFscz9bW1wiaW5jcmVhc2luZ1wiLFwiTS02LC02VjZIMFpcIl0sW1widG90YWxzXCIsXCJNNiw2SDBMLTYsLTZILTBaXCJdLFtcImRlY3JlYXNpbmdcIixcIk02LDZWLTZIMFpcIl1dOltbXCJpbmNyZWFzaW5nXCIsXCJNLTYsLTZWNkg2WlwiXSxbXCJkZWNyZWFzaW5nXCIsXCJNNiw2Vi02SC02WlwiXV0pO3ZhciBpPW4uc2VsZWN0KHRoaXMpLnNlbGVjdChcImcubGVnZW5kcG9pbnRzXCIpLnNlbGVjdEFsbChcInBhdGgubGVnZW5kd2F0ZXJmYWxsXCIpLmRhdGEocik7aS5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChcImxlZ2VuZHdhdGVyZmFsbFwiLCEwKS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoMjAsMClcIikuc3R5bGUoXCJzdHJva2UtbWl0ZXJsaW1pdFwiLDEpLGkuZXhpdCgpLnJlbW92ZSgpLGkuZWFjaChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxpPWVbdFswXV0ubWFya2VyLGE9bSh2b2lkIDAsaS5saW5lLGcscCk7ci5hdHRyKFwiZFwiLHRbMV0pLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsYStcInB4XCIpLmNhbGwocy5maWxsLGkuY29sb3IpLGEmJnIuY2FsbChzLnN0cm9rZSxpLmxpbmUuY29sb3IpfSl9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1lLm1hcmtlcnx8e30sYT1yLmxpbmV8fHt9LG89bi5zZWxlY3QodGhpcykuc2VsZWN0KFwiZy5sZWdlbmRwb2ludHNcIikuc2VsZWN0QWxsKFwicGF0aC5sZWdlbmRiYXJcIikuZGF0YShpLnRyYWNlSXMoZSxcImJhclwiKT9bdF06W10pO28uZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoXCJsZWdlbmRiYXJcIiwhMCkuYXR0cihcImRcIixcIk02LDZILTZWLTZINlpcIikuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKDIwLDApXCIpLG8uZXhpdCgpLnJlbW92ZSgpLG8uZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxpPXRbMF0sbz1tKGkubWx3LHIubGluZSxnLHApO2Uuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixvK1wicHhcIikuY2FsbChzLmZpbGwsaS5tY3x8ci5jb2xvciksbyYmcy5zdHJva2UoZSxpLm1sY3x8YS5jb2xvcil9KX0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPW4uc2VsZWN0KHRoaXMpLnNlbGVjdChcImcubGVnZW5kcG9pbnRzXCIpLnNlbGVjdEFsbChcInBhdGgubGVnZW5kYm94XCIpLmRhdGEoaS50cmFjZUlzKGUsXCJib3gtdmlvbGluXCIpJiZlLnZpc2libGU/W3RdOltdKTtyLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5jbGFzc2VkKFwibGVnZW5kYm94XCIsITApLmF0dHIoXCJkXCIsXCJNNiw2SC02Vi02SDZaXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZSgyMCwwKVwiKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxyPW0odm9pZCAwLGUubGluZSxnLHApO3Quc3R5bGUoXCJzdHJva2Utd2lkdGhcIixyK1wicHhcIikuY2FsbChzLmZpbGwsZS5maWxsY29sb3IpLHImJnMuc3Ryb2tlKHQsZS5saW5lLmNvbG9yKX0pfSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9ZS50cmFjZSxvPW4uc2VsZWN0KHRoaXMpLnNlbGVjdChcImcubGVnZW5kcG9pbnRzXCIpLnNlbGVjdEFsbChcInBhdGgubGVnZW5kcGllXCIpLmRhdGEoaS50cmFjZUlzKHIsXCJwaWVcIikmJnIudmlzaWJsZT9bdF06W10pO2lmKG8uZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoXCJsZWdlbmRwaWVcIiwhMCkuYXR0cihcImRcIixcIk02LDZILTZWLTZINlpcIikuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKDIwLDApXCIpLG8uZXhpdCgpLnJlbW92ZSgpLG8uc2l6ZSgpKXt2YXIgcz0oci5tYXJrZXJ8fHt9KS5saW5lLGw9bSh1KHMud2lkdGgsZS5wdHMpLHMsZyxwKSxoPWEubWluRXh0ZW5kKHIse21hcmtlcjp7bGluZTp7d2lkdGg6bH19fSksZj1hLm1pbkV4dGVuZChlLHt0cmFjZTpofSk7YyhvLGYsaCl9fSkuZWFjaChmdW5jdGlvbih0KXt2YXIgcixpLHM9dFswXSxjPXMudHJhY2UsdT1jLnZpc2libGUmJmMuZmlsbCYmXCJub25lXCIhPT1jLmZpbGwsaD1sLmhhc0xpbmVzKGMpLHA9Yy5jb250b3VycyxnPSExLHY9ITE7aWYocCl7dmFyIHk9cC5jb2xvcmluZztcImxpbmVzXCI9PT15P2c9ITA6aD1cIm5vbmVcIj09PXl8fFwiaGVhdG1hcFwiPT09eXx8cC5zaG93bGluZXMsXCJjb25zdHJhaW50XCI9PT1wLnR5cGU/dT1cIj1cIiE9PXAuX29wZXJhdGlvbjpcImZpbGxcIiE9PXkmJlwiaGVhdG1hcFwiIT09eXx8KHY9ITApfXZhciB4PWwuaGFzTWFya2VycyhjKXx8bC5oYXNUZXh0KGMpLGI9dXx8dixfPWh8fGcsdz14fHwhYj9cIk01LDBcIjpfP1wiTTUsLTJcIjpcIk01LC0zXCIsaz1uLnNlbGVjdCh0aGlzKSxBPWsuc2VsZWN0KFwiLmxlZ2VuZGZpbGxcIikuc2VsZWN0QWxsKFwicGF0aFwiKS5kYXRhKHV8fHY/W3RdOltdKTtpZihBLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5jbGFzc2VkKFwianMtZmlsbFwiLCEwKSxBLmV4aXQoKS5yZW1vdmUoKSxBLmF0dHIoXCJkXCIsdytcImgzMHY2aC0zMHpcIikuY2FsbCh1P28uZmlsbEdyb3VwU3R5bGU6ZnVuY3Rpb24odCl7aWYodC5zaXplKCkpe3ZhciByPVwibGVnZW5kZmlsbC1cIitjLnVpZDtvLmdyYWRpZW50KHQsZSxyLFwiaG9yaXpvbnRhbHJldmVyc2VkXCIsYy5jb2xvcnNjYWxlLFwiZmlsbFwiKX19KSxofHxnKXt2YXIgVD1tKHZvaWQgMCxjLmxpbmUsZCxmKTtpPWEubWluRXh0ZW5kKGMse2xpbmU6e3dpZHRoOlR9fSkscj1bYS5taW5FeHRlbmQocyx7dHJhY2U6aX0pXX12YXIgTT1rLnNlbGVjdChcIi5sZWdlbmRsaW5lc1wiKS5zZWxlY3RBbGwoXCJwYXRoXCIpLmRhdGEoaHx8Zz9bcl06W10pO00uZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoXCJqcy1saW5lXCIsITApLE0uZXhpdCgpLnJlbW92ZSgpLE0uYXR0cihcImRcIix3KyhnP1wibDMwLDAuMDAwMVwiOlwiaDMwXCIpKS5jYWxsKGg/by5saW5lR3JvdXBTdHlsZTpmdW5jdGlvbih0KXtpZih0LnNpemUoKSl7dmFyIHI9XCJsZWdlbmRsaW5lLVwiK2MudWlkO28ubGluZUdyb3VwU3R5bGUodCksby5ncmFkaWVudCh0LGUscixcImhvcml6b250YWxyZXZlcnNlZFwiLGMuY29sb3JzY2FsZSxcInN0cm9rZVwiKX19KX0pLmVhY2goZnVuY3Rpb24odCl7dmFyIHIsaSxzPXRbMF0sYz1zLnRyYWNlLHU9bC5oYXNNYXJrZXJzKGMpLGQ9bC5oYXNUZXh0KGMpLGc9bC5oYXNMaW5lcyhjKTtmdW5jdGlvbiBtKHQsZSxyLG4pe3ZhciBpPWEubmVzdGVkUHJvcGVydHkoYyx0KS5nZXQoKSxvPWEuaXNBcnJheU9yVHlwZWRBcnJheShpKSYmZT9lKGkpOmk7aWYodiYmbyYmdm9pZCAwIT09biYmKG89bikscil7aWYobzxyWzBdKXJldHVybiByWzBdO2lmKG8+clsxXSlyZXR1cm4gclsxXX1yZXR1cm4gb31mdW5jdGlvbiB5KHQpe3JldHVybiB0WzBdfWlmKHV8fGR8fGcpe3ZhciB4PXt9LGI9e307aWYodSl7eC5tYz1tKFwibWFya2VyLmNvbG9yXCIseSkseC5teD1tKFwibWFya2VyLnN5bWJvbFwiLHkpLHgubW89bShcIm1hcmtlci5vcGFjaXR5XCIsYS5tZWFuLFsuMiwxXSkseC5tbGM9bShcIm1hcmtlci5saW5lLmNvbG9yXCIseSkseC5tbHc9bShcIm1hcmtlci5saW5lLndpZHRoXCIsYS5tZWFuLFswLDVdLHApLGIubWFya2VyPXtzaXplcmVmOjEsc2l6ZW1pbjoxLHNpemVtb2RlOlwiZGlhbWV0ZXJcIn07dmFyIF89bShcIm1hcmtlci5zaXplXCIsYS5tZWFuLFsyLDE2XSxoKTt4Lm1zPV8sYi5tYXJrZXIuc2l6ZT1ffWcmJihiLmxpbmU9e3dpZHRoOm0oXCJsaW5lLndpZHRoXCIseSxbMCwxMF0sZil9KSxkJiYoeC50eD1cIkFhXCIseC50cD1tKFwidGV4dHBvc2l0aW9uXCIseSkseC50cz0xMCx4LnRjPW0oXCJ0ZXh0Zm9udC5jb2xvclwiLHkpLHgudGY9bShcInRleHRmb250LmZhbWlseVwiLHkpKSxyPVthLm1pbkV4dGVuZChzLHgpXSwoaT1hLm1pbkV4dGVuZChjLGIpKS5zZWxlY3RlZHBvaW50cz1udWxsfXZhciB3PW4uc2VsZWN0KHRoaXMpLnNlbGVjdChcImcubGVnZW5kcG9pbnRzXCIpLGs9dy5zZWxlY3RBbGwoXCJwYXRoLnNjYXR0ZXJwdHNcIikuZGF0YSh1P3I6W10pO2suZW50ZXIoKS5pbnNlcnQoXCJwYXRoXCIsXCI6Zmlyc3QtY2hpbGRcIikuY2xhc3NlZChcInNjYXR0ZXJwdHNcIiwhMCkuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKDIwLDApXCIpLGsuZXhpdCgpLnJlbW92ZSgpLGsuY2FsbChvLnBvaW50U3R5bGUsaSxlKSx1JiYoclswXS5tcmM9Myk7dmFyIEE9dy5zZWxlY3RBbGwoXCJnLnBvaW50dGV4dFwiKS5kYXRhKGQ/cjpbXSk7QS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcInBvaW50dGV4dFwiLCEwKS5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZSgyMCwwKVwiKSxBLmV4aXQoKS5yZW1vdmUoKSxBLnNlbGVjdEFsbChcInRleHRcIikuY2FsbChvLnRleHRQb2ludFN0eWxlLGksZSl9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoXCJnLmxlZ2VuZHBvaW50c1wiKS5zZWxlY3RBbGwoXCJwYXRoLmxlZ2VuZGNhbmRsZVwiKS5kYXRhKFwiY2FuZGxlc3RpY2tcIj09PWUudHlwZSYmZS52aXNpYmxlP1t0LHRdOltdKTtyLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5jbGFzc2VkKFwibGVnZW5kY2FuZGxlXCIsITApLmF0dHIoXCJkXCIsZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9cIk0tMTUsMEgtOE0tOCw2Vi02SDhaXCI6XCJNMTUsMEg4TTgsLTZWNkgtOFpcIn0pLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZSgyMCwwKVwiKS5zdHlsZShcInN0cm9rZS1taXRlcmxpbWl0XCIsMSksci5leGl0KCkucmVtb3ZlKCksci5lYWNoKGZ1bmN0aW9uKHQscil7dmFyIGk9bi5zZWxlY3QodGhpcyksYT1lW3I/XCJpbmNyZWFzaW5nXCI6XCJkZWNyZWFzaW5nXCJdLG89bSh2b2lkIDAsYS5saW5lLGcscCk7aS5zdHlsZShcInN0cm9rZS13aWR0aFwiLG8rXCJweFwiKS5jYWxsKHMuZmlsbCxhLmZpbGxjb2xvciksbyYmcy5zdHJva2UoaSxhLmxpbmUuY29sb3IpfSl9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoXCJnLmxlZ2VuZHBvaW50c1wiKS5zZWxlY3RBbGwoXCJwYXRoLmxlZ2VuZG9obGNcIikuZGF0YShcIm9obGNcIj09PWUudHlwZSYmZS52aXNpYmxlP1t0LHRdOltdKTtyLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5jbGFzc2VkKFwibGVnZW5kb2hsY1wiLCEwKS5hdHRyKFwiZFwiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/XCJNLTE1LDBIME0tOCwtNlYwXCI6XCJNMTUsMEgwTTgsNlYwXCJ9KS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoMjAsMClcIikuc3R5bGUoXCJzdHJva2UtbWl0ZXJsaW1pdFwiLDEpLHIuZXhpdCgpLnJlbW92ZSgpLHIuZWFjaChmdW5jdGlvbih0LHIpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLGE9ZVtyP1wiaW5jcmVhc2luZ1wiOlwiZGVjcmVhc2luZ1wiXSxsPW0odm9pZCAwLGEubGluZSxnLHApO2kuc3R5bGUoXCJmaWxsXCIsXCJub25lXCIpLmNhbGwoby5kYXNoTGluZSxhLmxpbmUuZGFzaCxsKSxsJiZzLnN0cm9rZShpLGEubGluZS5jb2xvcil9KX0pfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi8uLi90cmFjZXMvcGllL2hlbHBlcnNcIjoxMDMxLFwiLi4vLi4vdHJhY2VzL3BpZS9zdHlsZV9vbmVcIjoxMDM3LFwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi4vY29sb3JcIjo1NzgsXCIuLi9kcmF3aW5nXCI6NTk5LGQzOjE1NX1dLDYzNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxpPXQoXCIuLi8uLi9wbG90cy9wbG90c1wiKSxhPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIiksbz10KFwiLi4vLi4vbGliXCIpLHM9dChcIi4uLy4uLy4uL2J1aWxkL3Bsb3RpY29uXCIpLGw9by5fLGM9ZS5leHBvcnRzPXt9O2Z1bmN0aW9uIHUodCxlKXt2YXIgcixpLG89ZS5jdXJyZW50VGFyZ2V0LHM9by5nZXRBdHRyaWJ1dGUoXCJkYXRhLWF0dHJcIiksbD1vLmdldEF0dHJpYnV0ZShcImRhdGEtdmFsXCIpfHwhMCxjPXQuX2Z1bGxMYXlvdXQsdT17fSxoPWEubGlzdCh0LG51bGwsITApLGY9XCJvblwiO2lmKFwiem9vbVwiPT09cyl7dmFyIHAsZD1cImluXCI9PT1sPy41OjIsZz0oMStkKS8yLHY9KDEtZCkvMjtmb3IoaT0wO2k8aC5sZW5ndGg7aSsrKWlmKCEocj1oW2ldKS5maXhlZHJhbmdlKWlmKHA9ci5fbmFtZSxcImF1dG9cIj09PWwpdVtwK1wiLmF1dG9yYW5nZVwiXT0hMDtlbHNlIGlmKFwicmVzZXRcIj09PWwpe2lmKHZvaWQgMD09PXIuX3JhbmdlSW5pdGlhbCl1W3ArXCIuYXV0b3JhbmdlXCJdPSEwO2Vsc2V7dmFyIG09ci5fcmFuZ2VJbml0aWFsLnNsaWNlKCk7dVtwK1wiLnJhbmdlWzBdXCJdPW1bMF0sdVtwK1wiLnJhbmdlWzFdXCJdPW1bMV19dm9pZCAwIT09ci5fc2hvd1NwaWtlSW5pdGlhbCYmKHVbcCtcIi5zaG93c3Bpa2VzXCJdPXIuX3Nob3dTcGlrZUluaXRpYWwsXCJvblwiIT09Znx8ci5fc2hvd1NwaWtlSW5pdGlhbHx8KGY9XCJvZmZcIikpfWVsc2V7dmFyIHk9W3IucjJsKHIucmFuZ2VbMF0pLHIucjJsKHIucmFuZ2VbMV0pXSx4PVtnKnlbMF0rdip5WzFdLGcqeVsxXSt2KnlbMF1dO3VbcCtcIi5yYW5nZVswXVwiXT1yLmwycih4WzBdKSx1W3ArXCIucmFuZ2VbMV1cIl09ci5sMnIoeFsxXSl9Yy5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD1mfWVsc2V7aWYoXCJob3Zlcm1vZGVcIiE9PXN8fFwieFwiIT09bCYmXCJ5XCIhPT1sKXtpZihcImhvdmVybW9kZVwiPT09cyYmXCJjbG9zZXN0XCI9PT1sKXtmb3IoaT0wO2k8aC5sZW5ndGg7aSsrKXI9aFtpXSxcIm9uXCIhPT1mfHxyLnNob3dzcGlrZXN8fChmPVwib2ZmXCIpO2MuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQ9Zn19ZWxzZSBsPWMuX2lzSG9yaXo/XCJ5XCI6XCJ4XCIsby5zZXRBdHRyaWJ1dGUoXCJkYXRhLXZhbFwiLGwpO3Vbc109bH1uLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix0LHUpfWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHI9ZS5jdXJyZW50VGFyZ2V0LGk9ci5nZXRBdHRyaWJ1dGUoXCJkYXRhLWF0dHJcIiksYT1yLmdldEF0dHJpYnV0ZShcImRhdGEtdmFsXCIpfHwhMCxvPXQuX2Z1bGxMYXlvdXQuX3N1YnBsb3RzLmdsM2Qscz17fSxsPWkuc3BsaXQoXCIuXCIpLGM9MDtjPG8ubGVuZ3RoO2MrKylzW29bY10rXCIuXCIrbFsxXV09YTt2YXIgdT1cInBhblwiPT09YT9hOlwiem9vbVwiO3MuZHJhZ21vZGU9dSxuLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix0LHMpfWZ1bmN0aW9uIGYodCxlKXtmb3IodmFyIHI9ZS5jdXJyZW50VGFyZ2V0LmdldEF0dHJpYnV0ZShcImRhdGEtYXR0clwiKSxpPXQuX2Z1bGxMYXlvdXQsYT1pLl9zdWJwbG90cy5nbDNkLG89e30scz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLGM9bCtcIi5jYW1lcmFcIix1PWlbbF0uX3NjZW5lO1wicmVzZXRMYXN0U2F2ZVwiPT09cj8ob1tjK1wiLnVwXCJdPXUudmlld0luaXRpYWwudXAsb1tjK1wiLmV5ZVwiXT11LnZpZXdJbml0aWFsLmV5ZSxvW2MrXCIuY2VudGVyXCJdPXUudmlld0luaXRpYWwuY2VudGVyKTpcInJlc2V0RGVmYXVsdFwiPT09ciYmKG9bYytcIi51cFwiXT1udWxsLG9bYytcIi5leWVcIl09bnVsbCxvW2MrXCIuY2VudGVyXCJdPW51bGwpfW4uY2FsbChcIl9ndWlSZWxheW91dFwiLHQsbyl9ZnVuY3Rpb24gcCh0LGUpe3ZhciByPWUuY3VycmVudFRhcmdldCxuPXIuX3ByZXZpb3VzVmFsLGk9dC5fZnVsbExheW91dCxhPWkuX3N1YnBsb3RzLmdsM2Qsbz1bXCJ4YXhpc1wiLFwieWF4aXNcIixcInpheGlzXCJdLHM9e30sbD17fTtpZihuKWw9bixyLl9wcmV2aW91c1ZhbD1udWxsO2Vsc2V7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciB1PWFbY10saD1pW3VdLGY9dStcIi5ob3Zlcm1vZGVcIjtzW2ZdPWguaG92ZXJtb2RlLGxbZl09ITE7Zm9yKHZhciBwPTA7cDwzO3ArKyl7dmFyIGQ9b1twXSxnPXUrXCIuXCIrZCtcIi5zaG93c3Bpa2VzXCI7bFtnXT0hMSxzW2ddPWhbZF0uc2hvd3NwaWtlc319ci5fcHJldmlvdXNWYWw9c31yZXR1cm4gbH1mdW5jdGlvbiBkKHQsZSl7Zm9yKHZhciByPWUuY3VycmVudFRhcmdldCxpPXIuZ2V0QXR0cmlidXRlKFwiZGF0YS1hdHRyXCIpLGE9ci5nZXRBdHRyaWJ1dGUoXCJkYXRhLXZhbFwiKXx8ITAsbz10Ll9mdWxsTGF5b3V0LHM9by5fc3VicGxvdHMuZ2VvLGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIGM9c1tsXSx1PW9bY107aWYoXCJ6b29tXCI9PT1pKXt2YXIgaD11LnByb2plY3Rpb24uc2NhbGUsZj1cImluXCI9PT1hPzIqaDouNSpoO24uY2FsbChcIl9ndWlSZWxheW91dFwiLHQsYytcIi5wcm9qZWN0aW9uLnNjYWxlXCIsZil9ZWxzZVwicmVzZXRcIj09PWkmJm0odCxcImdlb1wiKX19ZnVuY3Rpb24gZyh0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O3JldHVybiFlLmhvdmVybW9kZSYmKGUuX2hhcyhcImNhcnRlc2lhblwiKT9lLl9pc0hvcml6P1wieVwiOlwieFwiOlwiY2xvc2VzdFwiKX1mdW5jdGlvbiB2KHQpe3ZhciBlPWcodCk7bi5jYWxsKFwiX2d1aVJlbGF5b3V0XCIsdCxcImhvdmVybW9kZVwiLGUpfWZ1bmN0aW9uIG0odCxlKXtmb3IodmFyIHI9dC5fZnVsbExheW91dCxpPXIuX3N1YnBsb3RzW2VdLGE9e30sbz0wO288aS5sZW5ndGg7bysrKWZvcih2YXIgcz1pW29dLGw9cltzXS5fc3VicGxvdC52aWV3SW5pdGlhbCxjPU9iamVjdC5rZXlzKGwpLHU9MDt1PGMubGVuZ3RoO3UrKyl7dmFyIGg9Y1t1XTthW3MrXCIuXCIraF09bFtoXX1uLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix0LGEpfWMudG9JbWFnZT17bmFtZTpcInRvSW1hZ2VcIix0aXRsZTpmdW5jdGlvbih0KXt2YXIgZT0odC5fY29udGV4dC50b0ltYWdlQnV0dG9uT3B0aW9uc3x8e30pLmZvcm1hdHx8XCJwbmdcIjtyZXR1cm4gbCh0LFwicG5nXCI9PT1lP1wiRG93bmxvYWQgcGxvdCBhcyBhIHBuZ1wiOlwiRG93bmxvYWQgcGxvdFwiKX0saWNvbjpzLmNhbWVyYSxjbGljazpmdW5jdGlvbih0KXt2YXIgZT10Ll9jb250ZXh0LnRvSW1hZ2VCdXR0b25PcHRpb25zLHI9e2Zvcm1hdDplLmZvcm1hdHx8XCJwbmdcIn07by5ub3RpZmllcihsKHQsXCJUYWtpbmcgc25hcHNob3QgLSB0aGlzIG1heSB0YWtlIGEgZmV3IHNlY29uZHNcIiksXCJsb25nXCIpLFwic3ZnXCIhPT1yLmZvcm1hdCYmby5pc0lFKCkmJihvLm5vdGlmaWVyKGwodCxcIklFIG9ubHkgc3VwcG9ydHMgc3ZnLiAgQ2hhbmdpbmcgZm9ybWF0IHRvIHN2Zy5cIiksXCJsb25nXCIpLHIuZm9ybWF0PVwic3ZnXCIpLFtcImZpbGVuYW1lXCIsXCJ3aWR0aFwiLFwiaGVpZ2h0XCIsXCJzY2FsZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QgaW4gZSYmKHJbdF09ZVt0XSl9KSxuLmNhbGwoXCJkb3dubG9hZEltYWdlXCIsdCxyKS50aGVuKGZ1bmN0aW9uKGUpe28ubm90aWZpZXIobCh0LFwiU25hcHNob3Qgc3VjY2VlZGVkXCIpK1wiIC0gXCIrZSxcImxvbmdcIil9KS5jYXRjaChmdW5jdGlvbigpe28ubm90aWZpZXIobCh0LFwiU29ycnksIHRoZXJlIHdhcyBhIHByb2JsZW0gZG93bmxvYWRpbmcgeW91ciBzbmFwc2hvdCFcIiksXCJsb25nXCIpfSl9fSxjLnNlbmREYXRhVG9DbG91ZD17bmFtZTpcInNlbmREYXRhVG9DbG91ZFwiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsXCJFZGl0IGluIENoYXJ0IFN0dWRpb1wiKX0saWNvbjpzLmRpc2ssY2xpY2s6ZnVuY3Rpb24odCl7aS5zZW5kRGF0YVRvQ2xvdWQodCl9fSxjLnpvb20yZD17bmFtZTpcInpvb20yZFwiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsXCJab29tXCIpfSxhdHRyOlwiZHJhZ21vZGVcIix2YWw6XCJ6b29tXCIsaWNvbjpzLnpvb21ib3gsY2xpY2s6dX0sYy5wYW4yZD17bmFtZTpcInBhbjJkXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlBhblwiKX0sYXR0cjpcImRyYWdtb2RlXCIsdmFsOlwicGFuXCIsaWNvbjpzLnBhbixjbGljazp1fSxjLnNlbGVjdDJkPXtuYW1lOlwic2VsZWN0MmRcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiQm94IFNlbGVjdFwiKX0sYXR0cjpcImRyYWdtb2RlXCIsdmFsOlwic2VsZWN0XCIsaWNvbjpzLnNlbGVjdGJveCxjbGljazp1fSxjLmxhc3NvMmQ9e25hbWU6XCJsYXNzbzJkXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIkxhc3NvIFNlbGVjdFwiKX0sYXR0cjpcImRyYWdtb2RlXCIsdmFsOlwibGFzc29cIixpY29uOnMubGFzc28sY2xpY2s6dX0sYy56b29tSW4yZD17bmFtZTpcInpvb21JbjJkXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlpvb20gaW5cIil9LGF0dHI6XCJ6b29tXCIsdmFsOlwiaW5cIixpY29uOnMuem9vbV9wbHVzLGNsaWNrOnV9LGMuem9vbU91dDJkPXtuYW1lOlwiem9vbU91dDJkXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlpvb20gb3V0XCIpfSxhdHRyOlwiem9vbVwiLHZhbDpcIm91dFwiLGljb246cy56b29tX21pbnVzLGNsaWNrOnV9LGMuYXV0b1NjYWxlMmQ9e25hbWU6XCJhdXRvU2NhbGUyZFwiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsXCJBdXRvc2NhbGVcIil9LGF0dHI6XCJ6b29tXCIsdmFsOlwiYXV0b1wiLGljb246cy5hdXRvc2NhbGUsY2xpY2s6dX0sYy5yZXNldFNjYWxlMmQ9e25hbWU6XCJyZXNldFNjYWxlMmRcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiUmVzZXQgYXhlc1wiKX0sYXR0cjpcInpvb21cIix2YWw6XCJyZXNldFwiLGljb246cy5ob21lLGNsaWNrOnV9LGMuaG92ZXJDbG9zZXN0Q2FydGVzaWFuPXtuYW1lOlwiaG92ZXJDbG9zZXN0Q2FydGVzaWFuXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyXCIpfSxhdHRyOlwiaG92ZXJtb2RlXCIsdmFsOlwiY2xvc2VzdFwiLGljb246cy50b29sdGlwX2Jhc2ljLGdyYXZpdHk6XCJuZVwiLGNsaWNrOnV9LGMuaG92ZXJDb21wYXJlQ2FydGVzaWFuPXtuYW1lOlwiaG92ZXJDb21wYXJlQ2FydGVzaWFuXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIkNvbXBhcmUgZGF0YSBvbiBob3ZlclwiKX0sYXR0cjpcImhvdmVybW9kZVwiLHZhbDpmdW5jdGlvbih0KXtyZXR1cm4gdC5fZnVsbExheW91dC5faXNIb3Jpej9cInlcIjpcInhcIn0saWNvbjpzLnRvb2x0aXBfY29tcGFyZSxncmF2aXR5OlwibmVcIixjbGljazp1fSxjLnpvb20zZD17bmFtZTpcInpvb20zZFwiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsXCJab29tXCIpfSxhdHRyOlwic2NlbmUuZHJhZ21vZGVcIix2YWw6XCJ6b29tXCIsaWNvbjpzLnpvb21ib3gsY2xpY2s6aH0sYy5wYW4zZD17bmFtZTpcInBhbjNkXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlBhblwiKX0sYXR0cjpcInNjZW5lLmRyYWdtb2RlXCIsdmFsOlwicGFuXCIsaWNvbjpzLnBhbixjbGljazpofSxjLm9yYml0Um90YXRpb249e25hbWU6XCJvcmJpdFJvdGF0aW9uXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIk9yYml0YWwgcm90YXRpb25cIil9LGF0dHI6XCJzY2VuZS5kcmFnbW9kZVwiLHZhbDpcIm9yYml0XCIsaWNvbjpzW1wiM2Rfcm90YXRlXCJdLGNsaWNrOmh9LGMudGFibGVSb3RhdGlvbj17bmFtZTpcInRhYmxlUm90YXRpb25cIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiVHVybnRhYmxlIHJvdGF0aW9uXCIpfSxhdHRyOlwic2NlbmUuZHJhZ21vZGVcIix2YWw6XCJ0dXJudGFibGVcIixpY29uOnNbXCJ6LWF4aXNcIl0sY2xpY2s6aH0sYy5yZXNldENhbWVyYURlZmF1bHQzZD17bmFtZTpcInJlc2V0Q2FtZXJhRGVmYXVsdDNkXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlJlc2V0IGNhbWVyYSB0byBkZWZhdWx0XCIpfSxhdHRyOlwicmVzZXREZWZhdWx0XCIsaWNvbjpzLmhvbWUsY2xpY2s6Zn0sYy5yZXNldENhbWVyYUxhc3RTYXZlM2Q9e25hbWU6XCJyZXNldENhbWVyYUxhc3RTYXZlM2RcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiUmVzZXQgY2FtZXJhIHRvIGxhc3Qgc2F2ZVwiKX0sYXR0cjpcInJlc2V0TGFzdFNhdmVcIixpY29uOnMubW92aWUsY2xpY2s6Zn0sYy5ob3ZlckNsb3Nlc3QzZD17bmFtZTpcImhvdmVyQ2xvc2VzdDNkXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlclwiKX0sYXR0cjpcImhvdmVybW9kZVwiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOnMudG9vbHRpcF9iYXNpYyxncmF2aXR5OlwibmVcIixjbGljazpmdW5jdGlvbih0LGUpe3ZhciByPXAodCxlKTtuLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix0LHIpfX0sYy56b29tSW5HZW89e25hbWU6XCJ6b29tSW5HZW9cIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiWm9vbSBpblwiKX0sYXR0cjpcInpvb21cIix2YWw6XCJpblwiLGljb246cy56b29tX3BsdXMsY2xpY2s6ZH0sYy56b29tT3V0R2VvPXtuYW1lOlwiem9vbU91dEdlb1wiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsXCJab29tIG91dFwiKX0sYXR0cjpcInpvb21cIix2YWw6XCJvdXRcIixpY29uOnMuem9vbV9taW51cyxjbGljazpkfSxjLnJlc2V0R2VvPXtuYW1lOlwicmVzZXRHZW9cIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiUmVzZXRcIil9LGF0dHI6XCJyZXNldFwiLHZhbDpudWxsLGljb246cy5hdXRvc2NhbGUsY2xpY2s6ZH0sYy5ob3ZlckNsb3Nlc3RHZW89e25hbWU6XCJob3ZlckNsb3Nlc3RHZW9cIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyXCIpfSxhdHRyOlwiaG92ZXJtb2RlXCIsdmFsOm51bGwsdG9nZ2xlOiEwLGljb246cy50b29sdGlwX2Jhc2ljLGdyYXZpdHk6XCJuZVwiLGNsaWNrOnZ9LGMuaG92ZXJDbG9zZXN0R2wyZD17bmFtZTpcImhvdmVyQ2xvc2VzdEdsMmRcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyXCIpfSxhdHRyOlwiaG92ZXJtb2RlXCIsdmFsOm51bGwsdG9nZ2xlOiEwLGljb246cy50b29sdGlwX2Jhc2ljLGdyYXZpdHk6XCJuZVwiLGNsaWNrOnZ9LGMuaG92ZXJDbG9zZXN0UGllPXtuYW1lOlwiaG92ZXJDbG9zZXN0UGllXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlclwiKX0sYXR0cjpcImhvdmVybW9kZVwiLHZhbDpcImNsb3Nlc3RcIixpY29uOnMudG9vbHRpcF9iYXNpYyxncmF2aXR5OlwibmVcIixjbGljazp2fSxjLnJlc2V0Vmlld1NhbmtleT17bmFtZTpcInJlc2V0U2Fua2V5R3JvdXBcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiUmVzZXQgdmlld1wiKX0saWNvbjpzLmhvbWUsY2xpY2s6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXtcIm5vZGUuZ3JvdXBzXCI6W10sXCJub2RlLnhcIjpbXSxcIm5vZGUueVwiOltdfSxyPTA7cjx0Ll9mdWxsRGF0YS5sZW5ndGg7cisrKXt2YXIgaT10Ll9mdWxsRGF0YVtyXS5fdmlld0luaXRpYWw7ZVtcIm5vZGUuZ3JvdXBzXCJdLnB1c2goaS5ub2RlLmdyb3Vwcy5zbGljZSgpKSxlW1wibm9kZS54XCJdLnB1c2goaS5ub2RlLnguc2xpY2UoKSksZVtcIm5vZGUueVwiXS5wdXNoKGkubm9kZS55LnNsaWNlKCkpfW4uY2FsbChcInJlc3R5bGVcIix0LGUpfX0sYy50b2dnbGVIb3Zlcj17bmFtZTpcInRvZ2dsZUhvdmVyXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlclwiKX0sYXR0cjpcImhvdmVybW9kZVwiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOnMudG9vbHRpcF9iYXNpYyxncmF2aXR5OlwibmVcIixjbGljazpmdW5jdGlvbih0LGUpe3ZhciByPXAodCxlKTtyLmhvdmVybW9kZT1nKHQpLG4uY2FsbChcIl9ndWlSZWxheW91dFwiLHQscil9fSxjLnJlc2V0Vmlld3M9e25hbWU6XCJyZXNldFZpZXdzXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlJlc2V0IHZpZXdzXCIpfSxpY29uOnMuaG9tZSxjbGljazpmdW5jdGlvbih0LGUpe3ZhciByPWUuY3VycmVudFRhcmdldDtyLnNldEF0dHJpYnV0ZShcImRhdGEtYXR0clwiLFwiem9vbVwiKSxyLnNldEF0dHJpYnV0ZShcImRhdGEtdmFsXCIsXCJyZXNldFwiKSx1KHQsZSksci5zZXRBdHRyaWJ1dGUoXCJkYXRhLWF0dHJcIixcInJlc2V0TGFzdFNhdmVcIiksZih0LGUpLG0odCxcImdlb1wiKSxtKHQsXCJtYXBib3hcIil9fSxjLnRvZ2dsZVNwaWtlbGluZXM9e25hbWU6XCJ0b2dnbGVTcGlrZWxpbmVzXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlRvZ2dsZSBTcGlrZSBMaW5lc1wiKX0saWNvbjpzLnNwaWtlbGluZSxhdHRyOlwiX2NhcnRlc2lhblNwaWtlc0VuYWJsZWRcIix2YWw6XCJvblwiLGNsaWNrOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7ZS5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD1cIm9uXCI9PT1lLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkP1wib2ZmXCI6XCJvblwiO3ZhciByPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG49dC5fZnVsbExheW91dCxpPWEubGlzdCh0LG51bGwsITApLG89e30scz0wO3M8aS5sZW5ndGg7cysrKWU9aVtzXSxyPWUuX25hbWUsb1tyK1wiLnNob3dzcGlrZXNcIl09XCJvblwiPT09bi5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZHx8ZS5fc2hvd1NwaWtlSW5pdGlhbDtyZXR1cm4gb30odCk7bi5jYWxsKFwiX2d1aVJlbGF5b3V0XCIsdCxyKX19LGMucmVzZXRWaWV3TWFwYm94PXtuYW1lOlwicmVzZXRWaWV3TWFwYm94XCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlJlc2V0IHZpZXdcIil9LGF0dHI6XCJyZXNldFwiLGljb246cy5ob21lLGNsaWNrOmZ1bmN0aW9uKHQpe20odCxcIm1hcGJveFwiKX19fSx7XCIuLi8uLi8uLi9idWlsZC9wbG90aWNvblwiOjIsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIjo3NTIsXCIuLi8uLi9wbG90cy9wbG90c1wiOjgxMCxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5fV0sNjM3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ci5tYW5hZ2U9dChcIi4vbWFuYWdlXCIpfSx7XCIuL21hbmFnZVwiOjYzOH1dLDYzODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIiksaT10KFwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXNcIiksYT10KFwiLi4vLi4vcmVnaXN0cnlcIiksbz10KFwiLi9tb2RlYmFyXCIpLHM9dChcIi4vYnV0dG9uc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXQuX2NvbnRleHQsbD1lLl9tb2RlQmFyO2lmKHIuZGlzcGxheU1vZGVCYXJ8fHIud2F0ZXJtYXJrKXtpZighQXJyYXkuaXNBcnJheShyLm1vZGVCYXJCdXR0b25zVG9SZW1vdmUpKXRocm93IG5ldyBFcnJvcihbXCIqbW9kZUJhckJ1dHRvbnNUb1JlbW92ZSogY29uZmlndXJhdGlvbiBvcHRpb25zXCIsXCJtdXN0IGJlIGFuIGFycmF5LlwiXS5qb2luKFwiIFwiKSk7aWYoIUFycmF5LmlzQXJyYXkoci5tb2RlQmFyQnV0dG9uc1RvQWRkKSl0aHJvdyBuZXcgRXJyb3IoW1wiKm1vZGVCYXJCdXR0b25zVG9BZGQqIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1wiLFwibXVzdCBiZSBhbiBhcnJheS5cIl0uam9pbihcIiBcIikpO3ZhciBjLHU9ci5tb2RlQmFyQnV0dG9ucztjPUFycmF5LmlzQXJyYXkodSkmJnUubGVuZ3RoP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWZvcih2YXIgcj10W2VdLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpZihcInN0cmluZ1wiPT10eXBlb2YgaSl7aWYodm9pZCAwPT09c1tpXSl0aHJvdyBuZXcgRXJyb3IoW1wiKm1vZGVCYXJCdXR0b25zKiBjb25maWd1cmF0aW9uIG9wdGlvbnNcIixcImludmFsaWQgYnV0dG9uIG5hbWVcIl0uam9pbihcIiBcIikpO3RbZV1bbl09c1tpXX19cmV0dXJuIHR9KHUpOiFyLmRpc3BsYXlNb2RlQmFyJiZyLndhdGVybWFyaz9bXTpmdW5jdGlvbih0LGUscixvKXt2YXIgbD10Ll9mdWxsTGF5b3V0LGM9dC5fZnVsbERhdGEsdT1sLl9oYXMoXCJjYXJ0ZXNpYW5cIiksaD1sLl9oYXMoXCJnbDNkXCIpLGY9bC5faGFzKFwiZ2VvXCIpLHA9bC5faGFzKFwicGllXCIpLGQ9bC5faGFzKFwiZ2wyZFwiKSxnPWwuX2hhcyhcInRlcm5hcnlcIiksdj1sLl9oYXMoXCJtYXBib3hcIiksbT1sLl9oYXMoXCJwb2xhclwiKSx5PWwuX2hhcyhcInNhbmtleVwiKSx4PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uLmxpc3Qoe19mdWxsTGF5b3V0OnR9LG51bGwsITApLHI9MDtyPGUubGVuZ3RoO3IrKylpZighZVtyXS5maXhlZHJhbmdlKXJldHVybiExO3JldHVybiEwfShsKSxiPVtdO2Z1bmN0aW9uIF8odCl7aWYodC5sZW5ndGgpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl07LTE9PT1lLmluZGV4T2YoaSkmJnIucHVzaChzW2ldKX1iLnB1c2gocil9fXZhciB3PVtcInRvSW1hZ2VcIl07byYmdy5wdXNoKFwic2VuZERhdGFUb0Nsb3VkXCIpO18odyk7dmFyIGs9W10sQT1bXSxUPVtdLE09W107KHV8fGR8fHB8fGcpK2YraCt2K20+MT8oQT1bXCJ0b2dnbGVIb3ZlclwiXSxUPVtcInJlc2V0Vmlld3NcIl0pOmY/KGs9W1wiem9vbUluR2VvXCIsXCJ6b29tT3V0R2VvXCJdLEE9W1wiaG92ZXJDbG9zZXN0R2VvXCJdLFQ9W1wicmVzZXRHZW9cIl0pOmg/KEE9W1wiaG92ZXJDbG9zZXN0M2RcIl0sVD1bXCJyZXNldENhbWVyYURlZmF1bHQzZFwiLFwicmVzZXRDYW1lcmFMYXN0U2F2ZTNkXCJdKTp2PyhBPVtcInRvZ2dsZUhvdmVyXCJdLFQ9W1wicmVzZXRWaWV3TWFwYm94XCJdKTpkP0E9W1wiaG92ZXJDbG9zZXN0R2wyZFwiXTpwP0E9W1wiaG92ZXJDbG9zZXN0UGllXCJdOnk/KEE9W1wiaG92ZXJDbG9zZXN0Q2FydGVzaWFuXCIsXCJob3ZlckNvbXBhcmVDYXJ0ZXNpYW5cIl0sVD1bXCJyZXNldFZpZXdTYW5rZXlcIl0pOkE9W1widG9nZ2xlSG92ZXJcIl07dSYmKEE9W1widG9nZ2xlU3Bpa2VsaW5lc1wiLFwiaG92ZXJDbG9zZXN0Q2FydGVzaWFuXCIsXCJob3ZlckNvbXBhcmVDYXJ0ZXNpYW5cIl0pOyF1JiYhZHx8eHx8KGs9W1wiem9vbUluMmRcIixcInpvb21PdXQyZFwiLFwiYXV0b1NjYWxlMmRcIl0sXCJyZXNldFZpZXdzXCIhPT1UWzBdJiYoVD1bXCJyZXNldFNjYWxlMmRcIl0pKTtoP009W1wiem9vbTNkXCIsXCJwYW4zZFwiLFwib3JiaXRSb3RhdGlvblwiLFwidGFibGVSb3RhdGlvblwiXToodXx8ZCkmJiF4fHxnP009W1wiem9vbTJkXCIsXCJwYW4yZFwiXTp2fHxmP009W1wicGFuMmRcIl06bSYmKE09W1wiem9vbTJkXCJdKTsoZnVuY3Rpb24odCl7Zm9yKHZhciBlPSExLHI9MDtyPHQubGVuZ3RoJiYhZTtyKyspe3ZhciBuPXRbcl07bi5fbW9kdWxlJiZuLl9tb2R1bGUuc2VsZWN0UG9pbnRzJiYoYS50cmFjZUlzKG4sXCJzY2F0dGVyLWxpa2VcIik/KGkuaGFzTWFya2VycyhuKXx8aS5oYXNUZXh0KG4pKSYmKGU9ITApOmEudHJhY2VJcyhuLFwiYm94LXZpb2xpblwiKSYmXCJhbGxcIiE9PW4uYm94cG9pbnRzJiZcImFsbFwiIT09bi5wb2ludHN8fChlPSEwKSl9cmV0dXJuIGV9KShjKSYmTS5wdXNoKFwic2VsZWN0MmRcIixcImxhc3NvMmRcIik7cmV0dXJuIF8oTSksXyhrLmNvbmNhdChUKSksXyhBKSxmdW5jdGlvbih0LGUpe2lmKGUubGVuZ3RoKWlmKEFycmF5LmlzQXJyYXkoZVswXSkpZm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdC5wdXNoKGVbcl0pO2Vsc2UgdC5wdXNoKGUpO3JldHVybiB0fShiLHIpfSh0LHIubW9kZUJhckJ1dHRvbnNUb1JlbW92ZSxyLm1vZGVCYXJCdXR0b25zVG9BZGQsci5zaG93U2VuZFRvQ2xvdWQpLGw/bC51cGRhdGUodCxjKTplLl9tb2RlQmFyPW8odCxjKX1lbHNlIGwmJihsLmRlc3Ryb3koKSxkZWxldGUgZS5fbW9kZUJhcil9fSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIjo3NTIsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzXCI6MTA3NixcIi4vYnV0dG9uc1wiOjYzNixcIi4vbW9kZWJhclwiOjYzOX1dLDYzOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxhPXQoXCIuLi8uLi9saWJcIiksbz10KFwiLi4vLi4vLi4vYnVpbGQvcGxvdGljb25cIikscz1uZXcgRE9NUGFyc2VyO2Z1bmN0aW9uIGwodCl7dGhpcy5jb250YWluZXI9dC5jb250YWluZXIsdGhpcy5lbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksdGhpcy51cGRhdGUodC5ncmFwaEluZm8sdC5idXR0b25zKSx0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpfXZhciBjPWwucHJvdG90eXBlO2MudXBkYXRlPWZ1bmN0aW9uKHQsZSl7dGhpcy5ncmFwaEluZm89dDt2YXIgcj10aGlzLmdyYXBoSW5mby5fY29udGV4dCxuPXRoaXMuZ3JhcGhJbmZvLl9mdWxsTGF5b3V0LGk9XCJtb2RlYmFyLVwiK24uX3VpZDt0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKFwiaWRcIixpKSx0aGlzLl91aWQ9aSx0aGlzLmVsZW1lbnQuY2xhc3NOYW1lPVwibW9kZWJhclwiLFwiaG92ZXJcIj09PXIuZGlzcGxheU1vZGVCYXImJih0aGlzLmVsZW1lbnQuY2xhc3NOYW1lKz1cIiBtb2RlYmFyLS1ob3ZlciBlYXNlLWJnXCIpLFwidlwiPT09bi5tb2RlYmFyLm9yaWVudGF0aW9uJiYodGhpcy5lbGVtZW50LmNsYXNzTmFtZSs9XCIgdmVydGljYWxcIixlPWUucmV2ZXJzZSgpKTt2YXIgbz1uLm1vZGViYXIscz1cImhvdmVyXCI9PT1yLmRpc3BsYXlNb2RlQmFyP1wiLmpzLXBsb3RseS1wbG90IC5wbG90bHk6aG92ZXIgXCI6XCJcIjthLmRlbGV0ZVJlbGF0ZWRTdHlsZVJ1bGUoaSksYS5hZGRSZWxhdGVkU3R5bGVSdWxlKGkscytcIiNcIitpK1wiIC5tb2RlYmFyLWdyb3VwXCIsXCJiYWNrZ3JvdW5kLWNvbG9yOiBcIitvLmJnY29sb3IpLGEuYWRkUmVsYXRlZFN0eWxlUnVsZShpLFwiI1wiK2krXCIgLm1vZGViYXItYnRuIC5pY29uIHBhdGhcIixcImZpbGw6IFwiK28uY29sb3IpLGEuYWRkUmVsYXRlZFN0eWxlUnVsZShpLFwiI1wiK2krXCIgLm1vZGViYXItYnRuOmhvdmVyIC5pY29uIHBhdGhcIixcImZpbGw6IFwiK28uYWN0aXZlY29sb3IpLGEuYWRkUmVsYXRlZFN0eWxlUnVsZShpLFwiI1wiK2krXCIgLm1vZGViYXItYnRuLmFjdGl2ZSAuaWNvbiBwYXRoXCIsXCJmaWxsOiBcIitvLmFjdGl2ZWNvbG9yKTt2YXIgbD0hdGhpcy5oYXNCdXR0b25zKGUpLGM9dGhpcy5oYXNMb2dvIT09ci5kaXNwbGF5bG9nbyx1PXRoaXMubG9jYWxlIT09ci5sb2NhbGU7aWYodGhpcy5sb2NhbGU9ci5sb2NhbGUsKGx8fGN8fHUpJiYodGhpcy5yZW1vdmVBbGxCdXR0b25zKCksdGhpcy51cGRhdGVCdXR0b25zKGUpLHIud2F0ZXJtYXJrfHxyLmRpc3BsYXlsb2dvKSl7dmFyIGg9dGhpcy5nZXRMb2dvKCk7ci53YXRlcm1hcmsmJihoLmNsYXNzTmFtZT1oLmNsYXNzTmFtZStcIiB3YXRlcm1hcmtcIiksXCJ2XCI9PT1uLm1vZGViYXIub3JpZW50YXRpb24/dGhpcy5lbGVtZW50Lmluc2VydEJlZm9yZShoLHRoaXMuZWxlbWVudC5jaGlsZE5vZGVzWzBdKTp0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoaCksdGhpcy5oYXNMb2dvPSEwfXRoaXMudXBkYXRlQWN0aXZlQnV0dG9uKCl9LGMudXBkYXRlQnV0dG9ucz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuYnV0dG9ucz10LHRoaXMuYnV0dG9uRWxlbWVudHM9W10sdGhpcy5idXR0b25zTmFtZXM9W10sdGhpcy5idXR0b25zLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHI9ZS5jcmVhdGVHcm91cCgpO3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj10Lm5hbWU7aWYoIW4pdGhyb3cgbmV3IEVycm9yKFwibXVzdCBwcm92aWRlIGJ1dHRvbiAnbmFtZScgaW4gYnV0dG9uIGNvbmZpZ1wiKTtpZigtMSE9PWUuYnV0dG9uc05hbWVzLmluZGV4T2YobikpdGhyb3cgbmV3IEVycm9yKFwiYnV0dG9uIG5hbWUgJ1wiK24rXCInIGlzIHRha2VuXCIpO2UuYnV0dG9uc05hbWVzLnB1c2gobik7dmFyIGk9ZS5jcmVhdGVCdXR0b24odCk7ZS5idXR0b25FbGVtZW50cy5wdXNoKGkpLHIuYXBwZW5kQ2hpbGQoaSl9KSxlLmVsZW1lbnQuYXBwZW5kQ2hpbGQocil9KX0sYy5jcmVhdGVHcm91cD1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7cmV0dXJuIHQuY2xhc3NOYW1lPVwibW9kZWJhci1ncm91cFwiLHR9LGMuY3JlYXRlQnV0dG9uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtyLnNldEF0dHJpYnV0ZShcInJlbFwiLFwidG9vbHRpcFwiKSxyLmNsYXNzTmFtZT1cIm1vZGViYXItYnRuXCI7dmFyIGk9dC50aXRsZTt2b2lkIDA9PT1pP2k9dC5uYW1lOlwiZnVuY3Rpb25cIj09dHlwZW9mIGkmJihpPWkodGhpcy5ncmFwaEluZm8pKSwoaXx8MD09PWkpJiZyLnNldEF0dHJpYnV0ZShcImRhdGEtdGl0bGVcIixpKSx2b2lkIDAhPT10LmF0dHImJnIuc2V0QXR0cmlidXRlKFwiZGF0YS1hdHRyXCIsdC5hdHRyKTt2YXIgYT10LnZhbDtpZih2b2lkIDAhPT1hJiYoXCJmdW5jdGlvblwiPT10eXBlb2YgYSYmKGE9YSh0aGlzLmdyYXBoSW5mbykpLHIuc2V0QXR0cmlidXRlKFwiZGF0YS12YWxcIixhKSksXCJmdW5jdGlvblwiIT10eXBlb2YgdC5jbGljayl0aHJvdyBuZXcgRXJyb3IoXCJtdXN0IHByb3ZpZGUgYnV0dG9uICdjbGljaycgZnVuY3Rpb24gaW4gYnV0dG9uIGNvbmZpZ1wiKTtyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLGZ1bmN0aW9uKHIpe3QuY2xpY2soZS5ncmFwaEluZm8sciksZS51cGRhdGVBY3RpdmVCdXR0b24oci5jdXJyZW50VGFyZ2V0KX0pLHIuc2V0QXR0cmlidXRlKFwiZGF0YS10b2dnbGVcIix0LnRvZ2dsZXx8ITEpLHQudG9nZ2xlJiZuLnNlbGVjdChyKS5jbGFzc2VkKFwiYWN0aXZlXCIsITApO3ZhciBzPXQuaWNvbjtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBzP3IuYXBwZW5kQ2hpbGQocygpKTpyLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlSWNvbihzfHxvLnF1ZXN0aW9uKSksci5zZXRBdHRyaWJ1dGUoXCJkYXRhLWdyYXZpdHlcIix0LmdyYXZpdHl8fFwiblwiKSxyfSxjLmNyZWF0ZUljb249ZnVuY3Rpb24odCl7dmFyIGUscj1pKHQuaGVpZ2h0KT9OdW1iZXIodC5oZWlnaHQpOnQuYXNjZW50LXQuZGVzY2VudCxuPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtpZih0LnBhdGgpeyhlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuLFwic3ZnXCIpKS5zZXRBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIsWzAsMCx0LndpZHRoLHJdLmpvaW4oXCIgXCIpKSxlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsXCJpY29uXCIpO3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuLFwicGF0aFwiKTthLnNldEF0dHJpYnV0ZShcImRcIix0LnBhdGgpLHQudHJhbnNmb3JtP2Euc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsdC50cmFuc2Zvcm0pOnZvaWQgMCE9PXQuYXNjZW50JiZhLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLFwibWF0cml4KDEgMCAwIC0xIDAgXCIrdC5hc2NlbnQrXCIpXCIpLGUuYXBwZW5kQ2hpbGQoYSl9dC5zdmcmJihlPXMucGFyc2VGcm9tU3RyaW5nKHQuc3ZnLFwiYXBwbGljYXRpb24veG1sXCIpLmNoaWxkTm9kZXNbMF0pO3JldHVybiBlLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLFwiMWVtXCIpLGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIixcIjFlbVwiKSxlfSxjLnVwZGF0ZUFjdGl2ZUJ1dHRvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdyYXBoSW5mby5fZnVsbExheW91dCxyPXZvaWQgMCE9PXQ/dC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWF0dHJcIik6bnVsbDt0aGlzLmJ1dHRvbkVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGk9dC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXZhbFwiKXx8ITAsbz10LmdldEF0dHJpYnV0ZShcImRhdGEtYXR0clwiKSxzPVwidHJ1ZVwiPT09dC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXRvZ2dsZVwiKSxsPW4uc2VsZWN0KHQpO2lmKHMpbz09PXImJmwuY2xhc3NlZChcImFjdGl2ZVwiLCFsLmNsYXNzZWQoXCJhY3RpdmVcIikpO2Vsc2V7dmFyIGM9bnVsbD09PW8/bzphLm5lc3RlZFByb3BlcnR5KGUsbykuZ2V0KCk7bC5jbGFzc2VkKFwiYWN0aXZlXCIsYz09PWkpfX0pfSxjLmhhc0J1dHRvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5idXR0b25zO2lmKCFlKXJldHVybiExO2lmKHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3Ipe2lmKHRbcl0ubGVuZ3RoIT09ZVtyXS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0W3JdLmxlbmd0aDtuKyspaWYodFtyXVtuXS5uYW1lIT09ZVtyXVtuXS5uYW1lKXJldHVybiExfXJldHVybiEwfSxjLmdldExvZ289ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNyZWF0ZUdyb3VwKCksZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtyZXR1cm4gZS5ocmVmPVwiaHR0cHM6Ly9wbG90Lmx5L1wiLGUudGFyZ2V0PVwiX2JsYW5rXCIsZS5zZXRBdHRyaWJ1dGUoXCJkYXRhLXRpdGxlXCIsYS5fKHRoaXMuZ3JhcGhJbmZvLFwiUHJvZHVjZWQgd2l0aCBQbG90bHlcIikpLGUuY2xhc3NOYW1lPVwibW9kZWJhci1idG4gcGxvdGx5anNpY29uIG1vZGViYXItYnRuLS1sb2dvXCIsZS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUljb24oby5uZXdwbG90bHlsb2dvKSksdC5hcHBlbmRDaGlsZChlKSx0fSxjLnJlbW92ZUFsbEJ1dHRvbnM9ZnVuY3Rpb24oKXtmb3IoO3RoaXMuZWxlbWVudC5maXJzdENoaWxkOyl0aGlzLmVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50LmZpcnN0Q2hpbGQpO3RoaXMuaGFzTG9nbz0hMX0sYy5kZXN0cm95PWZ1bmN0aW9uKCl7YS5yZW1vdmVFbGVtZW50KHRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIubW9kZWJhclwiKSksYS5kZWxldGVSZWxhdGVkU3R5bGVSdWxlKHRoaXMuX3VpZCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsaT1uZXcgbCh7Z3JhcGhJbmZvOnQsY29udGFpbmVyOnIuX21vZGViYXJkaXYubm9kZSgpLGJ1dHRvbnM6ZX0pO3JldHVybiByLl9wcml2YXRlcGxvdCYmbi5zZWxlY3QoaS5lbGVtZW50KS5hcHBlbmQoXCJzcGFuXCIpLmNsYXNzZWQoXCJiYWRnZS1wcml2YXRlIGZsb2F0LS1sZWZ0XCIsITApLnRleHQoXCJQUklWQVRFXCIpLGl9fSx7XCIuLi8uLi8uLi9idWlsZC9wbG90aWNvblwiOjIsXCIuLi8uLi9saWJcIjo3MDEsZDM6MTU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw2NDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uL2NvbG9yL2F0dHJpYnV0ZXNcIiksYT0oMCx0KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKS50ZW1wbGF0ZWRBcnJheSkoXCJidXR0b25cIix7dmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwicGxvdFwifSxzdGVwOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJtb250aFwiLFwieWVhclwiLFwiZGF5XCIsXCJob3VyXCIsXCJtaW51dGVcIixcInNlY29uZFwiLFwiYWxsXCJdLGRmbHQ6XCJtb250aFwiLGVkaXRUeXBlOlwicGxvdFwifSxzdGVwbW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYmFja3dhcmRcIixcInRvZGF0ZVwiXSxkZmx0OlwiYmFja3dhcmRcIixlZGl0VHlwZTpcInBsb3RcIn0sY291bnQ6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6XCJwbG90XCJ9LGxhYmVsOnt2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJwbG90XCJ9LGVkaXRUeXBlOlwicGxvdFwifSk7ZS5leHBvcnRzPXt2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGVkaXRUeXBlOlwicGxvdFwifSxidXR0b25zOmEseDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjotMixtYXg6MyxlZGl0VHlwZTpcInBsb3RcIn0seGFuY2hvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYXV0b1wiLFwibGVmdFwiLFwiY2VudGVyXCIsXCJyaWdodFwiXSxkZmx0OlwibGVmdFwiLGVkaXRUeXBlOlwicGxvdFwifSx5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOi0yLG1heDozLGVkaXRUeXBlOlwicGxvdFwifSx5YW5jaG9yOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhdXRvXCIsXCJ0b3BcIixcIm1pZGRsZVwiLFwiYm90dG9tXCJdLGRmbHQ6XCJib3R0b21cIixlZGl0VHlwZTpcInBsb3RcIn0sZm9udDpuKHtlZGl0VHlwZTpcInBsb3RcIn0pLGJnY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6aS5saWdodExpbmUsZWRpdFR5cGU6XCJwbG90XCJ9LGFjdGl2ZWNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcInBsb3RcIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZTpcInBsb3RcIn0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6XCJwbG90XCJ9LGVkaXRUeXBlOlwicGxvdFwifX0se1wiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiOjc3NSxcIi4uL2NvbG9yL2F0dHJpYnV0ZXNcIjo1Nzd9XSw2NDE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e3lQYWQ6LjAyLG1pbkJ1dHRvbldpZHRoOjMwLHJ4OjMscnk6MyxsaWdodEFtb3VudDoyNSxkYXJrQW1vdW50OjEwfX0se31dLDY0MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vY29sb3JcIiksYT10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKSxvPXQoXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIikscz10KFwiLi9hdHRyaWJ1dGVzXCIpLGw9dChcIi4vY29uc3RhbnRzXCIpO2Z1bmN0aW9uIGModCxlLHIsaSl7dmFyIGE9aS5jYWxlbmRhcjtmdW5jdGlvbiBvKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLmJ1dHRvbnMscixpKX1pZihvKFwidmlzaWJsZVwiKSl7dmFyIGw9byhcInN0ZXBcIik7XCJhbGxcIiE9PWwmJighYXx8XCJncmVnb3JpYW5cIj09PWF8fFwibW9udGhcIiE9PWwmJlwieWVhclwiIT09bD9vKFwic3RlcG1vZGVcIik6ZS5zdGVwbW9kZT1cImJhY2t3YXJkXCIsbyhcImNvdW50XCIpKSxvKFwibGFiZWxcIil9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1LGgpe3ZhciBmPXQucmFuZ2VzZWxlY3Rvcnx8e30scD1hLm5ld0NvbnRhaW5lcihlLFwicmFuZ2VzZWxlY3RvclwiKTtmdW5jdGlvbiBkKHQsZSl7cmV0dXJuIG4uY29lcmNlKGYscCxzLHQsZSl9aWYoZChcInZpc2libGVcIixvKGYscCx7bmFtZTpcImJ1dHRvbnNcIixoYW5kbGVJdGVtRGVmYXVsdHM6YyxjYWxlbmRhcjpofSkubGVuZ3RoPjApKXt2YXIgZz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXIuZmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdLmFuY2hvcj09PXQuX2lkfSksaT0wLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89ZVtuW2FdXS5kb21haW47byYmKGk9TWF0aC5tYXgob1sxXSxpKSl9cmV0dXJuW3QuZG9tYWluWzBdLGkrbC55UGFkXX0oZSxyLHUpO2QoXCJ4XCIsZ1swXSksZChcInlcIixnWzFdKSxuLm5vbmVPckFsbCh0LGUsW1wieFwiLFwieVwiXSksZChcInhhbmNob3JcIiksZChcInlhbmNob3JcIiksbi5jb2VyY2VGb250KGQsXCJmb250XCIsci5mb250KTt2YXIgdj1kKFwiYmdjb2xvclwiKTtkKFwiYWN0aXZlY29sb3JcIixpLmNvbnRyYXN0KHYsbC5saWdodEFtb3VudCxsLmRhcmtBbW91bnQpKSxkKFwiYm9yZGVyY29sb3JcIiksZChcImJvcmRlcndpZHRoXCIpfX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIjo3NDUsXCIuLi9jb2xvclwiOjU3OCxcIi4vYXR0cmlidXRlc1wiOjY0MCxcIi4vY29uc3RhbnRzXCI6NjQxfV0sNjQzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGE9dChcIi4uLy4uL3Bsb3RzL3Bsb3RzXCIpLG89dChcIi4uL2NvbG9yXCIpLHM9dChcIi4uL2RyYXdpbmdcIiksbD10KFwiLi4vLi4vbGliXCIpLGM9dChcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiKSx1PXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIiksaD10KFwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiKSxmPWguTElORV9TUEFDSU5HLHA9aC5GUk9NX1RMLGQ9aC5GUk9NX0JSLGc9dChcIi4vY29uc3RhbnRzXCIpLHY9dChcIi4vZ2V0X3VwZGF0ZV9vYmplY3RcIik7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdC5faWR9ZnVuY3Rpb24geSh0LGUscil7dmFyIG49bC5lbnN1cmVTaW5nbGUodCxcInJlY3RcIixcInNlbGVjdG9yLXJlY3RcIixmdW5jdGlvbih0KXt0LmF0dHIoXCJzaGFwZS1yZW5kZXJpbmdcIixcImNyaXNwRWRnZXNcIil9KTtuLmF0dHIoe3J4Omcucngscnk6Zy5yeX0pLG4uY2FsbChvLnN0cm9rZSxlLmJvcmRlcmNvbG9yKS5jYWxsKG8uZmlsbCxmdW5jdGlvbih0LGUpe3JldHVybiBlLl9pc0FjdGl2ZXx8ZS5faXNIb3ZlcmVkP3QuYWN0aXZlY29sb3I6dC5iZ2NvbG9yfShlLHIpKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLGUuYm9yZGVyd2lkdGgrXCJweFwiKX1mdW5jdGlvbiB4KHQsZSxyLG4pe2wuZW5zdXJlU2luZ2xlKHQsXCJ0ZXh0XCIsXCJzZWxlY3Rvci10ZXh0XCIsZnVuY3Rpb24odCl7dC5jbGFzc2VkKFwidXNlci1zZWxlY3Qtbm9uZVwiLCEwKS5hdHRyKFwidGV4dC1hbmNob3JcIixcIm1pZGRsZVwiKX0pLmNhbGwocy5mb250LGUuZm9udCkudGV4dChmdW5jdGlvbih0LGUpe2lmKHQubGFiZWwpcmV0dXJuIGU/bC50ZW1wbGF0ZVN0cmluZyh0LmxhYmVsLHttZXRhOmV9KTp0LmxhYmVsO3JldHVyblwiYWxsXCI9PT10LnN0ZXA/XCJhbGxcIjp0LmNvdW50K3Quc3RlcC5jaGFyQXQoMCl9KHIsbi5fZnVsbExheW91dC5tZXRhKSkuY2FsbChmdW5jdGlvbih0KXtjLmNvbnZlcnRUb1RzcGFucyh0LG4pfSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3RBbGwoXCIucmFuZ2VzZWxlY3RvclwiKS5kYXRhKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT11Lmxpc3QodCxcInhcIiwhMCkscj1bXSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl07aS5yYW5nZXNlbGVjdG9yJiZpLnJhbmdlc2VsZWN0b3IudmlzaWJsZSYmci5wdXNoKGkpfXJldHVybiByfSh0KSxtKTtlLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwicmFuZ2VzZWxlY3RvclwiLCEwKSxlLmV4aXQoKS5yZW1vdmUoKSxlLnN0eWxlKHtjdXJzb3I6XCJwb2ludGVyXCIsXCJwb2ludGVyLWV2ZW50c1wiOlwiYWxsXCJ9KSxlLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksbz1lLHU9by5yYW5nZXNlbGVjdG9yLGg9ci5zZWxlY3RBbGwoXCJnLmJ1dHRvblwiKS5kYXRhKGwuZmlsdGVyVmlzaWJsZSh1LmJ1dHRvbnMpKTtoLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiYnV0dG9uXCIsITApLGguZXhpdCgpLnJlbW92ZSgpLGguZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxhPXYobyxlKTtlLl9pc0FjdGl2ZT1mdW5jdGlvbih0LGUscil7aWYoXCJhbGxcIj09PWUuc3RlcClyZXR1cm4hMD09PXQuYXV0b3JhbmdlO3ZhciBuPU9iamVjdC5rZXlzKHIpO3JldHVybiB0LnJhbmdlWzBdPT09cltuWzBdXSYmdC5yYW5nZVsxXT09PXJbblsxXV19KG8sZSxhKSxyLmNhbGwoeSx1LGUpLHIuY2FsbCh4LHUsZSx0KSxyLm9uKFwiY2xpY2tcIixmdW5jdGlvbigpe3QuX2RyYWdnZWR8fGkuY2FsbChcIl9ndWlSZWxheW91dFwiLHQsYSl9KSxyLm9uKFwibW91c2VvdmVyXCIsZnVuY3Rpb24oKXtlLl9pc0hvdmVyZWQ9ITAsci5jYWxsKHksdSxlKX0pLHIub24oXCJtb3VzZW91dFwiLGZ1bmN0aW9uKCl7ZS5faXNIb3ZlcmVkPSExLHIuY2FsbCh5LHUsZSl9KX0pLGZ1bmN0aW9uKHQsZSxyLGksbyl7dmFyIHU9MCxoPTAsdj1yLmJvcmRlcndpZHRoO2UuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9dC5zZWxlY3QoXCIuc2VsZWN0b3ItdGV4dFwiKSxpPXIuZm9udC5zaXplKmYsYT1NYXRoLm1heChpKmMubGluZUNvdW50KGUpLDE2KSszO2g9TWF0aC5tYXgoaCxhKX0pLGUuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9dC5zZWxlY3QoXCIuc2VsZWN0b3ItcmVjdFwiKSxpPXQuc2VsZWN0KFwiLnNlbGVjdG9yLXRleHRcIiksYT1pLm5vZGUoKSYmcy5iQm94KGkubm9kZSgpKS53aWR0aCxvPXIuZm9udC5zaXplKmYsbD1jLmxpbmVDb3VudChpKSxwPU1hdGgubWF4KGErMTAsZy5taW5CdXR0b25XaWR0aCk7dC5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrKHYrdSkrXCIsXCIrditcIilcIiksZS5hdHRyKHt4OjAseTowLHdpZHRoOnAsaGVpZ2h0Omh9KSxjLnBvc2l0aW9uVGV4dChpLHAvMixoLzItKGwtMSkqby8yKzMpLHUrPXArNX0pO3ZhciBtPXQuX2Z1bGxMYXlvdXQuX3NpemUseT1tLmwrbS53KnIueCx4PW0udCttLmgqKDEtci55KSxiPVwibGVmdFwiO2wuaXNSaWdodEFuY2hvcihyKSYmKHktPXUsYj1cInJpZ2h0XCIpO2wuaXNDZW50ZXJBbmNob3IocikmJih5LT11LzIsYj1cImNlbnRlclwiKTt2YXIgXz1cInRvcFwiO2wuaXNCb3R0b21BbmNob3IocikmJih4LT1oLF89XCJib3R0b21cIik7bC5pc01pZGRsZUFuY2hvcihyKSYmKHgtPWgvMixfPVwibWlkZGxlXCIpO3U9TWF0aC5jZWlsKHUpLGg9TWF0aC5jZWlsKGgpLHk9TWF0aC5yb3VuZCh5KSx4PU1hdGgucm91bmQoeCksYS5hdXRvTWFyZ2luKHQsaStcIi1yYW5nZS1zZWxlY3RvclwiLHt4OnIueCx5OnIueSxsOnUqcFtiXSxyOnUqZFtiXSxiOmgqZFtfXSx0OmgqcFtfXX0pLG8uYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK3krXCIsXCIreCtcIilcIil9KHQsaCx1LG8uX25hbWUscil9KX19LHtcIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIjo2NzMsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIjo3MjUsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIjo3NTIsXCIuLi8uLi9wbG90cy9wbG90c1wiOjgxMCxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vY29sb3JcIjo1NzgsXCIuLi9kcmF3aW5nXCI6NTk5LFwiLi9jb25zdGFudHNcIjo2NDEsXCIuL2dldF91cGRhdGVfb2JqZWN0XCI6NjQ0LGQzOjE1NX1dLDY0NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9uYW1lLGk9e307aWYoXCJhbGxcIj09PWUuc3RlcClpW3IrXCIuYXV0b3JhbmdlXCJdPSEwO2Vsc2V7dmFyIGE9ZnVuY3Rpb24odCxlKXt2YXIgcixpPXQucmFuZ2UsYT1uZXcgRGF0ZSh0LnIybChpWzFdKSksbz1lLnN0ZXAscz1lLmNvdW50O3N3aXRjaChlLnN0ZXBtb2RlKXtjYXNlXCJiYWNrd2FyZFwiOnI9dC5sMnIoK24udGltZVtvXS51dGMub2Zmc2V0KGEsLXMpKTticmVhaztjYXNlXCJ0b2RhdGVcIjp2YXIgbD1uLnRpbWVbb10udXRjLm9mZnNldChhLC1zKTtyPXQubDJyKCtuLnRpbWVbb10udXRjLmNlaWwobCkpfXZhciBjPWlbMV07cmV0dXJuW3IsY119KHQsZSk7aVtyK1wiLnJhbmdlWzBdXCJdPWFbMF0saVtyK1wiLnJhbmdlWzFdXCJdPWFbMV19cmV0dXJuIGl9fSx7ZDM6MTU1fV0sNjQ1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwiY29tcG9uZW50XCIsbmFtZTpcInJhbmdlc2VsZWN0b3JcIixzY2hlbWE6e3N1YnBsb3RzOnt4YXhpczp7cmFuZ2VzZWxlY3Rvcjp0KFwiLi9hdHRyaWJ1dGVzXCIpfX19LGxheW91dEF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxoYW5kbGVEZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxkcmF3OnQoXCIuL2RyYXdcIil9fSx7XCIuL2F0dHJpYnV0ZXNcIjo2NDAsXCIuL2RlZmF1bHRzXCI6NjQyLFwiLi9kcmF3XCI6NjQzfV0sNjQ2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2NvbG9yL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPXtiZ2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0Om4uYmFja2dyb3VuZCxlZGl0VHlwZTpcInBsb3RcIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6bi5kZWZhdWx0TGluZSxlZGl0VHlwZTpcInBsb3RcIn0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsZGZsdDowLG1pbjowLGVkaXRUeXBlOlwicGxvdFwifSxhdXRvcmFuZ2U6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcImNhbGNcIixpbXBsaWVkRWRpdHM6e1wicmFuZ2VbMF1cIjp2b2lkIDAsXCJyYW5nZVsxXVwiOnZvaWQgMH19LHJhbmdlOnt2YWxUeXBlOlwiaW5mb19hcnJheVwiLGl0ZW1zOlt7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsY1wiLGltcGxpZWRFZGl0czp7XCJeYXV0b3JhbmdlXCI6ITF9fSx7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsY1wiLGltcGxpZWRFZGl0czp7XCJeYXV0b3JhbmdlXCI6ITF9fV0sZWRpdFR5cGU6XCJjYWxjXCIsaW1wbGllZEVkaXRzOnthdXRvcmFuZ2U6ITF9fSx0aGlja25lc3M6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0Oi4xNSxtaW46MCxtYXg6MSxlZGl0VHlwZTpcInBsb3RcIn0sdmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn19LHtcIi4uL2NvbG9yL2F0dHJpYnV0ZXNcIjo1Nzd9XSw2NDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCIpLmxpc3QsaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZVwiKS5nZXRBdXRvUmFuZ2UsYT10KFwiLi9jb25zdGFudHNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uKHQsXCJ4XCIsITApLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG89ZVtyXSxzPW9bYS5uYW1lXTtzJiZzLnZpc2libGUmJnMuYXV0b3JhbmdlJiYocy5faW5wdXQuYXV0b3JhbmdlPSEwLHMuX2lucHV0LnJhbmdlPXMucmFuZ2U9aSh0LG8pKX19fSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlXCI6NzQ4LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCI6NzUyLFwiLi9jb25zdGFudHNcIjo2NDh9XSw2NDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e25hbWU6XCJyYW5nZXNsaWRlclwiLGNvbnRhaW5lckNsYXNzTmFtZTpcInJhbmdlc2xpZGVyLWNvbnRhaW5lclwiLGJnQ2xhc3NOYW1lOlwicmFuZ2VzbGlkZXItYmdcIixyYW5nZVBsb3RDbGFzc05hbWU6XCJyYW5nZXNsaWRlci1yYW5nZXBsb3RcIixtYXNrTWluQ2xhc3NOYW1lOlwicmFuZ2VzbGlkZXItbWFzay1taW5cIixtYXNrTWF4Q2xhc3NOYW1lOlwicmFuZ2VzbGlkZXItbWFzay1tYXhcIixzbGlkZUJveENsYXNzTmFtZTpcInJhbmdlc2xpZGVyLXNsaWRlYm94XCIsZ3JhYmJlck1pbkNsYXNzTmFtZTpcInJhbmdlc2xpZGVyLWdyYWJiZXItbWluXCIsZ3JhYkFyZWFNaW5DbGFzc05hbWU6XCJyYW5nZXNsaWRlci1ncmFiYXJlYS1taW5cIixoYW5kbGVNaW5DbGFzc05hbWU6XCJyYW5nZXNsaWRlci1oYW5kbGUtbWluXCIsZ3JhYmJlck1heENsYXNzTmFtZTpcInJhbmdlc2xpZGVyLWdyYWJiZXItbWF4XCIsZ3JhYkFyZWFNYXhDbGFzc05hbWU6XCJyYW5nZXNsaWRlci1ncmFiYXJlYS1tYXhcIixoYW5kbGVNYXhDbGFzc05hbWU6XCJyYW5nZXNsaWRlci1oYW5kbGUtbWF4XCIsbWFza01pbk9wcEF4aXNDbGFzc05hbWU6XCJyYW5nZXNsaWRlci1tYXNrLW1pbi1vcHAtYXhpc1wiLG1hc2tNYXhPcHBBeGlzQ2xhc3NOYW1lOlwicmFuZ2VzbGlkZXItbWFzay1tYXgtb3BwLWF4aXNcIixtYXNrQ29sb3I6XCJyZ2JhKDAsMCwwLDAuNClcIixtYXNrT3BwQXhpc0NvbG9yOlwicmdiYSgwLDAsMCwwLjIpXCIsc2xpZGVCb3hGaWxsOlwidHJhbnNwYXJlbnRcIixzbGlkZUJveEN1cnNvcjpcImV3LXJlc2l6ZVwiLGdyYWJBcmVhRmlsbDpcInRyYW5zcGFyZW50XCIsZ3JhYkFyZWFDdXJzb3I6XCJjb2wtcmVzaXplXCIsZ3JhYkFyZWFXaWR0aDoxMCxoYW5kbGVXaWR0aDo0LGhhbmRsZVJhZGl1czoxLGhhbmRsZVN0cm9rZVdpZHRoOjEsZXh0cmFQYWQ6MTV9fSx7fV0sNjQ5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiKSxvPXQoXCIuL2F0dHJpYnV0ZXNcIikscz10KFwiLi9vcHBheGlzX2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbD10W3JdLGM9ZVtyXTtpZihsLnJhbmdlc2xpZGVyfHxlLl9yZXF1ZXN0UmFuZ2VzbGlkZXJbYy5faWRdKXtuLmlzUGxhaW5PYmplY3QobC5yYW5nZXNsaWRlcil8fChsLnJhbmdlc2xpZGVyPXt9KTt2YXIgdSxoLGY9bC5yYW5nZXNsaWRlcixwPWkubmV3Q29udGFpbmVyKGMsXCJyYW5nZXNsaWRlclwiKTtpZihfKFwidmlzaWJsZVwiKSl7XyhcImJnY29sb3JcIixlLnBsb3RfYmdjb2xvciksXyhcImJvcmRlcmNvbG9yXCIpLF8oXCJib3JkZXJ3aWR0aFwiKSxfKFwidGhpY2tuZXNzXCIpLF8oXCJhdXRvcmFuZ2VcIiwhYy5pc1ZhbGlkUmFuZ2UoZi5yYW5nZSkpLF8oXCJyYW5nZVwiKTt2YXIgZD1lLl9zdWJwbG90cztpZihkKWZvcih2YXIgZz1kLmNhcnRlc2lhbi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3Vic3RyKDAsdC5pbmRleE9mKFwieVwiKSk9PT1hLm5hbWUyaWQocil9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3Vic3RyKHQuaW5kZXhPZihcInlcIiksdC5sZW5ndGgpfSksdj1uLnNpbXBsZU1hcChnLGEuaWQybmFtZSksbT0wO208di5sZW5ndGg7bSsrKXt2YXIgeT12W21dO3U9Zlt5XXx8e30saD1pLm5ld0NvbnRhaW5lcihwLHksXCJ5YXhpc1wiKTt2YXIgeCxiPWVbeV07dS5yYW5nZSYmYi5pc1ZhbGlkUmFuZ2UodS5yYW5nZSkmJih4PVwiZml4ZWRcIiksXCJtYXRjaFwiIT09dyhcInJhbmdlbW9kZVwiLHgpJiZ3KFwicmFuZ2VcIixiLnJhbmdlLnNsaWNlKCkpfXAuX2lucHV0PWZ9fWZ1bmN0aW9uIF8odCxlKXtyZXR1cm4gbi5jb2VyY2UoZixwLG8sdCxlKX1mdW5jdGlvbiB3KHQsZSl7cmV0dXJuIG4uY29lcmNlKHUsaCxzLHQsZSl9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiOjc1MixcIi4vYXR0cmlidXRlc1wiOjY0NixcIi4vb3BwYXhpc19hdHRyaWJ1dGVzXCI6NjUzfV0sNjUwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGE9dChcIi4uLy4uL3Bsb3RzL3Bsb3RzXCIpLG89dChcIi4uLy4uL2xpYlwiKSxzPXQoXCIuLi9kcmF3aW5nXCIpLGw9dChcIi4uL2NvbG9yXCIpLGM9dChcIi4uL3RpdGxlc1wiKSx1PXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIiksaD10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCIpLGY9dChcIi4uL2RyYWdlbGVtZW50XCIpLHA9dChcIi4uLy4uL2xpYi9zZXRjdXJzb3JcIiksZD10KFwiLi9jb25zdGFudHNcIik7ZnVuY3Rpb24gZyh0LGUscixuKXt2YXIgaT1vLmVuc3VyZVNpbmdsZSh0LFwicmVjdFwiLGQuYmdDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHt4OjAseTowLFwic2hhcGUtcmVuZGVyaW5nXCI6XCJjcmlzcEVkZ2VzXCJ9KX0pLGE9bi5ib3JkZXJ3aWR0aCUyPT0wP24uYm9yZGVyd2lkdGg6bi5ib3JkZXJ3aWR0aC0xLGw9LW4uX29mZnNldFNoaWZ0LGM9cy5jcmlzcFJvdW5kKGUsbi5ib3JkZXJ3aWR0aCk7aS5hdHRyKHt3aWR0aDpuLl93aWR0aCthLGhlaWdodDpuLl9oZWlnaHQrYSx0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoXCIrbCtcIixcIitsK1wiKVwiLGZpbGw6bi5iZ2NvbG9yLHN0cm9rZTpuLmJvcmRlcmNvbG9yLFwic3Ryb2tlLXdpZHRoXCI6Y30pfWZ1bmN0aW9uIHYodCxlLHIsbil7dmFyIGk9ZS5fZnVsbExheW91dDtvLmVuc3VyZVNpbmdsZUJ5SWQoaS5fdG9wZGVmcyxcImNsaXBQYXRoXCIsbi5fY2xpcElkLGZ1bmN0aW9uKHQpe3QuYXBwZW5kKFwicmVjdFwiKS5hdHRyKHt4OjAseTowfSl9KS5zZWxlY3QoXCJyZWN0XCIpLmF0dHIoe3dpZHRoOm4uX3dpZHRoLGhlaWdodDpuLl9oZWlnaHR9KX1mdW5jdGlvbiBtKHQsZSxyLGkpe3ZhciBsLGM9ZS5jYWxjZGF0YSxmPXQuc2VsZWN0QWxsKFwiZy5cIitkLnJhbmdlUGxvdENsYXNzTmFtZSkuZGF0YShyLl9zdWJwbG90c1dpdGgsby5pZGVudGl0eSk7Zi5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsZnVuY3Rpb24odCl7cmV0dXJuIGQucmFuZ2VQbG90Q2xhc3NOYW1lK1wiIFwiK3R9KS5jYWxsKHMuc2V0Q2xpcFVybCxpLl9jbGlwSWQsZSksZi5vcmRlcigpLGYuZXhpdCgpLnJlbW92ZSgpLGYuZWFjaChmdW5jdGlvbih0LG8pe3ZhciBzPW4uc2VsZWN0KHRoaXMpLGY9MD09PW8scD1oLmdldEZyb21JZChlLHQsXCJ5XCIpLGQ9cC5fbmFtZSxnPWlbZF0sdj17ZGF0YTpbXSxsYXlvdXQ6e3hheGlzOnt0eXBlOnIudHlwZSxkb21haW46WzAsMV0scmFuZ2U6aS5yYW5nZS5zbGljZSgpLGNhbGVuZGFyOnIuY2FsZW5kYXJ9LHdpZHRoOmkuX3dpZHRoLGhlaWdodDppLl9oZWlnaHQsbWFyZ2luOnt0OjAsYjowLGw6MCxyOjB9fSxfY29udGV4dDplLl9jb250ZXh0fTt2LmxheW91dFtkXT17dHlwZTpwLnR5cGUsZG9tYWluOlswLDFdLHJhbmdlOlwibWF0Y2hcIiE9PWcucmFuZ2Vtb2RlP2cucmFuZ2Uuc2xpY2UoKTpwLnJhbmdlLnNsaWNlKCksY2FsZW5kYXI6cC5jYWxlbmRhcn0sYS5zdXBwbHlEZWZhdWx0cyh2KTt2YXIgbT12Ll9mdWxsTGF5b3V0LnhheGlzLHk9di5fZnVsbExheW91dFtkXTttLmNsZWFyQ2FsYygpLG0uc2V0U2NhbGUoKSx5LmNsZWFyQ2FsYygpLHkuc2V0U2NhbGUoKTt2YXIgeD17aWQ6dCxwbG90Z3JvdXA6cyx4YXhpczptLHlheGlzOnksaXNSYW5nZVBsb3Q6ITB9O2Y/bD14Oih4Lm1haW5wbG90PVwieHlcIix4Lm1haW5wbG90aW5mbz1sKSx1LnJhbmdlUGxvdChlLHgsZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dLGE9aVswXS50cmFjZTthLnhheGlzK2EueWF4aXM9PT1lJiZyLnB1c2goaSl9cmV0dXJuIHJ9KGMsdCkpfSl9ZnVuY3Rpb24geSh0LGUscixuLGkpeyhvLmVuc3VyZVNpbmdsZSh0LFwicmVjdFwiLGQubWFza01pbkNsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIoe3g6MCx5OjAsXCJzaGFwZS1yZW5kZXJpbmdcIjpcImNyaXNwRWRnZXNcIn0pfSkuYXR0cihcImhlaWdodFwiLG4uX2hlaWdodCkuY2FsbChsLmZpbGwsZC5tYXNrQ29sb3IpLG8uZW5zdXJlU2luZ2xlKHQsXCJyZWN0XCIsZC5tYXNrTWF4Q2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuYXR0cih7eTowLFwic2hhcGUtcmVuZGVyaW5nXCI6XCJjcmlzcEVkZ2VzXCJ9KX0pLmF0dHIoXCJoZWlnaHRcIixuLl9oZWlnaHQpLmNhbGwobC5maWxsLGQubWFza0NvbG9yKSxcIm1hdGNoXCIhPT1pLnJhbmdlbW9kZSkmJihvLmVuc3VyZVNpbmdsZSh0LFwicmVjdFwiLGQubWFza01pbk9wcEF4aXNDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHt5OjAsXCJzaGFwZS1yZW5kZXJpbmdcIjpcImNyaXNwRWRnZXNcIn0pfSkuYXR0cihcIndpZHRoXCIsbi5fd2lkdGgpLmNhbGwobC5maWxsLGQubWFza09wcEF4aXNDb2xvciksby5lbnN1cmVTaW5nbGUodCxcInJlY3RcIixkLm1hc2tNYXhPcHBBeGlzQ2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuYXR0cih7eTowLFwic2hhcGUtcmVuZGVyaW5nXCI6XCJjcmlzcEVkZ2VzXCJ9KX0pLmF0dHIoXCJ3aWR0aFwiLG4uX3dpZHRoKS5zdHlsZShcImJvcmRlci10b3BcIixkLm1hc2tPcHBCb3JkZXIpLmNhbGwobC5maWxsLGQubWFza09wcEF4aXNDb2xvcikpfWZ1bmN0aW9uIHgodCxlLHIsbil7ZS5fY29udGV4dC5zdGF0aWNQbG90fHxvLmVuc3VyZVNpbmdsZSh0LFwicmVjdFwiLGQuc2xpZGVCb3hDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHt5OjAsY3Vyc29yOmQuc2xpZGVCb3hDdXJzb3IsXCJzaGFwZS1yZW5kZXJpbmdcIjpcImNyaXNwRWRnZXNcIn0pfSkuYXR0cih7aGVpZ2h0Om4uX2hlaWdodCxmaWxsOmQuc2xpZGVCb3hGaWxsfSl9ZnVuY3Rpb24gYih0LGUscixuKXt2YXIgaT1vLmVuc3VyZVNpbmdsZSh0LFwiZ1wiLGQuZ3JhYmJlck1pbkNsYXNzTmFtZSksYT1vLmVuc3VyZVNpbmdsZSh0LFwiZ1wiLGQuZ3JhYmJlck1heENsYXNzTmFtZSkscz17eDowLHdpZHRoOmQuaGFuZGxlV2lkdGgscng6ZC5oYW5kbGVSYWRpdXMsZmlsbDpsLmJhY2tncm91bmQsc3Ryb2tlOmwuZGVmYXVsdExpbmUsXCJzdHJva2Utd2lkdGhcIjpkLmhhbmRsZVN0cm9rZVdpZHRoLFwic2hhcGUtcmVuZGVyaW5nXCI6XCJjcmlzcEVkZ2VzXCJ9LGM9e3k6TWF0aC5yb3VuZChuLl9oZWlnaHQvNCksaGVpZ2h0Ok1hdGgucm91bmQobi5faGVpZ2h0LzIpfTtpZihvLmVuc3VyZVNpbmdsZShpLFwicmVjdFwiLGQuaGFuZGxlTWluQ2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuYXR0cihzKX0pLmF0dHIoYyksby5lbnN1cmVTaW5nbGUoYSxcInJlY3RcIixkLmhhbmRsZU1heENsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIocyl9KS5hdHRyKGMpLCFlLl9jb250ZXh0LnN0YXRpY1Bsb3Qpe3ZhciB1PXt3aWR0aDpkLmdyYWJBcmVhV2lkdGgseDowLHk6MCxmaWxsOmQuZ3JhYkFyZWFGaWxsLGN1cnNvcjpkLmdyYWJBcmVhQ3Vyc29yfTtvLmVuc3VyZVNpbmdsZShpLFwicmVjdFwiLGQuZ3JhYkFyZWFNaW5DbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHUpfSkuYXR0cihcImhlaWdodFwiLG4uX2hlaWdodCksby5lbnN1cmVTaW5nbGUoYSxcInJlY3RcIixkLmdyYWJBcmVhTWF4Q2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuYXR0cih1KX0pLmF0dHIoXCJoZWlnaHRcIixuLl9oZWlnaHQpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9yYW5nZVNsaWRlckRhdGEsYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgcz1yW2FdW2QubmFtZV07cy5fY2xpcElkPXMuX2lkK1wiLVwiK2UuX3VpZH12YXIgbD1lLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKFwiZy5cIitkLmNvbnRhaW5lckNsYXNzTmFtZSkuZGF0YShyLGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9uYW1lfSk7bC5leGl0KCkuZWFjaChmdW5jdGlvbih0KXt2YXIgcj10W2QubmFtZV07ZS5fdG9wZGVmcy5zZWxlY3QoXCIjXCIrci5fY2xpcElkKS5yZW1vdmUoKX0pLnJlbW92ZSgpLDAhPT1yLmxlbmd0aCYmKGwuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoZC5jb250YWluZXJDbGFzc05hbWUsITApLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpLGwuZWFjaChmdW5jdGlvbihyKXt2YXIgYT1uLnNlbGVjdCh0aGlzKSxzPXJbZC5uYW1lXSxsPWVbaC5pZDJuYW1lKHIuYW5jaG9yKV0sdT1zW2guaWQybmFtZShyLmFuY2hvcildO2lmKHMucmFuZ2Upe3ZhciBfLHc9by5zaW1wbGVNYXAocy5yYW5nZSxyLnIybCksaz1vLnNpbXBsZU1hcChyLnJhbmdlLHIucjJsKTtfPWtbMF08a1sxXT9bTWF0aC5taW4od1swXSxrWzBdKSxNYXRoLm1heCh3WzFdLGtbMV0pXTpbTWF0aC5tYXgod1swXSxrWzBdKSxNYXRoLm1pbih3WzFdLGtbMV0pXSxzLnJhbmdlPXMuX2lucHV0LnJhbmdlPW8uc2ltcGxlTWFwKF8sci5sMnIpfXIuY2xlYW5SYW5nZShcInJhbmdlc2xpZGVyLnJhbmdlXCIpO3ZhciBBPWUubWFyZ2luLFQ9ZS5fc2l6ZSxNPXIuZG9tYWluLFM9cy5fdGlja0hlaWdodCxFPXMuX29wcEJvdHRvbTtzLl93aWR0aD1ULncqKE1bMV0tTVswXSk7dmFyIEM9TWF0aC5yb3VuZChBLmwrVC53Kk1bMF0pLEw9TWF0aC5yb3VuZChULnQrVC5oKigxLUUpK1Mrcy5fb2Zmc2V0U2hpZnQrZC5leHRyYVBhZCk7YS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrQytcIixcIitMK1wiKVwiKTt2YXIgej1yLnIybChzLnJhbmdlWzBdKSxPPXIucjJsKHMucmFuZ2VbMV0pLEk9Ty16O2lmKHMucDJkPWZ1bmN0aW9uKHQpe3JldHVybiB0L3MuX3dpZHRoKkkren0scy5kMnA9ZnVuY3Rpb24odCl7cmV0dXJuKHQteikvSSpzLl93aWR0aH0scy5fcmw9W3osT10sXCJtYXRjaFwiIT09dS5yYW5nZW1vZGUpe3ZhciBEPWwucjJsKHUucmFuZ2VbMF0pLFA9bC5yMmwodS5yYW5nZVsxXSktRDtzLmQycE9wcEF4aXM9ZnVuY3Rpb24odCl7cmV0dXJuKHQtRCkvUCpzLl9oZWlnaHR9fWEuY2FsbChnLHQscixzKS5jYWxsKHYsdCxyLHMpLmNhbGwobSx0LHIscykuY2FsbCh5LHQscixzLHUpLmNhbGwoeCx0LHIscykuY2FsbChiLHQscixzKSxmdW5jdGlvbih0LGUscixhKXt2YXIgcz10LnNlbGVjdChcInJlY3QuXCIrZC5zbGlkZUJveENsYXNzTmFtZSkubm9kZSgpLGw9dC5zZWxlY3QoXCJyZWN0LlwiK2QuZ3JhYkFyZWFNaW5DbGFzc05hbWUpLm5vZGUoKSxjPXQuc2VsZWN0KFwicmVjdC5cIitkLmdyYWJBcmVhTWF4Q2xhc3NOYW1lKS5ub2RlKCk7dC5vbihcIm1vdXNlZG93blwiLGZ1bmN0aW9uKCl7dmFyIHU9bi5ldmVudCxoPXUudGFyZ2V0LGQ9dS5jbGllbnRYLGc9ZC10Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LHY9YS5kMnAoci5fcmxbMF0pLG09YS5kMnAoci5fcmxbMV0pLHk9Zi5jb3ZlclNsaXAoKTtmdW5jdGlvbiB4KHQpe3ZhciB1LGYseCxiPSt0LmNsaWVudFgtZDtzd2l0Y2goaCl7Y2FzZSBzOng9XCJldy1yZXNpemVcIix1PXYrYixmPW0rYjticmVhaztjYXNlIGw6eD1cImNvbC1yZXNpemVcIix1PXYrYixmPW07YnJlYWs7Y2FzZSBjOng9XCJjb2wtcmVzaXplXCIsdT12LGY9bStiO2JyZWFrO2RlZmF1bHQ6eD1cImV3LXJlc2l6ZVwiLHU9ZyxmPWcrYn1pZihmPHUpe3ZhciBfPWY7Zj11LHU9X31hLl9waXhlbE1pbj11LGEuX3BpeGVsTWF4PWYscChuLnNlbGVjdCh5KSx4KSxmdW5jdGlvbih0LGUscixuKXtmdW5jdGlvbiBhKHQpe3JldHVybiByLmwycihvLmNvbnN0cmFpbih0LG4uX3JsWzBdLG4uX3JsWzFdKSl9dmFyIHM9YShuLnAyZChuLl9waXhlbE1pbikpLGw9YShuLnAyZChuLl9waXhlbE1heCkpO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtpLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIixlLHIuX25hbWUrXCIucmFuZ2VcIixbcyxsXSl9KX0oMCxlLHIsYSl9eS5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIseCkseS5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLGZ1bmN0aW9uIHQoKXt5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIix4KTt5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsdCk7by5yZW1vdmVFbGVtZW50KHkpfSl9KX0oYSx0LHIscyksZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBzPWQuaGFuZGxlV2lkdGgvMjtmdW5jdGlvbiBsKHQpe3JldHVybiBvLmNvbnN0cmFpbih0LDAsbi5fd2lkdGgpfWZ1bmN0aW9uIGModCl7cmV0dXJuIG8uY29uc3RyYWluKHQsMCxuLl9oZWlnaHQpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIG8uY29uc3RyYWluKHQsLXMsbi5fd2lkdGgrcyl9dmFyIGg9bChuLmQycChyLl9ybFswXSkpLGY9bChuLmQycChyLl9ybFsxXSkpO2lmKHQuc2VsZWN0KFwicmVjdC5cIitkLnNsaWRlQm94Q2xhc3NOYW1lKS5hdHRyKFwieFwiLGgpLmF0dHIoXCJ3aWR0aFwiLGYtaCksdC5zZWxlY3QoXCJyZWN0LlwiK2QubWFza01pbkNsYXNzTmFtZSkuYXR0cihcIndpZHRoXCIsaCksdC5zZWxlY3QoXCJyZWN0LlwiK2QubWFza01heENsYXNzTmFtZSkuYXR0cihcInhcIixmKS5hdHRyKFwid2lkdGhcIixuLl93aWR0aC1mKSxcIm1hdGNoXCIhPT1hLnJhbmdlbW9kZSl7dmFyIHA9bi5faGVpZ2h0LWMobi5kMnBPcHBBeGlzKGkuX3JsWzFdKSksZz1uLl9oZWlnaHQtYyhuLmQycE9wcEF4aXMoaS5fcmxbMF0pKTt0LnNlbGVjdChcInJlY3QuXCIrZC5tYXNrTWluT3BwQXhpc0NsYXNzTmFtZSkuYXR0cihcInhcIixoKS5hdHRyKFwiaGVpZ2h0XCIscCkuYXR0cihcIndpZHRoXCIsZi1oKSx0LnNlbGVjdChcInJlY3QuXCIrZC5tYXNrTWF4T3BwQXhpc0NsYXNzTmFtZSkuYXR0cihcInhcIixoKS5hdHRyKFwieVwiLGcpLmF0dHIoXCJoZWlnaHRcIixuLl9oZWlnaHQtZykuYXR0cihcIndpZHRoXCIsZi1oKSx0LnNlbGVjdChcInJlY3QuXCIrZC5zbGlkZUJveENsYXNzTmFtZSkuYXR0cihcInlcIixwKS5hdHRyKFwiaGVpZ2h0XCIsZy1wKX12YXIgdj1NYXRoLnJvdW5kKHUoaC1zKSktLjUsbT1NYXRoLnJvdW5kKHUoZi1zKSkrLjU7dC5zZWxlY3QoXCJnLlwiK2QuZ3JhYmJlck1pbkNsYXNzTmFtZSkuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK3YrXCIsMC41KVwiKSx0LnNlbGVjdChcImcuXCIrZC5ncmFiYmVyTWF4Q2xhc3NOYW1lKS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrbStcIiwwLjUpXCIpfShhLDAscixzLGwsdSksXCJib3R0b21cIj09PXIuc2lkZSYmYy5kcmF3KHQsci5faWQrXCJ0aXRsZVwiLHtwcm9wQ29udGFpbmVyOnIscHJvcE5hbWU6ci5fbmFtZStcIi50aXRsZVwiLHBsYWNlaG9sZGVyOmUuX2RmbHRUaXRsZS54LGF0dHJpYnV0ZXM6e3g6ci5fb2Zmc2V0K3IuX2xlbmd0aC8yLHk6TCtzLl9oZWlnaHQrcy5fb2Zmc2V0U2hpZnQrMTArMS41KnIudGl0bGUuZm9udC5zaXplLFwidGV4dC1hbmNob3JcIjpcIm1pZGRsZVwifX0pfSkpfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3NldGN1cnNvclwiOjcyMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiOjc2MCxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiOjc1MixcIi4uLy4uL3Bsb3RzL3Bsb3RzXCI6ODEwLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9jb2xvclwiOjU3OCxcIi4uL2RyYWdlbGVtZW50XCI6NTk2LFwiLi4vZHJhd2luZ1wiOjU5OSxcIi4uL3RpdGxlc1wiOjY2NixcIi4vY29uc3RhbnRzXCI6NjQ4LGQzOjE1NX1dLDY1MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIiksaT10KFwiLi9jb25zdGFudHNcIiksYT1pLm5hbWU7ZnVuY3Rpb24gbyh0KXt2YXIgZT10JiZ0W2FdO3JldHVybiBlJiZlLnZpc2libGV9ci5pc1Zpc2libGU9byxyLm1ha2VEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPW4ubGlzdCh7X2Z1bGxMYXlvdXQ6dH0sXCJ4XCIsITApLHI9dC5tYXJnaW4saT1bXTtpZighdC5faGFzKFwiZ2wyZFwiKSlmb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKyl7dmFyIGw9ZVtzXTtpZihvKGwpKXtpLnB1c2gobCk7dmFyIGM9bFthXTtjLl9pZD1hK2wuX2lkLGMuX2hlaWdodD0odC5oZWlnaHQtci5iLXIudCkqYy50aGlja25lc3MsYy5fb2Zmc2V0U2hpZnQ9TWF0aC5mbG9vcihjLmJvcmRlcndpZHRoLzIpfX10Ll9yYW5nZVNsaWRlckRhdGE9aX0sci5hdXRvTWFyZ2luT3B0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lW2FdLG89MS8wLHM9ZS5fY291bnRlckF4ZXMsbD0wO2w8cy5sZW5ndGg7bCsrKXt2YXIgYz1zW2xdLHU9bi5nZXRGcm9tSWQodCxjKTtvPU1hdGgubWluKG8sdS5kb21haW5bMF0pfXIuX29wcEJvdHRvbT1vO3ZhciBoPVwiYm90dG9tXCI9PT1lLnNpZGUmJmUuX2JvdW5kaW5nQm94LmhlaWdodHx8MDtyZXR1cm4gci5fdGlja0hlaWdodD1oLHt4OjAseTpvLGw6MCxyOjAsdDowLGI6ci5faGVpZ2h0K3QuX2Z1bGxMYXlvdXQubWFyZ2luLmIraCxwYWQ6aS5leHRyYVBhZCsyKnIuX29mZnNldFNoaWZ0fX19LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiOjc1MixcIi4vY29uc3RhbnRzXCI6NjQ4fV0sNjUyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2F0dHJpYnV0ZXNcIiksYT10KFwiLi9vcHBheGlzX2F0dHJpYnV0ZXNcIiksbz10KFwiLi9oZWxwZXJzXCIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZTpcImNvbXBvbmVudFwiLG5hbWU6XCJyYW5nZXNsaWRlclwiLHNjaGVtYTp7c3VicGxvdHM6e3hheGlzOntyYW5nZXNsaWRlcjpuLmV4dGVuZEZsYXQoe30saSx7eWF4aXM6YX0pfX19LGxheW91dEF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxoYW5kbGVEZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxjYWxjQXV0b3JhbmdlOnQoXCIuL2NhbGNfYXV0b3JhbmdlXCIpLGRyYXc6dChcIi4vZHJhd1wiKSxpc1Zpc2libGU6by5pc1Zpc2libGUsbWFrZURhdGE6by5tYWtlRGF0YSxhdXRvTWFyZ2luT3B0czpvLmF1dG9NYXJnaW5PcHRzfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi9hdHRyaWJ1dGVzXCI6NjQ2LFwiLi9jYWxjX2F1dG9yYW5nZVwiOjY0NyxcIi4vZGVmYXVsdHNcIjo2NDksXCIuL2RyYXdcIjo2NTAsXCIuL2hlbHBlcnNcIjo2NTEsXCIuL29wcGF4aXNfYXR0cmlidXRlc1wiOjY1M31dLDY1MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17X2lzU3VicGxvdE9iajohMCxyYW5nZW1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImF1dG9cIixcImZpeGVkXCIsXCJtYXRjaFwiXSxkZmx0OlwibWF0Y2hcIixlZGl0VHlwZTpcImNhbGNcIn0scmFuZ2U6e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsaXRlbXM6W3t2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJwbG90XCJ9LHt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJwbG90XCJ9XSxlZGl0VHlwZTpcInBsb3RcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9fSx7fV0sNjU0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlc1wiKS5saW5lLGE9dChcIi4uL2RyYXdpbmcvYXR0cmlidXRlc1wiKS5kYXNoLG89dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxzPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLnRlbXBsYXRlZEFycmF5O2UuZXhwb3J0cz1zKFwic2hhcGVcIix7dmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0sdHlwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiY2lyY2xlXCIsXCJyZWN0XCIsXCJwYXRoXCIsXCJsaW5lXCJdLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0sbGF5ZXI6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImJlbG93XCIsXCJhYm92ZVwiXSxkZmx0OlwiYWJvdmVcIixlZGl0VHlwZTpcImFycmF5ZHJhd1wifSx4cmVmOm8oe30sbi54cmVmLHt9KSx4c2l6ZW1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInNjYWxlZFwiLFwicGl4ZWxcIl0sZGZsdDpcInNjYWxlZFwiLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0seGFuY2hvcjp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0seDA6e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LHgxOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSx5cmVmOm8oe30sbi55cmVmLHt9KSx5c2l6ZW1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInNjYWxlZFwiLFwicGl4ZWxcIl0sZGZsdDpcInNjYWxlZFwiLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0seWFuY2hvcjp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0seTA6e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LHkxOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSxwYXRoOnt2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSxvcGFjaXR5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGxpbmU6e2NvbG9yOm8oe30saS5jb2xvcix7ZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0pLHdpZHRoOm8oe30saS53aWR0aCx7ZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSksZGFzaDpvKHt9LGEse2VkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9KSxlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LGZpbGxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDpcInJnYmEoMCwwLDAsMClcIixlZGl0VHlwZTpcImFycmF5ZHJhd1wifSxlZGl0VHlwZTpcImFycmF5ZHJhd1wifSl9LHtcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlc1wiOjEwNTIsXCIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzXCI6NTYxLFwiLi4vZHJhd2luZy9hdHRyaWJ1dGVzXCI6NTk4fV0sNjU1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxhPXQoXCIuL2NvbnN0YW50c1wiKSxvPXQoXCIuL2hlbHBlcnNcIik7ZnVuY3Rpb24gcyh0KXtyZXR1cm4gYyh0LmxpbmUud2lkdGgsdC54c2l6ZW1vZGUsdC54MCx0LngxLHQucGF0aCwhMSl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gYyh0LmxpbmUud2lkdGgsdC55c2l6ZW1vZGUsdC55MCx0LnkxLHQucGF0aCwhMCl9ZnVuY3Rpb24gYyh0LGUscixpLHMsbCl7dmFyIGM9dC8yLHU9bDtpZihcInBpeGVsXCI9PT1lKXt2YXIgaD1zP28uZXh0cmFjdFBhdGhDb29yZHMocyxsP2EucGFyYW1Jc1k6YS5wYXJhbUlzWCk6W3IsaV0sZj1uLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxoKSxwPW4uYWdnTnVtcyhNYXRoLm1pbixudWxsLGgpLGQ9cDwwP01hdGguYWJzKHApK2M6YyxnPWY+MD9mK2M6YztyZXR1cm57cHBhZDpjLHBwYWRwbHVzOnU/ZDpnLHBwYWRtaW51czp1P2c6ZH19cmV0dXJue3BwYWQ6Y319ZnVuY3Rpb24gdSh0LGUscixuLGkpe3ZhciBzPVwiY2F0ZWdvcnlcIj09PXQudHlwZXx8XCJtdWx0aWNhdGVnb3J5XCI9PT10LnR5cGU/dC5yMmM6dC5kMmM7aWYodm9pZCAwIT09ZSlyZXR1cm5bcyhlKSxzKHIpXTtpZihuKXt2YXIgbCxjLHUsaCxmPTEvMCxwPS0xLzAsZD1uLm1hdGNoKGEuc2VnbWVudFJFKTtmb3IoXCJkYXRlXCI9PT10LnR5cGUmJihzPW8uZGVjb2RlRGF0ZShzKSksbD0wO2w8ZC5sZW5ndGg7bCsrKXZvaWQgMCE9PShjPWlbZFtsXS5jaGFyQXQoMCldLmRyYXduKSYmKCEodT1kW2xdLnN1YnN0cigxKS5tYXRjaChhLnBhcmFtUkUpKXx8dS5sZW5ndGg8Y3x8KChoPXModVtjXSkpPGYmJihmPWgpLGg+cCYmKHA9aCkpKTtyZXR1cm4gcD49Zj9bZixwXTp2b2lkIDB9fWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9bi5maWx0ZXJWaXNpYmxlKGUuc2hhcGVzKTtpZihyLmxlbmd0aCYmdC5fZnVsbERhdGEubGVuZ3RoKWZvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXt2YXIgYyxoLGY9cltvXTtpZihmLl9leHRyZW1lcz17fSxcInBhcGVyXCIhPT1mLnhyZWYpe3ZhciBwPVwicGl4ZWxcIj09PWYueHNpemVtb2RlP2YueGFuY2hvcjpmLngwLGQ9XCJwaXhlbFwiPT09Zi54c2l6ZW1vZGU/Zi54YW5jaG9yOmYueDE7KGg9dShjPWkuZ2V0RnJvbUlkKHQsZi54cmVmKSxwLGQsZi5wYXRoLGEucGFyYW1Jc1gpKSYmKGYuX2V4dHJlbWVzW2MuX2lkXT1pLmZpbmRFeHRyZW1lcyhjLGgscyhmKSkpfWlmKFwicGFwZXJcIiE9PWYueXJlZil7dmFyIGc9XCJwaXhlbFwiPT09Zi55c2l6ZW1vZGU/Zi55YW5jaG9yOmYueTAsdj1cInBpeGVsXCI9PT1mLnlzaXplbW9kZT9mLnlhbmNob3I6Zi55MTsoaD11KGM9aS5nZXRGcm9tSWQodCxmLnlyZWYpLGcsdixmLnBhdGgsYS5wYXJhbUlzWSkpJiYoZi5fZXh0cmVtZXNbYy5faWRdPWkuZmluZEV4dHJlbWVzKGMsaCxsKGYpKSl9fX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi9jb25zdGFudHNcIjo2NTYsXCIuL2hlbHBlcnNcIjo2NTl9XSw2NTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e3NlZ21lbnRSRTovW01MSFZRQ1RTWl1bXk1MSFZRQ1RTWl0qL2cscGFyYW1SRTovW15cXHMsXSsvZyxwYXJhbUlzWDp7TTp7MDohMCxkcmF3bjowfSxMOnswOiEwLGRyYXduOjB9LEg6ezA6ITAsZHJhd246MH0sVjp7fSxROnswOiEwLDI6ITAsZHJhd246Mn0sQzp7MDohMCwyOiEwLDQ6ITAsZHJhd246NH0sVDp7MDohMCxkcmF3bjowfSxTOnswOiEwLDI6ITAsZHJhd246Mn0sWjp7fX0scGFyYW1Jc1k6e006ezE6ITAsZHJhd246MX0sTDp7MTohMCxkcmF3bjoxfSxIOnt9LFY6ezA6ITAsZHJhd246MH0sUTp7MTohMCwzOiEwLGRyYXduOjN9LEM6ezE6ITAsMzohMCw1OiEwLGRyYXduOjV9LFQ6ezE6ITAsZHJhd246MX0sUzp7MTohMCwzOiEwLGRyYXduOjV9LFo6e319LG51bVBhcmFtczp7TToyLEw6MixIOjEsVjoxLFE6NCxDOjYsVDoyLFM6NCxaOjB9fX0se31dLDY1NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksYT10KFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCIpLG89dChcIi4vYXR0cmlidXRlc1wiKSxzPXQoXCIuL2hlbHBlcnNcIik7ZnVuY3Rpb24gbCh0LGUscil7ZnVuY3Rpb24gYShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWlmKGEoXCJ2aXNpYmxlXCIpKXthKFwibGF5ZXJcIiksYShcIm9wYWNpdHlcIiksYShcImZpbGxjb2xvclwiKSxhKFwibGluZS5jb2xvclwiKSxhKFwibGluZS53aWR0aFwiKSxhKFwibGluZS5kYXNoXCIpO2Zvcih2YXIgbD1hKFwidHlwZVwiLHQucGF0aD9cInBhdGhcIjpcInJlY3RcIiksYz1hKFwieHNpemVtb2RlXCIpLHU9YShcInlzaXplbW9kZVwiKSxoPVtcInhcIixcInlcIl0sZj0wO2Y8MjtmKyspe3ZhciBwLGQsZyx2PWhbZl0sbT12K1wiYW5jaG9yXCIseT1cInhcIj09PXY/Yzp1LHg9e19mdWxsTGF5b3V0OnJ9LGI9aS5jb2VyY2VSZWYodCxlLHgsdixcIlwiLFwicGFwZXJcIik7aWYoXCJwYXBlclwiIT09Yj8oKHA9aS5nZXRGcm9tSWQoeCxiKSkuX3NoYXBlSW5kaWNlcy5wdXNoKGUuX2luZGV4KSxnPXMucmFuZ2VUb1NoYXBlUG9zaXRpb24ocCksZD1zLnNoYXBlUG9zaXRpb25Ub1JhbmdlKHApKTpkPWc9bi5pZGVudGl0eSxcInBhdGhcIiE9PWwpe3ZhciBfPXYrXCIwXCIsdz12K1wiMVwiLGs9dFtfXSxBPXRbd107dFtfXT1kKHRbX10sITApLHRbd109ZCh0W3ddLCEwKSxcInBpeGVsXCI9PT15PyhhKF8sMCksYSh3LDEwKSk6KGkuY29lcmNlUG9zaXRpb24oZSx4LGEsYixfLC4yNSksaS5jb2VyY2VQb3NpdGlvbihlLHgsYSxiLHcsLjc1KSksZVtfXT1nKGVbX10pLGVbd109ZyhlW3ddKSx0W19dPWssdFt3XT1BfWlmKFwicGl4ZWxcIj09PXkpe3ZhciBUPXRbbV07dFttXT1kKHRbbV0sITApLGkuY29lcmNlUG9zaXRpb24oZSx4LGEsYixtLC4yNSksZVttXT1nKGVbbV0pLHRbbV09VH19XCJwYXRoXCI9PT1sP2EoXCJwYXRoXCIpOm4ubm9uZU9yQWxsKHQsZSxbXCJ4MFwiLFwieDFcIixcInkwXCIsXCJ5MVwiXSl9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2EodCxlLHtuYW1lOlwic2hhcGVzXCIsaGFuZGxlSXRlbURlZmF1bHRzOmx9KX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0c1wiOjc0NSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi9hdHRyaWJ1dGVzXCI6NjU0LFwiLi9oZWxwZXJzXCI6NjU5fV0sNjU4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxvPXQoXCIuLi9jb2xvclwiKSxzPXQoXCIuLi9kcmF3aW5nXCIpLGw9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIikuYXJyYXlFZGl0b3IsYz10KFwiLi4vZHJhZ2VsZW1lbnRcIiksdT10KFwiLi4vLi4vbGliL3NldGN1cnNvclwiKSxoPXQoXCIuL2NvbnN0YW50c1wiKSxmPXQoXCIuL2hlbHBlcnNcIik7ZnVuY3Rpb24gcCh0LGUpe3QuX2Z1bGxMYXlvdXQuX3BhcGVyZGl2LnNlbGVjdEFsbCgnLnNoYXBlbGF5ZXIgW2RhdGEtaW5kZXg9XCInK2UrJ1wiXScpLnJlbW92ZSgpO3ZhciByPXQuX2Z1bGxMYXlvdXQuc2hhcGVzW2VdfHx7fTtpZihyLl9pbnB1dCYmITEhPT1yLnZpc2libGUpaWYoXCJiZWxvd1wiIT09ci5sYXllciltKHQuX2Z1bGxMYXlvdXQuX3NoYXBlVXBwZXJMYXllcik7ZWxzZSBpZihcInBhcGVyXCI9PT1yLnhyZWZ8fFwicGFwZXJcIj09PXIueXJlZiltKHQuX2Z1bGxMYXlvdXQuX3NoYXBlTG93ZXJMYXllcik7ZWxzZXt2YXIgcD10Ll9mdWxsTGF5b3V0Ll9wbG90c1tyLnhyZWYrci55cmVmXTtpZihwKW0oKHAubWFpbnBsb3RpbmZvfHxwKS5zaGFwZWxheWVyKTtlbHNlIG0odC5fZnVsbExheW91dC5fc2hhcGVMb3dlckxheWVyKX1mdW5jdGlvbiBtKHApe3ZhciBtPXtcImRhdGEtaW5kZXhcIjplLFwiZmlsbC1ydWxlXCI6XCJldmVub2RkXCIsZDpnKHQscil9LHk9ci5saW5lLndpZHRoP3IubGluZS5jb2xvcjpcInJnYmEoMCwwLDAsMClcIix4PXAuYXBwZW5kKFwicGF0aFwiKS5hdHRyKG0pLnN0eWxlKFwib3BhY2l0eVwiLHIub3BhY2l0eSkuY2FsbChvLnN0cm9rZSx5KS5jYWxsKG8uZmlsbCxyLmZpbGxjb2xvcikuY2FsbChzLmRhc2hMaW5lLHIubGluZS5kYXNoLHIubGluZS53aWR0aCk7ZCh4LHQsciksdC5fY29udGV4dC5lZGl0cy5zaGFwZVBvc2l0aW9uJiZmdW5jdGlvbih0LGUscixvLHApe3ZhciBtLHkseCxiLF8sdyxrLEEsVCxNLFMsRSxDLEwseixPLEk9MTAsRD0xMCxQPVwicGl4ZWxcIj09PXIueHNpemVtb2RlLFI9XCJwaXhlbFwiPT09ci55c2l6ZW1vZGUsRj1cImxpbmVcIj09PXIudHlwZSxCPVwicGF0aFwiPT09ci50eXBlLE49bCh0LmxheW91dCxcInNoYXBlc1wiLHIpLGo9Ti5tb2RpZnlJdGVtLFY9YS5nZXRGcm9tSWQodCxyLnhyZWYpLFU9YS5nZXRGcm9tSWQodCxyLnlyZWYpLHE9Zi5nZXREYXRhVG9QaXhlbCh0LFYpLEg9Zi5nZXREYXRhVG9QaXhlbCh0LFUsITApLEc9Zi5nZXRQaXhlbFRvRGF0YSh0LFYpLFk9Zi5nZXRQaXhlbFRvRGF0YSh0LFUsITApLFc9Rj9mdW5jdGlvbigpe3ZhciB0PU1hdGgubWF4KHIubGluZS53aWR0aCwxMCksbj1wLmFwcGVuZChcImdcIikuYXR0cihcImRhdGEtaW5kZXhcIixvKTtuLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIixlLmF0dHIoXCJkXCIpKS5zdHlsZSh7Y3Vyc29yOlwibW92ZVwiLFwic3Ryb2tlLXdpZHRoXCI6dCxcInN0cm9rZS1vcGFjaXR5XCI6XCIwXCJ9KTt2YXIgaT17XCJmaWxsLW9wYWNpdHlcIjpcIjBcIn0sYT10LzI+MTA/dC8yOjEwO3JldHVybiBuLmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKHtcImRhdGEtbGluZS1wb2ludFwiOlwic3RhcnQtcG9pbnRcIixjeDpQP3Eoci54YW5jaG9yKStyLngwOnEoci54MCksY3k6Uj9IKHIueWFuY2hvciktci55MDpIKHIueTApLHI6YX0pLnN0eWxlKGkpLmNsYXNzZWQoXCJjdXJzb3ItZ3JhYlwiLCEwKSxuLmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKHtcImRhdGEtbGluZS1wb2ludFwiOlwiZW5kLXBvaW50XCIsY3g6UD9xKHIueGFuY2hvcikrci54MTpxKHIueDEpLGN5OlI/SChyLnlhbmNob3IpLXIueTE6SChyLnkxKSxyOmF9KS5zdHlsZShpKS5jbGFzc2VkKFwiY3Vyc29yLWdyYWJcIiwhMCksbn0oKTplLFg9e2VsZW1lbnQ6Vy5ub2RlKCksZ2Q6dCxwcmVwRm46ZnVuY3Rpb24obil7UCYmKF89cShyLnhhbmNob3IpKTtSJiYodz1IKHIueWFuY2hvcikpO1wicGF0aFwiPT09ci50eXBlP3o9ci5wYXRoOihtPVA/ci54MDpxKHIueDApLHk9Uj9yLnkwOkgoci55MCkseD1QP3IueDE6cShyLngxKSxiPVI/ci55MTpIKHIueTEpKTttPHg/KFQ9bSxDPVwieDBcIixNPXgsTD1cIngxXCIpOihUPXgsQz1cIngxXCIsTT1tLEw9XCJ4MFwiKTshUiYmeTxifHxSJiZ5PmI/KGs9eSxTPVwieTBcIixBPWIsRT1cInkxXCIpOihrPWIsUz1cInkxXCIsQT15LEU9XCJ5MFwiKTtaKG4pLEsocCxyKSxmdW5jdGlvbih0LGUscil7dmFyIG49ZS54cmVmLGk9ZS55cmVmLG89YS5nZXRGcm9tSWQocixuKSxsPWEuZ2V0RnJvbUlkKHIsaSksYz1cIlwiO1wicGFwZXJcIj09PW58fG8uYXV0b3JhbmdlfHwoYys9bik7XCJwYXBlclwiPT09aXx8bC5hdXRvcmFuZ2V8fChjKz1pKTtzLnNldENsaXBVcmwodCxjP1wiY2xpcFwiK3IuX2Z1bGxMYXlvdXQuX3VpZCtjOm51bGwscil9KGUscix0KSxYLm1vdmVGbj1cIm1vdmVcIj09PU8/JDpKfSxkb25lRm46ZnVuY3Rpb24oKXt1KGUpLFEocCksZChlLHQsciksbi5jYWxsKFwiX2d1aVJlbGF5b3V0XCIsdCxOLmdldFVwZGF0ZU9iaigpKX0sY2xpY2tGbjpmdW5jdGlvbigpe1EocCl9fTtmdW5jdGlvbiBaKHQpe2lmKEYpTz1cInBhdGhcIj09PXQudGFyZ2V0LnRhZ05hbWU/XCJtb3ZlXCI6XCJzdGFydC1wb2ludFwiPT09dC50YXJnZXQuYXR0cmlidXRlc1tcImRhdGEtbGluZS1wb2ludFwiXS52YWx1ZT9cInJlc2l6ZS1vdmVyLXN0YXJ0LXBvaW50XCI6XCJyZXNpemUtb3Zlci1lbmQtcG9pbnRcIjtlbHNle3ZhciByPVguZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIucmlnaHQtci5sZWZ0LGk9ci5ib3R0b20tci50b3AsYT10LmNsaWVudFgtci5sZWZ0LG89dC5jbGllbnRZLXIudG9wLHM9IUImJm4+SSYmaT5EJiYhdC5zaGlmdEtleT9jLmdldEN1cnNvcihhL24sMS1vL2kpOlwibW92ZVwiO3UoZSxzKSxPPXMuc3BsaXQoXCItXCIpWzBdfX1mdW5jdGlvbiAkKG4saSl7aWYoXCJwYXRoXCI9PT1yLnR5cGUpe3ZhciBhPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxvPWEscz1hO1A/aihcInhhbmNob3JcIixyLnhhbmNob3I9RyhfK24pKToobz1mdW5jdGlvbih0KXtyZXR1cm4gRyhxKHQpK24pfSxWJiZcImRhdGVcIj09PVYudHlwZSYmKG89Zi5lbmNvZGVEYXRlKG8pKSksUj9qKFwieWFuY2hvclwiLHIueWFuY2hvcj1ZKHcraSkpOihzPWZ1bmN0aW9uKHQpe3JldHVybiBZKEgodCkraSl9LFUmJlwiZGF0ZVwiPT09VS50eXBlJiYocz1mLmVuY29kZURhdGUocykpKSxqKFwicGF0aFwiLHIucGF0aD12KHosbyxzKSl9ZWxzZSBQP2ooXCJ4YW5jaG9yXCIsci54YW5jaG9yPUcoXytuKSk6KGooXCJ4MFwiLHIueDA9RyhtK24pKSxqKFwieDFcIixyLngxPUcoeCtuKSkpLFI/aihcInlhbmNob3JcIixyLnlhbmNob3I9WSh3K2kpKTooaihcInkwXCIsci55MD1ZKHkraSkpLGooXCJ5MVwiLHIueTE9WShiK2kpKSk7ZS5hdHRyKFwiZFwiLGcodCxyKSksSyhwLHIpfWZ1bmN0aW9uIEoobixpKXtpZihCKXt2YXIgYT1mdW5jdGlvbih0KXtyZXR1cm4gdH0sbz1hLHM9YTtQP2ooXCJ4YW5jaG9yXCIsci54YW5jaG9yPUcoXytuKSk6KG89ZnVuY3Rpb24odCl7cmV0dXJuIEcocSh0KStuKX0sViYmXCJkYXRlXCI9PT1WLnR5cGUmJihvPWYuZW5jb2RlRGF0ZShvKSkpLFI/aihcInlhbmNob3JcIixyLnlhbmNob3I9WSh3K2kpKToocz1mdW5jdGlvbih0KXtyZXR1cm4gWShIKHQpK2kpfSxVJiZcImRhdGVcIj09PVUudHlwZSYmKHM9Zi5lbmNvZGVEYXRlKHMpKSksaihcInBhdGhcIixyLnBhdGg9dih6LG8scykpfWVsc2UgaWYoRil7aWYoXCJyZXNpemUtb3Zlci1zdGFydC1wb2ludFwiPT09Tyl7dmFyIGw9bStuLGM9Uj95LWk6eStpO2ooXCJ4MFwiLHIueDA9UD9sOkcobCkpLGooXCJ5MFwiLHIueTA9Uj9jOlkoYykpfWVsc2UgaWYoXCJyZXNpemUtb3Zlci1lbmQtcG9pbnRcIj09PU8pe3ZhciB1PXgrbixoPVI/Yi1pOmIraTtqKFwieDFcIixyLngxPVA/dTpHKHUpKSxqKFwieTFcIixyLnkxPVI/aDpZKGgpKX19ZWxzZXt2YXIgZD1+Ty5pbmRleE9mKFwiblwiKT9rK2k6ayxOPX5PLmluZGV4T2YoXCJzXCIpP0EraTpBLFc9fk8uaW5kZXhPZihcIndcIik/VCtuOlQsWD1+Ty5pbmRleE9mKFwiZVwiKT9NK246TTt+Ty5pbmRleE9mKFwiblwiKSYmUiYmKGQ9ay1pKSx+Ty5pbmRleE9mKFwic1wiKSYmUiYmKE49QS1pKSwoIVImJk4tZD5EfHxSJiZkLU4+RCkmJihqKFMscltTXT1SP2Q6WShkKSksaihFLHJbRV09Uj9OOlkoTikpKSxYLVc+SSYmKGooQyxyW0NdPVA/VzpHKFcpKSxqKEwscltMXT1QP1g6RyhYKSkpfWUuYXR0cihcImRcIixnKHQscikpLEsocCxyKX1mdW5jdGlvbiBLKHQsZSl7KFB8fFIpJiZmdW5jdGlvbigpe3ZhciByPVwicGF0aFwiIT09ZS50eXBlLG49dC5zZWxlY3RBbGwoXCIudmlzdWFsLWN1ZVwiKS5kYXRhKFswXSk7bi5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuYXR0cih7ZmlsbDpcIiNmZmZcIixcImZpbGwtcnVsZVwiOlwiZXZlbm9kZFwiLHN0cm9rZTpcIiMwMDBcIixcInN0cm9rZS13aWR0aFwiOjF9KS5jbGFzc2VkKFwidmlzdWFsLWN1ZVwiLCEwKTt2YXIgYT1xKFA/ZS54YW5jaG9yOmkubWlkUmFuZ2Uocj9bZS54MCxlLngxXTpmLmV4dHJhY3RQYXRoQ29vcmRzKGUucGF0aCxoLnBhcmFtSXNYKSkpLG89SChSP2UueWFuY2hvcjppLm1pZFJhbmdlKHI/W2UueTAsZS55MV06Zi5leHRyYWN0UGF0aENvb3JkcyhlLnBhdGgsaC5wYXJhbUlzWSkpKTtpZihhPWYucm91bmRQb3NpdGlvbkZvclNoYXJwU3Ryb2tlUmVuZGVyaW5nKGEsMSksbz1mLnJvdW5kUG9zaXRpb25Gb3JTaGFycFN0cm9rZVJlbmRlcmluZyhvLDEpLFAmJlIpe3ZhciBzPVwiTVwiKyhhLTEtMSkrXCIsXCIrKG8tMS0xKStcImgtOHYyaDggdjhoMnYtOCBoOHYtMmgtOCB2LThoLTIgWlwiO24uYXR0cihcImRcIixzKX1lbHNlIGlmKFApe3ZhciBsPVwiTVwiKyhhLTEtMSkrXCIsXCIrKG8tOS0xKStcInYxOCBoMiB2LTE4IFpcIjtuLmF0dHIoXCJkXCIsbCl9ZWxzZXt2YXIgYz1cIk1cIisoYS05LTEpK1wiLFwiKyhvLTEtMSkrXCJoMTggdjIgaC0xOCBaXCI7bi5hdHRyKFwiZFwiLGMpfX0oKX1mdW5jdGlvbiBRKHQpe3Quc2VsZWN0QWxsKFwiLnZpc3VhbC1jdWVcIikucmVtb3ZlKCl9Yy5pbml0KFgpLFcubm9kZSgpLm9ubW91c2Vtb3ZlPVp9KHQseCxyLGUscCl9fWZ1bmN0aW9uIGQodCxlLHIpe3ZhciBuPShyLnhyZWYrci55cmVmKS5yZXBsYWNlKC9wYXBlci9nLFwiXCIpO3Muc2V0Q2xpcFVybCh0LG4/XCJjbGlwXCIrZS5fZnVsbExheW91dC5fdWlkK246bnVsbCxlKX1mdW5jdGlvbiBnKHQsZSl7dmFyIHIsbixvLHMsbCxjLHUscCxkPWUudHlwZSxnPWEuZ2V0RnJvbUlkKHQsZS54cmVmKSx2PWEuZ2V0RnJvbUlkKHQsZS55cmVmKSxtPXQuX2Z1bGxMYXlvdXQuX3NpemU7aWYoZz8ocj1mLnNoYXBlUG9zaXRpb25Ub1JhbmdlKGcpLG49ZnVuY3Rpb24odCl7cmV0dXJuIGcuX29mZnNldCtnLnIycChyKHQsITApKX0pOm49ZnVuY3Rpb24odCl7cmV0dXJuIG0ubCttLncqdH0sdj8obz1mLnNoYXBlUG9zaXRpb25Ub1JhbmdlKHYpLHM9ZnVuY3Rpb24odCl7cmV0dXJuIHYuX29mZnNldCt2LnIycChvKHQsITApKX0pOnM9ZnVuY3Rpb24odCl7cmV0dXJuIG0udCttLmgqKDEtdCl9LFwicGF0aFwiPT09ZClyZXR1cm4gZyYmXCJkYXRlXCI9PT1nLnR5cGUmJihuPWYuZGVjb2RlRGF0ZShuKSksdiYmXCJkYXRlXCI9PT12LnR5cGUmJihzPWYuZGVjb2RlRGF0ZShzKSksZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQucGF0aCxhPXQueHNpemVtb2RlLG89dC55c2l6ZW1vZGUscz10LnhhbmNob3IsbD10LnlhbmNob3I7cmV0dXJuIG4ucmVwbGFjZShoLnNlZ21lbnRSRSxmdW5jdGlvbih0KXt2YXIgbj0wLGM9dC5jaGFyQXQoMCksdT1oLnBhcmFtSXNYW2NdLGY9aC5wYXJhbUlzWVtjXSxwPWgubnVtUGFyYW1zW2NdLGQ9dC5zdWJzdHIoMSkucmVwbGFjZShoLnBhcmFtUkUsZnVuY3Rpb24odCl7cmV0dXJuIHVbbl0/dD1cInBpeGVsXCI9PT1hP2UocykrTnVtYmVyKHQpOmUodCk6ZltuXSYmKHQ9XCJwaXhlbFwiPT09bz9yKGwpLU51bWJlcih0KTpyKHQpKSwrK24+cCYmKHQ9XCJYXCIpLHR9KTtyZXR1cm4gbj5wJiYoZD1kLnJlcGxhY2UoL1tcXHMsXSpYLiovLFwiXCIpLGkubG9nKFwiSWdub3JpbmcgZXh0cmEgcGFyYW1zIGluIHNlZ21lbnQgXCIrdCkpLGMrZH0pfShlLG4scyk7aWYoXCJwaXhlbFwiPT09ZS54c2l6ZW1vZGUpe3ZhciB5PW4oZS54YW5jaG9yKTtsPXkrZS54MCxjPXkrZS54MX1lbHNlIGw9bihlLngwKSxjPW4oZS54MSk7aWYoXCJwaXhlbFwiPT09ZS55c2l6ZW1vZGUpe3ZhciB4PXMoZS55YW5jaG9yKTt1PXgtZS55MCxwPXgtZS55MX1lbHNlIHU9cyhlLnkwKSxwPXMoZS55MSk7aWYoXCJsaW5lXCI9PT1kKXJldHVyblwiTVwiK2wrXCIsXCIrdStcIkxcIitjK1wiLFwiK3A7aWYoXCJyZWN0XCI9PT1kKXJldHVyblwiTVwiK2wrXCIsXCIrdStcIkhcIitjK1wiVlwiK3ArXCJIXCIrbCtcIlpcIjt2YXIgYj0obCtjKS8yLF89KHUrcCkvMix3PU1hdGguYWJzKGItbCksaz1NYXRoLmFicyhfLXUpLEE9XCJBXCIrdytcIixcIitrLFQ9Yit3K1wiLFwiK187cmV0dXJuXCJNXCIrVCtBK1wiIDAgMSwxIFwiKyhiK1wiLFwiKyhfLWspKStBK1wiIDAgMCwxIFwiK1QrXCJaXCJ9ZnVuY3Rpb24gdih0LGUscil7cmV0dXJuIHQucmVwbGFjZShoLnNlZ21lbnRSRSxmdW5jdGlvbih0KXt2YXIgbj0wLGk9dC5jaGFyQXQoMCksYT1oLnBhcmFtSXNYW2ldLG89aC5wYXJhbUlzWVtpXSxzPWgubnVtUGFyYW1zW2ldO3JldHVybiBpK3Quc3Vic3RyKDEpLnJlcGxhY2UoaC5wYXJhbVJFLGZ1bmN0aW9uKHQpe3JldHVybiBuPj1zP3Q6KGFbbl0/dD1lKHQpOm9bbl0mJih0PXIodCkpLG4rKyx0KX0pfSl9ZS5leHBvcnRzPXtkcmF3OmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7Zm9yKHZhciByIGluIGUuX3NoYXBlVXBwZXJMYXllci5zZWxlY3RBbGwoXCJwYXRoXCIpLnJlbW92ZSgpLGUuX3NoYXBlTG93ZXJMYXllci5zZWxlY3RBbGwoXCJwYXRoXCIpLnJlbW92ZSgpLGUuX3Bsb3RzKXt2YXIgbj1lLl9wbG90c1tyXS5zaGFwZWxheWVyO24mJm4uc2VsZWN0QWxsKFwicGF0aFwiKS5yZW1vdmUoKX1mb3IodmFyIGk9MDtpPGUuc2hhcGVzLmxlbmd0aDtpKyspZS5zaGFwZXNbaV0udmlzaWJsZSYmcCh0LGkpfSxkcmF3T25lOnB9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvc2V0Y3Vyc29yXCI6NzIxLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9jb2xvclwiOjU3OCxcIi4uL2RyYWdlbGVtZW50XCI6NTk2LFwiLi4vZHJhd2luZ1wiOjU5OSxcIi4vY29uc3RhbnRzXCI6NjU2LFwiLi9oZWxwZXJzXCI6NjU5fV0sNjU5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vY29uc3RhbnRzXCIpLGk9dChcIi4uLy4uL2xpYlwiKTtyLnJhbmdlVG9TaGFwZVBvc2l0aW9uPWZ1bmN0aW9uKHQpe3JldHVyblwibG9nXCI9PT10LnR5cGU/dC5yMmQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSxyLnNoYXBlUG9zaXRpb25Ub1JhbmdlPWZ1bmN0aW9uKHQpe3JldHVyblwibG9nXCI9PT10LnR5cGU/dC5kMnI6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSxyLmRlY29kZURhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UmJihlPWUucmVwbGFjZShcIl9cIixcIiBcIikpLHQoZSl9fSxyLmVuY29kZURhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpLnJlcGxhY2UoXCIgXCIsXCJfXCIpfX0sci5leHRyYWN0UGF0aENvb3Jkcz1mdW5jdGlvbih0LGUpe3ZhciByPVtdO3JldHVybiB0Lm1hdGNoKG4uc2VnbWVudFJFKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBhPWVbdC5jaGFyQXQoMCldLmRyYXduO2lmKHZvaWQgMCE9PWEpe3ZhciBvPXQuc3Vic3RyKDEpLm1hdGNoKG4ucGFyYW1SRSk7IW98fG8ubGVuZ3RoPGF8fHIucHVzaChpLmNsZWFuTnVtYmVyKG9bYV0pKX19KSxyfSxyLmdldERhdGFUb1BpeGVsPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhPXQuX2Z1bGxMYXlvdXQuX3NpemU7aWYoZSl7dmFyIG89ci5zaGFwZVBvc2l0aW9uVG9SYW5nZShlKTtpPWZ1bmN0aW9uKHQpe3JldHVybiBlLl9vZmZzZXQrZS5yMnAobyh0LCEwKSl9LFwiZGF0ZVwiPT09ZS50eXBlJiYoaT1yLmRlY29kZURhdGUoaSkpfWVsc2UgaT1uP2Z1bmN0aW9uKHQpe3JldHVybiBhLnQrYS5oKigxLXQpfTpmdW5jdGlvbih0KXtyZXR1cm4gYS5sK2Eudyp0fTtyZXR1cm4gaX0sci5nZXRQaXhlbFRvRGF0YT1mdW5jdGlvbih0LGUsbil7dmFyIGksYT10Ll9mdWxsTGF5b3V0Ll9zaXplO2lmKGUpe3ZhciBvPXIucmFuZ2VUb1NoYXBlUG9zaXRpb24oZSk7aT1mdW5jdGlvbih0KXtyZXR1cm4gbyhlLnAycih0LWUuX29mZnNldCkpfX1lbHNlIGk9bj9mdW5jdGlvbih0KXtyZXR1cm4gMS0odC1hLnQpL2EuaH06ZnVuY3Rpb24odCl7cmV0dXJuKHQtYS5sKS9hLnd9O3JldHVybiBpfSxyLnJvdW5kUG9zaXRpb25Gb3JTaGFycFN0cm9rZVJlbmRlcmluZz1mdW5jdGlvbih0LGUpe3ZhciByPTE9PT1NYXRoLnJvdW5kKGUlMiksbj1NYXRoLnJvdW5kKHQpO3JldHVybiByP24rLjU6bn19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4vY29uc3RhbnRzXCI6NjU2fV0sNjYwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vZHJhd1wiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6XCJjb21wb25lbnRcIixuYW1lOlwic2hhcGVzXCIsbGF5b3V0QXR0cmlidXRlczp0KFwiLi9hdHRyaWJ1dGVzXCIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoXCIuL2RlZmF1bHRzXCIpLGluY2x1ZGVCYXNlUGxvdDp0KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2luY2x1ZGVfY29tcG9uZW50c1wiKShcInNoYXBlc1wiKSxjYWxjQXV0b3JhbmdlOnQoXCIuL2NhbGNfYXV0b3JhbmdlXCIpLGRyYXc6bi5kcmF3LGRyYXdPbmU6bi5kcmF3T25lfX0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2luY2x1ZGVfY29tcG9uZW50c1wiOjc1OSxcIi4vYXR0cmlidXRlc1wiOjY1NCxcIi4vY2FsY19hdXRvcmFuZ2VcIjo2NTUsXCIuL2RlZmF1bHRzXCI6NjU3LFwiLi9kcmF3XCI6NjU4fV0sNjYxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZERlZXBBbGwsbz10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbCxzPXQoXCIuLi8uLi9wbG90cy9hbmltYXRpb25fYXR0cmlidXRlc1wiKSxsPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLnRlbXBsYXRlZEFycmF5LGM9dChcIi4vY29uc3RhbnRzXCIpLHU9bChcInN0ZXBcIix7dmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfSxtZXRob2Q6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInJlc3R5bGVcIixcInJlbGF5b3V0XCIsXCJhbmltYXRlXCIsXCJ1cGRhdGVcIixcInNraXBcIl0sZGZsdDpcInJlc3R5bGVcIn0sYXJnczp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixmcmVlTGVuZ3RoOiEwLGl0ZW1zOlt7dmFsVHlwZTpcImFueVwifSx7dmFsVHlwZTpcImFueVwifSx7dmFsVHlwZTpcImFueVwifV19LGxhYmVsOnt2YWxUeXBlOlwic3RyaW5nXCJ9LHZhbHVlOnt2YWxUeXBlOlwic3RyaW5nXCJ9LGV4ZWN1dGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMH19KTtlLmV4cG9ydHM9byhsKFwic2xpZGVyXCIse3Zpc2libGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMH0sYWN0aXZlOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDowfSxzdGVwczp1LGxlbm1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImZyYWN0aW9uXCIsXCJwaXhlbHNcIl0sZGZsdDpcImZyYWN0aW9uXCJ9LGxlbjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MX0seDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjotMixtYXg6MyxkZmx0OjB9LHBhZDphKGkoe2VkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9KSx7fSx7dDp7ZGZsdDoyMH19KSx4YW5jaG9yOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhdXRvXCIsXCJsZWZ0XCIsXCJjZW50ZXJcIixcInJpZ2h0XCJdLGRmbHQ6XCJsZWZ0XCJ9LHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46LTIsbWF4OjMsZGZsdDowfSx5YW5jaG9yOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhdXRvXCIsXCJ0b3BcIixcIm1pZGRsZVwiLFwiYm90dG9tXCJdLGRmbHQ6XCJ0b3BcIn0sdHJhbnNpdGlvbjp7ZHVyYXRpb246e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjE1MH0sZWFzaW5nOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpzLnRyYW5zaXRpb24uZWFzaW5nLnZhbHVlcyxkZmx0OlwiY3ViaWMtaW4tb3V0XCJ9fSxjdXJyZW50dmFsdWU6e3Zpc2libGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMH0seGFuY2hvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibGVmdFwiLFwiY2VudGVyXCIsXCJyaWdodFwiXSxkZmx0OlwibGVmdFwifSxvZmZzZXQ6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjEwfSxwcmVmaXg6e3ZhbFR5cGU6XCJzdHJpbmdcIn0sc3VmZml4Ont2YWxUeXBlOlwic3RyaW5nXCJ9LGZvbnQ6bih7fSl9LGZvbnQ6bih7fSksYWN0aXZlYmdjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDpjLmdyaXBCZ0FjdGl2ZUNvbG9yfSxiZ2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmMucmFpbEJnQ29sb3J9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmMucmFpbEJvcmRlckNvbG9yfSxib3JkZXJ3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6Yy5yYWlsQm9yZGVyV2lkdGh9LHRpY2tsZW46e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OmMudGlja0xlbmd0aH0sdGlja2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmMudGlja0NvbG9yfSx0aWNrd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjF9LG1pbm9ydGlja2xlbjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6Yy5taW5vclRpY2tMZW5ndGh9fSksXCJhcnJheWRyYXdcIixcImZyb20tcm9vdFwiKX0se1wiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vcGxvdHMvYW5pbWF0aW9uX2F0dHJpYnV0ZXNcIjo3NDQsXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIjo3NzUsXCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlc1wiOjgwOSxcIi4vY29uc3RhbnRzXCI6NjYyfV0sNjYyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtuYW1lOlwic2xpZGVyc1wiLGNvbnRhaW5lckNsYXNzTmFtZTpcInNsaWRlci1jb250YWluZXJcIixncm91cENsYXNzTmFtZTpcInNsaWRlci1ncm91cFwiLGlucHV0QXJlYUNsYXNzOlwic2xpZGVyLWlucHV0LWFyZWFcIixyYWlsUmVjdENsYXNzOlwic2xpZGVyLXJhaWwtcmVjdFwiLHJhaWxUb3VjaFJlY3RDbGFzczpcInNsaWRlci1yYWlsLXRvdWNoLXJlY3RcIixncmlwUmVjdENsYXNzOlwic2xpZGVyLWdyaXAtcmVjdFwiLHRpY2tSZWN0Q2xhc3M6XCJzbGlkZXItdGljay1yZWN0XCIsaW5wdXRQcm94eUNsYXNzOlwic2xpZGVyLWlucHV0LXByb3h5XCIsbGFiZWxzQ2xhc3M6XCJzbGlkZXItbGFiZWxzXCIsbGFiZWxHcm91cENsYXNzOlwic2xpZGVyLWxhYmVsLWdyb3VwXCIsbGFiZWxDbGFzczpcInNsaWRlci1sYWJlbFwiLGN1cnJlbnRWYWx1ZUNsYXNzOlwic2xpZGVyLWN1cnJlbnQtdmFsdWVcIixyYWlsSGVpZ2h0OjUsbWVudUluZGV4QXR0ck5hbWU6XCJzbGlkZXItYWN0aXZlLWluZGV4XCIsYXV0b01hcmdpbklkUm9vdDpcInNsaWRlci1cIixtaW5XaWR0aDozMCxtaW5IZWlnaHQ6MzAsdGV4dFBhZFg6NDAsYXJyb3dPZmZzZXRYOjQscmFpbFJhZGl1czoyLHJhaWxXaWR0aDo1LHJhaWxCb3JkZXI6NCxyYWlsQm9yZGVyV2lkdGg6MSxyYWlsQm9yZGVyQ29sb3I6XCIjYmVjOGQ5XCIscmFpbEJnQ29sb3I6XCIjZjhmYWZjXCIscmFpbEluc2V0Ojgsc3RlcEluc2V0OjEwLGdyaXBSYWRpdXM6MTAsZ3JpcFdpZHRoOjIwLGdyaXBIZWlnaHQ6MjAsZ3JpcEJvcmRlcjoyMCxncmlwQm9yZGVyV2lkdGg6MSxncmlwQm9yZGVyQ29sb3I6XCIjYmVjOGQ5XCIsZ3JpcEJnQ29sb3I6XCIjZjZmOGZhXCIsZ3JpcEJnQWN0aXZlQ29sb3I6XCIjZGJkZGUwXCIsbGFiZWxQYWRkaW5nOjgsbGFiZWxPZmZzZXQ6MCx0aWNrV2lkdGg6MSx0aWNrQ29sb3I6XCIjMzMzXCIsdGlja09mZnNldDoyNSx0aWNrTGVuZ3RoOjcsbWlub3JUaWNrT2Zmc2V0OjI1LG1pbm9yVGlja0NvbG9yOlwiIzMzM1wiLG1pbm9yVGlja0xlbmd0aDo0LGN1cnJlbnRWYWx1ZVBhZGRpbmc6OCxjdXJyZW50VmFsdWVJbnNldDowfX0se31dLDY2MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCIpLGE9dChcIi4vYXR0cmlidXRlc1wiKSxvPXQoXCIuL2NvbnN0YW50c1wiKS5uYW1lLHM9YS5zdGVwcztmdW5jdGlvbiBsKHQsZSxyKXtmdW5jdGlvbiBvKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9Zm9yKHZhciBzPWkodCxlLHtuYW1lOlwic3RlcHNcIixoYW5kbGVJdGVtRGVmYXVsdHM6Y30pLGw9MCx1PTA7dTxzLmxlbmd0aDt1Kyspc1t1XS52aXNpYmxlJiZsKys7aWYobDwyP2UudmlzaWJsZT0hMTpvKFwidmlzaWJsZVwiKSl7ZS5fc3RlcENvdW50PWw7dmFyIGg9ZS5fdmlzaWJsZVN0ZXBzPW4uZmlsdGVyVmlzaWJsZShzKTsoc1tvKFwiYWN0aXZlXCIpXXx8e30pLnZpc2libGV8fChlLmFjdGl2ZT1oWzBdLl9pbmRleCksbyhcInhcIiksbyhcInlcIiksbi5ub25lT3JBbGwodCxlLFtcInhcIixcInlcIl0pLG8oXCJ4YW5jaG9yXCIpLG8oXCJ5YW5jaG9yXCIpLG8oXCJsZW5cIiksbyhcImxlbm1vZGVcIiksbyhcInBhZC50XCIpLG8oXCJwYWQuclwiKSxvKFwicGFkLmJcIiksbyhcInBhZC5sXCIpLG4uY29lcmNlRm9udChvLFwiZm9udFwiLHIuZm9udCksbyhcImN1cnJlbnR2YWx1ZS52aXNpYmxlXCIpJiYobyhcImN1cnJlbnR2YWx1ZS54YW5jaG9yXCIpLG8oXCJjdXJyZW50dmFsdWUucHJlZml4XCIpLG8oXCJjdXJyZW50dmFsdWUuc3VmZml4XCIpLG8oXCJjdXJyZW50dmFsdWUub2Zmc2V0XCIpLG4uY29lcmNlRm9udChvLFwiY3VycmVudHZhbHVlLmZvbnRcIixlLmZvbnQpKSxvKFwidHJhbnNpdGlvbi5kdXJhdGlvblwiKSxvKFwidHJhbnNpdGlvbi5lYXNpbmdcIiksbyhcImJnY29sb3JcIiksbyhcImFjdGl2ZWJnY29sb3JcIiksbyhcImJvcmRlcmNvbG9yXCIpLG8oXCJib3JkZXJ3aWR0aFwiKSxvKFwidGlja2xlblwiKSxvKFwidGlja3dpZHRoXCIpLG8oXCJ0aWNrY29sb3JcIiksbyhcIm1pbm9ydGlja2xlblwiKX19ZnVuY3Rpb24gYyh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1pZihcInNraXBcIj09PXQubWV0aG9kfHxBcnJheS5pc0FycmF5KHQuYXJncyk/cihcInZpc2libGVcIik6ZS52aXNpYmxlPSExKXtyKFwibWV0aG9kXCIpLHIoXCJhcmdzXCIpO3ZhciBpPXIoXCJsYWJlbFwiLFwic3RlcC1cIitlLl9pbmRleCk7cihcInZhbHVlXCIsaSkscihcImV4ZWN1dGVcIil9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2kodCxlLHtuYW1lOm8saGFuZGxlSXRlbURlZmF1bHRzOmx9KX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0c1wiOjc0NSxcIi4vYXR0cmlidXRlc1wiOjY2MSxcIi4vY29uc3RhbnRzXCI6NjYyfV0sNjY0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL3Bsb3RzL3Bsb3RzXCIpLGE9dChcIi4uL2NvbG9yXCIpLG89dChcIi4uL2RyYXdpbmdcIikscz10KFwiLi4vLi4vbGliXCIpLGw9dChcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiKSxjPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLmFycmF5RWRpdG9yLHU9dChcIi4vY29uc3RhbnRzXCIpLGg9dChcIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIiksZj1oLkxJTkVfU1BBQ0lORyxwPWguRlJPTV9UTCxkPWguRlJPTV9CUjtmdW5jdGlvbiBnKHQpe3JldHVybiB1LmF1dG9NYXJnaW5JZFJvb3QrdC5faW5kZXh9ZnVuY3Rpb24gdih0KXtyZXR1cm4gdC5faW5kZXh9ZnVuY3Rpb24gbSh0LGUpe3ZhciByPW8udGVzdGVyLnNlbGVjdEFsbChcImcuXCIrdS5sYWJlbEdyb3VwQ2xhc3MpLmRhdGEoZS5fdmlzaWJsZVN0ZXBzKTtyLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKHUubGFiZWxHcm91cENsYXNzLCEwKTt2YXIgYT0wLGM9MDtyLmVhY2goZnVuY3Rpb24odCl7dmFyIHI9YihuLnNlbGVjdCh0aGlzKSx7c3RlcDp0fSxlKS5ub2RlKCk7aWYocil7dmFyIGk9by5iQm94KHIpO2M9TWF0aC5tYXgoYyxpLmhlaWdodCksYT1NYXRoLm1heChhLGkud2lkdGgpfX0pLHIucmVtb3ZlKCk7dmFyIGg9ZS5fZGltcz17fTtoLmlucHV0QXJlYVdpZHRoPU1hdGgubWF4KHUucmFpbFdpZHRoLHUuZ3JpcEhlaWdodCk7dmFyIGY9dC5fZnVsbExheW91dC5fc2l6ZTtoLmx4PWYubCtmLncqZS54LGgubHk9Zi50K2YuaCooMS1lLnkpLFwiZnJhY3Rpb25cIj09PWUubGVubW9kZT9oLm91dGVyTGVuZ3RoPU1hdGgucm91bmQoZi53KmUubGVuKTpoLm91dGVyTGVuZ3RoPWUubGVuLGguaW5wdXRBcmVhU3RhcnQ9MCxoLmlucHV0QXJlYUxlbmd0aD1NYXRoLnJvdW5kKGgub3V0ZXJMZW5ndGgtZS5wYWQubC1lLnBhZC5yKTt2YXIgdj0oaC5pbnB1dEFyZWFMZW5ndGgtMip1LnN0ZXBJbnNldCkvKGUuX3N0ZXBDb3VudC0xKSxtPWErdS5sYWJlbFBhZGRpbmc7aWYoaC5sYWJlbFN0cmlkZT1NYXRoLm1heCgxLE1hdGguY2VpbChtL3YpKSxoLmxhYmVsSGVpZ2h0PWMsaC5jdXJyZW50VmFsdWVNYXhXaWR0aD0wLGguY3VycmVudFZhbHVlSGVpZ2h0PTAsaC5jdXJyZW50VmFsdWVUb3RhbEhlaWdodD0wLGguY3VycmVudFZhbHVlTWF4TGluZXM9MSxlLmN1cnJlbnR2YWx1ZS52aXNpYmxlKXt2YXIgeD1vLnRlc3Rlci5hcHBlbmQoXCJnXCIpO3IuZWFjaChmdW5jdGlvbih0KXt2YXIgcj15KHgsZSx0LmxhYmVsKSxuPXIubm9kZSgpJiZvLmJCb3goci5ub2RlKCkpfHx7d2lkdGg6MCxoZWlnaHQ6MH0saT1sLmxpbmVDb3VudChyKTtoLmN1cnJlbnRWYWx1ZU1heFdpZHRoPU1hdGgubWF4KGguY3VycmVudFZhbHVlTWF4V2lkdGgsTWF0aC5jZWlsKG4ud2lkdGgpKSxoLmN1cnJlbnRWYWx1ZUhlaWdodD1NYXRoLm1heChoLmN1cnJlbnRWYWx1ZUhlaWdodCxNYXRoLmNlaWwobi5oZWlnaHQpKSxoLmN1cnJlbnRWYWx1ZU1heExpbmVzPU1hdGgubWF4KGguY3VycmVudFZhbHVlTWF4TGluZXMsaSl9KSxoLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0PWguY3VycmVudFZhbHVlSGVpZ2h0K2UuY3VycmVudHZhbHVlLm9mZnNldCx4LnJlbW92ZSgpfWguaGVpZ2h0PWguY3VycmVudFZhbHVlVG90YWxIZWlnaHQrdS50aWNrT2Zmc2V0K2UudGlja2xlbit1LmxhYmVsT2Zmc2V0K2gubGFiZWxIZWlnaHQrZS5wYWQudCtlLnBhZC5iO3ZhciBfPVwibGVmdFwiO3MuaXNSaWdodEFuY2hvcihlKSYmKGgubHgtPWgub3V0ZXJMZW5ndGgsXz1cInJpZ2h0XCIpLHMuaXNDZW50ZXJBbmNob3IoZSkmJihoLmx4LT1oLm91dGVyTGVuZ3RoLzIsXz1cImNlbnRlclwiKTt2YXIgdz1cInRvcFwiO3MuaXNCb3R0b21BbmNob3IoZSkmJihoLmx5LT1oLmhlaWdodCx3PVwiYm90dG9tXCIpLHMuaXNNaWRkbGVBbmNob3IoZSkmJihoLmx5LT1oLmhlaWdodC8yLHc9XCJtaWRkbGVcIiksaC5vdXRlckxlbmd0aD1NYXRoLmNlaWwoaC5vdXRlckxlbmd0aCksaC5oZWlnaHQ9TWF0aC5jZWlsKGguaGVpZ2h0KSxoLmx4PU1hdGgucm91bmQoaC5seCksaC5seT1NYXRoLnJvdW5kKGgubHkpO3ZhciBrPXt5OmUueSxiOmguaGVpZ2h0KmRbd10sdDpoLmhlaWdodCpwW3ddfTtcImZyYWN0aW9uXCI9PT1lLmxlbm1vZGU/KGsubD0wLGsueGw9ZS54LWUubGVuKnBbX10say5yPTAsay54cj1lLngrZS5sZW4qZFtfXSk6KGsueD1lLngsay5sPWgub3V0ZXJMZW5ndGgqcFtfXSxrLnI9aC5vdXRlckxlbmd0aCpkW19dKSxpLmF1dG9NYXJnaW4odCxnKGUpLGspfWZ1bmN0aW9uIHkodCxlLHIpe2lmKGUuY3VycmVudHZhbHVlLnZpc2libGUpe3ZhciBuLGksYT1lLl9kaW1zO3N3aXRjaChlLmN1cnJlbnR2YWx1ZS54YW5jaG9yKXtjYXNlXCJyaWdodFwiOm49YS5pbnB1dEFyZWFMZW5ndGgtdS5jdXJyZW50VmFsdWVJbnNldC1hLmN1cnJlbnRWYWx1ZU1heFdpZHRoLGk9XCJsZWZ0XCI7YnJlYWs7Y2FzZVwiY2VudGVyXCI6bj0uNSphLmlucHV0QXJlYUxlbmd0aCxpPVwibWlkZGxlXCI7YnJlYWs7ZGVmYXVsdDpuPXUuY3VycmVudFZhbHVlSW5zZXQsaT1cImxlZnRcIn12YXIgYz1zLmVuc3VyZVNpbmdsZSh0LFwidGV4dFwiLHUubGFiZWxDbGFzcyxmdW5jdGlvbih0KXt0LmNsYXNzZWQoXCJ1c2VyLXNlbGVjdC1ub25lXCIsITApLmF0dHIoe1widGV4dC1hbmNob3JcIjppLFwiZGF0YS1ub3RleFwiOjF9KX0pLGg9ZS5jdXJyZW50dmFsdWUucHJlZml4P2UuY3VycmVudHZhbHVlLnByZWZpeDpcIlwiO2lmKFwic3RyaW5nXCI9PXR5cGVvZiByKWgrPXI7ZWxzZXt2YXIgcD1lLnN0ZXBzW2UuYWN0aXZlXS5sYWJlbCxkPWUuX2dkLl9mdWxsTGF5b3V0Lm1ldGE7ZCYmKHA9cy50ZW1wbGF0ZVN0cmluZyhwLHttZXRhOmR9KSksaCs9cH1lLmN1cnJlbnR2YWx1ZS5zdWZmaXgmJihoKz1lLmN1cnJlbnR2YWx1ZS5zdWZmaXgpLGMuY2FsbChvLmZvbnQsZS5jdXJyZW50dmFsdWUuZm9udCkudGV4dChoKS5jYWxsKGwuY29udmVydFRvVHNwYW5zLGUuX2dkKTt2YXIgZz1sLmxpbmVDb3VudChjKSx2PShhLmN1cnJlbnRWYWx1ZU1heExpbmVzKzEtZykqZS5jdXJyZW50dmFsdWUuZm9udC5zaXplKmY7cmV0dXJuIGwucG9zaXRpb25UZXh0KGMsbix2KSxjfX1mdW5jdGlvbiB4KHQsZSxyKXtzLmVuc3VyZVNpbmdsZSh0LFwicmVjdFwiLHUuZ3JpcFJlY3RDbGFzcyxmdW5jdGlvbihuKXtuLmNhbGwoQSxlLHQscikuc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpfSkuYXR0cih7d2lkdGg6dS5ncmlwV2lkdGgsaGVpZ2h0OnUuZ3JpcEhlaWdodCxyeDp1LmdyaXBSYWRpdXMscnk6dS5ncmlwUmFkaXVzfSkuY2FsbChhLnN0cm9rZSxyLmJvcmRlcmNvbG9yKS5jYWxsKGEuZmlsbCxyLmJnY29sb3IpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsci5ib3JkZXJ3aWR0aCtcInB4XCIpfWZ1bmN0aW9uIGIodCxlLHIpe3ZhciBuPXMuZW5zdXJlU2luZ2xlKHQsXCJ0ZXh0XCIsdS5sYWJlbENsYXNzLGZ1bmN0aW9uKHQpe3QuY2xhc3NlZChcInVzZXItc2VsZWN0LW5vbmVcIiwhMCkuYXR0cih7XCJ0ZXh0LWFuY2hvclwiOlwibWlkZGxlXCIsXCJkYXRhLW5vdGV4XCI6MX0pfSksaT1lLnN0ZXAubGFiZWwsYT1yLl9nZC5fZnVsbExheW91dC5tZXRhO3JldHVybiBhJiYoaT1zLnRlbXBsYXRlU3RyaW5nKGkse21ldGE6YX0pKSxuLmNhbGwoby5mb250LHIuZm9udCkudGV4dChpKS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHIuX2dkKSxufWZ1bmN0aW9uIF8odCxlKXt2YXIgcj1zLmVuc3VyZVNpbmdsZSh0LFwiZ1wiLHUubGFiZWxzQ2xhc3MpLGk9ZS5fZGltcyxhPXIuc2VsZWN0QWxsKFwiZy5cIit1LmxhYmVsR3JvdXBDbGFzcykuZGF0YShpLmxhYmVsU3RlcHMpO2EuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQodS5sYWJlbEdyb3VwQ2xhc3MsITApLGEuZXhpdCgpLnJlbW92ZSgpLGEuZWFjaChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtyLmNhbGwoYix0LGUpLG8uc2V0VHJhbnNsYXRlKHIsUyhlLHQuZnJhY3Rpb24pLHUudGlja09mZnNldCtlLnRpY2tsZW4rZS5mb250LnNpemUqZit1LmxhYmVsT2Zmc2V0K2kuY3VycmVudFZhbHVlVG90YWxIZWlnaHQpfSl9ZnVuY3Rpb24gdyh0LGUscixuLGkpe3ZhciBhPU1hdGgucm91bmQobiooci5fc3RlcENvdW50LTEpKSxvPXIuX3Zpc2libGVTdGVwc1thXS5faW5kZXg7byE9PXIuYWN0aXZlJiZrKHQsZSxyLG8sITAsaSl9ZnVuY3Rpb24gayh0LGUscixuLGEsbyl7dmFyIHM9ci5hY3RpdmU7ci5hY3RpdmU9bixjKHQubGF5b3V0LHUubmFtZSxyKS5hcHBseVVwZGF0ZShcImFjdGl2ZVwiLG4pO3ZhciBsPXIuc3RlcHNbci5hY3RpdmVdO2UuY2FsbChNLHIsbyksZS5jYWxsKHksciksdC5lbWl0KFwicGxvdGx5X3NsaWRlcmNoYW5nZVwiLHtzbGlkZXI6cixzdGVwOnIuc3RlcHNbci5hY3RpdmVdLGludGVyYWN0aW9uOmEscHJldmlvdXNBY3RpdmU6c30pLGwmJmwubWV0aG9kJiZhJiYoZS5fbmV4dE1ldGhvZD8oZS5fbmV4dE1ldGhvZC5zdGVwPWwsZS5fbmV4dE1ldGhvZC5kb0NhbGxiYWNrPWEsZS5fbmV4dE1ldGhvZC5kb1RyYW5zaXRpb249byk6KGUuX25leHRNZXRob2Q9e3N0ZXA6bCxkb0NhbGxiYWNrOmEsZG9UcmFuc2l0aW9uOm99LGUuX25leHRNZXRob2RSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3ZhciByPWUuX25leHRNZXRob2Quc3RlcDtyLm1ldGhvZCYmKHIuZXhlY3V0ZSYmaS5leGVjdXRlQVBJQ29tbWFuZCh0LHIubWV0aG9kLHIuYXJncyksZS5fbmV4dE1ldGhvZD1udWxsLGUuX25leHRNZXRob2RSYWY9bnVsbCl9KSkpfWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBpPXIubm9kZSgpLG89bi5zZWxlY3QoZSk7ZnVuY3Rpb24gcygpe3JldHVybiByLmRhdGEoKVswXX10Lm9uKFwibW91c2Vkb3duXCIsZnVuY3Rpb24oKXt2YXIgdD1zKCk7ZS5lbWl0KFwicGxvdGx5X3NsaWRlcnN0YXJ0XCIse3NsaWRlcjp0fSk7dmFyIGw9ci5zZWxlY3QoXCIuXCIrdS5ncmlwUmVjdENsYXNzKTtuLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLG4uZXZlbnQucHJldmVudERlZmF1bHQoKSxsLmNhbGwoYS5maWxsLHQuYWN0aXZlYmdjb2xvcik7dmFyIGM9RSh0LG4ubW91c2UoaSlbMF0pO3coZSxyLHQsYywhMCksdC5fZHJhZ2dpbmc9ITAsby5vbihcIm1vdXNlbW92ZVwiLGZ1bmN0aW9uKCl7dmFyIHQ9cygpLGE9RSh0LG4ubW91c2UoaSlbMF0pO3coZSxyLHQsYSwhMSl9KSxvLm9uKFwibW91c2V1cFwiLGZ1bmN0aW9uKCl7dmFyIHQ9cygpO3QuX2RyYWdnaW5nPSExLGwuY2FsbChhLmZpbGwsdC5iZ2NvbG9yKSxvLm9uKFwibW91c2V1cFwiLG51bGwpLG8ub24oXCJtb3VzZW1vdmVcIixudWxsKSxlLmVtaXQoXCJwbG90bHlfc2xpZGVyZW5kXCIse3NsaWRlcjp0LHN0ZXA6dC5zdGVwc1t0LmFjdGl2ZV19KX0pfSl9ZnVuY3Rpb24gVCh0LGUpe3ZhciByPXQuc2VsZWN0QWxsKFwicmVjdC5cIit1LnRpY2tSZWN0Q2xhc3MpLmRhdGEoZS5fdmlzaWJsZVN0ZXBzKSxpPWUuX2RpbXM7ci5lbnRlcigpLmFwcGVuZChcInJlY3RcIikuY2xhc3NlZCh1LnRpY2tSZWN0Q2xhc3MsITApLHIuZXhpdCgpLnJlbW92ZSgpLHIuYXR0cih7d2lkdGg6ZS50aWNrd2lkdGgrXCJweFwiLFwic2hhcGUtcmVuZGVyaW5nXCI6XCJjcmlzcEVkZ2VzXCJ9KSxyLmVhY2goZnVuY3Rpb24odCxyKXt2YXIgcz1yJWkubGFiZWxTdHJpZGU9PTAsbD1uLnNlbGVjdCh0aGlzKTtsLmF0dHIoe2hlaWdodDpzP2UudGlja2xlbjplLm1pbm9ydGlja2xlbn0pLmNhbGwoYS5maWxsLGUudGlja2NvbG9yKSxvLnNldFRyYW5zbGF0ZShsLFMoZSxyLyhlLl9zdGVwQ291bnQtMSkpLS41KmUudGlja3dpZHRoLChzP3UudGlja09mZnNldDp1Lm1pbm9yVGlja09mZnNldCkraS5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCl9KX1mdW5jdGlvbiBNKHQsZSxyKXtmb3IodmFyIG49dC5zZWxlY3QoXCJyZWN0LlwiK3UuZ3JpcFJlY3RDbGFzcyksaT0wLGE9MDthPGUuX3N0ZXBDb3VudDthKyspaWYoZS5fdmlzaWJsZVN0ZXBzW2FdLl9pbmRleD09PWUuYWN0aXZlKXtpPWE7YnJlYWt9dmFyIG89UyhlLGkvKGUuX3N0ZXBDb3VudC0xKSk7aWYoIWUuX2ludm9raW5nQ29tbWFuZCl7dmFyIHM9bjtyJiZlLnRyYW5zaXRpb24uZHVyYXRpb24+MCYmKHM9cy50cmFuc2l0aW9uKCkuZHVyYXRpb24oZS50cmFuc2l0aW9uLmR1cmF0aW9uKS5lYXNlKGUudHJhbnNpdGlvbi5lYXNpbmcpKSxzLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIisoby0uNSp1LmdyaXBXaWR0aCkrXCIsXCIrZS5fZGltcy5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCtcIilcIil9fWZ1bmN0aW9uIFModCxlKXt2YXIgcj10Ll9kaW1zO3JldHVybiByLmlucHV0QXJlYVN0YXJ0K3Uuc3RlcEluc2V0KyhyLmlucHV0QXJlYUxlbmd0aC0yKnUuc3RlcEluc2V0KSpNYXRoLm1pbigxLE1hdGgubWF4KDAsZSkpfWZ1bmN0aW9uIEUodCxlKXt2YXIgcj10Ll9kaW1zO3JldHVybiBNYXRoLm1pbigxLE1hdGgubWF4KDAsKGUtdS5zdGVwSW5zZXQtci5pbnB1dEFyZWFTdGFydCkvKHIuaW5wdXRBcmVhTGVuZ3RoLTIqdS5zdGVwSW5zZXQtMipyLmlucHV0QXJlYVN0YXJ0KSkpfWZ1bmN0aW9uIEModCxlLHIpe3ZhciBuPXIuX2RpbXMsaT1zLmVuc3VyZVNpbmdsZSh0LFwicmVjdFwiLHUucmFpbFRvdWNoUmVjdENsYXNzLGZ1bmN0aW9uKG4pe24uY2FsbChBLGUsdCxyKS5zdHlsZShcInBvaW50ZXItZXZlbnRzXCIsXCJhbGxcIil9KTtpLmF0dHIoe3dpZHRoOm4uaW5wdXRBcmVhTGVuZ3RoLGhlaWdodDpNYXRoLm1heChuLmlucHV0QXJlYVdpZHRoLHUudGlja09mZnNldCtyLnRpY2tsZW4rbi5sYWJlbEhlaWdodCl9KS5jYWxsKGEuZmlsbCxyLmJnY29sb3IpLmF0dHIoXCJvcGFjaXR5XCIsMCksby5zZXRUcmFuc2xhdGUoaSwwLG4uY3VycmVudFZhbHVlVG90YWxIZWlnaHQpfWZ1bmN0aW9uIEwodCxlKXt2YXIgcj1lLl9kaW1zLG49ci5pbnB1dEFyZWFMZW5ndGgtMip1LnJhaWxJbnNldCxpPXMuZW5zdXJlU2luZ2xlKHQsXCJyZWN0XCIsdS5yYWlsUmVjdENsYXNzKTtpLmF0dHIoe3dpZHRoOm4saGVpZ2h0OnUucmFpbFdpZHRoLHJ4OnUucmFpbFJhZGl1cyxyeTp1LnJhaWxSYWRpdXMsXCJzaGFwZS1yZW5kZXJpbmdcIjpcImNyaXNwRWRnZXNcIn0pLmNhbGwoYS5zdHJva2UsZS5ib3JkZXJjb2xvcikuY2FsbChhLmZpbGwsZS5iZ2NvbG9yKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLGUuYm9yZGVyd2lkdGgrXCJweFwiKSxvLnNldFRyYW5zbGF0ZShpLHUucmFpbEluc2V0LC41KihyLmlucHV0QXJlYVdpZHRoLXUucmFpbFdpZHRoKStyLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRbdS5uYW1lXSxuPVtdLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXTthLnZpc2libGUmJihhLl9nZD1lLG4ucHVzaChhKSl9cmV0dXJuIG59KGUsdCksYT1lLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKFwiZy5cIit1LmNvbnRhaW5lckNsYXNzTmFtZSkuZGF0YShyLmxlbmd0aD4wP1swXTpbXSk7ZnVuY3Rpb24gcyhlKXtlLl9jb21tYW5kT2JzZXJ2ZXImJihlLl9jb21tYW5kT2JzZXJ2ZXIucmVtb3ZlKCksZGVsZXRlIGUuX2NvbW1hbmRPYnNlcnZlciksaS5hdXRvTWFyZ2luKHQsZyhlKSl9aWYoYS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZCh1LmNvbnRhaW5lckNsYXNzTmFtZSwhMCkuc3R5bGUoXCJjdXJzb3JcIixcImV3LXJlc2l6ZVwiKSxhLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKFwiZy5cIit1Lmdyb3VwQ2xhc3NOYW1lKS5lYWNoKHMpfSkucmVtb3ZlKCksMCE9PXIubGVuZ3RoKXt2YXIgbD1hLnNlbGVjdEFsbChcImcuXCIrdS5ncm91cENsYXNzTmFtZSkuZGF0YShyLHYpO2wuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQodS5ncm91cENsYXNzTmFtZSwhMCksbC5leGl0KCkuZWFjaChzKS5yZW1vdmUoKTtmb3IodmFyIGM9MDtjPHIubGVuZ3RoO2MrKyl7dmFyIGg9cltjXTttKHQsaCl9bC5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpOyFmdW5jdGlvbih0KXt2YXIgZT10Ll9kaW1zO2UubGFiZWxTdGVwcz1bXTtmb3IodmFyIHI9dC5fc3RlcENvdW50LG49MDtuPHI7bis9ZS5sYWJlbFN0cmlkZSllLmxhYmVsU3RlcHMucHVzaCh7ZnJhY3Rpb246bi8oci0xKSxzdGVwOnQuX3Zpc2libGVTdGVwc1tuXX0pfShlKSxpLm1hbmFnZUNvbW1hbmRPYnNlcnZlcih0LGUsZS5fdmlzaWJsZVN0ZXBzLGZ1bmN0aW9uKGUpe3ZhciBuPXIuZGF0YSgpWzBdO24uYWN0aXZlIT09ZS5pbmRleCYmKG4uX2RyYWdnaW5nfHxrKHQscixuLGUuaW5kZXgsITEsITApKX0pLGZ1bmN0aW9uKHQsZSxyKXsoci5zdGVwc1tyLmFjdGl2ZV18fHt9KS52aXNpYmxlfHwoci5hY3RpdmU9ci5fdmlzaWJsZVN0ZXBzWzBdLl9pbmRleCk7ZS5jYWxsKHkscikuY2FsbChMLHIpLmNhbGwoXyxyKS5jYWxsKFQscikuY2FsbChDLHQscikuY2FsbCh4LHQscik7dmFyIG49ci5fZGltcztvLnNldFRyYW5zbGF0ZShlLG4ubHgrci5wYWQubCxuLmx5K3IucGFkLnQpLGUuY2FsbChNLHIsITEpLGUuY2FsbCh5LHIpfSh0LG4uc2VsZWN0KHRoaXMpLGUpfSl9fX0se1wiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiOjY3MyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiOjcyNSxcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi9wbG90cy9wbG90c1wiOjgxMCxcIi4uL2NvbG9yXCI6NTc4LFwiLi4vZHJhd2luZ1wiOjU5OSxcIi4vY29uc3RhbnRzXCI6NjYyLGQzOjE1NX1dLDY2NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2NvbnN0YW50c1wiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6XCJjb21wb25lbnRcIixuYW1lOm4ubmFtZSxsYXlvdXRBdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIiksZHJhdzp0KFwiLi9kcmF3XCIpfX0se1wiLi9hdHRyaWJ1dGVzXCI6NjYxLFwiLi9jb25zdGFudHNcIjo2NjIsXCIuL2RlZmF1bHRzXCI6NjYzLFwiLi9kcmF3XCI6NjY0fV0sNjY2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcImZhc3QtaXNudW1lcmljXCIpLGE9dChcIi4uLy4uL3Bsb3RzL3Bsb3RzXCIpLG89dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLHM9dChcIi4uLy4uL2xpYlwiKSxsPXQoXCIuLi9kcmF3aW5nXCIpLGM9dChcIi4uL2NvbG9yXCIpLHU9dChcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiKSxoPXQoXCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zXCIpO2UuZXhwb3J0cz17ZHJhdzpmdW5jdGlvbih0LGUscil7dmFyIHAsZD1yLnByb3BDb250YWluZXIsZz1yLnByb3BOYW1lLHY9ci5wbGFjZWhvbGRlcixtPXIudHJhY2VJbmRleCx5PXIuYXZvaWR8fHt9LHg9ci5hdHRyaWJ1dGVzLGI9ci50cmFuc2Zvcm0sXz1yLmNvbnRhaW5lckdyb3VwLHc9dC5fZnVsbExheW91dCxrPTEsQT0hMSxUPWQudGl0bGUsTT0oVCYmVC50ZXh0P1QudGV4dDpcIlwiKS50cmltKCksUz1UJiZULmZvbnQ/VC5mb250Ont9LEU9Uy5mYW1pbHksQz1TLnNpemUsTD1TLmNvbG9yO1widGl0bGUudGV4dFwiPT09Zz9wPVwidGl0bGVUZXh0XCI6LTEhPT1nLmluZGV4T2YoXCJheGlzXCIpP3A9XCJheGlzVGl0bGVUZXh0XCI6Zy5pbmRleE9mKCEwKSYmKHA9XCJjb2xvcmJhclRpdGxlVGV4dFwiKTt2YXIgej10Ll9jb250ZXh0LmVkaXRzW3BdO1wiXCI9PT1NP2s9MDpNLnJlcGxhY2UoZixcIiAlIFwiKT09PXYucmVwbGFjZShmLFwiICUgXCIpJiYoaz0uMixBPSEwLHp8fChNPVwiXCIpKTt3Lm1ldGEmJihNPXMudGVtcGxhdGVTdHJpbmcoTSx7bWV0YTp3Lm1ldGF9KSk7dmFyIE89TXx8ejtffHwoXz1zLmVuc3VyZVNpbmdsZSh3Ll9pbmZvbGF5ZXIsXCJnXCIsXCJnLVwiK2UpKTt2YXIgST1fLnNlbGVjdEFsbChcInRleHRcIikuZGF0YShPP1swXTpbXSk7aWYoSS5lbnRlcigpLmFwcGVuZChcInRleHRcIiksSS50ZXh0KE0pLmF0dHIoXCJjbGFzc1wiLGUpLEkuZXhpdCgpLnJlbW92ZSgpLCFPKXJldHVybiBfO2Z1bmN0aW9uIEQodCl7cy5zeW5jT3JBc3luYyhbUCxSXSx0KX1mdW5jdGlvbiBQKGUpe3ZhciByO3JldHVybiBiPyhyPVwiXCIsYi5yb3RhdGUmJihyKz1cInJvdGF0ZShcIitbYi5yb3RhdGUseC54LHgueV0rXCIpXCIpLGIub2Zmc2V0JiYocis9XCJ0cmFuc2xhdGUoMCwgXCIrYi5vZmZzZXQrXCIpXCIpKTpyPW51bGwsZS5hdHRyKFwidHJhbnNmb3JtXCIsciksZS5zdHlsZSh7XCJmb250LWZhbWlseVwiOkUsXCJmb250LXNpemVcIjpuLnJvdW5kKEMsMikrXCJweFwiLGZpbGw6Yy5yZ2IoTCksb3BhY2l0eTprKmMub3BhY2l0eShMKSxcImZvbnQtd2VpZ2h0XCI6YS5mb250V2VpZ2h0fSkuYXR0cih4KS5jYWxsKHUuY29udmVydFRvVHNwYW5zLHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX1mdW5jdGlvbiBSKHQpe3ZhciBlPW4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpO2lmKHkmJnkuc2VsZWN0aW9uJiZ5LnNpZGUmJk0pe2UuYXR0cihcInRyYW5zZm9ybVwiLG51bGwpO3ZhciByPTAsYT17bGVmdDpcInJpZ2h0XCIscmlnaHQ6XCJsZWZ0XCIsdG9wOlwiYm90dG9tXCIsYm90dG9tOlwidG9wXCJ9W3kuc2lkZV0sbz0tMSE9PVtcImxlZnRcIixcInRvcFwiXS5pbmRleE9mKHkuc2lkZSk/LTE6MSxjPWkoeS5wYWQpP3kucGFkOjIsdT1sLmJCb3goZS5ub2RlKCkpLGg9e2xlZnQ6MCx0b3A6MCxyaWdodDp3LndpZHRoLGJvdHRvbTp3LmhlaWdodH0sZj15Lm1heFNoaWZ0fHwoaFt5LnNpZGVdLXVbeS5zaWRlXSkqKFwibGVmdFwiPT09eS5zaWRlfHxcInRvcFwiPT09eS5zaWRlPy0xOjEpO2lmKGY8MClyPWY7ZWxzZXt2YXIgcD15Lm9mZnNldExlZnR8fDAsZD15Lm9mZnNldFRvcHx8MDt1LmxlZnQtPXAsdS5yaWdodC09cCx1LnRvcC09ZCx1LmJvdHRvbS09ZCx5LnNlbGVjdGlvbi5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bC5iQm94KHRoaXMpO3MuYkJveEludGVyc2VjdCh1LHQsYykmJihyPU1hdGgubWF4KHIsbyoodFt5LnNpZGVdLXVbYV0pK2MpKX0pLHI9TWF0aC5taW4oZixyKX1pZihyPjB8fGY8MCl7dmFyIGc9e2xlZnQ6Wy1yLDBdLHJpZ2h0OltyLDBdLHRvcDpbMCwtcl0sYm90dG9tOlswLHJdfVt5LnNpZGVdO2UuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK2crXCIpXCIpfX19SS5jYWxsKEQpLHomJihNP0kub24oXCIub3BhY2l0eVwiLG51bGwpOihrPTAsQT0hMCxJLnRleHQodikub24oXCJtb3VzZW92ZXIub3BhY2l0eVwiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKGguU0hPV19QTEFDRUhPTERFUikuc3R5bGUoXCJvcGFjaXR5XCIsMSl9KS5vbihcIm1vdXNlb3V0Lm9wYWNpdHlcIixmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihoLkhJREVfUExBQ0VIT0xERVIpLnN0eWxlKFwib3BhY2l0eVwiLDApfSkpLEkuY2FsbCh1Lm1ha2VFZGl0YWJsZSx7Z2Q6dH0pLm9uKFwiZWRpdFwiLGZ1bmN0aW9uKGUpe3ZvaWQgMCE9PW0/by5jYWxsKFwiX2d1aVJlc3R5bGVcIix0LGcsZSxtKTpvLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix0LGcsZSl9KS5vbihcImNhbmNlbFwiLGZ1bmN0aW9uKCl7dGhpcy50ZXh0KHRoaXMuYXR0cihcImRhdGEtdW5mb3JtYXR0ZWRcIikpLmNhbGwoRCl9KS5vbihcImlucHV0XCIsZnVuY3Rpb24odCl7dGhpcy50ZXh0KHR8fFwiIFwiKS5jYWxsKHUucG9zaXRpb25UZXh0LHgueCx4LnkpfSkpO3JldHVybiBJLmNsYXNzZWQoXCJqcy1wbGFjZWhvbGRlclwiLEEpLF99fTt2YXIgZj0vIFtYWV1bMC05XSogL30se1wiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9uc1wiOjY3NyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiOjcyNSxcIi4uLy4uL3Bsb3RzL3Bsb3RzXCI6ODEwLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9jb2xvclwiOjU3OCxcIi4uL2RyYXdpbmdcIjo1OTksZDM6MTU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw2Njc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uL2NvbG9yL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LG89dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGwscz10KFwiLi4vLi4vcGxvdHMvcGFkX2F0dHJpYnV0ZXNcIiksbD10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKS50ZW1wbGF0ZWRBcnJheSxjPWwoXCJidXR0b25cIix7dmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIn0sbWV0aG9kOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJyZXN0eWxlXCIsXCJyZWxheW91dFwiLFwiYW5pbWF0ZVwiLFwidXBkYXRlXCIsXCJza2lwXCJdLGRmbHQ6XCJyZXN0eWxlXCJ9LGFyZ3M6e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsZnJlZUxlbmd0aDohMCxpdGVtczpbe3ZhbFR5cGU6XCJhbnlcIn0se3ZhbFR5cGU6XCJhbnlcIn0se3ZhbFR5cGU6XCJhbnlcIn1dfSxsYWJlbDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIn0sZXhlY3V0ZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfX0pO2UuZXhwb3J0cz1vKGwoXCJ1cGRhdGVtZW51XCIse19hcnJheUF0dHJSZWdleHBzOlsvXnVwZGF0ZW1lbnVzXFxbKDB8WzEtOV1bMC05XSspXFxdXFwuYnV0dG9ucy9dLHZpc2libGU6e3ZhbFR5cGU6XCJib29sZWFuXCJ9LHR5cGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImRyb3Bkb3duXCIsXCJidXR0b25zXCJdLGRmbHQ6XCJkcm9wZG93blwifSxkaXJlY3Rpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImxlZnRcIixcInJpZ2h0XCIsXCJ1cFwiLFwiZG93blwiXSxkZmx0OlwiZG93blwifSxhY3RpdmU6e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsbWluOi0xLGRmbHQ6MH0sc2hvd2FjdGl2ZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfSxidXR0b25zOmMseDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjotMixtYXg6MyxkZmx0Oi0uMDV9LHhhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImF1dG9cIixcImxlZnRcIixcImNlbnRlclwiLFwicmlnaHRcIl0sZGZsdDpcInJpZ2h0XCJ9LHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46LTIsbWF4OjMsZGZsdDoxfSx5YW5jaG9yOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhdXRvXCIsXCJ0b3BcIixcIm1pZGRsZVwiLFwiYm90dG9tXCJdLGRmbHQ6XCJ0b3BcIn0scGFkOmEocyh7ZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0pLHt9KSxmb250Om4oe30pLGJnY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwifSxib3JkZXJjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDppLmJvcmRlckxpbmV9LGJvcmRlcndpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9fSksXCJhcnJheWRyYXdcIixcImZyb20tcm9vdFwiKX0se1wiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCI6Nzc1LFwiLi4vLi4vcGxvdHMvcGFkX2F0dHJpYnV0ZXNcIjo4MDksXCIuLi9jb2xvci9hdHRyaWJ1dGVzXCI6NTc3fV0sNjY4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtuYW1lOlwidXBkYXRlbWVudXNcIixjb250YWluZXJDbGFzc05hbWU6XCJ1cGRhdGVtZW51LWNvbnRhaW5lclwiLGhlYWRlckdyb3VwQ2xhc3NOYW1lOlwidXBkYXRlbWVudS1oZWFkZXItZ3JvdXBcIixoZWFkZXJDbGFzc05hbWU6XCJ1cGRhdGVtZW51LWhlYWRlclwiLGhlYWRlckFycm93Q2xhc3NOYW1lOlwidXBkYXRlbWVudS1oZWFkZXItYXJyb3dcIixkcm9wZG93bkJ1dHRvbkdyb3VwQ2xhc3NOYW1lOlwidXBkYXRlbWVudS1kcm9wZG93bi1idXR0b24tZ3JvdXBcIixkcm9wZG93bkJ1dHRvbkNsYXNzTmFtZTpcInVwZGF0ZW1lbnUtZHJvcGRvd24tYnV0dG9uXCIsYnV0dG9uQ2xhc3NOYW1lOlwidXBkYXRlbWVudS1idXR0b25cIixpdGVtUmVjdENsYXNzTmFtZTpcInVwZGF0ZW1lbnUtaXRlbS1yZWN0XCIsaXRlbVRleHRDbGFzc05hbWU6XCJ1cGRhdGVtZW51LWl0ZW0tdGV4dFwiLG1lbnVJbmRleEF0dHJOYW1lOlwidXBkYXRlbWVudS1hY3RpdmUtaW5kZXhcIixhdXRvTWFyZ2luSWRSb290OlwidXBkYXRlbWVudS1cIixibGFua0hlYWRlck9wdHM6e2xhYmVsOlwiICBcIn0sbWluV2lkdGg6MzAsbWluSGVpZ2h0OjMwLHRleHRQYWRYOjI0LGFycm93UGFkWDoxNixyeDoyLHJ5OjIsdGV4dE9mZnNldFg6MTIsdGV4dE9mZnNldFk6MyxhcnJvd09mZnNldFg6NCxnYXBCdXR0b25IZWFkZXI6NSxnYXBCdXR0b246MixhY3RpdmVDb2xvcjpcIiNGNEZBRkZcIixob3ZlckNvbG9yOlwiI0Y0RkFGRlwiLGFycm93U3ltYm9sOntsZWZ0OlwiXFx1MjVjNFwiLHJpZ2h0OlwiXFx1MjViYVwiLHVwOlwiXFx1MjViMlwiLGRvd246XCJcXHUyNWJjXCJ9fX0se31dLDY2OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCIpLGE9dChcIi4vYXR0cmlidXRlc1wiKSxvPXQoXCIuL2NvbnN0YW50c1wiKS5uYW1lLHM9YS5idXR0b25zO2Z1bmN0aW9uIGwodCxlLHIpe2Z1bmN0aW9uIG8ocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX1vKFwidmlzaWJsZVwiLGkodCxlLHtuYW1lOlwiYnV0dG9uc1wiLGhhbmRsZUl0ZW1EZWZhdWx0czpjfSkubGVuZ3RoPjApJiYobyhcImFjdGl2ZVwiKSxvKFwiZGlyZWN0aW9uXCIpLG8oXCJ0eXBlXCIpLG8oXCJzaG93YWN0aXZlXCIpLG8oXCJ4XCIpLG8oXCJ5XCIpLG4ubm9uZU9yQWxsKHQsZSxbXCJ4XCIsXCJ5XCJdKSxvKFwieGFuY2hvclwiKSxvKFwieWFuY2hvclwiKSxvKFwicGFkLnRcIiksbyhcInBhZC5yXCIpLG8oXCJwYWQuYlwiKSxvKFwicGFkLmxcIiksbi5jb2VyY2VGb250KG8sXCJmb250XCIsci5mb250KSxvKFwiYmdjb2xvclwiLHIucGFwZXJfYmdjb2xvciksbyhcImJvcmRlcmNvbG9yXCIpLG8oXCJib3JkZXJ3aWR0aFwiKSl9ZnVuY3Rpb24gYyh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1yKFwidmlzaWJsZVwiLFwic2tpcFwiPT09dC5tZXRob2R8fEFycmF5LmlzQXJyYXkodC5hcmdzKSkmJihyKFwibWV0aG9kXCIpLHIoXCJhcmdzXCIpLHIoXCJsYWJlbFwiKSxyKFwiZXhlY3V0ZVwiKSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aSh0LGUse25hbWU6byxoYW5kbGVJdGVtRGVmYXVsdHM6bH0pfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCI6NzQ1LFwiLi9hdHRyaWJ1dGVzXCI6NjY3LFwiLi9jb25zdGFudHNcIjo2Njh9XSw2NzA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vcGxvdHMvcGxvdHNcIiksYT10KFwiLi4vY29sb3JcIiksbz10KFwiLi4vZHJhd2luZ1wiKSxzPXQoXCIuLi8uLi9saWJcIiksbD10KFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCIpLGM9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIikuYXJyYXlFZGl0b3IsdT10KFwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiKS5MSU5FX1NQQUNJTkcsaD10KFwiLi9jb25zdGFudHNcIiksZj10KFwiLi9zY3JvbGxib3hcIik7ZnVuY3Rpb24gcCh0KXtyZXR1cm4gdC5faW5kZXh9ZnVuY3Rpb24gZCh0LGUpe3JldHVybit0LmF0dHIoaC5tZW51SW5kZXhBdHRyTmFtZSk9PT1lLl9pbmRleH1mdW5jdGlvbiBnKHQsZSxyLG4saSxhLG8scyl7ZS5hY3RpdmU9byxjKHQubGF5b3V0LGgubmFtZSxlKS5hcHBseVVwZGF0ZShcImFjdGl2ZVwiLG8pLFwiYnV0dG9uc1wiPT09ZS50eXBlP20odCxuLG51bGwsbnVsbCxlKTpcImRyb3Bkb3duXCI9PT1lLnR5cGUmJihpLmF0dHIoaC5tZW51SW5kZXhBdHRyTmFtZSxcIi0xXCIpLHYodCxuLGksYSxlKSxzfHxtKHQsbixpLGEsZSkpfWZ1bmN0aW9uIHYodCxlLHIsbixpKXt2YXIgYT1zLmVuc3VyZVNpbmdsZShlLFwiZ1wiLGguaGVhZGVyQ2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3Quc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpfSksbD1pLl9kaW1zLGM9aS5hY3RpdmUsdT1pLmJ1dHRvbnNbY118fGguYmxhbmtIZWFkZXJPcHRzLGY9e3k6aS5wYWQudCx5UGFkOjAseDppLnBhZC5sLHhQYWQ6MCxpbmRleDowfSxwPXt3aWR0aDpsLmhlYWRlcldpZHRoLGhlaWdodDpsLmhlYWRlckhlaWdodH07YS5jYWxsKHksaSx1LHQpLmNhbGwoTSxpLGYscCkscy5lbnN1cmVTaW5nbGUoZSxcInRleHRcIixoLmhlYWRlckFycm93Q2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuY2xhc3NlZChcInVzZXItc2VsZWN0LW5vbmVcIiwhMCkuYXR0cihcInRleHQtYW5jaG9yXCIsXCJlbmRcIikuY2FsbChvLmZvbnQsaS5mb250KS50ZXh0KGguYXJyb3dTeW1ib2xbaS5kaXJlY3Rpb25dKX0pLmF0dHIoe3g6bC5oZWFkZXJXaWR0aC1oLmFycm93T2Zmc2V0WCtpLnBhZC5sLHk6bC5oZWFkZXJIZWlnaHQvMitoLnRleHRPZmZzZXRZK2kucGFkLnR9KSxhLm9uKFwiY2xpY2tcIixmdW5jdGlvbigpe3IuY2FsbChTLFN0cmluZyhkKHIsaSk/LTE6aS5faW5kZXgpKSxtKHQsZSxyLG4saSl9KSxhLm9uKFwibW91c2VvdmVyXCIsZnVuY3Rpb24oKXthLmNhbGwodyl9KSxhLm9uKFwibW91c2VvdXRcIixmdW5jdGlvbigpe2EuY2FsbChrLGkpfSksby5zZXRUcmFuc2xhdGUoZSxsLmx4LGwubHkpfWZ1bmN0aW9uIG0odCxlLHIsYSxvKXtyfHwocj1lKS5hdHRyKFwicG9pbnRlci1ldmVudHNcIixcImFsbFwiKTt2YXIgbD1mdW5jdGlvbih0KXtyZXR1cm4tMT09K3QuYXR0cihoLm1lbnVJbmRleEF0dHJOYW1lKX0ocikmJlwiYnV0dG9uc1wiIT09by50eXBlP1tdOm8uYnV0dG9ucyxjPVwiZHJvcGRvd25cIj09PW8udHlwZT9oLmRyb3Bkb3duQnV0dG9uQ2xhc3NOYW1lOmguYnV0dG9uQ2xhc3NOYW1lLHU9ci5zZWxlY3RBbGwoXCJnLlwiK2MpLmRhdGEocy5maWx0ZXJWaXNpYmxlKGwpKSxmPXUuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoYywhMCkscD11LmV4aXQoKTtcImRyb3Bkb3duXCI9PT1vLnR5cGU/KGYuYXR0cihcIm9wYWNpdHlcIixcIjBcIikudHJhbnNpdGlvbigpLmF0dHIoXCJvcGFjaXR5XCIsXCIxXCIpLHAudHJhbnNpdGlvbigpLmF0dHIoXCJvcGFjaXR5XCIsXCIwXCIpLnJlbW92ZSgpKTpwLnJlbW92ZSgpO3ZhciBkPTAsdj0wLG09by5fZGltcyx4PS0xIT09W1widXBcIixcImRvd25cIl0uaW5kZXhPZihvLmRpcmVjdGlvbik7XCJkcm9wZG93blwiPT09by50eXBlJiYoeD92PW0uaGVhZGVySGVpZ2h0K2guZ2FwQnV0dG9uSGVhZGVyOmQ9bS5oZWFkZXJXaWR0aCtoLmdhcEJ1dHRvbkhlYWRlciksXCJkcm9wZG93blwiPT09by50eXBlJiZcInVwXCI9PT1vLmRpcmVjdGlvbiYmKHY9LWguZ2FwQnV0dG9uSGVhZGVyK2guZ2FwQnV0dG9uLW0ub3BlbkhlaWdodCksXCJkcm9wZG93blwiPT09by50eXBlJiZcImxlZnRcIj09PW8uZGlyZWN0aW9uJiYoZD0taC5nYXBCdXR0b25IZWFkZXIraC5nYXBCdXR0b24tbS5vcGVuV2lkdGgpO3ZhciBiPXt4Om0ubHgrZCtvLnBhZC5sLHk6bS5seSt2K28ucGFkLnQseVBhZDpoLmdhcEJ1dHRvbix4UGFkOmguZ2FwQnV0dG9uLGluZGV4OjB9LEE9e2w6Yi54K28uYm9yZGVyd2lkdGgsdDpiLnkrby5ib3JkZXJ3aWR0aH07dS5lYWNoKGZ1bmN0aW9uKHMsbCl7dmFyIGM9bi5zZWxlY3QodGhpcyk7Yy5jYWxsKHksbyxzLHQpLmNhbGwoTSxvLGIpLGMub24oXCJjbGlja1wiLGZ1bmN0aW9uKCl7bi5ldmVudC5kZWZhdWx0UHJldmVudGVkfHwoZyh0LG8sMCxlLHIsYSxsKSxzLmV4ZWN1dGUmJmkuZXhlY3V0ZUFQSUNvbW1hbmQodCxzLm1ldGhvZCxzLmFyZ3MpLHQuZW1pdChcInBsb3RseV9idXR0b25jbGlja2VkXCIse21lbnU6byxidXR0b246cyxhY3RpdmU6by5hY3RpdmV9KSl9KSxjLm9uKFwibW91c2VvdmVyXCIsZnVuY3Rpb24oKXtjLmNhbGwodyl9KSxjLm9uKFwibW91c2VvdXRcIixmdW5jdGlvbigpe2MuY2FsbChrLG8pLHUuY2FsbChfLG8pfSl9KSx1LmNhbGwoXyxvKSx4PyhBLnc9TWF0aC5tYXgobS5vcGVuV2lkdGgsbS5oZWFkZXJXaWR0aCksQS5oPWIueS1BLnQpOihBLnc9Yi54LUEubCxBLmg9TWF0aC5tYXgobS5vcGVuSGVpZ2h0LG0uaGVhZGVySGVpZ2h0KSksQS5kaXJlY3Rpb249by5kaXJlY3Rpb24sYSYmKHUuc2l6ZSgpP2Z1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbyxzLGwsYz1pLmRpcmVjdGlvbix1PVwidXBcIj09PWN8fFwiZG93blwiPT09YyxmPWkuX2RpbXMscD1pLmFjdGl2ZTtpZih1KWZvcihzPTAsbD0wO2w8cDtsKyspcys9Zi5oZWlnaHRzW2xdK2guZ2FwQnV0dG9uO2Vsc2UgZm9yKG89MCxsPTA7bDxwO2wrKylvKz1mLndpZHRoc1tsXStoLmdhcEJ1dHRvbjtuLmVuYWJsZShhLG8scyksbi5oYmFyJiZuLmhiYXIuYXR0cihcIm9wYWNpdHlcIixcIjBcIikudHJhbnNpdGlvbigpLmF0dHIoXCJvcGFjaXR5XCIsXCIxXCIpO24udmJhciYmbi52YmFyLmF0dHIoXCJvcGFjaXR5XCIsXCIwXCIpLnRyYW5zaXRpb24oKS5hdHRyKFwib3BhY2l0eVwiLFwiMVwiKX0oMCwwLDAsYSxvLEEpOmZ1bmN0aW9uKHQpe3ZhciBlPSEhdC5oYmFyLHI9ISF0LnZiYXI7ZSYmdC5oYmFyLnRyYW5zaXRpb24oKS5hdHRyKFwib3BhY2l0eVwiLFwiMFwiKS5lYWNoKFwiZW5kXCIsZnVuY3Rpb24oKXtlPSExLHJ8fHQuZGlzYWJsZSgpfSk7ciYmdC52YmFyLnRyYW5zaXRpb24oKS5hdHRyKFwib3BhY2l0eVwiLFwiMFwiKS5lYWNoKFwiZW5kXCIsZnVuY3Rpb24oKXtyPSExLGV8fHQuZGlzYWJsZSgpfSl9KGEpKX1mdW5jdGlvbiB5KHQsZSxyLG4pe3QuY2FsbCh4LGUpLmNhbGwoYixlLHIsbil9ZnVuY3Rpb24geCh0LGUpe3MuZW5zdXJlU2luZ2xlKHQsXCJyZWN0XCIsaC5pdGVtUmVjdENsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIoe3J4Omgucngscnk6aC5yeSxcInNoYXBlLXJlbmRlcmluZ1wiOlwiY3Jpc3BFZGdlc1wifSl9KS5jYWxsKGEuc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwoYS5maWxsLGUuYmdjb2xvcikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixlLmJvcmRlcndpZHRoK1wicHhcIil9ZnVuY3Rpb24gYih0LGUscixuKXt2YXIgaT1zLmVuc3VyZVNpbmdsZSh0LFwidGV4dFwiLGguaXRlbVRleHRDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5jbGFzc2VkKFwidXNlci1zZWxlY3Qtbm9uZVwiLCEwKS5hdHRyKHtcInRleHQtYW5jaG9yXCI6XCJzdGFydFwiLFwiZGF0YS1ub3RleFwiOjF9KX0pLGE9ci5sYWJlbCxjPW4uX2Z1bGxMYXlvdXQubWV0YTtjJiYoYT1zLnRlbXBsYXRlU3RyaW5nKGEse21ldGE6Y30pKSxpLmNhbGwoby5mb250LGUuZm9udCkudGV4dChhKS5jYWxsKGwuY29udmVydFRvVHNwYW5zLG4pfWZ1bmN0aW9uIF8odCxlKXt2YXIgcj1lLmFjdGl2ZTt0LmVhY2goZnVuY3Rpb24odCxpKXt2YXIgbz1uLnNlbGVjdCh0aGlzKTtpPT09ciYmZS5zaG93YWN0aXZlJiZvLnNlbGVjdChcInJlY3QuXCIraC5pdGVtUmVjdENsYXNzTmFtZSkuY2FsbChhLmZpbGwsaC5hY3RpdmVDb2xvcil9KX1mdW5jdGlvbiB3KHQpe3Quc2VsZWN0KFwicmVjdC5cIitoLml0ZW1SZWN0Q2xhc3NOYW1lKS5jYWxsKGEuZmlsbCxoLmhvdmVyQ29sb3IpfWZ1bmN0aW9uIGsodCxlKXt0LnNlbGVjdChcInJlY3QuXCIraC5pdGVtUmVjdENsYXNzTmFtZSkuY2FsbChhLmZpbGwsZS5iZ2NvbG9yKX1mdW5jdGlvbiBBKHQsZSl7dmFyIHI9ZS5fZGltcz17d2lkdGgxOjAsaGVpZ2h0MTowLGhlaWdodHM6W10sd2lkdGhzOltdLHRvdGFsV2lkdGg6MCx0b3RhbEhlaWdodDowLG9wZW5XaWR0aDowLG9wZW5IZWlnaHQ6MCxseDowLGx5OjB9LGE9by50ZXN0ZXIuc2VsZWN0QWxsKFwiZy5cIitoLmRyb3Bkb3duQnV0dG9uQ2xhc3NOYW1lKS5kYXRhKHMuZmlsdGVyVmlzaWJsZShlLmJ1dHRvbnMpKTthLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKGguZHJvcGRvd25CdXR0b25DbGFzc05hbWUsITApO3ZhciBjPS0xIT09W1widXBcIixcImRvd25cIl0uaW5kZXhPZihlLmRpcmVjdGlvbik7YS5lYWNoKGZ1bmN0aW9uKGksYSl7dmFyIHM9bi5zZWxlY3QodGhpcyk7cy5jYWxsKHksZSxpLHQpO3ZhciBmPXMuc2VsZWN0KFwiLlwiK2guaXRlbVRleHRDbGFzc05hbWUpLHA9Zi5ub2RlKCkmJm8uYkJveChmLm5vZGUoKSkud2lkdGgsZD1NYXRoLm1heChwK2gudGV4dFBhZFgsaC5taW5XaWR0aCksZz1lLmZvbnQuc2l6ZSp1LHY9bC5saW5lQ291bnQoZiksbT1NYXRoLm1heChnKnYsaC5taW5IZWlnaHQpK2gudGV4dE9mZnNldFk7bT1NYXRoLmNlaWwobSksZD1NYXRoLmNlaWwoZCksci53aWR0aHNbYV09ZCxyLmhlaWdodHNbYV09bSxyLmhlaWdodDE9TWF0aC5tYXgoci5oZWlnaHQxLG0pLHIud2lkdGgxPU1hdGgubWF4KHIud2lkdGgxLGQpLGM/KHIudG90YWxXaWR0aD1NYXRoLm1heChyLnRvdGFsV2lkdGgsZCksci5vcGVuV2lkdGg9ci50b3RhbFdpZHRoLHIudG90YWxIZWlnaHQrPW0raC5nYXBCdXR0b24sci5vcGVuSGVpZ2h0Kz1tK2guZ2FwQnV0dG9uKTooci50b3RhbFdpZHRoKz1kK2guZ2FwQnV0dG9uLHIub3BlbldpZHRoKz1kK2guZ2FwQnV0dG9uLHIudG90YWxIZWlnaHQ9TWF0aC5tYXgoci50b3RhbEhlaWdodCxtKSxyLm9wZW5IZWlnaHQ9ci50b3RhbEhlaWdodCl9KSxjP3IudG90YWxIZWlnaHQtPWguZ2FwQnV0dG9uOnIudG90YWxXaWR0aC09aC5nYXBCdXR0b24sci5oZWFkZXJXaWR0aD1yLndpZHRoMStoLmFycm93UGFkWCxyLmhlYWRlckhlaWdodD1yLmhlaWdodDEsXCJkcm9wZG93blwiPT09ZS50eXBlJiYoYz8oci53aWR0aDErPWguYXJyb3dQYWRYLHIudG90YWxIZWlnaHQ9ci5oZWlnaHQxKTpyLnRvdGFsV2lkdGg9ci53aWR0aDEsci50b3RhbFdpZHRoKz1oLmFycm93UGFkWCksYS5yZW1vdmUoKTt2YXIgZj1yLnRvdGFsV2lkdGgrZS5wYWQubCtlLnBhZC5yLHA9ci50b3RhbEhlaWdodCtlLnBhZC50K2UucGFkLmIsZD10Ll9mdWxsTGF5b3V0Ll9zaXplO3IubHg9ZC5sK2QudyplLngsci5seT1kLnQrZC5oKigxLWUueSk7dmFyIGc9XCJsZWZ0XCI7cy5pc1JpZ2h0QW5jaG9yKGUpJiYoci5seC09ZixnPVwicmlnaHRcIikscy5pc0NlbnRlckFuY2hvcihlKSYmKHIubHgtPWYvMixnPVwiY2VudGVyXCIpO3ZhciB2PVwidG9wXCI7cy5pc0JvdHRvbUFuY2hvcihlKSYmKHIubHktPXAsdj1cImJvdHRvbVwiKSxzLmlzTWlkZGxlQW5jaG9yKGUpJiYoci5seS09cC8yLHY9XCJtaWRkbGVcIiksci50b3RhbFdpZHRoPU1hdGguY2VpbChyLnRvdGFsV2lkdGgpLHIudG90YWxIZWlnaHQ9TWF0aC5jZWlsKHIudG90YWxIZWlnaHQpLHIubHg9TWF0aC5yb3VuZChyLmx4KSxyLmx5PU1hdGgucm91bmQoci5seSksaS5hdXRvTWFyZ2luKHQsVChlKSx7eDplLngseTplLnksbDpmKih7cmlnaHQ6MSxjZW50ZXI6LjV9W2ddfHwwKSxyOmYqKHtsZWZ0OjEsY2VudGVyOi41fVtnXXx8MCksYjpwKih7dG9wOjEsbWlkZGxlOi41fVt2XXx8MCksdDpwKih7Ym90dG9tOjEsbWlkZGxlOi41fVt2XXx8MCl9KX1mdW5jdGlvbiBUKHQpe3JldHVybiBoLmF1dG9NYXJnaW5JZFJvb3QrdC5faW5kZXh9ZnVuY3Rpb24gTSh0LGUscixuKXtuPW58fHt9O3ZhciBpPXQuc2VsZWN0KFwiLlwiK2guaXRlbVJlY3RDbGFzc05hbWUpLGE9dC5zZWxlY3QoXCIuXCIraC5pdGVtVGV4dENsYXNzTmFtZSkscz1lLmJvcmRlcndpZHRoLGM9ci5pbmRleCxmPWUuX2RpbXM7by5zZXRUcmFuc2xhdGUodCxzK3IueCxzK3IueSk7dmFyIHA9LTEhPT1bXCJ1cFwiLFwiZG93blwiXS5pbmRleE9mKGUuZGlyZWN0aW9uKSxkPW4uaGVpZ2h0fHwocD9mLmhlaWdodHNbY106Zi5oZWlnaHQxKTtpLmF0dHIoe3g6MCx5OjAsd2lkdGg6bi53aWR0aHx8KHA/Zi53aWR0aDE6Zi53aWR0aHNbY10pLGhlaWdodDpkfSk7dmFyIGc9ZS5mb250LnNpemUqdSx2PShsLmxpbmVDb3VudChhKS0xKSpnLzI7bC5wb3NpdGlvblRleHQoYSxoLnRleHRPZmZzZXRYLGQvMi12K2gudGV4dE9mZnNldFkpLHA/ci55Kz1mLmhlaWdodHNbY10rci55UGFkOnIueCs9Zi53aWR0aHNbY10rci54UGFkLHIuaW5kZXgrK31mdW5jdGlvbiBTKHQsZSl7dC5hdHRyKGgubWVudUluZGV4QXR0ck5hbWUsZXx8XCItMVwiKS5zZWxlY3RBbGwoXCJnLlwiK2guZHJvcGRvd25CdXR0b25DbGFzc05hbWUpLnJlbW92ZSgpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9cy5maWx0ZXJWaXNpYmxlKGVbaC5uYW1lXSk7ZnVuY3Rpb24gYShlKXtpLmF1dG9NYXJnaW4odCxUKGUpKX12YXIgbz1lLl9tZW51bGF5ZXIuc2VsZWN0QWxsKFwiZy5cIitoLmNvbnRhaW5lckNsYXNzTmFtZSkuZGF0YShyLmxlbmd0aD4wP1swXTpbXSk7aWYoby5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChoLmNvbnRhaW5lckNsYXNzTmFtZSwhMCkuc3R5bGUoXCJjdXJzb3JcIixcInBvaW50ZXJcIiksby5leGl0KCkuZWFjaChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbChcImcuXCIraC5oZWFkZXJHcm91cENsYXNzTmFtZSkuZWFjaChhKX0pLnJlbW92ZSgpLDAhPT1yLmxlbmd0aCl7dmFyIGw9by5zZWxlY3RBbGwoXCJnLlwiK2guaGVhZGVyR3JvdXBDbGFzc05hbWUpLmRhdGEocixwKTtsLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKGguaGVhZGVyR3JvdXBDbGFzc05hbWUsITApO2Zvcih2YXIgYz1zLmVuc3VyZVNpbmdsZShvLFwiZ1wiLGguZHJvcGRvd25CdXR0b25Hcm91cENsYXNzTmFtZSxmdW5jdGlvbih0KXt0LnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixcImFsbFwiKX0pLHU9MDt1PHIubGVuZ3RoO3UrKyl7dmFyIHk9clt1XTtBKHQseSl9dmFyIHg9XCJ1cGRhdGVtZW51c1wiK2UuX3VpZCxiPW5ldyBmKHQsYyx4KTtsLmVudGVyKCkuc2l6ZSgpJiYoYy5ub2RlKCkucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChjLm5vZGUoKSksYy5jYWxsKFMpKSxsLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKHQpe2MuY2FsbChTKSxhKHQpfSkucmVtb3ZlKCksbC5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGE9XCJkcm9wZG93blwiPT09ZS50eXBlP2M6bnVsbDtpLm1hbmFnZUNvbW1hbmRPYnNlcnZlcih0LGUsZS5idXR0b25zLGZ1bmN0aW9uKG4pe2codCxlLGUuYnV0dG9uc1tuLmluZGV4XSxyLGEsYixuLmluZGV4LCEwKX0pLFwiZHJvcGRvd25cIj09PWUudHlwZT8odih0LHIsYyxiLGUpLGQoYyxlKSYmbSh0LHIsYyxiLGUpKTptKHQscixudWxsLG51bGwsZSl9KX19fSx7XCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCI6NjczLFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCI6NzI1LFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3Bsb3RzL3Bsb3RzXCI6ODEwLFwiLi4vY29sb3JcIjo1NzgsXCIuLi9kcmF3aW5nXCI6NTk5LFwiLi9jb25zdGFudHNcIjo2NjgsXCIuL3Njcm9sbGJveFwiOjY3MixkMzoxNTV9XSw2NzE6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bNjY1XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtcIi4vYXR0cmlidXRlc1wiOjY2NyxcIi4vY29uc3RhbnRzXCI6NjY4LFwiLi9kZWZhdWx0c1wiOjY2OSxcIi4vZHJhd1wiOjY3MCxkdXA6NjY1fV0sNjcyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXM7dmFyIG49dChcImQzXCIpLGk9dChcIi4uL2NvbG9yXCIpLGE9dChcIi4uL2RyYXdpbmdcIiksbz10KFwiLi4vLi4vbGliXCIpO2Z1bmN0aW9uIHModCxlLHIpe3RoaXMuZ2Q9dCx0aGlzLmNvbnRhaW5lcj1lLHRoaXMuaWQ9cix0aGlzLnBvc2l0aW9uPW51bGwsdGhpcy50cmFuc2xhdGVYPW51bGwsdGhpcy50cmFuc2xhdGVZPW51bGwsdGhpcy5oYmFyPW51bGwsdGhpcy52YmFyPW51bGwsdGhpcy5iZz10aGlzLmNvbnRhaW5lci5zZWxlY3RBbGwoXCJyZWN0LnNjcm9sbGJveC1iZ1wiKS5kYXRhKFswXSksdGhpcy5iZy5leGl0KCkub24oXCIuZHJhZ1wiLG51bGwpLm9uKFwid2hlZWxcIixudWxsKS5yZW1vdmUoKSx0aGlzLmJnLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKS5jbGFzc2VkKFwic2Nyb2xsYm94LWJnXCIsITApLnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixcImFsbFwiKS5hdHRyKHtvcGFjaXR5OjAseDowLHk6MCx3aWR0aDowLGhlaWdodDowfSl9cy5iYXJXaWR0aD0yLHMuYmFyTGVuZ3RoPTIwLHMuYmFyUmFkaXVzPTIscy5iYXJQYWQ9MSxzLmJhckNvbG9yPVwiIzgwOEJBNFwiLHMucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbih0LGUscil7dmFyIG89dGhpcy5nZC5fZnVsbExheW91dCxsPW8ud2lkdGgsYz1vLmhlaWdodDt0aGlzLnBvc2l0aW9uPXQ7dmFyIHUsaCxmLHAsZD10aGlzLnBvc2l0aW9uLmwsZz10aGlzLnBvc2l0aW9uLncsdj10aGlzLnBvc2l0aW9uLnQsbT10aGlzLnBvc2l0aW9uLmgseT10aGlzLnBvc2l0aW9uLmRpcmVjdGlvbix4PVwiZG93blwiPT09eSxiPVwibGVmdFwiPT09eSxfPVwidXBcIj09PXksdz1nLGs9bTt4fHxifHxcInJpZ2h0XCI9PT15fHxffHwodGhpcy5wb3NpdGlvbi5kaXJlY3Rpb249XCJkb3duXCIseD0hMCkseHx8Xz8oaD0odT1kKSt3LHg/KGY9dixrPShwPU1hdGgubWluKGYrayxjKSktZik6az0ocD12K2spLShmPU1hdGgubWF4KHAtaywwKSkpOihwPShmPXYpK2ssYj93PShoPWQrdyktKHU9TWF0aC5tYXgoaC13LDApKToodT1kLHc9KGg9TWF0aC5taW4odSt3LGwpKS11KSksdGhpcy5fYm94PXtsOnUsdDpmLHc6dyxoOmt9O3ZhciBBPWc+dyxUPXMuYmFyTGVuZ3RoKzIqcy5iYXJQYWQsTT1zLmJhcldpZHRoKzIqcy5iYXJQYWQsUz1kLEU9dittO0UrTT5jJiYoRT1jLU0pO3ZhciBDPXRoaXMuY29udGFpbmVyLnNlbGVjdEFsbChcInJlY3Quc2Nyb2xsYmFyLWhvcml6b250YWxcIikuZGF0YShBP1swXTpbXSk7Qy5leGl0KCkub24oXCIuZHJhZ1wiLG51bGwpLnJlbW92ZSgpLEMuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpLmNsYXNzZWQoXCJzY3JvbGxiYXItaG9yaXpvbnRhbFwiLCEwKS5jYWxsKGkuZmlsbCxzLmJhckNvbG9yKSxBPyh0aGlzLmhiYXI9Qy5hdHRyKHtyeDpzLmJhclJhZGl1cyxyeTpzLmJhclJhZGl1cyx4OlMseTpFLHdpZHRoOlQsaGVpZ2h0Ok19KSx0aGlzLl9oYmFyWE1pbj1TK1QvMix0aGlzLl9oYmFyVHJhbnNsYXRlTWF4PXctVCk6KGRlbGV0ZSB0aGlzLmhiYXIsZGVsZXRlIHRoaXMuX2hiYXJYTWluLGRlbGV0ZSB0aGlzLl9oYmFyVHJhbnNsYXRlTWF4KTt2YXIgTD1tPmssej1zLmJhcldpZHRoKzIqcy5iYXJQYWQsTz1zLmJhckxlbmd0aCsyKnMuYmFyUGFkLEk9ZCtnLEQ9djtJK3o+bCYmKEk9bC16KTt2YXIgUD10aGlzLmNvbnRhaW5lci5zZWxlY3RBbGwoXCJyZWN0LnNjcm9sbGJhci12ZXJ0aWNhbFwiKS5kYXRhKEw/WzBdOltdKTtQLmV4aXQoKS5vbihcIi5kcmFnXCIsbnVsbCkucmVtb3ZlKCksUC5lbnRlcigpLmFwcGVuZChcInJlY3RcIikuY2xhc3NlZChcInNjcm9sbGJhci12ZXJ0aWNhbFwiLCEwKS5jYWxsKGkuZmlsbCxzLmJhckNvbG9yKSxMPyh0aGlzLnZiYXI9UC5hdHRyKHtyeDpzLmJhclJhZGl1cyxyeTpzLmJhclJhZGl1cyx4OkkseTpELHdpZHRoOnosaGVpZ2h0Ok99KSx0aGlzLl92YmFyWU1pbj1EK08vMix0aGlzLl92YmFyVHJhbnNsYXRlTWF4PWstTyk6KGRlbGV0ZSB0aGlzLnZiYXIsZGVsZXRlIHRoaXMuX3ZiYXJZTWluLGRlbGV0ZSB0aGlzLl92YmFyVHJhbnNsYXRlTWF4KTt2YXIgUj10aGlzLmlkLEY9dS0uNSxCPUw/aCt6Ky41OmgrLjUsTj1mLS41LGo9QT9wK00rLjU6cCsuNSxWPW8uX3RvcGRlZnMuc2VsZWN0QWxsKFwiI1wiK1IpLmRhdGEoQXx8TD9bMF06W10pO2lmKFYuZXhpdCgpLnJlbW92ZSgpLFYuZW50ZXIoKS5hcHBlbmQoXCJjbGlwUGF0aFwiKS5hdHRyKFwiaWRcIixSKS5hcHBlbmQoXCJyZWN0XCIpLEF8fEw/KHRoaXMuX2NsaXBSZWN0PVYuc2VsZWN0KFwicmVjdFwiKS5hdHRyKHt4Ok1hdGguZmxvb3IoRikseTpNYXRoLmZsb29yKE4pLHdpZHRoOk1hdGguY2VpbChCKS1NYXRoLmZsb29yKEYpLGhlaWdodDpNYXRoLmNlaWwoaiktTWF0aC5mbG9vcihOKX0pLHRoaXMuY29udGFpbmVyLmNhbGwoYS5zZXRDbGlwVXJsLFIsdGhpcy5nZCksdGhpcy5iZy5hdHRyKHt4OmQseTp2LHdpZHRoOmcsaGVpZ2h0Om19KSk6KHRoaXMuYmcuYXR0cih7d2lkdGg6MCxoZWlnaHQ6MH0pLHRoaXMuY29udGFpbmVyLm9uKFwid2hlZWxcIixudWxsKS5vbihcIi5kcmFnXCIsbnVsbCkuY2FsbChhLnNldENsaXBVcmwsbnVsbCksZGVsZXRlIHRoaXMuX2NsaXBSZWN0KSxBfHxMKXt2YXIgVT1uLmJlaGF2aW9yLmRyYWcoKS5vbihcImRyYWdzdGFydFwiLGZ1bmN0aW9uKCl7bi5ldmVudC5zb3VyY2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSkub24oXCJkcmFnXCIsdGhpcy5fb25Cb3hEcmFnLmJpbmQodGhpcykpO3RoaXMuY29udGFpbmVyLm9uKFwid2hlZWxcIixudWxsKS5vbihcIndoZWVsXCIsdGhpcy5fb25Cb3hXaGVlbC5iaW5kKHRoaXMpKS5vbihcIi5kcmFnXCIsbnVsbCkuY2FsbChVKTt2YXIgcT1uLmJlaGF2aW9yLmRyYWcoKS5vbihcImRyYWdzdGFydFwiLGZ1bmN0aW9uKCl7bi5ldmVudC5zb3VyY2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpLG4uZXZlbnQuc291cmNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9KS5vbihcImRyYWdcIix0aGlzLl9vbkJhckRyYWcuYmluZCh0aGlzKSk7QSYmdGhpcy5oYmFyLm9uKFwiLmRyYWdcIixudWxsKS5jYWxsKHEpLEwmJnRoaXMudmJhci5vbihcIi5kcmFnXCIsbnVsbCkuY2FsbChxKX10aGlzLnNldFRyYW5zbGF0ZShlLHIpfSxzLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7KHRoaXMuaGJhcnx8dGhpcy52YmFyKSYmKHRoaXMuYmcuYXR0cih7d2lkdGg6MCxoZWlnaHQ6MH0pLHRoaXMuY29udGFpbmVyLm9uKFwid2hlZWxcIixudWxsKS5vbihcIi5kcmFnXCIsbnVsbCkuY2FsbChhLnNldENsaXBVcmwsbnVsbCksZGVsZXRlIHRoaXMuX2NsaXBSZWN0KSx0aGlzLmhiYXImJih0aGlzLmhiYXIub24oXCIuZHJhZ1wiLG51bGwpLHRoaXMuaGJhci5yZW1vdmUoKSxkZWxldGUgdGhpcy5oYmFyLGRlbGV0ZSB0aGlzLl9oYmFyWE1pbixkZWxldGUgdGhpcy5faGJhclRyYW5zbGF0ZU1heCksdGhpcy52YmFyJiYodGhpcy52YmFyLm9uKFwiLmRyYWdcIixudWxsKSx0aGlzLnZiYXIucmVtb3ZlKCksZGVsZXRlIHRoaXMudmJhcixkZWxldGUgdGhpcy5fdmJhcllNaW4sZGVsZXRlIHRoaXMuX3ZiYXJUcmFuc2xhdGVNYXgpfSxzLnByb3RvdHlwZS5fb25Cb3hEcmFnPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50cmFuc2xhdGVYLGU9dGhpcy50cmFuc2xhdGVZO3RoaXMuaGJhciYmKHQtPW4uZXZlbnQuZHgpLHRoaXMudmJhciYmKGUtPW4uZXZlbnQuZHkpLHRoaXMuc2V0VHJhbnNsYXRlKHQsZSl9LHMucHJvdG90eXBlLl9vbkJveFdoZWVsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50cmFuc2xhdGVYLGU9dGhpcy50cmFuc2xhdGVZO3RoaXMuaGJhciYmKHQrPW4uZXZlbnQuZGVsdGFZKSx0aGlzLnZiYXImJihlKz1uLmV2ZW50LmRlbHRhWSksdGhpcy5zZXRUcmFuc2xhdGUodCxlKX0scy5wcm90b3R5cGUuX29uQmFyRHJhZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMudHJhbnNsYXRlWCxlPXRoaXMudHJhbnNsYXRlWTtpZih0aGlzLmhiYXIpe3ZhciByPXQrdGhpcy5faGJhclhNaW4saT1yK3RoaXMuX2hiYXJUcmFuc2xhdGVNYXg7dD0oby5jb25zdHJhaW4obi5ldmVudC54LHIsaSktcikvKGktcikqKHRoaXMucG9zaXRpb24udy10aGlzLl9ib3gudyl9aWYodGhpcy52YmFyKXt2YXIgYT1lK3RoaXMuX3ZiYXJZTWluLHM9YSt0aGlzLl92YmFyVHJhbnNsYXRlTWF4O2U9KG8uY29uc3RyYWluKG4uZXZlbnQueSxhLHMpLWEpLyhzLWEpKih0aGlzLnBvc2l0aW9uLmgtdGhpcy5fYm94LmgpfXRoaXMuc2V0VHJhbnNsYXRlKHQsZSl9LHMucHJvdG90eXBlLnNldFRyYW5zbGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMucG9zaXRpb24udy10aGlzLl9ib3gudyxuPXRoaXMucG9zaXRpb24uaC10aGlzLl9ib3guaDtpZih0PW8uY29uc3RyYWluKHR8fDAsMCxyKSxlPW8uY29uc3RyYWluKGV8fDAsMCxuKSx0aGlzLnRyYW5zbGF0ZVg9dCx0aGlzLnRyYW5zbGF0ZVk9ZSx0aGlzLmNvbnRhaW5lci5jYWxsKGEuc2V0VHJhbnNsYXRlLHRoaXMuX2JveC5sLXRoaXMucG9zaXRpb24ubC10LHRoaXMuX2JveC50LXRoaXMucG9zaXRpb24udC1lKSx0aGlzLl9jbGlwUmVjdCYmdGhpcy5fY2xpcFJlY3QuYXR0cih7eDpNYXRoLmZsb29yKHRoaXMucG9zaXRpb24ubCt0LS41KSx5Ok1hdGguZmxvb3IodGhpcy5wb3NpdGlvbi50K2UtLjUpfSksdGhpcy5oYmFyKXt2YXIgaT10L3I7dGhpcy5oYmFyLmNhbGwoYS5zZXRUcmFuc2xhdGUsdCtpKnRoaXMuX2hiYXJUcmFuc2xhdGVNYXgsZSl9aWYodGhpcy52YmFyKXt2YXIgcz1lL247dGhpcy52YmFyLmNhbGwoYS5zZXRUcmFuc2xhdGUsdCxlK3MqdGhpcy5fdmJhclRyYW5zbGF0ZU1heCl9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vY29sb3JcIjo1NzgsXCIuLi9kcmF3aW5nXCI6NTk5LGQzOjE1NX1dLDY3MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17RlJPTV9CTDp7bGVmdDowLGNlbnRlcjouNSxyaWdodDoxLGJvdHRvbTowLG1pZGRsZTouNSx0b3A6MX0sRlJPTV9UTDp7bGVmdDowLGNlbnRlcjouNSxyaWdodDoxLGJvdHRvbToxLG1pZGRsZTouNSx0b3A6MH0sRlJPTV9CUjp7bGVmdDoxLGNlbnRlcjouNSxyaWdodDowLGJvdHRvbTowLG1pZGRsZTouNSx0b3A6MX0sTElORV9TUEFDSU5HOjEuMyxDQVBfU0hJRlQ6LjcsTUlEX1NISUZUOi4zNSxPUFBPU0lURV9TSURFOntsZWZ0OlwicmlnaHRcIixyaWdodDpcImxlZnRcIix0b3A6XCJib3R0b21cIixib3R0b206XCJ0b3BcIn19fSx7fV0sNjc0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtDT01QQVJJU09OX09QUzpbXCI9XCIsXCIhPVwiLFwiPFwiLFwiPj1cIixcIj5cIixcIjw9XCJdLENPTVBBUklTT05fT1BTMjpbXCI9XCIsXCI8XCIsXCI+PVwiLFwiPlwiLFwiPD1cIl0sSU5URVJWQUxfT1BTOltcIltdXCIsXCIoKVwiLFwiWylcIixcIihdXCIsXCJdW1wiLFwiKShcIixcIl0oXCIsXCIpW1wiXSxTRVRfT1BTOltcInt9XCIsXCJ9e1wiXSxDT05TVFJBSU5UX1JFRFVDVElPTjp7XCI9XCI6XCI9XCIsXCI8XCI6XCI8XCIsXCI8PVwiOlwiPFwiLFwiPlwiOlwiPlwiLFwiPj1cIjpcIj5cIixcIltdXCI6XCJbXVwiLFwiKClcIjpcIltdXCIsXCJbKVwiOlwiW11cIixcIihdXCI6XCJbXVwiLFwiXVtcIjpcIl1bXCIsXCIpKFwiOlwiXVtcIixcIl0oXCI6XCJdW1wiLFwiKVtcIjpcIl1bXCJ9fX0se31dLDY3NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17c29saWQ6W1tdLDBdLGRvdDpbWy41LDFdLDIwMF0sZGFzaDpbWy41LDFdLDUwXSxsb25nZGFzaDpbWy41LDFdLDEwXSxkYXNoZG90OltbLjUsLjYyNSwuODc1LDFdLDUwXSxsb25nZGFzaGRvdDpbWy41LC43LC44LDFdLDEwXX19LHt9XSw2NzY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e2NpcmNsZTpcIlxcdTI1Y2ZcIixcImNpcmNsZS1vcGVuXCI6XCJcXHUyNWNiXCIsc3F1YXJlOlwiXFx1MjVhMFwiLFwic3F1YXJlLW9wZW5cIjpcIlxcdTI1YTFcIixkaWFtb25kOlwiXFx1MjVjNlwiLFwiZGlhbW9uZC1vcGVuXCI6XCJcXHUyNWM3XCIsY3Jvc3M6XCIrXCIseDpcIlxcdTI3NGNcIn19LHt9XSw2Nzc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e1NIT1dfUExBQ0VIT0xERVI6MTAwLEhJREVfUExBQ0VIT0xERVI6MWUzLERCTENMSUNLREVMQVk6MzAwLERFU0VMRUNURElNOi4yfX0se31dLDY3ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17QkFETlVNOnZvaWQgMCxGUF9TQUZFOk51bWJlci5NQVhfVkFMVUUvMWU0LE9ORUFWR1lFQVI6MzE1NTc2ZTUsT05FQVZHTU9OVEg6MjYyOThlNSxPTkVEQVk6ODY0ZTUsT05FSE9VUjozNmU1LE9ORU1JTjo2ZTQsT05FU0VDOjFlMyxFUE9DSEpEOjI0NDA1ODcuNSxBTE1PU1RfRVFVQUw6MS0xZS02LExPR19DTElQOjEwLE1JTlVTX1NJR046XCJcXHUyMjEyXCJ9fSx7fV0sNjc5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ci54bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvXCIsci5zdmc9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHIueGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsci5zdmdBdHRycz17eG1sbnM6ci5zdmcsXCJ4bWxuczp4bGlua1wiOnIueGxpbmt9fSx7fV0sNjgwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ci52ZXJzaW9uPVwiMS40Ny4xXCIsdChcImVzNi1wcm9taXNlXCIpLnBvbHlmaWxsKCksdChcIi4uL2J1aWxkL3Bsb3Rjc3NcIiksdChcIi4vZm9udHMvbWF0aGpheF9jb25maWdcIikoKTtmb3IodmFyIG49dChcIi4vcmVnaXN0cnlcIiksaT1yLnJlZ2lzdGVyPW4ucmVnaXN0ZXIsYT10KFwiLi9wbG90X2FwaVwiKSxvPU9iamVjdC5rZXlzKGEpLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTtcIl9cIiE9PWwuY2hhckF0KDApJiYocltsXT1hW2xdKSxpKHttb2R1bGVUeXBlOlwiYXBpTWV0aG9kXCIsbmFtZTpsLGZuOmFbbF19KX1pKHQoXCIuL3RyYWNlcy9zY2F0dGVyXCIpKSxpKFt0KFwiLi9jb21wb25lbnRzL2Z4XCIpLHQoXCIuL2NvbXBvbmVudHMvbGVnZW5kXCIpLHQoXCIuL2NvbXBvbmVudHMvYW5ub3RhdGlvbnNcIiksdChcIi4vY29tcG9uZW50cy9hbm5vdGF0aW9uczNkXCIpLHQoXCIuL2NvbXBvbmVudHMvc2hhcGVzXCIpLHQoXCIuL2NvbXBvbmVudHMvaW1hZ2VzXCIpLHQoXCIuL2NvbXBvbmVudHMvdXBkYXRlbWVudXNcIiksdChcIi4vY29tcG9uZW50cy9zbGlkZXJzXCIpLHQoXCIuL2NvbXBvbmVudHMvcmFuZ2VzbGlkZXJcIiksdChcIi4vY29tcG9uZW50cy9yYW5nZXNlbGVjdG9yXCIpLHQoXCIuL2NvbXBvbmVudHMvZ3JpZFwiKSx0KFwiLi9jb21wb25lbnRzL2Vycm9yYmFyc1wiKSx0KFwiLi9jb21wb25lbnRzL2NvbG9yc2NhbGVcIildKSxpKFt0KFwiLi9sb2NhbGUtZW5cIiksdChcIi4vbG9jYWxlLWVuLXVzXCIpXSksci5JY29ucz10KFwiLi4vYnVpbGQvcGxvdGljb25cIiksci5QbG90cz10KFwiLi9wbG90cy9wbG90c1wiKSxyLkZ4PXQoXCIuL2NvbXBvbmVudHMvZnhcIiksci5TbmFwc2hvdD10KFwiLi9zbmFwc2hvdFwiKSxyLlBsb3RTY2hlbWE9dChcIi4vcGxvdF9hcGkvcGxvdF9zY2hlbWFcIiksci5RdWV1ZT10KFwiLi9saWIvcXVldWVcIiksci5kMz10KFwiZDNcIil9LHtcIi4uL2J1aWxkL3Bsb3Rjc3NcIjoxLFwiLi4vYnVpbGQvcGxvdGljb25cIjoyLFwiLi9jb21wb25lbnRzL2Fubm90YXRpb25zXCI6NTY5LFwiLi9jb21wb25lbnRzL2Fubm90YXRpb25zM2RcIjo1NzQsXCIuL2NvbXBvbmVudHMvY29sb3JzY2FsZVwiOjU5MCxcIi4vY29tcG9uZW50cy9lcnJvcmJhcnNcIjo2MDUsXCIuL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuL2NvbXBvbmVudHMvZ3JpZFwiOjYyMSxcIi4vY29tcG9uZW50cy9pbWFnZXNcIjo2MjYsXCIuL2NvbXBvbmVudHMvbGVnZW5kXCI6NjM0LFwiLi9jb21wb25lbnRzL3Jhbmdlc2VsZWN0b3JcIjo2NDUsXCIuL2NvbXBvbmVudHMvcmFuZ2VzbGlkZXJcIjo2NTIsXCIuL2NvbXBvbmVudHMvc2hhcGVzXCI6NjYwLFwiLi9jb21wb25lbnRzL3NsaWRlcnNcIjo2NjUsXCIuL2NvbXBvbmVudHMvdXBkYXRlbWVudXNcIjo2NzEsXCIuL2ZvbnRzL21hdGhqYXhfY29uZmlnXCI6NjgxLFwiLi9saWIvcXVldWVcIjo3MTYsXCIuL2xvY2FsZS1lblwiOjczMCxcIi4vbG9jYWxlLWVuLXVzXCI6NzI5LFwiLi9wbG90X2FwaVwiOjczNCxcIi4vcGxvdF9hcGkvcGxvdF9zY2hlbWFcIjo3MzgsXCIuL3Bsb3RzL3Bsb3RzXCI6ODEwLFwiLi9yZWdpc3RyeVwiOjgyOSxcIi4vc25hcHNob3RcIjo4MzQsXCIuL3RyYWNlcy9zY2F0dGVyXCI6MTA2NCxkMzoxNTUsXCJlczYtcHJvbWlzZVwiOjIxMX1dLDY4MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbigpe1widW5kZWZpbmVkXCIhPXR5cGVvZiBNYXRoSmF4JiYoXCJsb2NhbFwiIT09KHdpbmRvdy5QbG90bHlDb25maWd8fHt9KS5NYXRoSmF4Q29uZmlnJiYoTWF0aEpheC5IdWIuQ29uZmlnKHttZXNzYWdlU3R5bGU6XCJub25lXCIsc2tpcFN0YXJ0dXBUeXBlc2V0OiEwLGRpc3BsYXlBbGlnbjpcImxlZnRcIix0ZXgyamF4OntpbmxpbmVNYXRoOltbXCIkXCIsXCIkXCJdLFtcIlxcXFwoXCIsXCJcXFxcKVwiXV19fSksTWF0aEpheC5IdWIuQ29uZmlndXJlZCgpKSl9fSx7fV0sNjgyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ci5pc0xlZnRBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuXCJsZWZ0XCI9PT10LnhhbmNob3J8fFwiYXV0b1wiPT09dC54YW5jaG9yJiZ0Lng8PTEvM30sci5pc0NlbnRlckFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm5cImNlbnRlclwiPT09dC54YW5jaG9yfHxcImF1dG9cIj09PXQueGFuY2hvciYmdC54PjEvMyYmdC54PDIvM30sci5pc1JpZ2h0QW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVyblwicmlnaHRcIj09PXQueGFuY2hvcnx8XCJhdXRvXCI9PT10LnhhbmNob3ImJnQueD49Mi8zfSxyLmlzVG9wQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVyblwidG9wXCI9PT10LnlhbmNob3J8fFwiYXV0b1wiPT09dC55YW5jaG9yJiZ0Lnk+PTIvM30sci5pc01pZGRsZUFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm5cIm1pZGRsZVwiPT09dC55YW5jaG9yfHxcImF1dG9cIj09PXQueWFuY2hvciYmdC55PjEvMyYmdC55PDIvM30sci5pc0JvdHRvbUFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm5cImJvdHRvbVwiPT09dC55YW5jaG9yfHxcImF1dG9cIj09PXQueWFuY2hvciYmdC55PD0xLzN9fSx7fV0sNjgzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vbW9kXCIpLGk9bi5tb2QsYT1uLm1vZEhhbGYsbz1NYXRoLlBJLHM9MipvO2Z1bmN0aW9uIGwodCl7cmV0dXJuIE1hdGguYWJzKHRbMV0tdFswXSk+cy0xZS0xNH1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIGEoZS10LHMpfWZ1bmN0aW9uIHUodCxlKXtpZihsKGUpKXJldHVybiEwO3ZhciByLG47ZVswXTxlWzFdPyhyPWVbMF0sbj1lWzFdKToocj1lWzFdLG49ZVswXSksKHI9aShyLHMpKT4obj1pKG4scykpJiYobis9cyk7dmFyIGE9aSh0LHMpLG89YStzO3JldHVybiBhPj1yJiZhPD1ufHxvPj1yJiZvPD1ufWZ1bmN0aW9uIGgodCxlLHIsbixpLGEsYyl7aT1pfHwwLGE9YXx8MDt2YXIgdSxoLGYscCxkLGc9bChbcixuXSk7ZnVuY3Rpb24gdih0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpK2ksYS10Kk1hdGguc2luKGUpXX1nPyh1PTAsaD1vLGY9cyk6cjxuPyh1PXIsZj1uKToodT1uLGY9ciksdDxlPyhwPXQsZD1lKToocD1lLGQ9dCk7dmFyIG0seT1NYXRoLmFicyhmLXUpPD1vPzA6MTtmdW5jdGlvbiB4KHQsZSxyKXtyZXR1cm5cIkFcIitbdCx0XStcIiBcIitbMCx5LHJdK1wiIFwiK3YodCxlKX1yZXR1cm4gZz9tPW51bGw9PT1wP1wiTVwiK3YoZCx1KSt4KGQsaCwwKSt4KGQsZiwwKStcIlpcIjpcIk1cIit2KHAsdSkreChwLGgsMCkreChwLGYsMCkrXCJaTVwiK3YoZCx1KSt4KGQsaCwxKSt4KGQsZiwxKStcIlpcIjpudWxsPT09cD8obT1cIk1cIit2KGQsdSkreChkLGYsMCksYyYmKG0rPVwiTDAsMFpcIikpOm09XCJNXCIrdihwLHUpK1wiTFwiK3YoZCx1KSt4KGQsZiwwKStcIkxcIit2KHAsZikreChwLHUsMSkrXCJaXCIsbX1lLmV4cG9ydHM9e2RlZzJyYWQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQvMTgwKm99LHJhZDJkZWc6ZnVuY3Rpb24odCl7cmV0dXJuIHQvbyoxODB9LGFuZ2xlRGVsdGE6YyxhbmdsZURpc3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hYnMoYyh0LGUpKX0saXNGdWxsQ2lyY2xlOmwsaXNBbmdsZUluc2lkZVNlY3Rvcjp1LGlzUHRJbnNpZGVTZWN0b3I6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuISF1KGUsbikmJihyWzBdPHJbMV0/KGk9clswXSxhPXJbMV0pOihpPXJbMV0sYT1yWzBdKSx0Pj1pJiZ0PD1hKTt2YXIgaSxhfSxwYXRoQXJjOmZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIGgobnVsbCx0LGUscixuLGksMCl9LHBhdGhTZWN0b3I6ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gaChudWxsLHQsZSxyLG4saSwxKX0scGF0aEFubnVsdXM6ZnVuY3Rpb24odCxlLHIsbixpLGEpe3JldHVybiBoKHQsZSxyLG4saSxhLDEpfX19LHtcIi4vbW9kXCI6NzA4fV0sNjg0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49QXJyYXkuaXNBcnJheSxpPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyOntpc1ZpZXc6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LGE9XCJ1bmRlZmluZWRcIj09dHlwZW9mIERhdGFWaWV3P2Z1bmN0aW9uKCl7fTpEYXRhVmlldztmdW5jdGlvbiBvKHQpe3JldHVybiBpLmlzVmlldyh0KSYmISh0IGluc3RhbmNlb2YgYSl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gbih0KXx8byh0KX1mdW5jdGlvbiBsKHQsZSxyKXtpZihzKHQpKXtpZihzKHRbMF0pKXtmb3IodmFyIG49cixpPTA7aTx0Lmxlbmd0aDtpKyspbj1lKG4sdFtpXS5sZW5ndGgpO3JldHVybiBufXJldHVybiB0Lmxlbmd0aH1yZXR1cm4gMH1yLmlzVHlwZWRBcnJheT1vLHIuaXNBcnJheU9yVHlwZWRBcnJheT1zLHIuaXNBcnJheTFEPWZ1bmN0aW9uKHQpe3JldHVybiFzKHRbMF0pfSxyLmVuc3VyZUFycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCl8fCh0PVtdKSx0Lmxlbmd0aD1lLHR9LHIuY29uY2F0PWZ1bmN0aW9uKCl7dmFyIHQsZSxyLGksYSxvLHMsbCxjPVtdLHU9ITAsaD0wO2ZvcihyPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKykobz0oaT1hcmd1bWVudHNbcl0pLmxlbmd0aCkmJihlP2MucHVzaChpKTooZT1pLGE9byksbihpKT90PSExOih1PSExLGg/dCE9PWkuY29uc3RydWN0b3ImJih0PSExKTp0PWkuY29uc3RydWN0b3IpLGgrPW8pO2lmKCFoKXJldHVybltdO2lmKCFjLmxlbmd0aClyZXR1cm4gZTtpZih1KXJldHVybiBlLmNvbmNhdC5hcHBseShlLGMpO2lmKHQpe2Zvcigocz1uZXcgdChoKSkuc2V0KGUpLHI9MDtyPGMubGVuZ3RoO3IrKylpPWNbcl0scy5zZXQoaSxhKSxhKz1pLmxlbmd0aDtyZXR1cm4gc31mb3Iocz1uZXcgQXJyYXkoaCksbD0wO2w8ZS5sZW5ndGg7bCsrKXNbbF09ZVtsXTtmb3Iocj0wO3I8Yy5sZW5ndGg7cisrKXtmb3IoaT1jW3JdLGw9MDtsPGkubGVuZ3RoO2wrKylzW2ErbF09aVtsXTthKz1sfXJldHVybiBzfSxyLm1heFJvd0xlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LE1hdGgubWF4LDApfSxyLm1pblJvd0xlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LE1hdGgubWluLDEvMCl9fSx7fV0sNjg1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNLGE9L15bJ1wiJSwkI1xccyddK3xbLCBdfFsnXCIlLCQjXFxzJ10rJC9nO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9dC5yZXBsYWNlKGEsXCJcIikpLG4odCk/TnVtYmVyKHQpOml9fSx7XCIuLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw2ODY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtlLl9nbGNhbnZhcyYmZS5fZ2xjYW52YXMuc2l6ZSgpJiZlLl9nbGNhbnZhcy5lYWNoKGZ1bmN0aW9uKHQpe3QucmVnbCYmdC5yZWdsLmNsZWFyKHtjb2xvcjohMCxkZXB0aDohMH0pfSl9fSx7fV0sNjg3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3QuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXImJih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHQuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXIpLGRlbGV0ZSB0Ll9yZXNwb25zaXZlQ2hhcnRIYW5kbGVyKX19LHt9XSw2ODg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwidGlueWNvbG9yMlwiKSxhPXQoXCIuLi9wbG90cy9hdHRyaWJ1dGVzXCIpLG89dChcIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9zY2FsZXNcIikscz10KFwiLi4vY29uc3RhbnRzL2ludGVyYWN0aW9uc1wiKS5ERVNFTEVDVERJTSxsPXQoXCIuL25lc3RlZF9wcm9wZXJ0eVwiKSxjPXQoXCIuL3JlZ2V4XCIpLmNvdW50ZXIsdT10KFwiLi9tb2RcIikubW9kSGFsZixoPXQoXCIuL2FycmF5XCIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZnVuY3Rpb24gZih0LGUpe3ZhciBuPXIudmFsT2JqZWN0TWV0YVtlLnZhbFR5cGVdO2lmKGUuYXJyYXlPayYmaCh0KSlyZXR1cm4hMDtpZihuLnZhbGlkYXRlRnVuY3Rpb24pcmV0dXJuIG4udmFsaWRhdGVGdW5jdGlvbih0LGUpO3ZhciBpPXt9LGE9aSxvPXtzZXQ6ZnVuY3Rpb24odCl7YT10fX07cmV0dXJuIG4uY29lcmNlRnVuY3Rpb24odCxvLGksZSksYSE9PWl9ci52YWxPYmplY3RNZXRhPXtkYXRhX2FycmF5Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7aCh0KT9lLnNldCh0KTp2b2lkIDAhPT1yJiZlLnNldChyKX19LGVudW1lcmF0ZWQ6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe24uY29lcmNlTnVtYmVyJiYodD0rdCksLTE9PT1uLnZhbHVlcy5pbmRleE9mKHQpP2Uuc2V0KHIpOmUuc2V0KHQpfSx2YWxpZGF0ZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSl7ZS5jb2VyY2VOdW1iZXImJih0PSt0KTtmb3IodmFyIHI9ZS52YWx1ZXMsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1TdHJpbmcocltuXSk7aWYoXCIvXCI9PT1pLmNoYXJBdCgwKSYmXCIvXCI9PT1pLmNoYXJBdChpLmxlbmd0aC0xKSl7aWYobmV3IFJlZ0V4cChpLnN1YnN0cigxLGkubGVuZ3RoLTIpKS50ZXN0KHQpKXJldHVybiEwfWVsc2UgaWYodD09PXJbbl0pcmV0dXJuITB9cmV0dXJuITF9fSxib29sZWFuOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7ITA9PT10fHwhMT09PXQ/ZS5zZXQodCk6ZS5zZXQocil9fSxudW1iZXI6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLGkpeyFuKHQpfHx2b2lkIDAhPT1pLm1pbiYmdDxpLm1pbnx8dm9pZCAwIT09aS5tYXgmJnQ+aS5tYXg/ZS5zZXQocik6ZS5zZXQoK3QpfX0saW50ZWdlcjp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsaSl7dCUxfHwhbih0KXx8dm9pZCAwIT09aS5taW4mJnQ8aS5taW58fHZvaWQgMCE9PWkubWF4JiZ0PmkubWF4P2Uuc2V0KHIpOmUuc2V0KCt0KX19LHN0cmluZzp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsbil7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpe3ZhciBpPVwibnVtYmVyXCI9PXR5cGVvZiB0OyEwIT09bi5zdHJpY3QmJmk/ZS5zZXQoU3RyaW5nKHQpKTplLnNldChyKX1lbHNlIG4ubm9CbGFuayYmIXQ/ZS5zZXQocik6ZS5zZXQodCl9fSxjb2xvcjp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpe2kodCkuaXNWYWxpZCgpP2Uuc2V0KHQpOmUuc2V0KHIpfX0sY29sb3JsaXN0Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7QXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGgmJnQuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIGkodCkuaXNWYWxpZCgpfSk/ZS5zZXQodCk6ZS5zZXQocil9fSxjb2xvcnNjYWxlOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7ZS5zZXQoby5nZXQodCxyKSl9fSxhbmdsZTp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpe1wiYXV0b1wiPT09dD9lLnNldChcImF1dG9cIik6bih0KT9lLnNldCh1KCt0LDM2MCkpOmUuc2V0KHIpfX0sc3VicGxvdGlkOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLnJlZ2V4fHxjKHIpO1wic3RyaW5nXCI9PXR5cGVvZiB0JiZpLnRlc3QodCk/ZS5zZXQodCk6ZS5zZXQocil9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmRmbHQ7cmV0dXJuIHQ9PT1yfHxcInN0cmluZ1wiPT10eXBlb2YgdCYmISFjKHIpLnRlc3QodCl9fSxmbGFnbGlzdDp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsbil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpaWYoLTE9PT0obi5leHRyYXN8fFtdKS5pbmRleE9mKHQpKXtmb3IodmFyIGk9dC5zcGxpdChcIitcIiksYT0wO2E8aS5sZW5ndGg7KXt2YXIgbz1pW2FdOy0xPT09bi5mbGFncy5pbmRleE9mKG8pfHxpLmluZGV4T2Yobyk8YT9pLnNwbGljZShhLDEpOmErK31pLmxlbmd0aD9lLnNldChpLmpvaW4oXCIrXCIpKTplLnNldChyKX1lbHNlIGUuc2V0KHQpO2Vsc2UgZS5zZXQocil9fSxhbnk6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXt2b2lkIDA9PT10P2Uuc2V0KHIpOmUuc2V0KHQpfX0saW5mb19hcnJheTp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLG4saSl7ZnVuY3Rpb24gYSh0LGUsbil7dmFyIGksYT17c2V0OmZ1bmN0aW9uKHQpe2k9dH19O3JldHVybiB2b2lkIDA9PT1uJiYobj1lLmRmbHQpLHIudmFsT2JqZWN0TWV0YVtlLnZhbFR5cGVdLmNvZXJjZUZ1bmN0aW9uKHQsYSxuLGUpLGl9dmFyIG89Mj09PWkuZGltZW5zaW9uc3x8XCIxLTJcIj09PWkuZGltZW5zaW9ucyYmQXJyYXkuaXNBcnJheSh0KSYmQXJyYXkuaXNBcnJheSh0WzBdKTtpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgcyxsLGMsdSxoLGYscD1pLml0ZW1zLGQ9W10sZz1BcnJheS5pc0FycmF5KHApLHY9ZyYmbyYmQXJyYXkuaXNBcnJheShwWzBdKSxtPW8mJmcmJiF2LHk9ZyYmIW0/cC5sZW5ndGg6dC5sZW5ndGg7aWYobj1BcnJheS5pc0FycmF5KG4pP246W10sbylmb3Iocz0wO3M8eTtzKyspZm9yKGRbc109W10sYz1BcnJheS5pc0FycmF5KHRbc10pP3Rbc106W10saD1tP3AubGVuZ3RoOmc/cFtzXS5sZW5ndGg6Yy5sZW5ndGgsbD0wO2w8aDtsKyspdT1tP3BbbF06Zz9wW3NdW2xdOnAsdm9pZCAwIT09KGY9YShjW2xdLHUsKG5bc118fFtdKVtsXSkpJiYoZFtzXVtsXT1mKTtlbHNlIGZvcihzPTA7czx5O3MrKyl2b2lkIDAhPT0oZj1hKHRbc10sZz9wW3NdOnAsbltzXSkpJiYoZFtzXT1mKTtlLnNldChkKX1lbHNlIGUuc2V0KG4pfSx2YWxpZGF0ZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSl7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuITE7dmFyIHI9ZS5pdGVtcyxuPUFycmF5LmlzQXJyYXkociksaT0yPT09ZS5kaW1lbnNpb25zO2lmKCFlLmZyZWVMZW5ndGgmJnQubGVuZ3RoIT09ci5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspaWYoaSl7aWYoIUFycmF5LmlzQXJyYXkodFthXSl8fCFlLmZyZWVMZW5ndGgmJnRbYV0ubGVuZ3RoIT09clthXS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBvPTA7bzx0W2FdLmxlbmd0aDtvKyspaWYoIWYodFthXVtvXSxuP3JbYV1bb106cikpcmV0dXJuITF9ZWxzZSBpZighZih0W2FdLG4/clthXTpyKSlyZXR1cm4hMTtyZXR1cm4hMH19fSxyLmNvZXJjZT1mdW5jdGlvbih0LGUsbixpLGEpe3ZhciBvPWwobixpKS5nZXQoKSxzPWwodCxpKSxjPWwoZSxpKSx1PXMuZ2V0KCkscD1lLl90ZW1wbGF0ZTtpZih2b2lkIDA9PT11JiZwJiYodT1sKHAsaSkuZ2V0KCkscD0wKSx2b2lkIDA9PT1hJiYoYT1vLmRmbHQpLG8uYXJyYXlPayYmaCh1KSlyZXR1cm4gYy5zZXQodSksdTt2YXIgZD1yLnZhbE9iamVjdE1ldGFbby52YWxUeXBlXS5jb2VyY2VGdW5jdGlvbjtkKHUsYyxhLG8pO3ZhciBnPWMuZ2V0KCk7cmV0dXJuIHAmJmc9PT1hJiYhZih1LG8pJiYoZCh1PWwocCxpKS5nZXQoKSxjLGEsbyksZz1jLmdldCgpKSxnfSxyLmNvZXJjZTI9ZnVuY3Rpb24odCxlLG4saSxhKXt2YXIgbz1sKHQsaSkscz1yLmNvZXJjZSh0LGUsbixpLGEpLGM9by5nZXQoKTtyZXR1cm4gbnVsbCE9YyYmc30sci5jb2VyY2VGb250PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj17fTtyZXR1cm4gcj1yfHx7fSxuLmZhbWlseT10KGUrXCIuZmFtaWx5XCIsci5mYW1pbHkpLG4uc2l6ZT10KGUrXCIuc2l6ZVwiLHIuc2l6ZSksbi5jb2xvcj10KGUrXCIuY29sb3JcIixyLmNvbG9yKSxufSxyLmNvZXJjZUhvdmVyaW5mbz1mdW5jdGlvbih0LGUsbil7dmFyIGksbz1lLl9tb2R1bGUuYXR0cmlidXRlcyxzPW8uaG92ZXJpbmZvP286YSxsPXMuaG92ZXJpbmZvO2lmKDE9PT1uLl9kYXRhTGVuZ3RoKXt2YXIgYz1cImFsbFwiPT09bC5kZmx0P2wuZmxhZ3Muc2xpY2UoKTpsLmRmbHQuc3BsaXQoXCIrXCIpO2Muc3BsaWNlKGMuaW5kZXhPZihcIm5hbWVcIiksMSksaT1jLmpvaW4oXCIrXCIpfXJldHVybiByLmNvZXJjZSh0LGUscyxcImhvdmVyaW5mb1wiLGkpfSxyLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHk9ZnVuY3Rpb24odCxlKXtpZih0Lm1hcmtlcil7dmFyIHIsbixpPXQubWFya2VyLm9wYWNpdHk7aWYodm9pZCAwIT09aSloKGkpfHx0LnNlbGVjdGVkfHx0LnVuc2VsZWN0ZWR8fChyPWksbj1zKmkpLGUoXCJzZWxlY3RlZC5tYXJrZXIub3BhY2l0eVwiLHIpLGUoXCJ1bnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5XCIsbil9fSxyLnZhbGlkYXRlPWZ9LHtcIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9zY2FsZXNcIjo1OTMsXCIuLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zXCI6Njc3LFwiLi4vcGxvdHMvYXR0cmlidXRlc1wiOjc0NixcIi4vYXJyYXlcIjo2ODQsXCIuL21vZFwiOjcwOCxcIi4vbmVzdGVkX3Byb3BlcnR5XCI6NzA5LFwiLi9yZWdleFwiOjcxNyxcImZhc3QtaXNudW1lcmljXCI6MjIyLHRpbnljb2xvcjI6NTIyfV0sNjg5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saSxhPXQoXCJkM1wiKSxvPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxzPXQoXCIuL2xvZ2dlcnNcIiksbD10KFwiLi9tb2RcIikubW9kLGM9dChcIi4uL2NvbnN0YW50cy9udW1lcmljYWxcIiksdT1jLkJBRE5VTSxoPWMuT05FREFZLGY9Yy5PTkVIT1VSLHA9Yy5PTkVNSU4sZD1jLk9ORVNFQyxnPWMuRVBPQ0hKRCx2PXQoXCIuLi9yZWdpc3RyeVwiKSxtPWEudGltZS5mb3JtYXQudXRjLHk9L15cXHMqKC0/XFxkXFxkXFxkXFxkfFxcZFxcZCkoLShcXGQ/XFxkKSgtKFxcZD9cXGQpKFsgVHRdKFswMV0/XFxkfDJbMC0zXSkoOihbMC01XVxcZCkoOihbMC01XVxcZChcXC5cXGQrKT8pKT8oWnx6fFsrXFwtXVxcZFxcZDo/XFxkXFxkKT8pPyk/KT8pP1xccyokL20seD0vXlxccyooLT9cXGRcXGRcXGRcXGR8XFxkXFxkKSgtKFxcZD9cXGRpPykoLShcXGQ/XFxkKShbIFR0XShbMDFdP1xcZHwyWzAtM10pKDooWzAtNV1cXGQpKDooWzAtNV1cXGQoXFwuXFxkKyk/KSk/KFp8enxbK1xcLV1cXGRcXGQ6P1xcZFxcZCk/KT8pPyk/KT9cXHMqJC9tLGI9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLTcwO2Z1bmN0aW9uIF8odCl7cmV0dXJuIHQmJnYuY29tcG9uZW50c1JlZ2lzdHJ5LmNhbGVuZGFycyYmXCJzdHJpbmdcIj09dHlwZW9mIHQmJlwiZ3JlZ29yaWFuXCIhPT10fWZ1bmN0aW9uIHcodCxlKXtyZXR1cm4gU3RyaW5nKHQrTWF0aC5wb3coMTAsZSkpLnN1YnN0cigxKX1yLmRhdGVUaWNrMD1mdW5jdGlvbih0LGUpe3JldHVybiBfKHQpP2U/di5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcIkNBTk9OSUNBTF9TVU5EQVlcIilbdF06di5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcIkNBTk9OSUNBTF9USUNLXCIpW3RdOmU/XCIyMDAwLTAxLTAyXCI6XCIyMDAwLTAxLTAxXCJ9LHIuZGZsdFJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBfKHQpP3YuZ2V0Q29tcG9uZW50TWV0aG9kKFwiY2FsZW5kYXJzXCIsXCJERkxUUkFOR0VcIilbdF06W1wiMjAwMC0wMS0wMVwiLFwiMjAwMS0wMS0wMVwiXX0sci5pc0pTRGF0ZT1mdW5jdGlvbih0KXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgdCYmbnVsbCE9PXQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQuZ2V0VGltZX0sci5kYXRlVGltZTJtcz1mdW5jdGlvbih0LGUpe2lmKHIuaXNKU0RhdGUodCkpe3ZhciBhPXQuZ2V0VGltZXpvbmVPZmZzZXQoKSpwLG89KHQuZ2V0VVRDTWludXRlcygpLXQuZ2V0TWludXRlcygpKSpwKyh0LmdldFVUQ1NlY29uZHMoKS10LmdldFNlY29uZHMoKSkqZCsodC5nZXRVVENNaWxsaXNlY29uZHMoKS10LmdldE1pbGxpc2Vjb25kcygpKTtpZihvKXt2YXIgcz0zKnA7YT1hLXMvMitsKG8tYStzLzIscyl9cmV0dXJuKHQ9TnVtYmVyKHQpLWEpPj1uJiZ0PD1pP3Q6dX1pZihcInN0cmluZ1wiIT10eXBlb2YgdCYmXCJudW1iZXJcIiE9dHlwZW9mIHQpcmV0dXJuIHU7dD1TdHJpbmcodCk7dmFyIGM9XyhlKSxtPXQuY2hhckF0KDApOyFjfHxcIkdcIiE9PW0mJlwiZ1wiIT09bXx8KHQ9dC5zdWJzdHIoMSksZT1cIlwiKTt2YXIgdz1jJiZcImNoaW5lc2VcIj09PWUuc3Vic3RyKDAsNyksaz10Lm1hdGNoKHc/eDp5KTtpZighaylyZXR1cm4gdTt2YXIgQT1rWzFdLFQ9a1szXXx8XCIxXCIsTT1OdW1iZXIoa1s1XXx8MSksUz1OdW1iZXIoa1s3XXx8MCksRT1OdW1iZXIoa1s5XXx8MCksQz1OdW1iZXIoa1sxMV18fDApO2lmKGMpe2lmKDI9PT1BLmxlbmd0aClyZXR1cm4gdTt2YXIgTDtBPU51bWJlcihBKTt0cnl7dmFyIHo9di5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcImdldENhbFwiKShlKTtpZih3KXt2YXIgTz1cImlcIj09PVQuY2hhckF0KFQubGVuZ3RoLTEpO1Q9cGFyc2VJbnQoVCwxMCksTD16Lm5ld0RhdGUoQSx6LnRvTW9udGhJbmRleChBLFQsTyksTSl9ZWxzZSBMPXoubmV3RGF0ZShBLE51bWJlcihUKSxNKX1jYXRjaCh0KXtyZXR1cm4gdX1yZXR1cm4gTD8oTC50b0pEKCktZykqaCtTKmYrRSpwK0MqZDp1fUE9Mj09PUEubGVuZ3RoPyhOdW1iZXIoQSkrMmUzLWIpJTEwMCtiOk51bWJlcihBKSxULT0xO3ZhciBJPW5ldyBEYXRlKERhdGUuVVRDKDJlMyxULE0sUyxFKSk7cmV0dXJuIEkuc2V0VVRDRnVsbFllYXIoQSksSS5nZXRVVENNb250aCgpIT09VD91OkkuZ2V0VVRDRGF0ZSgpIT09TT91OkkuZ2V0VGltZSgpK0MqZH0sbj1yLk1JTl9NUz1yLmRhdGVUaW1lMm1zKFwiLTk5OTlcIiksaT1yLk1BWF9NUz1yLmRhdGVUaW1lMm1zKFwiOTk5OS0xMi0zMSAyMzo1OTo1OS45OTk5XCIpLHIuaXNEYXRlVGltZT1mdW5jdGlvbih0LGUpe3JldHVybiByLmRhdGVUaW1lMm1zKHQsZSkhPT11fTt2YXIgaz05MCpoLEE9MypmLFQ9NSpwO2Z1bmN0aW9uIE0odCxlLHIsbixpKXtpZigoZXx8cnx8bnx8aSkmJih0Kz1cIiBcIit3KGUsMikrXCI6XCIrdyhyLDIpLChufHxpKSYmKHQrPVwiOlwiK3cobiwyKSxpKSkpe2Zvcih2YXIgYT00O2klMTA9PTA7KWEtPTEsaS89MTA7dCs9XCIuXCIrdyhpLGEpfXJldHVybiB0fXIubXMyRGF0ZVRpbWU9ZnVuY3Rpb24odCxlLHIpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0fHwhKHQ+PW4mJnQ8PWkpKXJldHVybiB1O2V8fChlPTApO3ZhciBhLG8scyxjLHkseCxiPU1hdGguZmxvb3IoMTAqbCh0Ky4wNSwxKSksdz1NYXRoLnJvdW5kKHQtYi8xMCk7aWYoXyhyKSl7dmFyIFM9TWF0aC5mbG9vcih3L2gpK2csRT1NYXRoLmZsb29yKGwodCxoKSk7dHJ5e2E9di5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcImdldENhbFwiKShyKS5mcm9tSkQoUykuZm9ybWF0RGF0ZShcInl5eXktbW0tZGRcIil9Y2F0Y2godCl7YT1tKFwiRyVZLSVtLSVkXCIpKG5ldyBEYXRlKHcpKX1pZihcIi1cIj09PWEuY2hhckF0KDApKWZvcig7YS5sZW5ndGg8MTE7KWE9XCItMFwiK2Euc3Vic3RyKDEpO2Vsc2UgZm9yKDthLmxlbmd0aDwxMDspYT1cIjBcIithO289ZTxrP01hdGguZmxvb3IoRS9mKTowLHM9ZTxrP01hdGguZmxvb3IoRSVmL3ApOjAsYz1lPEE/TWF0aC5mbG9vcihFJXAvZCk6MCx5PWU8VD9FJWQqMTArYjowfWVsc2UgeD1uZXcgRGF0ZSh3KSxhPW0oXCIlWS0lbS0lZFwiKSh4KSxvPWU8az94LmdldFVUQ0hvdXJzKCk6MCxzPWU8az94LmdldFVUQ01pbnV0ZXMoKTowLGM9ZTxBP3guZ2V0VVRDU2Vjb25kcygpOjAseT1lPFQ/MTAqeC5nZXRVVENNaWxsaXNlY29uZHMoKStiOjA7cmV0dXJuIE0oYSxvLHMsYyx5KX0sci5tczJEYXRlVGltZUxvY2FsPWZ1bmN0aW9uKHQpe2lmKCEodD49bitoJiZ0PD1pLWgpKXJldHVybiB1O3ZhciBlPU1hdGguZmxvb3IoMTAqbCh0Ky4wNSwxKSkscj1uZXcgRGF0ZShNYXRoLnJvdW5kKHQtZS8xMCkpO3JldHVybiBNKGEudGltZS5mb3JtYXQoXCIlWS0lbS0lZFwiKShyKSxyLmdldEhvdXJzKCksci5nZXRNaW51dGVzKCksci5nZXRTZWNvbmRzKCksMTAqci5nZXRVVENNaWxsaXNlY29uZHMoKStlKX0sci5jbGVhbkRhdGU9ZnVuY3Rpb24odCxlLG4pe2lmKHQ9PT11KXJldHVybiBlO2lmKHIuaXNKU0RhdGUodCl8fFwibnVtYmVyXCI9PXR5cGVvZiB0JiZpc0Zpbml0ZSh0KSl7aWYoXyhuKSlyZXR1cm4gcy5lcnJvcihcIkpTIERhdGVzIGFuZCBtaWxsaXNlY29uZHMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHdvcmxkIGNhbGVuZGFyc1wiLHQpLGU7aWYoISh0PXIubXMyRGF0ZVRpbWVMb2NhbCgrdCkpJiZ2b2lkIDAhPT1lKXJldHVybiBlfWVsc2UgaWYoIXIuaXNEYXRlVGltZSh0LG4pKXJldHVybiBzLmVycm9yKFwidW5yZWNvZ25pemVkIGRhdGVcIix0KSxlO3JldHVybiB0fTt2YXIgUz0vJVxcZD9mL2c7ZnVuY3Rpb24gRSh0LGUscixuKXt0PXQucmVwbGFjZShTLGZ1bmN0aW9uKHQpe3ZhciByPU1hdGgubWluKCt0LmNoYXJBdCgxKXx8Niw2KTtyZXR1cm4oZS8xZTMlMSsyKS50b0ZpeGVkKHIpLnN1YnN0cigyKS5yZXBsYWNlKC8wKyQvLFwiXCIpfHxcIjBcIn0pO3ZhciBpPW5ldyBEYXRlKE1hdGguZmxvb3IoZSsuMDUpKTtpZihfKG4pKXRyeXt0PXYuZ2V0Q29tcG9uZW50TWV0aG9kKFwiY2FsZW5kYXJzXCIsXCJ3b3JsZENhbEZtdFwiKSh0LGUsbil9Y2F0Y2godCl7cmV0dXJuXCJJbnZhbGlkXCJ9cmV0dXJuIHIodCkoaSl9dmFyIEM9WzU5LDU5LjksNTkuOTksNTkuOTk5LDU5Ljk5OTldO3IuZm9ybWF0RGF0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7aWYoaT1fKGkpJiZpLCFlKWlmKFwieVwiPT09cillPWEueWVhcjtlbHNlIGlmKFwibVwiPT09cillPWEubW9udGg7ZWxzZXtpZihcImRcIiE9PXIpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9bCh0Ky4wNSxoKSxuPXcoTWF0aC5mbG9vcihyL2YpLDIpK1wiOlwiK3cobChNYXRoLmZsb29yKHIvcCksNjApLDIpO2lmKFwiTVwiIT09ZSl7byhlKXx8KGU9MCk7dmFyIGk9KDEwMCtNYXRoLm1pbihsKHQvZCw2MCksQ1tlXSkpLnRvRml4ZWQoZSkuc3Vic3RyKDEpO2U+MCYmKGk9aS5yZXBsYWNlKC8wKyQvLFwiXCIpLnJlcGxhY2UoL1tcXC5dJC8sXCJcIikpLG4rPVwiOlwiK2l9cmV0dXJuIG59KHQscikrXCJcXG5cIitFKGEuZGF5TW9udGhZZWFyLHQsbixpKTtlPWEuZGF5TW9udGgrXCJcXG5cIithLnllYXJ9cmV0dXJuIEUoZSx0LG4saSl9O3ZhciBMPTMqaDtyLmluY3JlbWVudE1vbnRoPWZ1bmN0aW9uKHQsZSxyKXtyPV8ocikmJnI7dmFyIG49bCh0LGgpO2lmKHQ9TWF0aC5yb3VuZCh0LW4pLHIpdHJ5e3ZhciBpPU1hdGgucm91bmQodC9oKStnLGE9di5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcImdldENhbFwiKShyKSxvPWEuZnJvbUpEKGkpO3JldHVybiBlJTEyP2EuYWRkKG8sZSxcIm1cIik6YS5hZGQobyxlLzEyLFwieVwiKSwoby50b0pEKCktZykqaCtufWNhdGNoKGUpe3MuZXJyb3IoXCJpbnZhbGlkIG1zIFwiK3QrXCIgaW4gY2FsZW5kYXIgXCIrcil9dmFyIGM9bmV3IERhdGUodCtMKTtyZXR1cm4gYy5zZXRVVENNb250aChjLmdldFVUQ01vbnRoKCkrZSkrbi1MfSxyLmZpbmRFeGFjdERhdGVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG4saT0wLGE9MCxzPTAsbD0wLGM9XyhlKSYmdi5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcImdldENhbFwiKShlKSx1PTA7dTx0Lmxlbmd0aDt1KyspaWYobj10W3VdLG8obikpe2lmKCEobiVoKSlpZihjKXRyeXsxPT09KHI9Yy5mcm9tSkQobi9oK2cpKS5kYXkoKT8xPT09ci5tb250aCgpP2krKzphKys6cysrfWNhdGNoKHQpe31lbHNlIDE9PT0ocj1uZXcgRGF0ZShuKSkuZ2V0VVRDRGF0ZSgpPzA9PT1yLmdldFVUQ01vbnRoKCk/aSsrOmErKzpzKyt9ZWxzZSBsKys7cys9YSs9aTt2YXIgZj10Lmxlbmd0aC1sO3JldHVybntleGFjdFllYXJzOmkvZixleGFjdE1vbnRoczphL2YsZXhhY3REYXlzOnMvZn19fSx7XCIuLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vcmVnaXN0cnlcIjo4MjksXCIuL2xvZ2dlcnNcIjo3MDUsXCIuL21vZFwiOjcwOCxkMzoxNTUsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDY5MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJldmVudHNcIikuRXZlbnRFbWl0dGVyLGk9e2luaXQ6ZnVuY3Rpb24odCl7aWYodC5fZXYgaW5zdGFuY2VvZiBuKXJldHVybiB0O3ZhciBlPW5ldyBuLHI9bmV3IG47cmV0dXJuIHQuX2V2PWUsdC5faW50ZXJuYWxFdj1yLHQub249ZS5vbi5iaW5kKGUpLHQub25jZT1lLm9uY2UuYmluZChlKSx0LnJlbW92ZUxpc3RlbmVyPWUucmVtb3ZlTGlzdGVuZXIuYmluZChlKSx0LnJlbW92ZUFsbExpc3RlbmVycz1lLnJlbW92ZUFsbExpc3RlbmVycy5iaW5kKGUpLHQuX2ludGVybmFsT249ci5vbi5iaW5kKHIpLHQuX2ludGVybmFsT25jZT1yLm9uY2UuYmluZChyKSx0Ll9yZW1vdmVJbnRlcm5hbExpc3RlbmVyPXIucmVtb3ZlTGlzdGVuZXIuYmluZChyKSx0Ll9yZW1vdmVBbGxJbnRlcm5hbExpc3RlbmVycz1yLnJlbW92ZUFsbExpc3RlbmVycy5iaW5kKHIpLHQuZW1pdD1mdW5jdGlvbihuLGkpe1widW5kZWZpbmVkXCIhPXR5cGVvZiBqUXVlcnkmJmpRdWVyeSh0KS50cmlnZ2VyKG4saSksZS5lbWl0KG4saSksci5lbWl0KG4saSl9LHR9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpO1widW5kZWZpbmVkXCIhPXR5cGVvZiBqUXVlcnkmJihuPWpRdWVyeSh0KS50cmlnZ2VySGFuZGxlcihlLHIpKTt2YXIgYT10Ll9ldjtpZighYSlyZXR1cm4gbjt2YXIgbyxzPWEuX2V2ZW50c1tlXTtpZighcylyZXR1cm4gbjtmdW5jdGlvbiBsKHQpe3JldHVybiB0Lmxpc3RlbmVyPyhhLnJlbW92ZUxpc3RlbmVyKGUsdC5saXN0ZW5lciksdC5maXJlZD92b2lkIDA6KHQuZmlyZWQ9ITAsdC5saXN0ZW5lci5hcHBseShhLFtyXSkpKTp0LmFwcGx5KGEsW3JdKX1mb3Iocz1BcnJheS5pc0FycmF5KHMpP3M6W3NdLG89MDtvPHMubGVuZ3RoLTE7bysrKWwoc1tvXSk7cmV0dXJuIGk9bChzW29dKSx2b2lkIDAhPT1uP246aX0scHVyZ2U6ZnVuY3Rpb24odCl7cmV0dXJuIGRlbGV0ZSB0Ll9ldixkZWxldGUgdC5vbixkZWxldGUgdC5vbmNlLGRlbGV0ZSB0LnJlbW92ZUxpc3RlbmVyLGRlbGV0ZSB0LnJlbW92ZUFsbExpc3RlbmVycyxkZWxldGUgdC5lbWl0LGRlbGV0ZSB0Ll9ldixkZWxldGUgdC5faW50ZXJuYWxFdixkZWxldGUgdC5faW50ZXJuYWxPbixkZWxldGUgdC5faW50ZXJuYWxPbmNlLGRlbGV0ZSB0Ll9yZW1vdmVJbnRlcm5hbExpc3RlbmVyLGRlbGV0ZSB0Ll9yZW1vdmVBbGxJbnRlcm5hbExpc3RlbmVycyx0fX07ZS5leHBvcnRzPWl9LHtldmVudHM6OTV9XSw2OTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9pc19wbGFpbl9vYmplY3QuanNcIiksaT1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIGEodCxlLHIsbyl7dmFyIHMsbCxjLHUsaCxmLHA9dFswXSxkPXQubGVuZ3RoO2lmKDI9PT1kJiZpKHApJiZpKHRbMV0pJiYwPT09cC5sZW5ndGgpe2lmKGZ1bmN0aW9uKHQsZSl7dmFyIHIsbjtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXtpZihudWxsIT09KG49dFtyXSkmJlwib2JqZWN0XCI9PXR5cGVvZiBuKXJldHVybiExO3ZvaWQgMCE9PW4mJihlW3JdPW4pfXJldHVybiEwfSh0WzFdLHApKXJldHVybiBwO3Auc3BsaWNlKDAscC5sZW5ndGgpfWZvcih2YXIgZz0xO2c8ZDtnKyspZm9yKGwgaW4gcz10W2ddKWM9cFtsXSx1PXNbbF0sbyYmaSh1KT9wW2xdPXU6ZSYmdSYmKG4odSl8fChoPWkodSkpKT8oaD8oaD0hMSxmPWMmJmkoYyk/YzpbXSk6Zj1jJiZuKGMpP2M6e30scFtsXT1hKFtmLHVdLGUscixvKSk6KFwidW5kZWZpbmVkXCIhPXR5cGVvZiB1fHxyKSYmKHBbbF09dSk7cmV0dXJuIHB9ci5leHRlbmRGbGF0PWZ1bmN0aW9uKCl7cmV0dXJuIGEoYXJndW1lbnRzLCExLCExLCExKX0sci5leHRlbmREZWVwPWZ1bmN0aW9uKCl7cmV0dXJuIGEoYXJndW1lbnRzLCEwLCExLCExKX0sci5leHRlbmREZWVwQWxsPWZ1bmN0aW9uKCl7cmV0dXJuIGEoYXJndW1lbnRzLCEwLCEwLCExKX0sci5leHRlbmREZWVwTm9BcnJheXM9ZnVuY3Rpb24oKXtyZXR1cm4gYShhcmd1bWVudHMsITAsITEsITApfX0se1wiLi9pc19wbGFpbl9vYmplY3QuanNcIjo3MDJ9XSw2OTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LHI9W10sbj0wLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dFtpXTsxIT09ZVthXSYmKGVbYV09MSxyW24rK109YSl9cmV0dXJuIHJ9fSx7fV0sNjkzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4hMD09PXQudmlzaWJsZX1mdW5jdGlvbiBpKHQpe3JldHVybiEwPT09dFswXS50cmFjZS52aXNpYmxlfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscj0oZT10LEFycmF5LmlzQXJyYXkoZSkmJkFycmF5LmlzQXJyYXkoZVswXSkmJmVbMF1bMF0mJmVbMF1bMF0udHJhY2U/aTpuKSxhPVtdLG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9dFtvXTtyKHMpJiZhLnB1c2gocyl9cmV0dXJuIGF9fSx7fV0sNjk0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImNvdW50cnktcmVnZXhcIiksaT10KFwiLi4vbGliXCIpLGE9T2JqZWN0LmtleXMobiksbz17XCJJU08tM1wiOmkuaWRlbnRpdHksXCJVU0Etc3RhdGVzXCI6aS5pZGVudGl0eSxcImNvdW50cnkgbmFtZXNcIjpmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPGEubGVuZ3RoO2UrKyl7dmFyIHI9YVtlXSxvPW5ldyBSZWdFeHAobltyXSk7aWYoby50ZXN0KHQudHJpbSgpLnRvTG93ZXJDYXNlKCkpKXJldHVybiByfXJldHVybiBpLmxvZyhcIlVucmVjb2duaXplZCBjb3VudHJ5IG5hbWU6IFwiK3QrXCIuXCIpLCExfX07ci5sb2NhdGlvblRvRmVhdHVyZT1mdW5jdGlvbih0LGUscil7aWYoIWV8fFwic3RyaW5nXCIhPXR5cGVvZiBlKXJldHVybiExO3ZhciBuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKDAsb1t0XSkoZSl9KHQsZSk7aWYobil7Zm9yKHZhciBhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV07aWYocy5pZD09PW4pcmV0dXJuIHN9aS5sb2coW1wiTG9jYXRpb24gd2l0aCBpZFwiLG4sXCJkb2VzIG5vdCBoYXZlIGEgbWF0Y2hpbmcgdG9wb2pzb24gZmVhdHVyZSBhdCB0aGlzIHJlc29sdXRpb24uXCJdLmpvaW4oXCIgXCIpKX1yZXR1cm4hMX19LHtcIi4uL2xpYlwiOjcwMSxcImNvdW50cnktcmVnZXhcIjoxMjV9XSw2OTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKS5CQUROVU07ci5jYWxjVHJhY2VUb0xpbmVDb29yZHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF0udHJhY2UuY29ubmVjdGdhcHMscj1bXSxpPVtdLGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89dFthXS5sb25sYXQ7b1swXSE9PW4/aS5wdXNoKG8pOiFlJiZpLmxlbmd0aD4wJiYoci5wdXNoKGkpLGk9W10pfXJldHVybiBpLmxlbmd0aD4wJiZyLnB1c2goaSkscn0sci5tYWtlTGluZT1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXQubGVuZ3RoP3t0eXBlOlwiTGluZVN0cmluZ1wiLGNvb3JkaW5hdGVzOnRbMF19Ont0eXBlOlwiTXVsdGlMaW5lU3RyaW5nXCIsY29vcmRpbmF0ZXM6dH19LHIubWFrZVBvbHlnb249ZnVuY3Rpb24odCl7aWYoMT09PXQubGVuZ3RoKXJldHVybnt0eXBlOlwiUG9seWdvblwiLGNvb3JkaW5hdGVzOnR9O2Zvcih2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9MDtyPHQubGVuZ3RoO3IrKyllW3JdPVt0W3JdXTtyZXR1cm57dHlwZTpcIk11bHRpUG9seWdvblwiLGNvb3JkaW5hdGVzOmV9fSxyLm1ha2VCbGFuaz1mdW5jdGlvbigpe3JldHVybnt0eXBlOlwiUG9pbnRcIixjb29yZGluYXRlczpbXX19fSx7XCIuLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4fV0sNjk2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saSxhLG89dChcIi4vbW9kXCIpLm1vZDtmdW5jdGlvbiBzKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9ci10LGM9aS10LHU9by1pLGg9bi1lLGY9YS1lLHA9cy1hLGQ9bCpwLXUqaDtpZigwPT09ZClyZXR1cm4gbnVsbDt2YXIgZz0oYypwLXUqZikvZCx2PShjKmgtbCpmKS9kO3JldHVybiB2PDB8fHY+MXx8ZzwwfHxnPjE/bnVsbDp7eDp0K2wqZyx5OmUraCpnfX1mdW5jdGlvbiBsKHQsZSxyLG4saSl7dmFyIGE9bip0K2kqZTtpZihhPDApcmV0dXJuIG4qbitpKmk7aWYoYT5yKXt2YXIgbz1uLXQscz1pLWU7cmV0dXJuIG8qbytzKnN9dmFyIGw9biplLWkqdDtyZXR1cm4gbCpsL3J9ci5zZWdtZW50c0ludGVyc2VjdD1zLHIuc2VnbWVudERpc3RhbmNlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8sYyl7aWYocyh0LGUscixuLGksYSxvLGMpKXJldHVybiAwO3ZhciB1PXItdCxoPW4tZSxmPW8taSxwPWMtYSxkPXUqdStoKmgsZz1mKmYrcCpwLHY9TWF0aC5taW4obCh1LGgsZCxpLXQsYS1lKSxsKHUsaCxkLG8tdCxjLWUpLGwoZixwLGcsdC1pLGUtYSksbChmLHAsZyxyLWksbi1hKSk7cmV0dXJuIE1hdGguc3FydCh2KX0sci5nZXRUZXh0TG9jYXRpb249ZnVuY3Rpb24odCxlLHIscyl7aWYodD09PWkmJnM9PT1hfHwobj17fSxpPXQsYT1zKSxuW3JdKXJldHVybiBuW3JdO3ZhciBsPXQuZ2V0UG9pbnRBdExlbmd0aChvKHItcy8yLGUpKSxjPXQuZ2V0UG9pbnRBdExlbmd0aChvKHIrcy8yLGUpKSx1PU1hdGguYXRhbigoYy55LWwueSkvKGMueC1sLngpKSxoPXQuZ2V0UG9pbnRBdExlbmd0aChvKHIsZSkpLGY9e3g6KDQqaC54K2wueCtjLngpLzYseTooNCpoLnkrbC55K2MueSkvNix0aGV0YTp1fTtyZXR1cm4gbltyXT1mLGZ9LHIuY2xlYXJMb2NhdGlvbkNhY2hlPWZ1bmN0aW9uKCl7aT1udWxsfSxyLmdldFZpc2libGVTZWdtZW50PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9ZS5sZWZ0LG89ZS5yaWdodCxzPWUudG9wLGw9ZS5ib3R0b20sYz0wLHU9dC5nZXRUb3RhbExlbmd0aCgpLGg9dTtmdW5jdGlvbiBmKGUpe3ZhciByPXQuZ2V0UG9pbnRBdExlbmd0aChlKTswPT09ZT9uPXI6ZT09PXUmJihpPXIpO3ZhciBjPXIueDxhP2Etci54OnIueD5vP3IueC1vOjAsaD1yLnk8cz9zLXIueTpyLnk+bD9yLnktbDowO3JldHVybiBNYXRoLnNxcnQoYypjK2gqaCl9Zm9yKHZhciBwPWYoYyk7cDspe2lmKChjKz1wK3IpPmgpcmV0dXJuO3A9ZihjKX1mb3IocD1mKGgpO3A7KXtpZihjPihoLT1wK3IpKXJldHVybjtwPWYoaCl9cmV0dXJue21pbjpjLG1heDpoLGxlbjpoLWMsdG90YWw6dSxpc0Nsb3NlZDowPT09YyYmaD09PXUmJk1hdGguYWJzKG4ueC1pLngpPC4xJiZNYXRoLmFicyhuLnktaS55KTwuMX19LHIuZmluZFBvaW50T25QYXRoPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaSxhLG8scz0obj1ufHx7fSkucGF0aExlbmd0aHx8dC5nZXRUb3RhbExlbmd0aCgpLGw9bi50b2xlcmFuY2V8fC4wMDEsYz1uLml0ZXJhdGlvbkxpbWl0fHwzMCx1PXQuZ2V0UG9pbnRBdExlbmd0aCgwKVtyXT50LmdldFBvaW50QXRMZW5ndGgocylbcl0/LTE6MSxoPTAsZj0wLHA9cztoPGM7KXtpZihpPShmK3ApLzIsbz0oYT10LmdldFBvaW50QXRMZW5ndGgoaSkpW3JdLWUsTWF0aC5hYnMobyk8bClyZXR1cm4gYTt1Km8+MD9wPWk6Zj1pLGgrK31yZXR1cm4gYX19LHtcIi4vbW9kXCI6NzA4fV0sNjk3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXtpZihudWxsPT09KGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCkpKXRocm93IG5ldyBFcnJvcihcIk5vIERPTSBlbGVtZW50IHdpdGggaWQgJ1wiK3QrXCInIGV4aXN0cyBvbiB0aGUgcGFnZS5cIik7cmV0dXJuIGV9aWYobnVsbD09dCl0aHJvdyBuZXcgRXJyb3IoXCJET00gZWxlbWVudCBwcm92aWRlZCBpcyBudWxsIG9yIHVuZGVmaW5lZFwiKTtyZXR1cm4gdH19LHt9XSw2OTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwidGlueWNvbG9yMlwiKSxhPXQoXCJjb2xvci1ub3JtYWxpemVcIiksbz10KFwiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlXCIpLHM9dChcIi4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiKS5kZWZhdWx0TGluZSxsPXQoXCIuL2FycmF5XCIpLmlzQXJyYXlPclR5cGVkQXJyYXksYz1hKHMpLHU9MTtmdW5jdGlvbiBoKHQsZSl7dmFyIHI9dDtyZXR1cm4gclszXSo9ZSxyfWZ1bmN0aW9uIGYodCl7aWYobih0KSlyZXR1cm4gYzt2YXIgZT1hKHQpO3JldHVybiBlLmxlbmd0aD9lOmN9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gbih0KT90OnV9ZS5leHBvcnRzPXtmb3JtYXRDb2xvcjpmdW5jdGlvbih0LGUscil7dmFyIG4saSxzLGQsZyx2PXQuY29sb3IsbT1sKHYpLHk9bChlKSx4PVtdO2lmKG49dm9pZCAwIT09dC5jb2xvcnNjYWxlP28ubWFrZUNvbG9yU2NhbGVGdW5jKG8uZXh0cmFjdFNjYWxlKHQse2NMZXR0ZXI6XCJjXCJ9KSk6ZixpPW0/ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09dFtlXT9jOmEobih0W2VdKSl9OmYscz15P2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PXRbZV0/dTpwKHRbZV0pfTpwLG18fHkpZm9yKHZhciBiPTA7YjxyO2IrKylkPWkodixiKSxnPXMoZSxiKSx4W2JdPWgoZCxnKTtlbHNlIHg9aChhKHYpLGUpO3JldHVybiB4fSxwYXJzZUNvbG9yU2NhbGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9MSksKHQucmV2ZXJzZXNjYWxlP28uZmxpcFNjYWxlKHQuY29sb3JzY2FsZSk6dC5jb2xvcnNjYWxlKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9dFswXSxuPWkodFsxXSkudG9SZ2IoKTtyZXR1cm57aW5kZXg6cixyZ2I6W24ucixuLmcsbi5iLGVdfX0pfX19LHtcIi4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiOjU3NyxcIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZVwiOjU5MCxcIi4vYXJyYXlcIjo2ODQsXCJjb2xvci1ub3JtYWxpemVcIjoxMTEsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMix0aW55Y29sb3IyOjUyMn1dLDY5OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2lkZW50aXR5XCIpO2Z1bmN0aW9uIGkodCl7cmV0dXJuW3RdfWUuZXhwb3J0cz17a2V5RnVuOmZ1bmN0aW9uKHQpe3JldHVybiB0LmtleX0scmVwZWF0OmksZGVzY2VuZDpuLHdyYXA6aSx1bndyYXA6ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19fX0se1wiLi9pZGVudGl0eVwiOjcwMH1dLDcwMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdH19LHt9XSw3MDE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiZmFzdC1pc251bWVyaWNcIiksYT10KFwiLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKSxvPWEuRlBfU0FGRSxzPWEuQkFETlVNLGw9ZS5leHBvcnRzPXt9O2wubmVzdGVkUHJvcGVydHk9dChcIi4vbmVzdGVkX3Byb3BlcnR5XCIpLGwua2V5ZWRDb250YWluZXI9dChcIi4va2V5ZWRfY29udGFpbmVyXCIpLGwucmVsYXRpdmVBdHRyPXQoXCIuL3JlbGF0aXZlX2F0dHJcIiksbC5pc1BsYWluT2JqZWN0PXQoXCIuL2lzX3BsYWluX29iamVjdFwiKSxsLnRvTG9nUmFuZ2U9dChcIi4vdG9fbG9nX3JhbmdlXCIpLGwucmVsaW5rUHJpdmF0ZUtleXM9dChcIi4vcmVsaW5rX3ByaXZhdGVcIik7dmFyIGM9dChcIi4vYXJyYXlcIik7bC5pc1R5cGVkQXJyYXk9Yy5pc1R5cGVkQXJyYXksbC5pc0FycmF5T3JUeXBlZEFycmF5PWMuaXNBcnJheU9yVHlwZWRBcnJheSxsLmlzQXJyYXkxRD1jLmlzQXJyYXkxRCxsLmVuc3VyZUFycmF5PWMuZW5zdXJlQXJyYXksbC5jb25jYXQ9Yy5jb25jYXQsbC5tYXhSb3dMZW5ndGg9Yy5tYXhSb3dMZW5ndGgsbC5taW5Sb3dMZW5ndGg9Yy5taW5Sb3dMZW5ndGg7dmFyIHU9dChcIi4vbW9kXCIpO2wubW9kPXUubW9kLGwubW9kSGFsZj11Lm1vZEhhbGY7dmFyIGg9dChcIi4vY29lcmNlXCIpO2wudmFsT2JqZWN0TWV0YT1oLnZhbE9iamVjdE1ldGEsbC5jb2VyY2U9aC5jb2VyY2UsbC5jb2VyY2UyPWguY29lcmNlMixsLmNvZXJjZUZvbnQ9aC5jb2VyY2VGb250LGwuY29lcmNlSG92ZXJpbmZvPWguY29lcmNlSG92ZXJpbmZvLGwuY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eT1oLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHksbC52YWxpZGF0ZT1oLnZhbGlkYXRlO3ZhciBmPXQoXCIuL2RhdGVzXCIpO2wuZGF0ZVRpbWUybXM9Zi5kYXRlVGltZTJtcyxsLmlzRGF0ZVRpbWU9Zi5pc0RhdGVUaW1lLGwubXMyRGF0ZVRpbWU9Zi5tczJEYXRlVGltZSxsLm1zMkRhdGVUaW1lTG9jYWw9Zi5tczJEYXRlVGltZUxvY2FsLGwuY2xlYW5EYXRlPWYuY2xlYW5EYXRlLGwuaXNKU0RhdGU9Zi5pc0pTRGF0ZSxsLmZvcm1hdERhdGU9Zi5mb3JtYXREYXRlLGwuaW5jcmVtZW50TW9udGg9Zi5pbmNyZW1lbnRNb250aCxsLmRhdGVUaWNrMD1mLmRhdGVUaWNrMCxsLmRmbHRSYW5nZT1mLmRmbHRSYW5nZSxsLmZpbmRFeGFjdERhdGVzPWYuZmluZEV4YWN0RGF0ZXMsbC5NSU5fTVM9Zi5NSU5fTVMsbC5NQVhfTVM9Zi5NQVhfTVM7dmFyIHA9dChcIi4vc2VhcmNoXCIpO2wuZmluZEJpbj1wLmZpbmRCaW4sbC5zb3J0ZXJBc2M9cC5zb3J0ZXJBc2MsbC5zb3J0ZXJEZXM9cC5zb3J0ZXJEZXMsbC5kaXN0aW5jdFZhbHM9cC5kaXN0aW5jdFZhbHMsbC5yb3VuZFVwPXAucm91bmRVcCxsLnNvcnQ9cC5zb3J0LGwuZmluZEluZGV4T2ZNaW49cC5maW5kSW5kZXhPZk1pbjt2YXIgZD10KFwiLi9zdGF0c1wiKTtsLmFnZ051bXM9ZC5hZ2dOdW1zLGwubGVuPWQubGVuLGwubWVhbj1kLm1lYW4sbC5taWRSYW5nZT1kLm1pZFJhbmdlLGwudmFyaWFuY2U9ZC52YXJpYW5jZSxsLnN0ZGV2PWQuc3RkZXYsbC5pbnRlcnA9ZC5pbnRlcnA7dmFyIGc9dChcIi4vbWF0cml4XCIpO2wuaW5pdDJkQXJyYXk9Zy5pbml0MmRBcnJheSxsLnRyYW5zcG9zZVJhZ2dlZD1nLnRyYW5zcG9zZVJhZ2dlZCxsLmRvdD1nLmRvdCxsLnRyYW5zbGF0aW9uTWF0cml4PWcudHJhbnNsYXRpb25NYXRyaXgsbC5yb3RhdGlvbk1hdHJpeD1nLnJvdGF0aW9uTWF0cml4LGwucm90YXRpb25YWU1hdHJpeD1nLnJvdGF0aW9uWFlNYXRyaXgsbC5hcHBseTJEVHJhbnNmb3JtPWcuYXBwbHkyRFRyYW5zZm9ybSxsLmFwcGx5MkRUcmFuc2Zvcm0yPWcuYXBwbHkyRFRyYW5zZm9ybTI7dmFyIHY9dChcIi4vYW5nbGVzXCIpO2wuZGVnMnJhZD12LmRlZzJyYWQsbC5yYWQyZGVnPXYucmFkMmRlZyxsLmFuZ2xlRGVsdGE9di5hbmdsZURlbHRhLGwuYW5nbGVEaXN0PXYuYW5nbGVEaXN0LGwuaXNGdWxsQ2lyY2xlPXYuaXNGdWxsQ2lyY2xlLGwuaXNBbmdsZUluc2lkZVNlY3Rvcj12LmlzQW5nbGVJbnNpZGVTZWN0b3IsbC5pc1B0SW5zaWRlU2VjdG9yPXYuaXNQdEluc2lkZVNlY3RvcixsLnBhdGhBcmM9di5wYXRoQXJjLGwucGF0aFNlY3Rvcj12LnBhdGhTZWN0b3IsbC5wYXRoQW5udWx1cz12LnBhdGhBbm51bHVzO3ZhciBtPXQoXCIuL2FuY2hvcl91dGlsc1wiKTtsLmlzTGVmdEFuY2hvcj1tLmlzTGVmdEFuY2hvcixsLmlzQ2VudGVyQW5jaG9yPW0uaXNDZW50ZXJBbmNob3IsbC5pc1JpZ2h0QW5jaG9yPW0uaXNSaWdodEFuY2hvcixsLmlzVG9wQW5jaG9yPW0uaXNUb3BBbmNob3IsbC5pc01pZGRsZUFuY2hvcj1tLmlzTWlkZGxlQW5jaG9yLGwuaXNCb3R0b21BbmNob3I9bS5pc0JvdHRvbUFuY2hvcjt2YXIgeT10KFwiLi9nZW9tZXRyeTJkXCIpO2wuc2VnbWVudHNJbnRlcnNlY3Q9eS5zZWdtZW50c0ludGVyc2VjdCxsLnNlZ21lbnREaXN0YW5jZT15LnNlZ21lbnREaXN0YW5jZSxsLmdldFRleHRMb2NhdGlvbj15LmdldFRleHRMb2NhdGlvbixsLmNsZWFyTG9jYXRpb25DYWNoZT15LmNsZWFyTG9jYXRpb25DYWNoZSxsLmdldFZpc2libGVTZWdtZW50PXkuZ2V0VmlzaWJsZVNlZ21lbnQsbC5maW5kUG9pbnRPblBhdGg9eS5maW5kUG9pbnRPblBhdGg7dmFyIHg9dChcIi4vZXh0ZW5kXCIpO2wuZXh0ZW5kRmxhdD14LmV4dGVuZEZsYXQsbC5leHRlbmREZWVwPXguZXh0ZW5kRGVlcCxsLmV4dGVuZERlZXBBbGw9eC5leHRlbmREZWVwQWxsLGwuZXh0ZW5kRGVlcE5vQXJyYXlzPXguZXh0ZW5kRGVlcE5vQXJyYXlzO3ZhciBiPXQoXCIuL2xvZ2dlcnNcIik7bC5sb2c9Yi5sb2csbC53YXJuPWIud2FybixsLmVycm9yPWIuZXJyb3I7dmFyIF89dChcIi4vcmVnZXhcIik7bC5jb3VudGVyUmVnZXg9Xy5jb3VudGVyO3ZhciB3PXQoXCIuL3Rocm90dGxlXCIpO2Z1bmN0aW9uIGsodCl7dmFyIGU9e307Zm9yKHZhciByIGluIHQpZm9yKHZhciBuPXRbcl0saT0wO2k8bi5sZW5ndGg7aSsrKWVbbltpXV09K3I7cmV0dXJuIGV9bC50aHJvdHRsZT13LnRocm90dGxlLGwudGhyb3R0bGVEb25lPXcuZG9uZSxsLmNsZWFyVGhyb3R0bGU9dy5jbGVhcixsLmdldEdyYXBoRGl2PXQoXCIuL2dldF9ncmFwaF9kaXZcIiksbC5jbGVhclJlc3BvbnNpdmU9dChcIi4vY2xlYXJfcmVzcG9uc2l2ZVwiKSxsLm1ha2VUcmFjZUdyb3Vwcz10KFwiLi9tYWtlX3RyYWNlX2dyb3Vwc1wiKSxsLl89dChcIi4vbG9jYWxpemVcIiksbC5ub3RpZmllcj10KFwiLi9ub3RpZmllclwiKSxsLmZpbHRlclVuaXF1ZT10KFwiLi9maWx0ZXJfdW5pcXVlXCIpLGwuZmlsdGVyVmlzaWJsZT10KFwiLi9maWx0ZXJfdmlzaWJsZVwiKSxsLnB1c2hVbmlxdWU9dChcIi4vcHVzaF91bmlxdWVcIiksbC5jbGVhbk51bWJlcj10KFwiLi9jbGVhbl9udW1iZXJcIiksbC5lbnN1cmVOdW1iZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCk/KHQ9TnVtYmVyKHQpKTwtb3x8dD5vP3M6aSh0KT9OdW1iZXIodCk6czpzfSxsLmlzSW5kZXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4hKHZvaWQgMCE9PWUmJnQ+PWUpJiYoaSh0KSYmdD49MCYmdCUxPT0wKX0sbC5ub29wPXQoXCIuL25vb3BcIiksbC5pZGVudGl0eT10KFwiLi9pZGVudGl0eVwiKSxsLnJlcGVhdD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspcltuXT10O3JldHVybiByfSxsLnN3YXBBdHRycz1mdW5jdGlvbih0LGUscixuKXtyfHwocj1cInhcIiksbnx8KG49XCJ5XCIpO2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1lW2ldLG89bC5uZXN0ZWRQcm9wZXJ0eSh0LGEucmVwbGFjZShcIj9cIixyKSkscz1sLm5lc3RlZFByb3BlcnR5KHQsYS5yZXBsYWNlKFwiP1wiLG4pKSxjPW8uZ2V0KCk7by5zZXQocy5nZXQoKSkscy5zZXQoYyl9fSxsLnJhaXNlVG9Ub3A9ZnVuY3Rpb24odCl7dC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHQpfSxsLmNhbmNlbFRyYW5zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHQudHJhbnNpdGlvbigpLmR1cmF0aW9uKDApfSxsLmNvbnN0cmFpbj1mdW5jdGlvbih0LGUscil7cmV0dXJuIGU+cj9NYXRoLm1heChyLE1hdGgubWluKGUsdCkpOk1hdGgubWF4KGUsTWF0aC5taW4ocix0KSl9LGwuYkJveEludGVyc2VjdD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHI9cnx8MCx0LmxlZnQ8PWUucmlnaHQrciYmZS5sZWZ0PD10LnJpZ2h0K3ImJnQudG9wPD1lLmJvdHRvbStyJiZlLnRvcDw9dC5ib3R0b20rcn0sbC5zaW1wbGVNYXA9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPXQubGVuZ3RoLGE9bmV3IEFycmF5KGkpLG89MDtvPGk7bysrKWFbb109ZSh0W29dLHIsbik7cmV0dXJuIGF9LGwucmFuZHN0cj1mdW5jdGlvbiB0KGUscixuLGkpe2lmKG58fChuPTE2KSx2b2lkIDA9PT1yJiYocj0yNCkscjw9MClyZXR1cm5cIjBcIjt2YXIgYSxvLHM9TWF0aC5sb2coTWF0aC5wb3coMixyKSkvTWF0aC5sb2cobiksYz1cIlwiO2ZvcihhPTI7cz09PTEvMDthKj0yKXM9TWF0aC5sb2coTWF0aC5wb3coMixyL2EpKS9NYXRoLmxvZyhuKSphO3ZhciB1PXMtTWF0aC5mbG9vcihzKTtmb3IoYT0wO2E8TWF0aC5mbG9vcihzKTthKyspYz1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbikudG9TdHJpbmcobikrYzt1JiYobz1NYXRoLnBvdyhuLHUpLGM9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm8pLnRvU3RyaW5nKG4pK2MpO3ZhciBoPXBhcnNlSW50KGMsbik7cmV0dXJuIGUmJmVbY118fGghPT0xLzAmJmg+PU1hdGgucG93KDIscik/aT4xMD8obC53YXJuKFwicmFuZHN0ciBmYWlsZWQgdW5pcXVlbmVzc1wiKSxjKTp0KGUscixuLChpfHwwKSsxKTpjfSxsLk9wdGlvbkNvbnRyb2w9ZnVuY3Rpb24odCxlKXt0fHwodD17fSksZXx8KGU9XCJvcHRcIik7dmFyIHI9e29wdGlvbkxpc3Q6W10sX25ld29wdGlvbjpmdW5jdGlvbihuKXtuW2VdPXQscltuLm5hbWVdPW4sci5vcHRpb25MaXN0LnB1c2gobil9fTtyZXR1cm4gcltcIl9cIitlXT10LHJ9LGwuc21vb3RoPWZ1bmN0aW9uKHQsZSl7aWYoKGU9TWF0aC5yb3VuZChlKXx8MCk8MilyZXR1cm4gdDt2YXIgcixuLGksYSxvPXQubGVuZ3RoLHM9MipvLGw9MiplLTEsYz1uZXcgQXJyYXkobCksdT1uZXcgQXJyYXkobyk7Zm9yKHI9MDtyPGw7cisrKWNbcl09KDEtTWF0aC5jb3MoTWF0aC5QSSoocisxKS9lKSkvKDIqZSk7Zm9yKHI9MDtyPG87cisrKXtmb3IoYT0wLG49MDtuPGw7bisrKShpPXIrbisxLWUpPC1vP2ktPXMqTWF0aC5yb3VuZChpL3MpOmk+PXMmJihpLT1zKk1hdGguZmxvb3IoaS9zKSksaTwwP2k9LTEtaTppPj1vJiYoaT1zLTEtaSksYSs9dFtpXSpjW25dO3Vbcl09YX1yZXR1cm4gdX0sbC5zeW5jT3JBc3luYz1mdW5jdGlvbih0LGUscil7dmFyIG47ZnVuY3Rpb24gaSgpe3JldHVybiBsLnN5bmNPckFzeW5jKHQsZSxyKX1mb3IoO3QubGVuZ3RoOylpZigobj0oMCx0LnNwbGljZSgwLDEpWzBdKShlKSkmJm4udGhlbilyZXR1cm4gbi50aGVuKGkpLnRoZW4odm9pZCAwLGwucHJvbWlzZUVycm9yKTtyZXR1cm4gciYmcihlKX0sbC5zdHJpcFRyYWlsaW5nU2xhc2g9ZnVuY3Rpb24odCl7cmV0dXJuXCIvXCI9PT10LnN1YnN0cigtMSk/dC5zdWJzdHIoMCx0Lmxlbmd0aC0xKTp0fSxsLm5vbmVPckFsbD1mdW5jdGlvbih0LGUscil7aWYodCl7dmFyIG4saT0hMSxhPSEwO2ZvcihuPTA7bjxyLmxlbmd0aDtuKyspbnVsbCE9dFtyW25dXT9pPSEwOmE9ITE7aWYoaSYmIWEpZm9yKG49MDtuPHIubGVuZ3RoO24rKyl0W3Jbbl1dPWVbcltuXV19fSxsLm1lcmdlQXJyYXk9ZnVuY3Rpb24odCxlLHIpe2lmKGwuaXNBcnJheU9yVHlwZWRBcnJheSh0KSlmb3IodmFyIG49TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpLGk9MDtpPG47aSsrKWVbaV1bcl09dFtpXX0sbC5maWxsQXJyYXk9ZnVuY3Rpb24odCxlLHIsbil7aWYobj1ufHxsLmlkZW50aXR5LGwuaXNBcnJheU9yVHlwZWRBcnJheSh0KSlmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyllW2ldW3JdPW4odFtpXSl9LGwuY2FzdE9wdGlvbj1mdW5jdGlvbih0LGUscixuKXtuPW58fGwuaWRlbnRpdHk7dmFyIGk9bC5uZXN0ZWRQcm9wZXJ0eSh0LHIpLmdldCgpO3JldHVybiBsLmlzQXJyYXlPclR5cGVkQXJyYXkoaSk/QXJyYXkuaXNBcnJheShlKSYmbC5pc0FycmF5T3JUeXBlZEFycmF5KGlbZVswXV0pP24oaVtlWzBdXVtlWzFdXSk6bihpW2VdKTppfSxsLmV4dHJhY3RPcHRpb249ZnVuY3Rpb24odCxlLHIsbil7aWYociBpbiB0KXJldHVybiB0W3JdO3ZhciBpPWwubmVzdGVkUHJvcGVydHkoZSxuKS5nZXQoKTtyZXR1cm4gQXJyYXkuaXNBcnJheShpKT92b2lkIDA6aX0sbC50YWdTZWxlY3RlZD1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhPWUuc2VsZWN0ZWRwb2ludHMsbz1lLl9pbmRleFRvUG9pbnRzO28mJihuPWsobykpO2Zvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgYz1hW3NdO2lmKGwuaXNJbmRleChjKSl7dmFyIHU9bj9uW2NdOmMsaD1yP3JbdV06dTt2b2lkIDAhPT0oaT1oKSYmaTx0Lmxlbmd0aCYmKHRbaF0uc2VsZWN0ZWQ9MSl9fX0sbC5zZWxJbmRpY2VzMnNlbFBvaW50cz1mdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdGVkcG9pbnRzLHI9dC5faW5kZXhUb1BvaW50cztpZihyKXtmb3IodmFyIG49ayhyKSxpPVtdLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIG89ZVthXTtpZihsLmlzSW5kZXgobykpe3ZhciBzPW5bb107bC5pc0luZGV4KHMpJiZpLnB1c2gocyl9fXJldHVybiBpfXJldHVybiBlfSxsLmdldFRhcmdldEFycmF5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS50YXJnZXQ7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHImJnIpe3ZhciBuPWwubmVzdGVkUHJvcGVydHkodCxyKS5nZXQoKTtyZXR1cm4hIUFycmF5LmlzQXJyYXkobikmJm59cmV0dXJuISFBcnJheS5pc0FycmF5KHIpJiZyfSxsLm1pbkV4dGVuZD1mdW5jdGlvbih0LGUpe3ZhciByPXt9O1wib2JqZWN0XCIhPXR5cGVvZiBlJiYoZT17fSk7dmFyIG4saSxhLG89T2JqZWN0LmtleXModCk7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylhPXRbaT1vW25dXSxcIl9cIiE9PWkuY2hhckF0KDApJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBhJiYoXCJtb2R1bGVcIj09PWk/cltpXT1hOkFycmF5LmlzQXJyYXkoYSk/cltpXT1cImNvbG9yc2NhbGVcIj09PWk/YS5zbGljZSgpOmEuc2xpY2UoMCwzKTpyW2ldPWEmJlwib2JqZWN0XCI9PXR5cGVvZiBhP2wubWluRXh0ZW5kKHRbaV0sZVtpXSk6YSk7Zm9yKG89T2JqZWN0LmtleXMoZSksbj0wO248by5sZW5ndGg7bisrKVwib2JqZWN0XCI9PXR5cGVvZihhPWVbaT1vW25dXSkmJmkgaW4gciYmXCJvYmplY3RcIj09dHlwZW9mIHJbaV18fChyW2ldPWEpO3JldHVybiByfSxsLnRpdGxlQ2FzZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnN1YnN0cigxKX0sbC5jb250YWluc0FueT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKC0xIT09dC5pbmRleE9mKGVbcl0pKXJldHVybiEwO3JldHVybiExfSxsLmlzUGxvdERpdj1mdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KTtyZXR1cm4gZS5ub2RlKClpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZlLnNpemUoKSYmZS5jbGFzc2VkKFwianMtcGxvdGx5LXBsb3RcIil9LGwucmVtb3ZlRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10JiZ0LnBhcmVudE5vZGU7ZSYmZS5yZW1vdmVDaGlsZCh0KX0sbC5hZGRTdHlsZVJ1bGU9ZnVuY3Rpb24odCxlKXtsLmFkZFJlbGF0ZWRTdHlsZVJ1bGUoXCJnbG9iYWxcIix0LGUpfSxsLmFkZFJlbGF0ZWRTdHlsZVJ1bGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVwicGxvdGx5LmpzLXN0eWxlLVwiK3QsaT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChuKTtpfHwoKGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpKS5zZXRBdHRyaWJ1dGUoXCJpZFwiLG4pLGkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIikpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoaSkpO3ZhciBhPWkuc2hlZXQ7YS5pbnNlcnRSdWxlP2EuaW5zZXJ0UnVsZShlK1wie1wiK3IrXCJ9XCIsMCk6YS5hZGRSdWxlP2EuYWRkUnVsZShlLHIsMCk6bC53YXJuKFwiYWRkU3R5bGVSdWxlIGZhaWxlZFwiKX0sbC5kZWxldGVSZWxhdGVkU3R5bGVSdWxlPWZ1bmN0aW9uKHQpe3ZhciBlPVwicGxvdGx5LmpzLXN0eWxlLVwiK3Qscj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTtyJiZsLnJlbW92ZUVsZW1lbnQocil9LGwuaXNJRT1mdW5jdGlvbigpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2J9LGwuaXNEM1NlbGVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgdC5jbGFzc2VkfSxsLmVuc3VyZVNpbmdsZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10LnNlbGVjdChlKyhyP1wiLlwiK3I6XCJcIikpO2lmKGkuc2l6ZSgpKXJldHVybiBpO3ZhciBhPXQuYXBwZW5kKGUpO3JldHVybiByJiZhLmNsYXNzZWQociwhMCksbiYmYS5jYWxsKG4pLGF9LGwuZW5zdXJlU2luZ2xlQnlJZD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10LnNlbGVjdChlK1wiI1wiK3IpO2lmKGkuc2l6ZSgpKXJldHVybiBpO3ZhciBhPXQuYXBwZW5kKGUpLmF0dHIoXCJpZFwiLHIpO3JldHVybiBuJiZhLmNhbGwobiksYX0sbC5vYmplY3RGcm9tUGF0aD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuPXQuc3BsaXQoXCIuXCIpLGk9cj17fSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBvPW5bYV0scz1udWxsLGw9blthXS5tYXRjaCgvKC4qKVxcWyhbMC05XSspXFxdLyk7bD8obz1sWzFdLHM9bFsyXSxyPXJbb109W10sYT09PW4ubGVuZ3RoLTE/cltzXT1lOnJbc109e30scj1yW3NdKTooYT09PW4ubGVuZ3RoLTE/cltvXT1lOnJbb109e30scj1yW29dKX1yZXR1cm4gaX07dmFyIEE9L14oW15cXFtcXC5dKylcXC4oLispPy8sVD0vXihbXlxcLl0rKVxcWyhbMC05XSspXFxdKFxcLik/KC4rKT8vO2wuZXhwYW5kT2JqZWN0UGF0aHM9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHM7aWYoXCJvYmplY3RcIj09dHlwZW9mIHQmJiFBcnJheS5pc0FycmF5KHQpKWZvcihyIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShyKSYmKChlPXIubWF0Y2goQSkpPyhpPXRbcl0sbj1lWzFdLGRlbGV0ZSB0W3JdLHRbbl09bC5leHRlbmREZWVwTm9BcnJheXModFtuXXx8e30sbC5vYmplY3RGcm9tUGF0aChyLGwuZXhwYW5kT2JqZWN0UGF0aHMoaSkpW25dKSk6KGU9ci5tYXRjaChUKSk/KGk9dFtyXSxuPWVbMV0sYT1wYXJzZUludChlWzJdKSxkZWxldGUgdFtyXSx0W25dPXRbbl18fFtdLFwiLlwiPT09ZVszXT8ocz1lWzRdLG89dFtuXVthXT10W25dW2FdfHx7fSxsLmV4dGVuZERlZXBOb0FycmF5cyhvLGwub2JqZWN0RnJvbVBhdGgocyxsLmV4cGFuZE9iamVjdFBhdGhzKGkpKSkpOnRbbl1bYV09bC5leHBhbmRPYmplY3RQYXRocyhpKSk6dFtyXT1sLmV4cGFuZE9iamVjdFBhdGhzKHRbcl0pKTtyZXR1cm4gdH0sbC5udW1TZXBhcmF0ZT1mdW5jdGlvbih0LGUscil7aWYocnx8KHI9ITEpLFwic3RyaW5nXCIhPXR5cGVvZiBlfHwwPT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiU2VwYXJhdG9yIHN0cmluZyByZXF1aXJlZCBmb3IgZm9ybWF0dGluZyFcIik7XCJudW1iZXJcIj09dHlwZW9mIHQmJih0PVN0cmluZyh0KSk7dmFyIG49LyhcXGQrKShcXGR7M30pLyxpPWUuY2hhckF0KDApLGE9ZS5jaGFyQXQoMSksbz10LnNwbGl0KFwiLlwiKSxzPW9bMF0sbD1vLmxlbmd0aD4xP2krb1sxXTpcIlwiO2lmKGEmJihvLmxlbmd0aD4xfHxzLmxlbmd0aD40fHxyKSlmb3IoO24udGVzdChzKTspcz1zLnJlcGxhY2UobixcIiQxXCIrYStcIiQyXCIpO3JldHVybiBzK2x9LGwuVEVNUExBVEVfU1RSSU5HX1JFR0VYPS8leyhbXlxccyV7fTpdKikoOltefV0qKT99L2c7dmFyIE09L15cXHcqJC87bC50ZW1wbGF0ZVN0cmluZz1mdW5jdGlvbih0LGUpe3ZhciByPXt9O3JldHVybiB0LnJlcGxhY2UobC5URU1QTEFURV9TVFJJTkdfUkVHRVgsZnVuY3Rpb24odCxuKXtyZXR1cm4gTS50ZXN0KG4pP2Vbbl18fFwiXCI6KHJbbl09cltuXXx8bC5uZXN0ZWRQcm9wZXJ0eShlLG4pLmdldCxyW25dKCl8fFwiXCIpfSl9O3ZhciBTPS9eOi8sRT0wO2wuaG92ZXJ0ZW1wbGF0ZVN0cmluZz1mdW5jdGlvbih0LGUscil7dmFyIGk9YXJndW1lbnRzLGE9e307cmV0dXJuIHQucmVwbGFjZShsLlRFTVBMQVRFX1NUUklOR19SRUdFWCxmdW5jdGlvbih0LG8scyl7dmFyIGMsdSxoO2ZvcihoPTM7aDxpLmxlbmd0aDtoKyspe2lmKChjPWlbaF0pLmhhc093blByb3BlcnR5KG8pKXt1PWNbb107YnJlYWt9aWYoTS50ZXN0KG8pfHwodT1hW29dfHxsLm5lc3RlZFByb3BlcnR5KGMsbykuZ2V0KCkpJiYoYVtvXT11KSx2b2lkIDAhPT11KWJyZWFrfSh2b2lkIDA9PT11JiYoRTwxMCYmKGwud2FybihcIlZhcmlhYmxlICdcIitvK1wiJyBpbiBob3ZlcnRlbXBsYXRlIGNvdWxkIG5vdCBiZSBmb3VuZCFcIiksdT10KSwxMD09PUUmJmwud2FybihcIlRvbyBtYW55IGhvdmVydGVtcGxhdGUgd2FybmluZ3MgLSBhZGRpdGlvbmFsIHdhcm5pbmdzIHdpbGwgYmUgc3VwcHJlc3NlZFwiKSxFKyspLHMpP3U9KHI/ci5udW1iZXJGb3JtYXQ6bi5mb3JtYXQpKHMucmVwbGFjZShTLFwiXCIpKSh1KTplLmhhc093blByb3BlcnR5KG8rXCJMYWJlbFwiKSYmKHU9ZVtvK1wiTGFiZWxcIl0pO3JldHVybiB1fSl9O2wuc3VicGxvdFNvcnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpKzEsbj0wLGk9MCxhPTA7YTxyO2ErKyl7dmFyIG89dC5jaGFyQ29kZUF0KGEpfHwwLHM9ZS5jaGFyQ29kZUF0KGEpfHwwLGw9bz49NDgmJm88PTU3LGM9cz49NDgmJnM8PTU3O2lmKGwmJihuPTEwKm4rby00OCksYyYmKGk9MTAqaStzLTQ4KSwhbHx8IWMpe2lmKG4hPT1pKXJldHVybiBuLWk7aWYobyE9PXMpcmV0dXJuIG8tc319cmV0dXJuIGktbn07dmFyIEM9MmU5O2wuc2VlZFBzZXVkb1JhbmRvbT1mdW5jdGlvbigpe0M9MmU5fSxsLnBzZXVkb1JhbmRvbT1mdW5jdGlvbigpe3ZhciB0PUM7cmV0dXJuIEM9KDY5MDY5KkMrMSklNDI5NDk2NzI5NixNYXRoLmFicyhDLXQpPDQyOTQ5NjcyOT9sLnBzZXVkb1JhbmRvbSgpOkMvNDI5NDk2NzI5Nn19LHtcIi4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuL2FuY2hvcl91dGlsc1wiOjY4MixcIi4vYW5nbGVzXCI6NjgzLFwiLi9hcnJheVwiOjY4NCxcIi4vY2xlYW5fbnVtYmVyXCI6Njg1LFwiLi9jbGVhcl9yZXNwb25zaXZlXCI6Njg3LFwiLi9jb2VyY2VcIjo2ODgsXCIuL2RhdGVzXCI6Njg5LFwiLi9leHRlbmRcIjo2OTEsXCIuL2ZpbHRlcl91bmlxdWVcIjo2OTIsXCIuL2ZpbHRlcl92aXNpYmxlXCI6NjkzLFwiLi9nZW9tZXRyeTJkXCI6Njk2LFwiLi9nZXRfZ3JhcGhfZGl2XCI6Njk3LFwiLi9pZGVudGl0eVwiOjcwMCxcIi4vaXNfcGxhaW5fb2JqZWN0XCI6NzAyLFwiLi9rZXllZF9jb250YWluZXJcIjo3MDMsXCIuL2xvY2FsaXplXCI6NzA0LFwiLi9sb2dnZXJzXCI6NzA1LFwiLi9tYWtlX3RyYWNlX2dyb3Vwc1wiOjcwNixcIi4vbWF0cml4XCI6NzA3LFwiLi9tb2RcIjo3MDgsXCIuL25lc3RlZF9wcm9wZXJ0eVwiOjcwOSxcIi4vbm9vcFwiOjcxMCxcIi4vbm90aWZpZXJcIjo3MTEsXCIuL3B1c2hfdW5pcXVlXCI6NzE1LFwiLi9yZWdleFwiOjcxNyxcIi4vcmVsYXRpdmVfYXR0clwiOjcxOCxcIi4vcmVsaW5rX3ByaXZhdGVcIjo3MTksXCIuL3NlYXJjaFwiOjcyMCxcIi4vc3RhdHNcIjo3MjMsXCIuL3Rocm90dGxlXCI6NzI2LFwiLi90b19sb2dfcmFuZ2VcIjo3MjcsZDM6MTU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw3MDI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHdpbmRvdyYmd2luZG93LnByb2Nlc3MmJndpbmRvdy5wcm9jZXNzLnZlcnNpb25zP1wiW29iamVjdCBPYmplY3RdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk6XCJbb2JqZWN0IE9iamVjdF1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSYmT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpPT09T2JqZWN0LnByb3RvdHlwZX19LHt9XSw3MDM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9uZXN0ZWRfcHJvcGVydHlcIiksaT0vXlxcdyokLztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG8scyxsO3I9cnx8XCJuYW1lXCIsYT1hfHxcInZhbHVlXCI7dmFyIGM9e307ZSYmZS5sZW5ndGg/KGw9bih0LGUpLHM9bC5nZXQoKSk6cz10LGU9ZXx8XCJcIjt2YXIgdT17fTtpZihzKWZvcihvPTA7bzxzLmxlbmd0aDtvKyspdVtzW29dW3JdXT1vO3ZhciBoPWkudGVzdChhKSxmPXtzZXQ6ZnVuY3Rpb24odCxlKXt2YXIgaT1udWxsPT09ZT80OjA7aWYoIXMpe2lmKCFsfHw0PT09aSlyZXR1cm47cz1bXSxsLnNldChzKX12YXIgbz11W3RdO2lmKHZvaWQgMD09PW8pe2lmKDQ9PT1pKXJldHVybjtpfD0zLG89cy5sZW5ndGgsdVt0XT1vfWVsc2UgZSE9PShoP3Nbb11bYV06bihzW29dLGEpLmdldCgpKSYmKGl8PTIpO3ZhciBwPXNbb109c1tvXXx8e307cmV0dXJuIHBbcl09dCxoP3BbYV09ZTpuKHAsYSkuc2V0KGUpLG51bGwhPT1lJiYoaSY9LTUpLGNbb109Y1tvXXxpLGZ9LGdldDpmdW5jdGlvbih0KXtpZihzKXt2YXIgZT11W3RdO3JldHVybiB2b2lkIDA9PT1lP3ZvaWQgMDpoP3NbZV1bYV06bihzW2VdLGEpLmdldCgpfX0scmVuYW1lOmZ1bmN0aW9uKHQsZSl7dmFyIG49dVt0XTtyZXR1cm4gdm9pZCAwPT09bj9mOihjW25dPTF8Y1tuXSx1W2VdPW4sZGVsZXRlIHVbdF0sc1tuXVtyXT1lLGYpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dVt0XTtpZih2b2lkIDA9PT1lKXJldHVybiBmO3ZhciBpPXNbZV07aWYoT2JqZWN0LmtleXMoaSkubGVuZ3RoPjIpcmV0dXJuIGNbZV09MnxjW2VdLGYuc2V0KHQsbnVsbCk7aWYoaCl7Zm9yKG89ZTtvPHMubGVuZ3RoO28rKyljW29dPTN8Y1tvXTtmb3Iobz1lO288cy5sZW5ndGg7bysrKXVbc1tvXVtyXV0tLTtzLnNwbGljZShlLDEpLGRlbGV0ZSB1W3RdfWVsc2UgbihpLGEpLnNldChudWxsKSxjW2VdPTZ8Y1tlXTtyZXR1cm4gZn0sY29uc3RydWN0VXBkYXRlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0LGksbz17fSxsPU9iamVjdC5rZXlzKGMpLHU9MDt1PGwubGVuZ3RoO3UrKylpPWxbdV0sdD1lK1wiW1wiK2krXCJdXCIsc1tpXT8oMSZjW2ldJiYob1t0K1wiLlwiK3JdPXNbaV1bcl0pLDImY1tpXSYmKG9bdCtcIi5cIithXT1oPzQmY1tpXT9udWxsOnNbaV1bYV06NCZjW2ldP251bGw6bihzW2ldLGEpLmdldCgpKSk6b1t0XT1udWxsO3JldHVybiBvfX07cmV0dXJuIGZ9fSx7XCIuL25lc3RlZF9wcm9wZXJ0eVwiOjcwOX1dLDcwNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9yZWdpc3RyeVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5fY29udGV4dC5sb2NhbGUsaT0wO2k8MjtpKyspe2Zvcih2YXIgYT10Ll9jb250ZXh0LmxvY2FsZXMsbz0wO288MjtvKyspe3ZhciBzPShhW3JdfHx7fSkuZGljdGlvbmFyeTtpZihzKXt2YXIgbD1zW2VdO2lmKGwpcmV0dXJuIGx9YT1uLmxvY2FsZVJlZ2lzdHJ5fXZhciBjPXIuc3BsaXQoXCItXCIpWzBdO2lmKGM9PT1yKWJyZWFrO3I9Y31yZXR1cm4gZX19LHtcIi4uL3JlZ2lzdHJ5XCI6ODI5fV0sNzA1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnXCIpLmRmbHRDb25maWcsaT1lLmV4cG9ydHM9e307ZnVuY3Rpb24gYSh0LGUpe2lmKHQmJnQuYXBwbHkpdHJ5e3JldHVybiB2b2lkIHQuYXBwbHkoY29uc29sZSxlKX1jYXRjaCh0KXt9Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdHJ5e3QoZVtyXSl9Y2F0Y2godCl7Y29uc29sZS5sb2coZVtyXSl9fWkubG9nPWZ1bmN0aW9uKCl7aWYobi5sb2dnaW5nPjEpe2Zvcih2YXIgdD1bXCJMT0c6XCJdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXQucHVzaChhcmd1bWVudHNbZV0pO2EoY29uc29sZS50cmFjZXx8Y29uc29sZS5sb2csdCl9fSxpLndhcm49ZnVuY3Rpb24oKXtpZihuLmxvZ2dpbmc+MCl7Zm9yKHZhciB0PVtcIldBUk46XCJdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXQucHVzaChhcmd1bWVudHNbZV0pO2EoY29uc29sZS50cmFjZXx8Y29uc29sZS5sb2csdCl9fSxpLmVycm9yPWZ1bmN0aW9uKCl7aWYobi5sb2dnaW5nPjApe2Zvcih2YXIgdD1bXCJFUlJPUjpcIl0sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdC5wdXNoKGFyZ3VtZW50c1tlXSk7YShjb25zb2xlLmVycm9yLHQpfX19LHtcIi4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnXCI6NzM3fV0sNzA2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LnNlbGVjdEFsbChcImcuXCIrci5yZXBsYWNlKC9cXHMvZyxcIi5cIikpLmRhdGEoZSxmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS51aWR9KTtyZXR1cm4gbi5leGl0KCkucmVtb3ZlKCksbi5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsciksbi5vcmRlcigpLG59fSx7fV0sNzA3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ci5pbml0MmRBcnJheT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodCksbj0wO248dDtuKyspcltuXT1uZXcgQXJyYXkoZSk7cmV0dXJuIHJ9LHIudHJhbnNwb3NlUmFnZ2VkPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj0wLGk9dC5sZW5ndGg7Zm9yKGU9MDtlPGk7ZSsrKW49TWF0aC5tYXgobix0W2VdLmxlbmd0aCk7dmFyIGE9bmV3IEFycmF5KG4pO2ZvcihlPTA7ZTxuO2UrKylmb3IoYVtlXT1uZXcgQXJyYXkoaSkscj0wO3I8aTtyKyspYVtlXVtyXT10W3JdW2VdO3JldHVybiBhfSxyLmRvdD1mdW5jdGlvbih0LGUpe2lmKCF0Lmxlbmd0aHx8IWUubGVuZ3RofHx0Lmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybiBudWxsO3ZhciBuLGksYT10Lmxlbmd0aDtpZih0WzBdLmxlbmd0aClmb3Iobj1uZXcgQXJyYXkoYSksaT0wO2k8YTtpKyspbltpXT1yLmRvdCh0W2ldLGUpO2Vsc2UgaWYoZVswXS5sZW5ndGgpe3ZhciBvPXIudHJhbnNwb3NlUmFnZ2VkKGUpO2ZvcihuPW5ldyBBcnJheShvLmxlbmd0aCksaT0wO2k8by5sZW5ndGg7aSsrKW5baV09ci5kb3QodCxvW2ldKX1lbHNlIGZvcihuPTAsaT0wO2k8YTtpKyspbis9dFtpXSplW2ldO3JldHVybiBufSxyLnRyYW5zbGF0aW9uTWF0cml4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW1sxLDAsdF0sWzAsMSxlXSxbMCwwLDFdXX0sci5yb3RhdGlvbk1hdHJpeD1mdW5jdGlvbih0KXt2YXIgZT10Kk1hdGguUEkvMTgwO3JldHVybltbTWF0aC5jb3MoZSksLU1hdGguc2luKGUpLDBdLFtNYXRoLnNpbihlKSxNYXRoLmNvcyhlKSwwXSxbMCwwLDFdXX0sci5yb3RhdGlvblhZTWF0cml4PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gci5kb3Qoci5kb3Qoci50cmFuc2xhdGlvbk1hdHJpeChlLG4pLHIucm90YXRpb25NYXRyaXgodCkpLHIudHJhbnNsYXRpb25NYXRyaXgoLWUsLW4pKX0sci5hcHBseTJEVHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50czszPT09ZS5sZW5ndGgmJihlPWVbMF0pO3ZhciBuPTE9PT1hcmd1bWVudHMubGVuZ3RoP2VbMF06W2VbMF0sZVsxXV07cmV0dXJuIHIuZG90KHQsW25bMF0sblsxXSwxXSkuc2xpY2UoMCwyKX19LHIuYXBwbHkyRFRyYW5zZm9ybTI9ZnVuY3Rpb24odCl7dmFyIGU9ci5hcHBseTJEVHJhbnNmb3JtKHQpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0LnNsaWNlKDAsMikpLmNvbmNhdChlKHQuc2xpY2UoMiw0KSkpfX19LHt9XSw3MDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e21vZDpmdW5jdGlvbih0LGUpe3ZhciByPXQlZTtyZXR1cm4gcjwwP3IrZTpyfSxtb2RIYWxmOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguYWJzKHQpPmUvMj90LU1hdGgucm91bmQodC9lKSplOnR9fX0se31dLDcwOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuL2FycmF5XCIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYobihlKSllPVN0cmluZyhlKTtlbHNlIGlmKFwic3RyaW5nXCIhPXR5cGVvZiBlfHxcIlstMV1cIj09PWUuc3Vic3RyKGUubGVuZ3RoLTQpKXRocm93XCJiYWQgcHJvcGVydHkgc3RyaW5nXCI7Zm9yKHZhciByLGEsbyxsPTAsYz1lLnNwbGl0KFwiLlwiKTtsPGMubGVuZ3RoOyl7aWYocj1TdHJpbmcoY1tsXSkubWF0Y2goL14oW15cXFtcXF1dKikoKFxcW1xcLT9bMC05XSpcXF0pKykkLykpe2lmKHJbMV0pY1tsXT1yWzFdO2Vsc2V7aWYoMCE9PWwpdGhyb3dcImJhZCBwcm9wZXJ0eSBzdHJpbmdcIjtjLnNwbGljZSgwLDEpfWZvcihhPXJbMl0uc3Vic3RyKDEsclsyXS5sZW5ndGgtMikuc3BsaXQoXCJdW1wiKSxvPTA7bzxhLmxlbmd0aDtvKyspbCsrLGMuc3BsaWNlKGwsMCxOdW1iZXIoYVtvXSkpfWwrK31yZXR1cm5cIm9iamVjdFwiIT10eXBlb2YgdD9mdW5jdGlvbih0LGUscil7cmV0dXJue3NldDpmdW5jdGlvbigpe3Rocm93XCJiYWQgY29udGFpbmVyXCJ9LGdldDpmdW5jdGlvbigpe30sYXN0cjplLHBhcnRzOnIsb2JqOnR9fSh0LGUsYyk6e3NldDpzKHQsYyxlKSxnZXQ6ZnVuY3Rpb24gdChlLHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuLGEsbyxzLGwsYz1lO2ZvcihzPTA7czxyLmxlbmd0aC0xO3MrKyl7aWYoLTE9PT0obj1yW3NdKSl7Zm9yKGE9ITAsbz1bXSxsPTA7bDxjLmxlbmd0aDtsKyspb1tsXT10KGNbbF0sci5zbGljZShzKzEpKSgpLG9bbF0hPT1vWzBdJiYoYT0hMSk7cmV0dXJuIGE/b1swXTpvfWlmKFwibnVtYmVyXCI9PXR5cGVvZiBuJiYhaShjKSlyZXR1cm47aWYoXCJvYmplY3RcIiE9dHlwZW9mKGM9Y1tuXSl8fG51bGw9PT1jKXJldHVybn1pZihcIm9iamVjdFwiPT10eXBlb2YgYyYmbnVsbCE9PWMmJm51bGwhPT0obz1jW3Jbc11dKSlyZXR1cm4gb319KHQsYyksYXN0cjplLHBhcnRzOmMsb2JqOnR9fTt2YXIgYT0vKF58XFwuKWFyZ3NcXFsvO2Z1bmN0aW9uIG8odCxlKXtyZXR1cm4gdm9pZCAwPT09dHx8bnVsbD09PXQmJiFlLm1hdGNoKGEpfWZ1bmN0aW9uIHModCxlLHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgYSxzLGg9dCxmPVwiXCIscD1bW3QsZl1dLGQ9byhuLHIpO2ZvcihzPTA7czxlLmxlbmd0aC0xO3MrKyl7aWYoXCJudW1iZXJcIj09dHlwZW9mKGE9ZVtzXSkmJiFpKGgpKXRocm93XCJhcnJheSBpbmRleCBidXQgY29udGFpbmVyIGlzIG5vdCBhbiBhcnJheVwiO2lmKC0xPT09YSl7aWYoZD0hYyhoLGUuc2xpY2UocysxKSxuLHIpKWJyZWFrO3JldHVybn1pZighdShoLGEsZVtzKzFdLGQpKWJyZWFrO2lmKFwib2JqZWN0XCIhPXR5cGVvZihoPWhbYV0pfHxudWxsPT09aCl0aHJvd1wiY29udGFpbmVyIGlzIG5vdCBhbiBvYmplY3RcIjtmPWwoZixhKSxwLnB1c2goW2gsZl0pfWlmKGQpe2lmKHM9PT1lLmxlbmd0aC0xJiYoZGVsZXRlIGhbZVtzXV0sQXJyYXkuaXNBcnJheShoKSYmK2Vbc109PWgubGVuZ3RoLTEpKWZvcig7aC5sZW5ndGgmJnZvaWQgMD09PWhbaC5sZW5ndGgtMV07KWgucG9wKCl9ZWxzZSBoW2Vbc11dPW59fWZ1bmN0aW9uIGwodCxlKXt2YXIgcj1lO3JldHVybiBuKGUpP3I9XCJbXCIrZStcIl1cIjp0JiYocj1cIi5cIitlKSx0K3J9ZnVuY3Rpb24gYyh0LGUscixuKXt2YXIgYSxsPWkociksYz0hMCxoPXIsZj1uLnJlcGxhY2UoXCItMVwiLDApLHA9IWwmJm8ocixmKSxkPWVbMF07Zm9yKGE9MDthPHQubGVuZ3RoO2ErKylmPW4ucmVwbGFjZShcIi0xXCIsYSksbCYmKHA9byhoPXJbYSVyLmxlbmd0aF0sZikpLHAmJihjPSExKSx1KHQsYSxkLHApJiZzKHRbYV0sZSxuLnJlcGxhY2UoXCItMVwiLGEpKShoKTtyZXR1cm4gY31mdW5jdGlvbiB1KHQsZSxyLG4pe2lmKHZvaWQgMD09PXRbZV0pe2lmKG4pcmV0dXJuITE7dFtlXT1cIm51bWJlclwiPT10eXBlb2Ygcj9bXTp7fX1yZXR1cm4hMH19LHtcIi4vYXJyYXlcIjo2ODQsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDcxMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbigpe319LHt9XSw3MTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiZmFzdC1pc251bWVyaWNcIiksYT1bXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZigtMT09PWEuaW5kZXhPZih0KSl7YS5wdXNoKHQpO3ZhciByPTFlMztpKGUpP3I9ZTpcImxvbmdcIj09PWUmJihyPTNlMyk7dmFyIG89bi5zZWxlY3QoXCJib2R5XCIpLnNlbGVjdEFsbChcIi5wbG90bHktbm90aWZpZXJcIikuZGF0YShbMF0pO28uZW50ZXIoKS5hcHBlbmQoXCJkaXZcIikuY2xhc3NlZChcInBsb3RseS1ub3RpZmllclwiLCEwKSxvLnNlbGVjdEFsbChcIi5ub3RpZmllci1ub3RlXCIpLmRhdGEoYSkuZW50ZXIoKS5hcHBlbmQoXCJkaXZcIikuY2xhc3NlZChcIm5vdGlmaWVyLW5vdGVcIiwhMCkuc3R5bGUoXCJvcGFjaXR5XCIsMCkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKTtlLmFwcGVuZChcImJ1dHRvblwiKS5jbGFzc2VkKFwibm90aWZpZXItY2xvc2VcIiwhMCkuaHRtbChcIiZ0aW1lcztcIikub24oXCJjbGlja1wiLGZ1bmN0aW9uKCl7ZS50cmFuc2l0aW9uKCkuY2FsbChzKX0pO2Zvcih2YXIgaT1lLmFwcGVuZChcInBcIiksYT10LnNwbGl0KC88YnJcXHMqXFwvPz4vZyksbz0wO288YS5sZW5ndGg7bysrKW8mJmkuYXBwZW5kKFwiYnJcIiksaS5hcHBlbmQoXCJzcGFuXCIpLnRleHQoYVtvXSk7ZS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNzAwKS5zdHlsZShcIm9wYWNpdHlcIiwxKS50cmFuc2l0aW9uKCkuZGVsYXkocikuY2FsbChzKX0pfWZ1bmN0aW9uIHModCl7dC5kdXJhdGlvbig3MDApLnN0eWxlKFwib3BhY2l0eVwiLDApLmVhY2goXCJlbmRcIixmdW5jdGlvbih0KXt2YXIgZT1hLmluZGV4T2YodCk7LTEhPT1lJiZhLnNwbGljZShlLDEpLG4uc2VsZWN0KHRoaXMpLnJlbW92ZSgpfSl9fX0se2QzOjE1NSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sNzEyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vc2V0Y3Vyc29yXCIpLGk9XCJkYXRhLXNhdmVkY3Vyc29yXCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5hdHRyKGkpO2lmKGUpe2lmKCFyKXtmb3IodmFyIGE9KHQuYXR0cihcImNsYXNzXCIpfHxcIlwiKS5zcGxpdChcIiBcIiksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dOzA9PT1zLmluZGV4T2YoXCJjdXJzb3ItXCIpJiZ0LmF0dHIoaSxzLnN1YnN0cig3KSkuY2xhc3NlZChzLCExKX10LmF0dHIoaSl8fHQuYXR0cihpLFwiISFcIil9bih0LGUpfWVsc2UgciYmKHQuYXR0cihpLG51bGwpLFwiISFcIj09PXI/bih0KTpuKHQscikpfX0se1wiLi9zZXRjdXJzb3JcIjo3MjF9XSw3MTM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9tYXRyaXhcIikuZG90LGk9dChcIi4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNLGE9ZS5leHBvcnRzPXt9O2EudGVzdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5zbGljZSgpLG49clswXVswXSxhPW4sbz1yWzBdWzFdLHM9bztmb3Ioci5wdXNoKHJbMF0pLGU9MTtlPHIubGVuZ3RoO2UrKyluPU1hdGgubWluKG4scltlXVswXSksYT1NYXRoLm1heChhLHJbZV1bMF0pLG89TWF0aC5taW4obyxyW2VdWzFdKSxzPU1hdGgubWF4KHMscltlXVsxXSk7dmFyIGwsYz0hMTs1PT09ci5sZW5ndGgmJihyWzBdWzBdPT09clsxXVswXT9yWzJdWzBdPT09clszXVswXSYmclswXVsxXT09PXJbM11bMV0mJnJbMV1bMV09PT1yWzJdWzFdJiYoYz0hMCxsPWZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPT09clswXVswXX0pOnJbMF1bMV09PT1yWzFdWzFdJiZyWzJdWzFdPT09clszXVsxXSYmclswXVswXT09PXJbM11bMF0mJnJbMV1bMF09PT1yWzJdWzBdJiYoYz0hMCxsPWZ1bmN0aW9uKHQpe3JldHVybiB0WzFdPT09clswXVsxXX0pKTt2YXIgdT0hMCxoPXJbMF07Zm9yKGU9MTtlPHIubGVuZ3RoO2UrKylpZihoWzBdIT09cltlXVswXXx8aFsxXSE9PXJbZV1bMV0pe3U9ITE7YnJlYWt9cmV0dXJue3htaW46bix4bWF4OmEseW1pbjpvLHltYXg6cyxwdHM6cixjb250YWluczpjP2Z1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxjPXRbMV07cmV0dXJuIShyPT09aXx8cjxufHxyPmF8fGM9PT1pfHxjPG98fGM+c3x8ZSYmbCh0KSl9OmZ1bmN0aW9uKHQsZSl7dmFyIGw9dFswXSxjPXRbMV07aWYobD09PWl8fGw8bnx8bD5hfHxjPT09aXx8YzxvfHxjPnMpcmV0dXJuITE7dmFyIHUsaCxmLHAsZCxnPXIubGVuZ3RoLHY9clswXVswXSxtPXJbMF1bMV0seT0wO2Zvcih1PTE7dTxnO3UrKylpZihoPXYsZj1tLHY9clt1XVswXSxtPXJbdV1bMV0sIShsPChwPU1hdGgubWluKGgsdikpfHxsPk1hdGgubWF4KGgsdil8fGM+TWF0aC5tYXgoZixtKSkpaWYoYzxNYXRoLm1pbihmLG0pKWwhPT1wJiZ5Kys7ZWxzZXtpZihjPT09KGQ9dj09PWg/YzpmKyhsLWgpKihtLWYpLyh2LWgpKSlyZXR1cm4gMSE9PXV8fCFlO2M8PWQmJmwhPT1wJiZ5Kyt9cmV0dXJuIHklMj09MX0saXNSZWN0OmMsZGVnZW5lcmF0ZTp1fX07dmFyIG89YS5pc1NlZ21lbnRCZW50PWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhLG8scyxsPXRbZV0sYz1bdFtyXVswXS1sWzBdLHRbcl1bMV0tbFsxXV0sdT1uKGMsYyksaD1NYXRoLnNxcnQodSksZj1bLWNbMV0vaCxjWzBdL2hdO2ZvcihhPWUrMTthPHI7YSsrKWlmKG89W3RbYV1bMF0tbFswXSx0W2FdWzFdLWxbMV1dLChzPW4obyxjKSk8MHx8cz51fHxNYXRoLmFicyhuKG8sZikpPmkpcmV0dXJuITA7cmV0dXJuITF9O2EuZmlsdGVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W3RbMF1dLG49MCxpPTA7ZnVuY3Rpb24gYShhKXt0LnB1c2goYSk7dmFyIHM9ci5sZW5ndGgsbD1uO3Iuc3BsaWNlKGkrMSk7Zm9yKHZhciBjPWwrMTtjPHQubGVuZ3RoO2MrKykoYz09PXQubGVuZ3RoLTF8fG8odCxsLGMrMSxlKSkmJihyLnB1c2godFtjXSksci5sZW5ndGg8cy0yJiYobj1jLGk9ci5sZW5ndGgtMSksbD1jKX10Lmxlbmd0aD4xJiZhKHQucG9wKCkpO3JldHVybnthZGRQdDphLHJhdzp0LGZpbHRlcmVkOnJ9fX0se1wiLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4vbWF0cml4XCI6NzA3fV0sNzE0OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL3Nob3dfbm9fd2ViZ2xfbXNnXCIpLGk9dChcInJlZ2xcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIGE9dC5fZnVsbExheW91dCxvPSEwO3JldHVybiBhLl9nbGNhbnZhcy5lYWNoKGZ1bmN0aW9uKG4pe2lmKCFuLnJlZ2wmJighbi5waWNrfHxhLl9oYXMoXCJwYXJjb29yZHNcIikpKXt0cnl7bi5yZWdsPWkoe2NhbnZhczp0aGlzLGF0dHJpYnV0ZXM6e2FudGlhbGlhczohbi5waWNrLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMH0scGl4ZWxSYXRpbzp0Ll9jb250ZXh0LnBsb3RHbFBpeGVsUmF0aW98fHIuZGV2aWNlUGl4ZWxSYXRpbyxleHRlbnNpb25zOmV8fFtdfSl9Y2F0Y2godCl7bz0hMX1vJiZ0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJ3ZWJnbGNvbnRleHRsb3N0XCIsZnVuY3Rpb24oZSl7dCYmdC5lbWl0JiZ0LmVtaXQoXCJwbG90bHlfd2ViZ2xjb250ZXh0bG9zdFwiLHtldmVudDplLGxheWVyOm4ua2V5fSl9LCExKX19KSxvfHxuKHtjb250YWluZXI6YS5fZ2xjb250YWluZXIubm9kZSgpfSksb319KS5jYWxsKHRoaXMsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHtcIi4vc2hvd19ub193ZWJnbF9tc2dcIjo3MjIscmVnbDo0ODd9XSw3MTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihlIGluc3RhbmNlb2YgUmVnRXhwKXtmb3IodmFyIHI9ZS50b1N0cmluZygpLG49MDtuPHQubGVuZ3RoO24rKylpZih0W25daW5zdGFuY2VvZiBSZWdFeHAmJnRbbl0udG9TdHJpbmcoKT09PXIpcmV0dXJuIHQ7dC5wdXNoKGUpfWVsc2UhZSYmMCE9PWV8fC0xIT09dC5pbmRleE9mKGUpfHx0LnB1c2goZSk7cmV0dXJuIHR9fSx7fV0sNzE2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2xpYlwiKSxpPXQoXCIuLi9wbG90X2FwaS9wbG90X2NvbmZpZ1wiKS5kZmx0Q29uZmlnO3ZhciBhPXthZGQ6ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbyxzO3QudW5kb1F1ZXVlPXQudW5kb1F1ZXVlfHx7aW5kZXg6MCxxdWV1ZTpbXSxzZXF1ZW5jZTohMX0scz10LnVuZG9RdWV1ZS5pbmRleCx0LmF1dG9wbGF5P3QudW5kb1F1ZXVlLmluU2VxdWVuY2V8fCh0LmF1dG9wbGF5PSExKTooIXQudW5kb1F1ZXVlLnNlcXVlbmNlfHx0LnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPyhvPXt1bmRvOntjYWxsczpbXSxhcmdzOltdfSxyZWRvOntjYWxsczpbXSxhcmdzOltdfX0sdC51bmRvUXVldWUucXVldWUuc3BsaWNlKHMsdC51bmRvUXVldWUucXVldWUubGVuZ3RoLXMsbyksdC51bmRvUXVldWUuaW5kZXgrPTEpOm89dC51bmRvUXVldWUucXVldWVbcy0xXSx0LnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPSExLG8mJihvLnVuZG8uY2FsbHMudW5zaGlmdChlKSxvLnVuZG8uYXJncy51bnNoaWZ0KHIpLG8ucmVkby5jYWxscy5wdXNoKG4pLG8ucmVkby5hcmdzLnB1c2goYSkpLHQudW5kb1F1ZXVlLnF1ZXVlLmxlbmd0aD5pLnF1ZXVlTGVuZ3RoJiYodC51bmRvUXVldWUucXVldWUuc2hpZnQoKSx0LnVuZG9RdWV1ZS5pbmRleC0tKSl9LHN0YXJ0U2VxdWVuY2U6ZnVuY3Rpb24odCl7dC51bmRvUXVldWU9dC51bmRvUXVldWV8fHtpbmRleDowLHF1ZXVlOltdLHNlcXVlbmNlOiExfSx0LnVuZG9RdWV1ZS5zZXF1ZW5jZT0hMCx0LnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPSEwfSxzdG9wU2VxdWVuY2U6ZnVuY3Rpb24odCl7dC51bmRvUXVldWU9dC51bmRvUXVldWV8fHtpbmRleDowLHF1ZXVlOltdLHNlcXVlbmNlOiExfSx0LnVuZG9RdWV1ZS5zZXF1ZW5jZT0hMSx0LnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPSExfSx1bmRvOmZ1bmN0aW9uKHQpe3ZhciBlLHI7aWYodC5mcmFtZXdvcmsmJnQuZnJhbWV3b3JrLmlzUG9sYXIpdC5mcmFtZXdvcmsudW5kbygpO2Vsc2UgaWYoISh2b2lkIDA9PT10LnVuZG9RdWV1ZXx8aXNOYU4odC51bmRvUXVldWUuaW5kZXgpfHx0LnVuZG9RdWV1ZS5pbmRleDw9MCkpe2Zvcih0LnVuZG9RdWV1ZS5pbmRleC0tLGU9dC51bmRvUXVldWUucXVldWVbdC51bmRvUXVldWUuaW5kZXhdLHQudW5kb1F1ZXVlLmluU2VxdWVuY2U9ITAscj0wO3I8ZS51bmRvLmNhbGxzLmxlbmd0aDtyKyspYS5wbG90RG8odCxlLnVuZG8uY2FsbHNbcl0sZS51bmRvLmFyZ3Nbcl0pO3QudW5kb1F1ZXVlLmluU2VxdWVuY2U9ITEsdC5hdXRvcGxheT0hMX19LHJlZG86ZnVuY3Rpb24odCl7dmFyIGUscjtpZih0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhcil0LmZyYW1ld29yay5yZWRvKCk7ZWxzZSBpZighKHZvaWQgMD09PXQudW5kb1F1ZXVlfHxpc05hTih0LnVuZG9RdWV1ZS5pbmRleCl8fHQudW5kb1F1ZXVlLmluZGV4Pj10LnVuZG9RdWV1ZS5xdWV1ZS5sZW5ndGgpKXtmb3IoZT10LnVuZG9RdWV1ZS5xdWV1ZVt0LnVuZG9RdWV1ZS5pbmRleF0sdC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMCxyPTA7cjxlLnJlZG8uY2FsbHMubGVuZ3RoO3IrKylhLnBsb3REbyh0LGUucmVkby5jYWxsc1tyXSxlLnJlZG8uYXJnc1tyXSk7dC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMSx0LmF1dG9wbGF5PSExLHQudW5kb1F1ZXVlLmluZGV4Kyt9fX07YS5wbG90RG89ZnVuY3Rpb24odCxlLHIpe3QuYXV0b3BsYXk9ITAscj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixpPVtdLGE9MDthPGUubGVuZ3RoO2ErKylyPWVbYV0saVthXT1yPT09dD9yOlwib2JqZWN0XCI9PXR5cGVvZiByP0FycmF5LmlzQXJyYXkocik/bi5leHRlbmREZWVwKFtdLHIpOm4uZXh0ZW5kRGVlcEFsbCh7fSxyKTpyO3JldHVybiBpfSh0LHIpLGUuYXBwbHkobnVsbCxyKX0sZS5leHBvcnRzPWF9LHtcIi4uL2xpYlwiOjcwMSxcIi4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnXCI6NzM3fV0sNzE3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ci5jb3VudGVyPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPShlfHxcIlwiKSsocj9cIlwiOlwiJFwiKSxhPSExPT09bj9cIlwiOlwiXlwiO3JldHVyblwieHlcIj09PXQ/bmV3IFJlZ0V4cChhK1wieChbMi05XXxbMS05XVswLTldKyk/eShbMi05XXxbMS05XVswLTldKyk/XCIraSk6bmV3IFJlZ0V4cChhK3QrXCIoWzItOV18WzEtOV1bMC05XSspP1wiK2kpfX0se31dLDcxODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPS9eKC4qKShcXC5bXlxcLlxcW1xcXV0rfFxcW1xcZFxcXSkkLyxpPS9eW15cXC5cXFtcXF1dKyQvO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcig7ZTspe3ZhciByPXQubWF0Y2gobik7aWYocil0PXJbMV07ZWxzZXtpZighdC5tYXRjaChpKSl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgcmVsYXRpdmVBdHRyIGNhbGw6XCIrW3QsZV0pO3Q9XCJcIn1pZihcIl5cIiE9PWUuY2hhckF0KDApKWJyZWFrO2U9ZS5zbGljZSgxKX1yZXR1cm4gdCYmXCJbXCIhPT1lLmNoYXJBdCgwKT90K1wiLlwiK2U6dCtlfX0se31dLDcxOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2FycmF5XCIpLmlzQXJyYXlPclR5cGVkQXJyYXksaT10KFwiLi9pc19wbGFpbl9vYmplY3RcIik7ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIGEgaW4gcil7dmFyIG89clthXSxzPWVbYV07aWYocyE9PW8paWYoXCJfXCI9PT1hLmNoYXJBdCgwKXx8XCJmdW5jdGlvblwiPT10eXBlb2Ygbyl7aWYoYSBpbiBlKWNvbnRpbnVlO2VbYV09b31lbHNlIGlmKG4obykmJm4ocykmJmkob1swXSkpe2lmKFwiY3VzdG9tZGF0YVwiPT09YXx8XCJpZHNcIj09PWEpY29udGludWU7Zm9yKHZhciBsPU1hdGgubWluKG8ubGVuZ3RoLHMubGVuZ3RoKSxjPTA7YzxsO2MrKylzW2NdIT09b1tjXSYmaShvW2NdKSYmaShzW2NdKSYmdChzW2NdLG9bY10pfWVsc2UgaShvKSYmaShzKSYmKHQocyxvKSxPYmplY3Qua2V5cyhzKS5sZW5ndGh8fGRlbGV0ZSBlW2FdKX19fSx7XCIuL2FycmF5XCI6Njg0LFwiLi9pc19wbGFpbl9vYmplY3RcIjo3MDJ9XSw3MjA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi9sb2dnZXJzXCIpLGE9dChcIi4vaWRlbnRpdHlcIik7ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0PGV9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiB0PD1lfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gdD5lfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gdD49ZX1yLmZpbmRCaW49ZnVuY3Rpb24odCxlLHIpe2lmKG4oZS5zdGFydCkpcmV0dXJuIHI/TWF0aC5jZWlsKCh0LWUuc3RhcnQpL2Uuc2l6ZS0xZS05KS0xOk1hdGguZmxvb3IoKHQtZS5zdGFydCkvZS5zaXplKzFlLTkpO3ZhciBhLHUsaD0wLGY9ZS5sZW5ndGgscD0wLGQ9Zj4xPyhlW2YtMV0tZVswXSkvKGYtMSk6MTtmb3IodT1kPj0wP3I/bzpzOnI/YzpsLHQrPTFlLTkqZCoocj8tMToxKSooZD49MD8xOi0xKTtoPGYmJnArKzwxMDA7KXUoZVthPU1hdGguZmxvb3IoKGgrZikvMildLHQpP2g9YSsxOmY9YTtyZXR1cm4gcD45MCYmaS5sb2coXCJMb25nIGJpbmFyeSBzZWFyY2guLi5cIiksaC0xfSxyLnNvcnRlckFzYz1mdW5jdGlvbih0LGUpe3JldHVybiB0LWV9LHIuc29ydGVyRGVzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtdH0sci5kaXN0aW5jdFZhbHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5zbGljZSgpO2Uuc29ydChyLnNvcnRlckFzYyk7Zm9yKHZhciBuPWUubGVuZ3RoLTEsaT1lW25dLWVbMF18fDEsYT1pLyhufHwxKS8xZTQsbz1bZVswXV0scz0wO3M8bjtzKyspZVtzKzFdPmVbc10rYSYmKGk9TWF0aC5taW4oaSxlW3MrMV0tZVtzXSksby5wdXNoKGVbcysxXSkpO3JldHVybnt2YWxzOm8sbWluRGlmZjppfX0sci5yb3VuZFVwPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saT0wLGE9ZS5sZW5ndGgtMSxvPTAscz1yPzA6MSxsPXI/MTowLGM9cj9NYXRoLmNlaWw6TWF0aC5mbG9vcjtpPGEmJm8rKzwxMDA7KWVbbj1jKChpK2EpLzIpXTw9dD9pPW4rczphPW4tbDtyZXR1cm4gZVtpXX0sci5zb3J0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9MTtpPHQubGVuZ3RoO2krKyl7dmFyIGE9ZSh0W2ldLHRbaS0xXSk7aWYoYTwwP3I9MTphPjAmJihuPTEpLHImJm4pcmV0dXJuIHQuc29ydChlKX1yZXR1cm4gbj90OnQucmV2ZXJzZSgpfSxyLmZpbmRJbmRleE9mTWluPWZ1bmN0aW9uKHQsZSl7ZT1lfHxhO2Zvcih2YXIgcixuPTEvMCxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBvPWUodFtpXSk7bzxuJiYobj1vLHI9aSl9cmV0dXJuIHJ9fSx7XCIuL2lkZW50aXR5XCI6NzAwLFwiLi9sb2dnZXJzXCI6NzA1LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw3MjE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXsodC5hdHRyKFwiY2xhc3NcIil8fFwiXCIpLnNwbGl0KFwiIFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpezA9PT1lLmluZGV4T2YoXCJjdXJzb3ItXCIpJiZ0LmNsYXNzZWQoZSwhMSl9KSxlJiZ0LmNsYXNzZWQoXCJjdXJzb3ItXCIrZSwhMCl9fSx7fV0sNzIyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2NvbXBvbmVudHMvY29sb3JcIiksaT1mdW5jdGlvbigpe307ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KVwiZnVuY3Rpb25cIj09dHlwZW9mIHRbZV0mJih0W2VdPWkpO3QuZGVzdHJveT1mdW5jdGlvbigpe3QuY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodC5jb250YWluZXIpfTt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3IuY2xhc3NOYW1lPVwibm8td2ViZ2xcIixyLnN0eWxlLmN1cnNvcj1cInBvaW50ZXJcIixyLnN0eWxlLmZvbnRTaXplPVwiMjRweFwiLHIuc3R5bGUuY29sb3I9bi5kZWZhdWx0c1swXSxyLnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixyLnN0eWxlLmxlZnQ9ci5zdHlsZS50b3A9XCIwcHhcIixyLnN0eWxlLndpZHRoPXIuc3R5bGUuaGVpZ2h0PVwiMTAwJVwiLHIuc3R5bGVbXCJiYWNrZ3JvdW5kLWNvbG9yXCJdPW4ubGlnaHRMaW5lLHIuc3R5bGVbXCJ6LWluZGV4XCJdPTMwO3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpO3JldHVybiBhLnRleHRDb250ZW50PVwiV2ViR0wgaXMgbm90IHN1cHBvcnRlZCBieSB5b3VyIGJyb3dzZXIgLSB2aXNpdCBodHRwczovL2dldC53ZWJnbC5vcmcgZm9yIG1vcmUgaW5mb1wiLGEuc3R5bGUucG9zaXRpb249XCJyZWxhdGl2ZVwiLGEuc3R5bGUudG9wPVwiNTAlXCIsYS5zdHlsZS5sZWZ0PVwiNTAlXCIsYS5zdHlsZS5oZWlnaHQ9XCIzMCVcIixhLnN0eWxlLndpZHRoPVwiNTAlXCIsYS5zdHlsZS5tYXJnaW49XCItMTUlIDAgMCAtMjUlXCIsci5hcHBlbmRDaGlsZChhKSx0LmNvbnRhaW5lci5hcHBlbmRDaGlsZChyKSx0LmNvbnRhaW5lci5zdHlsZS5iYWNrZ3JvdW5kPVwiI0ZGRkZGRlwiLHQuY29udGFpbmVyLm9uY2xpY2s9ZnVuY3Rpb24oKXt3aW5kb3cub3BlbihcImh0dHBzOi8vZ2V0LndlYmdsLm9yZ1wiKX0sITF9fSx7XCIuLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4fV0sNzIzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4vYXJyYXlcIikuaXNBcnJheU9yVHlwZWRBcnJheTtyLmFnZ051bXM9ZnVuY3Rpb24odCxlLGEsbyl7dmFyIHMsbDtpZigoIW98fG8+YS5sZW5ndGgpJiYobz1hLmxlbmd0aCksbihlKXx8KGU9ITEpLGkoYVswXSkpe2ZvcihsPW5ldyBBcnJheShvKSxzPTA7czxvO3MrKylsW3NdPXIuYWdnTnVtcyh0LGUsYVtzXSk7YT1sfWZvcihzPTA7czxvO3MrKyluKGUpP24oYVtzXSkmJihlPXQoK2UsK2Fbc10pKTplPWFbc107cmV0dXJuIGV9LHIubGVuPWZ1bmN0aW9uKHQpe3JldHVybiByLmFnZ051bXMoZnVuY3Rpb24odCl7cmV0dXJuIHQrMX0sMCx0KX0sci5tZWFuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fChlPXIubGVuKHQpKSxyLmFnZ051bXMoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSwwLHQpL2V9LHIubWlkUmFuZ2U9ZnVuY3Rpb24odCl7aWYodm9pZCAwIT09dCYmMCE9PXQubGVuZ3RoKXJldHVybihyLmFnZ051bXMoTWF0aC5tYXgsbnVsbCx0KStyLmFnZ051bXMoTWF0aC5taW4sbnVsbCx0KSkvMn0sci52YXJpYW5jZT1mdW5jdGlvbih0LGUsaSl7cmV0dXJuIGV8fChlPXIubGVuKHQpKSxuKGkpfHwoaT1yLm1lYW4odCxlKSksci5hZ2dOdW1zKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrTWF0aC5wb3coZS1pLDIpfSwwLHQpL2V9LHIuc3RkZXY9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBNYXRoLnNxcnQoci52YXJpYW5jZSh0LGUsbikpfSxyLmludGVycD1mdW5jdGlvbih0LGUpe2lmKCFuKGUpKXRocm93XCJuIHNob3VsZCBiZSBhIGZpbml0ZSBudW1iZXJcIjtpZigoZT1lKnQubGVuZ3RoLS41KTwwKXJldHVybiB0WzBdO2lmKGU+dC5sZW5ndGgtMSlyZXR1cm4gdFt0Lmxlbmd0aC0xXTt2YXIgcj1lJTE7cmV0dXJuIHIqdFtNYXRoLmNlaWwoZSldKygxLXIpKnRbTWF0aC5mbG9vcihlKV19fSx7XCIuL2FycmF5XCI6Njg0LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw3MjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiY29sb3Itbm9ybWFsaXplXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD9uKHQpOlswLDAsMCwxXX19LHtcImNvbG9yLW5vcm1hbGl6ZVwiOjExMX1dLDcyNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi9saWJcIiksYT10KFwiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIiksbz10KFwiLi4vY29uc3RhbnRzL2FsaWdubWVudFwiKS5MSU5FX1NQQUNJTkc7ZnVuY3Rpb24gcyh0LGUpe3JldHVybiB0Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtlXX12YXIgbD0vKFteJF0qKShbJF0rW14kXSpbJF0rKShbXiRdKikvO3IuY29udmVydFRvVHNwYW5zPWZ1bmN0aW9uKHQsZSxNKXt2YXIgUz10LnRleHQoKSxDPSF0LmF0dHIoXCJkYXRhLW5vdGV4XCIpJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgTWF0aEpheCYmUy5tYXRjaChsKSxMPW4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpO2lmKCFMLmVtcHR5KCkpe3ZhciB6PXQuYXR0cihcImNsYXNzXCIpP3QuYXR0cihcImNsYXNzXCIpLnNwbGl0KFwiIFwiKVswXTpcInRleHRcIjtyZXR1cm4geis9XCItbWF0aFwiLEwuc2VsZWN0QWxsKFwic3ZnLlwiK3opLnJlbW92ZSgpLEwuc2VsZWN0QWxsKFwiZy5cIit6K1wiLWdyb3VwXCIpLnJlbW92ZSgpLHQuc3R5bGUoXCJkaXNwbGF5XCIsbnVsbCkuYXR0cih7XCJkYXRhLXVuZm9ybWF0dGVkXCI6UyxcImRhdGEtbWF0aFwiOlwiTlwifSksQz8oZSYmZS5fcHJvbWlzZXN8fFtdKS5wdXNoKG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3Quc3R5bGUoXCJkaXNwbGF5XCIsXCJub25lXCIpO3ZhciByPXBhcnNlSW50KHQubm9kZSgpLnN0eWxlLmZvbnRTaXplLDEwKSxhPXtmb250U2l6ZTpyfTshZnVuY3Rpb24odCxlLHIpe3ZhciBhLG8scyxsO01hdGhKYXguSHViLlF1ZXVlKGZ1bmN0aW9uKCl7cmV0dXJuIG89aS5leHRlbmREZWVwQWxsKHt9LE1hdGhKYXguSHViLmNvbmZpZykscz1NYXRoSmF4Lkh1Yi5wcm9jZXNzU2VjdGlvbkRlbGF5LHZvaWQgMCE9PU1hdGhKYXguSHViLnByb2Nlc3NTZWN0aW9uRGVsYXkmJihNYXRoSmF4Lkh1Yi5wcm9jZXNzU2VjdGlvbkRlbGF5PTApLE1hdGhKYXguSHViLkNvbmZpZyh7bWVzc2FnZVN0eWxlOlwibm9uZVwiLHRleDJqYXg6e2lubGluZU1hdGg6W1tcIiRcIixcIiRcIl0sW1wiXFxcXChcIixcIlxcXFwpXCJdXX0sZGlzcGxheUFsaWduOlwibGVmdFwifSl9LGZ1bmN0aW9uKCl7aWYoXCJTVkdcIiE9PShhPU1hdGhKYXguSHViLmNvbmZpZy5tZW51U2V0dGluZ3MucmVuZGVyZXIpKXJldHVybiBNYXRoSmF4Lkh1Yi5zZXRSZW5kZXJlcihcIlNWR1wiKX0sZnVuY3Rpb24oKXt2YXIgcj1cIm1hdGgtb3V0cHV0LVwiK2kucmFuZHN0cih7fSw2NCk7cmV0dXJuIGw9bi5zZWxlY3QoXCJib2R5XCIpLmFwcGVuZChcImRpdlwiKS5hdHRyKHtpZDpyfSkuc3R5bGUoe3Zpc2liaWxpdHk6XCJoaWRkZW5cIixwb3NpdGlvbjpcImFic29sdXRlXCJ9KS5zdHlsZSh7XCJmb250LXNpemVcIjplLmZvbnRTaXplK1wicHhcIn0pLnRleHQodC5yZXBsYWNlKGMsXCJcXFxcbHQgXCIpLnJlcGxhY2UodSxcIlxcXFxndCBcIikpLE1hdGhKYXguSHViLlR5cGVzZXQobC5ub2RlKCkpfSxmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KFwiYm9keVwiKS5zZWxlY3QoXCIjTWF0aEpheF9TVkdfZ2x5cGhzXCIpO2lmKGwuc2VsZWN0KFwiLk1hdGhKYXhfU1ZHXCIpLmVtcHR5KCl8fCFsLnNlbGVjdChcInN2Z1wiKS5ub2RlKCkpaS5sb2coXCJUaGVyZSB3YXMgYW4gZXJyb3IgaW4gdGhlIHRleCBzeW50YXguXCIsdCkscigpO2Vsc2V7dmFyIG89bC5zZWxlY3QoXCJzdmdcIikubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3IobC5zZWxlY3QoXCIuTWF0aEpheF9TVkdcIiksZSxvKX1pZihsLnJlbW92ZSgpLFwiU1ZHXCIhPT1hKXJldHVybiBNYXRoSmF4Lkh1Yi5zZXRSZW5kZXJlcihhKX0sZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09cyYmKE1hdGhKYXguSHViLnByb2Nlc3NTZWN0aW9uRGVsYXk9cyksTWF0aEpheC5IdWIuQ29uZmlnKG8pfSl9KENbMl0sYSxmdW5jdGlvbihuLGksYSl7TC5zZWxlY3RBbGwoXCJzdmcuXCIreikucmVtb3ZlKCksTC5zZWxlY3RBbGwoXCJnLlwiK3orXCItZ3JvdXBcIikucmVtb3ZlKCk7dmFyIG89biYmbi5zZWxlY3QoXCJzdmdcIik7aWYoIW98fCFvLm5vZGUoKSlyZXR1cm4gTygpLHZvaWQgZSgpO3ZhciBsPUwuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKHorXCItZ3JvdXBcIiwhMCkuYXR0cih7XCJwb2ludGVyLWV2ZW50c1wiOlwibm9uZVwiLFwiZGF0YS11bmZvcm1hdHRlZFwiOlMsXCJkYXRhLW1hdGhcIjpcIllcIn0pO2wubm9kZSgpLmFwcGVuZENoaWxkKG8ubm9kZSgpKSxpJiZpLm5vZGUoKSYmby5ub2RlKCkuaW5zZXJ0QmVmb3JlKGkubm9kZSgpLmNsb25lTm9kZSghMCksby5ub2RlKCkuZmlyc3RDaGlsZCksby5hdHRyKHtjbGFzczp6LGhlaWdodDphLmhlaWdodCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwieE1pbllNaW4gbWVldFwifSkuc3R5bGUoe292ZXJmbG93OlwidmlzaWJsZVwiLFwicG9pbnRlci1ldmVudHNcIjpcIm5vbmVcIn0pO3ZhciBjPXQubm9kZSgpLnN0eWxlLmZpbGx8fFwiYmxhY2tcIjtvLnNlbGVjdChcImdcIikuYXR0cih7ZmlsbDpjLHN0cm9rZTpjfSk7dmFyIHU9cyhvLFwid2lkdGhcIiksaD1zKG8sXCJoZWlnaHRcIiksZj0rdC5hdHRyKFwieFwiKS11KntzdGFydDowLG1pZGRsZTouNSxlbmQ6MX1bdC5hdHRyKFwidGV4dC1hbmNob3JcIil8fFwic3RhcnRcIl0scD0tKHJ8fHModCxcImhlaWdodFwiKSkvNDtcInlcIj09PXpbMF0/KGwuYXR0cih7dHJhbnNmb3JtOlwicm90YXRlKFwiK1stOTAsK3QuYXR0cihcInhcIiksK3QuYXR0cihcInlcIildK1wiKSB0cmFuc2xhdGUoXCIrWy11LzIscC1oLzJdK1wiKVwifSksby5hdHRyKHt4Oit0LmF0dHIoXCJ4XCIpLHk6K3QuYXR0cihcInlcIil9KSk6XCJsXCI9PT16WzBdP28uYXR0cih7eDp0LmF0dHIoXCJ4XCIpLHk6cC1oLzJ9KTpcImFcIj09PXpbMF0mJjAhPT16LmluZGV4T2YoXCJhdGl0bGVcIik/by5hdHRyKHt4OjAseTpwfSk6by5hdHRyKHt4OmYseTordC5hdHRyKFwieVwiKStwLWgvMn0pLE0mJk0uY2FsbCh0LGwpLGUobCl9KX0pKTpPKCksdH1mdW5jdGlvbiBPKCl7TC5lbXB0eSgpfHwoej10LmF0dHIoXCJjbGFzc1wiKStcIi1tYXRoXCIsTC5zZWxlY3QoXCJzdmcuXCIreikucmVtb3ZlKCkpLHQudGV4dChcIlwiKS5zdHlsZShcIndoaXRlLXNwYWNlXCIsXCJwcmVcIiksZnVuY3Rpb24odCxlKXtlPWUucmVwbGFjZSh2LFwiIFwiKTt2YXIgcixzPSExLGw9W10sYz0tMTtmdW5jdGlvbiB1KCl7YysrO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhhLnN2ZyxcInRzcGFuXCIpO24uc2VsZWN0KGUpLmF0dHIoe2NsYXNzOlwibGluZVwiLGR5OmMqbytcImVtXCJ9KSx0LmFwcGVuZENoaWxkKGUpLHI9ZTt2YXIgaT1sO2lmKGw9W3tub2RlOmV9XSxpLmxlbmd0aD4xKWZvcih2YXIgcz0xO3M8aS5sZW5ndGg7cysrKU0oaVtzXSl9ZnVuY3Rpb24gTSh0KXt2YXIgZSxpPXQudHlwZSxvPXt9O2lmKFwiYVwiPT09aSl7ZT1cImFcIjt2YXIgcz10LnRhcmdldCxjPXQuaHJlZix1PXQucG9wdXA7YyYmKG89e1wieGxpbms6eGxpbms6c2hvd1wiOlwiX2JsYW5rXCI9PT1zfHxcIl9cIiE9PXMuY2hhckF0KDApP1wibmV3XCI6XCJyZXBsYWNlXCIsdGFyZ2V0OnMsXCJ4bGluazp4bGluazpocmVmXCI6Y30sdSYmKG8ub25jbGljaz0nd2luZG93Lm9wZW4odGhpcy5ocmVmLmJhc2VWYWwsdGhpcy50YXJnZXQuYmFzZVZhbCxcIicrdSsnXCIpO3JldHVybiBmYWxzZTsnKSl9ZWxzZSBlPVwidHNwYW5cIjt0LnN0eWxlJiYoby5zdHlsZT10LnN0eWxlKTt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoYS5zdmcsZSk7aWYoXCJzdXBcIj09PWl8fFwic3ViXCI9PT1pKXtTKHIsZCksci5hcHBlbmRDaGlsZChoKTt2YXIgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoYS5zdmcsXCJ0c3BhblwiKTtTKGcsZCksbi5zZWxlY3QoZykuYXR0cihcImR5XCIscFtpXSksby5keT1mW2ldLHIuYXBwZW5kQ2hpbGQoaCksci5hcHBlbmRDaGlsZChnKX1lbHNlIHIuYXBwZW5kQ2hpbGQoaCk7bi5zZWxlY3QoaCkuYXR0cihvKSxyPXQubm9kZT1oLGwucHVzaCh0KX1mdW5jdGlvbiBTKHQsZSl7dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSl9ZnVuY3Rpb24gQyh0KXtpZigxIT09bC5sZW5ndGgpe3ZhciBuPWwucG9wKCk7dCE9PW4udHlwZSYmaS5sb2coXCJTdGFydCB0YWcgPFwiK24udHlwZStcIj4gZG9lc250IG1hdGNoIGVuZCB0YWcgPFwiK3QrXCI+LiBQcmV0ZW5kaW5nIGl0IGRpZCBtYXRjaC5cIixlKSxyPWxbbC5sZW5ndGgtMV0ubm9kZX1lbHNlIGkubG9nKFwiSWdub3JpbmcgdW5leHBlY3RlZCBlbmQgdGFnIDwvXCIrdCtcIj4uXCIsZSl9eC50ZXN0KGUpP3UoKToocj10LGw9W3tub2RlOnR9XSk7Zm9yKHZhciBMPWUuc3BsaXQobSksej0wO3o8TC5sZW5ndGg7eisrKXt2YXIgTz1MW3pdLEk9Ty5tYXRjaCh5KSxEPUkmJklbMl0udG9Mb3dlckNhc2UoKSxQPWhbRF07aWYoXCJiclwiPT09RCl1KCk7ZWxzZSBpZih2b2lkIDA9PT1QKVMocixFKE8pKTtlbHNlIGlmKElbMV0pQyhEKTtlbHNle3ZhciBSPUlbNF0sRj17dHlwZTpEfSxCPUEoUixiKTtpZihCPyhCPUIucmVwbGFjZShULFwiJDEgZmlsbDpcIiksUCYmKEIrPVwiO1wiK1ApKTpQJiYoQj1QKSxCJiYoRi5zdHlsZT1CKSxcImFcIj09PUQpe3M9ITA7dmFyIE49QShSLF8pO2lmKE4pe3ZhciBqPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO2ouaHJlZj1OLC0xIT09Zy5pbmRleE9mKGoucHJvdG9jb2wpJiYoRi5ocmVmPWVuY29kZVVSSShkZWNvZGVVUkkoTikpLEYudGFyZ2V0PUEoUix3KXx8XCJfYmxhbmtcIixGLnBvcHVwPUEoUixrKSl9fU0oRil9fXJldHVybiBzfSh0Lm5vZGUoKSxTKSYmdC5zdHlsZShcInBvaW50ZXItZXZlbnRzXCIsXCJhbGxcIiksci5wb3NpdGlvblRleHQodCksTSYmTS5jYWxsKHQpfX07dmFyIGM9Lyg8fCZsdDt8JiM2MDspL2csdT0vKD58Jmd0O3wmIzYyOykvZzt2YXIgaD17c3VwOlwiZm9udC1zaXplOjcwJVwiLHN1YjpcImZvbnQtc2l6ZTo3MCVcIixiOlwiZm9udC13ZWlnaHQ6Ym9sZFwiLGk6XCJmb250LXN0eWxlOml0YWxpY1wiLGE6XCJjdXJzb3I6cG9pbnRlclwiLHNwYW46XCJcIixlbTpcImZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OmJvbGRcIn0sZj17c3ViOlwiMC4zZW1cIixzdXA6XCItMC42ZW1cIn0scD17c3ViOlwiLTAuMjFlbVwiLHN1cDpcIjAuNDJlbVwifSxkPVwiXFx1MjAwYlwiLGc9W1wiaHR0cDpcIixcImh0dHBzOlwiLFwibWFpbHRvOlwiLFwiXCIsdm9pZCAwLFwiOlwiXSx2PS8oXFxyXFxuP3xcXG4pL2csbT0vKDxbXjw+XSo+KS8seT0vPChcXC8/KShbXiA+XSopKFxccysoLiopKT8+L2kseD0vPGJyKFxccysuKik/Pi9pLGI9LyhefFtcXHNcIiddKXN0eWxlXFxzKj1cXHMqKFwiKFteXCJdKik7P1wifCcoW14nXSopOz8nKS9pLF89LyhefFtcXHNcIiddKWhyZWZcXHMqPVxccyooXCIoW15cIl0qKVwifCcoW14nXSopJykvaSx3PS8oXnxbXFxzXCInXSl0YXJnZXRcXHMqPVxccyooXCIoW15cIlxcc10qKVwifCcoW14nXFxzXSopJykvaSxrPS8oXnxbXFxzXCInXSlwb3B1cFxccyo9XFxzKihcIihbXFx3PSxdKilcInwnKFtcXHc9LF0qKScpL2k7ZnVuY3Rpb24gQSh0LGUpe2lmKCF0KXJldHVybiBudWxsO3ZhciByPXQubWF0Y2goZSksbj1yJiYoclszXXx8cls0XSk7cmV0dXJuIG4mJkUobil9dmFyIFQ9LyhefDspXFxzKmNvbG9yOi87ci5wbGFpblRleHQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dm9pZCAwIT09KGU9ZXx8e30pLmxlbiYmLTEhPT1lLmxlbj9lLmxlbjoxLzAsbj12b2lkIDAhPT1lLmFsbG93ZWRUYWdzP2UuYWxsb3dlZFRhZ3M6W1wiYnJcIl0saT1cIi4uLlwiLmxlbmd0aCxhPXQuc3BsaXQobSksbz1bXSxzPVwiXCIsbD0wLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIHU9YVtjXSxoPXUubWF0Y2goeSksZj1oJiZoWzJdLnRvTG93ZXJDYXNlKCk7aWYoZiktMSE9PW4uaW5kZXhPZihmKSYmKG8ucHVzaCh1KSxzPWYpO2Vsc2V7dmFyIHA9dS5sZW5ndGg7aWYobCtwPHIpby5wdXNoKHUpLGwrPXA7ZWxzZSBpZihsPHIpe3ZhciBkPXItbDtzJiYoXCJiclwiIT09c3x8ZDw9aXx8cDw9aSkmJm8ucG9wKCkscj5pP28ucHVzaCh1LnN1YnN0cigwLGQtaSkrXCIuLi5cIik6by5wdXNoKHUuc3Vic3RyKDAsZCkpO2JyZWFrfXM9XCJcIn19cmV0dXJuIG8uam9pbihcIlwiKX07dmFyIE09e211OlwiXFx1MDNiY1wiLGFtcDpcIiZcIixsdDpcIjxcIixndDpcIj5cIixuYnNwOlwiXFx4YTBcIix0aW1lczpcIlxceGQ3XCIscGx1c21uOlwiXFx4YjFcIixkZWc6XCJcXHhiMFwifSxTPS8mKCNcXGQrfCN4W1xcZGEtZkEtRl0rfFthLXpdKyk7L2c7ZnVuY3Rpb24gRSh0KXtyZXR1cm4gdC5yZXBsYWNlKFMsZnVuY3Rpb24odCxlKXtyZXR1cm4oXCIjXCI9PT1lLmNoYXJBdCgwKT9mdW5jdGlvbih0KXtpZih0PjExMTQxMTEpcmV0dXJuO3ZhciBlPVN0cmluZy5mcm9tQ29kZVBvaW50O2lmKGUpcmV0dXJuIGUodCk7dmFyIHI9U3RyaW5nLmZyb21DaGFyQ29kZTtyZXR1cm4gdDw9NjU1MzU/cih0KTpyKDU1MjMyKyh0Pj4xMCksdCUxMDI0KzU2MzIwKX0oXCJ4XCI9PT1lLmNoYXJBdCgxKT9wYXJzZUludChlLnN1YnN0cigyKSwxNik6cGFyc2VJbnQoZS5zdWJzdHIoMSksMTApKTpNW2VdKXx8dH0pfWZ1bmN0aW9uIEModCxlLHIpe3ZhciBuLGksYSxvPXIuaG9yaXpvbnRhbEFsaWduLHM9ci52ZXJ0aWNhbEFsaWdufHxcInRvcFwiLGw9dC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYz1lLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gaT1cImJvdHRvbVwiPT09cz9mdW5jdGlvbigpe3JldHVybiBsLmJvdHRvbS1uLmhlaWdodH06XCJtaWRkbGVcIj09PXM/ZnVuY3Rpb24oKXtyZXR1cm4gbC50b3ArKGwuaGVpZ2h0LW4uaGVpZ2h0KS8yfTpmdW5jdGlvbigpe3JldHVybiBsLnRvcH0sYT1cInJpZ2h0XCI9PT1vP2Z1bmN0aW9uKCl7cmV0dXJuIGwucmlnaHQtbi53aWR0aH06XCJjZW50ZXJcIj09PW8/ZnVuY3Rpb24oKXtyZXR1cm4gbC5sZWZ0KyhsLndpZHRoLW4ud2lkdGgpLzJ9OmZ1bmN0aW9uKCl7cmV0dXJuIGwubGVmdH0sZnVuY3Rpb24oKXtyZXR1cm4gbj10aGlzLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLnN0eWxlKHt0b3A6aSgpLWMudG9wK1wicHhcIixsZWZ0OmEoKS1jLmxlZnQrXCJweFwiLFwiei1pbmRleFwiOjFlM30pLHRoaXN9fXIuY29udmVydEVudGl0aWVzPUUsci5saW5lQ291bnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VsZWN0QWxsKFwidHNwYW4ubGluZVwiKS5zaXplKCl8fDF9LHIucG9zaXRpb25UZXh0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7ZnVuY3Rpb24gaShlLHIpe3JldHVybiB2b2lkIDA9PT1yP251bGw9PT0ocj10LmF0dHIoZSkpJiYodC5hdHRyKGUsMCkscj0wKTp0LmF0dHIoZSxyKSxyfXZhciBhPWkoXCJ4XCIsZSksbz1pKFwieVwiLHIpO1widGV4dFwiPT09dGhpcy5ub2RlTmFtZSYmdC5zZWxlY3RBbGwoXCJ0c3Bhbi5saW5lXCIpLmF0dHIoe3g6YSx5Om99KX0pfSxyLm1ha2VFZGl0YWJsZT1mdW5jdGlvbih0LGUpe3ZhciByPWUuZ2QsaT1lLmRlbGVnYXRlLGE9bi5kaXNwYXRjaChcImVkaXRcIixcImlucHV0XCIsXCJjYW5jZWxcIiksbz1pfHx0O2lmKHQuc3R5bGUoe1wicG9pbnRlci1ldmVudHNcIjppP1wibm9uZVwiOlwiYWxsXCJ9KSwxIT09dC5zaXplKCkpdGhyb3cgbmV3IEVycm9yKFwiYm9vXCIpO2Z1bmN0aW9uIHMoKXshZnVuY3Rpb24oKXt2YXIgaT1uLnNlbGVjdChyKS5zZWxlY3QoXCIuc3ZnLWNvbnRhaW5lclwiKSxvPWkuYXBwZW5kKFwiZGl2XCIpLHM9dC5ub2RlKCkuc3R5bGUsYz1wYXJzZUZsb2F0KHMuZm9udFNpemV8fDEyKSx1PWUudGV4dDt2b2lkIDA9PT11JiYodT10LmF0dHIoXCJkYXRhLXVuZm9ybWF0dGVkXCIpKTtvLmNsYXNzZWQoXCJwbHVnaW4tZWRpdGFibGUgZWRpdGFibGVcIiwhMCkuc3R5bGUoe3Bvc2l0aW9uOlwiYWJzb2x1dGVcIixcImZvbnQtZmFtaWx5XCI6cy5mb250RmFtaWx5fHxcIkFyaWFsXCIsXCJmb250LXNpemVcIjpjLGNvbG9yOmUuZmlsbHx8cy5maWxsfHxcImJsYWNrXCIsb3BhY2l0eToxLFwiYmFja2dyb3VuZC1jb2xvclwiOmUuYmFja2dyb3VuZHx8XCJ0cmFuc3BhcmVudFwiLG91dGxpbmU6XCIjZmZmZmZmMzMgMXB4IHNvbGlkXCIsbWFyZ2luOlstYy84KzEsMCwwLC0xXS5qb2luKFwicHggXCIpK1wicHhcIixwYWRkaW5nOlwiMFwiLFwiYm94LXNpemluZ1wiOlwiYm9yZGVyLWJveFwifSkuYXR0cih7Y29udGVudGVkaXRhYmxlOiEwfSkudGV4dCh1KS5jYWxsKEModCxpLGUpKS5vbihcImJsdXJcIixmdW5jdGlvbigpe3IuX2VkaXRpbmc9ITEsdC50ZXh0KHRoaXMudGV4dENvbnRlbnQpLnN0eWxlKHtvcGFjaXR5OjF9KTt2YXIgZSxpPW4uc2VsZWN0KHRoaXMpLmF0dHIoXCJjbGFzc1wiKTsoZT1pP1wiLlwiK2kuc3BsaXQoXCIgXCIpWzBdK1wiLW1hdGgtZ3JvdXBcIjpcIltjbGFzcyo9LW1hdGgtZ3JvdXBdXCIpJiZuLnNlbGVjdCh0Lm5vZGUoKS5wYXJlbnROb2RlKS5zZWxlY3QoZSkuc3R5bGUoe29wYWNpdHk6MH0pO3ZhciBvPXRoaXMudGV4dENvbnRlbnQ7bi5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKDApLnJlbW92ZSgpLG4uc2VsZWN0KGRvY3VtZW50KS5vbihcIm1vdXNldXBcIixudWxsKSxhLmVkaXQuY2FsbCh0LG8pfSkub24oXCJmb2N1c1wiLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyLl9lZGl0aW5nPSEwLG4uc2VsZWN0KGRvY3VtZW50KS5vbihcIm1vdXNldXBcIixmdW5jdGlvbigpe2lmKG4uZXZlbnQudGFyZ2V0PT09dClyZXR1cm4hMTtkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09by5ub2RlKCkmJm8ubm9kZSgpLmJsdXIoKX0pfSkub24oXCJrZXl1cFwiLGZ1bmN0aW9uKCl7Mjc9PT1uLmV2ZW50LndoaWNoPyhyLl9lZGl0aW5nPSExLHQuc3R5bGUoe29wYWNpdHk6MX0pLG4uc2VsZWN0KHRoaXMpLnN0eWxlKHtvcGFjaXR5OjB9KS5vbihcImJsdXJcIixmdW5jdGlvbigpe3JldHVybiExfSkudHJhbnNpdGlvbigpLnJlbW92ZSgpLGEuY2FuY2VsLmNhbGwodCx0aGlzLnRleHRDb250ZW50KSk6KGEuaW5wdXQuY2FsbCh0LHRoaXMudGV4dENvbnRlbnQpLG4uc2VsZWN0KHRoaXMpLmNhbGwoQyh0LGksZSkpKX0pLm9uKFwia2V5ZG93blwiLGZ1bmN0aW9uKCl7MTM9PT1uLmV2ZW50LndoaWNoJiZ0aGlzLmJsdXIoKX0pLmNhbGwobCl9KCksdC5zdHlsZSh7b3BhY2l0eTowfSk7dmFyIGkscz1vLmF0dHIoXCJjbGFzc1wiKTsoaT1zP1wiLlwiK3Muc3BsaXQoXCIgXCIpWzBdK1wiLW1hdGgtZ3JvdXBcIjpcIltjbGFzcyo9LW1hdGgtZ3JvdXBdXCIpJiZuLnNlbGVjdCh0Lm5vZGUoKS5wYXJlbnROb2RlKS5zZWxlY3QoaSkuc3R5bGUoe29wYWNpdHk6MH0pfWZ1bmN0aW9uIGwodCl7dmFyIGU9dC5ub2RlKCkscj1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO3Iuc2VsZWN0Tm9kZUNvbnRlbnRzKGUpO3ZhciBuPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtuLnJlbW92ZUFsbFJhbmdlcygpLG4uYWRkUmFuZ2UociksZS5mb2N1cygpfXJldHVybiBlLmltbWVkaWF0ZT9zKCk6by5vbihcImNsaWNrXCIscyksbi5yZWJpbmQodCxhLFwib25cIil9fSx7XCIuLi9jb25zdGFudHMvYWxpZ25tZW50XCI6NjczLFwiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIjo2NzksXCIuLi9saWJcIjo3MDEsZDM6MTU1fV0sNzI2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307ZnVuY3Rpb24gaSh0KXt0JiZudWxsIT09dC50aW1lciYmKGNsZWFyVGltZW91dCh0LnRpbWVyKSx0LnRpbWVyPW51bGwpfXIudGhyb3R0bGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPW5bdF0sbz1EYXRlLm5vdygpO2lmKCFhKXtmb3IodmFyIHMgaW4gbiluW3NdLnRzPG8tNmU0JiZkZWxldGUgbltzXTthPW5bdF09e3RzOjAsdGltZXI6bnVsbH19ZnVuY3Rpb24gbCgpe3IoKSxhLnRzPURhdGUubm93KCksYS5vbkRvbmUmJihhLm9uRG9uZSgpLGEub25Eb25lPW51bGwpfWkoYSksbz5hLnRzK2U/bCgpOmEudGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2woKSxhLnRpbWVyPW51bGx9LGUpfSxyLmRvbmU9ZnVuY3Rpb24odCl7dmFyIGU9blt0XTtyZXR1cm4gZSYmZS50aW1lcj9uZXcgUHJvbWlzZShmdW5jdGlvbih0KXt2YXIgcj1lLm9uRG9uZTtlLm9uRG9uZT1mdW5jdGlvbigpe3ImJnIoKSx0KCksZS5vbkRvbmU9bnVsbH19KTpQcm9taXNlLnJlc29sdmUoKX0sci5jbGVhcj1mdW5jdGlvbih0KXtpZih0KWkoblt0XSksZGVsZXRlIG5bdF07ZWxzZSBmb3IodmFyIGUgaW4gbilyLmNsZWFyKGUpfX0se31dLDcyNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZih0PjApcmV0dXJuIE1hdGgubG9nKHQpL01hdGguTE4xMDt2YXIgcj1NYXRoLmxvZyhNYXRoLm1pbihlWzBdLGVbMV0pKS9NYXRoLkxOMTA7cmV0dXJuIG4ocil8fChyPU1hdGgubG9nKE1hdGgubWF4KGVbMF0sZVsxXSkpL01hdGguTE4xMC02KSxyfX0se1wiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw3Mjg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lLmV4cG9ydHM9e30saT10KFwiLi4vcGxvdHMvZ2VvL2NvbnN0YW50c1wiKS5sb2NhdGlvbm1vZGVUb0xheWVyLGE9dChcInRvcG9qc29uLWNsaWVudFwiKS5mZWF0dXJlO24uZ2V0VG9wb2pzb25OYW1lPWZ1bmN0aW9uKHQpe3JldHVyblt0LnNjb3BlLnJlcGxhY2UoLyAvZyxcIi1cIiksXCJfXCIsdC5yZXNvbHV0aW9uLnRvU3RyaW5nKCksXCJtXCJdLmpvaW4oXCJcIil9LG4uZ2V0VG9wb2pzb25QYXRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZStcIi5qc29uXCJ9LG4uZ2V0VG9wb2pzb25GZWF0dXJlcz1mdW5jdGlvbih0LGUpe3ZhciByPWlbdC5sb2NhdGlvbm1vZGVdLG49ZS5vYmplY3RzW3JdO3JldHVybiBhKGUsbikuZmVhdHVyZXN9fSx7XCIuLi9wbG90cy9nZW8vY29uc3RhbnRzXCI6Nzc3LFwidG9wb2pzb24tY2xpZW50XCI6NTI1fV0sNzI5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwibG9jYWxlXCIsbmFtZTpcImVuLVVTXCIsZGljdGlvbmFyeTp7XCJDbGljayB0byBlbnRlciBDb2xvcnNjYWxlIHRpdGxlXCI6XCJDbGljayB0byBlbnRlciBDb2xvcnNjYWxlIHRpdGxlXCJ9LGZvcm1hdDp7ZGF0ZTpcIiVtLyVkLyVZXCJ9fX0se31dLDczMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17bW9kdWxlVHlwZTpcImxvY2FsZVwiLG5hbWU6XCJlblwiLGRpY3Rpb25hcnk6e1wiQ2xpY2sgdG8gZW50ZXIgQ29sb3JzY2FsZSB0aXRsZVwiOlwiQ2xpY2sgdG8gZW50ZXIgQ29sb3Vyc2NhbGUgdGl0bGVcIn0sZm9ybWF0OntkYXlzOltcIlN1bmRheVwiLFwiTW9uZGF5XCIsXCJUdWVzZGF5XCIsXCJXZWRuZXNkYXlcIixcIlRodXJzZGF5XCIsXCJGcmlkYXlcIixcIlNhdHVyZGF5XCJdLHNob3J0RGF5czpbXCJTdW5cIixcIk1vblwiLFwiVHVlXCIsXCJXZWRcIixcIlRodVwiLFwiRnJpXCIsXCJTYXRcIl0sbW9udGhzOltcIkphbnVhcnlcIixcIkZlYnJ1YXJ5XCIsXCJNYXJjaFwiLFwiQXByaWxcIixcIk1heVwiLFwiSnVuZVwiLFwiSnVseVwiLFwiQXVndXN0XCIsXCJTZXB0ZW1iZXJcIixcIk9jdG9iZXJcIixcIk5vdmVtYmVyXCIsXCJEZWNlbWJlclwiXSxzaG9ydE1vbnRoczpbXCJKYW5cIixcIkZlYlwiLFwiTWFyXCIsXCJBcHJcIixcIk1heVwiLFwiSnVuXCIsXCJKdWxcIixcIkF1Z1wiLFwiU2VwXCIsXCJPY3RcIixcIk5vdlwiLFwiRGVjXCJdLHBlcmlvZHM6W1wiQU1cIixcIlBNXCJdLGRhdGVUaW1lOlwiJWEgJWIgJWUgJVggJVlcIixkYXRlOlwiJWQvJW0vJVlcIix0aW1lOlwiJUg6JU06JVNcIixkZWNpbWFsOlwiLlwiLHRob3VzYW5kczpcIixcIixncm91cGluZzpbM10sY3VycmVuY3k6W1wiJFwiLFwiXCJdLHllYXI6XCIlWVwiLG1vbnRoOlwiJWIgJVlcIixkYXlNb250aDpcIiViICUtZFwiLGRheU1vbnRoWWVhcjpcIiViICUtZCwgJVlcIn19fSx7fV0sNzMxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3JlZ2lzdHJ5XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscixpPW4ubGF5b3V0QXJyYXlDb250YWluZXJzLGE9bi5sYXlvdXRBcnJheVJlZ2V4ZXMsbz10LnNwbGl0KFwiW1wiKVswXSxzPTA7czxhLmxlbmd0aDtzKyspaWYoKHI9dC5tYXRjaChhW3NdKSkmJjA9PT1yLmluZGV4KXtlPXJbMF07YnJlYWt9aWYoZXx8KGU9aVtpLmluZGV4T2YobyldKSwhZSlyZXR1cm4hMTt2YXIgbD10LnN1YnN0cihlLmxlbmd0aCk7cmV0dXJuIGw/ISEocj1sLm1hdGNoKC9eXFxbKDB8WzEtOV1bMC05XSopXFxdKFxcLiguKykpPyQvKSkmJnthcnJheTplLGluZGV4Ok51bWJlcihyWzFdKSxwcm9wZXJ0eTpyWzNdfHxcIlwifTp7YXJyYXk6ZSxpbmRleDpcIlwiLHByb3BlcnR5OlwiXCJ9fX0se1wiLi4vcmVnaXN0cnlcIjo4Mjl9XSw3MzI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vbGliXCIpLGk9bi5leHRlbmRGbGF0LGE9bi5pc1BsYWluT2JqZWN0LG89e3ZhbFR5cGU6XCJmbGFnbGlzdFwiLGV4dHJhczpbXCJub25lXCJdLGZsYWdzOltcImNhbGNcIixcImNsZWFyQXhpc1R5cGVzXCIsXCJwbG90XCIsXCJzdHlsZVwiLFwibWFya2VyU2l6ZVwiLFwiY29sb3JiYXJzXCJdfSxzPXt2YWxUeXBlOlwiZmxhZ2xpc3RcIixleHRyYXM6W1wibm9uZVwiXSxmbGFnczpbXCJjYWxjXCIsXCJwbG90XCIsXCJsZWdlbmRcIixcInRpY2tzXCIsXCJheHJhbmdlXCIsXCJsYXlvdXRzdHlsZVwiLFwibW9kZWJhclwiLFwiY2FtZXJhXCIsXCJhcnJheWRyYXdcIl19LGw9by5mbGFncy5zbGljZSgpLmNvbmNhdChbXCJmdWxsUmVwbG90XCJdKSxjPXMuZmxhZ3Muc2xpY2UoKS5jb25jYXQoXCJsYXlvdXRSZXBsb3RcIik7ZnVuY3Rpb24gdSh0KXtmb3IodmFyIGU9e30scj0wO3I8dC5sZW5ndGg7cisrKWVbdFtyXV09ITE7cmV0dXJuIGV9ZnVuY3Rpb24gaCh0LGUscil7dmFyIG49aSh7fSx0KTtmb3IodmFyIG8gaW4gbil7dmFyIHM9bltvXTthKHMpJiYobltvXT1mKHMsZSxyLG8pKX1yZXR1cm5cImZyb20tcm9vdFwiPT09ciYmKG4uZWRpdFR5cGU9ZSksbn1mdW5jdGlvbiBmKHQsZSxyLG4pe2lmKHQudmFsVHlwZSl7dmFyIGE9aSh7fSx0KTtpZihhLmVkaXRUeXBlPWUsQXJyYXkuaXNBcnJheSh0Lml0ZW1zKSl7YS5pdGVtcz1uZXcgQXJyYXkodC5pdGVtcy5sZW5ndGgpO2Zvcih2YXIgbz0wO288dC5pdGVtcy5sZW5ndGg7bysrKWEuaXRlbXNbb109Zih0Lml0ZW1zW29dLGUsXCJmcm9tLXJvb3RcIil9cmV0dXJuIGF9cmV0dXJuIGgodCxlLFwiX1wiPT09bi5jaGFyQXQoMCk/XCJuZXN0ZWRcIjpcImZyb20tcm9vdFwiKX1lLmV4cG9ydHM9e3RyYWNlczpvLGxheW91dDpzLHRyYWNlRmxhZ3M6ZnVuY3Rpb24oKXtyZXR1cm4gdShsKX0sbGF5b3V0RmxhZ3M6ZnVuY3Rpb24oKXtyZXR1cm4gdShjKX0sdXBkYXRlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5lZGl0VHlwZTtpZihyJiZcIm5vbmVcIiE9PXIpZm9yKHZhciBuPXIuc3BsaXQoXCIrXCIpLGk9MDtpPG4ubGVuZ3RoO2krKyl0W25baV1dPSEwfSxvdmVycmlkZUFsbDpofX0se1wiLi4vbGliXCI6NzAxfV0sNzMzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcImdsLW1hdDQvZnJvbVF1YXRcIiksYT10KFwiLi4vcmVnaXN0cnlcIiksbz10KFwiLi4vbGliXCIpLHM9dChcIi4uL3Bsb3RzL3Bsb3RzXCIpLGw9dChcIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiKSxjPXQoXCIuLi9jb21wb25lbnRzL2NvbG9yXCIpLHU9bC5jbGVhbklkLGg9bC5nZXRGcm9tVHJhY2UsZj1hLnRyYWNlSXM7ZnVuY3Rpb24gcCh0LGUpe3ZhciByPXRbZV0sbj1lLmNoYXJBdCgwKTtyJiZcInBhcGVyXCIhPT1yJiYodFtlXT11KHIsbikpfWZ1bmN0aW9uIGQodCl7ZnVuY3Rpb24gZShlLHIpe3ZhciBuPXRbZV0saT10LnRpdGxlJiZ0LnRpdGxlW3JdO24mJiFpJiYodC50aXRsZXx8KHQudGl0bGU9e30pLHQudGl0bGVbcl09dFtlXSxkZWxldGUgdFtlXSl9dCYmKFwic3RyaW5nXCIhPXR5cGVvZiB0LnRpdGxlJiZcIm51bWJlclwiIT10eXBlb2YgdC50aXRsZXx8KHQudGl0bGU9e3RleHQ6dC50aXRsZX0pLGUoXCJ0aXRsZWZvbnRcIixcImZvbnRcIiksZShcInRpdGxlcG9zaXRpb25cIixcInBvc2l0aW9uXCIpLGUoXCJ0aXRsZXNpZGVcIixcInNpZGVcIiksZShcInRpdGxlb2Zmc2V0XCIsXCJvZmZzZXRcIikpfWZ1bmN0aW9uIGcodCl7aWYoIW8uaXNQbGFpbk9iamVjdCh0KSlyZXR1cm4hMTt2YXIgZT10Lm5hbWU7cmV0dXJuIGRlbGV0ZSB0Lm5hbWUsZGVsZXRlIHQuc2hvd2xlZ2VuZCwoXCJzdHJpbmdcIj09dHlwZW9mIGV8fFwibnVtYmVyXCI9PXR5cGVvZiBlKSYmU3RyaW5nKGUpfWZ1bmN0aW9uIHYodCxlLHIsbil7aWYociYmIW4pcmV0dXJuIHQ7aWYobiYmIXIpcmV0dXJuIGU7aWYoIXQudHJpbSgpKXJldHVybiBlO2lmKCFlLnRyaW0oKSlyZXR1cm4gdDt2YXIgaSxhPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKTtmb3IoaT0wO2k8YSYmdC5jaGFyQXQoaSk9PT1lLmNoYXJBdChpKTtpKyspO3JldHVybiB0LnN1YnN0cigwLGkpLnRyaW0oKX1mdW5jdGlvbiBtKHQpe3ZhciBlPVwibWlkZGxlXCIscj1cImNlbnRlclwiO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiYoLTEhPT10LmluZGV4T2YoXCJ0b3BcIik/ZT1cInRvcFwiOi0xIT09dC5pbmRleE9mKFwiYm90dG9tXCIpJiYoZT1cImJvdHRvbVwiKSwtMSE9PXQuaW5kZXhPZihcImxlZnRcIik/cj1cImxlZnRcIjotMSE9PXQuaW5kZXhPZihcInJpZ2h0XCIpJiYocj1cInJpZ2h0XCIpKSxlK1wiIFwiK3J9ZnVuY3Rpb24geSh0LGUpe3JldHVybiBlIGluIHQmJlwib2JqZWN0XCI9PXR5cGVvZiB0W2VdJiYwPT09T2JqZWN0LmtleXModFtlXSkubGVuZ3RofXIuY2xlYXJQcm9taXNlUXVldWU9ZnVuY3Rpb24odCl7QXJyYXkuaXNBcnJheSh0Ll9wcm9taXNlcykmJnQuX3Byb21pc2VzLmxlbmd0aD4wJiZvLmxvZyhcIkNsZWFyaW5nIHByZXZpb3VzIHJlamVjdGVkIHByb21pc2VzIGZyb20gcXVldWUuXCIpLHQuX3Byb21pc2VzPVtdfSxyLmNsZWFuTGF5b3V0PWZ1bmN0aW9uKHQpe3ZhciBlLG47dHx8KHQ9e30pLHQueGF4aXMxJiYodC54YXhpc3x8KHQueGF4aXM9dC54YXhpczEpLGRlbGV0ZSB0LnhheGlzMSksdC55YXhpczEmJih0LnlheGlzfHwodC55YXhpcz10LnlheGlzMSksZGVsZXRlIHQueWF4aXMxKSx0LnNjZW5lMSYmKHQuc2NlbmV8fCh0LnNjZW5lPXQuc2NlbmUxKSxkZWxldGUgdC5zY2VuZTEpO3ZhciBhPShzLnN1YnBsb3RzUmVnaXN0cnkuY2FydGVzaWFufHx7fSkuYXR0clJlZ2V4LGw9KHMuc3VicGxvdHNSZWdpc3RyeS5wb2xhcnx8e30pLmF0dHJSZWdleCxoPShzLnN1YnBsb3RzUmVnaXN0cnkudGVybmFyeXx8e30pLmF0dHJSZWdleCxmPShzLnN1YnBsb3RzUmVnaXN0cnkuZ2wzZHx8e30pLmF0dHJSZWdleCxnPU9iamVjdC5rZXlzKHQpO2ZvcihlPTA7ZTxnLmxlbmd0aDtlKyspe3ZhciB2PWdbZV07aWYoYSYmYS50ZXN0KHYpKXt2YXIgbT10W3ZdO20uYW5jaG9yJiZcImZyZWVcIiE9PW0uYW5jaG9yJiYobS5hbmNob3I9dShtLmFuY2hvcikpLG0ub3ZlcmxheWluZyYmKG0ub3ZlcmxheWluZz11KG0ub3ZlcmxheWluZykpLG0udHlwZXx8KG0uaXNkYXRlP20udHlwZT1cImRhdGVcIjptLmlzbG9nP20udHlwZT1cImxvZ1wiOiExPT09bS5pc2RhdGUmJiExPT09bS5pc2xvZyYmKG0udHlwZT1cImxpbmVhclwiKSksXCJ3aXRoemVyb1wiIT09bS5hdXRvcmFuZ2UmJlwidG96ZXJvXCIhPT1tLmF1dG9yYW5nZXx8KG0uYXV0b3JhbmdlPSEwLG0ucmFuZ2Vtb2RlPVwidG96ZXJvXCIpLGRlbGV0ZSBtLmlzbG9nLGRlbGV0ZSBtLmlzZGF0ZSxkZWxldGUgbS5jYXRlZ29yaWVzLHkobSxcImRvbWFpblwiKSYmZGVsZXRlIG0uZG9tYWluLHZvaWQgMCE9PW0uYXV0b3RpY2smJih2b2lkIDA9PT1tLnRpY2ttb2RlJiYobS50aWNrbW9kZT1tLmF1dG90aWNrP1wiYXV0b1wiOlwibGluZWFyXCIpLGRlbGV0ZSBtLmF1dG90aWNrKSxkKG0pfWVsc2UgaWYobCYmbC50ZXN0KHYpKXtkKHRbdl0ucmFkaWFsYXhpcyl9ZWxzZSBpZihoJiZoLnRlc3Qodikpe3ZhciB4PXRbdl07ZCh4LmFheGlzKSxkKHguYmF4aXMpLGQoeC5jYXhpcyl9ZWxzZSBpZihmJiZmLnRlc3Qodikpe3ZhciBiPXRbdl0sXz1iLmNhbWVyYXBvc2l0aW9uO2lmKEFycmF5LmlzQXJyYXkoXykmJjQ9PT1fWzBdLmxlbmd0aCl7dmFyIHc9X1swXSxrPV9bMV0sQT1fWzJdLFQ9aShbXSx3KSxNPVtdO2ZvcihuPTA7bjwzOysrbilNW25dPWtbbl0rQSpUWzIrNCpuXTtiLmNhbWVyYT17ZXllOnt4Ok1bMF0seTpNWzFdLHo6TVsyXX0sY2VudGVyOnt4OmtbMF0seTprWzFdLHo6a1syXX0sdXA6e3g6MCx5OjAsejoxfX0sZGVsZXRlIGIuY2FtZXJhcG9zaXRpb259ZChiLnhheGlzKSxkKGIueWF4aXMpLGQoYi56YXhpcyl9fXZhciBTPUFycmF5LmlzQXJyYXkodC5hbm5vdGF0aW9ucyk/dC5hbm5vdGF0aW9ucy5sZW5ndGg6MDtmb3IoZT0wO2U8UztlKyspe3ZhciBFPXQuYW5ub3RhdGlvbnNbZV07by5pc1BsYWluT2JqZWN0KEUpJiYoRS5yZWYmJihcInBhcGVyXCI9PT1FLnJlZj8oRS54cmVmPVwicGFwZXJcIixFLnlyZWY9XCJwYXBlclwiKTpcImRhdGFcIj09PUUucmVmJiYoRS54cmVmPVwieFwiLEUueXJlZj1cInlcIiksZGVsZXRlIEUucmVmKSxwKEUsXCJ4cmVmXCIpLHAoRSxcInlyZWZcIikpfXZhciBDPUFycmF5LmlzQXJyYXkodC5zaGFwZXMpP3Quc2hhcGVzLmxlbmd0aDowO2ZvcihlPTA7ZTxDO2UrKyl7dmFyIEw9dC5zaGFwZXNbZV07by5pc1BsYWluT2JqZWN0KEwpJiYocChMLFwieHJlZlwiKSxwKEwsXCJ5cmVmXCIpKX12YXIgej10LmxlZ2VuZDtyZXR1cm4geiYmKHoueD4zPyh6Lng9MS4wMix6LnhhbmNob3I9XCJsZWZ0XCIpOnoueDwtMiYmKHoueD0tLjAyLHoueGFuY2hvcj1cInJpZ2h0XCIpLHoueT4zPyh6Lnk9MS4wMix6LnlhbmNob3I9XCJib3R0b21cIik6ei55PC0yJiYoei55PS0uMDIsei55YW5jaG9yPVwidG9wXCIpKSxkKHQpLFwicm90YXRlXCI9PT10LmRyYWdtb2RlJiYodC5kcmFnbW9kZT1cIm9yYml0XCIpLGMuY2xlYW4odCksdC50ZW1wbGF0ZSYmdC50ZW1wbGF0ZS5sYXlvdXQmJnIuY2xlYW5MYXlvdXQodC50ZW1wbGF0ZS5sYXlvdXQpLHR9LHIuY2xlYW5EYXRhPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgbixpPXRbZV07aWYoXCJoaXN0b2dyYW15XCI9PT1pLnR5cGUmJlwieGJpbnNcImluIGkmJiEoXCJ5Ymluc1wiaW4gaSkmJihpLnliaW5zPWkueGJpbnMsZGVsZXRlIGkueGJpbnMpLGkuZXJyb3JfeSYmXCJvcGFjaXR5XCJpbiBpLmVycm9yX3kpe3ZhciBsPWMuZGVmYXVsdHMsaD1pLmVycm9yX3kuY29sb3J8fChmKGksXCJiYXJcIik/Yy5kZWZhdWx0TGluZTpsW2UlbC5sZW5ndGhdKTtpLmVycm9yX3kuY29sb3I9Yy5hZGRPcGFjaXR5KGMucmdiKGgpLGMub3BhY2l0eShoKSppLmVycm9yX3kub3BhY2l0eSksZGVsZXRlIGkuZXJyb3JfeS5vcGFjaXR5fWlmKFwiYmFyZGlyXCJpbiBpJiYoXCJoXCIhPT1pLmJhcmRpcnx8IWYoaSxcImJhclwiKSYmXCJoaXN0b2dyYW1cIiE9PWkudHlwZS5zdWJzdHIoMCw5KXx8KGkub3JpZW50YXRpb249XCJoXCIsci5zd2FwWFlEYXRhKGkpKSxkZWxldGUgaS5iYXJkaXIpLFwiaGlzdG9ncmFteVwiPT09aS50eXBlJiZyLnN3YXBYWURhdGEoaSksXCJoaXN0b2dyYW14XCIhPT1pLnR5cGUmJlwiaGlzdG9ncmFteVwiIT09aS50eXBlfHwoaS50eXBlPVwiaGlzdG9ncmFtXCIpLFwic2NsXCJpbiBpJiYhKFwiY29sb3JzY2FsZVwiaW4gaSkmJihpLmNvbG9yc2NhbGU9aS5zY2wsZGVsZXRlIGkuc2NsKSxcInJldmVyc2VzY2xcImluIGkmJiEoXCJyZXZlcnNlc2NhbGVcImluIGkpJiYoaS5yZXZlcnNlc2NhbGU9aS5yZXZlcnNlc2NsLGRlbGV0ZSBpLnJldmVyc2VzY2wpLGkueGF4aXMmJihpLnhheGlzPXUoaS54YXhpcyxcInhcIikpLGkueWF4aXMmJihpLnlheGlzPXUoaS55YXhpcyxcInlcIikpLGYoaSxcImdsM2RcIikmJmkuc2NlbmUmJihpLnNjZW5lPXMuc3VicGxvdHNSZWdpc3RyeS5nbDNkLmNsZWFuSWQoaS5zY2VuZSkpLCFmKGksXCJwaWVcIikmJiFmKGksXCJiYXJcIikmJlwid2F0ZXJmYWxsXCIhPT1pLnR5cGUpaWYoQXJyYXkuaXNBcnJheShpLnRleHRwb3NpdGlvbikpZm9yKG49MDtuPGkudGV4dHBvc2l0aW9uLmxlbmd0aDtuKyspaS50ZXh0cG9zaXRpb25bbl09bShpLnRleHRwb3NpdGlvbltuXSk7ZWxzZSBpLnRleHRwb3NpdGlvbiYmKGkudGV4dHBvc2l0aW9uPW0oaS50ZXh0cG9zaXRpb24pKTt2YXIgcD1hLmdldE1vZHVsZShpKTtpZihwJiZwLmNvbG9yYmFyKXt2YXIgeD1wLmNvbG9yYmFyLmNvbnRhaW5lcixiPXg/aVt4XTppO2ImJmIuY29sb3JzY2FsZSYmKFwiWUlHbkJ1XCI9PT1iLmNvbG9yc2NhbGUmJihiLmNvbG9yc2NhbGU9XCJZbEduQnVcIiksXCJZSU9yUmRcIj09PWIuY29sb3JzY2FsZSYmKGIuY29sb3JzY2FsZT1cIllsT3JSZFwiKSl9aWYoXCJzdXJmYWNlXCI9PT1pLnR5cGUmJm8uaXNQbGFpbk9iamVjdChpLmNvbnRvdXJzKSl7dmFyIF89W1wieFwiLFwieVwiLFwielwiXTtmb3Iobj0wO248Xy5sZW5ndGg7bisrKXt2YXIgdz1pLmNvbnRvdXJzW19bbl1dO28uaXNQbGFpbk9iamVjdCh3KSYmKHcuaGlnaGxpZ2h0Q29sb3ImJih3LmhpZ2hsaWdodGNvbG9yPXcuaGlnaGxpZ2h0Q29sb3IsZGVsZXRlIHcuaGlnaGxpZ2h0Q29sb3IpLHcuaGlnaGxpZ2h0V2lkdGgmJih3LmhpZ2hsaWdodHdpZHRoPXcuaGlnaGxpZ2h0V2lkdGgsZGVsZXRlIHcuaGlnaGxpZ2h0V2lkdGgpKX19aWYoXCJjYW5kbGVzdGlja1wiPT09aS50eXBlfHxcIm9obGNcIj09PWkudHlwZSl7dmFyIGs9ITEhPT0oaS5pbmNyZWFzaW5nfHx7fSkuc2hvd2xlZ2VuZCxBPSExIT09KGkuZGVjcmVhc2luZ3x8e30pLnNob3dsZWdlbmQsVD1nKGkuaW5jcmVhc2luZyksTT1nKGkuZGVjcmVhc2luZyk7aWYoITEhPT1UJiYhMSE9PU0pe3ZhciBTPXYoVCxNLGssQSk7UyYmKGkubmFtZT1TKX1lbHNlIVQmJiFNfHxpLm5hbWV8fChpLm5hbWU9VHx8TSl9aWYoQXJyYXkuaXNBcnJheShpLnRyYW5zZm9ybXMpKXt2YXIgRT1pLnRyYW5zZm9ybXM7Zm9yKG49MDtuPEUubGVuZ3RoO24rKyl7dmFyIEM9RVtuXTtpZihvLmlzUGxhaW5PYmplY3QoQykpc3dpdGNoKEMudHlwZSl7Y2FzZVwiZmlsdGVyXCI6Qy5maWx0ZXJzcmMmJihDLnRhcmdldD1DLmZpbHRlcnNyYyxkZWxldGUgQy5maWx0ZXJzcmMpLEMuY2FsZW5kYXImJihDLnZhbHVlY2FsZW5kYXJ8fChDLnZhbHVlY2FsZW5kYXI9Qy5jYWxlbmRhciksZGVsZXRlIEMuY2FsZW5kYXIpO2JyZWFrO2Nhc2VcImdyb3VwYnlcIjppZihDLnN0eWxlcz1DLnN0eWxlc3x8Qy5zdHlsZSxDLnN0eWxlcyYmIUFycmF5LmlzQXJyYXkoQy5zdHlsZXMpKXt2YXIgTD1DLnN0eWxlcyx6PU9iamVjdC5rZXlzKEwpO0Muc3R5bGVzPVtdO2Zvcih2YXIgTz0wO088ei5sZW5ndGg7TysrKUMuc3R5bGVzLnB1c2goe3RhcmdldDp6W09dLHZhbHVlOkxbeltPXV19KX19fX15KGksXCJsaW5lXCIpJiZkZWxldGUgaS5saW5lLFwibWFya2VyXCJpbiBpJiYoeShpLm1hcmtlcixcImxpbmVcIikmJmRlbGV0ZSBpLm1hcmtlci5saW5lLHkoaSxcIm1hcmtlclwiKSYmZGVsZXRlIGkubWFya2VyKSxjLmNsZWFuKGkpLGkuYXV0b2JpbngmJihkZWxldGUgaS5hdXRvYmlueCxkZWxldGUgaS54YmlucyksaS5hdXRvYmlueSYmKGRlbGV0ZSBpLmF1dG9iaW55LGRlbGV0ZSBpLnliaW5zKSxkKGkpLGkuY29sb3JiYXImJmQoaS5jb2xvcmJhciksaS5tYXJrZXImJmkubWFya2VyLmNvbG9yYmFyJiZkKGkubWFya2VyLmNvbG9yYmFyKSxpLmxpbmUmJmkubGluZS5jb2xvcmJhciYmZChpLmxpbmUuY29sb3JiYXIpLGkuYWF4aXMmJmQoaS5hYXhpcyksaS5iYXhpcyYmZChpLmJheGlzKX19LHIuc3dhcFhZRGF0YT1mdW5jdGlvbih0KXt2YXIgZTtpZihvLnN3YXBBdHRycyh0LFtcIj9cIixcIj8wXCIsXCJkP1wiLFwiP2JpbnNcIixcIm5iaW5zP1wiLFwiYXV0b2Jpbj9cIixcIj9zcmNcIixcImVycm9yXz9cIl0pLEFycmF5LmlzQXJyYXkodC56KSYmQXJyYXkuaXNBcnJheSh0LnpbMF0pJiYodC50cmFuc3Bvc2U/ZGVsZXRlIHQudHJhbnNwb3NlOnQudHJhbnNwb3NlPSEwKSx0LmVycm9yX3gmJnQuZXJyb3JfeSl7dmFyIHI9dC5lcnJvcl95LG49XCJjb3B5X3lzdHlsZVwiaW4gcj9yLmNvcHlfeXN0eWxlOiEoci5jb2xvcnx8ci50aGlja25lc3N8fHIud2lkdGgpO28uc3dhcEF0dHJzKHQsW1wiZXJyb3JfPy5jb3B5X3lzdHlsZVwiXSksbiYmby5zd2FwQXR0cnModCxbXCJlcnJvcl8/LmNvbG9yXCIsXCJlcnJvcl8/LnRoaWNrbmVzc1wiLFwiZXJyb3JfPy53aWR0aFwiXSl9aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQuaG92ZXJpbmZvKXt2YXIgaT10LmhvdmVyaW5mby5zcGxpdChcIitcIik7Zm9yKGU9MDtlPGkubGVuZ3RoO2UrKylcInhcIj09PWlbZV0/aVtlXT1cInlcIjpcInlcIj09PWlbZV0mJihpW2VdPVwieFwiKTt0LmhvdmVyaW5mbz1pLmpvaW4oXCIrXCIpfX0sci5jb2VyY2VUcmFjZUluZGljZXM9ZnVuY3Rpb24odCxlKXtpZihuKGUpKXJldHVybltlXTtpZighQXJyYXkuaXNBcnJheShlKXx8IWUubGVuZ3RoKXJldHVybiB0LmRhdGEubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KTtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHI9W10saT0wO2k8ZS5sZW5ndGg7aSsrKW8uaXNJbmRleChlW2ldLHQuZGF0YS5sZW5ndGgpP3IucHVzaChlW2ldKTpvLndhcm4oXCJ0cmFjZSBpbmRleCAoXCIsZVtpXSxcIikgaXMgbm90IGEgbnVtYmVyIG9yIGlzIG91dCBvZiBib3VuZHNcIik7cmV0dXJuIHJ9cmV0dXJuIGV9LHIubWFuYWdlQXJyYXlDb250YWluZXJzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10Lm9iaixhPXQucGFydHMscz1hLmxlbmd0aCxsPWFbcy0xXSxjPW4obCk7aWYoYyYmbnVsbD09PWUpe3ZhciB1PWEuc2xpY2UoMCxzLTEpLmpvaW4oXCIuXCIpO28ubmVzdGVkUHJvcGVydHkoaSx1KS5nZXQoKS5zcGxpY2UobCwxKX1lbHNlIGMmJnZvaWQgMD09PXQuZ2V0KCk/KHZvaWQgMD09PXQuZ2V0KCkmJihyW3QuYXN0cl09bnVsbCksdC5zZXQoZSkpOnQuc2V0KGUpfTt2YXIgeD0vKFxcLlteXFxbXFxdXFwuXSt8XFxbW15cXFtcXF1cXC5dK1xcXSkkLztmdW5jdGlvbiBiKHQpe3ZhciBlPXQuc2VhcmNoKHgpO2lmKGU+MClyZXR1cm4gdC5zdWJzdHIoMCxlKX1yLmhhc1BhcmVudD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1iKGUpO3I7KXtpZihyIGluIHQpcmV0dXJuITA7cj1iKHIpfXJldHVybiExfTt2YXIgXz1bXCJ4XCIsXCJ5XCIsXCJ6XCJdO3IuY2xlYXJBeGlzVHlwZXM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWZvcih2YXIgaT10Ll9mdWxsRGF0YVtuXSxhPTA7YTwzO2ErKyl7dmFyIHM9aCh0LGksX1thXSk7aWYocyYmXCJsb2dcIiE9PXMudHlwZSl7dmFyIGw9cy5fbmFtZSxjPXMuX2lkLnN1YnN0cigxKTtpZihcInNjZW5lXCI9PT1jLnN1YnN0cigwLDUpKXtpZih2b2lkIDAhPT1yW2NdKWNvbnRpbnVlO2w9YytcIi5cIitsfXZhciB1PWwrXCIudHlwZVwiO3ZvaWQgMD09PXJbbF0mJnZvaWQgMD09PXJbdV0mJm8ubmVzdGVkUHJvcGVydHkodC5sYXlvdXQsdSkuc2V0KG51bGwpfX19fSx7XCIuLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vbGliXCI6NzAxLFwiLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCI6NzUyLFwiLi4vcGxvdHMvcGxvdHNcIjo4MTAsXCIuLi9yZWdpc3RyeVwiOjgyOSxcImZhc3QtaXNudW1lcmljXCI6MjIyLFwiZ2wtbWF0NC9mcm9tUXVhdFwiOjI1OX1dLDczNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL3Bsb3RfYXBpXCIpO3IucGxvdD1uLnBsb3Qsci5uZXdQbG90PW4ubmV3UGxvdCxyLnJlc3R5bGU9bi5yZXN0eWxlLHIucmVsYXlvdXQ9bi5yZWxheW91dCxyLnJlZHJhdz1uLnJlZHJhdyxyLnVwZGF0ZT1uLnVwZGF0ZSxyLl9ndWlSZXN0eWxlPW4uX2d1aVJlc3R5bGUsci5fZ3VpUmVsYXlvdXQ9bi5fZ3VpUmVsYXlvdXQsci5fZ3VpVXBkYXRlPW4uX2d1aVVwZGF0ZSxyLl9zdG9yZURpcmVjdEdVSUVkaXQ9bi5fc3RvcmVEaXJlY3RHVUlFZGl0LHIucmVhY3Q9bi5yZWFjdCxyLmV4dGVuZFRyYWNlcz1uLmV4dGVuZFRyYWNlcyxyLnByZXBlbmRUcmFjZXM9bi5wcmVwZW5kVHJhY2VzLHIuYWRkVHJhY2VzPW4uYWRkVHJhY2VzLHIuZGVsZXRlVHJhY2VzPW4uZGVsZXRlVHJhY2VzLHIubW92ZVRyYWNlcz1uLm1vdmVUcmFjZXMsci5wdXJnZT1uLnB1cmdlLHIuYWRkRnJhbWVzPW4uYWRkRnJhbWVzLHIuZGVsZXRlRnJhbWVzPW4uZGVsZXRlRnJhbWVzLHIuYW5pbWF0ZT1uLmFuaW1hdGUsci5zZXRQbG90Q29uZmlnPW4uc2V0UGxvdENvbmZpZyxyLnRvSW1hZ2U9dChcIi4vdG9faW1hZ2VcIiksci52YWxpZGF0ZT10KFwiLi92YWxpZGF0ZVwiKSxyLmRvd25sb2FkSW1hZ2U9dChcIi4uL3NuYXBzaG90L2Rvd25sb2FkXCIpO3ZhciBpPXQoXCIuL3RlbXBsYXRlX2FwaVwiKTtyLm1ha2VUZW1wbGF0ZT1pLm1ha2VUZW1wbGF0ZSxyLnZhbGlkYXRlVGVtcGxhdGU9aS52YWxpZGF0ZVRlbXBsYXRlfSx7XCIuLi9zbmFwc2hvdC9kb3dubG9hZFwiOjgzMSxcIi4vcGxvdF9hcGlcIjo3MzYsXCIuL3RlbXBsYXRlX2FwaVwiOjc0MSxcIi4vdG9faW1hZ2VcIjo3NDIsXCIuL3ZhbGlkYXRlXCI6NzQzfV0sNzM1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2xpYi9pc19wbGFpbl9vYmplY3RcIiksaT10KFwiLi4vbGliL25vb3BcIiksYT10KFwiLi4vbGliL2xvZ2dlcnNcIiksbz10KFwiLi4vbGliL3NlYXJjaFwiKS5zb3J0ZXJBc2Mscz10KFwiLi4vcmVnaXN0cnlcIik7ci5jb250YWluZXJBcnJheU1hdGNoPXQoXCIuL2NvbnRhaW5lcl9hcnJheV9tYXRjaFwiKTt2YXIgbD1yLmlzQWRkVmFsPWZ1bmN0aW9uKHQpe3JldHVyblwiYWRkXCI9PT10fHxuKHQpfSxjPXIuaXNSZW1vdmVWYWw9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10fHxcInJlbW92ZVwiPT09dH07ci5hcHBseUNvbnRhaW5lckFycmF5Q2hhbmdlcz1mdW5jdGlvbih0LGUscixuLHUpe3ZhciBoPWUuYXN0cixmPXMuZ2V0Q29tcG9uZW50TWV0aG9kKGgsXCJzdXBwbHlMYXlvdXREZWZhdWx0c1wiKSxwPXMuZ2V0Q29tcG9uZW50TWV0aG9kKGgsXCJkcmF3XCIpLGQ9cy5nZXRDb21wb25lbnRNZXRob2QoaCxcImRyYXdPbmVcIiksZz1uLnJlcGxvdHx8bi5yZWNhbGN8fGY9PT1pfHxwPT09aSx2PXQubGF5b3V0LG09dC5fZnVsbExheW91dDtpZihyW1wiXCJdKXtPYmplY3Qua2V5cyhyKS5sZW5ndGg+MSYmYS53YXJuKFwiRnVsbCBhcnJheSBlZGl0cyBhcmUgaW5jb21wYXRpYmxlIHdpdGggb3RoZXIgZWRpdHNcIixoKTt2YXIgeT1yW1wiXCJdW1wiXCJdO2lmKGMoeSkpZS5zZXQobnVsbCk7ZWxzZXtpZighQXJyYXkuaXNBcnJheSh5KSlyZXR1cm4gYS53YXJuKFwiVW5yZWNvZ25pemVkIGZ1bGwgYXJyYXkgZWRpdCB2YWx1ZVwiLGgseSksITA7ZS5zZXQoeSl9cmV0dXJuIWcmJihmKHYsbSkscCh0KSwhMCl9dmFyIHgsYixfLHcsayxBLFQsTSxTPU9iamVjdC5rZXlzKHIpLm1hcChOdW1iZXIpLnNvcnQobyksRT1lLmdldCgpLEM9RXx8W10sTD11KG0saCkuZ2V0KCksej1bXSxPPS0xLEk9Qy5sZW5ndGg7Zm9yKHg9MDt4PFMubGVuZ3RoO3grKylpZih3PXJbXz1TW3hdXSxrPU9iamVjdC5rZXlzKHcpLEE9d1tcIlwiXSxUPWwoQSksXzwwfHxfPkMubGVuZ3RoLShUPzA6MSkpYS53YXJuKFwiaW5kZXggb3V0IG9mIHJhbmdlXCIsaCxfKTtlbHNlIGlmKHZvaWQgMCE9PUEpay5sZW5ndGg+MSYmYS53YXJuKFwiSW5zZXJ0aW9uICYgcmVtb3ZhbCBhcmUgaW5jb21wYXRpYmxlIHdpdGggZWRpdHMgdG8gdGhlIHNhbWUgaW5kZXguXCIsaCxfKSxjKEEpP3oucHVzaChfKTpUPyhcImFkZFwiPT09QSYmKEE9e30pLEMuc3BsaWNlKF8sMCxBKSxMJiZMLnNwbGljZShfLDAse30pKTphLndhcm4oXCJVbnJlY29nbml6ZWQgZnVsbCBvYmplY3QgZWRpdCB2YWx1ZVwiLGgsXyxBKSwtMT09PU8mJihPPV8pO2Vsc2UgZm9yKGI9MDtiPGsubGVuZ3RoO2IrKylNPWgrXCJbXCIrXytcIl0uXCIsdShDW19dLGtbYl0sTSkuc2V0KHdba1tiXV0pO2Zvcih4PXoubGVuZ3RoLTE7eD49MDt4LS0pQy5zcGxpY2Uoelt4XSwxKSxMJiZMLnNwbGljZSh6W3hdLDEpO2lmKEMubGVuZ3RoP0V8fGUuc2V0KEMpOmUuc2V0KG51bGwpLGcpcmV0dXJuITE7aWYoZih2LG0pLGQhPT1pKXt2YXIgRDtpZigtMT09PU8pRD1TO2Vsc2V7Zm9yKEk9TWF0aC5tYXgoQy5sZW5ndGgsSSksRD1bXSx4PTA7eDxTLmxlbmd0aCYmISgoXz1TW3hdKT49Tyk7eCsrKUQucHVzaChfKTtmb3IoeD1PO3g8STt4KyspRC5wdXNoKHgpfWZvcih4PTA7eDxELmxlbmd0aDt4KyspZCh0LERbeF0pfWVsc2UgcCh0KTtyZXR1cm4hMH19LHtcIi4uL2xpYi9pc19wbGFpbl9vYmplY3RcIjo3MDIsXCIuLi9saWIvbG9nZ2Vyc1wiOjcwNSxcIi4uL2xpYi9ub29wXCI6NzEwLFwiLi4vbGliL3NlYXJjaFwiOjcyMCxcIi4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9jb250YWluZXJfYXJyYXlfbWF0Y2hcIjo3MzF9XSw3MzY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiZmFzdC1pc251bWVyaWNcIiksYT10KFwiaGFzLWhvdmVyXCIpLG89dChcIi4uL2xpYlwiKSxzPW8ubmVzdGVkUHJvcGVydHksbD10KFwiLi4vbGliL2V2ZW50c1wiKSxjPXQoXCIuLi9saWIvcXVldWVcIiksdT10KFwiLi4vcmVnaXN0cnlcIiksaD10KFwiLi9wbG90X3NjaGVtYVwiKSxmPXQoXCIuLi9wbG90cy9wbG90c1wiKSxwPXQoXCIuLi9wbG90cy9wb2xhci9sZWdhY3lcIiksZD10KFwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksZz10KFwiLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLHY9dChcIi4uL2NvbXBvbmVudHMvY29sb3JcIiksbT10KFwiLi4vY29tcG9uZW50cy9jb2xvcmJhci9jb25uZWN0XCIpLHk9dChcIi4uL3Bsb3RzL2NhcnRlc2lhbi9ncmFwaF9pbnRlcmFjdFwiKS5pbml0SW50ZXJhY3Rpb25zLHg9dChcIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzXCIpLGI9dChcIi4uL2xpYi9zdmdfdGV4dF91dGlsc1wiKSxfPXQoXCIuLi9wbG90cy9jYXJ0ZXNpYW4vc2VsZWN0XCIpLmNsZWFyU2VsZWN0LHc9dChcIi4vcGxvdF9jb25maWdcIikuZGZsdENvbmZpZyxrPXQoXCIuL21hbmFnZV9hcnJheXNcIiksQT10KFwiLi9oZWxwZXJzXCIpLFQ9dChcIi4vc3Vicm91dGluZXNcIiksTT10KFwiLi9lZGl0X3R5cGVzXCIpLFM9dChcIi4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHNcIikuQVhfTkFNRV9QQVRURVJOLEU9MDtmdW5jdGlvbiBDKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7ZS5fcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudD9lLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50LS06dC5lbWl0KFwicGxvdGx5X2FmdGVycGxvdFwiKX1mdW5jdGlvbiBMKHQsZSl7dHJ5e3QuX2Z1bGxMYXlvdXQuX3BhcGVyLnN0eWxlKFwiYmFja2dyb3VuZFwiLGUpfWNhdGNoKHQpe28uZXJyb3IodCl9fWZ1bmN0aW9uIHoodCxlKXtMKHQsdi5jb21iaW5lKGUsXCJ3aGl0ZVwiKSl9ZnVuY3Rpb24gTyh0LGUpe2lmKCF0Ll9jb250ZXh0KXt0Ll9jb250ZXh0PW8uZXh0ZW5kRGVlcCh7fSx3KTt2YXIgcj1uLnNlbGVjdChcImJhc2VcIik7dC5fY29udGV4dC5fYmFzZVVybD1yLnNpemUoKSYmci5hdHRyKFwiaHJlZlwiKT93aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdChcIiNcIilbMF06XCJcIn12YXIgaSxzLGwsYz10Ll9jb250ZXh0O2lmKGUpe2ZvcihzPU9iamVjdC5rZXlzKGUpLGk9MDtpPHMubGVuZ3RoO2krKylcImVkaXRhYmxlXCIhPT0obD1zW2ldKSYmXCJlZGl0c1wiIT09bCYmbCBpbiBjJiYoXCJzZXRCYWNrZ3JvdW5kXCI9PT1sJiZcIm9wYXF1ZVwiPT09ZVtsXT9jW2xdPXo6Y1tsXT1lW2xdKTtlLnBsb3QzZFBpeGVsUmF0aW8mJiFjLnBsb3RHbFBpeGVsUmF0aW8mJihjLnBsb3RHbFBpeGVsUmF0aW89Yy5wbG90M2RQaXhlbFJhdGlvKTt2YXIgdT1lLmVkaXRhYmxlO2lmKHZvaWQgMCE9PXUpZm9yKGMuZWRpdGFibGU9dSxzPU9iamVjdC5rZXlzKGMuZWRpdHMpLGk9MDtpPHMubGVuZ3RoO2krKyljLmVkaXRzW3NbaV1dPXU7aWYoZS5lZGl0cylmb3Iocz1PYmplY3Qua2V5cyhlLmVkaXRzKSxpPTA7aTxzLmxlbmd0aDtpKyspKGw9c1tpXSlpbiBjLmVkaXRzJiYoYy5lZGl0c1tsXT1lLmVkaXRzW2xdKTtjLl9leHBvcnRlZFBsb3Q9ZS5fZXhwb3J0ZWRQbG90fWMuc3RhdGljUGxvdCYmKGMuZWRpdGFibGU9ITEsYy5lZGl0cz17fSxjLmF1dG9zaXphYmxlPSExLGMuc2Nyb2xsWm9vbT0hMSxjLmRvdWJsZUNsaWNrPSExLGMuc2hvd1RpcHM9ITEsYy5zaG93TGluaz0hMSxjLmRpc3BsYXlNb2RlQmFyPSExKSxcImhvdmVyXCIhPT1jLmRpc3BsYXlNb2RlQmFyfHxhfHwoYy5kaXNwbGF5TW9kZUJhcj0hMCksXCJ0cmFuc3BhcmVudFwiIT09Yy5zZXRCYWNrZ3JvdW5kJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBjLnNldEJhY2tncm91bmR8fChjLnNldEJhY2tncm91bmQ9TCksYy5faGFzWmVyb0hlaWdodD1jLl9oYXNaZXJvSGVpZ2h0fHwwPT09dC5jbGllbnRIZWlnaHQsYy5faGFzWmVyb1dpZHRoPWMuX2hhc1plcm9XaWR0aHx8MD09PXQuY2xpZW50V2lkdGg7dmFyIGg9Yy5zY3JvbGxab29tLGY9Yy5fc2Nyb2xsWm9vbT17fTtpZighMD09PWgpZi5jYXJ0ZXNpYW49MSxmLmdsM2Q9MSxmLmdlbz0xLGYubWFwYm94PTE7ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgaCl7dmFyIHA9aC5zcGxpdChcIitcIik7Zm9yKGk9MDtpPHAubGVuZ3RoO2krKylmW3BbaV1dPTF9ZWxzZSExIT09aCYmKGYuZ2wzZD0xLGYuZ2VvPTEsZi5tYXBib3g9MSl9ZnVuY3Rpb24gSSh0LGUpe3ZhciByLG4saT1lKzEsYT1bXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKShuPXRbcl0pPDA/YS5wdXNoKGkrbik6YS5wdXNoKG4pO3JldHVybiBhfWZ1bmN0aW9uIEQodCxlLHIpe3ZhciBuLGk7Zm9yKG49MDtuPGUubGVuZ3RoO24rKyl7aWYoKGk9ZVtuXSkhPT1wYXJzZUludChpLDEwKSl0aHJvdyBuZXcgRXJyb3IoXCJhbGwgdmFsdWVzIGluIFwiK3IrXCIgbXVzdCBiZSBpbnRlZ2Vyc1wiKTtpZihpPj10LmRhdGEubGVuZ3RofHxpPC10LmRhdGEubGVuZ3RoKXRocm93IG5ldyBFcnJvcihyK1wiIG11c3QgYmUgdmFsaWQgaW5kaWNlcyBmb3IgZ2QuZGF0YS5cIik7aWYoZS5pbmRleE9mKGksbisxKT4tMXx8aT49MCYmZS5pbmRleE9mKC10LmRhdGEubGVuZ3RoK2kpPi0xfHxpPDAmJmUuaW5kZXhPZih0LmRhdGEubGVuZ3RoK2kpPi0xKXRocm93IG5ldyBFcnJvcihcImVhY2ggaW5kZXggaW4gXCIrcitcIiBtdXN0IGJlIHVuaXF1ZS5cIil9fWZ1bmN0aW9uIFAodCxlLHIpe2lmKCFBcnJheS5pc0FycmF5KHQuZGF0YSkpdGhyb3cgbmV3IEVycm9yKFwiZ2QuZGF0YSBtdXN0IGJlIGFuIGFycmF5LlwiKTtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoXCJjdXJyZW50SW5kaWNlcyBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LlwiKTtpZihBcnJheS5pc0FycmF5KGUpfHwoZT1bZV0pLEQodCxlLFwiY3VycmVudEluZGljZXNcIiksXCJ1bmRlZmluZWRcIj09dHlwZW9mIHJ8fEFycmF5LmlzQXJyYXkocil8fChyPVtyXSksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHImJkQodCxyLFwibmV3SW5kaWNlc1wiKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgciYmZS5sZW5ndGghPT1yLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJjdXJyZW50IGFuZCBuZXcgaW5kaWNlcyBtdXN0IGJlIG9mIGVxdWFsIGxlbmd0aC5cIil9ZnVuY3Rpb24gUih0LGUscixuLGEpeyFmdW5jdGlvbih0LGUscixuKXt2YXIgaT1vLmlzUGxhaW5PYmplY3Qobik7aWYoIUFycmF5LmlzQXJyYXkodC5kYXRhKSl0aHJvdyBuZXcgRXJyb3IoXCJnZC5kYXRhIG11c3QgYmUgYW4gYXJyYXlcIik7aWYoIW8uaXNQbGFpbk9iamVjdChlKSl0aHJvdyBuZXcgRXJyb3IoXCJ1cGRhdGUgbXVzdCBiZSBhIGtleTp2YWx1ZSBvYmplY3RcIik7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIHIpdGhyb3cgbmV3IEVycm9yKFwiaW5kaWNlcyBtdXN0IGJlIGFuIGludGVnZXIgb3IgYXJyYXkgb2YgaW50ZWdlcnNcIik7Zm9yKHZhciBhIGluIEQodCxyLFwiaW5kaWNlc1wiKSxlKXtpZighQXJyYXkuaXNBcnJheShlW2FdKXx8ZVthXS5sZW5ndGghPT1yLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJhdHRyaWJ1dGUgXCIrYStcIiBtdXN0IGJlIGFuIGFycmF5IG9mIGxlbmd0aCBlcXVhbCB0byBpbmRpY2VzIGFycmF5IGxlbmd0aFwiKTtpZihpJiYoIShhIGluIG4pfHwhQXJyYXkuaXNBcnJheShuW2FdKXx8blthXS5sZW5ndGghPT1lW2FdLmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKFwid2hlbiBtYXhQb2ludHMgaXMgc2V0IGFzIGEga2V5OnZhbHVlIG9iamVjdCBpdCBtdXN0IGNvbnRhaW4gYSAxOjEgY29ycmlzcG9uZGVuY2Ugd2l0aCB0aGUga2V5cyBhbmQgbnVtYmVyIG9mIHRyYWNlcyBpbiB0aGUgdXBkYXRlIG9iamVjdFwiKX19KHQsZSxyLG4pO2Zvcih2YXIgbD1mdW5jdGlvbih0LGUscixuKXt2YXIgYSxsLGMsdSxoLGY9by5pc1BsYWluT2JqZWN0KG4pLHA9W107Zm9yKHZhciBkIGluIEFycmF5LmlzQXJyYXkocil8fChyPVtyXSkscj1JKHIsdC5kYXRhLmxlbmd0aC0xKSxlKWZvcih2YXIgZz0wO2c8ci5sZW5ndGg7ZysrKXtpZihhPXQuZGF0YVtyW2ddXSxsPShjPXMoYSxkKSkuZ2V0KCksdT1lW2RdW2ddLCFvLmlzQXJyYXlPclR5cGVkQXJyYXkodSkpdGhyb3cgbmV3IEVycm9yKFwiYXR0cmlidXRlOiBcIitkK1wiIGluZGV4OiBcIitnK1wiIG11c3QgYmUgYW4gYXJyYXlcIik7aWYoIW8uaXNBcnJheU9yVHlwZWRBcnJheShsKSl0aHJvdyBuZXcgRXJyb3IoXCJjYW5ub3QgZXh0ZW5kIG1pc3Npbmcgb3Igbm9uLWFycmF5IGF0dHJpYnV0ZTogXCIrZCk7aWYobC5jb25zdHJ1Y3RvciE9PXUuY29uc3RydWN0b3IpdGhyb3cgbmV3IEVycm9yKFwiY2Fubm90IGV4dGVuZCBhcnJheSB3aXRoIGFuIGFycmF5IG9mIGEgZGlmZmVyZW50IHR5cGU6IFwiK2QpO2g9Zj9uW2RdW2ddOm4saShoKXx8KGg9LTEpLHAucHVzaCh7cHJvcDpjLHRhcmdldDpsLGluc2VydDp1LG1heHA6TWF0aC5mbG9vcihoKX0pfXJldHVybiBwfSh0LGUscixuKSxjPXt9LHU9e30saD0wO2g8bC5sZW5ndGg7aCsrKXt2YXIgZj1sW2hdLnByb3AscD1sW2hdLm1heHAsZD1hKGxbaF0udGFyZ2V0LGxbaF0uaW5zZXJ0LHApO2Yuc2V0KGRbMF0pLEFycmF5LmlzQXJyYXkoY1tmLmFzdHJdKXx8KGNbZi5hc3RyXT1bXSksY1tmLmFzdHJdLnB1c2goZFsxXSksQXJyYXkuaXNBcnJheSh1W2YuYXN0cl0pfHwodVtmLmFzdHJdPVtdKSx1W2YuYXN0cl0ucHVzaChsW2hdLnRhcmdldC5sZW5ndGgpfXJldHVybnt1cGRhdGU6YyxtYXhQb2ludHM6dX19ZnVuY3Rpb24gRih0LGUpe3ZhciByPW5ldyB0LmNvbnN0cnVjdG9yKHQubGVuZ3RoK2UubGVuZ3RoKTtyZXR1cm4gci5zZXQodCksci5zZXQoZSx0Lmxlbmd0aCkscn1mdW5jdGlvbiBCKHQsZSxuLGkpe3Q9by5nZXRHcmFwaERpdih0KSxBLmNsZWFyUHJvbWlzZVF1ZXVlKHQpO3ZhciBhPXt9O2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKWFbZV09bjtlbHNle2lmKCFvLmlzUGxhaW5PYmplY3QoZSkpcmV0dXJuIG8ud2FybihcIlJlc3R5bGUgZmFpbC5cIixlLG4saSksUHJvbWlzZS5yZWplY3QoKTthPW8uZXh0ZW5kRmxhdCh7fSxlKSx2b2lkIDA9PT1pJiYoaT1uKX1PYmplY3Qua2V5cyhhKS5sZW5ndGgmJih0LmNoYW5nZWQ9ITApO3ZhciBzPUEuY29lcmNlVHJhY2VJbmRpY2VzKHQsaSksbD1VKHQsYSxzKSx1PWwuZmxhZ3M7dS5jYWxjJiYodC5jYWxjZGF0YT12b2lkIDApLHUuY2xlYXJBeGlzVHlwZXMmJkEuY2xlYXJBeGlzVHlwZXModCxzLHt9KTt2YXIgaD1bXTt1LmZ1bGxSZXBsb3Q/aC5wdXNoKHIucGxvdCk6KGgucHVzaChmLnByZXZpb3VzUHJvbWlzZXMpLGYuc3VwcGx5RGVmYXVsdHModCksdS5tYXJrZXJTaXplJiYoZi5kb0NhbGNkYXRhKHQpLFkoaCkpLHUuc3R5bGUmJmgucHVzaChULmRvVHJhY2VTdHlsZSksdS5jb2xvcmJhcnMmJmgucHVzaChULmRvQ29sb3JCYXJzKSxoLnB1c2goQykpLGgucHVzaChmLnJlaG92ZXIsZi5yZWRyYWcpLGMuYWRkKHQsQixbdCxsLnVuZG9pdCxsLnRyYWNlc10sQixbdCxsLnJlZG9pdCxsLnRyYWNlc10pO3ZhciBwPW8uc3luY09yQXN5bmMoaCx0KTtyZXR1cm4gcCYmcC50aGVufHwocD1Qcm9taXNlLnJlc29sdmUoKSkscC50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdChcInBsb3RseV9yZXN0eWxlXCIsbC5ldmVudERhdGEpLHR9KX1mdW5jdGlvbiBOKHQpe3JldHVybiB2b2lkIDA9PT10P251bGw6dH1mdW5jdGlvbiBqKHQsZSl7cmV0dXJuIGU/ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXMoZSxyKSxhPWkuc2V0O3JldHVybiBpLnNldD1mdW5jdGlvbihlKXtWKChufHxcIlwiKStyLGkuZ2V0KCksZSx0KSxhKGUpfSxpfTpzfWZ1bmN0aW9uIFYodCxlLHIsbil7aWYoQXJyYXkuaXNBcnJheShlKXx8QXJyYXkuaXNBcnJheShyKSlmb3IodmFyIGk9QXJyYXkuaXNBcnJheShlKT9lOltdLGE9QXJyYXkuaXNBcnJheShyKT9yOltdLHM9TWF0aC5tYXgoaS5sZW5ndGgsYS5sZW5ndGgpLGw9MDtsPHM7bCsrKVYodCtcIltcIitsK1wiXVwiLGlbbF0sYVtsXSxuKTtlbHNlIGlmKG8uaXNQbGFpbk9iamVjdChlKXx8by5pc1BsYWluT2JqZWN0KHIpKXt2YXIgYz1vLmlzUGxhaW5PYmplY3QoZSk/ZTp7fSx1PW8uaXNQbGFpbk9iamVjdChyKT9yOnt9LGg9by5leHRlbmRGbGF0KHt9LGMsdSk7Zm9yKHZhciBmIGluIGgpVih0K1wiLlwiK2YsY1tmXSx1W2ZdLG4pfWVsc2Ugdm9pZCAwPT09blt0XSYmKG5bdF09TihlKSl9ZnVuY3Rpb24gVSh0LGUscil7dmFyIG4saT10Ll9mdWxsTGF5b3V0LGE9dC5fZnVsbERhdGEsbD10LmRhdGEsYz1pLl9ndWlFZGl0aW5nLHA9aihpLl9wcmVHVUksYyksZz1vLmV4dGVuZERlZXBBbGwoe30sZSk7cShlKTt2YXIgdixtPU0udHJhY2VGbGFncygpLHk9e30seD17fTtmdW5jdGlvbiBiKCl7cmV0dXJuIHIubWFwKGZ1bmN0aW9uKCl7fSl9ZnVuY3Rpb24gXyh0KXt2YXIgZT1kLmlkMm5hbWUodCk7LTE9PT12LmluZGV4T2YoZSkmJnYucHVzaChlKX1mdW5jdGlvbiB3KHQpe3JldHVyblwiTEFZT1VUXCIrdCtcIi5hdXRvcmFuZ2VcIn1mdW5jdGlvbiBrKHQpe3JldHVyblwiTEFZT1VUXCIrdCtcIi5yYW5nZVwifWZ1bmN0aW9uIFQodCl7Zm9yKHZhciBlPXQ7ZTxhLmxlbmd0aDtlKyspaWYoYVtlXS5faW5wdXQ9PT1sW3RdKXJldHVybiBhW2VdfWZ1bmN0aW9uIFMobixhLG8pe2lmKEFycmF5LmlzQXJyYXkobikpbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe1ModCxhLG8pfSk7ZWxzZSBpZighKG4gaW4gZXx8QS5oYXNQYXJlbnQoZSxuKSkpe3ZhciBzO2lmKFwiTEFZT1VUXCI9PT1uLnN1YnN0cigwLDYpKXM9cCh0LmxheW91dCxuLnJlcGxhY2UoXCJMQVlPVVRcIixcIlwiKSk7ZWxzZXt2YXIgdT1yW29dO3M9aihpLl90cmFjZVByZUdVSVtUKHUpLl9mdWxsSW5wdXQudWlkXSxjKShsW3VdLG4pfW4gaW4geHx8KHhbbl09YigpKSx2b2lkIDA9PT14W25dW29dJiYoeFtuXVtvXT1OKHMuZ2V0KCkpKSx2b2lkIDAhPT1hJiZzLnNldChhKX19ZnVuY3Rpb24gRSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGFbZV1bdF19fWZ1bmN0aW9uIEModCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuITE9PT1lP2FbcltuXV1bdF06bnVsbH19Zm9yKHZhciBMIGluIGUpe2lmKEEuaGFzUGFyZW50KGUsTCkpdGhyb3cgbmV3IEVycm9yKFwiY2Fubm90IHNldCBcIitMK1wiIGFuZCBhIHBhcmVudCBhdHRyaWJ1dGUgc2ltdWx0YW5lb3VzbHlcIik7dmFyIHosTyxJLEQsUCxSLEY9ZVtMXTtpZihcImF1dG9iaW54XCIhPT1MJiZcImF1dG9iaW55XCIhPT1MfHwoTD1MLmNoYXJBdChMLmxlbmd0aC0xKStcImJpbnNcIixGPUFycmF5LmlzQXJyYXkoRik/Ri5tYXAoQyhMKSk6ITE9PT1GP3IubWFwKEUoTCkpOm51bGwpLHlbTF09RixcIkxBWU9VVFwiIT09TC5zdWJzdHIoMCw2KSl7Zm9yKHhbTF09YigpLG49MDtuPHIubGVuZ3RoO24rKyl7aWYoej1sW3Jbbl1dLE89VChyW25dKSxEPShJPWooaS5fdHJhY2VQcmVHVUlbTy5fZnVsbElucHV0LnVpZF0sYykoeixMKSkuZ2V0KCksdm9pZCAwIT09KFA9QXJyYXkuaXNBcnJheShGKT9GW24lRi5sZW5ndGhdOkYpKXt2YXIgQj1JLnBhcnRzW0kucGFydHMubGVuZ3RoLTFdLFY9TC5zdWJzdHIoMCxMLmxlbmd0aC1CLmxlbmd0aC0xKSxVPVY/VitcIi5cIjpcIlwiLEg9Vj9zKE8sVikuZ2V0KCk6TztpZigoUj1oLmdldFRyYWNlVmFsT2JqZWN0KE8sSS5wYXJ0cykpJiZSLmltcGxpZWRFZGl0cyYmbnVsbCE9PVApZm9yKHZhciBHIGluIFIuaW1wbGllZEVkaXRzKVMoby5yZWxhdGl2ZUF0dHIoTCxHKSxSLmltcGxpZWRFZGl0c1tHXSxuKTtlbHNlIGlmKFwidGhpY2tuZXNzbW9kZVwiIT09QiYmXCJsZW5tb2RlXCIhPT1CfHxEPT09UHx8XCJmcmFjdGlvblwiIT09UCYmXCJwaXhlbHNcIiE9PVB8fCFIKXtpZihcInR5cGVcIj09PUwmJlwicGllXCI9PT1QIT0oXCJwaWVcIj09PUQpKXt2YXIgWT1cInhcIixXPVwieVwiO1wiYmFyXCIhPT1QJiZcImJhclwiIT09RHx8XCJoXCIhPT16Lm9yaWVudGF0aW9ufHwoWT1cInlcIixXPVwieFwiKSxvLnN3YXBBdHRycyh6LFtcIj9cIixcIj9zcmNcIl0sXCJsYWJlbHNcIixZKSxvLnN3YXBBdHRycyh6LFtcImQ/XCIsXCI/MFwiXSxcImxhYmVsXCIsWSksby5zd2FwQXR0cnMoeixbXCI/XCIsXCI/c3JjXCJdLFwidmFsdWVzXCIsVyksXCJwaWVcIj09PUQ/KHMoeixcIm1hcmtlci5jb2xvclwiKS5zZXQocyh6LFwibWFya2VyLmNvbG9yc1wiKS5nZXQoKSksaS5fcGllbGF5ZXIuc2VsZWN0QWxsKFwiZy50cmFjZVwiKS5yZW1vdmUoKSk6dS50cmFjZUlzKHosXCJjYXJ0ZXNpYW5cIikmJnMoeixcIm1hcmtlci5jb2xvcnNcIikuc2V0KHMoeixcIm1hcmtlci5jb2xvclwiKS5nZXQoKSl9fWVsc2V7dmFyIFg9aS5fc2l6ZSxaPUgub3JpZW50LCQ9XCJ0b3BcIj09PVp8fFwiYm90dG9tXCI9PT1aO2lmKFwidGhpY2tuZXNzbW9kZVwiPT09Qil7dmFyIEo9JD9YLmg6WC53O1MoVStcInRoaWNrbmVzc1wiLEgudGhpY2tuZXNzKihcImZyYWN0aW9uXCI9PT1QPzEvSjpKKSxuKX1lbHNle3ZhciBLPSQ/WC53OlguaDtTKFUrXCJsZW5cIixILmxlbiooXCJmcmFjdGlvblwiPT09UD8xL0s6Syksbil9fXhbTF1bbl09TihEKTtpZigtMSE9PVtcInN3YXB4eVwiLFwic3dhcHh5YXhlc1wiLFwib3JpZW50YXRpb25cIixcIm9yaWVudGF0aW9uYXhlc1wiXS5pbmRleE9mKEwpKXtpZihcIm9yaWVudGF0aW9uXCI9PT1MKXtJLnNldChQKTt2YXIgUT16LngmJiF6Lnk/XCJoXCI6XCJ2XCI7aWYoKEkuZ2V0KCl8fFEpPT09Ty5vcmllbnRhdGlvbiljb250aW51ZX1lbHNlXCJvcmllbnRhdGlvbmF4ZXNcIj09PUwmJih6Lm9yaWVudGF0aW9uPXt2OlwiaFwiLGg6XCJ2XCJ9W08ub3JpZW50YXRpb25dKTtBLnN3YXBYWURhdGEoeiksbS5jYWxjPW0uY2xlYXJBeGlzVHlwZXM9ITB9ZWxzZS0xIT09Zi5kYXRhQXJyYXlDb250YWluZXJzLmluZGV4T2YoSS5wYXJ0c1swXSk/KEEubWFuYWdlQXJyYXlDb250YWluZXJzKEksUCx4KSxtLmNhbGM9ITApOihSP1IuYXJyYXlPayYmIXUudHJhY2VJcyhPLFwicmVnbFwiKSYmKG8uaXNBcnJheU9yVHlwZWRBcnJheShQKXx8by5pc0FycmF5T3JUeXBlZEFycmF5KEQpKT9tLmNhbGM9ITA6TS51cGRhdGUobSxSKTptLmNhbGM9ITAsSS5zZXQoUCkpfX1pZigtMSE9PVtcInN3YXB4eWF4ZXNcIixcIm9yaWVudGF0aW9uYXhlc1wiXS5pbmRleE9mKEwpJiZkLnN3YXAodCxyKSxcIm9yaWVudGF0aW9uYXhlc1wiPT09TCl7dmFyIHR0PXModC5sYXlvdXQsXCJob3Zlcm1vZGVcIik7XCJ4XCI9PT10dC5nZXQoKT90dC5zZXQoXCJ5XCIpOlwieVwiPT09dHQuZ2V0KCkmJnR0LnNldChcInhcIil9aWYoLTEhPT1bXCJvcmllbnRhdGlvblwiLFwidHlwZVwiXS5pbmRleE9mKEwpKXtmb3Iodj1bXSxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBldD1sW3Jbbl1dO3UudHJhY2VJcyhldCxcImNhcnRlc2lhblwiKSYmKF8oZXQueGF4aXN8fFwieFwiKSxfKGV0LnlheGlzfHxcInlcIikpfVModi5tYXAodyksITAsMCksUyh2Lm1hcChrKSxbMCwxXSwwKX19ZWxzZSBJPXAodC5sYXlvdXQsTC5yZXBsYWNlKFwiTEFZT1VUXCIsXCJcIikpLHhbTF09W04oSS5nZXQoKSldLEkuc2V0KEFycmF5LmlzQXJyYXkoRik/RlswXTpGKSxtLmNhbGM9ITB9cmV0dXJuKG0uY2FsY3x8bS5wbG90KSYmKG0uZnVsbFJlcGxvdD0hMCkse2ZsYWdzOm0sdW5kb2l0OngscmVkb2l0OnksdHJhY2VzOnIsZXZlbnREYXRhOm8uZXh0ZW5kRGVlcE5vQXJyYXlzKFtdLFtnLHJdKX19ZnVuY3Rpb24gcSh0KXt2YXIgZSxyLG4saT1vLmNvdW50ZXJSZWdleChcImF4aXNcIixcIi50aXRsZVwiLCExLCExKSxhPS9jb2xvcmJhclxcLnRpdGxlJC8scz1PYmplY3Qua2V5cyh0KTtmb3IoZT0wO2U8cy5sZW5ndGg7ZSsrKXI9c1tlXSxuPXRbcl0sXCJ0aXRsZVwiIT09ciYmIWkudGVzdChyKSYmIWEudGVzdChyKXx8XCJzdHJpbmdcIiE9dHlwZW9mIG4mJlwibnVtYmVyXCIhPXR5cGVvZiBuP3IuaW5kZXhPZihcInRpdGxlZm9udFwiKT4tMT9sKHIsci5yZXBsYWNlKFwidGl0bGVmb250XCIsXCJ0aXRsZS5mb250XCIpKTpyLmluZGV4T2YoXCJ0aXRsZXBvc2l0aW9uXCIpPi0xP2wocixyLnJlcGxhY2UoXCJ0aXRsZXBvc2l0aW9uXCIsXCJ0aXRsZS5wb3NpdGlvblwiKSk6ci5pbmRleE9mKFwidGl0bGVzaWRlXCIpPi0xP2wocixyLnJlcGxhY2UoXCJ0aXRsZXNpZGVcIixcInRpdGxlLnNpZGVcIikpOnIuaW5kZXhPZihcInRpdGxlb2Zmc2V0XCIpPi0xJiZsKHIsci5yZXBsYWNlKFwidGl0bGVvZmZzZXRcIixcInRpdGxlLm9mZnNldFwiKSk6bChyLHIucmVwbGFjZShcInRpdGxlXCIsXCJ0aXRsZS50ZXh0XCIpKTtmdW5jdGlvbiBsKGUscil7dFtyXT10W2VdLGRlbGV0ZSB0W2VdfX1mdW5jdGlvbiBIKHQsZSxyKXtpZih0PW8uZ2V0R3JhcGhEaXYodCksQS5jbGVhclByb21pc2VRdWV1ZSh0KSx0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHQpO3ZhciBuPXt9O2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKW5bZV09cjtlbHNle2lmKCFvLmlzUGxhaW5PYmplY3QoZSkpcmV0dXJuIG8ud2FybihcIlJlbGF5b3V0IGZhaWwuXCIsZSxyKSxQcm9taXNlLnJlamVjdCgpO249by5leHRlbmRGbGF0KHt9LGUpfU9iamVjdC5rZXlzKG4pLmxlbmd0aCYmKHQuY2hhbmdlZD0hMCk7dmFyIGk9JCh0LG4pLGE9aS5mbGFnczthLmNhbGMmJih0LmNhbGNkYXRhPXZvaWQgMCk7dmFyIHM9W2YucHJldmlvdXNQcm9taXNlc107YS5sYXlvdXRSZXBsb3Q/cy5wdXNoKFQubGF5b3V0UmVwbG90KTpPYmplY3Qua2V5cyhuKS5sZW5ndGgmJihHKHQsYSxpKXx8Zi5zdXBwbHlEZWZhdWx0cyh0KSxhLmxlZ2VuZCYmcy5wdXNoKFQuZG9MZWdlbmQpLGEubGF5b3V0c3R5bGUmJnMucHVzaChULmxheW91dFN0eWxlcyksYS5heHJhbmdlJiZZKHMsaS5yYW5nZXNBbHRlcmVkKSxhLnRpY2tzJiZzLnB1c2goVC5kb1RpY2tzUmVsYXlvdXQpLGEubW9kZWJhciYmcy5wdXNoKFQuZG9Nb2RlQmFyKSxhLmNhbWVyYSYmcy5wdXNoKFQuZG9DYW1lcmEpLHMucHVzaChDKSkscy5wdXNoKGYucmVob3ZlcixmLnJlZHJhZyksYy5hZGQodCxILFt0LGkudW5kb2l0XSxILFt0LGkucmVkb2l0XSk7dmFyIGw9by5zeW5jT3JBc3luYyhzLHQpO3JldHVybiBsJiZsLnRoZW58fChsPVByb21pc2UucmVzb2x2ZSh0KSksbC50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdChcInBsb3RseV9yZWxheW91dFwiLGkuZXZlbnREYXRhKSx0fSl9ZnVuY3Rpb24gRyh0LGUscil7dmFyIG49dC5fZnVsbExheW91dDtpZighZS5heHJhbmdlKXJldHVybiExO2Zvcih2YXIgaSBpbiBlKWlmKFwiYXhyYW5nZVwiIT09aSYmZVtpXSlyZXR1cm4hMTtmb3IodmFyIGEgaW4gci5yYW5nZXNBbHRlcmVkKXt2YXIgbz1kLmlkMm5hbWUoYSkscz10LmxheW91dFtvXSxsPW5bb107aWYobC5hdXRvcmFuZ2U9cy5hdXRvcmFuZ2UsbC5yYW5nZT1zLnJhbmdlLnNsaWNlKCksbC5jbGVhblJhbmdlKCksbC5fbWF0Y2hHcm91cClmb3IodmFyIGMgaW4gbC5fbWF0Y2hHcm91cClpZihjIT09YSl7dmFyIHU9bltkLmlkMm5hbWUoYyldO3UuYXV0b3JhbmdlPWwuYXV0b3JhbmdlLHUucmFuZ2U9bC5yYW5nZS5zbGljZSgpLHUuX2lucHV0LnJhbmdlPWwucmFuZ2Uuc2xpY2UoKX19cmV0dXJuITB9ZnVuY3Rpb24gWSh0LGUpe3ZhciByPWU/ZnVuY3Rpb24odCl7dmFyIHI9W10sbj0hMDtmb3IodmFyIGkgaW4gZSl7dmFyIGE9ZC5nZXRGcm9tSWQodCxpKTtpZihyLnB1c2goaSksYS5fbWF0Y2hHcm91cClmb3IodmFyIG8gaW4gYS5fbWF0Y2hHcm91cCllW29dfHxyLnB1c2gobyk7YS5hdXRvbWFyZ2luJiYobj0hMSl9cmV0dXJuIGQuZHJhdyh0LHIse3NraXBUaXRsZTpufSl9OmZ1bmN0aW9uKHQpe3JldHVybiBkLmRyYXcodCxcInJlZHJhd1wiKX07dC5wdXNoKF8sVC5kb0F1dG9SYW5nZUFuZENvbnN0cmFpbnRzLHIsVC5kcmF3RGF0YSxULmZpbmFsRHJhdyl9ci5wbG90PWZ1bmN0aW9uKHQsZSxpLGEpe3ZhciBzO2lmKHQ9by5nZXRHcmFwaERpdih0KSxsLmluaXQodCksby5pc1BsYWluT2JqZWN0KGUpKXt2YXIgYz1lO2U9Yy5kYXRhLGk9Yy5sYXlvdXQsYT1jLmNvbmZpZyxzPWMuZnJhbWVzfWlmKCExPT09bC50cmlnZ2VySGFuZGxlcih0LFwicGxvdGx5X2JlZm9yZXBsb3RcIixbZSxpLGFdKSlyZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtlfHxpfHxvLmlzUGxvdERpdih0KXx8by53YXJuKFwiQ2FsbGluZyBQbG90bHkucGxvdCBhcyBpZiByZWRyYXdpbmcgYnV0IHRoaXMgY29udGFpbmVyIGRvZXNuJ3QgeWV0IGhhdmUgYSBwbG90LlwiLHQpLE8odCxhKSxpfHwoaT17fSksbi5zZWxlY3QodCkuY2xhc3NlZChcImpzLXBsb3RseS1wbG90XCIsITApLGcubWFrZVRlc3RlcigpLEFycmF5LmlzQXJyYXkodC5fcHJvbWlzZXMpfHwodC5fcHJvbWlzZXM9W10pO3ZhciBoPTA9PT0odC5kYXRhfHxbXSkubGVuZ3RoJiZBcnJheS5pc0FycmF5KGUpO0FycmF5LmlzQXJyYXkoZSkmJihBLmNsZWFuRGF0YShlKSxoP3QuZGF0YT1lOnQuZGF0YS5wdXNoLmFwcGx5KHQuZGF0YSxlKSx0LmVtcHR5PSExKSx0LmxheW91dCYmIWh8fCh0LmxheW91dD1BLmNsZWFuTGF5b3V0KGkpKSxmLnN1cHBseURlZmF1bHRzKHQpO3ZhciB2PXQuX2Z1bGxMYXlvdXQseD12Ll9oYXMoXCJjYXJ0ZXNpYW5cIik7aWYoIXYuX2hhcyhcInBvbGFyXCIpJiZlJiZlWzBdJiZlWzBdLnIpcmV0dXJuIG8ubG9nKFwiTGVnYWN5IHBvbGFyIGNoYXJ0cyBhcmUgZGVwcmVjYXRlZCFcIiksZnVuY3Rpb24odCxlLHIpe3ZhciBpPW4uc2VsZWN0KHQpLnNlbGVjdEFsbChcIi5wbG90LWNvbnRhaW5lclwiKS5kYXRhKFswXSk7aS5lbnRlcigpLmluc2VydChcImRpdlwiLFwiOmZpcnN0LWNoaWxkXCIpLmNsYXNzZWQoXCJwbG90LWNvbnRhaW5lciBwbG90bHlcIiwhMCk7dmFyIGE9aS5zZWxlY3RBbGwoXCIuc3ZnLWNvbnRhaW5lclwiKS5kYXRhKFswXSk7YS5lbnRlcigpLmFwcGVuZChcImRpdlwiKS5jbGFzc2VkKFwic3ZnLWNvbnRhaW5lclwiLCEwKS5zdHlsZShcInBvc2l0aW9uXCIsXCJyZWxhdGl2ZVwiKSxhLmh0bWwoXCJcIiksZSYmKHQuZGF0YT1lKTtyJiYodC5sYXlvdXQ9cik7cC5tYW5hZ2VyLmZpbGxMYXlvdXQodCksYS5zdHlsZSh7d2lkdGg6dC5fZnVsbExheW91dC53aWR0aCtcInB4XCIsaGVpZ2h0OnQuX2Z1bGxMYXlvdXQuaGVpZ2h0K1wicHhcIn0pLHQuZnJhbWV3b3JrPXAubWFuYWdlci5mcmFtZXdvcmsodCksdC5mcmFtZXdvcmsoe2RhdGE6dC5kYXRhLGxheW91dDp0LmxheW91dH0sYS5ub2RlKCkpLHQuZnJhbWV3b3JrLnNldFVuZG9Qb2ludCgpO3ZhciBzPXQuZnJhbWV3b3JrLnN2ZygpLGw9MSxjPXQuX2Z1bGxMYXlvdXQudGl0bGU/dC5fZnVsbExheW91dC50aXRsZS50ZXh0OlwiXCI7XCJcIiE9PWMmJmN8fChsPTApO3ZhciB1PWZ1bmN0aW9uKCl7dGhpcy5jYWxsKGIuY29udmVydFRvVHNwYW5zLHQpfSxoPXMuc2VsZWN0KFwiLnRpdGxlLWdyb3VwIHRleHRcIikuY2FsbCh1KTtpZih0Ll9jb250ZXh0LmVkaXRzLnRpdGxlVGV4dCl7dmFyIGQ9by5fKHQsXCJDbGljayB0byBlbnRlciBQbG90IHRpdGxlXCIpO2MmJmMhPT1kfHwobD0uMixoLmF0dHIoe1wiZGF0YS11bmZvcm1hdHRlZFwiOmR9KS50ZXh0KGQpLnN0eWxlKHtvcGFjaXR5Omx9KS5vbihcIm1vdXNlb3Zlci5vcGFjaXR5XCIsZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMTAwKS5zdHlsZShcIm9wYWNpdHlcIiwxKX0pLm9uKFwibW91c2VvdXQub3BhY2l0eVwiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKDFlMykuc3R5bGUoXCJvcGFjaXR5XCIsMCl9KSk7dmFyIGc9ZnVuY3Rpb24oKXt0aGlzLmNhbGwoYi5tYWtlRWRpdGFibGUse2dkOnR9KS5vbihcImVkaXRcIixmdW5jdGlvbihlKXt0LmZyYW1ld29yayh7bGF5b3V0Ont0aXRsZTp7dGV4dDplfX19KSx0aGlzLnRleHQoZSkuY2FsbCh1KSx0aGlzLmNhbGwoZyl9KS5vbihcImNhbmNlbFwiLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hdHRyKFwiZGF0YS11bmZvcm1hdHRlZFwiKTt0aGlzLnRleHQodCkuY2FsbCh1KX0pfTtoLmNhbGwoZyl9cmV0dXJuIHQuX2NvbnRleHQuc2V0QmFja2dyb3VuZCh0LHQuX2Z1bGxMYXlvdXQucGFwZXJfYmdjb2xvciksZi5hZGRMaW5rcyh0KSxQcm9taXNlLnJlc29sdmUoKX0odCxlLGkpO3YuX3JlcGxvdHRpbmc9ITAsaCYmbHQodCksdC5mcmFtZXdvcmshPT1sdCYmKHQuZnJhbWV3b3JrPWx0LGx0KHQpKSxnLmluaXRHcmFkaWVudHModCksaCYmZC5zYXZlU2hvd1NwaWtlSW5pdGlhbCh0KTt2YXIgXz0hdC5jYWxjZGF0YXx8dC5jYWxjZGF0YS5sZW5ndGghPT0odC5fZnVsbERhdGF8fFtdKS5sZW5ndGg7XyYmZi5kb0NhbGNkYXRhKHQpO2Zvcih2YXIgdz0wO3c8dC5jYWxjZGF0YS5sZW5ndGg7dysrKXQuY2FsY2RhdGFbd11bMF0udHJhY2U9dC5fZnVsbERhdGFbd107dC5fY29udGV4dC5yZXNwb25zaXZlP3QuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXJ8fCh0Ll9yZXNwb25zaXZlQ2hhcnRIYW5kbGVyPWZ1bmN0aW9uKCl7Zi5yZXNpemUodCl9LHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlcikpOm8uY2xlYXJSZXNwb25zaXZlKHQpO3ZhciBrPUpTT04uc3RyaW5naWZ5KHYuX3NpemUpLE09MDtmdW5jdGlvbiBTKCl7dmFyIGUscixuLGk9dC5jYWxjZGF0YTtmb3IoZi5jbGVhckF1dG9NYXJnaW5JZHModCksVC5kcmF3TWFyZ2luUHVzaGVycyh0KSxkLmFsbG93QXV0b01hcmdpbih0KSxlPTA7ZTxpLmxlbmd0aDtlKyspe3ZhciBhPShuPShyPWlbZV0pWzBdLnRyYWNlKS5fbW9kdWxlLmNvbG9yYmFyOyEwPT09bi52aXNpYmxlJiZhP20odCxyLGEpOmYuYXV0b01hcmdpbih0LFwiY2JcIituLnVpZCl9cmV0dXJuIGYuZG9BdXRvTWFyZ2luKHQpLGYucHJldmlvdXNQcm9taXNlcyh0KX1mdW5jdGlvbiBFKCl7dC5fdHJhbnNpdGlvbmluZ3x8KFQuZG9BdXRvUmFuZ2VBbmRDb25zdHJhaW50cyh0KSxoJiZkLnNhdmVSYW5nZUluaXRpYWwodCksdS5nZXRDb21wb25lbnRNZXRob2QoXCJyYW5nZXNsaWRlclwiLFwiY2FsY0F1dG9yYW5nZVwiKSh0KSl9dmFyIEw9W2YucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe2lmKHMpcmV0dXJuIHIuYWRkRnJhbWVzKHQscyl9LGZ1bmN0aW9uIGUoKXtmb3IodmFyIHI9di5fYmFzZVBsb3RNb2R1bGVzLG49MDtuPHIubGVuZ3RoO24rKylyW25dLmRyYXdGcmFtZXdvcmsmJnJbbl0uZHJhd0ZyYW1ld29yayh0KTtpZighdi5fZ2xjYW52YXMmJnYuX2hhcyhcImdsXCIpJiYodi5fZ2xjYW52YXM9di5fZ2xjb250YWluZXIuc2VsZWN0QWxsKFwiLmdsLWNhbnZhc1wiKS5kYXRhKFt7a2V5OlwiY29udGV4dExheWVyXCIsY29udGV4dDohMCxwaWNrOiExfSx7a2V5OlwiZm9jdXNMYXllclwiLGNvbnRleHQ6ITEscGljazohMX0se2tleTpcInBpY2tMYXllclwiLGNvbnRleHQ6ITEscGljazohMH1dLGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleX0pLHYuX2dsY2FudmFzLmVudGVyKCkuYXBwZW5kKFwiY2FudmFzXCIpLmF0dHIoXCJjbGFzc1wiLGZ1bmN0aW9uKHQpe3JldHVyblwiZ2wtY2FudmFzIGdsLWNhbnZhcy1cIit0LmtleS5yZXBsYWNlKFwiTGF5ZXJcIixcIlwiKX0pLnN0eWxlKHtwb3NpdGlvbjpcImFic29sdXRlXCIsdG9wOjAsbGVmdDowLG92ZXJmbG93OlwidmlzaWJsZVwiLFwicG9pbnRlci1ldmVudHNcIjpcIm5vbmVcIn0pKSx2Ll9nbGNhbnZhcyl7di5fZ2xjYW52YXMuYXR0cihcIndpZHRoXCIsdi53aWR0aCkuYXR0cihcImhlaWdodFwiLHYuaGVpZ2h0KTt2YXIgaT12Ll9nbGNhbnZhcy5kYXRhKClbMF0ucmVnbDtpZihpJiYoTWF0aC5mbG9vcih2LndpZHRoKSE9PWkuX2dsLmRyYXdpbmdCdWZmZXJXaWR0aHx8TWF0aC5mbG9vcih2LmhlaWdodCkhPT1pLl9nbC5kcmF3aW5nQnVmZmVySGVpZ2h0KSl7dmFyIGE9XCJXZWJHTCBjb250ZXh0IGJ1ZmZlciBhbmQgY2FudmFzIGRpbWVuc2lvbnMgZG8gbm90IG1hdGNoIGR1ZSB0byBicm93c2VyL1dlYkdMIGJ1Zy5cIjtpZighTSlyZXR1cm4gby5sb2coYStcIiBDbGVhcmluZyBncmFwaCBhbmQgcGxvdHRpbmcgYWdhaW4uXCIpLGYuY2xlYW5QbG90KFtdLHt9LHQuX2Z1bGxEYXRhLHYpLGYuc3VwcGx5RGVmYXVsdHModCksdj10Ll9mdWxsTGF5b3V0LGYuZG9DYWxjZGF0YSh0KSxNKyssZSgpO28uZXJyb3IoYSl9fXJldHVyblwiaFwiPT09di5tb2RlYmFyLm9yaWVudGF0aW9uP3YuX21vZGViYXJkaXYuc3R5bGUoXCJoZWlnaHRcIixudWxsKS5zdHlsZShcIndpZHRoXCIsXCIxMDAlXCIpOnYuX21vZGViYXJkaXYuc3R5bGUoXCJ3aWR0aFwiLG51bGwpLnN0eWxlKFwiaGVpZ2h0XCIsdi5oZWlnaHQrXCJweFwiKSxmLnByZXZpb3VzUHJvbWlzZXModCl9LFMsZnVuY3Rpb24oKXtpZihKU09OLnN0cmluZ2lmeSh2Ll9zaXplKSE9PWspcmV0dXJuIG8uc3luY09yQXN5bmMoW1MsVC5sYXlvdXRTdHlsZXNdLHQpfV07eCYmTC5wdXNoKGZ1bmN0aW9uKCl7aWYoXylyZXR1cm4gby5zeW5jT3JBc3luYyhbdS5nZXRDb21wb25lbnRNZXRob2QoXCJzaGFwZXNcIixcImNhbGNBdXRvcmFuZ2VcIiksdS5nZXRDb21wb25lbnRNZXRob2QoXCJhbm5vdGF0aW9uc1wiLFwiY2FsY0F1dG9yYW5nZVwiKSxFXSx0KTtFKCl9KSxMLnB1c2goVC5sYXlvdXRTdHlsZXMpLHgmJkwucHVzaChmdW5jdGlvbigpe3JldHVybiBkLmRyYXcodCxoP1wiXCI6XCJyZWRyYXdcIil9KSxMLnB1c2goVC5kcmF3RGF0YSxULmZpbmFsRHJhdyx5LGYuYWRkTGlua3MsZi5yZWhvdmVyLGYucmVkcmFnLGYuZG9BdXRvTWFyZ2luLGYucHJldmlvdXNQcm9taXNlcyk7dmFyIHo9by5zeW5jT3JBc3luYyhMLHQpO3JldHVybiB6JiZ6LnRoZW58fCh6PVByb21pc2UucmVzb2x2ZSgpKSx6LnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gQyh0KSx0fSl9LHIuc2V0UGxvdENvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4gby5leHRlbmRGbGF0KHcsdCl9LHIucmVkcmF3PWZ1bmN0aW9uKHQpe2lmKHQ9by5nZXRHcmFwaERpdih0KSwhby5pc1Bsb3REaXYodCkpdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBlbGVtZW50IGlzIG5vdCBhIFBsb3RseSBwbG90OiBcIit0KTtyZXR1cm4gQS5jbGVhbkRhdGEodC5kYXRhKSxBLmNsZWFuTGF5b3V0KHQubGF5b3V0KSx0LmNhbGNkYXRhPXZvaWQgMCxyLnBsb3QodCkudGhlbihmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoXCJwbG90bHlfcmVkcmF3XCIpLHR9KX0sci5uZXdQbG90PWZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiB0PW8uZ2V0R3JhcGhEaXYodCksZi5jbGVhblBsb3QoW10se30sdC5fZnVsbERhdGF8fFtdLHQuX2Z1bGxMYXlvdXR8fHt9KSxmLnB1cmdlKHQpLHIucGxvdCh0LGUsbixpKX0sci5leHRlbmRUcmFjZXM9ZnVuY3Rpb24gdChlLG4saSxhKXt2YXIgcz1SKGU9by5nZXRHcmFwaERpdihlKSxuLGksYSxmdW5jdGlvbih0LGUscil7dmFyIG4saTtpZihvLmlzVHlwZWRBcnJheSh0KSlpZihyPDApe3ZhciBhPW5ldyB0LmNvbnN0cnVjdG9yKDApLHM9Rih0LGUpO3I8MD8obj1zLGk9YSk6KG49YSxpPXMpfWVsc2UgaWYobj1uZXcgdC5jb25zdHJ1Y3RvcihyKSxpPW5ldyB0LmNvbnN0cnVjdG9yKHQubGVuZ3RoK2UubGVuZ3RoLXIpLHI9PT1lLmxlbmd0aCluLnNldChlKSxpLnNldCh0KTtlbHNlIGlmKHI8ZS5sZW5ndGgpe3ZhciBsPWUubGVuZ3RoLXI7bi5zZXQoZS5zdWJhcnJheShsKSksaS5zZXQodCksaS5zZXQoZS5zdWJhcnJheSgwLGwpLHQubGVuZ3RoKX1lbHNle3ZhciBjPXItZS5sZW5ndGgsdT10Lmxlbmd0aC1jO24uc2V0KHQuc3ViYXJyYXkodSkpLG4uc2V0KGUsYyksaS5zZXQodC5zdWJhcnJheSgwLHUpKX1lbHNlIG49dC5jb25jYXQoZSksaT1yPj0wJiZyPG4ubGVuZ3RoP24uc3BsaWNlKDAsbi5sZW5ndGgtcik6W107cmV0dXJuW24saV19KSxsPXIucmVkcmF3KGUpLHU9W2Uscy51cGRhdGUsaSxzLm1heFBvaW50c107cmV0dXJuIGMuYWRkKGUsci5wcmVwZW5kVHJhY2VzLHUsdCxhcmd1bWVudHMpLGx9LHIucHJlcGVuZFRyYWNlcz1mdW5jdGlvbiB0KGUsbixpLGEpe3ZhciBzPVIoZT1vLmdldEdyYXBoRGl2KGUpLG4saSxhLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpO2lmKG8uaXNUeXBlZEFycmF5KHQpKWlmKHI8PTApe3ZhciBhPW5ldyB0LmNvbnN0cnVjdG9yKDApLHM9RihlLHQpO3I8MD8obj1zLGk9YSk6KG49YSxpPXMpfWVsc2UgaWYobj1uZXcgdC5jb25zdHJ1Y3RvcihyKSxpPW5ldyB0LmNvbnN0cnVjdG9yKHQubGVuZ3RoK2UubGVuZ3RoLXIpLHI9PT1lLmxlbmd0aCluLnNldChlKSxpLnNldCh0KTtlbHNlIGlmKHI8ZS5sZW5ndGgpe3ZhciBsPWUubGVuZ3RoLXI7bi5zZXQoZS5zdWJhcnJheSgwLGwpKSxpLnNldChlLnN1YmFycmF5KGwpKSxpLnNldCh0LGwpfWVsc2V7dmFyIGM9ci1lLmxlbmd0aDtuLnNldChlKSxuLnNldCh0LnN1YmFycmF5KDAsYyksZS5sZW5ndGgpLGkuc2V0KHQuc3ViYXJyYXkoYykpfWVsc2Ugbj1lLmNvbmNhdCh0KSxpPXI+PTAmJnI8bi5sZW5ndGg/bi5zcGxpY2UocixuLmxlbmd0aCk6W107cmV0dXJuW24saV19KSxsPXIucmVkcmF3KGUpLHU9W2Uscy51cGRhdGUsaSxzLm1heFBvaW50c107cmV0dXJuIGMuYWRkKGUsci5leHRlbmRUcmFjZXMsdSx0LGFyZ3VtZW50cyksbH0sci5hZGRUcmFjZXM9ZnVuY3Rpb24gdChlLG4saSl7ZT1vLmdldEdyYXBoRGl2KGUpO3ZhciBhLHMsbD1bXSx1PXIuZGVsZXRlVHJhY2VzLGg9dCxmPVtlLGxdLHA9W2Usbl07Zm9yKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpO2lmKCFBcnJheS5pc0FycmF5KHQuZGF0YSkpdGhyb3cgbmV3IEVycm9yKFwiZ2QuZGF0YSBtdXN0IGJlIGFuIGFycmF5LlwiKTtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoXCJ0cmFjZXMgbXVzdCBiZSBkZWZpbmVkLlwiKTtmb3IoQXJyYXkuaXNBcnJheShlKXx8KGU9W2VdKSxuPTA7bjxlLmxlbmd0aDtuKyspaWYoXCJvYmplY3RcIiE9dHlwZW9mKGk9ZVtuXSl8fEFycmF5LmlzQXJyYXkoaSl8fG51bGw9PT1pKXRocm93IG5ldyBFcnJvcihcImFsbCB2YWx1ZXMgaW4gdHJhY2VzIGFycmF5IG11c3QgYmUgbm9uLWFycmF5IG9iamVjdHNcIik7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIHJ8fEFycmF5LmlzQXJyYXkocil8fChyPVtyXSksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHImJnIubGVuZ3RoIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiaWYgaW5kaWNlcyBpcyBzcGVjaWZpZWQsIHRyYWNlcy5sZW5ndGggbXVzdCBlcXVhbCBpbmRpY2VzLmxlbmd0aFwiKX0oZSxuLGkpLEFycmF5LmlzQXJyYXkobil8fChuPVtuXSksbj1uLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gby5leHRlbmRGbGF0KHt9LHQpfSksQS5jbGVhbkRhdGEobiksYT0wO2E8bi5sZW5ndGg7YSsrKWUuZGF0YS5wdXNoKG5bYV0pO2ZvcihhPTA7YTxuLmxlbmd0aDthKyspbC5wdXNoKC1uLmxlbmd0aCthKTtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgaSlyZXR1cm4gcz1yLnJlZHJhdyhlKSxjLmFkZChlLHUsZixoLHApLHM7QXJyYXkuaXNBcnJheShpKXx8KGk9W2ldKTt0cnl7UChlLGwsaSl9Y2F0Y2godCl7dGhyb3cgZS5kYXRhLnNwbGljZShlLmRhdGEubGVuZ3RoLW4ubGVuZ3RoLG4ubGVuZ3RoKSx0fXJldHVybiBjLnN0YXJ0U2VxdWVuY2UoZSksYy5hZGQoZSx1LGYsaCxwKSxzPXIubW92ZVRyYWNlcyhlLGwsaSksYy5zdG9wU2VxdWVuY2UoZSksc30sci5kZWxldGVUcmFjZXM9ZnVuY3Rpb24gdChlLG4pe2U9by5nZXRHcmFwaERpdihlKTt2YXIgaSxhLHM9W10sbD1yLmFkZFRyYWNlcyx1PXQsaD1bZSxzLG5dLGY9W2Usbl07aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yKFwiaW5kaWNlcyBtdXN0IGJlIGFuIGludGVnZXIgb3IgYXJyYXkgb2YgaW50ZWdlcnMuXCIpO2ZvcihBcnJheS5pc0FycmF5KG4pfHwobj1bbl0pLEQoZSxuLFwiaW5kaWNlc1wiKSwobj1JKG4sZS5kYXRhLmxlbmd0aC0xKSkuc29ydChvLnNvcnRlckRlcyksaT0wO2k8bi5sZW5ndGg7aSs9MSlhPWUuZGF0YS5zcGxpY2UobltpXSwxKVswXSxzLnB1c2goYSk7dmFyIHA9ci5yZWRyYXcoZSk7cmV0dXJuIGMuYWRkKGUsbCxoLHUsZikscH0sci5tb3ZlVHJhY2VzPWZ1bmN0aW9uIHQoZSxuLGkpe3ZhciBhLHM9W10sbD1bXSx1PXQsaD10LGY9W2U9by5nZXRHcmFwaERpdihlKSxpLG5dLHA9W2UsbixpXTtpZihQKGUsbixpKSxuPUFycmF5LmlzQXJyYXkobik/bjpbbl0sXCJ1bmRlZmluZWRcIj09dHlwZW9mIGkpZm9yKGk9W10sYT0wO2E8bi5sZW5ndGg7YSsrKWkucHVzaCgtbi5sZW5ndGgrYSk7Zm9yKGk9QXJyYXkuaXNBcnJheShpKT9pOltpXSxuPUkobixlLmRhdGEubGVuZ3RoLTEpLGk9SShpLGUuZGF0YS5sZW5ndGgtMSksYT0wO2E8ZS5kYXRhLmxlbmd0aDthKyspLTE9PT1uLmluZGV4T2YoYSkmJnMucHVzaChlLmRhdGFbYV0pO2ZvcihhPTA7YTxuLmxlbmd0aDthKyspbC5wdXNoKHtuZXdJbmRleDppW2FdLHRyYWNlOmUuZGF0YVtuW2FdXX0pO2ZvcihsLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5uZXdJbmRleC1lLm5ld0luZGV4fSksYT0wO2E8bC5sZW5ndGg7YSs9MSlzLnNwbGljZShsW2FdLm5ld0luZGV4LDAsbFthXS50cmFjZSk7ZS5kYXRhPXM7dmFyIGQ9ci5yZWRyYXcoZSk7cmV0dXJuIGMuYWRkKGUsdSxmLGgscCksZH0sci5yZXN0eWxlPUIsci5fc3RvcmVEaXJlY3RHVUlFZGl0PWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4gaW4gcil7VihuLHModCxuKS5nZXQoKSxyW25dLGUpfX0sci5yZWxheW91dD1IO3ZhciBXPS9eW3h5el1heGlzWzAtOV0qXFwucmFuZ2UoXFxbWzB8MV1cXF0pPyQvLFg9L15beHl6XWF4aXNbMC05XSpcXC5hdXRvcmFuZ2UkLyxaPS9eW3h5el1heGlzWzAtOV0qXFwuZG9tYWluKFxcW1swfDFdXFxdKT8kLztmdW5jdGlvbiAkKHQsZSl7dmFyIHIsbixpLGE9dC5sYXlvdXQsbD10Ll9mdWxsTGF5b3V0LGM9bC5fZ3VpRWRpdGluZyxmPWoobC5fcHJlR1VJLGMpLHA9T2JqZWN0LmtleXMoZSksZz1kLmxpc3QodCksdj1vLmV4dGVuZERlZXBBbGwoe30sZSksbT17fTtmb3IocShlKSxwPU9iamVjdC5rZXlzKGUpLG49MDtuPHAubGVuZ3RoO24rKylpZigwPT09cFtuXS5pbmRleE9mKFwiYWxsYXhlc1wiKSl7Zm9yKGk9MDtpPGcubGVuZ3RoO2krKyl7dmFyIHk9Z1tpXS5faWQuc3Vic3RyKDEpLHg9LTEhPT15LmluZGV4T2YoXCJzY2VuZVwiKT95K1wiLlwiOlwiXCIsYj1wW25dLnJlcGxhY2UoXCJhbGxheGVzXCIseCtnW2ldLl9uYW1lKTtlW2JdfHwoZVtiXT1lW3Bbbl1dKX1kZWxldGUgZVtwW25dXX12YXIgXz1NLmxheW91dEZsYWdzKCksdz17fSxUPXt9O2Z1bmN0aW9uIEUodCxyKXtpZihBcnJheS5pc0FycmF5KHQpKXQuZm9yRWFjaChmdW5jdGlvbih0KXtFKHQscil9KTtlbHNlIGlmKCEodCBpbiBlfHxBLmhhc1BhcmVudChlLHQpKSl7dmFyIG49ZihhLHQpO3QgaW4gVHx8KFRbdF09TihuLmdldCgpKSksdm9pZCAwIT09ciYmbi5zZXQocil9fXZhciBDLEw9e307ZnVuY3Rpb24geih0KXt2YXIgZT1kLm5hbWUyaWQodC5zcGxpdChcIi5cIilbMF0pO3JldHVybiBMW2VdPTEsZX1mb3IodmFyIE8gaW4gZSl7aWYoQS5oYXNQYXJlbnQoZSxPKSl0aHJvdyBuZXcgRXJyb3IoXCJjYW5ub3Qgc2V0IFwiK08rXCIgYW5kIGEgcGFyZW50IGF0dHJpYnV0ZSBzaW11bHRhbmVvdXNseVwiKTtmb3IodmFyIEk9ZihhLE8pLEQ9ZVtPXSxQPUkucGFydHMubGVuZ3RoLTE7UD4wJiZcInN0cmluZ1wiIT10eXBlb2YgSS5wYXJ0c1tQXTspUC0tO3ZhciBSPUkucGFydHNbUF0sRj1JLnBhcnRzW1AtMV0rXCIuXCIrUixCPUkucGFydHMuc2xpY2UoMCxQKS5qb2luKFwiLlwiKSxWPXModC5sYXlvdXQsQikuZ2V0KCksVT1zKGwsQikuZ2V0KCksSD1JLmdldCgpO2lmKHZvaWQgMCE9PUQpe3dbT109RCxUW09dPVwicmV2ZXJzZVwiPT09Uj9EOk4oSCk7dmFyIEc9aC5nZXRMYXlvdXRWYWxPYmplY3QobCxJLnBhcnRzKTtpZihHJiZHLmltcGxpZWRFZGl0cyYmbnVsbCE9PUQpZm9yKHZhciBZIGluIEcuaW1wbGllZEVkaXRzKUUoby5yZWxhdGl2ZUF0dHIoTyxZKSxHLmltcGxpZWRFZGl0c1tZXSk7aWYoLTEhPT1bXCJ3aWR0aFwiLFwiaGVpZ2h0XCJdLmluZGV4T2YoTykpaWYoRCl7RShcImF1dG9zaXplXCIsbnVsbCk7dmFyICQ9XCJoZWlnaHRcIj09PU8/XCJ3aWR0aFwiOlwiaGVpZ2h0XCI7RSgkLGxbJF0pfWVsc2UgbFtPXT10Ll9pbml0aWFsQXV0b1NpemVbT107ZWxzZSBpZihcImF1dG9zaXplXCI9PT1PKUUoXCJ3aWR0aFwiLEQ/bnVsbDpsLndpZHRoKSxFKFwiaGVpZ2h0XCIsRD9udWxsOmwuaGVpZ2h0KTtlbHNlIGlmKEYubWF0Y2goVykpeihGKSxzKGwsQitcIi5faW5wdXRSYW5nZVwiKS5zZXQobnVsbCk7ZWxzZSBpZihGLm1hdGNoKFgpKXt6KEYpLHMobCxCK1wiLl9pbnB1dFJhbmdlXCIpLnNldChudWxsKTt2YXIgSz1zKGwsQikuZ2V0KCk7Sy5faW5wdXREb21haW4mJihLLl9pbnB1dC5kb21haW49Sy5faW5wdXREb21haW4uc2xpY2UoKSl9ZWxzZSBGLm1hdGNoKFopJiZzKGwsQitcIi5faW5wdXREb21haW5cIikuc2V0KG51bGwpO2lmKFwidHlwZVwiPT09Uil7dmFyIFE9Vix0dD1cImxpbmVhclwiPT09VS50eXBlJiZcImxvZ1wiPT09RCxldD1cImxvZ1wiPT09VS50eXBlJiZcImxpbmVhclwiPT09RDtpZih0dHx8ZXQpe2lmKFEmJlEucmFuZ2UpaWYoVS5hdXRvcmFuZ2UpdHQmJihRLnJhbmdlPVEucmFuZ2VbMV0+US5yYW5nZVswXT9bMSwyXTpbMiwxXSk7ZWxzZXt2YXIgcnQ9US5yYW5nZVswXSxudD1RLnJhbmdlWzFdO3R0PyhydDw9MCYmbnQ8PTAmJkUoQitcIi5hdXRvcmFuZ2VcIiwhMCkscnQ8PTA/cnQ9bnQvMWU2Om50PD0wJiYobnQ9cnQvMWU2KSxFKEIrXCIucmFuZ2VbMF1cIixNYXRoLmxvZyhydCkvTWF0aC5MTjEwKSxFKEIrXCIucmFuZ2VbMV1cIixNYXRoLmxvZyhudCkvTWF0aC5MTjEwKSk6KEUoQitcIi5yYW5nZVswXVwiLE1hdGgucG93KDEwLHJ0KSksRShCK1wiLnJhbmdlWzFdXCIsTWF0aC5wb3coMTAsbnQpKSl9ZWxzZSBFKEIrXCIuYXV0b3JhbmdlXCIsITApO0FycmF5LmlzQXJyYXkobC5fc3VicGxvdHMucG9sYXIpJiZsLl9zdWJwbG90cy5wb2xhci5sZW5ndGgmJmxbSS5wYXJ0c1swXV0mJlwicmFkaWFsYXhpc1wiPT09SS5wYXJ0c1sxXSYmZGVsZXRlIGxbSS5wYXJ0c1swXV0uX3N1YnBsb3Qudmlld0luaXRpYWxbXCJyYWRpYWxheGlzLnJhbmdlXCJdLHUuZ2V0Q29tcG9uZW50TWV0aG9kKFwiYW5ub3RhdGlvbnNcIixcImNvbnZlcnRDb29yZHNcIikodCxVLEQsRSksdS5nZXRDb21wb25lbnRNZXRob2QoXCJpbWFnZXNcIixcImNvbnZlcnRDb29yZHNcIikodCxVLEQsRSl9ZWxzZSBFKEIrXCIuYXV0b3JhbmdlXCIsITApLEUoQitcIi5yYW5nZVwiLG51bGwpO3MobCxCK1wiLl9pbnB1dFJhbmdlXCIpLnNldChudWxsKX1lbHNlIGlmKFIubWF0Y2goUykpe3ZhciBpdD1zKGwsTykuZ2V0KCksYXQ9KER8fHt9KS50eXBlO2F0JiZcIi1cIiE9PWF0fHwoYXQ9XCJsaW5lYXJcIiksdS5nZXRDb21wb25lbnRNZXRob2QoXCJhbm5vdGF0aW9uc1wiLFwiY29udmVydENvb3Jkc1wiKSh0LGl0LGF0LEUpLHUuZ2V0Q29tcG9uZW50TWV0aG9kKFwiaW1hZ2VzXCIsXCJjb252ZXJ0Q29vcmRzXCIpKHQsaXQsYXQsRSl9dmFyIG90PWsuY29udGFpbmVyQXJyYXlNYXRjaChPKTtpZihvdCl7cj1vdC5hcnJheSxuPW90LmluZGV4O3ZhciBzdD1vdC5wcm9wZXJ0eSxsdD1HfHx7ZWRpdFR5cGU6XCJjYWxjXCJ9O1wiXCIhPT1uJiZcIlwiPT09c3QmJihrLmlzQWRkVmFsKEQpP1RbT109bnVsbDprLmlzUmVtb3ZlVmFsKEQpP1RbT109KHMoYSxyKS5nZXQoKXx8W10pW25dOm8ud2FybihcInVucmVjb2duaXplZCBmdWxsIG9iamVjdCB2YWx1ZVwiLGUpKSxNLnVwZGF0ZShfLGx0KSxtW3JdfHwobVtyXT17fSk7dmFyIGN0PW1bcl1bbl07Y3R8fChjdD1tW3JdW25dPXt9KSxjdFtzdF09RCxkZWxldGUgZVtPXX1lbHNlXCJyZXZlcnNlXCI9PT1SPyhWLnJhbmdlP1YucmFuZ2UucmV2ZXJzZSgpOihFKEIrXCIuYXV0b3JhbmdlXCIsITApLFYucmFuZ2U9WzEsMF0pLFUuYXV0b3JhbmdlP18uY2FsYz0hMDpfLnBsb3Q9ITApOihsLl9oYXMoXCJzY2F0dGVyLWxpa2VcIikmJmwuX2hhcyhcInJlZ2xcIikmJlwiZHJhZ21vZGVcIj09PU8mJihcImxhc3NvXCI9PT1EfHxcInNlbGVjdFwiPT09RCkmJlwibGFzc29cIiE9PUgmJlwic2VsZWN0XCIhPT1IP18ucGxvdD0hMDpsLl9oYXMoXCJnbDJkXCIpP18ucGxvdD0hMDpHP00udXBkYXRlKF8sRyk6Xy5jYWxjPSEwLEkuc2V0KEQpKX19Zm9yKHIgaW4gbSl7ay5hcHBseUNvbnRhaW5lckFycmF5Q2hhbmdlcyh0LGYoYSxyKSxtW3JdLF8sZil8fChfLnBsb3Q9ITApfXZhciB1dD1sLl9heGlzQ29uc3RyYWludEdyb3Vwc3x8W107Zm9yKEMgaW4gTClmb3Iobj0wO248dXQubGVuZ3RoO24rKyl7dmFyIGh0PXV0W25dO2lmKGh0W0NdKWZvcih2YXIgZnQgaW4gXy5jYWxjPSEwLGh0KUxbZnRdfHwoZC5nZXRGcm9tSWQodCxmdCkuX2NvbnN0cmFpbnRTaHJpbmthYmxlPSEwKX1yZXR1cm4oSih0KXx8ZS5oZWlnaHR8fGUud2lkdGgpJiYoXy5wbG90PSEwKSwoXy5wbG90fHxfLmNhbGMpJiYoXy5sYXlvdXRSZXBsb3Q9ITApLHtmbGFnczpfLHJhbmdlc0FsdGVyZWQ6TCx1bmRvaXQ6VCxyZWRvaXQ6dyxldmVudERhdGE6dn19ZnVuY3Rpb24gSih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS53aWR0aCxuPWUuaGVpZ2h0O3JldHVybiB0LmxheW91dC5hdXRvc2l6ZSYmZi5wbG90QXV0b1NpemUodCx0LmxheW91dCxlKSxlLndpZHRoIT09cnx8ZS5oZWlnaHQhPT1ufWZ1bmN0aW9uIEsodCxlLG4saSl7aWYodD1vLmdldEdyYXBoRGl2KHQpLEEuY2xlYXJQcm9taXNlUXVldWUodCksdC5mcmFtZXdvcmsmJnQuZnJhbWV3b3JrLmlzUG9sYXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0KTtvLmlzUGxhaW5PYmplY3QoZSl8fChlPXt9KSxvLmlzUGxhaW5PYmplY3Qobil8fChuPXt9KSxPYmplY3Qua2V5cyhlKS5sZW5ndGgmJih0LmNoYW5nZWQ9ITApLE9iamVjdC5rZXlzKG4pLmxlbmd0aCYmKHQuY2hhbmdlZD0hMCk7dmFyIGE9QS5jb2VyY2VUcmFjZUluZGljZXModCxpKSxzPVUodCxvLmV4dGVuZEZsYXQoe30sZSksYSksbD1zLmZsYWdzLHU9JCh0LG8uZXh0ZW5kRmxhdCh7fSxuKSksaD11LmZsYWdzOyhsLmNhbGN8fGguY2FsYykmJih0LmNhbGNkYXRhPXZvaWQgMCksbC5jbGVhckF4aXNUeXBlcyYmQS5jbGVhckF4aXNUeXBlcyh0LGEsbik7dmFyIHA9W107aWYobC5mdWxsUmVwbG90JiZoLmxheW91dFJlcGxvdCl7dmFyIGQ9dC5kYXRhLGc9dC5sYXlvdXQ7dC5kYXRhPXZvaWQgMCx0LmxheW91dD12b2lkIDAscC5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIHIucGxvdCh0LGQsZyl9KX1lbHNlIGwuZnVsbFJlcGxvdD9wLnB1c2goci5wbG90KTpoLmxheW91dFJlcGxvdD9wLnB1c2goVC5sYXlvdXRSZXBsb3QpOihwLnB1c2goZi5wcmV2aW91c1Byb21pc2VzKSxHKHQsaCx1KXx8Zi5zdXBwbHlEZWZhdWx0cyh0KSxsLnN0eWxlJiZwLnB1c2goVC5kb1RyYWNlU3R5bGUpLGwuY29sb3JiYXJzJiZwLnB1c2goVC5kb0NvbG9yQmFycyksaC5sZWdlbmQmJnAucHVzaChULmRvTGVnZW5kKSxoLmxheW91dHN0eWxlJiZwLnB1c2goVC5sYXlvdXRTdHlsZXMpLGguYXhyYW5nZSYmWShwLHUucmFuZ2VzQWx0ZXJlZCksaC50aWNrcyYmcC5wdXNoKFQuZG9UaWNrc1JlbGF5b3V0KSxoLm1vZGViYXImJnAucHVzaChULmRvTW9kZUJhciksaC5jYW1lcmEmJnAucHVzaChULmRvQ2FtZXJhKSxwLnB1c2goQykpO3AucHVzaChmLnJlaG92ZXIsZi5yZWRyYWcpLGMuYWRkKHQsSyxbdCxzLnVuZG9pdCx1LnVuZG9pdCxzLnRyYWNlc10sSyxbdCxzLnJlZG9pdCx1LnJlZG9pdCxzLnRyYWNlc10pO3ZhciB2PW8uc3luY09yQXN5bmMocCx0KTtyZXR1cm4gdiYmdi50aGVufHwodj1Qcm9taXNlLnJlc29sdmUodCkpLHYudGhlbihmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoXCJwbG90bHlfdXBkYXRlXCIse2RhdGE6cy5ldmVudERhdGEsbGF5b3V0OnUuZXZlbnREYXRhfSksdH0pfWZ1bmN0aW9uIFEodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2UuX2Z1bGxMYXlvdXQuX2d1aUVkaXRpbmc9ITA7dmFyIHI9dC5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIGUuX2Z1bGxMYXlvdXQuX2d1aUVkaXRpbmc9ITEscn19ci51cGRhdGU9SyxyLl9ndWlSZXN0eWxlPVEoQiksci5fZ3VpUmVsYXlvdXQ9UShIKSxyLl9ndWlVcGRhdGU9UShLKTt2YXIgdHQ9W3twYXR0ZXJuOi9eaGlkZGVubGFiZWxzLyxhdHRyOlwibGVnZW5kLnVpcmV2aXNpb25cIn0se3BhdHRlcm46L14oKHh8eSlheGlzXFxkKilcXC4oKGF1dG8pP3JhbmdlfHRpdGxlXFwudGV4dCkvfSx7cGF0dGVybjovYXhpc1xcZCpcXC5zaG93c3Bpa2VzJC8sYXR0cjpcIm1vZGViYXIudWlyZXZpc2lvblwifSx7cGF0dGVybjovKGhvdmVyfGRyYWcpbW9kZSQvLGF0dHI6XCJtb2RlYmFyLnVpcmV2aXNpb25cIn0se3BhdHRlcm46L14oc2NlbmVcXGQqKVxcLmNhbWVyYS99LHtwYXR0ZXJuOi9eKGdlb1xcZCopXFwuKHByb2plY3Rpb258Y2VudGVyKS99LHtwYXR0ZXJuOi9eKHRlcm5hcnlcXGQqXFwuW2FiY11heGlzKVxcLihtaW58dGl0bGVcXC50ZXh0KSQvfSx7cGF0dGVybjovXihwb2xhclxcZCpcXC5yYWRpYWxheGlzKVxcLigoYXV0byk/cmFuZ2V8YW5nbGV8dGl0bGVcXC50ZXh0KS99LHtwYXR0ZXJuOi9eKHBvbGFyXFxkKlxcLmFuZ3VsYXJheGlzKVxcLnJvdGF0aW9uL30se3BhdHRlcm46L14obWFwYm94XFxkKilcXC4oY2VudGVyfHpvb218YmVhcmluZ3xwaXRjaCkvfSx7cGF0dGVybjovXmxlZ2VuZFxcLih4fHkpJC8sYXR0cjpcImVkaXRyZXZpc2lvblwifSx7cGF0dGVybjovXihzaGFwZXN8YW5ub3RhdGlvbnMpLyxhdHRyOlwiZWRpdHJldmlzaW9uXCJ9LHtwYXR0ZXJuOi9edGl0bGVcXC50ZXh0JC8sYXR0cjpcImVkaXRyZXZpc2lvblwifV0sZXQ9W3twYXR0ZXJuOi9ec2VsZWN0ZWRwb2ludHMkLyxhdHRyOlwic2VsZWN0aW9ucmV2aXNpb25cIn0se3BhdHRlcm46LyhefHZhbHVlXFwuKXZpc2libGUkLyxhdHRyOlwibGVnZW5kLnVpcmV2aXNpb25cIn0se3BhdHRlcm46L15kaW1lbnNpb25zXFxbXFxkK1xcXVxcLmNvbnN0cmFpbnRyYW5nZS99LHtwYXR0ZXJuOi9ebm9kZVxcLih4fHl8Z3JvdXBzKS99LHtwYXR0ZXJuOi9ebGV2ZWwkL30se3BhdHRlcm46LyhefHZhbHVlXFwuKW5hbWUkL30se3BhdHRlcm46L2NvbG9yYmFyXFwudGl0bGVcXC50ZXh0JC99LHtwYXR0ZXJuOi9jb2xvcmJhclxcLih4fHkpJC8sYXR0cjpcImVkaXRyZXZpc2lvblwifV07ZnVuY3Rpb24gcnQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXSxpPXQubWF0Y2gobi5wYXR0ZXJuKTtpZihpKXJldHVybntoZWFkOmlbMV0sYXR0cjpuLmF0dHJ9fX1mdW5jdGlvbiBudCh0LGUpe3ZhciByPXMoZSx0KS5nZXQoKTtpZih2b2lkIDAhPT1yKXJldHVybiByO3ZhciBuPXQuc3BsaXQoXCIuXCIpO2ZvcihuLnBvcCgpO24ubGVuZ3RoPjE7KWlmKG4ucG9wKCksdm9pZCAwIT09KHI9cyhlLG4uam9pbihcIi5cIikrXCIudWlyZXZpc2lvblwiKS5nZXQoKSkpcmV0dXJuIHI7cmV0dXJuIGUudWlyZXZpc2lvbn1mdW5jdGlvbiBpdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKGVbcl0uX2Z1bGxJbnB1dC51aWQ9PT10KXJldHVybiByO3JldHVybi0xfWZ1bmN0aW9uIGF0KHQsZSxyKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihlW25dLnVpZD09PXQpcmV0dXJuIG47cmV0dXJuIWVbcl18fGVbcl0udWlkPy0xOnJ9ZnVuY3Rpb24gb3QodCxlKXt2YXIgcj1vLmlzUGxhaW5PYmplY3QodCksbj1BcnJheS5pc0FycmF5KHQpO3JldHVybiByfHxuPyhyJiZvLmlzUGxhaW5PYmplY3QoZSl8fG4mJkFycmF5LmlzQXJyYXkoZSkpJiZKU09OLnN0cmluZ2lmeSh0KT09PUpTT04uc3RyaW5naWZ5KGUpOnQ9PT1lfWZ1bmN0aW9uIHN0KHQsZSxyLG4pe3ZhciBpLGEsbCxjPW4uZ2V0VmFsT2JqZWN0LHU9bi5mbGFncyxoPW4uaW1tdXRhYmxlLGY9bi5pbkFycmF5LHA9bi5hcnJheUluZGV4O2Z1bmN0aW9uIGQoKXt2YXIgdD1pLmVkaXRUeXBlO2YmJi0xIT09dC5pbmRleE9mKFwiYXJyYXlkcmF3XCIpP28ucHVzaFVuaXF1ZSh1LmFycmF5c1tmXSxwKTooTS51cGRhdGUodSxpKSxcIm5vbmVcIiE9PXQmJnUubkNoYW5nZXMrKyxuLnRyYW5zaXRpb24mJmkuYW5pbSYmdS5uQ2hhbmdlc0FuaW0rKywoVy50ZXN0KGwpfHxYLnRlc3QobCkpJiYodS5yYW5nZXNBbHRlcmVkW3JbMF1dPTEpLFoudGVzdChsKSYmcyhlLFwiX2lucHV0RG9tYWluXCIpLnNldChudWxsKSxcImRhdGFyZXZpc2lvblwiPT09YSYmKHUubmV3RGF0YVJldmlzaW9uPTEpKX1mdW5jdGlvbiBnKHQpe3JldHVyblwiZGF0YV9hcnJheVwiPT09dC52YWxUeXBlfHx0LmFycmF5T2t9Zm9yKGEgaW4gdCl7aWYodS5jYWxjJiYhbi50cmFuc2l0aW9uKXJldHVybjt2YXIgdj10W2FdLG09ZVthXSx5PXIuY29uY2F0KGEpO2lmKGw9eS5qb2luKFwiLlwiKSxcIl9cIiE9PWEuY2hhckF0KDApJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB2JiZ2IT09bSl7aWYoKFwidGljazBcIj09PWF8fFwiZHRpY2tcIj09PWEpJiZcImdlb1wiIT09clswXSl7dmFyIHg9ZS50aWNrbW9kZTtpZihcImF1dG9cIj09PXh8fFwiYXJyYXlcIj09PXh8fCF4KWNvbnRpbnVlfWlmKChcInJhbmdlXCIhPT1hfHwhZS5hdXRvcmFuZ2UpJiYoXCJ6bWluXCIhPT1hJiZcInptYXhcIiE9PWF8fFwiY29udG91cmNhcnBldFwiIT09ZS50eXBlKSYmKGk9Yyh5KSkmJighaS5fY29tcGFyZUFzSlNPTnx8SlNPTi5zdHJpbmdpZnkodikhPT1KU09OLnN0cmluZ2lmeShtKSkpe3ZhciBiLF89aS52YWxUeXBlLHc9ZyhpKSxrPUFycmF5LmlzQXJyYXkodiksQT1BcnJheS5pc0FycmF5KG0pO2lmKGsmJkEpe3ZhciBUPVwiX2lucHV0X1wiK2EsUz10W1RdLEU9ZVtUXTtpZihBcnJheS5pc0FycmF5KFMpJiZTPT09RSljb250aW51ZX1pZih2b2lkIDA9PT1tKXcmJms/dS5jYWxjPSEwOmQoKTtlbHNlIGlmKGkuX2lzTGlua2VkVG9BcnJheSl7dmFyIEM9W10sTD0hMTtmfHwodS5hcnJheXNbYV09Qyk7dmFyIHo9TWF0aC5taW4odi5sZW5ndGgsbS5sZW5ndGgpLE89TWF0aC5tYXgodi5sZW5ndGgsbS5sZW5ndGgpO2lmKHohPT1PKXtpZihcImFycmF5ZHJhd1wiIT09aS5lZGl0VHlwZSl7ZCgpO2NvbnRpbnVlfUw9ITB9Zm9yKGI9MDtiPHo7YisrKXN0KHZbYl0sbVtiXSx5LmNvbmNhdChiKSxvLmV4dGVuZEZsYXQoe2luQXJyYXk6YSxhcnJheUluZGV4OmJ9LG4pKTtpZihMKWZvcihiPXo7YjxPO2IrKylDLnB1c2goYil9ZWxzZSFfJiZvLmlzUGxhaW5PYmplY3Qodik/c3QodixtLHksbik6dz9rJiZBPyhoJiYodS5jYWxjPSEwKSwoaHx8bi5uZXdEYXRhUmV2aXNpb24pJiZkKCkpOmshPT1BP3UuY2FsYz0hMDpkKCk6ayYmQSYmdi5sZW5ndGg9PT1tLmxlbmd0aCYmU3RyaW5nKHYpPT09U3RyaW5nKG0pfHxkKCl9fX1mb3IoYSBpbiBlKWlmKCEoYSBpbiB0fHxcIl9cIj09PWEuY2hhckF0KDApfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlW2FdKSl7aWYoZyhpPWMoci5jb25jYXQoYSkpKSYmQXJyYXkuaXNBcnJheShlW2FdKSlyZXR1cm4gdm9pZCh1LmNhbGM9ITApO2QoKX19ZnVuY3Rpb24gbHQodCl7dmFyIGU9bi5zZWxlY3QodCkscj10Ll9mdWxsTGF5b3V0O2lmKHIuX2NvbnRhaW5lcj1lLnNlbGVjdEFsbChcIi5wbG90LWNvbnRhaW5lclwiKS5kYXRhKFswXSksci5fY29udGFpbmVyLmVudGVyKCkuaW5zZXJ0KFwiZGl2XCIsXCI6Zmlyc3QtY2hpbGRcIikuY2xhc3NlZChcInBsb3QtY29udGFpbmVyXCIsITApLmNsYXNzZWQoXCJwbG90bHlcIiwhMCksci5fcGFwZXJkaXY9ci5fY29udGFpbmVyLnNlbGVjdEFsbChcIi5zdmctY29udGFpbmVyXCIpLmRhdGEoWzBdKSxyLl9wYXBlcmRpdi5lbnRlcigpLmFwcGVuZChcImRpdlwiKS5jbGFzc2VkKFwic3ZnLWNvbnRhaW5lclwiLCEwKS5zdHlsZShcInBvc2l0aW9uXCIsXCJyZWxhdGl2ZVwiKSxyLl9nbGNvbnRhaW5lcj1yLl9wYXBlcmRpdi5zZWxlY3RBbGwoXCIuZ2wtY29udGFpbmVyXCIpLmRhdGEoW3t9XSksci5fZ2xjb250YWluZXIuZW50ZXIoKS5hcHBlbmQoXCJkaXZcIikuY2xhc3NlZChcImdsLWNvbnRhaW5lclwiLCEwKSxyLl9wYXBlcmRpdi5zZWxlY3RBbGwoXCIubWFpbi1zdmdcIikucmVtb3ZlKCksci5fcGFwZXJkaXYuc2VsZWN0KFwiLm1vZGViYXItY29udGFpbmVyXCIpLnJlbW92ZSgpLHIuX3BhcGVyPXIuX3BhcGVyZGl2Lmluc2VydChcInN2Z1wiLFwiOmZpcnN0LWNoaWxkXCIpLmNsYXNzZWQoXCJtYWluLXN2Z1wiLCEwKSxyLl90b3BwYXBlcj1yLl9wYXBlcmRpdi5hcHBlbmQoXCJzdmdcIikuY2xhc3NlZChcIm1haW4tc3ZnXCIsITApLHIuX21vZGViYXJkaXY9ci5fcGFwZXJkaXYuYXBwZW5kKFwiZGl2XCIpLHIuX2hvdmVycGFwZXI9ci5fcGFwZXJkaXYuYXBwZW5kKFwic3ZnXCIpLmNsYXNzZWQoXCJtYWluLXN2Z1wiLCEwKSwhci5fdWlkKXt2YXIgaT17fTtuLnNlbGVjdEFsbChcImRlZnNcIikuZWFjaChmdW5jdGlvbigpe3RoaXMuaWQmJihpW3RoaXMuaWQuc3BsaXQoXCItXCIpWzFdXT0xKX0pLHIuX3VpZD1vLnJhbmRzdHIoaSl9ci5fcGFwZXJkaXYuc2VsZWN0QWxsKFwiLm1haW4tc3ZnXCIpLmF0dHIoeC5zdmdBdHRycyksci5fZGVmcz1yLl9wYXBlci5hcHBlbmQoXCJkZWZzXCIpLmF0dHIoXCJpZFwiLFwiZGVmcy1cIityLl91aWQpLHIuX2NsaXBzPXIuX2RlZnMuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiY2xpcHNcIiwhMCksci5fdG9wZGVmcz1yLl90b3BwYXBlci5hcHBlbmQoXCJkZWZzXCIpLmF0dHIoXCJpZFwiLFwidG9wZGVmcy1cIityLl91aWQpLHIuX3RvcGNsaXBzPXIuX3RvcGRlZnMuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiY2xpcHNcIiwhMCksci5fYmdMYXllcj1yLl9wYXBlci5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJiZ2xheWVyXCIsITApLHIuX2RyYWdnZXJzPXIuX3BhcGVyLmFwcGVuZChcImdcIikuY2xhc3NlZChcImRyYWdsYXllclwiLCEwKTt2YXIgYT1yLl9wYXBlci5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJsYXllci1iZWxvd1wiLCEwKTtyLl9pbWFnZUxvd2VyTGF5ZXI9YS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJpbWFnZWxheWVyXCIsITApLHIuX3NoYXBlTG93ZXJMYXllcj1hLmFwcGVuZChcImdcIikuY2xhc3NlZChcInNoYXBlbGF5ZXJcIiwhMCksci5fY2FydGVzaWFubGF5ZXI9ci5fcGFwZXIuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiY2FydGVzaWFubGF5ZXJcIiwhMCksci5fcG9sYXJsYXllcj1yLl9wYXBlci5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJwb2xhcmxheWVyXCIsITApLHIuX3Rlcm5hcnlsYXllcj1yLl9wYXBlci5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJ0ZXJuYXJ5bGF5ZXJcIiwhMCksci5fZ2VvbGF5ZXI9ci5fcGFwZXIuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiZ2VvbGF5ZXJcIiwhMCksci5fcGllbGF5ZXI9ci5fcGFwZXIuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwicGllbGF5ZXJcIiwhMCksci5fc3VuYnVyc3RsYXllcj1yLl9wYXBlci5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJzdW5idXJzdGxheWVyXCIsITApLHIuX2dsaW1hZ2VzPXIuX3BhcGVyLmFwcGVuZChcImdcIikuY2xhc3NlZChcImdsaW1hZ2VzXCIsITApO3ZhciBzPXIuX3RvcHBhcGVyLmFwcGVuZChcImdcIikuY2xhc3NlZChcImxheWVyLWFib3ZlXCIsITApO3IuX2ltYWdlVXBwZXJMYXllcj1zLmFwcGVuZChcImdcIikuY2xhc3NlZChcImltYWdlbGF5ZXJcIiwhMCksci5fc2hhcGVVcHBlckxheWVyPXMuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwic2hhcGVsYXllclwiLCEwKSxyLl9pbmZvbGF5ZXI9ci5fdG9wcGFwZXIuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiaW5mb2xheWVyXCIsITApLHIuX21lbnVsYXllcj1yLl90b3BwYXBlci5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJtZW51bGF5ZXJcIiwhMCksci5fem9vbWxheWVyPXIuX3RvcHBhcGVyLmFwcGVuZChcImdcIikuY2xhc3NlZChcInpvb21sYXllclwiLCEwKSxyLl9ob3ZlcmxheWVyPXIuX2hvdmVycGFwZXIuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiaG92ZXJsYXllclwiLCEwKSxyLl9tb2RlYmFyZGl2LmNsYXNzZWQoXCJtb2RlYmFyLWNvbnRhaW5lclwiLCEwKS5zdHlsZShcInBvc2l0aW9uXCIsXCJhYnNvbHV0ZVwiKS5zdHlsZShcInRvcFwiLFwiMHB4XCIpLnN0eWxlKFwicmlnaHRcIixcIjBweFwiKSx0LmVtaXQoXCJwbG90bHlfZnJhbWV3b3JrXCIpfXIucmVhY3Q9ZnVuY3Rpb24odCxlLG4saSl7dmFyIGEsbDt2YXIgYz0odD1vLmdldEdyYXBoRGl2KHQpKS5fZnVsbERhdGEscD10Ll9mdWxsTGF5b3V0O2lmKG8uaXNQbG90RGl2KHQpJiZjJiZwKXtpZihvLmlzUGxhaW5PYmplY3QoZSkpe3ZhciBkPWU7ZT1kLmRhdGEsbj1kLmxheW91dCxpPWQuY29uZmlnLGE9ZC5mcmFtZXN9dmFyIGc9ITE7aWYoaSl7dmFyIHY9by5leHRlbmREZWVwKHt9LHQuX2NvbnRleHQpO3QuX2NvbnRleHQ9dm9pZCAwLE8odCxpKSxnPWZ1bmN0aW9uIHQoZSxyKXt2YXIgbjtmb3IobiBpbiBlKWlmKFwiX1wiIT09bi5jaGFyQXQoMCkpe3ZhciBpPWVbbl0sYT1yW25dO2lmKGkhPT1hKWlmKG8uaXNQbGFpbk9iamVjdChpKSYmby5pc1BsYWluT2JqZWN0KGEpKXtpZih0KGksYSkpcmV0dXJuITB9ZWxzZXtpZighQXJyYXkuaXNBcnJheShpKXx8IUFycmF5LmlzQXJyYXkoYSkpcmV0dXJuITA7aWYoaS5sZW5ndGghPT1hLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKylpZihpW3NdIT09YVtzXSl7aWYoIW8uaXNQbGFpbk9iamVjdChpW3NdKXx8IW8uaXNQbGFpbk9iamVjdChhW3NdKSlyZXR1cm4hMDtpZih0KGlbc10sYVtzXSkpcmV0dXJuITB9fX19KHYsdC5fY29udGV4dCl9dC5kYXRhPWV8fFtdLEEuY2xlYW5EYXRhKHQuZGF0YSksdC5sYXlvdXQ9bnx8e30sQS5jbGVhbkxheW91dCh0LmxheW91dCksZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxsLGMsdSxoLGYscCxkPW4uX3ByZUdVSSxnPVtdLHY9e307Zm9yKGkgaW4gZCl7aWYodT1ydChpLHR0KSl7aWYoYT11LmF0dHJ8fHUuaGVhZCtcIi51aXJldmlzaW9uXCIsKGM9KGw9cyhuLGEpLmdldCgpKSYmbnQoYSxlKSkmJmM9PT1sJiYobnVsbD09PShoPWRbaV0pJiYoaD12b2lkIDApLG90KHA9KGY9cyhlLGkpKS5nZXQoKSxoKSkpe3ZvaWQgMD09PXAmJlwiYXV0b3JhbmdlXCI9PT1pLnN1YnN0cihpLmxlbmd0aC05KSYmZy5wdXNoKGkuc3Vic3RyKDAsaS5sZW5ndGgtMTApKSxmLnNldChOKHMobixpKS5nZXQoKSkpO2NvbnRpbnVlfX1lbHNlIG8ud2FybihcInVucmVjb2duaXplZCBHVUkgZWRpdDogXCIraSk7ZGVsZXRlIGRbaV0sXCJyYW5nZVtcIj09PWkuc3Vic3RyKGkubGVuZ3RoLTgsNikmJih2W2kuc3Vic3RyKDAsaS5sZW5ndGgtOSldPTEpfWZvcih2YXIgbT0wO208Zy5sZW5ndGg7bSsrKXt2YXIgeT1nW21dO2lmKHZbeV0pe3ZhciB4PXMoZSx5KS5nZXQoKTt4JiZkZWxldGUgeC5hdXRvcmFuZ2V9fXZhciBiPW4uX3RyYWNlUHJlR1VJO2Zvcih2YXIgXyBpbiBiKXt2YXIgdyxrPWJbX10sQT1udWxsO2ZvcihpIGluIGspe2lmKCFBKXt2YXIgVD1pdChfLHIpO2lmKFQ8MCl7ZGVsZXRlIGJbX107YnJlYWt9dmFyIE09YXQoXyx0LCh3PXJbVF0uX2Z1bGxJbnB1dCkuaW5kZXgpO2lmKE08MCl7ZGVsZXRlIGJbX107YnJlYWt9QT10W01dfWlmKHU9cnQoaSxldCkpe2lmKHUuYXR0cj9jPShsPXMobix1LmF0dHIpLmdldCgpKSYmbnQodS5hdHRyLGUpOihsPXcudWlyZXZpc2lvbix2b2lkIDA9PT0oYz1BLnVpcmV2aXNpb24pJiYoYz1lLnVpcmV2aXNpb24pKSxjJiZjPT09bCYmKG51bGw9PT0oaD1rW2ldKSYmKGg9dm9pZCAwKSxvdChwPShmPXMoQSxpKSkuZ2V0KCksaCkpKXtmLnNldChOKHModyxpKS5nZXQoKSkpO2NvbnRpbnVlfX1lbHNlIG8ud2FybihcInVucmVjb2duaXplZCBHVUkgZWRpdDogXCIraStcIiBpbiB0cmFjZSB1aWQgXCIrXyk7ZGVsZXRlIGtbaV19fX0odC5kYXRhLHQubGF5b3V0LGMscCksZi5zdXBwbHlEZWZhdWx0cyh0LHtza2lwVXBkYXRlQ2FsYzohMH0pO3ZhciBtPXQuX2Z1bGxEYXRhLHk9dC5fZnVsbExheW91dCx4PXZvaWQgMD09PXkuZGF0YXJldmlzaW9uLGI9eS50cmFuc2l0aW9uLF89ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1NLmxheW91dEZsYWdzKCk7YS5hcnJheXM9e30sYS5yYW5nZXNBbHRlcmVkPXt9LGEubkNoYW5nZXM9MCxhLm5DaGFuZ2VzQW5pbT0wLHN0KGUscixbXSx7Z2V0VmFsT2JqZWN0OmZ1bmN0aW9uKHQpe3JldHVybiBoLmdldExheW91dFZhbE9iamVjdChyLHQpfSxmbGFnczphLGltbXV0YWJsZTpuLHRyYW5zaXRpb246aSxnZDp0fSksKGEucGxvdHx8YS5jYWxjKSYmKGEubGF5b3V0UmVwbG90PSEwKTtpJiZhLm5DaGFuZ2VzJiZhLm5DaGFuZ2VzQW5pbSYmKGEuYW5pbT1hLm5DaGFuZ2VzPT09YS5uQ2hhbmdlc0FuaW0/XCJhbGxcIjpcInNvbWVcIik7cmV0dXJuIGF9KHQscCx5LHgsYiksdz1fLm5ld0RhdGFSZXZpc2lvbixrPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1lLmxlbmd0aD09PXIubGVuZ3RoO2lmKCFpJiYhbylyZXR1cm57ZnVsbFJlcGxvdDohMCxjYWxjOiEwfTt2YXIgcyxsLGM9TS50cmFjZUZsYWdzKCk7Yy5hcnJheXM9e30sYy5uQ2hhbmdlcz0wLGMubkNoYW5nZXNBbmltPTA7dmFyIHU9e2dldFZhbE9iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gaC5nZXRUcmFjZVZhbE9iamVjdChsLHQpfSxmbGFnczpjLGltbXV0YWJsZTpuLHRyYW5zaXRpb246aSxuZXdEYXRhUmV2aXNpb246YSxnZDp0fSxwPXt9O2ZvcihzPTA7czxlLmxlbmd0aDtzKyspaWYocltzXSl7aWYobD1yW3NdLl9mdWxsSW5wdXQsZi5oYXNNYWtlc0RhdGFUcmFuc2Zvcm0obCkmJihsPXJbc10pLHBbbC51aWRdKWNvbnRpbnVlO3BbbC51aWRdPTEsc3QoZVtzXS5fZnVsbElucHV0LGwsW10sdSl9KGMuY2FsY3x8Yy5wbG90KSYmKGMuZnVsbFJlcGxvdD0hMCk7aSYmYy5uQ2hhbmdlcyYmYy5uQ2hhbmdlc0FuaW0mJihjLmFuaW09Yy5uQ2hhbmdlcz09PWMubkNoYW5nZXNBbmltJiZvP1wiYWxsXCI6XCJzb21lXCIpO3JldHVybiBjfSh0LGMsbSx4LGIsdyk7Sih0KSYmKF8ubGF5b3V0UmVwbG90PSEwKSxrLmNhbGN8fF8uY2FsYz90LmNhbGNkYXRhPXZvaWQgMDpmLnN1cHBseURlZmF1bHRzVXBkYXRlQ2FsYyh0LmNhbGNkYXRhLG0pO3ZhciBTPVtdO2lmKGEmJih0Ll90cmFuc2l0aW9uRGF0YT17fSxmLmNyZWF0ZVRyYW5zaXRpb25EYXRhKHQpLFMucHVzaChmdW5jdGlvbigpe3JldHVybiByLmFkZEZyYW1lcyh0LGEpfSkpLHkudHJhbnNpdGlvbiYmIWcmJihrLmFuaW18fF8uYW5pbSkpZi5kb0NhbGNkYXRhKHQpLFQuZG9BdXRvUmFuZ2VBbmRDb25zdHJhaW50cyh0KSxTLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gZi50cmFuc2l0aW9uRnJvbVJlYWN0KHQsayxfLHApfSk7ZWxzZSBpZihrLmZ1bGxSZXBsb3R8fF8ubGF5b3V0UmVwbG90fHxnKXQuX2Z1bGxMYXlvdXQuX3NraXBEZWZhdWx0cz0hMCxTLnB1c2goci5wbG90KTtlbHNle2Zvcih2YXIgRSBpbiBfLmFycmF5cyl7dmFyIEw9Xy5hcnJheXNbRV07aWYoTC5sZW5ndGgpe3ZhciB6PXUuZ2V0Q29tcG9uZW50TWV0aG9kKEUsXCJkcmF3T25lXCIpO2lmKHohPT1vLm5vb3ApZm9yKHZhciBJPTA7STxMLmxlbmd0aDtJKyspeih0LExbSV0pO2Vsc2V7dmFyIEQ9dS5nZXRDb21wb25lbnRNZXRob2QoRSxcImRyYXdcIik7aWYoRD09PW8ubm9vcCl0aHJvdyBuZXcgRXJyb3IoXCJjYW5ub3QgZHJhdyBjb21wb25lbnRzOiBcIitFKTtEKHQpfX19Uy5wdXNoKGYucHJldmlvdXNQcm9taXNlcyksay5zdHlsZSYmUy5wdXNoKFQuZG9UcmFjZVN0eWxlKSxrLmNvbG9yYmFycyYmUy5wdXNoKFQuZG9Db2xvckJhcnMpLF8ubGVnZW5kJiZTLnB1c2goVC5kb0xlZ2VuZCksXy5sYXlvdXRzdHlsZSYmUy5wdXNoKFQubGF5b3V0U3R5bGVzKSxfLmF4cmFuZ2UmJlkoUyksXy50aWNrcyYmUy5wdXNoKFQuZG9UaWNrc1JlbGF5b3V0KSxfLm1vZGViYXImJlMucHVzaChULmRvTW9kZUJhciksXy5jYW1lcmEmJlMucHVzaChULmRvQ2FtZXJhKSxTLnB1c2goQyl9Uy5wdXNoKGYucmVob3ZlcixmLnJlZHJhZyksKGw9by5zeW5jT3JBc3luYyhTLHQpKSYmbC50aGVufHwobD1Qcm9taXNlLnJlc29sdmUodCkpfWVsc2UgbD1yLm5ld1Bsb3QodCxlLG4saSk7cmV0dXJuIGwudGhlbihmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoXCJwbG90bHlfcmVhY3RcIix7ZGF0YTplLGxheW91dDpufSksdH0pfSxyLmFuaW1hdGU9ZnVuY3Rpb24odCxlLHIpe2lmKHQ9by5nZXRHcmFwaERpdih0KSwhby5pc1Bsb3REaXYodCkpdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBlbGVtZW50IGlzIG5vdCBhIFBsb3RseSBwbG90OiBcIit0K1wiLiBJdCdzIGxpa2VseSB0aGF0IHlvdSd2ZSBmYWlsZWQgdG8gY3JlYXRlIGEgcGxvdCBiZWZvcmUgYW5pbWF0aW5nIGl0LiBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9wbG90Lmx5L2phdmFzY3JpcHQvYW5pbWF0aW9ucy9cIik7dmFyIG49dC5fdHJhbnNpdGlvbkRhdGE7bi5fZnJhbWVRdWV1ZXx8KG4uX2ZyYW1lUXVldWU9W10pO3ZhciBpPShyPWYuc3VwcGx5QW5pbWF0aW9uRGVmYXVsdHMocikpLnRyYW5zaXRpb24sYT1yLmZyYW1lO2Z1bmN0aW9uIHModCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/dD49aS5sZW5ndGg/aVswXTppW3RdOml9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT90Pj1hLmxlbmd0aD9hWzBdOmFbdF06YX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9MDtyZXR1cm4gZnVuY3Rpb24oKXtpZih0JiYrK3I9PT1lKXJldHVybiB0KCl9fXJldHVybiB2b2lkIDA9PT1uLl9mcmFtZVdhaXRpbmdDbnQmJihuLl9mcmFtZVdhaXRpbmdDbnQ9MCksbmV3IFByb21pc2UoZnVuY3Rpb24oYSx1KXtmdW5jdGlvbiBoKCl7bi5fY3VycmVudEZyYW1lJiZuLl9jdXJyZW50RnJhbWUub25Db21wbGV0ZSYmbi5fY3VycmVudEZyYW1lLm9uQ29tcGxldGUoKTt2YXIgZT1uLl9jdXJyZW50RnJhbWU9bi5fZnJhbWVRdWV1ZS5zaGlmdCgpO2lmKGUpe3ZhciByPWUubmFtZT9lLm5hbWUudG9TdHJpbmcoKTpudWxsO3QuX2Z1bGxMYXlvdXQuX2N1cnJlbnRGcmFtZT1yLG4uX2xhc3RGcmFtZUF0PURhdGUubm93KCksbi5fdGltZVRvTmV4dD1lLmZyYW1lT3B0cy5kdXJhdGlvbixmLnRyYW5zaXRpb24odCxlLmZyYW1lLmRhdGEsZS5mcmFtZS5sYXlvdXQsQS5jb2VyY2VUcmFjZUluZGljZXModCxlLmZyYW1lLnRyYWNlcyksZS5mcmFtZU9wdHMsZS50cmFuc2l0aW9uT3B0cykudGhlbihmdW5jdGlvbigpe2Uub25Db21wbGV0ZSYmZS5vbkNvbXBsZXRlKCl9KSx0LmVtaXQoXCJwbG90bHlfYW5pbWF0aW5nZnJhbWVcIix7bmFtZTpyLGZyYW1lOmUuZnJhbWUsYW5pbWF0aW9uOntmcmFtZTplLmZyYW1lT3B0cyx0cmFuc2l0aW9uOmUudHJhbnNpdGlvbk9wdHN9fSl9ZWxzZSB0LmVtaXQoXCJwbG90bHlfYW5pbWF0ZWRcIiksd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKG4uX2FuaW1hdGlvblJhZiksbi5fYW5pbWF0aW9uUmFmPW51bGx9ZnVuY3Rpb24gcCgpe3QuZW1pdChcInBsb3RseV9hbmltYXRpbmdcIiksbi5fbGFzdEZyYW1lQXQ9LTEvMCxuLl90aW1lVG9OZXh0PTAsbi5fcnVubmluZ1RyYW5zaXRpb25zPTAsbi5fY3VycmVudEZyYW1lPW51bGw7dmFyIGU9ZnVuY3Rpb24oKXtuLl9hbmltYXRpb25SYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShlKSxEYXRlLm5vdygpLW4uX2xhc3RGcmFtZUF0Pm4uX3RpbWVUb05leHQmJmgoKX07ZSgpfXZhciBkLGcsdj0wO2Z1bmN0aW9uIG0odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/dj49aS5sZW5ndGg/dC50cmFuc2l0aW9uT3B0cz1pW3ZdOnQudHJhbnNpdGlvbk9wdHM9aVswXTp0LnRyYW5zaXRpb25PcHRzPWksdisrLHR9dmFyIHk9W10seD1udWxsPT1lLGI9QXJyYXkuaXNBcnJheShlKTtpZigheCYmIWImJm8uaXNQbGFpbk9iamVjdChlKSl5LnB1c2goe3R5cGU6XCJvYmplY3RcIixkYXRhOm0oby5leHRlbmRGbGF0KHt9LGUpKX0pO2Vsc2UgaWYoeHx8LTEhPT1bXCJzdHJpbmdcIixcIm51bWJlclwiXS5pbmRleE9mKHR5cGVvZiBlKSlmb3IoZD0wO2Q8bi5fZnJhbWVzLmxlbmd0aDtkKyspKGc9bi5fZnJhbWVzW2RdKSYmKHh8fFN0cmluZyhnLmdyb3VwKT09PVN0cmluZyhlKSkmJnkucHVzaCh7dHlwZTpcImJ5bmFtZVwiLG5hbWU6U3RyaW5nKGcubmFtZSksZGF0YTptKHtuYW1lOmcubmFtZX0pfSk7ZWxzZSBpZihiKWZvcihkPTA7ZDxlLmxlbmd0aDtkKyspe3ZhciBfPWVbZF07LTEhPT1bXCJudW1iZXJcIixcInN0cmluZ1wiXS5pbmRleE9mKHR5cGVvZiBfKT8oXz1TdHJpbmcoXykseS5wdXNoKHt0eXBlOlwiYnluYW1lXCIsbmFtZTpfLGRhdGE6bSh7bmFtZTpffSl9KSk6by5pc1BsYWluT2JqZWN0KF8pJiZ5LnB1c2goe3R5cGU6XCJvYmplY3RcIixkYXRhOm0oby5leHRlbmRGbGF0KHt9LF8pKX0pfWZvcihkPTA7ZDx5Lmxlbmd0aDtkKyspaWYoXCJieW5hbWVcIj09PShnPXlbZF0pLnR5cGUmJiFuLl9mcmFtZUhhc2hbZy5kYXRhLm5hbWVdKXJldHVybiBvLndhcm4oJ2FuaW1hdGUgZmFpbHVyZTogZnJhbWUgbm90IGZvdW5kOiBcIicrZy5kYXRhLm5hbWUrJ1wiJyksdm9pZCB1KCk7LTEhPT1bXCJuZXh0XCIsXCJpbW1lZGlhdGVcIl0uaW5kZXhPZihyLm1vZGUpJiZmdW5jdGlvbigpe2lmKDAhPT1uLl9mcmFtZVF1ZXVlLmxlbmd0aCl7Zm9yKDtuLl9mcmFtZVF1ZXVlLmxlbmd0aDspe3ZhciBlPW4uX2ZyYW1lUXVldWUucG9wKCk7ZS5vbkludGVycnVwdCYmZS5vbkludGVycnVwdCgpfXQuZW1pdChcInBsb3RseV9hbmltYXRpb25pbnRlcnJ1cHRlZFwiLFtdKX19KCksXCJyZXZlcnNlXCI9PT1yLmRpcmVjdGlvbiYmeS5yZXZlcnNlKCk7dmFyIHc9dC5fZnVsbExheW91dC5fY3VycmVudEZyYW1lO2lmKHcmJnIuZnJvbWN1cnJlbnQpe3ZhciBrPS0xO2ZvcihkPTA7ZDx5Lmxlbmd0aDtkKyspaWYoXCJieW5hbWVcIj09PShnPXlbZF0pLnR5cGUmJmcubmFtZT09PXcpe2s9ZDticmVha31pZihrPjAmJms8eS5sZW5ndGgtMSl7dmFyIFQ9W107Zm9yKGQ9MDtkPHkubGVuZ3RoO2QrKylnPXlbZF0sKFwiYnluYW1lXCIhPT15W2RdLnR5cGV8fGQ+aykmJlQucHVzaChnKTt5PVR9fXkubGVuZ3RoPjA/ZnVuY3Rpb24oZSl7aWYoMCE9PWUubGVuZ3RoKXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG87bz1cImJ5bmFtZVwiPT09ZVtpXS50eXBlP2YuY29tcHV0ZUZyYW1lKHQsZVtpXS5uYW1lKTplW2ldLmRhdGE7dmFyIGg9bChpKSxkPXMoaSk7ZC5kdXJhdGlvbj1NYXRoLm1pbihkLmR1cmF0aW9uLGguZHVyYXRpb24pO3ZhciBnPXtmcmFtZTpvLG5hbWU6ZVtpXS5uYW1lLGZyYW1lT3B0czpoLHRyYW5zaXRpb25PcHRzOmR9O2k9PT1lLmxlbmd0aC0xJiYoZy5vbkNvbXBsZXRlPWMoYSwyKSxnLm9uSW50ZXJydXB0PXUpLG4uX2ZyYW1lUXVldWUucHVzaChnKX1cImltbWVkaWF0ZVwiPT09ci5tb2RlJiYobi5fbGFzdEZyYW1lQXQ9LTEvMCksbi5fYW5pbWF0aW9uUmFmfHxwKCl9fSh5KToodC5lbWl0KFwicGxvdGx5X2FuaW1hdGVkXCIpLGEoKSl9KX0sci5hZGRGcmFtZXM9ZnVuY3Rpb24odCxlLHIpe2lmKHQ9by5nZXRHcmFwaERpdih0KSxudWxsPT1lKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTtpZighby5pc1Bsb3REaXYodCkpdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBlbGVtZW50IGlzIG5vdCBhIFBsb3RseSBwbG90OiBcIit0K1wiLiBJdCdzIGxpa2VseSB0aGF0IHlvdSd2ZSBmYWlsZWQgdG8gY3JlYXRlIGEgcGxvdCBiZWZvcmUgYWRkaW5nIGZyYW1lcy4gRm9yIG1vcmUgZGV0YWlscywgc2VlIGh0dHBzOi8vcGxvdC5seS9qYXZhc2NyaXB0L2FuaW1hdGlvbnMvXCIpO3ZhciBuLGksYSxzLGw9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyx1PXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g7aWYoIUFycmF5LmlzQXJyYXkoZSkpdGhyb3cgbmV3IEVycm9yKFwiYWRkRnJhbWVzIGZhaWx1cmU6IGZyYW1lTGlzdCBtdXN0IGJlIGFuIEFycmF5IG9mIGZyYW1lIGRlZmluaXRpb25zXCIrZSk7dmFyIGg9bC5sZW5ndGgrMiplLmxlbmd0aCxwPVtdLGQ9e307Zm9yKG49ZS5sZW5ndGgtMTtuPj0wO24tLSlpZihvLmlzUGxhaW5PYmplY3QoZVtuXSkpe3ZhciBnPWVbbl0ubmFtZSx2PSh1W2ddfHxkW2ddfHx7fSkubmFtZSxtPWVbbl0ubmFtZSx5PXVbdl18fGRbdl07diYmbSYmXCJudW1iZXJcIj09dHlwZW9mIG0mJnkmJkU8NSYmKEUrKyxvLndhcm4oJ2FkZEZyYW1lczogb3ZlcndyaXRpbmcgZnJhbWUgXCInKyh1W3ZdfHxkW3ZdKS5uYW1lKydcIiB3aXRoIGEgZnJhbWUgd2hvc2UgbmFtZSBvZiB0eXBlIFwibnVtYmVyXCIgYWxzbyBlcXVhdGVzIHRvIFwiJyt2KydcIi4gVGhpcyBpcyB2YWxpZCBidXQgbWF5IHBvdGVudGlhbGx5IGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBzaW5jZSBhbGwgcGxvdGx5LmpzIGZyYW1lIG5hbWVzIGFyZSBzdG9yZWQgaW50ZXJuYWxseSBhcyBzdHJpbmdzLicpLDU9PT1FJiZvLndhcm4oXCJhZGRGcmFtZXM6IFRoaXMgQVBJIGNhbGwgaGFzIHlpZWxkZWQgdG9vIG1hbnkgb2YgdGhlc2Ugd2FybmluZ3MuIEZvciB0aGUgcmVzdCBvZiB0aGlzIGNhbGwsIGZ1cnRoZXIgd2FybmluZ3MgYWJvdXQgbnVtZXJpYyBmcmFtZSBuYW1lcyB3aWxsIGJlIHN1cHByZXNzZWQuXCIpKSxkW2ddPXtuYW1lOmd9LHAucHVzaCh7ZnJhbWU6Zi5zdXBwbHlGcmFtZURlZmF1bHRzKGVbbl0pLGluZGV4OnImJnZvaWQgMCE9PXJbbl0mJm51bGwhPT1yW25dP3Jbbl06aCtufSl9cC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaW5kZXg+ZS5pbmRleD8tMTp0LmluZGV4PGUuaW5kZXg/MTowfSk7dmFyIHg9W10sYj1bXSxfPWwubGVuZ3RoO2ZvcihuPXAubGVuZ3RoLTE7bj49MDtuLS0pe2lmKFwibnVtYmVyXCI9PXR5cGVvZihpPXBbbl0uZnJhbWUpLm5hbWUmJm8ud2FybihcIldhcm5pbmc6IGFkZEZyYW1lcyBhY2NlcHRzIGZyYW1lcyB3aXRoIG51bWVyaWMgbmFtZXMsIGJ1dCB0aGUgbnVtYmVycyBhcmVpbXBsaWNpdGx5IGNhc3QgdG8gc3RyaW5nc1wiKSwhaS5uYW1lKWZvcig7dVtpLm5hbWU9XCJmcmFtZSBcIit0Ll90cmFuc2l0aW9uRGF0YS5fY291bnRlcisrXTspO2lmKHVbaS5uYW1lXSl7Zm9yKGE9MDthPGwubGVuZ3RoJiYobFthXXx8e30pLm5hbWUhPT1pLm5hbWU7YSsrKTt4LnB1c2goe3R5cGU6XCJyZXBsYWNlXCIsaW5kZXg6YSx2YWx1ZTppfSksYi51bnNoaWZ0KHt0eXBlOlwicmVwbGFjZVwiLGluZGV4OmEsdmFsdWU6bFthXX0pfWVsc2Ugcz1NYXRoLm1heCgwLE1hdGgubWluKHBbbl0uaW5kZXgsXykpLHgucHVzaCh7dHlwZTpcImluc2VydFwiLGluZGV4OnMsdmFsdWU6aX0pLGIudW5zaGlmdCh7dHlwZTpcImRlbGV0ZVwiLGluZGV4OnN9KSxfKyt9dmFyIHc9Zi5tb2RpZnlGcmFtZXMsaz1mLm1vZGlmeUZyYW1lcyxBPVt0LGJdLFQ9W3QseF07cmV0dXJuIGMmJmMuYWRkKHQsdyxBLGssVCksZi5tb2RpZnlGcmFtZXModCx4KX0sci5kZWxldGVGcmFtZXM9ZnVuY3Rpb24odCxlKXtpZih0PW8uZ2V0R3JhcGhEaXYodCksIW8uaXNQbG90RGl2KHQpKXRocm93IG5ldyBFcnJvcihcIlRoaXMgZWxlbWVudCBpcyBub3QgYSBQbG90bHkgcGxvdDogXCIrdCk7dmFyIHIsbixpPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMsYT1bXSxzPVtdO2lmKCFlKWZvcihlPVtdLHI9MDtyPGkubGVuZ3RoO3IrKyllLnB1c2gocik7Zm9yKChlPWUuc2xpY2UoMCkpLnNvcnQoKSxyPWUubGVuZ3RoLTE7cj49MDtyLS0pbj1lW3JdLGEucHVzaCh7dHlwZTpcImRlbGV0ZVwiLGluZGV4Om59KSxzLnVuc2hpZnQoe3R5cGU6XCJpbnNlcnRcIixpbmRleDpuLHZhbHVlOmlbbl19KTt2YXIgbD1mLm1vZGlmeUZyYW1lcyx1PWYubW9kaWZ5RnJhbWVzLGg9W3Qsc10scD1bdCxhXTtyZXR1cm4gYyYmYy5hZGQodCxsLGgsdSxwKSxmLm1vZGlmeUZyYW1lcyh0LGEpfSxyLnB1cmdlPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PW8uZ2V0R3JhcGhEaXYodCkpLl9mdWxsTGF5b3V0fHx7fSxyPXQuX2Z1bGxEYXRhfHxbXTtyZXR1cm4gZi5jbGVhblBsb3QoW10se30scixlKSxmLnB1cmdlKHQpLGwucHVyZ2UodCksZS5fY29udGFpbmVyJiZlLl9jb250YWluZXIucmVtb3ZlKCksZGVsZXRlIHQuX2NvbnRleHQsdH19LHtcIi4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi9jb21wb25lbnRzL2NvbG9yYmFyL2Nvbm5lY3RcIjo1ODAsXCIuLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiOjY3OSxcIi4uL2xpYlwiOjcwMSxcIi4uL2xpYi9ldmVudHNcIjo2OTAsXCIuLi9saWIvcXVldWVcIjo3MTYsXCIuLi9saWIvc3ZnX3RleHRfdXRpbHNcIjo3MjUsXCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHNcIjo3NTUsXCIuLi9wbG90cy9jYXJ0ZXNpYW4vZ3JhcGhfaW50ZXJhY3RcIjo3NTgsXCIuLi9wbG90cy9jYXJ0ZXNpYW4vc2VsZWN0XCI6NzY2LFwiLi4vcGxvdHMvcGxvdHNcIjo4MTAsXCIuLi9wbG90cy9wb2xhci9sZWdhY3lcIjo4MTgsXCIuLi9yZWdpc3RyeVwiOjgyOSxcIi4vZWRpdF90eXBlc1wiOjczMixcIi4vaGVscGVyc1wiOjczMyxcIi4vbWFuYWdlX2FycmF5c1wiOjczNSxcIi4vcGxvdF9jb25maWdcIjo3MzcsXCIuL3Bsb3Rfc2NoZW1hXCI6NzM4LFwiLi9zdWJyb3V0aW5lc1wiOjc0MCxkMzoxNTUsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMixcImhhcy1ob3ZlclwiOjQwM31dLDczNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXtzdGF0aWNQbG90Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LHBsb3RseVNlcnZlclVSTDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJodHRwczovL3Bsb3QubHlcIn0sZWRpdGFibGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sZWRpdHM6e2Fubm90YXRpb25Qb3NpdGlvbjp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxhbm5vdGF0aW9uVGFpbDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxhbm5vdGF0aW9uVGV4dDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxheGlzVGl0bGVUZXh0Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LGNvbG9yYmFyUG9zaXRpb246e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sY29sb3JiYXJUaXRsZVRleHQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sbGVnZW5kUG9zaXRpb246e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sbGVnZW5kVGV4dDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxzaGFwZVBvc2l0aW9uOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LHRpdGxlVGV4dDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfX0sYXV0b3NpemFibGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0scmVzcG9uc2l2ZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxmaWxsRnJhbWU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sZnJhbWVNYXJnaW5zOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLG1pbjowLG1heDouNX0sc2Nyb2xsWm9vbTp7dmFsVHlwZTpcImZsYWdsaXN0XCIsZmxhZ3M6W1wiY2FydGVzaWFuXCIsXCJnbDNkXCIsXCJnZW9cIixcIm1hcGJveFwiXSxleHRyYXM6WyEwLCExXSxkZmx0OlwiZ2wzZCtnZW8rbWFwYm94XCJ9LGRvdWJsZUNsaWNrOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbITEsXCJyZXNldFwiLFwiYXV0b3NpemVcIixcInJlc2V0K2F1dG9zaXplXCJdLGRmbHQ6XCJyZXNldCthdXRvc2l6ZVwifSxzaG93QXhpc0RyYWdIYW5kbGVzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITB9LHNob3dBeGlzUmFuZ2VFbnRyeUJveGVzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITB9LHNob3dUaXBzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITB9LHNob3dMaW5rOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LGxpbmtUZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIkVkaXQgY2hhcnRcIixub0JsYW5rOiEwfSxzZW5kRGF0YTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfSxzaG93U291cmNlczp7dmFsVHlwZTpcImFueVwiLGRmbHQ6ITF9LGRpc3BsYXlNb2RlQmFyOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJob3ZlclwiLCEwLCExXSxkZmx0OlwiaG92ZXJcIn0sc2hvd1NlbmRUb0Nsb3VkOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LG1vZGVCYXJCdXR0b25zVG9SZW1vdmU6e3ZhbFR5cGU6XCJhbnlcIixkZmx0OltdfSxtb2RlQmFyQnV0dG9uc1RvQWRkOnt2YWxUeXBlOlwiYW55XCIsZGZsdDpbXX0sbW9kZUJhckJ1dHRvbnM6e3ZhbFR5cGU6XCJhbnlcIixkZmx0OiExfSx0b0ltYWdlQnV0dG9uT3B0aW9uczp7dmFsVHlwZTpcImFueVwiLGRmbHQ6e319LGRpc3BsYXlsb2dvOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITB9LHdhdGVybWFyazp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxwbG90R2xQaXhlbFJhdGlvOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoyLG1pbjoxLG1heDo0fSxzZXRCYWNrZ3JvdW5kOnt2YWxUeXBlOlwiYW55XCIsZGZsdDpcInRyYW5zcGFyZW50XCJ9LHRvcG9qc29uVVJMOnt2YWxUeXBlOlwic3RyaW5nXCIsbm9CbGFuazohMCxkZmx0OlwiaHR0cHM6Ly9jZG4ucGxvdC5seS9cIn0sbWFwYm94QWNjZXNzVG9rZW46e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0Om51bGx9LGxvZ2dpbmc6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDoxfSxxdWV1ZUxlbmd0aDp7dmFsVHlwZTpcImludGVnZXJcIixtaW46MCxkZmx0OjB9LGdsb2JhbFRyYW5zZm9ybXM6e3ZhbFR5cGU6XCJhbnlcIixkZmx0OltdfSxsb2NhbGU6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiZW4tVVNcIn0sbG9jYWxlczp7dmFsVHlwZTpcImFueVwiLGRmbHQ6e319fSxpPXt9OyFmdW5jdGlvbiB0KGUscil7Zm9yKHZhciBuIGluIGUpe3ZhciBpPWVbbl07aS52YWxUeXBlP3Jbbl09aS5kZmx0OihyW25dfHwocltuXT17fSksdChpLHJbbl0pKX19KG4saSksZS5leHBvcnRzPXtjb25maWdBdHRyaWJ1dGVzOm4sZGZsdENvbmZpZzppfX0se31dLDczODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9yZWdpc3RyeVwiKSxpPXQoXCIuLi9saWJcIiksYT10KFwiLi4vcGxvdHMvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlc1wiKSxzPXQoXCIuLi9wbG90cy9mcmFtZV9hdHRyaWJ1dGVzXCIpLGw9dChcIi4uL3Bsb3RzL2FuaW1hdGlvbl9hdHRyaWJ1dGVzXCIpLGM9dChcIi4vcGxvdF9jb25maWdcIikuY29uZmlnQXR0cmlidXRlcyx1PXQoXCIuLi9wbG90cy9wb2xhci9sZWdhY3kvYXJlYV9hdHRyaWJ1dGVzXCIpLGg9dChcIi4uL3Bsb3RzL3BvbGFyL2xlZ2FjeS9heGlzX2F0dHJpYnV0ZXNcIiksZj10KFwiLi9lZGl0X3R5cGVzXCIpLHA9aS5leHRlbmRGbGF0LGQ9aS5leHRlbmREZWVwQWxsLGc9aS5pc1BsYWluT2JqZWN0LHY9XCJfaXNTdWJwbG90T2JqXCIsbT1cIl9pc0xpbmtlZFRvQXJyYXlcIix5PVt2LG0sXCJfYXJyYXlBdHRyUmVnZXhwc1wiLFwiX2RlcHJlY2F0ZWRcIl07ZnVuY3Rpb24geCh0LGUscil7aWYoIXQpcmV0dXJuITE7aWYodC5faXNMaW5rZWRUb0FycmF5KWlmKGIoZVtyXSkpcisrO2Vsc2UgaWYocjxlLmxlbmd0aClyZXR1cm4hMTtmb3IoO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj10W2Vbcl1dO2lmKCFnKG4pKWJyZWFrO2lmKHQ9bixyPT09ZS5sZW5ndGgtMSlicmVhaztpZih0Ll9pc0xpbmtlZFRvQXJyYXkpe2lmKCFiKGVbKytyXSkpcmV0dXJuITF9ZWxzZSBpZihcImluZm9fYXJyYXlcIj09PXQudmFsVHlwZSl7dmFyIGk9ZVsrK3JdO2lmKCFiKGkpKXJldHVybiExO3ZhciBhPXQuaXRlbXM7aWYoQXJyYXkuaXNBcnJheShhKSl7aWYoaT49YS5sZW5ndGgpcmV0dXJuITE7aWYoMj09PXQuZGltZW5zaW9ucyl7aWYocisrLGUubGVuZ3RoPT09cilyZXR1cm4gdDt2YXIgbz1lW3JdO2lmKCFiKG8pKXJldHVybiExO3Q9YVtpXVtvXX1lbHNlIHQ9YVtpXX1lbHNlIHQ9YX19cmV0dXJuIHR9ZnVuY3Rpb24gYih0KXtyZXR1cm4gdD09PU1hdGgucm91bmQodCkmJnQ+PTB9ZnVuY3Rpb24gXyh0KXtyZXR1cm4gZnVuY3Rpb24odCl7ci5jcmF3bCh0LGZ1bmN0aW9uKHQsZSxuKXtyLmlzVmFsT2JqZWN0KHQpP1wiZGF0YV9hcnJheVwiPT09dC52YWxUeXBlPyh0LnJvbGU9XCJkYXRhXCIsbltlK1wic3JjXCJdPXt2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJub25lXCJ9KTohMD09PXQuYXJyYXlPayYmKG5bZStcInNyY1wiXT17dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwibm9uZVwifSk6Zyh0KSYmKHQucm9sZT1cIm9iamVjdFwiKX0pfSh0KSxmdW5jdGlvbih0KXtyLmNyYXdsKHQsZnVuY3Rpb24odCxlLHIpe2lmKCF0KXJldHVybjt2YXIgbj10W21dO2lmKCFuKXJldHVybjtkZWxldGUgdFttXSxyW2VdPXtpdGVtczp7fX0scltlXS5pdGVtc1tuXT10LHJbZV0ucm9sZT1cIm9iamVjdFwifSl9KHQpLGZ1bmN0aW9uKHQpeyFmdW5jdGlvbiB0KGUpe2Zvcih2YXIgciBpbiBlKWlmKGcoZVtyXSkpdChlW3JdKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZVtyXSkpZm9yKHZhciBuPTA7bjxlW3JdLmxlbmd0aDtuKyspdChlW3JdW25dKTtlbHNlIGVbcl1pbnN0YW5jZW9mIFJlZ0V4cCYmKGVbcl09ZVtyXS50b1N0cmluZygpKX0odCl9KHQpLHR9ZnVuY3Rpb24gdyh0LGUscil7dmFyIG49aS5uZXN0ZWRQcm9wZXJ0eSh0LHIpLGE9ZCh7fSxlLmxheW91dEF0dHJpYnV0ZXMpO2Fbdl09ITAsbi5zZXQoYSl9ZnVuY3Rpb24gayh0LGUscil7dmFyIG49aS5uZXN0ZWRQcm9wZXJ0eSh0LHIpO24uc2V0KGQobi5nZXQoKXx8e30sZSkpfXIuSVNfU1VCUExPVF9PQko9dixyLklTX0xJTktFRF9UT19BUlJBWT1tLHIuREVQUkVDQVRFRD1cIl9kZXByZWNhdGVkXCIsci5VTkRFUlNDT1JFX0FUVFJTPXksci5nZXQ9ZnVuY3Rpb24oKXt2YXIgdD17fTtuLmFsbFR5cGVzLmNvbmNhdChcImFyZWFcIikuZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPWZ1bmN0aW9uKHQpe3ZhciBlLG87XCJhcmVhXCI9PT10PyhlPXthdHRyaWJ1dGVzOnV9LG89e30pOihlPW4ubW9kdWxlc1t0XS5fbW9kdWxlLG89ZS5iYXNlUGxvdE1vZHVsZSk7dmFyIHM9e3R5cGU6bnVsbH0sbD1kKHt9LGEpLGM9ZCh7fSxlLmF0dHJpYnV0ZXMpO3IuY3Jhd2woYyxmdW5jdGlvbih0LGUscixuLGEpe2kubmVzdGVkUHJvcGVydHkobCxhKS5zZXQodm9pZCAwKSx2b2lkIDA9PT10JiZpLm5lc3RlZFByb3BlcnR5KGMsYSkuc2V0KHZvaWQgMCl9KSxkKHMsbCksbi50cmFjZUlzKHQsXCJub09wYWNpdHlcIikmJmRlbGV0ZSBzLm9wYWNpdHk7bi50cmFjZUlzKHQsXCJzaG93TGVnZW5kXCIpfHwoZGVsZXRlIHMuc2hvd2xlZ2VuZCxkZWxldGUgcy5sZWdlbmRncm91cCk7bi50cmFjZUlzKHQsXCJub0hvdmVyXCIpJiYoZGVsZXRlIHMuaG92ZXJpbmZvLGRlbGV0ZSBzLmhvdmVybGFiZWwpO2Uuc2VsZWN0UG9pbnRzfHxkZWxldGUgcy5zZWxlY3RlZHBvaW50cztkKHMsYyksby5hdHRyaWJ1dGVzJiZkKHMsby5hdHRyaWJ1dGVzKTtzLnR5cGU9dDt2YXIgaD17bWV0YTplLm1ldGF8fHt9LGF0dHJpYnV0ZXM6XyhzKX07aWYoZS5sYXlvdXRBdHRyaWJ1dGVzKXt2YXIgZj17fTtkKGYsZS5sYXlvdXRBdHRyaWJ1dGVzKSxoLmxheW91dEF0dHJpYnV0ZXM9XyhmKX1yZXR1cm4gaH0oZSl9KTt2YXIgZSxnPXt9O3JldHVybiBPYmplY3Qua2V5cyhuLnRyYW5zZm9ybXNSZWdpc3RyeSkuZm9yRWFjaChmdW5jdGlvbih0KXtnW3RdPWZ1bmN0aW9uKHQpe3ZhciBlPW4udHJhbnNmb3Jtc1JlZ2lzdHJ5W3RdLHI9ZCh7fSxlLmF0dHJpYnV0ZXMpO3JldHVybiBPYmplY3Qua2V5cyhuLmNvbXBvbmVudHNSZWdpc3RyeSkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgaT1uLmNvbXBvbmVudHNSZWdpc3RyeVtlXTtpLnNjaGVtYSYmaS5zY2hlbWEudHJhbnNmb3JtcyYmaS5zY2hlbWEudHJhbnNmb3Jtc1t0XSYmT2JqZWN0LmtleXMoaS5zY2hlbWEudHJhbnNmb3Jtc1t0XSkuZm9yRWFjaChmdW5jdGlvbihlKXtrKHIsaS5zY2hlbWEudHJhbnNmb3Jtc1t0XVtlXSxlKX0pfSkse2F0dHJpYnV0ZXM6XyhyKX19KHQpfSkse2RlZnM6e3ZhbE9iamVjdHM6aS52YWxPYmplY3RNZXRhLG1ldGFLZXlzOnkuY29uY2F0KFtcImRlc2NyaXB0aW9uXCIsXCJyb2xlXCIsXCJlZGl0VHlwZVwiLFwiaW1wbGllZEVkaXRzXCJdKSxlZGl0VHlwZTp7dHJhY2VzOmYudHJhY2VzLGxheW91dDpmLmxheW91dH0saW1wbGllZEVkaXRzOnt9fSx0cmFjZXM6dCxsYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgdCxlLHI9e307Zm9yKHQgaW4gZChyLG8pLG4uc3VicGxvdHNSZWdpc3RyeSlpZigoZT1uLnN1YnBsb3RzUmVnaXN0cnlbdF0pLmxheW91dEF0dHJpYnV0ZXMpaWYoQXJyYXkuaXNBcnJheShlLmF0dHIpKWZvcih2YXIgaT0wO2k8ZS5hdHRyLmxlbmd0aDtpKyspdyhyLGUsZS5hdHRyW2ldKTtlbHNle3ZhciBhPVwic3VicGxvdFwiPT09ZS5hdHRyP2UubmFtZTplLmF0dHI7dyhyLGUsYSl9Zm9yKHQgaW4gcj1mdW5jdGlvbih0KXtyZXR1cm4gcCh0LHtyYWRpYWxheGlzOmgucmFkaWFsYXhpcyxhbmd1bGFyYXhpczpoLmFuZ3VsYXJheGlzfSkscCh0LGgubGF5b3V0KSx0fShyKSxuLmNvbXBvbmVudHNSZWdpc3RyeSl7dmFyIHM9KGU9bi5jb21wb25lbnRzUmVnaXN0cnlbdF0pLnNjaGVtYTtpZihzJiYocy5zdWJwbG90c3x8cy5sYXlvdXQpKXt2YXIgbD1zLnN1YnBsb3RzO2lmKGwmJmwueGF4aXMmJiFsLnlheGlzKWZvcih2YXIgYyBpbiBsLnhheGlzKWRlbGV0ZSByLnlheGlzW2NdfWVsc2UgZS5sYXlvdXRBdHRyaWJ1dGVzJiZrKHIsZS5sYXlvdXRBdHRyaWJ1dGVzLGUubmFtZSl9cmV0dXJue2xheW91dEF0dHJpYnV0ZXM6XyhyKX19KCksdHJhbnNmb3JtczpnLGZyYW1lczooZT17ZnJhbWVzOmkuZXh0ZW5kRGVlcEFsbCh7fSxzKX0sXyhlKSxlLmZyYW1lcyksYW5pbWF0aW9uOl8obCksY29uZmlnOl8oYyl9fSxyLmNyYXdsPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBhPW58fDA7aT1pfHxcIlwiLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIG89dFtuXTtpZigtMT09PXkuaW5kZXhPZihuKSl7dmFyIHM9KGk/aStcIi5cIjpcIlwiKStuO2UobyxuLHQsYSxzKSxyLmlzVmFsT2JqZWN0KG8pfHxnKG8pJiZcImltcGxpZWRFZGl0c1wiIT09biYmci5jcmF3bChvLGUsYSsxLHMpfX0pfSxyLmlzVmFsT2JqZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ2b2lkIDAhPT10LnZhbFR5cGV9LHIuZmluZEFycmF5QXR0cmlidXRlcz1mdW5jdGlvbih0KXt2YXIgZSxuLG89W10scz1bXSxsPVtdO2Z1bmN0aW9uIGModCxyLGEsYyl7cz1zLnNsaWNlKDAsYykuY29uY2F0KFtyXSksbD1sLnNsaWNlKDAsYykuY29uY2F0KFt0JiZ0Ll9pc0xpbmtlZFRvQXJyYXldKSx0JiYoXCJkYXRhX2FycmF5XCI9PT10LnZhbFR5cGV8fCEwPT09dC5hcnJheU9rKSYmIShcImNvbG9yYmFyXCI9PT1zW2MtMV0mJihcInRpY2t0ZXh0XCI9PT1yfHxcInRpY2t2YWxzXCI9PT1yKSkmJmZ1bmN0aW9uIHQoZSxyLGEpe3ZhciBjPWVbc1tyXV07dmFyIHU9YStzW3JdO2lmKHI9PT1zLmxlbmd0aC0xKWkuaXNBcnJheU9yVHlwZWRBcnJheShjKSYmby5wdXNoKG4rdSk7ZWxzZSBpZihsW3JdKXtpZihBcnJheS5pc0FycmF5KGMpKWZvcih2YXIgaD0wO2g8Yy5sZW5ndGg7aCsrKWkuaXNQbGFpbk9iamVjdChjW2hdKSYmdChjW2hdLHIrMSx1K1wiW1wiK2grXCJdLlwiKX1lbHNlIGkuaXNQbGFpbk9iamVjdChjKSYmdChjLHIrMSx1K1wiLlwiKX0oZSwwLFwiXCIpfWU9dCxuPVwiXCIsci5jcmF3bChhLGMpLHQuX21vZHVsZSYmdC5fbW9kdWxlLmF0dHJpYnV0ZXMmJnIuY3Jhd2wodC5fbW9kdWxlLmF0dHJpYnV0ZXMsYyk7dmFyIHU9dC50cmFuc2Zvcm1zO2lmKHUpZm9yKHZhciBoPTA7aDx1Lmxlbmd0aDtoKyspe3ZhciBmPXVbaF0scD1mLl9tb2R1bGU7cCYmKG49XCJ0cmFuc2Zvcm1zW1wiK2grXCJdLlwiLGU9ZixyLmNyYXdsKHAuYXR0cmlidXRlcyxjKSl9cmV0dXJuIG99LHIuZ2V0VHJhY2VWYWxPYmplY3Q9ZnVuY3Rpb24odCxlKXt2YXIgcixpLG89ZVswXSxzPTE7aWYoXCJ0cmFuc2Zvcm1zXCI9PT1vKXtpZigxPT09ZS5sZW5ndGgpcmV0dXJuIGEudHJhbnNmb3Jtczt2YXIgbD10LnRyYW5zZm9ybXM7aWYoIUFycmF5LmlzQXJyYXkobCl8fCFsLmxlbmd0aClyZXR1cm4hMTt2YXIgYz1lWzFdO2lmKCFiKGMpfHxjPj1sLmxlbmd0aClyZXR1cm4hMTtpPShyPShuLnRyYW5zZm9ybXNSZWdpc3RyeVtsW2NdLnR5cGVdfHx7fSkuYXR0cmlidXRlcykmJnJbZVsyXV0scz0zfWVsc2UgaWYoXCJhcmVhXCI9PT10LnR5cGUpaT11W29dO2Vsc2V7dmFyIGg9dC5fbW9kdWxlO2lmKGh8fChoPShuLm1vZHVsZXNbdC50eXBlfHxhLnR5cGUuZGZsdF18fHt9KS5fbW9kdWxlKSwhaClyZXR1cm4hMTtpZighKGk9KHI9aC5hdHRyaWJ1dGVzKSYmcltvXSkpe3ZhciBmPWguYmFzZVBsb3RNb2R1bGU7ZiYmZi5hdHRyaWJ1dGVzJiYoaT1mLmF0dHJpYnV0ZXNbb10pfWl8fChpPWFbb10pfXJldHVybiB4KGksZSxzKX0sci5nZXRMYXlvdXRWYWxPYmplY3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4geChmdW5jdGlvbih0LGUpe3ZhciByLGksYSxzLGw9dC5fYmFzZVBsb3RNb2R1bGVzO2lmKGwpe3ZhciBjO2ZvcihyPTA7cjxsLmxlbmd0aDtyKyspe2lmKChhPWxbcl0pLmF0dHJSZWdleCYmYS5hdHRyUmVnZXgudGVzdChlKSl7aWYoYS5sYXlvdXRBdHRyT3ZlcnJpZGVzKXJldHVybiBhLmxheW91dEF0dHJPdmVycmlkZXM7IWMmJmEubGF5b3V0QXR0cmlidXRlcyYmKGM9YS5sYXlvdXRBdHRyaWJ1dGVzKX12YXIgdT1hLmJhc2VMYXlvdXRBdHRyT3ZlcnJpZGVzO2lmKHUmJmUgaW4gdSlyZXR1cm4gdVtlXX1pZihjKXJldHVybiBjfXZhciBmPXQuX21vZHVsZXM7aWYoZilmb3Iocj0wO3I8Zi5sZW5ndGg7cisrKWlmKChzPWZbcl0ubGF5b3V0QXR0cmlidXRlcykmJmUgaW4gcylyZXR1cm4gc1tlXTtmb3IoaSBpbiBuLmNvbXBvbmVudHNSZWdpc3RyeSlpZighKGE9bi5jb21wb25lbnRzUmVnaXN0cnlbaV0pLnNjaGVtYSYmZT09PWEubmFtZSlyZXR1cm4gYS5sYXlvdXRBdHRyaWJ1dGVzO2lmKGUgaW4gbylyZXR1cm4gb1tlXTtpZihcInJhZGlhbGF4aXNcIj09PWV8fFwiYW5ndWxhcmF4aXNcIj09PWUpcmV0dXJuIGhbZV07cmV0dXJuIGgubGF5b3V0W2VdfHwhMX0odCxlWzBdKSxlLDEpfX0se1wiLi4vbGliXCI6NzAxLFwiLi4vcGxvdHMvYW5pbWF0aW9uX2F0dHJpYnV0ZXNcIjo3NDQsXCIuLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi4vcGxvdHMvZnJhbWVfYXR0cmlidXRlc1wiOjc3NixcIi4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzXCI6ODAxLFwiLi4vcGxvdHMvcG9sYXIvbGVnYWN5L2FyZWFfYXR0cmlidXRlc1wiOjgxNixcIi4uL3Bsb3RzL3BvbGFyL2xlZ2FjeS9heGlzX2F0dHJpYnV0ZXNcIjo4MTcsXCIuLi9yZWdpc3RyeVwiOjgyOSxcIi4vZWRpdF90eXBlc1wiOjczMixcIi4vcGxvdF9jb25maWdcIjo3Mzd9XSw3Mzk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vbGliXCIpLGk9dChcIi4uL3Bsb3RzL2F0dHJpYnV0ZXNcIiksYT1cInRlbXBsYXRlaXRlbW5hbWVcIixvPXtuYW1lOnt2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJub25lXCJ9fTtmdW5jdGlvbiBzKHQpe3JldHVybiB0JiZcInN0cmluZ1wiPT10eXBlb2YgdH1mdW5jdGlvbiBsKHQpe3ZhciBlPXQubGVuZ3RoLTE7cmV0dXJuXCJzXCIhPT10LmNoYXJBdChlKSYmbi53YXJuKFwiYmFkIGFyZ3VtZW50IHRvIGFycmF5RGVmYXVsdEtleTogXCIrdCksdC5zdWJzdHIoMCx0Lmxlbmd0aC0xKStcImRlZmF1bHRzXCJ9b1thXT17dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwiY2FsY1wifSxyLnRlbXBsYXRlZEFycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuX2lzTGlua2VkVG9BcnJheT10LGUubmFtZT1vLm5hbWUsZVthXT1vW2FdLGV9LHIudHJhY2VUZW1wbGF0ZXI9ZnVuY3Rpb24odCl7dmFyIGUscixhPXt9O2ZvcihlIGluIHQpcj10W2VdLEFycmF5LmlzQXJyYXkocikmJnIubGVuZ3RoJiYoYVtlXT0wKTtyZXR1cm57bmV3VHJhY2U6ZnVuY3Rpb24obyl7dmFyIHM9e3R5cGU6ZT1uLmNvZXJjZShvLHt9LGksXCJ0eXBlXCIpLF90ZW1wbGF0ZTpudWxsfTtpZihlIGluIGEpe3I9dFtlXTt2YXIgbD1hW2VdJXIubGVuZ3RoO2FbZV0rKyxzLl90ZW1wbGF0ZT1yW2xdfXJldHVybiBzfX19LHIubmV3Q29udGFpbmVyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10Ll90ZW1wbGF0ZSxhPWkmJihpW2VdfHxyJiZpW3JdKTtyZXR1cm4gbi5pc1BsYWluT2JqZWN0KGEpfHwoYT1udWxsKSx0W2VdPXtfdGVtcGxhdGU6YX19LHIuYXJyYXlUZW1wbGF0ZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuX3RlbXBsYXRlLGk9biYmbltsKGUpXSxvPW4mJm5bZV07QXJyYXkuaXNBcnJheShvKSYmby5sZW5ndGh8fChvPVtdKTt2YXIgYz17fTtyZXR1cm57bmV3SXRlbTpmdW5jdGlvbih0KXt2YXIgZT17bmFtZTp0Lm5hbWUsX2lucHV0OnR9LG49ZVthXT10W2FdO2lmKCFzKG4pKXJldHVybiBlLl90ZW1wbGF0ZT1pLGU7Zm9yKHZhciBsPTA7bDxvLmxlbmd0aDtsKyspe3ZhciB1PW9bbF07aWYodS5uYW1lPT09bilyZXR1cm4gY1tuXT0xLGUuX3RlbXBsYXRlPXUsZX1yZXR1cm4gZVtyXT10W3JdfHwhMSxlLl90ZW1wbGF0ZT0hMSxlfSxkZWZhdWx0SXRlbXM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8by5sZW5ndGg7ZSsrKXt2YXIgcj1vW2VdLG49ci5uYW1lO2lmKHMobikmJiFjW25dKXt2YXIgaT17X3RlbXBsYXRlOnIsbmFtZTpuLF9pbnB1dDp7X3RlbXBsYXRlaXRlbW5hbWU6bn19O2lbYV09clthXSx0LnB1c2goaSksY1tuXT0xfX1yZXR1cm4gdH19fSxyLmFycmF5RGVmYXVsdEtleT1sLHIuYXJyYXlFZGl0b3I9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPShuLm5lc3RlZFByb3BlcnR5KHQsZSkuZ2V0KCl8fFtdKS5sZW5ndGgsbz1yLl9pbmRleCxzPW8+PWkmJihyLl9pbnB1dHx8e30pLl90ZW1wbGF0ZWl0ZW1uYW1lO3MmJihvPWkpO3ZhciBsLGM9ZStcIltcIitvK1wiXVwiO2Z1bmN0aW9uIHUoKXtsPXt9LHMmJihsW2NdPXt9LGxbY11bYV09cyl9ZnVuY3Rpb24gaCh0LGUpe3M/bi5uZXN0ZWRQcm9wZXJ0eShsW2NdLHQpLnNldChlKTpsW2MrXCIuXCIrdF09ZX1mdW5jdGlvbiBmKCl7dmFyIHQ9bDtyZXR1cm4gdSgpLHR9cmV0dXJuIHUoKSx7bW9kaWZ5QmFzZTpmdW5jdGlvbih0LGUpe2xbdF09ZX0sbW9kaWZ5SXRlbTpoLGdldFVwZGF0ZU9iajpmLGFwcGx5VXBkYXRlOmZ1bmN0aW9uKGUscil7ZSYmaChlLHIpO3ZhciBpPWYoKTtmb3IodmFyIGEgaW4gaSluLm5lc3RlZFByb3BlcnR5KHQsYSkuc2V0KGlbYV0pfX19fSx7XCIuLi9saWJcIjo3MDEsXCIuLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2fV0sNzQwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uL3JlZ2lzdHJ5XCIpLGE9dChcIi4uL3Bsb3RzL3Bsb3RzXCIpLG89dChcIi4uL2xpYlwiKSxzPXQoXCIuLi9saWIvY2xlYXJfZ2xfY2FudmFzZXNcIiksbD10KFwiLi4vY29tcG9uZW50cy9jb2xvclwiKSxjPXQoXCIuLi9jb21wb25lbnRzL2RyYXdpbmdcIiksdT10KFwiLi4vY29tcG9uZW50cy90aXRsZXNcIiksaD10KFwiLi4vY29tcG9uZW50cy9tb2RlYmFyXCIpLGY9dChcIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLHA9dChcIi4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIiksZD10KFwiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzXCIpLGc9ZC5lbmZvcmNlLHY9ZC5jbGVhbixtPXQoXCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlXCIpLmRvQXV0b1JhbmdlLHk9XCJzdGFydFwiLHg9XCJtaWRkbGVcIixiPVwiZW5kXCI7ZnVuY3Rpb24gXyh0LGUscil7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl1bMF0sYT1yW25dWzFdO2lmKCEoaVswXT49dFsxXXx8aVsxXTw9dFswXSkmJihhWzBdPGVbMV0mJmFbMV0+ZVswXSkpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gdyh0KXt2YXIgZSxpLGEscyx1LGQsZz10Ll9mdWxsTGF5b3V0LHY9Zy5fc2l6ZSxtPXYucCx5PWYubGlzdCh0LFwiXCIsITApO2lmKGcuX3BhcGVyZGl2LnN0eWxlKHt3aWR0aDp0Ll9jb250ZXh0LnJlc3BvbnNpdmUmJmcuYXV0b3NpemUmJiF0Ll9jb250ZXh0Ll9oYXNaZXJvV2lkdGgmJiF0LmxheW91dC53aWR0aD9cIjEwMCVcIjpnLndpZHRoK1wicHhcIixoZWlnaHQ6dC5fY29udGV4dC5yZXNwb25zaXZlJiZnLmF1dG9zaXplJiYhdC5fY29udGV4dC5faGFzWmVyb0hlaWdodCYmIXQubGF5b3V0LmhlaWdodD9cIjEwMCVcIjpnLmhlaWdodCtcInB4XCJ9KS5zZWxlY3RBbGwoXCIubWFpbi1zdmdcIikuY2FsbChjLnNldFNpemUsZy53aWR0aCxnLmhlaWdodCksdC5fY29udGV4dC5zZXRCYWNrZ3JvdW5kKHQsZy5wYXBlcl9iZ2NvbG9yKSxyLmRyYXdNYWluVGl0bGUodCksaC5tYW5hZ2UodCksIWcuX2hhcyhcImNhcnRlc2lhblwiKSlyZXR1cm4gdC5fcHJvbWlzZXMubGVuZ3RoJiZQcm9taXNlLmFsbCh0Ll9wcm9taXNlcyk7ZnVuY3Rpb24geCh0LGUscil7dmFyIG49dC5fbHcvMjtyZXR1cm5cInhcIj09PXQuX2lkLmNoYXJBdCgwKT9lP1widG9wXCI9PT1yP2UuX29mZnNldC1tLW46ZS5fb2Zmc2V0K2UuX2xlbmd0aCttK246di50K3YuaCooMS0odC5wb3NpdGlvbnx8MCkpK24lMTplP1wicmlnaHRcIj09PXI/ZS5fb2Zmc2V0K2UuX2xlbmd0aCttK246ZS5fb2Zmc2V0LW0tbjp2Lmwrdi53Kih0LnBvc2l0aW9ufHwwKStuJTF9Zm9yKGU9MDtlPHkubGVuZ3RoO2UrKyl7dmFyIGI9KHM9eVtlXSkuX2FuY2hvckF4aXM7cy5fbGluZXBvc2l0aW9ucz17fSxzLl9sdz1jLmNyaXNwUm91bmQodCxzLmxpbmV3aWR0aCwxKSxzLl9tYWluTGluZVBvc2l0aW9uPXgocyxiLHMuc2lkZSkscy5fbWFpbk1pcnJvclBvc2l0aW9uPXMubWlycm9yJiZiP3gocyxiLHAuT1BQT1NJVEVfU0lERVtzLnNpZGVdKTpudWxsfXZhciB3PVtdLEE9W10sTT1bXSxTPTE9PT1sLm9wYWNpdHkoZy5wYXBlcl9iZ2NvbG9yKSYmMT09PWwub3BhY2l0eShnLnBsb3RfYmdjb2xvcikmJmcucGFwZXJfYmdjb2xvcj09PWcucGxvdF9iZ2NvbG9yO2ZvcihpIGluIGcuX3Bsb3RzKWlmKChhPWcuX3Bsb3RzW2ldKS5tYWlucGxvdClhLmJnJiZhLmJnLnJlbW92ZSgpLGEuYmc9dm9pZCAwO2Vsc2V7dmFyIEU9YS54YXhpcy5kb21haW4sQz1hLnlheGlzLmRvbWFpbixMPWEucGxvdGdyb3VwO2lmKF8oRSxDLE0pKXt2YXIgej1MLm5vZGUoKSxPPWEuYmc9by5lbnN1cmVTaW5nbGUoTCxcInJlY3RcIixcImJnXCIpO3ouaW5zZXJ0QmVmb3JlKE8ubm9kZSgpLHouY2hpbGROb2Rlc1swXSksQS5wdXNoKGkpfWVsc2UgTC5zZWxlY3QoXCJyZWN0LmJnXCIpLnJlbW92ZSgpLE0ucHVzaChbRSxDXSksU3x8KHcucHVzaChpKSxBLnB1c2goaSkpfXZhciBJLEQsUCxSLEYsQixOLGosVixVLHEsSCxHLFk9Zy5fYmdMYXllci5zZWxlY3RBbGwoXCIuYmdcIikuZGF0YSh3KTtmb3IoWS5lbnRlcigpLmFwcGVuZChcInJlY3RcIikuY2xhc3NlZChcImJnXCIsITApLFkuZXhpdCgpLnJlbW92ZSgpLFkuZWFjaChmdW5jdGlvbih0KXtnLl9wbG90c1t0XS5iZz1uLnNlbGVjdCh0aGlzKX0pLGU9MDtlPEEubGVuZ3RoO2UrKylhPWcuX3Bsb3RzW0FbZV1dLHU9YS54YXhpcyxkPWEueWF4aXMsYS5iZyYmYS5iZy5jYWxsKGMuc2V0UmVjdCx1Ll9vZmZzZXQtbSxkLl9vZmZzZXQtbSx1Ll9sZW5ndGgrMiptLGQuX2xlbmd0aCsyKm0pLmNhbGwobC5maWxsLGcucGxvdF9iZ2NvbG9yKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLDApO2lmKCFnLl9oYXNPbmx5TGFyZ2VTcGxvbXMpZm9yKGkgaW4gZy5fcGxvdHMpe2E9Zy5fcGxvdHNbaV0sdT1hLnhheGlzLGQ9YS55YXhpczt2YXIgVyxYLFo9YS5jbGlwSWQ9XCJjbGlwXCIrZy5fdWlkK2krXCJwbG90XCIsJD1vLmVuc3VyZVNpbmdsZUJ5SWQoZy5fY2xpcHMsXCJjbGlwUGF0aFwiLFosZnVuY3Rpb24odCl7dC5jbGFzc2VkKFwicGxvdGNsaXBcIiwhMCkuYXBwZW5kKFwicmVjdFwiKX0pO2EuY2xpcFJlY3Q9JC5zZWxlY3QoXCJyZWN0XCIpLmF0dHIoe3dpZHRoOnUuX2xlbmd0aCxoZWlnaHQ6ZC5fbGVuZ3RofSksYy5zZXRUcmFuc2xhdGUoYS5wbG90LHUuX29mZnNldCxkLl9vZmZzZXQpLGEuX2hhc0NsaXBPbkF4aXNGYWxzZT8oVz1udWxsLFg9Wik6KFc9WixYPW51bGwpLGMuc2V0Q2xpcFVybChhLnBsb3QsVyx0KSxhLmxheWVyQ2xpcElkPVh9ZnVuY3Rpb24gSih0KXtyZXR1cm5cIk1cIitJK1wiLFwiK3QrXCJIXCIrRH1mdW5jdGlvbiBLKHQpe3JldHVyblwiTVwiK3UuX29mZnNldCtcIixcIit0K1wiaFwiK3UuX2xlbmd0aH1mdW5jdGlvbiBRKHQpe3JldHVyblwiTVwiK3QrXCIsXCIraitcIlZcIitOfWZ1bmN0aW9uIHR0KHQpe3JldHVyblwiTVwiK3QrXCIsXCIrZC5fb2Zmc2V0K1widlwiK2QuX2xlbmd0aH1mdW5jdGlvbiBldCh0LGUscil7aWYoIXQuc2hvd2xpbmV8fGkhPT10Ll9tYWluU3VicGxvdClyZXR1cm5cIlwiO2lmKCF0Ll9hbmNob3JBeGlzKXJldHVybiByKHQuX21haW5MaW5lUG9zaXRpb24pO3ZhciBuPWUodC5fbWFpbkxpbmVQb3NpdGlvbik7cmV0dXJuIHQubWlycm9yJiYobis9ZSh0Ll9tYWluTWlycm9yUG9zaXRpb24pKSxufWZvcihpIGluIGcuX3Bsb3RzKXthPWcuX3Bsb3RzW2ldLHU9YS54YXhpcyxkPWEueWF4aXM7dmFyIHJ0PVwiTTAsMFwiO2sodSxpKSYmKEY9VCh1LFwibGVmdFwiLGQseSksST11Ll9vZmZzZXQtKEY/bStGOjApLEI9VCh1LFwicmlnaHRcIixkLHkpLEQ9dS5fb2Zmc2V0K3UuX2xlbmd0aCsoQj9tK0I6MCksUD14KHUsZCxcImJvdHRvbVwiKSxSPXgodSxkLFwidG9wXCIpLCEoRz0hdS5fYW5jaG9yQXhpc3x8aSE9PXUuX21haW5TdWJwbG90KXx8XCJhbGx0aWNrc1wiIT09dS5taXJyb3ImJlwiYWxsXCIhPT11Lm1pcnJvcnx8KHUuX2xpbmVwb3NpdGlvbnNbaV09W1AsUl0pLHJ0PWV0KHUsSixLKSxHJiZ1LnNob3dsaW5lJiYoXCJhbGxcIj09PXUubWlycm9yfHxcImFsbHRpY2tzXCI9PT11Lm1pcnJvcikmJihydCs9SihQKStKKFIpKSxhLnhsaW5lcy5zdHlsZShcInN0cm9rZS13aWR0aFwiLHUuX2x3K1wicHhcIikuY2FsbChsLnN0cm9rZSx1LnNob3dsaW5lP3UubGluZWNvbG9yOlwicmdiYSgwLDAsMCwwKVwiKSksYS54bGluZXMuYXR0cihcImRcIixydCk7dmFyIG50PVwiTTAsMFwiO2soZCxpKSYmKHE9VChkLFwiYm90dG9tXCIsdSx5KSxOPWQuX29mZnNldCtkLl9sZW5ndGgrKHE/bTowKSxIPVQoZCxcInRvcFwiLHUseSksaj1kLl9vZmZzZXQtKEg/bTowKSxWPXgoZCx1LFwibGVmdFwiKSxVPXgoZCx1LFwicmlnaHRcIiksIShHPSFkLl9hbmNob3JBeGlzfHxpIT09ZC5fbWFpblN1YnBsb3QpfHxcImFsbHRpY2tzXCIhPT1kLm1pcnJvciYmXCJhbGxcIiE9PWQubWlycm9yfHwoZC5fbGluZXBvc2l0aW9uc1tpXT1bVixVXSksbnQ9ZXQoZCxRLHR0KSxHJiZkLnNob3dsaW5lJiYoXCJhbGxcIj09PWQubWlycm9yfHxcImFsbHRpY2tzXCI9PT1kLm1pcnJvcikmJihudCs9UShWKStRKFUpKSxhLnlsaW5lcy5zdHlsZShcInN0cm9rZS13aWR0aFwiLGQuX2x3K1wicHhcIikuY2FsbChsLnN0cm9rZSxkLnNob3dsaW5lP2QubGluZWNvbG9yOlwicmdiYSgwLDAsMCwwKVwiKSksYS55bGluZXMuYXR0cihcImRcIixudCl9cmV0dXJuIGYubWFrZUNsaXBQYXRocyh0KSx0Ll9wcm9taXNlcy5sZW5ndGgmJlByb21pc2UuYWxsKHQuX3Byb21pc2VzKX1mdW5jdGlvbiBrKHQsZSl7cmV0dXJuKHQudGlja3N8fHQuc2hvd2xpbmUpJiYoZT09PXQuX21haW5TdWJwbG90fHxcImFsbFwiPT09dC5taXJyb3J8fFwiYWxsdGlja3NcIj09PXQubWlycm9yKX1mdW5jdGlvbiBBKHQsZSxyKXtpZighci5zaG93bGluZXx8IXIuX2x3KXJldHVybiExO2lmKFwiYWxsXCI9PT1yLm1pcnJvcnx8XCJhbGx0aWNrc1wiPT09ci5taXJyb3IpcmV0dXJuITA7dmFyIG49ci5fYW5jaG9yQXhpcztpZighbilyZXR1cm4hMTt2YXIgaT1wLkZST01fQkxbZV07cmV0dXJuIHIuc2lkZT09PWU/bi5kb21haW5baV09PT10LmRvbWFpbltpXTpyLm1pcnJvciYmbi5kb21haW5bMS1pXT09PXQuZG9tYWluWzEtaV19ZnVuY3Rpb24gVCh0LGUscixuKXtpZihBKHQsZSxyKSlyZXR1cm4gci5fbHc7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPW5baV07aWYoYS5fbWFpbkF4aXM9PT1yLl9tYWluQXhpcyYmQSh0LGUsYSkpcmV0dXJuIGEuX2x3fXJldHVybiAwfXIubGF5b3V0U3R5bGVzPWZ1bmN0aW9uKHQpe3JldHVybiBvLnN5bmNPckFzeW5jKFthLmRvQXV0b01hcmdpbix3XSx0KX0sci5kcmF3TWFpblRpdGxlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1mdW5jdGlvbih0KXt2YXIgZT10LnRpdGxlLHI9eDtvLmlzUmlnaHRBbmNob3IoZSk/cj1iOm8uaXNMZWZ0QW5jaG9yKGUpJiYocj15KTtyZXR1cm4gcn0oZSksbj1mdW5jdGlvbih0KXt2YXIgZT10LnRpdGxlLHI9XCIwZW1cIjtvLmlzVG9wQW5jaG9yKGUpP3I9cC5DQVBfU0hJRlQrXCJlbVwiOm8uaXNNaWRkbGVBbmNob3IoZSkmJihyPXAuTUlEX1NISUZUK1wiZW1cIik7cmV0dXJuIHJ9KGUpO3UuZHJhdyh0LFwiZ3RpdGxlXCIse3Byb3BDb250YWluZXI6ZSxwcm9wTmFtZTpcInRpdGxlLnRleHRcIixwbGFjZWhvbGRlcjplLl9kZmx0VGl0bGUucGxvdCxhdHRyaWJ1dGVzOnt4OmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC50aXRsZSxuPXQuX3NpemUsaT0wO2U9PT15P2k9ci5wYWQubDplPT09YiYmKGk9LXIucGFkLnIpO3N3aXRjaChyLnhyZWYpe2Nhc2VcInBhcGVyXCI6cmV0dXJuIG4ubCtuLncqci54K2k7Y2FzZVwiY29udGFpbmVyXCI6ZGVmYXVsdDpyZXR1cm4gdC53aWR0aCpyLngraX19KGUscikseTpmdW5jdGlvbih0LGUpe3ZhciByPXQudGl0bGUsbj10Ll9zaXplLGk9MDtcIjBlbVwiIT09ZSYmZT9lPT09cC5DQVBfU0hJRlQrXCJlbVwiJiYoaT1yLnBhZC50KTppPS1yLnBhZC5iO2lmKFwiYXV0b1wiPT09ci55KXJldHVybiBuLnQvMjtzd2l0Y2goci55cmVmKXtjYXNlXCJwYXBlclwiOnJldHVybiBuLnQrbi5oLW4uaCpyLnkraTtjYXNlXCJjb250YWluZXJcIjpkZWZhdWx0OnJldHVybiB0LmhlaWdodC10LmhlaWdodCpyLnkraX19KGUsbiksXCJ0ZXh0LWFuY2hvclwiOnIsZHk6bn19KX0sci5kb1RyYWNlU3R5bGU9ZnVuY3Rpb24odCl7dmFyIGUsbj10LmNhbGNkYXRhLG89W107Zm9yKGU9MDtlPG4ubGVuZ3RoO2UrKyl7dmFyIGw9bltlXSxjPWxbMF18fHt9LHU9Yy50cmFjZXx8e30saD11Ll9tb2R1bGV8fHt9LGY9aC5hcnJheXNUb0NhbGNkYXRhO2YmJmYobCx1KTt2YXIgcD1oLmVkaXRTdHlsZTtwJiZvLnB1c2goe2ZuOnAsY2QwOmN9KX1pZihvLmxlbmd0aCl7Zm9yKGU9MDtlPG8ubGVuZ3RoO2UrKyl7dmFyIGQ9b1tlXTtkLmZuKHQsZC5jZDApfXModCksci5yZWRyYXdSZWdsVHJhY2VzKHQpfXJldHVybiBhLnN0eWxlKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKFwibGVnZW5kXCIsXCJkcmF3XCIpKHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5kb0NvbG9yQmFycz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQuY2FsY2RhdGEubGVuZ3RoO2UrKyl7dmFyIHI9dC5jYWxjZGF0YVtlXVswXTtpZigoci50fHx7fSkuY2Ipe3ZhciBuPXIudHJhY2Usbz1yLnQuY2I7aS50cmFjZUlzKG4sXCJjb250b3VyXCIpJiZvLmxpbmUoe3dpZHRoOiExIT09bi5jb250b3Vycy5zaG93bGluZXM/bi5saW5lLndpZHRoOjAsZGFzaDpuLmxpbmUuZGFzaCxjb2xvcjpcImxpbmVcIj09PW4uY29udG91cnMuY29sb3Jpbmc/by5fb3B0cy5saW5lLmNvbG9yOm4ubGluZS5jb2xvcn0pO3ZhciBzPW4uX21vZHVsZS5jb2xvcmJhci5jb250YWluZXIsbD0ocz9uW3NdOm4pLmNvbG9yYmFyO28ub3B0aW9ucyhsKSgpfX1yZXR1cm4gYS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmxheW91dFJlcGxvdD1mdW5jdGlvbih0KXt2YXIgZT10LmxheW91dDtyZXR1cm4gdC5sYXlvdXQ9dm9pZCAwLGkuY2FsbChcInBsb3RcIix0LFwiXCIsZSl9LHIuZG9MZWdlbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGkuZ2V0Q29tcG9uZW50TWV0aG9kKFwibGVnZW5kXCIsXCJkcmF3XCIpKHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5kb1RpY2tzUmVsYXlvdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGYuZHJhdyh0LFwicmVkcmF3XCIpLHQuX2Z1bGxMYXlvdXQuX2hhc09ubHlMYXJnZVNwbG9tcyYmKGkuc3VicGxvdHNSZWdpc3RyeS5zcGxvbS51cGRhdGVHcmlkKHQpLHModCksci5yZWRyYXdSZWdsVHJhY2VzKHQpKSxyLmRyYXdNYWluVGl0bGUodCksYS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmRvTW9kZUJhcj1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2gubWFuYWdlKHQpO2Zvcih2YXIgcj0wO3I8ZS5fYmFzZVBsb3RNb2R1bGVzLmxlbmd0aDtyKyspe3ZhciBuPWUuX2Jhc2VQbG90TW9kdWxlc1tyXS51cGRhdGVGeDtuJiZuKHQpfXJldHVybiBhLnByZXZpb3VzUHJvbWlzZXModCl9LHIuZG9DYW1lcmE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDNkLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9ZVtyW25dXSxhPWkuX3NjZW5lLG89aS5jYW1lcmE7YS5zZXRDYW1lcmEobyl9fSxyLmRyYXdEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlLG49dC5fZnVsbExheW91dCxvPXQuY2FsY2RhdGE7Zm9yKGU9MDtlPG8ubGVuZ3RoO2UrKyl7dmFyIGw9b1tlXVswXS50cmFjZTshMD09PWwudmlzaWJsZSYmbC5fbW9kdWxlLmNvbG9yYmFyfHxuLl9pbmZvbGF5ZXIuc2VsZWN0KFwiLmNiXCIrbC51aWQpLnJlbW92ZSgpfXModCk7dmFyIGM9bi5fYmFzZVBsb3RNb2R1bGVzO2ZvcihlPTA7ZTxjLmxlbmd0aDtlKyspY1tlXS5wbG90KHQpO3JldHVybiByLnJlZHJhd1JlZ2xUcmFjZXModCksYS5zdHlsZSh0KSxpLmdldENvbXBvbmVudE1ldGhvZChcInNoYXBlc1wiLFwiZHJhd1wiKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZChcImFubm90YXRpb25zXCIsXCJkcmF3XCIpKHQpLG4uX3JlcGxvdHRpbmc9ITEsYS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLnJlZHJhd1JlZ2xUcmFjZXM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtpZihlLl9oYXMoXCJyZWdsXCIpKXt2YXIgcixuLGk9dC5fZnVsbERhdGEsYT1bXSxzPVtdO2ZvcihlLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJmUuX3NwbG9tR3JpZC5kcmF3KCkscj0wO3I8aS5sZW5ndGg7cisrKXt2YXIgbD1pW3JdOyEwPT09bC52aXNpYmxlJiYoXCJzcGxvbVwiPT09bC50eXBlP2UuX3NwbG9tU2NlbmVzW2wudWlkXS5kcmF3KCk6XCJzY2F0dGVyZ2xcIj09PWwudHlwZT9vLnB1c2hVbmlxdWUoYSxsLnhheGlzK2wueWF4aXMpOlwic2NhdHRlcnBvbGFyZ2xcIj09PWwudHlwZSYmby5wdXNoVW5pcXVlKHMsbC5zdWJwbG90KSl9Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKykobj1lLl9wbG90c1thW3JdXSkuX3NjZW5lJiZuLl9zY2VuZS5kcmF3KCk7Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKykobj1lW3Nbcl1dLl9zdWJwbG90KS5fc2NlbmUmJm4uX3NjZW5lLmRyYXcoKX19LHIuZG9BdXRvUmFuZ2VBbmRDb25zdHJhaW50cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscj10Ll9mdWxsTGF5b3V0LG49Zi5saXN0KHQsXCJcIiwhMCksaT1yLl9heGlzTWF0Y2hHcm91cHN8fFtdLGE9MDthPG4ubGVuZ3RoO2ErKyllPW5bYV0sdih0LGUpLG0odCxlKTtnKHQpO3Q6Zm9yKHZhciBvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBzLGw9aVtvXSxjPW51bGw7Zm9yKHMgaW4gbCl7aWYoITE9PT0oZT1mLmdldEZyb21JZCh0LHMpKS5hdXRvcmFuZ2UpY29udGludWUgdDtjP2NbMF08Y1sxXT8oY1swXT1NYXRoLm1pbihjWzBdLGUucmFuZ2VbMF0pLGNbMV09TWF0aC5tYXgoY1sxXSxlLnJhbmdlWzFdKSk6KGNbMF09TWF0aC5tYXgoY1swXSxlLnJhbmdlWzBdKSxjWzFdPU1hdGgubWluKGNbMV0sZS5yYW5nZVsxXSkpOmM9ZS5yYW5nZX1mb3IocyBpbiBsKShlPWYuZ2V0RnJvbUlkKHQscykpLnJhbmdlPWMuc2xpY2UoKSxlLl9pbnB1dC5yYW5nZT1jLnNsaWNlKCksZS5zZXRTY2FsZSgpfX0sci5maW5hbERyYXc9ZnVuY3Rpb24odCl7aS5nZXRDb21wb25lbnRNZXRob2QoXCJzaGFwZXNcIixcImRyYXdcIikodCksaS5nZXRDb21wb25lbnRNZXRob2QoXCJpbWFnZXNcIixcImRyYXdcIikodCksaS5nZXRDb21wb25lbnRNZXRob2QoXCJhbm5vdGF0aW9uc1wiLFwiZHJhd1wiKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZChcInJhbmdlc2xpZGVyXCIsXCJkcmF3XCIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKFwicmFuZ2VzZWxlY3RvclwiLFwiZHJhd1wiKSh0KX0sci5kcmF3TWFyZ2luUHVzaGVycz1mdW5jdGlvbih0KXtpLmdldENvbXBvbmVudE1ldGhvZChcImxlZ2VuZFwiLFwiZHJhd1wiKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZChcInJhbmdlc2VsZWN0b3JcIixcImRyYXdcIikodCksaS5nZXRDb21wb25lbnRNZXRob2QoXCJzbGlkZXJzXCIsXCJkcmF3XCIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKFwidXBkYXRlbWVudXNcIixcImRyYXdcIikodCl9fSx7XCIuLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vY29tcG9uZW50cy9tb2RlYmFyXCI6NjM3LFwiLi4vY29tcG9uZW50cy90aXRsZXNcIjo2NjYsXCIuLi9jb25zdGFudHMvYWxpZ25tZW50XCI6NjczLFwiLi4vbGliXCI6NzAxLFwiLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzXCI6Njg2LFwiLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZVwiOjc0OCxcIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzXCI6NzU2LFwiLi4vcGxvdHMvcGxvdHNcIjo4MTAsXCIuLi9yZWdpc3RyeVwiOjgyOSxkMzoxNTV9XSw3NDE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vbGliXCIpLGk9bi5pc1BsYWluT2JqZWN0LGE9dChcIi4vcGxvdF9zY2hlbWFcIiksbz10KFwiLi4vcGxvdHMvcGxvdHNcIikscz10KFwiLi4vcGxvdHMvYXR0cmlidXRlc1wiKSxsPXQoXCIuL3Bsb3RfdGVtcGxhdGVcIiksYz10KFwiLi9wbG90X2NvbmZpZ1wiKS5kZmx0Q29uZmlnO2Z1bmN0aW9uIHUodCxlKXt0PW4uZXh0ZW5kRGVlcCh7fSx0KTt2YXIgcixhLG89T2JqZWN0LmtleXModCkuc29ydCgpO2Z1bmN0aW9uIHMoZSxyLG4pe2lmKGkocikmJmkoZSkpdShlLHIpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShyKSYmQXJyYXkuaXNBcnJheShlKSl7dmFyIG89bC5hcnJheVRlbXBsYXRlcih7X3RlbXBsYXRlOnR9LG4pO2ZvcihhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV0sYz1vLm5ld0l0ZW0ocykuX3RlbXBsYXRlO2MmJnUoYyxzKX12YXIgaD1vLmRlZmF1bHRJdGVtcygpO2ZvcihhPTA7YTxoLmxlbmd0aDthKyspci5wdXNoKGhbYV0uX3RlbXBsYXRlKTtmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKWRlbGV0ZSByW2FdLnRlbXBsYXRlaXRlbW5hbWV9fWZvcihyPTA7cjxvLmxlbmd0aDtyKyspe3ZhciBjPW9bcl0sZj10W2NdO2lmKGMgaW4gZT9zKGYsZVtjXSxjKTplW2NdPWYsaChjKT09PWMpZm9yKHZhciBwIGluIGUpe3ZhciBkPWgocCk7cD09PWR8fGQhPT1jfHxwIGluIHR8fHMoZixlW3BdLGMpfX19ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdC5yZXBsYWNlKC9bMC05XSskLyxcIlwiKX1mdW5jdGlvbiBmKHQsZSxyLGEsbyl7dmFyIHM9byYmcihvKTtmb3IodmFyIGMgaW4gdCl7dmFyIHU9dFtjXSxkPXAodCxjLGEpLGc9cCh0LGMsbyksdj1yKGcpO2lmKCF2KXt2YXIgbT1oKGMpO20hPT1jJiYodj1yKGc9cCh0LG0sbykpKX1pZigoIXN8fHMhPT12KSYmISghdnx8di5fbm9UZW1wbGF0aW5nfHxcImRhdGFfYXJyYXlcIj09PXYudmFsVHlwZXx8di5hcnJheU9rJiZBcnJheS5pc0FycmF5KHUpKSlpZighdi52YWxUeXBlJiZpKHUpKWYodSxlLHIsZCxnKTtlbHNlIGlmKHYuX2lzTGlua2VkVG9BcnJheSYmQXJyYXkuaXNBcnJheSh1KSlmb3IodmFyIHk9ITEseD0wLGI9e30sXz0wO188dS5sZW5ndGg7XysrKXt2YXIgdz11W19dO2lmKGkodykpe3ZhciBrPXcubmFtZTtpZihrKWJba118fChmKHcsZSxyLHAodSx4LGQpLHAodSx4LGcpKSx4KyssYltrXT0xKTtlbHNlIGlmKCF5KXt2YXIgQT1wKHQsbC5hcnJheURlZmF1bHRLZXkoYyksYSksVD1wKHUseCxkKTtmKHcsZSxyLFQscCh1LHgsZykpO3ZhciBNPW4ubmVzdGVkUHJvcGVydHkoZSxUKTtuLm5lc3RlZFByb3BlcnR5KGUsQSkuc2V0KE0uZ2V0KCkpLE0uc2V0KG51bGwpLHk9ITB9fX1lbHNle24ubmVzdGVkUHJvcGVydHkoZSxkKS5zZXQodSl9fX1mdW5jdGlvbiBwKHQsZSxyKXtyZXR1cm4gcj9BcnJheS5pc0FycmF5KHQpP3IrXCJbXCIrZStcIl1cIjpyK1wiLlwiK2U6ZX1mdW5jdGlvbiBkKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKGkodFtlXSkpcmV0dXJuITB9ZnVuY3Rpb24gZyh0KXt2YXIgZTtzd2l0Y2godC5jb2RlKXtjYXNlXCJkYXRhXCI6ZT1cIlRoZSB0ZW1wbGF0ZSBoYXMgbm8ga2V5IGRhdGEuXCI7YnJlYWs7Y2FzZVwibGF5b3V0XCI6ZT1cIlRoZSB0ZW1wbGF0ZSBoYXMgbm8ga2V5IGxheW91dC5cIjticmVhaztjYXNlXCJtaXNzaW5nXCI6ZT10LnBhdGg/XCJUaGVyZSBhcmUgbm8gdGVtcGxhdGVzIGZvciBpdGVtIFwiK3QucGF0aCtcIiB3aXRoIG5hbWUgXCIrdC50ZW1wbGF0ZWl0ZW1uYW1lOlwiVGhlcmUgYXJlIG5vIHRlbXBsYXRlcyBmb3IgdHJhY2UgXCIrdC5pbmRleCtcIiwgb2YgdHlwZSBcIit0LnRyYWNlVHlwZStcIi5cIjticmVhaztjYXNlXCJ1bnVzZWRcIjplPXQucGF0aD9cIlRoZSB0ZW1wbGF0ZSBpdGVtIGF0IFwiK3QucGF0aCtcIiB3YXMgbm90IHVzZWQgaW4gY29uc3RydWN0aW5nIHRoZSBwbG90LlwiOnQuZGF0YUNvdW50P1wiU29tZSBvZiB0aGUgdGVtcGxhdGVzIG9mIHR5cGUgXCIrdC50cmFjZVR5cGUrXCIgd2VyZSBub3QgdXNlZC4gVGhlIHRlbXBsYXRlIGhhcyBcIit0LnRlbXBsYXRlQ291bnQrXCIgdHJhY2VzLCB0aGUgZGF0YSBvbmx5IGhhcyBcIit0LmRhdGFDb3VudCtcIiBvZiB0aGlzIHR5cGUuXCI6XCJUaGUgdGVtcGxhdGUgaGFzIFwiK3QudGVtcGxhdGVDb3VudCtcIiB0cmFjZXMgb2YgdHlwZSBcIit0LnRyYWNlVHlwZStcIiBidXQgdGhlcmUgYXJlIG5vbmUgaW4gdGhlIGRhdGEuXCI7YnJlYWs7Y2FzZVwicmV1c2VkXCI6ZT1cIlNvbWUgb2YgdGhlIHRlbXBsYXRlcyBvZiB0eXBlIFwiK3QudHJhY2VUeXBlK1wiIHdlcmUgdXNlZCBtb3JlIHRoYW4gb25jZS4gVGhlIHRlbXBsYXRlIGhhcyBcIit0LnRlbXBsYXRlQ291bnQrXCIgdHJhY2VzLCB0aGUgZGF0YSBoYXMgXCIrdC5kYXRhQ291bnQrXCIgb2YgdGhpcyB0eXBlLlwifXJldHVybiB0Lm1zZz1lLHR9ci5tYWtlVGVtcGxhdGU9ZnVuY3Rpb24odCl7dD1uLmlzUGxhaW5PYmplY3QodCk/dDpuLmdldEdyYXBoRGl2KHQpLHQ9bi5leHRlbmREZWVwKHtfY29udGV4dDpjfSx7ZGF0YTp0LmRhdGEsbGF5b3V0OnQubGF5b3V0fSksby5zdXBwbHlEZWZhdWx0cyh0KTt2YXIgZT10LmRhdGF8fFtdLHI9dC5sYXlvdXR8fHt9O3IuX2Jhc2VQbG90TW9kdWxlcz10Ll9mdWxsTGF5b3V0Ll9iYXNlUGxvdE1vZHVsZXMsci5fbW9kdWxlcz10Ll9mdWxsTGF5b3V0Ll9tb2R1bGVzO3ZhciBsPXtkYXRhOnt9LGxheW91dDp7fX07ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXt9O2YodCxlLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEuZ2V0VHJhY2VWYWxPYmplY3QodCxuLm5lc3RlZFByb3BlcnR5KHt9LGUpLnBhcnRzKX0uYmluZChudWxsLHQpKTt2YXIgcj1uLmNvZXJjZSh0LHt9LHMsXCJ0eXBlXCIpLGk9bC5kYXRhW3JdO2l8fChpPWwuZGF0YVtyXT1bXSksaS5wdXNoKGUpfSksZihyLGwubGF5b3V0LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEuZ2V0TGF5b3V0VmFsT2JqZWN0KHQsbi5uZXN0ZWRQcm9wZXJ0eSh7fSxlKS5wYXJ0cyl9LmJpbmQobnVsbCxyKSksZGVsZXRlIGwubGF5b3V0LnRlbXBsYXRlO3ZhciBoPXIudGVtcGxhdGU7aWYoaShoKSl7dmFyIHAsZCxnLHYsbSx5LHg9aC5sYXlvdXQ7aSh4KSYmdSh4LGwubGF5b3V0KTt2YXIgYj1oLmRhdGE7aWYoaShiKSl7Zm9yKGQgaW4gbC5kYXRhKWlmKGc9YltkXSxBcnJheS5pc0FycmF5KGcpKXtmb3IoeT0obT1sLmRhdGFbZF0pLmxlbmd0aCx2PWcubGVuZ3RoLHA9MDtwPHk7cCsrKXUoZ1twJXZdLG1bcF0pO2ZvcihwPXk7cDx2O3ArKyltLnB1c2gobi5leHRlbmREZWVwKHt9LGdbcF0pKX1mb3IoZCBpbiBiKWQgaW4gbC5kYXRhfHwobC5kYXRhW2RdPW4uZXh0ZW5kRGVlcChbXSxiW2RdKSl9fXJldHVybiBsfSxyLnZhbGlkYXRlVGVtcGxhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1uLmV4dGVuZERlZXAoe30se19jb250ZXh0OmMsZGF0YTp0LmRhdGEsbGF5b3V0OnQubGF5b3V0fSksYT1yLmxheW91dHx8e307aShlKXx8KGU9YS50ZW1wbGF0ZXx8e30pO3ZhciBzPWUubGF5b3V0LGw9ZS5kYXRhLHU9W107ci5sYXlvdXQ9YSxyLmxheW91dC50ZW1wbGF0ZT1lLG8uc3VwcGx5RGVmYXVsdHMocik7dmFyIGY9ci5fZnVsbExheW91dCx2PXIuX2Z1bGxEYXRhLG09e307aWYoaShzKT8oIWZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIG4gaW4gZSlpZihcIl9cIiE9PW4uY2hhckF0KDApJiZpKGVbbl0pKXt2YXIgYSxvPWgobikscz1bXTtmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKXMucHVzaChwKGUsbixyW2FdKSksbyE9PW4mJnMucHVzaChwKGUsbyxyW2FdKSk7Zm9yKGE9MDthPHMubGVuZ3RoO2ErKyltW3NbYV1dPTE7dChlW25dLHMpfX0oZixbXCJsYXlvdXRcIl0pLGZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIG4gaW4gZSlpZigtMT09PW4uaW5kZXhPZihcImRlZmF1bHRzXCIpJiZpKGVbbl0pKXt2YXIgYT1wKGUsbixyKTttW2FdP3QoZVtuXSxhKTp1LnB1c2goe2NvZGU6XCJ1bnVzZWRcIixwYXRoOmF9KX19KHMsXCJsYXlvdXRcIikpOnUucHVzaCh7Y29kZTpcImxheW91dFwifSksaShsKSl7Zm9yKHZhciB5LHg9e30sYj0wO2I8di5sZW5ndGg7YisrKXt2YXIgXz12W2JdO3hbeT1fLnR5cGVdPSh4W3ldfHwwKSsxLF8uX2Z1bGxJbnB1dC5fdGVtcGxhdGV8fHUucHVzaCh7Y29kZTpcIm1pc3NpbmdcIixpbmRleDpfLl9mdWxsSW5wdXQuaW5kZXgsdHJhY2VUeXBlOnl9KX1mb3IoeSBpbiBsKXt2YXIgdz1sW3ldLmxlbmd0aCxrPXhbeV18fDA7dz5rP3UucHVzaCh7Y29kZTpcInVudXNlZFwiLHRyYWNlVHlwZTp5LHRlbXBsYXRlQ291bnQ6dyxkYXRhQ291bnQ6a30pOms+dyYmdS5wdXNoKHtjb2RlOlwicmV1c2VkXCIsdHJhY2VUeXBlOnksdGVtcGxhdGVDb3VudDp3LGRhdGFDb3VudDprfSl9fWVsc2UgdS5wdXNoKHtjb2RlOlwiZGF0YVwifSk7aWYoZnVuY3Rpb24gdChlLHIpe2Zvcih2YXIgbiBpbiBlKWlmKFwiX1wiIT09bi5jaGFyQXQoMCkpe3ZhciBhPWVbbl0sbz1wKGUsbixyKTtpKGEpPyhBcnJheS5pc0FycmF5KGUpJiYhMT09PWEuX3RlbXBsYXRlJiZhLnRlbXBsYXRlaXRlbW5hbWUmJnUucHVzaCh7Y29kZTpcIm1pc3NpbmdcIixwYXRoOm8sdGVtcGxhdGVpdGVtbmFtZTphLnRlbXBsYXRlaXRlbW5hbWV9KSx0KGEsbykpOkFycmF5LmlzQXJyYXkoYSkmJmQoYSkmJnQoYSxvKX19KHtkYXRhOnYsbGF5b3V0OmZ9LFwiXCIpLHUubGVuZ3RoKXJldHVybiB1Lm1hcChnKX19LHtcIi4uL2xpYlwiOjcwMSxcIi4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDYsXCIuLi9wbG90cy9wbG90c1wiOjgxMCxcIi4vcGxvdF9jb25maWdcIjo3MzcsXCIuL3Bsb3Rfc2NoZW1hXCI6NzM4LFwiLi9wbG90X3RlbXBsYXRlXCI6NzM5fV0sNzQyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4vcGxvdF9hcGlcIiksYT10KFwiLi4vbGliXCIpLG89dChcIi4uL3NuYXBzaG90L2hlbHBlcnNcIikscz10KFwiLi4vc25hcHNob3QvdG9zdmdcIiksbD10KFwiLi4vc25hcHNob3Qvc3ZndG9pbWdcIiksYz17Zm9ybWF0Ont2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJwbmdcIixcImpwZWdcIixcIndlYnBcIixcInN2Z1wiXSxkZmx0OlwicG5nXCJ9LHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjF9LGhlaWdodDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjoxfSxzY2FsZTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MX0sc2V0QmFja2dyb3VuZDp7dmFsVHlwZTpcImFueVwiLGRmbHQ6ITF9LGltYWdlRGF0YU9ubHk6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX19LHU9L15kYXRhOmltYWdlXFwvXFx3KztiYXNlNjQsLztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixoLGYscDtmdW5jdGlvbiBkKHQpe3JldHVybiEodCBpbiBlKXx8YS52YWxpZGF0ZShlW3RdLGNbdF0pfWlmKGU9ZXx8e30sYS5pc1BsYWluT2JqZWN0KHQpPyhyPXQuZGF0YXx8W10saD10LmxheW91dHx8e30sZj10LmNvbmZpZ3x8e30scD17fSk6KHQ9YS5nZXRHcmFwaERpdih0KSxyPWEuZXh0ZW5kRGVlcChbXSx0LmRhdGEpLGg9YS5leHRlbmREZWVwKHt9LHQubGF5b3V0KSxmPXQuX2NvbnRleHQscD10Ll9mdWxsTGF5b3V0fHx7fSksIWQoXCJ3aWR0aFwiKSYmbnVsbCE9PWUud2lkdGh8fCFkKFwiaGVpZ2h0XCIpJiZudWxsIT09ZS5oZWlnaHQpdGhyb3cgbmV3IEVycm9yKFwiSGVpZ2h0IGFuZCB3aWR0aCBzaG91bGQgYmUgcGl4ZWwgdmFsdWVzLlwiKTtpZighZChcImZvcm1hdFwiKSl0aHJvdyBuZXcgRXJyb3IoXCJJbWFnZSBmb3JtYXQgaXMgbm90IGpwZWcsIHBuZywgc3ZnIG9yIHdlYnAuXCIpO3ZhciBnPXt9O2Z1bmN0aW9uIHYodCxyKXtyZXR1cm4gYS5jb2VyY2UoZSxnLGMsdCxyKX12YXIgbT12KFwiZm9ybWF0XCIpLHk9dihcIndpZHRoXCIpLHg9dihcImhlaWdodFwiKSxiPXYoXCJzY2FsZVwiKSxfPXYoXCJzZXRCYWNrZ3JvdW5kXCIpLHc9dihcImltYWdlRGF0YU9ubHlcIiksaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO2suc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwiLGsuc3R5bGUubGVmdD1cIi01MDAwcHhcIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGspO3ZhciBBPWEuZXh0ZW5kRmxhdCh7fSxoKTt5P0Eud2lkdGg9eTpudWxsPT09ZS53aWR0aCYmbihwLndpZHRoKSYmKEEud2lkdGg9cC53aWR0aCkseD9BLmhlaWdodD14Om51bGw9PT1lLmhlaWdodCYmbihwLmhlaWdodCkmJihBLmhlaWdodD1wLmhlaWdodCk7dmFyIFQ9YS5leHRlbmRGbGF0KHt9LGYse19leHBvcnRlZFBsb3Q6ITAsc3RhdGljUGxvdDohMCxzZXRCYWNrZ3JvdW5kOl99KSxNPW8uZ2V0UmVkcmF3RnVuYyhrKTtmdW5jdGlvbiBTKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCxvLmdldERlbGF5KGsuX2Z1bGxMYXlvdXQpKX0pfWZ1bmN0aW9uIEUoKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCxlKXt2YXIgcj1zKGssbSxiKSxuPWsuX2Z1bGxMYXlvdXQud2lkdGgsbz1rLl9mdWxsTGF5b3V0LmhlaWdodDtpZihpLnB1cmdlKGspLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoayksXCJzdmdcIj09PW0pcmV0dXJuIHQodz9yOlwiZGF0YTppbWFnZS9zdmcreG1sLFwiK2VuY29kZVVSSUNvbXBvbmVudChyKSk7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtjLmlkPWEucmFuZHN0cigpLGwoe2Zvcm1hdDptLHdpZHRoOm4saGVpZ2h0Om8sc2NhbGU6YixjYW52YXM6Yyxzdmc6cixwcm9taXNlOiEwfSkudGhlbih0KS5jYXRjaChlKX0pfXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LGUpe2kucGxvdChrLHIsQSxUKS50aGVuKE0pLnRoZW4oUykudGhlbihFKS50aGVuKGZ1bmN0aW9uKGUpe3QoZnVuY3Rpb24odCl7cmV0dXJuIHc/dC5yZXBsYWNlKHUsXCJcIik6dH0oZSkpfSkuY2F0Y2goZnVuY3Rpb24odCl7ZSh0KX0pfSl9fSx7XCIuLi9saWJcIjo3MDEsXCIuLi9zbmFwc2hvdC9oZWxwZXJzXCI6ODMzLFwiLi4vc25hcHNob3Qvc3ZndG9pbWdcIjo4MzUsXCIuLi9zbmFwc2hvdC90b3N2Z1wiOjgzNyxcIi4vcGxvdF9hcGlcIjo3MzYsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDc0MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9saWJcIiksaT10KFwiLi4vcGxvdHMvcGxvdHNcIiksYT10KFwiLi9wbG90X3NjaGVtYVwiKSxvPXQoXCIuL3Bsb3RfY29uZmlnXCIpLmRmbHRDb25maWcscz1uLmlzUGxhaW5PYmplY3QsbD1BcnJheS5pc0FycmF5LGM9bi5pc0FycmF5T3JUeXBlZEFycmF5O2Z1bmN0aW9uIHUodCxlLHIsaSxhLG8pe289b3x8W107Zm9yKHZhciBoPU9iamVjdC5rZXlzKHQpLGY9MDtmPGgubGVuZ3RoO2YrKyl7dmFyIHY9aFtmXTtpZihcInRyYW5zZm9ybXNcIiE9PXYpe3ZhciBtPW8uc2xpY2UoKTttLnB1c2godik7dmFyIHk9dFt2XSx4PWVbdl0sYj1nKHIsdiksXz1cImluZm9fYXJyYXlcIj09PShifHx7fSkudmFsVHlwZSx3PVwiY29sb3JzY2FsZVwiPT09KGJ8fHt9KS52YWxUeXBlLGs9KGJ8fHt9KS5pdGVtcztpZihkKHIsdikpaWYocyh5KSYmcyh4KSl1KHkseCxiLGksYSxtKTtlbHNlIGlmKF8mJmwoeSkpe3kubGVuZ3RoPngubGVuZ3RoJiZpLnB1c2gocChcInVudXNlZFwiLGEsbS5jb25jYXQoeC5sZW5ndGgpKSk7dmFyIEEsVCxNLFMsRSxDPXgubGVuZ3RoLEw9QXJyYXkuaXNBcnJheShrKTtpZihMJiYoQz1NYXRoLm1pbihDLGsubGVuZ3RoKSksMj09PWIuZGltZW5zaW9ucylmb3IoVD0wO1Q8QztUKyspaWYobCh5W1RdKSl7eVtUXS5sZW5ndGg+eFtUXS5sZW5ndGgmJmkucHVzaChwKFwidW51c2VkXCIsYSxtLmNvbmNhdChULHhbVF0ubGVuZ3RoKSkpO3ZhciB6PXhbVF0ubGVuZ3RoO2ZvcihBPTA7QTwoTD9NYXRoLm1pbih6LGtbVF0ubGVuZ3RoKTp6KTtBKyspTT1MP2tbVF1bQV06ayxTPXlbVF1bQV0sRT14W1RdW0FdLG4udmFsaWRhdGUoUyxNKT9FIT09UyYmRSE9PStTJiZpLnB1c2gocChcImR5bmFtaWNcIixhLG0uY29uY2F0KFQsQSksUyxFKSk6aS5wdXNoKHAoXCJ2YWx1ZVwiLGEsbS5jb25jYXQoVCxBKSxTKSl9ZWxzZSBpLnB1c2gocChcImFycmF5XCIsYSxtLmNvbmNhdChUKSx5W1RdKSk7ZWxzZSBmb3IoVD0wO1Q8QztUKyspTT1MP2tbVF06ayxTPXlbVF0sRT14W1RdLG4udmFsaWRhdGUoUyxNKT9FIT09UyYmRSE9PStTJiZpLnB1c2gocChcImR5bmFtaWNcIixhLG0uY29uY2F0KFQpLFMsRSkpOmkucHVzaChwKFwidmFsdWVcIixhLG0uY29uY2F0KFQpLFMpKX1lbHNlIGlmKGIuaXRlbXMmJiFfJiZsKHkpKXt2YXIgTyxJLEQ9a1tPYmplY3Qua2V5cyhrKVswXV0sUD1bXTtmb3IoTz0wO088eC5sZW5ndGg7TysrKXt2YXIgUj14W09dLl9pbmRleHx8TztpZigoST1tLnNsaWNlKCkpLnB1c2goUikscyh5W1JdKSYmcyh4W09dKSl7UC5wdXNoKFIpO3ZhciBGPXlbUl0sQj14W09dO3MoRikmJiExIT09Ri52aXNpYmxlJiYhMT09PUIudmlzaWJsZT9pLnB1c2gocChcImludmlzaWJsZVwiLGEsSSkpOnUoRixCLEQsaSxhLEkpfX1mb3IoTz0wO088eS5sZW5ndGg7TysrKShJPW0uc2xpY2UoKSkucHVzaChPKSxzKHlbT10pPy0xPT09UC5pbmRleE9mKE8pJiZpLnB1c2gocChcInVudXNlZFwiLGEsSSkpOmkucHVzaChwKFwib2JqZWN0XCIsYSxJLHlbT10pKX1lbHNlIXMoeSkmJnMoeCk/aS5wdXNoKHAoXCJvYmplY3RcIixhLG0seSkpOmMoeSl8fCFjKHgpfHxffHx3P3YgaW4gZT9uLnZhbGlkYXRlKHksYik/XCJlbnVtZXJhdGVkXCI9PT1iLnZhbFR5cGUmJihiLmNvZXJjZU51bWJlciYmeSE9PSt4fHx5IT09eCkmJmkucHVzaChwKFwiZHluYW1pY1wiLGEsbSx5LHgpKTppLnB1c2gocChcInZhbHVlXCIsYSxtLHkpKTppLnB1c2gocChcInVudXNlZFwiLGEsbSx5KSk6aS5wdXNoKHAoXCJhcnJheVwiLGEsbSx5KSk7ZWxzZSBpLnB1c2gocChcInNjaGVtYVwiLGEsbSkpfX1yZXR1cm4gaX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixjLGg9YS5nZXQoKSxmPVtdLGQ9e19jb250ZXh0Om4uZXh0ZW5kRmxhdCh7fSxvKX07bCh0KT8oZC5kYXRhPW4uZXh0ZW5kRGVlcChbXSx0KSxyPXQpOihkLmRhdGE9W10scj1bXSxmLnB1c2gocChcImFycmF5XCIsXCJkYXRhXCIpKSkscyhlKT8oZC5sYXlvdXQ9bi5leHRlbmREZWVwKHt9LGUpLGM9ZSk6KGQubGF5b3V0PXt9LGM9e30sYXJndW1lbnRzLmxlbmd0aD4xJiZmLnB1c2gocChcIm9iamVjdFwiLFwibGF5b3V0XCIpKSksaS5zdXBwbHlEZWZhdWx0cyhkKTtmb3IodmFyIGc9ZC5fZnVsbERhdGEsdj1yLmxlbmd0aCxtPTA7bTx2O20rKyl7dmFyIHk9clttXSx4PVtcImRhdGFcIixtXTtpZihzKHkpKXt2YXIgYj1nW21dLF89Yi50eXBlLHc9aC50cmFjZXNbX10uYXR0cmlidXRlczt3LnR5cGU9e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltfXX0sITE9PT1iLnZpc2libGUmJiExIT09eS52aXNpYmxlJiZmLnB1c2gocChcImludmlzaWJsZVwiLHgpKSx1KHksYix3LGYseCk7dmFyIGs9eS50cmFuc2Zvcm1zLEE9Yi50cmFuc2Zvcm1zO2lmKGspe2woayl8fGYucHVzaChwKFwiYXJyYXlcIix4LFtcInRyYW5zZm9ybXNcIl0pKSx4LnB1c2goXCJ0cmFuc2Zvcm1zXCIpO2Zvcih2YXIgVD0wO1Q8ay5sZW5ndGg7VCsrKXt2YXIgTT1bXCJ0cmFuc2Zvcm1zXCIsVF0sUz1rW1RdLnR5cGU7aWYocyhrW1RdKSl7dmFyIEU9aC50cmFuc2Zvcm1zW1NdP2gudHJhbnNmb3Jtc1tTXS5hdHRyaWJ1dGVzOnt9O0UudHlwZT17dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6T2JqZWN0LmtleXMoaC50cmFuc2Zvcm1zKX0sdShrW1RdLEFbVF0sRSxmLHgsTSl9ZWxzZSBmLnB1c2gocChcIm9iamVjdFwiLHgsTSkpfX19ZWxzZSBmLnB1c2gocChcIm9iamVjdFwiLHgpKX1yZXR1cm4gdShjLGQuX2Z1bGxMYXlvdXQsZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sYXlvdXQubGF5b3V0QXR0cmlidXRlcyxpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPWVbaV0sbz10LnRyYWNlc1thLnR5cGVdLHM9by5sYXlvdXRBdHRyaWJ1dGVzO3MmJihhLnN1YnBsb3Q/bi5leHRlbmRGbGF0KHJbby5hdHRyaWJ1dGVzLnN1YnBsb3QuZGZsdF0scyk6bi5leHRlbmRGbGF0KHIscykpfXJldHVybiByfShoLGcpLGYsXCJsYXlvdXRcIiksMD09PWYubGVuZ3RoP3ZvaWQgMDpmfTt2YXIgaD17b2JqZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuKFwibGF5b3V0XCI9PT10JiZcIlwiPT09ZT9cIlRoZSBsYXlvdXQgYXJndW1lbnRcIjpcImRhdGFcIj09PXRbMF0mJlwiXCI9PT1lP1wiVHJhY2UgXCIrdFsxXStcIiBpbiB0aGUgZGF0YSBhcmd1bWVudFwiOmYodCkrXCJrZXkgXCIrZSkrXCIgbXVzdCBiZSBsaW5rZWQgdG8gYW4gb2JqZWN0IGNvbnRhaW5lclwifSxhcnJheTpmdW5jdGlvbih0LGUpe3JldHVybihcImRhdGFcIj09PXQ/XCJUaGUgZGF0YSBhcmd1bWVudFwiOmYodCkrXCJrZXkgXCIrZSkrXCIgbXVzdCBiZSBsaW5rZWQgdG8gYW4gYXJyYXkgY29udGFpbmVyXCJ9LHNjaGVtYTpmdW5jdGlvbih0LGUpe3JldHVybiBmKHQpK1wia2V5IFwiK2UrXCIgaXMgbm90IHBhcnQgb2YgdGhlIHNjaGVtYVwifSx1bnVzZWQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXMocik/XCJjb250YWluZXJcIjpcImtleVwiO3JldHVybiBmKHQpK24rXCIgXCIrZStcIiBkaWQgbm90IGdldCBjb2VyY2VkXCJ9LGR5bmFtaWM6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuW2YodCkrXCJrZXlcIixlLFwiKHNldCB0byAnXCIrcitcIicpXCIsXCJnb3QgcmVzZXQgdG9cIixcIidcIituK1wiJ1wiLFwiZHVyaW5nIGRlZmF1bHRzLlwiXS5qb2luKFwiIFwiKX0saW52aXNpYmxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuKGU/Zih0KStcIml0ZW0gXCIrZTpcIlRyYWNlIFwiK3RbMV0pK1wiIGdvdCBkZWZhdWx0ZWQgdG8gYmUgbm90IHZpc2libGVcIn0sdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3JldHVybltmKHQpK1wia2V5IFwiK2UsXCJpcyBzZXQgdG8gYW4gaW52YWxpZCB2YWx1ZSAoXCIrcitcIilcIl0uam9pbihcIiBcIil9fTtmdW5jdGlvbiBmKHQpe3JldHVybiBsKHQpP1wiSW4gZGF0YSB0cmFjZSBcIit0WzFdK1wiLCBcIjpcIkluIFwiK3QrXCIsIFwifWZ1bmN0aW9uIHAodCxlLHIsaSxhKXt2YXIgbyxzO3I9cnx8XCJcIixsKGUpPyhvPWVbMF0scz1lWzFdKToobz1lLHM9bnVsbCk7dmFyIGM9ZnVuY3Rpb24odCl7aWYoIWwodCkpcmV0dXJuIFN0cmluZyh0KTtmb3IodmFyIGU9XCJcIixyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07XCJudW1iZXJcIj09dHlwZW9mIG4/ZT1lLnN1YnN0cigwLGUubGVuZ3RoLTEpK1wiW1wiK24rXCJdXCI6ZSs9bixyPHQubGVuZ3RoLTEmJihlKz1cIi5cIil9cmV0dXJuIGV9KHIpLHU9aFt0XShlLGMsaSxhKTtyZXR1cm4gbi5sb2codSkse2NvZGU6dCxjb250YWluZXI6byx0cmFjZTpzLHBhdGg6cixhc3RyOmMsbXNnOnV9fWZ1bmN0aW9uIGQodCxlKXt2YXIgcj1tKGUpLG49ci5rZXlNaW51c0lkLGk9ci5pZDtyZXR1cm4hIShuIGluIHQmJnRbbl0uX2lzU3VicGxvdE9iaiYmaSl8fGUgaW4gdH1mdW5jdGlvbiBnKHQsZSl7cmV0dXJuIGUgaW4gdD90W2VdOnRbbShlKS5rZXlNaW51c0lkXX12YXIgdj1uLmNvdW50ZXJSZWdleChcIihbYS16XSspXCIpO2Z1bmN0aW9uIG0odCl7dmFyIGU9dC5tYXRjaCh2KTtyZXR1cm57a2V5TWludXNJZDplJiZlWzFdLGlkOmUmJmVbMl19fX0se1wiLi4vbGliXCI6NzAxLFwiLi4vcGxvdHMvcGxvdHNcIjo4MTAsXCIuL3Bsb3RfY29uZmlnXCI6NzM3LFwiLi9wbG90X3NjaGVtYVwiOjczOH1dLDc0NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17bW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIixkZmx0OlwiYWZ0ZXJhbGxcIix2YWx1ZXM6W1wiaW1tZWRpYXRlXCIsXCJuZXh0XCIsXCJhZnRlcmFsbFwiXX0sZGlyZWN0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJmb3J3YXJkXCIsXCJyZXZlcnNlXCJdLGRmbHQ6XCJmb3J3YXJkXCJ9LGZyb21jdXJyZW50Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LGZyYW1lOntkdXJhdGlvbjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6NTAwfSxyZWRyYXc6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMH19LHRyYW5zaXRpb246e2R1cmF0aW9uOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDo1MDAsZWRpdFR5cGU6XCJub25lXCJ9LGVhc2luZzp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIixkZmx0OlwiY3ViaWMtaW4tb3V0XCIsdmFsdWVzOltcImxpbmVhclwiLFwicXVhZFwiLFwiY3ViaWNcIixcInNpblwiLFwiZXhwXCIsXCJjaXJjbGVcIixcImVsYXN0aWNcIixcImJhY2tcIixcImJvdW5jZVwiLFwibGluZWFyLWluXCIsXCJxdWFkLWluXCIsXCJjdWJpYy1pblwiLFwic2luLWluXCIsXCJleHAtaW5cIixcImNpcmNsZS1pblwiLFwiZWxhc3RpYy1pblwiLFwiYmFjay1pblwiLFwiYm91bmNlLWluXCIsXCJsaW5lYXItb3V0XCIsXCJxdWFkLW91dFwiLFwiY3ViaWMtb3V0XCIsXCJzaW4tb3V0XCIsXCJleHAtb3V0XCIsXCJjaXJjbGUtb3V0XCIsXCJlbGFzdGljLW91dFwiLFwiYmFjay1vdXRcIixcImJvdW5jZS1vdXRcIixcImxpbmVhci1pbi1vdXRcIixcInF1YWQtaW4tb3V0XCIsXCJjdWJpYy1pbi1vdXRcIixcInNpbi1pbi1vdXRcIixcImV4cC1pbi1vdXRcIixcImNpcmNsZS1pbi1vdXRcIixcImVsYXN0aWMtaW4tb3V0XCIsXCJiYWNrLWluLW91dFwiLFwiYm91bmNlLWluLW91dFwiXSxlZGl0VHlwZTpcIm5vbmVcIn0sb3JkZXJpbmc6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImxheW91dCBmaXJzdFwiLFwidHJhY2VzIGZpcnN0XCJdLGRmbHQ6XCJsYXlvdXQgZmlyc3RcIixlZGl0VHlwZTpcIm5vbmVcIn19fX0se31dLDc0NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9saWJcIiksaT10KFwiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhLG8scz1yLm5hbWUsbD1yLmluY2x1c2lvbkF0dHJ8fFwidmlzaWJsZVwiLGM9ZVtzXSx1PW4uaXNBcnJheU9yVHlwZWRBcnJheSh0W3NdKT90W3NdOltdLGg9ZVtzXT1bXSxmPWkuYXJyYXlUZW1wbGF0ZXIoZSxzLGwpO2ZvcihhPTA7YTx1Lmxlbmd0aDthKyspe3ZhciBwPXVbYV07bi5pc1BsYWluT2JqZWN0KHApP289Zi5uZXdJdGVtKHApOihvPWYubmV3SXRlbSh7fSkpW2xdPSExLG8uX2luZGV4PWEsITEhPT1vW2xdJiZyLmhhbmRsZUl0ZW1EZWZhdWx0cyhwLG8sZSxyKSxoLnB1c2gobyl9dmFyIGQ9Zi5kZWZhdWx0SXRlbXMoKTtmb3IoYT0wO2E8ZC5sZW5ndGg7YSsrKShvPWRbYV0pLl9pbmRleD1oLmxlbmd0aCxyLmhhbmRsZUl0ZW1EZWZhdWx0cyh7fSxvLGUscix7fSksaC5wdXNoKG8pO2lmKG4uaXNBcnJheU9yVHlwZWRBcnJheShjKSl7dmFyIGc9TWF0aC5taW4oYy5sZW5ndGgsaC5sZW5ndGgpO2ZvcihhPTA7YTxnO2ErKyluLnJlbGlua1ByaXZhdGVLZXlzKGhbYV0sY1thXSl9cmV0dXJuIGh9fSx7XCIuLi9saWJcIjo3MDEsXCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5fV0sNzQ2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2NvbXBvbmVudHMvZngvYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9e3R5cGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltdLGRmbHQ6XCJzY2F0dGVyXCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCIsX25vVGVtcGxhdGluZzohMH0sdmlzaWJsZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6WyEwLCExLFwibGVnZW5kb25seVwiXSxkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSxzaG93bGVnZW5kOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJzdHlsZVwifSxsZWdlbmRncm91cDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcInN0eWxlXCJ9LG9wYWNpdHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6XCJzdHlsZVwifSxuYW1lOnt2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJzdHlsZVwifSx1aWQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcInBsb3RcIixhbmltOiEwfSxpZHM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCIsYW5pbTohMH0sY3VzdG9tZGF0YTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sc2VsZWN0ZWRwb2ludHM6e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImNhbGNcIn0saG92ZXJpbmZvOnt2YWxUeXBlOlwiZmxhZ2xpc3RcIixmbGFnczpbXCJ4XCIsXCJ5XCIsXCJ6XCIsXCJ0ZXh0XCIsXCJuYW1lXCJdLGV4dHJhczpbXCJhbGxcIixcIm5vbmVcIixcInNraXBcIl0sYXJyYXlPazohMCxkZmx0OlwiYWxsXCIsZWRpdFR5cGU6XCJub25lXCJ9LGhvdmVybGFiZWw6bi5ob3ZlcmxhYmVsLHN0cmVhbTp7dG9rZW46e3ZhbFR5cGU6XCJzdHJpbmdcIixub0JsYW5rOiEwLHN0cmljdDohMCxlZGl0VHlwZTpcImNhbGNcIn0sbWF4cG9pbnRzOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjFlNCxkZmx0OjUwMCxlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LHRyYW5zZm9ybXM6e19pc0xpbmtlZFRvQXJyYXk6XCJ0cmFuc2Zvcm1cIixlZGl0VHlwZTpcImNhbGNcIn0sdWlyZXZpc2lvbjp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwibm9uZVwifX19LHtcIi4uL2NvbXBvbmVudHMvZngvYXR0cmlidXRlc1wiOjYwOH1dLDc0NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17eGF4aXM6e3ZhbFR5cGU6XCJzdWJwbG90aWRcIixkZmx0OlwieFwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx5YXhpczp7dmFsVHlwZTpcInN1YnBsb3RpZFwiLGRmbHQ6XCJ5XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9fX0se31dLDc0ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKS5GUF9TQUZFLG89dChcIi4uLy4uL3JlZ2lzdHJ5XCIpO2Z1bmN0aW9uIHModCxlKXt2YXIgcixuLGE9W10sbz1sKGUpLHM9Yyh0LGUpLHU9cy5taW4saD1zLm1heDtpZigwPT09dS5sZW5ndGh8fDA9PT1oLmxlbmd0aClyZXR1cm4gaS5zaW1wbGVNYXAoZS5yYW5nZSxlLnIybCk7dmFyIGY9dVswXS52YWwscD1oWzBdLnZhbDtmb3Iocj0xO3I8dS5sZW5ndGgmJmY9PT1wO3IrKylmPU1hdGgubWluKGYsdVtyXS52YWwpO2ZvcihyPTE7cjxoLmxlbmd0aCYmZj09PXA7cisrKXA9TWF0aC5tYXgocCxoW3JdLnZhbCk7dmFyIGQ9ITE7aWYoZS5yYW5nZSl7dmFyIGc9aS5zaW1wbGVNYXAoZS5yYW5nZSxlLnIybCk7ZD1nWzFdPGdbMF19XCJyZXZlcnNlZFwiPT09ZS5hdXRvcmFuZ2UmJihkPSEwLGUuYXV0b3JhbmdlPSEwKTt2YXIgdixtLHkseCxiLF8sdz1lLnJhbmdlbW9kZSxrPVwidG96ZXJvXCI9PT13LEE9XCJub25uZWdhdGl2ZVwiPT09dyxUPWUuX2xlbmd0aCxNPVQvMTAsUz0wO2ZvcihyPTA7cjx1Lmxlbmd0aDtyKyspZm9yKHY9dVtyXSxuPTA7bjxoLmxlbmd0aDtuKyspKF89KG09aFtuXSkudmFsLXYudmFsKT4wJiYoKGI9VC1vKHYpLW8obSkpPk0/Xy9iPlMmJih5PXYseD1tLFM9Xy9iKTpfL1Q+UyYmKHk9e3ZhbDp2LnZhbCxwYWQ6MH0seD17dmFsOm0udmFsLHBhZDowfSxTPV8vVCkpO2lmKGY9PT1wKXt2YXIgRT1mLTEsQz1mKzE7aWYoaylpZigwPT09ZilhPVswLDFdO2Vsc2V7dmFyIEw9KGY+MD9oOnUpLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCh0LG8oZSkpfSwwKSx6PWYvKDEtTWF0aC5taW4oLjUsTC9UKSk7YT1mPjA/WzAsel06W3osMF19ZWxzZSBhPUE/W01hdGgubWF4KDAsRSksTWF0aC5tYXgoMSxDKV06W0UsQ119ZWxzZSBrPyh5LnZhbD49MCYmKHk9e3ZhbDowLHBhZDowfSkseC52YWw8PTAmJih4PXt2YWw6MCxwYWQ6MH0pKTpBJiYoeS52YWwtUypvKHkpPDAmJih5PXt2YWw6MCxwYWQ6MH0pLHgudmFsPD0wJiYoeD17dmFsOjEscGFkOjB9KSksUz0oeC52YWwteS52YWwpLyhULW8oeSktbyh4KSksYT1beS52YWwtUypvKHkpLHgudmFsK1Mqbyh4KV07cmV0dXJuIGQmJmEucmV2ZXJzZSgpLGkuc2ltcGxlTWFwKGEsZS5sMnJ8fE51bWJlcil9ZnVuY3Rpb24gbCh0KXt2YXIgZT10Ll9sZW5ndGgvMjA7cmV0dXJuXCJkb21haW5cIj09PXQuY29uc3RyYWluJiZ0Ll9pbnB1dERvbWFpbiYmKGUqPSh0Ll9pbnB1dERvbWFpblsxXS10Ll9pbnB1dERvbWFpblswXSkvKHQuZG9tYWluWzFdLXQuZG9tYWluWzBdKSksZnVuY3Rpb24odCl7cmV0dXJuIHQucGFkKyh0LmV4dHJhcGFkP2U6MCl9fWZ1bmN0aW9uIGModCxlKXt2YXIgcixuLGksYT1lLl9pZCxvPXQuX2Z1bGxEYXRhLHM9dC5fZnVsbExheW91dCxsPVtdLGM9W107ZnVuY3Rpb24gZih0LGUpe2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBvPXRbZVtyXV0scz0oby5fZXh0cmVtZXN8fHt9KVthXTtpZighMD09PW8udmlzaWJsZSYmcyl7Zm9yKG49MDtuPHMubWluLmxlbmd0aDtuKyspaT1zLm1pbltuXSx1KGwsaS52YWwsaS5wYWQse2V4dHJhcGFkOmkuZXh0cmFwYWR9KTtmb3Iobj0wO248cy5tYXgubGVuZ3RoO24rKylpPXMubWF4W25dLGgoYyxpLnZhbCxpLnBhZCx7ZXh0cmFwYWQ6aS5leHRyYXBhZH0pfX19cmV0dXJuIGYobyxlLl90cmFjZUluZGljZXMpLGYocy5hbm5vdGF0aW9uc3x8W10sZS5fYW5uSW5kaWNlc3x8W10pLGYocy5zaGFwZXN8fFtdLGUuX3NoYXBlSW5kaWNlc3x8W10pLHttaW46bCxtYXg6Y319ZnVuY3Rpb24gdSh0LGUscixuKXtmKHQsZSxyLG4sZCl9ZnVuY3Rpb24gaCh0LGUscixuKXtmKHQsZSxyLG4sZyl9ZnVuY3Rpb24gZih0LGUscixuLGkpe2Zvcih2YXIgYT1uLnRvemVybyxvPW4uZXh0cmFwYWQscz0hMCxsPTA7bDx0Lmxlbmd0aCYmcztsKyspe3ZhciBjPXRbbF07aWYoaShjLnZhbCxlKSYmYy5wYWQ+PXImJihjLmV4dHJhcGFkfHwhbykpe3M9ITE7YnJlYWt9aShlLGMudmFsKSYmYy5wYWQ8PXImJihvfHwhYy5leHRyYXBhZCkmJih0LnNwbGljZShsLDEpLGwtLSl9aWYocyl7dmFyIHU9YSYmMD09PWU7dC5wdXNoKHt2YWw6ZSxwYWQ6dT8wOnIsZXh0cmFwYWQ6IXUmJm99KX19ZnVuY3Rpb24gcCh0KXtyZXR1cm4gbih0KSYmTWF0aC5hYnModCk8YX1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuIHQ8PWV9ZnVuY3Rpb24gZyh0LGUpe3JldHVybiB0Pj1lfWUuZXhwb3J0cz17Z2V0QXV0b1JhbmdlOnMsbWFrZVBhZEZuOmwsZG9BdXRvUmFuZ2U6ZnVuY3Rpb24odCxlKXtpZihlLnNldFNjYWxlKCksZS5hdXRvcmFuZ2Upe2UucmFuZ2U9cyh0LGUpLGUuX3I9ZS5yYW5nZS5zbGljZSgpLGUuX3JsPWkuc2ltcGxlTWFwKGUuX3IsZS5yMmwpO3ZhciByPWUuX2lucHV0LG49e307bltlLl9hdHRyK1wiLnJhbmdlXCJdPWUucmFuZ2UsbltlLl9hdHRyK1wiLmF1dG9yYW5nZVwiXT1lLmF1dG9yYW5nZSxvLmNhbGwoXCJfc3RvcmVEaXJlY3RHVUlFZGl0XCIsdC5sYXlvdXQsdC5fZnVsbExheW91dC5fcHJlR1VJLG4pLHIucmFuZ2U9ZS5yYW5nZS5zbGljZSgpLHIuYXV0b3JhbmdlPWUuYXV0b3JhbmdlfXZhciBhPWUuX2FuY2hvckF4aXM7aWYoYSYmYS5yYW5nZXNsaWRlcil7dmFyIGw9YS5yYW5nZXNsaWRlcltlLl9uYW1lXTtsJiZcImF1dG9cIj09PWwucmFuZ2Vtb2RlJiYobC5yYW5nZT1zKHQsZSkpLGEuX2lucHV0LnJhbmdlc2xpZGVyW2UuX25hbWVdPWkuZXh0ZW5kRmxhdCh7fSxsKX19LGZpbmRFeHRyZW1lczpmdW5jdGlvbih0LGUscil7cnx8KHI9e30pO3QuX218fHQuc2V0U2NhbGUoKTt2YXIgaSxvLHMsbCxjLGYsZCxnLHYsbT1bXSx5PVtdLHg9ZS5sZW5ndGgsYj1yLnBhZGRlZHx8ITEsXz1yLnRvemVybyYmKFwibGluZWFyXCI9PT10LnR5cGV8fFwiLVwiPT09dC50eXBlKSx3PVwibG9nXCI9PT10LnR5cGUsaz0hMTtmdW5jdGlvbiBBKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGs9ITAsZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubWF4KE51bWJlcih0W2VdfHwwKSwwKX07dmFyIGU9TWF0aC5tYXgoTnVtYmVyKHR8fDApLDApO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgVD1BKCh0Ll9tPjA/ci5wcGFkcGx1czpyLnBwYWRtaW51cyl8fHIucHBhZHx8MCksTT1BKCh0Ll9tPjA/ci5wcGFkbWludXM6ci5wcGFkcGx1cyl8fHIucHBhZHx8MCksUz1BKHIudnBhZHBsdXN8fHIudnBhZCksRT1BKHIudnBhZG1pbnVzfHxyLnZwYWQpO2lmKCFrKXtpZihnPTEvMCx2PS0xLzAsdylmb3IoaT0wO2k8eDtpKyspKG89ZVtpXSk8ZyYmbz4wJiYoZz1vKSxvPnYmJm88YSYmKHY9byk7ZWxzZSBmb3IoaT0wO2k8eDtpKyspKG89ZVtpXSk8ZyYmbz4tYSYmKGc9byksbz52JiZvPGEmJih2PW8pO2U9W2csdl0seD0yfXZhciBDPXt0b3plcm86XyxleHRyYXBhZDpifTtmdW5jdGlvbiBMKHIpe3M9ZVtyXSxuKHMpJiYoZj1UKHIpLGQ9TShyKSxnPXMtRShyKSx2PXMrUyhyKSx3JiZnPHYvMTAmJihnPXYvMTApLGw9dC5jMmwoZyksYz10LmMybCh2KSxfJiYobD1NYXRoLm1pbigwLGwpLGM9TWF0aC5tYXgoMCxjKSkscChsKSYmdShtLGwsZCxDKSxwKGMpJiZoKHksYyxmLEMpKX12YXIgej1NYXRoLm1pbig2LHgpO2ZvcihpPTA7aTx6O2krKylMKGkpO2ZvcihpPXgtMTtpPj16O2ktLSlMKGkpO3JldHVybnttaW46bSxtYXg6eSxvcHRzOnJ9fSxjb25jYXRFeHRyZW1lczpjfX0se1wiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw3NDk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiZmFzdC1pc251bWVyaWNcIiksYT10KFwiLi4vLi4vcGxvdHMvcGxvdHNcIiksbz10KFwiLi4vLi4vcmVnaXN0cnlcIikscz10KFwiLi4vLi4vbGliXCIpLGw9dChcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiKSxjPXQoXCIuLi8uLi9jb21wb25lbnRzL3RpdGxlc1wiKSx1PXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGg9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxmPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLHA9dChcIi4vY2xlYW5fdGlja3NcIiksZD10KFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKSxnPWQuT05FQVZHWUVBUix2PWQuT05FQVZHTU9OVEgsbT1kLk9ORURBWSx5PWQuT05FSE9VUix4PWQuT05FTUlOLGI9ZC5PTkVTRUMsXz1kLk1JTlVTX1NJR04sdz1kLkJBRE5VTSxrPXQoXCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCIpLk1JRF9TSElGVCxBPXQoXCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCIpLkxJTkVfU1BBQ0lORyxUPWUuZXhwb3J0cz17fTtULnNldENvbnZlcnQ9dChcIi4vc2V0X2NvbnZlcnRcIik7dmFyIE09dChcIi4vYXhpc19hdXRvdHlwZVwiKSxTPXQoXCIuL2F4aXNfaWRzXCIpO1QuaWQybmFtZT1TLmlkMm5hbWUsVC5uYW1lMmlkPVMubmFtZTJpZCxULmNsZWFuSWQ9Uy5jbGVhbklkLFQubGlzdD1TLmxpc3QsVC5saXN0SWRzPVMubGlzdElkcyxULmdldEZyb21JZD1TLmdldEZyb21JZCxULmdldEZyb21UcmFjZT1TLmdldEZyb21UcmFjZTt2YXIgRT10KFwiLi9hdXRvcmFuZ2VcIik7VC5nZXRBdXRvUmFuZ2U9RS5nZXRBdXRvUmFuZ2UsVC5maW5kRXh0cmVtZXM9RS5maW5kRXh0cmVtZXMsVC5jb2VyY2VSZWY9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPW4uY2hhckF0KG4ubGVuZ3RoLTEpLGw9ci5fZnVsbExheW91dC5fc3VicGxvdHNbbytcImF4aXNcIl0sYz1uK1wicmVmXCIsdT17fTtyZXR1cm4gaXx8KGk9bFswXXx8YSksYXx8KGE9aSksdVtjXT17dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6bC5jb25jYXQoYT9bYV06W10pLGRmbHQ6aX0scy5jb2VyY2UodCxlLHUsYyl9LFQuY29lcmNlUG9zaXRpb249ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvLGw7aWYoXCJwYXBlclwiPT09bnx8XCJwaXhlbFwiPT09bilvPXMuZW5zdXJlTnVtYmVyLGw9cihpLGEpO2Vsc2V7dmFyIGM9VC5nZXRGcm9tSWQoZSxuKTtsPXIoaSxhPWMuZnJhY3Rpb24ycihhKSksbz1jLmNsZWFuUG9zfXRbaV09byhsKX0sVC5jbGVhblBvc2l0aW9uPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4oXCJwYXBlclwiPT09cnx8XCJwaXhlbFwiPT09cj9zLmVuc3VyZU51bWJlcjpULmdldEZyb21JZChlLHIpLmNsZWFuUG9zKSh0KX0sVC5yZWRyYXdDb21wb25lbnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHxULmxpc3RJZHModCk7dmFyIHI9dC5fZnVsbExheW91dDtmdW5jdGlvbiBuKG4saSxhLHMpe2Zvcih2YXIgbD1vLmdldENvbXBvbmVudE1ldGhvZChuLGkpLGM9e30sdT0wO3U8ZS5sZW5ndGg7dSsrKWZvcih2YXIgaD1yW1QuaWQybmFtZShlW3VdKV1bYV0sZj0wO2Y8aC5sZW5ndGg7ZisrKXt2YXIgcD1oW2ZdO2lmKCFjW3BdJiYobCh0LHApLGNbcF09MSxzKSlyZXR1cm59fW4oXCJhbm5vdGF0aW9uc1wiLFwiZHJhd09uZVwiLFwiX2FubkluZGljZXNcIiksbihcInNoYXBlc1wiLFwiZHJhd09uZVwiLFwiX3NoYXBlSW5kaWNlc1wiKSxuKFwiaW1hZ2VzXCIsXCJkcmF3XCIsXCJfaW1nSW5kaWNlc1wiLCEwKX07dmFyIEM9VC5nZXREYXRhQ29udmVyc2lvbnM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT1cInhcIj09PXJ8fFwieVwiPT09cnx8XCJ6XCI9PT1yP3I6bjtpZihBcnJheS5pc0FycmF5KGEpKXtpZihpPXt0eXBlOk0obiksX2NhdGVnb3JpZXM6W119LFQuc2V0Q29udmVydChpKSxcImNhdGVnb3J5XCI9PT1pLnR5cGUpZm9yKHZhciBvPTA7bzxuLmxlbmd0aDtvKyspaS5kMmMobltvXSl9ZWxzZSBpPVQuZ2V0RnJvbVRyYWNlKHQsZSxhKTtyZXR1cm4gaT97ZDJjOmkuZDJjLGMyZDppLmMyZH06XCJpZHNcIj09PWE/e2QyYzp6LGMyZDp6fTp7ZDJjOkwsYzJkOkx9fTtmdW5jdGlvbiBMKHQpe3JldHVybit0fWZ1bmN0aW9uIHoodCl7cmV0dXJuIFN0cmluZyh0KX1ULmdldERhdGFUb0Nvb3JkRnVuYz1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gQyh0LGUscixuKS5kMmN9LFQuY291bnRlckxldHRlcj1mdW5jdGlvbih0KXt2YXIgZT10LmNoYXJBdCgwKTtyZXR1cm5cInhcIj09PWU/XCJ5XCI6XCJ5XCI9PT1lP1wieFwiOnZvaWQgMH0sVC5taW5EdGljaz1mdW5jdGlvbih0LGUscixuKXstMT09PVtcImxvZ1wiLFwiY2F0ZWdvcnlcIixcIm11bHRpY2F0ZWdvcnlcIl0uaW5kZXhPZih0LnR5cGUpJiZuP3ZvaWQgMD09PXQuX21pbkR0aWNrPyh0Ll9taW5EdGljaz1lLHQuX2ZvcmNlVGljazA9cik6dC5fbWluRHRpY2smJigodC5fbWluRHRpY2svZSsxZS02KSUxPDJlLTYmJigoci10Ll9mb3JjZVRpY2swKS9lJTErMS4wMDAwMDEpJTE8MmUtNj8odC5fbWluRHRpY2s9ZSx0Ll9mb3JjZVRpY2swPXIpOigoZS90Ll9taW5EdGljaysxZS02KSUxPjJlLTZ8fCgoci10Ll9mb3JjZVRpY2swKS90Ll9taW5EdGljayUxKzEuMDAwMDAxKSUxPjJlLTYpJiYodC5fbWluRHRpY2s9MCkpOnQuX21pbkR0aWNrPTB9LFQuc2F2ZVJhbmdlSW5pdGlhbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1ULmxpc3QodCxcIlwiLCEwKSxuPSExLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXSxvPXZvaWQgMD09PWEuX3JhbmdlSW5pdGlhbCxzPW98fCEoYS5yYW5nZVswXT09PWEuX3JhbmdlSW5pdGlhbFswXSYmYS5yYW5nZVsxXT09PWEuX3JhbmdlSW5pdGlhbFsxXSk7KG8mJiExPT09YS5hdXRvcmFuZ2V8fGUmJnMpJiYoYS5fcmFuZ2VJbml0aWFsPWEucmFuZ2Uuc2xpY2UoKSxuPSEwKX1yZXR1cm4gbn0sVC5zYXZlU2hvd1NwaWtlSW5pdGlhbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1ULmxpc3QodCxcIlwiLCEwKSxuPSExLGk9XCJvblwiLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIG89clthXSxzPXZvaWQgMD09PW8uX3Nob3dTcGlrZUluaXRpYWwsbD1zfHwhKG8uc2hvd3NwaWtlcz09PW8uX3Nob3dzcGlrZXMpOyhzfHxlJiZsKSYmKG8uX3Nob3dTcGlrZUluaXRpYWw9by5zaG93c3Bpa2VzLG49ITApLFwib25cIiE9PWl8fG8uc2hvd3NwaWtlc3x8KGk9XCJvZmZcIil9cmV0dXJuIHQuX2Z1bGxMYXlvdXQuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQ9aSxufSxULmF1dG9CaW49ZnVuY3Rpb24odCxlLHIsbixhLG8pe3ZhciBsLGM9cy5hZ2dOdW1zKE1hdGgubWluLG51bGwsdCksdT1zLmFnZ051bXMoTWF0aC5tYXgsbnVsbCx0KTtpZihcImNhdGVnb3J5XCI9PT1lLnR5cGV8fFwibXVsdGljYXRlZ29yeVwiPT09ZS50eXBlKXJldHVybntzdGFydDpjLS41LGVuZDp1Ky41LHNpemU6TWF0aC5tYXgoMSxNYXRoLnJvdW5kKG8pfHwxKSxfZGF0YVNwYW46dS1jfTtpZihhfHwoYT1lLmNhbGVuZGFyKSxsPVwibG9nXCI9PT1lLnR5cGU/e3R5cGU6XCJsaW5lYXJcIixyYW5nZTpbYyx1XX06e3R5cGU6ZS50eXBlLHJhbmdlOnMuc2ltcGxlTWFwKFtjLHVdLGUuYzJyLDAsYSksY2FsZW5kYXI6YX0sVC5zZXRDb252ZXJ0KGwpLG89byYmcC5kdGljayhvLGwudHlwZSkpbC5kdGljaz1vLGwudGljazA9cC50aWNrMCh2b2lkIDAsbC50eXBlLGEpO2Vsc2V7dmFyIGg7aWYociloPSh1LWMpL3I7ZWxzZXt2YXIgZj1zLmRpc3RpbmN0VmFscyh0KSxkPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coZi5taW5EaWZmKS9NYXRoLkxOMTApKSxnPWQqcy5yb3VuZFVwKGYubWluRGlmZi9kLFsuOSwxLjksNC45LDkuOV0sITApO2g9TWF0aC5tYXgoZywyKnMuc3RkZXYodCkvTWF0aC5wb3codC5sZW5ndGgsbj8uMjU6LjQpKSxpKGgpfHwoaD0xKX1ULmF1dG9UaWNrcyhsLGgpfXZhciB2LHk9bC5kdGljayx4PVQudGlja0luY3JlbWVudChULnRpY2tGaXJzdChsKSx5LFwicmV2ZXJzZVwiLGEpO2lmKFwibnVtYmVyXCI9PXR5cGVvZiB5KXY9KHg9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbz0wLHM9MCxsPTAsYz0wO2Z1bmN0aW9uIHUoZSl7cmV0dXJuKDErMTAwKihlLXQpL3IuZHRpY2spJTEwMDwyfWZvcih2YXIgaD0wO2g8ZS5sZW5ndGg7aCsrKWVbaF0lMT09MD9sKys6aShlW2hdKXx8YysrLHUoZVtoXSkmJm8rKyx1KGVbaF0rci5kdGljay8yKSYmcysrO3ZhciBmPWUubGVuZ3RoLWM7aWYobD09PWYmJlwiZGF0ZVwiIT09ci50eXBlKXIuZHRpY2s8MT90PW4tLjUqci5kdGljazoodC09LjUpK3IuZHRpY2s8biYmKHQrPXIuZHRpY2spO2Vsc2UgaWYoczwuMSpmJiYobz4uMypmfHx1KG4pfHx1KGEpKSl7dmFyIHA9ci5kdGljay8yO3QrPXQrcDxuP3A6LXB9cmV0dXJuIHR9KHgsdCxsLGMsdSkpKygxK01hdGguZmxvb3IoKHUteCkveSkpKnk7ZWxzZSBmb3IoXCJNXCI9PT1sLmR0aWNrLmNoYXJBdCgwKSYmKHg9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1zLmZpbmRFeGFjdERhdGVzKGUsaSk7aWYoYS5leGFjdERheXM+Ljgpe3ZhciBvPU51bWJlcihyLnN1YnN0cigxKSk7YS5leGFjdFllYXJzPi44JiZvJTEyPT0wP3Q9VC50aWNrSW5jcmVtZW50KHQsXCJNNlwiLFwicmV2ZXJzZVwiKSsxLjUqbTphLmV4YWN0TW9udGhzPi44P3Q9VC50aWNrSW5jcmVtZW50KHQsXCJNMVwiLFwicmV2ZXJzZVwiKSsxNS41Km06dC09bS8yO3ZhciBsPVQudGlja0luY3JlbWVudCh0LHIpO2lmKGw8PW4pcmV0dXJuIGx9cmV0dXJuIHR9KHgsdCx5LGMsYSkpLHY9eCwwO3Y8PXU7KXY9VC50aWNrSW5jcmVtZW50KHYseSwhMSxhKSwwO3JldHVybntzdGFydDplLmMycih4LDAsYSksZW5kOmUuYzJyKHYsMCxhKSxzaXplOnksX2RhdGFTcGFuOnUtY319LFQucHJlcFRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBlPXMuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpO2lmKFwiYXV0b1wiPT09dC50aWNrbW9kZXx8IXQuZHRpY2spe3ZhciByLG49dC5udGlja3M7bnx8KFwiY2F0ZWdvcnlcIj09PXQudHlwZXx8XCJtdWx0aWNhdGVnb3J5XCI9PT10LnR5cGU/KHI9dC50aWNrZm9udD8xLjIqKHQudGlja2ZvbnQuc2l6ZXx8MTIpOjE1LG49dC5fbGVuZ3RoL3IpOihyPVwieVwiPT09dC5faWQuY2hhckF0KDApPzQwOjgwLG49cy5jb25zdHJhaW4odC5fbGVuZ3RoL3IsNCw5KSsxKSxcInJhZGlhbGF4aXNcIj09PXQuX25hbWUmJihuKj0yKSksXCJhcnJheVwiPT09dC50aWNrbW9kZSYmKG4qPTEwMCksVC5hdXRvVGlja3ModCxNYXRoLmFicyhlWzFdLWVbMF0pL24pLHQuX21pbkR0aWNrPjAmJnQuZHRpY2s8Mip0Ll9taW5EdGljayYmKHQuZHRpY2s9dC5fbWluRHRpY2ssdC50aWNrMD10Lmwycih0Ll9mb3JjZVRpY2swKSl9dC50aWNrMHx8KHQudGljazA9XCJkYXRlXCI9PT10LnR5cGU/XCIyMDAwLTAxLTAxXCI6MCksXCJkYXRlXCI9PT10LnR5cGUmJnQuZHRpY2s8LjEmJih0LmR0aWNrPS4xKSxqKHQpfSxULmNhbGNUaWNrcz1mdW5jdGlvbih0KXtULnByZXBUaWNrcyh0KTt2YXIgZT1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKTtpZihcImFycmF5XCI9PT10LnRpY2ttb2RlKXJldHVybiBmdW5jdGlvbih0KXt2YXIgZT10LnRpY2t2YWxzLHI9dC50aWNrdGV4dCxuPW5ldyBBcnJheShlLmxlbmd0aCksaT1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKSxhPTEuMDAwMSppWzBdLTFlLTQqaVsxXSxvPTEuMDAwMSppWzFdLTFlLTQqaVswXSxsPU1hdGgubWluKGEsbyksYz1NYXRoLm1heChhLG8pLHU9MDtBcnJheS5pc0FycmF5KHIpfHwocj1bXSk7dmFyIGg9XCJjYXRlZ29yeVwiPT09dC50eXBlP3QuZDJsX25vYWRkOnQuZDJsO1wibG9nXCI9PT10LnR5cGUmJlwiTFwiIT09U3RyaW5nKHQuZHRpY2spLmNoYXJBdCgwKSYmKHQuZHRpY2s9XCJMXCIrTWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLm1pbih0LnJhbmdlWzBdLHQucmFuZ2VbMV0pKS0xKSk7Zm9yKHZhciBmPTA7ZjxlLmxlbmd0aDtmKyspe3ZhciBwPWgoZVtmXSk7cD5sJiZwPGMmJih2b2lkIDA9PT1yW2ZdP25bdV09VC50aWNrVGV4dCh0LHApOm5bdV09Vih0LHAsU3RyaW5nKHJbZl0pKSx1KyspfXU8ZS5sZW5ndGgmJm4uc3BsaWNlKHUsZS5sZW5ndGgtdSk7cmV0dXJuIG59KHQpO3QuX3RtaW49VC50aWNrRmlyc3QodCk7dmFyIHI9MS4wMDAxKmVbMF0tMWUtNCplWzFdLG49MS4wMDAxKmVbMV0tMWUtNCplWzBdLGk9ZVsxXTxlWzBdO2lmKHQuX3RtaW48ciE9PWkpcmV0dXJuW107dmFyIGE9W107XCJjYXRlZ29yeVwiIT09dC50eXBlJiZcIm11bHRpY2F0ZWdvcnlcIiE9PXQudHlwZXx8KG49aT9NYXRoLm1heCgtLjUsbik6TWF0aC5taW4odC5fY2F0ZWdvcmllcy5sZW5ndGgtLjUsbikpO2Zvcih2YXIgbz1udWxsLGw9TWF0aC5tYXgoMWUzLHQuX2xlbmd0aHx8MCksYz10Ll90bWluOyhpP2M+PW46Yzw9bikmJiEoYS5sZW5ndGg+bHx8Yz09PW8pO2M9VC50aWNrSW5jcmVtZW50KGMsdC5kdGljayxpLHQuY2FsZW5kYXIpKW89YyxhLnB1c2goYyk7cnQodCkmJjM2MD09PU1hdGguYWJzKGVbMV0tZVswXSkmJmEucG9wKCksdC5fdG1heD1hW2EubGVuZ3RoLTFdLHQuX3ByZXZEYXRlSGVhZD1cIlwiLHQuX2luQ2FsY1RpY2tzPSEwO2Zvcih2YXIgdT1uZXcgQXJyYXkoYS5sZW5ndGgpLGg9MDtoPGEubGVuZ3RoO2grKyl1W2hdPVQudGlja1RleHQodCxhW2hdKTtyZXR1cm4gdC5faW5DYWxjVGlja3M9ITEsdX07dmFyIE89WzIsNSwxMF0sST1bMSwyLDMsNiwxMl0sRD1bMSwyLDUsMTAsMTUsMzBdLFA9WzEsMiwzLDcsMTRdLFI9Wy0uMDQ2LDAsLjMwMSwuNDc3LC42MDIsLjY5OSwuNzc4LC44NDUsLjkwMywuOTU0LDFdLEY9Wy0uMzAxLDAsLjMwMSwuNjk5LDFdLEI9WzE1LDMwLDQ1LDkwLDE4MF07ZnVuY3Rpb24gTih0LGUscil7cmV0dXJuIGUqcy5yb3VuZFVwKHQvZSxyKX1mdW5jdGlvbiBqKHQpe3ZhciBlPXQuZHRpY2s7aWYodC5fdGlja2V4cG9uZW50PTAsaShlKXx8XCJzdHJpbmdcIj09dHlwZW9mIGV8fChlPTEpLFwiY2F0ZWdvcnlcIiE9PXQudHlwZSYmXCJtdWx0aWNhdGVnb3J5XCIhPT10LnR5cGV8fCh0Ll90aWNrcm91bmQ9bnVsbCksXCJkYXRlXCI9PT10LnR5cGUpe3ZhciByPXQucjJsKHQudGljazApLG49dC5sMnIocikucmVwbGFjZSgvKF4tfGkpL2csXCJcIiksYT1uLmxlbmd0aDtpZihcIk1cIj09PVN0cmluZyhlKS5jaGFyQXQoMCkpYT4xMHx8XCIwMS0wMVwiIT09bi5zdWJzdHIoNSk/dC5fdGlja3JvdW5kPVwiZFwiOnQuX3RpY2tyb3VuZD0rZS5zdWJzdHIoMSklMTI9PTA/XCJ5XCI6XCJtXCI7ZWxzZSBpZihlPj1tJiZhPD0xMHx8ZT49MTUqbSl0Ll90aWNrcm91bmQ9XCJkXCI7ZWxzZSBpZihlPj14JiZhPD0xNnx8ZT49eSl0Ll90aWNrcm91bmQ9XCJNXCI7ZWxzZSBpZihlPj1iJiZhPD0xOXx8ZT49eCl0Ll90aWNrcm91bmQ9XCJTXCI7ZWxzZXt2YXIgbz10LmwycihyK2UpLnJlcGxhY2UoL14tLyxcIlwiKS5sZW5ndGg7dC5fdGlja3JvdW5kPU1hdGgubWF4KGEsbyktMjAsdC5fdGlja3JvdW5kPDAmJih0Ll90aWNrcm91bmQ9NCl9fWVsc2UgaWYoaShlKXx8XCJMXCI9PT1lLmNoYXJBdCgwKSl7dmFyIHM9dC5yYW5nZS5tYXAodC5yMmR8fE51bWJlcik7aShlKXx8KGU9TnVtYmVyKGUuc3Vic3RyKDEpKSksdC5fdGlja3JvdW5kPTItTWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMTArLjAxKTt2YXIgbD1NYXRoLm1heChNYXRoLmFicyhzWzBdKSxNYXRoLmFicyhzWzFdKSksYz1NYXRoLmZsb29yKE1hdGgubG9nKGwpL01hdGguTE4xMCsuMDEpO01hdGguYWJzKGMpPjMmJihxKHQuZXhwb25lbnRmb3JtYXQpJiYhSChjKT90Ll90aWNrZXhwb25lbnQ9MypNYXRoLnJvdW5kKChjLTEpLzMpOnQuX3RpY2tleHBvbmVudD1jKX1lbHNlIHQuX3RpY2tyb3VuZD1udWxsfWZ1bmN0aW9uIFYodCxlLHIpe3ZhciBuPXQudGlja2ZvbnR8fHt9O3JldHVybnt4OmUsZHg6MCxkeTowLHRleHQ6cnx8XCJcIixmb250U2l6ZTpuLnNpemUsZm9udDpuLmZhbWlseSxmb250Q29sb3I6bi5jb2xvcn19VC5hdXRvVGlja3M9ZnVuY3Rpb24odCxlKXt2YXIgcjtmdW5jdGlvbiBuKHQpe3JldHVybiBNYXRoLnBvdyh0LE1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjEwKSl9aWYoXCJkYXRlXCI9PT10LnR5cGUpe3QudGljazA9cy5kYXRlVGljazAodC5jYWxlbmRhcik7dmFyIGE9MiplO2E+Zz8oZS89ZyxyPW4oMTApLHQuZHRpY2s9XCJNXCIrMTIqTihlLHIsTykpOmE+dj8oZS89dix0LmR0aWNrPVwiTVwiK04oZSwxLEkpKTphPm0/KHQuZHRpY2s9TihlLG0sUCksdC50aWNrMD1zLmRhdGVUaWNrMCh0LmNhbGVuZGFyLCEwKSk6YT55P3QuZHRpY2s9TihlLHksSSk6YT54P3QuZHRpY2s9TihlLHgsRCk6YT5iP3QuZHRpY2s9TihlLGIsRCk6KHI9bigxMCksdC5kdGljaz1OKGUscixPKSl9ZWxzZSBpZihcImxvZ1wiPT09dC50eXBlKXt0LnRpY2swPTA7dmFyIG89cy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCk7aWYoZT4uNyl0LmR0aWNrPU1hdGguY2VpbChlKTtlbHNlIGlmKE1hdGguYWJzKG9bMV0tb1swXSk8MSl7dmFyIGw9MS41Kk1hdGguYWJzKChvWzFdLW9bMF0pL2UpO2U9TWF0aC5hYnMoTWF0aC5wb3coMTAsb1sxXSktTWF0aC5wb3coMTAsb1swXSkpL2wscj1uKDEwKSx0LmR0aWNrPVwiTFwiK04oZSxyLE8pfWVsc2UgdC5kdGljaz1lPi4zP1wiRDJcIjpcIkQxXCJ9ZWxzZVwiY2F0ZWdvcnlcIj09PXQudHlwZXx8XCJtdWx0aWNhdGVnb3J5XCI9PT10LnR5cGU/KHQudGljazA9MCx0LmR0aWNrPU1hdGguY2VpbChNYXRoLm1heChlLDEpKSk6cnQodCk/KHQudGljazA9MCxyPTEsdC5kdGljaz1OKGUscixCKSk6KHQudGljazA9MCxyPW4oMTApLHQuZHRpY2s9TihlLHIsTykpO2lmKDA9PT10LmR0aWNrJiYodC5kdGljaz0xKSwhaSh0LmR0aWNrKSYmXCJzdHJpbmdcIiE9dHlwZW9mIHQuZHRpY2spe3ZhciBjPXQuZHRpY2s7dGhyb3cgdC5kdGljaz0xLFwiYXguZHRpY2sgZXJyb3I6IFwiK1N0cmluZyhjKX19LFQudGlja0luY3JlbWVudD1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1yPy0xOjE7aWYoaShlKSlyZXR1cm4gdCtvKmU7dmFyIGw9ZS5jaGFyQXQoMCksYz1vKk51bWJlcihlLnN1YnN0cigxKSk7aWYoXCJNXCI9PT1sKXJldHVybiBzLmluY3JlbWVudE1vbnRoKHQsYyxhKTtpZihcIkxcIj09PWwpcmV0dXJuIE1hdGgubG9nKE1hdGgucG93KDEwLHQpK2MpL01hdGguTE4xMDtpZihcIkRcIj09PWwpe3ZhciB1PVwiRDJcIj09PWU/RjpSLGg9dCsuMDEqbyxmPXMucm91bmRVcChzLm1vZChoLDEpLHUscik7cmV0dXJuIE1hdGguZmxvb3IoaCkrTWF0aC5sb2cobi5yb3VuZChNYXRoLnBvdygxMCxmKSwxKSkvTWF0aC5MTjEwfXRocm93XCJ1bnJlY29nbml6ZWQgZHRpY2sgXCIrU3RyaW5nKGUpfSxULnRpY2tGaXJzdD1mdW5jdGlvbih0KXt2YXIgZT10LnIybHx8TnVtYmVyLHI9cy5zaW1wbGVNYXAodC5yYW5nZSxlKSxhPXJbMV08clswXSxvPWE/TWF0aC5mbG9vcjpNYXRoLmNlaWwsbD0xLjAwMDEqclswXS0xZS00KnJbMV0sYz10LmR0aWNrLHU9ZSh0LnRpY2swKTtpZihpKGMpKXt2YXIgaD1vKChsLXUpL2MpKmMrdTtyZXR1cm5cImNhdGVnb3J5XCIhPT10LnR5cGUmJlwibXVsdGljYXRlZ29yeVwiIT09dC50eXBlfHwoaD1zLmNvbnN0cmFpbihoLDAsdC5fY2F0ZWdvcmllcy5sZW5ndGgtMSkpLGh9dmFyIGY9Yy5jaGFyQXQoMCkscD1OdW1iZXIoYy5zdWJzdHIoMSkpO2lmKFwiTVwiPT09Zil7Zm9yKHZhciBkLGcsdixtPTAseT11O208MTA7KXtpZigoKGQ9VC50aWNrSW5jcmVtZW50KHksYyxhLHQuY2FsZW5kYXIpKS1sKSooeS1sKTw9MClyZXR1cm4gYT9NYXRoLm1pbih5LGQpOk1hdGgubWF4KHksZCk7Zz0obC0oeStkKS8yKS8oZC15KSx2PWYrKE1hdGguYWJzKE1hdGgucm91bmQoZykpfHwxKSpwLHk9VC50aWNrSW5jcmVtZW50KHksdixnPDA/IWE6YSx0LmNhbGVuZGFyKSxtKyt9cmV0dXJuIHMuZXJyb3IoXCJ0aWNrRmlyc3QgZGlkIG5vdCBjb252ZXJnZVwiLHQpLHl9aWYoXCJMXCI9PT1mKXJldHVybiBNYXRoLmxvZyhvKChNYXRoLnBvdygxMCxsKS11KS9wKSpwK3UpL01hdGguTE4xMDtpZihcIkRcIj09PWYpe3ZhciB4PVwiRDJcIj09PWM/RjpSLGI9cy5yb3VuZFVwKHMubW9kKGwsMSkseCxhKTtyZXR1cm4gTWF0aC5mbG9vcihsKStNYXRoLmxvZyhuLnJvdW5kKE1hdGgucG93KDEwLGIpLDEpKS9NYXRoLkxOMTB9dGhyb3dcInVucmVjb2duaXplZCBkdGljayBcIitTdHJpbmcoYyl9LFQudGlja1RleHQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGE9Vih0LGUpLG89XCJhcnJheVwiPT09dC50aWNrbW9kZSxsPXJ8fG8sYz10LnR5cGUsdT1cImNhdGVnb3J5XCI9PT1jP3QuZDJsX25vYWRkOnQuZDJsO2lmKG8mJkFycmF5LmlzQXJyYXkodC50aWNrdGV4dCkpe3ZhciBoPXMuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpLGY9TWF0aC5hYnMoaFsxXS1oWzBdKS8xZTQ7Zm9yKG49MDtuPHQudGlja3RleHQubGVuZ3RoJiYhKE1hdGguYWJzKGUtdSh0LnRpY2t2YWxzW25dKSk8Zik7bisrKTtpZihuPHQudGlja3RleHQubGVuZ3RoKXJldHVybiBhLnRleHQ9U3RyaW5nKHQudGlja3RleHRbbl0pLGF9ZnVuY3Rpb24gcChuKXtpZih2b2lkIDA9PT1uKXJldHVybiEwO2lmKHIpcmV0dXJuXCJub25lXCI9PT1uO3ZhciBpPXtmaXJzdDp0Ll90bWluLGxhc3Q6dC5fdG1heH1bbl07cmV0dXJuXCJhbGxcIiE9PW4mJmUhPT1pfXZhciBkPXI/XCJuZXZlclwiOlwibm9uZVwiIT09dC5leHBvbmVudGZvcm1hdCYmcCh0LnNob3dleHBvbmVudCk/XCJoaWRlXCI6XCJcIjtpZihcImRhdGVcIj09PWM/ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9dC5fdGlja3JvdW5kLG89ciYmdC5ob3ZlcmZvcm1hdHx8VC5nZXRUaWNrRm9ybWF0KHQpO24mJihhPWkoYSk/NDp7eTpcIm1cIixtOlwiZFwiLGQ6XCJNXCIsTTpcIlNcIixTOjR9W2FdKTt2YXIgbCxjPXMuZm9ybWF0RGF0ZShlLngsbyxhLHQuX2RhdGVGb3JtYXQsdC5jYWxlbmRhcix0Ll9leHRyYUZvcm1hdCksdT1jLmluZGV4T2YoXCJcXG5cIik7LTEhPT11JiYobD1jLnN1YnN0cih1KzEpLGM9Yy5zdWJzdHIoMCx1KSk7biYmKFwiMDA6MDA6MDBcIj09PWN8fFwiMDA6MDBcIj09PWM/KGM9bCxsPVwiXCIpOjg9PT1jLmxlbmd0aCYmKGM9Yy5yZXBsYWNlKC86MDAkLyxcIlwiKSkpO2wmJihyP1wiZFwiPT09YT9jKz1cIiwgXCIrbDpjPWwrKGM/XCIsIFwiK2M6XCJcIik6dC5faW5DYWxjVGlja3MmJmw9PT10Ll9wcmV2RGF0ZUhlYWR8fChjKz1cIjxicj5cIitsLHQuX3ByZXZEYXRlSGVhZD1sKSk7ZS50ZXh0PWN9KHQsYSxyLGwpOlwibG9nXCI9PT1jP2Z1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIG89dC5kdGljayxsPWUueCxjPXQudGlja2Zvcm1hdCx1PVwic3RyaW5nXCI9PXR5cGVvZiBvJiZvLmNoYXJBdCgwKTtcIm5ldmVyXCI9PT1hJiYoYT1cIlwiKTtuJiZcIkxcIiE9PXUmJihvPVwiTDNcIix1PVwiTFwiKTtpZihjfHxcIkxcIj09PXUpZS50ZXh0PUcoTWF0aC5wb3coMTAsbCksdCxhLG4pO2Vsc2UgaWYoaShvKXx8XCJEXCI9PT11JiZzLm1vZChsKy4wMSwxKTwuMSl7dmFyIGg9TWF0aC5yb3VuZChsKSxmPU1hdGguYWJzKGgpLHA9dC5leHBvbmVudGZvcm1hdDtcInBvd2VyXCI9PT1wfHxxKHApJiZIKGgpPyhlLnRleHQ9MD09PWg/MToxPT09aD9cIjEwXCI6XCIxMDxzdXA+XCIrKGg+MT9cIlwiOl8pK2YrXCI8L3N1cD5cIixlLmZvbnRTaXplKj0xLjI1KTooXCJlXCI9PT1wfHxcIkVcIj09PXApJiZmPjI/ZS50ZXh0PVwiMVwiK3ArKGg+MD9cIitcIjpfKStmOihlLnRleHQ9RyhNYXRoLnBvdygxMCxsKSx0LFwiXCIsXCJmYWtlaG92ZXJcIiksXCJEMVwiPT09byYmXCJ5XCI9PT10Ll9pZC5jaGFyQXQoMCkmJihlLmR5LT1lLmZvbnRTaXplLzYpKX1lbHNle2lmKFwiRFwiIT09dSl0aHJvd1widW5yZWNvZ25pemVkIGR0aWNrIFwiK1N0cmluZyhvKTtlLnRleHQ9U3RyaW5nKE1hdGgucm91bmQoTWF0aC5wb3coMTAscy5tb2QobCwxKSkpKSxlLmZvbnRTaXplKj0uNzV9aWYoXCJEMVwiPT09dC5kdGljayl7dmFyIGQ9U3RyaW5nKGUudGV4dCkuY2hhckF0KDApO1wiMFwiIT09ZCYmXCIxXCIhPT1kfHwoXCJ5XCI9PT10Ll9pZC5jaGFyQXQoMCk/ZS5keC09ZS5mb250U2l6ZS80OihlLmR5Kz1lLmZvbnRTaXplLzIsZS5keCs9KHQucmFuZ2VbMV0+dC5yYW5nZVswXT8xOi0xKSplLmZvbnRTaXplKihsPDA/LjU6LjI1KSkpfX0odCxhLDAsbCxkKTpcImNhdGVnb3J5XCI9PT1jP2Z1bmN0aW9uKHQsZSl7dmFyIHI9dC5fY2F0ZWdvcmllc1tNYXRoLnJvdW5kKGUueCldO3ZvaWQgMD09PXImJihyPVwiXCIpO2UudGV4dD1TdHJpbmcocil9KHQsYSk6XCJtdWx0aWNhdGVnb3J5XCI9PT1jP2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnJvdW5kKGUueCksaT10Ll9jYXRlZ29yaWVzW25dfHxbXSxhPXZvaWQgMD09PWlbMV0/XCJcIjpTdHJpbmcoaVsxXSksbz12b2lkIDA9PT1pWzBdP1wiXCI6U3RyaW5nKGlbMF0pO3I/ZS50ZXh0PW8rXCIgLSBcIithOihlLnRleHQ9YSxlLnRleHQyPW8pfSh0LGEscik6cnQodCk/ZnVuY3Rpb24odCxlLHIsbixpKXtpZihcInJhZGlhbnNcIiE9PXQudGhldGF1bml0fHxyKWUudGV4dD1HKGUueCx0LGksbik7ZWxzZXt2YXIgYT1lLngvMTgwO2lmKDA9PT1hKWUudGV4dD1cIjBcIjtlbHNle3ZhciBvPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlKXtyZXR1cm4gTWF0aC5hYnModC1lKTw9MWUtNn12YXIgcj1mdW5jdGlvbih0KXt2YXIgcj0xO2Zvcig7IWUoTWF0aC5yb3VuZCh0KnIpL3IsdCk7KXIqPTEwO3JldHVybiByfSh0KSxuPXQqcixpPU1hdGguYWJzKGZ1bmN0aW9uIHQocixuKXtyZXR1cm4gZShuLDApP3I6dChuLHIlbil9KG4scikpO3JldHVybltNYXRoLnJvdW5kKG4vaSksTWF0aC5yb3VuZChyL2kpXX0oYSk7aWYob1sxXT49MTAwKWUudGV4dD1HKHMuZGVnMnJhZChlLngpLHQsaSxuKTtlbHNle3ZhciBsPWUueDwwOzE9PT1vWzFdPzE9PT1vWzBdP2UudGV4dD1cIlxcdTAzYzBcIjplLnRleHQ9b1swXStcIlxcdTAzYzBcIjplLnRleHQ9W1wiPHN1cD5cIixvWzBdLFwiPC9zdXA+XCIsXCJcXHUyMDQ0XCIsXCI8c3ViPlwiLG9bMV0sXCI8L3N1Yj5cIixcIlxcdTAzYzBcIl0uam9pbihcIlwiKSxsJiYoZS50ZXh0PV8rZS50ZXh0KX19fX0odCxhLHIsbCxkKTpmdW5jdGlvbih0LGUscixuLGkpe1wibmV2ZXJcIj09PWk/aT1cIlwiOlwiYWxsXCI9PT10LnNob3dleHBvbmVudCYmTWF0aC5hYnMoZS54L3QuZHRpY2spPDFlLTYmJihpPVwiaGlkZVwiKTtlLnRleHQ9RyhlLngsdCxpLG4pfSh0LGEsMCxsLGQpLHQudGlja3ByZWZpeCYmIXAodC5zaG93dGlja3ByZWZpeCkmJihhLnRleHQ9dC50aWNrcHJlZml4K2EudGV4dCksdC50aWNrc3VmZml4JiYhcCh0LnNob3d0aWNrc3VmZml4KSYmKGEudGV4dCs9dC50aWNrc3VmZml4KSxcImJvdW5kYXJpZXNcIj09PXQudGlja3Nvbnx8dC5zaG93ZGl2aWRlcnMpe3ZhciBnPWZ1bmN0aW9uKGUpe3ZhciByPXQubDJwKGUpO3JldHVybiByPj0wJiZyPD10Ll9sZW5ndGg/ZTpudWxsfTthLnhibmQ9W2coYS54LS41KSxnKGEueCt0LmR0aWNrLS41KV19cmV0dXJuIGF9LFQuaG92ZXJMYWJlbFRleHQ9ZnVuY3Rpb24odCxlLHIpe2lmKHIhPT13JiZyIT09ZSlyZXR1cm4gVC5ob3ZlckxhYmVsVGV4dCh0LGUpK1wiIC0gXCIrVC5ob3ZlckxhYmVsVGV4dCh0LHIpO3ZhciBuPVwibG9nXCI9PT10LnR5cGUmJmU8PTAsaT1ULnRpY2tUZXh0KHQsdC5jMmwobj8tZTplKSxcImhvdmVyXCIpLnRleHQ7cmV0dXJuIG4/MD09PWU/XCIwXCI6XytpOml9O3ZhciBVPVtcImZcIixcInBcIixcIm5cIixcIlxcdTAzYmNcIixcIm1cIixcIlwiLFwia1wiLFwiTVwiLFwiR1wiLFwiVFwiXTtmdW5jdGlvbiBxKHQpe3JldHVyblwiU0lcIj09PXR8fFwiQlwiPT09dH1mdW5jdGlvbiBIKHQpe3JldHVybiB0PjE0fHx0PC0xNX1mdW5jdGlvbiBHKHQsZSxyLG4pe3ZhciBhPXQ8MCxvPWUuX3RpY2tyb3VuZCxsPXJ8fGUuZXhwb25lbnRmb3JtYXR8fFwiQlwiLGM9ZS5fdGlja2V4cG9uZW50LHU9VC5nZXRUaWNrRm9ybWF0KGUpLGg9ZS5zZXBhcmF0ZXRob3VzYW5kcztpZihuKXt2YXIgZj17ZXhwb25lbnRmb3JtYXQ6bCxkdGljazpcIm5vbmVcIj09PWUuc2hvd2V4cG9uZW50P2UuZHRpY2s6aSh0KSYmTWF0aC5hYnModCl8fDEscmFuZ2U6XCJub25lXCI9PT1lLnNob3dleHBvbmVudD9lLnJhbmdlLm1hcChlLnIyZCk6WzAsdHx8MV19O2ooZiksbz0oTnVtYmVyKGYuX3RpY2tyb3VuZCl8fDApKzQsYz1mLl90aWNrZXhwb25lbnQsZS5ob3ZlcmZvcm1hdCYmKHU9ZS5ob3ZlcmZvcm1hdCl9aWYodSlyZXR1cm4gZS5fbnVtRm9ybWF0KHUpKHQpLnJlcGxhY2UoLy0vZyxfKTt2YXIgcCxkPU1hdGgucG93KDEwLC1vKS8yO2lmKFwibm9uZVwiPT09bCYmKGM9MCksKHQ9TWF0aC5hYnModCkpPGQpdD1cIjBcIixhPSExO2Vsc2V7aWYodCs9ZCxjJiYodCo9TWF0aC5wb3coMTAsLWMpLG8rPWMpLDA9PT1vKXQ9U3RyaW5nKE1hdGguZmxvb3IodCkpO2Vsc2UgaWYobzwwKXt0PSh0PVN0cmluZyhNYXRoLnJvdW5kKHQpKSkuc3Vic3RyKDAsdC5sZW5ndGgrbyk7Zm9yKHZhciBnPW87ZzwwO2crKyl0Kz1cIjBcIn1lbHNle3ZhciB2PSh0PVN0cmluZyh0KSkuaW5kZXhPZihcIi5cIikrMTt2JiYodD10LnN1YnN0cigwLHYrbykucmVwbGFjZSgvXFwuPzArJC8sXCJcIikpfXQ9cy5udW1TZXBhcmF0ZSh0LGUuX3NlcGFyYXRvcnMsaCl9YyYmXCJoaWRlXCIhPT1sJiYocShsKSYmSChjKSYmKGw9XCJwb3dlclwiKSxwPWM8MD9fKy1jOlwicG93ZXJcIiE9PWw/XCIrXCIrYzpTdHJpbmcoYyksXCJlXCI9PT1sfHxcIkVcIj09PWw/dCs9bCtwOlwicG93ZXJcIj09PWw/dCs9XCJcXHhkNzEwPHN1cD5cIitwK1wiPC9zdXA+XCI6XCJCXCI9PT1sJiY5PT09Yz90Kz1cIkJcIjpxKGwpJiYodCs9VVtjLzMrNV0pKTtyZXR1cm4gYT9fK3Q6dH1mdW5jdGlvbiBZKHQsZSl7dmFyIHI9dC5faWQuY2hhckF0KDApLG49dC5fdGlja0FuZ2xlc1tlXXx8MCxpPXMuZGVnMnJhZChuKSxhPU1hdGguc2luKGkpLG89TWF0aC5jb3MoaSksbD0wLGM9MDtyZXR1cm4gdC5fc2VsZWN0aW9uc1tlXS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9JCh0aGlzKSxlPWguYkJveCh0Lm5vZGUoKSkscj1lLndpZHRoLG49ZS5oZWlnaHQ7bD1NYXRoLm1heChsLG8qcixhKm4pLGM9TWF0aC5tYXgoYyxhKnIsbypuKX0pLHt4OmMseTpsfVtyXX1mdW5jdGlvbiBXKHQpe3JldHVyblt0LnRleHQsdC54LHQuYXhJbmZvLHQuZm9udCx0LmZvbnRTaXplLHQuZm9udENvbG9yXS5qb2luKFwiX1wiKX1mdW5jdGlvbiBYKHQsZSl7dmFyIHIsbj10Ll9mdWxsTGF5b3V0Ll9zaXplLGk9ZS5faWQuY2hhckF0KDApLGE9ZS5zaWRlO3JldHVyblwiZnJlZVwiIT09ZS5hbmNob3I/cj1TLmdldEZyb21JZCh0LGUuYW5jaG9yKTpcInhcIj09PWk/cj17X29mZnNldDpuLnQrKDEtKGUucG9zaXRpb258fDApKSpuLmgsX2xlbmd0aDowfTpcInlcIj09PWkmJihyPXtfb2Zmc2V0Om4ubCsoZS5wb3NpdGlvbnx8MCkqbi53LF9sZW5ndGg6MH0pLFwidG9wXCI9PT1hfHxcImxlZnRcIj09PWE/ci5fb2Zmc2V0OlwiYm90dG9tXCI9PT1hfHxcInJpZ2h0XCI9PT1hP3IuX29mZnNldCtyLl9sZW5ndGg6dm9pZCAwfWZ1bmN0aW9uIFoodCxlKXt2YXIgcj10LmwycChlKTtyZXR1cm4gcj4xJiZyPHQuX2xlbmd0aC0xfWZ1bmN0aW9uICQodCl7dmFyIGU9bi5zZWxlY3QodCkscj1lLnNlbGVjdChcIi50ZXh0LW1hdGgtZ3JvdXBcIik7cmV0dXJuIHIuZW1wdHkoKT9lLnNlbGVjdChcInRleHRcIik6cn1mdW5jdGlvbiBKKHQpe3JldHVybiB0Ll9pZCtcIi5hdXRvbWFyZ2luXCJ9ZnVuY3Rpb24gSyh0KXtyZXR1cm4gdC5faWQrXCIucmFuZ2VzbGlkZXJcIn1mdW5jdGlvbiBRKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspLTE9PT10LmluZGV4T2YoZVtyXSkmJnQucHVzaChlW3JdKX1mdW5jdGlvbiB0dCh0LGUscil7dmFyIG4saSxhPVtdLG89W10sbD10LmxheW91dDtmb3Iobj0wO248ZS5sZW5ndGg7bisrKWEucHVzaChULmdldEZyb21JZCh0LGVbbl0pKTtmb3Iobj0wO248ci5sZW5ndGg7bisrKW8ucHVzaChULmdldEZyb21JZCh0LHJbbl0pKTt2YXIgYz1PYmplY3Qua2V5cyhmKSx1PVtcImFuY2hvclwiLFwiZG9tYWluXCIsXCJvdmVybGF5aW5nXCIsXCJwb3NpdGlvblwiLFwic2lkZVwiLFwidGlja2FuZ2xlXCIsXCJlZGl0VHlwZVwiXSxoPVtcImxpbmVhclwiLFwibG9nXCJdO2ZvcihuPTA7bjxjLmxlbmd0aDtuKyspe3ZhciBwPWNbbl0sZD1hWzBdW3BdLGc9b1swXVtwXSx2PSEwLG09ITEseT0hMTtpZihcIl9cIiE9PXAuY2hhckF0KDApJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBkJiYtMT09PXUuaW5kZXhPZihwKSl7Zm9yKGk9MTtpPGEubGVuZ3RoJiZ2O2krKyl7dmFyIHg9YVtpXVtwXTtcInR5cGVcIj09PXAmJi0xIT09aC5pbmRleE9mKGQpJiYtMSE9PWguaW5kZXhPZih4KSYmZCE9PXg/bT0hMDp4IT09ZCYmKHY9ITEpfWZvcihpPTE7aTxvLmxlbmd0aCYmdjtpKyspe3ZhciBiPW9baV1bcF07XCJ0eXBlXCI9PT1wJiYtMSE9PWguaW5kZXhPZihnKSYmLTEhPT1oLmluZGV4T2YoYikmJmchPT1iP3k9ITA6b1tpXVtwXSE9PWcmJih2PSExKX12JiYobSYmKGxbYVswXS5fbmFtZV0udHlwZT1cImxpbmVhclwiKSx5JiYobFtvWzBdLl9uYW1lXS50eXBlPVwibGluZWFyXCIpLGV0KGwscCxhLG8sdC5fZnVsbExheW91dC5fZGZsdFRpdGxlKSl9fWZvcihuPTA7bjx0Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zLmxlbmd0aDtuKyspe3ZhciBfPXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnNbbl07LTEhPT1lLmluZGV4T2YoXy54cmVmKSYmLTEhPT1yLmluZGV4T2YoXy55cmVmKSYmcy5zd2FwQXR0cnMobC5hbm5vdGF0aW9uc1tuXSxbXCI/XCJdKX19ZnVuY3Rpb24gZXQodCxlLHIsbixpKXt2YXIgYSxvPXMubmVzdGVkUHJvcGVydHksbD1vKHRbclswXS5fbmFtZV0sZSkuZ2V0KCksYz1vKHRbblswXS5fbmFtZV0sZSkuZ2V0KCk7Zm9yKFwidGl0bGVcIj09PWUmJihsJiZsLnRleHQ9PT1pLngmJihsLnRleHQ9aS55KSxjJiZjLnRleHQ9PT1pLnkmJihjLnRleHQ9aS54KSksYT0wO2E8ci5sZW5ndGg7YSsrKW8odCxyW2FdLl9uYW1lK1wiLlwiK2UpLnNldChjKTtmb3IoYT0wO2E8bi5sZW5ndGg7YSsrKW8odCxuW2FdLl9uYW1lK1wiLlwiK2UpLnNldChsKX1mdW5jdGlvbiBydCh0KXtyZXR1cm5cImFuZ3VsYXJheGlzXCI9PT10Ll9pZH1ULmdldFRpY2tGb3JtYXQ9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHMsbDtmdW5jdGlvbiBjKHQpe3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiB0P3Q6TnVtYmVyKHQucmVwbGFjZShcIk1cIixcIlwiKSkqdn1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9W1wiTFwiLFwiRFwiXTtpZih0eXBlb2YgdD09dHlwZW9mIGUpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXJldHVybiB0LWU7dmFyIG49ci5pbmRleE9mKHQuY2hhckF0KDApKSxpPXIuaW5kZXhPZihlLmNoYXJBdCgwKSk7cmV0dXJuIG49PT1pP051bWJlcih0LnJlcGxhY2UoLyhMfEQpL2csXCJcIikpLU51bWJlcihlLnJlcGxhY2UoLyhMfEQpL2csXCJcIikpOm4taX1yZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdD8xOi0xfWZ1bmN0aW9uIGgodCxlKXt2YXIgcj1udWxsPT09ZVswXSxuPW51bGw9PT1lWzFdLGk9dSh0LGVbMF0pPj0wLGE9dSh0LGVbMV0pPD0wO3JldHVybihyfHxpKSYmKG58fGEpfWlmKHQudGlja2Zvcm1hdHN0b3BzJiZ0LnRpY2tmb3JtYXRzdG9wcy5sZW5ndGg+MClzd2l0Y2godC50eXBlKXtjYXNlXCJkYXRlXCI6Y2FzZVwibGluZWFyXCI6Zm9yKGU9MDtlPHQudGlja2Zvcm1hdHN0b3BzLmxlbmd0aDtlKyspaWYoKG49dC50aWNrZm9ybWF0c3RvcHNbZV0pLmVuYWJsZWQmJihpPXQuZHRpY2ssYT1uLmR0aWNrcmFuZ2Usbz12b2lkIDAsdm9pZCAwLHZvaWQgMCxvPWN8fGZ1bmN0aW9uKHQpe3JldHVybiB0fSxzPWFbMF0sbD1hWzFdLCghcyYmXCJudW1iZXJcIiE9dHlwZW9mIHN8fG8ocyk8PW8oaSkpJiYoIWwmJlwibnVtYmVyXCIhPXR5cGVvZiBsfHxvKGwpPj1vKGkpKSkpe3I9bjticmVha31icmVhaztjYXNlXCJsb2dcIjpmb3IoZT0wO2U8dC50aWNrZm9ybWF0c3RvcHMubGVuZ3RoO2UrKylpZigobj10LnRpY2tmb3JtYXRzdG9wc1tlXSkuZW5hYmxlZCYmaCh0LmR0aWNrLG4uZHRpY2tyYW5nZSkpe3I9bjticmVha319cmV0dXJuIHI/ci52YWx1ZTp0LnRpY2tmb3JtYXR9LFQuZ2V0U3VicGxvdHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0Ll9zdWJwbG90cyxuPXIuY2FydGVzaWFuLmNvbmNhdChyLmdsMmR8fFtdKSxpPWU/VC5maW5kU3VicGxvdHNXaXRoQXhpcyhuLGUpOm47cmV0dXJuIGkuc29ydChmdW5jdGlvbih0LGUpe3ZhciByPXQuc3Vic3RyKDEpLnNwbGl0KFwieVwiKSxuPWUuc3Vic3RyKDEpLnNwbGl0KFwieVwiKTtyZXR1cm4gclswXT09PW5bMF0/K3JbMV0tK25bMV06K3JbMF0tK25bMF19KSxpfSxULmZpbmRTdWJwbG90c1dpdGhBeGlzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBSZWdFeHAoXCJ4XCI9PT1lLl9pZC5jaGFyQXQoMCk/XCJeXCIrZS5faWQrXCJ5XCI6ZS5faWQrXCIkXCIpLG49W10saT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT10W2ldO3IudGVzdChhKSYmbi5wdXNoKGEpfXJldHVybiBufSxULm1ha2VDbGlwUGF0aHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtpZighZS5faGFzT25seUxhcmdlU3Bsb21zKXt2YXIgcixpLGE9e19vZmZzZXQ6MCxfbGVuZ3RoOmUud2lkdGgsX2lkOlwiXCJ9LG89e19vZmZzZXQ6MCxfbGVuZ3RoOmUuaGVpZ2h0LF9pZDpcIlwifSxzPVQubGlzdCh0LFwieFwiLCEwKSxsPVQubGlzdCh0LFwieVwiLCEwKSxjPVtdO2ZvcihyPTA7cjxzLmxlbmd0aDtyKyspZm9yKGMucHVzaCh7eDpzW3JdLHk6b30pLGk9MDtpPGwubGVuZ3RoO2krKykwPT09ciYmYy5wdXNoKHt4OmEseTpsW2ldfSksYy5wdXNoKHt4OnNbcl0seTpsW2ldfSk7dmFyIHU9ZS5fY2xpcHMuc2VsZWN0QWxsKFwiLmF4ZXNjbGlwXCIpLmRhdGEoYyxmdW5jdGlvbih0KXtyZXR1cm4gdC54Ll9pZCt0LnkuX2lkfSk7dS5lbnRlcigpLmFwcGVuZChcImNsaXBQYXRoXCIpLmNsYXNzZWQoXCJheGVzY2xpcFwiLCEwKS5hdHRyKFwiaWRcIixmdW5jdGlvbih0KXtyZXR1cm5cImNsaXBcIitlLl91aWQrdC54Ll9pZCt0LnkuX2lkfSkuYXBwZW5kKFwicmVjdFwiKSx1LmV4aXQoKS5yZW1vdmUoKSx1LmVhY2goZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuc2VsZWN0KFwicmVjdFwiKS5hdHRyKHt4OnQueC5fb2Zmc2V0fHwwLHk6dC55Ll9vZmZzZXR8fDAsd2lkdGg6dC54Ll9sZW5ndGh8fDEsaGVpZ2h0OnQueS5fbGVuZ3RofHwxfSl9KX19LFQuZHJhdz1mdW5jdGlvbih0LGUscil7dmFyIG49dC5fZnVsbExheW91dDtcInJlZHJhd1wiPT09ZSYmbi5fcGFwZXIuc2VsZWN0QWxsKFwiZy5zdWJwbG90XCIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPW4uX3Bsb3RzW2VdLGk9ci54YXhpcyxhPXIueWF4aXM7ci54YXhpc2xheWVyLnNlbGVjdEFsbChcIi5cIitpLl9pZCtcInRpY2tcIikucmVtb3ZlKCksci55YXhpc2xheWVyLnNlbGVjdEFsbChcIi5cIithLl9pZCtcInRpY2tcIikucmVtb3ZlKCksci54YXhpc2xheWVyLnNlbGVjdEFsbChcIi5cIitpLl9pZCtcInRpY2syXCIpLnJlbW92ZSgpLHIueWF4aXNsYXllci5zZWxlY3RBbGwoXCIuXCIrYS5faWQrXCJ0aWNrMlwiKS5yZW1vdmUoKSxyLnhheGlzbGF5ZXIuc2VsZWN0QWxsKFwiLlwiK2kuX2lkK1wiZGl2aWRlclwiKS5yZW1vdmUoKSxyLnlheGlzbGF5ZXIuc2VsZWN0QWxsKFwiLlwiK2EuX2lkK1wiZGl2aWRlclwiKS5yZW1vdmUoKSxyLmdyaWRsYXllciYmci5ncmlkbGF5ZXIuc2VsZWN0QWxsKFwicGF0aFwiKS5yZW1vdmUoKSxyLnplcm9saW5lbGF5ZXImJnIuemVyb2xpbmVsYXllci5zZWxlY3RBbGwoXCJwYXRoXCIpLnJlbW92ZSgpLG4uX2luZm9sYXllci5zZWxlY3QoXCIuZy1cIitpLl9pZCtcInRpdGxlXCIpLnJlbW92ZSgpLG4uX2luZm9sYXllci5zZWxlY3QoXCIuZy1cIithLl9pZCtcInRpdGxlXCIpLnJlbW92ZSgpfSk7dmFyIGk9ZSYmXCJyZWRyYXdcIiE9PWU/ZTpULmxpc3RJZHModCk7cmV0dXJuIHMuc3luY09yQXN5bmMoaS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoZSl7dmFyIG49VC5nZXRGcm9tSWQodCxlKSxpPVQuZHJhd09uZSh0LG4scik7cmV0dXJuIG4uX3I9bi5yYW5nZS5zbGljZSgpLG4uX3JsPXMuc2ltcGxlTWFwKG4uX3Isbi5yMmwpLGl9fX0pKX0sVC5kcmF3T25lPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGw7cj1yfHx7fSxlLnNldFNjYWxlKCk7dmFyIGY9dC5fZnVsbExheW91dCxwPWUuX2lkLGQ9cC5jaGFyQXQoMCksZz1ULmNvdW50ZXJMZXR0ZXIocCksdj1lLl9tYWluU3VicGxvdCxtPWUuX21haW5MaW5lUG9zaXRpb24seT1lLl9tYWluTWlycm9yUG9zaXRpb24seD1mLl9wbG90c1t2XVtkK1wiYXhpc2xheWVyXCJdLGI9ZS5fc3VicGxvdHNXaXRoLF89ZS5fdmFscz1ULmNhbGNUaWNrcyhlKSx3PVtlLm1pcnJvcixtLHldLmpvaW4oXCJfXCIpO2ZvcihuPTA7bjxfLmxlbmd0aDtuKyspX1tuXS5heEluZm89dztpZihlLnZpc2libGUpe2UuX3NlbGVjdGlvbnM9e30sZS5fdGlja0FuZ2xlcz17fTt2YXIgayxNLFM9VC5tYWtlVHJhbnNGbihlKTtpZihcImJvdW5kYXJpZXNcIj09PWUudGlja3Nvbil7dmFyIEU9ZnVuY3Rpb24odCxlKXt2YXIgcixuPVtdLGk9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnhibmRbZV07bnVsbCE9PXImJm4ucHVzaChzLmV4dGVuZEZsYXQoe30sdCx7eDpyfSkpfTtpZihlLmxlbmd0aCl7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKylpKGVbcl0sMCk7aShlW3ItMV0sMSl9cmV0dXJuIG59KDAsXyk7TT1ULmNsaXBFbmRzKGUsRSksaz1cImluc2lkZVwiPT09ZS50aWNrcz9NOkV9ZWxzZSBNPVQuY2xpcEVuZHMoZSxfKSxrPVwiaW5zaWRlXCI9PT1lLnRpY2tzP006Xzt2YXIgQz1lLl9ncmlkVmFscz1NLEw9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9W10sYT1mdW5jdGlvbih0LGUpe3ZhciByPXQueGJuZFtlXTtudWxsIT09ciYmaS5wdXNoKHMuZXh0ZW5kRmxhdCh7fSx0LHt4OnJ9KSl9O2lmKHQuc2hvd2RpdmlkZXJzJiZlLmxlbmd0aCl7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG89ZVtyXTtvLnRleHQyIT09biYmYShvLDApLG49by50ZXh0Mn1hKGVbci0xXSwxKX1yZXR1cm4gaX0oZSxfKTtpZighZi5faGFzT25seUxhcmdlU3Bsb21zKXt2YXIgej17fTtmb3Iobj0wO248Yi5sZW5ndGg7bisrKXtpPWJbbl07dmFyIE89KGw9Zi5fcGxvdHNbaV0pW2crXCJheGlzXCJdLEk9Ty5fbWFpbkF4aXMuX2lkO2lmKCF6W0ldKXt6W0ldPTE7dmFyIEQ9XCJ4XCI9PT1kP1wiTTAsXCIrTy5fb2Zmc2V0K1widlwiK08uX2xlbmd0aDpcIk1cIitPLl9vZmZzZXQrXCIsMGhcIitPLl9sZW5ndGg7VC5kcmF3R3JpZCh0LGUse3ZhbHM6Qyxjb3VudGVyQXhpczpPLGxheWVyOmwuZ3JpZGxheWVyLnNlbGVjdChcIi5cIitwKSxwYXRoOkQsdHJhbnNGbjpTfSksVC5kcmF3WmVyb0xpbmUodCxlLHtjb3VudGVyQXhpczpPLGxheWVyOmwuemVyb2xpbmVsYXllcixwYXRoOkQsdHJhbnNGbjpTfSl9fX12YXIgUD1ULmdldFRpY2tTaWducyhlKSxSPVtdO2lmKGUudGlja3Mpe3ZhciBGLEIsTixqPVQubWFrZVRpY2tQYXRoKGUsbSxQWzJdKTtpZihlLl9hbmNob3JBeGlzJiZlLm1pcnJvciYmITAhPT1lLm1pcnJvcj8oRj1ULm1ha2VUaWNrUGF0aChlLHksUFszXSksQj1qK0YpOihGPVwiXCIsQj1qKSxlLnNob3dkaXZpZGVycyYmXCJvdXRzaWRlXCI9PT1lLnRpY2tzJiZcImJvdW5kYXJpZXNcIj09PWUudGlja3Nvbil7dmFyIFU9e307Zm9yKG49MDtuPEwubGVuZ3RoO24rKylVW0xbbl0ueF09MTtOPWZ1bmN0aW9uKHQpe3JldHVybiBVW3QueF0/RjpCfX1lbHNlIE49QjtULmRyYXdUaWNrcyh0LGUse3ZhbHM6ayxsYXllcjp4LHBhdGg6Tix0cmFuc0ZuOlN9KSxSPU9iamVjdC5rZXlzKGUuX2xpbmVwb3NpdGlvbnN8fHt9KX1mb3Iobj0wO248Ui5sZW5ndGg7bisrKXtpPVJbbl0sbD1mLl9wbG90c1tpXTt2YXIgcT1lLl9saW5lcG9zaXRpb25zW2ldfHxbXSxIPVQubWFrZVRpY2tQYXRoKGUscVswXSxQWzBdKStULm1ha2VUaWNrUGF0aChlLHFbMV0sUFsxXSk7VC5kcmF3VGlja3ModCxlLHt2YWxzOmssbGF5ZXI6bFtkK1wiYXhpc2xheWVyXCJdLHBhdGg6SCx0cmFuc0ZuOlN9KX12YXIgRz1bXTtpZihHLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gVC5kcmF3TGFiZWxzKHQsZSx7dmFsczpfLGxheWVyOngsdHJhbnNGbjpTLGxhYmVsRm5zOlQubWFrZUxhYmVsRm5zKGUsbSl9KX0pLFwibXVsdGljYXRlZ29yeVwiPT09ZS50eXBlKXt2YXIgWj0wLCQ9e3g6Mix5OjEwfVtkXSxRPVBbMl0qKFwiaW5zaWRlXCI9PT1lLnRpY2tzPy0xOjEpO0cucHVzaChmdW5jdGlvbigpe3JldHVybiBaKz1ZKGUscCtcInRpY2tcIikrJCxaKz1lLl90aWNrQW5nbGVzW3ArXCJ0aWNrXCJdP2UudGlja2ZvbnQuc2l6ZSpBOjAsVC5kcmF3TGFiZWxzKHQsZSx7dmFsczpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPXt9LGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXTtuW2EudGV4dDJdP25bYS50ZXh0Ml0ucHVzaChhLngpOm5bYS50ZXh0Ml09W2EueF19Zm9yKHZhciBvIGluIG4pci5wdXNoKFYodCxzLmludGVycChuW29dLC41KSxvKSk7cmV0dXJuIHJ9KGUsXyksbGF5ZXI6eCxjbHM6cCtcInRpY2syXCIscmVwb3NpdGlvbk9uVXBkYXRlOiEwLHNlY29uZGFyeTohMCx0cmFuc0ZuOlMsbGFiZWxGbnM6VC5tYWtlTGFiZWxGbnMoZSxtK1oqUSl9KX0pLEcucHVzaChmdW5jdGlvbigpe3JldHVybiBaKz1ZKGUscCtcInRpY2syXCIpLGUuX2xhYmVsTGVuZ3RoPVosZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuX2lkK1wiZGl2aWRlclwiLGk9ci52YWxzLGE9ci5sYXllci5zZWxlY3RBbGwoXCJwYXRoLlwiK24pLmRhdGEoaSxXKTthLmV4aXQoKS5yZW1vdmUoKSxhLmVudGVyKCkuaW5zZXJ0KFwicGF0aFwiLFwiOmZpcnN0LWNoaWxkXCIpLmNsYXNzZWQobiwxKS5jbGFzc2VkKFwiY3Jpc3BcIiwxKS5jYWxsKHUuc3Ryb2tlLGUuZGl2aWRlcmNvbG9yKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLGguY3Jpc3BSb3VuZCh0LGUuZGl2aWRlcndpZHRoLDEpK1wicHhcIiksYS5hdHRyKFwidHJhbnNmb3JtXCIsci50cmFuc0ZuKS5hdHRyKFwiZFwiLHIucGF0aCl9KHQsZSx7dmFsczpMLGxheWVyOngscGF0aDpULm1ha2VUaWNrUGF0aChlLG0sUSxaKSx0cmFuc0ZuOlN9KX0pfXZhciB0dD1vLmdldENvbXBvbmVudE1ldGhvZChcInJhbmdlc2xpZGVyXCIsXCJpc1Zpc2libGVcIikoZSk7cmV0dXJuIEcucHVzaChmdW5jdGlvbigpe2lmKGUuc2hvd3RpY2tsYWJlbHMpe3ZhciByPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj14Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlLl9ib3VuZGluZ0JveD17d2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHQsbGVmdDpuLmxlZnQtci5sZWZ0LHJpZ2h0Om4ucmlnaHQtci5sZWZ0LHRvcDpuLnRvcC1yLnRvcCxib3R0b206bi5ib3R0b20tci50b3B9fWVsc2V7dmFyIGksYT1mLl9zaXplO1wieFwiPT09ZD8oaT1cImZyZWVcIj09PWUuYW5jaG9yP2EudCthLmgqKDEtZS5wb3NpdGlvbik6YS50K2EuaCooMS1lLl9hbmNob3JBeGlzLmRvbWFpblt7Ym90dG9tOjAsdG9wOjF9W2Uuc2lkZV1dKSxlLl9ib3VuZGluZ0JveD17dG9wOmksYm90dG9tOmksbGVmdDplLl9vZmZzZXQscmlnaHQ6ZS5fb2Zmc2V0K2UuX2xlbmd0aCx3aWR0aDplLl9sZW5ndGgsaGVpZ2h0OjB9KTooaT1cImZyZWVcIj09PWUuYW5jaG9yP2EubCthLncqZS5wb3NpdGlvbjphLmwrYS53KmUuX2FuY2hvckF4aXMuZG9tYWluW3tsZWZ0OjAscmlnaHQ6MX1bZS5zaWRlXV0sZS5fYm91bmRpbmdCb3g9e2xlZnQ6aSxyaWdodDppLGJvdHRvbTplLl9vZmZzZXQrZS5fbGVuZ3RoLHRvcDplLl9vZmZzZXQsaGVpZ2h0OmUuX2xlbmd0aCx3aWR0aDowfSl9aWYoYil7Zm9yKHZhciBvPWUuX2NvdW50ZXJTcGFuPVsxLzAsLTEvMF0scz0wO3M8Yi5sZW5ndGg7cysrKXt2YXIgbD1mLl9wbG90c1tiW3NdXVtcInhcIj09PWQ/XCJ5YXhpc1wiOlwieGF4aXNcIl07ZXQobyxbbC5fb2Zmc2V0LGwuX29mZnNldCtsLl9sZW5ndGhdKX1cImZyZWVcIj09PWUuYW5jaG9yJiZldChvLFwieFwiPT09ZD9bZS5fYm91bmRpbmdCb3guYm90dG9tLGUuX2JvdW5kaW5nQm94LnRvcF06W2UuX2JvdW5kaW5nQm94LnJpZ2h0LGUuX2JvdW5kaW5nQm94LmxlZnRdKX19LGZ1bmN0aW9uKCl7dmFyIHIsbixpPWUuc2lkZS5jaGFyQXQoMCk7aWYodHQmJihuPW8uZ2V0Q29tcG9uZW50TWV0aG9kKFwicmFuZ2VzbGlkZXJcIixcImF1dG9NYXJnaW5PcHRzXCIpKHQsZSkpLGEuYXV0b01hcmdpbih0LEsoZSksbiksZS5hdXRvbWFyZ2luJiYoIXR0fHxcImJcIiE9PWkpKXtyPXt4OjAseTowLHI6MCxsOjAsdDowLGI6MH07dmFyIHMsbCxjPWUuX2JvdW5kaW5nQm94LHU9WCh0LGUpO3N3aXRjaChkK2kpe2Nhc2VcInhiXCI6cz0wLGw9Yy50b3AtdSxyW2ldPWMuaGVpZ2h0O2JyZWFrO2Nhc2VcInh0XCI6cz0xLGw9dS1jLmJvdHRvbSxyW2ldPWMuaGVpZ2h0O2JyZWFrO2Nhc2VcInlsXCI6cz0wLGw9dS1jLnJpZ2h0LHJbaV09Yy53aWR0aDticmVhaztjYXNlXCJ5clwiOnM9MSxsPWMubGVmdC11LHJbaV09Yy53aWR0aH1pZihyW2ddPVwiZnJlZVwiPT09ZS5hbmNob3I/ZS5wb3NpdGlvbjplLl9hbmNob3JBeGlzLmRvbWFpbltzXSxyW2ldPjAmJihyW2ldKz1sKSxlLnRpdGxlLnRleHQhPT1mLl9kZmx0VGl0bGVbZF0mJihyW2ldKz1lLnRpdGxlLmZvbnQuc2l6ZSksXCJ4XCI9PT1kJiZjLndpZHRoPjApe3ZhciBoPWMucmlnaHQtKGUuX29mZnNldCtlLl9sZW5ndGgpO2g+MCYmKHIueD0xLHIucj1oKTt2YXIgcD1lLl9vZmZzZXQtYy5sZWZ0O3A+MCYmKHIueD0wLHIubD1wKX1lbHNlIGlmKFwieVwiPT09ZCYmYy5oZWlnaHQ+MCl7dmFyIHY9Yy5ib3R0b20tKGUuX29mZnNldCtlLl9sZW5ndGgpO3Y+MCYmKHIueT0wLHIuYj12KTt2YXIgbT1lLl9vZmZzZXQtYy50b3A7bT4wJiYoci55PTEsci50PW0pfX1hLmF1dG9NYXJnaW4odCxKKGUpLHIpfSksci5za2lwVGl0bGV8fHR0JiZlLl9ib3VuZGluZ0JveCYmXCJib3R0b21cIj09PWUuc2lkZXx8Ry5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10Ll9mdWxsTGF5b3V0LGk9ZS5faWQsYT1pLmNoYXJBdCgwKSxvPWUudGl0bGUuZm9udC5zaXplO2lmKFwibXVsdGljYXRlZ29yeVwiPT09ZS50eXBlKXI9ZS5fbGFiZWxMZW5ndGg7ZWxzZXtyPTEwKzEuNSpvKyhlLmxpbmV3aWR0aD9lLmxpbmV3aWR0aC0xOjApfXZhciBzLGwsdSxmLHA9WCh0LGUpO1wieFwiPT09YT8obD1lLl9vZmZzZXQrZS5fbGVuZ3RoLzIsdT1cInRvcFwiPT09ZS5zaWRlPy1yLW8qKGUuc2hvd3RpY2tsYWJlbHM/MTowKTpyK28qKGUuc2hvd3RpY2tsYWJlbHM/MS41Oi41KSx1Kz1wKToodT1lLl9vZmZzZXQrZS5fbGVuZ3RoLzIsbD1cInJpZ2h0XCI9PT1lLnNpZGU/citvKihlLnNob3d0aWNrbGFiZWxzPzE6LjUpOi1yLW8qKGUuc2hvd3RpY2tsYWJlbHM/LjU6MCksbCs9cCxzPXtyb3RhdGU6XCItOTBcIixvZmZzZXQ6MH0pO2lmKFwibXVsdGljYXRlZ29yeVwiIT09ZS50eXBlKXt2YXIgZD1lLl9zZWxlY3Rpb25zW2UuX2lkK1widGlja1wiXTtpZihmPXtzZWxlY3Rpb246ZCxzaWRlOmUuc2lkZX0sZCYmZC5ub2RlKCkmJmQubm9kZSgpLnBhcmVudE5vZGUpe3ZhciBnPWguZ2V0VHJhbnNsYXRlKGQubm9kZSgpLnBhcmVudE5vZGUpO2Yub2Zmc2V0TGVmdD1nLngsZi5vZmZzZXRUb3A9Zy55fX1yZXR1cm4gYy5kcmF3KHQsaStcInRpdGxlXCIse3Byb3BDb250YWluZXI6ZSxwcm9wTmFtZTplLl9uYW1lK1wiLnRpdGxlLnRleHRcIixwbGFjZWhvbGRlcjpuLl9kZmx0VGl0bGVbYV0sYXZvaWQ6Zix0cmFuc2Zvcm06cyxhdHRyaWJ1dGVzOnt4OmwseTp1LFwidGV4dC1hbmNob3JcIjpcIm1pZGRsZVwifX0pfSh0LGUpfSkscy5zeW5jT3JBc3luYyhHKX1mdW5jdGlvbiBldCh0LGUpe3RbMF09TWF0aC5taW4odFswXSxlWzBdKSx0WzFdPU1hdGgubWF4KHRbMV0sZVsxXSl9fSxULmdldFRpY2tTaWducz1mdW5jdGlvbih0KXt2YXIgZT10Ll9pZC5jaGFyQXQoMCkscj17eDpcInRvcFwiLHk6XCJyaWdodFwifVtlXSxuPXQuc2lkZT09PXI/MTotMSxpPVstMSwxLG4sLW5dO3JldHVyblwiaW5zaWRlXCIhPT10LnRpY2tzPT0oXCJ4XCI9PT1lKSYmKGk9aS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuLXR9KSksaX0sVC5tYWtlVHJhbnNGbj1mdW5jdGlvbih0KXt2YXIgZT10Ll9pZC5jaGFyQXQoMCkscj10Ll9vZmZzZXQ7cmV0dXJuXCJ4XCI9PT1lP2Z1bmN0aW9uKGUpe3JldHVyblwidHJhbnNsYXRlKFwiKyhyK3QubDJwKGUueCkpK1wiLDApXCJ9OmZ1bmN0aW9uKGUpe3JldHVyblwidHJhbnNsYXRlKDAsXCIrKHIrdC5sMnAoZS54KSkrXCIpXCJ9fSxULm1ha2VUaWNrUGF0aD1mdW5jdGlvbih0LGUscixuKXtuPXZvaWQgMCE9PW4/bjp0LnRpY2tsZW47dmFyIGk9dC5faWQuY2hhckF0KDApLGE9KHQubGluZXdpZHRofHwxKS8yO3JldHVyblwieFwiPT09aT9cIk0wLFwiKyhlK2EqcikrXCJ2XCIrbipyOlwiTVwiKyhlK2EqcikrXCIsMGhcIituKnJ9LFQubWFrZUxhYmVsRm5zPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Ll9pZC5jaGFyQXQoMCksYT1cImJvdW5kYXJpZXNcIiE9PXQudGlja3NvbiYmXCJvdXRzaWRlXCI9PT10LnRpY2tzLG89MCxsPTA7aWYoYSYmKG8rPXQudGlja2xlbiksciYmXCJvdXRzaWRlXCI9PT10LnRpY2tzKXt2YXIgYz1zLmRlZzJyYWQocik7bz10LnRpY2tsZW4qTWF0aC5jb3MoYykrMSxsPXQudGlja2xlbipNYXRoLnNpbihjKX10LnNob3d0aWNrbGFiZWxzJiYoYXx8dC5zaG93bGluZSkmJihvKz0uMip0LnRpY2tmb250LnNpemUpO3ZhciB1LGgsZixwLGQ9e2xhYmVsU3RhbmRvZmY6bys9KHQubGluZXdpZHRofHwxKS8yLGxhYmVsU2hpZnQ6bH07cmV0dXJuXCJ4XCI9PT1uPyhwPVwiYm90dG9tXCI9PT10LnNpZGU/MTotMSx1PWwqcCxoPWUrbypwLGY9XCJib3R0b21cIj09PXQuc2lkZT8xOi0uMixkLnhGbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5keCt1fSxkLnlGbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5keStoK3QuZm9udFNpemUqZn0sZC5hbmNob3JGbj1mdW5jdGlvbih0LGUpe3JldHVybiBpKGUpJiYwIT09ZSYmMTgwIT09ZT9lKnA8MD9cImVuZFwiOlwic3RhcnRcIjpcIm1pZGRsZVwifSxkLmhlaWdodEZuPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gcjwtNjB8fHI+NjA/LS41Km46XCJ0b3BcIj09PXQuc2lkZT8tbjowfSk6XCJ5XCI9PT1uJiYocD1cInJpZ2h0XCI9PT10LnNpZGU/MTotMSx1PW8saD0tbCpwLGY9OTA9PT1NYXRoLmFicyh0LnRpY2thbmdsZSk/LjU6MCxkLnhGbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5keCtlKyh1K3QuZm9udFNpemUqZikqcH0sZC55Rm49ZnVuY3Rpb24odCl7cmV0dXJuIHQuZHkraCt0LmZvbnRTaXplKmt9LGQuYW5jaG9yRm49ZnVuY3Rpb24oZSxyKXtyZXR1cm4gaShyKSYmOTA9PT1NYXRoLmFicyhyKT9cIm1pZGRsZVwiOlwicmlnaHRcIj09PXQuc2lkZT9cInN0YXJ0XCI6XCJlbmRcIn0sZC5oZWlnaHRGbj1mdW5jdGlvbihlLHIsbil7cmV0dXJuKHIqPVwibGVmdFwiPT09dC5zaWRlPzE6LTEpPC0zMD8tbjpyPDMwPy0uNSpuOjB9KSxkfSxULmRyYXdUaWNrcz1mdW5jdGlvbih0LGUscil7cj1yfHx7fTt2YXIgbj1lLl9pZCtcInRpY2tcIixpPXIubGF5ZXIuc2VsZWN0QWxsKFwicGF0aC5cIituKS5kYXRhKGUudGlja3M/ci52YWxzOltdLFcpO2kuZXhpdCgpLnJlbW92ZSgpLGkuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQobiwxKS5jbGFzc2VkKFwidGlja3NcIiwxKS5jbGFzc2VkKFwiY3Jpc3BcIiwhMSE9PXIuY3Jpc3ApLmNhbGwodS5zdHJva2UsZS50aWNrY29sb3IpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsaC5jcmlzcFJvdW5kKHQsZS50aWNrd2lkdGgsMSkrXCJweFwiKS5hdHRyKFwiZFwiLHIucGF0aCksaS5hdHRyKFwidHJhbnNmb3JtXCIsci50cmFuc0ZuKX0sVC5kcmF3R3JpZD1mdW5jdGlvbih0LGUscil7cj1yfHx7fTt2YXIgbj1lLl9pZCtcImdyaWRcIixpPXIudmFscyxhPXIuY291bnRlckF4aXM7aWYoITE9PT1lLnNob3dncmlkKWk9W107ZWxzZSBpZihhJiZULnNob3VsZFNob3daZXJvTGluZSh0LGUsYSkpZm9yKHZhciBvPVwiYXJyYXlcIj09PWUudGlja21vZGUscz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbD1pW3NdLng7aWYobz8hbDpNYXRoLmFicyhsKTxlLmR0aWNrLzEwMCl7aWYoaT1pLnNsaWNlKDAscykuY29uY2F0KGkuc2xpY2UocysxKSksIW8pYnJlYWs7cy0tfX12YXIgYz1yLmxheWVyLnNlbGVjdEFsbChcInBhdGguXCIrbikuZGF0YShpLFcpO2MuZXhpdCgpLnJlbW92ZSgpLGMuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQobiwxKS5jbGFzc2VkKFwiY3Jpc3BcIiwhMSE9PXIuY3Jpc3ApLGUuX2d3PWguY3Jpc3BSb3VuZCh0LGUuZ3JpZHdpZHRoLDEpLGMuYXR0cihcInRyYW5zZm9ybVwiLHIudHJhbnNGbikuYXR0cihcImRcIixyLnBhdGgpLmNhbGwodS5zdHJva2UsZS5ncmlkY29sb3J8fFwiI2RkZFwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLGUuX2d3K1wicHhcIiksXCJmdW5jdGlvblwiPT10eXBlb2Ygci5wYXRoJiZjLmF0dHIoXCJkXCIsci5wYXRoKX0sVC5kcmF3WmVyb0xpbmU9ZnVuY3Rpb24odCxlLHIpe3I9cnx8cjt2YXIgbj1lLl9pZCtcInpsXCIsaT1ULnNob3VsZFNob3daZXJvTGluZSh0LGUsci5jb3VudGVyQXhpcyksYT1yLmxheWVyLnNlbGVjdEFsbChcInBhdGguXCIrbikuZGF0YShpP1t7eDowLGlkOmUuX2lkfV06W10pO2EuZXhpdCgpLnJlbW92ZSgpLGEuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQobiwxKS5jbGFzc2VkKFwiemxcIiwxKS5jbGFzc2VkKFwiY3Jpc3BcIiwhMSE9PXIuY3Jpc3ApLmVhY2goZnVuY3Rpb24oKXtyLmxheWVyLnNlbGVjdEFsbChcInBhdGhcIikuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBTLmlkU29ydCh0LmlkLGUuaWQpfSl9KSxhLmF0dHIoXCJ0cmFuc2Zvcm1cIixyLnRyYW5zRm4pLmF0dHIoXCJkXCIsci5wYXRoKS5jYWxsKHUuc3Ryb2tlLGUuemVyb2xpbmVjb2xvcnx8dS5kZWZhdWx0TGluZSkuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixoLmNyaXNwUm91bmQodCxlLnplcm9saW5ld2lkdGgsZS5fZ3d8fDEpK1wicHhcIil9LFQuZHJhd0xhYmVscz1mdW5jdGlvbih0LGUscil7cj1yfHx7fTt2YXIgYT1lLl9pZCxvPWEuY2hhckF0KDApLGM9ci5jbHN8fGErXCJ0aWNrXCIsdT1yLnZhbHMsZj1yLmxhYmVsRm5zLHA9ci5zZWNvbmRhcnk/MDplLnRpY2thbmdsZSxkPShlLl90aWNrQW5nbGVzfHx7fSlbY10sZz1yLmxheWVyLnNlbGVjdEFsbChcImcuXCIrYykuZGF0YShlLnNob3d0aWNrbGFiZWxzP3U6W10sVyksdj1bXTtmdW5jdGlvbiBtKHQsZSl7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBhPW4uc2VsZWN0KHRoaXMpLG89YS5zZWxlY3QoXCIudGV4dC1tYXRoLWdyb3VwXCIpLHM9Zi5hbmNob3JGbih0LGUpLGM9ci50cmFuc0ZuLmNhbGwoYS5ub2RlKCksdCkrKGkoZSkmJjAhPStlP1wiIHJvdGF0ZShcIitlK1wiLFwiK2YueEZuKHQpK1wiLFwiKyhmLnlGbih0KS10LmZvbnRTaXplLzIpK1wiKVwiOlwiXCIpLHU9bC5saW5lQ291bnQoYSkscD1BKnQuZm9udFNpemUsZD1mLmhlaWdodEZuKHQsaShlKT8rZTowLCh1LTEpKnApO2lmKGQmJihjKz1cIiB0cmFuc2xhdGUoMCwgXCIrZCtcIilcIiksby5lbXB0eSgpKWEuc2VsZWN0KFwidGV4dFwiKS5hdHRyKHt0cmFuc2Zvcm06YyxcInRleHQtYW5jaG9yXCI6c30pO2Vsc2V7dmFyIGc9aC5iQm94KG8ubm9kZSgpKS53aWR0aCp7ZW5kOi0uNSxzdGFydDouNX1bc107by5hdHRyKFwidHJhbnNmb3JtXCIsYysoZz9cInRyYW5zbGF0ZShcIitnK1wiLDApXCI6XCJcIikpfX0pfWcuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoYywxKS5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLFwibWlkZGxlXCIpLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksaT10Ll9wcm9taXNlcy5sZW5ndGg7ci5jYWxsKGwucG9zaXRpb25UZXh0LGYueEZuKGUpLGYueUZuKGUpKS5jYWxsKGguZm9udCxlLmZvbnQsZS5mb250U2l6ZSxlLmZvbnRDb2xvcikudGV4dChlLnRleHQpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsdCksdC5fcHJvbWlzZXNbaV0/di5wdXNoKHQuX3Byb21pc2VzLnBvcCgpLnRoZW4oZnVuY3Rpb24oKXttKHIscCl9KSk6bShyLHApfSksZy5leGl0KCkucmVtb3ZlKCksci5yZXBvc2l0aW9uT25VcGRhdGUmJmcuZWFjaChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5zZWxlY3QoXCJ0ZXh0XCIpLmNhbGwobC5wb3NpdGlvblRleHQsZi54Rm4odCksZi55Rm4odCkpfSksbShnLGR8fHApLGUuX3NlbGVjdGlvbnMmJihlLl9zZWxlY3Rpb25zW2NdPWcpO3ZhciB5PXMuc3luY09yQXN5bmMoW2Z1bmN0aW9uKCl7cmV0dXJuIHYubGVuZ3RoJiZQcm9taXNlLmFsbCh2KX0sZnVuY3Rpb24oKXttKGcscCk7dmFyIHQ9bnVsbDtpZih1Lmxlbmd0aCYmXCJ4XCI9PT1vJiYhaShwKSYmKFwibG9nXCIhPT1lLnR5cGV8fFwiRFwiIT09U3RyaW5nKGUuZHRpY2spLmNoYXJBdCgwKSkpe3Q9MDt2YXIgbixhPTAsbD1bXTtpZihnLmVhY2goZnVuY3Rpb24odCl7YT1NYXRoLm1heChhLHQuZm9udFNpemUpO3ZhciByPWUubDJwKHQueCksbj0kKHRoaXMpLGk9aC5iQm94KG4ubm9kZSgpKTtsLnB1c2goe3RvcDowLGJvdHRvbToxMCxoZWlnaHQ6MTAsbGVmdDpyLWkud2lkdGgvMixyaWdodDpyK2kud2lkdGgvMisyLHdpZHRoOmkud2lkdGgrMn0pfSksXCJib3VuZGFyaWVzXCIhPT1lLnRpY2tzb24mJiFlLnNob3dkaXZpZGVyc3x8ci5zZWNvbmRhcnkpe3ZhciBmPXUubGVuZ3RoLGQ9TWF0aC5hYnMoKHVbZi0xXS54LXVbMF0ueCkqZS5fbSkvKGYtMSk8Mi41KmF8fFwibXVsdGljYXRlZ29yeVwiPT09ZS50eXBlO2ZvcihuPTA7bjxsLmxlbmd0aC0xO24rKylpZihzLmJCb3hJbnRlcnNlY3QobFtuXSxsW24rMV0pKXt0PWQ/OTA6MzA7YnJlYWt9fWVsc2V7dmFyIHY9Mjtmb3IoZS50aWNrcyYmKHYrPWUudGlja3dpZHRoLzIpLG49MDtuPGwubGVuZ3RoO24rKyl7dmFyIHk9dVtuXS54Ym5kLHg9bFtuXTtpZihudWxsIT09eVswXSYmeC5sZWZ0LWUubDJwKHlbMF0pPHZ8fG51bGwhPT15WzFdJiZlLmwycCh5WzFdKS14LnJpZ2h0PHYpe3Q9OTA7YnJlYWt9fX10JiZtKGcsdCl9ZS5fdGlja0FuZ2xlcyYmKGUuX3RpY2tBbmdsZXNbY109bnVsbD09PXQ/aShwKT9wOjA6dCl9XSk7cmV0dXJuIHkmJnkudGhlbiYmdC5fcHJvbWlzZXMucHVzaCh5KSx5fSxULnNob3VsZFNob3daZXJvTGluZT1mdW5jdGlvbih0LGUscil7dmFyIG49cy5zaW1wbGVNYXAoZS5yYW5nZSxlLnIybCk7cmV0dXJuIG5bMF0qblsxXTw9MCYmZS56ZXJvbGluZSYmKFwibGluZWFyXCI9PT1lLnR5cGV8fFwiLVwiPT09ZS50eXBlKSYmZS5fZ3JpZFZhbHMubGVuZ3RoJiYoWihlLDApfHwhZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ci5fbWFpbkF4aXM7aWYoIWkpcmV0dXJuO3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz1lLl9pZC5jaGFyQXQoMCkscz1ULmNvdW50ZXJMZXR0ZXIoZS5faWQpLGw9ZS5fb2Zmc2V0KyhNYXRoLmFicyhuWzBdKTxNYXRoLmFicyhuWzFdKT09KFwieFwiPT09byk/MDplLl9sZW5ndGgpO2Z1bmN0aW9uIGModCl7aWYoIXQuc2hvd2xpbmV8fCF0LmxpbmV3aWR0aClyZXR1cm4hMTt2YXIgcj1NYXRoLm1heCgodC5saW5ld2lkdGgrZS56ZXJvbGluZXdpZHRoKS8yLDEpO2Z1bmN0aW9uIG4odCl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIHQmJk1hdGguYWJzKHQtbCk8cn1pZihuKHQuX21haW5MaW5lUG9zaXRpb24pfHxuKHQuX21haW5NaXJyb3JQb3NpdGlvbikpcmV0dXJuITA7dmFyIGk9dC5fbGluZXBvc2l0aW9uc3x8e307Zm9yKHZhciBhIGluIGkpaWYobihpW2FdWzBdKXx8bihpW2FdWzFdKSlyZXR1cm4hMH12YXIgdT1hLl9wbG90c1tyLl9tYWluU3VicGxvdF07aWYoISh1Lm1haW5wbG90aW5mb3x8dSkub3ZlcmxheXMubGVuZ3RoKXJldHVybiBjKHIpO2Zvcih2YXIgaD1ULmxpc3QodCxzKSxmPTA7ZjxoLmxlbmd0aDtmKyspe3ZhciBwPWhbZl07aWYocC5fbWFpbkF4aXM9PT1pJiZjKHApKXJldHVybiEwfX0odCxlLHIsbil8fGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuX2Z1bGxEYXRhLG49ZS5fbWFpblN1YnBsb3QsaT1lLl9pZC5jaGFyQXQoMCksYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgcz1yW2FdO2lmKCEwPT09cy52aXNpYmxlJiZzLnhheGlzK3MueWF4aXM9PT1uKXtpZigoby50cmFjZUlzKHMsXCJiYXJcIil8fFwid2F0ZXJmYWxsXCI9PT1zLnR5cGUpJiZzLm9yaWVudGF0aW9uPT09e3g6XCJoXCIseTpcInZcIn1baV0pcmV0dXJuITA7aWYocy5maWxsJiZzLmZpbGwuY2hhckF0KHMuZmlsbC5sZW5ndGgtMSk9PT1pKXJldHVybiEwfX1yZXR1cm4hMX0odCxlKSl9LFQuY2xpcEVuZHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIFoodCxlLngpfSl9LFQuYWxsb3dBdXRvTWFyZ2luPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1ULmxpc3QodCxcIlwiLCEwKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5hdXRvbWFyZ2luJiZhLmFsbG93QXV0b01hcmdpbih0LEoobikpLG8uZ2V0Q29tcG9uZW50TWV0aG9kKFwicmFuZ2VzbGlkZXJcIixcImlzVmlzaWJsZVwiKShuKSYmYS5hbGxvd0F1dG9NYXJnaW4odCxLKG4pKX19LFQuc3dhcD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1mdW5jdGlvbih0LGUpe3ZhciByLG4saT1bXTtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgYT1bXSxvPXQuX2Z1bGxEYXRhW2Vbcl1dLnhheGlzLHM9dC5fZnVsbERhdGFbZVtyXV0ueWF4aXM7aWYobyYmcyl7Zm9yKG49MDtuPGkubGVuZ3RoO24rKyktMT09PWlbbl0ueC5pbmRleE9mKG8pJiYtMT09PWlbbl0ueS5pbmRleE9mKHMpfHxhLnB1c2gobik7aWYoYS5sZW5ndGgpe3ZhciBsLGM9aVthWzBdXTtpZihhLmxlbmd0aD4xKWZvcihuPTE7bjxhLmxlbmd0aDtuKyspbD1pW2Fbbl1dLFEoYy54LGwueCksUShjLnksbC55KTtRKGMueCxbb10pLFEoYy55LFtzXSl9ZWxzZSBpLnB1c2goe3g6W29dLHk6W3NdfSl9fXJldHVybiBpfSh0LGUpLG49MDtuPHIubGVuZ3RoO24rKyl0dCh0LHJbbl0ueCxyW25dLnkpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzXCI6NjY2LFwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiOjY3MyxcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIjo3MjUsXCIuLi8uLi9wbG90cy9wbG90c1wiOjgxMCxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9hdXRvcmFuZ2VcIjo3NDgsXCIuL2F4aXNfYXV0b3R5cGVcIjo3NTAsXCIuL2F4aXNfaWRzXCI6NzUyLFwiLi9jbGVhbl90aWNrc1wiOjc1NCxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo3NjEsXCIuL3NldF9jb252ZXJ0XCI6NzY3LGQzOjE1NSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sNzUwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiEocj1yfHx7fSkubm9NdWx0aUNhdGVnb3J5JiYobz10LGkuaXNBcnJheU9yVHlwZWRBcnJheShvWzBdKSYmaS5pc0FycmF5T3JUeXBlZEFycmF5KG9bMV0pKT9cIm11bHRpY2F0ZWdvcnlcIjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1NYXRoLm1heCgxLCh0Lmxlbmd0aC0xKS8xZTMpLGE9MCxvPTAscz17fSxsPTA7bDx0Lmxlbmd0aDtsKz1yKXt2YXIgYz10W01hdGgucm91bmQobCldLHU9U3RyaW5nKGMpO3NbdV18fChzW3VdPTEsaS5pc0RhdGVUaW1lKGMsZSkmJihhKz0xKSxuKGMpJiYobys9MSkpfXJldHVybiBhPjIqb30odCxlKT9cImRhdGVcIjpmdW5jdGlvbih0KXtmb3IodmFyIGU9TWF0aC5tYXgoMSwodC5sZW5ndGgtMSkvMWUzKSxyPTAsbj0wLG89e30scz0wO3M8dC5sZW5ndGg7cys9ZSl7dmFyIGw9dFtNYXRoLnJvdW5kKHMpXSxjPVN0cmluZyhsKTtvW2NdfHwob1tjXT0xLFwiYm9vbGVhblwiPT10eXBlb2YgbD9uKys6aS5jbGVhbk51bWJlcihsKSE9PWE/cisrOlwic3RyaW5nXCI9PXR5cGVvZiBsJiZuKyspfXJldHVybiBuPjIqcn0odCk/XCJjYXRlZ29yeVwiOmZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiExO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKG4odFtlXSkpcmV0dXJuITA7cmV0dXJuITF9KHQpP1wibGluZWFyXCI6XCItXCI7dmFyIG99fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vbGliXCI6NzAxLFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw3NTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksbz10KFwiLi90aWNrX3ZhbHVlX2RlZmF1bHRzXCIpLHM9dChcIi4vdGlja19tYXJrX2RlZmF1bHRzXCIpLGw9dChcIi4vdGlja19sYWJlbF9kZWZhdWx0c1wiKSxjPXQoXCIuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzXCIpLHU9dChcIi4vbGluZV9ncmlkX2RlZmF1bHRzXCIpLGg9dChcIi4vc2V0X2NvbnZlcnRcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYscCl7dmFyIGQ9Zi5sZXR0ZXIsZz1mLmZvbnR8fHt9LHY9Zi5zcGxvbVN0YXNofHx7fSxtPXIoXCJ2aXNpYmxlXCIsIWYuY2hlYXRlcm9ubHkpLHk9ZS50eXBlO1wiZGF0ZVwiPT09eSYmbi5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcImhhbmRsZURlZmF1bHRzXCIpKHQsZSxcImNhbGVuZGFyXCIsZi5jYWxlbmRhcik7aWYoaChlLHApLCFyKFwiYXV0b3JhbmdlXCIsIWUuaXNWYWxpZFJhbmdlKHQucmFuZ2UpKXx8XCJsaW5lYXJcIiE9PXkmJlwiLVwiIT09eXx8cihcInJhbmdlbW9kZVwiKSxyKFwicmFuZ2VcIiksZS5jbGVhblJhbmdlKCksYyh0LGUscixmKSxcImNhdGVnb3J5XCI9PT15fHxmLm5vSG92ZXJ8fHIoXCJob3ZlcmZvcm1hdFwiKSwhbSlyZXR1cm4gZTt2YXIgeD1yKFwiY29sb3JcIiksYj14IT09YS5jb2xvci5kZmx0P3g6Zy5jb2xvcjtyKFwidGl0bGUudGV4dFwiLHYubGFiZWx8fHAuX2RmbHRUaXRsZVtkXSksaS5jb2VyY2VGb250KHIsXCJ0aXRsZS5mb250XCIse2ZhbWlseTpnLmZhbWlseSxzaXplOk1hdGgucm91bmQoMS4yKmcuc2l6ZSksY29sb3I6Yn0pLG8odCxlLHIseSksbCh0LGUscix5LGYpLHModCxlLHIsZiksdSh0LGUscix7ZGZsdENvbG9yOngsYmdDb2xvcjpmLmJnQ29sb3Isc2hvd0dyaWQ6Zi5zaG93R3JpZCxhdHRyaWJ1dGVzOmF9KSwoZS5zaG93bGluZXx8ZS50aWNrcykmJnIoXCJtaXJyb3JcIiksZi5hdXRvbWFyZ2luJiZyKFwiYXV0b21hcmdpblwiKTt2YXIgXyx3PVwibXVsdGljYXRlZ29yeVwiPT09ZS50eXBlO2Yubm9UaWNrc29ufHxcImNhdGVnb3J5XCIhPT1lLnR5cGUmJiF3fHwhZS50aWNrcyYmIWUuc2hvd2dyaWR8fCh3JiYoXz1cImJvdW5kYXJpZXNcIikscihcInRpY2tzb25cIixfKSk7dyYmKHIoXCJzaG93ZGl2aWRlcnNcIikmJihyKFwiZGl2aWRlcmNvbG9yXCIpLHIoXCJkaXZpZGVyd2lkdGhcIikpKTtyZXR1cm4gZX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0c1wiOjc1MyxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo3NjEsXCIuL2xpbmVfZ3JpZF9kZWZhdWx0c1wiOjc2MyxcIi4vc2V0X2NvbnZlcnRcIjo3NjcsXCIuL3RpY2tfbGFiZWxfZGVmYXVsdHNcIjo3NjgsXCIuL3RpY2tfbWFya19kZWZhdWx0c1wiOjc2OSxcIi4vdGlja192YWx1ZV9kZWZhdWx0c1wiOjc3MH1dLDc1MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxpPXQoXCIuL2NvbnN0YW50c1wiKTtyLmlkMm5hbWU9ZnVuY3Rpb24odCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQmJnQubWF0Y2goaS5BWF9JRF9QQVRURVJOKSl7dmFyIGU9dC5zdWJzdHIoMSk7cmV0dXJuXCIxXCI9PT1lJiYoZT1cIlwiKSx0LmNoYXJBdCgwKStcImF4aXNcIitlfX0sci5uYW1lMmlkPWZ1bmN0aW9uKHQpe2lmKHQubWF0Y2goaS5BWF9OQU1FX1BBVFRFUk4pKXt2YXIgZT10LnN1YnN0cig1KTtyZXR1cm5cIjFcIj09PWUmJihlPVwiXCIpLHQuY2hhckF0KDApK2V9fSxyLmNsZWFuSWQ9ZnVuY3Rpb24odCxlKXtpZih0Lm1hdGNoKGkuQVhfSURfUEFUVEVSTikmJighZXx8dC5jaGFyQXQoMCk9PT1lKSl7dmFyIHI9dC5zdWJzdHIoMSkucmVwbGFjZSgvXjArLyxcIlwiKTtyZXR1cm5cIjFcIj09PXImJihyPVwiXCIpLHQuY2hhckF0KDApK3J9fSxyLmxpc3Q9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXQuX2Z1bGxMYXlvdXQ7aWYoIWkpcmV0dXJuW107dmFyIGEsbz1yLmxpc3RJZHModCxlKSxzPW5ldyBBcnJheShvLmxlbmd0aCk7Zm9yKGE9MDthPG8ubGVuZ3RoO2ErKyl7dmFyIGw9b1thXTtzW2FdPWlbbC5jaGFyQXQoMCkrXCJheGlzXCIrbC5zdWJzdHIoMSldfWlmKCFuKXt2YXIgYz1pLl9zdWJwbG90cy5nbDNkfHxbXTtmb3IoYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgdT1pW2NbYV1dO2U/cy5wdXNoKHVbZStcImF4aXNcIl0pOnMucHVzaCh1LnhheGlzLHUueWF4aXMsdS56YXhpcyl9fXJldHVybiBzfSxyLmxpc3RJZHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0O2lmKCFyKXJldHVybltdO3ZhciBuPXIuX3N1YnBsb3RzO3JldHVybiBlP25bZStcImF4aXNcIl06bi54YXhpcy5jb25jYXQobi55YXhpcyl9LHIuZ2V0RnJvbUlkPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10Ll9mdWxsTGF5b3V0O3JldHVyblwieFwiPT09bj9lPWUucmVwbGFjZSgveVswLTldKi8sXCJcIik6XCJ5XCI9PT1uJiYoZT1lLnJlcGxhY2UoL3hbMC05XSovLFwiXCIpKSxpW3IuaWQybmFtZShlKV19LHIuZ2V0RnJvbVRyYWNlPWZ1bmN0aW9uKHQsZSxpKXt2YXIgYT10Ll9mdWxsTGF5b3V0LG89bnVsbDtpZihuLnRyYWNlSXMoZSxcImdsM2RcIikpe3ZhciBzPWUuc2NlbmU7XCJzY2VuZVwiPT09cy5zdWJzdHIoMCw1KSYmKG89YVtzXVtpK1wiYXhpc1wiXSl9ZWxzZSBvPXIuZ2V0RnJvbUlkKHQsZVtpK1wiYXhpc1wiXXx8aSk7cmV0dXJuIG99LHIuaWRTb3J0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5jaGFyQXQoMCksbj1lLmNoYXJBdCgwKTtyZXR1cm4gciE9PW4/cj5uPzE6LTE6Kyh0LnN1YnN0cigxKXx8MSktKyhlLnN1YnN0cigxKXx8MSl9LHIuZ2V0QXhpc0dyb3VwPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuX2F4aXNNYXRjaEdyb3VwcyxuPTA7bjxyLmxlbmd0aDtuKyspe2lmKHJbbl1bZV0pcmV0dXJuXCJnXCIrbn1yZXR1cm4gZX19LHtcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9jb25zdGFudHNcIjo3NTV9XSw3NTM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7aWYoXCJjYXRlZ29yeVwiPT09ZS50eXBlKXt2YXIgaSxhPXQuY2F0ZWdvcnlhcnJheSxvPUFycmF5LmlzQXJyYXkoYSkmJmEubGVuZ3RoPjA7byYmKGk9XCJhcnJheVwiKTt2YXIgcyxsPXIoXCJjYXRlZ29yeW9yZGVyXCIsaSk7XCJhcnJheVwiPT09bCYmKHM9cihcImNhdGVnb3J5YXJyYXlcIikpLG98fFwiYXJyYXlcIiE9PWx8fChsPWUuY2F0ZWdvcnlvcmRlcj1cInRyYWNlXCIpLFwidHJhY2VcIj09PWw/ZS5faW5pdGlhbENhdGVnb3JpZXM9W106XCJhcnJheVwiPT09bD9lLl9pbml0aWFsQ2F0ZWdvcmllcz1zLnNsaWNlKCk6KHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT1lLmRhdGFBdHRyfHx0Ll9pZC5jaGFyQXQoMCksbz17fTtpZihlLmF4RGF0YSlyPWUuYXhEYXRhO2Vsc2UgZm9yKHI9W10sbj0wO248ZS5kYXRhLmxlbmd0aDtuKyspe3ZhciBzPWUuZGF0YVtuXTtzW2ErXCJheGlzXCJdPT09dC5faWQmJnIucHVzaChzKX1mb3Iobj0wO248ci5sZW5ndGg7bisrKXt2YXIgbD1yW25dW2FdO2ZvcihpPTA7aTxsLmxlbmd0aDtpKyspe3ZhciBjPWxbaV07bnVsbCE9YyYmKG9bY109MSl9fXJldHVybiBPYmplY3Qua2V5cyhvKX0oZSxuKS5zb3J0KCksXCJjYXRlZ29yeSBhc2NlbmRpbmdcIj09PWw/ZS5faW5pdGlhbENhdGVnb3JpZXM9czpcImNhdGVnb3J5IGRlc2NlbmRpbmdcIj09PWwmJihlLl9pbml0aWFsQ2F0ZWdvcmllcz1zLnJldmVyc2UoKSkpfX19LHt9XSw3NTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuT05FREFZO3IuZHRpY2s9ZnVuY3Rpb24odCxlKXt2YXIgcj1cImxvZ1wiPT09ZSxpPVwiZGF0ZVwiPT09ZSxvPVwiY2F0ZWdvcnlcIj09PWUscz1pP2E6MTtpZighdClyZXR1cm4gcztpZihuKHQpKXJldHVybih0PU51bWJlcih0KSk8PTA/czpvP01hdGgubWF4KDEsTWF0aC5yb3VuZCh0KSk6aT9NYXRoLm1heCguMSx0KTp0O2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0fHwhaSYmIXIpcmV0dXJuIHM7dmFyIGw9dC5jaGFyQXQoMCksYz10LnN1YnN0cigxKTtyZXR1cm4oYz1uKGMpP051bWJlcihjKTowKTw9MHx8IShpJiZcIk1cIj09PWwmJmM9PT1NYXRoLnJvdW5kKGMpfHxyJiZcIkxcIj09PWx8fHImJlwiRFwiPT09bCYmKDE9PT1jfHwyPT09YykpP3M6dH0sci50aWNrMD1mdW5jdGlvbih0LGUscixhKXtyZXR1cm5cImRhdGVcIj09PWU/aS5jbGVhbkRhdGUodCxpLmRhdGVUaWNrMChyKSk6XCJEMVwiIT09YSYmXCJEMlwiIT09YT9uKHQpP051bWJlcih0KTowOnZvaWQgMH19LHtcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDc1NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWIvcmVnZXhcIikuY291bnRlcjtlLmV4cG9ydHM9e2lkUmVnZXg6e3g6bihcInhcIikseTpuKFwieVwiKX0sYXR0clJlZ2V4Om4oXCJbeHldYXhpc1wiKSx4QXhpc01hdGNoOm4oXCJ4YXhpc1wiKSx5QXhpc01hdGNoOm4oXCJ5YXhpc1wiKSxBWF9JRF9QQVRURVJOOi9eW3h5el1bMC05XSokLyxBWF9OQU1FX1BBVFRFUk46L15beHl6XWF4aXNbMC05XSokLyxTVUJQTE9UX1BBVFRFUk46L154KFswLTldKil5KFswLTldKikkLyxNSU5EUkFHOjgsTUlOU0VMRUNUOjEyLE1JTlpPT006MjAsRFJBR0dFUlNJWkU6MjAsQkVORFBYOjEuNSxSRURSQVdERUxBWTo1MCxTRUxFQ1RERUxBWToxMDAsU0VMRUNUSUQ6XCItc2VsZWN0XCIsREZMVFJBTkdFWDpbLTEsNl0sREZMVFJBTkdFWTpbLTEsNF0sdHJhY2VMYXllckNsYXNzZXM6W1wiaGVhdG1hcGxheWVyXCIsXCJjb250b3VyY2FycGV0bGF5ZXJcIixcImNvbnRvdXJsYXllclwiLFwid2F0ZXJmYWxsbGF5ZXJcIixcImJhcmxheWVyXCIsXCJjYXJwZXRsYXllclwiLFwidmlvbGlubGF5ZXJcIixcImJveGxheWVyXCIsXCJvaGxjbGF5ZXJcIixcInNjYXR0ZXJjYXJwZXRsYXllclwiLFwic2NhdHRlcmxheWVyXCJdLGxheWVyVmFsdWUybGF5ZXJDbGFzczp7XCJhYm92ZSB0cmFjZXNcIjpcImFib3ZlXCIsXCJiZWxvdyB0cmFjZXNcIjpcImJlbG93XCJ9fX0se1wiLi4vLi4vbGliL3JlZ2V4XCI6NzE3fV0sNzU2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2F4aXNfaWRzXCIpLmlkMm5hbWUsYT10KFwiLi9zY2FsZV96b29tXCIpLG89dChcIi4vYXV0b3JhbmdlXCIpLm1ha2VQYWRGbixzPXQoXCIuL2F1dG9yYW5nZVwiKS5jb25jYXRFeHRyZW1lcyxsPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkFMTU9TVF9FUVVBTCxjPXQoXCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCIpLkZST01fQkw7ZnVuY3Rpb24gdSh0LGUscixuLGEpe3ZhciBvLHMsbCxjLHU9XCJyYW5nZVwiIT09YSxoPW5baShlKV0udHlwZSxmPVtdO2ZvcihzPTA7czxyLmxlbmd0aDtzKyspaWYoKGw9cltzXSkhPT1lJiYoYz1uW2kobCldKS50eXBlPT09aClpZihjLmZpeGVkcmFuZ2Upe2lmKHUmJmMuYW5jaG9yKXtuW2koYy5hbmNob3IpXS5maXhlZHJhbmdlJiZmLnB1c2gobCl9fWVsc2UgZi5wdXNoKGwpO2ZvcihvPTA7bzx0Lmxlbmd0aDtvKyspaWYodFtvXVtlXSl7dmFyIHA9dFtvXSxkPVtdO2ZvcihzPTA7czxmLmxlbmd0aDtzKyspcFtsPWZbc11dfHxkLnB1c2gobCk7cmV0dXJue2xpbmthYmxlQXhlczpkLHRoaXNHcm91cDpwfX1yZXR1cm57bGlua2FibGVBeGVzOmYsdGhpc0dyb3VwOm51bGx9fWZ1bmN0aW9uIGgodCxlLHIsbixpKXt2YXIgYSxvLHMsbCxjO251bGw9PT1lPygoZT17fSlbcl09MSxjPXQubGVuZ3RoLHQucHVzaChlKSk6Yz10LmluZGV4T2YoZSk7dmFyIHU9T2JqZWN0LmtleXMoZSk7Zm9yKGE9MDthPHQubGVuZ3RoO2ErKylpZihzPXRbYV0sYSE9PWMmJnNbbl0pe3ZhciBoPXNbbl07Zm9yKG89MDtvPHUubGVuZ3RoO28rKylzW2w9dVtvXV09aCppKmVbbF07cmV0dXJuIHZvaWQgdC5zcGxpY2UoYywxKX1pZigxIT09aSlmb3Iobz0wO288dS5sZW5ndGg7bysrKWVbdVtvXV0qPWk7ZVtuXT0xfWZ1bmN0aW9uIGYodCxlKXt2YXIgcj10Ll9pbnB1dERvbWFpbixuPWNbdC5jb25zdHJhaW50b3dhcmRdLGk9clswXSsoclsxXS1yWzBdKSpuO3QuZG9tYWluPXQuX2lucHV0LmRvbWFpbj1baSsoclswXS1pKS9lLGkrKHJbMV0taSkvZV0sdC5zZXRTY2FsZSgpfXIuaGFuZGxlQ29uc3RyYWludERlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyLGksYSl7dmFyIG8scyxsLGMsZj1hLl9heGlzQ29uc3RyYWludEdyb3VwcyxwPWEuX2F4aXNNYXRjaEdyb3VwcyxkPWUuX2lkLGc9ZC5jaGFyQXQoMCksdj0oKGEuX3NwbG9tQXhlc3x8e30pW2ddfHx7fSlbZF18fHt9LG09ZS5faWQseT1tLmNoYXJBdCgwKSx4PXIoXCJjb25zdHJhaW5cIik7aWYobi5jb2VyY2UodCxlLHtjb25zdHJhaW50b3dhcmQ6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOlwieFwiPT09eT9bXCJsZWZ0XCIsXCJjZW50ZXJcIixcInJpZ2h0XCJdOltcImJvdHRvbVwiLFwibWlkZGxlXCIsXCJ0b3BcIl0sZGZsdDpcInhcIj09PXk/XCJjZW50ZXJcIjpcIm1pZGRsZVwifX0sXCJjb25zdHJhaW50b3dhcmRcIiksIXQubWF0Y2hlcyYmIXYubWF0Y2hlc3x8ZS5maXhlZHJhbmdlfHwocz11KHAsbSxpLGEpLG89bi5jb2VyY2UodCxlLHttYXRjaGVzOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpzLmxpbmthYmxlQXhlc3x8W10sZGZsdDp2Lm1hdGNoZXN9fSxcIm1hdGNoZXNcIikpLG98fCF0LnNjYWxlYW5jaG9yfHxlLmZpeGVkcmFuZ2UmJlwiZG9tYWluXCIhPT14fHwoYz11KGYsbSxpLGEseCksbD1uLmNvZXJjZSh0LGUse3NjYWxlYW5jaG9yOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpjLmxpbmthYmxlQXhlc3x8W119fSxcInNjYWxlYW5jaG9yXCIpKSxvPyhkZWxldGUgZS5jb25zdHJhaW4saChwLHMudGhpc0dyb3VwLG0sbywxKSk6LTEhPT1pLmluZGV4T2YodC5tYXRjaGVzKSYmbi53YXJuKFwiaWdub3JlZCBcIitlLl9uYW1lKycubWF0Y2hlczogXCInK3QubWF0Y2hlcysnXCIgdG8gYXZvaWQgZWl0aGVyIGFuIGluZmluaXRlIGxvb3Agb3IgYmVjYXVzZSB0aGUgdGFyZ2V0IGF4aXMgaGFzIGZpeGVkIHJhbmdlLicpLGwpe3ZhciBiPXIoXCJzY2FsZXJhdGlvXCIpO2J8fChiPWUuc2NhbGVyYXRpbz0xKSxoKGYsYy50aGlzR3JvdXAsbSxsLGIpfWVsc2UtMSE9PWkuaW5kZXhPZih0LnNjYWxlYW5jaG9yKSYmbi53YXJuKFwiaWdub3JlZCBcIitlLl9uYW1lKycuc2NhbGVhbmNob3I6IFwiJyt0LnNjYWxlYW5jaG9yKydcIiB0byBhdm9pZCBlaXRoZXIgYW4gaW5maW5pdGUgbG9vcCBhbmQgcG9zc2libHkgaW5jb25zaXN0ZW50IHNjYWxlcmF0aW9zLCBvciBiZWNhdXNlIHRoZSB0YXJnZXQgYXhpcyBoYXMgZml4ZWQgcmFuZ2Ugb3IgdGhpcyBheGlzIGRlY2xhcmVzIGEgKm1hdGNoZXMqIGNvbnN0cmFpbnQuJyl9LHIuZW5mb3JjZT1mdW5jdGlvbih0KXt2YXIgZSxyLG4sYyx1LGgscCxkPXQuX2Z1bGxMYXlvdXQsZz1kLl9heGlzQ29uc3RyYWludEdyb3Vwc3x8W107Zm9yKGU9MDtlPGcubGVuZ3RoO2UrKyl7dmFyIHY9Z1tlXSxtPU9iamVjdC5rZXlzKHYpLHk9MS8wLHg9MCxiPTEvMCxfPXt9LHc9e30saz0hMTtmb3Iocj0wO3I8bS5sZW5ndGg7cisrKXdbbj1tW3JdXT1jPWRbaShuKV0sYy5faW5wdXREb21haW4/Yy5kb21haW49Yy5faW5wdXREb21haW4uc2xpY2UoKTpjLl9pbnB1dERvbWFpbj1jLmRvbWFpbi5zbGljZSgpLGMuX2lucHV0UmFuZ2V8fChjLl9pbnB1dFJhbmdlPWMucmFuZ2Uuc2xpY2UoKSksYy5zZXRTY2FsZSgpLF9bbl09dT1NYXRoLmFicyhjLl9tKS92W25dLHk9TWF0aC5taW4oeSx1KSxcImRvbWFpblwiIT09Yy5jb25zdHJhaW4mJmMuX2NvbnN0cmFpbnRTaHJpbmthYmxlfHwoYj1NYXRoLm1pbihiLHUpKSxkZWxldGUgYy5fY29uc3RyYWludFNocmlua2FibGUseD1NYXRoLm1heCh4LHUpLFwiZG9tYWluXCI9PT1jLmNvbnN0cmFpbiYmKGs9ITApO2lmKCEoeT5sKngpfHxrKWZvcihyPTA7cjxtLmxlbmd0aDtyKyspaWYodT1fW249bVtyXV0saD0oYz13W25dKS5jb25zdHJhaW4sdSE9PWJ8fFwiZG9tYWluXCI9PT1oKWlmKHA9dS9iLFwicmFuZ2VcIj09PWgpYShjLHApO2Vsc2V7dmFyIEE9Yy5faW5wdXREb21haW4sVD0oYy5kb21haW5bMV0tYy5kb21haW5bMF0pLyhBWzFdLUFbMF0pLE09KGMucjJsKGMucmFuZ2VbMV0pLWMucjJsKGMucmFuZ2VbMF0pKS8oYy5yMmwoYy5faW5wdXRSYW5nZVsxXSktYy5yMmwoYy5faW5wdXRSYW5nZVswXSkpO2lmKChwLz1UKSpNPDEpe2MuZG9tYWluPWMuX2lucHV0LmRvbWFpbj1BLnNsaWNlKCksYShjLHApO2NvbnRpbnVlfWlmKE08MSYmKGMucmFuZ2U9Yy5faW5wdXQucmFuZ2U9Yy5faW5wdXRSYW5nZS5zbGljZSgpLHAqPU0pLGMuYXV0b3JhbmdlKXt2YXIgUz1jLnIybChjLnJhbmdlWzBdKSxFPWMucjJsKGMucmFuZ2VbMV0pLEM9KFMrRSkvMixMPUMsej1DLE89TWF0aC5hYnMoRS1DKSxJPUMtTypwKjEuMDAwMSxEPUMrTypwKjEuMDAwMSxQPW8oYyk7ZihjLHApO3ZhciBSLEYsQj1NYXRoLmFicyhjLl9tKSxOPXModCxjKSxqPU4ubWluLFY9Ti5tYXg7Zm9yKEY9MDtGPGoubGVuZ3RoO0YrKykoUj1qW0ZdLnZhbC1QKGpbRl0pL0IpPkkmJlI8TCYmKEw9Uik7Zm9yKEY9MDtGPFYubGVuZ3RoO0YrKykoUj1WW0ZdLnZhbCtQKFZbRl0pL0IpPEQmJlI+eiYmKHo9Uik7cC89KHotTCkvKDIqTyksTD1jLmwycihMKSx6PWMubDJyKHopLGMucmFuZ2U9Yy5faW5wdXQucmFuZ2U9UzxFP1tMLHpdOlt6LExdfWYoYyxwKX19fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSl7aWYoZS5faW5wdXREb21haW4pe2Zvcih2YXIgcj0hMSxuPWUuX2lkLGk9dC5fZnVsbExheW91dC5fYXhpc0NvbnN0cmFpbnRHcm91cHMsYT0wO2E8aS5sZW5ndGg7YSsrKWlmKGlbYV1bbl0pe3I9ITA7YnJlYWt9ciYmXCJkb21haW5cIj09PWUuY29uc3RyYWlufHwoZS5faW5wdXQuZG9tYWluPWUuZG9tYWluPWUuX2lucHV0RG9tYWluLGRlbGV0ZSBlLl9pbnB1dERvbWFpbil9fX0se1wiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiOjY3MyxcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuL2F1dG9yYW5nZVwiOjc0OCxcIi4vYXhpc19pZHNcIjo3NTIsXCIuL3NjYWxlX3pvb21cIjo3NjV9XSw3NTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwidGlueWNvbG9yMlwiKSxhPXQoXCJoYXMtcGFzc2l2ZS1ldmVudHNcIiksbz10KFwiLi4vLi4vcmVnaXN0cnlcIikscz10KFwiLi4vLi4vbGliXCIpLGw9dChcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiKSxjPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLHU9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxoPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4XCIpLGY9dChcIi4vYXhlc1wiKSxwPXQoXCIuLi8uLi9saWIvc2V0Y3Vyc29yXCIpLGQ9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnRcIiksZz10KFwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiKS5GUk9NX1RMLHY9dChcIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlc1wiKSxtPXQoXCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lc1wiKS5yZWRyYXdSZWdsVHJhY2VzLHk9dChcIi4uL3Bsb3RzXCIpLHg9dChcIi4vYXhpc19pZHNcIikuZ2V0RnJvbUlkLGI9dChcIi4vc2VsZWN0XCIpLnByZXBTZWxlY3QsXz10KFwiLi9zZWxlY3RcIikuY2xlYXJTZWxlY3Qsdz10KFwiLi9zZWxlY3RcIikuc2VsZWN0T25DbGljayxrPXQoXCIuL3NjYWxlX3pvb21cIiksQT10KFwiLi9jb25zdGFudHNcIiksVD1BLk1JTkRSQUcsTT1BLk1JTlpPT00sUz0hMDtmdW5jdGlvbiBFKHQsZSxyLG4pe3ZhciBpPXMuZW5zdXJlU2luZ2xlKHQuZHJhZ2xheWVyLGUscixmdW5jdGlvbihlKXtlLmNsYXNzZWQoXCJkcmFnXCIsITApLnN0eWxlKHtmaWxsOlwidHJhbnNwYXJlbnRcIixcInN0cm9rZS13aWR0aFwiOjB9KS5hdHRyKFwiZGF0YS1zdWJwbG90XCIsdC5pZCl9KTtyZXR1cm4gaS5jYWxsKHAsbiksaS5ub2RlKCl9ZnVuY3Rpb24gQyh0LGUscixpLGEsbyxzKXt2YXIgbD1FKHQsXCJyZWN0XCIsZSxyKTtyZXR1cm4gbi5zZWxlY3QobCkuY2FsbCh1LnNldFJlY3QsaSxhLG8scyksbH1mdW5jdGlvbiBMKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspaWYoIXRbcl0uZml4ZWRyYW5nZSlyZXR1cm4gZTtyZXR1cm5cIlwifWZ1bmN0aW9uIHoodCxlLHIsbixpKXtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89dFthXTtpZighby5maXhlZHJhbmdlKXt2YXIgcz1vLl9ybFswXSxsPW8uX3JsWzFdLXM7by5yYW5nZT1bby5sMnIocytsKmUpLG8ubDJyKHMrbCpyKV0sbltvLl9uYW1lK1wiLnJhbmdlWzBdXCJdPW8ucmFuZ2VbMF0sbltvLl9uYW1lK1wiLnJhbmdlWzFdXCJdPW8ucmFuZ2VbMV19fWlmKGkmJmkubGVuZ3RoKXt2YXIgYz0oZSsoMS1yKSkvMjt6KGksYywxLWMsbixbXSl9fWZ1bmN0aW9uIE8odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmZpeGVkcmFuZ2V8fChuLnJhbmdlPVtuLmwycihuLl9ybFswXS1lL24uX20pLG4ubDJyKG4uX3JsWzFdLWUvbi5fbSldKX19ZnVuY3Rpb24gSSh0KXtyZXR1cm4gMS0odD49MD9NYXRoLm1pbih0LC45KToxLygxL01hdGgubWF4KHQsLS4zKSszLjIyMikpfWZ1bmN0aW9uIEQodCxlLHIsbixpKXtyZXR1cm4gdC5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJjbGFzc1wiLFwiem9vbWJveFwiKS5zdHlsZSh7ZmlsbDplPi4yP1wicmdiYSgwLDAsMCwwKVwiOlwicmdiYSgyNTUsMjU1LDI1NSwwKVwiLFwic3Ryb2tlLXdpZHRoXCI6MH0pLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIityK1wiLCBcIituK1wiKVwiKS5hdHRyKFwiZFwiLGkrXCJaXCIpfWZ1bmN0aW9uIFAodCxlLHIpe3JldHVybiB0LmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsXCJ6b29tYm94LWNvcm5lcnNcIikuc3R5bGUoe2ZpbGw6Yy5iYWNrZ3JvdW5kLHN0cm9rZTpjLmRlZmF1bHRMaW5lLFwic3Ryb2tlLXdpZHRoXCI6MSxvcGFjaXR5OjB9KS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrZStcIiwgXCIrcitcIilcIikuYXR0cihcImRcIixcIk0wLDBaXCIpfWZ1bmN0aW9uIFIodCxlLHIsbixpLGEpe3QuYXR0cihcImRcIixuK1wiTVwiK3IubCtcIixcIityLnQrXCJ2XCIrci5oK1wiaFwiK3IudytcInYtXCIrci5oK1wiaC1cIityLncrXCJaXCIpLEYodCxlLGksYSl9ZnVuY3Rpb24gRih0LGUscixuKXtyfHwodC50cmFuc2l0aW9uKCkuc3R5bGUoXCJmaWxsXCIsbj4uMj9cInJnYmEoMCwwLDAsMC40KVwiOlwicmdiYSgyNTUsMjU1LDI1NSwwLjMpXCIpLmR1cmF0aW9uKDIwMCksZS50cmFuc2l0aW9uKCkuc3R5bGUoXCJvcGFjaXR5XCIsMSkuZHVyYXRpb24oMjAwKSl9ZnVuY3Rpb24gQih0KXtuLnNlbGVjdCh0KS5zZWxlY3RBbGwoXCIuem9vbWJveCwuanMtem9vbWJveC1iYWNrZHJvcCwuanMtem9vbWJveC1tZW51LC56b29tYm94LWNvcm5lcnNcIikucmVtb3ZlKCl9ZnVuY3Rpb24gTih0KXtTJiZ0LmRhdGEmJnQuX2NvbnRleHQuc2hvd1RpcHMmJihzLm5vdGlmaWVyKHMuXyh0LFwiRG91YmxlLWNsaWNrIHRvIHpvb20gYmFjayBvdXRcIiksXCJsb25nXCIpLFM9ITEpfWZ1bmN0aW9uIGoodCl7cmV0dXJuXCJsYXNzb1wiPT09dHx8XCJzZWxlY3RcIj09PXR9ZnVuY3Rpb24gVih0KXt2YXIgZT1NYXRoLmZsb29yKE1hdGgubWluKHQuYi10LnQsdC5yLXQubCxNKS8yKTtyZXR1cm5cIk1cIisodC5sLTMuNSkrXCIsXCIrKHQudC0uNStlKStcImgzdlwiKy1lK1wiaFwiK2UrXCJ2LTNoLVwiKyhlKzMpK1wiWk1cIisodC5yKzMuNSkrXCIsXCIrKHQudC0uNStlKStcImgtM3ZcIistZStcImhcIistZStcInYtM2hcIisoZSszKStcIlpNXCIrKHQuciszLjUpK1wiLFwiKyh0LmIrLjUtZSkrXCJoLTN2XCIrZStcImhcIistZStcInYzaFwiKyhlKzMpK1wiWk1cIisodC5sLTMuNSkrXCIsXCIrKHQuYisuNS1lKStcImgzdlwiK2UrXCJoXCIrZStcInYzaC1cIisoZSszKStcIlpcIn1mdW5jdGlvbiBVKHQsZSxyLG4pe2Zvcih2YXIgaSxhLG8sbCxjPSExLHU9e30saD17fSxmPTA7ZjxlLmxlbmd0aDtmKyspe3ZhciBwPWVbZl07Zm9yKGkgaW4gcilpZihwW2ldKXtmb3IobyBpbiBwKShcInhcIj09PW8uY2hhckF0KDApP3I6bilbb118fCh1W29dPWkpO2ZvcihhIGluIG4pcFthXSYmKGM9ITApfWZvcihhIGluIG4paWYocFthXSlmb3IobCBpbiBwKShcInhcIj09PWwuY2hhckF0KDApP3I6bilbbF18fChoW2xdPWEpfWMmJihzLmV4dGVuZEZsYXQodSxoKSxoPXt9KTt2YXIgZD17fSxnPVtdO2ZvcihvIGluIHUpe3ZhciB2PXgodCxvKTtnLnB1c2godiksZFt2Ll9pZF09dn12YXIgbT17fSx5PVtdO2ZvcihsIGluIGgpe3ZhciBiPXgodCxsKTt5LnB1c2goYiksbVtiLl9pZF09Yn1yZXR1cm57eGFIYXNoOmQseWFIYXNoOm0seGF4ZXM6Zyx5YXhlczp5LHhMaW5rczp1LHlMaW5rczpoLGlzU3VicGxvdENvbnN0cmFpbmVkOmN9fWZ1bmN0aW9uIHEodCxlKXtpZihhKXt2YXIgcj12b2lkIDAhPT10Lm9ud2hlZWw/XCJ3aGVlbFwiOlwibW91c2V3aGVlbFwiO3QuX29ud2hlZWwmJnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLHQuX29ud2hlZWwpLHQuX29ud2hlZWw9ZSx0LmFkZEV2ZW50TGlzdGVuZXIocixlLHtwYXNzaXZlOiExfSl9ZWxzZSB2b2lkIDAhPT10Lm9ud2hlZWw/dC5vbndoZWVsPWU6dm9pZCAwIT09dC5vbm1vdXNld2hlZWwmJih0Lm9ubW91c2V3aGVlbD1lKX1mdW5jdGlvbiBIKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh0W3JdKTtyZXR1cm4gZX1lLmV4cG9ydHM9e21ha2VEcmFnQm94OmZ1bmN0aW9uKHQsZSxyLGEsYyxwLFMsRSl7dmFyIEYsRyxZLFcsWCxaLCQsSixLLFEsdHQsZXQscnQsbnQsaXQsYXQsb3Qsc3QsbHQsY3QsdXQsaHQ9dC5fZnVsbExheW91dC5fem9vbWxheWVyLGZ0PVMrRT09PVwibnNld1wiLHB0PTE9PT0oUytFKS5sZW5ndGg7ZnVuY3Rpb24gZHQoKXtpZihGPWUueGF4aXMsRz1lLnlheGlzLEs9Ri5fbGVuZ3RoLFE9Ry5fbGVuZ3RoLCQ9Ri5fb2Zmc2V0LEo9Ry5fb2Zmc2V0LChZPXt9KVtGLl9pZF09RiwoVz17fSlbRy5faWRdPUcsUyYmRSlmb3IodmFyIHI9ZS5vdmVybGF5cyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl0ueGF4aXM7WVtpLl9pZF09aTt2YXIgYT1yW25dLnlheGlzO1dbYS5faWRdPWF9WD1IKFkpLFo9SChXKSxydD1MKFgsRSksbnQ9TChaLFMpLGl0PSFudCYmIXJ0LHR0PVUodCx0Ll9mdWxsTGF5b3V0Ll9heGlzQ29uc3RyYWludEdyb3VwcyxZLFcpLGV0PVUodCx0Ll9mdWxsTGF5b3V0Ll9heGlzTWF0Y2hHcm91cHMsWSxXKSxhdD1FfHx0dC5pc1N1YnBsb3RDb25zdHJhaW5lZHx8ZXQuaXNTdWJwbG90Q29uc3RyYWluZWQsb3Q9U3x8dHQuaXNTdWJwbG90Q29uc3RyYWluZWR8fGV0LmlzU3VicGxvdENvbnN0cmFpbmVkO3ZhciBvPXQuX2Z1bGxMYXlvdXQ7c3Q9by5faGFzKFwic2NhdHRlcmdsXCIpLGx0PW8uX2hhcyhcInNwbG9tXCIpLGN0PW8uX2hhcyhcInN2Z1wiKX1kdCgpO3ZhciBndD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ/XCJuc2V3XCI9PT10P3I/XCJcIjpcInBhblwiPT09ZT9cIm1vdmVcIjpcImNyb3NzaGFpclwiOnQudG9Mb3dlckNhc2UoKStcIi1yZXNpemVcIjpcInBvaW50ZXJcIn0obnQrcnQsdC5fZnVsbExheW91dC5kcmFnbW9kZSxmdCksdnQ9QyhlLFMrRStcImRyYWdcIixndCxyLGEsYyxwKTtpZihpdCYmIWZ0KXJldHVybiB2dC5vbm1vdXNlZG93bj1udWxsLHZ0LnN0eWxlLnBvaW50ZXJFdmVudHM9XCJub25lXCIsdnQ7dmFyIG10LHl0LHh0LGJ0LF90LHd0LGt0LEF0LFR0LE10LFN0PXtlbGVtZW50OnZ0LGdkOnQscGxvdGluZm86ZX07ZnVuY3Rpb24gRXQoKXtTdC5wbG90aW5mby5zZWxlY3Rpb249ITEsXyh0KX1mdW5jdGlvbiBDdChyLGkpe3ZhciBhPXQuX2Z1bGxMYXlvdXQuY2xpY2ttb2RlO2lmKEIodCksMiE9PXJ8fHB0fHxmdW5jdGlvbigpe2lmKCF0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uKXt2YXIgZT10Ll9jb250ZXh0LmRvdWJsZUNsaWNrLHI9W107cnQmJihyPXIuY29uY2F0KFgpKSxudCYmKHI9ci5jb25jYXQoWikpLGV0LnhheGVzJiYocj1yLmNvbmNhdChldC54YXhlcykpLGV0LnlheGVzJiYocj1yLmNvbmNhdChldC55YXhlcykpO3ZhciBuLGksYSxzPXt9O2lmKFwicmVzZXQrYXV0b3NpemVcIj09PWUpZm9yKGU9XCJhdXRvc2l6ZVwiLGk9MDtpPHIubGVuZ3RoO2krKylpZigobj1yW2ldKS5fcmFuZ2VJbml0aWFsJiYobi5yYW5nZVswXSE9PW4uX3JhbmdlSW5pdGlhbFswXXx8bi5yYW5nZVsxXSE9PW4uX3JhbmdlSW5pdGlhbFsxXSl8fCFuLl9yYW5nZUluaXRpYWwmJiFuLmF1dG9yYW5nZSl7ZT1cInJlc2V0XCI7YnJlYWt9aWYoXCJhdXRvc2l6ZVwiPT09ZSlmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKShuPXJbaV0pLmZpeGVkcmFuZ2V8fChzW24uX25hbWUrXCIuYXV0b3JhbmdlXCJdPSEwKTtlbHNlIGlmKFwicmVzZXRcIj09PWUpZm9yKChydHx8dHQuaXNTdWJwbG90Q29uc3RyYWluZWQpJiYocj1yLmNvbmNhdCh0dC54YXhlcykpLG50JiYhdHQuaXNTdWJwbG90Q29uc3RyYWluZWQmJihyPXIuY29uY2F0KHR0LnlheGVzKSksdHQuaXNTdWJwbG90Q29uc3RyYWluZWQmJihydD9udHx8KHI9ci5jb25jYXQoWikpOnI9ci5jb25jYXQoWCkpLGk9MDtpPHIubGVuZ3RoO2krKykobj1yW2ldKS5maXhlZHJhbmdlfHwobi5fcmFuZ2VJbml0aWFsPyhhPW4uX3JhbmdlSW5pdGlhbCxzW24uX25hbWUrXCIucmFuZ2VbMF1cIl09YVswXSxzW24uX25hbWUrXCIucmFuZ2VbMV1cIl09YVsxXSk6c1tuLl9uYW1lK1wiLmF1dG9yYW5nZVwiXT0hMCk7dC5lbWl0KFwicGxvdGx5X2RvdWJsZWNsaWNrXCIsbnVsbCksby5jYWxsKFwiX2d1aVJlbGF5b3V0XCIsdCxzKX19KCksZnQpYS5pbmRleE9mKFwic2VsZWN0XCIpPi0xJiZ3KGksdCxYLFosZS5pZCxTdCksYS5pbmRleE9mKFwiZXZlbnRcIik+LTEmJmguY2xpY2sodCxpLGUuaWQpO2Vsc2UgaWYoMT09PXImJnB0KXt2YXIgcz1TP0c6RixjPVwic1wiPT09U3x8XCJ3XCI9PT1FPzA6MSx1PXMuX25hbWUrXCIucmFuZ2VbXCIrYytcIl1cIixmPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaT10LnJhbmdlW2VdLGE9TWF0aC5hYnMoaS10LnJhbmdlWzEtZV0pO3JldHVyblwiZGF0ZVwiPT09dC50eXBlP2k6XCJsb2dcIj09PXQudHlwZT8ocj1NYXRoLmNlaWwoTWF0aC5tYXgoMCwtTWF0aC5sb2coYSkvTWF0aC5MTjEwKSkrMyxuLmZvcm1hdChcIi5cIityK1wiZ1wiKShNYXRoLnBvdygxMCxpKSkpOihyPU1hdGguZmxvb3IoTWF0aC5sb2coTWF0aC5hYnMoaSkpL01hdGguTE4xMCktTWF0aC5mbG9vcihNYXRoLmxvZyhhKS9NYXRoLkxOMTApKzQsbi5mb3JtYXQoXCIuXCIrU3RyaW5nKHIpK1wiZ1wiKShpKSl9KHMsYykscD1cImxlZnRcIixkPVwibWlkZGxlXCI7aWYocy5maXhlZHJhbmdlKXJldHVybjtTPyhkPVwiblwiPT09Uz9cInRvcFwiOlwiYm90dG9tXCIsXCJyaWdodFwiPT09cy5zaWRlJiYocD1cInJpZ2h0XCIpKTpcImVcIj09PUUmJihwPVwicmlnaHRcIiksdC5fY29udGV4dC5zaG93QXhpc1JhbmdlRW50cnlCb3hlcyYmbi5zZWxlY3QodnQpLmNhbGwobC5tYWtlRWRpdGFibGUse2dkOnQsaW1tZWRpYXRlOiEwLGJhY2tncm91bmQ6dC5fZnVsbExheW91dC5wYXBlcl9iZ2NvbG9yLHRleHQ6U3RyaW5nKGYpLGZpbGw6cy50aWNrZm9udD9zLnRpY2tmb250LmNvbG9yOlwiIzQ0NFwiLGhvcml6b250YWxBbGlnbjpwLHZlcnRpY2FsQWxpZ246ZH0pLm9uKFwiZWRpdFwiLGZ1bmN0aW9uKGUpe3ZhciByPXMuZDJyKGUpO3ZvaWQgMCE9PXImJm8uY2FsbChcIl9ndWlSZWxheW91dFwiLHQsdSxyKX0pfX1mdW5jdGlvbiBMdChlLHIpe2lmKHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pcmV0dXJuITE7dmFyIG49TWF0aC5tYXgoMCxNYXRoLm1pbihLLGUrbXQpKSxpPU1hdGgubWF4KDAsTWF0aC5taW4oUSxyK3l0KSksYT1NYXRoLmFicyhuLW10KSxvPU1hdGguYWJzKGkteXQpO2Z1bmN0aW9uIHMoKXtrdD1cIlwiLHh0LnI9eHQubCx4dC50PXh0LmIsVHQuYXR0cihcImRcIixcIk0wLDBaXCIpfWlmKHh0Lmw9TWF0aC5taW4obXQsbikseHQucj1NYXRoLm1heChtdCxuKSx4dC50PU1hdGgubWluKHl0LGkpLHh0LmI9TWF0aC5tYXgoeXQsaSksdHQuaXNTdWJwbG90Q29uc3RyYWluZWQpYT5NfHxvPk0/KGt0PVwieHlcIixhL0s+by9RPyhvPWEqUS9LLHl0Pmk/eHQudD15dC1vOnh0LmI9eXQrbyk6KGE9bypLL1EsbXQ+bj94dC5sPW10LWE6eHQucj1tdCthKSxUdC5hdHRyKFwiZFwiLFYoeHQpKSk6cygpO2Vsc2UgaWYoZXQuaXNTdWJwbG90Q29uc3RyYWluZWQpaWYoYT5NfHxvPk0pe2t0PVwieHlcIjt2YXIgbD1NYXRoLm1pbih4dC5sL0ssKFEteHQuYikvUSksYz1NYXRoLm1heCh4dC5yL0ssKFEteHQudCkvUSk7eHQubD1sKksseHQucj1jKksseHQuYj0oMS1sKSpRLHh0LnQ9KDEtYykqUSxUdC5hdHRyKFwiZFwiLFYoeHQpKX1lbHNlIHMoKTtlbHNlIW50fHxvPE1hdGgubWluKE1hdGgubWF4KC42KmEsVCksTSk/YTxUfHwhcnQ/cygpOih4dC50PTAseHQuYj1RLGt0PVwieFwiLFR0LmF0dHIoXCJkXCIsZnVuY3Rpb24odCxlKXtyZXR1cm5cIk1cIisodC5sLS41KStcIixcIisoZS1NLS41KStcImgtM3ZcIisoMipNKzEpK1wiaDNaTVwiKyh0LnIrLjUpK1wiLFwiKyhlLU0tLjUpK1wiaDN2XCIrKDIqTSsxKStcImgtM1pcIn0oeHQseXQpKSk6IXJ0fHxhPE1hdGgubWluKC42Km8sTSk/KHh0Lmw9MCx4dC5yPUssa3Q9XCJ5XCIsVHQuYXR0cihcImRcIixmdW5jdGlvbih0LGUpe3JldHVyblwiTVwiKyhlLU0tLjUpK1wiLFwiKyh0LnQtLjUpK1widi0zaFwiKygyKk0rMSkrXCJ2M1pNXCIrKGUtTS0uNSkrXCIsXCIrKHQuYisuNSkrXCJ2M2hcIisoMipNKzEpK1widi0zWlwifSh4dCxtdCkpKTooa3Q9XCJ4eVwiLFR0LmF0dHIoXCJkXCIsVih4dCkpKTt4dC53PXh0LnIteHQubCx4dC5oPXh0LmIteHQudCxrdCYmKE10PSEwKSx0Ll9kcmFnZ2VkPU10LFIoQXQsVHQseHQsX3Qsd3QsYnQpLHd0PSEwfWZ1bmN0aW9uIHp0KCl7aWYodXQ9e30sTWF0aC5taW4oeHQuaCx4dC53KTwyKlQpcmV0dXJuIEIodCk7XCJ4eVwiIT09a3QmJlwieFwiIT09a3R8fCh6KFgseHQubC9LLHh0LnIvSyx1dCx0dC54YXhlcyksRnQoXCJ4XCIsdXQpKSxcInh5XCIhPT1rdCYmXCJ5XCIhPT1rdHx8KHooWiwoUS14dC5iKS9RLChRLXh0LnQpL1EsdXQsdHQueWF4ZXMpLEZ0KFwieVwiLHV0KSksQih0KSxOdCgpLE4odCl9U3QucHJlcEZuPWZ1bmN0aW9uKGUscixuKXt2YXIgYT1TdC5kcmFnbW9kZSxvPXQuX2Z1bGxMYXlvdXQuZHJhZ21vZGU7byE9PWEmJihTdC5kcmFnbW9kZT1vKSxkdCgpLGl0fHwoZnQ/ZS5zaGlmdEtleT9cInBhblwiPT09bz9vPVwiem9vbVwiOmoobyl8fChvPVwicGFuXCIpOmUuY3RybEtleSYmKG89XCJwYW5cIik6bz1cInBhblwiKSxTdC5taW5EcmFnPVwibGFzc29cIj09PW8/MTp2b2lkIDAsaihvKT8oU3QueGF4ZXM9WCxTdC55YXhlcz1aLGIoZSxyLG4sU3QsbykpOihTdC5jbGlja0ZuPUN0LGooYSkmJkV0KCksaXR8fChcInpvb21cIj09PW8/KFN0Lm1vdmVGbj1MdCxTdC5kb25lRm49enQsU3QubWluRHJhZz0xLGZ1bmN0aW9uKGUscixuKXt2YXIgYT12dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTttdD1yLWEubGVmdCx5dD1uLWEudG9wLHh0PXtsOm10LHI6bXQsdzowLHQ6eXQsYjp5dCxoOjB9LGJ0PXQuX2htcGl4Y291bnQ/dC5faG1sdW1jb3VudC90Ll9obXBpeGNvdW50OmkodC5fZnVsbExheW91dC5wbG90X2JnY29sb3IpLmdldEx1bWluYW5jZSgpLHd0PSExLGt0PVwieHlcIixNdD0hMSxBdD1EKGh0LGJ0LCQsSixfdD1cIk0wLDBIXCIrSytcIlZcIitRK1wiSDBWMFwiKSxUdD1QKGh0LCQsSil9KDAscixuKSk6XCJwYW5cIj09PW8mJihTdC5tb3ZlRm49UnQsU3QuZG9uZUZuPU50KSkpLHQuX2Z1bGxMYXlvdXQuX3JlZHJhZz1mdW5jdGlvbigpe3ZhciBlPXQuX2RyYWdkYXRhO2UmJmUuZWxlbWVudD09PXZ0JiYoaih0Ll9mdWxsTGF5b3V0LmRyYWdtb2RlKXx8KGR0KCksanQoWzAsMCxLLFFdKSxTdC5tb3ZlRm4oZS5keCxlLmR5KSkpfX0sZC5pbml0KFN0KTt2YXIgT3Q9WzAsMCxLLFFdLEl0PW51bGwsRHQ9QS5SRURSQVdERUxBWSxQdD1lLm1haW5wbG90P3QuX2Z1bGxMYXlvdXQuX3Bsb3RzW2UubWFpbnBsb3RdOmU7ZnVuY3Rpb24gUnQoZSxyKXtpZighdC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbil7aWYodC5fZnVsbExheW91dC5fcmVwbG90dGluZz0hMCxcImV3XCI9PT1ydHx8XCJuc1wiPT09bnQpcmV0dXJuIHJ0JiYoTyhYLGUpLEZ0KFwieFwiKSksbnQmJihPKFosciksRnQoXCJ5XCIpKSxqdChbcnQ/LWU6MCxudD8tcjowLEssUV0pLHZvaWQgQnQoKTtpZih0dC5pc1N1YnBsb3RDb25zdHJhaW5lZCYmcnQmJm50KXt2YXIgbj1cIndcIj09PXJ0PT0oXCJuXCI9PT1udCk/MTotMSxpPShlL0srbipyL1EpLzI7ZT1pKksscj1uKmkqUX1cIndcIj09PXJ0P2U9bChYLDAsZSk6XCJlXCI9PT1ydD9lPWwoWCwxLC1lKTpydHx8KGU9MCksXCJuXCI9PT1udD9yPWwoWiwxLHIpOlwic1wiPT09bnQ/cj1sKFosMCwtcik6bnR8fChyPTApO3ZhciBhPVwid1wiPT09cnQ/ZTowLG89XCJuXCI9PT1udD9yOjA7aWYodHQuaXNTdWJwbG90Q29uc3RyYWluZWQpe3ZhciBzO2lmKCFydCYmMT09PW50Lmxlbmd0aCl7Zm9yKHM9MDtzPFgubGVuZ3RoO3MrKylYW3NdLnJhbmdlPVhbc10uX3Iuc2xpY2UoKSxrKFhbc10sMS1yL1EpO2E9KGU9cipLL1EpLzJ9aWYoIW50JiYxPT09cnQubGVuZ3RoKXtmb3Iocz0wO3M8Wi5sZW5ndGg7cysrKVpbc10ucmFuZ2U9WltzXS5fci5zbGljZSgpLGsoWltzXSwxLWUvSyk7bz0ocj1lKlEvSykvMn19RnQoXCJ4XCIpLEZ0KFwieVwiKSxqdChbYSxvLEstZSxRLXJdKSxCdCgpfWZ1bmN0aW9uIGwodCxlLHIpe2Zvcih2YXIgbixpLGE9MS1lLG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9dFtvXTtpZighcy5maXhlZHJhbmdlKXtuPXMsaT1zLl9ybFthXSsocy5fcmxbZV0tcy5fcmxbYV0pL0koci9zLl9sZW5ndGgpO3ZhciBsPXMubDJyKGkpOyExIT09bCYmdm9pZCAwIT09bCYmKHMucmFuZ2VbZV09bCl9fXJldHVybiBuLl9sZW5ndGgqKG4uX3JsW2VdLWkpLyhuLl9ybFtlXS1uLl9ybFthXSl9fWZ1bmN0aW9uIEZ0KHQsZSl7Zm9yKHZhciByPWV0LmlzU3VicGxvdENvbnN0cmFpbmVkP3t4OloseTpYfVt0XTpldFt0K1wiYXhlc1wiXSxuPWV0LmlzU3VicGxvdENvbnN0cmFpbmVkP3t4OlgseTpafVt0XTpbXSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV0sbz1hLl9pZCxzPWV0LnhMaW5rc1tvXXx8ZXQueUxpbmtzW29dLGw9blswXXx8WVtzXXx8V1tzXTtpZihsKXt2YXIgYz1sLnJhbmdlO2U/KGVbYS5fbmFtZStcIi5yYW5nZVswXVwiXT1jWzBdLGVbYS5fbmFtZStcIi5yYW5nZVsxXVwiXT1jWzFdKTphLnJhbmdlPWN9fX1mdW5jdGlvbiBCdCgpe3ZhciBlLHI9W107ZnVuY3Rpb24gbih0KXtmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0uZml4ZWRyYW5nZXx8ci5wdXNoKHRbZV0uX2lkKX1mb3IoYXQmJihuKFgpLG4odHQueGF4ZXMpLG4oZXQueGF4ZXMpKSxvdCYmKG4oWiksbih0dC55YXhlcyksbihldC55YXhlcykpLHV0PXt9LGU9MDtlPHIubGVuZ3RoO2UrKyl7dmFyIGk9cltlXSxhPXgodCxpKTtmLmRyYXdPbmUodCxhLHtza2lwVGl0bGU6ITB9KSx1dFthLl9uYW1lK1wiLnJhbmdlWzBdXCJdPWEucmFuZ2VbMF0sdXRbYS5fbmFtZStcIi5yYW5nZVsxXVwiXT1hLnJhbmdlWzFdfWYucmVkcmF3Q29tcG9uZW50cyh0LHIpfWZ1bmN0aW9uIE50KCl7anQoWzAsMCxLLFFdKSxzLnN5bmNPckFzeW5jKFt5LnByZXZpb3VzUHJvbWlzZXMsZnVuY3Rpb24oKXt0Ll9mdWxsTGF5b3V0Ll9yZXBsb3R0aW5nPSExLG8uY2FsbChcIl9ndWlSZWxheW91dFwiLHQsdXQpfV0sdCl9ZnVuY3Rpb24ganQoZSl7dmFyIHIsbixpLGEsbD10Ll9mdWxsTGF5b3V0LGM9bC5fcGxvdHMsaD1sLl9zdWJwbG90cy5jYXJ0ZXNpYW47aWYobHQmJm8uc3VicGxvdHNSZWdpc3RyeS5zcGxvbS5kcmFnKHQpLHN0KWZvcihyPTA7cjxoLmxlbmd0aDtyKyspaWYoaT0obj1jW2hbcl1dKS54YXhpcyxhPW4ueWF4aXMsbi5fc2NlbmUpe3ZhciBmPXMuc2ltcGxlTWFwKGkucmFuZ2UsaS5yMmwpLHA9cy5zaW1wbGVNYXAoYS5yYW5nZSxhLnIybCk7bi5fc2NlbmUudXBkYXRlKHtyYW5nZTpbZlswXSxwWzBdLGZbMV0scFsxXV19KX1pZigobHR8fHN0KSYmKHYodCksbSh0KSksY3Qpe3ZhciBkPWVbMl0vRi5fbGVuZ3RoLGc9ZVszXS9HLl9sZW5ndGg7Zm9yKHI9MDtyPGgubGVuZ3RoO3IrKyl7aT0obj1jW2hbcl1dKS54YXhpcyxhPW4ueWF4aXM7dmFyIHkseCxiLF8sdz1hdCYmIWkuZml4ZWRyYW5nZSYmWVtpLl9pZF0saz1vdCYmIWEuZml4ZWRyYW5nZSYmV1thLl9pZF07aWYodz8oeT1kLGI9RT9lWzBdOnF0KGkseSkpOmV0LnhhSGFzaFtpLl9pZF0/KHk9ZCxiPWVbMF0qaS5fbGVuZ3RoL0YuX2xlbmd0aCk6ZXQueWFIYXNoW2kuX2lkXT8oeT1nLGI9XCJuc1wiPT09bnQ/LWVbMV0qaS5fbGVuZ3RoL0cuX2xlbmd0aDpxdChpLHkse246XCJ0b3BcIixzOlwiYm90dG9tXCJ9W250XSkpOmI9VXQoaSx5PVZ0KGksZCxnKSksaz8oeD1nLF89Uz9lWzFdOnF0KGEseCkpOmV0LnlhSGFzaFthLl9pZF0/KHg9ZyxfPWVbMV0qYS5fbGVuZ3RoL0cuX2xlbmd0aCk6ZXQueGFIYXNoW2EuX2lkXT8oeD1kLF89XCJld1wiPT09cnQ/LWVbMF0qYS5fbGVuZ3RoL0YuX2xlbmd0aDpxdChhLHgse2U6XCJyaWdodFwiLHc6XCJsZWZ0XCJ9W3J0XSkpOl89VXQoYSx4PVZ0KGEsZCxnKSkseXx8eCl7eXx8KHk9MSkseHx8KHg9MSk7dmFyIEE9aS5fb2Zmc2V0LWIveSxUPWEuX29mZnNldC1fL3g7bi5jbGlwUmVjdC5jYWxsKHUuc2V0VHJhbnNsYXRlLGIsXykuY2FsbCh1LnNldFNjYWxlLHkseCksbi5wbG90LmNhbGwodS5zZXRUcmFuc2xhdGUsQSxUKS5jYWxsKHUuc2V0U2NhbGUsMS95LDEveCkseT09PW4ueFNjYWxlRmFjdG9yJiZ4PT09bi55U2NhbGVGYWN0b3J8fCh1LnNldFBvaW50R3JvdXBTY2FsZShuLnpvb21TY2FsZVB0cyx5LHgpLHUuc2V0VGV4dFBvaW50c1NjYWxlKG4uem9vbVNjYWxlVHh0LHkseCkpLHUuaGlkZU91dHNpZGVSYW5nZVBvaW50cyhuLmNsaXBPbkF4aXNGYWxzZVRyYWNlcyxuKSxuLnhTY2FsZUZhY3Rvcj15LG4ueVNjYWxlRmFjdG9yPXh9fX19ZnVuY3Rpb24gVnQodCxlLHIpe3JldHVybiB0LmZpeGVkcmFuZ2U/MDphdCYmdHQueGFIYXNoW3QuX2lkXT9lOm90JiYodHQuaXNTdWJwbG90Q29uc3RyYWluZWQ/dHQueGFIYXNoOnR0LnlhSGFzaClbdC5faWRdP3I6MH1mdW5jdGlvbiBVdCh0LGUpe3JldHVybiBlPyh0LnJhbmdlPXQuX3Iuc2xpY2UoKSxrKHQsZSkscXQodCxlKSk6MH1mdW5jdGlvbiBxdCh0LGUscil7cmV0dXJuIHQuX2xlbmd0aCooMS1lKSpnW3J8fHQuY29uc3RyYWludG93YXJkfHxcIm1pZGRsZVwiXX1yZXR1cm4gUy5sZW5ndGgqRS5sZW5ndGghPTEmJnEodnQsZnVuY3Rpb24oZSl7aWYodC5fY29udGV4dC5fc2Nyb2xsWm9vbS5jYXJ0ZXNpYW58fHQuX2Z1bGxMYXlvdXQuX2VuYWJsZXNjcm9sbHpvb20pe2lmKEV0KCksdC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbilyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLHZvaWQgZS5zdG9wUHJvcGFnYXRpb24oKTtkdCgpLGNsZWFyVGltZW91dChJdCk7dmFyIHI9LWUuZGVsdGFZO2lmKGlzRmluaXRlKHIpfHwocj1lLndoZWVsRGVsdGEvMTApLGlzRmluaXRlKHIpKXt2YXIgbixpPU1hdGguZXhwKC1NYXRoLm1pbihNYXRoLm1heChyLC0yMCksMjApLzIwMCksYT1QdC5kcmFnbGF5ZXIuc2VsZWN0KFwiLm5zZXdkcmFnXCIpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPShlLmNsaWVudFgtYS5sZWZ0KS9hLndpZHRoLGw9KGEuYm90dG9tLWUuY2xpZW50WSkvYS5oZWlnaHQ7aWYoYXQpe2ZvcihFfHwobz0uNSksbj0wO248WC5sZW5ndGg7bisrKWMoWFtuXSxvLGkpO0Z0KFwieFwiKSxPdFsyXSo9aSxPdFswXSs9T3RbMl0qbyooMS9pLTEpfWlmKG90KXtmb3IoU3x8KGw9LjUpLG49MDtuPFoubGVuZ3RoO24rKyljKFpbbl0sbCxpKTtGdChcInlcIiksT3RbM10qPWksT3RbMV0rPU90WzNdKigxLWwpKigxL2ktMSl9anQoT3QpLEJ0KCksSXQ9c2V0VGltZW91dChmdW5jdGlvbigpe090PVswLDAsSyxRXSxOdCgpfSxEdCksZS5wcmV2ZW50RGVmYXVsdCgpfWVsc2Ugcy5sb2coXCJEaWQgbm90IGZpbmQgd2hlZWwgbW90aW9uIGF0dHJpYnV0ZXM6IFwiLGUpfWZ1bmN0aW9uIGModCxlLHIpe2lmKCF0LmZpeGVkcmFuZ2Upe3ZhciBuPXMuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpLGk9blswXSsoblsxXS1uWzBdKSplO3QucmFuZ2U9bi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQubDJyKGkrKGUtaSkqcil9KX19fSksdnR9LG1ha2VEcmFnZ2VyOkUsbWFrZVJlY3REcmFnZ2VyOkMsbWFrZVpvb21ib3g6RCxtYWtlQ29ybmVyczpQLHVwZGF0ZVpvb21ib3g6Uix4eUNvcm5lcnM6Vix0cmFuc2l0aW9uWm9vbWJveDpGLHJlbW92ZVpvb21ib3g6QixzaG93RG91YmxlQ2xpY2tOb3RpZmllcjpOLGF0dGFjaFdoZWVsRXZlbnRIYW5kbGVyOnF9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudFwiOjU5NixcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCI6NjczLFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzXCI6Njg2LFwiLi4vLi4vbGliL3NldGN1cnNvclwiOjcyMSxcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiOjcyNSxcIi4uLy4uL3Bsb3RfYXBpL3N1YnJvdXRpbmVzXCI6NzQwLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9wbG90c1wiOjgxMCxcIi4vYXhlc1wiOjc0OSxcIi4vYXhpc19pZHNcIjo3NTIsXCIuL2NvbnN0YW50c1wiOjc1NSxcIi4vc2NhbGVfem9vbVwiOjc2NSxcIi4vc2VsZWN0XCI6NzY2LGQzOjE1NSxcImhhcy1wYXNzaXZlLWV2ZW50c1wiOjQwNCx0aW55Y29sb3IyOjUyMn1dLDc1ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4XCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnRcIiksbz10KFwiLi4vLi4vbGliL3NldGN1cnNvclwiKSxzPXQoXCIuL2RyYWdib3hcIikubWFrZURyYWdCb3gsbD10KFwiLi9jb25zdGFudHNcIikuRFJBR0dFUlNJWkU7ci5pbml0SW50ZXJhY3Rpb25zPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7aWYodC5fY29udGV4dC5zdGF0aWNQbG90KW4uc2VsZWN0KHQpLnNlbGVjdEFsbChcIi5kcmFnXCIpLnJlbW92ZSgpO2Vsc2UgaWYoZS5faGFzKFwiY2FydGVzaWFuXCIpfHxlLl9oYXMoXCJzcGxvbVwiKSl7T2JqZWN0LmtleXMoZS5fcGxvdHN8fHt9KS5zb3J0KGZ1bmN0aW9uKHQscil7aWYoKGUuX3Bsb3RzW3RdLm1haW5wbG90JiYhMCk9PT0oZS5fcGxvdHNbcl0ubWFpbnBsb3QmJiEwKSl7dmFyIG49dC5zcGxpdChcInlcIiksaT1yLnNwbGl0KFwieVwiKTtyZXR1cm4gblswXT09PWlbMF0/TnVtYmVyKG5bMV18fDEpLU51bWJlcihpWzFdfHwxKTpOdW1iZXIoblswXXx8MSktTnVtYmVyKGlbMF18fDEpfXJldHVybiBlLl9wbG90c1t0XS5tYWlucGxvdD8xOi0xfSkuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgbj1lLl9wbG90c1tyXSxvPW4ueGF4aXMsYz1uLnlheGlzO2lmKCFuLm1haW5wbG90KXt2YXIgdT1zKHQsbixvLl9vZmZzZXQsYy5fb2Zmc2V0LG8uX2xlbmd0aCxjLl9sZW5ndGgsXCJuc1wiLFwiZXdcIik7dS5vbm1vdXNlbW92ZT1mdW5jdGlvbihlKXt0Ll9mdWxsTGF5b3V0Ll9yZWhvdmVyPWZ1bmN0aW9uKCl7dC5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PT09ciYmaS5ob3Zlcih0LGUscil9LGkuaG92ZXIodCxlLHIpLHQuX2Z1bGxMYXlvdXQuX2xhc3Rob3Zlcj11LHQuX2Z1bGxMYXlvdXQuX2hvdmVyc3VicGxvdD1yfSx1Lm9ubW91c2VvdXQ9ZnVuY3Rpb24oZSl7dC5fZHJhZ2dpbmd8fCh0Ll9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9bnVsbCxhLnVuaG92ZXIodCxlKSl9LHQuX2NvbnRleHQuc2hvd0F4aXNEcmFnSGFuZGxlcyYmKHModCxuLG8uX29mZnNldC1sLGMuX29mZnNldC1sLGwsbCxcIm5cIixcIndcIikscyh0LG4sby5fb2Zmc2V0K28uX2xlbmd0aCxjLl9vZmZzZXQtbCxsLGwsXCJuXCIsXCJlXCIpLHModCxuLG8uX29mZnNldC1sLGMuX29mZnNldCtjLl9sZW5ndGgsbCxsLFwic1wiLFwid1wiKSxzKHQsbixvLl9vZmZzZXQrby5fbGVuZ3RoLGMuX29mZnNldCtjLl9sZW5ndGgsbCxsLFwic1wiLFwiZVwiKSl9aWYodC5fY29udGV4dC5zaG93QXhpc0RyYWdIYW5kbGVzKXtpZihyPT09by5fbWFpblN1YnBsb3Qpe3ZhciBoPW8uX21haW5MaW5lUG9zaXRpb247XCJ0b3BcIj09PW8uc2lkZSYmKGgtPWwpLHModCxuLG8uX29mZnNldCsuMSpvLl9sZW5ndGgsaCwuOCpvLl9sZW5ndGgsbCxcIlwiLFwiZXdcIikscyh0LG4sby5fb2Zmc2V0LGgsLjEqby5fbGVuZ3RoLGwsXCJcIixcIndcIikscyh0LG4sby5fb2Zmc2V0Ky45Km8uX2xlbmd0aCxoLC4xKm8uX2xlbmd0aCxsLFwiXCIsXCJlXCIpfWlmKHI9PT1jLl9tYWluU3VicGxvdCl7dmFyIGY9Yy5fbWFpbkxpbmVQb3NpdGlvbjtcInJpZ2h0XCIhPT1jLnNpZGUmJihmLT1sKSxzKHQsbixmLGMuX29mZnNldCsuMSpjLl9sZW5ndGgsbCwuOCpjLl9sZW5ndGgsXCJuc1wiLFwiXCIpLHModCxuLGYsYy5fb2Zmc2V0Ky45KmMuX2xlbmd0aCxsLC4xKmMuX2xlbmd0aCxcInNcIixcIlwiKSxzKHQsbixmLGMuX29mZnNldCxsLC4xKmMuX2xlbmd0aCxcIm5cIixcIlwiKX19fSk7dmFyIG89ZS5faG92ZXJsYXllci5ub2RlKCk7by5vbm1vdXNlbW92ZT1mdW5jdGlvbihyKXtyLnRhcmdldD10Ll9mdWxsTGF5b3V0Ll9sYXN0aG92ZXIsaS5ob3Zlcih0LHIsZS5faG92ZXJzdWJwbG90KX0sby5vbmNsaWNrPWZ1bmN0aW9uKGUpe2UudGFyZ2V0PXQuX2Z1bGxMYXlvdXQuX2xhc3Rob3ZlcixpLmNsaWNrKHQsZSl9LG8ub25tb3VzZWRvd249ZnVuY3Rpb24oZSl7dC5fZnVsbExheW91dC5fbGFzdGhvdmVyLm9ubW91c2Vkb3duKGUpfSxyLnVwZGF0ZUZ4KHQpfX0sci51cGRhdGVGeD1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9XCJwYW5cIj09PWUuZHJhZ21vZGU/XCJtb3ZlXCI6XCJjcm9zc2hhaXJcIjtvKGUuX2RyYWdnZXJzLHIpfX0se1wiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudFwiOjU5NixcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9saWIvc2V0Y3Vyc29yXCI6NzIxLFwiLi9jb25zdGFudHNcIjo3NTUsXCIuL2RyYWdib3hcIjo3NTcsZDM6MTU1fV0sNzU5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uLy4uL2xpYlwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIGE9ZVt0XTtpZihBcnJheS5pc0FycmF5KGEpKWZvcih2YXIgbz1uLnN1YnBsb3RzUmVnaXN0cnkuY2FydGVzaWFuLHM9by5pZFJlZ2V4LGw9ci5fc3VicGxvdHMsYz1sLnhheGlzLHU9bC55YXhpcyxoPWwuY2FydGVzaWFuLGY9ci5faGFzKFwiY2FydGVzaWFuXCIpfHxyLl9oYXMoXCJnbDJkXCIpLHA9MDtwPGEubGVuZ3RoO3ArKyl7dmFyIGQ9YVtwXTtpZihpLmlzUGxhaW5PYmplY3QoZCkpe3ZhciBnPWQueHJlZix2PWQueXJlZixtPXMueC50ZXN0KGcpLHk9cy55LnRlc3Qodik7aWYobXx8eSl7Znx8aS5wdXNoVW5pcXVlKHIuX2Jhc2VQbG90TW9kdWxlcyxvKTt2YXIgeD0hMTttJiYtMT09PWMuaW5kZXhPZihnKSYmKGMucHVzaChnKSx4PSEwKSx5JiYtMT09PXUuaW5kZXhPZih2KSYmKHUucHVzaCh2KSx4PSEwKSx4JiZtJiZ5JiZoLnB1c2goZyt2KX19fX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOX1dLDc2MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxhPXQoXCIuLi8uLi9saWJcIiksbz10KFwiLi4vcGxvdHNcIikscz10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLGw9dChcIi4uL2dldF9kYXRhXCIpLmdldE1vZHVsZUNhbGNEYXRhLGM9dChcIi4vYXhpc19pZHNcIiksdT10KFwiLi9jb25zdGFudHNcIiksaD10KFwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIiksZj1hLmVuc3VyZVNpbmdsZTtmdW5jdGlvbiBwKHQsZSxyKXtyZXR1cm4gYS5lbnN1cmVTaW5nbGUodCxlLHIsZnVuY3Rpb24odCl7dC5kYXR1bShyKX0pfWZ1bmN0aW9uIGQodCxlLHIsYSxvKXtmb3IodmFyIGMsaCxmLHA9dS50cmFjZUxheWVyQ2xhc3NlcyxkPXQuX2Z1bGxMYXlvdXQsZz1kLl9tb2R1bGVzLHY9W10sbT1bXSx5PTA7eTxnLmxlbmd0aDt5Kyspe3ZhciB4PShjPWdbeV0pLm5hbWUsYj1pLm1vZHVsZXNbeF0uY2F0ZWdvcmllcztpZihiLnN2Zyl7dmFyIF89Yy5sYXllck5hbWV8fHgrXCJsYXllclwiLHc9Yy5wbG90O2Y9KGg9bChyLHcpKVswXSxyPWhbMV0sZi5sZW5ndGgmJnYucHVzaCh7aTpwLmluZGV4T2YoXyksY2xhc3NOYW1lOl8scGxvdE1ldGhvZDp3LGNkTW9kdWxlOmZ9KSxiLnpvb21TY2FsZSYmbS5wdXNoKFwiLlwiK18pfX12LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pLWUuaX0pO3ZhciBrPWUucGxvdC5zZWxlY3RBbGwoXCJnLm1sYXllclwiKS5kYXRhKHYsZnVuY3Rpb24odCl7cmV0dXJuIHQuY2xhc3NOYW1lfSk7aWYoay5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuY2xhc3NOYW1lfSkuY2xhc3NlZChcIm1sYXllclwiLCEwKSxrLmV4aXQoKS5yZW1vdmUoKSxrLm9yZGVyKCksay5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLGw9ci5jbGFzc05hbWU7ci5wbG90TWV0aG9kKHQsZSxyLmNkTW9kdWxlLGksYSxvKSxcInNjYXR0ZXJsYXllclwiIT09bCYmXCJiYXJsYXllclwiIT09bCYmXCJ3YXRlcmZhbGxsYXllclwiIT09bCYmcy5zZXRDbGlwVXJsKGksZS5sYXllckNsaXBJZCx0KX0pLGQuX2hhcyhcInNjYXR0ZXJnbFwiKSYmKGM9aS5nZXRNb2R1bGUoXCJzY2F0dGVyZ2xcIiksZj1sKHIsYylbMF0sYy5wbG90KHQsZSxmKSksIXQuX2NvbnRleHQuc3RhdGljUGxvdCYmKGUuX2hhc0NsaXBPbkF4aXNGYWxzZSYmKGUuY2xpcE9uQXhpc0ZhbHNlVHJhY2VzPWUucGxvdC5zZWxlY3RBbGwoXCIuc2NhdHRlcmxheWVyLCAuYmFybGF5ZXIsIC53YXRlcmZhbGxsYXllclwiKS5zZWxlY3RBbGwoXCIudHJhY2VcIikpLG0ubGVuZ3RoKSl7dmFyIEE9ZS5wbG90LnNlbGVjdEFsbChtLmpvaW4oXCIsXCIpKS5zZWxlY3RBbGwoXCIudHJhY2VcIik7ZS56b29tU2NhbGVQdHM9QS5zZWxlY3RBbGwoXCJwYXRoLnBvaW50XCIpLGUuem9vbVNjYWxlVHh0PUEuc2VsZWN0QWxsKFwiLnRleHRwb2ludFwiKX19ZnVuY3Rpb24gZyh0LGUpe3ZhciByPWUucGxvdGdyb3VwLG49ZS5pZCxpPXUubGF5ZXJWYWx1ZTJsYXllckNsYXNzW2UueGF4aXMubGF5ZXJdLGE9dS5sYXllclZhbHVlMmxheWVyQ2xhc3NbZS55YXhpcy5sYXllcl0sbz10Ll9mdWxsTGF5b3V0Ll9oYXNPbmx5TGFyZ2VTcGxvbXM7aWYoZS5tYWlucGxvdCl7dmFyIHM9ZS5tYWlucGxvdGluZm8sbD1zLnBsb3Rncm91cCxoPW4rXCIteFwiLGQ9bitcIi15XCI7ZS5ncmlkbGF5ZXI9cy5ncmlkbGF5ZXIsZS56ZXJvbGluZWxheWVyPXMuemVyb2xpbmVsYXllcixmKHMub3ZlcmxpbmVzQmVsb3csXCJwYXRoXCIsaCksZihzLm92ZXJsaW5lc0JlbG93LFwicGF0aFwiLGQpLGYocy5vdmVyYXhlc0JlbG93LFwiZ1wiLGgpLGYocy5vdmVyYXhlc0JlbG93LFwiZ1wiLGQpLGUucGxvdD1mKHMub3ZlcnBsb3QsXCJnXCIsbiksZihzLm92ZXJsaW5lc0Fib3ZlLFwicGF0aFwiLGgpLGYocy5vdmVybGluZXNBYm92ZSxcInBhdGhcIixkKSxmKHMub3ZlcmF4ZXNBYm92ZSxcImdcIixoKSxmKHMub3ZlcmF4ZXNBYm92ZSxcImdcIixkKSxlLnhsaW5lcz1sLnNlbGVjdChcIi5vdmVybGluZXMtXCIraSkuc2VsZWN0KFwiLlwiK2gpLGUueWxpbmVzPWwuc2VsZWN0KFwiLm92ZXJsaW5lcy1cIithKS5zZWxlY3QoXCIuXCIrZCksZS54YXhpc2xheWVyPWwuc2VsZWN0KFwiLm92ZXJheGVzLVwiK2kpLnNlbGVjdChcIi5cIitoKSxlLnlheGlzbGF5ZXI9bC5zZWxlY3QoXCIub3ZlcmF4ZXMtXCIrYSkuc2VsZWN0KFwiLlwiK2QpfWVsc2UgaWYobyllLnhsaW5lcz1mKHIsXCJwYXRoXCIsXCJ4bGluZXMtYWJvdmVcIiksZS55bGluZXM9ZihyLFwicGF0aFwiLFwieWxpbmVzLWFib3ZlXCIpLGUueGF4aXNsYXllcj1mKHIsXCJnXCIsXCJ4YXhpc2xheWVyLWFib3ZlXCIpLGUueWF4aXNsYXllcj1mKHIsXCJnXCIsXCJ5YXhpc2xheWVyLWFib3ZlXCIpO2Vsc2V7dmFyIGc9ZihyLFwiZ1wiLFwibGF5ZXItc3VicGxvdFwiKTtlLnNoYXBlbGF5ZXI9ZihnLFwiZ1wiLFwic2hhcGVsYXllclwiKSxlLmltYWdlbGF5ZXI9ZihnLFwiZ1wiLFwiaW1hZ2VsYXllclwiKSxlLmdyaWRsYXllcj1mKHIsXCJnXCIsXCJncmlkbGF5ZXJcIiksZS56ZXJvbGluZWxheWVyPWYocixcImdcIixcInplcm9saW5lbGF5ZXJcIiksZihyLFwicGF0aFwiLFwieGxpbmVzLWJlbG93XCIpLGYocixcInBhdGhcIixcInlsaW5lcy1iZWxvd1wiKSxlLm92ZXJsaW5lc0JlbG93PWYocixcImdcIixcIm92ZXJsaW5lcy1iZWxvd1wiKSxmKHIsXCJnXCIsXCJ4YXhpc2xheWVyLWJlbG93XCIpLGYocixcImdcIixcInlheGlzbGF5ZXItYmVsb3dcIiksZS5vdmVyYXhlc0JlbG93PWYocixcImdcIixcIm92ZXJheGVzLWJlbG93XCIpLGUucGxvdD1mKHIsXCJnXCIsXCJwbG90XCIpLGUub3ZlcnBsb3Q9ZihyLFwiZ1wiLFwib3ZlcnBsb3RcIiksZS54bGluZXM9ZihyLFwicGF0aFwiLFwieGxpbmVzLWFib3ZlXCIpLGUueWxpbmVzPWYocixcInBhdGhcIixcInlsaW5lcy1hYm92ZVwiKSxlLm92ZXJsaW5lc0Fib3ZlPWYocixcImdcIixcIm92ZXJsaW5lcy1hYm92ZVwiKSxmKHIsXCJnXCIsXCJ4YXhpc2xheWVyLWFib3ZlXCIpLGYocixcImdcIixcInlheGlzbGF5ZXItYWJvdmVcIiksZS5vdmVyYXhlc0Fib3ZlPWYocixcImdcIixcIm92ZXJheGVzLWFib3ZlXCIpLGUueGxpbmVzPXIuc2VsZWN0KFwiLnhsaW5lcy1cIitpKSxlLnlsaW5lcz1yLnNlbGVjdChcIi55bGluZXMtXCIrYSksZS54YXhpc2xheWVyPXIuc2VsZWN0KFwiLnhheGlzbGF5ZXItXCIraSksZS55YXhpc2xheWVyPXIuc2VsZWN0KFwiLnlheGlzbGF5ZXItXCIrYSl9b3x8KHAoZS5ncmlkbGF5ZXIsXCJnXCIsZS54YXhpcy5faWQpLHAoZS5ncmlkbGF5ZXIsXCJnXCIsZS55YXhpcy5faWQpLGUuZ3JpZGxheWVyLnNlbGVjdEFsbChcImdcIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkuc29ydChjLmlkU29ydCkpLGUueGxpbmVzLnN0eWxlKFwiZmlsbFwiLFwibm9uZVwiKS5jbGFzc2VkKFwiY3Jpc3BcIiwhMCksZS55bGluZXMuc3R5bGUoXCJmaWxsXCIsXCJub25lXCIpLmNsYXNzZWQoXCJjcmlzcFwiLCEwKX1mdW5jdGlvbiB2KHQsZSl7aWYodCl7dmFyIHI9e307Zm9yKHZhciBpIGluIHQuZWFjaChmdW5jdGlvbih0KXt2YXIgaT10WzBdO24uc2VsZWN0KHRoaXMpLnJlbW92ZSgpLG0oaSxlKSxyW2ldPSEwfSksZS5fcGxvdHMpZm9yKHZhciBhPWUuX3Bsb3RzW2ldLm92ZXJsYXlzfHxbXSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107cltzLmlkXSYmcy5wbG90LnNlbGVjdEFsbChcIi50cmFjZVwiKS5yZW1vdmUoKX19fWZ1bmN0aW9uIG0odCxlKXtlLl9kcmFnZ2Vycy5zZWxlY3RBbGwoXCJnLlwiK3QpLnJlbW92ZSgpLGUuX2RlZnMuc2VsZWN0KFwiI2NsaXBcIitlLl91aWQrdCtcInBsb3RcIikucmVtb3ZlKCl9ci5uYW1lPVwiY2FydGVzaWFuXCIsci5hdHRyPVtcInhheGlzXCIsXCJ5YXhpc1wiXSxyLmlkUm9vdD1bXCJ4XCIsXCJ5XCJdLHIuaWRSZWdleD11LmlkUmVnZXgsci5hdHRyUmVnZXg9dS5hdHRyUmVnZXgsci5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksci5sYXlvdXRBdHRyaWJ1dGVzPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9dChcIi4vbGF5b3V0X2RlZmF1bHRzXCIpLHIudHJhbnNpdGlvbkF4ZXM9dChcIi4vdHJhbnNpdGlvbl9heGVzXCIpLHIuZmluYWxpemVTdWJwbG90cz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxvPWUuX3N1YnBsb3RzLHM9by54YXhpcyxsPW8ueWF4aXMsaD1vLmNhcnRlc2lhbixmPWguY29uY2F0KG8uZ2wyZHx8W10pLHA9e30sZD17fTtmb3Iocj0wO3I8Zi5sZW5ndGg7cisrKXt2YXIgZz1mW3JdLnNwbGl0KFwieVwiKTtwW2dbMF1dPTEsZFtcInlcIitnWzFdXT0xfWZvcihyPTA7cjxzLmxlbmd0aDtyKyspcFtuPXNbcl1dfHwoaT0odFtjLmlkMm5hbWUobildfHx7fSkuYW5jaG9yLHUuaWRSZWdleC55LnRlc3QoaSl8fChpPVwieVwiKSxoLnB1c2gobitpKSxmLnB1c2gobitpKSxkW2ldfHwoZFtpXT0xLGEucHVzaFVuaXF1ZShsLGkpKSk7Zm9yKHI9MDtyPGwubGVuZ3RoO3IrKylkW2k9bFtyXV18fChuPSh0W2MuaWQybmFtZShpKV18fHt9KS5hbmNob3IsdS5pZFJlZ2V4LngudGVzdChuKXx8KG49XCJ4XCIpLGgucHVzaChuK2kpLGYucHVzaChuK2kpLHBbbl18fChwW25dPTEsYS5wdXNoVW5pcXVlKHMsbikpKTtpZighZi5sZW5ndGgpe2Zvcih2YXIgdiBpbiBuPVwiXCIsaT1cIlwiLHQpe2lmKHUuYXR0clJlZ2V4LnRlc3QodikpXCJ4XCI9PT12LmNoYXJBdCgwKT8oIW58fCt2LnN1YnN0cig1KTwrbi5zdWJzdHIoNSkpJiYobj12KTooIWl8fCt2LnN1YnN0cig1KTwraS5zdWJzdHIoNSkpJiYoaT12KX1uPW4/Yy5uYW1lMmlkKG4pOlwieFwiLGk9aT9jLm5hbWUyaWQoaSk6XCJ5XCIscy5wdXNoKG4pLGwucHVzaChpKSxoLnB1c2gobitpKX19LHIucGxvdD1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPXQuX2Z1bGxMYXlvdXQsbz1hLl9zdWJwbG90cy5jYXJ0ZXNpYW4scz10LmNhbGNkYXRhO2lmKG51bGwhPT1lKXtpZighQXJyYXkuaXNBcnJheShlKSlmb3IoZT1bXSxpPTA7aTxzLmxlbmd0aDtpKyspZS5wdXNoKGkpO2ZvcihpPTA7aTxvLmxlbmd0aDtpKyspe2Zvcih2YXIgbCxjPW9baV0sdT1hLl9wbG90c1tjXSxoPVtdLGY9MDtmPHMubGVuZ3RoO2YrKyl7dmFyIHA9c1tmXSxnPXBbMF0udHJhY2U7Zy54YXhpcytnLnlheGlzPT09YyYmKCgtMSE9PWUuaW5kZXhPZihnLmluZGV4KXx8Zy5jYXJwZXQpJiYobCYmbFswXS50cmFjZS54YXhpcytsWzBdLnRyYWNlLnlheGlzPT09YyYmLTEhPT1bXCJ0b25leHR4XCIsXCJ0b25leHR5XCIsXCJ0b25leHRcIl0uaW5kZXhPZihnLmZpbGwpJiYtMT09PWguaW5kZXhPZihsKSYmaC5wdXNoKGwpLGgucHVzaChwKSksbD1wKX1kKHQsdSxoLHIsbil9fX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scz1uLl9wbG90c3x8e30sbD1lLl9wbG90c3x8e30sdT1uLl9zdWJwbG90c3x8e307aWYobi5faGFzT25seUxhcmdlU3Bsb21zJiYhZS5faGFzT25seUxhcmdlU3Bsb21zKWZvcihvIGluIHMpKGk9c1tvXSkucGxvdGdyb3VwJiZpLnBsb3Rncm91cC5yZW1vdmUoKTt2YXIgaD1uLl9oYXMmJm4uX2hhcyhcImdsXCIpLGY9ZS5faGFzJiZlLl9oYXMoXCJnbFwiKTtpZihoJiYhZilmb3IobyBpbiBzKShpPXNbb10pLl9zY2VuZSYmaS5fc2NlbmUuZGVzdHJveSgpO2lmKHUueGF4aXMmJnUueWF4aXMpe3ZhciBwPWMubGlzdElkcyh7X2Z1bGxMYXlvdXQ6bn0pO2ZvcihhPTA7YTxwLmxlbmd0aDthKyspe3ZhciBkPXBbYV07ZVtjLmlkMm5hbWUoZCldfHxuLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKFwiLmctXCIrZCtcInRpdGxlXCIpLnJlbW92ZSgpfX12YXIgZz1uLl9oYXMmJm4uX2hhcyhcImNhcnRlc2lhblwiKSx5PWUuX2hhcyYmZS5faGFzKFwiY2FydGVzaWFuXCIpO2lmKGcmJiF5KXYobi5fY2FydGVzaWFubGF5ZXIuc2VsZWN0QWxsKFwiLnN1YnBsb3RcIiksbiksbi5fZGVmcy5zZWxlY3RBbGwoXCIuYXhlc2NsaXBcIikucmVtb3ZlKCksZGVsZXRlIG4uX2F4aXNDb25zdHJhaW50R3JvdXBzO2Vsc2UgaWYodS5jYXJ0ZXNpYW4pZm9yKGE9MDthPHUuY2FydGVzaWFuLmxlbmd0aDthKyspe3ZhciB4PXUuY2FydGVzaWFuW2FdO2lmKCFsW3hdKXt2YXIgYj1cIi5cIit4K1wiLC5cIit4K1wiLXgsLlwiK3grXCIteVwiO24uX2NhcnRlc2lhbmxheWVyLnNlbGVjdEFsbChiKS5yZW1vdmUoKSxtKHgsbil9fX0sci5kcmF3RnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scz10Ll9mdWxsTGF5b3V0LGw9cy5fc3VicGxvdHMuY2FydGVzaWFuLGM9bC5sZW5ndGgsdT1bXSxoPVtdO2ZvcihlPTA7ZTxjO2UrKyl7bj1sW2VdLGk9cy5fcGxvdHNbbl0sYT1pLnhheGlzLG89aS55YXhpczt2YXIgZj1hLl9tYWluQXhpcyxwPW8uX21haW5BeGlzLGQ9Zi5faWQrcC5faWQsZz1zLl9wbG90c1tkXTtpLm92ZXJsYXlzPVtdLGQhPT1uJiZnPyhpLm1haW5wbG90PWQsaS5tYWlucGxvdGluZm89ZyxoLnB1c2gobikpOihpLm1haW5wbG90PXZvaWQgMCxpLm1haW5QbG90aW5mbz12b2lkIDAsdS5wdXNoKG4pKX1mb3IoZT0wO2U8aC5sZW5ndGg7ZSsrKW49aFtlXSwoaT1zLl9wbG90c1tuXSkubWFpbnBsb3RpbmZvLm92ZXJsYXlzLnB1c2goaSk7dmFyIHY9dS5jb25jYXQoaCksbT1uZXcgQXJyYXkoYyk7Zm9yKGU9MDtlPGM7ZSsrKXtuPXZbZV0saT1zLl9wbG90c1tuXSxhPWkueGF4aXMsbz1pLnlheGlzO3ZhciB5PVtuLGEubGF5ZXIsby5sYXllcixhLm92ZXJsYXlpbmd8fFwiXCIsby5vdmVybGF5aW5nfHxcIlwiXTtmb3Iocj0wO3I8aS5vdmVybGF5cy5sZW5ndGg7cisrKXkucHVzaChpLm92ZXJsYXlzW3JdLmlkKTttW2VdPXl9cmV0dXJuIG19KHQpLGk9ZS5fY2FydGVzaWFubGF5ZXIuc2VsZWN0QWxsKFwiLnN1YnBsb3RcIikuZGF0YShyLFN0cmluZyk7aS5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJzdWJwbG90IFwiK3RbMF19KSxpLm9yZGVyKCksaS5leGl0KCkuY2FsbCh2LGUpLGkuZWFjaChmdW5jdGlvbihyKXt2YXIgaT1yWzBdLGE9ZS5fcGxvdHNbaV07YS5wbG90Z3JvdXA9bi5zZWxlY3QodGhpcyksZyh0LGEpLGEuZHJhZ2xheWVyPWYoZS5fZHJhZ2dlcnMsXCJnXCIsaSl9KX0sci5yYW5nZVBsb3Q9ZnVuY3Rpb24odCxlLHIpe2codCxlKSxkKHQsZSxyKSxvLnN0eWxlKHQpfSxyLnRvU1ZHPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2dsaW1hZ2VzLHI9bi5zZWxlY3QodCkuc2VsZWN0QWxsKFwiLnN2Zy1jb250YWluZXJcIik7ci5maWx0ZXIoZnVuY3Rpb24odCxlKXtyZXR1cm4gZT09PXIuc2l6ZSgpLTF9KS5zZWxlY3RBbGwoXCIuZ2wtY2FudmFzLWNvbnRleHQsIC5nbC1jYW52YXMtZm9jdXNcIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PXRoaXMudG9EYXRhVVJMKFwiaW1hZ2UvcG5nXCIpO2UuYXBwZW5kKFwic3ZnOmltYWdlXCIpLmF0dHIoe3htbG5zOmguc3ZnLFwieGxpbms6aHJlZlwiOnQscHJlc2VydmVBc3BlY3RSYXRpbzpcIm5vbmVcIix4OjAseTowLHdpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0fSl9KX0sci51cGRhdGVGeD10KFwiLi9ncmFwaF9pbnRlcmFjdFwiKS51cGRhdGVGeH0se1wiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIjo2NzksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL2dldF9kYXRhXCI6Nzg0LFwiLi4vcGxvdHNcIjo4MTAsXCIuL2F0dHJpYnV0ZXNcIjo3NDcsXCIuL2F4aXNfaWRzXCI6NzUyLFwiLi9jb25zdGFudHNcIjo3NTUsXCIuL2dyYXBoX2ludGVyYWN0XCI6NzU4LFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjc2MSxcIi4vbGF5b3V0X2RlZmF1bHRzXCI6NzYyLFwiLi90cmFuc2l0aW9uX2F4ZXNcIjo3NzEsZDM6MTU1fV0sNzYxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2ZvbnRfYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXNcIikuZGFzaCxvPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQscz10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKS50ZW1wbGF0ZWRBcnJheSxsPXQoXCIuL2NvbnN0YW50c1wiKTtlLmV4cG9ydHM9e3Zpc2libGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZWRpdFR5cGU6XCJwbG90XCJ9LGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6XCJ0aWNrc1wifSx0aXRsZTp7dGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwidGlja3NcIn0sZm9udDpuKHtlZGl0VHlwZTpcInRpY2tzXCJ9KSxlZGl0VHlwZTpcInRpY2tzXCJ9LHR5cGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcIi1cIixcImxpbmVhclwiLFwibG9nXCIsXCJkYXRlXCIsXCJjYXRlZ29yeVwiLFwibXVsdGljYXRlZ29yeVwiXSxkZmx0OlwiLVwiLGVkaXRUeXBlOlwiY2FsY1wiLF9ub1RlbXBsYXRpbmc6ITB9LGF1dG9yYW5nZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6WyEwLCExLFwicmV2ZXJzZWRcIl0sZGZsdDohMCxlZGl0VHlwZTpcImF4cmFuZ2VcIixpbXBsaWVkRWRpdHM6e1wicmFuZ2VbMF1cIjp2b2lkIDAsXCJyYW5nZVsxXVwiOnZvaWQgMH19LHJhbmdlbW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibm9ybWFsXCIsXCJ0b3plcm9cIixcIm5vbm5lZ2F0aXZlXCJdLGRmbHQ6XCJub3JtYWxcIixlZGl0VHlwZTpcInBsb3RcIn0scmFuZ2U6e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsaXRlbXM6W3t2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJheHJhbmdlXCIsaW1wbGllZEVkaXRzOntcIl5hdXRvcmFuZ2VcIjohMX0sYW5pbTohMH0se3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImF4cmFuZ2VcIixpbXBsaWVkRWRpdHM6e1wiXmF1dG9yYW5nZVwiOiExfSxhbmltOiEwfV0sZWRpdFR5cGU6XCJheHJhbmdlXCIsaW1wbGllZEVkaXRzOnthdXRvcmFuZ2U6ITF9LGFuaW06ITB9LGZpeGVkcmFuZ2U6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMSxlZGl0VHlwZTpcImNhbGNcIn0sc2NhbGVhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltsLmlkUmVnZXgueC50b1N0cmluZygpLGwuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOlwicGxvdFwifSxzY2FsZXJhdGlvOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOlwicGxvdFwifSxjb25zdHJhaW46e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInJhbmdlXCIsXCJkb21haW5cIl0sZGZsdDpcInJhbmdlXCIsZWRpdFR5cGU6XCJwbG90XCJ9LGNvbnN0cmFpbnRvd2FyZDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibGVmdFwiLFwiY2VudGVyXCIsXCJyaWdodFwiLFwidG9wXCIsXCJtaWRkbGVcIixcImJvdHRvbVwiXSxlZGl0VHlwZTpcInBsb3RcIn0sbWF0Y2hlczp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W2wuaWRSZWdleC54LnRvU3RyaW5nKCksbC5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6XCJjYWxjXCJ9LHRpY2ttb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhdXRvXCIsXCJsaW5lYXJcIixcImFycmF5XCJdLGVkaXRUeXBlOlwidGlja3NcIixpbXBsaWVkRWRpdHM6e3RpY2swOnZvaWQgMCxkdGljazp2b2lkIDB9fSxudGlja3M6e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsbWluOjAsZGZsdDowLGVkaXRUeXBlOlwidGlja3NcIn0sdGljazA6e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcInRpY2tzXCIsaW1wbGllZEVkaXRzOnt0aWNrbW9kZTpcImxpbmVhclwifX0sZHRpY2s6e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcInRpY2tzXCIsaW1wbGllZEVkaXRzOnt0aWNrbW9kZTpcImxpbmVhclwifX0sdGlja3ZhbHM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJ0aWNrc1wifSx0aWNrdGV4dDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcInRpY2tzXCJ9LHRpY2tzOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJvdXRzaWRlXCIsXCJpbnNpZGVcIixcIlwiXSxlZGl0VHlwZTpcInRpY2tzXCJ9LHRpY2tzb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImxhYmVsc1wiLFwiYm91bmRhcmllc1wiXSxkZmx0OlwibGFiZWxzXCIsZWRpdFR5cGU6XCJ0aWNrc1wifSxtaXJyb3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOlshMCxcInRpY2tzXCIsITEsXCJhbGxcIixcImFsbHRpY2tzXCJdLGRmbHQ6ITEsZWRpdFR5cGU6XCJ0aWNrcytsYXlvdXRzdHlsZVwifSx0aWNrbGVuOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDo1LGVkaXRUeXBlOlwidGlja3NcIn0sdGlja3dpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOlwidGlja3NcIn0sdGlja2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6XCJ0aWNrc1wifSxzaG93dGlja2xhYmVsczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwidGlja3NcIn0sYXV0b21hcmdpbjp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwidGlja3NcIn0sc2hvd3NwaWtlczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwibW9kZWJhclwifSxzcGlrZWNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0Om51bGwsZWRpdFR5cGU6XCJub25lXCJ9LHNwaWtldGhpY2tuZXNzOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDozLGVkaXRUeXBlOlwibm9uZVwifSxzcGlrZWRhc2g6byh7fSxhLHtkZmx0OlwiZGFzaFwiLGVkaXRUeXBlOlwibm9uZVwifSksc3Bpa2Vtb2RlOnt2YWxUeXBlOlwiZmxhZ2xpc3RcIixmbGFnczpbXCJ0b2F4aXNcIixcImFjcm9zc1wiLFwibWFya2VyXCJdLGRmbHQ6XCJ0b2F4aXNcIixlZGl0VHlwZTpcIm5vbmVcIn0sc3Bpa2VzbmFwOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJkYXRhXCIsXCJjdXJzb3JcIl0sZGZsdDpcImRhdGFcIixlZGl0VHlwZTpcIm5vbmVcIn0sdGlja2ZvbnQ6bih7ZWRpdFR5cGU6XCJ0aWNrc1wifSksdGlja2FuZ2xlOnt2YWxUeXBlOlwiYW5nbGVcIixkZmx0OlwiYXV0b1wiLGVkaXRUeXBlOlwidGlja3NcIn0sdGlja3ByZWZpeDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcInRpY2tzXCJ9LHNob3d0aWNrcHJlZml4Ont2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhbGxcIixcImZpcnN0XCIsXCJsYXN0XCIsXCJub25lXCJdLGRmbHQ6XCJhbGxcIixlZGl0VHlwZTpcInRpY2tzXCJ9LHRpY2tzdWZmaXg6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsZWRpdFR5cGU6XCJ0aWNrc1wifSxzaG93dGlja3N1ZmZpeDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYWxsXCIsXCJmaXJzdFwiLFwibGFzdFwiLFwibm9uZVwiXSxkZmx0OlwiYWxsXCIsZWRpdFR5cGU6XCJ0aWNrc1wifSxzaG93ZXhwb25lbnQ6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImFsbFwiLFwiZmlyc3RcIixcImxhc3RcIixcIm5vbmVcIl0sZGZsdDpcImFsbFwiLGVkaXRUeXBlOlwidGlja3NcIn0sZXhwb25lbnRmb3JtYXQ6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcIm5vbmVcIixcImVcIixcIkVcIixcInBvd2VyXCIsXCJTSVwiLFwiQlwiXSxkZmx0OlwiQlwiLGVkaXRUeXBlOlwidGlja3NcIn0sc2VwYXJhdGV0aG91c2FuZHM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMSxlZGl0VHlwZTpcInRpY2tzXCJ9LHRpY2tmb3JtYXQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsZWRpdFR5cGU6XCJ0aWNrc1wifSx0aWNrZm9ybWF0c3RvcHM6cyhcInRpY2tmb3JtYXRzdG9wXCIse2VuYWJsZWQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcInRpY2tzXCJ9LGR0aWNrcmFuZ2U6e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsaXRlbXM6W3t2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJ0aWNrc1wifSx7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwidGlja3NcIn1dLGVkaXRUeXBlOlwidGlja3NcIn0sdmFsdWU6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsZWRpdFR5cGU6XCJ0aWNrc1wifSxlZGl0VHlwZTpcInRpY2tzXCJ9KSxob3ZlcmZvcm1hdDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcIm5vbmVcIn0sc2hvd2xpbmU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMSxlZGl0VHlwZTpcInRpY2tzK2xheW91dHN0eWxlXCJ9LGxpbmVjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOlwibGF5b3V0c3R5bGVcIn0sbGluZXdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOlwidGlja3MrbGF5b3V0c3R5bGVcIn0sc2hvd2dyaWQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZWRpdFR5cGU6XCJ0aWNrc1wifSxncmlkY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6aS5saWdodExpbmUsZWRpdFR5cGU6XCJ0aWNrc1wifSxncmlkd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6XCJ0aWNrc1wifSx6ZXJvbGluZTp7dmFsVHlwZTpcImJvb2xlYW5cIixlZGl0VHlwZTpcInRpY2tzXCJ9LHplcm9saW5lY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZTpcInRpY2tzXCJ9LHplcm9saW5ld2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjEsZWRpdFR5cGU6XCJ0aWNrc1wifSxzaG93ZGl2aWRlcnM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcInRpY2tzXCJ9LGRpdmlkZXJjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOlwidGlja3NcIn0sZGl2aWRlcndpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxLGVkaXRUeXBlOlwidGlja3NcIn0sYW5jaG9yOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJmcmVlXCIsbC5pZFJlZ2V4LngudG9TdHJpbmcoKSxsLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZTpcInBsb3RcIn0sc2lkZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1widG9wXCIsXCJib3R0b21cIixcImxlZnRcIixcInJpZ2h0XCJdLGVkaXRUeXBlOlwicGxvdFwifSxvdmVybGF5aW5nOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJmcmVlXCIsbC5pZFJlZ2V4LngudG9TdHJpbmcoKSxsLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZTpcInBsb3RcIn0sbGF5ZXI6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImFib3ZlIHRyYWNlc1wiLFwiYmVsb3cgdHJhY2VzXCJdLGRmbHQ6XCJhYm92ZSB0cmFjZXNcIixlZGl0VHlwZTpcInBsb3RcIn0sZG9tYWluOnt2YWxUeXBlOlwiaW5mb19hcnJheVwiLGl0ZW1zOlt7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGVkaXRUeXBlOlwicGxvdFwifSx7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGVkaXRUeXBlOlwicGxvdFwifV0sZGZsdDpbMCwxXSxlZGl0VHlwZTpcInBsb3RcIn0scG9zaXRpb246e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6XCJwbG90XCJ9LGNhdGVnb3J5b3JkZXI6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInRyYWNlXCIsXCJjYXRlZ29yeSBhc2NlbmRpbmdcIixcImNhdGVnb3J5IGRlc2NlbmRpbmdcIixcImFycmF5XCJdLGRmbHQ6XCJ0cmFjZVwiLGVkaXRUeXBlOlwiY2FsY1wifSxjYXRlZ29yeWFycmF5Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx1aXJldmlzaW9uOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJub25lXCJ9LGVkaXRUeXBlOlwiY2FsY1wiLF9kZXByZWNhdGVkOnthdXRvdGljazp7dmFsVHlwZTpcImJvb2xlYW5cIixlZGl0VHlwZTpcInRpY2tzXCJ9LHRpdGxlOnt2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJ0aWNrc1wifSx0aXRsZWZvbnQ6bih7ZWRpdFR5cGU6XCJ0aWNrc1wifSl9fX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzXCI6NTc3LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXNcIjo1OTgsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uL2ZvbnRfYXR0cmlidXRlc1wiOjc3NSxcIi4vY29uc3RhbnRzXCI6NzU1fV0sNzYyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGE9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIiksbz10KFwiLi4vbGF5b3V0X2F0dHJpYnV0ZXNcIikscz10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxsPXQoXCIuL3R5cGVfZGVmYXVsdHNcIiksYz10KFwiLi9heGlzX2RlZmF1bHRzXCIpLHU9dChcIi4vY29uc3RyYWludHNcIikuaGFuZGxlQ29uc3RyYWludERlZmF1bHRzLGg9dChcIi4vcG9zaXRpb25fZGVmYXVsdHNcIiksZj10KFwiLi9heGlzX2lkc1wiKSxwPWYuaWQybmFtZSxkPWYubmFtZTJpZCxnPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSx2PWcudHJhY2VJcyxtPWcuZ2V0Q29tcG9uZW50TWV0aG9kO2Z1bmN0aW9uIHkodCxlLHIpe0FycmF5LmlzQXJyYXkodFtlXSk/dFtlXS5wdXNoKHIpOnRbZV09W3JdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGYsZyx4PXt9LGI9e30sXz17fSx3PXt9LGs9e307Zm9yKGY9MDtmPHIubGVuZ3RoO2YrKyl7dmFyIEE9cltmXTtpZih2KEEsXCJjYXJ0ZXNpYW5cIil8fHYoQSxcImdsMmRcIikpe3ZhciBULE07aWYoQS54YXhpcyl5KHgsVD1wKEEueGF4aXMpLEEpO2Vsc2UgaWYoQS54YXhlcylmb3IoZz0wO2c8QS54YXhlcy5sZW5ndGg7ZysrKXkoeCxwKEEueGF4ZXNbZ10pLEEpO2lmKEEueWF4aXMpeSh4LE09cChBLnlheGlzKSxBKTtlbHNlIGlmKEEueWF4ZXMpZm9yKGc9MDtnPEEueWF4ZXMubGVuZ3RoO2crKyl5KHgscChBLnlheGVzW2ddKSxBKTtpZih2KEEsXCJjYXJwZXRcIikmJihcImNhcnBldFwiIT09QS50eXBlfHxBLl9jaGVhdGVyKXx8VCYmKF9bVF09MSksXCJjYXJwZXRcIj09PUEudHlwZSYmQS5fY2hlYXRlciYmVCYmKGJbVF09MSksdihBLFwiMmRNYXBcIikmJih3W1RdPTEsd1tNXT0xKSx2KEEsXCJvcmllbnRlZFwiKSlrW1wiaFwiPT09QS5vcmllbnRhdGlvbj9NOlRdPTF9fXZhciBTPWUuX3N1YnBsb3RzLEU9Uy54YXhpcyxDPVMueWF4aXMsTD1uLnNpbXBsZU1hcChFLHApLHo9bi5zaW1wbGVNYXAoQyxwKSxPPUwuY29uY2F0KHopLEk9aS5iYWNrZ3JvdW5kO0UubGVuZ3RoJiZDLmxlbmd0aCYmKEk9bi5jb2VyY2UodCxlLG8sXCJwbG90X2JnY29sb3JcIikpO3ZhciBELFAsUixGLEI9aS5jb21iaW5lKEksZS5wYXBlcl9iZ2NvbG9yKTtmdW5jdGlvbiBOKHQsZSl7cmV0dXJuIG4uY29lcmNlKFIsRixzLHQsZSl9ZnVuY3Rpb24gaih0LGUpe3JldHVybiBuLmNvZXJjZTIoUixGLHMsdCxlKX1mdW5jdGlvbiBWKHQpe3JldHVyblwieFwiPT09dD9DOkV9dmFyIFU9e3g6VihcInhcIikseTpWKFwieVwiKX0scT1VLnguY29uY2F0KFUueSk7ZnVuY3Rpb24gSChlLHIpe2Zvcih2YXIgbj1cInhcIj09PWU/TDp6LGk9W10sYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1uW2FdO289PT1yfHwodFtvXXx8e30pLm92ZXJsYXlpbmd8fGkucHVzaChkKG8pKX1yZXR1cm4gaX1mb3IoZj0wO2Y8Ty5sZW5ndGg7ZisrKXtQPShEPU9bZl0pLmNoYXJBdCgwKSxuLmlzUGxhaW5PYmplY3QodFtEXSl8fCh0W0RdPXt9KSxSPXRbRF0sRj1hLm5ld0NvbnRhaW5lcihlLEQsUCtcImF4aXNcIik7dmFyIEc9eFtEXXx8W107Ri5fdHJhY2VJbmRpY2VzPUcubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9leHBhbmRlZEluZGV4fSksRi5fYW5uSW5kaWNlcz1bXSxGLl9zaGFwZUluZGljZXM9W10sRi5faW1nSW5kaWNlcz1bXSxGLl9zdWJwbG90c1dpdGg9W10sRi5fY291bnRlckF4ZXM9W10sRi5fbmFtZT1GLl9hdHRyPUQ7dmFyIFk9Ri5faWQ9ZChEKSxXPUgoUCxEKSxYPXtsZXR0ZXI6UCxmb250OmUuZm9udCxvdXRlclRpY2tzOndbRF0sc2hvd0dyaWQ6IWtbRF0sZGF0YTpHLGJnQ29sb3I6QixjYWxlbmRhcjplLmNhbGVuZGFyLGF1dG9tYXJnaW46ITAsY2hlYXRlcm9ubHk6XCJ4XCI9PT1QJiZiW0RdJiYhX1tEXSxzcGxvbVN0YXNoOigoZS5fc3Bsb21BeGVzfHx7fSlbUF18fHt9KVtZXX07TihcInVpcmV2aXNpb25cIixlLnVpcmV2aXNpb24pLGwoUixGLE4sWCksYyhSLEYsTixYLGUpO3ZhciBaPWooXCJzcGlrZWNvbG9yXCIpLCQ9aihcInNwaWtldGhpY2tuZXNzXCIpLEo9aihcInNwaWtlZGFzaFwiKSxLPWooXCJzcGlrZW1vZGVcIiksUT1qKFwic3Bpa2VzbmFwXCIpO04oXCJzaG93c3Bpa2VzXCIsISEoWnx8JHx8Snx8S3x8USkpfHwoZGVsZXRlIEYuc3Bpa2Vjb2xvcixkZWxldGUgRi5zcGlrZXRoaWNrbmVzcyxkZWxldGUgRi5zcGlrZWRhc2gsZGVsZXRlIEYuc3Bpa2Vtb2RlLGRlbGV0ZSBGLnNwaWtlc25hcCksaChSLEYsTix7bGV0dGVyOlAsY291bnRlckF4ZXM6VVtQXSxvdmVybGF5YWJsZUF4ZXM6VyxncmlkOmUuZ3JpZH0pLEYuX2lucHV0PVJ9dmFyIHR0PW0oXCJyYW5nZXNsaWRlclwiLFwiaGFuZGxlRGVmYXVsdHNcIiksZXQ9bShcInJhbmdlc2VsZWN0b3JcIixcImhhbmRsZURlZmF1bHRzXCIpO2ZvcihmPTA7ZjxMLmxlbmd0aDtmKyspRD1MW2ZdLFI9dFtEXSxGPWVbRF0sdHQodCxlLEQpLFwiZGF0ZVwiPT09Ri50eXBlJiZldChSLEYsZSx6LEYuY2FsZW5kYXIpLE4oXCJmaXhlZHJhbmdlXCIpO2ZvcihmPTA7Zjx6Lmxlbmd0aDtmKyspe0Q9eltmXSxSPXRbRF0sRj1lW0RdO3ZhciBydD1lW3AoRi5hbmNob3IpXTtOKFwiZml4ZWRyYW5nZVwiLG0oXCJyYW5nZXNsaWRlclwiLFwiaXNWaXNpYmxlXCIpKHJ0KSl9dmFyIG50PWUuX2F4aXNDb25zdHJhaW50R3JvdXBzPVtdLGl0PWUuX2F4aXNNYXRjaEdyb3Vwcz1bXTtmb3IoZj0wO2Y8Ty5sZW5ndGg7ZisrKVA9KEQ9T1tmXSkuY2hhckF0KDApLFI9dFtEXSxGPWVbRF0sdShSLEYsTixxLGUpO2ZvcihmPTA7ZjxpdC5sZW5ndGg7ZisrKXt2YXIgYXQsb3Q9aXRbZl0sc3Q9bnVsbCxsdD1udWxsO2ZvcihhdCBpbiBvdCkoRj1lW3AoYXQpXSkubWF0Y2hlc3x8KHN0PUYucmFuZ2UsbHQ9Ri5hdXRvcmFuZ2UpO2lmKG51bGw9PT1zdHx8bnVsbD09PWx0KWZvcihhdCBpbiBvdCl7c3Q9KEY9ZVtwKGF0KV0pLnJhbmdlLGx0PUYuYXV0b3JhbmdlO2JyZWFrfWZvcihhdCBpbiBvdCkoRj1lW3AoYXQpXSkubWF0Y2hlcyYmKEYucmFuZ2U9c3Quc2xpY2UoKSxGLmF1dG9yYW5nZT1sdCksRi5fbWF0Y2hHcm91cD1vdDtpZihudC5sZW5ndGgpZm9yKGF0IGluIG90KWZvcihnPTA7ZzxudC5sZW5ndGg7ZysrKXt2YXIgY3Q9bnRbZ107Zm9yKHZhciB1dCBpbiBjdClhdD09PXV0JiYobi53YXJuKFwiQXhpcyBcIit1dCtcIiBpcyBzZXQgd2l0aCBib3RoIGEgKnNjYWxlYW5jaG9yKiBhbmQgKm1hdGNoZXMqIGNvbnN0cmFpbnQ7IGlnbm9yaW5nIHRoZSBzY2FsZSBjb25zdHJhaW50LlwiKSxkZWxldGUgY3RbdXRdLE9iamVjdC5rZXlzKGN0KS5sZW5ndGg8MiYmbnQuc3BsaWNlKGcsMSkpfX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo4MDEsXCIuL2F4aXNfZGVmYXVsdHNcIjo3NTEsXCIuL2F4aXNfaWRzXCI6NzUyLFwiLi9jb25zdHJhaW50c1wiOjc1NixcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo3NjEsXCIuL3Bvc2l0aW9uX2RlZmF1bHRzXCI6NzY0LFwiLi90eXBlX2RlZmF1bHRzXCI6NzcyfV0sNzYzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInRpbnljb2xvcjJcIikubWl4LGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiKS5saWdodEZyYWN0aW9uLGE9dChcIi4uLy4uL2xpYlwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHM9KG89b3x8e30pLmRmbHRDb2xvcjtmdW5jdGlvbiBsKHIsbil7cmV0dXJuIGEuY29lcmNlMih0LGUsby5hdHRyaWJ1dGVzLHIsbil9dmFyIGM9bChcImxpbmVjb2xvclwiLHMpLHU9bChcImxpbmV3aWR0aFwiKTtyKFwic2hvd2xpbmVcIixvLnNob3dMaW5lfHwhIWN8fCEhdSl8fChkZWxldGUgZS5saW5lY29sb3IsZGVsZXRlIGUubGluZXdpZHRoKTt2YXIgaD1sKFwiZ3JpZGNvbG9yXCIsbihzLG8uYmdDb2xvcixvLmJsZW5kfHxpKS50b1JnYlN0cmluZygpKSxmPWwoXCJncmlkd2lkdGhcIik7aWYocihcInNob3dncmlkXCIsby5zaG93R3JpZHx8ISFofHwhIWYpfHwoZGVsZXRlIGUuZ3JpZGNvbG9yLGRlbGV0ZSBlLmdyaWR3aWR0aCksIW8ubm9aZXJvTGluZSl7dmFyIHA9bChcInplcm9saW5lY29sb3JcIixzKSxkPWwoXCJ6ZXJvbGluZXdpZHRoXCIpO3IoXCJ6ZXJvbGluZVwiLG8uc2hvd0dyaWR8fCEhcHx8ISFkKXx8KGRlbGV0ZSBlLnplcm9saW5lY29sb3IsZGVsZXRlIGUuemVyb2xpbmV3aWR0aCl9fX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzXCI6NTc3LFwiLi4vLi4vbGliXCI6NzAxLHRpbnljb2xvcjI6NTIyfV0sNzY0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL2xpYlwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG8scyxsLGMsdT1hLmNvdW50ZXJBeGVzfHxbXSxoPWEub3ZlcmxheWFibGVBeGVzfHxbXSxmPWEubGV0dGVyLHA9YS5ncmlkO3AmJihzPXAuX2RvbWFpbnNbZl1bcC5fYXhpc01hcFtlLl9pZF1dLG89cC5fYW5jaG9yc1tlLl9pZF0scyYmKGw9cFtmK1wic2lkZVwiXS5zcGxpdChcIiBcIilbMF0sYz1wLmRvbWFpbltmXVtcInJpZ2h0XCI9PT1sfHxcInRvcFwiPT09bD8xOjBdKSkscz1zfHxbMCwxXSxvPW98fChuKHQucG9zaXRpb24pP1wiZnJlZVwiOnVbMF18fFwiZnJlZVwiKSxsPWx8fChcInhcIj09PWY/XCJib3R0b21cIjpcImxlZnRcIiksYz1jfHwwLFwiZnJlZVwiPT09aS5jb2VyY2UodCxlLHthbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImZyZWVcIl0uY29uY2F0KHUpLGRmbHQ6b319LFwiYW5jaG9yXCIpJiZyKFwicG9zaXRpb25cIixjKSxpLmNvZXJjZSh0LGUse3NpZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOlwieFwiPT09Zj9bXCJib3R0b21cIixcInRvcFwiXTpbXCJsZWZ0XCIsXCJyaWdodFwiXSxkZmx0Omx9fSxcInNpZGVcIik7dmFyIGQ9ITE7aWYoaC5sZW5ndGgmJihkPWkuY29lcmNlKHQsZSx7b3ZlcmxheWluZzp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6WyExXS5jb25jYXQoaCksZGZsdDohMX19LFwib3ZlcmxheWluZ1wiKSksIWQpe3ZhciBnPXIoXCJkb21haW5cIixzKTtnWzBdPmdbMV0tMS80MDk2JiYoZS5kb21haW49cyksaS5ub25lT3JBbGwodC5kb21haW4sZS5kb21haW4scyl9cmV0dXJuIHIoXCJsYXllclwiKSxlfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw3NjU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiKS5GUk9NX0JMO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dm9pZCAwPT09ciYmKHI9blt0LmNvbnN0cmFpbnRvd2FyZHx8XCJjZW50ZXJcIl0pO3ZhciBpPVt0LnIybCh0LnJhbmdlWzBdKSx0LnIybCh0LnJhbmdlWzFdKV0sYT1pWzBdKyhpWzFdLWlbMF0pKnI7dC5yYW5nZT10Ll9pbnB1dC5yYW5nZT1bdC5sMnIoYSsoaVswXS1hKSplKSx0LmwycihhKyhpWzFdLWEpKmUpXX19LHtcIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIjo2NzN9XSw3NjY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicG9seWJvb2xqc1wiKSxpPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIikscz10KFwiLi4vLi4vbGliXCIpLGw9dChcIi4uLy4uL2xpYi9wb2x5Z29uXCIpLGM9dChcIi4uLy4uL2xpYi90aHJvdHRsZVwiKSx1PXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnNcIikubWFrZUV2ZW50RGF0YSxoPXQoXCIuL2F4aXNfaWRzXCIpLmdldEZyb21JZCxmPXQoXCIuLi8uLi9saWIvY2xlYXJfZ2xfY2FudmFzZXNcIikscD10KFwiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXNcIikucmVkcmF3UmVnbFRyYWNlcyxkPXQoXCIuL2NvbnN0YW50c1wiKSxnPWQuTUlOU0VMRUNULHY9bC5maWx0ZXIsbT1sLnRlc3RlcjtmdW5jdGlvbiB5KHQpe3JldHVybiB0Ll9pZH1mdW5jdGlvbiB4KHQsZSxyLG4saSxhLG8pe3ZhciBzLGwsYyx1LGgsZixwLGQsZyx2PWUuX2hvdmVyZGF0YSxtPWUuX2Z1bGxMYXlvdXQuY2xpY2ttb2RlLmluZGV4T2YoXCJldmVudFwiKT4tMSx5PVtdO2lmKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZBcnJheS5pc0FycmF5KHQpJiYhMCE9PXRbMF0uaG92ZXJPbkJveH0odikpe2sodCxlLGEpO3ZhciB4PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXRbMF0sYT0tMSxvPVtdO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspaWYocj1lW25dLGkuZnVsbERhdGEuX2V4cGFuZGVkSW5kZXg9PT1yLmNkWzBdLnRyYWNlLl9leHBhbmRlZEluZGV4KXtpZighMD09PWkuaG92ZXJPbkJveClicmVhazt2b2lkIDAhPT1pLnBvaW50TnVtYmVyP2E9aS5wb2ludE51bWJlcjp2b2lkIDAhPT1pLmJpbk51bWJlciYmKGE9aS5iaW5OdW1iZXIsbz1pLnBvaW50TnVtYmVycyk7YnJlYWt9cmV0dXJue3BvaW50TnVtYmVyOmEscG9pbnROdW1iZXJzOm8sc2VhcmNoSW5mbzpyfX0odixzPVQoZSxyLG4saSkpO2lmKHgucG9pbnROdW1iZXJzLmxlbmd0aD4wP2Z1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9W107Zm9yKGk9MDtpPHQubGVuZ3RoO2krKykocj10W2ldKS5jZFswXS50cmFjZS5zZWxlY3RlZHBvaW50cyYmci5jZFswXS50cmFjZS5zZWxlY3RlZHBvaW50cy5sZW5ndGg+MCYmYS5wdXNoKHIpO2lmKDE9PT1hLmxlbmd0aCYmYVswXT09PWUuc2VhcmNoSW5mbyYmKG49ZS5zZWFyY2hJbmZvLmNkWzBdLnRyYWNlKS5zZWxlY3RlZHBvaW50cy5sZW5ndGg9PT1lLnBvaW50TnVtYmVycy5sZW5ndGgpe2ZvcihpPTA7aTxlLnBvaW50TnVtYmVycy5sZW5ndGg7aSsrKWlmKG4uc2VsZWN0ZWRwb2ludHMuaW5kZXhPZihlLnBvaW50TnVtYmVyc1tpXSk8MClyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4hMX0ocyx4KTpmdW5jdGlvbih0KXt2YXIgZSxyLG4saT0wO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspaWYoZT10W25dLChyPWUuY2RbMF0udHJhY2UpLnNlbGVjdGVkcG9pbnRzKXtpZihyLnNlbGVjdGVkcG9pbnRzLmxlbmd0aD4xKXJldHVybiExO2lmKChpKz1yLnNlbGVjdGVkcG9pbnRzLmxlbmd0aCk+MSlyZXR1cm4hMX1yZXR1cm4gMT09PWl9KHMpJiYoZj1TKHgpKSl7Zm9yKG8mJm8ucmVtb3ZlKCksZz0wO2c8cy5sZW5ndGg7ZysrKShsPXNbZ10pLl9tb2R1bGUuc2VsZWN0UG9pbnRzKGwsITEpO0UoZSxzKSxBKGEpLG0mJmUuZW1pdChcInBsb3RseV9kZXNlbGVjdFwiLG51bGwpfWVsc2V7Zm9yKHA9dC5zaGlmdEtleSYmKHZvaWQgMCE9PWY/ZjpTKHgpKSxjPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm57cG9pbnROdW1iZXI6dCxzZWFyY2hJbmZvOmUsc3VidHJhY3Q6cn19KHgucG9pbnROdW1iZXIseC5zZWFyY2hJbmZvLHApLHU9dyhhLnNlbGVjdGlvbkRlZnMuY29uY2F0KFtjXSkpLGc9MDtnPHMubGVuZ3RoO2crKylpZihoPUMoc1tnXS5fbW9kdWxlLnNlbGVjdFBvaW50cyhzW2ddLHUpLHNbZ10pLHkubGVuZ3RoKWZvcih2YXIgYj0wO2I8aC5sZW5ndGg7YisrKXkucHVzaChoW2JdKTtlbHNlIHk9aDtFKGUscyxkPXtwb2ludHM6eX0pLGMmJmEmJmEuc2VsZWN0aW9uRGVmcy5wdXNoKGMpLG8mJk0oYS5tZXJnZWRQb2x5Z29ucyxvKSxtJiZlLmVtaXQoXCJwbG90bHlfc2VsZWN0ZWRcIixkKX19fWZ1bmN0aW9uIGIodCl7cmV0dXJuXCJwb2ludE51bWJlclwiaW4gdCYmXCJzZWFyY2hJbmZvXCJpbiB0fWZ1bmN0aW9uIF8odCl7cmV0dXJue3htaW46MCx4bWF4OjAseW1pbjowLHltYXg6MCxwdHM6W10sY29udGFpbnM6ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9dC5zZWFyY2hJbmZvLmNkWzBdLnRyYWNlLl9leHBhbmRlZEluZGV4O3JldHVybiBpLmNkWzBdLnRyYWNlLl9leHBhbmRlZEluZGV4PT09YSYmbj09PXQucG9pbnROdW1iZXJ9LGlzUmVjdDohMSxkZWdlbmVyYXRlOiExLHN1YnRyYWN0OnQuc3VidHJhY3R9fWZ1bmN0aW9uIHcodCl7Zm9yKHZhciBlPVtdLHI9Yih0WzBdKT8wOnRbMF1bMF1bMF0sbj1yLGk9Yih0WzBdKT8wOnRbMF1bMF1bMV0sYT1pLG89MDtvPHQubGVuZ3RoO28rKylpZihiKHRbb10pKWUucHVzaChfKHRbb10pKTtlbHNle3ZhciBzPWwudGVzdGVyKHRbb10pO3Muc3VidHJhY3Q9dFtvXS5zdWJ0cmFjdCxlLnB1c2gocykscj1NYXRoLm1pbihyLHMueG1pbiksbj1NYXRoLm1heChuLHMueG1heCksaT1NYXRoLm1pbihpLHMueW1pbiksYT1NYXRoLm1heChhLHMueW1heCl9cmV0dXJue3htaW46cix4bWF4Om4seW1pbjppLHltYXg6YSxwdHM6W10sY29udGFpbnM6ZnVuY3Rpb24odCxyLG4saSl7Zm9yKHZhciBhPSExLG89MDtvPGUubGVuZ3RoO28rKyllW29dLmNvbnRhaW5zKHQscixuLGkpJiYoYT0hMT09PWVbb10uc3VidHJhY3QpO3JldHVybiBhfSxpc1JlY3Q6ITEsZGVnZW5lcmF0ZTohMX19ZnVuY3Rpb24gayh0LGUscil7dmFyIG49ZS5fZnVsbExheW91dCxpPXIucGxvdGluZm8sYT1uLl9sYXN0U2VsZWN0ZWRTdWJwbG90JiZuLl9sYXN0U2VsZWN0ZWRTdWJwbG90PT09aS5pZCxvPXQuc2hpZnRLZXl8fHQuYWx0S2V5O2EmJm8mJmkuc2VsZWN0aW9uJiZpLnNlbGVjdGlvbi5zZWxlY3Rpb25EZWZzJiYhci5zZWxlY3Rpb25EZWZzPyhyLnNlbGVjdGlvbkRlZnM9aS5zZWxlY3Rpb24uc2VsZWN0aW9uRGVmcyxyLm1lcmdlZFBvbHlnb25zPWkuc2VsZWN0aW9uLm1lcmdlZFBvbHlnb25zKTpvJiZpLnNlbGVjdGlvbnx8QShyKSxhfHwoTChlKSxuLl9sYXN0U2VsZWN0ZWRTdWJwbG90PWkuaWQpfWZ1bmN0aW9uIEEodCl7dmFyIGU9dC5wbG90aW5mbztlLnNlbGVjdGlvbj17fSxlLnNlbGVjdGlvbi5zZWxlY3Rpb25EZWZzPXQuc2VsZWN0aW9uRGVmcz1bXSxlLnNlbGVjdGlvbi5tZXJnZWRQb2x5Z29ucz10Lm1lcmdlZFBvbHlnb25zPVtdfWZ1bmN0aW9uIFQodCxlLHIsbil7dmFyIGksYSxvLHM9W10sbD1lLm1hcCh5KSxjPXIubWFwKHkpO2ZvcihvPTA7bzx0LmNhbGNkYXRhLmxlbmd0aDtvKyspaWYoITA9PT0oYT0oaT10LmNhbGNkYXRhW29dKVswXS50cmFjZSkudmlzaWJsZSYmYS5fbW9kdWxlJiZhLl9tb2R1bGUuc2VsZWN0UG9pbnRzKWlmKCFufHxhLnN1YnBsb3QhPT1uJiZhLmdlbyE9PW4paWYoXCJzcGxvbVwiPT09YS50eXBlJiZhLl94YXhlc1tsWzBdXSYmYS5feWF4ZXNbY1swXV0pe3ZhciB1PXAoYS5fbW9kdWxlLGksZVswXSxyWzBdKTt1LnNjZW5lPXQuX2Z1bGxMYXlvdXQuX3NwbG9tU2NlbmVzW2EudWlkXSxzLnB1c2godSl9ZWxzZSBpZihcInNhbmtleVwiPT09YS50eXBlKXt2YXIgZj1wKGEuX21vZHVsZSxpLGVbMF0sclswXSk7cy5wdXNoKGYpfWVsc2V7aWYoLTE9PT1sLmluZGV4T2YoYS54YXhpcykpY29udGludWU7aWYoLTE9PT1jLmluZGV4T2YoYS55YXhpcykpY29udGludWU7cy5wdXNoKHAoYS5fbW9kdWxlLGksaCh0LGEueGF4aXMpLGgodCxhLnlheGlzKSkpfWVsc2Ugcy5wdXNoKHAoYS5fbW9kdWxlLGksZVswXSxyWzBdKSk7cmV0dXJuIHM7ZnVuY3Rpb24gcCh0LGUscixuKXtyZXR1cm57X21vZHVsZTp0LGNkOmUseGF4aXM6cix5YXhpczpufX19ZnVuY3Rpb24gTSh0LGUpe3ZhciByLG4saT1bXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2kucHVzaChhLmpvaW4oXCJMXCIpK1wiTFwiK2FbMF0pfW49dC5sZW5ndGg+MD9cIk1cIitpLmpvaW4oXCJNXCIpK1wiWlwiOlwiTTAsMFpcIixlLmF0dHIoXCJkXCIsbil9ZnVuY3Rpb24gUyh0KXt2YXIgZT10LnNlYXJjaEluZm8uY2RbMF0udHJhY2Uscj10LnBvaW50TnVtYmVyLG49dC5wb2ludE51bWJlcnMsaT1uLmxlbmd0aD4wP25bMF06cjtyZXR1cm4hIWUuc2VsZWN0ZWRwb2ludHMmJmUuc2VsZWN0ZWRwb2ludHMuaW5kZXhPZihpKT4tMX1mdW5jdGlvbiBFKHQsZSxyKXt2YXIgbixhLG8scztmb3Iobj0wO248ZS5sZW5ndGg7bisrKXt2YXIgbD1lW25dLmNkWzBdLnRyYWNlLl9mdWxsSW5wdXQsYz10Ll9mdWxsTGF5b3V0Ll90cmFjZVByZUdVSVtsLnVpZF18fHt9O3ZvaWQgMD09PWMuc2VsZWN0ZWRwb2ludHMmJihjLnNlbGVjdGVkcG9pbnRzPWwuX2lucHV0LnNlbGVjdGVkcG9pbnRzfHxudWxsKX1pZihyKXt2YXIgdT1yLnBvaW50c3x8W107Zm9yKG49MDtuPGUubGVuZ3RoO24rKykocz1lW25dLmNkWzBdLnRyYWNlKS5faW5wdXQuc2VsZWN0ZWRwb2ludHM9cy5fZnVsbElucHV0LnNlbGVjdGVkcG9pbnRzPVtdLHMuX2Z1bGxJbnB1dCE9PXMmJihzLnNlbGVjdGVkcG9pbnRzPVtdKTtmb3Iobj0wO248dS5sZW5ndGg7bisrKXt2YXIgaD11W25dLGQ9aC5kYXRhLGc9aC5mdWxsRGF0YTtoLnBvaW50SW5kaWNlcz8oW10ucHVzaC5hcHBseShkLnNlbGVjdGVkcG9pbnRzLGgucG9pbnRJbmRpY2VzKSxzLl9mdWxsSW5wdXQhPT1zJiZbXS5wdXNoLmFwcGx5KGcuc2VsZWN0ZWRwb2ludHMsaC5wb2ludEluZGljZXMpKTooZC5zZWxlY3RlZHBvaW50cy5wdXNoKGgucG9pbnRJbmRleCkscy5fZnVsbElucHV0IT09cyYmZy5zZWxlY3RlZHBvaW50cy5wdXNoKGgucG9pbnRJbmRleCkpfX1lbHNlIGZvcihuPTA7bjxlLmxlbmd0aDtuKyspZGVsZXRlKHM9ZVtuXS5jZFswXS50cmFjZSkuc2VsZWN0ZWRwb2ludHMsZGVsZXRlIHMuX2lucHV0LnNlbGVjdGVkcG9pbnRzLHMuX2Z1bGxJbnB1dCE9PXMmJmRlbGV0ZSBzLl9mdWxsSW5wdXQuc2VsZWN0ZWRwb2ludHM7dmFyIHY9ITE7Zm9yKG49MDtuPGUubGVuZ3RoO24rKyl7cz0obz0oYT1lW25dKS5jZClbMF0udHJhY2UsaS50cmFjZUlzKHMsXCJyZWdsXCIpJiYodj0hMCk7dmFyIG09YS5fbW9kdWxlLHk9bS5zdHlsZU9uU2VsZWN0fHxtLnN0eWxlO3kmJnkodCxvKX12JiYoZih0KSxwKHQpKX1mdW5jdGlvbiBDKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIHI9ZS5jZCxuPWUuY2RbMF0udHJhY2UsaT0wO2k8dC5sZW5ndGg7aSsrKXRbaV09dSh0W2ldLG4scik7cmV0dXJuIHR9ZnVuY3Rpb24gTCh0KXt2YXIgZT0odC5fZnVsbExheW91dHx8e30pLl96b29tbGF5ZXI7ZSYmZS5zZWxlY3RBbGwoXCIuc2VsZWN0LW91dGxpbmVcIikucmVtb3ZlKCl9ZS5leHBvcnRzPXtwcmVwU2VsZWN0OmZ1bmN0aW9uKHQsZSxyLGksbCl7dmFyIHUsaCxmLHAseSxiLF8sUz1pLmdkLEw9Uy5fZnVsbExheW91dCx6PUwuX3pvb21sYXllcixPPWkuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxJPWkucGxvdGluZm8sRD1JLnhheGlzLl9vZmZzZXQsUD1JLnlheGlzLl9vZmZzZXQsUj1lLU8ubGVmdCxGPXItTy50b3AsQj1SLE49RixqPVwiTVwiK1IrXCIsXCIrRixWPWkueGF4ZXNbMF0uX2xlbmd0aCxVPWkueWF4ZXNbMF0uX2xlbmd0aCxxPWkueGF4ZXMuY29uY2F0KGkueWF4ZXMpLEg9dC5hbHRLZXk7ayh0LFMsaSksXCJsYXNzb1wiPT09bCYmKHU9dihbW1IsRl1dLGQuQkVORFBYKSk7dmFyIEc9ei5zZWxlY3RBbGwoXCJwYXRoLnNlbGVjdC1vdXRsaW5lLVwiK0kuaWQpLmRhdGEoWzEsMl0pO0cuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJjbGFzc1wiLGZ1bmN0aW9uKHQpe3JldHVyblwic2VsZWN0LW91dGxpbmUgc2VsZWN0LW91dGxpbmUtXCIrdCtcIiBzZWxlY3Qtb3V0bGluZS1cIitJLmlkfSkuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK0QrXCIsIFwiK1ArXCIpXCIpLmF0dHIoXCJkXCIsaitcIlpcIik7dmFyIFksVz16LmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsXCJ6b29tYm94LWNvcm5lcnNcIikuc3R5bGUoe2ZpbGw6YS5iYWNrZ3JvdW5kLHN0cm9rZTphLmRlZmF1bHRMaW5lLFwic3Ryb2tlLXdpZHRoXCI6MX0pLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIitEK1wiLCBcIitQK1wiKVwiKS5hdHRyKFwiZFwiLFwiTTAsMFpcIiksWD1MLl91aWQrZC5TRUxFQ1RJRCxaPVtdLCQ9VChTLGkueGF4ZXMsaS55YXhlcyxpLnN1YnBsb3QpO2Z1bmN0aW9uIEoodCl7dmFyIGU9XCJ5XCI9PT10Ll9pZC5jaGFyQXQoMCk/MTowO3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdC5wMmQocltlXSl9fWZ1bmN0aW9uIEsodCxlKXtyZXR1cm4gdC1lfVk9SS5maWxsUmFuZ2VJdGVtcz9JLmZpbGxSYW5nZUl0ZW1zOlwic2VsZWN0XCI9PT1sP2Z1bmN0aW9uKHQsZSl7dmFyIHI9dC5yYW5nZT17fTtmb3IoeT0wO3k8cS5sZW5ndGg7eSsrKXt2YXIgbj1xW3ldLGk9bi5faWQuY2hhckF0KDApO3Jbbi5faWRdPVtuLnAyZChlW2krXCJtaW5cIl0pLG4ucDJkKGVbaStcIm1heFwiXSldLnNvcnQoSyl9fTpmdW5jdGlvbih0LGUscil7dmFyIG49dC5sYXNzb1BvaW50cz17fTtmb3IoeT0wO3k8cS5sZW5ndGg7eSsrKXt2YXIgaT1xW3ldO25baS5faWRdPXIuZmlsdGVyZWQubWFwKEooaSkpfX0saS5tb3ZlRm49ZnVuY3Rpb24odCxlKXtCPU1hdGgubWF4KDAsTWF0aC5taW4oVix0K1IpKSxOPU1hdGgubWF4KDAsTWF0aC5taW4oVSxlK0YpKTt2YXIgcj1NYXRoLmFicyhCLVIpLGE9TWF0aC5hYnMoTi1GKTtpZihcInNlbGVjdFwiPT09bCl7dmFyIG89TC5zZWxlY3RkaXJlY3Rpb247XCJoXCI9PT0obz1cImFueVwiPT09TC5zZWxlY3RkaXJlY3Rpb24/YTxNYXRoLm1pbiguNipyLGcpP1wiaFwiOnI8TWF0aC5taW4oLjYqYSxnKT9cInZcIjpcImRcIjpMLnNlbGVjdGRpcmVjdGlvbik/KChwPVtbUiwwXSxbUixVXSxbQixVXSxbQiwwXV0pLnhtaW49TWF0aC5taW4oUixCKSxwLnhtYXg9TWF0aC5tYXgoUixCKSxwLnltaW49TWF0aC5taW4oMCxVKSxwLnltYXg9TWF0aC5tYXgoMCxVKSxXLmF0dHIoXCJkXCIsXCJNXCIrcC54bWluK1wiLFwiKyhGLWcpK1wiaC00dlwiKzIqZytcImg0Wk1cIisocC54bWF4LTEpK1wiLFwiKyhGLWcpK1wiaDR2XCIrMipnK1wiaC00WlwiKSk6XCJ2XCI9PT1vPygocD1bWzAsRl0sWzAsTl0sW1YsTl0sW1YsRl1dKS54bWluPU1hdGgubWluKDAsVikscC54bWF4PU1hdGgubWF4KDAsVikscC55bWluPU1hdGgubWluKEYsTikscC55bWF4PU1hdGgubWF4KEYsTiksVy5hdHRyKFwiZFwiLFwiTVwiKyhSLWcpK1wiLFwiK3AueW1pbitcInYtNGhcIisyKmcrXCJ2NFpNXCIrKFItZykrXCIsXCIrKHAueW1heC0xKStcInY0aFwiKzIqZytcInYtNFpcIikpOlwiZFwiPT09byYmKChwPVtbUixGXSxbUixOXSxbQixOXSxbQixGXV0pLnhtaW49TWF0aC5taW4oUixCKSxwLnhtYXg9TWF0aC5tYXgoUixCKSxwLnltaW49TWF0aC5taW4oRixOKSxwLnltYXg9TWF0aC5tYXgoRixOKSxXLmF0dHIoXCJkXCIsXCJNMCwwWlwiKSl9ZWxzZVwibGFzc29cIj09PWwmJih1LmFkZFB0KFtCLE5dKSxwPXUuZmlsdGVyZWQpO2kuc2VsZWN0aW9uRGVmcyYmaS5zZWxlY3Rpb25EZWZzLmxlbmd0aD8oZj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHI/bi5kaWZmZXJlbmNlKHtyZWdpb25zOnQsaW52ZXJ0ZWQ6ITF9LHtyZWdpb25zOltlXSxpbnZlcnRlZDohMX0pLnJlZ2lvbnM6bi51bmlvbih7cmVnaW9uczp0LGludmVydGVkOiExfSx7cmVnaW9uczpbZV0saW52ZXJ0ZWQ6ITF9KS5yZWdpb25zfShpLm1lcmdlZFBvbHlnb25zLHAsSCkscC5zdWJ0cmFjdD1ILGg9dyhpLnNlbGVjdGlvbkRlZnMuY29uY2F0KFtwXSkpKTooZj1bcF0saD1tKHApKSxNKGYsRyksYy50aHJvdHRsZShYLGQuU0VMRUNUREVMQVksZnVuY3Rpb24oKXt2YXIgdDtaPVtdO3ZhciBlLHI9W107Zm9yKHk9MDt5PCQubGVuZ3RoO3krKylpZihlPShiPSRbeV0pLl9tb2R1bGUuc2VsZWN0UG9pbnRzKGIsaCksci5wdXNoKGUpLHQ9QyhlLGIpLFoubGVuZ3RoKWZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKVoucHVzaCh0W25dKTtlbHNlIFo9dDtFKFMsJCxfPXtwb2ludHM6Wn0pLFkoXyxwLHUpLGkuZ2QuZW1pdChcInBsb3RseV9zZWxlY3RpbmdcIixfKX0pfSxpLmNsaWNrRm49ZnVuY3Rpb24odCxlKXt2YXIgcj1MLmNsaWNrbW9kZTtXLnJlbW92ZSgpLGMuZG9uZShYKS50aGVuKGZ1bmN0aW9uKCl7aWYoYy5jbGVhcihYKSwyPT09dCl7Zm9yKEcucmVtb3ZlKCkseT0wO3k8JC5sZW5ndGg7eSsrKShiPSRbeV0pLl9tb2R1bGUuc2VsZWN0UG9pbnRzKGIsITEpO0UoUywkKSxBKGkpLFMuZW1pdChcInBsb3RseV9kZXNlbGVjdFwiLG51bGwpfWVsc2Ugci5pbmRleE9mKFwic2VsZWN0XCIpPi0xJiZ4KGUsUyxpLnhheGVzLGkueWF4ZXMsaS5zdWJwbG90LGksRyksXCJldmVudFwiPT09ciYmUy5lbWl0KFwicGxvdGx5X3NlbGVjdGVkXCIsdm9pZCAwKTtvLmNsaWNrKFMsZSl9KS5jYXRjaChzLmVycm9yKX0saS5kb25lRm49ZnVuY3Rpb24oKXtXLnJlbW92ZSgpLGMuZG9uZShYKS50aGVuKGZ1bmN0aW9uKCl7Yy5jbGVhcihYKSxpLmdkLmVtaXQoXCJwbG90bHlfc2VsZWN0ZWRcIixfKSxwJiZpLnNlbGVjdGlvbkRlZnMmJihwLnN1YnRyYWN0PUgsaS5zZWxlY3Rpb25EZWZzLnB1c2gocCksaS5tZXJnZWRQb2x5Z29ucy5sZW5ndGg9MCxbXS5wdXNoLmFwcGx5KGkubWVyZ2VkUG9seWdvbnMsZikpLGkuZG9uZUZuQ29tcGxldGVkJiZpLmRvbmVGbkNvbXBsZXRlZChaKX0pLmNhdGNoKHMuZXJyb3IpfX0sY2xlYXJTZWxlY3Q6TCxzZWxlY3RPbkNsaWNrOnh9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVyc1wiOjYxMyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlc1wiOjY4NixcIi4uLy4uL2xpYi9wb2x5Z29uXCI6NzEzLFwiLi4vLi4vbGliL3Rocm90dGxlXCI6NzI2LFwiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXNcIjo3NDAsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vYXhpc19pZHNcIjo3NTIsXCIuL2NvbnN0YW50c1wiOjc1NSxwb2x5Ym9vbGpzOjQ2Nn1dLDc2NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxhPXQoXCIuLi8uLi9saWJcIiksbz1hLmNsZWFuTnVtYmVyLHM9YS5tczJEYXRlVGltZSxsPWEuZGF0ZVRpbWUybXMsYz1hLmVuc3VyZU51bWJlcix1PWEuaXNBcnJheU9yVHlwZWRBcnJheSxoPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLGY9aC5GUF9TQUZFLHA9aC5CQUROVU0sZD1oLkxPR19DTElQLGc9dChcIi4vY29uc3RhbnRzXCIpLHY9dChcIi4vYXhpc19pZHNcIik7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gTWF0aC5wb3coMTAsdCl9ZnVuY3Rpb24geSh0KXtyZXR1cm4gbnVsbCE9dH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlPWV8fHt9O3ZhciByPXQuX2lkfHxcInhcIixoPXIuY2hhckF0KDApO2Z1bmN0aW9uIHgoZSxyKXtpZihlPjApcmV0dXJuIE1hdGgubG9nKGUpL01hdGguTE4xMDtpZihlPD0wJiZyJiZ0LnJhbmdlJiYyPT09dC5yYW5nZS5sZW5ndGgpe3ZhciBuPXQucmFuZ2VbMF0saT10LnJhbmdlWzFdO3JldHVybi41KihuK2ktMipkKk1hdGguYWJzKG4taSkpfXJldHVybiBwfWZ1bmN0aW9uIGIoZSxyLG4pe3ZhciBvPWwoZSxufHx0LmNhbGVuZGFyKTtpZihvPT09cCl7aWYoIWkoZSkpcmV0dXJuIHA7ZT0rZTt2YXIgcz1NYXRoLmZsb29yKDEwKmEubW9kKGUrLjA1LDEpKSxjPU1hdGgucm91bmQoZS1zLzEwKTtvPWwobmV3IERhdGUoYykpK3MvMTB9cmV0dXJuIG99ZnVuY3Rpb24gXyhlLHIsbil7cmV0dXJuIHMoZSxyLG58fHQuY2FsZW5kYXIpfWZ1bmN0aW9uIHcoZSl7cmV0dXJuIHQuX2NhdGVnb3JpZXNbTWF0aC5yb3VuZChlKV19ZnVuY3Rpb24gayhlKXtpZih5KGUpKXtpZih2b2lkIDA9PT10Ll9jYXRlZ29yaWVzTWFwJiYodC5fY2F0ZWdvcmllc01hcD17fSksdm9pZCAwIT09dC5fY2F0ZWdvcmllc01hcFtlXSlyZXR1cm4gdC5fY2F0ZWdvcmllc01hcFtlXTt0Ll9jYXRlZ29yaWVzLnB1c2goZSk7dmFyIHI9dC5fY2F0ZWdvcmllcy5sZW5ndGgtMTtyZXR1cm4gdC5fY2F0ZWdvcmllc01hcFtlXT1yLHJ9cmV0dXJuIHB9ZnVuY3Rpb24gQShlKXtpZih0Ll9jYXRlZ29yaWVzTWFwKXJldHVybiB0Ll9jYXRlZ29yaWVzTWFwW2VdfWZ1bmN0aW9uIFQodCl7dmFyIGU9QSh0KTtyZXR1cm4gdm9pZCAwIT09ZT9lOmkodCk/K3Q6dm9pZCAwfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIGkoZSk/bi5yb3VuZCh0Ll9iK3QuX20qZSwyKTpwfWZ1bmN0aW9uIFMoZSl7cmV0dXJuKGUtdC5fYikvdC5fbX10LmMybD1cImxvZ1wiPT09dC50eXBlP3g6Yyx0LmwyYz1cImxvZ1wiPT09dC50eXBlP206Yyx0LmwycD1NLHQucDJsPVMsdC5jMnA9XCJsb2dcIj09PXQudHlwZT9mdW5jdGlvbih0LGUpe3JldHVybiBNKHgodCxlKSl9Ok0sdC5wMmM9XCJsb2dcIj09PXQudHlwZT9mdW5jdGlvbih0KXtyZXR1cm4gbShTKHQpKX06UywtMSE9PVtcImxpbmVhclwiLFwiLVwiXS5pbmRleE9mKHQudHlwZSk/KHQuZDJyPXQucjJkPXQuZDJjPXQucjJjPXQuZDJsPXQucjJsPW8sdC5jMmQ9dC5jMnI9dC5sMmQ9dC5sMnI9Yyx0LmQycD10LnIycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5sMnAobyhlKSl9LHQucDJkPXQucDJyPVMsdC5jbGVhblBvcz1jKTpcImxvZ1wiPT09dC50eXBlPyh0LmQycj10LmQybD1mdW5jdGlvbih0LGUpe3JldHVybiB4KG8odCksZSl9LHQucjJkPXQucjJjPWZ1bmN0aW9uKHQpe3JldHVybiBtKG8odCkpfSx0LmQyYz10LnIybD1vLHQuYzJkPXQubDJyPWMsdC5jMnI9eCx0LmwyZD1tLHQuZDJwPWZ1bmN0aW9uKGUscil7cmV0dXJuIHQubDJwKHQuZDJyKGUscikpfSx0LnAyZD1mdW5jdGlvbih0KXtyZXR1cm4gbShTKHQpKX0sdC5yMnA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQubDJwKG8oZSkpfSx0LnAycj1TLHQuY2xlYW5Qb3M9Yyk6XCJkYXRlXCI9PT10LnR5cGU/KHQuZDJyPXQucjJkPWEuaWRlbnRpdHksdC5kMmM9dC5yMmM9dC5kMmw9dC5yMmw9Yix0LmMyZD10LmMycj10LmwyZD10Lmwycj1fLHQuZDJwPXQucjJwPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdC5sMnAoYihlLDAsbikpfSx0LnAyZD10LnAycj1mdW5jdGlvbih0LGUscil7cmV0dXJuIF8oUyh0KSxlLHIpfSx0LmNsZWFuUG9zPWZ1bmN0aW9uKGUpe3JldHVybiBhLmNsZWFuRGF0ZShlLHAsdC5jYWxlbmRhcil9KTpcImNhdGVnb3J5XCI9PT10LnR5cGU/KHQuZDJjPXQuZDJsPWssdC5yMmQ9dC5jMmQ9dC5sMmQ9dyx0LmQycj10LmQybF9ub2FkZD1ULHQucjJjPWZ1bmN0aW9uKGUpe3ZhciByPVQoZSk7cmV0dXJuIHZvaWQgMCE9PXI/cjp0LmZyYWN0aW9uMnIoLjUpfSx0Lmwycj10LmMycj1jLHQucjJsPVQsdC5kMnA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQubDJwKHQucjJjKGUpKX0sdC5wMmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHcoUyh0KSl9LHQucjJwPXQuZDJwLHQucDJyPVMsdC5jbGVhblBvcz1mdW5jdGlvbih0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdCYmXCJcIiE9PXQ/dDpjKHQpfSk6XCJtdWx0aWNhdGVnb3J5XCI9PT10LnR5cGUmJih0LnIyZD10LmMyZD10LmwyZD13LHQuZDJyPXQuZDJsX25vYWRkPVQsdC5yMmM9ZnVuY3Rpb24oZSl7dmFyIHI9VChlKTtyZXR1cm4gdm9pZCAwIT09cj9yOnQuZnJhY3Rpb24yciguNSl9LHQucjJjX2p1c3RfaW5kaWNlcz1BLHQubDJyPXQuYzJyPWMsdC5yMmw9VCx0LmQycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5sMnAodC5yMmMoZSkpfSx0LnAyZD1mdW5jdGlvbih0KXtyZXR1cm4gdyhTKHQpKX0sdC5yMnA9dC5kMnAsdC5wMnI9Uyx0LmNsZWFuUG9zPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfHxcInN0cmluZ1wiPT10eXBlb2YgdCYmXCJcIiE9PXQ/dDpjKHQpfSx0LnNldHVwTXVsdGlDYXRlZ29yeT1mdW5jdGlvbihuKXt2YXIgaSxvLHM9dC5fdHJhY2VJbmRpY2VzLGw9ZS5fYXhpc01hdGNoR3JvdXBzO2lmKGwmJmwubGVuZ3RoJiYwPT09dC5fY2F0ZWdvcmllcy5sZW5ndGgpZm9yKGk9MDtpPGwubGVuZ3RoO2krKyl7dmFyIGM9bFtpXTtpZihjW3JdKWZvcih2YXIgZiBpbiBjKWlmKGYhPT1yKXt2YXIgcD1lW3YuaWQybmFtZShmKV07cz1zLmNvbmNhdChwLl90cmFjZUluZGljZXMpfX12YXIgZD1bWzAse31dLFswLHt9XV0sZz1bXTtmb3IoaT0wO2k8cy5sZW5ndGg7aSsrKXt2YXIgbT1uW3NbaV1dO2lmKGggaW4gbSl7dmFyIHg9bVtoXSxiPW0uX2xlbmd0aHx8YS5taW5Sb3dMZW5ndGgoeCk7aWYodSh4WzBdKSYmdSh4WzFdKSlmb3Iobz0wO288YjtvKyspe3ZhciBfPXhbMF1bb10sdz14WzFdW29dO3koXykmJnkodykmJihnLnB1c2goW18sd10pLF8gaW4gZFswXVsxXXx8KGRbMF1bMV1bX109ZFswXVswXSsrKSx3IGluIGRbMV1bMV18fChkWzFdWzFdW3ddPWRbMV1bMF0rKykpfX19Zm9yKGcuc29ydChmdW5jdGlvbih0LGUpe3ZhciByPWRbMF1bMV0sbj1yW3RbMF1dLXJbZVswXV07aWYobilyZXR1cm4gbjt2YXIgaT1kWzFdWzFdO3JldHVybiBpW3RbMV1dLWlbZVsxXV19KSxpPTA7aTxnLmxlbmd0aDtpKyspayhnW2ldKX0pLHQuZnJhY3Rpb24ycj1mdW5jdGlvbihlKXt2YXIgcj10LnIybCh0LnJhbmdlWzBdKSxuPXQucjJsKHQucmFuZ2VbMV0pO3JldHVybiB0LmwycihyK2UqKG4tcikpfSx0LnIyZnJhY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHI9dC5yMmwodC5yYW5nZVswXSksbj10LnIybCh0LnJhbmdlWzFdKTtyZXR1cm4odC5yMmwoZSktcikvKG4tcil9LHQuY2xlYW5SYW5nZT1mdW5jdGlvbihlLHIpe3J8fChyPXt9KSxlfHwoZT1cInJhbmdlXCIpO3ZhciBuLG8scz1hLm5lc3RlZFByb3BlcnR5KHQsZSkuZ2V0KCk7aWYobz0obz1cImRhdGVcIj09PXQudHlwZT9hLmRmbHRSYW5nZSh0LmNhbGVuZGFyKTpcInlcIj09PWg/Zy5ERkxUUkFOR0VZOnIuZGZsdFJhbmdlfHxnLkRGTFRSQU5HRVgpLnNsaWNlKCkscyYmMj09PXMubGVuZ3RoKWZvcihcImRhdGVcIj09PXQudHlwZSYmKHNbMF09YS5jbGVhbkRhdGUoc1swXSxwLHQuY2FsZW5kYXIpLHNbMV09YS5jbGVhbkRhdGUoc1sxXSxwLHQuY2FsZW5kYXIpKSxuPTA7bjwyO24rKylpZihcImRhdGVcIj09PXQudHlwZSl7aWYoIWEuaXNEYXRlVGltZShzW25dLHQuY2FsZW5kYXIpKXt0W2VdPW87YnJlYWt9aWYodC5yMmwoc1swXSk9PT10LnIybChzWzFdKSl7dmFyIGw9YS5jb25zdHJhaW4odC5yMmwoc1swXSksYS5NSU5fTVMrMWUzLGEuTUFYX01TLTFlMyk7c1swXT10LmwycihsLTFlMyksc1sxXT10LmwycihsKzFlMyk7YnJlYWt9fWVsc2V7aWYoIWkoc1tuXSkpe2lmKCFpKHNbMS1uXSkpe3RbZV09bzticmVha31zW25dPXNbMS1uXSoobj8xMDouMSl9aWYoc1tuXTwtZj9zW25dPS1mOnNbbl0+ZiYmKHNbbl09Ziksc1swXT09PXNbMV0pe3ZhciBjPU1hdGgubWF4KDEsTWF0aC5hYnMoMWUtNipzWzBdKSk7c1swXS09YyxzWzFdKz1jfX1lbHNlIGEubmVzdGVkUHJvcGVydHkodCxlKS5zZXQobyl9LHQuc2V0U2NhbGU9ZnVuY3Rpb24ocil7dmFyIG49ZS5fc2l6ZTtpZih0Lm92ZXJsYXlpbmcpe3ZhciBpPXYuZ2V0RnJvbUlkKHtfZnVsbExheW91dDplfSx0Lm92ZXJsYXlpbmcpO3QuZG9tYWluPWkuZG9tYWlufXZhciBhPXImJnQuX3I/XCJfclwiOlwicmFuZ2VcIixvPXQuY2FsZW5kYXI7dC5jbGVhblJhbmdlKGEpO3ZhciBzPXQucjJsKHRbYV1bMF0sbyksbD10LnIybCh0W2FdWzFdLG8pO2lmKFwieVwiPT09aD8odC5fb2Zmc2V0PW4udCsoMS10LmRvbWFpblsxXSkqbi5oLHQuX2xlbmd0aD1uLmgqKHQuZG9tYWluWzFdLXQuZG9tYWluWzBdKSx0Ll9tPXQuX2xlbmd0aC8ocy1sKSx0Ll9iPS10Ll9tKmwpOih0Ll9vZmZzZXQ9bi5sK3QuZG9tYWluWzBdKm4udyx0Ll9sZW5ndGg9bi53Kih0LmRvbWFpblsxXS10LmRvbWFpblswXSksdC5fbT10Ll9sZW5ndGgvKGwtcyksdC5fYj0tdC5fbSpzKSwhaXNGaW5pdGUodC5fbSl8fCFpc0Zpbml0ZSh0Ll9iKXx8dC5fbGVuZ3RoPDApdGhyb3cgZS5fcmVwbG90dGluZz0hMSxuZXcgRXJyb3IoXCJTb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIGF4aXMgc2NhbGluZ1wiKX0sdC5tYWtlQ2FsY2RhdGE9ZnVuY3Rpb24oZSxyKXt2YXIgbixpLG8scyxsPXQudHlwZSxjPVwiZGF0ZVwiPT09bCYmZVtyK1wiY2FsZW5kYXJcIl07aWYociBpbiBlKXtpZihuPWVbcl0scz1lLl9sZW5ndGh8fGEubWluUm93TGVuZ3RoKG4pLGEuaXNUeXBlZEFycmF5KG4pJiYoXCJsaW5lYXJcIj09PWx8fFwibG9nXCI9PT1sKSl7aWYocz09PW4ubGVuZ3RoKXJldHVybiBuO2lmKG4uc3ViYXJyYXkpcmV0dXJuIG4uc3ViYXJyYXkoMCxzKX1pZihcIm11bHRpY2F0ZWdvcnlcIj09PWwpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl7dmFyIGk9KHRbMF18fFtdKVtuXSxhPSh0WzFdfHxbXSlbbl07cltuXT1BKFtpLGFdKX1yZXR1cm4gcn0obixzKTtmb3IoaT1uZXcgQXJyYXkocyksbz0wO288cztvKyspaVtvXT10LmQyYyhuW29dLDAsYyl9ZWxzZXt2YXIgdT1yK1wiMFwiaW4gZT90LmQyYyhlW3IrXCIwXCJdLDAsYyk6MCxoPWVbXCJkXCIrcl0/TnVtYmVyKGVbXCJkXCIrcl0pOjE7Zm9yKG49ZVt7eDpcInlcIix5OlwieFwifVtyXV0scz1lLl9sZW5ndGh8fG4ubGVuZ3RoLGk9bmV3IEFycmF5KHMpLG89MDtvPHM7bysrKWlbb109dStvKmh9cmV0dXJuIGl9LHQuaXNWYWxpZFJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpJiYyPT09ZS5sZW5ndGgmJmkodC5yMmwoZVswXSkpJiZpKHQucjJsKGVbMV0pKX0sdC5pc1B0V2l0aGluUmFuZ2U9ZnVuY3Rpb24oZSxyKXt2YXIgbj10LmMybChlW2hdLG51bGwsciksaT10LnIybCh0LnJhbmdlWzBdKSxhPXQucjJsKHQucmFuZ2VbMV0pO3JldHVybiBpPGE/aTw9biYmbjw9YTphPD1uJiZuPD1pfSx0LmNsZWFyQ2FsYz1mdW5jdGlvbigpe3ZhciBuPWZ1bmN0aW9uKCl7dC5fY2F0ZWdvcmllcz1bXSx0Ll9jYXRlZ29yaWVzTWFwPXt9fSxpPWUuX2F4aXNNYXRjaEdyb3VwcztpZihpJiZpLmxlbmd0aCl7Zm9yKHZhciBhPSExLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9aVtvXTtpZihzW3JdKXthPSEwO3ZhciBsPW51bGwsYz1udWxsO2Zvcih2YXIgdSBpbiBzKXt2YXIgaD1lW3YuaWQybmFtZSh1KV07aWYoaC5fY2F0ZWdvcmllcyl7bD1oLl9jYXRlZ29yaWVzLGM9aC5fY2F0ZWdvcmllc01hcDticmVha319bCYmYz8odC5fY2F0ZWdvcmllcz1sLHQuX2NhdGVnb3JpZXNNYXA9Yyk6bigpO2JyZWFrfX1hfHxuKCl9ZWxzZSBuKCk7aWYodC5faW5pdGlhbENhdGVnb3JpZXMpZm9yKHZhciBmPTA7Zjx0Ll9pbml0aWFsQ2F0ZWdvcmllcy5sZW5ndGg7ZisrKWsodC5faW5pdGlhbENhdGVnb3JpZXNbZl0pfTt2YXIgRT1lLl9kM2xvY2FsZTtcImRhdGVcIj09PXQudHlwZSYmKHQuX2RhdGVGb3JtYXQ9RT9FLnRpbWVGb3JtYXQudXRjOm4udGltZS5mb3JtYXQudXRjLHQuX2V4dHJhRm9ybWF0PWUuX2V4dHJhRm9ybWF0KSx0Ll9zZXBhcmF0b3JzPWUuc2VwYXJhdG9ycyx0Ll9udW1Gb3JtYXQ9RT9FLm51bWJlckZvcm1hdDpuLmZvcm1hdCxkZWxldGUgdC5fbWluRHRpY2ssZGVsZXRlIHQuX2ZvcmNlVGljazB9fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi9heGlzX2lkc1wiOjc1MixcIi4vY29uc3RhbnRzXCI6NzU1LGQzOjE1NSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sNzY4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0c1wiKTtmdW5jdGlvbiBvKHQsZSl7ZnVuY3Rpb24gcihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaS50aWNrZm9ybWF0c3RvcHMscixhKX1yKFwiZW5hYmxlZFwiKSYmKHIoXCJkdGlja3JhbmdlXCIpLHIoXCJ2YWx1ZVwiKSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCl7dmFyIGM9ZnVuY3Rpb24odCl7dmFyIGU9W1wic2hvd2V4cG9uZW50XCIsXCJzaG93dGlja3ByZWZpeFwiLFwic2hvd3RpY2tzdWZmaXhcIl0uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT10W2VdfSk7aWYoZS5ldmVyeShmdW5jdGlvbihyKXtyZXR1cm4gdFtyXT09PXRbZVswXV19KXx8MT09PWUubGVuZ3RoKXJldHVybiB0W2VbMF1dfSh0KTtpZihyKFwidGlja3ByZWZpeFwiKSYmcihcInNob3d0aWNrcHJlZml4XCIsYykscihcInRpY2tzdWZmaXhcIixsLnRpY2tTdWZmaXhEZmx0KSYmcihcInNob3d0aWNrc3VmZml4XCIsYykscihcInNob3d0aWNrbGFiZWxzXCIpKXt2YXIgdT1sLmZvbnR8fHt9LGg9ZS5jb2xvcixmPWgmJmghPT1pLmNvbG9yLmRmbHQ/aDp1LmNvbG9yO2lmKG4uY29lcmNlRm9udChyLFwidGlja2ZvbnRcIix7ZmFtaWx5OnUuZmFtaWx5LHNpemU6dS5zaXplLGNvbG9yOmZ9KSxyKFwidGlja2FuZ2xlXCIpLFwiY2F0ZWdvcnlcIiE9PXMpe3ZhciBwPXIoXCJ0aWNrZm9ybWF0XCIpLGQ9dC50aWNrZm9ybWF0c3RvcHM7QXJyYXkuaXNBcnJheShkKSYmZC5sZW5ndGgmJmEodCxlLHtuYW1lOlwidGlja2Zvcm1hdHN0b3BzXCIsaW5jbHVzaW9uQXR0cjpcImVuYWJsZWRcIixoYW5kbGVJdGVtRGVmYXVsdHM6b30pLHB8fFwiZGF0ZVwiPT09c3x8KHIoXCJzaG93ZXhwb25lbnRcIixjKSxyKFwiZXhwb25lbnRmb3JtYXRcIikscihcInNlcGFyYXRldGhvdXNhbmRzXCIpKX19fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCI6NzQ1LFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjc2MX1dLDc2OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89bi5jb2VyY2UyKHQsZSxpLFwidGlja2xlblwiKSxzPW4uY29lcmNlMih0LGUsaSxcInRpY2t3aWR0aFwiKSxsPW4uY29lcmNlMih0LGUsaSxcInRpY2tjb2xvclwiLGUuY29sb3IpO3IoXCJ0aWNrc1wiLGEub3V0ZXJUaWNrc3x8b3x8c3x8bD9cIm91dHNpZGVcIjpcIlwiKXx8KGRlbGV0ZSBlLnRpY2tsZW4sZGVsZXRlIGUudGlja3dpZHRoLGRlbGV0ZSBlLnRpY2tjb2xvcil9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6NzYxfV0sNzcwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vY2xlYW5fdGlja3NcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhO1wiYXJyYXlcIiE9PXQudGlja21vZGV8fFwibG9nXCIhPT1pJiZcImRhdGVcIiE9PWk/YT1yKFwidGlja21vZGVcIixBcnJheS5pc0FycmF5KHQudGlja3ZhbHMpP1wiYXJyYXlcIjp0LmR0aWNrP1wibGluZWFyXCI6XCJhdXRvXCIpOmE9ZS50aWNrbW9kZT1cImF1dG9cIjtpZihcImF1dG9cIj09PWEpcihcIm50aWNrc1wiKTtlbHNlIGlmKFwibGluZWFyXCI9PT1hKXt2YXIgbz1lLmR0aWNrPW4uZHRpY2sodC5kdGljayxpKTtlLnRpY2swPW4udGljazAodC50aWNrMCxpLGUuY2FsZW5kYXIsbyl9ZWxzZSBpZihcIm11bHRpY2F0ZWdvcnlcIiE9PWkpe3ZvaWQgMD09PXIoXCJ0aWNrdmFsc1wiKT9lLnRpY2ttb2RlPVwiYXV0b1wiOnIoXCJ0aWNrdGV4dFwiKX19fSx7XCIuL2NsZWFuX3RpY2tzXCI6NzU0fV0sNzcxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxvPXQoXCIuL2F4ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe3ZhciBsPXQuX2Z1bGxMYXlvdXQ7aWYoMCE9PWUubGVuZ3RoKXt2YXIgYyx1LGgsZjtzJiYoYz1zKCkpO3ZhciBwPW4uZWFzZShyLmVhc2luZyk7cmV0dXJuIHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MucHVzaChmdW5jdGlvbigpe3JldHVybiB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoZiksZj1udWxsLGZ1bmN0aW9uKCl7Zm9yKHZhciByPXt9LG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGE9ZVtuXTthLnhyMCYmKHJbYS5wbG90aW5mby54YXhpcy5fbmFtZStcIi5yYW5nZVwiXT1hLnhyMC5zbGljZSgpKSxhLnlyMCYmKHJbYS5wbG90aW5mby55YXhpcy5fbmFtZStcIi5yYW5nZVwiXT1hLnlyMC5zbGljZSgpKX1yZXR1cm4gaS5jYWxsKFwicmVsYXlvdXRcIix0LHIpLnRoZW4oZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKylkKGVbdF0ucGxvdGluZm8pfSl9KCl9KSx1PURhdGUubm93KCksZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIG4oKXtoPURhdGUubm93KCk7Zm9yKHZhciBhPU1hdGgubWluKDEsKGgtdSkvci5kdXJhdGlvbiksbz1wKGEpLHM9MDtzPGUubGVuZ3RoO3MrKylnKGVbc10sbyk7aC11PnIuZHVyYXRpb24/KGZ1bmN0aW9uKCl7Zm9yKHZhciByPXt9LG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGE9ZVtuXTthLnhyMSYmKHJbYS5wbG90aW5mby54YXhpcy5fbmFtZStcIi5yYW5nZVwiXT1hLnhyMS5zbGljZSgpKSxhLnlyMSYmKHJbYS5wbG90aW5mby55YXhpcy5fbmFtZStcIi5yYW5nZVwiXT1hLnlyMS5zbGljZSgpKX1jJiZjKCksaS5jYWxsKFwicmVsYXlvdXRcIix0LHIpLnRoZW4oZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKylkKGVbdF0ucGxvdGluZm8pfSl9KCksZj13aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUobikpOmY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShuKX0pLFByb21pc2UucmVzb2x2ZSgpfWZ1bmN0aW9uIGQodCl7dmFyIGU9dC54YXhpcyxyPXQueWF4aXM7bC5fZGVmcy5zZWxlY3QoXCIjXCIrdC5jbGlwSWQrXCI+IHJlY3RcIikuY2FsbChhLnNldFRyYW5zbGF0ZSwwLDApLmNhbGwoYS5zZXRTY2FsZSwxLDEpLHQucGxvdC5jYWxsKGEuc2V0VHJhbnNsYXRlLGUuX29mZnNldCxyLl9vZmZzZXQpLmNhbGwoYS5zZXRTY2FsZSwxLDEpO3ZhciBuPXQucGxvdC5zZWxlY3RBbGwoXCIuc2NhdHRlcmxheWVyIC50cmFjZVwiKTtuLnNlbGVjdEFsbChcIi5wb2ludFwiKS5jYWxsKGEuc2V0UG9pbnRHcm91cFNjYWxlLDEsMSksbi5zZWxlY3RBbGwoXCIudGV4dHBvaW50XCIpLmNhbGwoYS5zZXRUZXh0UG9pbnRzU2NhbGUsMSwxKSxuLmNhbGwoYS5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLHQpfWZ1bmN0aW9uIGcoZSxyKXt2YXIgbj1lLnBsb3RpbmZvLGk9bi54YXhpcyxzPW4ueWF4aXMsbD1lLnhyMCxjPWUueHIxLHU9aS5fbGVuZ3RoLGg9ZS55cjAsZj1lLnlyMSxwPXMuX2xlbmd0aCxkPSEhYyxnPSEhZix2PVtdO2lmKGQpe3ZhciBtPWxbMV0tbFswXSx5PWNbMV0tY1swXTt2WzBdPShsWzBdKigxLXIpK3IqY1swXS1sWzBdKS8obFsxXS1sWzBdKSp1LHZbMl09dSooMS1yK3IqeS9tKSxpLnJhbmdlWzBdPWxbMF0qKDEtcikrcipjWzBdLGkucmFuZ2VbMV09bFsxXSooMS1yKStyKmNbMV19ZWxzZSB2WzBdPTAsdlsyXT11O2lmKGcpe3ZhciB4PWhbMV0taFswXSxiPWZbMV0tZlswXTt2WzFdPShoWzFdKigxLXIpK3IqZlsxXS1oWzFdKS8oaFswXS1oWzFdKSpwLHZbM109cCooMS1yK3IqYi94KSxzLnJhbmdlWzBdPWhbMF0qKDEtcikrcipmWzBdLHMucmFuZ2VbMV09aFsxXSooMS1yKStyKmZbMV19ZWxzZSB2WzFdPTAsdlszXT1wO28uZHJhd09uZSh0LGkse3NraXBUaXRsZTohMH0pLG8uZHJhd09uZSh0LHMse3NraXBUaXRsZTohMH0pLG8ucmVkcmF3Q29tcG9uZW50cyh0LFtpLl9pZCxzLl9pZF0pO3ZhciBfPWQ/dS92WzJdOjEsdz1nP3AvdlszXToxLGs9ZD92WzBdOjAsQT1nP3ZbMV06MCxUPWQ/dlswXS92WzJdKnU6MCxNPWc/dlsxXS92WzNdKnA6MCxTPWkuX29mZnNldC1ULEU9cy5fb2Zmc2V0LU07bi5jbGlwUmVjdC5jYWxsKGEuc2V0VHJhbnNsYXRlLGssQSkuY2FsbChhLnNldFNjYWxlLDEvXywxL3cpLG4ucGxvdC5jYWxsKGEuc2V0VHJhbnNsYXRlLFMsRSkuY2FsbChhLnNldFNjYWxlLF8sdyksYS5zZXRQb2ludEdyb3VwU2NhbGUobi56b29tU2NhbGVQdHMsMS9fLDEvdyksYS5zZXRUZXh0UG9pbnRzU2NhbGUobi56b29tU2NhbGVUeHQsMS9fLDEvdyl9by5yZWRyYXdDb21wb25lbnRzKHQpfX0se1wiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2F4ZXNcIjo3NDksZDM6MTU1fV0sNzcyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLnRyYWNlSXMsaT10KFwiLi9heGlzX2F1dG90eXBlXCIpO2Z1bmN0aW9uIGEodCl7cmV0dXJue3Y6XCJ4XCIsaDpcInlcIn1bdC5vcmllbnRhdGlvbnx8XCJ2XCJdfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj1hKHQpLGk9bih0LFwiYm94LXZpb2xpblwiKSxvPW4odC5fZnVsbElucHV0fHx7fSxcImNhbmRsZXN0aWNrXCIpO3JldHVybiBpJiYhbyYmZT09PXImJnZvaWQgMD09PXRbcl0mJnZvaWQgMD09PXRbcitcIjBcIl19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe1wiLVwiPT09cihcInR5cGVcIiwocy5zcGxvbVN0YXNofHx7fSkudHlwZSkmJighZnVuY3Rpb24odCxlKXtpZihcIi1cIiE9PXQudHlwZSlyZXR1cm47dmFyIHI9dC5faWQscz1yLmNoYXJBdCgwKTstMSE9PXIuaW5kZXhPZihcInNjZW5lXCIpJiYocj1zKTt2YXIgbD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl07aWYoXCJzcGxvbVwiPT09aS50eXBlJiZpLl9sZW5ndGg+MCYmKGlbXCJfXCIrcitcImF4ZXNcIl18fHt9KVtlXSlyZXR1cm4gaTtpZigoaVtyK1wiYXhpc1wiXXx8cik9PT1lKXtpZihvKGkscikpcmV0dXJuIGk7aWYoKGlbcl18fFtdKS5sZW5ndGh8fGlbcitcIjBcIl0pcmV0dXJuIGl9fX0oZSxyLHMpO2lmKCFsKXJldHVybjtpZihcImhpc3RvZ3JhbVwiPT09bC50eXBlJiZzPT09e3Y6XCJ5XCIsaDpcInhcIn1bbC5vcmllbnRhdGlvbnx8XCJ2XCJdKXJldHVybiB2b2lkKHQudHlwZT1cImxpbmVhclwiKTt2YXIgYyx1PXMrXCJjYWxlbmRhclwiLGg9bFt1XSxmPXtub011bHRpQ2F0ZWdvcnk6IW4obCxcImNhcnRlc2lhblwiKXx8bihsLFwibm9NdWx0aUNhdGVnb3J5XCIpfTtpZihvKGwscykpe3ZhciBwPWEobCksZD1bXTtmb3IoYz0wO2M8ZS5sZW5ndGg7YysrKXt2YXIgZz1lW2NdO24oZyxcImJveC12aW9saW5cIikmJihnW3MrXCJheGlzXCJdfHxzKT09PXImJih2b2lkIDAhPT1nW3BdP2QucHVzaChnW3BdWzBdKTp2b2lkIDAhPT1nLm5hbWU/ZC5wdXNoKGcubmFtZSk6ZC5wdXNoKFwidGV4dFwiKSxnW3VdIT09aCYmKGg9dm9pZCAwKSl9dC50eXBlPWkoZCxoLGYpfWVsc2UgaWYoXCJzcGxvbVwiPT09bC50eXBlKXt2YXIgdj1sLmRpbWVuc2lvbnMsbT1sLl9kaWFnO2ZvcihjPTA7Yzx2Lmxlbmd0aDtjKyspe3ZhciB5PXZbY107aWYoeS52aXNpYmxlJiYobVtjXVswXT09PXJ8fG1bY11bMV09PT1yKSl7dC50eXBlPWkoeS52YWx1ZXMsaCxmKTticmVha319fWVsc2UgdC50eXBlPWkobFtzXXx8W2xbcytcIjBcIl1dLGgsZil9KGUscy5kYXRhKSxcIi1cIj09PWUudHlwZT9lLnR5cGU9XCJsaW5lYXJcIjp0LnR5cGU9ZS50eXBlKX19LHtcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9heGlzX2F1dG90eXBlXCI6NzUwfV0sNzczOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uL2xpYlwiKTtmdW5jdGlvbiBhKHQsZSxyKXt2YXIgbixhLG8scz0hMTtpZihcImRhdGFcIj09PWUudHlwZSluPXQuX2Z1bGxEYXRhW251bGwhPT1lLnRyYWNlcz9lLnRyYWNlc1swXTowXTtlbHNle2lmKFwibGF5b3V0XCIhPT1lLnR5cGUpcmV0dXJuITE7bj10Ll9mdWxsTGF5b3V0fXJldHVybiBhPWkubmVzdGVkUHJvcGVydHkobixlLnByb3ApLmdldCgpLChvPXJbZS50eXBlXT1yW2UudHlwZV18fHt9KS5oYXNPd25Qcm9wZXJ0eShlLnByb3ApJiZvW2UucHJvcF0hPT1hJiYocz0hMCksb1tlLnByb3BdPWEse2NoYW5nZWQ6cyx2YWx1ZTphfX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9W10sbj1lWzBdLGE9e307aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4pYVtuXT1lWzFdO2Vsc2V7aWYoIWkuaXNQbGFpbk9iamVjdChuKSlyZXR1cm4gcjthPW59cmV0dXJuIGwoYSxmdW5jdGlvbih0LGUsbil7ci5wdXNoKHt0eXBlOlwibGF5b3V0XCIscHJvcDp0LHZhbHVlOm59KX0sXCJcIiwwKSxyfWZ1bmN0aW9uIHModCxlKXt2YXIgcixuLGEsbyxzPVtdO2lmKG49ZVswXSxhPWVbMV0scj1lWzJdLG89e30sXCJzdHJpbmdcIj09dHlwZW9mIG4pb1tuXT1hO2Vsc2V7aWYoIWkuaXNQbGFpbk9iamVjdChuKSlyZXR1cm4gcztvPW4sdm9pZCAwPT09ciYmKHI9YSl9cmV0dXJuIHZvaWQgMD09PXImJihyPW51bGwpLGwobyxmdW5jdGlvbihlLG4saSl7dmFyIGE7aWYoQXJyYXkuaXNBcnJheShpKSl7dmFyIG89TWF0aC5taW4oaS5sZW5ndGgsdC5kYXRhLmxlbmd0aCk7ciYmKG89TWF0aC5taW4obyxyLmxlbmd0aCkpLGE9W107Zm9yKHZhciBsPTA7bDxvO2wrKylhW2xdPXI/cltsXTpsfWVsc2UgYT1yP3Iuc2xpY2UoMCk6bnVsbDtpZihudWxsPT09YSlBcnJheS5pc0FycmF5KGkpJiYoaT1pWzBdKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoYSkpe2lmKCFBcnJheS5pc0FycmF5KGkpKXt2YXIgYz1pO2k9W107Zm9yKHZhciB1PTA7dTxhLmxlbmd0aDt1KyspaVt1XT1jfWkubGVuZ3RoPU1hdGgubWluKGEubGVuZ3RoLGkubGVuZ3RoKX1zLnB1c2goe3R5cGU6XCJkYXRhXCIscHJvcDplLHRyYWNlczphLHZhbHVlOml9KX0sXCJcIiwwKSxzfWZ1bmN0aW9uIGwodCxlLHIsbil7T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgbz10W2FdO2lmKFwiX1wiIT09YVswXSl7dmFyIHM9cisobj4wP1wiLlwiOlwiXCIpK2E7aS5pc1BsYWluT2JqZWN0KG8pP2wobyxlLHMsbisxKTplKHMsYSxvKX19KX1yLm1hbmFnZUNvbW1hbmRPYnNlcnZlcj1mdW5jdGlvbih0LGUsbixvKXt2YXIgcz17fSxsPSEwO2UmJmUuX2NvbW1hbmRPYnNlcnZlciYmKHM9ZS5fY29tbWFuZE9ic2VydmVyKSxzLmNhY2hlfHwocy5jYWNoZT17fSkscy5sb29rdXBUYWJsZT17fTt2YXIgYz1yLmhhc1NpbXBsZUFQSUNvbW1hbmRCaW5kaW5ncyh0LG4scy5sb29rdXBUYWJsZSk7aWYoZSYmZS5fY29tbWFuZE9ic2VydmVyKXtpZihjKXJldHVybiBzO2lmKGUuX2NvbW1hbmRPYnNlcnZlci5yZW1vdmUpcmV0dXJuIGUuX2NvbW1hbmRPYnNlcnZlci5yZW1vdmUoKSxlLl9jb21tYW5kT2JzZXJ2ZXI9bnVsbCxzfWlmKGMpe2EodCxjLHMuY2FjaGUpLHMuY2hlY2s9ZnVuY3Rpb24oKXtpZihsKXt2YXIgZT1hKHQsYyxzLmNhY2hlKTtyZXR1cm4gZS5jaGFuZ2VkJiZvJiZ2b2lkIDAhPT1zLmxvb2t1cFRhYmxlW2UudmFsdWVdJiYocy5kaXNhYmxlKCksUHJvbWlzZS5yZXNvbHZlKG8oe3ZhbHVlOmUudmFsdWUsdHlwZTpjLnR5cGUscHJvcDpjLnByb3AsdHJhY2VzOmMudHJhY2VzLGluZGV4OnMubG9va3VwVGFibGVbZS52YWx1ZV19KSkudGhlbihzLmVuYWJsZSxzLmVuYWJsZSkpLGUuY2hhbmdlZH19O2Zvcih2YXIgdT1bXCJwbG90bHlfcmVsYXlvdXRcIixcInBsb3RseV9yZWRyYXdcIixcInBsb3RseV9yZXN0eWxlXCIsXCJwbG90bHlfdXBkYXRlXCIsXCJwbG90bHlfYW5pbWF0aW5nZnJhbWVcIixcInBsb3RseV9hZnRlcnBsb3RcIl0saD0wO2g8dS5sZW5ndGg7aCsrKXQuX2ludGVybmFsT24odVtoXSxzLmNoZWNrKTtzLnJlbW92ZT1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dS5sZW5ndGg7ZSsrKXQuX3JlbW92ZUludGVybmFsTGlzdGVuZXIodVtlXSxzLmNoZWNrKX19ZWxzZSBpLmxvZyhcIlVuYWJsZSB0byBhdXRvbWF0aWNhbGx5IGJpbmQgcGxvdCB1cGRhdGVzIHRvIEFQSSBjb21tYW5kXCIpLHMubG9va3VwVGFibGU9e30scy5yZW1vdmU9ZnVuY3Rpb24oKXt9O3JldHVybiBzLmRpc2FibGU9ZnVuY3Rpb24oKXtsPSExfSxzLmVuYWJsZT1mdW5jdGlvbigpe2w9ITB9LGUmJihlLl9jb21tYW5kT2JzZXJ2ZXI9cyksc30sci5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3M9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGEsbz1lLmxlbmd0aDtmb3IoaT0wO2k8bztpKyspe3ZhciBzLGw9ZVtpXSxjPWwubWV0aG9kLHU9bC5hcmdzO2lmKEFycmF5LmlzQXJyYXkodSl8fCh1PVtdKSwhYylyZXR1cm4hMTt2YXIgaD1yLmNvbXB1dGVBUElDb21tYW5kQmluZGluZ3ModCxjLHUpO2lmKDEhPT1oLmxlbmd0aClyZXR1cm4hMTtpZihhKXtpZigocz1oWzBdKS50eXBlIT09YS50eXBlKXJldHVybiExO2lmKHMucHJvcCE9PWEucHJvcClyZXR1cm4hMTtpZihBcnJheS5pc0FycmF5KGEudHJhY2VzKSl7aWYoIUFycmF5LmlzQXJyYXkocy50cmFjZXMpKXJldHVybiExO3MudHJhY2VzLnNvcnQoKTtmb3IodmFyIGY9MDtmPGEudHJhY2VzLmxlbmd0aDtmKyspaWYoYS50cmFjZXNbZl0hPT1zLnRyYWNlc1tmXSlyZXR1cm4hMX1lbHNlIGlmKHMucHJvcCE9PWEucHJvcClyZXR1cm4hMX1lbHNlIGE9aFswXSxBcnJheS5pc0FycmF5KGEudHJhY2VzKSYmYS50cmFjZXMuc29ydCgpO3ZhciBwPShzPWhbMF0pLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkocCkpe2lmKDEhPT1wLmxlbmd0aClyZXR1cm4hMTtwPXBbMF19biYmKG5bcF09aSl9cmV0dXJuIGF9LHIuZXhlY3V0ZUFQSUNvbW1hbmQ9ZnVuY3Rpb24odCxlLHIpe2lmKFwic2tpcFwiPT09ZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7dmFyIGE9bi5hcGlNZXRob2RSZWdpc3RyeVtlXSxvPVt0XTtBcnJheS5pc0FycmF5KHIpfHwocj1bXSk7Zm9yKHZhciBzPTA7czxyLmxlbmd0aDtzKyspby5wdXNoKHJbc10pO3JldHVybiBhLmFwcGx5KG51bGwsbykuY2F0Y2goZnVuY3Rpb24odCl7cmV0dXJuIGkud2FybihcIkFQSSBjYWxsIHRvIFBsb3RseS5cIitlK1wiIHJlamVjdGVkLlwiLHQpLFByb21pc2UucmVqZWN0KHQpfSl9LHIuY29tcHV0ZUFQSUNvbW1hbmRCaW5kaW5ncz1mdW5jdGlvbih0LGUscil7dmFyIG47c3dpdGNoKEFycmF5LmlzQXJyYXkocil8fChyPVtdKSxlKXtjYXNlXCJyZXN0eWxlXCI6bj1zKHQscik7YnJlYWs7Y2FzZVwicmVsYXlvdXRcIjpuPW8odCxyKTticmVhaztjYXNlXCJ1cGRhdGVcIjpuPXModCxbclswXSxyWzJdXSkuY29uY2F0KG8odCxbclsxXV0pKTticmVhaztjYXNlXCJhbmltYXRlXCI6bj1mdW5jdGlvbih0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KGVbMF0pJiYxPT09ZVswXS5sZW5ndGgmJi0xIT09W1wic3RyaW5nXCIsXCJudW1iZXJcIl0uaW5kZXhPZih0eXBlb2YgZVswXVswXSk/W3t0eXBlOlwibGF5b3V0XCIscHJvcDpcIl9jdXJyZW50RnJhbWVcIix2YWx1ZTplWzBdWzBdLnRvU3RyaW5nKCl9XTpbXX0oMCxyKTticmVhaztkZWZhdWx0Om49W119cmV0dXJuIG59fSx7XCIuLi9saWJcIjo3MDEsXCIuLi9yZWdpc3RyeVwiOjgyOX1dLDc3NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQ7ci5hdHRyaWJ1dGVzPWZ1bmN0aW9uKHQsZSl7ZT1lfHx7fTt2YXIgcj17dmFsVHlwZTpcImluZm9fYXJyYXlcIixlZGl0VHlwZToodD10fHx7fSkuZWRpdFR5cGUsaXRlbXM6W3t2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZWRpdFR5cGU6dC5lZGl0VHlwZX0se3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxlZGl0VHlwZTp0LmVkaXRUeXBlfV0sZGZsdDpbMCwxXX0saT0odC5uYW1lJiZ0Lm5hbWUsdC50cmFjZSxlLmRlc2NyaXB0aW9uJiZlLmRlc2NyaXB0aW9uLHt4Om4oe30scix7fSkseTpuKHt9LHIse30pLGVkaXRUeXBlOnQuZWRpdFR5cGV9KTtyZXR1cm4gdC5ub0dyaWRDZWxsfHwoaS5yb3c9e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsbWluOjAsZGZsdDowLGVkaXRUeXBlOnQuZWRpdFR5cGV9LGkuY29sdW1uPXt2YWxUeXBlOlwiaW50ZWdlclwiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTp0LmVkaXRUeXBlfSksaX0sci5kZWZhdWx0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uJiZuLnh8fFswLDFdLGE9biYmbi55fHxbMCwxXSxvPWUuZ3JpZDtpZihvKXt2YXIgcz1yKFwiZG9tYWluLmNvbHVtblwiKTt2b2lkIDAhPT1zJiYoczxvLmNvbHVtbnM/aT1vLl9kb21haW5zLnhbc106ZGVsZXRlIHQuZG9tYWluLmNvbHVtbik7dmFyIGw9cihcImRvbWFpbi5yb3dcIik7dm9pZCAwIT09bCYmKGw8by5yb3dzP2E9by5fZG9tYWlucy55W2xdOmRlbGV0ZSB0LmRvbWFpbi5yb3cpfXIoXCJkb21haW4ueFwiLGkpLHIoXCJkb21haW4ueVwiLGEpfX0se1wiLi4vbGliL2V4dGVuZFwiOjY5MX1dLDc3NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmVkaXRUeXBlLHI9dC5jb2xvckVkaXRUeXBlO3ZvaWQgMD09PXImJihyPWUpO3ZhciBuPXtmYW1pbHk6e3ZhbFR5cGU6XCJzdHJpbmdcIixub0JsYW5rOiEwLHN0cmljdDohMCxlZGl0VHlwZTplfSxzaXplOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjEsZWRpdFR5cGU6ZX0sY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOnJ9LGVkaXRUeXBlOmV9O3JldHVybiB0LmFycmF5T2smJihuLmZhbWlseS5hcnJheU9rPSEwLG4uc2l6ZS5hcnJheU9rPSEwLG4uY29sb3IuYXJyYXlPaz0hMCksbn19LHt9XSw3NzY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e19pc0xpbmtlZFRvQXJyYXk6XCJmcmFtZXNfZW50cnlcIixncm91cDp7dmFsVHlwZTpcInN0cmluZ1wifSxuYW1lOnt2YWxUeXBlOlwic3RyaW5nXCJ9LHRyYWNlczp7dmFsVHlwZTpcImFueVwifSxiYXNlZnJhbWU6e3ZhbFR5cGU6XCJzdHJpbmdcIn0sZGF0YTp7dmFsVHlwZTpcImFueVwifSxsYXlvdXQ6e3ZhbFR5cGU6XCJhbnlcIn19fSx7fV0sNzc3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ci5wcm9qTmFtZXM9e2VxdWlyZWN0YW5ndWxhcjpcImVxdWlyZWN0YW5ndWxhclwiLG1lcmNhdG9yOlwibWVyY2F0b3JcIixvcnRob2dyYXBoaWM6XCJvcnRob2dyYXBoaWNcIixcIm5hdHVyYWwgZWFydGhcIjpcIm5hdHVyYWxFYXJ0aFwiLGthdnJheXNraXk3Olwia2F2cmF5c2tpeTdcIixtaWxsZXI6XCJtaWxsZXJcIixyb2JpbnNvbjpcInJvYmluc29uXCIsZWNrZXJ0NDpcImVja2VydDRcIixcImF6aW11dGhhbCBlcXVhbCBhcmVhXCI6XCJhemltdXRoYWxFcXVhbEFyZWFcIixcImF6aW11dGhhbCBlcXVpZGlzdGFudFwiOlwiYXppbXV0aGFsRXF1aWRpc3RhbnRcIixcImNvbmljIGVxdWFsIGFyZWFcIjpcImNvbmljRXF1YWxBcmVhXCIsXCJjb25pYyBjb25mb3JtYWxcIjpcImNvbmljQ29uZm9ybWFsXCIsXCJjb25pYyBlcXVpZGlzdGFudFwiOlwiY29uaWNFcXVpZGlzdGFudFwiLGdub21vbmljOlwiZ25vbW9uaWNcIixzdGVyZW9ncmFwaGljOlwic3RlcmVvZ3JhcGhpY1wiLG1vbGx3ZWlkZTpcIm1vbGx3ZWlkZVwiLGhhbW1lcjpcImhhbW1lclwiLFwidHJhbnN2ZXJzZSBtZXJjYXRvclwiOlwidHJhbnN2ZXJzZU1lcmNhdG9yXCIsXCJhbGJlcnMgdXNhXCI6XCJhbGJlcnNVc2FcIixcIndpbmtlbCB0cmlwZWxcIjpcIndpbmtlbDNcIixhaXRvZmY6XCJhaXRvZmZcIixzaW51c29pZGFsOlwic2ludXNvaWRhbFwifSxyLmF4ZXNOYW1lcz1bXCJsb25heGlzXCIsXCJsYXRheGlzXCJdLHIubG9uYXhpc1NwYW49e29ydGhvZ3JhcGhpYzoxODAsXCJhemltdXRoYWwgZXF1YWwgYXJlYVwiOjM2MCxcImF6aW11dGhhbCBlcXVpZGlzdGFudFwiOjM2MCxcImNvbmljIGNvbmZvcm1hbFwiOjE4MCxnbm9tb25pYzoxNjAsc3RlcmVvZ3JhcGhpYzoxODAsXCJ0cmFuc3ZlcnNlIG1lcmNhdG9yXCI6MTgwLFwiKlwiOjM2MH0sci5sYXRheGlzU3Bhbj17XCJjb25pYyBjb25mb3JtYWxcIjoxNTAsc3RlcmVvZ3JhcGhpYzoxNzkuNSxcIipcIjoxODB9LHIuc2NvcGVEZWZhdWx0cz17d29ybGQ6e2xvbmF4aXNSYW5nZTpbLTE4MCwxODBdLGxhdGF4aXNSYW5nZTpbLTkwLDkwXSxwcm9qVHlwZTpcImVxdWlyZWN0YW5ndWxhclwiLHByb2pSb3RhdGU6WzAsMCwwXX0sdXNhOntsb25heGlzUmFuZ2U6Wy0xODAsLTUwXSxsYXRheGlzUmFuZ2U6WzE1LDgwXSxwcm9qVHlwZTpcImFsYmVycyB1c2FcIn0sZXVyb3BlOntsb25heGlzUmFuZ2U6Wy0zMCw2MF0sbGF0YXhpc1JhbmdlOlszMCw4NV0scHJvalR5cGU6XCJjb25pYyBjb25mb3JtYWxcIixwcm9qUm90YXRlOlsxNSwwLDBdLHByb2pQYXJhbGxlbHM6WzAsNjBdfSxhc2lhOntsb25heGlzUmFuZ2U6WzIyLDE2MF0sbGF0YXhpc1JhbmdlOlstMTUsNTVdLHByb2pUeXBlOlwibWVyY2F0b3JcIixwcm9qUm90YXRlOlswLDAsMF19LGFmcmljYTp7bG9uYXhpc1JhbmdlOlstMzAsNjBdLGxhdGF4aXNSYW5nZTpbLTQwLDQwXSxwcm9qVHlwZTpcIm1lcmNhdG9yXCIscHJvalJvdGF0ZTpbMCwwLDBdfSxcIm5vcnRoIGFtZXJpY2FcIjp7bG9uYXhpc1JhbmdlOlstMTgwLC00NV0sbGF0YXhpc1JhbmdlOls1LDg1XSxwcm9qVHlwZTpcImNvbmljIGNvbmZvcm1hbFwiLHByb2pSb3RhdGU6Wy0xMDAsMCwwXSxwcm9qUGFyYWxsZWxzOlsyOS41LDQ1LjVdfSxcInNvdXRoIGFtZXJpY2FcIjp7bG9uYXhpc1JhbmdlOlstMTAwLC0zMF0sbGF0YXhpc1JhbmdlOlstNjAsMTVdLHByb2pUeXBlOlwibWVyY2F0b3JcIixwcm9qUm90YXRlOlswLDAsMF19fSxyLmNsaXBQYWQ9LjAwMSxyLnByZWNpc2lvbj0uMSxyLmxhbmRDb2xvcj1cIiNGMERDODJcIixyLndhdGVyQ29sb3I9XCIjMzM5OUZGXCIsci5sb2NhdGlvbm1vZGVUb0xheWVyPXtcIklTTy0zXCI6XCJjb3VudHJpZXNcIixcIlVTQS1zdGF0ZXNcIjpcInN1YnVuaXRzXCIsXCJjb3VudHJ5IG5hbWVzXCI6XCJjb3VudHJpZXNcIn0sci5zcGhlcmVTVkc9e3R5cGU6XCJTcGhlcmVcIn0sci5maWxsTGF5ZXJzPXtvY2VhbjoxLGxhbmQ6MSxsYWtlczoxfSxyLmxpbmVMYXllcnM9e3N1YnVuaXRzOjEsY291bnRyaWVzOjEsY29hc3RsaW5lczoxLHJpdmVyczoxLGZyYW1lOjF9LHIubGF5ZXJzPVtcImJnXCIsXCJvY2VhblwiLFwibGFuZFwiLFwibGFrZXNcIixcInN1YnVuaXRzXCIsXCJjb3VudHJpZXNcIixcImNvYXN0bGluZXNcIixcInJpdmVyc1wiLFwibGF0YXhpc1wiLFwibG9uYXhpc1wiLFwiZnJhbWVcIixcImJhY2twbG90XCIsXCJmcm9udHBsb3RcIl0sci5sYXllcnNGb3JDaG9yb3BsZXRoPVtcImJnXCIsXCJvY2VhblwiLFwibGFuZFwiLFwic3VidW5pdHNcIixcImNvdW50cmllc1wiLFwiY29hc3RsaW5lc1wiLFwibGF0YXhpc1wiLFwibG9uYXhpc1wiLFwiZnJhbWVcIixcImJhY2twbG90XCIsXCJyaXZlcnNcIixcImxha2VzXCIsXCJmcm9udHBsb3RcIl0sci5sYXllck5hbWVUb0FkamVjdGl2ZT17b2NlYW46XCJvY2VhblwiLGxhbmQ6XCJsYW5kXCIsbGFrZXM6XCJsYWtlXCIsc3VidW5pdHM6XCJzdWJ1bml0XCIsY291bnRyaWVzOlwiY291bnRyeVwiLGNvYXN0bGluZXM6XCJjb2FzdGxpbmVcIixyaXZlcnM6XCJyaXZlclwiLGZyYW1lOlwiZnJhbWVcIn19LHt9XSw3Nzg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vcmVnaXN0cnlcIiksYT10KFwiLi4vLi4vbGliXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIikscz10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLGw9dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIiksYz10KFwiLi4vcGxvdHNcIiksdT10KFwiLi4vY2FydGVzaWFuL2F4ZXNcIiksaD10KFwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudFwiKSxmPXQoXCIuLi9jYXJ0ZXNpYW4vc2VsZWN0XCIpLnByZXBTZWxlY3QscD10KFwiLi4vY2FydGVzaWFuL3NlbGVjdFwiKS5zZWxlY3RPbkNsaWNrLGQ9dChcIi4vem9vbVwiKSxnPXQoXCIuL2NvbnN0YW50c1wiKSx2PXQoXCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHNcIiksbT10KFwidG9wb2pzb24tY2xpZW50XCIpLmZlYXR1cmU7ZnVuY3Rpb24geSh0KXt0aGlzLmlkPXQuaWQsdGhpcy5ncmFwaERpdj10LmdyYXBoRGl2LHRoaXMuY29udGFpbmVyPXQuY29udGFpbmVyLHRoaXMudG9wb2pzb25VUkw9dC50b3BvanNvblVSTCx0aGlzLmlzU3RhdGljPXQuc3RhdGljUGxvdCx0aGlzLnRvcG9qc29uTmFtZT1udWxsLHRoaXMudG9wb2pzb249bnVsbCx0aGlzLnByb2plY3Rpb249bnVsbCx0aGlzLnZpZXdJbml0aWFsPW51bGwsdGhpcy5maXRTY2FsZT1udWxsLHRoaXMuYm91bmRzPW51bGwsdGhpcy5taWRQdD1udWxsLHRoaXMuaGFzQ2hvcm9wbGV0aD0hMSx0aGlzLnRyYWNlSGFzaD17fSx0aGlzLmxheWVycz17fSx0aGlzLmJhc2VQYXRocz17fSx0aGlzLmRhdGFQYXRocz17fSx0aGlzLmRhdGFQb2ludHM9e30sdGhpcy5jbGlwRGVmPW51bGwsdGhpcy5jbGlwUmVjdD1udWxsLHRoaXMuYmdSZWN0PW51bGwsdGhpcy5tYWtlRnJhbWV3b3JrKCl9dChcIi4vcHJvamVjdGlvbnNcIikobik7dmFyIHg9eS5wcm90b3R5cGU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgeSh0KX0seC5wbG90PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLGk9ZVt0aGlzLmlkXSxhPXYuZ2V0VG9wb2pzb25OYW1lKGkpO251bGw9PT1uLnRvcG9qc29ufHxhIT09bi50b3BvanNvbk5hbWU/KG4udG9wb2pzb25OYW1lPWEsdm9pZCAwPT09UGxvdGx5R2VvQXNzZXRzLnRvcG9qc29uW24udG9wb2pzb25OYW1lXT9yLnB1c2gobi5mZXRjaFRvcG9qc29uKCkudGhlbihmdW5jdGlvbihyKXtQbG90bHlHZW9Bc3NldHMudG9wb2pzb25bbi50b3BvanNvbk5hbWVdPXIsbi50b3BvanNvbj1yLG4udXBkYXRlKHQsZSl9KSk6KG4udG9wb2pzb249UGxvdGx5R2VvQXNzZXRzLnRvcG9qc29uW24udG9wb2pzb25OYW1lXSxuLnVwZGF0ZSh0LGUpKSk6bi51cGRhdGUodCxlKX0seC5mZXRjaFRvcG9qc29uPWZ1bmN0aW9uKCl7dmFyIHQ9di5nZXRUb3BvanNvblBhdGgodGhpcy50b3BvanNvblVSTCx0aGlzLnRvcG9qc29uTmFtZSk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUscil7bi5qc29uKHQsZnVuY3Rpb24obixpKXtpZihuKXJldHVybiA0MDQ9PT1uLnN0YXR1cz9yKG5ldyBFcnJvcihbXCJwbG90bHkuanMgY291bGQgbm90IGZpbmQgdG9wb2pzb24gZmlsZSBhdFwiLHQsXCIuXCIsXCJNYWtlIHN1cmUgdGhlICp0b3BvanNvblVSTCogcGxvdCBjb25maWcgb3B0aW9uXCIsXCJpcyBzZXQgcHJvcGVybHkuXCJdLmpvaW4oXCIgXCIpKSk6cihuZXcgRXJyb3IoW1widW5leHBlY3RlZCBlcnJvciB3aGlsZSBmZXRjaGluZyB0b3BvanNvbiBmaWxlIGF0XCIsdF0uam9pbihcIiBcIikpKTtlKGkpfSl9KX0seC51cGRhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lW3RoaXMuaWRdO2lmKCF0aGlzLnVwZGF0ZVByb2plY3Rpb24oZSxyKSl7dGhpcy5oYXNDaG9yb3BsZXRoPSExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKFwiY2hvcm9wbGV0aFwiPT09dFtuXVswXS50cmFjZS50eXBlKXt0aGlzLmhhc0Nob3JvcGxldGg9ITA7YnJlYWt9dGhpcy52aWV3SW5pdGlhbHx8dGhpcy5zYXZlVmlld0luaXRpYWwociksdGhpcy51cGRhdGVCYXNlTGF5ZXJzKGUsciksdGhpcy51cGRhdGVEaW1zKGUsciksdGhpcy51cGRhdGVGeChlLHIpLGMuZ2VuZXJhbFVwZGF0ZVBlclRyYWNlTW9kdWxlKHRoaXMuZ3JhcGhEaXYsdGhpcyx0LHIpO3ZhciBpPXRoaXMubGF5ZXJzLmZyb250cGxvdC5zZWxlY3QoXCIuc2NhdHRlcmxheWVyXCIpO3RoaXMuZGF0YVBvaW50cy5wb2ludD1pLnNlbGVjdEFsbChcIi5wb2ludFwiKSx0aGlzLmRhdGFQb2ludHMudGV4dD1pLnNlbGVjdEFsbChcInRleHRcIiksdGhpcy5kYXRhUGF0aHMubGluZT1pLnNlbGVjdEFsbChcIi5qcy1saW5lXCIpO3ZhciBhPXRoaXMubGF5ZXJzLmJhY2twbG90LnNlbGVjdChcIi5jaG9yb3BsZXRobGF5ZXJcIik7dGhpcy5kYXRhUGF0aHMuY2hvcm9wbGV0aD1hLnNlbGVjdEFsbChcInBhdGhcIiksdGhpcy5yZW5kZXIoKX19LHgudXBkYXRlUHJvamVjdGlvbj1mdW5jdGlvbih0LGUpe3ZhciByPXQuX3NpemUsbz1lLmRvbWFpbixzPWUucHJvamVjdGlvbixsPXMucm90YXRpb258fHt9LGM9ZS5jZW50ZXJ8fHt9LHU9dGhpcy5wcm9qZWN0aW9uPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LnByb2plY3Rpb24udHlwZSxyPW4uZ2VvW2cucHJvak5hbWVzW2VdXSgpLGk9dC5faXNDbGlwcGVkP2cubG9uYXhpc1NwYW5bZV0vMjpudWxsLGE9W1wiY2VudGVyXCIsXCJyb3RhdGVcIixcInBhcmFsbGVsc1wiLFwiY2xpcEV4dGVudFwiXSxvPWZ1bmN0aW9uKHQpe3JldHVybiB0P3I6W119LHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzXTtcImZ1bmN0aW9uXCIhPXR5cGVvZiByW2xdJiYocltsXT1vKX1yLmlzTG9uTGF0T3ZlckVkZ2VzPWZ1bmN0aW9uKHQpe2lmKG51bGw9PT1yKHQpKXJldHVybiEwO2lmKGkpe3ZhciBlPXIucm90YXRlKCk7cmV0dXJuIG4uZ2VvLmRpc3RhbmNlKHQsWy1lWzBdLC1lWzFdXSk+aSpNYXRoLlBJLzE4MH1yZXR1cm4hMX0sci5nZXRQYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIG4uZ2VvLnBhdGgoKS5wcm9qZWN0aW9uKHIpfSxyLmdldEJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gci5nZXRQYXRoKCkuYm91bmRzKHQpfSxyLmZpdEV4dGVudD1mdW5jdGlvbih0LGUpe3ZhciBuPXRbMV1bMF0tdFswXVswXSxpPXRbMV1bMV0tdFswXVsxXSxhPXIuY2xpcEV4dGVudCYmci5jbGlwRXh0ZW50KCk7ci5zY2FsZSgxNTApLnRyYW5zbGF0ZShbMCwwXSksYSYmci5jbGlwRXh0ZW50KG51bGwpO3ZhciBvPXIuZ2V0Qm91bmRzKGUpLHM9TWF0aC5taW4obi8ob1sxXVswXS1vWzBdWzBdKSxpLyhvWzFdWzFdLW9bMF1bMV0pKSxsPSt0WzBdWzBdKyhuLXMqKG9bMV1bMF0rb1swXVswXSkpLzIsYz0rdFswXVsxXSsoaS1zKihvWzFdWzFdK29bMF1bMV0pKS8yO3JldHVybiBhJiZyLmNsaXBFeHRlbnQoYSksci5zY2FsZSgxNTAqcykudHJhbnNsYXRlKFtsLGNdKX0sci5wcmVjaXNpb24oZy5wcmVjaXNpb24pLGkmJnIuY2xpcEFuZ2xlKGktZy5jbGlwUGFkKTtyZXR1cm4gcn0oZSk7dS5jZW50ZXIoW2MubG9uLWwubG9uLGMubGF0LWwubGF0XSkucm90YXRlKFstbC5sb24sLWwubGF0LGwucm9sbF0pLnBhcmFsbGVscyhzLnBhcmFsbGVscyk7dmFyIGg9W1tyLmwrci53Km8ueFswXSxyLnQrci5oKigxLW8ueVsxXSldLFtyLmwrci53Km8ueFsxXSxyLnQrci5oKigxLW8ueVswXSldXSxmPWUubG9uYXhpcyxwPWUubGF0YXhpcyxkPWZ1bmN0aW9uKHQsZSl7dmFyIHI9Zy5jbGlwUGFkLG49dFswXStyLGk9dFsxXS1yLGE9ZVswXStyLG89ZVsxXS1yO24+MCYmaTwwJiYoaSs9MzYwKTt2YXIgcz0oaS1uKS80O3JldHVybnt0eXBlOlwiUG9seWdvblwiLGNvb3JkaW5hdGVzOltbW24sYV0sW24sb10sW24rcyxvXSxbbisyKnMsb10sW24rMypzLG9dLFtpLG9dLFtpLGFdLFtpLXMsYV0sW2ktMipzLGFdLFtpLTMqcyxhXSxbbixhXV1dfX0oZi5yYW5nZSxwLnJhbmdlKTt1LmZpdEV4dGVudChoLGQpO3ZhciB2PXRoaXMuYm91bmRzPXUuZ2V0Qm91bmRzKGQpLG09dGhpcy5maXRTY2FsZT11LnNjYWxlKCkseT11LnRyYW5zbGF0ZSgpO2lmKCFpc0Zpbml0ZSh2WzBdWzBdKXx8IWlzRmluaXRlKHZbMF1bMV0pfHwhaXNGaW5pdGUodlsxXVswXSl8fCFpc0Zpbml0ZSh2WzFdWzFdKXx8aXNOYU4oeVswXSl8fGlzTmFOKHlbMF0pKXtmb3IodmFyIHg9dGhpcy5ncmFwaERpdixiPVtcInByb2plY3Rpb24ucm90YXRpb25cIixcImNlbnRlclwiLFwibG9uYXhpcy5yYW5nZVwiLFwibGF0YXhpcy5yYW5nZVwiXSxfPVwiSW52YWxpZCBnZW8gc2V0dGluZ3MsIHJlbGF5b3V0J2luZyB0byBkZWZhdWx0IHZpZXcuXCIsdz17fSxrPTA7azxiLmxlbmd0aDtrKyspd1t0aGlzLmlkK1wiLlwiK2Jba11dPW51bGw7cmV0dXJuIHRoaXMudmlld0luaXRpYWw9bnVsbCxhLndhcm4oXykseC5fcHJvbWlzZXMucHVzaChpLmNhbGwoXCJyZWxheW91dFwiLHgsdykpLF99dmFyIEE9dGhpcy5taWRQdD1bKHZbMF1bMF0rdlsxXVswXSkvMiwodlswXVsxXSt2WzFdWzFdKS8yXTtpZih1LnNjYWxlKHMuc2NhbGUqbSkudHJhbnNsYXRlKFt5WzBdKyhBWzBdLXlbMF0pLHlbMV0rKEFbMV0teVsxXSldKS5jbGlwRXh0ZW50KHYpLGUuX2lzQWxiZXJzVXNhKXt2YXIgVD11KFtjLmxvbixjLmxhdF0pLE09dS50cmFuc2xhdGUoKTt1LnRyYW5zbGF0ZShbTVswXS0oVFswXS1NWzBdKSxNWzFdLShUWzFdLU1bMV0pXSl9fSx4LnVwZGF0ZUJhc2VMYXllcnM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLGk9ci50b3BvanNvbixhPXIubGF5ZXJzLGw9ci5iYXNlUGF0aHM7ZnVuY3Rpb24gYyh0KXtyZXR1cm5cImxvbmF4aXNcIj09PXR8fFwibGF0YXhpc1wiPT09dH1mdW5jdGlvbiBoKHQpe3JldHVybiBCb29sZWFuKGcubGluZUxheWVyc1t0XSl9ZnVuY3Rpb24gZih0KXtyZXR1cm4gQm9vbGVhbihnLmZpbGxMYXllcnNbdF0pfXZhciBwPSh0aGlzLmhhc0Nob3JvcGxldGg/Zy5sYXllcnNGb3JDaG9yb3BsZXRoOmcubGF5ZXJzKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGgodCl8fGYodCk/ZVtcInNob3dcIit0XTohYyh0KXx8ZVt0XS5zaG93Z3JpZH0pLGQ9ci5mcmFtZXdvcmsuc2VsZWN0QWxsKFwiLmxheWVyXCIpLmRhdGEocCxTdHJpbmcpO2QuZXhpdCgpLmVhY2goZnVuY3Rpb24odCl7ZGVsZXRlIGFbdF0sZGVsZXRlIGxbdF0sbi5zZWxlY3QodGhpcykucmVtb3ZlKCl9KSxkLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIixmdW5jdGlvbih0KXtyZXR1cm5cImxheWVyIFwiK3R9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWFbdF09bi5zZWxlY3QodGhpcyk7XCJiZ1wiPT09dD9yLmJnUmVjdD1lLmFwcGVuZChcInJlY3RcIikuc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpOmModCk/bFt0XT1lLmFwcGVuZChcInBhdGhcIikuc3R5bGUoXCJmaWxsXCIsXCJub25lXCIpOlwiYmFja3Bsb3RcIj09PXQ/ZS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJjaG9yb3BsZXRobGF5ZXJcIiwhMCk6XCJmcm9udHBsb3RcIj09PXQ/ZS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJzY2F0dGVybGF5ZXJcIiwhMCk6aCh0KT9sW3RdPWUuYXBwZW5kKFwicGF0aFwiKS5zdHlsZShcImZpbGxcIixcIm5vbmVcIikuc3R5bGUoXCJzdHJva2UtbWl0ZXJsaW1pdFwiLDIpOmYodCkmJihsW3RdPWUuYXBwZW5kKFwicGF0aFwiKS5zdHlsZShcInN0cm9rZVwiLFwibm9uZVwiKSl9KSxkLm9yZGVyKCksZC5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBuPWxbcl0sYT1nLmxheWVyTmFtZVRvQWRqZWN0aXZlW3JdO1wiZnJhbWVcIj09PXI/bi5kYXR1bShnLnNwaGVyZVNWRyk6aChyKXx8ZihyKT9uLmRhdHVtKG0oaSxpLm9iamVjdHNbcl0pKTpjKHIpJiZuLmRhdHVtKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbz1lW3RdLHM9Zy5zY29wZURlZmF1bHRzW2Uuc2NvcGVdO1wibG9uYXhpc1wiPT09dD8obj1zLmxvbmF4aXNSYW5nZSxpPXMubGF0YXhpc1JhbmdlLGE9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdCxlXX0pOlwibGF0YXhpc1wiPT09dCYmKG49cy5sYXRheGlzUmFuZ2UsaT1zLmxvbmF4aXNSYW5nZSxhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuW2UsdF19KTt2YXIgbD17dHlwZTpcImxpbmVhclwiLHJhbmdlOltuWzBdLG5bMV0tMWUtNl0sdGljazA6by50aWNrMCxkdGljazpvLmR0aWNrfTt1LnNldENvbnZlcnQobCxyKTt2YXIgYz11LmNhbGNUaWNrcyhsKTtlLmlzU2NvcGVkfHxcImxvbmF4aXNcIiE9PXR8fGMucG9wKCk7Zm9yKHZhciBoPWMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHA9MDtwPGg7cCsrKWZvcih2YXIgZD1jW3BdLngsdj1mW3BdPVtdLG09aVswXTttPGlbMV0rMi41O20rPTIuNSl2LnB1c2goYShkLG0pKTtyZXR1cm57dHlwZTpcIk11bHRpTGluZVN0cmluZ1wiLGNvb3JkaW5hdGVzOmZ9fShyLGUsdCkpLmNhbGwoby5zdHJva2UsZVtyXS5ncmlkY29sb3IpLmNhbGwocy5kYXNoTGluZSxcIlwiLGVbcl0uZ3JpZHdpZHRoKSxoKHIpP24uY2FsbChvLnN0cm9rZSxlW2ErXCJjb2xvclwiXSkuY2FsbChzLmRhc2hMaW5lLFwiXCIsZVthK1wid2lkdGhcIl0pOmYocikmJm4uY2FsbChvLmZpbGwsZVthK1wiY29sb3JcIl0pfSl9LHgudXBkYXRlRGltcz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuYm91bmRzLG49KGUuZnJhbWV3aWR0aHx8MCkvMixpPXJbMF1bMF0tbixhPXJbMF1bMV0tbixsPXJbMV1bMF0taStuLGM9clsxXVsxXS1hK247cy5zZXRSZWN0KHRoaXMuY2xpcFJlY3QsaSxhLGwsYyksdGhpcy5iZ1JlY3QuY2FsbChzLnNldFJlY3QsaSxhLGwsYykuY2FsbChvLmZpbGwsZS5iZ2NvbG9yKSx0aGlzLnhheGlzLl9vZmZzZXQ9aSx0aGlzLnhheGlzLl9sZW5ndGg9bCx0aGlzLnlheGlzLl9vZmZzZXQ9YSx0aGlzLnlheGlzLl9sZW5ndGg9Y30seC51cGRhdGVGeD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsYT1yLmdyYXBoRGl2LG89ci5iZ1JlY3Qscz10LmRyYWdtb2RlLGM9dC5jbGlja21vZGU7aWYoIXIuaXNTdGF0aWMpe3ZhciB1O1wic2VsZWN0XCI9PT1zP3U9ZnVuY3Rpb24odCxlKXsodC5yYW5nZT17fSlbci5pZF09W3YoW2UueG1pbixlLnltaW5dKSx2KFtlLnhtYXgsZS55bWF4XSldfTpcImxhc3NvXCI9PT1zJiYodT1mdW5jdGlvbih0LGUsbil7KHQubGFzc29Qb2ludHM9e30pW3IuaWRdPW4uZmlsdGVyZWQubWFwKHYpfSk7dmFyIGc9e2VsZW1lbnQ6ci5iZ1JlY3Qubm9kZSgpLGdkOmEscGxvdGluZm86e2lkOnIuaWQseGF4aXM6ci54YXhpcyx5YXhpczpyLnlheGlzLGZpbGxSYW5nZUl0ZW1zOnV9LHhheGVzOltyLnhheGlzXSx5YXhlczpbci55YXhpc10sc3VicGxvdDpyLmlkLGNsaWNrRm46ZnVuY3Rpb24oZSl7Mj09PWUmJnQuX3pvb21sYXllci5zZWxlY3RBbGwoXCIuc2VsZWN0LW91dGxpbmVcIikucmVtb3ZlKCl9fTtcInBhblwiPT09cz8oby5ub2RlKCkub25tb3VzZWRvd249bnVsbCxvLmNhbGwoZChyLGUpKSxvLm9uKFwiZGJsY2xpY2suem9vbVwiLGZ1bmN0aW9uKCl7dmFyIHQ9ci52aWV3SW5pdGlhbCxlPXt9O2Zvcih2YXIgbiBpbiB0KWVbci5pZCtcIi5cIituXT10W25dO2kuY2FsbChcIl9ndWlSZWxheW91dFwiLGEsZSksYS5lbWl0KFwicGxvdGx5X2RvdWJsZWNsaWNrXCIsbnVsbCl9KSxhLl9jb250ZXh0Ll9zY3JvbGxab29tLmdlb3x8by5vbihcIndoZWVsLnpvb21cIixudWxsKSk6XCJzZWxlY3RcIiE9PXMmJlwibGFzc29cIiE9PXN8fChvLm9uKFwiLnpvb21cIixudWxsKSxnLnByZXBGbj1mdW5jdGlvbih0LGUscil7Zih0LGUscixnLHMpfSxoLmluaXQoZykpLG8ub24oXCJtb3VzZW1vdmVcIixmdW5jdGlvbigpe3ZhciB0PXIucHJvamVjdGlvbi5pbnZlcnQobi5tb3VzZSh0aGlzKSk7aWYoIXR8fGlzTmFOKHRbMF0pfHxpc05hTih0WzFdKSlyZXR1cm4gaC51bmhvdmVyKGEsbi5ldmVudCk7ci54YXhpcy5wMmM9ZnVuY3Rpb24oKXtyZXR1cm4gdFswXX0sci55YXhpcy5wMmM9ZnVuY3Rpb24oKXtyZXR1cm4gdFsxXX0sbC5ob3ZlcihhLG4uZXZlbnQsci5pZCl9KSxvLm9uKFwibW91c2VvdXRcIixmdW5jdGlvbigpe2EuX2RyYWdnaW5nfHxoLnVuaG92ZXIoYSxuLmV2ZW50KX0pLG8ub24oXCJjbGlja1wiLGZ1bmN0aW9uKCl7XCJzZWxlY3RcIiE9PXMmJlwibGFzc29cIiE9PXMmJihjLmluZGV4T2YoXCJzZWxlY3RcIik+LTEmJnAobi5ldmVudCxhLFtyLnhheGlzXSxbci55YXhpc10sci5pZCxnKSxjLmluZGV4T2YoXCJldmVudFwiKT4tMSYmbC5jbGljayhhLG4uZXZlbnQpKX0pfWZ1bmN0aW9uIHYodCl7cmV0dXJuIHIucHJvamVjdGlvbi5pbnZlcnQoW3RbMF0rci54YXhpcy5fb2Zmc2V0LHRbMV0rci55YXhpcy5fb2Zmc2V0XSl9fSx4Lm1ha2VGcmFtZXdvcms9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dC5ncmFwaERpdixyPWUuX2Z1bGxMYXlvdXQsaT1cImNsaXBcIityLl91aWQrdC5pZDt0LmNsaXBEZWY9ci5fY2xpcHMuYXBwZW5kKFwiY2xpcFBhdGhcIikuYXR0cihcImlkXCIsaSksdC5jbGlwUmVjdD10LmNsaXBEZWYuYXBwZW5kKFwicmVjdFwiKSx0LmZyYW1ld29yaz1uLnNlbGVjdCh0LmNvbnRhaW5lcikuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIixcImdlbyBcIit0LmlkKS5jYWxsKHMuc2V0Q2xpcFVybCxpLGUpLHQucHJvamVjdD1mdW5jdGlvbihlKXt2YXIgcj10LnByb2plY3Rpb24oZSk7cmV0dXJuIHI/W3JbMF0tdC54YXhpcy5fb2Zmc2V0LHJbMV0tdC55YXhpcy5fb2Zmc2V0XTpbbnVsbCxudWxsXX0sdC54YXhpcz17X2lkOlwieFwiLGMycDpmdW5jdGlvbihlKXtyZXR1cm4gdC5wcm9qZWN0KGUpWzBdfX0sdC55YXhpcz17X2lkOlwieVwiLGMycDpmdW5jdGlvbihlKXtyZXR1cm4gdC5wcm9qZWN0KGUpWzFdfX0sdC5tb2NrQXhpcz17dHlwZTpcImxpbmVhclwiLHNob3dleHBvbmVudDpcImFsbFwiLGV4cG9uZW50Zm9ybWF0OlwiQlwifSx1LnNldENvbnZlcnQodC5tb2NrQXhpcyxyKX0seC5zYXZlVmlld0luaXRpYWw9ZnVuY3Rpb24odCl7dmFyIGU9dC5jZW50ZXJ8fHt9LHI9dC5wcm9qZWN0aW9uLG49ci5yb3RhdGlvbnx8e307dC5faXNTY29wZWQ/dGhpcy52aWV3SW5pdGlhbD17XCJjZW50ZXIubG9uXCI6ZS5sb24sXCJjZW50ZXIubGF0XCI6ZS5sYXQsXCJwcm9qZWN0aW9uLnNjYWxlXCI6ci5zY2FsZX06dC5faXNDbGlwcGVkP3RoaXMudmlld0luaXRpYWw9e1wicHJvamVjdGlvbi5zY2FsZVwiOnIuc2NhbGUsXCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvblwiOm4ubG9uLFwicHJvamVjdGlvbi5yb3RhdGlvbi5sYXRcIjpuLmxhdH06dGhpcy52aWV3SW5pdGlhbD17XCJjZW50ZXIubG9uXCI6ZS5sb24sXCJjZW50ZXIubGF0XCI6ZS5sYXQsXCJwcm9qZWN0aW9uLnNjYWxlXCI6ci5zY2FsZSxcInByb2plY3Rpb24ucm90YXRpb24ubG9uXCI6bi5sb259fSx4LnJlbmRlcj1mdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5wcm9qZWN0aW9uLHI9ZS5nZXRQYXRoKCk7ZnVuY3Rpb24gbih0KXt2YXIgcj1lKHQubG9ubGF0KTtyZXR1cm4gcj9cInRyYW5zbGF0ZShcIityWzBdK1wiLFwiK3JbMV0rXCIpXCI6bnVsbH1mdW5jdGlvbiBpKHQpe3JldHVybiBlLmlzTG9uTGF0T3ZlckVkZ2VzKHQubG9ubGF0KT9cIm5vbmVcIjpudWxsfWZvcih0IGluIHRoaXMuYmFzZVBhdGhzKXRoaXMuYmFzZVBhdGhzW3RdLmF0dHIoXCJkXCIscik7Zm9yKHQgaW4gdGhpcy5kYXRhUGF0aHMpdGhpcy5kYXRhUGF0aHNbdF0uYXR0cihcImRcIixmdW5jdGlvbih0KXtyZXR1cm4gcih0Lmdlb2pzb24pfSk7Zm9yKHQgaW4gdGhpcy5kYXRhUG9pbnRzKXRoaXMuZGF0YVBvaW50c1t0XS5hdHRyKFwiZGlzcGxheVwiLGkpLmF0dHIoXCJ0cmFuc2Zvcm1cIixuKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50XCI6NTk2LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi90b3BvanNvbl91dGlsc1wiOjcyOCxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9jYXJ0ZXNpYW4vc2VsZWN0XCI6NzY2LFwiLi4vcGxvdHNcIjo4MTAsXCIuL2NvbnN0YW50c1wiOjc3NyxcIi4vcHJvamVjdGlvbnNcIjo3ODIsXCIuL3pvb21cIjo3ODMsZDM6MTU1LFwidG9wb2pzb24tY2xpZW50XCI6NTI1fV0sNzc5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCIpLmdldFN1YnBsb3RDYWxjRGF0YSxpPXQoXCIuLi8uLi9saWJcIikuY291bnRlclJlZ2V4LGE9dChcIi4vZ2VvXCIpLG89XCJnZW9cIixzPWkobyksbD17fTtsW29dPXt2YWxUeXBlOlwic3VicGxvdGlkXCIsZGZsdDpvLGVkaXRUeXBlOlwiY2FsY1wifSxlLmV4cG9ydHM9e2F0dHI6byxuYW1lOm8saWRSb290Om8saWRSZWdleDpzLGF0dHJSZWdleDpzLGF0dHJpYnV0ZXM6bCxsYXlvdXRBdHRyaWJ1dGVzOnQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoXCIuL2xheW91dF9kZWZhdWx0c1wiKSxwbG90OmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj10LmNhbGNkYXRhLGk9ZS5fc3VicGxvdHNbb107dm9pZCAwPT09d2luZG93LlBsb3RseUdlb0Fzc2V0cyYmKHdpbmRvdy5QbG90bHlHZW9Bc3NldHM9e3RvcG9qc29uOnt9fSk7Zm9yKHZhciBzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBsPWlbc10sYz1uKHIsbyxsKSx1PWVbbF0uX3N1YnBsb3Q7dXx8KHU9YSh7aWQ6bCxncmFwaERpdjp0LGNvbnRhaW5lcjplLl9nZW9sYXllci5ub2RlKCksdG9wb2pzb25VUkw6dC5fY29udGV4dC50b3BvanNvblVSTCxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdH0pLGVbbF0uX3N1YnBsb3Q9dSksdS5wbG90KGMsZSx0Ll9wcm9taXNlcyl9fSx1cGRhdGVGeDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzW29dLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9ZVtyW25dXTtpLl9zdWJwbG90LnVwZGF0ZUZ4KGUsaSl9fSxjbGVhbjpmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9bi5fc3VicGxvdHNbb118fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIHM9aVthXSxsPW5bc10uX3N1YnBsb3Q7IWVbc10mJmwmJihsLmZyYW1ld29yay5yZW1vdmUoKSxsLmNsaXBEZWYucmVtb3ZlKCkpfX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9nZXRfZGF0YVwiOjc4NCxcIi4vZ2VvXCI6Nzc4LFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjc4MCxcIi4vbGF5b3V0X2RlZmF1bHRzXCI6NzgxfV0sNzgwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi9kb21haW5cIikuYXR0cmlidXRlcyxhPXQoXCIuL2NvbnN0YW50c1wiKSxvPXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsLHM9e3JhbmdlOnt2YWxUeXBlOlwiaW5mb19hcnJheVwiLGl0ZW1zOlt7dmFsVHlwZTpcIm51bWJlclwifSx7dmFsVHlwZTpcIm51bWJlclwifV19LHNob3dncmlkOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LHRpY2swOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowfSxkdGljazp7dmFsVHlwZTpcIm51bWJlclwifSxncmlkY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6bi5saWdodExpbmV9LGdyaWR3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MX19OyhlLmV4cG9ydHM9byh7ZG9tYWluOmkoe25hbWU6XCJnZW9cIn0se30pLHJlc29sdXRpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOlsxMTAsNTBdLGRmbHQ6MTEwLGNvZXJjZU51bWJlcjohMH0sc2NvcGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOk9iamVjdC5rZXlzKGEuc2NvcGVEZWZhdWx0cyksZGZsdDpcIndvcmxkXCJ9LHByb2plY3Rpb246e3R5cGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOk9iamVjdC5rZXlzKGEucHJvak5hbWVzKX0scm90YXRpb246e2xvbjp7dmFsVHlwZTpcIm51bWJlclwifSxsYXQ6e3ZhbFR5cGU6XCJudW1iZXJcIn0scm9sbDp7dmFsVHlwZTpcIm51bWJlclwifX0scGFyYWxsZWxzOnt2YWxUeXBlOlwiaW5mb19hcnJheVwiLGl0ZW1zOlt7dmFsVHlwZTpcIm51bWJlclwifSx7dmFsVHlwZTpcIm51bWJlclwifV19LHNjYWxlOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxfX0sY2VudGVyOntsb246e3ZhbFR5cGU6XCJudW1iZXJcIn0sbGF0Ont2YWxUeXBlOlwibnVtYmVyXCJ9fSxzaG93Y29hc3RsaW5lczp7dmFsVHlwZTpcImJvb2xlYW5cIn0sY29hc3RsaW5lY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6bi5kZWZhdWx0TGluZX0sY29hc3RsaW5ld2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjF9LHNob3dsYW5kOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LGxhbmRjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDphLmxhbmRDb2xvcn0sc2hvd29jZWFuOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LG9jZWFuY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6YS53YXRlckNvbG9yfSxzaG93bGFrZXM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sbGFrZWNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmEud2F0ZXJDb2xvcn0sc2hvd3JpdmVyczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxyaXZlcmNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmEud2F0ZXJDb2xvcn0scml2ZXJ3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MX0sc2hvd2NvdW50cmllczp7dmFsVHlwZTpcImJvb2xlYW5cIn0sY291bnRyeWNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0Om4uZGVmYXVsdExpbmV9LGNvdW50cnl3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MX0sc2hvd3N1YnVuaXRzOnt2YWxUeXBlOlwiYm9vbGVhblwifSxzdWJ1bml0Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6bi5kZWZhdWx0TGluZX0sc3VidW5pdHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxfSxzaG93ZnJhbWU6e3ZhbFR5cGU6XCJib29sZWFuXCJ9LGZyYW1lY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6bi5kZWZhdWx0TGluZX0sZnJhbWV3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MX0sYmdjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDpuLmJhY2tncm91bmR9LGxvbmF4aXM6cyxsYXRheGlzOnN9LFwicGxvdFwiLFwiZnJvbS1yb290XCIpKS51aXJldmlzaW9uPXt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJub25lXCJ9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIjo1NzcsXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi4vZG9tYWluXCI6Nzc0LFwiLi9jb25zdGFudHNcIjo3Nzd9XSw3ODE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vc3VicGxvdF9kZWZhdWx0c1wiKSxpPXQoXCIuL2NvbnN0YW50c1wiKSxhPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLG89aS5heGVzTmFtZXM7ZnVuY3Rpb24gcyh0LGUscil7dmFyIG49cihcInJlc29sdXRpb25cIiksYT1yKFwic2NvcGVcIikscz1pLnNjb3BlRGVmYXVsdHNbYV0sbD1yKFwicHJvamVjdGlvbi50eXBlXCIscy5wcm9qVHlwZSksYz1lLl9pc0FsYmVyc1VzYT1cImFsYmVycyB1c2FcIj09PWw7YyYmKGE9ZS5zY29wZT1cInVzYVwiKTt2YXIgdT1lLl9pc1Njb3BlZD1cIndvcmxkXCIhPT1hLGg9ZS5faXNDb25pYz0tMSE9PWwuaW5kZXhPZihcImNvbmljXCIpO2UuX2lzQ2xpcHBlZD0hIWkubG9uYXhpc1NwYW5bbF07Zm9yKHZhciBmPTA7ZjxvLmxlbmd0aDtmKyspe3ZhciBwLGQ9b1tmXSxnPVszMCwxMF1bZl07aWYodSlwPXNbZCtcIlJhbmdlXCJdO2Vsc2V7dmFyIHY9aVtkK1wiU3BhblwiXSxtPSh2W2xdfHx2W1wiKlwiXSkvMix5PXIoXCJwcm9qZWN0aW9uLnJvdGF0aW9uLlwiK2Quc3Vic3RyKDAsMykscy5wcm9qUm90YXRlW2ZdKTtwPVt5LW0seSttXX1yKGQrXCIucmFuZ2VcIixwKSxyKGQrXCIudGljazBcIikscihkK1wiLmR0aWNrXCIsZykscihkK1wiLnNob3dncmlkXCIpJiYocihkK1wiLmdyaWRjb2xvclwiKSxyKGQrXCIuZ3JpZHdpZHRoXCIpKX12YXIgeD1lLmxvbmF4aXMucmFuZ2UsYj1lLmxhdGF4aXMucmFuZ2UsXz14WzBdLHc9eFsxXTtfPjAmJnc8MCYmKHcrPTM2MCk7dmFyIGssQSxULE09KF8rdykvMjtpZighYyl7dmFyIFM9dT9zLnByb2pSb3RhdGU6W00sMCwwXTtrPXIoXCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvblwiLFNbMF0pLHIoXCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxhdFwiLFNbMV0pLHIoXCJwcm9qZWN0aW9uLnJvdGF0aW9uLnJvbGxcIixTWzJdKSxyKFwic2hvd2NvYXN0bGluZXNcIiwhdSkmJihyKFwiY29hc3RsaW5lY29sb3JcIikscihcImNvYXN0bGluZXdpZHRoXCIpKSxyKFwic2hvd29jZWFuXCIpJiZyKFwib2NlYW5jb2xvclwiKX0oYz8oQT0tOTYuNixUPTM4LjcpOihBPXU/TTprLFQ9KGJbMF0rYlsxXSkvMikscihcImNlbnRlci5sb25cIixBKSxyKFwiY2VudGVyLmxhdFwiLFQpLGgpJiZyKFwicHJvamVjdGlvbi5wYXJhbGxlbHNcIixzLnByb2pQYXJhbGxlbHN8fFswLDYwXSk7cihcInByb2plY3Rpb24uc2NhbGVcIikscihcInNob3dsYW5kXCIpJiZyKFwibGFuZGNvbG9yXCIpLHIoXCJzaG93bGFrZXNcIikmJnIoXCJsYWtlY29sb3JcIikscihcInNob3dyaXZlcnNcIikmJihyKFwicml2ZXJjb2xvclwiKSxyKFwicml2ZXJ3aWR0aFwiKSkscihcInNob3djb3VudHJpZXNcIix1JiZcInVzYVwiIT09YSkmJihyKFwiY291bnRyeWNvbG9yXCIpLHIoXCJjb3VudHJ5d2lkdGhcIikpLChcInVzYVwiPT09YXx8XCJub3J0aCBhbWVyaWNhXCI9PT1hJiY1MD09PW4pJiYocihcInNob3dzdWJ1bml0c1wiLCEwKSxyKFwic3VidW5pdGNvbG9yXCIpLHIoXCJzdWJ1bml0d2lkdGhcIikpLHV8fHIoXCJzaG93ZnJhbWVcIiwhMCkmJihyKFwiZnJhbWVjb2xvclwiKSxyKFwiZnJhbWV3aWR0aFwiKSkscihcImJnY29sb3JcIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtuKHQsZSxyLHt0eXBlOlwiZ2VvXCIsYXR0cmlidXRlczphLGhhbmRsZURlZmF1bHRzOnMscGFydGl0aW9uOlwieVwifSl9fSx7XCIuLi9zdWJwbG90X2RlZmF1bHRzXCI6ODI0LFwiLi9jb25zdGFudHNcIjo3NzcsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6NzgwfV0sNzgyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlKXtyZXR1cm57dHlwZTpcIkZlYXR1cmVcIixpZDp0LmlkLHByb3BlcnRpZXM6dC5wcm9wZXJ0aWVzLGdlb21ldHJ5OnIodC5nZW9tZXRyeSxlKX19ZnVuY3Rpb24gcihlLG4pe2lmKCFlKXJldHVybiBudWxsO2lmKFwiR2VvbWV0cnlDb2xsZWN0aW9uXCI9PT1lLnR5cGUpcmV0dXJue3R5cGU6XCJHZW9tZXRyeUNvbGxlY3Rpb25cIixnZW9tZXRyaWVzOm9iamVjdC5nZW9tZXRyaWVzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gcih0LG4pfSl9O2lmKCFjLmhhc093blByb3BlcnR5KGUudHlwZSkpcmV0dXJuIG51bGw7dmFyIGk9Y1tlLnR5cGVdO3JldHVybiB0Lmdlby5zdHJlYW0oZSxuKGkpKSxpLnJlc3VsdCgpfXQuZ2VvLnByb2plY3Q9ZnVuY3Rpb24odCxlKXt2YXIgaT1lLnN0cmVhbTtpZighaSl0aHJvdyBuZXcgRXJyb3IoXCJub3QgeWV0IHN1cHBvcnRlZFwiKTtyZXR1cm4odCYmbi5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP25bdC50eXBlXTpyKSh0LGkpfTt2YXIgbj17RmVhdHVyZTplLEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKHQscil7cmV0dXJue3R5cGU6XCJGZWF0dXJlQ29sbGVjdGlvblwiLGZlYXR1cmVzOnQuZmVhdHVyZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlKHQscil9KX19fSxpPVtdLGE9W10sbz17cG9pbnQ6ZnVuY3Rpb24odCxlKXtpLnB1c2goW3QsZV0pfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1pLmxlbmd0aD9pLmxlbmd0aDwyP3t0eXBlOlwiUG9pbnRcIixjb29yZGluYXRlczppWzBdfTp7dHlwZTpcIk11bHRpUG9pbnRcIixjb29yZGluYXRlczppfTpudWxsO3JldHVybiBpPVtdLHR9fSxzPXtsaW5lU3RhcnQ6dSxwb2ludDpmdW5jdGlvbih0LGUpe2kucHVzaChbdCxlXSl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtpLmxlbmd0aCYmKGEucHVzaChpKSxpPVtdKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9YS5sZW5ndGg/YS5sZW5ndGg8Mj97dHlwZTpcIkxpbmVTdHJpbmdcIixjb29yZGluYXRlczphWzBdfTp7dHlwZTpcIk11bHRpTGluZVN0cmluZ1wiLGNvb3JkaW5hdGVzOmF9Om51bGw7cmV0dXJuIGE9W10sdH19LGw9e3BvbHlnb25TdGFydDp1LGxpbmVTdGFydDp1LHBvaW50OmZ1bmN0aW9uKHQsZSl7aS5wdXNoKFt0LGVdKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PWkubGVuZ3RoO2lmKHQpe2Rve2kucHVzaChpWzBdLnNsaWNlKCkpfXdoaWxlKCsrdDw0KTthLnB1c2goaSksaT1bXX19LHBvbHlnb25FbmQ6dSxyZXN1bHQ6ZnVuY3Rpb24oKXtpZighYS5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIHQ9W10sZT1bXTtyZXR1cm4gYS5mb3JFYWNoKGZ1bmN0aW9uKHIpeyFmdW5jdGlvbih0KXtpZigoZT10Lmxlbmd0aCk8NClyZXR1cm4hMTtmb3IodmFyIGUscj0wLG49dFtlLTFdWzFdKnRbMF1bMF0tdFtlLTFdWzBdKnRbMF1bMV07KytyPGU7KW4rPXRbci0xXVsxXSp0W3JdWzBdLXRbci0xXVswXSp0W3JdWzFdO3JldHVybiBuPD0wfShyKT9lLnB1c2gocik6dC5wdXNoKFtyXSl9KSxlLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHI9ZVswXTt0LnNvbWUoZnVuY3Rpb24odCl7aWYoZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZVswXSxuPWVbMV0saT0hMSxhPTAsbz10Lmxlbmd0aCxzPW8tMTthPG87cz1hKyspe3ZhciBsPXRbYV0sYz1sWzBdLHU9bFsxXSxoPXRbc10sZj1oWzBdLHA9aFsxXTt1Pm5ecD5uJiZyPChmLWMpKihuLXUpLyhwLXUpK2MmJihpPSFpKX1yZXR1cm4gaX0odFswXSxyKSlyZXR1cm4gdC5wdXNoKGUpLCEwfSl8fHQucHVzaChbZV0pfSksYT1bXSx0Lmxlbmd0aD90Lmxlbmd0aD4xP3t0eXBlOlwiTXVsdGlQb2x5Z29uXCIsY29vcmRpbmF0ZXM6dH06e3R5cGU6XCJQb2x5Z29uXCIsY29vcmRpbmF0ZXM6dFswXX06bnVsbH19LGM9e1BvaW50Om8sTXVsdGlQb2ludDpvLExpbmVTdHJpbmc6cyxNdWx0aUxpbmVTdHJpbmc6cyxQb2x5Z29uOmwsTXVsdGlQb2x5Z29uOmwsU3BoZXJlOmx9O2Z1bmN0aW9uIHUoKXt9dmFyIGg9MWUtNixmPWgqaCxwPU1hdGguUEksZD1wLzIsZz0oTWF0aC5zcXJ0KHApLHAvMTgwKSx2PTE4MC9wO2Z1bmN0aW9uIG0odCl7cmV0dXJuIHQ+MT9kOnQ8LTE/LWQ6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIHkodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/cDpNYXRoLmFjb3ModCl9dmFyIHg9dC5nZW8ucHJvamVjdGlvbixiPXQuZ2VvLnByb2plY3Rpb25NdXRhdG9yO2Z1bmN0aW9uIF8odCxlKXt2YXIgcj0oMitkKSpNYXRoLnNpbihlKTtlLz0yO2Zvcih2YXIgbj0wLGk9MS8wO248MTAmJk1hdGguYWJzKGkpPmg7bisrKXt2YXIgYT1NYXRoLmNvcyhlKTtlLT1pPShlK01hdGguc2luKGUpKihhKzIpLXIpLygyKmEqKDErYSkpfXJldHVyblsyL01hdGguc3FydChwKig0K3ApKSp0KigxK01hdGguY29zKGUpKSwyKk1hdGguc3FydChwLyg0K3ApKSpNYXRoLnNpbihlKV19dC5nZW8uaW50ZXJydXB0PWZ1bmN0aW9uKGUpe3ZhciByLG49W1tbWy1wLDBdLFswLGRdLFtwLDBdXV0sW1tbLXAsMF0sWzAsLWRdLFtwLDBdXV1dO2Z1bmN0aW9uIGkodCxyKXtmb3IodmFyIGk9cjwwPy0xOjEsYT1uWysocjwwKV0sbz0wLHM9YS5sZW5ndGgtMTtvPHMmJnQ+YVtvXVsyXVswXTsrK28pO3ZhciBsPWUodC1hW29dWzFdWzBdLHIpO3JldHVybiBsWzBdKz1lKGFbb11bMV1bMF0saSpyPmkqYVtvXVswXVsxXT9hW29dWzBdWzFdOnIpWzBdLGx9ZS5pbnZlcnQmJihpLmludmVydD1mdW5jdGlvbih0LGEpe2Zvcih2YXIgbz1yWysoYTwwKV0scz1uWysoYTwwKV0sYz0wLHU9by5sZW5ndGg7Yzx1OysrYyl7dmFyIGg9b1tjXTtpZihoWzBdWzBdPD10JiZ0PGhbMV1bMF0mJmhbMF1bMV08PWEmJmE8aFsxXVsxXSl7dmFyIGY9ZS5pbnZlcnQodC1lKHNbY11bMV1bMF0sMClbMF0sYSk7cmV0dXJuIGZbMF0rPXNbY11bMV1bMF0sbChpKGZbMF0sZlsxXSksW3QsYV0pP2Y6bnVsbH19fSk7dmFyIGE9dC5nZW8ucHJvamVjdGlvbihpKSxvPWEuc3RyZWFtO2Z1bmN0aW9uIHModCxlKXtmb3IodmFyIHIsbixpLGE9LTEsbz10Lmxlbmd0aCxzPXRbMF0sbD1bXTsrK2E8bzspe249KChyPXRbYV0pWzBdLXNbMF0pL2UsaT0oclsxXS1zWzFdKS9lO2Zvcih2YXIgYz0wO2M8ZTsrK2MpbC5wdXNoKFtzWzBdK2MqbixzWzFdK2MqaV0pO3M9cn1yZXR1cm4gbC5wdXNoKHIpLGx9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBNYXRoLmFicyh0WzBdLWVbMF0pPGgmJk1hdGguYWJzKHRbMV0tZVsxXSk8aH1yZXR1cm4gYS5zdHJlYW09ZnVuY3Rpb24oZSl7dmFyIHI9YS5yb3RhdGUoKSxpPW8oZSksbD0oYS5yb3RhdGUoWzAsMF0pLG8oZSkpO3JldHVybiBhLnJvdGF0ZShyKSxpLnNwaGVyZT1mdW5jdGlvbigpe3QuZ2VvLnN0cmVhbShmdW5jdGlvbigpe2Zvcih2YXIgZT0xZS02LHI9W10saT0wLGE9blswXS5sZW5ndGg7aTxhOysraSl7dmFyIG89blswXVtpXSxsPTE4MCpvWzBdWzBdL3AsYz0xODAqb1swXVsxXS9wLHU9MTgwKm9bMV1bMV0vcCxoPTE4MCpvWzJdWzBdL3AsZj0xODAqb1syXVsxXS9wO3IucHVzaChzKFtbbCtlLGMrZV0sW2wrZSx1LWVdLFtoLWUsdS1lXSxbaC1lLGYrZV1dLDMwKSl9Zm9yKHZhciBpPW5bMV0ubGVuZ3RoLTE7aT49MDstLWkpe3ZhciBvPW5bMV1baV0sbD0xODAqb1swXVswXS9wLGM9MTgwKm9bMF1bMV0vcCx1PTE4MCpvWzFdWzFdL3AsaD0xODAqb1syXVswXS9wLGY9MTgwKm9bMl1bMV0vcDtyLnB1c2gocyhbW2gtZSxmLWVdLFtoLWUsdStlXSxbbCtlLHUrZV0sW2wrZSxjLWVdXSwzMCkpfXJldHVybnt0eXBlOlwiUG9seWdvblwiLGNvb3JkaW5hdGVzOlt0Lm1lcmdlKHIpXX19KCksbCl9LGl9LGEubG9iZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybltbdFswXVswXSpwLzE4MCx0WzBdWzFdKnAvMTgwXSxbdFsxXVswXSpwLzE4MCx0WzFdWzFdKnAvMTgwXSxbdFsyXVswXSpwLzE4MCx0WzJdWzFdKnAvMTgwXV19KX0pLHI9bi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3ZhciByLG49ZSh0WzBdWzBdLHRbMF1bMV0pWzBdLGk9ZSh0WzJdWzBdLHRbMl1bMV0pWzBdLGE9ZSh0WzFdWzBdLHRbMF1bMV0pWzFdLG89ZSh0WzFdWzBdLHRbMV1bMV0pWzFdO3JldHVybiBhPm8mJihyPWEsYT1vLG89ciksW1tuLGFdLFtpLG9dXX0pfSksYSk6bi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybltbMTgwKnRbMF1bMF0vcCwxODAqdFswXVsxXS9wXSxbMTgwKnRbMV1bMF0vcCwxODAqdFsxXVsxXS9wXSxbMTgwKnRbMl1bMF0vcCwxODAqdFsyXVsxXS9wXV19KX0pfSxhfSxfLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPS41KmUqTWF0aC5zcXJ0KCg0K3ApL3ApLG49bShyKSxpPU1hdGguY29zKG4pO3JldHVyblt0LygyL01hdGguc3FydChwKig0K3ApKSooMStpKSksbSgobityKihpKzIpKS8oMitkKSldfSwodC5nZW8uZWNrZXJ0ND1mdW5jdGlvbigpe3JldHVybiB4KF8pfSkucmF3PV87dmFyIHc9dC5nZW8uYXppbXV0aGFsRXF1YWxBcmVhLnJhdztmdW5jdGlvbiBrKHQsZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyJiYoZT10KSwxPT09ZSlyZXR1cm4gdztpZihlPT09MS8wKXJldHVybiBBO2Z1bmN0aW9uIHIocixuKXt2YXIgaT13KHIvZSxuKTtyZXR1cm4gaVswXSo9dCxpfXJldHVybiByLmludmVydD1mdW5jdGlvbihyLG4pe3ZhciBpPXcuaW52ZXJ0KHIvdCxuKTtyZXR1cm4gaVswXSo9ZSxpfSxyfWZ1bmN0aW9uIEEodCxlKXtyZXR1cm5bdCpNYXRoLmNvcyhlKS9NYXRoLmNvcyhlLz0yKSwyKk1hdGguc2luKGUpXX1mdW5jdGlvbiBUKHQsZSl7cmV0dXJuWzMqdC8oMipwKSpNYXRoLnNxcnQocCpwLzMtZSplKSxlXX1mdW5jdGlvbiBNKHQsZSl7cmV0dXJuW3QsMS4yNSpNYXRoLmxvZyhNYXRoLnRhbihwLzQrLjQqZSkpXX1mdW5jdGlvbiBTKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcixuPXQqTWF0aC5zaW4oZSksaT0zMDtkb3tlLT1yPShlK01hdGguc2luKGUpLW4pLygxK01hdGguY29zKGUpKX13aGlsZShNYXRoLmFicyhyKT5oJiYtLWk+MCk7cmV0dXJuIGUvMn19QS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj0yKm0oZS8yKTtyZXR1cm5bdCpNYXRoLmNvcyhyLzIpL01hdGguY29zKHIpLHJdfSwodC5nZW8uaGFtbWVyPWZ1bmN0aW9uKCl7dmFyIHQ9MixlPWIoaykscj1lKHQpO3JldHVybiByLmNvZWZmaWNpZW50PWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UodD0rcik6dH0scn0pLnJhdz1rLFQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuWzIvMypwKnQvTWF0aC5zcXJ0KHAqcC8zLWUqZSksZV19LCh0Lmdlby5rYXZyYXlza2l5Nz1mdW5jdGlvbigpe3JldHVybiB4KFQpfSkucmF3PVQsTS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdCwyLjUqTWF0aC5hdGFuKE1hdGguZXhwKC44KmUpKS0uNjI1KnBdfSwodC5nZW8ubWlsbGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHgoTSl9KS5yYXc9TSxTKHApO3ZhciBFPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1TKHIpO2Z1bmN0aW9uIGkocixpKXtyZXR1cm5bdCpyKk1hdGguY29zKGk9bihpKSksZSpNYXRoLnNpbihpKV19cmV0dXJuIGkuaW52ZXJ0PWZ1bmN0aW9uKG4saSl7dmFyIGE9bShpL2UpO3JldHVybltuLyh0Kk1hdGguY29zKGEpKSxtKCgyKmErTWF0aC5zaW4oMiphKSkvcildfSxpfShNYXRoLlNRUlQyL2QsTWF0aC5TUVJUMixwKTtmdW5jdGlvbiBDKHQsZSl7dmFyIHI9ZSplLG49cipyO3JldHVyblt0KiguODcwNy0uMTMxOTc5KnIrbioobiooLjAwMzk3MSpyLS4wMDE1MjkqbiktLjAxMzc5MSkpLGUqKDEuMDA3MjI2K3IqKC4wMTUwODUrbiooLjAyODg3NCpyLS4wNDQ0NzUtLjAwNTkxNipuKSkpXX0odC5nZW8ubW9sbHdlaWRlPWZ1bmN0aW9uKCl7cmV0dXJuIHgoRSl9KS5yYXc9RSxDLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByLG49ZSxpPTI1O2Rve3ZhciBhPW4qbixvPWEqYTtuLT1yPShuKigxLjAwNzIyNithKiguMDE1MDg1K28qKC4wMjg4NzQqYS0uMDQ0NDc1LS4wMDU5MTYqbykpKS1lKS8oMS4wMDcyMjYrYSooLjA0NTI1NStvKiguMjU5ODY2KmEtLjMxMTMyNS0uMDA1OTE2KjExKm8pKSl9d2hpbGUoTWF0aC5hYnMocik+aCYmLS1pPjApO3JldHVyblt0LyguODcwNysoYT1uKm4pKihhKihhKmEqYSooLjAwMzk3MS0uMDAxNTI5KmEpLS4wMTM3OTEpLS4xMzE5NzkpKSxuXX0sKHQuZ2VvLm5hdHVyYWxFYXJ0aD1mdW5jdGlvbigpe3JldHVybiB4KEMpfSkucmF3PUM7dmFyIEw9W1suOTk4NiwtLjA2Ml0sWzEsMF0sWy45OTg2LC4wNjJdLFsuOTk1NCwuMTI0XSxbLjk5LC4xODZdLFsuOTgyMiwuMjQ4XSxbLjk3MywuMzFdLFsuOTYsLjM3Ml0sWy45NDI3LC40MzRdLFsuOTIxNiwuNDk1OF0sWy44OTYyLC41NTcxXSxbLjg2NzksLjYxNzZdLFsuODM1LC42NzY5XSxbLjc5ODYsLjczNDZdLFsuNzU5NywuNzkwM10sWy43MTg2LC44NDM1XSxbLjY3MzIsLjg5MzZdLFsuNjIxMywuOTM5NF0sWy41NzIyLC45NzYxXSxbLjUzMjIsMV1dO2Z1bmN0aW9uIHoodCxlKXt2YXIgcixuPU1hdGgubWluKDE4LDM2Kk1hdGguYWJzKGUpL3ApLGk9TWF0aC5mbG9vcihuKSxhPW4taSxvPShyPUxbaV0pWzBdLHM9clsxXSxsPShyPUxbKytpXSlbMF0sYz1yWzFdLHU9KHI9TFtNYXRoLm1pbigxOSwrK2kpXSlbMF0saD1yWzFdO3JldHVyblt0KihsK2EqKHUtbykvMithKmEqKHUtMipsK28pLzIpLChlPjA/ZDotZCkqKGMrYSooaC1zKS8yK2EqYSooaC0yKmMrcykvMildfWZ1bmN0aW9uIE8odCxlKXtyZXR1cm5bdCpNYXRoLmNvcyhlKSxlXX1mdW5jdGlvbiBJKHQsZSl7dmFyIHIsbj1NYXRoLmNvcyhlKSxpPShyPXkobipNYXRoLmNvcyh0Lz0yKSkpP3IvTWF0aC5zaW4ocik6MTtyZXR1cm5bMipuKk1hdGguc2luKHQpKmksTWF0aC5zaW4oZSkqaV19ZnVuY3Rpb24gRCh0LGUpe3ZhciByPUkodCxlKTtyZXR1cm5bKHJbMF0rdC9kKS8yLChyWzFdK2UpLzJdfUwuZm9yRWFjaChmdW5jdGlvbih0KXt0WzFdKj0xLjAxNDR9KSx6LmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWUvZCxuPTkwKnIsaT1NYXRoLm1pbigxOCxNYXRoLmFicyhuLzUpKSxhPU1hdGgubWF4KDAsTWF0aC5mbG9vcihpKSk7ZG97dmFyIG89TFthXVsxXSxzPUxbYSsxXVsxXSxsPUxbTWF0aC5taW4oMTksYSsyKV1bMV0sYz1sLW8sdT1sLTIqcytvLGg9MiooTWF0aC5hYnMociktcykvYyxwPXUvYyxtPWgqKDEtcCpoKigxLTIqcCpoKSk7aWYobT49MHx8MT09PWEpe249KGU+PTA/NTotNSkqKG0raSk7dmFyIHkseD01MDtkb3ttPShpPU1hdGgubWluKDE4LE1hdGguYWJzKG4pLzUpKS0oYT1NYXRoLmZsb29yKGkpKSxvPUxbYV1bMV0scz1MW2ErMV1bMV0sbD1MW01hdGgubWluKDE5LGErMildWzFdLG4tPSh5PShlPj0wP2Q6LWQpKihzK20qKGwtbykvMittKm0qKGwtMipzK28pLzIpLWUpKnZ9d2hpbGUoTWF0aC5hYnMoeSk+ZiYmLS14PjApO2JyZWFrfX13aGlsZSgtLWE+PTApO3ZhciBiPUxbYV1bMF0sXz1MW2ErMV1bMF0sdz1MW01hdGgubWluKDE5LGErMildWzBdO3JldHVyblt0LyhfK20qKHctYikvMittKm0qKHctMipfK2IpLzIpLG4qZ119LCh0Lmdlby5yb2JpbnNvbj1mdW5jdGlvbigpe3JldHVybiB4KHopfSkucmF3PXosTy5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdC9NYXRoLmNvcyhlKSxlXX0sKHQuZ2VvLnNpbnVzb2lkYWw9ZnVuY3Rpb24oKXtyZXR1cm4geChPKX0pLnJhdz1PLEkuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7aWYoISh0KnQrNCplKmU+cCpwK2gpKXt2YXIgcj10LG49ZSxpPTI1O2Rve3ZhciBhLG89TWF0aC5zaW4ocikscz1NYXRoLnNpbihyLzIpLGw9TWF0aC5jb3Moci8yKSxjPU1hdGguc2luKG4pLHU9TWF0aC5jb3MobiksZj1NYXRoLnNpbigyKm4pLGQ9YypjLGc9dSp1LHY9cypzLG09MS1nKmwqbCx4PW0/eSh1KmwpKk1hdGguc3FydChhPTEvbSk6YT0wLGI9Mip4KnUqcy10LF89eCpjLWUsdz1hKihnKnYreCp1KmwqZCksaz1hKiguNSpvKmYtMip4KmMqcyksQT0uMjUqYSooZipzLXgqYypnKm8pLFQ9YSooZCpsK3gqdip1KSxNPWsqQS1UKnc7aWYoIU0pYnJlYWs7dmFyIFM9KF8qay1iKlQpL00sRT0oYipBLV8qdykvTTtyLT1TLG4tPUV9d2hpbGUoKE1hdGguYWJzKFMpPmh8fE1hdGguYWJzKEUpPmgpJiYtLWk+MCk7cmV0dXJuW3Isbl19fSwodC5nZW8uYWl0b2ZmPWZ1bmN0aW9uKCl7cmV0dXJuIHgoSSl9KS5yYXc9SSxELmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPXQsbj1lLGk9MjU7ZG97dmFyIGEsbz1NYXRoLmNvcyhuKSxzPU1hdGguc2luKG4pLGw9TWF0aC5zaW4oMipuKSxjPXMqcyx1PW8qbyxmPU1hdGguc2luKHIpLHA9TWF0aC5jb3Moci8yKSxnPU1hdGguc2luKHIvMiksdj1nKmcsbT0xLXUqcCpwLHg9bT95KG8qcCkqTWF0aC5zcXJ0KGE9MS9tKTphPTAsYj0uNSooMip4Km8qZytyL2QpLXQsXz0uNSooeCpzK24pLWUsdz0uNSphKih1KnYreCpvKnAqYykrLjUvZCxrPWEqKGYqbC80LXgqcypnKSxBPS4xMjUqYSoobCpnLXgqcyp1KmYpLFQ9LjUqYSooYypwK3gqdipvKSsuNSxNPWsqQS1UKncsUz0oXyprLWIqVCkvTSxFPShiKkEtXyp3KS9NO3ItPVMsbi09RX13aGlsZSgoTWF0aC5hYnMoUyk+aHx8TWF0aC5hYnMoRSk+aCkmJi0taT4wKTtyZXR1cm5bcixuXX0sKHQuZ2VvLndpbmtlbDM9ZnVuY3Rpb24oKXtyZXR1cm4geChEKX0pLnJhdz1EfX0se31dLDc4MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vLi4vcmVnaXN0cnlcIiksbz1NYXRoLlBJLzE4MCxzPTE4MC9NYXRoLlBJLGw9e2N1cnNvcjpcInBvaW50ZXJcIn0sYz17Y3Vyc29yOlwiYXV0b1wifTtmdW5jdGlvbiB1KHQsZSl7cmV0dXJuIG4uYmVoYXZpb3Iuem9vbSgpLnRyYW5zbGF0ZShlLnRyYW5zbGF0ZSgpKS5zY2FsZShlLnNjYWxlKCkpfWZ1bmN0aW9uIGgodCxlLHIpe3ZhciBuPXQuaWQsbz10LmdyYXBoRGl2LHM9by5sYXlvdXQsbD1zW25dLGM9by5fZnVsbExheW91dCx1PWNbbl0saD17fSxmPXt9O2Z1bmN0aW9uIHAodCxlKXtoW24rXCIuXCIrdF09aS5uZXN0ZWRQcm9wZXJ0eShsLHQpLmdldCgpLGEuY2FsbChcIl9zdG9yZURpcmVjdEdVSUVkaXRcIixzLGMuX3ByZUdVSSxoKTt2YXIgcj1pLm5lc3RlZFByb3BlcnR5KHUsdCk7ci5nZXQoKSE9PWUmJihyLnNldChlKSxpLm5lc3RlZFByb3BlcnR5KGwsdCkuc2V0KGUpLGZbbitcIi5cIit0XT1lKX1yKHApLHAoXCJwcm9qZWN0aW9uLnNjYWxlXCIsZS5zY2FsZSgpL3QuZml0U2NhbGUpLG8uZW1pdChcInBsb3RseV9yZWxheW91dFwiLGYpfWZ1bmN0aW9uIGYodCxlKXt2YXIgcj11KDAsZSk7ZnVuY3Rpb24gaShyKXt2YXIgbj1lLmludmVydCh0Lm1pZFB0KTtyKFwiY2VudGVyLmxvblwiLG5bMF0pLHIoXCJjZW50ZXIubGF0XCIsblsxXSl9cmV0dXJuIHIub24oXCJ6b29tc3RhcnRcIixmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnN0eWxlKGwpfSkub24oXCJ6b29tXCIsZnVuY3Rpb24oKXtlLnNjYWxlKG4uZXZlbnQuc2NhbGUpLnRyYW5zbGF0ZShuLmV2ZW50LnRyYW5zbGF0ZSksdC5yZW5kZXIoKX0pLm9uKFwiem9vbWVuZFwiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUoYyksaCh0LGUsaSl9KSxyfWZ1bmN0aW9uIHAodCxlKXt2YXIgcixpLGEsbyxzLGYscCxkLGcsdj11KDAsZSksbT0yO2Z1bmN0aW9uIHkodCl7cmV0dXJuIGUuaW52ZXJ0KHQpfWZ1bmN0aW9uIHgocil7dmFyIG49ZS5yb3RhdGUoKSxpPWUuaW52ZXJ0KHQubWlkUHQpO3IoXCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvblwiLC1uWzBdKSxyKFwiY2VudGVyLmxvblwiLGlbMF0pLHIoXCJjZW50ZXIubGF0XCIsaVsxXSl9cmV0dXJuIHYub24oXCJ6b29tc3RhcnRcIixmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnN0eWxlKGwpLHI9bi5tb3VzZSh0aGlzKSxpPWUucm90YXRlKCksYT1lLnRyYW5zbGF0ZSgpLG89aSxzPXkocil9KS5vbihcInpvb21cIixmdW5jdGlvbigpe2lmKGY9bi5tb3VzZSh0aGlzKSxmdW5jdGlvbih0KXt2YXIgcj15KHQpO2lmKCFyKXJldHVybiEwO3ZhciBuPWUocik7cmV0dXJuIE1hdGguYWJzKG5bMF0tdFswXSk+bXx8TWF0aC5hYnMoblsxXS10WzFdKT5tfShyKSlyZXR1cm4gdi5zY2FsZShlLnNjYWxlKCkpLHZvaWQgdi50cmFuc2xhdGUoZS50cmFuc2xhdGUoKSk7ZS5zY2FsZShuLmV2ZW50LnNjYWxlKSxlLnRyYW5zbGF0ZShbYVswXSxuLmV2ZW50LnRyYW5zbGF0ZVsxXV0pLHM/eShmKSYmKGQ9eShmKSxwPVtvWzBdKyhkWzBdLXNbMF0pLGlbMV0saVsyXV0sZS5yb3RhdGUocCksbz1wKTpzPXkocj1mKSxnPSEwLHQucmVuZGVyKCl9KS5vbihcInpvb21lbmRcIixmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnN0eWxlKGMpLGcmJmgodCxlLHgpfSksdn1mdW5jdGlvbiBkKHQsZSl7dmFyIHIsaT17cjplLnJvdGF0ZSgpLGs6ZS5zY2FsZSgpfSxhPXUoMCxlKSxmPWZ1bmN0aW9uKHQpe3ZhciBlPTAscj1hcmd1bWVudHMubGVuZ3RoLGk9W107Zm9yKDsrK2U8cjspaS5wdXNoKGFyZ3VtZW50c1tlXSk7dmFyIGE9bi5kaXNwYXRjaC5hcHBseShudWxsLGkpO3JldHVybiBhLm9mPWZ1bmN0aW9uKGUscil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBvO3RyeXtvPWkuc291cmNlRXZlbnQ9bi5ldmVudCxpLnRhcmdldD10LG4uZXZlbnQ9aSxhW2kudHlwZV0uYXBwbHkoZSxyKX1maW5hbGx5e24uZXZlbnQ9b319fSxhfShhLFwiem9vbXN0YXJ0XCIsXCJ6b29tXCIsXCJ6b29tZW5kXCIpLHA9MCxkPWEub247ZnVuY3Rpb24gbSh0KXt2YXIgcj1lLnJvdGF0ZSgpO3QoXCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvblwiLC1yWzBdKSx0KFwicHJvamVjdGlvbi5yb3RhdGlvbi5sYXRcIiwtclsxXSl9cmV0dXJuIGEub24oXCJ6b29tc3RhcnRcIixmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnN0eWxlKGwpO3ZhciB0LGMsdSxoLG0sYixfLHcsayxBLFQsTT1uLm1vdXNlKHRoaXMpLFM9ZS5yb3RhdGUoKSxFPVMsQz1lLnRyYW5zbGF0ZSgpLEw9KGM9LjUqKHQ9UylbMF0qbyx1PS41KnRbMV0qbyxoPS41KnRbMl0qbyxtPU1hdGguc2luKGMpLGI9TWF0aC5jb3MoYyksXz1NYXRoLnNpbih1KSx3PU1hdGguY29zKHUpLGs9TWF0aC5zaW4oaCksQT1NYXRoLmNvcyhoKSxbYip3KkErbSpfKmssbSp3KkEtYipfKmssYipfKkErbSp3KmssYip3KmstbSpfKkFdKTtyPWcoZSxNKSxkLmNhbGwoYSxcInpvb21cIixmdW5jdGlvbigpe3ZhciB0LGEsbyxsLGMsdSxoLHAsZCxtLGI9bi5tb3VzZSh0aGlzKTtpZihlLnNjYWxlKGkuaz1uLmV2ZW50LnNjYWxlKSxyKXtpZihnKGUsYikpe2Uucm90YXRlKFMpLnRyYW5zbGF0ZShDKTt2YXIgXz1nKGUsYiksdz1mdW5jdGlvbih0LGUpe2lmKCF0fHwhZSlyZXR1cm47dmFyIHI9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdFsxXSplWzJdLXRbMl0qZVsxXSx0WzJdKmVbMF0tdFswXSplWzJdLHRbMF0qZVsxXS10WzFdKmVbMF1dfSh0LGUpLG49TWF0aC5zcXJ0KHgocixyKSksaT0uNSpNYXRoLmFjb3MoTWF0aC5tYXgoLTEsTWF0aC5taW4oMSx4KHQsZSkpKSksYT1NYXRoLnNpbihpKS9uO3JldHVybiBuJiZbTWF0aC5jb3MoaSksclsyXSphLC1yWzFdKmEsclswXSphXX0ocixfKSxrPWZ1bmN0aW9uKHQpe3JldHVybltNYXRoLmF0YW4yKDIqKHRbMF0qdFsxXSt0WzJdKnRbM10pLDEtMioodFsxXSp0WzFdK3RbMl0qdFsyXSkpKnMsTWF0aC5hc2luKE1hdGgubWF4KC0xLE1hdGgubWluKDEsMioodFswXSp0WzJdLXRbM10qdFsxXSkpKSkqcyxNYXRoLmF0YW4yKDIqKHRbMF0qdFszXSt0WzFdKnRbMl0pLDEtMioodFsyXSp0WzJdK3RbM10qdFszXSkpKnNdfSgoYT13LG89KHQ9TClbMF0sbD10WzFdLGM9dFsyXSx1PXRbM10saD1hWzBdLHA9YVsxXSxkPWFbMl0sbT1hWzNdLFtvKmgtbCpwLWMqZC11Km0sbypwK2wqaCtjKm0tdSpkLG8qZC1sKm0rYypoK3UqcCxvKm0rbCpkLWMqcCt1KmhdKSksQT1pLnI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXkoZSwyLHRbMF0pO249eShuLDEsdFsxXSksbj15KG4sMCx0WzJdLXJbMl0pO3ZhciBpLGEsbz1lWzBdLGw9ZVsxXSxjPWVbMl0sdT1uWzBdLGg9blsxXSxmPW5bMl0scD1NYXRoLmF0YW4yKGwsbykqcyxkPU1hdGguc3FydChvKm8rbCpsKTtNYXRoLmFicyhoKT5kPyhhPShoPjA/OTA6LTkwKS1wLGk9MCk6KGE9TWF0aC5hc2luKGgvZCkqcy1wLGk9TWF0aC5zcXJ0KGQqZC1oKmgpKTt2YXIgZz0xODAtYS0yKnAsbT0oTWF0aC5hdGFuMihmLHUpLU1hdGguYXRhbjIoYyxpKSkqcyx4PShNYXRoLmF0YW4yKGYsdSktTWF0aC5hdGFuMihjLC1pKSkqcyxiPXYoclswXSxyWzFdLGEsbSksXz12KHJbMF0sclsxXSxnLHgpO3JldHVybiBiPD1fP1thLG0sclsyXV06W2cseCxyWzJdXX0oayxyLEUpO2lzRmluaXRlKEFbMF0pJiZpc0Zpbml0ZShBWzFdKSYmaXNGaW5pdGUoQVsyXSl8fChBPUUpLGUucm90YXRlKEEpLEU9QX19ZWxzZSByPWcoZSxNPWIpO2Yub2YodGhpcyxhcmd1bWVudHMpKHt0eXBlOlwiem9vbVwifSl9KSxUPWYub2YodGhpcyxhcmd1bWVudHMpLHArK3x8VCh7dHlwZTpcInpvb21zdGFydFwifSl9KS5vbihcInpvb21lbmRcIixmdW5jdGlvbigpe3ZhciByO24uc2VsZWN0KHRoaXMpLnN0eWxlKGMpLGQuY2FsbChhLFwiem9vbVwiLG51bGwpLHI9Zi5vZih0aGlzLGFyZ3VtZW50cyksLS1wfHxyKHt0eXBlOlwiem9vbWVuZFwifSksaCh0LGUsbSl9KS5vbihcInpvb20ucmVkcmF3XCIsZnVuY3Rpb24oKXt0LnJlbmRlcigpfSksbi5yZWJpbmQoYSxmLFwib25cIil9ZnVuY3Rpb24gZyh0LGUpe3ZhciByPXQuaW52ZXJ0KGUpO3JldHVybiByJiZpc0Zpbml0ZShyWzBdKSYmaXNGaW5pdGUoclsxXSkmJmZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0qbyxyPXRbMV0qbyxuPU1hdGguY29zKHIpO3JldHVybltuKk1hdGguY29zKGUpLG4qTWF0aC5zaW4oZSksTWF0aC5zaW4ocildfShyKX1mdW5jdGlvbiB2KHQsZSxyLG4pe3ZhciBpPW0oci10KSxhPW0obi1lKTtyZXR1cm4gTWF0aC5zcXJ0KGkqaSthKmEpfWZ1bmN0aW9uIG0odCl7cmV0dXJuKHQlMzYwKzU0MCklMzYwLTE4MH1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj1yKm8saT10LnNsaWNlKCksYT0wPT09ZT8xOjAscz0yPT09ZT8xOjIsbD1NYXRoLmNvcyhuKSxjPU1hdGguc2luKG4pO3JldHVybiBpW2FdPXRbYV0qbC10W3NdKmMsaVtzXT10W3NdKmwrdFthXSpjLGl9ZnVuY3Rpb24geCh0LGUpe2Zvcih2YXIgcj0wLG49MCxpPXQubGVuZ3RoO248aTsrK24pcis9dFtuXSplW25dO3JldHVybiByfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQucHJvamVjdGlvbjtyZXR1cm4oZS5faXNTY29wZWQ/ZjplLl9pc0NsaXBwZWQ/ZDpwKSh0LHIpfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksZDM6MTU1fV0sNzg0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4vY2FydGVzaWFuL2NvbnN0YW50c1wiKS5TVUJQTE9UX1BBVFRFUk47ci5nZXRTdWJwbG90Q2FsY0RhdGE9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPW4uc3VicGxvdHNSZWdpc3RyeVtlXTtpZighaSlyZXR1cm5bXTtmb3IodmFyIGE9aS5hdHRyLG89W10scz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbD10W3NdO2xbMF0udHJhY2VbYV09PT1yJiZvLnB1c2gobCl9cmV0dXJuIG99LHIuZ2V0TW9kdWxlQ2FsY0RhdGE9ZnVuY3Rpb24odCxlKXt2YXIgcixpPVtdLGE9W107aWYoIShyPVwic3RyaW5nXCI9PXR5cGVvZiBlP24uZ2V0TW9kdWxlKGUpLnBsb3Q6XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOmUucGxvdCkpcmV0dXJuW2ksdF07Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb10sbD1zWzBdLnRyYWNlOyEwPT09bC52aXNpYmxlJiYobC5fbW9kdWxlLnBsb3Q9PT1yP2kucHVzaChzKTphLnB1c2gocykpfXJldHVybltpLGFdfSxyLmdldFN1YnBsb3REYXRhPWZ1bmN0aW9uKHQsZSxyKXtpZighbi5zdWJwbG90c1JlZ2lzdHJ5W2VdKXJldHVybltdO3ZhciBhLG8scyxsPW4uc3VicGxvdHNSZWdpc3RyeVtlXS5hdHRyLGM9W107aWYoXCJnbDJkXCI9PT1lKXt2YXIgdT1yLm1hdGNoKGkpO289XCJ4XCIrdVsxXSxzPVwieVwiK3VbMl19Zm9yKHZhciBoPTA7aDx0Lmxlbmd0aDtoKyspYT10W2hdLFwiZ2wyZFwiPT09ZSYmbi50cmFjZUlzKGEsXCJnbDJkXCIpP2FbbFswXV09PT1vJiZhW2xbMV1dPT09cyYmYy5wdXNoKGEpOmFbbF09PT1yJiZjLnB1c2goYSk7cmV0dXJuIGN9fSx7XCIuLi9yZWdpc3RyeVwiOjgyOSxcIi4vY2FydGVzaWFuL2NvbnN0YW50c1wiOjc1NX1dLDc4NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJtb3VzZS1jaGFuZ2VcIiksaT10KFwibW91c2Utd2hlZWxcIiksYT10KFwibW91c2UtZXZlbnQtb2Zmc2V0XCIpLG89dChcIi4uL2NhcnRlc2lhbi9jb25zdGFudHNcIikscz10KFwiaGFzLXBhc3NpdmUtZXZlbnRzXCIpO2Z1bmN0aW9uIGwodCxlKXt0aGlzLmVsZW1lbnQ9dCx0aGlzLnBsb3Q9ZSx0aGlzLm1vdXNlTGlzdGVuZXI9bnVsbCx0aGlzLndoZWVsTGlzdGVuZXI9bnVsbCx0aGlzLmxhc3RJbnB1dFRpbWU9RGF0ZS5ub3coKSx0aGlzLmxhc3RQb3M9WzAsMF0sdGhpcy5ib3hFbmFibGVkPSExLHRoaXMuYm94SW5pdGVkPSExLHRoaXMuYm94U3RhcnQ9WzAsMF0sdGhpcy5ib3hFbmQ9WzAsMF0sdGhpcy5kcmFnU3RhcnQ9WzAsMF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubW91c2VDb250YWluZXIscj10LmdscGxvdCxjPW5ldyBsKGUscik7ZnVuY3Rpb24gdSgpe3QueGF4aXMuYXV0b3JhbmdlPSExLHQueWF4aXMuYXV0b3JhbmdlPSExfWZ1bmN0aW9uIGgoZSxuLGkpe3ZhciBhLHMsbD10LmNhbGNEYXRhQm94KCksaD1yLnZpZXdCb3gsZj1jLmxhc3RQb3NbMF0scD1jLmxhc3RQb3NbMV0sZD1vLk1JTkRSQUcqci5waXhlbFJhdGlvLGc9by5NSU5aT09NKnIucGl4ZWxSYXRpbztmdW5jdGlvbiB2KGUscixuKXt2YXIgaT1NYXRoLm1pbihyLG4pLGE9TWF0aC5tYXgocixuKTtpIT09YT8obFtlXT1pLGxbZSsyXT1hLGMuZGF0YUJveD1sLHQuc2V0UmFuZ2VzKGwpKToodC5zZWxlY3RCb3guc2VsZWN0Qm94PVswLDAsMSwxXSx0LmdscGxvdC5zZXREaXJ0eSgpKX1zd2l0Y2gobio9ci5waXhlbFJhdGlvLGkqPXIucGl4ZWxSYXRpbyxpPWhbM10taFsxXS1pLHQuZnVsbExheW91dC5kcmFnbW9kZSl7Y2FzZVwiem9vbVwiOmlmKGUpe3ZhciBtPW4vKGhbMl0taFswXSkqKGxbMl0tbFswXSkrbFswXSx5PWkvKGhbM10taFsxXSkqKGxbM10tbFsxXSkrbFsxXTtjLmJveEluaXRlZHx8KGMuYm94U3RhcnRbMF09bSxjLmJveFN0YXJ0WzFdPXksYy5kcmFnU3RhcnRbMF09bixjLmRyYWdTdGFydFsxXT1pKSxjLmJveEVuZFswXT1tLGMuYm94RW5kWzFdPXksYy5ib3hJbml0ZWQ9ITAsYy5ib3hFbmFibGVkfHxjLmJveFN0YXJ0WzBdPT09Yy5ib3hFbmRbMF0mJmMuYm94U3RhcnRbMV09PT1jLmJveEVuZFsxXXx8KGMuYm94RW5hYmxlZD0hMCk7dmFyIHg9TWF0aC5hYnMoYy5kcmFnU3RhcnRbMF0tbik8ZyxiPU1hdGguYWJzKGMuZHJhZ1N0YXJ0WzFdLWkpPGc7aWYoIWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXQuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQuX2F4aXNDb25zdHJhaW50R3JvdXBzLHI9dC54YXhpcy5faWQsbj10LnlheGlzLl9pZCxpPTA7aTxlLmxlbmd0aDtpKyspaWYoLTEhPT1lW2ldW3JdKXtpZigtMSE9PWVbaV1bbl0pcmV0dXJuITA7YnJlYWt9cmV0dXJuITF9KCl8fHgmJmIpeCYmKGMuYm94RW5kWzBdPWMuYm94U3RhcnRbMF0pLGImJihjLmJveEVuZFsxXT1jLmJveFN0YXJ0WzFdKTtlbHNle2E9Yy5ib3hFbmRbMF0tYy5ib3hTdGFydFswXSxzPWMuYm94RW5kWzFdLWMuYm94U3RhcnRbMV07dmFyIF89KGxbM10tbFsxXSkvKGxbMl0tbFswXSk7TWF0aC5hYnMoYSpfKT5NYXRoLmFicyhzKT8oYy5ib3hFbmRbMV09Yy5ib3hTdGFydFsxXStNYXRoLmFicyhhKSpfKihzPj0wPzE6LTEpLGMuYm94RW5kWzFdPGxbMV0/KGMuYm94RW5kWzFdPWxbMV0sYy5ib3hFbmRbMF09Yy5ib3hTdGFydFswXSsobFsxXS1jLmJveFN0YXJ0WzFdKS9NYXRoLmFicyhfKSk6Yy5ib3hFbmRbMV0+bFszXSYmKGMuYm94RW5kWzFdPWxbM10sYy5ib3hFbmRbMF09Yy5ib3hTdGFydFswXSsobFszXS1jLmJveFN0YXJ0WzFdKS9NYXRoLmFicyhfKSkpOihjLmJveEVuZFswXT1jLmJveFN0YXJ0WzBdK01hdGguYWJzKHMpL18qKGE+PTA/MTotMSksYy5ib3hFbmRbMF08bFswXT8oYy5ib3hFbmRbMF09bFswXSxjLmJveEVuZFsxXT1jLmJveFN0YXJ0WzFdKyhsWzBdLWMuYm94U3RhcnRbMF0pKk1hdGguYWJzKF8pKTpjLmJveEVuZFswXT5sWzJdJiYoYy5ib3hFbmRbMF09bFsyXSxjLmJveEVuZFsxXT1jLmJveFN0YXJ0WzFdKyhsWzJdLWMuYm94U3RhcnRbMF0pKk1hdGguYWJzKF8pKSl9fWVsc2UgYy5ib3hFbmFibGVkPyhhPWMuYm94U3RhcnRbMF0hPT1jLmJveEVuZFswXSxzPWMuYm94U3RhcnRbMV0hPT1jLmJveEVuZFsxXSxhfHxzPyhhJiYodigwLGMuYm94U3RhcnRbMF0sYy5ib3hFbmRbMF0pLHQueGF4aXMuYXV0b3JhbmdlPSExKSxzJiYodigxLGMuYm94U3RhcnRbMV0sYy5ib3hFbmRbMV0pLHQueWF4aXMuYXV0b3JhbmdlPSExKSx0LnJlbGF5b3V0Q2FsbGJhY2soKSk6dC5nbHBsb3Quc2V0RGlydHkoKSxjLmJveEVuYWJsZWQ9ITEsYy5ib3hJbml0ZWQ9ITEpOmMuYm94SW5pdGVkJiYoYy5ib3hJbml0ZWQ9ITEpO2JyZWFrO2Nhc2VcInBhblwiOmMuYm94RW5hYmxlZD0hMSxjLmJveEluaXRlZD0hMSxlPyhjLnBhbm5pbmd8fChjLmRyYWdTdGFydFswXT1uLGMuZHJhZ1N0YXJ0WzFdPWkpLE1hdGguYWJzKGMuZHJhZ1N0YXJ0WzBdLW4pPGQmJihuPWMuZHJhZ1N0YXJ0WzBdKSxNYXRoLmFicyhjLmRyYWdTdGFydFsxXS1pKTxkJiYoaT1jLmRyYWdTdGFydFsxXSksYT0oZi1uKSoobFsyXS1sWzBdKS8oci52aWV3Qm94WzJdLXIudmlld0JveFswXSkscz0ocC1pKSoobFszXS1sWzFdKS8oci52aWV3Qm94WzNdLXIudmlld0JveFsxXSksbFswXSs9YSxsWzJdKz1hLGxbMV0rPXMsbFszXSs9cyx0LnNldFJhbmdlcyhsKSxjLnBhbm5pbmc9ITAsYy5sYXN0SW5wdXRUaW1lPURhdGUubm93KCksdSgpLHQuY2FtZXJhQ2hhbmdlZCgpLHQuaGFuZGxlQW5ub3RhdGlvbnMoKSk6Yy5wYW5uaW5nJiYoYy5wYW5uaW5nPSExLHQucmVsYXlvdXRDYWxsYmFjaygpKX1jLmxhc3RQb3NbMF09bixjLmxhc3RQb3NbMV09aX1yZXR1cm4gYy5tb3VzZUxpc3RlbmVyPW4oZSxoKSxlLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsZnVuY3Rpb24odCl7dmFyIHI9YSh0LmNoYW5nZWRUb3VjaGVzWzBdLGUpO2goMCxyWzBdLHJbMV0pLGgoMSxyWzBdLHJbMV0pLHQucHJldmVudERlZmF1bHQoKX0sISFzJiZ7cGFzc2l2ZTohMX0pLGUuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKTt2YXIgcj1hKHQuY2hhbmdlZFRvdWNoZXNbMF0sZSk7aCgxLHJbMF0sclsxXSksdC5wcmV2ZW50RGVmYXVsdCgpfSwhIXMmJntwYXNzaXZlOiExfSksZS5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIixmdW5jdGlvbih0KXtoKDAsYy5sYXN0UG9zWzBdLGMubGFzdFBvc1sxXSksdC5wcmV2ZW50RGVmYXVsdCgpfSwhIXMmJntwYXNzaXZlOiExfSksYy53aGVlbExpc3RlbmVyPWkoZSxmdW5jdGlvbihlLG4pe2lmKCF0LnNjcm9sbFpvb20pcmV0dXJuITE7dmFyIGk9dC5jYWxjRGF0YUJveCgpLGE9ci52aWV3Qm94LG89Yy5sYXN0UG9zWzBdLHM9Yy5sYXN0UG9zWzFdLGw9TWF0aC5leHAoNSpuLyhhWzNdLWFbMV0pKSxoPW8vKGFbMl0tYVswXSkqKGlbMl0taVswXSkraVswXSxmPXMvKGFbM10tYVsxXSkqKGlbM10taVsxXSkraVsxXTtyZXR1cm4gaVswXT0oaVswXS1oKSpsK2gsaVsyXT0oaVsyXS1oKSpsK2gsaVsxXT0oaVsxXS1mKSpsK2YsaVszXT0oaVszXS1mKSpsK2YsdC5zZXRSYW5nZXMoaSksYy5sYXN0SW5wdXRUaW1lPURhdGUubm93KCksdSgpLHQuY2FtZXJhQ2hhbmdlZCgpLHQuaGFuZGxlQW5ub3RhdGlvbnMoKSx0LnJlbGF5b3V0Q2FsbGJhY2soKSwhMH0sITApLGN9fSx7XCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzXCI6NzU1LFwiaGFzLXBhc3NpdmUtZXZlbnRzXCI6NDA0LFwibW91c2UtY2hhbmdlXCI6NDI4LFwibW91c2UtZXZlbnQtb2Zmc2V0XCI6NDI5LFwibW91c2Utd2hlZWxcIjo0MzF9XSw3ODY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vY2FydGVzaWFuL2F4ZXNcIiksaT10KFwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiKTtmdW5jdGlvbiBhKHQpe3RoaXMuc2NlbmU9dCx0aGlzLmdsPXQuZ2wsdGhpcy5waXhlbFJhdGlvPXQucGl4ZWxSYXRpbyx0aGlzLnNjcmVlbkJveD1bMCwwLDEsMV0sdGhpcy52aWV3Qm94PVswLDAsMSwxXSx0aGlzLmRhdGFCb3g9Wy0xLC0xLDEsMV0sdGhpcy5ib3JkZXJMaW5lRW5hYmxlPVshMSwhMSwhMSwhMV0sdGhpcy5ib3JkZXJMaW5lV2lkdGg9WzEsMSwxLDFdLHRoaXMuYm9yZGVyTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja3M9W1tdLFtdXSx0aGlzLnRpY2tFbmFibGU9WyEwLCEwLCExLCExXSx0aGlzLnRpY2tQYWQ9WzE1LDE1LDE1LDE1XSx0aGlzLnRpY2tBbmdsZT1bMCwwLDAsMF0sdGhpcy50aWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aWNrTWFya0xlbmd0aD1bMCwwLDAsMF0sdGhpcy50aWNrTWFya1dpZHRoPVswLDAsMCwwXSx0aGlzLnRpY2tNYXJrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5sYWJlbHM9W1wieFwiLFwieVwiXSx0aGlzLmxhYmVsRW5hYmxlPVshMCwhMCwhMSwhMV0sdGhpcy5sYWJlbEFuZ2xlPVswLE1hdGguUEkvMiwwLDMqTWF0aC5QSS8yXSx0aGlzLmxhYmVsUGFkPVsxNSwxNSwxNSwxNV0sdGhpcy5sYWJlbFNpemU9WzEyLDEyXSx0aGlzLmxhYmVsRm9udD1bXCJzYW5zLXNlcmlmXCIsXCJzYW5zLXNlcmlmXCJdLHRoaXMubGFiZWxDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpdGxlPVwiXCIsdGhpcy50aXRsZUVuYWJsZT0hMCx0aGlzLnRpdGxlQ2VudGVyPVswLDAsMCwwXSx0aGlzLnRpdGxlQW5nbGU9MCx0aGlzLnRpdGxlQ29sb3I9WzAsMCwwLDFdLHRoaXMudGl0bGVGb250PVwic2Fucy1zZXJpZlwiLHRoaXMudGl0bGVTaXplPTE4LHRoaXMuZ3JpZExpbmVFbmFibGU9WyEwLCEwXSx0aGlzLmdyaWRMaW5lQ29sb3I9W1swLDAsMCwuNV0sWzAsMCwwLC41XV0sdGhpcy5ncmlkTGluZVdpZHRoPVsxLDFdLHRoaXMuemVyb0xpbmVFbmFibGU9WyEwLCEwXSx0aGlzLnplcm9MaW5lV2lkdGg9WzEsMV0sdGhpcy56ZXJvTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmJvcmRlckNvbG9yPVswLDAsMCwwXSx0aGlzLmJhY2tncm91bmRDb2xvcj1bMCwwLDAsMF0sdGhpcy5zdGF0aWM9dGhpcy5zY2VuZS5zdGF0aWNQbG90fXZhciBvPWEucHJvdG90eXBlLHM9W1wieGF4aXNcIixcInlheGlzXCJdO28ubWVyZ2U9ZnVuY3Rpb24odCl7dmFyIGUscixuLGEsbyxsLGMsdSxoLGYscDtmb3IodGhpcy50aXRsZUVuYWJsZT0hMSx0aGlzLmJhY2tncm91bmRDb2xvcj1pKHQucGxvdF9iZ2NvbG9yKSxmPTA7ZjwyOysrZil7dmFyIGQ9KGU9c1tmXSkuY2hhckF0KDApO2ZvcihuPShyPXRbdGhpcy5zY2VuZVtlXS5fbmFtZV0pLnRpdGxlLnRleHQ9PT10aGlzLnNjZW5lLmZ1bGxMYXlvdXQuX2RmbHRUaXRsZVtkXT9cIlwiOnIudGl0bGUudGV4dCxwPTA7cDw9MjtwKz0yKXRoaXMubGFiZWxFbmFibGVbZitwXT0hMSx0aGlzLmxhYmVsc1tmK3BdPW4sdGhpcy5sYWJlbENvbG9yW2YrcF09aShyLnRpdGxlLmZvbnQuY29sb3IpLHRoaXMubGFiZWxGb250W2YrcF09ci50aXRsZS5mb250LmZhbWlseSx0aGlzLmxhYmVsU2l6ZVtmK3BdPXIudGl0bGUuZm9udC5zaXplLHRoaXMubGFiZWxQYWRbZitwXT10aGlzLmdldExhYmVsUGFkKGUsciksdGhpcy50aWNrRW5hYmxlW2YrcF09ITEsdGhpcy50aWNrQ29sb3JbZitwXT1pKChyLnRpY2tmb250fHx7fSkuY29sb3IpLHRoaXMudGlja0FuZ2xlW2YrcF09XCJhdXRvXCI9PT1yLnRpY2thbmdsZT8wOk1hdGguUEkqLXIudGlja2FuZ2xlLzE4MCx0aGlzLnRpY2tQYWRbZitwXT10aGlzLmdldFRpY2tQYWQociksdGhpcy50aWNrTWFya0xlbmd0aFtmK3BdPTAsdGhpcy50aWNrTWFya1dpZHRoW2YrcF09ci50aWNrd2lkdGh8fDAsdGhpcy50aWNrTWFya0NvbG9yW2YrcF09aShyLnRpY2tjb2xvciksdGhpcy5ib3JkZXJMaW5lRW5hYmxlW2YrcF09ITEsdGhpcy5ib3JkZXJMaW5lQ29sb3JbZitwXT1pKHIubGluZWNvbG9yKSx0aGlzLmJvcmRlckxpbmVXaWR0aFtmK3BdPXIubGluZXdpZHRofHwwO2M9dGhpcy5oYXNTaGFyZWRBeGlzKHIpLG89dGhpcy5oYXNBeGlzSW5EZmx0UG9zKGUscikmJiFjLGw9dGhpcy5oYXNBeGlzSW5BbHRyUG9zKGUscikmJiFjLGE9ci5taXJyb3J8fCExLHU9Yz8tMSE9PVN0cmluZyhhKS5pbmRleE9mKFwiYWxsXCIpOiEhYSxoPWM/XCJhbGx0aWNrc1wiPT09YTotMSE9PVN0cmluZyhhKS5pbmRleE9mKFwidGlja3NcIiksbz90aGlzLmxhYmVsRW5hYmxlW2ZdPSEwOmwmJih0aGlzLmxhYmVsRW5hYmxlW2YrMl09ITApLG8/dGhpcy50aWNrRW5hYmxlW2ZdPXIuc2hvd3RpY2tsYWJlbHM6bCYmKHRoaXMudGlja0VuYWJsZVtmKzJdPXIuc2hvd3RpY2tsYWJlbHMpLChvfHx1KSYmKHRoaXMuYm9yZGVyTGluZUVuYWJsZVtmXT1yLnNob3dsaW5lKSwobHx8dSkmJih0aGlzLmJvcmRlckxpbmVFbmFibGVbZisyXT1yLnNob3dsaW5lKSwob3x8aCkmJih0aGlzLnRpY2tNYXJrTGVuZ3RoW2ZdPXRoaXMuZ2V0VGlja01hcmtMZW5ndGgocikpLChsfHxoKSYmKHRoaXMudGlja01hcmtMZW5ndGhbZisyXT10aGlzLmdldFRpY2tNYXJrTGVuZ3RoKHIpKSx0aGlzLmdyaWRMaW5lRW5hYmxlW2ZdPXIuc2hvd2dyaWQsdGhpcy5ncmlkTGluZUNvbG9yW2ZdPWkoci5ncmlkY29sb3IpLHRoaXMuZ3JpZExpbmVXaWR0aFtmXT1yLmdyaWR3aWR0aCx0aGlzLnplcm9MaW5lRW5hYmxlW2ZdPXIuemVyb2xpbmUsdGhpcy56ZXJvTGluZUNvbG9yW2ZdPWkoci56ZXJvbGluZWNvbG9yKSx0aGlzLnplcm9MaW5lV2lkdGhbZl09ci56ZXJvbGluZXdpZHRofX0sby5oYXNTaGFyZWRBeGlzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUscj1lLmZ1bGxMYXlvdXQuX3N1YnBsb3RzLmdsMmQ7cmV0dXJuIDAhPT1uLmZpbmRTdWJwbG90c1dpdGhBeGlzKHIsdCkuaW5kZXhPZihlLmlkKX0sby5oYXNBeGlzSW5EZmx0UG9zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5zaWRlO3JldHVyblwieGF4aXNcIj09PXQ/XCJib3R0b21cIj09PXI6XCJ5YXhpc1wiPT09dD9cImxlZnRcIj09PXI6dm9pZCAwfSxvLmhhc0F4aXNJbkFsdHJQb3M9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnNpZGU7cmV0dXJuXCJ4YXhpc1wiPT09dD9cInRvcFwiPT09cjpcInlheGlzXCI9PT10P1wicmlnaHRcIj09PXI6dm9pZCAwfSxvLmdldExhYmVsUGFkPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS50aXRsZS5mb250LnNpemUsbj1lLnNob3d0aWNrbGFiZWxzO3JldHVyblwieGF4aXNcIj09PXQ/XCJ0b3BcIj09PWUuc2lkZT9yKigxLjUrKG4/MTowKSktMTA6ciooMS41KyhuPy41OjApKS0xMDpcInlheGlzXCI9PT10P1wicmlnaHRcIj09PWUuc2lkZT8xMCtyKigxLjUrKG4/MTouNSkpOjEwK3IqKDEuNSsobj8uNTowKSk6dm9pZCAwfSxvLmdldFRpY2tQYWQ9ZnVuY3Rpb24odCl7cmV0dXJuXCJvdXRzaWRlXCI9PT10LnRpY2tzPzEwK3QudGlja2xlbjoxNX0sby5nZXRUaWNrTWFya0xlbmd0aD1mdW5jdGlvbih0KXtpZighdC50aWNrcylyZXR1cm4gMDt2YXIgZT10LnRpY2tsZW47cmV0dXJuXCJpbnNpZGVcIj09PXQudGlja3M/LWU6ZX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYSh0KX19LHtcIi4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIjo3MjQsXCIuLi9jYXJ0ZXNpYW4vYXhlc1wiOjc0OX1dLDc4NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsLGk9dChcIi4vc2NlbmUyZFwiKSxhPXQoXCIuLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiKSxzPXQoXCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzXCIpLGw9dChcIi4uL2NhcnRlc2lhblwiKSxjPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzXCIpLHU9dChcIi4uL2dldF9kYXRhXCIpLmdldFN1YnBsb3REYXRhO3IubmFtZT1cImdsMmRcIixyLmF0dHI9W1wieGF4aXNcIixcInlheGlzXCJdLHIuaWRSb290PVtcInhcIixcInlcIl0sci5pZFJlZ2V4PXMuaWRSZWdleCxyLmF0dHJSZWdleD1zLmF0dHJSZWdleCxyLmF0dHJpYnV0ZXM9dChcIi4uL2NhcnRlc2lhbi9hdHRyaWJ1dGVzXCIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIpe2UuX2hhcyhcImNhcnRlc2lhblwiKXx8bC5zdXBwbHlMYXlvdXREZWZhdWx0cyh0LGUscil9LHIubGF5b3V0QXR0ck92ZXJyaWRlcz1uKGwubGF5b3V0QXR0cmlidXRlcyxcInBsb3RcIixcImZyb20tcm9vdFwiKSxyLmJhc2VMYXlvdXRBdHRyT3ZlcnJpZGVzPW4oe3Bsb3RfYmdjb2xvcjphLnBsb3RfYmdjb2xvcixob3ZlcmxhYmVsOmMuaG92ZXJsYWJlbH0sXCJwbG90XCIsXCJuZXN0ZWRcIiksci5wbG90PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5fZnVsbERhdGEsbj1lLl9zdWJwbG90cy5nbDJkLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXSxzPWUuX3Bsb3RzW29dLGw9dShyLFwiZ2wyZFwiLG8pLGM9cy5fc2NlbmUyZDt2b2lkIDA9PT1jJiYoYz1uZXcgaSh7aWQ6byxncmFwaERpdjp0LGNvbnRhaW5lcjp0LnF1ZXJ5U2VsZWN0b3IoXCIuZ2wtY29udGFpbmVyXCIpLHN0YXRpY1Bsb3Q6dC5fY29udGV4dC5zdGF0aWNQbG90LHBsb3RHbFBpeGVsUmF0aW86dC5fY29udGV4dC5wbG90R2xQaXhlbFJhdGlvfSxlKSxzLl9zY2VuZTJkPWMpLGMucGxvdChsLHQuY2FsY2RhdGEsZSx0LmxheW91dCl9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1uLl9zdWJwbG90cy5nbDJkfHxbXSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV0scz1uLl9wbG90c1tvXTtpZihzLl9zY2VuZTJkKTA9PT11KHQsXCJnbDJkXCIsbykubGVuZ3RoJiYocy5fc2NlbmUyZC5kZXN0cm95KCksZGVsZXRlIG4uX3Bsb3RzW29dKX1sLmNsZWFuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sci5kcmF3RnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3QuX2NvbnRleHQuc3RhdGljUGxvdHx8bC5kcmF3RnJhbWV3b3JrKHQpfSxyLnRvU1ZHPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fc3VicGxvdHMuZ2wyZCxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPWUuX3Bsb3RzW3Jbbl1dLl9zY2VuZTJkLGE9aS50b0ltYWdlKFwicG5nXCIpO2UuX2dsaW1hZ2VzLmFwcGVuZChcInN2ZzppbWFnZVwiKS5hdHRyKHt4bWxuczpvLnN2ZyxcInhsaW5rOmhyZWZcIjphLHg6MCx5OjAsd2lkdGg6XCIxMDAlXCIsaGVpZ2h0OlwiMTAwJVwiLHByZXNlcnZlQXNwZWN0UmF0aW86XCJub25lXCJ9KSxpLmRlc3Ryb3koKX19LHIudXBkYXRlRng9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDJkLG49MDtuPHIubGVuZ3RoO24rKyl7ZS5fcGxvdHNbcltuXV0uX3NjZW5lMmQudXBkYXRlRngoZS5kcmFnbW9kZSl9fX0se1wiLi4vLi4vY29tcG9uZW50cy9meC9sYXlvdXRfYXR0cmlidXRlc1wiOjYxOCxcIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzXCI6Njc5LFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uL2NhcnRlc2lhblwiOjc2MCxcIi4uL2NhcnRlc2lhbi9hdHRyaWJ1dGVzXCI6NzQ3LFwiLi4vY2FydGVzaWFuL2NvbnN0YW50c1wiOjc1NSxcIi4uL2dldF9kYXRhXCI6Nzg0LFwiLi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo4MDEsXCIuL3NjZW5lMmRcIjo3ODh9XSw3ODg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbixpLGE9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLG89dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLHM9dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIiksbD10KFwiZ2wtcGxvdDJkXCIpLGM9dChcImdsLXNwaWtlczJkXCIpLHU9dChcImdsLXNlbGVjdC1ib3hcIiksaD10KFwid2ViZ2wtY29udGV4dFwiKSxmPXQoXCIuL2NvbnZlcnRcIikscD10KFwiLi9jYW1lcmFcIiksZD10KFwiLi4vLi4vbGliL3Nob3dfbm9fd2ViZ2xfbXNnXCIpLGc9dChcIi4uL2NhcnRlc2lhbi9jb25zdHJhaW50c1wiKSx2PWcuZW5mb3JjZSxtPWcuY2xlYW4seT10KFwiLi4vY2FydGVzaWFuL2F1dG9yYW5nZVwiKS5kb0F1dG9SYW5nZSx4PVtcInhheGlzXCIsXCJ5YXhpc1wiXSxiPXQoXCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzXCIpLlNVQlBMT1RfUEFUVEVSTjtmdW5jdGlvbiBfKHQsZSl7dGhpcy5jb250YWluZXI9dC5jb250YWluZXIsdGhpcy5ncmFwaERpdj10LmdyYXBoRGl2LHRoaXMucGl4ZWxSYXRpbz10LnBsb3RHbFBpeGVsUmF0aW98fHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLHRoaXMuaWQ9dC5pZCx0aGlzLnN0YXRpY1Bsb3Q9ISF0LnN0YXRpY1Bsb3QsdGhpcy5zY3JvbGxab29tPXRoaXMuZ3JhcGhEaXYuX2NvbnRleHQuX3Njcm9sbFpvb20uY2FydGVzaWFuLHRoaXMuZnVsbERhdGE9bnVsbCx0aGlzLnVwZGF0ZVJlZnMoZSksdGhpcy5tYWtlRnJhbWV3b3JrKCksdGhpcy5zdG9wcGVkfHwodGhpcy5nbHBsb3RPcHRpb25zPWYodGhpcyksdGhpcy5nbHBsb3RPcHRpb25zLm1lcmdlKGUpLHRoaXMuZ2xwbG90PWwodGhpcy5nbHBsb3RPcHRpb25zKSx0aGlzLmNhbWVyYT1wKHRoaXMpLHRoaXMudHJhY2VzPXt9LHRoaXMuc3Bpa2VzPWModGhpcy5nbHBsb3QpLHRoaXMuc2VsZWN0Qm94PXUodGhpcy5nbHBsb3Qse2lubmVyRmlsbDohMSxvdXRlckZpbGw6ITB9KSx0aGlzLmxhc3RCdXR0b25TdGF0ZT0wLHRoaXMucGlja1Jlc3VsdD1udWxsLHRoaXMuaXNNb3VzZU92ZXI9ITAsdGhpcy5zdG9wcGVkPSExLHRoaXMucmVkcmF3PXRoaXMuZHJhdy5iaW5kKHRoaXMpLHRoaXMucmVkcmF3KCkpfWUuZXhwb3J0cz1fO3ZhciB3PV8ucHJvdG90eXBlO3cubWFrZUZyYW1ld29yaz1mdW5jdGlvbigpe2lmKHRoaXMuc3RhdGljUGxvdCl7aWYoIShpfHwobj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLGk9aCh7Y2FudmFzOm4scHJlc2VydmVEcmF3aW5nQnVmZmVyOiExLHByZW11bHRpcGxpZWRBbHBoYTohMCxhbnRpYWxpYXM6ITB9KSkpKXRocm93IG5ldyBFcnJvcihcIkVycm9yIGNyZWF0aW5nIHN0YXRpYyBjYW52YXMvY29udGV4dCBmb3IgaW1hZ2Ugc2VydmVyXCIpO3RoaXMuY2FudmFzPW4sdGhpcy5nbD1pfWVsc2V7dmFyIHQ9dGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5nbC1jYW52YXMtZm9jdXNcIiksZT1oKHtjYW52YXM6dCxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITAscHJlbXVsdGlwbGllZEFscGhhOiEwfSk7aWYoIWUpcmV0dXJuIGQodGhpcyksdm9pZCh0aGlzLnN0b3BwZWQ9ITApO3RoaXMuY2FudmFzPXQsdGhpcy5nbD1lfXZhciByPXRoaXMuY2FudmFzO3Iuc3R5bGUud2lkdGg9XCIxMDAlXCIsci5zdHlsZS5oZWlnaHQ9XCIxMDAlXCIsci5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsci5zdHlsZS50b3A9XCIwcHhcIixyLnN0eWxlLmxlZnQ9XCIwcHhcIixyLnN0eWxlW1wicG9pbnRlci1ldmVudHNcIl09XCJub25lXCIsdGhpcy51cGRhdGVTaXplKHIpLHIuY2xhc3NOYW1lKz1cIiB1c2VyLXNlbGVjdC1ub25lXCI7dmFyIGE9dGhpcy5zdmdDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcInN2Z1wiKTthLnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixhLnN0eWxlLnRvcD1hLnN0eWxlLmxlZnQ9XCIwcHhcIixhLnN0eWxlLndpZHRoPWEuc3R5bGUuaGVpZ2h0PVwiMTAwJVwiLGEuc3R5bGVbXCJ6LWluZGV4XCJdPTIwLGEuc3R5bGVbXCJwb2ludGVyLWV2ZW50c1wiXT1cIm5vbmVcIjt2YXIgbz10aGlzLm1vdXNlQ29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7by5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsby5zdHlsZVtcInBvaW50ZXItZXZlbnRzXCJdPVwiYXV0b1wiLHRoaXMucGlja0NhbnZhcz10aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLmdsLWNhbnZhcy1waWNrXCIpO3ZhciBzPXRoaXMuY29udGFpbmVyO3MuYXBwZW5kQ2hpbGQoYSkscy5hcHBlbmRDaGlsZChvKTt2YXIgbD10aGlzO28uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3V0XCIsZnVuY3Rpb24oKXtsLmlzTW91c2VPdmVyPSExLGwudW5ob3ZlcigpfSksby5hZGRFdmVudExpc3RlbmVyKFwibW91c2VvdmVyXCIsZnVuY3Rpb24oKXtsLmlzTW91c2VPdmVyPSEwfSl9LHcudG9JbWFnZT1mdW5jdGlvbih0KXt0fHwodD1cInBuZ1wiKSx0aGlzLnN0b3BwZWQ9ITAsdGhpcy5zdGF0aWNQbG90JiZ0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChuKSx0aGlzLnVwZGF0ZVNpemUodGhpcy5jYW52YXMpO3ZhciBlPXRoaXMuZ2xwbG90LmdsLHI9ZS5kcmF3aW5nQnVmZmVyV2lkdGgsaT1lLmRyYXdpbmdCdWZmZXJIZWlnaHQ7ZS5jbGVhckNvbG9yKDEsMSwxLDApLGUuY2xlYXIoZS5DT0xPUl9CVUZGRVJfQklUfGUuREVQVEhfQlVGRkVSX0JJVCksdGhpcy5nbHBsb3Quc2V0RGlydHkoKSx0aGlzLmdscGxvdC5kcmF3KCksZS5iaW5kRnJhbWVidWZmZXIoZS5GUkFNRUJVRkZFUixudWxsKTt2YXIgYT1uZXcgVWludDhBcnJheShyKmkqNCk7ZS5yZWFkUGl4ZWxzKDAsMCxyLGksZS5SR0JBLGUuVU5TSUdORURfQllURSxhKTtmb3IodmFyIG89MCxzPWktMTtvPHM7KytvLC0tcylmb3IodmFyIGw9MDtsPHI7KytsKWZvcih2YXIgYz0wO2M8NDsrK2Mpe3ZhciB1PWFbNCoocipvK2wpK2NdO2FbNCoocipvK2wpK2NdPWFbNCoocipzK2wpK2NdLGFbNCoocipzK2wpK2NdPXV9dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtoLndpZHRoPXIsaC5oZWlnaHQ9aTt2YXIgZixwPWguZ2V0Q29udGV4dChcIjJkXCIpLGQ9cC5jcmVhdGVJbWFnZURhdGEocixpKTtzd2l0Y2goZC5kYXRhLnNldChhKSxwLnB1dEltYWdlRGF0YShkLDAsMCksdCl7Y2FzZVwianBlZ1wiOmY9aC50b0RhdGFVUkwoXCJpbWFnZS9qcGVnXCIpO2JyZWFrO2Nhc2VcIndlYnBcIjpmPWgudG9EYXRhVVJMKFwiaW1hZ2Uvd2VicFwiKTticmVhaztkZWZhdWx0OmY9aC50b0RhdGFVUkwoXCJpbWFnZS9wbmdcIil9cmV0dXJuIHRoaXMuc3RhdGljUGxvdCYmdGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQobiksZn0sdy51cGRhdGVTaXplPWZ1bmN0aW9uKHQpe3R8fCh0PXRoaXMuY2FudmFzKTt2YXIgZT10aGlzLnBpeGVsUmF0aW8scj10aGlzLmZ1bGxMYXlvdXQsbj1yLndpZHRoLGk9ci5oZWlnaHQsYT0wfE1hdGguY2VpbChlKm4pLG89MHxNYXRoLmNlaWwoZSppKTtyZXR1cm4gdC53aWR0aD09PWEmJnQuaGVpZ2h0PT09b3x8KHQud2lkdGg9YSx0LmhlaWdodD1vKSx0fSx3LmNvbXB1dGVUaWNrTWFya3M9ZnVuY3Rpb24oKXt0aGlzLnhheGlzLnNldFNjYWxlKCksdGhpcy55YXhpcy5zZXRTY2FsZSgpO2Zvcih2YXIgdD1bby5jYWxjVGlja3ModGhpcy54YXhpcyksby5jYWxjVGlja3ModGhpcy55YXhpcyldLGU9MDtlPDI7KytlKWZvcih2YXIgcj0wO3I8dFtlXS5sZW5ndGg7KytyKXRbZV1bcl0udGV4dD10W2VdW3JdLnRleHQrXCJcIjtyZXR1cm4gdH0sdy51cGRhdGVSZWZzPWZ1bmN0aW9uKHQpe3RoaXMuZnVsbExheW91dD10O3ZhciBlPXRoaXMuaWQubWF0Y2goYikscj1cInhheGlzXCIrZVsxXSxuPVwieWF4aXNcIitlWzJdO3RoaXMueGF4aXM9dGhpcy5mdWxsTGF5b3V0W3JdLHRoaXMueWF4aXM9dGhpcy5mdWxsTGF5b3V0W25dfSx3LnJlbGF5b3V0Q2FsbGJhY2s9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdyYXBoRGl2LGU9dGhpcy54YXhpcyxyPXRoaXMueWF4aXMsbj10LmxheW91dCxpPXt9LG89aVtlLl9uYW1lK1wiLnJhbmdlXCJdPWUucmFuZ2Uuc2xpY2UoKSxzPWlbci5fbmFtZStcIi5yYW5nZVwiXT1yLnJhbmdlLnNsaWNlKCk7aVtlLl9uYW1lK1wiLmF1dG9yYW5nZVwiXT1lLmF1dG9yYW5nZSxpW3IuX25hbWUrXCIuYXV0b3JhbmdlXCJdPXIuYXV0b3JhbmdlLGEuY2FsbChcIl9zdG9yZURpcmVjdEdVSUVkaXRcIix0LmxheW91dCx0Ll9mdWxsTGF5b3V0Ll9wcmVHVUksaSk7dmFyIGw9bltlLl9uYW1lXTtsLnJhbmdlPW8sbC5hdXRvcmFuZ2U9ZS5hdXRvcmFuZ2U7dmFyIGM9bltyLl9uYW1lXTtjLnJhbmdlPXMsYy5hdXRvcmFuZ2U9ci5hdXRvcmFuZ2UsaS5sYXN0SW5wdXRUaW1lPXRoaXMuY2FtZXJhLmxhc3RJbnB1dFRpbWUsdC5lbWl0KFwicGxvdGx5X3JlbGF5b3V0XCIsaSl9LHcuY2FtZXJhQ2hhbmdlZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY2FtZXJhO3RoaXMuZ2xwbG90LnNldERhdGFCb3godGhpcy5jYWxjRGF0YUJveCgpKTt2YXIgZT10aGlzLmNvbXB1dGVUaWNrTWFya3MoKTsoZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPDI7KytyKXt2YXIgbj10W3JdLGk9ZVtyXTtpZihuLmxlbmd0aCE9PWkubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgYT0wO2E8bi5sZW5ndGg7KythKWlmKG5bYV0ueCE9PWlbYV0ueClyZXR1cm4hMH1yZXR1cm4hMX0pKGUsdGhpcy5nbHBsb3RPcHRpb25zLnRpY2tzKSYmKHRoaXMuZ2xwbG90T3B0aW9ucy50aWNrcz1lLHRoaXMuZ2xwbG90T3B0aW9ucy5kYXRhQm94PXQuZGF0YUJveCx0aGlzLmdscGxvdC51cGRhdGUodGhpcy5nbHBsb3RPcHRpb25zKSx0aGlzLmhhbmRsZUFubm90YXRpb25zKCkpfSx3LmhhbmRsZUFubm90YXRpb25zPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuZ3JhcGhEaXYsZT10aGlzLmZ1bGxMYXlvdXQuYW5ub3RhdGlvbnMscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24ueHJlZj09PXRoaXMueGF4aXMuX2lkJiZuLnlyZWY9PT10aGlzLnlheGlzLl9pZCYmYS5nZXRDb21wb25lbnRNZXRob2QoXCJhbm5vdGF0aW9uc1wiLFwiZHJhd09uZVwiKSh0LHIpfX0sdy5kZXN0cm95PWZ1bmN0aW9uKCl7aWYodGhpcy5nbHBsb3Qpe3ZhciB0PXRoaXMudHJhY2VzO3QmJk9iamVjdC5rZXlzKHQpLm1hcChmdW5jdGlvbihlKXt0W2VdLmRpc3Bvc2UoKSxkZWxldGUgdFtlXX0pLHRoaXMuZ2xwbG90LmRpc3Bvc2UoKSx0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLnN2Z0NvbnRhaW5lciksdGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5tb3VzZUNvbnRhaW5lciksdGhpcy5mdWxsRGF0YT1udWxsLHRoaXMuZ2xwbG90PW51bGwsdGhpcy5zdG9wcGVkPSEwLHRoaXMuY2FtZXJhLm1vdXNlTGlzdGVuZXIuZW5hYmxlZD0hMSx0aGlzLm1vdXNlQ29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ3aGVlbFwiLHRoaXMuY2FtZXJhLndoZWVsTGlzdGVuZXIpLHRoaXMuY2FtZXJhPW51bGx9fSx3LnBsb3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuZ2xwbG90O3RoaXMudXBkYXRlUmVmcyhyKSx0aGlzLnhheGlzLmNsZWFyQ2FsYygpLHRoaXMueWF4aXMuY2xlYXJDYWxjKCksdGhpcy51cGRhdGVUcmFjZXModCxlKSx0aGlzLnVwZGF0ZUZ4KHIuZHJhZ21vZGUpO3ZhciBpPXIud2lkdGgsYT1yLmhlaWdodDt0aGlzLnVwZGF0ZVNpemUodGhpcy5jYW52YXMpO3ZhciBvPXRoaXMuZ2xwbG90T3B0aW9ucztvLm1lcmdlKHIpLG8uc2NyZWVuQm94PVswLDAsaSxhXTt2YXIgcz17X2Z1bGxMYXlvdXQ6e19heGlzQ29uc3RyYWludEdyb3Vwczp0aGlzLmdyYXBoRGl2Ll9mdWxsTGF5b3V0Ll9heGlzQ29uc3RyYWludEdyb3Vwcyx4YXhpczp0aGlzLnhheGlzLHlheGlzOnRoaXMueWF4aXN9fTttKHMsdGhpcy54YXhpcyksbShzLHRoaXMueWF4aXMpO3ZhciBsLGMsdT1yLl9zaXplLGg9dGhpcy54YXhpcy5kb21haW4sZj10aGlzLnlheGlzLmRvbWFpbjtmb3Ioby52aWV3Qm94PVt1LmwraFswXSp1LncsdS5iK2ZbMF0qdS5oLGktdS5yLSgxLWhbMV0pKnUudyxhLXUudC0oMS1mWzFdKSp1LmhdLHRoaXMubW91c2VDb250YWluZXIuc3R5bGUud2lkdGg9dS53KihoWzFdLWhbMF0pK1wicHhcIix0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLmhlaWdodD11LmgqKGZbMV0tZlswXSkrXCJweFwiLHRoaXMubW91c2VDb250YWluZXIuaGVpZ2h0PXUuaCooZlsxXS1mWzBdKSx0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLmxlZnQ9dS5sK2hbMF0qdS53K1wicHhcIix0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLnRvcD11LnQrKDEtZlsxXSkqdS5oK1wicHhcIixjPTA7YzwyOysrYykobD10aGlzW3hbY11dKS5fbGVuZ3RoPW8udmlld0JveFtjKzJdLW8udmlld0JveFtjXSx5KHRoaXMuZ3JhcGhEaXYsbCksbC5zZXRTY2FsZSgpO3Yocyksby50aWNrcz10aGlzLmNvbXB1dGVUaWNrTWFya3MoKSxvLmRhdGFCb3g9dGhpcy5jYWxjRGF0YUJveCgpLG8ubWVyZ2Uociksbi51cGRhdGUobyksdGhpcy5nbHBsb3QuZHJhdygpfSx3LmNhbGNEYXRhQm94PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy54YXhpcyxlPXRoaXMueWF4aXMscj10LnJhbmdlLG49ZS5yYW5nZSxpPXQucjJsLGE9ZS5yMmw7cmV0dXJuW2koclswXSksYShuWzBdKSxpKHJbMV0pLGEoblsxXSldfSx3LnNldFJhbmdlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnhheGlzLHI9dGhpcy55YXhpcyxuPWUubDJyLGk9ci5sMnI7ZS5yYW5nZT1bbih0WzBdKSxuKHRbMl0pXSxyLnJhbmdlPVtpKHRbMV0pLGkodFszXSldfSx3LnVwZGF0ZVRyYWNlcz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPU9iamVjdC5rZXlzKHRoaXMudHJhY2VzKTt0aGlzLmZ1bGxEYXRhPXQ7dDpmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXt2YXIgbz1hW3JdLHM9dGhpcy50cmFjZXNbb107Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpZigoaT10W25dKS51aWQ9PT1vJiZpLnR5cGU9PT1zLnR5cGUpY29udGludWUgdDtzLmRpc3Bvc2UoKSxkZWxldGUgdGhpcy50cmFjZXNbb119Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7aT10W3JdO3ZhciBsPWVbcl0sYz10aGlzLnRyYWNlc1tpLnVpZF07Yz9jLnVwZGF0ZShpLGwpOihjPWkuX21vZHVsZS5wbG90KHRoaXMsaSxsKSx0aGlzLnRyYWNlc1tpLnVpZF09Yyl9dGhpcy5nbHBsb3Qub2JqZWN0cy5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX3RyYWNlLmluZGV4LWUuX3RyYWNlLmluZGV4fSl9LHcudXBkYXRlRng9ZnVuY3Rpb24odCl7XCJsYXNzb1wiPT09dHx8XCJzZWxlY3RcIj09PXQ/KHRoaXMucGlja0NhbnZhcy5zdHlsZVtcInBvaW50ZXItZXZlbnRzXCJdPVwibm9uZVwiLHRoaXMubW91c2VDb250YWluZXIuc3R5bGVbXCJwb2ludGVyLWV2ZW50c1wiXT1cIm5vbmVcIik6KHRoaXMucGlja0NhbnZhcy5zdHlsZVtcInBvaW50ZXItZXZlbnRzXCJdPVwiYXV0b1wiLHRoaXMubW91c2VDb250YWluZXIuc3R5bGVbXCJwb2ludGVyLWV2ZW50c1wiXT1cImF1dG9cIiksdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS5jdXJzb3I9XCJwYW5cIj09PXQ/XCJtb3ZlXCI6XCJ6b29tXCI9PT10P1wiY3Jvc3NoYWlyXCI6bnVsbH0sdy5lbWl0UG9pbnRBY3Rpb249ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj10LnRyYWNlLnVpZCxpPXQucG9pbnRJbmRleCxhPTA7YTx0aGlzLmZ1bGxEYXRhLmxlbmd0aDthKyspdGhpcy5mdWxsRGF0YVthXS51aWQ9PT1uJiYocj10aGlzLmZ1bGxEYXRhW2FdKTt2YXIgbz17eDp0LnRyYWNlQ29vcmRbMF0seTp0LnRyYWNlQ29vcmRbMV0sY3VydmVOdW1iZXI6ci5pbmRleCxwb2ludE51bWJlcjppLGRhdGE6ci5faW5wdXQsZnVsbERhdGE6dGhpcy5mdWxsRGF0YSx4YXhpczp0aGlzLnhheGlzLHlheGlzOnRoaXMueWF4aXN9O3MuYXBwZW5kQXJyYXlQb2ludFZhbHVlKG8scixpKSx0aGlzLmdyYXBoRGl2LmVtaXQoZSx7cG9pbnRzOltvXX0pfSx3LmRyYXc9ZnVuY3Rpb24oKXtpZighdGhpcy5zdG9wcGVkKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yZWRyYXcpO3ZhciB0PXRoaXMuZ2xwbG90LGU9dGhpcy5jYW1lcmEscj1lLm1vdXNlTGlzdGVuZXIsbj0xPT09dGhpcy5sYXN0QnV0dG9uU3RhdGUmJjA9PT1yLmJ1dHRvbnMsaT10aGlzLmZ1bGxMYXlvdXQ7dGhpcy5sYXN0QnV0dG9uU3RhdGU9ci5idXR0b25zLHRoaXMuY2FtZXJhQ2hhbmdlZCgpO3ZhciBhLG89ci54KnQucGl4ZWxSYXRpbyxsPXRoaXMuY2FudmFzLmhlaWdodC10LnBpeGVsUmF0aW8qci55O2lmKGUuYm94RW5hYmxlZCYmXCJ6b29tXCI9PT1pLmRyYWdtb2RlKXt0aGlzLnNlbGVjdEJveC5lbmFibGVkPSEwO2Zvcih2YXIgYz10aGlzLnNlbGVjdEJveC5zZWxlY3RCb3g9W01hdGgubWluKGUuYm94U3RhcnRbMF0sZS5ib3hFbmRbMF0pLE1hdGgubWluKGUuYm94U3RhcnRbMV0sZS5ib3hFbmRbMV0pLE1hdGgubWF4KGUuYm94U3RhcnRbMF0sZS5ib3hFbmRbMF0pLE1hdGgubWF4KGUuYm94U3RhcnRbMV0sZS5ib3hFbmRbMV0pXSx1PTA7dTwyO3UrKyllLmJveFN0YXJ0W3VdPT09ZS5ib3hFbmRbdV0mJihjW3VdPXQuZGF0YUJveFt1XSxjW3UrMl09dC5kYXRhQm94W3UrMl0pO3Quc2V0RGlydHkoKX1lbHNlIGlmKCFlLnBhbm5pbmcmJnRoaXMuaXNNb3VzZU92ZXIpe3RoaXMuc2VsZWN0Qm94LmVuYWJsZWQ9ITE7dmFyIGg9aS5fc2l6ZSxmPXRoaXMueGF4aXMuZG9tYWluLHA9dGhpcy55YXhpcy5kb21haW4sZD0oYT10LnBpY2soby90LnBpeGVsUmF0aW8raC5sK2ZbMF0qaC53LGwvdC5waXhlbFJhdGlvLShoLnQrKDEtcFsxXSkqaC5oKSkpJiZhLm9iamVjdC5fdHJhY2UuaGFuZGxlUGljayhhKTtpZihkJiZuJiZ0aGlzLmVtaXRQb2ludEFjdGlvbihkLFwicGxvdGx5X2NsaWNrXCIpLGEmJlwic2tpcFwiIT09YS5vYmplY3QuX3RyYWNlLmhvdmVyaW5mbyYmaS5ob3Zlcm1vZGUmJmQmJighdGhpcy5sYXN0UGlja1Jlc3VsdHx8dGhpcy5sYXN0UGlja1Jlc3VsdC50cmFjZVVpZCE9PWQudHJhY2UudWlkfHx0aGlzLmxhc3RQaWNrUmVzdWx0LmRhdGFDb29yZFswXSE9PWQuZGF0YUNvb3JkWzBdfHx0aGlzLmxhc3RQaWNrUmVzdWx0LmRhdGFDb29yZFsxXSE9PWQuZGF0YUNvb3JkWzFdKSl7dmFyIGc9ZDt0aGlzLmxhc3RQaWNrUmVzdWx0PXt0cmFjZVVpZDpkLnRyYWNlP2QudHJhY2UudWlkOm51bGwsZGF0YUNvb3JkOmQuZGF0YUNvb3JkLnNsaWNlKCl9LHRoaXMuc3Bpa2VzLnVwZGF0ZSh7Y2VudGVyOmEuZGF0YUNvb3JkfSksZy5zY3JlZW5Db29yZD1bKCh0LnZpZXdCb3hbMl0tdC52aWV3Qm94WzBdKSooYS5kYXRhQ29vcmRbMF0tdC5kYXRhQm94WzBdKS8odC5kYXRhQm94WzJdLXQuZGF0YUJveFswXSkrdC52aWV3Qm94WzBdKS90LnBpeGVsUmF0aW8sKHRoaXMuY2FudmFzLmhlaWdodC0odC52aWV3Qm94WzNdLXQudmlld0JveFsxXSkqKGEuZGF0YUNvb3JkWzFdLXQuZGF0YUJveFsxXSkvKHQuZGF0YUJveFszXS10LmRhdGFCb3hbMV0pLXQudmlld0JveFsxXSkvdC5waXhlbFJhdGlvXSx0aGlzLmVtaXRQb2ludEFjdGlvbihkLFwicGxvdGx5X2hvdmVyXCIpO3ZhciB2PXRoaXMuZnVsbERhdGFbZy50cmFjZS5pbmRleF18fHt9LG09Zy5wb2ludEluZGV4LHk9cy5jYXN0SG92ZXJpbmZvKHYsaSxtKTtpZih5JiZcImFsbFwiIT09eSl7dmFyIHg9eS5zcGxpdChcIitcIik7LTE9PT14LmluZGV4T2YoXCJ4XCIpJiYoZy50cmFjZUNvb3JkWzBdPXZvaWQgMCksLTE9PT14LmluZGV4T2YoXCJ5XCIpJiYoZy50cmFjZUNvb3JkWzFdPXZvaWQgMCksLTE9PT14LmluZGV4T2YoXCJ6XCIpJiYoZy50cmFjZUNvb3JkWzJdPXZvaWQgMCksLTE9PT14LmluZGV4T2YoXCJ0ZXh0XCIpJiYoZy50ZXh0TGFiZWw9dm9pZCAwKSwtMT09PXguaW5kZXhPZihcIm5hbWVcIikmJihnLm5hbWU9dm9pZCAwKX1zLmxvbmVIb3Zlcih7eDpnLnNjcmVlbkNvb3JkWzBdLHk6Zy5zY3JlZW5Db29yZFsxXSx4TGFiZWw6dGhpcy5ob3ZlckZvcm1hdHRlcihcInhheGlzXCIsZy50cmFjZUNvb3JkWzBdKSx5TGFiZWw6dGhpcy5ob3ZlckZvcm1hdHRlcihcInlheGlzXCIsZy50cmFjZUNvb3JkWzFdKSx6TGFiZWw6Zy50cmFjZUNvb3JkWzJdLHRleHQ6Zy50ZXh0TGFiZWwsbmFtZTpnLm5hbWUsY29sb3I6cy5jYXN0SG92ZXJPcHRpb24odixtLFwiYmdjb2xvclwiKXx8Zy5jb2xvcixib3JkZXJDb2xvcjpzLmNhc3RIb3Zlck9wdGlvbih2LG0sXCJib3JkZXJjb2xvclwiKSxmb250RmFtaWx5OnMuY2FzdEhvdmVyT3B0aW9uKHYsbSxcImZvbnQuZmFtaWx5XCIpLGZvbnRTaXplOnMuY2FzdEhvdmVyT3B0aW9uKHYsbSxcImZvbnQuc2l6ZVwiKSxmb250Q29sb3I6cy5jYXN0SG92ZXJPcHRpb24odixtLFwiZm9udC5jb2xvclwiKSxuYW1lTGVuZ3RoOnMuY2FzdEhvdmVyT3B0aW9uKHYsbSxcIm5hbWVsZW5ndGhcIiksdGV4dEFsaWduOnMuY2FzdEhvdmVyT3B0aW9uKHYsbSxcImFsaWduXCIpfSx7Y29udGFpbmVyOnRoaXMuc3ZnQ29udGFpbmVyLGdkOnRoaXMuZ3JhcGhEaXZ9KX19YXx8dGhpcy51bmhvdmVyKCksdC5kcmF3KCl9fSx3LnVuaG92ZXI9ZnVuY3Rpb24oKXt0aGlzLmxhc3RQaWNrUmVzdWx0JiYodGhpcy5zcGlrZXMudXBkYXRlKHt9KSx0aGlzLmxhc3RQaWNrUmVzdWx0PW51bGwsdGhpcy5ncmFwaERpdi5lbWl0KFwicGxvdGx5X3VuaG92ZXJcIikscy5sb25lVW5ob3Zlcih0aGlzLnN2Z0NvbnRhaW5lcikpfSx3LmhvdmVyRm9ybWF0dGVyPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwIT09ZSl7dmFyIHI9dGhpc1t0XTtyZXR1cm4gby50aWNrVGV4dChyLHIuYzJsKGUpLFwiaG92ZXJcIikudGV4dH19fSx7XCIuLi8uLi9jb21wb25lbnRzL2Z4XCI6NjE3LFwiLi4vLi4vbGliL3Nob3dfbm9fd2ViZ2xfbXNnXCI6NzIyLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL2NhcnRlc2lhbi9hdXRvcmFuZ2VcIjo3NDgsXCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzXCI6NzU1LFwiLi4vY2FydGVzaWFuL2NvbnN0cmFpbnRzXCI6NzU2LFwiLi9jYW1lcmFcIjo3ODUsXCIuL2NvbnZlcnRcIjo3ODYsXCJnbC1wbG90MmRcIjoyODQsXCJnbC1zZWxlY3QtYm94XCI6Mjk2LFwiZ2wtc3Bpa2VzMmRcIjozMDUsXCJ3ZWJnbC1jb250ZXh0XCI6NTQxfV0sNzg5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGwsaT10KFwiLi4vLi4vY29tcG9uZW50cy9meC9sYXlvdXRfYXR0cmlidXRlc1wiKSxhPXQoXCIuL3NjZW5lXCIpLG89dChcIi4uL2dldF9kYXRhXCIpLmdldFN1YnBsb3REYXRhLHM9dChcIi4uLy4uL2xpYlwiKSxsPXQoXCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiKTtyLm5hbWU9XCJnbDNkXCIsci5hdHRyPVwic2NlbmVcIixyLmlkUm9vdD1cInNjZW5lXCIsci5pZFJlZ2V4PXIuYXR0clJlZ2V4PXMuY291bnRlclJlZ2V4KFwic2NlbmVcIiksci5hdHRyaWJ1dGVzPXQoXCIuL2xheW91dC9hdHRyaWJ1dGVzXCIpLHIubGF5b3V0QXR0cmlidXRlcz10KFwiLi9sYXlvdXQvbGF5b3V0X2F0dHJpYnV0ZXNcIiksci5iYXNlTGF5b3V0QXR0ck92ZXJyaWRlcz1uKHtob3ZlcmxhYmVsOmkuaG92ZXJsYWJlbH0sXCJwbG90XCIsXCJuZXN0ZWRcIiksci5zdXBwbHlMYXlvdXREZWZhdWx0cz10KFwiLi9sYXlvdXQvZGVmYXVsdHNcIiksci5wbG90PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5fZnVsbERhdGEsbj1lLl9zdWJwbG90cy5nbDNkLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIHM9bltpXSxsPW8ocixcImdsM2RcIixzKSxjPWVbc10sdT1jLmNhbWVyYSxoPWMuX3NjZW5lO2h8fChoPW5ldyBhKHtpZDpzLGdyYXBoRGl2OnQsY29udGFpbmVyOnQucXVlcnlTZWxlY3RvcihcIi5nbC1jb250YWluZXJcIiksc3RhdGljUGxvdDp0Ll9jb250ZXh0LnN0YXRpY1Bsb3QscGxvdEdsUGl4ZWxSYXRpbzp0Ll9jb250ZXh0LnBsb3RHbFBpeGVsUmF0aW8sY2FtZXJhOnV9LGUpLGMuX3NjZW5lPWgpLGgudmlld0luaXRpYWx8fChoLnZpZXdJbml0aWFsPXt1cDp7eDp1LnVwLngseTp1LnVwLnksejp1LnVwLnp9LGV5ZTp7eDp1LmV5ZS54LHk6dS5leWUueSx6OnUuZXllLnp9LGNlbnRlcjp7eDp1LmNlbnRlci54LHk6dS5jZW50ZXIueSx6OnUuY2VudGVyLnp9fSksaC5wbG90KGwsZSx0LmxheW91dCl9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1uLl9zdWJwbG90cy5nbDNkfHxbXSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV07IWVbb10mJm5bb10uX3NjZW5lJiYobltvXS5fc2NlbmUuZGVzdHJveSgpLG4uX2luZm9sYXllciYmbi5faW5mb2xheWVyLnNlbGVjdEFsbChcIi5hbm5vdGF0aW9uLVwiK28pLnJlbW92ZSgpKX19LHIudG9TVkc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDNkLG49ZS5fc2l6ZSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPWVbcltpXV0sbz1hLmRvbWFpbixzPWEuX3NjZW5lLGM9cy50b0ltYWdlKFwicG5nXCIpO2UuX2dsaW1hZ2VzLmFwcGVuZChcInN2ZzppbWFnZVwiKS5hdHRyKHt4bWxuczpsLnN2ZyxcInhsaW5rOmhyZWZcIjpjLHg6bi5sK24udypvLnhbMF0seTpuLnQrbi5oKigxLW8ueVsxXSksd2lkdGg6bi53KihvLnhbMV0tby54WzBdKSxoZWlnaHQ6bi5oKihvLnlbMV0tby55WzBdKSxwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwibm9uZVwifSkscy5kZXN0cm95KCl9fSxyLmNsZWFuSWQ9ZnVuY3Rpb24odCl7aWYodC5tYXRjaCgvXnNjZW5lWzAtOV0qJC8pKXt2YXIgZT10LnN1YnN0cig1KTtyZXR1cm5cIjFcIj09PWUmJihlPVwiXCIpLFwic2NlbmVcIitlfX0sci51cGRhdGVGeD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLmdsM2Qsbj0wO248ci5sZW5ndGg7bisrKXtlW3Jbbl1dLl9zY2VuZS51cGRhdGVGeChlLmRyYWdtb2RlLGUuaG92ZXJtb2RlKX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzXCI6NjE4LFwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIjo2NzksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi4vZ2V0X2RhdGFcIjo3ODQsXCIuL2xheW91dC9hdHRyaWJ1dGVzXCI6NzkwLFwiLi9sYXlvdXQvZGVmYXVsdHNcIjo3OTQsXCIuL2xheW91dC9sYXlvdXRfYXR0cmlidXRlc1wiOjc5NSxcIi4vc2NlbmVcIjo3OTl9XSw3OTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e3NjZW5lOnt2YWxUeXBlOlwic3VicGxvdGlkXCIsZGZsdDpcInNjZW5lXCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9fX0se31dLDc5MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGk9dChcIi4uLy4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsbz10KFwiLi4vLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbDtlLmV4cG9ydHM9byh7dmlzaWJsZTppLnZpc2libGUsc2hvd3NwaWtlczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfSxzcGlrZXNpZGVzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITB9LHNwaWtldGhpY2tuZXNzOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoyfSxzcGlrZWNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0Om4uZGVmYXVsdExpbmV9LHNob3diYWNrZ3JvdW5kOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LGJhY2tncm91bmRjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDpcInJnYmEoMjA0LCAyMDQsIDIwNCwgMC41KVwifSxzaG93YXhlc2xhYmVsczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfSxjb2xvcjppLmNvbG9yLGNhdGVnb3J5b3JkZXI6aS5jYXRlZ29yeW9yZGVyLGNhdGVnb3J5YXJyYXk6aS5jYXRlZ29yeWFycmF5LHRpdGxlOmkudGl0bGUsdHlwZTphKHt9LGkudHlwZSx7dmFsdWVzOltcIi1cIixcImxpbmVhclwiLFwibG9nXCIsXCJkYXRlXCIsXCJjYXRlZ29yeVwiXX0pLGF1dG9yYW5nZTppLmF1dG9yYW5nZSxyYW5nZW1vZGU6aS5yYW5nZW1vZGUscmFuZ2U6YSh7fSxpLnJhbmdlLHtpdGVtczpbe3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcInBsb3RcIixpbXBsaWVkRWRpdHM6e1wiXmF1dG9yYW5nZVwiOiExfX0se3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcInBsb3RcIixpbXBsaWVkRWRpdHM6e1wiXmF1dG9yYW5nZVwiOiExfX1dLGFuaW06ITF9KSx0aWNrbW9kZTppLnRpY2ttb2RlLG50aWNrczppLm50aWNrcyx0aWNrMDppLnRpY2swLGR0aWNrOmkuZHRpY2ssdGlja3ZhbHM6aS50aWNrdmFscyx0aWNrdGV4dDppLnRpY2t0ZXh0LHRpY2tzOmkudGlja3MsbWlycm9yOmkubWlycm9yLHRpY2tsZW46aS50aWNrbGVuLHRpY2t3aWR0aDppLnRpY2t3aWR0aCx0aWNrY29sb3I6aS50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6aS5zaG93dGlja2xhYmVscyx0aWNrZm9udDppLnRpY2tmb250LHRpY2thbmdsZTppLnRpY2thbmdsZSx0aWNrcHJlZml4OmkudGlja3ByZWZpeCxzaG93dGlja3ByZWZpeDppLnNob3d0aWNrcHJlZml4LHRpY2tzdWZmaXg6aS50aWNrc3VmZml4LHNob3d0aWNrc3VmZml4Omkuc2hvd3RpY2tzdWZmaXgsc2hvd2V4cG9uZW50Omkuc2hvd2V4cG9uZW50LGV4cG9uZW50Zm9ybWF0OmkuZXhwb25lbnRmb3JtYXQsc2VwYXJhdGV0aG91c2FuZHM6aS5zZXBhcmF0ZXRob3VzYW5kcyx0aWNrZm9ybWF0OmkudGlja2Zvcm1hdCx0aWNrZm9ybWF0c3RvcHM6aS50aWNrZm9ybWF0c3RvcHMsaG92ZXJmb3JtYXQ6aS5ob3ZlcmZvcm1hdCxzaG93bGluZTppLnNob3dsaW5lLGxpbmVjb2xvcjppLmxpbmVjb2xvcixsaW5ld2lkdGg6aS5saW5ld2lkdGgsc2hvd2dyaWQ6aS5zaG93Z3JpZCxncmlkY29sb3I6YSh7fSxpLmdyaWRjb2xvcix7ZGZsdDpcInJnYigyMDQsIDIwNCwgMjA0KVwifSksZ3JpZHdpZHRoOmkuZ3JpZHdpZHRoLHplcm9saW5lOmkuemVyb2xpbmUsemVyb2xpbmVjb2xvcjppLnplcm9saW5lY29sb3IsemVyb2xpbmV3aWR0aDppLnplcm9saW5ld2lkdGgsX2RlcHJlY2F0ZWQ6e3RpdGxlOmkuX2RlcHJlY2F0ZWQudGl0bGUsdGl0bGVmb250OmkuX2RlcHJlY2F0ZWQudGl0bGVmb250fX0sXCJwbG90XCIsXCJmcm9tLXJvb3RcIil9LHtcIi4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uLy4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlc1wiOjc2MX1dLDc5MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJ0aW55Y29sb3IyXCIpLm1peCxpPXQoXCIuLi8uLi8uLi9saWJcIiksYT10KFwiLi4vLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKSxvPXQoXCIuL2F4aXNfYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9jYXJ0ZXNpYW4vdHlwZV9kZWZhdWx0c1wiKSxsPXQoXCIuLi8uLi9jYXJ0ZXNpYW4vYXhpc19kZWZhdWx0c1wiKSxjPVtcInhheGlzXCIsXCJ5YXhpc1wiLFwiemF4aXNcIl07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgdSxoO2Z1bmN0aW9uIGYodCxlKXtyZXR1cm4gaS5jb2VyY2UodSxoLG8sdCxlKX1mb3IodmFyIHA9MDtwPGMubGVuZ3RoO3ArKyl7dmFyIGQ9Y1twXTt1PXRbZF18fHt9LChoPWEubmV3Q29udGFpbmVyKGUsZCkpLl9pZD1kWzBdK3Iuc2NlbmUsaC5fbmFtZT1kLHModSxoLGYsciksbCh1LGgsZix7Zm9udDpyLmZvbnQsbGV0dGVyOmRbMF0sZGF0YTpyLmRhdGEsc2hvd0dyaWQ6ITAsbm9UaWNrc29uOiEwLGJnQ29sb3I6ci5iZ0NvbG9yLGNhbGVuZGFyOnIuY2FsZW5kYXJ9LHIuZnVsbExheW91dCksZihcImdyaWRjb2xvclwiLG4oaC5jb2xvcixyLmJnQ29sb3IsMTM2MDAvMTg3KS50b1JnYlN0cmluZygpKSxmKFwidGl0bGUudGV4dFwiLGRbMF0pLGguc2V0U2NhbGU9aS5ub29wLGYoXCJzaG93c3Bpa2VzXCIpJiYoZihcInNwaWtlc2lkZXNcIiksZihcInNwaWtldGhpY2tuZXNzXCIpLGYoXCJzcGlrZWNvbG9yXCIsaC5jb2xvcikpLGYoXCJzaG93YXhlc2xhYmVsc1wiKSxmKFwic2hvd2JhY2tncm91bmRcIikmJmYoXCJiYWNrZ3JvdW5kY29sb3JcIil9fX0se1wiLi4vLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzXCI6NzUxLFwiLi4vLi4vY2FydGVzaWFuL3R5cGVfZGVmYXVsdHNcIjo3NzIsXCIuL2F4aXNfYXR0cmlidXRlc1wiOjc5MSx0aW55Y29sb3IyOjUyMn1dLDc5MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi8uLi9saWIvc3RyMnJnYmFycmF5XCIpLGk9dChcIi4uLy4uLy4uL2xpYlwiKSxhPVtcInhheGlzXCIsXCJ5YXhpc1wiLFwiemF4aXNcIl07ZnVuY3Rpb24gbygpe3RoaXMuYm91bmRzPVtbLTEwLC0xMCwtMTBdLFsxMCwxMCwxMF1dLHRoaXMudGlja3M9W1tdLFtdLFtdXSx0aGlzLnRpY2tFbmFibGU9WyEwLCEwLCEwXSx0aGlzLnRpY2tGb250PVtcInNhbnMtc2VyaWZcIixcInNhbnMtc2VyaWZcIixcInNhbnMtc2VyaWZcIl0sdGhpcy50aWNrU2l6ZT1bMTIsMTIsMTJdLHRoaXMudGlja0FuZ2xlPVswLDAsMF0sdGhpcy50aWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tQYWQ9WzE4LDE4LDE4XSx0aGlzLmxhYmVscz1bXCJ4XCIsXCJ5XCIsXCJ6XCJdLHRoaXMubGFiZWxFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxhYmVsRm9udD1bXCJPcGVuIFNhbnNcIixcIk9wZW4gU2Fuc1wiLFwiT3BlbiBTYW5zXCJdLHRoaXMubGFiZWxTaXplPVsyMCwyMCwyMF0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5sYWJlbFBhZD1bMzAsMzAsMzBdLHRoaXMubGluZUVuYWJsZT1bITAsITAsITBdLHRoaXMubGluZU1pcnJvcj1bITEsITEsITFdLHRoaXMubGluZVdpZHRoPVsxLDEsMV0sdGhpcy5saW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxpbmVUaWNrRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5saW5lVGlja01pcnJvcj1bITEsITEsITFdLHRoaXMubGluZVRpY2tMZW5ndGg9WzEwLDEwLDEwXSx0aGlzLmxpbmVUaWNrV2lkdGg9WzEsMSwxXSx0aGlzLmxpbmVUaWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmdyaWRFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmdyaWRXaWR0aD1bMSwxLDFdLHRoaXMuZ3JpZENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy56ZXJvRW5hYmxlPVshMCwhMCwhMF0sdGhpcy56ZXJvTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy56ZXJvTGluZVdpZHRoPVsyLDIsMl0sdGhpcy5iYWNrZ3JvdW5kRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5iYWNrZ3JvdW5kQ29sb3I9W1suOCwuOCwuOCwuNV0sWy44LC44LC44LC41XSxbLjgsLjgsLjgsLjVdXSx0aGlzLl9kZWZhdWx0VGlja1BhZD10aGlzLnRpY2tQYWQuc2xpY2UoKSx0aGlzLl9kZWZhdWx0TGFiZWxQYWQ9dGhpcy5sYWJlbFBhZC5zbGljZSgpLHRoaXMuX2RlZmF1bHRMaW5lVGlja0xlbmd0aD10aGlzLmxpbmVUaWNrTGVuZ3RoLnNsaWNlKCl9by5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPDM7KytyKXt2YXIgbz1lW2Fbcl1dO28udmlzaWJsZT8odGhpcy5sYWJlbHNbcl09dC5tZXRhP2kudGVtcGxhdGVTdHJpbmcoby50aXRsZS50ZXh0LHttZXRhOnQubWV0YX0pOm8udGl0bGUudGV4dCxcImZvbnRcImluIG8udGl0bGUmJihvLnRpdGxlLmZvbnQuY29sb3ImJih0aGlzLmxhYmVsQ29sb3Jbcl09bihvLnRpdGxlLmZvbnQuY29sb3IpKSxvLnRpdGxlLmZvbnQuZmFtaWx5JiYodGhpcy5sYWJlbEZvbnRbcl09by50aXRsZS5mb250LmZhbWlseSksby50aXRsZS5mb250LnNpemUmJih0aGlzLmxhYmVsU2l6ZVtyXT1vLnRpdGxlLmZvbnQuc2l6ZSkpLFwic2hvd2xpbmVcImluIG8mJih0aGlzLmxpbmVFbmFibGVbcl09by5zaG93bGluZSksXCJsaW5lY29sb3JcImluIG8mJih0aGlzLmxpbmVDb2xvcltyXT1uKG8ubGluZWNvbG9yKSksXCJsaW5ld2lkdGhcImluIG8mJih0aGlzLmxpbmVXaWR0aFtyXT1vLmxpbmV3aWR0aCksXCJzaG93Z3JpZFwiaW4gbyYmKHRoaXMuZ3JpZEVuYWJsZVtyXT1vLnNob3dncmlkKSxcImdyaWRjb2xvclwiaW4gbyYmKHRoaXMuZ3JpZENvbG9yW3JdPW4oby5ncmlkY29sb3IpKSxcImdyaWR3aWR0aFwiaW4gbyYmKHRoaXMuZ3JpZFdpZHRoW3JdPW8uZ3JpZHdpZHRoKSxcImxvZ1wiPT09by50eXBlP3RoaXMuemVyb0VuYWJsZVtyXT0hMTpcInplcm9saW5lXCJpbiBvJiYodGhpcy56ZXJvRW5hYmxlW3JdPW8uemVyb2xpbmUpLFwiemVyb2xpbmVjb2xvclwiaW4gbyYmKHRoaXMuemVyb0xpbmVDb2xvcltyXT1uKG8uemVyb2xpbmVjb2xvcikpLFwiemVyb2xpbmV3aWR0aFwiaW4gbyYmKHRoaXMuemVyb0xpbmVXaWR0aFtyXT1vLnplcm9saW5ld2lkdGgpLFwidGlja3NcImluIG8mJm8udGlja3M/dGhpcy5saW5lVGlja0VuYWJsZVtyXT0hMDp0aGlzLmxpbmVUaWNrRW5hYmxlW3JdPSExLFwidGlja2xlblwiaW4gbyYmKHRoaXMubGluZVRpY2tMZW5ndGhbcl09dGhpcy5fZGVmYXVsdExpbmVUaWNrTGVuZ3RoW3JdPW8udGlja2xlbiksXCJ0aWNrY29sb3JcImluIG8mJih0aGlzLmxpbmVUaWNrQ29sb3Jbcl09bihvLnRpY2tjb2xvcikpLFwidGlja3dpZHRoXCJpbiBvJiYodGhpcy5saW5lVGlja1dpZHRoW3JdPW8udGlja3dpZHRoKSxcInRpY2thbmdsZVwiaW4gbyYmKHRoaXMudGlja0FuZ2xlW3JdPVwiYXV0b1wiPT09by50aWNrYW5nbGU/LTM2MDA6TWF0aC5QSSotby50aWNrYW5nbGUvMTgwKSxcInNob3d0aWNrbGFiZWxzXCJpbiBvJiYodGhpcy50aWNrRW5hYmxlW3JdPW8uc2hvd3RpY2tsYWJlbHMpLFwidGlja2ZvbnRcImluIG8mJihvLnRpY2tmb250LmNvbG9yJiYodGhpcy50aWNrQ29sb3Jbcl09bihvLnRpY2tmb250LmNvbG9yKSksby50aWNrZm9udC5mYW1pbHkmJih0aGlzLnRpY2tGb250W3JdPW8udGlja2ZvbnQuZmFtaWx5KSxvLnRpY2tmb250LnNpemUmJih0aGlzLnRpY2tTaXplW3JdPW8udGlja2ZvbnQuc2l6ZSkpLFwibWlycm9yXCJpbiBvPy0xIT09W1widGlja3NcIixcImFsbFwiLFwiYWxsdGlja3NcIl0uaW5kZXhPZihvLm1pcnJvcik/KHRoaXMubGluZVRpY2tNaXJyb3Jbcl09ITAsdGhpcy5saW5lTWlycm9yW3JdPSEwKTohMD09PW8ubWlycm9yPyh0aGlzLmxpbmVUaWNrTWlycm9yW3JdPSExLHRoaXMubGluZU1pcnJvcltyXT0hMCk6KHRoaXMubGluZVRpY2tNaXJyb3Jbcl09ITEsdGhpcy5saW5lTWlycm9yW3JdPSExKTp0aGlzLmxpbmVNaXJyb3Jbcl09ITEsXCJzaG93YmFja2dyb3VuZFwiaW4gbyYmITEhPT1vLnNob3diYWNrZ3JvdW5kPyh0aGlzLmJhY2tncm91bmRFbmFibGVbcl09ITAsdGhpcy5iYWNrZ3JvdW5kQ29sb3Jbcl09bihvLmJhY2tncm91bmRjb2xvcikpOnRoaXMuYmFja2dyb3VuZEVuYWJsZVtyXT0hMSk6KHRoaXMudGlja0VuYWJsZVtyXT0hMSx0aGlzLmxhYmVsRW5hYmxlW3JdPSExLHRoaXMubGluZUVuYWJsZVtyXT0hMSx0aGlzLmxpbmVUaWNrRW5hYmxlW3JdPSExLHRoaXMuZ3JpZEVuYWJsZVtyXT0hMSx0aGlzLnplcm9FbmFibGVbcl09ITEsdGhpcy5iYWNrZ3JvdW5kRW5hYmxlW3JdPSExKX19LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBvO3JldHVybiByLm1lcmdlKHQsZSkscn19LHtcIi4uLy4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIjo3MjR9XSw3OTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksYT10KFwiLi4vLi4vLi4vcmVnaXN0cnlcIiksbz10KFwiLi4vLi4vc3VicGxvdF9kZWZhdWx0c1wiKSxzPXQoXCIuL2F4aXNfZGVmYXVsdHNcIiksbD10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxjPXQoXCIuLi8uLi9nZXRfZGF0YVwiKS5nZXRTdWJwbG90RGF0YSx1PVwiZ2wzZFwiO2Z1bmN0aW9uIGgodCxlLHIsbil7Zm9yKHZhciBvPXIoXCJiZ2NvbG9yXCIpLGw9aS5jb21iaW5lKG8sbi5wYXBlcl9iZ2NvbG9yKSxoPVtcInVwXCIsXCJjZW50ZXJcIixcImV5ZVwiXSxmPTA7ZjxoLmxlbmd0aDtmKyspcihcImNhbWVyYS5cIitoW2ZdK1wiLnhcIikscihcImNhbWVyYS5cIitoW2ZdK1wiLnlcIikscihcImNhbWVyYS5cIitoW2ZdK1wiLnpcIik7cihcImNhbWVyYS5wcm9qZWN0aW9uLnR5cGVcIik7dmFyIHA9ISFyKFwiYXNwZWN0cmF0aW8ueFwiKSYmISFyKFwiYXNwZWN0cmF0aW8ueVwiKSYmISFyKFwiYXNwZWN0cmF0aW8uelwiKSxkPXIoXCJhc3BlY3Rtb2RlXCIscD9cIm1hbnVhbFwiOlwiYXV0b1wiKTtwfHwodC5hc3BlY3RyYXRpbz1lLmFzcGVjdHJhdGlvPXt4OjEseToxLHo6MX0sXCJtYW51YWxcIj09PWQmJihlLmFzcGVjdG1vZGU9XCJhdXRvXCIpLHQuYXNwZWN0bW9kZT1lLmFzcGVjdG1vZGUpO3ZhciBnPWMobi5mdWxsRGF0YSx1LG4uaWQpO3ModCxlLHtmb250Om4uZm9udCxzY2VuZTpuLmlkLGRhdGE6ZyxiZ0NvbG9yOmwsY2FsZW5kYXI6bi5jYWxlbmRhcixmdWxsTGF5b3V0Om4uZnVsbExheW91dH0pLGEuZ2V0Q29tcG9uZW50TWV0aG9kKFwiYW5ub3RhdGlvbnMzZFwiLFwiaGFuZGxlRGVmYXVsdHNcIikodCxlLG4pO3ZhciB2PW4uZ2V0RGZsdEZyb21MYXlvdXQoXCJkcmFnbW9kZVwiKTtpZighMSE9PXYmJiF2KWlmKHY9XCJvcmJpdFwiLHQuY2FtZXJhJiZ0LmNhbWVyYS51cCl7dmFyIG09dC5jYW1lcmEudXAueCx5PXQuY2FtZXJhLnVwLnkseD10LmNhbWVyYS51cC56OzAhPT14JiYobSYmeSYmeD94L01hdGguc3FydChtKm0reSp5K3gqeCk+Ljk5OSYmKHY9XCJ0dXJudGFibGVcIik6dj1cInR1cm50YWJsZVwiKX1lbHNlIHY9XCJ0dXJudGFibGVcIjtyKFwiZHJhZ21vZGVcIix2KSxyKFwiaG92ZXJtb2RlXCIsbi5nZXREZmx0RnJvbUxheW91dChcImhvdmVybW9kZVwiKSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1lLl9iYXNlUGxvdE1vZHVsZXMubGVuZ3RoPjE7byh0LGUscix7dHlwZTp1LGF0dHJpYnV0ZXM6bCxoYW5kbGVEZWZhdWx0czpoLGZ1bGxMYXlvdXQ6ZSxmb250OmUuZm9udCxmdWxsRGF0YTpyLGdldERmbHRGcm9tTGF5b3V0OmZ1bmN0aW9uKGUpe2lmKCFpKXJldHVybiBuLnZhbGlkYXRlKHRbZV0sbFtlXSk/dFtlXTp2b2lkIDB9LHBhcGVyX2JnY29sb3I6ZS5wYXBlcl9iZ2NvbG9yLGNhbGVuZGFyOmUuY2FsZW5kYXJ9KX19LHtcIi4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi8uLi9saWJcIjo3MDEsXCIuLi8uLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uLy4uL2dldF9kYXRhXCI6Nzg0LFwiLi4vLi4vc3VicGxvdF9kZWZhdWx0c1wiOjgyNCxcIi4vYXhpc19kZWZhdWx0c1wiOjc5MixcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo3OTV9XSw3OTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9heGlzX2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vZG9tYWluXCIpLmF0dHJpYnV0ZXMsYT10KFwiLi4vLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LG89dChcIi4uLy4uLy4uL2xpYlwiKS5jb3VudGVyUmVnZXg7ZnVuY3Rpb24gcyh0LGUscil7cmV0dXJue3g6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OnQsZWRpdFR5cGU6XCJjYW1lcmFcIn0seTp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6ZSxlZGl0VHlwZTpcImNhbWVyYVwifSx6Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDpyLGVkaXRUeXBlOlwiY2FtZXJhXCJ9LGVkaXRUeXBlOlwiY2FtZXJhXCJ9fWUuZXhwb3J0cz17X2FycmF5QXR0clJlZ2V4cHM6W28oXCJzY2VuZVwiLFwiLmFubm90YXRpb25zXCIsITApXSxiZ2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OlwicmdiYSgwLDAsMCwwKVwiLGVkaXRUeXBlOlwicGxvdFwifSxjYW1lcmE6e3VwOmEocygwLDAsMSkse30pLGNlbnRlcjphKHMoMCwwLDApLHt9KSxleWU6YShzKDEuMjUsMS4yNSwxLjI1KSx7fSkscHJvamVjdGlvbjp7dHlwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wicGVyc3BlY3RpdmVcIixcIm9ydGhvZ3JhcGhpY1wiXSxkZmx0OlwicGVyc3BlY3RpdmVcIixlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LGVkaXRUeXBlOlwiY2FtZXJhXCJ9LGRvbWFpbjppKHtuYW1lOlwic2NlbmVcIixlZGl0VHlwZTpcInBsb3RcIn0pLGFzcGVjdG1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImF1dG9cIixcImN1YmVcIixcImRhdGFcIixcIm1hbnVhbFwiXSxkZmx0OlwiYXV0b1wiLGVkaXRUeXBlOlwicGxvdFwiLGltcGxpZWRFZGl0czp7XCJhc3BlY3RyYXRpby54XCI6dm9pZCAwLFwiYXNwZWN0cmF0aW8ueVwiOnZvaWQgMCxcImFzcGVjdHJhdGlvLnpcIjp2b2lkIDB9fSxhc3BlY3RyYXRpbzp7eDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGVkaXRUeXBlOlwicGxvdFwiLGltcGxpZWRFZGl0czp7XCJeYXNwZWN0bW9kZVwiOlwibWFudWFsXCJ9fSx5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZWRpdFR5cGU6XCJwbG90XCIsaW1wbGllZEVkaXRzOntcIl5hc3BlY3Rtb2RlXCI6XCJtYW51YWxcIn19LHo6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxlZGl0VHlwZTpcInBsb3RcIixpbXBsaWVkRWRpdHM6e1wiXmFzcGVjdG1vZGVcIjpcIm1hbnVhbFwifX0sZWRpdFR5cGU6XCJwbG90XCIsaW1wbGllZEVkaXRzOnthc3BlY3Rtb2RlOlwibWFudWFsXCJ9fSx4YXhpczpuLHlheGlzOm4semF4aXM6bixkcmFnbW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wib3JiaXRcIixcInR1cm50YWJsZVwiLFwiem9vbVwiLFwicGFuXCIsITFdLGVkaXRUeXBlOlwicGxvdFwifSxob3Zlcm1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImNsb3Nlc3RcIiwhMV0sZGZsdDpcImNsb3Nlc3RcIixlZGl0VHlwZTpcIm1vZGViYXJcIn0sdWlyZXZpc2lvbjp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwibm9uZVwifSxlZGl0VHlwZTpcInBsb3RcIixfZGVwcmVjYXRlZDp7Y2FtZXJhcG9zaXRpb246e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsZWRpdFR5cGU6XCJjYW1lcmFcIn19fX0se1wiLi4vLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL2RvbWFpblwiOjc3NCxcIi4vYXhpc19hdHRyaWJ1dGVzXCI6NzkxfV0sNzk2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIiksaT1bXCJ4YXhpc1wiLFwieWF4aXNcIixcInpheGlzXCJdO2Z1bmN0aW9uIGEoKXt0aGlzLmVuYWJsZWQ9WyEwLCEwLCEwXSx0aGlzLmNvbG9ycz1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZHJhd1NpZGVzPVshMCwhMCwhMF0sdGhpcy5saW5lV2lkdGg9WzEsMSwxXX1hLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPDM7KytlKXt2YXIgcj10W2lbZV1dO3IudmlzaWJsZT8odGhpcy5lbmFibGVkW2VdPXIuc2hvd3NwaWtlcyx0aGlzLmNvbG9yc1tlXT1uKHIuc3Bpa2Vjb2xvciksdGhpcy5kcmF3U2lkZXNbZV09ci5zcGlrZXNpZGVzLHRoaXMubGluZVdpZHRoW2VdPXIuc3Bpa2V0aGlja25lc3MpOih0aGlzLmVuYWJsZWRbZV09ITEsdGhpcy5kcmF3U2lkZXNbZV09ITEpfX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBhO3JldHVybiBlLm1lcmdlKHQpLGV9fSx7XCIuLi8uLi8uLi9saWIvc3RyMnJnYmFycmF5XCI6NzI0fV0sNzk3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmF4ZXNPcHRpb25zLHI9dC5nbHBsb3QuYXhlc1BpeGVscyxzPXQuZnVsbFNjZW5lTGF5b3V0LGw9W1tdLFtdLFtdXSxjPTA7YzwzOysrYyl7dmFyIHU9c1thW2NdXTtpZih1Ll9sZW5ndGg9KHJbY10uaGktcltjXS5sbykqcltjXS5waXhlbHNQZXJEYXRhVW5pdC90LmRhdGFTY2FsZVtjXSxNYXRoLmFicyh1Ll9sZW5ndGgpPT09MS8wfHxpc05hTih1Ll9sZW5ndGgpKWxbY109W107ZWxzZXt1Ll9pbnB1dF9yYW5nZT11LnJhbmdlLnNsaWNlKCksdS5yYW5nZVswXT1yW2NdLmxvL3QuZGF0YVNjYWxlW2NdLHUucmFuZ2VbMV09cltjXS5oaS90LmRhdGFTY2FsZVtjXSx1Ll9tPTEvKHQuZGF0YVNjYWxlW2NdKnJbY10ucGl4ZWxzUGVyRGF0YVVuaXQpLHUucmFuZ2VbMF09PT11LnJhbmdlWzFdJiYodS5yYW5nZVswXS09MSx1LnJhbmdlWzFdKz0xKTt2YXIgaD11LnRpY2ttb2RlO2lmKFwiYXV0b1wiPT09dS50aWNrbW9kZSl7dS50aWNrbW9kZT1cImxpbmVhclwiO3ZhciBmPXUubnRpY2tzfHxpLmNvbnN0cmFpbih1Ll9sZW5ndGgvNDAsNCw5KTtuLmF1dG9UaWNrcyh1LE1hdGguYWJzKHUucmFuZ2VbMV0tdS5yYW5nZVswXSkvZil9Zm9yKHZhciBwPW4uY2FsY1RpY2tzKHUpLGQ9MDtkPHAubGVuZ3RoOysrZClwW2RdLng9cFtkXS54KnQuZGF0YVNjYWxlW2NdLFwiZGF0ZVwiPT09dS50eXBlJiYocFtkXS50ZXh0PXBbZF0udGV4dC5yZXBsYWNlKC9cXDxiclxcPi9nLFwiIFwiKSk7bFtjXT1wLHUudGlja21vZGU9aH19ZS50aWNrcz1sO2Zvcih2YXIgYz0wO2M8MzsrK2Mpe29bY109LjUqKHQuZ2xwbG90LmJvdW5kc1swXVtjXSt0LmdscGxvdC5ib3VuZHNbMV1bY10pO2Zvcih2YXIgZD0wO2Q8MjsrK2QpZS5ib3VuZHNbZF1bY109dC5nbHBsb3QuYm91bmRzW2RdW2NdfXQuY29udG91ckxldmVscz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KDMpLHI9MDtyPDM7KytyKXtmb3IodmFyIG49dFtyXSxpPW5ldyBBcnJheShuLmxlbmd0aCksYT0wO2E8bi5sZW5ndGg7KythKWlbYV09blthXS54O2Vbcl09aX1yZXR1cm4gZX0obCl9O3ZhciBuPXQoXCIuLi8uLi9jYXJ0ZXNpYW4vYXhlc1wiKSxpPXQoXCIuLi8uLi8uLi9saWJcIiksYT1bXCJ4YXhpc1wiLFwieWF4aXNcIixcInpheGlzXCJdLG89WzAsMCwwXX0se1wiLi4vLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vY2FydGVzaWFuL2F4ZXNcIjo3NDl9XSw3OTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7dmFyIHIsbixpPVswLDAsMCwwXTtmb3Iocj0wO3I8NDsrK3IpZm9yKG49MDtuPDQ7KytuKWlbbl0rPXRbNCpyK25dKmVbcl07cmV0dXJuIGl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odC5wcm9qZWN0aW9uLG4odC52aWV3LG4odC5tb2RlbCxbZVswXSxlWzFdLGVbMl0sMV0pKSl9fSx7fV0sNzk5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saSxhPXQoXCJnbC1wbG90M2RcIikuY3JlYXRlQ2FtZXJhLG89dChcImdsLXBsb3QzZFwiKS5jcmVhdGVTY2VuZSxzPXQoXCJ3ZWJnbC1jb250ZXh0XCIpLGw9dChcImhhcy1wYXNzaXZlLWV2ZW50c1wiKSxjPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSx1PXQoXCIuLi8uLi9saWJcIiksaD10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksZj10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxwPXQoXCIuLi8uLi9saWIvc3RyMnJnYmFycmF5XCIpLGQ9dChcIi4uLy4uL2xpYi9zaG93X25vX3dlYmdsX21zZ1wiKSxnPXQoXCIuL3Byb2plY3RcIiksdj10KFwiLi9sYXlvdXQvY29udmVydFwiKSxtPXQoXCIuL2xheW91dC9zcGlrZXNcIikseT10KFwiLi9sYXlvdXQvdGlja19tYXJrc1wiKTtmdW5jdGlvbiB4KHQsZSxyLGEpe2lmKHQuaW5pdGlhbGl6ZUdMQ2FtZXJhKCksIWZ1bmN0aW9uKHQsZSxyLGEsbCl7dmFyIGM9e2NhbnZhczphLGdsOmwsY29udGFpbmVyOnQuY29udGFpbmVyLGF4ZXM6dC5heGVzT3B0aW9ucyxzcGlrZXM6dC5zcGlrZU9wdGlvbnMscGlja1JhZGl1czoxMCxzbmFwVG9EYXRhOiEwLGF1dG9TY2FsZTohMCxhdXRvQm91bmRzOiExLGNhbWVyYU9iamVjdDplLHBpeGVsUmF0aW86cn07aWYodC5zdGF0aWNNb2RlKXtpZighKGl8fChuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksaT1zKHtjYW52YXM6bixwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITAscHJlbXVsdGlwbGllZEFscGhhOiEwLGFudGlhbGlhczohMH0pKSkpdGhyb3cgbmV3IEVycm9yKFwiZXJyb3IgY3JlYXRpbmcgc3RhdGljIGNhbnZhcy9jb250ZXh0IGZvciBpbWFnZSBzZXJ2ZXJcIik7Yy5waXhlbFJhdGlvPXQucGl4ZWxSYXRpbyxjLmdsPWksYy5jYW52YXM9bn10cnl7dC5nbHBsb3Q9byhjKX1jYXRjaCh0KXtyZXR1cm4hMX1yZXR1cm4hMH0odCx0LmNhbWVyYSxlLHIsYSkpcmV0dXJuIGQodCk7dmFyIGM9dC5ncmFwaERpdixwPWZ1bmN0aW9uKHQpe2lmKCExIT09dC5mdWxsU2NlbmVMYXlvdXQuZHJhZ21vZGUpe3ZhciBlPXt9O2VbdC5pZCtcIi5jYW1lcmFcIl09QSh0LmNhbWVyYSksdC5zYXZlQ2FtZXJhKGMubGF5b3V0KSx0LmdyYXBoRGl2LmVtaXQoXCJwbG90bHlfcmVsYXlvdXRcIixlKX19O3JldHVybiB0LmdscGxvdC5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixmdW5jdGlvbigpe3AodCl9KSx0LmdscGxvdC5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsZnVuY3Rpb24oKXtjLl9jb250ZXh0Ll9zY3JvbGxab29tLmdsM2QmJnAodCl9LCEhbCYme3Bhc3NpdmU6ITF9KSx0LnN0YXRpY01vZGV8fHQuZ2xwbG90LmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKFwid2ViZ2xjb250ZXh0bG9zdFwiLGZ1bmN0aW9uKGUpe2MmJmMuZW1pdCYmYy5lbWl0KFwicGxvdGx5X3dlYmdsY29udGV4dGxvc3RcIix7ZXZlbnQ6ZSxsYXllcjp0LmlkfSl9LCExKSx0LmdscGxvdC5jYW1lcmE9dC5jYW1lcmEsdC5nbHBsb3Qub25jb250ZXh0bG9zcz1mdW5jdGlvbigpe3QucmVjb3ZlckNvbnRleHQoKX0sdC5nbHBsb3Qub25yZW5kZXI9ZnVuY3Rpb24odCl7dmFyIGUscj10LmdyYXBoRGl2LG49dC5zdmdDb250YWluZXIsaT10LmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPWkud2lkdGgsbz1pLmhlaWdodDtuLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJ2aWV3Qm94XCIsXCIwIDAgXCIrYStcIiBcIitvKSxuLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJ3aWR0aFwiLGEpLG4uc2V0QXR0cmlidXRlTlMobnVsbCxcImhlaWdodFwiLG8pLHkodCksdC5nbHBsb3QuYXhlcy51cGRhdGUodC5heGVzT3B0aW9ucyk7Zm9yKHZhciBzLGw9T2JqZWN0LmtleXModC50cmFjZXMpLGM9bnVsbCxwPXQuZ2xwbG90LnNlbGVjdGlvbixkPTA7ZDxsLmxlbmd0aDsrK2QpXCJza2lwXCIhPT0oZT10LnRyYWNlc1tsW2RdXSkuZGF0YS5ob3ZlcmluZm8mJmUuaGFuZGxlUGljayhwKSYmKGM9ZSksZS5zZXRDb250b3VyTGV2ZWxzJiZlLnNldENvbnRvdXJMZXZlbHMoKTtmdW5jdGlvbiB2KGUscil7dmFyIG49dC5mdWxsU2NlbmVMYXlvdXRbZV07cmV0dXJuIGgudGlja1RleHQobixuLmQybChyKSxcImhvdmVyXCIpLnRleHR9aWYobnVsbCE9PWMpe3ZhciBtPWcodC5nbHBsb3QuY2FtZXJhUGFyYW1zLHAuZGF0YUNvb3JkaW5hdGUpO2U9Yy5kYXRhO3ZhciB4LGI9ci5fZnVsbERhdGFbZS5pbmRleF0sXz1wLmluZGV4LHc9e3hMYWJlbDp2KFwieGF4aXNcIixwLnRyYWNlQ29vcmRpbmF0ZVswXSkseUxhYmVsOnYoXCJ5YXhpc1wiLHAudHJhY2VDb29yZGluYXRlWzFdKSx6TGFiZWw6dihcInpheGlzXCIscC50cmFjZUNvb3JkaW5hdGVbMl0pfSxrPWYuY2FzdEhvdmVyaW5mbyhiLHQuZnVsbExheW91dCxfKSxBPShrfHxcIlwiKS5zcGxpdChcIitcIiksVD1rJiZcImFsbFwiPT09aztiLmhvdmVydGVtcGxhdGV8fFR8fCgtMT09PUEuaW5kZXhPZihcInhcIikmJih3LnhMYWJlbD12b2lkIDApLC0xPT09QS5pbmRleE9mKFwieVwiKSYmKHcueUxhYmVsPXZvaWQgMCksLTE9PT1BLmluZGV4T2YoXCJ6XCIpJiYody56TGFiZWw9dm9pZCAwKSwtMT09PUEuaW5kZXhPZihcInRleHRcIikmJihwLnRleHRMYWJlbD12b2lkIDApLC0xPT09QS5pbmRleE9mKFwibmFtZVwiKSYmKGMubmFtZT12b2lkIDApKTt2YXIgTT1bXTtcImNvbmVcIj09PWUudHlwZXx8XCJzdHJlYW10dWJlXCI9PT1lLnR5cGU/KHcudUxhYmVsPXYoXCJ4YXhpc1wiLHAudHJhY2VDb29yZGluYXRlWzNdKSwoVHx8LTEhPT1BLmluZGV4T2YoXCJ1XCIpKSYmTS5wdXNoKFwidTogXCIrdy51TGFiZWwpLHcudkxhYmVsPXYoXCJ5YXhpc1wiLHAudHJhY2VDb29yZGluYXRlWzRdKSwoVHx8LTEhPT1BLmluZGV4T2YoXCJ2XCIpKSYmTS5wdXNoKFwidjogXCIrdy52TGFiZWwpLHcud0xhYmVsPXYoXCJ6YXhpc1wiLHAudHJhY2VDb29yZGluYXRlWzVdKSwoVHx8LTEhPT1BLmluZGV4T2YoXCJ3XCIpKSYmTS5wdXNoKFwidzogXCIrdy53TGFiZWwpLHcubm9ybUxhYmVsPXAudHJhY2VDb29yZGluYXRlWzZdLnRvUHJlY2lzaW9uKDMpLChUfHwtMSE9PUEuaW5kZXhPZihcIm5vcm1cIikpJiZNLnB1c2goXCJub3JtOiBcIit3Lm5vcm1MYWJlbCksXCJzdHJlYW10dWJlXCI9PT1lLnR5cGUmJih3LmRpdmVyZ2VuY2VMYWJlbD1wLnRyYWNlQ29vcmRpbmF0ZVs3XS50b1ByZWNpc2lvbigzKSwoVHx8LTEhPT1BLmluZGV4T2YoXCJkaXZlcmdlbmNlXCIpKSYmTS5wdXNoKFwiZGl2ZXJnZW5jZTogXCIrdy5kaXZlcmdlbmNlTGFiZWwpKSxwLnRleHRMYWJlbCYmTS5wdXNoKHAudGV4dExhYmVsKSx4PU0uam9pbihcIjxicj5cIikpOlwiaXNvc3VyZmFjZVwiPT09ZS50eXBlfHxcInZvbHVtZVwiPT09ZS50eXBlPyh3LnZhbHVlTGFiZWw9aC50aWNrVGV4dCh0Lm1vY2tBeGlzLHQubW9ja0F4aXMuZDJsKHAudHJhY2VDb29yZGluYXRlWzNdKSxcImhvdmVyXCIpLnRleHQsTS5wdXNoKFwidmFsdWU6IFwiK3cudmFsdWVMYWJlbCkscC50ZXh0TGFiZWwmJk0ucHVzaChwLnRleHRMYWJlbCkseD1NLmpvaW4oXCI8YnI+XCIpKTp4PXAudGV4dExhYmVsO3ZhciBTPXt4OnAudHJhY2VDb29yZGluYXRlWzBdLHk6cC50cmFjZUNvb3JkaW5hdGVbMV0sejpwLnRyYWNlQ29vcmRpbmF0ZVsyXSxkYXRhOmIuX2lucHV0LGZ1bGxEYXRhOmIsY3VydmVOdW1iZXI6Yi5pbmRleCxwb2ludE51bWJlcjpffTtmLmFwcGVuZEFycmF5UG9pbnRWYWx1ZShTLGIsXyksZS5fbW9kdWxlLmV2ZW50RGF0YSYmKFM9Yi5fbW9kdWxlLmV2ZW50RGF0YShTLHAsYix7fSxfKSk7dmFyIEU9e3BvaW50czpbU119O3QuZnVsbFNjZW5lTGF5b3V0LmhvdmVybW9kZSYmZi5sb25lSG92ZXIoe3RyYWNlOmIseDooLjUrLjUqbVswXS9tWzNdKSphLHk6KC41LS41Km1bMV0vbVszXSkqbyx4TGFiZWw6dy54TGFiZWwseUxhYmVsOncueUxhYmVsLHpMYWJlbDp3LnpMYWJlbCx0ZXh0OngsbmFtZTpjLm5hbWUsY29sb3I6Zi5jYXN0SG92ZXJPcHRpb24oYixfLFwiYmdjb2xvclwiKXx8Yy5jb2xvcixib3JkZXJDb2xvcjpmLmNhc3RIb3Zlck9wdGlvbihiLF8sXCJib3JkZXJjb2xvclwiKSxmb250RmFtaWx5OmYuY2FzdEhvdmVyT3B0aW9uKGIsXyxcImZvbnQuZmFtaWx5XCIpLGZvbnRTaXplOmYuY2FzdEhvdmVyT3B0aW9uKGIsXyxcImZvbnQuc2l6ZVwiKSxmb250Q29sb3I6Zi5jYXN0SG92ZXJPcHRpb24oYixfLFwiZm9udC5jb2xvclwiKSxuYW1lTGVuZ3RoOmYuY2FzdEhvdmVyT3B0aW9uKGIsXyxcIm5hbWVsZW5ndGhcIiksdGV4dEFsaWduOmYuY2FzdEhvdmVyT3B0aW9uKGIsXyxcImFsaWduXCIpLGhvdmVydGVtcGxhdGU6dS5jYXN0T3B0aW9uKGIsXyxcImhvdmVydGVtcGxhdGVcIiksaG92ZXJ0ZW1wbGF0ZUxhYmVsczp1LmV4dGVuZEZsYXQoe30sUyx3KSxldmVudERhdGE6W1NdfSx7Y29udGFpbmVyOm4sZ2Q6cn0pLHAuYnV0dG9ucyYmcC5kaXN0YW5jZTw1P3IuZW1pdChcInBsb3RseV9jbGlja1wiLEUpOnIuZW1pdChcInBsb3RseV9ob3ZlclwiLEUpLHM9RX1lbHNlIGYubG9uZVVuaG92ZXIobiksci5lbWl0KFwicGxvdGx5X3VuaG92ZXJcIixzKTt0LmRyYXdBbm5vdGF0aW9ucyh0KX0uYmluZChudWxsLHQpLHQudHJhY2VzPXt9LHQubWFrZTR0aERpbWVuc2lvbigpLCEwfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLG49dC5jb250YWluZXI7dGhpcy5ncmFwaERpdj10LmdyYXBoRGl2O3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXCJzdmdcIik7aS5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsaS5zdHlsZS50b3A9aS5zdHlsZS5sZWZ0PVwiMHB4XCIsaS5zdHlsZS53aWR0aD1pLnN0eWxlLmhlaWdodD1cIjEwMCVcIixpLnN0eWxlW1wiei1pbmRleFwiXT0yMCxpLnN0eWxlW1wicG9pbnRlci1ldmVudHNcIl09XCJub25lXCIsci5hcHBlbmRDaGlsZChpKSx0aGlzLnN2Z0NvbnRhaW5lcj1pLHIuaWQ9dC5pZCxyLnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixyLnN0eWxlLnRvcD1yLnN0eWxlLmxlZnQ9XCIwcHhcIixyLnN0eWxlLndpZHRoPXIuc3R5bGUuaGVpZ2h0PVwiMTAwJVwiLG4uYXBwZW5kQ2hpbGQociksdGhpcy5mdWxsTGF5b3V0PWUsdGhpcy5pZD10LmlkfHxcInNjZW5lXCIsdGhpcy5mdWxsU2NlbmVMYXlvdXQ9ZVt0aGlzLmlkXSx0aGlzLnBsb3RBcmdzPVtbXSx7fSx7fV0sdGhpcy5heGVzT3B0aW9ucz12KGUsZVt0aGlzLmlkXSksdGhpcy5zcGlrZU9wdGlvbnM9bShlW3RoaXMuaWRdKSx0aGlzLmNvbnRhaW5lcj1yLHRoaXMuc3RhdGljTW9kZT0hIXQuc3RhdGljUGxvdCx0aGlzLnBpeGVsUmF0aW89dGhpcy5waXhlbFJhdGlvfHx0LnBsb3RHbFBpeGVsUmF0aW98fDIsdGhpcy5kYXRhU2NhbGU9WzEsMSwxXSx0aGlzLmNvbnRvdXJMZXZlbHM9W1tdLFtdLFtdXSx0aGlzLmNvbnZlcnRBbm5vdGF0aW9ucz1jLmdldENvbXBvbmVudE1ldGhvZChcImFubm90YXRpb25zM2RcIixcImNvbnZlcnRcIiksdGhpcy5kcmF3QW5ub3RhdGlvbnM9Yy5nZXRDb21wb25lbnRNZXRob2QoXCJhbm5vdGF0aW9uczNkXCIsXCJkcmF3XCIpLHgodGhpcyx0aGlzLnBpeGVsUmF0aW8pfXZhciBfPWIucHJvdG90eXBlO18uaW5pdGlhbGl6ZUdMQ2FtZXJhPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5mdWxsU2NlbmVMYXlvdXQuY2FtZXJhLGU9XCJvcnRob2dyYXBoaWNcIj09PXQucHJvamVjdGlvbi50eXBlO3RoaXMuY2FtZXJhPWEodGhpcy5jb250YWluZXIse2NlbnRlcjpbdC5jZW50ZXIueCx0LmNlbnRlci55LHQuY2VudGVyLnpdLGV5ZTpbdC5leWUueCx0LmV5ZS55LHQuZXllLnpdLHVwOlt0LnVwLngsdC51cC55LHQudXAuel0sX29ydGhvOmUsem9vbU1pbjouMDEsem9vbU1heDoxMDAsbW9kZTpcIm9yYml0XCJ9KX0sXy5yZWNvdmVyQ29udGV4dD1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLmdscGxvdC5nbCxyPXRoaXMuZ2xwbG90LmNhbnZhcyxuPXRoaXMuZ2xwbG90LmNhbWVyYSxpPXRoaXMuZ2xwbG90LnBpeGVsUmF0aW87dGhpcy5nbHBsb3QuZGlzcG9zZSgpLHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiBhKCl7ZS5pc0NvbnRleHRMb3N0KCk/cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGEpOngodCxuLGkscik/dC5wbG90LmFwcGx5KHQsdC5wbG90QXJncyk6dS5lcnJvcihcIkNhdGFzdHJvcGhpYyBhbmQgdW5yZWNvdmVyYWJsZSBXZWJHTCBlcnJvci4gQ29udGV4dCBsb3N0LlwiKX0pfTt2YXIgdz1bXCJ4YXhpc1wiLFwieWF4aXNcIixcInpheGlzXCJdO2Z1bmN0aW9uIGsodCxlLHIpe2Zvcih2YXIgbj10LmZ1bGxTY2VuZUxheW91dCxpPTA7aTwzO2krKyl7dmFyIGE9d1tpXSxvPWEuY2hhckF0KDApLHM9blthXSxsPWVbb10sYz1lW28rXCJjYWxlbmRhclwiXSxoPWVbXCJfXCIrbytcImxlbmd0aFwiXTtpZih1LmlzQXJyYXlPclR5cGVkQXJyYXkobCkpZm9yKHZhciBmLHA9MDtwPChofHxsLmxlbmd0aCk7cCsrKWlmKHUuaXNBcnJheU9yVHlwZWRBcnJheShsW3BdKSlmb3IodmFyIGQ9MDtkPGxbcF0ubGVuZ3RoOysrZClmPXMuZDJsKGxbcF1bZF0sMCxjKSwhaXNOYU4oZikmJmlzRmluaXRlKGYpJiYoclswXVtpXT1NYXRoLm1pbihyWzBdW2ldLGYpLHJbMV1baV09TWF0aC5tYXgoclsxXVtpXSxmKSk7ZWxzZSBmPXMuZDJsKGxbcF0sMCxjKSwhaXNOYU4oZikmJmlzRmluaXRlKGYpJiYoclswXVtpXT1NYXRoLm1pbihyWzBdW2ldLGYpLHJbMV1baV09TWF0aC5tYXgoclsxXVtpXSxmKSk7ZWxzZSByWzBdW2ldPU1hdGgubWluKHJbMF1baV0sMCksclsxXVtpXT1NYXRoLm1heChyWzFdW2ldLGgtMSl9fWZ1bmN0aW9uIEEodCl7cmV0dXJue3VwOnt4OnQudXBbMF0seTp0LnVwWzFdLHo6dC51cFsyXX0sY2VudGVyOnt4OnQuY2VudGVyWzBdLHk6dC5jZW50ZXJbMV0sejp0LmNlbnRlclsyXX0sZXllOnt4OnQuZXllWzBdLHk6dC5leWVbMV0sejp0LmV5ZVsyXX0scHJvamVjdGlvbjp7dHlwZTohMD09PXQuX29ydGhvP1wib3J0aG9ncmFwaGljXCI6XCJwZXJzcGVjdGl2ZVwifX19Xy5wbG90PWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLnBsb3RBcmdzPVt0LGUscl0sIXRoaXMuZ2xwbG90LmNvbnRleHRMb3N0KXt2YXIgbixpLGEsbyxzLGwsYz1lW3RoaXMuaWRdLHU9clt0aGlzLmlkXTtjLmJnY29sb3I/dGhpcy5nbHBsb3QuY2xlYXJDb2xvcj1wKGMuYmdjb2xvcik6dGhpcy5nbHBsb3QuY2xlYXJDb2xvcj1bMCwwLDAsMF0sdGhpcy5nbHBsb3Quc25hcFRvRGF0YT0hMCx0aGlzLmZ1bGxMYXlvdXQ9ZSx0aGlzLmZ1bGxTY2VuZUxheW91dD1jLHRoaXMuZ2xwbG90TGF5b3V0PWMsdGhpcy5heGVzT3B0aW9ucy5tZXJnZShlLGMpLHRoaXMuc3Bpa2VPcHRpb25zLm1lcmdlKGMpLHRoaXMuc2V0Q2FtZXJhKGMuY2FtZXJhKSx0aGlzLnVwZGF0ZUZ4KGMuZHJhZ21vZGUsYy5ob3Zlcm1vZGUpLHRoaXMuY2FtZXJhLmVuYWJsZVdoZWVsPXRoaXMuZ3JhcGhEaXYuX2NvbnRleHQuX3Njcm9sbFpvb20uZ2wzZCx0aGlzLmdscGxvdC51cGRhdGUoe30pLHRoaXMuc2V0Q29udmVydChzKSx0P0FycmF5LmlzQXJyYXkodCl8fCh0PVt0XSk6dD1bXTt2YXIgaD1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXTtmb3IoYT0wO2E8dC5sZW5ndGg7KythKSEwPT09KG49dFthXSkudmlzaWJsZSYmayh0aGlzLG4saCk7IWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuZnVsbFNjZW5lTGF5b3V0LG49ci5hbm5vdGF0aW9uc3x8W10saT0wO2k8MztpKyspZm9yKHZhciBhPXdbaV0sbz1hLmNoYXJBdCgwKSxzPXJbYV0sbD0wO2w8bi5sZW5ndGg7bCsrKXt2YXIgYz1uW2xdO2lmKGMudmlzaWJsZSl7dmFyIHU9cy5yMmwoY1tvXSk7IWlzTmFOKHUpJiZpc0Zpbml0ZSh1KSYmKGVbMF1baV09TWF0aC5taW4oZVswXVtpXSx1KSxlWzFdW2ldPU1hdGgubWF4KGVbMV1baV0sdSkpfX19KHRoaXMsaCk7dmFyIGY9WzEsMSwxXTtmb3Iobz0wO288MzsrK28paFsxXVtvXT09PWhbMF1bb10/ZltvXT0xOmZbb109MS8oaFsxXVtvXS1oWzBdW29dKTtmb3IodGhpcy5kYXRhU2NhbGU9Zix0aGlzLmNvbnZlcnRBbm5vdGF0aW9ucyh0aGlzKSxhPTA7YTx0Lmxlbmd0aDsrK2EpITA9PT0obj10W2FdKS52aXNpYmxlJiYoKGk9dGhpcy50cmFjZXNbbi51aWRdKT9pLmRhdGEudHlwZT09PW4udHlwZT9pLnVwZGF0ZShuKTooaS5kaXNwb3NlKCksaT1uLl9tb2R1bGUucGxvdCh0aGlzLG4pLHRoaXMudHJhY2VzW24udWlkXT1pKTooaT1uLl9tb2R1bGUucGxvdCh0aGlzLG4pLHRoaXMudHJhY2VzW24udWlkXT1pKSxpLm5hbWU9bi5uYW1lKTt2YXIgZD1PYmplY3Qua2V5cyh0aGlzLnRyYWNlcyk7dDpmb3IoYT0wO2E8ZC5sZW5ndGg7KythKXtmb3Iobz0wO288dC5sZW5ndGg7KytvKWlmKHRbb10udWlkPT09ZFthXSYmITA9PT10W29dLnZpc2libGUpY29udGludWUgdDsoaT10aGlzLnRyYWNlc1tkW2FdXSkuZGlzcG9zZSgpLGRlbGV0ZSB0aGlzLnRyYWNlc1tkW2FdXX10aGlzLmdscGxvdC5vYmplY3RzLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fdHJhY2UuZGF0YS5pbmRleC1lLl90cmFjZS5kYXRhLmluZGV4fSk7dmFyIGc9W1swLDAsMF0sWzAsMCwwXV0sdj1bXSxtPXt9O2ZvcihhPTA7YTwzOysrYSl7aWYoKGw9KHM9Y1t3W2FdXSkudHlwZSlpbiBtPyhtW2xdLmFjYyo9ZlthXSxtW2xdLmNvdW50Kz0xKTptW2xdPXthY2M6ZlthXSxjb3VudDoxfSxzLmF1dG9yYW5nZSl7Z1swXVthXT0xLzAsZ1sxXVthXT0tMS8wO3ZhciB5PXRoaXMuZ2xwbG90Lm9iamVjdHMseD10aGlzLmZ1bGxTY2VuZUxheW91dC5hbm5vdGF0aW9uc3x8W10sYj1zLl9uYW1lLmNoYXJBdCgwKTtmb3Iobz0wO288eS5sZW5ndGg7bysrKXt2YXIgXz15W29dLEE9Xy5ib3VuZHMsVD1fLl90cmFjZS5kYXRhLl9wYWR8fDA7XCJFcnJvckJhcnNcIj09PV8uY29uc3RydWN0b3IubmFtZSYmcy5fbG93ZXJMb2dFcnJvckJvdW5kP2dbMF1bYV09TWF0aC5taW4oZ1swXVthXSxzLl9sb3dlckxvZ0Vycm9yQm91bmQpOmdbMF1bYV09TWF0aC5taW4oZ1swXVthXSxBWzBdW2FdL2ZbYV0tVCksZ1sxXVthXT1NYXRoLm1heChnWzFdW2FdLEFbMV1bYV0vZlthXStUKX1mb3Iobz0wO288eC5sZW5ndGg7bysrKXt2YXIgTT14W29dO2lmKE0udmlzaWJsZSl7dmFyIFM9cy5yMmwoTVtiXSk7Z1swXVthXT1NYXRoLm1pbihnWzBdW2FdLFMpLGdbMV1bYV09TWF0aC5tYXgoZ1sxXVthXSxTKX19aWYoXCJyYW5nZW1vZGVcImluIHMmJlwidG96ZXJvXCI9PT1zLnJhbmdlbW9kZSYmKGdbMF1bYV09TWF0aC5taW4oZ1swXVthXSwwKSxnWzFdW2FdPU1hdGgubWF4KGdbMV1bYV0sMCkpLGdbMF1bYV0+Z1sxXVthXSlnWzBdW2FdPS0xLGdbMV1bYV09MTtlbHNle3ZhciBFPWdbMV1bYV0tZ1swXVthXTtnWzBdW2FdLT1FLzMyLGdbMV1bYV0rPUUvMzJ9aWYoXCJyZXZlcnNlZFwiPT09cy5hdXRvcmFuZ2Upe3ZhciBDPWdbMF1bYV07Z1swXVthXT1nWzFdW2FdLGdbMV1bYV09Q319ZWxzZXt2YXIgTD1zLnJhbmdlO2dbMF1bYV09cy5yMmwoTFswXSksZ1sxXVthXT1zLnIybChMWzFdKX1nWzBdW2FdPT09Z1sxXVthXSYmKGdbMF1bYV0tPTEsZ1sxXVthXSs9MSksdlthXT1nWzFdW2FdLWdbMF1bYV0sdGhpcy5nbHBsb3QuYm91bmRzWzBdW2FdPWdbMF1bYV0qZlthXSx0aGlzLmdscGxvdC5ib3VuZHNbMV1bYV09Z1sxXVthXSpmW2FdfXZhciB6PVsxLDEsMV07Zm9yKGE9MDthPDM7KythKXt2YXIgTz1tW2w9KHM9Y1t3W2FdXSkudHlwZV07elthXT1NYXRoLnBvdyhPLmFjYywxL08uY291bnQpL2ZbYV19dmFyIEk7aWYoXCJhdXRvXCI9PT1jLmFzcGVjdG1vZGUpST1NYXRoLm1heC5hcHBseShudWxsLHopL01hdGgubWluLmFwcGx5KG51bGwseik8PTQ/ejpbMSwxLDFdO2Vsc2UgaWYoXCJjdWJlXCI9PT1jLmFzcGVjdG1vZGUpST1bMSwxLDFdO2Vsc2UgaWYoXCJkYXRhXCI9PT1jLmFzcGVjdG1vZGUpST16O2Vsc2V7aWYoXCJtYW51YWxcIiE9PWMuYXNwZWN0bW9kZSl0aHJvdyBuZXcgRXJyb3IoXCJzY2VuZS5qcyBhc3BlY3RSYXRpbyB3YXMgbm90IG9uZSBvZiB0aGUgZW51bWVyYXRlZCB0eXBlc1wiKTt2YXIgRD1jLmFzcGVjdHJhdGlvO0k9W0QueCxELnksRC56XX1jLmFzcGVjdHJhdGlvLng9dS5hc3BlY3RyYXRpby54PUlbMF0sYy5hc3BlY3RyYXRpby55PXUuYXNwZWN0cmF0aW8ueT1JWzFdLGMuYXNwZWN0cmF0aW8uej11LmFzcGVjdHJhdGlvLno9SVsyXSx0aGlzLmdscGxvdC5hc3BlY3Q9STt2YXIgUD1jLmRvbWFpbnx8bnVsbCxSPWUuX3NpemV8fG51bGw7aWYoUCYmUil7dmFyIEY9dGhpcy5jb250YWluZXIuc3R5bGU7Ri5wb3NpdGlvbj1cImFic29sdXRlXCIsRi5sZWZ0PVIubCtQLnhbMF0qUi53K1wicHhcIixGLnRvcD1SLnQrKDEtUC55WzFdKSpSLmgrXCJweFwiLEYud2lkdGg9Ui53KihQLnhbMV0tUC54WzBdKStcInB4XCIsRi5oZWlnaHQ9Ui5oKihQLnlbMV0tUC55WzBdKStcInB4XCJ9dGhpcy5nbHBsb3QucmVkcmF3KCl9fSxfLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmdscGxvdCYmKHRoaXMuY2FtZXJhLm1vdXNlTGlzdGVuZXIuZW5hYmxlZD0hMSx0aGlzLmNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKFwid2hlZWxcIix0aGlzLmNhbWVyYS53aGVlbExpc3RlbmVyKSx0aGlzLmNhbWVyYT10aGlzLmdscGxvdC5jYW1lcmE9bnVsbCx0aGlzLmdscGxvdC5kaXNwb3NlKCksdGhpcy5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lciksdGhpcy5nbHBsb3Q9bnVsbCl9LF8uZ2V0Q2FtZXJhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2xwbG90LmNhbWVyYS52aWV3LnJlY2FsY01hdHJpeCh0aGlzLmNhbWVyYS52aWV3Lmxhc3RUKCkpLEEodGhpcy5nbHBsb3QuY2FtZXJhKX0sXy5zZXRDYW1lcmE9ZnVuY3Rpb24odCl7dmFyIGU7dGhpcy5nbHBsb3QuY2FtZXJhLmxvb2tBdC5hcHBseSh0aGlzLFtbKGU9dCkuZXllLngsZS5leWUueSxlLmV5ZS56XSxbZS5jZW50ZXIueCxlLmNlbnRlci55LGUuY2VudGVyLnpdLFtlLnVwLngsZS51cC55LGUudXAuel1dKTt2YXIgcj1cIm9ydGhvZ3JhcGhpY1wiPT09dC5wcm9qZWN0aW9uLnR5cGU7aWYociE9PXRoaXMuZ2xwbG90LmNhbWVyYS5fb3J0aG8pe3RoaXMuZ2xwbG90LnJlZHJhdygpO3ZhciBuPXRoaXMuZ2xwbG90LnBpeGVsUmF0aW8saT10aGlzLmdscGxvdC5jbGVhckNvbG9yO3RoaXMuZ2xwbG90LmdsLmNsZWFyQ29sb3IoaVswXSxpWzFdLGlbMl0saVszXSksdGhpcy5nbHBsb3QuZ2wuY2xlYXIodGhpcy5nbHBsb3QuZ2wuREVQVEhfQlVGRkVSX0JJVHx0aGlzLmdscGxvdC5nbC5DT0xPUl9CVUZGRVJfQklUKSx0aGlzLmdscGxvdC5kaXNwb3NlKCkseCh0aGlzLG4pLHRoaXMuZ2xwbG90LmNhbWVyYS5fb3J0aG89cn19LF8uc2F2ZUNhbWVyYT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZ1bGxMYXlvdXQscj10aGlzLmdldENhbWVyYSgpLG49dS5uZXN0ZWRQcm9wZXJ0eSh0LHRoaXMuaWQrXCIuY2FtZXJhXCIpLGk9bi5nZXQoKSxhPSExO2Z1bmN0aW9uIG8odCxlLHIsbil7dmFyIGk9W1widXBcIixcImNlbnRlclwiLFwiZXllXCJdLGE9W1wieFwiLFwieVwiLFwielwiXTtyZXR1cm4gZVtpW3JdXSYmdFtpW3JdXVthW25dXT09PWVbaVtyXV1bYVtuXV19aWYodm9pZCAwPT09aSlhPSEwO2Vsc2V7Zm9yKHZhciBzPTA7czwzO3MrKylmb3IodmFyIGw9MDtsPDM7bCsrKWlmKCFvKHIsaSxzLGwpKXthPSEwO2JyZWFrfSghaS5wcm9qZWN0aW9ufHxyLnByb2plY3Rpb24mJnIucHJvamVjdGlvbi50eXBlIT09aS5wcm9qZWN0aW9uLnR5cGUpJiYoYT0hMCl9aWYoYSl7dmFyIGg9e307aFt0aGlzLmlkK1wiLmNhbWVyYVwiXT1pLGMuY2FsbChcIl9zdG9yZURpcmVjdEdVSUVkaXRcIix0LGUuX3ByZUdVSSxoKSxuLnNldChyKSx1Lm5lc3RlZFByb3BlcnR5KGUsdGhpcy5pZCtcIi5jYW1lcmFcIikuc2V0KHIpfXJldHVybiBhfSxfLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jYW1lcmE7aWYocilpZihcIm9yYml0XCI9PT10KXIubW9kZT1cIm9yYml0XCIsci5rZXlCaW5kaW5nTW9kZT1cInJvdGF0ZVwiO2Vsc2UgaWYoXCJ0dXJudGFibGVcIj09PXQpe3IudXA9WzAsMCwxXSxyLm1vZGU9XCJ0dXJudGFibGVcIixyLmtleUJpbmRpbmdNb2RlPVwicm90YXRlXCI7dmFyIG49dGhpcy5ncmFwaERpdixpPW4uX2Z1bGxMYXlvdXQsYT10aGlzLmZ1bGxTY2VuZUxheW91dC5jYW1lcmEsbz1hLnVwLngscz1hLnVwLnksbD1hLnVwLno7aWYobC9NYXRoLnNxcnQobypvK3MqcytsKmwpPC45OTkpe3ZhciBoPXRoaXMuaWQrXCIuY2FtZXJhLnVwXCIsZj17eDowLHk6MCx6OjF9LHA9e307cFtoXT1mO3ZhciBkPW4ubGF5b3V0O2MuY2FsbChcIl9zdG9yZURpcmVjdEdVSUVkaXRcIixkLGkuX3ByZUdVSSxwKSxhLnVwPWYsdS5uZXN0ZWRQcm9wZXJ0eShkLGgpLnNldChmKX19ZWxzZSByLmtleUJpbmRpbmdNb2RlPXQ7dGhpcy5mdWxsU2NlbmVMYXlvdXQuaG92ZXJtb2RlPWV9LF8udG9JbWFnZT1mdW5jdGlvbih0KXt0fHwodD1cInBuZ1wiKSx0aGlzLnN0YXRpY01vZGUmJnRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKG4pLHRoaXMuZ2xwbG90LnJlZHJhdygpO3ZhciBlPXRoaXMuZ2xwbG90LmdsLHI9ZS5kcmF3aW5nQnVmZmVyV2lkdGgsaT1lLmRyYXdpbmdCdWZmZXJIZWlnaHQ7ZS5iaW5kRnJhbWVidWZmZXIoZS5GUkFNRUJVRkZFUixudWxsKTt2YXIgYT1uZXcgVWludDhBcnJheShyKmkqNCk7ZS5yZWFkUGl4ZWxzKDAsMCxyLGksZS5SR0JBLGUuVU5TSUdORURfQllURSxhKTtmb3IodmFyIG89MCxzPWktMTtvPHM7KytvLC0tcylmb3IodmFyIGw9MDtsPHI7KytsKWZvcih2YXIgYz0wO2M8NDsrK2Mpe3ZhciB1PWFbNCoocipvK2wpK2NdO2FbNCoocipvK2wpK2NdPWFbNCoocipzK2wpK2NdLGFbNCoocipzK2wpK2NdPXV9dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtoLndpZHRoPXIsaC5oZWlnaHQ9aTt2YXIgZixwPWguZ2V0Q29udGV4dChcIjJkXCIpLGQ9cC5jcmVhdGVJbWFnZURhdGEocixpKTtzd2l0Y2goZC5kYXRhLnNldChhKSxwLnB1dEltYWdlRGF0YShkLDAsMCksdCl7Y2FzZVwianBlZ1wiOmY9aC50b0RhdGFVUkwoXCJpbWFnZS9qcGVnXCIpO2JyZWFrO2Nhc2VcIndlYnBcIjpmPWgudG9EYXRhVVJMKFwiaW1hZ2Uvd2VicFwiKTticmVhaztkZWZhdWx0OmY9aC50b0RhdGFVUkwoXCJpbWFnZS9wbmdcIil9cmV0dXJuIHRoaXMuc3RhdGljTW9kZSYmdGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQobiksZn0sXy5zZXRDb252ZXJ0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDwzO3QrKyl7dmFyIGU9dGhpcy5mdWxsU2NlbmVMYXlvdXRbd1t0XV07aC5zZXRDb252ZXJ0KGUsdGhpcy5mdWxsTGF5b3V0KSxlLnNldFNjYWxlPXUubm9vcH19LF8ubWFrZTR0aERpbWVuc2lvbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQ7dGhpcy5tb2NrQXhpcz17dHlwZTpcImxpbmVhclwiLHNob3dleHBvbmVudDpcImFsbFwiLGV4cG9uZW50Zm9ybWF0OlwiQlwifSxoLnNldENvbnZlcnQodGhpcy5tb2NrQXhpcyx0KX0sZS5leHBvcnRzPWJ9LHtcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvc2hvd19ub193ZWJnbF9tc2dcIjo3MjIsXCIuLi8uLi9saWIvc3RyMnJnYmFycmF5XCI6NzI0LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vbGF5b3V0L2NvbnZlcnRcIjo3OTMsXCIuL2xheW91dC9zcGlrZXNcIjo3OTYsXCIuL2xheW91dC90aWNrX21hcmtzXCI6Nzk3LFwiLi9wcm9qZWN0XCI6Nzk4LFwiZ2wtcGxvdDNkXCI6Mjg3LFwiaGFzLXBhc3NpdmUtZXZlbnRzXCI6NDA0LFwid2ViZ2wtY29udGV4dFwiOjU0MX1dLDgwMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtuPW58fHQubGVuZ3RoO2Zvcih2YXIgaT1uZXcgQXJyYXkobiksYT0wO2E8bjthKyspaVthXT1bdFthXSxlW2FdLHJbYV1dO3JldHVybiBpfX0se31dLDgwMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2ZvbnRfYXR0cmlidXRlc1wiKSxpPXQoXCIuL2FuaW1hdGlvbl9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvbGF5b3V0X2F0dHJpYnV0ZXNcIikscz10KFwiLi9wYWRfYXR0cmlidXRlc1wiKSxsPXQoXCIuLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsYz1uKHtlZGl0VHlwZTpcImNhbGNcIn0pO2MuZmFtaWx5LmRmbHQ9J1wiT3BlbiBTYW5zXCIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxjLnNpemUuZGZsdD0xMixjLmNvbG9yLmRmbHQ9YS5kZWZhdWx0TGluZSxlLmV4cG9ydHM9e2ZvbnQ6Yyx0aXRsZTp7dGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwibGF5b3V0c3R5bGVcIn0sZm9udDpuKHtlZGl0VHlwZTpcImxheW91dHN0eWxlXCJ9KSx4cmVmOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLGRmbHQ6XCJjb250YWluZXJcIix2YWx1ZXM6W1wiY29udGFpbmVyXCIsXCJwYXBlclwiXSxlZGl0VHlwZTpcImxheW91dHN0eWxlXCJ9LHlyZWY6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsZGZsdDpcImNvbnRhaW5lclwiLHZhbHVlczpbXCJjb250YWluZXJcIixcInBhcGVyXCJdLGVkaXRUeXBlOlwibGF5b3V0c3R5bGVcIn0seDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6LjUsZWRpdFR5cGU6XCJsYXlvdXRzdHlsZVwifSx5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDpcImF1dG9cIixlZGl0VHlwZTpcImxheW91dHN0eWxlXCJ9LHhhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsZGZsdDpcImF1dG9cIix2YWx1ZXM6W1wiYXV0b1wiLFwibGVmdFwiLFwiY2VudGVyXCIsXCJyaWdodFwiXSxlZGl0VHlwZTpcImxheW91dHN0eWxlXCJ9LHlhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsZGZsdDpcImF1dG9cIix2YWx1ZXM6W1wiYXV0b1wiLFwidG9wXCIsXCJtaWRkbGVcIixcImJvdHRvbVwiXSxlZGl0VHlwZTpcImxheW91dHN0eWxlXCJ9LHBhZDpsKHMoe2VkaXRUeXBlOlwibGF5b3V0c3R5bGVcIn0pLHt9KSxlZGl0VHlwZTpcImxheW91dHN0eWxlXCJ9LGF1dG9zaXplOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEsZWRpdFR5cGU6XCJub25lXCJ9LHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjEwLGRmbHQ6NzAwLGVkaXRUeXBlOlwicGxvdFwifSxoZWlnaHQ6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MTAsZGZsdDo0NTAsZWRpdFR5cGU6XCJwbG90XCJ9LG1hcmdpbjp7bDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6ODAsZWRpdFR5cGU6XCJwbG90XCJ9LHI6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjgwLGVkaXRUeXBlOlwicGxvdFwifSx0Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxMDAsZWRpdFR5cGU6XCJwbG90XCJ9LGI6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjgwLGVkaXRUeXBlOlwicGxvdFwifSxwYWQ6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6XCJwbG90XCJ9LGF1dG9leHBhbmQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcInBsb3RcIn0sZWRpdFR5cGU6XCJwbG90XCJ9LHBhcGVyX2JnY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6YS5iYWNrZ3JvdW5kLGVkaXRUeXBlOlwicGxvdFwifSxwbG90X2JnY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6YS5iYWNrZ3JvdW5kLGVkaXRUeXBlOlwibGF5b3V0c3R5bGVcIn0sc2VwYXJhdG9yczp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwicGxvdFwifSxoaWRlc291cmNlczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwicGxvdFwifSxzaG93bGVnZW5kOnt2YWxUeXBlOlwiYm9vbGVhblwiLGVkaXRUeXBlOlwibGVnZW5kXCJ9LGNvbG9yd2F5Ont2YWxUeXBlOlwiY29sb3JsaXN0XCIsZGZsdDphLmRlZmF1bHRzLGVkaXRUeXBlOlwiY2FsY1wifSxjb2xvcnNjYWxlOm8sZGF0YXJldmlzaW9uOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHVpcmV2aXNpb246e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcIm5vbmVcIn0sZWRpdHJldmlzaW9uOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJub25lXCJ9LHNlbGVjdGlvbnJldmlzaW9uOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJub25lXCJ9LHRlbXBsYXRlOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LG1vZGViYXI6e29yaWVudGF0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ2XCIsXCJoXCJdLGRmbHQ6XCJoXCIsZWRpdFR5cGU6XCJtb2RlYmFyXCJ9LGJnY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwibW9kZWJhclwifSxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJtb2RlYmFyXCJ9LGFjdGl2ZWNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcIm1vZGViYXJcIn0sdWlyZXZpc2lvbjp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwibm9uZVwifSxlZGl0VHlwZTpcIm1vZGViYXJcIn0sbWV0YTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcInBsb3RcIn0sdHJhbnNpdGlvbjpsKHt9LGkudHJhbnNpdGlvbix7ZWRpdFR5cGU6XCJub25lXCJ9KSxfZGVwcmVjYXRlZDp7dGl0bGU6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcImxheW91dHN0eWxlXCJ9LHRpdGxlZm9udDpuKHtlZGl0VHlwZTpcImxheW91dHN0eWxlXCJ9KX19fSx7XCIuLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIjo1NzcsXCIuLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvbGF5b3V0X2F0dHJpYnV0ZXNcIjo1OTEsXCIuLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi9hbmltYXRpb25fYXR0cmlidXRlc1wiOjc0NCxcIi4vZm9udF9hdHRyaWJ1dGVzXCI6Nzc1LFwiLi9wYWRfYXR0cmlidXRlc1wiOjgwOX1dLDgwMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17cmVxdWlyZWRWZXJzaW9uOlwiMC40NS4wXCIsc3R5bGVVcmxQcmVmaXg6XCJtYXBib3g6Ly9zdHlsZXMvbWFwYm94L1wiLHN0eWxlVXJsU3VmZml4OlwidjlcIixjb250cm9sQ29udGFpbmVyQ2xhc3NOYW1lOlwibWFwYm94Z2wtY29udHJvbC1jb250YWluZXJcIix3cm9uZ1ZlcnNpb25FcnJvck1zZzpbXCJZb3VyIGN1c3RvbSBwbG90bHkuanMgYnVuZGxlIGlzIG5vdCB1c2luZyB0aGUgY29ycmVjdCBtYXBib3gtZ2wgdmVyc2lvblwiLFwiUGxlYXNlIGluc3RhbGwgbWFwYm94LWdsQDAuNDUuMC5cIl0uam9pbihcIlxcblwiKSxub0FjY2Vzc1Rva2VuRXJyb3JNc2c6W1wiTWlzc2luZyBNYXBib3ggYWNjZXNzIHRva2VuLlwiLFwiTWFwYm94IHRyYWNlIHR5cGUgcmVxdWlyZSBhIE1hcGJveCBhY2Nlc3MgdG9rZW4gdG8gYmUgcmVnaXN0ZXJlZC5cIixcIkZvciBleGFtcGxlOlwiLFwiICBQbG90bHkucGxvdChnZCwgZGF0YSwgbGF5b3V0LCB7IG1hcGJveEFjY2Vzc1Rva2VuOiAnbXktYWNjZXNzLXRva2VuJyB9KTtcIixcIk1vcmUgaW5mbyBoZXJlOiBodHRwczovL3d3dy5tYXBib3guY29tL2hlbHAvZGVmaW5lLWFjY2Vzcy10b2tlbi9cIl0uam9pbihcIlxcblwiKSxtYXBPbkVycm9yTXNnOlwiTWFwYm94IGVycm9yLlwiLHN0eWxlUnVsZXM6e21hcDpcIm92ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTtcIixcIm1pc3NpbmctY3NzXCI6XCJkaXNwbGF5Om5vbmVcIn19fSx7fV0sODAzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnNwbGl0KFwiIFwiKSxpPXJbMF0sYT1yWzFdLG89bi5pc0FycmF5T3JUeXBlZEFycmF5KGUpP24ubWVhbihlKTplLHM9LjUrby8xMDAsbD0xLjUrby8xMDAsYz1bXCJcIixcIlwiXSx1PVswLDBdO3N3aXRjaChpKXtjYXNlXCJ0b3BcIjpjWzBdPVwidG9wXCIsdVsxXT0tbDticmVhaztjYXNlXCJib3R0b21cIjpjWzBdPVwiYm90dG9tXCIsdVsxXT1sfXN3aXRjaChhKXtjYXNlXCJsZWZ0XCI6Y1sxXT1cInJpZ2h0XCIsdVswXT0tczticmVhaztjYXNlXCJyaWdodFwiOmNbMV09XCJsZWZ0XCIsdVswXT1zfXJldHVybnthbmNob3I6Y1swXSYmY1sxXT9jLmpvaW4oXCItXCIpOmNbMF0/Y1swXTpjWzFdP2NbMV06XCJjZW50ZXJcIixvZmZzZXQ6dX19fSx7XCIuLi8uLi9saWJcIjo3MDF9XSw4MDQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwibWFwYm94LWdsXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9wbG90cy9nZXRfZGF0YVwiKS5nZXRTdWJwbG90Q2FsY0RhdGEsbz10KFwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIikscz10KFwiLi9tYXBib3hcIiksbD10KFwiLi9jb25zdGFudHNcIik7Zm9yKHZhciBjIGluIGwuc3R5bGVSdWxlcylpLmFkZFN0eWxlUnVsZShcIi5tYXBib3hnbC1cIitjLGwuc3R5bGVSdWxlc1tjXSk7ci5uYW1lPVwibWFwYm94XCIsci5hdHRyPVwic3VicGxvdFwiLHIuaWRSb290PVwibWFwYm94XCIsci5pZFJlZ2V4PXIuYXR0clJlZ2V4PWkuY291bnRlclJlZ2V4KFwibWFwYm94XCIpLHIuYXR0cmlidXRlcz17c3VicGxvdDp7dmFsVHlwZTpcInN1YnBsb3RpZFwiLGRmbHQ6XCJtYXBib3hcIixlZGl0VHlwZTpcImNhbGNcIn19LHIubGF5b3V0QXR0cmlidXRlcz10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPXQoXCIuL2xheW91dF9kZWZhdWx0c1wiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsbz1lLl9zdWJwbG90cy5tYXBib3g7aWYobi52ZXJzaW9uIT09bC5yZXF1aXJlZFZlcnNpb24pdGhyb3cgbmV3IEVycm9yKGwud3JvbmdWZXJzaW9uRXJyb3JNc2cpO3ZhciBjPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dDtpZihcIlwiPT09dC5fY29udGV4dC5tYXBib3hBY2Nlc3NUb2tlbilyZXR1cm5cIlwiO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1yW2Vbbl1dO2lmKGkuYWNjZXNzdG9rZW4pcmV0dXJuIGkuYWNjZXNzdG9rZW59dGhyb3cgbmV3IEVycm9yKGwubm9BY2Nlc3NUb2tlbkVycm9yTXNnKX0odCxvKTtuLmFjY2Vzc1Rva2VuPWM7Zm9yKHZhciB1PTA7dTxvLmxlbmd0aDt1Kyspe3ZhciBoPW9bdV0sZj1hKHIsXCJtYXBib3hcIixoKSxwPWVbaF0sZD1wLl9zdWJwbG90O2R8fChkPXMoe2dkOnQsY29udGFpbmVyOmUuX2dsY29udGFpbmVyLm5vZGUoKSxpZDpoLGZ1bGxMYXlvdXQ6ZSxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdH0pLGVbaF0uX3N1YnBsb3Q9ZCksZC52aWV3SW5pdGlhbHx8KGQudmlld0luaXRpYWw9e2NlbnRlcjppLmV4dGVuZEZsYXQoe30scC5jZW50ZXIpLHpvb206cC56b29tLGJlYXJpbmc6cC5iZWFyaW5nLHBpdGNoOnAucGl0Y2h9KSxkLnBsb3QoZixlLHQuX3Byb21pc2VzKX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLm1hcGJveHx8W10sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdOyFlW29dJiZuW29dLl9zdWJwbG90JiZuW29dLl9zdWJwbG90LmRlc3Ryb3koKX19LHIudG9TVkc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5tYXBib3gsbj1lLl9zaXplLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9ZVtyW2ldXSxzPWEuZG9tYWluLGw9YS5fc3VicGxvdCxjPWwudG9JbWFnZShcInBuZ1wiKTtlLl9nbGltYWdlcy5hcHBlbmQoXCJzdmc6aW1hZ2VcIikuYXR0cih7eG1sbnM6by5zdmcsXCJ4bGluazpocmVmXCI6Yyx4Om4ubCtuLncqcy54WzBdLHk6bi50K24uaCooMS1zLnlbMV0pLHdpZHRoOm4udyoocy54WzFdLXMueFswXSksaGVpZ2h0Om4uaCoocy55WzFdLXMueVswXSkscHJlc2VydmVBc3BlY3RSYXRpbzpcIm5vbmVcIn0pLGwuZGVzdHJveSgpfX0sci51cGRhdGVGeD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLm1hcGJveCxuPTA7bjxyLmxlbmd0aDtuKyspe2VbcltuXV0uX3N1YnBsb3QudXBkYXRlRngoZSl9fX0se1wiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIjo2NzksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9nZXRfZGF0YVwiOjc4NCxcIi4vY29uc3RhbnRzXCI6ODAyLFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjgwNixcIi4vbGF5b3V0X2RlZmF1bHRzXCI6ODA3LFwiLi9tYXBib3hcIjo4MDgsXCJtYXBib3gtZ2xcIjo0MTl9XSw4MDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vY29udmVydF90ZXh0X29wdHNcIik7ZnVuY3Rpb24gYSh0LGUpe3RoaXMubWFwYm94PXQsdGhpcy5tYXA9dC5tYXAsdGhpcy51aWQ9dC51aWQrXCItbGF5ZXJcIitlLHRoaXMuaWRTb3VyY2U9dGhpcy51aWQrXCItc291cmNlXCIsdGhpcy5pZExheWVyPXRoaXMudWlkK1wiLWxheWVyXCIsdGhpcy5zb3VyY2VUeXBlPW51bGwsdGhpcy5zb3VyY2U9bnVsbCx0aGlzLmxheWVyVHlwZT1udWxsLHRoaXMuYmVsb3c9bnVsbCx0aGlzLnZpc2libGU9ITF9dmFyIG89YS5wcm90b3R5cGU7ZnVuY3Rpb24gcyh0KXt2YXIgZT10LnNvdXJjZTtyZXR1cm4gdC52aXNpYmxlJiYobi5pc1BsYWluT2JqZWN0KGUpfHxcInN0cmluZ1wiPT10eXBlb2YgZSYmZS5sZW5ndGg+MCl9ZnVuY3Rpb24gbCh0KXt2YXIgZT17fSxyPXt9O3N3aXRjaCh0LnR5cGUpe2Nhc2VcImNpcmNsZVwiOm4uZXh0ZW5kRmxhdChyLHtcImNpcmNsZS1yYWRpdXNcIjp0LmNpcmNsZS5yYWRpdXMsXCJjaXJjbGUtY29sb3JcIjp0LmNvbG9yLFwiY2lyY2xlLW9wYWNpdHlcIjp0Lm9wYWNpdHl9KTticmVhaztjYXNlXCJsaW5lXCI6bi5leHRlbmRGbGF0KHIse1wibGluZS13aWR0aFwiOnQubGluZS53aWR0aCxcImxpbmUtY29sb3JcIjp0LmNvbG9yLFwibGluZS1vcGFjaXR5XCI6dC5vcGFjaXR5LFwibGluZS1kYXNoYXJyYXlcIjp0LmxpbmUuZGFzaH0pO2JyZWFrO2Nhc2VcImZpbGxcIjpuLmV4dGVuZEZsYXQocix7XCJmaWxsLWNvbG9yXCI6dC5jb2xvcixcImZpbGwtb3V0bGluZS1jb2xvclwiOnQuZmlsbC5vdXRsaW5lY29sb3IsXCJmaWxsLW9wYWNpdHlcIjp0Lm9wYWNpdHl9KTticmVhaztjYXNlXCJzeW1ib2xcIjp2YXIgYT10LnN5bWJvbCxvPWkoYS50ZXh0cG9zaXRpb24sYS5pY29uc2l6ZSk7bi5leHRlbmRGbGF0KGUse1wiaWNvbi1pbWFnZVwiOmEuaWNvbitcIi0xNVwiLFwiaWNvbi1zaXplXCI6YS5pY29uc2l6ZS8xMCxcInRleHQtZmllbGRcIjphLnRleHQsXCJ0ZXh0LXNpemVcIjphLnRleHRmb250LnNpemUsXCJ0ZXh0LWFuY2hvclwiOm8uYW5jaG9yLFwidGV4dC1vZmZzZXRcIjpvLm9mZnNldCxcInN5bWJvbC1wbGFjZW1lbnRcIjphLnBsYWNlbWVudH0pLG4uZXh0ZW5kRmxhdChyLHtcImljb24tY29sb3JcIjp0LmNvbG9yLFwidGV4dC1jb2xvclwiOmEudGV4dGZvbnQuY29sb3IsXCJ0ZXh0LW9wYWNpdHlcIjp0Lm9wYWNpdHl9KX1yZXR1cm57bGF5b3V0OmUscGFpbnQ6cn19by51cGRhdGU9ZnVuY3Rpb24odCl7dGhpcy52aXNpYmxlP3RoaXMubmVlZHNOZXdTb3VyY2UodCk/KHRoaXMucmVtb3ZlTGF5ZXIoKSx0aGlzLnVwZGF0ZVNvdXJjZSh0KSx0aGlzLnVwZGF0ZUxheWVyKHQpKTp0aGlzLm5lZWRzTmV3TGF5ZXIodCk/dGhpcy51cGRhdGVMYXllcih0KTp0aGlzLnVwZGF0ZVN0eWxlKHQpOih0aGlzLnVwZGF0ZVNvdXJjZSh0KSx0aGlzLnVwZGF0ZUxheWVyKHQpKSx0aGlzLnZpc2libGU9cyh0KX0sby5uZWVkc05ld1NvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zb3VyY2VUeXBlIT09dC5zb3VyY2V0eXBlfHx0aGlzLnNvdXJjZSE9PXQuc291cmNlfHx0aGlzLmxheWVyVHlwZSE9PXQudHlwZX0sby5uZWVkc05ld0xheWVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxheWVyVHlwZSE9PXQudHlwZXx8dGhpcy5iZWxvdyE9PXQuYmVsb3d9LG8udXBkYXRlU291cmNlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWFwO2lmKGUuZ2V0U291cmNlKHRoaXMuaWRTb3VyY2UpJiZlLnJlbW92ZVNvdXJjZSh0aGlzLmlkU291cmNlKSx0aGlzLnNvdXJjZVR5cGU9dC5zb3VyY2V0eXBlLHRoaXMuc291cmNlPXQuc291cmNlLHModCkpe3ZhciByPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5zb3VyY2V0eXBlLG49dC5zb3VyY2UsaT17dHlwZTpyfTtcImdlb2pzb25cIj09PXI/ZT1cImRhdGFcIjpcInZlY3RvclwiPT09ciYmKGU9XCJzdHJpbmdcIj09dHlwZW9mIG4/XCJ1cmxcIjpcInRpbGVzXCIpO3JldHVybiBpW2VdPW4saX0odCk7ZS5hZGRTb3VyY2UodGhpcy5pZFNvdXJjZSxyKX19LG8udXBkYXRlTGF5ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tYXAscj1sKHQpO3RoaXMucmVtb3ZlTGF5ZXIoKSx0aGlzLmxheWVyVHlwZT10LnR5cGUscyh0KSYmZS5hZGRMYXllcih7aWQ6dGhpcy5pZExheWVyLHNvdXJjZTp0aGlzLmlkU291cmNlLFwic291cmNlLWxheWVyXCI6dC5zb3VyY2VsYXllcnx8XCJcIix0eXBlOnQudHlwZSxtaW56b29tOnQubWluem9vbSxtYXh6b29tOnQubWF4em9vbSxsYXlvdXQ6ci5sYXlvdXQscGFpbnQ6ci5wYWludH0sdC5iZWxvdyl9LG8udXBkYXRlU3R5bGU9ZnVuY3Rpb24odCl7aWYocyh0KSl7dmFyIGU9bCh0KTt0aGlzLm1hcGJveC5zZXRPcHRpb25zKHRoaXMuaWRMYXllcixcInNldExheW91dFByb3BlcnR5XCIsZS5sYXlvdXQpLHRoaXMubWFwYm94LnNldE9wdGlvbnModGhpcy5pZExheWVyLFwic2V0UGFpbnRQcm9wZXJ0eVwiLGUucGFpbnQpfX0sby5yZW1vdmVMYXllcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMubWFwO3QuZ2V0TGF5ZXIodGhpcy5pZExheWVyKSYmdC5yZW1vdmVMYXllcih0aGlzLmlkTGF5ZXIpfSxvLmRpc3Bvc2U9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hcDt0LnJlbW92ZUxheWVyKHRoaXMuaWRMYXllciksdC5yZW1vdmVTb3VyY2UodGhpcy5pZFNvdXJjZSl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IGEodCxlKTtyZXR1cm4gbi51cGRhdGUociksbn19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4vY29udmVydF90ZXh0X29wdHNcIjo4MDN9XSw4MDY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIikuZGVmYXVsdExpbmUsYT10KFwiLi4vZG9tYWluXCIpLmF0dHJpYnV0ZXMsbz10KFwiLi4vZm9udF9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXNcIikudGV4dHBvc2l0aW9uLGw9dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGwsYz10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKS50ZW1wbGF0ZWRBcnJheSx1PW8oe30pO3UuZmFtaWx5LmRmbHQ9XCJPcGVuIFNhbnMgUmVndWxhciwgQXJpYWwgVW5pY29kZSBNUyBSZWd1bGFyXCIsKGUuZXhwb3J0cz1sKHtfYXJyYXlBdHRyUmVnZXhwczpbbi5jb3VudGVyUmVnZXgoXCJtYXBib3hcIixcIi5sYXllcnNcIiwhMCldLGRvbWFpbjphKHtuYW1lOlwibWFwYm94XCJ9KSxhY2Nlc3N0b2tlbjp7dmFsVHlwZTpcInN0cmluZ1wiLG5vQmxhbms6ITAsc3RyaWN0OiEwfSxzdHlsZTp7dmFsVHlwZTpcImFueVwiLHZhbHVlczpbXCJiYXNpY1wiLFwic3RyZWV0c1wiLFwib3V0ZG9vcnNcIixcImxpZ2h0XCIsXCJkYXJrXCIsXCJzYXRlbGxpdGVcIixcInNhdGVsbGl0ZS1zdHJlZXRzXCJdLGRmbHQ6XCJiYXNpY1wifSxjZW50ZXI6e2xvbjp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MH0sbGF0Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowfX0sem9vbTp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MX0sYmVhcmluZzp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MH0scGl0Y2g6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjB9LGxheWVyczpjKFwibGF5ZXJcIix7dmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfSxzb3VyY2V0eXBlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJnZW9qc29uXCIsXCJ2ZWN0b3JcIl0sZGZsdDpcImdlb2pzb25cIn0sc291cmNlOnt2YWxUeXBlOlwiYW55XCJ9LHNvdXJjZWxheWVyOnt2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwifSx0eXBlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJjaXJjbGVcIixcImxpbmVcIixcImZpbGxcIixcInN5bWJvbFwiXSxkZmx0OlwiY2lyY2xlXCJ9LGJlbG93Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwifSxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDppfSxvcGFjaXR5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDoxfSxtaW56b29tOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjI0LGRmbHQ6MH0sbWF4em9vbTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoyNCxkZmx0OjI0fSxjaXJjbGU6e3JhZGl1czp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MTV9fSxsaW5lOnt3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6Mn0sZGFzaDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIn19LGZpbGw6e291dGxpbmVjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDppfX0sc3ltYm9sOntpY29uOnt2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIm1hcmtlclwifSxpY29uc2l6ZTp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MTB9LHRleHQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCJ9LHBsYWNlbWVudDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wicG9pbnRcIixcImxpbmVcIixcImxpbmUtY2VudGVyXCJdLGRmbHQ6XCJwb2ludFwifSx0ZXh0Zm9udDp1LHRleHRwb3NpdGlvbjpuLmV4dGVuZEZsYXQoe30scyx7YXJyYXlPazohMX0pfX0pfSxcInBsb3RcIixcImZyb20tcm9vdFwiKSkudWlyZXZpc2lvbj17dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwibm9uZVwifX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlc1wiOjEwNTIsXCIuLi9kb21haW5cIjo3NzQsXCIuLi9mb250X2F0dHJpYnV0ZXNcIjo3NzV9XSw4MDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uL3N1YnBsb3RfZGVmYXVsdHNcIiksYT10KFwiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCIpLG89dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIik7ZnVuY3Rpb24gcyh0LGUscixuKXtyKFwiYWNjZXNzdG9rZW5cIixuLmFjY2Vzc1Rva2VuKSxyKFwic3R5bGVcIikscihcImNlbnRlci5sb25cIikscihcImNlbnRlci5sYXRcIikscihcInpvb21cIikscihcImJlYXJpbmdcIikscihcInBpdGNoXCIpLGEodCxlLHtuYW1lOlwibGF5ZXJzXCIsaGFuZGxlSXRlbURlZmF1bHRzOmx9KSxlLl9pbnB1dD10fWZ1bmN0aW9uIGwodCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxvLmxheWVycyxyLGkpfWlmKHIoXCJ2aXNpYmxlXCIpKXt2YXIgaT1yKFwic291cmNldHlwZVwiKTtyKFwic291cmNlXCIpLFwidmVjdG9yXCI9PT1pJiZyKFwic291cmNlbGF5ZXJcIik7dmFyIGE9cihcInR5cGVcIik7cihcImJlbG93XCIpLHIoXCJjb2xvclwiKSxyKFwib3BhY2l0eVwiKSxyKFwibWluem9vbVwiKSxyKFwibWF4em9vbVwiKSxcImNpcmNsZVwiPT09YSYmcihcImNpcmNsZS5yYWRpdXNcIiksXCJsaW5lXCI9PT1hJiYocihcImxpbmUud2lkdGhcIikscihcImxpbmUuZGFzaFwiKSksXCJmaWxsXCI9PT1hJiZyKFwiZmlsbC5vdXRsaW5lY29sb3JcIiksXCJzeW1ib2xcIj09PWEmJihyKFwic3ltYm9sLmljb25cIikscihcInN5bWJvbC5pY29uc2l6ZVwiKSxyKFwic3ltYm9sLnRleHRcIiksbi5jb2VyY2VGb250KHIsXCJzeW1ib2wudGV4dGZvbnRcIikscihcInN5bWJvbC50ZXh0cG9zaXRpb25cIikscihcInN5bWJvbC5wbGFjZW1lbnRcIikpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2kodCxlLHIse3R5cGU6XCJtYXBib3hcIixhdHRyaWJ1dGVzOm8saGFuZGxlRGVmYXVsdHM6cyxwYXJ0aXRpb246XCJ5XCIsYWNjZXNzVG9rZW46ZS5fbWFwYm94QWNjZXNzVG9rZW59KX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0c1wiOjc0NSxcIi4uL3N1YnBsb3RfZGVmYXVsdHNcIjo4MjQsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6ODA2fV0sODA4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIm1hcGJveC1nbFwiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4XCIpLGE9dChcIi4uLy4uL2xpYlwiKSxvPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50XCIpLGw9dChcIi4uL2NhcnRlc2lhbi9zZWxlY3RcIikucHJlcFNlbGVjdCxjPXQoXCIuLi9jYXJ0ZXNpYW4vc2VsZWN0XCIpLnNlbGVjdE9uQ2xpY2ssdT10KFwiLi9jb25zdGFudHNcIiksaD10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxmPXQoXCIuL2xheWVyc1wiKTtmdW5jdGlvbiBwKHQpe3RoaXMuaWQ9dC5pZCx0aGlzLmdkPXQuZ2QsdGhpcy5jb250YWluZXI9dC5jb250YWluZXIsdGhpcy5pc1N0YXRpYz10LnN0YXRpY1Bsb3Q7dmFyIGU9dC5mdWxsTGF5b3V0O3RoaXMudWlkPWUuX3VpZCtcIi1cIit0aGlzLmlkLHRoaXMuZGl2PW51bGwsdGhpcy54YXhpcz1udWxsLHRoaXMueWF4aXM9bnVsbCx0aGlzLmNyZWF0ZUZyYW1ld29yayhlKSx0aGlzLm1hcD1udWxsLHRoaXMuYWNjZXNzVG9rZW49bnVsbCx0aGlzLnN0eWxlT2JqPW51bGwsdGhpcy50cmFjZUhhc2g9e30sdGhpcy5sYXllckxpc3Q9W119dmFyIGQ9cC5wcm90b3R5cGU7ZnVuY3Rpb24gZyh0KXt2YXIgZT1oLnN0eWxlLnZhbHVlcyxyPWguc3R5bGUuZGZsdCxuPXt9O3JldHVybiBhLmlzUGxhaW5PYmplY3QodCk/KG4uaWQ9dC5pZCxuLnN0eWxlPXQpOlwic3RyaW5nXCI9PXR5cGVvZiB0PyhuLmlkPXQsbi5zdHlsZT0tMSE9PWUuaW5kZXhPZih0KT92KHQpOnQpOihuLmlkPXIsbi5zdHlsZT12KHIpKSxuLnRyYW5zaXRpb249e2R1cmF0aW9uOjAsZGVsYXk6MH0sbn1mdW5jdGlvbiB2KHQpe3JldHVybiB1LnN0eWxlVXJsUHJlZml4K3QrXCItXCIrdS5zdHlsZVVybFN1ZmZpeH1mdW5jdGlvbiBtKHQpe3JldHVyblt0Lmxvbix0LmxhdF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcCh0KX0sZC5wbG90PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPXRoaXMsYT1lW2kuaWRdO2kubWFwJiZhLmFjY2Vzc3Rva2VuIT09aS5hY2Nlc3NUb2tlbiYmKGkubWFwLnJlbW92ZSgpLGkubWFwPW51bGwsaS5zdHlsZU9iaj1udWxsLGkudHJhY2VIYXNoPVtdLGkubGF5ZXJMaXN0PXt9KSxuPWkubWFwP25ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbil7aS51cGRhdGVNYXAodCxlLHIsbil9KTpuZXcgUHJvbWlzZShmdW5jdGlvbihyLG4pe2kuY3JlYXRlTWFwKHQsZSxyLG4pfSksci5wdXNoKG4pfSxkLmNyZWF0ZU1hcD1mdW5jdGlvbih0LGUscixhKXt2YXIgcz10aGlzLGw9cy5nZCxoPWVbcy5pZF0sZj1zLnN0eWxlT2JqPWcoaC5zdHlsZSk7cy5hY2Nlc3NUb2tlbj1oLmFjY2Vzc3Rva2VuO3ZhciBwPXMubWFwPW5ldyBuLk1hcCh7Y29udGFpbmVyOnMuZGl2LHN0eWxlOmYuc3R5bGUsY2VudGVyOm0oaC5jZW50ZXIpLHpvb206aC56b29tLGJlYXJpbmc6aC5iZWFyaW5nLHBpdGNoOmgucGl0Y2gsaW50ZXJhY3RpdmU6IXMuaXNTdGF0aWMscHJlc2VydmVEcmF3aW5nQnVmZmVyOnMuaXNTdGF0aWMsZG91YmxlQ2xpY2tab29tOiExLGJveFpvb206ITF9KSxkPXUuY29udHJvbENvbnRhaW5lckNsYXNzTmFtZSx2PXMuZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZClbMF07aWYocy5kaXYucmVtb3ZlQ2hpbGQodikscC5fY2FudmFzLnN0eWxlLmxlZnQ9XCIwcHhcIixwLl9jYW52YXMuc3R5bGUudG9wPVwiMHB4XCIscy5yZWplY3RPbkVycm9yKGEpLHAub25jZShcImxvYWRcIixmdW5jdGlvbigpe3MudXBkYXRlRGF0YSh0KSxzLnVwZGF0ZUxheW91dChlKSxzLnJlc29sdmVPblJlbmRlcihyKX0pLCFzLmlzU3RhdGljKXt2YXIgeT0hMTtwLm9uKFwibW92ZWVuZFwiLGZ1bmN0aW9uKHQpe2lmKHMubWFwKXtpZih0Lm9yaWdpbmFsRXZlbnR8fHkpe3ZhciBlPWwuX2Z1bGxMYXlvdXRbcy5pZF07by5jYWxsKFwiX3N0b3JlRGlyZWN0R1VJRWRpdFwiLGwubGF5b3V0LGwuX2Z1bGxMYXlvdXQuX3ByZUdVSSxzLmdldFZpZXdFZGl0cyhlKSk7dmFyIHI9cy5nZXRWaWV3KCk7ZS5faW5wdXQuY2VudGVyPWUuY2VudGVyPXIuY2VudGVyLGUuX2lucHV0Lnpvb209ZS56b29tPXIuem9vbSxlLl9pbnB1dC5iZWFyaW5nPWUuYmVhcmluZz1yLmJlYXJpbmcsZS5faW5wdXQucGl0Y2g9ZS5waXRjaD1yLnBpdGNoLGwuZW1pdChcInBsb3RseV9yZWxheW91dFwiLHMuZ2V0Vmlld0VkaXRzKHIpKX15PSExfX0pLHAub24oXCJ3aGVlbFwiLGZ1bmN0aW9uKCl7eT0hMH0pLHAub24oXCJtb3VzZW1vdmVcIixmdW5jdGlvbih0KXt2YXIgZT1zLmRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0LmNsaWVudFg9dC5wb2ludC54K2UubGVmdCx0LmNsaWVudFk9dC5wb2ludC55K2UudG9wLHQudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdD1mdW5jdGlvbigpe3JldHVybiBlfSxzLnhheGlzLnAyYz1mdW5jdGlvbigpe3JldHVybiB0LmxuZ0xhdC5sbmd9LHMueWF4aXMucDJjPWZ1bmN0aW9uKCl7cmV0dXJuIHQubG5nTGF0LmxhdH0saS5ob3ZlcihsLHQscy5pZCl9KSxwLm9uKFwiZHJhZ3N0YXJ0XCIseCkscC5vbihcInpvb21zdGFydFwiLHgpLHAub24oXCJkYmxjbGlja1wiLGZ1bmN0aW9uKCl7dmFyIHQ9bC5fZnVsbExheW91dFtzLmlkXTtvLmNhbGwoXCJfc3RvcmVEaXJlY3RHVUlFZGl0XCIsbC5sYXlvdXQsbC5fZnVsbExheW91dC5fcHJlR1VJLHMuZ2V0Vmlld0VkaXRzKHQpKTt2YXIgZT1zLnZpZXdJbml0aWFsO3Auc2V0Q2VudGVyKG0oZS5jZW50ZXIpKSxwLnNldFpvb20oZS56b29tKSxwLnNldEJlYXJpbmcoZS5iZWFyaW5nKSxwLnNldFBpdGNoKGUucGl0Y2gpO3ZhciByPXMuZ2V0VmlldygpO3QuX2lucHV0LmNlbnRlcj10LmNlbnRlcj1yLmNlbnRlcix0Ll9pbnB1dC56b29tPXQuem9vbT1yLnpvb20sdC5faW5wdXQuYmVhcmluZz10LmJlYXJpbmc9ci5iZWFyaW5nLHQuX2lucHV0LnBpdGNoPXQucGl0Y2g9ci5waXRjaCxsLmVtaXQoXCJwbG90bHlfZG91YmxlY2xpY2tcIixudWxsKSxsLmVtaXQoXCJwbG90bHlfcmVsYXlvdXRcIixzLmdldFZpZXdFZGl0cyhyKSl9KSxzLmNsZWFyU2VsZWN0PWZ1bmN0aW9uKCl7bC5fZnVsbExheW91dC5fem9vbWxheWVyLnNlbGVjdEFsbChcIi5zZWxlY3Qtb3V0bGluZVwiKS5yZW1vdmUoKX0scy5vbkNsaWNrSW5QYW5Gbj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9bC5fZnVsbExheW91dC5jbGlja21vZGU7ci5pbmRleE9mKFwic2VsZWN0XCIpPi0xJiZjKGUub3JpZ2luYWxFdmVudCxsLFtzLnhheGlzXSxbcy55YXhpc10scy5pZCx0KSxyLmluZGV4T2YoXCJldmVudFwiKT4tMSYmaS5jbGljayhsLGUub3JpZ2luYWxFdmVudCl9fX1mdW5jdGlvbiB4KCl7aS5sb25lVW5ob3ZlcihlLl90b3BwYXBlcil9fSxkLnVwZGF0ZU1hcD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLGE9aS5tYXAsbz1lW3RoaXMuaWRdO2kucmVqZWN0T25FcnJvcihuKTt2YXIgcz1nKG8uc3R5bGUpO2kuc3R5bGVPYmouaWQhPT1zLmlkPyhpLnN0eWxlT2JqPXMsYS5zZXRTdHlsZShzLnN0eWxlKSxhLm9uY2UoXCJzdHlsZWRhdGFcIixmdW5jdGlvbigpe2kudHJhY2VIYXNoPXt9LGkudXBkYXRlRGF0YSh0KSxpLnVwZGF0ZUxheW91dChlKSxpLnJlc29sdmVPblJlbmRlcihyKX0pKTooaS51cGRhdGVEYXRhKHQpLGkudXBkYXRlTGF5b3V0KGUpLGkucmVzb2x2ZU9uUmVuZGVyKHIpKX0sZC51cGRhdGVEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9dGhpcy50cmFjZUhhc2g7Zm9yKG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIG89dFtuXTsoZT1hWyhyPW9bMF0udHJhY2UpLnVpZF0pP2UudXBkYXRlKG8pOnIuX21vZHVsZSYmKGFbci51aWRdPXIuX21vZHVsZS5wbG90KHRoaXMsbykpfXZhciBzPU9iamVjdC5rZXlzKGEpO3Q6Zm9yKG49MDtuPHMubGVuZ3RoO24rKyl7dmFyIGw9c1tuXTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKWlmKGw9PT0ocj10W2ldWzBdLnRyYWNlKS51aWQpY29udGludWUgdDsoZT1hW2xdKS5kaXNwb3NlKCksZGVsZXRlIGFbbF19fSxkLnVwZGF0ZUxheW91dD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm1hcCxyPXRbdGhpcy5pZF07ZS5zZXRDZW50ZXIobShyLmNlbnRlcikpLGUuc2V0Wm9vbShyLnpvb20pLGUuc2V0QmVhcmluZyhyLmJlYXJpbmcpLGUuc2V0UGl0Y2goci5waXRjaCksdGhpcy51cGRhdGVMYXllcnModCksdGhpcy51cGRhdGVGcmFtZXdvcmsodCksdGhpcy51cGRhdGVGeCh0KSx0aGlzLm1hcC5yZXNpemUoKSx0aGlzLmdkLl9jb250ZXh0Ll9zY3JvbGxab29tLm1hcGJveD9lLnNjcm9sbFpvb20uZW5hYmxlKCk6ZS5zY3JvbGxab29tLmRpc2FibGUoKX0sZC5yZXNvbHZlT25SZW5kZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tYXA7ZS5vbihcInJlbmRlclwiLGZ1bmN0aW9uIHIoKXtlLmxvYWRlZCgpJiYoZS5vZmYoXCJyZW5kZXJcIixyKSxzZXRUaW1lb3V0KHQsMCkpfSl9LGQucmVqZWN0T25FcnJvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm1hcDtmdW5jdGlvbiByKCl7dChuZXcgRXJyb3IodS5tYXBPbkVycm9yTXNnKSl9ZS5vbmNlKFwiZXJyb3JcIixyKSxlLm9uY2UoXCJzdHlsZS5lcnJvclwiLHIpLGUub25jZShcInNvdXJjZS5lcnJvclwiLHIpLGUub25jZShcInRpbGUuZXJyb3JcIixyKSxlLm9uY2UoXCJsYXllci5lcnJvclwiLHIpfSxkLmNyZWF0ZUZyYW1ld29yaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5kaXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtyLmlkPWUudWlkLHIuc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwiLGUuY29udGFpbmVyLmFwcGVuZENoaWxkKHIpLGUueGF4aXM9e19pZDpcInhcIixjMnA6ZnVuY3Rpb24odCl7cmV0dXJuIGUucHJvamVjdCh0KS54fX0sZS55YXhpcz17X2lkOlwieVwiLGMycDpmdW5jdGlvbih0KXtyZXR1cm4gZS5wcm9qZWN0KHQpLnl9fSxlLnVwZGF0ZUZyYW1ld29yayh0KX0sZC51cGRhdGVGeD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5tYXAsbj1lLmdkO2lmKCFlLmlzU3RhdGljKXt2YXIgaSxvPXQuZHJhZ21vZGU7aT1cInNlbGVjdFwiPT09bz9mdW5jdGlvbih0LHIpeyh0LnJhbmdlPXt9KVtlLmlkXT1bdShbci54bWluLHIueW1pbl0pLHUoW3IueG1heCxyLnltYXhdKV19OmZ1bmN0aW9uKHQscixuKXsodC5sYXNzb1BvaW50cz17fSlbZS5pZF09bi5maWx0ZXJlZC5tYXAodSl9O3ZhciBjPWUuZHJhZ09wdGlvbnM7ZS5kcmFnT3B0aW9ucz1hLmV4dGVuZERlZXAoY3x8e30se2VsZW1lbnQ6ZS5kaXYsZ2Q6bixwbG90aW5mbzp7aWQ6ZS5pZCx4YXhpczplLnhheGlzLHlheGlzOmUueWF4aXMsZmlsbFJhbmdlSXRlbXM6aX0seGF4ZXM6W2UueGF4aXNdLHlheGVzOltlLnlheGlzXSxzdWJwbG90OmUuaWR9KSxyLm9mZihcImNsaWNrXCIsZS5vbkNsaWNrSW5QYW5IYW5kbGVyKSxcInNlbGVjdFwiPT09b3x8XCJsYXNzb1wiPT09bz8oci5kcmFnUGFuLmRpc2FibGUoKSxyLm9uKFwiem9vbXN0YXJ0XCIsZS5jbGVhclNlbGVjdCksZS5kcmFnT3B0aW9ucy5wcmVwRm49ZnVuY3Rpb24odCxyLG4pe2wodCxyLG4sZS5kcmFnT3B0aW9ucyxvKX0scy5pbml0KGUuZHJhZ09wdGlvbnMpKTooci5kcmFnUGFuLmVuYWJsZSgpLHIub2ZmKFwiem9vbXN0YXJ0XCIsZS5jbGVhclNlbGVjdCksZS5kaXYub25tb3VzZWRvd249bnVsbCxlLm9uQ2xpY2tJblBhbkhhbmRsZXI9ZS5vbkNsaWNrSW5QYW5GbihlLmRyYWdPcHRpb25zKSxyLm9uKFwiY2xpY2tcIixlLm9uQ2xpY2tJblBhbkhhbmRsZXIpKX1mdW5jdGlvbiB1KHQpe3ZhciByPWUubWFwLnVucHJvamVjdCh0KTtyZXR1cm5bci5sbmcsci5sYXRdfX0sZC51cGRhdGVGcmFtZXdvcms9ZnVuY3Rpb24odCl7dmFyIGU9dFt0aGlzLmlkXS5kb21haW4scj10Ll9zaXplLG49dGhpcy5kaXYuc3R5bGU7bi53aWR0aD1yLncqKGUueFsxXS1lLnhbMF0pK1wicHhcIixuLmhlaWdodD1yLmgqKGUueVsxXS1lLnlbMF0pK1wicHhcIixuLmxlZnQ9ci5sK2UueFswXSpyLncrXCJweFwiLG4udG9wPXIudCsoMS1lLnlbMV0pKnIuaCtcInB4XCIsdGhpcy54YXhpcy5fb2Zmc2V0PXIubCtlLnhbMF0qci53LHRoaXMueGF4aXMuX2xlbmd0aD1yLncqKGUueFsxXS1lLnhbMF0pLHRoaXMueWF4aXMuX29mZnNldD1yLnQrKDEtZS55WzFdKSpyLmgsdGhpcy55YXhpcy5fbGVuZ3RoPXIuaCooZS55WzFdLWUueVswXSl9LGQudXBkYXRlTGF5ZXJzPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dFt0aGlzLmlkXS5sYXllcnMsbj10aGlzLmxheWVyTGlzdDtpZihyLmxlbmd0aCE9PW4ubGVuZ3RoKXtmb3IoZT0wO2U8bi5sZW5ndGg7ZSsrKW5bZV0uZGlzcG9zZSgpO2ZvcihuPXRoaXMubGF5ZXJMaXN0PVtdLGU9MDtlPHIubGVuZ3RoO2UrKyluLnB1c2goZih0aGlzLGUscltlXSkpfWVsc2UgZm9yKGU9MDtlPHIubGVuZ3RoO2UrKyluW2VdLnVwZGF0ZShyW2VdKX0sZC5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5tYXAmJih0aGlzLm1hcC5yZW1vdmUoKSx0aGlzLm1hcD1udWxsLHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMuZGl2KSl9LGQudG9JbWFnZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcC5zdG9wKCksdGhpcy5tYXAuZ2V0Q2FudmFzKCkudG9EYXRhVVJMKCl9LGQuc2V0T3B0aW9ucz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuIGluIHIpdGhpcy5tYXBbZV0odCxuLHJbbl0pfSxkLnByb2plY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWFwLnByb2plY3QobmV3IG4uTG5nTGF0KHRbMF0sdFsxXSkpfSxkLmdldFZpZXc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hcCxlPXQuZ2V0Q2VudGVyKCk7cmV0dXJue2NlbnRlcjp7bG9uOmUubG5nLGxhdDplLmxhdH0sem9vbTp0LmdldFpvb20oKSxiZWFyaW5nOnQuZ2V0QmVhcmluZygpLHBpdGNoOnQuZ2V0UGl0Y2goKX19LGQuZ2V0Vmlld0VkaXRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmlkLHI9W1wiY2VudGVyXCIsXCJ6b29tXCIsXCJiZWFyaW5nXCIsXCJwaXRjaFwiXSxuPXt9LGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXTtuW2UrXCIuXCIrYV09dFthXX1yZXR1cm4gbn19LHtcIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnRcIjo1OTYsXCIuLi8uLi9jb21wb25lbnRzL2Z4XCI6NjE3LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9jYXJ0ZXNpYW4vc2VsZWN0XCI6NzY2LFwiLi9jb25zdGFudHNcIjo4MDIsXCIuL2xheWVyc1wiOjgwNSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo4MDYsXCJtYXBib3gtZ2xcIjo0MTl9XSw4MDk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5lZGl0VHlwZTtyZXR1cm57dDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MCxlZGl0VHlwZTplfSxyOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLGVkaXRUeXBlOmV9LGI6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjAsZWRpdFR5cGU6ZX0sbDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MCxlZGl0VHlwZTplfSxlZGl0VHlwZTplfX19LHt9XSw4MTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiZmFzdC1pc251bWVyaWNcIiksYT10KFwiLi4vcmVnaXN0cnlcIiksbz10KFwiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWFcIikscz10KFwiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKSxsPXQoXCIuLi9saWJcIiksYz10KFwiLi4vY29tcG9uZW50cy9jb2xvclwiKSx1PXQoXCIuLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTSxoPXQoXCIuL2NhcnRlc2lhbi9heGlzX2lkc1wiKSxmPXQoXCIuL2FuaW1hdGlvbl9hdHRyaWJ1dGVzXCIpLHA9dChcIi4vZnJhbWVfYXR0cmlidXRlc1wiKSxkPWwucmVsaW5rUHJpdmF0ZUtleXMsZz1sLl8sdj1lLmV4cG9ydHM9e307bC5leHRlbmRGbGF0KHYsYSksdi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksdi5hdHRyaWJ1dGVzLnR5cGUudmFsdWVzPXYuYWxsVHlwZXMsdi5mb250QXR0cnM9dChcIi4vZm9udF9hdHRyaWJ1dGVzXCIpLHYubGF5b3V0QXR0cmlidXRlcz10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSx2LmZvbnRXZWlnaHQ9XCJub3JtYWxcIjt2YXIgbT12LnRyYW5zZm9ybXNSZWdpc3RyeSx5PXQoXCIuL2NvbW1hbmRcIik7di5leGVjdXRlQVBJQ29tbWFuZD15LmV4ZWN1dGVBUElDb21tYW5kLHYuY29tcHV0ZUFQSUNvbW1hbmRCaW5kaW5ncz15LmNvbXB1dGVBUElDb21tYW5kQmluZGluZ3Msdi5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXI9eS5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXIsdi5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3M9eS5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3Msdi5yZWRyYXdUZXh0PWZ1bmN0aW9uKHQpe2lmKCEoKHQ9bC5nZXRHcmFwaERpdih0KSkuZGF0YSYmdC5kYXRhWzBdJiZ0LmRhdGFbMF0ucikpcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXthLmdldENvbXBvbmVudE1ldGhvZChcImFubm90YXRpb25zXCIsXCJkcmF3XCIpKHQpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKFwibGVnZW5kXCIsXCJkcmF3XCIpKHQpLCh0LmNhbGNkYXRhfHxbXSkuZm9yRWFjaChmdW5jdGlvbih0KXt0WzBdJiZ0WzBdLnQmJnRbMF0udC5jYiYmdFswXS50LmNiKCl9KSxlKHYucHJldmlvdXNQcm9taXNlcyh0KSl9LDMwMCl9KX0sdi5yZXNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bC5nZXRHcmFwaERpdih0KSxuZXcgUHJvbWlzZShmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4odCl7dmFyIGU9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCkuZGlzcGxheTtyZXR1cm4hZXx8XCJub25lXCI9PT1lfXQmJiFuKHQpfHxyKG5ldyBFcnJvcihcIlJlc2l6ZSBtdXN0IGJlIHBhc3NlZCBhIGRpc3BsYXllZCBwbG90IGRpdiBlbGVtZW50LlwiKSksdC5fcmVkcmF3VGltZXImJmNsZWFyVGltZW91dCh0Ll9yZWRyYXdUaW1lciksdC5fcmVkcmF3VGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2lmKCF0LmxheW91dHx8dC5sYXlvdXQud2lkdGgmJnQubGF5b3V0LmhlaWdodHx8bih0KSllKHQpO2Vsc2V7ZGVsZXRlIHQubGF5b3V0LndpZHRoLGRlbGV0ZSB0LmxheW91dC5oZWlnaHQ7dmFyIHI9dC5jaGFuZ2VkO3QuYXV0b3BsYXk9ITAsYS5jYWxsKFwicmVsYXlvdXRcIix0LHthdXRvc2l6ZTohMH0pLnRoZW4oZnVuY3Rpb24oKXt0LmNoYW5nZWQ9cixlKHQpfSl9fSwxMDApfSl9LHYucHJldmlvdXNQcm9taXNlcz1mdW5jdGlvbih0KXtpZigodC5fcHJvbWlzZXN8fFtdKS5sZW5ndGgpcmV0dXJuIFByb21pc2UuYWxsKHQuX3Byb21pc2VzKS50aGVuKGZ1bmN0aW9uKCl7dC5fcHJvbWlzZXM9W119KX0sdi5hZGRMaW5rcz1mdW5jdGlvbih0KXtpZih0Ll9jb250ZXh0LnNob3dMaW5rfHx0Ll9jb250ZXh0LnNob3dTb3VyY2VzKXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9bC5lbnN1cmVTaW5nbGUoZS5fcGFwZXIsXCJ0ZXh0XCIsXCJqcy1wbG90LWxpbmstY29udGFpbmVyXCIsZnVuY3Rpb24odCl7dC5zdHlsZSh7XCJmb250LWZhbWlseVwiOidcIk9wZW4gU2Fuc1wiLCBBcmlhbCwgc2Fucy1zZXJpZicsXCJmb250LXNpemVcIjpcIjEycHhcIixmaWxsOmMuZGVmYXVsdExpbmUsXCJwb2ludGVyLWV2ZW50c1wiOlwiYWxsXCJ9KS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7dC5hcHBlbmQoXCJ0c3BhblwiKS5jbGFzc2VkKFwianMtbGluay10by10b29sXCIsITApLHQuYXBwZW5kKFwidHNwYW5cIikuY2xhc3NlZChcImpzLWxpbmstc3BhY2VyXCIsITApLHQuYXBwZW5kKFwidHNwYW5cIikuY2xhc3NlZChcImpzLXNvdXJjZWxpbmtzXCIsITApfSl9KSxpPXIubm9kZSgpLGE9e3k6ZS5fcGFwZXIuYXR0cihcImhlaWdodFwiKS05fTtkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGkpJiZpLmdldENvbXB1dGVkVGV4dExlbmd0aCgpPj1lLndpZHRoLTIwPyhhW1widGV4dC1hbmNob3JcIl09XCJzdGFydFwiLGEueD01KTooYVtcInRleHQtYW5jaG9yXCJdPVwiZW5kXCIsYS54PWUuX3BhcGVyLmF0dHIoXCJ3aWR0aFwiKS03KSxyLmF0dHIoYSk7dmFyIG89ci5zZWxlY3QoXCIuanMtbGluay10by10b29sXCIpLHM9ci5zZWxlY3QoXCIuanMtbGluay1zcGFjZXJcIiksdT1yLnNlbGVjdChcIi5qcy1zb3VyY2VsaW5rc1wiKTt0Ll9jb250ZXh0LnNob3dTb3VyY2VzJiZ0Ll9jb250ZXh0LnNob3dTb3VyY2VzKHQpLHQuX2NvbnRleHQuc2hvd0xpbmsmJmZ1bmN0aW9uKHQsZSl7ZS50ZXh0KFwiXCIpO3ZhciByPWUuYXBwZW5kKFwiYVwiKS5hdHRyKHtcInhsaW5rOnhsaW5rOmhyZWZcIjpcIiNcIixjbGFzczpcImxpbmstLWltcHQgbGluay0tZW1iZWR2aWV3XCIsXCJmb250LXdlaWdodFwiOlwiYm9sZFwifSkudGV4dCh0Ll9jb250ZXh0LmxpbmtUZXh0K1wiIFwiK1N0cmluZy5mcm9tQ2hhckNvZGUoMTg3KSk7aWYodC5fY29udGV4dC5zZW5kRGF0YSlyLm9uKFwiY2xpY2tcIixmdW5jdGlvbigpe3Yuc2VuZERhdGFUb0Nsb3VkKHQpfSk7ZWxzZXt2YXIgbj13aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3BsaXQoXCIvXCIpLGk9d2luZG93LmxvY2F0aW9uLnNlYXJjaDtyLmF0dHIoe1wieGxpbms6eGxpbms6c2hvd1wiOlwibmV3XCIsXCJ4bGluazp4bGluazpocmVmXCI6XCIvXCIrblsyXS5zcGxpdChcIi5cIilbMF0rXCIvXCIrblsxXStpfSl9fSh0LG8pLHMudGV4dChvLnRleHQoKSYmdS50ZXh0KCk/XCIgLSBcIjpcIlwiKX19LHYuc2VuZERhdGFUb0Nsb3VkPWZ1bmN0aW9uKHQpe3QuZW1pdChcInBsb3RseV9iZWZvcmVleHBvcnRcIik7dmFyIGU9KHdpbmRvdy5QTE9UTFlFTlZ8fHt9KS5CQVNFX1VSTHx8dC5fY29udGV4dC5wbG90bHlTZXJ2ZXJVUkwscj1uLnNlbGVjdCh0KS5hcHBlbmQoXCJkaXZcIikuYXR0cihcImlkXCIsXCJoaWRkZW5mb3JtXCIpLnN0eWxlKFwiZGlzcGxheVwiLFwibm9uZVwiKSxpPXIuYXBwZW5kKFwiZm9ybVwiKS5hdHRyKHthY3Rpb246ZStcIi9leHRlcm5hbFwiLG1ldGhvZDpcInBvc3RcIix0YXJnZXQ6XCJfYmxhbmtcIn0pO3JldHVybiBpLmFwcGVuZChcImlucHV0XCIpLmF0dHIoe3R5cGU6XCJ0ZXh0XCIsbmFtZTpcImRhdGFcIn0pLm5vZGUoKS52YWx1ZT12LmdyYXBoSnNvbih0LCExLFwia2VlcGRhdGFcIiksaS5ub2RlKCkuc3VibWl0KCksci5yZW1vdmUoKSx0LmVtaXQoXCJwbG90bHlfYWZ0ZXJleHBvcnRcIiksITF9O3ZhciB4PVtcImRheXNcIixcInNob3J0RGF5c1wiLFwibW9udGhzXCIsXCJzaG9ydE1vbnRoc1wiLFwicGVyaW9kc1wiLFwiZGF0ZVRpbWVcIixcImRhdGVcIixcInRpbWVcIixcImRlY2ltYWxcIixcInRob3VzYW5kc1wiLFwiZ3JvdXBpbmdcIixcImN1cnJlbmN5XCJdLGI9W1wieWVhclwiLFwibW9udGhcIixcImRheU1vbnRoXCIsXCJkYXlNb250aFllYXJcIl07ZnVuY3Rpb24gXyh0LGUpe3ZhciByPXQuX2NvbnRleHQubG9jYWxlLG49ITEsaT17fTtmdW5jdGlvbiBvKHQpe2Zvcih2YXIgcj0hMCxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBvPWVbYV07aVtvXXx8KHRbb10/aVtvXT10W29dOnI9ITEpfXImJihuPSEwKX1mb3IodmFyIHM9MDtzPDI7cysrKXtmb3IodmFyIGw9dC5fY29udGV4dC5sb2NhbGVzLGM9MDtjPDI7YysrKXt2YXIgdT0obFtyXXx8e30pLmZvcm1hdDtpZih1JiYobyh1KSxuKSlicmVhaztsPWEubG9jYWxlUmVnaXN0cnl9dmFyIGg9ci5zcGxpdChcIi1cIilbMF07aWYobnx8aD09PXIpYnJlYWs7cj1ofXJldHVybiBufHxvKGEubG9jYWxlUmVnaXN0cnkuZW4uZm9ybWF0KSxpfWZ1bmN0aW9uIHcodCxlKXt2YXIgcj17X2Z1bGxMYXlvdXQ6ZX0sbj1cInhcIj09PXQuX2lkLmNoYXJBdCgwKSxpPXQuX21haW5BeGlzLl9hbmNob3JBeGlzLGE9XCJcIixvPVwiXCIscz1cIlwiO2lmKGkmJihzPWkuX21haW5BeGlzLl9pZCxhPW4/dC5faWQrczpzK3QuX2lkKSwhYXx8IWUuX3Bsb3RzW2FdKXthPVwiXCI7Zm9yKHZhciBsPXQuX2NvdW50ZXJBeGVzLGM9MDtjPGwubGVuZ3RoO2MrKyl7dmFyIHU9bFtjXSxmPW4/dC5faWQrdTp1K3QuX2lkO298fChvPWYpO3ZhciBwPWguZ2V0RnJvbUlkKHIsdSk7aWYocyYmcC5vdmVybGF5aW5nPT09cyl7YT1mO2JyZWFrfX19cmV0dXJuIGF8fG99ZnVuY3Rpb24gayh0KXt2YXIgZT10LnRyYW5zZm9ybXM7aWYoQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGgpZm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl0saT1uLl9tb2R1bGV8fG1bbi50eXBlXTtpZihpJiZpLm1ha2VzRGF0YSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBBKHQsZSxyLG4pe2Zvcih2YXIgaT10LnRyYW5zZm9ybXMsYT1bdF0sbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz1pW29dLGw9bVtzLnR5cGVdO2wmJmwudHJhbnNmb3JtJiYoYT1sLnRyYW5zZm9ybShhLHt0cmFuc2Zvcm06cyxmdWxsVHJhY2U6dCxmdWxsRGF0YTplLGxheW91dDpyLGZ1bGxMYXlvdXQ6bix0cmFuc2Zvcm1JbmRleDpvfSkpfXJldHVybiBhfWZ1bmN0aW9uIFQodCl7dmFyIGU9dC5tYXJnaW47aWYoIXQuX3NpemUpe3ZhciByPXQuX3NpemU9e2w6TWF0aC5yb3VuZChlLmwpLHI6TWF0aC5yb3VuZChlLnIpLHQ6TWF0aC5yb3VuZChlLnQpLGI6TWF0aC5yb3VuZChlLmIpLHA6TWF0aC5yb3VuZChlLnBhZCl9O3Iudz1NYXRoLnJvdW5kKHQud2lkdGgpLXIubC1yLnIsci5oPU1hdGgucm91bmQodC5oZWlnaHQpLXIudC1yLmJ9dC5fcHVzaG1hcmdpbnx8KHQuX3B1c2htYXJnaW49e30pLHQuX3B1c2htYXJnaW5JZHN8fCh0Ll9wdXNobWFyZ2luSWRzPXt9KX1mdW5jdGlvbiBNKHQsZSxyKXt2YXIgbj0hMTt2YXIgaT1bdi5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7aWYodC5fdHJhbnNpdGlvbkRhdGEpcmV0dXJuIHQuX3RyYW5zaXRpb25pbmc9ITEsZnVuY3Rpb24odCl7dmFyIGU9UHJvbWlzZS5yZXNvbHZlKCk7aWYoIXQpcmV0dXJuIGU7Zm9yKDt0Lmxlbmd0aDspZT1lLnRoZW4odC5zaGlmdCgpKTtyZXR1cm4gZX0odC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcyl9LHIucHJlcGFyZUZuLHYucmVob3ZlcixmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoXCJwbG90bHlfdHJhbnNpdGlvbmluZ1wiLFtdKSxuZXcgUHJvbWlzZShmdW5jdGlvbihpKXt0Ll90cmFuc2l0aW9uaW5nPSEwLGUuZHVyYXRpb24+MCYmKHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb249ITApLHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MucHVzaChmdW5jdGlvbigpe249ITB9KSxyLnJlZHJhdyYmdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIGEuY2FsbChcInJlZHJhd1wiLHQpfSksdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uKCl7dC5lbWl0KFwicGxvdGx5X3RyYW5zaXRpb25pbnRlcnJ1cHRlZFwiLFtdKX0pO3ZhciBvPTAscz0wO2Z1bmN0aW9uIGwoKXtyZXR1cm4gbysrLGZ1bmN0aW9uKCl7dmFyIGU7cysrLG58fHMhPT1vfHwoZT1pLHQuX3RyYW5zaXRpb25EYXRhJiYoZnVuY3Rpb24odCl7aWYodClmb3IoO3QubGVuZ3RoOyl0LnNoaWZ0KCl9KHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtpZihyLnJlZHJhdylyZXR1cm4gYS5jYWxsKFwicmVkcmF3XCIsdCl9KS50aGVuKGZ1bmN0aW9uKCl7dC5fdHJhbnNpdGlvbmluZz0hMSx0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uPSExLHQuZW1pdChcInBsb3RseV90cmFuc2l0aW9uZWRcIixbXSl9KS50aGVuKGUpKSl9fXIucnVuRm4obCksc2V0VGltZW91dChsKCkpfSl9XSxvPWwuc3luY09yQXN5bmMoaSx0KTtyZXR1cm4gbyYmby50aGVufHwobz1Qcm9taXNlLnJlc29sdmUoKSksby50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KX1mdW5jdGlvbiBTKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5jbGVhckNhbGMoKSxcIm11bHRpY2F0ZWdvcnlcIj09PW4udHlwZSYmbi5zZXR1cE11bHRpQ2F0ZWdvcnkoZSl9fXYuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lJiZlLnNraXBVcGRhdGVDYWxjLGk9dC5fZnVsbExheW91dHx8e307aWYoaS5fc2tpcERlZmF1bHRzKWRlbGV0ZSBpLl9za2lwRGVmYXVsdHM7ZWxzZXt2YXIgbyxzPXQuX2Z1bGxMYXlvdXQ9e30sYz10LmxheW91dHx8e30sdT10Ll9mdWxsRGF0YXx8W10saD10Ll9mdWxsRGF0YT1bXSxmPXQuZGF0YXx8W10scD10LmNhbGNkYXRhfHxbXSxtPXQuX2NvbnRleHR8fHt9O3QuX3RyYW5zaXRpb25EYXRhfHx2LmNyZWF0ZVRyYW5zaXRpb25EYXRhKHQpLHMuX2RmbHRUaXRsZT17cGxvdDpnKHQsXCJDbGljayB0byBlbnRlciBQbG90IHRpdGxlXCIpLHg6Zyh0LFwiQ2xpY2sgdG8gZW50ZXIgWCBheGlzIHRpdGxlXCIpLHk6Zyh0LFwiQ2xpY2sgdG8gZW50ZXIgWSBheGlzIHRpdGxlXCIpLGNvbG9yYmFyOmcodCxcIkNsaWNrIHRvIGVudGVyIENvbG9yc2NhbGUgdGl0bGVcIiksYW5ub3RhdGlvbjpnKHQsXCJuZXcgdGV4dFwiKX0scy5fdHJhY2VXb3JkPWcodCxcInRyYWNlXCIpO3ZhciB5PV8odCx4KTtpZihzLl9tYXBib3hBY2Nlc3NUb2tlbj1tLm1hcGJveEFjY2Vzc1Rva2VuLGkuX2luaXRpYWxBdXRvU2l6ZUlzRG9uZSl7dmFyIHc9aS53aWR0aCxrPWkuaGVpZ2h0O3Yuc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHMoYyxzLHkpLGMud2lkdGh8fChzLndpZHRoPXcpLGMuaGVpZ2h0fHwocy5oZWlnaHQ9ayksdi5zYW5pdGl6ZU1hcmdpbnMocyl9ZWxzZXt2LnN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzKGMscyx5KTt2YXIgQT0hYy53aWR0aHx8IWMuaGVpZ2h0LE09cy5hdXRvc2l6ZSxTPW0uYXV0b3NpemFibGU7QSYmKE18fFMpP3YucGxvdEF1dG9TaXplKHQsYyxzKTpBJiZ2LnNhbml0aXplTWFyZ2lucyhzKSwhTSYmQSYmKGMud2lkdGg9cy53aWR0aCxjLmhlaWdodD1zLmhlaWdodCl9cy5fZDNsb2NhbGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kZWNpbWFsPWUuY2hhckF0KDApLHQudGhvdXNhbmRzPWUuY2hhckF0KDEpLG4ubG9jYWxlKHQpfSh5LHMuc2VwYXJhdG9ycykscy5fZXh0cmFGb3JtYXQ9Xyh0LGIpLHMuX2luaXRpYWxBdXRvU2l6ZUlzRG9uZT0hMCxzLl9kYXRhTGVuZ3RoPWYubGVuZ3RoLHMuX21vZHVsZXM9W10scy5fdmlzaWJsZU1vZHVsZXM9W10scy5fYmFzZVBsb3RNb2R1bGVzPVtdO3ZhciBFPXMuX3N1YnBsb3RzPWZ1bmN0aW9uKCl7dmFyIHQsZSxyPWEuY29sbGVjdGFibGVTdWJwbG90VHlwZXMsbj17fTtpZighcil7cj1bXTt2YXIgaT1hLnN1YnBsb3RzUmVnaXN0cnk7Zm9yKHZhciBvIGluIGkpe3ZhciBzPWlbb10sYz1zLmF0dHI7aWYoYyYmKHIucHVzaChvKSxBcnJheS5pc0FycmF5KGMpKSlmb3IoZT0wO2U8Yy5sZW5ndGg7ZSsrKWwucHVzaFVuaXF1ZShyLGNbZV0pfX1mb3IodD0wO3Q8ci5sZW5ndGg7dCsrKW5bclt0XV09W107cmV0dXJuIG59KCksQz1zLl9zcGxvbUF4ZXM9e3g6e30seTp7fX0sTD1zLl9zcGxvbVN1YnBsb3RzPXt9O3MuX3NwbG9tR3JpZERmbHQ9e30scy5fc2NhdHRlclN0YWNrT3B0cz17fSxzLl9maXJzdFNjYXR0ZXI9e30scy5fYWxpZ25tZW50T3B0cz17fSxzLl9yZXF1ZXN0UmFuZ2VzbGlkZXI9e30scy5fdHJhY2VVaWRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPWUubGVuZ3RoLGE9W107Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG89dFtyXS5fZnVsbElucHV0O28hPT1uJiZhLnB1c2gobyksbj1vfXZhciBzPWEubGVuZ3RoLGM9bmV3IEFycmF5KGkpLHU9e307ZnVuY3Rpb24gaCh0LGUpe2NbZV09dCx1W3RdPTF9ZnVuY3Rpb24gZih0LGUpe2lmKHQmJlwic3RyaW5nXCI9PXR5cGVvZiB0JiYhdVt0XSlyZXR1cm4gaCh0LGUpLCEwfWZvcihyPTA7cjxpO3IrKyl7dmFyIHA9ZVtyXS51aWQ7XCJudW1iZXJcIj09dHlwZW9mIHAmJihwPVN0cmluZyhwKSksZihwLHIpfHwocjxzJiZmKGFbcl0udWlkLHIpfHxoKGwucmFuZHN0cih1KSxyKSl9cmV0dXJuIGN9KHUsZikscy5fZ2xvYmFsVHJhbnNmb3Jtcz0odC5fY29udGV4dHx8e30pLmdsb2JhbFRyYW5zZm9ybXMsdi5zdXBwbHlEYXRhRGVmYXVsdHMoZixoLGMscyk7dmFyIHo9T2JqZWN0LmtleXMoQy54KSxPPU9iamVjdC5rZXlzKEMueSk7aWYoei5sZW5ndGg+MSYmTy5sZW5ndGg+MSl7Zm9yKGEuZ2V0Q29tcG9uZW50TWV0aG9kKFwiZ3JpZFwiLFwic2l6ZURlZmF1bHRzXCIpKGMscyksbz0wO288ei5sZW5ndGg7bysrKWwucHVzaFVuaXF1ZShFLnhheGlzLHpbb10pO2ZvcihvPTA7bzxPLmxlbmd0aDtvKyspbC5wdXNoVW5pcXVlKEUueWF4aXMsT1tvXSk7Zm9yKHZhciBJIGluIEwpbC5wdXNoVW5pcXVlKEUuY2FydGVzaWFuLEkpfWlmKHMuX2hhcz12Ll9oYXNQbG90VHlwZS5iaW5kKHMpLHUubGVuZ3RoPT09aC5sZW5ndGgpZm9yKG89MDtvPGgubGVuZ3RoO28rKylkKGhbb10sdVtvXSk7di5zdXBwbHlMYXlvdXRNb2R1bGVEZWZhdWx0cyhjLHMsaCx0Ll90cmFuc2l0aW9uRGF0YSk7dmFyIEQ9cy5fdmlzaWJsZU1vZHVsZXMsUD1bXTtmb3Iobz0wO288RC5sZW5ndGg7bysrKXt2YXIgUj1EW29dLmNyb3NzVHJhY2VEZWZhdWx0cztSJiZsLnB1c2hVbmlxdWUoUCxSKX1mb3Iobz0wO288UC5sZW5ndGg7bysrKVBbb10oaCxzKTthLmdldENvbXBvbmVudE1ldGhvZChcImNvbG9yc2NhbGVcIixcImNyb3NzVHJhY2VEZWZhdWx0c1wiKShoLHMpLHMuX2hhc09ubHlMYXJnZVNwbG9tcz0xPT09cy5fYmFzZVBsb3RNb2R1bGVzLmxlbmd0aCYmXCJzcGxvbVwiPT09cy5fYmFzZVBsb3RNb2R1bGVzWzBdLm5hbWUmJnoubGVuZ3RoPjE1JiZPLmxlbmd0aD4xNSYmMD09PXMuc2hhcGVzLmxlbmd0aCYmMD09PXMuaW1hZ2VzLmxlbmd0aCxzLl9oYXNDYXJ0ZXNpYW49cy5faGFzKFwiY2FydGVzaWFuXCIpLHMuX2hhc0dlbz1zLl9oYXMoXCJnZW9cIikscy5faGFzR0wzRD1zLl9oYXMoXCJnbDNkXCIpLHMuX2hhc0dMMkQ9cy5faGFzKFwiZ2wyZFwiKSxzLl9oYXNUZXJuYXJ5PXMuX2hhcyhcInRlcm5hcnlcIikscy5faGFzUGllPXMuX2hhcyhcInBpZVwiKSx2LmxpbmtTdWJwbG90cyhoLHMsdSxpKSx2LmNsZWFuUGxvdChoLHMsdSxpKSxpLl96b29tbGF5ZXImJiF0Ll9kcmFnZ2luZyYmaS5fem9vbWxheWVyLnNlbGVjdEFsbChcIi5zZWxlY3Qtb3V0bGluZVwiKS5yZW1vdmUoKSxkKHMsaSkscy5fcHJlR1VJfHwocy5fcHJlR1VJPXt9KSxzLl90cmFjZVByZUdVSXx8KHMuX3RyYWNlUHJlR1VJPXt9KTt2YXIgRixCPXMuX3RyYWNlUHJlR1VJLE49e307Zm9yKEYgaW4gQilOW0ZdPVwib2xkXCI7Zm9yKG89MDtvPGgubGVuZ3RoO28rKylOW0Y9aFtvXS5fZnVsbElucHV0LnVpZF18fChCW0ZdPXt9KSxOW0ZdPVwibmV3XCI7Zm9yKEYgaW4gTilcIm9sZFwiPT09TltGXSYmZGVsZXRlIEJbRl07VChzKSxhLmdldENvbXBvbmVudE1ldGhvZChcInJhbmdlc2xpZGVyXCIsXCJtYWtlRGF0YVwiKShzKSxyfHxwLmxlbmd0aCE9PWgubGVuZ3RofHx2LnN1cHBseURlZmF1bHRzVXBkYXRlQ2FsYyhwLGgpfX0sdi5zdXBwbHlEZWZhdWx0c1VwZGF0ZUNhbGM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXSxpPSh0W3JdfHxbXSlbMF07aWYoaSYmaS50cmFjZSl7dmFyIGE9aS50cmFjZTtpZihhLl9oYXNDYWxjVHJhbnNmb3JtKXt2YXIgbyxzLGMsdT1hLl9hcnJheUF0dHJzO2ZvcihvPTA7bzx1Lmxlbmd0aDtvKyspcz11W29dLGM9bC5uZXN0ZWRQcm9wZXJ0eShhLHMpLmdldCgpLnNsaWNlKCksbC5uZXN0ZWRQcm9wZXJ0eShuLHMpLnNldChjKX1pLnRyYWNlPW59fX0sdi5jcmVhdGVUcmFuc2l0aW9uRGF0YT1mdW5jdGlvbih0KXt0Ll90cmFuc2l0aW9uRGF0YXx8KHQuX3RyYW5zaXRpb25EYXRhPXt9KSx0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzfHwodC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcz1bXSksdC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaHx8KHQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g9e30pLHQuX3RyYW5zaXRpb25EYXRhLl9jb3VudGVyfHwodC5fdHJhbnNpdGlvbkRhdGEuX2NvdW50ZXI9MCksdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrc3x8KHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3M9W10pfSx2Ll9oYXNQbG90VHlwZT1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuX2Jhc2VQbG90TW9kdWxlc3x8W107Zm9yKGU9MDtlPHIubGVuZ3RoO2UrKylpZihyW2VdLm5hbWU9PT10KXJldHVybiEwO3ZhciBuPXRoaXMuX21vZHVsZXN8fFtdO2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspe3ZhciBpPW5bZV0ubmFtZTtpZihpPT09dClyZXR1cm4hMDt2YXIgbz1hLm1vZHVsZXNbaV07aWYobyYmby5jYXRlZ29yaWVzW3RdKXJldHVybiEwfXJldHVybiExfSx2LmNsZWFuUGxvdD1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG89bi5fYmFzZVBsb3RNb2R1bGVzfHxbXTtmb3IoaT0wO2k8by5sZW5ndGg7aSsrKXt2YXIgcz1vW2ldO3MuY2xlYW4mJnMuY2xlYW4odCxlLHIsbil9dmFyIGw9bi5faGFzJiZuLl9oYXMoXCJnbFwiKSxjPWUuX2hhcyYmZS5faGFzKFwiZ2xcIik7bCYmIWMmJnZvaWQgMCE9PW4uX2dsY29udGFpbmVyJiYobi5fZ2xjb250YWluZXIuc2VsZWN0QWxsKFwiLmdsLWNhbnZhc1wiKS5yZW1vdmUoKSxuLl9nbGNvbnRhaW5lci5zZWxlY3RBbGwoXCIubm8td2ViZ2xcIikucmVtb3ZlKCksbi5fZ2xjYW52YXM9bnVsbCk7dmFyIHU9ISFuLl9pbmZvbGF5ZXI7dDpmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgaD1yW2ldLnVpZDtmb3IoYT0wO2E8dC5sZW5ndGg7YSsrKXtpZihoPT09dFthXS51aWQpY29udGludWUgdH11JiZuLl9pbmZvbGF5ZXIuc2VsZWN0KFwiLmNiXCIraCkucmVtb3ZlKCl9fSx2LmxpbmtTdWJwbG90cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG89bi5fcGxvdHN8fHt9LHM9ZS5fcGxvdHM9e30sYz1lLl9zdWJwbG90cyx1PXtfZnVsbERhdGE6dCxfZnVsbExheW91dDplfSxmPWMuY2FydGVzaWFuLmNvbmNhdChjLmdsMmR8fFtdKTtmb3IoaT0wO2k8Zi5sZW5ndGg7aSsrKXt2YXIgcCxkPWZbaV0sZz1vW2RdLHY9aC5nZXRGcm9tSWQodSxkLFwieFwiKSxtPWguZ2V0RnJvbUlkKHUsZCxcInlcIik7Zm9yKGc/cD1zW2RdPWc6KHA9c1tkXT17fSkuaWQ9ZCx2Ll9jb3VudGVyQXhlcy5wdXNoKG0uX2lkKSxtLl9jb3VudGVyQXhlcy5wdXNoKHYuX2lkKSx2Ll9zdWJwbG90c1dpdGgucHVzaChkKSxtLl9zdWJwbG90c1dpdGgucHVzaChkKSxwLnhheGlzPXYscC55YXhpcz1tLHAuX2hhc0NsaXBPbkF4aXNGYWxzZT0hMSxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciB5PXRbYV07aWYoeS54YXhpcz09PXAueGF4aXMuX2lkJiZ5LnlheGlzPT09cC55YXhpcy5faWQmJiExPT09eS5jbGlwb25heGlzKXtwLl9oYXNDbGlwT25BeGlzRmFsc2U9ITA7YnJlYWt9fX12YXIgeCxiPWgubGlzdCh1LG51bGwsITApO2ZvcihpPTA7aTxiLmxlbmd0aDtpKyspe3ZhciBfPW51bGw7KHg9YltpXSkub3ZlcmxheWluZyYmKF89aC5nZXRGcm9tSWQodSx4Lm92ZXJsYXlpbmcpKSYmXy5vdmVybGF5aW5nJiYoeC5vdmVybGF5aW5nPSExLF89bnVsbCkseC5fbWFpbkF4aXM9X3x8eCxfJiYoeC5kb21haW49Xy5kb21haW4uc2xpY2UoKSkseC5fYW5jaG9yQXhpcz1cImZyZWVcIj09PXguYW5jaG9yP251bGw6aC5nZXRGcm9tSWQodSx4LmFuY2hvcil9Zm9yKGk9MDtpPGIubGVuZ3RoO2krKykoeD1iW2ldKS5fY291bnRlckF4ZXMuc29ydChoLmlkU29ydCkseC5fc3VicGxvdHNXaXRoLnNvcnQobC5zdWJwbG90U29ydCkseC5fbWFpblN1YnBsb3Q9dyh4LGUpfSx2LmNsZWFyRXhwYW5kZWRUcmFjZURlZmF1bHRDb2xvcnM9ZnVuY3Rpb24odCl7dmFyIGUscixuO2ZvcihyPVtdLChlPXQuX21vZHVsZS5fY29sb3JBdHRycyl8fCh0Ll9tb2R1bGUuX2NvbG9yQXR0cnM9ZT1bXSxvLmNyYXdsKHQuX21vZHVsZS5hdHRyaWJ1dGVzLGZ1bmN0aW9uKHQsbixpLGEpe3JbYV09bixyLmxlbmd0aD1hKzEsXCJjb2xvclwiPT09dC52YWxUeXBlJiZ2b2lkIDA9PT10LmRmbHQmJmUucHVzaChyLmpvaW4oXCIuXCIpKX0pKSxuPTA7bjxlLmxlbmd0aDtuKyspe2wubmVzdGVkUHJvcGVydHkodCxcIl9pbnB1dC5cIitlW25dKS5nZXQoKXx8bC5uZXN0ZWRQcm9wZXJ0eSh0LGVbbl0pLnNldChudWxsKX19LHYuc3VwcGx5RGF0YURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLG8sYyx1PW4uX21vZHVsZXMsaD1uLl92aXNpYmxlTW9kdWxlcyxmPW4uX2Jhc2VQbG90TW9kdWxlcyxwPTAsZz0wO2Z1bmN0aW9uIG0odCl7ZS5wdXNoKHQpO3ZhciByPXQuX21vZHVsZTtyJiYobC5wdXNoVW5pcXVlKHUsciksITA9PT10LnZpc2libGUmJmwucHVzaFVuaXF1ZShoLHIpLGwucHVzaFVuaXF1ZShmLHQuX21vZHVsZS5iYXNlUGxvdE1vZHVsZSkscCsrLCExIT09dC5faW5wdXQudmlzaWJsZSYmZysrKX1uLl90cmFuc2Zvcm1Nb2R1bGVzPVtdO3ZhciB5PXt9LHg9W10sYj0oci50ZW1wbGF0ZXx8e30pLmRhdGF8fHt9LF89cy50cmFjZVRlbXBsYXRlcihiKTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKXtpZihjPXRbaV0sKG89Xy5uZXdUcmFjZShjKSkudWlkPW4uX3RyYWNlVWlkc1tpXSx2LnN1cHBseVRyYWNlRGVmYXVsdHMoYyxvLGcsbixpKSxvLmluZGV4PWksby5faW5wdXQ9YyxvLl9leHBhbmRlZEluZGV4PXAsby50cmFuc2Zvcm1zJiZvLnRyYW5zZm9ybXMubGVuZ3RoKWZvcih2YXIgdz0hMSE9PWMudmlzaWJsZSYmITE9PT1vLnZpc2libGUsaz1BKG8sZSxyLG4pLFQ9MDtUPGsubGVuZ3RoO1QrKyl7dmFyIE09a1tUXSxTPXtfdGVtcGxhdGU6by5fdGVtcGxhdGUsdHlwZTpvLnR5cGUsdWlkOm8udWlkK1R9O3cmJiExPT09TS52aXNpYmxlJiZkZWxldGUgTS52aXNpYmxlLHYuc3VwcGx5VHJhY2VEZWZhdWx0cyhNLFMscCxuLGkpLGQoUyxNKSxTLmluZGV4PWksUy5faW5wdXQ9YyxTLl9mdWxsSW5wdXQ9byxTLl9leHBhbmRlZEluZGV4PXAsUy5fZXhwYW5kZWRJbnB1dD1NLG0oUyl9ZWxzZSBvLl9mdWxsSW5wdXQ9byxvLl9leHBhbmRlZElucHV0PW8sbShvKTthLnRyYWNlSXMobyxcImNhcnBldEF4aXNcIikmJih5W28uY2FycGV0XT1vKSxhLnRyYWNlSXMobyxcImNhcnBldERlcGVuZGVudFwiKSYmeC5wdXNoKGkpfWZvcihpPTA7aTx4Lmxlbmd0aDtpKyspaWYoKG89ZVt4W2ldXSkudmlzaWJsZSl7dmFyIEU9eVtvLmNhcnBldF07by5fY2FycGV0PUUsRSYmRS52aXNpYmxlPyhvLnhheGlzPUUueGF4aXMsby55YXhpcz1FLnlheGlzKTpvLnZpc2libGU9ITF9fSx2LnN1cHBseUFuaW1hdGlvbkRlZmF1bHRzPWZ1bmN0aW9uKHQpe3ZhciBlO3Q9dHx8e307dmFyIHI9e307ZnVuY3Rpb24gbihlLG4pe3JldHVybiBsLmNvZXJjZSh0fHx7fSxyLGYsZSxuKX1pZihuKFwibW9kZVwiKSxuKFwiZGlyZWN0aW9uXCIpLG4oXCJmcm9tY3VycmVudFwiKSxBcnJheS5pc0FycmF5KHQuZnJhbWUpKWZvcihyLmZyYW1lPVtdLGU9MDtlPHQuZnJhbWUubGVuZ3RoO2UrKylyLmZyYW1lW2VdPXYuc3VwcGx5QW5pbWF0aW9uRnJhbWVEZWZhdWx0cyh0LmZyYW1lW2VdfHx7fSk7ZWxzZSByLmZyYW1lPXYuc3VwcGx5QW5pbWF0aW9uRnJhbWVEZWZhdWx0cyh0LmZyYW1lfHx7fSk7aWYoQXJyYXkuaXNBcnJheSh0LnRyYW5zaXRpb24pKWZvcihyLnRyYW5zaXRpb249W10sZT0wO2U8dC50cmFuc2l0aW9uLmxlbmd0aDtlKyspci50cmFuc2l0aW9uW2VdPXYuc3VwcGx5QW5pbWF0aW9uVHJhbnNpdGlvbkRlZmF1bHRzKHQudHJhbnNpdGlvbltlXXx8e30pO2Vsc2Ugci50cmFuc2l0aW9uPXYuc3VwcGx5QW5pbWF0aW9uVHJhbnNpdGlvbkRlZmF1bHRzKHQudHJhbnNpdGlvbnx8e30pO3JldHVybiByfSx2LnN1cHBseUFuaW1hdGlvbkZyYW1lRGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gcihyLG4pe3JldHVybiBsLmNvZXJjZSh0fHx7fSxlLGYuZnJhbWUscixuKX1yZXR1cm4gcihcImR1cmF0aW9uXCIpLHIoXCJyZWRyYXdcIiksZX0sdi5zdXBwbHlBbmltYXRpb25UcmFuc2l0aW9uRGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gcihyLG4pe3JldHVybiBsLmNvZXJjZSh0fHx7fSxlLGYudHJhbnNpdGlvbixyLG4pfXJldHVybiByKFwiZHVyYXRpb25cIikscihcImVhc2luZ1wiKSxlfSx2LnN1cHBseUZyYW1lRGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gcihyLG4pe3JldHVybiBsLmNvZXJjZSh0LGUscCxyLG4pfXJldHVybiByKFwiZ3JvdXBcIikscihcIm5hbWVcIikscihcInRyYWNlc1wiKSxyKFwiYmFzZWZyYW1lXCIpLHIoXCJkYXRhXCIpLHIoXCJsYXlvdXRcIiksZX0sdi5zdXBwbHlUcmFjZURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG8scz1uLmNvbG9yd2F5fHxjLmRlZmF1bHRzLHU9c1tyJXMubGVuZ3RoXTtmdW5jdGlvbiBoKHIsbil7cmV0dXJuIGwuY29lcmNlKHQsZSx2LmF0dHJpYnV0ZXMscixuKX12YXIgZj1oKFwidmlzaWJsZVwiKTtoKFwidHlwZVwiKSxoKFwibmFtZVwiLG4uX3RyYWNlV29yZCtcIiBcIitpKSxoKFwidWlyZXZpc2lvblwiLG4udWlyZXZpc2lvbik7dmFyIHA9di5nZXRNb2R1bGUoZSk7aWYoZS5fbW9kdWxlPXAscCl7dmFyIGQ9cC5iYXNlUGxvdE1vZHVsZSxnPWQuYXR0cixtPWQuYXR0cmlidXRlcztpZihnJiZtKXt2YXIgeT1uLl9zdWJwbG90cyx4PVwiXCI7aWYoXCJnbDJkXCIhPT1kLm5hbWV8fGYpe2lmKEFycmF5LmlzQXJyYXkoZykpZm9yKG89MDtvPGcubGVuZ3RoO28rKyl7dmFyIGI9Z1tvXSxfPWwuY29lcmNlKHQsZSxtLGIpO3lbYl0mJmwucHVzaFVuaXF1ZSh5W2JdLF8pLHgrPV99ZWxzZSB4PWwuY29lcmNlKHQsZSxtLGcpO3lbZC5uYW1lXSYmbC5wdXNoVW5pcXVlKHlbZC5uYW1lXSx4KX19fXJldHVybiBmJiYoaChcImN1c3RvbWRhdGFcIiksaChcImlkc1wiKSxhLnRyYWNlSXMoZSxcInNob3dMZWdlbmRcIik/KGUuX2RmbHRTaG93TGVnZW5kPSEwLGgoXCJzaG93bGVnZW5kXCIpLGgoXCJsZWdlbmRncm91cFwiKSk6ZS5fZGZsdFNob3dMZWdlbmQ9ITEscCYmcC5zdXBwbHlEZWZhdWx0cyh0LGUsdSxuKSxhLnRyYWNlSXMoZSxcIm5vT3BhY2l0eVwiKXx8aChcIm9wYWNpdHlcIiksYS50cmFjZUlzKGUsXCJub3RMZWdlbmRJc29sYXRhYmxlXCIpJiYoZS52aXNpYmxlPSEhZS52aXNpYmxlKSxhLnRyYWNlSXMoZSxcIm5vSG92ZXJcIil8fChlLmhvdmVydGVtcGxhdGV8fGwuY29lcmNlSG92ZXJpbmZvKHQsZSxuKSxcInBhcmNhdHNcIiE9PWUudHlwZSYmYS5nZXRDb21wb25lbnRNZXRob2QoXCJmeFwiLFwic3VwcGx5RGVmYXVsdHNcIikodCxlLHUsbikpLHAmJnAuc2VsZWN0UG9pbnRzJiZoKFwic2VsZWN0ZWRwb2ludHNcIiksdi5zdXBwbHlUcmFuc2Zvcm1EZWZhdWx0cyh0LGUsbikpLGV9LHYuaGFzTWFrZXNEYXRhVHJhbnNmb3JtPWssdi5zdXBwbHlUcmFuc2Zvcm1EZWZhdWx0cz1mdW5jdGlvbih0LGUscil7aWYoZS5fbGVuZ3RofHxrKHQpKXt2YXIgbj1yLl9nbG9iYWxUcmFuc2Zvcm1zfHxbXSxpPXIuX3RyYW5zZm9ybU1vZHVsZXN8fFtdO2lmKEFycmF5LmlzQXJyYXkodC50cmFuc2Zvcm1zKXx8MCE9PW4ubGVuZ3RoKWZvcih2YXIgYT10LnRyYW5zZm9ybXN8fFtdLG89bi5jb25jYXQoYSkscz1lLnRyYW5zZm9ybXM9W10sYz0wO2M8by5sZW5ndGg7YysrKXt2YXIgdSxoPW9bY10sZj1oLnR5cGUscD1tW2ZdLGQ9IShoLl9tb2R1bGUmJmguX21vZHVsZT09PXApLGc9cCYmXCJmdW5jdGlvblwiPT10eXBlb2YgcC50cmFuc2Zvcm07cHx8bC53YXJuKFwiVW5yZWNvZ25pemVkIHRyYW5zZm9ybSB0eXBlIFwiK2YrXCIuXCIpLHAmJnAuc3VwcGx5RGVmYXVsdHMmJihkfHxnKT8oKHU9cC5zdXBwbHlEZWZhdWx0cyhoLGUscix0KSkudHlwZT1mLHUuX21vZHVsZT1wLGwucHVzaFVuaXF1ZShpLHApKTp1PWwuZXh0ZW5kRmxhdCh7fSxoKSxzLnB1c2godSl9fX0sdi5zdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBsLmNvZXJjZSh0LGUsdi5sYXlvdXRBdHRyaWJ1dGVzLHIsbil9dmFyIGk9dC50ZW1wbGF0ZTtsLmlzUGxhaW5PYmplY3QoaSkmJihlLnRlbXBsYXRlPWksZS5fdGVtcGxhdGU9aS5sYXlvdXQsZS5fZGF0YVRlbXBsYXRlPWkuZGF0YSk7dmFyIG89bC5jb2VyY2VGb250KG4sXCJmb250XCIpO24oXCJ0aXRsZS50ZXh0XCIsZS5fZGZsdFRpdGxlLnBsb3QpLGwuY29lcmNlRm9udChuLFwidGl0bGUuZm9udFwiLHtmYW1pbHk6by5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKDEuNCpvLnNpemUpLGNvbG9yOm8uY29sb3J9KSxuKFwidGl0bGUueHJlZlwiKSxuKFwidGl0bGUueXJlZlwiKSxuKFwidGl0bGUueFwiKSxuKFwidGl0bGUueVwiKSxuKFwidGl0bGUueGFuY2hvclwiKSxuKFwidGl0bGUueWFuY2hvclwiKSxuKFwidGl0bGUucGFkLnRcIiksbihcInRpdGxlLnBhZC5yXCIpLG4oXCJ0aXRsZS5wYWQuYlwiKSxuKFwidGl0bGUucGFkLmxcIiksbihcImF1dG9zaXplXCIsISh0LndpZHRoJiZ0LmhlaWdodCkpLG4oXCJ3aWR0aFwiKSxuKFwiaGVpZ2h0XCIpLG4oXCJtYXJnaW4ubFwiKSxuKFwibWFyZ2luLnJcIiksbihcIm1hcmdpbi50XCIpLG4oXCJtYXJnaW4uYlwiKSxuKFwibWFyZ2luLnBhZFwiKSxuKFwibWFyZ2luLmF1dG9leHBhbmRcIiksdC53aWR0aCYmdC5oZWlnaHQmJnYuc2FuaXRpemVNYXJnaW5zKGUpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKFwiZ3JpZFwiLFwic2l6ZURlZmF1bHRzXCIpKHQsZSksbihcInBhcGVyX2JnY29sb3JcIiksbihcInNlcGFyYXRvcnNcIixyLmRlY2ltYWwrci50aG91c2FuZHMpLG4oXCJoaWRlc291cmNlc1wiKSxuKFwiY29sb3J3YXlcIiksbihcImRhdGFyZXZpc2lvblwiKTt2YXIgcz1uKFwidWlyZXZpc2lvblwiKTtuKFwiZWRpdHJldmlzaW9uXCIscyksbihcInNlbGVjdGlvbnJldmlzaW9uXCIscyksbihcIm1vZGViYXIub3JpZW50YXRpb25cIiksbihcIm1vZGViYXIuYmdjb2xvclwiLGMuYWRkT3BhY2l0eShlLnBhcGVyX2JnY29sb3IsLjUpKTt2YXIgdT1jLmNvbnRyYXN0KGMucmdiKGUubW9kZWJhci5iZ2NvbG9yKSk7bihcIm1vZGViYXIuY29sb3JcIixjLmFkZE9wYWNpdHkodSwuMykpLG4oXCJtb2RlYmFyLmFjdGl2ZWNvbG9yXCIsYy5hZGRPcGFjaXR5KHUsLjcpKSxuKFwibW9kZWJhci51aXJldmlzaW9uXCIscyksbihcIm1ldGFcIiksbC5pc1BsYWluT2JqZWN0KHQudHJhbnNpdGlvbikmJihuKFwidHJhbnNpdGlvbi5kdXJhdGlvblwiKSxuKFwidHJhbnNpdGlvbi5lYXNpbmdcIiksbihcInRyYW5zaXRpb24ub3JkZXJpbmdcIikpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKFwiY2FsZW5kYXJzXCIsXCJoYW5kbGVEZWZhdWx0c1wiKSh0LGUsXCJjYWxlbmRhclwiKSxhLmdldENvbXBvbmVudE1ldGhvZChcImZ4XCIsXCJzdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0c1wiKSh0LGUsbil9LHYucGxvdEF1dG9TaXplPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixhLG89dC5fY29udGV4dHx8e30scz1vLmZyYW1lTWFyZ2lucyxjPWwuaXNQbG90RGl2KHQpO2lmKGMmJnQuZW1pdChcInBsb3RseV9hdXRvc2l6ZVwiKSxvLmZpbGxGcmFtZSluPXdpbmRvdy5pbm5lcldpZHRoLGE9d2luZG93LmlubmVySGVpZ2h0LGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9XCJoaWRkZW5cIjtlbHNle3ZhciB1PWM/d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk6e307aWYobj1wYXJzZUZsb2F0KHUud2lkdGgpfHxwYXJzZUZsb2F0KHUubWF4V2lkdGgpfHxyLndpZHRoLGE9cGFyc2VGbG9hdCh1LmhlaWdodCl8fHBhcnNlRmxvYXQodS5tYXhIZWlnaHQpfHxyLmhlaWdodCxpKHMpJiZzPjApe3ZhciBoPTEtMipzO249TWF0aC5yb3VuZChoKm4pLGE9TWF0aC5yb3VuZChoKmEpfX12YXIgZj12LmxheW91dEF0dHJpYnV0ZXMud2lkdGgubWluLHA9di5sYXlvdXRBdHRyaWJ1dGVzLmhlaWdodC5taW47bjxmJiYobj1mKSxhPHAmJihhPXApO3ZhciBkPSFlLndpZHRoJiZNYXRoLmFicyhyLndpZHRoLW4pPjEsZz0hZS5oZWlnaHQmJk1hdGguYWJzKHIuaGVpZ2h0LWEpPjE7KGd8fGQpJiYoZCYmKHIud2lkdGg9biksZyYmKHIuaGVpZ2h0PWEpKSx0Ll9pbml0aWFsQXV0b1NpemV8fCh0Ll9pbml0aWFsQXV0b1NpemU9e3dpZHRoOm4saGVpZ2h0OmF9KSx2LnNhbml0aXplTWFyZ2lucyhyKX0sdi5zdXBwbHlMYXlvdXRNb2R1bGVEZWZhdWx0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxvLHMsYz1hLmNvbXBvbmVudHNSZWdpc3RyeSx1PWUuX2Jhc2VQbG90TW9kdWxlcyxoPWEuc3VicGxvdHNSZWdpc3RyeS5jYXJ0ZXNpYW47Zm9yKGkgaW4gYykocz1jW2ldKS5pbmNsdWRlQmFzZVBsb3QmJnMuaW5jbHVkZUJhc2VQbG90KHQsZSk7Zm9yKHZhciBmIGluIHUubGVuZ3RofHx1LnB1c2goaCksZS5faGFzKFwiY2FydGVzaWFuXCIpJiYoYS5nZXRDb21wb25lbnRNZXRob2QoXCJncmlkXCIsXCJjb250ZW50RGVmYXVsdHNcIikodCxlKSxoLmZpbmFsaXplU3VicGxvdHModCxlKSksZS5fc3VicGxvdHMpZS5fc3VicGxvdHNbZl0uc29ydChsLnN1YnBsb3RTb3J0KTtmb3Iobz0wO288dS5sZW5ndGg7bysrKShzPXVbb10pLnN1cHBseUxheW91dERlZmF1bHRzJiZzLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyKTt2YXIgcD1lLl9tb2R1bGVzO2ZvcihvPTA7bzxwLmxlbmd0aDtvKyspKHM9cFtvXSkuc3VwcGx5TGF5b3V0RGVmYXVsdHMmJnMuc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIpO3ZhciBkPWUuX3RyYW5zZm9ybU1vZHVsZXM7Zm9yKG89MDtvPGQubGVuZ3RoO28rKykocz1kW29dKS5zdXBwbHlMYXlvdXREZWZhdWx0cyYmcy5zdXBwbHlMYXlvdXREZWZhdWx0cyh0LGUscixuKTtmb3IoaSBpbiBjKShzPWNbaV0pLnN1cHBseUxheW91dERlZmF1bHRzJiZzLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyKX0sdi5wdXJnZT1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0fHx7fTt2b2lkIDAhPT1lLl9nbGNvbnRhaW5lciYmKGUuX2dsY29udGFpbmVyLnNlbGVjdEFsbChcIi5nbC1jYW52YXNcIikucmVtb3ZlKCksZS5fZ2xjb250YWluZXIucmVtb3ZlKCksZS5fZ2xjYW52YXM9bnVsbCksdm9pZCAwIT09ZS5fZ2VvY29udGFpbmVyJiZlLl9nZW9jb250YWluZXIucmVtb3ZlKCksZS5fbW9kZUJhciYmZS5fbW9kZUJhci5kZXN0cm95KCksdC5fdHJhbnNpdGlvbkRhdGEmJih0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzJiYodC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5sZW5ndGg9MCksdC5fdHJhbnNpdGlvbkRhdGEuX2FuaW1hdGlvblJhZiYmd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHQuX3RyYW5zaXRpb25EYXRhLl9hbmltYXRpb25SYWYpKSxsLmNsZWFyVGhyb3R0bGUoKSxsLmNsZWFyUmVzcG9uc2l2ZSh0KSxkZWxldGUgdC5kYXRhLGRlbGV0ZSB0LmxheW91dCxkZWxldGUgdC5fZnVsbERhdGEsZGVsZXRlIHQuX2Z1bGxMYXlvdXQsZGVsZXRlIHQuY2FsY2RhdGEsZGVsZXRlIHQuZnJhbWV3b3JrLGRlbGV0ZSB0LmVtcHR5LGRlbGV0ZSB0LmZpZCxkZWxldGUgdC51bmRvcXVldWUsZGVsZXRlIHQudW5kb251bSxkZWxldGUgdC5hdXRvcGxheSxkZWxldGUgdC5jaGFuZ2VkLGRlbGV0ZSB0Ll9wcm9taXNlcyxkZWxldGUgdC5fcmVkcmF3VGltZXIsZGVsZXRlIHQuX2htbHVtY291bnQsZGVsZXRlIHQuX2htcGl4Y291bnQsZGVsZXRlIHQuX3RyYW5zaXRpb25EYXRhLGRlbGV0ZSB0Ll90cmFuc2l0aW9uaW5nLGRlbGV0ZSB0Ll9pbml0aWFsQXV0b1NpemUsZGVsZXRlIHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24sZGVsZXRlIHQuX2RyYWdnaW5nLGRlbGV0ZSB0Ll9kcmFnZ2VkLGRlbGV0ZSB0Ll9kcmFnZGF0YSxkZWxldGUgdC5faG92ZXJkYXRhLGRlbGV0ZSB0Ll9zbmFwc2hvdEluUHJvZ3Jlc3MsZGVsZXRlIHQuX2VkaXRpbmcsZGVsZXRlIHQuX21vdXNlRG93blRpbWUsZGVsZXRlIHQuX2xlZ2VuZE1vdXNlRG93blRpbWUsdC5yZW1vdmVBbGxMaXN0ZW5lcnMmJnQucmVtb3ZlQWxsTGlzdGVuZXJzKCl9LHYuc3R5bGU9ZnVuY3Rpb24odCl7dmFyIGUscj10Ll9mdWxsTGF5b3V0Ll92aXNpYmxlTW9kdWxlcyxuPVtdO2ZvcihlPTA7ZTxyLmxlbmd0aDtlKyspe3ZhciBpPXJbZV07aS5zdHlsZSYmbC5wdXNoVW5pcXVlKG4saS5zdHlsZSl9Zm9yKGU9MDtlPG4ubGVuZ3RoO2UrKyluW2VdKHQpfSx2LnNhbml0aXplTWFyZ2lucz1mdW5jdGlvbih0KXtpZih0JiZ0Lm1hcmdpbil7dmFyIGUscj10LndpZHRoLG49dC5oZWlnaHQsaT10Lm1hcmdpbixhPXItKGkubCtpLnIpLG89bi0oaS50K2kuYik7YTwwJiYoZT0oci0xKS8oaS5sK2kuciksaS5sPU1hdGguZmxvb3IoZSppLmwpLGkucj1NYXRoLmZsb29yKGUqaS5yKSksbzwwJiYoZT0obi0xKS8oaS50K2kuYiksaS50PU1hdGguZmxvb3IoZSppLnQpLGkuYj1NYXRoLmZsb29yKGUqaS5iKSl9fSx2LmNsZWFyQXV0b01hcmdpbklkcz1mdW5jdGlvbih0KXt0Ll9mdWxsTGF5b3V0Ll9wdXNobWFyZ2luSWRzPXt9fSx2LmFsbG93QXV0b01hcmdpbj1mdW5jdGlvbih0LGUpe3QuX2Z1bGxMYXlvdXQuX3B1c2htYXJnaW5JZHNbZV09MX0sdi5hdXRvTWFyZ2luPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Ll9mdWxsTGF5b3V0LGk9bi5fcHVzaG1hcmdpbixhPW4uX3B1c2htYXJnaW5JZHM7aWYoITEhPT1uLm1hcmdpbi5hdXRvZXhwYW5kKXtpZihyKXt2YXIgbz1yLnBhZDtpZih2b2lkIDA9PT1vKXt2YXIgcz1uLm1hcmdpbjtvPU1hdGgubWluKDEyLHMubCxzLnIscy50LHMuYil9ci5sK3Iucj4uNSpuLndpZHRoJiYoci5sPXIucj0wKSxyLmIrci50Pi41Km4uaGVpZ2h0JiYoci5iPXIudD0wKTt2YXIgbD12b2lkIDAhPT1yLnhsP3IueGw6ci54LGM9dm9pZCAwIT09ci54cj9yLnhyOnIueCx1PXZvaWQgMCE9PXIueXQ/ci55dDpyLnksaD12b2lkIDAhPT1yLnliP3IueWI6ci55O2lbZV09e2w6e3ZhbDpsLHNpemU6ci5sK299LHI6e3ZhbDpjLHNpemU6ci5yK299LGI6e3ZhbDpoLHNpemU6ci5iK299LHQ6e3ZhbDp1LHNpemU6ci50K299fSxhW2VdPTF9ZWxzZSBkZWxldGUgaVtlXSxkZWxldGUgYVtlXTtuLl9yZXBsb3R0aW5nfHx2LmRvQXV0b01hcmdpbih0KX19LHYuZG9BdXRvTWFyZ2luPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7ZS5fc2l6ZXx8KGUuX3NpemU9e30pLFQoZSk7dmFyIHI9ZS5fc2l6ZSxuPUpTT04uc3RyaW5naWZ5KHIpLG89ZS5tYXJnaW4scz1vLmwsbD1vLnIsYz1vLnQsdT1vLmIsaD1lLndpZHRoLGY9ZS5oZWlnaHQscD1lLl9wdXNobWFyZ2luLGQ9ZS5fcHVzaG1hcmdpbklkcztpZighMSE9PWUubWFyZ2luLmF1dG9leHBhbmQpe2Zvcih2YXIgZyBpbiBwKWRbZ118fGRlbGV0ZSBwW2ddO2Zvcih2YXIgdiBpbiBwLmJhc2U9e2w6e3ZhbDowLHNpemU6c30scjp7dmFsOjEsc2l6ZTpsfSx0Ont2YWw6MSxzaXplOmN9LGI6e3ZhbDowLHNpemU6dX19LHApe3ZhciBtPXBbdl0ubHx8e30seT1wW3ZdLmJ8fHt9LHg9bS52YWwsYj1tLnNpemUsXz15LnZhbCx3PXkuc2l6ZTtmb3IodmFyIGsgaW4gcCl7aWYoaShiKSYmcFtrXS5yKXt2YXIgQT1wW2tdLnIudmFsLE09cFtrXS5yLnNpemU7aWYoQT54KXt2YXIgUz0oYipBKyhNLWgpKngpLyhBLXgpLEU9KE0qKDEteCkrKGItaCkqKDEtQSkpLyhBLXgpO1M+PTAmJkU+PTAmJmgtKFMrRSk+MCYmUytFPnMrbCYmKHM9UyxsPUUpfX1pZihpKHcpJiZwW2tdLnQpe3ZhciBDPXBba10udC52YWwsTD1wW2tdLnQuc2l6ZTtpZihDPl8pe3ZhciB6PSh3KkMrKEwtZikqXykvKEMtXyksTz0oTCooMS1fKSsody1mKSooMS1DKSkvKEMtXyk7ej49MCYmTz49MCYmZi0oTyt6KT4wJiZ6K08+dStjJiYodT16LGM9Tyl9fX19fWlmKHIubD1NYXRoLnJvdW5kKHMpLHIucj1NYXRoLnJvdW5kKGwpLHIudD1NYXRoLnJvdW5kKGMpLHIuYj1NYXRoLnJvdW5kKHUpLHIucD1NYXRoLnJvdW5kKG8ucGFkKSxyLnc9TWF0aC5yb3VuZChoKS1yLmwtci5yLHIuaD1NYXRoLnJvdW5kKGYpLXIudC1yLmIsIWUuX3JlcGxvdHRpbmcmJlwie31cIiE9PW4mJm4hPT1KU09OLnN0cmluZ2lmeShlLl9zaXplKSlyZXR1cm5cIl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50XCJpbiBlP2UuX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnQrKzplLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50PTEsYS5jYWxsKFwicGxvdFwiLHQpfSx2LmdyYXBoSnNvbj1mdW5jdGlvbih0LGUscixuLGkpeyhpJiZlJiYhdC5fZnVsbERhdGF8fGkmJiFlJiYhdC5fZnVsbExheW91dCkmJnYuc3VwcGx5RGVmYXVsdHModCk7dmFyIGE9aT90Ll9mdWxsRGF0YTp0LmRhdGEsbz1pP3QuX2Z1bGxMYXlvdXQ6dC5sYXlvdXQscz0odC5fdHJhbnNpdGlvbkRhdGF8fHt9KS5fZnJhbWVzO2Z1bmN0aW9uIGModCl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdClyZXR1cm4gbnVsbDtpZihsLmlzUGxhaW5PYmplY3QodCkpe3ZhciBlLG4saT17fTtmb3IoZSBpbiB0KWlmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHRbZV0mJi0xPT09W1wiX1wiLFwiW1wiXS5pbmRleE9mKGUuY2hhckF0KDApKSl7aWYoXCJrZWVwZGF0YVwiPT09cil7aWYoXCJzcmNcIj09PWUuc3Vic3RyKGUubGVuZ3RoLTMpKWNvbnRpbnVlfWVsc2UgaWYoXCJrZWVwc3RyZWFtXCI9PT1yKXtpZihcInN0cmluZ1wiPT10eXBlb2Yobj10W2UrXCJzcmNcIl0pJiZuLmluZGV4T2YoXCI6XCIpPjAmJiFsLmlzUGxhaW5PYmplY3QodC5zdHJlYW0pKWNvbnRpbnVlfWVsc2UgaWYoXCJrZWVwYWxsXCIhPT1yJiZcInN0cmluZ1wiPT10eXBlb2Yobj10W2UrXCJzcmNcIl0pJiZuLmluZGV4T2YoXCI6XCIpPjApY29udGludWU7aVtlXT1jKHRbZV0pfXJldHVybiBpfXJldHVybiBBcnJheS5pc0FycmF5KHQpP3QubWFwKGMpOmwuaXNUeXBlZEFycmF5KHQpP2wuc2ltcGxlTWFwKHQsbC5pZGVudGl0eSk6bC5pc0pTRGF0ZSh0KT9sLm1zMkRhdGVUaW1lTG9jYWwoK3QpOnR9dmFyIHU9e2RhdGE6KGF8fFtdKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9Yyh0KTtyZXR1cm4gZSYmZGVsZXRlIHIuZml0LHJ9KX07cmV0dXJuIGV8fCh1LmxheW91dD1jKG8pKSx0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhciYmKHU9dC5mcmFtZXdvcmsuZ2V0Q29uZmlnKCkpLHMmJih1LmZyYW1lcz1jKHMpKSxcIm9iamVjdFwiPT09bj91OkpTT04uc3RyaW5naWZ5KHUpfSx2Lm1vZGlmeUZyYW1lcz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMsbz10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspc3dpdGNoKChuPWVbcl0pLnR5cGUpe2Nhc2VcInJlcGxhY2VcIjppPW4udmFsdWU7dmFyIHM9KGFbbi5pbmRleF18fHt9KS5uYW1lLGw9aS5uYW1lO2Fbbi5pbmRleF09b1tsXT1pLGwhPT1zJiYoZGVsZXRlIG9bc10sb1tsXT1pKTticmVhaztjYXNlXCJpbnNlcnRcIjpvWyhpPW4udmFsdWUpLm5hbWVdPWksYS5zcGxpY2Uobi5pbmRleCwwLGkpO2JyZWFrO2Nhc2VcImRlbGV0ZVwiOmRlbGV0ZSBvWyhpPWFbbi5pbmRleF0pLm5hbWVdLGEuc3BsaWNlKG4uaW5kZXgsMSl9cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSx2LmNvbXB1dGVGcmFtZT1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG89dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaDtpZighZSl0aHJvdyBuZXcgRXJyb3IoXCJjb21wdXRlRnJhbWUgbXVzdCBiZSBnaXZlbiBhIHN0cmluZyBmcmFtZSBuYW1lXCIpO3ZhciBzPW9bZS50b1N0cmluZygpXTtpZighcylyZXR1cm4hMTtmb3IodmFyIGw9W3NdLGM9W3MubmFtZV07cy5iYXNlZnJhbWUmJihzPW9bcy5iYXNlZnJhbWUudG9TdHJpbmcoKV0pJiYtMT09PWMuaW5kZXhPZihzLm5hbWUpOylsLnB1c2gocyksYy5wdXNoKHMubmFtZSk7Zm9yKHZhciB1PXt9O3M9bC5wb3AoKTspaWYocy5sYXlvdXQmJih1LmxheW91dD12LmV4dGVuZExheW91dCh1LmxheW91dCxzLmxheW91dCkpLHMuZGF0YSl7aWYodS5kYXRhfHwodS5kYXRhPVtdKSwhKG49cy50cmFjZXMpKWZvcihuPVtdLHI9MDtyPHMuZGF0YS5sZW5ndGg7cisrKW5bcl09cjtmb3IodS50cmFjZXN8fCh1LnRyYWNlcz1bXSkscj0wO3I8cy5kYXRhLmxlbmd0aDtyKyspbnVsbCE9KGk9bltyXSkmJigtMT09PShhPXUudHJhY2VzLmluZGV4T2YoaSkpJiYoYT11LmRhdGEubGVuZ3RoLHUudHJhY2VzW2FdPWkpLHUuZGF0YVthXT12LmV4dGVuZFRyYWNlKHUuZGF0YVthXSxzLmRhdGFbcl0pKX1yZXR1cm4gdX0sdi5yZWNvbXB1dGVGcmFtZUhhc2g9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g9e30scj10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpJiZpLm5hbWUmJihlW2kubmFtZV09aSl9fSx2LmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzLGMsdSxoPWwuZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LGV8fHt9KSxmPWwuZXhwYW5kT2JqZWN0UGF0aHMoaCkscD17fTtpZihyJiZyLmxlbmd0aClmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKXZvaWQgMD09PShpPShuPWwubmVzdGVkUHJvcGVydHkoZixyW2FdKSkuZ2V0KCkpP2wubmVzdGVkUHJvcGVydHkocCxyW2FdKS5zZXQobnVsbCk6KG4uc2V0KG51bGwpLGwubmVzdGVkUHJvcGVydHkocCxyW2FdKS5zZXQoaSkpO2lmKHQ9bC5leHRlbmREZWVwTm9BcnJheXModHx8e30sZiksciYmci5sZW5ndGgpZm9yKGE9MDthPHIubGVuZ3RoO2ErKylpZihjPWwubmVzdGVkUHJvcGVydHkocCxyW2FdKS5nZXQoKSl7Zm9yKHU9KHM9bC5uZXN0ZWRQcm9wZXJ0eSh0LHJbYV0pKS5nZXQoKSxBcnJheS5pc0FycmF5KHUpfHwodT1bXSxzLnNldCh1KSksbz0wO288Yy5sZW5ndGg7bysrKXt2YXIgZD1jW29dO3Vbb109bnVsbD09PWQ/bnVsbDp2LmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzKHVbb10sZCl9cy5zZXQodSl9cmV0dXJuIHR9LHYuZGF0YUFycmF5Q29udGFpbmVycz1bXCJ0cmFuc2Zvcm1zXCIsXCJkaW1lbnNpb25zXCJdLHYubGF5b3V0QXJyYXlDb250YWluZXJzPWEubGF5b3V0QXJyYXlDb250YWluZXJzLHYuZXh0ZW5kVHJhY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdi5leHRlbmRPYmplY3RXaXRoQ29udGFpbmVycyh0LGUsdi5kYXRhQXJyYXlDb250YWluZXJzKX0sdi5leHRlbmRMYXlvdXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdi5leHRlbmRPYmplY3RXaXRoQ29udGFpbmVycyh0LGUsdi5sYXlvdXRBcnJheUNvbnRhaW5lcnMpfSx2LnRyYW5zaXRpb249ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPXtyZWRyYXc6aS5yZWRyYXd9LHM9W10sYz1bXTtyZXR1cm4gby5wcmVwYXJlRm49ZnVuY3Rpb24oKXtmb3IodmFyIGk9QXJyYXkuaXNBcnJheShlKT9lLmxlbmd0aDowLGE9bi5zbGljZSgwLGkpLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHU9YVtvXSxoPXQuX2Z1bGxEYXRhW3VdLl9tb2R1bGU7aCYmKGguYW5pbWF0YWJsZSYmcy5wdXNoKHUpLHQuZGF0YVthW29dXT12LmV4dGVuZFRyYWNlKHQuZGF0YVthW29dXSxlW29dKSl9dmFyIGY9bC5leHBhbmRPYmplY3RQYXRocyhsLmV4dGVuZERlZXBOb0FycmF5cyh7fSxyKSkscD0vXlt4eV1heGlzWzAtOV0qJC87Zm9yKHZhciBkIGluIGYpcC50ZXN0KGQpJiZkZWxldGUgZltkXS5yYW5nZTt2LmV4dGVuZExheW91dCh0LmxheW91dCxmKSxkZWxldGUgdC5jYWxjZGF0YSx2LnN1cHBseURlZmF1bHRzKHQpLHYuZG9DYWxjZGF0YSh0KTt2YXIgZz1sLmV4cGFuZE9iamVjdFBhdGhzKHIpO2lmKGcpe3ZhciBtPXQuX2Z1bGxMYXlvdXQuX3Bsb3RzO2Zvcih2YXIgeSBpbiBtKXt2YXIgeCxiLF8sdyxrPW1beV0sQT1rLnhheGlzLFQ9ay55YXhpcyxNPUEucmFuZ2Uuc2xpY2UoKSxTPVQucmFuZ2Uuc2xpY2UoKTtBcnJheS5pc0FycmF5KGdbQS5fbmFtZStcIi5yYW5nZVwiXSk/eD1nW0EuX25hbWUrXCIucmFuZ2VcIl0uc2xpY2UoKTpBcnJheS5pc0FycmF5KChnW0EuX25hbWVdfHx7fSkucmFuZ2UpJiYoeD1nW0EuX25hbWVdLnJhbmdlLnNsaWNlKCkpLEFycmF5LmlzQXJyYXkoZ1tULl9uYW1lK1wiLnJhbmdlXCJdKT9iPWdbVC5fbmFtZStcIi5yYW5nZVwiXS5zbGljZSgpOkFycmF5LmlzQXJyYXkoKGdbVC5fbmFtZV18fHt9KS5yYW5nZSkmJihiPWdbVC5fbmFtZV0ucmFuZ2Uuc2xpY2UoKSksTSYmeCYmKE1bMF0hPT14WzBdfHxNWzFdIT09eFsxXSkmJihfPXt4cjA6TSx4cjE6eH0pLFMmJmImJihTWzBdIT09YlswXXx8U1sxXSE9PWJbMV0pJiYodz17eXIwOlMseXIxOmJ9KSwoX3x8dykmJmMucHVzaChsLmV4dGVuZEZsYXQoe3Bsb3RpbmZvOmt9LF8sdykpfX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9LG8ucnVuRm49ZnVuY3Rpb24oZSl7dmFyIG4saSxvPXQuX2Z1bGxMYXlvdXQuX2Jhc2VQbG90TW9kdWxlcyx1PWMubGVuZ3RoO2lmKHIpZm9yKGk9MDtpPG8ubGVuZ3RoO2krKylvW2ldLnRyYW5zaXRpb25BeGVzJiZvW2ldLnRyYW5zaXRpb25BeGVzKHQsYyxhLGUpO2Zvcih1Pygobj1sLmV4dGVuZEZsYXQoe30sYSkpLmR1cmF0aW9uPTAscz1udWxsKTpuPWEsaT0wO2k8by5sZW5ndGg7aSsrKW9baV0ucGxvdCh0LHMsbixlKX0sTSh0LGEsbyl9LHYudHJhbnNpdGlvbkZyb21SZWFjdD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10Ll9mdWxsTGF5b3V0LGE9aS50cmFuc2l0aW9uLG89e30scz1bXTtyZXR1cm4gby5wcmVwYXJlRm49ZnVuY3Rpb24oKXt2YXIgdD1pLl9wbG90cztmb3IodmFyIGEgaW4gby5yZWRyYXc9ITEsXCJzb21lXCI9PT1lLmFuaW0mJihvLnJlZHJhdz0hMCksXCJzb21lXCI9PT1yLmFuaW0mJihvLnJlZHJhdz0hMCksdCl7dmFyIGMsdSxoPXRbYV0sZj1oLnhheGlzLHA9aC55YXhpcyxkPW5bZi5fbmFtZV0ucmFuZ2Uuc2xpY2UoKSxnPW5bcC5fbmFtZV0ucmFuZ2Uuc2xpY2UoKSx2PWYucmFuZ2Uuc2xpY2UoKSxtPXAucmFuZ2Uuc2xpY2UoKTtmLnNldFNjYWxlKCkscC5zZXRTY2FsZSgpLGRbMF09PT12WzBdJiZkWzFdPT09dlsxXXx8KGM9e3hyMDpkLHhyMTp2fSksZ1swXT09PW1bMF0mJmdbMV09PT1tWzFdfHwodT17eXIwOmcseXIxOm19KSwoY3x8dSkmJnMucHVzaChsLmV4dGVuZEZsYXQoe3Bsb3RpbmZvOmh9LGMsdSkpfXJldHVybiBQcm9taXNlLnJlc29sdmUoKX0sby5ydW5Gbj1mdW5jdGlvbihyKXtmb3IodmFyIG4saSxvLGM9dC5fZnVsbERhdGEsdT10Ll9mdWxsTGF5b3V0Ll9iYXNlUGxvdE1vZHVsZXMsaD1bXSxmPTA7ZjxjLmxlbmd0aDtmKyspaC5wdXNoKGYpO2Z1bmN0aW9uIHAoKXtmb3IodmFyIGU9MDtlPHUubGVuZ3RoO2UrKyl1W2VdLnRyYW5zaXRpb25BeGVzJiZ1W2VdLnRyYW5zaXRpb25BeGVzKHQscyxuLHIpfWZ1bmN0aW9uIGQoKXtmb3IodmFyIGU9MDtlPHUubGVuZ3RoO2UrKyl1W2VdLnBsb3QodCxvLGkscil9cy5sZW5ndGgmJmUuYW5pbT9cInRyYWNlcyBmaXJzdFwiPT09YS5vcmRlcmluZz8obj1sLmV4dGVuZEZsYXQoe30sYSx7ZHVyYXRpb246MH0pLG89aCxpPWEsZCgpLHNldFRpbWVvdXQocCxhLmR1cmF0aW9uKSk6KG49YSxvPW51bGwsaT1sLmV4dGVuZEZsYXQoe30sYSx7ZHVyYXRpb246MH0pLHAoKSxkKCkpOnMubGVuZ3RoPyhuPWEscCgpKTplLmFuaW0mJihvPWgsaT1hLGQoKSl9LE0odCxhLG8pfSx2LmRvQ2FsY2RhdGE9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGkscyxjPWgubGlzdCh0KSxmPXQuX2Z1bGxEYXRhLHA9dC5fZnVsbExheW91dCxkPW5ldyBBcnJheShmLmxlbmd0aCksZz0odC5jYWxjZGF0YXx8W10pLnNsaWNlKDApO2Zvcih0LmNhbGNkYXRhPWQscC5fbnVtQm94ZXM9MCxwLl9udW1WaW9saW5zPTAscC5fdmlvbGluU2NhbGVHcm91cFN0YXRzPXt9LHQuX2htcGl4Y291bnQ9MCx0Ll9obWx1bWNvdW50PTAscC5fcGllY29sb3JtYXA9e30scC5fc3VuYnVyc3Rjb2xvcm1hcD17fSxpPTA7aTxmLmxlbmd0aDtpKyspQXJyYXkuaXNBcnJheShlKSYmLTE9PT1lLmluZGV4T2YoaSkmJihkW2ldPWdbaV0pO2ZvcihpPTA7aTxmLmxlbmd0aDtpKyspKHI9ZltpXSkuX2FycmF5QXR0cnM9by5maW5kQXJyYXlBdHRyaWJ1dGVzKHIpLHIuX2V4dHJlbWVzPXt9O3ZhciB2PXAuX3N1YnBsb3RzLnBvbGFyfHxbXTtmb3IoaT0wO2k8di5sZW5ndGg7aSsrKWMucHVzaChwW3ZbaV1dLnJhZGlhbGF4aXMscFt2W2ldXS5hbmd1bGFyYXhpcyk7UyhjLGYpO3ZhciB5PSExO2ZvcihpPTA7aTxmLmxlbmd0aDtpKyspaWYoITA9PT0ocj1mW2ldKS52aXNpYmxlJiZyLnRyYW5zZm9ybXMpe2lmKChuPXIuX21vZHVsZSkmJm4uY2FsYyl7dmFyIHg9bi5jYWxjKHQscik7eFswXSYmeFswXS50JiZ4WzBdLnQuX3NjZW5lJiZkZWxldGUgeFswXS50Ll9zY2VuZS5kaXJ0eX1mb3Iocz0wO3M8ci50cmFuc2Zvcm1zLmxlbmd0aDtzKyspe3ZhciBiPXIudHJhbnNmb3Jtc1tzXTsobj1tW2IudHlwZV0pJiZuLmNhbGNUcmFuc2Zvcm0mJihyLl9oYXNDYWxjVHJhbnNmb3JtPSEwLHk9ITAsbi5jYWxjVHJhbnNmb3JtKHQscixiKSl9fWZ1bmN0aW9uIF8oZSxpKXtpZihyPWZbZV0sISEobj1yLl9tb2R1bGUpLmlzQ29udGFpbmVyPT09aSl7dmFyIGE9W107aWYoITA9PT1yLnZpc2libGUpe2RlbGV0ZSByLl9pbmRleFRvUG9pbnRzO3ZhciBvPXIudHJhbnNmb3Jtc3x8W107Zm9yKHM9by5sZW5ndGgtMTtzPj0wO3MtLSlpZihvW3NdLmVuYWJsZWQpe3IuX2luZGV4VG9Qb2ludHM9b1tzXS5faW5kZXhUb1BvaW50czticmVha31uJiZuLmNhbGMmJihhPW4uY2FsYyh0LHIpKX1BcnJheS5pc0FycmF5KGEpJiZhWzBdfHwoYT1be3g6dSx5OnV9XSksYVswXS50fHwoYVswXS50PXt9KSxhWzBdLnRyYWNlPXIsZFtlXT1hfX1mb3IoeSYmUyhjLGYpLGk9MDtpPGYubGVuZ3RoO2krKylfKGksITApO2ZvcihpPTA7aTxmLmxlbmd0aDtpKyspXyhpLCExKTshZnVuY3Rpb24odCl7dmFyIGUscixuLGk9dC5fZnVsbExheW91dCxhPWkuX3Zpc2libGVNb2R1bGVzLG89e307Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl7dmFyIHM9YVtyXSxjPXMuY3Jvc3NUcmFjZUNhbGM7aWYoYyl7dmFyIHU9cy5iYXNlUGxvdE1vZHVsZS5uYW1lO29bdV0/bC5wdXNoVW5pcXVlKG9bdV0sYyk6b1t1XT1bY119fWZvcihuIGluIG8pe3ZhciBoPW9bbl0sZj1pLl9zdWJwbG90c1tuXTtpZihBcnJheS5pc0FycmF5KGYpKWZvcihlPTA7ZTxmLmxlbmd0aDtlKyspe3ZhciBwPWZbZV0sZD1cImNhcnRlc2lhblwiPT09bj9pLl9wbG90c1twXTppW3BdO2ZvcihyPTA7cjxoLmxlbmd0aDtyKyspaFtyXSh0LGQscCl9ZWxzZSBmb3Iocj0wO3I8aC5sZW5ndGg7cisrKWhbcl0odCl9fSh0KSxhLmdldENvbXBvbmVudE1ldGhvZChcImZ4XCIsXCJjYWxjXCIpKHQpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKFwiZXJyb3JiYXJzXCIsXCJjYWxjXCIpKHQpfSx2LnJlaG92ZXI9ZnVuY3Rpb24odCl7dC5fZnVsbExheW91dC5fcmVob3ZlciYmdC5fZnVsbExheW91dC5fcmVob3ZlcigpfSx2LnJlZHJhZz1mdW5jdGlvbih0KXt0Ll9mdWxsTGF5b3V0Ll9yZWRyYWcmJnQuX2Z1bGxMYXlvdXQuX3JlZHJhZygpfSx2LmdlbmVyYWxVcGRhdGVQZXJUcmFjZU1vZHVsZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPWUudHJhY2VIYXNoLG89e307Zm9yKGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIHM9cltpXSxjPXNbMF0udHJhY2U7Yy52aXNpYmxlJiYob1tjLnR5cGVdPW9bYy50eXBlXXx8W10sb1tjLnR5cGVdLnB1c2gocykpfWZvcih2YXIgdSBpbiBhKWlmKCFvW3VdKXt2YXIgaD1hW3VdWzBdO2hbMF0udHJhY2UudmlzaWJsZT0hMSxvW3VdPVtoXX1mb3IodmFyIGYgaW4gbyl7dmFyIHA9b1tmXTtwWzBdWzBdLnRyYWNlLl9tb2R1bGUucGxvdCh0LGUsbC5maWx0ZXJWaXNpYmxlKHApLG4pfWUudHJhY2VIYXNoPW99fSx7XCIuLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uL2xpYlwiOjcwMSxcIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hXCI6NzM4LFwiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9hbmltYXRpb25fYXR0cmlidXRlc1wiOjc0NCxcIi4vYXR0cmlidXRlc1wiOjc0NixcIi4vY2FydGVzaWFuL2F4aXNfaWRzXCI6NzUyLFwiLi9jb21tYW5kXCI6NzczLFwiLi9mb250X2F0dHJpYnV0ZXNcIjo3NzUsXCIuL2ZyYW1lX2F0dHJpYnV0ZXNcIjo3NzYsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6ODAxLGQzOjE1NSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sODExOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXthdHRyOlwic3VicGxvdFwiLG5hbWU6XCJwb2xhclwiLGF4aXNOYW1lczpbXCJhbmd1bGFyYXhpc1wiLFwicmFkaWFsYXhpc1wiXSxheGlzTmFtZTJkYXRhQXJyYXk6e2FuZ3VsYXJheGlzOlwidGhldGFcIixyYWRpYWxheGlzOlwiclwifSxsYXllck5hbWVzOltcImRyYWdsYXllclwiLFwicGxvdGJnXCIsXCJiYWNrcGxvdFwiLFwiYW5ndWxhci1ncmlkXCIsXCJyYWRpYWwtZ3JpZFwiLFwiZnJvbnRwbG90XCIsXCJhbmd1bGFyLWxpbmVcIixcInJhZGlhbC1saW5lXCIsXCJhbmd1bGFyLWF4aXNcIixcInJhZGlhbC1heGlzXCJdLHJhZGlhbERyYWdCb3hTaXplOjUwLGFuZ3VsYXJEcmFnQm94U2l6ZTozMCxjb3JuZXJMZW46MjUsY29ybmVySGFsZldpZHRoOjIsTUlORFJBRzo4LE1JTlpPT006MjAsT0ZGRURHRToyMH19LHt9XSw4MTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL2xpYi9wb2x5Z29uXCIpLnRlc3RlcixhPW4uZmluZEluZGV4T2ZNaW4sbz1uLmlzQW5nbGVJbnNpZGVTZWN0b3Iscz1uLmFuZ2xlRGVsdGEsbD1uLmFuZ2xlRGlzdDtmdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBpLGEsbz1uWzBdLHM9blsxXSxsPWgoTWF0aC5zaW4oZSktTWF0aC5zaW4odCkpLGM9aChNYXRoLmNvcyhlKS1NYXRoLmNvcyh0KSksdT1NYXRoLnRhbihyKSxmPWgoMS91KSxwPWwvYyxkPXMtcCpvO3JldHVybiBmP2wmJmM/YT11KihpPWQvKHUtcCkpOmM/KGk9cypmLGE9cyk6KGk9byxhPW8qdSk6bCYmYz8oaT0wLGE9ZCk6Yz8oaT0wLGE9cyk6aT1hPU5hTixbaSxhXX1mdW5jdGlvbiB1KHQsZSxyLGkpe3JldHVybiBuLmlzRnVsbENpcmNsZShbZSxyXSk/ZnVuY3Rpb24odCxlKXt2YXIgcixuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4rMSk7Zm9yKHI9MDtyPG47cisrKXt2YXIgYT1lW3JdO2lbcl09W3QqTWF0aC5jb3MoYSksdCpNYXRoLnNpbihhKV19cmV0dXJuIGlbcl09aVswXS5zbGljZSgpLGl9KHQsaSk6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIHMsdSxoPWkubGVuZ3RoLGY9W107ZnVuY3Rpb24gcChlKXtyZXR1cm5bdCpNYXRoLmNvcyhlKSx0Kk1hdGguc2luKGUpXX1mdW5jdGlvbiBkKHQsZSxyKXtyZXR1cm4gYyh0LGUscixwKHQpKX1mdW5jdGlvbiBnKHQpe3JldHVybiBuLm1vZCh0LGgpfWZ1bmN0aW9uIHYodCl7cmV0dXJuIG8odCxbZSxyXSl9dmFyIG09YShpLGZ1bmN0aW9uKHQpe3JldHVybiB2KHQpP2wodCxlKToxLzB9KSx5PWQoaVttXSxpW2cobS0xKV0sZSk7Zm9yKGYucHVzaCh5KSxzPW0sdT0wO3U8aDtzKyssdSsrKXt2YXIgeD1pW2cocyldO2lmKCF2KHgpKWJyZWFrO2YucHVzaChwKHgpKX12YXIgYj1hKGksZnVuY3Rpb24odCl7cmV0dXJuIHYodCk/bCh0LHIpOjEvMH0pLF89ZChpW2JdLGlbZyhiKzEpXSxyKTtyZXR1cm4gZi5wdXNoKF8pLGYucHVzaChbMCwwXSksZi5wdXNoKGZbMF0uc2xpY2UoKSksZn0odCxlLHIsaSl9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gTWF0aC5hYnModCk+MWUtMTA/dDowfWZ1bmN0aW9uIGYodCxlLHIpe2U9ZXx8MCxyPXJ8fDA7Zm9yKHZhciBuPXQubGVuZ3RoLGk9bmV3IEFycmF5KG4pLGE9MDthPG47YSsrKXt2YXIgbz10W2FdO2lbYV09W2Urb1swXSxyLW9bMV1dfXJldHVybiBpfWUuZXhwb3J0cz17aXNQdEluc2lkZVBvbHlnb246ZnVuY3Rpb24odCxlLHIsbixhKXtpZighbyhlLG4pKXJldHVybiExO3ZhciBzLGw7clswXTxyWzFdPyhzPXJbMF0sbD1yWzFdKToocz1yWzFdLGw9clswXSk7dmFyIGM9aSh1KHMsblswXSxuWzFdLGEpKSxoPWkodShsLG5bMF0sblsxXSxhKSksZj1bdCpNYXRoLmNvcyhlKSx0Kk1hdGguc2luKGUpXTtyZXR1cm4gaC5jb250YWlucyhmKSYmIWMuY29udGFpbnMoZil9LGZpbmRQb2x5Z29uT2Zmc2V0OmZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT0xLzAsYT0xLzAsbz11KHQsZSxyLG4pLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTtpPU1hdGgubWluKGksbFswXSksYT1NYXRoLm1pbihhLC1sWzFdKX1yZXR1cm5baSxhXX0sZmluZEVuY2xvc2luZ1ZlcnRleEFuZ2xlczpmdW5jdGlvbih0LGUpe3ZhciByPWEoZSxmdW5jdGlvbihlKXt2YXIgcj1zKGUsdCk7cmV0dXJuIHI+MD9yOjEvMH0pLGk9bi5tb2QocisxLGUubGVuZ3RoKTtyZXR1cm5bZVtyXSxlW2ldXX0sZmluZEludGVyc2VjdGlvblhZOmMsZmluZFhZYXRMZW5ndGg6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9LWUqcixhPWUqZSsxLG89MiooZSppLXIpLHM9aSppK3Iqci10KnQsbD1NYXRoLnNxcnQobypvLTQqYSpzKSxjPSgtbytsKS8oMiphKSx1PSgtby1sKS8oMiphKTtyZXR1cm5bW2MsZSpjK2krbl0sW3UsZSp1K2krbl1dfSxjbGFtcFRpbnk6aCxwYXRoUG9seWdvbjpmdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuXCJNXCIrZih1KHQsZSxyLG4pLGksYSkuam9pbihcIkxcIil9LHBhdGhQb2x5Z29uQW5udWx1czpmdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcyxsO3Q8ZT8ocz10LGw9ZSk6KHM9ZSxsPXQpO3ZhciBjPWYodShzLHIsbixpKSxhLG8pO3JldHVyblwiTVwiK2YodShsLHIsbixpKSxhLG8pLnJldmVyc2UoKS5qb2luKFwiTFwiKStcIk1cIitjLmpvaW4oXCJMXCIpfX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9wb2x5Z29uXCI6NzEzfV0sODEzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2dldF9kYXRhXCIpLmdldFN1YnBsb3RDYWxjRGF0YSxpPXQoXCIuLi8uLi9saWJcIikuY291bnRlclJlZ2V4LGE9dChcIi4vcG9sYXJcIiksbz10KFwiLi9jb25zdGFudHNcIikscz1vLmF0dHIsbD1vLm5hbWUsYz1pKGwpLHU9e307dVtzXT17dmFsVHlwZTpcInN1YnBsb3RpZFwiLGRmbHQ6bCxlZGl0VHlwZTpcImNhbGNcIn0sZS5leHBvcnRzPXthdHRyOnMsbmFtZTpsLGlkUm9vdDpsLGlkUmVnZXg6YyxhdHRyUmVnZXg6YyxhdHRyaWJ1dGVzOnUsbGF5b3V0QXR0cmlidXRlczp0KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KFwiLi9sYXlvdXRfZGVmYXVsdHNcIikscGxvdDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsaT1lLl9zdWJwbG90c1tsXSxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBzPWlbb10sYz1uKHIsbCxzKSx1PWVbc10uX3N1YnBsb3Q7dXx8KHU9YSh0LHMpLGVbc10uX3N1YnBsb3Q9dSksdS5wbG90KGMsZSx0Ll9wcm9taXNlcyl9fSxjbGVhbjpmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9bi5fc3VicGxvdHNbbF18fFtdLGE9bi5faGFzJiZuLl9oYXMoXCJnbFwiKSxvPWUuX2hhcyYmZS5faGFzKFwiZ2xcIikscz1hJiYhbyxjPTA7YzxpLmxlbmd0aDtjKyspe3ZhciB1PWlbY10saD1uW3VdLl9zdWJwbG90O2lmKCFlW3VdJiZoKWZvcih2YXIgZiBpbiBoLmZyYW1ld29yay5yZW1vdmUoKSxoLmxheWVyc1tcInJhZGlhbC1heGlzLXRpdGxlXCJdLnJlbW92ZSgpLGguY2xpcFBhdGhzKWguY2xpcFBhdGhzW2ZdLnJlbW92ZSgpO3MmJmguX3NjZW5lJiYoaC5fc2NlbmUuZGVzdHJveSgpLGguX3NjZW5lPW51bGwpfX0sdG9TVkc6dChcIi4uL2NhcnRlc2lhblwiKS50b1NWR319LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2NhcnRlc2lhblwiOjc2MCxcIi4uL2dldF9kYXRhXCI6Nzg0LFwiLi9jb25zdGFudHNcIjo4MTEsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6ODE0LFwiLi9sYXlvdXRfZGVmYXVsdHNcIjo4MTUsXCIuL3BvbGFyXCI6ODIyfV0sODE0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vZG9tYWluXCIpLmF0dHJpYnV0ZXMsbz10KFwiLi4vLi4vbGliXCIpLmV4dGVuZEZsYXQscz10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbCxsPXMoe2NvbG9yOmkuY29sb3Isc2hvd2xpbmU6byh7fSxpLnNob3dsaW5lLHtkZmx0OiEwfSksbGluZWNvbG9yOmkubGluZWNvbG9yLGxpbmV3aWR0aDppLmxpbmV3aWR0aCxzaG93Z3JpZDpvKHt9LGkuc2hvd2dyaWQse2RmbHQ6ITB9KSxncmlkY29sb3I6aS5ncmlkY29sb3IsZ3JpZHdpZHRoOmkuZ3JpZHdpZHRofSxcInBsb3RcIixcImZyb20tcm9vdFwiKSxjPXMoe3RpY2ttb2RlOmkudGlja21vZGUsbnRpY2tzOmkubnRpY2tzLHRpY2swOmkudGljazAsZHRpY2s6aS5kdGljayx0aWNrdmFsczppLnRpY2t2YWxzLHRpY2t0ZXh0OmkudGlja3RleHQsdGlja3M6aS50aWNrcyx0aWNrbGVuOmkudGlja2xlbix0aWNrd2lkdGg6aS50aWNrd2lkdGgsdGlja2NvbG9yOmkudGlja2NvbG9yLHNob3d0aWNrbGFiZWxzOmkuc2hvd3RpY2tsYWJlbHMsc2hvd3RpY2twcmVmaXg6aS5zaG93dGlja3ByZWZpeCx0aWNrcHJlZml4OmkudGlja3ByZWZpeCxzaG93dGlja3N1ZmZpeDppLnNob3d0aWNrc3VmZml4LHRpY2tzdWZmaXg6aS50aWNrc3VmZml4LHNob3dleHBvbmVudDppLnNob3dleHBvbmVudCxleHBvbmVudGZvcm1hdDppLmV4cG9uZW50Zm9ybWF0LHNlcGFyYXRldGhvdXNhbmRzOmkuc2VwYXJhdGV0aG91c2FuZHMsdGlja2ZvbnQ6aS50aWNrZm9udCx0aWNrYW5nbGU6aS50aWNrYW5nbGUsdGlja2Zvcm1hdDppLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOmkudGlja2Zvcm1hdHN0b3BzLGxheWVyOmkubGF5ZXJ9LFwicGxvdFwiLFwiZnJvbS1yb290XCIpLHU9e3Zpc2libGU6byh7fSxpLnZpc2libGUse2RmbHQ6ITB9KSx0eXBlOm8oe30saS50eXBlLHt2YWx1ZXM6W1wiLVwiLFwibGluZWFyXCIsXCJsb2dcIixcImRhdGVcIixcImNhdGVnb3J5XCJdfSksYXV0b3JhbmdlOm8oe30saS5hdXRvcmFuZ2Use2VkaXRUeXBlOlwicGxvdFwifSkscmFuZ2Vtb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ0b3plcm9cIixcIm5vbm5lZ2F0aXZlXCIsXCJub3JtYWxcIl0sZGZsdDpcInRvemVyb1wiLGVkaXRUeXBlOlwiY2FsY1wifSxyYW5nZTpvKHt9LGkucmFuZ2Use2l0ZW1zOlt7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwicGxvdFwiLGltcGxpZWRFZGl0czp7XCJeYXV0b3JhbmdlXCI6ITF9fSx7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwicGxvdFwiLGltcGxpZWRFZGl0czp7XCJeYXV0b3JhbmdlXCI6ITF9fV0sZWRpdFR5cGU6XCJwbG90XCJ9KSxjYXRlZ29yeW9yZGVyOmkuY2F0ZWdvcnlvcmRlcixjYXRlZ29yeWFycmF5OmkuY2F0ZWdvcnlhcnJheSxhbmdsZTp7dmFsVHlwZTpcImFuZ2xlXCIsZWRpdFR5cGU6XCJwbG90XCJ9LHNpZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImNsb2Nrd2lzZVwiLFwiY291bnRlcmNsb2Nrd2lzZVwiXSxkZmx0OlwiY2xvY2t3aXNlXCIsZWRpdFR5cGU6XCJwbG90XCJ9LHRpdGxlOnMoaS50aXRsZSxcInBsb3RcIixcImZyb20tcm9vdFwiKSxob3ZlcmZvcm1hdDppLmhvdmVyZm9ybWF0LHVpcmV2aXNpb246e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcIm5vbmVcIn0sZWRpdFR5cGU6XCJjYWxjXCIsX2RlcHJlY2F0ZWQ6e3RpdGxlOmkuX2RlcHJlY2F0ZWQudGl0bGUsdGl0bGVmb250OmkuX2RlcHJlY2F0ZWQudGl0bGVmb250fX07dS50aXRsZS50ZXh0LmRmbHQ9XCJcIixvKHUsbCxjKTt2YXIgaD17dmlzaWJsZTpvKHt9LGkudmlzaWJsZSx7ZGZsdDohMH0pLHR5cGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcIi1cIixcImxpbmVhclwiLFwiY2F0ZWdvcnlcIl0sZGZsdDpcIi1cIixlZGl0VHlwZTpcImNhbGNcIixfbm9UZW1wbGF0aW5nOiEwfSxjYXRlZ29yeW9yZGVyOmkuY2F0ZWdvcnlvcmRlcixjYXRlZ29yeWFycmF5OmkuY2F0ZWdvcnlhcnJheSx0aGV0YXVuaXQ6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInJhZGlhbnNcIixcImRlZ3JlZXNcIl0sZGZsdDpcImRlZ3JlZXNcIixlZGl0VHlwZTpcImNhbGNcIn0scGVyaW9kOnt2YWxUeXBlOlwibnVtYmVyXCIsZWRpdFR5cGU6XCJjYWxjXCIsbWluOjB9LGRpcmVjdGlvbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiY291bnRlcmNsb2Nrd2lzZVwiLFwiY2xvY2t3aXNlXCJdLGRmbHQ6XCJjb3VudGVyY2xvY2t3aXNlXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHJvdGF0aW9uOnt2YWxUeXBlOlwiYW5nbGVcIixlZGl0VHlwZTpcImNhbGNcIn0saG92ZXJmb3JtYXQ6aS5ob3ZlcmZvcm1hdCx1aXJldmlzaW9uOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJub25lXCJ9LGVkaXRUeXBlOlwiY2FsY1wifTtvKGgsbCxjKSxlLmV4cG9ydHM9e2RvbWFpbjphKHtuYW1lOlwicG9sYXJcIixlZGl0VHlwZTpcInBsb3RcIn0pLHNlY3Rvcjp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixpdGVtczpbe3ZhbFR5cGU6XCJudW1iZXJcIixlZGl0VHlwZTpcInBsb3RcIn0se3ZhbFR5cGU6XCJudW1iZXJcIixlZGl0VHlwZTpcInBsb3RcIn1dLGRmbHQ6WzAsMzYwXSxlZGl0VHlwZTpcInBsb3RcIn0saG9sZTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZTpcInBsb3RcIn0sYmdjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJwbG90XCIsZGZsdDpuLmJhY2tncm91bmR9LHJhZGlhbGF4aXM6dSxhbmd1bGFyYXhpczpoLGdyaWRzaGFwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiY2lyY3VsYXJcIixcImxpbmVhclwiXSxkZmx0OlwiY2lyY3VsYXJcIixlZGl0VHlwZTpcInBsb3RcIn0sdWlyZXZpc2lvbjp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwibm9uZVwifSxlZGl0VHlwZTpcImNhbGNcIn19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiOjU3NyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo3NjEsXCIuLi9kb21haW5cIjo3NzR9XSw4MTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksYT10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKSxvPXQoXCIuLi9zdWJwbG90X2RlZmF1bHRzXCIpLHM9dChcIi4uL2dldF9kYXRhXCIpLmdldFN1YnBsb3REYXRhLGw9dChcIi4uL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzXCIpLGM9dChcIi4uL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHNcIiksdT10KFwiLi4vY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHNcIiksaD10KFwiLi4vY2FydGVzaWFuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzXCIpLGY9dChcIi4uL2NhcnRlc2lhbi9saW5lX2dyaWRfZGVmYXVsdHNcIikscD10KFwiLi4vY2FydGVzaWFuL2F4aXNfYXV0b3R5cGVcIiksZD10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxnPXQoXCIuL3NldF9jb252ZXJ0XCIpLHY9dChcIi4vY29uc3RhbnRzXCIpLG09di5heGlzTmFtZXM7ZnVuY3Rpb24geSh0LGUscixvKXt2YXIgcD1yKFwiYmdjb2xvclwiKTtvLmJnQ29sb3I9aS5jb21iaW5lKHAsby5wYXBlcl9iZ2NvbG9yKTt2YXIgeT1yKFwic2VjdG9yXCIpO3IoXCJob2xlXCIpO3ZhciBiLF89cyhvLmZ1bGxEYXRhLHYubmFtZSxvLmlkKSx3PW8ubGF5b3V0T3V0O2Z1bmN0aW9uIGsodCxlKXtyZXR1cm4gcihiK1wiLlwiK3QsZSl9Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspe2I9bVtBXSxuLmlzUGxhaW5PYmplY3QodFtiXSl8fCh0W2JdPXt9KTt2YXIgVD10W2JdLE09YS5uZXdDb250YWluZXIoZSxiKTtNLl9pZD1NLl9uYW1lPWIsTS5fYXR0cj1vLmlkK1wiLlwiK2IsTS5fdHJhY2VJbmRpY2VzPV8ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9leHBhbmRlZEluZGV4fSk7dmFyIFM9di5heGlzTmFtZTJkYXRhQXJyYXlbYl0sRT14KFQsTSxrLF8sUyk7aChULE0sayx7YXhEYXRhOl8sZGF0YUF0dHI6U30pO3ZhciBDLEwsej1rKFwidmlzaWJsZVwiKTtzd2l0Y2goZyhNLGUsdyksayhcInVpcmV2aXNpb25cIixlLnVpcmV2aXNpb24pLHomJihMPShDPWsoXCJjb2xvclwiKSk9PT1ULmNvbG9yP0M6by5mb250LmNvbG9yKSxNLl9tPTEsYil7Y2FzZVwicmFkaWFsYXhpc1wiOnZhciBPPWsoXCJhdXRvcmFuZ2VcIiwhTS5pc1ZhbGlkUmFuZ2UoVC5yYW5nZSkpO1QuYXV0b3JhbmdlPU8sIU98fFwibGluZWFyXCIhPT1FJiZcIi1cIiE9PUV8fGsoXCJyYW5nZW1vZGVcIiksXCJyZXZlcnNlZFwiPT09TyYmKE0uX209LTEpLGsoXCJyYW5nZVwiKSxNLmNsZWFuUmFuZ2UoXCJyYW5nZVwiLHtkZmx0UmFuZ2U6WzAsMV19KSx6JiYoayhcInNpZGVcIiksayhcImFuZ2xlXCIseVswXSksayhcInRpdGxlLnRleHRcIiksbi5jb2VyY2VGb250KGssXCJ0aXRsZS5mb250XCIse2ZhbWlseTpvLmZvbnQuZmFtaWx5LHNpemU6TWF0aC5yb3VuZCgxLjIqby5mb250LnNpemUpLGNvbG9yOkx9KSk7YnJlYWs7Y2FzZVwiYW5ndWxhcmF4aXNcIjppZihcImRhdGVcIj09PUUpe24ubG9nKFwiUG9sYXIgcGxvdHMgZG8gbm90IHN1cHBvcnQgZGF0ZSBhbmd1bGFyIGF4ZXMgeWV0LlwiKTtmb3IodmFyIEk9MDtJPF8ubGVuZ3RoO0krKylfW0ldLnZpc2libGU9ITE7RT1ULnR5cGU9TS50eXBlPVwibGluZWFyXCJ9ayhcImxpbmVhclwiPT09RT9cInRoZXRhdW5pdFwiOlwicGVyaW9kXCIpO3ZhciBEPWsoXCJkaXJlY3Rpb25cIik7ayhcInJvdGF0aW9uXCIse2NvdW50ZXJjbG9ja3dpc2U6MCxjbG9ja3dpc2U6OTB9W0RdKX1pZih6KWwoVCxNLGssTS50eXBlKSx1KFQsTSxrLE0udHlwZSx7dGlja1N1ZmZpeERmbHQ6XCJkZWdyZWVzXCI9PT1NLnRoZXRhdW5pdD9cIlxceGIwXCI6dm9pZCAwfSksYyhULE0sayx7b3V0ZXJUaWNrczohMH0pLGsoXCJzaG93dGlja2xhYmVsc1wiKSYmKG4uY29lcmNlRm9udChrLFwidGlja2ZvbnRcIix7ZmFtaWx5Om8uZm9udC5mYW1pbHksc2l6ZTpvLmZvbnQuc2l6ZSxjb2xvcjpMfSksayhcInRpY2thbmdsZVwiKSxrKFwidGlja2Zvcm1hdFwiKSksZihULE0sayx7ZGZsdENvbG9yOkMsYmdDb2xvcjpvLmJnQ29sb3IsYmxlbmQ6NjAsc2hvd0xpbmU6ITAsc2hvd0dyaWQ6ITAsbm9aZXJvTGluZTohMCxhdHRyaWJ1dGVzOmRbYl19KSxrKFwibGF5ZXJcIik7XCJjYXRlZ29yeVwiIT09RSYmayhcImhvdmVyZm9ybWF0XCIpLE0uX2lucHV0PVR9XCJjYXRlZ29yeVwiPT09ZS5hbmd1bGFyYXhpcy50eXBlJiZyKFwiZ3JpZHNoYXBlXCIpfWZ1bmN0aW9uIHgodCxlLHIsbixpKXtpZihcIi1cIj09PXIoXCJ0eXBlXCIpKXtmb3IodmFyIGEsbz0wO288bi5sZW5ndGg7bysrKWlmKG5bb10udmlzaWJsZSl7YT1uW29dO2JyZWFrfWEmJmFbaV0mJihlLnR5cGU9cChhW2ldLFwiZ3JlZ29yaWFuXCIpKSxcIi1cIj09PWUudHlwZT9lLnR5cGU9XCJsaW5lYXJcIjp0LnR5cGU9ZS50eXBlfXJldHVybiBlLnR5cGV9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtvKHQsZSxyLHt0eXBlOnYubmFtZSxhdHRyaWJ1dGVzOmQsaGFuZGxlRGVmYXVsdHM6eSxmb250OmUuZm9udCxwYXBlcl9iZ2NvbG9yOmUucGFwZXJfYmdjb2xvcixmdWxsRGF0YTpyLGxheW91dE91dDplfSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlXCI6NzUwLFwiLi4vY2FydGVzaWFuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzXCI6NzUzLFwiLi4vY2FydGVzaWFuL2xpbmVfZ3JpZF9kZWZhdWx0c1wiOjc2MyxcIi4uL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzXCI6NzY4LFwiLi4vY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0c1wiOjc2OSxcIi4uL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzXCI6NzcwLFwiLi4vZ2V0X2RhdGFcIjo3ODQsXCIuLi9zdWJwbG90X2RlZmF1bHRzXCI6ODI0LFwiLi9jb25zdGFudHNcIjo4MTEsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6ODE0LFwiLi9zZXRfY29udmVydFwiOjgyM31dLDgxNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzXCIpLGk9bi5tYXJrZXIsYT10KFwiLi4vLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0O1tcIkFyZWEgdHJhY2VzIGFyZSBkZXByZWNhdGVkIVwiLFwiUGxlYXNlIHN3aXRjaCB0byB0aGUgKmJhcnBvbGFyKiB0cmFjZSB0eXBlLlwiXS5qb2luKFwiIFwiKTtlLmV4cG9ydHM9e3I6YSh7fSxuLnIse30pLHQ6YSh7fSxuLnQse30pLG1hcmtlcjp7Y29sb3I6YSh7fSxpLmNvbG9yLHt9KSxzaXplOmEoe30saS5zaXplLHt9KSxzeW1ib2w6YSh7fSxpLnN5bWJvbCx7fSksb3BhY2l0eTphKHt9LGkub3BhY2l0eSx7fSksZWRpdFR5cGU6XCJjYWxjXCJ9fX0se1wiLi4vLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXNcIjoxMDUyfV0sODE3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsYT10KFwiLi4vLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbCxvPVtcIkxlZ2FjeSBwb2xhciBjaGFydHMgYXJlIGRlcHJlY2F0ZWQhXCIsXCJQbGVhc2Ugc3dpdGNoIHRvICpwb2xhciogc3VicGxvdHMuXCJdLmpvaW4oXCIgXCIpLHM9aSh7fSxuLmRvbWFpbix7fSk7ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBpKHt9LGUse3Nob3dsaW5lOnt2YWxUeXBlOlwiYm9vbGVhblwifSxzaG93dGlja2xhYmVsczp7dmFsVHlwZTpcImJvb2xlYW5cIn0sdGlja29yaWVudGF0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJob3Jpem9udGFsXCIsXCJ2ZXJ0aWNhbFwiXX0sdGlja2xlbjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowfSx0aWNrY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwifSx0aWNrc3VmZml4Ont2YWxUeXBlOlwic3RyaW5nXCJ9LGVuZHBhZGRpbmc6e3ZhbFR5cGU6XCJudW1iZXJcIixkZXNjcmlwdGlvbjpvfSx2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwifX0pfWUuZXhwb3J0cz1hKHtyYWRpYWxheGlzOmwoMCx7cmFuZ2U6e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsaXRlbXM6W3t2YWxUeXBlOlwibnVtYmVyXCJ9LHt2YWxUeXBlOlwibnVtYmVyXCJ9XX0sZG9tYWluOnMsb3JpZW50YXRpb246e3ZhbFR5cGU6XCJudW1iZXJcIn19KSxhbmd1bGFyYXhpczpsKDAse3JhbmdlOnt2YWxUeXBlOlwiaW5mb19hcnJheVwiLGl0ZW1zOlt7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MH0se3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjM2MH1dfSxkb21haW46c30pLGxheW91dDp7ZGlyZWN0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJjbG9ja3dpc2VcIixcImNvdW50ZXJjbG9ja3dpc2VcIl19LG9yaWVudGF0aW9uOnt2YWxUeXBlOlwiYW5nbGVcIn19fSxcInBsb3RcIixcIm5lc3RlZFwiKX0se1wiLi4vLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi8uLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo3NjF9XSw4MTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZS5leHBvcnRzPXQoXCIuL21pY3JvcG9sYXJcIikpLm1hbmFnZXI9dChcIi4vbWljcm9wb2xhcl9tYW5hZ2VyXCIpfSx7XCIuL21pY3JvcG9sYXJcIjo4MTksXCIuL21pY3JvcG9sYXJfbWFuYWdlclwiOjgyMH1dLDgxOTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi8uLi9saWJcIikuZXh0ZW5kRGVlcEFsbCxhPXQoXCIuLi8uLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCIpLk1JRF9TSElGVCxvPWUuZXhwb3J0cz17dmVyc2lvbjpcIjAuMi4yXCJ9O28uQXhpcz1mdW5jdGlvbigpe3ZhciB0LGUscixzLGw9e2RhdGE6W10sbGF5b3V0Ont9fSxjPXt9LHU9e30saD1uLmRpc3BhdGNoKFwiaG92ZXJcIiksZj17fTtyZXR1cm4gZi5yZW5kZXI9ZnVuY3Rpb24oYyl7cmV0dXJuIGZ1bmN0aW9uKGMpe2U9Y3x8ZTt2YXIgaD1sLmRhdGEsZj1sLmxheW91dDsoXCJzdHJpbmdcIj09dHlwZW9mIGV8fGUubm9kZU5hbWUpJiYoZT1uLnNlbGVjdChlKSksZS5kYXR1bShoKS5lYWNoKGZ1bmN0aW9uKGUsbCl7dmFyIGM9ZS5zbGljZSgpO3U9e2RhdGE6by51dGlsLmNsb25lSnNvbihjKSxsYXlvdXQ6by51dGlsLmNsb25lSnNvbihmKX07dmFyIGg9MDtjLmZvckVhY2goZnVuY3Rpb24odCxlKXt0LmNvbG9yfHwodC5jb2xvcj1mLmRlZmF1bHRDb2xvclJhbmdlW2hdLGg9KGgrMSklZi5kZWZhdWx0Q29sb3JSYW5nZS5sZW5ndGgpLHQuc3Ryb2tlQ29sb3J8fCh0LnN0cm9rZUNvbG9yPVwiTGluZVBsb3RcIj09PXQuZ2VvbWV0cnk/dC5jb2xvcjpuLnJnYih0LmNvbG9yKS5kYXJrZXIoKS50b1N0cmluZygpKSx1LmRhdGFbZV0uY29sb3I9dC5jb2xvcix1LmRhdGFbZV0uc3Ryb2tlQ29sb3I9dC5zdHJva2VDb2xvcix1LmRhdGFbZV0uc3Ryb2tlRGFzaD10LnN0cm9rZURhc2gsdS5kYXRhW2VdLnN0cm9rZVNpemU9dC5zdHJva2VTaXplfSk7dmFyIHA9Yy5maWx0ZXIoZnVuY3Rpb24odCxlKXt2YXIgcj10LnZpc2libGU7cmV0dXJuXCJ1bmRlZmluZWRcIj09dHlwZW9mIHJ8fCEwPT09cn0pLGQ9ITEsZz1wLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBkPWR8fFwidW5kZWZpbmVkXCIhPXR5cGVvZiB0Lmdyb3VwSWQsdH0pO2lmKGQpe3ZhciB2PW4ubmVzdCgpLmtleShmdW5jdGlvbih0LGUpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiB0Lmdyb3VwSWQ/dC5ncm91cElkOlwidW5zdGFja2VkXCJ9KS5lbnRyaWVzKGcpLG09W10seT12Lm1hcChmdW5jdGlvbih0LGUpe2lmKFwidW5zdGFja2VkXCI9PT10LmtleSlyZXR1cm4gdC52YWx1ZXM7dmFyIHI9dC52YWx1ZXNbMF0uci5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gMH0pO3JldHVybiB0LnZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSxuKXt0LnlTdGFjaz1bcl0sbS5wdXNoKHIpLHI9by51dGlsLnN1bUFycmF5cyh0LnIscil9KSx0LnZhbHVlc30pO3A9bi5tZXJnZSh5KX1wLmZvckVhY2goZnVuY3Rpb24odCxlKXt0LnQ9QXJyYXkuaXNBcnJheSh0LnRbMF0pP3QudDpbdC50XSx0LnI9QXJyYXkuaXNBcnJheSh0LnJbMF0pP3QucjpbdC5yXX0pO3ZhciB4PU1hdGgubWluKGYud2lkdGgtZi5tYXJnaW4ubGVmdC1mLm1hcmdpbi5yaWdodCxmLmhlaWdodC1mLm1hcmdpbi50b3AtZi5tYXJnaW4uYm90dG9tKS8yO3g9TWF0aC5tYXgoMTAseCk7dmFyIGIsXz1bZi5tYXJnaW4ubGVmdCt4LGYubWFyZ2luLnRvcCt4XTtiPWQ/WzAsbi5tYXgoby51dGlsLnN1bUFycmF5cyhvLnV0aWwuYXJyYXlMYXN0KHApLnJbMF0sby51dGlsLmFycmF5TGFzdChtKSkpXTpuLmV4dGVudChvLnV0aWwuZmxhdHRlbkFycmF5KHAubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucn0pKSksZi5yYWRpYWxBeGlzLmRvbWFpbiE9by5EQVRBRVhURU5UJiYoYlswXT0wKSxyPW4uc2NhbGUubGluZWFyKCkuZG9tYWluKGYucmFkaWFsQXhpcy5kb21haW4hPW8uREFUQUVYVEVOVCYmZi5yYWRpYWxBeGlzLmRvbWFpbj9mLnJhZGlhbEF4aXMuZG9tYWluOmIpLnJhbmdlKFswLHhdKSx1LmxheW91dC5yYWRpYWxBeGlzLmRvbWFpbj1yLmRvbWFpbigpO3ZhciB3LGs9by51dGlsLmZsYXR0ZW5BcnJheShwLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0LnR9KSksQT1cInN0cmluZ1wiPT10eXBlb2Yga1swXTtBJiYoaz1vLnV0aWwuZGVkdXBsaWNhdGUoayksdz1rLnNsaWNlKCksaz1uLnJhbmdlKGsubGVuZ3RoKSxwPXAubWFwKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dDtyZXR1cm4gdC50PVtrXSxkJiYoci55U3RhY2s9dC55U3RhY2spLHJ9KSk7dmFyIFQ9cC5maWx0ZXIoZnVuY3Rpb24odCxlKXtyZXR1cm5cIkxpbmVQbG90XCI9PT10Lmdlb21ldHJ5fHxcIkRvdFBsb3RcIj09PXQuZ2VvbWV0cnl9KS5sZW5ndGg9PT1wLmxlbmd0aCxNPW51bGw9PT1mLm5lZWRzRW5kU3BhY2luZz9BfHwhVDpmLm5lZWRzRW5kU3BhY2luZyxTPWYuYW5ndWxhckF4aXMuZG9tYWluJiZmLmFuZ3VsYXJBeGlzLmRvbWFpbiE9by5EQVRBRVhURU5UJiYhQSYmZi5hbmd1bGFyQXhpcy5kb21haW5bMF0+PTA/Zi5hbmd1bGFyQXhpcy5kb21haW46bi5leHRlbnQoayksRT1NYXRoLmFicyhrWzFdLWtbMF0pO1QmJiFBJiYoRT0wKTt2YXIgQz1TLnNsaWNlKCk7TSYmQSYmKENbMV0rPUUpO3ZhciBMPWYuYW5ndWxhckF4aXMudGlja3NDb3VudHx8NDtMPjgmJihMPUwvKEwvOCkrTCU4KSxmLmFuZ3VsYXJBeGlzLnRpY2tzU3RlcCYmKEw9KENbMV0tQ1swXSkvTCk7dmFyIHo9Zi5hbmd1bGFyQXhpcy50aWNrc1N0ZXB8fChDWzFdLUNbMF0pLyhMKihmLm1pbm9yVGlja3MrMSkpO3cmJih6PU1hdGgubWF4KE1hdGgucm91bmQoeiksMSkpLENbMl18fChDWzJdPXopO3ZhciBPPW4ucmFuZ2UuYXBwbHkodGhpcyxDKTtpZihPPU8ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHBhcnNlRmxvYXQodC50b1ByZWNpc2lvbigxMikpfSkscz1uLnNjYWxlLmxpbmVhcigpLmRvbWFpbihDLnNsaWNlKDAsMikpLnJhbmdlKFwiY2xvY2t3aXNlXCI9PT1mLmRpcmVjdGlvbj9bMCwzNjBdOlszNjAsMF0pLHUubGF5b3V0LmFuZ3VsYXJBeGlzLmRvbWFpbj1zLmRvbWFpbigpLHUubGF5b3V0LmFuZ3VsYXJBeGlzLmVuZFBhZGRpbmc9TT9FOjAsXCJ1bmRlZmluZWRcIj09dHlwZW9mKHQ9bi5zZWxlY3QodGhpcykuc2VsZWN0KFwic3ZnLmNoYXJ0LXJvb3RcIikpfHx0LmVtcHR5KCkpe3ZhciBJPShuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoXCI8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgY2xhc3M9J2NoYXJ0LXJvb3QnPicgKyAnPGcgY2xhc3M9J291dGVyLWdyb3VwJz4nICsgJzxnIGNsYXNzPSdjaGFydC1ncm91cCc+JyArICc8Y2lyY2xlIGNsYXNzPSdiYWNrZ3JvdW5kLWNpcmNsZSc+PC9jaXJjbGU+JyArICc8ZyBjbGFzcz0nZ2VvbWV0cnktZ3JvdXAnPjwvZz4nICsgJzxnIGNsYXNzPSdyYWRpYWwgYXhpcy1ncm91cCc+JyArICc8Y2lyY2xlIGNsYXNzPSdvdXRzaWRlLWNpcmNsZSc+PC9jaXJjbGU+JyArICc8L2c+JyArICc8ZyBjbGFzcz0nYW5ndWxhciBheGlzLWdyb3VwJz48L2c+JyArICc8ZyBjbGFzcz0nZ3VpZGVzLWdyb3VwJz48bGluZT48L2xpbmU+PGNpcmNsZSByPScwJz48L2NpcmNsZT48L2c+JyArICc8L2c+JyArICc8ZyBjbGFzcz0nbGVnZW5kLWdyb3VwJz48L2c+JyArICc8ZyBjbGFzcz0ndG9vbHRpcHMtZ3JvdXAnPjwvZz4nICsgJzxnIGNsYXNzPSd0aXRsZS1ncm91cCc+PHRleHQ+PC90ZXh0PjwvZz4nICsgJzwvZz4nICsgJzwvc3ZnPlwiLFwiYXBwbGljYXRpb24veG1sXCIpLEQ9dGhpcy5hcHBlbmRDaGlsZCh0aGlzLm93bmVyRG9jdW1lbnQuaW1wb3J0Tm9kZShJLmRvY3VtZW50RWxlbWVudCwhMCkpO3Q9bi5zZWxlY3QoRCl9dC5zZWxlY3QoXCIuZ3VpZGVzLWdyb3VwXCIpLnN0eWxlKHtcInBvaW50ZXItZXZlbnRzXCI6XCJub25lXCJ9KSx0LnNlbGVjdChcIi5hbmd1bGFyLmF4aXMtZ3JvdXBcIikuc3R5bGUoe1wicG9pbnRlci1ldmVudHNcIjpcIm5vbmVcIn0pLHQuc2VsZWN0KFwiLnJhZGlhbC5heGlzLWdyb3VwXCIpLnN0eWxlKHtcInBvaW50ZXItZXZlbnRzXCI6XCJub25lXCJ9KTt2YXIgUCxSPXQuc2VsZWN0KFwiLmNoYXJ0LWdyb3VwXCIpLEY9e2ZpbGw6XCJub25lXCIsc3Ryb2tlOmYudGlja0NvbG9yfSxCPXtcImZvbnQtc2l6ZVwiOmYuZm9udC5zaXplLFwiZm9udC1mYW1pbHlcIjpmLmZvbnQuZmFtaWx5LGZpbGw6Zi5mb250LmNvbG9yLFwidGV4dC1zaGFkb3dcIjpbXCItMXB4IDBweFwiLFwiMXB4IC0xcHhcIixcIi0xcHggMXB4XCIsXCIxcHggMXB4XCJdLm1hcChmdW5jdGlvbih0LGUpe3JldHVyblwiIFwiK3QrXCIgMCBcIitmLmZvbnQub3V0bGluZUNvbG9yfSkuam9pbihcIixcIil9O2lmKGYuc2hvd0xlZ2VuZCl7UD10LnNlbGVjdChcIi5sZWdlbmQtZ3JvdXBcIikuYXR0cih7dHJhbnNmb3JtOlwidHJhbnNsYXRlKFwiK1t4LGYubWFyZ2luLnRvcF0rXCIpXCJ9KS5zdHlsZSh7ZGlzcGxheTpcImJsb2NrXCJ9KTt2YXIgTj1wLm1hcChmdW5jdGlvbih0LGUpe3ZhciByPW8udXRpbC5jbG9uZUpzb24odCk7cmV0dXJuIHIuc3ltYm9sPVwiRG90UGxvdFwiPT09dC5nZW9tZXRyeT90LmRvdFR5cGV8fFwiY2lyY2xlXCI6XCJMaW5lUGxvdFwiIT10Lmdlb21ldHJ5P1wic3F1YXJlXCI6XCJsaW5lXCIsci52aXNpYmxlSW5MZWdlbmQ9XCJ1bmRlZmluZWRcIj09dHlwZW9mIHQudmlzaWJsZUluTGVnZW5kfHx0LnZpc2libGVJbkxlZ2VuZCxyLmNvbG9yPVwiTGluZVBsb3RcIj09PXQuZ2VvbWV0cnk/dC5zdHJva2VDb2xvcjp0LmNvbG9yLHJ9KTtvLkxlZ2VuZCgpLmNvbmZpZyh7ZGF0YTpwLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0Lm5hbWV8fFwiRWxlbWVudFwiK2V9KSxsZWdlbmRDb25maWc6aSh7fSxvLkxlZ2VuZC5kZWZhdWx0Q29uZmlnKCkubGVnZW5kQ29uZmlnLHtjb250YWluZXI6UCxlbGVtZW50czpOLHJldmVyc2VPcmRlcjpmLmxlZ2VuZC5yZXZlcnNlT3JkZXJ9KX0pKCk7dmFyIGo9UC5ub2RlKCkuZ2V0QkJveCgpO3g9TWF0aC5taW4oZi53aWR0aC1qLndpZHRoLWYubWFyZ2luLmxlZnQtZi5tYXJnaW4ucmlnaHQsZi5oZWlnaHQtZi5tYXJnaW4udG9wLWYubWFyZ2luLmJvdHRvbSkvMix4PU1hdGgubWF4KDEwLHgpLF89W2YubWFyZ2luLmxlZnQreCxmLm1hcmdpbi50b3AreF0sci5yYW5nZShbMCx4XSksdS5sYXlvdXQucmFkaWFsQXhpcy5kb21haW49ci5kb21haW4oKSxQLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIitbX1swXSt4LF9bMV0teF0rXCIpXCIpfWVsc2UgUD10LnNlbGVjdChcIi5sZWdlbmQtZ3JvdXBcIikuc3R5bGUoe2Rpc3BsYXk6XCJub25lXCJ9KTt0LmF0dHIoe3dpZHRoOmYud2lkdGgsaGVpZ2h0OmYuaGVpZ2h0fSkuc3R5bGUoe29wYWNpdHk6Zi5vcGFjaXR5fSksUi5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrXytcIilcIikuc3R5bGUoe2N1cnNvcjpcImNyb3NzaGFpclwifSk7dmFyIFY9WyhmLndpZHRoLShmLm1hcmdpbi5sZWZ0K2YubWFyZ2luLnJpZ2h0KzIqeCsoaj9qLndpZHRoOjApKSkvMiwoZi5oZWlnaHQtKGYubWFyZ2luLnRvcCtmLm1hcmdpbi5ib3R0b20rMip4KSkvMl07aWYoVlswXT1NYXRoLm1heCgwLFZbMF0pLFZbMV09TWF0aC5tYXgoMCxWWzFdKSx0LnNlbGVjdChcIi5vdXRlci1ncm91cFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrVitcIilcIiksZi50aXRsZSYmZi50aXRsZS50ZXh0KXt2YXIgVT10LnNlbGVjdChcImcudGl0bGUtZ3JvdXAgdGV4dFwiKS5zdHlsZShCKS50ZXh0KGYudGl0bGUudGV4dCkscT1VLm5vZGUoKS5nZXRCQm94KCk7VS5hdHRyKHt4Ol9bMF0tcS53aWR0aC8yLHk6X1sxXS14LTIwfSl9dmFyIEg9dC5zZWxlY3QoXCIucmFkaWFsLmF4aXMtZ3JvdXBcIik7aWYoZi5yYWRpYWxBeGlzLmdyaWRMaW5lc1Zpc2libGUpe3ZhciBHPUguc2VsZWN0QWxsKFwiY2lyY2xlLmdyaWQtY2lyY2xlXCIpLmRhdGEoci50aWNrcyg1KSk7Ry5lbnRlcigpLmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKHtjbGFzczpcImdyaWQtY2lyY2xlXCJ9KS5zdHlsZShGKSxHLmF0dHIoXCJyXCIsciksRy5leGl0KCkucmVtb3ZlKCl9SC5zZWxlY3QoXCJjaXJjbGUub3V0c2lkZS1jaXJjbGVcIikuYXR0cih7cjp4fSkuc3R5bGUoRik7dmFyIFk9dC5zZWxlY3QoXCJjaXJjbGUuYmFja2dyb3VuZC1jaXJjbGVcIikuYXR0cih7cjp4fSkuc3R5bGUoe2ZpbGw6Zi5iYWNrZ3JvdW5kQ29sb3Isc3Ryb2tlOmYuc3Ryb2tlfSk7ZnVuY3Rpb24gVyh0LGUpe3JldHVybiBzKHQpJTM2MCtmLm9yaWVudGF0aW9ufWlmKGYucmFkaWFsQXhpcy52aXNpYmxlKXt2YXIgWD1uLnN2Zy5heGlzKCkuc2NhbGUocikudGlja3MoNSkudGlja1NpemUoNSk7SC5jYWxsKFgpLmF0dHIoe3RyYW5zZm9ybTpcInJvdGF0ZShcIitmLnJhZGlhbEF4aXMub3JpZW50YXRpb24rXCIpXCJ9KSxILnNlbGVjdEFsbChcIi5kb21haW5cIikuc3R5bGUoRiksSC5zZWxlY3RBbGwoXCJnPnRleHRcIikudGV4dChmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnRleHRDb250ZW50K2YucmFkaWFsQXhpcy50aWNrc1N1ZmZpeH0pLnN0eWxlKEIpLnN0eWxlKHtcInRleHQtYW5jaG9yXCI6XCJzdGFydFwifSkuYXR0cih7eDowLHk6MCxkeDowLGR5OjAsdHJhbnNmb3JtOmZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJob3Jpem9udGFsXCI9PT1mLnJhZGlhbEF4aXMudGlja09yaWVudGF0aW9uP1wicm90YXRlKFwiKy1mLnJhZGlhbEF4aXMub3JpZW50YXRpb24rXCIpIHRyYW5zbGF0ZShcIitbMCxCW1wiZm9udC1zaXplXCJdXStcIilcIjpcInRyYW5zbGF0ZShcIitbMCxCW1wiZm9udC1zaXplXCJdXStcIilcIn19KSxILnNlbGVjdEFsbChcImc+bGluZVwiKS5zdHlsZSh7c3Ryb2tlOlwiYmxhY2tcIn0pfXZhciBaPXQuc2VsZWN0KFwiLmFuZ3VsYXIuYXhpcy1ncm91cFwiKS5zZWxlY3RBbGwoXCJnLmFuZ3VsYXItdGlja1wiKS5kYXRhKE8pLCQ9Wi5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcImFuZ3VsYXItdGlja1wiLCEwKTtaLmF0dHIoe3RyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3JldHVyblwicm90YXRlKFwiK1codCkrXCIpXCJ9fSkuc3R5bGUoe2Rpc3BsYXk6Zi5hbmd1bGFyQXhpcy52aXNpYmxlP1wiYmxvY2tcIjpcIm5vbmVcIn0pLFouZXhpdCgpLnJlbW92ZSgpLCQuYXBwZW5kKFwibGluZVwiKS5jbGFzc2VkKFwiZ3JpZC1saW5lXCIsITApLmNsYXNzZWQoXCJtYWpvclwiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUlKGYubWlub3JUaWNrcysxKT09MH0pLmNsYXNzZWQoXCJtaW5vclwiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIShlJShmLm1pbm9yVGlja3MrMSk9PTApfSkuc3R5bGUoRiksJC5zZWxlY3RBbGwoXCIubWlub3JcIikuc3R5bGUoe3N0cm9rZTpmLm1pbm9yVGlja0NvbG9yfSksWi5zZWxlY3QoXCJsaW5lLmdyaWQtbGluZVwiKS5hdHRyKHt4MTpmLnRpY2tMZW5ndGg/eC1mLnRpY2tMZW5ndGg6MCx4Mjp4fSkuc3R5bGUoe2Rpc3BsYXk6Zi5hbmd1bGFyQXhpcy5ncmlkTGluZXNWaXNpYmxlP1wiYmxvY2tcIjpcIm5vbmVcIn0pLCQuYXBwZW5kKFwidGV4dFwiKS5jbGFzc2VkKFwiYXhpcy10ZXh0XCIsITApLnN0eWxlKEIpO3ZhciBKPVouc2VsZWN0KFwidGV4dC5heGlzLXRleHRcIikuYXR0cih7eDp4K2YubGFiZWxPZmZzZXQsZHk6YStcImVtXCIsdHJhbnNmb3JtOmZ1bmN0aW9uKHQsZSl7dmFyIHI9Vyh0KSxuPXgrZi5sYWJlbE9mZnNldCxpPWYuYW5ndWxhckF4aXMudGlja09yaWVudGF0aW9uO3JldHVyblwiaG9yaXpvbnRhbFwiPT1pP1wicm90YXRlKFwiKy1yK1wiIFwiK24rXCIgMClcIjpcInJhZGlhbFwiPT1pP3I8MjcwJiZyPjkwP1wicm90YXRlKDE4MCBcIituK1wiIDApXCI6bnVsbDpcInJvdGF0ZShcIisocjw9MTgwJiZyPjA/LTkwOjkwKStcIiBcIituK1wiIDApXCJ9fSkuc3R5bGUoe1widGV4dC1hbmNob3JcIjpcIm1pZGRsZVwiLGRpc3BsYXk6Zi5hbmd1bGFyQXhpcy5sYWJlbHNWaXNpYmxlP1wiYmxvY2tcIjpcIm5vbmVcIn0pLnRleHQoZnVuY3Rpb24odCxlKXtyZXR1cm4gZSUoZi5taW5vclRpY2tzKzEpIT0wP1wiXCI6dz93W3RdK2YuYW5ndWxhckF4aXMudGlja3NTdWZmaXg6dCtmLmFuZ3VsYXJBeGlzLnRpY2tzU3VmZml4fSkuc3R5bGUoQik7Zi5hbmd1bGFyQXhpcy5yZXdyaXRlVGlja3MmJkoudGV4dChmdW5jdGlvbih0LGUpe3JldHVybiBlJShmLm1pbm9yVGlja3MrMSkhPTA/XCJcIjpmLmFuZ3VsYXJBeGlzLnJld3JpdGVUaWNrcyh0aGlzLnRleHRDb250ZW50LGUpfSk7dmFyIEs9bi5tYXgoUi5zZWxlY3RBbGwoXCIuYW5ndWxhci10aWNrIHRleHRcIilbMF0ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZ2V0Q1RNKCkuZSt0LmdldEJCb3goKS53aWR0aH0pKTtQLmF0dHIoe3RyYW5zZm9ybTpcInRyYW5zbGF0ZShcIitbeCtLLGYubWFyZ2luLnRvcF0rXCIpXCJ9KTt2YXIgUT10LnNlbGVjdChcImcuZ2VvbWV0cnktZ3JvdXBcIikuc2VsZWN0QWxsKFwiZ1wiKS5zaXplKCk+MCx0dD10LnNlbGVjdChcImcuZ2VvbWV0cnktZ3JvdXBcIikuc2VsZWN0QWxsKFwiZy5nZW9tZXRyeVwiKS5kYXRhKHApO2lmKHR0LmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKHtjbGFzczpmdW5jdGlvbih0LGUpe3JldHVyblwiZ2VvbWV0cnkgZ2VvbWV0cnlcIitlfX0pLHR0LmV4aXQoKS5yZW1vdmUoKSxwWzBdfHxRKXt2YXIgZXQ9W107cC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49e307bi5yYWRpYWxTY2FsZT1yLG4uYW5ndWxhclNjYWxlPXMsbi5jb250YWluZXI9dHQuZmlsdGVyKGZ1bmN0aW9uKHQscil7cmV0dXJuIHI9PWV9KSxuLmdlb21ldHJ5PXQuZ2VvbWV0cnksbi5vcmllbnRhdGlvbj1mLm9yaWVudGF0aW9uLG4uZGlyZWN0aW9uPWYuZGlyZWN0aW9uLG4uaW5kZXg9ZSxldC5wdXNoKHtkYXRhOnQsZ2VvbWV0cnlDb25maWc6bn0pfSk7dmFyIHJ0PW4ubmVzdCgpLmtleShmdW5jdGlvbih0LGUpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiB0LmRhdGEuZ3JvdXBJZHx8XCJ1bnN0YWNrZWRcIn0pLmVudHJpZXMoZXQpLG50PVtdO3J0LmZvckVhY2goZnVuY3Rpb24odCxlKXtcInVuc3RhY2tlZFwiPT09dC5rZXk/bnQ9bnQuY29uY2F0KHQudmFsdWVzLm1hcChmdW5jdGlvbih0LGUpe3JldHVyblt0XX0pKTpudC5wdXNoKHQudmFsdWVzKX0pLG50LmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgcjtyPUFycmF5LmlzQXJyYXkodCk/dFswXS5nZW9tZXRyeUNvbmZpZy5nZW9tZXRyeTp0Lmdlb21ldHJ5Q29uZmlnLmdlb21ldHJ5O3ZhciBuPXQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkob1tyXS5kZWZhdWx0Q29uZmlnKCksdCl9KTtvW3JdKCkuY29uZmlnKG4pKCl9KX12YXIgaXQsYXQsb3Q9dC5zZWxlY3QoXCIuZ3VpZGVzLWdyb3VwXCIpLHN0PXQuc2VsZWN0KFwiLnRvb2x0aXBzLWdyb3VwXCIpLGx0PW8udG9vbHRpcFBhbmVsKCkuY29uZmlnKHtjb250YWluZXI6c3QsZm9udFNpemU6OH0pKCksY3Q9by50b29sdGlwUGFuZWwoKS5jb25maWcoe2NvbnRhaW5lcjpzdCxmb250U2l6ZTo4fSkoKSx1dD1vLnRvb2x0aXBQYW5lbCgpLmNvbmZpZyh7Y29udGFpbmVyOnN0LGhhc1RpY2s6ITB9KSgpO2lmKCFBKXt2YXIgaHQ9b3Quc2VsZWN0KFwibGluZVwiKS5hdHRyKHt4MTowLHkxOjAseTI6MH0pLnN0eWxlKHtzdHJva2U6XCJncmV5XCIsXCJwb2ludGVyLWV2ZW50c1wiOlwibm9uZVwifSk7Ui5vbihcIm1vdXNlbW92ZS5hbmd1bGFyLWd1aWRlXCIsZnVuY3Rpb24odCxlKXt2YXIgcj1vLnV0aWwuZ2V0TW91c2VQb3MoWSkuYW5nbGU7aHQuYXR0cih7eDI6LXgsdHJhbnNmb3JtOlwicm90YXRlKFwiK3IrXCIpXCJ9KS5zdHlsZSh7b3BhY2l0eTouNX0pO3ZhciBuPShyKzE4MCszNjAtZi5vcmllbnRhdGlvbiklMzYwO2l0PXMuaW52ZXJ0KG4pO3ZhciBpPW8udXRpbC5jb252ZXJ0VG9DYXJ0ZXNpYW4oeCsxMixyKzE4MCk7bHQudGV4dChvLnV0aWwucm91bmQoaXQpKS5tb3ZlKFtpWzBdK19bMF0saVsxXStfWzFdXSl9KS5vbihcIm1vdXNlb3V0LmFuZ3VsYXItZ3VpZGVcIixmdW5jdGlvbih0LGUpe290LnNlbGVjdChcImxpbmVcIikuc3R5bGUoe29wYWNpdHk6MH0pfSl9dmFyIGZ0PW90LnNlbGVjdChcImNpcmNsZVwiKS5zdHlsZSh7c3Ryb2tlOlwiZ3JleVwiLGZpbGw6XCJub25lXCJ9KTtSLm9uKFwibW91c2Vtb3ZlLnJhZGlhbC1ndWlkZVwiLGZ1bmN0aW9uKHQsZSl7dmFyIG49by51dGlsLmdldE1vdXNlUG9zKFkpLnJhZGl1cztmdC5hdHRyKHtyOm59KS5zdHlsZSh7b3BhY2l0eTouNX0pLGF0PXIuaW52ZXJ0KG8udXRpbC5nZXRNb3VzZVBvcyhZKS5yYWRpdXMpO3ZhciBpPW8udXRpbC5jb252ZXJ0VG9DYXJ0ZXNpYW4obixmLnJhZGlhbEF4aXMub3JpZW50YXRpb24pO2N0LnRleHQoby51dGlsLnJvdW5kKGF0KSkubW92ZShbaVswXStfWzBdLGlbMV0rX1sxXV0pfSkub24oXCJtb3VzZW91dC5yYWRpYWwtZ3VpZGVcIixmdW5jdGlvbih0LGUpe2Z0LnN0eWxlKHtvcGFjaXR5OjB9KSx1dC5oaWRlKCksbHQuaGlkZSgpLGN0LmhpZGUoKX0pLHQuc2VsZWN0QWxsKFwiLmdlb21ldHJ5LWdyb3VwIC5tYXJrXCIpLm9uKFwibW91c2VvdmVyLnRvb2x0aXBcIixmdW5jdGlvbihlLHIpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLGE9dGhpcy5zdHlsZS5maWxsLHM9XCJibGFja1wiLGw9dGhpcy5zdHlsZS5vcGFjaXR5fHwxO2lmKGkuYXR0cih7XCJkYXRhLW9wYWNpdHlcIjpsfSksYSYmXCJub25lXCIhPT1hKXtpLmF0dHIoe1wiZGF0YS1maWxsXCI6YX0pLHM9bi5oc2woYSkuZGFya2VyKCkudG9TdHJpbmcoKSxpLnN0eWxlKHtmaWxsOnMsb3BhY2l0eToxfSk7dmFyIGM9e3Q6by51dGlsLnJvdW5kKGVbMF0pLHI6by51dGlsLnJvdW5kKGVbMV0pfTtBJiYoYy50PXdbZVswXV0pO3ZhciB1PVwidDogXCIrYy50K1wiLCByOiBcIitjLnIsaD10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGY9dC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscD1baC5sZWZ0K2gud2lkdGgvMi1WWzBdLWYubGVmdCxoLnRvcCtoLmhlaWdodC8yLVZbMV0tZi50b3BdO3V0LmNvbmZpZyh7Y29sb3I6c30pLnRleHQodSksdXQubW92ZShwKX1lbHNlIGE9dGhpcy5zdHlsZS5zdHJva2V8fFwiYmxhY2tcIixpLmF0dHIoe1wiZGF0YS1zdHJva2VcIjphfSkscz1uLmhzbChhKS5kYXJrZXIoKS50b1N0cmluZygpLGkuc3R5bGUoe3N0cm9rZTpzLG9wYWNpdHk6MX0pfSkub24oXCJtb3VzZW1vdmUudG9vbHRpcFwiLGZ1bmN0aW9uKHQsZSl7aWYoMCE9bi5ldmVudC53aGljaClyZXR1cm4hMTtuLnNlbGVjdCh0aGlzKS5hdHRyKFwiZGF0YS1maWxsXCIpJiZ1dC5zaG93KCl9KS5vbihcIm1vdXNlb3V0LnRvb2x0aXBcIixmdW5jdGlvbih0LGUpe3V0LmhpZGUoKTt2YXIgcj1uLnNlbGVjdCh0aGlzKSxpPXIuYXR0cihcImRhdGEtZmlsbFwiKTtpP3Iuc3R5bGUoe2ZpbGw6aSxvcGFjaXR5OnIuYXR0cihcImRhdGEtb3BhY2l0eVwiKX0pOnIuc3R5bGUoe3N0cm9rZTpyLmF0dHIoXCJkYXRhLXN0cm9rZVwiKSxvcGFjaXR5OnIuYXR0cihcImRhdGEtb3BhY2l0eVwiKX0pfSl9KX0oYyksdGhpc30sZi5jb25maWc9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGw7dmFyIGU9by51dGlsLmNsb25lSnNvbih0KTtyZXR1cm4gZS5kYXRhLmZvckVhY2goZnVuY3Rpb24odCxlKXtsLmRhdGFbZV18fChsLmRhdGFbZV09e30pLGkobC5kYXRhW2VdLG8uQXhpcy5kZWZhdWx0Q29uZmlnKCkuZGF0YVswXSksaShsLmRhdGFbZV0sdCl9KSxpKGwubGF5b3V0LG8uQXhpcy5kZWZhdWx0Q29uZmlnKCkubGF5b3V0KSxpKGwubGF5b3V0LGUubGF5b3V0KSx0aGlzfSxmLmdldExpdmVDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4gdX0sZi5nZXRpbnB1dENvbmZpZz1mdW5jdGlvbigpe3JldHVybiBjfSxmLnJhZGlhbFNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiByfSxmLmFuZ3VsYXJTY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gc30sZi5zdmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sbi5yZWJpbmQoZixoLFwib25cIiksZn0sby5BeGlzLmRlZmF1bHRDb25maWc9ZnVuY3Rpb24odCxlKXtyZXR1cm57ZGF0YTpbe3Q6WzEsMiwzLDRdLHI6WzEwLDExLDEyLDEzXSxuYW1lOlwiTGluZTFcIixnZW9tZXRyeTpcIkxpbmVQbG90XCIsY29sb3I6bnVsbCxzdHJva2VEYXNoOlwic29saWRcIixzdHJva2VDb2xvcjpudWxsLHN0cm9rZVNpemU6XCIxXCIsdmlzaWJsZUluTGVnZW5kOiEwLG9wYWNpdHk6MX1dLGxheW91dDp7ZGVmYXVsdENvbG9yUmFuZ2U6bi5zY2FsZS5jYXRlZ29yeTEwKCkucmFuZ2UoKSx0aXRsZTpudWxsLGhlaWdodDo0NTAsd2lkdGg6NTAwLG1hcmdpbjp7dG9wOjQwLHJpZ2h0OjQwLGJvdHRvbTo0MCxsZWZ0OjQwfSxmb250OntzaXplOjEyLGNvbG9yOlwiZ3JheVwiLG91dGxpbmVDb2xvcjpcIndoaXRlXCIsZmFtaWx5OlwiVGFob21hLCBzYW5zLXNlcmlmXCJ9LGRpcmVjdGlvbjpcImNsb2Nrd2lzZVwiLG9yaWVudGF0aW9uOjAsbGFiZWxPZmZzZXQ6MTAscmFkaWFsQXhpczp7ZG9tYWluOm51bGwsb3JpZW50YXRpb246LTQ1LHRpY2tzU3VmZml4OlwiXCIsdmlzaWJsZTohMCxncmlkTGluZXNWaXNpYmxlOiEwLHRpY2tPcmllbnRhdGlvbjpcImhvcml6b250YWxcIixyZXdyaXRlVGlja3M6bnVsbH0sYW5ndWxhckF4aXM6e2RvbWFpbjpbMCwzNjBdLHRpY2tzU3VmZml4OlwiXCIsdmlzaWJsZTohMCxncmlkTGluZXNWaXNpYmxlOiEwLGxhYmVsc1Zpc2libGU6ITAsdGlja09yaWVudGF0aW9uOlwiaG9yaXpvbnRhbFwiLHJld3JpdGVUaWNrczpudWxsLHRpY2tzQ291bnQ6bnVsbCx0aWNrc1N0ZXA6bnVsbH0sbWlub3JUaWNrczowLHRpY2tMZW5ndGg6bnVsbCx0aWNrQ29sb3I6XCJzaWx2ZXJcIixtaW5vclRpY2tDb2xvcjpcIiNlZWVcIixiYWNrZ3JvdW5kQ29sb3I6XCJub25lXCIsbmVlZHNFbmRTcGFjaW5nOm51bGwsc2hvd0xlZ2VuZDohMCxsZWdlbmQ6e3JldmVyc2VPcmRlcjohMX0sb3BhY2l0eToxfX19LG8udXRpbD17fSxvLkRBVEFFWFRFTlQ9XCJkYXRhRXh0ZW50XCIsby5BUkVBPVwiQXJlYUNoYXJ0XCIsby5MSU5FPVwiTGluZVBsb3RcIixvLkRPVD1cIkRvdFBsb3RcIixvLkJBUj1cIkJhckNoYXJ0XCIsby51dGlsLl9vdmVycmlkZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiB0KXIgaW4gZSYmKGVbcl09dFtyXSl9LG8udXRpbC5fZXh0ZW5kPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIHQpZVtyXT10W3JdfSxvLnV0aWwuX3JuZFNuZD1mdW5jdGlvbigpe3JldHVybiAyKk1hdGgucmFuZG9tKCktMSsoMipNYXRoLnJhbmRvbSgpLTEpKygyKk1hdGgucmFuZG9tKCktMSl9LG8udXRpbC5kYXRhRnJvbUVxdWF0aW9uMj1mdW5jdGlvbih0LGUpe3ZhciByPWV8fDY7cmV0dXJuIG4ucmFuZ2UoMCwzNjArcixyKS5tYXAoZnVuY3Rpb24oZSxyKXt2YXIgbj1lKk1hdGguUEkvMTgwO3JldHVybltlLHQobildfSl9LG8udXRpbC5kYXRhRnJvbUVxdWF0aW9uPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1lfHw2LGE9W10sbz1bXTtuLnJhbmdlKDAsMzYwK2ksaSkuZm9yRWFjaChmdW5jdGlvbihlLHIpe3ZhciBuPWUqTWF0aC5QSS8xODAsaT10KG4pO2EucHVzaChlKSxvLnB1c2goaSl9KTt2YXIgcz17dDphLHI6b307cmV0dXJuIHImJihzLm5hbWU9ciksc30sby51dGlsLmVuc3VyZUFycmF5PWZ1bmN0aW9uKHQsZSl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIHQpcmV0dXJuIG51bGw7dmFyIHI9W10uY29uY2F0KHQpO3JldHVybiBuLnJhbmdlKGUpLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiByW2VdfHxyWzBdfSl9LG8udXRpbC5maWxsQXJyYXlzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7dFtlXT1vLnV0aWwuZW5zdXJlQXJyYXkodFtlXSxyKX0pLHR9LG8udXRpbC5jbG9uZUpzb249ZnVuY3Rpb24odCl7cmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodCkpfSxvLnV0aWwudmFsaWRhdGVLZXlzPWZ1bmN0aW9uKHQsZSl7XCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPWUuc3BsaXQoXCIuXCIpKTt2YXIgcj1lLnNoaWZ0KCk7cmV0dXJuIHRbcl0mJighZS5sZW5ndGh8fG9iakhhc0tleXModFtyXSxlKSl9LG8udXRpbC5zdW1BcnJheXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbi56aXAodCxlKS5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5zdW0odCl9KX0sby51dGlsLmFycmF5TGFzdD1mdW5jdGlvbih0KXtyZXR1cm4gdFt0Lmxlbmd0aC0xXX0sby51dGlsLmFycmF5RXF1YWw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9TWF0aC5tYXgodC5sZW5ndGgsZS5sZW5ndGgsMSk7ci0tID49MCYmdFtyXT09PWVbcl07KTtyZXR1cm4tMj09PXJ9LG8udXRpbC5mbGF0dGVuQXJyYXk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdOyFvLnV0aWwuYXJyYXlFcXVhbChlLHQpOyllPXQsdD1bXS5jb25jYXQuYXBwbHkoW10sdCk7cmV0dXJuIHR9LG8udXRpbC5kZWR1cGxpY2F0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5maWx0ZXIoZnVuY3Rpb24odCxlLHIpe3JldHVybiByLmluZGV4T2YodCk9PWV9KX0sby51dGlsLmNvbnZlcnRUb0NhcnRlc2lhbj1mdW5jdGlvbih0LGUpe3ZhciByPWUqTWF0aC5QSS8xODA7cmV0dXJuW3QqTWF0aC5jb3MociksdCpNYXRoLnNpbihyKV19LG8udXRpbC5yb3VuZD1mdW5jdGlvbih0LGUpe3ZhciByPWV8fDIsbj1NYXRoLnBvdygxMCxyKTtyZXR1cm4gTWF0aC5yb3VuZCh0Km4pL259LG8udXRpbC5nZXRNb3VzZVBvcz1mdW5jdGlvbih0KXt2YXIgZT1uLm1vdXNlKHQubm9kZSgpKSxyPWVbMF0saT1lWzFdLGE9e307cmV0dXJuIGEueD1yLGEueT1pLGEucG9zPWUsYS5hbmdsZT0xODAqKE1hdGguYXRhbjIoaSxyKStNYXRoLlBJKS9NYXRoLlBJLGEucmFkaXVzPU1hdGguc3FydChyKnIraSppKSxhfSxvLnV0aWwuZHVwbGljYXRlc0NvdW50PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPXt9LG49e30saT0wLGE9dC5sZW5ndGg7aTxhO2krKykoZT10W2ldKWluIHI/KHJbZV0rKyxuW2VdPXJbZV0pOnJbZV09MTtyZXR1cm4gbn0sby51dGlsLmR1cGxpY2F0ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKG8udXRpbC5kdXBsaWNhdGVzQ291bnQodCkpfSxvLnV0aWwudHJhbnNsYXRvcj1mdW5jdGlvbih0LGUscixuKXtpZihuKXt2YXIgaT1yLnNsaWNlKCk7cj1lLGU9aX12YXIgYT1lLnJlZHVjZShmdW5jdGlvbih0LGUpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB0KXJldHVybiB0W2VdfSx0KTtcInVuZGVmaW5lZFwiIT10eXBlb2YgYSYmKGUucmVkdWNlKGZ1bmN0aW9uKHQscixuKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgdClyZXR1cm4gbj09PWUubGVuZ3RoLTEmJmRlbGV0ZSB0W3JdLHRbcl19LHQpLHIucmVkdWNlKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5cInVuZGVmaW5lZFwiPT10eXBlb2YgdFtlXSYmKHRbZV09e30pLG49PT1yLmxlbmd0aC0xJiYodFtlXT1hKSx0W2VdfSx0KSl9LG8uUG9seUNoYXJ0PWZ1bmN0aW9uKCl7dmFyIHQ9W28uUG9seUNoYXJ0LmRlZmF1bHRDb25maWcoKV0sZT1uLmRpc3BhdGNoKFwiaG92ZXJcIikscj17c29saWQ6XCJub25lXCIsZGFzaDpbNSwyXSxkb3Q6WzIsNV19O2Z1bmN0aW9uIGEoKXt2YXIgZT10WzBdLmdlb21ldHJ5Q29uZmlnLGk9ZS5jb250YWluZXI7XCJzdHJpbmdcIj09dHlwZW9mIGkmJihpPW4uc2VsZWN0KGkpKSxpLmRhdHVtKHQpLmVhY2goZnVuY3Rpb24odCxpKXt2YXIgYT0hIXRbMF0uZGF0YS55U3RhY2ssbz10Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBhP24uemlwKHQuZGF0YS50WzBdLHQuZGF0YS5yWzBdLHQuZGF0YS55U3RhY2tbMF0pOm4uemlwKHQuZGF0YS50WzBdLHQuZGF0YS5yWzBdKX0pLHM9ZS5hbmd1bGFyU2NhbGUsbD1lLnJhZGlhbFNjYWxlLmRvbWFpbigpWzBdLGM9e2JhcjpmdW5jdGlvbihyLGksYSl7dmFyIG89dFthXS5kYXRhLGw9ZS5yYWRpYWxTY2FsZShyWzFdKS1lLnJhZGlhbFNjYWxlKDApLGM9ZS5yYWRpYWxTY2FsZShyWzJdfHwwKSx1PW8uYmFyV2lkdGg7bi5zZWxlY3QodGhpcykuYXR0cih7Y2xhc3M6XCJtYXJrIGJhclwiLGQ6XCJNXCIrW1tsK2MsLXUvMl0sW2wrYyx1LzJdLFtjLHUvMl0sW2MsLXUvMl1dLmpvaW4oXCJMXCIpK1wiWlwiLHRyYW5zZm9ybTpmdW5jdGlvbih0LHIpe3JldHVyblwicm90YXRlKFwiKyhlLm9yaWVudGF0aW9uK3ModFswXSkpK1wiKVwifX0pfX07Yy5kb3Q9ZnVuY3Rpb24ocixpLGEpe3ZhciBvPXJbMl0/W3JbMF0sclsxXStyWzJdXTpyLHM9bi5zdmcuc3ltYm9sKCkuc2l6ZSh0W2FdLmRhdGEuZG90U2l6ZSkudHlwZSh0W2FdLmRhdGEuZG90VHlwZSkocixpKTtuLnNlbGVjdCh0aGlzKS5hdHRyKHtjbGFzczpcIm1hcmsgZG90XCIsZDpzLHRyYW5zZm9ybTpmdW5jdGlvbih0LHIpe3ZhciBuLGksYSxzPShuPWZ1bmN0aW9uKHQscil7dmFyIG49ZS5yYWRpYWxTY2FsZSh0WzFdKSxpPShlLmFuZ3VsYXJTY2FsZSh0WzBdKStlLm9yaWVudGF0aW9uKSpNYXRoLlBJLzE4MDtyZXR1cm57cjpuLHQ6aX19KG8pLGk9bi5yKk1hdGguY29zKG4udCksYT1uLnIqTWF0aC5zaW4obi50KSx7eDppLHk6YX0pO3JldHVyblwidHJhbnNsYXRlKFwiK1tzLngscy55XStcIilcIn19KX07dmFyIHU9bi5zdmcubGluZS5yYWRpYWwoKS5pbnRlcnBvbGF0ZSh0WzBdLmRhdGEubGluZUludGVycG9sYXRpb24pLnJhZGl1cyhmdW5jdGlvbih0KXtyZXR1cm4gZS5yYWRpYWxTY2FsZSh0WzFdKX0pLmFuZ2xlKGZ1bmN0aW9uKHQpe3JldHVybiBlLmFuZ3VsYXJTY2FsZSh0WzBdKSpNYXRoLlBJLzE4MH0pO2MubGluZT1mdW5jdGlvbihyLGksYSl7dmFyIHM9clsyXT9vW2FdLm1hcChmdW5jdGlvbih0LGUpe3JldHVyblt0WzBdLHRbMV0rdFsyXV19KTpvW2FdO2lmKG4uc2VsZWN0KHRoaXMpLmVhY2goYy5kb3QpLnN0eWxlKHtvcGFjaXR5OmZ1bmN0aW9uKGUscil7cmV0dXJuK3RbYV0uZGF0YS5kb3RWaXNpYmxlfSxmaWxsOmQuc3Ryb2tlKHIsaSxhKX0pLmF0dHIoe2NsYXNzOlwibWFyayBkb3RcIn0pLCEoaT4wKSl7dmFyIGw9bi5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5zZWxlY3RBbGwoXCJwYXRoLmxpbmVcIikuZGF0YShbMF0pO2wuZW50ZXIoKS5pbnNlcnQoXCJwYXRoXCIpLGwuYXR0cih7Y2xhc3M6XCJsaW5lXCIsZDp1KHMpLHRyYW5zZm9ybTpmdW5jdGlvbih0LHIpe3JldHVyblwicm90YXRlKFwiKyhlLm9yaWVudGF0aW9uKzkwKStcIilcIn0sXCJwb2ludGVyLWV2ZW50c1wiOlwibm9uZVwifSkuc3R5bGUoe2ZpbGw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZC5maWxsKHIsaSxhKX0sXCJmaWxsLW9wYWNpdHlcIjowLHN0cm9rZTpmdW5jdGlvbih0LGUpe3JldHVybiBkLnN0cm9rZShyLGksYSl9LFwic3Ryb2tlLXdpZHRoXCI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZFtcInN0cm9rZS13aWR0aFwiXShyLGksYSl9LFwic3Ryb2tlLWRhc2hhcnJheVwiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGRbXCJzdHJva2UtZGFzaGFycmF5XCJdKHIsaSxhKX0sb3BhY2l0eTpmdW5jdGlvbih0LGUpe3JldHVybiBkLm9wYWNpdHkocixpLGEpfSxkaXNwbGF5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQuZGlzcGxheShyLGksYSl9fSl9fTt2YXIgaD1lLmFuZ3VsYXJTY2FsZS5yYW5nZSgpLGY9TWF0aC5hYnMoaFsxXS1oWzBdKS9vWzBdLmxlbmd0aCpNYXRoLlBJLzE4MCxwPW4uc3ZnLmFyYygpLnN0YXJ0QW5nbGUoZnVuY3Rpb24odCl7cmV0dXJuLWYvMn0pLmVuZEFuZ2xlKGZ1bmN0aW9uKHQpe3JldHVybiBmLzJ9KS5pbm5lclJhZGl1cyhmdW5jdGlvbih0KXtyZXR1cm4gZS5yYWRpYWxTY2FsZShsKyh0WzJdfHwwKSl9KS5vdXRlclJhZGl1cyhmdW5jdGlvbih0KXtyZXR1cm4gZS5yYWRpYWxTY2FsZShsKyh0WzJdfHwwKSkrZS5yYWRpYWxTY2FsZSh0WzFdKX0pO2MuYXJjPWZ1bmN0aW9uKHQscixpKXtuLnNlbGVjdCh0aGlzKS5hdHRyKHtjbGFzczpcIm1hcmsgYXJjXCIsZDpwLHRyYW5zZm9ybTpmdW5jdGlvbih0LHIpe3JldHVyblwicm90YXRlKFwiKyhlLm9yaWVudGF0aW9uK3ModFswXSkrOTApK1wiKVwifX0pfTt2YXIgZD17ZmlsbDpmdW5jdGlvbihlLHIsbil7cmV0dXJuIHRbbl0uZGF0YS5jb2xvcn0sc3Ryb2tlOmZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdFtuXS5kYXRhLnN0cm9rZUNvbG9yfSxcInN0cm9rZS13aWR0aFwiOmZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdFtuXS5kYXRhLnN0cm9rZVNpemUrXCJweFwifSxcInN0cm9rZS1kYXNoYXJyYXlcIjpmdW5jdGlvbihlLG4saSl7cmV0dXJuIHJbdFtpXS5kYXRhLnN0cm9rZURhc2hdfSxvcGFjaXR5OmZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdFtuXS5kYXRhLm9wYWNpdHl9LGRpc3BsYXk6ZnVuY3Rpb24oZSxyLG4pe3JldHVyblwidW5kZWZpbmVkXCI9PXR5cGVvZiB0W25dLmRhdGEudmlzaWJsZXx8dFtuXS5kYXRhLnZpc2libGU/XCJibG9ja1wiOlwibm9uZVwifX0sZz1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoXCJnLmxheWVyXCIpLmRhdGEobyk7Zy5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cih7Y2xhc3M6XCJsYXllclwifSk7dmFyIHY9Zy5zZWxlY3RBbGwoXCJwYXRoLm1hcmtcIikuZGF0YShmdW5jdGlvbih0LGUpe3JldHVybiB0fSk7di5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuYXR0cih7Y2xhc3M6XCJtYXJrXCJ9KSx2LnN0eWxlKGQpLmVhY2goY1tlLmdlb21ldHJ5VHlwZV0pLHYuZXhpdCgpLnJlbW92ZSgpLGcuZXhpdCgpLnJlbW92ZSgpfSl9cmV0dXJuIGEuY29uZmlnPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlLmZvckVhY2goZnVuY3Rpb24oZSxyKXt0W3JdfHwodFtyXT17fSksaSh0W3JdLG8uUG9seUNoYXJ0LmRlZmF1bHRDb25maWcoKSksaSh0W3JdLGUpfSksdGhpcyk6dH0sYS5nZXRDb2xvclNjYWxlPWZ1bmN0aW9uKCl7fSxuLnJlYmluZChhLGUsXCJvblwiKSxhfSxvLlBvbHlDaGFydC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJue2RhdGE6e25hbWU6XCJnZW9tMVwiLHQ6W1sxLDIsMyw0XV0scjpbWzEsMiwzLDRdXSxkb3RUeXBlOlwiY2lyY2xlXCIsZG90U2l6ZTo2NCxkb3RWaXNpYmxlOiExLGJhcldpZHRoOjIwLGNvbG9yOlwiI2ZmYTUwMFwiLHN0cm9rZVNpemU6MSxzdHJva2VDb2xvcjpcInNpbHZlclwiLHN0cm9rZURhc2g6XCJzb2xpZFwiLG9wYWNpdHk6MSxpbmRleDowLHZpc2libGU6ITAsdmlzaWJsZUluTGVnZW5kOiEwfSxnZW9tZXRyeUNvbmZpZzp7Z2VvbWV0cnk6XCJMaW5lUGxvdFwiLGdlb21ldHJ5VHlwZTpcImFyY1wiLGRpcmVjdGlvbjpcImNsb2Nrd2lzZVwiLG9yaWVudGF0aW9uOjAsY29udGFpbmVyOlwiYm9keVwiLHJhZGlhbFNjYWxlOm51bGwsYW5ndWxhclNjYWxlOm51bGwsY29sb3JTY2FsZTpuLnNjYWxlLmNhdGVnb3J5MjAoKX19fSxvLkJhckNoYXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG8uUG9seUNoYXJ0KCl9LG8uQmFyQ2hhcnQuZGVmYXVsdENvbmZpZz1mdW5jdGlvbigpe3JldHVybntnZW9tZXRyeUNvbmZpZzp7Z2VvbWV0cnlUeXBlOlwiYmFyXCJ9fX0sby5BcmVhQ2hhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gby5Qb2x5Q2hhcnQoKX0sby5BcmVhQ2hhcnQuZGVmYXVsdENvbmZpZz1mdW5jdGlvbigpe3JldHVybntnZW9tZXRyeUNvbmZpZzp7Z2VvbWV0cnlUeXBlOlwiYXJjXCJ9fX0sby5Eb3RQbG90PWZ1bmN0aW9uKCl7cmV0dXJuIG8uUG9seUNoYXJ0KCl9LG8uRG90UGxvdC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJue2dlb21ldHJ5Q29uZmlnOntnZW9tZXRyeVR5cGU6XCJkb3RcIixkb3RUeXBlOlwiY2lyY2xlXCJ9fX0sby5MaW5lUGxvdD1mdW5jdGlvbigpe3JldHVybiBvLlBvbHlDaGFydCgpfSxvLkxpbmVQbG90LmRlZmF1bHRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57Z2VvbWV0cnlDb25maWc6e2dlb21ldHJ5VHlwZTpcImxpbmVcIn19fSxvLkxlZ2VuZD1mdW5jdGlvbigpe3ZhciB0PW8uTGVnZW5kLmRlZmF1bHRDb25maWcoKSxlPW4uZGlzcGF0Y2goXCJob3ZlclwiKTtmdW5jdGlvbiByKCl7dmFyIGU9dC5sZWdlbmRDb25maWcsYT10LmRhdGEubWFwKGZ1bmN0aW9uKHQscil7cmV0dXJuW10uY29uY2F0KHQpLm1hcChmdW5jdGlvbih0LG4pe3ZhciBhPWkoe30sZS5lbGVtZW50c1tyXSk7cmV0dXJuIGEubmFtZT10LGEuY29sb3I9W10uY29uY2F0KGUuZWxlbWVudHNbcl0uY29sb3IpW25dLGF9KX0pLG89bi5tZXJnZShhKTtvPW8uZmlsdGVyKGZ1bmN0aW9uKHQscil7cmV0dXJuIGUuZWxlbWVudHNbcl0mJihlLmVsZW1lbnRzW3JdLnZpc2libGVJbkxlZ2VuZHx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIGUuZWxlbWVudHNbcl0udmlzaWJsZUluTGVnZW5kKX0pLGUucmV2ZXJzZU9yZGVyJiYobz1vLnJldmVyc2UoKSk7dmFyIHM9ZS5jb250YWluZXI7KFwic3RyaW5nXCI9PXR5cGVvZiBzfHxzLm5vZGVOYW1lKSYmKHM9bi5zZWxlY3QocykpO3ZhciBsPW8ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY29sb3J9KSxjPWUuZm9udFNpemUsdT1udWxsPT1lLmlzQ29udGludW91cz9cIm51bWJlclwiPT10eXBlb2Ygb1swXTplLmlzQ29udGludW91cyxoPXU/ZS5oZWlnaHQ6YypvLmxlbmd0aCxmPXMuY2xhc3NlZChcImxlZ2VuZC1ncm91cFwiLCEwKS5zZWxlY3RBbGwoXCJzdmdcIikuZGF0YShbMF0pLHA9Zi5lbnRlcigpLmFwcGVuZChcInN2Z1wiKS5hdHRyKHt3aWR0aDozMDAsaGVpZ2h0OmgrYyx4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXCJ4bWxuczp4bGlua1wiOlwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLHZlcnNpb246XCIxLjFcIn0pO3AuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwibGVnZW5kLWF4aXNcIiwhMCkscC5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJsZWdlbmQtbWFya3NcIiwhMCk7dmFyIGQ9bi5yYW5nZShvLmxlbmd0aCksZz1uLnNjYWxlW3U/XCJsaW5lYXJcIjpcIm9yZGluYWxcIl0oKS5kb21haW4oZCkucmFuZ2UobCksdj1uLnNjYWxlW3U/XCJsaW5lYXJcIjpcIm9yZGluYWxcIl0oKS5kb21haW4oZClbdT9cInJhbmdlXCI6XCJyYW5nZVBvaW50c1wiXShbMCxoXSk7aWYodSl7dmFyIG09Zi5zZWxlY3QoXCIubGVnZW5kLW1hcmtzXCIpLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibGluZWFyR3JhZGllbnRcIikuYXR0cih7aWQ6XCJncmFkMVwiLHgxOlwiMCVcIix5MTpcIjAlXCIseDI6XCIwJVwiLHkyOlwiMTAwJVwifSkuc2VsZWN0QWxsKFwic3RvcFwiKS5kYXRhKGwpO20uZW50ZXIoKS5hcHBlbmQoXCJzdG9wXCIpLG0uYXR0cih7b2Zmc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUvKGwubGVuZ3RoLTEpKjEwMCtcIiVcIn19KS5zdHlsZSh7XCJzdG9wLWNvbG9yXCI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdH19KSxmLmFwcGVuZChcInJlY3RcIikuY2xhc3NlZChcImxlZ2VuZC1tYXJrXCIsITApLmF0dHIoe2hlaWdodDplLmhlaWdodCx3aWR0aDplLmNvbG9yQmFuZFdpZHRoLGZpbGw6XCJ1cmwoI2dyYWQxKVwifSl9ZWxzZXt2YXIgeT1mLnNlbGVjdChcIi5sZWdlbmQtbWFya3NcIikuc2VsZWN0QWxsKFwicGF0aC5sZWdlbmQtbWFya1wiKS5kYXRhKG8pO3kuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoXCJsZWdlbmQtbWFya1wiLCEwKSx5LmF0dHIoe3RyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3JldHVyblwidHJhbnNsYXRlKFwiK1tjLzIsdihlKStjLzJdK1wiKVwifSxkOmZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLG89dC5zeW1ib2w7cmV0dXJuIGE9MyooaT1jKSxcImxpbmVcIj09PShyPW8pP1wiTVwiK1tbLWkvMiwtaS8xMl0sW2kvMiwtaS8xMl0sW2kvMixpLzEyXSxbLWkvMixpLzEyXV0rXCJaXCI6LTEhPW4uc3ZnLnN5bWJvbFR5cGVzLmluZGV4T2Yocik/bi5zdmcuc3ltYm9sKCkudHlwZShyKS5zaXplKGEpKCk6bi5zdmcuc3ltYm9sKCkudHlwZShcInNxdWFyZVwiKS5zaXplKGEpKCl9LGZpbGw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZyhlKX19KSx5LmV4aXQoKS5yZW1vdmUoKX12YXIgeD1uLnN2Zy5heGlzKCkuc2NhbGUodikub3JpZW50KFwicmlnaHRcIiksYj1mLnNlbGVjdChcImcubGVnZW5kLWF4aXNcIikuYXR0cih7dHJhbnNmb3JtOlwidHJhbnNsYXRlKFwiK1t1P2UuY29sb3JCYW5kV2lkdGg6YyxjLzJdK1wiKVwifSkuY2FsbCh4KTtyZXR1cm4gYi5zZWxlY3RBbGwoXCIuZG9tYWluXCIpLnN0eWxlKHtmaWxsOlwibm9uZVwiLHN0cm9rZTpcIm5vbmVcIn0pLGIuc2VsZWN0QWxsKFwibGluZVwiKS5zdHlsZSh7ZmlsbDpcIm5vbmVcIixzdHJva2U6dT9lLnRleHRDb2xvcjpcIm5vbmVcIn0pLGIuc2VsZWN0QWxsKFwidGV4dFwiKS5zdHlsZSh7ZmlsbDplLnRleHRDb2xvcixcImZvbnQtc2l6ZVwiOmUuZm9udFNpemV9KS50ZXh0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG9bZV0ubmFtZX0pLHJ9cmV0dXJuIHIuY29uZmlnPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpKHQsZSksdGhpcyk6dH0sbi5yZWJpbmQocixlLFwib25cIikscn0sby5MZWdlbmQuZGVmYXVsdENvbmZpZz1mdW5jdGlvbih0LGUpe3JldHVybntkYXRhOltcImFcIixcImJcIixcImNcIl0sbGVnZW5kQ29uZmlnOntlbGVtZW50czpbe3N5bWJvbDpcImxpbmVcIixjb2xvcjpcInJlZFwifSx7c3ltYm9sOlwic3F1YXJlXCIsY29sb3I6XCJ5ZWxsb3dcIn0se3N5bWJvbDpcImRpYW1vbmRcIixjb2xvcjpcImxpbWVncmVlblwifV0saGVpZ2h0OjE1MCxjb2xvckJhbmRXaWR0aDozMCxmb250U2l6ZToxMixjb250YWluZXI6XCJib2R5XCIsaXNDb250aW51b3VzOm51bGwsdGV4dENvbG9yOlwiZ3JleVwiLHJldmVyc2VPcmRlcjohMX19fSxvLnRvb2x0aXBQYW5lbD1mdW5jdGlvbigpe3ZhciB0LGUscixhPXtjb250YWluZXI6bnVsbCxoYXNUaWNrOiExLGZvbnRTaXplOjEyLGNvbG9yOlwid2hpdGVcIixwYWRkaW5nOjV9LHM9XCJ0b29sdGlwLVwiK28udG9vbHRpcFBhbmVsLnVpZCsrLGw9MTAsYz1mdW5jdGlvbigpe3ZhciBuPSh0PWEuY29udGFpbmVyLnNlbGVjdEFsbChcImcuXCIrcykuZGF0YShbMF0pKS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChzLCEwKS5zdHlsZSh7XCJwb2ludGVyLWV2ZW50c1wiOlwibm9uZVwiLGRpc3BsYXk6XCJub25lXCJ9KTtyZXR1cm4gcj1uLmFwcGVuZChcInBhdGhcIikuc3R5bGUoe2ZpbGw6XCJ3aGl0ZVwiLFwiZmlsbC1vcGFjaXR5XCI6Ljl9KS5hdHRyKHtkOlwiTTAgMFwifSksZT1uLmFwcGVuZChcInRleHRcIikuYXR0cih7ZHg6YS5wYWRkaW5nK2wsZHk6LjMqK2EuZm9udFNpemV9KSxjfTtyZXR1cm4gYy50ZXh0PWZ1bmN0aW9uKGkpe3ZhciBvPW4uaHNsKGEuY29sb3IpLmwscz1vPj0uNT9cIiNhYWFcIjpcIndoaXRlXCIsdT1vPj0uNT9cImJsYWNrXCI6XCJ3aGl0ZVwiLGg9aXx8XCJcIjtlLnN0eWxlKHtmaWxsOnUsXCJmb250LXNpemVcIjphLmZvbnRTaXplK1wicHhcIn0pLnRleHQoaCk7dmFyIGY9YS5wYWRkaW5nLHA9ZS5ub2RlKCkuZ2V0QkJveCgpLGQ9e2ZpbGw6YS5jb2xvcixzdHJva2U6cyxcInN0cm9rZS13aWR0aFwiOlwiMnB4XCJ9LGc9cC53aWR0aCsyKmYrbCx2PXAuaGVpZ2h0KzIqZjtyZXR1cm4gci5hdHRyKHtkOlwiTVwiK1tbbCwtdi8yXSxbbCwtdi80XSxbYS5oYXNUaWNrPzA6bCwwXSxbbCx2LzRdLFtsLHYvMl0sW2csdi8yXSxbZywtdi8yXV0uam9pbihcIkxcIikrXCJaXCJ9KS5zdHlsZShkKSx0LmF0dHIoe3RyYW5zZm9ybTpcInRyYW5zbGF0ZShcIitbbCwtdi8yKzIqZl0rXCIpXCJ9KSx0LnN0eWxlKHtkaXNwbGF5OlwiYmxvY2tcIn0pLGN9LGMubW92ZT1mdW5jdGlvbihlKXtpZih0KXJldHVybiB0LmF0dHIoe3RyYW5zZm9ybTpcInRyYW5zbGF0ZShcIitbZVswXSxlWzFdXStcIilcIn0pLnN0eWxlKHtkaXNwbGF5OlwiYmxvY2tcIn0pLGN9LGMuaGlkZT1mdW5jdGlvbigpe2lmKHQpcmV0dXJuIHQuc3R5bGUoe2Rpc3BsYXk6XCJub25lXCJ9KSxjfSxjLnNob3c9ZnVuY3Rpb24oKXtpZih0KXJldHVybiB0LnN0eWxlKHtkaXNwbGF5OlwiYmxvY2tcIn0pLGN9LGMuY29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybiBpKGEsdCksY30sY30sby50b29sdGlwUGFuZWwudWlkPTEsby5hZGFwdGVyPXt9LG8uYWRhcHRlci5wbG90bHk9ZnVuY3Rpb24oKXt2YXIgdD17Y29udmVydDpmdW5jdGlvbih0LGUpe3ZhciByPXt9O2lmKHQuZGF0YSYmKHIuZGF0YT10LmRhdGEubWFwKGZ1bmN0aW9uKHQscil7dmFyIG49aSh7fSx0KTtyZXR1cm5bW24sW1wibWFya2VyXCIsXCJjb2xvclwiXSxbXCJjb2xvclwiXV0sW24sW1wibWFya2VyXCIsXCJvcGFjaXR5XCJdLFtcIm9wYWNpdHlcIl1dLFtuLFtcIm1hcmtlclwiLFwibGluZVwiLFwiY29sb3JcIl0sW1wic3Ryb2tlQ29sb3JcIl1dLFtuLFtcIm1hcmtlclwiLFwibGluZVwiLFwiZGFzaFwiXSxbXCJzdHJva2VEYXNoXCJdXSxbbixbXCJtYXJrZXJcIixcImxpbmVcIixcIndpZHRoXCJdLFtcInN0cm9rZVNpemVcIl1dLFtuLFtcIm1hcmtlclwiLFwic3ltYm9sXCJdLFtcImRvdFR5cGVcIl1dLFtuLFtcIm1hcmtlclwiLFwic2l6ZVwiXSxbXCJkb3RTaXplXCJdXSxbbixbXCJtYXJrZXJcIixcImJhcldpZHRoXCJdLFtcImJhcldpZHRoXCJdXSxbbixbXCJsaW5lXCIsXCJpbnRlcnBvbGF0aW9uXCJdLFtcImxpbmVJbnRlcnBvbGF0aW9uXCJdXSxbbixbXCJzaG93bGVnZW5kXCJdLFtcInZpc2libGVJbkxlZ2VuZFwiXV1dLmZvckVhY2goZnVuY3Rpb24odCxyKXtvLnV0aWwudHJhbnNsYXRvci5hcHBseShudWxsLHQuY29uY2F0KGUpKX0pLGV8fGRlbGV0ZSBuLm1hcmtlcixlJiZkZWxldGUgbi5ncm91cElkLGU/KFwiTGluZVBsb3RcIj09PW4uZ2VvbWV0cnk/KG4udHlwZT1cInNjYXR0ZXJcIiwhMD09PW4uZG90VmlzaWJsZT8oZGVsZXRlIG4uZG90VmlzaWJsZSxuLm1vZGU9XCJsaW5lcyttYXJrZXJzXCIpOm4ubW9kZT1cImxpbmVzXCIpOlwiRG90UGxvdFwiPT09bi5nZW9tZXRyeT8obi50eXBlPVwic2NhdHRlclwiLG4ubW9kZT1cIm1hcmtlcnNcIik6XCJBcmVhQ2hhcnRcIj09PW4uZ2VvbWV0cnk/bi50eXBlPVwiYXJlYVwiOlwiQmFyQ2hhcnRcIj09PW4uZ2VvbWV0cnkmJihuLnR5cGU9XCJiYXJcIiksZGVsZXRlIG4uZ2VvbWV0cnkpOihcInNjYXR0ZXJcIj09PW4udHlwZT9cImxpbmVzXCI9PT1uLm1vZGU/bi5nZW9tZXRyeT1cIkxpbmVQbG90XCI6XCJtYXJrZXJzXCI9PT1uLm1vZGU/bi5nZW9tZXRyeT1cIkRvdFBsb3RcIjpcImxpbmVzK21hcmtlcnNcIj09PW4ubW9kZSYmKG4uZ2VvbWV0cnk9XCJMaW5lUGxvdFwiLG4uZG90VmlzaWJsZT0hMCk6XCJhcmVhXCI9PT1uLnR5cGU/bi5nZW9tZXRyeT1cIkFyZWFDaGFydFwiOlwiYmFyXCI9PT1uLnR5cGUmJihuLmdlb21ldHJ5PVwiQmFyQ2hhcnRcIiksZGVsZXRlIG4ubW9kZSxkZWxldGUgbi50eXBlKSxufSksIWUmJnQubGF5b3V0JiZcInN0YWNrXCI9PT10LmxheW91dC5iYXJtb2RlKSl7dmFyIGE9by51dGlsLmR1cGxpY2F0ZXMoci5kYXRhLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0Lmdlb21ldHJ5fSkpO3IuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49YS5pbmRleE9mKHQuZ2VvbWV0cnkpOy0xIT1uJiYoci5kYXRhW2VdLmdyb3VwSWQ9bil9KX1pZih0LmxheW91dCl7dmFyIHM9aSh7fSx0LmxheW91dCk7aWYoW1tzLFtcInBsb3RfYmdjb2xvclwiXSxbXCJiYWNrZ3JvdW5kQ29sb3JcIl1dLFtzLFtcInNob3dsZWdlbmRcIl0sW1wic2hvd0xlZ2VuZFwiXV0sW3MsW1wicmFkaWFsYXhpc1wiXSxbXCJyYWRpYWxBeGlzXCJdXSxbcyxbXCJhbmd1bGFyYXhpc1wiXSxbXCJhbmd1bGFyQXhpc1wiXV0sW3MuYW5ndWxhcmF4aXMsW1wic2hvd2xpbmVcIl0sW1wiZ3JpZExpbmVzVmlzaWJsZVwiXV0sW3MuYW5ndWxhcmF4aXMsW1wic2hvd3RpY2tsYWJlbHNcIl0sW1wibGFiZWxzVmlzaWJsZVwiXV0sW3MuYW5ndWxhcmF4aXMsW1wibnRpY2tzXCJdLFtcInRpY2tzQ291bnRcIl1dLFtzLmFuZ3VsYXJheGlzLFtcInRpY2tvcmllbnRhdGlvblwiXSxbXCJ0aWNrT3JpZW50YXRpb25cIl1dLFtzLmFuZ3VsYXJheGlzLFtcInRpY2tzdWZmaXhcIl0sW1widGlja3NTdWZmaXhcIl1dLFtzLmFuZ3VsYXJheGlzLFtcInJhbmdlXCJdLFtcImRvbWFpblwiXV0sW3MuYW5ndWxhcmF4aXMsW1wiZW5kcGFkZGluZ1wiXSxbXCJlbmRQYWRkaW5nXCJdXSxbcy5yYWRpYWxheGlzLFtcInNob3dsaW5lXCJdLFtcImdyaWRMaW5lc1Zpc2libGVcIl1dLFtzLnJhZGlhbGF4aXMsW1widGlja29yaWVudGF0aW9uXCJdLFtcInRpY2tPcmllbnRhdGlvblwiXV0sW3MucmFkaWFsYXhpcyxbXCJ0aWNrc3VmZml4XCJdLFtcInRpY2tzU3VmZml4XCJdXSxbcy5yYWRpYWxheGlzLFtcInJhbmdlXCJdLFtcImRvbWFpblwiXV0sW3MuYW5ndWxhckF4aXMsW1wic2hvd2xpbmVcIl0sW1wiZ3JpZExpbmVzVmlzaWJsZVwiXV0sW3MuYW5ndWxhckF4aXMsW1wic2hvd3RpY2tsYWJlbHNcIl0sW1wibGFiZWxzVmlzaWJsZVwiXV0sW3MuYW5ndWxhckF4aXMsW1wibnRpY2tzXCJdLFtcInRpY2tzQ291bnRcIl1dLFtzLmFuZ3VsYXJBeGlzLFtcInRpY2tvcmllbnRhdGlvblwiXSxbXCJ0aWNrT3JpZW50YXRpb25cIl1dLFtzLmFuZ3VsYXJBeGlzLFtcInRpY2tzdWZmaXhcIl0sW1widGlja3NTdWZmaXhcIl1dLFtzLmFuZ3VsYXJBeGlzLFtcInJhbmdlXCJdLFtcImRvbWFpblwiXV0sW3MuYW5ndWxhckF4aXMsW1wiZW5kcGFkZGluZ1wiXSxbXCJlbmRQYWRkaW5nXCJdXSxbcy5yYWRpYWxBeGlzLFtcInNob3dsaW5lXCJdLFtcImdyaWRMaW5lc1Zpc2libGVcIl1dLFtzLnJhZGlhbEF4aXMsW1widGlja29yaWVudGF0aW9uXCJdLFtcInRpY2tPcmllbnRhdGlvblwiXV0sW3MucmFkaWFsQXhpcyxbXCJ0aWNrc3VmZml4XCJdLFtcInRpY2tzU3VmZml4XCJdXSxbcy5yYWRpYWxBeGlzLFtcInJhbmdlXCJdLFtcImRvbWFpblwiXV0sW3MuZm9udCxbXCJvdXRsaW5lY29sb3JcIl0sW1wib3V0bGluZUNvbG9yXCJdXSxbcy5sZWdlbmQsW1widHJhY2VvcmRlclwiXSxbXCJyZXZlcnNlT3JkZXJcIl1dLFtzLFtcImxhYmVsb2Zmc2V0XCJdLFtcImxhYmVsT2Zmc2V0XCJdXSxbcyxbXCJkZWZhdWx0Y29sb3JyYW5nZVwiXSxbXCJkZWZhdWx0Q29sb3JSYW5nZVwiXV1dLmZvckVhY2goZnVuY3Rpb24odCxyKXtvLnV0aWwudHJhbnNsYXRvci5hcHBseShudWxsLHQuY29uY2F0KGUpKX0pLGU/KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzLnRpY2tMZW5ndGgmJihzLmFuZ3VsYXJheGlzLnRpY2tsZW49cy50aWNrTGVuZ3RoLGRlbGV0ZSBzLnRpY2tMZW5ndGgpLHMudGlja0NvbG9yJiYocy5hbmd1bGFyYXhpcy50aWNrY29sb3I9cy50aWNrQ29sb3IsZGVsZXRlIHMudGlja0NvbG9yKSk6KHMuYW5ndWxhckF4aXMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzLmFuZ3VsYXJBeGlzLnRpY2tsZW4mJihzLnRpY2tMZW5ndGg9cy5hbmd1bGFyQXhpcy50aWNrbGVuKSxzLmFuZ3VsYXJBeGlzJiZcInVuZGVmaW5lZFwiIT10eXBlb2Ygcy5hbmd1bGFyQXhpcy50aWNrY29sb3ImJihzLnRpY2tDb2xvcj1zLmFuZ3VsYXJBeGlzLnRpY2tjb2xvcikpLHMubGVnZW5kJiZcImJvb2xlYW5cIiE9dHlwZW9mIHMubGVnZW5kLnJldmVyc2VPcmRlciYmKHMubGVnZW5kLnJldmVyc2VPcmRlcj1cIm5vcm1hbFwiIT1zLmxlZ2VuZC5yZXZlcnNlT3JkZXIpLHMubGVnZW5kJiZcImJvb2xlYW5cIj09dHlwZW9mIHMubGVnZW5kLnRyYWNlb3JkZXImJihzLmxlZ2VuZC50cmFjZW9yZGVyPXMubGVnZW5kLnRyYWNlb3JkZXI/XCJyZXZlcnNlZFwiOlwibm9ybWFsXCIsZGVsZXRlIHMubGVnZW5kLnJldmVyc2VPcmRlcikscy5tYXJnaW4mJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzLm1hcmdpbi50KXt2YXIgbD1bXCJ0XCIsXCJyXCIsXCJiXCIsXCJsXCIsXCJwYWRcIl0sYz1bXCJ0b3BcIixcInJpZ2h0XCIsXCJib3R0b21cIixcImxlZnRcIixcInBhZFwiXSx1PXt9O24uZW50cmllcyhzLm1hcmdpbikuZm9yRWFjaChmdW5jdGlvbih0LGUpe3VbY1tsLmluZGV4T2YodC5rZXkpXV09dC52YWx1ZX0pLHMubWFyZ2luPXV9ZSYmKGRlbGV0ZSBzLm5lZWRzRW5kU3BhY2luZyxkZWxldGUgcy5taW5vclRpY2tDb2xvcixkZWxldGUgcy5taW5vclRpY2tzLGRlbGV0ZSBzLmFuZ3VsYXJheGlzLnRpY2tzQ291bnQsZGVsZXRlIHMuYW5ndWxhcmF4aXMudGlja3NDb3VudCxkZWxldGUgcy5hbmd1bGFyYXhpcy50aWNrc1N0ZXAsZGVsZXRlIHMuYW5ndWxhcmF4aXMucmV3cml0ZVRpY2tzLGRlbGV0ZSBzLmFuZ3VsYXJheGlzLm50aWNrcyxkZWxldGUgcy5yYWRpYWxheGlzLnRpY2tzQ291bnQsZGVsZXRlIHMucmFkaWFsYXhpcy50aWNrc0NvdW50LGRlbGV0ZSBzLnJhZGlhbGF4aXMudGlja3NTdGVwLGRlbGV0ZSBzLnJhZGlhbGF4aXMucmV3cml0ZVRpY2tzLGRlbGV0ZSBzLnJhZGlhbGF4aXMubnRpY2tzKSxyLmxheW91dD1zfXJldHVybiByfX07cmV0dXJuIHR9fSx7XCIuLi8uLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCI6NjczLFwiLi4vLi4vLi4vbGliXCI6NzAxLGQzOjE1NX1dLDgyMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi8uLi9saWJcIiksYT10KFwiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxvPXQoXCIuL21pY3JvcG9sYXJcIikscz10KFwiLi91bmRvX21hbmFnZXJcIiksbD1pLmV4dGVuZERlZXBBbGwsYz1lLmV4cG9ydHM9e307Yy5mcmFtZXdvcms9ZnVuY3Rpb24odCl7dmFyIGUscixpLGEsdSxoPW5ldyBzO2Z1bmN0aW9uIGYocixzKXtyZXR1cm4gcyYmKHU9cyksbi5zZWxlY3Qobi5zZWxlY3QodSkubm9kZSgpLnBhcmVudE5vZGUpLnNlbGVjdEFsbChcIi5zdmctY29udGFpbmVyPio6bm90KC5jaGFydC1yb290KVwiKS5yZW1vdmUoKSxlPWU/bChlLHIpOnIsaXx8KGk9by5BeGlzKCkpLGE9by5hZGFwdGVyLnBsb3RseSgpLmNvbnZlcnQoZSksaS5jb25maWcoYSkucmVuZGVyKHUpLHQuZGF0YT1lLmRhdGEsdC5sYXlvdXQ9ZS5sYXlvdXQsYy5maWxsTGF5b3V0KHQpLGV9cmV0dXJuIGYuaXNQb2xhcj0hMCxmLnN2Zz1mdW5jdGlvbigpe3JldHVybiBpLnN2ZygpfSxmLmdldENvbmZpZz1mdW5jdGlvbigpe3JldHVybiBlfSxmLmdldExpdmVDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4gby5hZGFwdGVyLnBsb3RseSgpLmNvbnZlcnQoaS5nZXRMaXZlQ29uZmlnKCksITApfSxmLmdldExpdmVTY2FsZXM9ZnVuY3Rpb24oKXtyZXR1cm57dDppLmFuZ3VsYXJTY2FsZSgpLHI6aS5yYWRpYWxTY2FsZSgpfX0sZi5zZXRVbmRvUG9pbnQ9ZnVuY3Rpb24oKXt2YXIgdCxuLGk9dGhpcyxhPW8udXRpbC5jbG9uZUpzb24oZSk7dD1hLG49cixoLmFkZCh7dW5kbzpmdW5jdGlvbigpe24mJmkobil9LHJlZG86ZnVuY3Rpb24oKXtpKHQpfX0pLHI9by51dGlsLmNsb25lSnNvbihhKX0sZi51bmRvPWZ1bmN0aW9uKCl7aC51bmRvKCl9LGYucmVkbz1mdW5jdGlvbigpe2gucmVkbygpfSxmfSxjLmZpbGxMYXlvdXQ9ZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkuc2VsZWN0QWxsKFwiLnBsb3QtY29udGFpbmVyXCIpLHI9ZS5zZWxlY3RBbGwoXCIuc3ZnLWNvbnRhaW5lclwiKSxpPXQuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5zdmcmJnQuZnJhbWV3b3JrLnN2ZygpLG89e3dpZHRoOjgwMCxoZWlnaHQ6NjAwLHBhcGVyX2JnY29sb3I6YS5iYWNrZ3JvdW5kLF9jb250YWluZXI6ZSxfcGFwZXJkaXY6cixfcGFwZXI6aX07dC5fZnVsbExheW91dD1sKG8sdC5sYXlvdXQpfX0se1wiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uLy4uL2xpYlwiOjcwMSxcIi4vbWljcm9wb2xhclwiOjgxOSxcIi4vdW5kb19tYW5hZ2VyXCI6ODIxLGQzOjE1NX1dLDgyMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGU9W10scj0tMSxuPSExO2Z1bmN0aW9uIGkodCxlKXtyZXR1cm4gdD8obj0hMCx0W2VdKCksbj0hMSx0aGlzKTp0aGlzfXJldHVybnthZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIG4/dGhpczooZS5zcGxpY2UocisxLGUubGVuZ3RoLXIpLGUucHVzaCh0KSxyPWUubGVuZ3RoLTEsdGhpcyl9LHNldENhbGxiYWNrOmZ1bmN0aW9uKGUpe3Q9ZX0sdW5kbzpmdW5jdGlvbigpe3ZhciBuPWVbcl07cmV0dXJuIG4/KGkobixcInVuZG9cIiksci09MSx0JiZ0KG4udW5kbyksdGhpcyk6dGhpc30scmVkbzpmdW5jdGlvbigpe3ZhciBuPWVbcisxXTtyZXR1cm4gbj8oaShuLFwicmVkb1wiKSxyKz0xLHQmJnQobi5yZWRvKSx0aGlzKTp0aGlzfSxjbGVhcjpmdW5jdGlvbigpe2U9W10scj0tMX0saGFzVW5kbzpmdW5jdGlvbigpe3JldHVybi0xIT09cn0saGFzUmVkbzpmdW5jdGlvbigpe3JldHVybiByPGUubGVuZ3RoLTF9LGdldENvbW1hbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIGV9LGdldFByZXZpb3VzQ29tbWFuZDpmdW5jdGlvbigpe3JldHVybiBlW3ItMV19LGdldEluZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHJ9fX19LHt9XSw4MjI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwidGlueWNvbG9yMlwiKSxhPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxvPXQoXCIuLi8uLi9saWJcIikscz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxsPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksYz10KFwiLi4vcGxvdHNcIiksdT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksaD10KFwiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0XCIpLGY9dChcIi4vc2V0X2NvbnZlcnRcIikscD10KFwiLi4vY2FydGVzaWFuL2F1dG9yYW5nZVwiKS5kb0F1dG9SYW5nZSxkPXQoXCIuLi9jYXJ0ZXNpYW4vZHJhZ2JveFwiKSxnPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50XCIpLHY9dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIiksbT10KFwiLi4vLi4vY29tcG9uZW50cy90aXRsZXNcIikseT10KFwiLi4vY2FydGVzaWFuL3NlbGVjdFwiKS5wcmVwU2VsZWN0LHg9dChcIi4uL2NhcnRlc2lhbi9zZWxlY3RcIikuc2VsZWN0T25DbGljayxiPXQoXCIuLi9jYXJ0ZXNpYW4vc2VsZWN0XCIpLmNsZWFyU2VsZWN0LF89dChcIi4uLy4uL2xpYi9zZXRjdXJzb3JcIiksdz10KFwiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzXCIpLGs9dChcIi4uLy4uL3Bsb3RfYXBpL3N1YnJvdXRpbmVzXCIpLnJlZHJhd1JlZ2xUcmFjZXMsQT10KFwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiKS5NSURfU0hJRlQsVD10KFwiLi9jb25zdGFudHNcIiksTT10KFwiLi9oZWxwZXJzXCIpLFM9by5fLEU9by5tb2QsQz1vLmRlZzJyYWQsTD1vLnJhZDJkZWc7ZnVuY3Rpb24geih0LGUpe3RoaXMuaWQ9ZSx0aGlzLmdkPXQsdGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPW51bGwsdGhpcy52YW5nbGVzPW51bGwsdGhpcy5yYWRpYWxBeGlzQW5nbGU9bnVsbCx0aGlzLnRyYWNlSGFzaD17fSx0aGlzLmxheWVycz17fSx0aGlzLmNsaXBQYXRocz17fSx0aGlzLmNsaXBJZHM9e30sdGhpcy52aWV3SW5pdGlhbD17fTt2YXIgcj10Ll9mdWxsTGF5b3V0LG49XCJjbGlwXCIrci5fdWlkK2U7dGhpcy5jbGlwSWRzLmZvclRyYWNlcz1uK1wiLWZvci10cmFjZXNcIix0aGlzLmNsaXBQYXRocy5mb3JUcmFjZXM9ci5fY2xpcHMuYXBwZW5kKFwiY2xpcFBhdGhcIikuYXR0cihcImlkXCIsdGhpcy5jbGlwSWRzLmZvclRyYWNlcyksdGhpcy5jbGlwUGF0aHMuZm9yVHJhY2VzLmFwcGVuZChcInBhdGhcIiksdGhpcy5mcmFtZXdvcms9ci5fcG9sYXJsYXllci5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLGUpLHRoaXMucmFkaWFsVGlja0xheW91dD1udWxsLHRoaXMuYW5ndWxhclRpY2tMYXlvdXQ9bnVsbH12YXIgTz16LnByb3RvdHlwZTtmdW5jdGlvbiBJKHQpe3ZhciBlPXQudGlja3MrU3RyaW5nKHQudGlja2xlbikrU3RyaW5nKHQuc2hvd3RpY2tsYWJlbHMpO3JldHVyblwic2lkZVwiaW4gdCYmKGUrPXQuc2lkZSksZX1mdW5jdGlvbiBEKHQsZSl7cmV0dXJuIGVbby5maW5kSW5kZXhPZk1pbihlLGZ1bmN0aW9uKGUpe3JldHVybiBvLmFuZ2xlRGlzdCh0LGUpfSldfWZ1bmN0aW9uIFAodCxlLHIpe3JldHVybiBlPyh0LmF0dHIoXCJkaXNwbGF5XCIsbnVsbCksdC5hdHRyKHIpKTp0JiZ0LmF0dHIoXCJkaXNwbGF5XCIsXCJub25lXCIpLHR9ZnVuY3Rpb24gUih0LGUpe3JldHVyblwidHJhbnNsYXRlKFwiK3QrXCIsXCIrZStcIilcIn1mdW5jdGlvbiBGKHQpe3JldHVyblwicm90YXRlKFwiK3QrXCIpXCJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyB6KHQsZSl9LE8ucGxvdD1mdW5jdGlvbih0LGUpe3ZhciByPWVbdGhpcy5pZF07dGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPSExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXtpZighMT09PXRbbl1bMF0udHJhY2UuY2xpcG9uYXhpcyl7dGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPSEwO2JyZWFrfX10aGlzLnVwZGF0ZUxheWVycyhlLHIpLHRoaXMudXBkYXRlTGF5b3V0KGUsciksYy5nZW5lcmFsVXBkYXRlUGVyVHJhY2VNb2R1bGUodGhpcy5nZCx0aGlzLHQsciksdGhpcy51cGRhdGVGeChlLHIpfSxPLnVwZGF0ZUxheWVycz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGF5ZXJzLGk9ZS5yYWRpYWxheGlzLGE9ZS5hbmd1bGFyYXhpcyxvPVQubGF5ZXJOYW1lcyxzPW8uaW5kZXhPZihcImZyb250cGxvdFwiKSxsPW8uc2xpY2UoMCxzKSxjPVwiYmVsb3cgdHJhY2VzXCI9PT1hLmxheWVyLHU9XCJiZWxvdyB0cmFjZXNcIj09PWkubGF5ZXI7YyYmbC5wdXNoKFwiYW5ndWxhci1saW5lXCIpLHUmJmwucHVzaChcInJhZGlhbC1saW5lXCIpLGMmJmwucHVzaChcImFuZ3VsYXItYXhpc1wiKSx1JiZsLnB1c2goXCJyYWRpYWwtYXhpc1wiKSxsLnB1c2goXCJmcm9udHBsb3RcIiksY3x8bC5wdXNoKFwiYW5ndWxhci1saW5lXCIpLHV8fGwucHVzaChcInJhZGlhbC1saW5lXCIpLGN8fGwucHVzaChcImFuZ3VsYXItYXhpc1wiKSx1fHxsLnB1c2goXCJyYWRpYWwtYXhpc1wiKTt2YXIgaD10aGlzLmZyYW1ld29yay5zZWxlY3RBbGwoXCIucG9sYXJzdWJsYXllclwiKS5kYXRhKGwsU3RyaW5nKTtoLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIixmdW5jdGlvbih0KXtyZXR1cm5cInBvbGFyc3VibGF5ZXIgXCIrdH0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9clt0XT1uLnNlbGVjdCh0aGlzKTtzd2l0Y2godCl7Y2FzZVwiZnJvbnRwbG90XCI6ZS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJiYXJsYXllclwiLCEwKSxlLmFwcGVuZChcImdcIikuY2xhc3NlZChcInNjYXR0ZXJsYXllclwiLCEwKTticmVhaztjYXNlXCJiYWNrcGxvdFwiOmUuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwibWFwbGF5ZXJcIiwhMCk7YnJlYWs7Y2FzZVwicGxvdGJnXCI6ci5iZz1lLmFwcGVuZChcInBhdGhcIik7YnJlYWs7Y2FzZVwicmFkaWFsLWdyaWRcIjpjYXNlXCJhbmd1bGFyLWdyaWRcIjplLnN0eWxlKFwiZmlsbFwiLFwibm9uZVwiKTticmVhaztjYXNlXCJyYWRpYWwtbGluZVwiOmUuYXBwZW5kKFwibGluZVwiKS5zdHlsZShcImZpbGxcIixcIm5vbmVcIik7YnJlYWs7Y2FzZVwiYW5ndWxhci1saW5lXCI6ZS5hcHBlbmQoXCJwYXRoXCIpLnN0eWxlKFwiZmlsbFwiLFwibm9uZVwiKX19KSxoLm9yZGVyKCl9LE8udXBkYXRlTGF5b3V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sYXllcnMsbj10Ll9zaXplLGk9ZS5yYWRpYWxheGlzLGE9ZS5hbmd1bGFyYXhpcyxvPWUuZG9tYWluLngsYz1lLmRvbWFpbi55O3RoaXMueE9mZnNldD1uLmwrbi53Km9bMF0sdGhpcy55T2Zmc2V0PW4udCtuLmgqKDEtY1sxXSk7dmFyIHU9dGhpcy54TGVuZ3RoPW4udyoob1sxXS1vWzBdKSxoPXRoaXMueUxlbmd0aD1uLmgqKGNbMV0tY1swXSksZj1lLnNlY3Rvcjt0aGlzLnNlY3RvckluUmFkPWYubWFwKEMpO3ZhciBwLGQsZyx2LG0seT10aGlzLnNlY3RvckJCb3g9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYT10WzBdLG89dFsxXS1hLHM9RShhLDM2MCksbD1zK28sYz1NYXRoLmNvcyhDKHMpKSx1PU1hdGguc2luKEMocykpLGg9TWF0aC5jb3MoQyhsKSksZj1NYXRoLnNpbihDKGwpKTtpPXM8PTkwJiZsPj05MHx8cz45MCYmbD49NDUwPzE6dTw9MCYmZjw9MD8wOk1hdGgubWF4KHUsZik7ZT1zPD0xODAmJmw+PTE4MHx8cz4xODAmJmw+PTU0MD8tMTpjPj0wJiZoPj0wPzA6TWF0aC5taW4oYyxoKTtyPXM8PTI3MCYmbD49MjcwfHxzPjI3MCYmbD49NjMwPy0xOnU+PTAmJmY+PTA/MDpNYXRoLm1pbih1LGYpO249bD49MzYwPzE6Yzw9MCYmaDw9MD8wOk1hdGgubWF4KGMsaCk7cmV0dXJuW2UscixuLGldfShmKSx4PXlbMl0teVswXSxiPXlbM10teVsxXSxfPWgvdSx3PU1hdGguYWJzKGIveCk7Xz53PyhwPXUsbT0oaC0oZD11KncpKS9uLmgvMixnPVtvWzBdLG9bMV1dLHY9W2NbMF0rbSxjWzFdLW1dKTooZD1oLG09KHUtKHA9aC93KSkvbi53LzIsZz1bb1swXSttLG9bMV0tbV0sdj1bY1swXSxjWzFdXSksdGhpcy54TGVuZ3RoMj1wLHRoaXMueUxlbmd0aDI9ZCx0aGlzLnhEb21haW4yPWcsdGhpcy55RG9tYWluMj12O3ZhciBrPXRoaXMueE9mZnNldDI9bi5sK24udypnWzBdLEE9dGhpcy55T2Zmc2V0Mj1uLnQrbi5oKigxLXZbMV0pLFQ9dGhpcy5yYWRpdXM9cC94LE09dGhpcy5pbm5lclJhZGl1cz1lLmhvbGUqVCxTPXRoaXMuY3g9ay1UKnlbMF0sTD10aGlzLmN5PUErVCp5WzNdLHo9dGhpcy5jeHg9Uy1rLE89dGhpcy5jeXk9TC1BO3RoaXMucmFkaWFsQXhpcz10aGlzLm1vY2tBeGlzKHQsZSxpLHtfaWQ6XCJ4XCIsc2lkZTp7Y291bnRlcmNsb2Nrd2lzZTpcInRvcFwiLGNsb2Nrd2lzZTpcImJvdHRvbVwifVtpLnNpZGVdLGRvbWFpbjpbTS9uLncsVC9uLnddfSksdGhpcy5hbmd1bGFyQXhpcz10aGlzLm1vY2tBeGlzKHQsZSxhLHtzaWRlOlwicmlnaHRcIixkb21haW46WzAsTWF0aC5QSV0sYXV0b3JhbmdlOiExfSksdGhpcy5kb0F1dG9SYW5nZSh0LGUpLHRoaXMudXBkYXRlQW5ndWxhckF4aXModCxlKSx0aGlzLnVwZGF0ZVJhZGlhbEF4aXModCxlKSx0aGlzLnVwZGF0ZVJhZGlhbEF4aXNUaXRsZSh0LGUpLHRoaXMueGF4aXM9dGhpcy5tb2NrQ2FydGVzaWFuQXhpcyh0LGUse19pZDpcInhcIixkb21haW46Z30pLHRoaXMueWF4aXM9dGhpcy5tb2NrQ2FydGVzaWFuQXhpcyh0LGUse19pZDpcInlcIixkb21haW46dn0pO3ZhciBJPXRoaXMucGF0aFN1YnBsb3QoKTt0aGlzLmNsaXBQYXRocy5mb3JUcmFjZXMuc2VsZWN0KFwicGF0aFwiKS5hdHRyKFwiZFwiLEkpLmF0dHIoXCJ0cmFuc2Zvcm1cIixSKHosTykpLHIuZnJvbnRwbG90LmF0dHIoXCJ0cmFuc2Zvcm1cIixSKGssQSkpLmNhbGwobC5zZXRDbGlwVXJsLHRoaXMuX2hhc0NsaXBPbkF4aXNGYWxzZT9udWxsOnRoaXMuY2xpcElkcy5mb3JUcmFjZXMsdGhpcy5nZCksci5iZy5hdHRyKFwiZFwiLEkpLmF0dHIoXCJ0cmFuc2Zvcm1cIixSKFMsTCkpLmNhbGwocy5maWxsLGUuYmdjb2xvcil9LE8ubW9ja0F4aXM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9by5leHRlbmRGbGF0KHthbmNob3I6XCJmcmVlXCIscG9zaXRpb246MH0scixuKTtyZXR1cm4gZihpLGUsdCksaX0sTy5tb2NrQ2FydGVzaWFuQXhpcz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcyxpPXIuX2lkLGE9by5leHRlbmRGbGF0KHt0eXBlOlwibGluZWFyXCJ9LHIpO2goYSx0KTt2YXIgcz17eDpbMCwyXSx5OlsxLDNdfTtyZXR1cm4gYS5zZXRSYW5nZT1mdW5jdGlvbigpe3ZhciB0PW4uc2VjdG9yQkJveCxyPXNbaV0sbz1uLnJhZGlhbEF4aXMuX3JsLGw9KG9bMV0tb1swXSkvKDEtZS5ob2xlKTthLnJhbmdlPVt0W3JbMF1dKmwsdFtyWzFdXSpsXX0sYS5pc1B0V2l0aGluUmFuZ2U9XCJ4XCI9PT1pP2Z1bmN0aW9uKHQpe3JldHVybiBuLmlzUHRJbnNpZGUodCl9OmZ1bmN0aW9uKCl7cmV0dXJuITB9LGEuc2V0UmFuZ2UoKSxhLnNldFNjYWxlKCksYX0sTy5kb0F1dG9SYW5nZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2Qsbj10aGlzLnJhZGlhbEF4aXMsaT1lLnJhZGlhbGF4aXM7bi5zZXRTY2FsZSgpLHAocixuKTt2YXIgYT1uLnJhbmdlO2kucmFuZ2U9YS5zbGljZSgpLGkuX2lucHV0LnJhbmdlPWEuc2xpY2UoKSxuLl9ybD1bbi5yMmwoYVswXSxudWxsLFwiZ3JlZ29yaWFuXCIpLG4ucjJsKGFbMV0sbnVsbCxcImdyZWdvcmlhblwiKV19LE8udXBkYXRlUmFkaWFsQXhpcz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj1yLmdkLGk9ci5sYXllcnMsYT1yLnJhZGl1cyxsPXIuaW5uZXJSYWRpdXMsYz1yLmN4LGg9ci5jeSxmPWUucmFkaWFsYXhpcyxwPUUoZS5zZWN0b3JbMF0sMzYwKSxkPXIucmFkaWFsQXhpcyxnPWw8YTtyLmZpbGxWaWV3SW5pdGlhbEtleShcInJhZGlhbGF4aXMuYW5nbGVcIixmLmFuZ2xlKSxyLmZpbGxWaWV3SW5pdGlhbEtleShcInJhZGlhbGF4aXMucmFuZ2VcIixkLnJhbmdlLnNsaWNlKCkpLGQuc2V0R2VvbWV0cnkoKSxcImF1dG9cIj09PWQudGlja2FuZ2xlJiZwPjkwJiZwPD0yNzAmJihkLnRpY2thbmdsZT0xODApO3ZhciB2PWZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKFwiKyhkLmwycCh0LngpK2wpK1wiLDApXCJ9LG09SShmKTtpZihyLnJhZGlhbFRpY2tMYXlvdXQhPT1tJiYoaVtcInJhZGlhbC1heGlzXCJdLnNlbGVjdEFsbChcIi54dGlja1wiKS5yZW1vdmUoKSxyLnJhZGlhbFRpY2tMYXlvdXQ9bSksZyl7ZC5zZXRTY2FsZSgpO3ZhciB5PXUuY2FsY1RpY2tzKGQpLHg9dS5jbGlwRW5kcyhkLHkpLGI9dS5nZXRUaWNrU2lnbnMoZClbMl07dS5kcmF3VGlja3MobixkLHt2YWxzOnksbGF5ZXI6aVtcInJhZGlhbC1heGlzXCJdLHBhdGg6dS5tYWtlVGlja1BhdGgoZCwwLGIpLHRyYW5zRm46dixjcmlzcDohMX0pLHUuZHJhd0dyaWQobixkLHt2YWxzOngsbGF5ZXI6aVtcInJhZGlhbC1ncmlkXCJdLHBhdGg6ZnVuY3Rpb24odCl7cmV0dXJuIHIucGF0aEFyYyhkLnIycCh0LngpK2wpfSx0cmFuc0ZuOm8ubm9vcCxjcmlzcDohMX0pLHUuZHJhd0xhYmVscyhuLGQse3ZhbHM6eSxsYXllcjppW1wicmFkaWFsLWF4aXNcIl0sdHJhbnNGbjp2LGxhYmVsRm5zOnUubWFrZUxhYmVsRm5zKGQsMCl9KX12YXIgXz1yLnJhZGlhbEF4aXNBbmdsZT1yLnZhbmdsZXM/TChEKEMoZi5hbmdsZSksci52YW5nbGVzKSk6Zi5hbmdsZSx3PVIoYyxoKSxrPXcrRigtXyk7UChpW1wicmFkaWFsLWF4aXNcIl0sZyYmKGYuc2hvd3RpY2tsYWJlbHN8fGYudGlja3MpLHt0cmFuc2Zvcm06a30pLFAoaVtcInJhZGlhbC1ncmlkXCJdLGcmJmYuc2hvd2dyaWQse3RyYW5zZm9ybTp3fSksUChpW1wicmFkaWFsLWxpbmVcIl0uc2VsZWN0KFwibGluZVwiKSxnJiZmLnNob3dsaW5lLHt4MTpsLHkxOjAseDI6YSx5MjowLHRyYW5zZm9ybTprfSkuYXR0cihcInN0cm9rZS13aWR0aFwiLGYubGluZXdpZHRoKS5jYWxsKHMuc3Ryb2tlLGYubGluZWNvbG9yKX0sTy51cGRhdGVSYWRpYWxBeGlzVGl0bGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuZ2QsaT10aGlzLnJhZGl1cyxhPXRoaXMuY3gsbz10aGlzLmN5LHM9ZS5yYWRpYWxheGlzLGM9dGhpcy5pZCtcInRpdGxlXCIsdT12b2lkIDAhPT1yP3I6dGhpcy5yYWRpYWxBeGlzQW5nbGUsaD1DKHUpLGY9TWF0aC5jb3MoaCkscD1NYXRoLnNpbihoKSxkPTA7aWYocy50aXRsZSl7dmFyIGc9bC5iQm94KHRoaXMubGF5ZXJzW1wicmFkaWFsLWF4aXNcIl0ubm9kZSgpKS5oZWlnaHQsdj1zLnRpdGxlLmZvbnQuc2l6ZTtkPVwiY291bnRlcmNsb2Nrd2lzZVwiPT09cy5zaWRlPy1nLS40KnY6ZysuOCp2fXRoaXMubGF5ZXJzW1wicmFkaWFsLWF4aXMtdGl0bGVcIl09bS5kcmF3KG4sYyx7cHJvcENvbnRhaW5lcjpzLHByb3BOYW1lOnRoaXMuaWQrXCIucmFkaWFsYXhpcy50aXRsZVwiLHBsYWNlaG9sZGVyOlMobixcIkNsaWNrIHRvIGVudGVyIHJhZGlhbCBheGlzIHRpdGxlXCIpLGF0dHJpYnV0ZXM6e3g6YStpLzIqZitkKnAseTpvLWkvMipwK2QqZixcInRleHQtYW5jaG9yXCI6XCJtaWRkbGVcIn0sdHJhbnNmb3JtOntyb3RhdGU6LXV9fSl9LE8udXBkYXRlQW5ndWxhckF4aXM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49ci5nZCxpPXIubGF5ZXJzLGE9ci5yYWRpdXMsbD1yLmlubmVyUmFkaXVzLGM9ci5jeCxoPXIuY3ksZj1lLmFuZ3VsYXJheGlzLHA9ci5hbmd1bGFyQXhpcztyLmZpbGxWaWV3SW5pdGlhbEtleShcImFuZ3VsYXJheGlzLnJvdGF0aW9uXCIsZi5yb3RhdGlvbikscC5zZXRHZW9tZXRyeSgpLHAuc2V0U2NhbGUoKTt2YXIgZD1mdW5jdGlvbih0KXtyZXR1cm4gcC50MmcodC54KX07XCJsaW5lYXJcIj09PXAudHlwZSYmXCJyYWRpYW5zXCI9PT1wLnRoZXRhdW5pdCYmKHAudGljazA9TChwLnRpY2swKSxwLmR0aWNrPUwocC5kdGljaykpO3ZhciBnPWZ1bmN0aW9uKHQpe3JldHVybiBSKGMrYSpNYXRoLmNvcyh0KSxoLWEqTWF0aC5zaW4odCkpfSx2PXUubWFrZUxhYmVsRm5zKHAsMCkubGFiZWxTdGFuZG9mZixtPXt4Rm46ZnVuY3Rpb24odCl7dmFyIGU9ZCh0KTtyZXR1cm4gTWF0aC5jb3MoZSkqdn0seUZuOmZ1bmN0aW9uKHQpe3ZhciBlPWQodCkscj1NYXRoLnNpbihlKT4wPy4yOjE7cmV0dXJuLU1hdGguc2luKGUpKih2K3QuZm9udFNpemUqcikrTWF0aC5hYnMoTWF0aC5jb3MoZSkpKih0LmZvbnRTaXplKkEpfSxhbmNob3JGbjpmdW5jdGlvbih0KXt2YXIgZT1kKHQpLHI9TWF0aC5jb3MoZSk7cmV0dXJuIE1hdGguYWJzKHIpPC4xP1wibWlkZGxlXCI6cj4wP1wic3RhcnRcIjpcImVuZFwifSxoZWlnaHRGbjpmdW5jdGlvbih0LGUscil7dmFyIG49ZCh0KTtyZXR1cm4tLjUqKDErTWF0aC5zaW4obikpKnJ9fSx5PUkoZik7ci5hbmd1bGFyVGlja0xheW91dCE9PXkmJihpW1wiYW5ndWxhci1heGlzXCJdLnNlbGVjdEFsbChcIi5cIitwLl9pZCtcInRpY2tcIikucmVtb3ZlKCksci5hbmd1bGFyVGlja0xheW91dD15KTt2YXIgeCxiPXUuY2FsY1RpY2tzKHApO2lmKFwibGluZWFyXCI9PT1lLmdyaWRzaGFwZT8oeD1iLm1hcChkKSxvLmFuZ2xlRGVsdGEoeFswXSx4WzFdKTwwJiYoeD14LnNsaWNlKCkucmV2ZXJzZSgpKSk6eD1udWxsLHIudmFuZ2xlcz14LFwiY2F0ZWdvcnlcIj09PXAudHlwZSYmKGI9Yi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIG8uaXNBbmdsZUluc2lkZVNlY3RvcihkKHQpLHIuc2VjdG9ySW5SYWQpfSkpLHAudmlzaWJsZSl7dmFyIF89XCJpbnNpZGVcIj09PXAudGlja3M/LTE6MSx3PShwLmxpbmV3aWR0aHx8MSkvMjt1LmRyYXdUaWNrcyhuLHAse3ZhbHM6YixsYXllcjppW1wiYW5ndWxhci1heGlzXCJdLHBhdGg6XCJNXCIrXyp3K1wiLDBoXCIrXypwLnRpY2tsZW4sdHJhbnNGbjpmdW5jdGlvbih0KXt2YXIgZT1kKHQpO3JldHVybiBnKGUpK0YoLUwoZSkpfSxjcmlzcDohMX0pLHUuZHJhd0dyaWQobixwLHt2YWxzOmIsbGF5ZXI6aVtcImFuZ3VsYXItZ3JpZFwiXSxwYXRoOmZ1bmN0aW9uKHQpe3ZhciBlPWQodCkscj1NYXRoLmNvcyhlKSxuPU1hdGguc2luKGUpO3JldHVyblwiTVwiK1tjK2wqcixoLWwqbl0rXCJMXCIrW2MrYSpyLGgtYSpuXX0sdHJhbnNGbjpvLm5vb3AsY3Jpc3A6ITF9KSx1LmRyYXdMYWJlbHMobixwLHt2YWxzOmIsbGF5ZXI6aVtcImFuZ3VsYXItYXhpc1wiXSxyZXBvc2l0aW9uT25VcGRhdGU6ITAsdHJhbnNGbjpmdW5jdGlvbih0KXtyZXR1cm4gZyhkKHQpKX0sbGFiZWxGbnM6bX0pfVAoaVtcImFuZ3VsYXItbGluZVwiXS5zZWxlY3QoXCJwYXRoXCIpLGYuc2hvd2xpbmUse2Q6ci5wYXRoU3VicGxvdCgpLHRyYW5zZm9ybTpSKGMsaCl9KS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsZi5saW5ld2lkdGgpLmNhbGwocy5zdHJva2UsZi5saW5lY29sb3IpfSxPLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQsZSl7dGhpcy5nZC5fY29udGV4dC5zdGF0aWNQbG90fHwodGhpcy51cGRhdGVBbmd1bGFyRHJhZyh0KSx0aGlzLnVwZGF0ZVJhZGlhbERyYWcodCxlLDApLHRoaXMudXBkYXRlUmFkaWFsRHJhZyh0LGUsMSksdGhpcy51cGRhdGVNYWluRHJhZyh0KSl9LE8udXBkYXRlTWFpbkRyYWc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZ2Qsbz1lLmxheWVycyxzPXQuX3pvb21sYXllcixsPVQuTUlOWk9PTSxjPVQuT0ZGRURHRSx1PWUucmFkaXVzLGg9ZS5pbm5lclJhZGl1cyxmPWUuY3gscD1lLmN5LG09ZS5jeHgsXz1lLmN5eSx3PWUuc2VjdG9ySW5SYWQsaz1lLnZhbmdsZXMsQT1lLnJhZGlhbEF4aXMsUz1NLmNsYW1wVGlueSxFPU0uZmluZFhZYXRMZW5ndGgsQz1NLmZpbmRFbmNsb3NpbmdWZXJ0ZXhBbmdsZXMsTD1ULmNvcm5lckhhbGZXaWR0aCx6PVQuY29ybmVyTGVuLzIsTz1kLm1ha2VEcmFnZ2VyKG8sXCJwYXRoXCIsXCJtYWluZHJhZ1wiLFwiY3Jvc3NoYWlyXCIpO24uc2VsZWN0KE8pLmF0dHIoXCJkXCIsZS5wYXRoU3VicGxvdCgpKS5hdHRyKFwidHJhbnNmb3JtXCIsUihmLHApKTt2YXIgSSxELFAsRixCLE4saixWLFUscT17ZWxlbWVudDpPLGdkOnIsc3VicGxvdDplLmlkLHBsb3RpbmZvOntpZDplLmlkLHhheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpc30seGF4ZXM6W2UueGF4aXNdLHlheGVzOltlLnlheGlzXX07ZnVuY3Rpb24gSCh0LGUpe3JldHVybiBNYXRoLnNxcnQodCp0K2UqZSl9ZnVuY3Rpb24gRyh0LGUpe3JldHVybiBIKHQtbSxlLV8pfWZ1bmN0aW9uIFkodCxlKXtyZXR1cm4gTWF0aC5hdGFuMihfLWUsdC1tKX1mdW5jdGlvbiBXKHQsZSl7cmV0dXJuW3QqTWF0aC5jb3MoZSksdCpNYXRoLnNpbigtZSldfWZ1bmN0aW9uIFgodCxyKXtpZigwPT09dClyZXR1cm4gZS5wYXRoU2VjdG9yKDIqTCk7dmFyIG49ei90LGk9ci1uLGE9cituLG89TWF0aC5tYXgoMCxNYXRoLm1pbih0LHUpKSxzPW8tTCxsPW8rTDtyZXR1cm5cIk1cIitXKHMsaSkrXCJBXCIrW3Msc10rXCIgMCwwLDAgXCIrVyhzLGEpK1wiTFwiK1cobCxhKStcIkFcIitbbCxsXStcIiAwLDAsMSBcIitXKGwsaSkrXCJaXCJ9ZnVuY3Rpb24gWih0LHIsbil7aWYoMD09PXQpcmV0dXJuIGUucGF0aFNlY3RvcigyKkwpO3ZhciBpLGEsbz1XKHQscikscz1XKHQsbiksbD1TKChvWzBdK3NbMF0pLzIpLGM9Uygob1sxXStzWzFdKS8yKTtpZihsJiZjKXt2YXIgdT1jL2wsaD0tMS91LGY9RShMLHUsbCxjKTtpPUUoeixoLGZbMF1bMF0sZlswXVsxXSksYT1FKHosaCxmWzFdWzBdLGZbMV1bMV0pfWVsc2V7dmFyIHAsZDtjPyhwPXosZD1MKToocD1MLGQ9eiksaT1bW2wtcCxjLWRdLFtsK3AsYy1kXV0sYT1bW2wtcCxjK2RdLFtsK3AsYytkXV19cmV0dXJuXCJNXCIraS5qb2luKFwiTFwiKStcIkxcIithLnJldmVyc2UoKS5qb2luKFwiTFwiKStcIlpcIn1mdW5jdGlvbiAkKHQsZSl7cmV0dXJuIGU9TWF0aC5tYXgoTWF0aC5taW4oZSx1KSxoKSx0PGM/dD0wOnUtdDxjP3Q9dTplPGM/ZT0wOnUtZTxjJiYoZT11KSxNYXRoLmFicyhlLXQpPmw/KHQ8ZT8oUD10LEY9ZSk6KFA9ZSxGPXQpLCEwKTooUD1udWxsLEY9bnVsbCwhMSl9ZnVuY3Rpb24gSih0LGUpe3Q9dHx8QixlPWV8fFwiTTAsMFpcIixWLmF0dHIoXCJkXCIsdCksVS5hdHRyKFwiZFwiLGUpLGQudHJhbnNpdGlvblpvb21ib3goVixVLE4saiksTj0hMH1mdW5jdGlvbiBLKHQscil7dmFyIG4saSxhPUkrdCxvPUQrcixzPUcoSSxEKSxsPU1hdGgubWluKEcoYSxvKSx1KSxjPVkoSSxEKTskKHMsbCkmJihuPUIrZS5wYXRoU2VjdG9yKEYpLFAmJihuKz1lLnBhdGhTZWN0b3IoUCkpLGk9WChQLGMpK1goRixjKSksSihuLGkpfWZ1bmN0aW9uIFEodCxlLHIsbil7dmFyIGk9TS5maW5kSW50ZXJzZWN0aW9uWFkocixuLHIsW3QtbSxfLWVdKTtyZXR1cm4gSChpWzBdLGlbMV0pfWZ1bmN0aW9uIHR0KHQscil7dmFyIG4saSxhPUkrdCxvPUQrcixzPVkoSSxEKSxsPVkoYSxvKSxjPUMocyxrKSxoPUMobCxrKTskKFEoSSxELGNbMF0sY1sxXSksTWF0aC5taW4oUShhLG8saFswXSxoWzFdKSx1KSkmJihuPUIrZS5wYXRoU2VjdG9yKEYpLFAmJihuKz1lLnBhdGhTZWN0b3IoUCkpLGk9W1ooUCxjWzBdLGNbMV0pLFooRixjWzBdLGNbMV0pXS5qb2luKFwiIFwiKSksSihuLGkpfWZ1bmN0aW9uIGV0KCl7aWYoZC5yZW1vdmVab29tYm94KHIpLG51bGwhPT1QJiZudWxsIT09Ril7ZC5zaG93RG91YmxlQ2xpY2tOb3RpZmllcihyKTt2YXIgdD1BLl9ybCxuPSh0WzFdLXRbMF0pLygxLWgvdSkvdSxpPVt0WzBdKyhQLWgpKm4sdFswXSsoRi1oKSpuXTthLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIixyLGUuaWQrXCIucmFkaWFsYXhpcy5yYW5nZVwiLGkpfX1mdW5jdGlvbiBydCh0LG4pe3ZhciBpPXIuX2Z1bGxMYXlvdXQuY2xpY2ttb2RlO2lmKGQucmVtb3ZlWm9vbWJveChyKSwyPT09dCl7dmFyIG89e307Zm9yKHZhciBzIGluIGUudmlld0luaXRpYWwpb1tlLmlkK1wiLlwiK3NdPWUudmlld0luaXRpYWxbc107ci5lbWl0KFwicGxvdGx5X2RvdWJsZWNsaWNrXCIsbnVsbCksYS5jYWxsKFwiX2d1aVJlbGF5b3V0XCIscixvKX1pLmluZGV4T2YoXCJzZWxlY3RcIik+LTEmJjE9PT10JiZ4KG4scixbZS54YXhpc10sW2UueWF4aXNdLGUuaWQscSksaS5pbmRleE9mKFwiZXZlbnRcIik+LTEmJnYuY2xpY2socixuLGUuaWQpfXEucHJlcEZuPWZ1bmN0aW9uKHQsbixhKXt2YXIgbz1yLl9mdWxsTGF5b3V0LmRyYWdtb2RlLGw9Ty5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihJPW4tbC5sZWZ0LEQ9YS1sLnRvcCxrKXt2YXIgYz1NLmZpbmRQb2x5Z29uT2Zmc2V0KHUsd1swXSx3WzFdLGspO0krPW0rY1swXSxEKz1fK2NbMV19c3dpdGNoKG8pe2Nhc2VcInpvb21cIjpxLm1vdmVGbj1rP3R0OksscS5jbGlja0ZuPXJ0LHEuZG9uZUZuPWV0LGZ1bmN0aW9uKCl7UD1udWxsLEY9bnVsbCxCPWUucGF0aFN1YnBsb3QoKSxOPSExO3ZhciB0PXIuX2Z1bGxMYXlvdXRbZS5pZF07aj1pKHQuYmdjb2xvcikuZ2V0THVtaW5hbmNlKCksKFY9ZC5tYWtlWm9vbWJveChzLGosZixwLEIpKS5hdHRyKFwiZmlsbC1ydWxlXCIsXCJldmVub2RkXCIpLFU9ZC5tYWtlQ29ybmVycyhzLGYscCksYihyKX0oKTticmVhaztjYXNlXCJzZWxlY3RcIjpjYXNlXCJsYXNzb1wiOnkodCxuLGEscSxvKX19LE8ub25tb3VzZW1vdmU9ZnVuY3Rpb24odCl7di5ob3ZlcihyLHQsZS5pZCksci5fZnVsbExheW91dC5fbGFzdGhvdmVyPU8sci5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PWUuaWR9LE8ub25tb3VzZW91dD1mdW5jdGlvbih0KXtyLl9kcmFnZ2luZ3x8Zy51bmhvdmVyKHIsdCl9LGcuaW5pdChxKX0sTy51cGRhdGVSYWRpYWxEcmFnPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLHM9aS5nZCxsPWkubGF5ZXJzLGM9aS5yYWRpdXMsdT1pLmlubmVyUmFkaXVzLGg9aS5jeCxmPWkuY3kscD1pLnJhZGlhbEF4aXMsdj1ULnJhZGlhbERyYWdCb3hTaXplLG09di8yO2lmKHAudmlzaWJsZSl7dmFyIHkseCxfLEE9QyhpLnJhZGlhbEF4aXNBbmdsZSksTT1wLl9ybCxTPU1bMF0sRT1NWzFdLHo9TVtyXSxPPS43NSooTVsxXS1NWzBdKS8oMS1lLmhvbGUpL2M7cj8oeT1oKyhjK20pKk1hdGguY29zKEEpLHg9Zi0oYyttKSpNYXRoLnNpbihBKSxfPVwicmFkaWFsZHJhZ1wiKTooeT1oKyh1LW0pKk1hdGguY29zKEEpLHg9Zi0odS1tKSpNYXRoLnNpbihBKSxfPVwicmFkaWFsZHJhZy1pbm5lclwiKTt2YXIgSSxCLE4saj1kLm1ha2VSZWN0RHJhZ2dlcihsLF8sXCJjcm9zc2hhaXJcIiwtbSwtbSx2LHYpLFY9e2VsZW1lbnQ6aixnZDpzfTtQKG4uc2VsZWN0KGopLHAudmlzaWJsZSYmdTxjLHt0cmFuc2Zvcm06Uih5LHgpfSksVi5wcmVwRm49ZnVuY3Rpb24oKXtJPW51bGwsQj1udWxsLE49bnVsbCxWLm1vdmVGbj1VLFYuZG9uZUZuPXEsYihzKX0sVi5jbGFtcEZuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguc3FydCh0KnQrZSplKTxULk1JTkRSQUcmJih0PTAsZT0wKSxbdCxlXX0sZy5pbml0KFYpfWZ1bmN0aW9uIFUodCxlKXtpZihJKUkodCxlKTtlbHNle3ZhciByPVt0LC1lXSxuPVtNYXRoLmNvcyhBKSxNYXRoLnNpbihBKV0saT1NYXRoLmFicyhvLmRvdChyLG4pL01hdGguc3FydChvLmRvdChyLHIpKSk7aXNOYU4oaSl8fChJPWk8LjU/SDpHKX19ZnVuY3Rpb24gcSgpe251bGwhPT1CP2EuY2FsbChcIl9ndWlSZWxheW91dFwiLHMsaS5pZCtcIi5yYWRpYWxheGlzLmFuZ2xlXCIsQik6bnVsbCE9PU4mJmEuY2FsbChcIl9ndWlSZWxheW91dFwiLHMsaS5pZCtcIi5yYWRpYWxheGlzLnJhbmdlW1wiK3IrXCJdXCIsTil9ZnVuY3Rpb24gSCh0LGUpe2lmKDAhPT1yKXt2YXIgbj15K3QsYT14K2U7Qj1NYXRoLmF0YW4yKGYtYSxuLWgpLGkudmFuZ2xlcyYmKEI9RChCLGkudmFuZ2xlcykpLEI9TChCKTt2YXIgbz1SKGgsZikrRigtQik7bFtcInJhZGlhbC1heGlzXCJdLmF0dHIoXCJ0cmFuc2Zvcm1cIixvKSxsW1wicmFkaWFsLWxpbmVcIl0uc2VsZWN0KFwibGluZVwiKS5hdHRyKFwidHJhbnNmb3JtXCIsbyk7dmFyIHM9aS5nZC5fZnVsbExheW91dCxjPXNbaS5pZF07aS51cGRhdGVSYWRpYWxBeGlzVGl0bGUocyxjLEIpfX1mdW5jdGlvbiBHKHQsZSl7dmFyIG49by5kb3QoW3QsLWVdLFtNYXRoLmNvcyhBKSxNYXRoLnNpbihBKV0pO2lmKE49ei1PKm4sTz4wPT0ocj9OPlM6TjxFKSl7dmFyIGw9cy5fZnVsbExheW91dCxjPWxbaS5pZF07cC5yYW5nZVtyXT1OLHAuX3JsW3JdPU4saS51cGRhdGVSYWRpYWxBeGlzKGwsYyksaS54YXhpcy5zZXRSYW5nZSgpLGkueGF4aXMuc2V0U2NhbGUoKSxpLnlheGlzLnNldFJhbmdlKCksaS55YXhpcy5zZXRTY2FsZSgpO3ZhciB1PSExO2Zvcih2YXIgaCBpbiBpLnRyYWNlSGFzaCl7dmFyIGY9aS50cmFjZUhhc2hbaF0sZD1vLmZpbHRlclZpc2libGUoZik7ZlswXVswXS50cmFjZS5fbW9kdWxlLnBsb3QocyxpLGQsYyksYS50cmFjZUlzKGgsXCJnbFwiKSYmZC5sZW5ndGgmJih1PSEwKX11JiYodyhzKSxrKHMpKX1lbHNlIE49bnVsbH19LE8udXBkYXRlQW5ndWxhckRyYWc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZ2QsaT1lLmxheWVycyxzPWUucmFkaXVzLGM9ZS5hbmd1bGFyQXhpcyx1PWUuY3gsaD1lLmN5LGY9ZS5jeHgscD1lLmN5eSx2PVQuYW5ndWxhckRyYWdCb3hTaXplLG09ZC5tYWtlRHJhZ2dlcihpLFwicGF0aFwiLFwiYW5ndWxhcmRyYWdcIixcIm1vdmVcIikseT17ZWxlbWVudDptLGdkOnJ9O2Z1bmN0aW9uIHgodCxlKXtyZXR1cm4gTWF0aC5hdGFuMihwK3YtZSx0LWYtdil9bi5zZWxlY3QobSkuYXR0cihcImRcIixlLnBhdGhBbm51bHVzKHMscyt2KSkuYXR0cihcInRyYW5zZm9ybVwiLFIodSxoKSkuY2FsbChfLFwibW92ZVwiKTt2YXIgQSxNLFMsRSxDLHosTz1pLmZyb250cGxvdC5zZWxlY3QoXCIuc2NhdHRlcmxheWVyXCIpLnNlbGVjdEFsbChcIi50cmFjZVwiKSxJPU8uc2VsZWN0QWxsKFwiLnBvaW50XCIpLEQ9Ty5zZWxlY3RBbGwoXCIudGV4dHBvaW50XCIpO2Z1bmN0aW9uIFAodCxzKXt2YXIgZD1lLmdkLl9mdWxsTGF5b3V0LGc9ZFtlLmlkXSx2PXgoQSt0LE0rcyksbT1MKHYteik7aWYoRT1TK20saS5mcm9udHBsb3QuYXR0cihcInRyYW5zZm9ybVwiLFIoZS54T2Zmc2V0MixlLnlPZmZzZXQyKStGKFstbSxmLHBdKSksZS52YW5nbGVzKXtDPWUucmFkaWFsQXhpc0FuZ2xlK207dmFyIHk9Uih1LGgpK0YoLW0pLGI9Uih1LGgpK0YoLUMpO2kuYmcuYXR0cihcInRyYW5zZm9ybVwiLHkpLGlbXCJyYWRpYWwtZ3JpZFwiXS5hdHRyKFwidHJhbnNmb3JtXCIseSksaVtcInJhZGlhbC1heGlzXCJdLmF0dHIoXCJ0cmFuc2Zvcm1cIixiKSxpW1wicmFkaWFsLWxpbmVcIl0uc2VsZWN0KFwibGluZVwiKS5hdHRyKFwidHJhbnNmb3JtXCIsYiksZS51cGRhdGVSYWRpYWxBeGlzVGl0bGUoZCxnLEMpfWVsc2UgZS5jbGlwUGF0aHMuZm9yVHJhY2VzLnNlbGVjdChcInBhdGhcIikuYXR0cihcInRyYW5zZm9ybVwiLFIoZixwKStGKG0pKTtJLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxlPWwuZ2V0VHJhbnNsYXRlKHQpO3QuYXR0cihcInRyYW5zZm9ybVwiLFIoZS54LGUueSkrRihbbV0pKX0pLEQuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9dC5zZWxlY3QoXCJ0ZXh0XCIpLHI9bC5nZXRUcmFuc2xhdGUodCk7dC5hdHRyKFwidHJhbnNmb3JtXCIsRihbbSxlLmF0dHIoXCJ4XCIpLGUuYXR0cihcInlcIildKStSKHIueCxyLnkpKX0pLGMucm90YXRpb249by5tb2RIYWxmKEUsMzYwKSxlLnVwZGF0ZUFuZ3VsYXJBeGlzKGQsZyksZS5faGFzQ2xpcE9uQXhpc0ZhbHNlJiYhby5pc0Z1bGxDaXJjbGUoZS5zZWN0b3JJblJhZCkmJk8uY2FsbChsLmhpZGVPdXRzaWRlUmFuZ2VQb2ludHMsZSk7dmFyIF89ITE7Zm9yKHZhciBUIGluIGUudHJhY2VIYXNoKWlmKGEudHJhY2VJcyhULFwiZ2xcIikpe3ZhciBQPWUudHJhY2VIYXNoW1RdLEI9by5maWx0ZXJWaXNpYmxlKFApO1BbMF1bMF0udHJhY2UuX21vZHVsZS5wbG90KHIsZSxCLGcpLEIubGVuZ3RoJiYoXz0hMCl9XyYmKHcociksayhyKSl9ZnVuY3Rpb24gQigpe0Quc2VsZWN0KFwidGV4dFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsbnVsbCk7dmFyIHQ9e307dFtlLmlkK1wiLmFuZ3VsYXJheGlzLnJvdGF0aW9uXCJdPUUsZS52YW5nbGVzJiYodFtlLmlkK1wiLnJhZGlhbGF4aXMuYW5nbGVcIl09QyksYS5jYWxsKFwiX2d1aVJlbGF5b3V0XCIscix0KX15LnByZXBGbj1mdW5jdGlvbihuLGksYSl7dmFyIG89dFtlLmlkXTtTPW8uYW5ndWxhcmF4aXMucm90YXRpb247dmFyIHM9bS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtBPWktcy5sZWZ0LE09YS1zLnRvcCx6PXgoQSxNKSx5Lm1vdmVGbj1QLHkuZG9uZUZuPUIsYihyKX0sZS52YW5nbGVzJiYhby5pc0Z1bGxDaXJjbGUoZS5zZWN0b3JJblJhZCkmJih5LnByZXBGbj1vLm5vb3AsXyhuLnNlbGVjdChtKSxudWxsKSksZy5pbml0KHkpfSxPLmlzUHRJbnNpZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zZWN0b3JJblJhZCxyPXRoaXMudmFuZ2xlcyxuPXRoaXMuYW5ndWxhckF4aXMuYzJnKHQudGhldGEpLGk9dGhpcy5yYWRpYWxBeGlzLGE9aS5jMmwodC5yKSxzPWkuX3JsO3JldHVybihyP00uaXNQdEluc2lkZVBvbHlnb246by5pc1B0SW5zaWRlU2VjdG9yKShhLG4scyxlLHIpfSxPLnBhdGhBcmM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zZWN0b3JJblJhZCxyPXRoaXMudmFuZ2xlcztyZXR1cm4ocj9NLnBhdGhQb2x5Z29uOm8ucGF0aEFyYykodCxlWzBdLGVbMV0scil9LE8ucGF0aFNlY3Rvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNlY3RvckluUmFkLHI9dGhpcy52YW5nbGVzO3JldHVybihyP00ucGF0aFBvbHlnb246by5wYXRoU2VjdG9yKSh0LGVbMF0sZVsxXSxyKX0sTy5wYXRoQW5udWx1cz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuc2VjdG9ySW5SYWQsbj10aGlzLnZhbmdsZXM7cmV0dXJuKG4/TS5wYXRoUG9seWdvbkFubnVsdXM6by5wYXRoQW5udWx1cykodCxlLHJbMF0sclsxXSxuKX0sTy5wYXRoU3VicGxvdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuaW5uZXJSYWRpdXMsZT10aGlzLnJhZGl1cztyZXR1cm4gdD90aGlzLnBhdGhBbm51bHVzKHQsZSk6dGhpcy5wYXRoU2VjdG9yKGUpfSxPLmZpbGxWaWV3SW5pdGlhbEtleT1mdW5jdGlvbih0LGUpe3QgaW4gdGhpcy52aWV3SW5pdGlhbHx8KHRoaXMudmlld0luaXRpYWxbdF09ZSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudFwiOjU5NixcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9jb21wb25lbnRzL3RpdGxlc1wiOjY2NixcIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIjo2NzMsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvY2xlYXJfZ2xfY2FudmFzZXNcIjo2ODYsXCIuLi8uLi9saWIvc2V0Y3Vyc29yXCI6NzIxLFwiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXNcIjo3NDAsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vY2FydGVzaWFuL2F1dG9yYW5nZVwiOjc0OCxcIi4uL2NhcnRlc2lhbi9kcmFnYm94XCI6NzU3LFwiLi4vY2FydGVzaWFuL3NlbGVjdFwiOjc2NixcIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydFwiOjc2NyxcIi4uL3Bsb3RzXCI6ODEwLFwiLi9jb25zdGFudHNcIjo4MTEsXCIuL2hlbHBlcnNcIjo4MTIsXCIuL3NldF9jb252ZXJ0XCI6ODIzLGQzOjE1NSx0aW55Y29sb3IyOjUyMn1dLDgyMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0XCIpLGE9bi5kZWcycmFkLG89bi5yYWQyZGVnO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7c3dpdGNoKGkodCxyKSx0Ll9pZCl7Y2FzZVwieFwiOmNhc2VcInJhZGlhbGF4aXNcIjohZnVuY3Rpb24odCxlKXt2YXIgcj1lLl9zdWJwbG90O3Quc2V0R2VvbWV0cnk9ZnVuY3Rpb24oKXt2YXIgZT10Ll9ybFswXSxuPXQuX3JsWzFdLGk9ci5pbm5lclJhZGl1cyxhPShyLnJhZGl1cy1pKS8obi1lKSxvPWkvYSxzPWU+bj9mdW5jdGlvbih0KXtyZXR1cm4gdDw9MH06ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTB9O3QuYzJnPWZ1bmN0aW9uKHIpe3ZhciBuPXQuYzJsKHIpLWU7cmV0dXJuKHMobik/bjowKStvfSx0LmcyYz1mdW5jdGlvbihyKXtyZXR1cm4gdC5sMmMocitlLW8pfSx0LmcycD1mdW5jdGlvbih0KXtyZXR1cm4gdCphfSx0LmMycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5nMnAodC5jMmcoZSkpfX19KHQsZSk7YnJlYWs7Y2FzZVwiYW5ndWxhcmF4aXNcIjohZnVuY3Rpb24odCxlKXt2YXIgcj10LnR5cGU7aWYoXCJsaW5lYXJcIj09PXIpe3ZhciBpPXQuZDJjLHM9dC5jMmQ7dC5kMmM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm5cImRlZ3JlZXNcIj09PWU/YSh0KTp0fShpKHQpLGUpfSx0LmMyZD1mdW5jdGlvbih0LGUpe3JldHVybiBzKGZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJkZWdyZWVzXCI9PT1lP28odCk6dH0odCxlKSl9fXQubWFrZUNhbGNkYXRhPWZ1bmN0aW9uKGUsaSl7dmFyIGEsbyxzPWVbaV0sbD1lLl9sZW5ndGgsYz1mdW5jdGlvbihyKXtyZXR1cm4gdC5kMmMocixlLnRoZXRhdW5pdCl9O2lmKHMpe2lmKG4uaXNUeXBlZEFycmF5KHMpJiZcImxpbmVhclwiPT09cil7aWYobD09PXMubGVuZ3RoKXJldHVybiBzO2lmKHMuc3ViYXJyYXkpcmV0dXJuIHMuc3ViYXJyYXkoMCxsKX1mb3IoYT1uZXcgQXJyYXkobCksbz0wO288bDtvKyspYVtvXT1jKHNbb10pfWVsc2V7dmFyIHU9aStcIjBcIixoPVwiZFwiK2ksZj11IGluIGU/YyhlW3VdKTowLHA9ZVtoXT9jKGVbaF0pOih0LnBlcmlvZHx8MipNYXRoLlBJKS9sO2ZvcihhPW5ldyBBcnJheShsKSxvPTA7bzxsO28rKylhW29dPWYrbypwfXJldHVybiBhfSx0LnNldEdlb21ldHJ5PWZ1bmN0aW9uKCl7dmFyIGkscyxsLGMsdT1lLnNlY3RvcixoPXUubWFwKGEpLGY9e2Nsb2Nrd2lzZTotMSxjb3VudGVyY2xvY2t3aXNlOjF9W3QuZGlyZWN0aW9uXSxwPWEodC5yb3RhdGlvbiksZD1mdW5jdGlvbih0KXtyZXR1cm4gZip0K3B9LGc9ZnVuY3Rpb24odCl7cmV0dXJuKHQtcCkvZn07c3dpdGNoKHIpe2Nhc2VcImxpbmVhclwiOnM9aT1uLmlkZW50aXR5LGM9YSxsPW8sdC5yYW5nZT1uLmlzRnVsbENpcmNsZShoKT9bdVswXSx1WzBdKzM2MF06aC5tYXAoZykubWFwKG8pO2JyZWFrO2Nhc2VcImNhdGVnb3J5XCI6dmFyIHY9dC5fY2F0ZWdvcmllcy5sZW5ndGgsbT10LnBlcmlvZD9NYXRoLm1heCh0LnBlcmlvZCx2KTp2O3M9Yz1mdW5jdGlvbih0KXtyZXR1cm4gMip0Kk1hdGguUEkvbX0saT1sPWZ1bmN0aW9uKHQpe3JldHVybiB0Km0vTWF0aC5QSS8yfSx0LnJhbmdlPVswLG1dfXQuYzJnPWZ1bmN0aW9uKHQpe3JldHVybiBkKHModCkpfSx0LmcyYz1mdW5jdGlvbih0KXtyZXR1cm4gaShnKHQpKX0sdC50Mmc9ZnVuY3Rpb24odCl7cmV0dXJuIGQoYyh0KSl9LHQuZzJ0PWZ1bmN0aW9uKHQpe3JldHVybiBsKGcodCkpfX19KHQsZSl9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0XCI6NzY3fV0sODI0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2xpYlwiKSxpPXQoXCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLGE9dChcIi4vZG9tYWluXCIpLmRlZmF1bHRzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcyxsLGM9by50eXBlLHU9by5hdHRyaWJ1dGVzLGg9by5oYW5kbGVEZWZhdWx0cyxmPW8ucGFydGl0aW9ufHxcInhcIixwPWUuX3N1YnBsb3RzW2NdLGQ9cC5sZW5ndGgsZz1kJiZwWzBdLnJlcGxhY2UoL1xcZCskLyxcIlwiKTtmdW5jdGlvbiB2KHQsZSl7cmV0dXJuIG4uY29lcmNlKHMsbCx1LHQsZSl9Zm9yKHZhciBtPTA7bTxkO20rKyl7dmFyIHk9cFttXTtzPXRbeV0/dFt5XTp0W3ldPXt9LGw9aS5uZXdDb250YWluZXIoZSx5LGcpLHYoXCJ1aXJldmlzaW9uXCIsZS51aXJldmlzaW9uKTt2YXIgeD17fTt4W2ZdPVttL2QsKG0rMSkvZF0sYShsLGUsdix4KSxvLmlkPXksaChzLGwsdixvKX19fSx7XCIuLi9saWJcIjo3MDEsXCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi9kb21haW5cIjo3NzR9XSw4MjU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi90ZXJuYXJ5XCIpLGk9dChcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCIpLmdldFN1YnBsb3RDYWxjRGF0YSxhPXQoXCIuLi8uLi9saWJcIikuY291bnRlclJlZ2V4O3IubmFtZT1cInRlcm5hcnlcIjt2YXIgbz1yLmF0dHI9XCJzdWJwbG90XCI7ci5pZFJvb3Q9XCJ0ZXJuYXJ5XCIsci5pZFJlZ2V4PXIuYXR0clJlZ2V4PWEoXCJ0ZXJuYXJ5XCIpLChyLmF0dHJpYnV0ZXM9e30pW29dPXt2YWxUeXBlOlwic3VicGxvdGlkXCIsZGZsdDpcInRlcm5hcnlcIixlZGl0VHlwZTpcImNhbGNcIn0sci5sYXlvdXRBdHRyaWJ1dGVzPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9dChcIi4vbGF5b3V0X2RlZmF1bHRzXCIpLHIucGxvdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsYT1lLl9zdWJwbG90cy50ZXJuYXJ5LG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXSxsPWkocixcInRlcm5hcnlcIixzKSxjPWVbc10uX3N1YnBsb3Q7Y3x8KGM9bmV3IG4oe2lkOnMsZ3JhcGhEaXY6dCxjb250YWluZXI6ZS5fdGVybmFyeWxheWVyLm5vZGUoKX0sZSksZVtzXS5fc3VicGxvdD1jKSxjLnBsb3QobCxlLHQuX3Byb21pc2VzKX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLnRlcm5hcnl8fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXSxzPW5bb10uX3N1YnBsb3Q7IWVbb10mJnMmJihzLnBsb3RDb250YWluZXIucmVtb3ZlKCkscy5jbGlwRGVmLnJlbW92ZSgpLHMuY2xpcERlZlJlbGF0aXZlLnJlbW92ZSgpLHMubGF5ZXJzW1wiYS10aXRsZVwiXS5yZW1vdmUoKSxzLmxheWVyc1tcImItdGl0bGVcIl0ucmVtb3ZlKCkscy5sYXllcnNbXCJjLXRpdGxlXCJdLnJlbW92ZSgpKX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9nZXRfZGF0YVwiOjc4NCxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo4MjYsXCIuL2xheW91dF9kZWZhdWx0c1wiOjgyNyxcIi4vdGVybmFyeVwiOjgyOH1dLDgyNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vZG9tYWluXCIpLmF0dHJpYnV0ZXMsYT10KFwiLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGwscz10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LGw9e3RpdGxlOmEudGl0bGUsY29sb3I6YS5jb2xvcix0aWNrbW9kZTphLnRpY2ttb2RlLG50aWNrczpzKHt9LGEubnRpY2tzLHtkZmx0OjYsbWluOjF9KSx0aWNrMDphLnRpY2swLGR0aWNrOmEuZHRpY2ssdGlja3ZhbHM6YS50aWNrdmFscyx0aWNrdGV4dDphLnRpY2t0ZXh0LHRpY2tzOmEudGlja3MsdGlja2xlbjphLnRpY2tsZW4sdGlja3dpZHRoOmEudGlja3dpZHRoLHRpY2tjb2xvcjphLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczphLnNob3d0aWNrbGFiZWxzLHNob3d0aWNrcHJlZml4OmEuc2hvd3RpY2twcmVmaXgsdGlja3ByZWZpeDphLnRpY2twcmVmaXgsc2hvd3RpY2tzdWZmaXg6YS5zaG93dGlja3N1ZmZpeCx0aWNrc3VmZml4OmEudGlja3N1ZmZpeCxzaG93ZXhwb25lbnQ6YS5zaG93ZXhwb25lbnQsZXhwb25lbnRmb3JtYXQ6YS5leHBvbmVudGZvcm1hdCxzZXBhcmF0ZXRob3VzYW5kczphLnNlcGFyYXRldGhvdXNhbmRzLHRpY2tmb250OmEudGlja2ZvbnQsdGlja2FuZ2xlOmEudGlja2FuZ2xlLHRpY2tmb3JtYXQ6YS50aWNrZm9ybWF0LHRpY2tmb3JtYXRzdG9wczphLnRpY2tmb3JtYXRzdG9wcyxob3ZlcmZvcm1hdDphLmhvdmVyZm9ybWF0LHNob3dsaW5lOnMoe30sYS5zaG93bGluZSx7ZGZsdDohMH0pLGxpbmVjb2xvcjphLmxpbmVjb2xvcixsaW5ld2lkdGg6YS5saW5ld2lkdGgsc2hvd2dyaWQ6cyh7fSxhLnNob3dncmlkLHtkZmx0OiEwfSksZ3JpZGNvbG9yOmEuZ3JpZGNvbG9yLGdyaWR3aWR0aDphLmdyaWR3aWR0aCxsYXllcjphLmxheWVyLG1pbjp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MCxtaW46MH0sX2RlcHJlY2F0ZWQ6e3RpdGxlOmEuX2RlcHJlY2F0ZWQudGl0bGUsdGl0bGVmb250OmEuX2RlcHJlY2F0ZWQudGl0bGVmb250fX0sYz1lLmV4cG9ydHM9byh7ZG9tYWluOmkoe25hbWU6XCJ0ZXJuYXJ5XCJ9KSxiZ2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0Om4uYmFja2dyb3VuZH0sc3VtOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxLG1pbjowfSxhYXhpczpsLGJheGlzOmwsY2F4aXM6bH0sXCJwbG90XCIsXCJmcm9tLXJvb3RcIik7Yy51aXJldmlzaW9uPXt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJub25lXCJ9LGMuYWF4aXMudWlyZXZpc2lvbj1jLmJheGlzLnVpcmV2aXNpb249Yy5jYXhpcy51aXJldmlzaW9uPXt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJub25lXCJ9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIjo1NzcsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlc1wiOjc2MSxcIi4uL2RvbWFpblwiOjc3NH1dLDgyNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGk9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIiksYT10KFwiLi4vLi4vbGliXCIpLG89dChcIi4uL3N1YnBsb3RfZGVmYXVsdHNcIikscz10KFwiLi4vY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHNcIiksbD10KFwiLi4vY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0c1wiKSxjPXQoXCIuLi9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0c1wiKSx1PXQoXCIuLi9jYXJ0ZXNpYW4vbGluZV9ncmlkX2RlZmF1bHRzXCIpLGg9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksZj1bXCJhYXhpc1wiLFwiYmF4aXNcIixcImNheGlzXCJdO2Z1bmN0aW9uIHAodCxlLHIsYSl7dmFyIG8scyxsLGM9cihcImJnY29sb3JcIiksdT1yKFwic3VtXCIpO2EuYmdDb2xvcj1uLmNvbWJpbmUoYyxhLnBhcGVyX2JnY29sb3IpO2Zvcih2YXIgaD0wO2g8Zi5sZW5ndGg7aCsrKXM9dFtvPWZbaF1dfHx7fSwobD1pLm5ld0NvbnRhaW5lcihlLG8pKS5fbmFtZT1vLGQocyxsLGEsZSk7dmFyIHA9ZS5hYXhpcyxnPWUuYmF4aXMsdj1lLmNheGlzO3AubWluK2cubWluK3YubWluPj11JiYocC5taW49MCxnLm1pbj0wLHYubWluPTAsdC5hYXhpcyYmZGVsZXRlIHQuYWF4aXMubWluLHQuYmF4aXMmJmRlbGV0ZSB0LmJheGlzLm1pbix0LmNheGlzJiZkZWxldGUgdC5jYXhpcy5taW4pfWZ1bmN0aW9uIGQodCxlLHIsbil7dmFyIGk9aFtlLl9uYW1lXTtmdW5jdGlvbiBvKHIsbil7cmV0dXJuIGEuY29lcmNlKHQsZSxpLHIsbil9byhcInVpcmV2aXNpb25cIixuLnVpcmV2aXNpb24pLGUudHlwZT1cImxpbmVhclwiO3ZhciBmPW8oXCJjb2xvclwiKSxwPWYhPT1pLmNvbG9yLmRmbHQ/ZjpyLmZvbnQuY29sb3IsZD1lLl9uYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpLGc9XCJDb21wb25lbnQgXCIrZCx2PW8oXCJ0aXRsZS50ZXh0XCIsZyk7ZS5faG92ZXJ0aXRsZT12PT09Zz92OmQsYS5jb2VyY2VGb250KG8sXCJ0aXRsZS5mb250XCIse2ZhbWlseTpyLmZvbnQuZmFtaWx5LHNpemU6TWF0aC5yb3VuZCgxLjIqci5mb250LnNpemUpLGNvbG9yOnB9KSxvKFwibWluXCIpLGModCxlLG8sXCJsaW5lYXJcIikscyh0LGUsbyxcImxpbmVhclwiLHt9KSxsKHQsZSxvLHtvdXRlclRpY2tzOiEwfSksbyhcInNob3d0aWNrbGFiZWxzXCIpJiYoYS5jb2VyY2VGb250KG8sXCJ0aWNrZm9udFwiLHtmYW1pbHk6ci5mb250LmZhbWlseSxzaXplOnIuZm9udC5zaXplLGNvbG9yOnB9KSxvKFwidGlja2FuZ2xlXCIpLG8oXCJ0aWNrZm9ybWF0XCIpKSx1KHQsZSxvLHtkZmx0Q29sb3I6ZixiZ0NvbG9yOnIuYmdDb2xvcixibGVuZDo2MCxzaG93TGluZTohMCxzaG93R3JpZDohMCxub1plcm9MaW5lOiEwLGF0dHJpYnV0ZXM6aX0pLG8oXCJob3ZlcmZvcm1hdFwiKSxvKFwibGF5ZXJcIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtvKHQsZSxyLHt0eXBlOlwidGVybmFyeVwiLGF0dHJpYnV0ZXM6aCxoYW5kbGVEZWZhdWx0czpwLGZvbnQ6ZS5mb250LHBhcGVyX2JnY29sb3I6ZS5wYXBlcl9iZ2NvbG9yfSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uL2NhcnRlc2lhbi9saW5lX2dyaWRfZGVmYXVsdHNcIjo3NjMsXCIuLi9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0c1wiOjc2OCxcIi4uL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHNcIjo3NjksXCIuLi9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0c1wiOjc3MCxcIi4uL3N1YnBsb3RfZGVmYXVsdHNcIjo4MjQsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6ODI2fV0sODI4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcInRpbnljb2xvcjJcIiksYT10KFwiLi4vLi4vcmVnaXN0cnlcIiksbz10KFwiLi4vLi4vbGliXCIpLHM9by5fLGw9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksYz10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLHU9dChcIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydFwiKSxoPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsZj10KFwiLi4vcGxvdHNcIikscD10KFwiLi4vY2FydGVzaWFuL2F4ZXNcIiksZD10KFwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudFwiKSxnPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4XCIpLHY9dChcIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzXCIpLG09dChcIi4uL2NhcnRlc2lhbi9zZWxlY3RcIikucHJlcFNlbGVjdCx5PXQoXCIuLi9jYXJ0ZXNpYW4vc2VsZWN0XCIpLnNlbGVjdE9uQ2xpY2sseD10KFwiLi4vY2FydGVzaWFuL3NlbGVjdFwiKS5jbGVhclNlbGVjdCxiPXQoXCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzXCIpO2Z1bmN0aW9uIF8odCxlKXt0aGlzLmlkPXQuaWQsdGhpcy5ncmFwaERpdj10LmdyYXBoRGl2LHRoaXMuaW5pdChlKSx0aGlzLm1ha2VGcmFtZXdvcmsoZSksdGhpcy5hVGlja0xheW91dD1udWxsLHRoaXMuYlRpY2tMYXlvdXQ9bnVsbCx0aGlzLmNUaWNrTGF5b3V0PW51bGx9ZS5leHBvcnRzPV87dmFyIHc9Xy5wcm90b3R5cGU7dy5pbml0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGFpbmVyPXQuX3Rlcm5hcnlsYXllcix0aGlzLmRlZnM9dC5fZGVmcyx0aGlzLmxheW91dElkPXQuX3VpZCx0aGlzLnRyYWNlSGFzaD17fSx0aGlzLmxheWVycz17fX0sdy5wbG90PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVt0aGlzLmlkXSxuPWUuX3NpemU7dGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPSExO2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXtpZighMT09PXRbaV1bMF0udHJhY2UuY2xpcG9uYXhpcyl7dGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPSEwO2JyZWFrfX10aGlzLnVwZGF0ZUxheWVycyhyKSx0aGlzLmFkanVzdExheW91dChyLG4pLGYuZ2VuZXJhbFVwZGF0ZVBlclRyYWNlTW9kdWxlKHRoaXMuZ3JhcGhEaXYsdGhpcyx0LHIpLHRoaXMubGF5ZXJzLnBsb3RiZy5zZWxlY3QoXCJwYXRoXCIpLmNhbGwobC5maWxsLHIuYmdjb2xvcil9LHcubWFrZUZyYW1ld29yaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdyYXBoRGl2LHI9dFt0aGlzLmlkXSxuPXRoaXMuY2xpcElkPVwiY2xpcFwiK3RoaXMubGF5b3V0SWQrdGhpcy5pZCxpPXRoaXMuY2xpcElkUmVsYXRpdmU9XCJjbGlwLXJlbGF0aXZlXCIrdGhpcy5sYXlvdXRJZCt0aGlzLmlkO3RoaXMuY2xpcERlZj1vLmVuc3VyZVNpbmdsZUJ5SWQodC5fY2xpcHMsXCJjbGlwUGF0aFwiLG4sZnVuY3Rpb24odCl7dC5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsXCJNMCwwWlwiKX0pLHRoaXMuY2xpcERlZlJlbGF0aXZlPW8uZW5zdXJlU2luZ2xlQnlJZCh0Ll9jbGlwcyxcImNsaXBQYXRoXCIsaSxmdW5jdGlvbih0KXt0LmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIixcIk0wLDBaXCIpfSksdGhpcy5wbG90Q29udGFpbmVyPW8uZW5zdXJlU2luZ2xlKHRoaXMuY29udGFpbmVyLFwiZ1wiLHRoaXMuaWQpLHRoaXMudXBkYXRlTGF5ZXJzKHIpLGMuc2V0Q2xpcFVybCh0aGlzLmxheWVycy5iYWNrcGxvdCxuLGUpLGMuc2V0Q2xpcFVybCh0aGlzLmxheWVycy5ncmlkcyxuLGUpfSx3LnVwZGF0ZUxheWVycz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxheWVycyxyPVtcImRyYWdsYXllclwiLFwicGxvdGJnXCIsXCJiYWNrcGxvdFwiLFwiZ3JpZHNcIl07XCJiZWxvdyB0cmFjZXNcIj09PXQuYWF4aXMubGF5ZXImJnIucHVzaChcImFheGlzXCIsXCJhbGluZVwiKSxcImJlbG93IHRyYWNlc1wiPT09dC5iYXhpcy5sYXllciYmci5wdXNoKFwiYmF4aXNcIixcImJsaW5lXCIpLFwiYmVsb3cgdHJhY2VzXCI9PT10LmNheGlzLmxheWVyJiZyLnB1c2goXCJjYXhpc1wiLFwiY2xpbmVcIiksci5wdXNoKFwiZnJvbnRwbG90XCIpLFwiYWJvdmUgdHJhY2VzXCI9PT10LmFheGlzLmxheWVyJiZyLnB1c2goXCJhYXhpc1wiLFwiYWxpbmVcIiksXCJhYm92ZSB0cmFjZXNcIj09PXQuYmF4aXMubGF5ZXImJnIucHVzaChcImJheGlzXCIsXCJibGluZVwiKSxcImFib3ZlIHRyYWNlc1wiPT09dC5jYXhpcy5sYXllciYmci5wdXNoKFwiY2F4aXNcIixcImNsaW5lXCIpO3ZhciBpPXRoaXMucGxvdENvbnRhaW5lci5zZWxlY3RBbGwoXCJnLnRvcGxldmVsXCIpLmRhdGEocixTdHJpbmcpLGE9W1wiYWdyaWRcIixcImJncmlkXCIsXCJjZ3JpZFwiXTtpLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIixmdW5jdGlvbih0KXtyZXR1cm5cInRvcGxldmVsIFwiK3R9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2VbdF09cixcImZyb250cGxvdFwiPT09dD9yLmFwcGVuZChcImdcIikuY2xhc3NlZChcInNjYXR0ZXJsYXllclwiLCEwKTpcImJhY2twbG90XCI9PT10P3IuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwibWFwbGF5ZXJcIiwhMCk6XCJwbG90YmdcIj09PXQ/ci5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsXCJNMCwwWlwiKTpcImFsaW5lXCI9PT10fHxcImJsaW5lXCI9PT10fHxcImNsaW5lXCI9PT10P3IuYXBwZW5kKFwicGF0aFwiKTpcImdyaWRzXCI9PT10JiZhLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT1yLmFwcGVuZChcImdcIikuY2xhc3NlZChcImdyaWQgXCIrdCwhMCl9KX0pLGkub3JkZXIoKX07dmFyIGs9TWF0aC5zcXJ0KDQvMyk7dy5hZGp1c3RMYXlvdXQ9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLHMsZj10aGlzLHA9dC5kb21haW4sZD0ocC54WzBdK3AueFsxXSkvMixnPShwLnlbMF0rcC55WzFdKS8yLHY9cC54WzFdLXAueFswXSxtPXAueVsxXS1wLnlbMF0seT12KmUudyx4PW0qZS5oLGI9dC5zdW0sXz10LmFheGlzLm1pbix3PXQuYmF4aXMubWluLEE9dC5jYXhpcy5taW47eT5rKng/aT0oYT14KSprOmE9KGk9eSkvayxvPXYqaS95LHM9bSphL3gscj1lLmwrZS53KmQtaS8yLG49ZS50K2UuaCooMS1nKS1hLzIsZi54MD1yLGYueTA9bixmLnc9aSxmLmg9YSxmLnN1bT1iLGYueGF4aXM9e3R5cGU6XCJsaW5lYXJcIixyYW5nZTpbXysyKkEtYixiLV8tMip3XSxkb21haW46W2Qtby8yLGQrby8yXSxfaWQ6XCJ4XCJ9LHUoZi54YXhpcyxmLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxmLnhheGlzLnNldFNjYWxlKCksZi54YXhpcy5pc1B0V2l0aGluUmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIHQuYT49Zi5hYXhpcy5yYW5nZVswXSYmdC5hPD1mLmFheGlzLnJhbmdlWzFdJiZ0LmI+PWYuYmF4aXMucmFuZ2VbMV0mJnQuYjw9Zi5iYXhpcy5yYW5nZVswXSYmdC5jPj1mLmNheGlzLnJhbmdlWzFdJiZ0LmM8PWYuY2F4aXMucmFuZ2VbMF19LGYueWF4aXM9e3R5cGU6XCJsaW5lYXJcIixyYW5nZTpbXyxiLXctQV0sZG9tYWluOltnLXMvMixnK3MvMl0sX2lkOlwieVwifSx1KGYueWF4aXMsZi5ncmFwaERpdi5fZnVsbExheW91dCksZi55YXhpcy5zZXRTY2FsZSgpLGYueWF4aXMuaXNQdFdpdGhpblJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuITB9O3ZhciBUPWYueWF4aXMuZG9tYWluWzBdLE09Zi5hYXhpcz1oKHt9LHQuYWF4aXMse3JhbmdlOltfLGItdy1BXSxzaWRlOlwibGVmdFwiLHRpY2thbmdsZTooK3QuYWF4aXMudGlja2FuZ2xlfHwwKS0zMCxkb21haW46W1QsVCtzKmtdLGFuY2hvcjpcImZyZWVcIixwb3NpdGlvbjowLF9pZDpcInlcIixfbGVuZ3RoOml9KTt1KE0sZi5ncmFwaERpdi5fZnVsbExheW91dCksTS5zZXRTY2FsZSgpO3ZhciBTPWYuYmF4aXM9aCh7fSx0LmJheGlzLHtyYW5nZTpbYi1fLUEsd10sc2lkZTpcImJvdHRvbVwiLGRvbWFpbjpmLnhheGlzLmRvbWFpbixhbmNob3I6XCJmcmVlXCIscG9zaXRpb246MCxfaWQ6XCJ4XCIsX2xlbmd0aDppfSk7dShTLGYuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQpLFMuc2V0U2NhbGUoKTt2YXIgRT1mLmNheGlzPWgoe30sdC5jYXhpcyx7cmFuZ2U6W2ItXy13LEFdLHNpZGU6XCJyaWdodFwiLHRpY2thbmdsZTooK3QuY2F4aXMudGlja2FuZ2xlfHwwKSszMCxkb21haW46W1QsVCtzKmtdLGFuY2hvcjpcImZyZWVcIixwb3NpdGlvbjowLF9pZDpcInlcIixfbGVuZ3RoOml9KTt1KEUsZi5ncmFwaERpdi5fZnVsbExheW91dCksRS5zZXRTY2FsZSgpO3ZhciBDPVwiTVwiK3IrXCIsXCIrKG4rYSkrXCJoXCIraStcImwtXCIraS8yK1wiLC1cIithK1wiWlwiO2YuY2xpcERlZi5zZWxlY3QoXCJwYXRoXCIpLmF0dHIoXCJkXCIsQyksZi5sYXllcnMucGxvdGJnLnNlbGVjdChcInBhdGhcIikuYXR0cihcImRcIixDKTt2YXIgTD1cIk0wLFwiK2ErXCJoXCIraStcImwtXCIraS8yK1wiLC1cIithK1wiWlwiO2YuY2xpcERlZlJlbGF0aXZlLnNlbGVjdChcInBhdGhcIikuYXR0cihcImRcIixMKTt2YXIgej1cInRyYW5zbGF0ZShcIityK1wiLFwiK24rXCIpXCI7Zi5wbG90Q29udGFpbmVyLnNlbGVjdEFsbChcIi5zY2F0dGVybGF5ZXIsLm1hcGxheWVyXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIix6KSxmLmNsaXBEZWZSZWxhdGl2ZS5zZWxlY3QoXCJwYXRoXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIixudWxsKTt2YXIgTz1cInRyYW5zbGF0ZShcIisoci1TLl9vZmZzZXQpK1wiLFwiKyhuK2EpK1wiKVwiO2YubGF5ZXJzLmJheGlzLmF0dHIoXCJ0cmFuc2Zvcm1cIixPKSxmLmxheWVycy5iZ3JpZC5hdHRyKFwidHJhbnNmb3JtXCIsTyk7dmFyIEk9XCJ0cmFuc2xhdGUoXCIrKHIraS8yKStcIixcIituK1wiKXJvdGF0ZSgzMCl0cmFuc2xhdGUoMCxcIistTS5fb2Zmc2V0K1wiKVwiO2YubGF5ZXJzLmFheGlzLmF0dHIoXCJ0cmFuc2Zvcm1cIixJKSxmLmxheWVycy5hZ3JpZC5hdHRyKFwidHJhbnNmb3JtXCIsSSk7dmFyIEQ9XCJ0cmFuc2xhdGUoXCIrKHIraS8yKStcIixcIituK1wiKXJvdGF0ZSgtMzApdHJhbnNsYXRlKDAsXCIrLUUuX29mZnNldCtcIilcIjtmLmxheWVycy5jYXhpcy5hdHRyKFwidHJhbnNmb3JtXCIsRCksZi5sYXllcnMuY2dyaWQuYXR0cihcInRyYW5zZm9ybVwiLEQpLGYuZHJhd0F4ZXMoITApLGYubGF5ZXJzLmFsaW5lLnNlbGVjdChcInBhdGhcIikuYXR0cihcImRcIixNLnNob3dsaW5lP1wiTVwiK3IrXCIsXCIrKG4rYSkrXCJsXCIraS8yK1wiLC1cIithOlwiTTAsMFwiKS5jYWxsKGwuc3Ryb2tlLE0ubGluZWNvbG9yfHxcIiMwMDBcIikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwoTS5saW5ld2lkdGh8fDApK1wicHhcIiksZi5sYXllcnMuYmxpbmUuc2VsZWN0KFwicGF0aFwiKS5hdHRyKFwiZFwiLFMuc2hvd2xpbmU/XCJNXCIrcitcIixcIisobithKStcImhcIitpOlwiTTAsMFwiKS5jYWxsKGwuc3Ryb2tlLFMubGluZWNvbG9yfHxcIiMwMDBcIikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwoUy5saW5ld2lkdGh8fDApK1wicHhcIiksZi5sYXllcnMuY2xpbmUuc2VsZWN0KFwicGF0aFwiKS5hdHRyKFwiZFwiLEUuc2hvd2xpbmU/XCJNXCIrKHIraS8yKStcIixcIituK1wibFwiK2kvMitcIixcIithOlwiTTAsMFwiKS5jYWxsKGwuc3Ryb2tlLEUubGluZWNvbG9yfHxcIiMwMDBcIikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwoRS5saW5ld2lkdGh8fDApK1wicHhcIiksZi5ncmFwaERpdi5fY29udGV4dC5zdGF0aWNQbG90fHxmLmluaXRJbnRlcmFjdGlvbnMoKSxjLnNldENsaXBVcmwoZi5sYXllcnMuZnJvbnRwbG90LGYuX2hhc0NsaXBPbkF4aXNGYWxzZT9udWxsOmYuY2xpcElkLGYuZ3JhcGhEaXYpfSx3LmRyYXdBeGVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ3JhcGhEaXYscj10aGlzLmlkLnN1YnN0cig3KStcInRpdGxlXCIsbj10aGlzLmxheWVycyxpPXRoaXMuYWF4aXMsYT10aGlzLmJheGlzLG89dGhpcy5jYXhpcztpZih0aGlzLmRyYXdBeChpKSx0aGlzLmRyYXdBeChhKSx0aGlzLmRyYXdBeChvKSx0KXt2YXIgbD1NYXRoLm1heChpLnNob3d0aWNrbGFiZWxzP2kudGlja2ZvbnQuc2l6ZS8yOjAsKG8uc2hvd3RpY2tsYWJlbHM/Ljc1Km8udGlja2ZvbnQuc2l6ZTowKSsoXCJvdXRzaWRlXCI9PT1vLnRpY2tzPy44NypvLnRpY2tsZW46MCkpLGM9KGEuc2hvd3RpY2tsYWJlbHM/YS50aWNrZm9udC5zaXplOjApKyhcIm91dHNpZGVcIj09PWEudGlja3M/YS50aWNrbGVuOjApKzM7bltcImEtdGl0bGVcIl09di5kcmF3KGUsXCJhXCIrcix7cHJvcENvbnRhaW5lcjppLHByb3BOYW1lOnRoaXMuaWQrXCIuYWF4aXMudGl0bGVcIixwbGFjZWhvbGRlcjpzKGUsXCJDbGljayB0byBlbnRlciBDb21wb25lbnQgQSB0aXRsZVwiKSxhdHRyaWJ1dGVzOnt4OnRoaXMueDArdGhpcy53LzIseTp0aGlzLnkwLWkudGl0bGUuZm9udC5zaXplLzMtbCxcInRleHQtYW5jaG9yXCI6XCJtaWRkbGVcIn19KSxuW1wiYi10aXRsZVwiXT12LmRyYXcoZSxcImJcIityLHtwcm9wQ29udGFpbmVyOmEscHJvcE5hbWU6dGhpcy5pZCtcIi5iYXhpcy50aXRsZVwiLHBsYWNlaG9sZGVyOnMoZSxcIkNsaWNrIHRvIGVudGVyIENvbXBvbmVudCBCIHRpdGxlXCIpLGF0dHJpYnV0ZXM6e3g6dGhpcy54MC1jLHk6dGhpcy55MCt0aGlzLmgrLjgzKmEudGl0bGUuZm9udC5zaXplK2MsXCJ0ZXh0LWFuY2hvclwiOlwibWlkZGxlXCJ9fSksbltcImMtdGl0bGVcIl09di5kcmF3KGUsXCJjXCIrcix7cHJvcENvbnRhaW5lcjpvLHByb3BOYW1lOnRoaXMuaWQrXCIuY2F4aXMudGl0bGVcIixwbGFjZWhvbGRlcjpzKGUsXCJDbGljayB0byBlbnRlciBDb21wb25lbnQgQyB0aXRsZVwiKSxhdHRyaWJ1dGVzOnt4OnRoaXMueDArdGhpcy53K2MseTp0aGlzLnkwK3RoaXMuaCsuODMqby50aXRsZS5mb250LnNpemUrYyxcInRleHQtYW5jaG9yXCI6XCJtaWRkbGVcIn19KX19LHcuZHJhd0F4PWZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5ncmFwaERpdixuPXQuX25hbWUsaT1uLmNoYXJBdCgwKSxhPXQuX2lkLHM9dGhpcy5sYXllcnNbbl0sbD1pK1widGlja0xheW91dFwiLGM9KGU9dCkudGlja3MrU3RyaW5nKGUudGlja2xlbikrU3RyaW5nKGUuc2hvd3RpY2tsYWJlbHMpO3RoaXNbbF0hPT1jJiYocy5zZWxlY3RBbGwoXCIuXCIrYStcInRpY2tcIikucmVtb3ZlKCksdGhpc1tsXT1jKSx0LnNldFNjYWxlKCk7dmFyIHU9cC5jYWxjVGlja3ModCksaD1wLmNsaXBFbmRzKHQsdSksZj1wLm1ha2VUcmFuc0ZuKHQpLGQ9cC5nZXRUaWNrU2lnbnModClbMl0sZz1vLmRlZzJyYWQoMzApLHY9ZCoodC5saW5ld2lkdGh8fDEpLzIsbT1kKnQudGlja2xlbix5PXRoaXMudyx4PXRoaXMuaCxiPVwiYlwiPT09aT9cIk0wLFwiK3YrXCJsXCIrTWF0aC5zaW4oZykqbStcIixcIitNYXRoLmNvcyhnKSptOlwiTVwiK3YrXCIsMGxcIitNYXRoLmNvcyhnKSptK1wiLFwiKy1NYXRoLnNpbihnKSptLF89e2E6XCJNMCwwbFwiK3grXCIsLVwiK3kvMixiOlwiTTAsMGwtXCIreS8yK1wiLC1cIit4LGM6XCJNMCwwbC1cIit4K1wiLFwiK3kvMn1baV07cC5kcmF3VGlja3Mocix0LHt2YWxzOlwiaW5zaWRlXCI9PT10LnRpY2tzP2g6dSxsYXllcjpzLHBhdGg6Yix0cmFuc0ZuOmYsY3Jpc3A6ITF9KSxwLmRyYXdHcmlkKHIsdCx7dmFsczpoLGxheWVyOnRoaXMubGF5ZXJzW2krXCJncmlkXCJdLHBhdGg6Xyx0cmFuc0ZuOmYsY3Jpc3A6ITF9KSxwLmRyYXdMYWJlbHMocix0LHt2YWxzOnUsbGF5ZXI6cyx0cmFuc0ZuOmYsbGFiZWxGbnM6cC5tYWtlTGFiZWxGbnModCwwLDMwKX0pfTt2YXIgQT1iLk1JTlpPT00vMisuODcsVD1cIm0tMC44NywuNWhcIitBK1widjNoLVwiKyhBKzUuMikrXCJsXCIrKEEvMisyLjYpK1wiLC1cIisoLjg3KkErNC41KStcImwyLjYsMS41bC1cIitBLzIrXCIsXCIrLjg3KkErXCJaXCIsTT1cIm0wLjg3LC41aC1cIitBK1widjNoXCIrKEErNS4yKStcImwtXCIrKEEvMisyLjYpK1wiLC1cIisoLjg3KkErNC41KStcImwtMi42LDEuNWxcIitBLzIrXCIsXCIrLjg3KkErXCJaXCIsUz1cIm0wLDFsXCIrQS8yK1wiLFwiKy44NypBK1wibDIuNiwtMS41bC1cIisoQS8yKzIuNikrXCIsLVwiKyguODcqQSs0LjUpK1wibC1cIisoQS8yKzIuNikrXCIsXCIrKC44NypBKzQuNSkrXCJsMi42LDEuNWxcIitBLzIrXCIsLVwiKy44NypBK1wiWlwiLEU9XCJtMC41LDAuNWg1di0yaC01di01aC0ydjVoLTV2Mmg1djVoMlpcIixDPSEwO2Z1bmN0aW9uIEwodCl7bi5zZWxlY3QodCkuc2VsZWN0QWxsKFwiLnpvb21ib3gsLmpzLXpvb21ib3gtYmFja2Ryb3AsLmpzLXpvb21ib3gtbWVudSwuem9vbWJveC1jb3JuZXJzXCIpLnJlbW92ZSgpfXcuaW5pdEludGVyYWN0aW9ucz1mdW5jdGlvbigpe3ZhciB0LGUscixuLHUsaCxmLHAsdixfLHc9dGhpcyxBPXcubGF5ZXJzLnBsb3RiZy5zZWxlY3QoXCJwYXRoXCIpLm5vZGUoKSx6PXcuZ3JhcGhEaXYsTz16Ll9mdWxsTGF5b3V0Ll96b29tbGF5ZXIsST17ZWxlbWVudDpBLGdkOnoscGxvdGluZm86e2lkOncuaWQseGF4aXM6dy54YXhpcyx5YXhpczp3LnlheGlzfSxzdWJwbG90OncuaWQscHJlcEZuOmZ1bmN0aW9uKGEsbyxzKXtJLnhheGVzPVt3LnhheGlzXSxJLnlheGVzPVt3LnlheGlzXTt2YXIgYz16Ll9mdWxsTGF5b3V0LmRyYWdtb2RlO0kubWluRHJhZz1cImxhc3NvXCI9PT1jPzE6dm9pZCAwLFwiem9vbVwiPT09Yz8oSS5tb3ZlRm49TixJLmNsaWNrRm49UCxJLmRvbmVGbj1qLGZ1bmN0aW9uKGEsbyxzKXt2YXIgYz1BLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3Q9by1jLmxlZnQsZT1zLWMudG9wLHI9e2E6dy5hYXhpcy5yYW5nZVswXSxiOncuYmF4aXMucmFuZ2VbMV0sYzp3LmNheGlzLnJhbmdlWzFdfSx1PXIsbj13LmFheGlzLnJhbmdlWzFdLXIuYSxoPWkody5ncmFwaERpdi5fZnVsbExheW91dFt3LmlkXS5iZ2NvbG9yKS5nZXRMdW1pbmFuY2UoKSxmPVwiTTAsXCIrdy5oK1wiTFwiK3cudy8yK1wiLCAwTFwiK3cudytcIixcIit3LmgrXCJaXCIscD0hMSx2PU8uYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiY2xhc3NcIixcInpvb21ib3hcIikuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK3cueDArXCIsIFwiK3cueTArXCIpXCIpLnN0eWxlKHtmaWxsOmg+LjI/XCJyZ2JhKDAsMCwwLDApXCI6XCJyZ2JhKDI1NSwyNTUsMjU1LDApXCIsXCJzdHJva2Utd2lkdGhcIjowfSkuYXR0cihcImRcIixmKSxfPU8uYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiY2xhc3NcIixcInpvb21ib3gtY29ybmVyc1wiKS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrdy54MCtcIiwgXCIrdy55MCtcIilcIikuc3R5bGUoe2ZpbGw6bC5iYWNrZ3JvdW5kLHN0cm9rZTpsLmRlZmF1bHRMaW5lLFwic3Ryb2tlLXdpZHRoXCI6MSxvcGFjaXR5OjB9KS5hdHRyKFwiZFwiLFwiTTAsMFpcIikseCh6KX0oMCxvLHMpKTpcInBhblwiPT09Yz8oSS5tb3ZlRm49VixJLmNsaWNrRm49UCxJLmRvbmVGbj1VLHI9e2E6dy5hYXhpcy5yYW5nZVswXSxiOncuYmF4aXMucmFuZ2VbMV0sYzp3LmNheGlzLnJhbmdlWzFdfSx1PXIseCh6KSk6XCJzZWxlY3RcIiE9PWMmJlwibGFzc29cIiE9PWN8fG0oYSxvLHMsSSxjKX19O2Z1bmN0aW9uIEQodCl7dmFyIGU9e307cmV0dXJuIGVbdy5pZCtcIi5hYXhpcy5taW5cIl09dC5hLGVbdy5pZCtcIi5iYXhpcy5taW5cIl09dC5iLGVbdy5pZCtcIi5jYXhpcy5taW5cIl09dC5jLGV9ZnVuY3Rpb24gUCh0LGUpe3ZhciByPXouX2Z1bGxMYXlvdXQuY2xpY2ttb2RlO0woeiksMj09PXQmJih6LmVtaXQoXCJwbG90bHlfZG91YmxlY2xpY2tcIixudWxsKSxhLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix6LEQoe2E6MCxiOjAsYzowfSkpKSxyLmluZGV4T2YoXCJzZWxlY3RcIik+LTEmJjE9PT10JiZ5KGUseixbdy54YXhpc10sW3cueWF4aXNdLHcuaWQsSSksci5pbmRleE9mKFwiZXZlbnRcIik+LTEmJmcuY2xpY2soeixlLHcuaWQpfWZ1bmN0aW9uIFIodCxlKXtyZXR1cm4gMS1lL3cuaH1mdW5jdGlvbiBGKHQsZSl7cmV0dXJuIDEtKHQrKHcuaC1lKS9NYXRoLnNxcnQoMykpL3cud31mdW5jdGlvbiBCKHQsZSl7cmV0dXJuKHQtKHcuaC1lKS9NYXRoLnNxcnQoMykpL3cud31mdW5jdGlvbiBOKGksYSl7dmFyIG89dCtpLHM9ZSthLGw9TWF0aC5tYXgoMCxNYXRoLm1pbigxLFIoMCxlKSxSKDAscykpKSxjPU1hdGgubWF4KDAsTWF0aC5taW4oMSxGKHQsZSksRihvLHMpKSksZD1NYXRoLm1heCgwLE1hdGgubWluKDEsQih0LGUpLEIobyxzKSkpLGc9KGwvMitkKSp3LncsbT0oMS1sLzItYykqdy53LHk9KGcrbSkvMix4PW0tZyxBPSgxLWwpKncuaCxDPUEteC9rO3g8Yi5NSU5aT09NPyh1PXIsdi5hdHRyKFwiZFwiLGYpLF8uYXR0cihcImRcIixcIk0wLDBaXCIpKToodT17YTpyLmErbCpuLGI6ci5iK2MqbixjOnIuYytkKm59LHYuYXR0cihcImRcIixmK1wiTVwiK2crXCIsXCIrQStcIkhcIittK1wiTFwiK3krXCIsXCIrQytcIkxcIitnK1wiLFwiK0ErXCJaXCIpLF8uYXR0cihcImRcIixcIk1cIit0K1wiLFwiK2UrRStcIk1cIitnK1wiLFwiK0ErVCtcIk1cIittK1wiLFwiK0ErTStcIk1cIit5K1wiLFwiK0MrUykpLHB8fCh2LnRyYW5zaXRpb24oKS5zdHlsZShcImZpbGxcIixoPi4yP1wicmdiYSgwLDAsMCwwLjQpXCI6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuMylcIikuZHVyYXRpb24oMjAwKSxfLnRyYW5zaXRpb24oKS5zdHlsZShcIm9wYWNpdHlcIiwxKS5kdXJhdGlvbigyMDApLHA9ITApfWZ1bmN0aW9uIGooKXtMKHopLHUhPT1yJiYoYS5jYWxsKFwiX2d1aVJlbGF5b3V0XCIseixEKHUpKSxDJiZ6LmRhdGEmJnouX2NvbnRleHQuc2hvd1RpcHMmJihvLm5vdGlmaWVyKHMoeixcIkRvdWJsZS1jbGljayB0byB6b29tIGJhY2sgb3V0XCIpLFwibG9uZ1wiKSxDPSExKSl9ZnVuY3Rpb24gVih0LGUpe3ZhciBuPXQvdy54YXhpcy5fbSxpPWUvdy55YXhpcy5fbSxhPVsodT17YTpyLmEtaSxiOnIuYisobitpKS8yLGM6ci5jLShuLWkpLzJ9KS5hLHUuYix1LmNdLnNvcnQoKSxvPWEuaW5kZXhPZih1LmEpLHM9YS5pbmRleE9mKHUuYiksbD1hLmluZGV4T2YodS5jKTthWzBdPDAmJihhWzFdK2FbMF0vMjwwPyhhWzJdKz1hWzBdK2FbMV0sYVswXT1hWzFdPTApOihhWzJdKz1hWzBdLzIsYVsxXSs9YVswXS8yLGFbMF09MCksdT17YTphW29dLGI6YVtzXSxjOmFbbF19LGU9KHIuYS11LmEpKncueWF4aXMuX20sdD0oci5jLXUuYy1yLmIrdS5iKSp3LnhheGlzLl9tKTt2YXIgaD1cInRyYW5zbGF0ZShcIisody54MCt0KStcIixcIisody55MCtlKStcIilcIjt3LnBsb3RDb250YWluZXIuc2VsZWN0QWxsKFwiLnNjYXR0ZXJsYXllciwubWFwbGF5ZXJcIikuYXR0cihcInRyYW5zZm9ybVwiLGgpO3ZhciBmPVwidHJhbnNsYXRlKFwiKy10K1wiLFwiKy1lK1wiKVwiO3cuY2xpcERlZlJlbGF0aXZlLnNlbGVjdChcInBhdGhcIikuYXR0cihcInRyYW5zZm9ybVwiLGYpLHcuYWF4aXMucmFuZ2U9W3UuYSx3LnN1bS11LmItdS5jXSx3LmJheGlzLnJhbmdlPVt3LnN1bS11LmEtdS5jLHUuYl0sdy5jYXhpcy5yYW5nZT1bdy5zdW0tdS5hLXUuYix1LmNdLHcuZHJhd0F4ZXMoITEpLHcuX2hhc0NsaXBPbkF4aXNGYWxzZSYmdy5wbG90Q29udGFpbmVyLnNlbGVjdChcIi5zY2F0dGVybGF5ZXJcIikuc2VsZWN0QWxsKFwiLnRyYWNlXCIpLmNhbGwoYy5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLHcpfWZ1bmN0aW9uIFUoKXthLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix6LEQodSkpfUEub25tb3VzZW1vdmU9ZnVuY3Rpb24odCl7Zy5ob3Zlcih6LHQsdy5pZCksei5fZnVsbExheW91dC5fbGFzdGhvdmVyPUEsei5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PXcuaWR9LEEub25tb3VzZW91dD1mdW5jdGlvbih0KXt6Ll9kcmFnZ2luZ3x8ZC51bmhvdmVyKHosdCl9LGQuaW5pdChJKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50XCI6NTk2LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzXCI6NjY2LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzXCI6NzU1LFwiLi4vY2FydGVzaWFuL3NlbGVjdFwiOjc2NixcIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydFwiOjc2NyxcIi4uL3Bsb3RzXCI6ODEwLGQzOjE1NSx0aW55Y29sb3IyOjUyMn1dLDgyOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2xpYi9sb2dnZXJzXCIpLGk9dChcIi4vbGliL25vb3BcIiksYT10KFwiLi9saWIvcHVzaF91bmlxdWVcIiksbz10KFwiLi9saWIvaXNfcGxhaW5fb2JqZWN0XCIpLHM9dChcIi4vbGliL2V4dGVuZFwiKSxsPXQoXCIuL3Bsb3RzL2F0dHJpYnV0ZXNcIiksYz10KFwiLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlc1wiKSx1PXMuZXh0ZW5kRmxhdCxoPXMuZXh0ZW5kRGVlcEFsbDtmdW5jdGlvbiBmKHQpe3ZhciBlPXQubmFtZSxpPXQuY2F0ZWdvcmllcyxhPXQubWV0YTtpZihyLm1vZHVsZXNbZV0pbi5sb2coXCJUeXBlIFwiK2UrXCIgYWxyZWFkeSByZWdpc3RlcmVkXCIpO2Vsc2V7ci5zdWJwbG90c1JlZ2lzdHJ5W3QuYmFzZVBsb3RNb2R1bGUubmFtZV18fGZ1bmN0aW9uKHQpe3ZhciBlPXQubmFtZTtpZihyLnN1YnBsb3RzUmVnaXN0cnlbZV0pcmV0dXJuIHZvaWQgbi5sb2coXCJQbG90IHR5cGUgXCIrZStcIiBhbHJlYWR5IHJlZ2lzdGVyZWQuXCIpO2Zvcih2YXIgaSBpbiB2KHQpLHIuc3VicGxvdHNSZWdpc3RyeVtlXT10LHIuY29tcG9uZW50c1JlZ2lzdHJ5KXgoaSx0Lm5hbWUpfSh0LmJhc2VQbG90TW9kdWxlKTtmb3IodmFyIG89e30scz0wO3M8aS5sZW5ndGg7cysrKW9baVtzXV09ITAsci5hbGxDYXRlZ29yaWVzW2lbc11dPSEwO2Zvcih2YXIgbCBpbiByLm1vZHVsZXNbZV09e19tb2R1bGU6dCxjYXRlZ29yaWVzOm99LGEmJk9iamVjdC5rZXlzKGEpLmxlbmd0aCYmKHIubW9kdWxlc1tlXS5tZXRhPWEpLHIuYWxsVHlwZXMucHVzaChlKSxyLmNvbXBvbmVudHNSZWdpc3RyeSltKGwsZSk7dC5sYXlvdXRBdHRyaWJ1dGVzJiZ1KHIudHJhY2VMYXlvdXRBdHRyaWJ1dGVzLHQubGF5b3V0QXR0cmlidXRlcyl9fWZ1bmN0aW9uIHAodCl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQubmFtZSl0aHJvdyBuZXcgRXJyb3IoXCJDb21wb25lbnQgbW9kdWxlICpuYW1lKiBtdXN0IGJlIGEgc3RyaW5nLlwiKTt2YXIgZT10Lm5hbWU7Zm9yKHZhciBuIGluIHIuY29tcG9uZW50c1JlZ2lzdHJ5W2VdPXQsdC5sYXlvdXRBdHRyaWJ1dGVzJiYodC5sYXlvdXRBdHRyaWJ1dGVzLl9pc0xpbmtlZFRvQXJyYXkmJmEoci5sYXlvdXRBcnJheUNvbnRhaW5lcnMsZSksdih0KSksci5tb2R1bGVzKW0oZSxuKTtmb3IodmFyIGkgaW4gci5zdWJwbG90c1JlZ2lzdHJ5KXgoZSxpKTtmb3IodmFyIG8gaW4gci50cmFuc2Zvcm1zUmVnaXN0cnkpeShlLG8pO3Quc2NoZW1hJiZ0LnNjaGVtYS5sYXlvdXQmJmgoYyx0LnNjaGVtYS5sYXlvdXQpfWZ1bmN0aW9uIGQodCl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQubmFtZSl0aHJvdyBuZXcgRXJyb3IoXCJUcmFuc2Zvcm0gbW9kdWxlICpuYW1lKiBtdXN0IGJlIGEgc3RyaW5nLlwiKTt2YXIgZT1cIlRyYW5zZm9ybSBtb2R1bGUgXCIrdC5uYW1lLGk9XCJmdW5jdGlvblwiPT10eXBlb2YgdC50cmFuc2Zvcm0sYT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmNhbGNUcmFuc2Zvcm07aWYoIWkmJiFhKXRocm93IG5ldyBFcnJvcihlK1wiIGlzIG1pc3NpbmcgYSAqdHJhbnNmb3JtKiBvciAqY2FsY1RyYW5zZm9ybSogbWV0aG9kLlwiKTtmb3IodmFyIHMgaW4gaSYmYSYmbi5sb2coW2UrXCIgaGFzIGJvdGggYSAqdHJhbnNmb3JtKiBhbmQgKmNhbGNUcmFuc2Zvcm0qIG1ldGhvZHMuXCIsXCJQbGVhc2Ugbm90ZSB0aGF0IGFsbCAqdHJhbnNmb3JtKiBtZXRob2RzIGFyZSBleGVjdXRlZFwiLFwiYmVmb3JlIGFsbCAqY2FsY1RyYW5zZm9ybSogbWV0aG9kcy5cIl0uam9pbihcIiBcIikpLG8odC5hdHRyaWJ1dGVzKXx8bi5sb2coZStcIiByZWdpc3RlcmVkIHdpdGhvdXQgYW4gKmF0dHJpYnV0ZXMqIG9iamVjdC5cIiksXCJmdW5jdGlvblwiIT10eXBlb2YgdC5zdXBwbHlEZWZhdWx0cyYmbi5sb2coZStcIiByZWdpc3RlcmVkIHdpdGhvdXQgYSAqc3VwcGx5RGVmYXVsdHMqIG1ldGhvZC5cIiksci50cmFuc2Zvcm1zUmVnaXN0cnlbdC5uYW1lXT10LHIuY29tcG9uZW50c1JlZ2lzdHJ5KXkocyx0Lm5hbWUpfWZ1bmN0aW9uIGcodCl7dmFyIGU9dC5uYW1lLG49ZS5zcGxpdChcIi1cIilbMF0saT10LmRpY3Rpb25hcnksYT10LmZvcm1hdCxvPWkmJk9iamVjdC5rZXlzKGkpLmxlbmd0aCxzPWEmJk9iamVjdC5rZXlzKGEpLmxlbmd0aCxsPXIubG9jYWxlUmVnaXN0cnksYz1sW2VdO2lmKGN8fChsW2VdPWM9e30pLG4hPT1lKXt2YXIgdT1sW25dO3V8fChsW25dPXU9e30pLG8mJnUuZGljdGlvbmFyeT09PWMuZGljdGlvbmFyeSYmKHUuZGljdGlvbmFyeT1pKSxzJiZ1LmZvcm1hdD09PWMuZm9ybWF0JiYodS5mb3JtYXQ9YSl9byYmKGMuZGljdGlvbmFyeT1pKSxzJiYoYy5mb3JtYXQ9YSl9ZnVuY3Rpb24gdih0KXtpZih0LmxheW91dEF0dHJpYnV0ZXMpe3ZhciBlPXQubGF5b3V0QXR0cmlidXRlcy5fYXJyYXlBdHRyUmVnZXhwcztpZihlKWZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWEoci5sYXlvdXRBcnJheVJlZ2V4ZXMsZVtuXSl9fWZ1bmN0aW9uIG0odCxlKXt2YXIgbj1yLmNvbXBvbmVudHNSZWdpc3RyeVt0XS5zY2hlbWE7aWYobiYmbi50cmFjZXMpe3ZhciBpPW4udHJhY2VzW2VdO2kmJmgoci5tb2R1bGVzW2VdLl9tb2R1bGUuYXR0cmlidXRlcyxpKX19ZnVuY3Rpb24geSh0LGUpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W3RdLnNjaGVtYTtpZihuJiZuLnRyYW5zZm9ybXMpe3ZhciBpPW4udHJhbnNmb3Jtc1tlXTtpJiZoKHIudHJhbnNmb3Jtc1JlZ2lzdHJ5W2VdLmF0dHJpYnV0ZXMsaSl9fWZ1bmN0aW9uIHgodCxlKXt2YXIgbj1yLmNvbXBvbmVudHNSZWdpc3RyeVt0XS5zY2hlbWE7aWYobiYmbi5zdWJwbG90cyl7dmFyIGk9ci5zdWJwbG90c1JlZ2lzdHJ5W2VdLGE9aS5sYXlvdXRBdHRyaWJ1dGVzLG89XCJzdWJwbG90XCI9PT1pLmF0dHI/aS5uYW1lOmkuYXR0cjtBcnJheS5pc0FycmF5KG8pJiYobz1vWzBdKTt2YXIgcz1uLnN1YnBsb3RzW29dO2EmJnMmJmgoYSxzKX19ZnVuY3Rpb24gYih0KXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgdCYmKHQ9dC50eXBlKSx0fXIubW9kdWxlcz17fSxyLmFsbENhdGVnb3JpZXM9e30sci5hbGxUeXBlcz1bXSxyLnN1YnBsb3RzUmVnaXN0cnk9e30sci50cmFuc2Zvcm1zUmVnaXN0cnk9e30sci5jb21wb25lbnRzUmVnaXN0cnk9e30sci5sYXlvdXRBcnJheUNvbnRhaW5lcnM9W10sci5sYXlvdXRBcnJheVJlZ2V4ZXM9W10sci50cmFjZUxheW91dEF0dHJpYnV0ZXM9e30sci5sb2NhbGVSZWdpc3RyeT17fSxyLmFwaU1ldGhvZFJlZ2lzdHJ5PXt9LHIuY29sbGVjdGFibGVTdWJwbG90VHlwZXM9bnVsbCxyLnJlZ2lzdGVyPWZ1bmN0aW9uKHQpe2lmKHIuY29sbGVjdGFibGVTdWJwbG90VHlwZXM9bnVsbCwhdCl0aHJvdyBuZXcgRXJyb3IoXCJObyBhcmd1bWVudCBwYXNzZWQgdG8gUGxvdGx5LnJlZ2lzdGVyLlwiKTt0JiYhQXJyYXkuaXNBcnJheSh0KSYmKHQ9W3RdKTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG49dFtlXTtpZighbil0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIG1vZHVsZSB3YXMgYXR0ZW1wdGVkIHRvIGJlIHJlZ2lzdGVyZWQhXCIpO3N3aXRjaChuLm1vZHVsZVR5cGUpe2Nhc2VcInRyYWNlXCI6ZihuKTticmVhaztjYXNlXCJ0cmFuc2Zvcm1cIjpkKG4pO2JyZWFrO2Nhc2VcImNvbXBvbmVudFwiOnAobik7YnJlYWs7Y2FzZVwibG9jYWxlXCI6ZyhuKTticmVhaztjYXNlXCJhcGlNZXRob2RcIjp2YXIgaT1uLm5hbWU7ci5hcGlNZXRob2RSZWdpc3RyeVtpXT1uLmZuO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBtb2R1bGUgd2FzIGF0dGVtcHRlZCB0byBiZSByZWdpc3RlcmVkIVwiKX19fSxyLmdldE1vZHVsZT1mdW5jdGlvbih0KXt2YXIgZT1yLm1vZHVsZXNbYih0KV07cmV0dXJuISFlJiZlLl9tb2R1bGV9LHIudHJhY2VJcz1mdW5jdGlvbih0LGUpe2lmKFwidmFyaW91c1wiPT09KHQ9Yih0KSkpcmV0dXJuITE7dmFyIGk9ci5tb2R1bGVzW3RdO3JldHVybiBpfHwodCYmXCJhcmVhXCIhPT10JiZuLmxvZyhcIlVucmVjb2duaXplZCB0cmFjZSB0eXBlIFwiK3QrXCIuXCIpLGk9ci5tb2R1bGVzW2wudHlwZS5kZmx0XSksISFpLmNhdGVnb3JpZXNbZV19LHIuZ2V0VHJhbnNmb3JtSW5kaWNlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPXQudHJhbnNmb3Jtc3x8W10saT0wO2k8bi5sZW5ndGg7aSsrKW5baV0udHlwZT09PWUmJnIucHVzaChpKTtyZXR1cm4gcn0sci5oYXNUcmFuc2Zvcm09ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC50cmFuc2Zvcm1zfHxbXSxuPTA7bjxyLmxlbmd0aDtuKyspaWYocltuXS50eXBlPT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0sci5nZXRDb21wb25lbnRNZXRob2Q9ZnVuY3Rpb24odCxlKXt2YXIgbj1yLmNvbXBvbmVudHNSZWdpc3RyeVt0XTtyZXR1cm4gbiYmbltlXXx8aX0sci5jYWxsPWZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzWzBdLGU9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIHIuYXBpTWV0aG9kUmVnaXN0cnlbdF0uYXBwbHkobnVsbCxlKX19LHtcIi4vbGliL2V4dGVuZFwiOjY5MSxcIi4vbGliL2lzX3BsYWluX29iamVjdFwiOjcwMixcIi4vbGliL2xvZ2dlcnNcIjo3MDUsXCIuL2xpYi9ub29wXCI6NzEwLFwiLi9saWIvcHVzaF91bmlxdWVcIjo3MTUsXCIuL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDYsXCIuL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzXCI6ODAxfV0sODMwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2xpYlwiKSxpPW4uZXh0ZW5kRmxhdCxhPW4uZXh0ZW5kRGVlcDtmdW5jdGlvbiBvKHQpe3ZhciBlO3N3aXRjaCh0KXtjYXNlXCJ0aGVtZXNfX3RodW1iXCI6ZT17YXV0b3NpemU6ITAsd2lkdGg6MTUwLGhlaWdodDoxNTAsdGl0bGU6e3RleHQ6XCJcIn0sc2hvd2xlZ2VuZDohMSxtYXJnaW46e2w6NSxyOjUsdDo1LGI6NSxwYWQ6MH0sYW5ub3RhdGlvbnM6W119O2JyZWFrO2Nhc2VcInRodW1ibmFpbFwiOmU9e3RpdGxlOnt0ZXh0OlwiXCJ9LGhpZGVzb3VyY2VzOiEwLHNob3dsZWdlbmQ6ITEsYm9yZGVyd2lkdGg6MCxib3JkZXJjb2xvcjpcIlwiLG1hcmdpbjp7bDoxLHI6MSx0OjEsYjoxLHBhZDowfSxhbm5vdGF0aW9uczpbXX07YnJlYWs7ZGVmYXVsdDplPXt9fXJldHVybiBlfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByO3QuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5pc1BvbGFyJiYodD10LmZyYW1ld29yay5nZXRDb25maWcoKSk7dmFyIG4scz10LmRhdGEsbD10LmxheW91dCxjPWEoW10scyksdT1hKHt9LGwsbyhlLnRpbGVDbGFzcykpLGg9dC5fY29udGV4dHx8e307aWYoZS53aWR0aCYmKHUud2lkdGg9ZS53aWR0aCksZS5oZWlnaHQmJih1LmhlaWdodD1lLmhlaWdodCksXCJ0aHVtYm5haWxcIj09PWUudGlsZUNsYXNzfHxcInRoZW1lc19fdGh1bWJcIj09PWUudGlsZUNsYXNzKXt1LmFubm90YXRpb25zPVtdO3ZhciBmPU9iamVjdC5rZXlzKHUpO2ZvcihyPTA7cjxmLmxlbmd0aDtyKyspbj1mW3JdLFtcInhheGlzXCIsXCJ5YXhpc1wiLFwiemF4aXNcIl0uaW5kZXhPZihuLnNsaWNlKDAsNSkpPi0xJiYodVtmW3JdXS50aXRsZT17dGV4dDpcIlwifSk7Zm9yKHI9MDtyPGMubGVuZ3RoO3IrKyl7dmFyIHA9Y1tyXTtwLnNob3dzY2FsZT0hMSxwLm1hcmtlciYmKHAubWFya2VyLnNob3dzY2FsZT0hMSksXCJwaWVcIj09PXAudHlwZSYmKHAudGV4dHBvc2l0aW9uPVwibm9uZVwiKX19aWYoQXJyYXkuaXNBcnJheShlLmFubm90YXRpb25zKSlmb3Iocj0wO3I8ZS5hbm5vdGF0aW9ucy5sZW5ndGg7cisrKXUuYW5ub3RhdGlvbnMucHVzaChlLmFubm90YXRpb25zW3JdKTt2YXIgZD1PYmplY3Qua2V5cyh1KS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQubWF0Y2goL15zY2VuZVxcZCokLyl9KTtpZihkLmxlbmd0aCl7dmFyIGc9e307Zm9yKFwidGh1bWJuYWlsXCI9PT1lLnRpbGVDbGFzcyYmKGc9e3RpdGxlOnt0ZXh0OlwiXCJ9LHNob3dheGVzbGFiZWxzOiExLHNob3d0aWNrbGFiZWxzOiExLGxpbmV0aWNrZW5hYmxlOiExfSkscj0wO3I8ZC5sZW5ndGg7cisrKXt2YXIgdj11W2Rbcl1dO3YueGF4aXN8fCh2LnhheGlzPXt9KSx2LnlheGlzfHwodi55YXhpcz17fSksdi56YXhpc3x8KHYuemF4aXM9e30pLGkodi54YXhpcyxnKSxpKHYueWF4aXMsZyksaSh2LnpheGlzLGcpLHYuX3NjZW5lPW51bGx9fXZhciBtPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7ZS50aWxlQ2xhc3MmJihtLmNsYXNzTmFtZT1lLnRpbGVDbGFzcyk7dmFyIHk9e2dkOm0sdGQ6bSxsYXlvdXQ6dSxkYXRhOmMsY29uZmlnOntzdGF0aWNQbG90OnZvaWQgMD09PWUuc3RhdGljUGxvdHx8ZS5zdGF0aWNQbG90LHBsb3RHbFBpeGVsUmF0aW86dm9pZCAwPT09ZS5wbG90R2xQaXhlbFJhdGlvPzI6ZS5wbG90R2xQaXhlbFJhdGlvLGRpc3BsYXlsb2dvOmUuZGlzcGxheWxvZ298fCExLHNob3dMaW5rOmUuc2hvd0xpbmt8fCExLHNob3dUaXBzOmUuc2hvd1RpcHN8fCExLG1hcGJveEFjY2Vzc1Rva2VuOmgubWFwYm94QWNjZXNzVG9rZW59fTtyZXR1cm5cInRyYW5zcGFyZW50XCIhPT1lLnNldEJhY2tncm91bmQmJih5LmNvbmZpZy5zZXRCYWNrZ3JvdW5kPWUuc2V0QmFja2dyb3VuZHx8XCJvcGFxdWVcIikseS5nZC5kZWZhdWx0TGF5b3V0PW8oZS50aWxlQ2xhc3MpLHl9fSx7XCIuLi9saWJcIjo3MDF9XSw4MzE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vcGxvdF9hcGkvdG9faW1hZ2VcIiksaT10KFwiLi4vbGliXCIpLGE9dChcIi4vZmlsZXNhdmVyXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBpLmlzUGxhaW5PYmplY3QodCl8fChyPWkuZ2V0R3JhcGhEaXYodCkpLChlPWV8fHt9KS5mb3JtYXQ9ZS5mb3JtYXR8fFwicG5nXCIsbmV3IFByb21pc2UoZnVuY3Rpb24obyxzKXtyJiZyLl9zbmFwc2hvdEluUHJvZ3Jlc3MmJnMobmV3IEVycm9yKFwiU25hcHNob3R0aW5nIGFscmVhZHkgaW4gcHJvZ3Jlc3MuXCIpKSxpLmlzSUUoKSYmXCJzdmdcIiE9PWUuZm9ybWF0JiZzKG5ldyBFcnJvcihcIlNvcnJ5IElFIGRvZXMgbm90IHN1cHBvcnQgZG93bmxvYWRpbmcgZnJvbSBjYW52YXMuIFRyeSB7Zm9ybWF0OidzdmcnfSBpbnN0ZWFkLlwiKSksciYmKHIuX3NuYXBzaG90SW5Qcm9ncmVzcz0hMCk7dmFyIGw9bih0LGUpLGM9ZS5maWxlbmFtZXx8dC5mbnx8XCJuZXdwbG90XCI7Yys9XCIuXCIrZS5mb3JtYXQsbC50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiByJiYoci5fc25hcHNob3RJblByb2dyZXNzPSExKSxhKHQsYyl9KS50aGVuKGZ1bmN0aW9uKHQpe28odCl9KS5jYXRjaChmdW5jdGlvbih0KXtyJiYoci5fc25hcHNob3RJblByb2dyZXNzPSExKSxzKHQpfSl9KX19LHtcIi4uL2xpYlwiOjcwMSxcIi4uL3Bsb3RfYXBpL3RvX2ltYWdlXCI6NzQyLFwiLi9maWxlc2F2ZXJcIjo4MzJ9XSw4MzI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKSxuPVwiZG93bmxvYWRcImluIHIsaT0vVmVyc2lvblxcL1tcXGRcXC5dKy4qU2FmYXJpLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihhLG8pe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBuYXZpZ2F0b3ImJi9NU0lFIFsxLTldXFwuLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiZvKG5ldyBFcnJvcihcIklFIDwgMTAgdW5zdXBwb3J0ZWRcIikpLGkmJihkb2N1bWVudC5sb2NhdGlvbi5ocmVmPVwiZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIit0LnNsaWNlKHQuc2VhcmNoKC9bLDtdLykpLGEoZSkpLGV8fChlPVwiZG93bmxvYWRcIiksbiYmKHIuaHJlZj10LHIuZG93bmxvYWQ9ZSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHIpLHIuY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHIpLGEoZSkpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvci5tc1NhdmVCbG9iKXt2YXIgcz10LnNwbGl0KC9eZGF0YTppbWFnZVxcL3N2Z1xcK3htbCwvKVsxXSxsPWRlY29kZVVSSUNvbXBvbmVudChzKTtuYXZpZ2F0b3IubXNTYXZlQmxvYihuZXcgQmxvYihbbF0pLGUpLGEoZSl9byhuZXcgRXJyb3IoXCJkb3dubG9hZCBlcnJvclwiKSl9KX19LHt9XSw4MzM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLmdldERlbGF5PWZ1bmN0aW9uKHQpe3JldHVybiB0Ll9oYXMmJih0Ll9oYXMoXCJnbDNkXCIpfHx0Ll9oYXMoXCJnbDJkXCIpfHx0Ll9oYXMoXCJtYXBib3hcIikpPzUwMDowfSxyLmdldFJlZHJhd0Z1bmM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dHx8e307aWYoISghKGUuX2hhcyYmZS5faGFzKFwicG9sYXJcIikpJiZ0LmRhdGEmJnQuZGF0YVswXSYmdC5kYXRhWzBdLnIpKXJldHVybiBmdW5jdGlvbigpeyh0LmNhbGNkYXRhfHxbXSkuZm9yRWFjaChmdW5jdGlvbih0KXt0WzBdJiZ0WzBdLnQmJnRbMF0udC5jYiYmdFswXS50LmNiKCl9KX19fSx7fV0sODM0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vaGVscGVyc1wiKSxpPXtnZXREZWxheTpuLmdldERlbGF5LGdldFJlZHJhd0Z1bmM6bi5nZXRSZWRyYXdGdW5jLGNsb25lOnQoXCIuL2Nsb25lcGxvdFwiKSx0b1NWRzp0KFwiLi90b3N2Z1wiKSxzdmdUb0ltZzp0KFwiLi9zdmd0b2ltZ1wiKSx0b0ltYWdlOnQoXCIuL3RvaW1hZ2VcIiksZG93bmxvYWRJbWFnZTp0KFwiLi9kb3dubG9hZFwiKX07ZS5leHBvcnRzPWl9LHtcIi4vY2xvbmVwbG90XCI6ODMwLFwiLi9kb3dubG9hZFwiOjgzMSxcIi4vaGVscGVyc1wiOjgzMyxcIi4vc3ZndG9pbWdcIjo4MzUsXCIuL3RvaW1hZ2VcIjo4MzYsXCIuL3Rvc3ZnXCI6ODM3fV0sODM1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2xpYlwiKSxpPXQoXCJldmVudHNcIikuRXZlbnRFbWl0dGVyO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmVtaXR0ZXJ8fG5ldyBpLHI9bmV3IFByb21pc2UoZnVuY3Rpb24oaSxhKXt2YXIgbz13aW5kb3cuSW1hZ2Uscz10LnN2ZyxsPXQuZm9ybWF0fHxcInBuZ1wiO2lmKG4uaXNJRSgpJiZcInN2Z1wiIT09bCl7dmFyIGM9bmV3IEVycm9yKFwiU29ycnkgSUUgZG9lcyBub3Qgc3VwcG9ydCBkb3dubG9hZGluZyBmcm9tIGNhbnZhcy4gVHJ5IHtmb3JtYXQ6J3N2Zyd9IGluc3RlYWQuXCIpO3JldHVybiBhKGMpLHQucHJvbWlzZT9yOmUuZW1pdChcImVycm9yXCIsYyl9dmFyIHU9dC5jYW52YXMsaD10LnNjYWxlfHwxLGY9dC53aWR0aHx8MzAwLHA9dC5oZWlnaHR8fDE1MCxkPWgqZixnPWgqcCx2PXUuZ2V0Q29udGV4dChcIjJkXCIpLG09bmV3IG8seT1cImRhdGE6aW1hZ2Uvc3ZnK3htbCxcIitlbmNvZGVVUklDb21wb25lbnQocyk7dS53aWR0aD1kLHUuaGVpZ2h0PWcsbS5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgcjtzd2l0Y2goXCJzdmdcIiE9PWwmJnYuZHJhd0ltYWdlKG0sMCwwLGQsZyksbCl7Y2FzZVwianBlZ1wiOnI9dS50b0RhdGFVUkwoXCJpbWFnZS9qcGVnXCIpO2JyZWFrO2Nhc2VcInBuZ1wiOnI9dS50b0RhdGFVUkwoXCJpbWFnZS9wbmdcIik7YnJlYWs7Y2FzZVwid2VicFwiOnI9dS50b0RhdGFVUkwoXCJpbWFnZS93ZWJwXCIpO2JyZWFrO2Nhc2VcInN2Z1wiOnI9eTticmVhaztkZWZhdWx0OnZhciBuPVwiSW1hZ2UgZm9ybWF0IGlzIG5vdCBqcGVnLCBwbmcsIHN2ZyBvciB3ZWJwLlwiO2lmKGEobmV3IEVycm9yKG4pKSwhdC5wcm9taXNlKXJldHVybiBlLmVtaXQoXCJlcnJvclwiLG4pfWkociksdC5wcm9taXNlfHxlLmVtaXQoXCJzdWNjZXNzXCIscil9LG0ub25lcnJvcj1mdW5jdGlvbihyKXtpZihhKHIpLCF0LnByb21pc2UpcmV0dXJuIGUuZW1pdChcImVycm9yXCIscil9LG0uc3JjPXl9KTtyZXR1cm4gdC5wcm9taXNlP3I6ZX19LHtcIi4uL2xpYlwiOjcwMSxldmVudHM6OTV9XSw4MzY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZXZlbnRzXCIpLkV2ZW50RW1pdHRlcixpPXQoXCIuLi9yZWdpc3RyeVwiKSxhPXQoXCIuLi9saWJcIiksbz10KFwiLi9oZWxwZXJzXCIpLHM9dChcIi4vY2xvbmVwbG90XCIpLGw9dChcIi4vdG9zdmdcIiksYz10KFwiLi9zdmd0b2ltZ1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgbix1PXModCx7Zm9ybWF0OlwicG5nXCJ9KSxoPXUuZ2Q7aC5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsaC5zdHlsZS5sZWZ0PVwiLTUwMDBweFwiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaCk7dmFyIGY9by5nZXRSZWRyYXdGdW5jKGgpO3JldHVybiBpLmNhbGwoXCJwbG90XCIsaCx1LmRhdGEsdS5sYXlvdXQsdS5jb25maWcpLnRoZW4oZikudGhlbihmdW5jdGlvbigpe3ZhciB0PW8uZ2V0RGVsYXkoaC5fZnVsbExheW91dCk7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciB0PWwoaCksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO24uaWQ9YS5yYW5kc3RyKCksKHI9Yyh7Zm9ybWF0OmUuZm9ybWF0LHdpZHRoOmguX2Z1bGxMYXlvdXQud2lkdGgsaGVpZ2h0OmguX2Z1bGxMYXlvdXQuaGVpZ2h0LGNhbnZhczpuLGVtaXR0ZXI6cixzdmc6dH0pKS5jbGVhbj1mdW5jdGlvbigpe2gmJmRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaCl9fSx0KX0pLmNhdGNoKGZ1bmN0aW9uKHQpe3IuZW1pdChcImVycm9yXCIsdCl9KSxyfX0se1wiLi4vbGliXCI6NzAxLFwiLi4vcmVnaXN0cnlcIjo4MjksXCIuL2Nsb25lcGxvdFwiOjgzMCxcIi4vaGVscGVyc1wiOjgzMyxcIi4vc3ZndG9pbWdcIjo4MzUsXCIuL3Rvc3ZnXCI6ODM3LGV2ZW50czo5NX1dLDgzNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi9saWJcIiksYT10KFwiLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLG89dChcIi4uL2NvbXBvbmVudHMvY29sb3JcIikscz10KFwiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIiksbD0vXCIvZyxjPW5ldyBSZWdFeHAoJyhcIlRPQkVTVFJJUFBFRCl8KFRPQkVTVFJJUFBFRFwiKScsXCJnXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIHUsaD10Ll9mdWxsTGF5b3V0LGY9aC5fcGFwZXIscD1oLl90b3BwYXBlcixkPWgud2lkdGgsZz1oLmhlaWdodDtmLmluc2VydChcInJlY3RcIixcIjpmaXJzdC1jaGlsZFwiKS5jYWxsKGEuc2V0UmVjdCwwLDAsZCxnKS5jYWxsKG8uZmlsbCxoLnBhcGVyX2JnY29sb3IpO3ZhciB2PWguX2Jhc2VQbG90TW9kdWxlc3x8W107Zm9yKHU9MDt1PHYubGVuZ3RoO3UrKyl7dmFyIG09dlt1XTttLnRvU1ZHJiZtLnRvU1ZHKHQpfWlmKHApe3ZhciB5PXAubm9kZSgpLmNoaWxkTm9kZXMseD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh5KTtmb3IodT0wO3U8eC5sZW5ndGg7dSsrKXt2YXIgYj14W3VdO2IuY2hpbGROb2Rlcy5sZW5ndGgmJmYubm9kZSgpLmFwcGVuZENoaWxkKGIpfX1oLl9kcmFnZ2VycyYmaC5fZHJhZ2dlcnMucmVtb3ZlKCksZi5ub2RlKCkuc3R5bGUuYmFja2dyb3VuZD1cIlwiLGYuc2VsZWN0QWxsKFwidGV4dFwiKS5hdHRyKHtcImRhdGEtdW5mb3JtYXR0ZWRcIjpudWxsLFwiZGF0YS1tYXRoXCI6bnVsbH0pLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTtpZihcImhpZGRlblwiIT09dGhpcy5zdHlsZS52aXNpYmlsaXR5JiZcIm5vbmVcIiE9PXRoaXMuc3R5bGUuZGlzcGxheSl7dC5zdHlsZSh7dmlzaWJpbGl0eTpudWxsLGRpc3BsYXk6bnVsbH0pO3ZhciBlPXRoaXMuc3R5bGUuZm9udEZhbWlseTtlJiYtMSE9PWUuaW5kZXhPZignXCInKSYmdC5zdHlsZShcImZvbnQtZmFtaWx5XCIsZS5yZXBsYWNlKGwsXCJUT0JFU1RSSVBQRURcIikpfWVsc2UgdC5yZW1vdmUoKX0pLGYuc2VsZWN0QWxsKFwiLnBvaW50LCAuc2NhdHRlcnB0cywgLmxlZ2VuZGZpbGw+cGF0aCwgLmxlZ2VuZGxpbmVzPnBhdGgsIC5jYmZpbGxcIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9dGhpcy5zdHlsZS5maWxsO2UmJi0xIT09ZS5pbmRleE9mKFwidXJsKFwiKSYmdC5zdHlsZShcImZpbGxcIixlLnJlcGxhY2UobCxcIlRPQkVTVFJJUFBFRFwiKSk7dmFyIHI9dGhpcy5zdHlsZS5zdHJva2U7ciYmLTEhPT1yLmluZGV4T2YoXCJ1cmwoXCIpJiZ0LnN0eWxlKFwic3Ryb2tlXCIsci5yZXBsYWNlKGwsXCJUT0JFU1RSSVBQRURcIikpfSksXCJwZGZcIiE9PWUmJlwiZXBzXCIhPT1lfHxmLnNlbGVjdEFsbChcIiNNYXRoSmF4X1NWR19nbHlwaHMgcGF0aFwiKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsMCksZi5ub2RlKCkuc2V0QXR0cmlidXRlTlMocy54bWxucyxcInhtbG5zXCIscy5zdmcpLGYubm9kZSgpLnNldEF0dHJpYnV0ZU5TKHMueG1sbnMsXCJ4bWxuczp4bGlua1wiLHMueGxpbmspLFwic3ZnXCI9PT1lJiZyJiYoZi5hdHRyKFwid2lkdGhcIixyKmQpLGYuYXR0cihcImhlaWdodFwiLHIqZyksZi5hdHRyKFwidmlld0JveFwiLFwiMCAwIFwiK2QrXCIgXCIrZykpO3ZhciBfPShuZXcgd2luZG93LlhNTFNlcmlhbGl6ZXIpLnNlcmlhbGl6ZVRvU3RyaW5nKGYubm9kZSgpKTtyZXR1cm4gXz1mdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdChcImJvZHlcIikuYXBwZW5kKFwiZGl2XCIpLnN0eWxlKHtkaXNwbGF5Olwibm9uZVwifSkuaHRtbChcIlwiKSxyPXQucmVwbGFjZSgvKCZbXjtdKjspL2dpLGZ1bmN0aW9uKHQpe3JldHVyblwiJmx0O1wiPT09dD9cIiYjNjA7XCI6XCImcnQ7XCI9PT10P1wiJiM2MjtcIjotMSE9PXQuaW5kZXhPZihcIjxcIil8fC0xIT09dC5pbmRleE9mKFwiPlwiKT9cIlwiOmUuaHRtbCh0KS50ZXh0KCl9KTtyZXR1cm4gZS5yZW1vdmUoKSxyfShfKSxfPShfPV8ucmVwbGFjZSgvJig/IVxcdys7fFxcI1swLTldKzt8IFxcI3hbMC05QS1GXSs7KS9nLFwiJmFtcDtcIikpLnJlcGxhY2UoYyxcIidcIiksaS5pc0lFKCkmJihfPShfPShfPV8ucmVwbGFjZSgvXCIvZ2ksXCInXCIpKS5yZXBsYWNlKC8oXFwoJyMpKFteJ10qKSgnXFwpKS9naSwnKFwiIyQyXCIpJykpLnJlcGxhY2UoLyhcXFxcJykvZ2ksJ1wiJykpLF99fSx7XCIuLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIjo2NzksXCIuLi9saWJcIjo3MDEsZDM6MTU1fV0sODM4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKS5tZXJnZUFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXRbcl0uaT1yO24oZS50ZXh0LHQsXCJ0eFwiKSxuKGUuaG92ZXJ0ZXh0LHQsXCJodHhcIik7dmFyIGk9ZS5tYXJrZXI7aWYoaSl7bihpLm9wYWNpdHksdCxcIm1vXCIpLG4oaS5jb2xvcix0LFwibWNcIik7dmFyIGE9aS5saW5lO2EmJihuKGEuY29sb3IsdCxcIm1sY1wiKSxuKGEud2lkdGgsdCxcIm1sd1wiKSl9fX0se1wiLi4vLi4vbGliXCI6NzAxfV0sODM5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCIpLGw9dChcIi4vY29uc3RhbnRzLmpzXCIpLGM9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCx1PXMoe2VkaXRUeXBlOlwiY2FsY1wiLGFycmF5T2s6ITAsY29sb3JFZGl0VHlwZTpcInN0eWxlXCJ9KSxoPWMoe30sbi5tYXJrZXIubGluZS53aWR0aCx7ZGZsdDowfSksZj1jKHt3aWR0aDpoLGVkaXRUeXBlOlwiY2FsY1wifSxhKFwibWFya2VyLmxpbmVcIikpLHA9Yyh7bGluZTpmLGVkaXRUeXBlOlwiY2FsY1wifSxhKFwibWFya2VyXCIpLHtjb2xvcmJhcjpvLG9wYWNpdHk6e3ZhbFR5cGU6XCJudW1iZXJcIixhcnJheU9rOiEwLGRmbHQ6MSxtaW46MCxtYXg6MSxlZGl0VHlwZTpcInN0eWxlXCJ9fSk7ZS5leHBvcnRzPXt4Om4ueCx4MDpuLngwLGR4Om4uZHgseTpuLnkseTA6bi55MCxkeTpuLmR5LHRleHQ6bi50ZXh0LGhvdmVydGV4dDpuLmhvdmVydGV4dCxob3ZlcnRlbXBsYXRlOmkoe30se2tleXM6bC5ldmVudERhdGFLZXlzfSksdGV4dHBvc2l0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJpbnNpZGVcIixcIm91dHNpZGVcIixcImF1dG9cIixcIm5vbmVcIl0sZGZsdDpcIm5vbmVcIixhcnJheU9rOiEwLGVkaXRUeXBlOlwiY2FsY1wifSx0ZXh0Zm9udDpjKHt9LHUse30pLGluc2lkZXRleHRmb250OmMoe30sdSx7fSksb3V0c2lkZXRleHRmb250OmMoe30sdSx7fSksY29uc3RyYWludGV4dDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiaW5zaWRlXCIsXCJvdXRzaWRlXCIsXCJib3RoXCIsXCJub25lXCJdLGRmbHQ6XCJib3RoXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGNsaXBvbmF4aXM6Yyh7fSxuLmNsaXBvbmF4aXMse30pLG9yaWVudGF0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ2XCIsXCJoXCJdLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSxiYXNlOnt2YWxUeXBlOlwiYW55XCIsZGZsdDpudWxsLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LG9mZnNldDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6bnVsbCxhcnJheU9rOiEwLGVkaXRUeXBlOlwiY2FsY1wifSx3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6bnVsbCxtaW46MCxhcnJheU9rOiEwLGVkaXRUeXBlOlwiY2FsY1wifSxtYXJrZXI6cCxvZmZzZXRncm91cDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcImNhbGNcIn0sYWxpZ25tZW50Z3JvdXA6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6bi5zZWxlY3RlZC5tYXJrZXIub3BhY2l0eSxjb2xvcjpuLnNlbGVjdGVkLm1hcmtlci5jb2xvcixlZGl0VHlwZTpcInN0eWxlXCJ9LHRleHRmb250Om4uc2VsZWN0ZWQudGV4dGZvbnQsZWRpdFR5cGU6XCJzdHlsZVwifSx1bnNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6bi51bnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LGNvbG9yOm4udW5zZWxlY3RlZC5tYXJrZXIuY29sb3IsZWRpdFR5cGU6XCJzdHlsZVwifSx0ZXh0Zm9udDpuLnVuc2VsZWN0ZWQudGV4dGZvbnQsZWRpdFR5cGU6XCJzdHlsZVwifSxyOm4ucix0Om4udCxfZGVwcmVjYXRlZDp7YmFyZGlyOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLGVkaXRUeXBlOlwiY2FsY1wiLHZhbHVlczpbXCJ2XCIsXCJoXCJdfX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIjo1NzksXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiOjc3NSxcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiOjEwNTIsXCIuL2NvbnN0YW50cy5qc1wiOjg0MX1dLDg0MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVyc1wiKS5oYXNDb2xvcnNjYWxlLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCIpLG89dChcIi4vYXJyYXlzX3RvX2NhbGNkYXRhXCIpLHM9dChcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbCxjPW4uZ2V0RnJvbUlkKHQsZS54YXhpc3x8XCJ4XCIpLHU9bi5nZXRGcm9tSWQodCxlLnlheGlzfHxcInlcIik7XCJoXCI9PT1lLm9yaWVudGF0aW9uPyhyPWMubWFrZUNhbGNkYXRhKGUsXCJ4XCIpLGw9dS5tYWtlQ2FsY2RhdGEoZSxcInlcIikpOihyPXUubWFrZUNhbGNkYXRhKGUsXCJ5XCIpLGw9Yy5tYWtlQ2FsY2RhdGEoZSxcInhcIikpO2Zvcih2YXIgaD1NYXRoLm1pbihsLmxlbmd0aCxyLmxlbmd0aCksZj1uZXcgQXJyYXkoaCkscD0wO3A8aDtwKyspZltwXT17cDpsW3BdLHM6cltwXX0sZS5pZHMmJihmW3BdLmlkPVN0cmluZyhlLmlkc1twXSkpO3JldHVybiBpKGUsXCJtYXJrZXJcIikmJmEodCxlLHt2YWxzOmUubWFya2VyLmNvbG9yLGNvbnRhaW5lclN0cjpcIm1hcmtlclwiLGNMZXR0ZXI6XCJjXCJ9KSxpKGUsXCJtYXJrZXIubGluZVwiKSYmYSh0LGUse3ZhbHM6ZS5tYXJrZXIubGluZS5jb2xvcixjb250YWluZXJTdHI6XCJtYXJrZXIubGluZVwiLGNMZXR0ZXI6XCJjXCJ9KSxvKGYsZSkscyhmLGUpLGZ9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsY1wiOjU4NixcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzXCI6NTg5LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uXCI6MTA1NCxcIi4vYXJyYXlzX3RvX2NhbGNkYXRhXCI6ODM4fV0sODQxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtldmVudERhdGFLZXlzOltdfX0se31dLDg0MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuLi8uLi9saWJcIikuaXNBcnJheU9yVHlwZWRBcnJheSxhPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTSxvPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxzPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxsPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIikuZ2V0QXhpc0dyb3VwLGM9dChcIi4vc2lldmUuanNcIik7ZnVuY3Rpb24gdSh0LGUscixvKXtpZihvLmxlbmd0aCl7dmFyIHUsYixfLHcsaz10Ll9mdWxsTGF5b3V0LmJhcm1vZGU7c3dpdGNoKGZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvLHM7Zm9yKG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIGwsYz1hW29dLHU9Y1swXS50cmFjZSxoPXUuYmFzZSxmPVwiaFwiPT09dS5vcmllbnRhdGlvbj91LnhjYWxlbmRhcjp1LnljYWxlbmRhcixwPVwiY2F0ZWdvcnlcIj09PXIudHlwZXx8XCJtdWx0aWNhdGVnb3J5XCI9PT1yLnR5cGU/ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH06ci5kMmM7aWYoaShoKSl7Zm9yKHM9MDtzPE1hdGgubWluKGgubGVuZ3RoLGMubGVuZ3RoKTtzKyspbD1wKGhbc10sMCxmKSxuKGwpPyhjW3NdLmI9K2wsY1tzXS5oYXNCPTEpOmNbc10uYj0wO2Zvcig7czxjLmxlbmd0aDtzKyspY1tzXS5iPTB9ZWxzZXtsPXAoaCwwLGYpO3ZhciBkPW4obCk7Zm9yKGw9ZD9sOjAscz0wO3M8Yy5sZW5ndGg7cysrKWNbc10uYj1sLGQmJihjW3NdLmhhc0I9MSl9fX0oMCwwLHIsbyksayl7Y2FzZVwib3ZlcmxheVwiOmgodCxlLHIsbyk7YnJlYWs7Y2FzZVwiZ3JvdXBcIjpmb3IodT1bXSxiPVtdLF89MDtfPG8ubGVuZ3RoO18rKyl2b2lkIDA9PT0odz1vW19dKVswXS50cmFjZS5vZmZzZXQ/Yi5wdXNoKHcpOnUucHVzaCh3KTtiLmxlbmd0aCYmZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5fZnVsbExheW91dC5iYXJub3JtLG89bmV3IGMobix7c2VwTmVnVmFsOiExLG92ZXJsYXBOb01lcmdlOiFpfSk7KGZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC5fZnVsbExheW91dCxpPW4uYmFyZ2FwLGE9bi5iYXJncm91cGdhcHx8MCxvPXIucG9zaXRpb25zLHM9ci5kaXN0aW5jdFBvc2l0aW9ucyxjPXIubWluRGlmZix1PXIudHJhY2VzLGg9dS5sZW5ndGgsZj1vLmxlbmd0aCE9PXMubGVuZ3RoLHY9YyooMS1pKSxtPWwobixlLl9pZCkrdVswXVswXS50cmFjZS5vcmllbnRhdGlvbix5PW4uX2FsaWdubWVudE9wdHNbbV18fHt9LHg9MDt4PGg7eCsrKXt2YXIgYixfLHc9dVt4XSxrPXdbMF0udHJhY2UsQT15W2suYWxpZ25tZW50Z3JvdXBdfHx7fSxUPU9iamVjdC5rZXlzKEEub2Zmc2V0R3JvdXBzfHx7fSkubGVuZ3RoLE09KGI9VD92L1Q6Zj92L2g6dikqKDEtYSk7Xz1UPygoMiprLl9vZmZzZXRJbmRleCsxLVQpKmItTSkvMjpmPygoMip4KzEtaCkqYi1NKS8yOi1NLzI7dmFyIFM9d1swXS50O1MuYmFyd2lkdGg9TSxTLnBvZmZzZXQ9XyxTLmJhcmdyb3Vwd2lkdGg9dixTLmJhcmRlbHRhPWN9ci5iaW5XaWR0aD11WzBdWzBdLnQuYmFyd2lkdGgvMTAwLHAociksZCh0LGUsciksZyh0LGUscixmKX0pKHQsZSxvKSxmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXIudHJhY2VzLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIG89bltpXSxzPW9bMF0udHJhY2U7aWYodm9pZCAwPT09cy5iYXNlKWZvcih2YXIgbD1uZXcgYyhbb10se3NlcE5lZ1ZhbDohMCxvdmVybGFwTm9NZXJnZTohMH0pLHU9MDt1PG8ubGVuZ3RoO3UrKyl7dmFyIGg9b1t1XTtpZihoLnAhPT1hKXt2YXIgZj1sLnB1dChoLnAsaC5iK2gucyk7ZiYmKGguYj1mKX19fX0oMCwwLG8pLGk/KG0odCxyLG8pLHkodCxyLG8pKTp2KHQscixvKX0odCxlLHIsYiksdS5sZW5ndGgmJmgodCxlLHIsdSk7YnJlYWs7Y2FzZVwic3RhY2tcIjpjYXNlXCJyZWxhdGl2ZVwiOmZvcih1PVtdLGI9W10sXz0wO188by5sZW5ndGg7XysrKXZvaWQgMD09PSh3PW9bX10pWzBdLnRyYWNlLmJhc2U/Yi5wdXNoKHcpOnUucHVzaCh3KTtiLmxlbmd0aCYmZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5fZnVsbExheW91dCxvPWkuYmFybW9kZSxsPWkuYmFybm9ybSx1PW5ldyBjKG4se3NlcE5lZ1ZhbDpcInJlbGF0aXZlXCI9PT1vLG92ZXJsYXBOb01lcmdlOiEobHx8XCJzdGFja1wiPT09b3x8XCJyZWxhdGl2ZVwiPT09byl9KTtmKHQsZSx1KSxmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQuX2Z1bGxMYXlvdXQuYmFybm9ybSxpPXgoZSksbz1yLnRyYWNlcyxsPTA7bDxvLmxlbmd0aDtsKyspe2Zvcih2YXIgYz1vW2xdLHU9Y1swXS50cmFjZSxoPVtdLGY9MDtmPGMubGVuZ3RoO2YrKyl7dmFyIHA9Y1tmXTtpZihwLnMhPT1hKXt2YXIgZD1yLnB1dChwLnAscC5iK3AucyksZz1kK3AuYitwLnM7cC5iPWQscFtpXT1nLG58fChoLnB1c2goZykscC5oYXNCJiZoLnB1c2goZCkpfX1ufHwodS5fZXh0cmVtZXNbZS5faWRdPXMuZmluZEV4dHJlbWVzKGUsaCx7dG96ZXJvOiEwLHBhZGRlZDohMH0pKX19KHQscix1KTtmb3IodmFyIGg9MDtoPG4ubGVuZ3RoO2grKylmb3IodmFyIHA9bltoXSxkPTA7ZDxwLmxlbmd0aDtkKyspe3ZhciBnPXBbZF07aWYoZy5zIT09YSl7dmFyIHY9Zy5iK2cucz09PXUuZ2V0KGcucCxnLnMpO3YmJihnLl9vdXRtb3N0PSEwKX19bCYmeSh0LHIsdSl9KHQsZSxyLGIpLHUubGVuZ3RoJiZoKHQsZSxyLHUpfSFmdW5jdGlvbih0LGUpe3ZhciByLGksYSxvPXgoZSkscz17fSxsPTEvMCxjPS0xLzA7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKylmb3IoYT10W3JdLGk9MDtpPGEubGVuZ3RoO2krKyl7dmFyIHU9YVtpXS5wO24odSkmJihsPU1hdGgubWluKGwsdSksYz1NYXRoLm1heChjLHUpKX12YXIgaD0xZTQvKGMtbCksZj1zLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcoTWF0aC5yb3VuZChoKih0LWwpKSl9O2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspeyhhPXRbcl0pWzBdLnQuZXh0ZW50cz1zO3ZhciBwPWFbMF0udC5wb2Zmc2V0LGQ9QXJyYXkuaXNBcnJheShwKTtmb3IoaT0wO2k8YS5sZW5ndGg7aSsrKXt2YXIgZz1hW2ldLHY9Z1tvXS1nLncvMjtpZihuKHYpKXt2YXIgbT1nW29dK2cudy8yLHk9ZihnLnApO3NbeV0/c1t5XT1bTWF0aC5taW4odixzW3ldWzBdKSxNYXRoLm1heChtLHNbeV1bMV0pXTpzW3ldPVt2LG1dfWcucDA9Zy5wKyhkP3BbaV06cCksZy5wMT1nLnAwK2cudyxnLnMwPWcuYixnLnMxPWcuczArZy5zfX19KG8sZSl9fWZ1bmN0aW9uIGgodCxlLHIsbil7Zm9yKHZhciBpPXQuX2Z1bGxMYXlvdXQuYmFybm9ybSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBvPW5bYV0scz1uZXcgYyhbb10se3NlcE5lZ1ZhbDohMSxvdmVybGFwTm9NZXJnZTohaX0pO2YodCxlLHMpLGk/KG0odCxyLHMpLHkodCxyLHMpKTp2KHQscixzKX19ZnVuY3Rpb24gZih0LGUscil7Zm9yKHZhciBuPXQuX2Z1bGxMYXlvdXQsaT1uLmJhcmdhcCxhPW4uYmFyZ3JvdXBnYXB8fDAsbz1yLm1pbkRpZmYscz1yLnRyYWNlcyxsPW8qKDEtaSksYz1sKigxLWEpLHU9LWMvMixoPTA7aDxzLmxlbmd0aDtoKyspe3ZhciBmPXNbaF1bMF0udDtmLmJhcndpZHRoPWMsZi5wb2Zmc2V0PXUsZi5iYXJncm91cHdpZHRoPWwsZi5iYXJkZWx0YT1vfXIuYmluV2lkdGg9c1swXVswXS50LmJhcndpZHRoLzEwMCxwKHIpLGQodCxlLHIpLGcodCxlLHIpfWZ1bmN0aW9uIHAodCl7dmFyIGUscixhPXQudHJhY2VzO2ZvcihlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciBvLHM9YVtlXSxsPXNbMF0sYz1sLnRyYWNlLHU9bC50LGg9Yy5fb2Zmc2V0fHxjLm9mZnNldCxmPXUucG9mZnNldDtpZihpKGgpKXtmb3Iobz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChoLDAscy5sZW5ndGgpLHI9MDtyPG8ubGVuZ3RoO3IrKyluKG9bcl0pfHwob1tyXT1mKTtmb3Iocj1vLmxlbmd0aDtyPHMubGVuZ3RoO3IrKylvLnB1c2goZik7dS5wb2Zmc2V0PW99ZWxzZSB2b2lkIDAhPT1oJiYodS5wb2Zmc2V0PWgpO3ZhciBwPWMuX3dpZHRofHxjLndpZHRoLGQ9dS5iYXJ3aWR0aDtpZihpKHApKXt2YXIgZz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChwLDAscy5sZW5ndGgpO2ZvcihyPTA7cjxnLmxlbmd0aDtyKyspbihnW3JdKXx8KGdbcl09ZCk7Zm9yKHI9Zy5sZW5ndGg7cjxzLmxlbmd0aDtyKyspZy5wdXNoKGQpO2lmKHUuYmFyd2lkdGg9Zyx2b2lkIDA9PT1oKXtmb3Iobz1bXSxyPTA7cjxzLmxlbmd0aDtyKyspby5wdXNoKGYrKGQtZ1tyXSkvMik7dS5wb2Zmc2V0PW99fWVsc2Ugdm9pZCAwIT09cCYmKHUuYmFyd2lkdGg9cCx2b2lkIDA9PT1oJiYodS5wb2Zmc2V0PWYrKGQtcCkvMikpfX1mdW5jdGlvbiBkKHQsZSxyKXtmb3IodmFyIG49ci50cmFjZXMsaT14KGUpLGE9MDthPG4ubGVuZ3RoO2ErKylmb3IodmFyIG89blthXSxzPW9bMF0udCxsPXMucG9mZnNldCxjPUFycmF5LmlzQXJyYXkobCksdT1zLmJhcndpZHRoLGg9QXJyYXkuaXNBcnJheSh1KSxmPTA7ZjxvLmxlbmd0aDtmKyspe3ZhciBwPW9bZl0sZD1wLnc9aD91W2ZdOnU7cFtpXT1wLnArKGM/bFtmXTpsKStkLzJ9fWZ1bmN0aW9uIGcodCxlLHIsbil7dmFyIGk9ci50cmFjZXMsYT1yLm1pbkRpZmYvMjtzLm1pbkR0aWNrKGUsci5taW5EaWZmLHIuZGlzdGluY3RQb3NpdGlvbnNbMF0sbik7Zm9yKHZhciBvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBsLGMsdSxoLGY9aVtvXSxwPWZbMF0sZD1wLnRyYWNlLGc9W107Zm9yKGg9MDtoPGYubGVuZ3RoO2grKyljPShsPWZbaF0pLnAtYSx1PWwucCthLGcucHVzaChjLHUpO2lmKGQud2lkdGh8fGQub2Zmc2V0KXt2YXIgdj1wLnQsbT12LnBvZmZzZXQseT12LmJhcndpZHRoLHg9QXJyYXkuaXNBcnJheShtKSxiPUFycmF5LmlzQXJyYXkoeSk7Zm9yKGg9MDtoPGYubGVuZ3RoO2grKyl7bD1mW2hdO3ZhciBfPXg/bVtoXTptLHc9Yj95W2hdOnk7dT0oYz1sLnArXykrdyxnLnB1c2goYyx1KX19ZC5fZXh0cmVtZXNbZS5faWRdPXMuZmluZEV4dHJlbWVzKGUsZyx7cGFkZGVkOiExfSl9fWZ1bmN0aW9uIHYodCxlLHIpe2Zvcih2YXIgbj1yLnRyYWNlcyxpPXgoZSksYT0wO2E8bi5sZW5ndGg7YSsrKXtmb3IodmFyIG89blthXSxsPW9bMF0udHJhY2UsYz1bXSx1PSEwLGg9MDtoPG8ubGVuZ3RoO2grKyl7dmFyIGY9b1toXSxwPWYuYixkPXArZi5zO2ZbaV09ZCxjLnB1c2goZCksZi5oYXNCJiZjLnB1c2gocCksZi5oYXNCJiZmLmI+MCYmZi5zPjB8fCh1PSExKX1sLl9leHRyZW1lc1tlLl9pZF09cy5maW5kRXh0cmVtZXMoZSxjLHt0b3plcm86IXUscGFkZGVkOiEwfSl9fWZ1bmN0aW9uIG0odCxlLHIpe2Zvcih2YXIgbj1yLnRyYWNlcyxpPTA7aTxuLmxlbmd0aDtpKyspZm9yKHZhciBvPW5baV0scz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdO2wucyE9PWEmJnIucHV0KGwucCxsLmIrbC5zKX19ZnVuY3Rpb24geSh0LGUscil7dmFyIGk9dC5fZnVsbExheW91dCxvPXIudHJhY2VzLGw9eChlKSxjPVwiZnJhY3Rpb25cIj09PWkuYmFybm9ybT8xOjEwMCx1PWMvMWU5LGg9ZS5sMmMoZS5jMmwoMCkpLGY9XCJzdGFja1wiPT09aS5iYXJtb2RlP2M6aDtmdW5jdGlvbiBwKHQpe3JldHVybiBuKGUuYzJsKHQpKSYmKHQ8aC11fHx0PmYrdXx8IW4oaCkpfWZvcih2YXIgZD0wO2Q8by5sZW5ndGg7ZCsrKXtmb3IodmFyIGc9b1tkXSx2PWdbMF0udHJhY2UsbT1bXSx5PSEwLGI9ITEsXz0wO188Zy5sZW5ndGg7XysrKXt2YXIgdz1nW19dO2lmKHcucyE9PWEpe3ZhciBrPU1hdGguYWJzKGMvci5nZXQody5wLHcucykpO3cuYio9ayx3LnMqPWs7dmFyIEE9dy5iLFQ9QSt3LnM7d1tsXT1ULG0ucHVzaChUKSxiPWJ8fHAoVCksdy5oYXNCJiYobS5wdXNoKEEpLGI9Ynx8cChBKSksdy5oYXNCJiZ3LmI+MCYmdy5zPjB8fCh5PSExKX19di5fZXh0cmVtZXNbZS5faWRdPXMuZmluZEV4dHJlbWVzKGUsbSx7dG96ZXJvOiF5LHBhZGRlZDpifSl9fWZ1bmN0aW9uIHgodCl7cmV0dXJuIHQuX2lkLmNoYXJBdCgwKX1lLmV4cG9ydHM9e2Nyb3NzVHJhY2VDYWxjOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUueGF4aXMsbj1lLnlheGlzLGk9dC5fZnVsbERhdGEsYT10LmNhbGNkYXRhLHM9W10sbD1bXSxjPTA7YzxpLmxlbmd0aDtjKyspe3ZhciBoPWlbY107ITA9PT1oLnZpc2libGUmJm8udHJhY2VJcyhoLFwiYmFyXCIpJiZoLnhheGlzPT09ci5faWQmJmgueWF4aXM9PT1uLl9pZCYmKFwiaFwiPT09aC5vcmllbnRhdGlvbj9zLnB1c2goYVtjXSk6bC5wdXNoKGFbY10pKX11KHQscixuLGwpLHUodCxuLHIscyl9LHNldEdyb3VwUG9zaXRpb25zOnV9fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIjo3NTIsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vc2lldmUuanNcIjo4NTEsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDg0MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxhPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxvPXQoXCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzXCIpLHM9dChcIi4vc3R5bGVfZGVmYXVsdHNcIiksbD10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCIpLmdldEF4aXNHcm91cCxjPXQoXCIuL2F0dHJpYnV0ZXNcIiksdT1uLmNvZXJjZUZvbnQ7ZnVuY3Rpb24gaCh0LGUscixuKXt2YXIgaT1lLm9yaWVudGF0aW9uLGE9ZVt7djpcInhcIixoOlwieVwifVtpXStcImF4aXNcIl0sbz1sKHIsYSkraSxzPXIuX2FsaWdubWVudE9wdHN8fHt9LGM9bihcImFsaWdubWVudGdyb3VwXCIpLHU9c1tvXTt1fHwodT1zW29dPXt9KTt2YXIgaD11W2NdO2g/aC50cmFjZXMucHVzaChlKTpoPXVbY109e3RyYWNlczpbZV0sYWxpZ25tZW50SW5kZXg6T2JqZWN0LmtleXModSkubGVuZ3RoLG9mZnNldEdyb3Vwczp7fX07dmFyIGY9bihcIm9mZnNldGdyb3VwXCIpLHA9aC5vZmZzZXRHcm91cHMsZD1wW2ZdO2YmJihkfHwoZD1wW2ZdPXtvZmZzZXRJbmRleDpPYmplY3Qua2V5cyhwKS5sZW5ndGh9KSxlLl9vZmZzZXRJbmRleD1kLm9mZnNldEluZGV4KX1mdW5jdGlvbiBmKHQsZSxyLGksYSl7dmFyIG89aShcInRleHRwb3NpdGlvblwiKSxzPUFycmF5LmlzQXJyYXkobyl8fFwiYXV0b1wiPT09byxsPXN8fFwib3V0c2lkZVwiPT09bztpZihzfHxcImluc2lkZVwiPT09b3x8bCl7dmFyIGM9dShpLFwidGV4dGZvbnRcIixyLmZvbnQpLGg9bi5leHRlbmRGbGF0KHt9LGMpOyEodC50ZXh0Zm9udCYmdC50ZXh0Zm9udC5jb2xvcikmJmRlbGV0ZSBoLmNvbG9yLHUoaSxcImluc2lkZXRleHRmb250XCIsaCksbCYmdShpLFwib3V0c2lkZXRleHRmb250XCIsYyksaShcImNvbnN0cmFpbnRleHRcIiksYSYmKGkoXCJzZWxlY3RlZC50ZXh0Zm9udC5jb2xvclwiKSxpKFwidW5zZWxlY3RlZC50ZXh0Zm9udC5jb2xvclwiKSksaShcImNsaXBvbmF4aXNcIil9fWUuZXhwb3J0cz17c3VwcGx5RGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIsbCl7ZnVuY3Rpb24gdShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYyxyLGkpfWlmKG8odCxlLGwsdSkpe3UoXCJvcmllbnRhdGlvblwiLGUueCYmIWUueT9cImhcIjpcInZcIiksdShcImJhc2VcIiksdShcIm9mZnNldFwiKSx1KFwid2lkdGhcIiksdShcInRleHRcIiksdShcImhvdmVydGV4dFwiKSx1KFwiaG92ZXJ0ZW1wbGF0ZVwiKSxmKHQsMCxsLHUsITApLHModCxlLHUscixsKTt2YXIgaD0oZS5tYXJrZXIubGluZXx8e30pLmNvbG9yLHA9YS5nZXRDb21wb25lbnRNZXRob2QoXCJlcnJvcmJhcnNcIixcInN1cHBseURlZmF1bHRzXCIpO3AodCxlLGh8fGkuZGVmYXVsdExpbmUse2F4aXM6XCJ5XCJ9KSxwKHQsZSxofHxpLmRlZmF1bHRMaW5lLHtheGlzOlwieFwiLGluaGVyaXQ6XCJ5XCJ9KSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSx1KX1lbHNlIGUudmlzaWJsZT0hMX0sY3Jvc3NUcmFjZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHI7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbi5jb2VyY2Uoci5faW5wdXQscixjLHQpfWlmKFwiZ3JvdXBcIj09PWUuYmFybW9kZSlmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKylcImJhclwiPT09KHI9dFthXSkudHlwZSYmKHIuX2lucHV0LGgoMCxyLGUsaSkpfSxoYW5kbGVHcm91cGluZ0RlZmF1bHRzOmgsaGFuZGxlVGV4dDpmfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiOjc1MixcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vc2NhdHRlci94eV9kZWZhdWx0c1wiOjEwNzgsXCIuL2F0dHJpYnV0ZXNcIjo4MzksXCIuL3N0eWxlX2RlZmF1bHRzXCI6ODUzfV0sODQ0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcInRpbnljb2xvcjJcIik7ci5jb2VyY2VTdHJpbmc9ZnVuY3Rpb24odCxlLHIpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXtpZihlfHwhdC5ub0JsYW5rKXJldHVybiBlfWVsc2UgaWYoXCJudW1iZXJcIj09dHlwZW9mIGUmJiF0LnN0cmljdClyZXR1cm4gU3RyaW5nKGUpO3JldHVybiB2b2lkIDAhPT1yP3I6dC5kZmx0fSxyLmNvZXJjZU51bWJlcj1mdW5jdGlvbih0LGUscil7aWYobihlKSl7ZT0rZTt2YXIgaT10Lm1pbixhPXQubWF4O2lmKCEodm9pZCAwIT09aSYmZTxpfHx2b2lkIDAhPT1hJiZlPmEpKXJldHVybiBlfXJldHVybiB2b2lkIDAhPT1yP3I6dC5kZmx0fSxyLmNvZXJjZUNvbG9yPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gaShlKS5pc1ZhbGlkKCk/ZTp2b2lkIDAhPT1yP3I6dC5kZmx0fSxyLmNvZXJjZUVudW1lcmF0ZWQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0LmNvZXJjZU51bWJlciYmKGU9K2UpLC0xIT09dC52YWx1ZXMuaW5kZXhPZihlKT9lOnZvaWQgMCE9PXI/cjp0LmRmbHR9LHIuZ2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt2YXIgcjtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9lPHQubGVuZ3RoJiYocj10W2VdKTpyPXQscn19LHtcImZhc3QtaXNudW1lcmljXCI6MjIyLHRpbnljb2xvcjI6NTIyfV0sODQ1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIiksaT10KFwiLi4vLi4vcmVnaXN0cnlcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxvPXQoXCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dFwiKTtmdW5jdGlvbiBzKHQsZSxyLGkpe3ZhciBhLHMsbCxjLHUsaCxmLHA9dC5jZCxkPXBbMF0udHJhY2UsZz1wWzBdLnQsdj1cImNsb3Nlc3RcIj09PWksbT10Lm1heEhvdmVyRGlzdGFuY2UseT10Lm1heFNwaWtlRGlzdGFuY2U7ZnVuY3Rpb24geCh0KXtyZXR1cm4gdFtsXS10LncvMn1mdW5jdGlvbiBiKHQpe3JldHVybiB0W2xdK3Qudy8yfXZhciBfPXY/eDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5taW4oeCh0KSx0LnAtZy5iYXJkZWx0YS8yKX0sdz12P2I6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KGIodCksdC5wK2cuYmFyZGVsdGEvMil9O2Z1bmN0aW9uIGsodCxlKXtyZXR1cm4gbi5pbmJveCh0LWEsZS1hLG0rTWF0aC5taW4oMSxNYXRoLmFicyhlLXQpL2YpLTEpfWZ1bmN0aW9uIEEodCl7cmV0dXJuIGsoXyh0KSx3KHQpKX1mdW5jdGlvbiBUKHQpe3JldHVybiBuLmluYm94KHQuYi1zLHRbY10tcyxtKyh0W2NdLXMpLyh0W2NdLXQuYiktMSl9XCJoXCI9PT1kLm9yaWVudGF0aW9uPyhhPXIscz1lLGw9XCJ5XCIsYz1cInhcIix1PVQsaD1BKTooYT1lLHM9cixsPVwieFwiLGM9XCJ5XCIsaD1ULHU9QSk7dmFyIE09dFtsK1wiYVwiXSxTPXRbYytcImFcIl07Zj1NYXRoLmFicyhNLnIyYyhNLnJhbmdlWzFdKS1NLnIyYyhNLnJhbmdlWzBdKSk7dmFyIEU9bi5nZXREaXN0YW5jZUZ1bmN0aW9uKGksdSxoLGZ1bmN0aW9uKHQpe3JldHVybih1KHQpK2godCkpLzJ9KTtpZihuLmdldENsb3Nlc3QocCxFLHQpLCExIT09dC5pbmRleCl7dnx8KF89ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWluKHgodCksdC5wLWcuYmFyZ3JvdXB3aWR0aC8yKX0sdz1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoYih0KSx0LnArZy5iYXJncm91cHdpZHRoLzIpfSk7dmFyIEM9cFt0LmluZGV4XSxMPWQuYmFzZT9DLmIrQy5zOkMuczt0W2MrXCIwXCJdPXRbYytcIjFcIl09Uy5jMnAoQ1tjXSwhMCksdFtjK1wiTGFiZWxWYWxcIl09TDt2YXIgej1nLmV4dGVudHNbZy5leHRlbnRzLnJvdW5kKEMucCldO3JldHVybiB0W2wrXCIwXCJdPU0uYzJwKHY/XyhDKTp6WzBdLCEwKSx0W2wrXCIxXCJdPU0uYzJwKHY/dyhDKTp6WzFdLCEwKSx0W2wrXCJMYWJlbFZhbFwiXT1DLnAsdC5zcGlrZURpc3RhbmNlPShUKEMpK2Z1bmN0aW9uKHQpe3JldHVybiBrKHgodCksYih0KSl9KEMpKS8yK3ktbSx0W2wrXCJTcGlrZVwiXT1NLmMycChDLnAsITApLG8oQyxkLHQpLHQuaG92ZXJ0ZW1wbGF0ZT1kLmhvdmVydGVtcGxhdGUsdH19ZnVuY3Rpb24gbCh0LGUpe3ZhciByPWUubWNjfHx0Lm1hcmtlci5jb2xvcixuPWUubWxjY3x8dC5tYXJrZXIubGluZS5jb2xvcixpPWUubWx3fHx0Lm1hcmtlci5saW5lLndpZHRoO3JldHVybiBhLm9wYWNpdHkocik/cjphLm9wYWNpdHkobikmJmk/bjp2b2lkIDB9ZS5leHBvcnRzPXtob3ZlclBvaW50czpmdW5jdGlvbih0LGUscixuKXt2YXIgYT1zKHQsZSxyLG4pO2lmKGEpe3ZhciBvPWEuY2QsYz1vWzBdLnRyYWNlLHU9b1thLmluZGV4XTtyZXR1cm4gYS5jb2xvcj1sKGMsdSksaS5nZXRDb21wb25lbnRNZXRob2QoXCJlcnJvcmJhcnNcIixcImhvdmVySW5mb1wiKSh1LGMsYSksW2FdfX0saG92ZXJPbkJhcnM6cyxnZXRUcmFjZUNvbG9yOmx9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHRcIjoxMDYwfV0sODQ2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5sYXlvdXRBdHRyaWJ1dGVzPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIikuc3VwcGx5RGVmYXVsdHMsbi5jcm9zc1RyYWNlRGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIikuY3Jvc3NUcmFjZURlZmF1bHRzLG4uc3VwcGx5TGF5b3V0RGVmYXVsdHM9dChcIi4vbGF5b3V0X2RlZmF1bHRzXCIpLG4uY2FsYz10KFwiLi9jYWxjXCIpLG4uY3Jvc3NUcmFjZUNhbGM9dChcIi4vY3Jvc3NfdHJhY2VfY2FsY1wiKS5jcm9zc1RyYWNlQ2FsYyxuLmNvbG9yYmFyPXQoXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiKSxuLmFycmF5c1RvQ2FsY2RhdGE9dChcIi4vYXJyYXlzX3RvX2NhbGNkYXRhXCIpLG4ucGxvdD10KFwiLi9wbG90XCIpLG4uc3R5bGU9dChcIi4vc3R5bGVcIikuc3R5bGUsbi5zdHlsZU9uU2VsZWN0PXQoXCIuL3N0eWxlXCIpLnN0eWxlT25TZWxlY3Qsbi5ob3ZlclBvaW50cz10KFwiLi9ob3ZlclwiKS5ob3ZlclBvaW50cyxuLnNlbGVjdFBvaW50cz10KFwiLi9zZWxlY3RcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJiYXJcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIiksbi5jYXRlZ29yaWVzPVtcImNhcnRlc2lhblwiLFwic3ZnXCIsXCJiYXJcIixcIm9yaWVudGVkXCIsXCJlcnJvckJhcnNPS1wiLFwic2hvd0xlZ2VuZFwiLFwiem9vbVNjYWxlXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXJcIjoxMDcwLFwiLi9hcnJheXNfdG9fY2FsY2RhdGFcIjo4MzgsXCIuL2F0dHJpYnV0ZXNcIjo4MzksXCIuL2NhbGNcIjo4NDAsXCIuL2Nyb3NzX3RyYWNlX2NhbGNcIjo4NDIsXCIuL2RlZmF1bHRzXCI6ODQzLFwiLi9ob3ZlclwiOjg0NSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo4NDcsXCIuL2xheW91dF9kZWZhdWx0c1wiOjg0OCxcIi4vcGxvdFwiOjg0OSxcIi4vc2VsZWN0XCI6ODUwLFwiLi9zdHlsZVwiOjg1Mn1dLDg0NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17YmFybW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wic3RhY2tcIixcImdyb3VwXCIsXCJvdmVybGF5XCIsXCJyZWxhdGl2ZVwiXSxkZmx0OlwiZ3JvdXBcIixlZGl0VHlwZTpcImNhbGNcIn0sYmFybm9ybTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiXCIsXCJmcmFjdGlvblwiLFwicGVyY2VudFwiXSxkZmx0OlwiXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGJhcmdhcDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGVkaXRUeXBlOlwiY2FsY1wifSxiYXJncm91cGdhcDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZTpcImNhbGNcIn19fSx7fV0sODQ4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGE9dChcIi4uLy4uL2xpYlwiKSxvPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gcyhyLG4pe3JldHVybiBhLmNvZXJjZSh0LGUsbyxyLG4pfWZvcih2YXIgbD0hMSxjPSExLHU9ITEsaD17fSxmPXMoXCJiYXJtb2RlXCIpLHA9MDtwPHIubGVuZ3RoO3ArKyl7dmFyIGQ9cltwXTtpZihuLnRyYWNlSXMoZCxcImJhclwiKSYmZC52aXNpYmxlKXtpZihsPSEwLFwiZ3JvdXBcIj09PWYpe3ZhciBnPWQueGF4aXMrZC55YXhpcztoW2ddJiYodT0hMCksaFtnXT0hMH1pZihkLnZpc2libGUmJlwiaGlzdG9ncmFtXCI9PT1kLnR5cGUpXCJjYXRlZ29yeVwiIT09aS5nZXRGcm9tSWQoe19mdWxsTGF5b3V0OmV9LGRbXCJ2XCI9PT1kLm9yaWVudGF0aW9uP1wieGF4aXNcIjpcInlheGlzXCJdKS50eXBlJiYoYz0hMCl9fWw/KFwib3ZlcmxheVwiIT09ZiYmcyhcImJhcm5vcm1cIikscyhcImJhcmdhcFwiLGMmJiF1PzA6LjIpLHMoXCJiYXJncm91cGdhcFwiKSk6ZGVsZXRlIGUuYmFybW9kZX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6ODQ3fV0sODQ5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcImZhc3QtaXNudW1lcmljXCIpLGE9dChcIi4uLy4uL2xpYlwiKSxvPXQoXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIikscz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxsPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksYz10KFwiLi4vLi4vcmVnaXN0cnlcIiksdT10KFwiLi9hdHRyaWJ1dGVzXCIpLGg9dS50ZXh0LGY9dS50ZXh0cG9zaXRpb24scD10KFwiLi9oZWxwZXJzXCIpLGQ9dChcIi4vc3R5bGVcIiksZz0zO2Z1bmN0aW9uIHYodCxlLHIsbixpLGEpe3ZhciBvO3JldHVybiBpPDE/bz1cInNjYWxlKFwiK2krXCIpIFwiOihpPTEsbz1cIlwiKSxcInRyYW5zbGF0ZShcIisoci1pKnQpK1wiIFwiKyhuLWkqZSkrXCIpXCIrbysoYT9cInJvdGF0ZShcIithK1wiIFwiK3QrXCIgXCIrZStcIikgXCI6XCJcIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUpe3ZhciBtPWUueGF4aXMseT1lLnlheGlzLHg9dC5fZnVsbExheW91dCxiPWEubWFrZVRyYWNlR3JvdXBzKHUscixcInRyYWNlIGJhcnNcIikuZWFjaChmdW5jdGlvbihyKXt2YXIgYyx1PW4uc2VsZWN0KHRoaXMpLGI9clswXSxfPWIudHJhY2Usdz0wO1wid2F0ZXJmYWxsXCI9PT1fLnR5cGUmJl8uY29ubmVjdG9yLnZpc2libGUmJlwiYmV0d2VlblwiPT09Xy5jb25uZWN0b3IubW9kZSYmKHc9Xy5jb25uZWN0b3IubGluZS53aWR0aC8yKTt2YXIgaz1cImhcIj09PV8ub3JpZW50YXRpb247ZS5pc1JhbmdlUGxvdHx8KGIubm9kZTM9dSk7dmFyIEE9YS5lbnN1cmVTaW5nbGUodSxcImdcIixcInBvaW50c1wiKS5zZWxlY3RBbGwoXCJnLnBvaW50XCIpLmRhdGEoYS5pZGVudGl0eSk7QS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcInBvaW50XCIsITApLEEuZXhpdCgpLnJlbW92ZSgpLEEuZWFjaChmdW5jdGlvbih1LGIpe3ZhciBBLFQsTSxTLEU9bi5zZWxlY3QodGhpcyk7az8oTT15LmMycCh1LnAwLCEwKSxTPXkuYzJwKHUucDEsITApLEE9bS5jMnAodS5zMCwhMCksVD1tLmMycCh1LnMxLCEwKSx1LmN0PVtULChNK1MpLzJdKTooQT1tLmMycCh1LnAwLCEwKSxUPW0uYzJwKHUucDEsITApLE09eS5jMnAodS5zMCwhMCksUz15LmMycCh1LnMxLCEwKSx1LmN0PVsoQStUKS8yLFNdKTt2YXIgQyxMLHosTz11LmlzQmxhbms9IShpKEEpJiZpKFQpJiZpKE0pJiZpKFMpJiZBIT09VCYmTSE9PVMpO2lmKHcmJihrPyhBLT0oYz1UPEE/LTE6MSkqdyxUKz1jKncpOihNLT0oYz1TPE0/LTE6MSkqdyxTKz1jKncpKSxcIndhdGVyZmFsbFwiPT09Xy50eXBlKXtpZighTyl7dmFyIEk9X1t1LmRpcl0ubWFya2VyO0M9SS5saW5lLndpZHRoLEw9SS5jb2xvcn16PVwid2F0ZXJmYWxsXCJ9ZWxzZSBDPSh1Lm1sdysxfHxfLm1hcmtlci5saW5lLndpZHRoKzF8fCh1LnRyYWNlP3UudHJhY2UubWFya2VyLmxpbmUud2lkdGg6MCkrMSktMSxMPXUubWN8fF8ubWFya2VyLmNvbG9yLHo9XCJiYXJcIjt2YXIgRD1uLnJvdW5kKEMvMiUxLDIpLFA9eFt6K1wiZ2FwXCJdLFI9eFt6K1wiZ3JvdXBnYXBcIl07ZnVuY3Rpb24gRih0KXtyZXR1cm4gMD09PVAmJjA9PT1SP24ucm91bmQoTWF0aC5yb3VuZCh0KS1ELDIpOnR9aWYoIXQuX2NvbnRleHQuc3RhdGljUGxvdCl7dmFyIEI9cy5vcGFjaXR5KEwpPDF8fEM+LjAxP0Y6ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hYnModC1lKT49Mj9GKHQpOnQ+ZT9NYXRoLmNlaWwodCk6TWF0aC5mbG9vcih0KX07QT1CKEEsVCksVD1CKFQsQSksTT1CKE0sUyksUz1CKFMsTSl9YS5lbnN1cmVTaW5nbGUoRSxcInBhdGhcIikuc3R5bGUoXCJ2ZWN0b3ItZWZmZWN0XCIsXCJub24tc2NhbGluZy1zdHJva2VcIikuYXR0cihcImRcIixPP1wiTTAsMFpcIjpcIk1cIitBK1wiLFwiK00rXCJWXCIrUytcIkhcIitUK1wiVlwiK00rXCJaXCIpLmNhbGwobC5zZXRDbGlwVXJsLGUubGF5ZXJDbGlwSWQsdCksZnVuY3Rpb24odCxlLHIsbixpLHMsYyx1KXt2YXIgbSx5PXQuX2Z1bGxMYXlvdXQ7ZnVuY3Rpb24geChlLHIsbil7dmFyIGk9YS5lbnN1cmVTaW5nbGUoZSxcInRleHRcIikudGV4dChyKS5hdHRyKHtjbGFzczpcImJhcnRleHQgYmFydGV4dC1cIittLHRyYW5zZm9ybTpcIlwiLFwidGV4dC1hbmNob3JcIjpcIm1pZGRsZVwiLFwiZGF0YS1ub3RleFwiOjF9KS5jYWxsKGwuZm9udCxuKS5jYWxsKG8uY29udmVydFRvVHNwYW5zLHQpO3JldHVybiBpfXZhciBiPXJbMF0udHJhY2UsXz1iLm9yaWVudGF0aW9uLHc9ZnVuY3Rpb24odCxlKXt2YXIgcj1wLmdldFZhbHVlKHQudGV4dCxlKTtyZXR1cm4gcC5jb2VyY2VTdHJpbmcoaCxyKX0oYixuKTttPWZ1bmN0aW9uKHQsZSl7dmFyIHI9cC5nZXRWYWx1ZSh0LnRleHRwb3NpdGlvbixlKTtyZXR1cm4gcC5jb2VyY2VFbnVtZXJhdGVkKGYscil9KGIsbik7dmFyIGs9XCJ3YXRlcmZhbGxcIj09PWIudHlwZT9cIndhdGVyZmFsbFwiOlwiYmFyXCIsQT15W2srXCJtb2RlXCJdLFQ9XCJzdGFja1wiPT09QXx8XCJyZWxhdGl2ZVwiPT09QSxNPXJbbl0sUz0hVHx8TS5fb3V0bW9zdDtpZighd3x8XCJub25lXCI9PT1tfHxNLmlzQmxhbmsmJihcImF1dG9cIj09PW18fFwiaW5zaWRlXCI9PT1tKSlyZXR1cm4gdm9pZCBlLnNlbGVjdChcInRleHRcIikucmVtb3ZlKCk7dmFyIEUsQyxMLHosTyxJLEQ9eS5mb250LFA9ZC5nZXRCYXJDb2xvcihyW25dLGIpLFI9ZC5nZXRJbnNpZGVUZXh0Rm9udChiLG4sRCxQKSxGPWQuZ2V0T3V0c2lkZVRleHRGb250KGIsbixEKSxCPU1hdGguYWJzKHMtaSktMipnLE49TWF0aC5hYnModS1jKS0yKmc7XCJvdXRzaWRlXCI9PT1tJiYoU3x8TS5oYXNCfHwobT1cImluc2lkZVwiKSk7aWYoXCJhdXRvXCI9PT1tKWlmKFMpe209XCJpbnNpZGVcIixFPXgoZSx3LFIpLEM9bC5iQm94KEUubm9kZSgpKSxMPUMud2lkdGgsej1DLmhlaWdodDt2YXIgaj1MPjAmJno+MCxWPUw8PUImJno8PU4sVT1MPD1OJiZ6PD1CLHE9XCJoXCI9PT1fP0I+PUwqKE4veik6Tj49eiooQi9MKTtqJiYoVnx8VXx8cSk/bT1cImluc2lkZVwiOihtPVwib3V0c2lkZVwiLEUucmVtb3ZlKCksRT1udWxsKX1lbHNlIG09XCJpbnNpZGVcIjtpZighRSYmKEU9eChlLHcsXCJvdXRzaWRlXCI9PT1tP0Y6UiksQz1sLmJCb3goRS5ub2RlKCkpLEw9Qy53aWR0aCx6PUMuaGVpZ2h0LEw8PTB8fHo8PTApKXJldHVybiB2b2lkIEUucmVtb3ZlKCk7XCJvdXRzaWRlXCI9PT1tPyhJPVwiYm90aFwiPT09Yi5jb25zdHJhaW50ZXh0fHxcIm91dHNpZGVcIj09PWIuY29uc3RyYWludGV4dCxPPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzLGw9XCJoXCI9PT1hP01hdGguYWJzKG4tcik6TWF0aC5hYnMoZS10KTtsPjIqZyYmKHM9Zyk7dmFyIGM9MTtvJiYoYz1cImhcIj09PWE/TWF0aC5taW4oMSxsL2kuaGVpZ2h0KTpNYXRoLm1pbigxLGwvaS53aWR0aCkpO3ZhciB1LGgsZixwLGQ9KGkubGVmdCtpLnJpZ2h0KS8yLG09KGkudG9wK2kuYm90dG9tKS8yO3U9YyppLndpZHRoLGg9YyppLmhlaWdodCxcImhcIj09PWE/ZTx0PyhmPWUtcy11LzIscD0ocituKS8yKTooZj1lK3MrdS8yLHA9KHIrbikvMik6bj5yPyhmPSh0K2UpLzIscD1uK3MraC8yKTooZj0odCtlKS8yLHA9bi1zLWgvMik7cmV0dXJuIHYoZCxtLGYscCxjLCExKX0oaSxzLGMsdSxDLF8sSSkpOihJPVwiYm90aFwiPT09Yi5jb25zdHJhaW50ZXh0fHxcImluc2lkZVwiPT09Yi5jb25zdHJhaW50ZXh0LE89ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHMsbCxjLHUsaCxmLHAsZD1pLndpZHRoLG09aS5oZWlnaHQseT0oaS5sZWZ0K2kucmlnaHQpLzIseD0oaS50b3AraS5ib3R0b20pLzIsYj1NYXRoLmFicyhlLXQpLF89TWF0aC5hYnMobi1yKTtiPjIqZyYmXz4yKmc/KGItPTIqKGg9ZyksXy09MipoKTpoPTA7ZDw9YiYmbTw9Xz8oZj0hMSxwPTEpOmQ8PV8mJm08PWI/KGY9ITAscD0xKTpkPG09PWI8Xz8oZj0hMSxwPW8/TWF0aC5taW4oYi9kLF8vbSk6MSk6KGY9ITAscD1vP01hdGgubWluKF8vZCxiL20pOjEpO2YmJihmPTkwKTtmPyhzPXAqbSxsPXAqZCk6KHM9cCpkLGw9cCptKTtcImhcIj09PWE/ZTx0PyhjPWUraCtzLzIsdT0ocituKS8yKTooYz1lLWgtcy8yLHU9KHIrbikvMik6bj5yPyhjPSh0K2UpLzIsdT1uLWgtbC8yKTooYz0odCtlKS8yLHU9bitoK2wvMik7cmV0dXJuIHYoeSx4LGMsdSxwLGYpfShpLHMsYyx1LEMsXyxJKSk7RS5hdHRyKFwidHJhbnNmb3JtXCIsTyl9KHQsRSxyLGIsQSxULE0sUyksZS5sYXllckNsaXBJZCYmbC5oaWRlT3V0c2lkZVJhbmdlUG9pbnQodSxFLnNlbGVjdChcInRleHRcIiksbSx5LF8ueGNhbGVuZGFyLF8ueWNhbGVuZGFyKX0pO3ZhciBUPSExPT09Yi50cmFjZS5jbGlwb25heGlzO2wuc2V0Q2xpcFVybCh1LFQ/bnVsbDplLmxheWVyQ2xpcElkLHQpfSk7Yy5nZXRDb21wb25lbnRNZXRob2QoXCJlcnJvcmJhcnNcIixcInBsb3RcIikodCxiLGUpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiOjcyNSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9hdHRyaWJ1dGVzXCI6ODM5LFwiLi9oZWxwZXJzXCI6ODQ0LFwiLi9zdHlsZVwiOjg1MixkMzoxNTUsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDg1MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG49dC5jZCxpPXQueGF4aXMsYT10LnlheGlzLG89W107aWYoITE9PT1lKWZvcihyPTA7cjxuLmxlbmd0aDtyKyspbltyXS5zZWxlY3RlZD0wO2Vsc2UgZm9yKHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIHM9bltyXTtlLmNvbnRhaW5zKHMuY3QsITEscix0KT8oby5wdXNoKHtwb2ludE51bWJlcjpyLHg6aS5jMmQocy54KSx5OmEuYzJkKHMueSl9KSxzLnNlbGVjdGVkPTEpOnMuc2VsZWN0ZWQ9MH1yZXR1cm4gb319LHt9XSw4NTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9YTt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNO2Z1bmN0aW9uIGEodCxlKXt0aGlzLnRyYWNlcz10LHRoaXMuc2VwTmVnVmFsPWUuc2VwTmVnVmFsLHRoaXMub3ZlcmxhcE5vTWVyZ2U9ZS5vdmVybGFwTm9NZXJnZTtmb3IodmFyIHI9MS8wLGE9W10sbz0wO288dC5sZW5ndGg7bysrKXtmb3IodmFyIHM9dFtvXSxsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciBjPXNbbF07Yy5wIT09aSYmYS5wdXNoKGMucCl9c1swXSYmc1swXS53aWR0aDEmJihyPU1hdGgubWluKHNbMF0ud2lkdGgxLHIpKX10aGlzLnBvc2l0aW9ucz1hO3ZhciB1PW4uZGlzdGluY3RWYWxzKGEpO3RoaXMuZGlzdGluY3RQb3NpdGlvbnM9dS52YWxzLDE9PT11LnZhbHMubGVuZ3RoJiZyIT09MS8wP3RoaXMubWluRGlmZj1yOnRoaXMubWluRGlmZj1NYXRoLm1pbih1Lm1pbkRpZmYsciksdGhpcy5iaW5XaWR0aD10aGlzLm1pbkRpZmYsdGhpcy5iaW5zPXt9fWEucHJvdG90eXBlLnB1dD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2V0TGFiZWwodCxlKSxuPXRoaXMuYmluc1tyXXx8MDtyZXR1cm4gdGhpcy5iaW5zW3JdPW4rZSxufSxhLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdldExhYmVsKHQsZSk7cmV0dXJuIHRoaXMuYmluc1tyXXx8MH0sYS5wcm90b3R5cGUuZ2V0TGFiZWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4oZTwwJiZ0aGlzLnNlcE5lZ1ZhbD9cInZcIjpcIl5cIikrKHRoaXMub3ZlcmxhcE5vTWVyZ2U/dDpNYXRoLnJvdW5kKHQvdGhpcy5iaW5XaWR0aCkpfX0se1wiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMX1dLDg1MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxvPXQoXCIuLi8uLi9saWJcIikscz10KFwiLi4vLi4vcmVnaXN0cnlcIiksbD10KFwiLi9hdHRyaWJ1dGVzXCIpLGM9bC50ZXh0Zm9udCx1PWwuaW5zaWRldGV4dGZvbnQsaD1sLm91dHNpZGV0ZXh0Zm9udCxmPXQoXCIuL2hlbHBlcnNcIik7ZnVuY3Rpb24gcCh0LGUscil7YS5wb2ludFN0eWxlKHQuc2VsZWN0QWxsKFwicGF0aFwiKSxlLHIpLGQodCxlLHIpfWZ1bmN0aW9uIGQodCxlLHIpe3Quc2VsZWN0QWxsKFwidGV4dFwiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLG89ZyhpLHQsZSxyKTthLmZvbnQoaSxvKX0pfWZ1bmN0aW9uIGcodCxlLHIsbil7dmFyIGk9bi5fZnVsbExheW91dC5mb250LGE9ci50ZXh0Zm9udDtpZih0LmNsYXNzZWQoXCJiYXJ0ZXh0LWluc2lkZVwiKSl7dmFyIG89YihlLHIpO2E9bShyLGUuaSxpLG8pfWVsc2UgdC5jbGFzc2VkKFwiYmFydGV4dC1vdXRzaWRlXCIpJiYoYT15KHIsZS5pLGkpKTtyZXR1cm4gYX1mdW5jdGlvbiB2KHQsZSxyKXtyZXR1cm4geChjLHQudGV4dGZvbnQsZSxyKX1mdW5jdGlvbiBtKHQsZSxyLG4pe3ZhciBhPXYodCxlLHIpO3JldHVybih2b2lkIDA9PT10Ll9pbnB1dC50ZXh0Zm9udHx8dm9pZCAwPT09dC5faW5wdXQudGV4dGZvbnQuY29sb3J8fEFycmF5LmlzQXJyYXkodC50ZXh0Zm9udC5jb2xvcikmJnZvaWQgMD09PXQudGV4dGZvbnQuY29sb3JbZV0pJiYoYT17Y29sb3I6aS5jb250cmFzdChuKSxmYW1pbHk6YS5mYW1pbHksc2l6ZTphLnNpemV9KSx4KHUsdC5pbnNpZGV0ZXh0Zm9udCxlLGEpfWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBuPXYodCxlLHIpO3JldHVybiB4KGgsdC5vdXRzaWRldGV4dGZvbnQsZSxuKX1mdW5jdGlvbiB4KHQsZSxyLG4pe2U9ZXx8e307dmFyIGk9Zi5nZXRWYWx1ZShlLmZhbWlseSxyKSxhPWYuZ2V0VmFsdWUoZS5zaXplLHIpLG89Zi5nZXRWYWx1ZShlLmNvbG9yLHIpO3JldHVybntmYW1pbHk6Zi5jb2VyY2VTdHJpbmcodC5mYW1pbHksaSxuLmZhbWlseSksc2l6ZTpmLmNvZXJjZU51bWJlcih0LnNpemUsYSxuLnNpemUpLGNvbG9yOmYuY29lcmNlQ29sb3IodC5jb2xvcixvLG4uY29sb3IpfX1mdW5jdGlvbiBiKHQsZSl7cmV0dXJuXCJ3YXRlcmZhbGxcIj09PWUudHlwZT9lW3QuZGlyXS5tYXJrZXIuY29sb3I6dC5tY3x8ZS5tYXJrZXIuY29sb3J9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUpe3ZhciByPWU/ZVswXS5ub2RlMzpuLnNlbGVjdCh0KS5zZWxlY3RBbGwoXCJnLmJhcmxheWVyXCIpLnNlbGVjdEFsbChcImcudHJhY2VcIiksaT1yLnNpemUoKSxhPXQuX2Z1bGxMYXlvdXQ7ci5zdHlsZShcIm9wYWNpdHlcIixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSkuZWFjaChmdW5jdGlvbih0KXsoXCJzdGFja1wiPT09YS5iYXJtb2RlJiZpPjF8fDA9PT1hLmJhcmdhcCYmMD09PWEuYmFyZ3JvdXBnYXAmJiF0WzBdLnRyYWNlLm1hcmtlci5saW5lLndpZHRoKSYmbi5zZWxlY3QodGhpcykuYXR0cihcInNoYXBlLXJlbmRlcmluZ1wiLFwiY3Jpc3BFZGdlc1wiKX0pLHIuc2VsZWN0QWxsKFwiZy5wb2ludHNcIikuZWFjaChmdW5jdGlvbihlKXtwKG4uc2VsZWN0KHRoaXMpLGVbMF0udHJhY2UsdCl9KSxzLmdldENvbXBvbmVudE1ldGhvZChcImVycm9yYmFyc1wiLFwic3R5bGVcIikocil9LHN0eWxlVGV4dFBvaW50czpkLHN0eWxlT25TZWxlY3Q6ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLm5vZGUzLGk9ZVswXS50cmFjZTtpLnNlbGVjdGVkcG9pbnRzP2Z1bmN0aW9uKHQsZSxyKXthLnNlbGVjdGVkUG9pbnRTdHlsZSh0LnNlbGVjdEFsbChcInBhdGhcIiksZSksZnVuY3Rpb24odCxlLHIpe3QuZWFjaChmdW5jdGlvbih0KXt2YXIgaSxzPW4uc2VsZWN0KHRoaXMpO2lmKHQuc2VsZWN0ZWQpe2k9by5leHRlbmRGbGF0KHt9LGcocyx0LGUscikpO3ZhciBsPWUuc2VsZWN0ZWQudGV4dGZvbnQmJmUuc2VsZWN0ZWQudGV4dGZvbnQuY29sb3I7bCYmKGkuY29sb3I9bCksYS5mb250KHMsaSl9ZWxzZSBhLnNlbGVjdGVkVGV4dFN0eWxlKHMsZSl9KX0odC5zZWxlY3RBbGwoXCJ0ZXh0XCIpLGUscil9KHIsaSx0KTpwKHIsaSx0KX0sZ2V0SW5zaWRlVGV4dEZvbnQ6bSxnZXRPdXRzaWRlVGV4dEZvbnQ6eSxnZXRCYXJDb2xvcjpifX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9hdHRyaWJ1dGVzXCI6ODM5LFwiLi9oZWxwZXJzXCI6ODQ0LGQzOjE1NX1dLDg1MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzXCIpLmhhc0NvbG9yc2NhbGUsYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMpe3IoXCJtYXJrZXIuY29sb3JcIixvKSxpKHQsXCJtYXJrZXJcIikmJmEodCxlLHMscix7cHJlZml4OlwibWFya2VyLlwiLGNMZXR0ZXI6XCJjXCJ9KSxyKFwibWFya2VyLmxpbmUuY29sb3JcIixuLmRlZmF1bHRMaW5lKSxpKHQsXCJtYXJrZXIubGluZVwiKSYmYSh0LGUscyxyLHtwcmVmaXg6XCJtYXJrZXIubGluZS5cIixjTGV0dGVyOlwiY1wifSkscihcIm1hcmtlci5saW5lLndpZHRoXCIpLHIoXCJtYXJrZXIub3BhY2l0eVwiKSxyKFwic2VsZWN0ZWQubWFya2VyLmNvbG9yXCIpLHIoXCJ1bnNlbGVjdGVkLm1hcmtlci5jb2xvclwiKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIjo1ODgsXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVyc1wiOjU4OX1dLDg1NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsYT10KFwiLi4vc2NhdHRlcnBvbGFyL2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vYmFyL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPXtyOmEucix0aGV0YTphLnRoZXRhLHIwOmEucjAsZHI6YS5kcix0aGV0YTA6YS50aGV0YTAsZHRoZXRhOmEuZHRoZXRhLHRoZXRhdW5pdDphLnRoZXRhdW5pdCxiYXNlOmkoe30sby5iYXNlLHt9KSxvZmZzZXQ6aSh7fSxvLm9mZnNldCx7fSksd2lkdGg6aSh7fSxvLndpZHRoLHt9KSx0ZXh0Omkoe30sby50ZXh0LHt9KSxob3ZlcnRleHQ6aSh7fSxvLmhvdmVydGV4dCx7fSksbWFya2VyOm8ubWFya2VyLGhvdmVyaW5mbzphLmhvdmVyaW5mbyxob3ZlcnRlbXBsYXRlOm4oKSxzZWxlY3RlZDpvLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6by51bnNlbGVjdGVkfX0se1wiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vYmFyL2F0dHJpYnV0ZXNcIjo4MzksXCIuLi9zY2F0dGVycG9sYXIvYXR0cmlidXRlc1wiOjExMTR9XSw4NTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnNcIikuaGFzQ29sb3JzY2FsZSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsY1wiKSxhPXQoXCIuLi9iYXIvYXJyYXlzX3RvX2NhbGNkYXRhXCIpLG89dChcIi4uL2Jhci9jcm9zc190cmFjZV9jYWxjXCIpLnNldEdyb3VwUG9zaXRpb25zLHM9dChcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIiksbD10KFwiLi4vLi4vcmVnaXN0cnlcIikudHJhY2VJcyxjPXQoXCIuLi8uLi9saWJcIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5fZnVsbExheW91dCxvPWUuc3VicGxvdCxsPXJbb10ucmFkaWFsYXhpcyxjPXJbb10uYW5ndWxhcmF4aXMsdT1sLm1ha2VDYWxjZGF0YShlLFwiclwiKSxoPWMubWFrZUNhbGNkYXRhKGUsXCJ0aGV0YVwiKSxmPWUuX2xlbmd0aCxwPW5ldyBBcnJheShmKSxkPXUsZz1oLHY9MDt2PGY7disrKXBbdl09e3A6Z1t2XSxzOmRbdl19O2Z1bmN0aW9uIG0odCl7dmFyIHI9ZVt0XTt2b2lkIDAhPT1yJiYoZVtcIl9cIit0XT1BcnJheS5pc0FycmF5KHIpP2MubWFrZUNhbGNkYXRhKGUsdCk6Yy5kMmMocixlLnRoZXRhdW5pdCkpfXJldHVyblwibGluZWFyXCI9PT1jLnR5cGUmJihtKFwid2lkdGhcIiksbShcIm9mZnNldFwiKSksbihlLFwibWFya2VyXCIpJiZpKHQsZSx7dmFsczplLm1hcmtlci5jb2xvcixjb250YWluZXJTdHI6XCJtYXJrZXJcIixjTGV0dGVyOlwiY1wifSksbihlLFwibWFya2VyLmxpbmVcIikmJmkodCxlLHt2YWxzOmUubWFya2VyLmxpbmUuY29sb3IsY29udGFpbmVyU3RyOlwibWFya2VyLmxpbmVcIixjTGV0dGVyOlwiY1wifSksYShwLGUpLHMocCxlKSxwfSxjcm9zc1RyYWNlQ2FsYzpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQuY2FsY2RhdGEsaT1bXSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBzPW5bYV0sdT1zWzBdLnRyYWNlOyEwPT09dS52aXNpYmxlJiZsKHUsXCJiYXJcIikmJnUuc3VicGxvdD09PXImJmkucHVzaChzKX12YXIgaD1jKHt9LGUucmFkaWFsYXhpcyx7X2lkOlwieFwifSksZj1lLmFuZ3VsYXJheGlzO28oe19mdWxsTGF5b3V0OmV9LGYsaCxpKX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsY1wiOjU4NixcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzXCI6NTg5LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9iYXIvYXJyYXlzX3RvX2NhbGNkYXRhXCI6ODM4LFwiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGNcIjo4NDIsXCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uXCI6MTA1NH1dLDg1NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vc2NhdHRlcnBvbGFyL2RlZmF1bHRzXCIpLmhhbmRsZVJUaGV0YURlZmF1bHRzLGE9dChcIi4uL2Jhci9zdHlsZV9kZWZhdWx0c1wiKSxvPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX1pKHQsZSxzLGwpPyhsKFwidGhldGF1bml0XCIpLGwoXCJiYXNlXCIpLGwoXCJvZmZzZXRcIiksbChcIndpZHRoXCIpLGwoXCJ0ZXh0XCIpLGwoXCJob3ZlcnRleHRcIiksbChcImhvdmVydGVtcGxhdGVcIiksYSh0LGUsbCxyLHMpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGwpKTplLnZpc2libGU9ITF9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9iYXIvc3R5bGVfZGVmYXVsdHNcIjo4NTMsXCIuLi9zY2F0dGVycG9sYXIvZGVmYXVsdHNcIjoxMTE2LFwiLi9hdHRyaWJ1dGVzXCI6ODU0fV0sODU3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uL2Jhci9ob3ZlclwiKS5nZXRUcmFjZUNvbG9yLG89dChcIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0XCIpLHM9dChcIi4uL3NjYXR0ZXJwb2xhci9ob3ZlclwiKS5tYWtlSG92ZXJQb2ludFRleHQsbD10KFwiLi4vLi4vcGxvdHMvcG9sYXIvaGVscGVyc1wiKS5pc1B0SW5zaWRlUG9seWdvbjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBjPXQuY2QsdT1jWzBdLnRyYWNlLGg9dC5zdWJwbG90LGY9aC5yYWRpYWxBeGlzLHA9aC5hbmd1bGFyQXhpcyxkPWgudmFuZ2xlcyxnPWQ/bDppLmlzUHRJbnNpZGVTZWN0b3Isdj10Lm1heEhvdmVyRGlzdGFuY2UsbT1wLl9wZXJpb2R8fDIqTWF0aC5QSSx5PU1hdGguYWJzKGYuZzJwKE1hdGguc3FydChlKmUrcipyKSkpLHg9TWF0aC5hdGFuMihyLGUpO2YucmFuZ2VbMF0+Zi5yYW5nZVsxXSYmKHgrPU1hdGguUEkpO2lmKG4uZ2V0Q2xvc2VzdChjLGZ1bmN0aW9uKHQpe3JldHVybiBnKHkseCxbdC5ycDAsdC5ycDFdLFt0LnRoZXRhZzAsdC50aGV0YWcxXSxkKT92K01hdGgubWluKDEsTWF0aC5hYnModC50aGV0YWcxLXQudGhldGFnMCkvbSktMSsodC5ycDEteSkvKHQucnAxLXQucnAwKS0xOjEvMH0sdCksITEhPT10LmluZGV4KXt2YXIgYj1jW3QuaW5kZXhdO3QueDA9dC54MT1iLmN0WzBdLHQueTA9dC55MT1iLmN0WzFdO3ZhciBfPWkuZXh0ZW5kRmxhdCh7fSxiLHtyOmIucyx0aGV0YTpiLnB9KTtyZXR1cm4gbyhiLHUsdCkscyhfLHUsaCx0KSx0LmhvdmVydGVtcGxhdGU9dS5ob3ZlcnRlbXBsYXRlLHQuY29sb3I9YSh1LGIpLHQueExhYmVsVmFsPXQueUxhYmVsVmFsPXZvaWQgMCxiLnM8MCYmKHQuaWRlYWxBbGlnbj1cImxlZnRcIiksW3RdfX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9wb2xhci9oZWxwZXJzXCI6ODEyLFwiLi4vYmFyL2hvdmVyXCI6ODQ1LFwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHRcIjoxMDYwLFwiLi4vc2NhdHRlcnBvbGFyL2hvdmVyXCI6MTExN31dLDg1ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17bW9kdWxlVHlwZTpcInRyYWNlXCIsbmFtZTpcImJhcnBvbGFyXCIsYmFzZVBsb3RNb2R1bGU6dChcIi4uLy4uL3Bsb3RzL3BvbGFyXCIpLGNhdGVnb3JpZXM6W1wicG9sYXJcIixcImJhclwiLFwic2hvd0xlZ2VuZFwiXSxhdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksbGF5b3V0QXR0cmlidXRlczp0KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxzdXBwbHlEZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KFwiLi9sYXlvdXRfZGVmYXVsdHNcIiksY2FsYzp0KFwiLi9jYWxjXCIpLmNhbGMsY3Jvc3NUcmFjZUNhbGM6dChcIi4vY2FsY1wiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OnQoXCIuL3Bsb3RcIiksY29sb3JiYXI6dChcIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyXCIpLHN0eWxlOnQoXCIuLi9iYXIvc3R5bGVcIikuc3R5bGUsaG92ZXJQb2ludHM6dChcIi4vaG92ZXJcIiksc2VsZWN0UG9pbnRzOnQoXCIuLi9iYXIvc2VsZWN0XCIpLG1ldGE6e319fSx7XCIuLi8uLi9wbG90cy9wb2xhclwiOjgxMyxcIi4uL2Jhci9zZWxlY3RcIjo4NTAsXCIuLi9iYXIvc3R5bGVcIjo4NTIsXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiOjEwNzAsXCIuL2F0dHJpYnV0ZXNcIjo4NTQsXCIuL2NhbGNcIjo4NTUsXCIuL2RlZmF1bHRzXCI6ODU2LFwiLi9ob3ZlclwiOjg1NyxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo4NTksXCIuL2xheW91dF9kZWZhdWx0c1wiOjg2MCxcIi4vcGxvdFwiOjg2MX1dLDg1OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17YmFybW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wic3RhY2tcIixcIm92ZXJsYXlcIl0sZGZsdDpcInN0YWNrXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGJhcmdhcDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6LjEsbWluOjAsbWF4OjEsZWRpdFR5cGU6XCJjYWxjXCJ9fX0se31dLDg2MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhLG89e307ZnVuY3Rpb24gcyhyLG8pe3JldHVybiBuLmNvZXJjZSh0W2FdfHx7fSxlW2FdLGkscixvKX1mb3IodmFyIGw9MDtsPHIubGVuZ3RoO2wrKyl7dmFyIGM9cltsXTtcImJhcnBvbGFyXCI9PT1jLnR5cGUmJiEwPT09Yy52aXNpYmxlJiYob1thPWMuc3VicGxvdF18fChzKFwiYmFybW9kZVwiKSxzKFwiYmFyZ2FwXCIpLG9bYV09MSkpfX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo4NTl9XSw4NjE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiZmFzdC1pc251bWVyaWNcIiksYT10KFwiLi4vLi4vbGliXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxzPXQoXCIuLi8uLi9wbG90cy9wb2xhci9oZWxwZXJzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGw9ZS54YXhpcyxjPWUueWF4aXMsdT1lLnJhZGlhbEF4aXMsaD1lLmFuZ3VsYXJBeGlzLGY9ZnVuY3Rpb24odCl7dmFyIGU9dC5jeHgscj10LmN5eTtpZih0LnZhbmdsZXMpcmV0dXJuIGZ1bmN0aW9uKG4saSxvLGwpe3ZhciBjLHU7YS5hbmdsZURlbHRhKG8sbCk+MD8oYz1vLHU9bCk6KGM9bCx1PW8pO3ZhciBoPXMuZmluZEVuY2xvc2luZ1ZlcnRleEFuZ2xlcyhjLHQudmFuZ2xlcylbMF0sZj1zLmZpbmRFbmNsb3NpbmdWZXJ0ZXhBbmdsZXModSx0LnZhbmdsZXMpWzFdLHA9W2gsKGMrdSkvMixmXTtyZXR1cm4gcy5wYXRoUG9seWdvbkFubnVsdXMobixpLGMsdSxwLGUscil9O3JldHVybiBmdW5jdGlvbih0LG4saSxvKXtyZXR1cm4gYS5wYXRoQW5udWx1cyh0LG4saSxvLGUscil9fShlKSxwPWUubGF5ZXJzLmZyb250cGxvdC5zZWxlY3QoXCJnLmJhcmxheWVyXCIpO2EubWFrZVRyYWNlR3JvdXBzKHAscixcInRyYWNlIGJhcnNcIikuZWFjaChmdW5jdGlvbihyKXt2YXIgcz1yWzBdLm5vZGUzPW4uc2VsZWN0KHRoaXMpLHA9YS5lbnN1cmVTaW5nbGUocyxcImdcIixcInBvaW50c1wiKS5zZWxlY3RBbGwoXCJnLnBvaW50XCIpLmRhdGEoYS5pZGVudGl0eSk7cC5lbnRlcigpLmFwcGVuZChcImdcIikuc3R5bGUoXCJ2ZWN0b3ItZWZmZWN0XCIsXCJub24tc2NhbGluZy1zdHJva2VcIikuc3R5bGUoXCJzdHJva2UtbWl0ZXJsaW1pdFwiLDIpLmNsYXNzZWQoXCJwb2ludFwiLCEwKSxwLmV4aXQoKS5yZW1vdmUoKSxwLmVhY2goZnVuY3Rpb24odCl7dmFyIGUscj1uLnNlbGVjdCh0aGlzKSxvPXQucnAwPXUuYzJwKHQuczApLHM9dC5ycDE9dS5jMnAodC5zMSkscD10LnRoZXRhZzA9aC5jMmcodC5wMCksZD10LnRoZXRhZzE9aC5jMmcodC5wMSk7aWYoaShvKSYmaShzKSYmaShwKSYmaShkKSYmbyE9PXMmJnAhPT1kKXt2YXIgZz11LmMyZyh0LnMxKSx2PShwK2QpLzI7dC5jdD1bbC5jMnAoZypNYXRoLmNvcyh2KSksYy5jMnAoZypNYXRoLnNpbih2KSldLGU9ZihvLHMscCxkKX1lbHNlIGU9XCJNMCwwWlwiO2EuZW5zdXJlU2luZ2xlKHIsXCJwYXRoXCIpLmF0dHIoXCJkXCIsZSl9KSxvLnNldENsaXBVcmwocyxlLl9oYXNDbGlwT25BeGlzRmFsc2U/ZS5jbGlwSWRzLmZvclRyYWNlczpudWxsLHQpfSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9wb2xhci9oZWxwZXJzXCI6ODEyLGQzOjE1NSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sODYyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi9iYXIvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LGw9bi5tYXJrZXIsYz1sLmxpbmU7ZS5leHBvcnRzPXt5Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx4Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx4MDp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx5MDp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSxuYW1lOnt2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LHRleHQ6cyh7fSxuLnRleHQse30pLGhvdmVydGV4dDpzKHt9LG4uaG92ZXJ0ZXh0LHt9KSxob3ZlcnRlbXBsYXRlOm8oe30pLHdoaXNrZXJ3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6LjUsZWRpdFR5cGU6XCJjYWxjXCJ9LG5vdGNoZWQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LG5vdGNod2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6LjUsZGZsdDouMjUsZWRpdFR5cGU6XCJjYWxjXCJ9LGJveHBvaW50czp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYWxsXCIsXCJvdXRsaWVyc1wiLFwic3VzcGVjdGVkb3V0bGllcnNcIiwhMV0sZGZsdDpcIm91dGxpZXJzXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGJveG1lYW46e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOlshMCxcInNkXCIsITFdLGRmbHQ6ITEsZWRpdFR5cGU6XCJjYWxjXCJ9LGppdHRlcjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGVkaXRUeXBlOlwiY2FsY1wifSxwb2ludHBvczp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjotMixtYXg6MixlZGl0VHlwZTpcImNhbGNcIn0sb3JpZW50YXRpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInZcIixcImhcIl0sZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifSxtYXJrZXI6e291dGxpZXJjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDpcInJnYmEoMCwgMCwgMCwgMClcIixlZGl0VHlwZTpcInN0eWxlXCJ9LHN5bWJvbDpzKHt9LGwuc3ltYm9sLHthcnJheU9rOiExLGVkaXRUeXBlOlwicGxvdFwifSksb3BhY2l0eTpzKHt9LGwub3BhY2l0eSx7YXJyYXlPazohMSxkZmx0OjEsZWRpdFR5cGU6XCJzdHlsZVwifSksc2l6ZTpzKHt9LGwuc2l6ZSx7YXJyYXlPazohMSxlZGl0VHlwZTpcImNhbGNcIn0pLGNvbG9yOnMoe30sbC5jb2xvcix7YXJyYXlPazohMSxlZGl0VHlwZTpcInN0eWxlXCJ9KSxsaW5lOntjb2xvcjpzKHt9LGMuY29sb3Ise2FycmF5T2s6ITEsZGZsdDphLmRlZmF1bHRMaW5lLGVkaXRUeXBlOlwic3R5bGVcIn0pLHdpZHRoOnMoe30sYy53aWR0aCx7YXJyYXlPazohMSxkZmx0OjAsZWRpdFR5cGU6XCJzdHlsZVwifSksb3V0bGllcmNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcInN0eWxlXCJ9LG91dGxpZXJ3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZTpcInN0eWxlXCJ9LGVkaXRUeXBlOlwic3R5bGVcIn0sZWRpdFR5cGU6XCJwbG90XCJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcInN0eWxlXCJ9LHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoyLGVkaXRUeXBlOlwic3R5bGVcIn0sZWRpdFR5cGU6XCJwbG90XCJ9LGZpbGxjb2xvcjpuLmZpbGxjb2xvcixvZmZzZXRncm91cDppLm9mZnNldGdyb3VwLGFsaWdubWVudGdyb3VwOmkuYWxpZ25tZW50Z3JvdXAsc2VsZWN0ZWQ6e21hcmtlcjpuLnNlbGVjdGVkLm1hcmtlcixlZGl0VHlwZTpcInN0eWxlXCJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjpuLnVuc2VsZWN0ZWQubWFya2VyLGVkaXRUeXBlOlwic3R5bGVcIn0saG92ZXJvbjp7dmFsVHlwZTpcImZsYWdsaXN0XCIsZmxhZ3M6W1wiYm94ZXNcIixcInBvaW50c1wiXSxkZmx0OlwiYm94ZXMrcG9pbnRzXCIsZWRpdFR5cGU6XCJzdHlsZVwifX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiOjU3NyxcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uL2Jhci9hdHRyaWJ1dGVzXCI6ODM5LFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCI6MTA1Mn1dLDg2MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuLi8uLi9saWJcIiksYT1pLl8sbz10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIik7ZnVuY3Rpb24gcyh0LGUscil7dmFyIG49e3RleHQ6XCJ0eFwiLGhvdmVydGV4dDpcImh0eFwifTtmb3IodmFyIGkgaW4gbilBcnJheS5pc0FycmF5KGVbaV0pJiYodFtuW2ldXT1lW2ldW3JdKX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQudi1lLnZ9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdC52fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLHUsaCxmLHAsZD10Ll9mdWxsTGF5b3V0LGc9by5nZXRGcm9tSWQodCxlLnhheGlzfHxcInhcIiksdj1vLmdldEZyb21JZCh0LGUueWF4aXN8fFwieVwiKSxtPVtdLHk9XCJ2aW9saW5cIj09PWUudHlwZT9cIl9udW1WaW9saW5zXCI6XCJfbnVtQm94ZXNcIjtcImhcIj09PWUub3JpZW50YXRpb24/KHU9ZyxoPVwieFwiLGY9dixwPVwieVwiKToodT12LGg9XCJ5XCIsZj1nLHA9XCJ4XCIpO3ZhciB4LGI9dS5tYWtlQ2FsY2RhdGEoZSxoKSxfPWZ1bmN0aW9uKHQsZSxyLGEsbyl7aWYoZSBpbiB0KXJldHVybiByLm1ha2VDYWxjZGF0YSh0LGUpO3ZhciBzO3M9ZStcIjBcImluIHQ/dFtlK1wiMFwiXTpcIm5hbWVcImluIHQmJihcImNhdGVnb3J5XCI9PT1yLnR5cGV8fG4odC5uYW1lKSYmLTEhPT1bXCJsaW5lYXJcIixcImxvZ1wiXS5pbmRleE9mKHIudHlwZSl8fGkuaXNEYXRlVGltZSh0Lm5hbWUpJiZcImRhdGVcIj09PXIudHlwZSk/dC5uYW1lOm87dmFyIGw9XCJtdWx0aWNhdGVnb3J5XCI9PT1yLnR5cGU/ci5yMmNfanVzdF9pbmRpY2VzKHMpOnIuZDJjKHMsMCx0W2UrXCJjYWxlbmRhclwiXSk7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGx9KX0oZSxwLGYsYixkW3ldKSx3PWkuZGlzdGluY3RWYWxzKF8pLGs9dy52YWxzLEE9dy5taW5EaWZmLzIsVD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKzEpLGk9MDtpPHI7aSsrKW5baV09dFtpXS1lO3JldHVybiBuW3JdPXRbci0xXStlLG59KGssQSksTT1rLmxlbmd0aCxTPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT1bXTtyZXR1cm4gZX0oTSk7Zm9yKHI9MDtyPGUuX2xlbmd0aDtyKyspe3ZhciBFPWJbcl07aWYobihFKSl7dmFyIEM9aS5maW5kQmluKF9bcl0sVCk7aWYoQz49MCYmQzxNKXt2YXIgTD17djpFLGk6cn07cyhMLGUsciksU1tDXS5wdXNoKEwpfX19dmFyIHo9XCJhbGxcIj09PShlLmJveHBvaW50c3x8ZS5wb2ludHMpP2kuaWRlbnRpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHQudjx4LmxmfHx0LnY+eC51Zn07Zm9yKHI9MDtyPE07cisrKWlmKFNbcl0ubGVuZ3RoPjApe3ZhciBPPVNbcl0uc29ydChsKSxJPU8ubWFwKGMpLEQ9SS5sZW5ndGg7KHg9e30pLnBvcz1rW3JdLHgucHRzPU8seC5taW49SVswXSx4Lm1heD1JW0QtMV0seC5tZWFuPWkubWVhbihJLEQpLHguc2Q9aS5zdGRldihJLEQseC5tZWFuKSx4LnExPWkuaW50ZXJwKEksLjI1KSx4Lm1lZD1pLmludGVycChJLC41KSx4LnEzPWkuaW50ZXJwKEksLjc1KSx4LmxmPU1hdGgubWluKHgucTEsSVtNYXRoLm1pbihpLmZpbmRCaW4oMi41KngucTEtMS41KngucTMsSSwhMCkrMSxELTEpXSkseC51Zj1NYXRoLm1heCh4LnEzLElbTWF0aC5tYXgoaS5maW5kQmluKDIuNSp4LnEzLTEuNSp4LnExLEkpLDApXSkseC5sbz00KngucTEtMyp4LnEzLHgudW89NCp4LnEzLTMqeC5xMTt2YXIgUD0xLjU3Kih4LnEzLXgucTEpL01hdGguc3FydChEKTt4LmxuPXgubWVkLVAseC51bj14Lm1lZCtQLHgucHRzMj1PLmZpbHRlcih6KSxtLnB1c2goeCl9IWZ1bmN0aW9uKHQsZSl7aWYoaS5pc0FycmF5T3JUeXBlZEFycmF5KGUuc2VsZWN0ZWRwb2ludHMpKWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXtmb3IodmFyIG49dFtyXS5wdHN8fFtdLGE9e30sbz0wO288bi5sZW5ndGg7bysrKWFbbltvXS5pXT1vO2kudGFnU2VsZWN0ZWQobixlLGEpfX0obSxlKTt2YXIgUj1vLmZpbmRFeHRyZW1lcyh1LGIse3BhZGRlZDohMH0pO3JldHVybiBlLl9leHRyZW1lc1t1Ll9pZF09UixtLmxlbmd0aD4wPyhtWzBdLnQ9e251bTpkW3ldLGRQb3M6QSxwb3NMZXR0ZXI6cCx2YWxMZXR0ZXI6aCxsYWJlbHM6e21lZDphKHQsXCJtZWRpYW46XCIpLG1pbjphKHQsXCJtaW46XCIpLHExOmEodCxcInExOlwiKSxxMzphKHQsXCJxMzpcIiksbWF4OmEodCxcIm1heDpcIiksbWVhbjpcInNkXCI9PT1lLmJveG1lYW4/YSh0LFwibWVhbiBcXHhiMSBcXHUwM2MzOlwiKTphKHQsXCJtZWFuOlwiKSxsZjphKHQsXCJsb3dlciBmZW5jZTpcIiksdWY6YSh0LFwidXBwZXIgZmVuY2U6XCIpfX0sZFt5XSsrLG0pOlt7dDp7ZW1wdHk6ITB9fV19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sODY0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIikuZ2V0QXhpc0dyb3VwLG89W1widlwiLFwiaFwiXTtmdW5jdGlvbiBzKHQsZSxyLG8pe3ZhciBzLGwsYyx1PWUuY2FsY2RhdGEsaD1lLl9mdWxsTGF5b3V0LGY9by5faWQscD1mLmNoYXJBdCgwKSxkPVtdLGc9MDtmb3Iocz0wO3M8ci5sZW5ndGg7cysrKWZvcihjPXVbcltzXV0sbD0wO2w8Yy5sZW5ndGg7bCsrKWQucHVzaChjW2xdLnBvcyksZys9KGNbbF0ucHRzMnx8W10pLmxlbmd0aDtpZihkLmxlbmd0aCl7dmFyIHY9aS5kaXN0aW5jdFZhbHMoZCksbT12Lm1pbkRpZmYvMjtuLm1pbkR0aWNrKG8sdi5taW5EaWZmLHYudmFsc1swXSwhMCk7dmFyIHk9aFtcInZpb2xpblwiPT09dD9cIl9udW1WaW9saW5zXCI6XCJfbnVtQm94ZXNcIl0seD1cImdyb3VwXCI9PT1oW3QrXCJtb2RlXCJdJiZ5PjEsYj0xLWhbdCtcImdhcFwiXSxfPTEtaFt0K1wiZ3JvdXBnYXBcIl07Zm9yKHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIHcsayxBLFQsTSxTLEU9KGM9dVtyW3NdXSlbMF0udHJhY2UsQz1jWzBdLnQsTD1FLndpZHRoLHo9RS5zaWRlO2lmKEwpdz1rPVQ9TC8yLEE9MDtlbHNlIGlmKHc9bSx4KXt2YXIgTz1hKGgsby5faWQpK0Uub3JpZW50YXRpb24sST0oaC5fYWxpZ25tZW50T3B0c1tPXXx8e30pW0UuYWxpZ25tZW50Z3JvdXBdfHx7fSxEPU9iamVjdC5rZXlzKEkub2Zmc2V0R3JvdXBzfHx7fSkubGVuZ3RoLFA9RHx8eTtrPXcqYipfL1AsQT0yKncqKCgoRD9FLl9vZmZzZXRJbmRleDpDLm51bSkrLjUpL1AtLjUpKmIsVD13KmIvUH1lbHNlIGs9dypiKl8sQT0wLFQ9dztDLmRQb3M9dyxDLmJQb3M9QSxDLmJkUG9zPWssQy53SG92ZXI9VDt2YXIgUixGLEIsTixqLFYsVT1BK2s7XCJwb3NpdGl2ZVwiPT09ej8oTT13KihMPzE6LjUpLFI9VSxTPVI9QSk6XCJuZWdhdGl2ZVwiPT09ej8oTT1SPUEsUz13KihMPzE6LjUpLEY9VSk6KE09Uz13LFI9Rj1VKTt2YXIgcT0hMTtpZigoRS5ib3hwb2ludHN8fEUucG9pbnRzKSYmZz4wKXt2YXIgSD1FLnBvaW50cG9zLEc9RS5qaXR0ZXIsWT1FLm1hcmtlci5zaXplLzIsVz0wO0grRz49MCYmKChXPVUqKEgrRykpPk0/KHE9ITAsaj1ZLEI9Vyk6Vz5SJiYoaj1ZLEI9TSkpLFc8PU0mJihCPU0pO3ZhciBYPTA7SC1HPD0wJiYoKFg9LVUqKEgtRykpPlM/KHE9ITAsVj1ZLE49WCk6WD5GJiYoVj1ZLE49UykpLFg8PVMmJihOPVMpfWVsc2UgQj1NLE49Uzt2YXIgWj1uZXcgQXJyYXkoYy5sZW5ndGgpO2ZvcihsPTA7bDxjLmxlbmd0aDtsKyspWltsXT1jW2xdLnBvcztFLl9leHRyZW1lc1tmXT1uLmZpbmRFeHRyZW1lcyhvLFose3BhZGRlZDpxLHZwYWRtaW51czpOLHZwYWRwbHVzOkIscHBhZG1pbnVzOnt4OlYseTpqfVtwXSxwcGFkcGx1czp7eDpqLHk6Vn1bcF19KX19fWUuZXhwb3J0cz17Y3Jvc3NUcmFjZUNhbGM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jYWxjZGF0YSxuPWUueGF4aXMsaT1lLnlheGlzLGE9MDthPG8ubGVuZ3RoO2ErKyl7Zm9yKHZhciBsPW9bYV0sYz1cImhcIj09PWw/aTpuLHU9W10saD0wO2g8ci5sZW5ndGg7aCsrKXt2YXIgZj1yW2hdLHA9ZlswXS50LGQ9ZlswXS50cmFjZTshMCE9PWQudmlzaWJsZXx8XCJib3hcIiE9PWQudHlwZSYmXCJjYW5kbGVzdGlja1wiIT09ZC50eXBlfHxwLmVtcHR5fHwoZC5vcmllbnRhdGlvbnx8XCJ2XCIpIT09bHx8ZC54YXhpcyE9PW4uX2lkfHxkLnlheGlzIT09aS5faWR8fHUucHVzaChoKX1zKFwiYm94XCIsdCx1LGMpfX0sc2V0UG9zaXRpb25PZmZzZXQ6c319LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCI6NzUyfV0sODY1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLG89dChcIi4uL2Jhci9kZWZhdWx0c1wiKS5oYW5kbGVHcm91cGluZ0RlZmF1bHRzLHM9dChcIi4vYXR0cmlidXRlc1wiKTtmdW5jdGlvbiBsKHQsZSxyLGEpe3ZhciBvLHMsbD1yKFwieVwiKSxjPXIoXCJ4XCIpLHU9YyYmYy5sZW5ndGg7aWYobCYmbC5sZW5ndGgpbz1cInZcIix1P3M9TWF0aC5taW4obi5taW5Sb3dMZW5ndGgoYyksbi5taW5Sb3dMZW5ndGgobCkpOihyKFwieDBcIikscz1uLm1pblJvd0xlbmd0aChsKSk7ZWxzZXtpZighdSlyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO289XCJoXCIscihcInkwXCIpLHM9bi5taW5Sb3dMZW5ndGgoYyl9ZS5fbGVuZ3RoPXMsaS5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcImhhbmRsZVRyYWNlRGVmYXVsdHNcIikodCxlLFtcInhcIixcInlcIl0sYSkscihcIm9yaWVudGF0aW9uXCIsbyl9ZnVuY3Rpb24gYyh0LGUscixpKXt2YXIgYT1pLnByZWZpeCxvPW4uY29lcmNlMih0LGUscyxcIm1hcmtlci5vdXRsaWVyY29sb3JcIiksbD1yKFwibWFya2VyLmxpbmUub3V0bGllcmNvbG9yXCIpLGM9cihhK1wicG9pbnRzXCIsb3x8bD9cInN1c3BlY3RlZG91dGxpZXJzXCI6dm9pZCAwKTtjPyhyKFwiaml0dGVyXCIsXCJhbGxcIj09PWM/LjM6MCkscihcInBvaW50cG9zXCIsXCJhbGxcIj09PWM/LTEuNTowKSxyKFwibWFya2VyLnN5bWJvbFwiKSxyKFwibWFya2VyLm9wYWNpdHlcIikscihcIm1hcmtlci5zaXplXCIpLHIoXCJtYXJrZXIuY29sb3JcIixlLmxpbmUuY29sb3IpLHIoXCJtYXJrZXIubGluZS5jb2xvclwiKSxyKFwibWFya2VyLmxpbmUud2lkdGhcIiksXCJzdXNwZWN0ZWRvdXRsaWVyc1wiPT09YyYmKHIoXCJtYXJrZXIubGluZS5vdXRsaWVyY29sb3JcIixlLm1hcmtlci5jb2xvcikscihcIm1hcmtlci5saW5lLm91dGxpZXJ3aWR0aFwiKSkscihcInNlbGVjdGVkLm1hcmtlci5jb2xvclwiKSxyKFwidW5zZWxlY3RlZC5tYXJrZXIuY29sb3JcIikscihcInNlbGVjdGVkLm1hcmtlci5zaXplXCIpLHIoXCJ1bnNlbGVjdGVkLm1hcmtlci5zaXplXCIpLHIoXCJ0ZXh0XCIpLHIoXCJob3ZlcnRleHRcIikpOmRlbGV0ZSBlLm1hcmtlcjt2YXIgdT1yKFwiaG92ZXJvblwiKTtcImFsbFwiIT09dSYmLTE9PT11LmluZGV4T2YoXCJwb2ludHNcIil8fHIoXCJob3ZlcnRlbXBsYXRlXCIpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHIpfWUuZXhwb3J0cz17c3VwcGx5RGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIsaSl7ZnVuY3Rpb24gbyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfWwodCxlLG8saSksITEhPT1lLnZpc2libGUmJihvKFwibGluZS5jb2xvclwiLCh0Lm1hcmtlcnx8e30pLmNvbG9yfHxyKSxvKFwibGluZS53aWR0aFwiKSxvKFwiZmlsbGNvbG9yXCIsYS5hZGRPcGFjaXR5KGUubGluZS5jb2xvciwuNSkpLG8oXCJ3aGlza2Vyd2lkdGhcIiksbyhcImJveG1lYW5cIiksbyhcIndpZHRoXCIpLG8oXCJub3RjaGVkXCIsdm9pZCAwIT09dC5ub3RjaHdpZHRoKSYmbyhcIm5vdGNod2lkdGhcIiksYyh0LGUsbyx7cHJlZml4OlwiYm94XCJ9KSl9LGNyb3NzVHJhY2VEZWZhdWx0czpmdW5jdGlvbih0LGUpe3ZhciByLGk7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gbi5jb2VyY2UoaS5faW5wdXQsaSxzLHQpfWZvcih2YXIgbD0wO2w8dC5sZW5ndGg7bCsrKXt2YXIgYz0oaT10W2xdKS50eXBlO1wiYm94XCIhPT1jJiZcInZpb2xpblwiIT09Y3x8KHI9aS5faW5wdXQsXCJncm91cFwiPT09ZVtjK1wibW9kZVwiXSYmbyhyLGksZSxhKSl9fSxoYW5kbGVTYW1wbGVEZWZhdWx0czpsLGhhbmRsZVBvaW50c0RlZmF1bHRzOmN9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9iYXIvZGVmYXVsdHNcIjo4NDMsXCIuL2F0dHJpYnV0ZXNcIjo4NjJ9XSw4NjY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5ob3Zlck9uQm94JiYodC5ob3Zlck9uQm94PWUuaG92ZXJPbkJveCksXCJ4VmFsXCJpbiBlJiYodC54PWUueFZhbCksXCJ5VmFsXCJpbiBlJiYodC55PWUueVZhbCksZS54YSYmKHQueGF4aXM9ZS54YSksZS55YSYmKHQueWF4aXM9ZS55YSksdH19LHt9XSw4Njc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxzPXQoXCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dFwiKTtmdW5jdGlvbiBsKHQsZSxyLHMpe3ZhciBsLGMsdSxoLGYscCxkLGcsdixtLHkseCxiPXQuY2QsXz10LnhhLHc9dC55YSxrPWJbMF0udHJhY2UsQT1iWzBdLnQsVD1cInZpb2xpblwiPT09ay50eXBlLE09W10sUz1BLmJkUG9zLEU9QS53SG92ZXIsQz1mdW5jdGlvbih0KXtyZXR1cm4gdC5wb3MrQS5iUG9zLXB9O1QmJlwiYm90aFwiIT09ay5zaWRlPyhcInBvc2l0aXZlXCI9PT1rLnNpZGUmJih2PWZ1bmN0aW9uKHQpe3ZhciBlPUModCk7cmV0dXJuIGEuaW5ib3goZSxlK0UsbSl9KSxcIm5lZ2F0aXZlXCI9PT1rLnNpZGUmJih2PWZ1bmN0aW9uKHQpe3ZhciBlPUModCk7cmV0dXJuIGEuaW5ib3goZS1FLGUsbSl9KSk6dj1mdW5jdGlvbih0KXt2YXIgZT1DKHQpO3JldHVybiBhLmluYm94KGUtRSxlK0UsbSl9LHg9VD9mdW5jdGlvbih0KXtyZXR1cm4gYS5pbmJveCh0LnNwYW5bMF0tZix0LnNwYW5bMV0tZixtKX06ZnVuY3Rpb24odCl7cmV0dXJuIGEuaW5ib3godC5taW4tZix0Lm1heC1mLG0pfSxcImhcIj09PWsub3JpZW50YXRpb24/KGY9ZSxwPXIsZD14LGc9dixsPVwieVwiLHU9dyxjPVwieFwiLGg9Xyk6KGY9cixwPWUsZD12LGc9eCxsPVwieFwiLHU9XyxjPVwieVwiLGg9dyk7dmFyIEw9TWF0aC5taW4oMSxTL01hdGguYWJzKHUucjJjKHUucmFuZ2VbMV0pLXUucjJjKHUucmFuZ2VbMF0pKSk7ZnVuY3Rpb24geih0KXtyZXR1cm4oZCh0KStnKHQpKS8yfW09dC5tYXhIb3ZlckRpc3RhbmNlLUwseT10Lm1heFNwaWtlRGlzdGFuY2UtTDt2YXIgTz1hLmdldERpc3RhbmNlRnVuY3Rpb24ocyxkLGcseik7aWYoYS5nZXRDbG9zZXN0KGIsTyx0KSwhMT09PXQuaW5kZXgpcmV0dXJuW107dmFyIEk9Ylt0LmluZGV4XSxEPWsubGluZS5jb2xvcixQPShrLm1hcmtlcnx8e30pLmNvbG9yO28ub3BhY2l0eShEKSYmay5saW5lLndpZHRoP3QuY29sb3I9RDpvLm9wYWNpdHkoUCkmJmsuYm94cG9pbnRzP3QuY29sb3I9UDp0LmNvbG9yPWsuZmlsbGNvbG9yLHRbbCtcIjBcIl09dS5jMnAoSS5wb3MrQS5iUG9zLVMsITApLHRbbCtcIjFcIl09dS5jMnAoSS5wb3MrQS5iUG9zK1MsITApLHRbbCtcIkxhYmVsVmFsXCJdPUkucG9zO3ZhciBSPWwrXCJTcGlrZVwiO3Quc3Bpa2VEaXN0YW5jZT16KEkpKnkvbSx0W1JdPXUuYzJwKEkucG9zLCEwKTt2YXIgRj17fSxCPVtcIm1lZFwiLFwibWluXCIsXCJxMVwiLFwicTNcIixcIm1heFwiXTsoay5ib3htZWFufHwoay5tZWFubGluZXx8e30pLnZpc2libGUpJiZCLnB1c2goXCJtZWFuXCIpLChrLmJveHBvaW50c3x8ay5wb2ludHMpJiZCLnB1c2goXCJsZlwiLFwidWZcIik7Zm9yKHZhciBOPTA7TjxCLmxlbmd0aDtOKyspe3ZhciBqPUJbTl07aWYoaiBpbiBJJiYhKElbal1pbiBGKSl7RltJW2pdXT0hMDt2YXIgVj1JW2pdLFU9aC5jMnAoViwhMCkscT1pLmV4dGVuZEZsYXQoe30sdCk7cVtjK1wiMFwiXT1xW2MrXCIxXCJdPVUscVtjK1wiTGFiZWxWYWxcIl09VixxW2MrXCJMYWJlbFwiXT0oQS5sYWJlbHM/QS5sYWJlbHNbal0rXCIgXCI6XCJcIikrbi5ob3ZlckxhYmVsVGV4dChoLFYpLHEuaG92ZXJPbkJveD0hMCxcIm1lYW5cIj09PWomJlwic2RcImluIEkmJlwic2RcIj09PWsuYm94bWVhbiYmKHFbYytcImVyclwiXT1JLnNkKSx0Lm5hbWU9XCJcIix0LnNwaWtlRGlzdGFuY2U9dm9pZCAwLHRbUl09dm9pZCAwLHEuaG92ZXJ0ZW1wbGF0ZT0hMSxNLnB1c2gocSl9fXJldHVybiBNfWZ1bmN0aW9uIGModCxlLHIpe2Zvcih2YXIgbixvLGwsYz10LmNkLHU9dC54YSxoPXQueWEsZj1jWzBdLnRyYWNlLHA9dS5jMnAoZSksZD1oLmMycChyKSxnPWEucXVhZHJhdHVyZShmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnModS5jMnAodC54KS1wKS1lLDEtMy9lKX0sZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMyx0Lm1yY3x8MCk7cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKGguYzJwKHQueSktZCktZSwxLTMvZSl9KSx2PSExLG09MDttPGMubGVuZ3RoO20rKyl7bz1jW21dO2Zvcih2YXIgeT0wO3k8KG8ucHRzfHxbXSkubGVuZ3RoO3krKyl7dmFyIHg9ZyhsPW8ucHRzW3ldKTt4PD10LmRpc3RhbmNlJiYodC5kaXN0YW5jZT14LHY9W20seV0pfX1pZighdilyZXR1cm4hMTtsPShvPWNbdlswXV0pLnB0c1t2WzFdXTt2YXIgYixfPXUuYzJwKGwueCwhMCksdz1oLmMycChsLnksITApLGs9bC5tcmN8fDE7cmV0dXJuIG49aS5leHRlbmRGbGF0KHt9LHQse2luZGV4OmwuaSxjb2xvcjooZi5tYXJrZXJ8fHt9KS5jb2xvcixuYW1lOmYubmFtZSx4MDpfLWsseDE6XytrLHkwOnctayx5MTp3K2ssc3Bpa2VEaXN0YW5jZTp0LmRpc3RhbmNlLGhvdmVydGVtcGxhdGU6Zi5ob3ZlcnRlbXBsYXRlfSksXCJoXCI9PT1mLm9yaWVudGF0aW9uPyhiPWgsbi54TGFiZWxWYWw9bC54LG4ueUxhYmVsVmFsPW8ucG9zKTooYj11LG4ueExhYmVsVmFsPW8ucG9zLG4ueUxhYmVsVmFsPWwueSksbltiLl9pZC5jaGFyQXQoMCkrXCJTcGlrZVwiXT1iLmMycChvLnBvcywhMCkscyhsLGYsbiksbn1lLmV4cG9ydHM9e2hvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9dC5jZFswXS50cmFjZS5ob3Zlcm9uLG89W107cmV0dXJuLTEhPT1hLmluZGV4T2YoXCJib3hlc1wiKSYmKG89by5jb25jYXQobCh0LGUscixuKSkpLC0xIT09YS5pbmRleE9mKFwicG9pbnRzXCIpJiYoaT1jKHQsZSxyKSksXCJjbG9zZXN0XCI9PT1uP2k/W2ldOm86aT8oby5wdXNoKGkpLG8pOm99LGhvdmVyT25Cb3hlczpsLGhvdmVyT25Qb2ludHM6Y319LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2Z4XCI6NjE3LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dFwiOjEwNjB9XSw4Njg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLmxheW91dEF0dHJpYnV0ZXM9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKS5zdXBwbHlEZWZhdWx0cyxuLmNyb3NzVHJhY2VEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKS5jcm9zc1RyYWNlRGVmYXVsdHMsbi5zdXBwbHlMYXlvdXREZWZhdWx0cz10KFwiLi9sYXlvdXRfZGVmYXVsdHNcIikuc3VwcGx5TGF5b3V0RGVmYXVsdHMsbi5jYWxjPXQoXCIuL2NhbGNcIiksbi5jcm9zc1RyYWNlQ2FsYz10KFwiLi9jcm9zc190cmFjZV9jYWxjXCIpLmNyb3NzVHJhY2VDYWxjLG4ucGxvdD10KFwiLi9wbG90XCIpLnBsb3Qsbi5zdHlsZT10KFwiLi9zdHlsZVwiKS5zdHlsZSxuLnN0eWxlT25TZWxlY3Q9dChcIi4vc3R5bGVcIikuc3R5bGVPblNlbGVjdCxuLmhvdmVyUG9pbnRzPXQoXCIuL2hvdmVyXCIpLmhvdmVyUG9pbnRzLG4uZXZlbnREYXRhPXQoXCIuL2V2ZW50X2RhdGFcIiksbi5zZWxlY3RQb2ludHM9dChcIi4vc2VsZWN0XCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwiYm94XCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCIpLG4uY2F0ZWdvcmllcz1bXCJjYXJ0ZXNpYW5cIixcInN2Z1wiLFwic3ltYm9sc1wiLFwib3JpZW50ZWRcIixcImJveC12aW9saW5cIixcInNob3dMZWdlbmRcIixcImJveExheW91dFwiLFwiem9vbVNjYWxlXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi9hdHRyaWJ1dGVzXCI6ODYyLFwiLi9jYWxjXCI6ODYzLFwiLi9jcm9zc190cmFjZV9jYWxjXCI6ODY0LFwiLi9kZWZhdWx0c1wiOjg2NSxcIi4vZXZlbnRfZGF0YVwiOjg2NixcIi4vaG92ZXJcIjo4NjcsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6ODY5LFwiLi9sYXlvdXRfZGVmYXVsdHNcIjo4NzAsXCIuL3Bsb3RcIjo4NzEsXCIuL3NlbGVjdFwiOjg3MixcIi4vc3R5bGVcIjo4NzN9XSw4Njk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e2JveG1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImdyb3VwXCIsXCJvdmVybGF5XCJdLGRmbHQ6XCJvdmVybGF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGJveGdhcDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6LjMsZWRpdFR5cGU6XCJjYWxjXCJ9LGJveGdyb3VwZ2FwOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDouMyxlZGl0VHlwZTpcImNhbGNcIn19fSx7fV0sODcwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpO2Z1bmN0aW9uIG8odCxlLHIsaSxhKXtmb3IodmFyIG89YStcIkxheW91dFwiLHM9ITEsbD0wO2w8ci5sZW5ndGg7bCsrKXt2YXIgYz1yW2xdO2lmKG4udHJhY2VJcyhjLG8pKXtzPSEwO2JyZWFrfX1zJiYoaShhK1wibW9kZVwiKSxpKGErXCJnYXBcIiksaShhK1wiZ3JvdXBnYXBcIikpfWUuZXhwb3J0cz17c3VwcGx5TGF5b3V0RGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIpe28oMCwwLHIsZnVuY3Rpb24ocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLGEscixuKX0sXCJib3hcIil9LF9zdXBwbHk6b319LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjg2OX1dLDg3MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLG89NSxzPS4wMTtmdW5jdGlvbiBsKHQsZSxyLGEpe3ZhciBvLHMsbD1lLnBvcyxjPWUudmFsLHU9YS5iUG9zLGg9YS53ZFBvc3x8MCxmPWEuYlBvc1B4T2Zmc2V0fHwwLHA9ci53aGlza2Vyd2lkdGh8fDAsZD1yLm5vdGNoZWR8fCExLGc9ZD8xLTIqci5ub3RjaHdpZHRoOjE7QXJyYXkuaXNBcnJheShhLmJkUG9zKT8obz1hLmJkUG9zWzBdLHM9YS5iZFBvc1sxXSk6KG89YS5iZFBvcyxzPWEuYmRQb3MpO3ZhciB2PXQuc2VsZWN0QWxsKFwicGF0aC5ib3hcIikuZGF0YShcInZpb2xpblwiIT09ci50eXBlfHxyLmJveC52aXNpYmxlP2kuaWRlbnRpdHk6W10pO3YuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLnN0eWxlKFwidmVjdG9yLWVmZmVjdFwiLFwibm9uLXNjYWxpbmctc3Ryb2tlXCIpLmF0dHIoXCJjbGFzc1wiLFwiYm94XCIpLHYuZXhpdCgpLnJlbW92ZSgpLHYuZWFjaChmdW5jdGlvbih0KXtpZih0LmVtcHR5KXJldHVyblwiTTAsMFpcIjt2YXIgZT10LnBvcyxhPWwuYzJwKGUrdSwhMCkrZix2PWwuYzJwKGUrdS1vLCEwKStmLG09bC5jMnAoZSt1K3MsITApK2YseT1sLmMycChlK3UtaCwhMCkrZix4PWwuYzJwKGUrdStoLCEwKStmLGI9bC5jMnAoZSt1LW8qZywhMCkrZixfPWwuYzJwKGUrdStzKmcsITApK2Ysdz1jLmMycCh0LnExLCEwKSxrPWMuYzJwKHQucTMsITApLEE9aS5jb25zdHJhaW4oYy5jMnAodC5tZWQsITApLE1hdGgubWluKHcsaykrMSxNYXRoLm1heCh3LGspLTEpLFQ9dm9pZCAwPT09dC5sZnx8ITE9PT1yLmJveHBvaW50cyxNPWMuYzJwKFQ/dC5taW46dC5sZiwhMCksUz1jLmMycChUP3QubWF4OnQudWYsITApLEU9Yy5jMnAodC5sbiwhMCksQz1jLmMycCh0LnVuLCEwKTtcImhcIj09PXIub3JpZW50YXRpb24/bi5zZWxlY3QodGhpcykuYXR0cihcImRcIixcIk1cIitBK1wiLFwiK2IrXCJWXCIrXytcIk1cIit3K1wiLFwiK3YrXCJWXCIrbSsoZD9cIkhcIitFK1wiTFwiK0ErXCIsXCIrXytcIkxcIitDK1wiLFwiK206XCJcIikrXCJIXCIraytcIlZcIit2KyhkP1wiSFwiK0MrXCJMXCIrQStcIixcIitiK1wiTFwiK0UrXCIsXCIrdjpcIlwiKStcIlpNXCIrdytcIixcIithK1wiSFwiK00rXCJNXCIraytcIixcIithK1wiSFwiK1MrKDA9PT1wP1wiXCI6XCJNXCIrTStcIixcIit5K1wiVlwiK3grXCJNXCIrUytcIixcIit5K1wiVlwiK3gpKTpuLnNlbGVjdCh0aGlzKS5hdHRyKFwiZFwiLFwiTVwiK2IrXCIsXCIrQStcIkhcIitfK1wiTVwiK3YrXCIsXCIrdytcIkhcIittKyhkP1wiVlwiK0UrXCJMXCIrXytcIixcIitBK1wiTFwiK20rXCIsXCIrQzpcIlwiKStcIlZcIitrK1wiSFwiK3YrKGQ/XCJWXCIrQytcIkxcIitiK1wiLFwiK0ErXCJMXCIrditcIixcIitFOlwiXCIpK1wiWk1cIithK1wiLFwiK3crXCJWXCIrTStcIk1cIithK1wiLFwiK2srXCJWXCIrUysoMD09PXA/XCJcIjpcIk1cIit5K1wiLFwiK00rXCJIXCIreCtcIk1cIit5K1wiLFwiK1MrXCJIXCIreCkpfSl9ZnVuY3Rpb24gYyh0LGUscixuKXt2YXIgbD1lLngsYz1lLnksdT1uLmJkUG9zLGg9bi5iUG9zLGY9ci5ib3hwb2ludHN8fHIucG9pbnRzO2kuc2VlZFBzZXVkb1JhbmRvbSgpO3ZhciBwPXQuc2VsZWN0QWxsKFwiZy5wb2ludHNcIikuZGF0YShmP2Z1bmN0aW9uKHQpe3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7dC50PW4sdC50cmFjZT1yfSksdH06W10pO3AuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLFwicG9pbnRzXCIpLHAuZXhpdCgpLnJlbW92ZSgpO3ZhciBkPXAuc2VsZWN0QWxsKFwicGF0aFwiKS5kYXRhKGZ1bmN0aW9uKHQpe3ZhciBlLG4sYT10LnB0czIsbD1NYXRoLm1heCgodC5tYXgtdC5taW4pLzEwLHQucTMtdC5xMSksYz0xZS05KmwscD1sKnMsZD1bXSxnPTA7aWYoci5qaXR0ZXIpe2lmKDA9PT1sKWZvcihnPTEsZD1uZXcgQXJyYXkoYS5sZW5ndGgpLGU9MDtlPGEubGVuZ3RoO2UrKylkW2VdPTE7ZWxzZSBmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgdj1NYXRoLm1heCgwLGUtbyksbT1hW3ZdLnYseT1NYXRoLm1pbihhLmxlbmd0aC0xLGUrbykseD1hW3ldLnY7XCJhbGxcIiE9PWYmJihhW2VdLnY8dC5sZj94PU1hdGgubWluKHgsdC5sZik6bT1NYXRoLm1heChtLHQudWYpKTt2YXIgYj1NYXRoLnNxcnQocCooeS12KS8oeC1tK2MpKXx8MDtiPWkuY29uc3RyYWluKE1hdGguYWJzKGIpLDAsMSksZC5wdXNoKGIpLGc9TWF0aC5tYXgoYixnKX1uPTIqci5qaXR0ZXIvKGd8fDEpfWZvcihlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciBfPWFbZV0sdz1fLnYsaz1yLmppdHRlcj9uKmRbZV0qKGkucHNldWRvUmFuZG9tKCktLjUpOjAsQT10LnBvcytoK3UqKHIucG9pbnRwb3Mrayk7XCJoXCI9PT1yLm9yaWVudGF0aW9uPyhfLnk9QSxfLng9dyk6KF8ueD1BLF8ueT13KSxcInN1c3BlY3RlZG91dGxpZXJzXCI9PT1mJiZ3PHQudW8mJnc+dC5sbyYmKF8uc289ITApfXJldHVybiBhfSk7ZC5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChcInBvaW50XCIsITApLGQuZXhpdCgpLnJlbW92ZSgpLGQuY2FsbChhLnRyYW5zbGF0ZVBvaW50cyxsLGMpfWZ1bmN0aW9uIHUodCxlLHIsYSl7dmFyIG8scyxsPWUucG9zLGM9ZS52YWwsdT1hLmJQb3MsaD1hLmJQb3NQeE9mZnNldHx8MCxmPXIuYm94bWVhbnx8KHIubWVhbmxpbmV8fHt9KS52aXNpYmxlO0FycmF5LmlzQXJyYXkoYS5iZFBvcyk/KG89YS5iZFBvc1swXSxzPWEuYmRQb3NbMV0pOihvPWEuYmRQb3Mscz1hLmJkUG9zKTt2YXIgcD10LnNlbGVjdEFsbChcInBhdGgubWVhblwiKS5kYXRhKFwiYm94XCI9PT1yLnR5cGUmJnIuYm94bWVhbnx8XCJ2aW9saW5cIj09PXIudHlwZSYmci5ib3gudmlzaWJsZSYmci5tZWFubGluZS52aXNpYmxlP2kuaWRlbnRpdHk6W10pO3AuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJjbGFzc1wiLFwibWVhblwiKS5zdHlsZSh7ZmlsbDpcIm5vbmVcIixcInZlY3Rvci1lZmZlY3RcIjpcIm5vbi1zY2FsaW5nLXN0cm9rZVwifSkscC5leGl0KCkucmVtb3ZlKCkscC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWwuYzJwKHQucG9zK3UsITApK2gsaT1sLmMycCh0LnBvcyt1LW8sITApK2gsYT1sLmMycCh0LnBvcyt1K3MsITApK2gscD1jLmMycCh0Lm1lYW4sITApLGQ9Yy5jMnAodC5tZWFuLXQuc2QsITApLGc9Yy5jMnAodC5tZWFuK3Quc2QsITApO1wiaFwiPT09ci5vcmllbnRhdGlvbj9uLnNlbGVjdCh0aGlzKS5hdHRyKFwiZFwiLFwiTVwiK3ArXCIsXCIraStcIlZcIithKyhcInNkXCI9PT1mP1wibTAsMExcIitkK1wiLFwiK2UrXCJMXCIrcCtcIixcIitpK1wiTFwiK2crXCIsXCIrZStcIlpcIjpcIlwiKSk6bi5zZWxlY3QodGhpcykuYXR0cihcImRcIixcIk1cIitpK1wiLFwiK3ArXCJIXCIrYSsoXCJzZFwiPT09Zj9cIm0wLDBMXCIrZStcIixcIitkK1wiTFwiK2krXCIsXCIrcCtcIkxcIitlK1wiLFwiK2crXCJaXCI6XCJcIikpfSl9ZS5leHBvcnRzPXtwbG90OmZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPWUueGF4aXMscz1lLnlheGlzO2kubWFrZVRyYWNlR3JvdXBzKGEscixcInRyYWNlIGJveGVzXCIpLmVhY2goZnVuY3Rpb24odCl7dmFyIHIsaSxhPW4uc2VsZWN0KHRoaXMpLGg9dFswXSxmPWgudCxwPWgudHJhY2U7ZS5pc1JhbmdlUGxvdHx8KGgubm9kZTM9YSksZi53ZFBvcz1mLmJkUG9zKnAud2hpc2tlcndpZHRoLCEwIT09cC52aXNpYmxlfHxmLmVtcHR5P2EucmVtb3ZlKCk6KFwiaFwiPT09cC5vcmllbnRhdGlvbj8ocj1zLGk9byk6KHI9byxpPXMpLGwoYSx7cG9zOnIsdmFsOml9LHAsZiksYyhhLHt4Om8seTpzfSxwLGYpLHUoYSx7cG9zOnIsdmFsOml9LHAsZikpfSl9LHBsb3RCb3hBbmRXaGlza2VyczpsLHBsb3RQb2ludHM6YyxwbG90Qm94TWVhbjp1fX0se1wiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vbGliXCI6NzAxLGQzOjE1NX1dLDg3MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10LmNkLGE9dC54YXhpcyxvPXQueWF4aXMscz1bXTtpZighMT09PWUpZm9yKHI9MDtyPGkubGVuZ3RoO3IrKylmb3Iobj0wO248KGlbcl0ucHRzfHxbXSkubGVuZ3RoO24rKylpW3JdLnB0c1tuXS5zZWxlY3RlZD0wO2Vsc2UgZm9yKHI9MDtyPGkubGVuZ3RoO3IrKylmb3Iobj0wO248KGlbcl0ucHRzfHxbXSkubGVuZ3RoO24rKyl7dmFyIGw9aVtyXS5wdHNbbl0sYz1hLmMycChsLngpLHU9by5jMnAobC55KTtlLmNvbnRhaW5zKFtjLHVdLG51bGwsbC5pLHQpPyhzLnB1c2goe3BvaW50TnVtYmVyOmwuaSx4OmEuYzJkKGwueCkseTpvLmMyZChsLnkpfSksbC5zZWxlY3RlZD0xKTpsLnNlbGVjdGVkPTB9cmV0dXJuIHN9fSx7fV0sODczOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpO2UuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCxlKXt2YXIgcj1lP2VbMF0ubm9kZTM6bi5zZWxlY3QodCkuc2VsZWN0QWxsKFwiZy50cmFjZS5ib3hlc1wiKTtyLnN0eWxlKFwib3BhY2l0eVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSxyLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksbz1lWzBdLnRyYWNlLHM9by5saW5lLndpZHRoO2Z1bmN0aW9uIGwodCxlLHIsbil7dC5zdHlsZShcInN0cm9rZS13aWR0aFwiLGUrXCJweFwiKS5jYWxsKGkuc3Ryb2tlLHIpLmNhbGwoaS5maWxsLG4pfXZhciBjPXIuc2VsZWN0QWxsKFwicGF0aC5ib3hcIik7aWYoXCJjYW5kbGVzdGlja1wiPT09by50eXBlKWMuZWFjaChmdW5jdGlvbih0KXtpZighdC5lbXB0eSl7dmFyIGU9bi5zZWxlY3QodGhpcykscj1vW3QuZGlyXTtsKGUsci5saW5lLndpZHRoLHIubGluZS5jb2xvcixyLmZpbGxjb2xvciksZS5zdHlsZShcIm9wYWNpdHlcIixvLnNlbGVjdGVkcG9pbnRzJiYhdC5zZWxlY3RlZD8uMzoxKX19KTtlbHNle2woYyxzLG8ubGluZS5jb2xvcixvLmZpbGxjb2xvciksci5zZWxlY3RBbGwoXCJwYXRoLm1lYW5cIikuc3R5bGUoe1wic3Ryb2tlLXdpZHRoXCI6cyxcInN0cm9rZS1kYXNoYXJyYXlcIjoyKnMrXCJweCxcIitzK1wicHhcIn0pLmNhbGwoaS5zdHJva2Usby5saW5lLmNvbG9yKTt2YXIgdT1yLnNlbGVjdEFsbChcInBhdGgucG9pbnRcIik7YS5wb2ludFN0eWxlKHUsbyx0KX19KX0sc3R5bGVPblNlbGVjdDpmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0ubm9kZTMsbj1lWzBdLnRyYWNlLGk9ci5zZWxlY3RBbGwoXCJwYXRoLnBvaW50XCIpO24uc2VsZWN0ZWRwb2ludHM/YS5zZWxlY3RlZFBvaW50U3R5bGUoaSxuKTphLnBvaW50U3R5bGUoaSxuLHQpfX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksZDM6MTU1fV0sODc0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKS5leHRlbmRGbGF0LGk9dChcIi4uL29obGMvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi9ib3gvYXR0cmlidXRlc1wiKTtmdW5jdGlvbiBvKHQpe3JldHVybntsaW5lOntjb2xvcjpuKHt9LGEubGluZS5jb2xvcix7ZGZsdDp0fSksd2lkdGg6YS5saW5lLndpZHRoLGVkaXRUeXBlOlwic3R5bGVcIn0sZmlsbGNvbG9yOmEuZmlsbGNvbG9yLGVkaXRUeXBlOlwic3R5bGVcIn19ZS5leHBvcnRzPXt4OmkueCxvcGVuOmkub3BlbixoaWdoOmkuaGlnaCxsb3c6aS5sb3csY2xvc2U6aS5jbG9zZSxsaW5lOnt3aWR0aDpuKHt9LGEubGluZS53aWR0aCx7fSksZWRpdFR5cGU6XCJzdHlsZVwifSxpbmNyZWFzaW5nOm8oaS5pbmNyZWFzaW5nLmxpbmUuY29sb3IuZGZsdCksZGVjcmVhc2luZzpvKGkuZGVjcmVhc2luZy5saW5lLmNvbG9yLmRmbHQpLHRleHQ6aS50ZXh0LGhvdmVydGV4dDppLmhvdmVydGV4dCx3aGlza2Vyd2lkdGg6bih7fSxhLndoaXNrZXJ3aWR0aCx7ZGZsdDowfSksaG92ZXJsYWJlbDppLmhvdmVybGFiZWx9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9ib3gvYXR0cmlidXRlc1wiOjg2MixcIi4uL29obGMvYXR0cmlidXRlc1wiOjk5OX1dLDg3NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksYT10KFwiLi4vb2hsYy9jYWxjXCIpLmNhbGNDb21tb247ZnVuY3Rpb24gbyh0LGUscixuKXtyZXR1cm57bWluOnIscTE6TWF0aC5taW4odCxuKSxtZWQ6bixxMzpNYXRoLm1heCh0LG4pLG1heDplfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LHM9aS5nZXRGcm9tSWQodCxlLnhheGlzKSxsPWkuZ2V0RnJvbUlkKHQsZS55YXhpcyksYz1zLm1ha2VDYWxjZGF0YShlLFwieFwiKSx1PWEodCxlLGMsbCxvKTtyZXR1cm4gdS5sZW5ndGg/KG4uZXh0ZW5kRmxhdCh1WzBdLnQse251bTpyLl9udW1Cb3hlcyxkUG9zOm4uZGlzdGluY3RWYWxzKGMpLm1pbkRpZmYvMixwb3NMZXR0ZXI6XCJ4XCIsdmFsTGV0dGVyOlwieVwifSksci5fbnVtQm94ZXMrKyx1KTpbe3Q6e2VtcHR5OiEwfX1dfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9vaGxjL2NhbGNcIjoxZTN9XSw4NzY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksYT10KFwiLi4vb2hsYy9vaGxjX2RlZmF1bHRzXCIpLG89dChcIi4vYXR0cmlidXRlc1wiKTtmdW5jdGlvbiBzKHQsZSxyLG4pe3ZhciBhPXIobitcIi5saW5lLmNvbG9yXCIpO3IobitcIi5saW5lLndpZHRoXCIsZS5saW5lLndpZHRoKSxyKG4rXCIuZmlsbGNvbG9yXCIsaS5hZGRPcGFjaXR5KGEsLjUpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWEodCxlLGwsaSk/KGwoXCJsaW5lLndpZHRoXCIpLHModCxlLGwsXCJpbmNyZWFzaW5nXCIpLHModCxlLGwsXCJkZWNyZWFzaW5nXCIpLGwoXCJ0ZXh0XCIpLGwoXCJob3ZlcnRleHRcIiksbChcIndoaXNrZXJ3aWR0aFwiKSxpLl9yZXF1ZXN0UmFuZ2VzbGlkZXJbZS54YXhpc109ITApOmUudmlzaWJsZT0hMX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi9vaGxjL29obGNfZGVmYXVsdHNcIjoxMDA0LFwiLi9hdHRyaWJ1dGVzXCI6ODc0fV0sODc3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwidHJhY2VcIixuYW1lOlwiY2FuZGxlc3RpY2tcIixiYXNlUGxvdE1vZHVsZTp0KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCIpLGNhdGVnb3JpZXM6W1wiY2FydGVzaWFuXCIsXCJzdmdcIixcInNob3dMZWdlbmRcIixcImNhbmRsZXN0aWNrXCIsXCJib3hMYXlvdXRcIl0sbWV0YTp7fSxhdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksbGF5b3V0QXR0cmlidXRlczp0KFwiLi4vYm94L2xheW91dF9hdHRyaWJ1dGVzXCIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoXCIuLi9ib3gvbGF5b3V0X2RlZmF1bHRzXCIpLnN1cHBseUxheW91dERlZmF1bHRzLGNyb3NzVHJhY2VDYWxjOnQoXCIuLi9ib3gvY3Jvc3NfdHJhY2VfY2FsY1wiKS5jcm9zc1RyYWNlQ2FsYyxzdXBwbHlEZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxjYWxjOnQoXCIuL2NhbGNcIikscGxvdDp0KFwiLi4vYm94L3Bsb3RcIikucGxvdCxsYXllck5hbWU6XCJib3hsYXllclwiLHN0eWxlOnQoXCIuLi9ib3gvc3R5bGVcIikuc3R5bGUsaG92ZXJQb2ludHM6dChcIi4uL29obGMvaG92ZXJcIikuaG92ZXJQb2ludHMsc2VsZWN0UG9pbnRzOnQoXCIuLi9vaGxjL3NlbGVjdFwiKX19LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiOjc2MCxcIi4uL2JveC9jcm9zc190cmFjZV9jYWxjXCI6ODY0LFwiLi4vYm94L2xheW91dF9hdHRyaWJ1dGVzXCI6ODY5LFwiLi4vYm94L2xheW91dF9kZWZhdWx0c1wiOjg3MCxcIi4uL2JveC9wbG90XCI6ODcxLFwiLi4vYm94L3N0eWxlXCI6ODczLFwiLi4vb2hsYy9ob3ZlclwiOjEwMDIsXCIuLi9vaGxjL3NlbGVjdFwiOjEwMDYsXCIuL2F0dHJpYnV0ZXNcIjo4NzQsXCIuL2NhbGNcIjo4NzUsXCIuL2RlZmF1bHRzXCI6ODc2fV0sODc4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vYXhpc19kZWZhdWx0c1wiKSxpPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8pe2EoXCJhXCIpfHwoYShcImRhXCIpLGEoXCJhMFwiKSksYShcImJcIil8fChhKFwiZGJcIiksYShcImIwXCIpKSxmdW5jdGlvbih0LGUscixhKXtbXCJhYXhpc1wiLFwiYmF4aXNcIl0uZm9yRWFjaChmdW5jdGlvbihvKXt2YXIgcz1vLmNoYXJBdCgwKSxsPXRbb118fHt9LGM9aS5uZXdDb250YWluZXIoZSxvKSx1PXt0aWNrZm9udDpcInhcIixpZDpzK1wiYXhpc1wiLGxldHRlcjpzLGZvbnQ6ZS5mb250LG5hbWU6byxkYXRhOnRbc10sY2FsZW5kYXI6ZS5jYWxlbmRhcixkZmx0Q29sb3I6YSxiZ0NvbG9yOnIucGFwZXJfYmdjb2xvcixmdWxsTGF5b3V0OnJ9O24obCxjLHUpLGMuX2NhdGVnb3JpZXM9Yy5fY2F0ZWdvcmllc3x8W10sdFtvXXx8XCItXCI9PT1sLnR5cGV8fCh0W29dPXt0eXBlOmwudHlwZX0pfSl9KHQsZSxyLG8pfX0se1wiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4vYXhpc19kZWZhdWx0c1wiOjg4M31dLDg3OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyKXtpZighbihlKXx8cj49MTApcmV0dXJuIG51bGw7dmFyIGk9MS8wO3ZhciBhPS0xLzA7dmFyIG89ZS5sZW5ndGg7Zm9yKHZhciBzPTA7czxvO3MrKyl7dmFyIGw9ZVtzXTtpZihuKGwpKXt2YXIgYz10KGwscisxKTtjJiYoaT1NYXRoLm1pbihjWzBdLGkpLGE9TWF0aC5tYXgoY1sxXSxhKSl9ZWxzZSBpPU1hdGgubWluKGwsaSksYT1NYXRoLm1heChsLGEpfXJldHVybltpLGFdfSh0LDApfX0se1wiLi4vLi4vbGliXCI6NzAxfV0sODgwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiKSxpPXQoXCIuL2F4aXNfYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIiksbz1uKHtlZGl0VHlwZTpcImNhbGNcIn0pO28uZmFtaWx5LmRmbHQ9J1wiT3BlbiBTYW5zXCIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxvLnNpemUuZGZsdD0xMixvLmNvbG9yLmRmbHQ9YS5kZWZhdWx0TGluZSxlLmV4cG9ydHM9e2NhcnBldDp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwiY2FsY1wifSx4Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx5Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSxhOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxhMDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MCxlZGl0VHlwZTpcImNhbGNcIn0sZGE6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjEsZWRpdFR5cGU6XCJjYWxjXCJ9LGI6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGIwOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifSxkYjp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MSxlZGl0VHlwZTpcImNhbGNcIn0sY2hlYXRlcnNsb3BlOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxLGVkaXRUeXBlOlwiY2FsY1wifSxhYXhpczppLGJheGlzOmksZm9udDpvLGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmEuZGVmYXVsdExpbmUsZWRpdFR5cGU6XCJwbG90XCJ9LHRyYW5zZm9ybXM6dm9pZCAwfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzXCI6NTc3LFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCI6Nzc1LFwiLi9heGlzX2F0dHJpYnV0ZXNcIjo4ODJ9XSw4ODE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhLG8scyxsLGMsdSxoLGYscCxkLGcsdixtLHk9bihyKT9cImFcIjpcImJcIix4PShcImFcIj09PXk/dC5hYXhpczp0LmJheGlzKS5zbW9vdGhpbmcsYj1cImFcIj09PXk/dC5hMmk6dC5iMmosXz1cImFcIj09PXk/cjppLHc9XCJhXCI9PT15P2k6cixrPVwiYVwiPT09eT9lLmEubGVuZ3RoOmUuYi5sZW5ndGgsQT1cImFcIj09PXk/ZS5iLmxlbmd0aDplLmEubGVuZ3RoLFQ9TWF0aC5mbG9vcihcImFcIj09PXk/dC5iMmoodyk6dC5hMmkodykpLE09XCJhXCI9PT15P2Z1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxlLFQpfTpmdW5jdGlvbihlKXtyZXR1cm4gdC5ldmFseHkoW10sVCxlKX07eCYmKHM9TWF0aC5tYXgoMCxNYXRoLm1pbihBLTIsVCkpLGw9VC1zLG89XCJhXCI9PT15P2Z1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGkoW10sZSxzLHIsbCl9OmZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGooW10scyxlLGwscil9KTt2YXIgUz1iKF9bMF0pLEU9YihfWzFdKSxDPVM8RT8xOi0xLEw9MWUtOCooRS1TKSx6PUM+MD9NYXRoLmZsb29yOk1hdGguY2VpbCxPPUM+MD9NYXRoLmNlaWw6TWF0aC5mbG9vcixJPUM+MD9NYXRoLm1pbjpNYXRoLm1heCxEPUM+MD9NYXRoLm1heDpNYXRoLm1pbixQPXooUytMKSxSPU8oRS1MKSxGPVtbaD1NKFMpXV07Zm9yKGE9UDthKkM8UipDO2ErPUMpYz1bXSxnPUQoUyxhKSxtPSh2PUkoRSxhK0MpKS1nLHU9TWF0aC5tYXgoMCxNYXRoLm1pbihrLTIsTWF0aC5mbG9vciguNSooZyt2KSkpKSxmPU0odikseCYmKHA9byh1LGctdSksZD1vKHUsdi11KSxjLnB1c2goW2hbMF0rcFswXS8zKm0saFsxXStwWzFdLzMqbV0pLGMucHVzaChbZlswXS1kWzBdLzMqbSxmWzFdLWRbMV0vMyptXSkpLGMucHVzaChmKSxGLnB1c2goYyksaD1mO3JldHVybiBGfX0se1wiLi4vLi4vbGliXCI6NzAxfV0sODgyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGw7ZS5leHBvcnRzPXtjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHNtb290aGluZzp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MSxtaW46MCxtYXg6MS4zLGVkaXRUeXBlOlwiY2FsY1wifSx0aXRsZTp7dGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcImNhbGNcIn0sZm9udDpuKHtlZGl0VHlwZTpcImNhbGNcIn0pLG9mZnNldDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MTAsZWRpdFR5cGU6XCJjYWxjXCJ9LGVkaXRUeXBlOlwiY2FsY1wifSx0eXBlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCItXCIsXCJsaW5lYXJcIixcImRhdGVcIixcImNhdGVnb3J5XCJdLGRmbHQ6XCItXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGF1dG9yYW5nZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6WyEwLCExLFwicmV2ZXJzZWRcIl0sZGZsdDohMCxlZGl0VHlwZTpcImNhbGNcIn0scmFuZ2Vtb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJub3JtYWxcIixcInRvemVyb1wiLFwibm9ubmVnYXRpdmVcIl0sZGZsdDpcIm5vcm1hbFwiLGVkaXRUeXBlOlwiY2FsY1wifSxyYW5nZTp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIixpdGVtczpbe3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImNhbGNcIn0se3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImNhbGNcIn1dfSxmaXhlZHJhbmdlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEsZWRpdFR5cGU6XCJjYWxjXCJ9LGNoZWF0ZXJ0eXBlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJpbmRleFwiLFwidmFsdWVcIl0sZGZsdDpcInZhbHVlXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHRpY2ttb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJsaW5lYXJcIixcImFycmF5XCJdLGRmbHQ6XCJhcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxudGlja3M6e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsbWluOjAsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifSx0aWNrdmFsczp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sdGlja3RleHQ6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHNob3d0aWNrbGFiZWxzOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJzdGFydFwiLFwiZW5kXCIsXCJib3RoXCIsXCJub25lXCJdLGRmbHQ6XCJzdGFydFwiLGVkaXRUeXBlOlwiY2FsY1wifSx0aWNrZm9udDpuKHtlZGl0VHlwZTpcImNhbGNcIn0pLHRpY2thbmdsZTp7dmFsVHlwZTpcImFuZ2xlXCIsZGZsdDpcImF1dG9cIixlZGl0VHlwZTpcImNhbGNcIn0sdGlja3ByZWZpeDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcImNhbGNcIn0sc2hvd3RpY2twcmVmaXg6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImFsbFwiLFwiZmlyc3RcIixcImxhc3RcIixcIm5vbmVcIl0sZGZsdDpcImFsbFwiLGVkaXRUeXBlOlwiY2FsY1wifSx0aWNrc3VmZml4Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwiY2FsY1wifSxzaG93dGlja3N1ZmZpeDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYWxsXCIsXCJmaXJzdFwiLFwibGFzdFwiLFwibm9uZVwiXSxkZmx0OlwiYWxsXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHNob3dleHBvbmVudDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYWxsXCIsXCJmaXJzdFwiLFwibGFzdFwiLFwibm9uZVwiXSxkZmx0OlwiYWxsXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGV4cG9uZW50Zm9ybWF0Ont2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJub25lXCIsXCJlXCIsXCJFXCIsXCJwb3dlclwiLFwiU0lcIixcIkJcIl0sZGZsdDpcIkJcIixlZGl0VHlwZTpcImNhbGNcIn0sc2VwYXJhdGV0aG91c2FuZHM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMSxlZGl0VHlwZTpcImNhbGNcIn0sdGlja2Zvcm1hdDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcImNhbGNcIn0sdGlja2Zvcm1hdHN0b3BzOm8oYS50aWNrZm9ybWF0c3RvcHMsXCJjYWxjXCIsXCJmcm9tLXJvb3RcIiksY2F0ZWdvcnlvcmRlcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1widHJhY2VcIixcImNhdGVnb3J5IGFzY2VuZGluZ1wiLFwiY2F0ZWdvcnkgZGVzY2VuZGluZ1wiLFwiYXJyYXlcIl0sZGZsdDpcInRyYWNlXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGNhdGVnb3J5YXJyYXk6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGxhYmVscGFkZGluZzp7dmFsVHlwZTpcImludGVnZXJcIixkZmx0OjEwLGVkaXRUeXBlOlwiY2FsY1wifSxsYWJlbHByZWZpeDp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwiY2FsY1wifSxsYWJlbHN1ZmZpeDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcImNhbGNcIn0sc2hvd2xpbmU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMSxlZGl0VHlwZTpcImNhbGNcIn0sbGluZWNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6XCJjYWxjXCJ9LGxpbmV3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZTpcImNhbGNcIn0sZ3JpZGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcImNhbGNcIn0sZ3JpZHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOlwiY2FsY1wifSxzaG93Z3JpZDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSxtaW5vcmdyaWRjb3VudDp7dmFsVHlwZTpcImludGVnZXJcIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6XCJjYWxjXCJ9LG1pbm9yZ3JpZHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOlwiY2FsY1wifSxtaW5vcmdyaWRjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDppLmxpZ2h0TGluZSxlZGl0VHlwZTpcImNhbGNcIn0sc3RhcnRsaW5lOnt2YWxUeXBlOlwiYm9vbGVhblwiLGVkaXRUeXBlOlwiY2FsY1wifSxzdGFydGxpbmVjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHN0YXJ0bGluZXdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxLGVkaXRUeXBlOlwiY2FsY1wifSxlbmRsaW5lOnt2YWxUeXBlOlwiYm9vbGVhblwiLGVkaXRUeXBlOlwiY2FsY1wifSxlbmRsaW5ld2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjEsZWRpdFR5cGU6XCJjYWxjXCJ9LGVuZGxpbmVjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHRpY2swOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifSxkdGljazp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZTpcImNhbGNcIn0sYXJyYXl0aWNrMDp7dmFsVHlwZTpcImludGVnZXJcIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6XCJjYWxjXCJ9LGFycmF5ZHRpY2s6e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsbWluOjEsZGZsdDoxLGVkaXRUeXBlOlwiY2FsY1wifSxfZGVwcmVjYXRlZDp7dGl0bGU6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcImNhbGNcIn0sdGl0bGVmb250Om4oe2VkaXRUeXBlOlwiY2FsY1wifSksdGl0bGVvZmZzZXQ6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjEwLGVkaXRUeXBlOlwiY2FsY1wifX0sZWRpdFR5cGU6XCJjYWxjXCJ9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIjo1NzcsXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzXCI6NzYxLFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCI6Nzc1fV0sODgzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLmFkZE9wYWNpdHksYT10KFwiLi4vLi4vcmVnaXN0cnlcIiksbz10KFwiLi4vLi4vbGliXCIpLHM9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzXCIpLGw9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzXCIpLGM9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0c1wiKSx1PXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnRcIiksaD10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfYXV0b3R5cGVcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgZj1yLmxldHRlcixwPXIuZm9udHx8e30sZD1uW2YrXCJheGlzXCJdO2Z1bmN0aW9uIGcocixuKXtyZXR1cm4gby5jb2VyY2UodCxlLGQscixuKX1mdW5jdGlvbiB2KHIsbil7cmV0dXJuIG8uY29lcmNlMih0LGUsZCxyLG4pfXIubmFtZSYmKGUuX25hbWU9ci5uYW1lLGUuX2lkPXIubmFtZSk7dmFyIG09ZyhcInR5cGVcIik7KFwiLVwiPT09bSYmKHIuZGF0YSYmZnVuY3Rpb24odCxlKXtpZihcIi1cIiE9PXQudHlwZSlyZXR1cm47dmFyIHI9dC5faWQuY2hhckF0KDApLG49dFtyK1wiY2FsZW5kYXJcIl07dC50eXBlPWgoZSxuKX0oZSxyLmRhdGEpLFwiLVwiPT09ZS50eXBlP2UudHlwZT1cImxpbmVhclwiOm09dC50eXBlPWUudHlwZSksZyhcInNtb290aGluZ1wiKSxnKFwiY2hlYXRlcnR5cGVcIiksZyhcInNob3d0aWNrbGFiZWxzXCIpLGcoXCJsYWJlbHByZWZpeFwiLGYrXCIgPSBcIiksZyhcImxhYmVsc3VmZml4XCIpLGcoXCJzaG93dGlja3ByZWZpeFwiKSxnKFwic2hvd3RpY2tzdWZmaXhcIiksZyhcInNlcGFyYXRldGhvdXNhbmRzXCIpLGcoXCJ0aWNrZm9ybWF0XCIpLGcoXCJleHBvbmVudGZvcm1hdFwiKSxnKFwic2hvd2V4cG9uZW50XCIpLGcoXCJjYXRlZ29yeW9yZGVyXCIpLGcoXCJ0aWNrbW9kZVwiKSxnKFwidGlja3ZhbHNcIiksZyhcInRpY2t0ZXh0XCIpLGcoXCJ0aWNrMFwiKSxnKFwiZHRpY2tcIiksXCJhcnJheVwiPT09ZS50aWNrbW9kZSYmKGcoXCJhcnJheXRpY2swXCIpLGcoXCJhcnJheWR0aWNrXCIpKSxnKFwibGFiZWxwYWRkaW5nXCIpLGUuX2hvdmVydGl0bGU9ZixcImRhdGVcIj09PW0pJiZhLmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiaGFuZGxlRGVmYXVsdHNcIikodCxlLFwiY2FsZW5kYXJcIixyLmNhbGVuZGFyKTt1KGUsci5mdWxsTGF5b3V0KSxlLmMycD1vLmlkZW50aXR5O3ZhciB5PWcoXCJjb2xvclwiLHIuZGZsdENvbG9yKSx4PXk9PT10LmNvbG9yP3k6cC5jb2xvcjtnKFwidGl0bGUudGV4dFwiKSYmKG8uY29lcmNlRm9udChnLFwidGl0bGUuZm9udFwiLHtmYW1pbHk6cC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKDEuMipwLnNpemUpLGNvbG9yOnh9KSxnKFwidGl0bGUub2Zmc2V0XCIpKSxnKFwidGlja2FuZ2xlXCIpLGcoXCJhdXRvcmFuZ2VcIiwhZS5pc1ZhbGlkUmFuZ2UodC5yYW5nZSkpJiZnKFwicmFuZ2Vtb2RlXCIpLGcoXCJyYW5nZVwiKSxlLmNsZWFuUmFuZ2UoKSxnKFwiZml4ZWRyYW5nZVwiKSxzKHQsZSxnLG0pLGwodCxlLGcsbSxyKSxjKHQsZSxnLHtkYXRhOnIuZGF0YSxkYXRhQXR0cjpmfSk7dmFyIGI9dihcImdyaWRjb2xvclwiLGkoeSwuMykpLF89dihcImdyaWR3aWR0aFwiKSx3PWcoXCJzaG93Z3JpZFwiKTt3fHwoZGVsZXRlIGUuZ3JpZGNvbG9yLGRlbGV0ZSBlLmdyaWR3aWR0aCk7dmFyIGs9dihcInN0YXJ0bGluZWNvbG9yXCIseSksQT12KFwic3RhcnRsaW5ld2lkdGhcIixfKTtnKFwic3RhcnRsaW5lXCIsZS5zaG93Z3JpZHx8ISFrfHwhIUEpfHwoZGVsZXRlIGUuc3RhcnRsaW5lY29sb3IsZGVsZXRlIGUuc3RhcnRsaW5ld2lkdGgpO3ZhciBUPXYoXCJlbmRsaW5lY29sb3JcIix5KSxNPXYoXCJlbmRsaW5ld2lkdGhcIixfKTtyZXR1cm4gZyhcImVuZGxpbmVcIixlLnNob3dncmlkfHwhIVR8fCEhTSl8fChkZWxldGUgZS5lbmRsaW5lY29sb3IsZGVsZXRlIGUuZW5kbGluZXdpZHRoKSx3PyhnKFwibWlub3JncmlkY291bnRcIiksZyhcIm1pbm9yZ3JpZHdpZHRoXCIsXyksZyhcIm1pbm9yZ3JpZGNvbG9yXCIsaShiLC4wNikpLGUubWlub3JncmlkY291bnR8fChkZWxldGUgZS5taW5vcmdyaWR3aWR0aCxkZWxldGUgZS5taW5vcmdyaWRjb2xvcikpOihkZWxldGUgZS5ncmlkY29sb3IsZGVsZXRlIGUuZ3JpZFdpZHRoKSxcIm5vbmVcIj09PWUuc2hvd3RpY2tsYWJlbHMmJihkZWxldGUgZS50aWNrZm9udCxkZWxldGUgZS50aWNrYW5nbGUsZGVsZXRlIGUuc2hvd2V4cG9uZW50LGRlbGV0ZSBlLmV4cG9uZW50Zm9ybWF0LGRlbGV0ZSBlLnRpY2tmb3JtYXQsZGVsZXRlIGUuc2hvd3RpY2tzdWZmaXgsZGVsZXRlIGUuc2hvd3RpY2twcmVmaXgpLGUuc2hvd3RpY2tzdWZmaXh8fGRlbGV0ZSBlLnRpY2tzdWZmaXgsZS5zaG93dGlja3ByZWZpeHx8ZGVsZXRlIGUudGlja3ByZWZpeCxnKFwidGlja21vZGVcIiksZX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19hdXRvdHlwZVwiOjc1MCxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0c1wiOjc1MyxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZXRfY29udmVydFwiOjc2NyxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzXCI6NzY4LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHNcIjo3NzAsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vYXR0cmlidXRlc1wiOjg4MH1dLDg4NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxpPXQoXCIuLi8uLi9saWJcIikuaXNBcnJheTFELGE9dChcIi4vY2hlYXRlcl9iYXNpc1wiKSxvPXQoXCIuL2FycmF5X21pbm1heFwiKSxzPXQoXCIuL2NhbGNfZ3JpZGxpbmVzXCIpLGw9dChcIi4vY2FsY19sYWJlbHNcIiksYz10KFwiLi9jYWxjX2NsaXBwYXRoXCIpLHU9dChcIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXlcIiksaD10KFwiLi9zbW9vdGhfZmlsbF8yZF9hcnJheVwiKSxmPXQoXCIuLi9oZWF0bWFwL2NvbnZlcnRfY29sdW1uX3h5elwiKSxwPXQoXCIuL3NldF9jb252ZXJ0XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW4uZ2V0RnJvbUlkKHQsZS54YXhpcyksZD1uLmdldEZyb21JZCh0LGUueWF4aXMpLGc9ZS5hYXhpcyx2PWUuYmF4aXMsbT1lLngseT1lLnkseD1bXTttJiZpKG0pJiZ4LnB1c2goXCJ4XCIpLHkmJmkoeSkmJngucHVzaChcInlcIikseC5sZW5ndGgmJmYoZSxnLHYsXCJhXCIsXCJiXCIseCk7dmFyIGI9ZS5fYT1lLl9hfHxlLmEsXz1lLl9iPWUuX2J8fGUuYjttPWUuX3h8fGUueCx5PWUuX3l8fGUueTt2YXIgdz17fTtpZihlLl9jaGVhdGVyKXt2YXIgaz1cImluZGV4XCI9PT1nLmNoZWF0ZXJ0eXBlP2IubGVuZ3RoOmIsQT1cImluZGV4XCI9PT12LmNoZWF0ZXJ0eXBlP18ubGVuZ3RoOl87bT1hKGssQSxlLmNoZWF0ZXJzbG9wZSl9ZS5feD1tPXUobSksZS5feT15PXUoeSksaChtLGIsXyksaCh5LGIsXykscChlKSxlLnNldFNjYWxlKCk7dmFyIFQ9byhtKSxNPW8oeSksUz0uNSooVFsxXS1UWzBdKSxFPS41KihUWzFdK1RbMF0pLEM9LjUqKE1bMV0tTVswXSksTD0uNSooTVsxXStNWzBdKTtyZXR1cm4gVD1bRS0xLjMqUyxFKzEuMypTXSxNPVtMLTEuMypDLEwrMS4zKkNdLGUuX2V4dHJlbWVzW3IuX2lkXT1uLmZpbmRFeHRyZW1lcyhyLFQse3BhZGRlZDohMH0pLGUuX2V4dHJlbWVzW2QuX2lkXT1uLmZpbmRFeHRyZW1lcyhkLE0se3BhZGRlZDohMH0pLHMoZSxcImFcIixcImJcIikscyhlLFwiYlwiLFwiYVwiKSxsKGUsZyksbChlLHYpLHcuY2xpcHNlZ21lbnRzPWMoZS5feGN0cmwsZS5feWN0cmwsZyx2KSx3Lng9bSx3Lnk9eSx3LmE9Yix3LmI9Xyxbd119fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXlcIjo5NTAsXCIuLi9oZWF0bWFwL2NvbnZlcnRfY29sdW1uX3h5elwiOjk1MixcIi4vYXJyYXlfbWlubWF4XCI6ODc5LFwiLi9jYWxjX2NsaXBwYXRoXCI6ODg1LFwiLi9jYWxjX2dyaWRsaW5lc1wiOjg4NixcIi4vY2FsY19sYWJlbHNcIjo4ODcsXCIuL2NoZWF0ZXJfYmFzaXNcIjo4ODksXCIuL3NldF9jb252ZXJ0XCI6OTAyLFwiLi9zbW9vdGhfZmlsbF8yZF9hcnJheVwiOjkwM31dLDg4NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scz1bXSxsPSEhci5zbW9vdGhpbmcsYz0hIW4uc21vb3RoaW5nLHU9dFswXS5sZW5ndGgtMSxoPXQubGVuZ3RoLTE7Zm9yKGk9MCxhPVtdLG89W107aTw9dTtpKyspYVtpXT10WzBdW2ldLG9baV09ZVswXVtpXTtmb3Iocy5wdXNoKHt4OmEseTpvLGJpY3ViaWM6bH0pLGk9MCxhPVtdLG89W107aTw9aDtpKyspYVtpXT10W2ldW3VdLG9baV09ZVtpXVt1XTtmb3Iocy5wdXNoKHt4OmEseTpvLGJpY3ViaWM6Y30pLGk9dSxhPVtdLG89W107aT49MDtpLS0pYVt1LWldPXRbaF1baV0sb1t1LWldPWVbaF1baV07Zm9yKHMucHVzaCh7eDphLHk6byxiaWN1YmljOmx9KSxpPWgsYT1bXSxvPVtdO2k+PTA7aS0tKWFbaC1pXT10W2ldWzBdLG9baC1pXT1lW2ldWzBdO3JldHVybiBzLnB1c2goe3g6YSx5Om8sYmljdWJpYzpjfSksc319LHt9XSw4ODY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksaT10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGEsbyxzLGwsYyx1LGgsZixwLGQsZyx2LG0seSx4PXRbXCJfXCIrZV0sYj10W2UrXCJheGlzXCJdLF89Yi5fZ3JpZGxpbmVzPVtdLHc9Yi5fbWlub3JncmlkbGluZXM9W10saz1iLl9ib3VuZGFyeWxpbmVzPVtdLEE9dFtcIl9cIityXSxUPXRbcitcImF4aXNcIl07XCJhcnJheVwiPT09Yi50aWNrbW9kZSYmKGIudGlja3ZhbHM9eC5zbGljZSgpKTt2YXIgTT10Ll94Y3RybCxTPXQuX3ljdHJsLEU9TVswXS5sZW5ndGgsQz1NLmxlbmd0aCxMPXQuX2EubGVuZ3RoLHo9dC5fYi5sZW5ndGg7bi5wcmVwVGlja3MoYiksXCJhcnJheVwiPT09Yi50aWNrbW9kZSYmZGVsZXRlIGIudGlja3ZhbHM7dmFyIE89Yi5zbW9vdGhpbmc/MzoxO2Z1bmN0aW9uIEkobil7dmFyIGksYSxvLHMsbCxjLHUsaCxwLGQsZyx2LG09W10seT1bXSx4PXt9O2lmKFwiYlwiPT09ZSlmb3IoYT10LmIyaihuKSxvPU1hdGguZmxvb3IoTWF0aC5tYXgoMCxNYXRoLm1pbih6LTIsYSkpKSxzPWEtbyx4Lmxlbmd0aD16LHguY3Jvc3NMZW5ndGg9TCx4Lnh5PWZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxlLGEpfSx4LmR4eT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmR4eWRpKFtdLGUsbyxyLHMpfSxpPTA7aTxMO2krKyljPU1hdGgubWluKEwtMixpKSx1PWktYyxoPXQuZXZhbHh5KFtdLGksYSksVC5zbW9vdGhpbmcmJmk+MCYmKHA9dC5keHlkaShbXSxpLTEsbywwLHMpLG0ucHVzaChsWzBdK3BbMF0vMykseS5wdXNoKGxbMV0rcFsxXS8zKSxkPXQuZHh5ZGkoW10saS0xLG8sMSxzKSxtLnB1c2goaFswXS1kWzBdLzMpLHkucHVzaChoWzFdLWRbMV0vMykpLG0ucHVzaChoWzBdKSx5LnB1c2goaFsxXSksbD1oO2Vsc2UgZm9yKGk9dC5hMmkobiksYz1NYXRoLmZsb29yKE1hdGgubWF4KDAsTWF0aC5taW4oTC0yLGkpKSksdT1pLWMseC5sZW5ndGg9TCx4LmNyb3NzTGVuZ3RoPXoseC54eT1mdW5jdGlvbihlKXtyZXR1cm4gdC5ldmFseHkoW10saSxlKX0seC5keHk9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaihbXSxjLGUsdSxyKX0sYT0wO2E8ejthKyspbz1NYXRoLm1pbih6LTIsYSkscz1hLW8saD10LmV2YWx4eShbXSxpLGEpLFQuc21vb3RoaW5nJiZhPjAmJihnPXQuZHh5ZGooW10sYyxhLTEsdSwwKSxtLnB1c2gobFswXStnWzBdLzMpLHkucHVzaChsWzFdK2dbMV0vMyksdj10LmR4eWRqKFtdLGMsYS0xLHUsMSksbS5wdXNoKGhbMF0tdlswXS8zKSx5LnB1c2goaFsxXS12WzFdLzMpKSxtLnB1c2goaFswXSkseS5wdXNoKGhbMV0pLGw9aDtyZXR1cm4geC5heGlzTGV0dGVyPWUseC5heGlzPWIseC5jcm9zc0F4aXM9VCx4LnZhbHVlPW4seC5jb25zdHZhcj1yLHguaW5kZXg9Zix4Lng9bSx4Lnk9eSx4LnNtb290aGluZz1ULnNtb290aGluZyx4fWZ1bmN0aW9uIEQobil7dmFyIGksYSxvLHMsbCxjPVtdLHU9W10saD17fTtpZihoLmxlbmd0aD14Lmxlbmd0aCxoLmNyb3NzTGVuZ3RoPUEubGVuZ3RoLFwiYlwiPT09ZSlmb3Iobz1NYXRoLm1heCgwLE1hdGgubWluKHotMixuKSksbD1NYXRoLm1pbigxLE1hdGgubWF4KDAsbi1vKSksaC54eT1mdW5jdGlvbihlKXtyZXR1cm4gdC5ldmFseHkoW10sZSxuKX0saC5keHk9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaShbXSxlLG8scixsKX0saT0wO2k8RTtpKyspY1tpXT1NW24qT11baV0sdVtpXT1TW24qT11baV07ZWxzZSBmb3IoYT1NYXRoLm1heCgwLE1hdGgubWluKEwtMixuKSkscz1NYXRoLm1pbigxLE1hdGgubWF4KDAsbi1hKSksaC54eT1mdW5jdGlvbihlKXtyZXR1cm4gdC5ldmFseHkoW10sbixlKX0saC5keHk9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaihbXSxhLGUscyxyKX0saT0wO2k8QztpKyspY1tpXT1NW2ldW24qT10sdVtpXT1TW2ldW24qT107cmV0dXJuIGguYXhpc0xldHRlcj1lLGguYXhpcz1iLGguY3Jvc3NBeGlzPVQsaC52YWx1ZT14W25dLGguY29uc3R2YXI9cixoLmluZGV4PW4saC54PWMsaC55PXUsaC5zbW9vdGhpbmc9VC5zbW9vdGhpbmcsaH1pZihcImFycmF5XCI9PT1iLnRpY2ttb2RlKXtmb3IobD01ZS0xNSx1PShjPVtNYXRoLmZsb29yKCh4Lmxlbmd0aC0xLWIuYXJyYXl0aWNrMCkvYi5hcnJheWR0aWNrKigxK2wpKSxNYXRoLmNlaWwoLWIuYXJyYXl0aWNrMC9iLmFycmF5ZHRpY2svKDErbCkpXS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKVswXS0xLGg9Y1sxXSsxLGY9dTtmPGg7ZisrKShvPWIuYXJyYXl0aWNrMCtiLmFycmF5ZHRpY2sqZik8MHx8bz54Lmxlbmd0aC0xfHxfLnB1c2goaShEKG8pLHtjb2xvcjpiLmdyaWRjb2xvcix3aWR0aDpiLmdyaWR3aWR0aH0pKTtmb3IoZj11O2Y8aDtmKyspaWYocz1iLmFycmF5dGljazArYi5hcnJheWR0aWNrKmYsZz1NYXRoLm1pbihzK2IuYXJyYXlkdGljayx4Lmxlbmd0aC0xKSwhKHM8MHx8cz54Lmxlbmd0aC0xfHxnPDB8fGc+eC5sZW5ndGgtMSkpZm9yKHY9eFtzXSxtPXhbZ10sYT0wO2E8Yi5taW5vcmdyaWRjb3VudDthKyspKHk9Zy1zKTw9MHx8KGQ9disobS12KSooYSsxKS8oYi5taW5vcmdyaWRjb3VudCsxKSooYi5hcnJheWR0aWNrL3kpKTx4WzBdfHxkPnhbeC5sZW5ndGgtMV18fHcucHVzaChpKEkoZCkse2NvbG9yOmIubWlub3JncmlkY29sb3Isd2lkdGg6Yi5taW5vcmdyaWR3aWR0aH0pKTtiLnN0YXJ0bGluZSYmay5wdXNoKGkoRCgwKSx7Y29sb3I6Yi5zdGFydGxpbmVjb2xvcix3aWR0aDpiLnN0YXJ0bGluZXdpZHRofSkpLGIuZW5kbGluZSYmay5wdXNoKGkoRCh4Lmxlbmd0aC0xKSx7Y29sb3I6Yi5lbmRsaW5lY29sb3Isd2lkdGg6Yi5lbmRsaW5ld2lkdGh9KSl9ZWxzZXtmb3IobD01ZS0xNSx1PShjPVtNYXRoLmZsb29yKCh4W3gubGVuZ3RoLTFdLWIudGljazApL2IuZHRpY2sqKDErbCkpLE1hdGguY2VpbCgoeFswXS1iLnRpY2swKS9iLmR0aWNrLygxK2wpKV0uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSlbMF0saD1jWzFdLGY9dTtmPD1oO2YrKylwPWIudGljazArYi5kdGljaypmLF8ucHVzaChpKEkocCkse2NvbG9yOmIuZ3JpZGNvbG9yLHdpZHRoOmIuZ3JpZHdpZHRofSkpO2ZvcihmPXUtMTtmPGgrMTtmKyspZm9yKHA9Yi50aWNrMCtiLmR0aWNrKmYsYT0wO2E8Yi5taW5vcmdyaWRjb3VudDthKyspKGQ9cCtiLmR0aWNrKihhKzEpLyhiLm1pbm9yZ3JpZGNvdW50KzEpKTx4WzBdfHxkPnhbeC5sZW5ndGgtMV18fHcucHVzaChpKEkoZCkse2NvbG9yOmIubWlub3JncmlkY29sb3Isd2lkdGg6Yi5taW5vcmdyaWR3aWR0aH0pKTtiLnN0YXJ0bGluZSYmay5wdXNoKGkoSSh4WzBdKSx7Y29sb3I6Yi5zdGFydGxpbmVjb2xvcix3aWR0aDpiLnN0YXJ0bGluZXdpZHRofSkpLGIuZW5kbGluZSYmay5wdXNoKGkoSSh4W3gubGVuZ3RoLTFdKSx7Y29sb3I6Yi5lbmRsaW5lY29sb3Isd2lkdGg6Yi5lbmRsaW5ld2lkdGh9KSl9fX0se1wiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5fV0sODg3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGk9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhLG8scz1lLl9sYWJlbHM9W10sbD1lLl9ncmlkbGluZXM7Zm9yKHI9MDtyPGwubGVuZ3RoO3IrKylvPWxbcl0sLTEhPT1bXCJzdGFydFwiLFwiYm90aFwiXS5pbmRleE9mKGUuc2hvd3RpY2tsYWJlbHMpJiYoYT1uLnRpY2tUZXh0KGUsby52YWx1ZSksaShhLHtwcmVmaXg6dm9pZCAwLHN1ZmZpeDp2b2lkIDAsZW5kQW5jaG9yOiEwLHh5Om8ueHkoMCksZHh5Om8uZHh5KDAsMCksYXhpczpvLmF4aXMsbGVuZ3RoOm8uY3Jvc3NBeGlzLmxlbmd0aCxmb250Om8uYXhpcy50aWNrZm9udCxpc0ZpcnN0OjA9PT1yLGlzTGFzdDpyPT09bC5sZW5ndGgtMX0pLHMucHVzaChhKSksLTEhPT1bXCJlbmRcIixcImJvdGhcIl0uaW5kZXhPZihlLnNob3d0aWNrbGFiZWxzKSYmKGE9bi50aWNrVGV4dChlLG8udmFsdWUpLGkoYSx7ZW5kQW5jaG9yOiExLHh5Om8ueHkoby5jcm9zc0xlbmd0aC0xKSxkeHk6by5keHkoby5jcm9zc0xlbmd0aC0yLDEpLGF4aXM6by5heGlzLGxlbmd0aDpvLmNyb3NzQXhpcy5sZW5ndGgsZm9udDpvLmF4aXMudGlja2ZvbnQsaXNGaXJzdDowPT09cixpc0xhc3Q6cj09PWwubGVuZ3RoLTF9KSxzLnB1c2goYSkpfX0se1wiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5fV0sODg4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRbMF0tZVswXSxhPXRbMV0tZVsxXSxvPXJbMF0tZVswXSxzPXJbMV0tZVsxXSxsPU1hdGgucG93KGkqaSthKmEsLjI1KSxjPU1hdGgucG93KG8qbytzKnMsLjI1KSx1PShjKmMqaS1sKmwqbykqbixoPShjKmMqYS1sKmwqcykqbixmPWMqKGwrYykqMyxwPWwqKGwrYykqMztyZXR1cm5bW2VbMF0rKGYmJnUvZiksZVsxXSsoZiYmaC9mKV0sW2VbMF0tKHAmJnUvcCksZVsxXS0ocCYmaC9wKV1dfX0se31dLDg4OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEsbyxzLGwsYyx1PVtdLGg9bih0KT90Lmxlbmd0aDp0LGY9bihlKT9lLmxlbmd0aDplLHA9bih0KT90Om51bGwsZD1uKGUpP2U6bnVsbDtwJiYobz0ocC5sZW5ndGgtMSkvKHBbcC5sZW5ndGgtMV0tcFswXSkvKGgtMSkpLGQmJihzPShkLmxlbmd0aC0xKS8oZFtkLmxlbmd0aC0xXS1kWzBdKS8oZi0xKSk7dmFyIGc9MS8wLHY9LTEvMDtmb3IoYT0wO2E8ZjthKyspZm9yKHVbYV09W10sbD1kPyhkW2FdLWRbMF0pKnM6YS8oZi0xKSxpPTA7aTxoO2krKyljPShwPyhwW2ldLXBbMF0pKm86aS8oaC0xKSktbCpyLGc9TWF0aC5taW4oYyxnKSx2PU1hdGgubWF4KGMsdiksdVthXVtpXT1jO3ZhciBtPTEvKHYtZykseT0tZyptO2ZvcihhPTA7YTxmO2ErKylmb3IoaT0wO2k8aDtpKyspdVthXVtpXT1tKnVbYV1baV0reTtyZXR1cm4gdX19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDg5MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2NhdG11bGxfcm9tXCIpLGk9dChcIi4uLy4uL2xpYlwiKS5lbnN1cmVBcnJheTtmdW5jdGlvbiBhKHQsZSxyKXt2YXIgbj0tLjUqclswXSsxLjUqZVswXSxpPS0uNSpyWzFdKzEuNSplWzFdO3JldHVyblsoMipuK3RbMF0pLzMsKDIqaSt0WzFdKS8zXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzLGwpe3ZhciBjLHUsaCxmLHAsZCxnLHYsbSx5LHg9clswXS5sZW5ndGgsYj1yLmxlbmd0aCxfPXM/Myp4LTI6eCx3PWw/MypiLTI6Yjtmb3IodD1pKHQsdyksZT1pKGUsdyksaD0wO2g8dztoKyspdFtoXT1pKHRbaF0sXyksZVtoXT1pKGVbaF0sXyk7Zm9yKHU9MCxmPTA7dTxiO3UrKyxmKz1sPzM6MSlmb3IocD10W2ZdLGQ9ZVtmXSxnPXJbdV0sdj1vW3VdLGM9MCxoPTA7Yzx4O2MrKyxoKz1zPzM6MSlwW2hdPWdbY10sZFtoXT12W2NdO2lmKHMpZm9yKHU9MCxmPTA7dTxiO3UrKyxmKz1sPzM6MSl7Zm9yKGM9MSxoPTM7Yzx4LTE7YysrLGgrPTMpbT1uKFtyW3VdW2MtMV0sb1t1XVtjLTFdXSxbclt1XVtjXSxvW3VdW2NdXSxbclt1XVtjKzFdLG9bdV1bYysxXV0scyksdFtmXVtoLTFdPW1bMF1bMF0sZVtmXVtoLTFdPW1bMF1bMV0sdFtmXVtoKzFdPW1bMV1bMF0sZVtmXVtoKzFdPW1bMV1bMV07eT1hKFt0W2ZdWzBdLGVbZl1bMF1dLFt0W2ZdWzJdLGVbZl1bMl1dLFt0W2ZdWzNdLGVbZl1bM11dKSx0W2ZdWzFdPXlbMF0sZVtmXVsxXT15WzFdLHk9YShbdFtmXVtfLTFdLGVbZl1bXy0xXV0sW3RbZl1bXy0zXSxlW2ZdW18tM11dLFt0W2ZdW18tNF0sZVtmXVtfLTRdXSksdFtmXVtfLTJdPXlbMF0sZVtmXVtfLTJdPXlbMV19aWYobClmb3IoaD0wO2g8XztoKyspe2ZvcihmPTM7Zjx3LTM7Zis9MyltPW4oW3RbZi0zXVtoXSxlW2YtM11baF1dLFt0W2ZdW2hdLGVbZl1baF1dLFt0W2YrM11baF0sZVtmKzNdW2hdXSxsKSx0W2YtMV1baF09bVswXVswXSxlW2YtMV1baF09bVswXVsxXSx0W2YrMV1baF09bVsxXVswXSxlW2YrMV1baF09bVsxXVsxXTt5PWEoW3RbMF1baF0sZVswXVtoXV0sW3RbMl1baF0sZVsyXVtoXV0sW3RbM11baF0sZVszXVtoXV0pLHRbMV1baF09eVswXSxlWzFdW2hdPXlbMV0seT1hKFt0W3ctMV1baF0sZVt3LTFdW2hdXSxbdFt3LTNdW2hdLGVbdy0zXVtoXV0sW3Rbdy00XVtoXSxlW3ctNF1baF1dKSx0W3ctMl1baF09eVswXSxlW3ctMl1baF09eVsxXX1pZihzJiZsKWZvcihmPTE7Zjx3O2YrPShmKzEpJTM9PTA/MjoxKXtmb3IoaD0zO2g8Xy0zO2grPTMpbT1uKFt0W2ZdW2gtM10sZVtmXVtoLTNdXSxbdFtmXVtoXSxlW2ZdW2hdXSxbdFtmXVtoKzNdLGVbZl1baCszXV0scyksdFtmXVtoLTFdPS41Kih0W2ZdW2gtMV0rbVswXVswXSksZVtmXVtoLTFdPS41KihlW2ZdW2gtMV0rbVswXVsxXSksdFtmXVtoKzFdPS41Kih0W2ZdW2grMV0rbVsxXVswXSksZVtmXVtoKzFdPS41KihlW2ZdW2grMV0rbVsxXVsxXSk7eT1hKFt0W2ZdWzBdLGVbZl1bMF1dLFt0W2ZdWzJdLGVbZl1bMl1dLFt0W2ZdWzNdLGVbZl1bM11dKSx0W2ZdWzFdPS41Kih0W2ZdWzFdK3lbMF0pLGVbZl1bMV09LjUqKGVbZl1bMV0reVsxXSkseT1hKFt0W2ZdW18tMV0sZVtmXVtfLTFdXSxbdFtmXVtfLTNdLGVbZl1bXy0zXV0sW3RbZl1bXy00XSxlW2ZdW18tNF1dKSx0W2ZdW18tMl09LjUqKHRbZl1bXy0yXSt5WzBdKSxlW2ZdW18tMl09LjUqKGVbZl1bXy0yXSt5WzFdKX1yZXR1cm5bdCxlXX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4vY2F0bXVsbF9yb21cIjo4ODh9XSw4OTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e1JFTEFUSVZFX0NVTExfVE9MRVJBTkNFOjFlLTZ9fSx7fV0sODkyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSYmcj9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjLHUsaDtlfHwoZT1bXSkscio9MyxuKj0zO3ZhciBmPWkqaSxwPTEtaSxkPXAqcCxnPXAqaSoyLHY9LTMqZCxtPTMqKGQtZykseT0zKihnLWYpLHg9MypmLGI9YSphLF89YiphLHc9MS1hLGs9dyp3LEE9ayp3O2ZvcihoPTA7aDx0Lmxlbmd0aDtoKyspbz12Kih1PXRbaF0pW25dW3JdK20qdVtuXVtyKzFdK3kqdVtuXVtyKzJdK3gqdVtuXVtyKzNdLHM9dip1W24rMV1bcl0rbSp1W24rMV1bcisxXSt5KnVbbisxXVtyKzJdK3gqdVtuKzFdW3IrM10sbD12KnVbbisyXVtyXSttKnVbbisyXVtyKzFdK3kqdVtuKzJdW3IrMl0reCp1W24rMl1bciszXSxjPXYqdVtuKzNdW3JdK20qdVtuKzNdW3IrMV0reSp1W24rM11bcisyXSt4KnVbbiszXVtyKzNdLGVbaF09QSpvKzMqKGsqYSpzK3cqYipsKStfKmM7cmV0dXJuIGV9OmU/ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbyxzLGwsYztlfHwoZT1bXSkscio9Mzt2YXIgdT1pKmksaD0xLWksZj1oKmgscD1oKmkqMixkPS0zKmYsZz0zKihmLXApLHY9MyoocC11KSxtPTMqdSx5PTEtYTtmb3IobD0wO2w8dC5sZW5ndGg7bCsrKW89ZCooYz10W2xdKVtuXVtyXStnKmNbbl1bcisxXSt2KmNbbl1bcisyXSttKmNbbl1bciszXSxzPWQqY1tuKzFdW3JdK2cqY1tuKzFdW3IrMV0rdipjW24rMV1bcisyXSttKmNbbisxXVtyKzNdLGVbbF09eSpvK2EqcztyZXR1cm4gZX06cj9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjLHUsaDtlfHwoZT1bXSksbio9Mzt2YXIgZj1hKmEscD1mKmEsZD0xLWEsZz1kKmQsdj1nKmQ7Zm9yKHU9MDt1PHQubGVuZ3RoO3UrKylvPShoPXRbdV0pW25dW3IrMV0taFtuXVtyXSxzPWhbbisxXVtyKzFdLWhbbisxXVtyXSxsPWhbbisyXVtyKzFdLWhbbisyXVtyXSxjPWhbbiszXVtyKzFdLWhbbiszXVtyXSxlW3VdPXYqbyszKihnKmEqcytkKmYqbCkrcCpjO3JldHVybiBlfTpmdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjO2V8fChlPVtdKTt2YXIgdT0xLWE7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylvPShjPXRbbF0pW25dW3IrMV0tY1tuXVtyXSxzPWNbbisxXVtyKzFdLWNbbisxXVtyXSxlW2xdPXUqbythKnM7cmV0dXJuIGV9fX0se31dLDg5MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIGUmJnI/ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbyxzLGwsYyx1LGg7ZXx8KGU9W10pLHIqPTMsbio9Mzt2YXIgZj1pKmkscD1mKmksZD0xLWksZz1kKmQsdj1nKmQsbT1hKmEseT0xLWEseD15KnksYj15KmEqMixfPS0zKngsdz0zKih4LWIpLGs9MyooYi1tKSxBPTMqbTtmb3IoaD0wO2g8dC5sZW5ndGg7aCsrKW89XyoodT10W2hdKVtuXVtyXSt3KnVbbisxXVtyXStrKnVbbisyXVtyXStBKnVbbiszXVtyXSxzPV8qdVtuXVtyKzFdK3cqdVtuKzFdW3IrMV0rayp1W24rMl1bcisxXStBKnVbbiszXVtyKzFdLGw9Xyp1W25dW3IrMl0rdyp1W24rMV1bcisyXStrKnVbbisyXVtyKzJdK0EqdVtuKzNdW3IrMl0sYz1fKnVbbl1bciszXSt3KnVbbisxXVtyKzNdK2sqdVtuKzJdW3IrM10rQSp1W24rM11bciszXSxlW2hdPXYqbyszKihnKmkqcytkKmYqbCkrcCpjO3JldHVybiBlfTplP2Z1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGMsdSxoO2V8fChlPVtdKSxyKj0zO3ZhciBmPWEqYSxwPWYqYSxkPTEtYSxnPWQqZCx2PWcqZDtmb3IodT0wO3U8dC5sZW5ndGg7dSsrKW89KGg9dFt1XSlbbisxXVtyXS1oW25dW3JdLHM9aFtuKzFdW3IrMV0taFtuXVtyKzFdLGw9aFtuKzFdW3IrMl0taFtuXVtyKzJdLGM9aFtuKzFdW3IrM10taFtuXVtyKzNdLGVbdV09dipvKzMqKGcqYSpzK2QqZipsKStwKmM7cmV0dXJuIGV9OnI/ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbyxzLGwsYztlfHwoZT1bXSksbio9Mzt2YXIgdT0xLWksaD1hKmEsZj0xLWEscD1mKmYsZD1mKmEqMixnPS0zKnAsdj0zKihwLWQpLG09MyooZC1oKSx5PTMqaDtmb3IobD0wO2w8dC5sZW5ndGg7bCsrKW89ZyooYz10W2xdKVtuXVtyXSt2KmNbbisxXVtyXSttKmNbbisyXVtyXSt5KmNbbiszXVtyXSxzPWcqY1tuXVtyKzFdK3YqY1tuKzFdW3IrMV0rbSpjW24rMl1bcisxXSt5KmNbbiszXVtyKzFdLGVbbF09dSpvK2kqcztyZXR1cm4gZX06ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbyxzLGwsYztlfHwoZT1bXSk7dmFyIHU9MS1pO2ZvcihsPTA7bDx0Lmxlbmd0aDtsKyspbz0oYz10W2xdKVtuKzFdW3JdLWNbbl1bcl0scz1jW24rMV1bcisxXS1jW25dW3IrMV0sZVtsXT11Km8raSpzO3JldHVybiBlfX19LHt9XSw4OTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1lLTIsbz1yLTI7cmV0dXJuIG4mJmk/ZnVuY3Rpb24oZSxyLG4pe3ZhciBpLHMsbCxjLHUsaDtlfHwoZT1bXSk7dmFyIGY9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKHIpLGEpKSxwPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihuKSxvKSksZD1NYXRoLm1heCgwLE1hdGgubWluKDEsci1mKSksZz1NYXRoLm1heCgwLE1hdGgubWluKDEsbi1wKSk7Zio9MyxwKj0zO3ZhciB2PWQqZCxtPXYqZCx5PTEtZCx4PXkqeSxiPXgqeSxfPWcqZyx3PV8qZyxrPTEtZyxBPWsqayxUPUEqaztmb3IoaD0wO2g8dC5sZW5ndGg7aCsrKWk9YioodT10W2hdKVtwXVtmXSszKih4KmQqdVtwXVtmKzFdK3kqdip1W3BdW2YrMl0pK20qdVtwXVtmKzNdLHM9Yip1W3ArMV1bZl0rMyooeCpkKnVbcCsxXVtmKzFdK3kqdip1W3ArMV1bZisyXSkrbSp1W3ArMV1bZiszXSxsPWIqdVtwKzJdW2ZdKzMqKHgqZCp1W3ArMl1bZisxXSt5KnYqdVtwKzJdW2YrMl0pK20qdVtwKzJdW2YrM10sYz1iKnVbcCszXVtmXSszKih4KmQqdVtwKzNdW2YrMV0reSp2KnVbcCszXVtmKzJdKSttKnVbcCszXVtmKzNdLGVbaF09VCppKzMqKEEqZypzK2sqXypsKSt3KmM7cmV0dXJuIGV9Om4/ZnVuY3Rpb24oZSxyLG4pe2V8fChlPVtdKTt2YXIgaSxzLGwsYyx1LGgsZj1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IociksYSkpLHA9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKG4pLG8pKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oMSxyLWYpKSxnPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuLXApKTtmKj0zO3ZhciB2PWQqZCxtPXYqZCx5PTEtZCx4PXkqeSxiPXgqeSxfPTEtZztmb3IodT0wO3U8dC5sZW5ndGg7dSsrKWk9XyooaD10W3VdKVtwXVtmXStnKmhbcCsxXVtmXSxzPV8qaFtwXVtmKzFdK2cqaFtwKzFdW2YrMV0sbD1fKmhbcF1bZisyXStnKmhbcCsxXVtmKzFdLGM9XypoW3BdW2YrM10rZypoW3ArMV1bZisxXSxlW3VdPWIqaSszKih4KmQqcyt5KnYqbCkrbSpjO3JldHVybiBlfTppP2Z1bmN0aW9uKGUscixuKXtlfHwoZT1bXSk7dmFyIGkscyxsLGMsdSxoLGY9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKHIpLGEpKSxwPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihuKSxvKSksZD1NYXRoLm1heCgwLE1hdGgubWluKDEsci1mKSksZz1NYXRoLm1heCgwLE1hdGgubWluKDEsbi1wKSk7cCo9Mzt2YXIgdj1nKmcsbT12KmcseT0xLWcseD15KnksYj14KnksXz0xLWQ7Zm9yKHU9MDt1PHQubGVuZ3RoO3UrKylpPV8qKGg9dFt1XSlbcF1bZl0rZCpoW3BdW2YrMV0scz1fKmhbcCsxXVtmXStkKmhbcCsxXVtmKzFdLGw9XypoW3ArMl1bZl0rZCpoW3ArMl1bZisxXSxjPV8qaFtwKzNdW2ZdK2QqaFtwKzNdW2YrMV0sZVt1XT1iKmkrMyooeCpnKnMreSp2KmwpK20qYztyZXR1cm4gZX06ZnVuY3Rpb24oZSxyLG4pe2V8fChlPVtdKTt2YXIgaSxzLGwsYyx1PU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihyKSxhKSksaD1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IobiksbykpLGY9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHItdSkpLHA9TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4taCkpLGQ9MS1wLGc9MS1mO2ZvcihsPTA7bDx0Lmxlbmd0aDtsKyspaT1nKihjPXRbbF0pW2hdW3VdK2YqY1toXVt1KzFdLHM9ZypjW2grMV1bdV0rZipjW2grMV1bdSsxXSxlW2xdPWQqaStwKnM7cmV0dXJuIGV9fX0se31dLDg5NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi94eV9kZWZhdWx0c1wiKSxhPXQoXCIuL2FiX2RlZmF1bHRzXCIpLG89dChcIi4vYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX1lLl9jbGlwUGF0aElkPVwiY2xpcFwiK2UudWlkK1wiY2FycGV0XCI7dmFyIHU9YyhcImNvbG9yXCIscy5kZWZhdWx0TGluZSk7KG4uY29lcmNlRm9udChjLFwiZm9udFwiKSxjKFwiY2FycGV0XCIpLGEodCxlLGwsYyx1KSxlLmEmJmUuYik/KGUuYS5sZW5ndGg8MyYmKGUuYWF4aXMuc21vb3RoaW5nPTApLGUuYi5sZW5ndGg8MyYmKGUuYmF4aXMuc21vb3RoaW5nPTApLGkodCxlLGMpfHwoZS52aXNpYmxlPSExKSxlLl9jaGVhdGVyJiZjKFwiY2hlYXRlcnNsb3BlXCIpKTplLnZpc2libGU9ITF9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIjo1NzcsXCIuLi8uLi9saWJcIjo3MDEsXCIuL2FiX2RlZmF1bHRzXCI6ODc4LFwiLi9hdHRyaWJ1dGVzXCI6ODgwLFwiLi94eV9kZWZhdWx0c1wiOjkwNH1dLDg5NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIiksbi5wbG90PXQoXCIuL3Bsb3RcIiksbi5jYWxjPXQoXCIuL2NhbGNcIiksbi5hbmltYXRhYmxlPSEwLG4uaXNDb250YWluZXI9ITAsbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJjYXJwZXRcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIiksbi5jYXRlZ29yaWVzPVtcImNhcnRlc2lhblwiLFwic3ZnXCIsXCJjYXJwZXRcIixcImNhcnBldEF4aXNcIixcIm5vdExlZ2VuZElzb2xhdGFibGVcIixcIm5vTXVsdGlDYXRlZ29yeVwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiOjc2MCxcIi4vYXR0cmlidXRlc1wiOjg4MCxcIi4vY2FsY1wiOjg4NCxcIi4vZGVmYXVsdHNcIjo4OTUsXCIuL3Bsb3RcIjo5MDF9XSw4OTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj10Ll9mdWxsRGF0YS5sZW5ndGgsaT0wO2k8bjtpKyspe3ZhciBhPXQuX2Z1bGxEYXRhW2ldO2lmKGEuaW5kZXghPT1lLmluZGV4JiYoXCJjYXJwZXRcIj09PWEudHlwZSYmKHJ8fChyPWEpLGEuY2FycGV0PT09ZS5jYXJwZXQpKSlyZXR1cm4gYX1yZXR1cm4gcn19LHt9XSw4OTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm5cIlwiO3ZhciBuLGk9W10sYT1yPzM6MTtmb3Iobj0wO248dC5sZW5ndGg7bis9YSlpLnB1c2godFtuXStcIixcIitlW25dKSxyJiZuPHQubGVuZ3RoLWEmJihpLnB1c2goXCJDXCIpLGkucHVzaChbdFtuKzFdK1wiLFwiK2VbbisxXSx0W24rMl0rXCIsXCIrZVtuKzJdK1wiIFwiXS5qb2luKFwiIFwiKSkpO3JldHVybiBpLmpvaW4ocj9cIlwiOlwiTFwiKX19LHt9XSw4OTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaTtmb3Iobih0KT90Lmxlbmd0aD5lLmxlbmd0aCYmKHQ9dC5zbGljZSgwLGUubGVuZ3RoKSk6dD1bXSxpPTA7aTxlLmxlbmd0aDtpKyspdFtpXT1yKGVbaV0pO3JldHVybiB0fX0se1wiLi4vLi4vbGliXCI6NzAxfV0sOTAwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1pWzBdKnQuZHBkeChlKSxzPWlbMV0qdC5kcGR5KHIpLGw9MSxjPTE7aWYoYSl7dmFyIHU9TWF0aC5zcXJ0KGlbMF0qaVswXStpWzFdKmlbMV0pLGg9TWF0aC5zcXJ0KGFbMF0qYVswXSthWzFdKmFbMV0pLGY9KGlbMF0qYVswXStpWzFdKmFbMV0pL3UvaDtjPU1hdGgubWF4KDAsZil9dmFyIHA9MTgwKk1hdGguYXRhbjIocyxvKS9NYXRoLlBJO3JldHVybiBwPC05MD8ocCs9MTgwLGw9LWwpOnA+OTAmJihwLT0xODAsbD0tbCkse2FuZ2xlOnAsZmxpcDpsLHA6dC5jMnAobixlLHIpLG9mZnNldE11bHRwbGllcjpjfX19LHt9XSw5MDE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLGE9dChcIi4vbWFwXzFkX2FycmF5XCIpLG89dChcIi4vbWFrZXBhdGhcIikscz10KFwiLi9vcmllbnRfdGV4dFwiKSxsPXQoXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIiksYz10KFwiLi4vLi4vbGliXCIpLHU9dChcIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIik7ZnVuY3Rpb24gaCh0LGUscixpLHMsbCl7dmFyIGM9XCJjb25zdC1cIitzK1wiLWxpbmVzXCIsdT1yLnNlbGVjdEFsbChcIi5cIitjKS5kYXRhKGwpO3UuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoYywhMCkuc3R5bGUoXCJ2ZWN0b3ItZWZmZWN0XCIsXCJub24tc2NhbGluZy1zdHJva2VcIiksdS5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBpPXIscz1pLngsbD1pLnksYz1hKFtdLHMsdC5jMnApLHU9YShbXSxsLGUuYzJwKSxoPVwiTVwiK28oYyx1LGkuc21vb3RoaW5nKTtuLnNlbGVjdCh0aGlzKS5hdHRyKFwiZFwiLGgpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsaS53aWR0aCkuc3R5bGUoXCJzdHJva2VcIixpLmNvbG9yKS5zdHlsZShcImZpbGxcIixcIm5vbmVcIil9KSx1LmV4aXQoKS5yZW1vdmUoKX1mdW5jdGlvbiBmKHQsZSxyLGEsbyxjLHUsaCl7dmFyIGY9Yy5zZWxlY3RBbGwoXCJ0ZXh0LlwiK2gpLmRhdGEodSk7Zi5lbnRlcigpLmFwcGVuZChcInRleHRcIikuY2xhc3NlZChoLCEwKTt2YXIgcD0wLGQ9e307cmV0dXJuIGYuZWFjaChmdW5jdGlvbihvLGMpe3ZhciB1O2lmKFwiYXV0b1wiPT09by5heGlzLnRpY2thbmdsZSl1PXMoYSxlLHIsby54eSxvLmR4eSk7ZWxzZXt2YXIgaD0oby5heGlzLnRpY2thbmdsZSsxODApKk1hdGguUEkvMTgwO3U9cyhhLGUscixvLnh5LFtNYXRoLmNvcyhoKSxNYXRoLnNpbihoKV0pfWN8fChkPXthbmdsZTp1LmFuZ2xlLGZsaXA6dS5mbGlwfSk7dmFyIGY9KG8uZW5kQW5jaG9yPy0xOjEpKnUuZmxpcCxnPW4uc2VsZWN0KHRoaXMpLmF0dHIoe1widGV4dC1hbmNob3JcIjpmPjA/XCJzdGFydFwiOlwiZW5kXCIsXCJkYXRhLW5vdGV4XCI6MX0pLmNhbGwoaS5mb250LG8uZm9udCkudGV4dChvLnRleHQpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsdCksdj1pLmJCb3godGhpcyk7Zy5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrdS5wWzBdK1wiLFwiK3UucFsxXStcIikgcm90YXRlKFwiK3UuYW5nbGUrXCIpdHJhbnNsYXRlKFwiK28uYXhpcy5sYWJlbHBhZGRpbmcqZitcIixcIisuMyp2LmhlaWdodCtcIilcIikscD1NYXRoLm1heChwLHYud2lkdGgrby5heGlzLmxhYmVscGFkZGluZyl9KSxmLmV4aXQoKS5yZW1vdmUoKSxkLm1heEV4dGVudD1wLGR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBsPWUueGF4aXMsdT1lLnlheGlzLHA9dC5fZnVsbExheW91dC5fY2xpcHM7Yy5tYWtlVHJhY2VHcm91cHMoaSxyLFwidHJhY2VcIikuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxpPWVbMF0sZD1pLnRyYWNlLHY9ZC5hYXhpcyxtPWQuYmF4aXMseT1jLmVuc3VyZVNpbmdsZShyLFwiZ1wiLFwibWlub3JsYXllclwiKSx4PWMuZW5zdXJlU2luZ2xlKHIsXCJnXCIsXCJtYWpvcmxheWVyXCIpLGI9Yy5lbnN1cmVTaW5nbGUocixcImdcIixcImJvdW5kYXJ5bGF5ZXJcIiksXz1jLmVuc3VyZVNpbmdsZShyLFwiZ1wiLFwibGFiZWxsYXllclwiKTtyLnN0eWxlKFwib3BhY2l0eVwiLGQub3BhY2l0eSksaChsLHUseCx2LFwiYVwiLHYuX2dyaWRsaW5lcyksaChsLHUseCxtLFwiYlwiLG0uX2dyaWRsaW5lcyksaChsLHUseSx2LFwiYVwiLHYuX21pbm9yZ3JpZGxpbmVzKSxoKGwsdSx5LG0sXCJiXCIsbS5fbWlub3JncmlkbGluZXMpLGgobCx1LGIsdixcImEtYm91bmRhcnlcIix2Ll9ib3VuZGFyeWxpbmVzKSxoKGwsdSxiLG0sXCJiLWJvdW5kYXJ5XCIsbS5fYm91bmRhcnlsaW5lcyk7dmFyIHc9Zih0LGwsdSxkLGksXyx2Ll9sYWJlbHMsXCJhLWxhYmVsXCIpLGs9Zih0LGwsdSxkLGksXyxtLl9sYWJlbHMsXCJiLWxhYmVsXCIpOyFmdW5jdGlvbih0LGUscixuLGksYSxvLGwpe3ZhciB1LGgsZixwO3U9LjUqKHIuYVswXStyLmFbci5hLmxlbmd0aC0xXSksaD1yLmJbMF0sZj1yLmFiMnh5KHUsaCwhMCkscD1yLmR4eWRhX3JvdWdoKHUsaCksdm9pZCAwPT09by5hbmdsZSYmYy5leHRlbmRGbGF0KG8scyhyLGksYSxmLHIuZHh5ZGJfcm91Z2godSxoKSkpO2codCxlLHIsbixmLHAsci5hYXhpcyxpLGEsbyxcImEtdGl0bGVcIiksdT1yLmFbMF0saD0uNSooci5iWzBdK3IuYltyLmIubGVuZ3RoLTFdKSxmPXIuYWIyeHkodSxoLCEwKSxwPXIuZHh5ZGJfcm91Z2godSxoKSx2b2lkIDA9PT1sLmFuZ2xlJiZjLmV4dGVuZEZsYXQobCxzKHIsaSxhLGYsci5keHlkYV9yb3VnaCh1LGgpKSk7Zyh0LGUscixuLGYscCxyLmJheGlzLGksYSxsLFwiYi10aXRsZVwiKX0odCxfLGQsaSxsLHUsdyxrKSxmdW5jdGlvbih0LGUscixuLGkpe3ZhciBzLGwsdSxoLGY9ci5zZWxlY3QoXCIjXCIrdC5fY2xpcFBhdGhJZCk7Zi5zaXplKCl8fChmPXIuYXBwZW5kKFwiY2xpcFBhdGhcIikuY2xhc3NlZChcImNhcnBldGNsaXBcIiwhMCkpO3ZhciBwPWMuZW5zdXJlU2luZ2xlKGYsXCJwYXRoXCIsXCJjYXJwZXRib3VuZGFyeVwiKSxkPWUuY2xpcHNlZ21lbnRzLGc9W107Zm9yKGg9MDtoPGQubGVuZ3RoO2grKylzPWRbaF0sbD1hKFtdLHMueCxuLmMycCksdT1hKFtdLHMueSxpLmMycCksZy5wdXNoKG8obCx1LHMuYmljdWJpYykpO3ZhciB2PVwiTVwiK2cuam9pbihcIkxcIikrXCJaXCI7Zi5hdHRyKFwiaWRcIix0Ll9jbGlwUGF0aElkKSxwLmF0dHIoXCJkXCIsdil9KGQsaSxwLGwsdSl9KX07dmFyIHA9dS5MSU5FX1NQQUNJTkcsZD0oMS11Lk1JRF9TSElGVCkvcCsxO2Z1bmN0aW9uIGcodCxlLHIsYSxvLGMsdSxoLGYsZyx2KXt2YXIgbT1bXTt1LnRpdGxlLnRleHQmJm0ucHVzaCh1LnRpdGxlLnRleHQpO3ZhciB5PWUuc2VsZWN0QWxsKFwidGV4dC5cIit2KS5kYXRhKG0pLHg9Zy5tYXhFeHRlbnQ7eS5lbnRlcigpLmFwcGVuZChcInRleHRcIikuY2xhc3NlZCh2LCEwKSx5LmVhY2goZnVuY3Rpb24oKXt2YXIgZT1zKHIsaCxmLG8sYyk7LTE9PT1bXCJzdGFydFwiLFwiYm90aFwiXS5pbmRleE9mKHUuc2hvd3RpY2tsYWJlbHMpJiYoeD0wKTt2YXIgYT11LnRpdGxlLmZvbnQuc2l6ZTt4Kz1hK3UudGl0bGUub2Zmc2V0O3ZhciB2PShnLmFuZ2xlKyhnLmZsaXA8MD8xODA6MCktZS5hbmdsZSs0NTApJTM2MCxtPXY+OTAmJnY8MjcwLHk9bi5zZWxlY3QodGhpcyk7eS50ZXh0KHUudGl0bGUudGV4dCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyx0KSxtJiYoeD0oLWwubGluZUNvdW50KHkpK2QpKnAqYS14KSx5LmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIitlLnBbMF0rXCIsXCIrZS5wWzFdK1wiKSByb3RhdGUoXCIrZS5hbmdsZStcIikgdHJhbnNsYXRlKDAsXCIreCtcIilcIikuY2xhc3NlZChcInVzZXItc2VsZWN0LW5vbmVcIiwhMCkuYXR0cihcInRleHQtYW5jaG9yXCIsXCJtaWRkbGVcIikuY2FsbChpLmZvbnQsdS50aXRsZS5mb250KX0pLHkuZXhpdCgpLnJlbW92ZSgpfX0se1wiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiOjY3MyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiOjcyNSxcIi4vbWFrZXBhdGhcIjo4OTgsXCIuL21hcF8xZF9hcnJheVwiOjg5OSxcIi4vb3JpZW50X3RleHRcIjo5MDAsZDM6MTU1fV0sOTAyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vY29uc3RhbnRzXCIpLGk9dChcIi4uLy4uL2xpYi9zZWFyY2hcIikuZmluZEJpbixhPXQoXCIuL2NvbXB1dGVfY29udHJvbF9wb2ludHNcIiksbz10KFwiLi9jcmVhdGVfc3BsaW5lX2V2YWx1YXRvclwiKSxzPXQoXCIuL2NyZWF0ZV9pX2Rlcml2YXRpdmVfZXZhbHVhdG9yXCIpLGw9dChcIi4vY3JlYXRlX2pfZGVyaXZhdGl2ZV9ldmFsdWF0b3JcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Escj10Ll9iLGM9ZS5sZW5ndGgsdT1yLmxlbmd0aCxoPXQuYWF4aXMsZj10LmJheGlzLHA9ZVswXSxkPWVbYy0xXSxnPXJbMF0sdj1yW3UtMV0sbT1lW2UubGVuZ3RoLTFdLWVbMF0seT1yW3IubGVuZ3RoLTFdLXJbMF0seD1tKm4uUkVMQVRJVkVfQ1VMTF9UT0xFUkFOQ0UsYj15Km4uUkVMQVRJVkVfQ1VMTF9UT0xFUkFOQ0U7cC09eCxkKz14LGctPWIsdis9Yix0LmlzVmlzaWJsZT1mdW5jdGlvbih0LGUpe3JldHVybiB0PnAmJnQ8ZCYmZT5nJiZlPHZ9LHQuaXNPY2NsdWRlZD1mdW5jdGlvbih0LGUpe3JldHVybiB0PHB8fHQ+ZHx8ZTxnfHxlPnZ9LHQuc2V0U2NhbGU9ZnVuY3Rpb24oKXt2YXIgZT10Ll94LHI9dC5feSxuPWEodC5feGN0cmwsdC5feWN0cmwsZSxyLGguc21vb3RoaW5nLGYuc21vb3RoaW5nKTt0Ll94Y3RybD1uWzBdLHQuX3ljdHJsPW5bMV0sdC5ldmFseHk9byhbdC5feGN0cmwsdC5feWN0cmxdLGMsdSxoLnNtb290aGluZyxmLnNtb290aGluZyksdC5keHlkaT1zKFt0Ll94Y3RybCx0Ll95Y3RybF0saC5zbW9vdGhpbmcsZi5zbW9vdGhpbmcpLHQuZHh5ZGo9bChbdC5feGN0cmwsdC5feWN0cmxdLGguc21vb3RoaW5nLGYuc21vb3RoaW5nKX0sdC5pMmE9ZnVuY3Rpb24odCl7dmFyIHI9TWF0aC5tYXgoMCxNYXRoLmZsb29yKHRbMF0pLGMtMiksbj10WzBdLXI7cmV0dXJuKDEtbikqZVtyXStuKmVbcisxXX0sdC5qMmI9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMCxNYXRoLmZsb29yKHRbMV0pLGMtMiksbj10WzFdLWU7cmV0dXJuKDEtbikqcltlXStuKnJbZSsxXX0sdC5pajJhYj1mdW5jdGlvbihlKXtyZXR1cm5bdC5pMmEoZVswXSksdC5qMmIoZVsxXSldfSx0LmEyaT1mdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1heCgwLE1hdGgubWluKGkodCxlKSxjLTIpKSxuPWVbcl0sYT1lW3IrMV07cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oYy0xLHIrKHQtbikvKGEtbikpKX0sdC5iMmo9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMCxNYXRoLm1pbihpKHQsciksdS0yKSksbj1yW2VdLGE9cltlKzFdO3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKHUtMSxlKyh0LW4pLyhhLW4pKSl9LHQuYWIyaWo9ZnVuY3Rpb24oZSl7cmV0dXJuW3QuYTJpKGVbMF0pLHQuYjJqKGVbMV0pXX0sdC5pMmM9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5ldmFseHkoW10sZSxyKX0sdC5hYjJ4eT1mdW5jdGlvbihuLGksYSl7aWYoIWEmJihuPGVbMF18fG4+ZVtjLTFdfGk8clswXXx8aT5yW3UtMV0pKXJldHVyblshMSwhMV07dmFyIG89dC5hMmkobikscz10LmIyaihpKSxsPXQuZXZhbHh5KFtdLG8scyk7aWYoYSl7dmFyIGgsZixwLGQsZz0wLHY9MCxtPVtdO248ZVswXT8oaD0wLGY9MCxnPShuLWVbMF0pLyhlWzFdLWVbMF0pKTpuPmVbYy0xXT8oaD1jLTIsZj0xLGc9KG4tZVtjLTFdKS8oZVtjLTFdLWVbYy0yXSkpOmY9by0oaD1NYXRoLm1heCgwLE1hdGgubWluKGMtMixNYXRoLmZsb29yKG8pKSkpLGk8clswXT8ocD0wLGQ9MCx2PShpLXJbMF0pLyhyWzFdLXJbMF0pKTppPnJbdS0xXT8ocD11LTIsZD0xLHY9KGktclt1LTFdKS8oclt1LTFdLXJbdS0yXSkpOmQ9cy0ocD1NYXRoLm1heCgwLE1hdGgubWluKHUtMixNYXRoLmZsb29yKHMpKSkpLGcmJih0LmR4eWRpKG0saCxwLGYsZCksbFswXSs9bVswXSpnLGxbMV0rPW1bMV0qZyksdiYmKHQuZHh5ZGoobSxoLHAsZixkKSxsWzBdKz1tWzBdKnYsbFsxXSs9bVsxXSp2KX1yZXR1cm4gbH0sdC5jMnA9ZnVuY3Rpb24odCxlLHIpe3JldHVybltlLmMycCh0WzBdKSxyLmMycCh0WzFdKV19LHQucDJ4PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZS5wMmModFswXSksci5wMmModFsxXSldfSx0LmRhZGk9ZnVuY3Rpb24odCl7dmFyIHI9TWF0aC5tYXgoMCxNYXRoLm1pbihlLmxlbmd0aC0yLHQpKTtyZXR1cm4gZVtyKzFdLWVbcl19LHQuZGJkaj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKHIubGVuZ3RoLTIsdCkpO3JldHVybiByW2UrMV0tcltlXX0sdC5keHlkYT1mdW5jdGlvbihlLHIsbixpKXt2YXIgYT10LmR4eWRpKG51bGwsZSxyLG4saSksbz10LmRhZGkoZSxuKTtyZXR1cm5bYVswXS9vLGFbMV0vb119LHQuZHh5ZGI9ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9dC5keHlkaihudWxsLGUscixuLGkpLG89dC5kYmRqKHIsaSk7cmV0dXJuW2FbMF0vbyxhWzFdL29dfSx0LmR4eWRhX3JvdWdoPWZ1bmN0aW9uKGUscixuKXt2YXIgaT1tKihufHwuMSksYT10LmFiMnh5KGUraSxyLCEwKSxvPXQuYWIyeHkoZS1pLHIsITApO3JldHVyblsuNSooYVswXS1vWzBdKS9pLC41KihhWzFdLW9bMV0pL2ldfSx0LmR4eWRiX3JvdWdoPWZ1bmN0aW9uKGUscixuKXt2YXIgaT15KihufHwuMSksYT10LmFiMnh5KGUscitpLCEwKSxvPXQuYWIyeHkoZSxyLWksITApO3JldHVyblsuNSooYVswXS1vWzBdKS9pLC41KihhWzFdLW9bMV0pL2ldfSx0LmRwZHg9ZnVuY3Rpb24odCl7cmV0dXJuIHQuX219LHQuZHBkeT1mdW5jdGlvbih0KXtyZXR1cm4gdC5fbX19fSx7XCIuLi8uLi9saWIvc2VhcmNoXCI6NzIwLFwiLi9jb21wdXRlX2NvbnRyb2xfcG9pbnRzXCI6ODkwLFwiLi9jb25zdGFudHNcIjo4OTEsXCIuL2NyZWF0ZV9pX2Rlcml2YXRpdmVfZXZhbHVhdG9yXCI6ODkyLFwiLi9jcmVhdGVfal9kZXJpdmF0aXZlX2V2YWx1YXRvclwiOjg5MyxcIi4vY3JlYXRlX3NwbGluZV9ldmFsdWF0b3JcIjo4OTR9XSw5MDM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGksYSxvLHM9W10sbD1bXSxjPXRbMF0ubGVuZ3RoLHU9dC5sZW5ndGg7ZnVuY3Rpb24gaChlLHIpe3ZhciBuLGk9MCxhPTA7cmV0dXJuIGU+MCYmdm9pZCAwIT09KG49dFtyXVtlLTFdKSYmKGErKyxpKz1uKSxlPGMtMSYmdm9pZCAwIT09KG49dFtyXVtlKzFdKSYmKGErKyxpKz1uKSxyPjAmJnZvaWQgMCE9PShuPXRbci0xXVtlXSkmJihhKyssaSs9bikscjx1LTEmJnZvaWQgMCE9PShuPXRbcisxXVtlXSkmJihhKyssaSs9biksaS9NYXRoLm1heCgxLGEpfXZhciBmLHAsZCxnLHYsbSx5LHgsYixfLHcsaz0wO2ZvcihpPTA7aTxjO2krKylmb3IoYT0wO2E8dTthKyspdm9pZCAwPT09dFthXVtpXSYmKHMucHVzaChpKSxsLnB1c2goYSksdFthXVtpXT1oKGksYSkpLGs9TWF0aC5tYXgoayxNYXRoLmFicyh0W2FdW2ldKSk7aWYoIXMubGVuZ3RoKXJldHVybiB0O3ZhciBBPTAsVD0wLE09cy5sZW5ndGg7ZG97Zm9yKEE9MCxvPTA7bzxNO28rKyl7aT1zW29dLGE9bFtvXTt2YXIgUyxFLEMsTCx6LE8sST0wLEQ9MDswPT09aT8oQz1lW3o9TWF0aC5taW4oYy0xLDIpXSxMPWVbMV0sUz10W2FdW3pdLEQrPShFPXRbYV1bMV0pKyhFLVMpKihlWzBdLUwpLyhMLUMpLEkrKyk6aT09PWMtMSYmKEM9ZVt6PU1hdGgubWF4KDAsYy0zKV0sTD1lW2MtMl0sUz10W2FdW3pdLEQrPShFPXRbYV1bYy0yXSkrKEUtUykqKGVbYy0xXS1MKS8oTC1DKSxJKyspLCgwPT09aXx8aT09PWMtMSkmJmE+MCYmYTx1LTEmJihmPXJbYSsxXS1yW2FdLEQrPSgocD1yW2FdLXJbYS0xXSkqdFthKzFdW2ldK2YqdFthLTFdW2ldKS8ocCtmKSxJKyspLDA9PT1hPyhDPXJbTz1NYXRoLm1pbih1LTEsMildLEw9clsxXSxTPXRbT11baV0sRCs9KEU9dFsxXVtpXSkrKEUtUykqKHJbMF0tTCkvKEwtQyksSSsrKTphPT09dS0xJiYoQz1yW089TWF0aC5tYXgoMCx1LTMpXSxMPXJbdS0yXSxTPXRbT11baV0sRCs9KEU9dFt1LTJdW2ldKSsoRS1TKSooclt1LTFdLUwpLyhMLUMpLEkrKyksKDA9PT1hfHxhPT09dS0xKSYmaT4wJiZpPGMtMSYmKGY9ZVtpKzFdLWVbaV0sRCs9KChwPWVbaV0tZVtpLTFdKSp0W2FdW2krMV0rZip0W2FdW2ktMV0pLyhwK2YpLEkrKyksST9ELz1JOihkPWVbaSsxXS1lW2ldLGc9ZVtpXS1lW2ktMV0seD0odj1yW2ErMV0tclthXSkqKG09clthXS1yW2EtMV0pKih2K20pLEQ9KCh5PWQqZyooZCtnKSkqKG0qdFthKzFdW2ldK3YqdFthLTFdW2ldKSt4KihnKnRbYV1baSsxXStkKnRbYV1baS0xXSkpLyh4KihnK2QpK3kqKG0rdikpKSxBKz0oXz0oYj1ELXRbYV1baV0pL2spKl8sdz1JPzA6Ljg1LHRbYV1baV0rPWIqKDErdyl9QT1NYXRoLnNxcnQoQSl9d2hpbGUoVCsrPDEwMCYmQT4xZS01KTtyZXR1cm4gbi5sb2coXCJTbW9vdGhlciBjb252ZXJnZWQgdG9cIixBLFwiYWZ0ZXJcIixULFwiaXRlcmF0aW9uc1wiKSx0fX0se1wiLi4vLi4vbGliXCI6NzAxfV0sOTA0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKS5pc0FycmF5MUQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1yKFwieFwiKSxhPWkmJmkubGVuZ3RoLG89cihcInlcIikscz1vJiZvLmxlbmd0aDtpZighYSYmIXMpcmV0dXJuITE7aWYoZS5fY2hlYXRlcj0haSxhJiYhbihpKXx8cyYmIW4obykpZS5fbGVuZ3RoPW51bGw7ZWxzZXt2YXIgbD1hP2kubGVuZ3RoOjEvMDtzJiYobD1NYXRoLm1pbihsLG8ubGVuZ3RoKSksZS5hJiZlLmEubGVuZ3RoJiYobD1NYXRoLm1pbihsLGUuYS5sZW5ndGgpKSxlLmImJmUuYi5sZW5ndGgmJihsPU1hdGgubWluKGwsZS5iLmxlbmd0aCkpLGUuX2xlbmd0aD1sfXJldHVybiEwfX0se1wiLi4vLi4vbGliXCI6NzAxfV0sOTA1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uL3NjYXR0ZXJnZW8vYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiKSxsPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsYz1pLm1hcmtlci5saW5lO2UuZXhwb3J0cz1sKHtsb2NhdGlvbnM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGxvY2F0aW9ubW9kZTppLmxvY2F0aW9ubW9kZSx6Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx0ZXh0Omwoe30saS50ZXh0LHt9KSxob3ZlcnRleHQ6bCh7fSxpLmhvdmVydGV4dCx7fSksbWFya2VyOntsaW5lOntjb2xvcjpjLmNvbG9yLHdpZHRoOmwoe30sYy53aWR0aCx7ZGZsdDoxfSksZWRpdFR5cGU6XCJjYWxjXCJ9LG9wYWNpdHk6e3ZhbFR5cGU6XCJudW1iZXJcIixhcnJheU9rOiEwLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZTpcInN0eWxlXCJ9LGVkaXRUeXBlOlwiY2FsY1wifSxzZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5Omkuc2VsZWN0ZWQubWFya2VyLm9wYWNpdHksZWRpdFR5cGU6XCJwbG90XCJ9LGVkaXRUeXBlOlwicGxvdFwifSx1bnNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6aS51bnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LGVkaXRUeXBlOlwicGxvdFwifSxlZGl0VHlwZTpcInBsb3RcIn0saG92ZXJpbmZvOmwoe30scy5ob3ZlcmluZm8se2VkaXRUeXBlOlwiY2FsY1wiLGZsYWdzOltcImxvY2F0aW9uXCIsXCJ6XCIsXCJ0ZXh0XCIsXCJuYW1lXCJdfSksaG92ZXJ0ZW1wbGF0ZTpuKCl9LGEoXCJcIix7Y0xldHRlcjpcInpcIixlZGl0VHlwZU92ZXJyaWRlOlwiY2FsY1wifSkse2NvbG9yYmFyOm99KX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCI6NTc5LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIjo1ODUsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi4vc2NhdHRlcmdlby9hdHRyaWJ1dGVzXCI6MTA5Mn1dLDkwNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsY1wiKSxvPXQoXCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YVwiKSxzPXQoXCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLl9sZW5ndGgsbD1uZXcgQXJyYXkociksYz0wO2M8cjtjKyspe3ZhciB1PWxbY109e30saD1lLmxvY2F0aW9uc1tjXSxmPWUueltjXTt1LmxvYz1cInN0cmluZ1wiPT10eXBlb2YgaD9oOm51bGwsdS56PW4oZik/ZjppfXJldHVybiBvKGwsZSksYSh0LGUse3ZhbHM6ZS56LGNvbnRhaW5lclN0cjpcIlwiLGNMZXR0ZXI6XCJ6XCJ9KSxzKGwsZSksbH19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCI6NTg2LFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhXCI6MTA1MSxcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIjoxMDU0LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw5MDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiKSxhPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgbD1zKFwibG9jYXRpb25zXCIpLGM9cyhcInpcIik7bCYmbC5sZW5ndGgmJm4uaXNBcnJheU9yVHlwZWRBcnJheShjKSYmYy5sZW5ndGg/KGUuX2xlbmd0aD1NYXRoLm1pbihsLmxlbmd0aCxjLmxlbmd0aCkscyhcImxvY2F0aW9ubW9kZVwiKSxzKFwidGV4dFwiKSxzKFwiaG92ZXJ0ZXh0XCIpLHMoXCJob3ZlcnRlbXBsYXRlXCIpLHMoXCJtYXJrZXIubGluZS5jb2xvclwiKSxzKFwibWFya2VyLmxpbmUud2lkdGhcIikscyhcIm1hcmtlci5vcGFjaXR5XCIpLGkodCxlLG8scyx7cHJlZml4OlwiXCIsY0xldHRlcjpcInpcIn0pLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHMpKTplLnZpc2libGU9ITF9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIjo1ODgsXCIuLi8uLi9saWJcIjo3MDEsXCIuL2F0dHJpYnV0ZXNcIjo5MDV9XSw5MDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sb2NhdGlvbj1lLmxvY2F0aW9uLHQuej1lLnosdH19LHt9XSw5MDk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksaT10KFwiLi9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG8scyxsLGMsdT10LmNkLGg9dVswXS50cmFjZSxmPXQuc3VicGxvdDtmb3Iocz0wO3M8dS5sZW5ndGg7cysrKWlmKGM9ITEsKG89dVtzXSkuX3BvbHlnb25zKXtmb3IobD0wO2w8by5fcG9seWdvbnMubGVuZ3RoO2wrKylvLl9wb2x5Z29uc1tsXS5jb250YWlucyhbZSxyXSkmJihjPSFjKSxvLl9wb2x5Z29uc1tsXS5jb250YWlucyhbZSszNjAscl0pJiYoYz0hYyk7aWYoYylicmVha31pZihjJiZvKXJldHVybiB0LngwPXQueDE9dC54YS5jMnAoby5jdCksdC55MD10LnkxPXQueWEuYzJwKG8uY3QpLHQuaW5kZXg9by5pbmRleCx0LmxvY2F0aW9uPW8ubG9jLHQuej1vLnosdC5ob3ZlcnRlbXBsYXRlPW8uaG92ZXJ0ZW1wbGF0ZSxmdW5jdGlvbih0LGUscixvKXtpZihlLmhvdmVydGVtcGxhdGUpcmV0dXJuO3ZhciBzPXIuaGl8fGUuaG92ZXJpbmZvLGw9XCJhbGxcIj09PXM/aS5ob3ZlcmluZm8uZmxhZ3M6cy5zcGxpdChcIitcIiksYz0tMSE9PWwuaW5kZXhPZihcIm5hbWVcIiksdT0tMSE9PWwuaW5kZXhPZihcImxvY2F0aW9uXCIpLGg9LTEhPT1sLmluZGV4T2YoXCJ6XCIpLGY9LTEhPT1sLmluZGV4T2YoXCJ0ZXh0XCIpLHA9W107IWMmJnU/dC5uYW1lT3ZlcnJpZGU9ci5sb2M6KGMmJih0Lm5hbWVPdmVycmlkZT1lLm5hbWUpLHUmJnAucHVzaChyLmxvYykpO2gmJnAucHVzaCgoZD1yLnosbi50aWNrVGV4dChvLG8uYzJsKGQpLFwiaG92ZXJcIikudGV4dCkpO3ZhciBkO2YmJmEocixlLHApO3QuZXh0cmFUZXh0PXAuam9pbihcIjxicj5cIil9KHQsaCxvLGYubW9ja0F4aXMpLFt0XX19LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHRcIjoxMDYwLFwiLi9hdHRyaWJ1dGVzXCI6OTA1fV0sOTEwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNvbG9yYmFyPXQoXCIuLi9oZWF0bWFwL2NvbG9yYmFyXCIpLG4uY2FsYz10KFwiLi9jYWxjXCIpLG4ucGxvdD10KFwiLi9wbG90XCIpLG4uc3R5bGU9dChcIi4vc3R5bGVcIikuc3R5bGUsbi5zdHlsZU9uU2VsZWN0PXQoXCIuL3N0eWxlXCIpLnN0eWxlT25TZWxlY3Qsbi5ob3ZlclBvaW50cz10KFwiLi9ob3ZlclwiKSxuLmV2ZW50RGF0YT10KFwiLi9ldmVudF9kYXRhXCIpLG4uc2VsZWN0UG9pbnRzPXQoXCIuL3NlbGVjdFwiKSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cImNob3JvcGxldGhcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9nZW9cIiksbi5jYXRlZ29yaWVzPVtcImdlb1wiLFwibm9PcGFjaXR5XCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvZ2VvXCI6Nzc5LFwiLi4vaGVhdG1hcC9jb2xvcmJhclwiOjk1MSxcIi4vYXR0cmlidXRlc1wiOjkwNSxcIi4vY2FsY1wiOjkwNixcIi4vZGVmYXVsdHNcIjo5MDcsXCIuL2V2ZW50X2RhdGFcIjo5MDgsXCIuL2hvdmVyXCI6OTA5LFwiLi9wbG90XCI6OTExLFwiLi9zZWxlY3RcIjo5MTIsXCIuL3N0eWxlXCI6OTEzfV0sOTExOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9saWIvcG9seWdvblwiKSxvPXQoXCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHNcIikuZ2V0VG9wb2pzb25GZWF0dXJlcyxzPXQoXCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzXCIpLmxvY2F0aW9uVG9GZWF0dXJlLGw9dChcIi4vc3R5bGVcIikuc3R5bGU7ZnVuY3Rpb24gYyh0LGUpe2Zvcih2YXIgcj10WzBdLnRyYWNlLG49dC5sZW5ndGgsaT1vKHIsZSksYT0wO2E8bjthKyspe3ZhciBsPXRbYV0sYz1zKHIubG9jYXRpb25tb2RlLGwubG9jLGkpO2M/KGwuZ2VvanNvbj1jLGwuY3Q9Yy5wcm9wZXJ0aWVzLmN0LGwuaW5kZXg9YSxsLl9wb2x5Z29ucz11KGMpKTpsLmdlb2pzb249bnVsbH19ZnVuY3Rpb24gdSh0KXt2YXIgZSxyLG4saSxvPXQuZ2VvbWV0cnkscz1vLmNvb3JkaW5hdGVzLGw9dC5pZCxjPVtdO2Z1bmN0aW9uIHUodCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aC0xO2UrKylpZih0W2VdWzBdPjAmJnRbZSsxXVswXTwwKXJldHVybiBlO3JldHVybiBudWxsfXN3aXRjaChlPVwiUlVTXCI9PT1sfHxcIkZKSVwiPT09bD9mdW5jdGlvbih0KXt2YXIgZTtpZihudWxsPT09dSh0KSllPXQ7ZWxzZSBmb3IoZT1uZXcgQXJyYXkodC5sZW5ndGgpLGk9MDtpPHQubGVuZ3RoO2krKyllW2ldPVt0W2ldWzBdPDA/dFtpXVswXSszNjA6dFtpXVswXSx0W2ldWzFdXTtjLnB1c2goYS50ZXN0ZXIoZSkpfTpcIkFUQVwiPT09bD9mdW5jdGlvbih0KXt2YXIgZT11KHQpO2lmKG51bGw9PT1lKXJldHVybiBjLnB1c2goYS50ZXN0ZXIodCkpO3ZhciByPW5ldyBBcnJheSh0Lmxlbmd0aCsxKSxuPTA7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKylpPmU/cltuKytdPVt0W2ldWzBdKzM2MCx0W2ldWzFdXTppPT09ZT8ocltuKytdPXRbaV0scltuKytdPVt0W2ldWzBdLC05MF0pOnJbbisrXT10W2ldO3ZhciBvPWEudGVzdGVyKHIpO28ucHRzLnBvcCgpLGMucHVzaChvKX06ZnVuY3Rpb24odCl7Yy5wdXNoKGEudGVzdGVyKHQpKX0sby50eXBlKXtjYXNlXCJNdWx0aVBvbHlnb25cIjpmb3Iocj0wO3I8cy5sZW5ndGg7cisrKWZvcihuPTA7bjxzW3JdLmxlbmd0aDtuKyspZShzW3JdW25dKTticmVhaztjYXNlXCJQb2x5Z29uXCI6Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKyllKHNbcl0pfXJldHVybiBjfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBhPTA7YTxyLmxlbmd0aDthKyspYyhyW2FdLGUudG9wb2pzb24pO3ZhciBvPWUubGF5ZXJzLmJhY2twbG90LnNlbGVjdChcIi5jaG9yb3BsZXRobGF5ZXJcIik7aS5tYWtlVHJhY2VHcm91cHMobyxyLFwidHJhY2UgY2hvcm9wbGV0aFwiKS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPShlWzBdLm5vZGUzPW4uc2VsZWN0KHRoaXMpKS5zZWxlY3RBbGwoXCJwYXRoLmNob3JvcGxldGhsb2NhdGlvblwiKS5kYXRhKGkuaWRlbnRpdHkpO3IuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoXCJjaG9yb3BsZXRobG9jYXRpb25cIiwhMCksci5leGl0KCkucmVtb3ZlKCksbCh0LGUpfSl9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzXCI6Njk0LFwiLi4vLi4vbGliL3BvbHlnb25cIjo3MTMsXCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHNcIjo3MjgsXCIuL3N0eWxlXCI6OTEzLGQzOjE1NX1dLDkxMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scz10LmNkLGw9dC54YXhpcyxjPXQueWF4aXMsdT1bXTtpZighMT09PWUpZm9yKHI9MDtyPHMubGVuZ3RoO3IrKylzW3JdLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8cy5sZW5ndGg7cisrKShpPShuPXNbcl0pLmN0KSYmKGE9bC5jMnAoaSksbz1jLmMycChpKSxlLmNvbnRhaW5zKFthLG9dLG51bGwscix0KT8odS5wdXNoKHtwb2ludE51bWJlcjpyLGxvbjppWzBdLGxhdDppWzFdfSksbi5zZWxlY3RlZD0xKTpuLnNlbGVjdGVkPTApO3JldHVybiB1fX0se31dLDkxMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGVcIik7ZnVuY3Rpb24gcyh0LGUpe3ZhciByPWVbMF0udHJhY2Uscz1lWzBdLm5vZGUzLnNlbGVjdEFsbChcIi5jaG9yb3BsZXRobG9jYXRpb25cIiksbD1yLm1hcmtlcnx8e30sYz1sLmxpbmV8fHt9LHU9by5tYWtlQ29sb3JTY2FsZUZ1bmMoby5leHRyYWN0U2NhbGUocix7Y0xldHRlcjpcInpcIn0pKTtzLmVhY2goZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuYXR0cihcImZpbGxcIix1KHQueikpLmNhbGwoaS5zdHJva2UsdC5tbGN8fGMuY29sb3IpLmNhbGwoYS5kYXNoTGluZSxcIlwiLHQubWx3fHxjLndpZHRofHwwKS5zdHlsZShcIm9wYWNpdHlcIixsLm9wYWNpdHkpfSksYS5zZWxlY3RlZFBvaW50U3R5bGUocyxyLHQpfWUuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCxlKXtlJiZzKHQsZSl9LHN0eWxlT25TZWxlY3Q6ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLm5vZGUzLG49ZVswXS50cmFjZTtuLnNlbGVjdGVkcG9pbnRzP2Euc2VsZWN0ZWRQb2ludFN0eWxlKHIuc2VsZWN0QWxsKFwiLmNob3JvcGxldGhsb2NhdGlvblwiKSxuLHQpOnModCxlKX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlXCI6NTkwLFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LGQzOjE1NX1dLDkxNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vbWVzaDNkL2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiKSxsPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsYz17eDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0seTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0sejp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0sdTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sdjp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sdzp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sc2l6ZW1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInNjYWxlZFwiLFwiYWJzb2x1dGVcIl0sZWRpdFR5cGU6XCJjYWxjXCIsZGZsdDpcInNjYWxlZFwifSxzaXplcmVmOnt2YWxUeXBlOlwibnVtYmVyXCIsZWRpdFR5cGU6XCJjYWxjXCIsbWluOjB9LGFuY2hvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIixlZGl0VHlwZTpcImNhbGNcIix2YWx1ZXM6W1widGlwXCIsXCJ0YWlsXCIsXCJjbVwiLFwiY2VudGVyXCJdLGRmbHQ6XCJjbVwifSx0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LGhvdmVydGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixhcnJheU9rOiEwLGVkaXRUeXBlOlwiY2FsY1wifSxob3ZlcnRlbXBsYXRlOmEoe2VkaXRUeXBlOlwiY2FsY1wifSx7a2V5czpbXCJub3JtXCJdfSl9O2woYyxuKFwiXCIse2NvbG9yQXR0cjpcInUvdi93IG5vcm1cIixzaG93U2NhbGVEZmx0OiEwLGVkaXRUeXBlT3ZlcnJpZGU6XCJjYWxjXCJ9KSx7Y29sb3JiYXI6aX0pO1tcIm9wYWNpdHlcIixcImxpZ2h0cG9zaXRpb25cIixcImxpZ2h0aW5nXCJdLmZvckVhY2goZnVuY3Rpb24odCl7Y1t0XT1vW3RdfSksYy5ob3ZlcmluZm89bCh7fSxzLmhvdmVyaW5mbyx7ZWRpdFR5cGU6XCJjYWxjXCIsZmxhZ3M6W1wieFwiLFwieVwiLFwielwiLFwidVwiLFwidlwiLFwid1wiLFwibm9ybVwiLFwidGV4dFwiLFwibmFtZVwiXSxkZmx0OlwieCt5K3orbm9ybSt0ZXh0K25hbWVcIn0pLGMudHJhbnNmb3Jtcz12b2lkIDAsZS5leHBvcnRzPWN9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiOjc0NixcIi4uL21lc2gzZC9hdHRyaWJ1dGVzXCI6OTk0fV0sOTE1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLnUsaT1lLnYsYT1lLncsbz1NYXRoLm1pbihlLngubGVuZ3RoLGUueS5sZW5ndGgsZS56Lmxlbmd0aCxyLmxlbmd0aCxpLmxlbmd0aCxhLmxlbmd0aCkscz0tMS8wLGw9MS8wLGM9MDtjPG87YysrKXt2YXIgdT1yW2NdLGg9aVtjXSxmPWFbY10scD1NYXRoLnNxcnQodSp1K2gqaCtmKmYpO3M9TWF0aC5tYXgocyxwKSxsPU1hdGgubWluKGwscCl9ZS5fbGVuPW8sZS5fbm9ybU1heD1zLG4odCxlLHt2YWxzOltsLHNdLGNvbnRhaW5lclN0cjpcIlwiLGNMZXR0ZXI6XCJjXCJ9KX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCI6NTg2fV0sOTE2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsLWNvbmUzZFwiKSxpPXQoXCJnbC1jb25lM2RcIikuY3JlYXRlQ29uZU1lc2gsYT10KFwiLi4vLi4vbGliXCIpLnNpbXBsZU1hcCxvPXQoXCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yXCIpLnBhcnNlQ29sb3JTY2FsZSxzPXQoXCIuLi8uLi9wbG90cy9nbDNkL3ppcDNcIik7ZnVuY3Rpb24gbCh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMubWVzaD1udWxsLHRoaXMuZGF0YT1udWxsfXZhciBjPWwucHJvdG90eXBlO2MuaGFuZGxlUGljaz1mdW5jdGlvbih0KXtpZih0Lm9iamVjdD09PXRoaXMubWVzaCl7dmFyIGU9dC5pbmRleD10LmRhdGEuaW5kZXgscj10aGlzLmRhdGEueFtlXSxuPXRoaXMuZGF0YS55W2VdLGk9dGhpcy5kYXRhLnpbZV0sYT10aGlzLmRhdGEudVtlXSxvPXRoaXMuZGF0YS52W2VdLHM9dGhpcy5kYXRhLndbZV07dC50cmFjZUNvb3JkaW5hdGU9W3IsbixpLGEsbyxzLE1hdGguc3FydChhKmErbypvK3MqcyldO3ZhciBsPXRoaXMuZGF0YS5ob3ZlcnRleHR8fHRoaXMuZGF0YS50ZXh0O3JldHVybiBBcnJheS5pc0FycmF5KGwpJiZ2b2lkIDAhPT1sW2VdP3QudGV4dExhYmVsPWxbZV06bCYmKHQudGV4dExhYmVsPWwpLCEwfX07dmFyIHU9e3hheGlzOjAseWF4aXM6MSx6YXhpczoyfSxoPXt0aXA6MSx0YWlsOjAsY206LjI1LGNlbnRlcjouNX0sZj17dGlwOjEsdGFpbDoxLGNtOi43NSxjZW50ZXI6LjV9O2Z1bmN0aW9uIHAodCxlKXt2YXIgcj10LmZ1bGxTY2VuZUxheW91dCxpPXQuZGF0YVNjYWxlLGw9e307ZnVuY3Rpb24gYyh0LGUpe3ZhciBuPXJbZV0sbz1pW3VbZV1dO3JldHVybiBhKHQsZnVuY3Rpb24odCl7cmV0dXJuIG4uZDJsKHQpKm99KX1sLnZlY3RvcnM9cyhjKGUudSxcInhheGlzXCIpLGMoZS52LFwieWF4aXNcIiksYyhlLncsXCJ6YXhpc1wiKSxlLl9sZW4pLGwucG9zaXRpb25zPXMoYyhlLngsXCJ4YXhpc1wiKSxjKGUueSxcInlheGlzXCIpLGMoZS56LFwiemF4aXNcIiksZS5fbGVuKSxsLmNvbG9ybWFwPW8oZSksbC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHM9W2UuY21pbi9lLl9ub3JtTWF4LGUuY21heC9lLl9ub3JtTWF4XSxsLmNvbmVPZmZzZXQ9aFtlLmFuY2hvcl0sXCJzY2FsZWRcIj09PWUuc2l6ZW1vZGU/bC5jb25lU2l6ZT1lLnNpemVyZWZ8fC41OmwuY29uZVNpemU9ZS5zaXplcmVmJiZlLl9ub3JtTWF4P2Uuc2l6ZXJlZi9lLl9ub3JtTWF4Oi41O3ZhciBwPW4obCksZD1lLmxpZ2h0cG9zaXRpb247cmV0dXJuIHAubGlnaHRQb3NpdGlvbj1bZC54LGQueSxkLnpdLHAuYW1iaWVudD1lLmxpZ2h0aW5nLmFtYmllbnQscC5kaWZmdXNlPWUubGlnaHRpbmcuZGlmZnVzZSxwLnNwZWN1bGFyPWUubGlnaHRpbmcuc3BlY3VsYXIscC5yb3VnaG5lc3M9ZS5saWdodGluZy5yb3VnaG5lc3MscC5mcmVzbmVsPWUubGlnaHRpbmcuZnJlc25lbCxwLm9wYWNpdHk9ZS5vcGFjaXR5LGUuX3BhZD1mW2UuYW5jaG9yXSpwLnZlY3RvclNjYWxlKnAuY29uZVNjYWxlKmUuX25vcm1NYXgscH1jLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLmRhdGE9dDt2YXIgZT1wKHRoaXMuc2NlbmUsdCk7dGhpcy5tZXNoLnVwZGF0ZShlKX0sYy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubWVzaCksdGhpcy5tZXNoLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsbj1wKHQsZSksYT1pKHIsbiksbz1uZXcgbCh0LGUudWlkKTtyZXR1cm4gby5tZXNoPWEsby5kYXRhPWUsYS5fdHJhY2U9byx0LmdscGxvdC5hZGQoYSksb319LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3JcIjo2OTgsXCIuLi8uLi9wbG90cy9nbDNkL3ppcDNcIjo4MDAsXCJnbC1jb25lM2RcIjoyMzl9XSw5MTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiKSxhPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgbD1zKFwidVwiKSxjPXMoXCJ2XCIpLHU9cyhcIndcIiksaD1zKFwieFwiKSxmPXMoXCJ5XCIpLHA9cyhcInpcIik7bCYmbC5sZW5ndGgmJmMmJmMubGVuZ3RoJiZ1JiZ1Lmxlbmd0aCYmaCYmaC5sZW5ndGgmJmYmJmYubGVuZ3RoJiZwJiZwLmxlbmd0aD8ocyhcInNpemVyZWZcIikscyhcInNpemVtb2RlXCIpLHMoXCJhbmNob3JcIikscyhcImxpZ2h0aW5nLmFtYmllbnRcIikscyhcImxpZ2h0aW5nLmRpZmZ1c2VcIikscyhcImxpZ2h0aW5nLnNwZWN1bGFyXCIpLHMoXCJsaWdodGluZy5yb3VnaG5lc3NcIikscyhcImxpZ2h0aW5nLmZyZXNuZWxcIikscyhcImxpZ2h0cG9zaXRpb24ueFwiKSxzKFwibGlnaHRwb3NpdGlvbi55XCIpLHMoXCJsaWdodHBvc2l0aW9uLnpcIiksaSh0LGUsbyxzLHtwcmVmaXg6XCJcIixjTGV0dGVyOlwiY1wifSkscyhcInRleHRcIikscyhcImhvdmVydGV4dFwiKSxzKFwiaG92ZXJ0ZW1wbGF0ZVwiKSxlLl9sZW5ndGg9bnVsbCk6ZS52aXNpYmxlPSExfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCI6NTg4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi9hdHRyaWJ1dGVzXCI6OTE0fV0sOTE4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwidHJhY2VcIixuYW1lOlwiY29uZVwiLGJhc2VQbG90TW9kdWxlOnQoXCIuLi8uLi9wbG90cy9nbDNkXCIpLGNhdGVnb3JpZXM6W1wiZ2wzZFwiXSxhdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksc3VwcGx5RGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIiksY29sb3JiYXI6e21pbjpcImNtaW5cIixtYXg6XCJjbWF4XCJ9LGNhbGM6dChcIi4vY2FsY1wiKSxwbG90OnQoXCIuL2NvbnZlcnRcIiksZXZlbnREYXRhOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubm9ybT1lLnRyYWNlQ29vcmRpbmF0ZVs2XSx0fSxtZXRhOnt9fX0se1wiLi4vLi4vcGxvdHMvZ2wzZFwiOjc4OSxcIi4vYXR0cmlidXRlc1wiOjkxNCxcIi4vY2FsY1wiOjkxNSxcIi4vY29udmVydFwiOjkxNixcIi4vZGVmYXVsdHNcIjo5MTd9XSw5MTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXNcIikuZGFzaCxsPXQoXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIiksYz10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LHU9dChcIi4uLy4uL2NvbnN0YW50cy9maWx0ZXJfb3BzXCIpLGg9dS5DT01QQVJJU09OX09QUzIsZj11LklOVEVSVkFMX09QUyxwPWkubGluZTtlLmV4cG9ydHM9Yyh7ejpuLnoseDpuLngseDA6bi54MCxkeDpuLmR4LHk6bi55LHkwOm4ueTAsZHk6bi5keSx0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsdHJhbnNwb3NlOm4udHJhbnNwb3NlLHh0eXBlOm4ueHR5cGUseXR5cGU6bi55dHlwZSx6aG92ZXJmb3JtYXQ6bi56aG92ZXJmb3JtYXQsaG92ZXJ0ZW1wbGF0ZTpuLmhvdmVydGVtcGxhdGUsY29ubmVjdGdhcHM6bi5jb25uZWN0Z2FwcyxmaWxsY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwiY2FsY1wifSxhdXRvY29udG91cjp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wiLGltcGxpZWRFZGl0czp7XCJjb250b3Vycy5zdGFydFwiOnZvaWQgMCxcImNvbnRvdXJzLmVuZFwiOnZvaWQgMCxcImNvbnRvdXJzLnNpemVcIjp2b2lkIDB9fSxuY29udG91cnM6e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsZGZsdDoxNSxtaW46MSxlZGl0VHlwZTpcImNhbGNcIn0sY29udG91cnM6e3R5cGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImxldmVsc1wiLFwiY29uc3RyYWludFwiXSxkZmx0OlwibGV2ZWxzXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHN0YXJ0Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDpudWxsLGVkaXRUeXBlOlwicGxvdFwiLGltcGxpZWRFZGl0czp7XCJeYXV0b2NvbnRvdXJcIjohMX19LGVuZDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6bnVsbCxlZGl0VHlwZTpcInBsb3RcIixpbXBsaWVkRWRpdHM6e1wiXmF1dG9jb250b3VyXCI6ITF9fSxzaXplOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDpudWxsLG1pbjowLGVkaXRUeXBlOlwicGxvdFwiLGltcGxpZWRFZGl0czp7XCJeYXV0b2NvbnRvdXJcIjohMX19LGNvbG9yaW5nOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJmaWxsXCIsXCJoZWF0bWFwXCIsXCJsaW5lc1wiLFwibm9uZVwiXSxkZmx0OlwiZmlsbFwiLGVkaXRUeXBlOlwiY2FsY1wifSxzaG93bGluZXM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcInBsb3RcIn0sc2hvd2xhYmVsczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwicGxvdFwifSxsYWJlbGZvbnQ6bCh7ZWRpdFR5cGU6XCJwbG90XCIsY29sb3JFZGl0VHlwZTpcInN0eWxlXCJ9KSxsYWJlbGZvcm1hdDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcInBsb3RcIn0sb3BlcmF0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXS5jb25jYXQoaCkuY29uY2F0KGYpLGRmbHQ6XCI9XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHZhbHVlOnt2YWxUeXBlOlwiYW55XCIsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIixpbXBsaWVkRWRpdHM6e2F1dG9jb250b3VyOiExfX0sbGluZTp7Y29sb3I6Yyh7fSxwLmNvbG9yLHtlZGl0VHlwZTpcInN0eWxlK2NvbG9yYmFyc1wifSksd2lkdGg6Yyh7fSxwLndpZHRoLHtlZGl0VHlwZTpcInN0eWxlK2NvbG9yYmFyc1wifSksZGFzaDpzLHNtb290aGluZzpjKHt9LHAuc21vb3RoaW5nLHt9KSxlZGl0VHlwZTpcInBsb3RcIn19LGEoXCJcIix7Y0xldHRlcjpcInpcIixhdXRvQ29sb3JEZmx0OiExLGVkaXRUeXBlT3ZlcnJpZGU6XCJjYWxjXCJ9KSx7Y29sb3JiYXI6b30pfSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIjo1NzksXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzXCI6NTk4LFwiLi4vLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHNcIjo2NzQsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCI6Nzc1LFwiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzXCI6OTQ4LFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCI6MTA1Mn1dLDkyMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9oZWF0bWFwL2NhbGNcIiksaT10KFwiLi9zZXRfY29udG91cnNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0LGUpO3JldHVybiBpKGUpLHJ9fSx7XCIuLi9oZWF0bWFwL2NhbGNcIjo5NDksXCIuL3NldF9jb250b3Vyc1wiOjkzOH1dLDkyMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scz10WzBdLGw9cy54Lmxlbmd0aCxjPXMueS5sZW5ndGgsdT1zLnosaD1uLmNvbnRvdXJzLGY9LTEvMCxwPTEvMDtmb3IoaT0wO2k8YztpKyspcD1NYXRoLm1pbihwLHVbaV1bMF0pLHA9TWF0aC5taW4ocCx1W2ldW2wtMV0pLGY9TWF0aC5tYXgoZix1W2ldWzBdKSxmPU1hdGgubWF4KGYsdVtpXVtsLTFdKTtmb3IoaT0xO2k8bC0xO2krKylwPU1hdGgubWluKHAsdVswXVtpXSkscD1NYXRoLm1pbihwLHVbYy0xXVtpXSksZj1NYXRoLm1heChmLHVbMF1baV0pLGY9TWF0aC5tYXgoZix1W2MtMV1baV0pO3N3aXRjaChzLnByZWZpeEJvdW5kYXJ5PSExLGUpe2Nhc2VcIj5cIjpoLnZhbHVlPmYmJihzLnByZWZpeEJvdW5kYXJ5PSEwKTticmVhaztjYXNlXCI8XCI6aC52YWx1ZTxwJiYocy5wcmVmaXhCb3VuZGFyeT0hMCk7YnJlYWs7Y2FzZVwiW11cIjphPU1hdGgubWluLmFwcGx5KG51bGwsaC52YWx1ZSksKChvPU1hdGgubWF4LmFwcGx5KG51bGwsaC52YWx1ZSkpPHB8fGE+ZikmJihzLnByZWZpeEJvdW5kYXJ5PSEwKTticmVhaztjYXNlXCJdW1wiOmE9TWF0aC5taW4uYXBwbHkobnVsbCxoLnZhbHVlKSxvPU1hdGgubWF4LmFwcGx5KG51bGwsaC52YWx1ZSksYTxwJiZvPmYmJihzLnByZWZpeEJvdW5kYXJ5PSEwKX19fSx7fV0sOTIyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvZHJhd1wiKSxpPXQoXCIuL21ha2VfY29sb3JfbWFwXCIpLGE9dChcIi4vZW5kX3BsdXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS50cmFjZSxvPVwiY2JcIityLnVpZDtpZih0Ll9mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKFwiLlwiK28pLnJlbW92ZSgpLHIuc2hvd3NjYWxlKXt2YXIgcz1lWzBdLnQuY2I9bih0LG8pLGw9ci5jb250b3VycyxjPXIubGluZSx1PWwuc2l6ZXx8MSxoPWwuY29sb3JpbmcsZj1pKHIse2lzQ29sb3JiYXI6ITB9KTtzLmZpbGxncmFkaWVudChcImhlYXRtYXBcIj09PWg/ci5jb2xvcnNjYWxlOlwiXCIpLnpyYW5nZShcImhlYXRtYXBcIj09PWg/W3Iuem1pbixyLnptYXhdOlwiXCIpLmZpbGxjb2xvcihcImZpbGxcIj09PWg/ZjpcIlwiKS5saW5lKHtjb2xvcjpcImxpbmVzXCI9PT1oP2Y6Yy5jb2xvcix3aWR0aDohMSE9PWwuc2hvd2xpbmVzP2Mud2lkdGg6MCxkYXNoOmMuZGFzaH0pLmxldmVscyh7c3RhcnQ6bC5zdGFydCxlbmQ6YShsKSxzaXplOnV9KS5vcHRpb25zKHIuY29sb3JiYXIpKCl9fX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9kcmF3XCI6NTgzLFwiLi9lbmRfcGx1c1wiOjkzMCxcIi4vbWFrZV9jb2xvcl9tYXBcIjo5MzV9XSw5MjM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e0JPVFRPTVNUQVJUOlsxLDksMTMsMTA0LDcxM10sVE9QU1RBUlQ6WzQsNiw3LDEwNCw3MTNdLExFRlRTVEFSVDpbOCwxMiwxNCwyMDgsMTExNF0sUklHSFRTVEFSVDpbMiwzLDExLDIwOCwxMTE0XSxORVdERUxUQTpbbnVsbCxbLTEsMF0sWzAsLTFdLFstMSwwXSxbMSwwXSxudWxsLFswLC0xXSxbLTEsMF0sWzAsMV0sWzAsMV0sbnVsbCxbMCwxXSxbMSwwXSxbMSwwXSxbMCwtMV1dLENIT09TRVNBRERMRTp7MTA0Ols0LDFdLDIwODpbMiw4XSw3MTM6WzcsMTNdLDExMTQ6WzExLDE0XX0sU0FERExFUkVNQUlOREVSOnsxOjQsMjo4LDQ6MSw3OjEzLDg6MiwxMToxNCwxMzo3LDE0OjExfSxMQUJFTERJU1RBTkNFOjIsTEFCRUxJTkNSRUFTRToxMCxMQUJFTE1JTjozLExBQkVMTUFYOjEwLExBQkVMT1BUSU1JWkVSOntFREdFQ09TVDoxLEFOR0xFQ09TVDoxLE5FSUdIQk9SQ09TVDo1LFNBTUVMRVZFTEZBQ1RPUjoxMCxTQU1FTEVWRUxESVNUQU5DRTo1LE1BWENPU1Q6MTAwLElOSVRJQUxTRUFSQ0hQT0lOVFM6MTAsSVRFUkFUSU9OUzo1fX19LHt9XSw5MjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi9sYWJlbF9kZWZhdWx0c1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLG89YS5hZGRPcGFjaXR5LHM9YS5vcGFjaXR5LGw9dChcIi4uLy4uL2NvbnN0YW50cy9maWx0ZXJfb3BzXCIpLGM9bC5DT05TVFJBSU5UX1JFRFVDVElPTix1PWwuQ09NUEFSSVNPTl9PUFMyO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLGwsaCl7dmFyIGYscCxkLGc9ZS5jb250b3Vycyx2PXIoXCJjb250b3Vycy5vcGVyYXRpb25cIik7KGcuX29wZXJhdGlvbj1jW3ZdLGZ1bmN0aW9uKHQsZSl7dmFyIHI7LTE9PT11LmluZGV4T2YoZS5vcGVyYXRpb24pPyh0KFwiY29udG91cnMudmFsdWVcIixbMCwxXSksQXJyYXkuaXNBcnJheShlLnZhbHVlKT9lLnZhbHVlLmxlbmd0aD4yP2UudmFsdWU9ZS52YWx1ZS5zbGljZSgyKTowPT09ZS5sZW5ndGg/ZS52YWx1ZT1bMCwxXTplLmxlbmd0aDwyPyhyPXBhcnNlRmxvYXQoZS52YWx1ZVswXSksZS52YWx1ZT1bcixyKzFdKTplLnZhbHVlPVtwYXJzZUZsb2F0KGUudmFsdWVbMF0pLHBhcnNlRmxvYXQoZS52YWx1ZVsxXSldOm4oZS52YWx1ZSkmJihyPXBhcnNlRmxvYXQoZS52YWx1ZSksZS52YWx1ZT1bcixyKzFdKSk6KHQoXCJjb250b3Vycy52YWx1ZVwiLDApLG4oZS52YWx1ZSl8fChBcnJheS5pc0FycmF5KGUudmFsdWUpP2UudmFsdWU9cGFyc2VGbG9hdChlLnZhbHVlWzBdKTplLnZhbHVlPTApKX0ocixnKSxcIj1cIj09PXY/Zj1nLnNob3dsaW5lcz0hMDooZj1yKFwiY29udG91cnMuc2hvd2xpbmVzXCIpLGQ9cihcImZpbGxjb2xvclwiLG8oKHQubGluZXx8e30pLmNvbG9yfHxsLC41KSkpLGYpJiYocD1yKFwibGluZS5jb2xvclwiLGQmJnMoZCk/byhlLmZpbGxjb2xvciwxKTpsKSxyKFwibGluZS53aWR0aFwiLDIpLHIoXCJsaW5lLmRhc2hcIikpO3IoXCJsaW5lLnNtb290aGluZ1wiKSxpKHIsYSxwLGgpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbnN0YW50cy9maWx0ZXJfb3BzXCI6Njc0LFwiLi9sYWJlbF9kZWZhdWx0c1wiOjkzNCxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sOTI1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbnN0YW50cy9maWx0ZXJfb3BzXCIpLGk9dChcImZhc3QtaXNudW1lcmljXCIpO2Z1bmN0aW9uIGEodCxlKXt2YXIgcixhPUFycmF5LmlzQXJyYXkoZSk7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gaSh0KT8rdDpudWxsfXJldHVybi0xIT09bi5DT01QQVJJU09OX09QUzIuaW5kZXhPZih0KT9yPW8oYT9lWzBdOmUpOi0xIT09bi5JTlRFUlZBTF9PUFMuaW5kZXhPZih0KT9yPWE/W28oZVswXSksbyhlWzFdKV06W28oZSksbyhlKV06LTEhPT1uLlNFVF9PUFMuaW5kZXhPZih0KSYmKHI9YT9lLm1hcChvKTpbbyhlKV0pLHJ9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZT1hKHQsZSk7dmFyIHI9TWF0aC5taW4oZVswXSxlWzFdKSxuPU1hdGgubWF4KGVbMF0sZVsxXSk7cmV0dXJue3N0YXJ0OnIsZW5kOm4sc2l6ZTpuLXJ9fX1mdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm57c3RhcnQ6ZT1hKHQsZSksZW5kOjEvMCxzaXplOjEvMH19fWUuZXhwb3J0cz17XCJbXVwiOm8oXCJbXVwiKSxcIl1bXCI6byhcIl1bXCIpLFwiPlwiOnMoXCI+XCIpLFwiPFwiOnMoXCI8XCIpLFwiPVwiOnMoXCI9XCIpfX0se1wiLi4vLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHNcIjo2NzQsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDkyNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uKFwiY29udG91cnMuc3RhcnRcIiksYT1uKFwiY29udG91cnMuZW5kXCIpLG89ITE9PT1pfHwhMT09PWEscz1yKFwiY29udG91cnMuc2l6ZVwiKTshKG8/ZS5hdXRvY29udG91cj0hMDpyKFwiYXV0b2NvbnRvdXJcIiwhMSkpJiZzfHxyKFwibmNvbnRvdXJzXCIpfX0se31dLDkyNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIik7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbi5leHRlbmRGbGF0KHt9LHQse2VkZ2VwYXRoczpuLmV4dGVuZERlZXAoW10sdC5lZGdlcGF0aHMpLHBhdGhzOm4uZXh0ZW5kRGVlcChbXSx0LnBhdGhzKX0pfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGEsbyxzPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJldmVyc2UoKX0sbD1mdW5jdGlvbih0KXtyZXR1cm4gdH07c3dpdGNoKGUpe2Nhc2VcIj1cIjpjYXNlXCI8XCI6cmV0dXJuIHQ7Y2FzZVwiPlwiOmZvcigxIT09dC5sZW5ndGgmJm4ud2FybihcIkNvbnRvdXIgZGF0YSBpbnZhbGlkIGZvciB0aGUgc3BlY2lmaWVkIGluZXF1YWxpdHkgb3BlcmF0aW9uLlwiKSxhPXRbMF0scj0wO3I8YS5lZGdlcGF0aHMubGVuZ3RoO3IrKylhLmVkZ2VwYXRoc1tyXT1zKGEuZWRnZXBhdGhzW3JdKTtmb3Iocj0wO3I8YS5wYXRocy5sZW5ndGg7cisrKWEucGF0aHNbcl09cyhhLnBhdGhzW3JdKTtyZXR1cm4gdDtjYXNlXCJdW1wiOnZhciBjPXM7cz1sLGw9YztjYXNlXCJbXVwiOmZvcigyIT09dC5sZW5ndGgmJm4ud2FybihcIkNvbnRvdXIgZGF0YSBpbnZhbGlkIGZvciB0aGUgc3BlY2lmaWVkIGluZXF1YWxpdHkgcmFuZ2Ugb3BlcmF0aW9uLlwiKSxhPWkodFswXSksbz1pKHRbMV0pLHI9MDtyPGEuZWRnZXBhdGhzLmxlbmd0aDtyKyspYS5lZGdlcGF0aHNbcl09cyhhLmVkZ2VwYXRoc1tyXSk7Zm9yKHI9MDtyPGEucGF0aHMubGVuZ3RoO3IrKylhLnBhdGhzW3JdPXMoYS5wYXRoc1tyXSk7Zm9yKDtvLmVkZ2VwYXRocy5sZW5ndGg7KWEuZWRnZXBhdGhzLnB1c2gobChvLmVkZ2VwYXRocy5zaGlmdCgpKSk7Zm9yKDtvLnBhdGhzLmxlbmd0aDspYS5wYXRocy5wdXNoKGwoby5wYXRocy5zaGlmdCgpKSk7cmV0dXJuW2FdfX19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDkyODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHNcIiksYT10KFwiLi9jb25zdHJhaW50X2RlZmF1bHRzXCIpLG89dChcIi4vY29udG91cnNfZGVmYXVsdHNcIikscz10KFwiLi9zdHlsZV9kZWZhdWx0c1wiKSxsPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwscixpKX1pZihpKHQsZSx1LGMpKXt1KFwidGV4dFwiKSx1KFwiaG92ZXJ0ZXh0XCIpLHUoXCJob3ZlcnRlbXBsYXRlXCIpO3ZhciBoPVwiY29uc3RyYWludFwiPT09dShcImNvbnRvdXJzLnR5cGVcIik7dShcImNvbm5lY3RnYXBzXCIsbi5pc0FycmF5MUQoZS56KSksaD9hKHQsZSx1LGMscik6KG8odCxlLHUsZnVuY3Rpb24ocil7cmV0dXJuIG4uY29lcmNlMih0LGUsbCxyKX0pLHModCxlLHUsYykpfWVsc2UgZS52aXNpYmxlPSExfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHNcIjo5NjIsXCIuL2F0dHJpYnV0ZXNcIjo5MTksXCIuL2NvbnN0cmFpbnRfZGVmYXVsdHNcIjo5MjQsXCIuL2NvbnRvdXJzX2RlZmF1bHRzXCI6OTI2LFwiLi9zdHlsZV9kZWZhdWx0c1wiOjk0MH1dLDkyOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9jb25zdHJhaW50X21hcHBpbmdcIiksYT10KFwiLi9lbmRfcGx1c1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbz1cImNvbnN0cmFpbnRcIj09PXQudHlwZT9pW3QuX29wZXJhdGlvbl0odC52YWx1ZSk6dCxzPW8uc2l6ZSxsPVtdLGM9YShvKSx1PXIudHJhY2UuX2NhcnBldFRyYWNlLGg9dT97eGF4aXM6dS5hYXhpcyx5YXhpczp1LmJheGlzLHg6ci5hLHk6ci5ifTp7eGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLHg6ci54LHk6ci55fSxmPW8uc3RhcnQ7ZjxjO2YrPXMpaWYobC5wdXNoKG4uZXh0ZW5kRmxhdCh7bGV2ZWw6Zixjcm9zc2luZ3M6e30sc3RhcnRzOltdLGVkZ2VwYXRoczpbXSxwYXRoczpbXSx6OnIueixzbW9vdGhpbmc6ci50cmFjZS5saW5lLnNtb290aGluZ30saCkpLGwubGVuZ3RoPjFlMyl7bi53YXJuKFwiVG9vIG1hbnkgY29udG91cnMsIGNsaXBwaW5nIGF0IDEwMDBcIix0KTticmVha31yZXR1cm4gbH19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4vY29uc3RyYWludF9tYXBwaW5nXCI6OTI1LFwiLi9lbmRfcGx1c1wiOjkzMH1dLDkzMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdC5lbmQrdC5zaXplLzFlNn19LHt9XSw5MzE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vY29uc3RhbnRzXCIpO2Z1bmN0aW9uIGEodCxlLHIsbil7cmV0dXJuIE1hdGguYWJzKHRbMF0tZVswXSk8ciYmTWF0aC5hYnModFsxXS1lWzFdKTxufWZ1bmN0aW9uIG8odCxlLHIsbyxsKXt2YXIgYyx1PWUuam9pbihcIixcIiksaD11LGY9dC5jcm9zc2luZ3NbaF0scD1mdW5jdGlvbih0LGUscil7dmFyIG49MCxhPTA7dD4yMCYmZT8yMDg9PT10fHwxMTE0PT09dD9uPTA9PT1yWzBdPzE6LTE6YT0wPT09clsxXT8xOi0xOi0xIT09aS5CT1RUT01TVEFSVC5pbmRleE9mKHQpP2E9MTotMSE9PWkuTEVGVFNUQVJULmluZGV4T2YodCk/bj0xOi0xIT09aS5UT1BTVEFSVC5pbmRleE9mKHQpP2E9LTE6bj0tMTtyZXR1cm5bbixhXX0oZixyLGUpLGQ9W3ModCxlLFstcFswXSwtcFsxXV0pXSxnPXAuam9pbihcIixcIiksdj10LnoubGVuZ3RoLG09dC56WzBdLmxlbmd0aDtmb3IoYz0wO2M8MWU0O2MrKyl7aWYoZj4yMD8oZj1pLkNIT09TRVNBRERMRVtmXVsocFswXXx8cFsxXSk8MD8wOjFdLHQuY3Jvc3NpbmdzW2hdPWkuU0FERExFUkVNQUlOREVSW2ZdKTpkZWxldGUgdC5jcm9zc2luZ3NbaF0sIShwPWkuTkVXREVMVEFbZl0pKXtuLmxvZyhcIkZvdW5kIGJhZCBtYXJjaGluZyBpbmRleDpcIixmLGUsdC5sZXZlbCk7YnJlYWt9ZC5wdXNoKHModCxlLHApKSxlWzBdKz1wWzBdLGVbMV0rPXBbMV0sYShkW2QubGVuZ3RoLTFdLGRbZC5sZW5ndGgtMl0sbyxsKSYmZC5wb3AoKSxoPWUuam9pbihcIixcIik7dmFyIHk9cFswXSYmKGVbMF08MHx8ZVswXT5tLTIpfHxwWzFdJiYoZVsxXTwwfHxlWzFdPnYtMik7aWYoaD09PXUmJnAuam9pbihcIixcIik9PT1nfHxyJiZ5KWJyZWFrO2Y9dC5jcm9zc2luZ3NbaF19MWU0PT09YyYmbi5sb2coXCJJbmZpbml0ZSBsb29wIGluIGNvbnRvdXI/XCIpO3ZhciB4LGIsXyx3LGssQSxULE0sUyxFLEMsTCx6LE8sSSxEPWEoZFswXSxkW2QubGVuZ3RoLTFdLG8sbCksUD0wLFI9LjIqdC5zbW9vdGhpbmcsRj1bXSxCPTA7Zm9yKGM9MTtjPGQubGVuZ3RoO2MrKylMPWRbY10sej1kW2MtMV0sdm9pZCAwLHZvaWQgMCxPPUxbMl0telsyXSxJPUxbM10telszXSxQKz1UPU1hdGguc3FydChPKk8rSSpJKSxGLnB1c2goVCk7dmFyIE49UC9GLmxlbmd0aCpSO2Z1bmN0aW9uIGoodCl7cmV0dXJuIGRbdCVkLmxlbmd0aF19Zm9yKGM9ZC5sZW5ndGgtMjtjPj1CO2MtLSlpZigoeD1GW2NdKTxOKXtmb3IoXz0wLGI9Yy0xO2I+PUImJngrRltiXTxOO2ItLSl4Kz1GW2JdO2lmKEQmJmM9PT1kLmxlbmd0aC0yKWZvcihfPTA7XzxiJiZ4K0ZbX108TjtfKyspeCs9RltfXTtrPWMtYitfKzEsQT1NYXRoLmZsb29yKChjK2IrXysyKS8yKSx3PUR8fGMhPT1kLmxlbmd0aC0yP0R8fC0xIT09Yj9rJTI/aihBKTpbKGooQSlbMF0raihBKzEpWzBdKS8yLChqKEEpWzFdK2ooQSsxKVsxXSkvMl06ZFswXTpkW2QubGVuZ3RoLTFdLGQuc3BsaWNlKGIrMSxjLWIrMSx3KSxjPWIrMSxfJiYoQj1fKSxEJiYoYz09PWQubGVuZ3RoLTI/ZFtfXT1kW2QubGVuZ3RoLTFdOjA9PT1jJiYoZFtkLmxlbmd0aC0xXT1kWzBdKSl9Zm9yKGQuc3BsaWNlKDAsQiksYz0wO2M8ZC5sZW5ndGg7YysrKWRbY10ubGVuZ3RoPTI7aWYoIShkLmxlbmd0aDwyKSlpZihEKWQucG9wKCksdC5wYXRocy5wdXNoKGQpO2Vsc2V7cnx8bi5sb2coXCJVbmNsb3NlZCBpbnRlcmlvciBjb250b3VyP1wiLHQubGV2ZWwsdSxkLmpvaW4oXCJMXCIpKTt2YXIgVj0hMTtmb3IoTT0wO008dC5lZGdlcGF0aHMubGVuZ3RoO00rKylpZihFPXQuZWRnZXBhdGhzW01dLCFWJiZhKEVbMF0sZFtkLmxlbmd0aC0xXSxvLGwpKXtkLnBvcCgpLFY9ITA7dmFyIFU9ITE7Zm9yKFM9MDtTPHQuZWRnZXBhdGhzLmxlbmd0aDtTKyspaWYoYSgoQz10LmVkZ2VwYXRoc1tTXSlbQy5sZW5ndGgtMV0sZFswXSxvLGwpKXtVPSEwLGQuc2hpZnQoKSx0LmVkZ2VwYXRocy5zcGxpY2UoTSwxKSxTPT09TT90LnBhdGhzLnB1c2goZC5jb25jYXQoQykpOihTPk0mJlMtLSx0LmVkZ2VwYXRoc1tTXT1DLmNvbmNhdChkLEUpKTticmVha31VfHwodC5lZGdlcGF0aHNbTV09ZC5jb25jYXQoRSkpfWZvcihNPTA7TTx0LmVkZ2VwYXRocy5sZW5ndGgmJiFWO00rKylhKChFPXQuZWRnZXBhdGhzW01dKVtFLmxlbmd0aC0xXSxkWzBdLG8sbCkmJihkLnNoaWZ0KCksdC5lZGdlcGF0aHNbTV09RS5jb25jYXQoZCksVj0hMCk7Vnx8dC5lZGdlcGF0aHMucHVzaChkKX19ZnVuY3Rpb24gcyh0LGUscil7dmFyIG49ZVswXStNYXRoLm1heChyWzBdLDApLGk9ZVsxXStNYXRoLm1heChyWzFdLDApLGE9dC56W2ldW25dLG89dC54YXhpcyxzPXQueWF4aXM7aWYoclsxXSl7dmFyIGw9KHQubGV2ZWwtYSkvKHQueltpXVtuKzFdLWEpO3JldHVybltvLmMycCgoMS1sKSp0Lnhbbl0rbCp0LnhbbisxXSwhMCkscy5jMnAodC55W2ldLCEwKSxuK2wsaV19dmFyIGM9KHQubGV2ZWwtYSkvKHQueltpKzFdW25dLWEpO3JldHVybltvLmMycCh0Lnhbbl0sITApLHMuYzJwKCgxLWMpKnQueVtpXStjKnQueVtpKzFdLCEwKSxuLGkrY119ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLHMsbDtmb3IoZT1lfHwuMDEscj1yfHwuMDEsYT0wO2E8dC5sZW5ndGg7YSsrKXtmb3Iocz10W2FdLGw9MDtsPHMuc3RhcnRzLmxlbmd0aDtsKyspbyhzLHMuc3RhcnRzW2xdLFwiZWRnZVwiLGUscik7Zm9yKGk9MDtPYmplY3Qua2V5cyhzLmNyb3NzaW5ncykubGVuZ3RoJiZpPDFlNDspaSsrLG8ocyxPYmplY3Qua2V5cyhzLmNyb3NzaW5ncylbMF0uc3BsaXQoXCIsXCIpLm1hcChOdW1iZXIpLHZvaWQgMCxlLHIpOzFlND09PWkmJm4ubG9nKFwiSW5maW5pdGUgbG9vcCBpbiBjb250b3VyP1wiKX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuL2NvbnN0YW50c1wiOjkyM31dLDkzMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGk9dChcIi4uL2hlYXRtYXAvaG92ZXJcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyl7dmFyIHM9aSh0LGUscixhLG8sITApO3JldHVybiBzJiZzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC50cmFjZTtcImNvbnN0cmFpbnRcIj09PWUuY29udG91cnMudHlwZSYmKGUuZmlsbGNvbG9yJiZuLm9wYWNpdHkoZS5maWxsY29sb3IpP3QuY29sb3I9bi5hZGRPcGFjaXR5KGUuZmlsbGNvbG9yLDEpOmUuY29udG91cnMuc2hvd2xpbmVzJiZuLm9wYWNpdHkoZS5saW5lLmNvbG9yKSYmKHQuY29sb3I9bi5hZGRPcGFjaXR5KGUubGluZS5jb2xvciwxKSkpfSksc319LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi9oZWF0bWFwL2hvdmVyXCI6OTU1fV0sOTMzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLnBsb3Q9dChcIi4vcGxvdFwiKS5wbG90LG4uc3R5bGU9dChcIi4vc3R5bGVcIiksbi5jb2xvcmJhcj10KFwiLi9jb2xvcmJhclwiKSxuLmhvdmVyUG9pbnRzPXQoXCIuL2hvdmVyXCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwiY29udG91clwiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiKSxuLmNhdGVnb3JpZXM9W1wiY2FydGVzaWFuXCIsXCJzdmdcIixcIjJkTWFwXCIsXCJjb250b3VyXCIsXCJzaG93TGVnZW5kXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi9hdHRyaWJ1dGVzXCI6OTE5LFwiLi9jYWxjXCI6OTIwLFwiLi9jb2xvcmJhclwiOjkyMixcIi4vZGVmYXVsdHNcIjo5MjgsXCIuL2hvdmVyXCI6OTMyLFwiLi9wbG90XCI6OTM3LFwiLi9zdHlsZVwiOjkzOX1dLDkzNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe2lmKGl8fChpPXt9KSx0KFwiY29udG91cnMuc2hvd2xhYmVsc1wiKSl7dmFyIGE9ZS5mb250O24uY29lcmNlRm9udCh0LFwiY29udG91cnMubGFiZWxmb250XCIse2ZhbWlseTphLmZhbWlseSxzaXplOmEuc2l6ZSxjb2xvcjpyfSksdChcImNvbnRvdXJzLmxhYmVsZm9ybWF0XCIpfSExIT09aS5oYXNIb3ZlciYmdChcInpob3ZlcmZvcm1hdFwiKX19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDkzNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGVcIiksYT10KFwiLi9lbmRfcGx1c1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5jb250b3VycyxyPWUuc3RhcnQsbz1hKGUpLHM9ZS5zaXplfHwxLGw9TWF0aC5mbG9vcigoby1yKS9zKSsxLGM9XCJsaW5lc1wiPT09ZS5jb2xvcmluZz8wOjE7aXNGaW5pdGUocyl8fChzPTEsbD0xKTt2YXIgdSxoLGY9dC5yZXZlcnNlc2NhbGU/aS5mbGlwU2NhbGUodC5jb2xvcnNjYWxlKTp0LmNvbG9yc2NhbGUscD1mLmxlbmd0aCxkPW5ldyBBcnJheShwKSxnPW5ldyBBcnJheShwKTtpZihcImhlYXRtYXBcIj09PWUuY29sb3Jpbmcpe2Zvcih0LnphdXRvJiYhMT09PXQuYXV0b2NvbnRvdXImJih0LnptaW49ci1zLzIsdC56bWF4PXQuem1pbitsKnMpLGg9MDtoPHA7aCsrKXU9ZltoXSxkW2hdPXVbMF0qKHQuem1heC10LnptaW4pK3Quem1pbixnW2hdPXVbMV07dmFyIHY9bi5leHRlbnQoW3Quem1pbix0LnptYXgsZS5zdGFydCxlLnN0YXJ0K3MqKGwtMSldKSxtPXZbdC56bWluPHQuem1heD8wOjFdLHk9dlt0LnptaW48dC56bWF4PzE6MF07bSE9PXQuem1pbiYmKGQuc3BsaWNlKDAsMCxtKSxnLnNwbGljZSgwLDAsUmFuZ2VbMF0pKSx5IT09dC56bWF4JiYoZC5wdXNoKHkpLGcucHVzaChnW2cubGVuZ3RoLTFdKSl9ZWxzZSBmb3IoaD0wO2g8cDtoKyspdT1mW2hdLGRbaF09KHVbMF0qKGwrYy0xKS1jLzIpKnMrcixnW2hdPXVbMV07cmV0dXJuIGkubWFrZUNvbG9yU2NhbGVGdW5jKHtkb21haW46ZCxyYW5nZTpnfSx7bm9OdW1lcmljQ2hlY2s6ITB9KX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZVwiOjU5MCxcIi4vZW5kX3BsdXNcIjo5MzAsZDM6MTU1fV0sOTM2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vY29uc3RhbnRzXCIpO2Z1bmN0aW9uIGkodCxlKXt2YXIgcj0oZVswXVswXT50PzA6MSkrKGVbMF1bMV0+dD8wOjIpKyhlWzFdWzFdPnQ/MDo0KSsoZVsxXVswXT50PzA6OCk7cmV0dXJuIDU9PT1yfHwxMD09PXI/dD4oZVswXVswXStlWzBdWzFdK2VbMV1bMF0rZVsxXVsxXSkvND81PT09cj83MTM6MTExNDo1PT09cj8xMDQ6MjA4OjE1PT09cj8wOnJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsYSxvLHMsbCxjLHUsaCxmPXRbMF0ueixwPWYubGVuZ3RoLGQ9ZlswXS5sZW5ndGgsZz0yPT09cHx8Mj09PWQ7Zm9yKHI9MDtyPHAtMTtyKyspZm9yKG89W10sMD09PXImJihvPW8uY29uY2F0KG4uQk9UVE9NU1RBUlQpKSxyPT09cC0yJiYobz1vLmNvbmNhdChuLlRPUFNUQVJUKSksZT0wO2U8ZC0xO2UrKylmb3IoYT1vLnNsaWNlKCksMD09PWUmJihhPWEuY29uY2F0KG4uTEVGVFNUQVJUKSksZT09PWQtMiYmKGE9YS5jb25jYXQobi5SSUdIVFNUQVJUKSkscz1lK1wiLFwiK3IsbD1bW2Zbcl1bZV0sZltyXVtlKzFdXSxbZltyKzFdW2VdLGZbcisxXVtlKzFdXV0saD0wO2g8dC5sZW5ndGg7aCsrKShjPWkoKHU9dFtoXSkubGV2ZWwsbCkpJiYodS5jcm9zc2luZ3Nbc109YywtMSE9PWEuaW5kZXhPZihjKSYmKHUuc3RhcnRzLnB1c2goW2Uscl0pLGcmJi0xIT09YS5pbmRleE9mKGMsYS5pbmRleE9mKGMpKzEpJiZ1LnN0YXJ0cy5wdXNoKFtlLHJdKSkpfX0se1wiLi9jb25zdGFudHNcIjo5MjN9XSw5Mzc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxvPXQoXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIikscz10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksbD10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3NldF9jb252ZXJ0XCIpLGM9dChcIi4uL2hlYXRtYXAvcGxvdFwiKSx1PXQoXCIuL21ha2VfY3Jvc3NpbmdzXCIpLGg9dChcIi4vZmluZF9hbGxfcGF0aHNcIiksZj10KFwiLi9lbXB0eV9wYXRoaW5mb1wiKSxwPXQoXCIuL2NvbnZlcnRfdG9fY29uc3RyYWludHNcIiksZD10KFwiLi9jbG9zZV9ib3VuZGFyaWVzXCIpLGc9dChcIi4vY29uc3RhbnRzXCIpLHY9Zy5MQUJFTE9QVElNSVpFUjtmdW5jdGlvbiBtKHQsZSl7dmFyIHIsbixvLHMsbCxjLHUsaD1mdW5jdGlvbih0LGUpe3ZhciByPXQucHJlZml4Qm91bmRhcnk7aWYodm9pZCAwPT09cil7dmFyIG49TWF0aC5taW4odC56WzBdWzBdLHQuelswXVsxXSk7cj0hdC5lZGdlcGF0aHMubGVuZ3RoJiZuPnQubGV2ZWx9cmV0dXJuIHI/XCJNXCIrZS5qb2luKFwiTFwiKStcIlpcIjpcIlwifSh0LGUpLGY9MCxwPXQuZWRnZXBhdGhzLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBlfSksZD0hMDtmdW5jdGlvbiBnKHQpe3JldHVybiBNYXRoLmFicyh0WzFdLWVbMl1bMV0pPC4wMX1mdW5jdGlvbiB2KHQpe3JldHVybiBNYXRoLmFicyh0WzBdLWVbMF1bMF0pPC4wMX1mdW5jdGlvbiBtKHQpe3JldHVybiBNYXRoLmFicyh0WzBdLWVbMl1bMF0pPC4wMX1mb3IoO3AubGVuZ3RoOyl7Zm9yKGM9YS5zbW9vdGhvcGVuKHQuZWRnZXBhdGhzW2ZdLHQuc21vb3RoaW5nKSxoKz1kP2M6Yy5yZXBsYWNlKC9eTS8sXCJMXCIpLHAuc3BsaWNlKHAuaW5kZXhPZihmKSwxKSxyPXQuZWRnZXBhdGhzW2ZdW3QuZWRnZXBhdGhzW2ZdLmxlbmd0aC0xXSxzPS0xLG89MDtvPDQ7bysrKXtpZighcil7aS5sb2coXCJNaXNzaW5nIGVuZD9cIixmLHQpO2JyZWFrfWZvcih1PXIsTWF0aC5hYnModVsxXS1lWzBdWzFdKTwuMDEmJiFtKHIpP249ZVsxXTp2KHIpP249ZVswXTpnKHIpP249ZVszXTptKHIpJiYobj1lWzJdKSxsPTA7bDx0LmVkZ2VwYXRocy5sZW5ndGg7bCsrKXt2YXIgeT10LmVkZ2VwYXRoc1tsXVswXTtNYXRoLmFicyhyWzBdLW5bMF0pPC4wMT9NYXRoLmFicyhyWzBdLXlbMF0pPC4wMSYmKHlbMV0tclsxXSkqKG5bMV0teVsxXSk+PTAmJihuPXkscz1sKTpNYXRoLmFicyhyWzFdLW5bMV0pPC4wMT9NYXRoLmFicyhyWzFdLXlbMV0pPC4wMSYmKHlbMF0tclswXSkqKG5bMF0teVswXSk+PTAmJihuPXkscz1sKTppLmxvZyhcImVuZHB0IHRvIG5ld2VuZHB0IGlzIG5vdCB2ZXJ0LiBvciBob3J6LlwiLHIsbix5KX1pZihyPW4scz49MClicmVhaztoKz1cIkxcIitufWlmKHM9PT10LmVkZ2VwYXRocy5sZW5ndGgpe2kubG9nKFwidW5jbG9zZWQgcGVyaW1ldGVyIHBhdGhcIik7YnJlYWt9Zj1zLChkPS0xPT09cC5pbmRleE9mKGYpKSYmKGY9cFswXSxoKz1cIlpcIil9Zm9yKGY9MDtmPHQucGF0aHMubGVuZ3RoO2YrKyloKz1hLnNtb290aGNsb3NlZCh0LnBhdGhzW2ZdLHQuc21vb3RoaW5nKTtyZXR1cm4gaH1mdW5jdGlvbiB5KHQsZSxyLG4pe3ZhciBhPWUud2lkdGgvMixvPWUuaGVpZ2h0LzIscz10LngsbD10LnksYz10LnRoZXRhLHU9TWF0aC5jb3MoYykqYSxoPU1hdGguc2luKGMpKmEsZj0ocz5uLmNlbnRlcj9uLnJpZ2h0LXM6cy1uLmxlZnQpLyh1K01hdGguYWJzKE1hdGguc2luKGMpKm8pKSxwPShsPm4ubWlkZGxlP24uYm90dG9tLWw6bC1uLnRvcCkvKE1hdGguYWJzKGgpK01hdGguY29zKGMpKm8pO2lmKGY8MXx8cDwxKXJldHVybiAxLzA7dmFyIGQ9di5FREdFQ09TVCooMS8oZi0xKSsxLyhwLTEpKTtkKz12LkFOR0xFQ09TVCpjKmM7Zm9yKHZhciBnPXMtdSxtPWwtaCx5PXMrdSx4PWwraCxiPTA7YjxyLmxlbmd0aDtiKyspe3ZhciBfPXJbYl0sdz1NYXRoLmNvcyhfLnRoZXRhKSpfLndpZHRoLzIsaz1NYXRoLnNpbihfLnRoZXRhKSpfLndpZHRoLzIsQT0yKmkuc2VnbWVudERpc3RhbmNlKGcsbSx5LHgsXy54LXcsXy55LWssXy54K3csXy55K2spLyhlLmhlaWdodCtfLmhlaWdodCksVD1fLmxldmVsPT09ZS5sZXZlbCxNPVQ/di5TQU1FTEVWRUxESVNUQU5DRToxO2lmKEE8PU0pcmV0dXJuIDEvMDtkKz12Lk5FSUdIQk9SQ09TVCooVD92LlNBTUVMRVZFTEZBQ1RPUjoxKS8oQS1NKX1yZXR1cm4gZH1yLnBsb3Q9ZnVuY3Rpb24odCxlLG8scyl7dmFyIGw9ZS54YXhpcyx2PWUueWF4aXM7aS5tYWtlVHJhY2VHcm91cHMocyxvLFwiY29udG91clwiKS5lYWNoKGZ1bmN0aW9uKG8pe3ZhciBzPW4uc2VsZWN0KHRoaXMpLHk9b1swXSx4PXkudHJhY2UsYj15LngsXz15Lnksdz14LmNvbnRvdXJzLGs9Zih3LGUseSksQT1pLmVuc3VyZVNpbmdsZShzLFwiZ1wiLFwiaGVhdG1hcGNvbG9yaW5nXCIpLFQ9W107XCJoZWF0bWFwXCI9PT13LmNvbG9yaW5nJiYoeC56YXV0byYmITE9PT14LmF1dG9jb250b3VyJiYoeC5faW5wdXQuem1pbj14LnptaW49dy5zdGFydC13LnNpemUvMix4Ll9pbnB1dC56bWF4PXguem1heD14LnptaW4ray5sZW5ndGgqdy5zaXplKSxUPVtvXSksYyh0LGUsVCxBKSx1KGspLGgoayk7dmFyIE09bC5jMnAoYlswXSwhMCksUz1sLmMycChiW2IubGVuZ3RoLTFdLCEwKSxFPXYuYzJwKF9bMF0sITApLEM9di5jMnAoX1tfLmxlbmd0aC0xXSwhMCksTD1bW00sQ10sW1MsQ10sW1MsRV0sW00sRV1dLHo9aztcImNvbnN0cmFpbnRcIj09PXcudHlwZSYmKHo9cChrLHcuX29wZXJhdGlvbiksZCh6LHcuX29wZXJhdGlvbixMLHgpKSxmdW5jdGlvbih0LGUscil7dmFyIG49aS5lbnN1cmVTaW5nbGUodCxcImdcIixcImNvbnRvdXJiZ1wiKS5zZWxlY3RBbGwoXCJwYXRoXCIpLmRhdGEoXCJmaWxsXCI9PT1yLmNvbG9yaW5nP1swXTpbXSk7bi5lbnRlcigpLmFwcGVuZChcInBhdGhcIiksbi5leGl0KCkucmVtb3ZlKCksbi5hdHRyKFwiZFwiLFwiTVwiK2Uuam9pbihcIkxcIikrXCJaXCIpLnN0eWxlKFwic3Ryb2tlXCIsXCJub25lXCIpfShzLEwsdyksZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89aS5lbnN1cmVTaW5nbGUodCxcImdcIixcImNvbnRvdXJmaWxsXCIpLnNlbGVjdEFsbChcInBhdGhcIikuZGF0YShcImZpbGxcIj09PWEuY29sb3Jpbmd8fFwiY29uc3RyYWludFwiPT09YS50eXBlJiZcIj1cIiE9PWEuX29wZXJhdGlvbj9lOltdKTtvLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKSxvLmV4aXQoKS5yZW1vdmUoKSxvLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9bSh0LHIpO2U/bi5zZWxlY3QodGhpcykuYXR0cihcImRcIixlKS5zdHlsZShcInN0cm9rZVwiLFwibm9uZVwiKTpuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKX0pfShzLHosTCx3KSxmdW5jdGlvbih0LGUsbyxzLGwsYyl7dmFyIHU9aS5lbnN1cmVTaW5nbGUodCxcImdcIixcImNvbnRvdXJsaW5lc1wiKSxoPSExIT09bC5zaG93bGluZXMsZj1sLnNob3dsYWJlbHMscD1oJiZmLGQ9ci5jcmVhdGVMaW5lcyh1LGh8fGYsZSksdj1yLmNyZWF0ZUxpbmVDbGlwKHUscCxvLHMudHJhY2UudWlkKSxtPXQuc2VsZWN0QWxsKFwiZy5jb250b3VybGFiZWxzXCIpLmRhdGEoZj9bMF06W10pO2lmKG0uZXhpdCgpLnJlbW92ZSgpLG0uZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJjb250b3VybGFiZWxzXCIsITApLGYpe3ZhciB5PVtdLHg9W107aS5jbGVhckxvY2F0aW9uQ2FjaGUoKTt2YXIgYj1yLmxhYmVsRm9ybWF0dGVyKGwscy50LmNiLG8uX2Z1bGxMYXlvdXQpLF89YS50ZXN0ZXIuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwiZGF0YS1ub3RleFwiLDEpLmNhbGwoYS5mb250LGwubGFiZWxmb250KSx3PWVbMF0ueGF4aXMsaz1lWzBdLnlheGlzLEE9dy5fbGVuZ3RoLFQ9ay5fbGVuZ3RoLE09dy5yYW5nZSxTPWsucmFuZ2UsRT1NYXRoLm1heChjWzBdWzBdLDApLEM9TWF0aC5taW4oY1syXVswXSxBKSxMPU1hdGgubWF4KGNbMF1bMV0sMCksej1NYXRoLm1pbihjWzJdWzFdLFQpLE89e307TVswXTxNWzFdPyhPLmxlZnQ9RSxPLnJpZ2h0PUMpOihPLmxlZnQ9QyxPLnJpZ2h0PUUpLFNbMF08U1sxXT8oTy50b3A9TCxPLmJvdHRvbT16KTooTy50b3A9eixPLmJvdHRvbT1MKSxPLm1pZGRsZT0oTy50b3ArTy5ib3R0b20pLzIsTy5jZW50ZXI9KE8ubGVmdCtPLnJpZ2h0KS8yLHkucHVzaChbW08ubGVmdCxPLnRvcF0sW08ucmlnaHQsTy50b3BdLFtPLnJpZ2h0LE8uYm90dG9tXSxbTy5sZWZ0LE8uYm90dG9tXV0pO3ZhciBJPU1hdGguc3FydChBKkErVCpUKSxEPWcuTEFCRUxESVNUQU5DRSpJL01hdGgubWF4KDEsZS5sZW5ndGgvZy5MQUJFTElOQ1JFQVNFKTtkLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9ci5jYWxjVGV4dE9wdHModC5sZXZlbCxiLF8sbyk7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKFwicGF0aFwiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9aS5nZXRWaXNpYmxlU2VnbWVudCh0aGlzLE8sZS5oZWlnaHQvMik7aWYodCYmISh0LmxlbjwoZS53aWR0aCtlLmhlaWdodCkqZy5MQUJFTE1JTikpZm9yKHZhciBuPU1hdGgubWluKE1hdGguY2VpbCh0Lmxlbi9EKSxnLkxBQkVMTUFYKSxhPTA7YTxuO2ErKyl7dmFyIG89ci5maW5kQmVzdFRleHRMb2NhdGlvbih0aGlzLHQsZSx4LE8pO2lmKCFvKWJyZWFrO3IuYWRkTGFiZWxEYXRhKG8sZSx4LHkpfX0pfSksXy5yZW1vdmUoKSxyLmRyYXdMYWJlbHMobSx4LG8sdixwP3k6bnVsbCl9ZiYmIWgmJmQucmVtb3ZlKCl9KHMsayx0LHksdyxMKSxmdW5jdGlvbih0LGUscixuLG8pe3ZhciBzPXIuX2Z1bGxMYXlvdXQuX2NsaXBzLGw9XCJjbGlwXCIrbi50cmFjZS51aWQsYz1zLnNlbGVjdEFsbChcIiNcIitsKS5kYXRhKG4udHJhY2UuY29ubmVjdGdhcHM/W106WzBdKTtpZihjLmVudGVyKCkuYXBwZW5kKFwiY2xpcFBhdGhcIikuY2xhc3NlZChcImNvbnRvdXJjbGlwXCIsITApLmF0dHIoXCJpZFwiLGwpLGMuZXhpdCgpLnJlbW92ZSgpLCExPT09bi50cmFjZS5jb25uZWN0Z2Fwcyl7dmFyIGY9e2xldmVsOi45LGNyb3NzaW5nczp7fSxzdGFydHM6W10sZWRnZXBhdGhzOltdLHBhdGhzOltdLHhheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpcyx4Om4ueCx5Om4ueSx6OmZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10LnRyYWNlLl9lbXB0eXBvaW50cyxpPVtdLGE9dC56Lmxlbmd0aCxvPXQuelswXS5sZW5ndGgscz1bXTtmb3IoZT0wO2U8bztlKyspcy5wdXNoKDEpO2ZvcihlPTA7ZTxhO2UrKylpLnB1c2gocy5zbGljZSgpKTtmb3IoZT0wO2U8bi5sZW5ndGg7ZSsrKXI9bltlXSxpW3JbMF1dW3JbMV1dPTA7cmV0dXJuIHQuem1hc2s9aSxpfShuKSxzbW9vdGhpbmc6MH07dShbZl0pLGgoW2ZdKTt2YXIgcD1tKGYsbyksZD1pLmVuc3VyZVNpbmdsZShjLFwicGF0aFwiLFwiXCIpO2QuYXR0cihcImRcIixwKX1lbHNlIGw9bnVsbDthLnNldENsaXBVcmwodCxsLHIpfShzLGUsdCx5LEwpfSl9LHIuY3JlYXRlTGluZXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXJbMF0uc21vb3RoaW5nLGk9dC5zZWxlY3RBbGwoXCJnLmNvbnRvdXJsZXZlbFwiKS5kYXRhKGU/cjpbXSk7aWYoaS5leGl0KCkucmVtb3ZlKCksaS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcImNvbnRvdXJsZXZlbFwiLCEwKSxlKXt2YXIgbz1pLnNlbGVjdEFsbChcInBhdGgub3BlbmxpbmVcIikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5wZWRnZXBhdGhzfHx0LmVkZ2VwYXRoc30pO28uZXhpdCgpLnJlbW92ZSgpLG8uZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoXCJvcGVubGluZVwiLCEwKSxvLmF0dHIoXCJkXCIsZnVuY3Rpb24odCl7cmV0dXJuIGEuc21vb3Rob3Blbih0LG4pfSkuc3R5bGUoXCJzdHJva2UtbWl0ZXJsaW1pdFwiLDEpLnN0eWxlKFwidmVjdG9yLWVmZmVjdFwiLFwibm9uLXNjYWxpbmctc3Ryb2tlXCIpO3ZhciBzPWkuc2VsZWN0QWxsKFwicGF0aC5jbG9zZWRsaW5lXCIpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQucHBhdGhzfHx0LnBhdGhzfSk7cy5leGl0KCkucmVtb3ZlKCkscy5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChcImNsb3NlZGxpbmVcIiwhMCkscy5hdHRyKFwiZFwiLGZ1bmN0aW9uKHQpe3JldHVybiBhLnNtb290aGNsb3NlZCh0LG4pfSkuc3R5bGUoXCJzdHJva2UtbWl0ZXJsaW1pdFwiLDEpLnN0eWxlKFwidmVjdG9yLWVmZmVjdFwiLFwibm9uLXNjYWxpbmctc3Ryb2tlXCIpfXJldHVybiBpfSxyLmNyZWF0ZUxpbmVDbGlwPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWU/XCJjbGlwbGluZVwiK246bnVsbCxvPXIuX2Z1bGxMYXlvdXQuX2NsaXBzLnNlbGVjdEFsbChcIiNcIitpKS5kYXRhKGU/WzBdOltdKTtyZXR1cm4gby5leGl0KCkucmVtb3ZlKCksby5lbnRlcigpLmFwcGVuZChcImNsaXBQYXRoXCIpLmNsYXNzZWQoXCJjb250b3VybGluZWNsaXBcIiwhMCkuYXR0cihcImlkXCIsaSksYS5zZXRDbGlwVXJsKHQsaSxyKSxvfSxyLmxhYmVsRm9ybWF0dGVyPWZ1bmN0aW9uKHQsZSxyKXtpZih0LmxhYmVsZm9ybWF0KXJldHVybiByLl9kM2xvY2FsZS5udW1iZXJGb3JtYXQodC5sYWJlbGZvcm1hdCk7dmFyIG47aWYoZSluPWUuYXhpcztlbHNle2lmKG49e3R5cGU6XCJsaW5lYXJcIixfaWQ6XCJ5Y29udG91clwiLHNob3dleHBvbmVudDpcImFsbFwiLGV4cG9uZW50Zm9ybWF0OlwiQlwifSxcImNvbnN0cmFpbnRcIj09PXQudHlwZSl7dmFyIGk9dC52YWx1ZTtBcnJheS5pc0FycmF5KGkpP24ucmFuZ2U9W2lbMF0saVtpLmxlbmd0aC0xXV06bi5yYW5nZT1baSxpXX1lbHNlIG4ucmFuZ2U9W3Quc3RhcnQsdC5lbmRdLG4ubnRpY2tzPSh0LmVuZC10LnN0YXJ0KS90LnNpemU7bi5yYW5nZVswXT09PW4ucmFuZ2VbMV0mJihuLnJhbmdlWzFdKz1uLnJhbmdlWzBdfHwxKSxuLm50aWNrc3x8KG4ubnRpY2tzPTFlMyksbChuLHIpLHMucHJlcFRpY2tzKG4pLG4uX3RtaW49bnVsbCxuLl90bWF4PW51bGx9cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBzLnRpY2tUZXh0KG4sdCkudGV4dH19LHIuY2FsY1RleHRPcHRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWUodCk7ci50ZXh0KGkpLmNhbGwoby5jb252ZXJ0VG9Uc3BhbnMsbik7dmFyIHM9YS5iQm94KHIubm9kZSgpLCEwKTtyZXR1cm57dGV4dDppLHdpZHRoOnMud2lkdGgsaGVpZ2h0OnMuaGVpZ2h0LGxldmVsOnQsZHk6KHMudG9wK3MuYm90dG9tKS8yfX0sci5maW5kQmVzdFRleHRMb2NhdGlvbj1mdW5jdGlvbih0LGUscixuLGEpe3ZhciBvLHMsbCxjLHUsaD1yLndpZHRoO2UuaXNDbG9zZWQ/KHM9ZS5sZW4vdi5JTklUSUFMU0VBUkNIUE9JTlRTLG89ZS5taW4rcy8yLGw9ZS5tYXgpOihzPShlLmxlbi1oKS8odi5JTklUSUFMU0VBUkNIUE9JTlRTKzEpLG89ZS5taW4rcytoLzIsbD1lLm1heC0ocytoKS8yKTtmb3IodmFyIGY9MS8wLHA9MDtwPHYuSVRFUkFUSU9OUztwKyspe2Zvcih2YXIgZD1vO2Q8bDtkKz1zKXt2YXIgZz1pLmdldFRleHRMb2NhdGlvbih0LGUudG90YWwsZCxoKSxtPXkoZyxyLG4sYSk7bTxmJiYoZj1tLHU9ZyxjPWQpfWlmKGY+Mip2Lk1BWENPU1QpYnJlYWs7cCYmKHMvPTIpLGw9KG89Yy1zLzIpKzEuNSpzfWlmKGY8PXYuTUFYQ09TVClyZXR1cm4gdX0sci5hZGRMYWJlbERhdGE9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZS53aWR0aC8yLGE9ZS5oZWlnaHQvMixvPXQueCxzPXQueSxsPXQudGhldGEsYz1NYXRoLnNpbihsKSx1PU1hdGguY29zKGwpLGg9aSp1LGY9YSpjLHA9aSpjLGQ9LWEqdSxnPVtbby1oLWYscy1wLWRdLFtvK2gtZixzK3AtZF0sW28raCtmLHMrcCtkXSxbby1oK2Yscy1wK2RdXTtyLnB1c2goe3RleHQ6ZS50ZXh0LHg6byx5OnMsZHk6ZS5keSx0aGV0YTpsLGxldmVsOmUubGV2ZWwsd2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHR9KSxuLnB1c2goZyl9LHIuZHJhd0xhYmVscz1mdW5jdGlvbih0LGUscixhLHMpe3ZhciBsPXQuc2VsZWN0QWxsKFwidGV4dFwiKS5kYXRhKGUsZnVuY3Rpb24odCl7cmV0dXJuIHQudGV4dCtcIixcIit0LngrXCIsXCIrdC55K1wiLFwiK3QudGhldGF9KTtpZihsLmV4aXQoKS5yZW1vdmUoKSxsLmVudGVyKCkuYXBwZW5kKFwidGV4dFwiKS5hdHRyKHtcImRhdGEtbm90ZXhcIjoxLFwidGV4dC1hbmNob3JcIjpcIm1pZGRsZVwifSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10LngrTWF0aC5zaW4odC50aGV0YSkqdC5keSxpPXQueS1NYXRoLmNvcyh0LnRoZXRhKSp0LmR5O24uc2VsZWN0KHRoaXMpLnRleHQodC50ZXh0KS5hdHRyKHt4OmUseTppLHRyYW5zZm9ybTpcInJvdGF0ZShcIisxODAqdC50aGV0YS9NYXRoLlBJK1wiIFwiK2UrXCIgXCIraStcIilcIn0pLmNhbGwoby5jb252ZXJ0VG9Uc3BhbnMscil9KSxzKXtmb3IodmFyIGM9XCJcIix1PTA7dTxzLmxlbmd0aDt1KyspYys9XCJNXCIrc1t1XS5qb2luKFwiTFwiKStcIlpcIjtpLmVuc3VyZVNpbmdsZShhLFwicGF0aFwiLFwiXCIpLmF0dHIoXCJkXCIsYyl9fX0se1wiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCI6NzI1LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnRcIjo3NjcsXCIuLi9oZWF0bWFwL3Bsb3RcIjo5NTksXCIuL2Nsb3NlX2JvdW5kYXJpZXNcIjo5MjEsXCIuL2NvbnN0YW50c1wiOjkyMyxcIi4vY29udmVydF90b19jb25zdHJhaW50c1wiOjkyNyxcIi4vZW1wdHlfcGF0aGluZm9cIjo5MjksXCIuL2ZpbmRfYWxsX3BhdGhzXCI6OTMxLFwiLi9tYWtlX2Nyb3NzaW5nc1wiOjkzNixkMzoxNTV9XSw5Mzg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksaT10KFwiLi4vLi4vbGliXCIpO2Z1bmN0aW9uIGEodCxlLHIpe3ZhciBpPXt0eXBlOlwibGluZWFyXCIscmFuZ2U6W3QsZV19O3JldHVybiBuLmF1dG9UaWNrcyhpLChlLXQpLyhyfHwxNSkpLGl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY29udG91cnM7aWYodC5hdXRvY29udG91cil7dmFyIHI9dC56bWluLG89dC56bWF4O3ZvaWQgMCE9PXImJnZvaWQgMCE9PW98fChyPWkuYWdnTnVtcyhNYXRoLm1pbixudWxsLHQuX3opLG89aS5hZ2dOdW1zKE1hdGgubWF4LG51bGwsdC5feikpO3ZhciBzPWEocixvLHQubmNvbnRvdXJzKTtlLnNpemU9cy5kdGljayxlLnN0YXJ0PW4udGlja0ZpcnN0KHMpLHMucmFuZ2UucmV2ZXJzZSgpLGUuZW5kPW4udGlja0ZpcnN0KHMpLGUuc3RhcnQ9PT1yJiYoZS5zdGFydCs9ZS5zaXplKSxlLmVuZD09PW8mJihlLmVuZC09ZS5zaXplKSxlLnN0YXJ0PmUuZW5kJiYoZS5zdGFydD1lLmVuZD0oZS5zdGFydCtlLmVuZCkvMiksdC5faW5wdXQuY29udG91cnN8fCh0Ll9pbnB1dC5jb250b3Vycz17fSksaS5leHRlbmRGbGF0KHQuX2lucHV0LmNvbnRvdXJzLHtzdGFydDplLnN0YXJ0LGVuZDplLmVuZCxzaXplOmUuc2l6ZX0pLHQuX2lucHV0LmF1dG9jb250b3VyPSEwfWVsc2UgaWYoXCJjb25zdHJhaW50XCIhPT1lLnR5cGUpe3ZhciBsLGM9ZS5zdGFydCx1PWUuZW5kLGg9dC5faW5wdXQuY29udG91cnM7aWYoYz51JiYoZS5zdGFydD1oLnN0YXJ0PXUsdT1lLmVuZD1oLmVuZD1jLGM9ZS5zdGFydCksIShlLnNpemU+MCkpbD1jPT09dT8xOmEoYyx1LHQubmNvbnRvdXJzKS5kdGljayxoLnNpemU9ZS5zaXplPWx9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDl9XSw5Mzk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLGE9dChcIi4uL2hlYXRtYXAvc3R5bGVcIiksbz10KFwiLi9tYWtlX2NvbG9yX21hcFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkuc2VsZWN0QWxsKFwiZy5jb250b3VyXCIpO2Uuc3R5bGUoXCJvcGFjaXR5XCIsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pLGUuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPXRbMF0udHJhY2UsYT1yLmNvbnRvdXJzLHM9ci5saW5lLGw9YS5zaXplfHwxLGM9YS5zdGFydCx1PVwiY29uc3RyYWludFwiPT09YS50eXBlLGg9IXUmJlwibGluZXNcIj09PWEuY29sb3JpbmcsZj0hdSYmXCJmaWxsXCI9PT1hLmNvbG9yaW5nLHA9aHx8Zj9vKHIpOm51bGw7ZS5zZWxlY3RBbGwoXCJnLmNvbnRvdXJsZXZlbFwiKS5lYWNoKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbChcInBhdGhcIikuY2FsbChpLmxpbmVHcm91cFN0eWxlLHMud2lkdGgsaD9wKHQubGV2ZWwpOnMuY29sb3Iscy5kYXNoKX0pO3ZhciBkPWEubGFiZWxmb250O2lmKGUuc2VsZWN0QWxsKFwiZy5jb250b3VybGFiZWxzIHRleHRcIikuZWFjaChmdW5jdGlvbih0KXtpLmZvbnQobi5zZWxlY3QodGhpcykse2ZhbWlseTpkLmZhbWlseSxzaXplOmQuc2l6ZSxjb2xvcjpkLmNvbG9yfHwoaD9wKHQubGV2ZWwpOnMuY29sb3IpfSl9KSx1KWUuc2VsZWN0QWxsKFwiZy5jb250b3VyZmlsbCBwYXRoXCIpLnN0eWxlKFwiZmlsbFwiLHIuZmlsbGNvbG9yKTtlbHNlIGlmKGYpe3ZhciBnO2Uuc2VsZWN0QWxsKFwiZy5jb250b3VyZmlsbCBwYXRoXCIpLnN0eWxlKFwiZmlsbFwiLGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT1nJiYoZz10LmxldmVsKSxwKHQubGV2ZWwrLjUqbCl9KSx2b2lkIDA9PT1nJiYoZz1jKSxlLnNlbGVjdEFsbChcImcuY29udG91cmJnIHBhdGhcIikuc3R5bGUoXCJmaWxsXCIscChnLS41KmwpKX19KSxhKHQpfX0se1wiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vaGVhdG1hcC9zdHlsZVwiOjk2MCxcIi4vbWFrZV9jb2xvcl9tYXBcIjo5MzUsZDM6MTU1fV0sOTQwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiKSxpPXQoXCIuL2xhYmVsX2RlZmF1bHRzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8pe3ZhciBzLGw9cihcImNvbnRvdXJzLmNvbG9yaW5nXCIpLGM9XCJcIjtcImZpbGxcIj09PWwmJihzPXIoXCJjb250b3Vycy5zaG93bGluZXNcIikpLCExIT09cyYmKFwibGluZXNcIiE9PWwmJihjPXIoXCJsaW5lLmNvbG9yXCIsXCIjMDAwXCIpKSxyKFwibGluZS53aWR0aFwiLC41KSxyKFwibGluZS5kYXNoXCIpKSxcIm5vbmVcIiE9PWwmJighMCE9PXQuc2hvd2xlZ2VuZCYmKGUuc2hvd2xlZ2VuZD0hMSksZS5fZGZsdFNob3dMZWdlbmQ9ITEsbih0LGUsYSxyLHtwcmVmaXg6XCJcIixjTGV0dGVyOlwielwifSkpLHIoXCJsaW5lLnNtb290aGluZ1wiKSxpKHIsYSxjLG8pfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCI6NTg4LFwiLi9sYWJlbF9kZWZhdWx0c1wiOjkzNH1dLDk0MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vY29udG91ci9hdHRyaWJ1dGVzXCIpLGE9aS5jb250b3VycyxvPXQoXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIiksbD10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCIpLGM9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCx1PW8ubGluZTtlLmV4cG9ydHM9Yyh7Y2FycGV0Ont2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHo6bi56LGE6bi54LGEwOm4ueDAsZGE6bi5keCxiOm4ueSxiMDpuLnkwLGRiOm4uZHksdGV4dDpuLnRleHQsaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LHRyYW5zcG9zZTpuLnRyYW5zcG9zZSxhdHlwZTpuLnh0eXBlLGJ0eXBlOm4ueXR5cGUsZmlsbGNvbG9yOmkuZmlsbGNvbG9yLGF1dG9jb250b3VyOmkuYXV0b2NvbnRvdXIsbmNvbnRvdXJzOmkubmNvbnRvdXJzLGNvbnRvdXJzOnt0eXBlOmEudHlwZSxzdGFydDphLnN0YXJ0LGVuZDphLmVuZCxzaXplOmEuc2l6ZSxjb2xvcmluZzp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiZmlsbFwiLFwibGluZXNcIixcIm5vbmVcIl0sZGZsdDpcImZpbGxcIixlZGl0VHlwZTpcImNhbGNcIn0sc2hvd2xpbmVzOmEuc2hvd2xpbmVzLHNob3dsYWJlbHM6YS5zaG93bGFiZWxzLGxhYmVsZm9udDphLmxhYmVsZm9udCxsYWJlbGZvcm1hdDphLmxhYmVsZm9ybWF0LG9wZXJhdGlvbjphLm9wZXJhdGlvbix2YWx1ZTphLnZhbHVlLGVkaXRUeXBlOlwiY2FsY1wiLGltcGxpZWRFZGl0czp7YXV0b2NvbnRvdXI6ITF9fSxsaW5lOntjb2xvcjpjKHt9LHUuY29sb3Ise30pLHdpZHRoOnUud2lkdGgsZGFzaDp1LmRhc2gsc21vb3RoaW5nOmMoe30sdS5zbW9vdGhpbmcse30pLGVkaXRUeXBlOlwicGxvdFwifSx0cmFuc2Zvcm1zOnZvaWQgMH0scyhcIlwiLHtjTGV0dGVyOlwielwiLGF1dG9Db2xvckRmbHQ6ITF9KSx7Y29sb3JiYXI6bH0pfSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIjo1NzksXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi9jb250b3VyL2F0dHJpYnV0ZXNcIjo5MTksXCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXNcIjo5NDgsXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIjoxMDUyfV0sOTQyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi9oZWF0bWFwL2NvbnZlcnRfY29sdW1uX3h5elwiKSxvPXQoXCIuLi9oZWF0bWFwL2NsZWFuXzJkX2FycmF5XCIpLHM9dChcIi4uL2hlYXRtYXAvaW50ZXJwMmRcIiksbD10KFwiLi4vaGVhdG1hcC9maW5kX2VtcHRpZXNcIiksYz10KFwiLi4vaGVhdG1hcC9tYWtlX2JvdW5kX2FycmF5XCIpLHU9dChcIi4vZGVmYXVsdHNcIiksaD10KFwiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZFwiKSxmPXQoXCIuLi9jb250b3VyL3NldF9jb250b3Vyc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLl9jYXJwZXRUcmFjZT1oKHQsZSk7aWYociYmci52aXNpYmxlJiZcImxlZ2VuZG9ubHlcIiE9PXIudmlzaWJsZSl7aWYoIWUuYXx8IWUuYil7dmFyIHA9dC5kYXRhW3IuaW5kZXhdLGQ9dC5kYXRhW2UuaW5kZXhdO2QuYXx8KGQuYT1wLmEpLGQuYnx8KGQuYj1wLmIpLHUoZCxlLGUuX2RlZmF1bHRDb2xvcix0Ll9mdWxsTGF5b3V0KX12YXIgZz1mdW5jdGlvbih0LGUpe3ZhciByLHUsaCxmLHAsZCxnLHY9ZS5fY2FycGV0VHJhY2UsbT12LmFheGlzLHk9di5iYXhpczttLl9taW5EdGljaz0wLHkuX21pbkR0aWNrPTAsaS5pc0FycmF5MUQoZS56KSYmYShlLG0seSxcImFcIixcImJcIixbXCJ6XCJdKTtyPWUuX2E9ZS5fYXx8ZS5hLGY9ZS5fYj1lLl9ifHxlLmIscj1yP20ubWFrZUNhbGNkYXRhKGUsXCJfYVwiKTpbXSxmPWY/eS5tYWtlQ2FsY2RhdGEoZSxcIl9iXCIpOltdLHU9ZS5hMHx8MCxoPWUuZGF8fDEscD1lLmIwfHwwLGQ9ZS5kYnx8MSxnPWUuX3o9byhlLl96fHxlLnosZS50cmFuc3Bvc2UpLGUuX2VtcHR5cG9pbnRzPWwoZykscyhnLGUuX2VtcHR5cG9pbnRzKTt2YXIgeD1pLm1heFJvd0xlbmd0aChnKSxiPVwic2NhbGVkXCI9PT1lLnh0eXBlP1wiXCI6cixfPWMoZSxiLHUsaCx4LG0pLHc9XCJzY2FsZWRcIj09PWUueXR5cGU/XCJcIjpmLGs9YyhlLHcscCxkLGcubGVuZ3RoLHkpLEE9e2E6XyxiOmssejpnfTtcImxldmVsc1wiPT09ZS5jb250b3Vycy50eXBlJiZcIm5vbmVcIiE9PWUuY29udG91cnMuY29sb3JpbmcmJm4odCxlLHt2YWxzOmcsY29udGFpbmVyU3RyOlwiXCIsY0xldHRlcjpcInpcIn0pO3JldHVybltBXX0odCxlKTtyZXR1cm4gZihlKSxnfX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCI6NTg2LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZFwiOjg5NyxcIi4uL2NvbnRvdXIvc2V0X2NvbnRvdXJzXCI6OTM4LFwiLi4vaGVhdG1hcC9jbGVhbl8yZF9hcnJheVwiOjk1MCxcIi4uL2hlYXRtYXAvY29udmVydF9jb2x1bW5feHl6XCI6OTUyLFwiLi4vaGVhdG1hcC9maW5kX2VtcHRpZXNcIjo5NTQsXCIuLi9oZWF0bWFwL2ludGVycDJkXCI6OTU3LFwiLi4vaGVhdG1hcC9tYWtlX2JvdW5kX2FycmF5XCI6OTU4LFwiLi9kZWZhdWx0c1wiOjk0M31dLDk0MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHNcIiksYT10KFwiLi9hdHRyaWJ1dGVzXCIpLG89dChcIi4uL2NvbnRvdXIvY29uc3RyYWludF9kZWZhdWx0c1wiKSxzPXQoXCIuLi9jb250b3VyL2NvbnRvdXJzX2RlZmF1bHRzXCIpLGw9dChcIi4uL2NvbnRvdXIvc3R5bGVfZGVmYXVsdHNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX1pZih1KFwiY2FycGV0XCIpLHQuYSYmdC5iKXtpZighaSh0LGUsdSxjLFwiYVwiLFwiYlwiKSlyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO3UoXCJ0ZXh0XCIpLFwiY29uc3RyYWludFwiPT09dShcImNvbnRvdXJzLnR5cGVcIik/byh0LGUsdSxjLHIse2hhc0hvdmVyOiExfSk6KHModCxlLHUsZnVuY3Rpb24ocil7cmV0dXJuIG4uY29lcmNlMih0LGUsYSxyKX0pLGwodCxlLHUsYyx7aGFzSG92ZXI6ITF9KSl9ZWxzZSBlLl9kZWZhdWx0Q29sb3I9cixlLl9sZW5ndGg9bnVsbH19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2NvbnRvdXIvY29uc3RyYWludF9kZWZhdWx0c1wiOjkyNCxcIi4uL2NvbnRvdXIvY29udG91cnNfZGVmYXVsdHNcIjo5MjYsXCIuLi9jb250b3VyL3N0eWxlX2RlZmF1bHRzXCI6OTQwLFwiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHNcIjo5NjIsXCIuL2F0dHJpYnV0ZXNcIjo5NDF9XSw5NDQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLG4uY29sb3JiYXI9dChcIi4uL2NvbnRvdXIvY29sb3JiYXJcIiksbi5jYWxjPXQoXCIuL2NhbGNcIiksbi5wbG90PXQoXCIuL3Bsb3RcIiksbi5zdHlsZT10KFwiLi4vY29udG91ci9zdHlsZVwiKSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cImNvbnRvdXJjYXJwZXRcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIiksbi5jYXRlZ29yaWVzPVtcImNhcnRlc2lhblwiLFwic3ZnXCIsXCJjYXJwZXRcIixcImNvbnRvdXJcIixcInN5bWJvbHNcIixcInNob3dMZWdlbmRcIixcImhhc0xpbmVzXCIsXCJjYXJwZXREZXBlbmRlbnRcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIjo3NjAsXCIuLi9jb250b3VyL2NvbG9yYmFyXCI6OTIyLFwiLi4vY29udG91ci9zdHlsZVwiOjkzOSxcIi4vYXR0cmlidXRlc1wiOjk0MSxcIi4vY2FsY1wiOjk0MixcIi4vZGVmYXVsdHNcIjo5NDMsXCIuL3Bsb3RcIjo5NDd9XSw5NDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLGk9dChcIi4uL2NhcnBldC9heGlzX2FsaWduZWRfbGluZVwiKSxhPXQoXCIuLi8uLi9saWJcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyxsLGMsdSl7dmFyIGgsZixwLGQsZyx2LG0seT1cIlwiLHg9ZS5lZGdlcGF0aHMubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KSxiPSEwLF89MWUtNCpNYXRoLmFicyhyWzBdWzBdLXJbMl1bMF0pLHc9MWUtNCpNYXRoLmFicyhyWzBdWzFdLXJbMl1bMV0pO2Z1bmN0aW9uIGsodCl7cmV0dXJuIE1hdGguYWJzKHRbMV0tclswXVsxXSk8d31mdW5jdGlvbiBBKHQpe3JldHVybiBNYXRoLmFicyh0WzFdLXJbMl1bMV0pPHd9ZnVuY3Rpb24gVCh0KXtyZXR1cm4gTWF0aC5hYnModFswXS1yWzBdWzBdKTxffWZ1bmN0aW9uIE0odCl7cmV0dXJuIE1hdGguYWJzKHRbMF0tclsyXVswXSk8X31mdW5jdGlvbiBTKHQsZSl7dmFyIHIsbixhLG8saD1cIlwiO2ZvcihrKHQpJiYhTSh0KXx8QSh0KSYmIVQodCk/KG89cy5hYXhpcyxhPWkocyxsLFt0WzBdLGVbMF1dLC41Kih0WzFdK2VbMV0pKSk6KG89cy5iYXhpcyxhPWkocyxsLC41Kih0WzBdK2VbMF0pLFt0WzFdLGVbMV1dKSkscj0xO3I8YS5sZW5ndGg7cisrKWZvcihoKz1vLnNtb290aGluZz9cIkNcIjpcIkxcIixuPTA7bjxhW3JdLmxlbmd0aDtuKyspe3ZhciBmPWFbcl1bbl07aCs9W2MuYzJwKGZbMF0pLHUuYzJwKGZbMV0pXStcIiBcIn1yZXR1cm4gaH1mb3IoaD0wLGY9bnVsbDt4Lmxlbmd0aDspe3ZhciBFPWUuZWRnZXBhdGhzW2hdWzBdO2ZvcihmJiYoeSs9UyhmLEUpKSxtPW4uc21vb3Rob3BlbihlLmVkZ2VwYXRoc1toXS5tYXAobyksZS5zbW9vdGhpbmcpLHkrPWI/bTptLnJlcGxhY2UoL15NLyxcIkxcIikseC5zcGxpY2UoeC5pbmRleE9mKGgpLDEpLGY9ZS5lZGdlcGF0aHNbaF1bZS5lZGdlcGF0aHNbaF0ubGVuZ3RoLTFdLGc9LTEsZD0wO2Q8NDtkKyspe2lmKCFmKXthLmxvZyhcIk1pc3NpbmcgZW5kP1wiLGgsZSk7YnJlYWt9Zm9yKGsoZikmJiFNKGYpP3A9clsxXTpUKGYpP3A9clswXTpBKGYpP3A9clszXTpNKGYpJiYocD1yWzJdKSx2PTA7djxlLmVkZ2VwYXRocy5sZW5ndGg7disrKXt2YXIgQz1lLmVkZ2VwYXRoc1t2XVswXTtNYXRoLmFicyhmWzBdLXBbMF0pPF8/TWF0aC5hYnMoZlswXS1DWzBdKTxfJiYoQ1sxXS1mWzFdKSoocFsxXS1DWzFdKT49MCYmKHA9QyxnPXYpOk1hdGguYWJzKGZbMV0tcFsxXSk8dz9NYXRoLmFicyhmWzFdLUNbMV0pPHcmJihDWzBdLWZbMF0pKihwWzBdLUNbMF0pPj0wJiYocD1DLGc9dik6YS5sb2coXCJlbmRwdCB0byBuZXdlbmRwdCBpcyBub3QgdmVydC4gb3IgaG9yei5cIixmLHAsQyl9aWYoZz49MClicmVhazt5Kz1TKGYscCksZj1wfWlmKGc9PT1lLmVkZ2VwYXRocy5sZW5ndGgpe2EubG9nKFwidW5jbG9zZWQgcGVyaW1ldGVyIHBhdGhcIik7YnJlYWt9aD1nLChiPS0xPT09eC5pbmRleE9mKGgpKSYmKGg9eFswXSx5Kz1TKGYscCkrXCJaXCIsZj1udWxsKX1mb3IoaD0wO2g8ZS5wYXRocy5sZW5ndGg7aCsrKXkrPW4uc21vb3RoY2xvc2VkKGUucGF0aHNbaF0ubWFwKG8pLGUuc21vb3RoaW5nKTtyZXR1cm4geX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2NhcnBldC9heGlzX2FsaWduZWRfbGluZVwiOjg4MX1dLDk0NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyxsLGMsdTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXtmb3Iobz0oYT10W3JdKS5wZWRnZXBhdGhzPVtdLHM9YS5wcGF0aHM9W10sbj0wO248YS5lZGdlcGF0aHMubGVuZ3RoO24rKyl7Zm9yKHU9YS5lZGdlcGF0aHNbbl0sbD1bXSxpPTA7aTx1Lmxlbmd0aDtpKyspbFtpXT1lKHVbaV0pO28ucHVzaChsKX1mb3Iobj0wO248YS5wYXRocy5sZW5ndGg7bisrKXtmb3IodT1hLnBhdGhzW25dLGM9W10saT0wO2k8dS5sZW5ndGg7aSsrKWNbaV09ZSh1W2ldKTtzLnB1c2goYyl9fX19LHt9XSw5NDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vY2FycGV0L21hcF8xZF9hcnJheVwiKSxhPXQoXCIuLi9jYXJwZXQvbWFrZXBhdGhcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLHM9dChcIi4uLy4uL2xpYlwiKSxsPXQoXCIuLi9jb250b3VyL21ha2VfY3Jvc3NpbmdzXCIpLGM9dChcIi4uL2NvbnRvdXIvZmluZF9hbGxfcGF0aHNcIiksdT10KFwiLi4vY29udG91ci9wbG90XCIpLGg9dChcIi4uL2NvbnRvdXIvY29uc3RhbnRzXCIpLGY9dChcIi4uL2NvbnRvdXIvY29udmVydF90b19jb25zdHJhaW50c1wiKSxwPXQoXCIuL2pvaW5fYWxsX3BhdGhzXCIpLGQ9dChcIi4uL2NvbnRvdXIvZW1wdHlfcGF0aGluZm9cIiksZz10KFwiLi9tYXBfcGF0aGluZm9cIiksdj10KFwiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZFwiKSxtPXQoXCIuLi9jb250b3VyL2Nsb3NlX2JvdW5kYXJpZXNcIik7ZnVuY3Rpb24geSh0LGUscil7dmFyIG49dC5nZXRQb2ludEF0TGVuZ3RoKGUpLGk9dC5nZXRQb2ludEF0TGVuZ3RoKHIpLGE9aS54LW4ueCxvPWkueS1uLnkscz1NYXRoLnNxcnQoYSphK28qbyk7cmV0dXJuW2EvcyxvL3NdfWZ1bmN0aW9uIHgodCl7dmFyIGU9TWF0aC5zcXJ0KHRbMF0qdFswXSt0WzFdKnRbMV0pO3JldHVyblt0WzBdL2UsdFsxXS9lXX1mdW5jdGlvbiBiKHQsZSl7dmFyIHI9TWF0aC5hYnModFswXSplWzBdK3RbMV0qZVsxXSk7cmV0dXJuIE1hdGguc3FydCgxLXIqcikvcn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsXyl7dmFyIHc9ZS54YXhpcyxrPWUueWF4aXM7cy5tYWtlVHJhY2VHcm91cHMoXyxyLFwiY29udG91clwiKS5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBfPW4uc2VsZWN0KHRoaXMpLEE9clswXSxUPUEudHJhY2UsTT1ULl9jYXJwZXRUcmFjZT12KHQsVCksUz10LmNhbGNkYXRhW00uaW5kZXhdWzBdO2lmKE0udmlzaWJsZSYmXCJsZWdlbmRvbmx5XCIhPT1NLnZpc2libGUpe3ZhciBFPUEuYSxDPUEuYixMPVQuY29udG91cnMsej1kKEwsZSxBKSxPPVwiY29uc3RyYWludFwiPT09TC50eXBlLEk9TC5fb3BlcmF0aW9uLEQ9Tz9cIj1cIj09PUk/XCJsaW5lc1wiOlwiZmlsbFwiOkwuY29sb3JpbmcsUD1bW0VbMF0sQ1tDLmxlbmd0aC0xXV0sW0VbRS5sZW5ndGgtMV0sQ1tDLmxlbmd0aC0xXV0sW0VbRS5sZW5ndGgtMV0sQ1swXV0sW0VbMF0sQ1swXV1dO2woeik7dmFyIFI9MWUtOCooRVtFLmxlbmd0aC0xXS1FWzBdKSxGPTFlLTgqKENbQy5sZW5ndGgtMV0tQ1swXSk7Yyh6LFIsRik7dmFyIEIsTixqLFYsVT16O1wiY29uc3RyYWludFwiPT09TC50eXBlJiYoVT1mKHosSSksbShVLEksUCxUKSksZyh6LEcpO3ZhciBxPVtdO2ZvcihWPVMuY2xpcHNlZ21lbnRzLmxlbmd0aC0xO1Y+PTA7Vi0tKUI9Uy5jbGlwc2VnbWVudHNbVl0sTj1pKFtdLEIueCx3LmMycCksaj1pKFtdLEIueSxrLmMycCksTi5yZXZlcnNlKCksai5yZXZlcnNlKCkscS5wdXNoKGEoTixqLEIuYmljdWJpYykpO3ZhciBIPVwiTVwiK3Euam9pbihcIkxcIikrXCJaXCI7IWZ1bmN0aW9uKHQsZSxyLG4sbyxsKXt2YXIgYyx1LGgsZixwPXMuZW5zdXJlU2luZ2xlKHQsXCJnXCIsXCJjb250b3VyYmdcIikuc2VsZWN0QWxsKFwicGF0aFwiKS5kYXRhKFwiZmlsbFwiIT09bHx8bz9bXTpbMF0pO3AuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLHAuZXhpdCgpLnJlbW92ZSgpO3ZhciBkPVtdO2ZvcihmPTA7ZjxlLmxlbmd0aDtmKyspYz1lW2ZdLHU9aShbXSxjLngsci5jMnApLGg9aShbXSxjLnksbi5jMnApLGQucHVzaChhKHUsaCxjLmJpY3ViaWMpKTtwLmF0dHIoXCJkXCIsXCJNXCIrZC5qb2luKFwiTFwiKStcIlpcIikuc3R5bGUoXCJzdHJva2VcIixcIm5vbmVcIil9KF8sUy5jbGlwc2VnbWVudHMsdyxrLE8sRCksZnVuY3Rpb24odCxlLHIsaSxhLG8sbCxjLHUsaCxmKXt2YXIgZD1zLmVuc3VyZVNpbmdsZShlLFwiZ1wiLFwiY29udG91cmZpbGxcIikuc2VsZWN0QWxsKFwicGF0aFwiKS5kYXRhKFwiZmlsbFwiPT09aD9hOltdKTtkLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKSxkLmV4aXQoKS5yZW1vdmUoKSxkLmVhY2goZnVuY3Rpb24oZSl7dmFyIGE9cCh0LGUsbyxsLGMsdSxyLGkpO2UucHJlZml4Qm91bmRhcnkmJihhPWYrYSksYT9uLnNlbGVjdCh0aGlzKS5hdHRyKFwiZFwiLGEpLnN0eWxlKFwic3Ryb2tlXCIsXCJub25lXCIpOm4uc2VsZWN0KHRoaXMpLnJlbW92ZSgpfSl9KFQsXyx3LGssVSxQLEcsTSxTLEQsSCksZnVuY3Rpb24odCxlLHIsaSxhLGwsYyl7dmFyIGY9cy5lbnN1cmVTaW5nbGUodCxcImdcIixcImNvbnRvdXJsaW5lc1wiKSxwPSExIT09YS5zaG93bGluZXMsZD1hLnNob3dsYWJlbHMsZz1wJiZkLHY9dS5jcmVhdGVMaW5lcyhmLHB8fGQsZSksbT11LmNyZWF0ZUxpbmVDbGlwKGYsZyxyLGkudHJhY2UudWlkKSxfPXQuc2VsZWN0QWxsKFwiZy5jb250b3VybGFiZWxzXCIpLmRhdGEoZD9bMF06W10pO2lmKF8uZXhpdCgpLnJlbW92ZSgpLF8uZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJjb250b3VybGFiZWxzXCIsITApLGQpe3ZhciB3PWwueGF4aXMsaz1sLnlheGlzLEE9dy5fbGVuZ3RoLFQ9ay5fbGVuZ3RoLE09W1tbMCwwXSxbQSwwXSxbQSxUXSxbMCxUXV1dLFM9W107cy5jbGVhckxvY2F0aW9uQ2FjaGUoKTt2YXIgRT11LmxhYmVsRm9ybWF0dGVyKGEsaS50LmNiLHIuX2Z1bGxMYXlvdXQpLEM9by50ZXN0ZXIuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwiZGF0YS1ub3RleFwiLDEpLmNhbGwoby5mb250LGEubGFiZWxmb250KSxMPXtsZWZ0OjAscmlnaHQ6QSxjZW50ZXI6QS8yLHRvcDowLGJvdHRvbTpULG1pZGRsZTpULzJ9LHo9TWF0aC5zcXJ0KEEqQStUKlQpLE89aC5MQUJFTERJU1RBTkNFKnovTWF0aC5tYXgoMSxlLmxlbmd0aC9oLkxBQkVMSU5DUkVBU0UpO3YuZWFjaChmdW5jdGlvbih0KXt2YXIgZT11LmNhbGNUZXh0T3B0cyh0LmxldmVsLEUsQyxyKTtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoXCJwYXRoXCIpLmVhY2goZnVuY3Rpb24ocil7dmFyIG49cy5nZXRWaXNpYmxlU2VnbWVudCh0aGlzLEwsZS5oZWlnaHQvMik7aWYobiYmKGZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG8scz0wO3M8ci5wZWRnZXBhdGhzLmxlbmd0aDtzKyspZT09PXIucGVkZ2VwYXRoc1tzXSYmKG89ci5lZGdlcGF0aHNbc10pO2lmKCFvKXJldHVybjt2YXIgbD1pLmFbMF0sYz1pLmFbaS5hLmxlbmd0aC0xXSx1PWkuYlswXSxoPWkuYltpLmIubGVuZ3RoLTFdO2Z1bmN0aW9uIGYodCxlKXt2YXIgcixuPTA7cmV0dXJuKE1hdGguYWJzKHRbMF0tbCk8LjF8fE1hdGguYWJzKHRbMF0tYyk8LjEpJiYocj14KGkuZHh5ZGJfcm91Z2godFswXSx0WzFdLC4xKSksbj1NYXRoLm1heChuLGEqYihlLHIpLzIpKSwoTWF0aC5hYnModFsxXS11KTwuMXx8TWF0aC5hYnModFsxXS1oKTwuMSkmJihyPXgoaS5keHlkYV9yb3VnaCh0WzBdLHRbMV0sLjEpKSxuPU1hdGgubWF4KG4sYSpiKGUscikvMikpLG59dmFyIHA9eSh0LDAsMSksZD15KHQsbi50b3RhbCxuLnRvdGFsLTEpLGc9ZihvWzBdLHApLHY9bi50b3RhbC1mKG9bby5sZW5ndGgtMV0sZCk7bi5taW48ZyYmKG4ubWluPWcpO24ubWF4PnYmJihuLm1heD12KTtuLmxlbj1uLm1heC1uLm1pbn0odGhpcyxyLHQsbixjLGUuaGVpZ2h0KSwhKG4ubGVuPChlLndpZHRoK2UuaGVpZ2h0KSpoLkxBQkVMTUlOKSkpZm9yKHZhciBpPU1hdGgubWluKE1hdGguY2VpbChuLmxlbi9PKSxoLkxBQkVMTUFYKSxhPTA7YTxpO2ErKyl7dmFyIG89dS5maW5kQmVzdFRleHRMb2NhdGlvbih0aGlzLG4sZSxTLEwpO2lmKCFvKWJyZWFrO3UuYWRkTGFiZWxEYXRhKG8sZSxTLE0pfX0pfSksQy5yZW1vdmUoKSx1LmRyYXdMYWJlbHMoXyxTLHIsbSxnP006bnVsbCl9ZCYmIXAmJnYucmVtb3ZlKCl9KF8seix0LEEsTCxlLE0pLG8uc2V0Q2xpcFVybChfLE0uX2NsaXBQYXRoSWQsdCl9ZnVuY3Rpb24gRyh0KXt2YXIgZT1NLmFiMnh5KHRbMF0sdFsxXSwhMCk7cmV0dXJuW3cuYzJwKGVbMF0pLGsuYzJwKGVbMV0pXX19KX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2NhcnBldC9sb29rdXBfY2FycGV0aWRcIjo4OTcsXCIuLi9jYXJwZXQvbWFrZXBhdGhcIjo4OTgsXCIuLi9jYXJwZXQvbWFwXzFkX2FycmF5XCI6ODk5LFwiLi4vY29udG91ci9jbG9zZV9ib3VuZGFyaWVzXCI6OTIxLFwiLi4vY29udG91ci9jb25zdGFudHNcIjo5MjMsXCIuLi9jb250b3VyL2NvbnZlcnRfdG9fY29uc3RyYWludHNcIjo5MjcsXCIuLi9jb250b3VyL2VtcHR5X3BhdGhpbmZvXCI6OTI5LFwiLi4vY29udG91ci9maW5kX2FsbF9wYXRoc1wiOjkzMSxcIi4uL2NvbnRvdXIvbWFrZV9jcm9zc2luZ3NcIjo5MzYsXCIuLi9jb250b3VyL3Bsb3RcIjo5MzcsXCIuL2pvaW5fYWxsX3BhdGhzXCI6OTQ1LFwiLi9tYXBfcGF0aGluZm9cIjo5NDYsZDM6MTU1fV0sOTQ4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1zKHt6Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx4OnMoe30sbi54LHtpbXBsaWVkRWRpdHM6e3h0eXBlOlwiYXJyYXlcIn19KSx4MDpzKHt9LG4ueDAse2ltcGxpZWRFZGl0czp7eHR5cGU6XCJzY2FsZWRcIn19KSxkeDpzKHt9LG4uZHgse2ltcGxpZWRFZGl0czp7eHR5cGU6XCJzY2FsZWRcIn19KSx5OnMoe30sbi55LHtpbXBsaWVkRWRpdHM6e3l0eXBlOlwiYXJyYXlcIn19KSx5MDpzKHt9LG4ueTAse2ltcGxpZWRFZGl0czp7eXR5cGU6XCJzY2FsZWRcIn19KSxkeTpzKHt9LG4uZHkse2ltcGxpZWRFZGl0czp7eXR5cGU6XCJzY2FsZWRcIn19KSx0ZXh0Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxob3ZlcnRleHQ6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHRyYW5zcG9zZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwiY2FsY1wifSx4dHlwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYXJyYXlcIixcInNjYWxlZFwiXSxlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0seXR5cGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImFycmF5XCIsXCJzY2FsZWRcIl0sZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LHpzbW9vdGg6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImZhc3RcIixcImJlc3RcIiwhMV0sZGZsdDohMSxlZGl0VHlwZTpcImNhbGNcIn0sY29ubmVjdGdhcHM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMSxlZGl0VHlwZTpcImNhbGNcIn0seGdhcDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MCxtaW46MCxlZGl0VHlwZTpcInBsb3RcIn0seWdhcDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MCxtaW46MCxlZGl0VHlwZTpcInBsb3RcIn0semhvdmVyZm9ybWF0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwibm9uZVwifSxob3ZlcnRlbXBsYXRlOmkoKX0se3RyYW5zZm9ybXM6dm9pZCAwfSxhKFwiXCIse2NMZXR0ZXI6XCJ6XCIsYXV0b0NvbG9yRGZsdDohMX0pLHtjb2xvcmJhcjpvfSl9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCI6MTA1Mn1dLDk0OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksbz10KFwiLi4vaGlzdG9ncmFtMmQvY2FsY1wiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsY1wiKSxsPXQoXCIuL2NvbnZlcnRfY29sdW1uX3h5elwiKSxjPXQoXCIuL2NsZWFuXzJkX2FycmF5XCIpLHU9dChcIi4vaW50ZXJwMmRcIiksaD10KFwiLi9maW5kX2VtcHRpZXNcIiksZj10KFwiLi9tYWtlX2JvdW5kX2FycmF5XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLHAsZCxnLHYsbSx5LHgsYixfPWEuZ2V0RnJvbUlkKHQsZS54YXhpc3x8XCJ4XCIpLHc9YS5nZXRGcm9tSWQodCxlLnlheGlzfHxcInlcIiksaz1uLnRyYWNlSXMoZSxcImNvbnRvdXJcIiksQT1uLnRyYWNlSXMoZSxcImhpc3RvZ3JhbVwiKSxUPW4udHJhY2VJcyhlLFwiZ2wyZFwiKSxNPWs/XCJiZXN0XCI6ZS56c21vb3RoO2lmKF8uX21pbkR0aWNrPTAsdy5fbWluRHRpY2s9MCxBKXI9KGI9byh0LGUpKS54LHA9Yi54MCxkPWIuZHgsZz1iLnksdj1iLnkwLG09Yi5keSx5PWIuejtlbHNle3ZhciBTPWUuejtpLmlzQXJyYXkxRChTKT8obChlLF8sdyxcInhcIixcInlcIixbXCJ6XCJdKSxyPWUuX3gsZz1lLl95LFM9ZS5feik6KHI9ZS54P18ubWFrZUNhbGNkYXRhKGUsXCJ4XCIpOltdLGc9ZS55P3cubWFrZUNhbGNkYXRhKGUsXCJ5XCIpOltdKSxwPWUueDAsZD1lLmR4LHY9ZS55MCxtPWUuZHkseT1jKFMsZS50cmFuc3Bvc2UpLChrfHxlLmNvbm5lY3RnYXBzKSYmKGUuX2VtcHR5cG9pbnRzPWgoeSksdSh5LGUuX2VtcHR5cG9pbnRzKSl9ZnVuY3Rpb24gRSh0KXtNPWUuX2lucHV0LnpzbW9vdGg9ZS56c21vb3RoPSExLGkud2FybignY2Fubm90IHVzZSB6c21vb3RoOiBcImZhc3RcIjogJyt0KX1pZihcImZhc3RcIj09PU0paWYoXCJsb2dcIj09PV8udHlwZXx8XCJsb2dcIj09PXcudHlwZSlFKFwibG9nIGF4aXMgZm91bmRcIik7ZWxzZSBpZighQSl7aWYoci5sZW5ndGgpe3ZhciBDPShyW3IubGVuZ3RoLTFdLXJbMF0pLyhyLmxlbmd0aC0xKSxMPU1hdGguYWJzKEMvMTAwKTtmb3IoeD0wO3g8ci5sZW5ndGgtMTt4KyspaWYoTWF0aC5hYnMoclt4KzFdLXJbeF0tQyk+TCl7RShcInggc2NhbGUgaXMgbm90IGxpbmVhclwiKTticmVha319aWYoZy5sZW5ndGgmJlwiZmFzdFwiPT09TSl7dmFyIHo9KGdbZy5sZW5ndGgtMV0tZ1swXSkvKGcubGVuZ3RoLTEpLE89TWF0aC5hYnMoei8xMDApO2Zvcih4PTA7eDxnLmxlbmd0aC0xO3grKylpZihNYXRoLmFicyhnW3grMV0tZ1t4XS16KT5PKXtFKFwieSBzY2FsZSBpcyBub3QgbGluZWFyXCIpO2JyZWFrfX19dmFyIEk9aS5tYXhSb3dMZW5ndGgoeSksRD1cInNjYWxlZFwiPT09ZS54dHlwZT9cIlwiOnIsUD1mKGUsRCxwLGQsSSxfKSxSPVwic2NhbGVkXCI9PT1lLnl0eXBlP1wiXCI6ZyxGPWYoZSxSLHYsbSx5Lmxlbmd0aCx3KTtUfHwoZS5fZXh0cmVtZXNbXy5faWRdPWEuZmluZEV4dHJlbWVzKF8sUCksZS5fZXh0cmVtZXNbdy5faWRdPWEuZmluZEV4dHJlbWVzKHcsRikpO3ZhciBCPXt4OlAseTpGLHo6eSx0ZXh0OmUuX3RleHR8fGUudGV4dCxob3ZlcnRleHQ6ZS5faG92ZXJ0ZXh0fHxlLmhvdmVydGV4dH07aWYoRCYmRC5sZW5ndGg9PT1QLmxlbmd0aC0xJiYoQi54Q2VudGVyPUQpLFImJlIubGVuZ3RoPT09Ri5sZW5ndGgtMSYmKEIueUNlbnRlcj1SKSxBJiYoQi54UmFuZ2VzPWIueFJhbmdlcyxCLnlSYW5nZXM9Yi55UmFuZ2VzLEIucHRzPWIucHRzKSxrJiZcImNvbnN0cmFpbnRcIj09PWUuY29udG91cnMudHlwZXx8cyh0LGUse3ZhbHM6eSxjb250YWluZXJTdHI6XCJcIixjTGV0dGVyOlwielwifSksayYmZS5jb250b3VycyYmXCJoZWF0bWFwXCI9PT1lLmNvbnRvdXJzLmNvbG9yaW5nKXt2YXIgTj17dHlwZTpcImNvbnRvdXJcIj09PWUudHlwZT9cImhlYXRtYXBcIjpcImhpc3RvZ3JhbTJkXCIseGNhbGVuZGFyOmUueGNhbGVuZGFyLHljYWxlbmRhcjplLnljYWxlbmRhcn07Qi54ZmlsbD1mKE4sRCxwLGQsSSxfKSxCLnlmaWxsPWYoTixSLHYsbSx5Lmxlbmd0aCx3KX1yZXR1cm5bQl19fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsY1wiOjU4NixcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9oaXN0b2dyYW0yZC9jYWxjXCI6OTgwLFwiLi9jbGVhbl8yZF9hcnJheVwiOjk1MCxcIi4vY29udmVydF9jb2x1bW5feHl6XCI6OTUyLFwiLi9maW5kX2VtcHRpZXNcIjo5NTQsXCIuL2ludGVycDJkXCI6OTU3LFwiLi9tYWtlX2JvdW5kX2FycmF5XCI6OTU4fV0sOTUwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYSxvLHMsbDtmdW5jdGlvbiBjKHQpe2lmKG4odCkpcmV0dXJuK3R9aWYoZSl7Zm9yKHI9MCxzPTA7czx0Lmxlbmd0aDtzKyspcj1NYXRoLm1heChyLHRbc10ubGVuZ3RoKTtpZigwPT09cilyZXR1cm4hMTthPWZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aH0sbz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbcl1bZV19fWVsc2Ugcj10Lmxlbmd0aCxhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbZV0ubGVuZ3RofSxvPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtlXVtyXX07dmFyIHU9bmV3IEFycmF5KHIpO2ZvcihzPTA7czxyO3MrKylmb3IoaT1hKHQscyksdVtzXT1uZXcgQXJyYXkoaSksbD0wO2w8aTtsKyspdVtzXVtsXT1jKG8odCxzLGwpKTtyZXR1cm4gdX19LHtcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sOTUxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXttaW46XCJ6bWluXCIsbWF4Olwiem1heFwifX0se31dLDk1MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKS5CQUROVU07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyxzKXt2YXIgbCxjLHUsaCxmPXQuX2xlbmd0aCxwPWUubWFrZUNhbGNkYXRhKHQsYSksZD1yLm1ha2VDYWxjZGF0YSh0LG8pLGc9dC50ZXh0LHY9dm9pZCAwIT09ZyYmbi5pc0FycmF5MUQoZyksbT10LmhvdmVydGV4dCx5PXZvaWQgMCE9PW0mJm4uaXNBcnJheTFEKG0pLHg9bi5kaXN0aW5jdFZhbHMocCksYj14LnZhbHMsXz1uLmRpc3RpbmN0VmFscyhkKSx3PV8udmFscyxrPVtdO2ZvcihsPTA7bDxzLmxlbmd0aDtsKyspa1tsXT1uLmluaXQyZEFycmF5KHcubGVuZ3RoLGIubGVuZ3RoKTtmb3IodiYmKHU9bi5pbml0MmRBcnJheSh3Lmxlbmd0aCxiLmxlbmd0aCkpLHkmJihoPW4uaW5pdDJkQXJyYXkody5sZW5ndGgsYi5sZW5ndGgpKSxsPTA7bDxmO2wrKylpZihwW2xdIT09aSYmZFtsXSE9PWkpe3ZhciBBPW4uZmluZEJpbihwW2xdK3gubWluRGlmZi8yLGIpLFQ9bi5maW5kQmluKGRbbF0rXy5taW5EaWZmLzIsdyk7Zm9yKGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIE09dFtzW2NdXTtrW2NdW1RdW0FdPU1bbF19diYmKHVbVF1bQV09Z1tsXSkseSYmKGhbVF1bQV09bVtsXSl9Zm9yKHRbXCJfXCIrYV09Yix0W1wiX1wiK29dPXcsYz0wO2M8cy5sZW5ndGg7YysrKXRbXCJfXCIrc1tjXV09a1tjXTt2JiYodC5fdGV4dD11KSx5JiYodC5faG92ZXJ0ZXh0PWgpfX0se1wiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMX1dLDk1MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi94eXpfZGVmYXVsdHNcIiksYT10KFwiLi9zdHlsZV9kZWZhdWx0c1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIikscz10KFwiLi9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiBjKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9aSh0LGUsYyxsKT8oYyhcInRleHRcIiksYyhcImhvdmVydGV4dFwiKSxjKFwiaG92ZXJ0ZW1wbGF0ZVwiKSxhKHQsZSxjLGwpLGMoXCJjb25uZWN0Z2Fwc1wiLG4uaXNBcnJheTFEKGUueikmJiExIT09ZS56c21vb3RoKSxvKHQsZSxsLGMse3ByZWZpeDpcIlwiLGNMZXR0ZXI6XCJ6XCJ9KSk6ZS52aXNpYmxlPSExfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCI6NTg4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi9hdHRyaWJ1dGVzXCI6OTQ4LFwiLi9zdHlsZV9kZWZhdWx0c1wiOjk2MSxcIi4veHl6X2RlZmF1bHRzXCI6OTYyfV0sOTU0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKS5tYXhSb3dMZW5ndGg7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxhLG8scyxsLGMsdT1bXSxoPXt9LGY9W10scD10WzBdLGQ9W10sZz1bMCwwLDBdLHY9bih0KTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKWZvcihlPWQsZD1wLHA9dFtyKzFdfHxbXSxpPTA7aTx2O2krKyl2b2lkIDA9PT1kW2ldJiYoKHM9KHZvaWQgMCE9PWRbaS0xXT8xOjApKyh2b2lkIDAhPT1kW2krMV0/MTowKSsodm9pZCAwIT09ZVtpXT8xOjApKyh2b2lkIDAhPT1wW2ldPzE6MCkpPygwPT09ciYmcysrLDA9PT1pJiZzKysscj09PXQubGVuZ3RoLTEmJnMrKyxpPT09ZC5sZW5ndGgtMSYmcysrLHM8NCYmKGhbW3IsaV1dPVtyLGksc10pLHUucHVzaChbcixpLHNdKSk6Zi5wdXNoKFtyLGldKSk7Zm9yKDtmLmxlbmd0aDspe2ZvcihsPXt9LGM9ITEsbz1mLmxlbmd0aC0xO28+PTA7by0tKShzPSgoaFtbKHI9KGE9ZltvXSlbMF0pLTEsaT1hWzFdXV18fGcpWzJdKyhoW1tyKzEsaV1dfHxnKVsyXSsoaFtbcixpLTFdXXx8ZylbMl0rKGhbW3IsaSsxXV18fGcpWzJdKS8yMCkmJihsW2FdPVtyLGksc10sZi5zcGxpY2UobywxKSxjPSEwKTtpZighYyl0aHJvd1wiZmluZEVtcHRpZXMgaXRlcmF0ZWQgd2l0aCBubyBuZXcgbmVpZ2hib3JzXCI7Zm9yKGEgaW4gbCloW2FdPWxbYV0sdS5wdXNoKGxbYV0pfXJldHVybiB1LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gZVsyXS10WzJdfSl9fSx7XCIuLi8uLi9saWJcIjo3MDF9XSw5NTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyxsKXt2YXIgYyx1LGgsZixwPXQuY2RbMF0sZD1wLnRyYWNlLGc9dC54YSx2PXQueWEsbT1wLngseT1wLnkseD1wLnosYj1wLnhDZW50ZXIsXz1wLnlDZW50ZXIsdz1wLnptYXNrLGs9W2Quem1pbixkLnptYXhdLEE9ZC56aG92ZXJmb3JtYXQsVD1tLE09eTtpZighMSE9PXQuaW5kZXgpe3RyeXtoPU1hdGgucm91bmQodC5pbmRleFsxXSksZj1NYXRoLnJvdW5kKHQuaW5kZXhbMF0pfWNhdGNoKGUpe3JldHVybiB2b2lkIGkuZXJyb3IoXCJFcnJvciBob3ZlcmluZyBvbiBoZWF0bWFwLCBwb2ludE51bWJlciBtdXN0IGJlIFtyb3csY29sXSwgZm91bmQ6XCIsdC5pbmRleCl9aWYoaDwwfHxoPj14WzBdLmxlbmd0aHx8ZjwwfHxmPngubGVuZ3RoKXJldHVybn1lbHNle2lmKG4uaW5ib3goZS1tWzBdLGUtbVttLmxlbmd0aC0xXSwwKT4wfHxuLmluYm94KHIteVswXSxyLXlbeS5sZW5ndGgtMV0sMCk+MClyZXR1cm47aWYobCl7dmFyIFM7Zm9yKFQ9WzIqbVswXS1tWzFdXSxTPTE7UzxtLmxlbmd0aDtTKyspVC5wdXNoKChtW1NdK21bUy0xXSkvMik7Zm9yKFQucHVzaChbMiptW20ubGVuZ3RoLTFdLW1bbS5sZW5ndGgtMl1dKSxNPVsyKnlbMF0teVsxXV0sUz0xO1M8eS5sZW5ndGg7UysrKU0ucHVzaCgoeVtTXSt5W1MtMV0pLzIpO00ucHVzaChbMip5W3kubGVuZ3RoLTFdLXlbeS5sZW5ndGgtMl1dKX1oPU1hdGgubWF4KDAsTWF0aC5taW4oVC5sZW5ndGgtMixpLmZpbmRCaW4oZSxUKSkpLGY9TWF0aC5tYXgoMCxNYXRoLm1pbihNLmxlbmd0aC0yLGkuZmluZEJpbihyLE0pKSl9dmFyIEU9Zy5jMnAobVtoXSksQz1nLmMycChtW2grMV0pLEw9di5jMnAoeVtmXSksej12LmMycCh5W2YrMV0pO2w/KEM9RSxjPW1baF0sej1MLHU9eVtmXSk6KGM9Yj9iW2hdOihtW2hdK21baCsxXSkvMix1PV8/X1tmXTooeVtmXSt5W2YrMV0pLzIsZC56c21vb3RoJiYoRT1DPWcuYzJwKGMpLEw9ej12LmMycCh1KSkpO3ZhciBPLEksRD14W2ZdW2hdO3cmJiF3W2ZdW2hdJiYoRD12b2lkIDApLEFycmF5LmlzQXJyYXkocC5ob3ZlcnRleHQpJiZBcnJheS5pc0FycmF5KHAuaG92ZXJ0ZXh0W2ZdKT9PPXAuaG92ZXJ0ZXh0W2ZdW2hdOkFycmF5LmlzQXJyYXkocC50ZXh0KSYmQXJyYXkuaXNBcnJheShwLnRleHRbZl0pJiYoTz1wLnRleHRbZl1baF0pO3ZhciBQPXt0eXBlOlwibGluZWFyXCIscmFuZ2U6ayxob3ZlcmZvcm1hdDpBLF9zZXBhcmF0b3JzOmcuX3NlcGFyYXRvcnMsX251bUZvcm1hdDpnLl9udW1Gb3JtYXR9O3JldHVybiBJPWEudGlja1RleHQoUCxELFwiaG92ZXJcIikudGV4dCxbaS5leHRlbmRGbGF0KHQse2luZGV4OltmLGhdLGRpc3RhbmNlOnQubWF4SG92ZXJEaXN0YW5jZSxzcGlrZURpc3RhbmNlOnQubWF4U3Bpa2VEaXN0YW5jZSx4MDpFLHgxOkMseTA6TCx5MTp6LHhMYWJlbFZhbDpjLHlMYWJlbFZhbDp1LHpMYWJlbFZhbDpELHpMYWJlbDpJLHRleHQ6T30pXX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OX1dLDk1NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIiksbi5jYWxjPXQoXCIuL2NhbGNcIiksbi5wbG90PXQoXCIuL3Bsb3RcIiksbi5jb2xvcmJhcj10KFwiLi9jb2xvcmJhclwiKSxuLnN0eWxlPXQoXCIuL3N0eWxlXCIpLG4uaG92ZXJQb2ludHM9dChcIi4vaG92ZXJcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJoZWF0bWFwXCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCIpLG4uY2F0ZWdvcmllcz1bXCJjYXJ0ZXNpYW5cIixcInN2Z1wiLFwiMmRNYXBcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIjo3NjAsXCIuL2F0dHJpYnV0ZXNcIjo5NDgsXCIuL2NhbGNcIjo5NDksXCIuL2NvbG9yYmFyXCI6OTUxLFwiLi9kZWZhdWx0c1wiOjk1MyxcIi4vaG92ZXJcIjo5NTUsXCIuL3Bsb3RcIjo5NTksXCIuL3N0eWxlXCI6OTYwfV0sOTU3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPVtbLTEsMF0sWzEsMF0sWzAsLTFdLFswLDFdXTtmdW5jdGlvbiBhKHQpe3JldHVybi41LS4yNSpNYXRoLm1pbigxLC41KnQpfWZ1bmN0aW9uIG8odCxlLHIpe3ZhciBuLGEsbyxzLGwsYyx1LGgsZixwLGQsZyx2LG09MDtmb3Iocz0wO3M8ZS5sZW5ndGg7cysrKXtmb3IoYT0obj1lW3NdKVswXSxvPW5bMV0sZD10W2FdW29dLHA9MCxmPTAsbD0wO2w8NDtsKyspKHU9dFthKyhjPWlbbF0pWzBdXSkmJnZvaWQgMCE9PShoPXVbbytjWzFdXSkmJigwPT09cD9nPXY9aDooZz1NYXRoLm1pbihnLGgpLHY9TWF0aC5tYXgodixoKSksZisrLHArPWgpO2lmKDA9PT1mKXRocm93XCJpdGVyYXRlSW50ZXJwMmQgb3JkZXIgaXMgd3Jvbmc6IG5vIGRlZmluZWQgbmVpZ2hib3JzXCI7dFthXVtvXT1wL2Ysdm9pZCAwPT09ZD9mPDQmJihtPTEpOih0W2FdW29dPSgxK3IpKnRbYV1bb10tcipkLHY+ZyYmKG09TWF0aC5tYXgobSxNYXRoLmFicyh0W2FdW29dLWQpLyh2LWcpKSkpfXJldHVybiBtfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGk9MTtmb3Iobyh0LGUpLHI9MDtyPGUubGVuZ3RoJiYhKGVbcl1bMl08NCk7cisrKTtmb3IoZT1lLnNsaWNlKHIpLHI9MDtyPDEwMCYmaT4uMDE7cisrKWk9byh0LGUsYShpKSk7cmV0dXJuIGk+LjAxJiZuLmxvZyhcImludGVycDJkIGRpZG4ndCBjb252ZXJnZSBxdWlja2x5XCIsaSksdH19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDk1ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxpPXQoXCIuLi8uLi9saWJcIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxvLHMpe3ZhciBsLGMsdSxoPVtdLGY9bi50cmFjZUlzKHQsXCJjb250b3VyXCIpLHA9bi50cmFjZUlzKHQsXCJoaXN0b2dyYW1cIiksZD1uLnRyYWNlSXModCxcImdsMmRcIik7aWYoaShlKSYmZS5sZW5ndGg+MSYmIXAmJlwiY2F0ZWdvcnlcIiE9PXMudHlwZSl7dmFyIGc9ZS5sZW5ndGg7aWYoIShnPD1vKSlyZXR1cm4gZj9lLnNsaWNlKDAsbyk6ZS5zbGljZSgwLG8rMSk7aWYoZnx8ZCloPWUuc2xpY2UoMCxvKTtlbHNlIGlmKDE9PT1vKWg9W2VbMF0tLjUsZVswXSsuNV07ZWxzZXtmb3IoaD1bMS41KmVbMF0tLjUqZVsxXV0sdT0xO3U8Zzt1KyspaC5wdXNoKC41KihlW3UtMV0rZVt1XSkpO2gucHVzaCgxLjUqZVtnLTFdLS41KmVbZy0yXSl9aWYoZzxvKXt2YXIgdj1oW2gubGVuZ3RoLTFdLG09di1oW2gubGVuZ3RoLTJdO2Zvcih1PWc7dTxvO3UrKyl2Kz1tLGgucHVzaCh2KX19ZWxzZXt2YXIgeT10W3MuX2lkLmNoYXJBdCgwKStcImNhbGVuZGFyXCJdO2ZvcihsPWkoZSkmJjE9PT1lLmxlbmd0aD9lWzBdOnZvaWQgMD09PXI/MDpwfHxcImNhdGVnb3J5XCI9PT1zLnR5cGV8fFwibXVsdGljYXRlZ29yeVwiPT09cy50eXBlP3MucjJjKHIsMCx5KTpzLmQyYyhyLDAseSksYz1hfHwxLHU9Znx8ZD8wOi0uNTt1PG87dSsrKWgucHVzaChsK2MqdSl9cmV0dXJuIGh9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOX1dLDk1OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJ0aW55Y29sb3IyXCIpLGE9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLG89dChcIi4uLy4uL2xpYlwiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGVcIiksbD10KFwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIik7ZnVuY3Rpb24gYyh0LGUpe3ZhciByPWUubGVuZ3RoLTIsbj1vLmNvbnN0cmFpbihvLmZpbmRCaW4odCxlKSwwLHIpLGk9ZVtuXSxhPWVbbisxXSxzPW8uY29uc3RyYWluKG4rKHQtaSkvKGEtaSktLjUsMCxyKSxsPU1hdGgucm91bmQocyksYz1NYXRoLmFicyhzLWwpO3JldHVybiBzJiZzIT09ciYmYz97YmluMDpsLGZyYWM6YyxiaW4xOk1hdGgucm91bmQobCtjLyhzLWwpKX06e2JpbjA6bCxiaW4xOmwsZnJhYzowfX1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9ZS5sZW5ndGgtMSxuPW8uY29uc3RyYWluKG8uZmluZEJpbih0LGUpLDAsciksaT1lW25dLGE9KHQtaSkvKGVbbisxXS1pKXx8MDtyZXR1cm4gYTw9MD97YmluMDpuLGJpbjE6bixmcmFjOjB9OmE8LjU/e2JpbjA6bixiaW4xOm4rMSxmcmFjOmF9OntiaW4wOm4rMSxiaW4xOm4sZnJhYzoxLWF9fWZ1bmN0aW9uIGgodCxlLHIpe3RbZV09clswXSx0W2UrMV09clsxXSx0W2UrMl09clsyXSx0W2UrM109TWF0aC5yb3VuZCgyNTUqclszXSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYpe3ZhciBwPWUueGF4aXMsZD1lLnlheGlzO28ubWFrZVRyYWNlR3JvdXBzKGYscixcImhtXCIpLmVhY2goZnVuY3Rpb24oZSl7dmFyIHIsZixnLHYsbSx5LHg9bi5zZWxlY3QodGhpcyksYj1lWzBdLF89Yi50cmFjZSx3PWIueixrPWIueCxBPWIueSxUPWIueENlbnRlcixNPWIueUNlbnRlcixTPWEudHJhY2VJcyhfLFwiY29udG91clwiKSxFPVM/XCJiZXN0XCI6Xy56c21vb3RoLEM9dy5sZW5ndGgsTD1vLm1heFJvd0xlbmd0aCh3KSx6PSExLE89ITE7Zm9yKHk9MDt2b2lkIDA9PT1yJiZ5PGsubGVuZ3RoLTE7KXI9cC5jMnAoa1t5XSkseSsrO2Zvcih5PWsubGVuZ3RoLTE7dm9pZCAwPT09ZiYmeT4wOylmPXAuYzJwKGtbeV0pLHktLTtmb3IoZjxyJiYoZz1mLGY9cixyPWcsej0hMCkseT0wO3ZvaWQgMD09PXYmJnk8QS5sZW5ndGgtMTspdj1kLmMycChBW3ldKSx5Kys7Zm9yKHk9QS5sZW5ndGgtMTt2b2lkIDA9PT1tJiZ5PjA7KW09ZC5jMnAoQVt5XSkseS0tO2lmKG08diYmKGc9dix2PW0sbT1nLE89ITApLFMmJihUPWssTT1BLGs9Yi54ZmlsbCxBPWIueWZpbGwpLFwiZmFzdFwiIT09RSl7dmFyIEk9XCJiZXN0XCI9PT1FPzA6LjU7cj1NYXRoLm1heCgtSSpwLl9sZW5ndGgsciksZj1NYXRoLm1pbigoMStJKSpwLl9sZW5ndGgsZiksdj1NYXRoLm1heCgtSSpkLl9sZW5ndGgsdiksbT1NYXRoLm1pbigoMStJKSpkLl9sZW5ndGgsbSl9dmFyIEQ9TWF0aC5yb3VuZChmLXIpLFA9TWF0aC5yb3VuZChtLXYpO2lmKEQ8PTB8fFA8PTApe3guc2VsZWN0QWxsKFwiaW1hZ2VcIikuZGF0YShbXSkuZXhpdCgpLnJlbW92ZSgpfWVsc2V7dmFyIFIsRjtcImZhc3RcIj09PUU/KFI9TCxGPUMpOihSPUQsRj1QKTt2YXIgQj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO0Iud2lkdGg9UixCLmhlaWdodD1GO3ZhciBOLGosVj1CLmdldENvbnRleHQoXCIyZFwiKSxVPXMubWFrZUNvbG9yU2NhbGVGdW5jKHMuZXh0cmFjdFNjYWxlKF8se2NMZXR0ZXI6XCJ6XCJ9KSx7bm9OdW1lcmljQ2hlY2s6ITAscmV0dXJuQXJyYXk6ITB9KTtcImZhc3RcIj09PUU/KE49ej9mdW5jdGlvbih0KXtyZXR1cm4gTC0xLXR9Om8uaWRlbnRpdHksaj1PP2Z1bmN0aW9uKHQpe3JldHVybiBDLTEtdH06by5pZGVudGl0eSk6KE49ZnVuY3Rpb24odCl7cmV0dXJuIG8uY29uc3RyYWluKE1hdGgucm91bmQocC5jMnAoa1t0XSktciksMCxEKX0saj1mdW5jdGlvbih0KXtyZXR1cm4gby5jb25zdHJhaW4oTWF0aC5yb3VuZChkLmMycChBW3RdKS12KSwwLFApfSk7dmFyIHEsSCxHLFksVyxYPWooMCksWj1bWCxYXSwkPXo/MDoxLEo9Tz8wOjEsSz0wLFE9MCx0dD0wLGV0PTA7aWYoRSl7dmFyIHJ0LG50PTA7dHJ5e3J0PW5ldyBVaW50OEFycmF5KEQqUCo0KX1jYXRjaCh0KXtydD1uZXcgQXJyYXkoRCpQKjQpfWlmKFwiYmVzdFwiPT09RSl7dmFyIGl0LGF0LG90LHN0PVR8fGssbHQ9TXx8QSxjdD1uZXcgQXJyYXkoc3QubGVuZ3RoKSx1dD1uZXcgQXJyYXkobHQubGVuZ3RoKSxodD1uZXcgQXJyYXkoRCksZnQ9VD91OmMscHQ9TT91OmM7Zm9yKHk9MDt5PHN0Lmxlbmd0aDt5KyspY3RbeV09TWF0aC5yb3VuZChwLmMycChzdFt5XSktcik7Zm9yKHk9MDt5PGx0Lmxlbmd0aDt5KyspdXRbeV09TWF0aC5yb3VuZChkLmMycChsdFt5XSktdik7Zm9yKHk9MDt5PEQ7eSsrKWh0W3ldPWZ0KHksY3QpO2ZvcihIPTA7SDxQO0grKylmb3IoYXQ9d1soaXQ9cHQoSCx1dCkpLmJpbjBdLG90PXdbaXQuYmluMV0seT0wO3k8RDt5KyssbnQrPTQpaChydCxudCxXPUF0KGF0LG90LGh0W3ldLGl0KSl9ZWxzZSBmb3IoSD0wO0g8QztIKyspZm9yKFk9d1tIXSxaPWooSCkseT0wO3k8RDt5KyspVz1rdChZW3ldLDEpLGgocnQsbnQ9NCooWipEK04oeSkpLFcpO3ZhciBkdD1WLmNyZWF0ZUltYWdlRGF0YShELFApO3RyeXtkdC5kYXRhLnNldChydCl9Y2F0Y2godCl7dmFyIGd0PWR0LmRhdGEsdnQ9Z3QubGVuZ3RoO2ZvcihIPTA7SDx2dDtIKyspZ3RbSF09cnRbSF19Vi5wdXRJbWFnZURhdGEoZHQsMCwwKX1lbHNle3ZhciBtdD1fLnhnYXAseXQ9Xy55Z2FwLHh0PU1hdGguZmxvb3IobXQvMiksYnQ9TWF0aC5mbG9vcih5dC8yKTtmb3IoSD0wO0g8QztIKyspaWYoWT13W0hdLFoucmV2ZXJzZSgpLFpbSl09aihIKzEpLFpbMF0hPT1aWzFdJiZ2b2lkIDAhPT1aWzBdJiZ2b2lkIDAhPT1aWzFdKWZvcihxPVtHPU4oMCksR10seT0wO3k8TDt5KyspcS5yZXZlcnNlKCkscVskXT1OKHkrMSkscVswXSE9PXFbMV0mJnZvaWQgMCE9PXFbMF0mJnZvaWQgMCE9PXFbMV0mJihXPWt0KFlbeV0sKHFbMV0tcVswXSkqKFpbMV0tWlswXSkpLFYuZmlsbFN0eWxlPVwicmdiYShcIitXLmpvaW4oXCIsXCIpK1wiKVwiLFYuZmlsbFJlY3QocVswXSt4dCxaWzBdK2J0LHFbMV0tcVswXS1tdCxaWzFdLVpbMF0teXQpKX1RPU1hdGgucm91bmQoUS9LKSx0dD1NYXRoLnJvdW5kKHR0L0spLGV0PU1hdGgucm91bmQoZXQvSyk7dmFyIF90PWkoXCJyZ2IoXCIrUStcIixcIit0dCtcIixcIitldCtcIilcIik7dC5faG1waXhjb3VudD0odC5faG1waXhjb3VudHx8MCkrSyx0Ll9obWx1bWNvdW50PSh0Ll9obWx1bWNvdW50fHwwKStLKl90LmdldEx1bWluYW5jZSgpO3ZhciB3dD14LnNlbGVjdEFsbChcImltYWdlXCIpLmRhdGEoZSk7d3QuZW50ZXIoKS5hcHBlbmQoXCJzdmc6aW1hZ2VcIikuYXR0cih7eG1sbnM6bC5zdmcscHJlc2VydmVBc3BlY3RSYXRpbzpcIm5vbmVcIn0pLHd0LmF0dHIoe2hlaWdodDpQLHdpZHRoOkQseDpyLHk6dixcInhsaW5rOmhyZWZcIjpCLnRvRGF0YVVSTChcImltYWdlL3BuZ1wiKX0pfWZ1bmN0aW9uIGt0KHQsZSl7aWYodm9pZCAwIT09dCl7dmFyIHI9VSh0KTtyZXR1cm4gclswXT1NYXRoLnJvdW5kKHJbMF0pLHJbMV09TWF0aC5yb3VuZChyWzFdKSxyWzJdPU1hdGgucm91bmQoclsyXSksSys9ZSxRKz1yWzBdKmUsdHQrPXJbMV0qZSxldCs9clsyXSplLHJ9cmV0dXJuWzAsMCwwLDBdfWZ1bmN0aW9uIEF0KHQsZSxyLG4pe3ZhciBpPXRbci5iaW4wXTtpZih2b2lkIDA9PT1pKXJldHVybiBrdCh2b2lkIDAsMSk7dmFyIGEsbz10W3IuYmluMV0scz1lW3IuYmluMF0sbD1lW3IuYmluMV0sYz1vLWl8fDAsdT1zLWl8fDA7cmV0dXJuIGE9dm9pZCAwPT09bz92b2lkIDA9PT1sPzA6dm9pZCAwPT09cz8yKihsLWkpOjIqKDIqbC1zLWkpLzM6dm9pZCAwPT09bD92b2lkIDA9PT1zPzA6MiooMippLW8tcykvMzp2b2lkIDA9PT1zPzIqKDIqbC1vLWkpLzM6bCtpLW8tcyxrdChpK3IuZnJhYypjK24uZnJhYyoodStyLmZyYWMqYSkpfX0pfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlXCI6NTkwLFwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIjo2NzksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxkMzoxNTUsdGlueWNvbG9yMjo1MjJ9XSw5NjA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe24uc2VsZWN0KHQpLnNlbGVjdEFsbChcIi5obSBpbWFnZVwiKS5zdHlsZShcIm9wYWNpdHlcIixmdW5jdGlvbih0KXtyZXR1cm4gdC50cmFjZS5vcGFjaXR5fSl9fSx7ZDM6MTU1fV0sOTYxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXshMT09PXIoXCJ6c21vb3RoXCIpJiYocihcInhnYXBcIikscihcInlnYXBcIikpLHIoXCJ6aG92ZXJmb3JtYXRcIil9fSx7fV0sOTYyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9yZWdpc3RyeVwiKTtmdW5jdGlvbiBvKHQsZSl7dmFyIHI9ZSh0KTtyZXR1cm5cInNjYWxlZFwiPT09KHI/ZSh0K1widHlwZVwiLFwiYXJyYXlcIik6XCJzY2FsZWRcIikmJihlKHQrXCIwXCIpLGUoXCJkXCIrdCkpLHJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCxjKXt2YXIgdSxoLGY9cihcInpcIik7aWYobD1sfHxcInhcIixjPWN8fFwieVwiLHZvaWQgMD09PWZ8fCFmLmxlbmd0aClyZXR1cm4gMDtpZihpLmlzQXJyYXkxRCh0LnopKXt1PXIobCksaD1yKGMpO3ZhciBwPWkubWluUm93TGVuZ3RoKHUpLGQ9aS5taW5Sb3dMZW5ndGgoaCk7aWYoMD09PXB8fDA9PT1kKXJldHVybiAwO2UuX2xlbmd0aD1NYXRoLm1pbihwLGQsZi5sZW5ndGgpfWVsc2V7aWYodT1vKGwsciksaD1vKGMsciksIWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPSEwLGE9ITEsbz0hMSxzPTA7czx0Lmxlbmd0aDtzKyspe2lmKGU9dFtzXSwhaS5pc0FycmF5T3JUeXBlZEFycmF5KGUpKXtyPSExO2JyZWFrfWUubGVuZ3RoPjAmJihhPSEwKTtmb3IodmFyIGw9MDtsPGUubGVuZ3RoO2wrKylpZihuKGVbbF0pKXtvPSEwO2JyZWFrfX1yZXR1cm4gciYmYSYmb30oZikpcmV0dXJuIDA7cihcInRyYW5zcG9zZVwiKSxlLl9sZW5ndGg9bnVsbH1yZXR1cm4gYS5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcImhhbmRsZVRyYWNlRGVmYXVsdHNcIikodCxlLFtsLGNdLHMpLCEwfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDk2MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Zvcih2YXIgbj10KFwiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQscz10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbCxsPVtcInpcIixcInhcIixcIngwXCIsXCJkeFwiLFwieVwiLFwieTBcIixcImR5XCIsXCJ0ZXh0XCIsXCJ0cmFuc3Bvc2VcIixcInh0eXBlXCIsXCJ5dHlwZVwiXSxjPXt9LHU9MDt1PGwubGVuZ3RoO3UrKyl7dmFyIGg9bFt1XTtjW2hdPW5baF19byhjLGkoXCJcIix7Y0xldHRlcjpcInpcIixhdXRvQ29sb3JEZmx0OiExfSkse2NvbG9yYmFyOmF9KSxlLmV4cG9ydHM9cyhjLFwiY2FsY1wiLFwibmVzdGVkXCIpfSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIjo1NzksXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzXCI6OTQ4fV0sOTY0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsLWhlYXRtYXAyZFwiKSxpPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxhPXQoXCIuLi8uLi9saWIvc3RyMnJnYmFycmF5XCIpO2Z1bmN0aW9uIG8odCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLnR5cGU9XCJoZWF0bWFwZ2xcIix0aGlzLm5hbWU9XCJcIix0aGlzLmhvdmVyaW5mbz1cImFsbFwiLHRoaXMueERhdGE9W10sdGhpcy55RGF0YT1bXSx0aGlzLnpEYXRhPVtdLHRoaXMudGV4dExhYmVscz1bXSx0aGlzLmlkVG9JbmRleD1bXSx0aGlzLmJvdW5kcz1bMCwwLDAsMF0sdGhpcy5vcHRpb25zPXt6OltdLHg6W10seTpbXSxzaGFwZTpbMCwwXSxjb2xvckxldmVsczpbMF0sY29sb3JWYWx1ZXM6WzAsMCwwLDFdfSx0aGlzLmhlYXRtYXA9bih0LmdscGxvdCx0aGlzLm9wdGlvbnMpLHRoaXMuaGVhdG1hcC5fdHJhY2U9dGhpc312YXIgcz1vLnByb3RvdHlwZTtzLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5vcHRpb25zLHI9ZS5zaGFwZSxuPXQucG9pbnRJZCxpPW4lclswXSxhPU1hdGguZmxvb3Iobi9yWzBdKSxvPW47cmV0dXJue3RyYWNlOnRoaXMsZGF0YUNvb3JkOnQuZGF0YUNvb3JkLHRyYWNlQ29vcmQ6W2UueFtpXSxlLnlbYV0sZS56W29dXSx0ZXh0TGFiZWw6dGhpcy50ZXh0TGFiZWxzW25dLG5hbWU6dGhpcy5uYW1lLHBvaW50SW5kZXg6W2EsaV0saG92ZXJpbmZvOnRoaXMuaG92ZXJpbmZvfX0scy51cGRhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3RoaXMuaW5kZXg9dC5pbmRleCx0aGlzLm5hbWU9dC5uYW1lLHRoaXMuaG92ZXJpbmZvPXQuaG92ZXJpbmZvO3ZhciBuPXIuejt0aGlzLm9wdGlvbnMuej1bXS5jb25jYXQuYXBwbHkoW10sbik7dmFyIG89blswXS5sZW5ndGgscz1uLmxlbmd0aDt0aGlzLm9wdGlvbnMuc2hhcGU9W28sc10sdGhpcy5vcHRpb25zLng9ci54LHRoaXMub3B0aW9ucy55PXIueTt2YXIgbD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jb2xvcnNjYWxlLHI9dC56bWluLG49dC56bWF4LGk9ZS5sZW5ndGgsbz1uZXcgQXJyYXkoaSkscz1uZXcgQXJyYXkoNCppKSxsPTA7bDxpO2wrKyl7dmFyIGM9ZVtsXSx1PWEoY1sxXSk7b1tsXT1yK2NbMF0qKG4tcik7Zm9yKHZhciBoPTA7aDw0O2grKylzWzQqbCtoXT11W2hdfXJldHVybntjb2xvckxldmVsczpvLGNvbG9yVmFsdWVzOnN9fSh0KTt0aGlzLm9wdGlvbnMuY29sb3JMZXZlbHM9bC5jb2xvckxldmVscyx0aGlzLm9wdGlvbnMuY29sb3JWYWx1ZXM9bC5jb2xvclZhbHVlcyx0aGlzLnRleHRMYWJlbHM9W10uY29uY2F0LmFwcGx5KFtdLHQudGV4dCksdGhpcy5oZWF0bWFwLnVwZGF0ZSh0aGlzLm9wdGlvbnMpO3ZhciBjPXRoaXMuc2NlbmUueGF4aXMsdT10aGlzLnNjZW5lLnlheGlzO3QuX2V4dHJlbWVzW2MuX2lkXT1pLmZpbmRFeHRyZW1lcyhjLHIueCksdC5fZXh0cmVtZXNbdS5faWRdPWkuZmluZEV4dHJlbWVzKHUsci55KX0scy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5oZWF0bWFwLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1uZXcgbyh0LGUudWlkKTtyZXR1cm4gbi51cGRhdGUoZSxyKSxufX0se1wiLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiOjcyNCxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiZ2wtaGVhdG1hcDJkXCI6MjQ4fV0sOTY1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi4vaGVhdG1hcC9kZWZhdWx0c1wiKSxuLmNvbG9yYmFyPXQoXCIuLi9oZWF0bWFwL2NvbG9yYmFyXCIpLG4uY2FsYz10KFwiLi4vaGVhdG1hcC9jYWxjXCIpLG4ucGxvdD10KFwiLi9jb252ZXJ0XCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwiaGVhdG1hcGdsXCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvZ2wyZFwiKSxuLmNhdGVnb3JpZXM9W1wiZ2xcIixcImdsMmRcIixcIjJkTWFwXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvZ2wyZFwiOjc4NyxcIi4uL2hlYXRtYXAvY2FsY1wiOjk0OSxcIi4uL2hlYXRtYXAvY29sb3JiYXJcIjo5NTEsXCIuLi9oZWF0bWFwL2RlZmF1bHRzXCI6OTUzLFwiLi9hdHRyaWJ1dGVzXCI6OTYzLFwiLi9jb252ZXJ0XCI6OTY0fV0sOTY2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2Jhci9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLGE9dChcIi4vYmluX2F0dHJpYnV0ZXNcIiksbz10KFwiLi9jb25zdGFudHNcIikscz10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17eDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0seTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0sdGV4dDpzKHt9LG4udGV4dCx7fSksaG92ZXJ0ZXh0OnMoe30sbi5ob3ZlcnRleHQse30pLG9yaWVudGF0aW9uOm4ub3JpZW50YXRpb24saGlzdGZ1bmM6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImNvdW50XCIsXCJzdW1cIixcImF2Z1wiLFwibWluXCIsXCJtYXhcIl0sZGZsdDpcImNvdW50XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGhpc3Rub3JtOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJcIixcInBlcmNlbnRcIixcInByb2JhYmlsaXR5XCIsXCJkZW5zaXR5XCIsXCJwcm9iYWJpbGl0eSBkZW5zaXR5XCJdLGRmbHQ6XCJcIixlZGl0VHlwZTpcImNhbGNcIn0sY3VtdWxhdGl2ZTp7ZW5hYmxlZDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwiY2FsY1wifSxkaXJlY3Rpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImluY3JlYXNpbmdcIixcImRlY3JlYXNpbmdcIl0sZGZsdDpcImluY3JlYXNpbmdcIixlZGl0VHlwZTpcImNhbGNcIn0sY3VycmVudGJpbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiaW5jbHVkZVwiLFwiZXhjbHVkZVwiLFwiaGFsZlwiXSxkZmx0OlwiaW5jbHVkZVwiLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0sbmJpbnN4Ont2YWxUeXBlOlwiaW50ZWdlclwiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTpcImNhbGNcIn0seGJpbnM6YShcInhcIiwhMCksbmJpbnN5Ont2YWxUeXBlOlwiaW50ZWdlclwiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTpcImNhbGNcIn0seWJpbnM6YShcInlcIiwhMCksYXV0b2Jpbng6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDpudWxsLGVkaXRUeXBlOlwiY2FsY1wifSxhdXRvYmlueTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0Om51bGwsZWRpdFR5cGU6XCJjYWxjXCJ9LGhvdmVydGVtcGxhdGU6aSh7fSx7a2V5czpvLmV2ZW50RGF0YUtleXN9KSxtYXJrZXI6bi5tYXJrZXIsb2Zmc2V0Z3JvdXA6bi5vZmZzZXRncm91cCxhbGlnbm1lbnRncm91cDpuLmFsaWdubWVudGdyb3VwLHNlbGVjdGVkOm4uc2VsZWN0ZWQsdW5zZWxlY3RlZDpuLnVuc2VsZWN0ZWQsX2RlcHJlY2F0ZWQ6e2JhcmRpcjpuLl9kZXByZWNhdGVkLmJhcmRpcn19fSx7XCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi9iYXIvYXR0cmlidXRlc1wiOjgzOSxcIi4vYmluX2F0dHJpYnV0ZXNcIjo5NjgsXCIuL2NvbnN0YW50c1wiOjk3Mn1dLDk2NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPTAsaT0wO2k8cjtpKyspZVtpXT8odFtpXS89ZVtpXSxuKz10W2ldKTp0W2ldPW51bGw7cmV0dXJuIG59fSx7fV0sOTY4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJue3N0YXJ0Ont2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGVuZDp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsY1wifSxzaXplOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGVkaXRUeXBlOlwiY2FsY1wifX19LHt9XSw5Njk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIik7ZS5leHBvcnRzPXtjb3VudDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHJbdF0rKywxfSxzdW06ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9aVtlXTtyZXR1cm4gbihhKT8oYT1OdW1iZXIoYSksclt0XSs9YSxhKTowfSxhdmc6ZnVuY3Rpb24odCxlLHIsaSxhKXt2YXIgbz1pW2VdO3JldHVybiBuKG8pJiYobz1OdW1iZXIobyksclt0XSs9byxhW3RdKyspLDB9LG1pbjpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1pW2VdO2lmKG4oYSkpe2lmKGE9TnVtYmVyKGEpLCFuKHJbdF0pKXJldHVybiByW3RdPWEsYTtpZihyW3RdPmEpe3ZhciBvPWEtclt0XTtyZXR1cm4gclt0XT1hLG99fXJldHVybiAwfSxtYXg6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9aVtlXTtpZihuKGEpKXtpZihhPU51bWJlcihhKSwhbihyW3RdKSlyZXR1cm4gclt0XT1hLGE7aWYoclt0XTxhKXt2YXIgbz1hLXJbdF07cmV0dXJuIHJbdF09YSxvfX1yZXR1cm4gMH19fSx7XCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDk3MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLGk9bi5PTkVBVkdZRUFSLGE9bi5PTkVBVkdNT05USCxvPW4uT05FREFZLHM9bi5PTkVIT1VSLGw9bi5PTkVNSU4sYz1uLk9ORVNFQyx1PXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKS50aWNrSW5jcmVtZW50O2Z1bmN0aW9uIGgodCxlLHIsbil7aWYodCplPD0wKXJldHVybiAxLzA7Zm9yKHZhciBpPU1hdGguYWJzKGUtdCksYT1cImRhdGVcIj09PXIudHlwZSxvPWYoaSxhKSxzPTA7czwxMDtzKyspe3ZhciBsPWYoODAqbyxhKTtpZihvPT09bClicmVhaztpZighcChsLHQsZSxhLHIsbikpYnJlYWs7bz1sfXJldHVybiBvfWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gZSYmdD5jP3Q+bz90PjEuMSppP2k6dD4xLjEqYT9hOm86dD5zP3M6dD5sP2w6YzpNYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4xMCkpfWZ1bmN0aW9uIHAodCxlLHIsbixhLHMpe2lmKG4mJnQ+byl7dmFyIGw9ZChlLGEscyksYz1kKHIsYSxzKSx1PXQ9PT1pPzA6MTtyZXR1cm4gbFt1XSE9PWNbdV19cmV0dXJuIE1hdGguZmxvb3Ioci90KS1NYXRoLmZsb29yKGUvdCk+LjF9ZnVuY3Rpb24gZCh0LGUscil7dmFyIG49ZS5jMmQodCxpLHIpLnNwbGl0KFwiLVwiKTtyZXR1cm5cIlwiPT09blswXSYmKG4udW5zaGlmdCgpLG5bMF09XCItXCIrblswXSksbn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgcyxsLGM9LTEuMSplLGY9LS4xKmUscD10LWYsZD1yWzBdLGc9clsxXSx2PU1hdGgubWluKGgoZCtmLGQrcCxuLGEpLGgoZytmLGcrcCxuLGEpKSxtPU1hdGgubWluKGgoZCtjLGQrZixuLGEpLGgoZytjLGcrZixuLGEpKTtpZih2Pm0mJm08TWF0aC5hYnMoZy1kKS80ZTM/KHM9dixsPSExKToocz1NYXRoLm1pbih2LG0pLGw9ITApLFwiZGF0ZVwiPT09bi50eXBlJiZzPm8pe3ZhciB5PXM9PT1pPzE6Nix4PXM9PT1pP1wiTTEyXCI6XCJNMVwiO3JldHVybiBmdW5jdGlvbihlLHIpe3ZhciBvPW4uYzJkKGUsaSxhKSxzPW8uaW5kZXhPZihcIi1cIix5KTtzPjAmJihvPW8uc3Vic3RyKDAscykpO3ZhciBjPW4uZDJjKG8sMCxhKTtpZihjPGUpe3ZhciBoPXUoYyx4LCExLGEpOyhjK2gpLzI8ZSt0JiYoYz1oKX1yZXR1cm4gciYmbD91KGMseCwhMCxhKTpjfX1yZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbj1zKk1hdGgucm91bmQoZS9zKTtyZXR1cm4gbitzLzEwPGUmJm4rLjkqczxlK3QmJihuKz1zKSxyJiZsJiYobi09cyksbn19fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDl9XSw5NzE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLG89dChcIi4uL2Jhci9hcnJheXNfdG9fY2FsY2RhdGFcIikscz10KFwiLi9iaW5fZnVuY3Rpb25zXCIpLGw9dChcIi4vbm9ybV9mdW5jdGlvbnNcIiksYz10KFwiLi9hdmVyYWdlXCIpLHU9dChcIi4vYmluX2xhYmVsX3ZhbHNcIik7ZnVuY3Rpb24gaCh0LGUscixvLHMpe3ZhciBsLGMsdSxmLHAsZCxnLHY9bytcImJpbnNcIixtPXQuX2Z1bGxMYXlvdXQseT1cIm92ZXJsYXlcIj09PW0uYmFybW9kZSx4PVwiZGF0ZVwiPT09ci50eXBlP2Z1bmN0aW9uKHQpe3JldHVybiB0fHwwPT09dD9pLmNsZWFuRGF0ZSh0LG51bGwsci5jYWxlbmRhcik6bnVsbH06ZnVuY3Rpb24odCl7cmV0dXJuIG4odCk/TnVtYmVyKHQpOm51bGx9O2Z1bmN0aW9uIGIodCxlLHIpe2VbdCtcIkZvdW5kXCJdPyhlW3RdPXgoZVt0XSksbnVsbD09PWVbdF0mJihlW3RdPXJbdF0pKTooZFt0XT1lW3RdPXJbdF0saS5uZXN0ZWRQcm9wZXJ0eShjWzBdLHYrXCIuXCIrdCkuc2V0KHJbdF0pKX12YXIgXz1tLl9oaXN0b2dyYW1CaW5PcHRzW2UuX2dyb3VwTmFtZV07aWYoZS5fYXV0b0JpbkZpbmlzaGVkKWRlbGV0ZSBlLl9hdXRvQmluRmluaXNoZWQ7ZWxzZXtjPV8udHJhY2VzO3ZhciB3PV8uc2l6ZUZvdW5kLGs9W107ZD1jWzBdLl9hdXRvQmluPXt9O3ZhciBBPSEwO2ZvcihsPTA7bDxjLmxlbmd0aDtsKyspKHU9Y1tsXSkudmlzaWJsZSYmKHA9dS5fcG9zMD1yLm1ha2VDYWxjZGF0YSh1LG8pLGs9aS5jb25jYXQoayxwKSxkZWxldGUgdS5fYXV0b0JpbkZpbmlzaGVkLCEwPT09ZS52aXNpYmxlJiYoQT9BPSExOihkZWxldGUgdS5fYXV0b0Jpbix1Ll9hdXRvQmluRmluaXNoZWQ9MSkpKTtmPWNbMF1bbytcImNhbGVuZGFyXCJdO3ZhciBUPWEuYXV0b0JpbihrLHIsXy5uYmlucywhMSxmLHcmJl8uc2l6ZSk7aWYoeSYmMD09PVQuX2RhdGFTcGFuJiZcImNhdGVnb3J5XCIhPT1yLnR5cGUmJlwibXVsdGljYXRlZ29yeVwiIT09ci50eXBlKXtpZihzKXJldHVybltULHAsITBdO1Q9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbyxzLGw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS54YXhpcyxuPWUueWF4aXMsaT1lLm9yaWVudGF0aW9uLGE9W10sbz10Ll9mdWxsRGF0YSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107XCJoaXN0b2dyYW1cIj09PWwudHlwZSYmITA9PT1sLnZpc2libGUmJmwub3JpZW50YXRpb249PT1pJiZsLnhheGlzPT09ciYmbC55YXhpcz09PW4mJmEucHVzaChsKX1yZXR1cm4gYX0odCxlKSxjPSExLHU9MS8wLGY9W2VdO2ZvcihvPTA7bzxsLmxlbmd0aDtvKyspaWYoKHM9bFtvXSk9PT1lKWM9ITA7ZWxzZSBpZihjKXt2YXIgcD1oKHQscyxyLG4sITApLGQ9cFswXSxnPXBbMl07cy5fYXV0b0JpbkZpbmlzaGVkPTEscy5fcG9zMD1wWzFdLGc/Zi5wdXNoKHMpOnU9TWF0aC5taW4odSxkLnNpemUpfWVsc2UgdT1NYXRoLm1pbih1LHNbYV0uc2l6ZSk7dmFyIHY9bmV3IEFycmF5KGYubGVuZ3RoKTtmb3Iobz0wO288Zi5sZW5ndGg7bysrKWZvcih2YXIgbT1mW29dLl9wb3MwLHk9MDt5PG0ubGVuZ3RoO3krKylpZih2b2lkIDAhPT1tW3ldKXt2W29dPW1beV07YnJlYWt9aXNGaW5pdGUodSl8fCh1PWkuZGlzdGluY3RWYWxzKHYpLm1pbkRpZmYpO2ZvcihvPTA7bzxmLmxlbmd0aDtvKyspe3ZhciB4PShzPWZbb10pW24rXCJjYWxlbmRhclwiXTtzLl9pbnB1dFthXT1zW2FdPXtzdGFydDpyLmMycih2W29dLXUvMiwwLHgpLGVuZDpyLmMycih2W29dK3UvMiwwLHgpLHNpemU6dX19cmV0dXJuIGVbYV19KHQsZSxyLG8sdil9KGc9dS5jdW11bGF0aXZlKS5lbmFibGVkJiZcImluY2x1ZGVcIiE9PWcuY3VycmVudGJpbiYmKFwiZGVjcmVhc2luZ1wiPT09Zy5kaXJlY3Rpb24/VC5zdGFydD1yLmMycihhLnRpY2tJbmNyZW1lbnQoci5yMmMoVC5zdGFydCwwLGYpLFQuc2l6ZSwhMCxmKSk6VC5lbmQ9ci5jMnIoYS50aWNrSW5jcmVtZW50KHIucjJjKFQuZW5kLDAsZiksVC5zaXplLCExLGYpKSksXy5zaXplPVQuc2l6ZSx3fHwoZC5zaXplPVQuc2l6ZSxpLm5lc3RlZFByb3BlcnR5KGNbMF0sditcIi5zaXplXCIpLnNldChULnNpemUpKSxiKFwic3RhcnRcIixfLFQpLGIoXCJlbmRcIixfLFQpfXA9ZS5fcG9zMCxkZWxldGUgZS5fcG9zMDt2YXIgTT1lLl9pbnB1dFt2XXx8e30sUz1pLmV4dGVuZEZsYXQoe30sXyksRT1fLnN0YXJ0LEM9ci5yMmwoTS5zdGFydCksTD12b2lkIDAhPT1DO2lmKChfLnN0YXJ0Rm91bmR8fEwpJiZDIT09ci5yMmwoRSkpe3ZhciB6PUw/QzppLmFnZ051bXMoTWF0aC5taW4sbnVsbCxwKSxPPXt0eXBlOlwiY2F0ZWdvcnlcIj09PXIudHlwZXx8XCJtdWx0aWNhdGVnb3J5XCI9PT1yLnR5cGU/XCJsaW5lYXJcIjpyLnR5cGUscjJsOnIucjJsLGR0aWNrOl8uc2l6ZSx0aWNrMDpFLGNhbGVuZGFyOmYscmFuZ2U6W3osYS50aWNrSW5jcmVtZW50KHosXy5zaXplLCExLGYpXS5tYXAoci5sMnIpfSxJPWEudGlja0ZpcnN0KE8pO0k+ci5yMmwoeikmJihJPWEudGlja0luY3JlbWVudChJLF8uc2l6ZSwhMCxmKSksUy5zdGFydD1yLmwycihJKSxMfHxpLm5lc3RlZFByb3BlcnR5KGUsditcIi5zdGFydFwiKS5zZXQoUy5zdGFydCl9dmFyIEQ9Xy5lbmQsUD1yLnIybChNLmVuZCksUj12b2lkIDAhPT1QO2lmKChfLmVuZEZvdW5kfHxSKSYmUCE9PXIucjJsKEQpKXt2YXIgRj1SP1A6aS5hZ2dOdW1zKE1hdGgubWF4LG51bGwscCk7Uy5lbmQ9ci5sMnIoRiksUnx8aS5uZXN0ZWRQcm9wZXJ0eShlLHYrXCIuc3RhcnRcIikuc2V0KFMuZW5kKX12YXIgQj1cImF1dG9iaW5cIitvO3JldHVybiExPT09ZS5faW5wdXRbQl0mJihlLl9pbnB1dFt2XT1pLmV4dGVuZEZsYXQoe30sZVt2XXx8e30pLGRlbGV0ZSBlLl9pbnB1dFtCXSxkZWxldGUgZVtCXSksW1MscF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoITA9PT1lLnZpc2libGUpe3ZhciByLGYscCxkLGc9W10sdj1bXSxtPWEuZ2V0RnJvbUlkKHQsXCJoXCI9PT1lLm9yaWVudGF0aW9uP2UueWF4aXN8fFwieVwiOmUueGF4aXN8fFwieFwiKSx5PVwiaFwiPT09ZS5vcmllbnRhdGlvbj9cInlcIjpcInhcIix4PXt4OlwieVwiLHk6XCJ4XCJ9W3ldLGI9ZVt5K1wiY2FsZW5kYXJcIl0sXz1lLmN1bXVsYXRpdmUsdz1oKHQsZSxtLHkpLGs9d1swXSxBPXdbMV0sVD1cInN0cmluZ1wiPT10eXBlb2Ygay5zaXplLE09W10sUz1UP006ayxFPVtdLEM9W10sTD1bXSx6PTAsTz1lLmhpc3Rub3JtLEk9ZS5oaXN0ZnVuYyxEPS0xIT09Ty5pbmRleE9mKFwiZGVuc2l0eVwiKTtfLmVuYWJsZWQmJkQmJihPPU8ucmVwbGFjZSgvID9kZW5zaXR5JC8sXCJcIiksRD0hMSk7dmFyIFAsUj1cIm1heFwiPT09SXx8XCJtaW5cIj09PUk/bnVsbDowLEY9cy5jb3VudCxCPWxbT10sTj0hMSxqPWZ1bmN0aW9uKHQpe3JldHVybiBtLnIyYyh0LDAsYil9O2ZvcihpLmlzQXJyYXlPclR5cGVkQXJyYXkoZVt4XSkmJlwiY291bnRcIiE9PUkmJihQPWVbeF0sTj1cImF2Z1wiPT09SSxGPXNbSV0pLHI9aihrLnN0YXJ0KSxwPWooay5lbmQpKyhyLWEudGlja0luY3JlbWVudChyLGsuc2l6ZSwhMSxiKSkvMWU2O3I8cCYmZy5sZW5ndGg8MWU2JiYoZj1hLnRpY2tJbmNyZW1lbnQocixrLnNpemUsITEsYiksZy5wdXNoKChyK2YpLzIpLHYucHVzaChSKSxMLnB1c2goW10pLE0ucHVzaChyKSxEJiZFLnB1c2goMS8oZi1yKSksTiYmQy5wdXNoKDApLCEoZjw9cikpOylyPWY7TS5wdXNoKHIpLFR8fFwiZGF0ZVwiIT09bS50eXBlfHwoUz17c3RhcnQ6aihTLnN0YXJ0KSxlbmQ6aihTLmVuZCksc2l6ZTpTLnNpemV9KTt2YXIgVixVPXYubGVuZ3RoLHE9ITAsSD0xLzAsRz0xLzAsWT17fTtmb3Iocj0wO3I8QS5sZW5ndGg7cisrKXt2YXIgVz1BW3JdOyhkPWkuZmluZEJpbihXLFMpKT49MCYmZDxVJiYoeis9RihkLHIsdixQLEMpLHEmJkxbZF0ubGVuZ3RoJiZXIT09QVtMW2RdWzBdXSYmKHE9ITEpLExbZF0ucHVzaChyKSxZW3JdPWQsSD1NYXRoLm1pbihILFctTVtkXSksRz1NYXRoLm1pbihHLE1bZCsxXS1XKSl9cXx8KFY9dShILEcsTSxtLGIpKSxOJiYoej1jKHYsQykpLEImJkIodix6LEUpLF8uZW5hYmxlZCYmZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYTtmdW5jdGlvbiBvKGUpe2E9dFtlXSx0W2VdLz0yfWZ1bmN0aW9uIHMoZSl7aT10W2VdLHRbZV09YStpLzIsYSs9aX1pZihcImhhbGZcIj09PXIpaWYoXCJpbmNyZWFzaW5nXCI9PT1lKWZvcihvKDApLG49MTtuPHQubGVuZ3RoO24rKylzKG4pO2Vsc2UgZm9yKG8odC5sZW5ndGgtMSksbj10Lmxlbmd0aC0yO24+PTA7bi0tKXMobik7ZWxzZSBpZihcImluY3JlYXNpbmdcIj09PWUpe2ZvcihuPTE7bjx0Lmxlbmd0aDtuKyspdFtuXSs9dFtuLTFdO1wiZXhjbHVkZVwiPT09ciYmKHQudW5zaGlmdCgwKSx0LnBvcCgpKX1lbHNle2ZvcihuPXQubGVuZ3RoLTI7bj49MDtuLS0pdFtuXSs9dFtuKzFdO1wiZXhjbHVkZVwiPT09ciYmKHQucHVzaCgwKSx0LnNoaWZ0KCkpfX0odixfLmRpcmVjdGlvbixfLmN1cnJlbnRiaW4pO3ZhciBYPU1hdGgubWluKGcubGVuZ3RoLHYubGVuZ3RoKSxaPVtdLCQ9MCxKPVgtMTtmb3Iocj0wO3I8WDtyKyspaWYodltyXSl7JD1yO2JyZWFrfWZvcihyPVgtMTtyPj0kO3ItLSlpZih2W3JdKXtKPXI7YnJlYWt9Zm9yKHI9JDtyPD1KO3IrKylpZihuKGdbcl0pJiZuKHZbcl0pKXt2YXIgSz17cDpnW3JdLHM6dltyXSxiOjB9O18uZW5hYmxlZHx8KEsucHRzPUxbcl0scT9LLnBoMD1LLnBoMT1MW3JdLmxlbmd0aD9BW0xbcl1bMF1dOmdbcl06KEsucGgwPVYoTVtyXSksSy5waDE9VihNW3IrMV0sITApKSksWi5wdXNoKEspfXJldHVybiAxPT09Wi5sZW5ndGgmJihaWzBdLndpZHRoMT1hLnRpY2tJbmNyZW1lbnQoWlswXS5wLGsuc2l6ZSwhMSxiKS1aWzBdLnApLG8oWixlKSxpLmlzQXJyYXlPclR5cGVkQXJyYXkoZS5zZWxlY3RlZHBvaW50cykmJmkudGFnU2VsZWN0ZWQoWixlLFkpLFp9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9iYXIvYXJyYXlzX3RvX2NhbGNkYXRhXCI6ODM4LFwiLi9hdmVyYWdlXCI6OTY3LFwiLi9iaW5fZnVuY3Rpb25zXCI6OTY5LFwiLi9iaW5fbGFiZWxfdmFsc1wiOjk3MCxcIi4vbm9ybV9mdW5jdGlvbnNcIjo5NzgsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDk3MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17ZXZlbnREYXRhS2V5czpbXCJiaW5OdW1iZXJcIl19fSx7fV0sOTczOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPW4ubmVzdGVkUHJvcGVydHksYT10KFwiLi4vYmFyL2RlZmF1bHRzXCIpLmhhbmRsZUdyb3VwaW5nRGVmYXVsdHMsbz10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCIpLmdldEF4aXNHcm91cCxzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbD17eDpbe2FTdHI6XCJ4Ymlucy5zdGFydFwiLG5hbWU6XCJzdGFydFwifSx7YVN0cjpcInhiaW5zLmVuZFwiLG5hbWU6XCJlbmRcIn0se2FTdHI6XCJ4Ymlucy5zaXplXCIsbmFtZTpcInNpemVcIn0se2FTdHI6XCJuYmluc3hcIixuYW1lOlwibmJpbnNcIn1dLHk6W3thU3RyOlwieWJpbnMuc3RhcnRcIixuYW1lOlwic3RhcnRcIn0se2FTdHI6XCJ5Ymlucy5lbmRcIixuYW1lOlwiZW5kXCJ9LHthU3RyOlwieWJpbnMuc2l6ZVwiLG5hbWU6XCJzaXplXCJ9LHthU3RyOlwibmJpbnN5XCIsbmFtZTpcIm5iaW5zXCJ9XX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYyx1LGgsZixwLGQsZz1lLl9oaXN0b2dyYW1CaW5PcHRzPXt9LHY9XCJvdmVybGF5XCI9PT1lLmJhcm1vZGU7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gbi5jb2VyY2UodS5faW5wdXQsdSxzLHQpfWZvcihyPTA7cjx0Lmxlbmd0aDtyKyspXCJoaXN0b2dyYW1cIj09PSh1PXRbcl0pLnR5cGUmJihkZWxldGUgdS5fYXV0b0JpbkZpbmlzaGVkLGY9XCJ2XCI9PT11Lm9yaWVudGF0aW9uP1wieFwiOlwieVwiLChkPWdbcD11Ll9ncm91cE5hbWU9dj91LnVpZDpvKGUsdS54YXhpcykrbyhlLHUueWF4aXMpK2ZdKT9kLnRyYWNlcy5wdXNoKHUpOmQ9Z1twXT17dHJhY2VzOlt1XSxkaXJlY3Rpb246Zn0sYSh1Ll9pbnB1dCx1LGUsbSkpO2ZvcihwIGluIGcpe2Y9KGQ9Z1twXSkuZGlyZWN0aW9uO3ZhciB5PWxbZl07Zm9yKGM9MDtjPHkubGVuZ3RoO2MrKyl7dmFyIHg9eVtjXSxiPXgubmFtZTtpZihcIm5iaW5zXCIhPT1ifHwhZC5zaXplRm91bmQpe3ZhciBfPXguYVN0cjtmb3Iocj0wO3I8ZC50cmFjZXMubGVuZ3RoO3IrKyl7aWYoaD0odT1kLnRyYWNlc1tyXSkuX2lucHV0LHZvaWQgMCE9PWkoaCxfKS5nZXQoKSl7ZFtiXT1tKF8pLGRbYitcIkZvdW5kXCJdPSEwO2JyZWFrfXZhciB3PXUuX2F1dG9CaW47dyYmd1tiXSYmaSh1LF8pLnNldCh3W2JdKX1pZihcInN0YXJ0XCI9PT1ifHxcImVuZFwiPT09Yilmb3IoO3I8ZC50cmFjZXMubGVuZ3RoO3IrKyltKF8sKCh1PWQudHJhY2VzW3JdKS5fYXV0b0Jpbnx8e30pW2JdKTtcIm5iaW5zXCIhPT1ifHxkLnNpemVGb3VuZHx8ZC5uYmluc0ZvdW5kfHwodT1kLnRyYWNlc1swXSxkW2JdPW0oXykpfX19fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCI6NzUyLFwiLi4vYmFyL2RlZmF1bHRzXCI6ODQzLFwiLi9hdHRyaWJ1dGVzXCI6OTY2fV0sOTc0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLG89dChcIi4uL2Jhci9zdHlsZV9kZWZhdWx0c1wiKSxzPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLHMscixuKX12YXIgdT1jKFwieFwiKSxoPWMoXCJ5XCIpO2MoXCJjdW11bGF0aXZlLmVuYWJsZWRcIikmJihjKFwiY3VtdWxhdGl2ZS5kaXJlY3Rpb25cIiksYyhcImN1bXVsYXRpdmUuY3VycmVudGJpblwiKSksYyhcInRleHRcIiksYyhcImhvdmVydGV4dFwiKSxjKFwiaG92ZXJ0ZW1wbGF0ZVwiKTt2YXIgZj1jKFwib3JpZW50YXRpb25cIixoJiYhdT9cImhcIjpcInZcIikscD1cInZcIj09PWY/XCJ4XCI6XCJ5XCIsZD1cInZcIj09PWY/XCJ5XCI6XCJ4XCIsZz11JiZoP01hdGgubWluKGkubWluUm93TGVuZ3RoKHUpJiZpLm1pblJvd0xlbmd0aChoKSk6aS5taW5Sb3dMZW5ndGgoZVtwXXx8W10pO2lmKGcpe2UuX2xlbmd0aD1nLG4uZ2V0Q29tcG9uZW50TWV0aG9kKFwiY2FsZW5kYXJzXCIsXCJoYW5kbGVUcmFjZURlZmF1bHRzXCIpKHQsZSxbXCJ4XCIsXCJ5XCJdLGwpLGVbZF0mJmMoXCJoaXN0ZnVuY1wiKSxjKFwiaGlzdG5vcm1cIiksYyhcImF1dG9iaW5cIitwKSxvKHQsZSxjLHIsbCksaS5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsYyk7dmFyIHY9KGUubWFya2VyLmxpbmV8fHt9KS5jb2xvcixtPW4uZ2V0Q29tcG9uZW50TWV0aG9kKFwiZXJyb3JiYXJzXCIsXCJzdXBwbHlEZWZhdWx0c1wiKTttKHQsZSx2fHxhLmRlZmF1bHRMaW5lLHtheGlzOlwieVwifSksbSh0LGUsdnx8YS5kZWZhdWx0TGluZSx7YXhpczpcInhcIixpbmhlcml0OlwieVwifSl9ZWxzZSBlLnZpc2libGU9ITF9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9iYXIvc3R5bGVfZGVmYXVsdHNcIjo4NTMsXCIuL2F0dHJpYnV0ZXNcIjo5NjZ9XSw5NzU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXtpZih0Lng9XCJ4VmFsXCJpbiBlP2UueFZhbDplLngsdC55PVwieVZhbFwiaW4gZT9lLnlWYWw6ZS55LFwiekxhYmVsVmFsXCJpbiBlJiYodC56PWUuekxhYmVsVmFsKSxlLnhhJiYodC54YXhpcz1lLnhhKSxlLnlhJiYodC55YXhpcz1lLnlhKSwhKHIuY3VtdWxhdGl2ZXx8e30pLmVuYWJsZWQpe3ZhciBhLG89QXJyYXkuaXNBcnJheShpKT9uWzBdLnB0c1tpWzBdXVtpWzFdXTpuW2ldLnB0cztpZih0LnBvaW50TnVtYmVycz1vLHQuYmluTnVtYmVyPXQucG9pbnROdW1iZXIsZGVsZXRlIHQucG9pbnROdW1iZXIsZGVsZXRlIHQucG9pbnRJbmRleCxyLl9pbmRleFRvUG9pbnRzKXthPVtdO2Zvcih2YXIgcz0wO3M8by5sZW5ndGg7cysrKWE9YS5jb25jYXQoci5faW5kZXhUb1BvaW50c1tvW3NdXSl9ZWxzZSBhPW87dC5wb2ludEluZGljZXM9YX1yZXR1cm4gdH19LHt9XSw5NzY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vYmFyL2hvdmVyXCIpLmhvdmVyUG9pbnRzLGk9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLmhvdmVyTGFiZWxUZXh0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1uKHQsZSxyLGEpO2lmKG8pe3ZhciBzPSh0PW9bMF0pLmNkW3QuaW5kZXhdLGw9dC5jZFswXS50cmFjZTtpZighbC5jdW11bGF0aXZlLmVuYWJsZWQpe3ZhciBjPVwiaFwiPT09bC5vcmllbnRhdGlvbj9cInlcIjpcInhcIjt0W2MrXCJMYWJlbFwiXT1pKHRbYytcImFcIl0scy5waDAscy5waDEpfXJldHVybiBsLmhvdmVybXBsYXRlJiYodC5ob3ZlcnRlbXBsYXRlPWwuaG92ZXJ0ZW1wbGF0ZSksb319fSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL2Jhci9ob3ZlclwiOjg0NX1dLDk3NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4ubGF5b3V0QXR0cmlidXRlcz10KFwiLi4vYmFyL2xheW91dF9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIiksbi5jcm9zc1RyYWNlRGVmYXVsdHM9dChcIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHNcIiksbi5zdXBwbHlMYXlvdXREZWZhdWx0cz10KFwiLi4vYmFyL2xheW91dF9kZWZhdWx0c1wiKSxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLmNyb3NzVHJhY2VDYWxjPXQoXCIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsY1wiKS5jcm9zc1RyYWNlQ2FsYyxuLnBsb3Q9dChcIi4uL2Jhci9wbG90XCIpLG4ubGF5ZXJOYW1lPVwiYmFybGF5ZXJcIixuLnN0eWxlPXQoXCIuLi9iYXIvc3R5bGVcIikuc3R5bGUsbi5zdHlsZU9uU2VsZWN0PXQoXCIuLi9iYXIvc3R5bGVcIikuc3R5bGVPblNlbGVjdCxuLmNvbG9yYmFyPXQoXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiKSxuLmhvdmVyUG9pbnRzPXQoXCIuL2hvdmVyXCIpLG4uc2VsZWN0UG9pbnRzPXQoXCIuLi9iYXIvc2VsZWN0XCIpLG4uZXZlbnREYXRhPXQoXCIuL2V2ZW50X2RhdGFcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJoaXN0b2dyYW1cIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIiksbi5jYXRlZ29yaWVzPVtcImNhcnRlc2lhblwiLFwic3ZnXCIsXCJiYXJcIixcImhpc3RvZ3JhbVwiLFwib3JpZW50ZWRcIixcImVycm9yQmFyc09LXCIsXCJzaG93TGVnZW5kXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGNcIjo4NDIsXCIuLi9iYXIvbGF5b3V0X2F0dHJpYnV0ZXNcIjo4NDcsXCIuLi9iYXIvbGF5b3V0X2RlZmF1bHRzXCI6ODQ4LFwiLi4vYmFyL3Bsb3RcIjo4NDksXCIuLi9iYXIvc2VsZWN0XCI6ODUwLFwiLi4vYmFyL3N0eWxlXCI6ODUyLFwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXJcIjoxMDcwLFwiLi9hdHRyaWJ1dGVzXCI6OTY2LFwiLi9jYWxjXCI6OTcxLFwiLi9jcm9zc190cmFjZV9kZWZhdWx0c1wiOjk3MyxcIi4vZGVmYXVsdHNcIjo5NzQsXCIuL2V2ZW50X2RhdGFcIjo5NzUsXCIuL2hvdmVyXCI6OTc2fV0sOTc4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtwZXJjZW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49MTAwL2UsaT0wO2k8cjtpKyspdFtpXSo9bn0scHJvYmFiaWxpdHk6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj0wO248cjtuKyspdFtuXS89ZX0sZGVuc2l0eTpmdW5jdGlvbih0LGUscixuKXt2YXIgaT10Lmxlbmd0aDtuPW58fDE7Zm9yKHZhciBhPTA7YTxpO2ErKyl0W2FdKj1yW2FdKm59LFwicHJvYmFiaWxpdHkgZGVuc2l0eVwiOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQubGVuZ3RoO24mJihlLz1uKTtmb3IodmFyIGE9MDthPGk7YSsrKXRbYV0qPXJbYV0vZX19fSx7fV0sOTc5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2hpc3RvZ3JhbS9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uL2hpc3RvZ3JhbS9iaW5fYXR0cmlidXRlc1wiKSxhPXQoXCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIiksbD10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCIpLGM9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9Yyh7eDpuLngseTpuLnksejp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sbWFya2VyOntjb2xvcjp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LGhpc3Rub3JtOm4uaGlzdG5vcm0saGlzdGZ1bmM6bi5oaXN0ZnVuYyxuYmluc3g6bi5uYmluc3gseGJpbnM6aShcInhcIiksbmJpbnN5Om4ubmJpbnN5LHliaW5zOmkoXCJ5XCIpLGF1dG9iaW54Om4uYXV0b2JpbngsYXV0b2Jpbnk6bi5hdXRvYmlueSx4Z2FwOmEueGdhcCx5Z2FwOmEueWdhcCx6c21vb3RoOmEuenNtb290aCx6aG92ZXJmb3JtYXQ6YS56aG92ZXJmb3JtYXQsaG92ZXJ0ZW1wbGF0ZTpvKHt9LHtrZXlzOlwielwifSl9LHMoXCJcIix7Y0xldHRlcjpcInpcIixhdXRvQ29sb3JEZmx0OiExfSkse2NvbG9yYmFyOmx9KX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCI6NTc5LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIjo1ODUsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXNcIjo5NDgsXCIuLi9oaXN0b2dyYW0vYXR0cmlidXRlc1wiOjk2NixcIi4uL2hpc3RvZ3JhbS9iaW5fYXR0cmlidXRlc1wiOjk2OH1dLDk4MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksYT10KFwiLi4vaGlzdG9ncmFtL2Jpbl9mdW5jdGlvbnNcIiksbz10KFwiLi4vaGlzdG9ncmFtL25vcm1fZnVuY3Rpb25zXCIpLHM9dChcIi4uL2hpc3RvZ3JhbS9hdmVyYWdlXCIpLGw9dChcIi4uL2hpc3RvZ3JhbS9iaW5fbGFiZWxfdmFsc1wiKTtmdW5jdGlvbiBjKHQsZSxyLGEsbyxzLGwpe3ZhciBjPWUrXCJiaW5zXCIsdT10W2NdO3V8fCh1PXRbY109e30pO3ZhciBoPXQuX2lucHV0W2NdfHx7fSxmPXQuX2F1dG9CaW49e307aC5zaXplfHxkZWxldGUgdS5zaXplLHZvaWQgMD09PWguc3RhcnQmJmRlbGV0ZSB1LnN0YXJ0LHZvaWQgMD09PWguZW5kJiZkZWxldGUgdS5lbmQ7dmFyIHA9IXUuc2l6ZSxkPXZvaWQgMD09PXUuc3RhcnQsZz12b2lkIDA9PT11LmVuZDtpZihwfHxkfHxnKXt2YXIgdj1pLmF1dG9CaW4ocixhLHRbXCJuYmluc1wiK2VdLFwiMmRcIixsLHUuc2l6ZSk7XCJoaXN0b2dyYW0yZGNvbnRvdXJcIj09PXQudHlwZSYmKGQmJih2LnN0YXJ0PXMoaS50aWNrSW5jcmVtZW50KG8odi5zdGFydCksdi5zaXplLCEwLGwpKSksZyYmKHYuZW5kPXMoaS50aWNrSW5jcmVtZW50KG8odi5lbmQpLHYuc2l6ZSwhMSxsKSkpKSxwJiYodS5zaXplPWYuc2l6ZT12LnNpemUpLGQmJih1LnN0YXJ0PWYuc3RhcnQ9di5zdGFydCksZyYmKHUuZW5kPWYuZW5kPXYuZW5kKX12YXIgbT1cImF1dG9iaW5cIitlOyExPT09dC5faW5wdXRbbV0mJih0Ll9pbnB1dFtjXT1uLmV4dGVuZEZsYXQoe30sdSksZGVsZXRlIHQuX2lucHV0W21dLGRlbGV0ZSB0W21dKX1mdW5jdGlvbiB1KHQsZSxyLG4pe3ZhciBpLGE9bmV3IEFycmF5KHQpO2lmKG4pZm9yKGk9MDtpPHQ7aSsrKWFbaV09MS8oZVtpKzFdLWVbaV0pO2Vsc2V7dmFyIG89MS9yO2ZvcihpPTA7aTx0O2krKylhW2ldPW99cmV0dXJuIGF9ZnVuY3Rpb24gaCh0LGUpe3JldHVybntzdGFydDp0KGUuc3RhcnQpLGVuZDp0KGUuZW5kKSxzaXplOmUuc2l6ZX19ZnVuY3Rpb24gZih0LGUscixuLGksYSl7dmFyIG8scz10Lmxlbmd0aC0xLGM9bmV3IEFycmF5KHMpO2lmKGUpZm9yKG89MDtvPHM7bysrKWNbb109W2Vbb10sZVtvXV07ZWxzZXt2YXIgdT1sKHIsbix0LGksYSk7Zm9yKG89MDtvPHM7bysrKWNbb109W3UodFtvXSksdSh0W28rMV0sITApXX1yZXR1cm4gY31lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixsLHAsZCxnPWkuZ2V0RnJvbUlkKHQsZS54YXhpc3x8XCJ4XCIpLHY9ZS54P2cubWFrZUNhbGNkYXRhKGUsXCJ4XCIpOltdLG09aS5nZXRGcm9tSWQodCxlLnlheGlzfHxcInlcIikseT1lLnk/bS5tYWtlQ2FsY2RhdGEoZSxcInlcIik6W10seD1lLnhjYWxlbmRhcixiPWUueWNhbGVuZGFyLF89ZnVuY3Rpb24odCl7cmV0dXJuIGcucjJjKHQsMCx4KX0sdz1mdW5jdGlvbih0KXtyZXR1cm4gbS5yMmModCwwLGIpfSxrPWZ1bmN0aW9uKHQpe3JldHVybiBnLmMycih0LDAseCl9LEE9ZnVuY3Rpb24odCl7cmV0dXJuIG0uYzJyKHQsMCxiKX0sVD1lLl9sZW5ndGg7di5sZW5ndGg+VCYmdi5zcGxpY2UoVCx2Lmxlbmd0aC1UKSx5Lmxlbmd0aD5UJiZ5LnNwbGljZShULHkubGVuZ3RoLVQpLGMoZSxcInhcIix2LGcsXyxrLHgpLGMoZSxcInlcIix5LG0sdyxBLGIpO3ZhciBNPVtdLFM9W10sRT1bXSxDPVwic3RyaW5nXCI9PXR5cGVvZiBlLnhiaW5zLnNpemUsTD1cInN0cmluZ1wiPT10eXBlb2YgZS55Ymlucy5zaXplLHo9W10sTz1bXSxJPUM/ejplLnhiaW5zLEQ9TD9POmUueWJpbnMsUD0wLFI9W10sRj1bXSxCPWUuaGlzdG5vcm0sTj1lLmhpc3RmdW5jLGo9LTEhPT1CLmluZGV4T2YoXCJkZW5zaXR5XCIpLFY9XCJtYXhcIj09PU58fFwibWluXCI9PT1OP251bGw6MCxVPWEuY291bnQscT1vW0JdLEg9ITEsRz1bXSxZPVtdLFc9XCJ6XCJpbiBlP2UuejpcIm1hcmtlclwiaW4gZSYmQXJyYXkuaXNBcnJheShlLm1hcmtlci5jb2xvcik/ZS5tYXJrZXIuY29sb3I6XCJcIjtXJiZcImNvdW50XCIhPT1OJiYoSD1cImF2Z1wiPT09TixVPWFbTl0pO3ZhciBYPWUueGJpbnMsWj1fKFguc3RhcnQpLCQ9XyhYLmVuZCkrKFotaS50aWNrSW5jcmVtZW50KFosWC5zaXplLCExLHgpKS8xZTY7Zm9yKHI9WjtyPCQ7cj1pLnRpY2tJbmNyZW1lbnQocixYLnNpemUsITEseCkpUy5wdXNoKFYpLHoucHVzaChyKSxIJiZFLnB1c2goMCk7ei5wdXNoKHIpO3ZhciBKPVMubGVuZ3RoLEs9XyhlLnhiaW5zLnN0YXJ0KSxRPShyLUspL0osdHQ9ayhLK1EvMik7Zm9yKFo9dygoWD1lLnliaW5zKS5zdGFydCksJD13KFguZW5kKSsoWi1pLnRpY2tJbmNyZW1lbnQoWixYLnNpemUsITEsYikpLzFlNixyPVo7cjwkO3I9aS50aWNrSW5jcmVtZW50KHIsWC5zaXplLCExLGIpKXtNLnB1c2goUy5zbGljZSgpKSxPLnB1c2gocik7dmFyIGV0PW5ldyBBcnJheShKKTtmb3IobD0wO2w8SjtsKyspZXRbbF09W107Ri5wdXNoKGV0KSxIJiZSLnB1c2goRS5zbGljZSgpKX1PLnB1c2gocik7dmFyIHJ0PU0ubGVuZ3RoLG50PXcoZS55Ymlucy5zdGFydCksaXQ9KHItbnQpL3J0LGF0PUEobnQraXQvMik7aiYmKEc9dShTLmxlbmd0aCxJLFEsQyksWT11KE0ubGVuZ3RoLEQsaXQsTCkpLEN8fFwiZGF0ZVwiIT09Zy50eXBlfHwoST1oKF8sSSkpLEx8fFwiZGF0ZVwiIT09bS50eXBlfHwoRD1oKHcsRCkpO3ZhciBvdD0hMCxzdD0hMCxsdD1uZXcgQXJyYXkoSiksY3Q9bmV3IEFycmF5KHJ0KSx1dD0xLzAsaHQ9MS8wLGZ0PTEvMCxwdD0xLzA7Zm9yKHI9MDtyPFQ7cisrKXt2YXIgZHQ9dltyXSxndD15W3JdO3A9bi5maW5kQmluKGR0LEkpLGQ9bi5maW5kQmluKGd0LEQpLHA+PTAmJnA8SiYmZD49MCYmZDxydCYmKFArPVUocCxyLE1bZF0sVyxSW2RdKSxGW2RdW3BdLnB1c2gociksb3QmJih2b2lkIDA9PT1sdFtwXT9sdFtwXT1kdDpsdFtwXSE9PWR0JiYob3Q9ITEpKSxzdCYmKHZvaWQgMD09PWN0W3BdP2N0W3BdPWd0OmN0W3BdIT09Z3QmJihzdD0hMSkpLHV0PU1hdGgubWluKHV0LGR0LXpbcF0pLGh0PU1hdGgubWluKGh0LHpbcCsxXS1kdCksZnQ9TWF0aC5taW4oZnQsZ3QtT1tkXSkscHQ9TWF0aC5taW4ocHQsT1tkKzFdLWd0KSl9aWYoSClmb3IoZD0wO2Q8cnQ7ZCsrKVArPXMoTVtkXSxSW2RdKTtpZihxKWZvcihkPTA7ZDxydDtkKyspcShNW2RdLFAsRyxZW2RdKTtyZXR1cm57eDp2LHhSYW5nZXM6Zih6LG90JiZsdCx1dCxodCxnLHgpLHgwOnR0LGR4OlEseTp5LHlSYW5nZXM6ZihPLHN0JiZjdCxmdCxwdCxtLGIpLHkwOmF0LGR5Oml0LHo6TSxwdHM6Rn19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL2hpc3RvZ3JhbS9hdmVyYWdlXCI6OTY3LFwiLi4vaGlzdG9ncmFtL2Jpbl9mdW5jdGlvbnNcIjo5NjksXCIuLi9oaXN0b2dyYW0vYmluX2xhYmVsX3ZhbHNcIjo5NzAsXCIuLi9oaXN0b2dyYW0vbm9ybV9mdW5jdGlvbnNcIjo5Nzh9XSw5ODE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKS5CQUROVU0sYT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCIpLG89dChcIi4uLy4uL2xpYlwiKSxzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbD1bXCJ4XCIsXCJ5XCJdO2Z1bmN0aW9uIGModCxlLHIscyl7dmFyIGw9clthLmlkMm5hbWUodFtlK1wiYXhpc1wiXSldLnR5cGUsYz1lK1wiYmluc1wiLHU9dFtjXSxoPXRbZStcImNhbGVuZGFyXCJdO3V8fCh1PXRbY109e30pO3ZhciBmPVwiZGF0ZVwiPT09bD9mdW5jdGlvbih0LGUpe3JldHVybiB0fHwwPT09dD9vLmNsZWFuRGF0ZSh0LGksaCk6ZX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0KT9OdW1iZXIodCk6ZX07dS5zdGFydD1mKHUuc3RhcnQscy5zdGFydCksdS5lbmQ9Zih1LmVuZCxzLmVuZCk7dmFyIHA9cy5zaXplLGQ9dS5zaXplO2lmKG4oZCkpdS5zaXplPWQ+MD9OdW1iZXIoZCk6cDtlbHNlIGlmKFwic3RyaW5nXCIhPXR5cGVvZiBkKXUuc2l6ZT1wO2Vsc2V7dmFyIGc9ZC5jaGFyQXQoMCksdj1kLnN1YnN0cigxKTsoKHY9bih2KT9OdW1iZXIodik6MCk8PTB8fFwiZGF0ZVwiIT09bHx8XCJNXCIhPT1nfHx2IT09TWF0aC5yb3VuZCh2KSkmJih1LnNpemU9cCl9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhO2Z1bmN0aW9uIHUodCl7cmV0dXJuIG8uY29lcmNlKGkuX2lucHV0LGkscyx0KX1mb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgaD0oaT10W3JdKS50eXBlO2lmKFwiaGlzdG9ncmFtMmRcIj09PWh8fFwiaGlzdG9ncmFtMmRjb250b3VyXCI9PT1oKWZvcihuPTA7bjxsLmxlbmd0aDtuKyspe3ZhciBmPShhPWxbbl0pK1wiYmluc1wiLHA9KGkuX2F1dG9CaW58fHt9KVthXXx8e307dShmK1wiLnN0YXJ0XCIscC5zdGFydCksdShmK1wiLmVuZFwiLHAuZW5kKSx1KGYrXCIuc2l6ZVwiLHAuc2l6ZSksYyhpLGEsZSxwKSwoaVtmXXx8e30pLnNpemV8fHUoXCJuYmluc1wiK2EpfX19fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCI6NzUyLFwiLi9hdHRyaWJ1dGVzXCI6OTc5LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw5ODI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vc2FtcGxlX2RlZmF1bHRzXCIpLGE9dChcIi4uL2hlYXRtYXAvc3R5bGVfZGVmYXVsdHNcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCIpLHM9dChcIi4vYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7ZnVuY3Rpb24gYyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfWkodCxlLGMsbCksITEhPT1lLnZpc2libGUmJihhKHQsZSxjLGwpLG8odCxlLGwsYyx7cHJlZml4OlwiXCIsY0xldHRlcjpcInpcIn0pLGMoXCJob3ZlcnRlbXBsYXRlXCIpKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiOjU4OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2hlYXRtYXAvc3R5bGVfZGVmYXVsdHNcIjo5NjEsXCIuL2F0dHJpYnV0ZXNcIjo5NzksXCIuL3NhbXBsZV9kZWZhdWx0c1wiOjk4NX1dLDk4MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9oZWF0bWFwL2hvdmVyXCIpLGk9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLmhvdmVyTGFiZWxUZXh0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8scyl7dmFyIGw9bih0LGUscixhLG8scyk7aWYobCl7dmFyIGM9KHQ9bFswXSkuaW5kZXgsdT1jWzBdLGg9Y1sxXSxmPXQuY2RbMF0scD1mLnhSYW5nZXNbaF0sZD1mLnlSYW5nZXNbdV07cmV0dXJuIHQueExhYmVsPWkodC54YSxwWzBdLHBbMV0pLHQueUxhYmVsPWkodC55YSxkWzBdLGRbMV0pLGx9fX0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9oZWF0bWFwL2hvdmVyXCI6OTU1fV0sOTg0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNyb3NzVHJhY2VEZWZhdWx0cz10KFwiLi9jcm9zc190cmFjZV9kZWZhdWx0c1wiKSxuLmNhbGM9dChcIi4uL2hlYXRtYXAvY2FsY1wiKSxuLnBsb3Q9dChcIi4uL2hlYXRtYXAvcGxvdFwiKSxuLmxheWVyTmFtZT1cImhlYXRtYXBsYXllclwiLG4uY29sb3JiYXI9dChcIi4uL2hlYXRtYXAvY29sb3JiYXJcIiksbi5zdHlsZT10KFwiLi4vaGVhdG1hcC9zdHlsZVwiKSxuLmhvdmVyUG9pbnRzPXQoXCIuL2hvdmVyXCIpLG4uZXZlbnREYXRhPXQoXCIuLi9oaXN0b2dyYW0vZXZlbnRfZGF0YVwiKSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cImhpc3RvZ3JhbTJkXCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCIpLG4uY2F0ZWdvcmllcz1bXCJjYXJ0ZXNpYW5cIixcInN2Z1wiLFwiMmRNYXBcIixcImhpc3RvZ3JhbVwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiOjc2MCxcIi4uL2hlYXRtYXAvY2FsY1wiOjk0OSxcIi4uL2hlYXRtYXAvY29sb3JiYXJcIjo5NTEsXCIuLi9oZWF0bWFwL3Bsb3RcIjo5NTksXCIuLi9oZWF0bWFwL3N0eWxlXCI6OTYwLFwiLi4vaGlzdG9ncmFtL2V2ZW50X2RhdGFcIjo5NzUsXCIuL2F0dHJpYnV0ZXNcIjo5NzksXCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzXCI6OTgxLFwiLi9kZWZhdWx0c1wiOjk4MixcIi4vaG92ZXJcIjo5ODN9XSw5ODU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIiksaT10KFwiLi4vLi4vbGliXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1yKFwieFwiKSxzPXIoXCJ5XCIpLGw9aS5taW5Sb3dMZW5ndGgobyksYz1pLm1pblJvd0xlbmd0aChzKTtsJiZjPyhlLl9sZW5ndGg9TWF0aC5taW4obCxjKSxuLmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiaGFuZGxlVHJhY2VEZWZhdWx0c1wiKSh0LGUsW1wieFwiLFwieVwiXSxhKSwocihcInpcIil8fHIoXCJtYXJrZXIuY29sb3JcIikpJiZyKFwiaGlzdGZ1bmNcIikscihcImhpc3Rub3JtXCIpLHIoXCJhdXRvYmlueFwiKSxyKFwiYXV0b2JpbnlcIikpOmUudmlzaWJsZT0hMX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5fV0sOTg2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2hpc3RvZ3JhbTJkL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vY29udG91ci9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXMoe3g6bi54LHk6bi55LHo6bi56LG1hcmtlcjpuLm1hcmtlcixoaXN0bm9ybTpuLmhpc3Rub3JtLGhpc3RmdW5jOm4uaGlzdGZ1bmMsbmJpbnN4Om4ubmJpbnN4LHhiaW5zOm4ueGJpbnMsbmJpbnN5Om4ubmJpbnN5LHliaW5zOm4ueWJpbnMsYXV0b2Jpbng6bi5hdXRvYmlueCxhdXRvYmlueTpuLmF1dG9iaW55LGF1dG9jb250b3VyOmkuYXV0b2NvbnRvdXIsbmNvbnRvdXJzOmkubmNvbnRvdXJzLGNvbnRvdXJzOmkuY29udG91cnMsbGluZTppLmxpbmUsemhvdmVyZm9ybWF0Om4uemhvdmVyZm9ybWF0LGhvdmVydGVtcGxhdGU6bi5ob3ZlcnRlbXBsYXRlfSxhKFwiXCIse2NMZXR0ZXI6XCJ6XCIsZWRpdFR5cGVPdmVycmlkZTpcImNhbGNcIn0pLHtjb2xvcmJhcjpvfSl9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uL2NvbnRvdXIvYXR0cmlidXRlc1wiOjkxOSxcIi4uL2hpc3RvZ3JhbTJkL2F0dHJpYnV0ZXNcIjo5Nzl9XSw5ODc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uL2hpc3RvZ3JhbTJkL3NhbXBsZV9kZWZhdWx0c1wiKSxhPXQoXCIuLi9jb250b3VyL2NvbnRvdXJzX2RlZmF1bHRzXCIpLG89dChcIi4uL2NvbnRvdXIvc3R5bGVfZGVmYXVsdHNcIikscz10KFwiLi9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiBjKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9aSh0LGUsYyxsKSwhMSE9PWUudmlzaWJsZSYmKGEodCxlLGMsZnVuY3Rpb24ocil7cmV0dXJuIG4uY29lcmNlMih0LGUscyxyKX0pLG8odCxlLGMsbCksYyhcImhvdmVydGVtcGxhdGVcIikpfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vY29udG91ci9jb250b3Vyc19kZWZhdWx0c1wiOjkyNixcIi4uL2NvbnRvdXIvc3R5bGVfZGVmYXVsdHNcIjo5NDAsXCIuLi9oaXN0b2dyYW0yZC9zYW1wbGVfZGVmYXVsdHNcIjo5ODUsXCIuL2F0dHJpYnV0ZXNcIjo5ODZ9XSw5ODg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLG4uY3Jvc3NUcmFjZURlZmF1bHRzPXQoXCIuLi9oaXN0b2dyYW0yZC9jcm9zc190cmFjZV9kZWZhdWx0c1wiKSxuLmNhbGM9dChcIi4uL2NvbnRvdXIvY2FsY1wiKSxuLnBsb3Q9dChcIi4uL2NvbnRvdXIvcGxvdFwiKS5wbG90LG4ubGF5ZXJOYW1lPVwiY29udG91cmxheWVyXCIsbi5zdHlsZT10KFwiLi4vY29udG91ci9zdHlsZVwiKSxuLmNvbG9yYmFyPXQoXCIuLi9jb250b3VyL2NvbG9yYmFyXCIpLG4uaG92ZXJQb2ludHM9dChcIi4uL2NvbnRvdXIvaG92ZXJcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJoaXN0b2dyYW0yZGNvbnRvdXJcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIiksbi5jYXRlZ29yaWVzPVtcImNhcnRlc2lhblwiLFwic3ZnXCIsXCIyZE1hcFwiLFwiY29udG91clwiLFwiaGlzdG9ncmFtXCIsXCJzaG93TGVnZW5kXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi4vY29udG91ci9jYWxjXCI6OTIwLFwiLi4vY29udG91ci9jb2xvcmJhclwiOjkyMixcIi4uL2NvbnRvdXIvaG92ZXJcIjo5MzIsXCIuLi9jb250b3VyL3Bsb3RcIjo5MzcsXCIuLi9jb250b3VyL3N0eWxlXCI6OTM5LFwiLi4vaGlzdG9ncmFtMmQvY3Jvc3NfdHJhY2VfZGVmYXVsdHNcIjo5ODEsXCIuL2F0dHJpYnV0ZXNcIjo5ODYsXCIuL2RlZmF1bHRzXCI6OTg3fV0sOTg5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxvPXQoXCIuLi9tZXNoM2QvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCIpLGw9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxjPXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsO3ZhciB1PWUuZXhwb3J0cz1jKGwoe3g6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCJ9LHk6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCJ9LHo6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCJ9LHZhbHVlOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwifSxpc29taW46e3ZhbFR5cGU6XCJudW1iZXJcIn0saXNvbWF4Ont2YWxUeXBlOlwibnVtYmVyXCJ9LHN1cmZhY2U6e3Nob3c6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMH0sY291bnQ6e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsZGZsdDoyLG1pbjoxfSxmaWxsOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDoxfSxwYXR0ZXJuOnt2YWxUeXBlOlwiZmxhZ2xpc3RcIixmbGFnczpbXCJBXCIsXCJCXCIsXCJDXCIsXCJEXCIsXCJFXCJdLGV4dHJhczpbXCJhbGxcIixcIm9kZFwiLFwiZXZlblwiXSxkZmx0OlwiYWxsXCJ9fSxzcGFjZWZyYW1lOntzaG93Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LGZpbGw6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0Oi4xNX19LHNsaWNlczp7eDp7c2hvdzp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxsb2NhdGlvbnM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZGZsdDpbXX0sZmlsbDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MX19LHk6e3Nob3c6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sbG9jYXRpb25zOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGRmbHQ6W119LGZpbGw6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjF9fSx6OntzaG93Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LGxvY2F0aW9uczp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixkZmx0OltdfSxmaWxsOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDoxfX19LGNhcHM6e3g6e3Nob3c6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMH0sZmlsbDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MX19LHk6e3Nob3c6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMH0sZmlsbDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MX19LHo6e3Nob3c6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMH0sZmlsbDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MX19fSx0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGFycmF5T2s6ITB9LGhvdmVydGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixhcnJheU9rOiEwfSxob3ZlcnRlbXBsYXRlOmEoKX0sbihcIlwiLHtjb2xvckF0dHI6XCJgdmFsdWVgXCIsc2hvd1NjYWxlRGZsdDohMCxlZGl0VHlwZU92ZXJyaWRlOlwiY2FsY1wifSkse2NvbG9yYmFyOmksb3BhY2l0eTpvLm9wYWNpdHksbGlnaHRwb3NpdGlvbjpvLmxpZ2h0cG9zaXRpb24sbGlnaHRpbmc6by5saWdodGluZyxmbGF0c2hhZGluZzpvLmZsYXRzaGFkaW5nLGNvbnRvdXI6by5jb250b3VyLGhvdmVyaW5mbzpsKHt9LHMuaG92ZXJpbmZvKX0pLFwiY2FsY1wiLFwibmVzdGVkXCIpO3UuZmxhdHNoYWRpbmcuZGZsdD0hMCx1LmxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvbi5kZmx0PTAsdS54LmVkaXRUeXBlPXUueS5lZGl0VHlwZT11LnouZWRpdFR5cGU9dS52YWx1ZS5lZGl0VHlwZT1cImNhbGMrY2xlYXJBeGlzVHlwZXNcIix1LnRyYW5zZm9ybXM9dm9pZCAwfSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIjo1NzksXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi4vbWVzaDNkL2F0dHJpYnV0ZXNcIjo5OTR9XSw5OTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZS5fbGVuPU1hdGgubWluKGUueC5sZW5ndGgsZS55Lmxlbmd0aCxlLnoubGVuZ3RoLGUudmFsdWUubGVuZ3RoKTtmb3IodmFyIHI9MS8wLGk9LTEvMCxhPWUudmFsdWUubGVuZ3RoLG89MDtvPGE7bysrKXt2YXIgcz1lLnZhbHVlW29dO3I9TWF0aC5taW4ocixzKSxpPU1hdGgubWF4KGkscyl9ZS5fbWluVmFsdWVzPXIsZS5fbWF4VmFsdWVzPWksZS5fdk1pbj12b2lkIDA9PT1lLmlzb21pbnx8bnVsbD09PWUuaXNvbWluP3I6ZS5pc29taW4sZS5fdk1heD12b2lkIDA9PT1lLmlzb21heHx8bnVsbD09PWUuaXNvbWluP2k6ZS5pc29tYXgsbih0LGUse3ZhbHM6W2UuX3ZNaW4sZS5fdk1heF0sY29udGFpbmVyU3RyOlwiXCIsY0xldHRlcjpcImNcIn0pfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIjo1ODZ9XSw5OTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2wtbWVzaDNkXCIpLGk9dChcIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3JcIikucGFyc2VDb2xvclNjYWxlLGE9dChcIi4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIiksbz10KFwiLi4vLi4vcGxvdHMvZ2wzZC96aXAzXCIpLHM9dChcIi4uLy4uL2xpYlwiKTtmdW5jdGlvbiBsKHQpe3JldHVybiBzLmRpc3RpbmN0VmFscyh0KS52YWxzfXZhciBjPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUubGVuZ3RoLTE7cj4wO3ItLSl7dmFyIG49TWF0aC5taW4oZVtyXSxlW3ItMV0pLGk9TWF0aC5tYXgoZVtyXSxlW3ItMV0pO2lmKGk+biYmbjx0JiZ0PD1pKXJldHVybntpZDpyLGRpc3RSYXRpbzooaS10KS8oaS1uKX19cmV0dXJue2lkOjAsZGlzdFJhdGlvOjB9fTtmdW5jdGlvbiB1KHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLm1lc2g9ZSx0aGlzLm5hbWU9XCJcIix0aGlzLmRhdGE9bnVsbCx0aGlzLnNob3dDb250b3VyPSExfXZhciBoPXUucHJvdG90eXBlO2Z1bmN0aW9uIGYodCl7dC5faT1bXSx0Ll9qPVtdLHQuX2s9W107dmFyIGUscixuPXQuc3VyZmFjZS5zaG93LGk9dC5zcGFjZWZyYW1lLnNob3csYT10LnN1cmZhY2UuZmlsbCxvPXQuc3BhY2VmcmFtZS5maWxsLHM9ITEsdT0hMSxoPTAsZj1sKHQueC5zbGljZSgwLHQuX2xlbikpLHA9bCh0Lnkuc2xpY2UoMCx0Ll9sZW4pKSxkPWwodC56LnNsaWNlKDAsdC5fbGVuKSksZz1mLmxlbmd0aCx2PXAubGVuZ3RoLG09ZC5sZW5ndGg7ZnVuY3Rpb24geSh0LGUscil7cmV0dXJuIHIrbSplK20qdip0fXZhciB4LGIsXyx3LGssQT10Ll9taW5WYWx1ZXMsVD10Ll9tYXhWYWx1ZXMsTT10Ll92TWluLFM9dC5fdk1heDtmdW5jdGlvbiBFKHQsZSxuKXtmb3IodmFyIGk9dy5sZW5ndGgsYT1yO2E8aTthKyspaWYodD09PXhbYV0mJmU9PT1iW2FdJiZuPT09X1thXSlyZXR1cm4gYTtyZXR1cm4tMX1mdW5jdGlvbiBDKCl7cj1lfWZ1bmN0aW9uIEwoKXt4PVtdLGI9W10sXz1bXSx3PVtdLGU9MCxDKCl9ZnVuY3Rpb24geih0LHIsbixpKXtyZXR1cm4geC5wdXNoKHQpLGIucHVzaChyKSxfLnB1c2gobiksdy5wdXNoKGkpLCsrZS0xfWZ1bmN0aW9uIE8odCxlLHIpe2Zvcih2YXIgbj1bXSxpPTA7aTx0Lmxlbmd0aDtpKyspbltpXT10W2ldKigxLXIpK3IqZVtpXTtyZXR1cm4gbn1mdW5jdGlvbiBJKHQpe2s9dH1mdW5jdGlvbiBEKHQsZSl7cmV0dXJuXCJhbGxcIj09PXR8fG51bGw9PT10fHx0LmluZGV4T2YoZSk+LTF9ZnVuY3Rpb24gUCh0LGUpe3JldHVybiBudWxsPT09dD9lOnR9ZnVuY3Rpb24gUihlLHIsbil7QygpO3ZhciBpLGEsbyxzPVtyXSxsPVtuXTtpZihrPj0xKXM9W3JdLGw9W25dO2Vsc2UgaWYoaz4wKXt2YXIgYz1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0sbj10WzFdLGk9dFsyXSxhPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49W10saT0wO2k8dC5sZW5ndGg7aSsrKW5baV09KHRbaV0rZVtpXStyW2ldKS8zO3JldHVybiBufShyLG4saSksbz1NYXRoLnNxcnQoMS1rKSxzPU8oYSxyLG8pLGw9TyhhLG4sbyksYz1PKGEsaSxvKSx1PWVbMF0saD1lWzFdLGY9ZVsyXTtyZXR1cm57eHl6djpbW3IsbixsXSxbbCxzLHJdLFtuLGksY10sW2MsbCxuXSxbaSxyLHNdLFtzLGMsaV1dLGFiYzpbW3UsaCwtMV0sWy0xLC0xLHVdLFtoLGYsLTFdLFstMSwtMSxoXSxbZix1LC0xXSxbLTEsLTEsZl1dfX0ocixuKTtzPWMueHl6dixsPWMuYWJjfWZvcih2YXIgdT0wO3U8cy5sZW5ndGg7dSsrKXtyPXNbdV0sbj1sW3VdO2Zvcih2YXIgZj1bXSxwPTA7cDwzO3ArKyl7dmFyIGQ9cltwXVswXSxnPXJbcF1bMV0sdj1yW3BdWzJdLG09cltwXVszXSx5PW5bcF0+LTE/bltwXTpFKGQsZyx2KTtmW3BdPXk+LTE/eTp6KGQsZyx2LFAoZSxtKSl9aT1mWzBdLGE9ZlsxXSxvPWZbMl0sdC5faS5wdXNoKGkpLHQuX2oucHVzaChhKSx0Ll9rLnB1c2gobyksKytofX1mdW5jdGlvbiBGKHQsZSxyLG4pe3ZhciBpPXRbM107aTxyJiYoaT1yKSxpPm4mJihpPW4pO2Zvcih2YXIgYT0odFszXS1pKS8odFszXS1lWzNdKzFlLTkpLG89W10scz0wO3M8NDtzKyspb1tzXT0oMS1hKSp0W3NdK2EqZVtzXTtyZXR1cm4gb31mdW5jdGlvbiBCKHQsZSxyKXtyZXR1cm4gdD49ZSYmdDw9cn1mdW5jdGlvbiBOKHQpe3ZhciBlPS4wMDEqKFMtTSk7cmV0dXJuIHQ+PU0tZSYmdDw9UytlfWZ1bmN0aW9uIGooZSl7Zm9yKHZhciByPVtdLG49MDtuPDQ7bisrKXt2YXIgaT1lW25dO3IucHVzaChbdC54W2ldLHQueVtpXSx0LnpbaV0sdC52YWx1ZVtpXV0pfXJldHVybiByfXZhciBWPTM7ZnVuY3Rpb24gVSh0LGUscixuLGksYSl7YXx8KGE9MSkscj1bLTEsLTEsLTFdO3ZhciBvPSExLHM9W0IoZVswXVszXSxuLGkpLEIoZVsxXVszXSxuLGkpLEIoZVsyXVszXSxuLGkpXTtpZighc1swXSYmIXNbMV0mJiFzWzJdKXJldHVybiExO3ZhciBsPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gTihlWzBdWzNdKSYmTihlWzFdWzNdKSYmTihlWzJdWzNdKT8oUih0LGUsciksITApOmE8ViYmVSh0LGUscixNLFMsKythKX07aWYoc1swXSYmc1sxXSYmc1syXSlyZXR1cm4gbCh0LGUscil8fG87dmFyIGM9ITE7cmV0dXJuW1swLDEsMl0sWzIsMCwxXSxbMSwyLDBdXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2lmKHNbYVswXV0mJnNbYVsxXV0mJiFzW2FbMl1dKXt2YXIgdT1lW2FbMF1dLGg9ZVthWzFdXSxmPWVbYVsyXV0scD1GKGYsdSxuLGkpLGQ9RihmLGgsbixpKTtvPWwodCxbZCxwLHVdLFstMSwtMSxyW2FbMF1dXSl8fG8sbz1sKHQsW3UsaCxkXSxbclthWzBdXSxyW2FbMV1dLC0xXSl8fG8sYz0hMH19KSxjP286KFtbMCwxLDJdLFsxLDIsMF0sWzIsMCwxXV0uZm9yRWFjaChmdW5jdGlvbihhKXtpZihzW2FbMF1dJiYhc1thWzFdXSYmIXNbYVsyXV0pe3ZhciB1PWVbYVswXV0saD1lW2FbMV1dLGY9ZVthWzJdXSxwPUYoaCx1LG4saSksZD1GKGYsdSxuLGkpO289bCh0LFtkLHAsdV0sWy0xLC0xLHJbYVswXV1dKXx8byxjPSEwfX0pLG8pfWZ1bmN0aW9uIHEodCxlLHIsbil7dmFyIGk9ITEsYT1qKGUpLG89W0IoYVswXVszXSxyLG4pLEIoYVsxXVszXSxyLG4pLEIoYVsyXVszXSxyLG4pLEIoYVszXVszXSxyLG4pXTtpZighKG9bMF18fG9bMV18fG9bMl18fG9bM10pKXJldHVybiBpO2lmKG9bMF0mJm9bMV0mJm9bMl0mJm9bM10pcmV0dXJuIHUmJihpPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1mdW5jdGlvbihuLGksYSl7Uih0LFtlW25dLGVbaV0sZVthXV0sW3Jbbl0scltpXSxyW2FdXSl9O24oMCwxLDIpLG4oMywwLDEpLG4oMiwzLDApLG4oMSwyLDMpfSh0LGEsZSl8fGkpLGk7dmFyIHM9ITE7cmV0dXJuW1swLDEsMiwzXSxbMywwLDEsMl0sWzIsMywwLDFdLFsxLDIsMywwXV0uZm9yRWFjaChmdW5jdGlvbihsKXtpZihvW2xbMF1dJiZvW2xbMV1dJiZvW2xbMl1dJiYhb1tsWzNdXSl7dmFyIGM9YVtsWzBdXSxoPWFbbFsxXV0sZj1hW2xbMl1dLHA9YVtsWzNdXTtpZih1KWk9Uih0LFtjLGgsZl0sW2VbbFswXV0sZVtsWzFdXSxlW2xbMl1dXSl8fGk7ZWxzZXt2YXIgZD1GKHAsYyxyLG4pLGc9RihwLGgscixuKSx2PUYocCxmLHIsbik7aT1SKG51bGwsW2QsZyx2XSxbLTEsLTEsLTFdKXx8aX1zPSEwfX0pLHM/aTooW1swLDEsMiwzXSxbMSwyLDMsMF0sWzIsMywwLDFdLFszLDAsMSwyXSxbMCwyLDMsMV0sWzEsMywyLDBdXS5mb3JFYWNoKGZ1bmN0aW9uKGwpe2lmKG9bbFswXV0mJm9bbFsxXV0mJiFvW2xbMl1dJiYhb1tsWzNdXSl7dmFyIGM9YVtsWzBdXSxoPWFbbFsxXV0sZj1hW2xbMl1dLHA9YVtsWzNdXSxkPUYoZixjLHIsbiksZz1GKGYsaCxyLG4pLHY9RihwLGgscixuKSxtPUYocCxjLHIsbik7dT8oaT1SKHQsW2MsbSxkXSxbZVtsWzBdXSwtMSwtMV0pfHxpLGk9Uih0LFtoLGcsdl0sW2VbbFsxXV0sLTEsLTFdKXx8aSk6aT1mdW5jdGlvbih0LGUscil7dmFyIG49ZnVuY3Rpb24obixpLGEpe1IodCxbZVtuXSxlW2ldLGVbYV1dLFtyW25dLHJbaV0sclthXV0pfTtuKDAsMSwyKSxuKDIsMywwKX0obnVsbCxbZCxnLHYsbV0sWy0xLC0xLC0xLC0xXSl8fGkscz0hMH19KSxzP2k6KFtbMCwxLDIsM10sWzEsMiwzLDBdLFsyLDMsMCwxXSxbMywwLDEsMl1dLmZvckVhY2goZnVuY3Rpb24obCl7aWYob1tsWzBdXSYmIW9bbFsxXV0mJiFvW2xbMl1dJiYhb1tsWzNdXSl7dmFyIGM9YVtsWzBdXSxoPWFbbFsxXV0sZj1hW2xbMl1dLHA9YVtsWzNdXSxkPUYoaCxjLHIsbiksZz1GKGYsYyxyLG4pLHY9RihwLGMscixuKTt1PyhpPVIodCxbYyxkLGddLFtlW2xbMF1dLC0xLC0xXSl8fGksaT1SKHQsW2MsZyx2XSxbZVtsWzBdXSwtMSwtMV0pfHxpLGk9Uih0LFtjLHYsZF0sW2VbbFswXV0sLTEsLTFdKXx8aSk6aT1SKG51bGwsW2QsZyx2XSxbLTEsLTEsLTFdKXx8aSxzPSEwfX0pLGkpKX1mdW5jdGlvbiBIKHQsZSxyLG4saSxhLG8sbCxjLGgsZil7dmFyIHA9ITE7cmV0dXJuIHMmJihEKHQsXCJBXCIpJiYocD1xKG51bGwsW2UscixuLGFdLGgsZil8fHApLEQodCxcIkJcIikmJihwPXEobnVsbCxbcixuLGksY10saCxmKXx8cCksRCh0LFwiQ1wiKSYmKHA9cShudWxsLFtyLGEsbyxjXSxoLGYpfHxwKSxEKHQsXCJEXCIpJiYocD1xKG51bGwsW24sYSxsLGNdLGgsZil8fHApLEQodCxcIkVcIikmJihwPXEobnVsbCxbcixuLGEsY10saCxmKXx8cCkpLHUmJihwPXEodCxbcixuLGEsY10saCxmKXx8cCkscH1mdW5jdGlvbiBHKHQsZSxyLG4saSxhLG8scyl7cmV0dXJuWyEwPT09c1swXXx8VSh0LGooW2UscixuXSksW2UscixuXSxhLG8pLCEwPT09c1sxXXx8VSh0LGooW24saSxlXSksW24saSxlXSxhLG8pXX1mdW5jdGlvbiBZKHQsZSxyLG4saSxhLG8scyxsKXtyZXR1cm4gcz9HKHQsZSxyLGksbixhLG8sbCk6Ryh0LHIsaSxuLGUsYSxvLGwpfWZ1bmN0aW9uIFcodCxlLHIsbixpLGEsbyl7dmFyIHMsbCxjLHUsaD0hMSxmPWZ1bmN0aW9uKCl7aD1VKHQsW3MsbCxjXSxbLTEsLTEsLTFdLGksYSl8fGgsaD1VKHQsW2MsdSxzXSxbLTEsLTEsLTFdLGksYSl8fGh9LHA9b1swXSxkPW9bMV0sZz1vWzJdO3JldHVybiBwJiYocz1PKGooW3koZSxyLTAsbi0wKV0pWzBdLGooW3koZS0xLHItMCxuLTApXSlbMF0scCksbD1PKGooW3koZSxyLTAsbi0xKV0pWzBdLGooW3koZS0xLHItMCxuLTEpXSlbMF0scCksYz1PKGooW3koZSxyLTEsbi0xKV0pWzBdLGooW3koZS0xLHItMSxuLTEpXSlbMF0scCksdT1PKGooW3koZSxyLTEsbi0wKV0pWzBdLGooW3koZS0xLHItMSxuLTApXSlbMF0scCksZigpKSxkJiYocz1PKGooW3koZS0wLHIsbi0wKV0pWzBdLGooW3koZS0wLHItMSxuLTApXSlbMF0sZCksbD1PKGooW3koZS0wLHIsbi0xKV0pWzBdLGooW3koZS0wLHItMSxuLTEpXSlbMF0sZCksYz1PKGooW3koZS0xLHIsbi0xKV0pWzBdLGooW3koZS0xLHItMSxuLTEpXSlbMF0sZCksdT1PKGooW3koZS0xLHIsbi0wKV0pWzBdLGooW3koZS0xLHItMSxuLTApXSlbMF0sZCksZigpKSxnJiYocz1PKGooW3koZS0wLHItMCxuKV0pWzBdLGooW3koZS0wLHItMCxuLTEpXSlbMF0sZyksbD1PKGooW3koZS0wLHItMSxuKV0pWzBdLGooW3koZS0wLHItMSxuLTEpXSlbMF0sZyksYz1PKGooW3koZS0xLHItMSxuKV0pWzBdLGooW3koZS0xLHItMSxuLTEpXSlbMF0sZyksdT1PKGooW3koZS0xLHItMCxuKV0pWzBdLGooW3koZS0xLHItMCxuLTEpXSlbMF0sZyksZigpKSxofWZ1bmN0aW9uIFgodCxlLHIsbixpLGEsbyxsLGMsdSxoLGYpe3ZhciBwPXQ7cmV0dXJuIGY/KHMmJlwiZXZlblwiPT09dCYmKHA9bnVsbCksSChwLGUscixuLGksYSxvLGwsYyx1LGgpKToocyYmXCJvZGRcIj09PXQmJihwPW51bGwpLEgocCxjLGwsbyxhLGksbixyLGUsdSxoKSl9ZnVuY3Rpb24gWih0LGUscixuLGkpe2Zvcih2YXIgYT1bXSxvPTAscz0wO3M8ZS5sZW5ndGg7cysrKWZvcih2YXIgbD1lW3NdLGM9MTtjPG07YysrKWZvcih2YXIgdT0xO3U8djt1KyspYS5wdXNoKFkodCx5KGwsdS0xLGMtMSkseShsLHUtMSxjKSx5KGwsdSxjLTEpLHkobCx1LGMpLHIsbiwobCt1K2MpJTIsaSYmaVtvXT9pW29dOltdKSksbysrO3JldHVybiBhfWZ1bmN0aW9uICQodCxlLHIsbixpKXtmb3IodmFyIGE9W10sbz0wLHM9MDtzPGUubGVuZ3RoO3MrKylmb3IodmFyIGw9ZVtzXSxjPTE7YzxnO2MrKylmb3IodmFyIHU9MTt1PG07dSsrKWEucHVzaChZKHQseShjLTEsbCx1LTEpLHkoYyxsLHUtMSkseShjLTEsbCx1KSx5KGMsbCx1KSxyLG4sKGMrbCt1KSUyLGkmJmlbb10/aVtvXTpbXSkpLG8rKztyZXR1cm4gYX1mdW5jdGlvbiBKKHQsZSxyLG4saSl7Zm9yKHZhciBhPVtdLG89MCxzPTA7czxlLmxlbmd0aDtzKyspZm9yKHZhciBsPWVbc10sYz0xO2M8djtjKyspZm9yKHZhciB1PTE7dTxnO3UrKylhLnB1c2goWSh0LHkodS0xLGMtMSxsKSx5KHUtMSxjLGwpLHkodSxjLTEsbCkseSh1LGMsbCkscixuLCh1K2MrbCklMixpJiZpW29dP2lbb106W10pKSxvKys7cmV0dXJuIGF9ZnVuY3Rpb24gSyh0LGUscil7Zm9yKHZhciBuPTE7bjxtO24rKylmb3IodmFyIGk9MTtpPHY7aSsrKWZvcih2YXIgYT0xO2E8ZzthKyspWCh0LHkoYS0xLGktMSxuLTEpLHkoYS0xLGktMSxuKSx5KGEtMSxpLG4tMSkseShhLTEsaSxuKSx5KGEsaS0xLG4tMSkseShhLGktMSxuKSx5KGEsaSxuLTEpLHkoYSxpLG4pLGUsciwoYStpK24pJTIpfWZ1bmN0aW9uIFEodCxlLHIpe3M9ITAsSyh0LGUscikscz0hMX1mdW5jdGlvbiB0dCh0LGUscixuLGksYSl7Zm9yKHZhciBvPVtdLHM9MCxsPTA7bDxlLmxlbmd0aDtsKyspZm9yKHZhciBjPWVbbF0sdT0xO3U8bTt1KyspZm9yKHZhciBoPTE7aDx2O2grKylvLnB1c2goVyh0LGMsaCx1LHIsbixpW2xdLGEmJmFbc10mJmFbc10pKSxzKys7cmV0dXJuIG99ZnVuY3Rpb24gZXQodCxlLHIsbixpLGEpe2Zvcih2YXIgbz1bXSxzPTAsbD0wO2w8ZS5sZW5ndGg7bCsrKWZvcih2YXIgYz1lW2xdLHU9MTt1PGc7dSsrKWZvcih2YXIgaD0xO2g8bTtoKyspby5wdXNoKFcodCx1LGMsaCxyLG4saVtsXSxhJiZhW3NdJiZhW3NdKSkscysrO3JldHVybiBvfWZ1bmN0aW9uIHJ0KHQsZSxyLG4saSxhKXtmb3IodmFyIG89W10scz0wLGw9MDtsPGUubGVuZ3RoO2wrKylmb3IodmFyIGM9ZVtsXSx1PTE7dTx2O3UrKylmb3IodmFyIGg9MTtoPGc7aCsrKW8ucHVzaChXKHQsaCx1LGMscixuLGlbbF0sYSYmYVtzXSYmYVtzXSkpLHMrKztyZXR1cm4gb31mdW5jdGlvbiBudCh0LGUpe2Zvcih2YXIgcj1bXSxuPXQ7bjxlO24rKylyLnB1c2gobik7cmV0dXJuIHJ9cmV0dXJuIGZ1bmN0aW9uKCl7aWYoTCgpLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxnO2UrKylmb3IodmFyIHI9MDtyPHY7cisrKWZvcih2YXIgbj0wO248bTtuKyspe3ZhciBpPXkoZSxyLG4pO3oodC54W2ldLHQueVtpXSx0LnpbaV0sdC52YWx1ZVtpXSl9fSgpLGkmJm8mJihJKG8pLHU9ITAsSyhudWxsLE0sUyksdT0hMSksbiYmYSl7SShhKTtmb3IodmFyIGU9dC5zdXJmYWNlLnBhdHRlcm4scj10LnN1cmZhY2UuY291bnQscz0wO3M8cjtzKyspe3ZhciBsPTE9PT1yPy41OnMvKHItMSksaz0oMS1sKSpNK2wqUyxFPU1hdGguYWJzKGstQSk+TWF0aC5hYnMoay1UKT9bQSxrXTpbayxUXTtRKGUsRVswXSxFWzFdKX19dmFyIEM9W1tNYXRoLm1pbihNLFQpLE1hdGgubWF4KE0sVCldLFtNYXRoLm1pbihBLFMpLE1hdGgubWF4KEEsUyldXTtbXCJ4XCIsXCJ5XCIsXCJ6XCJdLmZvckVhY2goZnVuY3Rpb24oZSl7Zm9yKHZhciByPVtdLG49MDtuPEMubGVuZ3RoO24rKyl7dmFyIGk9MCxhPUNbbl1bMF0sbz1DW25dWzFdLHM9dC5zbGljZXNbZV07aWYocy5zaG93JiZzLmZpbGwpe0kocy5maWxsKTt2YXIgbD1bXSx1PVtdLGg9W107aWYocy5sb2NhdGlvbnMubGVuZ3RoKWZvcih2YXIgeT0wO3k8cy5sb2NhdGlvbnMubGVuZ3RoO3krKyl7dmFyIHg9YyhzLmxvY2F0aW9uc1t5XSxcInhcIj09PWU/ZjpcInlcIj09PWU/cDpkKTswPT09eC5kaXN0UmF0aW8/bC5wdXNoKHguaWQpOnguaWQ+MCYmKHUucHVzaCh4LmlkKSxcInhcIj09PWU/aC5wdXNoKFt4LmRpc3RSYXRpbywwLDBdKTpcInlcIj09PWU/aC5wdXNoKFswLHguZGlzdFJhdGlvLDBdKTpoLnB1c2goWzAsMCx4LmRpc3RSYXRpb10pKX1lbHNlIGw9bnQoMSxcInhcIj09PWU/Zy0xOlwieVwiPT09ZT92LTE6bS0xKTt1Lmxlbmd0aD4wJiYocltpXT1cInhcIj09PWU/dHQobnVsbCx1LGEsbyxoLHJbaV0pOlwieVwiPT09ZT9ldChudWxsLHUsYSxvLGgscltpXSk6cnQobnVsbCx1LGEsbyxoLHJbaV0pLGkrKyksbC5sZW5ndGg+MCYmKHJbaV09XCJ4XCI9PT1lP1oobnVsbCxsLGEsbyxyW2ldKTpcInlcIj09PWU/JChudWxsLGwsYSxvLHJbaV0pOkoobnVsbCxsLGEsbyxyW2ldKSxpKyspfXZhciBiPXQuY2Fwc1tlXTtiLnNob3cmJmIuZmlsbCYmKEkoYi5maWxsKSxyW2ldPVwieFwiPT09ZT9aKG51bGwsWzAsZy0xXSxhLG8scltpXSk6XCJ5XCI9PT1lPyQobnVsbCxbMCx2LTFdLGEsbyxyW2ldKTpKKG51bGwsWzAsbS0xXSxhLG8scltpXSksaSsrKX19KSwwPT09aCYmTCgpLHQuX3g9eCx0Ll95PWIsdC5fej1fLHQuX2ludGVuc2l0eT13LHQuX1hzPWYsdC5fWXM9cCx0Ll9acz1kfSgpLHR9aC5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0PT09dGhpcy5tZXNoKXt2YXIgZT10LmRhdGEuaW5kZXgscj10aGlzLmRhdGEuX3hbZV0sbj10aGlzLmRhdGEuX3lbZV0saT10aGlzLmRhdGEuX3pbZV0sYT10aGlzLmRhdGEuX1lzLmxlbmd0aCxvPXRoaXMuZGF0YS5fWnMubGVuZ3RoLHM9YyhyLHRoaXMuZGF0YS5fWHMpLmlkLGw9YyhuLHRoaXMuZGF0YS5fWXMpLmlkLHU9YyhpLHRoaXMuZGF0YS5fWnMpLmlkLGg9dC5pbmRleD11K28qbCtvKmEqczt0LnRyYWNlQ29vcmRpbmF0ZT1bdGhpcy5kYXRhLl94W2hdLHRoaXMuZGF0YS5feVtoXSx0aGlzLmRhdGEuX3pbaF0sdGhpcy5kYXRhLnZhbHVlW2hdXTt2YXIgZj10aGlzLmRhdGEuaG92ZXJ0ZXh0fHx0aGlzLmRhdGEudGV4dDtyZXR1cm4gQXJyYXkuaXNBcnJheShmKSYmdm9pZCAwIT09ZltoXT90LnRleHRMYWJlbD1mW2hdOmYmJih0LnRleHRMYWJlbD1mKSwhMH19LGgudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUscj1lLmZ1bGxTY2VuZUxheW91dDtmdW5jdGlvbiBuKHQsZSxyLG4pe3JldHVybiBlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdC5kMmwoZSwwLG4pKnJ9KX10aGlzLmRhdGE9Zih0KTt2YXIgcz17cG9zaXRpb25zOm8obihyLnhheGlzLHQuX3gsZS5kYXRhU2NhbGVbMF0sdC54Y2FsZW5kYXIpLG4oci55YXhpcyx0Ll95LGUuZGF0YVNjYWxlWzFdLHQueWNhbGVuZGFyKSxuKHIuemF4aXMsdC5feixlLmRhdGFTY2FsZVsyXSx0LnpjYWxlbmRhcikpLGNlbGxzOm8odC5faSx0Ll9qLHQuX2spLGxpZ2h0UG9zaXRpb246W3QubGlnaHRwb3NpdGlvbi54LHQubGlnaHRwb3NpdGlvbi55LHQubGlnaHRwb3NpdGlvbi56XSxhbWJpZW50OnQubGlnaHRpbmcuYW1iaWVudCxkaWZmdXNlOnQubGlnaHRpbmcuZGlmZnVzZSxzcGVjdWxhcjp0LmxpZ2h0aW5nLnNwZWN1bGFyLHJvdWdobmVzczp0LmxpZ2h0aW5nLnJvdWdobmVzcyxmcmVzbmVsOnQubGlnaHRpbmcuZnJlc25lbCx2ZXJ0ZXhOb3JtYWxzRXBzaWxvbjp0LmxpZ2h0aW5nLnZlcnRleG5vcm1hbHNlcHNpbG9uLGZhY2VOb3JtYWxzRXBzaWxvbjp0LmxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvbixvcGFjaXR5OnQub3BhY2l0eSxjb250b3VyRW5hYmxlOnQuY29udG91ci5zaG93LGNvbnRvdXJDb2xvcjphKHQuY29udG91ci5jb2xvcikuc2xpY2UoMCwzKSxjb250b3VyV2lkdGg6dC5jb250b3VyLndpZHRoLHVzZUZhY2V0Tm9ybWFsczp0LmZsYXRzaGFkaW5nfTtzLnZlcnRleEludGVuc2l0eT10Ll9pbnRlbnNpdHkscy52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHM9W3QuY21pbix0LmNtYXhdLHMuY29sb3JtYXA9aSh0KSx0aGlzLm1lc2gudXBkYXRlKHMpfSxoLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5tZXNoKSx0aGlzLm1lc2guZGlzcG9zZSgpfSxlLmV4cG9ydHM9e2ZpbmROZWFyZXN0T25BeGlzOmMsZ2VuZXJhdGVJc29NZXNoZXM6ZixjcmVhdGVJc29zdXJmYWNlVHJhY2U6ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxpPW4oe2dsOnJ9KSxhPW5ldyB1KHQsaSxlLnVpZCk7cmV0dXJuIGkuX3RyYWNlPWEsYS51cGRhdGUoZSksdC5nbHBsb3QuYWRkKGkpLGF9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvclwiOjY5OCxcIi4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIjo3MjQsXCIuLi8uLi9wbG90cy9nbDNkL3ppcDNcIjo4MDAsXCJnbC1tZXNoM2RcIjoyNzd9XSw5OTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGE9dChcIi4vYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIik7ZnVuY3Rpb24gcyh0LGUscixuLGEpe3ZhciBzPWEoXCJpc29taW5cIiksbD1hKFwiaXNvbWF4XCIpO251bGwhPWwmJm51bGwhPXMmJnM+bCYmKGUuaXNvbWluPW51bGwsZS5pc29tYXg9bnVsbCk7dmFyIGM9YShcInhcIiksdT1hKFwieVwiKSxoPWEoXCJ6XCIpLGY9YShcInZhbHVlXCIpO2MmJmMubGVuZ3RoJiZ1JiZ1Lmxlbmd0aCYmaCYmaC5sZW5ndGgmJmYmJmYubGVuZ3RoPyhpLmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiaGFuZGxlVHJhY2VEZWZhdWx0c1wiKSh0LGUsW1wieFwiLFwieVwiLFwielwiXSxuKSxbXCJ4XCIsXCJ5XCIsXCJ6XCJdLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9XCJjYXBzLlwiK3Q7YShlK1wiLnNob3dcIikmJmEoZStcIi5maWxsXCIpO3ZhciByPVwic2xpY2VzLlwiK3Q7YShyK1wiLnNob3dcIikmJihhKHIrXCIuZmlsbFwiKSxhKHIrXCIubG9jYXRpb25zXCIpKX0pLGEoXCJzcGFjZWZyYW1lLnNob3dcIikmJmEoXCJzcGFjZWZyYW1lLmZpbGxcIiksYShcInN1cmZhY2Uuc2hvd1wiKSYmKGEoXCJzdXJmYWNlLmNvdW50XCIpLGEoXCJzdXJmYWNlLmZpbGxcIiksYShcInN1cmZhY2UucGF0dGVyblwiKSksYShcImNvbnRvdXIuc2hvd1wiKSYmKGEoXCJjb250b3VyLmNvbG9yXCIpLGEoXCJjb250b3VyLndpZHRoXCIpKSxbXCJ0ZXh0XCIsXCJob3ZlcnRleHRcIixcImhvdmVydGVtcGxhdGVcIixcImxpZ2h0aW5nLmFtYmllbnRcIixcImxpZ2h0aW5nLmRpZmZ1c2VcIixcImxpZ2h0aW5nLnNwZWN1bGFyXCIsXCJsaWdodGluZy5yb3VnaG5lc3NcIixcImxpZ2h0aW5nLmZyZXNuZWxcIixcImxpZ2h0aW5nLnZlcnRleG5vcm1hbHNlcHNpbG9uXCIsXCJsaWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb25cIixcImxpZ2h0cG9zaXRpb24ueFwiLFwibGlnaHRwb3NpdGlvbi55XCIsXCJsaWdodHBvc2l0aW9uLnpcIixcImZsYXRzaGFkaW5nXCIsXCJvcGFjaXR5XCJdLmZvckVhY2goZnVuY3Rpb24odCl7YSh0KX0pLG8odCxlLG4sYSx7cHJlZml4OlwiXCIsY0xldHRlcjpcImNcIn0pLGUuX2xlbmd0aD1udWxsKTplLnZpc2libGU9ITF9ZS5leHBvcnRzPXtzdXBwbHlEZWZhdWx0czpmdW5jdGlvbih0LGUscixpKXtzKHQsZSwwLGksZnVuY3Rpb24ocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX0pfSxzdXBwbHlJc29EZWZhdWx0czpzfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCI6NTg4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2F0dHJpYnV0ZXNcIjo5ODl9XSw5OTM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLnN1cHBseURlZmF1bHRzLG4uY2FsYz10KFwiLi9jYWxjXCIpLG4uY29sb3JiYXI9e21pbjpcImNtaW5cIixtYXg6XCJjbWF4XCJ9LG4ucGxvdD10KFwiLi9jb252ZXJ0XCIpLmNyZWF0ZUlzb3N1cmZhY2VUcmFjZSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cImlzb3N1cmZhY2VcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9nbDNkXCIpLG4uY2F0ZWdvcmllcz1bXCJnbDNkXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvZ2wzZFwiOjc4OSxcIi4vYXR0cmlidXRlc1wiOjk4OSxcIi4vY2FsY1wiOjk5MCxcIi4vY29udmVydFwiOjk5MSxcIi4vZGVmYXVsdHNcIjo5OTJ9XSw5OTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLG89dChcIi4uL3N1cmZhY2UvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCIpLGw9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9bCh7eDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0seTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0sejp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0saTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sajp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sazp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sdGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixhcnJheU9rOiEwLGVkaXRUeXBlOlwiY2FsY1wifSxob3ZlcnRleHQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsYXJyYXlPazohMCxlZGl0VHlwZTpcImNhbGNcIn0saG92ZXJ0ZW1wbGF0ZTphKHtlZGl0VHlwZTpcImNhbGNcIn0pLGRlbGF1bmF5YXhpczp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wieFwiLFwieVwiLFwielwiXSxkZmx0OlwielwiLGVkaXRUeXBlOlwiY2FsY1wifSxhbHBoYWh1bGw6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0Oi0xLGVkaXRUeXBlOlwiY2FsY1wifSxpbnRlbnNpdHk6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcImNhbGNcIn0sdmVydGV4Y29sb3I6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGZhY2Vjb2xvcjp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sdHJhbnNmb3Jtczp2b2lkIDB9LG4oXCJcIix7Y29sb3JBdHRyOlwiYGludGVuc2l0eWBcIixzaG93U2NhbGVEZmx0OiEwLGVkaXRUeXBlT3ZlcnJpZGU6XCJjYWxjXCJ9KSx7Y29sb3JiYXI6aSxvcGFjaXR5Om8ub3BhY2l0eSxmbGF0c2hhZGluZzp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwiY2FsY1wifSxjb250b3VyOntzaG93Omwoe30sby5jb250b3Vycy54LnNob3cse30pLGNvbG9yOm8uY29udG91cnMueC5jb2xvcix3aWR0aDpvLmNvbnRvdXJzLngud2lkdGgsZWRpdFR5cGU6XCJjYWxjXCJ9LGxpZ2h0cG9zaXRpb246e3g6bCh7fSxvLmxpZ2h0cG9zaXRpb24ueCx7ZGZsdDoxZTV9KSx5Omwoe30sby5saWdodHBvc2l0aW9uLnkse2RmbHQ6MWU1fSksejpsKHt9LG8ubGlnaHRwb3NpdGlvbi56LHtkZmx0OjB9KSxlZGl0VHlwZTpcImNhbGNcIn0sbGlnaHRpbmc6bCh7dmVydGV4bm9ybWFsc2Vwc2lsb246e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjFlLTEyLGVkaXRUeXBlOlwiY2FsY1wifSxmYWNlbm9ybWFsc2Vwc2lsb246e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjFlLTYsZWRpdFR5cGU6XCJjYWxjXCJ9LGVkaXRUeXBlOlwiY2FsY1wifSxvLmxpZ2h0aW5nKSxob3ZlcmluZm86bCh7fSxzLmhvdmVyaW5mbyx7ZWRpdFR5cGU6XCJjYWxjXCJ9KX0pfSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIjo1NzksXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDYsXCIuLi9zdXJmYWNlL2F0dHJpYnV0ZXNcIjoxMTQ5fV0sOTk1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2UuaW50ZW5zaXR5JiZuKHQsZSx7dmFsczplLmludGVuc2l0eSxjb250YWluZXJTdHI6XCJcIixjTGV0dGVyOlwiY1wifSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsY1wiOjU4Nn1dLDk5NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbC1tZXNoM2RcIiksaT10KFwiZGVsYXVuYXktdHJpYW5ndWxhdGVcIiksYT10KFwiYWxwaGEtc2hhcGVcIiksbz10KFwiY29udmV4LWh1bGxcIikscz10KFwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvclwiKS5wYXJzZUNvbG9yU2NhbGUsbD10KFwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiKSxjPXQoXCIuLi8uLi9wbG90cy9nbDNkL3ppcDNcIik7ZnVuY3Rpb24gdSh0LGUscil7dGhpcy5zY2VuZT10LHRoaXMudWlkPXIsdGhpcy5tZXNoPWUsdGhpcy5uYW1lPVwiXCIsdGhpcy5jb2xvcj1cIiNmZmZcIix0aGlzLmRhdGE9bnVsbCx0aGlzLnNob3dDb250b3VyPSExfXZhciBoPXUucHJvdG90eXBlO2Z1bmN0aW9uIGYodCl7Zm9yKHZhciBlPVtdLHI9dC5sZW5ndGgsbj0wO248cjtuKyspZVtuXT1sKHRbbl0pO3JldHVybiBlfWZ1bmN0aW9uIHAodCxlLHIsbil7Zm9yKHZhciBpPVtdLGE9ZS5sZW5ndGgsbz0wO288YTtvKyspaVtvXT10LmQybChlW29dLDAsbikqcjtyZXR1cm4gaX1mdW5jdGlvbiBkKHQpe2Zvcih2YXIgZT1bXSxyPXQubGVuZ3RoLG49MDtuPHI7bisrKWVbbl09TWF0aC5yb3VuZCh0W25dKTtyZXR1cm4gZX1mdW5jdGlvbiBnKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49MDtuPHI7bisrKWlmKHRbbl08PS0uNXx8dFtuXT49ZS0uNSlyZXR1cm4hMTtyZXR1cm4hMH1oLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLm1lc2gpe3ZhciBlPXQuaW5kZXg9dC5kYXRhLmluZGV4O3QudHJhY2VDb29yZGluYXRlPVt0aGlzLmRhdGEueFtlXSx0aGlzLmRhdGEueVtlXSx0aGlzLmRhdGEueltlXV07dmFyIHI9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQ7cmV0dXJuIEFycmF5LmlzQXJyYXkocikmJnZvaWQgMCE9PXJbZV0/dC50ZXh0TGFiZWw9cltlXTpyJiYodC50ZXh0TGFiZWw9ciksITB9fSxoLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjZW5lLHI9ZS5mdWxsU2NlbmVMYXlvdXQ7dGhpcy5kYXRhPXQ7dmFyIG4sdT10LngubGVuZ3RoLGg9YyhwKHIueGF4aXMsdC54LGUuZGF0YVNjYWxlWzBdLHQueGNhbGVuZGFyKSxwKHIueWF4aXMsdC55LGUuZGF0YVNjYWxlWzFdLHQueWNhbGVuZGFyKSxwKHIuemF4aXMsdC56LGUuZGF0YVNjYWxlWzJdLHQuemNhbGVuZGFyKSk7aWYodC5pJiZ0LmomJnQuayl7aWYodC5pLmxlbmd0aCE9PXQuai5sZW5ndGh8fHQuai5sZW5ndGghPT10LmsubGVuZ3RofHwhZyh0LmksdSl8fCFnKHQuaix1KXx8IWcodC5rLHUpKXJldHVybjtuPWMoZCh0LmkpLGQodC5qKSxkKHQuaykpfWVsc2Ugbj0wPT09dC5hbHBoYWh1bGw/byhoKTp0LmFscGhhaHVsbD4wP2EodC5hbHBoYWh1bGwsaCk6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W1wieFwiLFwieVwiLFwielwiXS5pbmRleE9mKHQpLG49W10sYT1lLmxlbmd0aCxvPTA7bzxhO28rKyluW29dPVtlW29dWyhyKzEpJTNdLGVbb11bKHIrMiklM11dO3JldHVybiBpKG4pfSh0LmRlbGF1bmF5YXhpcyxoKTt2YXIgdj17cG9zaXRpb25zOmgsY2VsbHM6bixsaWdodFBvc2l0aW9uOlt0LmxpZ2h0cG9zaXRpb24ueCx0LmxpZ2h0cG9zaXRpb24ueSx0LmxpZ2h0cG9zaXRpb24uel0sYW1iaWVudDp0LmxpZ2h0aW5nLmFtYmllbnQsZGlmZnVzZTp0LmxpZ2h0aW5nLmRpZmZ1c2Usc3BlY3VsYXI6dC5saWdodGluZy5zcGVjdWxhcixyb3VnaG5lc3M6dC5saWdodGluZy5yb3VnaG5lc3MsZnJlc25lbDp0LmxpZ2h0aW5nLmZyZXNuZWwsdmVydGV4Tm9ybWFsc0Vwc2lsb246dC5saWdodGluZy52ZXJ0ZXhub3JtYWxzZXBzaWxvbixmYWNlTm9ybWFsc0Vwc2lsb246dC5saWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb24sb3BhY2l0eTp0Lm9wYWNpdHksY29udG91ckVuYWJsZTp0LmNvbnRvdXIuc2hvdyxjb250b3VyQ29sb3I6bCh0LmNvbnRvdXIuY29sb3IpLnNsaWNlKDAsMyksY29udG91cldpZHRoOnQuY29udG91ci53aWR0aCx1c2VGYWNldE5vcm1hbHM6dC5mbGF0c2hhZGluZ307dC5pbnRlbnNpdHk/KHRoaXMuY29sb3I9XCIjZmZmXCIsdi52ZXJ0ZXhJbnRlbnNpdHk9dC5pbnRlbnNpdHksdi52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHM9W3QuY21pbix0LmNtYXhdLHYuY29sb3JtYXA9cyh0KSk6dC52ZXJ0ZXhjb2xvcj8odGhpcy5jb2xvcj10LnZlcnRleGNvbG9yWzBdLHYudmVydGV4Q29sb3JzPWYodC52ZXJ0ZXhjb2xvcikpOnQuZmFjZWNvbG9yPyh0aGlzLmNvbG9yPXQuZmFjZWNvbG9yWzBdLHYuY2VsbENvbG9ycz1mKHQuZmFjZWNvbG9yKSk6KHRoaXMuY29sb3I9dC5jb2xvcix2Lm1lc2hDb2xvcj1sKHQuY29sb3IpKSx0aGlzLm1lc2gudXBkYXRlKHYpfSxoLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5tZXNoKSx0aGlzLm1lc2guZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxpPW4oe2dsOnJ9KSxhPW5ldyB1KHQsaSxlLnVpZCk7cmV0dXJuIGkuX3RyYWNlPWEsYS51cGRhdGUoZSksdC5nbHBsb3QuYWRkKGkpLGF9fSx7XCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yXCI6Njk4LFwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiOjcyNCxcIi4uLy4uL3Bsb3RzL2dsM2QvemlwM1wiOjgwMCxcImFscGhhLXNoYXBlXCI6NTUsXCJjb252ZXgtaHVsbFwiOjEyMSxcImRlbGF1bmF5LXRyaWFuZ3VsYXRlXCI6MTU3LFwiZ2wtbWVzaDNkXCI6Mjc3fV0sOTk3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIiksbz10KFwiLi9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtmdW5jdGlvbiBsKHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxvLHIsbil9ZnVuY3Rpb24gYyh0KXt2YXIgZT10Lm1hcChmdW5jdGlvbih0KXt2YXIgZT1sKHQpO3JldHVybiBlJiZpLmlzQXJyYXlPclR5cGVkQXJyYXkoZSk/ZTpudWxsfSk7cmV0dXJuIGUuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQubGVuZ3RoPT09ZVswXS5sZW5ndGh9KSYmZX1jKFtcInhcIixcInlcIixcInpcIl0pPyhjKFtcImlcIixcImpcIixcImtcIl0pLCghZS5pfHxlLmomJmUuaykmJighZS5qfHxlLmsmJmUuaSkmJighZS5rfHxlLmkmJmUuaik/KG4uZ2V0Q29tcG9uZW50TWV0aG9kKFwiY2FsZW5kYXJzXCIsXCJoYW5kbGVUcmFjZURlZmF1bHRzXCIpKHQsZSxbXCJ4XCIsXCJ5XCIsXCJ6XCJdLHMpLFtcImxpZ2h0aW5nLmFtYmllbnRcIixcImxpZ2h0aW5nLmRpZmZ1c2VcIixcImxpZ2h0aW5nLnNwZWN1bGFyXCIsXCJsaWdodGluZy5yb3VnaG5lc3NcIixcImxpZ2h0aW5nLmZyZXNuZWxcIixcImxpZ2h0aW5nLnZlcnRleG5vcm1hbHNlcHNpbG9uXCIsXCJsaWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb25cIixcImxpZ2h0cG9zaXRpb24ueFwiLFwibGlnaHRwb3NpdGlvbi55XCIsXCJsaWdodHBvc2l0aW9uLnpcIixcImNvbnRvdXIuc2hvd1wiLFwiY29udG91ci5jb2xvclwiLFwiY29udG91ci53aWR0aFwiLFwiY29sb3JzY2FsZVwiLFwicmV2ZXJzZXNjYWxlXCIsXCJmbGF0c2hhZGluZ1wiLFwiYWxwaGFodWxsXCIsXCJkZWxhdW5heWF4aXNcIixcIm9wYWNpdHlcIl0uZm9yRWFjaChmdW5jdGlvbih0KXtsKHQpfSksXCJpbnRlbnNpdHlcImluIHQ/KGwoXCJpbnRlbnNpdHlcIiksYSh0LGUscyxsLHtwcmVmaXg6XCJcIixjTGV0dGVyOlwiY1wifSkpOihlLnNob3dzY2FsZT0hMSxcImZhY2Vjb2xvclwiaW4gdD9sKFwiZmFjZWNvbG9yXCIpOlwidmVydGV4Y29sb3JcImluIHQ/bChcInZlcnRleGNvbG9yXCIpOmwoXCJjb2xvclwiLHIpKSxsKFwidGV4dFwiKSxsKFwiaG92ZXJ0ZXh0XCIpLGwoXCJob3ZlcnRlbXBsYXRlXCIpLGUuX2xlbmd0aD1udWxsKTplLnZpc2libGU9ITEpOmUudmlzaWJsZT0hMX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiOjU4OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9hdHRyaWJ1dGVzXCI6OTk0fV0sOTk4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLmNvbG9yYmFyPXttaW46XCJjbWluXCIsbWF4OlwiY21heFwifSxuLnBsb3Q9dChcIi4vY29udmVydFwiKSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cIm1lc2gzZFwiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4uLy4uL3Bsb3RzL2dsM2RcIiksbi5jYXRlZ29yaWVzPVtcImdsM2RcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9nbDNkXCI6Nzg5LFwiLi9hdHRyaWJ1dGVzXCI6OTk0LFwiLi9jYWxjXCI6OTk1LFwiLi9jb252ZXJ0XCI6OTk2LFwiLi9kZWZhdWx0c1wiOjk5N31dLDk5OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIikuZXh0ZW5kRmxhdCxpPXQoXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXNcIikuZGFzaCxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXNcIikscz1pLmxpbmU7ZnVuY3Rpb24gbCh0KXtyZXR1cm57bGluZTp7Y29sb3I6bih7fSxzLmNvbG9yLHtkZmx0OnR9KSx3aWR0aDpzLndpZHRoLGRhc2g6YSxlZGl0VHlwZTpcInN0eWxlXCJ9LGVkaXRUeXBlOlwic3R5bGVcIn19ZS5leHBvcnRzPXt4Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSxvcGVuOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxoaWdoOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxsb3c6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGNsb3NlOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxsaW5lOnt3aWR0aDpuKHt9LHMud2lkdGgse30pLGRhc2g6bih7fSxhLHt9KSxlZGl0VHlwZTpcInN0eWxlXCJ9LGluY3JlYXNpbmc6bChcIiMzRDk5NzBcIiksZGVjcmVhc2luZzpsKFwiI0ZGNDEzNlwiKSx0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LGhvdmVydGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixhcnJheU9rOiEwLGVkaXRUeXBlOlwiY2FsY1wifSx0aWNrd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6LjUsZGZsdDouMyxlZGl0VHlwZTpcImNhbGNcIn0saG92ZXJsYWJlbDpuKHt9LG8uaG92ZXJsYWJlbCx7c3BsaXQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMSxlZGl0VHlwZTpcInN0eWxlXCJ9fSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlc1wiOjU5OCxcIi4uLy4uL2NvbXBvbmVudHMvZngvYXR0cmlidXRlc1wiOjYwOCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiOjEwNTJ9XSwxMDAwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPW4uXyxhPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxvPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTTtmdW5jdGlvbiBzKHQsZSxyLG4pe3JldHVybntvOnQsaDplLGw6cixjOm59fWZ1bmN0aW9uIGwodCxlLHIscyxsKXtmb3IodmFyIGM9cy5tYWtlQ2FsY2RhdGEoZSxcIm9wZW5cIiksdT1zLm1ha2VDYWxjZGF0YShlLFwiaGlnaFwiKSxoPXMubWFrZUNhbGNkYXRhKGUsXCJsb3dcIiksZj1zLm1ha2VDYWxjZGF0YShlLFwiY2xvc2VcIikscD1BcnJheS5pc0FycmF5KGUudGV4dCksZD1BcnJheS5pc0FycmF5KGUuaG92ZXJ0ZXh0KSxnPSEwLHY9bnVsbCxtPVtdLHk9MDt5PHIubGVuZ3RoO3krKyl7dmFyIHg9clt5XSxiPWNbeV0sXz11W3ldLHc9aFt5XSxrPWZbeV07aWYoeCE9PW8mJmIhPT1vJiZfIT09byYmdyE9PW8mJmshPT1vKXtrPT09Yj9udWxsIT09diYmayE9PXYmJihnPWs+dik6Zz1rPmIsdj1rO3ZhciBBPWwoYixfLHcsayk7QS5wb3M9eCxBLnljPShiK2spLzIsQS5pPXksQS5kaXI9Zz9cImluY3JlYXNpbmdcIjpcImRlY3JlYXNpbmdcIixwJiYoQS50eD1lLnRleHRbeV0pLGQmJihBLmh0eD1lLmhvdmVydGV4dFt5XSksbS5wdXNoKEEpfWVsc2UgbS5wdXNoKHtwb3M6eCxlbXB0eTohMH0pfXJldHVybiBlLl9leHRyZW1lc1tzLl9pZF09YS5maW5kRXh0cmVtZXMocyxuLmNvbmNhdChoLHUpLHtwYWRkZWQ6ITB9KSxtLmxlbmd0aCYmKG1bMF0udD17bGFiZWxzOntvcGVuOmkodCxcIm9wZW46XCIpK1wiIFwiLGhpZ2g6aSh0LFwiaGlnaDpcIikrXCIgXCIsbG93OmkodCxcImxvdzpcIikrXCIgXCIsY2xvc2U6aSh0LFwiY2xvc2U6XCIpK1wiIFwifX0pLG19ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHI9YS5nZXRGcm9tSWQodCxlLnhheGlzKSxpPWEuZ2V0RnJvbUlkKHQsZS55YXhpcyksbz1mdW5jdGlvbih0LGUscil7dmFyIGk9ci5fbWluRGlmZjtpZighaSl7dmFyIGEsbz10Ll9mdWxsRGF0YSxzPVtdO2ZvcihpPTEvMCxhPTA7YTxvLmxlbmd0aDthKyspe3ZhciBsPW9bYV07aWYoXCJvaGxjXCI9PT1sLnR5cGUmJiEwPT09bC52aXNpYmxlJiZsLnhheGlzPT09ZS5faWQpe3MucHVzaChsKTt2YXIgYz1lLm1ha2VDYWxjZGF0YShsLFwieFwiKTtsLl94Y2FsYz1jO3ZhciB1PW4uZGlzdGluY3RWYWxzKGMpLm1pbkRpZmY7dSYmaXNGaW5pdGUodSkmJihpPU1hdGgubWluKGksdSkpfX1mb3IoaT09PTEvMCYmKGk9MSksYT0wO2E8cy5sZW5ndGg7YSsrKXNbYV0uX21pbkRpZmY9aX1yZXR1cm4gaSpyLnRpY2t3aWR0aH0odCxyLGUpLGM9ZS5fbWluRGlmZjtlLl9taW5EaWZmPW51bGw7dmFyIHU9ZS5feGNhbGM7ZS5feGNhbGM9bnVsbDt2YXIgaD1sKHQsZSx1LGkscyk7cmV0dXJuIGUuX2V4dHJlbWVzW3IuX2lkXT1hLmZpbmRFeHRyZW1lcyhyLHUse3ZwYWQ6Yy8yfSksaC5sZW5ndGg/KG4uZXh0ZW5kRmxhdChoWzBdLnQse3dIb3ZlcjpjLzIsdGlja0xlbjpvfSksaCk6W3t0OntlbXB0eTohMH19XX0sY2FsY0NvbW1vbjpsfX0se1wiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5fV0sMTAwMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9vaGxjX2RlZmF1bHRzXCIpLGE9dChcIi4vYXR0cmlidXRlc1wiKTtmdW5jdGlvbiBvKHQsZSxyLG4pe3IobitcIi5saW5lLmNvbG9yXCIpLHIobitcIi5saW5lLndpZHRoXCIsZS5saW5lLndpZHRoKSxyKG4rXCIubGluZS5kYXNoXCIsZS5saW5lLmRhc2gpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtmdW5jdGlvbiBsKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9aSh0LGUsbCxzKT8obChcImxpbmUud2lkdGhcIiksbChcImxpbmUuZGFzaFwiKSxvKHQsZSxsLFwiaW5jcmVhc2luZ1wiKSxvKHQsZSxsLFwiZGVjcmVhc2luZ1wiKSxsKFwidGV4dFwiKSxsKFwiaG92ZXJ0ZXh0XCIpLGwoXCJ0aWNrd2lkdGhcIikscy5fcmVxdWVzdFJhbmdlc2xpZGVyW2UueGF4aXNdPSEwKTplLnZpc2libGU9ITF9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuL2F0dHJpYnV0ZXNcIjo5OTksXCIuL29obGNfZGVmYXVsdHNcIjoxMDA0fV0sMTAwMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLHM9dChcIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0XCIpLGw9e2luY3JlYXNpbmc6XCJcXHUyNWIyXCIsZGVjcmVhc2luZzpcIlxcdTI1YmNcIn07ZnVuY3Rpb24gYyh0LGUscixuKXt2YXIgaSxzLGw9dC5jZCxjPXQueGEsdT1sWzBdLnRyYWNlLGg9bFswXS50LGY9dS50eXBlLHA9XCJvaGxjXCI9PT1mP1wibFwiOlwibWluXCIsZD1cIm9obGNcIj09PWY/XCJoXCI6XCJtYXhcIixnPWguYlBvc3x8MCx2PWZ1bmN0aW9uKHQpe3JldHVybiB0LnBvcytnLWV9LG09aC5iZFBvc3x8aC50aWNrTGVuLHk9aC53SG92ZXIseD1NYXRoLm1pbigxLG0vTWF0aC5hYnMoYy5yMmMoYy5yYW5nZVsxXSktYy5yMmMoYy5yYW5nZVswXSkpKTtmdW5jdGlvbiBiKHQpe3ZhciBlPXYodCk7cmV0dXJuIGEuaW5ib3goZS15LGUreSxpKX1mdW5jdGlvbiBfKHQpe3ZhciBlPXRbcF0sbj10W2RdO3JldHVybiBlPT09bnx8YS5pbmJveChlLXIsbi1yLGkpfWZ1bmN0aW9uIHcodCl7cmV0dXJuKGIodCkrXyh0KSkvMn1pPXQubWF4SG92ZXJEaXN0YW5jZS14LHM9dC5tYXhTcGlrZURpc3RhbmNlLXg7dmFyIGs9YS5nZXREaXN0YW5jZUZ1bmN0aW9uKG4sYixfLHcpO2lmKGEuZ2V0Q2xvc2VzdChsLGssdCksITE9PT10LmluZGV4KXJldHVybiBudWxsO3ZhciBBPWxbdC5pbmRleF07aWYoQS5lbXB0eSlyZXR1cm4gbnVsbDt2YXIgVD11W0EuZGlyXSxNPVQubGluZS5jb2xvcjtyZXR1cm4gby5vcGFjaXR5KE0pJiZULmxpbmUud2lkdGg/dC5jb2xvcj1NOnQuY29sb3I9VC5maWxsY29sb3IsdC54MD1jLmMycChBLnBvcytnLW0sITApLHQueDE9Yy5jMnAoQS5wb3MrZyttLCEwKSx0LnhMYWJlbFZhbD1BLnBvcyx0LnNwaWtlRGlzdGFuY2U9dyhBKSpzL2ksdC54U3Bpa2U9Yy5jMnAoQS5wb3MsITApLHR9ZnVuY3Rpb24gdSh0LGUscixhKXt2YXIgbz10LmNkLHM9dC55YSxsPW9bMF0udHJhY2UsdT1vWzBdLnQsaD1bXSxmPWModCxlLHIsYSk7aWYoIWYpcmV0dXJuW107dmFyIHA9b1tmLmluZGV4XS5oaXx8bC5ob3ZlcmluZm8sZD1wLnNwbGl0KFwiK1wiKTtpZighKFwiYWxsXCI9PT1wfHwtMSE9PWQuaW5kZXhPZihcInlcIikpKXJldHVybltdO2Zvcih2YXIgZz1bXCJoaWdoXCIsXCJvcGVuXCIsXCJjbG9zZVwiLFwibG93XCJdLHY9e30sbT0wO208Zy5sZW5ndGg7bSsrKXt2YXIgeSx4PWdbbV0sYj1sW3hdW2YuaW5kZXhdLF89cy5jMnAoYiwhMCk7YiBpbiB2Pyh5PXZbYl0pLnlMYWJlbCs9XCI8YnI+XCIrdS5sYWJlbHNbeF0rbi5ob3ZlckxhYmVsVGV4dChzLGIpOigoeT1pLmV4dGVuZEZsYXQoe30sZikpLnkwPXkueTE9Xyx5LnlMYWJlbFZhbD1iLHkueUxhYmVsPXUubGFiZWxzW3hdK24uaG92ZXJMYWJlbFRleHQocyxiKSx5Lm5hbWU9XCJcIixoLnB1c2goeSksdltiXT15KX1yZXR1cm4gaH1mdW5jdGlvbiBoKHQsZSxyLGkpe3ZhciBhPXQuY2Qsbz10LnlhLHU9YVswXS50cmFjZSxoPWFbMF0udCxmPWModCxlLHIsaSk7aWYoIWYpcmV0dXJuW107dmFyIHA9YVtmLmluZGV4XSxkPWYuaW5kZXg9cC5pLGc9cC5kaXI7ZnVuY3Rpb24gdih0KXtyZXR1cm4gaC5sYWJlbHNbdF0rbi5ob3ZlckxhYmVsVGV4dChvLHVbdF1bZF0pfXZhciBtPXAuaGl8fHUuaG92ZXJpbmZvLHk9bS5zcGxpdChcIitcIikseD1cImFsbFwiPT09bSxiPXh8fC0xIT09eS5pbmRleE9mKFwieVwiKSxfPXh8fC0xIT09eS5pbmRleE9mKFwidGV4dFwiKSx3PWI/W3YoXCJvcGVuXCIpLHYoXCJoaWdoXCIpLHYoXCJsb3dcIiksdihcImNsb3NlXCIpK1wiICBcIitsW2ddXTpbXTtyZXR1cm4gXyYmcyhwLHUsdyksZi5leHRyYVRleHQ9dy5qb2luKFwiPGJyPlwiKSxmLnkwPWYueTE9by5jMnAocC55YywhMCksW2ZdfWUuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHQuY2RbMF0udHJhY2UuaG92ZXJsYWJlbC5zcGxpdD91KHQsZSxyLG4pOmgodCxlLHIsbil9LGhvdmVyU3BsaXQ6dSxob3Zlck9uUG9pbnRzOmh9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHRcIjoxMDYwfV0sMTAwMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17bW9kdWxlVHlwZTpcInRyYWNlXCIsbmFtZTpcIm9obGNcIixiYXNlUGxvdE1vZHVsZTp0KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCIpLGNhdGVnb3JpZXM6W1wiY2FydGVzaWFuXCIsXCJzdmdcIixcInNob3dMZWdlbmRcIl0sbWV0YTp7fSxhdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksc3VwcGx5RGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIiksY2FsYzp0KFwiLi9jYWxjXCIpLmNhbGMscGxvdDp0KFwiLi9wbG90XCIpLHN0eWxlOnQoXCIuL3N0eWxlXCIpLGhvdmVyUG9pbnRzOnQoXCIuL2hvdmVyXCIpLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KFwiLi9zZWxlY3RcIil9fSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIjo3NjAsXCIuL2F0dHJpYnV0ZXNcIjo5OTksXCIuL2NhbGNcIjoxZTMsXCIuL2RlZmF1bHRzXCI6MTAwMSxcIi4vaG92ZXJcIjoxMDAyLFwiLi9wbG90XCI6MTAwNSxcIi4vc2VsZWN0XCI6MTAwNixcIi4vc3R5bGVcIjoxMDA3fV0sMTAwNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxpPXQoXCIuLi8uLi9saWJcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPXIoXCJ4XCIpLHM9cihcIm9wZW5cIiksbD1yKFwiaGlnaFwiKSxjPXIoXCJsb3dcIiksdT1yKFwiY2xvc2VcIik7aWYocihcImhvdmVybGFiZWwuc3BsaXRcIiksbi5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcImhhbmRsZVRyYWNlRGVmYXVsdHNcIikodCxlLFtcInhcIl0sYSkscyYmbCYmYyYmdSl7dmFyIGg9TWF0aC5taW4ocy5sZW5ndGgsbC5sZW5ndGgsYy5sZW5ndGgsdS5sZW5ndGgpO3JldHVybiBvJiYoaD1NYXRoLm1pbihoLGkubWluUm93TGVuZ3RoKG8pKSksZS5fbGVuZ3RoPWgsaH19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOX1dLDEwMDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vbGliXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1lLnhheGlzLHM9ZS55YXhpcztpLm1ha2VUcmFjZUdyb3VwcyhhLHIsXCJ0cmFjZSBvaGxjXCIpLmVhY2goZnVuY3Rpb24odCl7dmFyIHI9bi5zZWxlY3QodGhpcyksYT10WzBdLGw9YS50LGM9YS50cmFjZTtpZihlLmlzUmFuZ2VQbG90fHwoYS5ub2RlMz1yKSwhMCE9PWMudmlzaWJsZXx8bC5lbXB0eSlyLnJlbW92ZSgpO2Vsc2V7dmFyIHU9bC50aWNrTGVuLGg9ci5zZWxlY3RBbGwoXCJwYXRoXCIpLmRhdGEoaS5pZGVudGl0eSk7aC5lbnRlcigpLmFwcGVuZChcInBhdGhcIiksaC5leGl0KCkucmVtb3ZlKCksaC5hdHRyKFwiZFwiLGZ1bmN0aW9uKHQpe2lmKHQuZW1wdHkpcmV0dXJuXCJNMCwwWlwiO3ZhciBlPW8uYzJwKHQucG9zLCEwKSxyPW8uYzJwKHQucG9zLXUsITApLG49by5jMnAodC5wb3MrdSwhMCk7cmV0dXJuXCJNXCIrcitcIixcIitzLmMycCh0Lm8sITApK1wiSFwiK2UrXCJNXCIrZStcIixcIitzLmMycCh0LmgsITApK1wiVlwiK3MuYzJwKHQubCwhMCkrXCJNXCIrbitcIixcIitzLmMycCh0LmMsITApK1wiSFwiK2V9KX19KX19LHtcIi4uLy4uL2xpYlwiOjcwMSxkMzoxNTV9XSwxMDA2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10LmNkLGk9dC54YXhpcyxhPXQueWF4aXMsbz1bXSxzPW5bMF0udC5iUG9zfHwwO2lmKCExPT09ZSlmb3Iocj0wO3I8bi5sZW5ndGg7cisrKW5bcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBsPW5bcl07ZS5jb250YWlucyhbaS5jMnAobC5wb3MrcyksYS5jMnAobC55YyldLG51bGwsbC5pLHQpPyhvLnB1c2goe3BvaW50TnVtYmVyOmwuaSx4OmkuYzJkKGwucG9zKSx5OmEuYzJkKGwueWMpfSksbC5zZWxlY3RlZD0xKTpsLnNlbGVjdGVkPTB9cmV0dXJuIG99fSx7fV0sMTAwNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lP2VbMF0ubm9kZTM6bi5zZWxlY3QodCkuc2VsZWN0QWxsKFwiZy5vaGxjbGF5ZXJcIikuc2VsZWN0QWxsKFwiZy50cmFjZVwiKTtyLnN0eWxlKFwib3BhY2l0eVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSxyLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZTtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoXCJwYXRoXCIpLmVhY2goZnVuY3Rpb24odCl7aWYoIXQuZW1wdHkpe3ZhciByPWVbdC5kaXJdLmxpbmU7bi5zZWxlY3QodGhpcykuc3R5bGUoXCJmaWxsXCIsXCJub25lXCIpLmNhbGwoYS5zdHJva2Usci5jb2xvcikuY2FsbChpLmRhc2hMaW5lLHIuZGFzaCxyLndpZHRoKS5zdHlsZShcIm9wYWNpdHlcIixlLnNlbGVjdGVkcG9pbnRzJiYhdC5zZWxlY3RlZD8uMzoxKX19KX0pfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxkMzoxNTV9XSwxMDA4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxpPXQoXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxsPXQoXCIuLi8uLi9wbG90cy9kb21haW5cIikuYXR0cmlidXRlcyxjPXQoXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIikubGluZSx1PXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIiksaD1uKHtlZGl0VHlwZTpcImNhbGNcIn0sbyhcImxpbmVcIix7ZWRpdFR5cGU6XCJjYWxjXCJ9KSx7c2hvd3NjYWxlOmMuc2hvd3NjYWxlLGNvbG9yYmFyOnUsc2hhcGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImxpbmVhclwiLFwiaHNwbGluZVwiXSxkZmx0OlwibGluZWFyXCIsZWRpdFR5cGU6XCJwbG90XCJ9LGhvdmVydGVtcGxhdGU6cyh7ZWRpdFR5cGU6XCJwbG90XCIsYXJyYXlPazohMX0se2tleXM6W1wiY291bnRcIixcInByb2JhYmlsaXR5XCJdfSl9KTtlLmV4cG9ydHM9e2RvbWFpbjpsKHtuYW1lOlwicGFyY2F0c1wiLHRyYWNlOiEwLGVkaXRUeXBlOlwiY2FsY1wifSksaG92ZXJpbmZvOm4oe30saS5ob3ZlcmluZm8se2ZsYWdzOltcImNvdW50XCIsXCJwcm9iYWJpbGl0eVwiXSxlZGl0VHlwZTpcInBsb3RcIixhcnJheU9rOiExfSksaG92ZXJvbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiY2F0ZWdvcnlcIixcImNvbG9yXCIsXCJkaW1lbnNpb25cIl0sZGZsdDpcImNhdGVnb3J5XCIsZWRpdFR5cGU6XCJwbG90XCJ9LGhvdmVydGVtcGxhdGU6cyh7ZWRpdFR5cGU6XCJwbG90XCIsYXJyYXlPazohMX0se2tleXM6W1wiY291bnRcIixcInByb2JhYmlsaXR5XCIsXCJjYXRlZ29yeVwiLFwiY2F0ZWdvcnljb3VudFwiLFwiY29sb3Jjb3VudFwiLFwiYmFuZGNvbG9yY291bnRcIl19KSxhcnJhbmdlbWVudDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wicGVycGVuZGljdWxhclwiLFwiZnJlZWZvcm1cIixcImZpeGVkXCJdLGRmbHQ6XCJwZXJwZW5kaWN1bGFyXCIsZWRpdFR5cGU6XCJwbG90XCJ9LGJ1bmRsZWNvbG9yczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwicGxvdFwifSxzb3J0cGF0aHM6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImZvcndhcmRcIixcImJhY2t3YXJkXCJdLGRmbHQ6XCJmb3J3YXJkXCIsZWRpdFR5cGU6XCJwbG90XCJ9LGxhYmVsZm9udDphKHtlZGl0VHlwZTpcImNhbGNcIn0pLHRpY2tmb250OmEoe2VkaXRUeXBlOlwiY2FsY1wifSksZGltZW5zaW9uczp7X2lzTGlua2VkVG9BcnJheTpcImRpbWVuc2lvblwiLGxhYmVsOnt2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGNhdGVnb3J5b3JkZXI6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInRyYWNlXCIsXCJjYXRlZ29yeSBhc2NlbmRpbmdcIixcImNhdGVnb3J5IGRlc2NlbmRpbmdcIixcImFycmF5XCJdLGRmbHQ6XCJ0cmFjZVwiLGVkaXRUeXBlOlwiY2FsY1wifSxjYXRlZ29yeWFycmF5Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx0aWNrdGV4dDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sdmFsdWVzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGRmbHQ6W10sZWRpdFR5cGU6XCJjYWxjXCJ9LGRpc3BsYXlpbmRleDp7dmFsVHlwZTpcImludGVnZXJcIixlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCIsdmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifX0sbGluZTpoLGNvdW50czp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MSxhcnJheU9rOiEwLGVkaXRUeXBlOlwiY2FsY1wifSxjdXN0b21kYXRhOnZvaWQgMCxob3ZlcmxhYmVsOnZvaWQgMCxpZHM6dm9pZCAwLGxlZ2VuZGdyb3VwOnZvaWQgMCxvcGFjaXR5OnZvaWQgMCxzZWxlY3RlZHBvaW50czp2b2lkIDAsc2hvd2xlZ2VuZDp2b2lkIDB9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIjo1NzksXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDYsXCIuLi8uLi9wbG90cy9kb21haW5cIjo3NzQsXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIjo3NzUsXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIjoxMDUyfV0sMTAwOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9nZXRfZGF0YVwiKS5nZXRNb2R1bGVDYWxjRGF0YSxpPXQoXCIuL3Bsb3RcIik7ci5uYW1lPVwicGFyY2F0c1wiLHIucGxvdD1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1uKHQuY2FsY2RhdGEsXCJwYXJjYXRzXCIpO2lmKG8ubGVuZ3RoKXt2YXIgcz1vWzBdO2kodCxzLHIsYSl9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4uX2hhcyYmbi5faGFzKFwicGFyY2F0c1wiKSxhPWUuX2hhcyYmZS5faGFzKFwicGFyY2F0c1wiKTtpJiYhYSYmbi5fcGFwZXJkaXYuc2VsZWN0QWxsKFwiLnBhcmNhdHNcIikucmVtb3ZlKCl9fSx7XCIuLi8uLi9wbG90cy9nZXRfZGF0YVwiOjc4NCxcIi4vcGxvdFwiOjEwMTR9XSwxMDEwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYi9ndXBcIikud3JhcCxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVyc1wiKS5oYXNDb2xvcnNjYWxlLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCIpLG89dChcIi4uLy4uL2xpYi9maWx0ZXJfdW5pcXVlLmpzXCIpLHM9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxsPXQoXCIuLi8uLi9saWJcIik7ZnVuY3Rpb24gYyh0LGUscil7dC52YWx1ZUluZHMucHVzaChlKSx0LmNvdW50Kz1yfWZ1bmN0aW9uIHUodCxlLHIpe3QudmFsdWVJbmRzLnB1c2goZSksdC5jb3VudCs9cn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1sLmZpbHRlclZpc2libGUoZS5kaW1lbnNpb25zKTtpZigwPT09ci5sZW5ndGgpcmV0dXJuW107dmFyIGgsZixwLGQ9ci5tYXAoZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuXCJ0cmFjZVwiPT09dC5jYXRlZ29yeW9yZGVyP2U9bnVsbDpcImFycmF5XCI9PT10LmNhdGVnb3J5b3JkZXI/ZT10LmNhdGVnb3J5YXJyYXk6KGU9byh0LnZhbHVlcykuc29ydCgpLFwiY2F0ZWdvcnkgZGVzY2VuZGluZ1wiPT09dC5jYXRlZ29yeW9yZGVyJiYoZT1lLnJldmVyc2UoKSkpLGZ1bmN0aW9uKHQsZSl7ZT1udWxsPT1lP1tdOmUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0fSk7dmFyIHI9e30sbj17fSxpPVtdO2UuZm9yRWFjaChmdW5jdGlvbih0LGUpe3JbdF09MCxuW3RdPWV9KTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG8scz10W2FdO3ZvaWQgMD09PXJbc10/KHJbc109MSxvPWUucHVzaChzKS0xLG5bc109byk6KHJbc10rKyxvPW5bc10pLGkucHVzaChvKX12YXIgbD1lLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gclt0XX0pO3JldHVybnt1bmlxdWVWYWx1ZXM6ZSx1bmlxdWVDb3VudHM6bCxpbmRzOml9fSh0LnZhbHVlcyxlKX0pO2g9bC5pc0FycmF5T3JUeXBlZEFycmF5KGUuY291bnRzKT9lLmNvdW50czpbZS5jb3VudHNdLGZ1bmN0aW9uKHQpe3ZhciBlO2lmKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9MDtyPHQubGVuZ3RoO3IrKyl7aWYodFtyXTwwfHx0W3JdPj10Lmxlbmd0aClyZXR1cm4hMTtpZih2b2lkIDAhPT1lW3Rbcl1dKXJldHVybiExO2VbdFtyXV09ITB9cmV0dXJuITB9KHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3BsYXlpbmRleH0pKSlmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0uX2Rpc3BsYXlpbmRleD10W2VdLmRpc3BsYXlpbmRleDtlbHNlIGZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5fZGlzcGxheWluZGV4PWV9KHIpLHIuZm9yRWFjaChmdW5jdGlvbih0LGUpeyFmdW5jdGlvbih0LGUpe3QuX2NhdGVnb3J5YXJyYXk9ZS51bmlxdWVWYWx1ZXMsbnVsbD09PXQudGlja3RleHR8fHZvaWQgMD09PXQudGlja3RleHQ/dC5fdGlja3RleHQ9W106dC5fdGlja3RleHQ9dC50aWNrdGV4dC5zbGljZSgpO2Zvcih2YXIgcj10Ll90aWNrdGV4dC5sZW5ndGg7cjxlLnVuaXF1ZVZhbHVlcy5sZW5ndGg7cisrKXQuX3RpY2t0ZXh0LnB1c2goZS51bmlxdWVWYWx1ZXNbcl0pfSh0LGRbZV0pfSk7dmFyIGcsdj1lLmxpbmU7dj8oaShlLFwibGluZVwiKSYmYSh0LGUse3ZhbHM6ZS5saW5lLmNvbG9yLGNvbnRhaW5lclN0cjpcImxpbmVcIixjTGV0dGVyOlwiY1wifSksZz1zLnRyeUNvbG9yc2NhbGUodikpOmc9bC5pZGVudGl0eTt2YXIgbSx5LHgsYixfPXJbMF0udmFsdWVzLmxlbmd0aCx3PXt9LGs9ZC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaW5kc30pO2ZvcihwPTAsbT0wO208XzttKyspe3ZhciBBPVtdO2Zvcih5PTA7eTxrLmxlbmd0aDt5KyspQS5wdXNoKGtbeV1bbV0pO2Y9aFttJWgubGVuZ3RoXSxwKz1mO3ZhciBUPSh4PW0sYj12b2lkIDAsYj1sLmlzQXJyYXlPclR5cGVkQXJyYXkodi5jb2xvcik/di5jb2xvclt4JXYuY29sb3IubGVuZ3RoXTp2LmNvbG9yLHtjb2xvcjpnKGIpLHJhd0NvbG9yOmJ9KSxNPUErXCItXCIrVC5yYXdDb2xvcjt2b2lkIDA9PT13W01dJiYod1tNXT17Y2F0ZWdvcnlJbmRzOkEsY29sb3I6VC5jb2xvcixyYXdDb2xvcjpULnJhd0NvbG9yLHZhbHVlSW5kczpbXSxjb3VudDowfSksdSh3W01dLG0sZil9dmFyIFMsRT1yLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiByPWUsbj10Ll9pbmRleCxpPXQuX2Rpc3BsYXlpbmRleCxhPXQubGFiZWwse2RpbWVuc2lvbkluZDpyLGNvbnRhaW5lckluZDpuLGRpc3BsYXlJbmQ6aSxkaW1lbnNpb25MYWJlbDphLGNvdW50OnAsY2F0ZWdvcmllczpbXSxkcmFnWDpudWxsfTt2YXIgcixuLGksYX0pO2ZvcihtPTA7bTxfO20rKylmb3IoZj1oW20laC5sZW5ndGhdLHk9MDt5PEUubGVuZ3RoO3krKyl7dmFyIEM9RVt5XS5jb250YWluZXJJbmQsTD1kW3ldLmluZHNbbV0sej1FW3ldLmNhdGVnb3JpZXM7aWYodm9pZCAwPT09eltMXSl7dmFyIE89ZS5kaW1lbnNpb25zW0NdLl9jYXRlZ29yeWFycmF5W0xdLEk9ZS5kaW1lbnNpb25zW0NdLl90aWNrdGV4dFtMXTt6W0xdPXtkaW1lbnNpb25JbmQ6eSxjYXRlZ29yeUluZDpTPUwsY2F0ZWdvcnlWYWx1ZTpPLGRpc3BsYXlJbmQ6UyxjYXRlZ29yeUxhYmVsOkksdmFsdWVJbmRzOltdLGNvdW50OjAsZHJhZ1k6bnVsbH19Yyh6W0xdLG0sZil9cmV0dXJuIG4oZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3JpZXMubGVuZ3RofSkucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsZSl9KTtyZXR1cm57ZGltZW5zaW9uczp0LHBhdGhzOmUsdHJhY2U6dm9pZCAwLG1heENhdHM6bixjb3VudDpyfX0oRSx3LHApKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCI6NTg2LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnNcIjo1ODksXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvZmlsdGVyX3VuaXF1ZS5qc1wiOjY5MixcIi4uLy4uL2xpYi9ndXBcIjo2OTl9XSwxMDExOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVyc1wiKS5oYXNDb2xvcnNjYWxlLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiKSxvPXQoXCIuLi8uLi9wbG90cy9kb21haW5cIikuZGVmYXVsdHMscz10KFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCIpLGw9dChcIi4vYXR0cmlidXRlc1wiKSxjPXQoXCIuLi9wYXJjb29yZHMvbWVyZ2VfbGVuZ3RoXCIpO2Z1bmN0aW9uIHUodCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxsLmRpbWVuc2lvbnMscixpKX12YXIgaT1yKFwidmFsdWVzXCIpLGE9cihcInZpc2libGVcIik7aWYoaSYmaS5sZW5ndGh8fChhPWUudmlzaWJsZT0hMSksYSl7cihcImxhYmVsXCIpLHIoXCJkaXNwbGF5aW5kZXhcIixlLl9pbmRleCk7dmFyIG8scz10LmNhdGVnb3J5YXJyYXksYz1BcnJheS5pc0FycmF5KHMpJiZzLmxlbmd0aD4wO2MmJihvPVwiYXJyYXlcIik7dmFyIHU9cihcImNhdGVnb3J5b3JkZXJcIixvKTtcImFycmF5XCI9PT11PyhyKFwiY2F0ZWdvcnlhcnJheVwiKSxyKFwidGlja3RleHRcIikpOihkZWxldGUgdC5jYXRlZ29yeWFycmF5LGRlbGV0ZSB0LnRpY2t0ZXh0KSxjfHxcImFycmF5XCIhPT11fHwoZS5jYXRlZ29yeW9yZGVyPVwidHJhY2VcIil9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXtmdW5jdGlvbiBmKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxsLHIsaSl9dmFyIHA9cyh0LGUse25hbWU6XCJkaW1lbnNpb25zXCIsaGFuZGxlSXRlbURlZmF1bHRzOnV9KSxkPWZ1bmN0aW9uKHQsZSxyLG8scyl7cyhcImxpbmUuc2hhcGVcIikscyhcImxpbmUuaG92ZXJ0ZW1wbGF0ZVwiKTt2YXIgbD1zKFwibGluZS5jb2xvclwiLG8uY29sb3J3YXlbMF0pO2lmKGkodCxcImxpbmVcIikmJm4uaXNBcnJheU9yVHlwZWRBcnJheShsKSl7aWYobC5sZW5ndGgpcmV0dXJuIHMoXCJsaW5lLmNvbG9yc2NhbGVcIiksYSh0LGUsbyxzLHtwcmVmaXg6XCJsaW5lLlwiLGNMZXR0ZXI6XCJjXCJ9KSxsLmxlbmd0aDtlLmxpbmUuY29sb3I9cn1yZXR1cm4gMS8wfSh0LGUscixoLGYpO28oZSxoLGYpLEFycmF5LmlzQXJyYXkocCkmJnAubGVuZ3RofHwoZS52aXNpYmxlPSExKSxjKGUscCxcInZhbHVlc1wiLGQpLGYoXCJob3Zlcm9uXCIpLGYoXCJob3ZlcnRlbXBsYXRlXCIpLGYoXCJhcnJhbmdlbWVudFwiKSxmKFwiYnVuZGxlY29sb3JzXCIpLGYoXCJzb3J0cGF0aHNcIiksZihcImNvdW50c1wiKTt2YXIgZz17ZmFtaWx5OmguZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKGguZm9udC5zaXplKSxjb2xvcjpoLmZvbnQuY29sb3J9O24uY29lcmNlRm9udChmLFwibGFiZWxmb250XCIsZyk7dmFyIHY9e2ZhbWlseTpoLmZvbnQuZmFtaWx5LHNpemU6TWF0aC5yb3VuZChoLmZvbnQuc2l6ZS8xLjIpLGNvbG9yOmguZm9udC5jb2xvcn07bi5jb2VyY2VGb250KGYsXCJ0aWNrZm9udFwiLHYpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCI6NTg4LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnNcIjo1ODksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIjo3NDUsXCIuLi8uLi9wbG90cy9kb21haW5cIjo3NzQsXCIuLi9wYXJjb29yZHMvbWVyZ2VfbGVuZ3RoXCI6MTAyMyxcIi4vYXR0cmlidXRlc1wiOjEwMDh9XSwxMDEyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLnBsb3Q9dChcIi4vcGxvdFwiKSxuLmNvbG9yYmFyPXtjb250YWluZXI6XCJsaW5lXCIsbWluOlwiY21pblwiLG1heDpcImNtYXhcIn0sbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJwYXJjYXRzXCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi9iYXNlX3Bsb3RcIiksbi5jYXRlZ29yaWVzPVtcIm5vT3BhY2l0eVwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4vYXR0cmlidXRlc1wiOjEwMDgsXCIuL2Jhc2VfcGxvdFwiOjEwMDksXCIuL2NhbGNcIjoxMDEwLFwiLi9kZWZhdWx0c1wiOjEwMTEsXCIuL3Bsb3RcIjoxMDE0fV0sMTAxMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X2FwaVwiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4XCIpLG89dChcIi4uLy4uL2xpYlwiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksbD10KFwidGlueWNvbG9yMlwiKSxjPXQoXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIik7ZnVuY3Rpb24gdSh0LGUscixpKXt2YXIgYT10Lm1hcChmdW5jdGlvbih0LGUscil7dmFyIG4saT1yWzBdLGE9ZS5tYXJnaW58fHtsOjgwLHI6ODAsdDoxMDAsYjo4MH0sbz1pLnRyYWNlLHM9by5kb21haW4sbD1lLndpZHRoLGM9ZS5oZWlnaHQsdT1NYXRoLmZsb29yKGwqKHMueFsxXS1zLnhbMF0pKSxoPU1hdGguZmxvb3IoYyoocy55WzFdLXMueVswXSkpLGY9cy54WzBdKmwrYS5sLHA9ZS5oZWlnaHQtcy55WzFdKmUuaGVpZ2h0K2EudCxkPW8ubGluZS5zaGFwZTtuPVwiYWxsXCI9PT1vLmhvdmVyaW5mbz9bXCJjb3VudFwiLFwicHJvYmFiaWxpdHlcIl06KG8uaG92ZXJpbmZvfHxcIlwiKS5zcGxpdChcIitcIik7dmFyIGc9e3RyYWNlOm8sa2V5Om8udWlkLG1vZGVsOmkseDpmLHk6cCx3aWR0aDp1LGhlaWdodDpoLGhvdmVyb246by5ob3Zlcm9uLGhvdmVyaW5mb0l0ZW1zOm4sYXJyYW5nZW1lbnQ6by5hcnJhbmdlbWVudCxidW5kbGVjb2xvcnM6by5idW5kbGVjb2xvcnMsc29ydHBhdGhzOm8uc29ydHBhdGhzLGxhYmVsZm9udDpvLmxhYmVsZm9udCxjYXRlZ29yeWxhYmVsZm9udDpvLnRpY2tmb250LHBhdGhTaGFwZTpkLGRyYWdEaW1lbnNpb246bnVsbCxtYXJnaW46YSxwYXRoczpbXSxkaW1lbnNpb25zOltdLGdyYXBoRGl2OnQsdHJhY2VTZWxlY3Rpb246bnVsbCxwYXRoU2VsZWN0aW9uOm51bGwsZGltZW5zaW9uU2VsZWN0aW9uOm51bGx9O2kuZGltZW5zaW9ucyYmKFIoZyksUChnKSk7cmV0dXJuIGd9LmJpbmQoMCxlLHIpKSxsPWkuc2VsZWN0QWxsKFwiZy5wYXJjYXRzbGF5ZXJcIikuZGF0YShbbnVsbF0pO2wuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLFwicGFyY2F0c2xheWVyXCIpLnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixcImFsbFwiKTt2YXIgdT1sLnNlbGVjdEFsbChcImcudHJhY2UucGFyY2F0c1wiKS5kYXRhKGEsaCksdj11LmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIixcInRyYWNlIHBhcmNhdHNcIik7dS5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrdC54K1wiLCBcIit0LnkrXCIpXCJ9KSx2LmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsXCJwYXRoc1wiKTt2YXIgeD11LnNlbGVjdChcImcucGF0aHNcIikuc2VsZWN0QWxsKFwicGF0aC5wYXRoXCIpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQucGF0aHN9LGgpO3guYXR0cihcImZpbGxcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5tb2RlbC5jb2xvcn0pO3ZhciB3PXguZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJjbGFzc1wiLFwicGF0aFwiKS5hdHRyKFwic3Ryb2tlLW9wYWNpdHlcIiwwKS5hdHRyKFwiZmlsbFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmNvbG9yfSkuYXR0cihcImZpbGwtb3BhY2l0eVwiLDApO3kodykseC5hdHRyKFwiZFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnN2Z0R9KSx3LmVtcHR5KCl8fHguc29ydChwKSx4LmV4aXQoKS5yZW1vdmUoKSx4Lm9uKFwibW91c2VvdmVyXCIsZCkub24oXCJtb3VzZW91dFwiLGcpLm9uKFwiY2xpY2tcIixtKSx2LmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsXCJkaW1lbnNpb25zXCIpO3ZhciBrPXUuc2VsZWN0KFwiZy5kaW1lbnNpb25zXCIpLnNlbGVjdEFsbChcImcuZGltZW5zaW9uXCIpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGltZW5zaW9uc30saCk7ay5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsXCJkaW1lbnNpb25cIiksay5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrdC54K1wiLCAwKVwifSksay5leGl0KCkucmVtb3ZlKCk7dmFyIEE9ay5zZWxlY3RBbGwoXCJnLmNhdGVnb3J5XCIpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcmllc30saCksVD1BLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIixcImNhdGVnb3J5XCIpO0EuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKDAsIFwiK3QueStcIilcIn0pLFQuYXBwZW5kKFwicmVjdFwiKS5hdHRyKFwiY2xhc3NcIixcImNhdHJlY3RcIikuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsXCJub25lXCIpLEEuc2VsZWN0KFwicmVjdC5jYXRyZWN0XCIpLmF0dHIoXCJmaWxsXCIsXCJub25lXCIpLmF0dHIoXCJ3aWR0aFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRofSkuYXR0cihcImhlaWdodFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodH0pLGIoVCk7dmFyIHo9QS5zZWxlY3RBbGwoXCJyZWN0LmJhbmRyZWN0XCIpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQuYmFuZHN9LGgpO3ouZWFjaChmdW5jdGlvbigpe28ucmFpc2VUb1RvcCh0aGlzKX0pLHouYXR0cihcImZpbGxcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2xvcn0pO3ZhciBPPXouZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoXCJjbGFzc1wiLFwiYmFuZHJlY3RcIikuYXR0cihcInN0cm9rZS1vcGFjaXR5XCIsMCkuYXR0cihcImZpbGxcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2xvcn0pLmF0dHIoXCJmaWxsLW9wYWNpdHlcIiwwKTt6LmF0dHIoXCJmaWxsXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sb3J9KS5hdHRyKFwid2lkdGhcIixmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aH0pLmF0dHIoXCJoZWlnaHRcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KS5hdHRyKFwieVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KS5hdHRyKFwiY3Vyc29yXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJmaXhlZFwiPT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50P1wiZGVmYXVsdFwiOlwicGVycGVuZGljdWxhclwiPT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50P1wibnMtcmVzaXplXCI6XCJtb3ZlXCJ9KSxfKE8pLHouZXhpdCgpLnJlbW92ZSgpLFQuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwiY2xhc3NcIixcImNhdGxhYmVsXCIpLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLFwibm9uZVwiKTt2YXIgST1lLl9mdWxsTGF5b3V0LnBhcGVyX2JnY29sb3I7QS5zZWxlY3QoXCJ0ZXh0LmNhdGxhYmVsXCIpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpP1wic3RhcnRcIjpcImVuZFwifSkuYXR0cihcImFsaWdubWVudC1iYXNlbGluZVwiLFwibWlkZGxlXCIpLnN0eWxlKFwidGV4dC1zaGFkb3dcIixJK1wiIC0xcHggIDFweCAycHgsIFwiK0krXCIgMXB4ICAxcHggMnB4LCBcIitJK1wiICAxcHggLTFweCAycHgsIFwiK0krXCIgLTFweCAtMXB4IDJweFwiKS5zdHlsZShcImZpbGxcIixcInJnYigwLCAwLCAwKVwiKS5hdHRyKFwieFwiLGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpP3Qud2lkdGgrNTotNX0pLmF0dHIoXCJ5XCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0LzJ9KS50ZXh0KGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmNhdGVnb3J5TGFiZWx9KS5lYWNoKGZ1bmN0aW9uKHQpe3MuZm9udChuLnNlbGVjdCh0aGlzKSx0LnBhcmNhdHNWaWV3TW9kZWwuY2F0ZWdvcnlsYWJlbGZvbnQpLGMuY29udmVydFRvVHNwYW5zKG4uc2VsZWN0KHRoaXMpLGUpfSksVC5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJjbGFzc1wiLFwiZGltbGFiZWxcIiksQS5zZWxlY3QoXCJ0ZXh0LmRpbWxhYmVsXCIpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLFwibWlkZGxlXCIpLmF0dHIoXCJhbGlnbm1lbnQtYmFzZWxpbmVcIixcImJhc2VsaW5lXCIpLmF0dHIoXCJjdXJzb3JcIixmdW5jdGlvbih0KXtyZXR1cm5cImZpeGVkXCI9PT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQ/XCJkZWZhdWx0XCI6XCJldy1yZXNpemVcIn0pLmF0dHIoXCJ4XCIsZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGgvMn0pLmF0dHIoXCJ5XCIsLTUpLnRleHQoZnVuY3Rpb24odCxlKXtyZXR1cm4gMD09PWU/dC5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmRpbWVuc2lvbnNbdC5tb2RlbC5kaW1lbnNpb25JbmRdLmRpbWVuc2lvbkxhYmVsOm51bGx9KS5lYWNoKGZ1bmN0aW9uKHQpe3MuZm9udChuLnNlbGVjdCh0aGlzKSx0LnBhcmNhdHNWaWV3TW9kZWwubGFiZWxmb250KX0pLEEuc2VsZWN0QWxsKFwicmVjdC5iYW5kcmVjdFwiKS5vbihcIm1vdXNlb3ZlclwiLE0pLm9uKFwibW91c2VvdXRcIixTKSxBLmV4aXQoKS5yZW1vdmUoKSxrLmNhbGwobi5iZWhhdmlvci5kcmFnKCkub3JpZ2luKGZ1bmN0aW9uKHQpe3JldHVybnt4OnQueCx5OjB9fSkub24oXCJkcmFnc3RhcnRcIixFKS5vbihcImRyYWdcIixDKS5vbihcImRyYWdlbmRcIixMKSksdS5lYWNoKGZ1bmN0aW9uKHQpe3QudHJhY2VTZWxlY3Rpb249bi5zZWxlY3QodGhpcyksdC5wYXRoU2VsZWN0aW9uPW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbChcImcucGF0aHNcIikuc2VsZWN0QWxsKFwicGF0aC5wYXRoXCIpLHQuZGltZW5zaW9uU2VsZWN0aW9uPW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbChcImcuZGltZW5zaW9uc1wiKS5zZWxlY3RBbGwoXCJnLmRpbWVuc2lvblwiKX0pLHUuZXhpdCgpLnJlbW92ZSgpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQua2V5fWZ1bmN0aW9uIGYodCl7dmFyIGU9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnMubGVuZ3RoLHI9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbZS0xXS5tb2RlbC5kaW1lbnNpb25JbmQ7cmV0dXJuIHQubW9kZWwuZGltZW5zaW9uSW5kPT09cn1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIHQubW9kZWwucmF3Q29sb3I+ZS5tb2RlbC5yYXdDb2xvcj8xOnQubW9kZWwucmF3Q29sb3I8ZS5tb2RlbC5yYXdDb2xvcj8tMTowfWZ1bmN0aW9uIGQodCl7aWYoIXQucGFyY2F0c1ZpZXdNb2RlbC5kcmFnRGltZW5zaW9uJiYtMT09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKFwic2tpcFwiKSl7by5yYWlzZVRvVG9wKHRoaXMpLHgobi5zZWxlY3QodGhpcykpO3ZhciBlPXYodCk7aWYodC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LmVtaXQoXCJwbG90bHlfaG92ZXJcIix7cG9pbnRzOmUsZXZlbnQ6bi5ldmVudH0pLC0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoXCJub25lXCIpKXt2YXIgcixpLHMsYz1uLm1vdXNlKHRoaXMpWzBdLHU9dC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LGg9dC5wYXJjYXRzVmlld01vZGVsLnRyYWNlLGY9dS5fZnVsbExheW91dCxwPWYuX3BhcGVyZGl2Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPXQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtmb3Iocz0wO3M8dC5sZWZ0WHMubGVuZ3RoLTE7cysrKWlmKHQubGVmdFhzW3NdK3QuZGltV2lkdGhzW3NdLTI8PWMmJmM8PXQubGVmdFhzW3MrMV0rMil7dmFyIGc9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbc10sbT10LnBhcmNhdHNWaWV3TW9kZWwuZGltZW5zaW9uc1tzKzFdO3I9KGcueCtnLndpZHRoK20ueCkvMixpPSh0LnRvcFlzW3NdK3QudG9wWXNbcysxXSt0LmhlaWdodCkvMjticmVha312YXIgeT10LnBhcmNhdHNWaWV3TW9kZWwueCtyLGI9dC5wYXJjYXRzVmlld01vZGVsLnkraSxfPWwubW9zdFJlYWRhYmxlKHQubW9kZWwuY29sb3IsW1wiYmxhY2tcIixcIndoaXRlXCJdKSx3PXQubW9kZWwuY291bnQsaz13L3QucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5jb3VudCxBPXtjb3VudExhYmVsOncscHJvYmFiaWxpdHlMYWJlbDprLnRvRml4ZWQoMyl9LFQ9W107LTEhPT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZihcImNvdW50XCIpJiZULnB1c2goW1wiQ291bnQ6XCIsQS5jb3VudExhYmVsXS5qb2luKFwiIFwiKSksLTEhPT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZihcInByb2JhYmlsaXR5XCIpJiZULnB1c2goW1wiUDpcIixBLnByb2JhYmlsaXR5TGFiZWxdLmpvaW4oXCIgXCIpKTt2YXIgTT1ULmpvaW4oXCI8YnI+XCIpLFM9bi5tb3VzZSh1KVswXTthLmxvbmVIb3Zlcih7dHJhY2U6aCx4OnktcC5sZWZ0K2QubGVmdCx5OmItcC50b3ArZC50b3AsdGV4dDpNLGNvbG9yOnQubW9kZWwuY29sb3IsYm9yZGVyQ29sb3I6XCJibGFja1wiLGZvbnRGYW1pbHk6J01vbmFjbywgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2UnLGZvbnRTaXplOjEwLGZvbnRDb2xvcjpfLGlkZWFsQWxpZ246Uzx5P1wicmlnaHRcIjpcImxlZnRcIixob3ZlcnRlbXBsYXRlOihoLmxpbmV8fHt9KS5ob3ZlcnRlbXBsYXRlLGhvdmVydGVtcGxhdGVMYWJlbHM6QSxldmVudERhdGE6W3tkYXRhOmguX2lucHV0LGZ1bGxEYXRhOmgsY291bnQ6dyxwcm9iYWJpbGl0eTprfV19LHtjb250YWluZXI6Zi5faG92ZXJsYXllci5ub2RlKCksb3V0ZXJDb250YWluZXI6Zi5fcGFwZXIubm9kZSgpLGdkOnV9KX19fWZ1bmN0aW9uIGcodCl7aWYoIXQucGFyY2F0c1ZpZXdNb2RlbC5kcmFnRGltZW5zaW9uJiYoeShuLnNlbGVjdCh0aGlzKSksYS5sb25lVW5ob3Zlcih0LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQuX2hvdmVybGF5ZXIubm9kZSgpKSx0LnBhcmNhdHNWaWV3TW9kZWwucGF0aFNlbGVjdGlvbi5zb3J0KHApLC0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoXCJza2lwXCIpKSl7dmFyIGU9dih0KTt0LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYuZW1pdChcInBsb3RseV91bmhvdmVyXCIse3BvaW50czplLGV2ZW50Om4uZXZlbnR9KX19ZnVuY3Rpb24gdih0KXtmb3IodmFyIGU9W10scj16KHQucGFyY2F0c1ZpZXdNb2RlbCksbj0wO248dC5tb2RlbC52YWx1ZUluZHMubGVuZ3RoO24rKyl7dmFyIGk9dC5tb2RlbC52YWx1ZUluZHNbbl07ZS5wdXNoKHtjdXJ2ZU51bWJlcjpyLHBvaW50TnVtYmVyOml9KX1yZXR1cm4gZX1mdW5jdGlvbiBtKHQpe2lmKC0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoXCJza2lwXCIpKXt2YXIgZT12KHQpO3QucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdi5lbWl0KFwicGxvdGx5X2NsaWNrXCIse3BvaW50czplLGV2ZW50Om4uZXZlbnR9KX19ZnVuY3Rpb24geSh0KXt0LmF0dHIoXCJmaWxsXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQubW9kZWwuY29sb3J9KS5hdHRyKFwiZmlsbC1vcGFjaXR5XCIsLjYpLmF0dHIoXCJzdHJva2VcIixcImxpZ2h0Z3JheVwiKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsLjIpLmF0dHIoXCJzdHJva2Utb3BhY2l0eVwiLDEpfWZ1bmN0aW9uIHgodCl7dC5hdHRyKFwiZmlsbC1vcGFjaXR5XCIsLjgpLmF0dHIoXCJzdHJva2VcIixmdW5jdGlvbih0KXtyZXR1cm4gbC5tb3N0UmVhZGFibGUodC5tb2RlbC5jb2xvcixbXCJibGFja1wiLFwid2hpdGVcIl0pfSkuYXR0cihcInN0cm9rZS13aWR0aFwiLC4zKX1mdW5jdGlvbiBiKHQpe3Quc2VsZWN0KFwicmVjdC5jYXRyZWN0XCIpLmF0dHIoXCJzdHJva2VcIixcImJsYWNrXCIpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwxKS5hdHRyKFwic3Ryb2tlLW9wYWNpdHlcIiwxKX1mdW5jdGlvbiBfKHQpe3QuYXR0cihcInN0cm9rZVwiLFwiYmxhY2tcIikuYXR0cihcInN0cm9rZS13aWR0aFwiLC4yKS5hdHRyKFwic3Ryb2tlLW9wYWNpdHlcIiwxKS5hdHRyKFwiZmlsbC1vcGFjaXR5XCIsMSl9ZnVuY3Rpb24gdyh0KXt2YXIgZT10LnBhcmNhdHNWaWV3TW9kZWwucGF0aFNlbGVjdGlvbixyPXQuY2F0ZWdvcnlWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9uSW5kLG49dC5jYXRlZ29yeVZpZXdNb2RlbC5tb2RlbC5jYXRlZ29yeUluZDtyZXR1cm4gZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUubW9kZWwuY2F0ZWdvcnlJbmRzW3JdPT09biYmZS5tb2RlbC5jb2xvcj09PXQuY29sb3J9KX1mdW5jdGlvbiBrKHQsZSxyKXt2YXIgaT1uLnNlbGVjdCh0KS5kYXR1bSgpLnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYsYT1uLnNlbGVjdCh0LnBhcmVudE5vZGUpLnNlbGVjdEFsbChcInJlY3QuYmFuZHJlY3RcIiksbz1bXTthLmVhY2goZnVuY3Rpb24odCl7dyh0KS5lYWNoKGZ1bmN0aW9uKHQpe0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG8sdih0KSl9KX0pLGkuZW1pdChlLHtwb2ludHM6byxldmVudDpyfSl9ZnVuY3Rpb24gQSh0LGUscil7dmFyIGk9bi5zZWxlY3QodCkuZGF0dW0oKSxhPWkucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdixvPXcoaSkscz1bXTtvLmVhY2goZnVuY3Rpb24odCl7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkocyx2KHQpKX0pLGEuZW1pdChlLHtwb2ludHM6cyxldmVudDpyfSl9ZnVuY3Rpb24gVCh0LGUpe3ZhciByLGksYT1uLnNlbGVjdChlLnBhcmVudE5vZGUpLnNlbGVjdChcInJlY3QuY2F0cmVjdFwiKSxvPWEubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9YS5kYXR1bSgpLGw9cy5wYXJjYXRzVmlld01vZGVsLGM9bC5tb2RlbC5kaW1lbnNpb25zW3MubW9kZWwuZGltZW5zaW9uSW5kXSx1PWwudHJhY2UsaD1vLnRvcCtvLmhlaWdodC8yO2wuZGltZW5zaW9ucy5sZW5ndGg+MSYmYy5kaXNwbGF5SW5kPT09bC5kaW1lbnNpb25zLmxlbmd0aC0xPyhyPW8ubGVmdCxpPVwibGVmdFwiKToocj1vLmxlZnQrby53aWR0aCxpPVwicmlnaHRcIik7dmFyIGY9cy5tb2RlbC5jb3VudCxwPXMubW9kZWwuY2F0ZWdvcnlMYWJlbCxkPWYvcy5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmNvdW50LGc9e2NvdW50TGFiZWw6ZixjYXRlZ29yeUxhYmVsOnAscHJvYmFiaWxpdHlMYWJlbDpkLnRvRml4ZWQoMyl9LHY9W107LTEhPT1zLnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZihcImNvdW50XCIpJiZ2LnB1c2goW1wiQ291bnQ6XCIsZy5jb3VudExhYmVsXS5qb2luKFwiIFwiKSksLTEhPT1zLnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZihcInByb2JhYmlsaXR5XCIpJiZ2LnB1c2goW1wiUChcIitnLmNhdGVnb3J5TGFiZWwrXCIpOlwiLGcucHJvYmFiaWxpdHlMYWJlbF0uam9pbihcIiBcIikpO3ZhciBtPXYuam9pbihcIjxicj5cIik7cmV0dXJue3RyYWNlOnUseDpyLXQubGVmdCx5OmgtdC50b3AsdGV4dDptLGNvbG9yOlwibGlnaHRncmF5XCIsYm9yZGVyQ29sb3I6XCJibGFja1wiLGZvbnRGYW1pbHk6J01vbmFjbywgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2UnLGZvbnRTaXplOjEyLGZvbnRDb2xvcjpcImJsYWNrXCIsaWRlYWxBbGlnbjppLGhvdmVydGVtcGxhdGU6dS5ob3ZlcnRlbXBsYXRlLGhvdmVydGVtcGxhdGVMYWJlbHM6ZyxldmVudERhdGE6W3tkYXRhOnUuX2lucHV0LGZ1bGxEYXRhOnUsY291bnQ6ZixjYXRlZ29yeTpwLHByb2JhYmlsaXR5OmR9XX19ZnVuY3Rpb24gTSh0KXtpZighdC5wYXJjYXRzVmlld01vZGVsLmRyYWdEaW1lbnNpb24mJi0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoXCJza2lwXCIpKXtpZihuLm1vdXNlKHRoaXMpWzFdPC0xKXJldHVybjt2YXIgZSxyPXQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdixpPXIuX2Z1bGxMYXlvdXQscz1pLl9wYXBlcmRpdi5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYz10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJvbjtpZihcImNvbG9yXCI9PT1jPyghZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkuZGF0dW0oKSxyPXcoZSk7eChyKSxyLmVhY2goZnVuY3Rpb24oKXtvLnJhaXNlVG9Ub3AodGhpcyl9KSxuLnNlbGVjdCh0LnBhcmVudE5vZGUpLnNlbGVjdEFsbChcInJlY3QuYmFuZHJlY3RcIikuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yPT09ZS5jb2xvcn0pLmVhY2goZnVuY3Rpb24oKXtvLnJhaXNlVG9Ub3AodGhpcyksbi5zZWxlY3QodGhpcykuYXR0cihcInN0cm9rZVwiLFwiYmxhY2tcIikuYXR0cihcInN0cm9rZS13aWR0aFwiLDEuNSl9KX0odGhpcyksQSh0aGlzLFwicGxvdGx5X2hvdmVyXCIsbi5ldmVudCkpOighZnVuY3Rpb24odCl7bi5zZWxlY3QodC5wYXJlbnROb2RlKS5zZWxlY3RBbGwoXCJyZWN0LmJhbmRyZWN0XCIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dyh0KTt4KGUpLGUuZWFjaChmdW5jdGlvbigpe28ucmFpc2VUb1RvcCh0aGlzKX0pfSksbi5zZWxlY3QodC5wYXJlbnROb2RlKS5zZWxlY3QoXCJyZWN0LmNhdHJlY3RcIikuYXR0cihcInN0cm9rZVwiLFwiYmxhY2tcIikuYXR0cihcInN0cm9rZS13aWR0aFwiLDIuNSl9KHRoaXMpLGsodGhpcyxcInBsb3RseV9ob3ZlclwiLG4uZXZlbnQpKSwtMT09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKFwibm9uZVwiKSlcImNhdGVnb3J5XCI9PT1jP2U9VChzLHRoaXMpOlwiY29sb3JcIj09PWM/ZT1mdW5jdGlvbih0LGUpe3ZhciByLGksYT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89bi5zZWxlY3QoZSkuZGF0dW0oKSxzPW8uY2F0ZWdvcnlWaWV3TW9kZWwsYz1zLnBhcmNhdHNWaWV3TW9kZWwsdT1jLm1vZGVsLmRpbWVuc2lvbnNbcy5tb2RlbC5kaW1lbnNpb25JbmRdLGg9Yy50cmFjZSxmPWEueSthLmhlaWdodC8yO2MuZGltZW5zaW9ucy5sZW5ndGg+MSYmdS5kaXNwbGF5SW5kPT09Yy5kaW1lbnNpb25zLmxlbmd0aC0xPyhyPWEubGVmdCxpPVwibGVmdFwiKToocj1hLmxlZnQrYS53aWR0aCxpPVwicmlnaHRcIik7dmFyIHA9cy5tb2RlbC5jYXRlZ29yeUxhYmVsLGQ9by5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmNvdW50LGc9MDtvLmNhdGVnb3J5Vmlld01vZGVsLmJhbmRzLmZvckVhY2goZnVuY3Rpb24odCl7dC5jb2xvcj09PW8uY29sb3ImJihnKz10LmNvdW50KX0pO3ZhciB2PXMubW9kZWwuY291bnQsbT0wO2MucGF0aFNlbGVjdGlvbi5lYWNoKGZ1bmN0aW9uKHQpe3QubW9kZWwuY29sb3I9PT1vLmNvbG9yJiYobSs9dC5tb2RlbC5jb3VudCl9KTt2YXIgeT1nL2QseD1nL20sYj1nL3YsXz17Y291bnRMYWJlbDpkLGNhdGVnb3J5TGFiZWw6cCxwcm9iYWJpbGl0eUxhYmVsOnkudG9GaXhlZCgzKX0sdz1bXTstMSE9PXMucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKFwiY291bnRcIikmJncucHVzaChbXCJDb3VudDpcIixfLmNvdW50TGFiZWxdLmpvaW4oXCIgXCIpKSwtMSE9PXMucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKFwicHJvYmFiaWxpdHlcIikmJih3LnB1c2goXCJQKGNvbG9yIFxcdTIyMjkgXCIrcCtcIik6IFwiK18ucHJvYmFiaWxpdHlMYWJlbCksdy5wdXNoKFwiUChcIitwK1wiIHwgY29sb3IpOiBcIit4LnRvRml4ZWQoMykpLHcucHVzaChcIlAoY29sb3IgfCBcIitwK1wiKTogXCIrYi50b0ZpeGVkKDMpKSk7dmFyIGs9dy5qb2luKFwiPGJyPlwiKSxBPWwubW9zdFJlYWRhYmxlKG8uY29sb3IsW1wiYmxhY2tcIixcIndoaXRlXCJdKTtyZXR1cm57dHJhY2U6aCx4OnItdC5sZWZ0LHk6Zi10LnRvcCx0ZXh0OmssY29sb3I6by5jb2xvcixib3JkZXJDb2xvcjpcImJsYWNrXCIsZm9udEZhbWlseTonTW9uYWNvLCBcIkNvdXJpZXIgTmV3XCIsIG1vbm9zcGFjZScsZm9udENvbG9yOkEsZm9udFNpemU6MTAsaWRlYWxBbGlnbjppLGhvdmVydGVtcGxhdGU6aC5ob3ZlcnRlbXBsYXRlLGhvdmVydGVtcGxhdGVMYWJlbHM6XyxldmVudERhdGE6W3tkYXRhOmguX2lucHV0LGZ1bGxEYXRhOmgsY2F0ZWdvcnk6cCxjb3VudDpkLHByb2JhYmlsaXR5OnksY2F0ZWdvcnljb3VudDp2LGNvbG9yY291bnQ6bSxiYW5kY29sb3Jjb3VudDpnfV19fShzLHRoaXMpOlwiZGltZW5zaW9uXCI9PT1jJiYoZT1mdW5jdGlvbih0LGUpe3ZhciByPVtdO3JldHVybiBuLnNlbGVjdChlLnBhcmVudE5vZGUucGFyZW50Tm9kZSkuc2VsZWN0QWxsKFwiZy5jYXRlZ29yeVwiKS5zZWxlY3QoXCJyZWN0LmNhdHJlY3RcIikuZWFjaChmdW5jdGlvbigpe3IucHVzaChUKHQsdGhpcykpfSkscn0ocyx0aGlzKSksZSYmYS5tdWx0aUhvdmVycyhlLHtjb250YWluZXI6aS5faG92ZXJsYXllci5ub2RlKCksb3V0ZXJDb250YWluZXI6aS5fcGFwZXIubm9kZSgpLGdkOnJ9KX19ZnVuY3Rpb24gUyh0KXt2YXIgZT10LnBhcmNhdHNWaWV3TW9kZWw7aWYoIWUuZHJhZ0RpbWVuc2lvbiYmKHkoZS5wYXRoU2VsZWN0aW9uKSxiKGUuZGltZW5zaW9uU2VsZWN0aW9uLnNlbGVjdEFsbChcImcuY2F0ZWdvcnlcIikpLF8oZS5kaW1lbnNpb25TZWxlY3Rpb24uc2VsZWN0QWxsKFwiZy5jYXRlZ29yeVwiKS5zZWxlY3RBbGwoXCJyZWN0LmJhbmRyZWN0XCIpKSxhLmxvbmVVbmhvdmVyKGUuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQuX2hvdmVybGF5ZXIubm9kZSgpKSxlLnBhdGhTZWxlY3Rpb24uc29ydChwKSwtMT09PWUuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZihcInNraXBcIikpKXtcImNvbG9yXCI9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJvbj9BKHRoaXMsXCJwbG90bHlfdW5ob3ZlclwiLG4uZXZlbnQpOmsodGhpcyxcInBsb3RseV91bmhvdmVyXCIsbi5ldmVudCl9fWZ1bmN0aW9uIEUodCl7XCJmaXhlZFwiIT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50JiYodC5kcmFnRGltZW5zaW9uRGlzcGxheUluZD10Lm1vZGVsLmRpc3BsYXlJbmQsdC5pbml0aWFsRHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmRzPXQucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5SW5kfSksdC5kcmFnSGFzTW92ZWQ9ITEsdC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kPW51bGwsbi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKFwiZy5jYXRlZ29yeVwiKS5zZWxlY3QoXCJyZWN0LmNhdHJlY3RcIikuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLm1vdXNlKHRoaXMpWzBdLGk9bi5tb3VzZSh0aGlzKVsxXTstMjw9ciYmcjw9ZS53aWR0aCsyJiYtMjw9aSYmaTw9ZS5oZWlnaHQrMiYmKHQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZD1lLm1vZGVsLmRpc3BsYXlJbmQsdC5pbml0aWFsRHJhZ0NhdGVnb3J5RGlzcGxheUluZHM9dC5tb2RlbC5jYXRlZ29yaWVzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5SW5kfSksZS5tb2RlbC5kcmFnWT1lLnksby5yYWlzZVRvVG9wKHRoaXMucGFyZW50Tm9kZSksbi5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5zZWxlY3RBbGwoXCJyZWN0LmJhbmRyZWN0XCIpLmVhY2goZnVuY3Rpb24oZSl7ZS55PGkmJmk8PWUueStlLmhlaWdodCYmKHQucG90ZW50aWFsQ2xpY2tCYW5kPXRoaXMpfSkpfSksdC5wYXJjYXRzVmlld01vZGVsLmRyYWdEaW1lbnNpb249dCxhLmxvbmVVbmhvdmVyKHQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdi5fZnVsbExheW91dC5faG92ZXJsYXllci5ub2RlKCkpKX1mdW5jdGlvbiBDKHQpe2lmKFwiZml4ZWRcIiE9PXQucGFyY2F0c1ZpZXdNb2RlbC5hcnJhbmdlbWVudCYmKHQuZHJhZ0hhc01vdmVkPSEwLG51bGwhPT10LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kKSl7dmFyIGU9dC5kcmFnRGltZW5zaW9uRGlzcGxheUluZCxyPWUtMSxpPWUrMSxhPXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW2VdO2lmKG51bGwhPT10LmRyYWdDYXRlZ29yeURpc3BsYXlJbmQpe3ZhciBvPWEuY2F0ZWdvcmllc1t0LmRyYWdDYXRlZ29yeURpc3BsYXlJbmRdO28ubW9kZWwuZHJhZ1krPW4uZXZlbnQuZHk7dmFyIHM9by5tb2RlbC5kcmFnWSxsPW8ubW9kZWwuZGlzcGxheUluZCxjPWEuY2F0ZWdvcmllcyx1PWNbbC0xXSxoPWNbbCsxXTt2b2lkIDAhPT11JiZzPHUueSt1LmhlaWdodC8yJiYoby5tb2RlbC5kaXNwbGF5SW5kPXUubW9kZWwuZGlzcGxheUluZCx1Lm1vZGVsLmRpc3BsYXlJbmQ9bCksdm9pZCAwIT09aCYmcytvLmhlaWdodD5oLnkraC5oZWlnaHQvMiYmKG8ubW9kZWwuZGlzcGxheUluZD1oLm1vZGVsLmRpc3BsYXlJbmQsaC5tb2RlbC5kaXNwbGF5SW5kPWwpLHQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZD1vLm1vZGVsLmRpc3BsYXlJbmR9aWYobnVsbD09PXQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZHx8XCJmcmVlZm9ybVwiPT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50KXthLm1vZGVsLmRyYWdYPW4uZXZlbnQueDt2YXIgZj10LnBhcmNhdHNWaWV3TW9kZWwuZGltZW5zaW9uc1tyXSxwPXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW2ldO3ZvaWQgMCE9PWYmJmEubW9kZWwuZHJhZ1g8Zi54K2Yud2lkdGgmJihhLm1vZGVsLmRpc3BsYXlJbmQ9Zi5tb2RlbC5kaXNwbGF5SW5kLGYubW9kZWwuZGlzcGxheUluZD1lKSx2b2lkIDAhPT1wJiZhLm1vZGVsLmRyYWdYK2Eud2lkdGg+cC54JiYoYS5tb2RlbC5kaXNwbGF5SW5kPXAubW9kZWwuZGlzcGxheUluZCxwLm1vZGVsLmRpc3BsYXlJbmQ9dC5kcmFnRGltZW5zaW9uRGlzcGxheUluZCksdC5kcmFnRGltZW5zaW9uRGlzcGxheUluZD1hLm1vZGVsLmRpc3BsYXlJbmR9Uih0LnBhcmNhdHNWaWV3TW9kZWwpLFAodC5wYXJjYXRzVmlld01vZGVsKSxJKHQucGFyY2F0c1ZpZXdNb2RlbCksTyh0LnBhcmNhdHNWaWV3TW9kZWwpfX1mdW5jdGlvbiBMKHQpe2lmKFwiZml4ZWRcIiE9PXQucGFyY2F0c1ZpZXdNb2RlbC5hcnJhbmdlbWVudCYmbnVsbCE9PXQuZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmQpe24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbChcInRleHRcIikuYXR0cihcImZvbnQtd2VpZ2h0XCIsXCJub3JtYWxcIik7dmFyIGU9e30scj16KHQucGFyY2F0c1ZpZXdNb2RlbCksYT10LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheUluZH0pLG89dC5pbml0aWFsRHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmRzLnNvbWUoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCE9PWFbZV19KTtvJiZhLmZvckVhY2goZnVuY3Rpb24ocixuKXt2YXIgaT10LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9uc1tuXS5jb250YWluZXJJbmQ7ZVtcImRpbWVuc2lvbnNbXCIraStcIl0uZGlzcGxheWluZGV4XCJdPXJ9KTt2YXIgcz0hMTtpZihudWxsIT09dC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kKXt2YXIgbD10Lm1vZGVsLmNhdGVnb3JpZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3BsYXlJbmR9KTtpZihzPXQuaW5pdGlhbERyYWdDYXRlZ29yeURpc3BsYXlJbmRzLnNvbWUoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCE9PWxbZV19KSl7dmFyIGM9dC5tb2RlbC5jYXRlZ29yaWVzLnNsaWNlKCkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmRpc3BsYXlJbmQtZS5kaXNwbGF5SW5kfSksdT1jLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yeVZhbHVlfSksaD1jLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yeUxhYmVsfSk7ZVtcImRpbWVuc2lvbnNbXCIrdC5tb2RlbC5jb250YWluZXJJbmQrXCJdLmNhdGVnb3J5YXJyYXlcIl09W3VdLGVbXCJkaW1lbnNpb25zW1wiK3QubW9kZWwuY29udGFpbmVySW5kK1wiXS50aWNrdGV4dFwiXT1baF0sZVtcImRpbWVuc2lvbnNbXCIrdC5tb2RlbC5jb250YWluZXJJbmQrXCJdLmNhdGVnb3J5b3JkZXJcIl09XCJhcnJheVwifX1pZigtMT09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKFwic2tpcFwiKSYmIXQuZHJhZ0hhc01vdmVkJiZ0LnBvdGVudGlhbENsaWNrQmFuZCYmKFwiY29sb3JcIj09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3Zlcm9uP0EodC5wb3RlbnRpYWxDbGlja0JhbmQsXCJwbG90bHlfY2xpY2tcIixuLmV2ZW50LnNvdXJjZUV2ZW50KTprKHQucG90ZW50aWFsQ2xpY2tCYW5kLFwicGxvdGx5X2NsaWNrXCIsbi5ldmVudC5zb3VyY2VFdmVudCkpLHQubW9kZWwuZHJhZ1g9bnVsbCxudWxsIT09dC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kKXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW3QuZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmRdLmNhdGVnb3JpZXNbdC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kXS5tb2RlbC5kcmFnWT1udWxsLHQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZD1udWxsO3QuZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmQ9bnVsbCx0LnBhcmNhdHNWaWV3TW9kZWwuZHJhZ0RpbWVuc2lvbj1udWxsLHQuZHJhZ0hhc01vdmVkPW51bGwsdC5wb3RlbnRpYWxDbGlja0JhbmQ9bnVsbCxSKHQucGFyY2F0c1ZpZXdNb2RlbCksUCh0LnBhcmNhdHNWaWV3TW9kZWwpLG4udHJhbnNpdGlvbigpLmR1cmF0aW9uKDMwMCkuZWFzZShcImN1YmljLWluLW91dFwiKS5lYWNoKGZ1bmN0aW9uKCl7SSh0LnBhcmNhdHNWaWV3TW9kZWwsITApLE8odC5wYXJjYXRzVmlld01vZGVsLCEwKX0pLmVhY2goXCJlbmRcIixmdW5jdGlvbigpeyhvfHxzKSYmaS5yZXN0eWxlKHQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdixlLFtyXSl9KX19ZnVuY3Rpb24geih0KXtmb3IodmFyIGUscj10LmdyYXBoRGl2Ll9mdWxsRGF0YSxuPTA7bjxyLmxlbmd0aDtuKyspaWYodC5rZXk9PT1yW25dLnVpZCl7ZT1uO2JyZWFrfXJldHVybiBlfWZ1bmN0aW9uIE8odCxlKXt2YXIgcjt2b2lkIDA9PT1lJiYoZT0hMSksdC5wYXRoU2VsZWN0aW9uLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQucGF0aHN9LGgpLChyPXQucGF0aFNlbGVjdGlvbixlP3IudHJhbnNpdGlvbigpOnIpLmF0dHIoXCJkXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuc3ZnRH0pfWZ1bmN0aW9uIEkodCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlP3QudHJhbnNpdGlvbigpOnR9dm9pZCAwPT09ZSYmKGU9ITEpLHQuZGltZW5zaW9uU2VsZWN0aW9uLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGltZW5zaW9uc30saCk7dmFyIGk9dC5kaW1lbnNpb25TZWxlY3Rpb24uc2VsZWN0QWxsKFwiZy5jYXRlZ29yeVwiKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3JpZXN9LGgpO3IodC5kaW1lbnNpb25TZWxlY3Rpb24pLmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXtyZXR1cm5cInRyYW5zbGF0ZShcIit0LngrXCIsIDApXCJ9KSxyKGkpLmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXtyZXR1cm5cInRyYW5zbGF0ZSgwLCBcIit0LnkrXCIpXCJ9KSxpLnNlbGVjdChcIi5kaW1sYWJlbFwiKS50ZXh0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT1lP3QucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25zW3QubW9kZWwuZGltZW5zaW9uSW5kXS5kaW1lbnNpb25MYWJlbDpudWxsfSksaS5zZWxlY3QoXCIuY2F0bGFiZWxcIikuYXR0cihcInRleHQtYW5jaG9yXCIsZnVuY3Rpb24odCl7cmV0dXJuIGYodCk/XCJzdGFydFwiOlwiZW5kXCJ9KS5hdHRyKFwieFwiLGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpP3Qud2lkdGgrNTotNX0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGUscjtmKHQpPyhlPXQud2lkdGgrNSxyPVwic3RhcnRcIik6KGU9LTUscj1cImVuZFwiKSxuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoXCJ0c3BhblwiKS5hdHRyKFwieFwiLGUpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLHIpfSk7dmFyIGE9aS5zZWxlY3RBbGwoXCJyZWN0LmJhbmRyZWN0XCIpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQuYmFuZHN9LGgpLHM9YS5lbnRlcigpLmFwcGVuZChcInJlY3RcIikuYXR0cihcImNsYXNzXCIsXCJiYW5kcmVjdFwiKS5hdHRyKFwiY3Vyc29yXCIsXCJtb3ZlXCIpLmF0dHIoXCJzdHJva2Utb3BhY2l0eVwiLDApLmF0dHIoXCJmaWxsXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sb3J9KS5hdHRyKFwiZmlsbC1vcGFjaXR5XCIsMCk7YS5hdHRyKFwiZmlsbFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yfSkuYXR0cihcIndpZHRoXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGh9KS5hdHRyKFwiaGVpZ2h0XCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkuYXR0cihcInlcIixmdW5jdGlvbih0KXtyZXR1cm4gdC55fSksXyhzKSxhLmVhY2goZnVuY3Rpb24oKXtvLnJhaXNlVG9Ub3AodGhpcyl9KSxhLmV4aXQoKS5yZW1vdmUoKX1mdW5jdGlvbiBEKHQsZSxyLGksYSl7dmFyIG8scyxsPVtdLGM9W107Zm9yKHM9MDtzPHIubGVuZ3RoLTE7cysrKW89bi5pbnRlcnBvbGF0ZU51bWJlcihyW3NdK3Rbc10sdFtzKzFdKSxsLnB1c2gobyhhKSksYy5wdXNoKG8oMS1hKSk7dmFyIHU9XCJNIFwiK3RbMF0rXCIsXCIrZVswXTtmb3IodSs9XCJsXCIrclswXStcIiwwIFwiLHM9MTtzPHIubGVuZ3RoO3MrKyl1Kz1cIkNcIitsW3MtMV0rXCIsXCIrZVtzLTFdK1wiIFwiK2Nbcy0xXStcIixcIitlW3NdK1wiIFwiK3Rbc10rXCIsXCIrZVtzXSx1Kz1cImxcIityW3NdK1wiLDAgXCI7Zm9yKHUrPVwibDAsXCIraStcIiBcIix1Kz1cImwgLVwiK3Jbci5sZW5ndGgtMV0rXCIsMCBcIixzPXIubGVuZ3RoLTI7cz49MDtzLS0pdSs9XCJDXCIrY1tzXStcIixcIisoZVtzKzFdK2kpK1wiIFwiK2xbc10rXCIsXCIrKGVbc10raSkrXCIgXCIrKHRbc10rcltzXSkrXCIsXCIrKGVbc10raSksdSs9XCJsLVwiK3Jbc10rXCIsMCBcIjtyZXR1cm4gdSs9XCJaXCJ9ZnVuY3Rpb24gUCh0KXt2YXIgZT10LmRpbWVuc2lvbnMscj10Lm1vZGVsLG49ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcmllcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pfSksaT10Lm1vZGVsLmRpbWVuc2lvbnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3JpZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3BsYXlJbmR9KX0pLGE9dC5tb2RlbC5kaW1lbnNpb25zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5SW5kfSksbz10LmRpbWVuc2lvbnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmRpbWVuc2lvbkluZH0pLHM9ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQueH0pLGw9ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGh9KSxjPVtdO2Zvcih2YXIgdSBpbiByLnBhdGhzKXIucGF0aHMuaGFzT3duUHJvcGVydHkodSkmJmMucHVzaChyLnBhdGhzW3VdKTtmdW5jdGlvbiBoKHQpe3ZhciBlPXQuY2F0ZWdvcnlJbmRzLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBpW2VdW3RdfSk7cmV0dXJuIG8ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSl9Yy5zb3J0KGZ1bmN0aW9uKGUscil7dmFyIG49aChlKSxpPWgocik7cmV0dXJuXCJiYWNrd2FyZFwiPT09dC5zb3J0cGF0aHMmJihuLnJldmVyc2UoKSxpLnJldmVyc2UoKSksbi5wdXNoKGUudmFsdWVJbmRzWzBdKSxpLnB1c2goci52YWx1ZUluZHNbMF0pLHQuYnVuZGxlY29sb3JzJiYobi51bnNoaWZ0KGUucmF3Q29sb3IpLGkudW5zaGlmdChyLnJhd0NvbG9yKSksbjxpPy0xOm4+aT8xOjB9KTtmb3IodmFyIGY9bmV3IEFycmF5KGMubGVuZ3RoKSxwPWVbMF0ubW9kZWwuY291bnQsZD1lWzBdLmNhdGVnb3JpZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodH0pLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KSxnPTA7ZzxjLmxlbmd0aDtnKyspe3ZhciB2LG09Y1tnXTt2PXA+MD9kKihtLmNvdW50L3ApOjA7Zm9yKHZhciB5LHg9bmV3IEFycmF5KG4ubGVuZ3RoKSxiPTA7YjxtLmNhdGVnb3J5SW5kcy5sZW5ndGg7YisrKXt2YXIgXz1tLmNhdGVnb3J5SW5kc1tiXSx3PWlbYl1bX10saz1hW2JdO3hba109bltrXVt3XSxuW2tdW3ddKz12O3ZhciBBPXQuZGltZW5zaW9uc1trXS5jYXRlZ29yaWVzW3ddLFQ9QS5iYW5kcy5sZW5ndGgsTT1BLmJhbmRzW1QtMV07aWYodm9pZCAwPT09TXx8bS5yYXdDb2xvciE9PU0ucmF3Q29sb3Ipe3ZhciBTPXZvaWQgMD09PU0/MDpNLnkrTS5oZWlnaHQ7QS5iYW5kcy5wdXNoKHtrZXk6Uyxjb2xvcjptLmNvbG9yLHJhd0NvbG9yOm0ucmF3Q29sb3IsaGVpZ2h0OnYsd2lkdGg6QS53aWR0aCxjb3VudDptLmNvdW50LHk6UyxjYXRlZ29yeVZpZXdNb2RlbDpBLHBhcmNhdHNWaWV3TW9kZWw6dH0pfWVsc2V7dmFyIEU9QS5iYW5kc1tULTFdO0UuaGVpZ2h0Kz12LEUuY291bnQrPW0uY291bnR9fXk9XCJoc3BsaW5lXCI9PT10LnBhdGhTaGFwZT9EKHMseCxsLHYsLjUpOkQocyx4LGwsdiwwKSxmW2ddPXtrZXk6bS52YWx1ZUluZHNbMF0sbW9kZWw6bSxoZWlnaHQ6dixsZWZ0WHM6cyx0b3BZczp4LGRpbVdpZHRoczpsLHN2Z0Q6eSxwYXJjYXRzVmlld01vZGVsOnR9fXQucGF0aHM9Zn1mdW5jdGlvbiBSKHQpe3ZhciBlPXQubW9kZWwuZGltZW5zaW9ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJue2Rpc3BsYXlJbmQ6dC5kaXNwbGF5SW5kLGRpbWVuc2lvbkluZDp0LmRpbWVuc2lvbkluZH19KTtlLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kaXNwbGF5SW5kLWUuZGlzcGxheUluZH0pO3ZhciByPVtdO2Zvcih2YXIgbiBpbiBlKXt2YXIgaT1lW25dLmRpbWVuc2lvbkluZCxhPXQubW9kZWwuZGltZW5zaW9uc1tpXTtyLnB1c2goRih0LGEpKX10LmRpbWVuc2lvbnM9cn1mdW5jdGlvbiBGKHQsZSl7dmFyIHIsbj10Lm1vZGVsLmRpbWVuc2lvbnMubGVuZ3RoLGk9ZS5kaXNwbGF5SW5kO3I9NDArKG4+MT8odC53aWR0aC04MC0xNikvKG4tMSk6MCkqaTt2YXIgYSxvLHMsbCxjLHU9W10saD10Lm1vZGVsLm1heENhdHMsZj1lLmNhdGVnb3JpZXMubGVuZ3RoLHA9ZS5jb3VudCxkPXQuaGVpZ2h0LTgqKGgtMSksZz04KihoLWYpLzIsdj1lLmNhdGVnb3JpZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybntkaXNwbGF5SW5kOnQuZGlzcGxheUluZCxjYXRlZ29yeUluZDp0LmNhdGVnb3J5SW5kfX0pO2Zvcih2LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kaXNwbGF5SW5kLWUuZGlzcGxheUluZH0pLGM9MDtjPGY7YysrKWw9dltjXS5jYXRlZ29yeUluZCxvPWUuY2F0ZWdvcmllc1tsXSxhPXA+MD9vLmNvdW50L3AqZDowLHM9e2tleTpvLnZhbHVlSW5kc1swXSxtb2RlbDpvLHdpZHRoOjE2LGhlaWdodDphLHk6bnVsbCE9PW8uZHJhZ1k/by5kcmFnWTpnLGJhbmRzOltdLHBhcmNhdHNWaWV3TW9kZWw6dH0sZz1nK2ErOCx1LnB1c2gocyk7cmV0dXJue2tleTplLmRpbWVuc2lvbkluZCx4Om51bGwhPT1lLmRyYWdYP2UuZHJhZ1g6cix5OjAsd2lkdGg6MTYsbW9kZWw6ZSxjYXRlZ29yaWVzOnUscGFyY2F0c1ZpZXdNb2RlbDp0LGRyYWdDYXRlZ29yeURpc3BsYXlJbmQ6bnVsbCxkcmFnRGltZW5zaW9uRGlzcGxheUluZDpudWxsLGluaXRpYWxEcmFnRGltZW5zaW9uRGlzcGxheUluZHM6bnVsbCxpbml0aWFsRHJhZ0NhdGVnb3J5RGlzcGxheUluZHM6bnVsbCxkcmFnSGFzTW92ZWQ6bnVsbCxwb3RlbnRpYWxDbGlja0JhbmQ6bnVsbH19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3Uocix0LG4sZSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9jb21wb25lbnRzL2Z4XCI6NjE3LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCI6NzI1LFwiLi4vLi4vcGxvdF9hcGkvcGxvdF9hcGlcIjo3MzYsZDM6MTU1LHRpbnljb2xvcjI6NTIyfV0sMTAxNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL3BhcmNhdHNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz1hLl9wYXBlcixzPWEuX3NpemU7bih0LG8sZSx7d2lkdGg6cy53LGhlaWdodDpzLmgsbWFyZ2luOnt0OnMudCxyOnMucixiOnMuYixsOnMubH19LHIsaSl9fSx7XCIuL3BhcmNhdHNcIjoxMDEzfV0sMTAxNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9wbG90cy9kb21haW5cIikuYXR0cmlidXRlcyxsPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsYz10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKS50ZW1wbGF0ZWRBcnJheTtlLmV4cG9ydHM9e2RvbWFpbjpzKHtuYW1lOlwicGFyY29vcmRzXCIsdHJhY2U6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9KSxsYWJlbGZvbnQ6byh7ZWRpdFR5cGU6XCJjYWxjXCJ9KSx0aWNrZm9udDpvKHtlZGl0VHlwZTpcImNhbGNcIn0pLHJhbmdlZm9udDpvKHtlZGl0VHlwZTpcImNhbGNcIn0pLGRpbWVuc2lvbnM6YyhcImRpbWVuc2lvblwiLHtsYWJlbDp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwiY2FsY1wifSx0aWNrdmFsczpsKHt9LGEudGlja3ZhbHMse2VkaXRUeXBlOlwiY2FsY1wifSksdGlja3RleHQ6bCh7fSxhLnRpY2t0ZXh0LHtlZGl0VHlwZTpcImNhbGNcIn0pLHRpY2tmb3JtYXQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiM3NcIixlZGl0VHlwZTpcImNhbGNcIn0sdmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSxyYW5nZTp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixpdGVtczpbe3ZhbFR5cGU6XCJudW1iZXJcIixlZGl0VHlwZTpcImNhbGNcIn0se3ZhbFR5cGU6XCJudW1iZXJcIixlZGl0VHlwZTpcImNhbGNcIn1dLGVkaXRUeXBlOlwiY2FsY1wifSxjb25zdHJhaW50cmFuZ2U6e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsZnJlZUxlbmd0aDohMCxkaW1lbnNpb25zOlwiMS0yXCIsaXRlbXM6W3t2YWxUeXBlOlwibnVtYmVyXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHt2YWxUeXBlOlwibnVtYmVyXCIsZWRpdFR5cGU6XCJjYWxjXCJ9XSxlZGl0VHlwZTpcImNhbGNcIn0sbXVsdGlzZWxlY3Q6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcImNhbGNcIn0sdmFsdWVzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0pLGxpbmU6bChuKFwibGluZVwiLHtjb2xvcnNjYWxlRGZsdDpcIlZpcmlkaXNcIixhdXRvQ29sb3JEZmx0OiExLGVkaXRUeXBlT3ZlcnJpZGU6XCJjYWxjXCJ9KSx7Y29sb3JiYXI6aSxlZGl0VHlwZTpcImNhbGNcIn0pfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCI6NTc5LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIjo1ODUsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlc1wiOjc2MSxcIi4uLy4uL3Bsb3RzL2RvbWFpblwiOjc3NCxcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiOjc3NX1dLDEwMTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9jb25zdGFudHNcIiksaT10KFwiZDNcIiksYT10KFwiLi4vLi4vbGliL2d1cFwiKS5rZXlGdW4sbz10KFwiLi4vLi4vbGliL2d1cFwiKS5yZXBlYXQscz10KFwiLi4vLi4vbGliXCIpLnNvcnRlckFzYyxsPW4uYmFyLnNuYXBSYXRpbztmdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHQqKDEtbCkrZSpsfXZhciB1PW4uYmFyLnNuYXBDbG9zZTtmdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQqKDEtdSkrZSp1fWZ1bmN0aW9uIGYodCxlLHIpe2lmKGQoZSxyKSlyZXR1cm4gZTtmb3IodmFyIG49dFswXSxpPW4sYT0xO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz10W2FdO2lmKGU8aChuLG8pKXJldHVybiBjKG4saSk7aWYoZTxvfHxhPT09dC5sZW5ndGgtMSlyZXR1cm4gYyhvLG4pO2k9bixuPW99fWZ1bmN0aW9uIHAodCxlLHIpe2lmKGQoZSxyKSlyZXR1cm4gZTtmb3IodmFyIG49dFt0Lmxlbmd0aC0xXSxpPW4sYT10Lmxlbmd0aC0yO2E+PTA7YS0tKXt2YXIgbz10W2FdO2lmKGU+aChuLG8pKXJldHVybiBjKG4saSk7aWYoZT5vfHxhPT09dC5sZW5ndGgtMSlyZXR1cm4gYyhvLG4pO2k9bixuPW99fWZ1bmN0aW9uIGQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylpZih0Pj1lW3JdWzBdJiZ0PD1lW3JdWzFdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGcodCl7dC5hdHRyKFwieFwiLC1uLmJhci5jYXB0dXJlV2lkdGgvMikuYXR0cihcIndpZHRoXCIsbi5iYXIuY2FwdHVyZVdpZHRoKX1mdW5jdGlvbiB2KHQpe3QuYXR0cihcInZpc2liaWxpdHlcIixcInZpc2libGVcIikuc3R5bGUoXCJ2aXNpYmlsaXR5XCIsXCJ2aXNpYmxlXCIpLmF0dHIoXCJmaWxsXCIsXCJ5ZWxsb3dcIikuYXR0cihcIm9wYWNpdHlcIiwwKX1mdW5jdGlvbiBtKHQpe2lmKCF0LmJydXNoLmZpbHRlclNwZWNpZmllZClyZXR1cm5cIjAsXCIrdC5oZWlnaHQ7Zm9yKHZhciBlLHIsbixpPXkodC5icnVzaC5maWx0ZXIuZ2V0Q29uc29saWRhdGVkKCksdC5oZWlnaHQpLGE9WzBdLG89aS5sZW5ndGg/aVswXVswXTpudWxsLHM9MDtzPGkubGVuZ3RoO3MrKylyPShlPWlbc10pWzFdLWVbMF0sYS5wdXNoKG8pLGEucHVzaChyKSwobj1zKzEpPGkubGVuZ3RoJiYobz1pW25dWzBdLWVbMV0pO3JldHVybiBhLnB1c2godC5oZWlnaHQpLGF9ZnVuY3Rpb24geSh0LGUpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQqZX0pLnNvcnQocyl9KX1mdW5jdGlvbiB4KCl7aS5zZWxlY3QoZG9jdW1lbnQuYm9keSkuc3R5bGUoXCJjdXJzb3JcIixudWxsKX1mdW5jdGlvbiBiKHQpe3QuYXR0cihcInN0cm9rZS1kYXNoYXJyYXlcIixtKX1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9aS5zZWxlY3QodCkuc2VsZWN0QWxsKFwiLmhpZ2hsaWdodCwgLmhpZ2hsaWdodC1zaGFkb3dcIik7YihlP3IudHJhbnNpdGlvbigpLmR1cmF0aW9uKG4uYmFyLnNuYXBEdXJhdGlvbikuZWFjaChcImVuZFwiLGUpOnIpfWZ1bmN0aW9uIHcodCxlKXt2YXIgcixpPXQuYnJ1c2gsYT1OYU4sbz17fTtpZihpLmZpbHRlclNwZWNpZmllZCl7dmFyIHM9dC5oZWlnaHQsbD1pLmZpbHRlci5nZXRDb25zb2xpZGF0ZWQoKSxjPXkobCxzKSx1PU5hTixoPU5hTixmPU5hTjtmb3Iocj0wO3I8PWMubGVuZ3RoO3IrKyl7dmFyIHA9Y1tyXTtpZihwJiZwWzBdPD1lJiZlPD1wWzFdKXt1PXI7YnJlYWt9aWYoaD1yP3ItMTpOYU4scCYmcFswXT5lKXtmPXI7YnJlYWt9fWlmKGE9dSxpc05hTihhKSYmKGE9aXNOYU4oaCl8fGlzTmFOKGYpP2lzTmFOKGgpP2Y6aDplLWNbaF1bMV08Y1tmXVswXS1lP2g6ZiksIWlzTmFOKGEpKXt2YXIgZD1jW2FdLGc9ZnVuY3Rpb24odCxlKXt2YXIgcj1uLmJhci5oYW5kbGVIZWlnaHQ7aWYoIShlPnRbMV0rcnx8ZTx0WzBdLXIpKXJldHVybiBlPj0uOSp0WzFdKy4xKnRbMF0/XCJuXCI6ZTw9LjkqdFswXSsuMSp0WzFdP1wic1wiOlwibnNcIn0oZCxlKTtnJiYoby5pbnRlcnZhbD1sW2FdLG8uaW50ZXJ2YWxQaXg9ZCxvLnJlZ2lvbj1nKX19aWYodC5vcmRpbmFsJiYhby5yZWdpb24pe3ZhciB2PXQudW5pdFRpY2t2YWxzLG09dC51bml0VG9QYWRkZWRQeC5pbnZlcnQoZSk7Zm9yKHI9MDtyPHYubGVuZ3RoO3IrKyl7dmFyIHg9Wy4yNSp2W01hdGgubWF4KHItMSwwKV0rLjc1KnZbcl0sLjI1KnZbTWF0aC5taW4ocisxLHYubGVuZ3RoLTEpXSsuNzUqdltyXV07aWYobT49eFswXSYmbTw9eFsxXSl7by5jbGlja2FibGVPcmRpbmFsUmFuZ2U9eDticmVha319fXJldHVybiBvfWZ1bmN0aW9uIGsodCl7dC5vbihcIm1vdXNlbW92ZVwiLGZ1bmN0aW9uKHQpe2lmKGkuZXZlbnQucHJldmVudERlZmF1bHQoKSwhdC5wYXJlbnQuaW5CcnVzaERyYWcpe3ZhciBlPXcodCx0LmhlaWdodC1pLm1vdXNlKHRoaXMpWzFdLTIqbi52ZXJ0aWNhbFBhZGRpbmcpLHI9XCJjcm9zc2hhaXJcIjtlLmNsaWNrYWJsZU9yZGluYWxSYW5nZT9yPVwicG9pbnRlclwiOmUucmVnaW9uJiYocj1lLnJlZ2lvbitcIi1yZXNpemVcIiksaS5zZWxlY3QoZG9jdW1lbnQuYm9keSkuc3R5bGUoXCJjdXJzb3JcIixyKX19KS5vbihcIm1vdXNlbGVhdmVcIixmdW5jdGlvbih0KXt0LnBhcmVudC5pbkJydXNoRHJhZ3x8eCgpfSkuY2FsbChpLmJlaGF2aW9yLmRyYWcoKS5vbihcImRyYWdzdGFydFwiLGZ1bmN0aW9uKHQpe2kuZXZlbnQuc291cmNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7dmFyIGU9dC5oZWlnaHQtaS5tb3VzZSh0aGlzKVsxXS0yKm4udmVydGljYWxQYWRkaW5nLHI9dC51bml0VG9QYWRkZWRQeC5pbnZlcnQoZSksYT10LmJydXNoLG89dyh0LGUpLHM9by5pbnRlcnZhbCxsPWEuc3ZnQnJ1c2g7aWYobC53YXNEcmFnZ2VkPSExLGwuZ3JhYmJpbmdCYXI9XCJuc1wiPT09by5yZWdpb24sbC5ncmFiYmluZ0Jhcil7dmFyIGM9cy5tYXAodC51bml0VG9QYWRkZWRQeCk7bC5ncmFiUG9pbnQ9ZS1jWzBdLW4udmVydGljYWxQYWRkaW5nLGwuYmFyTGVuZ3RoPWNbMV0tY1swXX1sLmNsaWNrYWJsZU9yZGluYWxSYW5nZT1vLmNsaWNrYWJsZU9yZGluYWxSYW5nZSxsLnN0YXlpbmdJbnRlcnZhbHM9dC5tdWx0aXNlbGVjdCYmYS5maWx0ZXJTcGVjaWZpZWQ/YS5maWx0ZXIuZ2V0Q29uc29saWRhdGVkKCk6W10scyYmKGwuc3RheWluZ0ludGVydmFscz1sLnN0YXlpbmdJbnRlcnZhbHMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdIT09c1swXSYmdFsxXSE9PXNbMV19KSksbC5zdGFydEV4dGVudD1vLnJlZ2lvbj9zW1wic1wiPT09by5yZWdpb24/MTowXTpyLHQucGFyZW50LmluQnJ1c2hEcmFnPSEwLGwuYnJ1c2hTdGFydENhbGxiYWNrKCl9KS5vbihcImRyYWdcIixmdW5jdGlvbih0KXtpLmV2ZW50LnNvdXJjZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3ZhciBlPXQuaGVpZ2h0LWkubW91c2UodGhpcylbMV0tMipuLnZlcnRpY2FsUGFkZGluZyxyPXQuYnJ1c2guc3ZnQnJ1c2g7ci53YXNEcmFnZ2VkPSEwLHIuZ3JhYmJpbmdCYXI/ci5uZXdFeHRlbnQ9W2Utci5ncmFiUG9pbnQsZStyLmJhckxlbmd0aC1yLmdyYWJQb2ludF0ubWFwKHQudW5pdFRvUGFkZGVkUHguaW52ZXJ0KTpyLm5ld0V4dGVudD1bci5zdGFydEV4dGVudCx0LnVuaXRUb1BhZGRlZFB4LmludmVydChlKV0uc29ydChzKTt2YXIgYT1NYXRoLm1heCgwLC1yLm5ld0V4dGVudFswXSksbz1NYXRoLm1heCgwLHIubmV3RXh0ZW50WzFdLTEpO3IubmV3RXh0ZW50WzBdKz1hLHIubmV3RXh0ZW50WzFdLT1vLHIuZ3JhYmJpbmdCYXImJihyLm5ld0V4dGVudFsxXSs9YSxyLm5ld0V4dGVudFswXS09byksdC5icnVzaC5maWx0ZXJTcGVjaWZpZWQ9ITAsci5leHRlbnQ9ci5zdGF5aW5nSW50ZXJ2YWxzLmNvbmNhdChbci5uZXdFeHRlbnRdKSxyLmJydXNoQ2FsbGJhY2sodCksXyh0aGlzLnBhcmVudE5vZGUpfSkub24oXCJkcmFnZW5kXCIsZnVuY3Rpb24odCl7aS5ldmVudC5zb3VyY2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKTt2YXIgZT10LmJydXNoLHI9ZS5maWx0ZXIsbj1lLnN2Z0JydXNoLGE9bi5ncmFiYmluZ0JhcjtpZihuLmdyYWJiaW5nQmFyPSExLG4uZ3JhYkxvY2F0aW9uPXZvaWQgMCx0LnBhcmVudC5pbkJydXNoRHJhZz0hMSx4KCksIW4ud2FzRHJhZ2dlZClyZXR1cm4gbi53YXNEcmFnZ2VkPXZvaWQgMCxuLmNsaWNrYWJsZU9yZGluYWxSYW5nZT9lLmZpbHRlclNwZWNpZmllZCYmdC5tdWx0aXNlbGVjdD9uLmV4dGVudC5wdXNoKG4uY2xpY2thYmxlT3JkaW5hbFJhbmdlKToobi5leHRlbnQ9W24uY2xpY2thYmxlT3JkaW5hbFJhbmdlXSxlLmZpbHRlclNwZWNpZmllZD0hMCk6YT8obi5leHRlbnQ9bi5zdGF5aW5nSW50ZXJ2YWxzLDA9PT1uLmV4dGVudC5sZW5ndGgmJlQoZSkpOlQoZSksbi5icnVzaENhbGxiYWNrKHQpLF8odGhpcy5wYXJlbnROb2RlKSx2b2lkIG4uYnJ1c2hFbmRDYWxsYmFjayhlLmZpbHRlclNwZWNpZmllZD9yLmdldENvbnNvbGlkYXRlZCgpOltdKTt2YXIgbz1mdW5jdGlvbigpe3Iuc2V0KHIuZ2V0Q29uc29saWRhdGVkKCkpfTtpZih0Lm9yZGluYWwpe3ZhciBzPXQudW5pdFRpY2t2YWxzO3Nbcy5sZW5ndGgtMV08c1swXSYmcy5yZXZlcnNlKCksbi5uZXdFeHRlbnQ9W2YocyxuLm5ld0V4dGVudFswXSxuLnN0YXlpbmdJbnRlcnZhbHMpLHAocyxuLm5ld0V4dGVudFsxXSxuLnN0YXlpbmdJbnRlcnZhbHMpXTt2YXIgbD1uLm5ld0V4dGVudFsxXT5uLm5ld0V4dGVudFswXTtuLmV4dGVudD1uLnN0YXlpbmdJbnRlcnZhbHMuY29uY2F0KGw/W24ubmV3RXh0ZW50XTpbXSksbi5leHRlbnQubGVuZ3RofHxUKGUpLG4uYnJ1c2hDYWxsYmFjayh0KSxsP18odGhpcy5wYXJlbnROb2RlLG8pOihvKCksXyh0aGlzLnBhcmVudE5vZGUpKX1lbHNlIG8oKTtuLmJydXNoRW5kQ2FsbGJhY2soZS5maWx0ZXJTcGVjaWZpZWQ/ci5nZXRDb25zb2xpZGF0ZWQoKTpbXSl9KSl9ZnVuY3Rpb24gQSh0LGUpe3JldHVybiB0WzBdLWVbMF19ZnVuY3Rpb24gVCh0KXt0LmZpbHRlclNwZWNpZmllZD0hMSx0LnN2Z0JydXNoLmV4dGVudD1bWzAsMV1dfWZ1bmN0aW9uIE0odCl7Zm9yKHZhciBlLHI9dC5zbGljZSgpLG49W10saT1yLnNoaWZ0KCk7aTspe2ZvcihlPWkuc2xpY2UoKTsoaT1yLnNoaWZ0KCkpJiZpWzBdPD1lWzFdOyllWzFdPU1hdGgubWF4KGVbMV0saVsxXSk7bi5wdXNoKGUpfXJldHVybiBufWUuZXhwb3J0cz17bWFrZUJydXNoOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbyxsPWZ1bmN0aW9uKCl7dmFyIHQsZSxyPVtdO3JldHVybntzZXQ6ZnVuY3Rpb24obil7cj1uLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgpLnNvcnQocyl9KS5zb3J0KEEpLHQ9TShyKSxlPXIucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW01hdGgubWluKHRbMF0sZVswXSksTWF0aC5tYXgodFsxXSxlWzFdKV19LFsxLzAsLTEvMF0pfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5zbGljZSgpfSxnZXRDb25zb2xpZGF0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJuIGV9fX0oKTtyZXR1cm4gbC5zZXQocikse2ZpbHRlcjpsLGZpbHRlclNwZWNpZmllZDplLHN2Z0JydXNoOntleHRlbnQ6W10sYnJ1c2hTdGFydENhbGxiYWNrOm4sYnJ1c2hDYWxsYmFjazoobz1pLGZ1bmN0aW9uKHQpe3ZhciBlPXQuYnJ1c2gscj1mdW5jdGlvbih0KXtyZXR1cm4gdC5zdmdCcnVzaC5leHRlbnQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKCl9KX0oZSkuc2xpY2UoKTtlLmZpbHRlci5zZXQociksbygpfSksYnJ1c2hFbmRDYWxsYmFjazphfX19LGVuc3VyZUF4aXNCcnVzaDpmdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbChcIi5cIituLmNuLmF4aXNCcnVzaCkuZGF0YShvLGEpO2UuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQobi5jbi5heGlzQnJ1c2gsITApLGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0QWxsKFwiLmJhY2tncm91bmRcIikuZGF0YShvKTtlLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKS5jbGFzc2VkKFwiYmFja2dyb3VuZFwiLCEwKS5jYWxsKGcpLmNhbGwodikuc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwiYXV0b1wiKS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoMCBcIituLnZlcnRpY2FsUGFkZGluZytcIilcIiksZS5jYWxsKGspLmF0dHIoXCJoZWlnaHRcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHQtbi52ZXJ0aWNhbFBhZGRpbmd9KTt2YXIgcj10LnNlbGVjdEFsbChcIi5oaWdobGlnaHQtc2hhZG93XCIpLmRhdGEobyk7ci5lbnRlcigpLmFwcGVuZChcImxpbmVcIikuY2xhc3NlZChcImhpZ2hsaWdodC1zaGFkb3dcIiwhMCkuYXR0cihcInhcIiwtbi5iYXIud2lkdGgvMikuYXR0cihcInN0cm9rZS13aWR0aFwiLG4uYmFyLndpZHRoK24uYmFyLnN0cm9rZVdpZHRoKS5hdHRyKFwic3Ryb2tlXCIsbi5iYXIuc3Ryb2tlQ29sb3IpLmF0dHIoXCJvcGFjaXR5XCIsbi5iYXIuc3Ryb2tlT3BhY2l0eSkuYXR0cihcInN0cm9rZS1saW5lY2FwXCIsXCJidXR0XCIpLHIuYXR0cihcInkxXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkuY2FsbChiKTt2YXIgaT10LnNlbGVjdEFsbChcIi5oaWdobGlnaHRcIikuZGF0YShvKTtpLmVudGVyKCkuYXBwZW5kKFwibGluZVwiKS5jbGFzc2VkKFwiaGlnaGxpZ2h0XCIsITApLmF0dHIoXCJ4XCIsLW4uYmFyLndpZHRoLzIpLmF0dHIoXCJzdHJva2Utd2lkdGhcIixuLmJhci53aWR0aC1uLmJhci5zdHJva2VXaWR0aCkuYXR0cihcInN0cm9rZVwiLG4uYmFyLmZpbGxDb2xvcikuYXR0cihcIm9wYWNpdHlcIixuLmJhci5maWxsT3BhY2l0eSkuYXR0cihcInN0cm9rZS1saW5lY2FwXCIsXCJidXR0XCIpLGkuYXR0cihcInkxXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkuY2FsbChiKX0oZSl9LGNsZWFuUmFuZ2VzOmZ1bmN0aW9uKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0WzBdKT8odD10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zb3J0KHMpfSksdD1lLm11bHRpc2VsZWN0P00odC5zb3J0KEEpKTpbdFswXV0pOnQ9W3Quc29ydChzKV0sZS50aWNrdmFscyl7dmFyIHI9ZS50aWNrdmFscy5zbGljZSgpLnNvcnQocyk7aWYoISh0PXQubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPVtmKHIsdFswXSxbXSkscChyLHRbMV0sW10pXTtpZihlWzFdPmVbMF0pcmV0dXJuIGV9KS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSkubGVuZ3RoKXJldHVybn1yZXR1cm4gdC5sZW5ndGg+MT90OnRbMF19fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2d1cFwiOjY5OSxcIi4vY29uc3RhbnRzXCI6MTAxOSxkMzoxNTV9XSwxMDE3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCIpLmdldE1vZHVsZUNhbGNEYXRhLGE9dChcIi4vcGxvdFwiKSxvPXQoXCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiKTtyLm5hbWU9XCJwYXJjb29yZHNcIixyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9aSh0LmNhbGNkYXRhLFwicGFyY29vcmRzXCIpWzBdO2UubGVuZ3RoJiZhKHQsZSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5faGFzJiZuLl9oYXMoXCJwYXJjb29yZHNcIiksYT1lLl9oYXMmJmUuX2hhcyhcInBhcmNvb3Jkc1wiKTtpJiYhYSYmKG4uX3BhcGVyZGl2LnNlbGVjdEFsbChcIi5wYXJjb29yZHNcIikucmVtb3ZlKCksbi5fZ2xpbWFnZXMuc2VsZWN0QWxsKFwiKlwiKS5yZW1vdmUoKSl9LHIudG9TVkc9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5fZ2xpbWFnZXMscj1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoXCIuc3ZnLWNvbnRhaW5lclwiKTtyLmZpbHRlcihmdW5jdGlvbih0LGUpe3JldHVybiBlPT09ci5zaXplKCktMX0pLnNlbGVjdEFsbChcIi5nbC1jYW52YXMtY29udGV4dCwgLmdsLWNhbnZhcy1mb2N1c1wiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50b0RhdGFVUkwoXCJpbWFnZS9wbmdcIik7ZS5hcHBlbmQoXCJzdmc6aW1hZ2VcIikuYXR0cih7eG1sbnM6by5zdmcsXCJ4bGluazpocmVmXCI6dCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwibm9uZVwiLHg6MCx5OjAsd2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHR9KX0pLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5zZWxlY3RBbGwoXCIjZmlsdGVyQmFyUGF0dGVyblwiKS5hdHRyKFwiaWRcIixcImZpbHRlckJhclBhdHRlcm5cIil9LDYwKX19LHtcIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzXCI6Njc5LFwiLi4vLi4vcGxvdHMvZ2V0X2RhdGFcIjo3ODQsXCIuL3Bsb3RcIjoxMDI1LGQzOjE1NX1dLDEwMTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnNcIikuaGFzQ29sb3JzY2FsZSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsY1wiKSxhPXQoXCIuLi8uLi9saWJcIiksbz10KFwiLi4vLi4vbGliL2d1cFwiKS53cmFwO2Z1bmN0aW9uIHModCl7cmV0dXJuIGEuaXNUeXBlZEFycmF5KHQpP0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpOnR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjxlLmRpbWVuc2lvbnMubGVuZ3RoO3IrKyllLmRpbWVuc2lvbnNbcl0udmFsdWVzPXMoZS5kaW1lbnNpb25zW3JdLnZhbHVlcyk7ZS5saW5lLmNvbG9yPXMoZS5saW5lLmNvbG9yKTt2YXIgYT0hIWUubGluZS5jb2xvcnNjYWxlJiZBcnJheS5pc0FycmF5KGUubGluZS5jb2xvciksbD1hP2UubGluZS5jb2xvcjpmdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09LjU7cmV0dXJuIGV9KGUuX2xlbmd0aCksYz1hP2UubGluZS5jb2xvcnNjYWxlOltbMCxlLmxpbmUuY29sb3JdLFsxLGUubGluZS5jb2xvcl1dO3JldHVybiBuKGUsXCJsaW5lXCIpJiZpKHQsZSx7dmFsczpsLGNvbnRhaW5lclN0cjpcImxpbmVcIixjTGV0dGVyOlwiY1wifSksbyh7bGluZUNvbG9yOmwsY3NjYWxlOmN9KX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCI6NTg2LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnNcIjo1ODksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvZ3VwXCI6Njk5fV0sMTAxOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17bWF4RGltZW5zaW9uQ291bnQ6NjAsb3ZlcmRyYWc6NDUsdmVydGljYWxQYWRkaW5nOjIsdGlja0Rpc3RhbmNlOjUwLGNhbnZhc1BpeGVsUmF0aW86MSxibG9ja0xpbmVDb3VudDo1ZTMsbGF5ZXJzOltcImNvbnRleHRMaW5lTGF5ZXJcIixcImZvY3VzTGluZUxheWVyXCIsXCJwaWNrTGluZUxheWVyXCJdLGF4aXNUaXRsZU9mZnNldDoyOCxheGlzRXh0ZW50T2Zmc2V0OjEwLGJhcjp7d2lkdGg6NCxjYXB0dXJlV2lkdGg6MTAsZmlsbENvbG9yOlwibWFnZW50YVwiLGZpbGxPcGFjaXR5OjEsc25hcER1cmF0aW9uOjE1MCxzbmFwUmF0aW86LjI1LHNuYXBDbG9zZTouMDEsc3Ryb2tlQ29sb3I6XCJ3aGl0ZVwiLHN0cm9rZU9wYWNpdHk6MSxzdHJva2VXaWR0aDoxLGhhbmRsZUhlaWdodDo4LGhhbmRsZU9wYWNpdHk6MSxoYW5kbGVPdmVybGFwOjB9LGNuOntheGlzRXh0ZW50VGV4dDpcImF4aXMtZXh0ZW50LXRleHRcIixwYXJjb29yZHNMaW5lTGF5ZXJzOlwicGFyY29vcmRzLWxpbmUtbGF5ZXJzXCIscGFyY29vcmRzTGluZUxheWVyOlwicGFyY29vcmRzLWxpbmVzXCIscGFyY29vcmRzOlwicGFyY29vcmRzXCIscGFyY29vcmRzQ29udHJvbFZpZXc6XCJwYXJjb29yZHMtY29udHJvbC12aWV3XCIseUF4aXM6XCJ5LWF4aXNcIixheGlzT3ZlcmxheXM6XCJheGlzLW92ZXJsYXlzXCIsYXhpczpcImF4aXNcIixheGlzSGVhZGluZzpcImF4aXMtaGVhZGluZ1wiLGF4aXNUaXRsZTpcImF4aXMtdGl0bGVcIixheGlzRXh0ZW50OlwiYXhpcy1leHRlbnRcIixheGlzRXh0ZW50VG9wOlwiYXhpcy1leHRlbnQtdG9wXCIsYXhpc0V4dGVudFRvcFRleHQ6XCJheGlzLWV4dGVudC10b3AtdGV4dFwiLGF4aXNFeHRlbnRCb3R0b206XCJheGlzLWV4dGVudC1ib3R0b21cIixheGlzRXh0ZW50Qm90dG9tVGV4dDpcImF4aXMtZXh0ZW50LWJvdHRvbS10ZXh0XCIsYXhpc0JydXNoOlwiYXhpcy1icnVzaFwifSxpZDp7ZmlsdGVyQmFyUGF0dGVybjpcImZpbHRlci1iYXItcGF0dGVyblwifX19LHt9XSwxMDIwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVyc1wiKS5oYXNDb2xvcnNjYWxlLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiKSxvPXQoXCIuLi8uLi9wbG90cy9kb21haW5cIikuZGVmYXVsdHMscz10KFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCIpLGw9dChcIi4vYXR0cmlidXRlc1wiKSxjPXQoXCIuL2F4aXNicnVzaFwiKSx1PXQoXCIuL2NvbnN0YW50c1wiKS5tYXhEaW1lbnNpb25Db3VudCxoPXQoXCIuL21lcmdlX2xlbmd0aFwiKTtmdW5jdGlvbiBmKHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbC5kaW1lbnNpb25zLHIsaSl9dmFyIGk9cihcInZhbHVlc1wiKSxhPXIoXCJ2aXNpYmxlXCIpO2lmKGkmJmkubGVuZ3RofHwoYT1lLnZpc2libGU9ITEpLGEpe3IoXCJsYWJlbFwiKSxyKFwidGlja3ZhbHNcIikscihcInRpY2t0ZXh0XCIpLHIoXCJ0aWNrZm9ybWF0XCIpLHIoXCJyYW5nZVwiKSxyKFwibXVsdGlzZWxlY3RcIik7dmFyIG89cihcImNvbnN0cmFpbnRyYW5nZVwiKTtvJiYoZS5jb25zdHJhaW50cmFuZ2U9Yy5jbGVhblJhbmdlcyhvLGUpKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe2Z1bmN0aW9uIHAocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwscixpKX12YXIgZD10LmRpbWVuc2lvbnM7QXJyYXkuaXNBcnJheShkKSYmZC5sZW5ndGg+dSYmKG4ubG9nKFwicGFyY29vcmRzIHRyYWNlcyBzdXBwb3J0IHVwIHRvIFwiK3UrXCIgZGltZW5zaW9ucyBhdCB0aGUgbW9tZW50XCIpLGQuc3BsaWNlKHUpKTt2YXIgZz1zKHQsZSx7bmFtZTpcImRpbWVuc2lvbnNcIixoYW5kbGVJdGVtRGVmYXVsdHM6Zn0pLHY9ZnVuY3Rpb24odCxlLHIsbyxzKXt2YXIgbD1zKFwibGluZS5jb2xvclwiLHIpO2lmKGkodCxcImxpbmVcIikmJm4uaXNBcnJheU9yVHlwZWRBcnJheShsKSl7aWYobC5sZW5ndGgpcmV0dXJuIHMoXCJsaW5lLmNvbG9yc2NhbGVcIiksYSh0LGUsbyxzLHtwcmVmaXg6XCJsaW5lLlwiLGNMZXR0ZXI6XCJjXCJ9KSxsLmxlbmd0aDtlLmxpbmUuY29sb3I9cn1yZXR1cm4gMS8wfSh0LGUscixjLHApO28oZSxjLHApLEFycmF5LmlzQXJyYXkoZykmJmcubGVuZ3RofHwoZS52aXNpYmxlPSExKSxoKGUsZyxcInZhbHVlc1wiLHYpO3ZhciBtPXtmYW1pbHk6Yy5mb250LmZhbWlseSxzaXplOk1hdGgucm91bmQoYy5mb250LnNpemUvMS4yKSxjb2xvcjpjLmZvbnQuY29sb3J9O24uY29lcmNlRm9udChwLFwibGFiZWxmb250XCIsbSksbi5jb2VyY2VGb250KHAsXCJ0aWNrZm9udFwiLG0pLG4uY29lcmNlRm9udChwLFwicmFuZ2Vmb250XCIsbSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIjo1ODgsXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVyc1wiOjU4OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0c1wiOjc0NSxcIi4uLy4uL3Bsb3RzL2RvbWFpblwiOjc3NCxcIi4vYXR0cmlidXRlc1wiOjEwMTUsXCIuL2F4aXNicnVzaFwiOjEwMTYsXCIuL2NvbnN0YW50c1wiOjEwMTksXCIuL21lcmdlX2xlbmd0aFwiOjEwMjN9XSwxMDIxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLnBsb3Q9dChcIi4vcGxvdFwiKSxuLmNvbG9yYmFyPXtjb250YWluZXI6XCJsaW5lXCIsbWluOlwiY21pblwiLG1heDpcImNtYXhcIn0sbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJwYXJjb29yZHNcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuL2Jhc2VfcGxvdFwiKSxuLmNhdGVnb3JpZXM9W1wiZ2xcIixcInJlZ2xcIixcIm5vT3BhY2l0eVwiLFwibm9Ib3ZlclwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4vYXR0cmlidXRlc1wiOjEwMTUsXCIuL2Jhc2VfcGxvdFwiOjEwMTcsXCIuL2NhbGNcIjoxMDE4LFwiLi9kZWZhdWx0c1wiOjEwMjAsXCIuL3Bsb3RcIjoxMDI1fV0sMTAyMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbHNsaWZ5XCIpLGk9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjNCBwMCwgcDEsIHAyLCBwMyxcXG4gICAgICAgICAgICAgICBwNCwgcDUsIHA2LCBwNyxcXG4gICAgICAgICAgICAgICBwOCwgcDksIHBhLCBwYixcXG4gICAgICAgICAgICAgICBwYywgcGQsIHBlO1xcblxcbmF0dHJpYnV0ZSB2ZWM0IHBmO1xcblxcbnVuaWZvcm0gbWF0NCBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkQsXFxuICAgICAgICAgICAgIGxvQSwgaGlBLCBsb0IsIGhpQiwgbG9DLCBoaUMsIGxvRCwgaGlEO1xcblxcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgICB2aWV3Qm94UG9zaXRpb24sXFxuICAgICAgICAgICAgIHZpZXdCb3hTaXplO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHBhbGV0dGU7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcXG51bmlmb3JtIGZsb2F0IG1hc2tIZWlnaHQ7XFxuXFxudW5pZm9ybSB2ZWMyIGNvbG9yQ2xhbXA7XFxuXFxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcXG5cXG52ZWM0IHVuaXRfMSA9IHZlYzQoMSwgMSwgMSwgMSk7XFxuXFxuZmxvYXQgdmFsKG1hdDQgcCwgbWF0NCB2KSB7XFxuICAgIHJldHVybiBkb3QobWF0cml4Q29tcE11bHQocCwgdikgKiB1bml0XzEsIHVuaXRfMSk7XFxufVxcblxcbmZsb2F0IGF4aXNZKFxcbiAgICAgICAgZmxvYXQgeCxcXG4gICAgICAgIG1hdDQgZFs0XSxcXG4gICAgICAgIG1hdDQgZGltMUEsIG1hdDQgZGltMkEsIG1hdDQgZGltMUIsIG1hdDQgZGltMkIsIG1hdDQgZGltMUMsIG1hdDQgZGltMkMsIG1hdDQgZGltMUQsIG1hdDQgZGltMkRcXG4gICAgKSB7XFxuXFxuICAgIGZsb2F0IHkxID0gdmFsKGRbMF0sIGRpbTFBKSArIHZhbChkWzFdLCBkaW0xQikgKyB2YWwoZFsyXSwgZGltMUMpICsgdmFsKGRbM10sIGRpbTFEKTtcXG4gICAgZmxvYXQgeTIgPSB2YWwoZFswXSwgZGltMkEpICsgdmFsKGRbMV0sIGRpbTJCKSArIHZhbChkWzJdLCBkaW0yQykgKyB2YWwoZFszXSwgZGltMkQpO1xcbiAgICByZXR1cm4geTEgKiAoMS4wIC0geCkgKyB5MiAqIHg7XFxufVxcblxcbmNvbnN0IGludCBiaXRzUGVyQnl0ZSA9IDg7XFxuXFxuaW50IG1vZDIoaW50IGEpIHtcXG4gICAgcmV0dXJuIGEgLSAyICogKGEgLyAyKTtcXG59XFxuXFxuaW50IG1vZDgoaW50IGEpIHtcXG4gICAgcmV0dXJuIGEgLSA4ICogKGEgLyA4KTtcXG59XFxuXFxudmVjNCB6ZXJvID0gdmVjNCgwLCAwLCAwLCAwKTtcXG52ZWM0IHVuaXRfMCA9IHZlYzQoMSwgMSwgMSwgMSk7XFxudmVjMiB4eVByb2plY3Rpb24gPSB2ZWMyKDEsIDEpO1xcblxcbm1hdDQgbWNsYW1wKG1hdDQgbSwgbWF0NCBsbywgbWF0NCBoaSkge1xcbiAgICByZXR1cm4gbWF0NChjbGFtcChtWzBdLCBsb1swXSwgaGlbMF0pLFxcbiAgICAgICAgICAgICAgICBjbGFtcChtWzFdLCBsb1sxXSwgaGlbMV0pLFxcbiAgICAgICAgICAgICAgICBjbGFtcChtWzJdLCBsb1syXSwgaGlbMl0pLFxcbiAgICAgICAgICAgICAgICBjbGFtcChtWzNdLCBsb1szXSwgaGlbM10pKTtcXG59XFxuXFxuYm9vbCBtc2hvdyhtYXQ0IHAsIG1hdDQgbG8sIG1hdDQgaGkpIHtcXG4gICAgcmV0dXJuIG1jbGFtcChwLCBsbywgaGkpID09IHA7XFxufVxcblxcbmJvb2wgd2l0aGluQm91bmRpbmdCb3goXFxuICAgICAgICBtYXQ0IGRbNF0sXFxuICAgICAgICBtYXQ0IGxvQSwgbWF0NCBoaUEsIG1hdDQgbG9CLCBtYXQ0IGhpQiwgbWF0NCBsb0MsIG1hdDQgaGlDLCBtYXQ0IGxvRCwgbWF0NCBoaURcXG4gICAgKSB7XFxuXFxuICAgIHJldHVybiBtc2hvdyhkWzBdLCBsb0EsIGhpQSkgJiZcXG4gICAgICAgICAgIG1zaG93KGRbMV0sIGxvQiwgaGlCKSAmJlxcbiAgICAgICAgICAgbXNob3coZFsyXSwgbG9DLCBoaUMpICYmXFxuICAgICAgICAgICBtc2hvdyhkWzNdLCBsb0QsIGhpRCk7XFxufVxcblxcbmJvb2wgd2l0aGluUmFzdGVyTWFzayhtYXQ0IGRbNF0sIHNhbXBsZXIyRCBtYXNrLCBmbG9hdCBoZWlnaHQpIHtcXG4gICAgYm9vbCByZXN1bHQgPSB0cnVlO1xcbiAgICBpbnQgYml0SW5CeXRlU3RlcHBlcjtcXG4gICAgZmxvYXQgdmFsWSwgdmFsdWVZLCBzY2FsZVg7XFxuICAgIGludCBoaXQsIGJpdG1hc2ssIHZhbFg7XFxuICAgIGZvcihpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHtcXG4gICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCA0OyBqKyspIHtcXG4gICAgICAgICAgICBmb3IoaW50IGsgPSAwOyBrIDwgNDsgaysrKSB7XFxuICAgICAgICAgICAgICAgIGJpdEluQnl0ZVN0ZXBwZXIgPSBtb2Q4KGogKiA0ICsgayk7XFxuICAgICAgICAgICAgICAgIHZhbFggPSBpICogMiArIGogLyAyO1xcbiAgICAgICAgICAgICAgICB2YWxZID0gZFtpXVtqXVtrXTtcXG4gICAgICAgICAgICAgICAgdmFsdWVZID0gdmFsWSAqIChoZWlnaHQgLSAxLjApICsgMC41O1xcbiAgICAgICAgICAgICAgICBzY2FsZVggPSAoZmxvYXQodmFsWCkgKyAwLjUpIC8gOC4wO1xcbiAgICAgICAgICAgICAgICBoaXQgPSBpbnQodGV4dHVyZTJEKG1hc2ssIHZlYzIoc2NhbGVYLCAodmFsdWVZICsgMC41KSAvIGhlaWdodCkpWzNdICogMjU1LjApIC8gaW50KHBvdygyLjAsIGZsb2F0KGJpdEluQnl0ZVN0ZXBwZXIpKSk7XFxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBtb2QyKGhpdCkgPT0gMTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxudmVjNCBwb3NpdGlvbihcXG4gICAgICAgIGZsb2F0IGRlcHRoLFxcbiAgICAgICAgdmVjMiByZXNvbHV0aW9uLCB2ZWMyIHZpZXdCb3hQb3NpdGlvbiwgdmVjMiB2aWV3Qm94U2l6ZSxcXG4gICAgICAgIG1hdDQgZGltc1s0XSxcXG4gICAgICAgIGZsb2F0IHNpZ251bSxcXG4gICAgICAgIG1hdDQgZGltMUEsIG1hdDQgZGltMkEsIG1hdDQgZGltMUIsIG1hdDQgZGltMkIsIG1hdDQgZGltMUMsIG1hdDQgZGltMkMsIG1hdDQgZGltMUQsIG1hdDQgZGltMkQsXFxuICAgICAgICBtYXQ0IGxvQSwgbWF0NCBoaUEsIG1hdDQgbG9CLCBtYXQ0IGhpQiwgbWF0NCBsb0MsIG1hdDQgaGlDLCBtYXQ0IGxvRCwgbWF0NCBoaUQsXFxuICAgICAgICBzYW1wbGVyMkQgbWFzaywgZmxvYXQgbWFza0hlaWdodFxcbiAgICApIHtcXG5cXG4gICAgZmxvYXQgeCA9IDAuNSAqIHNpZ251bSArIDAuNTtcXG4gICAgZmxvYXQgeSA9IGF4aXNZKHgsIGRpbXMsIGRpbTFBLCBkaW0yQSwgZGltMUIsIGRpbTJCLCBkaW0xQywgZGltMkMsIGRpbTFELCBkaW0yRCk7XFxuXFxuICAgIGZsb2F0IHNob3cgPSBmbG9hdChcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluQm91bmRpbmdCb3goZGltcywgbG9BLCBoaUEsIGxvQiwgaGlCLCBsb0MsIGhpQywgbG9ELCBoaUQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICYmIHdpdGhpblJhc3Rlck1hc2soZGltcywgbWFzaywgbWFza0hlaWdodClcXG4gICAgICAgICAgICAgICAgICAgICAgKTtcXG5cXG4gICAgdmVjMiB2aWV3Qm94WFkgPSB2aWV3Qm94UG9zaXRpb24gKyB2aWV3Qm94U2l6ZSAqIHZlYzIoeCwgeSk7XFxuICAgIGZsb2F0IGRlcHRoT3JIaWRlID0gZGVwdGggKyAyLjAgKiAoMS4wIC0gc2hvdyk7XFxuXFxuICAgIHJldHVybiB2ZWM0KFxcbiAgICAgICAgeHlQcm9qZWN0aW9uICogKDIuMCAqIHZpZXdCb3hYWSAvIHJlc29sdXRpb24gLSAxLjApLFxcbiAgICAgICAgZGVwdGhPckhpZGUsXFxuICAgICAgICAxLjBcXG4gICAgKTtcXG59XFxuXFxudm9pZCBtYWluKCkge1xcblxcbiAgICBmbG9hdCBwcm9taW5lbmNlID0gYWJzKHBmWzNdKTtcXG5cXG4gICAgbWF0NCBwWzRdO1xcbiAgICBwWzBdID0gbWF0NChwMCwgcDEsIHAyLCBwMyk7XFxuICAgIHBbMV0gPSBtYXQ0KHA0LCBwNSwgcDYsIHA3KTtcXG4gICAgcFsyXSA9IG1hdDQocDgsIHA5LCBwYSwgcGIpO1xcbiAgICBwWzNdID0gbWF0NChwYywgcGQsIHBlLCBhYnMocGYpKTtcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSBwb3NpdGlvbihcXG4gICAgICAgIDEuMCAtIHByb21pbmVuY2UsXFxuICAgICAgICByZXNvbHV0aW9uLCB2aWV3Qm94UG9zaXRpb24sIHZpZXdCb3hTaXplLFxcbiAgICAgICAgcCxcXG4gICAgICAgIHNpZ24ocGZbM10pLFxcbiAgICAgICAgZGltMUEsIGRpbTJBLCBkaW0xQiwgZGltMkIsIGRpbTFDLCBkaW0yQywgZGltMUQsIGRpbTJELFxcbiAgICAgICAgbG9BLCBoaUEsIGxvQiwgaGlCLCBsb0MsIGhpQywgbG9ELCBoaUQsXFxuICAgICAgICBtYXNrLCBtYXNrSGVpZ2h0XFxuICAgICk7XFxuXFxuICAgIGZsb2F0IGNsYW1wZWRDb2xvckluZGV4ID0gY2xhbXAoKHByb21pbmVuY2UgLSBjb2xvckNsYW1wWzBdKSAvIChjb2xvckNsYW1wWzFdIC0gY29sb3JDbGFtcFswXSksIDAuMCwgMS4wKTtcXG4gICAgZnJhZ0NvbG9yID0gdGV4dHVyZTJEKHBhbGV0dGUsIHZlYzIoKGNsYW1wZWRDb2xvckluZGV4ICogMjU1LjAgKyAwLjUpIC8gMjU2LjAsIDAuNSkpO1xcbn1cXG5cIl0pLGE9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjNCBwMCwgcDEsIHAyLCBwMyxcXG4gICAgICAgICAgICAgICBwNCwgcDUsIHA2LCBwNyxcXG4gICAgICAgICAgICAgICBwOCwgcDksIHBhLCBwYixcXG4gICAgICAgICAgICAgICBwYywgcGQsIHBlO1xcblxcbmF0dHJpYnV0ZSB2ZWM0IHBmO1xcblxcbnVuaWZvcm0gbWF0NCBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkQ7XFxuXFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb24sXFxuICAgICAgICAgICAgIHZpZXdCb3hQb3NpdGlvbixcXG4gICAgICAgICAgICAgdmlld0JveFNpemU7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgcGFsZXR0ZTtcXG5cXG51bmlmb3JtIHZlYzIgY29sb3JDbGFtcDtcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xcblxcbnZlYzIgeHlQcm9qZWN0aW9uID0gdmVjMigxLCAxKTtcXG5cXG52ZWM0IHVuaXQgPSB2ZWM0KDEsIDEsIDEsIDEpO1xcblxcbmZsb2F0IHZhbChtYXQ0IHAsIG1hdDQgdikge1xcbiAgICByZXR1cm4gZG90KG1hdHJpeENvbXBNdWx0KHAsIHYpICogdW5pdCwgdW5pdCk7XFxufVxcblxcbmZsb2F0IGF4aXNZKFxcbiAgICAgICAgZmxvYXQgeCxcXG4gICAgICAgIG1hdDQgZFs0XSxcXG4gICAgICAgIG1hdDQgZGltMUEsIG1hdDQgZGltMkEsIG1hdDQgZGltMUIsIG1hdDQgZGltMkIsIG1hdDQgZGltMUMsIG1hdDQgZGltMkMsIG1hdDQgZGltMUQsIG1hdDQgZGltMkRcXG4gICAgKSB7XFxuXFxuICAgIGZsb2F0IHkxID0gdmFsKGRbMF0sIGRpbTFBKSArIHZhbChkWzFdLCBkaW0xQikgKyB2YWwoZFsyXSwgZGltMUMpICsgdmFsKGRbM10sIGRpbTFEKTtcXG4gICAgZmxvYXQgeTIgPSB2YWwoZFswXSwgZGltMkEpICsgdmFsKGRbMV0sIGRpbTJCKSArIHZhbChkWzJdLCBkaW0yQykgKyB2YWwoZFszXSwgZGltMkQpO1xcbiAgICByZXR1cm4geTEgKiAoMS4wIC0geCkgKyB5MiAqIHg7XFxufVxcblxcbnZlYzQgcG9zaXRpb24oXFxuICAgICAgICBmbG9hdCBkZXB0aCxcXG4gICAgICAgIHZlYzIgcmVzb2x1dGlvbiwgdmVjMiB2aWV3Qm94UG9zaXRpb24sIHZlYzIgdmlld0JveFNpemUsXFxuICAgICAgICBtYXQ0IGRpbXNbNF0sXFxuICAgICAgICBmbG9hdCBzaWdudW0sXFxuICAgICAgICBtYXQ0IGRpbTFBLCBtYXQ0IGRpbTJBLCBtYXQ0IGRpbTFCLCBtYXQ0IGRpbTJCLCBtYXQ0IGRpbTFDLCBtYXQ0IGRpbTJDLCBtYXQ0IGRpbTFELCBtYXQ0IGRpbTJEXFxuICAgICkge1xcblxcbiAgICBmbG9hdCB4ID0gMC41ICogc2lnbnVtICsgMC41O1xcbiAgICBmbG9hdCB5ID0gYXhpc1koeCwgZGltcywgZGltMUEsIGRpbTJBLCBkaW0xQiwgZGltMkIsIGRpbTFDLCBkaW0yQywgZGltMUQsIGRpbTJEKTtcXG5cXG4gICAgdmVjMiB2aWV3Qm94WFkgPSB2aWV3Qm94UG9zaXRpb24gKyB2aWV3Qm94U2l6ZSAqIHZlYzIoeCwgeSk7XFxuXFxuICAgIHJldHVybiB2ZWM0KFxcbiAgICAgICAgeHlQcm9qZWN0aW9uICogKDIuMCAqIHZpZXdCb3hYWSAvIHJlc29sdXRpb24gLSAxLjApLFxcbiAgICAgICAgZGVwdGgsXFxuICAgICAgICAxLjBcXG4gICAgKTtcXG59XFxuXFxudm9pZCBtYWluKCkge1xcblxcbiAgICBmbG9hdCBwcm9taW5lbmNlID0gYWJzKHBmWzNdKTtcXG5cXG4gICAgbWF0NCBwWzRdO1xcbiAgICBwWzBdID0gbWF0NChwMCwgcDEsIHAyLCBwMyk7XFxuICAgIHBbMV0gPSBtYXQ0KHA0LCBwNSwgcDYsIHA3KTtcXG4gICAgcFsyXSA9IG1hdDQocDgsIHA5LCBwYSwgcGIpO1xcbiAgICBwWzNdID0gbWF0NChwYywgcGQsIHBlLCBhYnMocGYpKTtcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSBwb3NpdGlvbihcXG4gICAgICAgIDEuMCAtIHByb21pbmVuY2UsXFxuICAgICAgICByZXNvbHV0aW9uLCB2aWV3Qm94UG9zaXRpb24sIHZpZXdCb3hTaXplLFxcbiAgICAgICAgcCxcXG4gICAgICAgIHNpZ24ocGZbM10pLFxcbiAgICAgICAgZGltMUEsIGRpbTJBLCBkaW0xQiwgZGltMkIsIGRpbTFDLCBkaW0yQywgZGltMUQsIGRpbTJEXFxuICAgICk7XFxuXFxuICAgIGZsb2F0IGNsYW1wZWRDb2xvckluZGV4ID0gY2xhbXAoKHByb21pbmVuY2UgLSBjb2xvckNsYW1wWzBdKSAvIChjb2xvckNsYW1wWzFdIC0gY29sb3JDbGFtcFswXSksIDAuMCwgMS4wKTtcXG4gICAgZnJhZ0NvbG9yID0gdGV4dHVyZTJEKHBhbGV0dGUsIHZlYzIoKGNsYW1wZWRDb2xvckluZGV4ICogMjU1LjAgKyAwLjUpIC8gMjU2LjAsIDAuNSkpO1xcbn1cXG5cIl0pLG89bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjNCBwMCwgcDEsIHAyLCBwMyxcXG4gICAgICAgICAgICAgICBwNCwgcDUsIHA2LCBwNyxcXG4gICAgICAgICAgICAgICBwOCwgcDksIHBhLCBwYixcXG4gICAgICAgICAgICAgICBwYywgcGQsIHBlO1xcblxcbmF0dHJpYnV0ZSB2ZWM0IHBmO1xcblxcbnVuaWZvcm0gbWF0NCBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkQsXFxuICAgICAgICAgICAgIGxvQSwgaGlBLCBsb0IsIGhpQiwgbG9DLCBoaUMsIGxvRCwgaGlEO1xcblxcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgICB2aWV3Qm94UG9zaXRpb24sXFxuICAgICAgICAgICAgIHZpZXdCb3hTaXplO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIG1hc2s7XFxudW5pZm9ybSBmbG9hdCBtYXNrSGVpZ2h0O1xcblxcbnVuaWZvcm0gdmVjMiBjb2xvckNsYW1wO1xcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxuXFxudmVjNCB1bml0XzEgPSB2ZWM0KDEsIDEsIDEsIDEpO1xcblxcbmZsb2F0IHZhbChtYXQ0IHAsIG1hdDQgdikge1xcbiAgICByZXR1cm4gZG90KG1hdHJpeENvbXBNdWx0KHAsIHYpICogdW5pdF8xLCB1bml0XzEpO1xcbn1cXG5cXG5mbG9hdCBheGlzWShcXG4gICAgICAgIGZsb2F0IHgsXFxuICAgICAgICBtYXQ0IGRbNF0sXFxuICAgICAgICBtYXQ0IGRpbTFBLCBtYXQ0IGRpbTJBLCBtYXQ0IGRpbTFCLCBtYXQ0IGRpbTJCLCBtYXQ0IGRpbTFDLCBtYXQ0IGRpbTJDLCBtYXQ0IGRpbTFELCBtYXQ0IGRpbTJEXFxuICAgICkge1xcblxcbiAgICBmbG9hdCB5MSA9IHZhbChkWzBdLCBkaW0xQSkgKyB2YWwoZFsxXSwgZGltMUIpICsgdmFsKGRbMl0sIGRpbTFDKSArIHZhbChkWzNdLCBkaW0xRCk7XFxuICAgIGZsb2F0IHkyID0gdmFsKGRbMF0sIGRpbTJBKSArIHZhbChkWzFdLCBkaW0yQikgKyB2YWwoZFsyXSwgZGltMkMpICsgdmFsKGRbM10sIGRpbTJEKTtcXG4gICAgcmV0dXJuIHkxICogKDEuMCAtIHgpICsgeTIgKiB4O1xcbn1cXG5cXG5jb25zdCBpbnQgYml0c1BlckJ5dGUgPSA4O1xcblxcbmludCBtb2QyKGludCBhKSB7XFxuICAgIHJldHVybiBhIC0gMiAqIChhIC8gMik7XFxufVxcblxcbmludCBtb2Q4KGludCBhKSB7XFxuICAgIHJldHVybiBhIC0gOCAqIChhIC8gOCk7XFxufVxcblxcbnZlYzQgemVybyA9IHZlYzQoMCwgMCwgMCwgMCk7XFxudmVjNCB1bml0XzAgPSB2ZWM0KDEsIDEsIDEsIDEpO1xcbnZlYzIgeHlQcm9qZWN0aW9uID0gdmVjMigxLCAxKTtcXG5cXG5tYXQ0IG1jbGFtcChtYXQ0IG0sIG1hdDQgbG8sIG1hdDQgaGkpIHtcXG4gICAgcmV0dXJuIG1hdDQoY2xhbXAobVswXSwgbG9bMF0sIGhpWzBdKSxcXG4gICAgICAgICAgICAgICAgY2xhbXAobVsxXSwgbG9bMV0sIGhpWzFdKSxcXG4gICAgICAgICAgICAgICAgY2xhbXAobVsyXSwgbG9bMl0sIGhpWzJdKSxcXG4gICAgICAgICAgICAgICAgY2xhbXAobVszXSwgbG9bM10sIGhpWzNdKSk7XFxufVxcblxcbmJvb2wgbXNob3cobWF0NCBwLCBtYXQ0IGxvLCBtYXQ0IGhpKSB7XFxuICAgIHJldHVybiBtY2xhbXAocCwgbG8sIGhpKSA9PSBwO1xcbn1cXG5cXG5ib29sIHdpdGhpbkJvdW5kaW5nQm94KFxcbiAgICAgICAgbWF0NCBkWzRdLFxcbiAgICAgICAgbWF0NCBsb0EsIG1hdDQgaGlBLCBtYXQ0IGxvQiwgbWF0NCBoaUIsIG1hdDQgbG9DLCBtYXQ0IGhpQywgbWF0NCBsb0QsIG1hdDQgaGlEXFxuICAgICkge1xcblxcbiAgICByZXR1cm4gbXNob3coZFswXSwgbG9BLCBoaUEpICYmXFxuICAgICAgICAgICBtc2hvdyhkWzFdLCBsb0IsIGhpQikgJiZcXG4gICAgICAgICAgIG1zaG93KGRbMl0sIGxvQywgaGlDKSAmJlxcbiAgICAgICAgICAgbXNob3coZFszXSwgbG9ELCBoaUQpO1xcbn1cXG5cXG5ib29sIHdpdGhpblJhc3Rlck1hc2sobWF0NCBkWzRdLCBzYW1wbGVyMkQgbWFzaywgZmxvYXQgaGVpZ2h0KSB7XFxuICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTtcXG4gICAgaW50IGJpdEluQnl0ZVN0ZXBwZXI7XFxuICAgIGZsb2F0IHZhbFksIHZhbHVlWSwgc2NhbGVYO1xcbiAgICBpbnQgaGl0LCBiaXRtYXNrLCB2YWxYO1xcbiAgICBmb3IoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7XFxuICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgNDsgaisrKSB7XFxuICAgICAgICAgICAgZm9yKGludCBrID0gMDsgayA8IDQ7IGsrKykge1xcbiAgICAgICAgICAgICAgICBiaXRJbkJ5dGVTdGVwcGVyID0gbW9kOChqICogNCArIGspO1xcbiAgICAgICAgICAgICAgICB2YWxYID0gaSAqIDIgKyBqIC8gMjtcXG4gICAgICAgICAgICAgICAgdmFsWSA9IGRbaV1bal1ba107XFxuICAgICAgICAgICAgICAgIHZhbHVlWSA9IHZhbFkgKiAoaGVpZ2h0IC0gMS4wKSArIDAuNTtcXG4gICAgICAgICAgICAgICAgc2NhbGVYID0gKGZsb2F0KHZhbFgpICsgMC41KSAvIDguMDtcXG4gICAgICAgICAgICAgICAgaGl0ID0gaW50KHRleHR1cmUyRChtYXNrLCB2ZWMyKHNjYWxlWCwgKHZhbHVlWSArIDAuNSkgLyBoZWlnaHQpKVszXSAqIDI1NS4wKSAvIGludChwb3coMi4wLCBmbG9hdChiaXRJbkJ5dGVTdGVwcGVyKSkpO1xcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgbW9kMihoaXQpID09IDE7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxufVxcblxcbnZlYzQgcG9zaXRpb24oXFxuICAgICAgICBmbG9hdCBkZXB0aCxcXG4gICAgICAgIHZlYzIgcmVzb2x1dGlvbiwgdmVjMiB2aWV3Qm94UG9zaXRpb24sIHZlYzIgdmlld0JveFNpemUsXFxuICAgICAgICBtYXQ0IGRpbXNbNF0sXFxuICAgICAgICBmbG9hdCBzaWdudW0sXFxuICAgICAgICBtYXQ0IGRpbTFBLCBtYXQ0IGRpbTJBLCBtYXQ0IGRpbTFCLCBtYXQ0IGRpbTJCLCBtYXQ0IGRpbTFDLCBtYXQ0IGRpbTJDLCBtYXQ0IGRpbTFELCBtYXQ0IGRpbTJELFxcbiAgICAgICAgbWF0NCBsb0EsIG1hdDQgaGlBLCBtYXQ0IGxvQiwgbWF0NCBoaUIsIG1hdDQgbG9DLCBtYXQ0IGhpQywgbWF0NCBsb0QsIG1hdDQgaGlELFxcbiAgICAgICAgc2FtcGxlcjJEIG1hc2ssIGZsb2F0IG1hc2tIZWlnaHRcXG4gICAgKSB7XFxuXFxuICAgIGZsb2F0IHggPSAwLjUgKiBzaWdudW0gKyAwLjU7XFxuICAgIGZsb2F0IHkgPSBheGlzWSh4LCBkaW1zLCBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkQpO1xcblxcbiAgICBmbG9hdCBzaG93ID0gZmxvYXQoXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbkJvdW5kaW5nQm94KGRpbXMsIGxvQSwgaGlBLCBsb0IsIGhpQiwgbG9DLCBoaUMsIGxvRCwgaGlEKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3aXRoaW5SYXN0ZXJNYXNrKGRpbXMsIG1hc2ssIG1hc2tIZWlnaHQpXFxuICAgICAgICAgICAgICAgICAgICAgICk7XFxuXFxuICAgIHZlYzIgdmlld0JveFhZID0gdmlld0JveFBvc2l0aW9uICsgdmlld0JveFNpemUgKiB2ZWMyKHgsIHkpO1xcbiAgICBmbG9hdCBkZXB0aE9ySGlkZSA9IGRlcHRoICsgMi4wICogKDEuMCAtIHNob3cpO1xcblxcbiAgICByZXR1cm4gdmVjNChcXG4gICAgICAgIHh5UHJvamVjdGlvbiAqICgyLjAgKiB2aWV3Qm94WFkgLyByZXNvbHV0aW9uIC0gMS4wKSxcXG4gICAgICAgIGRlcHRoT3JIaWRlLFxcbiAgICAgICAgMS4wXFxuICAgICk7XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG5cXG4gICAgZmxvYXQgcHJvbWluZW5jZSA9IGFicyhwZlszXSk7XFxuXFxuICAgIG1hdDQgcFs0XTtcXG4gICAgcFswXSA9IG1hdDQocDAsIHAxLCBwMiwgcDMpO1xcbiAgICBwWzFdID0gbWF0NChwNCwgcDUsIHA2LCBwNyk7XFxuICAgIHBbMl0gPSBtYXQ0KHA4LCBwOSwgcGEsIHBiKTtcXG4gICAgcFszXSA9IG1hdDQocGMsIHBkLCBwZSwgYWJzKHBmKSk7XFxuXFxuICAgIGdsX1Bvc2l0aW9uID0gcG9zaXRpb24oXFxuICAgICAgICAxLjAgLSBwcm9taW5lbmNlLFxcbiAgICAgICAgcmVzb2x1dGlvbiwgdmlld0JveFBvc2l0aW9uLCB2aWV3Qm94U2l6ZSxcXG4gICAgICAgIHAsXFxuICAgICAgICBzaWduKHBmWzNdKSxcXG4gICAgICAgIGRpbTFBLCBkaW0yQSwgZGltMUIsIGRpbTJCLCBkaW0xQywgZGltMkMsIGRpbTFELCBkaW0yRCxcXG4gICAgICAgIGxvQSwgaGlBLCBsb0IsIGhpQiwgbG9DLCBoaUMsIGxvRCwgaGlELFxcbiAgICAgICAgbWFzaywgbWFza0hlaWdodFxcbiAgICApO1xcblxcbiAgICBmcmFnQ29sb3IgPSB2ZWM0KHBmLnJnYiwgMS4wKTtcXG59XFxuXCJdKSxzPW4oW1wicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xcbn1cXG5cIl0pLGw9dChcIi4uLy4uL2xpYlwiKSxjPTFlLTYsdT0xZS03LGg9MjA0OCxmPTY0LHA9MixkPTQsZz04LHY9Zi9nLG09WzExOSwxMTksMTE5XSx5PW5ldyBVaW50OEFycmF5KDQpLHg9bmV3IFVpbnQ4QXJyYXkoNCksYj17c2hhcGU6WzI1NiwxXSxmb3JtYXQ6XCJyZ2JhXCIsdHlwZTpcInVpbnQ4XCIsbWFnOlwibmVhcmVzdFwiLG1pbjpcIm5lYXJlc3RcIn07ZnVuY3Rpb24gXyh0LGUscixuLGkpe3ZhciBhPXQuX2dsO2EuZW5hYmxlKGEuU0NJU1NPUl9URVNUKSxhLnNjaXNzb3IoZSxyLG4saSksdC5jbGVhcih7Y29sb3I6WzAsMCwwLDBdLGRlcHRoOjF9KX1mdW5jdGlvbiB3KHQsZSxyLG4saSxhKXt2YXIgbz1hLmtleTtyLmRyYXdDb21wbGV0ZWR8fCghZnVuY3Rpb24odCl7dC5yZWFkKHt4OjAseTowLHdpZHRoOjEsaGVpZ2h0OjEsZGF0YTp5fSl9KHQpLHIuZHJhd0NvbXBsZXRlZD0hMCksZnVuY3Rpb24gcyhsKXt2YXIgYztjPU1hdGgubWluKG4saS1sKm4pLGEub2Zmc2V0PXAqbCpuLGEuY291bnQ9cCpjLDA9PT1sJiYod2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHIuY3VycmVudFJhZnNbb10pLGRlbGV0ZSByLmN1cnJlbnRSYWZzW29dLF8odCxhLnNjaXNzb3JYLGEuc2Npc3NvclksYS5zY2lzc29yV2lkdGgsYS52aWV3Qm94U2l6ZVsxXSkpLHIuY2xlYXJPbmx5fHwoZShhKSxsKm4rYzxpJiYoci5jdXJyZW50UmFmc1tvXT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7cyhsKzEpfSkpLHIuZHJhd0NvbXBsZXRlZD0hMSl9KDApfWZ1bmN0aW9uIGsodCxlKXtyZXR1cm4odD4+PjgqZSklMjU2LzI1NX1mdW5jdGlvbiBBKHQsZSxyKXt2YXIgbixpLGEsbz1bXTtmb3IoaT0wO2k8dDtpKyspZm9yKGE9MDthPHA7YSsrKWZvcihuPTA7bjxkO24rKylvLnB1c2goZVtpKmYrcipkK25dKSxyKmQrbj09PWYtMSYmYSUyPT0wJiYob1tvLmxlbmd0aC0xXSo9LTEpO3JldHVybiBvfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4scCxkLHksVD1lLmNvbnRleHQsTT1lLnBpY2ssUz1lLnJlZ2wsRT17Y3VycmVudFJhZnM6e30sZHJhd0NvbXBsZXRlZDohMCxjbGVhck9ubHk6ITF9LEM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LHI9MDtyPDE2O3IrKyllW1wicFwiK3IudG9TdHJpbmcoMTYpXT10LmJ1ZmZlcih7dXNhZ2U6XCJkeW5hbWljXCIsdHlwZTpcImZsb2F0XCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pO3JldHVybiBlfShTKSxMPVMudGV4dHVyZShiKTtPKGUpO3ZhciB6PVMoe3Byb2ZpbGU6ITEsYmxlbmQ6e2VuYWJsZTpULGZ1bmM6e3NyY1JHQjpcInNyYyBhbHBoYVwiLGRzdFJHQjpcIm9uZSBtaW51cyBzcmMgYWxwaGFcIixzcmNBbHBoYToxLGRzdEFscGhhOjF9LGVxdWF0aW9uOntyZ2I6XCJhZGRcIixhbHBoYTpcImFkZFwifSxjb2xvcjpbMCwwLDAsMF19LGRlcHRoOntlbmFibGU6IVQsbWFzazohMCxmdW5jOlwibGVzc1wiLHJhbmdlOlswLDFdfSxjdWxsOntlbmFibGU6ITAsZmFjZTpcImJhY2tcIn0sc2Npc3Nvcjp7ZW5hYmxlOiEwLGJveDp7eDpTLnByb3AoXCJzY2lzc29yWFwiKSx5OlMucHJvcChcInNjaXNzb3JZXCIpLHdpZHRoOlMucHJvcChcInNjaXNzb3JXaWR0aFwiKSxoZWlnaHQ6Uy5wcm9wKFwic2Npc3NvckhlaWdodFwiKX19LHZpZXdwb3J0Ont4OlMucHJvcChcInZpZXdwb3J0WFwiKSx5OlMucHJvcChcInZpZXdwb3J0WVwiKSx3aWR0aDpTLnByb3AoXCJ2aWV3cG9ydFdpZHRoXCIpLGhlaWdodDpTLnByb3AoXCJ2aWV3cG9ydEhlaWdodFwiKX0sZGl0aGVyOiExLHZlcnQ6TT9vOlQ/YTppLGZyYWc6cyxwcmltaXRpdmU6XCJsaW5lc1wiLGxpbmVXaWR0aDoxLGF0dHJpYnV0ZXM6Qyx1bmlmb3Jtczp7cmVzb2x1dGlvbjpTLnByb3AoXCJyZXNvbHV0aW9uXCIpLHZpZXdCb3hQb3NpdGlvbjpTLnByb3AoXCJ2aWV3Qm94UG9zaXRpb25cIiksdmlld0JveFNpemU6Uy5wcm9wKFwidmlld0JveFNpemVcIiksZGltMUE6Uy5wcm9wKFwiZGltMUFcIiksZGltMkE6Uy5wcm9wKFwiZGltMkFcIiksZGltMUI6Uy5wcm9wKFwiZGltMUJcIiksZGltMkI6Uy5wcm9wKFwiZGltMkJcIiksZGltMUM6Uy5wcm9wKFwiZGltMUNcIiksZGltMkM6Uy5wcm9wKFwiZGltMkNcIiksZGltMUQ6Uy5wcm9wKFwiZGltMURcIiksZGltMkQ6Uy5wcm9wKFwiZGltMkRcIiksbG9BOlMucHJvcChcImxvQVwiKSxoaUE6Uy5wcm9wKFwiaGlBXCIpLGxvQjpTLnByb3AoXCJsb0JcIiksaGlCOlMucHJvcChcImhpQlwiKSxsb0M6Uy5wcm9wKFwibG9DXCIpLGhpQzpTLnByb3AoXCJoaUNcIiksbG9EOlMucHJvcChcImxvRFwiKSxoaUQ6Uy5wcm9wKFwiaGlEXCIpLHBhbGV0dGU6TCxtYXNrOlMucHJvcChcIm1hc2tUZXh0dXJlXCIpLG1hc2tIZWlnaHQ6Uy5wcm9wKFwibWFza0hlaWdodFwiKSxjb2xvckNsYW1wOlMucHJvcChcImNvbG9yQ2xhbXBcIil9LG9mZnNldDpTLnByb3AoXCJvZmZzZXRcIiksY291bnQ6Uy5wcm9wKFwiY291bnRcIil9KTtmdW5jdGlvbiBPKHQpe3I9dC5tb2RlbCxuPXQudmlld01vZGVsLHA9bi5kaW1lbnNpb25zLnNsaWNlKCksZD1wWzBdP3BbMF0udmFsdWVzLmxlbmd0aDowO3ZhciBlPXIubGluZXMsaT1NP2UuY29sb3IubWFwKGZ1bmN0aW9uKHQscil7cmV0dXJuIHIvZS5jb2xvci5sZW5ndGh9KTplLmNvbG9yLGE9TWF0aC5tYXgoMS8yNTUsTWF0aC5wb3coMS9pLmxlbmd0aCwxLzMpKSxvPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saT1lLmxlbmd0aCxhPVtdLG89MDtvPHQ7bysrKWZvcih2YXIgcz0wO3M8ZjtzKyspYS5wdXNoKHM8aT9lW3NdLnBhZGRlZFVuaXRWYWx1ZXNbb106cz09PWYtMT8obj1yW29dLE1hdGgubWF4KGMsTWF0aC5taW4oMS1jLG4pKSk6cz49Zi00P2sobyxmLTItcyk6LjUpO3JldHVybiBhfShkLHAsaSk7IWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPDE2O24rKyl0W1wicFwiK24udG9TdHJpbmcoMTYpXShBKGUscixuKSl9KEMsZCxvKSxMPVMudGV4dHVyZShsLmV4dGVuZEZsYXQoe2RhdGE6ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1bXSxpPTA7aTwyNTY7aSsrKXt2YXIgYT10KGkvMjU1KTtuLnB1c2goKGU/bTphKS5jb25jYXQocikpfXJldHVybiBufShyLnVuaXRUb0NvbG9yLFQsTWF0aC5yb3VuZCgyNTUqKFQ/YToxKSkpfSxiKSl9dmFyIEk9WzAsMV07dmFyIEQ9W107ZnVuY3Rpb24gUCh0LGUsbixpLGEsbyxzLGMsdSxoLGYpe3ZhciBwLGQsZyx2LG09W3QsZV0seT1bMCwxXS5tYXAoZnVuY3Rpb24oKXtyZXR1cm5bMCwxLDIsM10ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMTYpfSl9KTtmb3IocD0wO3A8MjtwKyspZm9yKHY9bVtwXSxkPTA7ZDw0O2QrKylmb3IoZz0wO2c8MTY7ZysrKXlbcF1bZF1bZ109ZysxNipkPT09dj8xOjA7dmFyIHg9ci5saW5lcy5jYW52YXNPdmVyZHJhZyxiPXIuZG9tYWluLF89ci5jYW52YXNXaWR0aCx3PXIuY2FudmFzSGVpZ2h0O3JldHVybiBsLmV4dGVuZEZsYXQoe2tleTpzLHJlc29sdXRpb246W18sd10sdmlld0JveFBvc2l0aW9uOltuK3gsaV0sdmlld0JveFNpemU6W2Esb10saTp0LGlpOmUsZGltMUE6eVswXVswXSxkaW0xQjp5WzBdWzFdLGRpbTFDOnlbMF1bMl0sZGltMUQ6eVswXVszXSxkaW0yQTp5WzFdWzBdLGRpbTJCOnlbMV1bMV0sZGltMkM6eVsxXVsyXSxkaW0yRDp5WzFdWzNdLGNvbG9yQ2xhbXA6SSxzY2lzc29yWDooYz09PXU/MDpuK3gpKyhyLnBhZC5sLXgpK3IubGF5b3V0V2lkdGgqYi54WzBdLHNjaXNzb3JXaWR0aDooYz09PWg/Xy1uK3g6YSsuNSkrKGM9PT11P24reDowKSxzY2lzc29yWTppK3IucGFkLmIrci5sYXlvdXRIZWlnaHQqYi55WzBdLHNjaXNzb3JIZWlnaHQ6byx2aWV3cG9ydFg6ci5wYWQubC14K3IubGF5b3V0V2lkdGgqYi54WzBdLHZpZXdwb3J0WTpyLnBhZC5iK3IubGF5b3V0SGVpZ2h0KmIueVswXSx2aWV3cG9ydFdpZHRoOl8sdmlld3BvcnRIZWlnaHQ6d30sZil9cmV0dXJue3NldENvbG9yRG9tYWluOmZ1bmN0aW9uKHQpe0lbMF09dFswXSxJWzFdPXRbMV19LHJlbmRlcjpmdW5jdGlvbih0LGUsbil7dmFyIGksYSxvLHM9dC5sZW5ndGgsbD0xLzAsYz0tMS8wO2ZvcihpPTA7aTxzO2krKyl0W2ldLmRpbTIuY2FudmFzWD5jJiYoYz10W2ldLmRpbTIuY2FudmFzWCxvPWkpLHRbaV0uZGltMS5jYW52YXNYPGwmJihsPXRbaV0uZGltMS5jYW52YXNYLGE9aSk7MD09PXMmJl8oUywwLDAsci5jYW52YXNXaWR0aCxyLmNhbnZhc0hlaWdodCk7dmFyIGY9VD97fTpmdW5jdGlvbigpe3ZhciB0LGUscixuPVswLDFdLm1hcChmdW5jdGlvbigpe3JldHVyblswLDEsMiwzXS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgxNil9KX0pO2Zvcih0PTA7dDwyO3QrKylmb3IoZT0wO2U8NDtlKyspZm9yKHI9MDtyPDE2O3IrKyl7dmFyIGksYT1yKzE2KmU7aT1hPHAubGVuZ3RoP3BbYV0uYnJ1c2guZmlsdGVyLmdldEJvdW5kcygpW3RdOnQsblt0XVtlXVtyXT1pKygyKnQtMSkqdX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9aC0xO3JldHVybltNYXRoLm1heCgwLE1hdGguZmxvb3IoZVswXSpyKSksTWF0aC5taW4ocixNYXRoLmNlaWwoZVsxXSpyKSldfWZvcih2YXIgcz1BcnJheS5hcHBseShudWxsLG5ldyBBcnJheShoKnYpKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gMjU1fSksbD0wO2w8cC5sZW5ndGg7bCsrKXt2YXIgYz1sJWcsZj0obC1jKS9nLGQ9TWF0aC5wb3coMixjKSxtPXBbbF0seD1tLmJydXNoLmZpbHRlci5nZXQoKTtpZighKHgubGVuZ3RoPDIpKWZvcih2YXIgYj1vKDAseFswXSlbMV0sXz0xO188eC5sZW5ndGg7XysrKXtmb3IodmFyIHc9bygwLHhbX10pLGs9YisxO2s8d1swXTtrKyspc1trKnYrZl0mPX5kO2I9TWF0aC5tYXgoYix3WzFdKX19dmFyIEE9e3NoYXBlOlt2LGhdLGZvcm1hdDpcImFscGhhXCIsdHlwZTpcInVpbnQ4XCIsbWFnOlwibmVhcmVzdFwiLG1pbjpcIm5lYXJlc3RcIixkYXRhOnN9O3JldHVybiB5P3koQSk6eT1TLnRleHR1cmUoQSkse21hc2tUZXh0dXJlOnksbWFza0hlaWdodDpoLGxvQTpuWzBdWzBdLGxvQjpuWzBdWzFdLGxvQzpuWzBdWzJdLGxvRDpuWzBdWzNdLGhpQTpuWzFdWzBdLGhpQjpuWzFdWzFdLGhpQzpuWzFdWzJdLGhpRDpuWzFdWzNdfX0oKTtmb3IoaT0wO2k8cztpKyspe3ZhciBtPXRbaV0seD1tLmRpbTEsYj14LmNyb3NzZmlsdGVyRGltZW5zaW9uSW5kZXgsaz1tLmNhbnZhc1gsQT1tLmNhbnZhc1ksTT1tLmRpbTIuY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleCxDPW0ucGFuZWxTaXplWCxMPW0ucGFuZWxTaXplWSxPPWsrQztpZihlfHwhRFtiXXx8RFtiXVswXSE9PWt8fERbYl1bMV0hPT1PKXtEW2JdPVtrLE9dO3ZhciBJPVAoYixNLGssQSxDLEwseC5jcm9zc2ZpbHRlckRpbWVuc2lvbkluZGV4LGksYSxvLGYpO0UuY2xlYXJPbmx5PW4sdyhTLHosRSxlP3IubGluZXMuYmxvY2tMaW5lQ291bnQ6ZCxkLEkpfX19LHJlYWRQaXhlbDpmdW5jdGlvbih0LGUpe3JldHVybiBTLnJlYWQoe3g6dCx5OmUsd2lkdGg6MSxoZWlnaHQ6MSxkYXRhOnh9KSx4fSxyZWFkUGl4ZWxzOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW5ldyBVaW50OEFycmF5KDQqcipuKTtyZXR1cm4gUy5yZWFkKHt4OnQseTplLHdpZHRoOnIsaGVpZ2h0Om4sZGF0YTppfSksaX0sZGVzdHJveTpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0LnN0eWxlW1wicG9pbnRlci1ldmVudHNcIl09XCJub25lXCIsTC5kZXN0cm95KCkseSYmeS5kZXN0cm95KCksQylDW2VdLmRlc3Ryb3koKX0sdXBkYXRlOk99fX0se1wiLi4vLi4vbGliXCI6NzAxLGdsc2xpZnk6NDAyfV0sMTAyMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhO2ZvcihufHwobj0xLzApLGk9MDtpPGUubGVuZ3RoO2krKykoYT1lW2ldKS52aXNpYmxlJiYobj1NYXRoLm1pbihuLGFbcl0ubGVuZ3RoKSk7Zm9yKG49PT0xLzAmJihuPTApLHQuX2xlbmd0aD1uLGk9MDtpPGUubGVuZ3RoO2krKykoYT1lW2ldKS52aXNpYmxlJiYoYS5fbGVuZ3RoPW4pO3JldHVybiBufX0se31dLDEwMjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGVcIikscz10KFwiLi4vLi4vbGliL2d1cFwiKSxsPXMua2V5RnVuLGM9cy5yZXBlYXQsdT1zLnVud3JhcCxoPXQoXCIuL2NvbnN0YW50c1wiKSxmPXQoXCIuL2F4aXNicnVzaFwiKSxwPXQoXCIuL2xpbmVzXCIpO2Z1bmN0aW9uIGQodCl7cmV0dXJuIShcInZpc2libGVcImluIHQpfHx0LnZpc2libGV9ZnVuY3Rpb24gZyh0KXt2YXIgZT10LnJhbmdlP3QucmFuZ2VbMF06aS5hZ2dOdW1zKE1hdGgubWluLG51bGwsdC52YWx1ZXMsdC5fbGVuZ3RoKSxyPXQucmFuZ2U/dC5yYW5nZVsxXTppLmFnZ051bXMoTWF0aC5tYXgsbnVsbCx0LnZhbHVlcyx0Ll9sZW5ndGgpO3JldHVybiFpc05hTihlKSYmaXNGaW5pdGUoZSl8fChlPTApLCFpc05hTihyKSYmaXNGaW5pdGUocil8fChyPTApLGU9PT1yJiYoMD09PWU/KGUtPTEscis9MSk6KGUqPS45LHIqPTEuMSkpLFtlLHJdfWZ1bmN0aW9uIHYodCl7cmV0dXJuIHQuZGltZW5zaW9ucy5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0LmJydXNoLmZpbHRlclNwZWNpZmllZH0pfWZ1bmN0aW9uIG0odCxlLHIpe3ZhciBhPXUoZSkscz1hLnRyYWNlLGw9YS5saW5lQ29sb3IsYz1zLmxpbmUsZj1jLnJldmVyc2VzY2FsZT9vLmZsaXBTY2FsZShhLmNzY2FsZSk6YS5jc2NhbGUscD1zLmRvbWFpbix2PXMuZGltZW5zaW9ucyxtPXQud2lkdGgseT1zLmxhYmVsZm9udCx4PXMudGlja2ZvbnQsYj1zLnJhbmdlZm9udCxfPWkuZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LGMse2NvbG9yOmwubWFwKG4uc2NhbGUubGluZWFyKCkuZG9tYWluKGcoe3ZhbHVlczpsLHJhbmdlOltjLmNtaW4sYy5jbWF4XSxfbGVuZ3RoOnMuX2xlbmd0aH0pKSksYmxvY2tMaW5lQ291bnQ6aC5ibG9ja0xpbmVDb3VudCxjYW52YXNPdmVyZHJhZzpoLm92ZXJkcmFnKmguY2FudmFzUGl4ZWxSYXRpb30pLHc9TWF0aC5mbG9vcihtKihwLnhbMV0tcC54WzBdKSksaz1NYXRoLmZsb29yKHQuaGVpZ2h0KihwLnlbMV0tcC55WzBdKSksQT10Lm1hcmdpbnx8e2w6ODAscjo4MCx0OjEwMCxiOjgwfSxUPXcsTT1rO3JldHVybntrZXk6cixjb2xDb3VudDp2LmZpbHRlcihkKS5sZW5ndGgsZGltZW5zaW9uczp2LHRpY2tEaXN0YW5jZTpoLnRpY2tEaXN0YW5jZSx1bml0VG9Db2xvcjpmdW5jdGlvbih0KXt2YXIgZT10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pLHI9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIG4ucmdiKHRbMV0pfSksaT1cInJnYlwiLnNwbGl0KFwiXCIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbi5zY2FsZS5saW5lYXIoKS5jbGFtcCghMCkuZG9tYWluKGUpLnJhbmdlKHIubWFwKChpPXQsZnVuY3Rpb24odCl7cmV0dXJuIHRbaV19KSkpO3ZhciBpfSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZSh0KX0pfX0oZiksbGluZXM6XyxsYWJlbEZvbnQ6eSx0aWNrRm9udDp4LHJhbmdlRm9udDpiLGxheW91dFdpZHRoOm0sbGF5b3V0SGVpZ2h0OnQuaGVpZ2h0LGRvbWFpbjpwLHRyYW5zbGF0ZVg6cC54WzBdKm0sdHJhbnNsYXRlWTp0LmhlaWdodC1wLnlbMV0qdC5oZWlnaHQscGFkOkEsY2FudmFzV2lkdGg6VCpoLmNhbnZhc1BpeGVsUmF0aW8rMipfLmNhbnZhc092ZXJkcmFnLGNhbnZhc0hlaWdodDpNKmguY2FudmFzUGl4ZWxSYXRpbyx3aWR0aDpULGhlaWdodDpNLGNhbnZhc1BpeGVsUmF0aW86aC5jYW52YXNQaXhlbFJhdGlvfX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgYT1yLndpZHRoLG89ci5oZWlnaHQscz1yLmRpbWVuc2lvbnMsbD1yLmNhbnZhc1BpeGVsUmF0aW8sYz1mdW5jdGlvbih0KXtyZXR1cm4gYSp0L01hdGgubWF4KDEsci5jb2xDb3VudC0xKX0sdT1oLnZlcnRpY2FsUGFkZGluZy9vLHA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5zY2FsZS5saW5lYXIoKS5yYW5nZShbZSx0LWVdKX0obyxoLnZlcnRpY2FsUGFkZGluZyksbT17a2V5OnIua2V5LHhTY2FsZTpjLG1vZGVsOnIsaW5CcnVzaERyYWc6ITF9LHk9e307cmV0dXJuIG0uZGltZW5zaW9ucz1zLmZpbHRlcihkKS5tYXAoZnVuY3Rpb24oYSxzKXt2YXIgZD1mdW5jdGlvbih0LGUpe3JldHVybiBuLnNjYWxlLmxpbmVhcigpLmRvbWFpbihnKHQpKS5yYW5nZShbZSwxLWVdKX0oYSx1KSx4PXlbYS5sYWJlbF07eVthLmxhYmVsXT0oeHx8MCkrMTt2YXIgYj1hLmxhYmVsKyh4P1wiX19cIit4OlwiXCIpLF89YS5jb25zdHJhaW50cmFuZ2Usdz1fJiZfLmxlbmd0aDt3JiYhQXJyYXkuaXNBcnJheShfWzBdKSYmKF89W19dKTt2YXIgaz13P18ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChkKX0pOltbMCwxXV0sQT1hLnZhbHVlcztBLmxlbmd0aD5hLl9sZW5ndGgmJihBPUEuc2xpY2UoMCxhLl9sZW5ndGgpKTt2YXIgVCxNPWEudGlja3ZhbHM7ZnVuY3Rpb24gUyh0LGUpe3JldHVybnt2YWw6dCx0ZXh0OlRbZV19fWZ1bmN0aW9uIEUodCxlKXtyZXR1cm4gdC52YWwtZS52YWx9aWYoQXJyYXkuaXNBcnJheShNKSYmTS5sZW5ndGgpe1Q9YS50aWNrdGV4dCxBcnJheS5pc0FycmF5KFQpJiZULmxlbmd0aD9ULmxlbmd0aD5NLmxlbmd0aD9UPVQuc2xpY2UoMCxNLmxlbmd0aCk6TS5sZW5ndGg+VC5sZW5ndGgmJihNPU0uc2xpY2UoMCxULmxlbmd0aCkpOlQ9TS5tYXAobi5mb3JtYXQoYS50aWNrZm9ybWF0KSk7Zm9yKHZhciBDPTE7QzxNLmxlbmd0aDtDKyspaWYoTVtDXTxNW0MtMV0pe2Zvcih2YXIgTD1NLm1hcChTKS5zb3J0KEUpLHo9MDt6PE0ubGVuZ3RoO3orKylNW3pdPUxbel0udmFsLFRbel09TFt6XS50ZXh0O2JyZWFrfX1lbHNlIE09dm9pZCAwO3JldHVybntrZXk6YixsYWJlbDphLmxhYmVsLHRpY2tGb3JtYXQ6YS50aWNrZm9ybWF0LHRpY2t2YWxzOk0sdGlja3RleHQ6VCxvcmRpbmFsOiEhTSxtdWx0aXNlbGVjdDphLm11bHRpc2VsZWN0LHhJbmRleDpzLGNyb3NzZmlsdGVyRGltZW5zaW9uSW5kZXg6cyx2aXNpYmxlSW5kZXg6YS5faW5kZXgsaGVpZ2h0Om8sdmFsdWVzOkEscGFkZGVkVW5pdFZhbHVlczpBLm1hcChkKSx1bml0VGlja3ZhbHM6TSYmTS5tYXAoZCkseFNjYWxlOmMseDpjKHMpLGNhbnZhc1g6YyhzKSpsLHVuaXRUb1BhZGRlZFB4OnAsZG9tYWluU2NhbGU6ZnVuY3Rpb24odCxlLHIsaSxhKXt2YXIgbyxzLGw9ZyhyKTtyZXR1cm4gaT9uLnNjYWxlLm9yZGluYWwoKS5kb21haW4oaS5tYXAoKG89bi5mb3JtYXQoci50aWNrZm9ybWF0KSxzPWEscz9mdW5jdGlvbih0LGUpe3ZhciByPXNbZV07cmV0dXJuIG51bGw9PXI/byh0KTpyfTpvKSkpLnJhbmdlKGkubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPShyLWxbMF0pLyhsWzFdLWxbMF0pO3JldHVybiB0LWUrbiooMiplLXQpfSkpOm4uc2NhbGUubGluZWFyKCkuZG9tYWluKGwpLnJhbmdlKFt0LWUsZV0pfShvLGgudmVydGljYWxQYWRkaW5nLGEsTSxUKSxvcmRpbmFsU2NhbGU6ZnVuY3Rpb24odCl7aWYodC50aWNrdmFscyl7dmFyIGU9Zyh0KTtyZXR1cm4gbi5zY2FsZS5vcmRpbmFsKCkuZG9tYWluKHQudGlja3ZhbHMpLnJhbmdlKHQudGlja3ZhbHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybih0LWVbMF0pLyhlWzFdLWVbMF0pfSkpfX0oYSkscGFyZW50Om0sbW9kZWw6cixicnVzaDpmLm1ha2VCcnVzaCh0LHcsayxmdW5jdGlvbigpe3QubGluZVBpY2tBY3RpdmUoITEpfSxmdW5jdGlvbigpe3ZhciBlPW07ZS5mb2N1c0xheWVyJiZlLmZvY3VzTGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwKTt2YXIgcj12KGUpOyF0LmNvbnRleHRTaG93bigpJiZyPyhlLmNvbnRleHRMYXllciYmZS5jb250ZXh0TGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwKSx0LmNvbnRleHRTaG93bighMCkpOnQuY29udGV4dFNob3duKCkmJiFyJiYoZS5jb250ZXh0TGF5ZXImJmUuY29udGV4dExheWVyLnJlbmRlcihlLnBhbmVscywhMCwhMCksdC5jb250ZXh0U2hvd24oITEpKX0sZnVuY3Rpb24ocil7dmFyIG49bTtpZihuLmZvY3VzTGF5ZXIucmVuZGVyKG4ucGFuZWxzLCEwKSxuLnBpY2tMYXllciYmbi5waWNrTGF5ZXIucmVuZGVyKG4ucGFuZWxzLCEwKSx0LmxpbmVQaWNrQWN0aXZlKCEwKSxlJiZlLmZpbHRlckNoYW5nZWQpe3ZhciBvPWQuaW52ZXJ0LHM9ci5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKG8pLnNvcnQoaS5zb3J0ZXJBc2MpfSkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0WzBdLWVbMF19KTtlLmZpbHRlckNoYW5nZWQobi5rZXksYS5faW5kZXgscyl9fSl9fSksbX1mdW5jdGlvbiB4KHQpe3QuY2xhc3NlZChoLmNuLmF4aXNFeHRlbnRUZXh0LCEwKS5hdHRyKFwidGV4dC1hbmNob3JcIixcIm1pZGRsZVwiKS5zdHlsZShcImN1cnNvclwiLFwiZGVmYXVsdFwiKS5zdHlsZShcInVzZXItc2VsZWN0XCIsXCJub25lXCIpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMsZCl7dmFyIGcsYixfPShnPSEwLGI9ITEse2xpbmVQaWNrQWN0aXZlOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2c9ISF0Omd9LGNvbnRleHRTaG93bjpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9iPSEhdDpifX0pLHc9by5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHUodCkudHJhY2UudmlzaWJsZX0pLm1hcChtLmJpbmQoMCxzKSkubWFwKHkuYmluZCgwLF8sZCkpO3IuZWFjaChmdW5jdGlvbih0LGUpe3JldHVybiBpLmV4dGVuZEZsYXQodCx3W2VdKX0pO3ZhciBrPXIuc2VsZWN0QWxsKFwiLmdsLWNhbnZhc1wiKS5lYWNoKGZ1bmN0aW9uKHQpe3Qudmlld01vZGVsPXdbMF0sdC5tb2RlbD10LnZpZXdNb2RlbD90LnZpZXdNb2RlbC5tb2RlbDpudWxsfSksQT1udWxsO2suZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBpY2t9KS5zdHlsZShcInBvaW50ZXItZXZlbnRzXCIsXCJhdXRvXCIpLm9uKFwibW91c2Vtb3ZlXCIsZnVuY3Rpb24odCl7aWYoXy5saW5lUGlja0FjdGl2ZSgpJiZ0LmxpbmVMYXllciYmZCYmZC5ob3Zlcil7dmFyIGU9bi5ldmVudCxyPXRoaXMud2lkdGgsaT10aGlzLmhlaWdodCxhPW4ubW91c2UodGhpcyksbz1hWzBdLHM9YVsxXTtpZihvPDB8fHM8MHx8bz49cnx8cz49aSlyZXR1cm47dmFyIGw9dC5saW5lTGF5ZXIucmVhZFBpeGVsKG8saS0xLXMpLGM9MCE9PWxbM10sdT1jP2xbMl0rMjU2KihsWzFdKzI1NipsWzBdKTpudWxsLGg9e3g6byx5OnMsY2xpZW50WDplLmNsaWVudFgsY2xpZW50WTplLmNsaWVudFksZGF0YUluZGV4OnQubW9kZWwua2V5LGN1cnZlTnVtYmVyOnV9O3UhPT1BJiYoYz9kLmhvdmVyKGgpOmQudW5ob3ZlciYmZC51bmhvdmVyKGgpLEE9dSl9fSksay5zdHlsZShcIm9wYWNpdHlcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5waWNrPy4wMToxfSksZS5zdHlsZShcImJhY2tncm91bmRcIixcInJnYmEoMjU1LCAyNTUsIDI1NSwgMClcIik7dmFyIFQ9ZS5zZWxlY3RBbGwoXCIuXCIraC5jbi5wYXJjb29yZHMpLmRhdGEodyxsKTtULmV4aXQoKS5yZW1vdmUoKSxULmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKGguY24ucGFyY29vcmRzLCEwKS5zdHlsZShcInNoYXBlLXJlbmRlcmluZ1wiLFwiY3Jpc3BFZGdlc1wiKS5zdHlsZShcInBvaW50ZXItZXZlbnRzXCIsXCJub25lXCIpLFQuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKFwiK3QubW9kZWwudHJhbnNsYXRlWCtcIixcIit0Lm1vZGVsLnRyYW5zbGF0ZVkrXCIpXCJ9KTt2YXIgTT1ULnNlbGVjdEFsbChcIi5cIitoLmNuLnBhcmNvb3Jkc0NvbnRyb2xWaWV3KS5kYXRhKGMsbCk7TS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChoLmNuLnBhcmNvb3Jkc0NvbnRyb2xWaWV3LCEwKSxNLmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXtyZXR1cm5cInRyYW5zbGF0ZShcIit0Lm1vZGVsLnBhZC5sK1wiLFwiK3QubW9kZWwucGFkLnQrXCIpXCJ9KTt2YXIgUz1NLnNlbGVjdEFsbChcIi5cIitoLmNuLnlBeGlzKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpbWVuc2lvbnN9LGwpO2Z1bmN0aW9uIEUodCxlKXtmb3IodmFyIHI9ZS5wYW5lbHN8fChlLnBhbmVscz1bXSksbj10LmRhdGEoKSxpPW4ubGVuZ3RoLTEsYT0wO2E8aTthKyspe3ZhciBvPXJbYV18fChyW2FdPXt9KSxzPW5bYV0sbD1uW2ErMV07by5kaW0xPXMsby5kaW0yPWwsby5jYW52YXNYPXMuY2FudmFzWCxvLnBhbmVsU2l6ZVg9bC5jYW52YXNYLXMuY2FudmFzWCxvLnBhbmVsU2l6ZVk9ZS5tb2RlbC5jYW52YXNIZWlnaHQsby55PTAsby5jYW52YXNZPTB9fVMuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoaC5jbi55QXhpcywhMCksTS5lYWNoKGZ1bmN0aW9uKHQpe0UoUyx0KX0pLGsuZWFjaChmdW5jdGlvbih0KXtpZih0LnZpZXdNb2RlbCl7IXQubGluZUxheWVyfHxkP3QubGluZUxheWVyPXAodGhpcyx0KTp0LmxpbmVMYXllci51cGRhdGUodCksKHQua2V5fHwwPT09dC5rZXkpJiYodC52aWV3TW9kZWxbdC5rZXldPXQubGluZUxheWVyKTt2YXIgZT0hdC5jb250ZXh0fHxkO3QubGluZUxheWVyLnJlbmRlcih0LnZpZXdNb2RlbC5wYW5lbHMsZSl9fSksUy5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrdC54U2NhbGUodC54SW5kZXgpK1wiLCAwKVwifSksUy5jYWxsKG4uYmVoYXZpb3IuZHJhZygpLm9yaWdpbihmdW5jdGlvbih0KXtyZXR1cm4gdH0pLm9uKFwiZHJhZ1wiLGZ1bmN0aW9uKHQpe3ZhciBlPXQucGFyZW50O18ubGluZVBpY2tBY3RpdmUoITEpLHQueD1NYXRoLm1heCgtaC5vdmVyZHJhZyxNYXRoLm1pbih0Lm1vZGVsLndpZHRoK2gub3ZlcmRyYWcsbi5ldmVudC54KSksdC5jYW52YXNYPXQueCp0Lm1vZGVsLmNhbnZhc1BpeGVsUmF0aW8sUy5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueC1lLnh9KS5lYWNoKGZ1bmN0aW9uKGUscil7ZS54SW5kZXg9cixlLng9dD09PWU/ZS54OmUueFNjYWxlKGUueEluZGV4KSxlLmNhbnZhc1g9ZS54KmUubW9kZWwuY2FudmFzUGl4ZWxSYXRpb30pLEUoUyxlKSxTLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gMCE9PU1hdGguYWJzKHQueEluZGV4LWUueEluZGV4KX0pLmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXtyZXR1cm5cInRyYW5zbGF0ZShcIit0LnhTY2FsZSh0LnhJbmRleCkrXCIsIDApXCJ9KSxuLnNlbGVjdCh0aGlzKS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrdC54K1wiLCAwKVwiKSxTLmVhY2goZnVuY3Rpb24ocixuLGkpe2k9PT10LnBhcmVudC5rZXkmJihlLmRpbWVuc2lvbnNbbl09cil9KSxlLmNvbnRleHRMYXllciYmZS5jb250ZXh0TGF5ZXIucmVuZGVyKGUucGFuZWxzLCExLCF2KGUpKSxlLmZvY3VzTGF5ZXIucmVuZGVyJiZlLmZvY3VzTGF5ZXIucmVuZGVyKGUucGFuZWxzKX0pLm9uKFwiZHJhZ2VuZFwiLGZ1bmN0aW9uKHQpe3ZhciBlPXQucGFyZW50O3QueD10LnhTY2FsZSh0LnhJbmRleCksdC5jYW52YXNYPXQueCp0Lm1vZGVsLmNhbnZhc1BpeGVsUmF0aW8sRShTLGUpLG4uc2VsZWN0KHRoaXMpLmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXtyZXR1cm5cInRyYW5zbGF0ZShcIit0LngrXCIsIDApXCJ9KSxlLmNvbnRleHRMYXllciYmZS5jb250ZXh0TGF5ZXIucmVuZGVyKGUucGFuZWxzLCExLCF2KGUpKSxlLmZvY3VzTGF5ZXImJmUuZm9jdXNMYXllci5yZW5kZXIoZS5wYW5lbHMpLGUucGlja0xheWVyJiZlLnBpY2tMYXllci5yZW5kZXIoZS5wYW5lbHMsITApLF8ubGluZVBpY2tBY3RpdmUoITApLGQmJmQuYXhlc01vdmVkJiZkLmF4ZXNNb3ZlZChlLmtleSxlLmRpbWVuc2lvbnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNyb3NzZmlsdGVyRGltZW5zaW9uSW5kZXh9KSl9KSksUy5leGl0KCkucmVtb3ZlKCk7dmFyIEM9Uy5zZWxlY3RBbGwoXCIuXCIraC5jbi5heGlzT3ZlcmxheXMpLmRhdGEoYyxsKTtDLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKGguY24uYXhpc092ZXJsYXlzLCEwKSxDLnNlbGVjdEFsbChcIi5cIitoLmNuLmF4aXMpLnJlbW92ZSgpO3ZhciBMPUMuc2VsZWN0QWxsKFwiLlwiK2guY24uYXhpcykuZGF0YShjLGwpO0wuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoaC5jbi5heGlzLCEwKSxMLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5tb2RlbC5oZWlnaHQvdC5tb2RlbC50aWNrRGlzdGFuY2Uscj10LmRvbWFpblNjYWxlLGk9ci5kb21haW4oKTtuLnNlbGVjdCh0aGlzKS5jYWxsKG4uc3ZnLmF4aXMoKS5vcmllbnQoXCJsZWZ0XCIpLnRpY2tTaXplKDQpLm91dGVyVGlja1NpemUoMikudGlja3MoZSx0LnRpY2tGb3JtYXQpLnRpY2tWYWx1ZXModC5vcmRpbmFsP2k6bnVsbCkudGlja0Zvcm1hdCh0Lm9yZGluYWw/ZnVuY3Rpb24odCl7cmV0dXJuIHR9Om51bGwpLnNjYWxlKHIpKSxhLmZvbnQoTC5zZWxlY3RBbGwoXCJ0ZXh0XCIpLHQubW9kZWwudGlja0ZvbnQpfSksTC5zZWxlY3RBbGwoXCIuZG9tYWluLCAudGljaz5saW5lXCIpLmF0dHIoXCJmaWxsXCIsXCJub25lXCIpLmF0dHIoXCJzdHJva2VcIixcImJsYWNrXCIpLmF0dHIoXCJzdHJva2Utb3BhY2l0eVwiLC4yNSkuYXR0cihcInN0cm9rZS13aWR0aFwiLFwiMXB4XCIpLEwuc2VsZWN0QWxsKFwidGV4dFwiKS5zdHlsZShcInRleHQtc2hhZG93XCIsXCIxcHggMXB4IDFweCAjZmZmLCAtMXB4IC0xcHggMXB4ICNmZmYsIDFweCAtMXB4IDFweCAjZmZmLCAtMXB4IDFweCAxcHggI2ZmZlwiKS5zdHlsZShcImN1cnNvclwiLFwiZGVmYXVsdFwiKS5zdHlsZShcInVzZXItc2VsZWN0XCIsXCJub25lXCIpO3ZhciB6PUMuc2VsZWN0QWxsKFwiLlwiK2guY24uYXhpc0hlYWRpbmcpLmRhdGEoYyxsKTt6LmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKGguY24uYXhpc0hlYWRpbmcsITApO3ZhciBPPXouc2VsZWN0QWxsKFwiLlwiK2guY24uYXhpc1RpdGxlKS5kYXRhKGMsbCk7Ty5lbnRlcigpLmFwcGVuZChcInRleHRcIikuY2xhc3NlZChoLmNuLmF4aXNUaXRsZSwhMCkuYXR0cihcInRleHQtYW5jaG9yXCIsXCJtaWRkbGVcIikuc3R5bGUoXCJjdXJzb3JcIixcImV3LXJlc2l6ZVwiKS5zdHlsZShcInVzZXItc2VsZWN0XCIsXCJub25lXCIpLnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixcImF1dG9cIiksTy5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoMCxcIistaC5heGlzVGl0bGVPZmZzZXQrXCIpXCIpLnRleHQoZnVuY3Rpb24odCl7cmV0dXJuIHQubGFiZWx9KS5lYWNoKGZ1bmN0aW9uKHQpe2EuZm9udChuLnNlbGVjdCh0aGlzKSx0Lm1vZGVsLmxhYmVsRm9udCl9KTt2YXIgST1DLnNlbGVjdEFsbChcIi5cIitoLmNuLmF4aXNFeHRlbnQpLmRhdGEoYyxsKTtJLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKGguY24uYXhpc0V4dGVudCwhMCk7dmFyIEQ9SS5zZWxlY3RBbGwoXCIuXCIraC5jbi5heGlzRXh0ZW50VG9wKS5kYXRhKGMsbCk7RC5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChoLmNuLmF4aXNFeHRlbnRUb3AsITApLEQuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKDAsXCIrLWguYXhpc0V4dGVudE9mZnNldCtcIilcIik7dmFyIFA9RC5zZWxlY3RBbGwoXCIuXCIraC5jbi5heGlzRXh0ZW50VG9wVGV4dCkuZGF0YShjLGwpO2Z1bmN0aW9uIFIodCxlKXtpZih0Lm9yZGluYWwpcmV0dXJuXCJcIjt2YXIgcj10LmRvbWFpblNjYWxlLmRvbWFpbigpO3JldHVybiBuLmZvcm1hdCh0LnRpY2tGb3JtYXQpKHJbZT9yLmxlbmd0aC0xOjBdKX1QLmVudGVyKCkuYXBwZW5kKFwidGV4dFwiKS5jbGFzc2VkKGguY24uYXhpc0V4dGVudFRvcFRleHQsITApLmNhbGwoeCksUC50ZXh0KGZ1bmN0aW9uKHQpe3JldHVybiBSKHQsITApfSkuZWFjaChmdW5jdGlvbih0KXthLmZvbnQobi5zZWxlY3QodGhpcyksdC5tb2RlbC5yYW5nZUZvbnQpfSk7dmFyIEY9SS5zZWxlY3RBbGwoXCIuXCIraC5jbi5heGlzRXh0ZW50Qm90dG9tKS5kYXRhKGMsbCk7Ri5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChoLmNuLmF4aXNFeHRlbnRCb3R0b20sITApLEYuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKDAsXCIrKHQubW9kZWwuaGVpZ2h0K2guYXhpc0V4dGVudE9mZnNldCkrXCIpXCJ9KTt2YXIgQj1GLnNlbGVjdEFsbChcIi5cIitoLmNuLmF4aXNFeHRlbnRCb3R0b21UZXh0KS5kYXRhKGMsbCk7Qi5lbnRlcigpLmFwcGVuZChcInRleHRcIikuY2xhc3NlZChoLmNuLmF4aXNFeHRlbnRCb3R0b21UZXh0LCEwKS5hdHRyKFwiZHlcIixcIjAuNzVlbVwiKS5jYWxsKHgpLEIudGV4dChmdW5jdGlvbih0KXtyZXR1cm4gUih0KX0pLmVhY2goZnVuY3Rpb24odCl7YS5mb250KG4uc2VsZWN0KHRoaXMpLHQubW9kZWwucmFuZ2VGb250KX0pLGYuZW5zdXJlQXhpc0JydXNoKEMpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlXCI6NTkwLFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2d1cFwiOjY5OSxcIi4vYXhpc2JydXNoXCI6MTAxNixcIi4vY29uc3RhbnRzXCI6MTAxOSxcIi4vbGluZXNcIjoxMDIyLGQzOjE1NX1dLDEwMjU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9wYXJjb29yZHNcIiksaT10KFwiLi4vLi4vbGliL3ByZXBhcmVfcmVnbFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LGE9ci5fdG9wcGFwZXIsbz1yLl9wYXBlcmRpdixzPXIuX2dsY29udGFpbmVyO2lmKGkodCkpe3ZhciBsPXt9LGM9e30sdT17fSxoPXt9LGY9ci5fc2l6ZTtlLmZvckVhY2goZnVuY3Rpb24oZSxyKXt2YXIgbj1lWzBdLnRyYWNlO3Vbcl09bi5pbmRleDt2YXIgaT1oW3JdPW4uX2Z1bGxJbnB1dC5pbmRleDtsW3JdPXQuZGF0YVtpXS5kaW1lbnNpb25zLGNbcl09dC5kYXRhW2ldLmRpbWVuc2lvbnMuc2xpY2UoKX0pO24obyxhLHMsZSx7d2lkdGg6Zi53LGhlaWdodDpmLmgsbWFyZ2luOnt0OmYudCxyOmYucixiOmYuYixsOmYubH19LHtmaWx0ZXJDaGFuZ2VkOmZ1bmN0aW9uKGUsbixpKXt2YXIgYT1jW2VdW25dLG89aS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoKX0pLHM9XCJkaW1lbnNpb25zW1wiK24rXCJdLmNvbnN0cmFpbnRyYW5nZVwiLGw9ci5fdHJhY2VQcmVHVUlbdC5fZnVsbERhdGFbdVtlXV0uX2Z1bGxJbnB1dC51aWRdO2lmKHZvaWQgMD09PWxbc10pe3ZhciBmPWEuY29uc3RyYWludHJhbmdlO2xbc109Znx8bnVsbH12YXIgcD10Ll9mdWxsRGF0YVt1W2VdXS5kaW1lbnNpb25zW25dO28ubGVuZ3RoPygxPT09by5sZW5ndGgmJihvPW9bMF0pLGEuY29uc3RyYWludHJhbmdlPW8scC5jb25zdHJhaW50cmFuZ2U9by5zbGljZSgpLG89W29dKTooZGVsZXRlIGEuY29uc3RyYWludHJhbmdlLGRlbGV0ZSBwLmNvbnN0cmFpbnRyYW5nZSxvPW51bGwpO3ZhciBkPXt9O2Rbc109byx0LmVtaXQoXCJwbG90bHlfcmVzdHlsZVwiLFtkLFtoW2VdXV0pfSxob3ZlcjpmdW5jdGlvbihlKXt0LmVtaXQoXCJwbG90bHlfaG92ZXJcIixlKX0sdW5ob3ZlcjpmdW5jdGlvbihlKXt0LmVtaXQoXCJwbG90bHlfdW5ob3ZlclwiLGUpfSxheGVzTW92ZWQ6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKHQpe3JldHVybiEoXCJ2aXNpYmxlXCJpbiB0KXx8dC52aXNpYmxlfWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuPWUuaW5kZXhPZihyKSxpPXQuaW5kZXhPZihuKTtyZXR1cm4tMT09PWkmJihpKz1lLmxlbmd0aCksaX12YXIgYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gaShyLHQsZSktaShyLHQsbil9fShjW2VdLmZpbHRlcihuKSk7bFtlXS5zb3J0KGEpLGNbZV0uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiFuKHQpfSkuc29ydChmdW5jdGlvbih0KXtyZXR1cm4gY1tlXS5pbmRleE9mKHQpfSkuZm9yRWFjaChmdW5jdGlvbih0KXtsW2VdLnNwbGljZShsW2VdLmluZGV4T2YodCksMSksbFtlXS5zcGxpY2UoY1tlXS5pbmRleE9mKHQpLDAsdCl9KSx0LmVtaXQoXCJwbG90bHlfcmVzdHlsZVwiLFt7ZGltZW5zaW9uczpbbFtlXV19LFtoW2VdXV0pfX0pfX19LHtcIi4uLy4uL2xpYi9wcmVwYXJlX3JlZ2xcIjo3MTQsXCIuL3BhcmNvb3Jkc1wiOjEwMjR9XSwxMDI2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9wbG90cy9kb21haW5cIikuYXR0cmlidXRlcyxsPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsYz1pKHtlZGl0VHlwZTpcImNhbGNcIixhcnJheU9rOiEwLGNvbG9yRWRpdFR5cGU6XCJwbG90XCJ9KTtlLmV4cG9ydHM9e2xhYmVsczp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sbGFiZWwwOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifSxkbGFiZWw6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjEsZWRpdFR5cGU6XCJjYWxjXCJ9LHZhbHVlczp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sbWFya2VyOntjb2xvcnM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0Om4uZGVmYXVsdExpbmUsYXJyYXlPazohMCxlZGl0VHlwZTpcInN0eWxlXCJ9LHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDowLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJzdHlsZVwifSxlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LHRleHQ6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGhvdmVydGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixhcnJheU9rOiEwLGVkaXRUeXBlOlwic3R5bGVcIn0sc2NhbGVncm91cDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcImNhbGNcIn0sdGV4dGluZm86e3ZhbFR5cGU6XCJmbGFnbGlzdFwiLGZsYWdzOltcImxhYmVsXCIsXCJ0ZXh0XCIsXCJ2YWx1ZVwiLFwicGVyY2VudFwiXSxleHRyYXM6W1wibm9uZVwiXSxlZGl0VHlwZTpcImNhbGNcIn0saG92ZXJpbmZvOmwoe30sYS5ob3ZlcmluZm8se2ZsYWdzOltcImxhYmVsXCIsXCJ0ZXh0XCIsXCJ2YWx1ZVwiLFwicGVyY2VudFwiLFwibmFtZVwiXX0pLGhvdmVydGVtcGxhdGU6byh7fSx7a2V5czpbXCJsYWJlbFwiLFwiY29sb3JcIixcInZhbHVlXCIsXCJwZXJjZW50XCIsXCJ0ZXh0XCJdfSksdGV4dHBvc2l0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJpbnNpZGVcIixcIm91dHNpZGVcIixcImF1dG9cIixcIm5vbmVcIl0sZGZsdDpcImF1dG9cIixhcnJheU9rOiEwLGVkaXRUeXBlOlwiY2FsY1wifSx0ZXh0Zm9udDpsKHt9LGMse30pLGluc2lkZXRleHRmb250Omwoe30sYyx7fSksb3V0c2lkZXRleHRmb250Omwoe30sYyx7fSksdGl0bGU6e3RleHQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGZvbnQ6bCh7fSxjLHt9KSxwb3NpdGlvbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1widG9wIGxlZnRcIixcInRvcCBjZW50ZXJcIixcInRvcCByaWdodFwiLFwibWlkZGxlIGNlbnRlclwiLFwiYm90dG9tIGxlZnRcIixcImJvdHRvbSBjZW50ZXJcIixcImJvdHRvbSByaWdodFwiXSxlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LGRvbWFpbjpzKHtuYW1lOlwicGllXCIsdHJhY2U6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9KSxob2xlOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifSxzb3J0Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LGRpcmVjdGlvbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiY2xvY2t3aXNlXCIsXCJjb3VudGVyY2xvY2t3aXNlXCJdLGRmbHQ6XCJjb3VudGVyY2xvY2t3aXNlXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHJvdGF0aW9uOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOi0zNjAsbWF4OjM2MCxkZmx0OjAsZWRpdFR5cGU6XCJjYWxjXCJ9LHB1bGw6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjAsYXJyYXlPazohMCxlZGl0VHlwZTpcImNhbGNcIn0sX2RlcHJlY2F0ZWQ6e3RpdGxlOnt2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwiY2FsY1wifSx0aXRsZWZvbnQ6bCh7fSxjLHt9KSx0aXRsZXBvc2l0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ0b3AgbGVmdFwiLFwidG9wIGNlbnRlclwiLFwidG9wIHJpZ2h0XCIsXCJtaWRkbGUgY2VudGVyXCIsXCJib3R0b20gbGVmdFwiLFwiYm90dG9tIGNlbnRlclwiLFwiYm90dG9tIHJpZ2h0XCJdLGVkaXRUeXBlOlwiY2FsY1wifX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIjo1NzcsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi4vLi4vcGxvdHMvZG9tYWluXCI6Nzc0LFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCI6Nzc1fV0sMTAyNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxpPXQoXCIuLi8uLi9wbG90cy9nZXRfZGF0YVwiKS5nZXRNb2R1bGVDYWxjRGF0YTtyLm5hbWU9XCJwaWVcIixyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9bi5nZXRNb2R1bGUoXCJwaWVcIikscj1pKHQuY2FsY2RhdGEsZSlbMF07ZS5wbG90KHQscil9LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5faGFzJiZuLl9oYXMoXCJwaWVcIiksYT1lLl9oYXMmJmUuX2hhcyhcInBpZVwiKTtpJiYhYSYmbi5fcGllbGF5ZXIuc2VsZWN0QWxsKFwiZy50cmFjZVwiKS5yZW1vdmUoKX19LHtcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCI6Nzg0LFwiLi4vLi4vcmVnaXN0cnlcIjo4Mjl9XSwxMDI4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL2xpYlwiKS5pc0FycmF5T3JUeXBlZEFycmF5LGE9dChcInRpbnljb2xvcjJcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxzPXQoXCIuL2hlbHBlcnNcIiksbD17fTtmdW5jdGlvbiBjKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVybiEhZSYmKCEhKGU9YShlKSkuaXNWYWxpZCgpJiYoZT1vLmFkZE9wYWNpdHkoZSxlLmdldEFscGhhKCkpLHRbcl18fCh0W3JdPWUpLGUpKX19ZnVuY3Rpb24gdSh0LGUpe3ZhciByLG49SlNPTi5zdHJpbmdpZnkodCksaT1lW25dO2lmKCFpKXtmb3IoaT10LnNsaWNlKCkscj0wO3I8dC5sZW5ndGg7cisrKWkucHVzaChhKHRbcl0pLmxpZ2h0ZW4oMjApLnRvSGV4U3RyaW5nKCkpO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspaS5wdXNoKGEodFtyXSkuZGFya2VuKDIwKS50b0hleFN0cmluZygpKTtlW25dPWl9cmV0dXJuIGl9ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLGwsdSxoPWUudmFsdWVzLGY9aShoKSYmaC5sZW5ndGgscD1lLmxhYmVscyxkPWUubWFya2VyLmNvbG9yc3x8W10sZz1bXSx2PXQuX2Z1bGxMYXlvdXQsbT17fSx5PTAseD12LmhpZGRlbmxhYmVsc3x8W107aWYoZS5kbGFiZWwpZm9yKHA9bmV3IEFycmF5KGgubGVuZ3RoKSxyPTA7cjxoLmxlbmd0aDtyKyspcFtyXT1TdHJpbmcoZS5sYWJlbDArciplLmRsYWJlbCk7dmFyIGI9Yyh2Ll9waWVjb2xvcm1hcCksXz0oZj9oOnApLmxlbmd0aDtmb3Iocj0wO3I8XztyKyspe2lmKGYpe2lmKGE9aFtyXSwhbihhKSljb250aW51ZTtpZigoYT0rYSk8MCljb250aW51ZX1lbHNlIGE9MTt2b2lkIDAhPT0obz1wW3JdKSYmXCJcIiE9PW98fChvPXIpO3ZhciB3PW1bbz1TdHJpbmcobyldO3ZvaWQgMD09PXc/KG1bb109Zy5sZW5ndGgsKGw9LTEhPT14LmluZGV4T2YobykpfHwoeSs9YSksZy5wdXNoKHt2OmEsbGFiZWw6byxjb2xvcjpiKGRbcl0sbyksaTpyLHB0czpbcl0saGlkZGVuOmx9KSk6KCh1PWdbd10pLnYrPWEsdS5wdHMucHVzaChyKSx1LmhpZGRlbnx8KHkrPWEpLCExPT09dS5jb2xvciYmZFtyXSYmKHUuY29sb3I9YihkW3JdLG8pKSl9aWYoZS5zb3J0JiZnLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS52LXQudn0pLGdbMF0mJihnWzBdLnZUb3RhbD15KSxlLnRleHRpbmZvJiZcIm5vbmVcIiE9PWUudGV4dGluZm8pe3ZhciBrLEE9LTEhPT1lLnRleHRpbmZvLmluZGV4T2YoXCJsYWJlbFwiKSxUPS0xIT09ZS50ZXh0aW5mby5pbmRleE9mKFwidGV4dFwiKSxNPS0xIT09ZS50ZXh0aW5mby5pbmRleE9mKFwidmFsdWVcIiksUz0tMSE9PWUudGV4dGluZm8uaW5kZXhPZihcInBlcmNlbnRcIiksRT12LnNlcGFyYXRvcnM7Zm9yKHI9MDtyPGcubGVuZ3RoO3IrKyl7aWYodT1nW3JdLGs9QT9bdS5sYWJlbF06W10sVCl7dmFyIEM9cy5nZXRGaXJzdEZpbGxlZChlLnRleHQsdS5wdHMpO0MmJmsucHVzaChDKX1NJiZrLnB1c2gocy5mb3JtYXRQaWVWYWx1ZSh1LnYsRSkpLFMmJmsucHVzaChzLmZvcm1hdFBpZVBlcmNlbnQodS52L3ksRSkpLHUudGV4dD1rLmpvaW4oXCI8YnI+XCIpfX1yZXR1cm4gZ30sY3Jvc3NUcmFjZUNhbGM6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsbj1lLnBpZWNvbG9yd2F5LGk9ZS5fcGllY29sb3JtYXA7ZS5leHRlbmRwaWVjb2xvcnMmJihuPXUobixsKSk7Zm9yKHZhciBhPTAsbz0wO288ci5sZW5ndGg7bysrKXt2YXIgcz1yW29dO2lmKFwicGllXCI9PT1zWzBdLnRyYWNlLnR5cGUpZm9yKHZhciBjPTA7YzxzLmxlbmd0aDtjKyspe3ZhciBoPXNbY107ITE9PT1oLmNvbG9yJiYoaVtoLmxhYmVsXT9oLmNvbG9yPWlbaC5sYWJlbF06KGlbaC5sYWJlbF09aC5jb2xvcj1uW2Elbi5sZW5ndGhdLGErKykpfX19LG1ha2VQdWxsQ29sb3JGbjpjLGdlbmVyYXRlRXh0ZW5kZWRDb2xvcnM6dX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuL2hlbHBlcnNcIjoxMDMxLFwiZmFzdC1pc251bWVyaWNcIjoyMjIsdGlueWNvbG9yMjo1MjJ9XSwxMDI5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vcGxvdHMvZG9tYWluXCIpLmRlZmF1bHRzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9dmFyIGwsYz1uLmNvZXJjZUZvbnQsdT1zKFwidmFsdWVzXCIpLGg9bi5pc0FycmF5T3JUeXBlZEFycmF5KHUpLGY9cyhcImxhYmVsc1wiKTtpZihBcnJheS5pc0FycmF5KGYpPyhsPWYubGVuZ3RoLGgmJihsPU1hdGgubWluKGwsdS5sZW5ndGgpKSk6aCYmKGw9dS5sZW5ndGgscyhcImxhYmVsMFwiKSxzKFwiZGxhYmVsXCIpKSxsKXtlLl9sZW5ndGg9bCxzKFwibWFya2VyLmxpbmUud2lkdGhcIikmJnMoXCJtYXJrZXIubGluZS5jb2xvclwiKSxzKFwibWFya2VyLmNvbG9yc1wiKSxzKFwic2NhbGVncm91cFwiKTt2YXIgcD1zKFwidGV4dFwiKSxkPXMoXCJ0ZXh0aW5mb1wiLEFycmF5LmlzQXJyYXkocCk/XCJ0ZXh0K3BlcmNlbnRcIjpcInBlcmNlbnRcIik7aWYocyhcImhvdmVydGV4dFwiKSxzKFwiaG92ZXJ0ZW1wbGF0ZVwiKSxkJiZcIm5vbmVcIiE9PWQpe3ZhciBnPXMoXCJ0ZXh0cG9zaXRpb25cIiksdj1BcnJheS5pc0FycmF5KGcpfHxcImF1dG9cIj09PWcsbT12fHxcImluc2lkZVwiPT09Zyx5PXZ8fFwib3V0c2lkZVwiPT09ZztpZihtfHx5KXt2YXIgeD1jKHMsXCJ0ZXh0Zm9udFwiLG8uZm9udCk7aWYobSl7dmFyIGI9bi5leHRlbmRGbGF0KHt9LHgpOyEodC50ZXh0Zm9udCYmdC50ZXh0Zm9udC5jb2xvcikmJmRlbGV0ZSBiLmNvbG9yLGMocyxcImluc2lkZXRleHRmb250XCIsYil9eSYmYyhzLFwib3V0c2lkZXRleHRmb250XCIseCl9fWEoZSxvLHMpO3ZhciBfPXMoXCJob2xlXCIpO2lmKHMoXCJ0aXRsZS50ZXh0XCIpKXt2YXIgdz1zKFwidGl0bGUucG9zaXRpb25cIixfP1wibWlkZGxlIGNlbnRlclwiOlwidG9wIGNlbnRlclwiKTtffHxcIm1pZGRsZSBjZW50ZXJcIiE9PXd8fChlLnRpdGxlLnBvc2l0aW9uPVwidG9wIGNlbnRlclwiKSxjKHMsXCJ0aXRsZS5mb250XCIsby5mb250KX1zKFwic29ydFwiKSxzKFwiZGlyZWN0aW9uXCIpLHMoXCJyb3RhdGlvblwiKSxzKFwicHVsbFwiKX1lbHNlIGUudmlzaWJsZT0hMX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2RvbWFpblwiOjc3NCxcIi4vYXR0cmlidXRlc1wiOjEwMjZ9XSwxMDMwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVyc1wiKS5hcHBlbmRBcnJheU11bHRpUG9pbnRWYWx1ZXM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e2N1cnZlTnVtYmVyOmUuaW5kZXgscG9pbnROdW1iZXJzOnQucHRzLGRhdGE6ZS5faW5wdXQsZnVsbERhdGE6ZSxsYWJlbDp0LmxhYmVsLGNvbG9yOnQuY29sb3IsdmFsdWU6dC52LHBlcmNlbnQ6dC5wZXJjZW50LHRleHQ6dC50ZXh0LHY6dC52fTtyZXR1cm4gMT09PXQucHRzLmxlbmd0aCYmKHIucG9pbnROdW1iZXI9ci5pPXQucHRzWzBdKSxuKHIsZSx0LnB0cykscn19LHtcIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVyc1wiOjYxM31dLDEwMzE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpO3IuZm9ybWF0UGllUGVyY2VudD1mdW5jdGlvbih0LGUpe3ZhciByPSgxMDAqdCkudG9QcmVjaXNpb24oMyk7cmV0dXJuLTEhPT1yLmxhc3RJbmRleE9mKFwiLlwiKSYmKHI9ci5yZXBsYWNlKC9bLl0/MCskLyxcIlwiKSksbi5udW1TZXBhcmF0ZShyLGUpK1wiJVwifSxyLmZvcm1hdFBpZVZhbHVlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC50b1ByZWNpc2lvbigxMCk7cmV0dXJuLTEhPT1yLmxhc3RJbmRleE9mKFwiLlwiKSYmKHI9ci5yZXBsYWNlKC9bLl0/MCskLyxcIlwiKSksbi5udW1TZXBhcmF0ZShyLGUpfSxyLmdldEZpcnN0RmlsbGVkPWZ1bmN0aW9uKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49dFtlW3JdXTtpZihufHwwPT09bilyZXR1cm4gbn19LHIuY2FzdE9wdGlvbj1mdW5jdGlvbih0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3IuZ2V0Rmlyc3RGaWxsZWQodCxlKTp0fHx2b2lkIDB9fSx7XCIuLi8uLi9saWJcIjo3MDF9XSwxMDMyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLnN1cHBseUxheW91dERlZmF1bHRzPXQoXCIuL2xheW91dF9kZWZhdWx0c1wiKSxuLmxheW91dEF0dHJpYnV0ZXM9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIik7dmFyIGk9dChcIi4vY2FsY1wiKTtuLmNhbGM9aS5jYWxjLG4uY3Jvc3NUcmFjZUNhbGM9aS5jcm9zc1RyYWNlQ2FsYyxuLnBsb3Q9dChcIi4vcGxvdFwiKS5wbG90LG4uc3R5bGU9dChcIi4vc3R5bGVcIiksbi5zdHlsZU9uZT10KFwiLi9zdHlsZV9vbmVcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJwaWVcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuL2Jhc2VfcGxvdFwiKSxuLmNhdGVnb3JpZXM9W1wicGllXCIsXCJzaG93TGVnZW5kXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi9hdHRyaWJ1dGVzXCI6MTAyNixcIi4vYmFzZV9wbG90XCI6MTAyNyxcIi4vY2FsY1wiOjEwMjgsXCIuL2RlZmF1bHRzXCI6MTAyOSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjoxMDMzLFwiLi9sYXlvdXRfZGVmYXVsdHNcIjoxMDM0LFwiLi9wbG90XCI6MTAzNSxcIi4vc3R5bGVcIjoxMDM2LFwiLi9zdHlsZV9vbmVcIjoxMDM3fV0sMTAzMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17aGlkZGVubGFiZWxzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxwaWVjb2xvcndheTp7dmFsVHlwZTpcImNvbG9ybGlzdFwiLGVkaXRUeXBlOlwiY2FsY1wifSxleHRlbmRwaWVjb2xvcnM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcImNhbGNcIn19fSx7fV0sMTAzNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9cihcImhpZGRlbmxhYmVsc1wiKSxyKFwicGllY29sb3J3YXlcIixlLmNvbG9yd2F5KSxyKFwiZXh0ZW5kcGllY29sb3JzXCIpfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjEwMzN9XSwxMDM1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIikscz10KFwiLi4vLi4vbGliXCIpLGw9dChcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiKSxjPXQoXCIuL2hlbHBlcnNcIiksdT10KFwiLi9ldmVudF9kYXRhXCIpO2Z1bmN0aW9uIGgodCxlLHIpe3ZhciBhPXJbMF0sbz1hLnRyYWNlLHM9YS5jeCxsPWEuY3k7XCJfaGFzSG92ZXJMYWJlbFwiaW4gb3x8KG8uX2hhc0hvdmVyTGFiZWw9ITEpLFwiX2hhc0hvdmVyRXZlbnRcImluIG98fChvLl9oYXNIb3ZlckV2ZW50PSExKSx0Lm9uKFwibW91c2VvdmVyXCIsZnVuY3Rpb24odCl7dmFyIHI9ZS5fZnVsbExheW91dCxoPWUuX2Z1bGxEYXRhW28uaW5kZXhdO2lmKCFlLl9kcmFnZ2luZyYmITEhPT1yLmhvdmVybW9kZSl7dmFyIGY9aC5ob3ZlcmluZm87aWYoQXJyYXkuaXNBcnJheShmKSYmKGY9aS5jYXN0SG92ZXJpbmZvKHtob3ZlcmluZm86W2MuY2FzdE9wdGlvbihmLHQucHRzKV0sX21vZHVsZTpvLl9tb2R1bGV9LHIsMCkpLFwiYWxsXCI9PT1mJiYoZj1cImxhYmVsK3RleHQrdmFsdWUrcGVyY2VudCtuYW1lXCIpLGguaG92ZXJ0ZW1wbGF0ZXx8XCJub25lXCIhPT1mJiZcInNraXBcIiE9PWYmJmYpe3ZhciBwPXQuckluc2NyaWJlZCxkPXMrdC5weG1pZFswXSooMS1wKSxnPWwrdC5weG1pZFsxXSooMS1wKSx2PXIuc2VwYXJhdG9ycyxtPVtdO2lmKGYmJi0xIT09Zi5pbmRleE9mKFwibGFiZWxcIikmJm0ucHVzaCh0LmxhYmVsKSx0LnRleHQ9Yy5jYXN0T3B0aW9uKGguaG92ZXJ0ZXh0fHxoLnRleHQsdC5wdHMpLGYmJi0xIT09Zi5pbmRleE9mKFwidGV4dFwiKSl7dmFyIHk9dC50ZXh0O3kmJm0ucHVzaCh5KX10LnZhbHVlPXQudix0LnZhbHVlTGFiZWw9Yy5mb3JtYXRQaWVWYWx1ZSh0LnYsdiksZiYmLTEhPT1mLmluZGV4T2YoXCJ2YWx1ZVwiKSYmbS5wdXNoKHQudmFsdWVMYWJlbCksdC5wZXJjZW50PXQudi9hLnZUb3RhbCx0LnBlcmNlbnRMYWJlbD1jLmZvcm1hdFBpZVBlcmNlbnQodC5wZXJjZW50LHYpLGYmJi0xIT09Zi5pbmRleE9mKFwicGVyY2VudFwiKSYmbS5wdXNoKHQucGVyY2VudExhYmVsKTt2YXIgeD1oLmhvdmVybGFiZWwsYj14LmZvbnQ7aS5sb25lSG92ZXIoe3RyYWNlOm8seDA6ZC1wKmEucix4MTpkK3AqYS5yLHk6Zyx0ZXh0Om0uam9pbihcIjxicj5cIiksbmFtZTpoLmhvdmVydGVtcGxhdGV8fC0xIT09Zi5pbmRleE9mKFwibmFtZVwiKT9oLm5hbWU6dm9pZCAwLGlkZWFsQWxpZ246dC5weG1pZFswXTwwP1wibGVmdFwiOlwicmlnaHRcIixjb2xvcjpjLmNhc3RPcHRpb24oeC5iZ2NvbG9yLHQucHRzKXx8dC5jb2xvcixib3JkZXJDb2xvcjpjLmNhc3RPcHRpb24oeC5ib3JkZXJjb2xvcix0LnB0cyksZm9udEZhbWlseTpjLmNhc3RPcHRpb24oYi5mYW1pbHksdC5wdHMpLGZvbnRTaXplOmMuY2FzdE9wdGlvbihiLnNpemUsdC5wdHMpLGZvbnRDb2xvcjpjLmNhc3RPcHRpb24oYi5jb2xvcix0LnB0cyksbmFtZUxlbmd0aDpjLmNhc3RPcHRpb24oeC5uYW1lbGVuZ3RoLHQucHRzKSx0ZXh0QWxpZ246Yy5jYXN0T3B0aW9uKHguYWxpZ24sdC5wdHMpLGhvdmVydGVtcGxhdGU6Yy5jYXN0T3B0aW9uKGguaG92ZXJ0ZW1wbGF0ZSx0LnB0cyksaG92ZXJ0ZW1wbGF0ZUxhYmVsczp0LGV2ZW50RGF0YTpbdSh0LGgpXX0se2NvbnRhaW5lcjpyLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpyLl9wYXBlci5ub2RlKCksZ2Q6ZX0pLG8uX2hhc0hvdmVyTGFiZWw9ITB9by5faGFzSG92ZXJFdmVudD0hMCxlLmVtaXQoXCJwbG90bHlfaG92ZXJcIix7cG9pbnRzOlt1KHQsaCldLGV2ZW50Om4uZXZlbnR9KX19KSx0Lm9uKFwibW91c2VvdXRcIixmdW5jdGlvbih0KXt2YXIgcj1lLl9mdWxsTGF5b3V0LGE9ZS5fZnVsbERhdGFbby5pbmRleF0scz1uLnNlbGVjdCh0aGlzKS5kYXR1bSgpO28uX2hhc0hvdmVyRXZlbnQmJih0Lm9yaWdpbmFsRXZlbnQ9bi5ldmVudCxlLmVtaXQoXCJwbG90bHlfdW5ob3ZlclwiLHtwb2ludHM6W3UocyxhKV0sZXZlbnQ6bi5ldmVudH0pLG8uX2hhc0hvdmVyRXZlbnQ9ITEpLG8uX2hhc0hvdmVyTGFiZWwmJihpLmxvbmVVbmhvdmVyKHIuX2hvdmVybGF5ZXIubm9kZSgpKSxvLl9oYXNIb3ZlckxhYmVsPSExKX0pLHQub24oXCJjbGlja1wiLGZ1bmN0aW9uKHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQsYT1lLl9mdWxsRGF0YVtvLmluZGV4XTtlLl9kcmFnZ2luZ3x8ITE9PT1yLmhvdmVybW9kZXx8KGUuX2hvdmVyZGF0YT1bdSh0LGEpXSxpLmNsaWNrKGUsbi5ldmVudCkpfSl9ZnVuY3Rpb24gZih0LGUscil7dmFyIG49TWF0aC5zcXJ0KHQud2lkdGgqdC53aWR0aCt0LmhlaWdodCp0LmhlaWdodCksaT10LndpZHRoL3QuaGVpZ2h0LGE9ZS5oYWxmYW5nbGUsbz1lLnJpbmcscz1lLnJJbnNjcmliZWQsbD1yLnJ8fGUucnB4MSxjPXtzY2FsZTpzKmwqMi9uLHJDZW50ZXI6MS1zLHJvdGF0ZTowfTtpZihjLnNjYWxlPj0xKXJldHVybiBjO3ZhciB1PWkrMS8oMipNYXRoLnRhbihhKSksaD1sKk1hdGgubWluKDEvKE1hdGguc3FydCh1KnUrLjUpK3UpLG8vKE1hdGguc3FydChpKmkrby8yKStpKSksZj17c2NhbGU6MipoL3QuaGVpZ2h0LHJDZW50ZXI6TWF0aC5jb3MoaC9sKS1oKmkvbCxyb3RhdGU6KDE4MC9NYXRoLlBJKmUubWlkYW5nbGUrNzIwKSUxODAtOTB9LHA9MS9pLGQ9cCsxLygyKk1hdGgudGFuKGEpKSxnPWwqTWF0aC5taW4oMS8oTWF0aC5zcXJ0KGQqZCsuNSkrZCksby8oTWF0aC5zcXJ0KHAqcCtvLzIpK3ApKSx2PXtzY2FsZToyKmcvdC53aWR0aCxyQ2VudGVyOk1hdGguY29zKGcvbCktZy9pL2wscm90YXRlOigxODAvTWF0aC5QSSplLm1pZGFuZ2xlKzgxMCklMTgwLTkwfSxtPXYuc2NhbGU+Zi5zY2FsZT92OmY7cmV0dXJuIGMuc2NhbGU8MSYmbS5zY2FsZT5jLnNjYWxlP206Y31mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIHQudiE9PWUudlRvdGFsfHxlLnRyYWNlLmhvbGU/TWF0aC5taW4oMS8oMSsxL01hdGguc2luKHQuaGFsZmFuZ2xlKSksdC5yaW5nLzIpOjF9ZnVuY3Rpb24gZCh0LGUpe3ZhciByPWUucHhtaWRbMF0sbj1lLnB4bWlkWzFdLGk9dC53aWR0aC8yLGE9dC5oZWlnaHQvMjtyZXR1cm4gcjwwJiYoaSo9LTEpLG48MCYmKGEqPS0xKSx7c2NhbGU6MSxyQ2VudGVyOjEscm90YXRlOjAseDppK01hdGguYWJzKGEpKihpPjA/MTotMSkvMix5OmEvKDErcipyLyhuKm4pKSxvdXRzaWRlOiEwfX1mdW5jdGlvbiBnKHQsZSl7dmFyIHI9dC50cmFjZSxuPWUuaCooci5kb21haW4ueVsxXS1yLmRvbWFpbi55WzBdKTtyZXR1cm4gTWF0aC5taW4odC50aXRsZUJveC5oZWlnaHQsbi8yKX1mdW5jdGlvbiB2KHQpe3ZhciBlLHI9dC5wdWxsO2lmKEFycmF5LmlzQXJyYXkocikpZm9yKHI9MCxlPTA7ZTx0LnB1bGwubGVuZ3RoO2UrKyl0LnB1bGxbZV0+ciYmKHI9dC5wdWxsW2VdKTtyZXR1cm4gcn1lLmV4cG9ydHM9e3Bsb3Q6ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0OyFmdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLGk9ZS5fZnVsbExheW91dCxhPTA7YTx0Lmxlbmd0aDthKyspaWYocj10W2FdWzBdLChuPXIudHJhY2UpLnRpdGxlLnRleHQpe3ZhciBjPWkubWV0YT9zLnRlbXBsYXRlU3RyaW5nKG4udGl0bGUudGV4dCx7bWV0YTppLm1ldGF9KTpuLnRpdGxlLnRleHQsdT1vLnRlc3Rlci5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJkYXRhLW5vdGV4XCIsMSkudGV4dChjKS5jYWxsKG8uZm9udCxuLnRpdGxlLmZvbnQpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsZSksaD1vLmJCb3godS5ub2RlKCksITApO3IudGl0bGVCb3g9e3dpZHRoOmgud2lkdGgsaGVpZ2h0OmguaGVpZ2h0fSx1LnJlbW92ZSgpfX0oZSx0KSxmdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyxsLGMsdSxoPVtdO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspbz10W2ldWzBdLHM9by50cmFjZSxyPWUudyoocy5kb21haW4ueFsxXS1zLmRvbWFpbi54WzBdKSxuPWUuaCoocy5kb21haW4ueVsxXS1zLmRvbWFpbi55WzBdKSxzLnRpdGxlLnRleHQmJlwibWlkZGxlIGNlbnRlclwiIT09cy50aXRsZS5wb3NpdGlvbiYmKG4tPWcobyxlKSksbD12KHMpLG8ucj1NYXRoLm1pbihyLG4pLygyKzIqbCksby5jeD1lLmwrZS53KihzLmRvbWFpbi54WzFdK3MuZG9tYWluLnhbMF0pLzIsby5jeT1lLnQrZS5oKigxLXMuZG9tYWluLnlbMF0pLW4vMixzLnRpdGxlLnRleHQmJi0xIT09cy50aXRsZS5wb3NpdGlvbi5pbmRleE9mKFwiYm90dG9tXCIpJiYoby5jeS09ZyhvLGUpKSxzLnNjYWxlZ3JvdXAmJi0xPT09aC5pbmRleE9mKHMuc2NhbGVncm91cCkmJmgucHVzaChzLnNjYWxlZ3JvdXApO2ZvcihhPTA7YTxoLmxlbmd0aDthKyspe2Zvcih1PTEvMCxjPWhbYV0saT0wO2k8dC5sZW5ndGg7aSsrKShvPXRbaV1bMF0pLnRyYWNlLnNjYWxlZ3JvdXA9PT1jJiYodT1NYXRoLm1pbih1LG8ucipvLnIvby52VG90YWwpKTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKShvPXRbaV1bMF0pLnRyYWNlLnNjYWxlZ3JvdXA9PT1jJiYoby5yPU1hdGguc3FydCh1Km8udlRvdGFsKSl9fShlLHIuX3NpemUpO3ZhciBpPXMubWFrZVRyYWNlR3JvdXBzKHIuX3BpZWxheWVyLGUsXCJ0cmFjZVwiKS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLHU9ZVswXSxtPXUudHJhY2U7IWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXRbMF0sYT1pLnRyYWNlLG89YS5yb3RhdGlvbipNYXRoLlBJLzE4MCxzPTIqTWF0aC5QSS9pLnZUb3RhbCxsPVwicHgwXCIsYz1cInB4MVwiO2lmKFwiY291bnRlcmNsb2Nrd2lzZVwiPT09YS5kaXJlY3Rpb24pe2ZvcihlPTA7ZTx0Lmxlbmd0aCYmdFtlXS5oaWRkZW47ZSsrKTtpZihlPT09dC5sZW5ndGgpcmV0dXJuO28rPXMqdFtlXS52LHMqPS0xLGw9XCJweDFcIixjPVwicHgwXCJ9ZnVuY3Rpb24gdSh0KXtyZXR1cm5baS5yKk1hdGguc2luKHQpLC1pLnIqTWF0aC5jb3ModCldfWZvcihuPXUobyksZT0wO2U8dC5sZW5ndGg7ZSsrKShyPXRbZV0pLmhpZGRlbnx8KHJbbF09bixvKz1zKnIudi8yLHIucHhtaWQ9dShvKSxyLm1pZGFuZ2xlPW8sbys9cypyLnYvMixuPXUobykscltjXT1uLHIubGFyZ2VBcmM9ci52PmkudlRvdGFsLzI/MTowLHIuaGFsZmFuZ2xlPU1hdGguUEkqTWF0aC5taW4oci52L2kudlRvdGFsLC41KSxyLnJpbmc9MS1hLmhvbGUsci5ySW5zY3JpYmVkPXAocixpKSl9KGUpLGkuYXR0cihcInN0cm9rZS1saW5lam9pblwiLFwicm91bmRcIiksaS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKFwiZy5zbGljZVwiKS5kYXRhKGUpO2kuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJzbGljZVwiLCEwKSxpLmV4aXQoKS5yZW1vdmUoKTt2YXIgcD1bW1tdLFtdXSxbW10sW11dXSx5PSExO2kuZWFjaChmdW5jdGlvbihyKXtpZihyLmhpZGRlbiluLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoXCJwYXRoLGdcIikucmVtb3ZlKCk7ZWxzZXtyLnBvaW50TnVtYmVyPXIuaSxyLmN1cnZlTnVtYmVyPW0uaW5kZXgscFtyLnB4bWlkWzFdPDA/MDoxXVtyLnB4bWlkWzBdPDA/MDoxXS5wdXNoKHIpO3ZhciBpPXUuY3gsZz11LmN5LHY9bi5zZWxlY3QodGhpcykseD12LnNlbGVjdEFsbChcInBhdGguc3VyZmFjZVwiKS5kYXRhKFtyXSk7aWYoeC5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChcInN1cmZhY2VcIiwhMCkuc3R5bGUoe1wicG9pbnRlci1ldmVudHNcIjpcImFsbFwifSksdi5jYWxsKGgsdCxlKSxtLnB1bGwpe3ZhciBiPStjLmNhc3RPcHRpb24obS5wdWxsLHIucHRzKXx8MDtiPjAmJihpKz1iKnIucHhtaWRbMF0sZys9YipyLnB4bWlkWzFdKX1yLmN4RmluYWw9aSxyLmN5RmluYWw9Zzt2YXIgXz1tLmhvbGU7aWYoci52PT09dS52VG90YWwpe3ZhciB3PVwiTVwiKyhpK3IucHgwWzBdKStcIixcIisoZytyLnB4MFsxXSkrUyhyLnB4MCxyLnB4bWlkLCEwLDEpK1Moci5weG1pZCxyLnB4MCwhMCwxKStcIlpcIjtfP3guYXR0cihcImRcIixcIk1cIisoaStfKnIucHgwWzBdKStcIixcIisoZytfKnIucHgwWzFdKStTKHIucHgwLHIucHhtaWQsITEsXykrUyhyLnB4bWlkLHIucHgwLCExLF8pK1wiWlwiK3cpOnguYXR0cihcImRcIix3KX1lbHNle3ZhciBrPVMoci5weDAsci5weDEsITAsMSk7aWYoXyl7dmFyIEE9MS1fO3guYXR0cihcImRcIixcIk1cIisoaStfKnIucHgxWzBdKStcIixcIisoZytfKnIucHgxWzFdKStTKHIucHgxLHIucHgwLCExLF8pK1wibFwiK0Eqci5weDBbMF0rXCIsXCIrQSpyLnB4MFsxXStrK1wiWlwiKX1lbHNlIHguYXR0cihcImRcIixcIk1cIitpK1wiLFwiK2crXCJsXCIrci5weDBbMF0rXCIsXCIrci5weDBbMV0raytcIlpcIil9dmFyIFQ9Yy5jYXN0T3B0aW9uKG0udGV4dHBvc2l0aW9uLHIucHRzKSxNPXYuc2VsZWN0QWxsKFwiZy5zbGljZXRleHRcIikuZGF0YShyLnRleHQmJlwibm9uZVwiIT09VD9bMF06W10pO00uZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJzbGljZXRleHRcIiwhMCksTS5leGl0KCkucmVtb3ZlKCksTS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9cy5lbnN1cmVTaW5nbGUobi5zZWxlY3QodGhpcyksXCJ0ZXh0XCIsXCJcIixmdW5jdGlvbih0KXt0LmF0dHIoXCJkYXRhLW5vdGV4XCIsMSl9KTtlLnRleHQoci50ZXh0KS5hdHRyKHtjbGFzczpcInNsaWNldGV4dFwiLHRyYW5zZm9ybTpcIlwiLFwidGV4dC1hbmNob3JcIjpcIm1pZGRsZVwifSkuY2FsbChvLmZvbnQsXCJvdXRzaWRlXCI9PT1UP2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj1jLmNhc3RPcHRpb24odC5vdXRzaWRldGV4dGZvbnQuY29sb3IsZS5wdHMpfHxjLmNhc3RPcHRpb24odC50ZXh0Zm9udC5jb2xvcixlLnB0cyl8fHIuY29sb3IsaT1jLmNhc3RPcHRpb24odC5vdXRzaWRldGV4dGZvbnQuZmFtaWx5LGUucHRzKXx8Yy5jYXN0T3B0aW9uKHQudGV4dGZvbnQuZmFtaWx5LGUucHRzKXx8ci5mYW1pbHksYT1jLmNhc3RPcHRpb24odC5vdXRzaWRldGV4dGZvbnQuc2l6ZSxlLnB0cyl8fGMuY2FzdE9wdGlvbih0LnRleHRmb250LnNpemUsZS5wdHMpfHxyLnNpemU7cmV0dXJue2NvbG9yOm4sZmFtaWx5Omksc2l6ZTphfX0obSxyLHQuX2Z1bGxMYXlvdXQuZm9udCk6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWMuY2FzdE9wdGlvbih0Lmluc2lkZXRleHRmb250LmNvbG9yLGUucHRzKTshbiYmdC5faW5wdXQudGV4dGZvbnQmJihuPWMuY2FzdE9wdGlvbih0Ll9pbnB1dC50ZXh0Zm9udC5jb2xvcixlLnB0cykpO3ZhciBpPWMuY2FzdE9wdGlvbih0Lmluc2lkZXRleHRmb250LmZhbWlseSxlLnB0cyl8fGMuY2FzdE9wdGlvbih0LnRleHRmb250LmZhbWlseSxlLnB0cyl8fHIuZmFtaWx5LG89Yy5jYXN0T3B0aW9uKHQuaW5zaWRldGV4dGZvbnQuc2l6ZSxlLnB0cyl8fGMuY2FzdE9wdGlvbih0LnRleHRmb250LnNpemUsZS5wdHMpfHxyLnNpemU7cmV0dXJue2NvbG9yOm58fGEuY29udHJhc3QoZS5jb2xvciksZmFtaWx5Omksc2l6ZTpvfX0obSxyLHQuX2Z1bGxMYXlvdXQuZm9udCkpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsdCk7dmFyIGgscD1vLmJCb3goZS5ub2RlKCkpO1wib3V0c2lkZVwiPT09VD9oPWQocCxyKTooaD1mKHAscix1KSxcImF1dG9cIj09PVQmJmguc2NhbGU8MSYmKGUuY2FsbChvLmZvbnQsbS5vdXRzaWRldGV4dGZvbnQpLG0ub3V0c2lkZXRleHRmb250LmZhbWlseT09PW0uaW5zaWRldGV4dGZvbnQuZmFtaWx5JiZtLm91dHNpZGV0ZXh0Zm9udC5zaXplPT09bS5pbnNpZGV0ZXh0Zm9udC5zaXplfHwocD1vLmJCb3goZS5ub2RlKCkpKSxoPWQocCxyKSkpO3ZhciB2PWkrci5weG1pZFswXSpoLnJDZW50ZXIrKGgueHx8MCkseD1nK3IucHhtaWRbMV0qaC5yQ2VudGVyKyhoLnl8fDApO2gub3V0c2lkZSYmKHIueUxhYmVsTWluPXgtcC5oZWlnaHQvMixyLnlMYWJlbE1pZD14LHIueUxhYmVsTWF4PXgrcC5oZWlnaHQvMixyLmxhYmVsRXh0cmFYPTAsci5sYWJlbEV4dHJhWT0wLHk9ITApLGUuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK3YrXCIsXCIreCtcIilcIisoaC5zY2FsZTwxP1wic2NhbGUoXCIraC5zY2FsZStcIilcIjpcIlwiKSsoaC5yb3RhdGU/XCJyb3RhdGUoXCIraC5yb3RhdGUrXCIpXCI6XCJcIikrXCJ0cmFuc2xhdGUoXCIrLShwLmxlZnQrcC5yaWdodCkvMitcIixcIistKHAudG9wK3AuYm90dG9tKS8yK1wiKVwiKX0pfWZ1bmN0aW9uIFModCxlLG4saSl7cmV0dXJuXCJhXCIraSp1LnIrXCIsXCIraSp1LnIrXCIgMCBcIityLmxhcmdlQXJjKyhuP1wiIDEgXCI6XCIgMCBcIikraSooZVswXS10WzBdKStcIixcIitpKihlWzFdLXRbMV0pfX0pO3ZhciB4PW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbChcImcudGl0bGV0ZXh0XCIpLmRhdGEobS50aXRsZS50ZXh0P1swXTpbXSk7eC5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcInRpdGxldGV4dFwiLCEwKSx4LmV4aXQoKS5yZW1vdmUoKSx4LmVhY2goZnVuY3Rpb24oKXt2YXIgZSxpPXMuZW5zdXJlU2luZ2xlKG4uc2VsZWN0KHRoaXMpLFwidGV4dFwiLFwiXCIsZnVuY3Rpb24odCl7dC5hdHRyKFwiZGF0YS1ub3RleFwiLDEpfSksYT1yLm1ldGE/cy50ZW1wbGF0ZVN0cmluZyhtLnRpdGxlLnRleHQse21ldGE6ci5tZXRhfSk6bS50aXRsZS50ZXh0O2kudGV4dChhKS5hdHRyKHtjbGFzczpcInRpdGxldGV4dFwiLHRyYW5zZm9ybTpcIlwiLFwidGV4dC1hbmNob3JcIjpcIm1pZGRsZVwifSkuY2FsbChvLmZvbnQsbS50aXRsZS5mb250KS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHQpLGU9XCJtaWRkbGUgY2VudGVyXCI9PT1tLnRpdGxlLnBvc2l0aW9uP2Z1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0LnRpdGxlQm94LndpZHRoKnQudGl0bGVCb3gud2lkdGgrdC50aXRsZUJveC5oZWlnaHQqdC50aXRsZUJveC5oZWlnaHQpO3JldHVybnt4OnQuY3gseTp0LmN5LHNjYWxlOnQudHJhY2UuaG9sZSp0LnIqMi9lLHR4OjAsdHk6LXQudGl0bGVCb3guaGVpZ2h0LzIrdC50cmFjZS50aXRsZS5mb250LnNpemV9fSh1KTpmdW5jdGlvbih0LGUpe3ZhciByLG4saT0xLGE9MSxvPXQudHJhY2Uscz17eDp0LmN4LHk6dC5jeX0sbD17dHg6MCx0eTowfTtyZXR1cm4gbC50eSs9by50aXRsZS5mb250LnNpemUsbj12KG8pLC0xIT09by50aXRsZS5wb3NpdGlvbi5pbmRleE9mKFwidG9wXCIpPyhzLnktPSgxK24pKnQucixsLnR5LT10LnRpdGxlQm94LmhlaWdodCk6LTEhPT1vLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoXCJib3R0b21cIikmJihzLnkrPSgxK24pKnQuciksLTEhPT1vLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoXCJsZWZ0XCIpPyhyPWUudyooby5kb21haW4ueFsxXS1vLmRvbWFpbi54WzBdKS8yK3QucixzLngtPSgxK24pKnQucixsLnR4Kz10LnRpdGxlQm94LndpZHRoLzIpOi0xIT09by50aXRsZS5wb3NpdGlvbi5pbmRleE9mKFwiY2VudGVyXCIpP3I9ZS53KihvLmRvbWFpbi54WzFdLW8uZG9tYWluLnhbMF0pOi0xIT09by50aXRsZS5wb3NpdGlvbi5pbmRleE9mKFwicmlnaHRcIikmJihyPWUudyooby5kb21haW4ueFsxXS1vLmRvbWFpbi54WzBdKS8yK3QucixzLngrPSgxK24pKnQucixsLnR4LT10LnRpdGxlQm94LndpZHRoLzIpLGk9ci90LnRpdGxlQm94LndpZHRoLGE9Zyh0LGUpL3QudGl0bGVCb3guaGVpZ2h0LHt4OnMueCx5OnMueSxzY2FsZTpNYXRoLm1pbihpLGEpLHR4OmwudHgsdHk6bC50eX19KHUsci5fc2l6ZSksaS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrZS54K1wiLFwiK2UueStcIilcIisoZS5zY2FsZTwxP1wic2NhbGUoXCIrZS5zY2FsZStcIilcIjpcIlwiKStcInRyYW5zbGF0ZShcIitlLnR4K1wiLFwiK2UudHkrXCIpXCIpfSkseSYmZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLHMsbCx1LGgsZixwLGQsZztmdW5jdGlvbiB2KHQsZSl7cmV0dXJuIHQucHhtaWRbMV0tZS5weG1pZFsxXX1mdW5jdGlvbiBtKHQsZSl7cmV0dXJuIGUucHhtaWRbMV0tdC5weG1pZFsxXX1mdW5jdGlvbiB5KHQscil7cnx8KHI9e30pO3ZhciBpLHUsaCxwLGQsZyx2PXIubGFiZWxFeHRyYVkrKG4/ci55TGFiZWxNYXg6ci55TGFiZWxNaW4pLG09bj90LnlMYWJlbE1pbjp0LnlMYWJlbE1heCx5PW4/dC55TGFiZWxNYXg6dC55TGFiZWxNaW4seD10LmN5RmluYWwrbyh0LnB4MFsxXSx0LnB4MVsxXSksYj12LW07aWYoYipsPjAmJih0LmxhYmVsRXh0cmFZPWIpLEFycmF5LmlzQXJyYXkoZS5wdWxsKSlmb3IodT0wO3U8Zi5sZW5ndGg7dSsrKShoPWZbdV0pPT09dHx8KGMuY2FzdE9wdGlvbihlLnB1bGwsdC5wdHMpfHwwKT49KGMuY2FzdE9wdGlvbihlLnB1bGwsaC5wdHMpfHwwKXx8KCh0LnB4bWlkWzFdLWgucHhtaWRbMV0pKmw+MD8ocD1oLmN5RmluYWwrbyhoLnB4MFsxXSxoLnB4MVsxXSksKGI9cC1tLXQubGFiZWxFeHRyYVkpKmw+MCYmKHQubGFiZWxFeHRyYVkrPWIpKTooeSt0LmxhYmVsRXh0cmFZLXgpKmw+MCYmKGk9MypzKk1hdGguYWJzKHUtZi5pbmRleE9mKHQpKSxkPWguY3hGaW5hbCthKGgucHgwWzBdLGgucHgxWzBdKSwoZz1kK2ktKHQuY3hGaW5hbCt0LnB4bWlkWzBdKS10LmxhYmVsRXh0cmFYKSpzPjAmJih0LmxhYmVsRXh0cmFYKz1nKSkpfWZvcihuPTA7bjwyO24rKylmb3IoaT1uP3Y6bSxvPW4/TWF0aC5tYXg6TWF0aC5taW4sbD1uPzE6LTEscj0wO3I8MjtyKyspe2ZvcihhPXI/TWF0aC5tYXg6TWF0aC5taW4scz1yPzE6LTEsKHU9dFtuXVtyXSkuc29ydChpKSxoPXRbMS1uXVtyXSxmPWguY29uY2F0KHUpLGQ9W10scD0wO3A8dS5sZW5ndGg7cCsrKXZvaWQgMCE9PXVbcF0ueUxhYmVsTWlkJiZkLnB1c2godVtwXSk7Zm9yKGc9ITEscD0wO24mJnA8aC5sZW5ndGg7cCsrKWlmKHZvaWQgMCE9PWhbcF0ueUxhYmVsTWlkKXtnPWhbcF07YnJlYWt9Zm9yKHA9MDtwPGQubGVuZ3RoO3ArKyl7dmFyIHg9cCYmZFtwLTFdO2cmJiFwJiYoeD1nKSx5KGRbcF0seCl9fX0ocCxtKSxmdW5jdGlvbih0LGUpe3QuZWFjaChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtpZih0LmxhYmVsRXh0cmFYfHx0LmxhYmVsRXh0cmFZKXt2YXIgaT1yLnNlbGVjdChcImcuc2xpY2V0ZXh0IHRleHRcIik7aS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrdC5sYWJlbEV4dHJhWCtcIixcIit0LmxhYmVsRXh0cmFZK1wiKVwiK2kuYXR0cihcInRyYW5zZm9ybVwiKSk7dmFyIG89dC5jeEZpbmFsK3QucHhtaWRbMF0sbD10LmN5RmluYWwrdC5weG1pZFsxXSxjPVwiTVwiK28rXCIsXCIrbCx1PSh0LnlMYWJlbE1heC10LnlMYWJlbE1pbikqKHQucHhtaWRbMF08MD8tMToxKS80O2lmKHQubGFiZWxFeHRyYVgpe3ZhciBoPXQubGFiZWxFeHRyYVgqdC5weG1pZFsxXS90LnB4bWlkWzBdLGY9dC55TGFiZWxNaWQrdC5sYWJlbEV4dHJhWS0odC5jeUZpbmFsK3QucHhtaWRbMV0pO01hdGguYWJzKGgpPk1hdGguYWJzKGYpP2MrPVwibFwiK2YqdC5weG1pZFswXS90LnB4bWlkWzFdK1wiLFwiK2YrXCJIXCIrKG8rdC5sYWJlbEV4dHJhWCt1KTpjKz1cImxcIit0LmxhYmVsRXh0cmFYK1wiLFwiK2grXCJ2XCIrKGYtaCkrXCJoXCIrdX1lbHNlIGMrPVwiVlwiKyh0LnlMYWJlbE1pZCt0LmxhYmVsRXh0cmFZKStcImhcIit1O3MuZW5zdXJlU2luZ2xlKHIsXCJwYXRoXCIsXCJ0ZXh0bGluZVwiKS5jYWxsKGEuc3Ryb2tlLGUub3V0c2lkZXRleHRmb250LmNvbG9yKS5hdHRyKHtcInN0cm9rZS13aWR0aFwiOk1hdGgubWluKDIsZS5vdXRzaWRldGV4dGZvbnQuc2l6ZS84KSxkOmMsZmlsbDpcIm5vbmVcIn0pfWVsc2Ugci5zZWxlY3QoXCJwYXRoLnRleHRsaW5lXCIpLnJlbW92ZSgpfSl9KGksbSl9KX0pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtpLnNlbGVjdEFsbChcInRzcGFuXCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTt0LmF0dHIoXCJkeVwiKSYmdC5hdHRyKFwiZHlcIix0LmF0dHIoXCJkeVwiKSl9KX0sMCl9LHRyYW5zZm9ybUluc2lkZVRleHQ6Zn19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9jb21wb25lbnRzL2Z4XCI6NjE3LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCI6NzI1LFwiLi9ldmVudF9kYXRhXCI6MTAzMCxcIi4vaGVscGVyc1wiOjEwMzEsZDM6MTU1fV0sMTAzNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuL3N0eWxlX29uZVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dC5fZnVsbExheW91dC5fcGllbGF5ZXIuc2VsZWN0QWxsKFwiLnRyYWNlXCIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPW4uc2VsZWN0KHRoaXMpO3Iuc3R5bGUoe29wYWNpdHk6ZS5vcGFjaXR5fSksci5zZWxlY3RBbGwoXCJwYXRoLnN1cmZhY2VcIikuZWFjaChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5jYWxsKGksdCxlKX0pfSl9fSx7XCIuL3N0eWxlX29uZVwiOjEwMzcsZDM6MTU1fV0sMTAzNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGk9dChcIi4vaGVscGVyc1wiKS5jYXN0T3B0aW9uO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9ci5tYXJrZXIubGluZSxvPWkoYS5jb2xvcixlLnB0cyl8fG4uZGVmYXVsdExpbmUscz1pKGEud2lkdGgsZS5wdHMpfHwwO3Quc3R5bGUoXCJzdHJva2Utd2lkdGhcIixzKS5jYWxsKG4uZmlsbCxlLmNvbG9yKS5jYWxsKG4uc3Ryb2tlLG8pfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4vaGVscGVyc1wiOjEwMzF9XSwxMDM4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9e3g6bi54LHk6bi55LHh5Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxpbmRpY2VzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx4Ym91bmRzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx5Ym91bmRzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx0ZXh0Om4udGV4dCxtYXJrZXI6e2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixhcnJheU9rOiExLGVkaXRUeXBlOlwiY2FsY1wifSxvcGFjaXR5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDoxLGFycmF5T2s6ITEsZWRpdFR5cGU6XCJjYWxjXCJ9LGJsZW5kOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6bnVsbCxlZGl0VHlwZTpcImNhbGNcIn0sc2l6ZW1pbjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjouMSxtYXg6MixkZmx0Oi41LGVkaXRUeXBlOlwiY2FsY1wifSxzaXplbWF4Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOi4xLGRmbHQ6MjAsZWRpdFR5cGU6XCJjYWxjXCJ9LGJvcmRlcjp7Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGFycmF5T2s6ITEsZWRpdFR5cGU6XCJjYWxjXCJ9LGFyZWFyYXRpbzp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LGVkaXRUeXBlOlwiY2FsY1wifSx0cmFuc2Zvcm1zOnZvaWQgMH19LHtcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiOjEwNTJ9XSwxMDM5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsLXBvaW50Y2xvdWQyZFwiKSxpPXQoXCIuLi8uLi9saWIvc3RyMnJnYmFycmF5XCIpLGE9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2VcIikuZmluZEV4dHJlbWVzLG89dChcIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yXCIpO2Z1bmN0aW9uIHModCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLnR5cGU9XCJwb2ludGNsb3VkXCIsdGhpcy5waWNrWERhdGE9W10sdGhpcy5waWNrWURhdGE9W10sdGhpcy54RGF0YT1bXSx0aGlzLnlEYXRhPVtdLHRoaXMudGV4dExhYmVscz1bXSx0aGlzLmNvbG9yPVwicmdiKDAsIDAsIDApXCIsdGhpcy5uYW1lPVwiXCIsdGhpcy5ob3ZlcmluZm89XCJhbGxcIix0aGlzLmlkVG9JbmRleD1uZXcgSW50MzJBcnJheSgwKSx0aGlzLmJvdW5kcz1bMCwwLDAsMF0sdGhpcy5wb2ludGNsb3VkT3B0aW9ucz17cG9zaXRpb25zOm5ldyBGbG9hdDMyQXJyYXkoMCksaWRUb0luZGV4OnRoaXMuaWRUb0luZGV4LHNpemVtaW46LjUsc2l6ZW1heDoxMixjb2xvcjpbMCwwLDAsMV0sYXJlYVJhdGlvOjEsYm9yZGVyQ29sb3I6WzAsMCwwLDFdfSx0aGlzLnBvaW50Y2xvdWQ9bih0LmdscGxvdCx0aGlzLnBvaW50Y2xvdWRPcHRpb25zKSx0aGlzLnBvaW50Y2xvdWQuX3RyYWNlPXRoaXN9dmFyIGw9cy5wcm90b3R5cGU7bC5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaWRUb0luZGV4W3QucG9pbnRJZF07cmV0dXJue3RyYWNlOnRoaXMsZGF0YUNvb3JkOnQuZGF0YUNvb3JkLHRyYWNlQ29vcmQ6dGhpcy5waWNrWFlEYXRhP1t0aGlzLnBpY2tYWURhdGFbMiplXSx0aGlzLnBpY2tYWURhdGFbMiplKzFdXTpbdGhpcy5waWNrWERhdGFbZV0sdGhpcy5waWNrWURhdGFbZV1dLHRleHRMYWJlbDpBcnJheS5pc0FycmF5KHRoaXMudGV4dExhYmVscyk/dGhpcy50ZXh0TGFiZWxzW2VdOnRoaXMudGV4dExhYmVscyxjb2xvcjp0aGlzLmNvbG9yLG5hbWU6dGhpcy5uYW1lLHBvaW50SW5kZXg6ZSxob3ZlcmluZm86dGhpcy5ob3ZlcmluZm99fSxsLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy50ZXh0TGFiZWxzPXQudGV4dCx0aGlzLm5hbWU9dC5uYW1lLHRoaXMuaG92ZXJpbmZvPXQuaG92ZXJpbmZvLHRoaXMuYm91bmRzPVsxLzAsMS8wLC0xLzAsLTEvMF0sdGhpcy51cGRhdGVGYXN0KHQpLHRoaXMuY29sb3I9byh0LHt9KX0sbC51cGRhdGVGYXN0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixvLHMsbCxjPXRoaXMueERhdGE9dGhpcy5waWNrWERhdGE9dC54LHU9dGhpcy55RGF0YT10aGlzLnBpY2tZRGF0YT10LnksaD10aGlzLnBpY2tYWURhdGE9dC54eSxmPXQueGJvdW5kcyYmdC55Ym91bmRzLHA9dC5pbmRpY2VzLGQ9dGhpcy5ib3VuZHM7aWYoaCl7aWYobj1oLGU9aC5sZW5ndGg+Pj4xLGYpZFswXT10Lnhib3VuZHNbMF0sZFsyXT10Lnhib3VuZHNbMV0sZFsxXT10Lnlib3VuZHNbMF0sZFszXT10Lnlib3VuZHNbMV07ZWxzZSBmb3IobD0wO2w8ZTtsKyspbz1uWzIqbF0scz1uWzIqbCsxXSxvPGRbMF0mJihkWzBdPW8pLG8+ZFsyXSYmKGRbMl09byksczxkWzFdJiYoZFsxXT1zKSxzPmRbM10mJihkWzNdPXMpO2lmKHApcj1wO2Vsc2UgZm9yKHI9bmV3IEludDMyQXJyYXkoZSksbD0wO2w8ZTtsKyspcltsXT1sfWVsc2UgZm9yKGU9Yy5sZW5ndGgsbj1uZXcgRmxvYXQzMkFycmF5KDIqZSkscj1uZXcgSW50MzJBcnJheShlKSxsPTA7bDxlO2wrKylvPWNbbF0scz11W2xdLHJbbF09bCxuWzIqbF09byxuWzIqbCsxXT1zLG88ZFswXSYmKGRbMF09byksbz5kWzJdJiYoZFsyXT1vKSxzPGRbMV0mJihkWzFdPXMpLHM+ZFszXSYmKGRbM109cyk7dGhpcy5pZFRvSW5kZXg9cix0aGlzLnBvaW50Y2xvdWRPcHRpb25zLmlkVG9JbmRleD1yLHRoaXMucG9pbnRjbG91ZE9wdGlvbnMucG9zaXRpb25zPW47dmFyIGc9aSh0Lm1hcmtlci5jb2xvciksdj1pKHQubWFya2VyLmJvcmRlci5jb2xvciksbT10Lm9wYWNpdHkqdC5tYXJrZXIub3BhY2l0eTtnWzNdKj1tLHRoaXMucG9pbnRjbG91ZE9wdGlvbnMuY29sb3I9Zzt2YXIgeT10Lm1hcmtlci5ibGVuZDtpZihudWxsPT09eSl7eT1jLmxlbmd0aDwxMDB8fHUubGVuZ3RoPDEwMH10aGlzLnBvaW50Y2xvdWRPcHRpb25zLmJsZW5kPXksdlszXSo9bSx0aGlzLnBvaW50Y2xvdWRPcHRpb25zLmJvcmRlckNvbG9yPXY7dmFyIHg9dC5tYXJrZXIuc2l6ZW1pbixiPU1hdGgubWF4KHQubWFya2VyLnNpemVtYXgsdC5tYXJrZXIuc2l6ZW1pbik7dGhpcy5wb2ludGNsb3VkT3B0aW9ucy5zaXplTWluPXgsdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5zaXplTWF4PWIsdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5hcmVhUmF0aW89dC5tYXJrZXIuYm9yZGVyLmFyZWFyYXRpbyx0aGlzLnBvaW50Y2xvdWQudXBkYXRlKHRoaXMucG9pbnRjbG91ZE9wdGlvbnMpO3ZhciBfPXRoaXMuc2NlbmUueGF4aXMsdz10aGlzLnNjZW5lLnlheGlzLGs9Yi8yfHwuNTt0Ll9leHRyZW1lc1tfLl9pZF09YShfLFtkWzBdLGRbMl1dLHtwcGFkOmt9KSx0Ll9leHRyZW1lc1t3Ll9pZF09YSh3LFtkWzFdLGRbM11dLHtwcGFkOmt9KX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5wb2ludGNsb3VkLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IHModCxlLnVpZCk7cmV0dXJuIHIudXBkYXRlKGUpLHJ9fSx7XCIuLi8uLi9saWIvc3RyMnJnYmFycmF5XCI6NzI0LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZVwiOjc0OCxcIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yXCI6MTA2MixcImdsLXBvaW50Y2xvdWQyZFwiOjI4OX1dLDEwNDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGEocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1hKFwieFwiKSxhKFwieVwiKSxhKFwieGJvdW5kc1wiKSxhKFwieWJvdW5kc1wiKSx0Lnh5JiZ0Lnh5IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5JiYoZS54eT10Lnh5KSx0LmluZGljZXMmJnQuaW5kaWNlcyBpbnN0YW5jZW9mIEludDMyQXJyYXkmJihlLmluZGljZXM9dC5pbmRpY2VzKSxhKFwidGV4dFwiKSxhKFwibWFya2VyLmNvbG9yXCIsciksYShcIm1hcmtlci5vcGFjaXR5XCIpLGEoXCJtYXJrZXIuYmxlbmRcIiksYShcIm1hcmtlci5zaXplbWluXCIpLGEoXCJtYXJrZXIuc2l6ZW1heFwiKSxhKFwibWFya2VyLmJvcmRlci5jb2xvclwiLHIpLGEoXCJtYXJrZXIuYm9yZGVyLmFyZWFyYXRpb1wiKSxlLl9sZW5ndGg9bnVsbH19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4vYXR0cmlidXRlc1wiOjEwMzh9XSwxMDQxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNhbGM9dChcIi4uL3NjYXR0ZXIzZC9jYWxjXCIpLG4ucGxvdD10KFwiLi9jb252ZXJ0XCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwicG9pbnRjbG91ZFwiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4uLy4uL3Bsb3RzL2dsMmRcIiksbi5jYXRlZ29yaWVzPVtcImdsXCIsXCJnbDJkXCIsXCJzaG93TGVnZW5kXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvZ2wyZFwiOjc4NyxcIi4uL3NjYXR0ZXIzZC9jYWxjXCI6MTA4MCxcIi4vYXR0cmlidXRlc1wiOjEwMzgsXCIuL2NvbnZlcnRcIjoxMDM5LFwiLi9kZWZhdWx0c1wiOjEwNDB9XSwxMDQyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vcGxvdHMvZG9tYWluXCIpLmF0dHJpYnV0ZXMsbD10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIiksYz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIiksdT10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKS50ZW1wbGF0ZWRBcnJheSxoPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsZj10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbDsoZS5leHBvcnRzPWYoe2hvdmVyaW5mbzpoKHt9LGkuaG92ZXJpbmZvLHtmbGFnczpbXSxhcnJheU9rOiExfSksaG92ZXJsYWJlbDpvLmhvdmVybGFiZWwsZG9tYWluOnMoe25hbWU6XCJzYW5rZXlcIix0cmFjZTohMH0pLG9yaWVudGF0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ2XCIsXCJoXCJdLGRmbHQ6XCJoXCJ9LHZhbHVlZm9ybWF0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIi4zc1wifSx2YWx1ZXN1ZmZpeDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIn0sYXJyYW5nZW1lbnQ6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInNuYXBcIixcInBlcnBlbmRpY3VsYXJcIixcImZyZWVmb3JtXCIsXCJmaXhlZFwiXSxkZmx0Olwic25hcFwifSx0ZXh0Zm9udDpuKHt9KSxub2RlOntsYWJlbDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixkZmx0OltdfSxncm91cHM6e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsaW1wbGllZEVkaXRzOnt4OltdLHk6W119LGRpbWVuc2lvbnM6MixmcmVlTGVuZ3RoOiEwLGRmbHQ6W10saXRlbXM6e3ZhbFR5cGU6XCJudW1iZXJcIixlZGl0VHlwZTpcImNhbGNcIn19LHg6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZGZsdDpbXX0seTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixkZmx0OltdfSxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsYXJyYXlPazohMH0sbGluZTp7Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6YS5kZWZhdWx0TGluZSxhcnJheU9rOiEwfSx3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6LjUsYXJyYXlPazohMH19LHBhZDp7dmFsVHlwZTpcIm51bWJlclwiLGFycmF5T2s6ITEsbWluOjAsZGZsdDoyMH0sdGhpY2tuZXNzOnt2YWxUeXBlOlwibnVtYmVyXCIsYXJyYXlPazohMSxtaW46MSxkZmx0OjIwfSxob3ZlcmluZm86e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImFsbFwiLFwibm9uZVwiLFwic2tpcFwiXSxkZmx0OlwiYWxsXCJ9LGhvdmVybGFiZWw6by5ob3ZlcmxhYmVsLGhvdmVydGVtcGxhdGU6bCh7fSx7a2V5czpbXCJ2YWx1ZVwiLFwibGFiZWxcIl19KX0sbGluazp7bGFiZWw6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZGZsdDpbXX0sY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGFycmF5T2s6ITB9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmEuZGVmYXVsdExpbmUsYXJyYXlPazohMH0sd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjAsYXJyYXlPazohMH19LHNvdXJjZTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixkZmx0OltdfSx0YXJnZXQ6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZGZsdDpbXX0sdmFsdWU6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZGZsdDpbXX0saG92ZXJpbmZvOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhbGxcIixcIm5vbmVcIixcInNraXBcIl0sZGZsdDpcImFsbFwifSxob3ZlcmxhYmVsOm8uaG92ZXJsYWJlbCxob3ZlcnRlbXBsYXRlOmwoe30se2tleXM6W1widmFsdWVcIixcImxhYmVsXCJdfSksY29sb3JzY2FsZXM6dShcImNvbmNlbnRyYXRpb25zY2FsZXNcIix7ZWRpdFR5cGU6XCJjYWxjXCIsbGFiZWw6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcImNhbGNcIixkZmx0OlwiXCJ9LGNtYXg6e3ZhbFR5cGU6XCJudW1iZXJcIixlZGl0VHlwZTpcImNhbGNcIixkZmx0OjF9LGNtaW46e3ZhbFR5cGU6XCJudW1iZXJcIixlZGl0VHlwZTpcImNhbGNcIixkZmx0OjB9LGNvbG9yc2NhbGU6aChjKCkuY29sb3JzY2FsZSx7ZGZsdDpbWzAsXCJ3aGl0ZVwiXSxbMSxcImJsYWNrXCJdXX0pfSl9fSxcImNhbGNcIixcIm5lc3RlZFwiKSkudHJhbnNmb3Jtcz12b2lkIDB9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiOjU3NyxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzXCI6NjA4LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi4vLi4vcGxvdHMvZG9tYWluXCI6Nzc0LFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCI6Nzc1fV0sMTA0MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsLGk9dChcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCIpLmdldE1vZHVsZUNhbGNEYXRhLGE9dChcIi4vcGxvdFwiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL2xpYi9zZXRjdXJzb3JcIiksbD10KFwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudFwiKSxjPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2VsZWN0XCIpLnByZXBTZWxlY3QsdT10KFwiLi4vLi4vbGliXCIpLGg9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpO2Z1bmN0aW9uIGYodCxlKXt2YXIgcj10Ll9mdWxsRGF0YVtlXSxuPXQuX2Z1bGxMYXlvdXQsaT1uLmRyYWdtb2RlLGE9XCJwYW5cIj09PW4uZHJhZ21vZGU/XCJtb3ZlXCI6XCJjcm9zc2hhaXJcIixvPXIuX2JnUmVjdDtpZihcInBhblwiIT09aSYmXCJ6b29tXCIhPT1pKXtzKG8sYSk7dmFyIGY9e19pZDpcInhcIixjMnA6dS5pZGVudGl0eSxfb2Zmc2V0OnIuX3NhbmtleS50cmFuc2xhdGVYLF9sZW5ndGg6ci5fc2Fua2V5LndpZHRofSxwPXtfaWQ6XCJ5XCIsYzJwOnUuaWRlbnRpdHksX29mZnNldDpyLl9zYW5rZXkudHJhbnNsYXRlWSxfbGVuZ3RoOnIuX3NhbmtleS5oZWlnaHR9LGQ9e2dkOnQsZWxlbWVudDpvLm5vZGUoKSxwbG90aW5mbzp7aWQ6ZSx4YXhpczpmLHlheGlzOnAsZmlsbFJhbmdlSXRlbXM6dS5ub29wfSxzdWJwbG90OmUseGF4ZXM6W2ZdLHlheGVzOltwXSxkb25lRm5Db21wbGV0ZWQ6ZnVuY3Rpb24ocil7dmFyIG4saT10Ll9mdWxsRGF0YVtlXSxhPWkubm9kZS5ncm91cHMuc2xpY2UoKSxvPVtdO2Z1bmN0aW9uIHModCl7Zm9yKHZhciBlPWkuX3NhbmtleS5ncmFwaC5ub2RlcyxyPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXS5wb2ludE51bWJlcj09PXQpcmV0dXJuIGVbcl19Zm9yKHZhciBsPTA7bDxyLmxlbmd0aDtsKyspe3ZhciBjPXMocltsXS5wb2ludE51bWJlcik7aWYoYylpZihjLmdyb3VwKXtmb3IodmFyIHU9MDt1PGMuY2hpbGRyZW5Ob2Rlcy5sZW5ndGg7dSsrKW8ucHVzaChjLmNoaWxkcmVuTm9kZXNbdV0ucG9pbnROdW1iZXIpO2FbYy5wb2ludE51bWJlci1pLm5vZGUuX2NvdW50XT0hMX1lbHNlIG8ucHVzaChjLnBvaW50TnVtYmVyKX1uPWEuZmlsdGVyKEJvb2xlYW4pLmNvbmNhdChbb10pLGguY2FsbChcIl9ndWlSZXN0eWxlXCIsdCx7XCJub2RlLmdyb3Vwc1wiOltuXX0sZSl9LHByZXBGbjpmdW5jdGlvbih0LGUscil7Yyh0LGUscixkLGkpfX07bC5pbml0KGQpfX1yLm5hbWU9XCJzYW5rZXlcIixyLmJhc2VMYXlvdXRBdHRyT3ZlcnJpZGVzPW4oe2hvdmVybGFiZWw6by5ob3ZlcmxhYmVsfSxcInBsb3RcIixcIm5lc3RlZFwiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9aSh0LmNhbGNkYXRhLFwic2Fua2V5XCIpWzBdO2EodCxlKSxyLnVwZGF0ZUZ4KHQpfSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4uX2hhcyYmbi5faGFzKFwic2Fua2V5XCIpLGE9ZS5faGFzJiZlLl9oYXMoXCJzYW5rZXlcIik7aSYmIWEmJihuLl9wYXBlcmRpdi5zZWxlY3RBbGwoXCIuc2Fua2V5XCIpLnJlbW92ZSgpLG4uX3BhcGVyZGl2LnNlbGVjdEFsbChcIi5iZ3NhbmtleVwiKS5yZW1vdmUoKSl9LHIudXBkYXRlRng9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Ll9mdWxsRGF0YS5sZW5ndGg7ZSsrKWYodCxlKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnRcIjo1OTYsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzXCI6NjE4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3NldGN1cnNvclwiOjcyMSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2VsZWN0XCI6NzY2LFwiLi4vLi4vcGxvdHMvZ2V0X2RhdGFcIjo3ODQsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vcGxvdFwiOjEwNDh9XSwxMDQ0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInN0cm9uZ2x5LWNvbm5lY3RlZC1jb21wb25lbnRzXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9saWIvZ3VwXCIpLndyYXAsbz1pLmlzQXJyYXlPclR5cGVkQXJyYXkscz1pLmlzSW5kZXgsbD10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlXCIpO2Z1bmN0aW9uIGModCl7dmFyIGUscj10Lm5vZGUsYT10LmxpbmssYz1bXSx1PW8oYS5jb2xvciksaD17fSxmPXt9LHA9YS5jb2xvcnNjYWxlcy5sZW5ndGg7Zm9yKGU9MDtlPHA7ZSsrKXt2YXIgZD1hLmNvbG9yc2NhbGVzW2VdLGc9bC5leHRyYWN0U2NhbGUoZCx7Y0xldHRlcjpcImNcIn0pLHY9bC5tYWtlQ29sb3JTY2FsZUZ1bmMoZyk7ZltkLmxhYmVsXT12fXZhciBtPTA7Zm9yKGU9MDtlPGEudmFsdWUubGVuZ3RoO2UrKylhLnNvdXJjZVtlXT5tJiYobT1hLnNvdXJjZVtlXSksYS50YXJnZXRbZV0+bSYmKG09YS50YXJnZXRbZV0pO3ZhciB5LHg9bSsxO3Qubm9kZS5fY291bnQ9eDt2YXIgYj10Lm5vZGUuZ3JvdXBzLF89e307Zm9yKGU9MDtlPGIubGVuZ3RoO2UrKyl7dmFyIHc9YltlXTtmb3IoeT0wO3k8dy5sZW5ndGg7eSsrKXt2YXIgaz13W3ldLEE9eCtlO18uaGFzT3duUHJvcGVydHkoayk/aS53YXJuKFwiTm9kZSBcIitrK1wiIGlzIGFscmVhZHkgcGFydCBvZiBhIGdyb3VwLlwiKTpfW2tdPUF9fXZhciBUPXtzb3VyY2U6W10sdGFyZ2V0OltdfTtmb3IoZT0wO2U8YS52YWx1ZS5sZW5ndGg7ZSsrKXt2YXIgTT1hLnZhbHVlW2VdLFM9YS5zb3VyY2VbZV0sRT1hLnRhcmdldFtlXTtpZihNPjAmJnMoUyx4KSYmcyhFLHgpJiYoIV8uaGFzT3duUHJvcGVydHkoUyl8fCFfLmhhc093blByb3BlcnR5KEUpfHxfW1NdIT09X1tFXSkpe18uaGFzT3duUHJvcGVydHkoRSkmJihFPV9bRV0pLF8uaGFzT3duUHJvcGVydHkoUykmJihTPV9bU10pLEU9K0UsaFtTPStTXT1oW0VdPSEwO3ZhciBDPVwiXCI7YS5sYWJlbCYmYS5sYWJlbFtlXSYmKEM9YS5sYWJlbFtlXSk7dmFyIEw9bnVsbDtDJiZmLmhhc093blByb3BlcnR5KEMpJiYoTD1mW0NdKSxjLnB1c2goe3BvaW50TnVtYmVyOmUsbGFiZWw6Qyxjb2xvcjp1P2EuY29sb3JbZV06YS5jb2xvcixjb25jZW50cmF0aW9uc2NhbGU6TCxzb3VyY2U6Uyx0YXJnZXQ6RSx2YWx1ZTorTX0pLFQuc291cmNlLnB1c2goUyksVC50YXJnZXQucHVzaChFKX19dmFyIHo9eCtiLmxlbmd0aCxPPW8oci5jb2xvciksST1bXTtmb3IoZT0wO2U8ejtlKyspaWYoaFtlXSl7dmFyIEQ9ci5sYWJlbFtlXTtJLnB1c2goe2dyb3VwOmU+eC0xLGNoaWxkcmVuTm9kZXM6W10scG9pbnROdW1iZXI6ZSxsYWJlbDpELGNvbG9yOk8/ci5jb2xvcltlXTpyLmNvbG9yfSl9dmFyIFA9ITE7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGE9aS5pbml0MmRBcnJheSh0LDApLG89MDtvPE1hdGgubWluKGUubGVuZ3RoLHIubGVuZ3RoKTtvKyspaWYoaS5pc0luZGV4KGVbb10sdCkmJmkuaXNJbmRleChyW29dLHQpKXtpZihlW29dPT09cltvXSlyZXR1cm4hMDthW2Vbb11dLnB1c2gocltvXSl9cmV0dXJuIG4oYSkuY29tcG9uZW50cy5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aD4xfSl9KHosVC5zb3VyY2UsVC50YXJnZXQpJiYoUD0hMCkse2NpcmN1bGFyOlAsbGlua3M6Yyxub2RlczpJLGdyb3VwczpiLGdyb3VwTG9va3VwOl99fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWMoZSk7cmV0dXJuIGEoe2NpcmN1bGFyOnIuY2lyY3VsYXIsX25vZGVzOnIubm9kZXMsX2xpbmtzOnIubGlua3MsX2dyb3VwczpyLmdyb3VwcyxfZ3JvdXBMb29rdXA6ci5ncm91cExvb2t1cH0pfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlXCI6NTkwLFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2d1cFwiOjY5OSxcInN0cm9uZ2x5LWNvbm5lY3RlZC1jb21wb25lbnRzXCI6NTE1fV0sMTA0NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17bm9kZVRleHRPZmZzZXRIb3Jpem9udGFsOjQsbm9kZVRleHRPZmZzZXRWZXJ0aWNhbDozLG5vZGVQYWRBY3Jvc3M6MTAsc2Fua2V5SXRlcmF0aW9uczo1MCxmb3JjZUl0ZXJhdGlvbnM6NSxmb3JjZVRpY2tzUGVyRnJhbWU6MTAsZHVyYXRpb246NTAwLGVhc2U6XCJsaW5lYXJcIixjbjp7c2Fua2V5Olwic2Fua2V5XCIsc2Fua2V5TGlua3M6XCJzYW5rZXktbGlua3NcIixzYW5rZXlMaW5rOlwic2Fua2V5LWxpbmtcIixzYW5rZXlOb2RlU2V0Olwic2Fua2V5LW5vZGUtc2V0XCIsc2Fua2V5Tm9kZTpcInNhbmtleS1ub2RlXCIsbm9kZVJlY3Q6XCJub2RlLXJlY3RcIixub2RlQ2FwdHVyZTpcIm5vZGUtY2FwdHVyZVwiLG5vZGVDZW50ZXJlZDpcIm5vZGUtZW50ZXJlZFwiLG5vZGVMYWJlbEd1aWRlOlwibm9kZS1sYWJlbC1ndWlkZVwiLG5vZGVMYWJlbDpcIm5vZGUtbGFiZWxcIixub2RlTGFiZWxUZXh0UGF0aDpcIm5vZGUtbGFiZWwtdGV4dC1wYXRoXCJ9fX0se31dLDEwNDY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLG89dChcInRpbnljb2xvcjJcIikscz10KFwiLi4vLi4vcGxvdHMvZG9tYWluXCIpLmRlZmF1bHRzLGw9dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJsYWJlbF9kZWZhdWx0c1wiKSxjPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLHU9dChcIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0c1wiKTtmdW5jdGlvbiBoKHQsZSl7ZnVuY3Rpb24gcihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaS5saW5rLmNvbG9yc2NhbGVzLHIsYSl9cihcImxhYmVsXCIpLHIoXCJjbWluXCIpLHIoXCJjbWF4XCIpLHIoXCJjb2xvcnNjYWxlXCIpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixmKXtmdW5jdGlvbiBwKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9dmFyIGQ9bi5leHRlbmREZWVwKGYuaG92ZXJsYWJlbCx0LmhvdmVybGFiZWwpLGc9dC5ub2RlLHY9Yy5uZXdDb250YWluZXIoZSxcIm5vZGVcIik7ZnVuY3Rpb24gbSh0LGUpe3JldHVybiBuLmNvZXJjZShnLHYsaS5ub2RlLHQsZSl9bShcImxhYmVsXCIpLG0oXCJncm91cHNcIiksbShcInhcIiksbShcInlcIiksbShcInBhZFwiKSxtKFwidGhpY2tuZXNzXCIpLG0oXCJsaW5lLmNvbG9yXCIpLG0oXCJsaW5lLndpZHRoXCIpLG0oXCJob3ZlcmluZm9cIix0LmhvdmVyaW5mbyksbChnLHYsbSxkKSxtKFwiaG92ZXJ0ZW1wbGF0ZVwiKTt2YXIgeT1mLmNvbG9yd2F5O20oXCJjb2xvclwiLHYubGFiZWwubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEuYWRkT3BhY2l0eShmdW5jdGlvbih0KXtyZXR1cm4geVt0JXkubGVuZ3RoXX0oZSksLjgpfSkpO3ZhciB4PXQubGlua3x8e30sYj1jLm5ld0NvbnRhaW5lcihlLFwibGlua1wiKTtmdW5jdGlvbiBfKHQsZSl7cmV0dXJuIG4uY29lcmNlKHgsYixpLmxpbmssdCxlKX1fKFwibGFiZWxcIiksXyhcInNvdXJjZVwiKSxfKFwidGFyZ2V0XCIpLF8oXCJ2YWx1ZVwiKSxfKFwibGluZS5jb2xvclwiKSxfKFwibGluZS53aWR0aFwiKSxfKFwiaG92ZXJpbmZvXCIsdC5ob3ZlcmluZm8pLGwoeCxiLF8sZCksXyhcImhvdmVydGVtcGxhdGVcIik7dmFyIHcsaz1vKGYucGFwZXJfYmdjb2xvcikuZ2V0THVtaW5hbmNlKCk8LjMzMz9cInJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KVwiOlwicmdiYSgwLCAwLCAwLCAwLjIpXCI7XyhcImNvbG9yXCIsbi5yZXBlYXQoayxiLnZhbHVlLmxlbmd0aCkpLHUoeCxiLHtuYW1lOlwiY29sb3JzY2FsZXNcIixoYW5kbGVJdGVtRGVmYXVsdHM6aH0pLHMoZSxmLHApLHAoXCJvcmllbnRhdGlvblwiKSxwKFwidmFsdWVmb3JtYXRcIikscChcInZhbHVlc3VmZml4XCIpLHYueC5sZW5ndGgmJnYueS5sZW5ndGgmJih3PVwiZnJlZWZvcm1cIikscChcImFycmFuZ2VtZW50XCIsdyksbi5jb2VyY2VGb250KHAsXCJ0ZXh0Zm9udFwiLG4uZXh0ZW5kRmxhdCh7fSxmLmZvbnQpKSxlLl9sZW5ndGg9bnVsbH19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVybGFiZWxfZGVmYXVsdHNcIjo2MTUsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCI6NzQ1LFwiLi4vLi4vcGxvdHMvZG9tYWluXCI6Nzc0LFwiLi9hdHRyaWJ1dGVzXCI6MTA0Mix0aW55Y29sb3IyOjUyMn1dLDEwNDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLG4uY2FsYz10KFwiLi9jYWxjXCIpLG4ucGxvdD10KFwiLi9wbG90XCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwic2Fua2V5XCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi9iYXNlX3Bsb3RcIiksbi5zZWxlY3RQb2ludHM9dChcIi4vc2VsZWN0LmpzXCIpLG4uY2F0ZWdvcmllcz1bXCJub09wYWNpdHlcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuL2F0dHJpYnV0ZXNcIjoxMDQyLFwiLi9iYXNlX3Bsb3RcIjoxMDQzLFwiLi9jYWxjXCI6MTA0NCxcIi4vZGVmYXVsdHNcIjoxMDQ2LFwiLi9wbG90XCI6MTA0OCxcIi4vc2VsZWN0LmpzXCI6MTA1MH1dLDEwNDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi9yZW5kZXJcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLHM9dChcIi4uLy4uL2xpYlwiKSxsPXQoXCIuL2NvbnN0YW50c1wiKS5jbixjPXMuXztmdW5jdGlvbiB1KHQpe3JldHVyblwiXCIhPT10fWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5PT09ZS50cmFjZUlkfSl9ZnVuY3Rpb24gZih0LGUpe24uc2VsZWN0KHQpLnNlbGVjdChcInBhdGhcIikuc3R5bGUoXCJmaWxsLW9wYWNpdHlcIixlKSxuLnNlbGVjdCh0KS5zZWxlY3QoXCJyZWN0XCIpLnN0eWxlKFwiZmlsbC1vcGFjaXR5XCIsZSl9ZnVuY3Rpb24gcCh0KXtuLnNlbGVjdCh0KS5zZWxlY3QoXCJ0ZXh0Lm5hbWVcIikuc3R5bGUoXCJmaWxsXCIsXCJibGFja1wiKX1mdW5jdGlvbiBkKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4tMSE9PXQubm9kZS5zb3VyY2VMaW5rcy5pbmRleE9mKGUubGluayl8fC0xIT09dC5ub2RlLnRhcmdldExpbmtzLmluZGV4T2YoZS5saW5rKX19ZnVuY3Rpb24gZyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuLTEhPT1lLm5vZGUuc291cmNlTGlua3MuaW5kZXhPZih0LmxpbmspfHwtMSE9PWUubm9kZS50YXJnZXRMaW5rcy5pbmRleE9mKHQubGluayl9fWZ1bmN0aW9uIHYodCxlLHIpe2UmJnImJmgocixlKS5zZWxlY3RBbGwoXCIuXCIrbC5zYW5rZXlMaW5rKS5maWx0ZXIoZChlKSkuY2FsbCh5LmJpbmQoMCxlLHIsITEpKX1mdW5jdGlvbiBtKHQsZSxyKXtlJiZyJiZoKHIsZSkuc2VsZWN0QWxsKFwiLlwiK2wuc2Fua2V5TGluaykuZmlsdGVyKGQoZSkpLmNhbGwoeC5iaW5kKDAsZSxyLCExKSl9ZnVuY3Rpb24geSh0LGUscixuKXt2YXIgaT1uLmRhdHVtKCkubGluay5sYWJlbDtuLnN0eWxlKFwiZmlsbC1vcGFjaXR5XCIsZnVuY3Rpb24odCl7aWYoIXQubGluay5jb25jZW50cmF0aW9uc2NhbGUpcmV0dXJuLjR9KSxpJiZoKGUsdCkuc2VsZWN0QWxsKFwiLlwiK2wuc2Fua2V5TGluaykuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpbmsubGFiZWw9PT1pfSkuc3R5bGUoXCJmaWxsLW9wYWNpdHlcIixmdW5jdGlvbih0KXtpZighdC5saW5rLmNvbmNlbnRyYXRpb25zY2FsZSlyZXR1cm4uNH0pLHImJmgoZSx0KS5zZWxlY3RBbGwoXCIuXCIrbC5zYW5rZXlOb2RlKS5maWx0ZXIoZyh0KSkuY2FsbCh2KX1mdW5jdGlvbiB4KHQsZSxyLG4pe3ZhciBpPW4uZGF0dW0oKS5saW5rLmxhYmVsO24uc3R5bGUoXCJmaWxsLW9wYWNpdHlcIixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JBbHBoYX0pLGkmJmgoZSx0KS5zZWxlY3RBbGwoXCIuXCIrbC5zYW5rZXlMaW5rKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQubGluay5sYWJlbD09PWl9KS5zdHlsZShcImZpbGwtb3BhY2l0eVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbnlDb2xvckFscGhhfSksciYmaChlLHQpLnNlbGVjdEFsbChsLnNhbmtleU5vZGUpLmZpbHRlcihnKHQpKS5jYWxsKG0pfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj10LmhvdmVybGFiZWx8fHt9LG49cy5uZXN0ZWRQcm9wZXJ0eShyLGUpLmdldCgpO3JldHVybiFBcnJheS5pc0FycmF5KG4pJiZufWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Ll9mdWxsTGF5b3V0LHM9ci5fcGFwZXIsaD1yLl9zaXplLGQ9MDtkPGUubGVuZ3RoO2QrKylpZighdC5fZnVsbERhdGFbZF0uX3ZpZXdJbml0aWFsKXt2YXIgZz10Ll9mdWxsRGF0YVtkXS5ub2RlO3QuX2Z1bGxEYXRhW2RdLl92aWV3SW5pdGlhbD17bm9kZTp7Z3JvdXBzOmcuZ3JvdXBzLnNsaWNlKCkseDpnLnguc2xpY2UoKSx5OmcueS5zbGljZSgpfX19dmFyIF89Yyh0LFwic291cmNlOlwiKStcIiBcIix3PWModCxcInRhcmdldDpcIikrXCIgXCIsaz1jKHQsXCJjb25jZW50cmF0aW9uOlwiKStcIiBcIixBPWModCxcImluY29taW5nIGZsb3cgY291bnQ6XCIpK1wiIFwiLFQ9Yyh0LFwib3V0Z29pbmcgZmxvdyBjb3VudDpcIikrXCIgXCI7aSh0LHMsZSx7d2lkdGg6aC53LGhlaWdodDpoLmgsbWFyZ2luOnt0OmgudCxyOmgucixiOmguYixsOmgubH19LHtsaW5rRXZlbnRzOntob3ZlcjpmdW5jdGlvbihlLHIsaSl7ITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSYmKG4uc2VsZWN0KGUpLmNhbGwoeS5iaW5kKDAscixpLCEwKSksXCJza2lwXCIhPT1yLmxpbmsudHJhY2UubGluay5ob3ZlcmluZm8mJihyLmxpbmsuZnVsbERhdGE9ci5saW5rLnRyYWNlLHQuZW1pdChcInBsb3RseV9ob3ZlclwiLHtldmVudDpuLmV2ZW50LHBvaW50czpbci5saW5rXX0pKSl9LGZvbGxvdzpmdW5jdGlvbihlLGkpe2lmKCExIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGUpe3ZhciBzPWkubGluay50cmFjZS5saW5rO2lmKFwibm9uZVwiIT09cy5ob3ZlcmluZm8mJlwic2tpcFwiIT09cy5ob3ZlcmluZm8pe2Zvcih2YXIgbD1bXSxjPTAsaD0wO2g8aS5mbG93LmxpbmtzLmxlbmd0aDtoKyspe3ZhciBkPWkuZmxvdy5saW5rc1toXTtpZihcImNsb3Nlc3RcIiE9PXQuX2Z1bGxMYXlvdXQuaG92ZXJtb2RlfHxpLmxpbmsucG9pbnROdW1iZXI9PT1kLnBvaW50TnVtYmVyKXtpLmxpbmsucG9pbnROdW1iZXI9PT1kLnBvaW50TnVtYmVyJiYoYz1oKSxkLmZ1bGxEYXRhPWQudHJhY2Uscz1pLmxpbmsudHJhY2UubGluazt2YXIgZz1tKGQpLHY9e3ZhbHVlTGFiZWw6bi5mb3JtYXQoaS52YWx1ZUZvcm1hdCkoZC52YWx1ZSkraS52YWx1ZVN1ZmZpeH07bC5wdXNoKHt4OmdbMF0seTpnWzFdLG5hbWU6di52YWx1ZUxhYmVsLHRleHQ6W2QubGFiZWx8fFwiXCIsXytkLnNvdXJjZS5sYWJlbCx3K2QudGFyZ2V0LmxhYmVsLGQuY29uY2VudHJhdGlvbnNjYWxlP2srbi5mb3JtYXQoXCIlMC4yZlwiKShkLmZsb3cubGFiZWxDb25jZW50cmF0aW9uKTpcIlwiXS5maWx0ZXIodSkuam9pbihcIjxicj5cIiksY29sb3I6YihzLFwiYmdjb2xvclwiKXx8by5hZGRPcGFjaXR5KGQuY29sb3IsMSksYm9yZGVyQ29sb3I6YihzLFwiYm9yZGVyY29sb3JcIiksZm9udEZhbWlseTpiKHMsXCJmb250LmZhbWlseVwiKSxmb250U2l6ZTpiKHMsXCJmb250LnNpemVcIiksZm9udENvbG9yOmIocyxcImZvbnQuY29sb3JcIiksbmFtZUxlbmd0aDpiKHMsXCJuYW1lbGVuZ3RoXCIpLHRleHRBbGlnbjpiKHMsXCJhbGlnblwiKSxpZGVhbEFsaWduOm4uZXZlbnQueDxnWzBdP1wicmlnaHRcIjpcImxlZnRcIixob3ZlcnRlbXBsYXRlOnMuaG92ZXJ0ZW1wbGF0ZSxob3ZlcnRlbXBsYXRlTGFiZWxzOnYsZXZlbnREYXRhOltkXX0pfX1hLm11bHRpSG92ZXJzKGwse2NvbnRhaW5lcjpyLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpyLl9wYXBlci5ub2RlKCksZ2Q6dCxhbmNob3JJbmRleDpjfSkuZWFjaChmdW5jdGlvbigpe2kubGluay5jb25jZW50cmF0aW9uc2NhbGV8fGYodGhpcywuNjUpLHAodGhpcyl9KX19ZnVuY3Rpb24gbSh0KXt2YXIgZSxyO3JldHVybiB0LmNpcmN1bGFyPyhlPSh0LmNpcmN1bGFyUGF0aERhdGEubGVmdElubmVyRXh0ZW50K3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodElubmVyRXh0ZW50KS8yK2kucGFyZW50LnRyYW5zbGF0ZVgscj10LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K2kucGFyZW50LnRyYW5zbGF0ZVkpOihlPSh0LnNvdXJjZS54MSt0LnRhcmdldC54MCkvMitpLnBhcmVudC50cmFuc2xhdGVYLHI9KHQueTArdC55MSkvMitpLnBhcmVudC50cmFuc2xhdGVZKSxbZSxyXX19LHVuaG92ZXI6ZnVuY3Rpb24oZSxpLG8peyExIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGUmJihuLnNlbGVjdChlKS5jYWxsKHguYmluZCgwLGksbywhMCkpLFwic2tpcFwiIT09aS5saW5rLnRyYWNlLmxpbmsuaG92ZXJpbmZvJiYoaS5saW5rLmZ1bGxEYXRhPWkubGluay50cmFjZSx0LmVtaXQoXCJwbG90bHlfdW5ob3ZlclwiLHtldmVudDpuLmV2ZW50LHBvaW50czpbaS5saW5rXX0pKSxhLmxvbmVVbmhvdmVyKHIuX2hvdmVybGF5ZXIubm9kZSgpKSl9LHNlbGVjdDpmdW5jdGlvbihlLHIpe3ZhciBpPXIubGluaztpLm9yaWdpbmFsRXZlbnQ9bi5ldmVudCx0Ll9ob3ZlcmRhdGE9W2ldLGEuY2xpY2sodCx7dGFyZ2V0OiEwfSl9fSxub2RlRXZlbnRzOntob3ZlcjpmdW5jdGlvbihlLHIsaSl7ITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSYmKG4uc2VsZWN0KGUpLmNhbGwodixyLGkpLFwic2tpcFwiIT09ci5ub2RlLnRyYWNlLm5vZGUuaG92ZXJpbmZvJiYoci5ub2RlLmZ1bGxEYXRhPXIubm9kZS50cmFjZSx0LmVtaXQoXCJwbG90bHlfaG92ZXJcIix7ZXZlbnQ6bi5ldmVudCxwb2ludHM6W3Iubm9kZV19KSkpfSxmb2xsb3c6ZnVuY3Rpb24oZSxpKXtpZighMSE9PXQuX2Z1bGxMYXlvdXQuaG92ZXJtb2RlKXt2YXIgbz1pLm5vZGUudHJhY2Uubm9kZTtpZihcIm5vbmVcIiE9PW8uaG92ZXJpbmZvJiZcInNraXBcIiE9PW8uaG92ZXJpbmZvKXt2YXIgcz1uLnNlbGVjdChlKS5zZWxlY3QoXCIuXCIrbC5ub2RlUmVjdCksYz10Ll9mdWxsTGF5b3V0Ll9wYXBlcmRpdi5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaD1zLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPWgubGVmdC0yLWMubGVmdCxnPWgucmlnaHQrMi1jLmxlZnQsdj1oLnRvcCtoLmhlaWdodC80LWMudG9wLG09e3ZhbHVlTGFiZWw6bi5mb3JtYXQoaS52YWx1ZUZvcm1hdCkoaS5ub2RlLnZhbHVlKStpLnZhbHVlU3VmZml4fTtpLm5vZGUuZnVsbERhdGE9aS5ub2RlLnRyYWNlO3ZhciB5PWEubG9uZUhvdmVyKHt4MDpkLHgxOmcseTp2LG5hbWU6bi5mb3JtYXQoaS52YWx1ZUZvcm1hdCkoaS5ub2RlLnZhbHVlKStpLnZhbHVlU3VmZml4LHRleHQ6W2kubm9kZS5sYWJlbCxBK2kubm9kZS50YXJnZXRMaW5rcy5sZW5ndGgsVCtpLm5vZGUuc291cmNlTGlua3MubGVuZ3RoXS5maWx0ZXIodSkuam9pbihcIjxicj5cIiksY29sb3I6YihvLFwiYmdjb2xvclwiKXx8aS50aW55Q29sb3JIdWUsYm9yZGVyQ29sb3I6YihvLFwiYm9yZGVyY29sb3JcIiksZm9udEZhbWlseTpiKG8sXCJmb250LmZhbWlseVwiKSxmb250U2l6ZTpiKG8sXCJmb250LnNpemVcIiksZm9udENvbG9yOmIobyxcImZvbnQuY29sb3JcIiksbmFtZUxlbmd0aDpiKG8sXCJuYW1lbGVuZ3RoXCIpLHRleHRBbGlnbjpiKG8sXCJhbGlnblwiKSxpZGVhbEFsaWduOlwibGVmdFwiLGhvdmVydGVtcGxhdGU6by5ob3ZlcnRlbXBsYXRlLGhvdmVydGVtcGxhdGVMYWJlbHM6bSxldmVudERhdGE6W2kubm9kZV19LHtjb250YWluZXI6ci5faG92ZXJsYXllci5ub2RlKCksb3V0ZXJDb250YWluZXI6ci5fcGFwZXIubm9kZSgpLGdkOnR9KTtmKHksLjg1KSxwKHkpfX19LHVuaG92ZXI6ZnVuY3Rpb24oZSxpLG8peyExIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGUmJihuLnNlbGVjdChlKS5jYWxsKG0saSxvKSxcInNraXBcIiE9PWkubm9kZS50cmFjZS5ub2RlLmhvdmVyaW5mbyYmKGkubm9kZS5mdWxsRGF0YT1pLm5vZGUudHJhY2UsdC5lbWl0KFwicGxvdGx5X3VuaG92ZXJcIix7ZXZlbnQ6bi5ldmVudCxwb2ludHM6W2kubm9kZV19KSksYS5sb25lVW5ob3ZlcihyLl9ob3ZlcmxheWVyLm5vZGUoKSkpfSxzZWxlY3Q6ZnVuY3Rpb24oZSxyLGkpe3ZhciBvPXIubm9kZTtvLm9yaWdpbmFsRXZlbnQ9bi5ldmVudCx0Ll9ob3ZlcmRhdGE9W29dLG4uc2VsZWN0KGUpLmNhbGwobSxyLGkpLGEuY2xpY2sodCx7dGFyZ2V0OiEwfSl9fX0pfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9saWJcIjo3MDEsXCIuL2NvbnN0YW50c1wiOjEwNDUsXCIuL3JlbmRlclwiOjEwNDksZDM6MTU1fV0sMTA0OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2NvbnN0YW50c1wiKSxpPXQoXCJkM1wiKSxhPXQoXCJ0aW55Y29sb3IyXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIikscz10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLGw9dChcIkBwbG90bHkvZDMtc2Fua2V5XCIpLGM9dChcImQzLXNhbmtleS1jaXJjdWxhclwiKSx1PXQoXCJkMy1mb3JjZVwiKSxoPXQoXCIuLi8uLi9saWJcIiksZj10KFwiLi4vLi4vbGliL2d1cFwiKSxwPWYua2V5RnVuLGQ9Zi5yZXBlYXQsZz1mLnVud3JhcCx2PXQoXCJkMy1pbnRlcnBvbGF0ZVwiKS5pbnRlcnBvbGF0ZU51bWJlcixtPXQoXCIuLi8uLi9yZWdpc3RyeVwiKTtmdW5jdGlvbiB5KCl7dmFyIHQ9LjU7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKGUubGluay5jaXJjdWxhcilyZXR1cm4gcj1lLmxpbmssbj1yLndpZHRoLzIsaT1yLmNpcmN1bGFyUGF0aERhdGEsXCJ0b3BcIj09PXIuY2lyY3VsYXJMaW5rVHlwZT9cIk0gXCIraS50YXJnZXRYK1wiIFwiKyhpLnRhcmdldFkrbikrXCIgTFwiK2kucmlnaHRJbm5lckV4dGVudCtcIiBcIisoaS50YXJnZXRZK24pK1wiQVwiKyhpLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrbikrXCIgXCIrKGkucmlnaHRTbWFsbEFyY1JhZGl1cytuKStcIiAwIDAgMSBcIisoaS5yaWdodEZ1bGxFeHRlbnQtbikrXCIgXCIrKGkudGFyZ2V0WS1pLnJpZ2h0U21hbGxBcmNSYWRpdXMpK1wiTFwiKyhpLnJpZ2h0RnVsbEV4dGVudC1uKStcIiBcIitpLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudCtcIkFcIisoaS5yaWdodExhcmdlQXJjUmFkaXVzK24pK1wiIFwiKyhpLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrbikrXCIgMCAwIDEgXCIraS5yaWdodElubmVyRXh0ZW50K1wiIFwiKyhpLnZlcnRpY2FsRnVsbEV4dGVudC1uKStcIkxcIitpLmxlZnRJbm5lckV4dGVudCtcIiBcIisoaS52ZXJ0aWNhbEZ1bGxFeHRlbnQtbikrXCJBXCIrKGkubGVmdExhcmdlQXJjUmFkaXVzK24pK1wiIFwiKyhpLmxlZnRMYXJnZUFyY1JhZGl1cytuKStcIiAwIDAgMSBcIisoaS5sZWZ0RnVsbEV4dGVudCtuKStcIiBcIitpLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50K1wiTFwiKyhpLmxlZnRGdWxsRXh0ZW50K24pK1wiIFwiKyhpLnNvdXJjZVktaS5sZWZ0U21hbGxBcmNSYWRpdXMpK1wiQVwiKyhpLmxlZnRMYXJnZUFyY1JhZGl1cytuKStcIiBcIisoaS5sZWZ0U21hbGxBcmNSYWRpdXMrbikrXCIgMCAwIDEgXCIraS5sZWZ0SW5uZXJFeHRlbnQrXCIgXCIrKGkuc291cmNlWStuKStcIkxcIitpLnNvdXJjZVgrXCIgXCIrKGkuc291cmNlWStuKStcIkxcIitpLnNvdXJjZVgrXCIgXCIrKGkuc291cmNlWS1uKStcIkxcIitpLmxlZnRJbm5lckV4dGVudCtcIiBcIisoaS5zb3VyY2VZLW4pK1wiQVwiKyhpLmxlZnRMYXJnZUFyY1JhZGl1cy1uKStcIiBcIisoaS5sZWZ0U21hbGxBcmNSYWRpdXMtbikrXCIgMCAwIDAgXCIrKGkubGVmdEZ1bGxFeHRlbnQtbikrXCIgXCIrKGkuc291cmNlWS1pLmxlZnRTbWFsbEFyY1JhZGl1cykrXCJMXCIrKGkubGVmdEZ1bGxFeHRlbnQtbikrXCIgXCIraS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudCtcIkFcIisoaS5sZWZ0TGFyZ2VBcmNSYWRpdXMtbikrXCIgXCIrKGkubGVmdExhcmdlQXJjUmFkaXVzLW4pK1wiIDAgMCAwIFwiK2kubGVmdElubmVyRXh0ZW50K1wiIFwiKyhpLnZlcnRpY2FsRnVsbEV4dGVudCtuKStcIkxcIitpLnJpZ2h0SW5uZXJFeHRlbnQrXCIgXCIrKGkudmVydGljYWxGdWxsRXh0ZW50K24pK1wiQVwiKyhpLnJpZ2h0TGFyZ2VBcmNSYWRpdXMtbikrXCIgXCIrKGkucmlnaHRMYXJnZUFyY1JhZGl1cy1uKStcIiAwIDAgMCBcIisoaS5yaWdodEZ1bGxFeHRlbnQrbikrXCIgXCIraS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQrXCJMXCIrKGkucmlnaHRGdWxsRXh0ZW50K24pK1wiIFwiKyhpLnRhcmdldFktaS5yaWdodFNtYWxsQXJjUmFkaXVzKStcIkFcIisoaS5yaWdodExhcmdlQXJjUmFkaXVzLW4pK1wiIFwiKyhpLnJpZ2h0U21hbGxBcmNSYWRpdXMtbikrXCIgMCAwIDAgXCIraS5yaWdodElubmVyRXh0ZW50K1wiIFwiKyhpLnRhcmdldFktbikrXCJMXCIraS50YXJnZXRYK1wiIFwiKyhpLnRhcmdldFktbikrXCJaXCI6XCJNIFwiK2kudGFyZ2V0WCtcIiBcIisoaS50YXJnZXRZLW4pK1wiIExcIitpLnJpZ2h0SW5uZXJFeHRlbnQrXCIgXCIrKGkudGFyZ2V0WS1uKStcIkFcIisoaS5yaWdodExhcmdlQXJjUmFkaXVzK24pK1wiIFwiKyhpLnJpZ2h0U21hbGxBcmNSYWRpdXMrbikrXCIgMCAwIDAgXCIrKGkucmlnaHRGdWxsRXh0ZW50LW4pK1wiIFwiKyhpLnRhcmdldFkraS5yaWdodFNtYWxsQXJjUmFkaXVzKStcIkxcIisoaS5yaWdodEZ1bGxFeHRlbnQtbikrXCIgXCIraS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQrXCJBXCIrKGkucmlnaHRMYXJnZUFyY1JhZGl1cytuKStcIiBcIisoaS5yaWdodExhcmdlQXJjUmFkaXVzK24pK1wiIDAgMCAwIFwiK2kucmlnaHRJbm5lckV4dGVudCtcIiBcIisoaS52ZXJ0aWNhbEZ1bGxFeHRlbnQrbikrXCJMXCIraS5sZWZ0SW5uZXJFeHRlbnQrXCIgXCIrKGkudmVydGljYWxGdWxsRXh0ZW50K24pK1wiQVwiKyhpLmxlZnRMYXJnZUFyY1JhZGl1cytuKStcIiBcIisoaS5sZWZ0TGFyZ2VBcmNSYWRpdXMrbikrXCIgMCAwIDAgXCIrKGkubGVmdEZ1bGxFeHRlbnQrbikrXCIgXCIraS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudCtcIkxcIisoaS5sZWZ0RnVsbEV4dGVudCtuKStcIiBcIisoaS5zb3VyY2VZK2kubGVmdFNtYWxsQXJjUmFkaXVzKStcIkFcIisoaS5sZWZ0TGFyZ2VBcmNSYWRpdXMrbikrXCIgXCIrKGkubGVmdFNtYWxsQXJjUmFkaXVzK24pK1wiIDAgMCAwIFwiK2kubGVmdElubmVyRXh0ZW50K1wiIFwiKyhpLnNvdXJjZVktbikrXCJMXCIraS5zb3VyY2VYK1wiIFwiKyhpLnNvdXJjZVktbikrXCJMXCIraS5zb3VyY2VYK1wiIFwiKyhpLnNvdXJjZVkrbikrXCJMXCIraS5sZWZ0SW5uZXJFeHRlbnQrXCIgXCIrKGkuc291cmNlWStuKStcIkFcIisoaS5sZWZ0TGFyZ2VBcmNSYWRpdXMtbikrXCIgXCIrKGkubGVmdFNtYWxsQXJjUmFkaXVzLW4pK1wiIDAgMCAxIFwiKyhpLmxlZnRGdWxsRXh0ZW50LW4pK1wiIFwiKyhpLnNvdXJjZVkraS5sZWZ0U21hbGxBcmNSYWRpdXMpK1wiTFwiKyhpLmxlZnRGdWxsRXh0ZW50LW4pK1wiIFwiK2kudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQrXCJBXCIrKGkubGVmdExhcmdlQXJjUmFkaXVzLW4pK1wiIFwiKyhpLmxlZnRMYXJnZUFyY1JhZGl1cy1uKStcIiAwIDAgMSBcIitpLmxlZnRJbm5lckV4dGVudCtcIiBcIisoaS52ZXJ0aWNhbEZ1bGxFeHRlbnQtbikrXCJMXCIraS5yaWdodElubmVyRXh0ZW50K1wiIFwiKyhpLnZlcnRpY2FsRnVsbEV4dGVudC1uKStcIkFcIisoaS5yaWdodExhcmdlQXJjUmFkaXVzLW4pK1wiIFwiKyhpLnJpZ2h0TGFyZ2VBcmNSYWRpdXMtbikrXCIgMCAwIDEgXCIrKGkucmlnaHRGdWxsRXh0ZW50K24pK1wiIFwiK2kudmVydGljYWxSaWdodElubmVyRXh0ZW50K1wiTFwiKyhpLnJpZ2h0RnVsbEV4dGVudCtuKStcIiBcIisoaS50YXJnZXRZK2kucmlnaHRTbWFsbEFyY1JhZGl1cykrXCJBXCIrKGkucmlnaHRMYXJnZUFyY1JhZGl1cy1uKStcIiBcIisoaS5yaWdodFNtYWxsQXJjUmFkaXVzLW4pK1wiIDAgMCAxIFwiK2kucmlnaHRJbm5lckV4dGVudCtcIiBcIisoaS50YXJnZXRZK24pK1wiTFwiK2kudGFyZ2V0WCtcIiBcIisoaS50YXJnZXRZK24pK1wiWlwiO3ZhciByLG4saSxhPWUubGluay5zb3VyY2UueDEsbz1lLmxpbmsudGFyZ2V0LngwLHM9dihhLG8pLGw9cyh0KSxjPXMoMS10KSx1PWUubGluay55MC1lLmxpbmsud2lkdGgvMixoPWUubGluay55MCtlLmxpbmsud2lkdGgvMixmPWUubGluay55MS1lLmxpbmsud2lkdGgvMixwPWUubGluay55MStlLmxpbmsud2lkdGgvMjtyZXR1cm5cIk1cIithK1wiLFwiK3UrXCJDXCIrbCtcIixcIit1K1wiIFwiK2MrXCIsXCIrZitcIiBcIitvK1wiLFwiK2YrXCJMXCIrbytcIixcIitwK1wiQ1wiK2MrXCIsXCIrcCtcIiBcIitsK1wiLFwiK2grXCIgXCIrYStcIixcIitoK1wiWlwifX1mdW5jdGlvbiB4KHQpe3QuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKFwiK3Qubm9kZS54MC50b0ZpeGVkKDMpK1wiLCBcIit0Lm5vZGUueTAudG9GaXhlZCgzKStcIilcIn0pfWZ1bmN0aW9uIGIodCl7dC5jYWxsKHgpfWZ1bmN0aW9uIF8odCxlKXt0LmNhbGwoYiksZS5hdHRyKFwiZFwiLHkoKSl9ZnVuY3Rpb24gdyh0KXt0LmF0dHIoXCJ3aWR0aFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGUueDEtdC5ub2RlLngwfSkuYXR0cihcImhlaWdodFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGVIZWlnaHR9KX1mdW5jdGlvbiBrKHQpe3JldHVybiB0Lmxpbmsud2lkdGg+MXx8dC5saW5rTGluZVdpZHRoPjB9ZnVuY3Rpb24gQSh0KXtyZXR1cm5cInRyYW5zbGF0ZShcIit0LnRyYW5zbGF0ZVgrXCIsXCIrdC50cmFuc2xhdGVZK1wiKVwiKyh0Lmhvcml6b250YWw/XCJtYXRyaXgoMSAwIDAgMSAwIDApXCI6XCJtYXRyaXgoMCAxIDEgMCAwIDApXCIpfWZ1bmN0aW9uIFQodCl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrKHQuaG9yaXpvbnRhbD8wOnQubGFiZWxZKStcIiBcIisodC5ob3Jpem9udGFsP3QubGFiZWxZOjApK1wiKVwifWZ1bmN0aW9uIE0odCl7cmV0dXJuIGkuc3ZnLmxpbmUoKShbW3QuaG9yaXpvbnRhbD90LmxlZnQ/LXQuc2l6ZUFjcm9zczp0LnZpc2libGVXaWR0aCtuLm5vZGVUZXh0T2Zmc2V0SG9yaXpvbnRhbDpuLm5vZGVUZXh0T2Zmc2V0SG9yaXpvbnRhbCwwXSxbdC5ob3Jpem9udGFsP3QubGVmdD8tbi5ub2RlVGV4dE9mZnNldEhvcml6b250YWw6dC5zaXplQWNyb3NzOnQudmlzaWJsZUhlaWdodC1uLm5vZGVUZXh0T2Zmc2V0SG9yaXpvbnRhbCwwXV0pfWZ1bmN0aW9uIFModCl7cmV0dXJuIHQuaG9yaXpvbnRhbD9cIm1hdHJpeCgxIDAgMCAxIDAgMClcIjpcIm1hdHJpeCgwIDEgMSAwIDAgMClcIn1mdW5jdGlvbiBFKHQpe3JldHVybiB0Lmhvcml6b250YWw/XCJzY2FsZSgxIDEpXCI6XCJzY2FsZSgtMSAxKVwifWZ1bmN0aW9uIEModCl7cmV0dXJuIHQuZGFya0JhY2tncm91bmQmJiF0Lmhvcml6b250YWw/XCJyZ2IoMjU1LDI1NSwyNTUpXCI6XCJyZ2IoMCwwLDApXCJ9ZnVuY3Rpb24gTCh0KXtyZXR1cm4gdC5ob3Jpem9udGFsJiZ0LmxlZnQ/XCIxMDAlXCI6XCIwJVwifWZ1bmN0aW9uIHoodCxlLHIpe3Qub24oXCIuYmFzaWNcIixudWxsKS5vbihcIm1vdXNlb3Zlci5iYXNpY1wiLGZ1bmN0aW9uKHQpe3QuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzc3x8dC5wYXJ0T2ZHcm91cHx8KHIuaG92ZXIodGhpcyx0LGUpLHQuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkPVt0aGlzLHRdKX0pLm9uKFwibW91c2Vtb3ZlLmJhc2ljXCIsZnVuY3Rpb24odCl7dC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzfHx0LnBhcnRPZkdyb3VwfHwoci5mb2xsb3codGhpcyx0KSx0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD1bdGhpcyx0XSl9KS5vbihcIm1vdXNlb3V0LmJhc2ljXCIsZnVuY3Rpb24odCl7dC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzfHx0LnBhcnRPZkdyb3VwfHwoci51bmhvdmVyKHRoaXMsdCxlKSx0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD0hMSl9KS5vbihcImNsaWNrLmJhc2ljXCIsZnVuY3Rpb24odCl7dC5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQmJihyLnVuaG92ZXIodGhpcyx0LGUpLHQuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkPSExKSx0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3N8fHQucGFydE9mR3JvdXB8fHIuc2VsZWN0KHRoaXMsdCxlKX0pfWZ1bmN0aW9uIE8odCxlLHIsYSl7dmFyIG89aS5iZWhhdmlvci5kcmFnKCkub3JpZ2luKGZ1bmN0aW9uKHQpe3JldHVybnt4OnQubm9kZS54MCt0LnZpc2libGVXaWR0aC8yLHk6dC5ub2RlLnkwK3QudmlzaWJsZUhlaWdodC8yfX0pLm9uKFwiZHJhZ3N0YXJ0XCIsZnVuY3Rpb24oaSl7aWYoXCJmaXhlZFwiIT09aS5hcnJhbmdlbWVudCYmKGguZW5zdXJlU2luZ2xlKGEuX2Z1bGxMYXlvdXQuX2luZm9sYXllcixcImdcIixcImRyYWdjb3ZlclwiLGZ1bmN0aW9uKHQpe2EuX2Z1bGxMYXlvdXQuX2RyYWdDb3Zlcj10fSksaC5yYWlzZVRvVG9wKHRoaXMpLGkuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzcz1pLm5vZGUsRChpLm5vZGUpLGkuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkJiYoci5ub2RlRXZlbnRzLnVuaG92ZXIuYXBwbHkoMCxpLmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZCksaS5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQ9ITEpLFwic25hcFwiPT09aS5hcnJhbmdlbWVudCkpe3ZhciBvPWkudHJhY2VJZCtcInxcIitpLmtleTtpLmZvcmNlTGF5b3V0c1tvXT9pLmZvcmNlTGF5b3V0c1tvXS5hbHBoYSgxKTpmdW5jdGlvbih0LGUscixpKXshZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS55PSh0W2VdLnkwK3RbZV0ueTEpLzIsdFtlXS54PSh0W2VdLngwK3RbZV0ueDEpLzJ9KHIuZ3JhcGgubm9kZXMpO3ZhciBhPXIuZ3JhcGgubm9kZXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm9yaWdpbmFsWD09PXIubm9kZS5vcmlnaW5hbFh9KS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQucGFydE9mR3JvdXB9KTtyLmZvcmNlTGF5b3V0c1tlXT11LmZvcmNlU2ltdWxhdGlvbihhKS5hbHBoYURlY2F5KDApLmZvcmNlKFwiY29sbGlkZVwiLHUuZm9yY2VDb2xsaWRlKCkucmFkaXVzKGZ1bmN0aW9uKHQpe3JldHVybiB0LmR5LzIrci5ub2RlUGFkLzJ9KS5zdHJlbmd0aCgxKS5pdGVyYXRpb25zKG4uZm9yY2VJdGVyYXRpb25zKSkuZm9yY2UoXCJjb25zdHJhaW5cIixmdW5jdGlvbih0LGUscixpKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBvPXJbYV07bz09PWkuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzcz8oby54PW8ubGFzdERyYWdnZWRYLG8ueT1vLmxhc3REcmFnZ2VkWSk6KG8udng9KG8ub3JpZ2luYWxYLW8ueCkvbi5mb3JjZVRpY2tzUGVyRnJhbWUsby55PU1hdGgubWluKGkuc2l6ZS1vLmR5LzIsTWF0aC5tYXgoby5keS8yLG8ueSkpKSx0PU1hdGgubWF4KHQsTWF0aC5hYnMoby52eCksTWF0aC5hYnMoby52eSkpfSFpLmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3MmJnQ8LjEmJmkuZm9yY2VMYXlvdXRzW2VdLmFscGhhKCk+MCYmaS5mb3JjZUxheW91dHNbZV0uYWxwaGEoMCl9fSgwLGUsYSxyKSkuc3RvcCgpfSgwLG8saSksZnVuY3Rpb24odCxlLHIsaSxhKXt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIG8oKXt2YXIgcztmb3Iocz0wO3M8bi5mb3JjZVRpY2tzUGVyRnJhbWU7cysrKXIuZm9yY2VMYXlvdXRzW2ldLnRpY2soKTt2YXIgbD1yLmdyYXBoLm5vZGVzO2lmKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0ueTA9dFtlXS55LXRbZV0uZHkvMix0W2VdLnkxPXRbZV0ueTArdFtlXS5keSx0W2VdLngwPXRbZV0ueC10W2VdLmR4LzIsdFtlXS54MT10W2VdLngwK3RbZV0uZHh9KGwpLHIuc2Fua2V5LnVwZGF0ZShyLmdyYXBoKSxfKHQuZmlsdGVyKFAocikpLGUpLHIuZm9yY2VMYXlvdXRzW2ldLmFscGhhKCk+MCl3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG8pO2Vsc2V7dmFyIGM9ci5ub2RlLm9yaWdpbmFsWDtyLm5vZGUueDA9Yy1yLnZpc2libGVXaWR0aC8yLHIubm9kZS54MT1jK3IudmlzaWJsZVdpZHRoLzIsSShyLGEpfX0pfSh0LGUsaSxvLGEpfX0pLm9uKFwiZHJhZ1wiLGZ1bmN0aW9uKHIpe2lmKFwiZml4ZWRcIiE9PXIuYXJyYW5nZW1lbnQpe3ZhciBuPWkuZXZlbnQueCxhPWkuZXZlbnQueTtcInNuYXBcIj09PXIuYXJyYW5nZW1lbnQ/KHIubm9kZS54MD1uLXIudmlzaWJsZVdpZHRoLzIsci5ub2RlLngxPW4rci52aXNpYmxlV2lkdGgvMixyLm5vZGUueTA9YS1yLnZpc2libGVIZWlnaHQvMixyLm5vZGUueTE9YStyLnZpc2libGVIZWlnaHQvMik6KFwiZnJlZWZvcm1cIj09PXIuYXJyYW5nZW1lbnQmJihyLm5vZGUueDA9bi1yLnZpc2libGVXaWR0aC8yLHIubm9kZS54MT1uK3IudmlzaWJsZVdpZHRoLzIpLGE9TWF0aC5tYXgoMCxNYXRoLm1pbihyLnNpemUtci52aXNpYmxlSGVpZ2h0LzIsYSkpLHIubm9kZS55MD1hLXIudmlzaWJsZUhlaWdodC8yLHIubm9kZS55MT1hK3IudmlzaWJsZUhlaWdodC8yKSxEKHIubm9kZSksXCJzbmFwXCIhPT1yLmFycmFuZ2VtZW50JiYoci5zYW5rZXkudXBkYXRlKHIuZ3JhcGgpLF8odC5maWx0ZXIoUChyKSksZSkpfX0pLm9uKFwiZHJhZ2VuZFwiLGZ1bmN0aW9uKHQpe2lmKFwiZml4ZWRcIiE9PXQuYXJyYW5nZW1lbnQpe3QuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzcz0hMTtmb3IodmFyIGU9MDtlPHQubm9kZS5jaGlsZHJlbk5vZGVzLmxlbmd0aDtlKyspdC5ub2RlLmNoaWxkcmVuTm9kZXNbZV0ueD10Lm5vZGUueCx0Lm5vZGUuY2hpbGRyZW5Ob2Rlc1tlXS55PXQubm9kZS55O1wic25hcFwiIT09dC5hcnJhbmdlbWVudCYmSSh0LGEpfX0pO3Qub24oXCIuZHJhZ1wiLG51bGwpLmNhbGwobyl9ZnVuY3Rpb24gSSh0LGUpe2Zvcih2YXIgcj1bXSxuPVtdLGk9MDtpPHQuZ3JhcGgubm9kZXMubGVuZ3RoO2krKyl7dmFyIGE9KHQuZ3JhcGgubm9kZXNbaV0ueDArdC5ncmFwaC5ub2Rlc1tpXS54MSkvMixvPSh0LmdyYXBoLm5vZGVzW2ldLnkwK3QuZ3JhcGgubm9kZXNbaV0ueTEpLzI7ci5wdXNoKGEvdC5maWd1cmUud2lkdGgpLG4ucHVzaChvL3QuZmlndXJlLmhlaWdodCl9bS5jYWxsKFwiX2d1aVJlc3R5bGVcIixlLHtcIm5vZGUueFwiOltyXSxcIm5vZGUueVwiOltuXX0sdC50cmFjZS5pbmRleCkudGhlbihmdW5jdGlvbigpe2UuX2Z1bGxMYXlvdXQuX2RyYWdDb3ZlciYmZS5fZnVsbExheW91dC5fZHJhZ0NvdmVyLnJlbW92ZSgpfSl9ZnVuY3Rpb24gRCh0KXt0Lmxhc3REcmFnZ2VkWD10LngwK3QuZHgvMix0Lmxhc3REcmFnZ2VkWT10LnkwK3QuZHkvMn1mdW5jdGlvbiBQKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlLm9yaWdpbmFsWD09PXQubm9kZS5vcmlnaW5hbFh9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1LGYpe3ZhciB2PSExO2guZW5zdXJlU2luZ2xlKHQuX2Z1bGxMYXlvdXQuX2luZm9sYXllcixcImdcIixcImZpcnN0LXJlbmRlclwiLGZ1bmN0aW9uKCl7dj0hMH0pO3ZhciBtPXQuX2Z1bGxMYXlvdXQuX2RyYWdDb3ZlcixiPXIuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBnKHQpLnRyYWNlLnZpc2libGV9KS5tYXAoZnVuY3Rpb24odCxlLHIpe3ZhciBpLG89ZyhlKSxzPW8udHJhY2UsdT1zLmRvbWFpbixmPVwiaFwiPT09cy5vcmllbnRhdGlvbixwPXMubm9kZS5wYWQsZD1zLm5vZGUudGhpY2tuZXNzLHY9dC53aWR0aCoodS54WzFdLXUueFswXSksbT10LmhlaWdodCoodS55WzFdLXUueVswXSkseT1vLl9ub2Rlcyx4PW8uX2xpbmtzLGI9by5jaXJjdWxhcjsoaT1iP2Muc2Fua2V5Q2lyY3VsYXIoKS5jaXJjdWxhckxpbmtHYXAoMCk6bC5zYW5rZXkoKSkuaXRlcmF0aW9ucyhuLnNhbmtleUl0ZXJhdGlvbnMpLnNpemUoZj9bdixtXTpbbSx2XSkubm9kZVdpZHRoKGQpLm5vZGVQYWRkaW5nKHApLm5vZGVJZChmdW5jdGlvbih0KXtyZXR1cm4gdC5wb2ludE51bWJlcn0pLm5vZGVzKHkpLmxpbmtzKHgpO3ZhciBfLHcsayxBPWkoKTtmb3IodmFyIFQgaW4gaS5ub2RlUGFkZGluZygpPHAmJmgud2FybihcIm5vZGUucGFkIHdhcyByZWR1Y2VkIHRvIFwiLGkubm9kZVBhZGRpbmcoKSxcIiB0byBmaXQgd2l0aGluIHRoZSBmaWd1cmUuXCIpLG8uX2dyb3VwTG9va3VwKXt2YXIgTSxTPXBhcnNlSW50KG8uX2dyb3VwTG9va3VwW1RdKTtmb3IoXz0wO188QS5ub2Rlcy5sZW5ndGg7XysrKWlmKEEubm9kZXNbX10ucG9pbnROdW1iZXI9PT1TKXtNPUEubm9kZXNbX107YnJlYWt9aWYoTSl7dmFyIEU9e3BvaW50TnVtYmVyOnBhcnNlSW50KFQpLHgwOk0ueDAseDE6TS54MSx5MDpNLnkwLHkxOk0ueTEscGFydE9mR3JvdXA6ITAsc291cmNlTGlua3M6W10sdGFyZ2V0TGlua3M6W119O0Eubm9kZXMudW5zaGlmdChFKSxNLmNoaWxkcmVuTm9kZXMudW5zaGlmdChFKX19aWYoZnVuY3Rpb24oKXtmb3IoXz0wO188QS5ub2Rlcy5sZW5ndGg7XysrKXt2YXIgdCxlLHI9QS5ub2Rlc1tfXSxuPXt9O2Zvcih3PTA7dzxyLnRhcmdldExpbmtzLmxlbmd0aDt3KyspdD0oZT1yLnRhcmdldExpbmtzW3ddKS5zb3VyY2UucG9pbnROdW1iZXIrXCI6XCIrZS50YXJnZXQucG9pbnROdW1iZXIsbi5oYXNPd25Qcm9wZXJ0eSh0KXx8KG5bdF09W10pLG5bdF0ucHVzaChlKTt2YXIgaT1PYmplY3Qua2V5cyhuKTtmb3Iodz0wO3c8aS5sZW5ndGg7dysrKXt2YXIgbz1uW3Q9aVt3XV0scz0wLGw9e307Zm9yKGs9MDtrPG8ubGVuZ3RoO2srKylsWyhlPW9ba10pLmxhYmVsXXx8KGxbZS5sYWJlbF09MCksbFtlLmxhYmVsXSs9ZS52YWx1ZSxzKz1lLnZhbHVlO2ZvcihrPTA7azxvLmxlbmd0aDtrKyspKGU9b1trXSkuZmxvdz17dmFsdWU6cyxsYWJlbENvbmNlbnRyYXRpb246bFtlLmxhYmVsXS9zLGNvbmNlbnRyYXRpb246ZS52YWx1ZS9zLGxpbmtzOm99LGUuY29uY2VudHJhdGlvbnNjYWxlJiYoZS5jb2xvcj1hKGUuY29uY2VudHJhdGlvbnNjYWxlKGUuZmxvdy5sYWJlbENvbmNlbnRyYXRpb24pKSl9dmFyIGM9MDtmb3Iodz0wO3c8ci5zb3VyY2VMaW5rcy5sZW5ndGg7dysrKWMrPXIuc291cmNlTGlua3Nbd10udmFsdWU7Zm9yKHc9MDt3PHIuc291cmNlTGlua3MubGVuZ3RoO3crKykoZT1yLnNvdXJjZUxpbmtzW3ddKS5jb25jZW50cmF0aW9uT3V0PWUudmFsdWUvYzt2YXIgdT0wO2Zvcih3PTA7dzxyLnRhcmdldExpbmtzLmxlbmd0aDt3KyspdSs9ci50YXJnZXRMaW5rc1t3XS52YWx1ZTtmb3Iodz0wO3c8ci50YXJnZXRMaW5rcy5sZW5ndGg7dysrKShlPXIudGFyZ2V0TGlua3Nbd10pLmNvbmNlbnJhdGlvbkluPWUudmFsdWUvdX19KCkscy5ub2RlLngubGVuZ3RoJiZzLm5vZGUueS5sZW5ndGgpe2ZvcihfPTA7XzxNYXRoLm1pbihzLm5vZGUueC5sZW5ndGgscy5ub2RlLnkubGVuZ3RoLEEubm9kZXMubGVuZ3RoKTtfKyspaWYocy5ub2RlLnhbX10mJnMubm9kZS55W19dKXt2YXIgQz1bcy5ub2RlLnhbX10qdixzLm5vZGUueVtfXSptXTtBLm5vZGVzW19dLngwPUNbMF0tZC8yLEEubm9kZXNbX10ueDE9Q1swXStkLzI7dmFyIEw9QS5ub2Rlc1tfXS55MS1BLm5vZGVzW19dLnkwO0Eubm9kZXNbX10ueTA9Q1sxXS1MLzIsQS5ub2Rlc1tfXS55MT1DWzFdK0wvMn1cInNuYXBcIj09PXMuYXJyYW5nZW1lbnQmJmZ1bmN0aW9uKHQpe3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZSxyLG4saT0wLGE9dC5sZW5ndGg7Zm9yKHQuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LnkwLWUueTB9KSxuPTA7bjxhOysrbikoZT10W25dKS55MD49aXx8KHI9aS1lLnkwKT4xZS02JiYoZS55MCs9cixlLnkxKz1yKSxpPWUueTErcH0pfShmdW5jdGlvbih0KXt2YXIgZSxyLG49dC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm57eDA6dC54MCxpbmRleDplfX0pLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54MC1lLngwfSksaT1bXSxhPS0xLG89LTEvMDtmb3IoXz0wO188bi5sZW5ndGg7XysrKXt2YXIgcz10W25bX10uaW5kZXhdO3MueDA+bytkJiYoYSs9MSxlPXMueDApLG89cy54MCxpW2FdfHwoaVthXT1bXSksaVthXS5wdXNoKHMpLHI9ZS1zLngwLHMueDArPXIscy54MSs9cn1yZXR1cm4gaX0oeT1BLm5vZGVzKSksaS51cGRhdGUoQSl9cmV0dXJue2NpcmN1bGFyOmIsa2V5OnIsdHJhY2U6cyxndWlkOmgucmFuZHN0cigpLGhvcml6b250YWw6Zix3aWR0aDp2LGhlaWdodDptLG5vZGVQYWQ6cy5ub2RlLnBhZCxub2RlTGluZUNvbG9yOnMubm9kZS5saW5lLmNvbG9yLG5vZGVMaW5lV2lkdGg6cy5ub2RlLmxpbmUud2lkdGgsbGlua0xpbmVDb2xvcjpzLmxpbmsubGluZS5jb2xvcixsaW5rTGluZVdpZHRoOnMubGluay5saW5lLndpZHRoLHZhbHVlRm9ybWF0OnMudmFsdWVmb3JtYXQsdmFsdWVTdWZmaXg6cy52YWx1ZXN1ZmZpeCx0ZXh0Rm9udDpzLnRleHRmb250LHRyYW5zbGF0ZVg6dS54WzBdKnQud2lkdGgrdC5tYXJnaW4ubCx0cmFuc2xhdGVZOnQuaGVpZ2h0LXUueVsxXSp0LmhlaWdodCt0Lm1hcmdpbi50LGRyYWdQYXJhbGxlbDpmP206dixkcmFnUGVycGVuZGljdWxhcjpmP3Y6bSxhcnJhbmdlbWVudDpzLmFycmFuZ2VtZW50LHNhbmtleTppLGdyYXBoOkEsZm9yY2VMYXlvdXRzOnt9LGludGVyYWN0aW9uU3RhdGU6e2RyYWdJblByb2dyZXNzOiExLGhvdmVyZWQ6ITF9fX0uYmluZChudWxsLHUpKSxfPWUuc2VsZWN0QWxsKFwiLlwiK24uY24uc2Fua2V5KS5kYXRhKGIscCk7Xy5leGl0KCkucmVtb3ZlKCksXy5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChuLmNuLnNhbmtleSwhMCkuc3R5bGUoXCJib3gtc2l6aW5nXCIsXCJjb250ZW50LWJveFwiKS5zdHlsZShcInBvc2l0aW9uXCIsXCJhYnNvbHV0ZVwiKS5zdHlsZShcImxlZnRcIiwwKS5zdHlsZShcInNoYXBlLXJlbmRlcmluZ1wiLFwiZ2VvbWV0cmljUHJlY2lzaW9uXCIpLnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixcImF1dG9cIikuYXR0cihcInRyYW5zZm9ybVwiLEEpLF8uZWFjaChmdW5jdGlvbihlLHIpe3QuX2Z1bGxEYXRhW3JdLl9zYW5rZXk9ZTt2YXIgbj1cImJnc2Fua2V5LVwiK2UudHJhY2UudWlkK1wiLVwiK3I7aC5lbnN1cmVTaW5nbGUodC5fZnVsbExheW91dC5fZHJhZ2dlcnMsXCJyZWN0XCIsbiksdC5fZnVsbERhdGFbcl0uX2JnUmVjdD1pLnNlbGVjdChcIi5cIituKSx0Ll9mdWxsRGF0YVtyXS5fYmdSZWN0LnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixcImFsbFwiKS5hdHRyKFwid2lkdGhcIixlLndpZHRoKS5hdHRyKFwiaGVpZ2h0XCIsZS5oZWlnaHQpLmF0dHIoXCJ4XCIsZS50cmFuc2xhdGVYKS5hdHRyKFwieVwiLGUudHJhbnNsYXRlWSkuY2xhc3NlZChcImJnc2Fua2V5XCIsITApLnN0eWxlKHtmaWxsOlwidHJhbnNwYXJlbnRcIixcInN0cm9rZS13aWR0aFwiOjB9KX0pLF8udHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5hdHRyKFwidHJhbnNmb3JtXCIsQSk7dmFyIEk9Xy5zZWxlY3RBbGwoXCIuXCIrbi5jbi5zYW5rZXlMaW5rcykuZGF0YShkLHApO0kuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQobi5jbi5zYW5rZXlMaW5rcywhMCkuc3R5bGUoXCJmaWxsXCIsXCJub25lXCIpO3ZhciBEPUkuc2VsZWN0QWxsKFwiLlwiK24uY24uc2Fua2V5TGluaykuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5ncmFwaC5saW5rcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9KS5tYXAoZnVuY3Rpb24odCxlLHIpe3ZhciBuPWEoZS5jb2xvciksaT1lLnNvdXJjZS5sYWJlbCtcInxcIitlLnRhcmdldC5sYWJlbCtcIl9fXCIrcjtyZXR1cm4gZS50cmFjZT10LnRyYWNlLGUuY3VydmVOdW1iZXI9dC50cmFjZS5pbmRleCx7Y2lyY3VsYXI6dC5jaXJjdWxhcixrZXk6aSx0cmFjZUlkOnQua2V5LHBvaW50TnVtYmVyOmUucG9pbnROdW1iZXIsbGluazplLHRpbnlDb2xvckh1ZTpvLnRpbnlSR0IobiksdGlueUNvbG9yQWxwaGE6bi5nZXRBbHBoYSgpLGxpbmtQYXRoOnksbGlua0xpbmVDb2xvcjp0LmxpbmtMaW5lQ29sb3IsbGlua0xpbmVXaWR0aDp0LmxpbmtMaW5lV2lkdGgsdmFsdWVGb3JtYXQ6dC52YWx1ZUZvcm1hdCx2YWx1ZVN1ZmZpeDp0LnZhbHVlU3VmZml4LHNhbmtleTp0LnNhbmtleSxwYXJlbnQ6dCxpbnRlcmFjdGlvblN0YXRlOnQuaW50ZXJhY3Rpb25TdGF0ZSxmbG93OmUuZmxvd319LmJpbmQobnVsbCx0KSl9LHApO0QuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQobi5jbi5zYW5rZXlMaW5rLCEwKS5jYWxsKHosXyxmLmxpbmtFdmVudHMpLEQuc3R5bGUoXCJzdHJva2VcIixmdW5jdGlvbih0KXtyZXR1cm4gayh0KT9vLnRpbnlSR0IoYSh0LmxpbmtMaW5lQ29sb3IpKTp0LnRpbnlDb2xvckh1ZX0pLnN0eWxlKFwic3Ryb2tlLW9wYWNpdHlcIixmdW5jdGlvbih0KXtyZXR1cm4gayh0KT9vLm9wYWNpdHkodC5saW5rTGluZUNvbG9yKTp0LnRpbnlDb2xvckFscGhhfSkuc3R5bGUoXCJmaWxsXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9ySHVlfSkuc3R5bGUoXCJmaWxsLW9wYWNpdHlcIixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JBbHBoYX0pLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsZnVuY3Rpb24odCl7cmV0dXJuIGsodCk/dC5saW5rTGluZVdpZHRoOjF9KS5hdHRyKFwiZFwiLHkoKSksRC5zdHlsZShcIm9wYWNpdHlcIixmdW5jdGlvbigpe3JldHVybiB0Ll9jb250ZXh0LnN0YXRpY1Bsb3R8fHZ8fG0/MTowfSkudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5zdHlsZShcIm9wYWNpdHlcIiwxKSxELmV4aXQoKS50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLnN0eWxlKFwib3BhY2l0eVwiLDApLnJlbW92ZSgpO3ZhciBQPV8uc2VsZWN0QWxsKFwiLlwiK24uY24uc2Fua2V5Tm9kZVNldCkuZGF0YShkLHApO1AuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQobi5jbi5zYW5rZXlOb2RlU2V0LCEwKSxQLnN0eWxlKFwiY3Vyc29yXCIsZnVuY3Rpb24odCl7c3dpdGNoKHQuYXJyYW5nZW1lbnQpe2Nhc2VcImZpeGVkXCI6cmV0dXJuXCJkZWZhdWx0XCI7Y2FzZVwicGVycGVuZGljdWxhclwiOnJldHVyblwibnMtcmVzaXplXCI7ZGVmYXVsdDpyZXR1cm5cIm1vdmVcIn19KTt2YXIgUj1QLnNlbGVjdEFsbChcIi5cIituLmNuLnNhbmtleU5vZGUpLmRhdGEoZnVuY3Rpb24odCl7dmFyIGU9dC5ncmFwaC5ub2RlcztyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGUscj1bXTtmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0ub3JpZ2luYWxYPSh0W2VdLngwK3RbZV0ueDEpLzIsdFtlXS5vcmlnaW5hbFk9KHRbZV0ueTArdFtlXS55MSkvMiwtMT09PXIuaW5kZXhPZih0W2VdLm9yaWdpbmFsWCkmJnIucHVzaCh0W2VdLm9yaWdpbmFsWCk7Zm9yKHIuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSxlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5vcmlnaW5hbExheWVySW5kZXg9ci5pbmRleE9mKHRbZV0ub3JpZ2luYWxYKSx0W2VdLm9yaWdpbmFsTGF5ZXI9dFtlXS5vcmlnaW5hbExheWVySW5kZXgvKHIubGVuZ3RoLTEpfShlKSxlLm1hcChmdW5jdGlvbih0LGUpe3ZhciByPWEoZS5jb2xvciksaT1uLm5vZGVQYWRBY3Jvc3Mscz10Lm5vZGVQYWQvMjtlLmR4PWUueDEtZS54MCxlLmR5PWUueTEtZS55MDt2YXIgbD1lLmR4LGM9TWF0aC5tYXgoLjUsZS5keSksdT1cIm5vZGVfXCIrZS5wb2ludE51bWJlcjtyZXR1cm4gZS5ncm91cCYmKHU9aC5yYW5kc3RyKCkpLGUudHJhY2U9dC50cmFjZSxlLmN1cnZlTnVtYmVyPXQudHJhY2UuaW5kZXgse2luZGV4OmUucG9pbnROdW1iZXIsa2V5OnUscGFydE9mR3JvdXA6ZS5wYXJ0T2ZHcm91cHx8ITEsZ3JvdXA6ZS5ncm91cCx0cmFjZUlkOnQua2V5LHRyYWNlOnQudHJhY2Usbm9kZTplLG5vZGVQYWQ6dC5ub2RlUGFkLG5vZGVMaW5lQ29sb3I6dC5ub2RlTGluZUNvbG9yLG5vZGVMaW5lV2lkdGg6dC5ub2RlTGluZVdpZHRoLHRleHRGb250OnQudGV4dEZvbnQsc2l6ZTp0Lmhvcml6b250YWw/dC5oZWlnaHQ6dC53aWR0aCx2aXNpYmxlV2lkdGg6TWF0aC5jZWlsKGwpLHZpc2libGVIZWlnaHQ6Yyx6b25lWDotaSx6b25lWTotcyx6b25lV2lkdGg6bCsyKmksem9uZUhlaWdodDpjKzIqcyxsYWJlbFk6dC5ob3Jpem9udGFsP2UuZHkvMisxOmUuZHgvMisxLGxlZnQ6MT09PWUub3JpZ2luYWxMYXllcixzaXplQWNyb3NzOnQud2lkdGgsZm9yY2VMYXlvdXRzOnQuZm9yY2VMYXlvdXRzLGhvcml6b250YWw6dC5ob3Jpem9udGFsLGRhcmtCYWNrZ3JvdW5kOnIuZ2V0QnJpZ2h0bmVzcygpPD0xMjgsdGlueUNvbG9ySHVlOm8udGlueVJHQihyKSx0aW55Q29sb3JBbHBoYTpyLmdldEFscGhhKCksdmFsdWVGb3JtYXQ6dC52YWx1ZUZvcm1hdCx2YWx1ZVN1ZmZpeDp0LnZhbHVlU3VmZml4LHNhbmtleTp0LnNhbmtleSxncmFwaDp0LmdyYXBoLGFycmFuZ2VtZW50OnQuYXJyYW5nZW1lbnQsdW5pcXVlTm9kZUxhYmVsUGF0aElkOlt0Lmd1aWQsdC5rZXksdV0uam9pbihcIl9cIiksaW50ZXJhY3Rpb25TdGF0ZTp0LmludGVyYWN0aW9uU3RhdGUsZmlndXJlOnR9fS5iaW5kKG51bGwsdCkpfSxwKTtSLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKG4uY24uc2Fua2V5Tm9kZSwhMCkuY2FsbCh4KS5zdHlsZShcIm9wYWNpdHlcIixmdW5jdGlvbihlKXtyZXR1cm4hdC5fY29udGV4dC5zdGF0aWNQbG90JiYhdnx8ZS5wYXJ0T2ZHcm91cD8wOjF9KSxSLmNhbGwoeixfLGYubm9kZUV2ZW50cykuY2FsbChPLEQsZix0KSxSLnRyYW5zaXRpb24oKS5lYXNlKG4uZWFzZSkuZHVyYXRpb24obi5kdXJhdGlvbikuY2FsbCh4KS5zdHlsZShcIm9wYWNpdHlcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5wYXJ0T2ZHcm91cD8wOjF9KSxSLmV4aXQoKS50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLnN0eWxlKFwib3BhY2l0eVwiLDApLnJlbW92ZSgpO3ZhciBGPVIuc2VsZWN0QWxsKFwiLlwiK24uY24ubm9kZVJlY3QpLmRhdGEoZCk7Ri5lbnRlcigpLmFwcGVuZChcInJlY3RcIikuY2xhc3NlZChuLmNuLm5vZGVSZWN0LCEwKS5jYWxsKHcpLEYuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlTGluZVdpZHRofSkuc3R5bGUoXCJzdHJva2VcIixmdW5jdGlvbih0KXtyZXR1cm4gby50aW55UkdCKGEodC5ub2RlTGluZUNvbG9yKSl9KS5zdHlsZShcInN0cm9rZS1vcGFjaXR5XCIsZnVuY3Rpb24odCl7cmV0dXJuIG8ub3BhY2l0eSh0Lm5vZGVMaW5lQ29sb3IpfSkuc3R5bGUoXCJmaWxsXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9ySHVlfSkuc3R5bGUoXCJmaWxsLW9wYWNpdHlcIixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JBbHBoYX0pLEYudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5jYWxsKHcpO3ZhciBCPVIuc2VsZWN0QWxsKFwiLlwiK24uY24ubm9kZUNhcHR1cmUpLmRhdGEoZCk7Qi5lbnRlcigpLmFwcGVuZChcInJlY3RcIikuY2xhc3NlZChuLmNuLm5vZGVDYXB0dXJlLCEwKS5zdHlsZShcImZpbGwtb3BhY2l0eVwiLDApLEIuYXR0cihcInhcIixmdW5jdGlvbih0KXtyZXR1cm4gdC56b25lWH0pLmF0dHIoXCJ5XCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuem9uZVl9KS5hdHRyKFwid2lkdGhcIixmdW5jdGlvbih0KXtyZXR1cm4gdC56b25lV2lkdGh9KS5hdHRyKFwiaGVpZ2h0XCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuem9uZUhlaWdodH0pO3ZhciBOPVIuc2VsZWN0QWxsKFwiLlwiK24uY24ubm9kZUNlbnRlcmVkKS5kYXRhKGQpO04uZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQobi5jbi5ub2RlQ2VudGVyZWQsITApLmF0dHIoXCJ0cmFuc2Zvcm1cIixUKSxOLnRyYW5zaXRpb24oKS5lYXNlKG4uZWFzZSkuZHVyYXRpb24obi5kdXJhdGlvbikuYXR0cihcInRyYW5zZm9ybVwiLFQpO3ZhciBqPU4uc2VsZWN0QWxsKFwiLlwiK24uY24ubm9kZUxhYmVsR3VpZGUpLmRhdGEoZCk7ai5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChuLmNuLm5vZGVMYWJlbEd1aWRlLCEwKS5hdHRyKFwiaWRcIixmdW5jdGlvbih0KXtyZXR1cm4gdC51bmlxdWVOb2RlTGFiZWxQYXRoSWR9KS5hdHRyKFwiZFwiLE0pLmF0dHIoXCJ0cmFuc2Zvcm1cIixTKSxqLnRyYW5zaXRpb24oKS5lYXNlKG4uZWFzZSkuZHVyYXRpb24obi5kdXJhdGlvbikuYXR0cihcImRcIixNKS5hdHRyKFwidHJhbnNmb3JtXCIsUyk7dmFyIFY9Ti5zZWxlY3RBbGwoXCIuXCIrbi5jbi5ub2RlTGFiZWwpLmRhdGEoZCk7Vi5lbnRlcigpLmFwcGVuZChcInRleHRcIikuY2xhc3NlZChuLmNuLm5vZGVMYWJlbCwhMCkuYXR0cihcInRyYW5zZm9ybVwiLEUpLnN0eWxlKFwidXNlci1zZWxlY3RcIixcIm5vbmVcIikuc3R5bGUoXCJjdXJzb3JcIixcImRlZmF1bHRcIikuc3R5bGUoXCJmaWxsXCIsXCJibGFja1wiKSxWLnN0eWxlKFwidGV4dC1zaGFkb3dcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5ob3Jpem9udGFsP1wiLTFweCAxcHggMXB4ICNmZmYsIDFweCAxcHggMXB4ICNmZmYsIDFweCAtMXB4IDFweCAjZmZmLCAtMXB4IC0xcHggMXB4ICNmZmZcIjpcIm5vbmVcIn0pLmVhY2goZnVuY3Rpb24odCl7cy5mb250KFYsdC50ZXh0Rm9udCl9KSxWLnRyYW5zaXRpb24oKS5lYXNlKG4uZWFzZSkuZHVyYXRpb24obi5kdXJhdGlvbikuYXR0cihcInRyYW5zZm9ybVwiLEUpO3ZhciBVPVYuc2VsZWN0QWxsKFwiLlwiK24uY24ubm9kZUxhYmVsVGV4dFBhdGgpLmRhdGEoZCk7VS5lbnRlcigpLmFwcGVuZChcInRleHRQYXRoXCIpLmNsYXNzZWQobi5jbi5ub2RlTGFiZWxUZXh0UGF0aCwhMCkuYXR0cihcImFsaWdubWVudC1iYXNlbGluZVwiLFwibWlkZGxlXCIpLmF0dHIoXCJ4bGluazpocmVmXCIsZnVuY3Rpb24odCl7cmV0dXJuXCIjXCIrdC51bmlxdWVOb2RlTGFiZWxQYXRoSWR9KS5hdHRyKFwic3RhcnRPZmZzZXRcIixMKS5zdHlsZShcImZpbGxcIixDKSxVLnRleHQoZnVuY3Rpb24odCl7cmV0dXJuIHQuaG9yaXpvbnRhbHx8dC5ub2RlLmR5PjU/dC5ub2RlLmxhYmVsOlwiXCJ9KS5hdHRyKFwidGV4dC1hbmNob3JcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5ob3Jpem9udGFsJiZ0LmxlZnQ/XCJlbmRcIjpcInN0YXJ0XCJ9KSxVLnRyYW5zaXRpb24oKS5lYXNlKG4uZWFzZSkuZHVyYXRpb24obi5kdXJhdGlvbikuYXR0cihcInN0YXJ0T2Zmc2V0XCIsTCkuc3R5bGUoXCJmaWxsXCIsQyl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2d1cFwiOjY5OSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9jb25zdGFudHNcIjoxMDQ1LFwiQHBsb3RseS9kMy1zYW5rZXlcIjo0OSxkMzoxNTUsXCJkMy1mb3JjZVwiOjE0NyxcImQzLWludGVycG9sYXRlXCI6MTQ5LFwiZDMtc2Fua2V5LWNpcmN1bGFyXCI6MTUyLHRpbnljb2xvcjI6NTIyfV0sMTA1MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPXQuY2RbMF0udHJhY2UsaT1uLl9zYW5rZXkuZ3JhcGgubm9kZXMsYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdO2lmKCFvLnBhcnRPZkdyb3VwKXt2YXIgcz1bKG8ueDArby54MSkvMiwoby55MCtvLnkxKS8yXTtcInZcIj09PW4ub3JpZW50YXRpb24mJnMucmV2ZXJzZSgpLGUmJmUuY29udGFpbnMocywhMSxhLHQpJiZyLnB1c2goe3BvaW50TnVtYmVyOm8ucG9pbnROdW1iZXJ9KX19cmV0dXJuIHJ9fSx7fV0sMTA1MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspdFtyXS5pPXI7bi5tZXJnZUFycmF5KGUudGV4dCx0LFwidHhcIiksbi5tZXJnZUFycmF5KGUuaG92ZXJ0ZXh0LHQsXCJodHhcIiksbi5tZXJnZUFycmF5KGUuY3VzdG9tZGF0YSx0LFwiZGF0YVwiKSxuLm1lcmdlQXJyYXkoZS50ZXh0cG9zaXRpb24sdCxcInRwXCIpLGUudGV4dGZvbnQmJihuLm1lcmdlQXJyYXkoZS50ZXh0Zm9udC5zaXplLHQsXCJ0c1wiKSxuLm1lcmdlQXJyYXkoZS50ZXh0Zm9udC5jb2xvcix0LFwidGNcIiksbi5tZXJnZUFycmF5KGUudGV4dGZvbnQuZmFtaWx5LHQsXCJ0ZlwiKSk7dmFyIGk9ZS5tYXJrZXI7aWYoaSl7bi5tZXJnZUFycmF5KGkuc2l6ZSx0LFwibXNcIiksbi5tZXJnZUFycmF5KGkub3BhY2l0eSx0LFwibW9cIiksbi5tZXJnZUFycmF5KGkuc3ltYm9sLHQsXCJteFwiKSxuLm1lcmdlQXJyYXkoaS5jb2xvcix0LFwibWNcIik7dmFyIGE9aS5saW5lO2kubGluZSYmKG4ubWVyZ2VBcnJheShhLmNvbG9yLHQsXCJtbGNcIiksbi5tZXJnZUFycmF5KGEud2lkdGgsdCxcIm1sd1wiKSk7dmFyIG89aS5ncmFkaWVudDtvJiZcIm5vbmVcIiE9PW8udHlwZSYmKG4ubWVyZ2VBcnJheShvLnR5cGUsdCxcIm1ndFwiKSxuLm1lcmdlQXJyYXkoby5jb2xvcix0LFwibWdjXCIpKX19fSx7XCIuLi8uLi9saWJcIjo3MDF9XSwxMDUyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXNcIikuZGFzaCxsPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksYz10KFwiLi9jb25zdGFudHNcIiksdT10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17eDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIixhbmltOiEwfSx4MDp7dmFsVHlwZTpcImFueVwiLGRmbHQ6MCxlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIixhbmltOiEwfSxkeDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MSxlZGl0VHlwZTpcImNhbGNcIixhbmltOiEwfSx5Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wiLGFuaW06ITB9LHkwOnt2YWxUeXBlOlwiYW55XCIsZGZsdDowLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wiLGFuaW06ITB9LGR5Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxLGVkaXRUeXBlOlwiY2FsY1wiLGFuaW06ITB9LHN0YWNrZ3JvdXA6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LG9yaWVudGF0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ2XCIsXCJoXCJdLGVkaXRUeXBlOlwiY2FsY1wifSxncm91cG5vcm06e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcIlwiLFwiZnJhY3Rpb25cIixcInBlcmNlbnRcIl0sZGZsdDpcIlwiLGVkaXRUeXBlOlwiY2FsY1wifSxzdGFja2dhcHM6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImluZmVyIHplcm9cIixcImludGVycG9sYXRlXCJdLGRmbHQ6XCJpbmZlciB6ZXJvXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHRleHQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsYXJyYXlPazohMCxlZGl0VHlwZTpcImNhbGNcIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJzdHlsZVwifSxtb2RlOnt2YWxUeXBlOlwiZmxhZ2xpc3RcIixmbGFnczpbXCJsaW5lc1wiLFwibWFya2Vyc1wiLFwidGV4dFwiXSxleHRyYXM6W1wibm9uZVwiXSxlZGl0VHlwZTpcImNhbGNcIn0saG92ZXJvbjp7dmFsVHlwZTpcImZsYWdsaXN0XCIsZmxhZ3M6W1wicG9pbnRzXCIsXCJmaWxsc1wiXSxlZGl0VHlwZTpcInN0eWxlXCJ9LGhvdmVydGVtcGxhdGU6bih7fSx7a2V5czpjLmV2ZW50RGF0YUtleXN9KSxsaW5lOntjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJzdHlsZVwiLGFuaW06ITB9LHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoyLGVkaXRUeXBlOlwic3R5bGVcIixhbmltOiEwfSxzaGFwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibGluZWFyXCIsXCJzcGxpbmVcIixcImh2XCIsXCJ2aFwiLFwiaHZoXCIsXCJ2aHZcIl0sZGZsdDpcImxpbmVhclwiLGVkaXRUeXBlOlwicGxvdFwifSxzbW9vdGhpbmc6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MS4zLGRmbHQ6MSxlZGl0VHlwZTpcInBsb3RcIn0sZGFzaDp1KHt9LHMse2VkaXRUeXBlOlwic3R5bGVcIn0pLHNpbXBsaWZ5Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJwbG90XCJ9LGVkaXRUeXBlOlwicGxvdFwifSxjb25uZWN0Z2Fwczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwiY2FsY1wifSxjbGlwb25heGlzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJwbG90XCJ9LGZpbGw6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcIm5vbmVcIixcInRvemVyb3lcIixcInRvemVyb3hcIixcInRvbmV4dHlcIixcInRvbmV4dHhcIixcInRvc2VsZlwiLFwidG9uZXh0XCJdLGVkaXRUeXBlOlwiY2FsY1wifSxmaWxsY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwic3R5bGVcIixhbmltOiEwfSxtYXJrZXI6dSh7c3ltYm9sOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpsLnN5bWJvbExpc3QsZGZsdDpcImNpcmNsZVwiLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJzdHlsZVwifSxvcGFjaXR5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsYXJyYXlPazohMCxlZGl0VHlwZTpcInN0eWxlXCIsYW5pbTohMH0sc2l6ZTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6NixhcnJheU9rOiEwLGVkaXRUeXBlOlwiY2FsY1wiLGFuaW06ITB9LG1heGRpc3BsYXllZDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTpcInBsb3RcIn0sc2l6ZXJlZjp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MSxlZGl0VHlwZTpcImNhbGNcIn0sc2l6ZW1pbjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTpcImNhbGNcIn0sc2l6ZW1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImRpYW1ldGVyXCIsXCJhcmVhXCJdLGRmbHQ6XCJkaWFtZXRlclwiLGVkaXRUeXBlOlwiY2FsY1wifSxjb2xvcmJhcjphLGxpbmU6dSh7d2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxhcnJheU9rOiEwLGVkaXRUeXBlOlwic3R5bGVcIixhbmltOiEwfSxlZGl0VHlwZTpcImNhbGNcIn0saShcIm1hcmtlci5saW5lXCIse2FuaW06ITB9KSksZ3JhZGllbnQ6e3R5cGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInJhZGlhbFwiLFwiaG9yaXpvbnRhbFwiLFwidmVydGljYWxcIixcIm5vbmVcIl0sYXJyYXlPazohMCxkZmx0Olwibm9uZVwiLGVkaXRUeXBlOlwiY2FsY1wifSxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsYXJyYXlPazohMCxlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LGVkaXRUeXBlOlwiY2FsY1wifSxpKFwibWFya2VyXCIse2FuaW06ITB9KSksc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGVkaXRUeXBlOlwic3R5bGVcIn0sY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwic3R5bGVcIn0sc2l6ZTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGVkaXRUeXBlOlwic3R5bGVcIn0sZWRpdFR5cGU6XCJzdHlsZVwifSx0ZXh0Zm9udDp7Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwic3R5bGVcIn0sZWRpdFR5cGU6XCJzdHlsZVwifSxlZGl0VHlwZTpcInN0eWxlXCJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGVkaXRUeXBlOlwic3R5bGVcIn0sY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwic3R5bGVcIn0sc2l6ZTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGVkaXRUeXBlOlwic3R5bGVcIn0sZWRpdFR5cGU6XCJzdHlsZVwifSx0ZXh0Zm9udDp7Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwic3R5bGVcIn0sZWRpdFR5cGU6XCJzdHlsZVwifSxlZGl0VHlwZTpcInN0eWxlXCJ9LHRleHRwb3NpdGlvbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1widG9wIGxlZnRcIixcInRvcCBjZW50ZXJcIixcInRvcCByaWdodFwiLFwibWlkZGxlIGxlZnRcIixcIm1pZGRsZSBjZW50ZXJcIixcIm1pZGRsZSByaWdodFwiLFwiYm90dG9tIGxlZnRcIixcImJvdHRvbSBjZW50ZXJcIixcImJvdHRvbSByaWdodFwiXSxkZmx0OlwibWlkZGxlIGNlbnRlclwiLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LHRleHRmb250Om8oe2VkaXRUeXBlOlwiY2FsY1wiLGNvbG9yRWRpdFR5cGU6XCJzdHlsZVwiLGFycmF5T2s6ITB9KSxyOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx0Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXNcIjo1OTgsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIjo3NzUsXCIuL2NvbnN0YW50c1wiOjEwNTZ9XSwxMDUzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxvPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTSxzPXQoXCIuL3N1YnR5cGVzXCIpLGw9dChcIi4vY29sb3JzY2FsZV9jYWxjXCIpLGM9dChcIi4vYXJyYXlzX3RvX2NhbGNkYXRhXCIpLHU9dChcIi4vY2FsY19zZWxlY3Rpb25cIik7ZnVuY3Rpb24gaCh0LGUscixuLGksbyxsKXt2YXIgYz1lLl9sZW5ndGgsdT10Ll9mdWxsTGF5b3V0LGg9ci5faWQsZj1uLl9pZCxwPXUuX2ZpcnN0U2NhdHRlcltkKGUpXT09PWUudWlkLHY9KGcoZSx1LHIsbil8fHt9KS5vcmllbnRhdGlvbixtPWUuZmlsbDtyLl9taW5EdGljaz0wLG4uX21pbkR0aWNrPTA7dmFyIHk9e3BhZGRlZDohMH0seD17cGFkZGVkOiEwfTtsJiYoeS5wcGFkPXgucHBhZD1sKTt2YXIgYj1jPDJ8fGlbMF0hPT1pW2MtMV18fG9bMF0hPT1vW2MtMV07YiYmKFwidG96ZXJveFwiPT09bXx8XCJ0b25leHR4XCI9PT1tJiYocHx8XCJoXCI9PT12KSk/eS50b3plcm89ITA6KGUuZXJyb3JfeXx8e30pLnZpc2libGV8fFwidG9uZXh0eVwiIT09bSYmXCJ0b3plcm95XCIhPT1tJiYocy5oYXNNYXJrZXJzKGUpfHxzLmhhc1RleHQoZSkpfHwoeS5wYWRkZWQ9ITEseS5wcGFkPTApLGImJihcInRvemVyb3lcIj09PW18fFwidG9uZXh0eVwiPT09bSYmKHB8fFwidlwiPT09dikpP3gudG96ZXJvPSEwOlwidG9uZXh0eFwiIT09bSYmXCJ0b3plcm94XCIhPT1tfHwoeC5wYWRkZWQ9ITEpLGgmJihlLl9leHRyZW1lc1toXT1hLmZpbmRFeHRyZW1lcyhyLGkseSkpLGYmJihlLl9leHRyZW1lc1tmXT1hLmZpbmRFeHRyZW1lcyhuLG8seCkpfWZ1bmN0aW9uIGYodCxlKXtpZihzLmhhc01hcmtlcnModCkpe3ZhciByLG49dC5tYXJrZXIsbz0xLjYqKHQubWFya2VyLnNpemVyZWZ8fDEpO2lmKHI9XCJhcmVhXCI9PT10Lm1hcmtlci5zaXplbW9kZT9mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5zcXJ0KCh0fHwwKS9vKSwzKX06ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KCh0fHwwKS9vLDMpfSxpLmlzQXJyYXlPclR5cGVkQXJyYXkobi5zaXplKSl7dmFyIGw9e3R5cGU6XCJsaW5lYXJcIn07YS5zZXRDb252ZXJ0KGwpO2Zvcih2YXIgYz1sLm1ha2VDYWxjZGF0YSh0Lm1hcmtlcixcInNpemVcIiksdT1uZXcgQXJyYXkoZSksaD0wO2g8ZTtoKyspdVtoXT1yKGNbaF0pO3JldHVybiB1fXJldHVybiByKG4uc2l6ZSl9fWZ1bmN0aW9uIHAodCxlKXt2YXIgcj1kKGUpLG49dC5fZmlyc3RTY2F0dGVyO25bcl18fChuW3JdPWUudWlkKX1mdW5jdGlvbiBkKHQpe3ZhciBlPXQuc3RhY2tncm91cDtyZXR1cm4gdC54YXhpcyt0LnlheGlzK3QudHlwZSsoZT9cIi1cIitlOlwiXCIpfWZ1bmN0aW9uIGcodCxlLHIsbil7dmFyIGk9dC5zdGFja2dyb3VwO2lmKGkpe3ZhciBhPWUuX3NjYXR0ZXJTdGFja09wdHNbci5faWQrbi5faWRdW2ldLG89XCJ2XCI9PT1hLm9yaWVudGF0aW9uP246cjtyZXR1cm5cImxpbmVhclwiPT09by50eXBlfHxcImxvZ1wiPT09by50eXBlP2E6dm9pZCAwfX1lLmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24odCxlKXt2YXIgcixzLGQsdixtLHkseD10Ll9mdWxsTGF5b3V0LGI9YS5nZXRGcm9tSWQodCxlLnhheGlzfHxcInhcIiksXz1hLmdldEZyb21JZCh0LGUueWF4aXN8fFwieVwiKSx3PWIubWFrZUNhbGNkYXRhKGUsXCJ4XCIpLGs9Xy5tYWtlQ2FsY2RhdGEoZSxcInlcIiksQT1lLl9sZW5ndGgsVD1uZXcgQXJyYXkoQSksTT1lLmlkcyxTPWcoZSx4LGIsXyksRT0hMTtwKHgsZSk7dmFyIEMsTD1cInhcIix6PVwieVwiO2ZvcihTPyhpLnB1c2hVbmlxdWUoUy50cmFjZUluZGljZXMsZS5fZXhwYW5kZWRJbmRleCksKHI9XCJ2XCI9PT1TLm9yaWVudGF0aW9uKT8oej1cInNcIixDPVwieFwiKTooTD1cInNcIixDPVwieVwiKSxtPVwiaW50ZXJwb2xhdGVcIj09PVMuc3RhY2tnYXBzKTpoKHQsZSxiLF8sdyxrLGYoZSxBKSkscz0wO3M8QTtzKyspe3ZhciBPPVRbc109e30sST1uKHdbc10pLEQ9bihrW3NdKTtJJiZEPyhPW0xdPXdbc10sT1t6XT1rW3NdKTpTJiYocj9JOkQpPyhPW0NdPXI/d1tzXTprW3NdLE8uZ2FwPSEwLG0/KE8ucz1vLEU9ITApOk8ucz0wKTpPW0xdPU9bel09byxNJiYoTy5pZD1TdHJpbmcoTVtzXSkpfWlmKGMoVCxlKSxsKHQsZSksdShULGUpLFMpe2ZvcihzPTA7czxULmxlbmd0aDspVFtzXVtDXT09PW8/VC5zcGxpY2UocywxKTpzKys7aWYoaS5zb3J0KFQsZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtDXS1lW0NdfHx0LmktZS5pfSksRSl7Zm9yKHM9MDtzPFQubGVuZ3RoLTEmJlRbc10uZ2FwOylzKys7Zm9yKCh5PVRbc10ucyl8fCh5PVRbc10ucz0wKSxkPTA7ZDxzO2QrKylUW2RdLnM9eTtmb3Iodj1ULmxlbmd0aC0xO3Y+cyYmVFt2XS5nYXA7KXYtLTtmb3IoeT1UW3ZdLnMsZD1ULmxlbmd0aC0xO2Q+djtkLS0pVFtkXS5zPXk7Zm9yKDtzPHY7KWlmKFRbKytzXS5nYXApe2ZvcihkPXMrMTtUW2RdLmdhcDspZCsrO2Zvcih2YXIgUD1UW3MtMV1bQ10sUj1UW3MtMV0ucyxGPShUW2RdLnMtUikvKFRbZF1bQ10tUCk7czxkOylUW3NdLnM9UisoVFtzXVtDXS1QKSpGLHMrK319fXJldHVybiBUfSxjYWxjTWFya2VyU2l6ZTpmLGNhbGNBeGlzRXhwYW5zaW9uOmgsc2V0Rmlyc3RTY2F0dGVyOnAsZ2V0U3RhY2tPcHRzOmd9fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuL2FycmF5c190b19jYWxjZGF0YVwiOjEwNTEsXCIuL2NhbGNfc2VsZWN0aW9uXCI6MTA1NCxcIi4vY29sb3JzY2FsZV9jYWxjXCI6MTA1NSxcIi4vc3VidHlwZXNcIjoxMDc2LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSwxMDU0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtuLmlzQXJyYXlPclR5cGVkQXJyYXkoZS5zZWxlY3RlZHBvaW50cykmJm4udGFnU2VsZWN0ZWQodCxlKX19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDEwNTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnNcIikuaGFzQ29sb3JzY2FsZSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsY1wiKSxhPXQoXCIuL3N1YnR5cGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2EuaGFzTGluZXMoZSkmJm4oZSxcImxpbmVcIikmJmkodCxlLHt2YWxzOmUubGluZS5jb2xvcixjb250YWluZXJTdHI6XCJsaW5lXCIsY0xldHRlcjpcImNcIn0pLGEuaGFzTWFya2VycyhlKSYmKG4oZSxcIm1hcmtlclwiKSYmaSh0LGUse3ZhbHM6ZS5tYXJrZXIuY29sb3IsY29udGFpbmVyU3RyOlwibWFya2VyXCIsY0xldHRlcjpcImNcIn0pLG4oZSxcIm1hcmtlci5saW5lXCIpJiZpKHQsZSx7dmFsczplLm1hcmtlci5saW5lLmNvbG9yLGNvbnRhaW5lclN0cjpcIm1hcmtlci5saW5lXCIsY0xldHRlcjpcImNcIn0pKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCI6NTg2LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnNcIjo1ODksXCIuL3N1YnR5cGVzXCI6MTA3Nn1dLDEwNTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e1BUU19MSU5FU09OTFk6MjAsbWluVG9sZXJhbmNlOi4yLHRvbGVyYW5jZUdyb3d0aDoxMCxtYXhTY3JlZW5zQXdheToyMCxldmVudERhdGFLZXlzOltdfX0se31dLDEwNTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9jYWxjXCIpO2Z1bmN0aW9uIGkodCxlLHIsbixpLGEsbyl7aVtuXT0hMDt2YXIgcz17aTpudWxsLGdhcDohMCxzOjB9O2lmKHNbb109cix0LnNwbGljZShlLDAscyksZSYmcj09PXRbZS0xXVtvXSl7dmFyIGw9dFtlLTFdO3Mucz1sLnMscy5pPWwuaSxzLmdhcD1sLmdhcH1lbHNlIGEmJihzLnM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dFtlLTFdLGE9dFtlKzFdO3JldHVybiBhP2k/aS5zKyhhLnMtaS5zKSooci1pW25dKS8oYVtuXS1pW25dKTphLnM6aS5zfSh0LGUscixvKSk7ZXx8KHRbMF0udD10WzFdLnQsdFswXS50cmFjZT10WzFdLnRyYWNlLGRlbGV0ZSB0WzFdLnQsZGVsZXRlIHRbMV0udHJhY2UpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUueGF4aXMsYT1lLnlheGlzLG89ci5faWQrYS5faWQscz10Ll9mdWxsTGF5b3V0Ll9zY2F0dGVyU3RhY2tPcHRzW29dO2lmKHMpe3ZhciBsLGMsdSxoLGYscCxkLGcsdixtLHkseCxiLF8sdyxrPXQuY2FsY2RhdGE7Zm9yKHZhciBBIGluIHMpe3ZhciBUPShtPXNbQV0pLnRyYWNlSW5kaWNlcztpZihULmxlbmd0aCl7Zm9yKHk9XCJpbnRlcnBvbGF0ZVwiPT09bS5zdGFja2dhcHMseD1tLmdyb3Vwbm9ybSxcInZcIj09PW0ub3JpZW50YXRpb24/KGI9XCJ4XCIsXz1cInlcIik6KGI9XCJ5XCIsXz1cInhcIiksdz1uZXcgQXJyYXkoVC5sZW5ndGgpLGw9MDtsPHcubGVuZ3RoO2wrKyl3W2xdPSExO3A9a1tUWzBdXTt2YXIgTT1uZXcgQXJyYXkocC5sZW5ndGgpO2ZvcihsPTA7bDxwLmxlbmd0aDtsKyspTVtsXT1wW2xdW2JdO2ZvcihsPTE7bDxULmxlbmd0aDtsKyspe2ZvcihmPWtbVFtsXV0sYz11PTA7YzxmLmxlbmd0aDtjKyspe2ZvcihkPWZbY11bYl07ZD5NW3VdJiZ1PE0ubGVuZ3RoO3UrKylpKGYsYyxNW3VdLGwsdyx5LGIpLGMrKztpZihkIT09TVt1XSl7Zm9yKGg9MDtoPGw7aCsrKWkoa1tUW2hdXSx1LGQsaCx3LHksYik7TS5zcGxpY2UodSwwLGQpfXUrK31mb3IoO3U8TS5sZW5ndGg7dSsrKWkoZixjLE1bdV0sbCx3LHksYiksYysrfXZhciBTPU0ubGVuZ3RoO2ZvcihjPTA7YzxwLmxlbmd0aDtjKyspe2ZvcihnPXBbY11bX109cFtjXS5zLGw9MTtsPFQubGVuZ3RoO2wrKykoZj1rW1RbbF1dKVswXS50cmFjZS5fcmF3TGVuZ3RoPWZbMF0udHJhY2UuX2xlbmd0aCxmWzBdLnRyYWNlLl9sZW5ndGg9UyxnKz1mW2NdLnMsZltjXVtfXT1nO2lmKHgpZm9yKHY9KFwiZnJhY3Rpb25cIj09PXg/ZzpnLzEwMCl8fDEsbD0wO2w8VC5sZW5ndGg7bCsrKXt2YXIgRT1rW1RbbF1dW2NdO0VbX10vPXYsRS5zTm9ybT1FLnMvdn19Zm9yKGw9MDtsPFQubGVuZ3RoO2wrKyl7dmFyIEM9KGY9a1tUW2xdXSlbMF0udHJhY2UsTD1uLmNhbGNNYXJrZXJTaXplKEMsQy5fcmF3TGVuZ3RoKSx6PUFycmF5LmlzQXJyYXkoTCk7aWYoTCYmd1tsXXx8eil7dmFyIE89TDtmb3IoTD1uZXcgQXJyYXkoUyksYz0wO2M8UztjKyspTFtjXT1mW2NdLmdhcD8wOno/T1tmW2NdLmldOk99dmFyIEk9bmV3IEFycmF5KFMpLEQ9bmV3IEFycmF5KFMpO2ZvcihjPTA7YzxTO2MrKylJW2NdPWZbY10ueCxEW2NdPWZbY10ueTtuLmNhbGNBeGlzRXhwYW5zaW9uKHQsQyxyLGEsSSxELEwpLGZbMF0udC5vcmllbnRhdGlvbj1tLm9yaWVudGF0aW9ufX19fX19LHtcIi4vY2FsY1wiOjEwNTN9XSwxMDU4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10W2VdO2lmKFwic2NhdHRlclwiPT09ci50eXBlKXt2YXIgbj1yLmZpbGw7aWYoXCJub25lXCIhPT1uJiZcInRvc2VsZlwiIT09biYmKHIub3BhY2l0eT12b2lkIDAsXCJ0b25leHR5XCI9PT1ufHxcInRvbmV4dHhcIj09PW4pKWZvcih2YXIgaT1lLTE7aT49MDtpLS0pe3ZhciBhPXRbaV07aWYoXCJzY2F0dGVyXCI9PT1hLnR5cGUmJmEueGF4aXM9PT1yLnhheGlzJiZhLnlheGlzPT09ci55YXhpcyl7YS5vcGFjaXR5PXZvaWQgMDticmVha319fX19fSx7fV0sMTA1OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcmVnaXN0cnlcIiksYT10KFwiLi9hdHRyaWJ1dGVzXCIpLG89dChcIi4vY29uc3RhbnRzXCIpLHM9dChcIi4vc3VidHlwZXNcIiksbD10KFwiLi94eV9kZWZhdWx0c1wiKSxjPXQoXCIuL3N0YWNrX2RlZmF1bHRzXCIpLHU9dChcIi4vbWFya2VyX2RlZmF1bHRzXCIpLGg9dChcIi4vbGluZV9kZWZhdWx0c1wiKSxmPXQoXCIuL2xpbmVfc2hhcGVfZGVmYXVsdHNcIikscD10KFwiLi90ZXh0X2RlZmF1bHRzXCIpLGQ9dChcIi4vZmlsbGNvbG9yX2RlZmF1bHRzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixnKXtmdW5jdGlvbiB2KHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIG09bCh0LGUsZyx2KTtpZihtfHwoZS52aXNpYmxlPSExKSxlLnZpc2libGUpe3ZhciB5PWModCxlLGcsdikseD0heSYmbTxvLlBUU19MSU5FU09OTFk/XCJsaW5lcyttYXJrZXJzXCI6XCJsaW5lc1wiO3YoXCJ0ZXh0XCIpLHYoXCJob3ZlcnRleHRcIiksdihcIm1vZGVcIix4KSxzLmhhc0xpbmVzKGUpJiYoaCh0LGUscixnLHYpLGYodCxlLHYpLHYoXCJjb25uZWN0Z2Fwc1wiKSx2KFwibGluZS5zaW1wbGlmeVwiKSkscy5oYXNNYXJrZXJzKGUpJiZ1KHQsZSxyLGcsdix7Z3JhZGllbnQ6ITB9KSxzLmhhc1RleHQoZSkmJnAodCxlLGcsdik7dmFyIGI9W107KHMuaGFzTWFya2VycyhlKXx8cy5oYXNUZXh0KGUpKSYmKHYoXCJjbGlwb25heGlzXCIpLHYoXCJtYXJrZXIubWF4ZGlzcGxheWVkXCIpLGIucHVzaChcInBvaW50c1wiKSksdihcImZpbGxcIix5P3kuZmlsbERmbHQ6XCJub25lXCIpLFwibm9uZVwiIT09ZS5maWxsJiYoZCh0LGUscix2KSxzLmhhc0xpbmVzKGUpfHxmKHQsZSx2KSk7dmFyIF89KGUubGluZXx8e30pLmNvbG9yLHc9KGUubWFya2VyfHx7fSkuY29sb3I7XCJ0b25leHRcIiE9PWUuZmlsbCYmXCJ0b3NlbGZcIiE9PWUuZmlsbHx8Yi5wdXNoKFwiZmlsbHNcIiksdihcImhvdmVyb25cIixiLmpvaW4oXCIrXCIpfHxcInBvaW50c1wiKSxcImZpbGxzXCIhPT1lLmhvdmVyb24mJnYoXCJob3ZlcnRlbXBsYXRlXCIpO3ZhciBrPWkuZ2V0Q29tcG9uZW50TWV0aG9kKFwiZXJyb3JiYXJzXCIsXCJzdXBwbHlEZWZhdWx0c1wiKTtrKHQsZSxffHx3fHxyLHtheGlzOlwieVwifSksayh0LGUsX3x8d3x8cix7YXhpczpcInhcIixpbmhlcml0OlwieVwifSksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsdil9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2F0dHJpYnV0ZXNcIjoxMDUyLFwiLi9jb25zdGFudHNcIjoxMDU2LFwiLi9maWxsY29sb3JfZGVmYXVsdHNcIjoxMDYxLFwiLi9saW5lX2RlZmF1bHRzXCI6MTA2NSxcIi4vbGluZV9zaGFwZV9kZWZhdWx0c1wiOjEwNjcsXCIuL21hcmtlcl9kZWZhdWx0c1wiOjEwNzEsXCIuL3N0YWNrX2RlZmF1bHRzXCI6MTA3NCxcIi4vc3VidHlwZXNcIjoxMDc2LFwiLi90ZXh0X2RlZmF1bHRzXCI6MTA3NyxcIi4veHlfZGVmYXVsdHNcIjoxMDc4fV0sMTA2MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIik7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdHx8MD09PXR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1BcnJheS5pc0FycmF5KHIpP2Z1bmN0aW9uKHQpe3IucHVzaCh0KX06ZnVuY3Rpb24odCl7ci50ZXh0PXR9LG89bi5leHRyYWN0T3B0aW9uKHQsZSxcImh0eFwiLFwiaG92ZXJ0ZXh0XCIpO2lmKGkobykpcmV0dXJuIGEobyk7dmFyIHM9bi5leHRyYWN0T3B0aW9uKHQsZSxcInR4XCIsXCJ0ZXh0XCIpO3JldHVybiBpKHMpP2Eocyk6dm9pZCAwfX0se1wiLi4vLi4vbGliXCI6NzAxfV0sMTA2MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGk9dChcIi4uLy4uL2xpYlwiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz0hMTtpZihlLm1hcmtlcil7dmFyIHM9ZS5tYXJrZXIuY29sb3IsbD0oZS5tYXJrZXIubGluZXx8e30pLmNvbG9yO3MmJiFpKHMpP289czpsJiYhaShsKSYmKG89bCl9YShcImZpbGxjb2xvclwiLG4uYWRkT3BhY2l0eSgoZS5saW5lfHx7fSkuY29sb3J8fG98fHIsLjUpKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9saWJcIjo3MDF9XSwxMDYyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksaT10KFwiLi9zdWJ0eXBlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhO2lmKFwibGluZXNcIj09PXQubW9kZSlyZXR1cm4ocj10LmxpbmUuY29sb3IpJiZuLm9wYWNpdHkocik/cjp0LmZpbGxjb2xvcjtpZihcIm5vbmVcIj09PXQubW9kZSlyZXR1cm4gdC5maWxsP3QuZmlsbGNvbG9yOlwiXCI7dmFyIG89ZS5tY2N8fCh0Lm1hcmtlcnx8e30pLmNvbG9yLHM9ZS5tbGNjfHwoKHQubWFya2VyfHx7fSkubGluZXx8e30pLmNvbG9yO3JldHVybihhPW8mJm4ub3BhY2l0eShvKT9vOnMmJm4ub3BhY2l0eShzKSYmKGUubWx3fHwoKHQubWFya2VyfHx7fSkubGluZXx8e30pLndpZHRoKT9zOlwiXCIpP24ub3BhY2l0eShhKTwuMz9uLmFkZE9wYWNpdHkoYSwuMyk6YToocj0odC5saW5lfHx7fSkuY29sb3IpJiZuLm9wYWNpdHkocikmJmkuaGFzTGluZXModCkmJnQubGluZS53aWR0aD9yOnQuZmlsbGNvbG9yfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4vc3VidHlwZXNcIjoxMDc2fV0sMTA2MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxhPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxvPXQoXCIuL2dldF90cmFjZV9jb2xvclwiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGw9dChcIi4vZmlsbF9ob3Zlcl90ZXh0XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixjKXt2YXIgdT10LmNkLGg9dVswXS50cmFjZSxmPXQueGEscD10LnlhLGQ9Zi5jMnAoZSksZz1wLmMycChyKSx2PVtkLGddLG09aC5ob3Zlcm9ufHxcIlwiLHk9LTEhPT1oLm1vZGUuaW5kZXhPZihcIm1hcmtlcnNcIik/MzouNTtpZigtMSE9PW0uaW5kZXhPZihcInBvaW50c1wiKSl7dmFyIHg9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoeSx0Lm1yY3x8MCkscj1mLmMycCh0LngpLWQsbj1wLmMycCh0LnkpLWc7cmV0dXJuIE1hdGgubWF4KE1hdGguc3FydChyKnIrbipuKS1lLDEteS9lKX0sYj1pLmdldERpc3RhbmNlRnVuY3Rpb24oYyxmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKSxyPTEtMS9lLG49TWF0aC5hYnMoZi5jMnAodC54KS1kKTtyZXR1cm4gbjxlP3Iqbi9lOm4tZStyfSxmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKSxyPTEtMS9lLG49TWF0aC5hYnMocC5jMnAodC55KS1nKTtyZXR1cm4gbjxlP3Iqbi9lOm4tZStyfSx4KTtpZihpLmdldENsb3Nlc3QodSxiLHQpLCExIT09dC5pbmRleCl7dmFyIF89dVt0LmluZGV4XSx3PWYuYzJwKF8ueCwhMCksaz1wLmMycChfLnksITApLEE9Xy5tcmN8fDE7dC5pbmRleD1fLmk7dmFyIFQ9dVswXS50Lm9yaWVudGF0aW9uLE09VCYmKF8uc05vcm18fF8ucyksUz1cImhcIj09PVQ/TTpfLngsRT1cInZcIj09PVQ/TTpfLnk7cmV0dXJuIG4uZXh0ZW5kRmxhdCh0LHtjb2xvcjpvKGgsXykseDA6dy1BLHgxOncrQSx4TGFiZWxWYWw6Uyx5MDprLUEseTE6aytBLHlMYWJlbFZhbDpFLHNwaWtlRGlzdGFuY2U6eChfKSxob3ZlcnRlbXBsYXRlOmguaG92ZXJ0ZW1wbGF0ZX0pLGwoXyxoLHQpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKFwiZXJyb3JiYXJzXCIsXCJob3ZlckluZm9cIikoXyxoLHQpLFt0XX19aWYoLTEhPT1tLmluZGV4T2YoXCJmaWxsc1wiKSYmaC5fcG9seWdvbnMpe3ZhciBDLEwseixPLEksRCxQLFIsRixCPWguX3BvbHlnb25zLE49W10saj0hMSxWPTEvMCxVPS0xLzAscT0xLzAsSD0tMS8wO2ZvcihDPTA7QzxCLmxlbmd0aDtDKyspKHo9QltDXSkuY29udGFpbnModikmJihqPSFqLE4ucHVzaCh6KSxxPU1hdGgubWluKHEsei55bWluKSxIPU1hdGgubWF4KEgsei55bWF4KSk7aWYoail7dmFyIEc9KChxPU1hdGgubWF4KHEsMCkpKyhIPU1hdGgubWluKEgscC5fbGVuZ3RoKSkpLzI7Zm9yKEM9MDtDPE4ubGVuZ3RoO0MrKylmb3IoTz1OW0NdLnB0cyxMPTE7TDxPLmxlbmd0aDtMKyspKFI9T1tMLTFdWzFdKT5HIT0oRj1PW0xdWzFdKT49RyYmKEQ9T1tMLTFdWzBdLFA9T1tMXVswXSxGLVImJihJPUQrKFAtRCkqKEctUikvKEYtUiksVj1NYXRoLm1pbihWLEkpLFU9TWF0aC5tYXgoVSxJKSkpO1Y9TWF0aC5tYXgoViwwKSxVPU1hdGgubWluKFUsZi5fbGVuZ3RoKTt2YXIgWT1zLmRlZmF1bHRMaW5lO3JldHVybiBzLm9wYWNpdHkoaC5maWxsY29sb3IpP1k9aC5maWxsY29sb3I6cy5vcGFjaXR5KChoLmxpbmV8fHt9KS5jb2xvcikmJihZPWgubGluZS5jb2xvciksbi5leHRlbmRGbGF0KHQse2Rpc3RhbmNlOnQubWF4SG92ZXJEaXN0YW5jZSx4MDpWLHgxOlUseTA6Ryx5MTpHLGNvbG9yOlksaG92ZXJ0ZW1wbGF0ZTohMX0pLGRlbGV0ZSB0LmluZGV4LGgudGV4dCYmIUFycmF5LmlzQXJyYXkoaC50ZXh0KT90LnRleHQ9U3RyaW5nKGgudGV4dCk6dC50ZXh0PWgubmFtZSxbdF19fX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2Z4XCI6NjE3LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2ZpbGxfaG92ZXJfdGV4dFwiOjEwNjAsXCIuL2dldF90cmFjZV9jb2xvclwiOjEwNjJ9XSwxMDY0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e30saT10KFwiLi9zdWJ0eXBlc1wiKTtuLmhhc0xpbmVzPWkuaGFzTGluZXMsbi5oYXNNYXJrZXJzPWkuaGFzTWFya2VycyxuLmhhc1RleHQ9aS5oYXNUZXh0LG4uaXNCdWJibGU9aS5pc0J1YmJsZSxuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLG4uY3Jvc3NUcmFjZURlZmF1bHRzPXQoXCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzXCIpLG4uY2FsYz10KFwiLi9jYWxjXCIpLmNhbGMsbi5jcm9zc1RyYWNlQ2FsYz10KFwiLi9jcm9zc190cmFjZV9jYWxjXCIpLG4uYXJyYXlzVG9DYWxjZGF0YT10KFwiLi9hcnJheXNfdG9fY2FsY2RhdGFcIiksbi5wbG90PXQoXCIuL3Bsb3RcIiksbi5jb2xvcmJhcj10KFwiLi9tYXJrZXJfY29sb3JiYXJcIiksbi5zdHlsZT10KFwiLi9zdHlsZVwiKS5zdHlsZSxuLnN0eWxlT25TZWxlY3Q9dChcIi4vc3R5bGVcIikuc3R5bGVPblNlbGVjdCxuLmhvdmVyUG9pbnRzPXQoXCIuL2hvdmVyXCIpLG4uc2VsZWN0UG9pbnRzPXQoXCIuL3NlbGVjdFwiKSxuLmFuaW1hdGFibGU9ITAsbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJzY2F0dGVyXCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCIpLG4uY2F0ZWdvcmllcz1bXCJjYXJ0ZXNpYW5cIixcInN2Z1wiLFwic3ltYm9sc1wiLFwiZXJyb3JCYXJzT0tcIixcInNob3dMZWdlbmRcIixcInNjYXR0ZXItbGlrZVwiLFwiem9vbVNjYWxlXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi9hcnJheXNfdG9fY2FsY2RhdGFcIjoxMDUxLFwiLi9hdHRyaWJ1dGVzXCI6MTA1MixcIi4vY2FsY1wiOjEwNTMsXCIuL2Nyb3NzX3RyYWNlX2NhbGNcIjoxMDU3LFwiLi9jcm9zc190cmFjZV9kZWZhdWx0c1wiOjEwNTgsXCIuL2RlZmF1bHRzXCI6MTA1OSxcIi4vaG92ZXJcIjoxMDYzLFwiLi9tYXJrZXJfY29sb3JiYXJcIjoxMDcwLFwiLi9wbG90XCI6MTA3MixcIi4vc2VsZWN0XCI6MTA3MyxcIi4vc3R5bGVcIjoxMDc1LFwiLi9zdWJ0eXBlc1wiOjEwNzZ9XSwxMDY1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKS5pc0FycmF5T3JUeXBlZEFycmF5LGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzXCIpLmhhc0NvbG9yc2NhbGUsYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMsbCl7dmFyIGM9KHQubWFya2VyfHx7fSkuY29sb3I7KHMoXCJsaW5lLmNvbG9yXCIsciksaSh0LFwibGluZVwiKSk/YSh0LGUsbyxzLHtwcmVmaXg6XCJsaW5lLlwiLGNMZXR0ZXI6XCJjXCJ9KTpzKFwibGluZS5jb2xvclwiLCFuKGMpJiZjfHxyKTtzKFwibGluZS53aWR0aFwiKSwobHx8e30pLm5vRGFzaHx8cyhcImxpbmUuZGFzaFwiKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiOjU4OCxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzXCI6NTg5LFwiLi4vLi4vbGliXCI6NzAxfV0sMTA2NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLGk9bi5CQUROVU0sYT1uLkxPR19DTElQLG89YSsuNSxzPWEtLjUsbD10KFwiLi4vLi4vbGliXCIpLGM9bC5zZWdtZW50c0ludGVyc2VjdCx1PWwuY29uc3RyYWluLGg9dChcIi4vY29uc3RhbnRzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4sYSxmLHAsZCxnLHYsbSx5LHgsYixfLHcsayxBLFQsTSxTPWUueGF4aXMsRT1lLnlheGlzLEM9XCJsb2dcIj09PVMudHlwZSxMPVwibG9nXCI9PT1FLnR5cGUsej1TLl9sZW5ndGgsTz1FLl9sZW5ndGgsST1lLmNvbm5lY3RHYXBzLEQ9ZS5iYXNlVG9sZXJhbmNlLFA9ZS5zaGFwZSxSPVwibGluZWFyXCI9PT1QLEY9ZS5maWxsJiZcIm5vbmVcIiE9PWUuZmlsbCxCPVtdLE49aC5taW5Ub2xlcmFuY2Usaj10Lmxlbmd0aCxWPW5ldyBBcnJheShqKSxVPTA7ZnVuY3Rpb24gcShlKXt2YXIgcj10W2VdO2lmKCFyKXJldHVybiExO3ZhciBuPVMuYzJwKHIueCksYT1FLmMycChyLnkpO2lmKG49PT1pKXtpZihDJiYobj1TLmMycChyLngsITApKSxuPT09aSlyZXR1cm4hMTtMJiZhPT09aSYmKG4qPU1hdGguYWJzKFMuX20qTyooUy5fbT4wP286cykvKEUuX20qeiooRS5fbT4wP286cykpKSksbio9MWUzfWlmKGE9PT1pKXtpZihMJiYoYT1FLmMycChyLnksITApKSxhPT09aSlyZXR1cm4hMTthKj0xZTN9cmV0dXJuW24sYV19ZnVuY3Rpb24gSCh0LGUscixuKXt2YXIgaT1yLXQsYT1uLWUsbz0uNS10LHM9LjUtZSxsPWkqaSthKmEsYz1pKm8rYSpzO2lmKGM+MCYmYzxsKXt2YXIgdT1vKmEtcyppO2lmKHUqdTxsKXJldHVybiEwfX1mdW5jdGlvbiBHKHQsZSl7dmFyIHI9dFswXS96LG49dFsxXS9PLGk9TWF0aC5tYXgoMCwtcixyLTEsLW4sbi0xKTtyZXR1cm4gaSYmdm9pZCAwIT09VCYmSChyLG4sVCxNKSYmKGk9MCksaSYmZSYmSChyLG4sZVswXS96LGVbMV0vTykmJihpPTApLCgxK2gudG9sZXJhbmNlR3Jvd3RoKmkpKkR9ZnVuY3Rpb24gWSh0LGUpe3ZhciByPXRbMF0tZVswXSxuPXRbMV0tZVsxXTtyZXR1cm4gTWF0aC5zcXJ0KHIqcituKm4pfXZhciBXLFgsWiwkLEosSyxRLHR0PWgubWF4U2NyZWVuc0F3YXksZXQ9LXoqdHQscnQ9eiooMSt0dCksbnQ9LU8qdHQsaXQ9TyooMSt0dCksYXQ9W1tldCxudCxydCxudF0sW3J0LG50LHJ0LGl0XSxbcnQsaXQsZXQsaXRdLFtldCxpdCxldCxudF1dO2Z1bmN0aW9uIG90KHQpe2lmKHRbMF08ZXR8fHRbMF0+cnR8fHRbMV08bnR8fHRbMV0+aXQpcmV0dXJuW3UodFswXSxldCxydCksdSh0WzFdLG50LGl0KV19ZnVuY3Rpb24gc3QodCxlKXtyZXR1cm4gdFswXT09PWVbMF0mJih0WzBdPT09ZXR8fHRbMF09PT1ydCl8fCh0WzFdPT09ZVsxXSYmKHRbMV09PT1udHx8dFsxXT09PWl0KXx8dm9pZCAwKX1mdW5jdGlvbiBsdCh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKG4saSl7dmFyIGE9b3Qobiksbz1vdChpKSxzPVtdO2lmKGEmJm8mJnN0KGEsbykpcmV0dXJuIHM7YSYmcy5wdXNoKGEpLG8mJnMucHVzaChvKTt2YXIgYz0yKmwuY29uc3RyYWluKChuW3RdK2lbdF0pLzIsZSxyKS0oKGF8fG4pW3RdKyhvfHxpKVt0XSk7YyYmKChhJiZvP2M+MD09YVt0XT5vW3RdP2E6bzphfHxvKVt0XSs9Yyk7cmV0dXJuIHN9fWZ1bmN0aW9uIGN0KHQpe3ZhciBlPXRbMF0scj10WzFdLG49ZT09PVZbVS0xXVswXSxpPXI9PT1WW1UtMV1bMV07aWYoIW58fCFpKWlmKFU+MSl7dmFyIGE9ZT09PVZbVS0yXVswXSxvPXI9PT1WW1UtMl1bMV07biYmKGU9PT1ldHx8ZT09PXJ0KSYmYT9vP1UtLTpWW1UtMV09dDppJiYocj09PW50fHxyPT09aXQpJiZvP2E/VS0tOlZbVS0xXT10OlZbVSsrXT10fWVsc2UgVltVKytdPXR9ZnVuY3Rpb24gdXQodCl7VltVLTFdWzBdIT09dFswXSYmVltVLTFdWzFdIT09dFsxXSYmY3QoW1osJF0pLGN0KHQpLEo9bnVsbCxaPSQ9MH1mdW5jdGlvbiBodCh0KXtpZihUPXRbMF0veixNPXRbMV0vTyxXPXRbMF08ZXQ/ZXQ6dFswXT5ydD9ydDowLFg9dFsxXTxudD9udDp0WzFdPml0P2l0OjAsV3x8WCl7aWYoVSlpZihKKXt2YXIgZT1RKEosdCk7ZS5sZW5ndGg+MSYmKHV0KGVbMF0pLFZbVSsrXT1lWzFdKX1lbHNlIEs9UShWW1UtMV0sdClbMF0sVltVKytdPUs7ZWxzZSBWW1UrK109W1d8fHRbMF0sWHx8dFsxXV07dmFyIHI9VltVLTFdO1cmJlgmJihyWzBdIT09V3x8clsxXSE9PVgpPyhKJiYoWiE9PVcmJiQhPT1YP2N0KFomJiQ/KG49SixhPShpPXQpWzBdLW5bMF0sbz0oaVsxXS1uWzFdKS9hLChuWzFdKmlbMF0taVsxXSpuWzBdKS9hPjA/W28+MD9ldDpydCxpdF06W28+MD9ydDpldCxudF0pOltafHxXLCR8fFhdKTpaJiYkJiZjdChbWiwkXSkpLGN0KFtXLFhdKSk6Wi1XJiYkLVgmJmN0KFtXfHxaLFh8fCRdKSxKPXQsWj1XLCQ9WH1lbHNlIEomJnV0KFEoSix0KVswXSksVltVKytdPXQ7dmFyIG4saSxhLG99Zm9yKFwibGluZWFyXCI9PT1QfHxcInNwbGluZVwiPT09UD9RPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49MCxpPTA7aTw0O2krKyl7dmFyIGE9YXRbaV0sbz1jKHRbMF0sdFsxXSxlWzBdLGVbMV0sYVswXSxhWzFdLGFbMl0sYVszXSk7byYmKCFufHxNYXRoLmFicyhvLngtclswXVswXSk+MXx8TWF0aC5hYnMoby55LXJbMF1bMV0pPjEpJiYobz1bby54LG8ueV0sbiYmWShvLHQpPFkoclswXSx0KT9yLnVuc2hpZnQobyk6ci5wdXNoKG8pLG4rKyl9cmV0dXJuIHJ9OlwiaHZcIj09PVB8fFwidmhcIj09PVA/UT1mdW5jdGlvbih0LGUpe3ZhciByPVtdLG49b3QodCksaT1vdChlKTtyZXR1cm4gbiYmaSYmc3QobixpKT9yOihuJiZyLnB1c2gobiksaSYmci5wdXNoKGkpLHIpfTpcImh2aFwiPT09UD9RPWx0KDAsZXQscnQpOlwidmh2XCI9PT1QJiYoUT1sdCgxLG50LGl0KSkscj0wO3I8ajtyKyspaWYobj1xKHIpKXtmb3IoVT0wLEo9bnVsbCxodChuKSxyKys7cjxqO3IrKyl7aWYoIShmPXEocikpKXtpZihJKWNvbnRpbnVlO2JyZWFrfWlmKFImJmUuc2ltcGxpZnkpe3ZhciBmdD1xKHIrMSk7aWYoeT1ZKGYsbiksRiYmKDA9PT1VfHxVPT09ai0xKXx8ISh5PEcoZixmdCkqTikpe2Zvcih2PVsoZlswXS1uWzBdKS95LChmWzFdLW5bMV0pL3ldLHA9bix4PXksYj13PWs9MCxnPSExLGE9ZixyKys7cjx0Lmxlbmd0aDtyKyspe2lmKGQ9ZnQsZnQ9cShyKzEpLCFkKXtpZihJKWNvbnRpbnVlO2JyZWFrfWlmKEE9KG09W2RbMF0tblswXSxkWzFdLW5bMV1dKVswXSp2WzFdLW1bMV0qdlswXSx3PU1hdGgubWluKHcsQSksKGs9TWF0aC5tYXgoayxBKSktdz5HKGQsZnQpKWJyZWFrO2E9ZCwoXz1tWzBdKnZbMF0rbVsxXSp2WzFdKT54Pyh4PV8sZj1kLGc9ITEpOl88YiYmKGI9XyxwPWQsZz0hMCl9aWYoZz8oaHQoZiksYSE9PXAmJmh0KHApKToocCE9PW4mJmh0KHApLGEhPT1mJiZodChmKSksaHQoYSkscj49dC5sZW5ndGh8fCFkKWJyZWFrO2h0KGQpLG49ZH19ZWxzZSBodChmKX1KJiZjdChbWnx8SlswXSwkfHxKWzFdXSksQi5wdXNoKFYuc2xpY2UoMCxVKSl9cmV0dXJuIEJ9fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi9jb25zdGFudHNcIjoxMDU2fV0sMTA2NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7XCJzcGxpbmVcIj09PXIoXCJsaW5lLnNoYXBlXCIpJiZyKFwibGluZS5zbW9vdGhpbmdcIil9fSx7fV0sMTA2ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt0b25leHR4OjEsdG9uZXh0eToxLHRvbmV4dDoxfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEsbyxzLGwsYz17fSx1PSExLGg9LTEsZj0wLHA9LTE7Zm9yKGE9MDthPHIubGVuZ3RoO2ErKykobz0oaT1yW2FdWzBdLnRyYWNlKS5zdGFja2dyb3VwfHxcIlwiKT9vIGluIGM/bD1jW29dOihsPWNbb109ZixmKyspOmkuZmlsbCBpbiBuJiZwPj0wP2w9cDoobD1wPWYsZisrKSxsPGgmJih1PSEwKSxpLl9ncm91cEluZGV4PWg9bDt2YXIgZD1yLnNsaWNlKCk7dSYmZC5zb3J0KGZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswXS50cmFjZSxuPWVbMF0udHJhY2U7cmV0dXJuIHIuX2dyb3VwSW5kZXgtbi5fZ3JvdXBJbmRleHx8ci5pbmRleC1uLmluZGV4fSk7dmFyIGc9e307Zm9yKGE9MDthPGQubGVuZ3RoO2ErKylvPShpPWRbYV1bMF0udHJhY2UpLnN0YWNrZ3JvdXB8fFwiXCIsITA9PT1pLnZpc2libGU/KGkuX25leHR0cmFjZT1udWxsLGkuZmlsbCBpbiBuJiYocz1nW29dLGkuX3ByZXZ0cmFjZT1zfHxudWxsLHMmJihzLl9uZXh0dHJhY2U9aSkpLGkuX293bmZpbGw9aS5maWxsJiYoXCJ0b3plcm9cIj09PWkuZmlsbC5zdWJzdHIoMCw2KXx8XCJ0b3NlbGZcIj09PWkuZmlsbHx8XCJ0b1wiPT09aS5maWxsLnN1YnN0cigwLDIpJiYhaS5fcHJldnRyYWNlKSxnW29dPWkpOmkuX3ByZXZ0cmFjZT1pLl9uZXh0dHJhY2U9aS5fb3duZmlsbD1udWxsO3JldHVybiBkfX0se31dLDEwNjk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWFya2VyLHI9ZS5zaXplcmVmfHwxLGk9ZS5zaXplbWlufHwwLGE9XCJhcmVhXCI9PT1lLnNpemVtb2RlP2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQodC9yKX06ZnVuY3Rpb24odCl7cmV0dXJuIHQvcn07cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWEodC8yKTtyZXR1cm4gbihlKSYmZT4wP01hdGgubWF4KGUsaSk6MH19fSx7XCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDEwNzA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e2NvbnRhaW5lcjpcIm1hcmtlclwiLG1pbjpcImNtaW5cIixtYXg6XCJjbWF4XCJ9fSx7fV0sMTA3MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzXCIpLmhhc0NvbG9yc2NhbGUsYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCIpLG89dChcIi4vc3VidHlwZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCxjKXt2YXIgdT1vLmlzQnViYmxlKHQpLGg9KHQubGluZXx8e30pLmNvbG9yOyhjPWN8fHt9LGgmJihyPWgpLGwoXCJtYXJrZXIuc3ltYm9sXCIpLGwoXCJtYXJrZXIub3BhY2l0eVwiLHU/Ljc6MSksbChcIm1hcmtlci5zaXplXCIpLGwoXCJtYXJrZXIuY29sb3JcIixyKSxpKHQsXCJtYXJrZXJcIikmJmEodCxlLHMsbCx7cHJlZml4OlwibWFya2VyLlwiLGNMZXR0ZXI6XCJjXCJ9KSxjLm5vU2VsZWN0fHwobChcInNlbGVjdGVkLm1hcmtlci5jb2xvclwiKSxsKFwidW5zZWxlY3RlZC5tYXJrZXIuY29sb3JcIiksbChcInNlbGVjdGVkLm1hcmtlci5zaXplXCIpLGwoXCJ1bnNlbGVjdGVkLm1hcmtlci5zaXplXCIpKSxjLm5vTGluZXx8KGwoXCJtYXJrZXIubGluZS5jb2xvclwiLGgmJiFBcnJheS5pc0FycmF5KGgpJiZlLm1hcmtlci5jb2xvciE9PWg/aDp1P24uYmFja2dyb3VuZDpuLmRlZmF1bHRMaW5lKSxpKHQsXCJtYXJrZXIubGluZVwiKSYmYSh0LGUscyxsLHtwcmVmaXg6XCJtYXJrZXIubGluZS5cIixjTGV0dGVyOlwiY1wifSksbChcIm1hcmtlci5saW5lLndpZHRoXCIsdT8xOjApKSx1JiYobChcIm1hcmtlci5zaXplcmVmXCIpLGwoXCJtYXJrZXIuc2l6ZW1pblwiKSxsKFwibWFya2VyLnNpemVtb2RlXCIpKSxjLmdyYWRpZW50KSYmKFwibm9uZVwiIT09bChcIm1hcmtlci5ncmFkaWVudC50eXBlXCIpJiZsKFwibWFya2VyLmdyYWRpZW50LmNvbG9yXCIpKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIjo1ODgsXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVyc1wiOjU4OSxcIi4vc3VidHlwZXNcIjoxMDc2fV0sMTA3MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxhPXQoXCIuLi8uLi9saWJcIiksbz1hLmVuc3VyZVNpbmdsZSxzPWEuaWRlbnRpdHksbD10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLGM9dChcIi4vc3VidHlwZXNcIiksdT10KFwiLi9saW5lX3BvaW50c1wiKSxoPXQoXCIuL2xpbmtfdHJhY2VzXCIpLGY9dChcIi4uLy4uL2xpYi9wb2x5Z29uXCIpLnRlc3RlcjtmdW5jdGlvbiBwKHQsZSxyLGgscCxkLGcpe3ZhciB2OyFmdW5jdGlvbih0LGUscixpLG8pe3ZhciBzPXIueGF4aXMsbD1yLnlheGlzLHU9bi5leHRlbnQoYS5zaW1wbGVNYXAocy5yYW5nZSxzLnIyYykpLGg9bi5leHRlbnQoYS5zaW1wbGVNYXAobC5yYW5nZSxsLnIyYykpLGY9aVswXS50cmFjZTtpZighYy5oYXNNYXJrZXJzKGYpKXJldHVybjt2YXIgcD1mLm1hcmtlci5tYXhkaXNwbGF5ZWQ7aWYoMD09PXApcmV0dXJuO3ZhciBkPWkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0Lng+PXVbMF0mJnQueDw9dVsxXSYmdC55Pj1oWzBdJiZ0Lnk8PWhbMV19KSxnPU1hdGguY2VpbChkLmxlbmd0aC9wKSx2PTA7by5mb3JFYWNoKGZ1bmN0aW9uKHQscil7dmFyIG49dFswXS50cmFjZTtjLmhhc01hcmtlcnMobikmJm4ubWFya2VyLm1heGRpc3BsYXllZD4wJiZyPGUmJnYrK30pO3ZhciBtPU1hdGgucm91bmQodipnLzMrTWF0aC5mbG9vcih2LzMpKmcvNy4xKTtpLmZvckVhY2goZnVuY3Rpb24odCl7ZGVsZXRlIHQudmlzfSksZC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7MD09PU1hdGgucm91bmQoKGUrbSklZykmJih0LnZpcz0hMCl9KX0oMCxlLHIsaCxwKTt2YXIgbT0hIWcmJmcuZHVyYXRpb24+MDtmdW5jdGlvbiB5KHQpe3JldHVybiBtP3QudHJhbnNpdGlvbigpOnR9dmFyIHg9ci54YXhpcyxiPXIueWF4aXMsXz1oWzBdLnRyYWNlLHc9Xy5saW5lLGs9bi5zZWxlY3QoZCksQT1vKGssXCJnXCIsXCJlcnJvcmJhcnNcIiksVD1vKGssXCJnXCIsXCJsaW5lc1wiKSxNPW8oayxcImdcIixcInBvaW50c1wiKSxTPW8oayxcImdcIixcInRleHRcIik7aWYoaS5nZXRDb21wb25lbnRNZXRob2QoXCJlcnJvcmJhcnNcIixcInBsb3RcIikodCxBLHIsZyksITA9PT1fLnZpc2libGUpe3ZhciBFLEM7eShrKS5zdHlsZShcIm9wYWNpdHlcIixfLm9wYWNpdHkpO3ZhciBMPV8uZmlsbC5jaGFyQXQoXy5maWxsLmxlbmd0aC0xKTtcInhcIiE9PUwmJlwieVwiIT09TCYmKEw9XCJcIiksci5pc1JhbmdlUGxvdHx8KGhbMF0ubm9kZTM9ayk7dmFyIHosTyxJPVwiXCIsRD1bXSxQPV8uX3ByZXZ0cmFjZTtQJiYoST1QLl9wcmV2UmV2cGF0aHx8XCJcIixDPVAuX25leHRGaWxsLEQ9UC5fcG9seWdvbnMpO3ZhciBSLEYsQixOLGosVixVLHE9XCJcIixIPVwiXCIsRz1bXSxZPWEubm9vcDtpZihFPV8uX293bkZpbGwsYy5oYXNMaW5lcyhfKXx8XCJub25lXCIhPT1fLmZpbGwpe2ZvcihDJiZDLmRhdHVtKGgpLC0xIT09W1wiaHZcIixcInZoXCIsXCJodmhcIixcInZodlwiXS5pbmRleE9mKHcuc2hhcGUpPyhSPWwuc3RlcHMody5zaGFwZSksRj1sLnN0ZXBzKHcuc2hhcGUuc3BsaXQoXCJcIikucmV2ZXJzZSgpLmpvaW4oXCJcIikpKTpSPUY9XCJzcGxpbmVcIj09PXcuc2hhcGU/ZnVuY3Rpb24odCl7dmFyIGU9dFt0Lmxlbmd0aC0xXTtyZXR1cm4gdC5sZW5ndGg+MSYmdFswXVswXT09PWVbMF0mJnRbMF1bMV09PT1lWzFdP2wuc21vb3RoY2xvc2VkKHQuc2xpY2UoMSksdy5zbW9vdGhpbmcpOmwuc21vb3Rob3Blbih0LHcuc21vb3RoaW5nKX06ZnVuY3Rpb24odCl7cmV0dXJuXCJNXCIrdC5qb2luKFwiTFwiKX0sQj1mdW5jdGlvbih0KXtyZXR1cm4gRih0LnJldmVyc2UoKSl9LEc9dShoLHt4YXhpczp4LHlheGlzOmIsY29ubmVjdEdhcHM6Xy5jb25uZWN0Z2FwcyxiYXNlVG9sZXJhbmNlOk1hdGgubWF4KHcud2lkdGh8fDEsMykvNCxzaGFwZTp3LnNoYXBlLHNpbXBsaWZ5Oncuc2ltcGxpZnksZmlsbDpfLmZpbGx9KSxVPV8uX3BvbHlnb25zPW5ldyBBcnJheShHLmxlbmd0aCksdj0wO3Y8Ry5sZW5ndGg7disrKV8uX3BvbHlnb25zW3ZdPWYoR1t2XSk7Ry5sZW5ndGgmJihOPUdbMF1bMF0sVj0oaj1HW0cubGVuZ3RoLTFdKVtqLmxlbmd0aC0xXSksWT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoej1SKGUpLE89QihlKSxxP0w/KHErPVwiTFwiK3ouc3Vic3RyKDEpLEg9TytcIkxcIitILnN1YnN0cigxKSk6KHErPVwiWlwiK3osSD1PK1wiWlwiK0gpOihxPXosSD1PKSxjLmhhc0xpbmVzKF8pJiZlLmxlbmd0aD4xKXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtpZihyLmRhdHVtKGgpLHQpeShyLnN0eWxlKFwib3BhY2l0eVwiLDApLmF0dHIoXCJkXCIseikuY2FsbChsLmxpbmVHcm91cFN0eWxlKSkuc3R5bGUoXCJvcGFjaXR5XCIsMSk7ZWxzZXt2YXIgaT15KHIpO2kuYXR0cihcImRcIix6KSxsLnNpbmdsZUxpbmVTdHlsZShoLGkpfX19fX12YXIgVz1ULnNlbGVjdEFsbChcIi5qcy1saW5lXCIpLmRhdGEoRyk7eShXLmV4aXQoKSkuc3R5bGUoXCJvcGFjaXR5XCIsMCkucmVtb3ZlKCksVy5lYWNoKFkoITEpKSxXLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5jbGFzc2VkKFwianMtbGluZVwiLCEwKS5zdHlsZShcInZlY3Rvci1lZmZlY3RcIixcIm5vbi1zY2FsaW5nLXN0cm9rZVwiKS5jYWxsKGwubGluZUdyb3VwU3R5bGUpLmVhY2goWSghMCkpLGwuc2V0Q2xpcFVybChXLHIubGF5ZXJDbGlwSWQsdCksRy5sZW5ndGg/KEU/KEUuZGF0dW0oaCksTiYmViYmKEw/KFwieVwiPT09TD9OWzFdPVZbMV09Yi5jMnAoMCwhMCk6XCJ4XCI9PT1MJiYoTlswXT1WWzBdPXguYzJwKDAsITApKSx5KEUpLmF0dHIoXCJkXCIsXCJNXCIrVitcIkxcIitOK1wiTFwiK3Euc3Vic3RyKDEpKS5jYWxsKGwuc2luZ2xlRmlsbFN0eWxlKSk6eShFKS5hdHRyKFwiZFwiLHErXCJaXCIpLmNhbGwobC5zaW5nbGVGaWxsU3R5bGUpKSk6QyYmKFwidG9uZXh0XCI9PT1fLmZpbGwuc3Vic3RyKDAsNikmJnEmJkk/KFwidG9uZXh0XCI9PT1fLmZpbGw/eShDKS5hdHRyKFwiZFwiLHErXCJaXCIrSStcIlpcIikuY2FsbChsLnNpbmdsZUZpbGxTdHlsZSk6eShDKS5hdHRyKFwiZFwiLHErXCJMXCIrSS5zdWJzdHIoMSkrXCJaXCIpLmNhbGwobC5zaW5nbGVGaWxsU3R5bGUpLF8uX3BvbHlnb25zPV8uX3BvbHlnb25zLmNvbmNhdChEKSk6KFooQyksXy5fcG9seWdvbnM9bnVsbCkpLF8uX3ByZXZSZXZwYXRoPUgsXy5fcHJldlBvbHlnb25zPVUpOihFP1ooRSk6QyYmWihDKSxfLl9wb2x5Z29ucz1fLl9wcmV2UmV2cGF0aD1fLl9wcmV2UG9seWdvbnM9bnVsbCksTS5kYXR1bShoKSxTLmRhdHVtKGgpLGZ1bmN0aW9uKGUsaSxhKXt2YXIgbyx1PWFbMF0udHJhY2UsaD1jLmhhc01hcmtlcnModSksZj1jLmhhc1RleHQodSkscD10dCh1KSxkPWV0LGc9ZXQ7aWYoaHx8Zil7dmFyIHY9cyxfPXUuc3RhY2tncm91cCx3PV8mJlwiaW5mZXIgemVyb1wiPT09dC5fZnVsbExheW91dC5fc2NhdHRlclN0YWNrT3B0c1t4Ll9pZCtiLl9pZF1bX10uc3RhY2tnYXBzO3UubWFya2VyLm1heGRpc3BsYXllZHx8dS5fbmVlZHNDdWxsP3Y9dz9KOiQ6XyYmIXcmJih2PUspLGgmJihkPXYpLGYmJihnPXYpfXZhciBrLEE9KG89ZS5zZWxlY3RBbGwoXCJwYXRoLnBvaW50XCIpLmRhdGEoZCxwKSkuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoXCJwb2ludFwiLCEwKTttJiZBLmNhbGwobC5wb2ludFN0eWxlLHUsdCkuY2FsbChsLnRyYW5zbGF0ZVBvaW50cyx4LGIpLnN0eWxlKFwib3BhY2l0eVwiLDApLnRyYW5zaXRpb24oKS5zdHlsZShcIm9wYWNpdHlcIiwxKSxvLm9yZGVyKCksaCYmKGs9bC5tYWtlUG9pbnRTdHlsZUZucyh1KSksby5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLGE9eShpKTtsLnRyYW5zbGF0ZVBvaW50KGUsYSx4LGIpPyhsLnNpbmdsZVBvaW50U3R5bGUoZSxhLHUsayx0KSxyLmxheWVyQ2xpcElkJiZsLmhpZGVPdXRzaWRlUmFuZ2VQb2ludChlLGEseCxiLHUueGNhbGVuZGFyLHUueWNhbGVuZGFyKSx1LmN1c3RvbWRhdGEmJmkuY2xhc3NlZChcInBsb3RseS1jdXN0b21kYXRhXCIsbnVsbCE9PWUuZGF0YSYmdm9pZCAwIT09ZS5kYXRhKSk6YS5yZW1vdmUoKX0pLG0/by5leGl0KCkudHJhbnNpdGlvbigpLnN0eWxlKFwib3BhY2l0eVwiLDApLnJlbW92ZSgpOm8uZXhpdCgpLnJlbW92ZSgpLChvPWkuc2VsZWN0QWxsKFwiZ1wiKS5kYXRhKGcscCkpLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwidGV4dHBvaW50XCIsITApLmFwcGVuZChcInRleHRcIiksby5vcmRlcigpLG8uZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxpPXkoZS5zZWxlY3QoXCJ0ZXh0XCIpKTtsLnRyYW5zbGF0ZVBvaW50KHQsaSx4LGIpP3IubGF5ZXJDbGlwSWQmJmwuaGlkZU91dHNpZGVSYW5nZVBvaW50KHQsZSx4LGIsdS54Y2FsZW5kYXIsdS55Y2FsZW5kYXIpOmUucmVtb3ZlKCl9KSxvLnNlbGVjdEFsbChcInRleHRcIikuY2FsbChsLnRleHRQb2ludFN0eWxlLHUsdCkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT14LmMycCh0LngpLHI9Yi5jMnAodC55KTtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoXCJ0c3Bhbi5saW5lXCIpLmVhY2goZnVuY3Rpb24oKXt5KG4uc2VsZWN0KHRoaXMpKS5hdHRyKHt4OmUseTpyfSl9KX0pLG8uZXhpdCgpLnJlbW92ZSgpfShNLFMsaCk7dmFyIFg9ITE9PT1fLmNsaXBvbmF4aXM/bnVsbDpyLmxheWVyQ2xpcElkO2wuc2V0Q2xpcFVybChNLFgsdCksbC5zZXRDbGlwVXJsKFMsWCx0KX1mdW5jdGlvbiBaKHQpe3kodCkuYXR0cihcImRcIixcIk0wLDBaXCIpfWZ1bmN0aW9uICQodCl7cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiF0LmdhcCYmdC52aXN9KX1mdW5jdGlvbiBKKHQpe3JldHVybiB0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC52aXN9KX1mdW5jdGlvbiBLKHQpe3JldHVybiB0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hdC5nYXB9KX1mdW5jdGlvbiBRKHQpe3JldHVybiB0LmlkfWZ1bmN0aW9uIHR0KHQpe2lmKHQuaWRzKXJldHVybiBRfWZ1bmN0aW9uIGV0KCl7cmV0dXJuITF9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLGEsYyl7dmFyIHUsZixkPSFhLGc9ISFhJiZhLmR1cmF0aW9uPjAsdj1oKHQsZSxyKTsoKHU9aS5zZWxlY3RBbGwoXCJnLnRyYWNlXCIpLmRhdGEodixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS51aWR9KSkuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhY2Ugc2NhdHRlciB0cmFjZVwiK3RbMF0udHJhY2UudWlkfSkuc3R5bGUoXCJzdHJva2UtbWl0ZXJsaW1pdFwiLDIpLHUub3JkZXIoKSxmdW5jdGlvbih0LGUscil7ZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPW8obi5zZWxlY3QodGhpcyksXCJnXCIsXCJmaWxsc1wiKTtsLnNldENsaXBVcmwoaSxyLmxheWVyQ2xpcElkLHQpO3ZhciBhPWVbMF0udHJhY2UsYz1bXTthLl9vd25maWxsJiZjLnB1c2goXCJfb3duRmlsbFwiKSxhLl9uZXh0dHJhY2UmJmMucHVzaChcIl9uZXh0RmlsbFwiKTt2YXIgdT1pLnNlbGVjdEFsbChcImdcIikuZGF0YShjLHMpO3UuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLHUuZXhpdCgpLmVhY2goZnVuY3Rpb24odCl7YVt0XT1udWxsfSkucmVtb3ZlKCksdS5vcmRlcigpLmVhY2goZnVuY3Rpb24odCl7YVt0XT1vKG4uc2VsZWN0KHRoaXMpLFwicGF0aFwiLFwianMtZmlsbFwiKX0pfSl9KHQsdSxlKSxnKT8oYyYmKGY9YygpKSxuLnRyYW5zaXRpb24oKS5kdXJhdGlvbihhLmR1cmF0aW9uKS5lYXNlKGEuZWFzaW5nKS5lYWNoKFwiZW5kXCIsZnVuY3Rpb24oKXtmJiZmKCl9KS5lYWNoKFwiaW50ZXJydXB0XCIsZnVuY3Rpb24oKXtmJiZmKCl9KS5lYWNoKGZ1bmN0aW9uKCl7aS5zZWxlY3RBbGwoXCJnLnRyYWNlXCIpLmVhY2goZnVuY3Rpb24ocixuKXtwKHQsbixlLHIsdix0aGlzLGEpfSl9KSk6dS5lYWNoKGZ1bmN0aW9uKHIsbil7cCh0LG4sZSxyLHYsdGhpcyxhKX0pO2QmJnUuZXhpdCgpLnJlbW92ZSgpLGkuc2VsZWN0QWxsKFwicGF0aDpub3QoW2RdKVwiKS5yZW1vdmUoKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9wb2x5Z29uXCI6NzEzLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2xpbmVfcG9pbnRzXCI6MTA2NixcIi4vbGlua190cmFjZXNcIjoxMDY4LFwiLi9zdWJ0eXBlc1wiOjEwNzYsZDM6MTU1fV0sMTA3MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL3N1YnR5cGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYSxvLHM9dC5jZCxsPXQueGF4aXMsYz10LnlheGlzLHU9W10saD1zWzBdLnRyYWNlO2lmKCFuLmhhc01hcmtlcnMoaCkmJiFuLmhhc1RleHQoaCkpcmV0dXJuW107aWYoITE9PT1lKWZvcihyPTA7cjxzLmxlbmd0aDtyKyspc1tyXS5zZWxlY3RlZD0wO2Vsc2UgZm9yKHI9MDtyPHMubGVuZ3RoO3IrKylpPXNbcl0sYT1sLmMycChpLngpLG89Yy5jMnAoaS55KSxudWxsIT09aS5pJiZlLmNvbnRhaW5zKFthLG9dLCExLHIsdCk/KHUucHVzaCh7cG9pbnROdW1iZXI6aS5pLHg6bC5jMmQoaS54KSx5OmMuYzJkKGkueSl9KSxpLnNlbGVjdGVkPTEpOmkuc2VsZWN0ZWQ9MDtyZXR1cm4gdX19LHtcIi4vc3VidHlwZXNcIjoxMDc2fV0sMTA3NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPVtcIm9yaWVudGF0aW9uXCIsXCJncm91cG5vcm1cIixcInN0YWNrZ2Fwc1wiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9ci5fc2NhdHRlclN0YWNrT3B0cyxvPWkoXCJzdGFja2dyb3VwXCIpO2lmKG8pe3ZhciBzPWUueGF4aXMrZS55YXhpcyxsPWFbc107bHx8KGw9YVtzXT17fSk7dmFyIGM9bFtvXSx1PSExO2M/Yy50cmFjZXMucHVzaChlKTooYz1sW29dPXt0cmFjZUluZGljZXM6W10sdHJhY2VzOltlXX0sdT0hMCk7Zm9yKHZhciBoPXtvcmllbnRhdGlvbjplLngmJiFlLnk/XCJoXCI6XCJ2XCJ9LGY9MDtmPG4ubGVuZ3RoO2YrKyl7dmFyIHA9bltmXSxkPXArXCJGb3VuZFwiO2lmKCFjW2RdKXt2YXIgZz12b2lkIDAhPT10W3BdLHY9XCJvcmllbnRhdGlvblwiPT09cDtpZigoZ3x8dSkmJihjW3BdPWkocCxoW3BdKSx2JiYoYy5maWxsRGZsdD1cImhcIj09PWNbcF0/XCJ0b25leHR4XCI6XCJ0b25leHR5XCIpLGcmJihjW2RdPSEwLCF1JiYoZGVsZXRlIGMudHJhY2VzWzBdW3BdLHYpKSkpZm9yKHZhciBtPTA7bTxjLnRyYWNlcy5sZW5ndGgtMTttKyspe3ZhciB5PWMudHJhY2VzW21dO3kuX2lucHV0LmZpbGwhPT15LmZpbGwmJih5LmZpbGw9Yy5maWxsRGZsdCl9fX1yZXR1cm4gY319fSx7fV0sMTA3NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksYT10KFwiLi4vLi4vcmVnaXN0cnlcIik7ZnVuY3Rpb24gbyh0LGUscil7aS5wb2ludFN0eWxlKHQuc2VsZWN0QWxsKFwicGF0aC5wb2ludFwiKSxlLHIpfWZ1bmN0aW9uIHModCxlLHIpe2kudGV4dFBvaW50U3R5bGUodC5zZWxlY3RBbGwoXCJ0ZXh0XCIpLGUscil9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUpe3ZhciByPWU/ZVswXS5ub2RlMzpuLnNlbGVjdCh0KS5zZWxlY3RBbGwoXCJnLnRyYWNlLnNjYXR0ZXJcIik7ci5zdHlsZShcIm9wYWNpdHlcIixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSksci5zZWxlY3RBbGwoXCJnLnBvaW50c1wiKS5lYWNoKGZ1bmN0aW9uKGUpe28obi5zZWxlY3QodGhpcyksZS50cmFjZXx8ZVswXS50cmFjZSx0KX0pLHIuc2VsZWN0QWxsKFwiZy50ZXh0XCIpLmVhY2goZnVuY3Rpb24oZSl7cyhuLnNlbGVjdCh0aGlzKSxlLnRyYWNlfHxlWzBdLnRyYWNlLHQpfSksci5zZWxlY3RBbGwoXCJnLnRyYWNlIHBhdGguanMtbGluZVwiKS5jYWxsKGkubGluZUdyb3VwU3R5bGUpLHIuc2VsZWN0QWxsKFwiZy50cmFjZSBwYXRoLmpzLWZpbGxcIikuY2FsbChpLmZpbGxHcm91cFN0eWxlKSxhLmdldENvbXBvbmVudE1ldGhvZChcImVycm9yYmFyc1wiLFwic3R5bGVcIikocil9LHN0eWxlUG9pbnRzOm8sc3R5bGVUZXh0OnMsc3R5bGVPblNlbGVjdDpmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0ubm9kZTMsbj1lWzBdLnRyYWNlO24uc2VsZWN0ZWRwb2ludHM/KGkuc2VsZWN0ZWRQb2ludFN0eWxlKHIuc2VsZWN0QWxsKFwicGF0aC5wb2ludFwiKSxuKSxpLnNlbGVjdGVkVGV4dFN0eWxlKHIuc2VsZWN0QWxsKFwidGV4dFwiKSxuKSk6KG8ocixuLHQpLHMocixuLHQpKX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxkMzoxNTV9XSwxMDc2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKTtlLmV4cG9ydHM9e2hhc0xpbmVzOmZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGUmJnQubW9kZSYmLTEhPT10Lm1vZGUuaW5kZXhPZihcImxpbmVzXCIpfSxoYXNNYXJrZXJzOmZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGUmJih0Lm1vZGUmJi0xIT09dC5tb2RlLmluZGV4T2YoXCJtYXJrZXJzXCIpfHxcInNwbG9tXCI9PT10LnR5cGUpfSxoYXNUZXh0OmZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGUmJnQubW9kZSYmLTEhPT10Lm1vZGUuaW5kZXhPZihcInRleHRcIil9LGlzQnViYmxlOmZ1bmN0aW9uKHQpe3JldHVybiBuLmlzUGxhaW5PYmplY3QodC5tYXJrZXIpJiZuLmlzQXJyYXlPclR5cGVkQXJyYXkodC5tYXJrZXIuc2l6ZSl9fX0se1wiLi4vLi4vbGliXCI6NzAxfV0sMTA3NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksYSl7YT1hfHx7fSxpKFwidGV4dHBvc2l0aW9uXCIpLG4uY29lcmNlRm9udChpLFwidGV4dGZvbnRcIixyLmZvbnQpLGEubm9TZWxlY3R8fChpKFwic2VsZWN0ZWQudGV4dGZvbnQuY29sb3JcIiksaShcInVuc2VsZWN0ZWQudGV4dGZvbnQuY29sb3JcIikpfX0se1wiLi4vLi4vbGliXCI6NzAxfV0sMTA3ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcmVnaXN0cnlcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvLHM9YShcInhcIiksbD1hKFwieVwiKTtpZihpLmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiaGFuZGxlVHJhY2VEZWZhdWx0c1wiKSh0LGUsW1wieFwiLFwieVwiXSxyKSxzKXt2YXIgYz1uLm1pblJvd0xlbmd0aChzKTtsP289TWF0aC5taW4oYyxuLm1pblJvd0xlbmd0aChsKSk6KG89YyxhKFwieTBcIiksYShcImR5XCIpKX1lbHNle2lmKCFsKXJldHVybiAwO289bi5taW5Sb3dMZW5ndGgobCksYShcIngwXCIpLGEoXCJkeFwiKX1yZXR1cm4gZS5fbGVuZ3RoPW8sb319LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5fV0sMTA3OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9jb25zdGFudHMvZ2wzZF9kYXNoZXNcIiksbD10KFwiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2Vyc1wiKSxjPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsdT10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbCxoPW4ubGluZSxmPW4ubWFya2VyLHA9Zi5saW5lLGQ9Yyh7d2lkdGg6aC53aWR0aCxkYXNoOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpPYmplY3Qua2V5cyhzKSxkZmx0Olwic29saWRcIn19LGkoXCJsaW5lXCIpKTt2YXIgZz1lLmV4cG9ydHM9dSh7eDpuLngseTpuLnksejp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIn0sdGV4dDpjKHt9LG4udGV4dCx7fSksaG92ZXJ0ZXh0OmMoe30sbi5ob3ZlcnRleHQse30pLGhvdmVydGVtcGxhdGU6YSgpLG1vZGU6Yyh7fSxuLm1vZGUse2RmbHQ6XCJsaW5lcyttYXJrZXJzXCJ9KSxzdXJmYWNlYXhpczp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6Wy0xLDAsMSwyXSxkZmx0Oi0xfSxzdXJmYWNlY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwifSxwcm9qZWN0aW9uOnt4OntzaG93Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LG9wYWNpdHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjF9LHNjYWxlOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEwLGRmbHQ6Mi8zfX0seTp7c2hvdzp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxvcGFjaXR5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDoxfSxzY2FsZTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxMCxkZmx0OjIvM319LHo6e3Nob3c6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sb3BhY2l0eTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MX0sc2NhbGU6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MTAsZGZsdDoyLzN9fX0sY29ubmVjdGdhcHM6bi5jb25uZWN0Z2FwcyxsaW5lOmQsbWFya2VyOmMoe3N5bWJvbDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6T2JqZWN0LmtleXMobCksZGZsdDpcImNpcmNsZVwiLGFycmF5T2s6ITB9LHNpemU6Yyh7fSxmLnNpemUse2RmbHQ6OH0pLHNpemVyZWY6Zi5zaXplcmVmLHNpemVtaW46Zi5zaXplbWluLHNpemVtb2RlOmYuc2l6ZW1vZGUsb3BhY2l0eTpjKHt9LGYub3BhY2l0eSx7YXJyYXlPazohMX0pLGNvbG9yYmFyOmYuY29sb3JiYXIsbGluZTpjKHt3aWR0aDpjKHt9LHAud2lkdGgse2FycmF5T2s6ITF9KX0saShcIm1hcmtlci5saW5lXCIpKX0saShcIm1hcmtlclwiKSksdGV4dHBvc2l0aW9uOmMoe30sbi50ZXh0cG9zaXRpb24se2RmbHQ6XCJ0b3AgY2VudGVyXCJ9KSx0ZXh0Zm9udDp7Y29sb3I6bi50ZXh0Zm9udC5jb2xvcixzaXplOm4udGV4dGZvbnQuc2l6ZSxmYW1pbHk6Yyh7fSxuLnRleHRmb250LmZhbWlseSx7YXJyYXlPazohMX0pfSxob3ZlcmluZm86Yyh7fSxvLmhvdmVyaW5mbyl9LFwiY2FsY1wiLFwibmVzdGVkXCIpO2cueC5lZGl0VHlwZT1nLnkuZWRpdFR5cGU9Zy56LmVkaXRUeXBlPVwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vY29uc3RhbnRzL2dsM2RfZGFzaGVzXCI6Njc1LFwiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2Vyc1wiOjY3NixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiOjc0NixcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiOjEwNTJ9XSwxMDgwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhXCIpLGk9dChcIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPVt7eDohMSx5OiExLHRyYWNlOmUsdDp7fX1dO3JldHVybiBuKHIsZSksaSh0LGUpLHJ9fSx7XCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YVwiOjEwNTEsXCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsY1wiOjEwNTV9XSwxMDgxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpO2Z1bmN0aW9uIGkodCxlLHIsaSl7aWYoIWV8fCFlLnZpc2libGUpcmV0dXJuIG51bGw7Zm9yKHZhciBhPW4uZ2V0Q29tcG9uZW50TWV0aG9kKFwiZXJyb3JiYXJzXCIsXCJtYWtlQ29tcHV0ZUVycm9yXCIpKGUpLG89bmV3IEFycmF5KHQubGVuZ3RoKSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPWEoK3Rbc10scyk7aWYoXCJsb2dcIj09PWkudHlwZSl7dmFyIGM9aS5jMmwodFtzXSksdT10W3NdLWxbMF0saD10W3NdK2xbMV07aWYob1tzXT1bKGkuYzJsKHUsITApLWMpKnIsKGkuYzJsKGgsITApLWMpKnJdLHU+MCl7dmFyIGY9aS5jMmwodSk7aS5fbG93ZXJMb2dFcnJvckJvdW5kfHwoaS5fbG93ZXJMb2dFcnJvckJvdW5kPWYpLGkuX2xvd2VyRXJyb3JCb3VuZD1NYXRoLm1pbihpLl9sb3dlckxvZ0Vycm9yQm91bmQsZil9fWVsc2Ugb1tzXT1bLWxbMF0qcixsWzFdKnJdfXJldHVybiBvfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49W2kodC54LHQuZXJyb3JfeCxlWzBdLHIueGF4aXMpLGkodC55LHQuZXJyb3JfeSxlWzFdLHIueWF4aXMpLGkodC56LHQuZXJyb3JfeixlWzJdLHIuemF4aXMpXSxhPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKHRbZV0pcmV0dXJuIHRbZV0ubGVuZ3RoO3JldHVybiAwfShuKTtpZigwPT09YSlyZXR1cm4gbnVsbDtmb3IodmFyIG89bmV3IEFycmF5KGEpLHM9MDtzPGE7cysrKXtmb3IodmFyIGw9W1swLDAsMF0sWzAsMCwwXV0sYz0wO2M8MztjKyspaWYobltjXSlmb3IodmFyIHU9MDt1PDI7dSsrKWxbdV1bY109bltjXVtzXVt1XTtvW3NdPWx9cmV0dXJuIG99fSx7XCIuLi8uLi9yZWdpc3RyeVwiOjgyOX1dLDEwODI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2wtbGluZTNkXCIpLGk9dChcImdsLXNjYXR0ZXIzZFwiKSxhPXQoXCJnbC1lcnJvcjNkXCIpLG89dChcImdsLW1lc2gzZFwiKSxzPXQoXCJkZWxhdW5heS10cmlhbmd1bGF0ZVwiKSxsPXQoXCIuLi8uLi9saWJcIiksYz10KFwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiKSx1PXQoXCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yXCIpLmZvcm1hdENvbG9yLGg9dChcIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jXCIpLGY9dChcIi4uLy4uL2NvbnN0YW50cy9nbDNkX2Rhc2hlc1wiKSxwPXQoXCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzXCIpLGQ9dChcIi4vY2FsY19lcnJvcnNcIik7ZnVuY3Rpb24gZyh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMubGluZVBsb3Q9bnVsbCx0aGlzLnNjYXR0ZXJQbG90PW51bGwsdGhpcy5lcnJvckJhcnM9bnVsbCx0aGlzLnRleHRNYXJrZXJzPW51bGwsdGhpcy5kZWxhdW5heU1lc2g9bnVsbCx0aGlzLmNvbG9yPW51bGwsdGhpcy5tb2RlPVwiXCIsdGhpcy5kYXRhUG9pbnRzPVtdLHRoaXMuYXhlc0JvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLnRleHRMYWJlbHM9bnVsbCx0aGlzLmRhdGE9bnVsbH12YXIgdj1nLnByb3RvdHlwZTtmdW5jdGlvbiBtKHQpe3JldHVybiBudWxsPT10PzA6dC5pbmRleE9mKFwibGVmdFwiKT4tMT8tMTp0LmluZGV4T2YoXCJyaWdodFwiKT4tMT8xOjB9ZnVuY3Rpb24geSh0KXtyZXR1cm4gbnVsbD09dD8wOnQuaW5kZXhPZihcInRvcFwiKT4tMT8tMTp0LmluZGV4T2YoXCJib3R0b21cIik+LTE/MTowfWZ1bmN0aW9uIHgodCxlKXtyZXR1cm4gZSg0KnQpfWZ1bmN0aW9uIGIodCl7cmV0dXJuIHBbdF19ZnVuY3Rpb24gXyh0LGUscixuLGkpe3ZhciBhPW51bGw7aWYobC5pc0FycmF5T3JUeXBlZEFycmF5KHQpKXthPVtdO2Zvcih2YXIgbz0wO288ZTtvKyspdm9pZCAwPT09dFtvXT9hW29dPW46YVtvXT1yKHRbb10saSl9ZWxzZSBhPXIodCxsLmlkZW50aXR5KTtyZXR1cm4gYX1mdW5jdGlvbiB3KHQsZSl7dmFyIHIsbixpLGEsbyxzLGY9W10scD10LmZ1bGxTY2VuZUxheW91dCxnPXQuZGF0YVNjYWxlLHY9cC54YXhpcyx3PXAueWF4aXMsaz1wLnpheGlzLEE9ZS5tYXJrZXIsVD1lLmxpbmUsTT1lLnh8fFtdLFM9ZS55fHxbXSxFPWUuenx8W10sQz1NLmxlbmd0aCxMPWUueGNhbGVuZGFyLHo9ZS55Y2FsZW5kYXIsTz1lLnpjYWxlbmRhcjtmb3Iobz0wO288QztvKyspcj12LmQybChNW29dLDAsTCkqZ1swXSxuPXcuZDJsKFNbb10sMCx6KSpnWzFdLGk9ay5kMmwoRVtvXSwwLE8pKmdbMl0sZltvXT1bcixuLGldO2lmKEFycmF5LmlzQXJyYXkoZS50ZXh0KSlzPWUudGV4dDtlbHNlIGlmKHZvaWQgMCE9PWUudGV4dClmb3Iocz1uZXcgQXJyYXkoQyksbz0wO288QztvKyspc1tvXT1lLnRleHQ7aWYoYT17cG9zaXRpb246Zixtb2RlOmUubW9kZSx0ZXh0OnN9LFwibGluZVwiaW4gZSYmKGEubGluZUNvbG9yPXUoVCwxLEMpLGEubGluZVdpZHRoPVQud2lkdGgsYS5saW5lRGFzaGVzPVQuZGFzaCksXCJtYXJrZXJcImluIGUpe3ZhciBJPWgoZSk7YS5zY2F0dGVyQ29sb3I9dShBLDEsQyksYS5zY2F0dGVyU2l6ZT1fKEEuc2l6ZSxDLHgsMjAsSSksYS5zY2F0dGVyTWFya2VyPV8oQS5zeW1ib2wsQyxiLFwiXFx1MjVjZlwiKSxhLnNjYXR0ZXJMaW5lV2lkdGg9QS5saW5lLndpZHRoLGEuc2NhdHRlckxpbmVDb2xvcj11KEEubGluZSwxLEMpLGEuc2NhdHRlckFuZ2xlPTB9XCJ0ZXh0cG9zaXRpb25cImluIGUmJihhLnRleHRPZmZzZXQ9ZnVuY3Rpb24odCl7dmFyIGU9WzAsMF07aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllW3JdPVswLDBdLHRbcl0mJihlW3JdWzBdPW0odFtyXSksZVtyXVsxXT15KHRbcl0pKTtlbHNlIGVbMF09bSh0KSxlWzFdPXkodCk7cmV0dXJuIGV9KGUudGV4dHBvc2l0aW9uKSxhLnRleHRDb2xvcj11KGUudGV4dGZvbnQsMSxDKSxhLnRleHRTaXplPV8oZS50ZXh0Zm9udC5zaXplLEMsbC5pZGVudGl0eSwxMiksYS50ZXh0Rm9udD1lLnRleHRmb250LmZhbWlseSxhLnRleHRBbmdsZT0wKTt2YXIgRD1bXCJ4XCIsXCJ5XCIsXCJ6XCJdO2ZvcihhLnByb2plY3Q9WyExLCExLCExXSxhLnByb2plY3RTY2FsZT1bMSwxLDFdLGEucHJvamVjdE9wYWNpdHk9WzEsMSwxXSxvPTA7bzwzOysrbyl7dmFyIFA9ZS5wcm9qZWN0aW9uW0Rbb11dOyhhLnByb2plY3Rbb109UC5zaG93KSYmKGEucHJvamVjdE9wYWNpdHlbb109UC5vcGFjaXR5LGEucHJvamVjdFNjYWxlW29dPVAuc2NhbGUpfWEuZXJyb3JCb3VuZHM9ZChlLGcscCk7dmFyIFI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVswLDAsMF0scj1bWzAsMCwwXSxbMCwwLDBdLFswLDAsMF1dLG49WzEsMSwxXSxpPTA7aTwzO2krKyl7dmFyIGE9dFtpXTthJiYhMSE9PWEuY29weV96c3R5bGUmJiExIT09dFsyXS52aXNpYmxlJiYoYT10WzJdKSxhJiZhLnZpc2libGUmJihlW2ldPWEud2lkdGgvMixyW2ldPWMoYS5jb2xvciksbltpXT1hLnRoaWNrbmVzcyl9cmV0dXJue2NhcFNpemU6ZSxjb2xvcjpyLGxpbmVXaWR0aDpufX0oW2UuZXJyb3JfeCxlLmVycm9yX3ksZS5lcnJvcl96XSk7cmV0dXJuIGEuZXJyb3JDb2xvcj1SLmNvbG9yLGEuZXJyb3JMaW5lV2lkdGg9Ui5saW5lV2lkdGgsYS5lcnJvckNhcFNpemU9Ui5jYXBTaXplLGEuZGVsYXVuYXlBeGlzPWUuc3VyZmFjZWF4aXMsYS5kZWxhdW5heUNvbG9yPWMoZS5zdXJmYWNlY29sb3IpLGF9ZnVuY3Rpb24gayh0KXtpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgZT10WzBdO3JldHVybiBBcnJheS5pc0FycmF5KGUpJiYodD1lKSxcInJnYihcIit0LnNsaWNlKDAsMykubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKDI1NSp0KX0pK1wiKVwifXJldHVybiBudWxsfXYuaGFuZGxlUGljaz1mdW5jdGlvbih0KXtpZih0Lm9iamVjdCYmKHQub2JqZWN0PT09dGhpcy5saW5lUGxvdHx8dC5vYmplY3Q9PT10aGlzLmRlbGF1bmF5TWVzaHx8dC5vYmplY3Q9PT10aGlzLnRleHRNYXJrZXJzfHx0Lm9iamVjdD09PXRoaXMuc2NhdHRlclBsb3QpKXt2YXIgZT10LmluZGV4PXQuZGF0YS5pbmRleDtyZXR1cm4gdC5vYmplY3QuaGlnaGxpZ2h0JiZ0Lm9iamVjdC5oaWdobGlnaHQobnVsbCksdGhpcy5zY2F0dGVyUGxvdCYmKHQub2JqZWN0PXRoaXMuc2NhdHRlclBsb3QsdGhpcy5zY2F0dGVyUGxvdC5oaWdobGlnaHQodC5kYXRhKSksdC50ZXh0TGFiZWw9XCJcIix0aGlzLnRleHRMYWJlbHMmJihBcnJheS5pc0FycmF5KHRoaXMudGV4dExhYmVscyk/KHRoaXMudGV4dExhYmVsc1tlXXx8MD09PXRoaXMudGV4dExhYmVsc1tlXSkmJih0LnRleHRMYWJlbD10aGlzLnRleHRMYWJlbHNbZV0pOnQudGV4dExhYmVsPXRoaXMudGV4dExhYmVscyksdC50cmFjZUNvb3JkaW5hdGU9W3RoaXMuZGF0YS54W2VdLHRoaXMuZGF0YS55W2VdLHRoaXMuZGF0YS56W2VdXSwhMH19LHYudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbCxjLHU9dGhpcy5zY2VuZS5nbHBsb3QuZ2wsaD1mLnNvbGlkO3RoaXMuZGF0YT10O3ZhciBwPXcodGhpcy5zY2VuZSx0KTtcIm1vZGVcImluIHAmJih0aGlzLm1vZGU9cC5tb2RlKSxcImxpbmVEYXNoZXNcImluIHAmJnAubGluZURhc2hlcyBpbiBmJiYoaD1mW3AubGluZURhc2hlc10pLHRoaXMuY29sb3I9ayhwLnNjYXR0ZXJDb2xvcil8fGsocC5saW5lQ29sb3IpLHRoaXMuZGF0YVBvaW50cz1wLnBvc2l0aW9uLGU9e2dsOnRoaXMuc2NlbmUuZ2xwbG90LmdsLHBvc2l0aW9uOnAucG9zaXRpb24sY29sb3I6cC5saW5lQ29sb3IsbGluZVdpZHRoOnAubGluZVdpZHRofHwxLGRhc2hlczpoWzBdLGRhc2hTY2FsZTpoWzFdLG9wYWNpdHk6dC5vcGFjaXR5LGNvbm5lY3RHYXBzOnQuY29ubmVjdGdhcHN9LC0xIT09dGhpcy5tb2RlLmluZGV4T2YoXCJsaW5lc1wiKT90aGlzLmxpbmVQbG90P3RoaXMubGluZVBsb3QudXBkYXRlKGUpOih0aGlzLmxpbmVQbG90PW4oZSksdGhpcy5saW5lUGxvdC5fdHJhY2U9dGhpcyx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5saW5lUGxvdCkpOnRoaXMubGluZVBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5saW5lUGxvdCksdGhpcy5saW5lUGxvdC5kaXNwb3NlKCksdGhpcy5saW5lUGxvdD1udWxsKTt2YXIgZD10Lm9wYWNpdHk7aWYodC5tYXJrZXImJnQubWFya2VyLm9wYWNpdHkmJihkKj10Lm1hcmtlci5vcGFjaXR5KSxyPXtnbDp0aGlzLnNjZW5lLmdscGxvdC5nbCxwb3NpdGlvbjpwLnBvc2l0aW9uLGNvbG9yOnAuc2NhdHRlckNvbG9yLHNpemU6cC5zY2F0dGVyU2l6ZSxnbHlwaDpwLnNjYXR0ZXJNYXJrZXIsb3BhY2l0eTpkLG9ydGhvZ3JhcGhpYzohMCxsaW5lV2lkdGg6cC5zY2F0dGVyTGluZVdpZHRoLGxpbmVDb2xvcjpwLnNjYXR0ZXJMaW5lQ29sb3IscHJvamVjdDpwLnByb2plY3QscHJvamVjdFNjYWxlOnAucHJvamVjdFNjYWxlLHByb2plY3RPcGFjaXR5OnAucHJvamVjdE9wYWNpdHl9LC0xIT09dGhpcy5tb2RlLmluZGV4T2YoXCJtYXJrZXJzXCIpP3RoaXMuc2NhdHRlclBsb3Q/dGhpcy5zY2F0dGVyUGxvdC51cGRhdGUocik6KHRoaXMuc2NhdHRlclBsb3Q9aShyKSx0aGlzLnNjYXR0ZXJQbG90Ll90cmFjZT10aGlzLHRoaXMuc2NhdHRlclBsb3QuaGlnaGxpZ2h0U2NhbGU9MSx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5zY2F0dGVyUGxvdCkpOnRoaXMuc2NhdHRlclBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5zY2F0dGVyUGxvdCksdGhpcy5zY2F0dGVyUGxvdC5kaXNwb3NlKCksdGhpcy5zY2F0dGVyUGxvdD1udWxsKSxjPXtnbDp0aGlzLnNjZW5lLmdscGxvdC5nbCxwb3NpdGlvbjpwLnBvc2l0aW9uLGdseXBoOnAudGV4dCxjb2xvcjpwLnRleHRDb2xvcixzaXplOnAudGV4dFNpemUsYW5nbGU6cC50ZXh0QW5nbGUsYWxpZ25tZW50OnAudGV4dE9mZnNldCxmb250OnAudGV4dEZvbnQsb3J0aG9ncmFwaGljOiEwLGxpbmVXaWR0aDowLHByb2plY3Q6ITEsb3BhY2l0eTp0Lm9wYWNpdHl9LHRoaXMudGV4dExhYmVscz10LmhvdmVydGV4dHx8dC50ZXh0LC0xIT09dGhpcy5tb2RlLmluZGV4T2YoXCJ0ZXh0XCIpP3RoaXMudGV4dE1hcmtlcnM/dGhpcy50ZXh0TWFya2Vycy51cGRhdGUoYyk6KHRoaXMudGV4dE1hcmtlcnM9aShjKSx0aGlzLnRleHRNYXJrZXJzLl90cmFjZT10aGlzLHRoaXMudGV4dE1hcmtlcnMuaGlnaGxpZ2h0U2NhbGU9MSx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy50ZXh0TWFya2VycykpOnRoaXMudGV4dE1hcmtlcnMmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy50ZXh0TWFya2VycyksdGhpcy50ZXh0TWFya2Vycy5kaXNwb3NlKCksdGhpcy50ZXh0TWFya2Vycz1udWxsKSxsPXtnbDp0aGlzLnNjZW5lLmdscGxvdC5nbCxwb3NpdGlvbjpwLnBvc2l0aW9uLGNvbG9yOnAuZXJyb3JDb2xvcixlcnJvcjpwLmVycm9yQm91bmRzLGxpbmVXaWR0aDpwLmVycm9yTGluZVdpZHRoLGNhcFNpemU6cC5lcnJvckNhcFNpemUsb3BhY2l0eTp0Lm9wYWNpdHl9LHRoaXMuZXJyb3JCYXJzP3AuZXJyb3JCb3VuZHM/dGhpcy5lcnJvckJhcnMudXBkYXRlKGwpOih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5lcnJvckJhcnMpLHRoaXMuZXJyb3JCYXJzLmRpc3Bvc2UoKSx0aGlzLmVycm9yQmFycz1udWxsKTpwLmVycm9yQm91bmRzJiYodGhpcy5lcnJvckJhcnM9YShsKSx0aGlzLmVycm9yQmFycy5fdHJhY2U9dGhpcyx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5lcnJvckJhcnMpKSxwLmRlbGF1bmF5QXhpcz49MCl7dmFyIGc9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9KHIrMSklMyxhPShyKzIpJTMsbz1bXSxsPVtdO2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBjPXRbbl07IWlzTmFOKGNbaV0pJiZpc0Zpbml0ZShjW2ldKSYmIWlzTmFOKGNbYV0pJiZpc0Zpbml0ZShjW2FdKSYmKG8ucHVzaChbY1tpXSxjW2FdXSksbC5wdXNoKG4pKX12YXIgdT1zKG8pO2ZvcihuPTA7bjx1Lmxlbmd0aDsrK24pZm9yKHZhciBoPXVbbl0sZj0wO2Y8aC5sZW5ndGg7KytmKWhbZl09bFtoW2ZdXTtyZXR1cm57cG9zaXRpb25zOnQsY2VsbHM6dSxtZXNoQ29sb3I6ZX19KHAucG9zaXRpb24scC5kZWxhdW5heUNvbG9yLHAuZGVsYXVuYXlBeGlzKTtnLm9wYWNpdHk9dC5vcGFjaXR5LHRoaXMuZGVsYXVuYXlNZXNoP3RoaXMuZGVsYXVuYXlNZXNoLnVwZGF0ZShnKTooZy5nbD11LHRoaXMuZGVsYXVuYXlNZXNoPW8oZyksdGhpcy5kZWxhdW5heU1lc2guX3RyYWNlPXRoaXMsdGhpcy5zY2VuZS5nbHBsb3QuYWRkKHRoaXMuZGVsYXVuYXlNZXNoKSl9ZWxzZSB0aGlzLmRlbGF1bmF5TWVzaCYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmRlbGF1bmF5TWVzaCksdGhpcy5kZWxhdW5heU1lc2guZGlzcG9zZSgpLHRoaXMuZGVsYXVuYXlNZXNoPW51bGwpfSx2LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmxpbmVQbG90JiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubGluZVBsb3QpLHRoaXMubGluZVBsb3QuZGlzcG9zZSgpKSx0aGlzLnNjYXR0ZXJQbG90JiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuc2NhdHRlclBsb3QpLHRoaXMuc2NhdHRlclBsb3QuZGlzcG9zZSgpKSx0aGlzLmVycm9yQmFycyYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmVycm9yQmFycyksdGhpcy5lcnJvckJhcnMuZGlzcG9zZSgpKSx0aGlzLnRleHRNYXJrZXJzJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMudGV4dE1hcmtlcnMpLHRoaXMudGV4dE1hcmtlcnMuZGlzcG9zZSgpKSx0aGlzLmRlbGF1bmF5TWVzaCYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmRlbGF1bmF5TWVzaCksdGhpcy5kZWxhdW5heU1lc2guZGlzcG9zZSgpKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IGcodCxlLnVpZCk7cmV0dXJuIHIudXBkYXRlKGUpLHJ9fSx7XCIuLi8uLi9jb25zdGFudHMvZ2wzZF9kYXNoZXNcIjo2NzUsXCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzXCI6Njc2LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvclwiOjY5OCxcIi4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIjo3MjQsXCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuY1wiOjEwNjksXCIuL2NhbGNfZXJyb3JzXCI6MTA4MSxcImRlbGF1bmF5LXRyaWFuZ3VsYXRlXCI6MTU3LFwiZ2wtZXJyb3IzZFwiOjI0NCxcImdsLWxpbmUzZFwiOjI1MixcImdsLW1lc2gzZFwiOjI3NyxcImdsLXNjYXR0ZXIzZFwiOjI5NH1dLDEwODM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIiksbz10KFwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHNcIikscz10KFwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzXCIpLGw9dChcIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0c1wiKSxjPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUpe2Z1bmN0aW9uIGgocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLGMscixuKX1pZihmdW5jdGlvbih0LGUscixpKXt2YXIgYT0wLG89cihcInhcIikscz1yKFwieVwiKSxsPXIoXCJ6XCIpO24uZ2V0Q29tcG9uZW50TWV0aG9kKFwiY2FsZW5kYXJzXCIsXCJoYW5kbGVUcmFjZURlZmF1bHRzXCIpKHQsZSxbXCJ4XCIsXCJ5XCIsXCJ6XCJdLGkpLG8mJnMmJmwmJihhPU1hdGgubWluKG8ubGVuZ3RoLHMubGVuZ3RoLGwubGVuZ3RoKSxlLl9sZW5ndGg9ZS5feGxlbmd0aD1lLl95bGVuZ3RoPWUuX3psZW5ndGg9YSk7cmV0dXJuIGF9KHQsZSxoLHUpKXtoKFwidGV4dFwiKSxoKFwiaG92ZXJ0ZXh0XCIpLGgoXCJob3ZlcnRlbXBsYXRlXCIpLGgoXCJtb2RlXCIpLGEuaGFzTGluZXMoZSkmJihoKFwiY29ubmVjdGdhcHNcIikscyh0LGUscix1LGgpKSxhLmhhc01hcmtlcnMoZSkmJm8odCxlLHIsdSxoLHtub1NlbGVjdDohMH0pLGEuaGFzVGV4dChlKSYmbCh0LGUsdSxoLHtub1NlbGVjdDohMH0pO3ZhciBmPShlLmxpbmV8fHt9KS5jb2xvcixwPShlLm1hcmtlcnx8e30pLmNvbG9yO2goXCJzdXJmYWNlYXhpc1wiKT49MCYmaChcInN1cmZhY2Vjb2xvclwiLGZ8fHApO2Zvcih2YXIgZD1bXCJ4XCIsXCJ5XCIsXCJ6XCJdLGc9MDtnPDM7KytnKXt2YXIgdj1cInByb2plY3Rpb24uXCIrZFtnXTtoKHYrXCIuc2hvd1wiKSYmKGgoditcIi5vcGFjaXR5XCIpLGgoditcIi5zY2FsZVwiKSl9dmFyIG09bi5nZXRDb21wb25lbnRNZXRob2QoXCJlcnJvcmJhcnNcIixcInN1cHBseURlZmF1bHRzXCIpO20odCxlLGZ8fHB8fHIse2F4aXM6XCJ6XCJ9KSxtKHQsZSxmfHxwfHxyLHtheGlzOlwieVwiLGluaGVyaXQ6XCJ6XCJ9KSxtKHQsZSxmfHxwfHxyLHtheGlzOlwieFwiLGluaGVyaXQ6XCJ6XCJ9KX1lbHNlIGUudmlzaWJsZT0hMX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzXCI6MTA2NSxcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCI6MTA3MSxcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzXCI6MTA3NyxcIi4vYXR0cmlidXRlc1wiOjEwNzl9XSwxMDg0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5wbG90PXQoXCIuL2NvbnZlcnRcIiksbi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5tYXJrZXJTeW1ib2xzPXQoXCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIiksbi5jb2xvcmJhcj1be2NvbnRhaW5lcjpcIm1hcmtlclwiLG1pbjpcImNtaW5cIixtYXg6XCJjbWF4XCJ9LHtjb250YWluZXI6XCJsaW5lXCIsbWluOlwiY21pblwiLG1heDpcImNtYXhcIn1dLG4uY2FsYz10KFwiLi9jYWxjXCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwic2NhdHRlcjNkXCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvZ2wzZFwiKSxuLmNhdGVnb3JpZXM9W1wiZ2wzZFwiLFwic3ltYm9sc1wiLFwic2hvd0xlZ2VuZFwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnNcIjo2NzYsXCIuLi8uLi9wbG90cy9nbDNkXCI6Nzg5LFwiLi9hdHRyaWJ1dGVzXCI6MTA3OSxcIi4vY2FsY1wiOjEwODAsXCIuL2NvbnZlcnRcIjoxMDgyLFwiLi9kZWZhdWx0c1wiOjEwODN9XSwxMDg1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiKSxsPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsYz1uLm1hcmtlcix1PW4ubGluZSxoPWMubGluZTtlLmV4cG9ydHM9e2NhcnBldDp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwiY2FsY1wifSxhOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxiOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxtb2RlOmwoe30sbi5tb2RlLHtkZmx0OlwibWFya2Vyc1wifSksdGV4dDpsKHt9LG4udGV4dCx7fSksaG92ZXJ0ZXh0Omwoe30sbi5ob3ZlcnRleHQse30pLGxpbmU6e2NvbG9yOnUuY29sb3Isd2lkdGg6dS53aWR0aCxkYXNoOnUuZGFzaCxzaGFwZTpsKHt9LHUuc2hhcGUse3ZhbHVlczpbXCJsaW5lYXJcIixcInNwbGluZVwiXX0pLHNtb290aGluZzp1LnNtb290aGluZyxlZGl0VHlwZTpcImNhbGNcIn0sY29ubmVjdGdhcHM6bi5jb25uZWN0Z2FwcyxmaWxsOmwoe30sbi5maWxsLHt2YWx1ZXM6W1wibm9uZVwiLFwidG9zZWxmXCIsXCJ0b25leHRcIl0sZGZsdDpcIm5vbmVcIn0pLGZpbGxjb2xvcjpuLmZpbGxjb2xvcixtYXJrZXI6bCh7c3ltYm9sOmMuc3ltYm9sLG9wYWNpdHk6Yy5vcGFjaXR5LG1heGRpc3BsYXllZDpjLm1heGRpc3BsYXllZCxzaXplOmMuc2l6ZSxzaXplcmVmOmMuc2l6ZXJlZixzaXplbWluOmMuc2l6ZW1pbixzaXplbW9kZTpjLnNpemVtb2RlLGxpbmU6bCh7d2lkdGg6aC53aWR0aCxlZGl0VHlwZTpcImNhbGNcIn0sbyhcIm1hcmtlci5saW5lXCIpKSxncmFkaWVudDpjLmdyYWRpZW50LGVkaXRUeXBlOlwiY2FsY1wifSxvKFwibWFya2VyXCIpLHtjb2xvcmJhcjpzfSksdGV4dGZvbnQ6bi50ZXh0Zm9udCx0ZXh0cG9zaXRpb246bi50ZXh0cG9zaXRpb24sc2VsZWN0ZWQ6bi5zZWxlY3RlZCx1bnNlbGVjdGVkOm4udW5zZWxlY3RlZCxob3ZlcmluZm86bCh7fSxpLmhvdmVyaW5mbyx7ZmxhZ3M6W1wiYVwiLFwiYlwiLFwidGV4dFwiLFwibmFtZVwiXX0pLGhvdmVyb246bi5ob3Zlcm9uLGhvdmVydGVtcGxhdGU6YSgpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCI6NTc5LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIjo1ODUsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCI6MTA1Mn1dLDEwODY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGNcIiksYT10KFwiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGFcIiksbz10KFwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvblwiKSxzPXQoXCIuLi9zY2F0dGVyL2NhbGNcIikuY2FsY01hcmtlclNpemUsbD10KFwiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLl9jYXJwZXRUcmFjZT1sKHQsZSk7aWYociYmci52aXNpYmxlJiZcImxlZ2VuZG9ubHlcIiE9PXIudmlzaWJsZSl7dmFyIGM7ZS54YXhpcz1yLnhheGlzLGUueWF4aXM9ci55YXhpczt2YXIgdSxoLGY9ZS5fbGVuZ3RoLHA9bmV3IEFycmF5KGYpLGQ9ITE7Zm9yKGM9MDtjPGY7YysrKWlmKHU9ZS5hW2NdLGg9ZS5iW2NdLG4odSkmJm4oaCkpe3ZhciBnPXIuYWIyeHkoK3UsK2gsITApLHY9ci5pc1Zpc2libGUoK3UsK2gpO3Z8fChkPSEwKSxwW2NdPXt4OmdbMF0seTpnWzFdLGE6dSxiOmgsdmlzOnZ9fWVsc2UgcFtjXT17eDohMSx5OiExfTtyZXR1cm4gZS5fbmVlZHNDdWxsPWQscFswXS5jYXJwZXQ9cixwWzBdLnRyYWNlPWUscyhlLGYpLGkodCxlKSxhKHAsZSksbyhwLGUpLHB9fX0se1wiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZFwiOjg5NyxcIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhXCI6MTA1MSxcIi4uL3NjYXR0ZXIvY2FsY1wiOjEwNTMsXCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uXCI6MTA1NCxcIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjXCI6MTA1NSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sMTA4NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vc2NhdHRlci9jb25zdGFudHNcIiksYT10KFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiKSxvPXQoXCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0c1wiKSxzPXQoXCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHNcIiksbD10KFwiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzXCIpLGM9dChcIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0c1wiKSx1PXQoXCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0c1wiKSxoPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYpe2Z1bmN0aW9uIHAocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGgscixpKX1wKFwiY2FycGV0XCIpLGUueGF4aXM9XCJ4XCIsZS55YXhpcz1cInlcIjt2YXIgZD1wKFwiYVwiKSxnPXAoXCJiXCIpLHY9TWF0aC5taW4oZC5sZW5ndGgsZy5sZW5ndGgpO2lmKHYpe2UuX2xlbmd0aD12LHAoXCJ0ZXh0XCIpLHAoXCJob3ZlcnRleHRcIikscChcIm1vZGVcIix2PGkuUFRTX0xJTkVTT05MWT9cImxpbmVzK21hcmtlcnNcIjpcImxpbmVzXCIpLGEuaGFzTGluZXMoZSkmJihzKHQsZSxyLGYscCksbCh0LGUscCkscChcImNvbm5lY3RnYXBzXCIpKSxhLmhhc01hcmtlcnMoZSkmJm8odCxlLHIsZixwLHtncmFkaWVudDohMH0pLGEuaGFzVGV4dChlKSYmYyh0LGUsZixwKTt2YXIgbT1bXTsoYS5oYXNNYXJrZXJzKGUpfHxhLmhhc1RleHQoZSkpJiYocChcIm1hcmtlci5tYXhkaXNwbGF5ZWRcIiksbS5wdXNoKFwicG9pbnRzXCIpKSxwKFwiZmlsbFwiKSxcIm5vbmVcIiE9PWUuZmlsbCYmKHUodCxlLHIscCksYS5oYXNMaW5lcyhlKXx8bCh0LGUscCkpLFwidG9uZXh0XCIhPT1lLmZpbGwmJlwidG9zZWxmXCIhPT1lLmZpbGx8fG0ucHVzaChcImZpbGxzXCIpLFwiZmlsbHNcIiE9PXAoXCJob3Zlcm9uXCIsbS5qb2luKFwiK1wiKXx8XCJwb2ludHNcIikmJnAoXCJob3ZlcnRlbXBsYXRlXCIpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHApfWVsc2UgZS52aXNpYmxlPSExfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vc2NhdHRlci9jb25zdGFudHNcIjoxMDU2LFwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHNcIjoxMDYxLFwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzXCI6MTA2NSxcIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0c1wiOjEwNjcsXCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0c1wiOjEwNzEsXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCI6MTA3NixcIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0c1wiOjEwNzcsXCIuL2F0dHJpYnV0ZXNcIjoxMDg1fV0sMTA4ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPW5baV07cmV0dXJuIHQuYT1hLmEsdC5iPWEuYix0Lnk9YS55LHR9fSx7fV0sMTA4OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9zY2F0dGVyL2hvdmVyXCIpLGk9dChcIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1uKHQsZSxyLGEpO2lmKG8mJiExIT09b1swXS5pbmRleCl7dmFyIHM9b1swXTtpZih2b2lkIDA9PT1zLmluZGV4KXt2YXIgbD0xLXMueTAvdC55YS5fbGVuZ3RoLGM9dC54YS5fbGVuZ3RoLHU9YypsLzIsaD1jLXU7cmV0dXJuIHMueDA9TWF0aC5tYXgoTWF0aC5taW4ocy54MCxoKSx1KSxzLngxPU1hdGgubWF4KE1hdGgubWluKHMueDEsaCksdSksb312YXIgZj1zLmNkW3MuaW5kZXhdO3MuYT1mLmEscy5iPWYuYixzLnhMYWJlbFZhbD12b2lkIDAscy55TGFiZWxWYWw9dm9pZCAwO3ZhciBwPXMudHJhY2UsZD1wLl9jYXJwZXQsZz1kLmFiMmlqKFtmLmEsZi5iXSksdj1NYXRoLmZsb29yKGdbMF0pLG09Z1swXS12LHk9TWF0aC5mbG9vcihnWzFdKSx4PWdbMV0teSxiPWQuZXZhbHh5KFtdLHYseSxtLHgpO3MueUxhYmVsPWJbMV0udG9GaXhlZCgzKSxkZWxldGUgcy50ZXh0O3ZhciBfPVtdO2lmKCFwLmhvdmVydGVtcGxhdGUpe3ZhciB3PShmLmhpfHxwLmhvdmVyaW5mbykuc3BsaXQoXCIrXCIpOy0xIT09dy5pbmRleE9mKFwiYWxsXCIpJiYodz1bXCJhXCIsXCJiXCIsXCJ0ZXh0XCJdKSwtMSE9PXcuaW5kZXhPZihcImFcIikmJmsoZC5hYXhpcyxmLmEpLC0xIT09dy5pbmRleE9mKFwiYlwiKSYmayhkLmJheGlzLGYuYiksXy5wdXNoKFwieTogXCIrcy55TGFiZWwpLC0xIT09dy5pbmRleE9mKFwidGV4dFwiKSYmaShmLHAsXykscy5leHRyYVRleHQ9Xy5qb2luKFwiPGJyPlwiKX1yZXR1cm4gb31mdW5jdGlvbiBrKHQsZSl7dmFyIHI7cj10LmxhYmVscHJlZml4JiZ0LmxhYmVscHJlZml4Lmxlbmd0aD4wP3QubGFiZWxwcmVmaXgucmVwbGFjZSgvID0gJC8sXCJcIik6dC5faG92ZXJ0aXRsZSxfLnB1c2gocitcIjogXCIrZS50b0ZpeGVkKDMpK3QubGFiZWxzdWZmaXgpfX19LHtcIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0XCI6MTA2MCxcIi4uL3NjYXR0ZXIvaG92ZXJcIjoxMDYzfV0sMTA5MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIiksbi5jb2xvcmJhcj10KFwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXJcIiksbi5jYWxjPXQoXCIuL2NhbGNcIiksbi5wbG90PXQoXCIuL3Bsb3RcIiksbi5zdHlsZT10KFwiLi4vc2NhdHRlci9zdHlsZVwiKS5zdHlsZSxuLnN0eWxlT25TZWxlY3Q9dChcIi4uL3NjYXR0ZXIvc3R5bGVcIikuc3R5bGVPblNlbGVjdCxuLmhvdmVyUG9pbnRzPXQoXCIuL2hvdmVyXCIpLG4uc2VsZWN0UG9pbnRzPXQoXCIuLi9zY2F0dGVyL3NlbGVjdFwiKSxuLmV2ZW50RGF0YT10KFwiLi9ldmVudF9kYXRhXCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwic2NhdHRlcmNhcnBldFwiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiKSxuLmNhdGVnb3JpZXM9W1wic3ZnXCIsXCJjYXJwZXRcIixcInN5bWJvbHNcIixcInNob3dMZWdlbmRcIixcImNhcnBldERlcGVuZGVudFwiLFwiem9vbVNjYWxlXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXJcIjoxMDcwLFwiLi4vc2NhdHRlci9zZWxlY3RcIjoxMDczLFwiLi4vc2NhdHRlci9zdHlsZVwiOjEwNzUsXCIuL2F0dHJpYnV0ZXNcIjoxMDg1LFwiLi9jYWxjXCI6MTA4NixcIi4vZGVmYXVsdHNcIjoxMDg3LFwiLi9ldmVudF9kYXRhXCI6MTA4OCxcIi4vaG92ZXJcIjoxMDg5LFwiLi9wbG90XCI6MTA5MX1dLDEwOTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vc2NhdHRlci9wbG90XCIpLGk9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHMsbCxjLHU9clswXVswXS5jYXJwZXQsaD17eGF4aXM6aS5nZXRGcm9tSWQodCx1LnhheGlzfHxcInhcIikseWF4aXM6aS5nZXRGcm9tSWQodCx1LnlheGlzfHxcInlcIikscGxvdDplLnBsb3R9O2ZvcihuKHQsaCxyLG8pLHM9MDtzPHIubGVuZ3RoO3MrKylsPXJbc11bMF0udHJhY2UsYz1vLnNlbGVjdEFsbChcImcudHJhY2VcIitsLnVpZCtcIiAuanMtbGluZVwiKSxhLnNldENsaXBVcmwoYyxyW3NdWzBdLmNhcnBldC5fY2xpcFBhdGhJZCx0KX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vc2NhdHRlci9wbG90XCI6MTA3Mn1dLDEwOTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXNcIikuZGFzaCxsPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsYz10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbCx1PWkubWFya2VyLGg9aS5saW5lLGY9dS5saW5lO2UuZXhwb3J0cz1jKHtsb246e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCJ9LGxhdDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIn0sbG9jYXRpb25zOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwifSxsb2NhdGlvbm1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcIklTTy0zXCIsXCJVU0Etc3RhdGVzXCIsXCJjb3VudHJ5IG5hbWVzXCJdLGRmbHQ6XCJJU08tM1wifSxtb2RlOmwoe30saS5tb2RlLHtkZmx0OlwibWFya2Vyc1wifSksdGV4dDpsKHt9LGkudGV4dCx7fSksaG92ZXJ0ZXh0Omwoe30saS5ob3ZlcnRleHQse30pLHRleHRmb250OmkudGV4dGZvbnQsdGV4dHBvc2l0aW9uOmkudGV4dHBvc2l0aW9uLGxpbmU6e2NvbG9yOmguY29sb3Isd2lkdGg6aC53aWR0aCxkYXNoOnN9LGNvbm5lY3RnYXBzOmkuY29ubmVjdGdhcHMsbWFya2VyOmwoe3N5bWJvbDp1LnN5bWJvbCxvcGFjaXR5OnUub3BhY2l0eSxzaXplOnUuc2l6ZSxzaXplcmVmOnUuc2l6ZXJlZixzaXplbWluOnUuc2l6ZW1pbixzaXplbW9kZTp1LnNpemVtb2RlLGNvbG9yYmFyOnUuY29sb3JiYXIsbGluZTpsKHt3aWR0aDpmLndpZHRofSxvKFwibWFya2VyLmxpbmVcIikpLGdyYWRpZW50OnUuZ3JhZGllbnR9LG8oXCJtYXJrZXJcIikpLGZpbGw6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcIm5vbmVcIixcInRvc2VsZlwiXSxkZmx0Olwibm9uZVwifSxmaWxsY29sb3I6aS5maWxsY29sb3Isc2VsZWN0ZWQ6aS5zZWxlY3RlZCx1bnNlbGVjdGVkOmkudW5zZWxlY3RlZCxob3ZlcmluZm86bCh7fSxhLmhvdmVyaW5mbyx7ZmxhZ3M6W1wibG9uXCIsXCJsYXRcIixcImxvY2F0aW9uXCIsXCJ0ZXh0XCIsXCJuYW1lXCJdfSksaG92ZXJ0ZW1wbGF0ZTpuKCl9LFwiY2FsY1wiLFwibmVzdGVkXCIpfSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzXCI6NTk4LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDYsXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIjoxMDUyfV0sMTA5MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTSxhPXQoXCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsY1wiKSxvPXQoXCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YVwiKSxzPXQoXCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uXCIpLGw9dChcIi4uLy4uL2xpYlwiKS5fO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1BcnJheS5pc0FycmF5KGUubG9jYXRpb25zKSxjPXI/ZS5sb2NhdGlvbnMubGVuZ3RoOmUuX2xlbmd0aCx1PW5ldyBBcnJheShjKSxoPTA7aDxjO2grKyl7dmFyIGY9dVtoXT17fTtpZihyKXt2YXIgcD1lLmxvY2F0aW9uc1toXTtmLmxvYz1cInN0cmluZ1wiPT10eXBlb2YgcD9wOm51bGx9ZWxzZXt2YXIgZD1lLmxvbltoXSxnPWUubGF0W2hdO24oZCkmJm4oZyk/Zi5sb25sYXQ9WytkLCtnXTpmLmxvbmxhdD1baSxpXX19cmV0dXJuIG8odSxlKSxhKHQsZSkscyh1LGUpLGMmJih1WzBdLnQ9e2xhYmVsczp7bGF0OmwodCxcImxhdDpcIikrXCIgXCIsbG9uOmwodCxcImxvbjpcIikrXCIgXCJ9fSksdX19LHtcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YVwiOjEwNTEsXCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uXCI6MTA1NCxcIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjXCI6MTA1NSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sMTA5NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiKSxhPXQoXCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0c1wiKSxvPXQoXCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHNcIikscz10KFwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzXCIpLGw9dChcIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzXCIpLGM9dChcIi4vYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7ZnVuY3Rpb24gaChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYyxyLGkpfSFmdW5jdGlvbih0LGUscil7dmFyIG4saSxhPTAsbz1yKFwibG9jYXRpb25zXCIpO2lmKG8pcmV0dXJuIHIoXCJsb2NhdGlvbm1vZGVcIiksYT1vLmxlbmd0aDtyZXR1cm4gbj1yKFwibG9uXCIpfHxbXSxpPXIoXCJsYXRcIil8fFtdLGE9TWF0aC5taW4obi5sZW5ndGgsaS5sZW5ndGgpLGUuX2xlbmd0aD1hLGF9KDAsZSxoKT9lLnZpc2libGU9ITE6KGgoXCJ0ZXh0XCIpLGgoXCJob3ZlcnRleHRcIiksaChcImhvdmVydGVtcGxhdGVcIiksaChcIm1vZGVcIiksaS5oYXNMaW5lcyhlKSYmKG8odCxlLHIsdSxoKSxoKFwiY29ubmVjdGdhcHNcIikpLGkuaGFzTWFya2VycyhlKSYmYSh0LGUscix1LGgse2dyYWRpZW50OiEwfSksaS5oYXNUZXh0KGUpJiZzKHQsZSx1LGgpLGgoXCJmaWxsXCIpLFwibm9uZVwiIT09ZS5maWxsJiZsKHQsZSxyLGgpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGgpKX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzXCI6MTA2MSxcIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0c1wiOjEwNjUsXCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0c1wiOjEwNzEsXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCI6MTA3NixcIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0c1wiOjEwNzcsXCIuL2F0dHJpYnV0ZXNcIjoxMDkyfV0sMTA5NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0Lmxvbj1lLmxvbix0LmxhdD1lLmxhdCx0LmxvY2F0aW9uPWUubG9jP2UubG9jOm51bGwsdH19LHt9XSwxMDk2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksYT10KFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKS5CQUROVU0sbz10KFwiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3JcIikscz10KFwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHRcIiksbD10KFwiLi9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGM9dC5jZCx1PWNbMF0udHJhY2UsaD10LnhhLGY9dC55YSxwPXQuc3VicGxvdCxkPXAucHJvamVjdGlvbi5pc0xvbkxhdE92ZXJFZGdlcyxnPXAucHJvamVjdDtpZihuLmdldENsb3Nlc3QoYyxmdW5jdGlvbih0KXt2YXIgbj10LmxvbmxhdDtpZihuWzBdPT09YSlyZXR1cm4gMS8wO2lmKGQobikpcmV0dXJuIDEvMDt2YXIgaT1nKG4pLG89ZyhbZSxyXSkscz1NYXRoLmFicyhpWzBdLW9bMF0pLGw9TWF0aC5hYnMoaVsxXS1vWzFdKSxjPU1hdGgubWF4KDMsdC5tcmN8fDApO3JldHVybiBNYXRoLm1heChNYXRoLnNxcnQocypzK2wqbCktYywxLTMvYyl9LHQpLCExIT09dC5pbmRleCl7dmFyIHY9Y1t0LmluZGV4XSxtPXYubG9ubGF0LHk9W2guYzJwKG0pLGYuYzJwKG0pXSx4PXYubXJjfHwxO3JldHVybiB0LngwPXlbMF0teCx0LngxPXlbMF0reCx0LnkwPXlbMV0teCx0LnkxPXlbMV0reCx0LmxvYz12LmxvYyx0Lmxvbj1tWzBdLHQubGF0PW1bMV0sdC5jb2xvcj1vKHUsdiksdC5leHRyYVRleHQ9ZnVuY3Rpb24odCxlLHIsbil7aWYodC5ob3ZlcnRlbXBsYXRlKXJldHVybjt2YXIgYT1lLmhpfHx0LmhvdmVyaW5mbyxvPVwiYWxsXCI9PT1hP2wuaG92ZXJpbmZvLmZsYWdzOmEuc3BsaXQoXCIrXCIpLGM9LTEhPT1vLmluZGV4T2YoXCJsb2NhdGlvblwiKSYmQXJyYXkuaXNBcnJheSh0LmxvY2F0aW9ucyksdT0tMSE9PW8uaW5kZXhPZihcImxvblwiKSxoPS0xIT09by5pbmRleE9mKFwibGF0XCIpLGY9LTEhPT1vLmluZGV4T2YoXCJ0ZXh0XCIpLHA9W107ZnVuY3Rpb24gZCh0KXtyZXR1cm4gaS50aWNrVGV4dChyLHIuYzJsKHQpLFwiaG92ZXJcIikudGV4dCtcIlxceGIwXCJ9Yz9wLnB1c2goZS5sb2MpOnUmJmg/cC5wdXNoKFwiKFwiK2QoZS5sb25sYXRbMF0pK1wiLCBcIitkKGUubG9ubGF0WzFdKStcIilcIik6dT9wLnB1c2gobi5sb24rZChlLmxvbmxhdFswXSkpOmgmJnAucHVzaChuLmxhdCtkKGUubG9ubGF0WzFdKSk7ZiYmcyhlLHQscCk7cmV0dXJuIHAuam9pbihcIjxicj5cIil9KHUsdixwLm1vY2tBeGlzLGNbMF0udC5sYWJlbHMpLHQuaG92ZXJ0ZW1wbGF0ZT11LmhvdmVydGVtcGxhdGUsW3RdfX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dFwiOjEwNjAsXCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvclwiOjEwNjIsXCIuL2F0dHJpYnV0ZXNcIjoxMDkyfV0sMTA5NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIiksbi5jb2xvcmJhcj10KFwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXJcIiksbi5jYWxjPXQoXCIuL2NhbGNcIiksbi5wbG90PXQoXCIuL3Bsb3RcIiksbi5zdHlsZT10KFwiLi9zdHlsZVwiKSxuLnN0eWxlT25TZWxlY3Q9dChcIi4uL3NjYXR0ZXIvc3R5bGVcIikuc3R5bGVPblNlbGVjdCxuLmhvdmVyUG9pbnRzPXQoXCIuL2hvdmVyXCIpLG4uZXZlbnREYXRhPXQoXCIuL2V2ZW50X2RhdGFcIiksbi5zZWxlY3RQb2ludHM9dChcIi4vc2VsZWN0XCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwic2NhdHRlcmdlb1wiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4uLy4uL3Bsb3RzL2dlb1wiKSxuLmNhdGVnb3JpZXM9W1wiZ2VvXCIsXCJzeW1ib2xzXCIsXCJzaG93TGVnZW5kXCIsXCJzY2F0dGVyLWxpa2VcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9nZW9cIjo3NzksXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiOjEwNzAsXCIuLi9zY2F0dGVyL3N0eWxlXCI6MTA3NSxcIi4vYXR0cmlidXRlc1wiOjEwOTIsXCIuL2NhbGNcIjoxMDkzLFwiLi9kZWZhdWx0c1wiOjEwOTQsXCIuL2V2ZW50X2RhdGFcIjoxMDk1LFwiLi9ob3ZlclwiOjEwOTYsXCIuL3Bsb3RcIjoxMDk4LFwiLi9zZWxlY3RcIjoxMDk5LFwiLi9zdHlsZVwiOjExMDB9XSwxMDk4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTSxvPXQoXCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHNcIikuZ2V0VG9wb2pzb25GZWF0dXJlcyxzPXQoXCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzXCIpLmxvY2F0aW9uVG9GZWF0dXJlLGw9dChcIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzXCIpLGM9dChcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIiksdT10KFwiLi9zdHlsZVwiKTtmdW5jdGlvbiBoKHQsZSl7dmFyIHI9dFswXS50cmFjZTtpZihBcnJheS5pc0FycmF5KHIubG9jYXRpb25zKSlmb3IodmFyIG49byhyLGUpLGk9ci5sb2NhdGlvbm1vZGUsbD0wO2w8dC5sZW5ndGg7bCsrKXt2YXIgYz10W2xdLHU9cyhpLGMubG9jLG4pO2MubG9ubGF0PXU/dS5wcm9wZXJ0aWVzLmN0OlthLGFdfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKWgocltvXSxlLnRvcG9qc29uKTtmdW5jdGlvbiBzKHQsZSl7dC5sb25sYXRbMF09PT1hJiZuLnNlbGVjdChlKS5yZW1vdmUoKX12YXIgZj1lLmxheWVycy5mcm9udHBsb3Quc2VsZWN0KFwiLnNjYXR0ZXJsYXllclwiKSxwPWkubWFrZVRyYWNlR3JvdXBzKGYscixcInRyYWNlIHNjYXR0ZXJnZW9cIik7cC5zZWxlY3RBbGwoXCIqXCIpLnJlbW92ZSgpLHAuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1lWzBdLm5vZGUzPW4uc2VsZWN0KHRoaXMpLGE9ZVswXS50cmFjZTtpZihjLmhhc0xpbmVzKGEpfHxcIm5vbmVcIiE9PWEuZmlsbCl7dmFyIG89bC5jYWxjVHJhY2VUb0xpbmVDb29yZHMoZSksaD1cIm5vbmVcIiE9PWEuZmlsbD9sLm1ha2VQb2x5Z29uKG8pOmwubWFrZUxpbmUobyk7ci5zZWxlY3RBbGwoXCJwYXRoLmpzLWxpbmVcIikuZGF0YShbe2dlb2pzb246aCx0cmFjZTphfV0pLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5jbGFzc2VkKFwianMtbGluZVwiLCEwKS5zdHlsZShcInN0cm9rZS1taXRlcmxpbWl0XCIsMil9Yy5oYXNNYXJrZXJzKGEpJiZyLnNlbGVjdEFsbChcInBhdGgucG9pbnRcIikuZGF0YShpLmlkZW50aXR5KS5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChcInBvaW50XCIsITApLmVhY2goZnVuY3Rpb24odCl7cyh0LHRoaXMpfSksYy5oYXNUZXh0KGEpJiZyLnNlbGVjdEFsbChcImdcIikuZGF0YShpLmlkZW50aXR5KS5lbnRlcigpLmFwcGVuZChcImdcIikuYXBwZW5kKFwidGV4dFwiKS5lYWNoKGZ1bmN0aW9uKHQpe3ModCx0aGlzKX0pLHUodCxlKX0pfX0se1wiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHNcIjo2OTQsXCIuLi8uLi9saWIvZ2VvanNvbl91dGlsc1wiOjY5NSxcIi4uLy4uL2xpYi90b3BvanNvbl91dGlsc1wiOjcyOCxcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi9zdHlsZVwiOjExMDAsZDM6MTU1fV0sMTA5OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCIpLGk9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGEsbyxzLGwsYz10LmNkLHU9dC54YXhpcyxoPXQueWF4aXMsZj1bXSxwPWNbMF0udHJhY2U7aWYoIW4uaGFzTWFya2VycyhwKSYmIW4uaGFzVGV4dChwKSlyZXR1cm5bXTtpZighMT09PWUpZm9yKGw9MDtsPGMubGVuZ3RoO2wrKyljW2xdLnNlbGVjdGVkPTA7ZWxzZSBmb3IobD0wO2w8Yy5sZW5ndGg7bCsrKShhPShyPWNbbF0pLmxvbmxhdClbMF0hPT1pJiYobz11LmMycChhKSxzPWguYzJwKGEpLGUuY29udGFpbnMoW28sc10sbnVsbCxsLHQpPyhmLnB1c2goe3BvaW50TnVtYmVyOmwsbG9uOmFbMF0sbGF0OmFbMV19KSxyLnNlbGVjdGVkPTEpOnIuc2VsZWN0ZWQ9MCk7cmV0dXJuIGZ9fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiOjEwNzZ9XSwxMTAwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLG89dChcIi4uL3NjYXR0ZXIvc3R5bGVcIikscz1vLnN0eWxlUG9pbnRzLGw9by5zdHlsZVRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZSYmZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLnRyYWNlLG89ZVswXS5ub2RlMztvLnN0eWxlKFwib3BhY2l0eVwiLGVbMF0udHJhY2Uub3BhY2l0eSkscyhvLHIsdCksbChvLHIsdCksby5zZWxlY3RBbGwoXCJwYXRoLmpzLWxpbmVcIikuc3R5bGUoXCJmaWxsXCIsXCJub25lXCIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykscj10LnRyYWNlLG89ci5saW5lfHx7fTtlLmNhbGwoYS5zdHJva2Usby5jb2xvcikuY2FsbChpLmRhc2hMaW5lLG8uZGFzaHx8XCJcIixvLndpZHRofHwwKSxcIm5vbmVcIiE9PXIuZmlsbCYmZS5jYWxsKGEuZmlsbCxyLmZpbGxjb2xvcil9KX0odCxlKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi9zY2F0dGVyL3N0eWxlXCI6MTA3NSxkMzoxNTV9XSwxMTAxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxzPXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsLGw9dChcIi4vY29uc3RhbnRzXCIpLkRBU0hFUyxjPWkubGluZSx1PWkubWFya2VyLGg9dS5saW5lLGY9ZS5leHBvcnRzPXMoe3g6aS54LHgwOmkueDAsZHg6aS5keCx5OmkueSx5MDppLnkwLGR5OmkuZHksdGV4dDppLnRleHQsaG92ZXJ0ZXh0OmkuaG92ZXJ0ZXh0LHRleHRwb3NpdGlvbjppLnRleHRwb3NpdGlvbix0ZXh0Zm9udDppLnRleHRmb250LG1vZGU6e3ZhbFR5cGU6XCJmbGFnbGlzdFwiLGZsYWdzOltcImxpbmVzXCIsXCJtYXJrZXJzXCIsXCJ0ZXh0XCJdLGV4dHJhczpbXCJub25lXCJdfSxsaW5lOntjb2xvcjpjLmNvbG9yLHdpZHRoOmMud2lkdGgsc2hhcGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImxpbmVhclwiLFwiaHZcIixcInZoXCIsXCJodmhcIixcInZodlwiXSxkZmx0OlwibGluZWFyXCIsZWRpdFR5cGU6XCJwbG90XCJ9LGRhc2g6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOk9iamVjdC5rZXlzKGwpLGRmbHQ6XCJzb2xpZFwifX0sbWFya2VyOm8oe30sYShcIm1hcmtlclwiKSx7c3ltYm9sOnUuc3ltYm9sLHNpemU6dS5zaXplLHNpemVyZWY6dS5zaXplcmVmLHNpemVtaW46dS5zaXplbWluLHNpemVtb2RlOnUuc2l6ZW1vZGUsb3BhY2l0eTp1Lm9wYWNpdHksY29sb3JiYXI6dS5jb2xvcmJhcixsaW5lOm8oe30sYShcIm1hcmtlci5saW5lXCIpLHt3aWR0aDpoLndpZHRofSl9KSxjb25uZWN0Z2FwczppLmNvbm5lY3RnYXBzLGZpbGw6byh7fSxpLmZpbGwse2RmbHQ6XCJub25lXCJ9KSxmaWxsY29sb3I6aS5maWxsY29sb3Isc2VsZWN0ZWQ6e21hcmtlcjppLnNlbGVjdGVkLm1hcmtlcix0ZXh0Zm9udDppLnNlbGVjdGVkLnRleHRmb250fSx1bnNlbGVjdGVkOnttYXJrZXI6aS51bnNlbGVjdGVkLm1hcmtlcix0ZXh0Zm9udDppLnVuc2VsZWN0ZWQudGV4dGZvbnR9LG9wYWNpdHk6bi5vcGFjaXR5fSxcImNhbGNcIixcIm5lc3RlZFwiKTtmLnguZWRpdFR5cGU9Zi55LmVkaXRUeXBlPWYueDAuZWRpdFR5cGU9Zi55MC5lZGl0VHlwZT1cImNhbGMrY2xlYXJBeGlzVHlwZXNcIixmLmhvdmVydGVtcGxhdGU9aS5ob3ZlcnRlbXBsYXRlfSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiOjc0NixcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiOjEwNTIsXCIuL2NvbnN0YW50c1wiOjExMDJ9XSwxMTAyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtUT09fTUFOWV9QT0lOVFM6MWU1LFNZTUJPTF9TREZfU0laRToyMDAsU1lNQk9MX1NJWkU6MjAsU1lNQk9MX1NUUk9LRToxLERPVF9SRTovLWRvdC8sT1BFTl9SRTovLW9wZW4vLERBU0hFUzp7c29saWQ6WzFdLGRvdDpbMSwxXSxkYXNoOls0LDFdLGxvbmdkYXNoOls4LDFdLGRhc2hkb3Q6WzQsMSwxLDFdLGxvbmdkYXNoZG90Ols4LDEsMSwxXX19fSx7fV0sMTEwMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCJzdmctcGF0aC1zZGZcIiksYT10KFwiY29sb3Itbm9ybWFsaXplXCIpLG89dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLHM9dChcIi4uLy4uL2xpYlwiKSxsPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksYz10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCIpLHU9dChcIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3JcIikuZm9ybWF0Q29sb3IsaD10KFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiKSxmPXQoXCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuY1wiKSxwPXQoXCIuL2NvbnN0YW50c1wiKSxkPXQoXCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zXCIpLkRFU0VMRUNURElNLGc9e3N0YXJ0OjEsbGVmdDoxLGVuZDotMSxyaWdodDotMSxtaWRkbGU6MCxjZW50ZXI6MCxib3R0b206MSx0b3A6LTF9O2Z1bmN0aW9uIHYodCl7dmFyIGUscj10Ll9sZW5ndGgsaT10LnRleHRmb250LGE9dC50ZXh0cG9zaXRpb24sbz1BcnJheS5pc0FycmF5KGEpP2E6W2FdLHM9aS5jb2xvcixsPWkuc2l6ZSxjPWkuZmFtaWx5LHU9e307Zm9yKHUudGV4dD10LnRleHQsdS5vcGFjaXR5PXQub3BhY2l0eSx1LmZvbnQ9e30sdS5hbGlnbj1bXSx1LmJhc2VsaW5lPVtdLGU9MDtlPG8ubGVuZ3RoO2UrKyl7dmFyIGg9b1tlXS5zcGxpdCgvXFxzKy8pO3N3aXRjaChoWzFdKXtjYXNlXCJsZWZ0XCI6dS5hbGlnbi5wdXNoKFwicmlnaHRcIik7YnJlYWs7Y2FzZVwicmlnaHRcIjp1LmFsaWduLnB1c2goXCJsZWZ0XCIpO2JyZWFrO2RlZmF1bHQ6dS5hbGlnbi5wdXNoKGhbMV0pfXN3aXRjaChoWzBdKXtjYXNlXCJ0b3BcIjp1LmJhc2VsaW5lLnB1c2goXCJib3R0b21cIik7YnJlYWs7Y2FzZVwiYm90dG9tXCI6dS5iYXNlbGluZS5wdXNoKFwidG9wXCIpO2JyZWFrO2RlZmF1bHQ6dS5iYXNlbGluZS5wdXNoKGhbMF0pfX1pZihBcnJheS5pc0FycmF5KHMpKWZvcih1LmNvbG9yPW5ldyBBcnJheShyKSxlPTA7ZTxyO2UrKyl1LmNvbG9yW2VdPXNbZV07ZWxzZSB1LmNvbG9yPXM7aWYoQXJyYXkuaXNBcnJheShsKXx8QXJyYXkuaXNBcnJheShjKSlmb3IodS5mb250PW5ldyBBcnJheShyKSxlPTA7ZTxyO2UrKyl7dmFyIGY9dS5mb250W2VdPXt9O2Yuc2l6ZT1BcnJheS5pc0FycmF5KGwpP24obFtlXSk/bFtlXTowOmwsZi5mYW1pbHk9QXJyYXkuaXNBcnJheShjKT9jW2VdOmN9ZWxzZSB1LmZvbnQ9e3NpemU6bCxmYW1pbHk6Y307cmV0dXJuIHV9ZnVuY3Rpb24gbSh0KXt2YXIgZSxyLG49dC5fbGVuZ3RoLGk9dC5tYXJrZXIsbz17fSxsPUFycmF5LmlzQXJyYXkoaS5zeW1ib2wpLGM9cy5pc0FycmF5T3JUeXBlZEFycmF5KGkuY29sb3IpLGg9cy5pc0FycmF5T3JUeXBlZEFycmF5KGkubGluZS5jb2xvciksZD1zLmlzQXJyYXlPclR5cGVkQXJyYXkoaS5vcGFjaXR5KSxnPXMuaXNBcnJheU9yVHlwZWRBcnJheShpLnNpemUpLHY9cy5pc0FycmF5T3JUeXBlZEFycmF5KGkubGluZS53aWR0aCk7aWYobHx8KHI9cC5PUEVOX1JFLnRlc3QoaS5zeW1ib2wpKSxsfHxjfHxofHxkKXtvLmNvbG9ycz1uZXcgQXJyYXkobiksby5ib3JkZXJDb2xvcnM9bmV3IEFycmF5KG4pO3ZhciBtPXUoaSxpLm9wYWNpdHksbikseT11KGkubGluZSxpLm9wYWNpdHksbik7aWYoIUFycmF5LmlzQXJyYXkoeVswXSkpe3ZhciB4PXk7Zm9yKHk9QXJyYXkobiksZT0wO2U8bjtlKyspeVtlXT14fWlmKCFBcnJheS5pc0FycmF5KG1bMF0pKXt2YXIgYj1tO2ZvcihtPUFycmF5KG4pLGU9MDtlPG47ZSsrKW1bZV09Yn1mb3Ioby5jb2xvcnM9bSxvLmJvcmRlckNvbG9ycz15LGU9MDtlPG47ZSsrKXtpZihsKXt2YXIgXz1pLnN5bWJvbFtlXTtyPXAuT1BFTl9SRS50ZXN0KF8pfXImJih5W2VdPW1bZV0uc2xpY2UoKSxtW2VdPW1bZV0uc2xpY2UoKSxtW2VdWzNdPTApfW8ub3BhY2l0eT10Lm9wYWNpdHl9ZWxzZSByPyhvLmNvbG9yPWEoaS5jb2xvcixcInVpbnQ4XCIpLG8uY29sb3JbM109MCxvLmJvcmRlckNvbG9yPWEoaS5jb2xvcixcInVpbnQ4XCIpKTooby5jb2xvcj1hKGkuY29sb3IsXCJ1aW50OFwiKSxvLmJvcmRlckNvbG9yPWEoaS5saW5lLmNvbG9yLFwidWludDhcIikpLG8ub3BhY2l0eT10Lm9wYWNpdHkqaS5vcGFjaXR5O2lmKGwpZm9yKG8ubWFya2Vycz1uZXcgQXJyYXkobiksZT0wO2U8bjtlKyspby5tYXJrZXJzW2VdPU0oaS5zeW1ib2xbZV0pO2Vsc2Ugby5tYXJrZXI9TShpLnN5bWJvbCk7dmFyIHcsaz1mKHQpO2lmKGd8fHYpe3ZhciBBLFQ9by5zaXplcz1uZXcgQXJyYXkobiksUz1vLmJvcmRlclNpemVzPW5ldyBBcnJheShuKSxFPTA7aWYoZyl7Zm9yKGU9MDtlPG47ZSsrKVRbZV09ayhpLnNpemVbZV0pLEUrPVRbZV07QT1FL259ZWxzZSBmb3Iodz1rKGkuc2l6ZSksZT0wO2U8bjtlKyspVFtlXT13O2lmKHYpZm9yKGU9MDtlPG47ZSsrKVNbZV09aS5saW5lLndpZHRoW2VdLzI7ZWxzZSBmb3Iodz1pLmxpbmUud2lkdGgvMixlPTA7ZTxuO2UrKylTW2VdPXc7by5zaXplQXZnPUF9ZWxzZSBvLnNpemU9ayhpJiZpLnNpemV8fDEwKSxvLmJvcmRlclNpemVzPWsoaS5saW5lLndpZHRoKTtyZXR1cm4gb31mdW5jdGlvbiB5KHQsZSl7dmFyIHI9dC5tYXJrZXIsbj17fTtyZXR1cm4gZT8oZS5tYXJrZXImJmUubWFya2VyLnN5bWJvbD9uPW0ocy5leHRlbmRGbGF0KHt9LHIsZS5tYXJrZXIpKTplLm1hcmtlciYmKGUubWFya2VyLnNpemUmJihuLnNpemU9ZS5tYXJrZXIuc2l6ZS8yKSxlLm1hcmtlci5jb2xvciYmKG4uY29sb3JzPWUubWFya2VyLmNvbG9yKSx2b2lkIDAhPT1lLm1hcmtlci5vcGFjaXR5JiYobi5vcGFjaXR5PWUubWFya2VyLm9wYWNpdHkpKSxuKTpufWZ1bmN0aW9uIHgodCxlKXt2YXIgcj17fTtpZighZSlyZXR1cm4gcjtpZihlLnRleHRmb250KXt2YXIgbj17b3BhY2l0eToxLHRleHQ6dC50ZXh0LHRleHRwb3NpdGlvbjp0LnRleHRwb3NpdGlvbix0ZXh0Zm9udDpzLmV4dGVuZEZsYXQoe30sdC50ZXh0Zm9udCl9O2UudGV4dGZvbnQmJnMuZXh0ZW5kRmxhdChuLnRleHRmb250LGUudGV4dGZvbnQpLHI9dihuKX1yZXR1cm4gcn1mdW5jdGlvbiBiKHQsZSl7dmFyIHI9e2NhcFNpemU6MiplLndpZHRoLGxpbmVXaWR0aDplLnRoaWNrbmVzcyxjb2xvcjplLmNvbG9yfTtyZXR1cm4gZS5jb3B5X3lzdHlsZSYmKHI9dC5lcnJvcl95KSxyfXZhciBfPXAuU1lNQk9MX1NERl9TSVpFLHc9cC5TWU1CT0xfU0laRSxrPXAuU1lNQk9MX1NUUk9LRSxBPXt9LFQ9bC5zeW1ib2xGdW5jc1swXSguMDUqdyk7ZnVuY3Rpb24gTSh0KXtpZihcImNpcmNsZVwiPT09dClyZXR1cm4gbnVsbDt2YXIgZSxyLG49bC5zeW1ib2xOdW1iZXIodCksYT1sLnN5bWJvbEZ1bmNzW24lMTAwXSxvPSEhbC5zeW1ib2xOb0RvdFtuJTEwMF0scz0hIWwuc3ltYm9sTm9GaWxsW24lMTAwXSxjPXAuRE9UX1JFLnRlc3QodCk7cmV0dXJuIEFbdF0/QVt0XTooZT1jJiYhbz9hKDEuMSp3KStUOmEodykscj1pKGUse3c6XyxoOl8sdmlld0JveDpbLXcsLXcsdyx3XSxzdHJva2U6cz9rOi1rfSksQVt0XT1yLHJ8fG51bGwpfWUuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXttYXJrZXI6dm9pZCAwLG1hcmtlclNlbDp2b2lkIDAsbWFya2VyVW5zZWw6dm9pZCAwLGxpbmU6dm9pZCAwLGZpbGw6dm9pZCAwLGVycm9yWDp2b2lkIDAsZXJyb3JZOnZvaWQgMCx0ZXh0OnZvaWQgMCx0ZXh0U2VsOnZvaWQgMCx0ZXh0VW5zZWw6dm9pZCAwfTtpZighMCE9PWUudmlzaWJsZSlyZXR1cm4gbjtpZihoLmhhc1RleHQoZSkmJihuLnRleHQ9dihlKSxuLnRleHRTZWw9eChlLGUuc2VsZWN0ZWQpLG4udGV4dFVuc2VsPXgoZSxlLnVuc2VsZWN0ZWQpKSxoLmhhc01hcmtlcnMoZSkmJihuLm1hcmtlcj1tKGUpLG4ubWFya2VyU2VsPXkoZSxlLnNlbGVjdGVkKSxuLm1hcmtlclVuc2VsPXkoZSxlLnVuc2VsZWN0ZWQpLCFlLnVuc2VsZWN0ZWQmJkFycmF5LmlzQXJyYXkoZS5tYXJrZXIub3BhY2l0eSkpKXt2YXIgaT1lLm1hcmtlci5vcGFjaXR5O2ZvcihuLm1hcmtlclVuc2VsLm9wYWNpdHk9bmV3IEFycmF5KGkubGVuZ3RoKSxyPTA7cjxpLmxlbmd0aDtyKyspbi5tYXJrZXJVbnNlbC5vcGFjaXR5W3JdPWQqaVtyXX1pZihoLmhhc0xpbmVzKGUpKXtuLmxpbmU9e292ZXJsYXk6ITAsdGhpY2tuZXNzOmUubGluZS53aWR0aCxjb2xvcjplLmxpbmUuY29sb3Isb3BhY2l0eTplLm9wYWNpdHl9O3ZhciBhPShwLkRBU0hFU1tlLmxpbmUuZGFzaF18fFsxXSkuc2xpY2UoKTtmb3Iocj0wO3I8YS5sZW5ndGg7KytyKWFbcl0qPWUubGluZS53aWR0aDtuLmxpbmUuZGFzaGVzPWF9cmV0dXJuIGUuZXJyb3JfeCYmZS5lcnJvcl94LnZpc2libGUmJihuLmVycm9yWD1iKGUsZS5lcnJvcl94KSksZS5lcnJvcl95JiZlLmVycm9yX3kudmlzaWJsZSYmKG4uZXJyb3JZPWIoZSxlLmVycm9yX3kpKSxlLmZpbGwmJlwibm9uZVwiIT09ZS5maWxsJiYobi5maWxsPXtjbG9zZWQ6ITAsZmlsbDplLmZpbGxjb2xvcix0aGlja25lc3M6MH0pLG59LG1hcmtlclN0eWxlOm0sbWFya2VyU2VsZWN0aW9uOnksbGluZVBvc2l0aW9uczpmdW5jdGlvbih0LGUscil7dmFyIG4saSxhPXIubGVuZ3RoLG89YS8yO2lmKGguaGFzTGluZXMoZSkmJm8paWYoXCJodlwiPT09ZS5saW5lLnNoYXBlKXtmb3Iobj1bXSxpPTA7aTxvLTE7aSsrKWlzTmFOKHJbMippXSl8fGlzTmFOKHJbMippKzFdKT9uLnB1c2goTmFOLE5hTixOYU4sTmFOKToobi5wdXNoKHJbMippXSxyWzIqaSsxXSksaXNOYU4oclsyKmkrMl0pfHxpc05hTihyWzIqaSszXSk/bi5wdXNoKE5hTixOYU4pOm4ucHVzaChyWzIqaSsyXSxyWzIqaSsxXSkpO24ucHVzaChyW2EtMl0sclthLTFdKX1lbHNlIGlmKFwiaHZoXCI9PT1lLmxpbmUuc2hhcGUpe2ZvcihuPVtdLGk9MDtpPG8tMTtpKyspaWYoaXNOYU4oclsyKmldKXx8aXNOYU4oclsyKmkrMV0pfHxpc05hTihyWzIqaSsyXSl8fGlzTmFOKHJbMippKzNdKSlpc05hTihyWzIqaV0pfHxpc05hTihyWzIqaSsxXSk/bi5wdXNoKE5hTixOYU4pOm4ucHVzaChyWzIqaV0sclsyKmkrMV0pLG4ucHVzaChOYU4sTmFOKTtlbHNle3ZhciBzPShyWzIqaV0rclsyKmkrMl0pLzI7bi5wdXNoKHJbMippXSxyWzIqaSsxXSxzLHJbMippKzFdLHMsclsyKmkrM10pfW4ucHVzaChyW2EtMl0sclthLTFdKX1lbHNlIGlmKFwidmh2XCI9PT1lLmxpbmUuc2hhcGUpe2ZvcihuPVtdLGk9MDtpPG8tMTtpKyspaWYoaXNOYU4oclsyKmldKXx8aXNOYU4oclsyKmkrMV0pfHxpc05hTihyWzIqaSsyXSl8fGlzTmFOKHJbMippKzNdKSlpc05hTihyWzIqaV0pfHxpc05hTihyWzIqaSsxXSk/bi5wdXNoKE5hTixOYU4pOm4ucHVzaChyWzIqaV0sclsyKmkrMV0pLG4ucHVzaChOYU4sTmFOKTtlbHNle3ZhciBsPShyWzIqaSsxXStyWzIqaSszXSkvMjtuLnB1c2goclsyKmldLHJbMippKzFdLHJbMippXSxsLHJbMippKzJdLGwpfW4ucHVzaChyW2EtMl0sclthLTFdKX1lbHNlIGlmKFwidmhcIj09PWUubGluZS5zaGFwZSl7Zm9yKG49W10saT0wO2k8by0xO2krKylpc05hTihyWzIqaV0pfHxpc05hTihyWzIqaSsxXSk/bi5wdXNoKE5hTixOYU4sTmFOLE5hTik6KG4ucHVzaChyWzIqaV0sclsyKmkrMV0pLGlzTmFOKHJbMippKzJdKXx8aXNOYU4oclsyKmkrM10pP24ucHVzaChOYU4sTmFOKTpuLnB1c2goclsyKmldLHJbMippKzNdKSk7bi5wdXNoKHJbYS0yXSxyW2EtMV0pfWVsc2Ugbj1yO3ZhciBjPSExO2ZvcihpPTA7aTxuLmxlbmd0aDtpKyspaWYoaXNOYU4obltpXSkpe2M9ITA7YnJlYWt9dmFyIHU9Y3x8bi5sZW5ndGg+cC5UT09fTUFOWV9QT0lOVFM/XCJyZWN0XCI6aC5oYXNNYXJrZXJzKGUpP1wicmVjdFwiOlwicm91bmRcIjtpZihjJiZlLmNvbm5lY3RnYXBzKXt2YXIgZj1uWzBdLGQ9blsxXTtmb3IoaT0wO2k8bi5sZW5ndGg7aSs9Milpc05hTihuW2ldKXx8aXNOYU4obltpKzFdKT8obltpXT1mLG5baSsxXT1kKTooZj1uW2ldLGQ9bltpKzFdKX1yZXR1cm57am9pbjp1LHBvc2l0aW9uczpufX0sZXJyb3JCYXJQb3NpdGlvbnM6ZnVuY3Rpb24odCxlLHIsaSxhKXt2YXIgcz1vLmdldENvbXBvbmVudE1ldGhvZChcImVycm9yYmFyc1wiLFwibWFrZUNvbXB1dGVFcnJvclwiKSxsPWMuZ2V0RnJvbUlkKHQsZS54YXhpcyksdT1jLmdldEZyb21JZCh0LGUueWF4aXMpLGg9ci5sZW5ndGgvMixmPXt9O2Z1bmN0aW9uIHAodCxpKXt2YXIgYT1pLl9pZC5jaGFyQXQoMCksbz1lW1wiZXJyb3JfXCIrYV07aWYobyYmby52aXNpYmxlJiYoXCJsaW5lYXJcIj09PWkudHlwZXx8XCJsb2dcIj09PWkudHlwZSkpe2Zvcih2YXIgbD1zKG8pLGM9e3g6MCx5OjF9W2FdLHU9e3g6WzAsMSwyLDNdLHk6WzIsMywwLDFdfVthXSxwPW5ldyBGbG9hdDY0QXJyYXkoNCpoKSxkPTEvMCxnPS0xLzAsdj0wLG09MDt2PGg7disrLG0rPTQpe3ZhciB5PXRbdl07aWYobih5KSl7dmFyIHg9clsyKnYrY10sYj1sKHksdiksXz1iWzBdLHc9YlsxXTtpZihuKF8pJiZuKHcpKXt2YXIgaz15LV8sQT15K3c7cFttK3VbMF1dPXgtaS5jMmwoaykscFttK3VbMV1dPWkuYzJsKEEpLXgscFttK3VbMl1dPTAscFttK3VbM11dPTAsZD1NYXRoLm1pbihkLHktXyksZz1NYXRoLm1heChnLHkrdyl9fX1mW2FdPXtwb3NpdGlvbnM6cixlcnJvcnM6cCxfYm5kczpbZCxnXX19fXJldHVybiBwKGksbCkscChhLHUpLGZ9LHRleHRQb3NpdGlvbjpmdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPWUuX2xlbmd0aCxvPXt9O2lmKGguaGFzTWFya2VycyhlKSl7dmFyIHM9ci5mb250LGw9ci5hbGlnbixjPXIuYmFzZWxpbmU7Zm9yKG8ub2Zmc2V0PW5ldyBBcnJheShhKSxpPTA7aTxhO2krKyl7dmFyIHU9bi5zaXplcz9uLnNpemVzW2ldOm4uc2l6ZSxmPUFycmF5LmlzQXJyYXkocyk/c1tpXS5zaXplOnMuc2l6ZSxwPUFycmF5LmlzQXJyYXkobCk/bC5sZW5ndGg+MT9sW2ldOmxbMF06bCxkPUFycmF5LmlzQXJyYXkoYyk/Yy5sZW5ndGg+MT9jW2ldOmNbMF06Yyx2PWdbcF0sbT1nW2RdLHk9dT91Ly44KzE6MCx4PS1tKnktLjUqbTtvLm9mZnNldFtpXT1bdip5L2YseC9mXX19cmV0dXJuIG99fX0se1wiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9uc1wiOjY3NyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3JcIjo2OTgsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIjo3NTIsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jXCI6MTA2OSxcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi9jb25zdGFudHNcIjoxMTAyLFwiY29sb3Itbm9ybWFsaXplXCI6MTExLFwiZmFzdC1pc251bWVyaWNcIjoyMjIsXCJzdmctcGF0aC1zZGZcIjo1MjB9XSwxMTA0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxhPXQoXCIuL2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vc2NhdHRlci9jb25zdGFudHNcIikscz10KFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiKSxsPXQoXCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzXCIpLGM9dChcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCIpLHU9dChcIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0c1wiKSxoPXQoXCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0c1wiKSxmPXQoXCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHApe2Z1bmN0aW9uIGQocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgZz0hIXQubWFya2VyJiYvLW9wZW4vLnRlc3QodC5tYXJrZXIuc3ltYm9sKSx2PXMuaXNCdWJibGUodCksbT1sKHQsZSxwLGQpO2lmKG0pe3ZhciB5PW08by5QVFNfTElORVNPTkxZP1wibGluZXMrbWFya2Vyc1wiOlwibGluZXNcIjtkKFwidGV4dFwiKSxkKFwiaG92ZXJ0ZXh0XCIpLGQoXCJob3ZlcnRlbXBsYXRlXCIpLGQoXCJtb2RlXCIseSkscy5oYXNMaW5lcyhlKSYmKGQoXCJjb25uZWN0Z2Fwc1wiKSx1KHQsZSxyLHAsZCksZChcImxpbmUuc2hhcGVcIikpLHMuaGFzTWFya2VycyhlKSYmKGModCxlLHIscCxkKSxkKFwibWFya2VyLmxpbmUud2lkdGhcIixnfHx2PzE6MCkpLHMuaGFzVGV4dChlKSYmZih0LGUscCxkKTt2YXIgeD0oZS5saW5lfHx7fSkuY29sb3IsYj0oZS5tYXJrZXJ8fHt9KS5jb2xvcjtkKFwiZmlsbFwiKSxcIm5vbmVcIiE9PWUuZmlsbCYmaCh0LGUscixkKTt2YXIgXz1pLmdldENvbXBvbmVudE1ldGhvZChcImVycm9yYmFyc1wiLFwic3VwcGx5RGVmYXVsdHNcIik7Xyh0LGUseHx8Ynx8cix7YXhpczpcInlcIn0pLF8odCxlLHh8fGJ8fHIse2F4aXM6XCJ4XCIsaW5oZXJpdDpcInlcIn0pLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGQpfWVsc2UgZS52aXNpYmxlPSExfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9zY2F0dGVyL2NvbnN0YW50c1wiOjEwNTYsXCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0c1wiOjEwNjEsXCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHNcIjoxMDY1LFwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHNcIjoxMDcxLFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiOjEwNzYsXCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHNcIjoxMDc3LFwiLi4vc2NhdHRlci94eV9kZWZhdWx0c1wiOjEwNzgsXCIuL2F0dHJpYnV0ZXNcIjoxMTAxfV0sMTEwNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJyZWdsLXNjYXR0ZXIyZFwiKSxpPXQoXCJyZWdsLWxpbmUyZFwiKSxhPXQoXCJyZWdsLWVycm9yMmRcIiksbz10KFwicG9pbnQtY2x1c3RlclwiKSxzPXQoXCJhcnJheS1yYW5nZVwiKSxsPXQoXCJnbC10ZXh0XCIpLGM9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLHU9dChcIi4uLy4uL2xpYlwiKSxoPXQoXCIuLi8uLi9saWIvcHJlcGFyZV9yZWdsXCIpLGY9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiKSxwPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlXCIpLmZpbmRFeHRyZW1lcyxkPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGc9dChcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIiksdj10KFwiLi4vc2NhdHRlci9jYWxjXCIpLG09di5jYWxjTWFya2VyU2l6ZSx5PXYuY2FsY0F4aXNFeHBhbnNpb24seD12LnNldEZpcnN0U2NhdHRlcixiPXQoXCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsY1wiKSxfPXQoXCIuLi9zY2F0dGVyL2xpbmtfdHJhY2VzXCIpLHc9dChcIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yXCIpLGs9dChcIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0XCIpLEE9dChcIi4vY29udmVydFwiKSxUPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTSxNPXQoXCIuL2NvbnN0YW50c1wiKS5UT09fTUFOWV9QT0lOVFMsUz10KFwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9uc1wiKS5ERVNFTEVDVERJTTtmdW5jdGlvbiBFKHQsZSxyKXt2YXIgbj10Ll9leHRyZW1lc1tlLl9pZF0saT1wKGUsci5fYm5kcyx7cGFkZGVkOiEwfSk7bi5taW49bi5taW4uY29uY2F0KGkubWluKSxuLm1heD1uLm1heC5jb25jYXQoaS5tYXgpfWZ1bmN0aW9uIEModCxlKXt2YXIgcj1lLl9zY2VuZSxuPXtjb3VudDowLGRpcnR5OiEwLGxpbmVPcHRpb25zOltdLGZpbGxPcHRpb25zOltdLG1hcmtlck9wdGlvbnM6W10sbWFya2VyU2VsZWN0ZWRPcHRpb25zOltdLG1hcmtlclVuc2VsZWN0ZWRPcHRpb25zOltdLGVycm9yWE9wdGlvbnM6W10sZXJyb3JZT3B0aW9uczpbXSx0ZXh0T3B0aW9uczpbXSx0ZXh0U2VsZWN0ZWRPcHRpb25zOltdLHRleHRVbnNlbGVjdGVkT3B0aW9uczpbXX0saT17c2VsZWN0QmF0Y2g6bnVsbCx1bnNlbGVjdEJhdGNoOm51bGwsZmlsbDJkOiExLHNjYXR0ZXIyZDohMSxlcnJvcjJkOiExLGxpbmUyZDohMSxnbFRleHQ6ITEsc2VsZWN0MmQ6bnVsbH07cmV0dXJuIGUuX3NjZW5lfHwoKHI9ZS5fc2NlbmU9e30pLmluaXQ9ZnVuY3Rpb24oKXt1LmV4dGVuZEZsYXQocixpLG4pfSxyLmluaXQoKSxyLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT11LnJlcGVhdCh0LHIuY291bnQpO2lmKHIuZmlsbDJkJiZyLmZpbGwyZC51cGRhdGUoZSksci5zY2F0dGVyMmQmJnIuc2NhdHRlcjJkLnVwZGF0ZShlKSxyLmxpbmUyZCYmci5saW5lMmQudXBkYXRlKGUpLHIuZXJyb3IyZCYmci5lcnJvcjJkLnVwZGF0ZShlLmNvbmNhdChlKSksci5zZWxlY3QyZCYmci5zZWxlY3QyZC51cGRhdGUoZSksci5nbFRleHQpZm9yKHZhciBuPTA7bjxyLmNvdW50O24rKylyLmdsVGV4dFtuXS51cGRhdGUodCl9LHIuZHJhdz1mdW5jdGlvbigpe2Zvcih2YXIgdD1yLmNvdW50LGU9ci5maWxsMmQsbj1yLmVycm9yMmQsaT1yLmxpbmUyZCxhPXIuc2NhdHRlcjJkLG89ci5nbFRleHQscz1yLnNlbGVjdDJkLGw9ci5zZWxlY3RCYXRjaCxjPXIudW5zZWxlY3RCYXRjaCx1PTA7dTx0O3UrKyllJiZyLmZpbGxPcmRlclt1XSYmZS5kcmF3KHIuZmlsbE9yZGVyW3VdKSxpJiZyLmxpbmVPcHRpb25zW3VdJiZpLmRyYXcodSksbiYmKHIuZXJyb3JYT3B0aW9uc1t1XSYmbi5kcmF3KHUpLHIuZXJyb3JZT3B0aW9uc1t1XSYmbi5kcmF3KHUrdCkpLCFhfHwhci5tYXJrZXJPcHRpb25zW3VdfHxsJiZsW3VdfHxhLmRyYXcodSksb1t1XSYmci50ZXh0T3B0aW9uc1t1XSYmb1t1XS5yZW5kZXIoKTthJiZzJiZsJiYocy5kcmF3KGwpLGEuZHJhdyhjKSksci5kaXJ0eT0hMX0sci5kZXN0cm95PWZ1bmN0aW9uKCl7ci5maWxsMmQmJnIuZmlsbDJkLmRlc3Ryb3kmJnIuZmlsbDJkLmRlc3Ryb3koKSxyLnNjYXR0ZXIyZCYmci5zY2F0dGVyMmQuZGVzdHJveSYmci5zY2F0dGVyMmQuZGVzdHJveSgpLHIuZXJyb3IyZCYmci5lcnJvcjJkLmRlc3Ryb3kmJnIuZXJyb3IyZC5kZXN0cm95KCksci5saW5lMmQmJnIubGluZTJkLmRlc3Ryb3kmJnIubGluZTJkLmRlc3Ryb3koKSxyLnNlbGVjdDJkJiZyLnNlbGVjdDJkLmRlc3Ryb3kmJnIuc2VsZWN0MmQuZGVzdHJveSgpLHIuZ2xUZXh0JiZyLmdsVGV4dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZGVzdHJveSYmdC5kZXN0cm95KCl9KSxyLmxpbmVPcHRpb25zPW51bGwsci5maWxsT3B0aW9ucz1udWxsLHIubWFya2VyT3B0aW9ucz1udWxsLHIubWFya2VyU2VsZWN0ZWRPcHRpb25zPW51bGwsci5tYXJrZXJVbnNlbGVjdGVkT3B0aW9ucz1udWxsLHIuZXJyb3JYT3B0aW9ucz1udWxsLHIuZXJyb3JZT3B0aW9ucz1udWxsLHIudGV4dE9wdGlvbnM9bnVsbCxyLnRleHRTZWxlY3RlZE9wdGlvbnM9bnVsbCxyLnRleHRVbnNlbGVjdGVkT3B0aW9ucz1udWxsLHIuc2VsZWN0QmF0Y2g9bnVsbCxyLnVuc2VsZWN0QmF0Y2g9bnVsbCxlLl9zY2VuZT1udWxsfSksci5kaXJ0eXx8dS5leHRlbmRGbGF0KHIsbikscn1mdW5jdGlvbiBMKHQsZSxyLG4pe3ZhciBpPXQueGEsYT10LnlhLG89dC5kaXN0YW5jZSxzPXQuZHh5LGw9dC5pbmRleCxoPXtwb2ludE51bWJlcjpsLHg6ZVtsXSx5OnJbbF19O2gudHg9QXJyYXkuaXNBcnJheShuLnRleHQpP24udGV4dFtsXTpuLnRleHQsaC5odHg9QXJyYXkuaXNBcnJheShuLmhvdmVydGV4dCk/bi5ob3ZlcnRleHRbbF06bi5ob3ZlcnRleHQsaC5kYXRhPUFycmF5LmlzQXJyYXkobi5jdXN0b21kYXRhKT9uLmN1c3RvbWRhdGFbbF06bi5jdXN0b21kYXRhLGgudHA9QXJyYXkuaXNBcnJheShuLnRleHRwb3NpdGlvbik/bi50ZXh0cG9zaXRpb25bbF06bi50ZXh0cG9zaXRpb247dmFyIGY9bi50ZXh0Zm9udDtmJiYoaC50cz1BcnJheS5pc0FycmF5KGYuc2l6ZSk/Zi5zaXplW2xdOmYuc2l6ZSxoLnRjPUFycmF5LmlzQXJyYXkoZi5jb2xvcik/Zi5jb2xvcltsXTpmLmNvbG9yLGgudGY9QXJyYXkuaXNBcnJheShmLmZhbWlseSk/Zi5mYW1pbHlbbF06Zi5mYW1pbHkpO3ZhciBwPW4ubWFya2VyO3AmJihoLm1zPXUuaXNBcnJheU9yVHlwZWRBcnJheShwLnNpemUpP3Auc2l6ZVtsXTpwLnNpemUsaC5tbz11LmlzQXJyYXlPclR5cGVkQXJyYXkocC5vcGFjaXR5KT9wLm9wYWNpdHlbbF06cC5vcGFjaXR5LGgubXg9QXJyYXkuaXNBcnJheShwLnN5bWJvbCk/cC5zeW1ib2xbbF06cC5zeW1ib2wsaC5tYz11LmlzQXJyYXlPclR5cGVkQXJyYXkocC5jb2xvcik/cC5jb2xvcltsXTpwLmNvbG9yKTt2YXIgZD1wJiZwLmxpbmU7ZCYmKGgubWxjPUFycmF5LmlzQXJyYXkoZC5jb2xvcik/ZC5jb2xvcltsXTpkLmNvbG9yLGgubWx3PXUuaXNBcnJheU9yVHlwZWRBcnJheShkLndpZHRoKT9kLndpZHRoW2xdOmQud2lkdGgpO3ZhciBnPXAmJnAuZ3JhZGllbnQ7ZyYmXCJub25lXCIhPT1nLnR5cGUmJihoLm1ndD1BcnJheS5pc0FycmF5KGcudHlwZSk/Zy50eXBlW2xdOmcudHlwZSxoLm1nYz1BcnJheS5pc0FycmF5KGcuY29sb3IpP2cuY29sb3JbbF06Zy5jb2xvcik7dmFyIHY9aS5jMnAoaC54LCEwKSxtPWEuYzJwKGgueSwhMCkseT1oLm1yY3x8MSx4PW4uaG92ZXJsYWJlbDt4JiYoaC5oYmc9QXJyYXkuaXNBcnJheSh4LmJnY29sb3IpP3guYmdjb2xvcltsXTp4LmJnY29sb3IsaC5oYmM9QXJyYXkuaXNBcnJheSh4LmJvcmRlcmNvbG9yKT94LmJvcmRlcmNvbG9yW2xdOnguYm9yZGVyY29sb3IsaC5odHM9QXJyYXkuaXNBcnJheSh4LmZvbnQuc2l6ZSk/eC5mb250LnNpemVbbF06eC5mb250LnNpemUsaC5odGM9QXJyYXkuaXNBcnJheSh4LmZvbnQuY29sb3IpP3guZm9udC5jb2xvcltsXTp4LmZvbnQuY29sb3IsaC5odGY9QXJyYXkuaXNBcnJheSh4LmZvbnQuZmFtaWx5KT94LmZvbnQuZmFtaWx5W2xdOnguZm9udC5mYW1pbHksaC5obmw9QXJyYXkuaXNBcnJheSh4Lm5hbWVsZW5ndGgpP3gubmFtZWxlbmd0aFtsXTp4Lm5hbWVsZW5ndGgpO3ZhciBiPW4uaG92ZXJpbmZvO2ImJihoLmhpPUFycmF5LmlzQXJyYXkoYik/YltsXTpiKTt2YXIgXz1uLmhvdmVydGVtcGxhdGU7XyYmKGguaHQ9QXJyYXkuaXNBcnJheShfKT9fW2xdOl8pO3ZhciBBPXt9O3JldHVybiBBW3QuaW5kZXhdPWgsdS5leHRlbmRGbGF0KHQse2NvbG9yOncobixoKSx4MDp2LXkseDE6dit5LHhMYWJlbFZhbDpoLngseTA6bS15LHkxOm0reSx5TGFiZWxWYWw6aC55LGNkOkEsZGlzdGFuY2U6byxzcGlrZURpc3RhbmNlOnMsaG92ZXJ0ZW1wbGF0ZTpoLmh0fSksaC5odHg/dC50ZXh0PWguaHR4OmgudHg/dC50ZXh0PWgudHg6bi50ZXh0JiYodC50ZXh0PW4udGV4dCksayhoLG4sdCksYy5nZXRDb21wb25lbnRNZXRob2QoXCJlcnJvcmJhcnNcIixcImhvdmVySW5mb1wiKShoLG4sdCksdH1mdW5jdGlvbiB6KHQpe3ZhciBlLHIsbj10WzBdLGk9bi50cmFjZSxhPW4udCxvPWEuX3NjZW5lLHM9YS5pbmRleCxsPW8uc2VsZWN0QmF0Y2hbc10sYz1vLnVuc2VsZWN0QmF0Y2hbc10saD1vLnRleHRPcHRpb25zW3NdLGY9by50ZXh0U2VsZWN0ZWRPcHRpb25zW3NdfHx7fSxwPW8udGV4dFVuc2VsZWN0ZWRPcHRpb25zW3NdfHx7fSxnPXUuZXh0ZW5kRmxhdCh7fSxoKTtpZihsJiZjKXt2YXIgdj1mLmNvbG9yLG09cC5jb2xvcix5PWguY29sb3IseD1BcnJheS5pc0FycmF5KHkpO2ZvcihnLmNvbG9yPW5ldyBBcnJheShpLl9sZW5ndGgpLGU9MDtlPGwubGVuZ3RoO2UrKylyPWxbZV0sZy5jb2xvcltyXT12fHwoeD95W3JdOnkpO2ZvcihlPTA7ZTxjLmxlbmd0aDtlKyspe3I9Y1tlXTt2YXIgYj14P3lbcl06eTtnLmNvbG9yW3JdPW18fCh2P2I6ZC5hZGRPcGFjaXR5KGIsUykpfX1vLmdsVGV4dFtzXS51cGRhdGUoZyl9ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwidHJhY2VcIixuYW1lOlwic2NhdHRlcmdsXCIsYmFzZVBsb3RNb2R1bGU6dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiKSxjYXRlZ29yaWVzOltcImdsXCIsXCJyZWdsXCIsXCJjYXJ0ZXNpYW5cIixcInN5bWJvbHNcIixcImVycm9yQmFyc09LXCIsXCJzaG93TGVnZW5kXCIsXCJzY2F0dGVyLWxpa2VcIl0sYXR0cmlidXRlczp0KFwiLi9hdHRyaWJ1dGVzXCIpLHN1cHBseURlZmF1bHRzOnQoXCIuL2RlZmF1bHRzXCIpLGNyb3NzVHJhY2VEZWZhdWx0czp0KFwiLi4vc2NhdHRlci9jcm9zc190cmFjZV9kZWZhdWx0c1wiKSxjb2xvcmJhcjp0KFwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXJcIiksY2FsYzpmdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPXQuX2Z1bGxMYXlvdXQscz1mLmdldEZyb21JZCh0LGUueGF4aXMpLGw9Zi5nZXRGcm9tSWQodCxlLnlheGlzKSxjPWEuX3Bsb3RzW2UueGF4aXMrZS55YXhpc10saD1lLl9sZW5ndGgscD1oPj1NLGQ9MipoLGc9e30sdj1zLm1ha2VDYWxjZGF0YShlLFwieFwiKSxfPWwubWFrZUNhbGNkYXRhKGUsXCJ5XCIpLHc9bmV3IEFycmF5KGQpO2ZvcihyPTA7cjxoO3IrKyluPXZbcl0saT1fW3JdLHdbMipyXT1uPT09VD9OYU46bix3WzIqcisxXT1pPT09VD9OYU46aTtpZihcImxvZ1wiPT09cy50eXBlKWZvcihyPTA7cjxkO3IrPTIpd1tyXT1zLmMybCh3W3JdKTtpZihcImxvZ1wiPT09bC50eXBlKWZvcihyPTE7cjxkO3IrPTIpd1tyXT1sLmMybCh3W3JdKTtpZihwJiZcImxvZ1wiIT09cy50eXBlJiZcImxvZ1wiIT09bC50eXBlKWcudHJlZT1vKHcpO2Vsc2V7dmFyIGs9Zy5pZHM9bmV3IEFycmF5KGgpO2ZvcihyPTA7cjxoO3IrKylrW3JdPXJ9Yih0LGUpO3ZhciBTLEw9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPUEuc3R5bGUodCxyKTtpZihvLm1hcmtlciYmKG8ubWFya2VyLnBvc2l0aW9ucz1uKSxvLmxpbmUmJm4ubGVuZ3RoPjEmJnUuZXh0ZW5kRmxhdChvLmxpbmUsQS5saW5lUG9zaXRpb25zKHQscixuKSksby5lcnJvclh8fG8uZXJyb3JZKXt2YXIgcz1BLmVycm9yQmFyUG9zaXRpb25zKHQscixuLGksYSk7by5lcnJvclgmJnUuZXh0ZW5kRmxhdChvLmVycm9yWCxzLngpLG8uZXJyb3JZJiZ1LmV4dGVuZEZsYXQoby5lcnJvclkscy55KX1yZXR1cm4gby50ZXh0JiYodS5leHRlbmRGbGF0KG8udGV4dCx7cG9zaXRpb25zOm59LEEudGV4dFBvc2l0aW9uKHQscixvLnRleHQsby5tYXJrZXIpKSx1LmV4dGVuZEZsYXQoby50ZXh0U2VsLHtwb3NpdGlvbnM6bn0sQS50ZXh0UG9zaXRpb24odCxyLG8udGV4dCxvLm1hcmtlclNlbCkpLHUuZXh0ZW5kRmxhdChvLnRleHRVbnNlbCx7cG9zaXRpb25zOm59LEEudGV4dFBvc2l0aW9uKHQscixvLnRleHQsby5tYXJrZXJVbnNlbCkpKSxvfSh0LDAsZSx3LHYsXyksej1DKDAsYyk7cmV0dXJuIHgoYSxlKSxwP0wubWFya2VyJiYoUz0yKihMLm1hcmtlci5zaXplQXZnfHxNYXRoLm1heChMLm1hcmtlci5zaXplLDMpKSk6Uz1tKGUsaCkseSh0LGUscyxsLHYsXyxTKSxMLmVycm9yWCYmRShlLHMsTC5lcnJvclgpLEwuZXJyb3JZJiZFKGUsbCxMLmVycm9yWSksTC5maWxsJiYhei5maWxsMmQmJih6LmZpbGwyZD0hMCksTC5tYXJrZXImJiF6LnNjYXR0ZXIyZCYmKHouc2NhdHRlcjJkPSEwKSxMLmxpbmUmJiF6LmxpbmUyZCYmKHoubGluZTJkPSEwKSwhTC5lcnJvclgmJiFMLmVycm9yWXx8ei5lcnJvcjJkfHwoei5lcnJvcjJkPSEwKSxMLnRleHQmJiF6LmdsVGV4dCYmKHouZ2xUZXh0PSEwKSxMLm1hcmtlciYmKEwubWFya2VyLnNuYXA9Zy50cmVlfHxNKSx6LmxpbmVPcHRpb25zLnB1c2goTC5saW5lKSx6LmVycm9yWE9wdGlvbnMucHVzaChMLmVycm9yWCksei5lcnJvcllPcHRpb25zLnB1c2goTC5lcnJvclkpLHouZmlsbE9wdGlvbnMucHVzaChMLmZpbGwpLHoubWFya2VyT3B0aW9ucy5wdXNoKEwubWFya2VyKSx6Lm1hcmtlclNlbGVjdGVkT3B0aW9ucy5wdXNoKEwubWFya2VyU2VsKSx6Lm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zLnB1c2goTC5tYXJrZXJVbnNlbCksei50ZXh0T3B0aW9ucy5wdXNoKEwudGV4dCksei50ZXh0U2VsZWN0ZWRPcHRpb25zLnB1c2goTC50ZXh0U2VsKSx6LnRleHRVbnNlbGVjdGVkT3B0aW9ucy5wdXNoKEwudGV4dFVuc2VsKSxnLl9zY2VuZT16LGcuaW5kZXg9ei5jb3VudCxnLng9dixnLnk9XyxnLnBvc2l0aW9ucz13LHouY291bnQrKyxbe3g6ITEseTohMSx0OmcsdHJhY2U6ZX1dfSxwbG90OmZ1bmN0aW9uKHQsZSxyKXtpZihyLmxlbmd0aCl7dmFyIG8scyxjPXQuX2Z1bGxMYXlvdXQsZj1lLl9zY2VuZSxwPWUueGF4aXMsZD1lLnlheGlzO2lmKGYpaWYoaCh0LFtcIkFOR0xFX2luc3RhbmNlZF9hcnJheXNcIixcIk9FU19lbGVtZW50X2luZGV4X3VpbnRcIl0pKXt2YXIgdj1jLl9nbGNhbnZhcy5kYXRhKClbMF0ucmVnbDtpZihfKHQsZSxyKSxmLmRpcnR5KXtpZighMD09PWYuZXJyb3IyZCYmKGYuZXJyb3IyZD1hKHYpKSwhMD09PWYubGluZTJkJiYoZi5saW5lMmQ9aSh2KSksITA9PT1mLnNjYXR0ZXIyZCYmKGYuc2NhdHRlcjJkPW4odikpLCEwPT09Zi5maWxsMmQmJihmLmZpbGwyZD1pKHYpKSwhMD09PWYuZ2xUZXh0KWZvcihmLmdsVGV4dD1uZXcgQXJyYXkoZi5jb3VudCksbz0wO288Zi5jb3VudDtvKyspZi5nbFRleHRbb109bmV3IGwodik7aWYoZi5nbFRleHQpe2lmKGYuY291bnQ+Zi5nbFRleHQubGVuZ3RoKXt2YXIgbT1mLmNvdW50LWYuZ2xUZXh0Lmxlbmd0aDtmb3Iobz0wO288bTtvKyspZi5nbFRleHQucHVzaChuZXcgbCh2KSl9ZWxzZSBpZihmLmNvdW50PGYuZ2xUZXh0Lmxlbmd0aCl7dmFyIHk9Zi5nbFRleHQubGVuZ3RoLWYuY291bnQ7Zi5nbFRleHQuc3BsaWNlKGYuY291bnQseSkuZm9yRWFjaChmdW5jdGlvbih0KXt0LmRlc3Ryb3koKX0pfWZvcihvPTA7bzxmLmNvdW50O28rKylmLmdsVGV4dFtvXS51cGRhdGUoZi50ZXh0T3B0aW9uc1tvXSl9aWYoZi5saW5lMmQmJihmLmxpbmUyZC51cGRhdGUoZi5saW5lT3B0aW9ucyksZi5saW5lT3B0aW9ucz1mLmxpbmVPcHRpb25zLm1hcChmdW5jdGlvbih0KXtpZih0JiZ0LnBvc2l0aW9ucyl7Zm9yKHZhciBlPXQucG9zaXRpb25zLHI9MDtyPGUubGVuZ3RoJiYoaXNOYU4oZVtyXSl8fGlzTmFOKGVbcisxXSkpOylyKz0yO2Zvcih2YXIgbj1lLmxlbmd0aC0yO24+ciYmKGlzTmFOKGVbbl0pfHxpc05hTihlW24rMV0pKTspbi09Mjt0LnBvc2l0aW9ucz1lLnNsaWNlKHIsbisyKX1yZXR1cm4gdH0pLGYubGluZTJkLnVwZGF0ZShmLmxpbmVPcHRpb25zKSksZi5lcnJvcjJkKXt2YXIgeD0oZi5lcnJvclhPcHRpb25zfHxbXSkuY29uY2F0KGYuZXJyb3JZT3B0aW9uc3x8W10pO2YuZXJyb3IyZC51cGRhdGUoeCl9Zi5zY2F0dGVyMmQmJmYuc2NhdHRlcjJkLnVwZGF0ZShmLm1hcmtlck9wdGlvbnMpLGYuZmlsbE9yZGVyPXUucmVwZWF0KG51bGwsZi5jb3VudCksZi5maWxsMmQmJihmLmZpbGxPcHRpb25zPWYuZmlsbE9wdGlvbnMubWFwKGZ1bmN0aW9uKHQsZSl7dmFyIG49cltlXTtpZih0JiZuJiZuWzBdJiZuWzBdLnRyYWNlKXt2YXIgaSxhLG89blswXSxzPW8udHJhY2UsbD1vLnQsYz1mLmxpbmVPcHRpb25zW2VdLHU9W107cy5fb3duZmlsbCYmdS5wdXNoKGUpLHMuX25leHR0cmFjZSYmdS5wdXNoKGUrMSksdS5sZW5ndGgmJihmLmZpbGxPcmRlcltlXT11KTt2YXIgaCxwLGQ9W10sZz1jJiZjLnBvc2l0aW9uc3x8bC5wb3NpdGlvbnM7aWYoXCJ0b3plcm95XCI9PT1zLmZpbGwpe2ZvcihoPTA7aDxnLmxlbmd0aCYmaXNOYU4oZ1toKzFdKTspaCs9Mjtmb3IocD1nLmxlbmd0aC0yO3A+aCYmaXNOYU4oZ1twKzFdKTspcC09MjswIT09Z1toKzFdJiYoZD1bZ1toXSwwXSksZD1kLmNvbmNhdChnLnNsaWNlKGgscCsyKSksMCE9PWdbcCsxXSYmKGQ9ZC5jb25jYXQoW2dbcF0sMF0pKX1lbHNlIGlmKFwidG96ZXJveFwiPT09cy5maWxsKXtmb3IoaD0wO2g8Zy5sZW5ndGgmJmlzTmFOKGdbaF0pOyloKz0yO2ZvcihwPWcubGVuZ3RoLTI7cD5oJiZpc05hTihnW3BdKTspcC09MjswIT09Z1toXSYmKGQ9WzAsZ1toKzFdXSksZD1kLmNvbmNhdChnLnNsaWNlKGgscCsyKSksMCE9PWdbcF0mJihkPWQuY29uY2F0KFswLGdbcCsxXV0pKX1lbHNlIGlmKFwidG9zZWxmXCI9PT1zLmZpbGx8fFwidG9uZXh0XCI9PT1zLmZpbGwpe2ZvcihkPVtdLGk9MCxhPTA7YTxnLmxlbmd0aDthKz0yKShpc05hTihnW2FdKXx8aXNOYU4oZ1thKzFdKSkmJigoZD1kLmNvbmNhdChnLnNsaWNlKGksYSkpKS5wdXNoKGdbaV0sZ1tpKzFdKSxpPWErMik7ZD1kLmNvbmNhdChnLnNsaWNlKGkpKSxpJiZkLnB1c2goZ1tpXSxnW2krMV0pfWVsc2V7dmFyIHY9cy5fbmV4dHRyYWNlO2lmKHYpe3ZhciBtPWYubGluZU9wdGlvbnNbZSsxXTtpZihtKXt2YXIgeT1tLnBvc2l0aW9ucztpZihcInRvbmV4dHlcIj09PXMuZmlsbCl7Zm9yKGQ9Zy5zbGljZSgpLGU9TWF0aC5mbG9vcih5Lmxlbmd0aC8yKTtlLS07KXt2YXIgeD15WzIqZV0sYj15WzIqZSsxXTtpc05hTih4KXx8aXNOYU4oYil8fGQucHVzaCh4LGIpfXQuZmlsbD12LmZpbGxjb2xvcn19fX1pZihzLl9wcmV2dHJhY2UmJlwidG9uZXh0XCI9PT1zLl9wcmV2dHJhY2UuZmlsbCl7dmFyIF89Zi5saW5lT3B0aW9uc1tlLTFdLnBvc2l0aW9ucyx3PWQubGVuZ3RoLzIsaz1baT13XTtmb3IoYT0wO2E8Xy5sZW5ndGg7YSs9MikoaXNOYU4oX1thXSl8fGlzTmFOKF9bYSsxXSkpJiYoay5wdXNoKGEvMit3KzEpLGk9YSsyKTtkPWQuY29uY2F0KF8pLHQuaG9sZT1rfXJldHVybiB0LmZpbGxtb2RlPXMuZmlsbCx0Lm9wYWNpdHk9cy5vcGFjaXR5LHQucG9zaXRpb25zPWQsdH19KSxmLmZpbGwyZC51cGRhdGUoZi5maWxsT3B0aW9ucykpfWYuc2VsZWN0QmF0Y2g9bnVsbCxmLnVuc2VsZWN0QmF0Y2g9bnVsbDt2YXIgYj1jLmRyYWdtb2RlLHc9XCJsYXNzb1wiPT09Ynx8XCJzZWxlY3RcIj09PWIsaz1jLmNsaWNrbW9kZS5pbmRleE9mKFwic2VsZWN0XCIpPi0xO2ZvcihvPTA7bzxyLmxlbmd0aDtvKyspe3ZhciBBPXJbb11bMF0sVD1BLnRyYWNlLE09QS50LFM9TS5pbmRleCxFPVQuX2xlbmd0aCxDPU0ueCxMPU0ueTtpZihULnNlbGVjdGVkcG9pbnRzfHx3fHxrKXtpZih3fHwodz0hMCksZi5zZWxlY3RCYXRjaHx8KGYuc2VsZWN0QmF0Y2g9W10sZi51bnNlbGVjdEJhdGNoPVtdKSxULnNlbGVjdGVkcG9pbnRzKXt2YXIgTz1mLnNlbGVjdEJhdGNoW1NdPXUuc2VsSW5kaWNlczJzZWxQb2ludHMoVCksST17fTtmb3Iocz0wO3M8Ty5sZW5ndGg7cysrKUlbT1tzXV09MTt2YXIgRD1bXTtmb3Iocz0wO3M8RTtzKyspSVtzXXx8RC5wdXNoKHMpO2YudW5zZWxlY3RCYXRjaFtTXT1EfXZhciBQPU0ueHB4PW5ldyBBcnJheShFKSxSPU0ueXB4PW5ldyBBcnJheShFKTtmb3Iocz0wO3M8RTtzKyspUFtzXT1wLmMycChDW3NdKSxSW3NdPWQuYzJwKExbc10pfWVsc2UgTS54cHg9TS55cHg9bnVsbH13PyhmLnNlbGVjdDJkfHwoZi5zZWxlY3QyZD1uKGMuX2dsY2FudmFzLmRhdGEoKVsxXS5yZWdsKSksZi5zY2F0dGVyMmQmJmYuc2VsZWN0QmF0Y2gmJmYuc2VsZWN0QmF0Y2gubGVuZ3RoJiZmLnNjYXR0ZXIyZC51cGRhdGUoZi5tYXJrZXJVbnNlbGVjdGVkT3B0aW9ucy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gZi5zZWxlY3RCYXRjaFtlXT90Om51bGx9KSksZi5zZWxlY3QyZCYmKGYuc2VsZWN0MmQudXBkYXRlKGYubWFya2VyT3B0aW9ucyksZi5zZWxlY3QyZC51cGRhdGUoZi5tYXJrZXJTZWxlY3RlZE9wdGlvbnMpKSxmLmdsVGV4dCYmci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPSgodHx8W10pWzBdfHx7fSkudHJhY2V8fHt9O2cuaGFzVGV4dChlKSYmeih0KX0pKTpmLnNjYXR0ZXIyZCYmZi5zY2F0dGVyMmQudXBkYXRlKGYubWFya2VyT3B0aW9ucyk7dmFyIEY9e3ZpZXdwb3J0OmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Ll9zaXplLGk9dC53aWR0aCxhPXQuaGVpZ2h0O3JldHVybltuLmwrZS5kb21haW5bMF0qbi53LG4uYityLmRvbWFpblswXSpuLmgsaS1uLnItKDEtZS5kb21haW5bMV0pKm4udyxhLW4udC0oMS1yLmRvbWFpblsxXSkqbi5oXX0oYyxwLGQpLHJhbmdlOlsocC5fcmx8fHAucmFuZ2UpWzBdLChkLl9ybHx8ZC5yYW5nZSlbMF0sKHAuX3JsfHxwLnJhbmdlKVsxXSwoZC5fcmx8fGQucmFuZ2UpWzFdXX0sQj11LnJlcGVhdChGLGYuY291bnQpO2YuZmlsbDJkJiZmLmZpbGwyZC51cGRhdGUoQiksZi5saW5lMmQmJmYubGluZTJkLnVwZGF0ZShCKSxmLmVycm9yMmQmJmYuZXJyb3IyZC51cGRhdGUoQi5jb25jYXQoQikpLGYuc2NhdHRlcjJkJiZmLnNjYXR0ZXIyZC51cGRhdGUoQiksZi5zZWxlY3QyZCYmZi5zZWxlY3QyZC51cGRhdGUoQiksZi5nbFRleHQmJmYuZ2xUZXh0LmZvckVhY2goZnVuY3Rpb24odCl7dC51cGRhdGUoRil9KX1lbHNlIGYuaW5pdCgpfX0saG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHMsbCxjLHUsaCxmLHA9dC5jZCxkPXBbMF0udCxnPXBbMF0udHJhY2Usdj10LnhhLG09dC55YSx5PWQueCx4PWQueSxiPXYuYzJwKGUpLF89bS5jMnAociksdz10LmRpc3RhbmNlO2lmKGQudHJlZSl7dmFyIGs9di5wMmMoYi13KSxBPXYucDJjKGIrdyksVD1tLnAyYyhfLXcpLE09bS5wMmMoXyt3KTtpPVwieFwiPT09bj9kLnRyZWUucmFuZ2UoTWF0aC5taW4oayxBKSxNYXRoLm1pbihtLl9ybFswXSxtLl9ybFsxXSksTWF0aC5tYXgoayxBKSxNYXRoLm1heChtLl9ybFswXSxtLl9ybFsxXSkpOmQudHJlZS5yYW5nZShNYXRoLm1pbihrLEEpLE1hdGgubWluKFQsTSksTWF0aC5tYXgoayxBKSxNYXRoLm1heChULE0pKX1lbHNle2lmKCFkLmlkcylyZXR1cm5bdF07aT1kLmlkc312YXIgUz13O2lmKFwieFwiPT09bilmb3IobD0wO2w8aS5sZW5ndGg7bCsrKW89eVtpW2xdXSwoYz1NYXRoLmFicyh2LmMycChvKS1iKSk8UyYmKFM9Yyx1PW0uYzJwKHhbaVtsXV0pLV8sZj1NYXRoLnNxcnQoYypjK3UqdSksYT1pW2xdKTtlbHNlIGZvcihsPTA7bDxpLmxlbmd0aDtsKyspbz15W2lbbF1dLHM9eFtpW2xdXSxjPXYuYzJwKG8pLWIsdT1tLmMycChzKS1fLChoPU1hdGguc3FydChjKmMrdSp1KSk8UyYmKFM9Zj1oLGE9aVtsXSk7cmV0dXJuIHQuaW5kZXg9YSx0LmRpc3RhbmNlPVMsdC5keHk9Zix2b2lkIDA9PT1hP1t0XTooTCh0LHkseCxnKSxbdF0pfSxzZWxlY3RQb2ludHM6ZnVuY3Rpb24odCxlKXt2YXIgcj10LmNkLG49W10saT1yWzBdLnRyYWNlLGE9clswXS50LG89aS5fbGVuZ3RoLGw9YS54LGM9YS55LHU9YS5fc2NlbmU7aWYoIXUpcmV0dXJuIG47dmFyIGg9Zy5oYXNUZXh0KGkpLGY9Zy5oYXNNYXJrZXJzKGkpLHA9IWYmJiFoO2lmKCEwIT09aS52aXNpYmxlfHxwKXJldHVybiBuO3ZhciBkLHY9bnVsbCxtPW51bGw7aWYoITE9PT1lfHxlLmRlZ2VuZXJhdGUpbT1zKG8pO2Vsc2UgZm9yKHY9W10sbT1bXSxkPTA7ZDxvO2QrKyllLmNvbnRhaW5zKFthLnhweFtkXSxhLnlweFtkXV0sITEsZCx0KT8odi5wdXNoKGQpLG4ucHVzaCh7cG9pbnROdW1iZXI6ZCx4OmxbZF0seTpjW2RdfSkpOm0ucHVzaChkKTtpZih1LnNlbGVjdEJhdGNofHwodS5zZWxlY3RCYXRjaD1bXSx1LnVuc2VsZWN0QmF0Y2g9W10pLCF1LnNlbGVjdEJhdGNoW2EuaW5kZXhdKXtmb3IoZD0wO2Q8dS5jb3VudDtkKyspdS5zZWxlY3RCYXRjaFtkXT1bXSx1LnVuc2VsZWN0QmF0Y2hbZF09W107ZiYmdS5zY2F0dGVyMmQudXBkYXRlKHUubWFya2VyVW5zZWxlY3RlZE9wdGlvbnMpfXJldHVybiB1LnNlbGVjdEJhdGNoW2EuaW5kZXhdPXYsdS51bnNlbGVjdEJhdGNoW2EuaW5kZXhdPW0saCYmeihyKSxufSxzY2VuZVVwZGF0ZTpDLGNhbGNIb3ZlcjpMLG1ldGE6e319fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9uc1wiOjY3NyxcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvcHJlcGFyZV9yZWdsXCI6NzE0LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZVwiOjc0OCxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiOjc1MixcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vc2NhdHRlci9jYWxjXCI6MTA1MyxcIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjXCI6MTA1NSxcIi4uL3NjYXR0ZXIvY3Jvc3NfdHJhY2VfZGVmYXVsdHNcIjoxMDU4LFwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHRcIjoxMDYwLFwiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3JcIjoxMDYyLFwiLi4vc2NhdHRlci9saW5rX3RyYWNlc1wiOjEwNjgsXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiOjEwNzAsXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCI6MTA3NixcIi4vYXR0cmlidXRlc1wiOjExMDEsXCIuL2NvbnN0YW50c1wiOjExMDIsXCIuL2NvbnZlcnRcIjoxMTAzLFwiLi9kZWZhdWx0c1wiOjExMDQsXCJhcnJheS1yYW5nZVwiOjU4LFwiZ2wtdGV4dFwiOjMxNCxcInBvaW50LWNsdXN0ZXJcIjo0NjIsXCJyZWdsLWVycm9yMmRcIjo0ODMsXCJyZWdsLWxpbmUyZFwiOjQ4NCxcInJlZ2wtc2NhdHRlcjJkXCI6NDg1fV0sMTEwNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxpPXQoXCIuLi9zY2F0dGVyZ2VvL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL3Bsb3RzL21hcGJveC9sYXlvdXRfYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCIpLGw9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiKSxjPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsdT10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbCxoPWkubGluZSxmPWkubWFya2VyO2UuZXhwb3J0cz11KHtsb246aS5sb24sbGF0OmkubGF0LG1vZGU6Yyh7fSxhLm1vZGUse2RmbHQ6XCJtYXJrZXJzXCJ9KSx0ZXh0OmMoe30sYS50ZXh0LHt9KSxob3ZlcnRleHQ6Yyh7fSxhLmhvdmVydGV4dCx7fSksbGluZTp7Y29sb3I6aC5jb2xvcix3aWR0aDpoLndpZHRofSxjb25uZWN0Z2FwczphLmNvbm5lY3RnYXBzLG1hcmtlcjp7c3ltYm9sOnt2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcImNpcmNsZVwiLGFycmF5T2s6ITB9LG9wYWNpdHk6Zi5vcGFjaXR5LHNpemU6Zi5zaXplLHNpemVyZWY6Zi5zaXplcmVmLHNpemVtaW46Zi5zaXplbWluLHNpemVtb2RlOmYuc2l6ZW1vZGUsY29sb3I6Zi5jb2xvcixjb2xvcnNjYWxlOmYuY29sb3JzY2FsZSxjYXV0bzpmLmNhdXRvLGNtYXg6Zi5jbWF4LGNtaW46Zi5jbWluLGNtaWQ6Zi5jbWlkLGF1dG9jb2xvcnNjYWxlOmYuYXV0b2NvbG9yc2NhbGUscmV2ZXJzZXNjYWxlOmYucmV2ZXJzZXNjYWxlLHNob3dzY2FsZTpmLnNob3dzY2FsZSxjb2xvcmJhcjpsfSxmaWxsOmkuZmlsbCxmaWxsY29sb3I6YS5maWxsY29sb3IsdGV4dGZvbnQ6by5sYXllcnMuc3ltYm9sLnRleHRmb250LHRleHRwb3NpdGlvbjpvLmxheWVycy5zeW1ib2wudGV4dHBvc2l0aW9uLHNlbGVjdGVkOnttYXJrZXI6YS5zZWxlY3RlZC5tYXJrZXJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjphLnVuc2VsZWN0ZWQubWFya2VyfSxob3ZlcmluZm86Yyh7fSxzLmhvdmVyaW5mbyx7ZmxhZ3M6W1wibG9uXCIsXCJsYXRcIixcInRleHRcIixcIm5hbWVcIl19KSxob3ZlcnRlbXBsYXRlOm4oKX0sXCJjYWxjXCIsXCJuZXN0ZWRcIil9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi4vLi4vcGxvdHMvbWFwYm94L2xheW91dF9hdHRyaWJ1dGVzXCI6ODA2LFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCI6MTA1MixcIi4uL3NjYXR0ZXJnZW8vYXR0cmlidXRlc1wiOjEwOTJ9XSwxMTA3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTSxvPXQoXCIuLi8uLi9saWIvZ2VvanNvbl91dGlsc1wiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGVcIiksbD10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLGM9dChcIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jXCIpLHU9dChcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIiksaD10KFwiLi4vLi4vcGxvdHMvbWFwYm94L2NvbnZlcnRfdGV4dF9vcHRzXCIpO2Z1bmN0aW9uIGYoKXtyZXR1cm57Z2VvanNvbjpvLm1ha2VCbGFuaygpLGxheW91dDp7dmlzaWJpbGl0eTpcIm5vbmVcIn0scGFpbnQ6e319fWZ1bmN0aW9uIHAodCl7cmV0dXJuIGkuaXNBcnJheU9yVHlwZWRBcnJheSh0KT9mdW5jdGlvbih0KXtyZXR1cm4gdH06dD9mdW5jdGlvbigpe3JldHVybiB0fTpkfWZ1bmN0aW9uIGQoKXtyZXR1cm5cIlwifWZ1bmN0aW9uIGcodCl7cmV0dXJuIHRbMF09PT1hfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyPXRbMF0udHJhY2UsYT0hMD09PXIudmlzaWJsZSx2PVwibm9uZVwiIT09ci5maWxsLG09dS5oYXNMaW5lcyhyKSx5PXUuaGFzTWFya2VycyhyKSx4PXUuaGFzVGV4dChyKSxiPXkmJlwiY2lyY2xlXCI9PT1yLm1hcmtlci5zeW1ib2wsXz15JiZcImNpcmNsZVwiIT09ci5tYXJrZXIuc3ltYm9sLHc9ZigpLGs9ZigpLEE9ZigpLFQ9ZigpLE09e2ZpbGw6dyxsaW5lOmssY2lyY2xlOkEsc3ltYm9sOlR9O2lmKCFhKXJldHVybiBNO2lmKCh2fHxtKSYmKGU9by5jYWxjVHJhY2VUb0xpbmVDb29yZHModCkpLHYmJih3Lmdlb2pzb249by5tYWtlUG9seWdvbihlKSx3LmxheW91dC52aXNpYmlsaXR5PVwidmlzaWJsZVwiLGkuZXh0ZW5kRmxhdCh3LnBhaW50LHtcImZpbGwtY29sb3JcIjpyLmZpbGxjb2xvcn0pKSxtJiYoay5nZW9qc29uPW8ubWFrZUxpbmUoZSksay5sYXlvdXQudmlzaWJpbGl0eT1cInZpc2libGVcIixpLmV4dGVuZEZsYXQoay5wYWludCx7XCJsaW5lLXdpZHRoXCI6ci5saW5lLndpZHRoLFwibGluZS1jb2xvclwiOnIubGluZS5jb2xvcixcImxpbmUtb3BhY2l0eVwiOnIub3BhY2l0eX0pKSxiKXt2YXIgUz1mdW5jdGlvbih0KXt2YXIgZSxyLGEsbyx1PXRbMF0udHJhY2UsaD11Lm1hcmtlcixmPXUuc2VsZWN0ZWRwb2ludHMscD1pLmlzQXJyYXlPclR5cGVkQXJyYXkoaC5jb2xvciksZD1pLmlzQXJyYXlPclR5cGVkQXJyYXkoaC5zaXplKSx2PWkuaXNBcnJheU9yVHlwZWRBcnJheShoLm9wYWNpdHkpO2Z1bmN0aW9uIG0odCl7cmV0dXJuIHUub3BhY2l0eSp0fXAmJihyPXMuaGFzQ29sb3JzY2FsZSh1LFwibWFya2VyXCIpP3MubWFrZUNvbG9yU2NhbGVGdW5jKHMuZXh0cmFjdFNjYWxlKGgse2NMZXR0ZXI6XCJjXCJ9KSk6aS5pZGVudGl0eSk7ZCYmKGE9Yyh1KSk7diYmKG89ZnVuY3Rpb24odCl7dmFyIGU9bih0KT8raS5jb25zdHJhaW4odCwwLDEpOjA7cmV0dXJuIG0oZSl9KTt2YXIgeSx4PVtdO2ZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciBiPXRbZV0sXz1iLmxvbmxhdDtpZighZyhfKSl7dmFyIHc9e307ciYmKHcubWNjPWIubWNjPXIoYi5tYykpLGEmJih3Lm1yYz1iLm1yYz1hKGIubXMpKSxvJiYody5tbz1vKGIubW8pKSxmJiYody5zZWxlY3RlZD1iLnNlbGVjdGVkfHwwKSx4LnB1c2goe3R5cGU6XCJGZWF0dXJlXCIsZ2VvbWV0cnk6e3R5cGU6XCJQb2ludFwiLGNvb3JkaW5hdGVzOl99LHByb3BlcnRpZXM6d30pfX1pZihmKWZvcih5PWwubWFrZVNlbGVjdGVkUG9pbnRTdHlsZUZucyh1KSxlPTA7ZTx4Lmxlbmd0aDtlKyspe3ZhciBrPXhbZV0ucHJvcGVydGllczt5LnNlbGVjdGVkT3BhY2l0eUZuJiYoay5tbz1tKHkuc2VsZWN0ZWRPcGFjaXR5Rm4oaykpKSx5LnNlbGVjdGVkQ29sb3JGbiYmKGsubWNjPXkuc2VsZWN0ZWRDb2xvckZuKGspKSx5LnNlbGVjdGVkU2l6ZUZuJiYoay5tcmM9eS5zZWxlY3RlZFNpemVGbihrKSl9cmV0dXJue2dlb2pzb246e3R5cGU6XCJGZWF0dXJlQ29sbGVjdGlvblwiLGZlYXR1cmVzOnh9LG1jYzpwfHx5JiZ5LnNlbGVjdGVkQ29sb3JGbj97dHlwZTpcImlkZW50aXR5XCIscHJvcGVydHk6XCJtY2NcIn06aC5jb2xvcixtcmM6ZHx8eSYmeS5zZWxlY3RlZFNpemVGbj97dHlwZTpcImlkZW50aXR5XCIscHJvcGVydHk6XCJtcmNcIn06KEE9aC5zaXplLEEvMiksbW86dnx8eSYmeS5zZWxlY3RlZE9wYWNpdHlGbj97dHlwZTpcImlkZW50aXR5XCIscHJvcGVydHk6XCJtb1wifTptKGgub3BhY2l0eSl9O3ZhciBBfSh0KTtBLmdlb2pzb249Uy5nZW9qc29uLEEubGF5b3V0LnZpc2liaWxpdHk9XCJ2aXNpYmxlXCIsaS5leHRlbmRGbGF0KEEucGFpbnQse1wiY2lyY2xlLWNvbG9yXCI6Uy5tY2MsXCJjaXJjbGUtcmFkaXVzXCI6Uy5tcmMsXCJjaXJjbGUtb3BhY2l0eVwiOlMubW99KX1pZigoX3x8eCkmJihULmdlb2pzb249ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF0udHJhY2Uscj0oZS5tYXJrZXJ8fHt9KS5zeW1ib2wsbj1lLnRleHQsaT1cImNpcmNsZVwiIT09cj9wKHIpOmQsYT11Lmhhc1RleHQoZSk/cChuKTpkLG89W10scz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbD10W3NdO2cobC5sb25sYXQpfHxvLnB1c2goe3R5cGU6XCJGZWF0dXJlXCIsZ2VvbWV0cnk6e3R5cGU6XCJQb2ludFwiLGNvb3JkaW5hdGVzOmwubG9ubGF0fSxwcm9wZXJ0aWVzOntzeW1ib2w6aShsLm14KSx0ZXh0OmEobC50eCl9fSl9cmV0dXJue3R5cGU6XCJGZWF0dXJlQ29sbGVjdGlvblwiLGZlYXR1cmVzOm99fSh0KSxpLmV4dGVuZEZsYXQoVC5sYXlvdXQse3Zpc2liaWxpdHk6XCJ2aXNpYmxlXCIsXCJpY29uLWltYWdlXCI6XCJ7c3ltYm9sfS0xNVwiLFwidGV4dC1maWVsZFwiOlwie3RleHR9XCJ9KSxfJiYoaS5leHRlbmRGbGF0KFQubGF5b3V0LHtcImljb24tc2l6ZVwiOnIubWFya2VyLnNpemUvMTB9KSxpLmV4dGVuZEZsYXQoVC5wYWludCx7XCJpY29uLW9wYWNpdHlcIjpyLm9wYWNpdHkqci5tYXJrZXIub3BhY2l0eSxcImljb24tY29sb3JcIjpyLm1hcmtlci5jb2xvcn0pKSx4KSl7dmFyIEU9KHIubWFya2VyfHx7fSkuc2l6ZSxDPWgoci50ZXh0cG9zaXRpb24sRSk7aS5leHRlbmRGbGF0KFQubGF5b3V0LHtcInRleHQtc2l6ZVwiOnIudGV4dGZvbnQuc2l6ZSxcInRleHQtYW5jaG9yXCI6Qy5hbmNob3IsXCJ0ZXh0LW9mZnNldFwiOkMub2Zmc2V0fSksaS5leHRlbmRGbGF0KFQucGFpbnQse1widGV4dC1jb2xvclwiOnIudGV4dGZvbnQuY29sb3IsXCJ0ZXh0LW9wYWNpdHlcIjpyLm9wYWNpdHl9KX1yZXR1cm4gTX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZVwiOjU5MCxcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvZ2VvanNvbl91dGlsc1wiOjY5NSxcIi4uLy4uL3Bsb3RzL21hcGJveC9jb252ZXJ0X3RleHRfb3B0c1wiOjgwMyxcIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jXCI6MTA2OSxcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSwxMTA4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCIpLGE9dChcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCIpLG89dChcIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0c1wiKSxzPXQoXCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHNcIiksbD10KFwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHNcIiksYz10KFwiLi9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1KXtmdW5jdGlvbiBoKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxjLHIsaSl9aWYoZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoXCJsb25cIil8fFtdLGk9cihcImxhdFwiKXx8W10sYT1NYXRoLm1pbihuLmxlbmd0aCxpLmxlbmd0aCk7cmV0dXJuIGUuX2xlbmd0aD1hLGF9KDAsZSxoKSl7aWYoaChcInRleHRcIiksaChcImhvdmVydGV4dFwiKSxoKFwiaG92ZXJ0ZW1wbGF0ZVwiKSxoKFwibW9kZVwiKSxpLmhhc0xpbmVzKGUpJiYobyh0LGUscix1LGgse25vRGFzaDohMH0pLGgoXCJjb25uZWN0Z2Fwc1wiKSksaS5oYXNNYXJrZXJzKGUpKXthKHQsZSxyLHUsaCx7bm9MaW5lOiEwfSk7dmFyIGY9ZS5tYXJrZXI7XCJjaXJjbGVcIiE9PWYuc3ltYm9sJiYobi5pc0FycmF5T3JUeXBlZEFycmF5KGYuc2l6ZSkmJihmLnNpemU9Zi5zaXplWzBdKSxuLmlzQXJyYXlPclR5cGVkQXJyYXkoZi5jb2xvcikmJihmLmNvbG9yPWYuY29sb3JbMF0pKX1pLmhhc1RleHQoZSkmJnModCxlLHUsaCx7bm9TZWxlY3Q6ITB9KSxoKFwiZmlsbFwiKSxcIm5vbmVcIiE9PWUuZmlsbCYmbCh0LGUscixoKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxoKX1lbHNlIGUudmlzaWJsZT0hMX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzXCI6MTA2MSxcIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0c1wiOjEwNjUsXCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0c1wiOjEwNzEsXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCI6MTA3NixcIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0c1wiOjEwNzcsXCIuL2F0dHJpYnV0ZXNcIjoxMTA2fV0sMTEwOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0Lmxvbj1lLmxvbix0LmxhdD1lLmxhdCx0fX0se31dLDExMTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3JcIiksbz10KFwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHRcIikscz10KFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKS5CQUROVU07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbD10LmNkLGM9bFswXS50cmFjZSx1PXQueGEsaD10LnlhLGY9dC5zdWJwbG90LHA9MzYwKihlPj0wP01hdGguZmxvb3IoKGUrMTgwKS8zNjApOk1hdGguY2VpbCgoZS0xODApLzM2MCkpLGQ9ZS1wO2lmKG4uZ2V0Q2xvc2VzdChsLGZ1bmN0aW9uKHQpe3ZhciBlPXQubG9ubGF0O2lmKGVbMF09PT1zKXJldHVybiAxLzA7dmFyIG49aS5tb2RIYWxmKGVbMF0sMzYwKSxhPWVbMV0sbz1mLnByb2plY3QoW24sYV0pLGw9by54LXUuYzJwKFtkLGFdKSxjPW8ueS1oLmMycChbbixyXSkscD1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5zcXJ0KGwqbCtjKmMpLXAsMS0zL3ApfSx0KSwhMSE9PXQuaW5kZXgpe3ZhciBnPWxbdC5pbmRleF0sdj1nLmxvbmxhdCxtPVtpLm1vZEhhbGYodlswXSwzNjApK3AsdlsxXV0seT11LmMycChtKSx4PWguYzJwKG0pLGI9Zy5tcmN8fDE7cmV0dXJuIHQueDA9eS1iLHQueDE9eStiLHQueTA9eC1iLHQueTE9eCtiLHQuY29sb3I9YShjLGcpLHQuZXh0cmFUZXh0PWZ1bmN0aW9uKHQsZSxyKXtpZih0LmhvdmVydGVtcGxhdGUpcmV0dXJuO3ZhciBuPShlLmhpfHx0LmhvdmVyaW5mbykuc3BsaXQoXCIrXCIpLGk9LTEhPT1uLmluZGV4T2YoXCJhbGxcIiksYT0tMSE9PW4uaW5kZXhPZihcImxvblwiKSxzPS0xIT09bi5pbmRleE9mKFwibGF0XCIpLGw9ZS5sb25sYXQsYz1bXTtmdW5jdGlvbiB1KHQpe3JldHVybiB0K1wiXFx4YjBcIn1pfHxhJiZzP2MucHVzaChcIihcIit1KGxbMF0pK1wiLCBcIit1KGxbMV0pK1wiKVwiKTphP2MucHVzaChyLmxvbit1KGxbMF0pKTpzJiZjLnB1c2goci5sYXQrdShsWzFdKSk7KGl8fC0xIT09bi5pbmRleE9mKFwidGV4dFwiKSkmJm8oZSx0LGMpO3JldHVybiBjLmpvaW4oXCI8YnI+XCIpfShjLGcsbFswXS50LmxhYmVscyksdC5ob3ZlcnRlbXBsYXRlPWMuaG92ZXJ0ZW1wbGF0ZSxbdF19fX0se1wiLi4vLi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dFwiOjEwNjAsXCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvclwiOjEwNjJ9XSwxMTExOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNvbG9yYmFyPXQoXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiKSxuLmNhbGM9dChcIi4uL3NjYXR0ZXJnZW8vY2FsY1wiKSxuLnBsb3Q9dChcIi4vcGxvdFwiKSxuLmhvdmVyUG9pbnRzPXQoXCIuL2hvdmVyXCIpLG4uZXZlbnREYXRhPXQoXCIuL2V2ZW50X2RhdGFcIiksbi5zZWxlY3RQb2ludHM9dChcIi4vc2VsZWN0XCIpLG4uc3R5bGU9ZnVuY3Rpb24odCxlKXtlJiZlWzBdLnRyYWNlLl9nbFRyYWNlLnVwZGF0ZShlKX0sbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJzY2F0dGVybWFwYm94XCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvbWFwYm94XCIpLG4uY2F0ZWdvcmllcz1bXCJtYXBib3hcIixcImdsXCIsXCJzeW1ib2xzXCIsXCJzaG93TGVnZW5kXCIsXCJzY2F0dGVybGlrZVwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4uLy4uL3Bsb3RzL21hcGJveFwiOjgwNCxcIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyXCI6MTA3MCxcIi4uL3NjYXR0ZXJnZW8vY2FsY1wiOjEwOTMsXCIuL2F0dHJpYnV0ZXNcIjoxMTA2LFwiLi9kZWZhdWx0c1wiOjExMDgsXCIuL2V2ZW50X2RhdGFcIjoxMTA5LFwiLi9ob3ZlclwiOjExMTAsXCIuL3Bsb3RcIjoxMTEyLFwiLi9zZWxlY3RcIjoxMTEzfV0sMTExMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2NvbnZlcnRcIik7ZnVuY3Rpb24gaSh0LGUpe3RoaXMuc3VicGxvdD10LHRoaXMudWlkPWUsdGhpcy5zb3VyY2VJZHM9e2ZpbGw6ZStcIi1zb3VyY2UtZmlsbFwiLGxpbmU6ZStcIi1zb3VyY2UtbGluZVwiLGNpcmNsZTplK1wiLXNvdXJjZS1jaXJjbGVcIixzeW1ib2w6ZStcIi1zb3VyY2Utc3ltYm9sXCJ9LHRoaXMubGF5ZXJJZHM9e2ZpbGw6ZStcIi1sYXllci1maWxsXCIsbGluZTplK1wiLWxheWVyLWxpbmVcIixjaXJjbGU6ZStcIi1sYXllci1jaXJjbGVcIixzeW1ib2w6ZStcIi1sYXllci1zeW1ib2xcIn0sdGhpcy5vcmRlcj1bXCJmaWxsXCIsXCJsaW5lXCIsXCJjaXJjbGVcIixcInN5bWJvbFwiXX12YXIgYT1pLnByb3RvdHlwZTthLmFkZFNvdXJjZT1mdW5jdGlvbih0LGUpe3RoaXMuc3VicGxvdC5tYXAuYWRkU291cmNlKHRoaXMuc291cmNlSWRzW3RdLHt0eXBlOlwiZ2VvanNvblwiLGRhdGE6ZS5nZW9qc29ufSl9LGEuc2V0U291cmNlRGF0YT1mdW5jdGlvbih0LGUpe3RoaXMuc3VicGxvdC5tYXAuZ2V0U291cmNlKHRoaXMuc291cmNlSWRzW3RdKS5zZXREYXRhKGUuZ2VvanNvbil9LGEuYWRkTGF5ZXI9ZnVuY3Rpb24odCxlKXt0aGlzLnN1YnBsb3QubWFwLmFkZExheWVyKHt0eXBlOnQsaWQ6dGhpcy5sYXllcklkc1t0XSxzb3VyY2U6dGhpcy5zb3VyY2VJZHNbdF0sbGF5b3V0OmUubGF5b3V0LHBhaW50OmUucGFpbnR9KX0sYS51cGRhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuc3VicGxvdCxyPW4odCksaT0wO2k8dGhpcy5vcmRlci5sZW5ndGg7aSsrKXt2YXIgYT10aGlzLm9yZGVyW2ldLG89clthXTtlLnNldE9wdGlvbnModGhpcy5sYXllcklkc1thXSxcInNldExheW91dFByb3BlcnR5XCIsby5sYXlvdXQpLFwidmlzaWJsZVwiPT09by5sYXlvdXQudmlzaWJpbGl0eSYmKHRoaXMuc2V0U291cmNlRGF0YShhLG8pLGUuc2V0T3B0aW9ucyh0aGlzLmxheWVySWRzW2FdLFwic2V0UGFpbnRQcm9wZXJ0eVwiLG8ucGFpbnQpKX10WzBdLnRyYWNlLl9nbFRyYWNlPXRoaXN9LGEuZGlzcG9zZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN1YnBsb3QubWFwLGU9MDtlPHRoaXMub3JkZXIubGVuZ3RoO2UrKyl7dmFyIHI9dGhpcy5vcmRlcltlXTt0LnJlbW92ZUxheWVyKHRoaXMubGF5ZXJJZHNbcl0pLHQucmVtb3ZlU291cmNlKHRoaXMuc291cmNlSWRzW3JdKX19LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgaSh0LGVbMF0udHJhY2UudWlkKSxhPW4oZSksbz0wO288ci5vcmRlci5sZW5ndGg7bysrKXt2YXIgcz1yLm9yZGVyW29dLGw9YVtzXTtyLmFkZFNvdXJjZShzLGwpLHIuYWRkTGF5ZXIocyxsKX1yZXR1cm4gZVswXS50cmFjZS5fZ2xUcmFjZT1yLHJ9fSx7XCIuL2NvbnZlcnRcIjoxMTA3fV0sMTExMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiKSxhPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixvPXQuY2Qscz10LnhheGlzLGw9dC55YXhpcyxjPVtdLHU9b1swXS50cmFjZTtpZighaS5oYXNNYXJrZXJzKHUpKXJldHVybltdO2lmKCExPT09ZSlmb3Iocj0wO3I8by5sZW5ndGg7cisrKW9bcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxvLmxlbmd0aDtyKyspe3ZhciBoPW9bcl0sZj1oLmxvbmxhdDtpZihmWzBdIT09YSl7dmFyIHA9W24ubW9kSGFsZihmWzBdLDM2MCksZlsxXV0sZD1bcy5jMnAocCksbC5jMnAocCldO2UuY29udGFpbnMoZCxudWxsLHIsdCk/KGMucHVzaCh7cG9pbnROdW1iZXI6cixsb246ZlswXSxsYXQ6ZlsxXX0pLGguc2VsZWN0ZWQ9MSk6aC5zZWxlY3RlZD0wfX1yZXR1cm4gY319LHtcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCI6MTA3Nn1dLDExMTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LGE9dChcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCIpLHM9YS5saW5lO2UuZXhwb3J0cz17bW9kZTphLm1vZGUscjp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0sdGhldGE6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LHIwOnt2YWxUeXBlOlwiYW55XCIsZGZsdDowLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSxkcjp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MSxlZGl0VHlwZTpcImNhbGNcIn0sdGhldGEwOnt2YWxUeXBlOlwiYW55XCIsZGZsdDowLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSxkdGhldGE6e3ZhbFR5cGU6XCJudW1iZXJcIixlZGl0VHlwZTpcImNhbGNcIn0sdGhldGF1bml0Ont2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJyYWRpYW5zXCIsXCJkZWdyZWVzXCIsXCJncmFkaWFuc1wiXSxkZmx0OlwiZGVncmVlc1wiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx0ZXh0OmEudGV4dCxob3ZlcnRleHQ6YS5ob3ZlcnRleHQsbGluZTp7Y29sb3I6cy5jb2xvcix3aWR0aDpzLndpZHRoLGRhc2g6cy5kYXNoLHNoYXBlOmkoe30scy5zaGFwZSx7dmFsdWVzOltcImxpbmVhclwiLFwic3BsaW5lXCJdfSksc21vb3RoaW5nOnMuc21vb3RoaW5nLGVkaXRUeXBlOlwiY2FsY1wifSxjb25uZWN0Z2FwczphLmNvbm5lY3RnYXBzLG1hcmtlcjphLm1hcmtlcixjbGlwb25heGlzOmkoe30sYS5jbGlwb25heGlzLHtkZmx0OiExfSksdGV4dHBvc2l0aW9uOmEudGV4dHBvc2l0aW9uLHRleHRmb250OmEudGV4dGZvbnQsZmlsbDppKHt9LGEuZmlsbCx7dmFsdWVzOltcIm5vbmVcIixcInRvc2VsZlwiLFwidG9uZXh0XCJdLGRmbHQ6XCJub25lXCJ9KSxmaWxsY29sb3I6YS5maWxsY29sb3IsaG92ZXJpbmZvOmkoe30sby5ob3ZlcmluZm8se2ZsYWdzOltcInJcIixcInRoZXRhXCIsXCJ0ZXh0XCIsXCJuYW1lXCJdfSksaG92ZXJvbjphLmhvdmVyb24saG92ZXJ0ZW1wbGF0ZTpuKCksc2VsZWN0ZWQ6YS5zZWxlY3RlZCx1bnNlbGVjdGVkOmEudW5zZWxlY3RlZH19LHtcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDYsXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIjoxMDUyfV0sMTExNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTSxhPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxvPXQoXCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsY1wiKSxzPXQoXCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YVwiKSxsPXQoXCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uXCIpLGM9dChcIi4uL3NjYXR0ZXIvY2FsY1wiKS5jYWxjTWFya2VyU2l6ZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5fZnVsbExheW91dCx1PWUuc3VicGxvdCxoPXJbdV0ucmFkaWFsYXhpcyxmPXJbdV0uYW5ndWxhcmF4aXMscD1oLm1ha2VDYWxjZGF0YShlLFwiclwiKSxkPWYubWFrZUNhbGNkYXRhKGUsXCJ0aGV0YVwiKSxnPWUuX2xlbmd0aCx2PW5ldyBBcnJheShnKSxtPTA7bTxnO20rKyl7dmFyIHk9cFttXSx4PWRbbV0sYj12W21dPXt9O24oeSkmJm4oeCk/KGIucj15LGIudGhldGE9eCk6Yi5yPWl9dmFyIF89YyhlLGcpO3JldHVybiBlLl9leHRyZW1lcy54PWEuZmluZEV4dHJlbWVzKGgscCx7cHBhZDpffSksbyh0LGUpLHModixlKSxsKHYsZSksdn19LHtcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhXCI6MTA1MSxcIi4uL3NjYXR0ZXIvY2FsY1wiOjEwNTMsXCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uXCI6MTA1NCxcIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjXCI6MTA1NSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sMTExNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiKSxhPXQoXCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0c1wiKSxvPXQoXCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHNcIikscz10KFwiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzXCIpLGw9dChcIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0c1wiKSxjPXQoXCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0c1wiKSx1PXQoXCIuLi9zY2F0dGVyL2NvbnN0YW50c1wiKS5QVFNfTElORVNPTkxZLGg9dChcIi4vYXR0cmlidXRlc1wiKTtmdW5jdGlvbiBmKHQsZSxyLG4pe3ZhciBpLGE9bihcInJcIiksbz1uKFwidGhldGFcIik7aWYoYSlvP2k9TWF0aC5taW4oYS5sZW5ndGgsby5sZW5ndGgpOihpPWEubGVuZ3RoLG4oXCJ0aGV0YTBcIiksbihcImR0aGV0YVwiKSk7ZWxzZXtpZighbylyZXR1cm4gMDtpPWUudGhldGEubGVuZ3RoLG4oXCJyMFwiKSxuKFwiZHJcIil9cmV0dXJuIGUuX2xlbmd0aD1pLGl9ZS5leHBvcnRzPXtoYW5kbGVSVGhldGFEZWZhdWx0czpmLHN1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLHApe2Z1bmN0aW9uIGQocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGgscixpKX12YXIgZz1mKDAsZSwwLGQpO2lmKGcpe2QoXCJ0aGV0YXVuaXRcIiksZChcIm1vZGVcIixnPHU/XCJsaW5lcyttYXJrZXJzXCI6XCJsaW5lc1wiKSxkKFwidGV4dFwiKSxkKFwiaG92ZXJ0ZXh0XCIpLFwiZmlsbHNcIiE9PWUuaG92ZXJvbiYmZChcImhvdmVydGVtcGxhdGVcIiksaS5oYXNMaW5lcyhlKSYmKG8odCxlLHIscCxkKSxzKHQsZSxkKSxkKFwiY29ubmVjdGdhcHNcIikpLGkuaGFzTWFya2VycyhlKSYmYSh0LGUscixwLGQse2dyYWRpZW50OiEwfSksaS5oYXNUZXh0KGUpJiZsKHQsZSxwLGQpO3ZhciB2PVtdOyhpLmhhc01hcmtlcnMoZSl8fGkuaGFzVGV4dChlKSkmJihkKFwiY2xpcG9uYXhpc1wiKSxkKFwibWFya2VyLm1heGRpc3BsYXllZFwiKSx2LnB1c2goXCJwb2ludHNcIikpLGQoXCJmaWxsXCIpLFwibm9uZVwiIT09ZS5maWxsJiYoYyh0LGUscixkKSxpLmhhc0xpbmVzKGUpfHxzKHQsZSxkKSksXCJ0b25leHRcIiE9PWUuZmlsbCYmXCJ0b3NlbGZcIiE9PWUuZmlsbHx8di5wdXNoKFwiZmlsbHNcIiksZChcImhvdmVyb25cIix2LmpvaW4oXCIrXCIpfHxcInBvaW50c1wiKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxkKX1lbHNlIGUudmlzaWJsZT0hMX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9zY2F0dGVyL2NvbnN0YW50c1wiOjEwNTYsXCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0c1wiOjEwNjEsXCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHNcIjoxMDY1LFwiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzXCI6MTA2NyxcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCI6MTA3MSxcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzXCI6MTA3NyxcIi4vYXR0cmlidXRlc1wiOjExMTR9XSwxMTE3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3NjYXR0ZXIvaG92ZXJcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksYT10KFwiLi4vLi4vbGliXCIpO2Z1bmN0aW9uIG8odCxlLHIsbil7dmFyIG89ci5yYWRpYWxBeGlzLHM9ci5hbmd1bGFyQXhpcztvLl9ob3ZlcnRpdGxlPVwiclwiLHMuX2hvdmVydGl0bGU9XCJcXHUwM2I4XCI7dmFyIGw9dC5oaXx8ZS5ob3ZlcmluZm8sYz1bXTtmdW5jdGlvbiB1KHQsZSl7Yy5wdXNoKHQuX2hvdmVydGl0bGUrXCI6IFwiK2kudGlja1RleHQodCxlLFwiaG92ZXJcIikudGV4dCl9aWYoIWUuaG92ZXJ0ZW1wbGF0ZSl7dmFyIGg9bC5zcGxpdChcIitcIik7aWYoLTEhPT1oLmluZGV4T2YoXCJhbGxcIikmJihoPVtcInJcIixcInRoZXRhXCIsXCJ0ZXh0XCJdKSwtMSE9PWguaW5kZXhPZihcInJcIikmJnUobyxvLmMybCh0LnIpKSwtMSE9PWguaW5kZXhPZihcInRoZXRhXCIpKXt2YXIgZj10LnRoZXRhO3UocyxcImRlZ3JlZXNcIj09PXMudGhldGF1bml0P2EucmFkMmRlZyhmKTpmKX0tMSE9PWguaW5kZXhPZihcInRleHRcIikmJm4udGV4dCYmKGMucHVzaChuLnRleHQpLGRlbGV0ZSBuLnRleHQpLG4uZXh0cmFUZXh0PWMuam9pbihcIjxicj5cIil9fWUuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9bih0LGUscixpKTtpZihhJiYhMSE9PWFbMF0uaW5kZXgpe3ZhciBzPWFbMF07aWYodm9pZCAwPT09cy5pbmRleClyZXR1cm4gYTt2YXIgbD10LnN1YnBsb3QsYz1zLmNkW3MuaW5kZXhdLHU9cy50cmFjZTtpZihsLmlzUHRJbnNpZGUoYykpcmV0dXJuIHMueExhYmVsVmFsPXZvaWQgMCxzLnlMYWJlbFZhbD12b2lkIDAsbyhjLHUsbCxzKSxzLmhvdmVydGVtcGxhdGU9dS5ob3ZlcnRlbXBsYXRlLGF9fSxtYWtlSG92ZXJQb2ludFRleHQ6b319LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vc2NhdHRlci9ob3ZlclwiOjEwNjN9XSwxMTE4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwidHJhY2VcIixuYW1lOlwic2NhdHRlcnBvbGFyXCIsYmFzZVBsb3RNb2R1bGU6dChcIi4uLy4uL3Bsb3RzL3BvbGFyXCIpLGNhdGVnb3JpZXM6W1wicG9sYXJcIixcInN5bWJvbHNcIixcInNob3dMZWdlbmRcIixcInNjYXR0ZXItbGlrZVwiXSxhdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksc3VwcGx5RGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIikuc3VwcGx5RGVmYXVsdHMsY29sb3JiYXI6dChcIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyXCIpLGNhbGM6dChcIi4vY2FsY1wiKSxwbG90OnQoXCIuL3Bsb3RcIiksc3R5bGU6dChcIi4uL3NjYXR0ZXIvc3R5bGVcIikuc3R5bGUsaG92ZXJQb2ludHM6dChcIi4vaG92ZXJcIikuaG92ZXJQb2ludHMsc2VsZWN0UG9pbnRzOnQoXCIuLi9zY2F0dGVyL3NlbGVjdFwiKSxtZXRhOnt9fX0se1wiLi4vLi4vcGxvdHMvcG9sYXJcIjo4MTMsXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiOjEwNzAsXCIuLi9zY2F0dGVyL3NlbGVjdFwiOjEwNzMsXCIuLi9zY2F0dGVyL3N0eWxlXCI6MTA3NSxcIi4vYXR0cmlidXRlc1wiOjExMTQsXCIuL2NhbGNcIjoxMTE1LFwiLi9kZWZhdWx0c1wiOjExMTYsXCIuL2hvdmVyXCI6MTExNyxcIi4vcGxvdFwiOjExMTl9XSwxMTE5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3NjYXR0ZXIvcGxvdFwiKSxpPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgYT1lLmxheWVycy5mcm9udHBsb3Quc2VsZWN0KFwiZy5zY2F0dGVybGF5ZXJcIiksbz17eGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLHBsb3Q6ZS5mcmFtZXdvcmssbGF5ZXJDbGlwSWQ6ZS5faGFzQ2xpcE9uQXhpc0ZhbHNlP2UuY2xpcElkcy5mb3JUcmFjZXM6bnVsbH0scz1lLnJhZGlhbEF4aXMsbD1lLmFuZ3VsYXJBeGlzLGM9MDtjPHIubGVuZ3RoO2MrKylmb3IodmFyIHU9cltjXSxoPTA7aDx1Lmxlbmd0aDtoKyspe3ZhciBmPXVbaF0scD1mLnI7aWYocD09PWkpZi54PWYueT1pO2Vsc2V7dmFyIGQ9cy5jMmcocCksZz1sLmMyZyhmLnRoZXRhKTtmLng9ZCpNYXRoLmNvcyhnKSxmLnk9ZCpNYXRoLnNpbihnKX19bih0LG8scixhKX19LHtcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi9zY2F0dGVyL3Bsb3RcIjoxMDcyfV0sMTEyMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9zY2F0dGVycG9sYXIvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi9zY2F0dGVyZ2wvYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9e21vZGU6bi5tb2RlLHI6bi5yLHRoZXRhOm4udGhldGEscjA6bi5yMCxkcjpuLmRyLHRoZXRhMDpuLnRoZXRhMCxkdGhldGE6bi5kdGhldGEsdGhldGF1bml0Om4udGhldGF1bml0LHRleHQ6bi50ZXh0LGhvdmVydGV4dDpuLmhvdmVydGV4dCxob3ZlcnRlbXBsYXRlOm4uaG92ZXJ0ZW1wbGF0ZSxsaW5lOmkubGluZSxjb25uZWN0Z2FwczppLmNvbm5lY3RnYXBzLG1hcmtlcjppLm1hcmtlcixmaWxsOmkuZmlsbCxmaWxsY29sb3I6aS5maWxsY29sb3IsdGV4dHBvc2l0aW9uOmkudGV4dHBvc2l0aW9uLHRleHRmb250OmkudGV4dGZvbnQsaG92ZXJpbmZvOm4uaG92ZXJpbmZvLHNlbGVjdGVkOm4uc2VsZWN0ZWQsdW5zZWxlY3RlZDpuLnVuc2VsZWN0ZWR9fSx7XCIuLi9zY2F0dGVyZ2wvYXR0cmlidXRlc1wiOjExMDEsXCIuLi9zY2F0dGVycG9sYXIvYXR0cmlidXRlc1wiOjExMTR9XSwxMTIxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCIpLGE9dChcIi4uL3NjYXR0ZXJwb2xhci9kZWZhdWx0c1wiKS5oYW5kbGVSVGhldGFEZWZhdWx0cyxvPXQoXCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0c1wiKSxzPXQoXCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHNcIiksbD10KFwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzXCIpLGM9dChcIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzXCIpLHU9dChcIi4uL3NjYXR0ZXIvY29uc3RhbnRzXCIpLlBUU19MSU5FU09OTFksaD10KFwiLi9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixmKXtmdW5jdGlvbiBwKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxoLHIsaSl9dmFyIGQ9YSh0LGUsZixwKTtkPyhwKFwidGhldGF1bml0XCIpLHAoXCJtb2RlXCIsZDx1P1wibGluZXMrbWFya2Vyc1wiOlwibGluZXNcIikscChcInRleHRcIikscChcImhvdmVydGV4dFwiKSxcImZpbGxzXCIhPT1lLmhvdmVyb24mJnAoXCJob3ZlcnRlbXBsYXRlXCIpLGkuaGFzTGluZXMoZSkmJihzKHQsZSxyLGYscCkscChcImNvbm5lY3RnYXBzXCIpKSxpLmhhc01hcmtlcnMoZSkmJm8odCxlLHIsZixwKSxpLmhhc1RleHQoZSkmJmwodCxlLGYscCkscChcImZpbGxcIiksXCJub25lXCIhPT1lLmZpbGwmJmModCxlLHIscCksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUscCkpOmUudmlzaWJsZT0hMX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL3NjYXR0ZXIvY29uc3RhbnRzXCI6MTA1NixcIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzXCI6MTA2MSxcIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0c1wiOjEwNjUsXCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0c1wiOjEwNzEsXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCI6MTA3NixcIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0c1wiOjEwNzcsXCIuLi9zY2F0dGVycG9sYXIvZGVmYXVsdHNcIjoxMTE2LFwiLi9hdHRyaWJ1dGVzXCI6MTEyMH1dLDExMjI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicG9pbnQtY2x1c3RlclwiKSxpPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxhPXQoXCIuLi9zY2F0dGVyZ2xcIiksbz10KFwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGNcIikscz10KFwiLi4vc2NhdHRlci9jYWxjXCIpLmNhbGNNYXJrZXJTaXplLGw9dChcIi4uL3NjYXR0ZXJnbC9jb252ZXJ0XCIpLGM9dChcIi4uLy4uL2xpYlwiKSx1PXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxoPXQoXCIuLi9zY2F0dGVycG9sYXIvaG92ZXJcIikubWFrZUhvdmVyUG9pbnRUZXh0LGY9dChcIi4uL3NjYXR0ZXJnbC9jb25zdGFudHNcIikuVE9PX01BTllfUE9JTlRTO2UuZXhwb3J0cz17bW9kdWxlVHlwZTpcInRyYWNlXCIsbmFtZTpcInNjYXR0ZXJwb2xhcmdsXCIsYmFzZVBsb3RNb2R1bGU6dChcIi4uLy4uL3Bsb3RzL3BvbGFyXCIpLGNhdGVnb3JpZXM6W1wiZ2xcIixcInJlZ2xcIixcInBvbGFyXCIsXCJzeW1ib2xzXCIsXCJzaG93TGVnZW5kXCIsXCJzY2F0dGVyLWxpa2VcIl0sYXR0cmlidXRlczp0KFwiLi9hdHRyaWJ1dGVzXCIpLHN1cHBseURlZmF1bHRzOnQoXCIuL2RlZmF1bHRzXCIpLGNvbG9yYmFyOnQoXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiKSxjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxuPWUuc3VicGxvdCxpPXJbbl0ucmFkaWFsYXhpcyxhPXJbbl0uYW5ndWxhcmF4aXMsYz1pLm1ha2VDYWxjZGF0YShlLFwiclwiKSxoPWEubWFrZUNhbGNkYXRhKGUsXCJ0aGV0YVwiKSxwPWUuX2xlbmd0aCxkPXt9O3A8Yy5sZW5ndGgmJihjPWMuc2xpY2UoMCxwKSkscDxoLmxlbmd0aCYmKGg9aC5zbGljZSgwLHApKSxkLnI9YyxkLnRoZXRhPWgsbyh0LGUpO3ZhciBnLHY9ZC5vcHRzPWwuc3R5bGUodCxlKTtyZXR1cm4gcDxmP2c9cyhlLHApOnYubWFya2VyJiYoZz0yKih2Lm1hcmtlci5zaXplQXZnfHxNYXRoLm1heCh2Lm1hcmtlci5zaXplLDMpKSksZS5fZXh0cmVtZXMueD11LmZpbmRFeHRyZW1lcyhpLGMse3BwYWQ6Z30pLFt7eDohMSx5OiExLHQ6ZCx0cmFjZTplfV19LHBsb3Q6ZnVuY3Rpb24odCxlLHIpe2lmKHIubGVuZ3RoKXt2YXIgbz1lLnJhZGlhbEF4aXMscz1lLmFuZ3VsYXJBeGlzLHU9YS5zY2VuZVVwZGF0ZSh0LGUpO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24ocil7aWYociYmclswXSYmclswXS50cmFjZSl7dmFyIGEsaD1yWzBdLHA9aC50cmFjZSxkPWgudCxnPXAuX2xlbmd0aCx2PWQucixtPWQudGhldGEseT1kLm9wdHMseD12LnNsaWNlKCksYj1tLnNsaWNlKCk7Zm9yKGE9MDthPHYubGVuZ3RoO2ErKyllLmlzUHRJbnNpZGUoe3I6dlthXSx0aGV0YTptW2FdfSl8fCh4W2FdPU5hTixiW2FdPU5hTik7dmFyIF89bmV3IEFycmF5KDIqZyksdz1BcnJheShnKSxrPUFycmF5KGcpO2ZvcihhPTA7YTxnO2ErKyl7dmFyIEEsVCxNPXhbYV07aWYoaShNKSl7dmFyIFM9by5jMmcoTSksRT1zLmMyZyhiW2FdLHAudGhldGF1bml0KTtBPVMqTWF0aC5jb3MoRSksVD1TKk1hdGguc2luKEUpfWVsc2UgQT1UPU5hTjt3W2FdPV9bMiphXT1BLGtbYV09X1syKmErMV09VH1kLnRyZWU9bihfKSx5Lm1hcmtlciYmZz49ZiYmKHkubWFya2VyLmNsdXN0ZXI9ZC50cmVlKSx5Lm1hcmtlciYmKHkubWFya2VyU2VsLnBvc2l0aW9ucz15Lm1hcmtlclVuc2VsLnBvc2l0aW9ucz15Lm1hcmtlci5wb3NpdGlvbnM9XykseS5saW5lJiZfLmxlbmd0aD4xJiZjLmV4dGVuZEZsYXQoeS5saW5lLGwubGluZVBvc2l0aW9ucyh0LHAsXykpLHkudGV4dCYmKGMuZXh0ZW5kRmxhdCh5LnRleHQse3Bvc2l0aW9uczpffSxsLnRleHRQb3NpdGlvbih0LHAseS50ZXh0LHkubWFya2VyKSksYy5leHRlbmRGbGF0KHkudGV4dFNlbCx7cG9zaXRpb25zOl99LGwudGV4dFBvc2l0aW9uKHQscCx5LnRleHQseS5tYXJrZXJTZWwpKSxjLmV4dGVuZEZsYXQoeS50ZXh0VW5zZWwse3Bvc2l0aW9uczpffSxsLnRleHRQb3NpdGlvbih0LHAseS50ZXh0LHkubWFya2VyVW5zZWwpKSkseS5maWxsJiYhdS5maWxsMmQmJih1LmZpbGwyZD0hMCkseS5tYXJrZXImJiF1LnNjYXR0ZXIyZCYmKHUuc2NhdHRlcjJkPSEwKSx5LmxpbmUmJiF1LmxpbmUyZCYmKHUubGluZTJkPSEwKSx5LnRleHQmJiF1LmdsVGV4dCYmKHUuZ2xUZXh0PSEwKSx1LmxpbmVPcHRpb25zLnB1c2goeS5saW5lKSx1LmZpbGxPcHRpb25zLnB1c2goeS5maWxsKSx1Lm1hcmtlck9wdGlvbnMucHVzaCh5Lm1hcmtlciksdS5tYXJrZXJTZWxlY3RlZE9wdGlvbnMucHVzaCh5Lm1hcmtlclNlbCksdS5tYXJrZXJVbnNlbGVjdGVkT3B0aW9ucy5wdXNoKHkubWFya2VyVW5zZWwpLHUudGV4dE9wdGlvbnMucHVzaCh5LnRleHQpLHUudGV4dFNlbGVjdGVkT3B0aW9ucy5wdXNoKHkudGV4dFNlbCksdS50ZXh0VW5zZWxlY3RlZE9wdGlvbnMucHVzaCh5LnRleHRVbnNlbCksZC54PXcsZC55PWssZC5yYXd4PXcsZC5yYXd5PWssZC5yPXYsZC50aGV0YT1tLGQucG9zaXRpb25zPV8sZC5fc2NlbmU9dSxkLmluZGV4PXUuY291bnQsdS5jb3VudCsrfX0pLGEucGxvdCh0LGUscil9fSxob3ZlclBvaW50czpmdW5jdGlvbih0LGUscixuKXt2YXIgaT10LmNkWzBdLnQsbz1pLnIscz1pLnRoZXRhLGw9YS5ob3ZlclBvaW50cyh0LGUscixuKTtpZihsJiYhMSE9PWxbMF0uaW5kZXgpe3ZhciBjPWxbMF07aWYodm9pZCAwPT09Yy5pbmRleClyZXR1cm4gbDt2YXIgdT10LnN1YnBsb3QsZj1jLmNkW2MuaW5kZXhdLHA9Yy50cmFjZTtpZihmLnI9b1tjLmluZGV4XSxmLnRoZXRhPXNbYy5pbmRleF0sdS5pc1B0SW5zaWRlKGYpKXJldHVybiBjLnhMYWJlbFZhbD12b2lkIDAsYy55TGFiZWxWYWw9dm9pZCAwLGgoZixwLHUsYyksbH19LHNlbGVjdFBvaW50czphLnNlbGVjdFBvaW50cyxtZXRhOnt9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi8uLi9wbG90cy9wb2xhclwiOjgxMyxcIi4uL3NjYXR0ZXIvY2FsY1wiOjEwNTMsXCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsY1wiOjEwNTUsXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiOjEwNzAsXCIuLi9zY2F0dGVyZ2xcIjoxMTA1LFwiLi4vc2NhdHRlcmdsL2NvbnN0YW50c1wiOjExMDIsXCIuLi9zY2F0dGVyZ2wvY29udmVydFwiOjExMDMsXCIuLi9zY2F0dGVycG9sYXIvaG92ZXJcIjoxMTE3LFwiLi9hdHRyaWJ1dGVzXCI6MTEyMCxcIi4vZGVmYXVsdHNcIjoxMTIxLFwiZmFzdC1pc251bWVyaWNcIjoyMjIsXCJwb2ludC1jbHVzdGVyXCI6NDYyfV0sMTEyMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxpPXQoXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIiksbD10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXNcIikuZGFzaCxjPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsdT1pLm1hcmtlcixoPWkubGluZSxmPXUubGluZTtlLmV4cG9ydHM9e2E6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGI6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHN1bTp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MCxtaW46MCxlZGl0VHlwZTpcImNhbGNcIn0sbW9kZTpjKHt9LGkubW9kZSx7ZGZsdDpcIm1hcmtlcnNcIn0pLHRleHQ6Yyh7fSxpLnRleHQse30pLGhvdmVydGV4dDpjKHt9LGkuaG92ZXJ0ZXh0LHt9KSxsaW5lOntjb2xvcjpoLmNvbG9yLHdpZHRoOmgud2lkdGgsZGFzaDpsLHNoYXBlOmMoe30saC5zaGFwZSx7dmFsdWVzOltcImxpbmVhclwiLFwic3BsaW5lXCJdfSksc21vb3RoaW5nOmguc21vb3RoaW5nLGVkaXRUeXBlOlwiY2FsY1wifSxjb25uZWN0Z2FwczppLmNvbm5lY3RnYXBzLGNsaXBvbmF4aXM6aS5jbGlwb25heGlzLGZpbGw6Yyh7fSxpLmZpbGwse3ZhbHVlczpbXCJub25lXCIsXCJ0b3NlbGZcIixcInRvbmV4dFwiXSxkZmx0Olwibm9uZVwifSksZmlsbGNvbG9yOmkuZmlsbGNvbG9yLG1hcmtlcjpjKHtzeW1ib2w6dS5zeW1ib2wsb3BhY2l0eTp1Lm9wYWNpdHksbWF4ZGlzcGxheWVkOnUubWF4ZGlzcGxheWVkLHNpemU6dS5zaXplLHNpemVyZWY6dS5zaXplcmVmLHNpemVtaW46dS5zaXplbWluLHNpemVtb2RlOnUuc2l6ZW1vZGUsbGluZTpjKHt3aWR0aDpmLndpZHRoLGVkaXRUeXBlOlwiY2FsY1wifSxvKFwibWFya2VyLmxpbmVcIikpLGdyYWRpZW50OnUuZ3JhZGllbnQsZWRpdFR5cGU6XCJjYWxjXCJ9LG8oXCJtYXJrZXJcIikse2NvbG9yYmFyOnN9KSx0ZXh0Zm9udDppLnRleHRmb250LHRleHRwb3NpdGlvbjppLnRleHRwb3NpdGlvbixzZWxlY3RlZDppLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6aS51bnNlbGVjdGVkLGhvdmVyaW5mbzpjKHt9LGEuaG92ZXJpbmZvLHtmbGFnczpbXCJhXCIsXCJiXCIsXCJjXCIsXCJ0ZXh0XCIsXCJuYW1lXCJdfSksaG92ZXJvbjppLmhvdmVyb24saG92ZXJ0ZW1wbGF0ZTpuKCl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIjo1NzksXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzXCI6NTk4LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiOjc0NixcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiOjEwNTJ9XSwxMTI0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjXCIpLGE9dChcIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhXCIpLG89dChcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIikscz10KFwiLi4vc2NhdHRlci9jYWxjXCIpLmNhbGNNYXJrZXJTaXplLGw9W1wiYVwiLFwiYlwiLFwiY1wiXSxjPXthOltcImJcIixcImNcIl0sYjpbXCJhXCIsXCJjXCJdLGM6W1wiYVwiLFwiYlwiXX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsdSxoLGYscCxkLGc9dC5fZnVsbExheW91dFtlLnN1YnBsb3RdLnN1bSx2PWUuc3VtfHxnLG09e2E6ZS5hLGI6ZS5iLGM6ZS5jfTtmb3Iocj0wO3I8bC5sZW5ndGg7cisrKWlmKCFtW2g9bFtyXV0pe2ZvcihwPW1bY1toXVswXV0sZD1tW2NbaF1bMV1dLGY9bmV3IEFycmF5KHAubGVuZ3RoKSx1PTA7dTxwLmxlbmd0aDt1KyspZlt1XT12LXBbdV0tZFt1XTttW2hdPWZ9dmFyIHkseCxiLF8sdyxrLEE9ZS5fbGVuZ3RoLFQ9bmV3IEFycmF5KEEpO2ZvcihyPTA7cjxBO3IrKyl5PW0uYVtyXSx4PW0uYltyXSxiPW0uY1tyXSxuKHkpJiZuKHgpJiZuKGIpPygxIT09KF89Zy8oKHk9K3kpKyh4PSt4KSsoYj0rYikpKSYmKHkqPV8seCo9XyxiKj1fKSxrPXksdz1iLXgsVFtyXT17eDp3LHk6ayxhOnksYjp4LGM6Yn0pOlRbcl09e3g6ITEseTohMX07cmV0dXJuIHMoZSxBKSxpKHQsZSksYShULGUpLG8oVCxlKSxUfX0se1wiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGFcIjoxMDUxLFwiLi4vc2NhdHRlci9jYWxjXCI6MTA1MyxcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIjoxMDU0LFwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGNcIjoxMDU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSwxMTI1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi9zY2F0dGVyL2NvbnN0YW50c1wiKSxhPXQoXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCIpLG89dChcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCIpLHM9dChcIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0c1wiKSxsPXQoXCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHNcIiksYz10KFwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzXCIpLHU9dChcIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzXCIpLGg9dChcIi4vYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsZil7ZnVuY3Rpb24gcChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsaCxyLGkpfXZhciBkLGc9cChcImFcIiksdj1wKFwiYlwiKSxtPXAoXCJjXCIpO2lmKGc/KGQ9Zy5sZW5ndGgsdj8oZD1NYXRoLm1pbihkLHYubGVuZ3RoKSxtJiYoZD1NYXRoLm1pbihkLG0ubGVuZ3RoKSkpOmQ9bT9NYXRoLm1pbihkLG0ubGVuZ3RoKTowKTp2JiZtJiYoZD1NYXRoLm1pbih2Lmxlbmd0aCxtLmxlbmd0aCkpLGQpe2UuX2xlbmd0aD1kLHAoXCJzdW1cIikscChcInRleHRcIikscChcImhvdmVydGV4dFwiKSxcImZpbGxzXCIhPT1lLmhvdmVyb24mJnAoXCJob3ZlcnRlbXBsYXRlXCIpLHAoXCJtb2RlXCIsZDxpLlBUU19MSU5FU09OTFk/XCJsaW5lcyttYXJrZXJzXCI6XCJsaW5lc1wiKSxhLmhhc0xpbmVzKGUpJiYocyh0LGUscixmLHApLGwodCxlLHApLHAoXCJjb25uZWN0Z2Fwc1wiKSksYS5oYXNNYXJrZXJzKGUpJiZvKHQsZSxyLGYscCx7Z3JhZGllbnQ6ITB9KSxhLmhhc1RleHQoZSkmJmModCxlLGYscCk7dmFyIHk9W107KGEuaGFzTWFya2VycyhlKXx8YS5oYXNUZXh0KGUpKSYmKHAoXCJjbGlwb25heGlzXCIpLHAoXCJtYXJrZXIubWF4ZGlzcGxheWVkXCIpLHkucHVzaChcInBvaW50c1wiKSkscChcImZpbGxcIiksXCJub25lXCIhPT1lLmZpbGwmJih1KHQsZSxyLHApLGEuaGFzTGluZXMoZSl8fGwodCxlLHApKSxcInRvbmV4dFwiIT09ZS5maWxsJiZcInRvc2VsZlwiIT09ZS5maWxsfHx5LnB1c2goXCJmaWxsc1wiKSxwKFwiaG92ZXJvblwiLHkuam9pbihcIitcIil8fFwicG9pbnRzXCIpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHApfWVsc2UgZS52aXNpYmxlPSExfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vc2NhdHRlci9jb25zdGFudHNcIjoxMDU2LFwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHNcIjoxMDYxLFwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzXCI6MTA2NSxcIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0c1wiOjEwNjcsXCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0c1wiOjEwNzEsXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCI6MTA3NixcIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0c1wiOjEwNzcsXCIuL2F0dHJpYnV0ZXNcIjoxMTIzfV0sMTEyNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe2lmKGUueGEmJih0LnhheGlzPWUueGEpLGUueWEmJih0LnlheGlzPWUueWEpLG5baV0pe3ZhciBhPW5baV07dC5hPWEuYSx0LmI9YS5iLHQuYz1hLmN9ZWxzZSB0LmE9ZS5hLHQuYj1lLmIsdC5jPWUuYztyZXR1cm4gdH19LHt9XSwxMTI3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3NjYXR0ZXIvaG92ZXJcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4odCxlLHIsYSk7aWYobyYmITEhPT1vWzBdLmluZGV4KXt2YXIgcz1vWzBdO2lmKHZvaWQgMD09PXMuaW5kZXgpe3ZhciBsPTEtcy55MC90LnlhLl9sZW5ndGgsYz10LnhhLl9sZW5ndGgsdT1jKmwvMixoPWMtdTtyZXR1cm4gcy54MD1NYXRoLm1heChNYXRoLm1pbihzLngwLGgpLHUpLHMueDE9TWF0aC5tYXgoTWF0aC5taW4ocy54MSxoKSx1KSxvfXZhciBmPXMuY2Rbcy5pbmRleF07cy5hPWYuYSxzLmI9Zi5iLHMuYz1mLmMscy54TGFiZWxWYWw9dm9pZCAwLHMueUxhYmVsVmFsPXZvaWQgMDt2YXIgcD1zLnRyYWNlLGQ9cy5zdWJwbG90LGc9Zi5oaXx8cC5ob3ZlcmluZm8sdj1bXTtpZighcC5ob3ZlcnRlbXBsYXRlKXt2YXIgbT1nLnNwbGl0KFwiK1wiKTstMSE9PW0uaW5kZXhPZihcImFsbFwiKSYmKG09W1wiYVwiLFwiYlwiLFwiY1wiXSksLTEhPT1tLmluZGV4T2YoXCJhXCIpJiZ5KGQuYWF4aXMsZi5hKSwtMSE9PW0uaW5kZXhPZihcImJcIikmJnkoZC5iYXhpcyxmLmIpLC0xIT09bS5pbmRleE9mKFwiY1wiKSYmeShkLmNheGlzLGYuYyl9cmV0dXJuIHMuZXh0cmFUZXh0PXYuam9pbihcIjxicj5cIikscy5ob3ZlcnRlbXBsYXRlPXAuaG92ZXJ0ZW1wbGF0ZSxvfWZ1bmN0aW9uIHkodCxlKXt2LnB1c2godC5faG92ZXJ0aXRsZStcIjogXCIraS50aWNrVGV4dCh0LGUsXCJob3ZlclwiKS50ZXh0KX19fSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL3NjYXR0ZXIvaG92ZXJcIjoxMDYzfV0sMTEyODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIiksbi5jb2xvcmJhcj10KFwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXJcIiksbi5jYWxjPXQoXCIuL2NhbGNcIiksbi5wbG90PXQoXCIuL3Bsb3RcIiksbi5zdHlsZT10KFwiLi4vc2NhdHRlci9zdHlsZVwiKS5zdHlsZSxuLnN0eWxlT25TZWxlY3Q9dChcIi4uL3NjYXR0ZXIvc3R5bGVcIikuc3R5bGVPblNlbGVjdCxuLmhvdmVyUG9pbnRzPXQoXCIuL2hvdmVyXCIpLG4uc2VsZWN0UG9pbnRzPXQoXCIuLi9zY2F0dGVyL3NlbGVjdFwiKSxuLmV2ZW50RGF0YT10KFwiLi9ldmVudF9kYXRhXCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwic2NhdHRlcnRlcm5hcnlcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy90ZXJuYXJ5XCIpLG4uY2F0ZWdvcmllcz1bXCJ0ZXJuYXJ5XCIsXCJzeW1ib2xzXCIsXCJzaG93TGVnZW5kXCIsXCJzY2F0dGVyLWxpa2VcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy90ZXJuYXJ5XCI6ODI1LFwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXJcIjoxMDcwLFwiLi4vc2NhdHRlci9zZWxlY3RcIjoxMDczLFwiLi4vc2NhdHRlci9zdHlsZVwiOjEwNzUsXCIuL2F0dHJpYnV0ZXNcIjoxMTIzLFwiLi9jYWxjXCI6MTEyNCxcIi4vZGVmYXVsdHNcIjoxMTI1LFwiLi9ldmVudF9kYXRhXCI6MTEyNixcIi4vaG92ZXJcIjoxMTI3LFwiLi9wbG90XCI6MTEyOX1dLDExMjk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vc2NhdHRlci9wbG90XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9ZS5wbG90Q29udGFpbmVyO2kuc2VsZWN0KFwiLnNjYXR0ZXJsYXllclwiKS5zZWxlY3RBbGwoXCIqXCIpLnJlbW92ZSgpO3ZhciBhPXt4YXhpczplLnhheGlzLHlheGlzOmUueWF4aXMscGxvdDppLGxheWVyQ2xpcElkOmUuX2hhc0NsaXBPbkF4aXNGYWxzZT9lLmNsaXBJZFJlbGF0aXZlOm51bGx9LG89ZS5sYXllcnMuZnJvbnRwbG90LnNlbGVjdChcImcuc2NhdHRlcmxheWVyXCIpO24odCxhLHIsbyl9fSx7XCIuLi9zY2F0dGVyL3Bsb3RcIjoxMDcyfV0sMTEzMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vc2NhdHRlcmdsL2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50c1wiKS5pZFJlZ2V4LGw9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIikudGVtcGxhdGVkQXJyYXksYz10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LHU9bi5tYXJrZXIsaD11LmxpbmUsZj1jKGkoXCJtYXJrZXIubGluZVwiLHtlZGl0VHlwZU92ZXJyaWRlOlwiY2FsY1wifSkse3dpZHRoOmMoe30saC53aWR0aCx7ZWRpdFR5cGU6XCJjYWxjXCJ9KSxlZGl0VHlwZTpcImNhbGNcIn0pLHA9YyhpKFwibWFya2VyXCIpLHtzeW1ib2w6dS5zeW1ib2wsc2l6ZTpjKHt9LHUuc2l6ZSx7ZWRpdFR5cGU6XCJtYXJrZXJTaXplXCJ9KSxzaXplcmVmOnUuc2l6ZXJlZixzaXplbWluOnUuc2l6ZW1pbixzaXplbW9kZTp1LnNpemVtb2RlLG9wYWNpdHk6dS5vcGFjaXR5LGNvbG9yYmFyOnUuY29sb3JiYXIsbGluZTpmLGVkaXRUeXBlOlwiY2FsY1wifSk7ZnVuY3Rpb24gZCh0KXtyZXR1cm57dmFsVHlwZTpcImluZm9fYXJyYXlcIixmcmVlTGVuZ3RoOiEwLGVkaXRUeXBlOlwiY2FsY1wiLGl0ZW1zOnt2YWxUeXBlOlwic3VicGxvdGlkXCIscmVnZXg6c1t0XSxlZGl0VHlwZTpcInBsb3RcIn19fXAuY29sb3IuZWRpdFR5cGU9cC5jbWluLmVkaXRUeXBlPXAuY21heC5lZGl0VHlwZT1cInN0eWxlXCIsZS5leHBvcnRzPXtkaW1lbnNpb25zOmwoXCJkaW1lbnNpb25cIix7dmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSxsYWJlbDp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwiY2FsY1wifSx2YWx1ZXM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LGF4aXM6e3R5cGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImxpbmVhclwiLFwibG9nXCIsXCJkYXRlXCIsXCJjYXRlZ29yeVwiXSxlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0sbWF0Y2hlczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0sZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9KSx0ZXh0OmMoe30sby50ZXh0LHt9KSxob3ZlcnRleHQ6Yyh7fSxvLmhvdmVydGV4dCx7fSksaG92ZXJ0ZW1wbGF0ZTphKCksbWFya2VyOnAseGF4ZXM6ZChcInhcIikseWF4ZXM6ZChcInlcIiksZGlhZ29uYWw6e3Zpc2libGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LHNob3d1cHBlcmhhbGY6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcImNhbGNcIn0sc2hvd2xvd2VyaGFsZjp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSxzZWxlY3RlZDp7bWFya2VyOm8uc2VsZWN0ZWQubWFya2VyLGVkaXRUeXBlOlwiY2FsY1wifSx1bnNlbGVjdGVkOnttYXJrZXI6by51bnNlbGVjdGVkLm1hcmtlcixlZGl0VHlwZTpcImNhbGNcIn0sb3BhY2l0eTpvLm9wYWNpdHl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzXCI6NzU1LFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCI6MTA1MixcIi4uL3NjYXR0ZXJnbC9hdHRyaWJ1dGVzXCI6MTEwMX1dLDExMzE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicmVnbC1saW5lMmRcIiksaT10KFwiLi4vLi4vcmVnaXN0cnlcIiksYT10KFwiLi4vLi4vbGliL3ByZXBhcmVfcmVnbFwiKSxvPXQoXCIuLi8uLi9wbG90cy9nZXRfZGF0YVwiKS5nZXRNb2R1bGVDYWxjRGF0YSxzPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIiksbD10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCIpLmdldEZyb21JZCxjPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKS5zaG91bGRTaG93WmVyb0xpbmUsdT1cInNwbG9tXCI7ZnVuY3Rpb24gaCh0LGUscil7Zm9yKHZhciBuPXIubWF0cml4T3B0aW9ucy5kYXRhLmxlbmd0aCxpPWUuX3Zpc2libGVEaW1zLGE9ci52aWV3T3B0cy5yYW5nZXM9bmV3IEFycmF5KG4pLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9aVtvXSxjPWFbb109bmV3IEFycmF5KDQpLHU9bCh0LGUuX2RpYWdbc11bMF0pO3UmJihjWzBdPXUucjJsKHUucmFuZ2VbMF0pLGNbMl09dS5yMmwodS5yYW5nZVsxXSkpO3ZhciBoPWwodCxlLl9kaWFnW3NdWzFdKTtoJiYoY1sxXT1oLnIybChoLnJhbmdlWzBdKSxjWzNdPWgucjJsKGgucmFuZ2VbMV0pKX1yLnNlbGVjdEJhdGNoP3IubWF0cml4LnVwZGF0ZSh7cmFuZ2VzOmF9LHtyYW5nZXM6YX0pOnIubWF0cml4LnVwZGF0ZSh7cmFuZ2VzOmF9KX1mdW5jdGlvbiBmKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9nbGNhbnZhcy5kYXRhKClbMF0ucmVnbCxpPWUuX3NwbG9tR3JpZDtpfHwoaT1lLl9zcGxvbUdyaWQ9bihyKSksaS51cGRhdGUoZnVuY3Rpb24odCl7dmFyIGUscj10Ll9mdWxsTGF5b3V0LG49ci5fc2l6ZSxpPVswLDAsci53aWR0aCxyLmhlaWdodF0sYT17fTtmdW5jdGlvbiBvKHQsZSxyLG4sbyxzKXt2YXIgbD1lW3QrXCJjb2xvclwiXSxjPWVbdCtcIndpZHRoXCJdLHU9U3RyaW5nKGwrYyk7dSBpbiBhP2FbdV0uZGF0YS5wdXNoKE5hTixOYU4scixuLG8scyk6YVt1XT17ZGF0YTpbcixuLG8sc10sam9pbjpcInJlY3RcIix0aGlja25lc3M6Yyxjb2xvcjpsLHZpZXdwb3J0OmkscmFuZ2U6aSxvdmVybGF5OiExfX1mb3IoZSBpbiByLl9zcGxvbVN1YnBsb3RzKXt2YXIgcyxsLHU9ci5fcGxvdHNbZV0saD11LnhheGlzLGY9dS55YXhpcyxwPWguX3ZhbHMsZD1mLl92YWxzLGc9bi5iK2YuZG9tYWluWzBdKm4uaCx2PS1mLl9tLG09LXYqZi5yMmwoZi5yYW5nZVswXSxmLmNhbGVuZGFyKTtpZihoLnNob3dncmlkKWZvcihlPTA7ZTxwLmxlbmd0aDtlKyspcz1oLl9vZmZzZXQraC5sMnAocFtlXS54KSxvKFwiZ3JpZFwiLGgscyxnLHMsZytmLl9sZW5ndGgpO2lmKGYuc2hvd2dyaWQpZm9yKGU9MDtlPGQubGVuZ3RoO2UrKylsPWcrbSt2KmRbZV0ueCxvKFwiZ3JpZFwiLGYsaC5fb2Zmc2V0LGwsaC5fb2Zmc2V0K2guX2xlbmd0aCxsKTtjKHQsaCxmKSYmKHM9aC5fb2Zmc2V0K2gubDJwKDApLG8oXCJ6ZXJvbGluZVwiLGgscyxnLHMsZytmLl9sZW5ndGgpKSxjKHQsZixoKSYmKGw9ZyttKzAsbyhcInplcm9saW5lXCIsZixoLl9vZmZzZXQsbCxoLl9vZmZzZXQraC5fbGVuZ3RoLGwpKX12YXIgeT1bXTtmb3IoZSBpbiBhKXkucHVzaChhW2VdKTtyZXR1cm4geX0odCkpfWUuZXhwb3J0cz17bmFtZTp1LGF0dHI6cy5hdHRyLGF0dHJSZWdleDpzLmF0dHJSZWdleCxsYXlvdXRBdHRyaWJ1dGVzOnMubGF5b3V0QXR0cmlidXRlcyxzdXBwbHlMYXlvdXREZWZhdWx0czpzLnN1cHBseUxheW91dERlZmF1bHRzLGRyYXdGcmFtZXdvcms6cy5kcmF3RnJhbWV3b3JrLHBsb3Q6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWkuZ2V0TW9kdWxlKHUpLG49byh0LmNhbGNkYXRhLHIpWzBdO2EodCxbXCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzXCIsXCJPRVNfZWxlbWVudF9pbmRleF91aW50XCJdKSYmKGUuX2hhc09ubHlMYXJnZVNwbG9tcyYmZih0KSxyLnBsb3QodCx7fSxuKSl9LGRyYWc6ZnVuY3Rpb24odCl7dmFyIGU9dC5jYWxjZGF0YSxyPXQuX2Z1bGxMYXlvdXQ7ci5faGFzT25seUxhcmdlU3Bsb21zJiZmKHQpO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dWzBdLnRyYWNlLGE9ci5fc3Bsb21TY2VuZXNbaS51aWRdO1wic3Bsb21cIj09PWkudHlwZSYmYSYmYS5tYXRyaXgmJmgodCxpLGEpfX0sdXBkYXRlR3JpZDpmLGNsZWFuOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9e307aWYobi5fc3Bsb21TY2VuZXMpe2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBvPXRbaV07XCJzcGxvbVwiPT09by50eXBlJiYoYVtvLnVpZF09MSl9Zm9yKGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGw9cltpXTtpZighYVtsLnVpZF0pe3ZhciBjPW4uX3NwbG9tU2NlbmVzW2wudWlkXTtjJiZjLmRlc3Ryb3kmJmMuZGVzdHJveSgpLG4uX3NwbG9tU2NlbmVzW2wudWlkXT1udWxsLGRlbGV0ZSBuLl9zcGxvbVNjZW5lc1tsLnVpZF19fX0wPT09T2JqZWN0LmtleXMobi5fc3Bsb21TY2VuZXN8fHt9KS5sZW5ndGgmJmRlbGV0ZSBuLl9zcGxvbVNjZW5lcyxuLl9zcGxvbUdyaWQmJiFlLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJm4uX2hhc09ubHlMYXJnZVNwbG9tcyYmKG4uX3NwbG9tR3JpZC5kZXN0cm95KCksbi5fc3Bsb21HcmlkPW51bGwsZGVsZXRlIG4uX3NwbG9tR3JpZCkscy5jbGVhbih0LGUscixuKX0sdXBkYXRlRng6ZnVuY3Rpb24odCl7cy51cGRhdGVGeCh0KTt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5kcmFnbW9kZTtpZihcInpvb21cIj09PXJ8fFwicGFuXCI9PT1yKWZvcih2YXIgbj10LmNhbGNkYXRhLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIGE9bltpXVswXS50cmFjZTtpZihcInNwbG9tXCI9PT1hLnR5cGUpe3ZhciBvPWUuX3NwbG9tU2NlbmVzW2EudWlkXTtudWxsPT09by5zZWxlY3RCYXRjaCYmby5tYXRyaXgudXBkYXRlKG8ubWF0cml4T3B0aW9ucyxudWxsKX19fSx0b1NWRzpzLnRvU1ZHfX0se1wiLi4vLi4vbGliL3ByZXBhcmVfcmVnbFwiOjcxNCxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiOjc2MCxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCI6NzUyLFwiLi4vLi4vcGxvdHMvZ2V0X2RhdGFcIjo3ODQsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcInJlZ2wtbGluZTJkXCI6NDg0fV0sMTEzMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCIpLGE9dChcIi4vYXR0cmlidXRlc1wiKSxvPXQoXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCIpLHM9dChcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCIpLGw9dChcIi4uL3BhcmNvb3Jkcy9tZXJnZV9sZW5ndGhcIiksYz0vLW9wZW4vO2Z1bmN0aW9uIHUodCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLmRpbWVuc2lvbnMscixpKX1yKFwibGFiZWxcIik7dmFyIGk9cihcInZhbHVlc1wiKTtpJiZpLmxlbmd0aD9yKFwidmlzaWJsZVwiKTplLnZpc2libGU9ITEscihcImF4aXMudHlwZVwiKSxyKFwiYXhpcy5tYXRjaGVzXCIpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXtmdW5jdGlvbiBmKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIHA9aSh0LGUse25hbWU6XCJkaW1lbnNpb25zXCIsaGFuZGxlSXRlbURlZmF1bHRzOnV9KSxkPWYoXCJkaWFnb25hbC52aXNpYmxlXCIpLGc9ZihcInNob3d1cHBlcmhhbGZcIiksdj1mKFwic2hvd2xvd2VyaGFsZlwiKTtpZihsKGUscCxcInZhbHVlc1wiKSYmKGR8fGd8fHYpKXtmKFwidGV4dFwiKSxmKFwiaG92ZXJ0ZXh0XCIpLGYoXCJob3ZlcnRlbXBsYXRlXCIpLHModCxlLHIsaCxmKTt2YXIgbT1jLnRlc3QoZS5tYXJrZXIuc3ltYm9sKSx5PW8uaXNCdWJibGUoZSk7ZihcIm1hcmtlci5saW5lLndpZHRoXCIsbXx8eT8xOjApLGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbz1lLmRpbWVuc2lvbnMscz1vLmxlbmd0aCxsPWUuc2hvd3VwcGVyaGFsZixjPWUuc2hvd2xvd2VyaGFsZix1PWUuZGlhZ29uYWwudmlzaWJsZSxoPW5ldyBBcnJheShzKSxmPW5ldyBBcnJheShzKTtmb3IoaT0wO2k8cztpKyspe3ZhciBwPWk/aSsxOlwiXCI7aFtpXT1cInhcIitwLGZbaV09XCJ5XCIrcH12YXIgZD1uKFwieGF4ZXNcIixoKSxnPW4oXCJ5YXhlc1wiLGYpLHY9ZS5fZGlhZz1uZXcgQXJyYXkocyk7ZS5feGF4ZXM9e30sZS5feWF4ZXM9e307dmFyIG09W10seT1bXTtmdW5jdGlvbiB4KHQsbixpLGEpe2lmKHQpe3ZhciBvPXQuY2hhckF0KDApLHM9ci5fc3Bsb21BeGVzW29dO2lmKGVbXCJfXCIrbytcImF4ZXNcIl1bdF09MSxhLnB1c2godCksISh0IGluIHMpKXt2YXIgbD1zW3RdPXt9O2kmJihsLmxhYmVsPWkubGFiZWx8fFwiXCIsaS52aXNpYmxlJiZpLmF4aXMmJihpLmF4aXMudHlwZSYmKGwudHlwZT1pLmF4aXMudHlwZSksaS5heGlzLm1hdGNoZXMmJihsLm1hdGNoZXM9bikpKX19fXZhciBiPSF1JiYhYyxfPSF1JiYhbDtmb3IoaT0wO2k8cztpKyspe3ZhciB3PW9baV0saz0wPT09aSxBPWk9PT1zLTEsVD1rJiZifHxBJiZfP3ZvaWQgMDpkW2ldLE09ayYmX3x8QSYmYj92b2lkIDA6Z1tpXTt4KFQsTSx3LG0pLHgoTSxULHcseSksdltpXT1bVCxNXX1mb3IoaT0wO2k8bS5sZW5ndGg7aSsrKWZvcihhPTA7YTx5Lmxlbmd0aDthKyspe3ZhciBTPW1baV0reVthXTtpPmEmJmw/ci5fc3Bsb21TdWJwbG90c1tTXT0xOmk8YSYmYz9yLl9zcGxvbVN1YnBsb3RzW1NdPTE6aSE9PWF8fCF1JiZjJiZsfHwoci5fc3Bsb21TdWJwbG90c1tTXT0xKX0oIWN8fCF1JiZsJiZjKSYmKHIuX3NwbG9tR3JpZERmbHQueHNpZGU9XCJib3R0b21cIixyLl9zcGxvbUdyaWREZmx0LnlzaWRlPVwibGVmdFwiKX0oMCxlLGgsZiksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsZil9ZWxzZSBlLnZpc2libGU9ITF9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIjo3NDUsXCIuLi9wYXJjb29yZHMvbWVyZ2VfbGVuZ3RoXCI6MTAyMyxcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCI6MTA3MSxcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi9hdHRyaWJ1dGVzXCI6MTEzMH1dLDExMzM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicmVnbC1zcGxvbVwiKSxpPXQoXCJhcnJheS1yYW5nZVwiKSxhPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2dyaWRcIikscz10KFwiLi4vLi4vbGliXCIpLGw9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiKSxjPXQoXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCIpLHU9dChcIi4uL3NjYXR0ZXIvY2FsY1wiKS5jYWxjTWFya2VyU2l6ZSxoPXQoXCIuLi9zY2F0dGVyL2NhbGNcIikuY2FsY0F4aXNFeHBhbnNpb24sZj10KFwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGNcIikscD10KFwiLi4vc2NhdHRlcmdsL2NvbnZlcnRcIikubWFya2VyU2VsZWN0aW9uLGQ9dChcIi4uL3NjYXR0ZXJnbC9jb252ZXJ0XCIpLm1hcmtlclN0eWxlLGc9dChcIi4uL3NjYXR0ZXJnbFwiKS5jYWxjSG92ZXIsdj10KFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKS5CQUROVU0sbT10KFwiLi4vc2NhdHRlcmdsL2NvbnN0YW50c1wiKS5UT09fTUFOWV9QT0lOVFM7ZnVuY3Rpb24geSh0LGUpe3ZhciByLGksYSxvLGMsdT10Ll9mdWxsTGF5b3V0LGg9dS5fc2l6ZSxmPWUudHJhY2UscD1lLnQsZD11Ll9zcGxvbVNjZW5lc1tmLnVpZF0sZz1kLm1hdHJpeE9wdGlvbnMsdj1nLmNkYXRhLG09dS5fZ2xjYW52YXMuZGF0YSgpWzBdLnJlZ2wseT11LmRyYWdtb2RlO2lmKDAhPT12Lmxlbmd0aCl7Zy5sb3dlcj1mLnNob3d1cHBlcmhhbGYsZy51cHBlcj1mLnNob3dsb3dlcmhhbGYsZy5kaWFnb25hbD1mLmRpYWdvbmFsLnZpc2libGU7dmFyIHg9Zi5fdmlzaWJsZURpbXMsYj12Lmxlbmd0aCxfPWQudmlld09wdHM9e307Zm9yKF8ucmFuZ2VzPW5ldyBBcnJheShiKSxfLmRvbWFpbnM9bmV3IEFycmF5KGIpLGM9MDtjPHgubGVuZ3RoO2MrKyl7YT14W2NdO3ZhciB3PV8ucmFuZ2VzW2NdPW5ldyBBcnJheSg0KSxrPV8uZG9tYWluc1tjXT1uZXcgQXJyYXkoNCk7KHI9bC5nZXRGcm9tSWQodCxmLl9kaWFnW2FdWzBdKSkmJih3WzBdPXIuX3JsWzBdLHdbMl09ci5fcmxbMV0sa1swXT1yLmRvbWFpblswXSxrWzJdPXIuZG9tYWluWzFdKSwoaT1sLmdldEZyb21JZCh0LGYuX2RpYWdbYV1bMV0pKSYmKHdbMV09aS5fcmxbMF0sd1szXT1pLl9ybFsxXSxrWzFdPWkuZG9tYWluWzBdLGtbM109aS5kb21haW5bMV0pfV8udmlld3BvcnQ9W2gubCxoLmIsaC53K2gubCxoLmgraC5iXSwhMD09PWQubWF0cml4JiYoZC5tYXRyaXg9bihtKSk7dmFyIEE9dS5jbGlja21vZGUuaW5kZXhPZihcInNlbGVjdFwiKT4tMSxUPVwibGFzc29cIj09PXl8fFwic2VsZWN0XCI9PT15fHwhIWYuc2VsZWN0ZWRwb2ludHN8fEE7aWYoZC5zZWxlY3RCYXRjaD1udWxsLGQudW5zZWxlY3RCYXRjaD1udWxsLFQpe3ZhciBNPWYuX2xlbmd0aDtpZihkLnNlbGVjdEJhdGNofHwoZC5zZWxlY3RCYXRjaD1bXSxkLnVuc2VsZWN0QmF0Y2g9W10pLGYuc2VsZWN0ZWRwb2ludHMpe2Quc2VsZWN0QmF0Y2g9Zi5zZWxlY3RlZHBvaW50czt2YXIgUz1mLnNlbGVjdGVkcG9pbnRzLEU9e307Zm9yKGE9MDthPFMubGVuZ3RoO2ErKylFW1NbYV1dPSEwO3ZhciBDPVtdO2ZvcihhPTA7YTxNO2ErKylFW2FdfHxDLnB1c2goYSk7ZC51bnNlbGVjdEJhdGNoPUN9dmFyIEw9cC54cHg9bmV3IEFycmF5KGIpLHo9cC55cHg9bmV3IEFycmF5KGIpO2ZvcihjPTA7Yzx4Lmxlbmd0aDtjKyspe2lmKGE9eFtjXSxyPWwuZ2V0RnJvbUlkKHQsZi5fZGlhZ1thXVswXSkpZm9yKExbY109bmV3IEFycmF5KE0pLG89MDtvPE07bysrKUxbY11bb109ci5jMnAodltjXVtvXSk7aWYoaT1sLmdldEZyb21JZCh0LGYuX2RpYWdbYV1bMV0pKWZvcih6W2NdPW5ldyBBcnJheShNKSxvPTA7bzxNO28rKyl6W2NdW29dPWkuYzJwKHZbY11bb10pfWQuc2VsZWN0QmF0Y2g/KGQubWF0cml4LnVwZGF0ZShnLGcpLGQubWF0cml4LnVwZGF0ZShkLnVuc2VsZWN0ZWRPcHRpb25zLGQuc2VsZWN0ZWRPcHRpb25zKSxkLm1hdHJpeC51cGRhdGUoXyxfKSk6ZC5tYXRyaXgudXBkYXRlKF8sbnVsbCl9ZWxzZXt2YXIgTz1zLmV4dGVuZEZsYXQoe30sZyxfKTtkLm1hdHJpeC51cGRhdGUoTyxudWxsKSxwLnhweD1wLnlweD1udWxsfX19ZnVuY3Rpb24geCh0LGUpe2Zvcih2YXIgcj1lLl9pZCxuPXt4OjAseToxfVtyLmNoYXJBdCgwKV0saT10Ll92aXNpYmxlRGltcyxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV07aWYodC5fZGlhZ1tvXVtuXT09PXIpcmV0dXJuIGF9cmV0dXJuITF9ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwidHJhY2VcIixuYW1lOlwic3Bsb21cIixiYXNlUGxvdE1vZHVsZTp0KFwiLi9iYXNlX3Bsb3RcIiksY2F0ZWdvcmllczpbXCJnbFwiLFwicmVnbFwiLFwiY2FydGVzaWFuXCIsXCJzeW1ib2xzXCIsXCJzaG93TGVnZW5kXCIsXCJzY2F0dGVyLWxpa2VcIl0sYXR0cmlidXRlczp0KFwiLi9hdHRyaWJ1dGVzXCIpLHN1cHBseURlZmF1bHRzOnQoXCIuL2RlZmF1bHRzXCIpLGNvbG9yYmFyOnQoXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiKSxjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxjLGc9ZS5kaW1lbnNpb25zLHk9ZS5fbGVuZ3RoLHg9e30sYj14LmNkYXRhPVtdLF89eC5kYXRhPVtdLHc9ZS5fdmlzaWJsZURpbXM9W107ZnVuY3Rpb24gayh0LHIpe2Zvcih2YXIgbj10Lm1ha2VDYWxjZGF0YSh7djpyLnZhbHVlcyx2Y2FsZW5kYXI6ZS5jYWxlbmRhcn0sXCJ2XCIpLGk9MDtpPG4ubGVuZ3RoO2krKyluW2ldPW5baV09PT12P05hTjpuW2ldO2IucHVzaChuKSxfLnB1c2goXCJsb2dcIj09PXQudHlwZT9zLnNpbXBsZU1hcChuLHQuYzJsKTpuKX1mb3Iocj0wO3I8Zy5sZW5ndGg7cisrKWlmKChpPWdbcl0pLnZpc2libGUpe2lmKGE9bC5nZXRGcm9tSWQodCxlLl9kaWFnW3JdWzBdKSxvPWwuZ2V0RnJvbUlkKHQsZS5fZGlhZ1tyXVsxXSksYSYmbyYmYS50eXBlIT09by50eXBlKXtzLmxvZyhcIlNraXBwaW5nIHNwbG9tIGRpbWVuc2lvbiBcIityK1wiIHdpdGggY29uZmxpY3RpbmcgYXhpcyB0eXBlc1wiKTtjb250aW51ZX1hPyhrKGEsaSksbyYmXCJjYXRlZ29yeVwiPT09by50eXBlJiYoby5fY2F0ZWdvcmllcz1hLl9jYXRlZ29yaWVzLnNsaWNlKCkpKTprKG8saSksdy5wdXNoKHIpfWZvcihmKHQsZSkscy5leHRlbmRGbGF0KHgsZChlKSksYz1iLmxlbmd0aCp5Pm0/MiooeC5zaXplQXZnfHxNYXRoLm1heCh4LnNpemUsMykpOnUoZSx5KSxuPTA7bjx3Lmxlbmd0aDtuKyspaT1nW3I9d1tuXV0sYT1sLmdldEZyb21JZCh0LGUuX2RpYWdbcl1bMF0pfHx7fSxvPWwuZ2V0RnJvbUlkKHQsZS5fZGlhZ1tyXVsxXSl8fHt9LGgodCxlLGEsbyxiW25dLGJbbl0sYyk7dmFyIEE9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LG49ZS51aWQsaT1yLl9zcGxvbVNjZW5lcztpfHwoaT1yLl9zcGxvbVNjZW5lcz17fSk7dmFyIGE9e2RpcnR5OiEwfSxvPWlbZS51aWRdO3JldHVybiBvfHwoKG89aVtuXT1zLmV4dGVuZEZsYXQoe30sYSx7c2VsZWN0QmF0Y2g6bnVsbCx1bnNlbGVjdEJhdGNoOm51bGwsbWF0cml4OiExLHNlbGVjdDpudWxsfSkpLmRyYXc9ZnVuY3Rpb24oKXtvLm1hdHJpeCYmby5tYXRyaXguZHJhdyYmKG8uc2VsZWN0QmF0Y2g/by5tYXRyaXguZHJhdyhvLnVuc2VsZWN0QmF0Y2gsby5zZWxlY3RCYXRjaCk6by5tYXRyaXguZHJhdygpKSxvLmRpcnR5PSExfSxvLmRlc3Ryb3k9ZnVuY3Rpb24oKXtvLm1hdHJpeCYmby5tYXRyaXguZGVzdHJveSYmby5tYXRyaXguZGVzdHJveSgpLG8ubWF0cml4T3B0aW9ucz1udWxsLG8uc2VsZWN0QmF0Y2g9bnVsbCxvLnVuc2VsZWN0QmF0Y2g9bnVsbCxvPW51bGx9KSxvLmRpcnR5fHxzLmV4dGVuZEZsYXQobyxhKSxvfSh0LGUpO3JldHVybiBBLm1hdHJpeHx8KEEubWF0cml4PSEwKSxBLm1hdHJpeE9wdGlvbnM9eCxBLnNlbGVjdGVkT3B0aW9ucz1wKGUsZS5zZWxlY3RlZCksQS51bnNlbGVjdGVkT3B0aW9ucz1wKGUsZS51bnNlbGVjdGVkKSxbe3g6ITEseTohMSx0Ont9LHRyYWNlOmV9XX0scGxvdDpmdW5jdGlvbih0LGUscil7aWYoci5sZW5ndGgpZm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspeSh0LHJbbl1bMF0pfSxob3ZlclBvaW50czpmdW5jdGlvbih0LGUscil7dmFyIG49dC5jZFswXS50cmFjZSxpPXQuc2NlbmUubWF0cml4T3B0aW9ucy5jZGF0YSxhPXQueGEsbz10LnlhLHM9YS5jMnAoZSksbD1vLmMycChyKSxjPXQuZGlzdGFuY2UsdT14KG4sYSksaD14KG4sbyk7aWYoITE9PT11fHwhMT09PWgpcmV0dXJuW3RdO2Zvcih2YXIgZixwLGQ9aVt1XSx2PWlbaF0sbT1jLHk9MDt5PGQubGVuZ3RoO3krKyl7dmFyIGI9ZFt5XSxfPXZbeV0sdz1hLmMycChiKS1zLGs9by5jMnAoXyktbCxBPU1hdGguc3FydCh3KncrayprKTtBPG0mJihtPXA9QSxmPXkpfXJldHVybiB0LmluZGV4PWYsdC5kaXN0YW5jZT1tLHQuZHh5PXAsdm9pZCAwPT09Zj9bdF06KGcodCxkLHYsbiksW3RdKX0sc2VsZWN0UG9pbnRzOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10LmNkLGE9blswXS50cmFjZSxvPW5bMF0udCxzPXQuc2NlbmUsbD1zLm1hdHJpeE9wdGlvbnMuY2RhdGEsdT10LnhheGlzLGg9dC55YXhpcyxmPVtdO2lmKCFzKXJldHVybiBmO3ZhciBwPSFjLmhhc01hcmtlcnMoYSkmJiFjLmhhc1RleHQoYSk7aWYoITAhPT1hLnZpc2libGV8fHApcmV0dXJuIGY7dmFyIGQ9eChhLHUpLGc9eChhLGgpO2lmKCExPT09ZHx8ITE9PT1nKXJldHVybiBmO3ZhciB2PW8ueHB4W2RdLG09by55cHhbZ10seT1sW2RdLGI9bFtnXSxfPW51bGwsdz1udWxsO2lmKCExPT09ZXx8ZS5kZWdlbmVyYXRlKXc9aShvLmNvdW50KTtlbHNlIGZvcihfPVtdLHc9W10scj0wO3I8eS5sZW5ndGg7cisrKWUuY29udGFpbnMoW3Zbcl0sbVtyXV0sbnVsbCxyLHQpPyhfLnB1c2gociksZi5wdXNoKHtwb2ludE51bWJlcjpyLHg6eVtyXSx5OmJbcl19KSk6dy5wdXNoKHIpO2lmKHMuc2VsZWN0QmF0Y2h8fChzLnNlbGVjdEJhdGNoPVtdLHMudW5zZWxlY3RCYXRjaD1bXSksIXMuc2VsZWN0QmF0Y2gpe2ZvcihyPTA7cjxzLmNvdW50O3IrKylzLnNlbGVjdEJhdGNoPVtdLHMudW5zZWxlY3RCYXRjaD1bXTtzLm1hdHJpeC51cGRhdGUocy51bnNlbGVjdGVkT3B0aW9ucyxzLnNlbGVjdGVkT3B0aW9ucyl9cmV0dXJuIHMuc2VsZWN0QmF0Y2g9XyxzLnVuc2VsZWN0QmF0Y2g9dyxmfSxlZGl0U3R5bGU6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnRyYWNlLG49dC5fZnVsbExheW91dC5fc3Bsb21TY2VuZXNbci51aWRdO2lmKG4pe2YodCxyKSxzLmV4dGVuZEZsYXQobi5tYXRyaXhPcHRpb25zLGQocikpO3ZhciBpPXMuZXh0ZW5kRmxhdCh7fSxuLm1hdHJpeE9wdGlvbnMsbi52aWV3T3B0cyk7bi5tYXRyaXgudXBkYXRlKGksbnVsbCl9fSxtZXRhOnt9fSxhLnJlZ2lzdGVyKG8pfSx7XCIuLi8uLi9jb21wb25lbnRzL2dyaWRcIjo2MjEsXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCI6NzUyLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9zY2F0dGVyL2NhbGNcIjoxMDUzLFwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGNcIjoxMDU1LFwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXJcIjoxMDcwLFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiOjEwNzYsXCIuLi9zY2F0dGVyZ2xcIjoxMTA1LFwiLi4vc2NhdHRlcmdsL2NvbnN0YW50c1wiOjExMDIsXCIuLi9zY2F0dGVyZ2wvY29udmVydFwiOjExMDMsXCIuL2F0dHJpYnV0ZXNcIjoxMTMwLFwiLi9iYXNlX3Bsb3RcIjoxMTMxLFwiLi9kZWZhdWx0c1wiOjExMzIsXCJhcnJheS1yYW5nZVwiOjU4LFwicmVnbC1zcGxvbVwiOjQ4Nn1dLDExMzQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLG89dChcIi4uL21lc2gzZC9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIiksbD10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LGM9e3g6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LHk6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LHo6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LHU6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHY6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHc6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHN0YXJ0czp7eDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0seTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sejp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LG1heGRpc3BsYXllZDp7dmFsVHlwZTpcImludGVnZXJcIixtaW46MCxkZmx0OjFlMyxlZGl0VHlwZTpcImNhbGNcIn0sc2l6ZXJlZjp7dmFsVHlwZTpcIm51bWJlclwiLGVkaXRUeXBlOlwiY2FsY1wiLG1pbjowLGRmbHQ6MX0sdGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcImNhbGNcIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwiY2FsY1wifSxob3ZlcnRlbXBsYXRlOmEoe2VkaXRUeXBlOlwiY2FsY1wifSx7a2V5czpbXCJ0dWJleFwiLFwidHViZXlcIixcInR1YmV6XCIsXCJ0dWJldVwiLFwidHViZXZcIixcInR1YmV3XCIsXCJub3JtXCIsXCJkaXZlcmdlbmNlXCJdfSl9O2woYyxuKFwiXCIse2NvbG9yQXR0cjpcInUvdi93IG5vcm1cIixzaG93U2NhbGVEZmx0OiEwLGVkaXRUeXBlT3ZlcnJpZGU6XCJjYWxjXCJ9KSx7Y29sb3JiYXI6aX0pO1tcIm9wYWNpdHlcIixcImxpZ2h0cG9zaXRpb25cIixcImxpZ2h0aW5nXCJdLmZvckVhY2goZnVuY3Rpb24odCl7Y1t0XT1vW3RdfSksYy5ob3ZlcmluZm89bCh7fSxzLmhvdmVyaW5mbyx7ZWRpdFR5cGU6XCJjYWxjXCIsZmxhZ3M6W1wieFwiLFwieVwiLFwielwiLFwidVwiLFwidlwiLFwid1wiLFwibm9ybVwiLFwiZGl2ZXJnZW5jZVwiLFwidGV4dFwiLFwibmFtZVwiXSxkZmx0OlwieCt5K3orbm9ybSt0ZXh0K25hbWVcIn0pLGMudHJhbnNmb3Jtcz12b2lkIDAsZS5leHBvcnRzPWN9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiOjc0NixcIi4uL21lc2gzZC9hdHRyaWJ1dGVzXCI6OTk0fV0sMTEzNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsY1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGEsbyxzPWUudSxsPWUudixjPWUudyx1PWUueCxoPWUueSxmPWUueixwPU1hdGgubWluKHUubGVuZ3RoLGgubGVuZ3RoLGYubGVuZ3RoLHMubGVuZ3RoLGwubGVuZ3RoLGMubGVuZ3RoKSxkPTA7ZS5zdGFydHMmJihpPWUuc3RhcnRzLnh8fFtdLGE9ZS5zdGFydHMueXx8W10sbz1lLnN0YXJ0cy56fHxbXSxkPU1hdGgubWluKGkubGVuZ3RoLGEubGVuZ3RoLG8ubGVuZ3RoKSk7dmFyIGc9MCx2PTEvMDtmb3Iocj0wO3I8cDtyKyspe3ZhciBtPXNbcl0seT1sW3JdLHg9Y1tyXSxiPU1hdGguc3FydChtKm0reSp5K3gqeCk7Zz1NYXRoLm1heChnLGIpLHY9TWF0aC5taW4odixiKX1uKHQsZSx7dmFsczpbdixnXSxjb250YWluZXJTdHI6XCJcIixjTGV0dGVyOlwiY1wifSk7dmFyIF89LTEvMCx3PTEvMCxrPS0xLzAsQT0xLzAsVD0tMS8wLE09MS8wO2ZvcihyPTA7cjxwO3IrKyl7dmFyIFM9dVtyXTtfPU1hdGgubWF4KF8sUyksdz1NYXRoLm1pbih3LFMpO3ZhciBFPWhbcl07az1NYXRoLm1heChrLEUpLEE9TWF0aC5taW4oQSxFKTt2YXIgQz1mW3JdO1Q9TWF0aC5tYXgoVCxDKSxNPU1hdGgubWluKE0sQyl9Zm9yKHI9MDtyPGQ7cisrKXt2YXIgTD1pW3JdO189TWF0aC5tYXgoXyxMKSx3PU1hdGgubWluKHcsTCk7dmFyIHo9YVtyXTtrPU1hdGgubWF4KGsseiksQT1NYXRoLm1pbihBLHopO3ZhciBPPW9bcl07VD1NYXRoLm1heChULE8pLE09TWF0aC5taW4oTSxPKX1lLl9sZW49cCxlLl9zbGVuPWQsZS5fbm9ybU1heD1nLGUuX3hibmRzPVt3LF9dLGUuX3libmRzPVtBLGtdLGUuX3pibmRzPVtNLFRdfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIjo1ODZ9XSwxMTM2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsLXN0cmVhbXR1YmUzZFwiKSxpPW4uY3JlYXRlVHViZU1lc2gsYT10KFwiLi4vLi4vbGliXCIpLG89dChcIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3JcIikucGFyc2VDb2xvclNjYWxlLHM9dChcIi4uLy4uL3Bsb3RzL2dsM2QvemlwM1wiKSxsPXt4YXhpczowLHlheGlzOjEsemF4aXM6Mn07ZnVuY3Rpb24gYyh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMubWVzaD1udWxsLHRoaXMuZGF0YT1udWxsfXZhciB1PWMucHJvdG90eXBlO2Z1bmN0aW9uIGgodCl7cmV0dXJuIGEuZGlzdGluY3RWYWxzKHQpLnZhbHN9ZnVuY3Rpb24gZih0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZT4yP3Quc2xpY2UoMSxlLTEpOjI9PT1lP1sodFswXSt0WzFdKS8yXTp0fWZ1bmN0aW9uIHAodCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIDE9PT1lP1suNSwuNV06W3RbMV0tdFswXSx0W2UtMV0tdFtlLTJdXX1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9dC5mdWxsU2NlbmVMYXlvdXQsaT10LmRhdGFTY2FsZSxjPWUuX2xlbix1PXt9O2Z1bmN0aW9uIGQodCxlKXt2YXIgbj1yW2VdLG89aVtsW2VdXTtyZXR1cm4gYS5zaW1wbGVNYXAodCxmdW5jdGlvbih0KXtyZXR1cm4gbi5kMmwodCkqb30pfXUudmVjdG9ycz1zKGQoZS51LFwieGF4aXNcIiksZChlLnYsXCJ5YXhpc1wiKSxkKGUudyxcInpheGlzXCIpLGMpO3ZhciBnPWgoZS54LnNsaWNlKDAsYykpLHY9aChlLnkuc2xpY2UoMCxjKSksbT1oKGUuei5zbGljZSgwLGMpKTtpZihnLmxlbmd0aCp2Lmxlbmd0aCptLmxlbmd0aD5jKXJldHVybntwb3NpdGlvbnM6W10sY2VsbHM6W119O3ZhciB5PWQoZyxcInhheGlzXCIpLHg9ZCh2LFwieWF4aXNcIiksYj1kKG0sXCJ6YXhpc1wiKTtpZih1Lm1lc2hncmlkPVt5LHgsYl0sZS5zdGFydHMpe3ZhciBfPWUuX3NsZW47dS5zdGFydGluZ1Bvc2l0aW9ucz1zKGQoZS5zdGFydHMueC5zbGljZSgwLF8pLFwieGF4aXNcIiksZChlLnN0YXJ0cy55LnNsaWNlKDAsXyksXCJ5YXhpc1wiKSxkKGUuc3RhcnRzLnouc2xpY2UoMCxfKSxcInpheGlzXCIpKX1lbHNle2Zvcih2YXIgdz14WzBdLGs9Zih5KSxBPWYoYiksVD1uZXcgQXJyYXkoay5sZW5ndGgqQS5sZW5ndGgpLE09MCxTPTA7UzxrLmxlbmd0aDtTKyspZm9yKHZhciBFPTA7RTxBLmxlbmd0aDtFKyspVFtNKytdPVtrW1NdLHcsQVtFXV07dS5zdGFydGluZ1Bvc2l0aW9ucz1UfXUuY29sb3JtYXA9byhlKSx1LnR1YmVTaXplPWUuc2l6ZXJlZix1Lm1heExlbmd0aD1lLm1heGRpc3BsYXllZDt2YXIgQz1kKGUuX3hibmRzLFwieGF4aXNcIiksTD1kKGUuX3libmRzLFwieWF4aXNcIiksej1kKGUuX3pibmRzLFwiemF4aXNcIiksTz1wKHkpLEk9cCh4KSxEPXAoYiksUD1bW0NbMF0tT1swXSxMWzBdLUlbMF0selswXS1EWzBdXSxbQ1sxXStPWzFdLExbMV0rSVsxXSx6WzFdK0RbMV1dXSxSPW4odSxQKTtSLnZlcnRleEludGVuc2l0eUJvdW5kcz1bZS5jbWluL2UuX25vcm1NYXgsZS5jbWF4L2UuX25vcm1NYXhdO3ZhciBGPWUubGlnaHRwb3NpdGlvbjtyZXR1cm4gUi5saWdodFBvc2l0aW9uPVtGLngsRi55LEYuel0sUi5hbWJpZW50PWUubGlnaHRpbmcuYW1iaWVudCxSLmRpZmZ1c2U9ZS5saWdodGluZy5kaWZmdXNlLFIuc3BlY3VsYXI9ZS5saWdodGluZy5zcGVjdWxhcixSLnJvdWdobmVzcz1lLmxpZ2h0aW5nLnJvdWdobmVzcyxSLmZyZXNuZWw9ZS5saWdodGluZy5mcmVzbmVsLFIub3BhY2l0eT1lLm9wYWNpdHksZS5fcGFkPVIudHViZVNjYWxlKmUuc2l6ZXJlZioyLFJ9dS5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUuZnVsbFNjZW5lTGF5b3V0LHI9dGhpcy5zY2VuZS5kYXRhU2NhbGU7ZnVuY3Rpb24gbih0LG4pe3ZhciBpPWVbbl0sYT1yW2xbbl1dO3JldHVybiBpLmwyYyh0KS9hfWlmKHQub2JqZWN0PT09dGhpcy5tZXNoKXt2YXIgaT10LmRhdGEucG9zaXRpb24sYT10LmRhdGEudmVsb2NpdHk7cmV0dXJuIHQudHJhY2VDb29yZGluYXRlPVtuKGlbMF0sXCJ4YXhpc1wiKSxuKGlbMV0sXCJ5YXhpc1wiKSxuKGlbMl0sXCJ6YXhpc1wiKSxuKGFbMF0sXCJ4YXhpc1wiKSxuKGFbMV0sXCJ5YXhpc1wiKSxuKGFbMl0sXCJ6YXhpc1wiKSx0LmRhdGEuaW50ZW5zaXR5KnRoaXMuZGF0YS5fbm9ybU1heCx0LmRhdGEuZGl2ZXJnZW5jZV0sdC50ZXh0TGFiZWw9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQsITB9fSx1LnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLmRhdGE9dDt2YXIgZT1kKHRoaXMuc2NlbmUsdCk7dGhpcy5tZXNoLnVwZGF0ZShlKX0sdS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubWVzaCksdGhpcy5tZXNoLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsbj1kKHQsZSksYT1pKHIsbiksbz1uZXcgYyh0LGUudWlkKTtyZXR1cm4gby5tZXNoPWEsby5kYXRhPWUsYS5fdHJhY2U9byx0LmdscGxvdC5hZGQoYSksb319LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3JcIjo2OTgsXCIuLi8uLi9wbG90cy9nbDNkL3ppcDNcIjo4MDAsXCJnbC1zdHJlYW10dWJlM2RcIjozMTB9XSwxMTM3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIiksYT10KFwiLi9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIGw9cyhcInVcIiksYz1zKFwidlwiKSx1PXMoXCJ3XCIpLGg9cyhcInhcIiksZj1zKFwieVwiKSxwPXMoXCJ6XCIpO2wmJmwubGVuZ3RoJiZjJiZjLmxlbmd0aCYmdSYmdS5sZW5ndGgmJmgmJmgubGVuZ3RoJiZmJiZmLmxlbmd0aCYmcCYmcC5sZW5ndGg/KHMoXCJzdGFydHMueFwiKSxzKFwic3RhcnRzLnlcIikscyhcInN0YXJ0cy56XCIpLHMoXCJtYXhkaXNwbGF5ZWRcIikscyhcInNpemVyZWZcIikscyhcImxpZ2h0aW5nLmFtYmllbnRcIikscyhcImxpZ2h0aW5nLmRpZmZ1c2VcIikscyhcImxpZ2h0aW5nLnNwZWN1bGFyXCIpLHMoXCJsaWdodGluZy5yb3VnaG5lc3NcIikscyhcImxpZ2h0aW5nLmZyZXNuZWxcIikscyhcImxpZ2h0cG9zaXRpb24ueFwiKSxzKFwibGlnaHRwb3NpdGlvbi55XCIpLHMoXCJsaWdodHBvc2l0aW9uLnpcIiksaSh0LGUsbyxzLHtwcmVmaXg6XCJcIixjTGV0dGVyOlwiY1wifSkscyhcInRleHRcIikscyhcImhvdmVydGV4dFwiKSxzKFwiaG92ZXJ0ZW1wbGF0ZVwiKSxlLl9sZW5ndGg9bnVsbCk6ZS52aXNpYmxlPSExfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCI6NTg4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi9hdHRyaWJ1dGVzXCI6MTEzNH1dLDExMzg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6XCJ0cmFjZVwiLG5hbWU6XCJzdHJlYW10dWJlXCIsYmFzZVBsb3RNb2R1bGU6dChcIi4uLy4uL3Bsb3RzL2dsM2RcIiksY2F0ZWdvcmllczpbXCJnbDNkXCJdLGF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxzdXBwbHlEZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxjb2xvcmJhcjp7bWluOlwiY21pblwiLG1heDpcImNtYXhcIn0sY2FsYzp0KFwiLi9jYWxjXCIpLHBsb3Q6dChcIi4vY29udmVydFwiKSxldmVudERhdGE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50dWJleD10LngsdC50dWJleT10LnksdC50dWJlej10LnosdC50dWJldT1lLnRyYWNlQ29vcmRpbmF0ZVszXSx0LnR1YmV2PWUudHJhY2VDb29yZGluYXRlWzRdLHQudHViZXc9ZS50cmFjZUNvb3JkaW5hdGVbNV0sdC5ub3JtPWUudHJhY2VDb29yZGluYXRlWzZdLHQuZGl2ZXJnZW5jZT1lLnRyYWNlQ29vcmRpbmF0ZVs3XSxkZWxldGUgdC54LGRlbGV0ZSB0LnksZGVsZXRlIHQueix0fSxtZXRhOnt9fX0se1wiLi4vLi4vcGxvdHMvZ2wzZFwiOjc4OSxcIi4vYXR0cmlidXRlc1wiOjExMzQsXCIuL2NhbGNcIjoxMTM1LFwiLi9jb252ZXJ0XCI6MTEzNixcIi4vZGVmYXVsdHNcIjoxMTM3fV0sMTEzOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2RvbWFpblwiKS5hdHRyaWJ1dGVzLG89dChcIi4uL3BpZS9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2xhYmVsczp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0scGFyZW50czp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sdmFsdWVzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxicmFuY2h2YWx1ZXM6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInJlbWFpbmRlclwiLFwidG90YWxcIl0sZGZsdDpcInJlbWFpbmRlclwiLGVkaXRUeXBlOlwiY2FsY1wifSxsZXZlbDp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwicGxvdFwifSxtYXhkZXB0aDp7dmFsVHlwZTpcImludGVnZXJcIixlZGl0VHlwZTpcInBsb3RcIixkZmx0Oi0xfSxtYXJrZXI6e2NvbG9yczp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sbGluZTp7Y29sb3I6cyh7fSxvLm1hcmtlci5saW5lLmNvbG9yLHtkZmx0Om51bGx9KSx3aWR0aDpzKHt9LG8ubWFya2VyLmxpbmUud2lkdGgse2RmbHQ6MX0pLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0sbGVhZjp7b3BhY2l0eTp7dmFsVHlwZTpcIm51bWJlclwiLGVkaXRUeXBlOlwic3R5bGVcIixtaW46MCxtYXg6MSxkZmx0Oi43fSxlZGl0VHlwZTpcInBsb3RcIn0sdGV4dDpvLnRleHQsdGV4dGluZm86cyh7fSxvLnRleHRpbmZvLHtlZGl0VHlwZTpcInBsb3RcIixmbGFnczpbXCJsYWJlbFwiLFwidGV4dFwiLFwidmFsdWVcIl19KSx0ZXh0Zm9udDpvLnRleHRmb250LGhvdmVydGV4dDpvLmhvdmVydGV4dCxob3ZlcmluZm86cyh7fSxuLmhvdmVyaW5mbyx7ZmxhZ3M6W1wibGFiZWxcIixcInRleHRcIixcInZhbHVlXCIsXCJuYW1lXCJdfSksaG92ZXJ0ZW1wbGF0ZTppKCksaW5zaWRldGV4dGZvbnQ6by5pbnNpZGV0ZXh0Zm9udCxvdXRzaWRldGV4dGZvbnQ6by5vdXRzaWRldGV4dGZvbnQsZG9tYWluOmEoe25hbWU6XCJzdW5idXJzdFwiLHRyYWNlOiEwLGVkaXRUeXBlOlwiY2FsY1wifSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi4vLi4vcGxvdHMvZG9tYWluXCI6Nzc0LFwiLi4vcGllL2F0dHJpYnV0ZXNcIjoxMDI2fV0sMTE0MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxpPXQoXCIuLi8uLi9wbG90cy9nZXRfZGF0YVwiKS5nZXRNb2R1bGVDYWxjRGF0YSxhPXIubmFtZT1cInN1bmJ1cnN0XCI7ci5wbG90PWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzPW4uZ2V0TW9kdWxlKGEpLGw9aSh0LmNhbGNkYXRhLHMpWzBdO3MucGxvdCh0LGwscixvKX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLl9oYXMmJm4uX2hhcyhhKSxvPWUuX2hhcyYmZS5faGFzKGEpO2kmJiFvJiZuLl9zdW5idXJzdGxheWVyLnNlbGVjdEFsbChcImcudHJhY2VcIikucmVtb3ZlKCl9fSx7XCIuLi8uLi9wbG90cy9nZXRfZGF0YVwiOjc4NCxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5fV0sMTE0MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkMy1oaWVyYXJjaHlcIiksaT10KFwiZmFzdC1pc251bWVyaWNcIiksYT10KFwiLi4vLi4vbGliXCIpLG89dChcIi4uL3BpZS9jYWxjXCIpLm1ha2VQdWxsQ29sb3JGbixzPXQoXCIuLi9waWUvY2FsY1wiKS5nZW5lcmF0ZUV4dGVuZGVkQ29sb3JzLGw9YS5pc0FycmF5T3JUeXBlZEFycmF5LGM9e307ci5jYWxjPWZ1bmN0aW9uKHQsZSl7dmFyIHIscyxjLHUsaCxmLHA9dC5fZnVsbExheW91dCxkPWUuaWRzLGc9bChkKSx2PWUubGFiZWxzLG09ZS5wYXJlbnRzLHk9ZS52YWx1ZXMseD1sKHkpLGI9W10sXz17fSx3PXt9LGs9ZnVuY3Rpb24odCl7cmV0dXJuIXh8fGkoeVt0XSkmJnlbdF0+PTB9O2c/KHI9TWF0aC5taW4oZC5sZW5ndGgsbS5sZW5ndGgpLHM9ZnVuY3Rpb24odCl7cmV0dXJuIGRbdF0mJmsodCl9LGM9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyhkW3RdKX0pOihyPU1hdGgubWluKHYubGVuZ3RoLG0ubGVuZ3RoKSxzPWZ1bmN0aW9uKHQpe3JldHVybiB2W3RdJiZrKHQpfSxjPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcodlt0XSl9KSx4JiYocj1NYXRoLm1pbihyLHkubGVuZ3RoKSk7Zm9yKHZhciBBPTA7QTxyO0ErKylpZihzKEEpKXt2YXIgVD1jKEEpLE09bVtBXT9TdHJpbmcobVtBXSk6XCJcIixTPXtpOkEsaWQ6VCxwaWQ6TSxsYWJlbDp2W0FdP1N0cmluZyh2W0FdKTpcIlwifTt4JiYoUy52PSt5W0FdKSxiLnB1c2goUyksaD1ULF9bdT1NXT9fW3VdLnB1c2goaCk6X1t1XT1baF0sd1toXT0xfWlmKF9bXCJcIl0pe2lmKF9bXCJcIl0ubGVuZ3RoPjEpe2Zvcih2YXIgRT1hLnJhbmRzdHIoKSxDPTA7QzxiLmxlbmd0aDtDKyspXCJcIj09PWJbQ10ucGlkJiYoYltDXS5waWQ9RSk7Yi51bnNoaWZ0KHtoYXNNdWx0aXBsZVJvb3RzOiEwLGlkOkUscGlkOlwiXCJ9KX19ZWxzZXt2YXIgTCx6PVtdO2ZvcihMIGluIF8pd1tMXXx8ei5wdXNoKEwpO2lmKDEhPT16Lmxlbmd0aClyZXR1cm4gYS53YXJuKFwiTXVsdGlwbGUgaW1wbGllZCByb290cywgY2Fubm90IGJ1aWxkIHN1bmJ1cnN0IGhpZXJhcmNoeS5cIik7TD16WzBdLGIudW5zaGlmdCh7aWQ6TCxwaWQ6XCJcIixsYWJlbDpMfSl9dHJ5e2Y9bi5zdHJhdGlmeSgpLmlkKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkucGFyZW50SWQoZnVuY3Rpb24odCl7cmV0dXJuIHQucGlkfSkoYil9Y2F0Y2godCl7cmV0dXJuIGEud2FybihcIkZhaWxlZCB0byBidWlsZCBzdW5idXJzdCBoaWVyYXJjaHkuIEVycm9yOiBcIit0Lm1lc3NhZ2UpfXZhciBPPW4uaGllcmFyY2h5KGYpLEk9ITE7aWYoeClzd2l0Y2goZS5icmFuY2h2YWx1ZXMpe2Nhc2VcInJlbWFpbmRlclwiOk8uc3VtKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRhdGEudn0pO2JyZWFrO2Nhc2VcInRvdGFsXCI6Ty5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZGF0YS5kYXRhLnY7aWYodC5jaGlsZHJlbiYmZTx0LmNoaWxkcmVuLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0K2UuZGF0YS5kYXRhLnZ9LDApKXJldHVybiBJPSEwLGEud2FybihbXCJUb3RhbCB2YWx1ZSBmb3Igbm9kZVwiLHQuZGF0YS5kYXRhLmlkLFwiaXMgc21hbGxlciB0aGFuIHRoZSBzdW0gb2YgaXRzIGNoaWxkcmVuLlwiXS5qb2luKFwiIFwiKSk7dC52YWx1ZT1lfSl9ZWxzZSBPLmNvdW50KCk7aWYoIUkpe08uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBlLnZhbHVlLXQudmFsdWV9KTt2YXIgRD1lLm1hcmtlci5jb2xvcnN8fFtdLFA9byhwLl9zdW5idXJzdGNvbG9ybWFwKTtyZXR1cm4gTy5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZGF0YS5kYXRhLHI9ZS5pZDtlLmNvbG9yPVAoRFtlLmldLHIpfSksYlswXS5oaWVyYXJjaHk9TyxifX0sci5jcm9zc1RyYWNlQ2FsYz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxuPWUuc3VuYnVyc3Rjb2xvcndheSxpPWUuX3N1bmJ1cnN0Y29sb3JtYXA7ZS5leHRlbmRzdW5idXJzdGNvbG9ycyYmKG49cyhuLGMpKTt2YXIgYT0wO2Z1bmN0aW9uIG8odCl7dmFyIGU9dC5kYXRhLmRhdGEscj1lLmlkOyExPT09ZS5jb2xvciYmKGlbcl0/ZS5jb2xvcj1pW3JdOnQucGFyZW50P3QucGFyZW50LnBhcmVudD9lLmNvbG9yPXQucGFyZW50LmRhdGEuZGF0YS5jb2xvcjooaVtyXT1lLmNvbG9yPW5bYSVuLmxlbmd0aF0sYSsrKTplLmNvbG9yPVwicmdiYSgwLDAsMCwwKVwiKX1mb3IodmFyIGw9MDtsPHIubGVuZ3RoO2wrKyl7dmFyIHU9cltsXVswXTtcInN1bmJ1cnN0XCI9PT11LnRyYWNlLnR5cGUmJnUuaGllcmFyY2h5JiZ1LmhpZXJhcmNoeS5lYWNoKG8pfX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL3BpZS9jYWxjXCI6MTAyOCxcImQzLWhpZXJhcmNoeVwiOjE0OCxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sMTE0MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17Q0xJQ0tfVFJBTlNJVElPTl9USU1FOjc1MCxDTElDS19UUkFOU0lUSU9OX0VBU0lORzpcImxpbmVhclwifX0se31dLDExNDM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9wbG90cy9kb21haW5cIikuZGVmYXVsdHMsbz1uLmNvZXJjZUZvbnQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX12YXIgYz1sKFwibGFiZWxzXCIpLHU9bChcInBhcmVudHNcIik7aWYoYyYmYy5sZW5ndGgmJnUmJnUubGVuZ3RoKXt2YXIgaD1sKFwidmFsdWVzXCIpO2gmJmgubGVuZ3RoJiZsKFwiYnJhbmNodmFsdWVzXCIpLGwoXCJsZXZlbFwiKSxsKFwibWF4ZGVwdGhcIiksbChcIm1hcmtlci5saW5lLndpZHRoXCIpJiZsKFwibWFya2VyLmxpbmUuY29sb3JcIixzLnBhcGVyX2JnY29sb3IpLGwoXCJtYXJrZXIuY29sb3JzXCIpLGwoXCJsZWFmLm9wYWNpdHlcIik7dmFyIGY9bChcInRleHRcIik7bChcInRleHRpbmZvXCIsQXJyYXkuaXNBcnJheShmKT9cInRleHQrbGFiZWxcIjpcImxhYmVsXCIpLGwoXCJob3ZlcnRleHRcIiksbChcImhvdmVydGVtcGxhdGVcIik7dmFyIHA9byhsLFwidGV4dGZvbnRcIixzLmZvbnQpLGQ9bi5leHRlbmRGbGF0KHt9LHApOyEodC50ZXh0Zm9udCYmdC50ZXh0Zm9udC5jb2xvcikmJmRlbGV0ZSBkLmNvbG9yLG8obCxcImluc2lkZXRleHRmb250XCIsZCksbyhsLFwib3V0c2lkZXRleHRmb250XCIscCksYShlLHMsbCksZS5fbGVuZ3RoPW51bGx9ZWxzZSBlLnZpc2libGU9ITF9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9kb21haW5cIjo3NzQsXCIuL2F0dHJpYnV0ZXNcIjoxMTM5fV0sMTE0NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17bW9kdWxlVHlwZTpcInRyYWNlXCIsbmFtZTpcInN1bmJ1cnN0XCIsYmFzZVBsb3RNb2R1bGU6dChcIi4vYmFzZV9wbG90XCIpLGNhdGVnb3JpZXM6W10sYW5pbWF0YWJsZTohMCxhdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksbGF5b3V0QXR0cmlidXRlczp0KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxzdXBwbHlEZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KFwiLi9sYXlvdXRfZGVmYXVsdHNcIiksY2FsYzp0KFwiLi9jYWxjXCIpLmNhbGMsY3Jvc3NUcmFjZUNhbGM6dChcIi4vY2FsY1wiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OnQoXCIuL3Bsb3RcIiksc3R5bGU6dChcIi4vc3R5bGVcIikuc3R5bGUsbWV0YTp7fX19LHtcIi4vYXR0cmlidXRlc1wiOjExMzksXCIuL2Jhc2VfcGxvdFwiOjExNDAsXCIuL2NhbGNcIjoxMTQxLFwiLi9kZWZhdWx0c1wiOjExNDMsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6MTE0NSxcIi4vbGF5b3V0X2RlZmF1bHRzXCI6MTE0NixcIi4vcGxvdFwiOjExNDcsXCIuL3N0eWxlXCI6MTE0OH1dLDExNDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e3N1bmJ1cnN0Y29sb3J3YXk6e3ZhbFR5cGU6XCJjb2xvcmxpc3RcIixlZGl0VHlwZTpcImNhbGNcIn0sZXh0ZW5kc3VuYnVyc3Rjb2xvcnM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcImNhbGNcIn19fSx7fV0sMTE0NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9cihcInN1bmJ1cnN0Y29sb3J3YXlcIixlLmNvbG9yd2F5KSxyKFwiZXh0ZW5kc3VuYnVyc3Rjb2xvcnNcIil9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6MTE0NX1dLDExNDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiZDMtaGllcmFyY2h5XCIpLGE9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIikscz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxsPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksYz10KFwiLi4vLi4vbGliXCIpLHU9dChcIi4uLy4uL2xpYi9ldmVudHNcIiksaD10KFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCIpLGY9dChcIi4uLy4uL2xpYi9zZXRjdXJzb3JcIikscD10KFwiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzXCIpLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSxkPXQoXCIuLi9waWUvcGxvdFwiKS50cmFuc2Zvcm1JbnNpZGVUZXh0LGc9dChcIi4uL3BpZS9oZWxwZXJzXCIpLmZvcm1hdFBpZVZhbHVlLHY9dChcIi4vc3R5bGVcIikuc3R5bGVPbmUsbT10KFwiLi9jb25zdGFudHNcIik7ZnVuY3Rpb24geSh0LGUscixhKXt2YXIgbz10Ll9mdWxsTGF5b3V0LHU9YSYmYS5kdXJhdGlvbj4wLGY9bi5zZWxlY3Qocikuc2VsZWN0QWxsKFwiZy5zbGljZVwiKSxwPWVbMF0sbT1wLnRyYWNlLHk9eChwLmhpZXJhcmNoeSxtLmxldmVsKSx3PW0ubWF4ZGVwdGg+PTA/bS5tYXhkZXB0aDoxLzAsTT1vLl9zaXplLFM9bS5kb21haW4sRT1NLncqKFMueFsxXS1TLnhbMF0pLEM9TS5oKihTLnlbMV0tUy55WzBdKSxMPS41Kk1hdGgubWluKEUsQyksej1wLmN4PU0ubCtNLncqKFMueFsxXStTLnhbMF0pLzIsTz1wLmN5PU0udCtNLmgqKDEtUy55WzBdKS1DLzI7aWYoIXkpcmV0dXJuIGYucmVtb3ZlKCk7dmFyIEk9bnVsbCxEPXt9O3UmJmYuZWFjaChmdW5jdGlvbih0KXtEW2sodCldPXtycHgwOnQucnB4MCxycHgxOnQucnB4MSx4MDp0LngwLHgxOnQueDEsdHJhbnNmb3JtOnQudHJhbnNmb3JtfSwhSSYmXyh0KSYmKEk9dCl9KTt2YXIgUD1mdW5jdGlvbih0KXtyZXR1cm4gaS5wYXJ0aXRpb24oKS5zaXplKFsyKk1hdGguUEksdC5oZWlnaHQrMV0pKHQpfSh5KS5kZXNjZW5kYW50cygpLFI9eS5oZWlnaHQrMSxGPTAsQj13O3AuaGFzTXVsdGlwbGVSb290cyYmYih5KSYmKFA9UC5zbGljZSgxKSxSLT0xLEY9MSxCKz0xKSxQPVAuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnkxPD1CfSk7dmFyIE49TWF0aC5taW4oUix3KSxqPWZ1bmN0aW9uKHQpe3JldHVybih0LUYpL04qTH0sVj1mdW5jdGlvbih0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpLC10Kk1hdGguc2luKGUpXX0sVT1mdW5jdGlvbih0KXtyZXR1cm4gYy5wYXRoQW5udWx1cyh0LnJweDAsdC5ycHgxLHQueDAsdC54MSx6LE8pfSxxPWZ1bmN0aW9uKHQpe3JldHVybiB6K3QucHhtaWRbMF0qdC50cmFuc2Zvcm0uckNlbnRlcisodC50cmFuc2Zvcm0ueHx8MCl9LEg9ZnVuY3Rpb24odCl7cmV0dXJuIE8rdC5weG1pZFsxXSp0LnRyYW5zZm9ybS5yQ2VudGVyKyh0LnRyYW5zZm9ybS55fHwwKX07KGY9Zi5kYXRhKFAsZnVuY3Rpb24odCl7cmV0dXJuIGsodCl9KSkuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJzbGljZVwiLCEwKSx1P2YuZXhpdCgpLnRyYW5zaXRpb24oKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7dC5zZWxlY3QoXCJwYXRoLnN1cmZhY2VcIikudHJhbnNpdGlvbigpLmF0dHJUd2VlbihcImRcIixmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZSxyPWsodCksaT1EW3JdLGE9RFtrKHkpXTtpZihhKXt2YXIgbz10LngxPmEueDE/MipNYXRoLlBJOjA7ZT10LnJweDE8YS5ycHgxP3tycHgwOjAscnB4MTowfTp7eDA6byx4MTpvfX1lbHNle3ZhciBzLGw9ayh0LnBhcmVudCk7Zi5lYWNoKGZ1bmN0aW9uKHQpe2lmKGsodCk9PT1sKXJldHVybiBzPXR9KTt2YXIgYyx1PXMuY2hpbGRyZW47dS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7aWYoayh0KT09PXIpcmV0dXJuIGM9ZX0pO3ZhciBoPXUubGVuZ3RoLHA9bi5pbnRlcnBvbGF0ZShzLngwLHMueDEpO2U9e3JweDA6TCxycHgxOkwseDA6cChjL2gpLHgxOnAoKGMrMSkvaCl9fXJldHVybiBuLmludGVycG9sYXRlKGksZSl9KHQpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gVShlKHQpKX19KSx0LnNlbGVjdChcImcuc2xpY2V0ZXh0XCIpLmF0dHIoXCJvcGFjaXR5XCIsMCl9KS5yZW1vdmUoKTpmLmV4aXQoKS5yZW1vdmUoKSxmLm9yZGVyKCk7dmFyIEc9bnVsbDtpZih1JiZJKXt2YXIgWT1rKEkpO2YuZWFjaChmdW5jdGlvbih0KXtudWxsPT09RyYmayh0KT09PVkmJihHPXQueDEpfSl9dmFyIFc9ZjtmdW5jdGlvbiBYKHQpe3ZhciBlPXQucGFyZW50LHI9RFtrKGUpXSxpPXt9O2lmKHIpe3ZhciBhPWUuY2hpbGRyZW4sbz1hLmluZGV4T2YodCkscz1hLmxlbmd0aCxsPW4uaW50ZXJwb2xhdGUoci54MCxyLngxKTtpLngwPWwoby9zKSxpLngxPWwoby9zKX1lbHNlIGkueDA9aS54MT0wO3JldHVybiBpfXUmJihXPVcudHJhbnNpdGlvbigpLmVhY2goXCJlbmRcIixmdW5jdGlvbigpe0Eobi5zZWxlY3QodGhpcyksdCx7aXNUcmFuc2l0aW9uaW5nOiExfSl9KSksVy5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLGE9Yy5lbnN1cmVTaW5nbGUoaSxcInBhdGhcIixcInN1cmZhY2VcIixmdW5jdGlvbih0KXt0LnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixcImFsbFwiKX0pO3IucnB4MD1qKHIueTApLHIucnB4MT1qKHIueTEpLHIueG1pZD0oci54MCtyLngxKS8yLHIucHhtaWQ9VihyLnJweDEsci54bWlkKSxyLm1pZGFuZ2xlPS0oci54bWlkLU1hdGguUEkvMiksci5oYWxmYW5nbGU9LjUqTWF0aC5taW4oYy5hbmdsZURlbHRhKHIueDAsci54MSl8fE1hdGguUEksTWF0aC5QSSksci5yaW5nPTEtci5ycHgwL3IucnB4MSxyLnJJbnNjcmliZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10LnJweDAmJnQueG1pZD09PU1hdGguUEk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEvKDErMS9NYXRoLnNpbih0LmhhbGZhbmdsZSkpLHQucmluZy8yKSl9KHIpLHU/YS50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKFwiZFwiLGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9RFtrKHQpXSxpPXt4MDp0LngwLHgxOnQueDEscnB4MDp0LnJweDAscnB4MTp0LnJweDF9O2lmKHIpZT1yO2Vsc2UgaWYoSSlpZih0LnBhcmVudClpZihHKXt2YXIgYT10LngxPkc/MipNYXRoLlBJOjA7ZT17eDA6YSx4MTphfX1lbHNlIGU9e3JweDA6TCxycHgxOkx9LGMuZXh0ZW5kRmxhdChlLFgodCkpO2Vsc2UgZT17cnB4MDowLHJweDE6MH07ZWxzZSBlPXt4MDowLHgxOjB9O3JldHVybiBuLmludGVycG9sYXRlKGUsaSl9KHQpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gVShlKHQpKX19KTphLmF0dHIoXCJkXCIsVSksaS5jYWxsKFQsdCxlKS5jYWxsKEEsdCx7aXNUcmFuc2l0aW9uaW5nOnQuX3RyYW5zaXRpb25pbmd9KSxhLmNhbGwodixyLG0pO3ZhciBmPWMuZW5zdXJlU2luZ2xlKGksXCJnXCIsXCJzbGljZXRleHRcIikseT1jLmVuc3VyZVNpbmdsZShmLFwidGV4dFwiLFwiXCIsZnVuY3Rpb24odCl7dC5hdHRyKFwiZGF0YS1ub3RleFwiLDEpfSk7eS50ZXh0KGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLnRleHRpbmZvO2lmKCFufHxcIm5vbmVcIj09PW4pcmV0dXJuXCJcIjt2YXIgaT10LmRhdGEuZGF0YSxhPXIuc2VwYXJhdG9ycyxvPW4uc3BsaXQoXCIrXCIpLHM9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1vLmluZGV4T2YodCl9LGw9W107cyhcImxhYmVsXCIpJiZpLmxhYmVsJiZsLnB1c2goaS5sYWJlbCk7aS5oYXNPd25Qcm9wZXJ0eShcInZcIikmJnMoXCJ2YWx1ZVwiKSYmbC5wdXNoKGcoaS52LGEpKTtpZihzKFwidGV4dFwiKSl7dmFyIHU9Yy5jYXN0T3B0aW9uKGUsaS5pLFwidGV4dFwiKTt1JiZsLnB1c2godSl9cmV0dXJuIGwuam9pbihcIjxicj5cIil9KHIsbSxvKSkuY2xhc3NlZChcInNsaWNldGV4dFwiLCEwKS5hdHRyKFwidGV4dC1hbmNob3JcIixcIm1pZGRsZVwiKS5jYWxsKGwuZm9udCxiKHIpP2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLmRhdGEuZGF0YS5pLGk9Yy5jYXN0T3B0aW9uKHQsbixcIm91dHNpZGV0ZXh0Zm9udC5jb2xvclwiKXx8Yy5jYXN0T3B0aW9uKHQsbixcInRleHRmb250LmNvbG9yXCIpfHxyLmNvbG9yLGE9Yy5jYXN0T3B0aW9uKHQsbixcIm91dHNpZGV0ZXh0Zm9udC5mYW1pbHlcIil8fGMuY2FzdE9wdGlvbih0LG4sXCJ0ZXh0Zm9udC5mYW1pbHlcIil8fHIuZmFtaWx5LG89Yy5jYXN0T3B0aW9uKHQsbixcIm91dHNpZGV0ZXh0Zm9udC5zaXplXCIpfHxjLmNhc3RPcHRpb24odCxuLFwidGV4dGZvbnQuc2l6ZVwiKXx8ci5zaXplO3JldHVybntjb2xvcjppLGZhbWlseTphLHNpemU6b319KG0scixvLmZvbnQpOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLmRhdGEuZGF0YSxpPW4uaSxhPWMuY2FzdE9wdGlvbih0LGksXCJpbnNpZGV0ZXh0Zm9udC5jb2xvclwiKTshYSYmdC5faW5wdXQudGV4dGZvbnQmJihhPWMuY2FzdE9wdGlvbih0Ll9pbnB1dCxpLFwidGV4dGZvbnQuY29sb3JcIikpO3ZhciBvPWMuY2FzdE9wdGlvbih0LGksXCJpbnNpZGV0ZXh0Zm9udC5mYW1pbHlcIil8fGMuY2FzdE9wdGlvbih0LGksXCJ0ZXh0Zm9udC5mYW1pbHlcIil8fHIuZmFtaWx5LGw9Yy5jYXN0T3B0aW9uKHQsaSxcImluc2lkZXRleHRmb250LnNpemVcIil8fGMuY2FzdE9wdGlvbih0LGksXCJ0ZXh0Zm9udC5zaXplXCIpfHxyLnNpemU7cmV0dXJue2NvbG9yOmF8fHMuY29udHJhc3Qobi5jb2xvciksZmFtaWx5Om8sc2l6ZTpsfX0obSxyLG8uZm9udCkpLmNhbGwoaC5jb252ZXJ0VG9Uc3BhbnMsdCk7dmFyIHg9bC5iQm94KHkubm9kZSgpKTtyLnRyYW5zZm9ybT1kKHgscixwKSxyLnRyYW5zbGF0ZVg9cShyKSxyLnRyYW5zbGF0ZVk9SChyKTt2YXIgXz1mdW5jdGlvbih0LGUpe3JldHVyblwidHJhbnNsYXRlKFwiK3QudHJhbnNsYXRlWCtcIixcIit0LnRyYW5zbGF0ZVkrXCIpXCIrKHQudHJhbnNmb3JtLnNjYWxlPDE/XCJzY2FsZShcIit0LnRyYW5zZm9ybS5zY2FsZStcIilcIjpcIlwiKSsodC50cmFuc2Zvcm0ucm90YXRlP1wicm90YXRlKFwiK3QudHJhbnNmb3JtLnJvdGF0ZStcIilcIjpcIlwiKStcInRyYW5zbGF0ZShcIistKGUubGVmdCtlLnJpZ2h0KS8yK1wiLFwiKy0oZS50b3ArZS5ib3R0b20pLzIrXCIpXCJ9O3U/eS50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7dmFyIGUscj1EW2sodCldLGk9dC50cmFuc2Zvcm07aWYocillPXI7ZWxzZSBpZihlPXtycHgxOnQucnB4MSx0cmFuc2Zvcm06e3NjYWxlOjAscm90YXRlOmkucm90YXRlLHJDZW50ZXI6aS5yQ2VudGVyLHg6aS54LHk6aS55fX0sSSlpZih0LnBhcmVudClpZihHKXt2YXIgYT10LngxPkc/MipNYXRoLlBJOjA7ZS54MD1lLngxPWF9ZWxzZSBjLmV4dGVuZEZsYXQoZSxYKHQpKTtlbHNlIGUueDA9ZS54MT0wO2Vsc2UgZS54MD1lLngxPTA7dmFyIG89bi5pbnRlcnBvbGF0ZShlLnJweDEsdC5ycHgxKSxzPW4uaW50ZXJwb2xhdGUoZS54MCx0LngwKSxsPW4uaW50ZXJwb2xhdGUoZS54MSx0LngxKSx1PW4uaW50ZXJwb2xhdGUoZS50cmFuc2Zvcm0uc2NhbGUsaS5zY2FsZSksaD1uLmludGVycG9sYXRlKGUudHJhbnNmb3JtLnJvdGF0ZSxpLnJvdGF0ZSksZj0wPT09aS5yQ2VudGVyPzM6MD09PWUudHJhbnNmb3JtLnJDZW50ZXI/MS8zOjEscD1uLmludGVycG9sYXRlKGUudHJhbnNmb3JtLnJDZW50ZXIsaS5yQ2VudGVyKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9byh0KSxyPXModCksbj1sKHQpLGE9ZnVuY3Rpb24odCl7cmV0dXJuIHAoTWF0aC5wb3codCxmKSl9KHQpLGM9e3B4bWlkOlYoZSwocituKS8yKSx0cmFuc2Zvcm06e3JDZW50ZXI6YSx4OmkueCx5OmkueX19LGQ9e3JweDE6byh0KSx0cmFuc2xhdGVYOnEoYyksdHJhbnNsYXRlWTpIKGMpLHRyYW5zZm9ybTp7c2NhbGU6dSh0KSxyb3RhdGU6aCh0KSxyQ2VudGVyOmF9fTtyZXR1cm4gZH19KHQpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gXyhlKHQpLHgpfX0pOnkuYXR0cihcInRyYW5zZm9ybVwiLF8ocix4KSl9KX1mdW5jdGlvbiB4KHQsZSl7dmFyIHI7cmV0dXJuIGUmJnQuZWFjaEFmdGVyKGZ1bmN0aW9uKHQpe2lmKGsodCk9PT1lKXJldHVybiByPXQuY29weSgpfSkscnx8dH1mdW5jdGlvbiBiKHQpe3JldHVyblwiXCI9PT10LmRhdGEuZGF0YS5waWR9ZnVuY3Rpb24gXyh0KXtyZXR1cm4hdC5wYXJlbnR9ZnVuY3Rpb24gdyh0KXtyZXR1cm4hdC5jaGlsZHJlbn1mdW5jdGlvbiBrKHQpe3JldHVybiB0LmRhdGEuZGF0YS5pZH1mdW5jdGlvbiBBKHQsZSxyKXt2YXIgbj10LmRhdHVtKCksaT0ocnx8e30pLmlzVHJhbnNpdGlvbmluZztmKHQsaXx8dyhuKXx8YihuKT9udWxsOlwicG9pbnRlclwiKX1mdW5jdGlvbiBUKHQsZSxyKXt2YXIgaT1yWzBdLHM9aS50cmFjZTtcIl9oYXNIb3ZlckxhYmVsXCJpbiBzfHwocy5faGFzSG92ZXJMYWJlbD0hMSksXCJfaGFzSG92ZXJFdmVudFwiaW4gc3x8KHMuX2hhc0hvdmVyRXZlbnQ9ITEpLHQub24oXCJtb3VzZW92ZXJcIixmdW5jdGlvbih0KXt2YXIgcj1lLl9mdWxsTGF5b3V0O2lmKCFlLl9kcmFnZ2luZyYmITEhPT1yLmhvdmVybW9kZSl7dmFyIGE9ZS5fZnVsbERhdGFbcy5pbmRleF0sbD10LmRhdGEuZGF0YSx1PWwuaSxoPWZ1bmN0aW9uKHQpe3JldHVybiBjLmNhc3RPcHRpb24oYSx1LHQpfSxmPWgoXCJob3ZlcnRlbXBsYXRlXCIpLHA9by5jYXN0SG92ZXJpbmZvKGEscix1KSxkPXIuc2VwYXJhdG9ycztpZihmfHxwJiZcIm5vbmVcIiE9PXAmJlwic2tpcFwiIT09cCl7dmFyIHY9dC5ySW5zY3JpYmVkLG09aS5jeCt0LnB4bWlkWzBdKigxLXYpLHk9aS5jeSt0LnB4bWlkWzFdKigxLXYpLHg9e30sYj1bXSxfPVtdLHc9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1iLmluZGV4T2YodCl9O3AmJihiPVwiYWxsXCI9PT1wP2EuX21vZHVsZS5hdHRyaWJ1dGVzLmhvdmVyaW5mby5mbGFnczpwLnNwbGl0KFwiK1wiKSkseC5sYWJlbD1sLmxhYmVsLHcoXCJsYWJlbFwiKSYmeC5sYWJlbCYmXy5wdXNoKHgubGFiZWwpLGwuaGFzT3duUHJvcGVydHkoXCJ2XCIpJiYoeC52YWx1ZT1sLnYseC52YWx1ZUxhYmVsPWcoeC52YWx1ZSxkKSx3KFwidmFsdWVcIikmJl8ucHVzaCh4LnZhbHVlTGFiZWwpKSx4LnRleHQ9aChcImhvdmVydGV4dFwiKXx8aChcInRleHRcIiksdyhcInRleHRcIikmJngudGV4dCYmXy5wdXNoKHgudGV4dCksby5sb25lSG92ZXIoe3RyYWNlOmEseDA6bS12KnQucnB4MSx4MTptK3YqdC5ycHgxLHk6eSxpZGVhbEFsaWduOnQucHhtaWRbMF08MD9cImxlZnRcIjpcInJpZ2h0XCIsdGV4dDpfLmpvaW4oXCI8YnI+XCIpLG5hbWU6Znx8dyhcIm5hbWVcIik/YS5uYW1lOnZvaWQgMCxjb2xvcjpoKFwiaG92ZXJsYWJlbC5iZ2NvbG9yXCIpfHxsLmNvbG9yLGJvcmRlckNvbG9yOmgoXCJob3ZlcmxhYmVsLmJvcmRlcmNvbG9yXCIpLGZvbnRGYW1pbHk6aChcImhvdmVybGFiZWwuZm9udC5mYW1pbHlcIiksZm9udFNpemU6aChcImhvdmVybGFiZWwuZm9udC5zaXplXCIpLGZvbnRDb2xvcjpoKFwiaG92ZXJsYWJlbC5mb250LmNvbG9yXCIpLG5hbWVMZW5ndGg6aChcImhvdmVybGFiZWwubmFtZWxlbmd0aFwiKSx0ZXh0QWxpZ246aChcImhvdmVybGFiZWwuYWxpZ25cIiksaG92ZXJ0ZW1wbGF0ZTpmLGhvdmVydGVtcGxhdGVMYWJlbHM6eCxldmVudERhdGE6W00odCxhKV19LHtjb250YWluZXI6ci5faG92ZXJsYXllci5ub2RlKCksb3V0ZXJDb250YWluZXI6ci5fcGFwZXIubm9kZSgpLGdkOmV9KSxzLl9oYXNIb3ZlckxhYmVsPSEwfXMuX2hhc0hvdmVyRXZlbnQ9ITAsZS5lbWl0KFwicGxvdGx5X2hvdmVyXCIse3BvaW50czpbTSh0LGEpXSxldmVudDpuLmV2ZW50fSl9fSksdC5vbihcIm1vdXNlb3V0XCIsZnVuY3Rpb24odCl7dmFyIHI9ZS5fZnVsbExheW91dCxpPWUuX2Z1bGxEYXRhW3MuaW5kZXhdLGE9bi5zZWxlY3QodGhpcykuZGF0dW0oKTtzLl9oYXNIb3ZlckV2ZW50JiYodC5vcmlnaW5hbEV2ZW50PW4uZXZlbnQsZS5lbWl0KFwicGxvdGx5X3VuaG92ZXJcIix7cG9pbnRzOltNKGEsaSldLGV2ZW50Om4uZXZlbnR9KSxzLl9oYXNIb3ZlckV2ZW50PSExKSxzLl9oYXNIb3ZlckxhYmVsJiYoby5sb25lVW5ob3ZlcihyLl9ob3ZlcmxheWVyLm5vZGUoKSkscy5faGFzSG92ZXJMYWJlbD0hMSl9KSx0Lm9uKFwiY2xpY2tcIixmdW5jdGlvbih0KXt2YXIgcj1lLl9mdWxsTGF5b3V0LGw9ZS5fZnVsbERhdGFbcy5pbmRleF07aWYoITE9PT11LnRyaWdnZXJIYW5kbGVyKGUsXCJwbG90bHlfc3VuYnVyc3RjbGlja1wiLHtwb2ludHM6W00odCxsKV0sZXZlbnQ6bi5ldmVudH0pfHx3KHQpfHxiKHQpKXIuaG92ZXJtb2RlJiYoZS5faG92ZXJkYXRhPVtNKHQsbCldLG8uY2xpY2soZSxuLmV2ZW50KSk7ZWxzZSBpZighZS5fZHJhZ2dpbmcmJiFlLl90cmFuc2l0aW9uaW5nKXthLmNhbGwoXCJfc3RvcmVEaXJlY3RHVUlFZGl0XCIsbCxyLl90cmFjZVByZUdVSVtsLnVpZF0se2xldmVsOmwubGV2ZWx9KTt2YXIgYz1pLmhpZXJhcmNoeSxoPWsodCksZj1fKHQpP2Z1bmN0aW9uKHQsZSl7dmFyIHI7cmV0dXJuIHQuZWFjaEFmdGVyKGZ1bmN0aW9uKHQpe2Zvcih2YXIgbj10LmNoaWxkcmVufHxbXSxpPTA7aTxuLmxlbmd0aDtpKyspaWYoayhuW2ldKT09PWUpcmV0dXJuIHI9dC5jb3B5KCl9KSxyfHx0fShjLGgpOngoYyxoKSxwPXtkYXRhOlt7bGV2ZWw6ayhmKX1dLHRyYWNlczpbcy5pbmRleF19LGQ9e2ZyYW1lOntyZWRyYXc6ITEsZHVyYXRpb246bS5DTElDS19UUkFOU0lUSU9OX1RJTUV9LHRyYW5zaXRpb246e2R1cmF0aW9uOm0uQ0xJQ0tfVFJBTlNJVElPTl9USU1FLGVhc2luZzptLkNMSUNLX1RSQU5TSVRJT05fRUFTSU5HfSxtb2RlOlwiaW1tZWRpYXRlXCIsZnJvbWN1cnJlbnQ6ITB9O28ubG9uZVVuaG92ZXIoci5faG92ZXJsYXllci5ub2RlKCkpLGEuY2FsbChcImFuaW1hdGVcIixlLHAsZCl9fSl9ZnVuY3Rpb24gTSh0LGUpe3ZhciByPXQuZGF0YS5kYXRhLG49e2N1cnZlTnVtYmVyOmUuaW5kZXgscG9pbnROdW1iZXI6ci5pLGRhdGE6ZS5faW5wdXQsZnVsbERhdGE6ZX07cmV0dXJuIHAobixlLHIuaSksbn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbyxzPXQuX2Z1bGxMYXlvdXQuX3N1bmJ1cnN0bGF5ZXIsbD0hcixjPXImJnIuZHVyYXRpb24+MDsoKGE9cy5zZWxlY3RBbGwoXCJnLnRyYWNlLnN1bmJ1cnN0XCIpLmRhdGEoZSxmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS51aWR9KSkuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJ0cmFjZVwiLCEwKS5jbGFzc2VkKFwic3VuYnVyc3RcIiwhMCkuYXR0cihcInN0cm9rZS1saW5lam9pblwiLFwicm91bmRcIiksYS5vcmRlcigpLGMpPyhpJiYobz1pKCkpLG4udHJhbnNpdGlvbigpLmR1cmF0aW9uKHIuZHVyYXRpb24pLmVhc2Uoci5lYXNpbmcpLmVhY2goXCJlbmRcIixmdW5jdGlvbigpe28mJm8oKX0pLmVhY2goXCJpbnRlcnJ1cHRcIixmdW5jdGlvbigpe28mJm8oKX0pLmVhY2goZnVuY3Rpb24oKXtzLnNlbGVjdEFsbChcImcudHJhY2VcIikuZWFjaChmdW5jdGlvbihlKXt5KHQsZSx0aGlzLHIpfSl9KSk6YS5lYWNoKGZ1bmN0aW9uKGUpe3kodCxlLHRoaXMscil9KTtsJiZhLmV4aXQoKS5yZW1vdmUoKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9jb21wb25lbnRzL2Z4XCI6NjE3LFwiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzXCI6NjEzLFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2V2ZW50c1wiOjY5MCxcIi4uLy4uL2xpYi9zZXRjdXJzb3JcIjo3MjEsXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIjo3MjUsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL3BpZS9oZWxwZXJzXCI6MTAzMSxcIi4uL3BpZS9wbG90XCI6MTAzNSxcIi4vY29uc3RhbnRzXCI6MTE0MixcIi4vc3R5bGVcIjoxMTQ4LGQzOjE1NSxcImQzLWhpZXJhcmNoeVwiOjE0OH1dLDExNDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxhPXQoXCIuLi8uLi9saWJcIik7ZnVuY3Rpb24gbyh0LGUscil7dmFyIG49ZS5kYXRhLmRhdGEsbz0hZS5jaGlsZHJlbixzPW4uaSxsPWEuY2FzdE9wdGlvbihyLHMsXCJtYXJrZXIubGluZS5jb2xvclwiKXx8aS5kZWZhdWx0TGluZSxjPWEuY2FzdE9wdGlvbihyLHMsXCJtYXJrZXIubGluZS53aWR0aFwiKXx8MDt0LnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsYykuY2FsbChpLmZpbGwsbi5jb2xvcikuY2FsbChpLnN0cm9rZSxsKS5zdHlsZShcIm9wYWNpdHlcIixvP3IubGVhZi5vcGFjaXR5Om51bGwpfWUuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCl7dC5fZnVsbExheW91dC5fc3VuYnVyc3RsYXllci5zZWxlY3RBbGwoXCIudHJhY2VcIikuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPXRbMF0udHJhY2U7ZS5zdHlsZShcIm9wYWNpdHlcIixyLm9wYWNpdHkpLGUuc2VsZWN0QWxsKFwicGF0aC5zdXJmYWNlXCIpLmVhY2goZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuY2FsbChvLHQscil9KX0pfSxzdHlsZU9uZTpvfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2xpYlwiOjcwMSxkMzoxNTV9XSwxMTQ5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIiksbD10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LGM9dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGw7ZnVuY3Rpb24gdSh0KXtyZXR1cm57c2hvdzp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxzdGFydDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6bnVsbCxlZGl0VHlwZTpcInBsb3RcIn0sZW5kOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDpudWxsLGVkaXRUeXBlOlwicGxvdFwifSxzaXplOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDpudWxsLG1pbjowLGVkaXRUeXBlOlwicGxvdFwifSxwcm9qZWN0Ont4Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LHk6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sejp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfX0sY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6bi5kZWZhdWx0TGluZX0sdXNlY29sb3JtYXA6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MSxtYXg6MTYsZGZsdDoyfSxoaWdobGlnaHQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMH0saGlnaGxpZ2h0Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6bi5kZWZhdWx0TGluZX0saGlnaGxpZ2h0d2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MSxtYXg6MTYsZGZsdDoyfX19dmFyIGg9ZS5leHBvcnRzPWMobCh7ejp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIn0seDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIn0seTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIn0sdGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixhcnJheU9rOiEwfSxob3ZlcnRleHQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsYXJyYXlPazohMH0saG92ZXJ0ZW1wbGF0ZTpvKCksY29ubmVjdGdhcHM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMSxlZGl0VHlwZTpcImNhbGNcIn0sc3VyZmFjZWNvbG9yOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwifX0saShcIlwiLHtjb2xvckF0dHI6XCJ6IG9yIHN1cmZhY2Vjb2xvclwiLHNob3dTY2FsZURmbHQ6ITAsYXV0b0NvbG9yRGZsdDohMSxlZGl0VHlwZU92ZXJyaWRlOlwiY2FsY1wifSkse2NvbG9yYmFyOmEsY29udG91cnM6e3g6dSgpLHk6dSgpLHo6dSgpfSxoaWRlc3VyZmFjZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxsaWdodHBvc2l0aW9uOnt4Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOi0xZTUsbWF4OjFlNSxkZmx0OjEwfSx5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOi0xZTUsbWF4OjFlNSxkZmx0OjFlNH0sejp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjotMWU1LG1heDoxZTUsZGZsdDowfX0sbGlnaHRpbmc6e2FtYmllbnQ6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0Oi44fSxkaWZmdXNlOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDouOH0sc3BlY3VsYXI6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MixkZmx0Oi4wNX0scm91Z2huZXNzOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDouNX0sZnJlc25lbDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDo1LGRmbHQ6LjJ9fSxvcGFjaXR5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDoxfSxfZGVwcmVjYXRlZDp7emF1dG86bCh7fSxpLnphdXRvLHt9KSx6bWluOmwoe30saS56bWluLHt9KSx6bWF4Omwoe30saS56bWF4LHt9KX0saG92ZXJpbmZvOmwoe30scy5ob3ZlcmluZm8pfSksXCJjYWxjXCIsXCJuZXN0ZWRcIik7aC54LmVkaXRUeXBlPWgueS5lZGl0VHlwZT1oLnouZWRpdFR5cGU9XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCIsaC50cmFuc2Zvcm1zPXZvaWQgMH0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDZ9XSwxMTUwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Uuc3VyZmFjZWNvbG9yP24odCxlLHt2YWxzOmUuc3VyZmFjZWNvbG9yLGNvbnRhaW5lclN0cjpcIlwiLGNMZXR0ZXI6XCJjXCJ9KTpuKHQsZSx7dmFsczplLnosY29udGFpbmVyU3RyOlwiXCIsY0xldHRlcjpcImNcIn0pfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIjo1ODZ9XSwxMTUxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsLXN1cmZhY2UzZFwiKSxpPXQoXCJuZGFycmF5XCIpLGE9dChcIm5kYXJyYXktaG9tb2dyYXBoeVwiKSxvPXQoXCJuZGFycmF5LWZpbGxcIikscz10KFwiLi4vLi4vbGliXCIpLmlzQXJyYXlPclR5cGVkQXJyYXksbD10KFwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvclwiKS5wYXJzZUNvbG9yU2NhbGUsYz10KFwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiKSx1PXQoXCIuLi9oZWF0bWFwL2ludGVycDJkXCIpLGg9dChcIi4uL2hlYXRtYXAvZmluZF9lbXB0aWVzXCIpO2Z1bmN0aW9uIGYodCxlLHIpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1yLHRoaXMuc3VyZmFjZT1lLHRoaXMuZGF0YT1udWxsLHRoaXMuc2hvd0NvbnRvdXI9WyExLCExLCExXSx0aGlzLmNvbnRvdXJTdGFydD1bbnVsbCxudWxsLG51bGxdLHRoaXMuY29udG91ckVuZD1bbnVsbCxudWxsLG51bGxdLHRoaXMuY29udG91clNpemU9WzAsMCwwXSx0aGlzLm1pblZhbHVlcz1bMS8wLDEvMCwxLzBdLHRoaXMubWF4VmFsdWVzPVstMS8wLC0xLzAsLTEvMF0sdGhpcy5kYXRhU2NhbGVYPTEsdGhpcy5kYXRhU2NhbGVZPTEsdGhpcy5yZWZpbmVEYXRhPSEwLHRoaXMub2JqZWN0T2Zmc2V0PVswLDAsMF19dmFyIHA9Zi5wcm90b3R5cGU7cC5nZXRYYXQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9cyh0aGlzLmRhdGEueCk/cyh0aGlzLmRhdGEueFswXSk/dGhpcy5kYXRhLnhbZV1bdF06dGhpcy5kYXRhLnhbdF06dDtyZXR1cm4gdm9pZCAwPT09cj9pOm4uZDJsKGksMCxyKX0scC5nZXRZYXQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9cyh0aGlzLmRhdGEueSk/cyh0aGlzLmRhdGEueVswXSk/dGhpcy5kYXRhLnlbZV1bdF06dGhpcy5kYXRhLnlbZV06ZTtyZXR1cm4gdm9pZCAwPT09cj9pOm4uZDJsKGksMCxyKX0scC5nZXRaYXQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5kYXRhLnpbZV1bdF07cmV0dXJuIG51bGw9PT1pJiZ0aGlzLmRhdGEuY29ubmVjdGdhcHMmJnRoaXMuZGF0YS5faW50ZXJwb2xhdGVkWiYmKGk9dGhpcy5kYXRhLl9pbnRlcnBvbGF0ZWRaW2VdW3RdKSx2b2lkIDA9PT1yP2k6bi5kMmwoaSwwLHIpfSxwLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLnN1cmZhY2Upe3ZhciBlPSh0LmRhdGEuaW5kZXhbMF0tMSkvdGhpcy5kYXRhU2NhbGVYLTEscj0odC5kYXRhLmluZGV4WzFdLTEpL3RoaXMuZGF0YVNjYWxlWS0xLG49TWF0aC5tYXgoTWF0aC5taW4oTWF0aC5yb3VuZChlKSx0aGlzLmRhdGEuelswXS5sZW5ndGgtMSksMCksaT1NYXRoLm1heChNYXRoLm1pbihNYXRoLnJvdW5kKHIpLHRoaXMuZGF0YS5feWxlbmd0aC0xKSwwKTt0LmluZGV4PVtuLGldLHQudHJhY2VDb29yZGluYXRlPVt0aGlzLmdldFhhdChuLGkpLHRoaXMuZ2V0WWF0KG4saSksdGhpcy5nZXRaYXQobixpKV0sdC5kYXRhQ29vcmRpbmF0ZT1bdGhpcy5nZXRYYXQobixpLHRoaXMuZGF0YS54Y2FsZW5kYXIsdGhpcy5zY2VuZS5mdWxsU2NlbmVMYXlvdXQueGF4aXMpLHRoaXMuZ2V0WWF0KG4saSx0aGlzLmRhdGEueWNhbGVuZGFyLHRoaXMuc2NlbmUuZnVsbFNjZW5lTGF5b3V0LnlheGlzKSx0aGlzLmdldFphdChuLGksdGhpcy5kYXRhLnpjYWxlbmRhcix0aGlzLnNjZW5lLmZ1bGxTY2VuZUxheW91dC56YXhpcyldO2Zvcih2YXIgYT0wO2E8MzthKyspe3ZhciBvPXQuZGF0YUNvb3JkaW5hdGVbYV07bnVsbCE9byYmKHQuZGF0YUNvb3JkaW5hdGVbYV0qPXRoaXMuc2NlbmUuZGF0YVNjYWxlW2FdKX12YXIgcz10aGlzLmRhdGEuaG92ZXJ0ZXh0fHx0aGlzLmRhdGEudGV4dDtyZXR1cm4gQXJyYXkuaXNBcnJheShzKSYmc1tpXSYmdm9pZCAwIT09c1tpXVtuXT90LnRleHRMYWJlbD1zW2ldW25dOnQudGV4dExhYmVsPXN8fFwiXCIsdC5kYXRhLmRhdGFDb29yZGluYXRlPXQuZGF0YUNvb3JkaW5hdGUuc2xpY2UoKSx0aGlzLnN1cmZhY2UuaGlnaGxpZ2h0KHQuZGF0YSksdGhpcy5zY2VuZS5nbHBsb3Quc3Bpa2VzLnBvc2l0aW9uPXQuZGF0YUNvb3JkaW5hdGUsITB9fTt2YXIgZD1bMiwzLDUsNywxMSwxMywxNywxOSwyMywyOSwzMSwzNyw0MSw0Myw0Nyw1Myw1OSw2MSw2Nyw3MSw3Myw3OSw4Myw4OSw5NywxMDEsMTAzLDEwNywxMDksMTEzLDEyNywxMzEsMTM3LDEzOSwxNDksMTUxLDE1NywxNjMsMTY3LDE3MywxNzksMTgxLDE5MSwxOTMsMTk3LDE5OSwyMTEsMjIzLDIyNywyMjksMjMzLDIzOSwyNDEsMjUxLDI1NywyNjMsMjY5LDI3MSwyNzcsMjgxLDI4MywyOTMsMzA3LDMxMSwzMTMsMzE3LDMzMSwzMzcsMzQ3LDM0OSwzNTMsMzU5LDM2NywzNzMsMzc5LDM4MywzODksMzk3LDQwMSw0MDksNDE5LDQyMSw0MzEsNDMzLDQzOSw0NDMsNDQ5LDQ1Nyw0NjEsNDYzLDQ2Nyw0NzksNDg3LDQ5MSw0OTksNTAzLDUwOSw1MjEsNTIzLDU0MSw1NDcsNTU3LDU2Myw1NjksNTcxLDU3Nyw1ODcsNTkzLDU5OSw2MDEsNjA3LDYxMyw2MTcsNjE5LDYzMSw2NDEsNjQzLDY0Nyw2NTMsNjU5LDY2MSw2NzMsNjc3LDY4Myw2OTEsNzAxLDcwOSw3MTksNzI3LDczMyw3MzksNzQzLDc1MSw3NTcsNzYxLDc2OSw3NzMsNzg3LDc5Nyw4MDksODExLDgyMSw4MjMsODI3LDgyOSw4MzksODUzLDg1Nyw4NTksODYzLDg3Nyw4ODEsODgzLDg4Nyw5MDcsOTExLDkxOSw5MjksOTM3LDk0MSw5NDcsOTUzLDk2Nyw5NzEsOTc3LDk4Myw5OTEsOTk3LDEwMDksMTAxMywxMDE5LDEwMjEsMTAzMSwxMDMzLDEwMzksMTA0OSwxMDUxLDEwNjEsMTA2MywxMDY5LDEwODcsMTA5MSwxMDkzLDEwOTcsMTEwMywxMTA5LDExMTcsMTEyMywxMTI5LDExNTEsMTE1MywxMTYzLDExNzEsMTE4MSwxMTg3LDExOTMsMTIwMSwxMjEzLDEyMTcsMTIyMywxMjI5LDEyMzEsMTIzNywxMjQ5LDEyNTksMTI3NywxMjc5LDEyODMsMTI4OSwxMjkxLDEyOTcsMTMwMSwxMzAzLDEzMDcsMTMxOSwxMzIxLDEzMjcsMTM2MSwxMzY3LDEzNzMsMTM4MSwxMzk5LDE0MDksMTQyMywxNDI3LDE0MjksMTQzMywxNDM5LDE0NDcsMTQ1MSwxNDUzLDE0NTksMTQ3MSwxNDgxLDE0ODMsMTQ4NywxNDg5LDE0OTMsMTQ5OSwxNTExLDE1MjMsMTUzMSwxNTQzLDE1NDksMTU1MywxNTU5LDE1NjcsMTU3MSwxNTc5LDE1ODMsMTU5NywxNjAxLDE2MDcsMTYwOSwxNjEzLDE2MTksMTYyMSwxNjI3LDE2MzcsMTY1NywxNjYzLDE2NjcsMTY2OSwxNjkzLDE2OTcsMTY5OSwxNzA5LDE3MjEsMTcyMywxNzMzLDE3NDEsMTc0NywxNzUzLDE3NTksMTc3NywxNzgzLDE3ODcsMTc4OSwxODAxLDE4MTEsMTgyMywxODMxLDE4NDcsMTg2MSwxODY3LDE4NzEsMTg3MywxODc3LDE4NzksMTg4OSwxOTAxLDE5MDcsMTkxMywxOTMxLDE5MzMsMTk0OSwxOTUxLDE5NzMsMTk3OSwxOTg3LDE5OTMsMTk5NywxOTk5LDIwMDMsMjAxMSwyMDE3LDIwMjcsMjAyOSwyMDM5LDIwNTMsMjA2MywyMDY5LDIwODEsMjA4MywyMDg3LDIwODksMjA5OSwyMTExLDIxMTMsMjEyOSwyMTMxLDIxMzcsMjE0MSwyMTQzLDIxNTMsMjE2MSwyMTc5LDIyMDMsMjIwNywyMjEzLDIyMjEsMjIzNywyMjM5LDIyNDMsMjI1MSwyMjY3LDIyNjksMjI3MywyMjgxLDIyODcsMjI5MywyMjk3LDIzMDksMjMxMSwyMzMzLDIzMzksMjM0MSwyMzQ3LDIzNTEsMjM1NywyMzcxLDIzNzcsMjM4MSwyMzgzLDIzODksMjM5MywyMzk5LDI0MTEsMjQxNywyNDIzLDI0MzcsMjQ0MSwyNDQ3LDI0NTksMjQ2NywyNDczLDI0NzcsMjUwMywyNTIxLDI1MzEsMjUzOSwyNTQzLDI1NDksMjU1MSwyNTU3LDI1NzksMjU5MSwyNTkzLDI2MDksMjYxNywyNjIxLDI2MzMsMjY0NywyNjU3LDI2NTksMjY2MywyNjcxLDI2NzcsMjY4MywyNjg3LDI2ODksMjY5MywyNjk5LDI3MDcsMjcxMSwyNzEzLDI3MTksMjcyOSwyNzMxLDI3NDEsMjc0OSwyNzUzLDI3NjcsMjc3NywyNzg5LDI3OTEsMjc5NywyODAxLDI4MDMsMjgxOSwyODMzLDI4MzcsMjg0MywyODUxLDI4NTcsMjg2MSwyODc5LDI4ODcsMjg5NywyOTAzLDI5MDksMjkxNywyOTI3LDI5MzksMjk1MywyOTU3LDI5NjMsMjk2OSwyOTcxLDI5OTldO2Z1bmN0aW9uIGcodCxlKXtpZih0PGUpcmV0dXJuIDA7Zm9yKHZhciByPTA7MD09PU1hdGguZmxvb3IodCVlKTspdC89ZSxyKys7cmV0dXJuIHJ9ZnVuY3Rpb24gdih0KXtmb3IodmFyIGU9W10scj0wO3I8ZC5sZW5ndGg7cisrKXt2YXIgbj1kW3JdO2UucHVzaChnKHQsbikpfXJldHVybiBlfWZ1bmN0aW9uIG0odCl7Zm9yKHZhciBlPXYodCkscj10LG49MDtuPGQubGVuZ3RoO24rKylpZihlW25dPjApe3I9ZFtuXTticmVha31yZXR1cm4gcn1mdW5jdGlvbiB5KHQsZSl7aWYoISh0PDF8fGU8MSkpe2Zvcih2YXIgcj12KHQpLG49dihlKSxpPTEsYT0wO2E8ZC5sZW5ndGg7YSsrKWkqPU1hdGgucG93KGRbYV0sTWF0aC5tYXgoclthXSxuW2FdKSk7cmV0dXJuIGl9fXAuY2FsY1hudW1zPWZ1bmN0aW9uKHQpe3ZhciBlLHI9W107Zm9yKGU9MTtlPHQ7ZSsrKXt2YXIgbj10aGlzLmdldFhhdChlLTEsMCksaT10aGlzLmdldFhhdChlLDApO3JbZS0xXT1pIT09biYmbnVsbCE9biYmbnVsbCE9aT9NYXRoLmFicyhpLW4pOjB9dmFyIGE9MDtmb3IoZT0xO2U8dDtlKyspYSs9cltlLTFdO2ZvcihlPTE7ZTx0O2UrKykwPT09cltlLTFdP3JbZS0xXT0xOnJbZS0xXT1NYXRoLnJvdW5kKGEvcltlLTFdKTtyZXR1cm4gcn0scC5jYWxjWW51bXM9ZnVuY3Rpb24odCl7dmFyIGUscj1bXTtmb3IoZT0xO2U8dDtlKyspe3ZhciBuPXRoaXMuZ2V0WWF0KDAsZS0xKSxpPXRoaXMuZ2V0WWF0KDAsZSk7cltlLTFdPWkhPT1uJiZudWxsIT1uJiZudWxsIT1pP01hdGguYWJzKGktbik6MH12YXIgYT0wO2ZvcihlPTE7ZTx0O2UrKylhKz1yW2UtMV07Zm9yKGU9MTtlPHQ7ZSsrKTA9PT1yW2UtMV0/cltlLTFdPTE6cltlLTFdPU1hdGgucm91bmQoYS9yW2UtMV0pO3JldHVybiByfTt2YXIgeD1bMSwyLDQsNiwxMiwyNCwzNiw0OCw2MCwxMjAsMTgwLDI0MCwzNjAsNzIwLDg0MCwxMjYwXSxiPXhbOV0sXz14WzEzXTtmdW5jdGlvbiB3KHQsZSl7Zm9yKHZhciByPSExLG49MDtuPHQubGVuZ3RoO24rKylpZihlPT09dFtuXSl7cj0hMDticmVha30hMT09PXImJnQucHVzaChlKX1wLmVzdGltYXRlU2NhbGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MStmdW5jdGlvbih0KXtpZigwIT09dC5sZW5ndGgpe2Zvcih2YXIgZT0xLHI9MDtyPHQubGVuZ3RoO3IrKyllPXkoZSx0W3JdKTtyZXR1cm4gZX19KDA9PT1lP3RoaXMuY2FsY1hudW1zKHQpOnRoaXMuY2FsY1ludW1zKHQpKTtyPGI7KXIqPTI7Zm9yKDtyPl87KXItLSxyLz1tKHIpLCsrcjxiJiYocj1fKTt2YXIgbj1NYXRoLnJvdW5kKHIvdCk7cmV0dXJuIG4+MT9uOjF9LHAucmVmaW5lQ29vcmRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmRhdGFTY2FsZVgscj10aGlzLmRhdGFTY2FsZVksbj10WzBdLnNoYXBlWzBdLG89dFswXS5zaGFwZVsxXSxzPTB8TWF0aC5mbG9vcih0WzBdLnNoYXBlWzBdKmUrMSksbD0wfE1hdGguZmxvb3IodFswXS5zaGFwZVsxXSpyKzEpLGM9MStuKzEsdT0xK28rMSxoPWkobmV3IEZsb2F0MzJBcnJheShjKnUpLFtjLHVdKSxmPTA7Zjx0Lmxlbmd0aDsrK2Ype3RoaXMuc3VyZmFjZS5wYWRGaWVsZChoLHRbZl0pO3ZhciBwPWkobmV3IEZsb2F0MzJBcnJheShzKmwpLFtzLGxdKTthKHAsaCxbZSwwLDAsMCxyLDAsMCwwLDFdKSx0W2ZdPXB9fSxwLnNldENvbnRvdXJMZXZlbHM9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbj1bW10sW10sW11dLGk9WyExLCExLCExXSxhPSExO2Zvcih0PTA7dDwzOysrdClpZih0aGlzLnNob3dDb250b3VyW3RdJiYoYT0hMCx0aGlzLmNvbnRvdXJTaXplW3RdPjAmJm51bGwhPT10aGlzLmNvbnRvdXJTdGFydFt0XSYmbnVsbCE9PXRoaXMuY29udG91ckVuZFt0XSYmdGhpcy5jb250b3VyRW5kW3RdPnRoaXMuY29udG91clN0YXJ0W3RdKSlmb3IoaVt0XT0hMCxlPXRoaXMuY29udG91clN0YXJ0W3RdO2U8dGhpcy5jb250b3VyRW5kW3RdO2UrPXRoaXMuY29udG91clNpemVbdF0pcj1lKnRoaXMuc2NlbmUuZGF0YVNjYWxlW3RdLHcoblt0XSxyKTtpZihhKXt2YXIgbz1bW10sW10sW11dO2Zvcih0PTA7dDwzOysrdCl0aGlzLnNob3dDb250b3VyW3RdJiYob1t0XT1pW3RdP25bdF06dGhpcy5zY2VuZS5jb250b3VyTGV2ZWxzW3RdKTt0aGlzLnN1cmZhY2UudXBkYXRlKHtsZXZlbHM6b30pfX0scC51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGUscixuLGEscz10aGlzLnNjZW5lLGY9cy5mdWxsU2NlbmVMYXlvdXQscD10aGlzLnN1cmZhY2UsZD10Lm9wYWNpdHksZz1sKHQsZCksdj1zLmRhdGFTY2FsZSxtPXQuelswXS5sZW5ndGgseT10Ll95bGVuZ3RoLHg9cy5jb250b3VyTGV2ZWxzO3RoaXMuZGF0YT10O3ZhciBiPVtdO2ZvcihlPTA7ZTwzO2UrKylmb3IoYltlXT1bXSxyPTA7cjxtO3IrKyliW2VdW3JdPVtdO2ZvcihyPTA7cjxtO3IrKylmb3Iobj0wO248eTtuKyspYlswXVtyXVtuXT10aGlzLmdldFhhdChyLG4sdC54Y2FsZW5kYXIsZi54YXhpcyksYlsxXVtyXVtuXT10aGlzLmdldFlhdChyLG4sdC55Y2FsZW5kYXIsZi55YXhpcyksYlsyXVtyXVtuXT10aGlzLmdldFphdChyLG4sdC56Y2FsZW5kYXIsZi56YXhpcyk7aWYodC5jb25uZWN0Z2Fwcylmb3IodC5fZW1wdHlwb2ludHM9aChiWzJdKSx1KGJbMl0sdC5fZW1wdHlwb2ludHMpLHQuX2ludGVycG9sYXRlZFo9W10scj0wO3I8bTtyKyspZm9yKHQuX2ludGVycG9sYXRlZFpbcl09W10sbj0wO248eTtuKyspdC5faW50ZXJwb2xhdGVkWltyXVtuXT1iWzJdW3JdW25dO2ZvcihlPTA7ZTwzO2UrKylmb3Iocj0wO3I8bTtyKyspZm9yKG49MDtuPHk7bisrKW51bGw9PShhPWJbZV1bcl1bbl0pP2JbZV1bcl1bbl09TmFOOmE9YltlXVtyXVtuXSo9dltlXTtmb3IoZT0wO2U8MztlKyspZm9yKHI9MDtyPG07cisrKWZvcihuPTA7bjx5O24rKyludWxsIT0oYT1iW2VdW3JdW25dKSYmKHRoaXMubWluVmFsdWVzW2VdPmEmJih0aGlzLm1pblZhbHVlc1tlXT1hKSx0aGlzLm1heFZhbHVlc1tlXTxhJiYodGhpcy5tYXhWYWx1ZXNbZV09YSkpO2ZvcihlPTA7ZTwzO2UrKyl0aGlzLm9iamVjdE9mZnNldFtlXT0uNSoodGhpcy5taW5WYWx1ZXNbZV0rdGhpcy5tYXhWYWx1ZXNbZV0pO2ZvcihlPTA7ZTwzO2UrKylmb3Iocj0wO3I8bTtyKyspZm9yKG49MDtuPHk7bisrKW51bGwhPShhPWJbZV1bcl1bbl0pJiYoYltlXVtyXVtuXS09dGhpcy5vYmplY3RPZmZzZXRbZV0pO3ZhciB3PVtpKG5ldyBGbG9hdDMyQXJyYXkobSp5KSxbbSx5XSksaShuZXcgRmxvYXQzMkFycmF5KG0qeSksW20seV0pLGkobmV3IEZsb2F0MzJBcnJheShtKnkpLFttLHldKV07byh3WzBdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGJbMF1bdF1bZV19KSxvKHdbMV0sZnVuY3Rpb24odCxlKXtyZXR1cm4gYlsxXVt0XVtlXX0pLG8od1syXSxmdW5jdGlvbih0LGUpe3JldHVybiBiWzJdW3RdW2VdfSksYj1bXTt2YXIgaz17Y29sb3JtYXA6ZyxsZXZlbHM6W1tdLFtdLFtdXSxzaG93Q29udG91cjpbITAsITAsITBdLHNob3dTdXJmYWNlOiF0LmhpZGVzdXJmYWNlLGNvbnRvdXJQcm9qZWN0OltbITEsITEsITFdLFshMSwhMSwhMV0sWyExLCExLCExXV0sY29udG91cldpZHRoOlsxLDEsMV0sY29udG91ckNvbG9yOltbMSwxLDEsMV0sWzEsMSwxLDFdLFsxLDEsMSwxXV0sY29udG91clRpbnQ6WzEsMSwxXSxkeW5hbWljQ29sb3I6W1sxLDEsMSwxXSxbMSwxLDEsMV0sWzEsMSwxLDFdXSxkeW5hbWljV2lkdGg6WzEsMSwxXSxkeW5hbWljVGludDpbMSwxLDFdLG9wYWNpdHk6dC5vcGFjaXR5fTtpZihrLmludGVuc2l0eUJvdW5kcz1bdC5jbWluLHQuY21heF0sdC5zdXJmYWNlY29sb3Ipe3ZhciBBPWkobmV3IEZsb2F0MzJBcnJheShtKnkpLFttLHldKTtvKEEsZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5zdXJmYWNlY29sb3Jbcl1bZV19KSx3LnB1c2goQSl9ZWxzZSBrLmludGVuc2l0eUJvdW5kc1swXSo9dlsyXSxrLmludGVuc2l0eUJvdW5kc1sxXSo9dlsyXTsoXzx3WzBdLnNoYXBlWzBdfHxfPHdbMF0uc2hhcGVbMV0pJiYodGhpcy5yZWZpbmVEYXRhPSExKSwhMD09PXRoaXMucmVmaW5lRGF0YSYmKHRoaXMuZGF0YVNjYWxlWD10aGlzLmVzdGltYXRlU2NhbGUod1swXS5zaGFwZVswXSwwKSx0aGlzLmRhdGFTY2FsZVk9dGhpcy5lc3RpbWF0ZVNjYWxlKHdbMF0uc2hhcGVbMV0sMSksMT09PXRoaXMuZGF0YVNjYWxlWCYmMT09PXRoaXMuZGF0YVNjYWxlWXx8dGhpcy5yZWZpbmVDb29yZHModykpLHQuc3VyZmFjZWNvbG9yJiYoay5pbnRlbnNpdHk9dy5wb3AoKSk7dmFyIFQ9WyEwLCEwLCEwXSxNPVtcInhcIixcInlcIixcInpcIl07Zm9yKGU9MDtlPDM7KytlKXt2YXIgUz10LmNvbnRvdXJzW01bZV1dO1RbZV09Uy5oaWdobGlnaHQsay5zaG93Q29udG91cltlXT1TLnNob3d8fFMuaGlnaGxpZ2h0LGsuc2hvd0NvbnRvdXJbZV0mJihrLmNvbnRvdXJQcm9qZWN0W2VdPVtTLnByb2plY3QueCxTLnByb2plY3QueSxTLnByb2plY3Quel0sUy5zaG93Pyh0aGlzLnNob3dDb250b3VyW2VdPSEwLGsubGV2ZWxzW2VdPXhbZV0scC5oaWdobGlnaHRDb2xvcltlXT1rLmNvbnRvdXJDb2xvcltlXT1jKFMuY29sb3IpLFMudXNlY29sb3JtYXA/cC5oaWdobGlnaHRUaW50W2VdPWsuY29udG91clRpbnRbZV09MDpwLmhpZ2hsaWdodFRpbnRbZV09ay5jb250b3VyVGludFtlXT0xLGsuY29udG91cldpZHRoW2VdPVMud2lkdGgsdGhpcy5jb250b3VyU3RhcnRbZV09Uy5zdGFydCx0aGlzLmNvbnRvdXJFbmRbZV09Uy5lbmQsdGhpcy5jb250b3VyU2l6ZVtlXT1TLnNpemUpOih0aGlzLnNob3dDb250b3VyW2VdPSExLHRoaXMuY29udG91clN0YXJ0W2VdPW51bGwsdGhpcy5jb250b3VyRW5kW2VdPW51bGwsdGhpcy5jb250b3VyU2l6ZVtlXT0wKSxTLmhpZ2hsaWdodCYmKGsuZHluYW1pY0NvbG9yW2VdPWMoUy5oaWdobGlnaHRjb2xvciksay5keW5hbWljV2lkdGhbZV09Uy5oaWdobGlnaHR3aWR0aCkpfShmdW5jdGlvbih0KXt2YXIgZT10WzBdLnJnYixyPXRbdC5sZW5ndGgtMV0ucmdiO3JldHVybiBlWzBdPT09clswXSYmZVsxXT09PXJbMV0mJmVbMl09PT1yWzJdJiZlWzNdPT09clszXX0pKGcpJiYoay52ZXJ0ZXhDb2xvcj0hMCksay5vYmplY3RPZmZzZXQ9dGhpcy5vYmplY3RPZmZzZXQsay5jb29yZHM9dyxwLnVwZGF0ZShrKSxwLnZpc2libGU9dC52aXNpYmxlLHAuZW5hYmxlRHluYW1pYz1ULHAuZW5hYmxlSGlnaGxpZ2h0PVQscC5zbmFwVG9EYXRhPSEwLFwibGlnaHRpbmdcImluIHQmJihwLmFtYmllbnRMaWdodD10LmxpZ2h0aW5nLmFtYmllbnQscC5kaWZmdXNlTGlnaHQ9dC5saWdodGluZy5kaWZmdXNlLHAuc3BlY3VsYXJMaWdodD10LmxpZ2h0aW5nLnNwZWN1bGFyLHAucm91Z2huZXNzPXQubGlnaHRpbmcucm91Z2huZXNzLHAuZnJlc25lbD10LmxpZ2h0aW5nLmZyZXNuZWwpLFwibGlnaHRwb3NpdGlvblwiaW4gdCYmKHAubGlnaHRQb3NpdGlvbj1bdC5saWdodHBvc2l0aW9uLngsdC5saWdodHBvc2l0aW9uLnksdC5saWdodHBvc2l0aW9uLnpdKSxkJiZkPDEmJihwLnN1cHBvcnRzVHJhbnNwYXJlbmN5PSEwKX0scC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuc3VyZmFjZSksdGhpcy5zdXJmYWNlLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsaT1uKHtnbDpyfSksYT1uZXcgZih0LGksZS51aWQpO3JldHVybiBpLl90cmFjZT1hLGEudXBkYXRlKGUpLHQuZ2xwbG90LmFkZChpKSxhfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvclwiOjY5OCxcIi4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIjo3MjQsXCIuLi9oZWF0bWFwL2ZpbmRfZW1wdGllc1wiOjk1NCxcIi4uL2hlYXRtYXAvaW50ZXJwMmRcIjo5NTcsXCJnbC1zdXJmYWNlM2RcIjozMTMsbmRhcnJheTo0NDMsXCJuZGFycmF5LWZpbGxcIjo0MzMsXCJuZGFycmF5LWhvbW9ncmFwaHlcIjo0MzV9XSwxMTUyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIiksbz10KFwiLi9hdHRyaWJ1dGVzXCIpO2Z1bmN0aW9uIHModCxlLHIpe2UgaW4gdCYmIShyIGluIHQpJiYodFtyXT10W2VdKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7dmFyIGMsdTtmdW5jdGlvbiBoKHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxvLHIsbil9dmFyIGY9aChcInhcIikscD1oKFwieVwiKSxkPWgoXCJ6XCIpO2lmKCFkfHwhZC5sZW5ndGh8fGYmJmYubGVuZ3RoPDF8fHAmJnAubGVuZ3RoPDEpZS52aXNpYmxlPSExO2Vsc2V7ZS5feGxlbmd0aD1BcnJheS5pc0FycmF5KGYpJiZpLmlzQXJyYXlPclR5cGVkQXJyYXkoZlswXSk/ZC5sZW5ndGg6ZFswXS5sZW5ndGgsZS5feWxlbmd0aD1kLmxlbmd0aCxuLmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiaGFuZGxlVHJhY2VEZWZhdWx0c1wiKSh0LGUsW1wieFwiLFwieVwiLFwielwiXSxsKSxoKFwidGV4dFwiKSxoKFwiaG92ZXJ0ZXh0XCIpLGgoXCJob3ZlcnRlbXBsYXRlXCIpLFtcImxpZ2h0aW5nLmFtYmllbnRcIixcImxpZ2h0aW5nLmRpZmZ1c2VcIixcImxpZ2h0aW5nLnNwZWN1bGFyXCIsXCJsaWdodGluZy5yb3VnaG5lc3NcIixcImxpZ2h0aW5nLmZyZXNuZWxcIixcImxpZ2h0cG9zaXRpb24ueFwiLFwibGlnaHRwb3NpdGlvbi55XCIsXCJsaWdodHBvc2l0aW9uLnpcIixcImhpZGVzdXJmYWNlXCIsXCJjb25uZWN0Z2Fwc1wiLFwib3BhY2l0eVwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2godCl9KTt2YXIgZz1oKFwic3VyZmFjZWNvbG9yXCIpLHY9W1wieFwiLFwieVwiLFwielwiXTtmb3IoYz0wO2M8MzsrK2Mpe3ZhciBtPVwiY29udG91cnMuXCIrdltjXSx5PWgobStcIi5zaG93XCIpLHg9aChtK1wiLmhpZ2hsaWdodFwiKTtpZih5fHx4KWZvcih1PTA7dTwzOysrdSloKG0rXCIucHJvamVjdC5cIit2W3VdKTt5JiYoaChtK1wiLmNvbG9yXCIpLGgobStcIi53aWR0aFwiKSxoKG0rXCIudXNlY29sb3JtYXBcIikpLHgmJihoKG0rXCIuaGlnaGxpZ2h0Y29sb3JcIiksaChtK1wiLmhpZ2hsaWdodHdpZHRoXCIpKSxoKG0rXCIuc3RhcnRcIiksaChtK1wiLmVuZFwiKSxoKG0rXCIuc2l6ZVwiKX1nfHwocyh0LFwiem1pblwiLFwiY21pblwiKSxzKHQsXCJ6bWF4XCIsXCJjbWF4XCIpLHModCxcInphdXRvXCIsXCJjYXV0b1wiKSksYSh0LGUsbCxoLHtwcmVmaXg6XCJcIixjTGV0dGVyOlwiY1wifSksZS5fbGVuZ3RoPW51bGx9fX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCI6NTg4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2F0dHJpYnV0ZXNcIjoxMTQ5fV0sMTE1MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIiksbi5jb2xvcmJhcj17bWluOlwiY21pblwiLG1heDpcImNtYXhcIn0sbi5jYWxjPXQoXCIuL2NhbGNcIiksbi5wbG90PXQoXCIuL2NvbnZlcnRcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJzdXJmYWNlXCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvZ2wzZFwiKSxuLmNhdGVnb3JpZXM9W1wiZ2wzZFwiLFwiMmRNYXBcIixcIm5vT3BhY2l0eVwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4uLy4uL3Bsb3RzL2dsM2RcIjo3ODksXCIuL2F0dHJpYnV0ZXNcIjoxMTQ5LFwiLi9jYWxjXCI6MTE1MCxcIi4vY29udmVydFwiOjExNTEsXCIuL2RlZmF1bHRzXCI6MTE1Mn1dLDExNTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxhPXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsLG89dChcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9wbG90cy9kb21haW5cIikuYXR0cmlidXRlczsoZS5leHBvcnRzPWEoe2RvbWFpbjpzKHtuYW1lOlwidGFibGVcIix0cmFjZTohMH0pLGNvbHVtbndpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsYXJyYXlPazohMCxkZmx0Om51bGx9LGNvbHVtbm9yZGVyOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwifSxoZWFkZXI6e3ZhbHVlczp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixkZmx0OltdfSxmb3JtYXQ6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZGZsdDpbXX0scHJlZml4Ont2YWxUeXBlOlwic3RyaW5nXCIsYXJyYXlPazohMCxkZmx0Om51bGx9LHN1ZmZpeDp7dmFsVHlwZTpcInN0cmluZ1wiLGFycmF5T2s6ITAsZGZsdDpudWxsfSxoZWlnaHQ6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjI4fSxhbGlnbjppKHt9LG4uYWxpZ24se2FycmF5T2s6ITB9KSxsaW5lOnt3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLGFycmF5T2s6ITAsZGZsdDoxfSxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsYXJyYXlPazohMCxkZmx0OlwiZ3JleVwifX0sZmlsbDp7Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGFycmF5T2s6ITAsZGZsdDpcIndoaXRlXCJ9fSxmb250Omkoe30sbyh7YXJyYXlPazohMH0pKX0sY2VsbHM6e3ZhbHVlczp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixkZmx0OltdfSxmb3JtYXQ6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZGZsdDpbXX0scHJlZml4Ont2YWxUeXBlOlwic3RyaW5nXCIsYXJyYXlPazohMCxkZmx0Om51bGx9LHN1ZmZpeDp7dmFsVHlwZTpcInN0cmluZ1wiLGFycmF5T2s6ITAsZGZsdDpudWxsfSxoZWlnaHQ6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjIwfSxhbGlnbjppKHt9LG4uYWxpZ24se2FycmF5T2s6ITB9KSxsaW5lOnt3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLGFycmF5T2s6ITAsZGZsdDoxfSxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsYXJyYXlPazohMCxkZmx0OlwiZ3JleVwifX0sZmlsbDp7Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGFycmF5T2s6ITAsZGZsdDpcIndoaXRlXCJ9fSxmb250Omkoe30sbyh7YXJyYXlPazohMH0pKX19LFwiY2FsY1wiLFwiZnJvbS1yb290XCIpKS50cmFuc2Zvcm1zPXZvaWQgMH0se1wiLi4vLi4vY29tcG9uZW50cy9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzXCI6NTYxLFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi8uLi9wbG90cy9kb21haW5cIjo3NzQsXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIjo3NzV9XSwxMTU1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCIpLmdldE1vZHVsZUNhbGNEYXRhLGk9dChcIi4vcGxvdFwiKTtyLm5hbWU9XCJ0YWJsZVwiLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT1uKHQuY2FsY2RhdGEsXCJ0YWJsZVwiKVswXTtlLmxlbmd0aCYmaSh0LGUpfSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4uX2hhcyYmbi5faGFzKFwidGFibGVcIiksYT1lLl9oYXMmJmUuX2hhcyhcInRhYmxlXCIpO2kmJiFhJiZuLl9wYXBlcmRpdi5zZWxlY3RBbGwoXCIudGFibGVcIikucmVtb3ZlKCl9fSx7XCIuLi8uLi9wbG90cy9nZXRfZGF0YVwiOjc4NCxcIi4vcGxvdFwiOjExNjJ9XSwxMTU2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYi9ndXBcIikud3JhcDtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gbih7fSl9fSx7XCIuLi8uLi9saWIvZ3VwXCI6Njk5fV0sMTE1NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17Y2VsbFBhZDo4LGNvbHVtbkV4dGVudE9mZnNldDoxMCxjb2x1bW5UaXRsZU9mZnNldDoyOCxlbXB0eUhlYWRlckhlaWdodDoxNixsYXRleENoZWNrOi9eXFwkLipcXCQkLyxnb2xkZW5SYXRpbzoxLjYxOCxsaW5lQnJlYWtlcjpcIjxicj5cIixtYXhEaW1lbnNpb25Db3VudDo2MCxvdmVyZHJhZzo0NSxyZWxlYXNlVHJhbnNpdGlvbkR1cmF0aW9uOjEyMCxyZWxlYXNlVHJhbnNpdGlvbkVhc2U6XCJjdWJpYy1vdXRcIixzY3JvbGxiYXJDYXB0dXJlV2lkdGg6MTgsc2Nyb2xsYmFySGlkZURlbGF5OjFlMyxzY3JvbGxiYXJIaWRlRHVyYXRpb246MWUzLHNjcm9sbGJhck9mZnNldDo1LHNjcm9sbGJhcldpZHRoOjgsdHJhbnNpdGlvbkR1cmF0aW9uOjEwMCx0cmFuc2l0aW9uRWFzZTpcImN1YmljLW91dFwiLHVwbGlmdDo1LHdyYXBTcGFjZXI6XCIgXCIsd3JhcFNwbGl0Q2hhcmFjdGVyOlwiIFwiLGNuOnt0YWJsZTpcInRhYmxlXCIsdGFibGVDb250cm9sVmlldzpcInRhYmxlLWNvbnRyb2wtdmlld1wiLHNjcm9sbEJhY2tncm91bmQ6XCJzY3JvbGwtYmFja2dyb3VuZFwiLHlDb2x1bW46XCJ5LWNvbHVtblwiLGNvbHVtbkJsb2NrOlwiY29sdW1uLWJsb2NrXCIsc2Nyb2xsQXJlYUNsaXA6XCJzY3JvbGwtYXJlYS1jbGlwXCIsc2Nyb2xsQXJlYUNsaXBSZWN0Olwic2Nyb2xsLWFyZWEtY2xpcC1yZWN0XCIsY29sdW1uQm91bmRhcnk6XCJjb2x1bW4tYm91bmRhcnlcIixjb2x1bW5Cb3VuZGFyeUNsaXBwYXRoOlwiY29sdW1uLWJvdW5kYXJ5LWNsaXBwYXRoXCIsY29sdW1uQm91bmRhcnlSZWN0OlwiY29sdW1uLWJvdW5kYXJ5LXJlY3RcIixjb2x1bW5DZWxsczpcImNvbHVtbi1jZWxsc1wiLGNvbHVtbkNlbGw6XCJjb2x1bW4tY2VsbFwiLGNlbGxSZWN0OlwiY2VsbC1yZWN0XCIsY2VsbFRleHQ6XCJjZWxsLXRleHRcIixjZWxsVGV4dEhvbGRlcjpcImNlbGwtdGV4dC1ob2xkZXJcIixzY3JvbGxiYXJLaXQ6XCJzY3JvbGxiYXIta2l0XCIsc2Nyb2xsYmFyOlwic2Nyb2xsYmFyXCIsc2Nyb2xsYmFyU2xpZGVyOlwic2Nyb2xsYmFyLXNsaWRlclwiLHNjcm9sbGJhckdseXBoOlwic2Nyb2xsYmFyLWdseXBoXCIsc2Nyb2xsYmFyQ2FwdHVyZVpvbmU6XCJzY3JvbGxiYXItY2FwdHVyZS16b25lXCJ9fX0se31dLDExNTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9jb25zdGFudHNcIiksaT10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LGE9dChcImZhc3QtaXNudW1lcmljXCIpO2Z1bmN0aW9uIG8odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKWU9TWF0aC5tYXgoZSxvKHRbcl0pKTtyZXR1cm4gZX1yZXR1cm4gdH1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIHQrZX1mdW5jdGlvbiBsKHQpe3ZhciBlLHI9dC5zbGljZSgpLG49MS8wLGk9MDtmb3IoZT0wO2U8ci5sZW5ndGg7ZSsrKUFycmF5LmlzQXJyYXkocltlXSl8fChyW2VdPVtyW2VdXSksbj1NYXRoLm1pbihuLHJbZV0ubGVuZ3RoKSxpPU1hdGgubWF4KGkscltlXS5sZW5ndGgpO2lmKG4hPT1pKWZvcihlPTA7ZTxyLmxlbmd0aDtlKyspe3ZhciBhPWktcltlXS5sZW5ndGg7YSYmKHJbZV09cltlXS5jb25jYXQoYyhhKSkpfXJldHVybiByfWZ1bmN0aW9uIGModCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPVwiXCI7cmV0dXJuIGV9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC5jYWxjZGF0YS5jb2x1bW5zLnJlZHVjZShmdW5jdGlvbihlLHIpe3JldHVybiByLnhJbmRleDx0LnhJbmRleD9lK3IuY29sdW1uV2lkdGg6ZX0sMCl9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBPYmplY3Qua2V5cyh0KS5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIGkoe30sdFtyXSx7YXV4aWxpYXJ5QmxvY2tzOmV9KX0pfWZ1bmN0aW9uIGYodCxlKXtmb3IodmFyIHIsbj17fSxpPTAsYT0wLG89e2ZpcnN0Um93SW5kZXg6bnVsbCxsYXN0Um93SW5kZXg6bnVsbCxyb3dzOltdfSxzPTAsbD0wLGM9MDtjPHQubGVuZ3RoO2MrKylyPXRbY10sby5yb3dzLnB1c2goe3Jvd0luZGV4OmMscm93SGVpZ2h0OnJ9KSwoKGErPXIpPj1lfHxjPT09dC5sZW5ndGgtMSkmJihuW2ldPW8sby5rZXk9bCsrLG8uZmlyc3RSb3dJbmRleD1zLG8ubGFzdFJvd0luZGV4PWMsbz17Zmlyc3RSb3dJbmRleDpudWxsLGxhc3RSb3dJbmRleDpudWxsLHJvd3M6W119LGkrPWEscz1jKzEsYT0wKTtyZXR1cm4gbn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1sKGUuY2VsbHMudmFsdWVzKSxwPWZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKGUuaGVhZGVyLnZhbHVlcy5sZW5ndGgsdC5sZW5ndGgpfSxkPWwoZS5oZWFkZXIudmFsdWVzKTtkLmxlbmd0aCYmIWRbMF0ubGVuZ3RoJiYoZFswXT1bXCJcIl0sZD1sKGQpKTt2YXIgZz1kLmNvbmNhdChwKHIpLm1hcChmdW5jdGlvbigpe3JldHVybiBjKChkWzBdfHxbXCJcIl0pLmxlbmd0aCl9KSksdj1lLmRvbWFpbixtPU1hdGguZmxvb3IodC5fZnVsbExheW91dC5fc2l6ZS53Kih2LnhbMV0tdi54WzBdKSkseT1NYXRoLmZsb29yKHQuX2Z1bGxMYXlvdXQuX3NpemUuaCoodi55WzFdLXYueVswXSkpLHg9ZS5oZWFkZXIudmFsdWVzLmxlbmd0aD9nWzBdLm1hcChmdW5jdGlvbigpe3JldHVybiBlLmhlYWRlci5oZWlnaHR9KTpbbi5lbXB0eUhlYWRlckhlaWdodF0sYj1yLmxlbmd0aD9yWzBdLm1hcChmdW5jdGlvbigpe3JldHVybiBlLmNlbGxzLmhlaWdodH0pOltdLF89eC5yZWR1Y2UocywwKSx3PWYoYix5LV8rbi51cGxpZnQpLGs9aChmKHgsXyksW10pLEE9aCh3LGspLFQ9e30sTT1lLl9mdWxsSW5wdXQuY29sdW1ub3JkZXIuY29uY2F0KHAoci5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pKSksUz1nLm1hcChmdW5jdGlvbih0LHIpe3ZhciBuPUFycmF5LmlzQXJyYXkoZS5jb2x1bW53aWR0aCk/ZS5jb2x1bW53aWR0aFtNYXRoLm1pbihyLGUuY29sdW1ud2lkdGgubGVuZ3RoLTEpXTplLmNvbHVtbndpZHRoO3JldHVybiBhKG4pP051bWJlcihuKToxfSksRT1TLnJlZHVjZShzLDApO1M9Uy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQvRSptfSk7dmFyIEM9TWF0aC5tYXgobyhlLmhlYWRlci5saW5lLndpZHRoKSxvKGUuY2VsbHMubGluZS53aWR0aCkpLEw9e2tleTplLnVpZCt0Ll9jb250ZXh0LnN0YXRpY1Bsb3QsdHJhbnNsYXRlWDp2LnhbMF0qdC5fZnVsbExheW91dC5fc2l6ZS53LHRyYW5zbGF0ZVk6dC5fZnVsbExheW91dC5fc2l6ZS5oKigxLXYueVsxXSksc2l6ZTp0Ll9mdWxsTGF5b3V0Ll9zaXplLHdpZHRoOm0sbWF4TGluZVdpZHRoOkMsaGVpZ2h0OnksY29sdW1uT3JkZXI6TSxncm91cEhlaWdodDp5LHJvd0Jsb2NrczpBLGhlYWRlclJvd0Jsb2NrczprLHNjcm9sbFk6MCxjZWxsczppKHt9LGUuY2VsbHMse3ZhbHVlczpyfSksaGVhZGVyQ2VsbHM6aSh7fSxlLmhlYWRlcix7dmFsdWVzOmd9KSxnZENvbHVtbnM6Zy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSxnZENvbHVtbnNPcmlnaW5hbE9yZGVyOmcubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkscHJldlBhZ2VzOlswLDBdLHNjcm9sbGJhclN0YXRlOntzY3JvbGxiYXJTY3JvbGxJblByb2dyZXNzOiExfSxjb2x1bW5zOmcubWFwKGZ1bmN0aW9uKHQsZSl7dmFyIHI9VFt0XTtyZXR1cm4gVFt0XT0ocnx8MCkrMSx7a2V5OnQrXCJfX1wiK1RbdF0sbGFiZWw6dCxzcGVjSW5kZXg6ZSx4SW5kZXg6TVtlXSx4U2NhbGU6dSx4OnZvaWQgMCxjYWxjZGF0YTp2b2lkIDAsY29sdW1uV2lkdGg6U1tlXX19KX07cmV0dXJuIEwuY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY2FsY2RhdGE9TCx0Lng9dSh0KX0pLEx9fSx7XCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi9jb25zdGFudHNcIjoxMTU3LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSwxMTU5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdDtyLnNwbGl0VG9QYW5lbHM9ZnVuY3Rpb24odCl7dmFyIGU9WzAsMF0scj1uKHt9LHQse2tleTpcImhlYWRlclwiLHR5cGU6XCJoZWFkZXJcIixwYWdlOjAscHJldlBhZ2VzOmUsY3VycmVudFJlcGFpbnQ6W251bGwsbnVsbF0sZHJhZ0hhbmRsZTohMCx2YWx1ZXM6dC5jYWxjZGF0YS5oZWFkZXJDZWxscy52YWx1ZXNbdC5zcGVjSW5kZXhdLHJvd0Jsb2Nrczp0LmNhbGNkYXRhLmhlYWRlclJvd0Jsb2NrcyxjYWxjZGF0YTpuKHt9LHQuY2FsY2RhdGEse2NlbGxzOnQuY2FsY2RhdGEuaGVhZGVyQ2VsbHN9KX0pO3JldHVybltuKHt9LHQse2tleTpcImNlbGxzMVwiLHR5cGU6XCJjZWxsc1wiLHBhZ2U6MCxwcmV2UGFnZXM6ZSxjdXJyZW50UmVwYWludDpbbnVsbCxudWxsXSxkcmFnSGFuZGxlOiExLHZhbHVlczp0LmNhbGNkYXRhLmNlbGxzLnZhbHVlc1t0LnNwZWNJbmRleF0scm93QmxvY2tzOnQuY2FsY2RhdGEucm93QmxvY2tzfSksbih7fSx0LHtrZXk6XCJjZWxsczJcIix0eXBlOlwiY2VsbHNcIixwYWdlOjEscHJldlBhZ2VzOmUsY3VycmVudFJlcGFpbnQ6W251bGwsbnVsbF0sZHJhZ0hhbmRsZTohMSx2YWx1ZXM6dC5jYWxjZGF0YS5jZWxscy52YWx1ZXNbdC5zcGVjSW5kZXhdLHJvd0Jsb2Nrczp0LmNhbGNkYXRhLnJvd0Jsb2Nrc30pLHJdfSxyLnNwbGl0VG9DZWxscz1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZT10LnJvd0Jsb2Nrc1t0LnBhZ2VdLHI9ZT9lLnJvd3NbMF0ucm93SW5kZXg6MCxuPWU/citlLnJvd3MubGVuZ3RoOjA7cmV0dXJuW3Isbl19KHQpO3JldHVybih0LnZhbHVlc3x8W10pLnNsaWNlKGVbMF0sZVsxXSkubWFwKGZ1bmN0aW9uKHIsbil7cmV0dXJue2tleVdpdGhpbkJsb2NrOm4rKFwic3RyaW5nXCI9PXR5cGVvZiByJiZyLm1hdGNoKC9bPCQmPiBdLyk/XCJfa2V5YnVzdGVyX1wiK01hdGgucmFuZG9tKCk6XCJcIiksa2V5OmVbMF0rbixjb2x1bW46dCxjYWxjZGF0YTp0LmNhbGNkYXRhLHBhZ2U6dC5wYWdlLHJvd0Jsb2Nrczp0LnJvd0Jsb2Nrcyx2YWx1ZTpyfX0pfX0se1wiLi4vLi4vbGliL2V4dGVuZFwiOjY5MX1dLDExNjA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9wbG90cy9kb21haW5cIikuZGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHMocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1hKGUsbyxzKSxzKFwiY29sdW1ud2lkdGhcIikscyhcImhlYWRlci52YWx1ZXNcIikscyhcImhlYWRlci5mb3JtYXRcIikscyhcImhlYWRlci5hbGlnblwiKSxzKFwiaGVhZGVyLnByZWZpeFwiKSxzKFwiaGVhZGVyLnN1ZmZpeFwiKSxzKFwiaGVhZGVyLmhlaWdodFwiKSxzKFwiaGVhZGVyLmxpbmUud2lkdGhcIikscyhcImhlYWRlci5saW5lLmNvbG9yXCIpLHMoXCJoZWFkZXIuZmlsbC5jb2xvclwiKSxuLmNvZXJjZUZvbnQocyxcImhlYWRlci5mb250XCIsbi5leHRlbmRGbGF0KHt9LG8uZm9udCkpLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29sdW1ub3JkZXJ8fFtdLG49dC5oZWFkZXIudmFsdWVzLmxlbmd0aCxpPXIuc2xpY2UoMCxuKSxhPWkuc2xpY2UoKS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pLG89aS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGEuaW5kZXhPZih0KX0pLHM9by5sZW5ndGg7czxuO3MrKylvLnB1c2gocyk7ZShcImNvbHVtbm9yZGVyXCIsbyl9KGUscykscyhcImNlbGxzLnZhbHVlc1wiKSxzKFwiY2VsbHMuZm9ybWF0XCIpLHMoXCJjZWxscy5hbGlnblwiKSxzKFwiY2VsbHMucHJlZml4XCIpLHMoXCJjZWxscy5zdWZmaXhcIikscyhcImNlbGxzLmhlaWdodFwiKSxzKFwiY2VsbHMubGluZS53aWR0aFwiKSxzKFwiY2VsbHMubGluZS5jb2xvclwiKSxzKFwiY2VsbHMuZmlsbC5jb2xvclwiKSxuLmNvZXJjZUZvbnQocyxcImNlbGxzLmZvbnRcIixuLmV4dGVuZEZsYXQoe30sby5mb250KSksZS5fbGVuZ3RoPW51bGx9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9kb21haW5cIjo3NzQsXCIuL2F0dHJpYnV0ZXNcIjoxMTU0fV0sMTE2MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIiksbi5jYWxjPXQoXCIuL2NhbGNcIiksbi5wbG90PXQoXCIuL3Bsb3RcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJ0YWJsZVwiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4vYmFzZV9wbG90XCIpLG4uY2F0ZWdvcmllcz1bXCJub09wYWNpdHlcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuL2F0dHJpYnV0ZXNcIjoxMTU0LFwiLi9iYXNlX3Bsb3RcIjoxMTU1LFwiLi9jYWxjXCI6MTE1NixcIi4vZGVmYXVsdHNcIjoxMTYwLFwiLi9wbG90XCI6MTE2Mn1dLDExNjI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9jb25zdGFudHNcIiksaT10KFwiZDNcIiksYT10KFwiLi4vLi4vbGliL2d1cFwiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIikscz10KFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCIpLGw9dChcIi4uLy4uL2xpYlwiKS5yYWlzZVRvVG9wLGM9dChcIi4uLy4uL2xpYlwiKS5jYW5jZWxUcmFuc2l0aW9uLHU9dChcIi4vZGF0YV9wcmVwYXJhdGlvbl9oZWxwZXJcIiksaD10KFwiLi9kYXRhX3NwbGl0X2hlbHBlcnNcIiksZj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKTtmdW5jdGlvbiBwKHQpe3JldHVybiBNYXRoLmNlaWwodC5jYWxjZGF0YS5tYXhMaW5lV2lkdGgvMil9ZnVuY3Rpb24gZCh0LGUpe3JldHVyblwiY2xpcFwiK3QuX2Z1bGxMYXlvdXQuX3VpZCtcIl9zY3JvbGxBcmVhQm90dG9tQ2xpcF9cIitlLmtleX1mdW5jdGlvbiBnKHQsZSl7cmV0dXJuXCJjbGlwXCIrdC5fZnVsbExheW91dC5fdWlkK1wiX2NvbHVtbkJvdW5kYXJ5Q2xpcHBhdGhfXCIrZS5jYWxjZGF0YS5rZXkrXCJfXCIrZS5zcGVjSW5kZXh9ZnVuY3Rpb24gdih0KXtyZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9fZGF0YV9ffSl9ZnVuY3Rpb24gbSh0LGUscil7dmFyIG89dC5zZWxlY3RBbGwoXCIuXCIrbi5jbi5zY3JvbGxiYXJLaXQpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO28uZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQobi5jbi5zY3JvbGxiYXJLaXQsITApLnN0eWxlKFwic2hhcGUtcmVuZGVyaW5nXCIsXCJnZW9tZXRyaWNQcmVjaXNpb25cIiksby5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2Nyb2xsYmFyU3RhdGU7ZS50b3RhbEhlaWdodD1mdW5jdGlvbih0KXt2YXIgZT10LnJvd0Jsb2NrcztyZXR1cm4gSShlLGUubGVuZ3RoLTEpKyhlLmxlbmd0aD9EKGVbZS5sZW5ndGgtMV0sMS8wKToxKX0odCksZS5zY3JvbGxhYmxlQXJlYUhlaWdodD10Lmdyb3VwSGVpZ2h0LVQodCksZS5jdXJyZW50bHlWaXNpYmxlSGVpZ2h0PU1hdGgubWluKGUudG90YWxIZWlnaHQsZS5zY3JvbGxhYmxlQXJlYUhlaWdodCksZS5yYXRpbz1lLmN1cnJlbnRseVZpc2libGVIZWlnaHQvZS50b3RhbEhlaWdodCxlLmJhckxlbmd0aD1NYXRoLm1heChlLnJhdGlvKmUuY3VycmVudGx5VmlzaWJsZUhlaWdodCxuLmdvbGRlblJhdGlvKm4uc2Nyb2xsYmFyV2lkdGgpLGUuYmFyV2lnZ2xlUm9vbT1lLmN1cnJlbnRseVZpc2libGVIZWlnaHQtZS5iYXJMZW5ndGgsZS53aWdnbGVSb29tPU1hdGgubWF4KDAsZS50b3RhbEhlaWdodC1lLnNjcm9sbGFibGVBcmVhSGVpZ2h0KSxlLnRvcFk9MD09PWUuYmFyV2lnZ2xlUm9vbT8wOnQuc2Nyb2xsWS9lLndpZ2dsZVJvb20qZS5iYXJXaWdnbGVSb29tLGUuYm90dG9tWT1lLnRvcFkrZS5iYXJMZW5ndGgsZS5kcmFnTXVsdGlwbGllcj1lLndpZ2dsZVJvb20vZS5iYXJXaWdnbGVSb29tfSkuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKFwiKyh0LndpZHRoK24uc2Nyb2xsYmFyV2lkdGgvMituLnNjcm9sbGJhck9mZnNldCkrXCIgXCIrVCh0KStcIilcIn0pO3ZhciBzPW8uc2VsZWN0QWxsKFwiLlwiK24uY24uc2Nyb2xsYmFyKS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKTtzLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKG4uY24uc2Nyb2xsYmFyLCEwKTt2YXIgbD1zLnNlbGVjdEFsbChcIi5cIituLmNuLnNjcm9sbGJhclNsaWRlcikuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7bC5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChuLmNuLnNjcm9sbGJhclNsaWRlciwhMCksbC5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoMCBcIisodC5zY3JvbGxiYXJTdGF0ZS50b3BZfHwwKStcIilcIn0pO3ZhciBjPWwuc2VsZWN0QWxsKFwiLlwiK24uY24uc2Nyb2xsYmFyR2x5cGgpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO2MuZW50ZXIoKS5hcHBlbmQoXCJsaW5lXCIpLmNsYXNzZWQobi5jbi5zY3JvbGxiYXJHbHlwaCwhMCkuYXR0cihcInN0cm9rZVwiLFwiYmxhY2tcIikuYXR0cihcInN0cm9rZS13aWR0aFwiLG4uc2Nyb2xsYmFyV2lkdGgpLmF0dHIoXCJzdHJva2UtbGluZWNhcFwiLFwicm91bmRcIikuYXR0cihcInkxXCIsbi5zY3JvbGxiYXJXaWR0aC8yKSxjLmF0dHIoXCJ5MlwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnNjcm9sbGJhclN0YXRlLmJhckxlbmd0aC1uLnNjcm9sbGJhcldpZHRoLzJ9KS5hdHRyKFwic3Ryb2tlLW9wYWNpdHlcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW5EcmFnSW5Qcm9ncmVzc3x8IXQuc2Nyb2xsYmFyU3RhdGUuYmFyV2lnZ2xlUm9vbXx8cj8wOi40fSksYy50cmFuc2l0aW9uKCkuZGVsYXkoMCkuZHVyYXRpb24oMCksYy50cmFuc2l0aW9uKCkuZGVsYXkobi5zY3JvbGxiYXJIaWRlRGVsYXkpLmR1cmF0aW9uKG4uc2Nyb2xsYmFySGlkZUR1cmF0aW9uKS5hdHRyKFwic3Ryb2tlLW9wYWNpdHlcIiwwKTt2YXIgdT1zLnNlbGVjdEFsbChcIi5cIituLmNuLnNjcm9sbGJhckNhcHR1cmVab25lKS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKTt1LmVudGVyKCkuYXBwZW5kKFwibGluZVwiKS5jbGFzc2VkKG4uY24uc2Nyb2xsYmFyQ2FwdHVyZVpvbmUsITApLmF0dHIoXCJzdHJva2VcIixcIndoaXRlXCIpLmF0dHIoXCJzdHJva2Utb3BhY2l0eVwiLC4wMSkuYXR0cihcInN0cm9rZS13aWR0aFwiLG4uc2Nyb2xsYmFyQ2FwdHVyZVdpZHRoKS5hdHRyKFwic3Ryb2tlLWxpbmVjYXBcIixcImJ1dHRcIikuYXR0cihcInkxXCIsMCkub24oXCJtb3VzZWRvd25cIixmdW5jdGlvbihyKXt2YXIgbj1pLmV2ZW50LnksYT10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89ci5zY3JvbGxiYXJTdGF0ZSxzPW4tYS50b3AsbD1pLnNjYWxlLmxpbmVhcigpLmRvbWFpbihbMCxvLnNjcm9sbGFibGVBcmVhSGVpZ2h0XSkucmFuZ2UoWzAsby50b3RhbEhlaWdodF0pLmNsYW1wKCEwKTtvLnRvcFk8PXMmJnM8PW8uYm90dG9tWXx8UyhlLHQsbnVsbCxsKHMtby5iYXJMZW5ndGgvMikpKHIpfSkuY2FsbChpLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oZnVuY3Rpb24odCl7cmV0dXJuIGkuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCksdC5zY3JvbGxiYXJTdGF0ZS5zY3JvbGxiYXJTY3JvbGxJblByb2dyZXNzPSEwLHR9KS5vbihcImRyYWdcIixTKGUsdCkpLm9uKFwiZHJhZ2VuZFwiLGZ1bmN0aW9uKCl7fSkpLHUuYXR0cihcInkyXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuc2Nyb2xsYmFyU3RhdGUuc2Nyb2xsYWJsZUFyZWFIZWlnaHR9KSxlLl9jb250ZXh0LnN0YXRpY1Bsb3QmJihjLnJlbW92ZSgpLHUucmVtb3ZlKCkpfWZ1bmN0aW9uIHkodCxlLHIscyl7dmFyIGw9ZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoXCIuXCIrbi5jbi5jb2x1bW5DZWxsKS5kYXRhKGguc3BsaXRUb0NlbGxzLGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleVdpdGhpbkJsb2NrfSk7cmV0dXJuIGUuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQobi5jbi5jb2x1bW5DZWxsLCEwKSxlLmV4aXQoKS5yZW1vdmUoKSxlfShmdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbChcIi5cIituLmNuLmNvbHVtbkNlbGxzKS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKTtyZXR1cm4gZS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChuLmNuLmNvbHVtbkNlbGxzLCEwKSxlLmV4aXQoKS5yZW1vdmUoKSxlfShyKSk7IWZ1bmN0aW9uKHQpe3QuZWFjaChmdW5jdGlvbih0LGUpe3ZhciByPXQuY2FsY2RhdGEuY2VsbHMuZm9udCxuPXQuY29sdW1uLnNwZWNJbmRleCxpPXtzaXplOl8oci5zaXplLG4sZSksY29sb3I6XyhyLmNvbG9yLG4sZSksZmFtaWx5Ol8oci5mYW1pbHksbixlKX07dC5yb3dOdW1iZXI9dC5rZXksdC5hbGlnbj1fKHQuY2FsY2RhdGEuY2VsbHMuYWxpZ24sbixlKSx0LmNlbGxCb3JkZXJXaWR0aD1fKHQuY2FsY2RhdGEuY2VsbHMubGluZS53aWR0aCxuLGUpLHQuZm9udD1pfSl9KGwpLGZ1bmN0aW9uKHQpe3QuYXR0cihcIndpZHRoXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sdW1uLmNvbHVtbldpZHRofSkuYXR0cihcInN0cm9rZS13aWR0aFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNlbGxCb3JkZXJXaWR0aH0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9aS5zZWxlY3QodGhpcyk7Zi5zdHJva2UoZSxfKHQuY2FsY2RhdGEuY2VsbHMubGluZS5jb2xvcix0LmNvbHVtbi5zcGVjSW5kZXgsdC5yb3dOdW1iZXIpKSxmLmZpbGwoZSxfKHQuY2FsY2RhdGEuY2VsbHMuZmlsbC5jb2xvcix0LmNvbHVtbi5zcGVjSW5kZXgsdC5yb3dOdW1iZXIpKX0pfShmdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbChcIi5cIituLmNuLmNlbGxSZWN0KS5kYXRhKGEucmVwZWF0LGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleVdpdGhpbkJsb2NrfSk7cmV0dXJuIGUuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpLmNsYXNzZWQobi5jbi5jZWxsUmVjdCwhMCksZX0obCkpO3ZhciBjPWZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0QWxsKFwiLlwiK24uY24uY2VsbFRleHQpLmRhdGEoYS5yZXBlYXQsZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5V2l0aGluQmxvY2t9KTtyZXR1cm4gZS5lbnRlcigpLmFwcGVuZChcInRleHRcIikuY2xhc3NlZChuLmNuLmNlbGxUZXh0LCEwKS5zdHlsZShcImN1cnNvclwiLGZ1bmN0aW9uKCl7cmV0dXJuXCJhdXRvXCJ9KS5vbihcIm1vdXNlZG93blwiLGZ1bmN0aW9uKCl7aS5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0pLGV9KGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0QWxsKFwiLlwiK24uY24uY2VsbFRleHRIb2xkZXIpLmRhdGEoYS5yZXBlYXQsZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5V2l0aGluQmxvY2t9KTtyZXR1cm4gZS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChuLmNuLmNlbGxUZXh0SG9sZGVyLCEwKS5zdHlsZShcInNoYXBlLXJlbmRlcmluZ1wiLFwiZ2VvbWV0cmljUHJlY2lzaW9uXCIpLGV9KGwpKTshZnVuY3Rpb24odCl7dC5lYWNoKGZ1bmN0aW9uKHQpe28uZm9udChpLnNlbGVjdCh0aGlzKSx0LmZvbnQpfSl9KGMpLHgoYyxlLHMsdCksTyhsKX1mdW5jdGlvbiB4KHQsZSxyLGEpe3QudGV4dChmdW5jdGlvbih0KXt2YXIgZT10LmNvbHVtbi5zcGVjSW5kZXgscj10LnJvd051bWJlcixhPXQudmFsdWUsbz1cInN0cmluZ1wiPT10eXBlb2YgYSxzPW8mJmEubWF0Y2goLzxicj4vaSksbD0hb3x8czt0Lm1heUhhdmVNYXJrdXA9byYmYS5tYXRjaCgvWzwmPl0vKTt2YXIgYyx1PVwic3RyaW5nXCI9PXR5cGVvZihjPWEpJiZjLm1hdGNoKG4ubGF0ZXhDaGVjayk7dC5sYXRleD11O3ZhciBoLGYscD11P1wiXCI6Xyh0LmNhbGNkYXRhLmNlbGxzLnByZWZpeCxlLHIpfHxcIlwiLGQ9dT9cIlwiOl8odC5jYWxjZGF0YS5jZWxscy5zdWZmaXgsZSxyKXx8XCJcIixnPXU/bnVsbDpfKHQuY2FsY2RhdGEuY2VsbHMuZm9ybWF0LGUscil8fG51bGwsdj1wKyhnP2kuZm9ybWF0KGcpKHQudmFsdWUpOnQudmFsdWUpK2Q7aWYodC53cmFwcGluZ05lZWRlZD0hdC53cmFwcGVkJiYhbCYmIXUmJihoPWIodikpLHQuY2VsbEhlaWdodE1heUluY3JlYXNlPXN8fHV8fHQubWF5SGF2ZU1hcmt1cHx8KHZvaWQgMD09PWg/Yih2KTpoKSx0Lm5lZWRzQ29udmVydFRvVHNwYW5zPXQubWF5SGF2ZU1hcmt1cHx8dC53cmFwcGluZ05lZWRlZHx8dC5sYXRleCx0LndyYXBwaW5nTmVlZGVkKXt2YXIgbT0oXCIgXCI9PT1uLndyYXBTcGxpdENoYXJhY3Rlcj92LnJlcGxhY2UoLzxhIGhyZWY9L2dpLFwiPGFfaHJlZj1cIik6dikuc3BsaXQobi53cmFwU3BsaXRDaGFyYWN0ZXIpLHk9XCIgXCI9PT1uLndyYXBTcGxpdENoYXJhY3Rlcj9tLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC88YV9ocmVmPS9naSxcIjxhIGhyZWY9XCIpfSk6bTt0LmZyYWdtZW50cz15Lm1hcChmdW5jdGlvbih0KXtyZXR1cm57dGV4dDp0LHdpZHRoOm51bGx9fSksdC5mcmFnbWVudHMucHVzaCh7ZnJhZ21lbnQ6bi53cmFwU3BhY2VyLHdpZHRoOm51bGx9KSxmPXkuam9pbihuLmxpbmVCcmVha2VyKStuLmxpbmVCcmVha2VyK24ud3JhcFNwYWNlcn1lbHNlIGRlbGV0ZSB0LmZyYWdtZW50cyxmPXY7cmV0dXJuIGZ9KS5hdHRyKFwiZHlcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5uZWVkc0NvbnZlcnRUb1RzcGFucz8wOlwiMC43NWVtXCJ9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBvPWkuc2VsZWN0KHRoaXMpLGw9dC53cmFwcGluZ05lZWRlZD9DOkw7dC5uZWVkc0NvbnZlcnRUb1RzcGFucz9zLmNvbnZlcnRUb1RzcGFucyhvLGEsbChyLHRoaXMsZSxhLHQpKTppLnNlbGVjdCh0aGlzLnBhcmVudE5vZGUpLmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXtyZXR1cm5cInRyYW5zbGF0ZShcIit6KHQpK1wiIFwiK24uY2VsbFBhZCtcIilcIn0pLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLGZ1bmN0aW9uKHQpe3JldHVybntsZWZ0Olwic3RhcnRcIixjZW50ZXI6XCJtaWRkbGVcIixyaWdodDpcImVuZFwifVt0LmFsaWduXX0pfSl9ZnVuY3Rpb24gYih0KXtyZXR1cm4tMSE9PXQuaW5kZXhPZihuLndyYXBTcGxpdENoYXJhY3Rlcil9ZnVuY3Rpb24gXyh0LGUscil7aWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIG49dFtNYXRoLm1pbihlLHQubGVuZ3RoLTEpXTtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uW01hdGgubWluKHIsbi5sZW5ndGgtMSldOm59cmV0dXJuIHR9ZnVuY3Rpb24gdyh0LGUscil7dC50cmFuc2l0aW9uKCkuZWFzZShuLnJlbGVhc2VUcmFuc2l0aW9uRWFzZSkuZHVyYXRpb24obi5yZWxlYXNlVHJhbnNpdGlvbkR1cmF0aW9uKS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrZS54K1wiIFwiK3IrXCIpXCIpfWZ1bmN0aW9uIGsodCl7cmV0dXJuXCJjZWxsc1wiPT09dC50eXBlfWZ1bmN0aW9uIEEodCl7cmV0dXJuXCJoZWFkZXJcIj09PXQudHlwZX1mdW5jdGlvbiBUKHQpe3JldHVybih0LnJvd0Jsb2Nrcy5sZW5ndGg/dC5yb3dCbG9ja3NbMF0uYXV4aWxpYXJ5QmxvY2tzOltdKS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtEKGUsMS8wKX0sMCl9ZnVuY3Rpb24gTSh0LGUscil7dmFyIG49dihlKVswXTtpZih2b2lkIDAhPT1uKXt2YXIgaT1uLnJvd0Jsb2NrcyxhPW4uY2FsY2RhdGEsbz1JKGksaS5sZW5ndGgpLHM9bi5jYWxjZGF0YS5ncm91cEhlaWdodC1UKG4pLGw9YS5zY3JvbGxZPU1hdGgubWF4KDAsTWF0aC5taW4oby1zLGEuc2Nyb2xsWSkpLGM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1bXSxpPTAsYT0wO2E8dC5sZW5ndGg7YSsrKXtmb3IodmFyIG89dFthXSxzPW8ucm93cyxsPTAsYz0wO2M8cy5sZW5ndGg7YysrKWwrPXNbY10ucm93SGVpZ2h0O28uYWxsUm93c0hlaWdodD1sLGU8aStsJiZlK3I+aSYmbi5wdXNoKGEpLGkrPWx9cmV0dXJuIG59KGksbCxzKTsxPT09Yy5sZW5ndGgmJihjWzBdPT09aS5sZW5ndGgtMT9jLnVuc2hpZnQoY1swXS0xKTpjLnB1c2goY1swXSsxKSksY1swXSUyJiZjLnJldmVyc2UoKSxlLmVhY2goZnVuY3Rpb24odCxlKXt0LnBhZ2U9Y1tlXSx0LnNjcm9sbFk9bH0pLGUuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKDAgXCIrKEkodC5yb3dCbG9ja3MsdC5wYWdlKS10LnNjcm9sbFkpK1wiKVwifSksdCYmKEUodCxyLGUsYyxuLnByZXZQYWdlcyxuLDApLEUodCxyLGUsYyxuLnByZXZQYWdlcyxuLDEpLG0ocix0KSl9fWZ1bmN0aW9uIFModCxlLHIsYSl7cmV0dXJuIGZ1bmN0aW9uKG8pe3ZhciBzPW8uY2FsY2RhdGE/by5jYWxjZGF0YTpvLGw9ZS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHMua2V5PT09dC5rZXl9KSxjPXJ8fHMuc2Nyb2xsYmFyU3RhdGUuZHJhZ011bHRpcGxpZXIsdT1zLnNjcm9sbFk7cy5zY3JvbGxZPXZvaWQgMD09PWE/cy5zY3JvbGxZK2MqaS5ldmVudC5keTphO3ZhciBoPWwuc2VsZWN0QWxsKFwiLlwiK24uY24ueUNvbHVtbikuc2VsZWN0QWxsKFwiLlwiK24uY24uY29sdW1uQmxvY2spLmZpbHRlcihrKTtyZXR1cm4gTSh0LGgsbCkscy5zY3JvbGxZPT09dX19ZnVuY3Rpb24gRSh0LGUscixuLGksYSxvKXtuW29dIT09aVtvXSYmKGNsZWFyVGltZW91dChhLmN1cnJlbnRSZXBhaW50W29dKSxhLmN1cnJlbnRSZXBhaW50W29dPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgYT1yLmZpbHRlcihmdW5jdGlvbih0LGUpe3JldHVybiBlPT09byYmbltlXSE9PWlbZV19KTt5KHQsZSxhLHIpLGlbb109bltvXX0pKX1mdW5jdGlvbiBDKHQsZSxyLGEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBvPWkuc2VsZWN0KGUucGFyZW50Tm9kZSk7by5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZnJhZ21lbnRzO28uc2VsZWN0QWxsKFwidHNwYW4ubGluZVwiKS5lYWNoKGZ1bmN0aW9uKHQscil7ZVtyXS53aWR0aD10aGlzLmdldENvbXB1dGVkVGV4dExlbmd0aCgpfSk7dmFyIHIsaSxhPWVbZS5sZW5ndGgtMV0ud2lkdGgscz1lLnNsaWNlKDAsLTEpLGw9W10sYz0wLHU9dC5jb2x1bW4uY29sdW1uV2lkdGgtMipuLmNlbGxQYWQ7Zm9yKHQudmFsdWU9XCJcIjtzLmxlbmd0aDspYysoaT0ocj1zLnNoaWZ0KCkpLndpZHRoK2EpPnUmJih0LnZhbHVlKz1sLmpvaW4obi53cmFwU3BhY2VyKStuLmxpbmVCcmVha2VyLGw9W10sYz0wKSxsLnB1c2goci50ZXh0KSxjKz1pO2MmJih0LnZhbHVlKz1sLmpvaW4obi53cmFwU3BhY2VyKSksdC53cmFwcGVkPSEwfSksby5zZWxlY3RBbGwoXCJ0c3Bhbi5saW5lXCIpLnJlbW92ZSgpLHgoby5zZWxlY3QoXCIuXCIrbi5jbi5jZWxsVGV4dCkscix0LGEpLGkuc2VsZWN0KGUucGFyZW50Tm9kZS5wYXJlbnROb2RlKS5jYWxsKE8pfX1mdW5jdGlvbiBMKHQsZSxyLGEsbyl7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIW8uc2V0dGxlZFkpe3ZhciBzPWkuc2VsZWN0KGUucGFyZW50Tm9kZSksbD1SKG8pLGM9by5rZXktbC5maXJzdFJvd0luZGV4LHU9bC5yb3dzW2NdLnJvd0hlaWdodCxoPW8uY2VsbEhlaWdodE1heUluY3JlYXNlP2UucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQrMipuLmNlbGxQYWQ6dSxmPU1hdGgubWF4KGgsdSk7Zi1sLnJvd3NbY10ucm93SGVpZ2h0JiYobC5yb3dzW2NdLnJvd0hlaWdodD1mLHQuc2VsZWN0QWxsKFwiLlwiK24uY24uY29sdW1uQ2VsbCkuY2FsbChPKSxNKG51bGwsdC5maWx0ZXIoayksMCksbShyLGEsITApKSxzLmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxlPWkuc2VsZWN0KHRoaXMucGFyZW50Tm9kZSkuc2VsZWN0KFwiLlwiK24uY24uY2VsbFJlY3QpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPXRoaXMudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSxhPWUudG9wLXQudG9wKyhyP3IubWF0cml4LmY6bi5jZWxsUGFkKTtyZXR1cm5cInRyYW5zbGF0ZShcIit6KG8saS5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5zZWxlY3QoXCIuXCIrbi5jbi5jZWxsVGV4dEhvbGRlcikubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKStcIiBcIithK1wiKVwifSksby5zZXR0bGVkWT0hMH19fWZ1bmN0aW9uIHoodCxlKXtzd2l0Y2godC5hbGlnbil7Y2FzZVwibGVmdFwiOnJldHVybiBuLmNlbGxQYWQ7Y2FzZVwicmlnaHRcIjpyZXR1cm4gdC5jb2x1bW4uY29sdW1uV2lkdGgtKGV8fDApLW4uY2VsbFBhZDtjYXNlXCJjZW50ZXJcIjpyZXR1cm4odC5jb2x1bW4uY29sdW1uV2lkdGgtKGV8fDApKS8yO2RlZmF1bHQ6cmV0dXJuIG4uY2VsbFBhZH19ZnVuY3Rpb24gTyh0KXt0LmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXt2YXIgZT10LnJvd0Jsb2Nrc1swXS5hdXhpbGlhcnlCbG9ja3MucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrRChlLDEvMCl9LDApO3JldHVyblwidHJhbnNsYXRlKDAgXCIrKEQoUih0KSx0LmtleSkrZSkrXCIpXCJ9KS5zZWxlY3RBbGwoXCIuXCIrbi5jbi5jZWxsUmVjdCkuYXR0cihcImhlaWdodFwiLGZ1bmN0aW9uKHQpe3JldHVybihlPVIodCkscj10LmtleSxlLnJvd3Nbci1lLmZpcnN0Um93SW5kZXhdKS5yb3dIZWlnaHQ7dmFyIGUscn0pfWZ1bmN0aW9uIEkodCxlKXtmb3IodmFyIHI9MCxuPWUtMTtuPj0wO24tLSlyKz1QKHRbbl0pO3JldHVybiByfWZ1bmN0aW9uIEQodCxlKXtmb3IodmFyIHI9MCxuPTA7bjx0LnJvd3MubGVuZ3RoJiZ0LnJvd3Nbbl0ucm93SW5kZXg8ZTtuKyspcis9dC5yb3dzW25dLnJvd0hlaWdodDtyZXR1cm4gcn1mdW5jdGlvbiBQKHQpe3ZhciBlPXQuYWxsUm93c0hlaWdodDtpZih2b2lkIDAhPT1lKXJldHVybiBlO2Zvcih2YXIgcj0wLG49MDtuPHQucm93cy5sZW5ndGg7bisrKXIrPXQucm93c1tuXS5yb3dIZWlnaHQ7cmV0dXJuIHQuYWxsUm93c0hlaWdodD1yLHJ9ZnVuY3Rpb24gUih0KXtyZXR1cm4gdC5yb3dCbG9ja3NbdC5wYWdlXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj0hdC5fY29udGV4dC5zdGF0aWNQbG90LHM9dC5fZnVsbExheW91dC5fcGFwZXIuc2VsZWN0QWxsKFwiLlwiK24uY24udGFibGUpLmRhdGEoZS5tYXAoZnVuY3Rpb24oZSl7dmFyIHI9YS51bndyYXAoZSkudHJhY2U7cmV0dXJuIHUodCxyKX0pLGEua2V5RnVuKTtzLmV4aXQoKS5yZW1vdmUoKSxzLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKG4uY24udGFibGUsITApLmF0dHIoXCJvdmVyZmxvd1wiLFwidmlzaWJsZVwiKS5zdHlsZShcImJveC1zaXppbmdcIixcImNvbnRlbnQtYm94XCIpLnN0eWxlKFwicG9zaXRpb25cIixcImFic29sdXRlXCIpLnN0eWxlKFwibGVmdFwiLDApLnN0eWxlKFwib3ZlcmZsb3dcIixcInZpc2libGVcIikuc3R5bGUoXCJzaGFwZS1yZW5kZXJpbmdcIixcImNyaXNwRWRnZXNcIikuc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpLHMuYXR0cihcIndpZHRoXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGgrdC5zaXplLmwrdC5zaXplLnJ9KS5hdHRyKFwiaGVpZ2h0XCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0K3Quc2l6ZS50K3Quc2l6ZS5ifSkuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKFwiK3QudHJhbnNsYXRlWCtcIixcIit0LnRyYW5zbGF0ZVkrXCIpXCJ9KTt2YXIgZj1zLnNlbGVjdEFsbChcIi5cIituLmNuLnRhYmxlQ29udHJvbFZpZXcpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pLHg9Zi5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChuLmNuLnRhYmxlQ29udHJvbFZpZXcsITApLnN0eWxlKFwiYm94LXNpemluZ1wiLFwiY29udGVudC1ib3hcIik7ciYmeC5vbihcIm1vdXNlbW92ZVwiLGZ1bmN0aW9uKGUpe2YuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBlPT09dH0pLmNhbGwobSx0KX0pLm9uKFwibW91c2V3aGVlbFwiLGZ1bmN0aW9uKGUpe2lmKCFlLnNjcm9sbGJhclN0YXRlLndoZWVsaW5nKXtlLnNjcm9sbGJhclN0YXRlLndoZWVsaW5nPSEwO3ZhciByPWUuc2Nyb2xsWStpLmV2ZW50LmRlbHRhWTtTKHQsZixudWxsLHIpKGUpfHwoaS5ldmVudC5zdG9wUHJvcGFnYXRpb24oKSxpLmV2ZW50LnByZXZlbnREZWZhdWx0KCkpLGUuc2Nyb2xsYmFyU3RhdGUud2hlZWxpbmc9ITF9fSkuY2FsbChtLHQsITApLGYuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKFwiK3Quc2l6ZS5sK1wiIFwiK3Quc2l6ZS50K1wiKVwifSk7dmFyIGI9Zi5zZWxlY3RBbGwoXCIuXCIrbi5jbi5zY3JvbGxCYWNrZ3JvdW5kKS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKTtiLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKS5jbGFzc2VkKG4uY24uc2Nyb2xsQmFja2dyb3VuZCwhMCkuYXR0cihcImZpbGxcIixcIm5vbmVcIiksYi5hdHRyKFwid2lkdGhcIixmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aH0pLmF0dHIoXCJoZWlnaHRcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KSxmLmVhY2goZnVuY3Rpb24oZSl7by5zZXRDbGlwVXJsKGkuc2VsZWN0KHRoaXMpLGQodCxlKSx0KX0pO3ZhciBfPWYuc2VsZWN0QWxsKFwiLlwiK24uY24ueUNvbHVtbikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW5zfSxhLmtleUZ1bik7Xy5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChuLmNuLnlDb2x1bW4sITApLF8uZXhpdCgpLnJlbW92ZSgpLF8uYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKFwiK3QueCtcIiAwKVwifSksciYmXy5jYWxsKGkuYmVoYXZpb3IuZHJhZygpLm9yaWdpbihmdW5jdGlvbihlKXtyZXR1cm4gdyhpLnNlbGVjdCh0aGlzKSxlLC1uLnVwbGlmdCksbCh0aGlzKSxlLmNhbGNkYXRhLmNvbHVtbkRyYWdJblByb2dyZXNzPSEwLG0oZi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGUuY2FsY2RhdGEua2V5PT09dC5rZXl9KSx0KSxlfSkub24oXCJkcmFnXCIsZnVuY3Rpb24odCl7dmFyIGU9aS5zZWxlY3QodGhpcykscj1mdW5jdGlvbihlKXtyZXR1cm4odD09PWU/aS5ldmVudC54OmUueCkrZS5jb2x1bW5XaWR0aC8yfTt0Lng9TWF0aC5tYXgoLW4ub3ZlcmRyYWcsTWF0aC5taW4odC5jYWxjZGF0YS53aWR0aCtuLm92ZXJkcmFnLXQuY29sdW1uV2lkdGgsaS5ldmVudC54KSksdihfKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2FsY2RhdGEua2V5PT09dC5jYWxjZGF0YS5rZXl9KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIodCktcihlKX0pLmZvckVhY2goZnVuY3Rpb24oZSxyKXtlLnhJbmRleD1yLGUueD10PT09ZT9lLng6ZS54U2NhbGUoZSl9KSxfLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdCE9PWV9KS50cmFuc2l0aW9uKCkuZWFzZShuLnRyYW5zaXRpb25FYXNlKS5kdXJhdGlvbihuLnRyYW5zaXRpb25EdXJhdGlvbikuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKFwiK3QueCtcIiAwKVwifSksZS5jYWxsKGMpLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIit0LngrXCIgLVwiK24udXBsaWZ0K1wiIClcIil9KS5vbihcImRyYWdlbmRcIixmdW5jdGlvbihlKXt2YXIgcj1pLnNlbGVjdCh0aGlzKSxuPWUuY2FsY2RhdGE7ZS54PWUueFNjYWxlKGUpLGUuY2FsY2RhdGEuY29sdW1uRHJhZ0luUHJvZ3Jlc3M9ITEsdyhyLGUsMCksZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuZ2RDb2x1bW5zT3JpZ2luYWxPcmRlcjtlLmdkQ29sdW1ucy5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHJbbi5pbmRleE9mKHQpXS1yW24uaW5kZXhPZihlKV19KSxlLmNvbHVtbm9yZGVyPXIsdC5lbWl0KFwicGxvdGx5X3Jlc3R5bGVcIil9KHQsbixuLmNvbHVtbnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnhJbmRleH0pKX0pKSxfLmVhY2goZnVuY3Rpb24oZSl7by5zZXRDbGlwVXJsKGkuc2VsZWN0KHRoaXMpLGcodCxlKSx0KX0pO3ZhciBUPV8uc2VsZWN0QWxsKFwiLlwiK24uY24uY29sdW1uQmxvY2spLmRhdGEoaC5zcGxpdFRvUGFuZWxzLGEua2V5RnVuKTtULmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKG4uY24uY29sdW1uQmxvY2ssITApLmF0dHIoXCJpZFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleX0pLFQuc3R5bGUoXCJjdXJzb3JcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5kcmFnSGFuZGxlP1wiZXctcmVzaXplXCI6dC5jYWxjZGF0YS5zY3JvbGxiYXJTdGF0ZS5iYXJXaWdnbGVSb29tP1wibnMtcmVzaXplXCI6XCJkZWZhdWx0XCJ9KTt2YXIgRT1ULmZpbHRlcihBKSxDPVQuZmlsdGVyKGspO3ImJkMuY2FsbChpLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oZnVuY3Rpb24odCl7cmV0dXJuIGkuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCksdH0pLm9uKFwiZHJhZ1wiLFModCxmLC0xKSkub24oXCJkcmFnZW5kXCIsZnVuY3Rpb24oKXt9KSkseSh0LGYsRSxUKSx5KHQsZixDLFQpO3ZhciBMPWYuc2VsZWN0QWxsKFwiLlwiK24uY24uc2Nyb2xsQXJlYUNsaXApLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO0wuZW50ZXIoKS5hcHBlbmQoXCJjbGlwUGF0aFwiKS5jbGFzc2VkKG4uY24uc2Nyb2xsQXJlYUNsaXAsITApLmF0dHIoXCJpZFwiLGZ1bmN0aW9uKGUpe3JldHVybiBkKHQsZSl9KTt2YXIgej1MLnNlbGVjdEFsbChcIi5cIituLmNuLnNjcm9sbEFyZWFDbGlwUmVjdCkuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7ei5lbnRlcigpLmFwcGVuZChcInJlY3RcIikuY2xhc3NlZChuLmNuLnNjcm9sbEFyZWFDbGlwUmVjdCwhMCkuYXR0cihcInhcIiwtbi5vdmVyZHJhZykuYXR0cihcInlcIiwtbi51cGxpZnQpLmF0dHIoXCJmaWxsXCIsXCJub25lXCIpLHouYXR0cihcIndpZHRoXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGgrMipuLm92ZXJkcmFnfSkuYXR0cihcImhlaWdodFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodCtuLnVwbGlmdH0pLF8uc2VsZWN0QWxsKFwiLlwiK24uY24uY29sdW1uQm91bmRhcnkpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKG4uY24uY29sdW1uQm91bmRhcnksITApO3ZhciBPPV8uc2VsZWN0QWxsKFwiLlwiK24uY24uY29sdW1uQm91bmRhcnlDbGlwcGF0aCkuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7Ty5lbnRlcigpLmFwcGVuZChcImNsaXBQYXRoXCIpLmNsYXNzZWQobi5jbi5jb2x1bW5Cb3VuZGFyeUNsaXBwYXRoLCEwKSxPLmF0dHIoXCJpZFwiLGZ1bmN0aW9uKGUpe3JldHVybiBnKHQsZSl9KTt2YXIgST1PLnNlbGVjdEFsbChcIi5cIituLmNuLmNvbHVtbkJvdW5kYXJ5UmVjdCkuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7SS5lbnRlcigpLmFwcGVuZChcInJlY3RcIikuY2xhc3NlZChuLmNuLmNvbHVtbkJvdW5kYXJ5UmVjdCwhMCkuYXR0cihcImZpbGxcIixcIm5vbmVcIiksSS5hdHRyKFwid2lkdGhcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW5XaWR0aCsyKnAodCl9KS5hdHRyKFwiaGVpZ2h0XCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuY2FsY2RhdGEuaGVpZ2h0KzIqcCh0KStuLnVwbGlmdH0pLmF0dHIoXCJ4XCIsZnVuY3Rpb24odCl7cmV0dXJuLXAodCl9KS5hdHRyKFwieVwiLGZ1bmN0aW9uKHQpe3JldHVybi1wKHQpfSksTShudWxsLEMsZil9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2d1cFwiOjY5OSxcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiOjcyNSxcIi4vY29uc3RhbnRzXCI6MTE1NyxcIi4vZGF0YV9wcmVwYXJhdGlvbl9oZWxwZXJcIjoxMTU4LFwiLi9kYXRhX3NwbGl0X2hlbHBlcnNcIjoxMTU5LGQzOjE1NX1dLDExNjM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vYm94L2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17eTpuLnkseDpuLngseDA6bi54MCx5MDpuLnkwLG5hbWU6aSh7fSxuLm5hbWUse30pLG9yaWVudGF0aW9uOmkoe30sbi5vcmllbnRhdGlvbix7fSksYmFuZHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZWRpdFR5cGU6XCJjYWxjXCJ9LHNjYWxlZ3JvdXA6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHNjYWxlbW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wid2lkdGhcIixcImNvdW50XCJdLGRmbHQ6XCJ3aWR0aFwiLGVkaXRUeXBlOlwiY2FsY1wifSxzcGFubW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wic29mdFwiLFwiaGFyZFwiLFwibWFudWFsXCJdLGRmbHQ6XCJzb2Z0XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHNwYW46e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsaXRlbXM6W3t2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjXCJ9XSxlZGl0VHlwZTpcImNhbGNcIn0sbGluZTp7Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwic3R5bGVcIn0sd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjIsZWRpdFR5cGU6XCJzdHlsZVwifSxlZGl0VHlwZTpcInBsb3RcIn0sZmlsbGNvbG9yOm4uZmlsbGNvbG9yLHBvaW50czppKHt9LG4uYm94cG9pbnRzLHt9KSxqaXR0ZXI6aSh7fSxuLmppdHRlcix7fSkscG9pbnRwb3M6aSh7fSxuLnBvaW50cG9zLHt9KSx3aWR0aDppKHt9LG4ud2lkdGgse30pLG1hcmtlcjpuLm1hcmtlcix0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTpuLmhvdmVydGVtcGxhdGUsYm94Ont2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEsZWRpdFR5cGU6XCJwbG90XCJ9LHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDouMjUsZWRpdFR5cGU6XCJwbG90XCJ9LGZpbGxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJzdHlsZVwifSxsaW5lOntjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJzdHlsZVwifSx3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGVkaXRUeXBlOlwic3R5bGVcIn0sZWRpdFR5cGU6XCJzdHlsZVwifSxlZGl0VHlwZTpcInBsb3RcIn0sbWVhbmxpbmU6e3Zpc2libGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMSxlZGl0VHlwZTpcInBsb3RcIn0sY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwic3R5bGVcIn0sd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxlZGl0VHlwZTpcInN0eWxlXCJ9LGVkaXRUeXBlOlwicGxvdFwifSxzaWRlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJib3RoXCIsXCJwb3NpdGl2ZVwiLFwibmVnYXRpdmVcIl0sZGZsdDpcImJvdGhcIixlZGl0VHlwZTpcImNhbGNcIn0sb2Zmc2V0Z3JvdXA6bi5vZmZzZXRncm91cCxhbGlnbm1lbnRncm91cDpuLmFsaWdubWVudGdyb3VwLHNlbGVjdGVkOm4uc2VsZWN0ZWQsdW5zZWxlY3RlZDpuLnVuc2VsZWN0ZWQsaG92ZXJvbjp7dmFsVHlwZTpcImZsYWdsaXN0XCIsZmxhZ3M6W1widmlvbGluc1wiLFwicG9pbnRzXCIsXCJrZGVcIl0sZGZsdDpcInZpb2xpbnMrcG9pbnRzK2tkZVwiLGV4dHJhczpbXCJhbGxcIl0sZWRpdFR5cGU6XCJzdHlsZVwifX19LHtcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi9ib3gvYXR0cmlidXRlc1wiOjg2Mn1dLDExNjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGE9dChcIi4uL2JveC9jYWxjXCIpLG89dChcIi4vaGVscGVyc1wiKSxzPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTTtmdW5jdGlvbiBsKHQsZSxyKXt2YXIgaT1lLm1heC1lLm1pbjtpZighaSlyZXR1cm4gdC5iYW5kd2lkdGg/dC5iYW5kd2lkdGg6MDtpZih0LmJhbmR3aWR0aClyZXR1cm4gTWF0aC5tYXgodC5iYW5kd2lkdGgsaS8xZTQpO3ZhciBhPXIubGVuZ3RoLG89bi5zdGRldihyLGEtMSxlLm1lYW4pO3JldHVybiBNYXRoLm1heChmdW5jdGlvbih0LGUscil7cmV0dXJuIDEuMDU5Kk1hdGgubWluKGUsci8xLjM0OSkqTWF0aC5wb3codCwtLjIpfShhLG8sZS5xMy1lLnExKSxpLzEwMCl9ZnVuY3Rpb24gYyh0LGUscixuKXt2YXIgYSxvPXQuc3Bhbm1vZGUsbD10LnNwYW58fFtdLGM9W2UubWluLGUubWF4XSx1PVtlLm1pbi0yKm4sZS5tYXgrMipuXTtmdW5jdGlvbiBoKG4pe3ZhciBpPWxbbl0sYT1cIm11bHRpY2F0ZWdvcnlcIj09PXIudHlwZT9yLnIyYyhpKTpyLmQyYyhpLDAsdFtlLnZhbExldHRlcitcImNhbGVuZGFyXCJdKTtyZXR1cm4gYT09PXM/dVtuXTphfXZhciBmPXt0eXBlOlwibGluZWFyXCIscmFuZ2U6YT1cInNvZnRcIj09PW8/dTpcImhhcmRcIj09PW8/YzpbaCgwKSxoKDEpXX07cmV0dXJuIGkuc2V0Q29udmVydChmKSxmLmNsZWFuUmFuZ2UoKSxhfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWEodCxlKTtpZihyWzBdLnQuZW1wdHkpcmV0dXJuIHI7Zm9yKHZhciBzPXQuX2Z1bGxMYXlvdXQsdT1pLmdldEZyb21JZCh0LGVbXCJoXCI9PT1lLm9yaWVudGF0aW9uP1wieGF4aXNcIjpcInlheGlzXCJdKSxoPTEvMCxmPS0xLzAscD0wLGQ9MCxnPTA7ZzxyLmxlbmd0aDtnKyspe3ZhciB2PXJbZ10sbT12LnB0cy5tYXAoby5leHRyYWN0VmFsKSx5PXYuYmFuZHdpZHRoPWwoZSx2LG0pLHg9di5zcGFuPWMoZSx2LHUseSk7aWYodi5taW49PT12Lm1heCYmMD09PXkpeD12LnNwYW49W3YubWluLHYubWF4XSx2LmRlbnNpdHk9W3t2OjEsdDp4WzBdfV0sdi5iYW5kd2lkdGg9eSxwPU1hdGgubWF4KHAsMSk7ZWxzZXt2YXIgYj14WzFdLXhbMF0sXz1NYXRoLmNlaWwoYi8oeS8zKSksdz1iL187aWYoIWlzRmluaXRlKHcpfHwhaXNGaW5pdGUoXykpcmV0dXJuIG4uZXJyb3IoXCJTb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIGNvbXB1dGluZyB0aGUgdmlvbGluIHNwYW5cIiksclswXS50LmVtcHR5PSEwLHI7dmFyIGs9by5tYWtlS0RFKHYsZSxtKTt2LmRlbnNpdHk9bmV3IEFycmF5KF8pO2Zvcih2YXIgQT0wLFQ9eFswXTtUPHhbMV0rdy8yO0ErKyxUKz13KXt2YXIgTT1rKFQpO3YuZGVuc2l0eVtBXT17djpNLHQ6VH0scD1NYXRoLm1heChwLE0pfX1kPU1hdGgubWF4KGQsbS5sZW5ndGgpLGg9TWF0aC5taW4oaCx4WzBdKSxmPU1hdGgubWF4KGYseFsxXSl9dmFyIFM9aS5maW5kRXh0cmVtZXModSxbaCxmXSx7cGFkZGVkOiEwfSk7aWYoZS5fZXh0cmVtZXNbdS5faWRdPVMsZS53aWR0aClyWzBdLnQubWF4S0RFPXA7ZWxzZXt2YXIgRT1zLl92aW9saW5TY2FsZUdyb3VwU3RhdHMsQz1lLnNjYWxlZ3JvdXAsTD1FW0NdO0w/KEwubWF4S0RFPU1hdGgubWF4KEwubWF4S0RFLHApLEwubWF4Q291bnQ9TWF0aC5tYXgoTC5tYXhDb3VudCxkKSk6RVtDXT17bWF4S0RFOnAsbWF4Q291bnQ6ZH19cmV0dXJuIHJbMF0udC5sYWJlbHMua2RlPW4uXyh0LFwia2RlOlwiKSxyfX0se1wiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vYm94L2NhbGNcIjo4NjMsXCIuL2hlbHBlcnNcIjoxMTY3fV0sMTE2NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9ib3gvY3Jvc3NfdHJhY2VfY2FsY1wiKS5zZXRQb3NpdGlvbk9mZnNldCxpPVtcInZcIixcImhcIl07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY2FsY2RhdGEsYT1lLnhheGlzLG89ZS55YXhpcyxzPTA7czxpLmxlbmd0aDtzKyspe2Zvcih2YXIgbD1pW3NdLGM9XCJoXCI9PT1sP286YSx1PVtdLGg9MDtoPHIubGVuZ3RoO2grKyl7dmFyIGY9cltoXSxwPWZbMF0udCxkPWZbMF0udHJhY2U7ITAhPT1kLnZpc2libGV8fFwidmlvbGluXCIhPT1kLnR5cGV8fHAuZW1wdHl8fGQub3JpZW50YXRpb24hPT1sfHxkLnhheGlzIT09YS5faWR8fGQueWF4aXMhPT1vLl9pZHx8dS5wdXNoKGgpfW4oXCJ2aW9saW5cIix0LHUsYyl9fX0se1wiLi4vYm94L2Nyb3NzX3RyYWNlX2NhbGNcIjo4NjR9XSwxMTY2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGE9dChcIi4uL2JveC9kZWZhdWx0c1wiKSxvPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX1mdW5jdGlvbiBjKHIsaSl7cmV0dXJuIG4uY29lcmNlMih0LGUsbyxyLGkpfWlmKGEuaGFuZGxlU2FtcGxlRGVmYXVsdHModCxlLGwscyksITEhPT1lLnZpc2libGUpe2woXCJiYW5kd2lkdGhcIiksbChcInNpZGVcIiksbChcIndpZHRoXCIpfHwobChcInNjYWxlZ3JvdXBcIixlLm5hbWUpLGwoXCJzY2FsZW1vZGVcIikpO3ZhciB1LGg9bChcInNwYW5cIik7QXJyYXkuaXNBcnJheShoKSYmKHU9XCJtYW51YWxcIiksbChcInNwYW5tb2RlXCIsdSk7dmFyIGY9bChcImxpbmUuY29sb3JcIiwodC5tYXJrZXJ8fHt9KS5jb2xvcnx8cikscD1sKFwibGluZS53aWR0aFwiKSxkPWwoXCJmaWxsY29sb3JcIixpLmFkZE9wYWNpdHkoZS5saW5lLmNvbG9yLC41KSk7YS5oYW5kbGVQb2ludHNEZWZhdWx0cyh0LGUsbCx7cHJlZml4OlwiXCJ9KTt2YXIgZz1jKFwiYm94LndpZHRoXCIpLHY9YyhcImJveC5maWxsY29sb3JcIixkKSxtPWMoXCJib3gubGluZS5jb2xvclwiLGYpLHk9YyhcImJveC5saW5lLndpZHRoXCIscCk7bChcImJveC52aXNpYmxlXCIsQm9vbGVhbihnfHx2fHxtfHx5KSl8fChlLmJveD17dmlzaWJsZTohMX0pO3ZhciB4PWMoXCJtZWFubGluZS5jb2xvclwiLGYpLGI9YyhcIm1lYW5saW5lLndpZHRoXCIscCk7bChcIm1lYW5saW5lLnZpc2libGVcIixCb29sZWFuKHh8fGIpKXx8KGUubWVhbmxpbmU9e3Zpc2libGU6ITF9KX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vYm94L2RlZmF1bHRzXCI6ODY1LFwiLi9hdHRyaWJ1dGVzXCI6MTE2M31dLDExNjc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9ZnVuY3Rpb24odCl7cmV0dXJuIDEvTWF0aC5zcXJ0KDIqTWF0aC5QSSkqTWF0aC5leHAoLS41KnQqdCl9O3IubWFrZUtERT1mdW5jdGlvbih0LGUscil7dmFyIG49ci5sZW5ndGgsYT1pLG89dC5iYW5kd2lkdGgscz0xLyhuKm8pO3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxpPTA7aTxuO2krKyllKz1hKCh0LXJbaV0pL28pO3JldHVybiBzKmV9fSxyLmdldFBvc2l0aW9uT25LZGVQYXRoPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhO1wiaFwiPT09ZS5vcmllbnRhdGlvbj8oaT1cInlcIixhPVwieFwiKTooaT1cInhcIixhPVwieVwiKTt2YXIgbz1uLmZpbmRQb2ludE9uUGF0aCh0LnBhdGgscixhLHtwYXRoTGVuZ3RoOnQucGF0aExlbmd0aH0pLHM9dC5wb3NDZW50ZXJQeCxsPW9baV07cmV0dXJuW2wsXCJib3RoXCI9PT1lLnNpZGU/MipzLWw6c119LHIuZ2V0S2RlVmFsdWU9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXQucHRzLm1hcChyLmV4dHJhY3RWYWwpO3JldHVybiByLm1ha2VLREUodCxlLGkpKG4pL3QucG9zRGVuc2l0eVNjYWxlfSxyLmV4dHJhY3RWYWw9ZnVuY3Rpb24odCl7cmV0dXJuIHQudn19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDExNjg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGE9dChcIi4uL2JveC9ob3ZlclwiKSxvPXQoXCIuL2hlbHBlcnNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCl7dmFyIGMsdSxoPXQuY2QsZj1oWzBdLnRyYWNlLHA9Zi5ob3Zlcm9uLGQ9LTEhPT1wLmluZGV4T2YoXCJ2aW9saW5zXCIpLGc9LTEhPT1wLmluZGV4T2YoXCJrZGVcIiksdj1bXTtpZihkfHxnKXt2YXIgbT1hLmhvdmVyT25Cb3hlcyh0LGUscixzKTtpZihkJiYodj12LmNvbmNhdChtKSksZyYmbS5sZW5ndGg+MCl7dmFyIHkseCxiLF8sdyxrPXQueGEsQT10LnlhO1wiaFwiPT09Zi5vcmllbnRhdGlvbj8odz1lLHk9XCJ5XCIsYj1BLHg9XCJ4XCIsXz1rKToodz1yLHk9XCJ4XCIsYj1rLHg9XCJ5XCIsXz1BKTt2YXIgVD1oW3QuaW5kZXhdO2lmKHc+PVQuc3BhblswXSYmdzw9VC5zcGFuWzFdKXt2YXIgTT1uLmV4dGVuZEZsYXQoe30sdCksUz1fLmMycCh3LCEwKSxFPW8uZ2V0S2RlVmFsdWUoVCxmLHcpLEM9by5nZXRQb3NpdGlvbk9uS2RlUGF0aChULGYsUyksTD1iLl9vZmZzZXQsej1iLl9sZW5ndGg7TVt5K1wiMFwiXT1DWzBdLE1beStcIjFcIl09Q1sxXSxNW3grXCIwXCJdPU1beCtcIjFcIl09UyxNW3grXCJMYWJlbFwiXT14K1wiOiBcIitpLmhvdmVyTGFiZWxUZXh0KF8sdykrXCIsIFwiK2hbMF0udC5sYWJlbHMua2RlK1wiIFwiK0UudG9GaXhlZCgzKSxNLnNwaWtlRGlzdGFuY2U9bVswXS5zcGlrZURpc3RhbmNlO3ZhciBPPXkrXCJTcGlrZVwiO01bT109bVswXVtPXSxtWzBdLnNwaWtlRGlzdGFuY2U9dm9pZCAwLG1bMF1bT109dm9pZCAwLE0uaG92ZXJ0ZW1wbGF0ZT0hMSx2LnB1c2goTSksKHU9e3N0cm9rZTp0LmNvbG9yfSlbeStcIjFcIl09bi5jb25zdHJhaW4oTCtDWzBdLEwsTCt6KSx1W3krXCIyXCJdPW4uY29uc3RyYWluKEwrQ1sxXSxMLEwreiksdVt4K1wiMVwiXT11W3grXCIyXCJdPV8uX29mZnNldCtTfX19LTEhPT1wLmluZGV4T2YoXCJwb2ludHNcIikmJihjPWEuaG92ZXJPblBvaW50cyh0LGUscikpO3ZhciBJPWwuc2VsZWN0QWxsKFwiLnZpb2xpbmxpbmUtXCIrZi51aWQpLmRhdGEodT9bMF06W10pO3JldHVybiBJLmVudGVyKCkuYXBwZW5kKFwibGluZVwiKS5jbGFzc2VkKFwidmlvbGlubGluZS1cIitmLnVpZCwhMCkuYXR0cihcInN0cm9rZS13aWR0aFwiLDEuNSksSS5leGl0KCkucmVtb3ZlKCksSS5hdHRyKHUpLFwiY2xvc2VzdFwiPT09cz9jP1tjXTp2OmM/KHYucHVzaChjKSx2KTp2fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9ib3gvaG92ZXJcIjo4NjcsXCIuL2hlbHBlcnNcIjoxMTY3fV0sMTE2OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KFwiLi9hdHRyaWJ1dGVzXCIpLGxheW91dEF0dHJpYnV0ZXM6dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksc3VwcGx5RGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIiksY3Jvc3NUcmFjZURlZmF1bHRzOnQoXCIuLi9ib3gvZGVmYXVsdHNcIikuY3Jvc3NUcmFjZURlZmF1bHRzLHN1cHBseUxheW91dERlZmF1bHRzOnQoXCIuL2xheW91dF9kZWZhdWx0c1wiKSxjYWxjOnQoXCIuL2NhbGNcIiksY3Jvc3NUcmFjZUNhbGM6dChcIi4vY3Jvc3NfdHJhY2VfY2FsY1wiKSxwbG90OnQoXCIuL3Bsb3RcIiksc3R5bGU6dChcIi4vc3R5bGVcIiksc3R5bGVPblNlbGVjdDp0KFwiLi4vc2NhdHRlci9zdHlsZVwiKS5zdHlsZU9uU2VsZWN0LGhvdmVyUG9pbnRzOnQoXCIuL2hvdmVyXCIpLHNlbGVjdFBvaW50czp0KFwiLi4vYm94L3NlbGVjdFwiKSxtb2R1bGVUeXBlOlwidHJhY2VcIixuYW1lOlwidmlvbGluXCIsYmFzZVBsb3RNb2R1bGU6dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiKSxjYXRlZ29yaWVzOltcImNhcnRlc2lhblwiLFwic3ZnXCIsXCJzeW1ib2xzXCIsXCJvcmllbnRlZFwiLFwiYm94LXZpb2xpblwiLFwic2hvd0xlZ2VuZFwiLFwidmlvbGluTGF5b3V0XCIsXCJ6b29tU2NhbGVcIl0sbWV0YTp7fX19LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiOjc2MCxcIi4uL2JveC9kZWZhdWx0c1wiOjg2NSxcIi4uL2JveC9zZWxlY3RcIjo4NzIsXCIuLi9zY2F0dGVyL3N0eWxlXCI6MTA3NSxcIi4vYXR0cmlidXRlc1wiOjExNjMsXCIuL2NhbGNcIjoxMTY0LFwiLi9jcm9zc190cmFjZV9jYWxjXCI6MTE2NSxcIi4vZGVmYXVsdHNcIjoxMTY2LFwiLi9ob3ZlclwiOjExNjgsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6MTE3MCxcIi4vbGF5b3V0X2RlZmF1bHRzXCI6MTE3MSxcIi4vcGxvdFwiOjExNzIsXCIuL3N0eWxlXCI6MTE3M31dLDExNzA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vYm94L2xheW91dF9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2xpYlwiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17dmlvbGlubW9kZTppKHt9LG4uYm94bW9kZSx7fSksdmlvbGluZ2FwOmkoe30sbi5ib3hnYXAse30pLHZpb2xpbmdyb3VwZ2FwOmkoe30sbi5ib3hncm91cGdhcCx7fSl9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9ib3gvbGF5b3V0X2F0dHJpYnV0ZXNcIjo4Njl9XSwxMTcxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uL2JveC9sYXlvdXRfZGVmYXVsdHNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXthLl9zdXBwbHkodCxlLHIsZnVuY3Rpb24ocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX0sXCJ2aW9saW5cIil9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9ib3gvbGF5b3V0X2RlZmF1bHRzXCI6ODcwLFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjExNzB9XSwxMTcyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksbz10KFwiLi4vYm94L3Bsb3RcIikscz10KFwiLi4vc2NhdHRlci9saW5lX3BvaW50c1wiKSxsPXQoXCIuL2hlbHBlcnNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe3ZhciB1PXQuX2Z1bGxMYXlvdXQsaD1lLnhheGlzLGY9ZS55YXhpcztmdW5jdGlvbiBwKHQpe3ZhciBlPXModCx7eGF4aXM6aCx5YXhpczpmLGNvbm5lY3RHYXBzOiEwLGJhc2VUb2xlcmFuY2U6Ljc1LHNoYXBlOlwic3BsaW5lXCIsc2ltcGxpZnk6ITB9KTtyZXR1cm4gYS5zbW9vdGhvcGVuKGVbMF0sMSl9aS5tYWtlVHJhY2VHcm91cHMoYyxyLFwidHJhY2UgdmlvbGluc1wiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGE9dFswXSxzPWEudCxjPWEudHJhY2U7aWYoZS5pc1JhbmdlUGxvdHx8KGEubm9kZTM9ciksITAhPT1jLnZpc2libGV8fHMuZW1wdHkpci5yZW1vdmUoKTtlbHNle3ZhciBkPXMuYlBvcyxnPXMuYmRQb3Msdj1lW3MudmFsTGV0dGVyK1wiYXhpc1wiXSxtPWVbcy5wb3NMZXR0ZXIrXCJheGlzXCJdLHk9XCJib3RoXCI9PT1jLnNpZGUseD15fHxcInBvc2l0aXZlXCI9PT1jLnNpZGUsYj15fHxcIm5lZ2F0aXZlXCI9PT1jLnNpZGUsXz1yLnNlbGVjdEFsbChcInBhdGgudmlvbGluXCIpLmRhdGEoaS5pZGVudGl0eSk7Xy5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuc3R5bGUoXCJ2ZWN0b3ItZWZmZWN0XCIsXCJub24tc2NhbGluZy1zdHJva2VcIikuYXR0cihcImNsYXNzXCIsXCJ2aW9saW5cIiksXy5leGl0KCkucmVtb3ZlKCksXy5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxhLG8sbCxoLGYsXz1uLnNlbGVjdCh0aGlzKSx3PXQuZGVuc2l0eSxrPXcubGVuZ3RoLEE9dC5wb3MrZCxUPW0uYzJwKEEpO2lmKGMud2lkdGgpZT1zLm1heEtERS9nO2Vsc2V7dmFyIE09dS5fdmlvbGluU2NhbGVHcm91cFN0YXRzW2Muc2NhbGVncm91cF07ZT1cImNvdW50XCI9PT1jLnNjYWxlbW9kZT9NLm1heEtERS9nKihNLm1heENvdW50L3QucHRzLmxlbmd0aCk6TS5tYXhLREUvZ31pZih4KXtmb3IoaD1uZXcgQXJyYXkoayksbz0wO288aztvKyspKGY9aFtvXT17fSlbcy5wb3NMZXR0ZXJdPUErd1tvXS52L2UsZltzLnZhbExldHRlcl09d1tvXS50O3I9cChoKX1pZihiKXtmb3IoaD1uZXcgQXJyYXkoayksbD0wLG89ay0xO2w8aztsKyssby0tKShmPWhbbF09e30pW3MucG9zTGV0dGVyXT1BLXdbb10udi9lLGZbcy52YWxMZXR0ZXJdPXdbb10udDtpPXAoaCl9aWYoeSlhPXIrXCJMXCIraS5zdWJzdHIoMSkrXCJaXCI7ZWxzZXt2YXIgUz1bVCx2LmMycCh3WzBdLnQpXSxFPVtULHYuYzJwKHdbay0xXS50KV07XCJoXCI9PT1jLm9yaWVudGF0aW9uJiYoUy5yZXZlcnNlKCksRS5yZXZlcnNlKCkpLGE9eD9cIk1cIitTK1wiTFwiK3Iuc3Vic3RyKDEpK1wiTFwiK0U6XCJNXCIrRStcIkxcIitpLnN1YnN0cigxKStcIkxcIitTfV8uYXR0cihcImRcIixhKSx0LnBvc0NlbnRlclB4PVQsdC5wb3NEZW5zaXR5U2NhbGU9ZSpnLHQucGF0aD1fLm5vZGUoKSx0LnBhdGhMZW5ndGg9dC5wYXRoLmdldFRvdGFsTGVuZ3RoKCkvKHk/MjoxKX0pO3ZhciB3LGssQSxUPWMuYm94LE09VC53aWR0aCxTPShULmxpbmV8fHt9KS53aWR0aDt5Pyh3PWcqTSxrPTApOng/KHc9WzAsZypNLzJdLGs9LVMpOih3PVtnKk0vMiwwXSxrPVMpLG8ucGxvdEJveEFuZFdoaXNrZXJzKHIse3BvczptLHZhbDp2fSxjLHtiUG9zOmQsYmRQb3M6dyxiUG9zUHhPZmZzZXQ6a30pLG8ucGxvdEJveE1lYW4ocix7cG9zOm0sdmFsOnZ9LGMse2JQb3M6ZCxiZFBvczp3LGJQb3NQeE9mZnNldDprfSksIWMuYm94LnZpc2libGUmJmMubWVhbmxpbmUudmlzaWJsZSYmKEE9aS5pZGVudGl0eSk7dmFyIEU9ci5zZWxlY3RBbGwoXCJwYXRoLm1lYW5saW5lXCIpLmRhdGEoQXx8W10pO0UuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJjbGFzc1wiLFwibWVhbmxpbmVcIikuc3R5bGUoXCJmaWxsXCIsXCJub25lXCIpLnN0eWxlKFwidmVjdG9yLWVmZmVjdFwiLFwibm9uLXNjYWxpbmctc3Ryb2tlXCIpLEUuZXhpdCgpLnJlbW92ZSgpLEUuZWFjaChmdW5jdGlvbih0KXt2YXIgZT12LmMycCh0Lm1lYW4sITApLHI9bC5nZXRQb3NpdGlvbk9uS2RlUGF0aCh0LGMsZSk7bi5zZWxlY3QodGhpcykuYXR0cihcImRcIixcImhcIj09PWMub3JpZW50YXRpb24/XCJNXCIrZStcIixcIityWzBdK1wiVlwiK3JbMV06XCJNXCIrclswXStcIixcIitlK1wiSFwiK3JbMV0pfSksby5wbG90UG9pbnRzKHIse3g6aCx5OmZ9LGMscyl9fSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi9ib3gvcGxvdFwiOjg3MSxcIi4uL3NjYXR0ZXIvbGluZV9wb2ludHNcIjoxMDY2LFwiLi9oZWxwZXJzXCI6MTE2NyxkMzoxNTV9XSwxMTczOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksYT10KFwiLi4vc2NhdHRlci9zdHlsZVwiKS5zdHlsZVBvaW50cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lP2VbMF0ubm9kZTM6bi5zZWxlY3QodCkuc2VsZWN0QWxsKFwiZy50cmFjZS52aW9saW5zXCIpO3Iuc3R5bGUoXCJvcGFjaXR5XCIsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pLHIuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1lWzBdLnRyYWNlLG89bi5zZWxlY3QodGhpcykscz1yLmJveHx8e30sbD1zLmxpbmV8fHt9LGM9ci5tZWFubGluZXx8e30sdT1jLndpZHRoO28uc2VsZWN0QWxsKFwicGF0aC52aW9saW5cIikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixyLmxpbmUud2lkdGgrXCJweFwiKS5jYWxsKGkuc3Ryb2tlLHIubGluZS5jb2xvcikuY2FsbChpLmZpbGwsci5maWxsY29sb3IpLG8uc2VsZWN0QWxsKFwicGF0aC5ib3hcIikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixsLndpZHRoK1wicHhcIikuY2FsbChpLnN0cm9rZSxsLmNvbG9yKS5jYWxsKGkuZmlsbCxzLmZpbGxjb2xvcik7dmFyIGg9e1wic3Ryb2tlLXdpZHRoXCI6dStcInB4XCIsXCJzdHJva2UtZGFzaGFycmF5XCI6Mip1K1wicHgsXCIrdStcInB4XCJ9O28uc2VsZWN0QWxsKFwicGF0aC5tZWFuXCIpLnN0eWxlKGgpLmNhbGwoaS5zdHJva2UsYy5jb2xvciksby5zZWxlY3RBbGwoXCJwYXRoLm1lYW5saW5lXCIpLnN0eWxlKGgpLmNhbGwoaS5zdHJva2UsYy5jb2xvciksYShvLHIsdCl9KX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi9zY2F0dGVyL3N0eWxlXCI6MTA3NSxkMzoxNTV9XSwxMTc0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uL2lzb3N1cmZhY2UvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxzPXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsLGw9ZS5leHBvcnRzPXMobyh7eDppLngseTppLnksejppLnosdmFsdWU6aS52YWx1ZSxpc29taW46aS5pc29taW4saXNvbWF4OmkuaXNvbWF4LHN1cmZhY2U6aS5zdXJmYWNlLHNwYWNlZnJhbWU6e3Nob3c6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sZmlsbDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MX19LHNsaWNlczppLnNsaWNlcyxjYXBzOmkuY2Fwcyx0ZXh0OmkudGV4dCxob3ZlcnRleHQ6aS5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTppLmhvdmVydGVtcGxhdGV9LG4oXCJcIix7Y29sb3JBdHRyOlwiYHZhbHVlYFwiLHNob3dTY2FsZURmbHQ6ITAsZWRpdFR5cGVPdmVycmlkZTpcImNhbGNcIn0pLHtjb2xvcmJhcjppLmNvbG9yYmFyLG9wYWNpdHk6aS5vcGFjaXR5LG9wYWNpdHlzY2FsZTp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsY1wifSxsaWdodHBvc2l0aW9uOmkubGlnaHRwb3NpdGlvbixsaWdodGluZzppLmxpZ2h0aW5nLGZsYXRzaGFkaW5nOmkuZmxhdHNoYWRpbmcsY29udG91cjppLmNvbnRvdXIsaG92ZXJpbmZvOm8oe30sYS5ob3ZlcmluZm8pfSksXCJjYWxjXCIsXCJuZXN0ZWRcIik7bC54LmVkaXRUeXBlPWwueS5lZGl0VHlwZT1sLnouZWRpdFR5cGU9bC52YWx1ZS5lZGl0VHlwZT1cImNhbGMrY2xlYXJBeGlzVHlwZXNcIixsLnRyYW5zZm9ybXM9dm9pZCAwfSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiOjc0NixcIi4uL2lzb3N1cmZhY2UvYXR0cmlidXRlc1wiOjk4OX1dLDExNzU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2wtbWVzaDNkXCIpLGk9dChcIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3JcIikucGFyc2VDb2xvclNjYWxlLGE9dChcIi4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIiksbz10KFwiLi4vLi4vcGxvdHMvZ2wzZC96aXAzXCIpLHM9dChcIi4uL2lzb3N1cmZhY2UvY29udmVydFwiKS5maW5kTmVhcmVzdE9uQXhpcyxsPXQoXCIuLi9pc29zdXJmYWNlL2NvbnZlcnRcIikuZ2VuZXJhdGVJc29NZXNoZXM7ZnVuY3Rpb24gYyh0LGUscil7dGhpcy5zY2VuZT10LHRoaXMudWlkPXIsdGhpcy5tZXNoPWUsdGhpcy5uYW1lPVwiXCIsdGhpcy5kYXRhPW51bGwsdGhpcy5zaG93Q29udG91cj0hMX12YXIgdT1jLnByb3RvdHlwZTt1LmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLm1lc2gpe3ZhciBlPXQuZGF0YS5pbmRleCxyPXRoaXMuZGF0YS5feFtlXSxuPXRoaXMuZGF0YS5feVtlXSxpPXRoaXMuZGF0YS5feltlXSxhPXRoaXMuZGF0YS5fWXMubGVuZ3RoLG89dGhpcy5kYXRhLl9acy5sZW5ndGgsbD1zKHIsdGhpcy5kYXRhLl9YcykuaWQsYz1zKG4sdGhpcy5kYXRhLl9ZcykuaWQsdT1zKGksdGhpcy5kYXRhLl9acykuaWQsaD10LmluZGV4PXUrbypjK28qYSpsO3QudHJhY2VDb29yZGluYXRlPVt0aGlzLmRhdGEuX3hbaF0sdGhpcy5kYXRhLl95W2hdLHRoaXMuZGF0YS5feltoXSx0aGlzLmRhdGEudmFsdWVbaF1dO3ZhciBmPXRoaXMuZGF0YS5ob3ZlcnRleHR8fHRoaXMuZGF0YS50ZXh0O3JldHVybiBBcnJheS5pc0FycmF5KGYpJiZ2b2lkIDAhPT1mW2hdP3QudGV4dExhYmVsPWZbaF06ZiYmKHQudGV4dExhYmVsPWYpLCEwfX0sdS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zY2VuZSxyPWUuZnVsbFNjZW5lTGF5b3V0O2Z1bmN0aW9uIG4odCxlLHIsbil7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0LmQybChlLDAsbikqcn0pfXRoaXMuZGF0YT1sKHQpO3ZhciBzPXtwb3NpdGlvbnM6byhuKHIueGF4aXMsdC5feCxlLmRhdGFTY2FsZVswXSx0LnhjYWxlbmRhciksbihyLnlheGlzLHQuX3ksZS5kYXRhU2NhbGVbMV0sdC55Y2FsZW5kYXIpLG4oci56YXhpcyx0Ll96LGUuZGF0YVNjYWxlWzJdLHQuemNhbGVuZGFyKSksY2VsbHM6byh0Ll9pLHQuX2osdC5fayksbGlnaHRQb3NpdGlvbjpbdC5saWdodHBvc2l0aW9uLngsdC5saWdodHBvc2l0aW9uLnksdC5saWdodHBvc2l0aW9uLnpdLGFtYmllbnQ6dC5saWdodGluZy5hbWJpZW50LGRpZmZ1c2U6dC5saWdodGluZy5kaWZmdXNlLHNwZWN1bGFyOnQubGlnaHRpbmcuc3BlY3VsYXIscm91Z2huZXNzOnQubGlnaHRpbmcucm91Z2huZXNzLGZyZXNuZWw6dC5saWdodGluZy5mcmVzbmVsLHZlcnRleE5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24sZmFjZU5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcuZmFjZW5vcm1hbHNlcHNpbG9uLG9wYWNpdHk6dC5vcGFjaXR5LG9wYWNpdHlzY2FsZTp0Lm9wYWNpdHlzY2FsZSxjb250b3VyRW5hYmxlOnQuY29udG91ci5zaG93LGNvbnRvdXJDb2xvcjphKHQuY29udG91ci5jb2xvcikuc2xpY2UoMCwzKSxjb250b3VyV2lkdGg6dC5jb250b3VyLndpZHRoLHVzZUZhY2V0Tm9ybWFsczp0LmZsYXRzaGFkaW5nfTtzLnZlcnRleEludGVuc2l0eT10Ll9pbnRlbnNpdHkscy52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHM9W3QuY21pbix0LmNtYXhdLHMuY29sb3JtYXA9aSh0KSx0aGlzLm1lc2gudXBkYXRlKHMpfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5tZXNoKSx0aGlzLm1lc2guZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxpPW4oe2dsOnJ9KSxhPW5ldyBjKHQsaSxlLnVpZCk7cmV0dXJuIGkuX3RyYWNlPWEsYS51cGRhdGUoZSksdC5nbHBsb3QuYWRkKGkpLGF9fSx7XCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yXCI6Njk4LFwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiOjcyNCxcIi4uLy4uL3Bsb3RzL2dsM2QvemlwM1wiOjgwMCxcIi4uL2lzb3N1cmZhY2UvY29udmVydFwiOjk5MSxcImdsLW1lc2gzZFwiOjI3N31dLDExNzY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vYXR0cmlidXRlc1wiKSxhPXQoXCIuLi9pc29zdXJmYWNlL2RlZmF1bHRzXCIpLnN1cHBseUlzb0RlZmF1bHRzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9YSh0LGUscixvLHMpO3ZhciBsPXMoXCJvcGFjaXR5c2NhbGVcIik7XCJtYXhcIj09PWw/ZS5vcGFjaXR5c2NhbGU9W1swLC4xXSxbMSwxXV06XCJtaW5cIj09PWw/ZS5vcGFjaXR5c2NhbGU9W1swLDFdLFsxLC4xXV06XCJleHRyZW1lc1wiPT09bD9lLm9wYWNpdHlzY2FsZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjwzMjtuKyspe3ZhciBpPW4vMzEsYT1lKygxLWUpKigxLU1hdGgucG93KE1hdGguc2luKHQqaSpNYXRoLlBJKSwyKSk7ci5wdXNoKFtpLE1hdGgubWF4KDEsTWF0aC5taW4oMCxhKSldKX1yZXR1cm4gcn0oMSwuMSk6ZnVuY3Rpb24odCl7dmFyIGU9MDtpZighQXJyYXkuaXNBcnJheSh0KXx8dC5sZW5ndGg8MilyZXR1cm4hMTtpZighdFswXXx8IXRbdC5sZW5ndGgtMV0pcmV0dXJuITE7aWYoMCE9K3RbMF1bMF18fDEhPSt0W3QubGVuZ3RoLTFdWzBdKXJldHVybiExO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO2lmKDIhPT1uLmxlbmd0aHx8K25bMF08ZSlyZXR1cm4hMTtlPStuWzBdfXJldHVybiEwfShsKXx8KGUub3BhY2l0eXNjYWxlPXZvaWQgMCl9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9pc29zdXJmYWNlL2RlZmF1bHRzXCI6OTkyLFwiLi9hdHRyaWJ1dGVzXCI6MTE3NH1dLDExNzc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLG4uY2FsYz10KFwiLi4vaXNvc3VyZmFjZS9jYWxjXCIpLG4uY29sb3JiYXI9e21pbjpcImNtaW5cIixtYXg6XCJjbWF4XCJ9LG4ucGxvdD10KFwiLi9jb252ZXJ0XCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwidm9sdW1lXCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvZ2wzZFwiKSxuLmNhdGVnb3JpZXM9W1wiZ2wzZFwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4uLy4uL3Bsb3RzL2dsM2RcIjo3ODksXCIuLi9pc29zdXJmYWNlL2NhbGNcIjo5OTAsXCIuL2F0dHJpYnV0ZXNcIjoxMTc0LFwiLi9jb252ZXJ0XCI6MTE3NSxcIi4vZGVmYXVsdHNcIjoxMTc2fV0sMTE3ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9iYXIvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIikubGluZSxhPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQ7ZnVuY3Rpb24gbyh0KXtyZXR1cm57bWFya2VyOntjb2xvcjphKHt9LG4ubWFya2VyLmNvbG9yLHthcnJheU9rOiExLGVkaXRUeXBlOlwic3R5bGVcIn0pLGxpbmU6e2NvbG9yOmEoe30sbi5tYXJrZXIubGluZS5jb2xvcix7YXJyYXlPazohMSxlZGl0VHlwZTpcInN0eWxlXCJ9KSx3aWR0aDphKHt9LG4ubWFya2VyLmxpbmUud2lkdGgse2FycmF5T2s6ITEsZWRpdFR5cGU6XCJzdHlsZVwifSksZWRpdFR5cGU6XCJzdHlsZVwifSxlZGl0VHlwZTpcInN0eWxlXCJ9LGVkaXRUeXBlOlwic3R5bGVcIn19ZS5leHBvcnRzPXttZWFzdXJlOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGRmbHQ6W10sZWRpdFR5cGU6XCJjYWxjXCJ9LGJhc2U6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0Om51bGwsYXJyYXlPazohMSxlZGl0VHlwZTpcImNhbGNcIn0seDpuLngseDA6bi54MCxkeDpuLmR4LHk6bi55LHkwOm4ueTAsZHk6bi5keSxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTpuLmhvdmVydGVtcGxhdGUsdGV4dDpuLnRleHQsdGV4dHBvc2l0aW9uOm4udGV4dHBvc2l0aW9uLHRleHRmb250Om4udGV4dGZvbnQsaW5zaWRldGV4dGZvbnQ6bi5pbnNpZGV0ZXh0Zm9udCxvdXRzaWRldGV4dGZvbnQ6bi5vdXRzaWRldGV4dGZvbnQsY29uc3RyYWludGV4dDpuLmNvbnN0cmFpbnRleHQsY2xpcG9uYXhpczpuLmNsaXBvbmF4aXMsb3JpZW50YXRpb246bi5vcmllbnRhdGlvbixvZmZzZXQ6bi5vZmZzZXQsd2lkdGg6bi53aWR0aCxpbmNyZWFzaW5nOm8oKSxkZWNyZWFzaW5nOm8oKSx0b3RhbHM6bygpLGNvbm5lY3Rvcjp7bGluZTp7Y29sb3I6aS5jb2xvcix3aWR0aDppLndpZHRoLGRhc2g6aS5kYXNoLGVkaXRUeXBlOlwicGxvdFwifSxtb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJzcGFubmluZ1wiLFwiYmV0d2VlblwiXSxkZmx0OlwiYmV0d2VlblwiLGVkaXRUeXBlOlwicGxvdFwifSx2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJwbG90XCJ9LGVkaXRUeXBlOlwicGxvdFwifSxvZmZzZXRncm91cDpuLm9mZnNldGdyb3VwLGFsaWdubWVudGdyb3VwOm4ub2Zmc2V0Z3JvdXB9fSx7XCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vYmFyL2F0dHJpYnV0ZXNcIjo4MzksXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIjoxMDUyfV0sMTE3OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxpPXQoXCIuLi8uLi9saWJcIikubWVyZ2VBcnJheSxhPXQoXCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uXCIpLG89dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNO2Z1bmN0aW9uIHModCl7cmV0dXJuXCJhXCI9PT10fHxcImFic29sdXRlXCI9PT10fWZ1bmN0aW9uIGwodCl7cmV0dXJuXCJ0XCI9PT10fHxcInRvdGFsXCI9PT10fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGMsdT1uLmdldEZyb21JZCh0LGUueGF4aXN8fFwieFwiKSxoPW4uZ2V0RnJvbUlkKHQsZS55YXhpc3x8XCJ5XCIpO1wiaFwiPT09ZS5vcmllbnRhdGlvbj8ocj11Lm1ha2VDYWxjZGF0YShlLFwieFwiKSxjPWgubWFrZUNhbGNkYXRhKGUsXCJ5XCIpKToocj1oLm1ha2VDYWxjZGF0YShlLFwieVwiKSxjPXUubWFrZUNhbGNkYXRhKGUsXCJ4XCIpKTtmb3IodmFyIGYscD1NYXRoLm1pbihjLmxlbmd0aCxyLmxlbmd0aCksZD1uZXcgQXJyYXkocCksZz0wLHY9ITEsbT0wO208cDttKyspe3ZhciB5PXJbbV18fDAseD0hMTsoclttXSE9PW98fGwoZS5tZWFzdXJlW21dKXx8cyhlLm1lYXN1cmVbbV0pKSYmbSsxPHAmJihyW20rMV0hPT1vfHxsKGUubWVhc3VyZVttKzFdKXx8cyhlLm1lYXN1cmVbbSsxXSkpJiYoeD0hMCk7dmFyIGI9ZFttXT17aTptLHA6Y1ttXSxzOnkscmF3Uzp5LGNOZXh0Onh9O3MoZS5tZWFzdXJlW21dKT8oZz1iLnMsYi5pc1N1bT0hMCxiLmRpcj1cInRvdGFsc1wiLGIucz1nKTpsKGUubWVhc3VyZVttXSk/KGIuaXNTdW09ITAsYi5kaXI9XCJ0b3RhbHNcIixiLnM9Zyk6KGIuaXNTdW09ITEsYi5kaXI9Yi5yYXdTPDA/XCJkZWNyZWFzaW5nXCI6XCJpbmNyZWFzaW5nXCIsZj1iLnMsYi5zPWcrZixnKz1mKSxcInRvdGFsc1wiPT09Yi5kaXImJih2PSEwKSxlLmlkcyYmKGIuaWQ9U3RyaW5nKGUuaWRzW21dKSl9cmV0dXJuIGQubGVuZ3RoJiYoZFswXS5oYXNUb3RhbHM9diksaShlLnRleHQsZCxcInR4XCIpLGkoZS5ob3ZlcnRleHQsZCxcImh0eFwiKSxhKGQsZSksZH19LHtcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIjoxMDU0fV0sMTE4MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsY1wiKS5zZXRHcm91cFBvc2l0aW9ucztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGE9dC5fZnVsbExheW91dCxvPXQuX2Z1bGxEYXRhLHM9dC5jYWxjZGF0YSxsPWUueGF4aXMsYz1lLnlheGlzLHU9W10saD1bXSxmPVtdO2ZvcihpPTA7aTxvLmxlbmd0aDtpKyspe3ZhciBwPW9baV07ITA9PT1wLnZpc2libGUmJnAueGF4aXM9PT1sLl9pZCYmcC55YXhpcz09PWMuX2lkJiZcIndhdGVyZmFsbFwiPT09cC50eXBlJiYocj1zW2ldLFwiaFwiPT09cC5vcmllbnRhdGlvbj9mLnB1c2gocik6aC5wdXNoKHIpLHUucHVzaChyKSl9dmFyIGQ9e19mdWxsTGF5b3V0OntfYXhpc01hdGNoR3JvdXBzOmEuX2F4aXNNYXRjaEdyb3VwcyxfYWxpZ25tZW50T3B0czphLl9hbGlnbm1lbnRPcHRzLGJhcm1vZGU6YS53YXRlcmZhbGxtb2RlLGJhcmdhcDphLndhdGVyZmFsbGdhcCxiYXJncm91cGdhcDphLndhdGVyZmFsbGdyb3VwZ2FwfX07Zm9yKG4oZCxsLGMsaCksbihkLGMsbCxmKSxpPTA7aTx1Lmxlbmd0aDtpKyspe3I9dVtpXTtmb3IodmFyIGc9MDtnPHIubGVuZ3RoO2crKyl7dmFyIHY9cltnXTshMT09PXYuaXNTdW0mJih2LnMwKz0wPT09Zz8wOnJbZy0xXS5zKX19fX0se1wiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGNcIjo4NDJ9XSwxMTgxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi9iYXIvZGVmYXVsdHNcIikuaGFuZGxlR3JvdXBpbmdEZWZhdWx0cyxhPXQoXCIuLi9iYXIvZGVmYXVsdHNcIikuaGFuZGxlVGV4dCxvPXQoXCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzXCIpLHM9dChcIi4vYXR0cmlidXRlc1wiKSxsPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGM9XCIjM0Q5OTcwXCIsdT1cIiNGRjQxMzZcIixoPVwiIzQ0OTlGRlwiO2Z1bmN0aW9uIGYodCxlLHIpe3QoZStcIi5tYXJrZXIuY29sb3JcIixyKSx0KGUrXCIubWFya2VyLmxpbmUuY29sb3JcIixsLmRlZmF1bHRMaW5lKSx0KGUrXCIubWFya2VyLmxpbmUud2lkdGhcIil9ZS5leHBvcnRzPXtzdXBwbHlEZWZhdWx0czpmdW5jdGlvbih0LGUscixpKXtmdW5jdGlvbiBsKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9byh0LGUsaSxsKT8obChcIm1lYXN1cmVcIiksbChcIm9yaWVudGF0aW9uXCIsZS54JiYhZS55P1wiaFwiOlwidlwiKSxsKFwiYmFzZVwiKSxsKFwib2Zmc2V0XCIpLGwoXCJ3aWR0aFwiKSxsKFwidGV4dFwiKSxsKFwiaG92ZXJ0ZXh0XCIpLGwoXCJob3ZlcnRlbXBsYXRlXCIpLGEodCxlLGksbCwhMSksZihsLFwiaW5jcmVhc2luZ1wiLGMpLGYobCxcImRlY3JlYXNpbmdcIix1KSxmKGwsXCJ0b3RhbHNcIixoKSxsKFwiY29ubmVjdG9yLnZpc2libGVcIikmJihsKFwiY29ubmVjdG9yLm1vZGVcIiksbChcImNvbm5lY3Rvci5saW5lLndpZHRoXCIpJiYobChcImNvbm5lY3Rvci5saW5lLmNvbG9yXCIpLGwoXCJjb25uZWN0b3IubGluZS5kYXNoXCIpKSkpOmUudmlzaWJsZT0hMX0sY3Jvc3NUcmFjZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHIsYTtmdW5jdGlvbiBvKHQpe3JldHVybiBuLmNvZXJjZShhLl9pbnB1dCxhLHMsdCl9aWYoXCJncm91cFwiPT09ZS53YXRlcmZhbGxtb2RlKWZvcih2YXIgbD0wO2w8dC5sZW5ndGg7bCsrKXI9KGE9dFtsXSkuX2lucHV0LGkocixhLGUsbyl9LGhhbmRsZUdyb3VwaW5nRGVmYXVsdHM6aX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi9iYXIvZGVmYXVsdHNcIjo4NDMsXCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzXCI6MTA3OCxcIi4vYXR0cmlidXRlc1wiOjExNzh9XSwxMTgyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLmhvdmVyTGFiZWxUZXh0LGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIikub3BhY2l0eSxhPXQoXCIuLi9iYXIvaG92ZXJcIikuaG92ZXJPbkJhcnMsbz1cIlxcdTI1YjJcIixzPVwiXFx1MjViY1wiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXt2YXIgYz1hKHQsZSxyLGwpO2lmKGMpe3ZhciB1PWMuY2QsaD11WzBdLnRyYWNlLGY9XCJoXCI9PT1oLm9yaWVudGF0aW9uLHA9Zj90LnhhOnQueWEsZD11W2MuaW5kZXhdLGc9Zj9cInhcIjpcInlcIix2PWQuaXNTdW0/ZC5iK2QuczpkLnJhd1M7aWYoZC5pc1N1bSljW2crXCJMYWJlbFZhbFwiXT1tKHYpO2Vsc2V7aWYodj4wKWMuZXh0cmFUZXh0PW0odikrXCIgXCIrbztlbHNle2lmKCEodjwwKSlyZXR1cm47Yy5leHRyYVRleHQ9XCIoXCIrbSgtdikrXCIpIFwiK3N9Yy5leHRyYVRleHQrPVwiPGJyPkluaXRpYWw6IFwiK20oZC5iK2Qucy12KX1yZXR1cm4gYy5jb2xvcj1mdW5jdGlvbih0LGUpe3ZhciByPXRbZS5kaXJdLm1hcmtlcixuPXIuY29sb3IsYT1yLmxpbmUuY29sb3Isbz1yLmxpbmUud2lkdGg7aWYoaShuKSlyZXR1cm4gbjtpZihpKGEpJiZvKXJldHVybiBhfShoLGQpLFtjXX1mdW5jdGlvbiBtKHQpe3JldHVybiBuKHAsdCl9fX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vYmFyL2hvdmVyXCI6ODQ1fV0sMTE4MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4ubGF5b3V0QXR0cmlidXRlcz10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLnN1cHBseURlZmF1bHRzLG4uY3Jvc3NUcmFjZURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLmNyb3NzVHJhY2VEZWZhdWx0cyxuLnN1cHBseUxheW91dERlZmF1bHRzPXQoXCIuL2xheW91dF9kZWZhdWx0c1wiKSxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLmNyb3NzVHJhY2VDYWxjPXQoXCIuL2Nyb3NzX3RyYWNlX2NhbGNcIiksbi5wbG90PXQoXCIuL3Bsb3RcIiksbi5zdHlsZT10KFwiLi9zdHlsZVwiKS5zdHlsZSxuLmhvdmVyUG9pbnRzPXQoXCIuL2hvdmVyXCIpLG4uc2VsZWN0UG9pbnRzPXQoXCIuLi9iYXIvc2VsZWN0XCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwid2F0ZXJmYWxsXCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCIpLG4uY2F0ZWdvcmllcz1bXCJjYXJ0ZXNpYW5cIixcInN2Z1wiLFwib3JpZW50ZWRcIixcInNob3dMZWdlbmRcIixcInpvb21TY2FsZVwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiOjc2MCxcIi4uL2Jhci9zZWxlY3RcIjo4NTAsXCIuL2F0dHJpYnV0ZXNcIjoxMTc4LFwiLi9jYWxjXCI6MTE3OSxcIi4vY3Jvc3NfdHJhY2VfY2FsY1wiOjExODAsXCIuL2RlZmF1bHRzXCI6MTE4MSxcIi4vaG92ZXJcIjoxMTgyLFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjExODQsXCIuL2xheW91dF9kZWZhdWx0c1wiOjExODUsXCIuL3Bsb3RcIjoxMTg2LFwiLi9zdHlsZVwiOjExODd9XSwxMTg0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXt3YXRlcmZhbGxtb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJncm91cFwiLFwib3ZlcmxheVwiXSxkZmx0OlwiZ3JvdXBcIixlZGl0VHlwZTpcImNhbGNcIn0sd2F0ZXJmYWxsZ2FwOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZWRpdFR5cGU6XCJjYWxjXCJ9LHdhdGVyZmFsbGdyb3VwZ2FwOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifX19LHt9XSwxMTg1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9ITE7ZnVuY3Rpb24gbyhyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfWZvcih2YXIgcz0wO3M8ci5sZW5ndGg7cysrKXt2YXIgbD1yW3NdO2lmKGwudmlzaWJsZSYmXCJ3YXRlcmZhbGxcIj09PWwudHlwZSl7YT0hMDticmVha319YSYmKG8oXCJ3YXRlcmZhbGxtb2RlXCIpLG8oXCJ3YXRlcmZhbGxnYXBcIiwuMiksbyhcIndhdGVyZmFsbGdyb3VwZ2FwXCIpKX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjoxMTg0fV0sMTE4NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLG89dChcIi4uL2Jhci9wbG90XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtvKHQsZSxyLHMpLGZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzPWUueGF4aXMsbD1lLnlheGlzO2kubWFrZVRyYWNlR3JvdXBzKG8scixcInRyYWNlIGJhcnNcIikuZWFjaChmdW5jdGlvbihyKXt2YXIgbz1uLnNlbGVjdCh0aGlzKSxjPXJbMF0sdT1jLnRyYWNlLGg9aS5lbnN1cmVTaW5nbGUobyxcImdcIixcImxpbmVzXCIpO2lmKHUuY29ubmVjdG9yJiZ1LmNvbm5lY3Rvci52aXNpYmxlKXt2YXIgZj1cImhcIj09PXUub3JpZW50YXRpb24scD11LmNvbm5lY3Rvci5tb2RlO2UuaXNSYW5nZVBsb3R8fChjLm5vZGUzPW8pO3ZhciBkPWguc2VsZWN0QWxsKFwiZy5saW5lXCIpLmRhdGEoaS5pZGVudGl0eSk7ZC5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcImxpbmVcIiwhMCksZC5leGl0KCkucmVtb3ZlKCk7dmFyIGc9ZC5zaXplKCk7ZC5lYWNoKGZ1bmN0aW9uKHIsbyl7aWYobz09PWctMXx8ci5jTmV4dCl7dmFyIGMsaCxkLHYsbSx5LHgsYixfPW4uc2VsZWN0KHRoaXMpLHc9XCJcIixrPTA7bysxPGcmJkFycmF5LmlzQXJyYXkodS5vZmZzZXQpJiYoay09dS5vZmZzZXRbbysxXS11Lm9mZnNldFtvXSksZj8oYz1zLmMycChyLnMxLCEwKSxoPWwuYzJwKHIucDEsITApLGQ9cy5jMnAoci5zMCwhMCksdj1sLmMycChyLnAwLCEwKSxtPXMuYzJwKHIuczEsITApLHk9bC5jMnAoci5wMSwhMCksbysxPGcmJih4PXMuYzJwKHIuczArMS1rLCEwKSxiPWwuYzJwKHIucDArMS1rLCEwKSkpOihjPXMuYzJwKHIucDEsITApLGg9bC5jMnAoci5zMSwhMCksZD1zLmMycChyLnAwLCEwKSx2PWwuYzJwKHIuczAsITApLG09cy5jMnAoci5wMSwhMCkseT1sLmMycChyLnMxLCEwKSxvKzE8ZyYmKHg9cy5jMnAoci5wMCsxLWssITApLGI9bC5jMnAoci5zMCsxLWssITApKSksXCJzcGFubmluZ1wiPT09cCYmIXIuaXNTdW0mJm8+MCYmKHcrPWY/XCJNXCIrZCtcIixcIitoK1wiVlwiK3Y6XCJNXCIrYytcIixcIit2K1wiSFwiK2QpLFwiYmV0d2VlblwiIT09cCYmKHIuaXNTdW18fG88Zy0xKSYmKHcrPWY/XCJNXCIrbStcIixcIit2K1wiVlwiK3k6XCJNXCIrZCtcIixcIit5K1wiSFwiK20pLHZvaWQgMCE9PXgmJnZvaWQgMCE9PWImJih3Kz1mP1wiTVwiK20rXCIsXCIreStcIlZcIitiOlwiTVwiK20rXCIsXCIreStcIkhcIit4KSxpLmVuc3VyZVNpbmdsZShfLFwicGF0aFwiKS5hdHRyKFwiZFwiLHcpLmNhbGwoYS5zZXRDbGlwVXJsLGUubGF5ZXJDbGlwSWQsdCl9fSl9ZWxzZSBoLnJlbW92ZSgpfSl9KHQsZSxyLHMpfX0se1wiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vYmFyL3Bsb3RcIjo4NDksZDM6MTU1fV0sMTE4NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxvPXQoXCIuLi9iYXIvc3R5bGVcIikuc3R5bGVUZXh0UG9pbnRzO2UuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCxlKXt2YXIgcj1lP2VbMF0ubm9kZTM6bi5zZWxlY3QodCkuc2VsZWN0QWxsKFwiZy53YXRlcmZhbGxsYXllclwiKS5zZWxlY3RBbGwoXCJnLnRyYWNlXCIpO3Iuc3R5bGUoXCJvcGFjaXR5XCIsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pLHIuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxzPWVbMF0udHJhY2U7ci5zZWxlY3RBbGwoXCIucG9pbnQgPiBwYXRoXCIpLmVhY2goZnVuY3Rpb24odCl7aWYoIXQuaXNCbGFuayl7dmFyIGU9c1t0LmRpcl0ubWFya2VyO24uc2VsZWN0KHRoaXMpLmNhbGwoYS5maWxsLGUuY29sb3IpLmNhbGwoYS5zdHJva2UsZS5saW5lLmNvbG9yKS5jYWxsKGkuZGFzaExpbmUsZS5saW5lLmRhc2gsZS5saW5lLndpZHRoKS5zdHlsZShcIm9wYWNpdHlcIixzLnNlbGVjdGVkcG9pbnRzJiYhdC5zZWxlY3RlZD8uMzoxKX19KSxvKHIscyx0KSxyLnNlbGVjdEFsbChcIi5saW5lc1wiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT1zLmNvbm5lY3Rvci5saW5lO2kubGluZUdyb3VwU3R5bGUodC5zZWxlY3RBbGwoXCJwYXRoXCIpLGUud2lkdGgsZS5jb2xvcixlLmRhc2gpfSl9KX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vYmFyL3N0eWxlXCI6ODUyLGQzOjE1NX1dLDExODg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksaT10KFwiLi4vbGliXCIpLGE9dChcIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hXCIpLG89dChcIi4vaGVscGVyc1wiKS5wb2ludHNBY2Nlc3NvckZ1bmN0aW9uLHM9dChcIi4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNO3IubW9kdWxlVHlwZT1cInRyYW5zZm9ybVwiLHIubmFtZT1cImFnZ3JlZ2F0ZVwiO3ZhciBsPXIuYXR0cmlidXRlcz17ZW5hYmxlZDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSxncm91cHM6e3ZhbFR5cGU6XCJzdHJpbmdcIixzdHJpY3Q6ITAsbm9CbGFuazohMCxhcnJheU9rOiEwLGRmbHQ6XCJ4XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGFnZ3JlZ2F0aW9uczp7X2lzTGlua2VkVG9BcnJheTpcImFnZ3JlZ2F0aW9uXCIsdGFyZ2V0Ont2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGZ1bmM6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImNvdW50XCIsXCJzdW1cIixcImF2Z1wiLFwibWVkaWFuXCIsXCJtb2RlXCIsXCJybXNcIixcInN0ZGRldlwiLFwibWluXCIsXCJtYXhcIixcImZpcnN0XCIsXCJsYXN0XCIsXCJjaGFuZ2VcIixcInJhbmdlXCJdLGRmbHQ6XCJmaXJzdFwiLGVkaXRUeXBlOlwiY2FsY1wifSxmdW5jbW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wic2FtcGxlXCIsXCJwb3B1bGF0aW9uXCJdLGRmbHQ6XCJzYW1wbGVcIixlZGl0VHlwZTpcImNhbGNcIn0sZW5hYmxlZDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LGM9bC5hZ2dyZWdhdGlvbnM7ZnVuY3Rpb24gdSh0LGUscixhKXtpZihhLmVuYWJsZWQpe2Zvcih2YXIgbz1hLnRhcmdldCxsPWkubmVzdGVkUHJvcGVydHkoZSxvKSxjPWwuZ2V0KCksdT1mdW5jdGlvbih0LGUpe3ZhciByPXQuZnVuYyxuPWUuZDJjLGk9ZS5jMmQ7c3dpdGNoKHIpe2Nhc2VcImNvdW50XCI6cmV0dXJuIGg7Y2FzZVwiZmlyc3RcIjpyZXR1cm4gZjtjYXNlXCJsYXN0XCI6cmV0dXJuIHA7Y2FzZVwic3VtXCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1uKHRbZVthXV0pO28hPT1zJiYocis9byl9cmV0dXJuIGkocil9O2Nhc2VcImF2Z1wiOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLGE9MCxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBsPW4odFtlW29dXSk7bCE9PXMmJihyKz1sLGErKyl9cmV0dXJuIGE/aShyL2EpOnN9O2Nhc2VcIm1pblwiOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xLzAsYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1uKHRbZVthXV0pO28hPT1zJiYocj1NYXRoLm1pbihyLG8pKX1yZXR1cm4gcj09PTEvMD9zOmkocil9O2Nhc2VcIm1heFwiOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0tMS8wLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIG89bih0W2VbYV1dKTtvIT09cyYmKHI9TWF0aC5tYXgocixvKSl9cmV0dXJuIHI9PT0tMS8wP3M6aShyKX07Y2FzZVwicmFuZ2VcIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MS8wLGE9LTEvMCxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBsPW4odFtlW29dXSk7bCE9PXMmJihyPU1hdGgubWluKHIsbCksYT1NYXRoLm1heChhLGwpKX1yZXR1cm4gYT09PS0xLzB8fHI9PT0xLzA/czppKGEtcil9O2Nhc2VcImNoYW5nZVwiOnJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPW4odFtlWzBdXSksYT1uKHRbZVtlLmxlbmd0aC0xXV0pO3JldHVybiByPT09c3x8YT09PXM/czppKGEtcil9O2Nhc2VcIm1lZGlhblwiOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBvPW4odFtlW2FdXSk7byE9PXMmJnIucHVzaChvKX1pZighci5sZW5ndGgpcmV0dXJuIHM7ci5zb3J0KCk7dmFyIGw9KHIubGVuZ3RoLTEpLzI7cmV0dXJuIGkoKHJbTWF0aC5mbG9vcihsKV0rcltNYXRoLmNlaWwobCldKS8yKX07Y2FzZVwibW9kZVwiOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxhPTAsbz1zLGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIGM9bih0W2VbbF1dKTtpZihjIT09cyl7dmFyIHU9cltjXT0ocltjXXx8MCkrMTt1PmEmJihhPXUsbz1jKX19cmV0dXJuIGE/aShvKTpzfTtjYXNlXCJybXNcIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxhPTAsbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgbD1uKHRbZVtvXV0pO2whPT1zJiYocis9bCpsLGErKyl9cmV0dXJuIGE/aShNYXRoLnNxcnQoci9hKSk6c307Y2FzZVwic3RkZGV2XCI6cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIGksYT0wLG89MCxsPTEsYz1zO2ZvcihpPTA7aTxyLmxlbmd0aCYmYz09PXM7aSsrKWM9bihlW3JbaV1dKTtpZihjPT09cylyZXR1cm4gcztmb3IoO2k8ci5sZW5ndGg7aSsrKXt2YXIgdT1uKGVbcltpXV0pO2lmKHUhPT1zKXt2YXIgaD11LWM7YSs9aCxvKz1oKmgsbCsrfX12YXIgZj1cInNhbXBsZVwiPT09dC5mdW5jbW9kZT9sLTE6bDtyZXR1cm4gZj9NYXRoLnNxcnQoKG8tYSphL2wpL2YpOjB9fX0oYSxuLmdldERhdGFDb252ZXJzaW9ucyh0LGUsbyxjKSksZD1uZXcgQXJyYXkoci5sZW5ndGgpLGc9MDtnPHIubGVuZ3RoO2crKylkW2ddPXUoYyxyW2ddKTtsLnNldChkKSxcImNvdW50XCI9PT1hLmZ1bmMmJmkucHVzaFVuaXF1ZShlLl9hcnJheUF0dHJzLG8pfX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIGUubGVuZ3RofWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gdFtlWzBdXX1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIHRbZVtlLmxlbmd0aC0xXV19ci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0LGUpe3ZhciByLG49e307ZnVuY3Rpb24gbyhlLHIpe3JldHVybiBpLmNvZXJjZSh0LG4sbCxlLHIpfWlmKCFvKFwiZW5hYmxlZFwiKSlyZXR1cm4gbjt2YXIgcz1hLmZpbmRBcnJheUF0dHJpYnV0ZXMoZSksdT17fTtmb3Iocj0wO3I8cy5sZW5ndGg7cisrKXVbc1tyXV09MTt2YXIgaD1vKFwiZ3JvdXBzXCIpO2lmKCFBcnJheS5pc0FycmF5KGgpKXtpZighdVtoXSlyZXR1cm4gbi5lbmFibGVkPSExLG47dVtoXT0wfXZhciBmLHA9dC5hZ2dyZWdhdGlvbnN8fFtdLGQ9bi5hZ2dyZWdhdGlvbnM9bmV3IEFycmF5KHAubGVuZ3RoKTtmdW5jdGlvbiBnKHQsZSl7cmV0dXJuIGkuY29lcmNlKHBbcl0sZixjLHQsZSl9Zm9yKHI9MDtyPHAubGVuZ3RoO3IrKyl7Zj17X2luZGV4OnJ9O3ZhciB2PWcoXCJ0YXJnZXRcIiksbT1nKFwiZnVuY1wiKTtnKFwiZW5hYmxlZFwiKSYmdiYmKHVbdl18fFwiY291bnRcIj09PW0mJnZvaWQgMD09PXVbdl0pPyhcInN0ZGRldlwiPT09bSYmZyhcImZ1bmNtb2RlXCIpLHVbdl09MCxkW3JdPWYpOmRbcl09e2VuYWJsZWQ6ITEsX2luZGV4OnJ9fWZvcihyPTA7cjxzLmxlbmd0aDtyKyspdVtzW3JdXSYmZC5wdXNoKHt0YXJnZXQ6c1tyXSxmdW5jOmMuZnVuYy5kZmx0LGVuYWJsZWQ6ITAsX2luZGV4Oi0xfSk7cmV0dXJuIG59LHIuY2FsY1RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7aWYoci5lbmFibGVkKXt2YXIgbj1yLmdyb3VwcyxhPWkuZ2V0VGFyZ2V0QXJyYXkoZSx7dGFyZ2V0Om59KTtpZihhKXt2YXIgcyxsLGMsaCxmPXt9LHA9e30sZD1bXSxnPW8oZS50cmFuc2Zvcm1zLHIpLHY9YS5sZW5ndGg7Zm9yKGUuX2xlbmd0aCYmKHY9TWF0aC5taW4odixlLl9sZW5ndGgpKSxzPTA7czx2O3MrKyl2b2lkIDA9PT0oYz1mW2w9YVtzXV0pPyhmW2xdPWQubGVuZ3RoLGg9W3NdLGQucHVzaChoKSxwW2ZbbF1dPWcocykpOihkW2NdLnB1c2gocykscFtmW2xdXT0ocFtmW2xdXXx8W10pLmNvbmNhdChnKHMpKSk7ci5faW5kZXhUb1BvaW50cz1wO3ZhciBtPXIuYWdncmVnYXRpb25zO2ZvcihzPTA7czxtLmxlbmd0aDtzKyspdSh0LGUsZCxtW3NdKTtcInN0cmluZ1wiPT10eXBlb2YgbiYmdSh0LGUsZCx7dGFyZ2V0Om4sZnVuYzpcImZpcnN0XCIsZW5hYmxlZDohMH0pLGUuX2xlbmd0aD1kLmxlbmd0aH19fX0se1wiLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uL2xpYlwiOjcwMSxcIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hXCI6NzM4LFwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuL2hlbHBlcnNcIjoxMTkxfV0sMTE4OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9saWJcIiksaT10KFwiLi4vcmVnaXN0cnlcIiksYT10KFwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksbz10KFwiLi9oZWxwZXJzXCIpLnBvaW50c0FjY2Vzc29yRnVuY3Rpb24scz10KFwiLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHNcIiksbD1zLkNPTVBBUklTT05fT1BTLGM9cy5JTlRFUlZBTF9PUFMsdT1zLlNFVF9PUFM7ci5tb2R1bGVUeXBlPVwidHJhbnNmb3JtXCIsci5uYW1lPVwiZmlsdGVyXCIsci5hdHRyaWJ1dGVzPXtlbmFibGVkOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LHRhcmdldDp7dmFsVHlwZTpcInN0cmluZ1wiLHN0cmljdDohMCxub0JsYW5rOiEwLGFycmF5T2s6ITAsZGZsdDpcInhcIixlZGl0VHlwZTpcImNhbGNcIn0sb3BlcmF0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXS5jb25jYXQobCkuY29uY2F0KGMpLmNvbmNhdCh1KSxkZmx0OlwiPVwiLGVkaXRUeXBlOlwiY2FsY1wifSx2YWx1ZTp7dmFsVHlwZTpcImFueVwiLGRmbHQ6MCxlZGl0VHlwZTpcImNhbGNcIn0scHJlc2VydmVnYXBzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEsZWRpdFR5cGU6XCJjYWxjXCJ9LGVkaXRUeXBlOlwiY2FsY1wifSxyLnN1cHBseURlZmF1bHRzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Z1bmN0aW9uIGEoaSxhKXtyZXR1cm4gbi5jb2VyY2UodCxlLHIuYXR0cmlidXRlcyxpLGEpfWlmKGEoXCJlbmFibGVkXCIpKXthKFwicHJlc2VydmVnYXBzXCIpLGEoXCJvcGVyYXRpb25cIiksYShcInZhbHVlXCIpLGEoXCJ0YXJnZXRcIik7dmFyIG89aS5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcImhhbmRsZURlZmF1bHRzXCIpO28odCxlLFwidmFsdWVjYWxlbmRhclwiLG51bGwpLG8odCxlLFwidGFyZ2V0Y2FsZW5kYXJcIixudWxsKX1yZXR1cm4gZX0sci5jYWxjVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXtpZihyLmVuYWJsZWQpe3ZhciBpPW4uZ2V0VGFyZ2V0QXJyYXkoZSxyKTtpZihpKXt2YXIgcz1yLnRhcmdldCxoPWkubGVuZ3RoO2UuX2xlbmd0aCYmKGg9TWF0aC5taW4oaCxlLl9sZW5ndGgpKTt2YXIgZj1yLnRhcmdldGNhbGVuZGFyLHA9ZS5fYXJyYXlBdHRycyxkPXIucHJlc2VydmVnYXBzO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBzKXt2YXIgZz1uLm5lc3RlZFByb3BlcnR5KGUscytcImNhbGVuZGFyXCIpLmdldCgpO2cmJihmPWcpfXZhciB2LG0seT1mdW5jdGlvbih0LGUscil7dmFyIG49dC5vcGVyYXRpb24saT10LnZhbHVlLGE9QXJyYXkuaXNBcnJheShpKTtmdW5jdGlvbiBvKHQpe3JldHVybi0xIT09dC5pbmRleE9mKG4pfXZhciBzLGg9ZnVuY3Rpb24ocil7cmV0dXJuIGUociwwLHQudmFsdWVjYWxlbmRhcil9LGY9ZnVuY3Rpb24odCl7cmV0dXJuIGUodCwwLHIpfTtvKGwpP3M9aChhP2lbMF06aSk6byhjKT9zPWE/W2goaVswXSksaChpWzFdKV06W2goaSksaChpKV06byh1KSYmKHM9YT9pLm1hcChoKTpbaChpKV0pO3N3aXRjaChuKXtjYXNlXCI9XCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpPT09c307Y2FzZVwiIT1cIjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGYodCkhPT1zfTtjYXNlXCI8XCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpPHN9O2Nhc2VcIjw9XCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpPD1zfTtjYXNlXCI+XCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpPnN9O2Nhc2VcIj49XCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpPj1zfTtjYXNlXCJbXVwiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPj1zWzBdJiZlPD1zWzFdfTtjYXNlXCIoKVwiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPnNbMF0mJmU8c1sxXX07Y2FzZVwiWylcIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9Zih0KTtyZXR1cm4gZT49c1swXSYmZTxzWzFdfTtjYXNlXCIoXVwiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPnNbMF0mJmU8PXNbMV19O2Nhc2VcIl1bXCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWYodCk7cmV0dXJuIGU8PXNbMF18fGU+PXNbMV19O2Nhc2VcIikoXCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWYodCk7cmV0dXJuIGU8c1swXXx8ZT5zWzFdfTtjYXNlXCJdKFwiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPD1zWzBdfHxlPnNbMV19O2Nhc2VcIilbXCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWYodCk7cmV0dXJuIGU8c1swXXx8ZT49c1sxXX07Y2FzZVwie31cIjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1zLmluZGV4T2YoZih0KSl9O2Nhc2VcIn17XCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybi0xPT09cy5pbmRleE9mKGYodCkpfX19KHIsYS5nZXREYXRhVG9Db29yZEZ1bmModCxlLHMsaSksZikseD17fSxiPXt9LF89MDtkPyh2PWZ1bmN0aW9uKHQpe3hbdC5hc3RyXT1uLmV4dGVuZERlZXAoW10sdC5nZXQoKSksdC5zZXQobmV3IEFycmF5KGgpKX0sbT1mdW5jdGlvbih0LGUpe3ZhciByPXhbdC5hc3RyXVtlXTt0LmdldCgpW2VdPXJ9KToodj1mdW5jdGlvbih0KXt4W3QuYXN0cl09bi5leHRlbmREZWVwKFtdLHQuZ2V0KCkpLHQuc2V0KFtdKX0sbT1mdW5jdGlvbih0LGUpe3ZhciByPXhbdC5hc3RyXVtlXTt0LmdldCgpLnB1c2gocil9KSxBKHYpO2Zvcih2YXIgdz1vKGUudHJhbnNmb3JtcyxyKSxrPTA7azxoO2srKyl7eShpW2tdKT8oQShtLGspLGJbXysrXT13KGspKTpkJiZfKyt9ci5faW5kZXhUb1BvaW50cz1iLGUuX2xlbmd0aD1ffX1mdW5jdGlvbiBBKHQscil7Zm9yKHZhciBpPTA7aTxwLmxlbmd0aDtpKyspe3Qobi5uZXN0ZWRQcm9wZXJ0eShlLHBbaV0pLHIpfX19fSx7XCIuLi9jb25zdGFudHMvZmlsdGVyX29wc1wiOjY3NCxcIi4uL2xpYlwiOjcwMSxcIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vcmVnaXN0cnlcIjo4MjksXCIuL2hlbHBlcnNcIjoxMTkxfV0sMTE5MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9saWJcIiksaT10KFwiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWFcIiksYT10KFwiLi4vcGxvdHMvcGxvdHNcIiksbz10KFwiLi9oZWxwZXJzXCIpLnBvaW50c0FjY2Vzc29yRnVuY3Rpb247ZnVuY3Rpb24gcyh0LGUpe3ZhciByLHMsbCxjLHUsaCxmLHAsZCxnLHY9ZS50cmFuc2Zvcm0sbT1lLnRyYW5zZm9ybUluZGV4LHk9dC50cmFuc2Zvcm1zW21dLmdyb3Vwcyx4PW8odC50cmFuc2Zvcm1zLHYpO2lmKCFBcnJheS5pc0FycmF5KHkpfHwwPT09eS5sZW5ndGgpcmV0dXJuW3RdO3ZhciBiPW4uZmlsdGVyVW5pcXVlKHkpLF89bmV3IEFycmF5KGIubGVuZ3RoKSx3PXkubGVuZ3RoLGs9aS5maW5kQXJyYXlBdHRyaWJ1dGVzKHQpLEE9di5zdHlsZXN8fFtdLFQ9e307Zm9yKHI9MDtyPEEubGVuZ3RoO3IrKylUW0Fbcl0udGFyZ2V0XT1BW3JdLnZhbHVlO3Yuc3R5bGVzJiYoZz1uLmtleWVkQ29udGFpbmVyKHYsXCJzdHlsZXNcIixcInRhcmdldFwiLFwidmFsdWUubmFtZVwiKSk7dmFyIE09e30sUz17fTtmb3Iocj0wO3I8Yi5sZW5ndGg7cisrKXtNW2g9YltyXV09cixTW2hdPTAsKGY9X1tyXT1uLmV4dGVuZERlZXBOb0FycmF5cyh7fSx0KSkuX2dyb3VwPWgsZi50cmFuc2Zvcm1zW21dLl9pbmRleFRvUG9pbnRzPXt9O3ZhciBFPW51bGw7Zm9yKGcmJihFPWcuZ2V0KGgpKSxmLm5hbWU9RXx8XCJcIj09PUU/RTpuLnRlbXBsYXRlU3RyaW5nKHYubmFtZWZvcm1hdCx7dHJhY2U6dC5uYW1lLGdyb3VwOmh9KSxwPWYudHJhbnNmb3JtcyxmLnRyYW5zZm9ybXM9W10scz0wO3M8cC5sZW5ndGg7cysrKWYudHJhbnNmb3Jtc1tzXT1uLmV4dGVuZERlZXBOb0FycmF5cyh7fSxwW3NdKTtmb3Iocz0wO3M8ay5sZW5ndGg7cysrKW4ubmVzdGVkUHJvcGVydHkoZixrW3NdKS5zZXQoW10pfWZvcihsPTA7bDxrLmxlbmd0aDtsKyspe2ZvcihjPWtbbF0scz0wLGQ9W107czxiLmxlbmd0aDtzKyspZFtzXT1uLm5lc3RlZFByb3BlcnR5KF9bc10sYykuZ2V0KCk7Zm9yKHU9bi5uZXN0ZWRQcm9wZXJ0eSh0LGMpLmdldCgpLHM9MDtzPHc7cysrKWRbTVt5W3NdXV0ucHVzaCh1W3NdKX1mb3Iocz0wO3M8dztzKyspeyhmPV9bTVt5W3NdXV0pLnRyYW5zZm9ybXNbbV0uX2luZGV4VG9Qb2ludHNbU1t5W3NdXV09eChzKSxTW3lbc11dKyt9Zm9yKHI9MDtyPGIubGVuZ3RoO3IrKyloPWJbcl0sZj1fW3JdLGEuY2xlYXJFeHBhbmRlZFRyYWNlRGVmYXVsdENvbG9ycyhmKSxmPW4uZXh0ZW5kRGVlcE5vQXJyYXlzKGYsVFtoXXx8e30pO3JldHVybiBffXIubW9kdWxlVHlwZT1cInRyYW5zZm9ybVwiLHIubmFtZT1cImdyb3VwYnlcIixyLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcImNhbGNcIn0sZ3JvdXBzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGRmbHQ6W10sZWRpdFR5cGU6XCJjYWxjXCJ9LG5hbWVmb3JtYXQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcImNhbGNcIn0sc3R5bGVzOntfaXNMaW5rZWRUb0FycmF5Olwic3R5bGVcIix0YXJnZXQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcImNhbGNcIn0sdmFsdWU6e3ZhbFR5cGU6XCJhbnlcIixkZmx0Ont9LGVkaXRUeXBlOlwiY2FsY1wiLF9jb21wYXJlQXNKU09OOiEwfSxlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LHIuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCxlLGkpe3ZhciBhLG89e307ZnVuY3Rpb24gcyhlLGkpe3JldHVybiBuLmNvZXJjZSh0LG8sci5hdHRyaWJ1dGVzLGUsaSl9aWYoIXMoXCJlbmFibGVkXCIpKXJldHVybiBvO3MoXCJncm91cHNcIikscyhcIm5hbWVmb3JtYXRcIixpLl9kYXRhTGVuZ3RoPjE/XCIle2dyb3VwfSAoJXt0cmFjZX0pXCI6XCIle2dyb3VwfVwiKTt2YXIgbD10LnN0eWxlcyxjPW8uc3R5bGVzPVtdO2lmKGwpZm9yKGE9MDthPGwubGVuZ3RoO2ErKyl7dmFyIHU9Y1thXT17fTtuLmNvZXJjZShsW2FdLGNbYV0sci5hdHRyaWJ1dGVzLnN0eWxlcyxcInRhcmdldFwiKTt2YXIgaD1uLmNvZXJjZShsW2FdLGNbYV0sci5hdHRyaWJ1dGVzLnN0eWxlcyxcInZhbHVlXCIpO24uaXNQbGFpbk9iamVjdChoKT91LnZhbHVlPW4uZXh0ZW5kRGVlcCh7fSxoKTpoJiZkZWxldGUgdS52YWx1ZX1yZXR1cm4gb30sci50cmFuc2Zvcm09ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT1bXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKWZvcihyPXModFtuXSxlKSxpPTA7aTxyLmxlbmd0aDtpKyspYS5wdXNoKHJbaV0pO3JldHVybiBhfX0se1wiLi4vbGliXCI6NzAxLFwiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWFcIjo3MzgsXCIuLi9wbG90cy9wbG90c1wiOjgxMCxcIi4vaGVscGVyc1wiOjExOTF9XSwxMTkxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ci5wb2ludHNBY2Nlc3NvckZ1bmN0aW9uPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG4saT0wO2k8dC5sZW5ndGgmJihyPXRbaV0pIT09ZTtpKyspci5faW5kZXhUb1BvaW50cyYmITEhPT1yLmVuYWJsZWQmJihuPXIuX2luZGV4VG9Qb2ludHMpO3JldHVybiBuP2Z1bmN0aW9uKHQpe3JldHVybiBuW3RdfTpmdW5jdGlvbih0KXtyZXR1cm5bdF19fX0se31dLDExOTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vbGliXCIpLGk9dChcIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGE9dChcIi4vaGVscGVyc1wiKS5wb2ludHNBY2Nlc3NvckZ1bmN0aW9uO3IubW9kdWxlVHlwZT1cInRyYW5zZm9ybVwiLHIubmFtZT1cInNvcnRcIixyLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcImNhbGNcIn0sdGFyZ2V0Ont2YWxUeXBlOlwic3RyaW5nXCIsc3RyaWN0OiEwLG5vQmxhbms6ITAsYXJyYXlPazohMCxkZmx0OlwieFwiLGVkaXRUeXBlOlwiY2FsY1wifSxvcmRlcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYXNjZW5kaW5nXCIsXCJkZXNjZW5kaW5nXCJdLGRmbHQ6XCJhc2NlbmRpbmdcIixlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LHIuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gaShpLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsci5hdHRyaWJ1dGVzLGksYSl9cmV0dXJuIGkoXCJlbmFibGVkXCIpJiYoaShcInRhcmdldFwiKSxpKFwib3JkZXJcIikpLGV9LHIuY2FsY1RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7aWYoci5lbmFibGVkKXt2YXIgbz1uLmdldFRhcmdldEFycmF5KGUscik7aWYobyl7dmFyIHM9ci50YXJnZXQsbD1vLmxlbmd0aDtlLl9sZW5ndGgmJihsPU1hdGgubWluKGwsZS5fbGVuZ3RoKSk7dmFyIGMsdSxoPWUuX2FycmF5QXR0cnMsZj1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKTtmb3IoaT0wO2k8bjtpKyspYVtpXT17djplW2ldLGk6aX07Zm9yKGEuc29ydChmdW5jdGlvbih0LGUpe3N3aXRjaCh0Lm9yZGVyKXtjYXNlXCJhc2NlbmRpbmdcIjpyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gZSh0LnYpLWUoci52KX07Y2FzZVwiZGVzY2VuZGluZ1wiOnJldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBlKHIudiktZSh0LnYpfX19KHQscikpLGk9MDtpPG47aSsrKW9baV09YVtpXS5pO3JldHVybiBvfShyLG8saS5nZXREYXRhVG9Db29yZEZ1bmModCxlLHMsbyksbCkscD1hKGUudHJhbnNmb3JtcyxyKSxkPXt9O2ZvcihjPTA7YzxoLmxlbmd0aDtjKyspe3ZhciBnPW4ubmVzdGVkUHJvcGVydHkoZSxoW2NdKSx2PWcuZ2V0KCksbT1uZXcgQXJyYXkobCk7Zm9yKHU9MDt1PGw7dSsrKW1bdV09dltmW3VdXTtnLnNldChtKX1mb3IodT0wO3U8bDt1KyspZFt1XT1wKGZbdV0pO3IuX2luZGV4VG9Qb2ludHM9ZCxlLl9sZW5ndGg9bH19fX0se1wiLi4vbGliXCI6NzAxLFwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuL2hlbHBlcnNcIjoxMTkxfV19LHt9LFsyMl0pKDIyKX0pOyIsImxldCBoZWxwID0gcmVxdWlyZSgnLi9wYWdlLWhlbHAnKVxuXG5sZXQgdGVtcGxhdGVzID0ge1xuICAgICAgICBpbnB1dCA6IChtb2RhbElELCBpbnB1dElELCB0aXRsZSwgbGFiZWwsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9JHttb2RhbElEfSBjbGFzcz1cIm1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPiR7dGl0bGV9PC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9JHtpbnB1dElEfT4ke2xhYmVsfTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD0ke2lucHV0SUR9IG5hbWU9JHtpbnB1dElEfSBzaXplPVwiMzBcIiBhdXRvZm9jdXMgdmFsdWU9XCIke3ZhbHVlfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgb2stbW9kZWwtYnRuIGJveC1zaGFkb3dcIj5PSzwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBib3gtc2hhZG93XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5DbG9zZTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PmBcbiAgICAgICAgfSxcbiAgICAgICAgbWVzc2FnZSA6IChtb2RhbElELCB0aXRsZSwgbWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPSR7bW9kYWxJRH0gY2xhc3M9XCJtb2RhbFwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50IGluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPiAke3RpdGxlfSA8L2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+ICR7bWVzc2FnZX0gPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYm94LXNoYWRvd1wiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+Q2xvc2U8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5gXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpcm1hdGlvbiA6IChtb2RhbElELCB0aXRsZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPSR7bW9kYWxJRH0gY2xhc3M9XCJtb2RhbFwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50IGluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPiAke3RpdGxlfSA8L2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB5ZXMtbW9kYWwtYnRuIGJveC1zaGFkb3dcIj5ZZXM8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYm94LXNoYWRvd1wiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+Tm88L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5gXG4gICAgICAgIH0sXG4gICAgICAgIHVwbG9hZCA6IChtb2RhbElELCB0aXRsZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPSR7bW9kYWxJRH0gY2xhc3M9XCJtb2RhbFwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50IGluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPiAke3RpdGxlfSA8L2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZlcnRpY2xlLXNwYWNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5saW5lXCIgZm9yPVwiZGF0YWZpbGVcIj5QbGVhc2Ugc3BlY2lmeSBhIGZpbGUgdG8gaW1wb3J0OiA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cImZpbGVGb3JVcGxvYWRcIiB0eXBlPVwiZmlsZVwiIGlkPVwiZGF0YWZpbGVcIiBuYW1lPVwiZGF0YWZpbGVcIiBzaXplPVwiMzBcIiByZXF1aXJlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZlcnRpY2xlLXNwYWNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5saW5lXCIgZm9yPVwiZmlsZU5hbWVJbnB1dFwiPk5ldyBmaWxlIG5hbWUgKG9wdGlvbmFsKTogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImZpbGVOYW1lSW5wdXRcIiBuYW1lPVwiZmlsZU5hbWVJbnB1dFwiIHNpemU9XCIzMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYm94LXNoYWRvdyB1cGxvYWQtbW9kYWwtYnRuXCIgZGlzYWJsZWQ+VXBsb2FkPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IGJveC1zaGFkb3dcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PmBcbiAgICAgICAgfVxuICAgIH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZGVsZXRlRmlsZUh0bWwgOiAoZmlsZVR5cGUpID0+IHtcbiAgICAgICAgbGV0IG1vZGFsSUQgPSBcImRlbGV0ZUZpbGVNb2RhbFwiXG4gICAgICAgIGxldCB0aXRsZSA9IGBQZXJtYW5lbnRseSBkZWxldGUgdGhpcyAke2ZpbGVUeXBlfT9gXG5cbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlcy5jb25maXJtYXRpb24obW9kYWxJRCwgdGl0bGUpXG4gICAgfSxcbiAgICBvcGVyYXRpb25JbmZvTW9kYWxIdG1sIDogKHBhZ2UpID0+IHtcbiAgICAgICAgbGV0IG1vZGFsSUQgPSBcIm9wZXJhdGlvbkluZm9Nb2RhbFwiXG4gICAgICAgIGxldCB0aXRsZSA9IFwiSGVscFwiXG4gICAgICAgIGxldCBtZXNzYWdlID0gaGVscFtwYWdlXVxuICAgICAgICAgIFxuICAgICAgICByZXR1cm4gdGVtcGxhdGVzLm1lc3NhZ2UobW9kYWxJRCwgdGl0bGUsIG1lc3NhZ2UpXG4gICAgfSxcbiAgICByZW5kZXJDcmVhdGVNb2RhbEh0bWwgOiAoaXNNb2RlbCwgaXNTcGF0aWFsKSA9PiB7XG4gICAgICAgIHZhciB0aXRsZSA9ICdEaXJlY3RvcnknO1xuICAgICAgICBpZihpc01vZGVsKXtcbiAgICAgICAgICAgIHRpdGxlID0gaXNTcGF0aWFsID8gJ1NwYXRpYWwgTW9kZWwnIDogJ05vbi1TcGF0aWFsIE1vZGVsJztcbiAgICAgICAgfVxuICAgICAgICB0aXRsZSA9IFwiTmV3IFwiICsgdGl0bGVcbiAgICAgICAgbGV0IG1vZGFsSUQgPSBcIm5ld01vZGFsTW9kZWxcIlxuICAgICAgICBsZXQgaW5wdXRJRCA9IFwibW9kZWxOYW1lSW5wdXRcIlxuICAgICAgICBsZXQgbGFiZWwgPSBcIk5hbWU6XCJcbiAgICAgICAgbGV0IHZhbHVlID0gXCJcIlxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlcy5pbnB1dChtb2RhbElELCBpbnB1dElELCB0aXRsZSwgbGFiZWwsIHZhbHVlKVxuICAgIH0sXG4gICAgc2JtbFRvTW9kZWxIdG1sIDogKHRpdGxlLCBlcnJvcnMpID0+IHtcbiAgICAgICAgbGV0IG1vZGFsSUQgPSBcInNibWxUb01vZGVsTW9kYWxcIlxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgZXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZihlcnJvcnNbaV0uc3RhcnRzV2l0aChcIlNCTUwgRXJyb3JcIikgfHwgZXJyb3JzW2ldLnN0YXJ0c1dpdGgoXCJFcnJvclwiKSl7XG4gICAgICAgICAgICAgICAgZXJyb3JzW2ldID0gXCI8Yj5FcnJvcjwvYj46IFwiICsgZXJyb3JzW2ldXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBlcnJvcnNbaV0gPSBcIjxiPldhcm5pbmc8L2I+OiBcIiArIGVycm9yc1tpXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBtZXNzYWdlID0gZXJyb3JzLmpvaW4oXCI8YnI+XCIpXG5cbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlcy5tZXNzYWdlKG1vZGFsSUQsIHRpdGxlLCBtZXNzYWdlKVxuICAgIH0sXG4gICAgdXBsb2FkRmlsZUVycm9yc0h0bWwgOiAoZmlsZSwgdHlwZSwgc3RhdHVzTWVzc2FnZSwgZXJyb3JzKSA9PiB7XG4gICAgICAgIGxldCBtb2RhbElEID0gXCJzYm1sVG9Nb2RlbE1vZGFsXCJcbiAgICAgICAgbGV0IHRpdGxlID0gYEVycm9ycyB1cGxvYWRpbmcgJHtmaWxlfSBhcyBhICR7dHlwZX0gZmlsZWBcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZXJyb3JzW2ldID0gXCI8Yj5FcnJvcjwvYj46IFwiICsgZXJyb3JzW2ldXG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1lc3NhZ2UgPSBgPHA+JHtlcnJvcnMuam9pbihcIjxicj5cIil9PC9wPjxwPjxiPlVwbG9hZCBzdGF0dXM8L2I+OiAke3N0YXR1c01lc3NhZ2V9PC9wPmBcblxuICAgICAgICByZXR1cm4gdGVtcGxhdGVzLm1lc3NhZ2UobW9kYWxJRCwgdGl0bGUsIG1lc3NhZ2UpXG4gICAgfSxcbiAgICB1cGxvYWRGaWxlSHRtbCA6ICh0eXBlKSA9PiB7XG4gICAgICAgIGxldCBtb2RhbElEID0gXCJ1cGxvYWRGaWxlTW9kYWxcIlxuICAgICAgICBsZXQgdGl0bGUgPSBgVXBsb2FkIGEgJHt0eXBlfWBcblxuICAgICAgICByZXR1cm4gdGVtcGxhdGVzLnVwbG9hZChtb2RhbElELCB0aXRsZSlcbiAgICB9LFxuICAgIGR1cGxpY2F0ZVdvcmtmbG93SHRtbCA6ICh3a2ZsRmlsZSwgYm9keSkgPT4ge1xuICAgICAgICBsZXQgbW9kYWxJRCA9IFwiZHVwbGljYXRlV29ya2Zsb3dNb2RhbFwiXG4gICAgICAgIGxldCB0aXRsZSA9IGBNb2RlbCBmb3IgJHt3a2ZsRmlsZX1gXG5cbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlcy5tZXNzYWdlKG1vZGFsSUQsIHRpdGxlLCBib2R5KVxuICAgIH0sXG4gICAgbW9kZWxOb3RGb3VuZEh0bWwgOiAodGl0bGUsIGVycm9yTWVzc2FnZSkgPT4ge1xuICAgICAgICBsZXQgbW9kYWxJRCA9IFwibW9kZWxOb3RGb3VuZE1vZGFsXCJcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSBgPHA+JHtlcnJvck1lc3NhZ2V9PC9wPjxwPlBsZWFzZSBjb3JyZWN0IHRoZSBtb2RlbCBwYXRoIGFuZCBwcmVzcyBlbnRlciB0byByZXNldCB0aGUgd29ya2Zsb3cuPC9wPmBcblxuICAgICAgICByZXR1cm4gdGVtcGxhdGVzLm1lc3NhZ2UobW9kYWxJRCwgdGl0bGUsIG1lc3NhZ2UpXG4gICAgfSxcbiAgICBhbm5vdGF0aW9uTW9kYWxIdG1sIDogKHR5cGUsIG5hbWUsIGFubm90YXRpb24pID0+IHtcbiAgICAgICAgbGV0IG1vZGFsSUQgPSBgJHt0eXBlfUFubm90YXRpb25Nb2RhbGBcbiAgICAgICAgbGV0IGlucHV0SUQgPSBgJHt0eXBlfUFubm90YXRpb25JbnB1dGBcbiAgICAgICAgbGV0IHRpdGxlID0gYEFubm90YXRpb24gZm9yICR7bmFtZX1gXG4gICAgICAgIGxldCBsYWJlbCA9IFwiQW5ub3RhdGlvbjpcIlxuXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZXMuaW5wdXQobW9kYWxJRCwgaW5wdXRJRCwgdGl0bGUsIGxhYmVsLCBhbm5vdGF0aW9uKVxuICAgIH0sXG4gICAgbW9kZWxTYXZlRXJyb3JIdG1sIDogKHRpdGxlLCBlcnJvcikgPT4ge1xuICAgICAgICBsZXQgbW9kYWxJRCA9IFwibW9kZWxTYXZlRXJyb3JNb2RhbFwiXG5cbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlcy5tZXNzYWdlKG1vZGFsSUQsIHRpdGxlLCBlcnJvcilcbiAgICB9LFxuICAgIG5ld0RpcmVjdG9yeUVycm9ySHRtbCA6ICh0aXRsZSwgZXJyb3IpID0+IHtcbiAgICAgICAgbGV0IG1vZGFsSUQgPSBcIm5ld0RpcmVjdG9yeUVycm9yTW9kYWxcIlxuXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZXMubWVzc2FnZShtb2RhbElELCB0aXRsZSwgZXJyb3IpXG4gICAgfSxcbiAgICByZW5kZXJEZWZhdWx0TW9kZU1vZGFsSHRtbCA6ICgpID0+IHtcbiAgICAgICAgbGV0IGNvbmNlbnRyYXRpb25EZXNjaXB0aW9uID0gYFNwZWNpZXMgd2lsbCBvbmx5IGJlIHJlcHJlc2VudGVkIHVzaW5nIGNvbnRpbnVvdXMgKGZsb2F0aW5nIHBvaW50KSB2YWx1ZXMuYDtcbiAgICAgICAgbGV0IHBvcHVsYXRpb25EZXNjcmlwdGlvbiA9IGBQb3B1bGF0aW9uIC0gU3BlY2llcyB3aWxsIG9ubHkgYmUgcmVwcmVzZW50ZWQgdXNpbmcgZGlzY3JldGUgKGludGVnZXIgY291bnQpIHZhbHVlcy5gO1xuICAgICAgICBsZXQgaHlicmlkRGVzY3JpcHRpb24gPSBgQWxsb3dzIGEgc3BlY2llcyB0byBiZSByZXByZXNlbnRlZCB1c2luZyBjb250aW51b3VzIGFuZC9vciBkaXNjcmV0ZSB2YWx1ZXMuYDtcblxuICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgPGRpdiBpZD1cImRlZmF1bHRNb2RlTW9kYWxcIiBjbGFzcz1cIm1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50IGluZm9cIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5EZWZhdWx0IFNwZWNpZXMgTW9kZSAocmVxdWlyZWQpPC9oNT5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZSBjbG9zZS1tb2RhbFwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBtb2RlIGlzIHVzZWQgdG8gc2V0IHRoZSBtb2RlIG9mIGFsbCBzcGVjaWVzIGFkZGVkIHRvIHRoZSBtb2RlbC4gIFxuICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1vZGUgb2YgYSBzcGVjaWVzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGhvdyBpdCB3aWxsIGJlIHJlcHJlc2VudGVkIGluIGEgSHlicmlkIHNpbXVsYXRpb24uXG4gICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDxwPlNlbGVjdCBvbmUgb2YgdGhlIGZvbGxvd2luZzogPC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlZmF1bHQtbW9kZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGNvbmNlbnRyYXRpb24tYnRuIGJveC1zaGFkb3dcIj5Db25jZW50cmF0aW9uPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9XCJtYXJnaW4tdG9wOiA1cHg7XCI+JHtjb25jZW50cmF0aW9uRGVzY2lwdGlvbn08L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVmYXVsdC1tb2RlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcG9wdWxhdGlvbi1idG4gYm94LXNoYWRvd1wiPlBvcHVsYXRpb248L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT1cIm1hcmdpbi10b3A6IDVweDtcIj4ke3BvcHVsYXRpb25EZXNjcmlwdGlvbn08L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVmYXVsdC1tb2RlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgaHlicmlkLWJ0biBib3gtc2hhZG93XCI+SHlicmlkIENvbmNlbnRyYXRpb24vUG9wdWxhdGlvbjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPVwibWFyZ2luLXRvcDogNXB4O1wiPiR7aHlicmlkRGVzY3JpcHRpb259PC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+YFxuICAgIH1cbn0iLCIvL21vZGVsc1xudmFyIFN0YXRlID0gcmVxdWlyZSgnYW1wZXJzYW5kLXN0YXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhdGUuZXh0ZW5kKHtcbiAgcHJvcHM6IHtcbiAgICBleHByZXNzaW9uOiAnc3RyaW5nJyxcbiAgICB2YXJpYWJsZTogJ29iamVjdCcsXG4gIH0sXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uIChhdHRycywgb3B0aW9ucykge1xuICAgIFN0YXRlLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH0sXG59KTsiLCIvL21vZGVsc1xudmFyIEV2ZW50QXNzaWdubWVudCA9IHJlcXVpcmUoJy4vZXZlbnQtYXNzaWdubWVudCcpO1xuLy9jb2xsZWN0aW9uc1xudmFyIENvbGxlY3Rpb24gPSByZXF1aXJlKCdhbXBlcnNhbmQtY29sbGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgbW9kZWw6IEV2ZW50QXNzaWdubWVudCxcbiAgYWRkRXZlbnRBc3NpZ25tZW50OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhcmlhYmxlID0gdGhpcy5nZXREZWZhdWx0VmFyaWFibGUoKTtcbiAgICB2YXIgZXZlbnRBc3NpZ25tZW50ID0gdGhpcy5hZGQoe1xuICAgICAgdmFyaWFibGU6IHZhcmlhYmxlLFxuICAgICAgZXhwcmVzc2lvbjogXCJcIixcbiAgICB9KTtcbiAgfSxcbiAgZ2V0RGVmYXVsdFZhcmlhYmxlOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNwZWNpZXMgPSB0aGlzLnBhcmVudC5jb2xsZWN0aW9uLnBhcmVudC5zcGVjaWVzXG4gICAgaWYoc3BlY2llcy5sZW5ndGggPiAwKXtcbiAgICAgIHJldHVybiBzcGVjaWVzLmF0KDApO1xuICAgIH1lbHNle1xuICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmNvbGxlY3Rpb24ucGFyZW50LnBhcmFtZXRlcnMuYXQoMClcbiAgICB9XG4gIH0sXG4gIHJlbW92ZUV2ZW50QXNzaWdubWVudDogZnVuY3Rpb24gKGV2ZW50QXNzaWdubWVudCkge1xuICAgIHRoaXMucmVtb3ZlKGV2ZW50QXNzaWdubWVudCk7XG4gIH0sXG59KTsiLCIvL21vZGVsc1xudmFyIFN0YXRlID0gcmVxdWlyZSgnYW1wZXJzYW5kLXN0YXRlJyk7XG4vL2NvbGxlY3Rpb25zXG52YXIgRXZlbnRBc3NpZ25tZW50cyA9IHJlcXVpcmUoJy4vZXZlbnQtYXNzaWdubWVudHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGF0ZS5leHRlbmQoe1xuICBwcm9wczoge1xuICAgIGNvbXBJRDogJ251bWJlcicsXG4gICAgbmFtZTogJ3N0cmluZycsXG4gICAgYW5ub3RhdGlvbjogJ3N0cmluZycsXG4gICAgZGVsYXk6ICdzdHJpbmcnLFxuICAgIHByaW9yaXR5OiAnc3RyaW5nJyxcbiAgICB0cmlnZ2VyRXhwcmVzc2lvbjogJ3N0cmluZycsXG4gICAgaW5pdGlhbFZhbHVlOiAnYm9vbGVhbicsXG4gICAgcGVyc2lzdGVudDogJ2Jvb2xlYW4nLFxuICAgIHVzZVZhbHVlc0Zyb21UcmlnZ2VyVGltZTogJ2Jvb2xlYW4nLFxuICB9LFxuICBjb2xsZWN0aW9uczoge1xuICAgIGV2ZW50QXNzaWdubWVudHM6IEV2ZW50QXNzaWdubWVudHMsXG4gIH0sXG4gIHNlc3Npb246IHtcbiAgICBzZWxlY3RlZDoge1xuICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB9LFxuICB9LFxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYXR0cnMsIG9wdGlvbnMpIHtcbiAgICBTdGF0ZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9LFxufSk7IiwidmFyIF8gPSByZXF1aXJlKCd1bmRlcnNjb3JlJyk7XG4vL21vZGVsc1xudmFyIEV2ZW50ID0gcmVxdWlyZSgnLi9ldmVudCcpO1xuLy9jb2xsZWN0aW9uc1xudmFyIENvbGxlY3Rpb24gPSByZXF1aXJlKCdhbXBlcnNhbmQtY29sbGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgbW9kZWw6IEV2ZW50LFxuICBhZGRFdmVudDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBpZCA9IHRoaXMucGFyZW50LmdldERlZmF1bHRJRCgpO1xuICAgIHZhciBuYW1lID0gdGhpcy5nZXREZWZhdWx0TmFtZSgpO1xuICAgIHZhciBldmVudCA9IHRoaXMuYWRkKHtcbiAgICAgIGNvbXBJRDogaWQsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgYW5ub3RhdGlvbjogXCJcIixcbiAgICAgIGRlbGF5OiBcIlwiLFxuICAgICAgcHJpb3JpdHk6IFwiMFwiLFxuICAgICAgdHJpZ2dlckV4cHJlc3Npb246IFwiXCIsXG4gICAgICBpbml0aWFsVmFsdWU6IGZhbHNlLFxuICAgICAgcGVyc2lzdGVudDogZmFsc2UsXG4gICAgICB1c2VWYWx1ZXNGcm9tVHJpZ2dlclRpbWU6IGZhbHNlLFxuICAgIH0pO1xuICAgIGV2ZW50LmV2ZW50QXNzaWdubWVudHMuYWRkRXZlbnRBc3NpZ25tZW50KClcbiAgICByZXR1cm4gZXZlbnRcbiAgfSxcbiAgZ2V0RGVmYXVsdE5hbWU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaSA9IHRoaXMubGVuZ3RoICsgMTtcbiAgICBuYW1lID0gJ2UnICsgaTtcbiAgICB2YXIgbmFtZXMgPSB0aGlzLm1hcChmdW5jdGlvbiAoZXZlbnQpIHsgcmV0dXJuIGV2ZW50Lm5hbWU7IH0pO1xuICAgIHdoaWxlKF8uY29udGFpbnMobmFtZXMsIG5hbWUpKXtcbiAgICAgIGkgKz0gMTtcbiAgICAgIG5hbWUgPSAnZScgKyBpO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZTtcbiAgfSxcbiAgcmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHRoaXMucmVtb3ZlKGV2ZW50KTtcbiAgfSxcbn0pOyIsIi8vbW9kZWxzXG52YXIgU3RhdGUgPSByZXF1aXJlKCdhbXBlcnNhbmQtc3RhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGF0ZS5leHRlbmQoe1xuICBwcm9wczoge1xuICAgIGNvbXBJRDogJ251bWJlcicsXG4gICAgbmFtZTogJ3N0cmluZycsXG4gICAgZnVuY3Rpb246ICdzdHJpbmcnLFxuICAgIGV4cHJlc3Npb246ICdzdHJpbmcnLFxuICAgIHZhcmlhYmxlczogJ3N0cmluZycsXG4gICAgc2lnbmF0dXJlOiAnc3RyaW5nJyxcbiAgICBhbm5vdGF0aW9uOiAnc3RyaW5nJyxcbiAgfVxufSk7IiwiLy9jb2xsZWN0aW9uc1xudmFyIENvbGxlY3Rpb24gPSByZXF1aXJlKCdhbXBlcnNhbmQtY29sbGVjdGlvbicpO1xuLy9tb2RlbHNcbnZhciBGdW5jdGlvbkRlZmluaXRpb24gPSByZXF1aXJlKCcuL2Z1bmN0aW9uLWRlZmluaXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBDb2xsZWN0aW9uLmV4dGVuZCh7XG4gIG1vZGVsOiBGdW5jdGlvbkRlZmluaXRpb24sXG59KTsiLCIvLyBNb2RlbHNcbnZhciBTdGF0ZSA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1zdGF0ZScpO1xudmFyIFNwZWNpZSA9IHJlcXVpcmUoJy4vc3BlY2llJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhdGUuZXh0ZW5kKHtcbiAgcHJvcHM6IHtcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBjb3VudDogJ251bWJlcicsXG4gICAgc3ViZG9tYWluOiAnc3RyaW5nJyxcbiAgICB4OiAnbnVtYmVyJyxcbiAgICB5OiAnbnVtYmVyJyxcbiAgICB6OiAnbnVtYmVyJyxcbiAgfSxcbiAgY2hpbGRyZW46IHtcbiAgICBzcGVjaWU6IFNwZWNpZSxcbiAgfSxcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKGF0dHJzLCBvcHRpb25zKSB7XG4gICAgU3RhdGUucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICB9LFxufSk7IiwiLy8gQ29sbGVjdGlvbnNcbnZhciBDb2xsZWN0aW9uID0gcmVxdWlyZSgnYW1wZXJzYW5kLWNvbGxlY3Rpb24nKTtcbi8vTW9kZWxzXG52YXIgSW5pdGlhbENvbmRpdGlvbiA9IHJlcXVpcmUoJy4vaW5pdGlhbC1jb25kaXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBDb2xsZWN0aW9uLmV4dGVuZCh7XG4gIG1vZGVsOiBJbml0aWFsQ29uZGl0aW9uLFxuICBhZGRJbml0aWFsQ29uZGl0aW9uOiBmdW5jdGlvbiAoaW5pdGlhbENvbmRpdGlvblR5cGUpIHtcbiAgICB2YXIgc3ViZG9tYWluID0gdGhpcy5nZXREZWZhdWx0U3ViZG9tYWluKCk7XG4gICAgdmFyIGluaXRpYWxDb25kaXRpb24gPSB0aGlzLmFkZCh7XG4gICAgICB0eXBlOiBpbml0aWFsQ29uZGl0aW9uVHlwZSxcbiAgICAgIHN1YmRvbWFpbjogc3ViZG9tYWluLFxuICAgICAgY291bnQ6IDAsXG4gICAgICB4OiAwLFxuICAgICAgeTogMCxcbiAgICAgIHo6IDAsXG4gICAgfSk7XG4gICAgaW5pdGlhbENvbmRpdGlvbi5zcGVjaWUgPSB0aGlzLmdldERlZmF1bHRTcGVjaWVzKCk7XG4gIH0sXG4gIGdldERlZmF1bHRTcGVjaWVzOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNwZWNpZSA9IHRoaXMucGFyZW50LnNwZWNpZXMuYXQoMCk7XG4gICAgcmV0dXJuIHNwZWNpZTtcbiAgfSxcbiAgZ2V0RGVmYXVsdFN1YmRvbWFpbjogZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdWJkb21haW4gPSB0aGlzLnBhcmVudC5tZXNoU2V0dGluZ3MudW5pcXVlU3ViZG9tYWlucy5hdCgwKTtcbiAgICByZXR1cm4gc3ViZG9tYWluLm5hbWU7XG4gIH0sXG4gIHJlbW92ZUluaXRpYWxDb25kaXRpb246IGZ1bmN0aW9uIChpbml0aWFsQ29uZGl0aW9uKSB7XG4gICAgdGhpcy5yZW1vdmUoaW5pdGlhbENvbmRpdGlvbik7XG4gIH0sXG59KTsiLCIvL21vZGVsc1xudmFyIFN0YXRlID0gcmVxdWlyZSgnYW1wZXJzYW5kLXN0YXRlJyk7XG52YXIgU3ViZG9tYWlucyA9IHJlcXVpcmUoJy4vc3ViZG9tYWlucycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRlLmV4dGVuZCh7XG4gIHByb3BzOiB7XG4gICAgY291bnQ6IHtcbiAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgZGVmYXVsdDogMixcbiAgICB9LFxuICB9LFxuICBkZXJpdmVkOiB7XG4gICAgdW5pcXVlU3ViZG9tYWluczoge1xuICAgICAgZGVwczogWydjb3VudCddLFxuICAgICAgZm46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHVuaXF1ZVN1YmRvbWFpbnMgPSBuZXcgU3ViZG9tYWlucygpO1xuICAgICAgICBmb3IodmFyIGkgPSAxOyBpIDw9IHRoaXMuY291bnQ7IGkrKyl7XG4gICAgICAgICAgdW5pcXVlU3ViZG9tYWlucy5hZGRTdWJkb21haW4oJ3N1YmRvbWFpbiAnICsgaSArICc6Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuaXF1ZVN1YmRvbWFpbnM7XG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uIChhdHRycywgb3B0aW9ucykge1xuICAgIFN0YXRlLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH0sXG59KTsiLCIvL21vZGVsc1xudmFyIFN0YXRlID0gcmVxdWlyZSgnYW1wZXJzYW5kLXN0YXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhdGUuZXh0ZW5kKHtcbiAgcHJvcHM6IHtcbiAgICBlbmRTaW06ICdudW1iZXInLFxuICAgIHRpbWVTdGVwOiAnbnVtYmVyJyxcbiAgICB2b2x1bWU6ICdudW1iZXInLFxuICAgIGFsZ29yaXRobTogJ3N0cmluZycsXG4gICAgcmVhbGl6YXRpb25zOiAnbnVtYmVyJyxcbiAgfSxcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKGF0dHJzLCBvcHRpb25zKSB7XG4gICAgU3RhdGUucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICB9LFxufSk7IiwidmFyIGFwcCA9IHJlcXVpcmUoJy4uL2FwcCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG52YXIgeGhyID0gcmVxdWlyZSgneGhyJyk7XG4vL21vZGVsc1xudmFyIE1vZGVsID0gcmVxdWlyZSgnYW1wZXJzYW5kLW1vZGVsJyk7XG52YXIgTW9kZWxTZXR0aW5ncyA9IHJlcXVpcmUoJy4vbW9kZWwtc2V0dGluZ3MnKTtcbnZhciBTaW11bGF0aW9uU2V0dGluZ3MgPSByZXF1aXJlKCcuL3NpbXVsYXRpb24tc2V0dGluZ3MnKTtcbnZhciBQYXJhbWV0ZXJTd2VlcFNldHRpbmdzID0gcmVxdWlyZSgnLi9wYXJhbWV0ZXItc3dlZXAtc2V0dGluZ3MnKTtcbnZhciBNZXNoU2V0dGluZ3MgPSByZXF1aXJlKCcuL21lc2gtc2V0dGluZ3MnKTtcbi8vY29sbGVjdGlvbnNcbnZhciBTcGVjaWVzID0gcmVxdWlyZSgnLi9zcGVjaWVzJyk7XG52YXIgSW5pdGlhbENvbmRpdGlvbnMgPSByZXF1aXJlKCcuL2luaXRpYWwtY29uZGl0aW9ucycpO1xudmFyIFBhcmFtZXRlcnMgPSByZXF1aXJlKCcuL3BhcmFtZXRlcnMnKTtcbnZhciBSZWFjdGlvbnMgPSByZXF1aXJlKCcuL3JlYWN0aW9ucycpO1xudmFyIFJ1bGVzID0gcmVxdWlyZSgnLi9ydWxlcycpO1xudmFyIEV2ZW50cyA9IHJlcXVpcmUoJy4vZXZlbnRzJyk7XG52YXIgRnVuY3Rpb25EZWZpbml0aW9ucyA9IHJlcXVpcmUoJy4vZnVuY3Rpb24tZGVmaW5pdGlvbnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBNb2RlbC5leHRlbmQoe1xuICB1cmw6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcGF0aC5qb2luKGFwcC5nZXRBcGlQYXRoKCksIFwiZmlsZS9qc29uLWRhdGFcIikrXCI/Zm9yPVwiK3RoaXMuZm9yK1wiJnBhdGg9XCIrdGhpcy5kaXJlY3Rvcnk7XG4gIH0sXG4gIHByb3BzOiB7XG4gICAgaXNfc3BhdGlhbDogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHRJRDoge1xuICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICBkZWZhdWx0OiAxLFxuICAgIH0sXG4gICAgZGVmYXVsdE1vZGU6IHtcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgZGVmYXVsdDogJycsXG4gICAgfSxcbiAgfSxcbiAgY29sbGVjdGlvbnM6IHtcbiAgICBzcGVjaWVzOiBTcGVjaWVzLFxuICAgIGluaXRpYWxDb25kaXRpb25zOiBJbml0aWFsQ29uZGl0aW9ucyxcbiAgICBwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJzLFxuICAgIHJlYWN0aW9uczogUmVhY3Rpb25zLFxuICAgIHJ1bGVzOiBSdWxlcyxcbiAgICBldmVudHNDb2xsZWN0aW9uOiBFdmVudHMsXG4gICAgZnVuY3Rpb25EZWZpbml0aW9uczogRnVuY3Rpb25EZWZpbml0aW9ucyxcbiAgfSxcbiAgY2hpbGRyZW46IHtcbiAgICBtb2RlbFNldHRpbmdzOiBNb2RlbFNldHRpbmdzLFxuICAgIHNpbXVsYXRpb25TZXR0aW5nczogU2ltdWxhdGlvblNldHRpbmdzLFxuICAgIHBhcmFtZXRlclN3ZWVwU2V0dGluZ3M6IFBhcmFtZXRlclN3ZWVwU2V0dGluZ3MsXG4gICAgbWVzaFNldHRpbmdzOiBNZXNoU2V0dGluZ3NcbiAgfSxcbiAgc2Vzc2lvbjoge1xuICAgIG5hbWU6ICdzdHJpbmcnLFxuICAgIHNlbGVjdGVkUmVhY3Rpb246ICdvYmplY3QnLFxuICAgIGRpcmVjdG9yeTogJ3N0cmluZycsXG4gICAgaXNQcmV2aWV3OiAnYm9vbGVhbicsXG4gICAgZm9yOiAnc3RyaW5nJyxcbiAgfSxcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKGF0dHJzLCBvcHRpb25zKXtcbiAgICBNb2RlbC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9LFxuICBnZXREZWZhdWx0SUQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaWQgPSB0aGlzLmRlZmF1bHRJRDtcbiAgICB0aGlzLmRlZmF1bHRJRCArPSAxO1xuICAgIHJldHVybiBpZDtcbiAgfSxcbiAgYXV0b1NhdmU6IGZ1bmN0aW9uICgpIHtcbiAgICAvL1RPRE86IGltcGxlbWVudCBhdXRvIHNhdmVcbiAgfSxcbiAgLy9jYWxsZWQgd2hlbiBzYXZlIGJ1dHRvbiBpcyBjbGlja2VkXG4gIHNhdmVNb2RlbDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnNwZWNpZXMubWFwKGZ1bmN0aW9uIChzcGVjaWUpIHtcbiAgICAgIHNlbGYuc3BlY2llcy50cmlnZ2VyKCd1cGRhdGUtc3BlY2llcycsIHNwZWNpZS5jb21wSUQsIHNwZWNpZSwgZmFsc2UpO1xuICAgIH0pO1xuICAgIHRoaXMucGFyYW1ldGVycy5tYXAoZnVuY3Rpb24gKHBhcmFtZXRlcikge1xuICAgICAgc2VsZi5wYXJhbWV0ZXJzLnRyaWdnZXIoJ3VwZGF0ZS1wYXJhbWV0ZXJzJywgcGFyYW1ldGVyLmNvbXBJRCwgcGFyYW1ldGVyKTtcbiAgICB9KTtcbiAgICBpZighaXNQcmV2aWV3KXtcbiAgICAgIHRoaXMuc2ltdWxhdGlvblNldHRpbmdzLmxldFVzQ2hvb3NlRm9yVXNlKClcbiAgICB9XG4gICAgdGhpcy5zYXZlKCk7XG4gIH0sXG59KTtcbiIsIi8vbW9kZWxzXG52YXIgU3RhdGUgPSByZXF1aXJlKCdhbXBlcnNhbmQtc3RhdGUnKTtcbnZhciBQYXJhbWV0ZXIgPSByZXF1aXJlKCcuL3BhcmFtZXRlcicpO1xudmFyIFNwZWNpZXMgPSByZXF1aXJlKCcuL3NwZWNpZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRlLmV4dGVuZCh7XG4gIHByb3BzOiB7XG4gICAgaXMxRDogJ2Jvb2xlYW4nLFxuICAgIHAxTWluOiAnbnVtYmVyJyxcbiAgICBwMU1heDogJ251bWJlcicsXG4gICAgcDFTdGVwczogJ251bWJlcicsXG4gICAgcDJNaW46ICdudW1iZXInLFxuICAgIHAyTWF4OiAnbnVtYmVyJyxcbiAgICBwMlN0ZXBzOiAnbnVtYmVyJyxcbiAgfSxcbiAgY2hpbGRyZW46IHtcbiAgICBwYXJhbWV0ZXJPbmU6IFBhcmFtZXRlcixcbiAgICBwYXJhbWV0ZXJUd286IFBhcmFtZXRlcixcbiAgICBzcGVjaWVzT2ZJbnRlcmVzdDogU3BlY2llc1xuICB9LFxuICBpbml0aWFsaXplOiBmdW5jdGlvbihhdHRycywgb3B0aW9ucykge1xuICAgIFN0YXRlLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cbn0pOyAiLCJ2YXIgXyA9IHJlcXVpcmUoJ3VuZGVyc2NvcmUnKTtcbi8vbW9kZWxzXG52YXIgU3RhdGUgPSByZXF1aXJlKCdhbXBlcnNhbmQtc3RhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGF0ZS5leHRlbmQoe1xuICBwcm9wczoge1xuICAgIGNvbXBJRDogJ251bWJlcicsXG4gICAgbmFtZTogJ3N0cmluZycsXG4gICAgZXhwcmVzc2lvbjogJ3N0cmluZycsXG4gICAgYW5ub3RhdGlvbjogJ3N0cmluZycsXG4gIH0sXG4gIHNlc3Npb246IHtcbiAgICBpblVzZToge1xuICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgfSxcbiAgfSxcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKGF0dHJzLCBvcHRpb25zKSB7XG4gICAgU3RhdGUucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfSxcbn0pOyIsInZhciBfID0gcmVxdWlyZSgndW5kZXJzY29yZScpO1xuLy9tb2RlbHNcbnZhciBQYXJhbWV0ZXIgPSByZXF1aXJlKCcuL3BhcmFtZXRlcicpO1xuLy9jb2xsZWN0aW9uc1xudmFyIENvbGxlY3Rpb24gPSByZXF1aXJlKCdhbXBlcnNhbmQtY29sbGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgbW9kZWw6IFBhcmFtZXRlcixcbiAgYWRkUGFyYW1ldGVyOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGlkID0gdGhpcy5wYXJlbnQuZ2V0RGVmYXVsdElEKCk7XG4gICAgdmFyIG5hbWUgPSB0aGlzLmdldERlZmF1bHROYW1lKCk7XG4gICAgdmFyIHBhcmFtZXRlciA9IHRoaXMuYWRkKHtcbiAgICAgIGNvbXBJRDogaWQsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgZXhwcmVzc2lvbjogJzAuMCcsXG4gICAgICBhbm5vdGF0aW9uOiBcIlwiLFxuICAgIH0pO1xuICB9LFxuICBnZXREZWZhdWx0TmFtZTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBpID0gdGhpcy5sZW5ndGggKyAxO1xuICAgIHZhciBuYW1lID0gJ2snICsgaTtcbiAgICB2YXIgbmFtZXMgPSB0aGlzLm1hcChmdW5jdGlvbiAocGFyYW1ldGVyKSB7cmV0dXJuIHBhcmFtZXRlci5uYW1lOyB9KTtcbiAgICB3aGlsZShfLmNvbnRhaW5zKG5hbWVzLCBuYW1lKSkge1xuICAgICAgaSArPSAxO1xuICAgICAgbmFtZSA9ICdrJyArIGk7XG4gICAgfVxuICAgIHJldHVybiBuYW1lO1xuICB9LFxuICByZW1vdmVQYXJhbWV0ZXI6IGZ1bmN0aW9uIChwYXJhbWV0ZXIpIHtcbiAgICB0aGlzLnJlbW92ZShwYXJhbWV0ZXIpO1xuICB9LFxufSk7IiwidmFyIF8gPSByZXF1aXJlKCd1bmRlcnNjb3JlJyk7XG4vL21vZGVsc1xudmFyIFN0YXRlID0gcmVxdWlyZSgnYW1wZXJzYW5kLXN0YXRlJyk7XG52YXIgUGFyYW1ldGVyID0gcmVxdWlyZSgnLi9wYXJhbWV0ZXInKTtcbi8vY29sbGVjdGlvbnNcbnZhciBTdG9pY2hTcGVjaWVzID0gcmVxdWlyZSgnLi9zdG9pY2gtc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRlLmV4dGVuZCh7XG4gIHByb3BzOiB7XG4gICAgY29tcElEOiAnbnVtYmVyJyxcbiAgICBuYW1lOiAnc3RyaW5nJyxcbiAgICByZWFjdGlvblR5cGU6ICdzdHJpbmcnLFxuICAgIHN1bW1hcnk6ICdzdHJpbmcnLFxuICAgIG1hc3NhY3Rpb246ICdib29sZWFuJyxcbiAgICBwcm9wZW5zaXR5OiAnc3RyaW5nJyxcbiAgICBhbm5vdGF0aW9uOiAnc3RyaW5nJyxcbiAgICBzdWJkb21haW5zOiB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uICgpIHtyZXR1cm4gW107IH0sXG4gICAgfSxcbiAgfSxcbiAgY2hpbGRyZW46IHtcbiAgICByYXRlOiBQYXJhbWV0ZXIsXG4gIH0sXG4gIGNvbGxlY3Rpb25zOiB7XG4gICAgcmVhY3RhbnRzOiBTdG9pY2hTcGVjaWVzLFxuICAgIHByb2R1Y3RzOiBTdG9pY2hTcGVjaWVzLFxuICB9LFxuICBzZXNzaW9uOiB7XG4gICAgc2VsZWN0ZWQ6IHtcbiAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgfSxcbiAgICBoYXNDb25mbGljdDoge1xuICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgfSxcbiAgfSxcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKGF0dHJzLCBvcHRpb25zKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIFN0YXRlLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgdGhpcy5vbignY2hhbmdlLXJlYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5idWlsZFN1bW1hcnkoKTtcbiAgICAgIHNlbGYuY2hlY2tNb2RlcygpO1xuICAgIH0pO1xuICB9LFxuICBidWlsZFN1bW1hcnk6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3VtbWFyeSA9IFwiXCI7XG5cbiAgICB2YXIgbnVtUmVhY3RhbnRzID0gdGhpcy5yZWFjdGFudHMubW9kZWxzLmxlbmd0aDtcbiAgICB2YXIgbnVtUHJvZHVjdHMgPSB0aGlzLnByb2R1Y3RzLm1vZGVscy5sZW5ndGg7XG5cbiAgICBpZihudW1SZWFjdGFudHMgPT09IDApe1xuICAgICAgc3VtbWFyeSA9ICdcXFxcZW1wdHlzZXQnO1xuICAgIH1lbHNle1xuICAgICAgZm9yKHZhciBpID0gMDsgaSA8IG51bVJlYWN0YW50czsgaSsrKXtcbiAgICAgICAgdmFyIHJlYWN0YW50ID0gdGhpcy5yZWFjdGFudHMubW9kZWxzW2ldO1xuICAgICAgICBpZihyZWFjdGFudC5yYXRpbyA+IDEpe1xuICAgICAgICAgIHN1bW1hcnkgKz0gcmVhY3RhbnQucmF0aW8gKyByZWFjdGFudC5zcGVjaWUubmFtZTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgc3VtbWFyeSArPSByZWFjdGFudC5zcGVjaWUubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGkgPCBudW1SZWFjdGFudHMgLSAxKXtcbiAgICAgICAgICBzdW1tYXJ5ICs9ICcrJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHN1bW1hcnkgKz0gJyBcXFxccmlnaHRhcnJvdyAnO1xuXG4gICAgaWYobnVtUHJvZHVjdHMgPT09IDApe1xuICAgICAgc3VtbWFyeSArPSAnXFxcXGVtcHR5c2V0JztcbiAgICB9ZWxzZXtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBudW1Qcm9kdWN0czsgaSsrKXtcbiAgICAgICAgdmFyIHByb2R1Y3QgPSB0aGlzLnByb2R1Y3RzLm1vZGVsc1tpXTtcbiAgICAgICAgaWYocHJvZHVjdC5yYXRpbyA+IDEpe1xuICAgICAgICAgIHN1bW1hcnkgKz0gcHJvZHVjdC5yYXRpbyArIHByb2R1Y3Quc3BlY2llLm5hbWU7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIHN1bW1hcnkgKz0gcHJvZHVjdC5zcGVjaWUubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGkgPCBudW1Qcm9kdWN0cyAtIDEpe1xuICAgICAgICAgIHN1bW1hcnkgKz0gJysnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHN1bW1hcnkgPSBzdW1tYXJ5LnJlcGxhY2UoL18vZywgJ1xcXFxfJyk7XG5cbiAgICB0aGlzLnN1bW1hcnkgPSBzdW1tYXJ5XG4gIH0sXG4gIGNoZWNrTW9kZXM6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFzQ29udGludW91cyA9IGZhbHNlO1xuICAgIHZhciBoYXNEeW5hbWljID0gZmFsc2U7XG4gICAgdmFyIGhhc0Rpc2NyZXRlID0gZmFsc2U7XG4gICAgdGhpcy5yZWFjdGFudHMubWFwKGZ1bmN0aW9uIChyZWFjdGFudCkgeyBcbiAgICAgIGlmKHJlYWN0YW50LnNwZWNpZS5tb2RlID09PSAnY29udGludW91cycgJiYgIWhhc0NvbnRpbnVvdXMpXG4gICAgICAgIGhhc0NvbnRpbnVvdXMgPSB0cnVlO1xuICAgICAgZWxzZSBpZihyZWFjdGFudC5zcGVjaWUubW9kZSA9PT0gJ2R5bmFtaWMnICYmICFoYXNEeW5hbWljKVxuICAgICAgICBoYXNEeW5hbWljID0gdHJ1ZTtcbiAgICAgIGVsc2UgaWYocmVhY3RhbnQuc3BlY2llLm1vZGUgPT09ICdkaXNjcmV0ZScgJiYgIWhhc0Rpc2NyZXRlKVxuICAgICAgICBoYXNEaXNjcmV0ZSA9IHRydWU7XG4gICAgfSk7XG4gICAgaWYoIWhhc0NvbnRpbnVvdXMgfHwgIWhhc0R5bmFtaWMpIHtcbiAgICAgIHRoaXMucHJvZHVjdHMubWFwKGZ1bmN0aW9uIChwcm9kdWN0KSB7IFxuICAgICAgICBpZihwcm9kdWN0LnNwZWNpZS5tb2RlID09PSAnY29udGludW91cycgJiYgIWhhc0NvbnRpbnVvdXMpXG4gICAgICAgICAgaGFzQ29udGludW91cyA9IHRydWU7XG4gICAgICAgIGVsc2UgaWYocHJvZHVjdC5zcGVjaWUubW9kZSA9PT0gJ2R5bmFtaWMnICYmICFoYXNEeW5hbWljKVxuICAgICAgICAgIGhhc0R5bmFtaWMgPSB0cnVlO1xuICAgICAgICBlbHNlIGlmKHByb2R1Y3Quc3BlY2llLm1vZGUgPT09ICdkaXNjcmV0ZScgJiYgIWhhc0Rpc2NyZXRlKVxuICAgICAgICBoYXNEaXNjcmV0ZSA9IHRydWU7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5oYXNDb25mbGljdCA9IEJvb2xlYW4oaGFzQ29udGludW91cyAmJiAoaGFzRHluYW1pYyB8fCBoYXNEaXNjcmV0ZSkpXG4gIH0sXG59KTsiLCJ2YXIgXyA9IHJlcXVpcmUoJ3VuZGVyc2NvcmUnKTtcbnZhciBFdmVudHMgPSByZXF1aXJlKCdhbXBlcnNhbmQtZXZlbnRzJyk7XG4vL21vZGVsc1xudmFyIFJlYWN0aW9uID0gcmVxdWlyZSgnLi9yZWFjdGlvbicpO1xuLy9jb2xsZWN0aW9uc1xudmFyIENvbGxlY3Rpb24gPSByZXF1aXJlKCdhbXBlcnNhbmQtY29sbGVjdGlvbicpO1xuXG5SZWFjdGlvbnMgPSBDb2xsZWN0aW9uLmV4dGVuZCh7XG4gIG1vZGVsOiBSZWFjdGlvbixcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKGF0dHJzLCBvcHRpb25zKSB7XG4gICAgQ29sbGVjdGlvbi5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9LFxuICBhZGRSZWFjdGlvbjogZnVuY3Rpb24gKHJlYWN0aW9uVHlwZSwgc3RvaWNoQXJncywgc3ViZG9tYWlucykge1xuICAgIHZhciBpZCA9IHRoaXMucGFyZW50LmdldERlZmF1bHRJRCgpO1xuICAgIHZhciBuYW1lID0gdGhpcy5nZXREZWZhdWx0TmFtZSgpO1xuICAgIHZhciBtYXNzYWN0aW9uID0gcmVhY3Rpb25UeXBlID09PSAnY3VzdG9tLW1hc3NhY3Rpb24nO1xuICAgIHZhciByZWFjdGlvbiA9IG5ldyBSZWFjdGlvbih7XG4gICAgICBjb21wSUQ6IGlkLFxuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHJlYWN0aW9uVHlwZTogcmVhY3Rpb25UeXBlLFxuICAgICAgbWFzc2FjdGlvbjogbWFzc2FjdGlvbixcbiAgICAgIHByb3BlbnNpdHk6ICcnLFxuICAgICAgYW5ub3RhdGlvbjogJycsXG4gICAgICBzdWJkb21haW5zOiBzdWJkb21haW5zLFxuICAgICAgcmVhY3RhbnRzOiBzdG9pY2hBcmdzLnJlYWN0YW50cyxcbiAgICAgIHByb2R1Y3RzOiBzdG9pY2hBcmdzLnByb2R1Y3RzLFxuICAgIH0pO1xuICAgIHRoaXMuc2V0RGVmYXVsdFNwZWNpZUZvclN0b2ljaFNwZWNpZXMocmVhY3Rpb24ucmVhY3RhbnRzKTtcbiAgICB0aGlzLnNldERlZmF1bHRTcGVjaWVGb3JTdG9pY2hTcGVjaWVzKHJlYWN0aW9uLnByb2R1Y3RzKTtcbiAgICBpZihyZWFjdGlvblR5cGUgIT09ICdjdXN0b20tcHJvcGVuc2l0eScpXG4gICAgICByZWFjdGlvbi5yYXRlID0gdGhpcy5nZXREZWZhdWx0UmF0ZSgpO1xuICAgIHJlYWN0aW9uLmJ1aWxkU3VtbWFyeSgpXG4gICAgdGhpcy5hZGQocmVhY3Rpb24pO1xuICAgIHJldHVybiByZWFjdGlvbjtcbiAgfSxcbiAgZ2V0RGVmYXVsdE5hbWU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaSA9IHRoaXMubGVuZ3RoICsgMTtcbiAgICB2YXIgbmFtZSA9ICdyJyArIGk7XG4gICAgdmFyIG5hbWVzID0gdGhpcy5tYXAoZnVuY3Rpb24gKHJlYWN0aW9uKSB7cmV0dXJuIHJlYWN0aW9uLm5hbWU7IH0pO1xuICAgIHdoaWxlKF8uY29udGFpbnMobmFtZXMsIG5hbWUpKXtcbiAgICAgIGkgKz0gMTtcbiAgICAgIG5hbWUgPSAncicgKyBpO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZTtcbiAgfSxcbiAgc2V0RGVmYXVsdFNwZWNpZUZvclN0b2ljaFNwZWNpZXM6IGZ1bmN0aW9uIChzdG9pY2hTcGVjaWVzKSB7XG4gICAgc3RvaWNoU3BlY2llcy5mb3JFYWNoKGZ1bmN0aW9uIChzdG9pY2hTcGVjaWUpIHtcbiAgICAgIHN0b2ljaFNwZWNpZS5zcGVjaWUgPSB0aGlzLmdldERlZmF1bHRTcGVjaWUoKTtcbiAgICB9LCB0aGlzKTtcbiAgfSxcbiAgZ2V0RGVmYXVsdFNwZWNpZTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBzcGVjaWUgPSB0aGlzLnBhcmVudC5zcGVjaWVzLmF0KDApO1xuICAgIHJldHVybiBzcGVjaWU7XG4gIH0sXG4gIGdldERlZmF1bHRSYXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmFtZXRlciA9IHRoaXMucGFyZW50LnBhcmFtZXRlcnMuYXQoMCk7XG4gICAgcmV0dXJuIHBhcmFtZXRlcjtcbiAgfSxcbiAgcmVtb3ZlUmVhY3Rpb246IGZ1bmN0aW9uIChyZWFjdGlvbikge1xuICAgIHRoaXMucmVtb3ZlKHJlYWN0aW9uKTtcbiAgfSxcbn0pO1xuXG5FdmVudHMuY3JlYXRlRW1pdHRlcihSZWFjdGlvbnMpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0aW9uczsiLCIvL21vZGVsc1xudmFyIFN0YXRlID0gcmVxdWlyZSgnYW1wZXJzYW5kLXN0YXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhdGUuZXh0ZW5kKHtcbiAgcHJvcHM6IHtcbiAgICBjb21wSUQ6ICdudW1iZXInLFxuICAgIG5hbWU6ICdzdHJpbmcnLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIHZhcmlhYmxlOiAnb2JqZWN0JyxcbiAgICBleHByZXNzaW9uOiAnc3RyaW5nJyxcbiAgICBhbm5vdGF0aW9uOiAnc3RyaW5nJyxcbiAgfSxcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKGF0dHJzLCBvcHRpb25zKSB7XG4gICAgU3RhdGUucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfSxcbn0pOyIsInZhciBfID0gcmVxdWlyZSgndW5kZXJzY29yZScpO1xuLy9tb2RlbHNcbnZhciBSdWxlID0gcmVxdWlyZSgnLi9ydWxlJyk7XG4vL2NvbGxlY3Rpb25zXG52YXIgQ29sbGVjdGlvbiA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1jb2xsZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ29sbGVjdGlvbi5leHRlbmQoe1xuICBtb2RlbDogUnVsZSxcbiAgYWRkUnVsZTogZnVuY3Rpb24gKHR5cGUpIHtcbiAgICB2YXIgaWQgPSB0aGlzLnBhcmVudC5nZXREZWZhdWx0SUQoKTtcbiAgICB2YXIgbmFtZSA9IHRoaXMuZ2V0RGVmYXVsdE5hbWUoKTtcbiAgICB2YXIgdmFyaWFibGUgPSB0aGlzLmdldERlZmF1bHRWYXJpYWJsZSgpO1xuICAgIHZhciBydWxlID0gbmV3IFJ1bGUoe1xuICAgICAgY29tcElEOiBpZCxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAgZXhwcmVzc2lvbjogJycsXG4gICAgICBhbm5vdGF0aW9uOiAnJyxcbiAgICB9KTtcbiAgICBydWxlLnZhcmlhYmxlID0gdmFyaWFibGU7XG4gICAgdGhpcy5hZGQocnVsZSk7XG4gIH0sXG4gIHJlbW92ZVJ1bGU6IGZ1bmN0aW9uIChydWxlKSB7XG4gICAgdGhpcy5yZW1vdmUocnVsZSk7XG4gIH0sXG4gIGdldERlZmF1bHROYW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGkgPSB0aGlzLmxlbmd0aCArIDE7XG4gICAgdmFyIG5hbWUgPSAncnInICsgaTtcbiAgICB2YXIgbmFtZXMgPSB0aGlzLm1hcChmdW5jdGlvbiAocnVsZSkge3JldHVybiBydWxlLm5hbWU7IH0pO1xuICAgIHdoaWxlKF8uY29udGFpbnMobmFtZXMsIG5hbWUpKXtcbiAgICAgIGkgKz0gMTtcbiAgICAgIG5hbWUgPSAncnInICsgaTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWU7XG4gIH0sXG4gIGdldERlZmF1bHRWYXJpYWJsZTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBzcGVjaWVzID0gdGhpcy5wYXJlbnQuc3BlY2llc1xuICAgIGlmKHNwZWNpZXMubGVuZ3RoID4gMCl7XG4gICAgICByZXR1cm4gc3BlY2llcy5hdCgwKTtcbiAgICB9ZWxzZXtcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudC5wYXJhbWV0ZXJzLmF0KDApXG4gICAgfVxuICB9LFxufSk7IiwiLy9tb2RlbHNcbnZhciBTdGF0ZSA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1zdGF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRlLmV4dGVuZCh7XG4gIHByb3BzOiB7XG4gICAgaXNBdXRvbWF0aWM6ICdib29sZWFuJyxcbiAgICByZWxhdGl2ZVRvbDogJ251bWJlcicsXG4gICAgYWJzb2x1dGVUb2w6ICdudW1iZXInLFxuICAgIHJlYWxpemF0aW9uczogJ251bWJlcicsXG4gICAgYWxnb3JpdGhtOiAnc3RyaW5nJyxcbiAgICBzZWVkOiAnbnVtYmVyJyxcbiAgICB0YXVUb2w6ICdudW1iZXInLFxuICB9LFxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYXR0cnMsIG9wdGlvbnMpIHtcbiAgICBTdGF0ZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9LFxuICBsZXRVc0Nob29zZUZvcllvdTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBkZWZhdWx0TW9kZSA9IHRoaXMucGFyZW50LmRlZmF1bHRNb2RlO1xuICAgIHZhciBudW1FdmVudHMgPSB0aGlzLnBhcmVudC5ldmVudHNDb2xsZWN0aW9uLmxlbmd0aDtcbiAgICB2YXIgbnVtUnVsZXMgPSB0aGlzLnBhcmVudC5ydWxlcy5sZW5ndGg7XG4gICAgdmFyIHRUb2wgPSB0aGlzLnRhdVRvbFxuICAgIHZhciBhVG9sID0gdGhpcy5hYnNvbHV0ZVRvbFxuICAgIHZhciByVG9sID0gdGhpcy5yZWxhdGl2ZVRvbFxuXG4gICAgaWYobnVtRXZlbnRzIHx8IG51bVJ1bGVzIHx8IGRlZmF1bHRNb2RlICE9PSAnZGlzY3JldGUnIHx8IHJUb2wgIT09IDAuMDMgfHwgYVRvbCAhPT0gMC4wMyl7XG4gICAgICB0aGlzLmFsZ29yaXRobSA9IFwiSHlicmlkLVRhdS1MZWFwaW5nXCI7XG4gICAgfWVsc2UgaWYodFRvbCAhPT0gMC4wMyl7XG4gICAgICB0aGlzLmFsZ29yaXRobSA9IFwiVGF1LUxlYXBpbmdcIjtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMuYWxnb3JpdGhtID0gXCJTU0FcIlxuICAgIH1cbiAgfSxcbn0pOyIsInZhciBfID0gcmVxdWlyZSgndW5kZXJzY29yZScpO1xuLy9tb2RlbHNcbnZhciBTdGF0ZSA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1zdGF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRlLmV4dGVuZCh7XG4gIHByb3BzOiB7XG4gICAgY29tcElEOiAnbnVtYmVyJyxcbiAgICBuYW1lOiAnc3RyaW5nJyxcbiAgICB2YWx1ZTogJ251bWJlcicsXG4gICAgbW9kZTogJ3N0cmluZycsXG4gICAgc3dpdGNoVG9sOiAnbnVtYmVyJyxcbiAgICBzd2l0Y2hNaW46ICdudW1iZXInLFxuICAgIGlzU3dpdGNoVG9sOiAnYm9vbGVhbicsXG4gICAgYW5ub3RhdGlvbjogJ3N0cmluZycsXG4gICAgZGlmZnVzaW9uQ29lZmY6ICdudW1iZXInLFxuICAgIHN1YmRvbWFpbnM6IHtcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24oKSB7cmV0dXJuIFtdOyB9XG4gICAgfSxcbiAgfSxcbiAgc2Vzc2lvbjoge1xuICAgIGluVXNlOiB7XG4gICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICB9LFxuICB9LFxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYXR0cnMsIG9wdGlvbnMpIHtcbiAgICBTdGF0ZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9LFxufSk7IiwidmFyIF8gPSByZXF1aXJlKCd1bmRlcnNjb3JlJyk7XG4vL21vZGVsc1xudmFyIFNwZWNpZSA9IHJlcXVpcmUoJy4vc3BlY2llJyk7XG4vL2NvbGxlY3Rpb25zXG52YXIgQ29sbGVjdGlvbiA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1jb2xsZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ29sbGVjdGlvbi5leHRlbmQoe1xuICBtb2RlbDogU3BlY2llLFxuICBhZGRTcGVjaWU6IGZ1bmN0aW9uIChzdWJkb21haW5zKSB7XG4gICAgdmFyIGlkID0gdGhpcy5wYXJlbnQuZ2V0RGVmYXVsdElEKCk7XG4gICAgdmFyIG5hbWUgPSB0aGlzLmdldERlZmF1bHROYW1lKCk7XG4gICAgdmFyIHNwZWNpZSA9IHRoaXMuYWRkKHtcbiAgICAgIGNvbXBJRDogaWQsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6IDAsXG4gICAgICBtb2RlOiB0aGlzLnBhcmVudC5kZWZhdWx0TW9kZSxcbiAgICAgIHN3aXRjaFRvbDogMC4wMyxcbiAgICAgIHN3aXRjaE1pbjogMTAwLFxuICAgICAgaXNTd2l0Y2hUb2w6IHRydWUsXG4gICAgICBhbm5vdGF0aW9uOiBcIlwiLFxuICAgICAgZGlmZnVzaW9uQ29lZmY6IDAuMCxcbiAgICAgIHN1YmRvbWFpbnM6IHN1YmRvbWFpbnNcbiAgICB9KTtcbiAgfSxcbiAgZ2V0RGVmYXVsdE5hbWU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaSA9IHRoaXMubGVuZ3RoICsgMTtcbiAgICB2YXIgbmFtZSA9ICdzJyArIGk7XG4gICAgdmFyIG5hbWVzID0gdGhpcy5tYXAoZnVuY3Rpb24gKHNwZWNpZSkgeyByZXR1cm4gc3BlY2llLm5hbWU7IH0pO1xuICAgIHdoaWxlKF8uY29udGFpbnMobmFtZXMsIG5hbWUpKSB7XG4gICAgICBpICs9IDE7XG4gICAgICBuYW1lID0gJ3MnICsgaTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWU7XG4gIH0sXG4gIHJlbW92ZVNwZWNpZTogZnVuY3Rpb24gKHNwZWNpZSkge1xuICAgIHRoaXMucmVtb3ZlKHNwZWNpZSk7XG4gIH0sXG59KTsiLCJ2YXIgXyA9IHJlcXVpcmUoJ3VuZGVyc2NvcmUnKTtcbi8vbW9kZWxzXG52YXIgU3RhdGUgPSByZXF1aXJlKCdhbXBlcnNhbmQtc3RhdGUnKTtcbnZhciBTcGVjaWUgPSByZXF1aXJlKCcuL3NwZWNpZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRlLmV4dGVuZCh7XG4gIHByb3BzOiB7XG4gICAgcmF0aW86ICdudW1iZXInLFxuICB9LFxuICBjaGlsZHJlbjoge1xuICAgIHNwZWNpZTogU3BlY2llLFxuICB9LFxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYXR0cnMsIG9wdGlvbnMpIHtcbiAgICBTdGF0ZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9LFxufSk7IiwidmFyIF8gPSByZXF1aXJlKCd1bmRlcnNjb3JlJyk7XG4vL21vZGVsc1xudmFyIFN0b2ljaFNwZWNpZSA9IHJlcXVpcmUoJy4vc3RvaWNoLXNwZWNpZScpO1xuLy9jb2xsZWN0aW9uc1xudmFyIENvbGxlY3Rpb24gPSByZXF1aXJlKCdhbXBlcnNhbmQtY29sbGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgbW9kZWw6IFN0b2ljaFNwZWNpZSxcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKGF0dHJzLCBvcHRpb25zKSB7XG4gICAgQ29sbGVjdGlvbi5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHRoaXMub24oJ2FkZCByZW1vdmUnLCBfLmJpbmQodGhpcy50cmlnZ2VyQ2hhbmdlLCB0aGlzKSk7XG4gIH0sXG4gIHRyaWdnZXJDaGFuZ2U6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmJhc2VNb2RlbCA9IHRoaXMucGFyZW50LmNvbGxlY3Rpb24ucGFyZW50O1xuICAgIHRoaXMuYmFzZU1vZGVsLnNwZWNpZXMudHJpZ2dlcignc3RvaWNoLXNwZWNpZXMtY2hhbmdlJyk7XG4gIH0sXG4gIGFkZFN0b2ljaFNwZWNpZTogZnVuY3Rpb24gKHNwZWNpZU5hbWUpIHtcbiAgICB2YXIgc3BlY2llID0gdGhpcy5wYXJlbnQuY29sbGVjdGlvbi5wYXJlbnQuc3BlY2llcy5maWx0ZXIoZnVuY3Rpb24gKHNwZWNpZSkge1xuICAgICAgICByZXR1cm4gc3BlY2llLm5hbWUgPT09IHNwZWNpZU5hbWU7XG4gICAgfSlbMF07XG4gICAgdmFyIHN0b2ljaFNwZWNpZSA9IG5ldyBTdG9pY2hTcGVjaWUoe1xuICAgICAgICByYXRpbzogMVxuICAgIH0pO1xuICAgIHN0b2ljaFNwZWNpZS5zcGVjaWUgPSBzcGVjaWU7XG4gICAgdGhpcy5hZGQoc3RvaWNoU3BlY2llKTtcbiAgfSxcbiAgcmVtb3ZlU3RvaWNoU3BlY2llOiBmdW5jdGlvbiAoc3RvaWNoU3BlY2llKSB7XG4gICAgc3RvaWNoU3BlY2llLnN0b3BMaXN0ZW5pbmcoKTtcbiAgICB0aGlzLnJlbW92ZShzdG9pY2hTcGVjaWUpO1xuICB9LFxufSk7IiwiLy9tb2RlbFxudmFyIFN0YXRlID0gcmVxdWlyZSgnYW1wZXJzYW5kLXN0YXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhdGUuZXh0ZW5kKHtcbiAgcHJvcHM6IHtcbiAgICBuYW1lOiAnc3RyaW5nJyxcbiAgfSxcbn0pOyIsIi8vbW9kZWxzXG52YXIgU3ViZG9tYWluID0gcmVxdWlyZSgnLi9zdWJkb21haW4nKTtcbi8vY29sbGVjdGlvbnNcbnZhciBDb2xsZWN0aW9uID0gcmVxdWlyZSgnYW1wZXJzYW5kLWNvbGxlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBDb2xsZWN0aW9uLmV4dGVuZCh7XG4gIG1vZGVsOiBTdWJkb21haW4sXG4gIGFkZFN1YmRvbWFpbjogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aGlzLmFkZCh7bmFtZTogbmFtZX0pO1xuICB9LFxuICByZW1vdmVTdWJkb21haW5zOiBmdW5jdGlvbiAoc3ViZG9tYWluKSB7XG4gICAgdGhpcy5yZW1vdmUoc3ViZG9tYWluKTtcbiAgfSxcbn0pOyIsIm1vZHVsZS5leHBvcnRzID0ge1xuICAgICdmaWxlLWJyb3dzZXInIDogYFxuICAgICAgICA8cD48Yj5PcGVuL0VkaXQgYSBGaWxlPC9iPjogRG91YmxlLWNsaWNrIG9uIGEgZmlsZSBvciByaWdodC1jbGljayBvbiBhIGZpbGUgYW5kIGNsaWNrIE9wZW4vRWRpdC4gIFxuICAgICAgICA8Yj5Ob3RlPC9iPjogU29tZSBmaWxlcyB3aWxsIG9wZW4gaW4gYSBuZXcgdGFiIHNvIHlvdSBtYXkgd2FudCB0byB0dXJuIG9mZiB0aGUgcG9wLXVwIGJsb2NrZXIuPC9wPlxuICAgICAgICA8cD48Yj5PcGVuIERpcmVjdG9yeTwvYj46IENsaWNrIG9uIHRoZSBhcnJvdyBuZXh0IHRvIHRoZSBkaXJlY3Rvcnkgb3IgZG91YmxlLWNsaWNrIG9uIHRoZSBkaXJlY3RvcnkuPC9wPlxuICAgICAgICA8cD48Yj5DcmVhdGUgYSBEaXJlY3RvcnkvTW9kZWw8L2I+OiBSaWdodC1jbGljayBvbiBhIGRpcmVjdG9yeSwgY2xpY2sgTmV3IERpcmVjdG9yeS9OZXcgTW9kZWwsIGFuZCBlbnRlciB0aGUgbmFtZSBvZiBkaXJlY3RvcnkvbW9kZWwgb3IgcGF0aC4gIFxuICAgICAgICBGb3IgbW9kZWxzIHlvdSB3aWxsIG5lZWQgdG8gY2xpY2sgb24gdGhlIHR5cGUgb2YgbW9kZWwgeW91IHdpc2ggdG8gY3JlYXRlIGJlZm9yZSBlbnRlcmluZyB0aGUgbmFtZSBvciBwYXRoLjwvcD5cbiAgICAgICAgPHA+PGI+Q3JlYXRlIGEgV29ya2Zsb3c8L2I+OiBSaWdodC1jbGljayBvbiBhIG1vZGVsIGFuZCBjbGljayBOZXcgV29ya2Zsb3csIHRoaXMgdGFrZXMgeW91IHRvIHRoZSB3b3JrZmxvdyBzZWxlY3Rpb24gcGFnZS4gIFxuICAgICAgICBGcm9tIHRoZSB3b3JrZmxvdyBzZWxlY3Rpb24gcGFnZSwgY2xpY2sgb24gb25lIG9mIHRoZSBsaXN0ZWQgd29ya2Zsb3dzLjwvcD5cbiAgICAgICAgPHA+PGI+Q29udmVydCBhIEZpbGU8L2I+OiBSaWdodC1jbGljayBvbiBhIE1vZGVsL1NCTUwsIGNsaWNrIENvbnZlcnQsIGFuZCBjbGljayBvbiB0aGUgZGVzaXJlZCBDb252ZXJ0IHRvIG9wdGlvbi4gIFxuICAgICAgICBNb2RlbCBmaWxlcyBjYW4gYmUgY29udmVydGVkIHRvIFNwYXRpYWwgTW9kZWxzLCBOb3RlYm9va3MsIG9yIFNCTUwgZmlsZXMuICBcbiAgICAgICAgU3BhdGlhbCBNb2RlbHMgYW5kIFNCTUwgZmlsZSBjYW4gYmUgY29udmVydGVkIHRvIE1vZGVscy4gIFxuICAgICAgICA8Yj5Ob3RlPC9iPjogTm90ZWJvb2tzIHdpbGwgb3BlbiBpbiBhIG5ldyB0YWIgc28geW91IG1heSB3YW50IHRvIHR1cm4gb2ZmIHRoZSBwb3AtdXAgYmxvY2tlci48L3A+XG4gICAgICAgIDxwPjxiPk1vdmUgRmlsZSBvciBEaXJlY3Rvcnk8L2I+OiBDbGljayBhbmQgZHJhZyB0aGUgZmlsZSBvciBkaXJlY3RvcnkgdG8gdGhlIG5ldyBsb2NhdGlvbi4gIFxuICAgICAgICBZb3UgY2FuIG9ubHkgbW92ZSBhbiBpdGVtIHRvIGEgZGlyZWN0b3J5IGlmIHRoZXJlIGlzbid0IGEgZmlsZSBvciBkaXJlY3Rvcnkgd2l0aCB0aGUgc2FtZSBuYW1lIGluIHRoYXQgbG9jYXRpb24uPC9wPlxuICAgICAgICA8cD48Yj5Eb3dubG9hZCBhIE1vZGVsL05vdGVib29rL1NCTUwgRmlsZTwvYj46IFJpZ2h0LWNsaWNrIG9uIHRoZSBmaWxlIGFuZCBjbGljayBkb3dubG9hZC48L3A+XG4gICAgICAgIDxwPjxiPlJlbmFtZSBGaWxlL0RpcmVjdG9yeTwvYj46IFJpZ2h0LWNsaWNrIG9uIGEgZmlsZS9kaXJlY3RvcnksIGNsaWNrIHJlbmFtZSwgYW5kIGVudGVyIHRoZSBuZXcgbmFtZS48L3A+XG4gICAgICAgIDxwPjxiPkR1cGxpY2F0ZS9EZWxldGUgQSBGaWxlL0RpcmVjdG9yeTwvYj46IFJpZ2h0LWNsaWNrIG9uIHRoZSBmaWxlL2RpcmVjdG9yeSBhbmQgY2xpY2sgRHVwbGljYXRlL0RlbGV0ZS48L3A+XG4gICAgYCxcbiAgICAnbW9kZWwtZWRpdG9yJyA6IGBcbiAgICAgICAgPHA+PGI+U3BlY2llczwvYj46IEEgc3BlY2llcyByZWZlcnMgdG8gYSBwb29sIG9mIGVudGl0aWVzIHRoYXQgYXJlIGNvbnNpZGVyZWQgXG4gICAgICAgICAgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBlYWNoIG90aGVyIGZvciB0aGUgcHVycG9zZXMgb2YgdGhlIG1vZGVsIGFuZCBtYXkgcGFydGljaXBhdGUgXG4gICAgICAgICAgaW4gcmVhY3Rpb25zLjwvcD5cbiAgICAgICAgPHA+PGI+UGFyYW1ldGVyPC9iPjogQSBQYXJhbWV0ZXIgaXMgdXNlZCB0byBkZWZpbmUgYSBzeW1ib2wgYXNzb2NpYXRlZCB3aXRoIFxuICAgICAgICAgIGEgdmFsdWU7IHRoaXMgc3ltYm9sIGNhbiB0aGVuIGJlIHVzZWQgaW4gbWF0aGVtYXRpY2FsIGZvcm11bGFzIGluIGEgbW9kZWwuPC9wPlxuICAgICAgICA8cD48Yj5SZWFjdGlvbjwvYj46IEEgcmVhY3Rpb24gaW4gU0JNTCByZXByZXNlbnRzIGFueSBraW5kIG9mIHByb2Nlc3MgdGhhdCBjYW4gY2hhbmdlIFxuICAgICAgICAgIHRoZSBxdWFudGl0eSBvZiBvbmUgb3IgbW9yZSBzcGVjaWVzIGluIGEgbW9kZWwuICBBdCBsZWFzdCBvbmUgc3BlY2llcyBpcyByZXF1aXJlZCB0byBcbiAgICAgICAgICBhZGQgYSByZWFjdGlvbiBhbmQgYXQgbGVhc3Qgb25lIHBhcmFtZXRlciBpcyByZXF1aXJlZCB0byBhZGQgYSBtYXNzIGFjdGlvbiByZWFjdGlvbi48L3A+XG4gICAgICAgIDxwPjxiPkV2ZW50PC9iPjogRXZlbnRzIGRlc2NyaWJlIHRoZSB0aW1lIGFuZCBmb3JtIG9mIGluc3RhbnRhbmVvdXMsIGRpc2NvbnRpbnVvdXMgc3RhdGUgXG4gICAgICAgICAgY2hhbmdlcyBpbiB0aGUgbW9kZWwuICBBbiBFdmVudCBvYmplY3QgZGVmaW5lcyB3aGVuIHRoZSBldmVudCBjYW4gb2NjdXIsIHRoZSB2YXJpYWJsZXMgXG4gICAgICAgICAgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgaXQsIGhvdyB0aGUgdmFyaWFibGVzIGFyZSBhZmZlY3RlZCwgYW5kIHRoZSBldmVudOKAmXMgcmVsYXRpb25zaGlwIFxuICAgICAgICAgIHRvIG90aGVyIGV2ZW50cy4gIEF0IGxlYXN0IG9uZSBzcGVjaWVzIG9yIHBhcmFtZXRlciBpcyByZXF1aXJlZCB0byBhZGQgYW4gZXZlbnQuPC9wPlxuICAgICAgICA8cD48Yj5SdWxlPC9iPjogUnVsZXMgcHJvdmlkZSBhZGRpdGlvbmFsIHdheXMgdG8gZGVmaW5lIHRoZSB2YWx1ZXMgb2YgdmFyaWFibGVzIFxuICAgICAgICAgIGluIGEgbW9kZWwsIHRoZWlyIHJlbGF0aW9uc2hpcHMsIGFuZCB0aGUgZHluYW1pY2FsIGJlaGF2aW9ycyBvZiB0aG9zZSB2YXJpYWJsZXMuICBUaGUgXG4gICAgICAgICAgcnVsZSB0eXBlIEFzc2lnbm1lbnQgUnVsZSBpcyB1c2VkIHRvIGV4cHJlc3MgZXF1YXRpb25zIHRoYXQgc2V0IHRoZSB2YWx1ZXMgb2YgdmFyaWFibGVzLiAgXG4gICAgICAgICAgVGhlIHJ1bGUgdHlwZSBSYXRlIFJ1bGUgaXMgdXNlZCB0byBleHByZXNzIGVxdWF0aW9ucyB0aGF0IGRldGVybWluZSB0aGUgcmF0ZXMgb2YgY2hhbmdlIFxuICAgICAgICAgIG9mIHZhcmlhYmxlcy4gIEF0IGxlYXN0IG9uZSBzcGVjaWVzIG9yIHBhcmFtZXRlciBpcyByZXF1aXJlZCB0byBhZGQgYSBydWxlLjwvcD5cbiAgICAgICAgPHA+PGI+UHJldmlldzwvYj46IEEgcHJldmlldyBvZiB0aGUgbW9kZWwgc2hvd3MgdGhlIHJlc3VsdHMgb2YgdGhlIGZpcnN0IGZpdmUgc2Vjb25kcyBvZiBhIFxuICAgICAgICAgIHNpbmdsZSB0cmFqZWN0b3J5IG9mIHRoZSBtb2RlbCBzaW11bGF0aW9uLiAgQXQgbGVhc3Qgb25lIHNwZWNpZXMgYW5kIG9uZSByZWFjdGlvbiwgZXZlbnQsIFxuICAgICAgICAgIG9yIHJ1bGUgaXMgcmVxdWlyZWQgdG8gcnVuIGEgcHJldmlldy48L3A+XG4gICAgICAgIDxwPjxiPldvcmtmbG93PC9iPjogQSB3b3JrZmxvdyBhbGxvd3MgeW91IHRvIHJ1biBhIGZ1bGwgbW9kZWwgd2l0aCBtdWx0aXBsZSB0cmFqZWN0b3JpZXMgd2l0aCBcbiAgICAgICAgICBzZXR0aW5ncyB0aGUgd2lsbCBoZWxwIHJlZmluZSB0aGUgc2ltdWxhdGlvbi4gIEF0IGxlYXN0IG9uZSBzcGVjaWVzIGFuZCBvbmUgcmVhY3Rpb24sIGV2ZW50LCBcbiAgICAgICAgICBvciBydWxlIGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBhIG5ldyB3b3JrZmxvdy48L3A+XG4gICAgYCxcbiAgICAnd2tmbC1tYW5hZ2VyJyA6IGBcbiAgICAgICAgPHA+PGI+V29ya2Zsb3cgTmFtZS9QYXRoPC9iPjogWW91IG1heSBlZGl0IHRoZSBuYW1lL3BhdGggb2YgdGhlIHdvcmtmbG93IGFzIGxvbmcgYXMgdGhlIHdvcmtmbG93IGhhcyBub3QgYmVlbiBzYXZlZC4gIFxuICAgICAgICBXb3JrZmxvdyBOYW1lcyBhbHdheXMgZW5kIHdpdGggYSB0aW1lIHN0YW1wLjwvcD5cbiAgICAgICAgPHA+PGI+TW9kZWwgUGF0aDwvYj46IElmIHlvdSBtb3ZlIG9yIHJlbmFtZSB0aGUgbW9kZWwgbWFrZSBzdXJlIHRvIHVwZGF0ZSB0aGlzIHBhdGguPC9wPlxuICAgICAgICA8cD48Yj5TZXR0aW5nczwvYj46IFRoaXMgaXMgd2hlcmUgeW91IGNhbiBjdXN0b21pemUgdGhlIHNldHRpbmdzIGZvciB5b3VyIHdvcmtmbG93LlxuICAgICAgICBJZiB5b3UgbmVlZCB0byBlZGl0IG90aGVyIHBhcnQgb2YgeW91IG1vZGVsIGNsaWNrIG9uIHRoZSBlZGl0IG1vZGVsIGJ1dHRvbi4gIFxuICAgICAgICBUaGUgc2V0dGluZ3MgYXJlIG9ubHkgYXZhaWxhYmxlIGZvciB3b3JrZmxvd3MgdGhhdCBoYXZlIG5vdCBiZWVuIHJ1bi48L3A+XG4gICAgICAgIDxwPjxiPlN0YXR1czwvYj46IFRoaXMgc2VjdGlvbiBkaXNwbGF5cyB0aGUgc3RhdHVzIGFuZCBzdGFydCB0aW1lIG9mIHRoZSBXb3JrZmxvdy4gIElmIHRoZSB3b3JrZmxvdyBoYXNuJ3QgYmVlbiBzYXJ0ZWQgdGhpcyBzZWN0aW9uIGlzIGNsb3NlZC48L3A+XG4gICAgICAgIDxwPjxiPlJlc3VsdHM8L2I+OiBZb3UgbWF5IGNoYW5nZSB0aGUgdGl0bGUsIHgtYXhpcyBsYWJlbCwgYW5kIHktYXhpcyBsYWJlbCBieSBjbGlja2luZyBvbiB0aGUgZWRpdCBwbG90IGJ1dHRvbiB0aGVuIGVudGVyIHRoZSBuYW1lIGluIHRoZSBjb3JyZWN0IGZpZWxkLjwvcD5cbiAgICAgICAgPHA+PGI+SW5mbzwvYj46IFRoaXMgc2VjdGlvbiBkaXNwbGF5cyBhbnkgd2FybmluZ3MgYW5kL29yIGVycm9yIHRoYXQgYXJlIGxvZ2dlZCBieSB0aGUgcnVubmluZyB3b3JrZmxvdy48L3A+XG4gICAgICAgIDxwPjxiPk1vZGVsPC9iPjogVGhpcyBzZWN0aW9uIGxldHMgeW91IHZpZXcgdGhlIG1vZGVsIHRoYXQgd2FzIHVzZWQgd2hlbiB5b3UgcmFuIHRoZSB3b3JrZmxvdy48L3A+XG4gICAgYCxcbn0iLCJ2YXIgVmlldyA9IHJlcXVpcmUoJ2FtcGVyc2FuZC12aWV3Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gVmlldy5leHRlbmQoe1xuXG59KTtcbiIsImxldCBQYWdlVmlldyA9IHJlcXVpcmUoJy4vYmFzZScpO1xubGV0IE1haW5WaWV3ID0gcmVxdWlyZSgnLi4vdmlld3MvbWFpbicpO1xuLy92YXIgdGVtcGxhdGVzID0gcmVxdWlyZSgnLi4vdGVtcGxhdGVzJyk7XG5sZXQgdGVtcGxhdGUgPSByZXF1aXJlKCcuLi90ZW1wbGF0ZXMvcGFnZXMvaG9tZS5wdWcnKTtcbmxldCBkb21SZWFkeSA9IHJlcXVpcmUoJ2RvbXJlYWR5Jyk7XG5cbmxldCBib290c3RyYXAgPSByZXF1aXJlKCdib290c3RyYXAnKTtcblxubGV0IGFwcCA9IHJlcXVpcmUoJy4uL2FwcCcpO1xuXG5pbXBvcnQgYm9vdHN0cmFwU3R5bGVzIGZyb20gJy4uL3N0eWxlcy9ib290c3RyYXAuY3NzJztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi4vc3R5bGVzL3N0eWxlcy5jc3MnO1xuaW1wb3J0IGZvbnRhd2Vzb21lU3R5bGVzIGZyb20gJ0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1mcmVlL2Nzcy9zdmctd2l0aC1qcy5taW4uY3NzJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0UGFnZSAocGFnZSkge1xuICBkb21SZWFkeSgoKSA9PiB7XG4gICAgbGV0IG1haW5WaWV3ID0gbmV3IE1haW5WaWV3KHtcbiAgICAgIGVsOiBkb2N1bWVudC5ib2R5XG4gICAgfSk7XG4gICAgbGV0IHAgPSBuZXcgcGFnZSh7XG4gICAgICBlbDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtaG9vaz1cInBhZ2UtY29udGFpbmVyXCJdJyksXG4gICAgfSk7XG4gICAgcC5yZW5kZXIoKVxuICB9KVxufVxuIiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vYm9vdHN0cmFwLmNzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IHVuZGVmaW5lZDtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2FscztcblxuaWYobW9kdWxlLmhvdCkge1xuXHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9ib290c3RyYXAuY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9ib290c3RyYXAuY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59IiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGVzLmNzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IHVuZGVmaW5lZDtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2FscztcblxuaWYobW9kdWxlLmhvdCkge1xuXHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZXMuY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZXMuY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59IiwidmFyIHB1ZyA9IHJlcXVpcmUoXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3B1Zy1ydW50aW1lL2luZGV4LmpzXCIpO1xuXG5mdW5jdGlvbiB0ZW1wbGF0ZShsb2NhbHMpIHt2YXIgcHVnX2h0bWwgPSBcIlwiLCBwdWdfbWl4aW5zID0ge30sIHB1Z19pbnRlcnA7cHVnX2h0bWwgPSBwdWdfaHRtbCArIFwiXFx1MDAzQyFET0NUWVBFIGh0bWxcXHUwMDNFXFx1MDAzQ2h0bWxcXHUwMDNFXFx1MDAzQ2hlYWRcXHUwMDNFXFx1MDAzQ21ldGEgY2hhcnNldD1cXFwidXRmLThcXFwiXFx1MDAzRVxcdTAwM0N0aXRsZVxcdTAwM0VTdG9jaFNTOiBTdG9jaGFzdGljIFNpbWxhdGlvbiBTZXJ2aWNlXFx1MDAzQ1xcdTAwMkZ0aXRsZVxcdTAwM0VcXHUwMDNDbWV0YSBuYW1lPVxcXCJ2aWV3cG9ydFxcXCIgY29udGVudD1cXFwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMFxcXCJcXHUwMDNFXFx1MDAzQ21ldGEgbmFtZT1cXFwiZGVzY3JpcHRpb25cXFwiIGNvbnRlbnQ9XFxcIlxcXCJcXHUwMDNFXFx1MDAzQ21ldGEgbmFtZT1cXFwiYXV0aG9yXFxcIiBjb250ZW50PVxcXCJcXFwiXFx1MDAzRVxcdTAwM0NcXHUwMDJGaGVhZFxcdTAwM0VcXHUwMDNDYm9keVxcdTAwM0VcXHUwMDNDZGl2IGNsYXNzPVxcXCJjb250YWluZXIgY2FyZCBjYXJkLWJvZHlcXFwiIGlkPVxcXCJob21lLXdyYXBwZXJcXFwiXFx1MDAzRVxcdTAwM0NkaXYgY2xhc3M9XFxcImxvZ29cXFwiIGlkPVxcXCJzdG9jaHNzLWxvZ29cXFwiIGRhdGEtaG9vaz1cXFwic3RvY2hzcy1sb2dvXFxcIlxcdTAwM0VcXHUwMDNDaW1nIHNyYz1cXFwiXFx1MDAyRmh1YlxcdTAwMkZzdGF0aWNcXHUwMDJGc3RvY2hzcy1sb2dvLnBuZ1xcXCJcXHUwMDNFXFx1MDAzQ1xcdTAwMkZkaXZcXHUwMDNFXFx1MDAzQ2RpdiBjbGFzcz1cXFwiY2VudGVyZWRcXFwiXFx1MDAzRVxcdTAwM0NoMSBjbGFzcz1cXFwiZGlzcGxheS01XFxcIlxcdTAwM0VXZWxjb21lIHRvIHRoZSBTdG9jaGFzdGljIFNpbXVsYXRpb24gU2VydmljZSFcXHUwMDNDXFx1MDAyRmgxXFx1MDAzRVxcdTAwM0NwIGNsYXNzPVxcXCJob21lLXBcXFwiXFx1MDAzRVN0b2NoU1MgMi4wIGlzIGFuIGFjY2Vzc2libGUgcGxhdGZvcm0gZm9yIG1vZGVsaW5nIGJpb2NoZW1pY2FsIHN5c3RlbXMuXFx1MDAzQ1xcdTAwMkZwXFx1MDAzRVxcdTAwM0NcXHUwMDJGZGl2XFx1MDAzRVxcdTAwM0NkaXYgY2xhc3M9XFxcInJvdyBob21lLWhpZ2hsaWdodHNcXFwiXFx1MDAzRVxcdTAwM0NkaXYgY2xhc3M9XFxcImNvbC1tZC0yXFxcIlxcdTAwM0VcXHUwMDNDXFx1MDAyRmRpdlxcdTAwM0VcXHUwMDNDZGl2IGNsYXNzPVxcXCJjb2wtbWQtNVxcXCJcXHUwMDNFXFx1MDAzQ2g1XFx1MDAzRUZlYXR1cmVzXFx1MDAzQ1xcdTAwMkZoNVxcdTAwM0VcXHUwMDNDdWwgY2xhc3M9XFxcImhvbWUtbGlzdFxcXCJcXHUwMDNFXFx1MDAzQ2xpXFx1MDAzRURpc2NyZXRlIFN0b2NoYXN0aWMgTW9kZWxpbmdcXHUwMDNDXFx1MDAyRmxpXFx1MDAzRVxcdTAwM0NsaVxcdTAwM0VDb250aW51b3VzIE9ERSBNb2RlbGluZ1xcdTAwM0NcXHUwMDJGbGlcXHUwMDNFXFx1MDAzQ2xpXFx1MDAzRUNvbnZlcnQgQmV0d2VlbiBTdG9jaGFzdGljIGFuZCBPREUgTW9kZWxzXFx1MDAzQ1xcdTAwMkZsaVxcdTAwM0VcXHUwMDNDbGlcXHUwMDNFSW1wb3J0IFNCTUwgTW9kZWxzXFx1MDAzQ1xcdTAwMkZsaVxcdTAwM0VcXHUwMDNDbGlcXHUwMDNFUGFyYW1ldGVyIFN3ZWVwIFdvcmtmbG93c1xcdTAwM0NcXHUwMDJGbGlcXHUwMDNFXFx1MDAzQ1xcdTAwMkZ1bFxcdTAwM0VcXHUwMDNDXFx1MDAyRmRpdlxcdTAwM0VcXHUwMDNDZGl2IGNsYXNzPVxcXCJjb2wtbWQtNVxcXCJcXHUwMDNFXFx1MDAzQ2g1XFx1MDAzRUNvbWluZyBzb29uLi4uXFx1MDAzQ1xcdTAwMkZoNVxcdTAwM0VcXHUwMDNDdWwgY2xhc3M9XFxcImhvbWUtbGlzdFxcXCJcXHUwMDNFXFx1MDAzQ2xpXFx1MDAzRVNjaW9wZSBJbnRlZ3JhdGlvblxcdTAwM0NcXHUwMDJGbGlcXHUwMDNFXFx1MDAzQ2xpXFx1MDAzRVNwYXRpYWwgU2ltdWxhdGlvbnNcXHUwMDNDXFx1MDAyRmxpXFx1MDAzRVxcdTAwM0NsaVxcdTAwM0VCcmluZyBZb3VyIE93biBDbG91ZFxcdTAwM0NcXHUwMDJGbGlcXHUwMDNFXFx1MDAzQ1xcdTAwMkZ1bFxcdTAwM0VcXHUwMDNDXFx1MDAyRmRpdlxcdTAwM0VcXHUwMDNDXFx1MDAyRmRpdlxcdTAwM0VcXHUwMDNDZGl2IGNsYXNzPVxcXCJjZW50ZXJlZFxcXCJcXHUwMDNFXFx1MDAzQ2EgY2xhc3M9XFxcInRyeS1zdG9jaHNzLWJ0biBidG4gYnRuLXByaW1hcnkgYm94LXNoYWRvd1xcXCIgaHJlZj1cXFwiXFx1MDAyRmh1YlxcdTAwMkZzcGF3blxcXCIgcm9sZT1cXFwiYnV0dG9uXFxcIlxcdTAwM0VDbGljayBoZXJlIHRvIGxvZ2luXFx1MDAzQ1xcdTAwMkZhXFx1MDAzRVxcdTAwM0NcXHUwMDJGZGl2XFx1MDAzRVxcdTAwM0NcXHUwMDJGZGl2XFx1MDAzRVxcdTAwM0NkaXYgY2xhc3M9XFxcImNvbnRhaW5lciBjYXJkIGNhcmQtYm9keVxcXCIgaWQ9XFxcInJlZ2lzdHJhdGlvbi1ob21lXFxcIlxcdTAwM0VcXHUwMDNDZGl2IGNsYXNzPVxcXCJjZW50ZXJlZFxcXCJcXHUwMDNFXFx1MDAzQ3AgY2xhc3M9XFxcImhvbWUtcFxcXCJcXHUwMDNFU3RvY2hTUyBpcyBvcGVuLXNvdXJjZSBzb2Z0d2FyZS4gIFRvIG9idGFpbiBjb250aW51ZWQgZnVuZGluZyBmb3Igc3VzdGFpbmVkIGRldmVsb3BtZW50LCB3ZSBtdXN0IHNob3cgdGhhdCBTdG9jaFNTIGlzIG1ha2luZyBhbiBpbXBhY3QgaW4gdGhlIHNjaWVudGlmaWMgY29tbXVuaXR5LiAgRm9yIHRoaXMsIHdlIG5lZWQgdG8ga25vdyB3aG8gaXMgdXNpbmcgdGhlIHNvZnR3YXJlLCBhbmQgYSBiaXQgYWJvdXQgd2hhdCB0aGV5IGFyZSB1c2luZyBpdCBmb3IuICBQbGVhc2UgY29uc2lkZXIgcmVnaXN0ZXJpbmcgU3RvY2hTUyB0byBzaG93IHlvdXIgc3VwcG9ydC5cXHUwMDNDXFx1MDAyRnBcXHUwMDNFXFx1MDAzQ2RpdiBjbGFzcz1cXFwiY29sbGFwc2VcXFwiIGRhdGEtaG9vaz1cXFwicmVnaXN0cmF0aW9uLWxpbmtcXFwiXFx1MDAzRVxcdTAwM0NidXR0b24gY2xhc3M9XFxcImJ0biBidG4tcHJpbWFyeSBib3gtc2hhZG93XFxcIiBkYXRhLWhvb2s9XFxcInJlZ2lzdHJhdGlvbi1saW5rLWJ1dHRvblxcXCIgc3R5bGU9XFxcIm1hcmdpbjogMS41cmVtO1xcXCJcXHUwMDNFUmVnaXN0ZXIgU3RvY2hzc1xcdTAwM0NcXHUwMDJGYnV0dG9uXFx1MDAzRVxcdTAwM0NcXHUwMDJGZGl2XFx1MDAzRVxcdTAwM0NkaXYgY2xhc3M9XFxcImNvbGxhcHNlIHNob3dcXFwiIGRhdGEtaG9vaz1cXFwicmVnaXN0cmF0aW9uLWZvcm1cXFwiIGlkPVxcXCJyZWdpc3RyYXRpb24tZm9ybVxcXCJcXHUwMDNFXFx1MDAzQ2lmcmFtZSBzcmM9XFxcImh0dHBzOlxcdTAwMkZcXHUwMDJGZG9jcy5nb29nbGUuY29tXFx1MDAyRmZvcm1zXFx1MDAyRmRcXHUwMDJGMTJ0QUg0ZjhDSi0zRi1sSzQ0UTl1UUhGaW9fbUdvSzBvWTgyOXE1bEQ3aTRcXHUwMDJGdmlld2Zvcm0/ZW1iZWRkZWQ9dHJ1ZVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGhlaWdodD1cXFwiODAwXFxcIiBmcmFtZWJvcmRlcj1cXFwiMFxcXCJcXHUwMDNFXFx1MDAzQ1xcdTAwMkZpZnJhbWVcXHUwMDNFXFx1MDAzQ1xcdTAwMkZkaXZcXHUwMDNFXFx1MDAzQ1xcdTAwMkZkaXZcXHUwMDNFXFx1MDAzQ1xcdTAwMkZkaXZcXHUwMDNFXFx1MDAzQ1xcdTAwMkZib2R5XFx1MDAzRVxcdTAwM0NcXHUwMDJGaHRtbFxcdTAwM0VcIjs7cmV0dXJuIHB1Z19odG1sO307XG5tb2R1bGUuZXhwb3J0cyA9IHRlbXBsYXRlOyIsIm1vZHVsZS5leHBvcnRzID0ge1xuICBzcGVjaWVzRWRpdG9yOiB7XG4gICAgbmFtZTogXCJOYW1lcyBmb3Igc3BlY2llcywgcGFyYW1ldGVycywgcmVhY3Rpb25zLCBldmVudHMsIGFuZCBydWxlcyBtdXN0IGJlIHVuaXF1ZS5cIixcblxuICAgIGluaXRpYWxWYWx1ZTogXCJJbml0aWFsIHBvcHVsYXRpb24gb2YgYSBzcGVjaWVzLlwiLFxuXG4gICAgYW5ub3RhdGlvbjogXCJBbiBvcHRpb25hbCBub3RlIGFib3V0IHRoZSBzcGVjaWVzLlwiLFxuXG4gICAgcmVtb3ZlOiBcIkEgc3BlY2llcyBtYXkgb25seSBiZSByZW1vdmVkIGlmIGl0IGlzIG5vdCBhIHBhcnQgb2YgYW55IHJlYWN0aW9uLCBldmVudCBhc3NpZ25tZW50LCBvciBydWxlLlwiLFxuICAgIFxuICAgIHNwZWNpZXNNb2RlOiBcIkNvbmNlbnRyYXRpb24gLSBTcGVjaWVzIHdpbGwgb25seSBiZSByZXByZXNlbnRlZCB1c2luZyBjb250aW51b3VzIChmbG9hdGluZyBwb2ludCkgdmFsdWVzLjxicj5Qb3B1bGF0aW9uIC0gU3BlY2llcyB3aWxsIG9ubHkgYmUgcmVwcmVzZW50ZWQgXCIrXG4gICAgICAgIFwidXNpbmcgZGlzY3JldGUgKGludGVnZXIgY291bnQpIHZhbHVlcy48YnI+SHlicmlkIENvbmNlbnRyYXRpb24vUG9wdWxhdGlvbiAtIEFsbG93cyBhIHNwZWNpZXMgdG8gYmUgcmVwcmVzZW50ZWQgdXNpbmcgY29udGludW91cyBhbmQvb3IgZGlzY3JldGUgdmFsdWVzLlwiLFxuXG4gICAgbW9kZTogXCJDb25jZW50cmF0aW9uIC0gU3BlY2llcyB3aWxsIG9ubHkgYmUgcmVwcmVzZW50ZWQgdXNpbmcgY29udGludW91cyAoZmxvYXRpbmcgcG9pbnQpIHZhbHVlcy48YnI+UG9wdWxhdGlvbiAtIFNwZWNpZXMgd2lsbCBvbmx5IGJlIHJlcHJlc2VudGVkIFwiK1xuICAgICAgICBcInVzaW5nIGRpc2NyZXRlIChpbnRlZ2VyIGNvdW50KSB2YWx1ZXMuPGJyPkh5YnJpZCBDb25jZW50cmF0aW9uL1BvcHVsYXRpb24gLSBBbGxvd3MgYSBzcGVjaWVzIHRvIGJlIHJlcHJlc2VudGVkIHVzaW5nIGNvbnRpbnVvdXMgYW5kL29yIGRpc2NyZXRlIHZhbHVlcy5cIixcblxuICAgIHN3aXRjaFZhbHVlOiBcIlN3aXRjaGluZyBUb2xlcmFuY2UgLSBUb2xlcmFuY2UgbGV2ZWwgZm9yIGNvbnNpZGVyaW5nIGEgZHluYW1pYyBzcGVjaWVzIGRldGVybWluaXN0aWNhbGx5LCB2YWx1ZSBpcyBjb21wYXJlZCB0byBhbiBlc3RpbWF0ZWQgc2QvbWVhbiBwb3B1bGF0aW9uIFwiK1xuICAgICAgICBcIm9mIGEgc3BlY2llcyBhZnRlciBhIGdpdmVuIHRpbWUgc3RlcC4gVGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgaWYgYSAnTWluaW11bSBWYWx1ZScgbm90IHByb3ZpZGVkLjxicj5NaW5pbXVtIFZhbHVlIEZvciBTd2l0Y2hpbmcgLSBNaW5pbXVtIHBvcHVsYXRpb24gdmFsdWUgXCIrXG4gICAgICAgIFwiYXQgd2hpY2ggc3BlY2llcyB3aWxsIGJlIHJlcHJlc2VudGVkIGFzIENvbmNlbnRyYXRpb24uXCJcbiAgfSxcbiAgcGFyYW1ldGVyc0VkaXRvcjoge1xuICAgIG5hbWU6IFwiTmFtZXMgZm9yIHNwZWNpZXMsIHBhcmFtZXRlcnMsIHJlYWN0aW9ucywgZXZlbnRzLCBhbmQgcnVsZXMgbXVzdCBiZSB1bmlxdWUuXCIsXG4gICAgXG4gICAgZXhwcmVzc2lvbjogXCJBIHBhcmFtZXRlciB2YWx1ZSBvciBhIG1hdGhlbWF0aWNhbCBleHByZXNzaW9uIGNhbGN1bGF0aW5nIHRoZSBwYXJhbWV0ZXIgdmFsdWUuXCIsXG4gICAgXG4gICAgYW5ub3RhdGlvbjogXCJBbiBvcHRpb25hbCBub3RlIGFib3V0IGEgcGFyYW1ldGVyLlwiLFxuICAgIFxuICAgIHJlbW92ZTogXCJBIHBhcmFtZXRlciBtYXkgb25seSBiZSByZW1vdmVkIGlmIGl0IGlzIG5vdCB1c2VkIGluIGFueSByZWFjdGlvbiwgZXZlbnQgYXNzaWdubWVudCwgb3IgcnVsZS5cIlxuICB9LFxuICByZWFjdGlvbnNFZGl0b3I6IHtcbiAgICBuYW1lOiBcIk5hbWVzIGZvciBzcGVjaWVzLCBwYXJhbWV0ZXJzLCByZWFjdGlvbnMsIGV2ZW50cywgYW5kIHJ1bGVzIG11c3QgYmUgdW5pcXVlLlwiLFxuICAgIFxuICAgIGFubm90YXRpb246IFwiQW4gb3B0aW9uYWwgbm90ZSBhYm91dCB0aGUgcmVhY3Rpb24uXCIsXG4gICAgXG4gICAgcmF0ZTogXCJUaGUgcmF0ZSBvZiB0aGUgbWFzcy1hY3Rpb24gcmVhY3Rpb24uXCIsXG4gICAgXG4gICAgcHJvcGVuc2l0eTogXCJUaGUgY3VzdG9tIHByb3BlbnNpdHkgZXhwcmVzc2lvbiBmb3IgdGhlIHJlYWN0aW9uLlwiLFxuICAgIFxuICAgIHJlYWN0YW50OiBcIlRoZSByZWFjdGFudHMgdGhhdCBhcmUgY29uc3VtZWQgaW4gdGhlIHJlYWN0aW9uLCB3aXRoIHN0b2ljaGlvbWV0cnkuXCIsXG4gICAgXG4gICAgcHJvZHVjdDogXCJUaGUgc3BlY2llcyB0aGF0IGFyZSBjcmVhdGVkIGJ5IHRoZSByZWFjdGlvbiBldmVudCwgd2l0aCBzdG9pY2hpb21ldHJ5LlwiLFxuICB9LFxuICBldmVudHNFZGl0b3I6IHtcbiAgICBuYW1lOiBcIk5hbWVzIGZvciBzcGVjaWVzLCBwYXJhbWV0ZXJzLCByZWFjdGlvbnMsIGV2ZW50cywgYW5kIHJ1bGVzIG11c3QgYmUgdW5pcXVlLlwiLFxuICAgIFxuICAgIGFubm90YXRpb246IFwiQW4gb3B0aW9uYWwgbm90ZSBhYm91dCBhbiBldmVudC5cIixcbiAgICBcbiAgICB0cmlnZ2VyRXhwcmVzc2lvbjogXCJUaGUgdHJpZ2dlciBleHByZXNzaW9uIGNhbiBiZSBhbnkgbWF0aGVtYXRpY2FsIGV4cHJlc3Npb24gd2hpY2ggZXZhbHVhdGVzIHRvIGEgYm9vbGVhbiB2YWx1ZSBpbiBhIHB5dGhvbiBlbnZpcm9ubWVudCAoaS5lLiB0PT01MCkuICBUaGlzIFwiK1xuICAgICAgICBcImV4cHJlc3Npb24gaXMgZXZhbHVhYmxlIHdpdGhpbiB0aGUgbW9kZWwgbmFtZXNwYWNlLCBhbmQgYW55IHZhcmlhYmxlIChTcGVjaWVzLCBQYXJhbWV0ZXJzLCBldGMuKSBjYW4gYmUgcmVmZXJlbmNlZCBpbiB0aGUgZXhwcmVzc2lvbi4gIFRpbWUgaXMgcmVwcmVzZW50ZWQgXCIrXG4gICAgICAgIFwid2l0aCB0aGUgbG93ZXIgY2FzZSB2YXJpYWJsZSAndCcuIEFuIGV2ZW50IHdpbGwgYmVnaW4gZXhlY3V0aW9uIG9mIGFzc2lnbm1lbnRzIChvciBkZWxheSwgaWYgYW55KSBvbmNlIHRoaXMgZXhwcmVzc2lvbiBjaGFuZ2VzIGZyb20gJ0ZhbHNlJyB0byAnVHJ1ZS4nXCIsXG4gICAgXG4gICAgZGVsYXk6IFwiY29udGFpbnMgbWF0aCBleHByZXNzaW9uIGV2YWx1YWJsZSB3aXRoaW4gbW9kZWwgbmFtZXNwYWNlLiBUaGlzIGV4cHJlc3Npb24gZGVzaWduYXRlcyBhIGRlbGF5IGJldHdlZW4gdGhlIHRyaWdnZXIgb2YgYW4gZXZlbnQgYW5kIHRoZSBleGVjdXRpb24gb2YgaXRzIGFzc2lnbm1lbnRzLlwiLFxuICAgIFxuICAgIHByaW9yaXR5OiBcIlR5cGljYWxseSBhIG51bWJlcjogMSwgMiwgZXRjLiB0aGF0IGRlc2lnbmF0ZXMgdGhlIGV4ZWN1dGlvbiBvcmRlciBmb3IgZXZlbnRzIHdoaWNoIGFyZSBleGVjdXRlZCBzaW11bHRhbmVvdXNseS4gIENhbiBiZSBhIG1hdGggZXhwcmVzc2lvbiBldmFsdWFibGUgXCIrXG4gICAgICAgIFwid2l0aGluIHRoZSBtb2RlbCBuYW1lc3BhY2UuXCIsXG4gICAgXG4gICAgaW5pdGlhbFZhbHVlOiBcIklmIHRydWUsIHRoZSB0cmlnZ2VyIGV4cHJlc3Npb24gd2lsbCBiZSBldmFsdWF0ZWQgYXMgJ1RydWUnIGF0IHN0YXJ0IG9mIHNpbXVsYXRpb24uICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIHNvbWUgbW9kZWxzLCBzaW5jZSBhbiBldmVudCBpcyBvbmx5IFwiK1xuICAgICAgICBcImV4ZWN1dGVkIHdoZW4gdGhlIHRyaWdnZXIgZXhwcmVzc2lvbiBzdGF0ZSBjaGFuZ2VzIGZyb20gJ0ZhbHNlJyB0byAnVHJ1ZScuXCIsXG4gICAgXG4gICAgcGVyc2lzdGVudDogXCJJZiBwZXJzaXN0ZW50LCBhbiBldmVudCBhc3NpZ25tZW50IHdpbGwgYWx3YXlzIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGV2ZW50J3MgdHJpZ2dlciBleHByZXNzaW9uIGV2YWx1YXRlcyB0byB0cnVlLiAgSWYgbm90IHBlcnNpc3RlbnQsIHRoZSBldmVudCBcIitcbiAgICAgICAgXCJhc3NpZ25tZW50IHdpbGwgbm90IGJlIGV4ZWN1dGVkIGlmIHRoZSB0cmlnZ2VyIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGZhbHNlIGJldHdlZW4gdGhlIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZCBhbmQgdGhlIHRpbWUgdGhlIGFzc2lnbm1lbnQgaXMgZXhlY3V0ZWQuXCIsXG4gICAgXG4gICAgdXNlVmFsdWVzRnJvbVRyaWdnZXJUaW1lOiBcIklmIHNldCB0byB0cnVlLCBhc3NpZ25tZW50IGV4ZWN1dGlvbiB3aWxsIGJlIGJhc2VkIG9mZiBvZiB0aGUgbW9kZWwgc3RhdGUgYXQgdHJpZ2dlciB0aW1lLiBJZiBmYWxzZSAoZGVmYXVsdCksIHRoZSBhc3NpZ25tZW50IHdpbGwgYmUgXCIrXG4gICAgICAgIFwibWFkZSB1c2luZyB2YWx1ZXMgYXQgYXNzaWdubWVudCB0aW1lLlwiLFxuICAgIFxuICAgIGFzc2lnbm1lbnRzOiBcIkFuIEV2ZW50IEFzc2lnbm1lbnQgZGVzY3JpYmVzIGEgY2hhbmdlIHRvIGJlIHBlcmZvcm1lZCB0byB0aGUgY3VycmVudCBtb2RlbCBzaW11bGF0aW9uLiAgVGhpcyBhc3NpZ25tZW50IGNhbiBlaXRoZXIgYmUgZmlyZWQgYXQgdGhlIHRpbWUgaXRzIGFzc29jaWF0ZWQgXCIrXG4gICAgICAgIFwidHJpZ2dlciBjaGFuZ2VzIGZyb20gZmFsc2UgdG8gdHJ1ZSwgb3IgYWZ0ZXIgYSBzcGVjaWZpZWQgZGVsYXksIGRlcGVuZGluZyBvbiB0aGUgRXZlbnQgY29uZmlndXJhdGlvbi4gQW4gZXZlbnQgbWF5IGNvbnRhaW4gb25lIG9yIG1vcmUgYXNzaWdubWVudHMuXCIsXG4gICAgXG4gICAgdmFyaWFibGU6IFwiVGhlIHRhcmdldCBTcGVjaWVzIG9yIFBhcmFtZXRlciB0byBiZSBtb2RpZmllZCBieSB0aGUgZXZlbnQuXCIsXG4gICAgXG4gICAgYXNzaWdubWVudEV4cHJlc3Npb246IFwiQ2FuIGJlIGFueSBtYXRoZW1hdGljYWwgc3RhdGVtZW50IHdoaWNoIHJlc29sdmVzIHRvIGFuIGludGVnZXIgb3IgZmxvYXQgdmFsdWUuICBUaGlzIHZhbHVlIHdpbGwgYmUgYXNzaWduZWQgdG8gdGhlIGFzc2lnbm1lbnQncyB0YXJnZXQgdmFyaWFibGUgXCIrXG4gICAgICAgIFwidXBvbiBldmVudCBleGVjdXRpb24uXCJcbiAgfSxcbiAgcnVsZXNFZGl0b3I6IHtcbiAgICBuYW1lOiBcIk5hbWVzIGZvciBzcGVjaWVzLCBwYXJhbWV0ZXJzLCByZWFjdGlvbnMsIGV2ZW50cywgYW5kIHJ1bGVzIG11c3QgYmUgdW5pcXVlLlwiLFxuICAgIFxuICAgIHR5cGU6IFwiQXNzaWdubWVudCBSdWxlczogQW4gYXNzaWdubWVudCBydWxlIGRlc2NyaWJlcyBhIGNoYW5nZSB0byBhIFNwZWNpZXMgb3IgUGFyYW1ldGVyIGFzIGEgZnVuY3Rpb24gd2hvc2UgbGVmdC1oYW5kIHNpZGUgaXMgYSBzY2FsYXIgKGkuZS4geCA9IGYoViksIHdoZXJlIFYgaXMgYSBcIitcbiAgICAgICAgXCJ2ZWN0b3Igb2Ygc3ltYm9scywgbm90IGluY2x1ZGluZyB4KS48YnI+ICBSYXRlIFJ1bGVzOiBBIHJhdGUgcnVsZSBkZXNjcmliZXMgYSBjaGFuZ2UgdG8gYSBTcGVjaWVzIG9yIFBhcmFtZXRlciBhcyBhIGZ1bmN0aW9uIHdob3NlIGxlZnQtaGFuZCBzaWRlIGlzIGEgcmF0ZSBvZiBcIitcbiAgICAgICAgXCJjaGFuZ2UgKGkuZS4gZHgvZHQgPSBmKFcpLCB3aGVyZSBXIGlzIGEgdmVjdG9yIG9mIHN5bWJvbHMgd2hpY2ggbWF5IGluY2x1ZGUgeCkuXCIsXG4gICAgXG4gICAgdmFyaWFibGU6IFwiVGFyZ2V0IHZhcmlhYmxlIHRvIGJlIG1vZGlmaWVkIGJ5IHRoZSBSdWxlJ3MgZm9ybXVsYS5cIixcbiAgICBcbiAgICBleHByZXNzaW9uOiBcIkEgUHl0aG9uIGV2YWx1YWJsZSBtYXRoZW1hdGljYWwgZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiBhIHJ1bGUgZnVuY3Rpb24uPGJyPiAgRm9yIEFzc2lnbm1lbnQgUnVsZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgcmlnaHQgaGFuZCBcIitcbiAgICAgICAgXCJzaWRlIG9mIGEgc2NhbGFyIGVxdWF0aW9uLjxicj4gIEZvciBSYXRlIFJ1bGVzLCB0aGlzIHJlcHJlc2VudHMgdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiBhIHJhdGUtb2YtY2hhbmdlIGVxdWF0aW9uLlwiLFxuICAgIFxuICAgIGFubm90YXRpb246IFwiQW4gb3B0aW9uYWwgbm90ZSBhYm91dCBhIHJ1bGUuXCJcbiAgfSxcbiAgc2JtbENvbXBvbmVudHNFZGl0b3I6IHtcbiAgICBhbm5vdGF0aW9uOiBcIkFuIG9wdGlvbmFsIG5vdGUgYWJvdXQgdGhlIFNCTUwgQ29tcG9uZW50LlwiXG4gIH0sXG4gIG1vZGVsU2V0dGluZ3M6IHtcbiAgICBwcmV2aWV3U2V0dGluZ3M6IFwiUHJldmlldyBTZXR0aW5ncyBhcmUgYXBwbGllZCB0byB0aGUgbW9kZWwgYW5kIGFyZSB1c2VkIGZvciB0aGUgbW9kZWwgcHJldmlldyBhbmQgYWxsIHdvcmtmbG93cy5cIixcbiAgICBcbiAgICBwcmV2aWV3VGltZTogXCJFbmQgdGltZSBvZiBzaW11bGF0aW9uLlwiLFxuICAgIFxuICAgIHRpbWVVbml0czogXCJTYXZlIHBvaW50IGluY3JlbWVudCBmb3IgcmVjb3JkaW5nIGRhdGEuXCIsXG4gICAgXG4gICAgdm9sdW1lOiBcIlRoZSB2b2x1bWUgb2YgdGhlIHN5c3RlbSBtYXR0ZXJzIHdoZW4gY29udmVydGluZyB0byBmcm9tIHBvcHVsYXRpb24gdG8gY29uY2VudHJhdGlvbiBmb3JtLiBUaGlzIHdpbGwgYWxzbyBzZXQgYSBwYXJhbWV0ZXIgJ3ZvbCcgZm9yIHVzZSBpbiBjdXN0b20gKGkuZS4gXCIrXG4gICAgICAgIFwibm9uLW1hc3MtYWN0aW9uKSBwcm9wZW5zaXR5IGZ1bmN0aW9ucy5cIlxuICB9LFxuICBzaW11bGF0aW9uU2V0dGluZ3M6IHtcbiAgICBydG9sOiBcIlJlbGF0aXZlIHRvbGVyYW5jZSBmb3Igb2RlIHNvbHV0aW9ucywgY29udHJvbHMgYSByZWxhdGl2ZSBhY2N1cmFjeSAobnVtYmVyIG9mIGNvcnJlY3QgZGlnaXRzKS4gIFRoZSBzb2x2ZXIga2VlcHMgdGhlIGxvY2FsIGVycm9yIGVzdGltYXRlcyBsZXNzIHRoYW4gYXRvbCArIFwiK1xuICAgICAgICBcInJ0b2wgKiBhYnMoeSkuICBWYWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLjAuXCIsXG5cbiAgICBhdG9sOiBcIkFic29sdXRlIHRvbGVyYW5jZSBmb3Igb2RlIHNvbHV0aW9ucywgaWYgYSBjb21wb25lbnQgb2YgeSBpcyBhcHByb3hpbWF0ZWx5IGJlbG93IGF0b2wsIHRoZSBlcnJvciBvbmx5IG5lZWRzIHRvIGZhbGwgd2l0aGluIHRoZSBzYW1lIGF0b2wgdGhyZXNob2xkLCBhbmQgdGhlIFwiK1xuICAgICAgICBcIm51bWJlciBvZiBjb3JyZWN0IGRpZ2l0cyBpcyBub3QgZ3VhcmFudGVlZC4gIFRoZSBzb2x2ZXIga2VlcHMgdGhlIGxvY2FsIGVycm9yIGVzdGltYXRlcyBsZXNzIHRoYW4gYXRvbCArIHJ0b2wgKiBhYnMoeSkuICBWYWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLjAuXCIsXG5cbiAgICB0dG9sOiBcIkEgcmVsYXRpdmUgZXJyb3IgdG9sZXJhbmNlIHZhbHVlIGdvdmVybmluZyB0YXUtbGVhcGluZyB0YXUgc2VsZWN0aW9ucy4gIEJhc2VkIG9uIENhbywgWS47IEdpbGxlc3BpZSwgRC4gVC47IFBldHpvbGQsIEwuIFIuICgyMDA2KS4gJ0VmZmljaWVudCBzdGVwIHNpemUgXCIrXG4gICAgICAgIFwic2VsZWN0aW9uIGZvciB0aGUgdGF1LWxlYXBpbmcgc2ltdWxhdGlvbiBtZXRob2QnIChQREYpLiBUaGUgSm91cm5hbCBvZiBDaGVtaWNhbCBQaHlzaWNzLiAxMjQgKDQpOiAwNDQxMDkuIEJpYmNvZGU6MjAwNkpDaFBoLjEyNGQ0MTA5Qy4gZG9pOjEwLjEwNjMvMS4yMTU5NDY4LiBcIitcbiAgICAgICAgXCJQTUlEIDE2NDYwMTUxICBWYWx1ZSBtdXN0IGJlIGJldHdlZW4gMC4wIGFuZCAxLjAuXCIsXG5cbiAgICBzZWVkOiBcIlRoZSBzZWVkIGZvciB0aGUgc2ltdWxhdGlvbi4gIFNldCB0byAtMSBmb3IgYSByYW5kb20gc2VlZC5cIixcblxuICAgIHJlYWxpemF0aW9uczogXCJUaGUgbnVtYmVyIG9mIHNpbXVsYXRpb24gcmVhbGl6YXRpb25zIHRvIGJlIGV4ZWN1dGVkLiBBIHRpbWUtc2VyaWVzIHRyYWplY3RvcnkgZm9yIGVhY2ggcmVhbGl6YXRpb24gd2lsbCBiZSByZXR1cm5lZCB1cG9uIGNvbXBsZXRpb24gb2YgYWxsIFwiK1xuICAgICAgICBcInJlYWxpemF0aW9ucy5cIixcblxuICAgIGFsZ29yaXRobTpcIlRoZSBzb2x2ZXIgYnkgd2hpY2ggdG8gc2ltdWxhdGUgdGhlIG1vZGVsLlwiLFxuXG4gICAgb2RlOiBcIlRoaXMgYWxnb3JpdGhtIHByb2R1Y2VzIGEgJ2NvbnRpbnVvdXMtZGV0ZXJtaW5pc3RpYycgc29sdXRpb24gaW4gdGhlIHN0eWxlIG9mIE9yZGluYXJ5IERpZmZlcmVudGlhbCBFcXVhdGlvbnMgKE9ERSkuXCIsXG5cbiAgICBzc2E6IFwiVGhpcyBhbGdvcml0aG0gcHJvZHVjZXMgYSAnZGlzY3JldGUtc3RvY2hhc3RpYycgc29sdXRpb24gdXNpbmcgdGhlIFN0b2NoYXN0aWMgU2ltdWxhdGlvbiBBbGdvcml0aG0gKFNTQSwgYWxzbyBrbm93IGFzIHRoZSBHaWxsZXNwaWUgYWxnb3JpdGhtKS5cIixcblxuICAgIHRhdUxlYXBpbmc6IFwiVGhpcyBhbGdvcml0aG0gcHJvZHVjZXMgYSAnZGlzY3JldGUtc3RvY2hhc3RpYycgc29sdXRpb24gdXNpbmcgYSB2YXJpYW50IG9mIHRoZSBTU0EgdGhhdCBpcyBtb3JlIGVmZmljaWVudCwgYnV0IGxlc3MgYWNjdXJhdGUuXCIsXG5cbiAgICBoeWJyaWQ6IFwiVGhpcyBoeWJyaWQgZGV0ZXJtaW5pc3RpYy1zdG9jaGFzdGljIHdpbGwgcHJvZHVjZSBhIHNvbHV0aW9uIHRoYXQgaXMgJ2Rpc2NyZXRlLXN0b2NoYXN0aWMnIGZvciBzbWFsbCBwb3B1bGF0aW9uIHNpemVzIGFuZCAnY29udGludW91cy1kZXRlcm1pbmlzdGljJyBcIitcbiAgICAgICAgXCJmb3IgbGFyZ2UgcG9wdWxhdGlvbiBzaXplcy5cIixcblxuICAgIGNob29zZUZvck1lOiBcIkh5YnJpZCB3aWxsIGJlIGNob3NlbiBiYXNlZCBvbiBFdmVudCwgUnVsZXMsIGFuZCBvdGhlciBTQk1MIG1vZGVsIGNvbXBvbmVudHMgb3IgaWYgdGhlIG1vZGVsIGlzIHJlcHJlc2VudGVkIGFzIENvbmNlbnRyYXRpb24uICBUYXUgTGVhcGluZyB3aWxsIGJlIFwiK1xuICAgICAgICBcImNob3NlbiBpZiB0aGUgVGF1IFRvbGVyYW5jZSBpcyBjaGFuZ2VkIHRvIGEgdmFsdWUgb3RoZXIgdGhhbiAwLjAzLiAgU1NBIHdpbGwgYmUgY2hvc2VuIGlmIHRoZSBtb2RlbCBpcyByZXByZXNlbnRlZCBhcyBQb3B1bGF0aW9uLlwiXG4gIH0sXG4gIHBhcmFtZXRlclN3ZWVwU2V0dGluZ3M6IHtcbiAgICBzd2VlcFR5cGU6IFwiVGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIHRvIHN3ZWVwIHRocm91Z2guXCIsXG5cbiAgICBzcGVjaWVzOiBcIlRoZSBpbml0aWFsIHNwZWNpZXMgdG8gdmlldyBzd2VlcCBkYXRhIGZvci5cIixcblxuICAgIHZhcmlhYmxlOiBcIlRoZSBwYXJhbWV0ZXIocykgdG8gc3dlZXAgdGhyb3VnaC5cIixcbiAgICBcbiAgICB2YWx1ZTogXCJUaGUgY3VycmVudCB2YWx1ZSBmb3IgdGhlIHBhcmFtZXRlciB5b3Ugd2l0aCB0byBzd2VlcCB0aHJvdWdoLlwiLFxuICAgIFxuICAgIG1pbjogXCJUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgc3dlZXAgcmFuZ2UuICBEZWZhdWx0cyB0byBoYWxmIG9mIHRoZSBjdXJyZW50IHZhbHVlLlwiLFxuICAgIFxuICAgIG1heDogXCJUaGUgZmluYWwgdmFsdWUgb2YgdGhlIHN3ZWVwIHJhbmdlLiAgRGVmYXVsdHMgdG8gMS41IHRpbWVzIHRoZSBjdXJyZW50IHZhbHVlLlwiLFxuICAgIFxuICAgIHN0ZXBzOiBcIlRoZSBudW1iZXIgb2Ygc3RlcHMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHN3ZWVwIHZhbHVlcyBhY3Jvc3MgdGhlIHN3ZWVwIHJhbmdlLlwiXG4gIH0sXG4gIHBhcmFtZXRlclN3ZWVwUmVzdWx0czoge1xuICAgIHNwZWNpZXM6IFwiVGhlIHNwZWNpZXMgdG8gdmlldyBzd2VlcCBkYXRhIGZvclwiLFxuXG4gICAgbWFwcGVyOiBcIlRoZSAnZmVhdHVyZSBleHRyYWN0b3InIHdoaWNoIGNhbGN1bGF0ZXMgYSBzaW5nbGUgdmFsdWUgZnJvbSB0aGUgc3BlY2llcyBwb3B1bGF0aW9uL2NvbmNlbnRyYXRpb24gZGF0YSBvZiBlYWNoIHNpbXVsYXRlZCB0cmFqZWN0b3J5LlwiLFxuICAgIFxuICAgIHJlZHVjZXI6IFwiVGhlIHN0YXRpc3RpY2FsIGZ1bmN0aW9uIGFwcGxpZWQgdG8gdGhlIGVuc2VtYmxlIG9mIHZhbHVlcyBleHRyYWN0ZWQgYnkgdGhlICdmZWF0dXJlIGV4dHJhY3RvcicgZnJvbSBlYWNoIHNpbXVsYXRpb24gdHJhamVjdG9yeS5cIlxuICB9LFxuICB3b3JrZmxvd1NlbGVjdGlvbjoge1xuICAgIGVuc2VtYmxlU2ltdWxhdGlvbjogXCJQcm9kdWNlIGEgdGltZS1zZXJpZXMgcmVzdWx0IGZvciBvbmUgb3IgbW9yZSBzaW11bGF0aW9uKHMpIG9mIHRoZSBtb2RlbC5cIixcblxuICAgIHBhcmFtZXRlclN3ZWVwOiBcIlByb2R1Y2VkIGFuZCBjb21wYXJlIHJlc3VsdHMgZnJvbSBtb2RlbCBzaW11bGF0aW9ucyBieSB2YXJ5aW5nIHBhcmFtZXRlcnMgb3ZlciBhIHJhbmdlLlwiXG4gIH1cbn0iLCJ2YXIgQW1wZXJzYW5kSW5wdXRWaWV3ID0gcmVxdWlyZSgnYW1wZXJzYW5kLWlucHV0LXZpZXcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBBbXBlcnNhbmRJbnB1dFZpZXcuZXh0ZW5kKHtcbiAgcHJvcHM6IHtcbiAgICBuYW1lOiAnc3RyaW5nJyxcbiAgICBsYWJlbDogJ3N0cmluZycsXG4gICAgbW9kZWxLZXk6ICdzdHJpbmcnLFxuICAgIHZhbHVlVHlwZTogJ3N0cmluZycsXG4gIH0sXG4gIGV2ZW50czoge1xuICAgICdjaGFuZ2UgaW5wdXQnIDogJ2NoYW5nZUlucHV0SGFuZGxlcicsXG4gIH0sXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uIChhdHRycywgb3B0aW9ucykge1xuICAgIEFtcGVyc2FuZElucHV0Vmlldy5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uICgpIHtcbiAgICBpZih0aGlzLmxhYmVsKVxuICAgICAgdGhpcy50ZW1wbGF0ZSA9IFtcbiAgICAgICAgJzxsYWJlbD4nLFxuICAgICAgICAgICAgJzxzcGFuIGRhdGEtaG9vaz1cImxhYmVsXCI+PC9zcGFuPicsXG4gICAgICAgICAgICAnPGlucHV0IGNsYXNzPVwiZm9ybS1pbnB1dCBsYWJlbGVkXCI+JyxcbiAgICAgICAgICAgICc8ZGl2IGRhdGEtaG9vaz1cIm1lc3NhZ2UtY29udGFpbmVyXCIgY2xhc3M9XCJtZXNzYWdlIG1lc3NhZ2UtYmVsb3cgbWVzc2FnZS1lcnJvclwiPicsXG4gICAgICAgICAgICAgICAgJzxwIGRhdGEtaG9vaz1cIm1lc3NhZ2UtdGV4dFwiPjwvcD4nLFxuICAgICAgICAgICAgJzwvZGl2PicsXG4gICAgICAgICc8L2xhYmVsPidcbiAgICAgIF0uam9pbignJylcbiAgICBBbXBlcnNhbmRJbnB1dFZpZXcucHJvdG90eXBlLnJlbmRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9LFxuICBjaGFuZ2VJbnB1dEhhbmRsZXI6IGZ1bmN0aW9uIChlKSB7XG4gICAgaWYodGhpcy5tb2RlbEtleSl7XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlVHlwZSA9PT0gJ251bWJlcicgPyBOdW1iZXIoZS50YXJnZXQudmFsdWUpIDogZS50YXJnZXQudmFsdWU7XG4gICAgICB0aGlzLnBhcmVudC5tb2RlbFt0aGlzLm1vZGVsS2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfSxcbn0pOyIsInZhciBfID0gcmVxdWlyZSgndW5kZXJzY29yZScpO1xudmFyICQgPSByZXF1aXJlKCdqcXVlcnknKTtcbi8vdmFyIHNldEZhdmljb24gPSByZXF1aXJlKCdmYXZpY29uLXNldHRlcicpO1xudmFyIGFwcCA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1hcHAnKTtcbnZhciBWaWV3ID0gcmVxdWlyZSgnYW1wZXJzYW5kLXZpZXcnKTtcbnZhciBWaWV3U3dpdGNoZXIgPSByZXF1aXJlKCdhbXBlcnNhbmQtdmlldy1zd2l0Y2hlcicpO1xudmFyIGxvY2FsTGlua3MgPSByZXF1aXJlKCdsb2NhbC1saW5rcycpO1xudmFyIGRvbWlmeSA9IHJlcXVpcmUoJ2RvbWlmeScpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cbnZhciBoZWFkVGVtcGxhdGUgPSByZXF1aXJlKCchcHVnLWxvYWRlciEuLi90ZW1wbGF0ZXMvaGVhZC5wdWcnKTtcbnZhciBib2R5VGVtcGxhdGUgPSByZXF1aXJlKCchcHVnLWxvYWRlciEuLi90ZW1wbGF0ZXMvYm9keS5wdWcnKTtcblxubGV0IG9wZXJhdGlvbkluZm9Nb2RhbEh0bWwgPSAoaW5mb0tleSkgPT4ge1xuICBsZXQgZmlsZUJyb3dzZXJJbmZvID0gYFxuICAgIDxwPkluIFN0b2NoU1Mgd2UgdXNlIGN1c3RvbSBmaWxlIGV4dGVuc2lvbnMgZm9yIGEgbnVtYmVyIG9mIGZpbGVzIHdlIHdvcmsgd2l0aC4gIEhlcmUgaXMgYSBsaXN0IG9mIG91ciBleHRlbnRpb25zIHdpdGggdGhlIGZpbGVzIHRoZXkgYXJlIGFzc29jaWF0ZWQgd2l0aDo8L3A+XG4gICAgPHRhYmxlIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDJlbTtcIj5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRkIHdpZHRoPTIwMD4gU3RvY2hTUyBNb2RlbCA8L3RkPlxuICAgICAgICA8dGQ+IC5tZGwgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHI+XG4gICAgICAgIDx0ZCB3aWR0aD0yMDA+IFN0b2NoU1MgU3BhdGlhbCBNb2RlbCA8L3RkPlxuICAgICAgICA8dGQ+IC5zbWRsIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgICAgPHRyPlxuICAgICAgICA8dGQgd2lkdGg9MjAwPiBTQk1MIE1vZGVsIDwvdGQ+XG4gICAgICAgIDx0ZD4gLnNibWwgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHI+XG4gICAgICAgIDx0ZCB3aWR0aD0yMDA+IFdvcmtmbG93cyA8L3RkPlxuICAgICAgICA8dGQ+IC53a2ZsIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvdGFibGU+XG4gICAgPGJyPlxuICAgIDxwPk90aGVyIHVzZWZ1bCBmaWxlIGV4dGVuc2lvbnMgaW5jbHVkZSB0aGUgZm9sbG93aW5nOjwvcD5cbiAgICA8dGFibGUgc3R5bGU9XCJtYXJnaW4tbGVmdDogMmVtO1wiPlxuICAgICAgPHRyPlxuICAgICAgICA8dGQgd2lkdGg9MjAwPiBKdXB5dGVyIE5vdGVib29rIDwvdGQ+XG4gICAgICAgIDx0ZD4gLmlweW5iIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvdGFibGU+XG4gIGA7XG4gIGxldCBtb2RlbEluZm8gPSBgXG4gICAgTW9kZWwgSW5mb3JtYXRpb25cbiAgYDtcbiAgbGV0IHdvcmtmbG93SW5mbyA9IGBcbiAgICBXb3JrZmxvdyBJbmZvcm1hdGlvblxuICBgO1xuXG4gIGxldCBpbmZvTGlzdCA9IHtcIkZpbGUgQnJvd3NlclwiOmZpbGVCcm93c2VySW5mbywgXCJNb2RlbHNcIjptb2RlbEluZm8sIFwiV29ya2Zsb3dzXCI6d29ya2Zsb3dJbmZvfVxuICBcbiAgcmV0dXJuIGBcbiAgICA8ZGl2IGlkPVwib3BlcmF0aW9uSW5mb01vZGFsXCIgY2xhc3M9XCJtb2RhbFwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50IGluZm9cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPiBXb3JraW5nIHdpdGggJHtpbmZvS2V5fSA8L2g1PlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgPHA+ICR7aW5mb0xpc3RbaW5mb0tleV19IDwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5DbG9zZTwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgIFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFZpZXcuZXh0ZW5kKHtcbiAgdGVtcGxhdGU6IGJvZHlUZW1wbGF0ZSxcbiAgYXV0b1JlbmRlcjogdHJ1ZSxcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5saXN0ZW5UbyhhcHAsICdwYWdlJywgdGhpcy5oYW5kbGVOZXdQYWdlKTtcbiAgfSxcbiAgZXZlbnRzOiB7XG4gICAgJ2NsaWNrIFtkYXRhLWhvb2s9cmVnaXN0cmF0aW9uLWxpbmstYnV0dG9uXScgOiAnaGFuZGxlUmVnaXN0cmF0aW9uTGlua0NsaWNrJyxcbiAgICAvLydjbGljayBhW2hyZWZdJzogJ2hhbmRsZUxpbmtDbGljaydcbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7XG5cbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGRvbWlmeShoZWFkVGVtcGxhdGUoKSkpO1xuXG4gICAgdGhpcy5yZW5kZXJXaXRoVGVtcGxhdGUodGhpcyk7XG4gICAgXG4gICAgdGhpcy5wYWdlQ29udGFpbmVyID0gdGhpcy5xdWVyeUJ5SG9vaygncGFnZS1jb250YWluZXInKTtcblxuICAgIHRoaXMucGFnZVN3aXRjaGVyID0gbmV3IFZpZXdTd2l0Y2hlcih7XG4gICAgICBlbDogdGhpcy5wYWdlQ29udGFpbmVyLFxuICAgICAgc2hvdzogZnVuY3Rpb24gKG5ld1ZpZXcsIG9sZFZpZXcpIHtcbiAgICAgICAgZG9jdW1lbnQudGl0bGUgPSBfLnJlc3VsdChuZXdWaWV3LCAncGFnZVRpdGxlJykgfHwgJ1N0b2NoU1MnO1xuICAgICAgICBkb2N1bWVudC5zY3JvbGxUb3AgPSAwO1xuICAgICAgICBcbiAgICAgICAgYXBwLmN1cnJlbnRQYWdlID0gbmV3VmlldztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBob21lUGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zdGFydHNXaXRoKFwiL3VzZXJcIikgPyBcIi9odWIvc3RvY2hzc1wiIDogXCJzdG9jaHNzL21vZGVsc1wiXG4gICAgJCh0aGlzLnF1ZXJ5QnlIb29rKFwiaG9tZS1saW5rXCIpKS5wcm9wKCdocmVmJywgaG9tZVBhdGgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIFxuICBoYW5kbGVOZXdQYWdlOiBmdW5jdGlvbiAodmlldykge1xuICAgIHRoaXMucGFnZVN3aXRjaGVyLnNldCh2aWV3KTtcbiAgICAvL3RoaXMudXBkYXRlQWN0aXZlTmF2KCk7XG4gIH0sXG5cbiAgaGFuZGxlTGlua0NsaWNrOiBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBsb2NhbFBhdGggPSBsb2NhbExpbmtzLnBhdGhuYW1lKGUpO1xuXG4gICAgaWYgKGxvY2FsUGF0aCkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5uYXZpZ2F0ZShsb2NhbFBhdGgpO1xuICAgIH1cbiAgfSxcblxuICBoYW5kbGVSZWdpc3RyYXRpb25MaW5rQ2xpY2s6IGZ1bmN0aW9uICgpIHtcbiAgICAkKHRoaXMucXVlcnlCeUhvb2soXCJyZWdpc3RyYXRpb24tZm9ybVwiKSkuY29sbGFwc2UoJ3Nob3cnKTtcbiAgICAkKHRoaXMucXVlcnlCeUhvb2soXCJyZWdpc3RyYXRpb24tbGlua1wiKSkuY29sbGFwc2UoKTtcbiAgfSxcblxuICBuYXZpZ2F0ZTogZnVuY3Rpb24gKHBhZ2UpIHtcbiAgICB3aW5kb3cubG9jYXRpb24gPSB1cmw7XG4gIH1cbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIG5hbWVUZXN0czogW1xuICAgIGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICBpZiAoL15bMC05XSsvLnRlc3QodGV4dCkpIHtcbiAgICAgICAgcmV0dXJuIFwiRmllbGQgY2Fubm90IHN0YXJ0IHdpdGggYSBudW1iZXIuIFN0YXJ0IHdpdGggbGV0dGVyIG9yIHVuZGVyc2NvcmUuXCIgXG4gICAgICB9XG4gICAgfSxcbiAgICBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgaWYgKCEvXlthLXpBLVowLTlfXSskLy50ZXN0KHRleHQpKSB7XG4gICAgICAgIHJldHVybiBcIkludmFsaWQgY2hhcmFjdGVycy4gUGxlYXNlIG9ubHkgdXNlIGxldHRlcnMsIG51bWJlcnMsIG9yIHVuZGVyc2NvcmVzLlwiXG4gICAgICB9XG4gICAgfSxcbiAgICBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgaWYodGhpcy5wYXJlbnQubW9kZWwgJiYgdGhpcy5wYXJlbnQubW9kZWwuY29sbGVjdGlvbil7XG4gICAgICAgIHZhciBpc0R1cGxpY2F0ZSA9IHRoaXMucGFyZW50Lm1vZGVsLmNvbGxlY3Rpb24uc29tZShmdW5jdGlvbiAobSkgeyByZXR1cm4gbS5uYW1lID09PSB0ZXh0ICYmIHRoaXMucGFyZW50Lm1vZGVsICE9PSBtO1xuICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgaWYgKGlzRHVwbGljYXRlKSB7XG4gICAgICAgICAgcmV0dXJuIFwiTm8gZHVwbGljYXRlIGVudHJpZXMuXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIF0sXG4gIHZhbHVlVGVzdHM6IFtcbiAgICBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmIChpc05hTihOdW1iZXIodmFsdWUpKSkge1xuICAgICAgICByZXR1cm4gXCJNdXN0IGJlIGEgbnVtYmVyLlwiXG4gICAgICB9XG4gICAgfSxcbiAgICBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmIChOdW1iZXIodmFsdWUpIDwgMCkge1xuICAgICAgICByZXR1cm4gXCJNdXN0IGJlIG5vbi1uZWdhdGl2ZS5cIlxuICAgICAgfVxuICAgIH0sXG4gIF0sXG59IiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdmctd2l0aC1qcy5taW4uY3NzXCIpO1xuXG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcblxudmFyIHRyYW5zZm9ybTtcbnZhciBpbnNlcnRJbnRvO1xuXG5cblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxuXG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxub3B0aW9ucy5pbnNlcnRJbnRvID0gdW5kZWZpbmVkO1xuXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi8uLi9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1wiKShjb250ZW50LCBvcHRpb25zKTtcblxuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG5cbmlmKG1vZHVsZS5ob3QpIHtcblx0bW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdmctd2l0aC1qcy5taW4uY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N2Zy13aXRoLWpzLm1pbi5jc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iLCIvKiRBTVBFUlNBTkRfVkVSU0lPTiovXG52YXIgRXZlbnRzID0gcmVxdWlyZSgnYW1wZXJzYW5kLWV2ZW50cycpO1xudmFyIHRvQXJyYXkgPSByZXF1aXJlKCdsb2Rhc2gvdG9BcnJheScpO1xudmFyIGV4dGVuZCA9IHJlcXVpcmUoJ2xvZGFzaC9hc3NpZ24nKTtcblxuXG4vLyBpbnN0YW5jZSBhcHAsIGNhbiBiZSB1c2VkIGp1c3QgYnkgaXRzZWxmXG4vLyBvciBieSBjYWxsaW5nIGFzIGZ1bmN0aW9uIHRvIHBhc3MgbGFiZWxzXG4vLyBieSBhdHRhY2hpbmcgYWxsIGluc3RhbmNlcyB0byB0aGlzLCB3ZSBjYW5cbi8vIGF2b2lkIGdsb2JhbHNcbnZhciBhcHAgPSB7XG4gICAgZXh0ZW5kOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gdG9BcnJheShhcmd1bWVudHMpO1xuICAgICAgICBhcmdzLnVuc2hpZnQodGhpcyk7XG4gICAgICAgIHJldHVybiBleHRlbmQuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSxcbiAgICByZXNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBjbGVhciBhbGwgZXZlbnRzXG4gICAgICAgIHRoaXMub2ZmKCk7XG4gICAgICAgIC8vIHJlbW92ZSBhbGwgYnV0IG1haW4gdHdvIG1ldGhvZHNcbiAgICAgICAgZm9yICh2YXIgaXRlbSBpbiB0aGlzKSB7XG4gICAgICAgICAgICBpZiAoaXRlbSAhPT0gJ2V4dGVuZCcgJiYgaXRlbSAhPT0gJ3Jlc2V0Jykge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzW2l0ZW1dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHJlbWl4IGV2ZW50c1xuICAgICAgICBFdmVudHMuY3JlYXRlRW1pdHRlcih0aGlzKTtcbiAgICB9XG59O1xuXG5FdmVudHMuY3JlYXRlRW1pdHRlcihhcHApO1xuXG4vLyBleHBvcnQgb3VyIHNpbmdsZXRvblxubW9kdWxlLmV4cG9ydHMgPSBhcHA7XG4iLCJ2YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpO1xuXG4vLy8gRm9sbG93aW5nIGNvZGUgaXMgbGFyZ2VseSBwYXN0ZWQgZnJvbSBCYWNrYm9uZS5qc1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29ycmVjdGx5IHNldCB1cCB0aGUgcHJvdG90eXBlIGNoYWluLCBmb3Igc3ViY2xhc3Nlcy5cbi8vIFNpbWlsYXIgdG8gYGdvb2cuaW5oZXJpdHNgLCBidXQgdXNlcyBhIGhhc2ggb2YgcHJvdG90eXBlIHByb3BlcnRpZXMgYW5kXG4vLyBjbGFzcyBwcm9wZXJ0aWVzIHRvIGJlIGV4dGVuZGVkLlxudmFyIGV4dGVuZCA9IGZ1bmN0aW9uKHByb3RvUHJvcHMpIHtcbiAgICB2YXIgcGFyZW50ID0gdGhpcztcbiAgICB2YXIgY2hpbGQ7XG4gICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cbiAgICAvLyBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBuZXcgc3ViY2xhc3MgaXMgZWl0aGVyIGRlZmluZWQgYnkgeW91XG4gICAgLy8gKHRoZSBcImNvbnN0cnVjdG9yXCIgcHJvcGVydHkgaW4geW91ciBgZXh0ZW5kYCBkZWZpbml0aW9uKSwgb3IgZGVmYXVsdGVkXG4gICAgLy8gYnkgdXMgdG8gc2ltcGx5IGNhbGwgdGhlIHBhcmVudCdzIGNvbnN0cnVjdG9yLlxuICAgIGlmIChwcm90b1Byb3BzICYmIHByb3RvUHJvcHMuaGFzT3duUHJvcGVydHkoJ2NvbnN0cnVjdG9yJykpIHtcbiAgICAgICAgY2hpbGQgPSBwcm90b1Byb3BzLmNvbnN0cnVjdG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIEFkZCBzdGF0aWMgcHJvcGVydGllcyB0byB0aGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZnJvbSBwYXJlbnRcbiAgICBhc3NpZ24oY2hpbGQsIHBhcmVudCk7XG5cbiAgICAvLyBTZXQgdGhlIHByb3RvdHlwZSBjaGFpbiB0byBpbmhlcml0IGZyb20gYHBhcmVudGAsIHdpdGhvdXQgY2FsbGluZ1xuICAgIC8vIGBwYXJlbnRgJ3MgY29uc3RydWN0b3IgZnVuY3Rpb24uXG4gICAgdmFyIFN1cnJvZ2F0ZSA9IGZ1bmN0aW9uKCl7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfTtcbiAgICBTdXJyb2dhdGUucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTtcbiAgICBjaGlsZC5wcm90b3R5cGUgPSBuZXcgU3Vycm9nYXRlKCk7XG5cbiAgICAvLyBNaXggaW4gYWxsIHByb3RvdHlwZSBwcm9wZXJ0aWVzIHRvIHRoZSBzdWJjbGFzcyBpZiBzdXBwbGllZC5cbiAgICBpZiAocHJvdG9Qcm9wcykge1xuICAgICAgICBhcmdzLnVuc2hpZnQoY2hpbGQucHJvdG90eXBlKTtcbiAgICAgICAgYXNzaWduLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH1cblxuICAgIC8vIFNldCBhIGNvbnZlbmllbmNlIHByb3BlcnR5IGluIGNhc2UgdGhlIHBhcmVudCdzIHByb3RvdHlwZSBpcyBuZWVkZWRcbiAgICAvLyBsYXRlci5cbiAgICBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlO1xuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLy8gRXhwb3NlIHRoZSBleHRlbmQgZnVuY3Rpb25cbm1vZHVsZS5leHBvcnRzID0gZXh0ZW5kO1xuIiwiLyokQU1QRVJTQU5EX1ZFUlNJT04qL1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ2xvZGFzaC9hc3NpZ24nKTtcbnZhciBpbnZva2VNYXAgPSByZXF1aXJlKCdsb2Rhc2gvaW52b2tlTWFwJyk7XG52YXIgcGljayA9IHJlcXVpcmUoJ2xvZGFzaC9waWNrJyk7XG52YXIgZmluZCA9IHJlcXVpcmUoJ2xvZGFzaC9maW5kJyk7XG52YXIgZGlmZmVyZW5jZSA9IHJlcXVpcmUoJ2xvZGFzaC9kaWZmZXJlbmNlJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJ2xvZGFzaC9iaW5kJyk7XG52YXIgRXZlbnRzID0gcmVxdWlyZSgnYW1wZXJzYW5kLWV2ZW50cycpO1xudmFyIGFtcEV4dGVuZCA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1jbGFzcy1leHRlbmQnKTtcblxuLy8gb3B0aW9uc1xudmFyIG9wdGlvbnMgPSBbJ2NvbGxlY3Rpb24nLCAnZWwnLCAndmlld09wdGlvbnMnLCAndmlldycsICdlbXB0eVZpZXcnLCAnZmlsdGVyJywgJ3JldmVyc2UnLCAncGFyZW50J107XG5cblxuZnVuY3Rpb24gQ29sbGVjdGlvblZpZXcoc3BlYykge1xuICAgIGlmICghc3BlYykge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ0NvbGxlY3Rpb24gdmlldyBtaXNzaW5nIHJlcXVpcmVkIHBhcmFtZXRlcnM6IGNvbGxlY3Rpb24sIGVsJyk7XG4gICAgfVxuICAgIGlmICghc3BlYy5jb2xsZWN0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignQ29sbGVjdGlvbiB2aWV3IHJlcXVpcmVzIGEgY29sbGVjdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIXNwZWMuZWwgJiYgIXRoaXMuaW5zZXJ0U2VsZikge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ0NvbGxlY3Rpb24gdmlldyByZXF1aXJlcyBhbiBlbCcpO1xuICAgIH1cbiAgICBhc3NpZ24odGhpcywgcGljayhzcGVjLCBvcHRpb25zKSk7XG4gICAgdGhpcy52aWV3cyA9IFtdO1xuICAgIHRoaXMubGlzdGVuVG8odGhpcy5jb2xsZWN0aW9uLCAnYWRkJywgdGhpcy5fYWRkVmlld0Zvck1vZGVsKTtcbiAgICB0aGlzLmxpc3RlblRvKHRoaXMuY29sbGVjdGlvbiwgJ3JlbW92ZScsIHRoaXMuX3JlbW92ZVZpZXdGb3JNb2RlbCk7XG4gICAgdGhpcy5saXN0ZW5Ubyh0aGlzLmNvbGxlY3Rpb24sICdzb3J0JywgdGhpcy5fcmVyZW5kZXJBbGwpO1xuICAgIHRoaXMubGlzdGVuVG8odGhpcy5jb2xsZWN0aW9uLCAncmVmcmVzaCByZXNldCcsIHRoaXMuX3Jlc2V0KTtcbn1cblxuYXNzaWduKENvbGxlY3Rpb25WaWV3LnByb3RvdHlwZSwgRXZlbnRzLCB7XG4gICAgLy8gZm9yIHZpZXcgY29udHJhY3QgY29tcGxpYW5jZVxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl9yZW5kZXJBbGwoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICByZW1vdmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaW52b2tlTWFwKHRoaXMudmlld3MsICdyZW1vdmUnKTtcbiAgICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nKCk7XG4gICAgfSxcbiAgICBfZ2V0Vmlld0J5TW9kZWw6IGZ1bmN0aW9uIChtb2RlbCkge1xuICAgICAgICByZXR1cm4gZmluZCh0aGlzLnZpZXdzLCBmdW5jdGlvbiAodmlldykge1xuICAgICAgICAgICAgcmV0dXJuIG1vZGVsID09PSB2aWV3Lm1vZGVsO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIF9jcmVhdGVWaWV3Rm9yTW9kZWw6IGZ1bmN0aW9uIChtb2RlbCwgcmVuZGVyT3B0cykge1xuICAgICAgICB2YXIgZGVmYXVsdFZpZXdPcHRpb25zID0ge21vZGVsOiBtb2RlbCwgY29sbGVjdGlvbjogdGhpcy5jb2xsZWN0aW9uLCBwYXJlbnQ6IHRoaXN9O1xuICAgICAgICB2YXIgdmlldyA9IG5ldyB0aGlzLnZpZXcoYXNzaWduKGRlZmF1bHRWaWV3T3B0aW9ucywgdGhpcy52aWV3T3B0aW9ucykpO1xuICAgICAgICB0aGlzLnZpZXdzLnB1c2godmlldyk7XG4gICAgICAgIHZpZXcucmVuZGVyZWRCeVBhcmVudFZpZXcgPSB0cnVlO1xuICAgICAgICB2aWV3LnJlbmRlcihyZW5kZXJPcHRzKTtcbiAgICAgICAgcmV0dXJuIHZpZXc7XG4gICAgfSxcbiAgICBfZ2V0T3JDcmVhdGVCeU1vZGVsOiBmdW5jdGlvbiAobW9kZWwsIHJlbmRlck9wdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFZpZXdCeU1vZGVsKG1vZGVsKSB8fCB0aGlzLl9jcmVhdGVWaWV3Rm9yTW9kZWwobW9kZWwsIHJlbmRlck9wdHMpO1xuICAgIH0sXG4gICAgX2FkZFZpZXdGb3JNb2RlbDogZnVuY3Rpb24gKG1vZGVsLCBjb2xsZWN0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBtYXRjaGVzID0gdGhpcy5maWx0ZXIgPyB0aGlzLmZpbHRlcihtb2RlbCkgOiB0cnVlO1xuICAgICAgICBpZiAoIW1hdGNoZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZW5kZXJlZEVtcHR5Vmlldykge1xuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlVmlldyh0aGlzLnJlbmRlcmVkRW1wdHlWaWV3KTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnJlbmRlcmVkRW1wdHlWaWV3O1xuICAgICAgICB9XG4gICAgICAgIHZhciB2aWV3ID0gdGhpcy5fZ2V0T3JDcmVhdGVCeU1vZGVsKG1vZGVsLCB7Y29udGFpbmVyRWw6IHRoaXMuZWx9KTtcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yZXJlbmRlcikge1xuICAgICAgICAgICAgdGhpcy5faW5zZXJ0Vmlldyh2aWV3KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2luc2VydFZpZXdBdEluZGV4KHZpZXcpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBfaW5zZXJ0Vmlld0F0SW5kZXg6IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgICAgIGlmICghdmlldy5pbnNlcnRTZWxmKSB7XG4gICAgICAgICAgICB2YXIgcG9zID0gdGhpcy5jb2xsZWN0aW9uLmluZGV4T2Yodmlldy5tb2RlbCk7XG4gICAgICAgICAgICBwb3MgPSB0aGlzLnJldmVyc2UgPyBwb3MgLSAxIDogcG9zICsgMTtcblxuICAgICAgICAgICAgdmFyIG1vZGVsVG9JbnNlcnRCZWZvcmUgPSB0aGlzLmNvbGxlY3Rpb24uYXQocG9zKTtcblxuICAgICAgICAgICAgdmFyIHZpZXdUb0luc2VydEJlZm9yZSA9IHRoaXMuX2dldFZpZXdCeU1vZGVsKG1vZGVsVG9JbnNlcnRCZWZvcmUpO1xuXG4gICAgICAgICAgICAvLyBGSVggSUUgYnVnIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTm9kZS5pbnNlcnRCZWZvcmUpXG4gICAgICAgICAgICAvLyBcIkluIEludGVybmV0IEV4cGxvcmVyIGFuIHVuZGVmaW5lZCB2YWx1ZSBhcyByZWZlcmVuY2VFbGVtZW50IHdpbGwgdGhyb3cgZXJyb3JzLCB3aGlsZSBpbiByZXN0IG9mIHRoZSBtb2Rlcm4gYnJvd3NlcnMsIHRoaXMgd29ya3MgZmluZS5cIlxuICAgICAgICAgICAgaWYgKHZpZXdUb0luc2VydEJlZm9yZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZWwuaW5zZXJ0QmVmb3JlKHZpZXcuZWwsIHZpZXdUb0luc2VydEJlZm9yZSAmJiB2aWV3VG9JbnNlcnRCZWZvcmUuZWwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsLmFwcGVuZENoaWxkKHZpZXcuZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBfaW5zZXJ0VmlldzogZnVuY3Rpb24gKHZpZXcpIHtcbiAgICAgICAgaWYgKCF2aWV3Lmluc2VydFNlbGYpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJldmVyc2UgJiYgdGhpcy5lbC5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5pbnNlcnRCZWZvcmUodmlldy5lbCwgdGhpcy5lbC5maXJzdENoaWxkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5hcHBlbmRDaGlsZCh2aWV3LmVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgX3JlbW92ZVZpZXdGb3JNb2RlbDogZnVuY3Rpb24gKG1vZGVsKSB7XG4gICAgICAgIHZhciB2aWV3ID0gdGhpcy5fZ2V0Vmlld0J5TW9kZWwobW9kZWwpO1xuICAgICAgICBpZiAoIXZpZXcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnZpZXdzLmluZGV4T2Yodmlldyk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSBpdCBpZiB3ZSBmb3VuZCBpdCBjYWxsaW5nIGFuaW1hdGVSZW1vdmVcbiAgICAgICAgICAgIC8vIHRvIGdpdmUgdXNlciBvcHRpb24gb2YgZ3JhY2VmdWxseSBkZXN0cm95aW5nLlxuICAgICAgICAgICAgdmlldyA9IHRoaXMudmlld3Muc3BsaWNlKGluZGV4LCAxKVswXTtcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZVZpZXcodmlldyk7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJFbXB0eVZpZXcoKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgX3JlbW92ZVZpZXc6IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgICAgIGlmICh2aWV3LmFuaW1hdGVSZW1vdmUpIHtcbiAgICAgICAgICAgIHZpZXcuYW5pbWF0ZVJlbW92ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmlldy5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgX3JlbmRlckFsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmNvbGxlY3Rpb24uZWFjaChiaW5kKHRoaXMuX2FkZFZpZXdGb3JNb2RlbCwgdGhpcykpO1xuICAgICAgICB0aGlzLl9yZW5kZXJFbXB0eVZpZXcoKTtcbiAgICB9LFxuICAgIF9yZXJlbmRlckFsbDogZnVuY3Rpb24gKGNvbGxlY3Rpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIHRoaXMuY29sbGVjdGlvbi5lYWNoKGJpbmQoZnVuY3Rpb24gKG1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLl9hZGRWaWV3Rm9yTW9kZWwobW9kZWwsIHRoaXMsIGFzc2lnbihvcHRpb25zLCB7cmVyZW5kZXI6IHRydWV9KSk7XG4gICAgICAgIH0sIHRoaXMpKTtcbiAgICB9LFxuICAgIF9yZW5kZXJFbXB0eVZpZXc6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy52aWV3cy5sZW5ndGggPT09IDAgJiYgdGhpcy5lbXB0eVZpZXcgJiYgIXRoaXMucmVuZGVyZWRFbXB0eVZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZWRFbXB0eVZpZXcgPSBuZXcgdGhpcy5lbXB0eVZpZXcoe3BhcmVudDogdGhpc30pO1xuICAgICAgICAgICAgdGhpcy5lbC5hcHBlbmRDaGlsZCh0aGlzLnJlbmRlcmVkRW1wdHlWaWV3LnJlbmRlcigpLmVsKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgX3Jlc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBuZXdWaWV3cyA9IHRoaXMuY29sbGVjdGlvbi5tYXAoYmluZCh0aGlzLl9nZXRPckNyZWF0ZUJ5TW9kZWwsIHRoaXMpKTtcblxuICAgICAgICAvL1JlbW92ZSBleGlzdGluZyB2aWV3cyBmcm9tIHRoZSB1aVxuICAgICAgICB2YXIgdG9SZW1vdmUgPSBkaWZmZXJlbmNlKHRoaXMudmlld3MsIG5ld1ZpZXdzKTtcbiAgICAgICAgdG9SZW1vdmUuZm9yRWFjaCh0aGlzLl9yZW1vdmVWaWV3LCB0aGlzKTtcblxuICAgICAgICAvL1JlcmVuZGVyIHRoZSBmdWxsIGxpc3Qgd2l0aCB0aGUgbmV3IHZpZXdzXG4gICAgICAgIHRoaXMudmlld3MgPSBuZXdWaWV3cztcbiAgICAgICAgdGhpcy5fcmVyZW5kZXJBbGwoKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyRW1wdHlWaWV3KCk7XG4gICAgfVxufSk7XG5cbkNvbGxlY3Rpb25WaWV3LmV4dGVuZCA9IGFtcEV4dGVuZDtcblxubW9kdWxlLmV4cG9ydHMgPSBDb2xsZWN0aW9uVmlldztcbiIsInZhciBBbXBlcnNhbmRFdmVudHMgPSByZXF1aXJlKCdhbXBlcnNhbmQtZXZlbnRzJyk7XG52YXIgY2xhc3NFeHRlbmQgPSByZXF1aXJlKCdhbXBlcnNhbmQtY2xhc3MtZXh0ZW5kJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJ2xvZGFzaC9pc0FycmF5Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJ2xvZGFzaC9iaW5kJyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpO1xudmFyIHNsaWNlID0gW10uc2xpY2U7XG5cbmZ1bmN0aW9uIENvbGxlY3Rpb24obW9kZWxzLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTtcbiAgICBpZiAob3B0aW9ucy5tb2RlbCkgdGhpcy5tb2RlbCA9IG9wdGlvbnMubW9kZWw7XG4gICAgaWYgKG9wdGlvbnMuY29tcGFyYXRvcikgdGhpcy5jb21wYXJhdG9yID0gb3B0aW9ucy5jb21wYXJhdG9yO1xuICAgIGlmIChvcHRpb25zLnBhcmVudCkgdGhpcy5wYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcbiAgICBpZiAoIXRoaXMubWFpbkluZGV4KSB7XG4gICAgICAgIHZhciBpZEF0dHJpYnV0ZSA9IHRoaXMubW9kZWwgJiYgdGhpcy5tb2RlbC5wcm90b3R5cGUgJiYgdGhpcy5tb2RlbC5wcm90b3R5cGUuaWRBdHRyaWJ1dGU7XG4gICAgICAgIHRoaXMubWFpbkluZGV4ID0gaWRBdHRyaWJ1dGUgfHwgJ2lkJztcbiAgICB9XG4gICAgdGhpcy5fcmVzZXQoKTtcbiAgICB0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAobW9kZWxzKSB0aGlzLnJlc2V0KG1vZGVscywgYXNzaWduKHtzaWxlbnQ6IHRydWV9LCBvcHRpb25zKSk7XG59XG5cbmFzc2lnbihDb2xsZWN0aW9uLnByb3RvdHlwZSwgQW1wZXJzYW5kRXZlbnRzLCB7XG4gICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKCkge30sXG5cbiAgICBpc01vZGVsOiBmdW5jdGlvbiAobW9kZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwgJiYgbW9kZWwgaW5zdGFuY2VvZiB0aGlzLm1vZGVsO1xuICAgIH0sXG5cbiAgICBhZGQ6IGZ1bmN0aW9uIChtb2RlbHMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0KG1vZGVscywgYXNzaWduKHttZXJnZTogZmFsc2UsIGFkZDogdHJ1ZSwgcmVtb3ZlOiBmYWxzZX0sIG9wdGlvbnMpKTtcbiAgICB9LFxuXG4gICAgLy8gb3ZlcnJpZGFibGUgcGFyc2UgbWV0aG9kXG4gICAgcGFyc2U6IGZ1bmN0aW9uIChyZXMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuXG4gICAgLy8gb3ZlcnJpZGFibGUgc2VyaWFsaXplIG1ldGhvZFxuICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKG1vZGVsKSB7XG4gICAgICAgICAgICBpZiAobW9kZWwuc2VyaWFsaXplKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZGVsLnNlcmlhbGl6ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgb3V0ID0ge307XG4gICAgICAgICAgICAgICAgYXNzaWduKG91dCwgbW9kZWwpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBvdXQuY29sbGVjdGlvbjtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgdG9KU09OOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZSgpO1xuICAgIH0sXG5cbiAgICBzZXQ6IGZ1bmN0aW9uIChtb2RlbHMsIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGFzc2lnbih7YWRkOiB0cnVlLCByZW1vdmU6IHRydWUsIG1lcmdlOiB0cnVlfSwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChvcHRpb25zLnBhcnNlKSBtb2RlbHMgPSB0aGlzLnBhcnNlKG1vZGVscywgb3B0aW9ucyk7XG4gICAgICAgIHZhciBzaW5ndWxhciA9ICFpc0FycmF5KG1vZGVscyk7XG4gICAgICAgIG1vZGVscyA9IHNpbmd1bGFyID8gKG1vZGVscyA/IFttb2RlbHNdIDogW10pIDogbW9kZWxzLnNsaWNlKCk7XG4gICAgICAgIHZhciBpZCwgbW9kZWwsIGF0dHJzLCBleGlzdGluZywgc29ydCwgaSwgbGVuZ3RoO1xuICAgICAgICB2YXIgYXQgPSBvcHRpb25zLmF0O1xuICAgICAgICB2YXIgc29ydGFibGUgPSB0aGlzLmNvbXBhcmF0b3IgJiYgKGF0ID09IG51bGwpICYmIG9wdGlvbnMuc29ydCAhPT0gZmFsc2U7XG4gICAgICAgIHZhciBzb3J0QXR0ciA9ICgnc3RyaW5nJyA9PT0gdHlwZW9mIHRoaXMuY29tcGFyYXRvcikgPyB0aGlzLmNvbXBhcmF0b3IgOiBudWxsO1xuICAgICAgICB2YXIgdG9BZGQgPSBbXSwgdG9SZW1vdmUgPSBbXSwgbW9kZWxNYXAgPSB7fTtcbiAgICAgICAgdmFyIGFkZCA9IG9wdGlvbnMuYWRkLCBtZXJnZSA9IG9wdGlvbnMubWVyZ2UsIHJlbW92ZSA9IG9wdGlvbnMucmVtb3ZlO1xuICAgICAgICB2YXIgb3JkZXIgPSAhc29ydGFibGUgJiYgYWRkICYmIHJlbW92ZSA/IFtdIDogZmFsc2U7XG4gICAgICAgIHZhciB0YXJnZXRQcm90byA9IHRoaXMubW9kZWwgJiYgdGhpcy5tb2RlbC5wcm90b3R5cGUgfHwgT2JqZWN0LnByb3RvdHlwZTtcblxuICAgICAgICAvLyBUdXJuIGJhcmUgb2JqZWN0cyBpbnRvIG1vZGVsIHJlZmVyZW5jZXMsIGFuZCBwcmV2ZW50IGludmFsaWQgbW9kZWxzXG4gICAgICAgIC8vIGZyb20gYmVpbmcgYWRkZWQuXG4gICAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IG1vZGVscy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXR0cnMgPSBtb2RlbHNbaV0gfHwge307XG4gICAgICAgICAgICBpZiAodGhpcy5pc01vZGVsKGF0dHJzKSkge1xuICAgICAgICAgICAgICAgIGlkID0gbW9kZWwgPSBhdHRycztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0UHJvdG8uZ2VuZXJhdGVJZCkge1xuICAgICAgICAgICAgICAgIGlkID0gdGFyZ2V0UHJvdG8uZ2VuZXJhdGVJZChhdHRycyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlkID0gYXR0cnNbdGhpcy5tYWluSW5kZXhdO1xuICAgICAgICAgICAgICAgIGlmIChpZCA9PT0gdW5kZWZpbmVkICYmIHRoaXMuX2lzRGVyaXZlZEluZGV4KHRhcmdldFByb3RvKSkge1xuICAgICAgICAgICAgICAgICAgICBpZCA9IHRhcmdldFByb3RvLl9kZXJpdmVkW3RoaXMubWFpbkluZGV4XS5mbi5jYWxsKGF0dHJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIGEgZHVwbGljYXRlIGlzIGZvdW5kLCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgYWRkZWQgYW5kXG4gICAgICAgICAgICAvLyBvcHRpb25hbGx5IG1lcmdlIGl0IGludG8gdGhlIGV4aXN0aW5nIG1vZGVsLlxuICAgICAgICAgICAgaWYgKGV4aXN0aW5nID0gdGhpcy5nZXQoaWQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlbW92ZSkgbW9kZWxNYXBbZXhpc3RpbmcuY2lkIHx8IGV4aXN0aW5nW3RoaXMubWFpbkluZGV4XV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChtZXJnZSkge1xuICAgICAgICAgICAgICAgICAgICBhdHRycyA9IGF0dHJzID09PSBtb2RlbCA/IG1vZGVsLmF0dHJpYnV0ZXMgOiBhdHRycztcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucGFyc2UpIGF0dHJzID0gZXhpc3RpbmcucGFyc2UoYXR0cnMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGlzIGlzIG1vZGVsXG4gICAgICAgICAgICAgICAgICAgIGlmIChleGlzdGluZy5zZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLnNldChhdHRycywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc29ydGFibGUgJiYgIXNvcnQgJiYgZXhpc3RpbmcuaGFzQ2hhbmdlZChzb3J0QXR0cikpIHNvcnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgbm90IGp1c3QgdXBkYXRlIHRoZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ24oZXhpc3RpbmcsIGF0dHJzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtb2RlbHNbaV0gPSBleGlzdGluZztcblxuICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIG5ldywgdmFsaWQgbW9kZWwsIHB1c2ggaXQgdG8gdGhlIGB0b0FkZGAgbGlzdC5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWRkKSB7XG4gICAgICAgICAgICAgICAgbW9kZWwgPSBtb2RlbHNbaV0gPSB0aGlzLl9wcmVwYXJlTW9kZWwoYXR0cnMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGlmICghbW9kZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHRvQWRkLnB1c2gobW9kZWwpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkZFJlZmVyZW5jZShtb2RlbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIERvIG5vdCBhZGQgbXVsdGlwbGUgbW9kZWxzIHdpdGggdGhlIHNhbWUgYGlkYC5cbiAgICAgICAgICAgIG1vZGVsID0gZXhpc3RpbmcgfHwgbW9kZWw7XG4gICAgICAgICAgICBpZiAoIW1vZGVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChvcmRlciAmJiAoKG1vZGVsLmlzTmV3ICYmIG1vZGVsLmlzTmV3KCkgfHwgIW1vZGVsW3RoaXMubWFpbkluZGV4XSkgfHwgIW1vZGVsTWFwW21vZGVsLmNpZCB8fCBtb2RlbFt0aGlzLm1haW5JbmRleF1dKSkgb3JkZXIucHVzaChtb2RlbCk7XG4gICAgICAgICAgICBtb2RlbE1hcFttb2RlbFt0aGlzLm1haW5JbmRleF1dID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlbW92ZSBub25leGlzdGVudCBtb2RlbHMgaWYgYXBwcm9wcmlhdGUuXG4gICAgICAgIGlmIChyZW1vdmUpIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IHRoaXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBtb2RlbCA9IHRoaXMubW9kZWxzW2ldO1xuICAgICAgICAgICAgICAgIGlmICghbW9kZWxNYXBbbW9kZWwuY2lkIHx8IG1vZGVsW3RoaXMubWFpbkluZGV4XV0pIHRvUmVtb3ZlLnB1c2gobW9kZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRvUmVtb3ZlLmxlbmd0aCkgdGhpcy5yZW1vdmUodG9SZW1vdmUsIG9wdGlvbnMpO1xuXG4gICAgICAgICAgICAvLyBBZGQgaW5kZXhlcyBhZ2FpbiB0byBtYWtlIHN1cmUgdGhleSB3ZXJlIG5vdCByZW1vdmVkIGFib3ZlLlxuICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9BZGQubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbmRleCh0b0FkZFtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZWUgaWYgc29ydGluZyBpcyBuZWVkZWQsIHVwZGF0ZSBgbGVuZ3RoYCBhbmQgc3BsaWNlIGluIG5ldyBtb2RlbHMuXG4gICAgICAgIGlmICh0b0FkZC5sZW5ndGggfHwgKG9yZGVyICYmIG9yZGVyLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIGlmIChzb3J0YWJsZSkgc29ydCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoYXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IHRvQWRkLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWxzLnNwbGljZShhdCArIGksIDAsIHRvQWRkW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBvcmRlcmVkTW9kZWxzID0gb3JkZXIgfHwgdG9BZGQ7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gb3JkZXJlZE1vZGVscy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVscy5wdXNoKG9yZGVyZWRNb2RlbHNbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNpbGVudGx5IHNvcnQgdGhlIGNvbGxlY3Rpb24gaWYgYXBwcm9wcmlhdGUuXG4gICAgICAgIGlmIChzb3J0KSB0aGlzLnNvcnQoe3NpbGVudDogdHJ1ZX0pO1xuXG4gICAgICAgIC8vIFVubGVzcyBzaWxlbmNlZCwgaXQncyB0aW1lIHRvIGZpcmUgYWxsIGFwcHJvcHJpYXRlIGFkZC9zb3J0IGV2ZW50cy5cbiAgICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9BZGQubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBtb2RlbCA9IHRvQWRkW2ldO1xuICAgICAgICAgICAgICAgIGlmIChtb2RlbC50cmlnZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGVsLnRyaWdnZXIoJ2FkZCcsIG1vZGVsLCB0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2FkZCcsIG1vZGVsLCB0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc29ydCB8fCAob3JkZXIgJiYgb3JkZXIubGVuZ3RoKSkgdGhpcy50cmlnZ2VyKCdzb3J0JywgdGhpcywgb3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gdGhlIGFkZGVkIChvciBtZXJnZWQpIG1vZGVsIChvciBtb2RlbHMpLlxuICAgICAgICByZXR1cm4gc2luZ3VsYXIgPyBtb2RlbHNbMF0gOiBtb2RlbHM7XG4gICAgfSxcblxuICAgIGdldDogZnVuY3Rpb24gKHF1ZXJ5LCBpbmRleE5hbWUpIHtcbiAgICAgICAgaWYgKHF1ZXJ5ID09IG51bGwpIHJldHVybjtcblxuICAgICAgICB2YXIgY29sbGVjdGlvbk1haW5JbmRleCA9IHRoaXMubWFpbkluZGV4O1xuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9pbmRleGVzW2luZGV4TmFtZSB8fCBjb2xsZWN0aW9uTWFpbkluZGV4XTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgIGluZGV4ICYmIChcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhbcXVlcnldIHx8IChcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5W2NvbGxlY3Rpb25NYWluSW5kZXhdICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4W3F1ZXJ5W2NvbGxlY3Rpb25NYWluSW5kZXhdXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB8fFxuICAgICAgICAgICAgdGhpcy5faW5kZXhlcy5jaWRbcXVlcnldIHx8XG4gICAgICAgICAgICB0aGlzLl9pbmRleGVzLmNpZFtxdWVyeS5jaWRdXG4gICAgICAgICk7XG4gICAgfSxcblxuICAgIC8vIEdldCB0aGUgbW9kZWwgYXQgdGhlIGdpdmVuIGluZGV4LlxuICAgIGF0OiBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWxzW2luZGV4XTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAobW9kZWxzLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBzaW5ndWxhciA9ICFpc0FycmF5KG1vZGVscyk7XG4gICAgICAgIHZhciBpLCBsZW5ndGgsIG1vZGVsLCBpbmRleDtcblxuICAgICAgICBtb2RlbHMgPSBzaW5ndWxhciA/IFttb2RlbHNdIDogc2xpY2UuY2FsbChtb2RlbHMpO1xuICAgICAgICBvcHRpb25zIHx8IChvcHRpb25zID0ge30pO1xuICAgICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBtb2RlbHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG1vZGVsID0gbW9kZWxzW2ldID0gdGhpcy5nZXQobW9kZWxzW2ldKTtcbiAgICAgICAgICAgIGlmICghbW9kZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGhpcy5fZGVJbmRleChtb2RlbCk7XG4gICAgICAgICAgICBpbmRleCA9IHRoaXMubW9kZWxzLmluZGV4T2YobW9kZWwpO1xuICAgICAgICAgICAgdGhpcy5tb2RlbHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgaWYgKG1vZGVsLnRyaWdnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWwudHJpZ2dlcigncmVtb3ZlJywgbW9kZWwsIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcigncmVtb3ZlJywgbW9kZWwsIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZVJlZmVyZW5jZShtb2RlbCwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNpbmd1bGFyID8gbW9kZWxzWzBdIDogbW9kZWxzO1xuICAgIH0sXG5cbiAgICAvLyBXaGVuIHlvdSBoYXZlIG1vcmUgaXRlbXMgdGhhbiB5b3Ugd2FudCB0byBhZGQgb3IgcmVtb3ZlIGluZGl2aWR1YWxseSxcbiAgICAvLyB5b3UgY2FuIHJlc2V0IHRoZSBlbnRpcmUgc2V0IHdpdGggYSBuZXcgbGlzdCBvZiBtb2RlbHMsIHdpdGhvdXQgZmlyaW5nXG4gICAgLy8gYW55IGdyYW51bGFyIGBhZGRgIG9yIGByZW1vdmVgIGV2ZW50cy4gRmlyZXMgYHJlc2V0YCB3aGVuIGZpbmlzaGVkLlxuICAgIC8vIFVzZWZ1bCBmb3IgYnVsayBvcGVyYXRpb25zIGFuZCBvcHRpbWl6YXRpb25zLlxuICAgIHJlc2V0OiBmdW5jdGlvbiAobW9kZWxzLCBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSB0aGlzLm1vZGVscy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlUmVmZXJlbmNlKHRoaXMubW9kZWxzW2ldLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLnByZXZpb3VzTW9kZWxzID0gdGhpcy5tb2RlbHM7XG4gICAgICAgIHRoaXMuX3Jlc2V0KCk7XG4gICAgICAgIG1vZGVscyA9IHRoaXMuYWRkKG1vZGVscywgYXNzaWduKHtzaWxlbnQ6IHRydWV9LCBvcHRpb25zKSk7XG4gICAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHRoaXMudHJpZ2dlcigncmVzZXQnLCB0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIG1vZGVscztcbiAgICB9LFxuXG4gICAgc29ydDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICBpZiAoIXRoaXMuY29tcGFyYXRvcikgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc29ydCBhIHNldCB3aXRob3V0IGEgY29tcGFyYXRvcicpO1xuICAgICAgICBvcHRpb25zIHx8IChvcHRpb25zID0ge30pO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb21wYXJhdG9yID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5tb2RlbHMuc29ydChmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgICAgICBpZiAobGVmdC5nZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGxlZnQuZ2V0KHNlbGYuY29tcGFyYXRvcik7XG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gcmlnaHQuZ2V0KHNlbGYuY29tcGFyYXRvcik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGxlZnRbc2VsZi5jb21wYXJhdG9yXTtcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSByaWdodFtzZWxmLmNvbXBhcmF0b3JdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobGVmdCA+IHJpZ2h0IHx8IGxlZnQgPT09IHZvaWQgMCkgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgaWYgKGxlZnQgPCByaWdodCB8fCByaWdodCA9PT0gdm9pZCAwKSByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbXBhcmF0b3IubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVscy5zb3J0KGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgIGxlZnQgPSBzZWxmLmNvbXBhcmF0b3IobGVmdCk7XG4gICAgICAgICAgICAgICAgcmlnaHQgPSBzZWxmLmNvbXBhcmF0b3IocmlnaHQpO1xuICAgICAgICAgICAgICAgIGlmIChsZWZ0ID4gcmlnaHQgfHwgbGVmdCA9PT0gdm9pZCAwKSByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICBpZiAobGVmdCA8IHJpZ2h0IHx8IHJpZ2h0ID09PSB2b2lkIDApIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tb2RlbHMuc29ydChiaW5kKHRoaXMuY29tcGFyYXRvcix0aGlzKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB0aGlzLnRyaWdnZXIoJ3NvcnQnLCB0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8vIFByaXZhdGUgbWV0aG9kIHRvIHJlc2V0IGFsbCBpbnRlcm5hbCBzdGF0ZS4gQ2FsbGVkIHdoZW4gdGhlIGNvbGxlY3Rpb25cbiAgICAvLyBpcyBmaXJzdCBpbml0aWFsaXplZCBvciByZXNldC5cbiAgICBfcmVzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGxpc3QgPSBzbGljZS5jYWxsKHRoaXMuaW5kZXhlcyB8fCBbXSk7XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgbGlzdC5wdXNoKHRoaXMubWFpbkluZGV4KTtcbiAgICAgICAgbGlzdC5wdXNoKCdjaWQnKTtcbiAgICAgICAgdmFyIGwgPSBsaXN0Lmxlbmd0aDtcbiAgICAgICAgdGhpcy5tb2RlbHMgPSBbXTtcbiAgICAgICAgdGhpcy5faW5kZXhlcyA9IHt9O1xuICAgICAgICBmb3IgKDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5faW5kZXhlc1tsaXN0W2ldXSA9IHt9O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIF9wcmVwYXJlTW9kZWw6IGZ1bmN0aW9uIChhdHRycywgb3B0aW9ucykge1xuICAgICAgICAvLyBpZiB3ZSBoYXZlbid0IGRlZmluZWQgYSBjb25zdHJ1Y3Rvciwgc2tpcCB0aGlzXG4gICAgICAgIGlmICghdGhpcy5tb2RlbCkgcmV0dXJuIGF0dHJzO1xuXG4gICAgICAgIGlmICh0aGlzLmlzTW9kZWwoYXR0cnMpKSB7XG4gICAgICAgICAgICBpZiAoIWF0dHJzLmNvbGxlY3Rpb24pIGF0dHJzLmNvbGxlY3Rpb24gPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIGF0dHJzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgPyBhc3NpZ24oe30sIG9wdGlvbnMpIDoge307XG4gICAgICAgICAgICBvcHRpb25zLmNvbGxlY3Rpb24gPSB0aGlzO1xuICAgICAgICAgICAgdmFyIG1vZGVsID0gbmV3IHRoaXMubW9kZWwoYXR0cnMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKCFtb2RlbC52YWxpZGF0aW9uRXJyb3IpIHJldHVybiBtb2RlbDtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcignaW52YWxpZCcsIHRoaXMsIG1vZGVsLnZhbGlkYXRpb25FcnJvciwgb3B0aW9ucyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX2RlSW5kZXg6IGZ1bmN0aW9uIChtb2RlbCwgYXR0cmlidXRlLCB2YWx1ZSkge1xuICAgICAgICB2YXIgaW5kZXhWYWw7XG4gICAgICAgIGlmIChhdHRyaWJ1dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHVuZGVmaW5lZCA9PT0gdGhpcy5faW5kZXhlc1thdHRyaWJ1dGVdKSB0aHJvdyBuZXcgRXJyb3IoJ0dpdmVuIGF0dHJpYnV0ZSBpcyBub3QgYW4gaW5kZXgnKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9pbmRleGVzW2F0dHJpYnV0ZV1bdmFsdWVdO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdCBhIHNwZWNpZmljIGF0dHJpYnV0ZVxuICAgICAgICBmb3IgKHZhciBpbmRleEF0dHIgaW4gdGhpcy5faW5kZXhlcykge1xuICAgICAgICAgICAgaW5kZXhWYWwgPSBtb2RlbC5oYXNPd25Qcm9wZXJ0eShpbmRleEF0dHIpID8gbW9kZWxbaW5kZXhBdHRyXSA6IChtb2RlbC5nZXQgJiYgbW9kZWwuZ2V0KGluZGV4QXR0cikpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2luZGV4ZXNbaW5kZXhBdHRyXVtpbmRleFZhbF07XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX2luZGV4OiBmdW5jdGlvbiAobW9kZWwsIGF0dHJpYnV0ZSkge1xuICAgICAgICB2YXIgaW5kZXhWYWw7XG4gICAgICAgIGlmIChhdHRyaWJ1dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHVuZGVmaW5lZCA9PT0gdGhpcy5faW5kZXhlc1thdHRyaWJ1dGVdKSB0aHJvdyBuZXcgRXJyb3IoJ0dpdmVuIGF0dHJpYnV0ZSBpcyBub3QgYW4gaW5kZXgnKTtcbiAgICAgICAgICAgIGluZGV4VmFsID0gbW9kZWxbYXR0cmlidXRlXSB8fCAobW9kZWwuZ2V0ICYmIG1vZGVsLmdldChhdHRyaWJ1dGUpKTtcbiAgICAgICAgICAgIGlmIChpbmRleFZhbCkgdGhpcy5faW5kZXhlc1thdHRyaWJ1dGVdW2luZGV4VmFsXSA9IG1vZGVsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdCBhIHNwZWNpZmljIGF0dHJpYnV0ZVxuICAgICAgICBmb3IgKHZhciBpbmRleEF0dHIgaW4gdGhpcy5faW5kZXhlcykge1xuICAgICAgICAgICAgaW5kZXhWYWwgPSBtb2RlbC5oYXNPd25Qcm9wZXJ0eShpbmRleEF0dHIpID8gbW9kZWxbaW5kZXhBdHRyXSA6IChtb2RlbC5nZXQgJiYgbW9kZWwuZ2V0KGluZGV4QXR0cikpO1xuICAgICAgICAgICAgaWYgKGluZGV4VmFsICE9IG51bGwpIHRoaXMuX2luZGV4ZXNbaW5kZXhBdHRyXVtpbmRleFZhbF0gPSBtb2RlbDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBfaXNEZXJpdmVkSW5kZXg6IGZ1bmN0aW9uKHByb3RvKSB7XG4gICAgICAgIGlmICghcHJvdG8gfHwgdHlwZW9mIHByb3RvLl9kZXJpdmVkICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm90by5fZGVyaXZlZCkuaW5kZXhPZih0aGlzLm1haW5JbmRleCkgPj0gMDtcbiAgICB9LFxuXG4gICAgLy8gSW50ZXJuYWwgbWV0aG9kIHRvIGNyZWF0ZSBhIG1vZGVsJ3MgdGllcyB0byBhIGNvbGxlY3Rpb24uXG4gICAgX2FkZFJlZmVyZW5jZTogZnVuY3Rpb24gKG1vZGVsLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX2luZGV4KG1vZGVsKTtcbiAgICAgICAgaWYgKCFtb2RlbC5jb2xsZWN0aW9uKSBtb2RlbC5jb2xsZWN0aW9uID0gdGhpcztcbiAgICAgICAgaWYgKG1vZGVsLm9uKSBtb2RlbC5vbignYWxsJywgdGhpcy5fb25Nb2RlbEV2ZW50LCB0aGlzKTtcbiAgICB9LFxuXG4gICAgICAgIC8vIEludGVybmFsIG1ldGhvZCB0byBzZXZlciBhIG1vZGVsJ3MgdGllcyB0byBhIGNvbGxlY3Rpb24uXG4gICAgX3JlbW92ZVJlZmVyZW5jZTogZnVuY3Rpb24gKG1vZGVsLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICh0aGlzID09PSBtb2RlbC5jb2xsZWN0aW9uKSBkZWxldGUgbW9kZWwuY29sbGVjdGlvbjtcbiAgICAgICAgdGhpcy5fZGVJbmRleChtb2RlbCk7XG4gICAgICAgIGlmIChtb2RlbC5vZmYpIG1vZGVsLm9mZignYWxsJywgdGhpcy5fb25Nb2RlbEV2ZW50LCB0aGlzKTtcbiAgICB9LFxuXG4gICAgX29uTW9kZWxFdmVudDogZnVuY3Rpb24gKGV2ZW50LCBtb2RlbCwgY29sbGVjdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB2YXIgZXZlbnROYW1lID0gZXZlbnQuc3BsaXQoJzonKVswXTtcbiAgICAgICAgdmFyIGF0dHJpYnV0ZSA9IGV2ZW50LnNwbGl0KCc6JylbMV07XG5cbiAgICAgICAgaWYgKChldmVudE5hbWUgPT09ICdhZGQnIHx8IGV2ZW50TmFtZSA9PT0gJ3JlbW92ZScpICYmIGNvbGxlY3Rpb24gIT09IHRoaXMpIHJldHVybjtcbiAgICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2Rlc3Ryb3knKSB0aGlzLnJlbW92ZShtb2RlbCwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChtb2RlbCAmJiBldmVudE5hbWUgPT09ICdjaGFuZ2UnICYmIGF0dHJpYnV0ZSAmJiB0aGlzLl9pbmRleGVzW2F0dHJpYnV0ZV0pIHtcbiAgICAgICAgICAgIHRoaXMuX2RlSW5kZXgobW9kZWwsIGF0dHJpYnV0ZSwgbW9kZWwucHJldmlvdXNBdHRyaWJ1dGVzKClbYXR0cmlidXRlXSk7XG4gICAgICAgICAgICB0aGlzLl9pbmRleChtb2RlbCwgYXR0cmlidXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRyaWdnZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sbGVjdGlvbi5wcm90b3R5cGUsIHtcbiAgICBsZW5ndGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlbHMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBpc0NvbGxlY3Rpb246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG52YXIgYXJyYXlNZXRob2RzID0gW1xuICAgICdpbmRleE9mJyxcbiAgICAnbGFzdEluZGV4T2YnLFxuICAgICdldmVyeScsXG4gICAgJ3NvbWUnLFxuICAgICdmb3JFYWNoJyxcbiAgICAnbWFwJyxcbiAgICAnZmlsdGVyJyxcbiAgICAncmVkdWNlJyxcbiAgICAncmVkdWNlUmlnaHQnXG5dO1xuXG5hcnJheU1ldGhvZHMuZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgQ29sbGVjdGlvbi5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWxzW21ldGhvZF0uYXBwbHkodGhpcy5tb2RlbHMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbn0pO1xuXG4vLyBhbGlhcyBlYWNoL2ZvckVhY2ggZm9yIG1heGltdW0gY29tcGF0aWJpbGl0eVxuQ29sbGVjdGlvbi5wcm90b3R5cGUuZWFjaCA9IENvbGxlY3Rpb24ucHJvdG90eXBlLmZvckVhY2g7XG5cbkNvbGxlY3Rpb24uZXh0ZW5kID0gY2xhc3NFeHRlbmQ7XG5cbm1vZHVsZS5leHBvcnRzID0gQ29sbGVjdGlvbjtcbiIsIi8qJEFNUEVSU0FORF9WRVJTSU9OKi9cbnZhciBTdG9yZSA9IHJlcXVpcmUoJ2tleS10cmVlLXN0b3JlJyk7XG52YXIgZG9tID0gcmVxdWlyZSgnYW1wZXJzYW5kLWRvbScpO1xudmFyIG1hdGNoZXNTZWxlY3RvciA9IHJlcXVpcmUoJ21hdGNoZXMtc2VsZWN0b3InKTtcbnZhciBwYXJ0aWFsID0gcmVxdWlyZSgnbG9kYXNoL3BhcnRpYWwnKTtcbnZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcblxuZnVuY3Rpb24gZ2V0TWF0Y2hlcyhlbCwgc2VsZWN0b3IsIGZpcnN0T25seSkge1xuICAgIGlmIChzZWxlY3RvciA9PT0gJycpIHJldHVybiBbZWxdO1xuICAgIHZhciBtYXRjaGVzID0gW107XG4gICAgaWYgKCFzZWxlY3RvcikgcmV0dXJuIG1hdGNoZXM7XG4gICAgaWYgKGZpcnN0T25seSkge1xuICAgICAgICBpZiAobWF0Y2hlc1NlbGVjdG9yKGVsLCBzZWxlY3RvcikpIHJldHVybiBbZWxdO1xuICAgICAgICByZXR1cm4gZWwucXVlcnlTZWxlY3RvcihzZWxlY3RvcikgPyBbZWwucXVlcnlTZWxlY3RvcihzZWxlY3RvcildIDogW107XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG1hdGNoZXNTZWxlY3RvcihlbCwgc2VsZWN0b3IpKSBtYXRjaGVzLnB1c2goZWwpO1xuICAgICAgICByZXR1cm4gbWF0Y2hlcy5jb25jYXQoc2xpY2UuY2FsbChlbC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZXMoZWwsIGF0dHJzKSB7XG4gICAgZm9yICh2YXIgbmFtZSBpbiBhdHRycykge1xuICAgICAgICBkb20uc2V0QXR0cmlidXRlKGVsLCBuYW1lLCBhdHRyc1tuYW1lXSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVBdHRyaWJ1dGVzKGVsLCBhdHRycykge1xuICAgIGZvciAodmFyIG5hbWUgaW4gYXR0cnMpIHtcbiAgICAgICAgZG9tLnJlbW92ZUF0dHJpYnV0ZShlbCwgbmFtZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBtYWtlQXJyYXkodmFsKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsKSA/IHZhbCA6IFt2YWxdO1xufVxuXG5mdW5jdGlvbiBzd2l0Y2hIYW5kbGVyKGJpbmRpbmcsIGVsLCB2YWx1ZSkge1xuICAgIC8vIHRoZSBlbGVtZW50IHNlbGVjdG9yIHRvIHNob3dcbiAgICB2YXIgc2hvd1ZhbHVlID0gYmluZGluZy5jYXNlc1t2YWx1ZV07XG5cbiAgICB2YXIgZmlyc3RNYXRjaE9ubHkgPSBiaW5kaW5nLmZpcnN0TWF0Y2hPbmx5O1xuXG4gICAgLy8gaGlkZSBhbGwgdGhlIG90aGVyIGVsZW1lbnRzIHdpdGggYSBkaWZmZXJlbnQgdmFsdWVcbiAgICBmb3IgKHZhciBpdGVtIGluIGJpbmRpbmcuY2FzZXMpIHtcbiAgICAgICAgdmFyIGN1clZhbHVlID0gYmluZGluZy5jYXNlc1tpdGVtXTtcblxuICAgICAgICBpZiAodmFsdWUgIT09IGl0ZW0gJiYgY3VyVmFsdWUgIT09IHNob3dWYWx1ZSkge1xuICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgY3VyVmFsdWUsIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIGRvbS5oaWRlKG1hdGNoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldE1hdGNoZXMoZWwsIHNob3dWYWx1ZSwgZmlyc3RNYXRjaE9ubHkpLmZvckVhY2goZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgIGRvbS5zaG93KG1hdGNoKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0b3IoYmluZGluZykge1xuICAgIGlmICh0eXBlb2YgYmluZGluZy5zZWxlY3RvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGJpbmRpbmcuc2VsZWN0b3I7XG4gICAgfSBlbHNlIGlmIChiaW5kaW5nLmhvb2spIHtcbiAgICAgICAgcmV0dXJuICdbZGF0YS1ob29rfj1cIicgKyBiaW5kaW5nLmhvb2sgKyAnXCJdJztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRCaW5kaW5nRnVuYyhiaW5kaW5nLCBjb250ZXh0KSB7XG4gICAgdmFyIHR5cGUgPSBiaW5kaW5nLnR5cGUgfHwgJ3RleHQnO1xuICAgIHZhciBpc0N1c3RvbUJpbmRpbmcgPSB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJztcbiAgICB2YXIgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihiaW5kaW5nKTtcbiAgICB2YXIgZmlyc3RNYXRjaE9ubHkgPSBiaW5kaW5nLmZpcnN0TWF0Y2hPbmx5O1xuICAgIHZhciB5ZXMgPSBiaW5kaW5nLnllcztcbiAgICB2YXIgbm8gPSBiaW5kaW5nLm5vO1xuICAgIHZhciBoYXNZZXNObyA9ICEhKHllcyB8fCBubyk7XG5cbiAgICAvLyBzdG9yYWdlIHZhcmlhYmxlIGZvciBwcmV2aW91cyBpZiByZWxldmFudFxuICAgIHZhciBwcmV2aW91c1ZhbHVlO1xuXG4gICAgaWYgKGlzQ3VzdG9tQmluZGluZykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVsLCB2YWx1ZSkge1xuICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgc2VsZWN0b3IsIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHR5cGUuY2FsbChjb250ZXh0LCBtYXRjaCwgdmFsdWUsIHByZXZpb3VzVmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcmV2aW91c1ZhbHVlID0gdmFsdWU7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlbCwgdmFsdWUpIHtcbiAgICAgICAgICAgIGdldE1hdGNoZXMoZWwsIHNlbGVjdG9yLCBmaXJzdE1hdGNoT25seSkuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBkb20udGV4dChtYXRjaCwgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnY2xhc3MnKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWwsIHZhbHVlKSB7XG4gICAgICAgICAgICBnZXRNYXRjaGVzKGVsLCBzZWxlY3RvciwgZmlyc3RNYXRjaE9ubHkpLmZvckVhY2goZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgZG9tLnN3aXRjaENsYXNzKG1hdGNoLCBwcmV2aW91c1ZhbHVlLCB2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHByZXZpb3VzVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdhdHRyaWJ1dGUnKSB7XG4gICAgICAgIGlmICghYmluZGluZy5uYW1lKSB0aHJvdyBFcnJvcignYXR0cmlidXRlIGJpbmRpbmdzIG11c3QgaGF2ZSBhIFwibmFtZVwiJyk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWwsIHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgbmFtZXMgPSBtYWtlQXJyYXkoYmluZGluZy5uYW1lKTtcbiAgICAgICAgICAgIGdldE1hdGNoZXMoZWwsIHNlbGVjdG9yLCBmaXJzdE1hdGNoT25seSkuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBuYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbS5zZXRBdHRyaWJ1dGUobWF0Y2gsIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcHJldmlvdXNWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3ZhbHVlJykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVsLCB2YWx1ZSkge1xuICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgc2VsZWN0b3IsIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIGlmICghdmFsdWUgJiYgdmFsdWUgIT09IDApIHZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgLy8gb25seSBhcHBseSBiaW5kaW5ncyBpZiBlbGVtZW50IGlzIG5vdCBjdXJyZW50bHkgZm9jdXNlZFxuICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBtYXRjaCkgbWF0Y2gudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcHJldmlvdXNWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2Jvb2xlYW5DbGFzcycpIHtcbiAgICAgICAgLy8gaWYgdGhlcmUncyBhIGBub2AgY2FzZSB0aGlzIGlzIGFjdHVhbGx5IGEgc3dpdGNoXG4gICAgICAgIGlmIChoYXNZZXNObykge1xuICAgICAgICAgICAgeWVzID0gbWFrZUFycmF5KHllcyB8fCAnJyk7XG4gICAgICAgICAgICBubyA9IG1ha2VBcnJheShubyB8fCAnJyk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVsLCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBwcmV2Q2xhc3MgPSB2YWx1ZSA/IG5vIDogeWVzO1xuICAgICAgICAgICAgICAgIHZhciBuZXdDbGFzcyA9IHZhbHVlID8geWVzIDogbm87XG4gICAgICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgc2VsZWN0b3IsIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBwcmV2Q2xhc3MuZm9yRWFjaChmdW5jdGlvbiAocGMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbS5yZW1vdmVDbGFzcyhtYXRjaCwgcGMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q2xhc3MuZm9yRWFjaChmdW5jdGlvbiAobmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbS5hZGRDbGFzcyhtYXRjaCwgbmMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVsLCB2YWx1ZSwga2V5TmFtZSkge1xuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gbWFrZUFycmF5KGJpbmRpbmcubmFtZSB8fCBrZXlOYW1lKTtcbiAgICAgICAgICAgICAgICB2YXIgaW52ZXJ0ID0gKGJpbmRpbmcuaW52ZXJ0IHx8IGZhbHNlKTtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IChpbnZlcnQgPyAodmFsdWUgPyBmYWxzZSA6IHRydWUpIDogdmFsdWUpO1xuICAgICAgICAgICAgICAgIGdldE1hdGNoZXMoZWwsIHNlbGVjdG9yLCBmaXJzdE1hdGNoT25seSkuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbVt2YWx1ZSA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnXShtYXRjaCwgY2xhc3NOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnYm9vbGVhbkF0dHJpYnV0ZScpIHtcbiAgICAgICAgLy8gaWYgdGhlcmUgYXJlIGB5ZXNgIGFuZCBgbm9gIHNlbGVjdG9ycywgdGhpcyBzd2FwcyBiZXR3ZWVuIHRoZW1cbiAgICAgICAgaWYgKGhhc1llc05vKSB7XG4gICAgICAgICAgICB5ZXMgPSBtYWtlQXJyYXkoeWVzIHx8ICcnKTtcbiAgICAgICAgICAgIG5vID0gbWFrZUFycmF5KG5vIHx8ICcnKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWwsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHByZXZBdHRyaWJ1dGUgPSB2YWx1ZSA/IG5vIDogeWVzO1xuICAgICAgICAgICAgICAgIHZhciBuZXdBdHRyaWJ1dGUgPSB2YWx1ZSA/IHllcyA6IG5vO1xuICAgICAgICAgICAgICAgIGdldE1hdGNoZXMoZWwsIHNlbGVjdG9yLCBmaXJzdE1hdGNoT25seSkuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldkF0dHJpYnV0ZS5mb3JFYWNoKGZ1bmN0aW9uIChwYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tLnJlbW92ZUF0dHJpYnV0ZShtYXRjaCwgcGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgbmV3QXR0cmlidXRlLmZvckVhY2goZnVuY3Rpb24gKG5hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb20uYWRkQXR0cmlidXRlKG1hdGNoLCBuYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWwsIHZhbHVlLCBrZXlOYW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBtYWtlQXJyYXkoYmluZGluZy5uYW1lIHx8IGtleU5hbWUpO1xuICAgICAgICAgICAgICAgIHZhciBpbnZlcnQgPSAoYmluZGluZy5pbnZlcnQgfHwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gKGludmVydCA/ICh2YWx1ZSA/IGZhbHNlIDogdHJ1ZSkgOiB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgc2VsZWN0b3IsIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBuYW1lLmZvckVhY2goZnVuY3Rpb24gKGF0dHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbVt2YWx1ZSA/ICdhZGRBdHRyaWJ1dGUnIDogJ3JlbW92ZUF0dHJpYnV0ZSddKG1hdGNoLCBhdHRyKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAndG9nZ2xlJykge1xuICAgICAgICB2YXIgbW9kZSA9IChiaW5kaW5nLm1vZGUgfHwgJ2Rpc3BsYXknKTtcbiAgICAgICAgdmFyIGludmVydCA9IChiaW5kaW5nLmludmVydCB8fCBmYWxzZSk7XG4gICAgICAgIC8vIHRoaXMgZG9lc24ndCByZXF1aXJlIGEgc2VsZWN0b3Igc2luY2Ugd2UgY2FuIHBhc3MgeWVzL25vIHNlbGVjdG9yc1xuICAgICAgICBpZiAoaGFzWWVzTm8pIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWwsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgeWVzLCBmaXJzdE1hdGNoT25seSkuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9tW3ZhbHVlID8gJ3Nob3cnIDogJ2hpZGUnXShtYXRjaCwgbW9kZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgbm8sIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBkb21bdmFsdWUgPyAnaGlkZScgOiAnc2hvdyddKG1hdGNoLCBtb2RlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVsLCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gKGludmVydCA/ICh2YWx1ZSA/IGZhbHNlIDogdHJ1ZSkgOiB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgc2VsZWN0b3IsIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBkb21bdmFsdWUgPyAnc2hvdycgOiAnaGlkZSddKG1hdGNoLCBtb2RlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzd2l0Y2gnKSB7XG4gICAgICAgIGlmICghYmluZGluZy5jYXNlcykgdGhyb3cgRXJyb3IoJ3N3aXRjaCBiaW5kaW5ncyBtdXN0IGhhdmUgXCJjYXNlc1wiJyk7XG4gICAgICAgIHJldHVybiBwYXJ0aWFsKHN3aXRjaEhhbmRsZXIsIGJpbmRpbmcpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2lubmVySFRNTCcpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlbCwgdmFsdWUpIHtcbiAgICAgICAgICAgIGdldE1hdGNoZXMoZWwsIHNlbGVjdG9yLCBmaXJzdE1hdGNoT25seSkuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBkb20uaHRtbChtYXRjaCwgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnc3dpdGNoQ2xhc3MnKSB7XG4gICAgICAgIGlmICghYmluZGluZy5jYXNlcykgdGhyb3cgRXJyb3IoJ3N3aXRjaENsYXNzIGJpbmRpbmdzIG11c3QgaGF2ZSBcImNhc2VzXCInKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlbCwgdmFsdWUsIGtleU5hbWUpIHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gbWFrZUFycmF5KGJpbmRpbmcubmFtZSB8fCBrZXlOYW1lKTtcbiAgICAgICAgICAgIGZvciAodmFyIGl0ZW0gaW4gYmluZGluZy5jYXNlcykge1xuICAgICAgICAgICAgICAgIGdldE1hdGNoZXMoZWwsIGJpbmRpbmcuY2FzZXNbaXRlbV0sIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBuYW1lLmZvckVhY2goZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9tW3ZhbHVlID09PSBpdGVtID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyddKG1hdGNoLCBjbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzd2l0Y2hBdHRyaWJ1dGUnKSB7XG4gICAgICAgIGlmICghYmluZGluZy5jYXNlcykgdGhyb3cgRXJyb3IoJ3N3aXRjaEF0dHJpYnV0ZSBiaW5kaW5ncyBtdXN0IGhhdmUgXCJjYXNlc1wiJyk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWwsIHZhbHVlLCBrZXlOYW1lKSB7XG4gICAgICAgICAgICBnZXRNYXRjaGVzKGVsLCBzZWxlY3RvciwgZmlyc3RNYXRjaE9ubHkpLmZvckVhY2goZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQXR0cmlidXRlcyhtYXRjaCwgcHJldmlvdXNWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlIGluIGJpbmRpbmcuY2FzZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJzID0gYmluZGluZy5jYXNlc1t2YWx1ZV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXR0cnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRycyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnNbYmluZGluZy5uYW1lIHx8IGtleU5hbWVdID0gYmluZGluZy5jYXNlc1t2YWx1ZV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2V0QXR0cmlidXRlcyhtYXRjaCwgYXR0cnMpO1xuXG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsdWUgPSBhdHRycztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIHN1Y2ggYmluZGluZyB0eXBlOiAnICsgdHlwZSk7XG4gICAgfVxufVxuXG4vLyByZXR1cm5zIGEga2V5LXRyZWUtc3RvcmUgb2YgZnVuY3Rpb25zXG4vLyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIGFueSBlbGVtZW50L21vZGVsLlxuXG4vLyBhbGwgcmVzdWx0aW5nIGZ1bmN0aW9ucyBzaG91bGQgYmUgY2FsbGVkXG4vLyBsaWtlIGZ1bmMoZWwsIHZhbHVlLCBsYXN0S2V5TmFtZSlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpbmRpbmdzLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0b3JlID0gbmV3IFN0b3JlKCk7XG4gICAgdmFyIGtleSwgY3VycmVudDtcblxuICAgIGZvciAoa2V5IGluIGJpbmRpbmdzKSB7XG4gICAgICAgIGN1cnJlbnQgPSBiaW5kaW5nc1trZXldO1xuICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBzdG9yZS5hZGQoa2V5LCBnZXRCaW5kaW5nRnVuYyh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiBjdXJyZW50XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5mb3JFYWNoKSB7XG4gICAgICAgICAgICBjdXJyZW50LmZvckVhY2goZnVuY3Rpb24gKGJpbmRpbmcpIHtcbiAgICAgICAgICAgICAgICBzdG9yZS5hZGQoa2V5LCBnZXRCaW5kaW5nRnVuYyhiaW5kaW5nLCBjb250ZXh0KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0b3JlLmFkZChrZXksIGdldEJpbmRpbmdGdW5jKGN1cnJlbnQsIGNvbnRleHQpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdG9yZTtcbn07XG4iLCIvKiRBTVBFUlNBTkRfVkVSU0lPTiovXG52YXIgZG9tID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgdGV4dDogZnVuY3Rpb24gKGVsLCB2YWwpIHtcbiAgICAgICAgZWwudGV4dENvbnRlbnQgPSBnZXRTdHJpbmcodmFsKTtcbiAgICB9LFxuICAgIC8vIG9wdGltaXplIGlmIHdlIGhhdmUgY2xhc3NMaXN0XG4gICAgYWRkQ2xhc3M6IGZ1bmN0aW9uIChlbCwgY2xzKSB7XG4gICAgICAgIGNscyA9IGdldFN0cmluZyhjbHMpO1xuICAgICAgICBpZiAoIWNscykgcmV0dXJuO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjbHMpKSB7XG4gICAgICAgICAgICBjbHMuZm9yRWFjaChmdW5jdGlvbihjKSB7XG4gICAgICAgICAgICAgICAgZG9tLmFkZENsYXNzKGVsLCBjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGVsLmNsYXNzTGlzdCkge1xuICAgICAgICAgICAgZWwuY2xhc3NMaXN0LmFkZChjbHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNDbGFzcyhlbCwgY2xzKSkge1xuICAgICAgICAgICAgICAgIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgZWwuY2xhc3NMaXN0LmFkZChjbHMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsLmNsYXNzTmFtZSArPSAnICcgKyBjbHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICByZW1vdmVDbGFzczogZnVuY3Rpb24gKGVsLCBjbHMpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2xzKSkge1xuICAgICAgICAgICAgY2xzLmZvckVhY2goZnVuY3Rpb24oYykge1xuICAgICAgICAgICAgICAgIGRvbS5yZW1vdmVDbGFzcyhlbCwgYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICAgICAgICAgIGNscyA9IGdldFN0cmluZyhjbHMpO1xuICAgICAgICAgICAgaWYgKGNscykgZWwuY2xhc3NMaXN0LnJlbW92ZShjbHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbWF5IGJlIGZhc3RlciB0byBub3QgZWRpdCB1bmxlc3Mgd2Uga25vdyB3ZSBoYXZlIGl0P1xuICAgICAgICAgICAgZWwuY2xhc3NOYW1lID0gZWwuY2xhc3NOYW1lLnJlcGxhY2UobmV3IFJlZ0V4cCgnKF58XFxcXGIpJyArIGNscy5zcGxpdCgnICcpLmpvaW4oJ3wnKSArICcoXFxcXGJ8JCknLCAnZ2knKSwgJyAnKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaGFzQ2xhc3M6IGhhc0NsYXNzLFxuICAgIHN3aXRjaENsYXNzOiBmdW5jdGlvbiAoZWwsIHByZXZDbHMsIG5ld0Nscykge1xuICAgICAgICBpZiAocHJldkNscykgdGhpcy5yZW1vdmVDbGFzcyhlbCwgcHJldkNscyk7XG4gICAgICAgIHRoaXMuYWRkQ2xhc3MoZWwsIG5ld0Nscyk7XG4gICAgfSxcbiAgICAvLyBtYWtlcyBzdXJlIGF0dHJpYnV0ZSAod2l0aCBubyBjb250ZW50KSBpcyBhZGRlZFxuICAgIC8vIGlmIGV4aXN0cyBpdCB3aWxsIGJlIGNsZWFyZWQgb2YgY29udGVudFxuICAgIGFkZEF0dHJpYnV0ZTogZnVuY3Rpb24gKGVsLCBhdHRyKSB7XG4gICAgICAgIC8vIHNldHRpbmcgdG8gZW1wdHkgc3RyaW5nIGRvZXMgc2FtZVxuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoYXR0ciwgJycpO1xuICAgICAgICAvLyBTb21lIGJyb3dzZXJzIHdvbid0IHVwZGF0ZSBVSSBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzIHVubGVzcyB5b3VcbiAgICAgICAgLy8gc2V0IGl0IGRpcmVjdGx5LiBTbyB3ZSBkbyBib3RoXG4gICAgICAgIGlmIChoYXNCb29sZWFuUHJvcGVydHkoZWwsIGF0dHIpKSBlbFthdHRyXSA9IHRydWU7XG4gICAgfSxcbiAgICAvLyBjb21wbGV0ZWx5IHJlbW92ZXMgYXR0cmlidXRlXG4gICAgcmVtb3ZlQXR0cmlidXRlOiBmdW5jdGlvbiAoZWwsIGF0dHIpIHtcbiAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGF0dHIpO1xuICAgICAgICBpZiAoaGFzQm9vbGVhblByb3BlcnR5KGVsLCBhdHRyKSkgZWxbYXR0cl0gPSBmYWxzZTtcbiAgICB9LFxuICAgIC8vIHNldHMgYXR0cmlidXRlIHRvIHN0cmluZyB2YWx1ZSBnaXZlbiwgY2xlYXJpbmcgYW55IGN1cnJlbnQgdmFsdWVcbiAgICBzZXRBdHRyaWJ1dGU6IGZ1bmN0aW9uIChlbCwgYXR0ciwgdmFsdWUpIHtcbiAgICAgICAgZWwuc2V0QXR0cmlidXRlKGF0dHIsIGdldFN0cmluZyh2YWx1ZSkpO1xuICAgIH0sXG4gICAgZ2V0QXR0cmlidXRlOiBmdW5jdGlvbiAoZWwsIGF0dHIpIHtcbiAgICAgICAgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShhdHRyKTtcbiAgICB9LFxuICAgIGhhc0F0dHJpYnV0ZTogZnVuY3Rpb24gKGVsLCBhdHRyKSB7XG4gICAgICAgIHJldHVybiBlbC5oYXNBdHRyaWJ1dGUoYXR0cik7XG4gICAgfSxcbiAgICBoaWRlOiBmdW5jdGlvbiAoZWwsIG1vZGUpIHtcbiAgICAgICAgaWYgKCFtb2RlKSBtb2RlID0gJ2Rpc3BsYXknO1xuICAgICAgICBpZiAoIWlzSGlkZGVuKGVsKSkge1xuICAgICAgICAgICAgc3RvcmVEaXNwbGF5U3R5bGUoZWwsIG1vZGUpO1xuICAgICAgICAgICAgaGlkZShlbCwgbW9kZSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8vIHNob3cgZWxlbWVudFxuICAgIHNob3c6IGZ1bmN0aW9uIChlbCwgbW9kZSkge1xuICAgICAgICBpZiAoIW1vZGUpIG1vZGUgPSAnZGlzcGxheSc7XG4gICAgICAgIHNob3coZWwsIG1vZGUpO1xuICAgIH0sXG4gICAgdG9nZ2xlOiBmdW5jdGlvbiAoZWwsIG1vZGUpIHtcbiAgICAgICAgaWYgKCFpc0hpZGRlbihlbCkpIHtcbiAgICAgICAgICAgIGRvbS5oaWRlKGVsLCBtb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvbS5zaG93KGVsLCBtb2RlKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaHRtbDogZnVuY3Rpb24gKGVsLCBjb250ZW50KSB7XG4gICAgICAgIGVsLmlubmVySFRNTCA9IGNvbnRlbnQ7XG4gICAgfVxufTtcblxuLy8gaGVscGVyc1xuZnVuY3Rpb24gZ2V0U3RyaW5nKHZhbCkge1xuICAgIGlmICghdmFsICYmIHZhbCAhPT0gMCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGhhc0NsYXNzKGVsLCBjbHMpIHtcbiAgICBpZiAoZWwuY2xhc3NMaXN0KSB7XG4gICAgICAgIHJldHVybiBlbC5jbGFzc0xpc3QuY29udGFpbnMoY2xzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCgnKF58ICknICsgY2xzICsgJyggfCQpJywgJ2dpJykudGVzdChlbC5jbGFzc05hbWUpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaGFzQm9vbGVhblByb3BlcnR5KGVsLCBwcm9wKSB7XG4gICAgdmFyIHZhbCA9IGVsW3Byb3BdO1xuICAgIHJldHVybiBwcm9wIGluIGVsICYmICh2YWwgPT09IHRydWUgfHwgdmFsID09PSBmYWxzZSk7XG59XG5cbmZ1bmN0aW9uIGlzSGlkZGVuIChlbCkge1xuICAgIHJldHVybiBkb20uZ2V0QXR0cmlidXRlKGVsLCAnZGF0YS1hbmRkb20taGlkZGVuJykgPT09ICd0cnVlJztcbn1cblxuZnVuY3Rpb24gc3RvcmVEaXNwbGF5U3R5bGUgKGVsLCBtb2RlKSB7XG4gICAgZG9tLnNldEF0dHJpYnV0ZShlbCwgJ2RhdGEtYW5kZG9tLScgKyBtb2RlLCBlbC5zdHlsZVttb2RlXSk7XG59XG5cbmZ1bmN0aW9uIHNob3cgKGVsLCBtb2RlKSB7XG4gICAgZWwuc3R5bGVbbW9kZV0gPSBkb20uZ2V0QXR0cmlidXRlKGVsLCAnZGF0YS1hbmRkb20tJyArIG1vZGUpIHx8ICcnO1xuICAgIGRvbS5yZW1vdmVBdHRyaWJ1dGUoZWwsICdkYXRhLWFuZGRvbS1oaWRkZW4nKTtcbn1cblxuZnVuY3Rpb24gaGlkZSAoZWwsIG1vZGUpIHtcbiAgICBkb20uc2V0QXR0cmlidXRlKGVsLCAnZGF0YS1hbmRkb20taGlkZGVuJywgJ3RydWUnKTtcbiAgICBlbC5zdHlsZVttb2RlXSA9IChtb2RlID09PSAndmlzaWJpbGl0eScgPyAnaGlkZGVuJyA6ICdub25lJyk7XG59XG4iLCIvKiRBTVBFUlNBTkRfVkVSU0lPTiovXG52YXIgcnVuT25jZSA9IHJlcXVpcmUoJ2xvZGFzaC9vbmNlJyk7XG52YXIga2V5cyA9IHJlcXVpcmUoJ2xvZGFzaC9rZXlzJyk7XG52YXIgaXNFbXB0eSA9IHJlcXVpcmUoJ2xvZGFzaC9pc0VtcHR5Jyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpO1xudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL2xpYnMvdXRpbHMnKTtcblxudmFyIEV2ZW50cyA9IHtcbiAgICAvLyBCaW5kIGFuIGV2ZW50IHRvIGEgYGNhbGxiYWNrYCBmdW5jdGlvbi4gUGFzc2luZyBgXCJhbGxcImAgd2lsbCBiaW5kXG4gICAgLy8gdGhlIGNhbGxiYWNrIHRvIGFsbCBldmVudHMgZmlyZWQuXG4gICAgb246IGZ1bmN0aW9uIChuYW1lLCBjYWxsYmFjaywgY29udGV4dCkge1xuICAgICAgICBpZiAoIXV0aWxzLmV2ZW50c0FwaSh0aGlzLCAnb24nLCBuYW1lLCBbY2FsbGJhY2ssIGNvbnRleHRdKSB8fCAhY2FsbGJhY2spIHJldHVybiB0aGlzO1xuICAgICAgICB0aGlzLl9ldmVudHMgfHwgKHRoaXMuX2V2ZW50cyA9IHt9KTtcbiAgICAgICAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50c1tuYW1lXSB8fCAodGhpcy5fZXZlbnRzW25hbWVdID0gW10pO1xuICAgICAgICBldmVudHMucHVzaCh7Y2FsbGJhY2s6IGNhbGxiYWNrLCBjb250ZXh0OiBjb250ZXh0LCBjdHg6IGNvbnRleHQgfHwgdGhpc30pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLy8gQmluZCBhbiBldmVudCB0byBvbmx5IGJlIHRyaWdnZXJlZCBhIHNpbmdsZSB0aW1lLiBBZnRlciB0aGUgZmlyc3QgdGltZVxuICAgIC8vIHRoZSBjYWxsYmFjayBpcyBpbnZva2VkLCBpdCB3aWxsIGJlIHJlbW92ZWQuXG4gICAgb25jZTogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gICAgICAgIGlmICghdXRpbHMuZXZlbnRzQXBpKHRoaXMsICdvbmNlJywgbmFtZSwgW2NhbGxiYWNrLCBjb250ZXh0XSkgfHwgIWNhbGxiYWNrKSByZXR1cm4gdGhpcztcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB2YXIgb25jZSA9IHJ1bk9uY2UoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2VsZi5vZmYobmFtZSwgb25jZSk7XG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9KTtcbiAgICAgICAgb25jZS5fY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgcmV0dXJuIHRoaXMub24obmFtZSwgb25jZSwgY29udGV4dCk7XG4gICAgfSxcblxuICAgIC8vIFJlbW92ZSBvbmUgb3IgbWFueSBjYWxsYmFja3MuIElmIGBjb250ZXh0YCBpcyBudWxsLCByZW1vdmVzIGFsbFxuICAgIC8vIGNhbGxiYWNrcyB3aXRoIHRoYXQgZnVuY3Rpb24uIElmIGBjYWxsYmFja2AgaXMgbnVsbCwgcmVtb3ZlcyBhbGxcbiAgICAvLyBjYWxsYmFja3MgZm9yIHRoZSBldmVudC4gSWYgYG5hbWVgIGlzIG51bGwsIHJlbW92ZXMgYWxsIGJvdW5kXG4gICAgLy8gY2FsbGJhY2tzIGZvciBhbGwgZXZlbnRzLlxuICAgIG9mZjogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gICAgICAgIHZhciByZXRhaW4sIGV2LCBldmVudHMsIG5hbWVzLCBpLCBsLCBqLCBrO1xuICAgICAgICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdXRpbHMuZXZlbnRzQXBpKHRoaXMsICdvZmYnLCBuYW1lLCBbY2FsbGJhY2ssIGNvbnRleHRdKSkgcmV0dXJuIHRoaXM7XG4gICAgICAgIGlmICghbmFtZSAmJiAhY2FsbGJhY2sgJiYgIWNvbnRleHQpIHtcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IHZvaWQgMDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIG5hbWVzID0gbmFtZSA/IFtuYW1lXSA6IGtleXModGhpcy5fZXZlbnRzKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IG5hbWVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgbmFtZSA9IG5hbWVzW2ldO1xuICAgICAgICAgICAgaWYgKGV2ZW50cyA9IHRoaXMuX2V2ZW50c1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1tuYW1lXSA9IHJldGFpbiA9IFtdO1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayB8fCBjb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDAsIGsgPSBldmVudHMubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldiA9IGV2ZW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY2FsbGJhY2sgJiYgY2FsbGJhY2sgIT09IGV2LmNhbGxiYWNrICYmIGNhbGxiYWNrICE9PSBldi5jYWxsYmFjay5fY2FsbGJhY2spIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb250ZXh0ICYmIGNvbnRleHQgIT09IGV2LmNvbnRleHQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0YWluLnB1c2goZXYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghcmV0YWluLmxlbmd0aCkgZGVsZXRlIHRoaXMuX2V2ZW50c1tuYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyBUcmlnZ2VyIG9uZSBvciBtYW55IGV2ZW50cywgZmlyaW5nIGFsbCBib3VuZCBjYWxsYmFja3MuIENhbGxiYWNrcyBhcmVcbiAgICAvLyBwYXNzZWQgdGhlIHNhbWUgYXJndW1lbnRzIGFzIGB0cmlnZ2VyYCBpcywgYXBhcnQgZnJvbSB0aGUgZXZlbnQgbmFtZVxuICAgIC8vICh1bmxlc3MgeW91J3JlIGxpc3RlbmluZyBvbiBgXCJhbGxcImAsIHdoaWNoIHdpbGwgY2F1c2UgeW91ciBjYWxsYmFjayB0b1xuICAgIC8vIHJlY2VpdmUgdGhlIHRydWUgbmFtZSBvZiB0aGUgZXZlbnQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50KS5cbiAgICB0cmlnZ2VyOiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBpZiAoIXRoaXMuX2V2ZW50cykgcmV0dXJuIHRoaXM7XG4gICAgICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICBpZiAoIXV0aWxzLmV2ZW50c0FwaSh0aGlzLCAndHJpZ2dlcicsIG5hbWUsIGFyZ3MpKSByZXR1cm4gdGhpcztcbiAgICAgICAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50c1tuYW1lXTtcbiAgICAgICAgdmFyIGFsbEV2ZW50cyA9IHRoaXMuX2V2ZW50cy5hbGw7XG4gICAgICAgIGlmIChldmVudHMpIHV0aWxzLnRyaWdnZXJFdmVudHMoZXZlbnRzLCBhcmdzKTtcbiAgICAgICAgaWYgKGFsbEV2ZW50cykgdXRpbHMudHJpZ2dlckV2ZW50cyhhbGxFdmVudHMsIGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyBUZWxsIHRoaXMgb2JqZWN0IHRvIHN0b3AgbGlzdGVuaW5nIHRvIGVpdGhlciBzcGVjaWZpYyBldmVudHMgLi4uIG9yXG4gICAgLy8gdG8gZXZlcnkgb2JqZWN0IGl0J3MgY3VycmVudGx5IGxpc3RlbmluZyB0by5cbiAgICBzdG9wTGlzdGVuaW5nOiBmdW5jdGlvbiAob2JqLCBuYW1lLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgbGlzdGVuaW5nVG8gPSB0aGlzLl9saXN0ZW5pbmdUbztcbiAgICAgICAgaWYgKCFsaXN0ZW5pbmdUbykgcmV0dXJuIHRoaXM7XG4gICAgICAgIHZhciByZW1vdmUgPSAhbmFtZSAmJiAhY2FsbGJhY2s7XG4gICAgICAgIGlmICghY2FsbGJhY2sgJiYgdHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSBjYWxsYmFjayA9IHRoaXM7XG4gICAgICAgIGlmIChvYmopIChsaXN0ZW5pbmdUbyA9IHt9KVtvYmouX2xpc3RlbklkXSA9IG9iajtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICBmb3JFYWNoKGxpc3RlbmluZ1RvLCBmdW5jdGlvbiAoaXRlbSwgaWQpIHtcbiAgICAgICAgICAgIGl0ZW0ub2ZmKG5hbWUsIGNhbGxiYWNrLCBzZWxmKTtcbiAgICAgICAgICAgIGlmIChyZW1vdmUgfHwgaXNFbXB0eShpdGVtLl9ldmVudHMpKSBkZWxldGUgc2VsZi5fbGlzdGVuaW5nVG9baWRdO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8vIGV4dGVuZCBhbiBvYmplY3Qgd2l0aCBldmVudCBjYXBhYmlsaXRpZXMgaWYgcGFzc2VkXG4gICAgLy8gb3IganVzdCByZXR1cm4gYSBuZXcgb25lLlxuICAgIGNyZWF0ZUVtaXR0ZXI6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIGFzc2lnbihvYmogfHwge30sIEV2ZW50cyk7XG4gICAgfSxcblxuICAgIGxpc3RlblRvOiB1dGlscy5jcmVhdGVMaXN0ZW5NZXRob2QoJ29uJyksXG5cbiAgICBsaXN0ZW5Ub09uY2U6IHV0aWxzLmNyZWF0ZUxpc3Rlbk1ldGhvZCgnb25jZScpLFxuXG4gICAgbGlzdGVuVG9BbmRSdW46IGZ1bmN0aW9uIChvYmosIG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMubGlzdGVuVG8uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgaWYgKCFjYWxsYmFjayAmJiB0eXBlb2YgbmFtZSA9PT0gJ29iamVjdCcpIGNhbGxiYWNrID0gdGhpcztcbiAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn07XG5cbi8vIHNldHVwIGFsaWFzZXNcbkV2ZW50cy5iaW5kID0gRXZlbnRzLm9uO1xuRXZlbnRzLnVuYmluZCA9IEV2ZW50cy5vZmY7XG5FdmVudHMucmVtb3ZlTGlzdGVuZXIgPSBFdmVudHMub2ZmO1xuRXZlbnRzLnJlbW92ZUFsbExpc3RlbmVycyA9IEV2ZW50cy5vZmY7XG5FdmVudHMuZW1pdCA9IEV2ZW50cy50cmlnZ2VyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50cztcbiIsInZhciB1bmlxdWVJZCA9IHJlcXVpcmUoJ2xvZGFzaC91bmlxdWVJZCcpO1xudmFyIGV2ZW50U3BsaXR0ZXIgPSAvXFxzKy87XG5cbi8vIEEgZGlmZmljdWx0LXRvLWJlbGlldmUsIGJ1dCBvcHRpbWl6ZWQgaW50ZXJuYWwgZGlzcGF0Y2ggZnVuY3Rpb24gZm9yXG4vLyB0cmlnZ2VyaW5nIGV2ZW50cy4gVHJpZXMgdG8ga2VlcCB0aGUgdXN1YWwgY2FzZXMgc3BlZWR5LlxuZXhwb3J0cy50cmlnZ2VyRXZlbnRzID0gZnVuY3Rpb24gdHJpZ2dlckV2ZW50cyhldmVudHMsIGFyZ3MpIHtcbiAgICB2YXIgZXY7XG4gICAgdmFyIGkgPSAtMTtcbiAgICB2YXIgbCA9IGV2ZW50cy5sZW5ndGg7XG4gICAgdmFyIGExID0gYXJnc1swXTtcbiAgICB2YXIgYTIgPSBhcmdzWzFdO1xuICAgIHZhciBhMyA9IGFyZ3NbMl07XG4gICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHdoaWxlICgrK2kgPCBsKSAoZXYgPSBldmVudHNbaV0pLmNhbGxiYWNrLmNhbGwoZXYuY3R4KTsgcmV0dXJuO1xuICAgICAgICBjYXNlIDE6IHdoaWxlICgrK2kgPCBsKSAoZXYgPSBldmVudHNbaV0pLmNhbGxiYWNrLmNhbGwoZXYuY3R4LCBhMSk7IHJldHVybjtcbiAgICAgICAgY2FzZSAyOiB3aGlsZSAoKytpIDwgbCkgKGV2ID0gZXZlbnRzW2ldKS5jYWxsYmFjay5jYWxsKGV2LmN0eCwgYTEsIGEyKTsgcmV0dXJuO1xuICAgICAgICBjYXNlIDM6IHdoaWxlICgrK2kgPCBsKSAoZXYgPSBldmVudHNbaV0pLmNhbGxiYWNrLmNhbGwoZXYuY3R4LCBhMSwgYTIsIGEzKTsgcmV0dXJuO1xuICAgICAgICBkZWZhdWx0OiB3aGlsZSAoKytpIDwgbCkgKGV2ID0gZXZlbnRzW2ldKS5jYWxsYmFjay5hcHBseShldi5jdHgsIGFyZ3MpOyByZXR1cm47XG4gICAgfVxufTtcblxuLy8gSW1wbGVtZW50IGZhbmN5IGZlYXR1cmVzIG9mIHRoZSBFdmVudHMgQVBJIHN1Y2ggYXMgbXVsdGlwbGUgZXZlbnRcbi8vIG5hbWVzIGBcImNoYW5nZSBibHVyXCJgIGFuZCBqUXVlcnktc3R5bGUgZXZlbnQgbWFwcyBge2NoYW5nZTogYWN0aW9ufWBcbi8vIGluIHRlcm1zIG9mIHRoZSBleGlzdGluZyBBUEkuXG5leHBvcnRzLmV2ZW50c0FwaSA9IGZ1bmN0aW9uIGV2ZW50c0FwaShvYmosIGFjdGlvbiwgbmFtZSwgcmVzdCkge1xuICAgIGlmICghbmFtZSkgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBIYW5kbGUgZXZlbnQgbWFwcy5cbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBuYW1lKSB7XG4gICAgICAgICAgICBvYmpbYWN0aW9uXS5hcHBseShvYmosIFtrZXksIG5hbWVba2V5XV0uY29uY2F0KHJlc3QpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHNwYWNlIHNlcGFyYXRlZCBldmVudCBuYW1lcy5cbiAgICBpZiAoZXZlbnRTcGxpdHRlci50ZXN0KG5hbWUpKSB7XG4gICAgICAgIHZhciBuYW1lcyA9IG5hbWUuc3BsaXQoZXZlbnRTcGxpdHRlcik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gbmFtZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICBvYmpbYWN0aW9uXS5hcHBseShvYmosIFtuYW1lc1tpXV0uY29uY2F0KHJlc3QpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vLyBJbnZlcnNpb24tb2YtY29udHJvbCB2ZXJzaW9ucyBvZiBgb25gIGFuZCBgb25jZWAuIFRlbGwgKnRoaXMqIG9iamVjdCB0b1xuLy8gbGlzdGVuIHRvIGFuIGV2ZW50IGluIGFub3RoZXIgb2JqZWN0IC4uLiBrZWVwaW5nIHRyYWNrIG9mIHdoYXQgaXQnc1xuLy8gbGlzdGVuaW5nIHRvLlxuZXhwb3J0cy5jcmVhdGVMaXN0ZW5NZXRob2QgPSBmdW5jdGlvbiBjcmVhdGVMaXN0ZW5NZXRob2QoaW1wbGVtZW50YXRpb24pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbGlzdGVuTWV0aG9kKG9iaiwgbmFtZSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFvYmopIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHJ5aW5nIHRvIGxpc3RlblRvIGV2ZW50OiBcXCcnICsgbmFtZSArICdcXCcgYnV0IHRoZSB0YXJnZXQgb2JqZWN0IGlzIHVuZGVmaW5lZCcpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBsaXN0ZW5pbmdUbyA9IHRoaXMuX2xpc3RlbmluZ1RvIHx8ICh0aGlzLl9saXN0ZW5pbmdUbyA9IHt9KTtcbiAgICAgICAgdmFyIGlkID0gb2JqLl9saXN0ZW5JZCB8fCAob2JqLl9saXN0ZW5JZCA9IHVuaXF1ZUlkKCdsJykpO1xuICAgICAgICBsaXN0ZW5pbmdUb1tpZF0gPSBvYmo7XG4gICAgICAgIGlmICghY2FsbGJhY2sgJiYgdHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSBjYWxsYmFjayA9IHRoaXM7XG4gICAgICAgIGlmICh0eXBlb2Ygb2JqW2ltcGxlbWVudGF0aW9uXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcnlpbmcgdG8gbGlzdGVuVG8gZXZlbnQ6IFxcJycgKyBuYW1lICsgJ1xcJyBvbiBvYmplY3Q6ICcgKyBvYmoudG9TdHJpbmcoKSArICcgYnV0IGl0IGRvZXMgbm90IGhhdmUgYW4gXFwnb25cXCcgbWV0aG9kIHNvIGlzIHVuYmluZGFibGUnKTtcbiAgICAgICAgfVxuICAgICAgICBvYmpbaW1wbGVtZW50YXRpb25dKG5hbWUsIGNhbGxiYWNrLCB0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbn07XG4iLCIvKiRBTVBFUlNBTkRfVkVSU0lPTiovXG52YXIgVmlldyA9IHJlcXVpcmUoJ2FtcGVyc2FuZC12aWV3Jyk7XG52YXIgZG9tID0gcmVxdWlyZSgnYW1wZXJzYW5kLWRvbScpO1xudmFyIG1hdGNoZXNTZWxlY3RvciA9IHJlcXVpcmUoJ21hdGNoZXMtc2VsZWN0b3InKTtcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG5mdW5jdGlvbiBnZXRNYXRjaGVzKGVsLCBzZWxlY3Rvcikge1xuICAgIGlmIChzZWxlY3RvciA9PT0gJycpIHJldHVybiBbZWxdO1xuICAgIHZhciBtYXRjaGVzID0gW107XG4gICAgaWYgKG1hdGNoZXNTZWxlY3RvcihlbCwgc2VsZWN0b3IpKSBtYXRjaGVzLnB1c2goZWwpO1xuICAgIHJldHVybiBtYXRjaGVzLmNvbmNhdChzbGljZS5jYWxsKGVsLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVmlldy5leHRlbmQoe1xuICAgIHRlbXBsYXRlOiBbXG4gICAgICAgICc8bGFiZWw+JyxcbiAgICAgICAgICAgICc8c3BhbiBkYXRhLWhvb2s9XCJsYWJlbFwiPjwvc3Bhbj4nLFxuICAgICAgICAgICAgJzxpbnB1dCBjbGFzcz1cImZvcm0taW5wdXRcIj4nLFxuICAgICAgICAgICAgJzxkaXYgZGF0YS1ob29rPVwibWVzc2FnZS1jb250YWluZXJcIiBjbGFzcz1cIm1lc3NhZ2UgbWVzc2FnZS1iZWxvdyBtZXNzYWdlLWVycm9yXCI+JyxcbiAgICAgICAgICAgICAgICAnPHAgZGF0YS1ob29rPVwibWVzc2FnZS10ZXh0XCI+PC9wPicsXG4gICAgICAgICAgICAnPC9kaXY+JyxcbiAgICAgICAgJzwvbGFiZWw+J1xuICAgIF0uam9pbignJyksXG4gICAgYmluZGluZ3M6IHtcbiAgICAgICAgJ25hbWUnOiB7XG4gICAgICAgICAgICB0eXBlOiAnYXR0cmlidXRlJyxcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnaW5wdXQsIHRleHRhcmVhJyxcbiAgICAgICAgICAgIG5hbWU6ICduYW1lJ1xuICAgICAgICB9LFxuICAgICAgICAndGFiaW5kZXgnOiB7XG4gICAgICAgICAgICB0eXBlOiAnYXR0cmlidXRlJyxcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnaW5wdXQsIHRleHRhcmVhJyxcbiAgICAgICAgICAgIG5hbWU6ICd0YWJpbmRleCdcbiAgICAgICAgfSxcbiAgICAgICAgJ2xhYmVsJzogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhvb2s6ICdsYWJlbCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3RvZ2dsZScsXG4gICAgICAgICAgICAgICAgaG9vazogJ2xhYmVsJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnbWVzc2FnZSc6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGhvb2s6ICdtZXNzYWdlLXRleHQnXG4gICAgICAgIH0sXG4gICAgICAgICdzaG93TWVzc2FnZSc6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0b2dnbGUnLFxuICAgICAgICAgICAgaG9vazogJ21lc3NhZ2UtY29udGFpbmVyJ1xuICAgICAgICB9LFxuICAgICAgICAncGxhY2Vob2xkZXInOiB7XG4gICAgICAgICAgICB0eXBlOiAnYXR0cmlidXRlJyxcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnaW5wdXQsIHRleHRhcmVhJyxcbiAgICAgICAgICAgIG5hbWU6ICdwbGFjZWhvbGRlcidcbiAgICAgICAgfSxcbiAgICAgICAgJ3JlYWRvbmx5Jzoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW5BdHRyaWJ1dGUnLFxuICAgICAgICAgICAgbmFtZTogJ3JlYWRvbmx5JyxcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnaW5wdXQsIHRleHRhcmVhJ1xuICAgICAgICB9LFxuICAgICAgICAnYXV0b2ZvY3VzJzoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW5BdHRyaWJ1dGUnLFxuICAgICAgICAgICAgbmFtZTogJ2F1dG9mb2N1cycsXG4gICAgICAgICAgICBzZWxlY3RvcjogJ2lucHV0LCB0ZXh0YXJlYSdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKHNwZWMpIHtcbiAgICAgICAgc3BlYyB8fCAoc3BlYyA9IHt9KTtcbiAgICAgICAgdGhpcy50ZXN0cyA9IHRoaXMudGVzdHMgfHwgc3BlYy50ZXN0cyB8fCBbXTtcbiAgICAgICAgdGhpcy5vbignY2hhbmdlOnR5cGUnLCB0aGlzLmhhbmRsZVR5cGVDaGFuZ2UsIHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2VkID0gdGhpcy5oYW5kbGVJbnB1dENoYW5nZWQuYmluZCh0aGlzKTtcbiAgICAgICAgdmFyIHZhbHVlID0gIXNwZWMudmFsdWUgJiYgc3BlYy52YWx1ZSAhPT0gMCA/ICcnIDogc3BlYy52YWx1ZTtcbiAgICAgICAgdGhpcy5zdGFydGluZ1ZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLm9uKCdjaGFuZ2U6dmFsaWQgY2hhbmdlOnZhbHVlJywgdGhpcy5yZXBvcnRUb1BhcmVudCwgdGhpcyk7XG4gICAgICAgIHRoaXMub24oJ2NoYW5nZTp2YWxpZGl0eUNsYXNzJywgdGhpcy52YWxpZGl0eUNsYXNzQ2hhbmdlZCwgdGhpcyk7XG4gICAgICAgIGlmIChzcGVjLmF1dG9SZW5kZXIpIHRoaXMuYXV0b1JlbmRlciA9IHNwZWMuYXV0b1JlbmRlcjtcbiAgICAgICAgaWYgKHNwZWMudGVtcGxhdGUpIHRoaXMudGVtcGxhdGUgPSBzcGVjLnRlbXBsYXRlO1xuICAgICAgICBpZiAoc3BlYy5iZWZvcmVTdWJtaXQpIHRoaXMuYmVmb3JlU3VibWl0ID0gc3BlYy5iZWZvcmVTdWJtaXQ7XG4gICAgfSxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJXaXRoVGVtcGxhdGUoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMucXVlcnkoJ2lucHV0JykgfHwgdGhpcy5xdWVyeSgndGV4dGFyZWEnKTtcbiAgICAgICAgLy8gc3dpdGNoZXMgb3V0IGlucHV0IGZvciB0ZXh0YXJlYSBpZiB0aGF0J3Mgd2hhdCB3ZSB3YW50XG4gICAgICAgIHRoaXMuaGFuZGxlVHlwZUNoYW5nZSgpO1xuICAgICAgICB0aGlzLmluaXRJbnB1dEJpbmRpbmdzKCk7XG4gICAgICAgIC8vIFNraXAgdmFsaWRhdGlvbiBvbiBpbml0aWFsIHNldFZhbHVlXG4gICAgICAgIC8vIGlmIHRoZSBmaWVsZCBpcyBub3QgcmVxdWlyZWRcbiAgICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLmlucHV0VmFsdWUsICF0aGlzLnJlcXVpcmVkKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgICBpbnB1dFZhbHVlOiAnYW55JyxcbiAgICAgICAgc3RhcnRpbmdWYWx1ZTogJ2FueScsXG4gICAgICAgIG5hbWU6ICdzdHJpbmcnLFxuICAgICAgICB0eXBlOiBbJ3N0cmluZycsIHRydWUsICd0ZXh0J10sXG4gICAgICAgIHBsYWNlaG9sZGVyOiBbJ3N0cmluZycsIHRydWUsICcnXSxcbiAgICAgICAgbGFiZWw6IFsnc3RyaW5nJywgdHJ1ZSwgJyddLFxuICAgICAgICByZXF1aXJlZDogWydib29sZWFuJywgdHJ1ZSwgdHJ1ZV0sXG4gICAgICAgIGRpcmVjdGx5RWRpdGVkOiBbJ2Jvb2xlYW4nLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgIHJlYWRvbmx5OiBbJ2Jvb2xlYW4nLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgIGF1dG9mb2N1czogWydib29sZWFuJywgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICBzaG91bGRWYWxpZGF0ZTogWydib29sZWFuJywgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICBtZXNzYWdlOiBbJ3N0cmluZycsIHRydWUsICcnXSxcbiAgICAgICAgcmVxdWlyZWRNZXNzYWdlOiBbJ3N0cmluZycsIHRydWUsICdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiddLFxuICAgICAgICB2YWxpZENsYXNzOiBbJ3N0cmluZycsIHRydWUsICdpbnB1dC12YWxpZCddLFxuICAgICAgICBpbnZhbGlkQ2xhc3M6IFsnc3RyaW5nJywgdHJ1ZSwgJ2lucHV0LWludmFsaWQnXSxcbiAgICAgICAgdmFsaWRpdHlDbGFzc1NlbGVjdG9yOiBbJ3N0cmluZycsIHRydWUsICdpbnB1dCwgdGV4dGFyZWEnXSxcbiAgICAgICAgdGFiaW5kZXg6IFsnbnVtYmVyJywgdHJ1ZSwgMF1cbiAgICB9LFxuICAgIGRlcml2ZWQ6IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIGRlcHM6IFsnaW5wdXRWYWx1ZSddLFxuICAgICAgICAgICAgZm46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB2YWxpZDoge1xuICAgICAgICAgICAgY2FjaGU6IGZhbHNlLFxuICAgICAgICAgICAgZGVwczogWydpbnB1dFZhbHVlJ10sXG4gICAgICAgICAgICBmbjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5ydW5UZXN0cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzaG93TWVzc2FnZToge1xuICAgICAgICAgICAgZGVwczogWydtZXNzYWdlJywgJ3Nob3VsZFZhbGlkYXRlJ10sXG4gICAgICAgICAgICBmbjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3VsZFZhbGlkYXRlICYmIHRoaXMubWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2hhbmdlZDoge1xuICAgICAgICAgICAgZGVwczogWydpbnB1dFZhbHVlJywgJ3N0YXJ0aW5nVmFsdWUnXSxcbiAgICAgICAgICAgIGZuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRWYWx1ZSAhPT0gdGhpcy5zdGFydGluZ1ZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB2YWxpZGl0eUNsYXNzOiB7XG4gICAgICAgICAgICBkZXBzOiBbJ3ZhbGlkJywgJ3ZhbGlkQ2xhc3MnLCAnaW52YWxpZENsYXNzJywgJ3Nob3VsZFZhbGlkYXRlJ10sXG4gICAgICAgICAgICBmbjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaG91bGRWYWxpZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsaWQgPyB0aGlzLnZhbGlkQ2xhc3MgOiB0aGlzLmludmFsaWRDbGFzcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHNldFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIHNraXBWYWxpZGF0aW9uKSB7XG4gICAgICAgIGlmICghdGhpcy5pbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dC52YWx1ZSA9ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnB1dC52YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5jbGVhbih0aGlzLmlucHV0LnZhbHVlKTtcbiAgICAgICAgaWYgKCFza2lwVmFsaWRhdGlvbiAmJiAhdGhpcy5nZXRFcnJvck1lc3NhZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5zaG91bGRWYWxpZGF0ZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoc2tpcFZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc2hvdWxkVmFsaWRhdGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZ2V0RXJyb3JNZXNzYWdlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBtZXNzYWdlID0gJyc7XG4gICAgICAgIGlmICh0aGlzLnJlcXVpcmVkICYmIHRoaXMudmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1aXJlZE1lc3NhZ2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAodGhpcy50ZXN0cyB8fCBbXSkuc29tZShmdW5jdGlvbiAodGVzdCkge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSB0ZXN0LmNhbGwodGhpcywgdGhpcy52YWx1ZSkgfHwgJyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVUeXBlQ2hhbmdlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICd0ZXh0YXJlYScgJiYgdGhpcy5pbnB1dC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICd0ZXh0YXJlYScpIHtcbiAgICAgICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLmlucHV0LnBhcmVudE5vZGU7XG4gICAgICAgICAgICB2YXIgdGV4dGFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgICAgICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZCh0ZXh0YXJlYSwgdGhpcy5pbnB1dCk7XG4gICAgICAgICAgICB0aGlzLmlucHV0ID0gdGV4dGFyZWE7XG4gICAgICAgICAgICB0aGlzLl9hcHBseUJpbmRpbmdzRm9yS2V5KCcnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQudHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgY2xlYW46IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnR5cGUgPT09ICdudW1iZXInKSA/IE51bWJlcih2YWwpIDogdmFsLnRyaW0oKTtcbiAgICB9LFxuICAgIC8vYGlucHV0YCBldmVudCBoYW5kbGVyXG4gICAgaGFuZGxlSW5wdXRDaGFuZ2VkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLmlucHV0KSB7XG4gICAgICAgICAgICB0aGlzLmRpcmVjdGx5RWRpdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmNsZWFuKHRoaXMuaW5wdXQudmFsdWUpO1xuICAgIH0sXG4gICAgLy9gY2hhbmdlYCBldmVudCBoYW5kbGVyXG4gICAgaGFuZGxlQ2hhbmdlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0VmFsdWUgJiYgdGhpcy5jaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLnNob3VsZFZhbGlkYXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJ1blRlc3RzKCk7XG4gICAgfSxcbiAgICBiZWZvcmVTdWJtaXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gY2F0Y2ggdW5kZXRlY3RlZCBpbnB1dCBjaGFuZ2VzIHRoYXQgd2VyZSBub3QgY2F1Z2h0IGR1ZSB0byBsYWNrIG9mXG4gICAgICAgIC8vIGJyb3dzZXIgZXZlbnQgZmlyaW5nIHNlZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0FtcGVyc2FuZEpTL2FtcGVyc2FuZC1pbnB1dC12aWV3L2lzc3Vlcy8yXG4gICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IHRoaXMuY2xlYW4odGhpcy5pbnB1dC52YWx1ZSk7XG5cbiAgICAgICAgLy8gYXQgdGhlIHBvaW50IHdoZXJlIHdlJ3ZlIHRyaWVkXG4gICAgICAgIC8vIHRvIHN1Ym1pdCwgd2Ugd2FudCB0byB2YWxpZGF0ZVxuICAgICAgICAvLyBldmVyeXRoaW5nIGZyb20gbm93IG9uLlxuICAgICAgICB0aGlzLnNob3VsZFZhbGlkYXRlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ydW5UZXN0cygpO1xuICAgIH0sXG4gICAgcnVuVGVzdHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSgpO1xuICAgICAgICBpZiAoIW1lc3NhZ2UgJiYgdGhpcy5pbnB1dFZhbHVlICYmIHRoaXMuY2hhbmdlZCkge1xuICAgICAgICAgICAgLy8gaWYgaXQncyBldmVyIGJlZW4gdmFsaWQsXG4gICAgICAgICAgICAvLyB3ZSB3YW50IHRvIHZhbGlkYXRlIGZyb20gbm93XG4gICAgICAgICAgICAvLyBvbi5cbiAgICAgICAgICAgIHRoaXMuc2hvdWxkVmFsaWRhdGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH0sXG4gICAgaW5pdElucHV0QmluZGluZ3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2VkLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5oYW5kbGVDaGFuZ2UsZmFsc2UpO1xuICAgIH0sXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignaW5wdXQnLCB0aGlzLmhhbmRsZUlucHV0Q2hhbmdlZCwgZmFsc2UpO1xuICAgICAgICB0aGlzLmlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuaGFuZGxlQ2hhbmdlLCBmYWxzZSk7XG4gICAgICAgIFZpZXcucHJvdG90eXBlLnJlbW92ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLnN0YXJ0aW5nVmFsdWUsIHRydWUpOyAvL1NraXAgdmFsaWRhdGlvbiBqdXN0IGxpa2Ugb24gaW5pdGlhbCByZW5kZXJcbiAgICB9LFxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUoJycsIHRydWUpO1xuICAgIH0sXG4gICAgdmFsaWRpdHlDbGFzc0NoYW5nZWQ6IGZ1bmN0aW9uICh2aWV3LCBuZXdDbGFzcykge1xuICAgICAgICB2YXIgb2xkQ2xhc3MgPSB2aWV3LnByZXZpb3VzQXR0cmlidXRlcygpLnZhbGlkaXR5Q2xhc3M7XG4gICAgICAgIGdldE1hdGNoZXModGhpcy5lbCwgdGhpcy52YWxpZGl0eUNsYXNzU2VsZWN0b3IpLmZvckVhY2goZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICBkb20uc3dpdGNoQ2xhc3MobWF0Y2gsIG9sZENsYXNzLCBuZXdDbGFzcyk7XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgcmVwb3J0VG9QYXJlbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB0aGlzLnBhcmVudC51cGRhdGUodGhpcyk7XG4gICAgfVxufSk7XG4iLCIvKiRBTVBFUlNBTkRfVkVSU0lPTiovXG52YXIgU3RhdGUgPSByZXF1aXJlKCdhbXBlcnNhbmQtc3RhdGUnKTtcbnZhciBzeW5jID0gcmVxdWlyZSgnYW1wZXJzYW5kLXN5bmMnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdsb2Rhc2gvYXNzaWduJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCdsb2Rhc2gvaXNPYmplY3QnKTtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJ2xvZGFzaC9jbG9uZScpO1xudmFyIHJlc3VsdCA9IHJlcXVpcmUoJ2xvZGFzaC9yZXN1bHQnKTtcblxuLy8gVGhyb3cgYW4gZXJyb3Igd2hlbiBhIFVSTCBpcyBuZWVkZWQsIGFuZCBub25lIGlzIHN1cHBsaWVkLlxudmFyIHVybEVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQSBcInVybFwiIHByb3BlcnR5IG9yIGZ1bmN0aW9uIG11c3QgYmUgc3BlY2lmaWVkJyk7XG59O1xuXG4vLyBXcmFwIGFuIG9wdGlvbmFsIGVycm9yIGNhbGxiYWNrIHdpdGggYSBmYWxsYmFjayBlcnJvciBldmVudC5cbnZhciB3cmFwRXJyb3IgPSBmdW5jdGlvbiAobW9kZWwsIG9wdGlvbnMpIHtcbiAgICB2YXIgZXJyb3IgPSBvcHRpb25zLmVycm9yO1xuICAgIG9wdGlvbnMuZXJyb3IgPSBmdW5jdGlvbiAocmVzcCkge1xuICAgICAgICBpZiAoZXJyb3IpIGVycm9yKG1vZGVsLCByZXNwLCBvcHRpb25zKTtcbiAgICAgICAgbW9kZWwudHJpZ2dlcignZXJyb3InLCBtb2RlbCwgcmVzcCwgb3B0aW9ucyk7XG4gICAgfTtcbn07XG5cbnZhciBNb2RlbCA9IFN0YXRlLmV4dGVuZCh7XG4gICAgc2F2ZTogZnVuY3Rpb24gKGtleSwgdmFsLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBhdHRycywgbWV0aG9kO1xuXG4gICAgICAgIC8vIEhhbmRsZSBib3RoIGBcImtleVwiLCB2YWx1ZWAgYW5kIGB7a2V5OiB2YWx1ZX1gIC1zdHlsZSBhcmd1bWVudHMuXG4gICAgICAgIGlmIChrZXkgPT0gbnVsbCB8fCB0eXBlb2Yga2V5ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgYXR0cnMgPSBrZXk7XG4gICAgICAgICAgICBvcHRpb25zID0gdmFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgKGF0dHJzID0ge30pW2tleV0gPSB2YWw7XG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zID0gYXNzaWduKHt2YWxpZGF0ZTogdHJ1ZX0sIG9wdGlvbnMpO1xuXG4gICAgICAgIC8vIElmIHdlJ3JlIG5vdCB3YWl0aW5nIGFuZCBhdHRyaWJ1dGVzIGV4aXN0LCBzYXZlIGFjdHMgYXNcbiAgICAgICAgLy8gYHNldChhdHRyKS5zYXZlKG51bGwsIG9wdHMpYCB3aXRoIHZhbGlkYXRpb24uIE90aGVyd2lzZSwgY2hlY2sgaWZcbiAgICAgICAgLy8gdGhlIG1vZGVsIHdpbGwgYmUgdmFsaWQgd2hlbiB0aGUgYXR0cmlidXRlcywgaWYgYW55LCBhcmUgc2V0LlxuICAgICAgICBpZiAoYXR0cnMgJiYgIW9wdGlvbnMud2FpdCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNldChhdHRycywgb3B0aW9ucykpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fdmFsaWRhdGUoYXR0cnMsIG9wdGlvbnMpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZnRlciBhIHN1Y2Nlc3NmdWwgc2VydmVyLXNpZGUgc2F2ZSwgdGhlIGNsaWVudCBpcyAob3B0aW9uYWxseSlcbiAgICAgICAgLy8gdXBkYXRlZCB3aXRoIHRoZSBzZXJ2ZXItc2lkZSBzdGF0ZS5cbiAgICAgICAgaWYgKG9wdGlvbnMucGFyc2UgPT09IHZvaWQgMCkgb3B0aW9ucy5wYXJzZSA9IHRydWU7XG4gICAgICAgIHZhciBtb2RlbCA9IHRoaXM7XG4gICAgICAgIHZhciBzdWNjZXNzID0gb3B0aW9ucy5zdWNjZXNzO1xuICAgICAgICBvcHRpb25zLnN1Y2Nlc3MgPSBmdW5jdGlvbiAocmVzcCkge1xuICAgICAgICAgICAgdmFyIHNlcnZlckF0dHJzID0gbW9kZWwucGFyc2UocmVzcCwgb3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy53YWl0KSBzZXJ2ZXJBdHRycyA9IGFzc2lnbihhdHRycyB8fCB7fSwgc2VydmVyQXR0cnMpO1xuICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHNlcnZlckF0dHJzKSAmJiAhbW9kZWwuc2V0KHNlcnZlckF0dHJzLCBvcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdWNjZXNzKSBzdWNjZXNzKG1vZGVsLCByZXNwLCBvcHRpb25zKTtcbiAgICAgICAgICAgIG1vZGVsLnRyaWdnZXIoJ3N5bmMnLCBtb2RlbCwgcmVzcCwgb3B0aW9ucyk7XG4gICAgICAgIH07XG4gICAgICAgIHdyYXBFcnJvcih0aGlzLCBvcHRpb25zKTtcblxuICAgICAgICBtZXRob2QgPSB0aGlzLmlzTmV3KCkgPyAnY3JlYXRlJyA6IChvcHRpb25zLnBhdGNoID8gJ3BhdGNoJyA6ICd1cGRhdGUnKTtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ3BhdGNoJykgb3B0aW9ucy5hdHRycyA9IGF0dHJzO1xuICAgICAgICAvLyBpZiB3ZSdyZSB3YWl0aW5nIHdlIGhhdmVuJ3QgYWN0dWFsbHkgc2V0IG91ciBhdHRyaWJ1dGVzIHlldCBzb1xuICAgICAgICAvLyB3ZSBuZWVkIHRvIGRvIG1ha2Ugc3VyZSB3ZSBzZW5kIHJpZ2h0IGRhdGFcbiAgICAgICAgaWYgKG9wdGlvbnMud2FpdCAmJiBtZXRob2QgIT09ICdwYXRjaCcpIG9wdGlvbnMuYXR0cnMgPSBhc3NpZ24obW9kZWwuc2VyaWFsaXplKCksIGF0dHJzKTtcbiAgICAgICAgdmFyIHN5bmMgPSB0aGlzLnN5bmMobWV0aG9kLCB0aGlzLCBvcHRpb25zKTtcblxuICAgICAgICAvLyBNYWtlIHRoZSByZXF1ZXN0IGF2YWlsYWJsZSBvbiB0aGUgb3B0aW9ucyBvYmplY3Qgc28gaXQgY2FuIGJlIGFjY2Vzc2VkXG4gICAgICAgIC8vIGZ1cnRoZXIgZG93biB0aGUgbGluZSBieSBgcGFyc2VgLCBhdHRhY2hlZCBsaXN0ZW5lcnMsIGV0Y1xuICAgICAgICAvLyBTYW1lIHRoaW5nIGlzIGRvbmUgYmVsb3cgZm9yIGZldGNoIGFuZCBkZXN0cm95XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9BbXBlcnNhbmRKUy9hbXBlcnNhbmQtY29sbGVjdGlvbi1yZXN0LW1peGluL2NvbW1pdC9kMzJkNzg4YWFmZjkxMjM4N2ViMTEwNmYyZDdhZDE4M2VjMzllMTFhI2RpZmYtODRjODQ3MDMxNjliZjUwMTdiMWJjMzIzNjUzYWNhYTNSMzJcbiAgICAgICAgb3B0aW9ucy54aHIgPSBzeW5jO1xuICAgICAgICByZXR1cm4gc3luYztcbiAgICB9LFxuXG4gICAgLy8gRmV0Y2ggdGhlIG1vZGVsIGZyb20gdGhlIHNlcnZlci4gSWYgdGhlIHNlcnZlcidzIHJlcHJlc2VudGF0aW9uIG9mIHRoZVxuICAgIC8vIG1vZGVsIGRpZmZlcnMgZnJvbSBpdHMgY3VycmVudCBhdHRyaWJ1dGVzLCB0aGV5IHdpbGwgYmUgb3ZlcnJpZGRlbixcbiAgICAvLyB0cmlnZ2VyaW5nIGEgYFwiY2hhbmdlXCJgIGV2ZW50LlxuICAgIGZldGNoOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyA/IGNsb25lKG9wdGlvbnMpIDoge307XG4gICAgICAgIGlmIChvcHRpb25zLnBhcnNlID09PSB2b2lkIDApIG9wdGlvbnMucGFyc2UgPSB0cnVlO1xuICAgICAgICB2YXIgbW9kZWwgPSB0aGlzO1xuICAgICAgICB2YXIgc3VjY2VzcyA9IG9wdGlvbnMuc3VjY2VzcztcbiAgICAgICAgb3B0aW9ucy5zdWNjZXNzID0gZnVuY3Rpb24gKHJlc3ApIHtcbiAgICAgICAgICAgIGlmICghbW9kZWwuc2V0KG1vZGVsLnBhcnNlKHJlc3AsIG9wdGlvbnMpLCBvcHRpb25zKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHN1Y2Nlc3MobW9kZWwsIHJlc3AsIG9wdGlvbnMpO1xuICAgICAgICAgICAgbW9kZWwudHJpZ2dlcignc3luYycsIG1vZGVsLCByZXNwLCBvcHRpb25zKTtcbiAgICAgICAgfTtcbiAgICAgICAgd3JhcEVycm9yKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICB2YXIgc3luYyA9IHRoaXMuc3luYygncmVhZCcsIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICBvcHRpb25zLnhociA9IHN5bmM7XG4gICAgICAgIHJldHVybiBzeW5jO1xuICAgIH0sXG5cbiAgICAvLyBEZXN0cm95IHRoaXMgbW9kZWwgb24gdGhlIHNlcnZlciBpZiBpdCB3YXMgYWxyZWFkeSBwZXJzaXN0ZWQuXG4gICAgLy8gT3B0aW1pc3RpY2FsbHkgcmVtb3ZlcyB0aGUgbW9kZWwgZnJvbSBpdHMgY29sbGVjdGlvbiwgaWYgaXQgaGFzIG9uZS5cbiAgICAvLyBJZiBgd2FpdDogdHJ1ZWAgaXMgcGFzc2VkLCB3YWl0cyBmb3IgdGhlIHNlcnZlciB0byByZXNwb25kIGJlZm9yZSByZW1vdmFsLlxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zID8gY2xvbmUob3B0aW9ucykgOiB7fTtcbiAgICAgICAgdmFyIG1vZGVsID0gdGhpcztcbiAgICAgICAgdmFyIHN1Y2Nlc3MgPSBvcHRpb25zLnN1Y2Nlc3M7XG5cbiAgICAgICAgdmFyIGRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBtb2RlbC50cmlnZ2VyKCdkZXN0cm95JywgbW9kZWwsIG1vZGVsLmNvbGxlY3Rpb24sIG9wdGlvbnMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIG9wdGlvbnMuc3VjY2VzcyA9IGZ1bmN0aW9uIChyZXNwKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy53YWl0IHx8IG1vZGVsLmlzTmV3KCkpIGRlc3Ryb3koKTtcbiAgICAgICAgICAgIGlmIChzdWNjZXNzKSBzdWNjZXNzKG1vZGVsLCByZXNwLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGlmICghbW9kZWwuaXNOZXcoKSkgbW9kZWwudHJpZ2dlcignc3luYycsIG1vZGVsLCByZXNwLCBvcHRpb25zKTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5pc05ldygpKSB7XG4gICAgICAgICAgICBvcHRpb25zLnN1Y2Nlc3MoKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwRXJyb3IodGhpcywgb3B0aW9ucyk7XG5cbiAgICAgICAgdmFyIHN5bmMgPSB0aGlzLnN5bmMoJ2RlbGV0ZScsIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICBvcHRpb25zLnhociA9IHN5bmM7XG4gICAgICAgIGlmICghb3B0aW9ucy53YWl0KSBkZXN0cm95KCk7XG4gICAgICAgIHJldHVybiBzeW5jO1xuICAgIH0sXG5cbiAgICAvLyBQcm94eSBgYW1wZXJzYW5kLXN5bmNgIGJ5IGRlZmF1bHQgLS0gYnV0IG92ZXJyaWRlIHRoaXMgaWYgeW91IG5lZWRcbiAgICAvLyBjdXN0b20gc3luY2luZyBzZW1hbnRpY3MgZm9yICp0aGlzKiBwYXJ0aWN1bGFyIG1vZGVsLlxuICAgIHN5bmM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHN5bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9LFxuXG4gICAgLy8gRGVmYXVsdCBVUkwgZm9yIHRoZSBtb2RlbCdzIHJlcHJlc2VudGF0aW9uIG9uIHRoZSBzZXJ2ZXIgLS0gaWYgeW91J3JlXG4gICAgLy8gdXNpbmcgQmFja2JvbmUncyByZXN0ZnVsIG1ldGhvZHMsIG92ZXJyaWRlIHRoaXMgdG8gY2hhbmdlIHRoZSBlbmRwb2ludFxuICAgIC8vIHRoYXQgd2lsbCBiZSBjYWxsZWQuXG4gICAgdXJsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBiYXNlID0gcmVzdWx0KHRoaXMsICd1cmxSb290JykgfHwgcmVzdWx0KHRoaXMuY29sbGVjdGlvbiwgJ3VybCcpIHx8IHVybEVycm9yKCk7XG4gICAgICAgIGlmICh0aGlzLmlzTmV3KCkpIHJldHVybiBiYXNlO1xuICAgICAgICByZXR1cm4gYmFzZSArIChiYXNlLmNoYXJBdChiYXNlLmxlbmd0aCAtIDEpID09PSAnLycgPyAnJyA6ICcvJykgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5nZXRJZCgpKTtcbiAgICB9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBNb2RlbDtcbiIsIi8qICRBTVBFUlNBTkRfVkVSU0lPTiAqL1xudmFyIGRvbWlmeSA9IHJlcXVpcmUoJ2RvbWlmeScpO1xudmFyIGRvbSA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1kb20nKTtcbnZhciBtYXRjaGVzID0gcmVxdWlyZSgnbWF0Y2hlcy1zZWxlY3RvcicpO1xudmFyIFZpZXcgPSByZXF1aXJlKCdhbXBlcnNhbmQtdmlldycpO1xuXG52YXIgY3JlYXRlT3B0aW9uID0gZnVuY3Rpb24odmFsdWUsIHRleHQsIGRpc2FibGVkKSB7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTtcblxuICAgIC8vU2V0IHRvIGVtcHR5LXN0cmluZyBpZiB1bmRlZmluZWQgb3IgbnVsbCwgYnV0IG5vdCBpZiAwLCBmYWxzZSwgZXRjXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHZhbHVlID0gJyc7XG5cbiAgICBpZiAoZGlzYWJsZWQpIG5vZGUuZGlzYWJsZWQgPSB0cnVlO1xuICAgIG5vZGUudGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgIG5vZGUudmFsdWUgPSB2YWx1ZTtcblxuICAgIHJldHVybiBub2RlO1xufTtcblxudmFyIGNyZWF0ZU9wdGdyb3VwID0gZnVuY3Rpb24odGV4dCkge1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0Z3JvdXAnKTtcbiAgICBub2RlLmxhYmVsID0gdGV4dDtcblxuICAgIHJldHVybiBub2RlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBWaWV3LmV4dGVuZCh7XG4gICAgLy9SZXBsYWNlYWJsZSB3aXRoIGFueXRoaW5nIHdpdGggbGFiZWwsIG1lc3NhZ2UtY29udGFpbmVyLCBtZXNzYWdlLXRleHQgZGF0YS1ob29rcyBhbmQgYSA8c2VsZWN0PlxuICAgIHRlbXBsYXRlOiBbXG4gICAgICAgICc8bGFiZWwgY2xhc3M9XCJzZWxlY3RcIj4nLFxuICAgICAgICAgICAgJzxzcGFuIGRhdGEtaG9vaz1cImxhYmVsXCI+PC9zcGFuPicsXG4gICAgICAgICAgICAnPHNlbGVjdD48L3NlbGVjdD4nLFxuICAgICAgICAgICAgJzxzcGFuIGRhdGEtaG9vaz1cIm1lc3NhZ2UtY29udGFpbmVyXCIgY2xhc3M9XCJtZXNzYWdlIG1lc3NhZ2UtYmVsb3cgbWVzc2FnZS1lcnJvclwiPicsXG4gICAgICAgICAgICAgICAgJzxwIGRhdGEtaG9vaz1cIm1lc3NhZ2UtdGV4dFwiPjwvcD4nLFxuICAgICAgICAgICAgJzwvc3Bhbj4nLFxuICAgICAgICAnPC9sYWJlbD4nXG4gICAgXS5qb2luKCdcXG4nKSxcbiAgICBpbml0aWFsaXplOiBmdW5jdGlvbihvcHRzKSB7XG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5uYW1lICE9PSAnc3RyaW5nJykgdGhyb3cgbmV3IEVycm9yKCdTZWxlY3RWaWV3IHJlcXVpcmVzIGEgbmFtZSBwcm9wZXJ0eS4nKTtcbiAgICAgICAgdGhpcy5uYW1lID0gb3B0cy5uYW1lO1xuXG4gICAgICAgIGlmIChvcHRzLmdyb3VwT3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdHMub3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRG9uXFwndCBwcm92aWRlIGFtcGVyc2FuZC1zZWxlY3QtdmlldyB3aXRoIGJvdGggb3B0aW9ucyBhbmQgZ3JvdXBPcHRpb25zIHByb3BlcnRpZXMsIGFzIG9wdGlvbiB3aWxsIGJlIGdlbmVyYXRlZCB3aXRoIHZhbHVlcyBmcm9tIGdyb3VwT3B0aW9ucy4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgb3B0aW9ucyBhcnJheSBmcm9tIHRoZSBncm91cE9wdGlvbnMgcHJvcGVydHksIGNvbnRhaW5pbmdcbiAgICAgICAgICAgIC8vIG9ubHkgdGhlIHZhbHVlcyB0aGF0IHdpbGwgcmVzdWx0IGluIGFuIDxvcHRpb24+IGVsZW1lbnRcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBPcHRpb25zID0gb3B0cy5ncm91cE9wdGlvbnM7XG4gICAgICAgICAgICBvcHRzLm9wdGlvbnMgPSBbXTtcblxuICAgICAgICAgICAgb3B0cy5ncm91cE9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbihvcHRncm91cCkge1xuICAgICAgICAgICAgICAgIG9wdGdyb3VwLm9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbihvcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0cy5vcHRpb25zLnB1c2gob3B0aW9uKTtcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvcHRzLm9wdGlvbnMpICYmICFvcHRzLm9wdGlvbnMuaXNDb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlbGVjdFZpZXcgcmVxdWlyZXMgc2VsZWN0IG9wdGlvbnMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0cy5vcHRpb25zO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaXNDb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmlkQXR0cmlidXRlID0gb3B0cy5pZEF0dHJpYnV0ZSB8fCB0aGlzLm9wdGlvbnMubWFpbkluZGV4IHx8ICdpZCc7XG4gICAgICAgICAgICB0aGlzLnRleHRBdHRyaWJ1dGUgPSBvcHRzLnRleHRBdHRyaWJ1dGUgfHwgJ3RleHQnO1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZEF0dHJpYnV0ZSA9IG9wdHMuZGlzYWJsZWRBdHRyaWJ1dGU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVsID0gb3B0cy5lbDtcbiAgICAgICAgdGhpcy5sYWJlbCA9IG9wdHMubGFiZWwgfHwgJyc7XG4gICAgICAgIHRoaXMucGFyZW50ID0gb3B0cy5wYXJlbnQgfHwgdGhpcy5wYXJlbnQ7XG4gICAgICAgIGlmIChvcHRzLnRlbXBsYXRlKSB0aGlzLnRlbXBsYXRlID0gb3B0cy50ZW1wbGF0ZTtcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkVGV4dCA9IG9wdHMudW5zZWxlY3RlZFRleHQ7XG4gICAgICAgIHRoaXMuc3RhcnRpbmdWYWx1ZSA9IG9wdHMudmFsdWU7XG4gICAgICAgIHRoaXMueWllbGRNb2RlbCA9IChvcHRzLnlpZWxkTW9kZWwgPT09IGZhbHNlKSA/IGZhbHNlIDogdHJ1ZTtcblxuICAgICAgICB0aGlzLnRhYmluZGV4ID0gb3B0cy50YWJpbmRleCB8fCAnMCc7XG5cbiAgICAgICAgdGhpcy5lYWdlclZhbGlkYXRlID0gb3B0cy5lYWdlclZhbGlkYXRlO1xuICAgICAgICB0aGlzLnJlcXVpcmVkID0gb3B0cy5yZXF1aXJlZCB8fCBmYWxzZTtcbiAgICAgICAgdGhpcy52YWxpZENsYXNzID0gb3B0cy52YWxpZENsYXNzIHx8ICdpbnB1dC12YWxpZCc7XG4gICAgICAgIHRoaXMuaW52YWxpZENsYXNzID0gb3B0cy5pbnZhbGlkQ2xhc3MgfHwgJ2lucHV0LWludmFsaWQnO1xuICAgICAgICBpZiAob3B0cy5yZXF1aXJlZE1lc3NhZ2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5yZXF1aXJlZE1lc3NhZ2UgPSAnU2VsZWN0aW9uIHJlcXVpcmVkJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVxdWlyZWRNZXNzYWdlID0gb3B0cy5yZXF1aXJlZE1lc3NhZ2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuc3RhcnRpbmdWYWx1ZSA9IHRoaXMuc2V0VmFsdWUob3B0cy52YWx1ZSwgdGhpcy5lYWdlclZhbGlkYXRlID8gZmFsc2UgOiB0cnVlLCB0cnVlKTtcblxuICAgICAgICBpZiAob3B0cy5iZWZvcmVTdWJtaXQpIHRoaXMuYmVmb3JlU3VibWl0ID0gb3B0cy5iZWZvcmVTdWJtaXQ7XG4gICAgICAgIGlmIChvcHRzLmF1dG9SZW5kZXIpIHRoaXMuYXV0b1JlbmRlciA9IG9wdHMuYXV0b1JlbmRlcjtcbiAgICB9LFxuXG4gICAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGVsRG9tLFxuICAgICAgICAgICAgbGFiZWxFbDtcbiAgICAgICAgaWYgKHRoaXMucmVuZGVyZWQpIHJldHVybjtcblxuICAgICAgICBlbERvbSA9IGRvbWlmeSh0aGlzLnRlbXBsYXRlKTtcbiAgICAgICAgaWYgKCF0aGlzLmVsKSB0aGlzLmVsID0gZWxEb207XG4gICAgICAgIGVsc2UgdGhpcy5lbC5hcHBlbmRDaGlsZChlbERvbSk7XG5cbiAgICAgICAgbGFiZWxFbCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignW2RhdGEtaG9va349bGFiZWxdJyk7XG4gICAgICAgIGlmIChsYWJlbEVsKSB7XG4gICAgICAgICAgICBsYWJlbEVsLnRleHRDb250ZW50ID0gdGhpcy5sYWJlbDtcbiAgICAgICAgICAgIHRoaXMubGFiZWwgPSBsYWJlbEVsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMubGFiZWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5lbC50YWdOYW1lID09PSAnU0VMRUNUJykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLmVsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoJ3NlbGVjdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3QpIHRocm93IG5ldyBFcnJvcignbm8gc2VsZWN0IGZvdW5kIGluIHRlbXBsYXRlJyk7XG4gICAgICAgIGlmIChtYXRjaGVzKHRoaXMuZWwsICdzZWxlY3QnKSkgdGhpcy5zZWxlY3QgPSB0aGlzLmVsO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3QpIHRoaXMuc2VsZWN0LnNldEF0dHJpYnV0ZSgnbmFtZScsIHRoaXMubmFtZSk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdCkgdGhpcy5zZWxlY3Quc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsIHRoaXMudGFiaW5kZXgpO1xuXG4gICAgICAgIHRoaXMuYmluZERPTUV2ZW50cygpO1xuICAgICAgICB0aGlzLnJlbmRlck9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZE9wdGlvbigpO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaXNDb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMub24oJ2FkZCByZW1vdmUgcmVzZXQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgc2V0VmFsdWVGaXJzdE1vZGVsID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy55aWVsZE1vZGVsKSB0aGlzLnNldFZhbHVlKHRoaXMub3B0aW9ucy5tb2RlbHNbMF0pO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHRoaXMuc2V0VmFsdWUodGhpcy5vcHRpb25zLm1vZGVsc1swXVt0aGlzLmlkQXR0cmlidXRlXSk7XG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJPcHRpb25zKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzT3B0aW9uQnlWYWx1ZSh0aGlzLnZhbHVlKSkgdGhpcy51cGRhdGVTZWxlY3RlZE9wdGlvbigpO1xuICAgICAgICAgICAgICAgIGVsc2Ugc2V0VmFsdWVGaXJzdE1vZGVsKCk7XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52YWxpZGF0ZSh0aGlzLmVhZ2VyVmFsaWRhdGUgPyBmYWxzZSA6IHRydWUsIHRydWUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cblxuICAgIG9uQ2hhbmdlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5zZWxlY3Qub3B0aW9uc1t0aGlzLnNlbGVjdC5zZWxlY3RlZEluZGV4XS52YWx1ZTtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlzQ29sbGVjdGlvbiAmJiB0aGlzLnlpZWxkTW9kZWwpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXRNb2RlbEZvcklkKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyBhIG1vZGVsIGluIHRoZSBvcHRpb25zIGNvbGxlY3Rpb24gcHJvdmlkZWQgYW4gSURcbiAgICAgKiBAcGFyYW0gIHthbnl9IGlkXG4gICAgICogQHJldHVybiB7U3RhdGV9XG4gICAgICogQHRocm93cyB7UmFuZ2VFcnJvcn0gSWYgbW9kZWwgbm90IGZvdW5kXG4gICAgICovXG4gICAgZ2V0TW9kZWxGb3JJZDogZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24obW9kZWwpIHtcbiAgICAgICAgICAgIC8vIGludGVudGlvbmFsbHkgY29lcmNlIGZvciAnMScgPT0gMVxuICAgICAgICAgICAgcmV0dXJuIG1vZGVsW3RoaXMuaWRBdHRyaWJ1dGVdID09IGlkO1xuICAgICAgICB9LmJpbmQodGhpcykpWzBdO1xuICAgIH0sXG5cbiAgICBiaW5kRE9NRXZlbnRzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5zZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5vbkNoYW5nZSwgZmFsc2UpO1xuICAgIH0sXG5cbiAgICByZW5kZXJPcHRpb25zOiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdCkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0LmlubmVySFRNTCA9ICcnO1xuICAgICAgICBpZiAodGhpcy51bnNlbGVjdGVkVGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdC5hcHBlbmRDaGlsZChcbiAgICAgICAgICAgICAgICBjcmVhdGVPcHRpb24obnVsbCwgdGhpcy51bnNlbGVjdGVkVGV4dClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5ncm91cE9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBPcHRpb25zLmZvckVhY2goZnVuY3Rpb24ob3B0Z3JvdXApIHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmdyb3VwT3B0aW9ucyBpcyBhbiBhcnJheSBvZiBPYmplY3RzIHJlcHJlc2VudGluZyA8b3B0Z3JvdXA+IGVsZW1lbnRzXG4gICAgICAgICAgICAgICAgdmFyIG9wdEdyb3VwRWxlbWVudCA9IGNyZWF0ZU9wdGdyb3VwKG9wdGdyb3VwLmdyb3VwTmFtZSk7XG4gICAgICAgICAgICAgICAgLy8gTG9vcCBvdmVyIHRoZSA8b3B0aW9ucz4gZnJvbSB0aGF0IDxvcHRncm91cD5cbiAgICAgICAgICAgICAgICBvcHRncm91cC5vcHRpb25zLmZvckVhY2goZnVuY3Rpb24ob3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgPG9wdGlvbj5zIHRvIHRoZSA8b3B0Z3JvdXA+XG4gICAgICAgICAgICAgICAgICAgIG9wdEdyb3VwRWxlbWVudC5hcHBlbmRDaGlsZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZU9wdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE9wdGlvblZhbHVlKG9wdGlvbiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRPcHRpb25UZXh0KG9wdGlvbiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRPcHRpb25EaXNhYmxlZChvcHRpb24pXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIDxvcHRncm91cD4gdG8gdGhlIDxzZWxlY3Q+XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QuYXBwZW5kQ2hpbGQob3B0R3JvdXBFbGVtZW50KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbihvcHRpb24pIHtcbiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYW5kIGFkZCB0aGUgPG9wdGlvbj4gdG8gdGhlIDxzZWxlY3Q+XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QuYXBwZW5kQ2hpbGQoXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZU9wdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uVmFsdWUob3B0aW9uKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uVGV4dChvcHRpb24pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRPcHRpb25EaXNhYmxlZChvcHRpb24pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSA8c2VsZWN0PiBjb250cm9sIHRvIHNldCB0aGUgc2VsZWN0IG9wdGlvbiB3aGVuIHRoZSBvcHRpb25cbiAgICAgKiBoYXMgY2hhbmdlZCBwcm9ncmFtYXRpY2FsbHkgKGkuZS4gbm90IHRocm91Z2ggZGlyZWN0IHVzZXIgc2VsZWN0aW9uKVxuICAgICAqIEByZXR1cm4ge1NlbGVjdFZpZXd9IHRoaXNcbiAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgbm8gb3B0aW9uIGV4aXN0cyBmb3IgdGhpcy52YWx1ZVxuICAgICAqL1xuICAgIHVwZGF0ZVNlbGVjdGVkT3B0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGxvb2t1cFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgaWYgKGxvb2t1cFZhbHVlID09PSBudWxsIHx8IGxvb2t1cFZhbHVlID09PSB1bmRlZmluZWQgfHwgbG9va3VwVmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy51bnNlbGVjdGVkVGV4dCAhPT0gdW5kZWZpbmVkIHx8ICghdGhpcy5zdGFydGluZ1ZhbHVlICYmICF0aGlzLnJlbmRlcmVkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0LnNlbGVjdGVkSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zLmxlbmd0aCAmJiB0aGlzLnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQdWxsIG91dCB0aGUgaWQgaWYgaXQncyBhIG1vZGVsXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaXNDb2xsZWN0aW9uICYmIHRoaXMueWllbGRNb2RlbCkge1xuICAgICAgICAgICAgbG9va3VwVmFsdWUgPSBsb29rdXBWYWx1ZSAmJiBsb29rdXBWYWx1ZVt0aGlzLmlkQXR0cmlidXRlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb29rdXBWYWx1ZSB8fCBsb29rdXBWYWx1ZSA9PT0gMCB8fCBsb29rdXBWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGxvb2t1cFZhbHVlID09PSBudWxsKSBsb29rdXBWYWx1ZSA9ICcnOyAvLyBET00gc2VlcyBvbmx5ICcnIGVtcHR5IHZhbHVlXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5zZWxlY3Qub3B0aW9ucy5sZW5ndGg7IGktLTsgaSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdC5vcHRpb25zW2ldLnZhbHVlID09IGxvb2t1cFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0LnNlbGVjdGVkSW5kZXggPSBpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBmYWlsZWQgdG8gbWF0Y2ggYW55XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gb3B0aW9uIGV4aXN0cyBmb3IgdmFsdWU6ICcgKyBsb29rdXBWYWx1ZSk7XG4gICAgfSxcblxuICAgIHJlbW92ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmVsICYmIHRoaXMuZWwucGFyZW50Tm9kZSkgdGhpcy5lbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWwpO1xuICAgICAgICB0aGlzLmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMub25DaGFuZ2UsIGZhbHNlKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyBjb250cm9sIHRvIHVuc2VsZWN0ZWRUZXh0IG9wdGlvbiwgb3IgdXNlciBzcGVjaWZpZWQgb3B0aW9uIHdpdGggYG51bGxgXG4gICAgICogdmFsdWVcbiAgICAgKiBAcmV0dXJuIHtTZWxlY3RWaWV3fSB0aGlzXG4gICAgICovXG4gICAgY2xlYXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnNldFZhbHVlKG51bGwsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc2VsZWN0ZWQgb3B0aW9uIGFuZCB2aWV3IHZhbHVlIHRvIHRoZSBvcmlnaW5hbCBvcHRpb24gdmFsdWUgcHJvdmlkZWRcbiAgICAgKiBkdXJpbmcgY29uc3RydWN0aW9uXG4gICAgICogQHJldHVybiB7U2VsZWN0Vmlld30gdGhpc1xuICAgICAqL1xuICAgIHJlc2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0VmFsdWUodGhpcy5zdGFydGluZ1ZhbHVlLCB0cnVlKTtcbiAgICB9LFxuXG4gICAgc2V0VmFsdWU6IGZ1bmN0aW9uKHZhbHVlLCBza2lwVmFsaWRhdGlvbk1lc3NhZ2UsIGluaXQpIHtcbiAgICAgICAgdmFyIG9wdGlvbiwgbW9kZWwsIG51bGxWYWxpZDtcblxuICAgICAgICAvLyBlbmZvcmNlIHRoZSA8c2VsZWN0PiBjb250cm9sIHRvIGNvbnRhaW4gb25seSBhIHNpbmd1bGFyIGZhbHN5XG4gICAgICAgIC8vIHZhbHVlIChleGNsdWRpbmcgMCksIGJlY2F1c2UgYnJvd3NlcnMgd2lsbCBzZXQgdGhlIHNlbGVjdC52YWx1ZVxuICAgICAgICAvLyBpbiBlYWNoIGNhc2UgdG8gYmUgdGhlIGVtcHR5IHN0cmluZ1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuXG4gICAgICAgICAgICAvLyB0ZXN0IGlmIG51bGwgaXMgYSB2YWxpZCBvcHRpb25cbiAgICAgICAgICAgIGlmICh0aGlzLnVuc2VsZWN0ZWRUZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBudWxsVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBudWxsVmFsaWQgPSB0aGlzLmhhc09wdGlvbkJ5VmFsdWUobnVsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGVtcHR5IHZhbHVlIHJlcXVlc3RlZCB0byBiZSBzZXQuICBUaGlzIG1heSBiZSBiZWNhdXNlIHRoZSBmaWVsZCBpcyBqdXN0XG4gICAgICAgICAgICAvLyBpbml0aWFsaXppbmcuICBJZiBpbml0aWFsaXppbmcgYW5kIGBudWxsYCBpc24ndCBpbiB0aGUgaG9ub3JlZCBvcHRpb24gc2V0XG4gICAgICAgICAgICAvLyBzZXQgdGhlIHNlbGVjdCB0byB0aGUgMC10aCBpbmRleFxuICAgICAgICAgICAgaWYgKGluaXQgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCAmJiAhbnVsbFZhbGlkKSB7XG4gICAgICAgICAgICAgICAgLy8gbm8gaW5pdGlhbCB2YWx1ZSBwYXNzZWQsIHNldCBpbml0aWFsIHZhbHVlIHRvIGZpcnN0IGl0ZW0gaW4gc2V0XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pc0NvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWwgPSB0aGlzLm9wdGlvbnMubW9kZWxzWzBdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy55aWVsZE1vZGVsID8gbW9kZWwgOiBtb2RlbFt0aGlzLmlkQXR0cmlidXRlXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnNbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5vcHRpb25zWzBdWzBdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMub3B0aW9uc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEVuc3VyZSBjb3JyZXNwb25kaW5nIG9wdGlvbiBleGlzdHMgYmVmb3JlIGFzc2lnbmluZyB2YWx1ZVxuICAgICAgICAgICAgb3B0aW9uID0gdGhpcy5nZXRPcHRpb25CeVZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBBcnJheS5pc0FycmF5KG9wdGlvbikgPyBvcHRpb25bMF0gOiBvcHRpb247XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWxpZGF0ZShza2lwVmFsaWRhdGlvbk1lc3NhZ2UpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3QpIHRoaXMudXBkYXRlU2VsZWN0ZWRPcHRpb24oKTtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50ICYmIHR5cGVvZiB0aGlzLnBhcmVudC51cGRhdGUgPT09ICdmdW5jdGlvbicpIHRoaXMucGFyZW50LnVwZGF0ZSh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfSxcblxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihza2lwVmFsaWRhdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICAvLyBzZWxlY3RlZCBvcHRpb24gYWx3YXlzIGtub3duIHRvIGJlIGluIG9wdGlvbiBzZXQsXG4gICAgICAgICAgICAvLyB0aHVzIGZpZWxkIGlzIGFsd2F5cyB2YWxpZCBpZiBub3QgcmVxdWlyZWRcbiAgICAgICAgICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0KSB0aGlzLnRvZ2dsZU1lc3NhZ2Uoc2tpcFZhbGlkYXRpb25NZXNzYWdlKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbGlkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgIXRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZSAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0KSB0aGlzLnRvZ2dsZU1lc3NhZ2Uoc2tpcFZhbGlkYXRpb25NZXNzYWdlLCB0aGlzLnJlcXVpcmVkTWVzc2FnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdCkgdGhpcy50b2dnbGVNZXNzYWdlKHNraXBWYWxpZGF0aW9uTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy52YWxpZDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIGJ5IEZvcm1WaWV3IG9uIHN1Ym1pdFxuICAgICAqIEByZXR1cm4ge1NlbGVjdFZpZXd9IHRoaXNcbiAgICAgKi9cbiAgICBiZWZvcmVTdWJtaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3QpIHRoaXMuc2V0VmFsdWUodGhpcy5zZWxlY3Qub3B0aW9uc1t0aGlzLnNlbGVjdC5zZWxlY3RlZEluZGV4XS52YWx1ZSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG9wdGlvbiBjb3JyZXNwb25kaW5nIHRvIHByb3ZpZGVkIHZhbHVlLlxuICAgICAqIEBwYXJhbSAgeyp9IHN0cmluZywgc3RhdGUsIG9yIG1vZGVsXG4gICAgICogQHJldHVybiB7Kn0gc3RyaW5nLCBhcnJheSwgc3RhdGUsIG9yIG1vZGVsXG4gICAgICovXG4gICAgZ2V0T3B0aW9uQnlWYWx1ZTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdmFyIG1vZGVsO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlzQ29sbGVjdGlvbikge1xuICAgICAgICAgICAgLy8gZmluZCB2YWx1ZSBpbiBjb2xsZWN0aW9uLCBlcnJvciBpZiBubyBtb2RlbCBmb3VuZFxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbmRleE9mKHZhbHVlKSA9PT0gLTEpIG1vZGVsID0gdGhpcy5nZXRNb2RlbEZvcklkKHZhbHVlKTtcbiAgICAgICAgICAgIGVsc2UgbW9kZWwgPSB2YWx1ZTtcbiAgICAgICAgICAgIGlmICghbW9kZWwpIHRocm93IG5ldyBFcnJvcignbW9kZWwgb3IgbW9kZWwgaWRBdHRyaWJ1dGUgbm90IGZvdW5kIGluIG9wdGlvbnMgY29sbGVjdGlvbicpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMueWllbGRNb2RlbCA/IG1vZGVsIDogbW9kZWxbdGhpcy5pZEF0dHJpYnV0ZV07XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnMpKSB7XG4gICAgICAgICAgICAvLyBmaW5kIHZhbHVlIHZhbHVlIGluIG9wdGlvbnMgYXJyYXlcbiAgICAgICAgICAgIC8vIGZpbmQgb3B0aW9uLCBmb3JtYXR0ZWQgW1sndmFsJywgJ3RleHQnXSwgLi4uXVxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sZW5ndGggJiYgQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnNbMF0pKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMub3B0aW9ucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zW2ldWzBdID09IHZhbHVlKSByZXR1cm4gdGhpcy5vcHRpb25zW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGZpbmQgb3B0aW9uLCBmb3JtYXR0ZWQgWyd2YWxBbmRUZXh0JywgLi4uXSBmb3JtYXRcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGVuZ3RoICYmIHRoaXMub3B0aW9ucy5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndmFsdWUgbm90IGluIHNldCBvZiBwcm92aWRlZCBvcHRpb25zJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZWxlY3Qgb3B0aW9uIHNldCBpbnZhbGlkJyk7XG4gICAgfSxcblxuXG5cbiAgICAvKipcbiAgICAgKiBUZXN0cyBpZiBvcHRpb24gc2V0IGhhcyBhbiBvcHRpb24gY29ycmVzcG9uZGluZyB0byB0aGUgcHJvdmlkZWQgdmFsdWVcbiAgICAgKiBAcGFyYW0gIHsqfSB2YWx1ZVxuICAgICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAgICovXG4gICAgaGFzT3B0aW9uQnlWYWx1ZTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uQnlWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG5cblxuICAgIGdldE9wdGlvblZhbHVlOiBmdW5jdGlvbihvcHRpb24pIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9uKSkgcmV0dXJuIG9wdGlvblswXTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pc0NvbGxlY3Rpb24pIHJldHVybiBvcHRpb25bdGhpcy5pZEF0dHJpYnV0ZV07XG4gICAgICAgIHJldHVybiBvcHRpb247XG4gICAgfSxcblxuICAgIGdldE9wdGlvblRleHQ6IGZ1bmN0aW9uKG9wdGlvbikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb24pKSByZXR1cm4gb3B0aW9uWzFdO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlzQ29sbGVjdGlvbikge1xuICAgICAgICAgICAgaWYgKHRoaXMudGV4dEF0dHJpYnV0ZSAmJiBvcHRpb25bdGhpcy50ZXh0QXR0cmlidXRlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvblt0aGlzLnRleHRBdHRyaWJ1dGVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICB9LFxuXG4gICAgZ2V0T3B0aW9uRGlzYWJsZWQ6IGZ1bmN0aW9uKG9wdGlvbikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb24pKSByZXR1cm4gb3B0aW9uWzJdO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlzQ29sbGVjdGlvbiAmJiB0aGlzLmRpc2FibGVkQXR0cmlidXRlKSByZXR1cm4gb3B0aW9uW3RoaXMuZGlzYWJsZWRBdHRyaWJ1dGVdO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgdG9nZ2xlTWVzc2FnZTogZnVuY3Rpb24oaGlkZSwgbWVzc2FnZSkge1xuICAgICAgICB2YXIgbUNvbnRhaW5lciA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignW2RhdGEtaG9va349bWVzc2FnZS1jb250YWluZXJdJyksXG4gICAgICAgICAgICBtVGV4dCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignW2RhdGEtaG9va349bWVzc2FnZS10ZXh0XScpO1xuXG4gICAgICAgIGlmICghbUNvbnRhaW5lciB8fCAhbVRleHQpIHJldHVybjtcblxuICAgICAgICBpZiAoaGlkZSkge1xuICAgICAgICAgICAgZG9tLmhpZGUobUNvbnRhaW5lcik7XG4gICAgICAgICAgICBtVGV4dC50ZXh0Q29udGVudCA9ICcnO1xuICAgICAgICAgICAgZG9tLnJlbW92ZUNsYXNzKHRoaXMuZWwsIHRoaXMudmFsaWRDbGFzcyk7XG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2xhc3ModGhpcy5lbCwgdGhpcy5pbnZhbGlkQ2xhc3MpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgIGRvbS5zaG93KG1Db250YWluZXIpO1xuICAgICAgICAgICAgbVRleHQudGV4dENvbnRlbnQgPSBtZXNzYWdlO1xuICAgICAgICAgICAgZG9tLmFkZENsYXNzKHRoaXMuZWwsIHRoaXMuaW52YWxpZENsYXNzKTtcbiAgICAgICAgICAgIGRvbS5yZW1vdmVDbGFzcyh0aGlzLmVsLCB0aGlzLnZhbGlkQ2xhc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZG9tLmhpZGUobUNvbnRhaW5lcik7XG4gICAgICAgICAgICBtVGV4dC50ZXh0Q29udGVudCA9ICcnO1xuICAgICAgICAgICAgZG9tLmFkZENsYXNzKHRoaXMuZWwsIHRoaXMudmFsaWRDbGFzcyk7XG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2xhc3ModGhpcy5lbCwgdGhpcy5pbnZhbGlkQ2xhc3MpO1xuICAgICAgICB9XG4gICAgfVxuXG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qJEFNUEVSU0FORF9WRVJTSU9OKi9cbnZhciB1bmlxdWVJZCA9IHJlcXVpcmUoJ2xvZGFzaC91bmlxdWVJZCcpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ2xvZGFzaC9hc3NpZ24nKTtcbnZhciBjbG9uZU9iaiA9IGZ1bmN0aW9uKG9iaikgeyByZXR1cm4gYXNzaWduKHt9LCBvYmopOyB9O1xudmFyIG9taXQgPSByZXF1aXJlKCdsb2Rhc2gvb21pdCcpO1xudmFyIGVzY2FwZSA9IHJlcXVpcmUoJ2xvZGFzaC9lc2NhcGUnKTtcbnZhciBmb3JPd24gPSByZXF1aXJlKCdsb2Rhc2gvZm9yT3duJyk7XG52YXIgaW5jbHVkZXMgPSByZXF1aXJlKCdsb2Rhc2gvaW5jbHVkZXMnKTtcbnZhciBpc1N0cmluZyA9IHJlcXVpcmUoJ2xvZGFzaC9pc1N0cmluZycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnbG9kYXNoL2lzT2JqZWN0Jyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnbG9kYXNoL2lzRGF0ZScpO1xudmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCdsb2Rhc2gvaXNGdW5jdGlvbicpO1xudmFyIF9pc0VxdWFsID0gcmVxdWlyZSgnbG9kYXNoL2lzRXF1YWwnKTsgLy8gdG8gYXZvaWQgc2hhZG93aW5nXG52YXIgaGFzID0gcmVxdWlyZSgnbG9kYXNoL2hhcycpO1xudmFyIHJlc3VsdCA9IHJlcXVpcmUoJ2xvZGFzaC9yZXN1bHQnKTtcbnZhciB1bmlvbiA9IHJlcXVpcmUoJ2xvZGFzaC91bmlvbicpO1xudmFyIEV2ZW50cyA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1ldmVudHMnKTtcbnZhciBLZXlUcmVlID0gcmVxdWlyZSgna2V5LXRyZWUtc3RvcmUnKTtcbnZhciBhcnJheU5leHQgPSByZXF1aXJlKCdhcnJheS1uZXh0Jyk7XG52YXIgY2hhbmdlUkUgPSAvXmNoYW5nZTovO1xudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7fTtcblxuZnVuY3Rpb24gQmFzZShhdHRycywgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7XG4gICAgdGhpcy5jaWQgfHwgKHRoaXMuY2lkID0gdW5pcXVlSWQoJ3N0YXRlJykpO1xuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuICAgIHRoaXMuX3ZhbHVlcyA9IHt9O1xuICAgIHRoaXMuX2V2ZW50QnViYmxpbmdIYW5kbGVyQ2FjaGUgPSB7fTtcbiAgICB0aGlzLl9kZWZpbml0aW9uID0gT2JqZWN0LmNyZWF0ZSh0aGlzLl9kZWZpbml0aW9uKTtcbiAgICBpZiAob3B0aW9ucy5wYXJzZSkgYXR0cnMgPSB0aGlzLnBhcnNlKGF0dHJzLCBvcHRpb25zKTtcbiAgICB0aGlzLnBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuICAgIHRoaXMuY29sbGVjdGlvbiA9IG9wdGlvbnMuY29sbGVjdGlvbjtcbiAgICB0aGlzLl9rZXlUcmVlID0gbmV3IEtleVRyZWUoKTtcbiAgICB0aGlzLl9pbml0Q29sbGVjdGlvbnMoKTtcbiAgICB0aGlzLl9pbml0Q2hpbGRyZW4oKTtcbiAgICB0aGlzLl9jYWNoZSA9IHt9O1xuICAgIHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcyA9IHt9O1xuICAgIGlmIChhdHRycykgdGhpcy5zZXQoYXR0cnMsIGFzc2lnbih7c2lsZW50OiB0cnVlLCBpbml0aWFsOiB0cnVlfSwgb3B0aW9ucykpO1xuICAgIHRoaXMuX2NoYW5nZWQgPSB7fTtcbiAgICBpZiAodGhpcy5fZGVyaXZlZCkgdGhpcy5faW5pdERlcml2ZWQoKTtcbiAgICBpZiAob3B0aW9ucy5pbml0ICE9PSBmYWxzZSkgdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmFzc2lnbihCYXNlLnByb3RvdHlwZSwgRXZlbnRzLCB7XG4gICAgLy8gY2FuIGJlIGFsbG93LCBpZ25vcmUsIHJlamVjdFxuICAgIGV4dHJhUHJvcGVydGllczogJ2lnbm9yZScsXG5cbiAgICBpZEF0dHJpYnV0ZTogJ2lkJyxcblxuICAgIG5hbWVzcGFjZUF0dHJpYnV0ZTogJ25hbWVzcGFjZScsXG5cbiAgICB0eXBlQXR0cmlidXRlOiAnbW9kZWxUeXBlJyxcblxuICAgIC8vIFN0dWJiZWQgb3V0IHRvIGJlIG92ZXJ3cml0dGVuXG4gICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLy8gR2V0IElEIG9mIG1vZGVsIHBlciBjb25maWd1cmF0aW9uLlxuICAgIC8vIFNob3VsZCAqYWx3YXlzKiBiZSBob3cgSUQgaXMgZGV0ZXJtaW5lZCBieSBvdGhlciBjb2RlLlxuICAgIGdldElkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW3RoaXMuaWRBdHRyaWJ1dGVdO1xuICAgIH0sXG5cbiAgICAvLyBHZXQgbmFtZXNwYWNlIG9mIG1vZGVsIHBlciBjb25maWd1cmF0aW9uLlxuICAgIC8vIFNob3VsZCAqYWx3YXlzKiBiZSBob3cgbmFtZXNwYWNlIGlzIGRldGVybWluZWQgYnkgb3RoZXIgY29kZS5cbiAgICBnZXROYW1lc3BhY2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbdGhpcy5uYW1lc3BhY2VBdHRyaWJ1dGVdO1xuICAgIH0sXG5cbiAgICAvLyBHZXQgdHlwZSBvZiBtb2RlbCBwZXIgY29uZmlndXJhdGlvbi5cbiAgICAvLyBTaG91bGQgKmFsd2F5cyogYmUgaG93IHR5cGUgaXMgZGV0ZXJtaW5lZCBieSBvdGhlciBjb2RlLlxuICAgIGdldFR5cGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbdGhpcy50eXBlQXR0cmlidXRlXTtcbiAgICB9LFxuXG4gICAgLy8gQSBtb2RlbCBpcyBuZXcgaWYgaXQgaGFzIG5ldmVyIGJlZW4gc2F2ZWQgdG8gdGhlIHNlcnZlciwgYW5kIGxhY2tzIGFuIGlkLlxuICAgIGlzTmV3OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldElkKCkgPT0gbnVsbDtcbiAgICB9LFxuXG4gICAgLy8gZ2V0IEhUTUwtZXNjYXBlZCB2YWx1ZSBvZiBhdHRyaWJ1dGVcbiAgICBlc2NhcGU6IGZ1bmN0aW9uIChhdHRyKSB7XG4gICAgICAgIHJldHVybiBlc2NhcGUodGhpcy5nZXQoYXR0cikpO1xuICAgIH0sXG5cbiAgICAvLyBDaGVjayBpZiB0aGUgbW9kZWwgaXMgY3VycmVudGx5IGluIGEgdmFsaWQgc3RhdGUuXG4gICAgaXNWYWxpZDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHt9LCBhc3NpZ24ob3B0aW9ucyB8fCB7fSwgeyB2YWxpZGF0ZTogdHJ1ZSB9KSk7XG4gICAgfSxcblxuICAgIC8vIFBhcnNlIGNhbiBiZSB1c2VkIHJlbWFwL3Jlc3RydWN0dXJlL3JlbmFtZSBpbmNvbWluZyBwcm9wZXJ0aWVzXG4gICAgLy8gYmVmb3JlIHRoZXkgYXJlIGFwcGxpZWQgdG8gYXR0cmlidXRlcy5cbiAgICBwYXJzZTogZnVuY3Rpb24gKHJlc3AsIG9wdGlvbnMpIHtcbiAgICAgICAgLy9qc2hpbnQgdW51c2VkOmZhbHNlXG4gICAgICAgIHJldHVybiByZXNwO1xuICAgIH0sXG5cbiAgICAvLyBTZXJpYWxpemUgaXMgdGhlIGludmVyc2Ugb2YgYHBhcnNlYCBpdCBsZXRzIHlvdSBtYXNzYWdlIGRhdGFcbiAgICAvLyBvbiB0aGUgd2F5IG91dC4gQmVmb3JlLCBzZW5kaW5nIHRvIHNlcnZlciwgZm9yIGV4YW1wbGUuXG4gICAgc2VyaWFsaXplOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICB2YXIgYXR0ck9wdHMgPSBhc3NpZ24oe3Byb3BzOiB0cnVlfSwgb3B0aW9ucyk7XG4gICAgICAgIHZhciByZXMgPSB0aGlzLmdldEF0dHJpYnV0ZXMoYXR0ck9wdHMsIHRydWUpO1xuICAgICAgICBcbiAgICAgICAgdmFyIHNldEZyb21TZXJpYWxpemVkVmFsdWUgPSBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuXHQgICAgICAgIHJlc1trZXldID0gdGhpc1trZXldLnNlcmlhbGl6ZSgpO1xuICAgICAgICB9LmJpbmQodGhpcyk7XG4gICAgICAgIFxuICAgICAgICBmb3JPd24odGhpcy5fY2hpbGRyZW4sIHNldEZyb21TZXJpYWxpemVkVmFsdWUpO1xuICAgICAgICBmb3JPd24odGhpcy5fY29sbGVjdGlvbnMsIHNldEZyb21TZXJpYWxpemVkVmFsdWUpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG5cbiAgICAvLyBNYWluIHNldCBtZXRob2QgdXNlZCBieSBnZW5lcmF0ZWQgc2V0dGVycy9nZXR0ZXJzIGFuZCBjYW5cbiAgICAvLyBiZSB1c2VkIGRpcmVjdGx5IGlmIHlvdSBuZWVkIHRvIHBhc3Mgb3B0aW9ucyBvciBzZXQgbXVsdGlwbGVcbiAgICAvLyBwcm9wZXJ0aWVzIGF0IG9uY2UuXG4gICAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHZhciBleHRyYVByb3BlcnRpZXMgPSB0aGlzLmV4dHJhUHJvcGVydGllcztcbiAgICAgICAgdmFyIHdhc0NoYW5naW5nLCBjaGFuZ2VFdmVudHMsIG5ld1R5cGUsIG5ld1ZhbCwgZGVmLCBjYXN0LCBlcnIsIGF0dHIsXG4gICAgICAgICAgICBhdHRycywgZGF0YVR5cGUsIHNpbGVudCwgdW5zZXQsIGN1cnJlbnRWYWwsIGluaXRpYWwsIGhhc0NoYW5nZWQsIGlzRXF1YWwsIG9uQ2hhbmdlO1xuXG4gICAgICAgIC8vIEhhbmRsZSBib3RoIGBcImtleVwiLCB2YWx1ZWAgYW5kIGB7a2V5OiB2YWx1ZX1gIC1zdHlsZSBhcmd1bWVudHMuXG4gICAgICAgIGlmIChpc09iamVjdChrZXkpIHx8IGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgYXR0cnMgPSBrZXk7XG4gICAgICAgICAgICBvcHRpb25zID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhdHRycyA9IHt9O1xuICAgICAgICAgICAgYXR0cnNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAgICAgaWYgKCF0aGlzLl92YWxpZGF0ZShhdHRycywgb3B0aW9ucykpIHJldHVybiBmYWxzZTtcblxuICAgICAgICAvLyBFeHRyYWN0IGF0dHJpYnV0ZXMgYW5kIG9wdGlvbnMuXG4gICAgICAgIHVuc2V0ID0gb3B0aW9ucy51bnNldDtcbiAgICAgICAgc2lsZW50ID0gb3B0aW9ucy5zaWxlbnQ7XG4gICAgICAgIGluaXRpYWwgPSBvcHRpb25zLmluaXRpYWw7XG5cbiAgICAgICAgLy8gSW5pdGlhbGl6ZSBjaGFuZ2UgdHJhY2tpbmcuXG4gICAgICAgIHdhc0NoYW5naW5nID0gdGhpcy5fY2hhbmdpbmc7XG4gICAgICAgIHRoaXMuX2NoYW5naW5nID0gdHJ1ZTtcbiAgICAgICAgY2hhbmdlRXZlbnRzID0gW107XG5cbiAgICAgICAgLy8gaWYgbm90IGFscmVhZHkgY2hhbmdpbmcsIHN0b3JlIHByZXZpb3VzXG4gICAgICAgIGlmIChpbml0aWFsKSB7XG4gICAgICAgICAgICB0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgfSBlbHNlIGlmICghd2FzQ2hhbmdpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZWQgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZvciBlYWNoIGBzZXRgIGF0dHJpYnV0ZS4uLlxuICAgICAgICBmb3IgKHZhciBpID0gMCwga2V5cyA9IE9iamVjdC5rZXlzKGF0dHJzKSwgbGVuID0ga2V5cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgYXR0ciA9IGtleXNbaV07XG4gICAgICAgICAgICBuZXdWYWwgPSBhdHRyc1thdHRyXTtcbiAgICAgICAgICAgIG5ld1R5cGUgPSB0eXBlb2YgbmV3VmFsO1xuICAgICAgICAgICAgY3VycmVudFZhbCA9IHRoaXMuX3ZhbHVlc1thdHRyXTtcbiAgICAgICAgICAgIGRlZiA9IHRoaXMuX2RlZmluaXRpb25bYXR0cl07XG5cbiAgICAgICAgICAgIGlmICghZGVmKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBhIGNoaWxkIG1vZGVsIG9yIGNvbGxlY3Rpb25cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hpbGRyZW5bYXR0cl0gfHwgdGhpcy5fY29sbGVjdGlvbnNbYXR0cl0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09iamVjdChuZXdWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdWYWwgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXNbYXR0cl0uc2V0KG5ld1ZhbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXh0cmFQcm9wZXJ0aWVzID09PSAnaWdub3JlJykge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV4dHJhUHJvcGVydGllcyA9PT0gJ3JlamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gXCInICsgYXR0ciArICdcIiBwcm9wZXJ0eSBkZWZpbmVkIG9uICcgKyAodGhpcy50eXBlIHx8ICd0aGlzJykgKyAnIG1vZGVsIGFuZCBleHRyYVByb3BlcnRpZXMgbm90IHNldCB0byBcImlnbm9yZVwiIG9yIFwiYWxsb3dcIicpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXh0cmFQcm9wZXJ0aWVzID09PSAnYWxsb3cnKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZiA9IHRoaXMuX2NyZWF0ZVByb3BlcnR5RGVmaW5pdGlvbihhdHRyLCAnYW55Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChleHRyYVByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCB2YWx1ZSBmb3IgZXh0cmFQcm9wZXJ0aWVzOiBcIicgKyBleHRyYVByb3BlcnRpZXMgKyAnXCInKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlzRXF1YWwgPSB0aGlzLl9nZXRDb21wYXJlRm9yVHlwZShkZWYudHlwZSk7XG4gICAgICAgICAgICBvbkNoYW5nZSA9IHRoaXMuX2dldE9uQ2hhbmdlRm9yVHlwZShkZWYudHlwZSk7XG4gICAgICAgICAgICBkYXRhVHlwZSA9IHRoaXMuX2RhdGFUeXBlc1tkZWYudHlwZV07XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIHR5cGUgaWYgd2UgaGF2ZSBvbmVcbiAgICAgICAgICAgIGlmIChkYXRhVHlwZSAmJiBkYXRhVHlwZS5zZXQpIHtcbiAgICAgICAgICAgICAgICBjYXN0ID0gZGF0YVR5cGUuc2V0KG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgbmV3VmFsID0gY2FzdC52YWw7XG4gICAgICAgICAgICAgICAgbmV3VHlwZSA9IGNhc3QudHlwZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgd2UndmUgZGVmaW5lZCBhIHRlc3QsIHJ1biBpdFxuICAgICAgICAgICAgaWYgKGRlZi50ZXN0KSB7XG4gICAgICAgICAgICAgICAgZXJyID0gZGVmLnRlc3QuY2FsbCh0aGlzLCBuZXdWYWwsIG5ld1R5cGUpO1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvcGVydHkgXFwnJyArIGF0dHIgKyAnXFwnIGZhaWxlZCB2YWxpZGF0aW9uIHdpdGggZXJyb3I6ICcgKyBlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgd2UgYXJlIHJlcXVpcmVkIGJ1dCB1bmRlZmluZWQsIHRocm93IGVycm9yLlxuICAgICAgICAgICAgLy8gSWYgd2UgYXJlIG51bGwgYW5kIGFyZSBub3QgYWxsb3dpbmcgbnVsbCwgdGhyb3cgZXJyb3JcbiAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBkZWZpbmVkIHR5cGUgYW5kIHRoZSBuZXcgdHlwZSBkb2Vzbid0IG1hdGNoLCBhbmQgd2UgYXJlIG5vdCBudWxsLCB0aHJvdyBlcnJvci5cbiAgICAgICAgICAgIC8vIElmIHdlIHJlcXVpcmUgc3BlY2lmaWMgdmFsdWUgYW5kIG5ldyBvbmUgaXMgbm90IG9uZSBvZiB0aGVtLCB0aHJvdyBlcnJvciAodW5sZXNzIGl0IGhhcyBkZWZhdWx0IHZhbHVlIG9yIHdlJ3JlIHVuc2V0dGluZyBpdCB3aXRoIHVuZGVmaW5lZCkuXG5cbiAgICAgICAgICAgIGlmIChuZXdWYWwgPT09IHVuZGVmaW5lZCAmJiBkZWYucmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1aXJlZCBwcm9wZXJ0eSBcXCcnICsgYXR0ciArICdcXCcgbXVzdCBiZSBvZiB0eXBlICcgKyBkZWYudHlwZSArICcuIFRyaWVkIHRvIHNldCAnICsgbmV3VmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXdWYWwgPT09IG51bGwgJiYgZGVmLnJlcXVpcmVkICYmICFkZWYuYWxsb3dOdWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvcGVydHkgXFwnJyArIGF0dHIgKyAnXFwnIG11c3QgYmUgb2YgdHlwZSAnICsgZGVmLnR5cGUgKyAnIChjYW5ub3QgYmUgbnVsbCkuIFRyaWVkIHRvIHNldCAnICsgbmV3VmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoZGVmLnR5cGUgJiYgZGVmLnR5cGUgIT09ICdhbnknICYmIGRlZi50eXBlICE9PSBuZXdUeXBlKSAmJiBuZXdWYWwgIT09IG51bGwgJiYgbmV3VmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9wZXJ0eSBcXCcnICsgYXR0ciArICdcXCcgbXVzdCBiZSBvZiB0eXBlICcgKyBkZWYudHlwZSArICcuIFRyaWVkIHRvIHNldCAnICsgbmV3VmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkZWYudmFsdWVzICYmICFpbmNsdWRlcyhkZWYudmFsdWVzLCBuZXdWYWwpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlZmF1bHRWYWx1ZSA9IHJlc3VsdChkZWYsICdkZWZhdWx0Jyk7XG4gICAgICAgICAgICAgICAgaWYgKHVuc2V0ICYmIGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbCA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF1bnNldCB8fCAodW5zZXQgJiYgbmV3VmFsICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3BlcnR5IFxcJycgKyBhdHRyICsgJ1xcJyBtdXN0IGJlIG9uZSBvZiB2YWx1ZXM6ICcgKyBkZWYudmFsdWVzLmpvaW4oJywgJykgKyAnLiBUcmllZCB0byBzZXQgJyArIG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBXZSBrbm93IHRoaXMgaGFzICdjaGFuZ2VkJyBpZiBpdCdzIHRoZSBpbml0aWFsIHNldCwgc28gc2tpcCBhIHBvdGVudGlhbGx5IGV4cGVuc2l2ZSBpc0VxdWFsIGNoZWNrLlxuICAgICAgICAgICAgaGFzQ2hhbmdlZCA9IGluaXRpYWwgfHwgIWlzRXF1YWwoY3VycmVudFZhbCwgbmV3VmFsLCBhdHRyKTtcblxuICAgICAgICAgICAgLy8gZW5mb3JjZSBgc2V0T25jZWAgZm9yIHByb3BlcnRpZXMgaWYgc2V0XG4gICAgICAgICAgICBpZiAoZGVmLnNldE9uY2UgJiYgY3VycmVudFZhbCAhPT0gdW5kZWZpbmVkICYmIGhhc0NoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9wZXJ0eSBcXCcnICsgYXR0ciArICdcXCcgY2FuIG9ubHkgYmUgc2V0IG9uY2UuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHNldC91bnNldCBhdHRyaWJ1dGVzLlxuICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBub3QgdGhlIGluaXRpYWwgc2V0LCBrZWVwIHRyYWNrIG9mIGNoYW5nZWQgYXR0cmlidXRlc1xuICAgICAgICAgICAgLy8gYW5kIHB1c2ggdG8gY2hhbmdlRXZlbnRzIGFycmF5IHNvIHdlIGNhbiBmaXJlIGV2ZW50cy5cbiAgICAgICAgICAgIGlmIChoYXNDaGFuZ2VkKSB7XG5cbiAgICAgICAgICAgICAgICAvLyBUaGlzIGZpcmVzIG5vIG1hdHRlciB3aGF0LCBldmVuIG9uIGluaXRpYWwgc2V0LlxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlKG5ld1ZhbCwgY3VycmVudFZhbCwgYXR0cik7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY2hhbmdlIChub3QgYW4gaW5pdGlhbCBzZXQpLCBtYXJrIHRoZSBjaGFuZ2UuXG4gICAgICAgICAgICAgICAgLy8gTm90ZSBpdCdzIGltcG9zc2libGUgdG8gdW5zZXQgb24gdGhlIGluaXRpYWwgc2V0IChpdCB3aWxsIGFscmVhZHkgYmUgdW5zZXQpLFxuICAgICAgICAgICAgICAgIC8vIHNvIHdlIG9ubHkgaW5jbHVkZSB0aGF0IGxvZ2ljIGhlcmUuXG4gICAgICAgICAgICAgICAgaWYgKCFpbml0aWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZWRbYXR0cl0gPSBuZXdWYWw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlc1thdHRyXSA9IGN1cnJlbnRWYWw7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1bnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUUgZGVsZXRlIGlzIHZlcnkgc2xvdy4gQ2FuIHdlIGdldCBhd2F5IHdpdGggc2V0dGluZyB0byB1bmRlZmluZWQ/XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fdmFsdWVzW2F0dHJdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2lsZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VFdmVudHMucHVzaCh7cHJldjogY3VycmVudFZhbCwgdmFsOiBuZXdWYWwsIGtleTogYXR0cn0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdW5zZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzW2F0dHJdID0gbmV3VmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTm90IGNoYW5nZWRcbiAgICAgICAgICAgICAgICAvLyBGSVhNRSBkZWxldGUgaXMgdmVyeSBzbG93LiBDYW4gd2UgZ2V0IGF3YXkgd2l0aCBzZXR0aW5nIHRvIHVuZGVmaW5lZD9cbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fY2hhbmdlZFthdHRyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpcmUgZXZlbnRzLiBUaGlzIGFycmF5IGlzIG5vdCBwb3B1bGF0ZWQgaWYgd2UgYXJlIHRvbGQgdG8gYmUgc2lsZW50LlxuICAgICAgICBpZiAoY2hhbmdlRXZlbnRzLmxlbmd0aCkgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIGNoYW5nZUV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChjaGFuZ2UpIHtcbiAgICAgICAgICAgIHNlbGYudHJpZ2dlcignY2hhbmdlOicgKyBjaGFuZ2Uua2V5LCBzZWxmLCBjaGFuZ2UudmFsLCBvcHRpb25zKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gWW91IG1pZ2h0IGJlIHdvbmRlcmluZyB3aHkgdGhlcmUncyBhIGB3aGlsZWAgbG9vcCBoZXJlLiBDaGFuZ2VzIGNhblxuICAgICAgICAvLyBiZSByZWN1cnNpdmVseSBuZXN0ZWQgd2l0aGluIGBcImNoYW5nZVwiYCBldmVudHMuXG4gICAgICAgIGlmICh3YXNDaGFuZ2luZykgcmV0dXJuIHRoaXM7XG4gICAgICAgIHdoaWxlICh0aGlzLl9wZW5kaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2NoYW5nZScsIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbmdpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIGdldDogZnVuY3Rpb24gKGF0dHIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbYXR0cl07XG4gICAgfSxcblxuICAgIC8vIFRvZ2dsZSBib29sZWFuIHByb3BlcnRpZXMgb3IgcHJvcGVydGllcyB0aGF0IGhhdmUgYSBgdmFsdWVzYFxuICAgIC8vIGFycmF5IGluIGl0cyBkZWZpbml0aW9uLlxuICAgIHRvZ2dsZTogZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICAgIHZhciBkZWYgPSB0aGlzLl9kZWZpbml0aW9uW3Byb3BlcnR5XTtcbiAgICAgICAgaWYgKGRlZi50eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIC8vIGlmIGl0J3MgYSBib29sLCBqdXN0IGZsaXAgaXRcbiAgICAgICAgICAgIHRoaXNbcHJvcGVydHldID0gIXRoaXNbcHJvcGVydHldO1xuICAgICAgICB9IGVsc2UgaWYgKGRlZiAmJiBkZWYudmFsdWVzKSB7XG4gICAgICAgICAgICAvLyBJZiBpdCdzIGEgcHJvcGVydHkgd2l0aCBhbiBhcnJheSBvZiB2YWx1ZXNcbiAgICAgICAgICAgIC8vIHNraXAgdG8gdGhlIG5leHQgb25lIGxvb3BpbmcgYmFjayBpZiBhdCBlbmQuXG4gICAgICAgICAgICB0aGlzW3Byb3BlcnR5XSA9IGFycmF5TmV4dChkZWYudmFsdWVzLCB0aGlzW3Byb3BlcnR5XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW4gb25seSB0b2dnbGUgcHJvcGVydGllcyB0aGF0IGFyZSB0eXBlIGBib29sZWFuYCBvciBoYXZlIGB2YWx1ZXNgIGFycmF5LicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyBHZXQgYWxsIG9mIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBtb2RlbCBhdCB0aGUgdGltZSBvZiB0aGUgcHJldmlvdXNcbiAgICAvLyBgXCJjaGFuZ2VcImAgZXZlbnQuXG4gICAgcHJldmlvdXNBdHRyaWJ1dGVzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBjbG9uZU9iaih0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXMpO1xuICAgIH0sXG5cbiAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIG1vZGVsIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IGBcImNoYW5nZVwiYCBldmVudC5cbiAgICAvLyBJZiB5b3Ugc3BlY2lmeSBhbiBhdHRyaWJ1dGUgbmFtZSwgZGV0ZXJtaW5lIGlmIHRoYXQgYXR0cmlidXRlIGhhcyBjaGFuZ2VkLlxuICAgIGhhc0NoYW5nZWQ6IGZ1bmN0aW9uIChhdHRyKSB7XG4gICAgICAgIGlmIChhdHRyID09IG51bGwpIHJldHVybiAhIU9iamVjdC5rZXlzKHRoaXMuX2NoYW5nZWQpLmxlbmd0aDtcbiAgICAgICAgaWYgKGhhcyh0aGlzLl9kZXJpdmVkLCBhdHRyKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rlcml2ZWRbYXR0cl0uZGVwTGlzdC5zb21lKGZ1bmN0aW9uIChkZXApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYXNDaGFuZ2VkKGRlcCk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFzKHRoaXMuX2NoYW5nZWQsIGF0dHIpO1xuICAgIH0sXG5cbiAgICAvLyBSZXR1cm4gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBjaGFuZ2VkLCBvclxuICAgIC8vIGZhbHNlIGlmIHRoZXJlIGFyZSBubyBjaGFuZ2VkIGF0dHJpYnV0ZXMuIFVzZWZ1bCBmb3IgZGV0ZXJtaW5pbmcgd2hhdFxuICAgIC8vIHBhcnRzIG9mIGEgdmlldyBuZWVkIHRvIGJlIHVwZGF0ZWQgYW5kL29yIHdoYXQgYXR0cmlidXRlcyBuZWVkIHRvIGJlXG4gICAgLy8gcGVyc2lzdGVkIHRvIHRoZSBzZXJ2ZXIuIFVuc2V0IGF0dHJpYnV0ZXMgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICAgIC8vIFlvdSBjYW4gYWxzbyBwYXNzIGFuIGF0dHJpYnV0ZXMgb2JqZWN0IHRvIGRpZmYgYWdhaW5zdCB0aGUgbW9kZWwsXG4gICAgLy8gZGV0ZXJtaW5pbmcgaWYgdGhlcmUgKndvdWxkIGJlKiBhIGNoYW5nZS5cbiAgICBjaGFuZ2VkQXR0cmlidXRlczogZnVuY3Rpb24gKGRpZmYpIHtcbiAgICAgICAgaWYgKCFkaWZmKSByZXR1cm4gdGhpcy5oYXNDaGFuZ2VkKCkgPyBjbG9uZU9iaih0aGlzLl9jaGFuZ2VkKSA6IGZhbHNlO1xuICAgICAgICB2YXIgdmFsLCBjaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIHZhciBvbGQgPSB0aGlzLl9jaGFuZ2luZyA/IHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcyA6IHRoaXMuYXR0cmlidXRlcztcbiAgICAgICAgdmFyIGRlZiwgaXNFcXVhbDtcbiAgICAgICAgZm9yICh2YXIgYXR0ciBpbiBkaWZmKSB7XG4gICAgICAgICAgICBkZWYgPSB0aGlzLl9kZWZpbml0aW9uW2F0dHJdO1xuICAgICAgICAgICAgaWYgKCFkZWYpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaXNFcXVhbCA9IHRoaXMuX2dldENvbXBhcmVGb3JUeXBlKGRlZi50eXBlKTtcbiAgICAgICAgICAgIGlmIChpc0VxdWFsKG9sZFthdHRyXSwgKHZhbCA9IGRpZmZbYXR0cl0pKSkgY29udGludWU7XG4gICAgICAgICAgICAoY2hhbmdlZCB8fCAoY2hhbmdlZCA9IHt9KSlbYXR0cl0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoYW5nZWQ7XG4gICAgfSxcblxuICAgIHRvSlNPTjogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXJpYWxpemUoKTtcbiAgICB9LFxuXG4gICAgdW5zZXQ6IGZ1bmN0aW9uIChhdHRycywgb3B0aW9ucykge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIGF0dHJzID0gQXJyYXkuaXNBcnJheShhdHRycykgPyBhdHRycyA6IFthdHRyc107XG4gICAgICAgIGF0dHJzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgdmFyIGRlZiA9IHNlbGYuX2RlZmluaXRpb25ba2V5XTtcbiAgICAgICAgICAgIGlmICghZGVmKSByZXR1cm47XG4gICAgICAgICAgICB2YXIgdmFsO1xuICAgICAgICAgICAgaWYgKGRlZi5yZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIHZhbCA9IHJlc3VsdChkZWYsICdkZWZhdWx0Jyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0KGtleSwgdmFsLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0KGtleSwgdmFsLCBhc3NpZ24oe30sIG9wdGlvbnMsIHt1bnNldDogdHJ1ZX0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGNsZWFyOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBzZWxmLnVuc2V0KGtleSwgb3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgcHJldmlvdXM6IGZ1bmN0aW9uIChhdHRyKSB7XG4gICAgICAgIGlmIChhdHRyID09IG51bGwgfHwgIU9iamVjdC5rZXlzKHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcykubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlc1thdHRyXTtcbiAgICB9LFxuXG4gICAgLy8gR2V0IGRlZmF1bHQgdmFsdWVzIGZvciBhIGNlcnRhaW4gdHlwZVxuICAgIF9nZXREZWZhdWx0Rm9yVHlwZTogZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgICAgdmFyIGRhdGFUeXBlID0gdGhpcy5fZGF0YVR5cGVzW3R5cGVdO1xuICAgICAgICByZXR1cm4gZGF0YVR5cGUgJiYgZGF0YVR5cGVbJ2RlZmF1bHQnXTtcbiAgICB9LFxuXG4gICAgLy8gRGV0ZXJtaW5lIHdoaWNoIGNvbXBhcmlzb24gYWxnb3JpdGhtIHRvIHVzZSBmb3IgY29tcGFyaW5nIGEgcHJvcGVydHlcbiAgICBfZ2V0Q29tcGFyZUZvclR5cGU6IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIHZhciBkYXRhVHlwZSA9IHRoaXMuX2RhdGFUeXBlc1t0eXBlXTtcbiAgICAgICAgaWYgKGRhdGFUeXBlICYmIGRhdGFUeXBlLmNvbXBhcmUpIHJldHVybiBkYXRhVHlwZS5jb21wYXJlLmJpbmQodGhpcyk7XG4gICAgICAgIHJldHVybiBfaXNFcXVhbDsgLy8gaWYgbm8gY29tcGFyZSBmdW5jdGlvbiBpcyBkZWZpbmVkLCB1c2UgXy5pc0VxdWFsXG4gICAgfSxcblxuICAgIF9nZXRPbkNoYW5nZUZvclR5cGUgOiBmdW5jdGlvbih0eXBlKXtcbiAgICAgICAgdmFyIGRhdGFUeXBlID0gdGhpcy5fZGF0YVR5cGVzW3R5cGVdO1xuICAgICAgICBpZiAoZGF0YVR5cGUgJiYgZGF0YVR5cGUub25DaGFuZ2UpIHJldHVybiBkYXRhVHlwZS5vbkNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICByZXR1cm4gbm9vcDtcbiAgICB9LFxuXG4gICAgLy8gUnVuIHZhbGlkYXRpb24gYWdhaW5zdCB0aGUgbmV4dCBjb21wbGV0ZSBzZXQgb2YgbW9kZWwgYXR0cmlidXRlcyxcbiAgICAvLyByZXR1cm5pbmcgYHRydWVgIGlmIGFsbCBpcyB3ZWxsLiBPdGhlcndpc2UsIGZpcmUgYW4gYFwiaW52YWxpZFwiYCBldmVudC5cbiAgICBfdmFsaWRhdGU6IGZ1bmN0aW9uIChhdHRycywgb3B0aW9ucykge1xuICAgICAgICBpZiAoIW9wdGlvbnMudmFsaWRhdGUgfHwgIXRoaXMudmFsaWRhdGUpIHJldHVybiB0cnVlO1xuICAgICAgICBhdHRycyA9IGFzc2lnbih7fSwgdGhpcy5hdHRyaWJ1dGVzLCBhdHRycyk7XG4gICAgICAgIHZhciBlcnJvciA9IHRoaXMudmFsaWRhdGlvbkVycm9yID0gdGhpcy52YWxpZGF0ZShhdHRycywgb3B0aW9ucykgfHwgbnVsbDtcbiAgICAgICAgaWYgKCFlcnJvcikgcmV0dXJuIHRydWU7XG4gICAgICAgIHRoaXMudHJpZ2dlcignaW52YWxpZCcsIHRoaXMsIGVycm9yLCBhc3NpZ24ob3B0aW9ucyB8fCB7fSwge3ZhbGlkYXRpb25FcnJvcjogZXJyb3J9KSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgX2NyZWF0ZVByb3BlcnR5RGVmaW5pdGlvbjogZnVuY3Rpb24gKG5hbWUsIGRlc2MsIGlzU2Vzc2lvbikge1xuICAgICAgICByZXR1cm4gY3JlYXRlUHJvcGVydHlEZWZpbml0aW9uKHRoaXMsIG5hbWUsIGRlc2MsIGlzU2Vzc2lvbik7XG4gICAgfSxcblxuICAgIC8vIGp1c3QgbWFrZXMgZnJpZW5kbGllciBlcnJvcnMgd2hlbiB0cnlpbmcgdG8gZGVmaW5lIGEgbmV3IG1vZGVsXG4gICAgLy8gb25seSB1c2VkIHdoZW4gc2V0dGluZyB1cCBvcmlnaW5hbCBwcm9wZXJ0eSBkZWZpbml0aW9uc1xuICAgIF9lbnN1cmVWYWxpZFR5cGU6IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIHJldHVybiBpbmNsdWRlcyhbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbicsICdhcnJheScsICdvYmplY3QnLCAnZGF0ZScsICdzdGF0ZScsICdhbnknXVxuICAgICAgICAgICAgLmNvbmNhdChPYmplY3Qua2V5cyh0aGlzLl9kYXRhVHlwZXMpKSwgdHlwZSkgPyB0eXBlIDogdW5kZWZpbmVkO1xuICAgIH0sXG5cbiAgICBnZXRBdHRyaWJ1dGVzOiBmdW5jdGlvbiAob3B0aW9ucywgcmF3KSB7XG4gICAgICAgIG9wdGlvbnMgPSBhc3NpZ24oe1xuICAgICAgICAgICAgc2Vzc2lvbjogZmFsc2UsXG4gICAgICAgICAgICBwcm9wczogZmFsc2UsXG4gICAgICAgICAgICBkZXJpdmVkOiBmYWxzZVxuICAgICAgICB9LCBvcHRpb25zIHx8IHt9KTtcbiAgICAgICAgdmFyIHJlcyA9IHt9O1xuICAgICAgICB2YXIgdmFsLCBkZWY7XG4gICAgICAgIGZvciAodmFyIGl0ZW0gaW4gdGhpcy5fZGVmaW5pdGlvbikge1xuICAgICAgICAgICAgZGVmID0gdGhpcy5fZGVmaW5pdGlvbltpdGVtXTtcbiAgICAgICAgICAgIGlmICgob3B0aW9ucy5zZXNzaW9uICYmIGRlZi5zZXNzaW9uKSB8fCAob3B0aW9ucy5wcm9wcyAmJiAhZGVmLnNlc3Npb24pKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gcmF3ID8gdGhpcy5fdmFsdWVzW2l0ZW1dIDogdGhpc1tpdGVtXTtcbiAgICAgICAgICAgICAgICBpZiAocmF3ICYmIHZhbCAmJiBpc0Z1bmN0aW9uKHZhbC5zZXJpYWxpemUpKSB2YWwgPSB2YWwuc2VyaWFsaXplKCk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnKSB2YWwgPSByZXN1bHQoZGVmLCAnZGVmYXVsdCcpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsICE9PSAndW5kZWZpbmVkJykgcmVzW2l0ZW1dID0gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmRlcml2ZWQpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGRlcml2ZWRJdGVtIGluIHRoaXMuX2Rlcml2ZWQpIHJlc1tkZXJpdmVkSXRlbV0gPSB0aGlzW2Rlcml2ZWRJdGVtXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG5cbiAgICBfaW5pdERlcml2ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIGZvck93bih0aGlzLl9kZXJpdmVkLCBmdW5jdGlvbiAodmFsdWUsIG5hbWUpIHtcbiAgICAgICAgICAgIHZhciBkZWYgPSBzZWxmLl9kZXJpdmVkW25hbWVdO1xuICAgICAgICAgICAgZGVmLmRlcHMgPSBkZWYuZGVwTGlzdDtcblxuICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgbmV3VmFsID0gZGVmLmZuLmNhbGwoc2VsZik7XG5cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5fY2FjaGVbbmFtZV0gIT09IG5ld1ZhbCB8fCAhZGVmLmNhY2hlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWYuY2FjaGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3ByZXZpb3VzQXR0cmlidXRlc1tuYW1lXSA9IHNlbGYuX2NhY2hlW25hbWVdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlW25hbWVdID0gbmV3VmFsO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ2NoYW5nZTonICsgbmFtZSwgc2VsZiwgc2VsZi5fY2FjaGVbbmFtZV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGRlZi5kZXBzLmZvckVhY2goZnVuY3Rpb24gKHByb3BTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9rZXlUcmVlLmFkZChwcm9wU3RyaW5nLCB1cGRhdGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub24oJ2FsbCcsIGZ1bmN0aW9uIChldmVudE5hbWUpIHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VSRS50ZXN0KGV2ZW50TmFtZSkpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9rZXlUcmVlLmdldChldmVudE5hbWUuc3BsaXQoJzonKVsxXSkuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfSxcblxuICAgIF9nZXREZXJpdmVkUHJvcGVydHk6IGZ1bmN0aW9uIChuYW1lLCBmbHVzaENhY2hlKSB7XG4gICAgICAgIC8vIGlzIHRoaXMgYSBkZXJpdmVkIHByb3BlcnR5IHRoYXQgaXMgY2FjaGVkXG4gICAgICAgIGlmICh0aGlzLl9kZXJpdmVkW25hbWVdLmNhY2hlKSB7XG4gICAgICAgICAgICAvL3NldCBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lLCBvciBmbHVzaENhY2hlIGlzIHNldFxuICAgICAgICAgICAgaWYgKGZsdXNoQ2FjaGUgfHwgIXRoaXMuX2NhY2hlLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVbbmFtZV0gPSB0aGlzLl9kZXJpdmVkW25hbWVdLmZuLmFwcGx5KHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlW25hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rlcml2ZWRbbmFtZV0uZm4uYXBwbHkodGhpcyk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX2luaXRDb2xsZWN0aW9uczogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY29sbDtcbiAgICAgICAgaWYgKCF0aGlzLl9jb2xsZWN0aW9ucykgcmV0dXJuO1xuICAgICAgICBmb3IgKGNvbGwgaW4gdGhpcy5fY29sbGVjdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuX3NhZmVTZXQoY29sbCwgbmV3IHRoaXMuX2NvbGxlY3Rpb25zW2NvbGxdKG51bGwsIHtwYXJlbnQ6IHRoaXN9KSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX2luaXRDaGlsZHJlbjogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY2hpbGQ7XG4gICAgICAgIGlmICghdGhpcy5fY2hpbGRyZW4pIHJldHVybjtcbiAgICAgICAgZm9yIChjaGlsZCBpbiB0aGlzLl9jaGlsZHJlbikge1xuICAgICAgICAgICAgdGhpcy5fc2FmZVNldChjaGlsZCwgbmV3IHRoaXMuX2NoaWxkcmVuW2NoaWxkXSh7fSwge3BhcmVudDogdGhpc30pKTtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuVG8odGhpc1tjaGlsZF0sICdhbGwnLCB0aGlzLl9nZXRDYWNoZWRFdmVudEJ1YmJsaW5nSGFuZGxlcihjaGlsZCkpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgYSBib3VuZCBoYW5kbGVyIGZvciBkb2luZyBldmVudCBidWJibGluZyB3aGlsZVxuICAgIC8vIGFkZGluZyBhIG5hbWUgdG8gdGhlIGNoYW5nZSBzdHJpbmcuXG4gICAgX2dldENhY2hlZEV2ZW50QnViYmxpbmdIYW5kbGVyOiBmdW5jdGlvbiAocHJvcGVydHlOYW1lKSB7XG4gICAgICAgIGlmICghdGhpcy5fZXZlbnRCdWJibGluZ0hhbmRsZXJDYWNoZVtwcm9wZXJ0eU5hbWVdKSB7XG4gICAgICAgICAgICB0aGlzLl9ldmVudEJ1YmJsaW5nSGFuZGxlckNhY2hlW3Byb3BlcnR5TmFtZV0gPSBmdW5jdGlvbiAobmFtZSwgbW9kZWwsIG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoYW5nZVJFLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdjaGFuZ2U6JyArIHByb3BlcnR5TmFtZSArICcuJyArIG5hbWUuc3BsaXQoJzonKVsxXSwgbW9kZWwsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdjaGFuZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignY2hhbmdlJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9ldmVudEJ1YmJsaW5nSGFuZGxlckNhY2hlW3Byb3BlcnR5TmFtZV07XG4gICAgfSxcblxuICAgIC8vIENoZWNrIHRoYXQgYWxsIHJlcXVpcmVkIGF0dHJpYnV0ZXMgYXJlIHByZXNlbnRcbiAgICBfdmVyaWZ5UmVxdWlyZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGF0dHJzID0gdGhpcy5hdHRyaWJ1dGVzOyAvLyBzaG91bGQgaW5jbHVkZSBzZXNzaW9uXG4gICAgICAgIGZvciAodmFyIGRlZiBpbiB0aGlzLl9kZWZpbml0aW9uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZGVmaW5pdGlvbltkZWZdLnJlcXVpcmVkICYmIHR5cGVvZiBhdHRyc1tkZWZdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuXG4gICAgLy8gZXhwb3NlIHNhZmVTZXQgbWV0aG9kXG4gICAgX3NhZmVTZXQ6IGZ1bmN0aW9uIHNhZmVTZXQocHJvcGVydHksIHZhbHVlKSB7XG4gICAgICAgIGlmIChwcm9wZXJ0eSBpbiB0aGlzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIG5hbWVzcGFjZSBjb2xsaXNpb24gd2hpbGUgc2V0dGluZyBpbnN0YW5jZSBwcm9wZXJ0eSBgJyArIHByb3BlcnR5ICsgJ2AnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzW3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59KTtcblxuLy8gZ2V0dGVyIGZvciBhdHRyaWJ1dGVzXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCYXNlLnByb3RvdHlwZSwge1xuICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVzKHtwcm9wczogdHJ1ZSwgc2Vzc2lvbjogdHJ1ZX0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBhbGw6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAgICAgICBzZXNzaW9uOiB0cnVlLFxuICAgICAgICAgICAgICAgIHByb3BzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGRlcml2ZWQ6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBpc1N0YXRlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZTsgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7IH1cbiAgICB9XG59KTtcblxuLy8gaGVscGVyIGZvciBjcmVhdGluZy9zdG9yaW5nIHByb3BlcnR5IGRlZmluaXRpb25zIGFuZCBjcmVhdGluZ1xuLy8gYXBwcm9wcmlhdGUgZ2V0dGVycy9zZXR0ZXJzXG5mdW5jdGlvbiBjcmVhdGVQcm9wZXJ0eURlZmluaXRpb24ob2JqZWN0LCBuYW1lLCBkZXNjLCBpc1Nlc3Npb24pIHtcbiAgICB2YXIgZGVmID0gb2JqZWN0Ll9kZWZpbml0aW9uW25hbWVdID0ge307XG4gICAgdmFyIHR5cGUsIGRlc2NBcnJheTtcblxuICAgIGlmIChpc1N0cmluZyhkZXNjKSkge1xuICAgICAgICAvLyBncmFiIG91ciB0eXBlIGlmIGFsbCB3ZSd2ZSBnb3QgaXMgYSBzdHJpbmdcbiAgICAgICAgdHlwZSA9IG9iamVjdC5fZW5zdXJlVmFsaWRUeXBlKGRlc2MpO1xuICAgICAgICBpZiAodHlwZSkgZGVmLnR5cGUgPSB0eXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vVHJhbnNmb3JtIGFycmF5IG9mIFsndHlwZScsIHJlcXVpcmVkLCBkZWZhdWx0XSB0byBvYmplY3QgZm9ybVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkZXNjKSkge1xuICAgICAgICAgICAgZGVzY0FycmF5ID0gZGVzYztcbiAgICAgICAgICAgIGRlc2MgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogZGVzY0FycmF5WzBdLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBkZXNjQXJyYXlbMV0sXG4gICAgICAgICAgICAgICAgJ2RlZmF1bHQnOiBkZXNjQXJyYXlbMl1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB0eXBlID0gb2JqZWN0Ll9lbnN1cmVWYWxpZFR5cGUoZGVzYy50eXBlKTtcbiAgICAgICAgaWYgKHR5cGUpIGRlZi50eXBlID0gdHlwZTtcblxuICAgICAgICBpZiAoZGVzYy5yZXF1aXJlZCkgZGVmLnJlcXVpcmVkID0gdHJ1ZTtcblxuICAgICAgICBpZiAoZGVzY1snZGVmYXVsdCddICYmIHR5cGVvZiBkZXNjWydkZWZhdWx0J10gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgJyArIG5hbWUgKyAnIGNhbm5vdCBiZSBhbiBvYmplY3QvYXJyYXksIG11c3QgYmUgYSB2YWx1ZSBvciBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYSB2YWx1ZS9vYmplY3QvYXJyYXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZlsnZGVmYXVsdCddID0gZGVzY1snZGVmYXVsdCddO1xuXG4gICAgICAgIGRlZi5hbGxvd051bGwgPSBkZXNjLmFsbG93TnVsbCA/IGRlc2MuYWxsb3dOdWxsIDogZmFsc2U7XG4gICAgICAgIGlmIChkZXNjLnNldE9uY2UpIGRlZi5zZXRPbmNlID0gdHJ1ZTtcbiAgICAgICAgaWYgKGRlZi5yZXF1aXJlZCAmJiBkZWZbJ2RlZmF1bHQnXSA9PT0gdW5kZWZpbmVkICYmICFkZWYuc2V0T25jZSkgZGVmWydkZWZhdWx0J10gPSBvYmplY3QuX2dldERlZmF1bHRGb3JUeXBlKHR5cGUpO1xuICAgICAgICBkZWYudGVzdCA9IGRlc2MudGVzdDtcbiAgICAgICAgZGVmLnZhbHVlcyA9IGRlc2MudmFsdWVzO1xuICAgIH1cbiAgICBpZiAoaXNTZXNzaW9uKSBkZWYuc2Vzc2lvbiA9IHRydWU7XG5cbiAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgdHlwZSA9IGlzU3RyaW5nKGRlc2MpID8gZGVzYyA6IGRlc2MudHlwZTtcbiAgICAgICAgLy8gVE9ETzogc3RhcnQgdGhyb3dpbmcgYSBUeXBlRXJyb3IgaW4gZnV0dXJlIG1ham9yIHZlcnNpb25zIGluc3RlYWQgb2Ygd2FybmluZ1xuICAgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgZGF0YSB0eXBlIG9mIGAnICsgdHlwZSArICdgIGZvciBgJyArIG5hbWUgKyAnYCBwcm9wZXJ0eS4gVXNlIG9uZSBvZiB0aGUgZGVmYXVsdCB0eXBlcyBvciBkZWZpbmUgeW91ciBvd24nKTtcbiAgICB9XG5cbiAgICAvLyBkZWZpbmUgYSBnZXR0ZXIvc2V0dGVyIG9uIHRoZSBwcm90b3R5cGVcbiAgICAvLyBidXQgdGhleSBnZXQvc2V0IG9uIHRoZSBpbnN0YW5jZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldChuYW1lLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1lvdSBtYXkgYmUgdHJ5aW5nIHRvIGBleHRlbmRgIGEgc3RhdGUgb2JqZWN0IHdpdGggXCInICsgbmFtZSArICdcIiB3aGljaCBoYXMgYmVlbiBkZWZpbmVkIGluIGBwcm9wc2Agb24gdGhlIG9iamVjdCBiZWluZyBleHRlbmRlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5fdmFsdWVzW25hbWVdO1xuICAgICAgICAgICAgdmFyIHR5cGVEZWYgPSB0aGlzLl9kYXRhVHlwZXNbZGVmLnR5cGVdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZURlZiAmJiB0eXBlRGVmLmdldCkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHR5cGVEZWYuZ2V0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRlZmF1bHRWYWx1ZSA9IHJlc3VsdChkZWYsICdkZWZhdWx0Jyk7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZXNbbmFtZV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAvLyBJZiB3ZSd2ZSBzZXQgYSBkZWZhdWx0VmFsdWUsIGZpcmUgYSBjaGFuZ2UgaGFuZGxlciBlZmZlY3RpdmVseSBtYXJraW5nXG4gICAgICAgICAgICAvLyBpdHMgY2hhbmdlIGZyb20gdW5kZWZpbmVkIHRvIHRoZSBkZWZhdWx0IHZhbHVlLlxuICAgICAgICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9uQ2hhbmdlID0gdGhpcy5fZ2V0T25DaGFuZ2VGb3JUeXBlKGRlZi50eXBlKTtcbiAgICAgICAgICAgICAgICBvbkNoYW5nZShkZWZhdWx0VmFsdWUsIHZhbHVlLCBuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBkZWY7XG59XG5cbi8vIGhlbHBlciBmb3IgY3JlYXRpbmcgZGVyaXZlZCBwcm9wZXJ0eSBkZWZpbml0aW9uc1xuZnVuY3Rpb24gY3JlYXRlRGVyaXZlZFByb3BlcnR5KG1vZGVsUHJvdG8sIG5hbWUsIGRlZmluaXRpb24pIHtcbiAgICB2YXIgZGVmID0gbW9kZWxQcm90by5fZGVyaXZlZFtuYW1lXSA9IHtcbiAgICAgICAgZm46IGlzRnVuY3Rpb24oZGVmaW5pdGlvbikgPyBkZWZpbml0aW9uIDogZGVmaW5pdGlvbi5mbixcbiAgICAgICAgY2FjaGU6IChkZWZpbml0aW9uLmNhY2hlICE9PSBmYWxzZSksXG4gICAgICAgIGRlcExpc3Q6IGRlZmluaXRpb24uZGVwcyB8fCBbXVxuICAgIH07XG5cbiAgICAvLyBhZGQgdG8gb3VyIHNoYXJlZCBkZXBlbmRlbmN5IGxpc3RcbiAgICBkZWYuZGVwTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChkZXApIHtcbiAgICAgICAgbW9kZWxQcm90by5fZGVwc1tkZXBdID0gdW5pb24obW9kZWxQcm90by5fZGVwc1tkZXBdIHx8IFtdLCBbbmFtZV0pO1xuICAgIH0pO1xuXG4gICAgLy8gZGVmaW5lZCBhIHRvcC1sZXZlbCBnZXR0ZXIgZm9yIGRlcml2ZWQgbmFtZXNcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kZWxQcm90bywgbmFtZSwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXREZXJpdmVkUHJvcGVydHkobmFtZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImBcIiArIG5hbWUgKyBcImAgaXMgYSBkZXJpdmVkIHByb3BlcnR5LCBpdCBjYW4ndCBiZSBzZXQgZGlyZWN0bHkuXCIpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbnZhciBkYXRhVHlwZXMgPSB7XG4gICAgc3RyaW5nOiB7XG4gICAgICAgICdkZWZhdWx0JzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBkYXRlOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ZhbCkge1xuICAgICAgICAgICAgdmFyIG5ld1R5cGU7XG4gICAgICAgICAgICBpZiAobmV3VmFsID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBuZXdUeXBlID0gdHlwZW9mIG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpc0RhdGUobmV3VmFsKSkge1xuICAgICAgICAgICAgICAgIHZhciBlcnIgPSBudWxsO1xuICAgICAgICAgICAgICAgIHZhciBkYXRlVmFsID0gbmV3IERhdGUobmV3VmFsKS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKGRhdGVWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBuZXdWYWwgY2FudCBiZSBwYXJzZWQsIHRoZW4gdHJ5IHBhcnNlSW50IGZpcnN0XG4gICAgICAgICAgICAgICAgICAgIGRhdGVWYWwgPSBuZXcgRGF0ZShwYXJzZUludChuZXdWYWwsIDEwKSkudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4oZGF0ZVZhbCkpIGVyciA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5ld1ZhbCA9IGRhdGVWYWw7XG4gICAgICAgICAgICAgICAgbmV3VHlwZSA9ICdkYXRlJztcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1R5cGUgPSB0eXBlb2YgbmV3VmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3VHlwZSA9ICdkYXRlJztcbiAgICAgICAgICAgICAgICBuZXdWYWwgPSBuZXdWYWwudmFsdWVPZigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHZhbDogbmV3VmFsLFxuICAgICAgICAgICAgICAgIHR5cGU6IG5ld1R5cGVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGdldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgaWYgKHZhbCA9PSBudWxsKSB7IHJldHVybiB2YWw7IH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWwpO1xuICAgICAgICB9LFxuICAgICAgICAnZGVmYXVsdCc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSgpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBhcnJheToge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdWYWwpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdmFsOiBuZXdWYWwsXG4gICAgICAgICAgICAgICAgdHlwZTogQXJyYXkuaXNBcnJheShuZXdWYWwpID8gJ2FycmF5JyA6IHR5cGVvZiBuZXdWYWxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgICdkZWZhdWx0JzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBvYmplY3Q6IHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3VmFsKSB7XG4gICAgICAgICAgICB2YXIgbmV3VHlwZSA9IHR5cGVvZiBuZXdWYWw7XG4gICAgICAgICAgICAvLyB3ZSBoYXZlIHRvIGhhdmUgYSB3YXkgb2Ygc3VwcG9ydGluZyBcIm1pc3NpbmdcIiBvYmplY3RzLlxuICAgICAgICAgICAgLy8gTnVsbCBpcyBhbiBvYmplY3QsIGJ1dCBzZXR0aW5nIGEgdmFsdWUgdG8gdW5kZWZpbmVkXG4gICAgICAgICAgICAvLyBzaG91bGQgd29yayB0b28sIElNTy4gV2UganVzdCBvdmVycmlkZSBpdCwgaW4gdGhhdCBjYXNlLlxuICAgICAgICAgICAgaWYgKG5ld1R5cGUgIT09ICdvYmplY3QnICYmIG5ld1ZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbmV3VmFsID0gbnVsbDtcbiAgICAgICAgICAgICAgICBuZXdUeXBlID0gJ29iamVjdCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHZhbDogbmV3VmFsLFxuICAgICAgICAgICAgICAgIHR5cGU6IG5ld1R5cGVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgICdkZWZhdWx0JzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvLyB0aGUgYHN0YXRlYCBkYXRhIHR5cGUgaXMgYSBiaXQgc3BlY2lhbCBpbiB0aGF0IHNldHRpbmcgaXQgc2hvdWxkXG4gICAgLy8gYWxzbyBidWJibGUgZXZlbnRzXG4gICAgc3RhdGU6IHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3VmFsKSB7XG4gICAgICAgICAgICB2YXIgaXNJbnN0YW5jZSA9IG5ld1ZhbCBpbnN0YW5jZW9mIEJhc2UgfHwgKG5ld1ZhbCAmJiBuZXdWYWwuaXNTdGF0ZSk7XG4gICAgICAgICAgICBpZiAoaXNJbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbDogbmV3VmFsLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3RhdGUnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsOiBuZXdWYWwsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVvZiBuZXdWYWxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb21wYXJlOiBmdW5jdGlvbiAoY3VycmVudFZhbCwgbmV3VmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFZhbCA9PT0gbmV3VmFsO1xuICAgICAgICB9LFxuXG4gICAgICAgIG9uQ2hhbmdlIDogZnVuY3Rpb24obmV3VmFsLCBwcmV2aW91c1ZhbCwgYXR0cmlidXRlTmFtZSl7XG4gICAgICAgICAgICAvLyBpZiB0aGlzIGhhcyBjaGFuZ2VkIHdlIHdhbnQgdG8gYWxzbyBoYW5kbGVcbiAgICAgICAgICAgIC8vIGV2ZW50IHByb3BhZ2F0aW9uXG4gICAgICAgICAgICBpZiAocHJldmlvdXNWYWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3BMaXN0ZW5pbmcocHJldmlvdXNWYWwsICdhbGwnLCB0aGlzLl9nZXRDYWNoZWRFdmVudEJ1YmJsaW5nSGFuZGxlcihhdHRyaWJ1dGVOYW1lKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuZXdWYWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuVG8obmV3VmFsLCAnYWxsJywgdGhpcy5fZ2V0Q2FjaGVkRXZlbnRCdWJibGluZ0hhbmRsZXIoYXR0cmlidXRlTmFtZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLy8gdGhlIGV4dGVuZCBtZXRob2QgdXNlZCB0byBleHRlbmQgcHJvdG90eXBlcywgbWFpbnRhaW4gaW5oZXJpdGFuY2UgY2hhaW5zIGZvciBpbnN0YW5jZW9mXG4vLyBhbmQgYWxsb3cgZm9yIGFkZGl0aW9ucyB0byB0aGUgbW9kZWwgZGVmaW5pdGlvbnMuXG5mdW5jdGlvbiBleHRlbmQocHJvdG9Qcm9wcykge1xuICAgIC8qanNoaW50IHZhbGlkdGhpczp0cnVlKi9cbiAgICB2YXIgcGFyZW50ID0gdGhpcztcbiAgICB2YXIgY2hpbGQ7XG5cbiAgICAvLyBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBuZXcgc3ViY2xhc3MgaXMgZWl0aGVyIGRlZmluZWQgYnkgeW91XG4gICAgLy8gKHRoZSBcImNvbnN0cnVjdG9yXCIgcHJvcGVydHkgaW4geW91ciBgZXh0ZW5kYCBkZWZpbml0aW9uKSwgb3IgZGVmYXVsdGVkXG4gICAgLy8gYnkgdXMgdG8gc2ltcGx5IGNhbGwgdGhlIHBhcmVudCdzIGNvbnN0cnVjdG9yLlxuICAgIGlmIChwcm90b1Byb3BzICYmIHByb3RvUHJvcHMuaGFzT3duUHJvcGVydHkoJ2NvbnN0cnVjdG9yJykpIHtcbiAgICAgICAgY2hpbGQgPSBwcm90b1Byb3BzLmNvbnN0cnVjdG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIEFkZCBzdGF0aWMgcHJvcGVydGllcyB0byB0aGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZnJvbSBwYXJlbnRcbiAgICBhc3NpZ24oY2hpbGQsIHBhcmVudCk7XG5cbiAgICAvLyBTZXQgdGhlIHByb3RvdHlwZSBjaGFpbiB0byBpbmhlcml0IGZyb20gYHBhcmVudGAsIHdpdGhvdXQgY2FsbGluZ1xuICAgIC8vIGBwYXJlbnRgJ3MgY29uc3RydWN0b3IgZnVuY3Rpb24uXG4gICAgdmFyIFN1cnJvZ2F0ZSA9IGZ1bmN0aW9uICgpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9O1xuICAgIFN1cnJvZ2F0ZS5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlO1xuICAgIGNoaWxkLnByb3RvdHlwZSA9IG5ldyBTdXJyb2dhdGUoKTtcblxuICAgIC8vIHNldCBwcm90b3R5cGUgbGV2ZWwgb2JqZWN0c1xuICAgIGNoaWxkLnByb3RvdHlwZS5fZGVyaXZlZCA9ICBhc3NpZ24oe30sIHBhcmVudC5wcm90b3R5cGUuX2Rlcml2ZWQpO1xuICAgIGNoaWxkLnByb3RvdHlwZS5fZGVwcyA9IGFzc2lnbih7fSwgcGFyZW50LnByb3RvdHlwZS5fZGVwcyk7XG4gICAgY2hpbGQucHJvdG90eXBlLl9kZWZpbml0aW9uID0gYXNzaWduKHt9LCBwYXJlbnQucHJvdG90eXBlLl9kZWZpbml0aW9uKTtcbiAgICBjaGlsZC5wcm90b3R5cGUuX2NvbGxlY3Rpb25zID0gYXNzaWduKHt9LCBwYXJlbnQucHJvdG90eXBlLl9jb2xsZWN0aW9ucyk7XG4gICAgY2hpbGQucHJvdG90eXBlLl9jaGlsZHJlbiA9IGFzc2lnbih7fSwgcGFyZW50LnByb3RvdHlwZS5fY2hpbGRyZW4pO1xuICAgIGNoaWxkLnByb3RvdHlwZS5fZGF0YVR5cGVzID0gYXNzaWduKHt9LCBwYXJlbnQucHJvdG90eXBlLl9kYXRhVHlwZXMgfHwgZGF0YVR5cGVzKTtcblxuICAgIC8vIE1peCBpbiBhbGwgcHJvdG90eXBlIHByb3BlcnRpZXMgdG8gdGhlIHN1YmNsYXNzIGlmIHN1cHBsaWVkLlxuICAgIGlmIChwcm90b1Byb3BzKSB7XG4gICAgICAgIHZhciBvbWl0RnJvbUV4dGVuZCA9IFtcbiAgICAgICAgICAgICdkYXRhVHlwZXMnLCAncHJvcHMnLCAnc2Vzc2lvbicsICdkZXJpdmVkJywgJ2NvbGxlY3Rpb25zJywgJ2NoaWxkcmVuJ1xuICAgICAgICBdO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgZGVmID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgaWYgKGRlZi5kYXRhVHlwZXMpIHtcbiAgICAgICAgICAgICAgICBmb3JPd24oZGVmLmRhdGFUeXBlcywgZnVuY3Rpb24gKGRlZiwgbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZC5wcm90b3R5cGUuX2RhdGFUeXBlc1tuYW1lXSA9IGRlZjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkZWYucHJvcHMpIHtcbiAgICAgICAgICAgICAgICBmb3JPd24oZGVmLnByb3BzLCBmdW5jdGlvbiAoZGVmLCBuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZVByb3BlcnR5RGVmaW5pdGlvbihjaGlsZC5wcm90b3R5cGUsIG5hbWUsIGRlZik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGVmLnNlc3Npb24pIHtcbiAgICAgICAgICAgICAgICBmb3JPd24oZGVmLnNlc3Npb24sIGZ1bmN0aW9uIChkZWYsIG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlUHJvcGVydHlEZWZpbml0aW9uKGNoaWxkLnByb3RvdHlwZSwgbmFtZSwgZGVmLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkZWYuZGVyaXZlZCkge1xuICAgICAgICAgICAgICAgIGZvck93bihkZWYuZGVyaXZlZCwgZnVuY3Rpb24gKGRlZiwgbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGVEZXJpdmVkUHJvcGVydHkoY2hpbGQucHJvdG90eXBlLCBuYW1lLCBkZWYpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRlZi5jb2xsZWN0aW9ucykge1xuICAgICAgICAgICAgICAgIGZvck93bihkZWYuY29sbGVjdGlvbnMsIGZ1bmN0aW9uIChjb25zdHJ1Y3RvciwgbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZC5wcm90b3R5cGUuX2NvbGxlY3Rpb25zW25hbWVdID0gY29uc3RydWN0b3I7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGVmLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgZm9yT3duKGRlZi5jaGlsZHJlbiwgZnVuY3Rpb24gKGNvbnN0cnVjdG9yLCBuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLnByb3RvdHlwZS5fY2hpbGRyZW5bbmFtZV0gPSBjb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzc2lnbihjaGlsZC5wcm90b3R5cGUsIG9taXQoZGVmLCBvbWl0RnJvbUV4dGVuZCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IGEgY29udmVuaWVuY2UgcHJvcGVydHkgaW4gY2FzZSB0aGUgcGFyZW50J3MgcHJvdG90eXBlIGlzIG5lZWRlZFxuICAgIC8vIGxhdGVyLlxuICAgIGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59XG5cbkJhc2UuZXh0ZW5kID0gZXh0ZW5kO1xuXG4vLyBPdXIgbWFpbiBleHBvcnRzXG5tb2R1bGUuZXhwb3J0cyA9IEJhc2U7XG4iLCJ2YXIgeGhyID0gcmVxdWlyZSgneGhyJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29yZScpKHhocik7XG4iLCIvKiRBTVBFUlNBTkRfVkVSU0lPTiovXG52YXIgcmVzdWx0ID0gcmVxdWlyZSgnbG9kYXNoL3Jlc3VsdCcpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnbG9kYXNoL2RlZmF1bHRzJyk7XG52YXIgaW5jbHVkZXMgPSByZXF1aXJlKCdsb2Rhc2gvaW5jbHVkZXMnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdsb2Rhc2gvYXNzaWduJyk7XG52YXIgcXMgPSByZXF1aXJlKCdxcycpO1xudmFyIG1lZGlhVHlwZSA9IHJlcXVpcmUoJ21lZGlhLXR5cGUnKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh4aHIpIHtcblxuICAvLyBUaHJvdyBhbiBlcnJvciB3aGVuIGEgVVJMIGlzIG5lZWRlZCwgYW5kIG5vbmUgaXMgc3VwcGxpZWQuXG4gIHZhciB1cmxFcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQSBcInVybFwiIHByb3BlcnR5IG9yIGZ1bmN0aW9uIG11c3QgYmUgc3BlY2lmaWVkJyk7XG4gIH07XG5cbiAgLy8gTWFwIGZyb20gQ1JVRCB0byBIVFRQIGZvciBvdXIgZGVmYXVsdCBgQmFja2JvbmUuc3luY2AgaW1wbGVtZW50YXRpb24uXG4gIHZhciBtZXRob2RNYXAgPSB7XG4gICAgICAnY3JlYXRlJzogJ1BPU1QnLFxuICAgICAgJ3VwZGF0ZSc6ICdQVVQnLFxuICAgICAgJ3BhdGNoJzogICdQQVRDSCcsXG4gICAgICAnZGVsZXRlJzogJ0RFTEVURScsXG4gICAgICAncmVhZCc6ICAgJ0dFVCdcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKG1ldGhvZCwgbW9kZWwsIG9wdGlvbnNJbnB1dCkge1xuICAgICAgLy9Db3B5IHRoZSBvcHRpb25zIG9iamVjdC4gSXQncyB1c2luZyBhc3NpZ24gaW5zdGVhZCBvZiBjbG9uZWRlZXAgYXMgYW4gb3B0aW1pemF0aW9uLlxuICAgICAgLy9UaGUgb25seSBvYmplY3Qgd2UgY291bGQgZXhwZWN0IGluIG9wdGlvbnMgaXMgaGVhZGVycywgd2hpY2ggaXMgc2FmZWx5IHRyYW5zZmVyZWQgYmVsb3cuXG4gICAgICB2YXIgb3B0aW9ucyA9IGFzc2lnbih7fSxvcHRpb25zSW5wdXQpO1xuICAgICAgdmFyIHR5cGUgPSBtZXRob2RNYXBbbWV0aG9kXTtcbiAgICAgIHZhciBoZWFkZXJzID0ge307XG5cbiAgICAgIC8vIERlZmF1bHQgb3B0aW9ucywgdW5sZXNzIHNwZWNpZmllZC5cbiAgICAgIGRlZmF1bHRzKG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSksIHtcbiAgICAgICAgICBlbXVsYXRlSFRUUDogZmFsc2UsXG4gICAgICAgICAgZW11bGF0ZUpTT046IGZhbHNlLFxuICAgICAgICAgIC8vIG92ZXJyaWRlYWJsZSBwcmltYXJpbHkgdG8gZW5hYmxlIHRlc3RpbmdcbiAgICAgICAgICB4aHJJbXBsZW1lbnRhdGlvbjogeGhyXG4gICAgICB9KTtcblxuICAgICAgLy8gRGVmYXVsdCByZXF1ZXN0IG9wdGlvbnMuXG4gICAgICB2YXIgcGFyYW1zID0ge3R5cGU6IHR5cGV9O1xuXG4gICAgICB2YXIgYWpheENvbmZpZyA9IHJlc3VsdChtb2RlbCwgJ2FqYXhDb25maWcnLCB7fSk7XG4gICAgICB2YXIga2V5O1xuICAgICAgLy8gQ29tYmluZSBnZW5lcmF0ZWQgaGVhZGVycyB3aXRoIHVzZXIncyBoZWFkZXJzLlxuICAgICAgaWYgKGFqYXhDb25maWcuaGVhZGVycykge1xuICAgICAgICAgIGZvciAoa2V5IGluIGFqYXhDb25maWcuaGVhZGVycykge1xuICAgICAgICAgICAgICBoZWFkZXJzW2tleS50b0xvd2VyQ2FzZSgpXSA9IGFqYXhDb25maWcuaGVhZGVyc1trZXldO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICBmb3IgKGtleSBpbiBvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgaGVhZGVyc1trZXkudG9Mb3dlckNhc2UoKV0gPSBvcHRpb25zLmhlYWRlcnNba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVsZXRlIG9wdGlvbnMuaGVhZGVycztcbiAgICAgIH1cbiAgICAgIC8vYWpheENvbmZpZyBoYXMgdG8gYmUgbWVyZ2VkIGludG8gcGFyYW1zIGJlZm9yZSBvdGhlciBvcHRpb25zIHRha2UgZWZmZWN0LCBzbyBpdCBpcyBpbiBmYWN0IGEgMmx2bCBkZWZhdWx0XG4gICAgICBhc3NpZ24ocGFyYW1zLCBhamF4Q29uZmlnKTtcbiAgICAgIHBhcmFtcy5oZWFkZXJzID0gaGVhZGVycztcblxuICAgICAgLy8gRW5zdXJlIHRoYXQgd2UgaGF2ZSBhIFVSTC5cbiAgICAgIGlmICghb3B0aW9ucy51cmwpIHtcbiAgICAgICAgICBvcHRpb25zLnVybCA9IHJlc3VsdChtb2RlbCwgJ3VybCcpIHx8IHVybEVycm9yKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IHdlIGhhdmUgdGhlIGFwcHJvcHJpYXRlIHJlcXVlc3QgZGF0YS5cbiAgICAgIGlmIChvcHRpb25zLmRhdGEgPT0gbnVsbCAmJiBtb2RlbCAmJiAobWV0aG9kID09PSAnY3JlYXRlJyB8fCBtZXRob2QgPT09ICd1cGRhdGUnIHx8IG1ldGhvZCA9PT0gJ3BhdGNoJykpIHtcbiAgICAgICAgICBwYXJhbXMuanNvbiA9IG9wdGlvbnMuYXR0cnMgfHwgbW9kZWwudG9KU09OKG9wdGlvbnMpO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBwYXNzZWQgYSBkYXRhIHBhcmFtLCB3ZSBhZGQgaXQgdG8gdGhlIFVSTCBvciBib2R5IGRlcGVuZGluZyBvbiByZXF1ZXN0IHR5cGVcbiAgICAgIGlmIChvcHRpb25zLmRhdGEgJiYgdHlwZSA9PT0gJ0dFVCcpIHtcbiAgICAgICAgICAvLyBtYWtlIHN1cmUgd2UndmUgZ290IGEgJz8nXG4gICAgICAgICAgb3B0aW9ucy51cmwgKz0gaW5jbHVkZXMob3B0aW9ucy51cmwsICc/JykgPyAnJicgOiAnPyc7XG4gICAgICAgICAgb3B0aW9ucy51cmwgKz0gcXMuc3RyaW5naWZ5KG9wdGlvbnMuZGF0YSk7XG4gICAgICAgICAgLy9kZWxldGUgYGRhdGFgIHNvIGB4aHJgIGRvZXNuJ3QgdXNlIGl0IGFzIGEgYm9keVxuICAgICAgICAgIGRlbGV0ZSBvcHRpb25zLmRhdGE7XG4gICAgICB9XG5cbiAgICAgIC8vIEZvciBvbGRlciBzZXJ2ZXJzLCBlbXVsYXRlIEpTT04gYnkgZW5jb2RpbmcgdGhlIHJlcXVlc3QgaW50byBhbiBIVE1MLWZvcm0uXG4gICAgICBpZiAob3B0aW9ucy5lbXVsYXRlSlNPTikge1xuICAgICAgICAgIHBhcmFtcy5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnO1xuICAgICAgICAgIHBhcmFtcy5ib2R5ID0gcGFyYW1zLmpzb24gPyB7bW9kZWw6IHBhcmFtcy5qc29ufSA6IHt9O1xuICAgICAgICAgIGRlbGV0ZSBwYXJhbXMuanNvbjtcbiAgICAgIH1cblxuICAgICAgLy8gRm9yIG9sZGVyIHNlcnZlcnMsIGVtdWxhdGUgSFRUUCBieSBtaW1pY2tpbmcgdGhlIEhUVFAgbWV0aG9kIHdpdGggYF9tZXRob2RgXG4gICAgICAvLyBBbmQgYW4gYFgtSFRUUC1NZXRob2QtT3ZlcnJpZGVgIGhlYWRlci5cbiAgICAgIGlmIChvcHRpb25zLmVtdWxhdGVIVFRQICYmICh0eXBlID09PSAnUFVUJyB8fCB0eXBlID09PSAnREVMRVRFJyB8fCB0eXBlID09PSAnUEFUQ0gnKSkge1xuICAgICAgICAgIHBhcmFtcy50eXBlID0gJ1BPU1QnO1xuICAgICAgICAgIGlmIChvcHRpb25zLmVtdWxhdGVKU09OKSBwYXJhbXMuYm9keS5fbWV0aG9kID0gdHlwZTtcbiAgICAgICAgICBwYXJhbXMuaGVhZGVyc1sneC1odHRwLW1ldGhvZC1vdmVycmlkZSddID0gdHlwZTtcbiAgICAgIH1cblxuICAgICAgLy8gV2hlbiBlbXVsYXRpbmcgSlNPTiwgd2UgdHVybiB0aGUgYm9keSBpbnRvIGEgcXVlcnlzdHJpbmcuXG4gICAgICAvLyBXZSBkbyB0aGlzIGxhdGVyIHRvIGxldCB0aGUgZW11bGF0ZUhUVFAgcnVuIGl0cyBjb3Vyc2UuXG4gICAgICBpZiAob3B0aW9ucy5lbXVsYXRlSlNPTikge1xuICAgICAgICAgIHBhcmFtcy5ib2R5ID0gcXMuc3RyaW5naWZ5KHBhcmFtcy5ib2R5KTtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IHJhdyBYTUxIdHRwUmVxdWVzdCBvcHRpb25zLlxuICAgICAgaWYgKGFqYXhDb25maWcueGhyRmllbGRzKSB7XG4gICAgICAgICAgdmFyIGJlZm9yZVNlbmQgPSBhamF4Q29uZmlnLmJlZm9yZVNlbmQ7XG4gICAgICAgICAgcGFyYW1zLmJlZm9yZVNlbmQgPSBmdW5jdGlvbiAocmVxKSB7XG4gICAgICAgICAgICAgIGFzc2lnbihyZXEsIGFqYXhDb25maWcueGhyRmllbGRzKTtcbiAgICAgICAgICAgICAgaWYgKGJlZm9yZVNlbmQpIHJldHVybiBiZWZvcmVTZW5kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBwYXJhbXMueGhyRmllbGRzID0gYWpheENvbmZpZy54aHJGaWVsZHM7XG4gICAgICB9XG5cbiAgICAgIC8vIFR1cm4gYSBqUXVlcnkuYWpheCBmb3JtYXR0ZWQgcmVxdWVzdCBpbnRvIHhociBjb21wYXRpYmxlXG4gICAgICBwYXJhbXMubWV0aG9kID0gcGFyYW1zLnR5cGU7XG5cbiAgICAgIHZhciBhamF4U2V0dGluZ3MgPSBhc3NpZ24ocGFyYW1zLCBvcHRpb25zKTtcblxuICAgICAgLy8gTWFrZSB0aGUgcmVxdWVzdC4gVGhlIGNhbGxiYWNrIGV4ZWN1dGVzIGZ1bmN0aW9ucyB0aGF0IGFyZSBjb21wYXRpYmxlXG4gICAgICAvLyBXaXRoIGpRdWVyeS5hamF4J3Mgc3ludGF4LlxuICAgICAgdmFyIHJlcXVlc3QgPSBvcHRpb25zLnhockltcGxlbWVudGF0aW9uKGFqYXhTZXR0aW5ncywgZnVuY3Rpb24gKGVyciwgcmVzcCwgYm9keSkge1xuICAgICAgICAgIGlmIChlcnIgfHwgcmVzcC5zdGF0dXNDb2RlID49IDQwMCkge1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gSlNPTi5wYXJzZShib2R5KTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSl7fVxuICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSAoZXJyPyBlcnIubWVzc2FnZSA6IChib2R5IHx8IFwiSFRUUFwiK3Jlc3Auc3RhdHVzQ29kZSkpO1xuICAgICAgICAgICAgICAgICAgb3B0aW9ucy5lcnJvcihyZXNwLCAnZXJyb3InLCBtZXNzYWdlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFBhcnNlIGJvZHkgYXMgSlNPTlxuICAgICAgICAgICAgICB2YXIgYWNjZXB0ID0gbWVkaWFUeXBlLmZyb21TdHJpbmcocGFyYW1zLmhlYWRlcnMuYWNjZXB0KTtcbiAgICAgICAgICAgICAgdmFyIHBhcnNlSnNvbiA9IGFjY2VwdC5pc1ZhbGlkKCkgJiYgYWNjZXB0LnR5cGUgPT09ICdhcHBsaWNhdGlvbicgJiYgKGFjY2VwdC5zdWJ0eXBlID09PSAnanNvbicgfHwgYWNjZXB0LnN1ZmZpeCA9PT0gJ2pzb24nKTtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyAmJiBib2R5ICE9PSAnJyAmJiAoIXBhcmFtcy5oZWFkZXJzLmFjY2VwdCB8fCBwYXJzZUpzb24pKSB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSBKU09OLnBhcnNlKGJvZHkpO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZXJyb3IpIG9wdGlvbnMuZXJyb3IocmVzcCwgJ2Vycm9yJywgZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFsd2F5cykgb3B0aW9ucy5hbHdheXMoZXJyLCByZXNwLCBib2R5KTtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3VjY2Vzcykgb3B0aW9ucy5zdWNjZXNzKGJvZHksICdzdWNjZXNzJywgcmVzcCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRpb25zLmFsd2F5cykgb3B0aW9ucy5hbHdheXMoZXJyLCByZXNwLCBib2R5KTtcbiAgICAgIH0pO1xuICAgICAgaWYgKG1vZGVsKSBtb2RlbC50cmlnZ2VyKCdyZXF1ZXN0JywgbW9kZWwsIHJlcXVlc3QsIG9wdGlvbnNJbnB1dCwgYWpheFNldHRpbmdzKTtcbiAgICAgIHJlcXVlc3QuYWpheFNldHRpbmdzID0gYWpheFNldHRpbmdzO1xuICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gIH07XG59O1xuIiwiLyokQU1QRVJTQU5EX1ZFUlNJT04qL1xuZnVuY3Rpb24gVmlld1N3aXRjaGVyKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zIHx8IChvcHRpb25zID0ge30pO1xuICAgIHRoaXMuZWwgPSBvcHRpb25zLmVsO1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgICBoaWRlOiBudWxsLFxuICAgICAgICBzaG93OiBudWxsLFxuICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgcHJlcGVuZDogZmFsc2UsXG4gICAgICAgIHdhaXRGb3JSZW1vdmU6IGZhbHNlLFxuICAgICAgICBhdXRvUmVuZGVyOiB0cnVlXG4gICAgfTtcbiAgICBmb3IgKHZhciBpdGVtIGluIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmhhc093blByb3BlcnR5KGl0ZW0pKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ1tpdGVtXSA9IG9wdGlvbnNbaXRlbV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdGhpcy5fc2V0Q3VycmVudChvcHRpb25zLnZpZXcpO1xuICAgIGlmICh0aGlzLmNvbmZpZy5hdXRvUmVuZGVyKSB0aGlzLnJlbmRlcigpO1xufVxuXG5WaWV3U3dpdGNoZXIucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBwcmV2ID0gdGhpcy5wcmV2aW91cyA9IHRoaXMuY3VycmVudDtcblxuICAgIGlmIChwcmV2ID09PSB2aWV3KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcud2FpdEZvclJlbW92ZSkge1xuICAgICAgICB0aGlzLm5leHQgPSB2aWV3O1xuICAgICAgICB0aGlzLl9oaWRlKHByZXYsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLm5leHQgPT09IHZpZXcpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgc2VsZi5uZXh0O1xuICAgICAgICAgICAgICAgIHNlbGYuX3Nob3codmlldyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2hpZGUocHJldik7XG4gICAgICAgIHRoaXMuX3Nob3codmlldyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuVmlld1N3aXRjaGVyLnByb3RvdHlwZS5fc2V0Q3VycmVudCA9IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgdGhpcy5jdXJyZW50ID0gdmlldztcbiAgICBpZiAodmlldykgdGhpcy5fcmVnaXN0ZXJSZW1vdmVMaXN0ZW5lcih2aWV3KTtcbiAgICB2YXIgZW1wdHlDYiA9IHRoaXMuY29uZmlnLmVtcHR5O1xuICAgIGlmIChlbXB0eUNiICYmICF0aGlzLmN1cnJlbnQpIHtcbiAgICAgICAgZW1wdHlDYigpO1xuICAgIH1cbiAgICByZXR1cm4gdmlldztcbn07XG5cblZpZXdTd2l0Y2hlci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB0aGlzLl9oaWRlKHRoaXMuY3VycmVudCwgY2IpO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLy8gSWYgdGhlIHZpZXcgc3dpdGNoZXIgaXRzZWxmIGlzIHJlbW92ZWQsIHJlbW92ZSBpdHMgY2hpbGQgdG8gYXZvaWQgbWVtb3J5IGxlYWtzXG5WaWV3U3dpdGNoZXIucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50KSB0aGlzLmN1cnJlbnQucmVtb3ZlKCk7XG4gICAgaWYgKHRoaXMucHJldmlvdXMpIHRoaXMucHJldmlvdXMucmVtb3ZlKCk7XG4gICAgaWYgKHRoaXMuZWwgJiYgdGhpcy5lbC5wYXJlbnROb2RlKSB0aGlzLmVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5lbCk7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5WaWV3U3dpdGNoZXIucHJvdG90eXBlLl9zaG93ID0gZnVuY3Rpb24gKHZpZXcpIHtcbiAgICB2YXIgY3VzdG9tU2hvdyA9IHRoaXMuY29uZmlnLnNob3c7XG4gICAgdGhpcy5fc2V0Q3VycmVudCh2aWV3KTtcbiAgICB0aGlzLl9yZW5kZXIodmlldyk7XG4gICAgaWYgKGN1c3RvbVNob3cpIGN1c3RvbVNob3codmlldyk7XG59O1xuXG5WaWV3U3dpdGNoZXIucHJvdG90eXBlLl9yZWdpc3RlclJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKHZpZXcpIHtcbiAgICBpZiAodmlldyAmJiB2aWV3Lm9uY2UpIHZpZXcub25jZSgncmVtb3ZlJywgdGhpcy5fb25WaWV3UmVtb3ZlLCB0aGlzKTtcbn07XG5cblZpZXdTd2l0Y2hlci5wcm90b3R5cGUuX29uVmlld1JlbW92ZSA9IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgdmFyIGVtcHR5Q2IgPSB0aGlzLmNvbmZpZy5lbXB0eTtcbiAgICBpZiAodGhpcy5jdXJyZW50ID09PSB2aWV3KSB7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICAgIGlmIChlbXB0eUNiICYmICF0aGlzLmN1cnJlbnQpIHtcbiAgICAgICAgZW1wdHlDYigpO1xuICAgIH1cbn07XG5cblZpZXdTd2l0Y2hlci5wcm90b3R5cGUuX3JlbmRlciA9IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgaWYgKCF0aGlzLmVsKSByZXR1cm47XG4gICAgaWYgKCF2aWV3LnJlbmRlcmVkKSB2aWV3LnJlbmRlcih7Y29udGFpbmVyRWw6IHRoaXMuZWx9KTtcbiAgICBpZiAoIXZpZXcuaW5zZXJ0U2VsZikge1xuICAgICAgICBpZiAodGhpcy5jb25maWcucHJlcGVuZCkge1xuICAgICAgICAgICAgdGhpcy5lbC5pbnNlcnRCZWZvcmUodmlldy5lbCwgdGhpcy5lbC5maXJzdENoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZWwuYXBwZW5kQ2hpbGQodmlldy5lbCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5WaWV3U3dpdGNoZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50ICYmICF0aGlzLl9yZW5kZXJlZCkge1xuICAgICAgICB0aGlzLl9yZW5kZXIodGhpcy5jdXJyZW50KTtcbiAgICB9XG4gICAgLy9zZXQgcmVuZGVyZWQsIGVsIGV4aXN0cyBldmVuIGlmIGEgY3VycmVudCB2aWV3IHdhcyBub3QgaW5zZXJ0ZWQvYXBwZW5kZWRcbiAgICB0aGlzLl9yZW5kZXJlZCA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5WaWV3U3dpdGNoZXIucHJvdG90eXBlLl9oaWRlID0gZnVuY3Rpb24gKHZpZXcsIGNiKSB7XG4gICAgdmFyIGN1c3RvbUhpZGUgPSB0aGlzLmNvbmZpZy5oaWRlO1xuICAgIGlmICghdmlldykgcmV0dXJuIGNiICYmIGNiKCk7XG4gICAgaWYgKGN1c3RvbUhpZGUpIHtcbiAgICAgICAgaWYgKGN1c3RvbUhpZGUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBjdXN0b21IaWRlKHZpZXcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2aWV3LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChjYikgY2IoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3VzdG9tSGlkZSh2aWV3KTtcbiAgICAgICAgICAgIHZpZXcucmVtb3ZlKCk7XG4gICAgICAgICAgICBpZiAoY2IpIGNiKCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB2aWV3LnJlbW92ZSgpO1xuICAgICAgICBpZiAoY2IpIGNiKCk7XG4gICAgfVxufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IFZpZXdTd2l0Y2hlcjtcbiIsIi8qJEFNUEVSU0FORF9WRVJTSU9OKi9cbnZhciBTdGF0ZSA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1zdGF0ZScpO1xudmFyIENvbGxlY3Rpb25WaWV3ID0gcmVxdWlyZSgnYW1wZXJzYW5kLWNvbGxlY3Rpb24tdmlldycpO1xudmFyIGRvbWlmeSA9IHJlcXVpcmUoJ2RvbWlmeScpO1xudmFyIHVuaXF1ZUlkID0gcmVxdWlyZShcImxvZGFzaC91bmlxdWVJZFwiKTtcbnZhciBwaWNrID0gcmVxdWlyZShcImxvZGFzaC9waWNrXCIpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCJsb2Rhc2gvYXNzaWduXCIpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKFwibG9kYXNoL2ZvckVhY2hcIik7XG52YXIgcmVzdWx0ID0gcmVxdWlyZShcImxvZGFzaC9yZXN1bHRcIik7XG52YXIgbGFzdCA9IHJlcXVpcmUoXCJsb2Rhc2gvbGFzdFwiKTtcbnZhciBpc1N0cmluZyA9IHJlcXVpcmUoXCJsb2Rhc2gvaXNTdHJpbmdcIik7XG52YXIgYmluZCA9IHJlcXVpcmUoXCJsb2Rhc2gvYmluZFwiKTtcbnZhciBmbGF0dGVuID0gcmVxdWlyZShcImxvZGFzaC9mbGF0dGVuXCIpO1xudmFyIGludm9rZU1hcCA9IHJlcXVpcmUoXCJsb2Rhc2gvaW52b2tlTWFwXCIpO1xudmFyIGV2ZW50cyA9IHJlcXVpcmUoJ2V2ZW50cy1taXhpbicpO1xudmFyIG1hdGNoZXMgPSByZXF1aXJlKCdtYXRjaGVzLXNlbGVjdG9yJyk7XG52YXIgYmluZGluZ3MgPSByZXF1aXJlKCdhbXBlcnNhbmQtZG9tLWJpbmRpbmdzJyk7XG52YXIgZ2V0UGF0aCA9IHJlcXVpcmUoJ2xvZGFzaC9nZXQnKTtcblxuZnVuY3Rpb24gVmlldyhhdHRycykge1xuICAgIHRoaXMuY2lkID0gdW5pcXVlSWQoJ3ZpZXcnKTtcbiAgICBhdHRycyB8fCAoYXR0cnMgPSB7fSk7XG4gICAgdmFyIHBhcmVudCA9IGF0dHJzLnBhcmVudDtcbiAgICBkZWxldGUgYXR0cnMucGFyZW50O1xuICAgIEJhc2VTdGF0ZS5jYWxsKHRoaXMsIGF0dHJzLCB7aW5pdDogZmFsc2UsIHBhcmVudDogcGFyZW50fSk7XG4gICAgdGhpcy5vbignY2hhbmdlOmVsJywgdGhpcy5faGFuZGxlRWxlbWVudENoYW5nZSwgdGhpcyk7XG4gICAgdGhpcy5fdXBzZXJ0QmluZGluZ3MoKTtcbiAgICB0aGlzLnRlbXBsYXRlID0gYXR0cnMudGVtcGxhdGUgfHwgdGhpcy50ZW1wbGF0ZTtcbiAgICB0aGlzLl9jYWNoZS5yZW5kZXJlZCA9IGZhbHNlOyAvLyBwcmVwIGByZW5kZXJlZGAgZGVyaXZlZCBjYWNoZSBpbW1lZGlhdGVseVxuICAgIHRoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh0aGlzLmF1dG9SZW5kZXIgJiYgdGhpcy50ZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cbn1cblxudmFyIEJhc2VTdGF0ZSA9IFN0YXRlLmV4dGVuZCh7XG4gICAgZGF0YVR5cGVzOiB7XG4gICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ZhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbDogbmV3VmFsLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBuZXdWYWwgaW5zdGFuY2VvZiBFbGVtZW50ID8gJ2VsZW1lbnQnIDogdHlwZW9mIG5ld1ZhbFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGFyZTogZnVuY3Rpb24gKGVsMSwgZWwyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsMSA9PT0gZWwyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb2xsZWN0aW9uOiB7XG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdWYWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB2YWw6IG5ld1ZhbCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogbmV3VmFsICYmIG5ld1ZhbC5pc0NvbGxlY3Rpb24gPyAnY29sbGVjdGlvbicgOiB0eXBlb2YgbmV3VmFsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wYXJlOiBmdW5jdGlvbiAoY3VycmVudFZhbCwgbmV3VmFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRWYWwgPT09IG5ld1ZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgbW9kZWw6ICdzdGF0ZScsXG4gICAgICAgIGVsOiAnZWxlbWVudCcsXG4gICAgICAgIGNvbGxlY3Rpb246ICdjb2xsZWN0aW9uJyxcbiAgICB9LFxuICAgIHNlc3Npb246IHtcbiAgICAgICAgX3JlbmRlcmVkOiBbJ2Jvb2xlYW4nLCB0cnVlLCBmYWxzZV1cbiAgICB9LFxuICAgIGRlcml2ZWQ6IHtcbiAgICAgICAgaGFzRGF0YToge1xuICAgICAgICAgICAgZGVwczogWydtb2RlbCddLFxuICAgICAgICAgICAgZm46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISF0aGlzLm1vZGVsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZW5kZXJlZDoge1xuICAgICAgICAgICAgZGVwczogWydfcmVuZGVyZWQnXSxcbiAgICAgICAgICAgIGZuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmVuZGVyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdyZW5kZXInLCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcigncmVtb3ZlJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cblZpZXcucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlU3RhdGUucHJvdG90eXBlKTtcblxudmFyIHF1ZXJ5Tm9FbE1zZyA9ICdRdWVyeSBjYW5ub3QgYmUgcGVyZm9ybWVkIGFzIHRoaXMuZWwgaXMgbm90IGRlZmluZWQuIEVuc3VyZSB0aGF0IHRoZSB2aWV3IGhhcyBiZWVuIHJlbmRlcmVkLic7XG5cbi8vIFNldCB1cCBhbGwgaW5oZXJpdGFibGUgcHJvcGVydGllcyBhbmQgbWV0aG9kcy5cbmFzc2lnbihWaWV3LnByb3RvdHlwZSwge1xuICAgIC8vICMjIHF1ZXJ5XG4gICAgLy8gR2V0IGFuIHNpbmdsZSBlbGVtZW50IGJhc2VkIG9uIENTUyBzZWxlY3RvciBzY29wZWQgdG8gdGhpcy5lbFxuICAgIC8vIGlmIHlvdSBwYXNzIGFuIGVtcHR5IHN0cmluZyBpdCByZXR1cm4gYHRoaXMuZWxgLlxuICAgIC8vIElmIHlvdSBwYXNzIGFuIGVsZW1lbnQgd2UganVzdCByZXR1cm4gaXQgYmFjay5cbiAgICAvLyBUaGlzIGxldHMgdXMgdXNlIGBnZXRgIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB1c2Vyc1xuICAgIC8vIGNhbiBwYXNzIGEgc2VsZWN0b3Igb3IgYW4gYWxyZWFkeSBzZWxlY3RlZCBlbGVtZW50LlxuICAgIHF1ZXJ5OiBmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocXVlcnlOb0VsTXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNlbGVjdG9yKSByZXR1cm4gdGhpcy5lbDtcbiAgICAgICAgaWYgKHR5cGVvZiBzZWxlY3RvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmIChtYXRjaGVzKHRoaXMuZWwsIHNlbGVjdG9yKSkgcmV0dXJuIHRoaXMuZWw7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKSB8fCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yO1xuICAgIH0sXG5cbiAgICAvLyAjIyBxdWVyeUFsbFxuICAgIC8vIFJldHVybnMgYW4gYXJyYXkgb2YgZWxlbWVudHMgYmFzZWQgb24gQ1NTIHNlbGVjdG9yIHNjb3BlZCB0byB0aGlzLmVsXG4gICAgLy8gaWYgeW91IHBhc3MgYW4gZW1wdHkgc3RyaW5nIGl0IHJldHVybiBgdGhpcy5lbGAuIEFsc28gaW5jbHVkZXMgcm9vdFxuICAgIC8vIGVsZW1lbnQuXG4gICAgcXVlcnlBbGw6IGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgICAgICBpZiAoIXRoaXMuZWwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihxdWVyeU5vRWxNc2cpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2VsZWN0b3IpIHJldHVybiBbdGhpcy5lbF07XG4gICAgICAgIHZhciByZXMgPSBbXTtcbiAgICAgICAgaWYgKG1hdGNoZXModGhpcy5lbCwgc2VsZWN0b3IpKSByZXMucHVzaCh0aGlzLmVsKTtcbiAgICAgICAgcmV0dXJuIHJlcy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5lbC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkpO1xuICAgIH0sXG5cbiAgICAvLyAjIyBxdWVyeUJ5SG9va1xuICAgIC8vIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgZmV0Y2hpbmcgZWxlbWVudCBieSBpdCdzIGBkYXRhLWhvb2tgIGF0dHJpYnV0ZS5cbiAgICAvLyBBbHNvIHRyaWVzIHRvIG1hdGNoIGFnYWluc3Qgcm9vdCBlbGVtZW50LlxuICAgIC8vIEFsc28gc3VwcG9ydHMgbWF0Y2hpbmcgJ29uZScgb2Ygc2V2ZXJhbCBzcGFjZSBzZXBhcmF0ZWQgaG9va3MuXG4gICAgcXVlcnlCeUhvb2s6IGZ1bmN0aW9uIChob29rKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5KCdbZGF0YS1ob29rfj1cIicgKyBob29rICsgJ1wiXScpO1xuICAgIH0sXG5cbiAgICAvLyAjIyBxdWVyeUFsbEJ5SG9va1xuICAgIC8vIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgZmV0Y2hpbmcgYWxsIGVsZW1lbnRzIGJ5IHRoZWlyJ3MgYGRhdGEtaG9va2AgYXR0cmlidXRlLlxuICAgIHF1ZXJ5QWxsQnlIb29rOiBmdW5jdGlvbiAoaG9vaykge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVyeUFsbCgnW2RhdGEtaG9va349XCInICsgaG9vayArICdcIl0nKTtcbiAgICB9LFxuXG4gICAgLy8gSW5pdGlhbGl6ZSBpcyBhbiBlbXB0eSBmdW5jdGlvbiBieSBkZWZhdWx0LiBPdmVycmlkZSBpdCB3aXRoIHlvdXIgb3duXG4gICAgLy8gaW5pdGlhbGl6YXRpb24gbG9naWMuXG4gICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKCkge30sXG5cbiAgICAvLyAqKnJlbmRlcioqIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIHRoYXQgeW91ciB2aWV3IGNhbiBvdmVycmlkZS4gSXRzIGpvYiBpc1xuICAgIC8vIHRvIHBvcHVsYXRlIGl0cyBlbGVtZW50IChgdGhpcy5lbGApLCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBIVE1MLlxuICAgIF9yZW5kZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fdXBzZXJ0QmluZGluZ3MoKTtcbiAgICAgICAgdGhpcy5yZW5kZXJXaXRoVGVtcGxhdGUodGhpcyk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8vIFJlbW92ZXMgdGhpcyB2aWV3IGJ5IHRha2luZyB0aGUgZWxlbWVudCBvdXQgb2YgdGhlIERPTSwgYW5kIHJlbW92aW5nIGFueVxuICAgIC8vIGFwcGxpY2FibGUgZXZlbnRzIGxpc3RlbmVycy5cbiAgICBfcmVtb3ZlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmVsICYmIHRoaXMuZWwucGFyZW50Tm9kZSkgdGhpcy5lbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWwpO1xuICAgICAgICB0aGlzLl9yZW5kZXJlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9kb3duc2VydEJpbmRpbmdzKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyBDaGFuZ2UgdGhlIHZpZXcncyBlbGVtZW50IChgdGhpcy5lbGAgcHJvcGVydHkpLCBpbmNsdWRpbmcgZXZlbnRcbiAgICAvLyByZS1kZWxlZ2F0aW9uLlxuICAgIF9oYW5kbGVFbGVtZW50Q2hhbmdlOiBmdW5jdGlvbiAoZWxlbWVudCwgZGVsZWdhdGUpIHtcbiAgICAgICAgaWYgKHRoaXMuZXZlbnRNYW5hZ2VyKSB0aGlzLmV2ZW50TWFuYWdlci51bmJpbmQoKTtcbiAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIgPSBldmVudHModGhpcy5lbCwgdGhpcyk7XG4gICAgICAgIHRoaXMuZGVsZWdhdGVFdmVudHMoKTtcbiAgICAgICAgdGhpcy5fYXBwbHlCaW5kaW5nc0ZvcktleSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLy8gU2V0IGNhbGxiYWNrcywgd2hlcmUgYHRoaXMuZXZlbnRzYCBpcyBhIGhhc2ggb2ZcbiAgICAvL1xuICAgIC8vICp7XCJldmVudCBzZWxlY3RvclwiOiBcImNhbGxiYWNrXCJ9KlxuICAgIC8vXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICAnbW91c2Vkb3duIC50aXRsZSc6ICAnZWRpdCcsXG4gICAgLy8gICAgICAgJ2NsaWNrIC5idXR0b24nOiAgICAgJ3NhdmUnLFxuICAgIC8vICAgICAgICdjbGljayAub3Blbic6ICAgICAgIGZ1bmN0aW9uIChlKSB7IC4uLiB9XG4gICAgLy8gICAgIH1cbiAgICAvL1xuICAgIC8vIHBhaXJzLiBDYWxsYmFja3Mgd2lsbCBiZSBib3VuZCB0byB0aGUgdmlldywgd2l0aCBgdGhpc2Agc2V0IHByb3Blcmx5LlxuICAgIC8vIFVzZXMgZXZlbnQgZGVsZWdhdGlvbiBmb3IgZWZmaWNpZW5jeS5cbiAgICAvLyBPbWl0dGluZyB0aGUgc2VsZWN0b3IgYmluZHMgdGhlIGV2ZW50IHRvIGB0aGlzLmVsYC5cbiAgICAvLyBUaGlzIG9ubHkgd29ya3MgZm9yIGRlbGVnYXRlLWFibGUgZXZlbnRzOiBub3QgYGZvY3VzYCwgYGJsdXJgLCBhbmRcbiAgICAvLyBub3QgYGNoYW5nZWAsIGBzdWJtaXRgLCBhbmQgYHJlc2V0YCBpbiBJbnRlcm5ldCBFeHBsb3Jlci5cbiAgICBkZWxlZ2F0ZUV2ZW50czogZnVuY3Rpb24gKGV2ZW50cykge1xuICAgICAgICBpZiAoIShldmVudHMgfHwgKGV2ZW50cyA9IHJlc3VsdCh0aGlzLCAnZXZlbnRzJykpKSkgcmV0dXJuIHRoaXM7XG4gICAgICAgIHRoaXMudW5kZWxlZ2F0ZUV2ZW50cygpO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gZXZlbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50TWFuYWdlci5iaW5kKGtleSwgZXZlbnRzW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyBDbGVhcnMgYWxsIGNhbGxiYWNrcyBwcmV2aW91c2x5IGJvdW5kIHRvIHRoZSB2aWV3IHdpdGggYGRlbGVnYXRlRXZlbnRzYC5cbiAgICAvLyBZb3UgdXN1YWxseSBkb24ndCBuZWVkIHRvIHVzZSB0aGlzLCBidXQgbWF5IHdpc2ggdG8gaWYgeW91IGhhdmUgbXVsdGlwbGVcbiAgICAvLyBCYWNrYm9uZSB2aWV3cyBhdHRhY2hlZCB0byB0aGUgc2FtZSBET00gZWxlbWVudC5cbiAgICB1bmRlbGVnYXRlRXZlbnRzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLnVuYmluZCgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLy8gIyMgcmVnaXN0ZXJTdWJ2aWV3XG4gICAgLy8gUGFzcyBpdCBhIHZpZXcuIFRoaXMgY2FuIGJlIGFueXRoaW5nIHdpdGggYSBgcmVtb3ZlYCBtZXRob2RcbiAgICByZWdpc3RlclN1YnZpZXc6IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgICAgIC8vIFN0b3JhZ2UgZm9yIG91ciBzdWJ2aWV3cy5cbiAgICAgICAgdGhpcy5fc3Vidmlld3MgPSB0aGlzLl9zdWJ2aWV3cyB8fCBbXTtcbiAgICAgICAgdGhpcy5fc3Vidmlld3MucHVzaCh2aWV3KTtcbiAgICAgICAgLy8gc2V0IHRoZSBwYXJlbnQgcmVmZXJlbmNlIGlmIGl0IGhhcyBub3QgYmVlbiBzZXRcbiAgICAgICAgaWYgKCF2aWV3LnBhcmVudCkgdmlldy5wYXJlbnQgPSB0aGlzO1xuICAgICAgICByZXR1cm4gdmlldztcbiAgICB9LFxuXG4gICAgLy8gIyMgcmVuZGVyU3Vidmlld1xuICAgIC8vIFBhc3MgaXQgYSB2aWV3IGluc3RhbmNlIGFuZCBhIGNvbnRhaW5lciBlbGVtZW50XG4gICAgLy8gdG8gcmVuZGVyIGl0IGluLiBJdCdzIGByZW1vdmVgIG1ldGhvZCB3aWxsIGJlIGNhbGxlZFxuICAgIC8vIHdoZW4gdGhlIHBhcmVudCB2aWV3IGlzIGRlc3Ryb3llZC5cbiAgICByZW5kZXJTdWJ2aWV3OiBmdW5jdGlvbiAodmlldywgY29udGFpbmVyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29udGFpbmVyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29udGFpbmVyID0gdGhpcy5xdWVyeShjb250YWluZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29udGFpbmVyKSBjb250YWluZXIgPSB0aGlzLmVsO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyU3Vidmlldyh2aWV3KTtcbiAgICAgICAgdmlldy5yZW5kZXIoKTtcbiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHZpZXcuZWwpO1xuICAgICAgICByZXR1cm4gdmlldztcbiAgICB9LFxuXG4gICAgX2FwcGx5QmluZGluZ3NGb3JLZXk6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIGlmICghdGhpcy5lbCkgcmV0dXJuO1xuICAgICAgICB2YXIgZm5zID0gdGhpcy5fcGFyc2VkQmluZGluZ3MuZ2V0R3JvdXBlZChuYW1lKTtcbiAgICAgICAgdmFyIGl0ZW07XG4gICAgICAgIGZvciAoaXRlbSBpbiBmbnMpIHtcbiAgICAgICAgICAgIGZuc1tpdGVtXS5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKHRoaXMuZWwsIGdldFBhdGgodGhpcywgaXRlbSksIGxhc3QoaXRlbS5zcGxpdCgnLicpKSk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdGlhbGl6ZUJpbmRpbmdzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5iaW5kaW5ncykgcmV0dXJuO1xuICAgICAgICB0aGlzLm9uKCdhbGwnLCBmdW5jdGlvbiAoZXZlbnROYW1lKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnROYW1lLnNsaWNlKDAsIDcpID09PSAnY2hhbmdlOicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBseUJpbmRpbmdzRm9yS2V5KGV2ZW50TmFtZS5zcGxpdCgnOicpWzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfSxcblxuICAgIC8vICMjIF9pbml0aWFsaXplU3Vidmlld3NcbiAgICAvLyB0aGlzIGlzIGNhbGxlZCBhdCBzZXR1cCBhbmQgZ3JhYnMgZGVjbGFyZWQgc3Vidmlld3NcbiAgICBfaW5pdGlhbGl6ZVN1YnZpZXdzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5zdWJ2aWV3cykgcmV0dXJuO1xuICAgICAgICBmb3IgKHZhciBpdGVtIGluIHRoaXMuc3Vidmlld3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcnNlU3Vidmlldyh0aGlzLnN1YnZpZXdzW2l0ZW1dLCBpdGVtKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyAjIyBfcGFyc2VTdWJ2aWV3XG4gICAgLy8gaGVscGVyIGZvciBwYXJzaW5nIG91dCB0aGUgc3VidmlldyBkZWNsYXJhdGlvbiBhbmQgcmVnaXN0ZXJpbmdcbiAgICAvLyB0aGUgYHdhaXRGb3JgIGlmIG5lZWQgYmUuXG4gICAgX3BhcnNlU3VidmlldzogZnVuY3Rpb24gKHN1YnZpZXcsIG5hbWUpIHtcbiAgICAgICAgLy9iYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zLCB3aGVuIGBjb250YWluZXJgIHdhcyBhIHZhbGlkIHByb3BlcnR5ICgjMTE0KVxuICAgICAgICBpZiAoc3Vidmlldy5jb250YWluZXIpIHtcbiAgICAgICAgICAgIHN1YnZpZXcuc2VsZWN0b3IgPSBzdWJ2aWV3LmNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb3B0cyA9IHRoaXMuX3BhcnNlU3Vidmlld09wdHMoc3Vidmlldyk7XG5cbiAgICAgICAgZnVuY3Rpb24gYWN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGVsLCBzdWJ2aWV3O1xuICAgICAgICAgICAgLy8gaWYgbm90IHJlbmRlcmVkIG9yIHdlIGNhbid0IGZpbmQgb3VyIGVsZW1lbnQsIHN0b3AgaGVyZS5cbiAgICAgICAgICAgIGlmICghdGhpcy5lbCB8fCAhKGVsID0gdGhpcy5xdWVyeShvcHRzLnNlbGVjdG9yKSkpIHJldHVybjtcbiAgICAgICAgICAgIGlmICghb3B0cy53YWl0Rm9yIHx8IGdldFBhdGgodGhpcywgb3B0cy53YWl0Rm9yKSkge1xuICAgICAgICAgICAgICAgIHN1YnZpZXcgPSB0aGlzW25hbWVdID0gb3B0cy5wcmVwYXJlVmlldy5jYWxsKHRoaXMsIGVsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXN1YnZpZXcuZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJTdWJ2aWV3KHN1YnZpZXcsIGVsKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdWJ2aWV3LnJlbmRlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyU3VidmlldyhzdWJ2aWV3KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoJ2NoYW5nZScsIGFjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2UgbGlzdGVuIGZvciBtYWluIGBjaGFuZ2VgIGl0ZW1zXG4gICAgICAgIHRoaXMub24oJ2NoYW5nZScsIGFjdGlvbiwgdGhpcyk7XG4gICAgfSxcblxuICAgIC8vIFBhcnNlcyB0aGUgZGVjbGFyYXRpdmUgc3VidmlldyBkZWZpbml0aW9uLlxuICAgIC8vIFlvdSBtYXkgb3ZlcmxvYWQgdGhpcyBtZXRob2QgdG8gY3JlYXRlIHlvdXIgb3duIGRlY2xhcmF0aXZlIHN1YnZpZXcgc3R5bGUuXG4gICAgLy8gWW91IG11c3QgcmV0dXJuIGFuIG9iamVjdCB3aXRoIG1lbWJlcnMgJ3NlbGVjdG9yJywgJ3dhaXRGb3InIGFuZCAncHJlcGFyZVZpZXcnLlxuICAgIC8vIHdhaXRGb3IgaXMgdHJpZ2dlZCBvbiB0aGUgdmlldyAnY2hhbmdlJyBldmVudCBhbmQgc28gb25lIHdheSB0byBleHRlbmQgdGhlIGRlZmVycmVkIHZpZXdcbiAgICAvLyBjb25zdHJ1Y3Rpb24gaXMgdG8gYWRkIGFuIGFkZGl0aW9uYWwgcHJvcGVydHkgKHByb3BzKSB0byB0aGUgdmlldy4gVGhlbiBzZXR0aW5nIHRoaXMgcHJvcGVydHlcbiAgICAvLyB3aWxsIHNhdGlzZnkgdGhlIHdhaXRGb3IgY29uZGl0aW9uLiBZb3UgY2FuIHRoZW4gZXh0ZW5kIHRoZSBwcmVwYXJlVmlldyBmdW5jdGlvbiB0byBwYXNzIGluXG4gICAgLy8gYWRkaXRpb25hbCBkYXRhIGZyb20gdGhlIHBhcmVudCB2aWV3LiBUaGlzIGNhbiBhbGxvdyB5b3UgdG8gaGF2ZSBtdWx0aS1zdGFnZSByZW5kZXJpbmcgb2ZcbiAgICAvLyBjdXN0b20gZGF0YSBmb3JtYXRzIGFuZCB0byBkZWNsYXJhdGl2ZWx5IGRlZmluZS5cbiAgICBfcGFyc2VTdWJ2aWV3T3B0czogZnVuY3Rpb24gKHN1YnZpZXcpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB2YXIgb3B0cyA9IHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiBzdWJ2aWV3LnNlbGVjdG9yIHx8ICdbZGF0YS1ob29rPVwiJyArIHN1YnZpZXcuaG9vayArICdcIl0nLFxuICAgICAgICAgICAgd2FpdEZvcjogc3Vidmlldy53YWl0Rm9yIHx8ICcnLFxuICAgICAgICAgICAgcHJlcGFyZVZpZXc6IHN1YnZpZXcucHJlcGFyZVZpZXcgfHwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgc3Vidmlldy5jb25zdHJ1Y3Rvcih7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogc2VsZlxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gb3B0cztcbiAgICB9LFxuXG4gICAgLy8gU2hvcnRjdXQgZm9yIGRvaW5nIGV2ZXJ5dGhpbmcgd2UgbmVlZCB0byBkbyB0b1xuICAgIC8vIHJlbmRlciBhbmQgZnVsbHkgcmVwbGFjZSBjdXJyZW50IHJvb3QgZWxlbWVudC5cbiAgICAvLyBFaXRoZXIgZGVmaW5lIGEgYHRlbXBsYXRlYCBwcm9wZXJ0eSBvZiB5b3VyIHZpZXdcbiAgICAvLyBvciBwYXNzIGluIGEgdGVtcGxhdGUgZGlyZWN0bHkuXG4gICAgLy8gVGhlIHRlbXBsYXRlIGNhbiBlaXRoZXIgYmUgYSBzdHJpbmcgb3IgYSBmdW5jdGlvbi5cbiAgICAvLyBJZiBpdCdzIGEgZnVuY3Rpb24gaXQgd2lsbCBiZSBwYXNzZWQgdGhlIGBjb250ZXh0YFxuICAgIC8vIGFyZ3VtZW50LlxuICAgIHJlbmRlcldpdGhUZW1wbGF0ZTogZnVuY3Rpb24gKGNvbnRleHQsIHRlbXBsYXRlQXJnKSB7XG4gICAgICAgIHZhciB0ZW1wbGF0ZSA9IHRlbXBsYXRlQXJnIHx8IHRoaXMudGVtcGxhdGU7XG4gICAgICAgIGlmICghdGVtcGxhdGUpIHRocm93IG5ldyBFcnJvcignVGVtcGxhdGUgc3RyaW5nIG9yIGZ1bmN0aW9uIG5lZWRlZC4nKTtcbiAgICAgICAgdmFyIG5ld0RvbSA9IGlzU3RyaW5nKHRlbXBsYXRlKSA/IHRlbXBsYXRlIDogdGVtcGxhdGUuY2FsbCh0aGlzLCBjb250ZXh0IHx8IHRoaXMpO1xuICAgICAgICBpZiAoaXNTdHJpbmcobmV3RG9tKSkgbmV3RG9tID0gZG9taWZ5KG5ld0RvbSk7XG4gICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLmVsICYmIHRoaXMuZWwucGFyZW50Tm9kZTtcbiAgICAgICAgaWYgKHBhcmVudCkgcGFyZW50LnJlcGxhY2VDaGlsZChuZXdEb20sIHRoaXMuZWwpO1xuICAgICAgICBpZiAobmV3RG9tLm5vZGVOYW1lID09PSAnI2RvY3VtZW50LWZyYWdtZW50JykgdGhyb3cgbmV3IEVycm9yKCdWaWV3cyBjYW4gb25seSBoYXZlIG9uZSByb290IGVsZW1lbnQsIGluY2x1ZGluZyBjb21tZW50IG5vZGVzLicpO1xuICAgICAgICB0aGlzLmVsID0gbmV3RG9tO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLy8gIyMgY2FjaGVFbGVtZW50c1xuICAgIC8vIFRoaXMgaXMgYSBzaG9ydGN1dCBmb3IgYWRkaW5nIHJlZmVyZW5jZSB0byBzcGVjaWZpYyBlbGVtZW50cyB3aXRoaW4geW91ciB2aWV3IGZvclxuICAgIC8vIGFjY2VzcyBsYXRlci4gVGhpcyBhdm9pZHMgZXhjZXNzaXZlIERPTSBxdWVyaWVzIGFuZCBtYWtlcyBpdCBlYXNpZXIgdG8gdXBkYXRlXG4gICAgLy8geW91ciB2aWV3IGlmIHlvdXIgdGVtcGxhdGUgY2hhbmdlcy5cbiAgICAvL1xuICAgIC8vIEluIHlvdXIgYHJlbmRlcmAgbWV0aG9kLiBVc2UgaXQgbGlrZSBzbzpcbiAgICAvL1xuICAgIC8vICAgICByZW5kZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAvLyAgICAgICB0aGlzLmJhc2ljUmVuZGVyKCk7XG4gICAgLy8gICAgICAgdGhpcy5jYWNoZUVsZW1lbnRzKHtcbiAgICAvLyAgICAgICAgIHBhZ2VzOiAnI3BhZ2VzJyxcbiAgICAvLyAgICAgICAgIGNoYXQ6ICcjdGVhbUNoYXQnLFxuICAgIC8vICAgICAgICAgbmF2OiAnbmF2I3ZpZXdzIHVsJyxcbiAgICAvLyAgICAgICAgIG1lOiAnI21lJyxcbiAgICAvLyAgICAgICAgIGNoZWF0U2hlZXQ6ICcjY2hlYXRTaGVldCcsXG4gICAgLy8gICAgICAgICBvbW5pQm94OiAnI2F3ZXNvbWVTYXVjZSdcbiAgICAvLyAgICAgICB9KTtcbiAgICAvLyAgICAgfVxuICAgIC8vXG4gICAgLy8gVGhlbiBsYXRlciB5b3UgY2FuIGFjY2VzcyBlbGVtZW50cyBieSByZWZlcmVuY2UgbGlrZSBzbzogYHRoaXMucGFnZXNgLCBvciBgdGhpcy5jaGF0YC5cbiAgICBjYWNoZUVsZW1lbnRzOiBmdW5jdGlvbiAoaGFzaCkge1xuICAgICAgICBmb3IgKHZhciBpdGVtIGluIGhhc2gpIHtcbiAgICAgICAgICAgIHRoaXNbaXRlbV0gPSB0aGlzLnF1ZXJ5KGhhc2hbaXRlbV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyAjIyBhbmltYXRlUmVtb3ZlXG4gICAgLy8gUGxhY2Vob2xkZXIgZm9yIGlmIHlvdSB3YW50IHRvIGRvIHNvbWV0aGluZyBzcGVjaWFsIHdoZW4gdGhleSdyZSByZW1vdmVkLlxuICAgIC8vIEZvciBleGFtcGxlIGZhZGUgaXQgb3V0LCBldGMuXG4gICAgLy8gQW55IG92ZXJyaWRlIGhlcmUgc2hvdWxkIGNhbGwgYC5yZW1vdmUoKWAgd2hlbiBkb25lLlxuICAgIGFuaW1hdGVSZW1vdmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5yZW1vdmUoKTtcbiAgICB9LFxuXG4gICAgLy8gIyMgcmVuZGVyQ29sbGVjdGlvblxuICAgIC8vIE1ldGhvZCBmb3IgcmVuZGVyaW5nIGEgY29sbGVjdGlvbnMgd2l0aCBpbmRpdmlkdWFsIHZpZXdzLlxuICAgIC8vIEp1c3QgcGFzcyBpdCB0aGUgY29sbGVjdGlvbiwgYW5kIHRoZSB2aWV3IHRvIHVzZSBmb3IgdGhlIGl0ZW1zIGluIHRoZVxuICAgIC8vIGNvbGxlY3Rpb24uIFRoZSBjb2xsZWN0aW9uVmlldyBpcyByZXR1cm5lZC5cbiAgICByZW5kZXJDb2xsZWN0aW9uOiBmdW5jdGlvbiAoY29sbGVjdGlvbiwgVmlld0NsYXNzLCBjb250YWluZXIsIG9wdHMpIHtcbiAgICAgICAgdmFyIGNvbnRhaW5lckVsID0gKHR5cGVvZiBjb250YWluZXIgPT09ICdzdHJpbmcnKSA/IHRoaXMucXVlcnkoY29udGFpbmVyKSA6IGNvbnRhaW5lcjtcbiAgICAgICAgdmFyIGNvbmZpZyA9IGFzc2lnbih7XG4gICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uLFxuICAgICAgICAgICAgZWw6IGNvbnRhaW5lckVsIHx8IHRoaXMuZWwsXG4gICAgICAgICAgICB2aWV3OiBWaWV3Q2xhc3MsXG4gICAgICAgICAgICBwYXJlbnQ6IHRoaXMsXG4gICAgICAgICAgICB2aWV3T3B0aW9uczoge1xuICAgICAgICAgICAgICAgIHBhcmVudDogdGhpc1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBvcHRzKTtcbiAgICAgICAgdmFyIGNvbGxlY3Rpb25WaWV3ID0gbmV3IENvbGxlY3Rpb25WaWV3KGNvbmZpZyk7XG4gICAgICAgIGNvbGxlY3Rpb25WaWV3LnJlbmRlcigpO1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RlclN1YnZpZXcoY29sbGVjdGlvblZpZXcpO1xuICAgIH0sXG5cbiAgICBfc2V0UmVuZGVyOiBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgJ3JlbmRlcicsIHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlcjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIF9zZXRSZW1vdmU6IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCAncmVtb3ZlJywge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVtb3ZlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIF9kb3duc2VydEJpbmRpbmdzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBhcnNlZEJpbmRpbmdzID0gdGhpcy5fcGFyc2VkQmluZGluZ3M7XG4gICAgICAgIGlmICghdGhpcy5iaW5kaW5nc1NldCkgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5fc3Vidmlld3Mpe1xuICAgICAgICAgIGludm9rZU1hcChmbGF0dGVuKHRoaXMuX3N1YnZpZXdzKSwgJ3JlbW92ZScpO1xuICAgICAgICAgIHRoaXMuX3N1YnZpZXdzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nKCk7XG4gICAgICAgIHRoaXMuYmluZGluZ3NTZXQgPSBmYWxzZTtcbiAgICB9LFxuXG4gICAgX3Vwc2VydEJpbmRpbmdzOiBmdW5jdGlvbihhdHRycykge1xuICAgICAgICBhdHRycyA9IGF0dHJzIHx8IHRoaXM7XG4gICAgICAgIGlmICh0aGlzLmJpbmRpbmdzU2V0KSByZXR1cm47XG4gICAgICAgIHRoaXMuX3BhcnNlZEJpbmRpbmdzID0gYmluZGluZ3ModGhpcy5iaW5kaW5ncywgdGhpcyk7XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVCaW5kaW5ncygpO1xuICAgICAgICBpZiAoYXR0cnMuZWwgJiYgIXRoaXMuYXV0b1JlbmRlcikge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlRWxlbWVudENoYW5nZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVTdWJ2aWV3cygpO1xuICAgICAgICB0aGlzLmJpbmRpbmdzU2V0ID0gdHJ1ZTtcbiAgICB9XG59KTtcblxuVmlldy5wcm90b3R5cGUuX3NldFJlbmRlcihWaWV3LnByb3RvdHlwZSk7XG5WaWV3LnByb3RvdHlwZS5fc2V0UmVtb3ZlKFZpZXcucHJvdG90eXBlKTtcblZpZXcuZXh0ZW5kID0gQmFzZVN0YXRlLmV4dGVuZDtcbm1vZHVsZS5leHBvcnRzID0gVmlldztcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYXJyYXlOZXh0KGFycmF5LCBjdXJyZW50SXRlbSkge1xuICAgIHZhciBsZW4gPSBhcnJheS5sZW5ndGg7XG4gICAgdmFyIG5ld0luZGV4ID0gYXJyYXkuaW5kZXhPZihjdXJyZW50SXRlbSkgKyAxO1xuICAgIGlmIChuZXdJbmRleCA+IChsZW4gLSAxKSkgbmV3SW5kZXggPSAwO1xuICAgIHJldHVybiBhcnJheVtuZXdJbmRleF07XG59O1xuIiwiLyohXG4gICogQm9vdHN0cmFwIHY0LjMuMSAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcbiAgKiBDb3B5cmlnaHQgMjAxMS0yMDE5IFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpXG4gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAgKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cywgcmVxdWlyZSgnanF1ZXJ5JyksIHJlcXVpcmUoJ3BvcHBlci5qcycpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnLCAnanF1ZXJ5JywgJ3BvcHBlci5qcyddLCBmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSBnbG9iYWwgfHwgc2VsZiwgZmFjdG9yeShnbG9iYWwuYm9vdHN0cmFwID0ge30sIGdsb2JhbC5qUXVlcnksIGdsb2JhbC5Qb3BwZXIpKTtcbn0odGhpcywgZnVuY3Rpb24gKGV4cG9ydHMsICQsIFBvcHBlcikgeyAndXNlIHN0cmljdCc7XG5cbiAgJCA9ICQgJiYgJC5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdCcpID8gJFsnZGVmYXVsdCddIDogJDtcbiAgUG9wcGVyID0gUG9wcGVyICYmIFBvcHBlci5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdCcpID8gUG9wcGVyWydkZWZhdWx0J10gOiBQb3BwZXI7XG5cbiAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9XG5cbiAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICAgIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG4gICAgICB2YXIgb3duS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG5cbiAgICAgIGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvd25LZXlzID0gb3duS2V5cy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBzeW0pLmVudW1lcmFibGU7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgb3duS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgICBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xuICB9XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCAodjQuMy4xKTogdXRpbC5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBQcml2YXRlIFRyYW5zaXRpb25FbmQgSGVscGVyc1xuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgdmFyIFRSQU5TSVRJT05fRU5EID0gJ3RyYW5zaXRpb25lbmQnO1xuICB2YXIgTUFYX1VJRCA9IDEwMDAwMDA7XG4gIHZhciBNSUxMSVNFQ09ORFNfTVVMVElQTElFUiA9IDEwMDA7IC8vIFNob3V0b3V0IEFuZ3VzQ3JvbGwgKGh0dHBzOi8vZ29vLmdsL3B4d1FHcClcblxuICBmdW5jdGlvbiB0b1R5cGUob2JqKSB7XG4gICAgcmV0dXJuIHt9LnRvU3RyaW5nLmNhbGwob2JqKS5tYXRjaCgvXFxzKFthLXpdKykvaSlbMV0udG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFNwZWNpYWxUcmFuc2l0aW9uRW5kRXZlbnQoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJpbmRUeXBlOiBUUkFOU0lUSU9OX0VORCxcbiAgICAgIGRlbGVnYXRlVHlwZTogVFJBTlNJVElPTl9FTkQsXG4gICAgICBoYW5kbGU6IGZ1bmN0aW9uIGhhbmRsZShldmVudCkge1xuICAgICAgICBpZiAoJChldmVudC50YXJnZXQpLmlzKHRoaXMpKSB7XG4gICAgICAgICAgcmV0dXJuIGV2ZW50LmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmaW5lZFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2l0aW9uRW5kRW11bGF0b3IoZHVyYXRpb24pIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICAgICQodGhpcykub25lKFV0aWwuVFJBTlNJVElPTl9FTkQsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgfSk7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgICBVdGlsLnRyaWdnZXJUcmFuc2l0aW9uRW5kKF90aGlzKTtcbiAgICAgIH1cbiAgICB9LCBkdXJhdGlvbik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uRW5kU3VwcG9ydCgpIHtcbiAgICAkLmZuLmVtdWxhdGVUcmFuc2l0aW9uRW5kID0gdHJhbnNpdGlvbkVuZEVtdWxhdG9yO1xuICAgICQuZXZlbnQuc3BlY2lhbFtVdGlsLlRSQU5TSVRJT05fRU5EXSA9IGdldFNwZWNpYWxUcmFuc2l0aW9uRW5kRXZlbnQoKTtcbiAgfVxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogUHVibGljIFV0aWwgQXBpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgdmFyIFV0aWwgPSB7XG4gICAgVFJBTlNJVElPTl9FTkQ6ICdic1RyYW5zaXRpb25FbmQnLFxuICAgIGdldFVJRDogZnVuY3Rpb24gZ2V0VUlEKHByZWZpeCkge1xuICAgICAgZG8ge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgICBwcmVmaXggKz0gfn4oTWF0aC5yYW5kb20oKSAqIE1BWF9VSUQpOyAvLyBcIn5+XCIgYWN0cyBsaWtlIGEgZmFzdGVyIE1hdGguZmxvb3IoKSBoZXJlXG4gICAgICB9IHdoaWxlIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcmVmaXgpKTtcblxuICAgICAgcmV0dXJuIHByZWZpeDtcbiAgICB9LFxuICAgIGdldFNlbGVjdG9yRnJvbUVsZW1lbnQ6IGZ1bmN0aW9uIGdldFNlbGVjdG9yRnJvbUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgdmFyIHNlbGVjdG9yID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGFyZ2V0Jyk7XG5cbiAgICAgIGlmICghc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09ICcjJykge1xuICAgICAgICB2YXIgaHJlZkF0dHIgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuICAgICAgICBzZWxlY3RvciA9IGhyZWZBdHRyICYmIGhyZWZBdHRyICE9PSAnIycgPyBocmVmQXR0ci50cmltKCkgOiAnJztcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpID8gc2VsZWN0b3IgOiBudWxsO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQ6IGZ1bmN0aW9uIGdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gLy8gR2V0IHRyYW5zaXRpb24tZHVyYXRpb24gb2YgdGhlIGVsZW1lbnRcblxuXG4gICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gJChlbGVtZW50KS5jc3MoJ3RyYW5zaXRpb24tZHVyYXRpb24nKTtcbiAgICAgIHZhciB0cmFuc2l0aW9uRGVsYXkgPSAkKGVsZW1lbnQpLmNzcygndHJhbnNpdGlvbi1kZWxheScpO1xuICAgICAgdmFyIGZsb2F0VHJhbnNpdGlvbkR1cmF0aW9uID0gcGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pO1xuICAgICAgdmFyIGZsb2F0VHJhbnNpdGlvbkRlbGF5ID0gcGFyc2VGbG9hdCh0cmFuc2l0aW9uRGVsYXkpOyAvLyBSZXR1cm4gMCBpZiBlbGVtZW50IG9yIHRyYW5zaXRpb24gZHVyYXRpb24gaXMgbm90IGZvdW5kXG5cbiAgICAgIGlmICghZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24gJiYgIWZsb2F0VHJhbnNpdGlvbkRlbGF5KSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfSAvLyBJZiBtdWx0aXBsZSBkdXJhdGlvbnMgYXJlIGRlZmluZWQsIHRha2UgdGhlIGZpcnN0XG5cblxuICAgICAgdHJhbnNpdGlvbkR1cmF0aW9uID0gdHJhbnNpdGlvbkR1cmF0aW9uLnNwbGl0KCcsJylbMF07XG4gICAgICB0cmFuc2l0aW9uRGVsYXkgPSB0cmFuc2l0aW9uRGVsYXkuc3BsaXQoJywnKVswXTtcbiAgICAgIHJldHVybiAocGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pICsgcGFyc2VGbG9hdCh0cmFuc2l0aW9uRGVsYXkpKSAqIE1JTExJU0VDT05EU19NVUxUSVBMSUVSO1xuICAgIH0sXG4gICAgcmVmbG93OiBmdW5jdGlvbiByZWZsb3coZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgIH0sXG4gICAgdHJpZ2dlclRyYW5zaXRpb25FbmQ6IGZ1bmN0aW9uIHRyaWdnZXJUcmFuc2l0aW9uRW5kKGVsZW1lbnQpIHtcbiAgICAgICQoZWxlbWVudCkudHJpZ2dlcihUUkFOU0lUSU9OX0VORCk7XG4gICAgfSxcbiAgICAvLyBUT0RPOiBSZW1vdmUgaW4gdjVcbiAgICBzdXBwb3J0c1RyYW5zaXRpb25FbmQ6IGZ1bmN0aW9uIHN1cHBvcnRzVHJhbnNpdGlvbkVuZCgpIHtcbiAgICAgIHJldHVybiBCb29sZWFuKFRSQU5TSVRJT05fRU5EKTtcbiAgICB9LFxuICAgIGlzRWxlbWVudDogZnVuY3Rpb24gaXNFbGVtZW50KG9iaikge1xuICAgICAgcmV0dXJuIChvYmpbMF0gfHwgb2JqKS5ub2RlVHlwZTtcbiAgICB9LFxuICAgIHR5cGVDaGVja0NvbmZpZzogZnVuY3Rpb24gdHlwZUNoZWNrQ29uZmlnKGNvbXBvbmVudE5hbWUsIGNvbmZpZywgY29uZmlnVHlwZXMpIHtcbiAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGNvbmZpZ1R5cGVzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29uZmlnVHlwZXMsIHByb3BlcnR5KSkge1xuICAgICAgICAgIHZhciBleHBlY3RlZFR5cGVzID0gY29uZmlnVHlwZXNbcHJvcGVydHldO1xuICAgICAgICAgIHZhciB2YWx1ZSA9IGNvbmZpZ1twcm9wZXJ0eV07XG4gICAgICAgICAgdmFyIHZhbHVlVHlwZSA9IHZhbHVlICYmIFV0aWwuaXNFbGVtZW50KHZhbHVlKSA/ICdlbGVtZW50JyA6IHRvVHlwZSh2YWx1ZSk7XG5cbiAgICAgICAgICBpZiAoIW5ldyBSZWdFeHAoZXhwZWN0ZWRUeXBlcykudGVzdCh2YWx1ZVR5cGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY29tcG9uZW50TmFtZS50b1VwcGVyQ2FzZSgpICsgXCI6IFwiICsgKFwiT3B0aW9uIFxcXCJcIiArIHByb3BlcnR5ICsgXCJcXFwiIHByb3ZpZGVkIHR5cGUgXFxcIlwiICsgdmFsdWVUeXBlICsgXCJcXFwiIFwiKSArIChcImJ1dCBleHBlY3RlZCB0eXBlIFxcXCJcIiArIGV4cGVjdGVkVHlwZXMgKyBcIlxcXCIuXCIpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGZpbmRTaGFkb3dSb290OiBmdW5jdGlvbiBmaW5kU2hhZG93Um9vdChlbGVtZW50KSB7XG4gICAgICBpZiAoIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hdHRhY2hTaGFkb3cpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IC8vIENhbiBmaW5kIHRoZSBzaGFkb3cgcm9vdCBvdGhlcndpc2UgaXQnbGwgcmV0dXJuIHRoZSBkb2N1bWVudFxuXG5cbiAgICAgIGlmICh0eXBlb2YgZWxlbWVudC5nZXRSb290Tm9kZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgcm9vdCA9IGVsZW1lbnQuZ2V0Um9vdE5vZGUoKTtcbiAgICAgICAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgIH0gLy8gd2hlbiB3ZSBkb24ndCBmaW5kIGEgc2hhZG93IHJvb3RcblxuXG4gICAgICBpZiAoIWVsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFV0aWwuZmluZFNoYWRvd1Jvb3QoZWxlbWVudC5wYXJlbnROb2RlKTtcbiAgICB9XG4gIH07XG4gIHNldFRyYW5zaXRpb25FbmRTdXBwb3J0KCk7XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBDb25zdGFudHNcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBOQU1FID0gJ2FsZXJ0JztcbiAgdmFyIFZFUlNJT04gPSAnNC4zLjEnO1xuICB2YXIgREFUQV9LRVkgPSAnYnMuYWxlcnQnO1xuICB2YXIgRVZFTlRfS0VZID0gXCIuXCIgKyBEQVRBX0tFWTtcbiAgdmFyIERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknO1xuICB2YXIgSlFVRVJZX05PX0NPTkZMSUNUID0gJC5mbltOQU1FXTtcbiAgdmFyIFNlbGVjdG9yID0ge1xuICAgIERJU01JU1M6ICdbZGF0YS1kaXNtaXNzPVwiYWxlcnRcIl0nXG4gIH07XG4gIHZhciBFdmVudCA9IHtcbiAgICBDTE9TRTogXCJjbG9zZVwiICsgRVZFTlRfS0VZLFxuICAgIENMT1NFRDogXCJjbG9zZWRcIiArIEVWRU5UX0tFWSxcbiAgICBDTElDS19EQVRBX0FQSTogXCJjbGlja1wiICsgRVZFTlRfS0VZICsgREFUQV9BUElfS0VZXG4gIH07XG4gIHZhciBDbGFzc05hbWUgPSB7XG4gICAgQUxFUlQ6ICdhbGVydCcsXG4gICAgRkFERTogJ2ZhZGUnLFxuICAgIFNIT1c6ICdzaG93J1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIENsYXNzIERlZmluaXRpb25cbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuICB9O1xuXG4gIHZhciBBbGVydCA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEFsZXJ0KGVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgIH0gLy8gR2V0dGVyc1xuXG5cbiAgICB2YXIgX3Byb3RvID0gQWxlcnQucHJvdG90eXBlO1xuXG4gICAgLy8gUHVibGljXG4gICAgX3Byb3RvLmNsb3NlID0gZnVuY3Rpb24gY2xvc2UoZWxlbWVudCkge1xuICAgICAgdmFyIHJvb3RFbGVtZW50ID0gdGhpcy5fZWxlbWVudDtcblxuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgcm9vdEVsZW1lbnQgPSB0aGlzLl9nZXRSb290RWxlbWVudChlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgdmFyIGN1c3RvbUV2ZW50ID0gdGhpcy5fdHJpZ2dlckNsb3NlRXZlbnQocm9vdEVsZW1lbnQpO1xuXG4gICAgICBpZiAoY3VzdG9tRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9yZW1vdmVFbGVtZW50KHJvb3RFbGVtZW50KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgJC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsIERBVEFfS0VZKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsO1xuICAgIH0gLy8gUHJpdmF0ZVxuICAgIDtcblxuICAgIF9wcm90by5fZ2V0Um9vdEVsZW1lbnQgPSBmdW5jdGlvbiBfZ2V0Um9vdEVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgdmFyIHNlbGVjdG9yID0gVXRpbC5nZXRTZWxlY3RvckZyb21FbGVtZW50KGVsZW1lbnQpO1xuICAgICAgdmFyIHBhcmVudCA9IGZhbHNlO1xuXG4gICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgcGFyZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICB9XG5cbiAgICAgIGlmICghcGFyZW50KSB7XG4gICAgICAgIHBhcmVudCA9ICQoZWxlbWVudCkuY2xvc2VzdChcIi5cIiArIENsYXNzTmFtZS5BTEVSVClbMF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfTtcblxuICAgIF9wcm90by5fdHJpZ2dlckNsb3NlRXZlbnQgPSBmdW5jdGlvbiBfdHJpZ2dlckNsb3NlRXZlbnQoZWxlbWVudCkge1xuICAgICAgdmFyIGNsb3NlRXZlbnQgPSAkLkV2ZW50KEV2ZW50LkNMT1NFKTtcbiAgICAgICQoZWxlbWVudCkudHJpZ2dlcihjbG9zZUV2ZW50KTtcbiAgICAgIHJldHVybiBjbG9zZUV2ZW50O1xuICAgIH07XG5cbiAgICBfcHJvdG8uX3JlbW92ZUVsZW1lbnQgPSBmdW5jdGlvbiBfcmVtb3ZlRWxlbWVudChlbGVtZW50KSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAkKGVsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZS5TSE9XKTtcblxuICAgICAgaWYgKCEkKGVsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZS5GQURFKSkge1xuICAgICAgICB0aGlzLl9kZXN0cm95RWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciB0cmFuc2l0aW9uRHVyYXRpb24gPSBVdGlsLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KGVsZW1lbnQpO1xuICAgICAgJChlbGVtZW50KS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5fZGVzdHJveUVsZW1lbnQoZWxlbWVudCwgZXZlbnQpO1xuICAgICAgfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9kZXN0cm95RWxlbWVudCA9IGZ1bmN0aW9uIF9kZXN0cm95RWxlbWVudChlbGVtZW50KSB7XG4gICAgICAkKGVsZW1lbnQpLmRldGFjaCgpLnRyaWdnZXIoRXZlbnQuQ0xPU0VEKS5yZW1vdmUoKTtcbiAgICB9IC8vIFN0YXRpY1xuICAgIDtcblxuICAgIEFsZXJ0Ll9qUXVlcnlJbnRlcmZhY2UgPSBmdW5jdGlvbiBfalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciAkZWxlbWVudCA9ICQodGhpcyk7XG4gICAgICAgIHZhciBkYXRhID0gJGVsZW1lbnQuZGF0YShEQVRBX0tFWSk7XG5cbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IG5ldyBBbGVydCh0aGlzKTtcbiAgICAgICAgICAkZWxlbWVudC5kYXRhKERBVEFfS0VZLCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcgPT09ICdjbG9zZScpIHtcbiAgICAgICAgICBkYXRhW2NvbmZpZ10odGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBBbGVydC5faGFuZGxlRGlzbWlzcyA9IGZ1bmN0aW9uIF9oYW5kbGVEaXNtaXNzKGFsZXJ0SW5zdGFuY2UpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFsZXJ0SW5zdGFuY2UuY2xvc2UodGhpcyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBfY3JlYXRlQ2xhc3MoQWxlcnQsIG51bGwsIFt7XG4gICAgICBrZXk6IFwiVkVSU0lPTlwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBWRVJTSU9OO1xuICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBBbGVydDtcbiAgfSgpO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuXG4gICQoZG9jdW1lbnQpLm9uKEV2ZW50LkNMSUNLX0RBVEFfQVBJLCBTZWxlY3Rvci5ESVNNSVNTLCBBbGVydC5faGFuZGxlRGlzbWlzcyhuZXcgQWxlcnQoKSkpO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIGpRdWVyeVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgJC5mbltOQU1FXSA9IEFsZXJ0Ll9qUXVlcnlJbnRlcmZhY2U7XG4gICQuZm5bTkFNRV0uQ29uc3RydWN0b3IgPSBBbGVydDtcblxuICAkLmZuW05BTUVdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbltOQU1FXSA9IEpRVUVSWV9OT19DT05GTElDVDtcbiAgICByZXR1cm4gQWxlcnQuX2pRdWVyeUludGVyZmFjZTtcbiAgfTtcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIENvbnN0YW50c1xuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgdmFyIE5BTUUkMSA9ICdidXR0b24nO1xuICB2YXIgVkVSU0lPTiQxID0gJzQuMy4xJztcbiAgdmFyIERBVEFfS0VZJDEgPSAnYnMuYnV0dG9uJztcbiAgdmFyIEVWRU5UX0tFWSQxID0gXCIuXCIgKyBEQVRBX0tFWSQxO1xuICB2YXIgREFUQV9BUElfS0VZJDEgPSAnLmRhdGEtYXBpJztcbiAgdmFyIEpRVUVSWV9OT19DT05GTElDVCQxID0gJC5mbltOQU1FJDFdO1xuICB2YXIgQ2xhc3NOYW1lJDEgPSB7XG4gICAgQUNUSVZFOiAnYWN0aXZlJyxcbiAgICBCVVRUT046ICdidG4nLFxuICAgIEZPQ1VTOiAnZm9jdXMnXG4gIH07XG4gIHZhciBTZWxlY3RvciQxID0ge1xuICAgIERBVEFfVE9HR0xFX0NBUlJPVDogJ1tkYXRhLXRvZ2dsZV49XCJidXR0b25cIl0nLFxuICAgIERBVEFfVE9HR0xFOiAnW2RhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiXScsXG4gICAgSU5QVVQ6ICdpbnB1dDpub3QoW3R5cGU9XCJoaWRkZW5cIl0pJyxcbiAgICBBQ1RJVkU6ICcuYWN0aXZlJyxcbiAgICBCVVRUT046ICcuYnRuJ1xuICB9O1xuICB2YXIgRXZlbnQkMSA9IHtcbiAgICBDTElDS19EQVRBX0FQSTogXCJjbGlja1wiICsgRVZFTlRfS0VZJDEgKyBEQVRBX0FQSV9LRVkkMSxcbiAgICBGT0NVU19CTFVSX0RBVEFfQVBJOiBcImZvY3VzXCIgKyBFVkVOVF9LRVkkMSArIERBVEFfQVBJX0tFWSQxICsgXCIgXCIgKyAoXCJibHVyXCIgKyBFVkVOVF9LRVkkMSArIERBVEFfQVBJX0tFWSQxKVxuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIENsYXNzIERlZmluaXRpb25cbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuICB9O1xuXG4gIHZhciBCdXR0b24gPVxuICAvKiNfX1BVUkVfXyovXG4gIGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBCdXR0b24oZWxlbWVudCkge1xuICAgICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgfSAvLyBHZXR0ZXJzXG5cblxuICAgIHZhciBfcHJvdG8gPSBCdXR0b24ucHJvdG90eXBlO1xuXG4gICAgLy8gUHVibGljXG4gICAgX3Byb3RvLnRvZ2dsZSA9IGZ1bmN0aW9uIHRvZ2dsZSgpIHtcbiAgICAgIHZhciB0cmlnZ2VyQ2hhbmdlRXZlbnQgPSB0cnVlO1xuICAgICAgdmFyIGFkZEFyaWFQcmVzc2VkID0gdHJ1ZTtcbiAgICAgIHZhciByb290RWxlbWVudCA9ICQodGhpcy5fZWxlbWVudCkuY2xvc2VzdChTZWxlY3RvciQxLkRBVEFfVE9HR0xFKVswXTtcblxuICAgICAgaWYgKHJvb3RFbGVtZW50KSB7XG4gICAgICAgIHZhciBpbnB1dCA9IHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcihTZWxlY3RvciQxLklOUFVUKTtcblxuICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICBpZiAoaW5wdXQudHlwZSA9PT0gJ3JhZGlvJykge1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoZWNrZWQgJiYgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ2xhc3NOYW1lJDEuQUNUSVZFKSkge1xuICAgICAgICAgICAgICB0cmlnZ2VyQ2hhbmdlRXZlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhciBhY3RpdmVFbGVtZW50ID0gcm9vdEVsZW1lbnQucXVlcnlTZWxlY3RvcihTZWxlY3RvciQxLkFDVElWRSk7XG5cbiAgICAgICAgICAgICAgaWYgKGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAkKGFjdGl2ZUVsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQxLkFDVElWRSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZUV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpIHx8IHJvb3RFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSB8fCBpbnB1dC5jbGFzc0xpc3QuY29udGFpbnMoJ2Rpc2FibGVkJykgfHwgcm9vdEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9ICF0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDbGFzc05hbWUkMS5BQ1RJVkUpO1xuICAgICAgICAgICAgJChpbnB1dCkudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICBhZGRBcmlhUHJlc3NlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhZGRBcmlhUHJlc3NlZCkge1xuICAgICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgIXRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENsYXNzTmFtZSQxLkFDVElWRSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHJpZ2dlckNoYW5nZUV2ZW50KSB7XG4gICAgICAgICQodGhpcy5fZWxlbWVudCkudG9nZ2xlQ2xhc3MoQ2xhc3NOYW1lJDEuQUNUSVZFKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgJC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsIERBVEFfS0VZJDEpO1xuICAgICAgdGhpcy5fZWxlbWVudCA9IG51bGw7XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBCdXR0b24uX2pRdWVyeUludGVyZmFjZSA9IGZ1bmN0aW9uIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAkKHRoaXMpLmRhdGEoREFUQV9LRVkkMSk7XG5cbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IG5ldyBCdXR0b24odGhpcyk7XG4gICAgICAgICAgJCh0aGlzKS5kYXRhKERBVEFfS0VZJDEsIGRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZyA9PT0gJ3RvZ2dsZScpIHtcbiAgICAgICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9jcmVhdGVDbGFzcyhCdXR0b24sIG51bGwsIFt7XG4gICAgICBrZXk6IFwiVkVSU0lPTlwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBWRVJTSU9OJDE7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIEJ1dHRvbjtcbiAgfSgpO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuXG4gICQoZG9jdW1lbnQpLm9uKEV2ZW50JDEuQ0xJQ0tfREFUQV9BUEksIFNlbGVjdG9yJDEuREFUQV9UT0dHTEVfQ0FSUk9ULCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHZhciBidXR0b24gPSBldmVudC50YXJnZXQ7XG5cbiAgICBpZiAoISQoYnV0dG9uKS5oYXNDbGFzcyhDbGFzc05hbWUkMS5CVVRUT04pKSB7XG4gICAgICBidXR0b24gPSAkKGJ1dHRvbikuY2xvc2VzdChTZWxlY3RvciQxLkJVVFRPTik7XG4gICAgfVxuXG4gICAgQnV0dG9uLl9qUXVlcnlJbnRlcmZhY2UuY2FsbCgkKGJ1dHRvbiksICd0b2dnbGUnKTtcbiAgfSkub24oRXZlbnQkMS5GT0NVU19CTFVSX0RBVEFfQVBJLCBTZWxlY3RvciQxLkRBVEFfVE9HR0xFX0NBUlJPVCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIGJ1dHRvbiA9ICQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFNlbGVjdG9yJDEuQlVUVE9OKVswXTtcbiAgICAkKGJ1dHRvbikudG9nZ2xlQ2xhc3MoQ2xhc3NOYW1lJDEuRk9DVVMsIC9eZm9jdXMoaW4pPyQvLnRlc3QoZXZlbnQudHlwZSkpO1xuICB9KTtcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBqUXVlcnlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gICQuZm5bTkFNRSQxXSA9IEJ1dHRvbi5falF1ZXJ5SW50ZXJmYWNlO1xuICAkLmZuW05BTUUkMV0uQ29uc3RydWN0b3IgPSBCdXR0b247XG5cbiAgJC5mbltOQU1FJDFdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbltOQU1FJDFdID0gSlFVRVJZX05PX0NPTkZMSUNUJDE7XG4gICAgcmV0dXJuIEJ1dHRvbi5falF1ZXJ5SW50ZXJmYWNlO1xuICB9O1xuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQ29uc3RhbnRzXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICB2YXIgTkFNRSQyID0gJ2Nhcm91c2VsJztcbiAgdmFyIFZFUlNJT04kMiA9ICc0LjMuMSc7XG4gIHZhciBEQVRBX0tFWSQyID0gJ2JzLmNhcm91c2VsJztcbiAgdmFyIEVWRU5UX0tFWSQyID0gXCIuXCIgKyBEQVRBX0tFWSQyO1xuICB2YXIgREFUQV9BUElfS0VZJDIgPSAnLmRhdGEtYXBpJztcbiAgdmFyIEpRVUVSWV9OT19DT05GTElDVCQyID0gJC5mbltOQU1FJDJdO1xuICB2YXIgQVJST1dfTEVGVF9LRVlDT0RFID0gMzc7IC8vIEtleWJvYXJkRXZlbnQud2hpY2ggdmFsdWUgZm9yIGxlZnQgYXJyb3cga2V5XG5cbiAgdmFyIEFSUk9XX1JJR0hUX0tFWUNPREUgPSAzOTsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3IgcmlnaHQgYXJyb3cga2V5XG5cbiAgdmFyIFRPVUNIRVZFTlRfQ09NUEFUX1dBSVQgPSA1MDA7IC8vIFRpbWUgZm9yIG1vdXNlIGNvbXBhdCBldmVudHMgdG8gZmlyZSBhZnRlciB0b3VjaFxuXG4gIHZhciBTV0lQRV9USFJFU0hPTEQgPSA0MDtcbiAgdmFyIERlZmF1bHQgPSB7XG4gICAgaW50ZXJ2YWw6IDUwMDAsXG4gICAga2V5Ym9hcmQ6IHRydWUsXG4gICAgc2xpZGU6IGZhbHNlLFxuICAgIHBhdXNlOiAnaG92ZXInLFxuICAgIHdyYXA6IHRydWUsXG4gICAgdG91Y2g6IHRydWVcbiAgfTtcbiAgdmFyIERlZmF1bHRUeXBlID0ge1xuICAgIGludGVydmFsOiAnKG51bWJlcnxib29sZWFuKScsXG4gICAga2V5Ym9hcmQ6ICdib29sZWFuJyxcbiAgICBzbGlkZTogJyhib29sZWFufHN0cmluZyknLFxuICAgIHBhdXNlOiAnKHN0cmluZ3xib29sZWFuKScsXG4gICAgd3JhcDogJ2Jvb2xlYW4nLFxuICAgIHRvdWNoOiAnYm9vbGVhbidcbiAgfTtcbiAgdmFyIERpcmVjdGlvbiA9IHtcbiAgICBORVhUOiAnbmV4dCcsXG4gICAgUFJFVjogJ3ByZXYnLFxuICAgIExFRlQ6ICdsZWZ0JyxcbiAgICBSSUdIVDogJ3JpZ2h0J1xuICB9O1xuICB2YXIgRXZlbnQkMiA9IHtcbiAgICBTTElERTogXCJzbGlkZVwiICsgRVZFTlRfS0VZJDIsXG4gICAgU0xJRDogXCJzbGlkXCIgKyBFVkVOVF9LRVkkMixcbiAgICBLRVlET1dOOiBcImtleWRvd25cIiArIEVWRU5UX0tFWSQyLFxuICAgIE1PVVNFRU5URVI6IFwibW91c2VlbnRlclwiICsgRVZFTlRfS0VZJDIsXG4gICAgTU9VU0VMRUFWRTogXCJtb3VzZWxlYXZlXCIgKyBFVkVOVF9LRVkkMixcbiAgICBUT1VDSFNUQVJUOiBcInRvdWNoc3RhcnRcIiArIEVWRU5UX0tFWSQyLFxuICAgIFRPVUNITU9WRTogXCJ0b3VjaG1vdmVcIiArIEVWRU5UX0tFWSQyLFxuICAgIFRPVUNIRU5EOiBcInRvdWNoZW5kXCIgKyBFVkVOVF9LRVkkMixcbiAgICBQT0lOVEVSRE9XTjogXCJwb2ludGVyZG93blwiICsgRVZFTlRfS0VZJDIsXG4gICAgUE9JTlRFUlVQOiBcInBvaW50ZXJ1cFwiICsgRVZFTlRfS0VZJDIsXG4gICAgRFJBR19TVEFSVDogXCJkcmFnc3RhcnRcIiArIEVWRU5UX0tFWSQyLFxuICAgIExPQURfREFUQV9BUEk6IFwibG9hZFwiICsgRVZFTlRfS0VZJDIgKyBEQVRBX0FQSV9LRVkkMixcbiAgICBDTElDS19EQVRBX0FQSTogXCJjbGlja1wiICsgRVZFTlRfS0VZJDIgKyBEQVRBX0FQSV9LRVkkMlxuICB9O1xuICB2YXIgQ2xhc3NOYW1lJDIgPSB7XG4gICAgQ0FST1VTRUw6ICdjYXJvdXNlbCcsXG4gICAgQUNUSVZFOiAnYWN0aXZlJyxcbiAgICBTTElERTogJ3NsaWRlJyxcbiAgICBSSUdIVDogJ2Nhcm91c2VsLWl0ZW0tcmlnaHQnLFxuICAgIExFRlQ6ICdjYXJvdXNlbC1pdGVtLWxlZnQnLFxuICAgIE5FWFQ6ICdjYXJvdXNlbC1pdGVtLW5leHQnLFxuICAgIFBSRVY6ICdjYXJvdXNlbC1pdGVtLXByZXYnLFxuICAgIElURU06ICdjYXJvdXNlbC1pdGVtJyxcbiAgICBQT0lOVEVSX0VWRU5UOiAncG9pbnRlci1ldmVudCdcbiAgfTtcbiAgdmFyIFNlbGVjdG9yJDIgPSB7XG4gICAgQUNUSVZFOiAnLmFjdGl2ZScsXG4gICAgQUNUSVZFX0lURU06ICcuYWN0aXZlLmNhcm91c2VsLWl0ZW0nLFxuICAgIElURU06ICcuY2Fyb3VzZWwtaXRlbScsXG4gICAgSVRFTV9JTUc6ICcuY2Fyb3VzZWwtaXRlbSBpbWcnLFxuICAgIE5FWFRfUFJFVjogJy5jYXJvdXNlbC1pdGVtLW5leHQsIC5jYXJvdXNlbC1pdGVtLXByZXYnLFxuICAgIElORElDQVRPUlM6ICcuY2Fyb3VzZWwtaW5kaWNhdG9ycycsXG4gICAgREFUQV9TTElERTogJ1tkYXRhLXNsaWRlXSwgW2RhdGEtc2xpZGUtdG9dJyxcbiAgICBEQVRBX1JJREU6ICdbZGF0YS1yaWRlPVwiY2Fyb3VzZWxcIl0nXG4gIH07XG4gIHZhciBQb2ludGVyVHlwZSA9IHtcbiAgICBUT1VDSDogJ3RvdWNoJyxcbiAgICBQRU46ICdwZW4nXG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG4gIH07XG5cbiAgdmFyIENhcm91c2VsID1cbiAgLyojX19QVVJFX18qL1xuICBmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ2Fyb3VzZWwoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgICB0aGlzLl9pdGVtcyA9IG51bGw7XG4gICAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGw7XG4gICAgICB0aGlzLl9hY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuX2lzUGF1c2VkID0gZmFsc2U7XG4gICAgICB0aGlzLl9pc1NsaWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMudG91Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICAgIHRoaXMudG91Y2hTdGFydFggPSAwO1xuICAgICAgdGhpcy50b3VjaERlbHRhWCA9IDA7XG4gICAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQgPSB0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoU2VsZWN0b3IkMi5JTkRJQ0FUT1JTKTtcbiAgICAgIHRoaXMuX3RvdWNoU3VwcG9ydGVkID0gJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDA7XG4gICAgICB0aGlzLl9wb2ludGVyRXZlbnQgPSBCb29sZWFuKHdpbmRvdy5Qb2ludGVyRXZlbnQgfHwgd2luZG93Lk1TUG9pbnRlckV2ZW50KTtcblxuICAgICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICB9IC8vIEdldHRlcnNcblxuXG4gICAgdmFyIF9wcm90byA9IENhcm91c2VsLnByb3RvdHlwZTtcblxuICAgIC8vIFB1YmxpY1xuICAgIF9wcm90by5uZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGlmICghdGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICAgIHRoaXMuX3NsaWRlKERpcmVjdGlvbi5ORVhUKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLm5leHRXaGVuVmlzaWJsZSA9IGZ1bmN0aW9uIG5leHRXaGVuVmlzaWJsZSgpIHtcbiAgICAgIC8vIERvbid0IGNhbGwgbmV4dCB3aGVuIHRoZSBwYWdlIGlzbid0IHZpc2libGVcbiAgICAgIC8vIG9yIHRoZSBjYXJvdXNlbCBvciBpdHMgcGFyZW50IGlzbid0IHZpc2libGVcbiAgICAgIGlmICghZG9jdW1lbnQuaGlkZGVuICYmICQodGhpcy5fZWxlbWVudCkuaXMoJzp2aXNpYmxlJykgJiYgJCh0aGlzLl9lbGVtZW50KS5jc3MoJ3Zpc2liaWxpdHknKSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5wcmV2ID0gZnVuY3Rpb24gcHJldigpIHtcbiAgICAgIGlmICghdGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICAgIHRoaXMuX3NsaWRlKERpcmVjdGlvbi5QUkVWKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLnBhdXNlID0gZnVuY3Rpb24gcGF1c2UoZXZlbnQpIHtcbiAgICAgIGlmICghZXZlbnQpIHtcbiAgICAgICAgdGhpcy5faXNQYXVzZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yJDIuTkVYVF9QUkVWKSkge1xuICAgICAgICBVdGlsLnRyaWdnZXJUcmFuc2l0aW9uRW5kKHRoaXMuX2VsZW1lbnQpO1xuICAgICAgICB0aGlzLmN5Y2xlKHRydWUpO1xuICAgICAgfVxuXG4gICAgICBjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKTtcbiAgICAgIHRoaXMuX2ludGVydmFsID0gbnVsbDtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmN5Y2xlID0gZnVuY3Rpb24gY3ljbGUoZXZlbnQpIHtcbiAgICAgIGlmICghZXZlbnQpIHtcbiAgICAgICAgdGhpcy5faXNQYXVzZWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2ludGVydmFsKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWwpO1xuICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcuaW50ZXJ2YWwgJiYgIXRoaXMuX2lzUGF1c2VkKSB7XG4gICAgICAgIHRoaXMuX2ludGVydmFsID0gc2V0SW50ZXJ2YWwoKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA/IHRoaXMubmV4dFdoZW5WaXNpYmxlIDogdGhpcy5uZXh0KS5iaW5kKHRoaXMpLCB0aGlzLl9jb25maWcuaW50ZXJ2YWwpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8udG8gPSBmdW5jdGlvbiB0byhpbmRleCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdGhpcy5fYWN0aXZlRWxlbWVudCA9IHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcihTZWxlY3RvciQyLkFDVElWRV9JVEVNKTtcblxuICAgICAgdmFyIGFjdGl2ZUluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KHRoaXMuX2FjdGl2ZUVsZW1lbnQpO1xuXG4gICAgICBpZiAoaW5kZXggPiB0aGlzLl9pdGVtcy5sZW5ndGggLSAxIHx8IGluZGV4IDwgMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9pc1NsaWRpbmcpIHtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbmUoRXZlbnQkMi5TTElELCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLnRvKGluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGFjdGl2ZUluZGV4ID09PSBpbmRleCkge1xuICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICAgIHRoaXMuY3ljbGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGlyZWN0aW9uID0gaW5kZXggPiBhY3RpdmVJbmRleCA/IERpcmVjdGlvbi5ORVhUIDogRGlyZWN0aW9uLlBSRVY7XG5cbiAgICAgIHRoaXMuX3NsaWRlKGRpcmVjdGlvbiwgdGhpcy5faXRlbXNbaW5kZXhdKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgJCh0aGlzLl9lbGVtZW50KS5vZmYoRVZFTlRfS0VZJDIpO1xuICAgICAgJC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsIERBVEFfS0VZJDIpO1xuICAgICAgdGhpcy5faXRlbXMgPSBudWxsO1xuICAgICAgdGhpcy5fY29uZmlnID0gbnVsbDtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsO1xuICAgICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsO1xuICAgICAgdGhpcy5faXNQYXVzZWQgPSBudWxsO1xuICAgICAgdGhpcy5faXNTbGlkaW5nID0gbnVsbDtcbiAgICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICAgICAgdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQgPSBudWxsO1xuICAgIH0gLy8gUHJpdmF0ZVxuICAgIDtcblxuICAgIF9wcm90by5fZ2V0Q29uZmlnID0gZnVuY3Rpb24gX2dldENvbmZpZyhjb25maWcpIHtcbiAgICAgIGNvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIERlZmF1bHQsIGNvbmZpZyk7XG4gICAgICBVdGlsLnR5cGVDaGVja0NvbmZpZyhOQU1FJDIsIGNvbmZpZywgRGVmYXVsdFR5cGUpO1xuICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9oYW5kbGVTd2lwZSA9IGZ1bmN0aW9uIF9oYW5kbGVTd2lwZSgpIHtcbiAgICAgIHZhciBhYnNEZWx0YXggPSBNYXRoLmFicyh0aGlzLnRvdWNoRGVsdGFYKTtcblxuICAgICAgaWYgKGFic0RlbHRheCA8PSBTV0lQRV9USFJFU0hPTEQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGlyZWN0aW9uID0gYWJzRGVsdGF4IC8gdGhpcy50b3VjaERlbHRhWDsgLy8gc3dpcGUgbGVmdFxuXG4gICAgICBpZiAoZGlyZWN0aW9uID4gMCkge1xuICAgICAgICB0aGlzLnByZXYoKTtcbiAgICAgIH0gLy8gc3dpcGUgcmlnaHRcblxuXG4gICAgICBpZiAoZGlyZWN0aW9uIDwgMCkge1xuICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLl9hZGRFdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uIF9hZGRFdmVudExpc3RlbmVycygpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICAgICQodGhpcy5fZWxlbWVudCkub24oRXZlbnQkMi5LRVlET1dOLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLl9rZXlkb3duKGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcucGF1c2UgPT09ICdob3ZlcicpIHtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbihFdmVudCQyLk1PVVNFRU5URVIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczIucGF1c2UoZXZlbnQpO1xuICAgICAgICB9KS5vbihFdmVudCQyLk1PVVNFTEVBVkUsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczIuY3ljbGUoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2NvbmZpZy50b3VjaCkge1xuICAgICAgICB0aGlzLl9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5fYWRkVG91Y2hFdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uIF9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIGlmICghdGhpcy5fdG91Y2hTdXBwb3J0ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RhcnQgPSBmdW5jdGlvbiBzdGFydChldmVudCkge1xuICAgICAgICBpZiAoX3RoaXMzLl9wb2ludGVyRXZlbnQgJiYgUG9pbnRlclR5cGVbZXZlbnQub3JpZ2luYWxFdmVudC5wb2ludGVyVHlwZS50b1VwcGVyQ2FzZSgpXSkge1xuICAgICAgICAgIF90aGlzMy50b3VjaFN0YXJ0WCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQuY2xpZW50WDtcbiAgICAgICAgfSBlbHNlIGlmICghX3RoaXMzLl9wb2ludGVyRXZlbnQpIHtcbiAgICAgICAgICBfdGhpczMudG91Y2hTdGFydFggPSBldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdmFyIG1vdmUgPSBmdW5jdGlvbiBtb3ZlKGV2ZW50KSB7XG4gICAgICAgIC8vIGVuc3VyZSBzd2lwaW5nIHdpdGggb25lIHRvdWNoIGFuZCBub3QgcGluY2hpbmdcbiAgICAgICAgaWYgKGV2ZW50Lm9yaWdpbmFsRXZlbnQudG91Y2hlcyAmJiBldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIF90aGlzMy50b3VjaERlbHRhWCA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMzLnRvdWNoRGVsdGFYID0gZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLmNsaWVudFggLSBfdGhpczMudG91Y2hTdGFydFg7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHZhciBlbmQgPSBmdW5jdGlvbiBlbmQoZXZlbnQpIHtcbiAgICAgICAgaWYgKF90aGlzMy5fcG9pbnRlckV2ZW50ICYmIFBvaW50ZXJUeXBlW2V2ZW50Lm9yaWdpbmFsRXZlbnQucG9pbnRlclR5cGUudG9VcHBlckNhc2UoKV0pIHtcbiAgICAgICAgICBfdGhpczMudG91Y2hEZWx0YVggPSBldmVudC5vcmlnaW5hbEV2ZW50LmNsaWVudFggLSBfdGhpczMudG91Y2hTdGFydFg7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczMuX2hhbmRsZVN3aXBlKCk7XG5cbiAgICAgICAgaWYgKF90aGlzMy5fY29uZmlnLnBhdXNlID09PSAnaG92ZXInKSB7XG4gICAgICAgICAgLy8gSWYgaXQncyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlLCBtb3VzZWVudGVyL2xlYXZlIGFyZSBmaXJlZCBhc1xuICAgICAgICAgIC8vIHBhcnQgb2YgdGhlIG1vdXNlIGNvbXBhdGliaWxpdHkgZXZlbnRzIG9uIGZpcnN0IHRhcCAtIHRoZSBjYXJvdXNlbFxuICAgICAgICAgIC8vIHdvdWxkIHN0b3AgY3ljbGluZyB1bnRpbCB1c2VyIHRhcHBlZCBvdXQgb2YgaXQ7XG4gICAgICAgICAgLy8gaGVyZSwgd2UgbGlzdGVuIGZvciB0b3VjaGVuZCwgZXhwbGljaXRseSBwYXVzZSB0aGUgY2Fyb3VzZWxcbiAgICAgICAgICAvLyAoYXMgaWYgaXQncyB0aGUgc2Vjb25kIHRpbWUgd2UgdGFwIG9uIGl0LCBtb3VzZWVudGVyIGNvbXBhdCBldmVudFxuICAgICAgICAgIC8vIGlzIE5PVCBmaXJlZCkgYW5kIGFmdGVyIGEgdGltZW91dCAodG8gYWxsb3cgZm9yIG1vdXNlIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAvLyBldmVudHMgdG8gZmlyZSkgd2UgZXhwbGljaXRseSByZXN0YXJ0IGN5Y2xpbmdcbiAgICAgICAgICBfdGhpczMucGF1c2UoKTtcblxuICAgICAgICAgIGlmIChfdGhpczMudG91Y2hUaW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoX3RoaXMzLnRvdWNoVGltZW91dCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3RoaXMzLnRvdWNoVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMzLmN5Y2xlKGV2ZW50KTtcbiAgICAgICAgICB9LCBUT1VDSEVWRU5UX0NPTVBBVF9XQUlUICsgX3RoaXMzLl9jb25maWcuaW50ZXJ2YWwpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAkKHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3RvciQyLklURU1fSU1HKSkub24oRXZlbnQkMi5EUkFHX1NUQVJULCBmdW5jdGlvbiAoZSkge1xuICAgICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLl9wb2ludGVyRXZlbnQpIHtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbihFdmVudCQyLlBPSU5URVJET1dOLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gc3RhcnQoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbihFdmVudCQyLlBPSU5URVJVUCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGVuZChldmVudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDbGFzc05hbWUkMi5QT0lOVEVSX0VWRU5UKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICQodGhpcy5fZWxlbWVudCkub24oRXZlbnQkMi5UT1VDSFNUQVJULCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gc3RhcnQoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbihFdmVudCQyLlRPVUNITU9WRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIG1vdmUoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbihFdmVudCQyLlRPVUNIRU5ELCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gZW5kKGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5fa2V5ZG93biA9IGZ1bmN0aW9uIF9rZXlkb3duKGV2ZW50KSB7XG4gICAgICBpZiAoL2lucHV0fHRleHRhcmVhL2kudGVzdChldmVudC50YXJnZXQudGFnTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGV2ZW50LndoaWNoKSB7XG4gICAgICAgIGNhc2UgQVJST1dfTEVGVF9LRVlDT0RFOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5wcmV2KCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBBUlJPV19SSUdIVF9LRVlDT0RFOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLl9nZXRJdGVtSW5kZXggPSBmdW5jdGlvbiBfZ2V0SXRlbUluZGV4KGVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2l0ZW1zID0gZWxlbWVudCAmJiBlbGVtZW50LnBhcmVudE5vZGUgPyBbXS5zbGljZS5jYWxsKGVsZW1lbnQucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKFNlbGVjdG9yJDIuSVRFTSkpIDogW107XG4gICAgICByZXR1cm4gdGhpcy5faXRlbXMuaW5kZXhPZihlbGVtZW50KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9nZXRJdGVtQnlEaXJlY3Rpb24gPSBmdW5jdGlvbiBfZ2V0SXRlbUJ5RGlyZWN0aW9uKGRpcmVjdGlvbiwgYWN0aXZlRWxlbWVudCkge1xuICAgICAgdmFyIGlzTmV4dERpcmVjdGlvbiA9IGRpcmVjdGlvbiA9PT0gRGlyZWN0aW9uLk5FWFQ7XG4gICAgICB2YXIgaXNQcmV2RGlyZWN0aW9uID0gZGlyZWN0aW9uID09PSBEaXJlY3Rpb24uUFJFVjtcblxuICAgICAgdmFyIGFjdGl2ZUluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KGFjdGl2ZUVsZW1lbnQpO1xuXG4gICAgICB2YXIgbGFzdEl0ZW1JbmRleCA9IHRoaXMuX2l0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgaXNHb2luZ1RvV3JhcCA9IGlzUHJldkRpcmVjdGlvbiAmJiBhY3RpdmVJbmRleCA9PT0gMCB8fCBpc05leHREaXJlY3Rpb24gJiYgYWN0aXZlSW5kZXggPT09IGxhc3RJdGVtSW5kZXg7XG5cbiAgICAgIGlmIChpc0dvaW5nVG9XcmFwICYmICF0aGlzLl9jb25maWcud3JhcCkge1xuICAgICAgICByZXR1cm4gYWN0aXZlRWxlbWVudDtcbiAgICAgIH1cblxuICAgICAgdmFyIGRlbHRhID0gZGlyZWN0aW9uID09PSBEaXJlY3Rpb24uUFJFViA/IC0xIDogMTtcbiAgICAgIHZhciBpdGVtSW5kZXggPSAoYWN0aXZlSW5kZXggKyBkZWx0YSkgJSB0aGlzLl9pdGVtcy5sZW5ndGg7XG4gICAgICByZXR1cm4gaXRlbUluZGV4ID09PSAtMSA/IHRoaXMuX2l0ZW1zW3RoaXMuX2l0ZW1zLmxlbmd0aCAtIDFdIDogdGhpcy5faXRlbXNbaXRlbUluZGV4XTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl90cmlnZ2VyU2xpZGVFdmVudCA9IGZ1bmN0aW9uIF90cmlnZ2VyU2xpZGVFdmVudChyZWxhdGVkVGFyZ2V0LCBldmVudERpcmVjdGlvbk5hbWUpIHtcbiAgICAgIHZhciB0YXJnZXRJbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleChyZWxhdGVkVGFyZ2V0KTtcblxuICAgICAgdmFyIGZyb21JbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleCh0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoU2VsZWN0b3IkMi5BQ1RJVkVfSVRFTSkpO1xuXG4gICAgICB2YXIgc2xpZGVFdmVudCA9ICQuRXZlbnQoRXZlbnQkMi5TTElERSwge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiByZWxhdGVkVGFyZ2V0LFxuICAgICAgICBkaXJlY3Rpb246IGV2ZW50RGlyZWN0aW9uTmFtZSxcbiAgICAgICAgZnJvbTogZnJvbUluZGV4LFxuICAgICAgICB0bzogdGFyZ2V0SW5kZXhcbiAgICAgIH0pO1xuICAgICAgJCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKHNsaWRlRXZlbnQpO1xuICAgICAgcmV0dXJuIHNsaWRlRXZlbnQ7XG4gICAgfTtcblxuICAgIF9wcm90by5fc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudCA9IGZ1bmN0aW9uIF9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgIGlmICh0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCkge1xuICAgICAgICB2YXIgaW5kaWNhdG9ycyA9IFtdLnNsaWNlLmNhbGwodGhpcy5faW5kaWNhdG9yc0VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3RvciQyLkFDVElWRSkpO1xuICAgICAgICAkKGluZGljYXRvcnMpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQyLkFDVElWRSk7XG5cbiAgICAgICAgdmFyIG5leHRJbmRpY2F0b3IgPSB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudC5jaGlsZHJlblt0aGlzLl9nZXRJdGVtSW5kZXgoZWxlbWVudCldO1xuXG4gICAgICAgIGlmIChuZXh0SW5kaWNhdG9yKSB7XG4gICAgICAgICAgJChuZXh0SW5kaWNhdG9yKS5hZGRDbGFzcyhDbGFzc05hbWUkMi5BQ1RJVkUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5fc2xpZGUgPSBmdW5jdGlvbiBfc2xpZGUoZGlyZWN0aW9uLCBlbGVtZW50KSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSB0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoU2VsZWN0b3IkMi5BQ1RJVkVfSVRFTSk7XG5cbiAgICAgIHZhciBhY3RpdmVFbGVtZW50SW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgoYWN0aXZlRWxlbWVudCk7XG5cbiAgICAgIHZhciBuZXh0RWxlbWVudCA9IGVsZW1lbnQgfHwgYWN0aXZlRWxlbWVudCAmJiB0aGlzLl9nZXRJdGVtQnlEaXJlY3Rpb24oZGlyZWN0aW9uLCBhY3RpdmVFbGVtZW50KTtcblxuICAgICAgdmFyIG5leHRFbGVtZW50SW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgobmV4dEVsZW1lbnQpO1xuXG4gICAgICB2YXIgaXNDeWNsaW5nID0gQm9vbGVhbih0aGlzLl9pbnRlcnZhbCk7XG4gICAgICB2YXIgZGlyZWN0aW9uYWxDbGFzc05hbWU7XG4gICAgICB2YXIgb3JkZXJDbGFzc05hbWU7XG4gICAgICB2YXIgZXZlbnREaXJlY3Rpb25OYW1lO1xuXG4gICAgICBpZiAoZGlyZWN0aW9uID09PSBEaXJlY3Rpb24uTkVYVCkge1xuICAgICAgICBkaXJlY3Rpb25hbENsYXNzTmFtZSA9IENsYXNzTmFtZSQyLkxFRlQ7XG4gICAgICAgIG9yZGVyQ2xhc3NOYW1lID0gQ2xhc3NOYW1lJDIuTkVYVDtcbiAgICAgICAgZXZlbnREaXJlY3Rpb25OYW1lID0gRGlyZWN0aW9uLkxFRlQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXJlY3Rpb25hbENsYXNzTmFtZSA9IENsYXNzTmFtZSQyLlJJR0hUO1xuICAgICAgICBvcmRlckNsYXNzTmFtZSA9IENsYXNzTmFtZSQyLlBSRVY7XG4gICAgICAgIGV2ZW50RGlyZWN0aW9uTmFtZSA9IERpcmVjdGlvbi5SSUdIVDtcbiAgICAgIH1cblxuICAgICAgaWYgKG5leHRFbGVtZW50ICYmICQobmV4dEVsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQyLkFDVElWRSkpIHtcbiAgICAgICAgdGhpcy5faXNTbGlkaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNsaWRlRXZlbnQgPSB0aGlzLl90cmlnZ2VyU2xpZGVFdmVudChuZXh0RWxlbWVudCwgZXZlbnREaXJlY3Rpb25OYW1lKTtcblxuICAgICAgaWYgKHNsaWRlRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWFjdGl2ZUVsZW1lbnQgfHwgIW5leHRFbGVtZW50KSB7XG4gICAgICAgIC8vIFNvbWUgd2VpcmRuZXNzIGlzIGhhcHBlbmluZywgc28gd2UgYmFpbFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lzU2xpZGluZyA9IHRydWU7XG5cbiAgICAgIGlmIChpc0N5Y2xpbmcpIHtcbiAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50KG5leHRFbGVtZW50KTtcblxuICAgICAgdmFyIHNsaWRFdmVudCA9ICQuRXZlbnQoRXZlbnQkMi5TTElELCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IG5leHRFbGVtZW50LFxuICAgICAgICBkaXJlY3Rpb246IGV2ZW50RGlyZWN0aW9uTmFtZSxcbiAgICAgICAgZnJvbTogYWN0aXZlRWxlbWVudEluZGV4LFxuICAgICAgICB0bzogbmV4dEVsZW1lbnRJbmRleFxuICAgICAgfSk7XG5cbiAgICAgIGlmICgkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQyLlNMSURFKSkge1xuICAgICAgICAkKG5leHRFbGVtZW50KS5hZGRDbGFzcyhvcmRlckNsYXNzTmFtZSk7XG4gICAgICAgIFV0aWwucmVmbG93KG5leHRFbGVtZW50KTtcbiAgICAgICAgJChhY3RpdmVFbGVtZW50KS5hZGRDbGFzcyhkaXJlY3Rpb25hbENsYXNzTmFtZSk7XG4gICAgICAgICQobmV4dEVsZW1lbnQpLmFkZENsYXNzKGRpcmVjdGlvbmFsQ2xhc3NOYW1lKTtcbiAgICAgICAgdmFyIG5leHRFbGVtZW50SW50ZXJ2YWwgPSBwYXJzZUludChuZXh0RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaW50ZXJ2YWwnKSwgMTApO1xuXG4gICAgICAgIGlmIChuZXh0RWxlbWVudEludGVydmFsKSB7XG4gICAgICAgICAgdGhpcy5fY29uZmlnLmRlZmF1bHRJbnRlcnZhbCA9IHRoaXMuX2NvbmZpZy5kZWZhdWx0SW50ZXJ2YWwgfHwgdGhpcy5fY29uZmlnLmludGVydmFsO1xuICAgICAgICAgIHRoaXMuX2NvbmZpZy5pbnRlcnZhbCA9IG5leHRFbGVtZW50SW50ZXJ2YWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fY29uZmlnLmludGVydmFsID0gdGhpcy5fY29uZmlnLmRlZmF1bHRJbnRlcnZhbCB8fCB0aGlzLl9jb25maWcuaW50ZXJ2YWw7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudChhY3RpdmVFbGVtZW50KTtcbiAgICAgICAgJChhY3RpdmVFbGVtZW50KS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICQobmV4dEVsZW1lbnQpLnJlbW92ZUNsYXNzKGRpcmVjdGlvbmFsQ2xhc3NOYW1lICsgXCIgXCIgKyBvcmRlckNsYXNzTmFtZSkuYWRkQ2xhc3MoQ2xhc3NOYW1lJDIuQUNUSVZFKTtcbiAgICAgICAgICAkKGFjdGl2ZUVsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQyLkFDVElWRSArIFwiIFwiICsgb3JkZXJDbGFzc05hbWUgKyBcIiBcIiArIGRpcmVjdGlvbmFsQ2xhc3NOYW1lKTtcbiAgICAgICAgICBfdGhpczQuX2lzU2xpZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICQoX3RoaXM0Ll9lbGVtZW50KS50cmlnZ2VyKHNsaWRFdmVudCk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkKGFjdGl2ZUVsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQyLkFDVElWRSk7XG4gICAgICAgICQobmV4dEVsZW1lbnQpLmFkZENsYXNzKENsYXNzTmFtZSQyLkFDVElWRSk7XG4gICAgICAgIHRoaXMuX2lzU2xpZGluZyA9IGZhbHNlO1xuICAgICAgICAkKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoc2xpZEV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzQ3ljbGluZykge1xuICAgICAgICB0aGlzLmN5Y2xlKCk7XG4gICAgICB9XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBDYXJvdXNlbC5falF1ZXJ5SW50ZXJmYWNlID0gZnVuY3Rpb24gX2pRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YShEQVRBX0tFWSQyKTtcblxuICAgICAgICB2YXIgX2NvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIERlZmF1bHQsICQodGhpcykuZGF0YSgpKTtcblxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBfY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgX2NvbmZpZywgY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBhY3Rpb24gPSB0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJyA/IGNvbmZpZyA6IF9jb25maWcuc2xpZGU7XG5cbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IG5ldyBDYXJvdXNlbCh0aGlzLCBfY29uZmlnKTtcbiAgICAgICAgICAkKHRoaXMpLmRhdGEoREFUQV9LRVkkMiwgZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBkYXRhLnRvKGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGRhdGFbYWN0aW9uXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyBtZXRob2QgbmFtZWQgXFxcIlwiICsgYWN0aW9uICsgXCJcXFwiXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRhdGFbYWN0aW9uXSgpO1xuICAgICAgICB9IGVsc2UgaWYgKF9jb25maWcuaW50ZXJ2YWwgJiYgX2NvbmZpZy5yaWRlKSB7XG4gICAgICAgICAgZGF0YS5wYXVzZSgpO1xuICAgICAgICAgIGRhdGEuY3ljbGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIENhcm91c2VsLl9kYXRhQXBpQ2xpY2tIYW5kbGVyID0gZnVuY3Rpb24gX2RhdGFBcGlDbGlja0hhbmRsZXIoZXZlbnQpIHtcbiAgICAgIHZhciBzZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0aGlzKTtcblxuICAgICAgaWYgKCFzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciB0YXJnZXQgPSAkKHNlbGVjdG9yKVswXTtcblxuICAgICAgaWYgKCF0YXJnZXQgfHwgISQodGFyZ2V0KS5oYXNDbGFzcyhDbGFzc05hbWUkMi5DQVJPVVNFTCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgJCh0YXJnZXQpLmRhdGEoKSwgJCh0aGlzKS5kYXRhKCkpO1xuXG4gICAgICB2YXIgc2xpZGVJbmRleCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdkYXRhLXNsaWRlLXRvJyk7XG5cbiAgICAgIGlmIChzbGlkZUluZGV4KSB7XG4gICAgICAgIGNvbmZpZy5pbnRlcnZhbCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBDYXJvdXNlbC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoJCh0YXJnZXQpLCBjb25maWcpO1xuXG4gICAgICBpZiAoc2xpZGVJbmRleCkge1xuICAgICAgICAkKHRhcmdldCkuZGF0YShEQVRBX0tFWSQyKS50byhzbGlkZUluZGV4KTtcbiAgICAgIH1cblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9O1xuXG4gICAgX2NyZWF0ZUNsYXNzKENhcm91c2VsLCBudWxsLCBbe1xuICAgICAga2V5OiBcIlZFUlNJT05cIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gVkVSU0lPTiQyO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJEZWZhdWx0XCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIERlZmF1bHQ7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIENhcm91c2VsO1xuICB9KCk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJChkb2N1bWVudCkub24oRXZlbnQkMi5DTElDS19EQVRBX0FQSSwgU2VsZWN0b3IkMi5EQVRBX1NMSURFLCBDYXJvdXNlbC5fZGF0YUFwaUNsaWNrSGFuZGxlcik7XG4gICQod2luZG93KS5vbihFdmVudCQyLkxPQURfREFUQV9BUEksIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY2Fyb3VzZWxzID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFNlbGVjdG9yJDIuREFUQV9SSURFKSk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gY2Fyb3VzZWxzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB2YXIgJGNhcm91c2VsID0gJChjYXJvdXNlbHNbaV0pO1xuXG4gICAgICBDYXJvdXNlbC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoJGNhcm91c2VsLCAkY2Fyb3VzZWwuZGF0YSgpKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIGpRdWVyeVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgJC5mbltOQU1FJDJdID0gQ2Fyb3VzZWwuX2pRdWVyeUludGVyZmFjZTtcbiAgJC5mbltOQU1FJDJdLkNvbnN0cnVjdG9yID0gQ2Fyb3VzZWw7XG5cbiAgJC5mbltOQU1FJDJdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbltOQU1FJDJdID0gSlFVRVJZX05PX0NPTkZMSUNUJDI7XG4gICAgcmV0dXJuIENhcm91c2VsLl9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBDb25zdGFudHNcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBOQU1FJDMgPSAnY29sbGFwc2UnO1xuICB2YXIgVkVSU0lPTiQzID0gJzQuMy4xJztcbiAgdmFyIERBVEFfS0VZJDMgPSAnYnMuY29sbGFwc2UnO1xuICB2YXIgRVZFTlRfS0VZJDMgPSBcIi5cIiArIERBVEFfS0VZJDM7XG4gIHZhciBEQVRBX0FQSV9LRVkkMyA9ICcuZGF0YS1hcGknO1xuICB2YXIgSlFVRVJZX05PX0NPTkZMSUNUJDMgPSAkLmZuW05BTUUkM107XG4gIHZhciBEZWZhdWx0JDEgPSB7XG4gICAgdG9nZ2xlOiB0cnVlLFxuICAgIHBhcmVudDogJydcbiAgfTtcbiAgdmFyIERlZmF1bHRUeXBlJDEgPSB7XG4gICAgdG9nZ2xlOiAnYm9vbGVhbicsXG4gICAgcGFyZW50OiAnKHN0cmluZ3xlbGVtZW50KSdcbiAgfTtcbiAgdmFyIEV2ZW50JDMgPSB7XG4gICAgU0hPVzogXCJzaG93XCIgKyBFVkVOVF9LRVkkMyxcbiAgICBTSE9XTjogXCJzaG93blwiICsgRVZFTlRfS0VZJDMsXG4gICAgSElERTogXCJoaWRlXCIgKyBFVkVOVF9LRVkkMyxcbiAgICBISURERU46IFwiaGlkZGVuXCIgKyBFVkVOVF9LRVkkMyxcbiAgICBDTElDS19EQVRBX0FQSTogXCJjbGlja1wiICsgRVZFTlRfS0VZJDMgKyBEQVRBX0FQSV9LRVkkM1xuICB9O1xuICB2YXIgQ2xhc3NOYW1lJDMgPSB7XG4gICAgU0hPVzogJ3Nob3cnLFxuICAgIENPTExBUFNFOiAnY29sbGFwc2UnLFxuICAgIENPTExBUFNJTkc6ICdjb2xsYXBzaW5nJyxcbiAgICBDT0xMQVBTRUQ6ICdjb2xsYXBzZWQnXG4gIH07XG4gIHZhciBEaW1lbnNpb24gPSB7XG4gICAgV0lEVEg6ICd3aWR0aCcsXG4gICAgSEVJR0hUOiAnaGVpZ2h0J1xuICB9O1xuICB2YXIgU2VsZWN0b3IkMyA9IHtcbiAgICBBQ1RJVkVTOiAnLnNob3csIC5jb2xsYXBzaW5nJyxcbiAgICBEQVRBX1RPR0dMRTogJ1tkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJdJ1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIENsYXNzIERlZmluaXRpb25cbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuICB9O1xuXG4gIHZhciBDb2xsYXBzZSA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbGxhcHNlKGVsZW1lbnQsIGNvbmZpZykge1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgICAgdGhpcy5fdHJpZ2dlckFycmF5ID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtdG9nZ2xlPVxcXCJjb2xsYXBzZVxcXCJdW2hyZWY9XFxcIiNcIiArIGVsZW1lbnQuaWQgKyBcIlxcXCJdLFwiICsgKFwiW2RhdGEtdG9nZ2xlPVxcXCJjb2xsYXBzZVxcXCJdW2RhdGEtdGFyZ2V0PVxcXCIjXCIgKyBlbGVtZW50LmlkICsgXCJcXFwiXVwiKSkpO1xuICAgICAgdmFyIHRvZ2dsZUxpc3QgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IkMy5EQVRBX1RPR0dMRSkpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdG9nZ2xlTGlzdC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICB2YXIgZWxlbSA9IHRvZ2dsZUxpc3RbaV07XG4gICAgICAgIHZhciBzZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtKTtcbiAgICAgICAgdmFyIGZpbHRlckVsZW1lbnQgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKS5maWx0ZXIoZnVuY3Rpb24gKGZvdW5kRWxlbSkge1xuICAgICAgICAgIHJldHVybiBmb3VuZEVsZW0gPT09IGVsZW1lbnQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChzZWxlY3RvciAhPT0gbnVsbCAmJiBmaWx0ZXJFbGVtZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3RvciA9IHNlbGVjdG9yO1xuXG4gICAgICAgICAgdGhpcy5fdHJpZ2dlckFycmF5LnB1c2goZWxlbSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fcGFyZW50ID0gdGhpcy5fY29uZmlnLnBhcmVudCA/IHRoaXMuX2dldFBhcmVudCgpIDogbnVsbDtcblxuICAgICAgaWYgKCF0aGlzLl9jb25maWcucGFyZW50KSB7XG4gICAgICAgIHRoaXMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0aGlzLl9lbGVtZW50LCB0aGlzLl90cmlnZ2VyQXJyYXkpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fY29uZmlnLnRvZ2dsZSkge1xuICAgICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgICAgfVxuICAgIH0gLy8gR2V0dGVyc1xuXG5cbiAgICB2YXIgX3Byb3RvID0gQ29sbGFwc2UucHJvdG90eXBlO1xuXG4gICAgLy8gUHVibGljXG4gICAgX3Byb3RvLnRvZ2dsZSA9IGZ1bmN0aW9uIHRvZ2dsZSgpIHtcbiAgICAgIGlmICgkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQzLlNIT1cpKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5zaG93ID0gZnVuY3Rpb24gc2hvdygpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLl9pc1RyYW5zaXRpb25pbmcgfHwgJCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUkMy5TSE9XKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBhY3RpdmVzO1xuICAgICAgdmFyIGFjdGl2ZXNEYXRhO1xuXG4gICAgICBpZiAodGhpcy5fcGFyZW50KSB7XG4gICAgICAgIGFjdGl2ZXMgPSBbXS5zbGljZS5jYWxsKHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFNlbGVjdG9yJDMuQUNUSVZFUykpLmZpbHRlcihmdW5jdGlvbiAoZWxlbSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgX3RoaXMuX2NvbmZpZy5wYXJlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGFyZW50JykgPT09IF90aGlzLl9jb25maWcucGFyZW50O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBlbGVtLmNsYXNzTGlzdC5jb250YWlucyhDbGFzc05hbWUkMy5DT0xMQVBTRSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChhY3RpdmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGFjdGl2ZXMgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhY3RpdmVzKSB7XG4gICAgICAgIGFjdGl2ZXNEYXRhID0gJChhY3RpdmVzKS5ub3QodGhpcy5fc2VsZWN0b3IpLmRhdGEoREFUQV9LRVkkMyk7XG5cbiAgICAgICAgaWYgKGFjdGl2ZXNEYXRhICYmIGFjdGl2ZXNEYXRhLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHN0YXJ0RXZlbnQgPSAkLkV2ZW50KEV2ZW50JDMuU0hPVyk7XG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoc3RhcnRFdmVudCk7XG5cbiAgICAgIGlmIChzdGFydEV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGFjdGl2ZXMpIHtcbiAgICAgICAgQ29sbGFwc2UuX2pRdWVyeUludGVyZmFjZS5jYWxsKCQoYWN0aXZlcykubm90KHRoaXMuX3NlbGVjdG9yKSwgJ2hpZGUnKTtcblxuICAgICAgICBpZiAoIWFjdGl2ZXNEYXRhKSB7XG4gICAgICAgICAgJChhY3RpdmVzKS5kYXRhKERBVEFfS0VZJDMsIG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBkaW1lbnNpb24gPSB0aGlzLl9nZXREaW1lbnNpb24oKTtcblxuICAgICAgJCh0aGlzLl9lbGVtZW50KS5yZW1vdmVDbGFzcyhDbGFzc05hbWUkMy5DT0xMQVBTRSkuYWRkQ2xhc3MoQ2xhc3NOYW1lJDMuQ09MTEFQU0lORyk7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSAwO1xuXG4gICAgICBpZiAodGhpcy5fdHJpZ2dlckFycmF5Lmxlbmd0aCkge1xuICAgICAgICAkKHRoaXMuX3RyaWdnZXJBcnJheSkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lJDMuQ09MTEFQU0VEKS5hdHRyKCdhcmlhLWV4cGFuZGVkJywgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0VHJhbnNpdGlvbmluZyh0cnVlKTtcblxuICAgICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24gY29tcGxldGUoKSB7XG4gICAgICAgICQoX3RoaXMuX2VsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQzLkNPTExBUFNJTkcpLmFkZENsYXNzKENsYXNzTmFtZSQzLkNPTExBUFNFKS5hZGRDbGFzcyhDbGFzc05hbWUkMy5TSE9XKTtcbiAgICAgICAgX3RoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9ICcnO1xuXG4gICAgICAgIF90aGlzLnNldFRyYW5zaXRpb25pbmcoZmFsc2UpO1xuXG4gICAgICAgICQoX3RoaXMuX2VsZW1lbnQpLnRyaWdnZXIoRXZlbnQkMy5TSE9XTik7XG4gICAgICB9O1xuXG4gICAgICB2YXIgY2FwaXRhbGl6ZWREaW1lbnNpb24gPSBkaW1lbnNpb25bMF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSgxKTtcbiAgICAgIHZhciBzY3JvbGxTaXplID0gXCJzY3JvbGxcIiArIGNhcGl0YWxpemVkRGltZW5zaW9uO1xuICAgICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7XG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCBjb21wbGV0ZSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9IHRoaXMuX2VsZW1lbnRbc2Nyb2xsU2l6ZV0gKyBcInB4XCI7XG4gICAgfTtcblxuICAgIF9wcm90by5oaWRlID0gZnVuY3Rpb24gaGlkZSgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5faXNUcmFuc2l0aW9uaW5nIHx8ICEkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQzLlNIT1cpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0YXJ0RXZlbnQgPSAkLkV2ZW50KEV2ZW50JDMuSElERSk7XG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoc3RhcnRFdmVudCk7XG5cbiAgICAgIGlmIChzdGFydEV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGRpbWVuc2lvbiA9IHRoaXMuX2dldERpbWVuc2lvbigpO1xuXG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSB0aGlzLl9lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2RpbWVuc2lvbl0gKyBcInB4XCI7XG4gICAgICBVdGlsLnJlZmxvdyh0aGlzLl9lbGVtZW50KTtcbiAgICAgICQodGhpcy5fZWxlbWVudCkuYWRkQ2xhc3MoQ2xhc3NOYW1lJDMuQ09MTEFQU0lORykucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lJDMuQ09MTEFQU0UpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQzLlNIT1cpO1xuICAgICAgdmFyIHRyaWdnZXJBcnJheUxlbmd0aCA9IHRoaXMuX3RyaWdnZXJBcnJheS5sZW5ndGg7XG5cbiAgICAgIGlmICh0cmlnZ2VyQXJyYXlMZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJpZ2dlckFycmF5TGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgdHJpZ2dlciA9IHRoaXMuX3RyaWdnZXJBcnJheVtpXTtcbiAgICAgICAgICB2YXIgc2VsZWN0b3IgPSBVdGlsLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodHJpZ2dlcik7XG5cbiAgICAgICAgICBpZiAoc2VsZWN0b3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciAkZWxlbSA9ICQoW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkpO1xuXG4gICAgICAgICAgICBpZiAoISRlbGVtLmhhc0NsYXNzKENsYXNzTmFtZSQzLlNIT1cpKSB7XG4gICAgICAgICAgICAgICQodHJpZ2dlcikuYWRkQ2xhc3MoQ2xhc3NOYW1lJDMuQ09MTEFQU0VEKS5hdHRyKCdhcmlhLWV4cGFuZGVkJywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFRyYW5zaXRpb25pbmcodHJ1ZSk7XG5cbiAgICAgIHZhciBjb21wbGV0ZSA9IGZ1bmN0aW9uIGNvbXBsZXRlKCkge1xuICAgICAgICBfdGhpczIuc2V0VHJhbnNpdGlvbmluZyhmYWxzZSk7XG5cbiAgICAgICAgJChfdGhpczIuX2VsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQzLkNPTExBUFNJTkcpLmFkZENsYXNzKENsYXNzTmFtZSQzLkNPTExBUFNFKS50cmlnZ2VyKEV2ZW50JDMuSElEREVOKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9ICcnO1xuICAgICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7XG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCBjb21wbGV0ZSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLnNldFRyYW5zaXRpb25pbmcgPSBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uaW5nKGlzVHJhbnNpdGlvbmluZykge1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gaXNUcmFuc2l0aW9uaW5nO1xuICAgIH07XG5cbiAgICBfcHJvdG8uZGlzcG9zZSA9IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgICAkLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwgREFUQV9LRVkkMyk7XG4gICAgICB0aGlzLl9jb25maWcgPSBudWxsO1xuICAgICAgdGhpcy5fcGFyZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsO1xuICAgICAgdGhpcy5fdHJpZ2dlckFycmF5ID0gbnVsbDtcbiAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IG51bGw7XG4gICAgfSAvLyBQcml2YXRlXG4gICAgO1xuXG4gICAgX3Byb3RvLl9nZXRDb25maWcgPSBmdW5jdGlvbiBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgICAgY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgRGVmYXVsdCQxLCBjb25maWcpO1xuICAgICAgY29uZmlnLnRvZ2dsZSA9IEJvb2xlYW4oY29uZmlnLnRvZ2dsZSk7IC8vIENvZXJjZSBzdHJpbmcgdmFsdWVzXG5cbiAgICAgIFV0aWwudHlwZUNoZWNrQ29uZmlnKE5BTUUkMywgY29uZmlnLCBEZWZhdWx0VHlwZSQxKTtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0RGltZW5zaW9uID0gZnVuY3Rpb24gX2dldERpbWVuc2lvbigpIHtcbiAgICAgIHZhciBoYXNXaWR0aCA9ICQodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoRGltZW5zaW9uLldJRFRIKTtcbiAgICAgIHJldHVybiBoYXNXaWR0aCA/IERpbWVuc2lvbi5XSURUSCA6IERpbWVuc2lvbi5IRUlHSFQ7XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0UGFyZW50ID0gZnVuY3Rpb24gX2dldFBhcmVudCgpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgcGFyZW50O1xuXG4gICAgICBpZiAoVXRpbC5pc0VsZW1lbnQodGhpcy5fY29uZmlnLnBhcmVudCkpIHtcbiAgICAgICAgcGFyZW50ID0gdGhpcy5fY29uZmlnLnBhcmVudDsgLy8gSXQncyBhIGpRdWVyeSBvYmplY3RcblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX2NvbmZpZy5wYXJlbnQuanF1ZXJ5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHBhcmVudCA9IHRoaXMuX2NvbmZpZy5wYXJlbnRbMF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5fY29uZmlnLnBhcmVudCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzZWxlY3RvciA9IFwiW2RhdGEtdG9nZ2xlPVxcXCJjb2xsYXBzZVxcXCJdW2RhdGEtcGFyZW50PVxcXCJcIiArIHRoaXMuX2NvbmZpZy5wYXJlbnQgKyBcIlxcXCJdXCI7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBbXS5zbGljZS5jYWxsKHBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSk7XG4gICAgICAkKGNoaWxkcmVuKS5lYWNoKGZ1bmN0aW9uIChpLCBlbGVtZW50KSB7XG4gICAgICAgIF90aGlzMy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKENvbGxhcHNlLl9nZXRUYXJnZXRGcm9tRWxlbWVudChlbGVtZW50KSwgW2VsZW1lbnRdKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MgPSBmdW5jdGlvbiBfYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKGVsZW1lbnQsIHRyaWdnZXJBcnJheSkge1xuICAgICAgdmFyIGlzT3BlbiA9ICQoZWxlbWVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1lJDMuU0hPVyk7XG5cbiAgICAgIGlmICh0cmlnZ2VyQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICQodHJpZ2dlckFycmF5KS50b2dnbGVDbGFzcyhDbGFzc05hbWUkMy5DT0xMQVBTRUQsICFpc09wZW4pLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCBpc09wZW4pO1xuICAgICAgfVxuICAgIH0gLy8gU3RhdGljXG4gICAgO1xuXG4gICAgQ29sbGFwc2UuX2dldFRhcmdldEZyb21FbGVtZW50ID0gZnVuY3Rpb24gX2dldFRhcmdldEZyb21FbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgIHZhciBzZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtZW50KTtcbiAgICAgIHJldHVybiBzZWxlY3RvciA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpIDogbnVsbDtcbiAgICB9O1xuXG4gICAgQ29sbGFwc2UuX2pRdWVyeUludGVyZmFjZSA9IGZ1bmN0aW9uIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTtcbiAgICAgICAgdmFyIGRhdGEgPSAkdGhpcy5kYXRhKERBVEFfS0VZJDMpO1xuXG4gICAgICAgIHZhciBfY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgRGVmYXVsdCQxLCAkdGhpcy5kYXRhKCksIHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZyA/IGNvbmZpZyA6IHt9KTtcblxuICAgICAgICBpZiAoIWRhdGEgJiYgX2NvbmZpZy50b2dnbGUgJiYgL3Nob3d8aGlkZS8udGVzdChjb25maWcpKSB7XG4gICAgICAgICAgX2NvbmZpZy50b2dnbGUgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgIGRhdGEgPSBuZXcgQ29sbGFwc2UodGhpcywgX2NvbmZpZyk7XG4gICAgICAgICAgJHRoaXMuZGF0YShEQVRBX0tFWSQzLCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIG1ldGhvZCBuYW1lZCBcXFwiXCIgKyBjb25maWcgKyBcIlxcXCJcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBfY3JlYXRlQ2xhc3MoQ29sbGFwc2UsIG51bGwsIFt7XG4gICAgICBrZXk6IFwiVkVSU0lPTlwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBWRVJTSU9OJDM7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkRlZmF1bHRcIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gRGVmYXVsdCQxO1xuICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBDb2xsYXBzZTtcbiAgfSgpO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuXG4gICQoZG9jdW1lbnQpLm9uKEV2ZW50JDMuQ0xJQ0tfREFUQV9BUEksIFNlbGVjdG9yJDMuREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIC8vIHByZXZlbnREZWZhdWx0IG9ubHkgZm9yIDxhPiBlbGVtZW50cyAod2hpY2ggY2hhbmdlIHRoZSBVUkwpIG5vdCBpbnNpZGUgdGhlIGNvbGxhcHNpYmxlIGVsZW1lbnRcbiAgICBpZiAoZXZlbnQuY3VycmVudFRhcmdldC50YWdOYW1lID09PSAnQScpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyICR0cmlnZ2VyID0gJCh0aGlzKTtcbiAgICB2YXIgc2VsZWN0b3IgPSBVdGlsLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodGhpcyk7XG4gICAgdmFyIHNlbGVjdG9ycyA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikpO1xuICAgICQoc2VsZWN0b3JzKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkdGFyZ2V0ID0gJCh0aGlzKTtcbiAgICAgIHZhciBkYXRhID0gJHRhcmdldC5kYXRhKERBVEFfS0VZJDMpO1xuICAgICAgdmFyIGNvbmZpZyA9IGRhdGEgPyAndG9nZ2xlJyA6ICR0cmlnZ2VyLmRhdGEoKTtcblxuICAgICAgQ29sbGFwc2UuX2pRdWVyeUludGVyZmFjZS5jYWxsKCR0YXJnZXQsIGNvbmZpZyk7XG4gICAgfSk7XG4gIH0pO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIGpRdWVyeVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgJC5mbltOQU1FJDNdID0gQ29sbGFwc2UuX2pRdWVyeUludGVyZmFjZTtcbiAgJC5mbltOQU1FJDNdLkNvbnN0cnVjdG9yID0gQ29sbGFwc2U7XG5cbiAgJC5mbltOQU1FJDNdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbltOQU1FJDNdID0gSlFVRVJZX05PX0NPTkZMSUNUJDM7XG4gICAgcmV0dXJuIENvbGxhcHNlLl9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBDb25zdGFudHNcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBOQU1FJDQgPSAnZHJvcGRvd24nO1xuICB2YXIgVkVSU0lPTiQ0ID0gJzQuMy4xJztcbiAgdmFyIERBVEFfS0VZJDQgPSAnYnMuZHJvcGRvd24nO1xuICB2YXIgRVZFTlRfS0VZJDQgPSBcIi5cIiArIERBVEFfS0VZJDQ7XG4gIHZhciBEQVRBX0FQSV9LRVkkNCA9ICcuZGF0YS1hcGknO1xuICB2YXIgSlFVRVJZX05PX0NPTkZMSUNUJDQgPSAkLmZuW05BTUUkNF07XG4gIHZhciBFU0NBUEVfS0VZQ09ERSA9IDI3OyAvLyBLZXlib2FyZEV2ZW50LndoaWNoIHZhbHVlIGZvciBFc2NhcGUgKEVzYykga2V5XG5cbiAgdmFyIFNQQUNFX0tFWUNPREUgPSAzMjsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3Igc3BhY2Uga2V5XG5cbiAgdmFyIFRBQl9LRVlDT0RFID0gOTsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3IgdGFiIGtleVxuXG4gIHZhciBBUlJPV19VUF9LRVlDT0RFID0gMzg7IC8vIEtleWJvYXJkRXZlbnQud2hpY2ggdmFsdWUgZm9yIHVwIGFycm93IGtleVxuXG4gIHZhciBBUlJPV19ET1dOX0tFWUNPREUgPSA0MDsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3IgZG93biBhcnJvdyBrZXlcblxuICB2YXIgUklHSFRfTU9VU0VfQlVUVE9OX1dISUNIID0gMzsgLy8gTW91c2VFdmVudC53aGljaCB2YWx1ZSBmb3IgdGhlIHJpZ2h0IGJ1dHRvbiAoYXNzdW1pbmcgYSByaWdodC1oYW5kZWQgbW91c2UpXG5cbiAgdmFyIFJFR0VYUF9LRVlET1dOID0gbmV3IFJlZ0V4cChBUlJPV19VUF9LRVlDT0RFICsgXCJ8XCIgKyBBUlJPV19ET1dOX0tFWUNPREUgKyBcInxcIiArIEVTQ0FQRV9LRVlDT0RFKTtcbiAgdmFyIEV2ZW50JDQgPSB7XG4gICAgSElERTogXCJoaWRlXCIgKyBFVkVOVF9LRVkkNCxcbiAgICBISURERU46IFwiaGlkZGVuXCIgKyBFVkVOVF9LRVkkNCxcbiAgICBTSE9XOiBcInNob3dcIiArIEVWRU5UX0tFWSQ0LFxuICAgIFNIT1dOOiBcInNob3duXCIgKyBFVkVOVF9LRVkkNCxcbiAgICBDTElDSzogXCJjbGlja1wiICsgRVZFTlRfS0VZJDQsXG4gICAgQ0xJQ0tfREFUQV9BUEk6IFwiY2xpY2tcIiArIEVWRU5UX0tFWSQ0ICsgREFUQV9BUElfS0VZJDQsXG4gICAgS0VZRE9XTl9EQVRBX0FQSTogXCJrZXlkb3duXCIgKyBFVkVOVF9LRVkkNCArIERBVEFfQVBJX0tFWSQ0LFxuICAgIEtFWVVQX0RBVEFfQVBJOiBcImtleXVwXCIgKyBFVkVOVF9LRVkkNCArIERBVEFfQVBJX0tFWSQ0XG4gIH07XG4gIHZhciBDbGFzc05hbWUkNCA9IHtcbiAgICBESVNBQkxFRDogJ2Rpc2FibGVkJyxcbiAgICBTSE9XOiAnc2hvdycsXG4gICAgRFJPUFVQOiAnZHJvcHVwJyxcbiAgICBEUk9QUklHSFQ6ICdkcm9wcmlnaHQnLFxuICAgIERST1BMRUZUOiAnZHJvcGxlZnQnLFxuICAgIE1FTlVSSUdIVDogJ2Ryb3Bkb3duLW1lbnUtcmlnaHQnLFxuICAgIE1FTlVMRUZUOiAnZHJvcGRvd24tbWVudS1sZWZ0JyxcbiAgICBQT1NJVElPTl9TVEFUSUM6ICdwb3NpdGlvbi1zdGF0aWMnXG4gIH07XG4gIHZhciBTZWxlY3RvciQ0ID0ge1xuICAgIERBVEFfVE9HR0xFOiAnW2RhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIl0nLFxuICAgIEZPUk1fQ0hJTEQ6ICcuZHJvcGRvd24gZm9ybScsXG4gICAgTUVOVTogJy5kcm9wZG93bi1tZW51JyxcbiAgICBOQVZCQVJfTkFWOiAnLm5hdmJhci1uYXYnLFxuICAgIFZJU0lCTEVfSVRFTVM6ICcuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbTpub3QoLmRpc2FibGVkKTpub3QoOmRpc2FibGVkKSdcbiAgfTtcbiAgdmFyIEF0dGFjaG1lbnRNYXAgPSB7XG4gICAgVE9QOiAndG9wLXN0YXJ0JyxcbiAgICBUT1BFTkQ6ICd0b3AtZW5kJyxcbiAgICBCT1RUT006ICdib3R0b20tc3RhcnQnLFxuICAgIEJPVFRPTUVORDogJ2JvdHRvbS1lbmQnLFxuICAgIFJJR0hUOiAncmlnaHQtc3RhcnQnLFxuICAgIFJJR0hURU5EOiAncmlnaHQtZW5kJyxcbiAgICBMRUZUOiAnbGVmdC1zdGFydCcsXG4gICAgTEVGVEVORDogJ2xlZnQtZW5kJ1xuICB9O1xuICB2YXIgRGVmYXVsdCQyID0ge1xuICAgIG9mZnNldDogMCxcbiAgICBmbGlwOiB0cnVlLFxuICAgIGJvdW5kYXJ5OiAnc2Nyb2xsUGFyZW50JyxcbiAgICByZWZlcmVuY2U6ICd0b2dnbGUnLFxuICAgIGRpc3BsYXk6ICdkeW5hbWljJ1xuICB9O1xuICB2YXIgRGVmYXVsdFR5cGUkMiA9IHtcbiAgICBvZmZzZXQ6ICcobnVtYmVyfHN0cmluZ3xmdW5jdGlvbiknLFxuICAgIGZsaXA6ICdib29sZWFuJyxcbiAgICBib3VuZGFyeTogJyhzdHJpbmd8ZWxlbWVudCknLFxuICAgIHJlZmVyZW5jZTogJyhzdHJpbmd8ZWxlbWVudCknLFxuICAgIGRpc3BsYXk6ICdzdHJpbmcnXG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG4gIH07XG5cbiAgdmFyIERyb3Bkb3duID1cbiAgLyojX19QVVJFX18qL1xuICBmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRHJvcGRvd24oZWxlbWVudCwgY29uZmlnKSB7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgIHRoaXMuX3BvcHBlciA9IG51bGw7XG4gICAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICAgIHRoaXMuX21lbnUgPSB0aGlzLl9nZXRNZW51RWxlbWVudCgpO1xuICAgICAgdGhpcy5faW5OYXZiYXIgPSB0aGlzLl9kZXRlY3ROYXZiYXIoKTtcblxuICAgICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICB9IC8vIEdldHRlcnNcblxuXG4gICAgdmFyIF9wcm90byA9IERyb3Bkb3duLnByb3RvdHlwZTtcblxuICAgIC8vIFB1YmxpY1xuICAgIF9wcm90by50b2dnbGUgPSBmdW5jdGlvbiB0b2dnbGUoKSB7XG4gICAgICBpZiAodGhpcy5fZWxlbWVudC5kaXNhYmxlZCB8fCAkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQ0LkRJU0FCTEVEKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBwYXJlbnQgPSBEcm9wZG93bi5fZ2V0UGFyZW50RnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7XG5cbiAgICAgIHZhciBpc0FjdGl2ZSA9ICQodGhpcy5fbWVudSkuaGFzQ2xhc3MoQ2xhc3NOYW1lJDQuU0hPVyk7XG5cbiAgICAgIERyb3Bkb3duLl9jbGVhck1lbnVzKCk7XG5cbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiB0aGlzLl9lbGVtZW50XG4gICAgICB9O1xuICAgICAgdmFyIHNob3dFdmVudCA9ICQuRXZlbnQoRXZlbnQkNC5TSE9XLCByZWxhdGVkVGFyZ2V0KTtcbiAgICAgICQocGFyZW50KS50cmlnZ2VyKHNob3dFdmVudCk7XG5cbiAgICAgIGlmIChzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBEaXNhYmxlIHRvdGFsbHkgUG9wcGVyLmpzIGZvciBEcm9wZG93biBpbiBOYXZiYXJcblxuXG4gICAgICBpZiAoIXRoaXMuX2luTmF2YmFyKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDaGVjayBmb3IgUG9wcGVyIGRlcGVuZGVuY3lcbiAgICAgICAgICogUG9wcGVyIC0gaHR0cHM6Ly9wb3BwZXIuanMub3JnXG4gICAgICAgICAqL1xuICAgICAgICBpZiAodHlwZW9mIFBvcHBlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb290c3RyYXBcXCdzIGRyb3Bkb3ducyByZXF1aXJlIFBvcHBlci5qcyAoaHR0cHM6Ly9wb3BwZXIuanMub3JnLyknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fZWxlbWVudDtcblxuICAgICAgICBpZiAodGhpcy5fY29uZmlnLnJlZmVyZW5jZSA9PT0gJ3BhcmVudCcpIHtcbiAgICAgICAgICByZWZlcmVuY2VFbGVtZW50ID0gcGFyZW50O1xuICAgICAgICB9IGVsc2UgaWYgKFV0aWwuaXNFbGVtZW50KHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UpKSB7XG4gICAgICAgICAgcmVmZXJlbmNlRWxlbWVudCA9IHRoaXMuX2NvbmZpZy5yZWZlcmVuY2U7IC8vIENoZWNrIGlmIGl0J3MgalF1ZXJ5IGVsZW1lbnRcblxuICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fY29uZmlnLnJlZmVyZW5jZS5qcXVlcnkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fY29uZmlnLnJlZmVyZW5jZVswXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gSWYgYm91bmRhcnkgaXMgbm90IGBzY3JvbGxQYXJlbnRgLCB0aGVuIHNldCBwb3NpdGlvbiB0byBgc3RhdGljYFxuICAgICAgICAvLyB0byBhbGxvdyB0aGUgbWVudSB0byBcImVzY2FwZVwiIHRoZSBzY3JvbGwgcGFyZW50J3MgYm91bmRhcmllc1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzI0MjUxXG5cblxuICAgICAgICBpZiAodGhpcy5fY29uZmlnLmJvdW5kYXJ5ICE9PSAnc2Nyb2xsUGFyZW50Jykge1xuICAgICAgICAgICQocGFyZW50KS5hZGRDbGFzcyhDbGFzc05hbWUkNC5QT1NJVElPTl9TVEFUSUMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcG9wcGVyID0gbmV3IFBvcHBlcihyZWZlcmVuY2VFbGVtZW50LCB0aGlzLl9tZW51LCB0aGlzLl9nZXRQb3BwZXJDb25maWcoKSk7XG4gICAgICB9IC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSBhZGQgZXh0cmFcbiAgICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgdG8gdGhlIGJvZHkncyBpbW1lZGlhdGUgY2hpbGRyZW47XG4gICAgICAvLyBvbmx5IG5lZWRlZCBiZWNhdXNlIG9mIGJyb2tlbiBldmVudCBkZWxlZ2F0aW9uIG9uIGlPU1xuICAgICAgLy8gaHR0cHM6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDE0LzAyL21vdXNlX2V2ZW50X2J1Yi5odG1sXG5cblxuICAgICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiAkKHBhcmVudCkuY2xvc2VzdChTZWxlY3RvciQ0Lk5BVkJBUl9OQVYpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAkKGRvY3VtZW50LmJvZHkpLmNoaWxkcmVuKCkub24oJ21vdXNlb3ZlcicsIG51bGwsICQubm9vcCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuZm9jdXMoKTtcblxuICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCB0cnVlKTtcblxuICAgICAgJCh0aGlzLl9tZW51KS50b2dnbGVDbGFzcyhDbGFzc05hbWUkNC5TSE9XKTtcbiAgICAgICQocGFyZW50KS50b2dnbGVDbGFzcyhDbGFzc05hbWUkNC5TSE9XKS50cmlnZ2VyKCQuRXZlbnQoRXZlbnQkNC5TSE9XTiwgcmVsYXRlZFRhcmdldCkpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uc2hvdyA9IGZ1bmN0aW9uIHNob3coKSB7XG4gICAgICBpZiAodGhpcy5fZWxlbWVudC5kaXNhYmxlZCB8fCAkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQ0LkRJU0FCTEVEKSB8fCAkKHRoaXMuX21lbnUpLmhhc0NsYXNzKENsYXNzTmFtZSQ0LlNIT1cpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlbGF0ZWRUYXJnZXQgPSB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRoaXMuX2VsZW1lbnRcbiAgICAgIH07XG4gICAgICB2YXIgc2hvd0V2ZW50ID0gJC5FdmVudChFdmVudCQ0LlNIT1csIHJlbGF0ZWRUYXJnZXQpO1xuXG4gICAgICB2YXIgcGFyZW50ID0gRHJvcGRvd24uX2dldFBhcmVudEZyb21FbGVtZW50KHRoaXMuX2VsZW1lbnQpO1xuXG4gICAgICAkKHBhcmVudCkudHJpZ2dlcihzaG93RXZlbnQpO1xuXG4gICAgICBpZiAoc2hvd0V2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgJCh0aGlzLl9tZW51KS50b2dnbGVDbGFzcyhDbGFzc05hbWUkNC5TSE9XKTtcbiAgICAgICQocGFyZW50KS50b2dnbGVDbGFzcyhDbGFzc05hbWUkNC5TSE9XKS50cmlnZ2VyKCQuRXZlbnQoRXZlbnQkNC5TSE9XTiwgcmVsYXRlZFRhcmdldCkpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uaGlkZSA9IGZ1bmN0aW9uIGhpZGUoKSB7XG4gICAgICBpZiAodGhpcy5fZWxlbWVudC5kaXNhYmxlZCB8fCAkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQ0LkRJU0FCTEVEKSB8fCAhJCh0aGlzLl9tZW51KS5oYXNDbGFzcyhDbGFzc05hbWUkNC5TSE9XKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiB0aGlzLl9lbGVtZW50XG4gICAgICB9O1xuICAgICAgdmFyIGhpZGVFdmVudCA9ICQuRXZlbnQoRXZlbnQkNC5ISURFLCByZWxhdGVkVGFyZ2V0KTtcblxuICAgICAgdmFyIHBhcmVudCA9IERyb3Bkb3duLl9nZXRQYXJlbnRGcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcblxuICAgICAgJChwYXJlbnQpLnRyaWdnZXIoaGlkZUV2ZW50KTtcblxuICAgICAgaWYgKGhpZGVFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgICQodGhpcy5fbWVudSkudG9nZ2xlQ2xhc3MoQ2xhc3NOYW1lJDQuU0hPVyk7XG4gICAgICAkKHBhcmVudCkudG9nZ2xlQ2xhc3MoQ2xhc3NOYW1lJDQuU0hPVykudHJpZ2dlcigkLkV2ZW50KEV2ZW50JDQuSElEREVOLCByZWxhdGVkVGFyZ2V0KSk7XG4gICAgfTtcblxuICAgIF9wcm90by5kaXNwb3NlID0gZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICAgICQucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LCBEQVRBX0tFWSQ0KTtcbiAgICAgICQodGhpcy5fZWxlbWVudCkub2ZmKEVWRU5UX0tFWSQ0KTtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsO1xuICAgICAgdGhpcy5fbWVudSA9IG51bGw7XG5cbiAgICAgIGlmICh0aGlzLl9wb3BwZXIgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5fcG9wcGVyLmRlc3Ryb3koKTtcblxuICAgICAgICB0aGlzLl9wb3BwZXIgPSBudWxsO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8udXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgICAgdGhpcy5faW5OYXZiYXIgPSB0aGlzLl9kZXRlY3ROYXZiYXIoKTtcblxuICAgICAgaWYgKHRoaXMuX3BvcHBlciAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9wb3BwZXIuc2NoZWR1bGVVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9IC8vIFByaXZhdGVcbiAgICA7XG5cbiAgICBfcHJvdG8uX2FkZEV2ZW50TGlzdGVuZXJzID0gZnVuY3Rpb24gX2FkZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbihFdmVudCQ0LkNMSUNLLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgX3RoaXMudG9nZ2xlKCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9nZXRDb25maWcgPSBmdW5jdGlvbiBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgICAgY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0LCAkKHRoaXMuX2VsZW1lbnQpLmRhdGEoKSwgY29uZmlnKTtcbiAgICAgIFV0aWwudHlwZUNoZWNrQ29uZmlnKE5BTUUkNCwgY29uZmlnLCB0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRUeXBlKTtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0TWVudUVsZW1lbnQgPSBmdW5jdGlvbiBfZ2V0TWVudUVsZW1lbnQoKSB7XG4gICAgICBpZiAoIXRoaXMuX21lbnUpIHtcbiAgICAgICAgdmFyIHBhcmVudCA9IERyb3Bkb3duLl9nZXRQYXJlbnRGcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcblxuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgdGhpcy5fbWVudSA9IHBhcmVudC5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yJDQuTUVOVSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX21lbnU7XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0UGxhY2VtZW50ID0gZnVuY3Rpb24gX2dldFBsYWNlbWVudCgpIHtcbiAgICAgIHZhciAkcGFyZW50RHJvcGRvd24gPSAkKHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSk7XG4gICAgICB2YXIgcGxhY2VtZW50ID0gQXR0YWNobWVudE1hcC5CT1RUT007IC8vIEhhbmRsZSBkcm9wdXBcblxuICAgICAgaWYgKCRwYXJlbnREcm9wZG93bi5oYXNDbGFzcyhDbGFzc05hbWUkNC5EUk9QVVApKSB7XG4gICAgICAgIHBsYWNlbWVudCA9IEF0dGFjaG1lbnRNYXAuVE9QO1xuXG4gICAgICAgIGlmICgkKHRoaXMuX21lbnUpLmhhc0NsYXNzKENsYXNzTmFtZSQ0Lk1FTlVSSUdIVCkpIHtcbiAgICAgICAgICBwbGFjZW1lbnQgPSBBdHRhY2htZW50TWFwLlRPUEVORDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgkcGFyZW50RHJvcGRvd24uaGFzQ2xhc3MoQ2xhc3NOYW1lJDQuRFJPUFJJR0hUKSkge1xuICAgICAgICBwbGFjZW1lbnQgPSBBdHRhY2htZW50TWFwLlJJR0hUO1xuICAgICAgfSBlbHNlIGlmICgkcGFyZW50RHJvcGRvd24uaGFzQ2xhc3MoQ2xhc3NOYW1lJDQuRFJPUExFRlQpKSB7XG4gICAgICAgIHBsYWNlbWVudCA9IEF0dGFjaG1lbnRNYXAuTEVGVDtcbiAgICAgIH0gZWxzZSBpZiAoJCh0aGlzLl9tZW51KS5oYXNDbGFzcyhDbGFzc05hbWUkNC5NRU5VUklHSFQpKSB7XG4gICAgICAgIHBsYWNlbWVudCA9IEF0dGFjaG1lbnRNYXAuQk9UVE9NRU5EO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGxhY2VtZW50O1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2RldGVjdE5hdmJhciA9IGZ1bmN0aW9uIF9kZXRlY3ROYXZiYXIoKSB7XG4gICAgICByZXR1cm4gJCh0aGlzLl9lbGVtZW50KS5jbG9zZXN0KCcubmF2YmFyJykubGVuZ3RoID4gMDtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9nZXRPZmZzZXQgPSBmdW5jdGlvbiBfZ2V0T2Zmc2V0KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBvZmZzZXQgPSB7fTtcblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLl9jb25maWcub2Zmc2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG9mZnNldC5mbiA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgZGF0YS5vZmZzZXRzID0gX29iamVjdFNwcmVhZCh7fSwgZGF0YS5vZmZzZXRzLCBfdGhpczIuX2NvbmZpZy5vZmZzZXQoZGF0YS5vZmZzZXRzLCBfdGhpczIuX2VsZW1lbnQpIHx8IHt9KTtcbiAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9mZnNldC5vZmZzZXQgPSB0aGlzLl9jb25maWcub2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2Zmc2V0O1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldFBvcHBlckNvbmZpZyA9IGZ1bmN0aW9uIF9nZXRQb3BwZXJDb25maWcoKSB7XG4gICAgICB2YXIgcG9wcGVyQ29uZmlnID0ge1xuICAgICAgICBwbGFjZW1lbnQ6IHRoaXMuX2dldFBsYWNlbWVudCgpLFxuICAgICAgICBtb2RpZmllcnM6IHtcbiAgICAgICAgICBvZmZzZXQ6IHRoaXMuX2dldE9mZnNldCgpLFxuICAgICAgICAgIGZsaXA6IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRoaXMuX2NvbmZpZy5mbGlwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcmV2ZW50T3ZlcmZsb3c6IHtcbiAgICAgICAgICAgIGJvdW5kYXJpZXNFbGVtZW50OiB0aGlzLl9jb25maWcuYm91bmRhcnlcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gRGlzYWJsZSBQb3BwZXIuanMgaWYgd2UgaGF2ZSBhIHN0YXRpYyBkaXNwbGF5XG5cbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcuZGlzcGxheSA9PT0gJ3N0YXRpYycpIHtcbiAgICAgICAgcG9wcGVyQ29uZmlnLm1vZGlmaWVycy5hcHBseVN0eWxlID0ge1xuICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwb3BwZXJDb25maWc7XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBEcm9wZG93bi5falF1ZXJ5SW50ZXJmYWNlID0gZnVuY3Rpb24gX2pRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YShEQVRBX0tFWSQ0KTtcblxuICAgICAgICB2YXIgX2NvbmZpZyA9IHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnID8gY29uZmlnIDogbnVsbDtcblxuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICBkYXRhID0gbmV3IERyb3Bkb3duKHRoaXMsIF9jb25maWcpO1xuICAgICAgICAgICQodGhpcykuZGF0YShEQVRBX0tFWSQ0LCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIG1ldGhvZCBuYW1lZCBcXFwiXCIgKyBjb25maWcgKyBcIlxcXCJcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBEcm9wZG93bi5fY2xlYXJNZW51cyA9IGZ1bmN0aW9uIF9jbGVhck1lbnVzKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQgJiYgKGV2ZW50LndoaWNoID09PSBSSUdIVF9NT1VTRV9CVVRUT05fV0hJQ0ggfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBldmVudC53aGljaCAhPT0gVEFCX0tFWUNPREUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHRvZ2dsZXMgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IkNC5EQVRBX1RPR0dMRSkpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdG9nZ2xlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICB2YXIgcGFyZW50ID0gRHJvcGRvd24uX2dldFBhcmVudEZyb21FbGVtZW50KHRvZ2dsZXNbaV0pO1xuXG4gICAgICAgIHZhciBjb250ZXh0ID0gJCh0b2dnbGVzW2ldKS5kYXRhKERBVEFfS0VZJDQpO1xuICAgICAgICB2YXIgcmVsYXRlZFRhcmdldCA9IHtcbiAgICAgICAgICByZWxhdGVkVGFyZ2V0OiB0b2dnbGVzW2ldXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LnR5cGUgPT09ICdjbGljaycpIHtcbiAgICAgICAgICByZWxhdGVkVGFyZ2V0LmNsaWNrRXZlbnQgPSBldmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29udGV4dCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRyb3Bkb3duTWVudSA9IGNvbnRleHQuX21lbnU7XG5cbiAgICAgICAgaWYgKCEkKHBhcmVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1lJDQuU0hPVykpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudCAmJiAoZXZlbnQudHlwZSA9PT0gJ2NsaWNrJyAmJiAvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSB8fCBldmVudC50eXBlID09PSAna2V5dXAnICYmIGV2ZW50LndoaWNoID09PSBUQUJfS0VZQ09ERSkgJiYgJC5jb250YWlucyhwYXJlbnQsIGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBoaWRlRXZlbnQgPSAkLkV2ZW50KEV2ZW50JDQuSElERSwgcmVsYXRlZFRhcmdldCk7XG4gICAgICAgICQocGFyZW50KS50cmlnZ2VyKGhpZGVFdmVudCk7XG5cbiAgICAgICAgaWYgKGhpZGVFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSByZW1vdmUgdGhlIGV4dHJhXG4gICAgICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgd2UgYWRkZWQgZm9yIGlPUyBzdXBwb3J0XG5cblxuICAgICAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgICAgJChkb2N1bWVudC5ib2R5KS5jaGlsZHJlbigpLm9mZignbW91c2VvdmVyJywgbnVsbCwgJC5ub29wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRvZ2dsZXNbaV0uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XG4gICAgICAgICQoZHJvcGRvd25NZW51KS5yZW1vdmVDbGFzcyhDbGFzc05hbWUkNC5TSE9XKTtcbiAgICAgICAgJChwYXJlbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQ0LlNIT1cpLnRyaWdnZXIoJC5FdmVudChFdmVudCQ0LkhJRERFTiwgcmVsYXRlZFRhcmdldCkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBEcm9wZG93bi5fZ2V0UGFyZW50RnJvbUVsZW1lbnQgPSBmdW5jdGlvbiBfZ2V0UGFyZW50RnJvbUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgdmFyIHBhcmVudDtcbiAgICAgIHZhciBzZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgIHBhcmVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyZW50IHx8IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gICAgO1xuXG4gICAgRHJvcGRvd24uX2RhdGFBcGlLZXlkb3duSGFuZGxlciA9IGZ1bmN0aW9uIF9kYXRhQXBpS2V5ZG93bkhhbmRsZXIoZXZlbnQpIHtcbiAgICAgIC8vIElmIG5vdCBpbnB1dC90ZXh0YXJlYTpcbiAgICAgIC8vICAtIEFuZCBub3QgYSBrZXkgaW4gUkVHRVhQX0tFWURPV04gPT4gbm90IGEgZHJvcGRvd24gY29tbWFuZFxuICAgICAgLy8gSWYgaW5wdXQvdGV4dGFyZWE6XG4gICAgICAvLyAgLSBJZiBzcGFjZSBrZXkgPT4gbm90IGEgZHJvcGRvd24gY29tbWFuZFxuICAgICAgLy8gIC0gSWYga2V5IGlzIG90aGVyIHRoYW4gZXNjYXBlXG4gICAgICAvLyAgICAtIElmIGtleSBpcyBub3QgdXAgb3IgZG93biA9PiBub3QgYSBkcm9wZG93biBjb21tYW5kXG4gICAgICAvLyAgICAtIElmIHRyaWdnZXIgaW5zaWRlIHRoZSBtZW51ID0+IG5vdCBhIGRyb3Bkb3duIGNvbW1hbmRcbiAgICAgIGlmICgvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSA/IGV2ZW50LndoaWNoID09PSBTUEFDRV9LRVlDT0RFIHx8IGV2ZW50LndoaWNoICE9PSBFU0NBUEVfS0VZQ09ERSAmJiAoZXZlbnQud2hpY2ggIT09IEFSUk9XX0RPV05fS0VZQ09ERSAmJiBldmVudC53aGljaCAhPT0gQVJST1dfVVBfS0VZQ09ERSB8fCAkKGV2ZW50LnRhcmdldCkuY2xvc2VzdChTZWxlY3RvciQ0Lk1FTlUpLmxlbmd0aCkgOiAhUkVHRVhQX0tFWURPV04udGVzdChldmVudC53aGljaCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8ICQodGhpcykuaGFzQ2xhc3MoQ2xhc3NOYW1lJDQuRElTQUJMRUQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHBhcmVudCA9IERyb3Bkb3duLl9nZXRQYXJlbnRGcm9tRWxlbWVudCh0aGlzKTtcblxuICAgICAgdmFyIGlzQWN0aXZlID0gJChwYXJlbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQ0LlNIT1cpO1xuXG4gICAgICBpZiAoIWlzQWN0aXZlIHx8IGlzQWN0aXZlICYmIChldmVudC53aGljaCA9PT0gRVNDQVBFX0tFWUNPREUgfHwgZXZlbnQud2hpY2ggPT09IFNQQUNFX0tFWUNPREUpKSB7XG4gICAgICAgIGlmIChldmVudC53aGljaCA9PT0gRVNDQVBFX0tFWUNPREUpIHtcbiAgICAgICAgICB2YXIgdG9nZ2xlID0gcGFyZW50LnF1ZXJ5U2VsZWN0b3IoU2VsZWN0b3IkNC5EQVRBX1RPR0dMRSk7XG4gICAgICAgICAgJCh0b2dnbGUpLnRyaWdnZXIoJ2ZvY3VzJyk7XG4gICAgICAgIH1cblxuICAgICAgICAkKHRoaXMpLnRyaWdnZXIoJ2NsaWNrJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGl0ZW1zID0gW10uc2xpY2UuY2FsbChwYXJlbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3RvciQ0LlZJU0lCTEVfSVRFTVMpKTtcblxuICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBpbmRleCA9IGl0ZW1zLmluZGV4T2YoZXZlbnQudGFyZ2V0KTtcblxuICAgICAgaWYgKGV2ZW50LndoaWNoID09PSBBUlJPV19VUF9LRVlDT0RFICYmIGluZGV4ID4gMCkge1xuICAgICAgICAvLyBVcFxuICAgICAgICBpbmRleC0tO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQud2hpY2ggPT09IEFSUk9XX0RPV05fS0VZQ09ERSAmJiBpbmRleCA8IGl0ZW1zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgLy8gRG93blxuICAgICAgICBpbmRleCsrO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIGluZGV4ID0gMDtcbiAgICAgIH1cblxuICAgICAgaXRlbXNbaW5kZXhdLmZvY3VzKCk7XG4gICAgfTtcblxuICAgIF9jcmVhdGVDbGFzcyhEcm9wZG93biwgbnVsbCwgW3tcbiAgICAgIGtleTogXCJWRVJTSU9OXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIFZFUlNJT04kNDtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiRGVmYXVsdFwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBEZWZhdWx0JDI7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkRlZmF1bHRUeXBlXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIERlZmF1bHRUeXBlJDI7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIERyb3Bkb3duO1xuICB9KCk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJChkb2N1bWVudCkub24oRXZlbnQkNC5LRVlET1dOX0RBVEFfQVBJLCBTZWxlY3RvciQ0LkRBVEFfVE9HR0xFLCBEcm9wZG93bi5fZGF0YUFwaUtleWRvd25IYW5kbGVyKS5vbihFdmVudCQ0LktFWURPV05fREFUQV9BUEksIFNlbGVjdG9yJDQuTUVOVSwgRHJvcGRvd24uX2RhdGFBcGlLZXlkb3duSGFuZGxlcikub24oRXZlbnQkNC5DTElDS19EQVRBX0FQSSArIFwiIFwiICsgRXZlbnQkNC5LRVlVUF9EQVRBX0FQSSwgRHJvcGRvd24uX2NsZWFyTWVudXMpLm9uKEV2ZW50JDQuQ0xJQ0tfREFUQV9BUEksIFNlbGVjdG9yJDQuREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBEcm9wZG93bi5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoJCh0aGlzKSwgJ3RvZ2dsZScpO1xuICB9KS5vbihFdmVudCQ0LkNMSUNLX0RBVEFfQVBJLCBTZWxlY3RvciQ0LkZPUk1fQ0hJTEQsIGZ1bmN0aW9uIChlKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfSk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogalF1ZXJ5XG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICAkLmZuW05BTUUkNF0gPSBEcm9wZG93bi5falF1ZXJ5SW50ZXJmYWNlO1xuICAkLmZuW05BTUUkNF0uQ29uc3RydWN0b3IgPSBEcm9wZG93bjtcblxuICAkLmZuW05BTUUkNF0ubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAkLmZuW05BTUUkNF0gPSBKUVVFUllfTk9fQ09ORkxJQ1QkNDtcbiAgICByZXR1cm4gRHJvcGRvd24uX2pRdWVyeUludGVyZmFjZTtcbiAgfTtcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIENvbnN0YW50c1xuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgdmFyIE5BTUUkNSA9ICdtb2RhbCc7XG4gIHZhciBWRVJTSU9OJDUgPSAnNC4zLjEnO1xuICB2YXIgREFUQV9LRVkkNSA9ICdicy5tb2RhbCc7XG4gIHZhciBFVkVOVF9LRVkkNSA9IFwiLlwiICsgREFUQV9LRVkkNTtcbiAgdmFyIERBVEFfQVBJX0tFWSQ1ID0gJy5kYXRhLWFwaSc7XG4gIHZhciBKUVVFUllfTk9fQ09ORkxJQ1QkNSA9ICQuZm5bTkFNRSQ1XTtcbiAgdmFyIEVTQ0FQRV9LRVlDT0RFJDEgPSAyNzsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3IgRXNjYXBlIChFc2MpIGtleVxuXG4gIHZhciBEZWZhdWx0JDMgPSB7XG4gICAgYmFja2Ryb3A6IHRydWUsXG4gICAga2V5Ym9hcmQ6IHRydWUsXG4gICAgZm9jdXM6IHRydWUsXG4gICAgc2hvdzogdHJ1ZVxuICB9O1xuICB2YXIgRGVmYXVsdFR5cGUkMyA9IHtcbiAgICBiYWNrZHJvcDogJyhib29sZWFufHN0cmluZyknLFxuICAgIGtleWJvYXJkOiAnYm9vbGVhbicsXG4gICAgZm9jdXM6ICdib29sZWFuJyxcbiAgICBzaG93OiAnYm9vbGVhbidcbiAgfTtcbiAgdmFyIEV2ZW50JDUgPSB7XG4gICAgSElERTogXCJoaWRlXCIgKyBFVkVOVF9LRVkkNSxcbiAgICBISURERU46IFwiaGlkZGVuXCIgKyBFVkVOVF9LRVkkNSxcbiAgICBTSE9XOiBcInNob3dcIiArIEVWRU5UX0tFWSQ1LFxuICAgIFNIT1dOOiBcInNob3duXCIgKyBFVkVOVF9LRVkkNSxcbiAgICBGT0NVU0lOOiBcImZvY3VzaW5cIiArIEVWRU5UX0tFWSQ1LFxuICAgIFJFU0laRTogXCJyZXNpemVcIiArIEVWRU5UX0tFWSQ1LFxuICAgIENMSUNLX0RJU01JU1M6IFwiY2xpY2suZGlzbWlzc1wiICsgRVZFTlRfS0VZJDUsXG4gICAgS0VZRE9XTl9ESVNNSVNTOiBcImtleWRvd24uZGlzbWlzc1wiICsgRVZFTlRfS0VZJDUsXG4gICAgTU9VU0VVUF9ESVNNSVNTOiBcIm1vdXNldXAuZGlzbWlzc1wiICsgRVZFTlRfS0VZJDUsXG4gICAgTU9VU0VET1dOX0RJU01JU1M6IFwibW91c2Vkb3duLmRpc21pc3NcIiArIEVWRU5UX0tFWSQ1LFxuICAgIENMSUNLX0RBVEFfQVBJOiBcImNsaWNrXCIgKyBFVkVOVF9LRVkkNSArIERBVEFfQVBJX0tFWSQ1XG4gIH07XG4gIHZhciBDbGFzc05hbWUkNSA9IHtcbiAgICBTQ1JPTExBQkxFOiAnbW9kYWwtZGlhbG9nLXNjcm9sbGFibGUnLFxuICAgIFNDUk9MTEJBUl9NRUFTVVJFUjogJ21vZGFsLXNjcm9sbGJhci1tZWFzdXJlJyxcbiAgICBCQUNLRFJPUDogJ21vZGFsLWJhY2tkcm9wJyxcbiAgICBPUEVOOiAnbW9kYWwtb3BlbicsXG4gICAgRkFERTogJ2ZhZGUnLFxuICAgIFNIT1c6ICdzaG93J1xuICB9O1xuICB2YXIgU2VsZWN0b3IkNSA9IHtcbiAgICBESUFMT0c6ICcubW9kYWwtZGlhbG9nJyxcbiAgICBNT0RBTF9CT0RZOiAnLm1vZGFsLWJvZHknLFxuICAgIERBVEFfVE9HR0xFOiAnW2RhdGEtdG9nZ2xlPVwibW9kYWxcIl0nLFxuICAgIERBVEFfRElTTUlTUzogJ1tkYXRhLWRpc21pc3M9XCJtb2RhbFwiXScsXG4gICAgRklYRURfQ09OVEVOVDogJy5maXhlZC10b3AsIC5maXhlZC1ib3R0b20sIC5pcy1maXhlZCwgLnN0aWNreS10b3AnLFxuICAgIFNUSUNLWV9DT05URU5UOiAnLnN0aWNreS10b3AnXG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG4gIH07XG5cbiAgdmFyIE1vZGFsID1cbiAgLyojX19QVVJFX18qL1xuICBmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTW9kYWwoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgdGhpcy5fZGlhbG9nID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yJDUuRElBTE9HKTtcbiAgICAgIHRoaXMuX2JhY2tkcm9wID0gbnVsbDtcbiAgICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZTtcbiAgICAgIHRoaXMuX2lzQm9keU92ZXJmbG93aW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrID0gZmFsc2U7XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3Njcm9sbGJhcldpZHRoID0gMDtcbiAgICB9IC8vIEdldHRlcnNcblxuXG4gICAgdmFyIF9wcm90byA9IE1vZGFsLnByb3RvdHlwZTtcblxuICAgIC8vIFB1YmxpY1xuICAgIF9wcm90by50b2dnbGUgPSBmdW5jdGlvbiB0b2dnbGUocmVsYXRlZFRhcmdldCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2lzU2hvd24gPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdyhyZWxhdGVkVGFyZ2V0KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLnNob3cgPSBmdW5jdGlvbiBzaG93KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLl9pc1Nob3duIHx8IHRoaXMuX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICgkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQ1LkZBREUpKSB7XG4gICAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBzaG93RXZlbnQgPSAkLkV2ZW50KEV2ZW50JDUuU0hPVywge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiByZWxhdGVkVGFyZ2V0XG4gICAgICB9KTtcbiAgICAgICQodGhpcy5fZWxlbWVudCkudHJpZ2dlcihzaG93RXZlbnQpO1xuXG4gICAgICBpZiAodGhpcy5faXNTaG93biB8fCBzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pc1Nob3duID0gdHJ1ZTtcblxuICAgICAgdGhpcy5fY2hlY2tTY3JvbGxiYXIoKTtcblxuICAgICAgdGhpcy5fc2V0U2Nyb2xsYmFyKCk7XG5cbiAgICAgIHRoaXMuX2FkanVzdERpYWxvZygpO1xuXG4gICAgICB0aGlzLl9zZXRFc2NhcGVFdmVudCgpO1xuXG4gICAgICB0aGlzLl9zZXRSZXNpemVFdmVudCgpO1xuXG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLm9uKEV2ZW50JDUuQ0xJQ0tfRElTTUlTUywgU2VsZWN0b3IkNS5EQVRBX0RJU01JU1MsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICByZXR1cm4gX3RoaXMuaGlkZShldmVudCk7XG4gICAgICB9KTtcbiAgICAgICQodGhpcy5fZGlhbG9nKS5vbihFdmVudCQ1Lk1PVVNFRE9XTl9ESVNNSVNTLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICQoX3RoaXMuX2VsZW1lbnQpLm9uZShFdmVudCQ1Lk1PVVNFVVBfRElTTUlTUywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgaWYgKCQoZXZlbnQudGFyZ2V0KS5pcyhfdGhpcy5fZWxlbWVudCkpIHtcbiAgICAgICAgICAgIF90aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX3Nob3dCYWNrZHJvcChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5fc2hvd0VsZW1lbnQocmVsYXRlZFRhcmdldCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmhpZGUgPSBmdW5jdGlvbiBoaWRlKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5faXNTaG93biB8fCB0aGlzLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgaGlkZUV2ZW50ID0gJC5FdmVudChFdmVudCQ1LkhJREUpO1xuICAgICAgJCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKGhpZGVFdmVudCk7XG5cbiAgICAgIGlmICghdGhpcy5faXNTaG93biB8fCBoaWRlRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pc1Nob3duID0gZmFsc2U7XG4gICAgICB2YXIgdHJhbnNpdGlvbiA9ICQodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1lJDUuRkFERSk7XG5cbiAgICAgIGlmICh0cmFuc2l0aW9uKSB7XG4gICAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3NldEVzY2FwZUV2ZW50KCk7XG5cbiAgICAgIHRoaXMuX3NldFJlc2l6ZUV2ZW50KCk7XG5cbiAgICAgICQoZG9jdW1lbnQpLm9mZihFdmVudCQ1LkZPQ1VTSU4pO1xuICAgICAgJCh0aGlzLl9lbGVtZW50KS5yZW1vdmVDbGFzcyhDbGFzc05hbWUkNS5TSE9XKTtcbiAgICAgICQodGhpcy5fZWxlbWVudCkub2ZmKEV2ZW50JDUuQ0xJQ0tfRElTTUlTUyk7XG4gICAgICAkKHRoaXMuX2RpYWxvZykub2ZmKEV2ZW50JDUuTU9VU0VET1dOX0RJU01JU1MpO1xuXG4gICAgICBpZiAodHJhbnNpdGlvbikge1xuICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5faGlkZU1vZGFsKGV2ZW50KTtcbiAgICAgICAgfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2hpZGVNb2RhbCgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uZGlzcG9zZSA9IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgICBbd2luZG93LCB0aGlzLl9lbGVtZW50LCB0aGlzLl9kaWFsb2ddLmZvckVhY2goZnVuY3Rpb24gKGh0bWxFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiAkKGh0bWxFbGVtZW50KS5vZmYoRVZFTlRfS0VZJDUpO1xuICAgICAgfSk7XG4gICAgICAvKipcbiAgICAgICAqIGBkb2N1bWVudGAgaGFzIDIgZXZlbnRzIGBFdmVudC5GT0NVU0lOYCBhbmQgYEV2ZW50LkNMSUNLX0RBVEFfQVBJYFxuICAgICAgICogRG8gbm90IG1vdmUgYGRvY3VtZW50YCBpbiBgaHRtbEVsZW1lbnRzYCBhcnJheVxuICAgICAgICogSXQgd2lsbCByZW1vdmUgYEV2ZW50LkNMSUNLX0RBVEFfQVBJYCBldmVudCB0aGF0IHNob3VsZCByZW1haW5cbiAgICAgICAqL1xuXG4gICAgICAkKGRvY3VtZW50KS5vZmYoRXZlbnQkNS5GT0NVU0lOKTtcbiAgICAgICQucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LCBEQVRBX0tFWSQ1KTtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IG51bGw7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuX2RpYWxvZyA9IG51bGw7XG4gICAgICB0aGlzLl9iYWNrZHJvcCA9IG51bGw7XG4gICAgICB0aGlzLl9pc1Nob3duID0gbnVsbDtcbiAgICAgIHRoaXMuX2lzQm9keU92ZXJmbG93aW5nID0gbnVsbDtcbiAgICAgIHRoaXMuX2lnbm9yZUJhY2tkcm9wQ2xpY2sgPSBudWxsO1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gbnVsbDtcbiAgICAgIHRoaXMuX3Njcm9sbGJhcldpZHRoID0gbnVsbDtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmhhbmRsZVVwZGF0ZSA9IGZ1bmN0aW9uIGhhbmRsZVVwZGF0ZSgpIHtcbiAgICAgIHRoaXMuX2FkanVzdERpYWxvZygpO1xuICAgIH0gLy8gUHJpdmF0ZVxuICAgIDtcblxuICAgIF9wcm90by5fZ2V0Q29uZmlnID0gZnVuY3Rpb24gX2dldENvbmZpZyhjb25maWcpIHtcbiAgICAgIGNvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIERlZmF1bHQkMywgY29uZmlnKTtcbiAgICAgIFV0aWwudHlwZUNoZWNrQ29uZmlnKE5BTUUkNSwgY29uZmlnLCBEZWZhdWx0VHlwZSQzKTtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfTtcblxuICAgIF9wcm90by5fc2hvd0VsZW1lbnQgPSBmdW5jdGlvbiBfc2hvd0VsZW1lbnQocmVsYXRlZFRhcmdldCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciB0cmFuc2l0aW9uID0gJCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUkNS5GQURFKTtcblxuICAgICAgaWYgKCF0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUgfHwgdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAvLyBEb24ndCBtb3ZlIG1vZGFsJ3MgRE9NIHBvc2l0aW9uXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpO1xuXG4gICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcsIHRydWUpO1xuXG4gICAgICBpZiAoJCh0aGlzLl9kaWFsb2cpLmhhc0NsYXNzKENsYXNzTmFtZSQ1LlNDUk9MTEFCTEUpKSB7XG4gICAgICAgIHRoaXMuX2RpYWxvZy5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yJDUuTU9EQUxfQk9EWSkuc2Nyb2xsVG9wID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRyYW5zaXRpb24pIHtcbiAgICAgICAgVXRpbC5yZWZsb3codGhpcy5fZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgICQodGhpcy5fZWxlbWVudCkuYWRkQ2xhc3MoQ2xhc3NOYW1lJDUuU0hPVyk7XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcuZm9jdXMpIHtcbiAgICAgICAgdGhpcy5fZW5mb3JjZUZvY3VzKCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzaG93bkV2ZW50ID0gJC5FdmVudChFdmVudCQ1LlNIT1dOLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHJlbGF0ZWRUYXJnZXRcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgdHJhbnNpdGlvbkNvbXBsZXRlID0gZnVuY3Rpb24gdHJhbnNpdGlvbkNvbXBsZXRlKCkge1xuICAgICAgICBpZiAoX3RoaXMzLl9jb25maWcuZm9jdXMpIHtcbiAgICAgICAgICBfdGhpczMuX2VsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzMy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICAgICQoX3RoaXMzLl9lbGVtZW50KS50cmlnZ2VyKHNob3duRXZlbnQpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHRyYW5zaXRpb24pIHtcbiAgICAgICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fZGlhbG9nKTtcbiAgICAgICAgJCh0aGlzLl9kaWFsb2cpLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCB0cmFuc2l0aW9uQ29tcGxldGUpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2l0aW9uQ29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLl9lbmZvcmNlRm9jdXMgPSBmdW5jdGlvbiBfZW5mb3JjZUZvY3VzKCkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgICQoZG9jdW1lbnQpLm9mZihFdmVudCQ1LkZPQ1VTSU4pIC8vIEd1YXJkIGFnYWluc3QgaW5maW5pdGUgZm9jdXMgbG9vcFxuICAgICAgLm9uKEV2ZW50JDUuRk9DVVNJTiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGlmIChkb2N1bWVudCAhPT0gZXZlbnQudGFyZ2V0ICYmIF90aGlzNC5fZWxlbWVudCAhPT0gZXZlbnQudGFyZ2V0ICYmICQoX3RoaXM0Ll9lbGVtZW50KS5oYXMoZXZlbnQudGFyZ2V0KS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBfdGhpczQuX2VsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9wcm90by5fc2V0RXNjYXBlRXZlbnQgPSBmdW5jdGlvbiBfc2V0RXNjYXBlRXZlbnQoKSB7XG4gICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuX2lzU2hvd24gJiYgdGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICAgICQodGhpcy5fZWxlbWVudCkub24oRXZlbnQkNS5LRVlET1dOX0RJU01JU1MsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIGlmIChldmVudC53aGljaCA9PT0gRVNDQVBFX0tFWUNPREUkMSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgX3RoaXM1LmhpZGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5faXNTaG93bikge1xuICAgICAgICAkKHRoaXMuX2VsZW1lbnQpLm9mZihFdmVudCQ1LktFWURPV05fRElTTUlTUyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5fc2V0UmVzaXplRXZlbnQgPSBmdW5jdGlvbiBfc2V0UmVzaXplRXZlbnQoKSB7XG4gICAgICB2YXIgX3RoaXM2ID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuX2lzU2hvd24pIHtcbiAgICAgICAgJCh3aW5kb3cpLm9uKEV2ZW50JDUuUkVTSVpFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXM2LmhhbmRsZVVwZGF0ZShldmVudCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJCh3aW5kb3cpLm9mZihFdmVudCQ1LlJFU0laRSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5faGlkZU1vZGFsID0gZnVuY3Rpb24gX2hpZGVNb2RhbCgpIHtcbiAgICAgIHZhciBfdGhpczcgPSB0aGlzO1xuXG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHRydWUpO1xuXG4gICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcpO1xuXG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcblxuICAgICAgdGhpcy5fc2hvd0JhY2tkcm9wKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJChkb2N1bWVudC5ib2R5KS5yZW1vdmVDbGFzcyhDbGFzc05hbWUkNS5PUEVOKTtcblxuICAgICAgICBfdGhpczcuX3Jlc2V0QWRqdXN0bWVudHMoKTtcblxuICAgICAgICBfdGhpczcuX3Jlc2V0U2Nyb2xsYmFyKCk7XG5cbiAgICAgICAgJChfdGhpczcuX2VsZW1lbnQpLnRyaWdnZXIoRXZlbnQkNS5ISURERU4pO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9wcm90by5fcmVtb3ZlQmFja2Ryb3AgPSBmdW5jdGlvbiBfcmVtb3ZlQmFja2Ryb3AoKSB7XG4gICAgICBpZiAodGhpcy5fYmFja2Ryb3ApIHtcbiAgICAgICAgJCh0aGlzLl9iYWNrZHJvcCkucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMuX2JhY2tkcm9wID0gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLl9zaG93QmFja2Ryb3AgPSBmdW5jdGlvbiBfc2hvd0JhY2tkcm9wKGNhbGxiYWNrKSB7XG4gICAgICB2YXIgX3RoaXM4ID0gdGhpcztcblxuICAgICAgdmFyIGFuaW1hdGUgPSAkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQ1LkZBREUpID8gQ2xhc3NOYW1lJDUuRkFERSA6ICcnO1xuXG4gICAgICBpZiAodGhpcy5faXNTaG93biAmJiB0aGlzLl9jb25maWcuYmFja2Ryb3ApIHtcbiAgICAgICAgdGhpcy5fYmFja2Ryb3AgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5fYmFja2Ryb3AuY2xhc3NOYW1lID0gQ2xhc3NOYW1lJDUuQkFDS0RST1A7XG5cbiAgICAgICAgaWYgKGFuaW1hdGUpIHtcbiAgICAgICAgICB0aGlzLl9iYWNrZHJvcC5jbGFzc0xpc3QuYWRkKGFuaW1hdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgJCh0aGlzLl9iYWNrZHJvcCkuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSk7XG4gICAgICAgICQodGhpcy5fZWxlbWVudCkub24oRXZlbnQkNS5DTElDS19ESVNNSVNTLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBpZiAoX3RoaXM4Ll9pZ25vcmVCYWNrZHJvcENsaWNrKSB7XG4gICAgICAgICAgICBfdGhpczguX2lnbm9yZUJhY2tkcm9wQ2xpY2sgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ICE9PSBldmVudC5jdXJyZW50VGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF90aGlzOC5fY29uZmlnLmJhY2tkcm9wID09PSAnc3RhdGljJykge1xuICAgICAgICAgICAgX3RoaXM4Ll9lbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzOC5oaWRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoYW5pbWF0ZSkge1xuICAgICAgICAgIFV0aWwucmVmbG93KHRoaXMuX2JhY2tkcm9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgICQodGhpcy5fYmFja2Ryb3ApLmFkZENsYXNzKENsYXNzTmFtZSQ1LlNIT1cpO1xuXG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWFuaW1hdGUpIHtcbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBiYWNrZHJvcFRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fYmFja2Ryb3ApO1xuICAgICAgICAkKHRoaXMuX2JhY2tkcm9wKS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgY2FsbGJhY2spLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGJhY2tkcm9wVHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX2lzU2hvd24gJiYgdGhpcy5fYmFja2Ryb3ApIHtcbiAgICAgICAgJCh0aGlzLl9iYWNrZHJvcCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lJDUuU0hPVyk7XG5cbiAgICAgICAgdmFyIGNhbGxiYWNrUmVtb3ZlID0gZnVuY3Rpb24gY2FsbGJhY2tSZW1vdmUoKSB7XG4gICAgICAgICAgX3RoaXM4Ll9yZW1vdmVCYWNrZHJvcCgpO1xuXG4gICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoJCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUkNS5GQURFKSkge1xuICAgICAgICAgIHZhciBfYmFja2Ryb3BUcmFuc2l0aW9uRHVyYXRpb24gPSBVdGlsLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMuX2JhY2tkcm9wKTtcblxuICAgICAgICAgICQodGhpcy5fYmFja2Ryb3ApLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCBjYWxsYmFja1JlbW92ZSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoX2JhY2tkcm9wVHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFja1JlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfSAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gdGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSB1c2VkIHRvIGhhbmRsZSBvdmVyZmxvd2luZyBtb2RhbHNcbiAgICAvLyB0b2RvIChmYXQpOiB0aGVzZSBzaG91bGQgcHJvYmFibHkgYmUgcmVmYWN0b3JlZCBvdXQgb2YgbW9kYWwuanNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgO1xuXG4gICAgX3Byb3RvLl9hZGp1c3REaWFsb2cgPSBmdW5jdGlvbiBfYWRqdXN0RGlhbG9nKCkge1xuICAgICAgdmFyIGlzTW9kYWxPdmVyZmxvd2luZyA9IHRoaXMuX2VsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcblxuICAgICAgaWYgKCF0aGlzLl9pc0JvZHlPdmVyZmxvd2luZyAmJiBpc01vZGFsT3ZlcmZsb3dpbmcpIHtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nTGVmdCA9IHRoaXMuX3Njcm9sbGJhcldpZHRoICsgXCJweFwiO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5faXNCb2R5T3ZlcmZsb3dpbmcgJiYgIWlzTW9kYWxPdmVyZmxvd2luZykge1xuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9IHRoaXMuX3Njcm9sbGJhcldpZHRoICsgXCJweFwiO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uX3Jlc2V0QWRqdXN0bWVudHMgPSBmdW5jdGlvbiBfcmVzZXRBZGp1c3RtZW50cygpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ0xlZnQgPSAnJztcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0ID0gJyc7XG4gICAgfTtcblxuICAgIF9wcm90by5fY2hlY2tTY3JvbGxiYXIgPSBmdW5jdGlvbiBfY2hlY2tTY3JvbGxiYXIoKSB7XG4gICAgICB2YXIgcmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB0aGlzLl9pc0JvZHlPdmVyZmxvd2luZyA9IHJlY3QubGVmdCArIHJlY3QucmlnaHQgPCB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICAgIHRoaXMuX3Njcm9sbGJhcldpZHRoID0gdGhpcy5fZ2V0U2Nyb2xsYmFyV2lkdGgoKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9zZXRTY3JvbGxiYXIgPSBmdW5jdGlvbiBfc2V0U2Nyb2xsYmFyKCkge1xuICAgICAgdmFyIF90aGlzOSA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLl9pc0JvZHlPdmVyZmxvd2luZykge1xuICAgICAgICAvLyBOb3RlOiBET01Ob2RlLnN0eWxlLnBhZGRpbmdSaWdodCByZXR1cm5zIHRoZSBhY3R1YWwgdmFsdWUgb3IgJycgaWYgbm90IHNldFxuICAgICAgICAvLyAgIHdoaWxlICQoRE9NTm9kZSkuY3NzKCdwYWRkaW5nLXJpZ2h0JykgcmV0dXJucyB0aGUgY2FsY3VsYXRlZCB2YWx1ZSBvciAwIGlmIG5vdCBzZXRcbiAgICAgICAgdmFyIGZpeGVkQ29udGVudCA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3RvciQ1LkZJWEVEX0NPTlRFTlQpKTtcbiAgICAgICAgdmFyIHN0aWNreUNvbnRlbnQgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IkNS5TVElDS1lfQ09OVEVOVCkpOyAvLyBBZGp1c3QgZml4ZWQgY29udGVudCBwYWRkaW5nXG5cbiAgICAgICAgJChmaXhlZENvbnRlbnQpLmVhY2goZnVuY3Rpb24gKGluZGV4LCBlbGVtZW50KSB7XG4gICAgICAgICAgdmFyIGFjdHVhbFBhZGRpbmcgPSBlbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodDtcbiAgICAgICAgICB2YXIgY2FsY3VsYXRlZFBhZGRpbmcgPSAkKGVsZW1lbnQpLmNzcygncGFkZGluZy1yaWdodCcpO1xuICAgICAgICAgICQoZWxlbWVudCkuZGF0YSgncGFkZGluZy1yaWdodCcsIGFjdHVhbFBhZGRpbmcpLmNzcygncGFkZGluZy1yaWdodCcsIHBhcnNlRmxvYXQoY2FsY3VsYXRlZFBhZGRpbmcpICsgX3RoaXM5Ll9zY3JvbGxiYXJXaWR0aCArIFwicHhcIik7XG4gICAgICAgIH0pOyAvLyBBZGp1c3Qgc3RpY2t5IGNvbnRlbnQgbWFyZ2luXG5cbiAgICAgICAgJChzdGlja3lDb250ZW50KS5lYWNoKGZ1bmN0aW9uIChpbmRleCwgZWxlbWVudCkge1xuICAgICAgICAgIHZhciBhY3R1YWxNYXJnaW4gPSBlbGVtZW50LnN0eWxlLm1hcmdpblJpZ2h0O1xuICAgICAgICAgIHZhciBjYWxjdWxhdGVkTWFyZ2luID0gJChlbGVtZW50KS5jc3MoJ21hcmdpbi1yaWdodCcpO1xuICAgICAgICAgICQoZWxlbWVudCkuZGF0YSgnbWFyZ2luLXJpZ2h0JywgYWN0dWFsTWFyZ2luKS5jc3MoJ21hcmdpbi1yaWdodCcsIHBhcnNlRmxvYXQoY2FsY3VsYXRlZE1hcmdpbikgLSBfdGhpczkuX3Njcm9sbGJhcldpZHRoICsgXCJweFwiKTtcbiAgICAgICAgfSk7IC8vIEFkanVzdCBib2R5IHBhZGRpbmdcblxuICAgICAgICB2YXIgYWN0dWFsUGFkZGluZyA9IGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0O1xuICAgICAgICB2YXIgY2FsY3VsYXRlZFBhZGRpbmcgPSAkKGRvY3VtZW50LmJvZHkpLmNzcygncGFkZGluZy1yaWdodCcpO1xuICAgICAgICAkKGRvY3VtZW50LmJvZHkpLmRhdGEoJ3BhZGRpbmctcmlnaHQnLCBhY3R1YWxQYWRkaW5nKS5jc3MoJ3BhZGRpbmctcmlnaHQnLCBwYXJzZUZsb2F0KGNhbGN1bGF0ZWRQYWRkaW5nKSArIHRoaXMuX3Njcm9sbGJhcldpZHRoICsgXCJweFwiKTtcbiAgICAgIH1cblxuICAgICAgJChkb2N1bWVudC5ib2R5KS5hZGRDbGFzcyhDbGFzc05hbWUkNS5PUEVOKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9yZXNldFNjcm9sbGJhciA9IGZ1bmN0aW9uIF9yZXNldFNjcm9sbGJhcigpIHtcbiAgICAgIC8vIFJlc3RvcmUgZml4ZWQgY29udGVudCBwYWRkaW5nXG4gICAgICB2YXIgZml4ZWRDb250ZW50ID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFNlbGVjdG9yJDUuRklYRURfQ09OVEVOVCkpO1xuICAgICAgJChmaXhlZENvbnRlbnQpLmVhY2goZnVuY3Rpb24gKGluZGV4LCBlbGVtZW50KSB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gJChlbGVtZW50KS5kYXRhKCdwYWRkaW5nLXJpZ2h0Jyk7XG4gICAgICAgICQoZWxlbWVudCkucmVtb3ZlRGF0YSgncGFkZGluZy1yaWdodCcpO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9IHBhZGRpbmcgPyBwYWRkaW5nIDogJyc7XG4gICAgICB9KTsgLy8gUmVzdG9yZSBzdGlja3kgY29udGVudFxuXG4gICAgICB2YXIgZWxlbWVudHMgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJcIiArIFNlbGVjdG9yJDUuU1RJQ0tZX0NPTlRFTlQpKTtcbiAgICAgICQoZWxlbWVudHMpLmVhY2goZnVuY3Rpb24gKGluZGV4LCBlbGVtZW50KSB7XG4gICAgICAgIHZhciBtYXJnaW4gPSAkKGVsZW1lbnQpLmRhdGEoJ21hcmdpbi1yaWdodCcpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgbWFyZ2luICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICQoZWxlbWVudCkuY3NzKCdtYXJnaW4tcmlnaHQnLCBtYXJnaW4pLnJlbW92ZURhdGEoJ21hcmdpbi1yaWdodCcpO1xuICAgICAgICB9XG4gICAgICB9KTsgLy8gUmVzdG9yZSBib2R5IHBhZGRpbmdcblxuICAgICAgdmFyIHBhZGRpbmcgPSAkKGRvY3VtZW50LmJvZHkpLmRhdGEoJ3BhZGRpbmctcmlnaHQnKTtcbiAgICAgICQoZG9jdW1lbnQuYm9keSkucmVtb3ZlRGF0YSgncGFkZGluZy1yaWdodCcpO1xuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQgPSBwYWRkaW5nID8gcGFkZGluZyA6ICcnO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldFNjcm9sbGJhcldpZHRoID0gZnVuY3Rpb24gX2dldFNjcm9sbGJhcldpZHRoKCkge1xuICAgICAgLy8gdGh4IGQud2Fsc2hcbiAgICAgIHZhciBzY3JvbGxEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHNjcm9sbERpdi5jbGFzc05hbWUgPSBDbGFzc05hbWUkNS5TQ1JPTExCQVJfTUVBU1VSRVI7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcm9sbERpdik7XG4gICAgICB2YXIgc2Nyb2xsYmFyV2lkdGggPSBzY3JvbGxEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLSBzY3JvbGxEaXYuY2xpZW50V2lkdGg7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHNjcm9sbERpdik7XG4gICAgICByZXR1cm4gc2Nyb2xsYmFyV2lkdGg7XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBNb2RhbC5falF1ZXJ5SW50ZXJmYWNlID0gZnVuY3Rpb24gX2pRdWVyeUludGVyZmFjZShjb25maWcsIHJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YShEQVRBX0tFWSQ1KTtcblxuICAgICAgICB2YXIgX2NvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIERlZmF1bHQkMywgJCh0aGlzKS5kYXRhKCksIHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZyA/IGNvbmZpZyA6IHt9KTtcblxuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICBkYXRhID0gbmV3IE1vZGFsKHRoaXMsIF9jb25maWcpO1xuICAgICAgICAgICQodGhpcykuZGF0YShEQVRBX0tFWSQ1LCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIG1ldGhvZCBuYW1lZCBcXFwiXCIgKyBjb25maWcgKyBcIlxcXCJcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YVtjb25maWddKHJlbGF0ZWRUYXJnZXQpO1xuICAgICAgICB9IGVsc2UgaWYgKF9jb25maWcuc2hvdykge1xuICAgICAgICAgIGRhdGEuc2hvdyhyZWxhdGVkVGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9jcmVhdGVDbGFzcyhNb2RhbCwgbnVsbCwgW3tcbiAgICAgIGtleTogXCJWRVJTSU9OXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIFZFUlNJT04kNTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiRGVmYXVsdFwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBEZWZhdWx0JDM7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIE1vZGFsO1xuICB9KCk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJChkb2N1bWVudCkub24oRXZlbnQkNS5DTElDS19EQVRBX0FQSSwgU2VsZWN0b3IkNS5EQVRBX1RPR0dMRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIF90aGlzMTAgPSB0aGlzO1xuXG4gICAgdmFyIHRhcmdldDtcbiAgICB2YXIgc2VsZWN0b3IgPSBVdGlsLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodGhpcyk7XG5cbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgIHRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgIH1cblxuICAgIHZhciBjb25maWcgPSAkKHRhcmdldCkuZGF0YShEQVRBX0tFWSQ1KSA/ICd0b2dnbGUnIDogX29iamVjdFNwcmVhZCh7fSwgJCh0YXJnZXQpLmRhdGEoKSwgJCh0aGlzKS5kYXRhKCkpO1xuXG4gICAgaWYgKHRoaXMudGFnTmFtZSA9PT0gJ0EnIHx8IHRoaXMudGFnTmFtZSA9PT0gJ0FSRUEnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciAkdGFyZ2V0ID0gJCh0YXJnZXQpLm9uZShFdmVudCQ1LlNIT1csIGZ1bmN0aW9uIChzaG93RXZlbnQpIHtcbiAgICAgIGlmIChzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgLy8gT25seSByZWdpc3RlciBmb2N1cyByZXN0b3JlciBpZiBtb2RhbCB3aWxsIGFjdHVhbGx5IGdldCBzaG93blxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgICR0YXJnZXQub25lKEV2ZW50JDUuSElEREVOLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICgkKF90aGlzMTApLmlzKCc6dmlzaWJsZScpKSB7XG4gICAgICAgICAgX3RoaXMxMC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIE1vZGFsLl9qUXVlcnlJbnRlcmZhY2UuY2FsbCgkKHRhcmdldCksIGNvbmZpZywgdGhpcyk7XG4gIH0pO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIGpRdWVyeVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgJC5mbltOQU1FJDVdID0gTW9kYWwuX2pRdWVyeUludGVyZmFjZTtcbiAgJC5mbltOQU1FJDVdLkNvbnN0cnVjdG9yID0gTW9kYWw7XG5cbiAgJC5mbltOQU1FJDVdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbltOQU1FJDVdID0gSlFVRVJZX05PX0NPTkZMSUNUJDU7XG4gICAgcmV0dXJuIE1vZGFsLl9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCAodjQuMy4xKTogdG9vbHMvc2FuaXRpemVyLmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuICB2YXIgdXJpQXR0cnMgPSBbJ2JhY2tncm91bmQnLCAnY2l0ZScsICdocmVmJywgJ2l0ZW10eXBlJywgJ2xvbmdkZXNjJywgJ3Bvc3RlcicsICdzcmMnLCAneGxpbms6aHJlZiddO1xuICB2YXIgQVJJQV9BVFRSSUJVVEVfUEFUVEVSTiA9IC9eYXJpYS1bXFx3LV0qJC9pO1xuICB2YXIgRGVmYXVsdFdoaXRlbGlzdCA9IHtcbiAgICAvLyBHbG9iYWwgYXR0cmlidXRlcyBhbGxvd2VkIG9uIGFueSBzdXBwbGllZCBlbGVtZW50IGJlbG93LlxuICAgICcqJzogWydjbGFzcycsICdkaXInLCAnaWQnLCAnbGFuZycsICdyb2xlJywgQVJJQV9BVFRSSUJVVEVfUEFUVEVSTl0sXG4gICAgYTogWyd0YXJnZXQnLCAnaHJlZicsICd0aXRsZScsICdyZWwnXSxcbiAgICBhcmVhOiBbXSxcbiAgICBiOiBbXSxcbiAgICBicjogW10sXG4gICAgY29sOiBbXSxcbiAgICBjb2RlOiBbXSxcbiAgICBkaXY6IFtdLFxuICAgIGVtOiBbXSxcbiAgICBocjogW10sXG4gICAgaDE6IFtdLFxuICAgIGgyOiBbXSxcbiAgICBoMzogW10sXG4gICAgaDQ6IFtdLFxuICAgIGg1OiBbXSxcbiAgICBoNjogW10sXG4gICAgaTogW10sXG4gICAgaW1nOiBbJ3NyYycsICdhbHQnLCAndGl0bGUnLCAnd2lkdGgnLCAnaGVpZ2h0J10sXG4gICAgbGk6IFtdLFxuICAgIG9sOiBbXSxcbiAgICBwOiBbXSxcbiAgICBwcmU6IFtdLFxuICAgIHM6IFtdLFxuICAgIHNtYWxsOiBbXSxcbiAgICBzcGFuOiBbXSxcbiAgICBzdWI6IFtdLFxuICAgIHN1cDogW10sXG4gICAgc3Ryb25nOiBbXSxcbiAgICB1OiBbXSxcbiAgICB1bDogW11cbiAgICAvKipcbiAgICAgKiBBIHBhdHRlcm4gdGhhdCByZWNvZ25pemVzIGEgY29tbW9ubHkgdXNlZnVsIHN1YnNldCBvZiBVUkxzIHRoYXQgYXJlIHNhZmUuXG4gICAgICpcbiAgICAgKiBTaG91dG91dCB0byBBbmd1bGFyIDcgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iLzcuMi40L3BhY2thZ2VzL2NvcmUvc3JjL3Nhbml0aXphdGlvbi91cmxfc2FuaXRpemVyLnRzXG4gICAgICovXG5cbiAgfTtcbiAgdmFyIFNBRkVfVVJMX1BBVFRFUk4gPSAvXig/Oig/Omh0dHBzP3xtYWlsdG98ZnRwfHRlbHxmaWxlKTp8W14mOi8/I10qKD86Wy8/I118JCkpL2dpO1xuICAvKipcbiAgICogQSBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBzYWZlIGRhdGEgVVJMcy4gT25seSBtYXRjaGVzIGltYWdlLCB2aWRlbyBhbmQgYXVkaW8gdHlwZXMuXG4gICAqXG4gICAqIFNob3V0b3V0IHRvIEFuZ3VsYXIgNyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2Jsb2IvNy4yLjQvcGFja2FnZXMvY29yZS9zcmMvc2FuaXRpemF0aW9uL3VybF9zYW5pdGl6ZXIudHNcbiAgICovXG5cbiAgdmFyIERBVEFfVVJMX1BBVFRFUk4gPSAvXmRhdGE6KD86aW1hZ2VcXC8oPzpibXB8Z2lmfGpwZWd8anBnfHBuZ3x0aWZmfHdlYnApfHZpZGVvXFwvKD86bXBlZ3xtcDR8b2dnfHdlYm0pfGF1ZGlvXFwvKD86bXAzfG9nYXxvZ2d8b3B1cykpO2Jhc2U2NCxbYS16MC05Ky9dKz0qJC9pO1xuXG4gIGZ1bmN0aW9uIGFsbG93ZWRBdHRyaWJ1dGUoYXR0ciwgYWxsb3dlZEF0dHJpYnV0ZUxpc3QpIHtcbiAgICB2YXIgYXR0ck5hbWUgPSBhdHRyLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoYWxsb3dlZEF0dHJpYnV0ZUxpc3QuaW5kZXhPZihhdHRyTmFtZSkgIT09IC0xKSB7XG4gICAgICBpZiAodXJpQXR0cnMuaW5kZXhPZihhdHRyTmFtZSkgIT09IC0xKSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKGF0dHIubm9kZVZhbHVlLm1hdGNoKFNBRkVfVVJMX1BBVFRFUk4pIHx8IGF0dHIubm9kZVZhbHVlLm1hdGNoKERBVEFfVVJMX1BBVFRFUk4pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHJlZ0V4cCA9IGFsbG93ZWRBdHRyaWJ1dGVMaXN0LmZpbHRlcihmdW5jdGlvbiAoYXR0clJlZ2V4KSB7XG4gICAgICByZXR1cm4gYXR0clJlZ2V4IGluc3RhbmNlb2YgUmVnRXhwO1xuICAgIH0pOyAvLyBDaGVjayBpZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB2YWxpZGF0ZXMgdGhlIGF0dHJpYnV0ZS5cblxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gcmVnRXhwLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGF0dHJOYW1lLm1hdGNoKHJlZ0V4cFtpXSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2FuaXRpemVIdG1sKHVuc2FmZUh0bWwsIHdoaXRlTGlzdCwgc2FuaXRpemVGbikge1xuICAgIGlmICh1bnNhZmVIdG1sLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuc2FmZUh0bWw7XG4gICAgfVxuXG4gICAgaWYgKHNhbml0aXplRm4gJiYgdHlwZW9mIHNhbml0aXplRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBzYW5pdGl6ZUZuKHVuc2FmZUh0bWwpO1xuICAgIH1cblxuICAgIHZhciBkb21QYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuICAgIHZhciBjcmVhdGVkRG9jdW1lbnQgPSBkb21QYXJzZXIucGFyc2VGcm9tU3RyaW5nKHVuc2FmZUh0bWwsICd0ZXh0L2h0bWwnKTtcbiAgICB2YXIgd2hpdGVsaXN0S2V5cyA9IE9iamVjdC5rZXlzKHdoaXRlTGlzdCk7XG4gICAgdmFyIGVsZW1lbnRzID0gW10uc2xpY2UuY2FsbChjcmVhdGVkRG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKCcqJykpO1xuXG4gICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoaSwgbGVuKSB7XG4gICAgICB2YXIgZWwgPSBlbGVtZW50c1tpXTtcbiAgICAgIHZhciBlbE5hbWUgPSBlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBpZiAod2hpdGVsaXN0S2V5cy5pbmRleE9mKGVsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpID09PSAtMSkge1xuICAgICAgICBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcbiAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcbiAgICAgIH1cblxuICAgICAgdmFyIGF0dHJpYnV0ZUxpc3QgPSBbXS5zbGljZS5jYWxsKGVsLmF0dHJpYnV0ZXMpO1xuICAgICAgdmFyIHdoaXRlbGlzdGVkQXR0cmlidXRlcyA9IFtdLmNvbmNhdCh3aGl0ZUxpc3RbJyonXSB8fCBbXSwgd2hpdGVMaXN0W2VsTmFtZV0gfHwgW10pO1xuICAgICAgYXR0cmlidXRlTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyKSB7XG4gICAgICAgIGlmICghYWxsb3dlZEF0dHJpYnV0ZShhdHRyLCB3aGl0ZWxpc3RlZEF0dHJpYnV0ZXMpKSB7XG4gICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGF0dHIubm9kZU5hbWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGVsZW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB2YXIgX3JldCA9IF9sb29wKGksIGxlbik7XG5cbiAgICAgIGlmIChfcmV0ID09PSBcImNvbnRpbnVlXCIpIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVkRG9jdW1lbnQuYm9keS5pbm5lckhUTUw7XG4gIH1cblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIENvbnN0YW50c1xuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgdmFyIE5BTUUkNiA9ICd0b29sdGlwJztcbiAgdmFyIFZFUlNJT04kNiA9ICc0LjMuMSc7XG4gIHZhciBEQVRBX0tFWSQ2ID0gJ2JzLnRvb2x0aXAnO1xuICB2YXIgRVZFTlRfS0VZJDYgPSBcIi5cIiArIERBVEFfS0VZJDY7XG4gIHZhciBKUVVFUllfTk9fQ09ORkxJQ1QkNiA9ICQuZm5bTkFNRSQ2XTtcbiAgdmFyIENMQVNTX1BSRUZJWCA9ICdicy10b29sdGlwJztcbiAgdmFyIEJTQ0xTX1BSRUZJWF9SRUdFWCA9IG5ldyBSZWdFeHAoXCIoXnxcXFxccylcIiArIENMQVNTX1BSRUZJWCArIFwiXFxcXFMrXCIsICdnJyk7XG4gIHZhciBESVNBTExPV0VEX0FUVFJJQlVURVMgPSBbJ3Nhbml0aXplJywgJ3doaXRlTGlzdCcsICdzYW5pdGl6ZUZuJ107XG4gIHZhciBEZWZhdWx0VHlwZSQ0ID0ge1xuICAgIGFuaW1hdGlvbjogJ2Jvb2xlYW4nLFxuICAgIHRlbXBsYXRlOiAnc3RyaW5nJyxcbiAgICB0aXRsZTogJyhzdHJpbmd8ZWxlbWVudHxmdW5jdGlvbiknLFxuICAgIHRyaWdnZXI6ICdzdHJpbmcnLFxuICAgIGRlbGF5OiAnKG51bWJlcnxvYmplY3QpJyxcbiAgICBodG1sOiAnYm9vbGVhbicsXG4gICAgc2VsZWN0b3I6ICcoc3RyaW5nfGJvb2xlYW4pJyxcbiAgICBwbGFjZW1lbnQ6ICcoc3RyaW5nfGZ1bmN0aW9uKScsXG4gICAgb2Zmc2V0OiAnKG51bWJlcnxzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgICBjb250YWluZXI6ICcoc3RyaW5nfGVsZW1lbnR8Ym9vbGVhbiknLFxuICAgIGZhbGxiYWNrUGxhY2VtZW50OiAnKHN0cmluZ3xhcnJheSknLFxuICAgIGJvdW5kYXJ5OiAnKHN0cmluZ3xlbGVtZW50KScsXG4gICAgc2FuaXRpemU6ICdib29sZWFuJyxcbiAgICBzYW5pdGl6ZUZuOiAnKG51bGx8ZnVuY3Rpb24pJyxcbiAgICB3aGl0ZUxpc3Q6ICdvYmplY3QnXG4gIH07XG4gIHZhciBBdHRhY2htZW50TWFwJDEgPSB7XG4gICAgQVVUTzogJ2F1dG8nLFxuICAgIFRPUDogJ3RvcCcsXG4gICAgUklHSFQ6ICdyaWdodCcsXG4gICAgQk9UVE9NOiAnYm90dG9tJyxcbiAgICBMRUZUOiAnbGVmdCdcbiAgfTtcbiAgdmFyIERlZmF1bHQkNCA9IHtcbiAgICBhbmltYXRpb246IHRydWUsXG4gICAgdGVtcGxhdGU6ICc8ZGl2IGNsYXNzPVwidG9vbHRpcFwiIHJvbGU9XCJ0b29sdGlwXCI+JyArICc8ZGl2IGNsYXNzPVwiYXJyb3dcIj48L2Rpdj4nICsgJzxkaXYgY2xhc3M9XCJ0b29sdGlwLWlubmVyXCI+PC9kaXY+PC9kaXY+JyxcbiAgICB0cmlnZ2VyOiAnaG92ZXIgZm9jdXMnLFxuICAgIHRpdGxlOiAnJyxcbiAgICBkZWxheTogMCxcbiAgICBodG1sOiBmYWxzZSxcbiAgICBzZWxlY3RvcjogZmFsc2UsXG4gICAgcGxhY2VtZW50OiAndG9wJyxcbiAgICBvZmZzZXQ6IDAsXG4gICAgY29udGFpbmVyOiBmYWxzZSxcbiAgICBmYWxsYmFja1BsYWNlbWVudDogJ2ZsaXAnLFxuICAgIGJvdW5kYXJ5OiAnc2Nyb2xsUGFyZW50JyxcbiAgICBzYW5pdGl6ZTogdHJ1ZSxcbiAgICBzYW5pdGl6ZUZuOiBudWxsLFxuICAgIHdoaXRlTGlzdDogRGVmYXVsdFdoaXRlbGlzdFxuICB9O1xuICB2YXIgSG92ZXJTdGF0ZSA9IHtcbiAgICBTSE9XOiAnc2hvdycsXG4gICAgT1VUOiAnb3V0J1xuICB9O1xuICB2YXIgRXZlbnQkNiA9IHtcbiAgICBISURFOiBcImhpZGVcIiArIEVWRU5UX0tFWSQ2LFxuICAgIEhJRERFTjogXCJoaWRkZW5cIiArIEVWRU5UX0tFWSQ2LFxuICAgIFNIT1c6IFwic2hvd1wiICsgRVZFTlRfS0VZJDYsXG4gICAgU0hPV046IFwic2hvd25cIiArIEVWRU5UX0tFWSQ2LFxuICAgIElOU0VSVEVEOiBcImluc2VydGVkXCIgKyBFVkVOVF9LRVkkNixcbiAgICBDTElDSzogXCJjbGlja1wiICsgRVZFTlRfS0VZJDYsXG4gICAgRk9DVVNJTjogXCJmb2N1c2luXCIgKyBFVkVOVF9LRVkkNixcbiAgICBGT0NVU09VVDogXCJmb2N1c291dFwiICsgRVZFTlRfS0VZJDYsXG4gICAgTU9VU0VFTlRFUjogXCJtb3VzZWVudGVyXCIgKyBFVkVOVF9LRVkkNixcbiAgICBNT1VTRUxFQVZFOiBcIm1vdXNlbGVhdmVcIiArIEVWRU5UX0tFWSQ2XG4gIH07XG4gIHZhciBDbGFzc05hbWUkNiA9IHtcbiAgICBGQURFOiAnZmFkZScsXG4gICAgU0hPVzogJ3Nob3cnXG4gIH07XG4gIHZhciBTZWxlY3RvciQ2ID0ge1xuICAgIFRPT0xUSVA6ICcudG9vbHRpcCcsXG4gICAgVE9PTFRJUF9JTk5FUjogJy50b29sdGlwLWlubmVyJyxcbiAgICBBUlJPVzogJy5hcnJvdydcbiAgfTtcbiAgdmFyIFRyaWdnZXIgPSB7XG4gICAgSE9WRVI6ICdob3ZlcicsXG4gICAgRk9DVVM6ICdmb2N1cycsXG4gICAgQ0xJQ0s6ICdjbGljaycsXG4gICAgTUFOVUFMOiAnbWFudWFsJ1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIENsYXNzIERlZmluaXRpb25cbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuICB9O1xuXG4gIHZhciBUb29sdGlwID1cbiAgLyojX19QVVJFX18qL1xuICBmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVG9vbHRpcChlbGVtZW50LCBjb25maWcpIHtcbiAgICAgIC8qKlxuICAgICAgICogQ2hlY2sgZm9yIFBvcHBlciBkZXBlbmRlbmN5XG4gICAgICAgKiBQb3BwZXIgLSBodHRwczovL3BvcHBlci5qcy5vcmdcbiAgICAgICAqL1xuICAgICAgaWYgKHR5cGVvZiBQb3BwZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Jvb3RzdHJhcFxcJ3MgdG9vbHRpcHMgcmVxdWlyZSBQb3BwZXIuanMgKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy8pJyk7XG4gICAgICB9IC8vIHByaXZhdGVcblxuXG4gICAgICB0aGlzLl9pc0VuYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fdGltZW91dCA9IDA7XG4gICAgICB0aGlzLl9ob3ZlclN0YXRlID0gJyc7XG4gICAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyID0ge307XG4gICAgICB0aGlzLl9wb3BwZXIgPSBudWxsOyAvLyBQcm90ZWN0ZWRcblxuICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgIHRoaXMuY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgICB0aGlzLnRpcCA9IG51bGw7XG5cbiAgICAgIHRoaXMuX3NldExpc3RlbmVycygpO1xuICAgIH0gLy8gR2V0dGVyc1xuXG5cbiAgICB2YXIgX3Byb3RvID0gVG9vbHRpcC5wcm90b3R5cGU7XG5cbiAgICAvLyBQdWJsaWNcbiAgICBfcHJvdG8uZW5hYmxlID0gZnVuY3Rpb24gZW5hYmxlKCkge1xuICAgICAgdGhpcy5faXNFbmFibGVkID0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmRpc2FibGUgPSBmdW5jdGlvbiBkaXNhYmxlKCkge1xuICAgICAgdGhpcy5faXNFbmFibGVkID0gZmFsc2U7XG4gICAgfTtcblxuICAgIF9wcm90by50b2dnbGVFbmFibGVkID0gZnVuY3Rpb24gdG9nZ2xlRW5hYmxlZCgpIHtcbiAgICAgIHRoaXMuX2lzRW5hYmxlZCA9ICF0aGlzLl9pc0VuYWJsZWQ7XG4gICAgfTtcblxuICAgIF9wcm90by50b2dnbGUgPSBmdW5jdGlvbiB0b2dnbGUoZXZlbnQpIHtcbiAgICAgIGlmICghdGhpcy5faXNFbmFibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgIHZhciBkYXRhS2V5ID0gdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWTtcbiAgICAgICAgdmFyIGNvbnRleHQgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmRhdGEoZGF0YUtleSk7XG5cbiAgICAgICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICAgICAgY29udGV4dCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKGV2ZW50LmN1cnJlbnRUYXJnZXQsIHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkpO1xuICAgICAgICAgICQoZXZlbnQuY3VycmVudFRhcmdldCkuZGF0YShkYXRhS2V5LCBjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQuX2FjdGl2ZVRyaWdnZXIuY2xpY2sgPSAhY29udGV4dC5fYWN0aXZlVHJpZ2dlci5jbGljaztcblxuICAgICAgICBpZiAoY29udGV4dC5faXNXaXRoQWN0aXZlVHJpZ2dlcigpKSB7XG4gICAgICAgICAgY29udGV4dC5fZW50ZXIobnVsbCwgY29udGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGV4dC5fbGVhdmUobnVsbCwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICgkKHRoaXMuZ2V0VGlwRWxlbWVudCgpKS5oYXNDbGFzcyhDbGFzc05hbWUkNi5TSE9XKSkge1xuICAgICAgICAgIHRoaXMuX2xlYXZlKG51bGwsIHRoaXMpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZW50ZXIobnVsbCwgdGhpcyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5kaXNwb3NlID0gZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICAgICQucmVtb3ZlRGF0YSh0aGlzLmVsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVkpO1xuICAgICAgJCh0aGlzLmVsZW1lbnQpLm9mZih0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0tFWSk7XG4gICAgICAkKHRoaXMuZWxlbWVudCkuY2xvc2VzdCgnLm1vZGFsJykub2ZmKCdoaWRlLmJzLm1vZGFsJyk7XG5cbiAgICAgIGlmICh0aGlzLnRpcCkge1xuICAgICAgICAkKHRoaXMudGlwKS5yZW1vdmUoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faXNFbmFibGVkID0gbnVsbDtcbiAgICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsO1xuICAgICAgdGhpcy5faG92ZXJTdGF0ZSA9IG51bGw7XG4gICAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyID0gbnVsbDtcblxuICAgICAgaWYgKHRoaXMuX3BvcHBlciAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9wb3BwZXIuZGVzdHJveSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9wb3BwZXIgPSBudWxsO1xuICAgICAgdGhpcy5lbGVtZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuY29uZmlnID0gbnVsbDtcbiAgICAgIHRoaXMudGlwID0gbnVsbDtcbiAgICB9O1xuXG4gICAgX3Byb3RvLnNob3cgPSBmdW5jdGlvbiBzaG93KCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKCQodGhpcy5lbGVtZW50KS5jc3MoJ2Rpc3BsYXknKSA9PT0gJ25vbmUnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHVzZSBzaG93IG9uIHZpc2libGUgZWxlbWVudHMnKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHNob3dFdmVudCA9ICQuRXZlbnQodGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5TSE9XKTtcblxuICAgICAgaWYgKHRoaXMuaXNXaXRoQ29udGVudCgpICYmIHRoaXMuX2lzRW5hYmxlZCkge1xuICAgICAgICAkKHRoaXMuZWxlbWVudCkudHJpZ2dlcihzaG93RXZlbnQpO1xuICAgICAgICB2YXIgc2hhZG93Um9vdCA9IFV0aWwuZmluZFNoYWRvd1Jvb3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgdmFyIGlzSW5UaGVEb20gPSAkLmNvbnRhaW5zKHNoYWRvd1Jvb3QgIT09IG51bGwgPyBzaGFkb3dSb290IDogdGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCB0aGlzLmVsZW1lbnQpO1xuXG4gICAgICAgIGlmIChzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgfHwgIWlzSW5UaGVEb20pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdGlwID0gdGhpcy5nZXRUaXBFbGVtZW50KCk7XG4gICAgICAgIHZhciB0aXBJZCA9IFV0aWwuZ2V0VUlEKHRoaXMuY29uc3RydWN0b3IuTkFNRSk7XG4gICAgICAgIHRpcC5zZXRBdHRyaWJ1dGUoJ2lkJywgdGlwSWQpO1xuICAgICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgdGlwSWQpO1xuICAgICAgICB0aGlzLnNldENvbnRlbnQoKTtcblxuICAgICAgICBpZiAodGhpcy5jb25maWcuYW5pbWF0aW9uKSB7XG4gICAgICAgICAgJCh0aXApLmFkZENsYXNzKENsYXNzTmFtZSQ2LkZBREUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBsYWNlbWVudCA9IHR5cGVvZiB0aGlzLmNvbmZpZy5wbGFjZW1lbnQgPT09ICdmdW5jdGlvbicgPyB0aGlzLmNvbmZpZy5wbGFjZW1lbnQuY2FsbCh0aGlzLCB0aXAsIHRoaXMuZWxlbWVudCkgOiB0aGlzLmNvbmZpZy5wbGFjZW1lbnQ7XG5cbiAgICAgICAgdmFyIGF0dGFjaG1lbnQgPSB0aGlzLl9nZXRBdHRhY2htZW50KHBsYWNlbWVudCk7XG5cbiAgICAgICAgdGhpcy5hZGRBdHRhY2htZW50Q2xhc3MoYXR0YWNobWVudCk7XG5cbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IHRoaXMuX2dldENvbnRhaW5lcigpO1xuXG4gICAgICAgICQodGlwKS5kYXRhKHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVksIHRoaXMpO1xuXG4gICAgICAgIGlmICghJC5jb250YWlucyh0aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHRoaXMudGlwKSkge1xuICAgICAgICAgICQodGlwKS5hcHBlbmRUbyhjb250YWluZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgJCh0aGlzLmVsZW1lbnQpLnRyaWdnZXIodGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5JTlNFUlRFRCk7XG4gICAgICAgIHRoaXMuX3BvcHBlciA9IG5ldyBQb3BwZXIodGhpcy5lbGVtZW50LCB0aXAsIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6IGF0dGFjaG1lbnQsXG4gICAgICAgICAgbW9kaWZpZXJzOiB7XG4gICAgICAgICAgICBvZmZzZXQ6IHRoaXMuX2dldE9mZnNldCgpLFxuICAgICAgICAgICAgZmxpcDoge1xuICAgICAgICAgICAgICBiZWhhdmlvcjogdGhpcy5jb25maWcuZmFsbGJhY2tQbGFjZW1lbnRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhcnJvdzoge1xuICAgICAgICAgICAgICBlbGVtZW50OiBTZWxlY3RvciQ2LkFSUk9XXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJldmVudE92ZXJmbG93OiB7XG4gICAgICAgICAgICAgIGJvdW5kYXJpZXNFbGVtZW50OiB0aGlzLmNvbmZpZy5ib3VuZGFyeVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25DcmVhdGU6IGZ1bmN0aW9uIG9uQ3JlYXRlKGRhdGEpIHtcbiAgICAgICAgICAgIGlmIChkYXRhLm9yaWdpbmFsUGxhY2VtZW50ICE9PSBkYXRhLnBsYWNlbWVudCkge1xuICAgICAgICAgICAgICBfdGhpcy5faGFuZGxlUG9wcGVyUGxhY2VtZW50Q2hhbmdlKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25VcGRhdGU6IGZ1bmN0aW9uIG9uVXBkYXRlKGRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5faGFuZGxlUG9wcGVyUGxhY2VtZW50Q2hhbmdlKGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgICQodGlwKS5hZGRDbGFzcyhDbGFzc05hbWUkNi5TSE9XKTsgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIGFkZCBleHRyYVxuICAgICAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHRvIHRoZSBib2R5J3MgaW1tZWRpYXRlIGNoaWxkcmVuO1xuICAgICAgICAvLyBvbmx5IG5lZWRlZCBiZWNhdXNlIG9mIGJyb2tlbiBldmVudCBkZWxlZ2F0aW9uIG9uIGlPU1xuICAgICAgICAvLyBodHRwczovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMTQvMDIvbW91c2VfZXZlbnRfYnViLmh0bWxcblxuICAgICAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgICAgJChkb2N1bWVudC5ib2R5KS5jaGlsZHJlbigpLm9uKCdtb3VzZW92ZXInLCBudWxsLCAkLm5vb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24gY29tcGxldGUoKSB7XG4gICAgICAgICAgaWYgKF90aGlzLmNvbmZpZy5hbmltYXRpb24pIHtcbiAgICAgICAgICAgIF90aGlzLl9maXhUcmFuc2l0aW9uKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHByZXZIb3ZlclN0YXRlID0gX3RoaXMuX2hvdmVyU3RhdGU7XG4gICAgICAgICAgX3RoaXMuX2hvdmVyU3RhdGUgPSBudWxsO1xuICAgICAgICAgICQoX3RoaXMuZWxlbWVudCkudHJpZ2dlcihfdGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5TSE9XTik7XG5cbiAgICAgICAgICBpZiAocHJldkhvdmVyU3RhdGUgPT09IEhvdmVyU3RhdGUuT1VUKSB7XG4gICAgICAgICAgICBfdGhpcy5fbGVhdmUobnVsbCwgX3RoaXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoJCh0aGlzLnRpcCkuaGFzQ2xhc3MoQ2xhc3NOYW1lJDYuRkFERSkpIHtcbiAgICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLnRpcCk7XG4gICAgICAgICAgJCh0aGlzLnRpcCkub25lKFV0aWwuVFJBTlNJVElPTl9FTkQsIGNvbXBsZXRlKS5lbXVsYXRlVHJhbnNpdGlvbkVuZCh0cmFuc2l0aW9uRHVyYXRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLmhpZGUgPSBmdW5jdGlvbiBoaWRlKGNhbGxiYWNrKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIHRpcCA9IHRoaXMuZ2V0VGlwRWxlbWVudCgpO1xuICAgICAgdmFyIGhpZGVFdmVudCA9ICQuRXZlbnQodGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5ISURFKTtcblxuICAgICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24gY29tcGxldGUoKSB7XG4gICAgICAgIGlmIChfdGhpczIuX2hvdmVyU3RhdGUgIT09IEhvdmVyU3RhdGUuU0hPVyAmJiB0aXAucGFyZW50Tm9kZSkge1xuICAgICAgICAgIHRpcC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRpcCk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczIuX2NsZWFuVGlwQ2xhc3MoKTtcblxuICAgICAgICBfdGhpczIuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknKTtcblxuICAgICAgICAkKF90aGlzMi5lbGVtZW50KS50cmlnZ2VyKF90aGlzMi5jb25zdHJ1Y3Rvci5FdmVudC5ISURERU4pO1xuXG4gICAgICAgIGlmIChfdGhpczIuX3BvcHBlciAhPT0gbnVsbCkge1xuICAgICAgICAgIF90aGlzMi5fcG9wcGVyLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgICQodGhpcy5lbGVtZW50KS50cmlnZ2VyKGhpZGVFdmVudCk7XG5cbiAgICAgIGlmIChoaWRlRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAkKHRpcCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lJDYuU0hPVyk7IC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSByZW1vdmUgdGhlIGV4dHJhXG4gICAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHdlIGFkZGVkIGZvciBpT1Mgc3VwcG9ydFxuXG4gICAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgICQoZG9jdW1lbnQuYm9keSkuY2hpbGRyZW4oKS5vZmYoJ21vdXNlb3ZlcicsIG51bGwsICQubm9vcCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVHJpZ2dlci5DTElDS10gPSBmYWxzZTtcbiAgICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVHJpZ2dlci5GT0NVU10gPSBmYWxzZTtcbiAgICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVHJpZ2dlci5IT1ZFUl0gPSBmYWxzZTtcblxuICAgICAgaWYgKCQodGhpcy50aXApLmhhc0NsYXNzKENsYXNzTmFtZSQ2LkZBREUpKSB7XG4gICAgICAgIHZhciB0cmFuc2l0aW9uRHVyYXRpb24gPSBVdGlsLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRpcCk7XG4gICAgICAgICQodGlwKS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgY29tcGxldGUpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9ob3ZlclN0YXRlID0gJyc7XG4gICAgfTtcblxuICAgIF9wcm90by51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICBpZiAodGhpcy5fcG9wcGVyICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX3BvcHBlci5zY2hlZHVsZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH0gLy8gUHJvdGVjdGVkXG4gICAgO1xuXG4gICAgX3Byb3RvLmlzV2l0aENvbnRlbnQgPSBmdW5jdGlvbiBpc1dpdGhDb250ZW50KCkge1xuICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5nZXRUaXRsZSgpKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmFkZEF0dGFjaG1lbnRDbGFzcyA9IGZ1bmN0aW9uIGFkZEF0dGFjaG1lbnRDbGFzcyhhdHRhY2htZW50KSB7XG4gICAgICAkKHRoaXMuZ2V0VGlwRWxlbWVudCgpKS5hZGRDbGFzcyhDTEFTU19QUkVGSVggKyBcIi1cIiArIGF0dGFjaG1lbnQpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uZ2V0VGlwRWxlbWVudCA9IGZ1bmN0aW9uIGdldFRpcEVsZW1lbnQoKSB7XG4gICAgICB0aGlzLnRpcCA9IHRoaXMudGlwIHx8ICQodGhpcy5jb25maWcudGVtcGxhdGUpWzBdO1xuICAgICAgcmV0dXJuIHRoaXMudGlwO1xuICAgIH07XG5cbiAgICBfcHJvdG8uc2V0Q29udGVudCA9IGZ1bmN0aW9uIHNldENvbnRlbnQoKSB7XG4gICAgICB2YXIgdGlwID0gdGhpcy5nZXRUaXBFbGVtZW50KCk7XG4gICAgICB0aGlzLnNldEVsZW1lbnRDb250ZW50KCQodGlwLnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IkNi5UT09MVElQX0lOTkVSKSksIHRoaXMuZ2V0VGl0bGUoKSk7XG4gICAgICAkKHRpcCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lJDYuRkFERSArIFwiIFwiICsgQ2xhc3NOYW1lJDYuU0hPVyk7XG4gICAgfTtcblxuICAgIF9wcm90by5zZXRFbGVtZW50Q29udGVudCA9IGZ1bmN0aW9uIHNldEVsZW1lbnRDb250ZW50KCRlbGVtZW50LCBjb250ZW50KSB7XG4gICAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdvYmplY3QnICYmIChjb250ZW50Lm5vZGVUeXBlIHx8IGNvbnRlbnQuanF1ZXJ5KSkge1xuICAgICAgICAvLyBDb250ZW50IGlzIGEgRE9NIG5vZGUgb3IgYSBqUXVlcnlcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmh0bWwpIHtcbiAgICAgICAgICBpZiAoISQoY29udGVudCkucGFyZW50KCkuaXMoJGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAkZWxlbWVudC5lbXB0eSgpLmFwcGVuZChjb250ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgJGVsZW1lbnQudGV4dCgkKGNvbnRlbnQpLnRleHQoKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbmZpZy5odG1sKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5zYW5pdGl6ZSkge1xuICAgICAgICAgIGNvbnRlbnQgPSBzYW5pdGl6ZUh0bWwoY29udGVudCwgdGhpcy5jb25maWcud2hpdGVMaXN0LCB0aGlzLmNvbmZpZy5zYW5pdGl6ZUZuKTtcbiAgICAgICAgfVxuXG4gICAgICAgICRlbGVtZW50Lmh0bWwoY29udGVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkZWxlbWVudC50ZXh0KGNvbnRlbnQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uZ2V0VGl0bGUgPSBmdW5jdGlvbiBnZXRUaXRsZSgpIHtcbiAgICAgIHZhciB0aXRsZSA9IHRoaXMuZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtb3JpZ2luYWwtdGl0bGUnKTtcblxuICAgICAgaWYgKCF0aXRsZSkge1xuICAgICAgICB0aXRsZSA9IHR5cGVvZiB0aGlzLmNvbmZpZy50aXRsZSA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMuY29uZmlnLnRpdGxlLmNhbGwodGhpcy5lbGVtZW50KSA6IHRoaXMuY29uZmlnLnRpdGxlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGl0bGU7XG4gICAgfSAvLyBQcml2YXRlXG4gICAgO1xuXG4gICAgX3Byb3RvLl9nZXRPZmZzZXQgPSBmdW5jdGlvbiBfZ2V0T2Zmc2V0KCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBvZmZzZXQgPSB7fTtcblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZy5vZmZzZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb2Zmc2V0LmZuID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICBkYXRhLm9mZnNldHMgPSBfb2JqZWN0U3ByZWFkKHt9LCBkYXRhLm9mZnNldHMsIF90aGlzMy5jb25maWcub2Zmc2V0KGRhdGEub2Zmc2V0cywgX3RoaXMzLmVsZW1lbnQpIHx8IHt9KTtcbiAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9mZnNldC5vZmZzZXQgPSB0aGlzLmNvbmZpZy5vZmZzZXQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvZmZzZXQ7XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0Q29udGFpbmVyID0gZnVuY3Rpb24gX2dldENvbnRhaW5lcigpIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5jb250YWluZXIgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5ib2R5O1xuICAgICAgfVxuXG4gICAgICBpZiAoVXRpbC5pc0VsZW1lbnQodGhpcy5jb25maWcuY29udGFpbmVyKSkge1xuICAgICAgICByZXR1cm4gJCh0aGlzLmNvbmZpZy5jb250YWluZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gJChkb2N1bWVudCkuZmluZCh0aGlzLmNvbmZpZy5jb250YWluZXIpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldEF0dGFjaG1lbnQgPSBmdW5jdGlvbiBfZ2V0QXR0YWNobWVudChwbGFjZW1lbnQpIHtcbiAgICAgIHJldHVybiBBdHRhY2htZW50TWFwJDFbcGxhY2VtZW50LnRvVXBwZXJDYXNlKCldO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX3NldExpc3RlbmVycyA9IGZ1bmN0aW9uIF9zZXRMaXN0ZW5lcnMoKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgdmFyIHRyaWdnZXJzID0gdGhpcy5jb25maWcudHJpZ2dlci5zcGxpdCgnICcpO1xuICAgICAgdHJpZ2dlcnMuZm9yRWFjaChmdW5jdGlvbiAodHJpZ2dlcikge1xuICAgICAgICBpZiAodHJpZ2dlciA9PT0gJ2NsaWNrJykge1xuICAgICAgICAgICQoX3RoaXM0LmVsZW1lbnQpLm9uKF90aGlzNC5jb25zdHJ1Y3Rvci5FdmVudC5DTElDSywgX3RoaXM0LmNvbmZpZy5zZWxlY3RvciwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM0LnRvZ2dsZShldmVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHJpZ2dlciAhPT0gVHJpZ2dlci5NQU5VQUwpIHtcbiAgICAgICAgICB2YXIgZXZlbnRJbiA9IHRyaWdnZXIgPT09IFRyaWdnZXIuSE9WRVIgPyBfdGhpczQuY29uc3RydWN0b3IuRXZlbnQuTU9VU0VFTlRFUiA6IF90aGlzNC5jb25zdHJ1Y3Rvci5FdmVudC5GT0NVU0lOO1xuICAgICAgICAgIHZhciBldmVudE91dCA9IHRyaWdnZXIgPT09IFRyaWdnZXIuSE9WRVIgPyBfdGhpczQuY29uc3RydWN0b3IuRXZlbnQuTU9VU0VMRUFWRSA6IF90aGlzNC5jb25zdHJ1Y3Rvci5FdmVudC5GT0NVU09VVDtcbiAgICAgICAgICAkKF90aGlzNC5lbGVtZW50KS5vbihldmVudEluLCBfdGhpczQuY29uZmlnLnNlbGVjdG9yLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczQuX2VudGVyKGV2ZW50KTtcbiAgICAgICAgICB9KS5vbihldmVudE91dCwgX3RoaXM0LmNvbmZpZy5zZWxlY3RvciwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM0Ll9sZWF2ZShldmVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgJCh0aGlzLmVsZW1lbnQpLmNsb3Nlc3QoJy5tb2RhbCcpLm9uKCdoaWRlLmJzLm1vZGFsJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXM0LmVsZW1lbnQpIHtcbiAgICAgICAgICBfdGhpczQuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMuY29uZmlnLnNlbGVjdG9yKSB7XG4gICAgICAgIHRoaXMuY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgdGhpcy5jb25maWcsIHtcbiAgICAgICAgICB0cmlnZ2VyOiAnbWFudWFsJyxcbiAgICAgICAgICBzZWxlY3RvcjogJydcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9maXhUaXRsZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uX2ZpeFRpdGxlID0gZnVuY3Rpb24gX2ZpeFRpdGxlKCkge1xuICAgICAgdmFyIHRpdGxlVHlwZSA9IHR5cGVvZiB0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLW9yaWdpbmFsLXRpdGxlJyk7XG5cbiAgICAgIGlmICh0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0aXRsZScpIHx8IHRpdGxlVHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1vcmlnaW5hbC10aXRsZScsIHRoaXMuZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RpdGxlJykgfHwgJycpO1xuICAgICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCd0aXRsZScsICcnKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLl9lbnRlciA9IGZ1bmN0aW9uIF9lbnRlcihldmVudCwgY29udGV4dCkge1xuICAgICAgdmFyIGRhdGFLZXkgPSB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZO1xuICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgJChldmVudC5jdXJyZW50VGFyZ2V0KS5kYXRhKGRhdGFLZXkpO1xuXG4gICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgY29udGV4dCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKGV2ZW50LmN1cnJlbnRUYXJnZXQsIHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkpO1xuICAgICAgICAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmRhdGEoZGF0YUtleSwgY29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudCkge1xuICAgICAgICBjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyW2V2ZW50LnR5cGUgPT09ICdmb2N1c2luJyA/IFRyaWdnZXIuRk9DVVMgOiBUcmlnZ2VyLkhPVkVSXSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICgkKGNvbnRleHQuZ2V0VGlwRWxlbWVudCgpKS5oYXNDbGFzcyhDbGFzc05hbWUkNi5TSE9XKSB8fCBjb250ZXh0Ll9ob3ZlclN0YXRlID09PSBIb3ZlclN0YXRlLlNIT1cpIHtcbiAgICAgICAgY29udGV4dC5faG92ZXJTdGF0ZSA9IEhvdmVyU3RhdGUuU0hPVztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjbGVhclRpbWVvdXQoY29udGV4dC5fdGltZW91dCk7XG4gICAgICBjb250ZXh0Ll9ob3ZlclN0YXRlID0gSG92ZXJTdGF0ZS5TSE9XO1xuXG4gICAgICBpZiAoIWNvbnRleHQuY29uZmlnLmRlbGF5IHx8ICFjb250ZXh0LmNvbmZpZy5kZWxheS5zaG93KSB7XG4gICAgICAgIGNvbnRleHQuc2hvdygpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGNvbnRleHQuX2hvdmVyU3RhdGUgPT09IEhvdmVyU3RhdGUuU0hPVykge1xuICAgICAgICAgIGNvbnRleHQuc2hvdygpO1xuICAgICAgICB9XG4gICAgICB9LCBjb250ZXh0LmNvbmZpZy5kZWxheS5zaG93KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9sZWF2ZSA9IGZ1bmN0aW9uIF9sZWF2ZShldmVudCwgY29udGV4dCkge1xuICAgICAgdmFyIGRhdGFLZXkgPSB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZO1xuICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgJChldmVudC5jdXJyZW50VGFyZ2V0KS5kYXRhKGRhdGFLZXkpO1xuXG4gICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgY29udGV4dCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKGV2ZW50LmN1cnJlbnRUYXJnZXQsIHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkpO1xuICAgICAgICAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmRhdGEoZGF0YUtleSwgY29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudCkge1xuICAgICAgICBjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyW2V2ZW50LnR5cGUgPT09ICdmb2N1c291dCcgPyBUcmlnZ2VyLkZPQ1VTIDogVHJpZ2dlci5IT1ZFUl0gPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbnRleHQuX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNsZWFyVGltZW91dChjb250ZXh0Ll90aW1lb3V0KTtcbiAgICAgIGNvbnRleHQuX2hvdmVyU3RhdGUgPSBIb3ZlclN0YXRlLk9VVDtcblxuICAgICAgaWYgKCFjb250ZXh0LmNvbmZpZy5kZWxheSB8fCAhY29udGV4dC5jb25maWcuZGVsYXkuaGlkZSkge1xuICAgICAgICBjb250ZXh0LmhpZGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Ll90aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChjb250ZXh0Ll9ob3ZlclN0YXRlID09PSBIb3ZlclN0YXRlLk9VVCkge1xuICAgICAgICAgIGNvbnRleHQuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICB9LCBjb250ZXh0LmNvbmZpZy5kZWxheS5oaWRlKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9pc1dpdGhBY3RpdmVUcmlnZ2VyID0gZnVuY3Rpb24gX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKSB7XG4gICAgICBmb3IgKHZhciB0cmlnZ2VyIGluIHRoaXMuX2FjdGl2ZVRyaWdnZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZVRyaWdnZXJbdHJpZ2dlcl0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0Q29uZmlnID0gZnVuY3Rpb24gX2dldENvbmZpZyhjb25maWcpIHtcbiAgICAgIHZhciBkYXRhQXR0cmlidXRlcyA9ICQodGhpcy5lbGVtZW50KS5kYXRhKCk7XG4gICAgICBPYmplY3Qua2V5cyhkYXRhQXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoZGF0YUF0dHIpIHtcbiAgICAgICAgaWYgKERJU0FMTE9XRURfQVRUUklCVVRFUy5pbmRleE9mKGRhdGFBdHRyKSAhPT0gLTEpIHtcbiAgICAgICAgICBkZWxldGUgZGF0YUF0dHJpYnV0ZXNbZGF0YUF0dHJdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdCwgZGF0YUF0dHJpYnV0ZXMsIHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZyA/IGNvbmZpZyA6IHt9KTtcblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcuZGVsYXkgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGNvbmZpZy5kZWxheSA9IHtcbiAgICAgICAgICBzaG93OiBjb25maWcuZGVsYXksXG4gICAgICAgICAgaGlkZTogY29uZmlnLmRlbGF5XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnLnRpdGxlID09PSAnbnVtYmVyJykge1xuICAgICAgICBjb25maWcudGl0bGUgPSBjb25maWcudGl0bGUudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcuY29udGVudCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uZmlnLmNvbnRlbnQgPSBjb25maWcuY29udGVudC50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICBVdGlsLnR5cGVDaGVja0NvbmZpZyhOQU1FJDYsIGNvbmZpZywgdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0VHlwZSk7XG5cbiAgICAgIGlmIChjb25maWcuc2FuaXRpemUpIHtcbiAgICAgICAgY29uZmlnLnRlbXBsYXRlID0gc2FuaXRpemVIdG1sKGNvbmZpZy50ZW1wbGF0ZSwgY29uZmlnLndoaXRlTGlzdCwgY29uZmlnLnNhbml0aXplRm4pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldERlbGVnYXRlQ29uZmlnID0gZnVuY3Rpb24gX2dldERlbGVnYXRlQ29uZmlnKCkge1xuICAgICAgdmFyIGNvbmZpZyA9IHt9O1xuXG4gICAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuY29uZmlnKSB7XG4gICAgICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFtrZXldICE9PSB0aGlzLmNvbmZpZ1trZXldKSB7XG4gICAgICAgICAgICBjb25maWdba2V5XSA9IHRoaXMuY29uZmlnW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfTtcblxuICAgIF9wcm90by5fY2xlYW5UaXBDbGFzcyA9IGZ1bmN0aW9uIF9jbGVhblRpcENsYXNzKCkge1xuICAgICAgdmFyICR0aXAgPSAkKHRoaXMuZ2V0VGlwRWxlbWVudCgpKTtcbiAgICAgIHZhciB0YWJDbGFzcyA9ICR0aXAuYXR0cignY2xhc3MnKS5tYXRjaChCU0NMU19QUkVGSVhfUkVHRVgpO1xuXG4gICAgICBpZiAodGFiQ2xhc3MgIT09IG51bGwgJiYgdGFiQ2xhc3MubGVuZ3RoKSB7XG4gICAgICAgICR0aXAucmVtb3ZlQ2xhc3ModGFiQ2xhc3Muam9pbignJykpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uX2hhbmRsZVBvcHBlclBsYWNlbWVudENoYW5nZSA9IGZ1bmN0aW9uIF9oYW5kbGVQb3BwZXJQbGFjZW1lbnRDaGFuZ2UocG9wcGVyRGF0YSkge1xuICAgICAgdmFyIHBvcHBlckluc3RhbmNlID0gcG9wcGVyRGF0YS5pbnN0YW5jZTtcbiAgICAgIHRoaXMudGlwID0gcG9wcGVySW5zdGFuY2UucG9wcGVyO1xuXG4gICAgICB0aGlzLl9jbGVhblRpcENsYXNzKCk7XG5cbiAgICAgIHRoaXMuYWRkQXR0YWNobWVudENsYXNzKHRoaXMuX2dldEF0dGFjaG1lbnQocG9wcGVyRGF0YS5wbGFjZW1lbnQpKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9maXhUcmFuc2l0aW9uID0gZnVuY3Rpb24gX2ZpeFRyYW5zaXRpb24oKSB7XG4gICAgICB2YXIgdGlwID0gdGhpcy5nZXRUaXBFbGVtZW50KCk7XG4gICAgICB2YXIgaW5pdENvbmZpZ0FuaW1hdGlvbiA9IHRoaXMuY29uZmlnLmFuaW1hdGlvbjtcblxuICAgICAgaWYgKHRpcC5nZXRBdHRyaWJ1dGUoJ3gtcGxhY2VtZW50JykgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAkKHRpcCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lJDYuRkFERSk7XG4gICAgICB0aGlzLmNvbmZpZy5hbmltYXRpb24gPSBmYWxzZTtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgdGhpcy5zaG93KCk7XG4gICAgICB0aGlzLmNvbmZpZy5hbmltYXRpb24gPSBpbml0Q29uZmlnQW5pbWF0aW9uO1xuICAgIH0gLy8gU3RhdGljXG4gICAgO1xuXG4gICAgVG9vbHRpcC5falF1ZXJ5SW50ZXJmYWNlID0gZnVuY3Rpb24gX2pRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YShEQVRBX0tFWSQ2KTtcblxuICAgICAgICB2YXIgX2NvbmZpZyA9IHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZztcblxuICAgICAgICBpZiAoIWRhdGEgJiYgL2Rpc3Bvc2V8aGlkZS8udGVzdChjb25maWcpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IG5ldyBUb29sdGlwKHRoaXMsIF9jb25maWcpO1xuICAgICAgICAgICQodGhpcykuZGF0YShEQVRBX0tFWSQ2LCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIG1ldGhvZCBuYW1lZCBcXFwiXCIgKyBjb25maWcgKyBcIlxcXCJcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBfY3JlYXRlQ2xhc3MoVG9vbHRpcCwgbnVsbCwgW3tcbiAgICAgIGtleTogXCJWRVJTSU9OXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIFZFUlNJT04kNjtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiRGVmYXVsdFwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBEZWZhdWx0JDQ7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIk5BTUVcIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gTkFNRSQ2O1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJEQVRBX0tFWVwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBEQVRBX0tFWSQ2O1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJFdmVudFwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBFdmVudCQ2O1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJFVkVOVF9LRVlcIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gRVZFTlRfS0VZJDY7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkRlZmF1bHRUeXBlXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIERlZmF1bHRUeXBlJDQ7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIFRvb2x0aXA7XG4gIH0oKTtcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBqUXVlcnlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJC5mbltOQU1FJDZdID0gVG9vbHRpcC5falF1ZXJ5SW50ZXJmYWNlO1xuICAkLmZuW05BTUUkNl0uQ29uc3RydWN0b3IgPSBUb29sdGlwO1xuXG4gICQuZm5bTkFNRSQ2XS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICQuZm5bTkFNRSQ2XSA9IEpRVUVSWV9OT19DT05GTElDVCQ2O1xuICAgIHJldHVybiBUb29sdGlwLl9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBDb25zdGFudHNcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBOQU1FJDcgPSAncG9wb3Zlcic7XG4gIHZhciBWRVJTSU9OJDcgPSAnNC4zLjEnO1xuICB2YXIgREFUQV9LRVkkNyA9ICdicy5wb3BvdmVyJztcbiAgdmFyIEVWRU5UX0tFWSQ3ID0gXCIuXCIgKyBEQVRBX0tFWSQ3O1xuICB2YXIgSlFVRVJZX05PX0NPTkZMSUNUJDcgPSAkLmZuW05BTUUkN107XG4gIHZhciBDTEFTU19QUkVGSVgkMSA9ICdicy1wb3BvdmVyJztcbiAgdmFyIEJTQ0xTX1BSRUZJWF9SRUdFWCQxID0gbmV3IFJlZ0V4cChcIihefFxcXFxzKVwiICsgQ0xBU1NfUFJFRklYJDEgKyBcIlxcXFxTK1wiLCAnZycpO1xuXG4gIHZhciBEZWZhdWx0JDUgPSBfb2JqZWN0U3ByZWFkKHt9LCBUb29sdGlwLkRlZmF1bHQsIHtcbiAgICBwbGFjZW1lbnQ6ICdyaWdodCcsXG4gICAgdHJpZ2dlcjogJ2NsaWNrJyxcbiAgICBjb250ZW50OiAnJyxcbiAgICB0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9XCJwb3BvdmVyXCIgcm9sZT1cInRvb2x0aXBcIj4nICsgJzxkaXYgY2xhc3M9XCJhcnJvd1wiPjwvZGl2PicgKyAnPGgzIGNsYXNzPVwicG9wb3Zlci1oZWFkZXJcIj48L2gzPicgKyAnPGRpdiBjbGFzcz1cInBvcG92ZXItYm9keVwiPjwvZGl2PjwvZGl2PidcbiAgfSk7XG5cbiAgdmFyIERlZmF1bHRUeXBlJDUgPSBfb2JqZWN0U3ByZWFkKHt9LCBUb29sdGlwLkRlZmF1bHRUeXBlLCB7XG4gICAgY29udGVudDogJyhzdHJpbmd8ZWxlbWVudHxmdW5jdGlvbiknXG4gIH0pO1xuXG4gIHZhciBDbGFzc05hbWUkNyA9IHtcbiAgICBGQURFOiAnZmFkZScsXG4gICAgU0hPVzogJ3Nob3cnXG4gIH07XG4gIHZhciBTZWxlY3RvciQ3ID0ge1xuICAgIFRJVExFOiAnLnBvcG92ZXItaGVhZGVyJyxcbiAgICBDT05URU5UOiAnLnBvcG92ZXItYm9keSdcbiAgfTtcbiAgdmFyIEV2ZW50JDcgPSB7XG4gICAgSElERTogXCJoaWRlXCIgKyBFVkVOVF9LRVkkNyxcbiAgICBISURERU46IFwiaGlkZGVuXCIgKyBFVkVOVF9LRVkkNyxcbiAgICBTSE9XOiBcInNob3dcIiArIEVWRU5UX0tFWSQ3LFxuICAgIFNIT1dOOiBcInNob3duXCIgKyBFVkVOVF9LRVkkNyxcbiAgICBJTlNFUlRFRDogXCJpbnNlcnRlZFwiICsgRVZFTlRfS0VZJDcsXG4gICAgQ0xJQ0s6IFwiY2xpY2tcIiArIEVWRU5UX0tFWSQ3LFxuICAgIEZPQ1VTSU46IFwiZm9jdXNpblwiICsgRVZFTlRfS0VZJDcsXG4gICAgRk9DVVNPVVQ6IFwiZm9jdXNvdXRcIiArIEVWRU5UX0tFWSQ3LFxuICAgIE1PVVNFRU5URVI6IFwibW91c2VlbnRlclwiICsgRVZFTlRfS0VZJDcsXG4gICAgTU9VU0VMRUFWRTogXCJtb3VzZWxlYXZlXCIgKyBFVkVOVF9LRVkkN1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIENsYXNzIERlZmluaXRpb25cbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuICB9O1xuXG4gIHZhciBQb3BvdmVyID1cbiAgLyojX19QVVJFX18qL1xuICBmdW5jdGlvbiAoX1Rvb2x0aXApIHtcbiAgICBfaW5oZXJpdHNMb29zZShQb3BvdmVyLCBfVG9vbHRpcCk7XG5cbiAgICBmdW5jdGlvbiBQb3BvdmVyKCkge1xuICAgICAgcmV0dXJuIF9Ub29sdGlwLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG5cbiAgICB2YXIgX3Byb3RvID0gUG9wb3Zlci5wcm90b3R5cGU7XG5cbiAgICAvLyBPdmVycmlkZXNcbiAgICBfcHJvdG8uaXNXaXRoQ29udGVudCA9IGZ1bmN0aW9uIGlzV2l0aENvbnRlbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRUaXRsZSgpIHx8IHRoaXMuX2dldENvbnRlbnQoKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmFkZEF0dGFjaG1lbnRDbGFzcyA9IGZ1bmN0aW9uIGFkZEF0dGFjaG1lbnRDbGFzcyhhdHRhY2htZW50KSB7XG4gICAgICAkKHRoaXMuZ2V0VGlwRWxlbWVudCgpKS5hZGRDbGFzcyhDTEFTU19QUkVGSVgkMSArIFwiLVwiICsgYXR0YWNobWVudCk7XG4gICAgfTtcblxuICAgIF9wcm90by5nZXRUaXBFbGVtZW50ID0gZnVuY3Rpb24gZ2V0VGlwRWxlbWVudCgpIHtcbiAgICAgIHRoaXMudGlwID0gdGhpcy50aXAgfHwgJCh0aGlzLmNvbmZpZy50ZW1wbGF0ZSlbMF07XG4gICAgICByZXR1cm4gdGhpcy50aXA7XG4gICAgfTtcblxuICAgIF9wcm90by5zZXRDb250ZW50ID0gZnVuY3Rpb24gc2V0Q29udGVudCgpIHtcbiAgICAgIHZhciAkdGlwID0gJCh0aGlzLmdldFRpcEVsZW1lbnQoKSk7IC8vIFdlIHVzZSBhcHBlbmQgZm9yIGh0bWwgb2JqZWN0cyB0byBtYWludGFpbiBqcyBldmVudHNcblxuICAgICAgdGhpcy5zZXRFbGVtZW50Q29udGVudCgkdGlwLmZpbmQoU2VsZWN0b3IkNy5USVRMRSksIHRoaXMuZ2V0VGl0bGUoKSk7XG5cbiAgICAgIHZhciBjb250ZW50ID0gdGhpcy5fZ2V0Q29udGVudCgpO1xuXG4gICAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQuY2FsbCh0aGlzLmVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldEVsZW1lbnRDb250ZW50KCR0aXAuZmluZChTZWxlY3RvciQ3LkNPTlRFTlQpLCBjb250ZW50KTtcbiAgICAgICR0aXAucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lJDcuRkFERSArIFwiIFwiICsgQ2xhc3NOYW1lJDcuU0hPVyk7XG4gICAgfSAvLyBQcml2YXRlXG4gICAgO1xuXG4gICAgX3Byb3RvLl9nZXRDb250ZW50ID0gZnVuY3Rpb24gX2dldENvbnRlbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1jb250ZW50JykgfHwgdGhpcy5jb25maWcuY29udGVudDtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9jbGVhblRpcENsYXNzID0gZnVuY3Rpb24gX2NsZWFuVGlwQ2xhc3MoKSB7XG4gICAgICB2YXIgJHRpcCA9ICQodGhpcy5nZXRUaXBFbGVtZW50KCkpO1xuICAgICAgdmFyIHRhYkNsYXNzID0gJHRpcC5hdHRyKCdjbGFzcycpLm1hdGNoKEJTQ0xTX1BSRUZJWF9SRUdFWCQxKTtcblxuICAgICAgaWYgKHRhYkNsYXNzICE9PSBudWxsICYmIHRhYkNsYXNzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgJHRpcC5yZW1vdmVDbGFzcyh0YWJDbGFzcy5qb2luKCcnKSk7XG4gICAgICB9XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBQb3BvdmVyLl9qUXVlcnlJbnRlcmZhY2UgPSBmdW5jdGlvbiBfalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkYXRhID0gJCh0aGlzKS5kYXRhKERBVEFfS0VZJDcpO1xuXG4gICAgICAgIHZhciBfY29uZmlnID0gdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiBudWxsO1xuXG4gICAgICAgIGlmICghZGF0YSAmJiAvZGlzcG9zZXxoaWRlLy50ZXN0KGNvbmZpZykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICBkYXRhID0gbmV3IFBvcG92ZXIodGhpcywgX2NvbmZpZyk7XG4gICAgICAgICAgJCh0aGlzKS5kYXRhKERBVEFfS0VZJDcsIGRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gbWV0aG9kIG5hbWVkIFxcXCJcIiArIGNvbmZpZyArIFwiXFxcIlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9jcmVhdGVDbGFzcyhQb3BvdmVyLCBudWxsLCBbe1xuICAgICAga2V5OiBcIlZFUlNJT05cIixcbiAgICAgIC8vIEdldHRlcnNcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gVkVSU0lPTiQ3O1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJEZWZhdWx0XCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIERlZmF1bHQkNTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiTkFNRVwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBOQU1FJDc7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkRBVEFfS0VZXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIERBVEFfS0VZJDc7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkV2ZW50XCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIEV2ZW50JDc7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkVWRU5UX0tFWVwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBFVkVOVF9LRVkkNztcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiRGVmYXVsdFR5cGVcIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gRGVmYXVsdFR5cGUkNTtcbiAgICAgIH1cbiAgICB9XSk7XG5cbiAgICByZXR1cm4gUG9wb3ZlcjtcbiAgfShUb29sdGlwKTtcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBqUXVlcnlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJC5mbltOQU1FJDddID0gUG9wb3Zlci5falF1ZXJ5SW50ZXJmYWNlO1xuICAkLmZuW05BTUUkN10uQ29uc3RydWN0b3IgPSBQb3BvdmVyO1xuXG4gICQuZm5bTkFNRSQ3XS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICQuZm5bTkFNRSQ3XSA9IEpRVUVSWV9OT19DT05GTElDVCQ3O1xuICAgIHJldHVybiBQb3BvdmVyLl9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBDb25zdGFudHNcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBOQU1FJDggPSAnc2Nyb2xsc3B5JztcbiAgdmFyIFZFUlNJT04kOCA9ICc0LjMuMSc7XG4gIHZhciBEQVRBX0tFWSQ4ID0gJ2JzLnNjcm9sbHNweSc7XG4gIHZhciBFVkVOVF9LRVkkOCA9IFwiLlwiICsgREFUQV9LRVkkODtcbiAgdmFyIERBVEFfQVBJX0tFWSQ2ID0gJy5kYXRhLWFwaSc7XG4gIHZhciBKUVVFUllfTk9fQ09ORkxJQ1QkOCA9ICQuZm5bTkFNRSQ4XTtcbiAgdmFyIERlZmF1bHQkNiA9IHtcbiAgICBvZmZzZXQ6IDEwLFxuICAgIG1ldGhvZDogJ2F1dG8nLFxuICAgIHRhcmdldDogJydcbiAgfTtcbiAgdmFyIERlZmF1bHRUeXBlJDYgPSB7XG4gICAgb2Zmc2V0OiAnbnVtYmVyJyxcbiAgICBtZXRob2Q6ICdzdHJpbmcnLFxuICAgIHRhcmdldDogJyhzdHJpbmd8ZWxlbWVudCknXG4gIH07XG4gIHZhciBFdmVudCQ4ID0ge1xuICAgIEFDVElWQVRFOiBcImFjdGl2YXRlXCIgKyBFVkVOVF9LRVkkOCxcbiAgICBTQ1JPTEw6IFwic2Nyb2xsXCIgKyBFVkVOVF9LRVkkOCxcbiAgICBMT0FEX0RBVEFfQVBJOiBcImxvYWRcIiArIEVWRU5UX0tFWSQ4ICsgREFUQV9BUElfS0VZJDZcbiAgfTtcbiAgdmFyIENsYXNzTmFtZSQ4ID0ge1xuICAgIERST1BET1dOX0lURU06ICdkcm9wZG93bi1pdGVtJyxcbiAgICBEUk9QRE9XTl9NRU5VOiAnZHJvcGRvd24tbWVudScsXG4gICAgQUNUSVZFOiAnYWN0aXZlJ1xuICB9O1xuICB2YXIgU2VsZWN0b3IkOCA9IHtcbiAgICBEQVRBX1NQWTogJ1tkYXRhLXNweT1cInNjcm9sbFwiXScsXG4gICAgQUNUSVZFOiAnLmFjdGl2ZScsXG4gICAgTkFWX0xJU1RfR1JPVVA6ICcubmF2LCAubGlzdC1ncm91cCcsXG4gICAgTkFWX0xJTktTOiAnLm5hdi1saW5rJyxcbiAgICBOQVZfSVRFTVM6ICcubmF2LWl0ZW0nLFxuICAgIExJU1RfSVRFTVM6ICcubGlzdC1ncm91cC1pdGVtJyxcbiAgICBEUk9QRE9XTjogJy5kcm9wZG93bicsXG4gICAgRFJPUERPV05fSVRFTVM6ICcuZHJvcGRvd24taXRlbScsXG4gICAgRFJPUERPV05fVE9HR0xFOiAnLmRyb3Bkb3duLXRvZ2dsZSdcbiAgfTtcbiAgdmFyIE9mZnNldE1ldGhvZCA9IHtcbiAgICBPRkZTRVQ6ICdvZmZzZXQnLFxuICAgIFBPU0lUSU9OOiAncG9zaXRpb24nXG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG4gIH07XG5cbiAgdmFyIFNjcm9sbFNweSA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNjcm9sbFNweShlbGVtZW50LCBjb25maWcpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgdGhpcy5fc2Nyb2xsRWxlbWVudCA9IGVsZW1lbnQudGFnTmFtZSA9PT0gJ0JPRFknID8gd2luZG93IDogZWxlbWVudDtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgICAgdGhpcy5fc2VsZWN0b3IgPSB0aGlzLl9jb25maWcudGFyZ2V0ICsgXCIgXCIgKyBTZWxlY3RvciQ4Lk5BVl9MSU5LUyArIFwiLFwiICsgKHRoaXMuX2NvbmZpZy50YXJnZXQgKyBcIiBcIiArIFNlbGVjdG9yJDguTElTVF9JVEVNUyArIFwiLFwiKSArICh0aGlzLl9jb25maWcudGFyZ2V0ICsgXCIgXCIgKyBTZWxlY3RvciQ4LkRST1BET1dOX0lURU1TKTtcbiAgICAgIHRoaXMuX29mZnNldHMgPSBbXTtcbiAgICAgIHRoaXMuX3RhcmdldHMgPSBbXTtcbiAgICAgIHRoaXMuX2FjdGl2ZVRhcmdldCA9IG51bGw7XG4gICAgICB0aGlzLl9zY3JvbGxIZWlnaHQgPSAwO1xuICAgICAgJCh0aGlzLl9zY3JvbGxFbGVtZW50KS5vbihFdmVudCQ4LlNDUk9MTCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5fcHJvY2VzcyhldmVudCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuXG4gICAgICB0aGlzLl9wcm9jZXNzKCk7XG4gICAgfSAvLyBHZXR0ZXJzXG5cblxuICAgIHZhciBfcHJvdG8gPSBTY3JvbGxTcHkucHJvdG90eXBlO1xuXG4gICAgLy8gUHVibGljXG4gICAgX3Byb3RvLnJlZnJlc2ggPSBmdW5jdGlvbiByZWZyZXNoKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBhdXRvTWV0aG9kID0gdGhpcy5fc2Nyb2xsRWxlbWVudCA9PT0gdGhpcy5fc2Nyb2xsRWxlbWVudC53aW5kb3cgPyBPZmZzZXRNZXRob2QuT0ZGU0VUIDogT2Zmc2V0TWV0aG9kLlBPU0lUSU9OO1xuICAgICAgdmFyIG9mZnNldE1ldGhvZCA9IHRoaXMuX2NvbmZpZy5tZXRob2QgPT09ICdhdXRvJyA/IGF1dG9NZXRob2QgOiB0aGlzLl9jb25maWcubWV0aG9kO1xuICAgICAgdmFyIG9mZnNldEJhc2UgPSBvZmZzZXRNZXRob2QgPT09IE9mZnNldE1ldGhvZC5QT1NJVElPTiA/IHRoaXMuX2dldFNjcm9sbFRvcCgpIDogMDtcbiAgICAgIHRoaXMuX29mZnNldHMgPSBbXTtcbiAgICAgIHRoaXMuX3RhcmdldHMgPSBbXTtcbiAgICAgIHRoaXMuX3Njcm9sbEhlaWdodCA9IHRoaXMuX2dldFNjcm9sbEhlaWdodCgpO1xuICAgICAgdmFyIHRhcmdldHMgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5fc2VsZWN0b3IpKTtcbiAgICAgIHRhcmdldHMubWFwKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIHZhciB0YXJnZXQ7XG4gICAgICAgIHZhciB0YXJnZXRTZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICBpZiAodGFyZ2V0U2VsZWN0b3IpIHtcbiAgICAgICAgICB0YXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldFNlbGVjdG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICB2YXIgdGFyZ2V0QkNSID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgaWYgKHRhcmdldEJDUi53aWR0aCB8fCB0YXJnZXRCQ1IuaGVpZ2h0KSB7XG4gICAgICAgICAgICAvLyBUT0RPIChmYXQpOiByZW1vdmUgc2tldGNoIHJlbGlhbmNlIG9uIGpRdWVyeSBwb3NpdGlvbi9vZmZzZXRcbiAgICAgICAgICAgIHJldHVybiBbJCh0YXJnZXQpW29mZnNldE1ldGhvZF0oKS50b3AgKyBvZmZzZXRCYXNlLCB0YXJnZXRTZWxlY3Rvcl07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9KS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHJldHVybiBhWzBdIC0gYlswXTtcbiAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgX3RoaXMyLl9vZmZzZXRzLnB1c2goaXRlbVswXSk7XG5cbiAgICAgICAgX3RoaXMyLl90YXJnZXRzLnB1c2goaXRlbVsxXSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgJC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsIERBVEFfS0VZJDgpO1xuICAgICAgJCh0aGlzLl9zY3JvbGxFbGVtZW50KS5vZmYoRVZFTlRfS0VZJDgpO1xuICAgICAgdGhpcy5fZWxlbWVudCA9IG51bGw7XG4gICAgICB0aGlzLl9zY3JvbGxFbGVtZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IG51bGw7XG4gICAgICB0aGlzLl9zZWxlY3RvciA9IG51bGw7XG4gICAgICB0aGlzLl9vZmZzZXRzID0gbnVsbDtcbiAgICAgIHRoaXMuX3RhcmdldHMgPSBudWxsO1xuICAgICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gbnVsbDtcbiAgICAgIHRoaXMuX3Njcm9sbEhlaWdodCA9IG51bGw7XG4gICAgfSAvLyBQcml2YXRlXG4gICAgO1xuXG4gICAgX3Byb3RvLl9nZXRDb25maWcgPSBmdW5jdGlvbiBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgICAgY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgRGVmYXVsdCQ2LCB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiBjb25maWcgPyBjb25maWcgOiB7fSk7XG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnLnRhcmdldCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFyIGlkID0gJChjb25maWcudGFyZ2V0KS5hdHRyKCdpZCcpO1xuXG4gICAgICAgIGlmICghaWQpIHtcbiAgICAgICAgICBpZCA9IFV0aWwuZ2V0VUlEKE5BTUUkOCk7XG4gICAgICAgICAgJChjb25maWcudGFyZ2V0KS5hdHRyKCdpZCcsIGlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZy50YXJnZXQgPSBcIiNcIiArIGlkO1xuICAgICAgfVxuXG4gICAgICBVdGlsLnR5cGVDaGVja0NvbmZpZyhOQU1FJDgsIGNvbmZpZywgRGVmYXVsdFR5cGUkNik7XG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldFNjcm9sbFRvcCA9IGZ1bmN0aW9uIF9nZXRTY3JvbGxUb3AoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2Nyb2xsRWxlbWVudCA9PT0gd2luZG93ID8gdGhpcy5fc2Nyb2xsRWxlbWVudC5wYWdlWU9mZnNldCA6IHRoaXMuX3Njcm9sbEVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldFNjcm9sbEhlaWdodCA9IGZ1bmN0aW9uIF9nZXRTY3JvbGxIZWlnaHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2Nyb2xsRWxlbWVudC5zY3JvbGxIZWlnaHQgfHwgTWF0aC5tYXgoZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQsIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldE9mZnNldEhlaWdodCA9IGZ1bmN0aW9uIF9nZXRPZmZzZXRIZWlnaHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2Nyb2xsRWxlbWVudCA9PT0gd2luZG93ID8gd2luZG93LmlubmVySGVpZ2h0IDogdGhpcy5fc2Nyb2xsRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgfTtcblxuICAgIF9wcm90by5fcHJvY2VzcyA9IGZ1bmN0aW9uIF9wcm9jZXNzKCkge1xuICAgICAgdmFyIHNjcm9sbFRvcCA9IHRoaXMuX2dldFNjcm9sbFRvcCgpICsgdGhpcy5fY29uZmlnLm9mZnNldDtcblxuICAgICAgdmFyIHNjcm9sbEhlaWdodCA9IHRoaXMuX2dldFNjcm9sbEhlaWdodCgpO1xuXG4gICAgICB2YXIgbWF4U2Nyb2xsID0gdGhpcy5fY29uZmlnLm9mZnNldCArIHNjcm9sbEhlaWdodCAtIHRoaXMuX2dldE9mZnNldEhlaWdodCgpO1xuXG4gICAgICBpZiAodGhpcy5fc2Nyb2xsSGVpZ2h0ICE9PSBzY3JvbGxIZWlnaHQpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzY3JvbGxUb3AgPj0gbWF4U2Nyb2xsKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLl90YXJnZXRzW3RoaXMuX3RhcmdldHMubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZVRhcmdldCAhPT0gdGFyZ2V0KSB7XG4gICAgICAgICAgdGhpcy5fYWN0aXZhdGUodGFyZ2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2FjdGl2ZVRhcmdldCAmJiBzY3JvbGxUb3AgPCB0aGlzLl9vZmZzZXRzWzBdICYmIHRoaXMuX29mZnNldHNbMF0gPiAwKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRhcmdldCA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5fY2xlYXIoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBvZmZzZXRMZW5ndGggPSB0aGlzLl9vZmZzZXRzLmxlbmd0aDtcblxuICAgICAgZm9yICh2YXIgaSA9IG9mZnNldExlbmd0aDsgaS0tOykge1xuICAgICAgICB2YXIgaXNBY3RpdmVUYXJnZXQgPSB0aGlzLl9hY3RpdmVUYXJnZXQgIT09IHRoaXMuX3RhcmdldHNbaV0gJiYgc2Nyb2xsVG9wID49IHRoaXMuX29mZnNldHNbaV0gJiYgKHR5cGVvZiB0aGlzLl9vZmZzZXRzW2kgKyAxXSA9PT0gJ3VuZGVmaW5lZCcgfHwgc2Nyb2xsVG9wIDwgdGhpcy5fb2Zmc2V0c1tpICsgMV0pO1xuXG4gICAgICAgIGlmIChpc0FjdGl2ZVRhcmdldCkge1xuICAgICAgICAgIHRoaXMuX2FjdGl2YXRlKHRoaXMuX3RhcmdldHNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5fYWN0aXZhdGUgPSBmdW5jdGlvbiBfYWN0aXZhdGUodGFyZ2V0KSB7XG4gICAgICB0aGlzLl9hY3RpdmVUYXJnZXQgPSB0YXJnZXQ7XG5cbiAgICAgIHRoaXMuX2NsZWFyKCk7XG5cbiAgICAgIHZhciBxdWVyaWVzID0gdGhpcy5fc2VsZWN0b3Iuc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RvciArIFwiW2RhdGEtdGFyZ2V0PVxcXCJcIiArIHRhcmdldCArIFwiXFxcIl0sXCIgKyBzZWxlY3RvciArIFwiW2hyZWY9XFxcIlwiICsgdGFyZ2V0ICsgXCJcXFwiXVwiO1xuICAgICAgfSk7XG5cbiAgICAgIHZhciAkbGluayA9ICQoW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJpZXMuam9pbignLCcpKSkpO1xuXG4gICAgICBpZiAoJGxpbmsuaGFzQ2xhc3MoQ2xhc3NOYW1lJDguRFJPUERPV05fSVRFTSkpIHtcbiAgICAgICAgJGxpbmsuY2xvc2VzdChTZWxlY3RvciQ4LkRST1BET1dOKS5maW5kKFNlbGVjdG9yJDguRFJPUERPV05fVE9HR0xFKS5hZGRDbGFzcyhDbGFzc05hbWUkOC5BQ1RJVkUpO1xuICAgICAgICAkbGluay5hZGRDbGFzcyhDbGFzc05hbWUkOC5BQ1RJVkUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2V0IHRyaWdnZXJlZCBsaW5rIGFzIGFjdGl2ZVxuICAgICAgICAkbGluay5hZGRDbGFzcyhDbGFzc05hbWUkOC5BQ1RJVkUpOyAvLyBTZXQgdHJpZ2dlcmVkIGxpbmtzIHBhcmVudHMgYXMgYWN0aXZlXG4gICAgICAgIC8vIFdpdGggYm90aCA8dWw+IGFuZCA8bmF2PiBtYXJrdXAgYSBwYXJlbnQgaXMgdGhlIHByZXZpb3VzIHNpYmxpbmcgb2YgYW55IG5hdiBhbmNlc3RvclxuXG4gICAgICAgICRsaW5rLnBhcmVudHMoU2VsZWN0b3IkOC5OQVZfTElTVF9HUk9VUCkucHJldihTZWxlY3RvciQ4Lk5BVl9MSU5LUyArIFwiLCBcIiArIFNlbGVjdG9yJDguTElTVF9JVEVNUykuYWRkQ2xhc3MoQ2xhc3NOYW1lJDguQUNUSVZFKTsgLy8gSGFuZGxlIHNwZWNpYWwgY2FzZSB3aGVuIC5uYXYtbGluayBpcyBpbnNpZGUgLm5hdi1pdGVtXG5cbiAgICAgICAgJGxpbmsucGFyZW50cyhTZWxlY3RvciQ4Lk5BVl9MSVNUX0dST1VQKS5wcmV2KFNlbGVjdG9yJDguTkFWX0lURU1TKS5jaGlsZHJlbihTZWxlY3RvciQ4Lk5BVl9MSU5LUykuYWRkQ2xhc3MoQ2xhc3NOYW1lJDguQUNUSVZFKTtcbiAgICAgIH1cblxuICAgICAgJCh0aGlzLl9zY3JvbGxFbGVtZW50KS50cmlnZ2VyKEV2ZW50JDguQUNUSVZBVEUsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogdGFyZ2V0XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9jbGVhciA9IGZ1bmN0aW9uIF9jbGVhcigpIHtcbiAgICAgIFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0aGlzLl9zZWxlY3RvcikpLmZpbHRlcihmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5jbGFzc0xpc3QuY29udGFpbnMoQ2xhc3NOYW1lJDguQUNUSVZFKTtcbiAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUuY2xhc3NMaXN0LnJlbW92ZShDbGFzc05hbWUkOC5BQ1RJVkUpO1xuICAgICAgfSk7XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBTY3JvbGxTcHkuX2pRdWVyeUludGVyZmFjZSA9IGZ1bmN0aW9uIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAkKHRoaXMpLmRhdGEoREFUQV9LRVkkOCk7XG5cbiAgICAgICAgdmFyIF9jb25maWcgPSB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiBjb25maWc7XG5cbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IG5ldyBTY3JvbGxTcHkodGhpcywgX2NvbmZpZyk7XG4gICAgICAgICAgJCh0aGlzKS5kYXRhKERBVEFfS0VZJDgsIGRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gbWV0aG9kIG5hbWVkIFxcXCJcIiArIGNvbmZpZyArIFwiXFxcIlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9jcmVhdGVDbGFzcyhTY3JvbGxTcHksIG51bGwsIFt7XG4gICAgICBrZXk6IFwiVkVSU0lPTlwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBWRVJTSU9OJDg7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkRlZmF1bHRcIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gRGVmYXVsdCQ2O1xuICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBTY3JvbGxTcHk7XG4gIH0oKTtcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBEYXRhIEFwaSBpbXBsZW1lbnRhdGlvblxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cblxuICAkKHdpbmRvdykub24oRXZlbnQkOC5MT0FEX0RBVEFfQVBJLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNjcm9sbFNweXMgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IkOC5EQVRBX1NQWSkpO1xuICAgIHZhciBzY3JvbGxTcHlzTGVuZ3RoID0gc2Nyb2xsU3B5cy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpID0gc2Nyb2xsU3B5c0xlbmd0aDsgaS0tOykge1xuICAgICAgdmFyICRzcHkgPSAkKHNjcm9sbFNweXNbaV0pO1xuXG4gICAgICBTY3JvbGxTcHkuX2pRdWVyeUludGVyZmFjZS5jYWxsKCRzcHksICRzcHkuZGF0YSgpKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIGpRdWVyeVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgJC5mbltOQU1FJDhdID0gU2Nyb2xsU3B5Ll9qUXVlcnlJbnRlcmZhY2U7XG4gICQuZm5bTkFNRSQ4XS5Db25zdHJ1Y3RvciA9IFNjcm9sbFNweTtcblxuICAkLmZuW05BTUUkOF0ubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAkLmZuW05BTUUkOF0gPSBKUVVFUllfTk9fQ09ORkxJQ1QkODtcbiAgICByZXR1cm4gU2Nyb2xsU3B5Ll9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBDb25zdGFudHNcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBOQU1FJDkgPSAndGFiJztcbiAgdmFyIFZFUlNJT04kOSA9ICc0LjMuMSc7XG4gIHZhciBEQVRBX0tFWSQ5ID0gJ2JzLnRhYic7XG4gIHZhciBFVkVOVF9LRVkkOSA9IFwiLlwiICsgREFUQV9LRVkkOTtcbiAgdmFyIERBVEFfQVBJX0tFWSQ3ID0gJy5kYXRhLWFwaSc7XG4gIHZhciBKUVVFUllfTk9fQ09ORkxJQ1QkOSA9ICQuZm5bTkFNRSQ5XTtcbiAgdmFyIEV2ZW50JDkgPSB7XG4gICAgSElERTogXCJoaWRlXCIgKyBFVkVOVF9LRVkkOSxcbiAgICBISURERU46IFwiaGlkZGVuXCIgKyBFVkVOVF9LRVkkOSxcbiAgICBTSE9XOiBcInNob3dcIiArIEVWRU5UX0tFWSQ5LFxuICAgIFNIT1dOOiBcInNob3duXCIgKyBFVkVOVF9LRVkkOSxcbiAgICBDTElDS19EQVRBX0FQSTogXCJjbGlja1wiICsgRVZFTlRfS0VZJDkgKyBEQVRBX0FQSV9LRVkkN1xuICB9O1xuICB2YXIgQ2xhc3NOYW1lJDkgPSB7XG4gICAgRFJPUERPV05fTUVOVTogJ2Ryb3Bkb3duLW1lbnUnLFxuICAgIEFDVElWRTogJ2FjdGl2ZScsXG4gICAgRElTQUJMRUQ6ICdkaXNhYmxlZCcsXG4gICAgRkFERTogJ2ZhZGUnLFxuICAgIFNIT1c6ICdzaG93J1xuICB9O1xuICB2YXIgU2VsZWN0b3IkOSA9IHtcbiAgICBEUk9QRE9XTjogJy5kcm9wZG93bicsXG4gICAgTkFWX0xJU1RfR1JPVVA6ICcubmF2LCAubGlzdC1ncm91cCcsXG4gICAgQUNUSVZFOiAnLmFjdGl2ZScsXG4gICAgQUNUSVZFX1VMOiAnPiBsaSA+IC5hY3RpdmUnLFxuICAgIERBVEFfVE9HR0xFOiAnW2RhdGEtdG9nZ2xlPVwidGFiXCJdLCBbZGF0YS10b2dnbGU9XCJwaWxsXCJdLCBbZGF0YS10b2dnbGU9XCJsaXN0XCJdJyxcbiAgICBEUk9QRE9XTl9UT0dHTEU6ICcuZHJvcGRvd24tdG9nZ2xlJyxcbiAgICBEUk9QRE9XTl9BQ1RJVkVfQ0hJTEQ6ICc+IC5kcm9wZG93bi1tZW51IC5hY3RpdmUnXG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG4gIH07XG5cbiAgdmFyIFRhYiA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFRhYihlbGVtZW50KSB7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICB9IC8vIEdldHRlcnNcblxuXG4gICAgdmFyIF9wcm90byA9IFRhYi5wcm90b3R5cGU7XG5cbiAgICAvLyBQdWJsaWNcbiAgICBfcHJvdG8uc2hvdyA9IGZ1bmN0aW9uIHNob3coKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5fZWxlbWVudC5wYXJlbnROb2RlICYmIHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgJCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUkOS5BQ1RJVkUpIHx8ICQodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1lJDkuRElTQUJMRUQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHRhcmdldDtcbiAgICAgIHZhciBwcmV2aW91cztcbiAgICAgIHZhciBsaXN0RWxlbWVudCA9ICQodGhpcy5fZWxlbWVudCkuY2xvc2VzdChTZWxlY3RvciQ5Lk5BVl9MSVNUX0dST1VQKVswXTtcbiAgICAgIHZhciBzZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcblxuICAgICAgaWYgKGxpc3RFbGVtZW50KSB7XG4gICAgICAgIHZhciBpdGVtU2VsZWN0b3IgPSBsaXN0RWxlbWVudC5ub2RlTmFtZSA9PT0gJ1VMJyB8fCBsaXN0RWxlbWVudC5ub2RlTmFtZSA9PT0gJ09MJyA/IFNlbGVjdG9yJDkuQUNUSVZFX1VMIDogU2VsZWN0b3IkOS5BQ1RJVkU7XG4gICAgICAgIHByZXZpb3VzID0gJC5tYWtlQXJyYXkoJChsaXN0RWxlbWVudCkuZmluZChpdGVtU2VsZWN0b3IpKTtcbiAgICAgICAgcHJldmlvdXMgPSBwcmV2aW91c1twcmV2aW91cy5sZW5ndGggLSAxXTtcbiAgICAgIH1cblxuICAgICAgdmFyIGhpZGVFdmVudCA9ICQuRXZlbnQoRXZlbnQkOS5ISURFLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRoaXMuX2VsZW1lbnRcbiAgICAgIH0pO1xuICAgICAgdmFyIHNob3dFdmVudCA9ICQuRXZlbnQoRXZlbnQkOS5TSE9XLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHByZXZpb3VzXG4gICAgICB9KTtcblxuICAgICAgaWYgKHByZXZpb3VzKSB7XG4gICAgICAgICQocHJldmlvdXMpLnRyaWdnZXIoaGlkZUV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgJCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKHNob3dFdmVudCk7XG5cbiAgICAgIGlmIChzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgfHwgaGlkZUV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgIHRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9hY3RpdmF0ZSh0aGlzLl9lbGVtZW50LCBsaXN0RWxlbWVudCk7XG5cbiAgICAgIHZhciBjb21wbGV0ZSA9IGZ1bmN0aW9uIGNvbXBsZXRlKCkge1xuICAgICAgICB2YXIgaGlkZGVuRXZlbnQgPSAkLkV2ZW50KEV2ZW50JDkuSElEREVOLCB7XG4gICAgICAgICAgcmVsYXRlZFRhcmdldDogX3RoaXMuX2VsZW1lbnRcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBzaG93bkV2ZW50ID0gJC5FdmVudChFdmVudCQ5LlNIT1dOLCB7XG4gICAgICAgICAgcmVsYXRlZFRhcmdldDogcHJldmlvdXNcbiAgICAgICAgfSk7XG4gICAgICAgICQocHJldmlvdXMpLnRyaWdnZXIoaGlkZGVuRXZlbnQpO1xuICAgICAgICAkKF90aGlzLl9lbGVtZW50KS50cmlnZ2VyKHNob3duRXZlbnQpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICB0aGlzLl9hY3RpdmF0ZSh0YXJnZXQsIHRhcmdldC5wYXJlbnROb2RlLCBjb21wbGV0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uZGlzcG9zZSA9IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgICAkLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwgREFUQV9LRVkkOSk7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgICB9IC8vIFByaXZhdGVcbiAgICA7XG5cbiAgICBfcHJvdG8uX2FjdGl2YXRlID0gZnVuY3Rpb24gX2FjdGl2YXRlKGVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgYWN0aXZlRWxlbWVudHMgPSBjb250YWluZXIgJiYgKGNvbnRhaW5lci5ub2RlTmFtZSA9PT0gJ1VMJyB8fCBjb250YWluZXIubm9kZU5hbWUgPT09ICdPTCcpID8gJChjb250YWluZXIpLmZpbmQoU2VsZWN0b3IkOS5BQ1RJVkVfVUwpIDogJChjb250YWluZXIpLmNoaWxkcmVuKFNlbGVjdG9yJDkuQUNUSVZFKTtcbiAgICAgIHZhciBhY3RpdmUgPSBhY3RpdmVFbGVtZW50c1swXTtcbiAgICAgIHZhciBpc1RyYW5zaXRpb25pbmcgPSBjYWxsYmFjayAmJiBhY3RpdmUgJiYgJChhY3RpdmUpLmhhc0NsYXNzKENsYXNzTmFtZSQ5LkZBREUpO1xuXG4gICAgICB2YXIgY29tcGxldGUgPSBmdW5jdGlvbiBjb21wbGV0ZSgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzMi5fdHJhbnNpdGlvbkNvbXBsZXRlKGVsZW1lbnQsIGFjdGl2ZSwgY2FsbGJhY2spO1xuICAgICAgfTtcblxuICAgICAgaWYgKGFjdGl2ZSAmJiBpc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQoYWN0aXZlKTtcbiAgICAgICAgJChhY3RpdmUpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQ5LlNIT1cpLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCBjb21wbGV0ZSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5fdHJhbnNpdGlvbkNvbXBsZXRlID0gZnVuY3Rpb24gX3RyYW5zaXRpb25Db21wbGV0ZShlbGVtZW50LCBhY3RpdmUsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgICQoYWN0aXZlKS5yZW1vdmVDbGFzcyhDbGFzc05hbWUkOS5BQ1RJVkUpO1xuICAgICAgICB2YXIgZHJvcGRvd25DaGlsZCA9ICQoYWN0aXZlLnBhcmVudE5vZGUpLmZpbmQoU2VsZWN0b3IkOS5EUk9QRE9XTl9BQ1RJVkVfQ0hJTEQpWzBdO1xuXG4gICAgICAgIGlmIChkcm9wZG93bkNoaWxkKSB7XG4gICAgICAgICAgJChkcm9wZG93bkNoaWxkKS5yZW1vdmVDbGFzcyhDbGFzc05hbWUkOS5BQ1RJVkUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFjdGl2ZS5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSA9PT0gJ3RhYicpIHtcbiAgICAgICAgICBhY3RpdmUuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICQoZWxlbWVudCkuYWRkQ2xhc3MoQ2xhc3NOYW1lJDkuQUNUSVZFKTtcblxuICAgICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdyb2xlJykgPT09ICd0YWInKSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIFV0aWwucmVmbG93KGVsZW1lbnQpO1xuXG4gICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ2xhc3NOYW1lJDkuRkFERSkpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZSQ5LlNIT1cpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxlbWVudC5wYXJlbnROb2RlICYmICQoZWxlbWVudC5wYXJlbnROb2RlKS5oYXNDbGFzcyhDbGFzc05hbWUkOS5EUk9QRE9XTl9NRU5VKSkge1xuICAgICAgICB2YXIgZHJvcGRvd25FbGVtZW50ID0gJChlbGVtZW50KS5jbG9zZXN0KFNlbGVjdG9yJDkuRFJPUERPV04pWzBdO1xuXG4gICAgICAgIGlmIChkcm9wZG93bkVsZW1lbnQpIHtcbiAgICAgICAgICB2YXIgZHJvcGRvd25Ub2dnbGVMaXN0ID0gW10uc2xpY2UuY2FsbChkcm9wZG93bkVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3RvciQ5LkRST1BET1dOX1RPR0dMRSkpO1xuICAgICAgICAgICQoZHJvcGRvd25Ub2dnbGVMaXN0KS5hZGRDbGFzcyhDbGFzc05hbWUkOS5BQ1RJVkUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBUYWIuX2pRdWVyeUludGVyZmFjZSA9IGZ1bmN0aW9uIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTtcbiAgICAgICAgdmFyIGRhdGEgPSAkdGhpcy5kYXRhKERBVEFfS0VZJDkpO1xuXG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgIGRhdGEgPSBuZXcgVGFiKHRoaXMpO1xuICAgICAgICAgICR0aGlzLmRhdGEoREFUQV9LRVkkOSwgZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyBtZXRob2QgbmFtZWQgXFxcIlwiICsgY29uZmlnICsgXCJcXFwiXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRhdGFbY29uZmlnXSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX2NyZWF0ZUNsYXNzKFRhYiwgbnVsbCwgW3tcbiAgICAgIGtleTogXCJWRVJTSU9OXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIFZFUlNJT04kOTtcbiAgICAgIH1cbiAgICB9XSk7XG5cbiAgICByZXR1cm4gVGFiO1xuICB9KCk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJChkb2N1bWVudCkub24oRXZlbnQkOS5DTElDS19EQVRBX0FQSSwgU2VsZWN0b3IkOS5EQVRBX1RPR0dMRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIFRhYi5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoJCh0aGlzKSwgJ3Nob3cnKTtcbiAgfSk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogalF1ZXJ5XG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICAkLmZuW05BTUUkOV0gPSBUYWIuX2pRdWVyeUludGVyZmFjZTtcbiAgJC5mbltOQU1FJDldLkNvbnN0cnVjdG9yID0gVGFiO1xuXG4gICQuZm5bTkFNRSQ5XS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICQuZm5bTkFNRSQ5XSA9IEpRVUVSWV9OT19DT05GTElDVCQ5O1xuICAgIHJldHVybiBUYWIuX2pRdWVyeUludGVyZmFjZTtcbiAgfTtcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIENvbnN0YW50c1xuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgdmFyIE5BTUUkYSA9ICd0b2FzdCc7XG4gIHZhciBWRVJTSU9OJGEgPSAnNC4zLjEnO1xuICB2YXIgREFUQV9LRVkkYSA9ICdicy50b2FzdCc7XG4gIHZhciBFVkVOVF9LRVkkYSA9IFwiLlwiICsgREFUQV9LRVkkYTtcbiAgdmFyIEpRVUVSWV9OT19DT05GTElDVCRhID0gJC5mbltOQU1FJGFdO1xuICB2YXIgRXZlbnQkYSA9IHtcbiAgICBDTElDS19ESVNNSVNTOiBcImNsaWNrLmRpc21pc3NcIiArIEVWRU5UX0tFWSRhLFxuICAgIEhJREU6IFwiaGlkZVwiICsgRVZFTlRfS0VZJGEsXG4gICAgSElEREVOOiBcImhpZGRlblwiICsgRVZFTlRfS0VZJGEsXG4gICAgU0hPVzogXCJzaG93XCIgKyBFVkVOVF9LRVkkYSxcbiAgICBTSE9XTjogXCJzaG93blwiICsgRVZFTlRfS0VZJGFcbiAgfTtcbiAgdmFyIENsYXNzTmFtZSRhID0ge1xuICAgIEZBREU6ICdmYWRlJyxcbiAgICBISURFOiAnaGlkZScsXG4gICAgU0hPVzogJ3Nob3cnLFxuICAgIFNIT1dJTkc6ICdzaG93aW5nJ1xuICB9O1xuICB2YXIgRGVmYXVsdFR5cGUkNyA9IHtcbiAgICBhbmltYXRpb246ICdib29sZWFuJyxcbiAgICBhdXRvaGlkZTogJ2Jvb2xlYW4nLFxuICAgIGRlbGF5OiAnbnVtYmVyJ1xuICB9O1xuICB2YXIgRGVmYXVsdCQ3ID0ge1xuICAgIGFuaW1hdGlvbjogdHJ1ZSxcbiAgICBhdXRvaGlkZTogdHJ1ZSxcbiAgICBkZWxheTogNTAwXG4gIH07XG4gIHZhciBTZWxlY3RvciRhID0ge1xuICAgIERBVEFfRElTTUlTUzogJ1tkYXRhLWRpc21pc3M9XCJ0b2FzdFwiXSdcbiAgICAvKipcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKiBDbGFzcyBEZWZpbml0aW9uXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICovXG5cbiAgfTtcblxuICB2YXIgVG9hc3QgPVxuICAvKiNfX1BVUkVfXyovXG4gIGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUb2FzdChlbGVtZW50LCBjb25maWcpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgICB0aGlzLl90aW1lb3V0ID0gbnVsbDtcblxuICAgICAgdGhpcy5fc2V0TGlzdGVuZXJzKCk7XG4gICAgfSAvLyBHZXR0ZXJzXG5cblxuICAgIHZhciBfcHJvdG8gPSBUb2FzdC5wcm90b3R5cGU7XG5cbiAgICAvLyBQdWJsaWNcbiAgICBfcHJvdG8uc2hvdyA9IGZ1bmN0aW9uIHNob3coKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoRXZlbnQkYS5TSE9XKTtcblxuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5hbmltYXRpb24pIHtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZSRhLkZBREUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29tcGxldGUgPSBmdW5jdGlvbiBjb21wbGV0ZSgpIHtcbiAgICAgICAgX3RoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDbGFzc05hbWUkYS5TSE9XSU5HKTtcblxuICAgICAgICBfdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZSRhLlNIT1cpO1xuXG4gICAgICAgICQoX3RoaXMuX2VsZW1lbnQpLnRyaWdnZXIoRXZlbnQkYS5TSE9XTik7XG5cbiAgICAgICAgaWYgKF90aGlzLl9jb25maWcuYXV0b2hpZGUpIHtcbiAgICAgICAgICBfdGhpcy5oaWRlKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDbGFzc05hbWUkYS5ISURFKTtcblxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZSRhLlNIT1dJTkcpO1xuXG4gICAgICBpZiAodGhpcy5fY29uZmlnLmFuaW1hdGlvbikge1xuICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgY29tcGxldGUpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uaGlkZSA9IGZ1bmN0aW9uIGhpZGUod2l0aG91dFRpbWVvdXQpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAoIXRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENsYXNzTmFtZSRhLlNIT1cpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgJCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKEV2ZW50JGEuSElERSk7XG5cbiAgICAgIGlmICh3aXRob3V0VGltZW91dCkge1xuICAgICAgICB0aGlzLl9jbG9zZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMi5fY2xvc2UoKTtcbiAgICAgICAgfSwgdGhpcy5fY29uZmlnLmRlbGF5KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuICAgICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGlmICh0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDbGFzc05hbWUkYS5TSE9XKSkge1xuICAgICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ2xhc3NOYW1lJGEuU0hPVyk7XG4gICAgICB9XG5cbiAgICAgICQodGhpcy5fZWxlbWVudCkub2ZmKEV2ZW50JGEuQ0xJQ0tfRElTTUlTUyk7XG4gICAgICAkLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwgREFUQV9LRVkkYSk7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IG51bGw7XG4gICAgfSAvLyBQcml2YXRlXG4gICAgO1xuXG4gICAgX3Byb3RvLl9nZXRDb25maWcgPSBmdW5jdGlvbiBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgICAgY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgRGVmYXVsdCQ3LCAkKHRoaXMuX2VsZW1lbnQpLmRhdGEoKSwgdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiYgY29uZmlnID8gY29uZmlnIDoge30pO1xuICAgICAgVXRpbC50eXBlQ2hlY2tDb25maWcoTkFNRSRhLCBjb25maWcsIHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFR5cGUpO1xuICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9zZXRMaXN0ZW5lcnMgPSBmdW5jdGlvbiBfc2V0TGlzdGVuZXJzKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgICQodGhpcy5fZWxlbWVudCkub24oRXZlbnQkYS5DTElDS19ESVNNSVNTLCBTZWxlY3RvciRhLkRBVEFfRElTTUlTUywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMzLmhpZGUodHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9jbG9zZSA9IGZ1bmN0aW9uIF9jbG9zZSgpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICB2YXIgY29tcGxldGUgPSBmdW5jdGlvbiBjb21wbGV0ZSgpIHtcbiAgICAgICAgX3RoaXM0Ll9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lJGEuSElERSk7XG5cbiAgICAgICAgJChfdGhpczQuX2VsZW1lbnQpLnRyaWdnZXIoRXZlbnQkYS5ISURERU4pO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENsYXNzTmFtZSRhLlNIT1cpO1xuXG4gICAgICBpZiAodGhpcy5fY29uZmlnLmFuaW1hdGlvbikge1xuICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgY29tcGxldGUpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0gLy8gU3RhdGljXG4gICAgO1xuXG4gICAgVG9hc3QuX2pRdWVyeUludGVyZmFjZSA9IGZ1bmN0aW9uIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyICRlbGVtZW50ID0gJCh0aGlzKTtcbiAgICAgICAgdmFyIGRhdGEgPSAkZWxlbWVudC5kYXRhKERBVEFfS0VZJGEpO1xuXG4gICAgICAgIHZhciBfY29uZmlnID0gdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiYgY29uZmlnO1xuXG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgIGRhdGEgPSBuZXcgVG9hc3QodGhpcywgX2NvbmZpZyk7XG4gICAgICAgICAgJGVsZW1lbnQuZGF0YShEQVRBX0tFWSRhLCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIG1ldGhvZCBuYW1lZCBcXFwiXCIgKyBjb25maWcgKyBcIlxcXCJcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YVtjb25maWddKHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX2NyZWF0ZUNsYXNzKFRvYXN0LCBudWxsLCBbe1xuICAgICAga2V5OiBcIlZFUlNJT05cIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gVkVSU0lPTiRhO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJEZWZhdWx0VHlwZVwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBEZWZhdWx0VHlwZSQ3O1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJEZWZhdWx0XCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIERlZmF1bHQkNztcbiAgICAgIH1cbiAgICB9XSk7XG5cbiAgICByZXR1cm4gVG9hc3Q7XG4gIH0oKTtcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBqUXVlcnlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJC5mbltOQU1FJGFdID0gVG9hc3QuX2pRdWVyeUludGVyZmFjZTtcbiAgJC5mbltOQU1FJGFdLkNvbnN0cnVjdG9yID0gVG9hc3Q7XG5cbiAgJC5mbltOQU1FJGFdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbltOQU1FJGFdID0gSlFVRVJZX05PX0NPTkZMSUNUJGE7XG4gICAgcmV0dXJuIFRvYXN0Ll9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCAodjQuMy4xKTogaW5kZXguanNcbiAgICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodHlwZW9mICQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb290c3RyYXBcXCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgalF1ZXJ5LiBqUXVlcnkgbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgQm9vdHN0cmFwXFwncyBKYXZhU2NyaXB0LicpO1xuICAgIH1cblxuICAgIHZhciB2ZXJzaW9uID0gJC5mbi5qcXVlcnkuc3BsaXQoJyAnKVswXS5zcGxpdCgnLicpO1xuICAgIHZhciBtaW5NYWpvciA9IDE7XG4gICAgdmFyIGx0TWFqb3IgPSAyO1xuICAgIHZhciBtaW5NaW5vciA9IDk7XG4gICAgdmFyIG1pblBhdGNoID0gMTtcbiAgICB2YXIgbWF4TWFqb3IgPSA0O1xuXG4gICAgaWYgKHZlcnNpb25bMF0gPCBsdE1ham9yICYmIHZlcnNpb25bMV0gPCBtaW5NaW5vciB8fCB2ZXJzaW9uWzBdID09PSBtaW5NYWpvciAmJiB2ZXJzaW9uWzFdID09PSBtaW5NaW5vciAmJiB2ZXJzaW9uWzJdIDwgbWluUGF0Y2ggfHwgdmVyc2lvblswXSA+PSBtYXhNYWpvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdCb290c3RyYXBcXCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgYXQgbGVhc3QgalF1ZXJ5IHYxLjkuMSBidXQgbGVzcyB0aGFuIHY0LjAuMCcpO1xuICAgIH1cbiAgfSkoKTtcblxuICBleHBvcnRzLlV0aWwgPSBVdGlsO1xuICBleHBvcnRzLkFsZXJ0ID0gQWxlcnQ7XG4gIGV4cG9ydHMuQnV0dG9uID0gQnV0dG9uO1xuICBleHBvcnRzLkNhcm91c2VsID0gQ2Fyb3VzZWw7XG4gIGV4cG9ydHMuQ29sbGFwc2UgPSBDb2xsYXBzZTtcbiAgZXhwb3J0cy5Ecm9wZG93biA9IERyb3Bkb3duO1xuICBleHBvcnRzLk1vZGFsID0gTW9kYWw7XG4gIGV4cG9ydHMuUG9wb3ZlciA9IFBvcG92ZXI7XG4gIGV4cG9ydHMuU2Nyb2xsc3B5ID0gU2Nyb2xsU3B5O1xuICBleHBvcnRzLlRhYiA9IFRhYjtcbiAgZXhwb3J0cy5Ub2FzdCA9IFRvYXN0O1xuICBleHBvcnRzLlRvb2x0aXAgPSBUb29sdGlwO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJvb3RzdHJhcC5qcy5tYXBcbiIsInZhciBtYXRjaGVzID0gcmVxdWlyZSgnbWF0Y2hlcy1zZWxlY3RvcicpXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChlbGVtZW50LCBzZWxlY3RvciwgY2hlY2tZb1NlbGYpIHtcclxuICB2YXIgcGFyZW50ID0gY2hlY2tZb1NlbGYgPyBlbGVtZW50IDogZWxlbWVudC5wYXJlbnROb2RlXHJcblxyXG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50ICE9PSBkb2N1bWVudCkge1xyXG4gICAgaWYgKG1hdGNoZXMocGFyZW50LCBzZWxlY3RvcikpIHJldHVybiBwYXJlbnQ7XHJcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZVxyXG4gIH1cclxufVxyXG4iLCJcclxuLyoqXHJcbiAqIEVsZW1lbnQgcHJvdG90eXBlLlxyXG4gKi9cclxuXHJcbnZhciBwcm90byA9IEVsZW1lbnQucHJvdG90eXBlO1xyXG5cclxuLyoqXHJcbiAqIFZlbmRvciBmdW5jdGlvbi5cclxuICovXHJcblxyXG52YXIgdmVuZG9yID0gcHJvdG8ubWF0Y2hlc1NlbGVjdG9yXHJcbiAgfHwgcHJvdG8ud2Via2l0TWF0Y2hlc1NlbGVjdG9yXHJcbiAgfHwgcHJvdG8ubW96TWF0Y2hlc1NlbGVjdG9yXHJcbiAgfHwgcHJvdG8ubXNNYXRjaGVzU2VsZWN0b3JcclxuICB8fCBwcm90by5vTWF0Y2hlc1NlbGVjdG9yO1xyXG5cclxuLyoqXHJcbiAqIEV4cG9zZSBgbWF0Y2goKWAuXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBtYXRjaDtcclxuXHJcbi8qKlxyXG4gKiBNYXRjaCBgZWxgIHRvIGBzZWxlY3RvcmAuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcclxuICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yXHJcbiAqIEByZXR1cm4ge0Jvb2xlYW59XHJcbiAqIEBhcGkgcHVibGljXHJcbiAqL1xyXG5cclxuZnVuY3Rpb24gbWF0Y2goZWwsIHNlbGVjdG9yKSB7XHJcbiAgaWYgKHZlbmRvcikgcmV0dXJuIHZlbmRvci5jYWxsKGVsLCBzZWxlY3Rvcik7XHJcbiAgdmFyIG5vZGVzID0gZWwucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcclxuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgKytpKSB7XHJcbiAgICBpZiAobm9kZXNbaV0gPT0gZWwpIHJldHVybiB0cnVlO1xyXG4gIH1cclxuICByZXR1cm4gZmFsc2U7XHJcbn0iLCJ2YXIgYmluZCA9IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyID8gJ2FkZEV2ZW50TGlzdGVuZXInIDogJ2F0dGFjaEV2ZW50JyxcbiAgICB1bmJpbmQgPSB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciA/ICdyZW1vdmVFdmVudExpc3RlbmVyJyA6ICdkZXRhY2hFdmVudCcsXG4gICAgcHJlZml4ID0gYmluZCAhPT0gJ2FkZEV2ZW50TGlzdGVuZXInID8gJ29uJyA6ICcnO1xuXG4vKipcbiAqIEJpbmQgYGVsYCBldmVudCBgdHlwZWAgdG8gYGZuYC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gY2FwdHVyZVxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMuYmluZCA9IGZ1bmN0aW9uKGVsLCB0eXBlLCBmbiwgY2FwdHVyZSl7XG4gIGVsW2JpbmRdKHByZWZpeCArIHR5cGUsIGZuLCBjYXB0dXJlIHx8IGZhbHNlKTtcbiAgcmV0dXJuIGZuO1xufTtcblxuLyoqXG4gKiBVbmJpbmQgYGVsYCBldmVudCBgdHlwZWAncyBjYWxsYmFjayBgZm5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtCb29sZWFufSBjYXB0dXJlXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy51bmJpbmQgPSBmdW5jdGlvbihlbCwgdHlwZSwgZm4sIGNhcHR1cmUpe1xuICBlbFt1bmJpbmRdKHByZWZpeCArIHR5cGUsIGZuLCBjYXB0dXJlIHx8IGZhbHNlKTtcbiAgcmV0dXJuIGZuO1xufTsiLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiKShmYWxzZSk7XG4vLyBNb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi8qIVxcbiAqIEJvb3RzdHJhcCB2NC4zLjEgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXFxuICogQ29weXJpZ2h0IDIwMTEtMjAxOSBUaGUgQm9vdHN0cmFwIEF1dGhvcnNcXG4gKiBDb3B5cmlnaHQgMjAxMS0yMDE5IFR3aXR0ZXIsIEluYy5cXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxcbiAqL1xcbjpyb290IHtcXG4gIC0tYmx1ZTogIzAwN2JmZjtcXG4gIC0taW5kaWdvOiAjNjYxMGYyO1xcbiAgLS1wdXJwbGU6ICM2ZjQyYzE7XFxuICAtLXBpbms6ICNlODNlOGM7XFxuICAtLXJlZDogI2RjMzU0NTtcXG4gIC0tb3JhbmdlOiAjZmQ3ZTE0O1xcbiAgLS15ZWxsb3c6ICNmZmMxMDc7XFxuICAtLWdyZWVuOiAjMjhhNzQ1O1xcbiAgLS10ZWFsOiAjMjBjOTk3O1xcbiAgLS1jeWFuOiAjMTdhMmI4O1xcbiAgLS13aGl0ZTogI2ZmZjtcXG4gIC0tZ3JheTogIzZjNzU3ZDtcXG4gIC0tZ3JheS1kYXJrOiAjMzQzYTQwO1xcbiAgLS1wcmltYXJ5OiAjMDA3YmZmO1xcbiAgLS1zZWNvbmRhcnk6ICM2Yzc1N2Q7XFxuICAtLXN1Y2Nlc3M6ICMyOGE3NDU7XFxuICAtLWluZm86ICMxN2EyYjg7XFxuICAtLXdhcm5pbmc6ICNmZmMxMDc7XFxuICAtLWRhbmdlcjogI2RjMzU0NTtcXG4gIC0tbGlnaHQ6ICNmOGY5ZmE7XFxuICAtLWRhcms6ICMzNDNhNDA7XFxuICAtLWJyZWFrcG9pbnQteHM6IDA7XFxuICAtLWJyZWFrcG9pbnQtc206IDU3NnB4O1xcbiAgLS1icmVha3BvaW50LW1kOiA3NjhweDtcXG4gIC0tYnJlYWtwb2ludC1sZzogOTkycHg7XFxuICAtLWJyZWFrcG9pbnQteGw6IDEyMDBweDtcXG4gIC0tZm9udC1mYW1pbHktc2Fucy1zZXJpZjogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcXFwiU2Vnb2UgVUlcXFwiLCBSb2JvdG8sIFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsIEFyaWFsLCBcXFwiTm90byBTYW5zXFxcIiwgc2Fucy1zZXJpZiwgXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIiwgXFxcIlNlZ29lIFVJIEVtb2ppXFxcIiwgXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCIsIFxcXCJOb3RvIENvbG9yIEVtb2ppXFxcIjtcXG4gIC0tZm9udC1mYW1pbHktbW9ub3NwYWNlOiBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFxcXCJMaWJlcmF0aW9uIE1vbm9cXFwiLCBcXFwiQ291cmllciBOZXdcXFwiLCBtb25vc3BhY2U7XFxufVxcblxcbiosXFxuKjo6YmVmb3JlLFxcbio6OmFmdGVyIHtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcblxcbmh0bWwge1xcbiAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7XFxuICBsaW5lLWhlaWdodDogMS4xNTtcXG4gIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcXG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTtcXG59XFxuXFxuYXJ0aWNsZSwgYXNpZGUsIGZpZ2NhcHRpb24sIGZpZ3VyZSwgZm9vdGVyLCBoZWFkZXIsIGhncm91cCwgbWFpbiwgbmF2LCBzZWN0aW9uIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG5ib2R5IHtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFxcXCJTZWdvZSBVSVxcXCIsIFJvYm90bywgXFxcIkhlbHZldGljYSBOZXVlXFxcIiwgQXJpYWwsIFxcXCJOb3RvIFNhbnNcXFwiLCBzYW5zLXNlcmlmLCBcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLCBcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLCBcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIiwgXFxcIk5vdG8gQ29sb3IgRW1vamlcXFwiO1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbn1cXG5cXG5bdGFiaW5kZXg9XFxcIi0xXFxcIl06Zm9jdXMge1xcbiAgb3V0bGluZTogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG5ociB7XFxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcXG4gIGhlaWdodDogMDtcXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xcbn1cXG5cXG5oMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHtcXG4gIG1hcmdpbi10b3A6IDA7XFxuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XFxufVxcblxcbnAge1xcbiAgbWFyZ2luLXRvcDogMDtcXG4gIG1hcmdpbi1ib3R0b206IDFyZW07XFxufVxcblxcbmFiYnJbdGl0bGVdLFxcbmFiYnJbZGF0YS1vcmlnaW5hbC10aXRsZV0ge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICAtd2Via2l0LXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDtcXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDtcXG4gIGN1cnNvcjogaGVscDtcXG4gIGJvcmRlci1ib3R0b206IDA7XFxuICAtd2Via2l0LXRleHQtZGVjb3JhdGlvbi1za2lwLWluazogbm9uZTtcXG4gIHRleHQtZGVjb3JhdGlvbi1za2lwLWluazogbm9uZTtcXG59XFxuXFxuYWRkcmVzcyB7XFxuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxufVxcblxcbm9sLFxcbnVsLFxcbmRsIHtcXG4gIG1hcmdpbi10b3A6IDA7XFxuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xcbn1cXG5cXG5vbCBvbCxcXG51bCB1bCxcXG5vbCB1bCxcXG51bCBvbCB7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbn1cXG5cXG5kdCB7XFxuICBmb250LXdlaWdodDogNzAwO1xcbn1cXG5cXG5kZCB7XFxuICBtYXJnaW4tYm90dG9tOiAuNXJlbTtcXG4gIG1hcmdpbi1sZWZ0OiAwO1xcbn1cXG5cXG5ibG9ja3F1b3RlIHtcXG4gIG1hcmdpbjogMCAwIDFyZW07XFxufVxcblxcbmIsXFxuc3Ryb25nIHtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XFxufVxcblxcbnNtYWxsIHtcXG4gIGZvbnQtc2l6ZTogODAlO1xcbn1cXG5cXG5zdWIsXFxuc3VwIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGZvbnQtc2l6ZTogNzUlO1xcbiAgbGluZS1oZWlnaHQ6IDA7XFxuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XFxufVxcblxcbnN1YiB7XFxuICBib3R0b206IC0uMjVlbTtcXG59XFxuXFxuc3VwIHtcXG4gIHRvcDogLS41ZW07XFxufVxcblxcbmEge1xcbiAgY29sb3I6ICMwMDdiZmY7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuYTpob3ZlciB7XFxuICBjb2xvcjogIzAwNTZiMztcXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbn1cXG5cXG5hOm5vdChbaHJlZl0pOm5vdChbdGFiaW5kZXhdKSB7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuXFxuYTpub3QoW2hyZWZdKTpub3QoW3RhYmluZGV4XSk6aG92ZXIsIGE6bm90KFtocmVmXSk6bm90KFt0YWJpbmRleF0pOmZvY3VzIHtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbn1cXG5cXG5hOm5vdChbaHJlZl0pOm5vdChbdGFiaW5kZXhdKTpmb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbn1cXG5cXG5wcmUsXFxuY29kZSxcXG5rYmQsXFxuc2FtcCB7XFxuICBmb250LWZhbWlseTogU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcXFwiTGliZXJhdGlvbiBNb25vXFxcIiwgXFxcIkNvdXJpZXIgTmV3XFxcIiwgbW9ub3NwYWNlO1xcbiAgZm9udC1zaXplOiAxZW07XFxufVxcblxcbnByZSB7XFxuICBtYXJnaW4tdG9wOiAwO1xcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbn1cXG5cXG5maWd1cmUge1xcbiAgbWFyZ2luOiAwIDAgMXJlbTtcXG59XFxuXFxuaW1nIHtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuICBib3JkZXItc3R5bGU6IG5vbmU7XFxufVxcblxcbnN2ZyB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG59XFxuXFxudGFibGUge1xcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcXG59XFxuXFxuY2FwdGlvbiB7XFxuICBwYWRkaW5nLXRvcDogMC43NXJlbTtcXG4gIHBhZGRpbmctYm90dG9tOiAwLjc1cmVtO1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgY2FwdGlvbi1zaWRlOiBib3R0b207XFxufVxcblxcbnRoIHtcXG4gIHRleHQtYWxpZ246IGluaGVyaXQ7XFxufVxcblxcbmxhYmVsIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcXG59XFxuXFxuYnV0dG9uIHtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxufVxcblxcbmJ1dHRvbjpmb2N1cyB7XFxuICBvdXRsaW5lOiAxcHggZG90dGVkO1xcbiAgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO1xcbn1cXG5cXG5pbnB1dCxcXG5idXR0b24sXFxuc2VsZWN0LFxcbm9wdGdyb3VwLFxcbnRleHRhcmVhIHtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xcbiAgZm9udC1zaXplOiBpbmhlcml0O1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxufVxcblxcbmJ1dHRvbixcXG5pbnB1dCB7XFxuICBvdmVyZmxvdzogdmlzaWJsZTtcXG59XFxuXFxuYnV0dG9uLFxcbnNlbGVjdCB7XFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXG59XFxuXFxuc2VsZWN0IHtcXG4gIHdvcmQtd3JhcDogbm9ybWFsO1xcbn1cXG5cXG5idXR0b24sXFxuW3R5cGU9XFxcImJ1dHRvblxcXCJdLFxcblt0eXBlPVxcXCJyZXNldFxcXCJdLFxcblt0eXBlPVxcXCJzdWJtaXRcXFwiXSB7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjtcXG59XFxuXFxuYnV0dG9uOm5vdCg6ZGlzYWJsZWQpLFxcblt0eXBlPVxcXCJidXR0b25cXFwiXTpub3QoOmRpc2FibGVkKSxcXG5bdHlwZT1cXFwicmVzZXRcXFwiXTpub3QoOmRpc2FibGVkKSxcXG5bdHlwZT1cXFwic3VibWl0XFxcIl06bm90KDpkaXNhYmxlZCkge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG5idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXFxuW3R5cGU9XFxcImJ1dHRvblxcXCJdOjotbW96LWZvY3VzLWlubmVyLFxcblt0eXBlPVxcXCJyZXNldFxcXCJdOjotbW96LWZvY3VzLWlubmVyLFxcblt0eXBlPVxcXCJzdWJtaXRcXFwiXTo6LW1vei1mb2N1cy1pbm5lciB7XFxuICBwYWRkaW5nOiAwO1xcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xcbn1cXG5cXG5pbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdLFxcbmlucHV0W3R5cGU9XFxcImNoZWNrYm94XFxcIl0ge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIHBhZGRpbmc6IDA7XFxufVxcblxcbmlucHV0W3R5cGU9XFxcImRhdGVcXFwiXSxcXG5pbnB1dFt0eXBlPVxcXCJ0aW1lXFxcIl0sXFxuaW5wdXRbdHlwZT1cXFwiZGF0ZXRpbWUtbG9jYWxcXFwiXSxcXG5pbnB1dFt0eXBlPVxcXCJtb250aFxcXCJdIHtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbGlzdGJveDtcXG59XFxuXFxudGV4dGFyZWEge1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxuICByZXNpemU6IHZlcnRpY2FsO1xcbn1cXG5cXG5maWVsZHNldCB7XFxuICBtaW4td2lkdGg6IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgbWFyZ2luOiAwO1xcbiAgYm9yZGVyOiAwO1xcbn1cXG5cXG5sZWdlbmQge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIHBhZGRpbmc6IDA7XFxuICBtYXJnaW4tYm90dG9tOiAuNXJlbTtcXG4gIGZvbnQtc2l6ZTogMS41cmVtO1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XFxufVxcblxcbnByb2dyZXNzIHtcXG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcXG59XFxuXFxuW3R5cGU9XFxcIm51bWJlclxcXCJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxcblt0eXBlPVxcXCJudW1iZXJcXFwiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcblxcblt0eXBlPVxcXCJzZWFyY2hcXFwiXSB7XFxuICBvdXRsaW5lLW9mZnNldDogLTJweDtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuXFxuW3R5cGU9XFxcInNlYXJjaFxcXCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuXFxuOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiB7XFxuICBmb250OiBpbmhlcml0O1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247XFxufVxcblxcbm91dHB1dCB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcblxcbnN1bW1hcnkge1xcbiAgZGlzcGxheTogbGlzdC1pdGVtO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG50ZW1wbGF0ZSB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5cXG5baGlkZGVuXSB7XFxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxufVxcblxcbmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsXFxuLmgxLCAuaDIsIC5oMywgLmg0LCAuaDUsIC5oNiB7XFxuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuMjtcXG59XFxuXFxuaDEsIC5oMSB7XFxuICBmb250LXNpemU6IDIuNXJlbTtcXG59XFxuXFxuaDIsIC5oMiB7XFxuICBmb250LXNpemU6IDJyZW07XFxufVxcblxcbmgzLCAuaDMge1xcbiAgZm9udC1zaXplOiAxLjc1cmVtO1xcbn1cXG5cXG5oNCwgLmg0IHtcXG4gIGZvbnQtc2l6ZTogMS41cmVtO1xcbn1cXG5cXG5oNSwgLmg1IHtcXG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcXG59XFxuXFxuaDYsIC5oNiB7XFxuICBmb250LXNpemU6IDFyZW07XFxufVxcblxcbi5sZWFkIHtcXG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcXG4gIGZvbnQtd2VpZ2h0OiAzMDA7XFxufVxcblxcbi5kaXNwbGF5LTEge1xcbiAgZm9udC1zaXplOiA2cmVtO1xcbiAgZm9udC13ZWlnaHQ6IDMwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjI7XFxufVxcblxcbi5kaXNwbGF5LTIge1xcbiAgZm9udC1zaXplOiA1LjVyZW07XFxuICBmb250LXdlaWdodDogMzAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuMjtcXG59XFxuXFxuLmRpc3BsYXktMyB7XFxuICBmb250LXNpemU6IDQuNXJlbTtcXG4gIGZvbnQtd2VpZ2h0OiAzMDA7XFxuICBsaW5lLWhlaWdodDogMS4yO1xcbn1cXG5cXG4uZGlzcGxheS00IHtcXG4gIGZvbnQtc2l6ZTogMy41cmVtO1xcbiAgZm9udC13ZWlnaHQ6IDMwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjI7XFxufVxcblxcbmhyIHtcXG4gIG1hcmdpbi10b3A6IDFyZW07XFxuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xcbiAgYm9yZGVyOiAwO1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xKTtcXG59XFxuXFxuc21hbGwsXFxuLnNtYWxsIHtcXG4gIGZvbnQtc2l6ZTogODAlO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG59XFxuXFxubWFyayxcXG4ubWFyayB7XFxuICBwYWRkaW5nOiAwLjJlbTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmY2Y4ZTM7XFxufVxcblxcbi5saXN0LXVuc3R5bGVkIHtcXG4gIHBhZGRpbmctbGVmdDogMDtcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XFxufVxcblxcbi5saXN0LWlubGluZSB7XFxuICBwYWRkaW5nLWxlZnQ6IDA7XFxuICBsaXN0LXN0eWxlOiBub25lO1xcbn1cXG5cXG4ubGlzdC1pbmxpbmUtaXRlbSB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcblxcbi5saXN0LWlubGluZS1pdGVtOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgbWFyZ2luLXJpZ2h0OiAwLjVyZW07XFxufVxcblxcbi5pbml0aWFsaXNtIHtcXG4gIGZvbnQtc2l6ZTogOTAlO1xcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcXG59XFxuXFxuLmJsb2NrcXVvdGUge1xcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcXG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcXG59XFxuXFxuLmJsb2NrcXVvdGUtZm9vdGVyIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgZm9udC1zaXplOiA4MCU7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG59XFxuXFxuLmJsb2NrcXVvdGUtZm9vdGVyOjpiZWZvcmUge1xcbiAgY29udGVudDogXFxcIlxcXFwyMDE0XFxcXDAwQTBcXFwiO1xcbn1cXG5cXG4uaW1nLWZsdWlkIHtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIGhlaWdodDogYXV0bztcXG59XFxuXFxuLmltZy10aHVtYm5haWwge1xcbiAgcGFkZGluZzogMC4yNXJlbTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZGVlMmU2O1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIGhlaWdodDogYXV0bztcXG59XFxuXFxuLmZpZ3VyZSB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcblxcbi5maWd1cmUtaW1nIHtcXG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxO1xcbn1cXG5cXG4uZmlndXJlLWNhcHRpb24ge1xcbiAgZm9udC1zaXplOiA5MCU7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG59XFxuXFxuY29kZSB7XFxuICBmb250LXNpemU6IDg3LjUlO1xcbiAgY29sb3I6ICNlODNlOGM7XFxuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xcbn1cXG5cXG5hID4gY29kZSB7XFxuICBjb2xvcjogaW5oZXJpdDtcXG59XFxuXFxua2JkIHtcXG4gIHBhZGRpbmc6IDAuMnJlbSAwLjRyZW07XFxuICBmb250LXNpemU6IDg3LjUlO1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjEyNTI5O1xcbiAgYm9yZGVyLXJhZGl1czogMC4ycmVtO1xcbn1cXG5cXG5rYmQga2JkIHtcXG4gIHBhZGRpbmc6IDA7XFxuICBmb250LXNpemU6IDEwMCU7XFxuICBmb250LXdlaWdodDogNzAwO1xcbn1cXG5cXG5wcmUge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBmb250LXNpemU6IDg3LjUlO1xcbiAgY29sb3I6ICMyMTI1Mjk7XFxufVxcblxcbnByZSBjb2RlIHtcXG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgd29yZC1icmVhazogbm9ybWFsO1xcbn1cXG5cXG4ucHJlLXNjcm9sbGFibGUge1xcbiAgbWF4LWhlaWdodDogMzQwcHg7XFxuICBvdmVyZmxvdy15OiBzY3JvbGw7XFxufVxcblxcbi5jb250YWluZXIge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLmNvbnRhaW5lciB7XFxuICAgIG1heC13aWR0aDogNTQwcHg7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLmNvbnRhaW5lciB7XFxuICAgIG1heC13aWR0aDogNzIwcHg7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xcbiAgLmNvbnRhaW5lciB7XFxuICAgIG1heC13aWR0aDogOTYwcHg7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC5jb250YWluZXIge1xcbiAgICBtYXgtd2lkdGg6IDExNDBweDtcXG4gIH1cXG59XFxuXFxuLmNvbnRhaW5lci1mbHVpZCB7XFxuICB3aWR0aDogMTAwJTtcXG4gIHBhZGRpbmctcmlnaHQ6IDE1cHg7XFxuICBwYWRkaW5nLWxlZnQ6IDE1cHg7XFxuICBtYXJnaW4tcmlnaHQ6IGF1dG87XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG59XFxuXFxuLnJvdyB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgbWFyZ2luLXJpZ2h0OiAtMTVweDtcXG4gIG1hcmdpbi1sZWZ0OiAtMTVweDtcXG59XFxuXFxuLm5vLWd1dHRlcnMge1xcbiAgbWFyZ2luLXJpZ2h0OiAwO1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxufVxcblxcbi5uby1ndXR0ZXJzID4gLmNvbCxcXG4ubm8tZ3V0dGVycyA+IFtjbGFzcyo9XFxcImNvbC1cXFwiXSB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwO1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbn1cXG5cXG4uY29sLTEsIC5jb2wtMiwgLmNvbC0zLCAuY29sLTQsIC5jb2wtNSwgLmNvbC02LCAuY29sLTcsIC5jb2wtOCwgLmNvbC05LCAuY29sLTEwLCAuY29sLTExLCAuY29sLTEyLCAuY29sLFxcbi5jb2wtYXV0bywgLmNvbC1zbS0xLCAuY29sLXNtLTIsIC5jb2wtc20tMywgLmNvbC1zbS00LCAuY29sLXNtLTUsIC5jb2wtc20tNiwgLmNvbC1zbS03LCAuY29sLXNtLTgsIC5jb2wtc20tOSwgLmNvbC1zbS0xMCwgLmNvbC1zbS0xMSwgLmNvbC1zbS0xMiwgLmNvbC1zbSxcXG4uY29sLXNtLWF1dG8sIC5jb2wtbWQtMSwgLmNvbC1tZC0yLCAuY29sLW1kLTMsIC5jb2wtbWQtNCwgLmNvbC1tZC01LCAuY29sLW1kLTYsIC5jb2wtbWQtNywgLmNvbC1tZC04LCAuY29sLW1kLTksIC5jb2wtbWQtMTAsIC5jb2wtbWQtMTEsIC5jb2wtbWQtMTIsIC5jb2wtbWQsXFxuLmNvbC1tZC1hdXRvLCAuY29sLWxnLTEsIC5jb2wtbGctMiwgLmNvbC1sZy0zLCAuY29sLWxnLTQsIC5jb2wtbGctNSwgLmNvbC1sZy02LCAuY29sLWxnLTcsIC5jb2wtbGctOCwgLmNvbC1sZy05LCAuY29sLWxnLTEwLCAuY29sLWxnLTExLCAuY29sLWxnLTEyLCAuY29sLWxnLFxcbi5jb2wtbGctYXV0bywgLmNvbC14bC0xLCAuY29sLXhsLTIsIC5jb2wteGwtMywgLmNvbC14bC00LCAuY29sLXhsLTUsIC5jb2wteGwtNiwgLmNvbC14bC03LCAuY29sLXhsLTgsIC5jb2wteGwtOSwgLmNvbC14bC0xMCwgLmNvbC14bC0xMSwgLmNvbC14bC0xMiwgLmNvbC14bCxcXG4uY29sLXhsLWF1dG8ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xcbn1cXG5cXG4uY29sIHtcXG4gIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiAwO1xcbiAgZmxleC1iYXNpczogMDtcXG4gIC1tcy1mbGV4LXBvc2l0aXZlOiAxO1xcbiAgZmxleC1ncm93OiAxO1xcbiAgbWF4LXdpZHRoOiAxMDAlO1xcbn1cXG5cXG4uY29sLWF1dG8ge1xcbiAgLW1zLWZsZXg6IDAgMCBhdXRvO1xcbiAgZmxleDogMCAwIGF1dG87XFxuICB3aWR0aDogYXV0bztcXG4gIG1heC13aWR0aDogMTAwJTtcXG59XFxuXFxuLmNvbC0xIHtcXG4gIC1tcy1mbGV4OiAwIDAgOC4zMzMzMzMlO1xcbiAgZmxleDogMCAwIDguMzMzMzMzJTtcXG4gIG1heC13aWR0aDogOC4zMzMzMzMlO1xcbn1cXG5cXG4uY29sLTIge1xcbiAgLW1zLWZsZXg6IDAgMCAxNi42NjY2NjclO1xcbiAgZmxleDogMCAwIDE2LjY2NjY2NyU7XFxuICBtYXgtd2lkdGg6IDE2LjY2NjY2NyU7XFxufVxcblxcbi5jb2wtMyB7XFxuICAtbXMtZmxleDogMCAwIDI1JTtcXG4gIGZsZXg6IDAgMCAyNSU7XFxuICBtYXgtd2lkdGg6IDI1JTtcXG59XFxuXFxuLmNvbC00IHtcXG4gIC1tcy1mbGV4OiAwIDAgMzMuMzMzMzMzJTtcXG4gIGZsZXg6IDAgMCAzMy4zMzMzMzMlO1xcbiAgbWF4LXdpZHRoOiAzMy4zMzMzMzMlO1xcbn1cXG5cXG4uY29sLTUge1xcbiAgLW1zLWZsZXg6IDAgMCA0MS42NjY2NjclO1xcbiAgZmxleDogMCAwIDQxLjY2NjY2NyU7XFxuICBtYXgtd2lkdGg6IDQxLjY2NjY2NyU7XFxufVxcblxcbi5jb2wtNiB7XFxuICAtbXMtZmxleDogMCAwIDUwJTtcXG4gIGZsZXg6IDAgMCA1MCU7XFxuICBtYXgtd2lkdGg6IDUwJTtcXG59XFxuXFxuLmNvbC03IHtcXG4gIC1tcy1mbGV4OiAwIDAgNTguMzMzMzMzJTtcXG4gIGZsZXg6IDAgMCA1OC4zMzMzMzMlO1xcbiAgbWF4LXdpZHRoOiA1OC4zMzMzMzMlO1xcbn1cXG5cXG4uY29sLTgge1xcbiAgLW1zLWZsZXg6IDAgMCA2Ni42NjY2NjclO1xcbiAgZmxleDogMCAwIDY2LjY2NjY2NyU7XFxuICBtYXgtd2lkdGg6IDY2LjY2NjY2NyU7XFxufVxcblxcbi5jb2wtOSB7XFxuICAtbXMtZmxleDogMCAwIDc1JTtcXG4gIGZsZXg6IDAgMCA3NSU7XFxuICBtYXgtd2lkdGg6IDc1JTtcXG59XFxuXFxuLmNvbC0xMCB7XFxuICAtbXMtZmxleDogMCAwIDgzLjMzMzMzMyU7XFxuICBmbGV4OiAwIDAgODMuMzMzMzMzJTtcXG4gIG1heC13aWR0aDogODMuMzMzMzMzJTtcXG59XFxuXFxuLmNvbC0xMSB7XFxuICAtbXMtZmxleDogMCAwIDkxLjY2NjY2NyU7XFxuICBmbGV4OiAwIDAgOTEuNjY2NjY3JTtcXG4gIG1heC13aWR0aDogOTEuNjY2NjY3JTtcXG59XFxuXFxuLmNvbC0xMiB7XFxuICAtbXMtZmxleDogMCAwIDEwMCU7XFxuICBmbGV4OiAwIDAgMTAwJTtcXG4gIG1heC13aWR0aDogMTAwJTtcXG59XFxuXFxuLm9yZGVyLWZpcnN0IHtcXG4gIC1tcy1mbGV4LW9yZGVyOiAtMTtcXG4gIG9yZGVyOiAtMTtcXG59XFxuXFxuLm9yZGVyLWxhc3Qge1xcbiAgLW1zLWZsZXgtb3JkZXI6IDEzO1xcbiAgb3JkZXI6IDEzO1xcbn1cXG5cXG4ub3JkZXItMCB7XFxuICAtbXMtZmxleC1vcmRlcjogMDtcXG4gIG9yZGVyOiAwO1xcbn1cXG5cXG4ub3JkZXItMSB7XFxuICAtbXMtZmxleC1vcmRlcjogMTtcXG4gIG9yZGVyOiAxO1xcbn1cXG5cXG4ub3JkZXItMiB7XFxuICAtbXMtZmxleC1vcmRlcjogMjtcXG4gIG9yZGVyOiAyO1xcbn1cXG5cXG4ub3JkZXItMyB7XFxuICAtbXMtZmxleC1vcmRlcjogMztcXG4gIG9yZGVyOiAzO1xcbn1cXG5cXG4ub3JkZXItNCB7XFxuICAtbXMtZmxleC1vcmRlcjogNDtcXG4gIG9yZGVyOiA0O1xcbn1cXG5cXG4ub3JkZXItNSB7XFxuICAtbXMtZmxleC1vcmRlcjogNTtcXG4gIG9yZGVyOiA1O1xcbn1cXG5cXG4ub3JkZXItNiB7XFxuICAtbXMtZmxleC1vcmRlcjogNjtcXG4gIG9yZGVyOiA2O1xcbn1cXG5cXG4ub3JkZXItNyB7XFxuICAtbXMtZmxleC1vcmRlcjogNztcXG4gIG9yZGVyOiA3O1xcbn1cXG5cXG4ub3JkZXItOCB7XFxuICAtbXMtZmxleC1vcmRlcjogODtcXG4gIG9yZGVyOiA4O1xcbn1cXG5cXG4ub3JkZXItOSB7XFxuICAtbXMtZmxleC1vcmRlcjogOTtcXG4gIG9yZGVyOiA5O1xcbn1cXG5cXG4ub3JkZXItMTAge1xcbiAgLW1zLWZsZXgtb3JkZXI6IDEwO1xcbiAgb3JkZXI6IDEwO1xcbn1cXG5cXG4ub3JkZXItMTEge1xcbiAgLW1zLWZsZXgtb3JkZXI6IDExO1xcbiAgb3JkZXI6IDExO1xcbn1cXG5cXG4ub3JkZXItMTIge1xcbiAgLW1zLWZsZXgtb3JkZXI6IDEyO1xcbiAgb3JkZXI6IDEyO1xcbn1cXG5cXG4ub2Zmc2V0LTEge1xcbiAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzJTtcXG59XFxuXFxuLm9mZnNldC0yIHtcXG4gIG1hcmdpbi1sZWZ0OiAxNi42NjY2NjclO1xcbn1cXG5cXG4ub2Zmc2V0LTMge1xcbiAgbWFyZ2luLWxlZnQ6IDI1JTtcXG59XFxuXFxuLm9mZnNldC00IHtcXG4gIG1hcmdpbi1sZWZ0OiAzMy4zMzMzMzMlO1xcbn1cXG5cXG4ub2Zmc2V0LTUge1xcbiAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NyU7XFxufVxcblxcbi5vZmZzZXQtNiB7XFxuICBtYXJnaW4tbGVmdDogNTAlO1xcbn1cXG5cXG4ub2Zmc2V0LTcge1xcbiAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzMyU7XFxufVxcblxcbi5vZmZzZXQtOCB7XFxuICBtYXJnaW4tbGVmdDogNjYuNjY2NjY3JTtcXG59XFxuXFxuLm9mZnNldC05IHtcXG4gIG1hcmdpbi1sZWZ0OiA3NSU7XFxufVxcblxcbi5vZmZzZXQtMTAge1xcbiAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMyU7XFxufVxcblxcbi5vZmZzZXQtMTEge1xcbiAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY2NyU7XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLmNvbC1zbSB7XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiAwO1xcbiAgICBmbGV4LWJhc2lzOiAwO1xcbiAgICAtbXMtZmxleC1wb3NpdGl2ZTogMTtcXG4gICAgZmxleC1ncm93OiAxO1xcbiAgICBtYXgtd2lkdGg6IDEwMCU7XFxuICB9XFxuICAuY29sLXNtLWF1dG8ge1xcbiAgICAtbXMtZmxleDogMCAwIGF1dG87XFxuICAgIGZsZXg6IDAgMCBhdXRvO1xcbiAgICB3aWR0aDogYXV0bztcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLmNvbC1zbS0xIHtcXG4gICAgLW1zLWZsZXg6IDAgMCA4LjMzMzMzMyU7XFxuICAgIGZsZXg6IDAgMCA4LjMzMzMzMyU7XFxuICAgIG1heC13aWR0aDogOC4zMzMzMzMlO1xcbiAgfVxcbiAgLmNvbC1zbS0yIHtcXG4gICAgLW1zLWZsZXg6IDAgMCAxNi42NjY2NjclO1xcbiAgICBmbGV4OiAwIDAgMTYuNjY2NjY3JTtcXG4gICAgbWF4LXdpZHRoOiAxNi42NjY2NjclO1xcbiAgfVxcbiAgLmNvbC1zbS0zIHtcXG4gICAgLW1zLWZsZXg6IDAgMCAyNSU7XFxuICAgIGZsZXg6IDAgMCAyNSU7XFxuICAgIG1heC13aWR0aDogMjUlO1xcbiAgfVxcbiAgLmNvbC1zbS00IHtcXG4gICAgLW1zLWZsZXg6IDAgMCAzMy4zMzMzMzMlO1xcbiAgICBmbGV4OiAwIDAgMzMuMzMzMzMzJTtcXG4gICAgbWF4LXdpZHRoOiAzMy4zMzMzMzMlO1xcbiAgfVxcbiAgLmNvbC1zbS01IHtcXG4gICAgLW1zLWZsZXg6IDAgMCA0MS42NjY2NjclO1xcbiAgICBmbGV4OiAwIDAgNDEuNjY2NjY3JTtcXG4gICAgbWF4LXdpZHRoOiA0MS42NjY2NjclO1xcbiAgfVxcbiAgLmNvbC1zbS02IHtcXG4gICAgLW1zLWZsZXg6IDAgMCA1MCU7XFxuICAgIGZsZXg6IDAgMCA1MCU7XFxuICAgIG1heC13aWR0aDogNTAlO1xcbiAgfVxcbiAgLmNvbC1zbS03IHtcXG4gICAgLW1zLWZsZXg6IDAgMCA1OC4zMzMzMzMlO1xcbiAgICBmbGV4OiAwIDAgNTguMzMzMzMzJTtcXG4gICAgbWF4LXdpZHRoOiA1OC4zMzMzMzMlO1xcbiAgfVxcbiAgLmNvbC1zbS04IHtcXG4gICAgLW1zLWZsZXg6IDAgMCA2Ni42NjY2NjclO1xcbiAgICBmbGV4OiAwIDAgNjYuNjY2NjY3JTtcXG4gICAgbWF4LXdpZHRoOiA2Ni42NjY2NjclO1xcbiAgfVxcbiAgLmNvbC1zbS05IHtcXG4gICAgLW1zLWZsZXg6IDAgMCA3NSU7XFxuICAgIGZsZXg6IDAgMCA3NSU7XFxuICAgIG1heC13aWR0aDogNzUlO1xcbiAgfVxcbiAgLmNvbC1zbS0xMCB7XFxuICAgIC1tcy1mbGV4OiAwIDAgODMuMzMzMzMzJTtcXG4gICAgZmxleDogMCAwIDgzLjMzMzMzMyU7XFxuICAgIG1heC13aWR0aDogODMuMzMzMzMzJTtcXG4gIH1cXG4gIC5jb2wtc20tMTEge1xcbiAgICAtbXMtZmxleDogMCAwIDkxLjY2NjY2NyU7XFxuICAgIGZsZXg6IDAgMCA5MS42NjY2NjclO1xcbiAgICBtYXgtd2lkdGg6IDkxLjY2NjY2NyU7XFxuICB9XFxuICAuY29sLXNtLTEyIHtcXG4gICAgLW1zLWZsZXg6IDAgMCAxMDAlO1xcbiAgICBmbGV4OiAwIDAgMTAwJTtcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLm9yZGVyLXNtLWZpcnN0IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IC0xO1xcbiAgICBvcmRlcjogLTE7XFxuICB9XFxuICAub3JkZXItc20tbGFzdCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAxMztcXG4gICAgb3JkZXI6IDEzO1xcbiAgfVxcbiAgLm9yZGVyLXNtLTAge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMDtcXG4gICAgb3JkZXI6IDA7XFxuICB9XFxuICAub3JkZXItc20tMSB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAxO1xcbiAgICBvcmRlcjogMTtcXG4gIH1cXG4gIC5vcmRlci1zbS0yIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDI7XFxuICAgIG9yZGVyOiAyO1xcbiAgfVxcbiAgLm9yZGVyLXNtLTMge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMztcXG4gICAgb3JkZXI6IDM7XFxuICB9XFxuICAub3JkZXItc20tNCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA0O1xcbiAgICBvcmRlcjogNDtcXG4gIH1cXG4gIC5vcmRlci1zbS01IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDU7XFxuICAgIG9yZGVyOiA1O1xcbiAgfVxcbiAgLm9yZGVyLXNtLTYge1xcbiAgICAtbXMtZmxleC1vcmRlcjogNjtcXG4gICAgb3JkZXI6IDY7XFxuICB9XFxuICAub3JkZXItc20tNyB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA3O1xcbiAgICBvcmRlcjogNztcXG4gIH1cXG4gIC5vcmRlci1zbS04IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDg7XFxuICAgIG9yZGVyOiA4O1xcbiAgfVxcbiAgLm9yZGVyLXNtLTkge1xcbiAgICAtbXMtZmxleC1vcmRlcjogOTtcXG4gICAgb3JkZXI6IDk7XFxuICB9XFxuICAub3JkZXItc20tMTAge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTA7XFxuICAgIG9yZGVyOiAxMDtcXG4gIH1cXG4gIC5vcmRlci1zbS0xMSB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAxMTtcXG4gICAgb3JkZXI6IDExO1xcbiAgfVxcbiAgLm9yZGVyLXNtLTEyIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDEyO1xcbiAgICBvcmRlcjogMTI7XFxuICB9XFxuICAub2Zmc2V0LXNtLTAge1xcbiAgICBtYXJnaW4tbGVmdDogMDtcXG4gIH1cXG4gIC5vZmZzZXQtc20tMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA4LjMzMzMzMyU7XFxuICB9XFxuICAub2Zmc2V0LXNtLTIge1xcbiAgICBtYXJnaW4tbGVmdDogMTYuNjY2NjY3JTtcXG4gIH1cXG4gIC5vZmZzZXQtc20tMyB7XFxuICAgIG1hcmdpbi1sZWZ0OiAyNSU7XFxuICB9XFxuICAub2Zmc2V0LXNtLTQge1xcbiAgICBtYXJnaW4tbGVmdDogMzMuMzMzMzMzJTtcXG4gIH1cXG4gIC5vZmZzZXQtc20tNSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY2NjclO1xcbiAgfVxcbiAgLm9mZnNldC1zbS02IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDUwJTtcXG4gIH1cXG4gIC5vZmZzZXQtc20tNyB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzMzMlO1xcbiAgfVxcbiAgLm9mZnNldC1zbS04IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDY2LjY2NjY2NyU7XFxuICB9XFxuICAub2Zmc2V0LXNtLTkge1xcbiAgICBtYXJnaW4tbGVmdDogNzUlO1xcbiAgfVxcbiAgLm9mZnNldC1zbS0xMCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA4My4zMzMzMzMlO1xcbiAgfVxcbiAgLm9mZnNldC1zbS0xMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY2NjclO1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gIC5jb2wtbWQge1xcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMDtcXG4gICAgZmxleC1iYXNpczogMDtcXG4gICAgLW1zLWZsZXgtcG9zaXRpdmU6IDE7XFxuICAgIGZsZXgtZ3JvdzogMTtcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLmNvbC1tZC1hdXRvIHtcXG4gICAgLW1zLWZsZXg6IDAgMCBhdXRvO1xcbiAgICBmbGV4OiAwIDAgYXV0bztcXG4gICAgd2lkdGg6IGF1dG87XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5jb2wtbWQtMSB7XFxuICAgIC1tcy1mbGV4OiAwIDAgOC4zMzMzMzMlO1xcbiAgICBmbGV4OiAwIDAgOC4zMzMzMzMlO1xcbiAgICBtYXgtd2lkdGg6IDguMzMzMzMzJTtcXG4gIH1cXG4gIC5jb2wtbWQtMiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMTYuNjY2NjY3JTtcXG4gICAgZmxleDogMCAwIDE2LjY2NjY2NyU7XFxuICAgIG1heC13aWR0aDogMTYuNjY2NjY3JTtcXG4gIH1cXG4gIC5jb2wtbWQtMyB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMjUlO1xcbiAgICBmbGV4OiAwIDAgMjUlO1xcbiAgICBtYXgtd2lkdGg6IDI1JTtcXG4gIH1cXG4gIC5jb2wtbWQtNCB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMzMuMzMzMzMzJTtcXG4gICAgZmxleDogMCAwIDMzLjMzMzMzMyU7XFxuICAgIG1heC13aWR0aDogMzMuMzMzMzMzJTtcXG4gIH1cXG4gIC5jb2wtbWQtNSB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNDEuNjY2NjY3JTtcXG4gICAgZmxleDogMCAwIDQxLjY2NjY2NyU7XFxuICAgIG1heC13aWR0aDogNDEuNjY2NjY3JTtcXG4gIH1cXG4gIC5jb2wtbWQtNiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNTAlO1xcbiAgICBmbGV4OiAwIDAgNTAlO1xcbiAgICBtYXgtd2lkdGg6IDUwJTtcXG4gIH1cXG4gIC5jb2wtbWQtNyB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNTguMzMzMzMzJTtcXG4gICAgZmxleDogMCAwIDU4LjMzMzMzMyU7XFxuICAgIG1heC13aWR0aDogNTguMzMzMzMzJTtcXG4gIH1cXG4gIC5jb2wtbWQtOCB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNjYuNjY2NjY3JTtcXG4gICAgZmxleDogMCAwIDY2LjY2NjY2NyU7XFxuICAgIG1heC13aWR0aDogNjYuNjY2NjY3JTtcXG4gIH1cXG4gIC5jb2wtbWQtOSB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNzUlO1xcbiAgICBmbGV4OiAwIDAgNzUlO1xcbiAgICBtYXgtd2lkdGg6IDc1JTtcXG4gIH1cXG4gIC5jb2wtbWQtMTAge1xcbiAgICAtbXMtZmxleDogMCAwIDgzLjMzMzMzMyU7XFxuICAgIGZsZXg6IDAgMCA4My4zMzMzMzMlO1xcbiAgICBtYXgtd2lkdGg6IDgzLjMzMzMzMyU7XFxuICB9XFxuICAuY29sLW1kLTExIHtcXG4gICAgLW1zLWZsZXg6IDAgMCA5MS42NjY2NjclO1xcbiAgICBmbGV4OiAwIDAgOTEuNjY2NjY3JTtcXG4gICAgbWF4LXdpZHRoOiA5MS42NjY2NjclO1xcbiAgfVxcbiAgLmNvbC1tZC0xMiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMTAwJTtcXG4gICAgZmxleDogMCAwIDEwMCU7XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5vcmRlci1tZC1maXJzdCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAtMTtcXG4gICAgb3JkZXI6IC0xO1xcbiAgfVxcbiAgLm9yZGVyLW1kLWxhc3Qge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTM7XFxuICAgIG9yZGVyOiAxMztcXG4gIH1cXG4gIC5vcmRlci1tZC0wIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDA7XFxuICAgIG9yZGVyOiAwO1xcbiAgfVxcbiAgLm9yZGVyLW1kLTEge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTtcXG4gICAgb3JkZXI6IDE7XFxuICB9XFxuICAub3JkZXItbWQtMiB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAyO1xcbiAgICBvcmRlcjogMjtcXG4gIH1cXG4gIC5vcmRlci1tZC0zIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDM7XFxuICAgIG9yZGVyOiAzO1xcbiAgfVxcbiAgLm9yZGVyLW1kLTQge1xcbiAgICAtbXMtZmxleC1vcmRlcjogNDtcXG4gICAgb3JkZXI6IDQ7XFxuICB9XFxuICAub3JkZXItbWQtNSB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA1O1xcbiAgICBvcmRlcjogNTtcXG4gIH1cXG4gIC5vcmRlci1tZC02IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDY7XFxuICAgIG9yZGVyOiA2O1xcbiAgfVxcbiAgLm9yZGVyLW1kLTcge1xcbiAgICAtbXMtZmxleC1vcmRlcjogNztcXG4gICAgb3JkZXI6IDc7XFxuICB9XFxuICAub3JkZXItbWQtOCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA4O1xcbiAgICBvcmRlcjogODtcXG4gIH1cXG4gIC5vcmRlci1tZC05IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDk7XFxuICAgIG9yZGVyOiA5O1xcbiAgfVxcbiAgLm9yZGVyLW1kLTEwIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDEwO1xcbiAgICBvcmRlcjogMTA7XFxuICB9XFxuICAub3JkZXItbWQtMTEge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTE7XFxuICAgIG9yZGVyOiAxMTtcXG4gIH1cXG4gIC5vcmRlci1tZC0xMiB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAxMjtcXG4gICAgb3JkZXI6IDEyO1xcbiAgfVxcbiAgLm9mZnNldC1tZC0wIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDA7XFxuICB9XFxuICAub2Zmc2V0LW1kLTEge1xcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzMzMlO1xcbiAgfVxcbiAgLm9mZnNldC1tZC0yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY2NyU7XFxuICB9XFxuICAub2Zmc2V0LW1kLTMge1xcbiAgICBtYXJnaW4tbGVmdDogMjUlO1xcbiAgfVxcbiAgLm9mZnNldC1tZC00IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzMyU7XFxuICB9XFxuICAub2Zmc2V0LW1kLTUge1xcbiAgICBtYXJnaW4tbGVmdDogNDEuNjY2NjY3JTtcXG4gIH1cXG4gIC5vZmZzZXQtbWQtNiB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1MCU7XFxuICB9XFxuICAub2Zmc2V0LW1kLTcge1xcbiAgICBtYXJnaW4tbGVmdDogNTguMzMzMzMzJTtcXG4gIH1cXG4gIC5vZmZzZXQtbWQtOCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NjclO1xcbiAgfVxcbiAgLm9mZnNldC1tZC05IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDc1JTtcXG4gIH1cXG4gIC5vZmZzZXQtbWQtMTAge1xcbiAgICBtYXJnaW4tbGVmdDogODMuMzMzMzMzJTtcXG4gIH1cXG4gIC5vZmZzZXQtbWQtMTEge1xcbiAgICBtYXJnaW4tbGVmdDogOTEuNjY2NjY3JTtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XFxuICAuY29sLWxnIHtcXG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDA7XFxuICAgIGZsZXgtYmFzaXM6IDA7XFxuICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAxO1xcbiAgICBmbGV4LWdyb3c6IDE7XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5jb2wtbGctYXV0byB7XFxuICAgIC1tcy1mbGV4OiAwIDAgYXV0bztcXG4gICAgZmxleDogMCAwIGF1dG87XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgICBtYXgtd2lkdGg6IDEwMCU7XFxuICB9XFxuICAuY29sLWxnLTEge1xcbiAgICAtbXMtZmxleDogMCAwIDguMzMzMzMzJTtcXG4gICAgZmxleDogMCAwIDguMzMzMzMzJTtcXG4gICAgbWF4LXdpZHRoOiA4LjMzMzMzMyU7XFxuICB9XFxuICAuY29sLWxnLTIge1xcbiAgICAtbXMtZmxleDogMCAwIDE2LjY2NjY2NyU7XFxuICAgIGZsZXg6IDAgMCAxNi42NjY2NjclO1xcbiAgICBtYXgtd2lkdGg6IDE2LjY2NjY2NyU7XFxuICB9XFxuICAuY29sLWxnLTMge1xcbiAgICAtbXMtZmxleDogMCAwIDI1JTtcXG4gICAgZmxleDogMCAwIDI1JTtcXG4gICAgbWF4LXdpZHRoOiAyNSU7XFxuICB9XFxuICAuY29sLWxnLTQge1xcbiAgICAtbXMtZmxleDogMCAwIDMzLjMzMzMzMyU7XFxuICAgIGZsZXg6IDAgMCAzMy4zMzMzMzMlO1xcbiAgICBtYXgtd2lkdGg6IDMzLjMzMzMzMyU7XFxuICB9XFxuICAuY29sLWxnLTUge1xcbiAgICAtbXMtZmxleDogMCAwIDQxLjY2NjY2NyU7XFxuICAgIGZsZXg6IDAgMCA0MS42NjY2NjclO1xcbiAgICBtYXgtd2lkdGg6IDQxLjY2NjY2NyU7XFxuICB9XFxuICAuY29sLWxnLTYge1xcbiAgICAtbXMtZmxleDogMCAwIDUwJTtcXG4gICAgZmxleDogMCAwIDUwJTtcXG4gICAgbWF4LXdpZHRoOiA1MCU7XFxuICB9XFxuICAuY29sLWxnLTcge1xcbiAgICAtbXMtZmxleDogMCAwIDU4LjMzMzMzMyU7XFxuICAgIGZsZXg6IDAgMCA1OC4zMzMzMzMlO1xcbiAgICBtYXgtd2lkdGg6IDU4LjMzMzMzMyU7XFxuICB9XFxuICAuY29sLWxnLTgge1xcbiAgICAtbXMtZmxleDogMCAwIDY2LjY2NjY2NyU7XFxuICAgIGZsZXg6IDAgMCA2Ni42NjY2NjclO1xcbiAgICBtYXgtd2lkdGg6IDY2LjY2NjY2NyU7XFxuICB9XFxuICAuY29sLWxnLTkge1xcbiAgICAtbXMtZmxleDogMCAwIDc1JTtcXG4gICAgZmxleDogMCAwIDc1JTtcXG4gICAgbWF4LXdpZHRoOiA3NSU7XFxuICB9XFxuICAuY29sLWxnLTEwIHtcXG4gICAgLW1zLWZsZXg6IDAgMCA4My4zMzMzMzMlO1xcbiAgICBmbGV4OiAwIDAgODMuMzMzMzMzJTtcXG4gICAgbWF4LXdpZHRoOiA4My4zMzMzMzMlO1xcbiAgfVxcbiAgLmNvbC1sZy0xMSB7XFxuICAgIC1tcy1mbGV4OiAwIDAgOTEuNjY2NjY3JTtcXG4gICAgZmxleDogMCAwIDkxLjY2NjY2NyU7XFxuICAgIG1heC13aWR0aDogOTEuNjY2NjY3JTtcXG4gIH1cXG4gIC5jb2wtbGctMTIge1xcbiAgICAtbXMtZmxleDogMCAwIDEwMCU7XFxuICAgIGZsZXg6IDAgMCAxMDAlO1xcbiAgICBtYXgtd2lkdGg6IDEwMCU7XFxuICB9XFxuICAub3JkZXItbGctZmlyc3Qge1xcbiAgICAtbXMtZmxleC1vcmRlcjogLTE7XFxuICAgIG9yZGVyOiAtMTtcXG4gIH1cXG4gIC5vcmRlci1sZy1sYXN0IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDEzO1xcbiAgICBvcmRlcjogMTM7XFxuICB9XFxuICAub3JkZXItbGctMCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAwO1xcbiAgICBvcmRlcjogMDtcXG4gIH1cXG4gIC5vcmRlci1sZy0xIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDE7XFxuICAgIG9yZGVyOiAxO1xcbiAgfVxcbiAgLm9yZGVyLWxnLTIge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMjtcXG4gICAgb3JkZXI6IDI7XFxuICB9XFxuICAub3JkZXItbGctMyB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAzO1xcbiAgICBvcmRlcjogMztcXG4gIH1cXG4gIC5vcmRlci1sZy00IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDQ7XFxuICAgIG9yZGVyOiA0O1xcbiAgfVxcbiAgLm9yZGVyLWxnLTUge1xcbiAgICAtbXMtZmxleC1vcmRlcjogNTtcXG4gICAgb3JkZXI6IDU7XFxuICB9XFxuICAub3JkZXItbGctNiB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA2O1xcbiAgICBvcmRlcjogNjtcXG4gIH1cXG4gIC5vcmRlci1sZy03IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDc7XFxuICAgIG9yZGVyOiA3O1xcbiAgfVxcbiAgLm9yZGVyLWxnLTgge1xcbiAgICAtbXMtZmxleC1vcmRlcjogODtcXG4gICAgb3JkZXI6IDg7XFxuICB9XFxuICAub3JkZXItbGctOSB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA5O1xcbiAgICBvcmRlcjogOTtcXG4gIH1cXG4gIC5vcmRlci1sZy0xMCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAxMDtcXG4gICAgb3JkZXI6IDEwO1xcbiAgfVxcbiAgLm9yZGVyLWxnLTExIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDExO1xcbiAgICBvcmRlcjogMTE7XFxuICB9XFxuICAub3JkZXItbGctMTIge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTI7XFxuICAgIG9yZGVyOiAxMjtcXG4gIH1cXG4gIC5vZmZzZXQtbGctMCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAwO1xcbiAgfVxcbiAgLm9mZnNldC1sZy0xIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzJTtcXG4gIH1cXG4gIC5vZmZzZXQtbGctMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY2NjclO1xcbiAgfVxcbiAgLm9mZnNldC1sZy0zIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDI1JTtcXG4gIH1cXG4gIC5vZmZzZXQtbGctNCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAzMy4zMzMzMzMlO1xcbiAgfVxcbiAgLm9mZnNldC1sZy01IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NyU7XFxuICB9XFxuICAub2Zmc2V0LWxnLTYge1xcbiAgICBtYXJnaW4tbGVmdDogNTAlO1xcbiAgfVxcbiAgLm9mZnNldC1sZy03IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzMyU7XFxuICB9XFxuICAub2Zmc2V0LWxnLTgge1xcbiAgICBtYXJnaW4tbGVmdDogNjYuNjY2NjY3JTtcXG4gIH1cXG4gIC5vZmZzZXQtbGctOSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA3NSU7XFxuICB9XFxuICAub2Zmc2V0LWxnLTEwIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMyU7XFxuICB9XFxuICAub2Zmc2V0LWxnLTExIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY2NyU7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC5jb2wteGwge1xcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMDtcXG4gICAgZmxleC1iYXNpczogMDtcXG4gICAgLW1zLWZsZXgtcG9zaXRpdmU6IDE7XFxuICAgIGZsZXgtZ3JvdzogMTtcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLmNvbC14bC1hdXRvIHtcXG4gICAgLW1zLWZsZXg6IDAgMCBhdXRvO1xcbiAgICBmbGV4OiAwIDAgYXV0bztcXG4gICAgd2lkdGg6IGF1dG87XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5jb2wteGwtMSB7XFxuICAgIC1tcy1mbGV4OiAwIDAgOC4zMzMzMzMlO1xcbiAgICBmbGV4OiAwIDAgOC4zMzMzMzMlO1xcbiAgICBtYXgtd2lkdGg6IDguMzMzMzMzJTtcXG4gIH1cXG4gIC5jb2wteGwtMiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMTYuNjY2NjY3JTtcXG4gICAgZmxleDogMCAwIDE2LjY2NjY2NyU7XFxuICAgIG1heC13aWR0aDogMTYuNjY2NjY3JTtcXG4gIH1cXG4gIC5jb2wteGwtMyB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMjUlO1xcbiAgICBmbGV4OiAwIDAgMjUlO1xcbiAgICBtYXgtd2lkdGg6IDI1JTtcXG4gIH1cXG4gIC5jb2wteGwtNCB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMzMuMzMzMzMzJTtcXG4gICAgZmxleDogMCAwIDMzLjMzMzMzMyU7XFxuICAgIG1heC13aWR0aDogMzMuMzMzMzMzJTtcXG4gIH1cXG4gIC5jb2wteGwtNSB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNDEuNjY2NjY3JTtcXG4gICAgZmxleDogMCAwIDQxLjY2NjY2NyU7XFxuICAgIG1heC13aWR0aDogNDEuNjY2NjY3JTtcXG4gIH1cXG4gIC5jb2wteGwtNiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNTAlO1xcbiAgICBmbGV4OiAwIDAgNTAlO1xcbiAgICBtYXgtd2lkdGg6IDUwJTtcXG4gIH1cXG4gIC5jb2wteGwtNyB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNTguMzMzMzMzJTtcXG4gICAgZmxleDogMCAwIDU4LjMzMzMzMyU7XFxuICAgIG1heC13aWR0aDogNTguMzMzMzMzJTtcXG4gIH1cXG4gIC5jb2wteGwtOCB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNjYuNjY2NjY3JTtcXG4gICAgZmxleDogMCAwIDY2LjY2NjY2NyU7XFxuICAgIG1heC13aWR0aDogNjYuNjY2NjY3JTtcXG4gIH1cXG4gIC5jb2wteGwtOSB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNzUlO1xcbiAgICBmbGV4OiAwIDAgNzUlO1xcbiAgICBtYXgtd2lkdGg6IDc1JTtcXG4gIH1cXG4gIC5jb2wteGwtMTAge1xcbiAgICAtbXMtZmxleDogMCAwIDgzLjMzMzMzMyU7XFxuICAgIGZsZXg6IDAgMCA4My4zMzMzMzMlO1xcbiAgICBtYXgtd2lkdGg6IDgzLjMzMzMzMyU7XFxuICB9XFxuICAuY29sLXhsLTExIHtcXG4gICAgLW1zLWZsZXg6IDAgMCA5MS42NjY2NjclO1xcbiAgICBmbGV4OiAwIDAgOTEuNjY2NjY3JTtcXG4gICAgbWF4LXdpZHRoOiA5MS42NjY2NjclO1xcbiAgfVxcbiAgLmNvbC14bC0xMiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMTAwJTtcXG4gICAgZmxleDogMCAwIDEwMCU7XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5vcmRlci14bC1maXJzdCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAtMTtcXG4gICAgb3JkZXI6IC0xO1xcbiAgfVxcbiAgLm9yZGVyLXhsLWxhc3Qge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTM7XFxuICAgIG9yZGVyOiAxMztcXG4gIH1cXG4gIC5vcmRlci14bC0wIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDA7XFxuICAgIG9yZGVyOiAwO1xcbiAgfVxcbiAgLm9yZGVyLXhsLTEge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTtcXG4gICAgb3JkZXI6IDE7XFxuICB9XFxuICAub3JkZXIteGwtMiB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAyO1xcbiAgICBvcmRlcjogMjtcXG4gIH1cXG4gIC5vcmRlci14bC0zIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDM7XFxuICAgIG9yZGVyOiAzO1xcbiAgfVxcbiAgLm9yZGVyLXhsLTQge1xcbiAgICAtbXMtZmxleC1vcmRlcjogNDtcXG4gICAgb3JkZXI6IDQ7XFxuICB9XFxuICAub3JkZXIteGwtNSB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA1O1xcbiAgICBvcmRlcjogNTtcXG4gIH1cXG4gIC5vcmRlci14bC02IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDY7XFxuICAgIG9yZGVyOiA2O1xcbiAgfVxcbiAgLm9yZGVyLXhsLTcge1xcbiAgICAtbXMtZmxleC1vcmRlcjogNztcXG4gICAgb3JkZXI6IDc7XFxuICB9XFxuICAub3JkZXIteGwtOCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA4O1xcbiAgICBvcmRlcjogODtcXG4gIH1cXG4gIC5vcmRlci14bC05IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDk7XFxuICAgIG9yZGVyOiA5O1xcbiAgfVxcbiAgLm9yZGVyLXhsLTEwIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDEwO1xcbiAgICBvcmRlcjogMTA7XFxuICB9XFxuICAub3JkZXIteGwtMTEge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTE7XFxuICAgIG9yZGVyOiAxMTtcXG4gIH1cXG4gIC5vcmRlci14bC0xMiB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAxMjtcXG4gICAgb3JkZXI6IDEyO1xcbiAgfVxcbiAgLm9mZnNldC14bC0wIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDA7XFxuICB9XFxuICAub2Zmc2V0LXhsLTEge1xcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzMzMlO1xcbiAgfVxcbiAgLm9mZnNldC14bC0yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY2NyU7XFxuICB9XFxuICAub2Zmc2V0LXhsLTMge1xcbiAgICBtYXJnaW4tbGVmdDogMjUlO1xcbiAgfVxcbiAgLm9mZnNldC14bC00IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzMyU7XFxuICB9XFxuICAub2Zmc2V0LXhsLTUge1xcbiAgICBtYXJnaW4tbGVmdDogNDEuNjY2NjY3JTtcXG4gIH1cXG4gIC5vZmZzZXQteGwtNiB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1MCU7XFxuICB9XFxuICAub2Zmc2V0LXhsLTcge1xcbiAgICBtYXJnaW4tbGVmdDogNTguMzMzMzMzJTtcXG4gIH1cXG4gIC5vZmZzZXQteGwtOCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NjclO1xcbiAgfVxcbiAgLm9mZnNldC14bC05IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDc1JTtcXG4gIH1cXG4gIC5vZmZzZXQteGwtMTAge1xcbiAgICBtYXJnaW4tbGVmdDogODMuMzMzMzMzJTtcXG4gIH1cXG4gIC5vZmZzZXQteGwtMTEge1xcbiAgICBtYXJnaW4tbGVmdDogOTEuNjY2NjY3JTtcXG4gIH1cXG59XFxuXFxuLnRhYmxlIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbn1cXG5cXG4udGFibGUgdGgsXFxuLnRhYmxlIHRkIHtcXG4gIHBhZGRpbmc6IDAuNzVyZW07XFxuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZWUyZTY7XFxufVxcblxcbi50YWJsZSB0aGVhZCB0aCB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xcbiAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNkZWUyZTY7XFxufVxcblxcbi50YWJsZSB0Ym9keSArIHRib2R5IHtcXG4gIGJvcmRlci10b3A6IDJweCBzb2xpZCAjZGVlMmU2O1xcbn1cXG5cXG4udGFibGUtc20gdGgsXFxuLnRhYmxlLXNtIHRkIHtcXG4gIHBhZGRpbmc6IDAuM3JlbTtcXG59XFxuXFxuLnRhYmxlLWJvcmRlcmVkIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZWUyZTY7XFxufVxcblxcbi50YWJsZS1ib3JkZXJlZCB0aCxcXG4udGFibGUtYm9yZGVyZWQgdGQge1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2RlZTJlNjtcXG59XFxuXFxuLnRhYmxlLWJvcmRlcmVkIHRoZWFkIHRoLFxcbi50YWJsZS1ib3JkZXJlZCB0aGVhZCB0ZCB7XFxuICBib3JkZXItYm90dG9tLXdpZHRoOiAycHg7XFxufVxcblxcbi50YWJsZS1ib3JkZXJsZXNzIHRoLFxcbi50YWJsZS1ib3JkZXJsZXNzIHRkLFxcbi50YWJsZS1ib3JkZXJsZXNzIHRoZWFkIHRoLFxcbi50YWJsZS1ib3JkZXJsZXNzIHRib2R5ICsgdGJvZHkge1xcbiAgYm9yZGVyOiAwO1xcbn1cXG5cXG4udGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZShvZGQpIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XFxufVxcblxcbi50YWJsZS1ob3ZlciB0Ym9keSB0cjpob3ZlciB7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNzUpO1xcbn1cXG5cXG4udGFibGUtcHJpbWFyeSxcXG4udGFibGUtcHJpbWFyeSA+IHRoLFxcbi50YWJsZS1wcmltYXJ5ID4gdGQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2I4ZGFmZjtcXG59XFxuXFxuLnRhYmxlLXByaW1hcnkgdGgsXFxuLnRhYmxlLXByaW1hcnkgdGQsXFxuLnRhYmxlLXByaW1hcnkgdGhlYWQgdGgsXFxuLnRhYmxlLXByaW1hcnkgdGJvZHkgKyB0Ym9keSB7XFxuICBib3JkZXItY29sb3I6ICM3YWJhZmY7XFxufVxcblxcbi50YWJsZS1ob3ZlciAudGFibGUtcHJpbWFyeTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWZjZGZmO1xcbn1cXG5cXG4udGFibGUtaG92ZXIgLnRhYmxlLXByaW1hcnk6aG92ZXIgPiB0ZCxcXG4udGFibGUtaG92ZXIgLnRhYmxlLXByaW1hcnk6aG92ZXIgPiB0aCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWZjZGZmO1xcbn1cXG5cXG4udGFibGUtc2Vjb25kYXJ5LFxcbi50YWJsZS1zZWNvbmRhcnkgPiB0aCxcXG4udGFibGUtc2Vjb25kYXJ5ID4gdGQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q2ZDhkYjtcXG59XFxuXFxuLnRhYmxlLXNlY29uZGFyeSB0aCxcXG4udGFibGUtc2Vjb25kYXJ5IHRkLFxcbi50YWJsZS1zZWNvbmRhcnkgdGhlYWQgdGgsXFxuLnRhYmxlLXNlY29uZGFyeSB0Ym9keSArIHRib2R5IHtcXG4gIGJvcmRlci1jb2xvcjogI2IzYjdiYjtcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1zZWNvbmRhcnk6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M4Y2JjZjtcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1zZWNvbmRhcnk6aG92ZXIgPiB0ZCxcXG4udGFibGUtaG92ZXIgLnRhYmxlLXNlY29uZGFyeTpob3ZlciA+IHRoIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjOGNiY2Y7XFxufVxcblxcbi50YWJsZS1zdWNjZXNzLFxcbi50YWJsZS1zdWNjZXNzID4gdGgsXFxuLnRhYmxlLXN1Y2Nlc3MgPiB0ZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzNlNmNiO1xcbn1cXG5cXG4udGFibGUtc3VjY2VzcyB0aCxcXG4udGFibGUtc3VjY2VzcyB0ZCxcXG4udGFibGUtc3VjY2VzcyB0aGVhZCB0aCxcXG4udGFibGUtc3VjY2VzcyB0Ym9keSArIHRib2R5IHtcXG4gIGJvcmRlci1jb2xvcjogIzhmZDE5ZTtcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1zdWNjZXNzOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiMWRmYmI7XFxufVxcblxcbi50YWJsZS1ob3ZlciAudGFibGUtc3VjY2Vzczpob3ZlciA+IHRkLFxcbi50YWJsZS1ob3ZlciAudGFibGUtc3VjY2Vzczpob3ZlciA+IHRoIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiMWRmYmI7XFxufVxcblxcbi50YWJsZS1pbmZvLFxcbi50YWJsZS1pbmZvID4gdGgsXFxuLnRhYmxlLWluZm8gPiB0ZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmVlNWViO1xcbn1cXG5cXG4udGFibGUtaW5mbyB0aCxcXG4udGFibGUtaW5mbyB0ZCxcXG4udGFibGUtaW5mbyB0aGVhZCB0aCxcXG4udGFibGUtaW5mbyB0Ym9keSArIHRib2R5IHtcXG4gIGJvcmRlci1jb2xvcjogIzg2Y2ZkYTtcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1pbmZvOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhYmRkZTU7XFxufVxcblxcbi50YWJsZS1ob3ZlciAudGFibGUtaW5mbzpob3ZlciA+IHRkLFxcbi50YWJsZS1ob3ZlciAudGFibGUtaW5mbzpob3ZlciA+IHRoIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhYmRkZTU7XFxufVxcblxcbi50YWJsZS13YXJuaW5nLFxcbi50YWJsZS13YXJuaW5nID4gdGgsXFxuLnRhYmxlLXdhcm5pbmcgPiB0ZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlZWJhO1xcbn1cXG5cXG4udGFibGUtd2FybmluZyB0aCxcXG4udGFibGUtd2FybmluZyB0ZCxcXG4udGFibGUtd2FybmluZyB0aGVhZCB0aCxcXG4udGFibGUtd2FybmluZyB0Ym9keSArIHRib2R5IHtcXG4gIGJvcmRlci1jb2xvcjogI2ZmZGY3ZTtcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS13YXJuaW5nOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmU4YTE7XFxufVxcblxcbi50YWJsZS1ob3ZlciAudGFibGUtd2FybmluZzpob3ZlciA+IHRkLFxcbi50YWJsZS1ob3ZlciAudGFibGUtd2FybmluZzpob3ZlciA+IHRoIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmU4YTE7XFxufVxcblxcbi50YWJsZS1kYW5nZXIsXFxuLnRhYmxlLWRhbmdlciA+IHRoLFxcbi50YWJsZS1kYW5nZXIgPiB0ZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVjNmNiO1xcbn1cXG5cXG4udGFibGUtZGFuZ2VyIHRoLFxcbi50YWJsZS1kYW5nZXIgdGQsXFxuLnRhYmxlLWRhbmdlciB0aGVhZCB0aCxcXG4udGFibGUtZGFuZ2VyIHRib2R5ICsgdGJvZHkge1xcbiAgYm9yZGVyLWNvbG9yOiAjZWQ5NjllO1xcbn1cXG5cXG4udGFibGUtaG92ZXIgLnRhYmxlLWRhbmdlcjpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFiMGI3O1xcbn1cXG5cXG4udGFibGUtaG92ZXIgLnRhYmxlLWRhbmdlcjpob3ZlciA+IHRkLFxcbi50YWJsZS1ob3ZlciAudGFibGUtZGFuZ2VyOmhvdmVyID4gdGgge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YxYjBiNztcXG59XFxuXFxuLnRhYmxlLWxpZ2h0LFxcbi50YWJsZS1saWdodCA+IHRoLFxcbi50YWJsZS1saWdodCA+IHRkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZGZkZmU7XFxufVxcblxcbi50YWJsZS1saWdodCB0aCxcXG4udGFibGUtbGlnaHQgdGQsXFxuLnRhYmxlLWxpZ2h0IHRoZWFkIHRoLFxcbi50YWJsZS1saWdodCB0Ym9keSArIHRib2R5IHtcXG4gIGJvcmRlci1jb2xvcjogI2ZiZmNmYztcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1saWdodDpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2Y2O1xcbn1cXG5cXG4udGFibGUtaG92ZXIgLnRhYmxlLWxpZ2h0OmhvdmVyID4gdGQsXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1saWdodDpob3ZlciA+IHRoIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlY2VjZjY7XFxufVxcblxcbi50YWJsZS1kYXJrLFxcbi50YWJsZS1kYXJrID4gdGgsXFxuLnRhYmxlLWRhcmsgPiB0ZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzZjOGNhO1xcbn1cXG5cXG4udGFibGUtZGFyayB0aCxcXG4udGFibGUtZGFyayB0ZCxcXG4udGFibGUtZGFyayB0aGVhZCB0aCxcXG4udGFibGUtZGFyayB0Ym9keSArIHRib2R5IHtcXG4gIGJvcmRlci1jb2xvcjogIzk1OTk5YztcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1kYXJrOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiOWJiYmU7XFxufVxcblxcbi50YWJsZS1ob3ZlciAudGFibGUtZGFyazpob3ZlciA+IHRkLFxcbi50YWJsZS1ob3ZlciAudGFibGUtZGFyazpob3ZlciA+IHRoIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiOWJiYmU7XFxufVxcblxcbi50YWJsZS1hY3RpdmUsXFxuLnRhYmxlLWFjdGl2ZSA+IHRoLFxcbi50YWJsZS1hY3RpdmUgPiB0ZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1hY3RpdmU6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA3NSk7XFxufVxcblxcbi50YWJsZS1ob3ZlciAudGFibGUtYWN0aXZlOmhvdmVyID4gdGQsXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1hY3RpdmU6aG92ZXIgPiB0aCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcXG59XFxuXFxuLnRhYmxlIC50aGVhZC1kYXJrIHRoIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM0M2E0MDtcXG4gIGJvcmRlci1jb2xvcjogIzQ1NGQ1NTtcXG59XFxuXFxuLnRhYmxlIC50aGVhZC1saWdodCB0aCB7XFxuICBjb2xvcjogIzQ5NTA1NztcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlOWVjZWY7XFxuICBib3JkZXItY29sb3I6ICNkZWUyZTY7XFxufVxcblxcbi50YWJsZS1kYXJrIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM0M2E0MDtcXG59XFxuXFxuLnRhYmxlLWRhcmsgdGgsXFxuLnRhYmxlLWRhcmsgdGQsXFxuLnRhYmxlLWRhcmsgdGhlYWQgdGgge1xcbiAgYm9yZGVyLWNvbG9yOiAjNDU0ZDU1O1xcbn1cXG5cXG4udGFibGUtZGFyay50YWJsZS1ib3JkZXJlZCB7XFxuICBib3JkZXI6IDA7XFxufVxcblxcbi50YWJsZS1kYXJrLnRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpO1xcbn1cXG5cXG4udGFibGUtZGFyay50YWJsZS1ob3ZlciB0Ym9keSB0cjpob3ZlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNzUpO1xcbn1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogNTc1Ljk4cHgpIHtcXG4gIC50YWJsZS1yZXNwb25zaXZlLXNtIHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xcbiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XFxuICB9XFxuICAudGFibGUtcmVzcG9uc2l2ZS1zbSA+IC50YWJsZS1ib3JkZXJlZCB7XFxuICAgIGJvcmRlcjogMDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDc2Ny45OHB4KSB7XFxuICAudGFibGUtcmVzcG9uc2l2ZS1tZCB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgb3ZlcmZsb3cteDogYXV0bztcXG4gICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xcbiAgfVxcbiAgLnRhYmxlLXJlc3BvbnNpdmUtbWQgPiAudGFibGUtYm9yZGVyZWQge1xcbiAgICBib3JkZXI6IDA7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5OTEuOThweCkge1xcbiAgLnRhYmxlLXJlc3BvbnNpdmUtbGcge1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIG92ZXJmbG93LXg6IGF1dG87XFxuICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcXG4gIH1cXG4gIC50YWJsZS1yZXNwb25zaXZlLWxnID4gLnRhYmxlLWJvcmRlcmVkIHtcXG4gICAgYm9yZGVyOiAwO1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogMTE5OS45OHB4KSB7XFxuICAudGFibGUtcmVzcG9uc2l2ZS14bCB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgb3ZlcmZsb3cteDogYXV0bztcXG4gICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xcbiAgfVxcbiAgLnRhYmxlLXJlc3BvbnNpdmUteGwgPiAudGFibGUtYm9yZGVyZWQge1xcbiAgICBib3JkZXI6IDA7XFxuICB9XFxufVxcblxcbi50YWJsZS1yZXNwb25zaXZlIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBvdmVyZmxvdy14OiBhdXRvO1xcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xcbn1cXG5cXG4udGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCB7XFxuICBib3JkZXI6IDA7XFxufVxcblxcbi5mb3JtLWNvbnRyb2wge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogY2FsYygxLjVlbSArIDAuNzVyZW0gKyAycHgpO1xcbiAgcGFkZGluZzogMC4zNzVyZW0gMC43NXJlbTtcXG4gIGZvbnQtc2l6ZTogMXJlbTtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgY29sb3I6ICM0OTUwNTc7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNjZWQ0ZGE7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3gtc2hhZG93IDAuMTVzIGVhc2UtaW4tb3V0O1xcbn1cXG5cXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xcbiAgLmZvcm0tY29udHJvbCB7XFxuICAgIHRyYW5zaXRpb246IG5vbmU7XFxuICB9XFxufVxcblxcbi5mb3JtLWNvbnRyb2w6Oi1tcy1leHBhbmQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXI6IDA7XFxufVxcblxcbi5mb3JtLWNvbnRyb2w6Zm9jdXMge1xcbiAgY29sb3I6ICM0OTUwNTc7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyLWNvbG9yOiAjODBiZGZmO1xcbiAgb3V0bGluZTogMDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDAsIDEyMywgMjU1LCAwLjI1KTtcXG59XFxuXFxuLmZvcm0tY29udHJvbDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi5mb3JtLWNvbnRyb2w6Oi1tb3otcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG5cXG4uZm9ybS1jb250cm9sOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi5mb3JtLWNvbnRyb2w6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi5mb3JtLWNvbnRyb2w6OnBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiAjNmM3NTdkO1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLmZvcm0tY29udHJvbDpkaXNhYmxlZCwgLmZvcm0tY29udHJvbFtyZWFkb25seV0ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U5ZWNlZjtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbnNlbGVjdC5mb3JtLWNvbnRyb2w6Zm9jdXM6Oi1tcy12YWx1ZSB7XFxuICBjb2xvcjogIzQ5NTA1NztcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxufVxcblxcbi5mb3JtLWNvbnRyb2wtZmlsZSxcXG4uZm9ybS1jb250cm9sLXJhbmdlIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcblxcbi5jb2wtZm9ybS1sYWJlbCB7XFxuICBwYWRkaW5nLXRvcDogY2FsYygwLjM3NXJlbSArIDFweCk7XFxuICBwYWRkaW5nLWJvdHRvbTogY2FsYygwLjM3NXJlbSArIDFweCk7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgZm9udC1zaXplOiBpbmhlcml0O1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG59XFxuXFxuLmNvbC1mb3JtLWxhYmVsLWxnIHtcXG4gIHBhZGRpbmctdG9wOiBjYWxjKDAuNXJlbSArIDFweCk7XFxuICBwYWRkaW5nLWJvdHRvbTogY2FsYygwLjVyZW0gKyAxcHgpO1xcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG59XFxuXFxuLmNvbC1mb3JtLWxhYmVsLXNtIHtcXG4gIHBhZGRpbmctdG9wOiBjYWxjKDAuMjVyZW0gKyAxcHgpO1xcbiAgcGFkZGluZy1ib3R0b206IGNhbGMoMC4yNXJlbSArIDFweCk7XFxuICBmb250LXNpemU6IDAuODc1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG59XFxuXFxuLmZvcm0tY29udHJvbC1wbGFpbnRleHQge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIHBhZGRpbmctdG9wOiAwLjM3NXJlbTtcXG4gIHBhZGRpbmctYm90dG9tOiAwLjM3NXJlbTtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgY29sb3I6ICMyMTI1Mjk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItd2lkdGg6IDFweCAwO1xcbn1cXG5cXG4uZm9ybS1jb250cm9sLXBsYWludGV4dC5mb3JtLWNvbnRyb2wtc20sIC5mb3JtLWNvbnRyb2wtcGxhaW50ZXh0LmZvcm0tY29udHJvbC1sZyB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwO1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbn1cXG5cXG4uZm9ybS1jb250cm9sLXNtIHtcXG4gIGhlaWdodDogY2FsYygxLjVlbSArIDAuNXJlbSArIDJweCk7XFxuICBwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbTtcXG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgYm9yZGVyLXJhZGl1czogMC4ycmVtO1xcbn1cXG5cXG4uZm9ybS1jb250cm9sLWxnIHtcXG4gIGhlaWdodDogY2FsYygxLjVlbSArIDFyZW0gKyAycHgpO1xcbiAgcGFkZGluZzogMC41cmVtIDFyZW07XFxuICBmb250LXNpemU6IDEuMjVyZW07XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgYm9yZGVyLXJhZGl1czogMC4zcmVtO1xcbn1cXG5cXG5zZWxlY3QuZm9ybS1jb250cm9sW3NpemVdLCBzZWxlY3QuZm9ybS1jb250cm9sW211bHRpcGxlXSB7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcblxcbnRleHRhcmVhLmZvcm0tY29udHJvbCB7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcblxcbi5mb3JtLWdyb3VwIHtcXG4gIG1hcmdpbi1ib3R0b206IDFyZW07XFxufVxcblxcbi5mb3JtLXRleHQge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBtYXJnaW4tdG9wOiAwLjI1cmVtO1xcbn1cXG5cXG4uZm9ybS1yb3cge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcXG4gIGZsZXgtd3JhcDogd3JhcDtcXG4gIG1hcmdpbi1yaWdodDogLTVweDtcXG4gIG1hcmdpbi1sZWZ0OiAtNXB4O1xcbn1cXG5cXG4uZm9ybS1yb3cgPiAuY29sLFxcbi5mb3JtLXJvdyA+IFtjbGFzcyo9XFxcImNvbC1cXFwiXSB7XFxuICBwYWRkaW5nLXJpZ2h0OiA1cHg7XFxuICBwYWRkaW5nLWxlZnQ6IDVweDtcXG59XFxuXFxuLmZvcm0tY2hlY2sge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwYWRkaW5nLWxlZnQ6IDEuMjVyZW07XFxufVxcblxcbi5mb3JtLWNoZWNrLWlucHV0IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIG1hcmdpbi10b3A6IDAuM3JlbTtcXG4gIG1hcmdpbi1sZWZ0OiAtMS4yNXJlbTtcXG59XFxuXFxuLmZvcm0tY2hlY2staW5wdXQ6ZGlzYWJsZWQgfiAuZm9ybS1jaGVjay1sYWJlbCB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG59XFxuXFxuLmZvcm0tY2hlY2stbGFiZWwge1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG59XFxuXFxuLmZvcm0tY2hlY2staW5saW5lIHtcXG4gIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBwYWRkaW5nLWxlZnQ6IDA7XFxuICBtYXJnaW4tcmlnaHQ6IDAuNzVyZW07XFxufVxcblxcbi5mb3JtLWNoZWNrLWlubGluZSAuZm9ybS1jaGVjay1pbnB1dCB7XFxuICBwb3NpdGlvbjogc3RhdGljO1xcbiAgbWFyZ2luLXRvcDogMDtcXG4gIG1hcmdpbi1yaWdodDogMC4zMTI1cmVtO1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxufVxcblxcbi52YWxpZC1mZWVkYmFjayB7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXJnaW4tdG9wOiAwLjI1cmVtO1xcbiAgZm9udC1zaXplOiA4MCU7XFxuICBjb2xvcjogIzI4YTc0NTtcXG59XFxuXFxuLnZhbGlkLXRvb2x0aXAge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAxMDAlO1xcbiAgei1pbmRleDogNTtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbTtcXG4gIG1hcmdpbi10b3A6IC4xcmVtO1xcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoNDAsIDE2NywgNjksIDAuOSk7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jb250cm9sOnZhbGlkLCAuZm9ybS1jb250cm9sLmlzLXZhbGlkIHtcXG4gIGJvcmRlci1jb2xvcjogIzI4YTc0NTtcXG4gIHBhZGRpbmctcmlnaHQ6IGNhbGMoMS41ZW0gKyAwLjc1cmVtKTtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA4IDgnJTNlJTNjcGF0aCBmaWxsPSclMjMyOGE3NDUnIGQ9J00yLjMgNi43M0wuNiA0LjUzYy0uNC0xLjA0LjQ2LTEuNCAxLjEtLjhsMS4xIDEuNCAzLjQtMy44Yy42LS42MyAxLjYtLjI3IDEuMi43bC00IDQuNmMtLjQzLjUtLjguNC0xLjEuMXonLyUzZSUzYy9zdmclM2VcXFwiKTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgcmlnaHQgY2FsYygwLjM3NWVtICsgMC4xODc1cmVtKTtcXG4gIGJhY2tncm91bmQtc2l6ZTogY2FsYygwLjc1ZW0gKyAwLjM3NXJlbSkgY2FsYygwLjc1ZW0gKyAwLjM3NXJlbSk7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5mb3JtLWNvbnRyb2w6dmFsaWQ6Zm9jdXMsIC5mb3JtLWNvbnRyb2wuaXMtdmFsaWQ6Zm9jdXMge1xcbiAgYm9yZGVyLWNvbG9yOiAjMjhhNzQ1O1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNDAsIDE2NywgNjksIDAuMjUpO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jb250cm9sOnZhbGlkIH4gLnZhbGlkLWZlZWRiYWNrLFxcbi53YXMtdmFsaWRhdGVkIC5mb3JtLWNvbnRyb2w6dmFsaWQgfiAudmFsaWQtdG9vbHRpcCwgLmZvcm0tY29udHJvbC5pcy12YWxpZCB+IC52YWxpZC1mZWVkYmFjayxcXG4uZm9ybS1jb250cm9sLmlzLXZhbGlkIH4gLnZhbGlkLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIHRleHRhcmVhLmZvcm0tY29udHJvbDp2YWxpZCwgdGV4dGFyZWEuZm9ybS1jb250cm9sLmlzLXZhbGlkIHtcXG4gIHBhZGRpbmctcmlnaHQ6IGNhbGMoMS41ZW0gKyAwLjc1cmVtKTtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IHRvcCBjYWxjKDAuMzc1ZW0gKyAwLjE4NzVyZW0pIHJpZ2h0IGNhbGMoMC4zNzVlbSArIDAuMTg3NXJlbSk7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tc2VsZWN0OnZhbGlkLCAuY3VzdG9tLXNlbGVjdC5pcy12YWxpZCB7XFxuICBib3JkZXItY29sb3I6ICMyOGE3NDU7XFxuICBwYWRkaW5nLXJpZ2h0OiBjYWxjKCgxZW0gKyAwLjc1cmVtKSAqIDMgLyA0ICsgMS43NXJlbSk7XFxuICBiYWNrZ3JvdW5kOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNCA1JyUzZSUzY3BhdGggZmlsbD0nJTIzMzQzYTQwJyBkPSdNMiAwTDAgMmg0em0wIDVMMCAzaDR6Jy8lM2UlM2Mvc3ZnJTNlXFxcIikgbm8tcmVwZWF0IHJpZ2h0IDAuNzVyZW0gY2VudGVyLzhweCAxMHB4LCB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgOCA4JyUzZSUzY3BhdGggZmlsbD0nJTIzMjhhNzQ1JyBkPSdNMi4zIDYuNzNMLjYgNC41M2MtLjQtMS4wNC40Ni0xLjQgMS4xLS44bDEuMSAxLjQgMy40LTMuOGMuNi0uNjMgMS42LS4yNyAxLjIuN2wtNCA0LjZjLS40My41LS44LjQtMS4xLjF6Jy8lM2UlM2Mvc3ZnJTNlXFxcIikgI2ZmZiBuby1yZXBlYXQgY2VudGVyIHJpZ2h0IDEuNzVyZW0vY2FsYygwLjc1ZW0gKyAwLjM3NXJlbSkgY2FsYygwLjc1ZW0gKyAwLjM3NXJlbSk7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tc2VsZWN0OnZhbGlkOmZvY3VzLCAuY3VzdG9tLXNlbGVjdC5pcy12YWxpZDpmb2N1cyB7XFxuICBib3JkZXItY29sb3I6ICMyOGE3NDU7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSg0MCwgMTY3LCA2OSwgMC4yNSk7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tc2VsZWN0OnZhbGlkIH4gLnZhbGlkLWZlZWRiYWNrLFxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tc2VsZWN0OnZhbGlkIH4gLnZhbGlkLXRvb2x0aXAsIC5jdXN0b20tc2VsZWN0LmlzLXZhbGlkIH4gLnZhbGlkLWZlZWRiYWNrLFxcbi5jdXN0b20tc2VsZWN0LmlzLXZhbGlkIH4gLnZhbGlkLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5mb3JtLWNvbnRyb2wtZmlsZTp2YWxpZCB+IC52YWxpZC1mZWVkYmFjayxcXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jb250cm9sLWZpbGU6dmFsaWQgfiAudmFsaWQtdG9vbHRpcCwgLmZvcm0tY29udHJvbC1maWxlLmlzLXZhbGlkIH4gLnZhbGlkLWZlZWRiYWNrLFxcbi5mb3JtLWNvbnRyb2wtZmlsZS5pcy12YWxpZCB+IC52YWxpZC10b29sdGlwIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jaGVjay1pbnB1dDp2YWxpZCB+IC5mb3JtLWNoZWNrLWxhYmVsLCAuZm9ybS1jaGVjay1pbnB1dC5pcy12YWxpZCB+IC5mb3JtLWNoZWNrLWxhYmVsIHtcXG4gIGNvbG9yOiAjMjhhNzQ1O1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jaGVjay1pbnB1dDp2YWxpZCB+IC52YWxpZC1mZWVkYmFjayxcXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jaGVjay1pbnB1dDp2YWxpZCB+IC52YWxpZC10b29sdGlwLCAuZm9ybS1jaGVjay1pbnB1dC5pcy12YWxpZCB+IC52YWxpZC1mZWVkYmFjayxcXG4uZm9ybS1jaGVjay1pbnB1dC5pcy12YWxpZCB+IC52YWxpZC10b29sdGlwIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6dmFsaWQgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWwsIC5jdXN0b20tY29udHJvbC1pbnB1dC5pcy12YWxpZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbCB7XFxuICBjb2xvcjogIzI4YTc0NTtcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1jb250cm9sLWlucHV0OnZhbGlkIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUsIC5jdXN0b20tY29udHJvbC1pbnB1dC5pcy12YWxpZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJvcmRlci1jb2xvcjogIzI4YTc0NTtcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1jb250cm9sLWlucHV0OnZhbGlkIH4gLnZhbGlkLWZlZWRiYWNrLFxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tY29udHJvbC1pbnB1dDp2YWxpZCB+IC52YWxpZC10b29sdGlwLCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQuaXMtdmFsaWQgfiAudmFsaWQtZmVlZGJhY2ssXFxuLmN1c3RvbS1jb250cm9sLWlucHV0LmlzLXZhbGlkIH4gLnZhbGlkLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tY29udHJvbC1pbnB1dDp2YWxpZDpjaGVja2VkIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUsIC5jdXN0b20tY29udHJvbC1pbnB1dC5pcy12YWxpZDpjaGVja2VkIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUge1xcbiAgYm9yZGVyLWNvbG9yOiAjMzRjZTU3O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM0Y2U1NztcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1jb250cm9sLWlucHV0OnZhbGlkOmZvY3VzIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUsIC5jdXN0b20tY29udHJvbC1pbnB1dC5pcy12YWxpZDpmb2N1cyB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDQwLCAxNjcsIDY5LCAwLjI1KTtcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1jb250cm9sLWlucHV0OnZhbGlkOmZvY3VzOm5vdCg6Y2hlY2tlZCkgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSwgLmN1c3RvbS1jb250cm9sLWlucHV0LmlzLXZhbGlkOmZvY3VzOm5vdCg6Y2hlY2tlZCkgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSB7XFxuICBib3JkZXItY29sb3I6ICMyOGE3NDU7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tZmlsZS1pbnB1dDp2YWxpZCB+IC5jdXN0b20tZmlsZS1sYWJlbCwgLmN1c3RvbS1maWxlLWlucHV0LmlzLXZhbGlkIH4gLmN1c3RvbS1maWxlLWxhYmVsIHtcXG4gIGJvcmRlci1jb2xvcjogIzI4YTc0NTtcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1maWxlLWlucHV0OnZhbGlkIH4gLnZhbGlkLWZlZWRiYWNrLFxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tZmlsZS1pbnB1dDp2YWxpZCB+IC52YWxpZC10b29sdGlwLCAuY3VzdG9tLWZpbGUtaW5wdXQuaXMtdmFsaWQgfiAudmFsaWQtZmVlZGJhY2ssXFxuLmN1c3RvbS1maWxlLWlucHV0LmlzLXZhbGlkIH4gLnZhbGlkLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tZmlsZS1pbnB1dDp2YWxpZDpmb2N1cyB+IC5jdXN0b20tZmlsZS1sYWJlbCwgLmN1c3RvbS1maWxlLWlucHV0LmlzLXZhbGlkOmZvY3VzIH4gLmN1c3RvbS1maWxlLWxhYmVsIHtcXG4gIGJvcmRlci1jb2xvcjogIzI4YTc0NTtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDQwLCAxNjcsIDY5LCAwLjI1KTtcXG59XFxuXFxuLmludmFsaWQtZmVlZGJhY2sge1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luLXRvcDogMC4yNXJlbTtcXG4gIGZvbnQtc2l6ZTogODAlO1xcbiAgY29sb3I6ICNkYzM1NDU7XFxufVxcblxcbi5pbnZhbGlkLXRvb2x0aXAge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAxMDAlO1xcbiAgei1pbmRleDogNTtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbTtcXG4gIG1hcmdpbi10b3A6IC4xcmVtO1xcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjIwLCA1MywgNjksIDAuOSk7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jb250cm9sOmludmFsaWQsIC5mb3JtLWNvbnRyb2wuaXMtaW52YWxpZCB7XFxuICBib3JkZXItY29sb3I6ICNkYzM1NDU7XFxuICBwYWRkaW5nLXJpZ2h0OiBjYWxjKDEuNWVtICsgMC43NXJlbSk7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyBmaWxsPSclMjNkYzM1NDUnIHZpZXdCb3g9Jy0yIC0yIDcgNyclM2UlM2NwYXRoIHN0cm9rZT0nJTIzZGMzNTQ1JyBkPSdNMCAwbDMgM20wLTNMMCAzJy8lM2UlM2NjaXJjbGUgcj0nLjUnLyUzZSUzY2NpcmNsZSBjeD0nMycgcj0nLjUnLyUzZSUzY2NpcmNsZSBjeT0nMycgcj0nLjUnLyUzZSUzY2NpcmNsZSBjeD0nMycgY3k9JzMnIHI9Jy41Jy8lM2UlM2Mvc3ZnJTNFXFxcIik7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0IGNhbGMoMC4zNzVlbSArIDAuMTg3NXJlbSk7XFxuICBiYWNrZ3JvdW5kLXNpemU6IGNhbGMoMC43NWVtICsgMC4zNzVyZW0pIGNhbGMoMC43NWVtICsgMC4zNzVyZW0pO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jb250cm9sOmludmFsaWQ6Zm9jdXMsIC5mb3JtLWNvbnRyb2wuaXMtaW52YWxpZDpmb2N1cyB7XFxuICBib3JkZXItY29sb3I6ICNkYzM1NDU7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgyMjAsIDUzLCA2OSwgMC4yNSk7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5mb3JtLWNvbnRyb2w6aW52YWxpZCB+IC5pbnZhbGlkLWZlZWRiYWNrLFxcbi53YXMtdmFsaWRhdGVkIC5mb3JtLWNvbnRyb2w6aW52YWxpZCB+IC5pbnZhbGlkLXRvb2x0aXAsIC5mb3JtLWNvbnRyb2wuaXMtaW52YWxpZCB+IC5pbnZhbGlkLWZlZWRiYWNrLFxcbi5mb3JtLWNvbnRyb2wuaXMtaW52YWxpZCB+IC5pbnZhbGlkLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIHRleHRhcmVhLmZvcm0tY29udHJvbDppbnZhbGlkLCB0ZXh0YXJlYS5mb3JtLWNvbnRyb2wuaXMtaW52YWxpZCB7XFxuICBwYWRkaW5nLXJpZ2h0OiBjYWxjKDEuNWVtICsgMC43NXJlbSk7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiB0b3AgY2FsYygwLjM3NWVtICsgMC4xODc1cmVtKSByaWdodCBjYWxjKDAuMzc1ZW0gKyAwLjE4NzVyZW0pO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLXNlbGVjdDppbnZhbGlkLCAuY3VzdG9tLXNlbGVjdC5pcy1pbnZhbGlkIHtcXG4gIGJvcmRlci1jb2xvcjogI2RjMzU0NTtcXG4gIHBhZGRpbmctcmlnaHQ6IGNhbGMoKDFlbSArIDAuNzVyZW0pICogMyAvIDQgKyAxLjc1cmVtKTtcXG4gIGJhY2tncm91bmQ6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA0IDUnJTNlJTNjcGF0aCBmaWxsPSclMjMzNDNhNDAnIGQ9J00yIDBMMCAyaDR6bTAgNUwwIDNoNHonLyUzZSUzYy9zdmclM2VcXFwiKSBuby1yZXBlYXQgcmlnaHQgMC43NXJlbSBjZW50ZXIvOHB4IDEwcHgsIHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIGZpbGw9JyUyM2RjMzU0NScgdmlld0JveD0nLTIgLTIgNyA3JyUzZSUzY3BhdGggc3Ryb2tlPSclMjNkYzM1NDUnIGQ9J00wIDBsMyAzbTAtM0wwIDMnLyUzZSUzY2NpcmNsZSByPScuNScvJTNlJTNjY2lyY2xlIGN4PSczJyByPScuNScvJTNlJTNjY2lyY2xlIGN5PSczJyByPScuNScvJTNlJTNjY2lyY2xlIGN4PSczJyBjeT0nMycgcj0nLjUnLyUzZSUzYy9zdmclM0VcXFwiKSAjZmZmIG5vLXJlcGVhdCBjZW50ZXIgcmlnaHQgMS43NXJlbS9jYWxjKDAuNzVlbSArIDAuMzc1cmVtKSBjYWxjKDAuNzVlbSArIDAuMzc1cmVtKTtcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1zZWxlY3Q6aW52YWxpZDpmb2N1cywgLmN1c3RvbS1zZWxlY3QuaXMtaW52YWxpZDpmb2N1cyB7XFxuICBib3JkZXItY29sb3I6ICNkYzM1NDU7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgyMjAsIDUzLCA2OSwgMC4yNSk7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tc2VsZWN0OmludmFsaWQgfiAuaW52YWxpZC1mZWVkYmFjayxcXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLXNlbGVjdDppbnZhbGlkIH4gLmludmFsaWQtdG9vbHRpcCwgLmN1c3RvbS1zZWxlY3QuaXMtaW52YWxpZCB+IC5pbnZhbGlkLWZlZWRiYWNrLFxcbi5jdXN0b20tc2VsZWN0LmlzLWludmFsaWQgfiAuaW52YWxpZC10b29sdGlwIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jb250cm9sLWZpbGU6aW52YWxpZCB+IC5pbnZhbGlkLWZlZWRiYWNrLFxcbi53YXMtdmFsaWRhdGVkIC5mb3JtLWNvbnRyb2wtZmlsZTppbnZhbGlkIH4gLmludmFsaWQtdG9vbHRpcCwgLmZvcm0tY29udHJvbC1maWxlLmlzLWludmFsaWQgfiAuaW52YWxpZC1mZWVkYmFjayxcXG4uZm9ybS1jb250cm9sLWZpbGUuaXMtaW52YWxpZCB+IC5pbnZhbGlkLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5mb3JtLWNoZWNrLWlucHV0OmludmFsaWQgfiAuZm9ybS1jaGVjay1sYWJlbCwgLmZvcm0tY2hlY2staW5wdXQuaXMtaW52YWxpZCB+IC5mb3JtLWNoZWNrLWxhYmVsIHtcXG4gIGNvbG9yOiAjZGMzNTQ1O1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jaGVjay1pbnB1dDppbnZhbGlkIH4gLmludmFsaWQtZmVlZGJhY2ssXFxuLndhcy12YWxpZGF0ZWQgLmZvcm0tY2hlY2staW5wdXQ6aW52YWxpZCB+IC5pbnZhbGlkLXRvb2x0aXAsIC5mb3JtLWNoZWNrLWlucHV0LmlzLWludmFsaWQgfiAuaW52YWxpZC1mZWVkYmFjayxcXG4uZm9ybS1jaGVjay1pbnB1dC5pcy1pbnZhbGlkIH4gLmludmFsaWQtdG9vbHRpcCB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1jb250cm9sLWlucHV0OmludmFsaWQgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWwsIC5jdXN0b20tY29udHJvbC1pbnB1dC5pcy1pbnZhbGlkIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsIHtcXG4gIGNvbG9yOiAjZGMzNTQ1O1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6aW52YWxpZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlLCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQuaXMtaW52YWxpZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJvcmRlci1jb2xvcjogI2RjMzU0NTtcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1jb250cm9sLWlucHV0OmludmFsaWQgfiAuaW52YWxpZC1mZWVkYmFjayxcXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6aW52YWxpZCB+IC5pbnZhbGlkLXRvb2x0aXAsIC5jdXN0b20tY29udHJvbC1pbnB1dC5pcy1pbnZhbGlkIH4gLmludmFsaWQtZmVlZGJhY2ssXFxuLmN1c3RvbS1jb250cm9sLWlucHV0LmlzLWludmFsaWQgfiAuaW52YWxpZC10b29sdGlwIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6aW52YWxpZDpjaGVja2VkIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUsIC5jdXN0b20tY29udHJvbC1pbnB1dC5pcy1pbnZhbGlkOmNoZWNrZWQgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSB7XFxuICBib3JkZXItY29sb3I6ICNlNDYwNmQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTQ2MDZkO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6aW52YWxpZDpmb2N1cyB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlLCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQuaXMtaW52YWxpZDpmb2N1cyB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDIyMCwgNTMsIDY5LCAwLjI1KTtcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1jb250cm9sLWlucHV0OmludmFsaWQ6Zm9jdXM6bm90KDpjaGVja2VkKSB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlLCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQuaXMtaW52YWxpZDpmb2N1czpub3QoOmNoZWNrZWQpIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUge1xcbiAgYm9yZGVyLWNvbG9yOiAjZGMzNTQ1O1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLWZpbGUtaW5wdXQ6aW52YWxpZCB+IC5jdXN0b20tZmlsZS1sYWJlbCwgLmN1c3RvbS1maWxlLWlucHV0LmlzLWludmFsaWQgfiAuY3VzdG9tLWZpbGUtbGFiZWwge1xcbiAgYm9yZGVyLWNvbG9yOiAjZGMzNTQ1O1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLWZpbGUtaW5wdXQ6aW52YWxpZCB+IC5pbnZhbGlkLWZlZWRiYWNrLFxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tZmlsZS1pbnB1dDppbnZhbGlkIH4gLmludmFsaWQtdG9vbHRpcCwgLmN1c3RvbS1maWxlLWlucHV0LmlzLWludmFsaWQgfiAuaW52YWxpZC1mZWVkYmFjayxcXG4uY3VzdG9tLWZpbGUtaW5wdXQuaXMtaW52YWxpZCB+IC5pbnZhbGlkLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tZmlsZS1pbnB1dDppbnZhbGlkOmZvY3VzIH4gLmN1c3RvbS1maWxlLWxhYmVsLCAuY3VzdG9tLWZpbGUtaW5wdXQuaXMtaW52YWxpZDpmb2N1cyB+IC5jdXN0b20tZmlsZS1sYWJlbCB7XFxuICBib3JkZXItY29sb3I6ICNkYzM1NDU7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgyMjAsIDUzLCA2OSwgMC4yNSk7XFxufVxcblxcbi5mb3JtLWlubGluZSB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC1mbG93OiByb3cgd3JhcDtcXG4gIGZsZXgtZmxvdzogcm93IHdyYXA7XFxuICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuXFxuLmZvcm0taW5saW5lIC5mb3JtLWNoZWNrIHtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIHtcXG4gIC5mb3JtLWlubGluZSBsYWJlbCB7XFxuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgfVxcbiAgLmZvcm0taW5saW5lIC5mb3JtLWdyb3VwIHtcXG4gICAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIC1tcy1mbGV4OiAwIDAgYXV0bztcXG4gICAgZmxleDogMCAwIGF1dG87XFxuICAgIC1tcy1mbGV4LWZsb3c6IHJvdyB3cmFwO1xcbiAgICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xcbiAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgfVxcbiAgLmZvcm0taW5saW5lIC5mb3JtLWNvbnRyb2wge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgfVxcbiAgLmZvcm0taW5saW5lIC5mb3JtLWNvbnRyb2wtcGxhaW50ZXh0IHtcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgfVxcbiAgLmZvcm0taW5saW5lIC5pbnB1dC1ncm91cCxcXG4gIC5mb3JtLWlubGluZSAuY3VzdG9tLXNlbGVjdCB7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLmZvcm0taW5saW5lIC5mb3JtLWNoZWNrIHtcXG4gICAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XFxuICB9XFxuICAuZm9ybS1pbmxpbmUgLmZvcm0tY2hlY2staW5wdXQge1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIC1tcy1mbGV4LW5lZ2F0aXZlOiAwO1xcbiAgICBmbGV4LXNocmluazogMDtcXG4gICAgbWFyZ2luLXRvcDogMDtcXG4gICAgbWFyZ2luLXJpZ2h0OiAwLjI1cmVtO1xcbiAgICBtYXJnaW4tbGVmdDogMDtcXG4gIH1cXG4gIC5mb3JtLWlubGluZSAuY3VzdG9tLWNvbnRyb2wge1xcbiAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgfVxcbiAgLmZvcm0taW5saW5lIC5jdXN0b20tY29udHJvbC1sYWJlbCB7XFxuICAgIG1hcmdpbi1ib3R0b206IDA7XFxuICB9XFxufVxcblxcbi5idG4ge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgcGFkZGluZzogMC4zNzVyZW0gMC43NXJlbTtcXG4gIGZvbnQtc2l6ZTogMXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbiAgdHJhbnNpdGlvbjogY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAwLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAwLjE1cyBlYXNlLWluLW91dDtcXG59XFxuXFxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcXG4gIC5idG4ge1xcbiAgICB0cmFuc2l0aW9uOiBub25lO1xcbiAgfVxcbn1cXG5cXG4uYnRuOmhvdmVyIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbn1cXG5cXG4uYnRuOmZvY3VzLCAuYnRuLmZvY3VzIHtcXG4gIG91dGxpbmU6IDA7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgwLCAxMjMsIDI1NSwgMC4yNSk7XFxufVxcblxcbi5idG4uZGlzYWJsZWQsIC5idG46ZGlzYWJsZWQge1xcbiAgb3BhY2l0eTogMC42NTtcXG59XFxuXFxuYS5idG4uZGlzYWJsZWQsXFxuZmllbGRzZXQ6ZGlzYWJsZWQgYS5idG4ge1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi5idG4tcHJpbWFyeSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDdiZmY7XFxuICBib3JkZXItY29sb3I6ICMwMDdiZmY7XFxufVxcblxcbi5idG4tcHJpbWFyeTpob3ZlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDY5ZDk7XFxuICBib3JkZXItY29sb3I6ICMwMDYyY2M7XFxufVxcblxcbi5idG4tcHJpbWFyeTpmb2N1cywgLmJ0bi1wcmltYXJ5LmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDM4LCAxNDMsIDI1NSwgMC41KTtcXG59XFxuXFxuLmJ0bi1wcmltYXJ5LmRpc2FibGVkLCAuYnRuLXByaW1hcnk6ZGlzYWJsZWQge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3YmZmO1xcbiAgYm9yZGVyLWNvbG9yOiAjMDA3YmZmO1xcbn1cXG5cXG4uYnRuLXByaW1hcnk6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlLCAuYnRuLXByaW1hcnk6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlLFxcbi5zaG93ID4gLmJ0bi1wcmltYXJ5LmRyb3Bkb3duLXRvZ2dsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDYyY2M7XFxuICBib3JkZXItY29sb3I6ICMwMDVjYmY7XFxufVxcblxcbi5idG4tcHJpbWFyeTpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmU6Zm9jdXMsIC5idG4tcHJpbWFyeTpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsXFxuLnNob3cgPiAuYnRuLXByaW1hcnkuZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDM4LCAxNDMsIDI1NSwgMC41KTtcXG59XFxuXFxuLmJ0bi1zZWNvbmRhcnkge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM3NTdkO1xcbiAgYm9yZGVyLWNvbG9yOiAjNmM3NTdkO1xcbn1cXG5cXG4uYnRuLXNlY29uZGFyeTpob3ZlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1YTYyNjg7XFxuICBib3JkZXItY29sb3I6ICM1NDViNjI7XFxufVxcblxcbi5idG4tc2Vjb25kYXJ5OmZvY3VzLCAuYnRuLXNlY29uZGFyeS5mb2N1cyB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgxMzAsIDEzOCwgMTQ1LCAwLjUpO1xcbn1cXG5cXG4uYnRuLXNlY29uZGFyeS5kaXNhYmxlZCwgLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM3NTdkO1xcbiAgYm9yZGVyLWNvbG9yOiAjNmM3NTdkO1xcbn1cXG5cXG4uYnRuLXNlY29uZGFyeTpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmUsIC5idG4tc2Vjb25kYXJ5Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSxcXG4uc2hvdyA+IC5idG4tc2Vjb25kYXJ5LmRyb3Bkb3duLXRvZ2dsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1NDViNjI7XFxuICBib3JkZXItY29sb3I6ICM0ZTU1NWI7XFxufVxcblxcbi5idG4tc2Vjb25kYXJ5Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZTpmb2N1cywgLmJ0bi1zZWNvbmRhcnk6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlOmZvY3VzLFxcbi5zaG93ID4gLmJ0bi1zZWNvbmRhcnkuZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDEzMCwgMTM4LCAxNDUsIDAuNSk7XFxufVxcblxcbi5idG4tc3VjY2VzcyB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyOGE3NDU7XFxuICBib3JkZXItY29sb3I6ICMyOGE3NDU7XFxufVxcblxcbi5idG4tc3VjY2Vzczpob3ZlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyMTg4Mzg7XFxuICBib3JkZXItY29sb3I6ICMxZTdlMzQ7XFxufVxcblxcbi5idG4tc3VjY2Vzczpmb2N1cywgLmJ0bi1zdWNjZXNzLmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDcyLCAxODAsIDk3LCAwLjUpO1xcbn1cXG5cXG4uYnRuLXN1Y2Nlc3MuZGlzYWJsZWQsIC5idG4tc3VjY2VzczpkaXNhYmxlZCB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyOGE3NDU7XFxuICBib3JkZXItY29sb3I6ICMyOGE3NDU7XFxufVxcblxcbi5idG4tc3VjY2Vzczpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmUsIC5idG4tc3VjY2Vzczpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmUsXFxuLnNob3cgPiAuYnRuLXN1Y2Nlc3MuZHJvcGRvd24tdG9nZ2xlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFlN2UzNDtcXG4gIGJvcmRlci1jb2xvcjogIzFjNzQzMDtcXG59XFxuXFxuLmJ0bi1zdWNjZXNzOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZTpmb2N1cywgLmJ0bi1zdWNjZXNzOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZTpmb2N1cyxcXG4uc2hvdyA+IC5idG4tc3VjY2Vzcy5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNzIsIDE4MCwgOTcsIDAuNSk7XFxufVxcblxcbi5idG4taW5mbyB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxN2EyYjg7XFxuICBib3JkZXItY29sb3I6ICMxN2EyYjg7XFxufVxcblxcbi5idG4taW5mbzpob3ZlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxMzg0OTY7XFxuICBib3JkZXItY29sb3I6ICMxMTdhOGI7XFxufVxcblxcbi5idG4taW5mbzpmb2N1cywgLmJ0bi1pbmZvLmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDU4LCAxNzYsIDE5NSwgMC41KTtcXG59XFxuXFxuLmJ0bi1pbmZvLmRpc2FibGVkLCAuYnRuLWluZm86ZGlzYWJsZWQge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTdhMmI4O1xcbiAgYm9yZGVyLWNvbG9yOiAjMTdhMmI4O1xcbn1cXG5cXG4uYnRuLWluZm86bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlLCAuYnRuLWluZm86bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlLFxcbi5zaG93ID4gLmJ0bi1pbmZvLmRyb3Bkb3duLXRvZ2dsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxMTdhOGI7XFxuICBib3JkZXItY29sb3I6ICMxMDcwN2Y7XFxufVxcblxcbi5idG4taW5mbzpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmU6Zm9jdXMsIC5idG4taW5mbzpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsXFxuLnNob3cgPiAuYnRuLWluZm8uZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDU4LCAxNzYsIDE5NSwgMC41KTtcXG59XFxuXFxuLmJ0bi13YXJuaW5nIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYzEwNztcXG4gIGJvcmRlci1jb2xvcjogI2ZmYzEwNztcXG59XFxuXFxuLmJ0bi13YXJuaW5nOmhvdmVyIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UwYTgwMDtcXG4gIGJvcmRlci1jb2xvcjogI2QzOWUwMDtcXG59XFxuXFxuLmJ0bi13YXJuaW5nOmZvY3VzLCAuYnRuLXdhcm5pbmcuZm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjIyLCAxNzAsIDEyLCAwLjUpO1xcbn1cXG5cXG4uYnRuLXdhcm5pbmcuZGlzYWJsZWQsIC5idG4td2FybmluZzpkaXNhYmxlZCB7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmMxMDc7XFxuICBib3JkZXItY29sb3I6ICNmZmMxMDc7XFxufVxcblxcbi5idG4td2FybmluZzpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmUsIC5idG4td2FybmluZzpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmUsXFxuLnNob3cgPiAuYnRuLXdhcm5pbmcuZHJvcGRvd24tdG9nZ2xlIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QzOWUwMDtcXG4gIGJvcmRlci1jb2xvcjogI2M2OTUwMDtcXG59XFxuXFxuLmJ0bi13YXJuaW5nOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZTpmb2N1cywgLmJ0bi13YXJuaW5nOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZTpmb2N1cyxcXG4uc2hvdyA+IC5idG4td2FybmluZy5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjIyLCAxNzAsIDEyLCAwLjUpO1xcbn1cXG5cXG4uYnRuLWRhbmdlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkYzM1NDU7XFxuICBib3JkZXItY29sb3I6ICNkYzM1NDU7XFxufVxcblxcbi5idG4tZGFuZ2VyOmhvdmVyIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M4MjMzMztcXG4gIGJvcmRlci1jb2xvcjogI2JkMjEzMDtcXG59XFxuXFxuLmJ0bi1kYW5nZXI6Zm9jdXMsIC5idG4tZGFuZ2VyLmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDIyNSwgODMsIDk3LCAwLjUpO1xcbn1cXG5cXG4uYnRuLWRhbmdlci5kaXNhYmxlZCwgLmJ0bi1kYW5nZXI6ZGlzYWJsZWQge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGMzNTQ1O1xcbiAgYm9yZGVyLWNvbG9yOiAjZGMzNTQ1O1xcbn1cXG5cXG4uYnRuLWRhbmdlcjpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmUsIC5idG4tZGFuZ2VyOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSxcXG4uc2hvdyA+IC5idG4tZGFuZ2VyLmRyb3Bkb3duLXRvZ2dsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiZDIxMzA7XFxuICBib3JkZXItY29sb3I6ICNiMjFmMmQ7XFxufVxcblxcbi5idG4tZGFuZ2VyOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZTpmb2N1cywgLmJ0bi1kYW5nZXI6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlOmZvY3VzLFxcbi5zaG93ID4gLmJ0bi1kYW5nZXIuZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDIyNSwgODMsIDk3LCAwLjUpO1xcbn1cXG5cXG4uYnRuLWxpZ2h0IHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcXG4gIGJvcmRlci1jb2xvcjogI2Y4ZjlmYTtcXG59XFxuXFxuLmJ0bi1saWdodDpob3ZlciB7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlMmU2ZWE7XFxuICBib3JkZXItY29sb3I6ICNkYWUwZTU7XFxufVxcblxcbi5idG4tbGlnaHQ6Zm9jdXMsIC5idG4tbGlnaHQuZm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjE2LCAyMTcsIDIxOSwgMC41KTtcXG59XFxuXFxuLmJ0bi1saWdodC5kaXNhYmxlZCwgLmJ0bi1saWdodDpkaXNhYmxlZCB7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmOGY5ZmE7XFxuICBib3JkZXItY29sb3I6ICNmOGY5ZmE7XFxufVxcblxcbi5idG4tbGlnaHQ6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlLCAuYnRuLWxpZ2h0Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSxcXG4uc2hvdyA+IC5idG4tbGlnaHQuZHJvcGRvd24tdG9nZ2xlIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RhZTBlNTtcXG4gIGJvcmRlci1jb2xvcjogI2QzZDlkZjtcXG59XFxuXFxuLmJ0bi1saWdodDpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmU6Zm9jdXMsIC5idG4tbGlnaHQ6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlOmZvY3VzLFxcbi5zaG93ID4gLmJ0bi1saWdodC5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjE2LCAyMTcsIDIxOSwgMC41KTtcXG59XFxuXFxuLmJ0bi1kYXJrIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM0M2E0MDtcXG4gIGJvcmRlci1jb2xvcjogIzM0M2E0MDtcXG59XFxuXFxuLmJ0bi1kYXJrOmhvdmVyIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzIzMjcyYjtcXG4gIGJvcmRlci1jb2xvcjogIzFkMjEyNDtcXG59XFxuXFxuLmJ0bi1kYXJrOmZvY3VzLCAuYnRuLWRhcmsuZm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoODIsIDg4LCA5MywgMC41KTtcXG59XFxuXFxuLmJ0bi1kYXJrLmRpc2FibGVkLCAuYnRuLWRhcms6ZGlzYWJsZWQge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzQzYTQwO1xcbiAgYm9yZGVyLWNvbG9yOiAjMzQzYTQwO1xcbn1cXG5cXG4uYnRuLWRhcms6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlLCAuYnRuLWRhcms6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlLFxcbi5zaG93ID4gLmJ0bi1kYXJrLmRyb3Bkb3duLXRvZ2dsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxZDIxMjQ7XFxuICBib3JkZXItY29sb3I6ICMxNzFhMWQ7XFxufVxcblxcbi5idG4tZGFyazpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmU6Zm9jdXMsIC5idG4tZGFyazpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsXFxuLnNob3cgPiAuYnRuLWRhcmsuZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDgyLCA4OCwgOTMsIDAuNSk7XFxufVxcblxcbi5idG4tb3V0bGluZS1wcmltYXJ5IHtcXG4gIGNvbG9yOiAjMDA3YmZmO1xcbiAgYm9yZGVyLWNvbG9yOiAjMDA3YmZmO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtcHJpbWFyeTpob3ZlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDdiZmY7XFxuICBib3JkZXItY29sb3I6ICMwMDdiZmY7XFxufVxcblxcbi5idG4tb3V0bGluZS1wcmltYXJ5OmZvY3VzLCAuYnRuLW91dGxpbmUtcHJpbWFyeS5mb2N1cyB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgwLCAxMjMsIDI1NSwgMC41KTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQsIC5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVkIHtcXG4gIGNvbG9yOiAjMDA3YmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5idG4tb3V0bGluZS1wcmltYXJ5Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZSwgLmJ0bi1vdXRsaW5lLXByaW1hcnk6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlLFxcbi5zaG93ID4gLmJ0bi1vdXRsaW5lLXByaW1hcnkuZHJvcGRvd24tdG9nZ2xlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjtcXG4gIGJvcmRlci1jb2xvcjogIzAwN2JmZjtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLXByaW1hcnk6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlOmZvY3VzLCAuYnRuLW91dGxpbmUtcHJpbWFyeTpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsXFxuLnNob3cgPiAuYnRuLW91dGxpbmUtcHJpbWFyeS5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMCwgMTIzLCAyNTUsIDAuNSk7XFxufVxcblxcbi5idG4tb3V0bGluZS1zZWNvbmRhcnkge1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICBib3JkZXItY29sb3I6ICM2Yzc1N2Q7XFxufVxcblxcbi5idG4tb3V0bGluZS1zZWNvbmRhcnk6aG92ZXIge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM3NTdkO1xcbiAgYm9yZGVyLWNvbG9yOiAjNmM3NTdkO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmZvY3VzLCAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDEwOCwgMTE3LCAxMjUsIDAuNSk7XFxufVxcblxcbi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQsIC5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQge1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmUsIC5idG4tb3V0bGluZS1zZWNvbmRhcnk6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlLFxcbi5zaG93ID4gLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kcm9wZG93bi10b2dnbGUge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM3NTdkO1xcbiAgYm9yZGVyLWNvbG9yOiAjNmM3NTdkO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZTpmb2N1cywgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsXFxuLnNob3cgPiAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgxMDgsIDExNywgMTI1LCAwLjUpO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtc3VjY2VzcyB7XFxuICBjb2xvcjogIzI4YTc0NTtcXG4gIGJvcmRlci1jb2xvcjogIzI4YTc0NTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6aG92ZXIge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjhhNzQ1O1xcbiAgYm9yZGVyLWNvbG9yOiAjMjhhNzQ1O1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtc3VjY2Vzczpmb2N1cywgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNDAsIDE2NywgNjksIDAuNSk7XFxufVxcblxcbi5idG4tb3V0bGluZS1zdWNjZXNzLmRpc2FibGVkLCAuYnRuLW91dGxpbmUtc3VjY2VzczpkaXNhYmxlZCB7XFxuICBjb2xvcjogIzI4YTc0NTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtc3VjY2Vzczpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmUsIC5idG4tb3V0bGluZS1zdWNjZXNzOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSxcXG4uc2hvdyA+IC5idG4tb3V0bGluZS1zdWNjZXNzLmRyb3Bkb3duLXRvZ2dsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyOGE3NDU7XFxuICBib3JkZXItY29sb3I6ICMyOGE3NDU7XFxufVxcblxcbi5idG4tb3V0bGluZS1zdWNjZXNzOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZTpmb2N1cywgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlOmZvY3VzLFxcbi5zaG93ID4gLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDQwLCAxNjcsIDY5LCAwLjUpO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtaW5mbyB7XFxuICBjb2xvcjogIzE3YTJiODtcXG4gIGJvcmRlci1jb2xvcjogIzE3YTJiODtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWluZm86aG92ZXIge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTdhMmI4O1xcbiAgYm9yZGVyLWNvbG9yOiAjMTdhMmI4O1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtaW5mbzpmb2N1cywgLmJ0bi1vdXRsaW5lLWluZm8uZm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjMsIDE2MiwgMTg0LCAwLjUpO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCwgLmJ0bi1vdXRsaW5lLWluZm86ZGlzYWJsZWQge1xcbiAgY29sb3I6ICMxN2EyYjg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWluZm86bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlLCAuYnRuLW91dGxpbmUtaW5mbzpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmUsXFxuLnNob3cgPiAuYnRuLW91dGxpbmUtaW5mby5kcm9wZG93bi10b2dnbGUge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTdhMmI4O1xcbiAgYm9yZGVyLWNvbG9yOiAjMTdhMmI4O1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtaW5mbzpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmU6Zm9jdXMsIC5idG4tb3V0bGluZS1pbmZvOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZTpmb2N1cyxcXG4uc2hvdyA+IC5idG4tb3V0bGluZS1pbmZvLmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgyMywgMTYyLCAxODQsIDAuNSk7XFxufVxcblxcbi5idG4tb3V0bGluZS13YXJuaW5nIHtcXG4gIGNvbG9yOiAjZmZjMTA3O1xcbiAgYm9yZGVyLWNvbG9yOiAjZmZjMTA3O1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtd2FybmluZzpob3ZlciB7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmMxMDc7XFxuICBib3JkZXItY29sb3I6ICNmZmMxMDc7XFxufVxcblxcbi5idG4tb3V0bGluZS13YXJuaW5nOmZvY3VzLCAuYnRuLW91dGxpbmUtd2FybmluZy5mb2N1cyB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgyNTUsIDE5MywgNywgMC41KTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLXdhcm5pbmcuZGlzYWJsZWQsIC5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkIHtcXG4gIGNvbG9yOiAjZmZjMTA3O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5idG4tb3V0bGluZS13YXJuaW5nOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZSwgLmJ0bi1vdXRsaW5lLXdhcm5pbmc6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlLFxcbi5zaG93ID4gLmJ0bi1vdXRsaW5lLXdhcm5pbmcuZHJvcGRvd24tdG9nZ2xlIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYzEwNztcXG4gIGJvcmRlci1jb2xvcjogI2ZmYzEwNztcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLXdhcm5pbmc6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlOmZvY3VzLCAuYnRuLW91dGxpbmUtd2FybmluZzpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsXFxuLnNob3cgPiAuYnRuLW91dGxpbmUtd2FybmluZy5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjU1LCAxOTMsIDcsIDAuNSk7XFxufVxcblxcbi5idG4tb3V0bGluZS1kYW5nZXIge1xcbiAgY29sb3I6ICNkYzM1NDU7XFxuICBib3JkZXItY29sb3I6ICNkYzM1NDU7XFxufVxcblxcbi5idG4tb3V0bGluZS1kYW5nZXI6aG92ZXIge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGMzNTQ1O1xcbiAgYm9yZGVyLWNvbG9yOiAjZGMzNTQ1O1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtZGFuZ2VyOmZvY3VzLCAuYnRuLW91dGxpbmUtZGFuZ2VyLmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDIyMCwgNTMsIDY5LCAwLjUpO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtZGFuZ2VyLmRpc2FibGVkLCAuYnRuLW91dGxpbmUtZGFuZ2VyOmRpc2FibGVkIHtcXG4gIGNvbG9yOiAjZGMzNTQ1O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5idG4tb3V0bGluZS1kYW5nZXI6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlLCAuYnRuLW91dGxpbmUtZGFuZ2VyOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSxcXG4uc2hvdyA+IC5idG4tb3V0bGluZS1kYW5nZXIuZHJvcGRvd24tdG9nZ2xlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RjMzU0NTtcXG4gIGJvcmRlci1jb2xvcjogI2RjMzU0NTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWRhbmdlcjpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmU6Zm9jdXMsIC5idG4tb3V0bGluZS1kYW5nZXI6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlOmZvY3VzLFxcbi5zaG93ID4gLmJ0bi1vdXRsaW5lLWRhbmdlci5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjIwLCA1MywgNjksIDAuNSk7XFxufVxcblxcbi5idG4tb3V0bGluZS1saWdodCB7XFxuICBjb2xvcjogI2Y4ZjlmYTtcXG4gIGJvcmRlci1jb2xvcjogI2Y4ZjlmYTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWxpZ2h0OmhvdmVyIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcXG4gIGJvcmRlci1jb2xvcjogI2Y4ZjlmYTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWxpZ2h0OmZvY3VzLCAuYnRuLW91dGxpbmUtbGlnaHQuZm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjQ4LCAyNDksIDI1MCwgMC41KTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWxpZ2h0LmRpc2FibGVkLCAuYnRuLW91dGxpbmUtbGlnaHQ6ZGlzYWJsZWQge1xcbiAgY29sb3I6ICNmOGY5ZmE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWxpZ2h0Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZSwgLmJ0bi1vdXRsaW5lLWxpZ2h0Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSxcXG4uc2hvdyA+IC5idG4tb3V0bGluZS1saWdodC5kcm9wZG93bi10b2dnbGUge1xcbiAgY29sb3I6ICMyMTI1Mjk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOWZhO1xcbiAgYm9yZGVyLWNvbG9yOiAjZjhmOWZhO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtbGlnaHQ6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlOmZvY3VzLCAuYnRuLW91dGxpbmUtbGlnaHQ6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlOmZvY3VzLFxcbi5zaG93ID4gLmJ0bi1vdXRsaW5lLWxpZ2h0LmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgyNDgsIDI0OSwgMjUwLCAwLjUpO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtZGFyayB7XFxuICBjb2xvcjogIzM0M2E0MDtcXG4gIGJvcmRlci1jb2xvcjogIzM0M2E0MDtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWRhcms6aG92ZXIge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzQzYTQwO1xcbiAgYm9yZGVyLWNvbG9yOiAjMzQzYTQwO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtZGFyazpmb2N1cywgLmJ0bi1vdXRsaW5lLWRhcmsuZm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNTIsIDU4LCA2NCwgMC41KTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWRhcmsuZGlzYWJsZWQsIC5idG4tb3V0bGluZS1kYXJrOmRpc2FibGVkIHtcXG4gIGNvbG9yOiAjMzQzYTQwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5idG4tb3V0bGluZS1kYXJrOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZSwgLmJ0bi1vdXRsaW5lLWRhcms6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlLFxcbi5zaG93ID4gLmJ0bi1vdXRsaW5lLWRhcmsuZHJvcGRvd24tdG9nZ2xlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM0M2E0MDtcXG4gIGJvcmRlci1jb2xvcjogIzM0M2E0MDtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWRhcms6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlOmZvY3VzLCAuYnRuLW91dGxpbmUtZGFyazpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsXFxuLnNob3cgPiAuYnRuLW91dGxpbmUtZGFyay5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNTIsIDU4LCA2NCwgMC41KTtcXG59XFxuXFxuLmJ0bi1saW5rIHtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBjb2xvcjogIzAwN2JmZjtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuXFxuLmJ0bi1saW5rOmhvdmVyIHtcXG4gIGNvbG9yOiAjMDA1NmIzO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxufVxcblxcbi5idG4tbGluazpmb2N1cywgLmJ0bi1saW5rLmZvY3VzIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxuXFxuLmJ0bi1saW5rOmRpc2FibGVkLCAuYnRuLWxpbmsuZGlzYWJsZWQge1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuLmJ0bi1sZywgLmJ0bi1ncm91cC1sZyA+IC5idG4ge1xcbiAgcGFkZGluZzogMC41cmVtIDFyZW07XFxuICBmb250LXNpemU6IDEuMjVyZW07XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgYm9yZGVyLXJhZGl1czogMC4zcmVtO1xcbn1cXG5cXG4uYnRuLXNtLCAuYnRuLWdyb3VwLXNtID4gLmJ0biB7XFxuICBwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbTtcXG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgYm9yZGVyLXJhZGl1czogMC4ycmVtO1xcbn1cXG5cXG4uYnRuLWJsb2NrIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcblxcbi5idG4tYmxvY2sgKyAuYnRuLWJsb2NrIHtcXG4gIG1hcmdpbi10b3A6IDAuNXJlbTtcXG59XFxuXFxuaW5wdXRbdHlwZT1cXFwic3VibWl0XFxcIl0uYnRuLWJsb2NrLFxcbmlucHV0W3R5cGU9XFxcInJlc2V0XFxcIl0uYnRuLWJsb2NrLFxcbmlucHV0W3R5cGU9XFxcImJ1dHRvblxcXCJdLmJ0bi1ibG9jayB7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuXFxuLmZhZGUge1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBsaW5lYXI7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAuZmFkZSB7XFxuICAgIHRyYW5zaXRpb246IG5vbmU7XFxuICB9XFxufVxcblxcbi5mYWRlOm5vdCguc2hvdykge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuXFxuLmNvbGxhcHNlOm5vdCguc2hvdykge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLmNvbGxhcHNpbmcge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgaGVpZ2h0OiAwO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHRyYW5zaXRpb246IGhlaWdodCAwLjM1cyBlYXNlO1xcbn1cXG5cXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xcbiAgLmNvbGxhcHNpbmcge1xcbiAgICB0cmFuc2l0aW9uOiBub25lO1xcbiAgfVxcbn1cXG5cXG4uZHJvcHVwLFxcbi5kcm9wcmlnaHQsXFxuLmRyb3Bkb3duLFxcbi5kcm9wbGVmdCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbi5kcm9wZG93bi10b2dnbGUge1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG59XFxuXFxuLmRyb3Bkb3duLXRvZ2dsZTo6YWZ0ZXIge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luLWxlZnQ6IDAuMjU1ZW07XFxuICB2ZXJ0aWNhbC1hbGlnbjogMC4yNTVlbTtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgYm9yZGVyLXRvcDogMC4zZW0gc29saWQ7XFxuICBib3JkZXItcmlnaHQ6IDAuM2VtIHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWJvdHRvbTogMDtcXG4gIGJvcmRlci1sZWZ0OiAwLjNlbSBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmRyb3Bkb3duLXRvZ2dsZTplbXB0eTo6YWZ0ZXIge1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxufVxcblxcbi5kcm9wZG93bi1tZW51IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMTAwJTtcXG4gIGxlZnQ6IDA7XFxuICB6LWluZGV4OiAxMDAwO1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIGZsb2F0OiBsZWZ0O1xcbiAgbWluLXdpZHRoOiAxMHJlbTtcXG4gIHBhZGRpbmc6IDAuNXJlbSAwO1xcbiAgbWFyZ2luOiAwLjEyNXJlbSAwIDA7XFxuICBmb250LXNpemU6IDFyZW07XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICBsaXN0LXN0eWxlOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLmRyb3Bkb3duLW1lbnUtbGVmdCB7XFxuICByaWdodDogYXV0bztcXG4gIGxlZnQ6IDA7XFxufVxcblxcbi5kcm9wZG93bi1tZW51LXJpZ2h0IHtcXG4gIHJpZ2h0OiAwO1xcbiAgbGVmdDogYXV0bztcXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDU3NnB4KSB7XFxuICAuZHJvcGRvd24tbWVudS1zbS1sZWZ0IHtcXG4gICAgcmlnaHQ6IGF1dG87XFxuICAgIGxlZnQ6IDA7XFxuICB9XFxuICAuZHJvcGRvd24tbWVudS1zbS1yaWdodCB7XFxuICAgIHJpZ2h0OiAwO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gIC5kcm9wZG93bi1tZW51LW1kLWxlZnQge1xcbiAgICByaWdodDogYXV0bztcXG4gICAgbGVmdDogMDtcXG4gIH1cXG4gIC5kcm9wZG93bi1tZW51LW1kLXJpZ2h0IHtcXG4gICAgcmlnaHQ6IDA7XFxuICAgIGxlZnQ6IGF1dG87XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xcbiAgLmRyb3Bkb3duLW1lbnUtbGctbGVmdCB7XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgICBsZWZ0OiAwO1xcbiAgfVxcbiAgLmRyb3Bkb3duLW1lbnUtbGctcmlnaHQge1xcbiAgICByaWdodDogMDtcXG4gICAgbGVmdDogYXV0bztcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xcbiAgLmRyb3Bkb3duLW1lbnUteGwtbGVmdCB7XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgICBsZWZ0OiAwO1xcbiAgfVxcbiAgLmRyb3Bkb3duLW1lbnUteGwtcmlnaHQge1xcbiAgICByaWdodDogMDtcXG4gICAgbGVmdDogYXV0bztcXG4gIH1cXG59XFxuXFxuLmRyb3B1cCAuZHJvcGRvd24tbWVudSB7XFxuICB0b3A6IGF1dG87XFxuICBib3R0b206IDEwMCU7XFxuICBtYXJnaW4tdG9wOiAwO1xcbiAgbWFyZ2luLWJvdHRvbTogMC4xMjVyZW07XFxufVxcblxcbi5kcm9wdXAgLmRyb3Bkb3duLXRvZ2dsZTo6YWZ0ZXIge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luLWxlZnQ6IDAuMjU1ZW07XFxuICB2ZXJ0aWNhbC1hbGlnbjogMC4yNTVlbTtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgYm9yZGVyLXRvcDogMDtcXG4gIGJvcmRlci1yaWdodDogMC4zZW0gc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItYm90dG9tOiAwLjNlbSBzb2xpZDtcXG4gIGJvcmRlci1sZWZ0OiAwLjNlbSBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmRyb3B1cCAuZHJvcGRvd24tdG9nZ2xlOmVtcHR5OjphZnRlciB7XFxuICBtYXJnaW4tbGVmdDogMDtcXG59XFxuXFxuLmRyb3ByaWdodCAuZHJvcGRvd24tbWVudSB7XFxuICB0b3A6IDA7XFxuICByaWdodDogYXV0bztcXG4gIGxlZnQ6IDEwMCU7XFxuICBtYXJnaW4tdG9wOiAwO1xcbiAgbWFyZ2luLWxlZnQ6IDAuMTI1cmVtO1xcbn1cXG5cXG4uZHJvcHJpZ2h0IC5kcm9wZG93bi10b2dnbGU6OmFmdGVyIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG1hcmdpbi1sZWZ0OiAwLjI1NWVtO1xcbiAgdmVydGljYWwtYWxpZ246IDAuMjU1ZW07XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGJvcmRlci10b3A6IDAuM2VtIHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJpZ2h0OiAwO1xcbiAgYm9yZGVyLWJvdHRvbTogMC4zZW0gc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItbGVmdDogMC4zZW0gc29saWQ7XFxufVxcblxcbi5kcm9wcmlnaHQgLmRyb3Bkb3duLXRvZ2dsZTplbXB0eTo6YWZ0ZXIge1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxufVxcblxcbi5kcm9wcmlnaHQgLmRyb3Bkb3duLXRvZ2dsZTo6YWZ0ZXIge1xcbiAgdmVydGljYWwtYWxpZ246IDA7XFxufVxcblxcbi5kcm9wbGVmdCAuZHJvcGRvd24tbWVudSB7XFxuICB0b3A6IDA7XFxuICByaWdodDogMTAwJTtcXG4gIGxlZnQ6IGF1dG87XFxuICBtYXJnaW4tdG9wOiAwO1xcbiAgbWFyZ2luLXJpZ2h0OiAwLjEyNXJlbTtcXG59XFxuXFxuLmRyb3BsZWZ0IC5kcm9wZG93bi10b2dnbGU6OmFmdGVyIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG1hcmdpbi1sZWZ0OiAwLjI1NWVtO1xcbiAgdmVydGljYWwtYWxpZ246IDAuMjU1ZW07XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG59XFxuXFxuLmRyb3BsZWZ0IC5kcm9wZG93bi10b2dnbGU6OmFmdGVyIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi5kcm9wbGVmdCAuZHJvcGRvd24tdG9nZ2xlOjpiZWZvcmUge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luLXJpZ2h0OiAwLjI1NWVtO1xcbiAgdmVydGljYWwtYWxpZ246IDAuMjU1ZW07XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGJvcmRlci10b3A6IDAuM2VtIHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJpZ2h0OiAwLjNlbSBzb2xpZDtcXG4gIGJvcmRlci1ib3R0b206IDAuM2VtIHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uZHJvcGxlZnQgLmRyb3Bkb3duLXRvZ2dsZTplbXB0eTo6YWZ0ZXIge1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxufVxcblxcbi5kcm9wbGVmdCAuZHJvcGRvd24tdG9nZ2xlOjpiZWZvcmUge1xcbiAgdmVydGljYWwtYWxpZ246IDA7XFxufVxcblxcbi5kcm9wZG93bi1tZW51W3gtcGxhY2VtZW50Xj1cXFwidG9wXFxcIl0sIC5kcm9wZG93bi1tZW51W3gtcGxhY2VtZW50Xj1cXFwicmlnaHRcXFwiXSwgLmRyb3Bkb3duLW1lbnVbeC1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSwgLmRyb3Bkb3duLW1lbnVbeC1wbGFjZW1lbnRePVxcXCJsZWZ0XFxcIl0ge1xcbiAgcmlnaHQ6IGF1dG87XFxuICBib3R0b206IGF1dG87XFxufVxcblxcbi5kcm9wZG93bi1kaXZpZGVyIHtcXG4gIGhlaWdodDogMDtcXG4gIG1hcmdpbjogMC41cmVtIDA7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlOWVjZWY7XFxufVxcblxcbi5kcm9wZG93bi1pdGVtIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nOiAwLjI1cmVtIDEuNXJlbTtcXG4gIGNsZWFyOiBib3RoO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgdGV4dC1hbGlnbjogaW5oZXJpdDtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogMDtcXG59XFxuXFxuLmRyb3Bkb3duLWl0ZW06aG92ZXIsIC5kcm9wZG93bi1pdGVtOmZvY3VzIHtcXG4gIGNvbG9yOiAjMTYxODFiO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcXG59XFxuXFxuLmRyb3Bkb3duLWl0ZW0uYWN0aXZlLCAuZHJvcGRvd24taXRlbTphY3RpdmUge1xcbiAgY29sb3I6ICNmZmY7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3YmZmO1xcbn1cXG5cXG4uZHJvcGRvd24taXRlbS5kaXNhYmxlZCwgLmRyb3Bkb3duLWl0ZW06ZGlzYWJsZWQge1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uZHJvcGRvd24tbWVudS5zaG93IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4uZHJvcGRvd24taGVhZGVyIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgcGFkZGluZzogMC41cmVtIDEuNXJlbTtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxuICBmb250LXNpemU6IDAuODc1cmVtO1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG5cXG4uZHJvcGRvd24taXRlbS10ZXh0IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgcGFkZGluZzogMC4yNXJlbSAxLjVyZW07XFxuICBjb2xvcjogIzIxMjUyOTtcXG59XFxuXFxuLmJ0bi1ncm91cCxcXG4uYnRuLWdyb3VwLXZlcnRpY2FsIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG59XFxuXFxuLmJ0bi1ncm91cCA+IC5idG4sXFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgLW1zLWZsZXg6IDEgMSBhdXRvO1xcbiAgZmxleDogMSAxIGF1dG87XFxufVxcblxcbi5idG4tZ3JvdXAgPiAuYnRuOmhvdmVyLFxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOmhvdmVyIHtcXG4gIHotaW5kZXg6IDE7XFxufVxcblxcbi5idG4tZ3JvdXAgPiAuYnRuOmZvY3VzLCAuYnRuLWdyb3VwID4gLmJ0bjphY3RpdmUsIC5idG4tZ3JvdXAgPiAuYnRuLmFjdGl2ZSxcXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bjpmb2N1cyxcXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bjphY3RpdmUsXFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4uYWN0aXZlIHtcXG4gIHotaW5kZXg6IDE7XFxufVxcblxcbi5idG4tdG9vbGJhciB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxufVxcblxcbi5idG4tdG9vbGJhciAuaW5wdXQtZ3JvdXAge1xcbiAgd2lkdGg6IGF1dG87XFxufVxcblxcbi5idG4tZ3JvdXAgPiAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpLFxcbi5idG4tZ3JvdXAgPiAuYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xcbn1cXG5cXG4uYnRuLWdyb3VwID4gLmJ0bjpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKSxcXG4uYnRuLWdyb3VwID4gLmJ0bi1ncm91cDpub3QoOmxhc3QtY2hpbGQpID4gLmJ0biB7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xcbn1cXG5cXG4uYnRuLWdyb3VwID4gLmJ0bjpub3QoOmZpcnN0LWNoaWxkKSxcXG4uYnRuLWdyb3VwID4gLmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKSA+IC5idG4ge1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XFxufVxcblxcbi5kcm9wZG93bi10b2dnbGUtc3BsaXQge1xcbiAgcGFkZGluZy1yaWdodDogMC41NjI1cmVtO1xcbiAgcGFkZGluZy1sZWZ0OiAwLjU2MjVyZW07XFxufVxcblxcbi5kcm9wZG93bi10b2dnbGUtc3BsaXQ6OmFmdGVyLFxcbi5kcm9wdXAgLmRyb3Bkb3duLXRvZ2dsZS1zcGxpdDo6YWZ0ZXIsXFxuLmRyb3ByaWdodCAuZHJvcGRvd24tdG9nZ2xlLXNwbGl0OjphZnRlciB7XFxuICBtYXJnaW4tbGVmdDogMDtcXG59XFxuXFxuLmRyb3BsZWZ0IC5kcm9wZG93bi10b2dnbGUtc3BsaXQ6OmJlZm9yZSB7XFxuICBtYXJnaW4tcmlnaHQ6IDA7XFxufVxcblxcbi5idG4tc20gKyAuZHJvcGRvd24tdG9nZ2xlLXNwbGl0LCAuYnRuLWdyb3VwLXNtID4gLmJ0biArIC5kcm9wZG93bi10b2dnbGUtc3BsaXQge1xcbiAgcGFkZGluZy1yaWdodDogMC4zNzVyZW07XFxuICBwYWRkaW5nLWxlZnQ6IDAuMzc1cmVtO1xcbn1cXG5cXG4uYnRuLWxnICsgLmRyb3Bkb3duLXRvZ2dsZS1zcGxpdCwgLmJ0bi1ncm91cC1sZyA+IC5idG4gKyAuZHJvcGRvd24tdG9nZ2xlLXNwbGl0IHtcXG4gIHBhZGRpbmctcmlnaHQ6IDAuNzVyZW07XFxuICBwYWRkaW5nLWxlZnQ6IDAuNzVyZW07XFxufVxcblxcbi5idG4tZ3JvdXAtdmVydGljYWwge1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0O1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxuICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuXFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4sXFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXAge1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcblxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpLFxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gIG1hcmdpbi10b3A6IC0xcHg7XFxufVxcblxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOm5vdCg6bGFzdC1jaGlsZCk6bm90KC5kcm9wZG93bi10b2dnbGUpLFxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuIHtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcXG59XFxuXFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG46bm90KDpmaXJzdC1jaGlsZCksXFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXA6bm90KDpmaXJzdC1jaGlsZCkgPiAuYnRuIHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG59XFxuXFxuLmJ0bi1ncm91cC10b2dnbGUgPiAuYnRuLFxcbi5idG4tZ3JvdXAtdG9nZ2xlID4gLmJ0bi1ncm91cCA+IC5idG4ge1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG59XFxuXFxuLmJ0bi1ncm91cC10b2dnbGUgPiAuYnRuIGlucHV0W3R5cGU9XFxcInJhZGlvXFxcIl0sXFxuLmJ0bi1ncm91cC10b2dnbGUgPiAuYnRuIGlucHV0W3R5cGU9XFxcImNoZWNrYm94XFxcIl0sXFxuLmJ0bi1ncm91cC10b2dnbGUgPiAuYnRuLWdyb3VwID4gLmJ0biBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdLFxcbi5idG4tZ3JvdXAtdG9nZ2xlID4gLmJ0bi1ncm91cCA+IC5idG4gaW5wdXRbdHlwZT1cXFwiY2hlY2tib3hcXFwiXSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBjbGlwOiByZWN0KDAsIDAsIDAsIDApO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi5pbnB1dC1ncm91cCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgLW1zLWZsZXgtYWxpZ246IHN0cmV0Y2g7XFxuICBhbGlnbi1pdGVtczogc3RyZXRjaDtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sLFxcbi5pbnB1dC1ncm91cCA+IC5mb3JtLWNvbnRyb2wtcGxhaW50ZXh0LFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tc2VsZWN0LFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tZmlsZSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAtbXMtZmxleDogMSAxIGF1dG87XFxuICBmbGV4OiAxIDEgYXV0bztcXG4gIHdpZHRoOiAxJTtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxufVxcblxcbi5pbnB1dC1ncm91cCA+IC5mb3JtLWNvbnRyb2wgKyAuZm9ybS1jb250cm9sLFxcbi5pbnB1dC1ncm91cCA+IC5mb3JtLWNvbnRyb2wgKyAuY3VzdG9tLXNlbGVjdCxcXG4uaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sICsgLmN1c3RvbS1maWxlLFxcbi5pbnB1dC1ncm91cCA+IC5mb3JtLWNvbnRyb2wtcGxhaW50ZXh0ICsgLmZvcm0tY29udHJvbCxcXG4uaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sLXBsYWludGV4dCArIC5jdXN0b20tc2VsZWN0LFxcbi5pbnB1dC1ncm91cCA+IC5mb3JtLWNvbnRyb2wtcGxhaW50ZXh0ICsgLmN1c3RvbS1maWxlLFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tc2VsZWN0ICsgLmZvcm0tY29udHJvbCxcXG4uaW5wdXQtZ3JvdXAgPiAuY3VzdG9tLXNlbGVjdCArIC5jdXN0b20tc2VsZWN0LFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tc2VsZWN0ICsgLmN1c3RvbS1maWxlLFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tZmlsZSArIC5mb3JtLWNvbnRyb2wsXFxuLmlucHV0LWdyb3VwID4gLmN1c3RvbS1maWxlICsgLmN1c3RvbS1zZWxlY3QsXFxuLmlucHV0LWdyb3VwID4gLmN1c3RvbS1maWxlICsgLmN1c3RvbS1maWxlIHtcXG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sOmZvY3VzLFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tc2VsZWN0OmZvY3VzLFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tZmlsZSAuY3VzdG9tLWZpbGUtaW5wdXQ6Zm9jdXMgfiAuY3VzdG9tLWZpbGUtbGFiZWwge1xcbiAgei1pbmRleDogMztcXG59XFxuXFxuLmlucHV0LWdyb3VwID4gLmN1c3RvbS1maWxlIC5jdXN0b20tZmlsZS1pbnB1dDpmb2N1cyB7XFxuICB6LWluZGV4OiA0O1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sOm5vdCg6bGFzdC1jaGlsZCksXFxuLmlucHV0LWdyb3VwID4gLmN1c3RvbS1zZWxlY3Q6bm90KDpsYXN0LWNoaWxkKSB7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sOm5vdCg6Zmlyc3QtY2hpbGQpLFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tc2VsZWN0Om5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAgPiAuY3VzdG9tLWZpbGUge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxufVxcblxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tZmlsZTpub3QoOmxhc3QtY2hpbGQpIC5jdXN0b20tZmlsZS1sYWJlbCxcXG4uaW5wdXQtZ3JvdXAgPiAuY3VzdG9tLWZpbGU6bm90KDpsYXN0LWNoaWxkKSAuY3VzdG9tLWZpbGUtbGFiZWw6OmFmdGVyIHtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XFxufVxcblxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tZmlsZTpub3QoOmZpcnN0LWNoaWxkKSAuY3VzdG9tLWZpbGUtbGFiZWwge1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XFxufVxcblxcbi5pbnB1dC1ncm91cC1wcmVwZW5kLFxcbi5pbnB1dC1ncm91cC1hcHBlbmQge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAtcHJlcGVuZCAuYnRuLFxcbi5pbnB1dC1ncm91cC1hcHBlbmQgLmJ0biB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB6LWluZGV4OiAyO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAtcHJlcGVuZCAuYnRuOmZvY3VzLFxcbi5pbnB1dC1ncm91cC1hcHBlbmQgLmJ0bjpmb2N1cyB7XFxuICB6LWluZGV4OiAzO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAtcHJlcGVuZCAuYnRuICsgLmJ0bixcXG4uaW5wdXQtZ3JvdXAtcHJlcGVuZCAuYnRuICsgLmlucHV0LWdyb3VwLXRleHQsXFxuLmlucHV0LWdyb3VwLXByZXBlbmQgLmlucHV0LWdyb3VwLXRleHQgKyAuaW5wdXQtZ3JvdXAtdGV4dCxcXG4uaW5wdXQtZ3JvdXAtcHJlcGVuZCAuaW5wdXQtZ3JvdXAtdGV4dCArIC5idG4sXFxuLmlucHV0LWdyb3VwLWFwcGVuZCAuYnRuICsgLmJ0bixcXG4uaW5wdXQtZ3JvdXAtYXBwZW5kIC5idG4gKyAuaW5wdXQtZ3JvdXAtdGV4dCxcXG4uaW5wdXQtZ3JvdXAtYXBwZW5kIC5pbnB1dC1ncm91cC10ZXh0ICsgLmlucHV0LWdyb3VwLXRleHQsXFxuLmlucHV0LWdyb3VwLWFwcGVuZCAuaW5wdXQtZ3JvdXAtdGV4dCArIC5idG4ge1xcbiAgbWFyZ2luLWxlZnQ6IC0xcHg7XFxufVxcblxcbi5pbnB1dC1ncm91cC1wcmVwZW5kIHtcXG4gIG1hcmdpbi1yaWdodDogLTFweDtcXG59XFxuXFxuLmlucHV0LWdyb3VwLWFwcGVuZCB7XFxuICBtYXJnaW4tbGVmdDogLTFweDtcXG59XFxuXFxuLmlucHV0LWdyb3VwLXRleHQge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBwYWRkaW5nOiAwLjM3NXJlbSAwLjc1cmVtO1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIGZvbnQtc2l6ZTogMXJlbTtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgY29sb3I6ICM0OTUwNTc7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U5ZWNlZjtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNjZWQ0ZGE7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAtdGV4dCBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdLFxcbi5pbnB1dC1ncm91cC10ZXh0IGlucHV0W3R5cGU9XFxcImNoZWNrYm94XFxcIl0ge1xcbiAgbWFyZ2luLXRvcDogMDtcXG59XFxuXFxuLmlucHV0LWdyb3VwLWxnID4gLmZvcm0tY29udHJvbDpub3QodGV4dGFyZWEpLFxcbi5pbnB1dC1ncm91cC1sZyA+IC5jdXN0b20tc2VsZWN0IHtcXG4gIGhlaWdodDogY2FsYygxLjVlbSArIDFyZW0gKyAycHgpO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAtbGcgPiAuZm9ybS1jb250cm9sLFxcbi5pbnB1dC1ncm91cC1sZyA+IC5jdXN0b20tc2VsZWN0LFxcbi5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1wcmVwZW5kID4gLmlucHV0LWdyb3VwLXRleHQsXFxuLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWFwcGVuZCA+IC5pbnB1dC1ncm91cC10ZXh0LFxcbi5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1wcmVwZW5kID4gLmJ0bixcXG4uaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYXBwZW5kID4gLmJ0biB7XFxuICBwYWRkaW5nOiAwLjVyZW0gMXJlbTtcXG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICBib3JkZXItcmFkaXVzOiAwLjNyZW07XFxufVxcblxcbi5pbnB1dC1ncm91cC1zbSA+IC5mb3JtLWNvbnRyb2w6bm90KHRleHRhcmVhKSxcXG4uaW5wdXQtZ3JvdXAtc20gPiAuY3VzdG9tLXNlbGVjdCB7XFxuICBoZWlnaHQ6IGNhbGMoMS41ZW0gKyAwLjVyZW0gKyAycHgpO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAtc20gPiAuZm9ybS1jb250cm9sLFxcbi5pbnB1dC1ncm91cC1zbSA+IC5jdXN0b20tc2VsZWN0LFxcbi5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1wcmVwZW5kID4gLmlucHV0LWdyb3VwLXRleHQsXFxuLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWFwcGVuZCA+IC5pbnB1dC1ncm91cC10ZXh0LFxcbi5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1wcmVwZW5kID4gLmJ0bixcXG4uaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYXBwZW5kID4gLmJ0biB7XFxuICBwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbTtcXG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgYm9yZGVyLXJhZGl1czogMC4ycmVtO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAtbGcgPiAuY3VzdG9tLXNlbGVjdCxcXG4uaW5wdXQtZ3JvdXAtc20gPiAuY3VzdG9tLXNlbGVjdCB7XFxuICBwYWRkaW5nLXJpZ2h0OiAxLjc1cmVtO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAgPiAuaW5wdXQtZ3JvdXAtcHJlcGVuZCA+IC5idG4sXFxuLmlucHV0LWdyb3VwID4gLmlucHV0LWdyb3VwLXByZXBlbmQgPiAuaW5wdXQtZ3JvdXAtdGV4dCxcXG4uaW5wdXQtZ3JvdXAgPiAuaW5wdXQtZ3JvdXAtYXBwZW5kOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuLFxcbi5pbnB1dC1ncm91cCA+IC5pbnB1dC1ncm91cC1hcHBlbmQ6bm90KDpsYXN0LWNoaWxkKSA+IC5pbnB1dC1ncm91cC10ZXh0LFxcbi5pbnB1dC1ncm91cCA+IC5pbnB1dC1ncm91cC1hcHBlbmQ6bGFzdC1jaGlsZCA+IC5idG46bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSksXFxuLmlucHV0LWdyb3VwID4gLmlucHV0LWdyb3VwLWFwcGVuZDpsYXN0LWNoaWxkID4gLmlucHV0LWdyb3VwLXRleHQ6bm90KDpsYXN0LWNoaWxkKSB7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAgPiAuaW5wdXQtZ3JvdXAtYXBwZW5kID4gLmJ0bixcXG4uaW5wdXQtZ3JvdXAgPiAuaW5wdXQtZ3JvdXAtYXBwZW5kID4gLmlucHV0LWdyb3VwLXRleHQsXFxuLmlucHV0LWdyb3VwID4gLmlucHV0LWdyb3VwLXByZXBlbmQ6bm90KDpmaXJzdC1jaGlsZCkgPiAuYnRuLFxcbi5pbnB1dC1ncm91cCA+IC5pbnB1dC1ncm91cC1wcmVwZW5kOm5vdCg6Zmlyc3QtY2hpbGQpID4gLmlucHV0LWdyb3VwLXRleHQsXFxuLmlucHV0LWdyb3VwID4gLmlucHV0LWdyb3VwLXByZXBlbmQ6Zmlyc3QtY2hpbGQgPiAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpLFxcbi5pbnB1dC1ncm91cCA+IC5pbnB1dC1ncm91cC1wcmVwZW5kOmZpcnN0LWNoaWxkID4gLmlucHV0LWdyb3VwLXRleHQ6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XFxufVxcblxcbi5jdXN0b20tY29udHJvbCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIG1pbi1oZWlnaHQ6IDEuNXJlbTtcXG4gIHBhZGRpbmctbGVmdDogMS41cmVtO1xcbn1cXG5cXG4uY3VzdG9tLWNvbnRyb2wtaW5saW5lIHtcXG4gIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xcbn1cXG5cXG4uY3VzdG9tLWNvbnRyb2wtaW5wdXQge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgei1pbmRleDogLTE7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG5cXG4uY3VzdG9tLWNvbnRyb2wtaW5wdXQ6Y2hlY2tlZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyLWNvbG9yOiAjMDA3YmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjtcXG59XFxuXFxuLmN1c3RvbS1jb250cm9sLWlucHV0OmZvY3VzIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMCwgMTIzLCAyNTUsIDAuMjUpO1xcbn1cXG5cXG4uY3VzdG9tLWNvbnRyb2wtaW5wdXQ6Zm9jdXM6bm90KDpjaGVja2VkKSB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJvcmRlci1jb2xvcjogIzgwYmRmZjtcXG59XFxuXFxuLmN1c3RvbS1jb250cm9sLWlucHV0Om5vdCg6ZGlzYWJsZWQpOmFjdGl2ZSB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IzZDdmZjtcXG4gIGJvcmRlci1jb2xvcjogI2IzZDdmZjtcXG59XFxuXFxuLmN1c3RvbS1jb250cm9sLWlucHV0OmRpc2FibGVkIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsIHtcXG4gIGNvbG9yOiAjNmM3NTdkO1xcbn1cXG5cXG4uY3VzdG9tLWNvbnRyb2wtaW5wdXQ6ZGlzYWJsZWQgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO1xcbn1cXG5cXG4uY3VzdG9tLWNvbnRyb2wtbGFiZWwge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XFxufVxcblxcbi5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMC4yNXJlbTtcXG4gIGxlZnQ6IC0xLjVyZW07XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxcmVtO1xcbiAgaGVpZ2h0OiAxcmVtO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3JkZXI6ICNhZGI1YmQgc29saWQgMXB4O1xcbn1cXG5cXG4uY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmFmdGVyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMC4yNXJlbTtcXG4gIGxlZnQ6IC0xLjVyZW07XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxcmVtO1xcbiAgaGVpZ2h0OiAxcmVtO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgNTAlIC8gNTAlIDUwJTtcXG59XFxuXFxuLmN1c3RvbS1jaGVja2JveCAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSB7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4uY3VzdG9tLWNoZWNrYm94IC5jdXN0b20tY29udHJvbC1pbnB1dDpjaGVja2VkIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjphZnRlciB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgOCA4JyUzZSUzY3BhdGggZmlsbD0nJTIzZmZmJyBkPSdNNi41NjQuNzVsLTMuNTkgMy42MTItMS41MzgtMS41NUwwIDQuMjYgMi45NzQgNy4yNSA4IDIuMTkzeicvJTNlJTNjL3N2ZyUzZVxcXCIpO1xcbn1cXG5cXG4uY3VzdG9tLWNoZWNrYm94IC5jdXN0b20tY29udHJvbC1pbnB1dDppbmRldGVybWluYXRlIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUge1xcbiAgYm9yZGVyLWNvbG9yOiAjMDA3YmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjtcXG59XFxuXFxuLmN1c3RvbS1jaGVja2JveCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6aW5kZXRlcm1pbmF0ZSB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YWZ0ZXIge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDQgNCclM2UlM2NwYXRoIHN0cm9rZT0nJTIzZmZmJyBkPSdNMCAyaDQnLyUzZSUzYy9zdmclM2VcXFwiKTtcXG59XFxuXFxuLmN1c3RvbS1jaGVja2JveCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6ZGlzYWJsZWQ6Y2hlY2tlZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMTIzLCAyNTUsIDAuNSk7XFxufVxcblxcbi5jdXN0b20tY2hlY2tib3ggLmN1c3RvbS1jb250cm9sLWlucHV0OmRpc2FibGVkOmluZGV0ZXJtaW5hdGUgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDEyMywgMjU1LCAwLjUpO1xcbn1cXG5cXG4uY3VzdG9tLXJhZGlvIC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG59XFxuXFxuLmN1c3RvbS1yYWRpbyAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6Y2hlY2tlZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YWZ0ZXIge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nLTQgLTQgOCA4JyUzZSUzY2NpcmNsZSByPSczJyBmaWxsPSclMjNmZmYnLyUzZSUzYy9zdmclM2VcXFwiKTtcXG59XFxuXFxuLmN1c3RvbS1yYWRpbyAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6ZGlzYWJsZWQ6Y2hlY2tlZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMTIzLCAyNTUsIDAuNSk7XFxufVxcblxcbi5jdXN0b20tc3dpdGNoIHtcXG4gIHBhZGRpbmctbGVmdDogMi4yNXJlbTtcXG59XFxuXFxuLmN1c3RvbS1zd2l0Y2ggLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUge1xcbiAgbGVmdDogLTIuMjVyZW07XFxuICB3aWR0aDogMS43NXJlbTtcXG4gIHBvaW50ZXItZXZlbnRzOiBhbGw7XFxuICBib3JkZXItcmFkaXVzOiAwLjVyZW07XFxufVxcblxcbi5jdXN0b20tc3dpdGNoIC5jdXN0b20tY29udHJvbC1sYWJlbDo6YWZ0ZXIge1xcbiAgdG9wOiBjYWxjKDAuMjVyZW0gKyAycHgpO1xcbiAgbGVmdDogY2FsYygtMi4yNXJlbSArIDJweCk7XFxuICB3aWR0aDogY2FsYygxcmVtIC0gNHB4KTtcXG4gIGhlaWdodDogY2FsYygxcmVtIC0gNHB4KTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhZGI1YmQ7XFxuICBib3JkZXItcmFkaXVzOiAwLjVyZW07XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJveC1zaGFkb3cgMC4xNXMgZWFzZS1pbi1vdXQsIC13ZWJraXQtdHJhbnNmb3JtIDAuMTVzIGVhc2UtaW4tb3V0O1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMTVzIGVhc2UtaW4tb3V0LCBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJveC1zaGFkb3cgMC4xNXMgZWFzZS1pbi1vdXQ7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4xNXMgZWFzZS1pbi1vdXQsIGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAwLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAwLjE1cyBlYXNlLWluLW91dCwgLXdlYmtpdC10cmFuc2Zvcm0gMC4xNXMgZWFzZS1pbi1vdXQ7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAuY3VzdG9tLXN3aXRjaCAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmFmdGVyIHtcXG4gICAgdHJhbnNpdGlvbjogbm9uZTtcXG4gIH1cXG59XFxuXFxuLmN1c3RvbS1zd2l0Y2ggLmN1c3RvbS1jb250cm9sLWlucHV0OmNoZWNrZWQgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmFmdGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgwLjc1cmVtKTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwLjc1cmVtKTtcXG59XFxuXFxuLmN1c3RvbS1zd2l0Y2ggLmN1c3RvbS1jb250cm9sLWlucHV0OmRpc2FibGVkOmNoZWNrZWQgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDEyMywgMjU1LCAwLjUpO1xcbn1cXG5cXG4uY3VzdG9tLXNlbGVjdCB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogY2FsYygxLjVlbSArIDAuNzVyZW0gKyAycHgpO1xcbiAgcGFkZGluZzogMC4zNzVyZW0gMS43NXJlbSAwLjM3NXJlbSAwLjc1cmVtO1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICBjb2xvcjogIzQ5NTA1NztcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuICBiYWNrZ3JvdW5kOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNCA1JyUzZSUzY3BhdGggZmlsbD0nJTIzMzQzYTQwJyBkPSdNMiAwTDAgMmg0em0wIDVMMCAzaDR6Jy8lM2UlM2Mvc3ZnJTNlXFxcIikgbm8tcmVwZWF0IHJpZ2h0IDAuNzVyZW0gY2VudGVyLzhweCAxMHB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNjZWQ0ZGE7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbiAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xcbiAgYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuXFxuLmN1c3RvbS1zZWxlY3Q6Zm9jdXMge1xcbiAgYm9yZGVyLWNvbG9yOiAjODBiZGZmO1xcbiAgb3V0bGluZTogMDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDAsIDEyMywgMjU1LCAwLjI1KTtcXG59XFxuXFxuLmN1c3RvbS1zZWxlY3Q6Zm9jdXM6Oi1tcy12YWx1ZSB7XFxuICBjb2xvcjogIzQ5NTA1NztcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxufVxcblxcbi5jdXN0b20tc2VsZWN0W211bHRpcGxlXSwgLmN1c3RvbS1zZWxlY3Rbc2l6ZV06bm90KFtzaXplPVxcXCIxXFxcIl0pIHtcXG4gIGhlaWdodDogYXV0bztcXG4gIHBhZGRpbmctcmlnaHQ6IDAuNzVyZW07XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xcbn1cXG5cXG4uY3VzdG9tLXNlbGVjdDpkaXNhYmxlZCB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlOWVjZWY7XFxufVxcblxcbi5jdXN0b20tc2VsZWN0OjotbXMtZXhwYW5kIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi5jdXN0b20tc2VsZWN0LXNtIHtcXG4gIGhlaWdodDogY2FsYygxLjVlbSArIDAuNXJlbSArIDJweCk7XFxuICBwYWRkaW5nLXRvcDogMC4yNXJlbTtcXG4gIHBhZGRpbmctYm90dG9tOiAwLjI1cmVtO1xcbiAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XFxuICBmb250LXNpemU6IDAuODc1cmVtO1xcbn1cXG5cXG4uY3VzdG9tLXNlbGVjdC1sZyB7XFxuICBoZWlnaHQ6IGNhbGMoMS41ZW0gKyAxcmVtICsgMnB4KTtcXG4gIHBhZGRpbmctdG9wOiAwLjVyZW07XFxuICBwYWRkaW5nLWJvdHRvbTogMC41cmVtO1xcbiAgcGFkZGluZy1sZWZ0OiAxcmVtO1xcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xcbn1cXG5cXG4uY3VzdG9tLWZpbGUge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IGNhbGMoMS41ZW0gKyAwLjc1cmVtICsgMnB4KTtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxufVxcblxcbi5jdXN0b20tZmlsZS1pbnB1dCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB6LWluZGV4OiAyO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IGNhbGMoMS41ZW0gKyAwLjc1cmVtICsgMnB4KTtcXG4gIG1hcmdpbjogMDtcXG4gIG9wYWNpdHk6IDA7XFxufVxcblxcbi5jdXN0b20tZmlsZS1pbnB1dDpmb2N1cyB+IC5jdXN0b20tZmlsZS1sYWJlbCB7XFxuICBib3JkZXItY29sb3I6ICM4MGJkZmY7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgwLCAxMjMsIDI1NSwgMC4yNSk7XFxufVxcblxcbi5jdXN0b20tZmlsZS1pbnB1dDpkaXNhYmxlZCB+IC5jdXN0b20tZmlsZS1sYWJlbCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO1xcbn1cXG5cXG4uY3VzdG9tLWZpbGUtaW5wdXQ6bGFuZyhlbikgfiAuY3VzdG9tLWZpbGUtbGFiZWw6OmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCJCcm93c2VcXFwiO1xcbn1cXG5cXG4uY3VzdG9tLWZpbGUtaW5wdXQgfiAuY3VzdG9tLWZpbGUtbGFiZWxbZGF0YS1icm93c2VdOjphZnRlciB7XFxuICBjb250ZW50OiBhdHRyKGRhdGEtYnJvd3NlKTtcXG59XFxuXFxuLmN1c3RvbS1maWxlLWxhYmVsIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgbGVmdDogMDtcXG4gIHotaW5kZXg6IDE7XFxuICBoZWlnaHQ6IGNhbGMoMS41ZW0gKyAwLjc1cmVtICsgMnB4KTtcXG4gIHBhZGRpbmc6IDAuMzc1cmVtIDAuNzVyZW07XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG4gIGNvbG9yOiAjNDk1MDU3O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNjZWQ0ZGE7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4uY3VzdG9tLWZpbGUtbGFiZWw6OmFmdGVyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgei1pbmRleDogMztcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgaGVpZ2h0OiBjYWxjKDEuNWVtICsgMC43NXJlbSk7XFxuICBwYWRkaW5nOiAwLjM3NXJlbSAwLjc1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG4gIGNvbG9yOiAjNDk1MDU3O1xcbiAgY29udGVudDogXFxcIkJyb3dzZVxcXCI7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO1xcbiAgYm9yZGVyLWxlZnQ6IGluaGVyaXQ7XFxuICBib3JkZXItcmFkaXVzOiAwIDAuMjVyZW0gMC4yNXJlbSAwO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiBjYWxjKDFyZW0gKyAwLjRyZW0pO1xcbiAgcGFkZGluZzogMDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbiAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xcbiAgYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuXFxuLmN1c3RvbS1yYW5nZTpmb2N1cyB7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlOmZvY3VzOjotd2Via2l0LXNsaWRlci10aHVtYiB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggI2ZmZiwgMCAwIDAgMC4ycmVtIHJnYmEoMCwgMTIzLCAyNTUsIDAuMjUpO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlOmZvY3VzOjotbW96LXJhbmdlLXRodW1iIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCAjZmZmLCAwIDAgMCAwLjJyZW0gcmdiYSgwLCAxMjMsIDI1NSwgMC4yNSk7XFxufVxcblxcbi5jdXN0b20tcmFuZ2U6Zm9jdXM6Oi1tcy10aHVtYiB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggI2ZmZiwgMCAwIDAgMC4ycmVtIHJnYmEoMCwgMTIzLCAyNTUsIDAuMjUpO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlOjotbW96LWZvY3VzLW91dGVyIHtcXG4gIGJvcmRlcjogMDtcXG59XFxuXFxuLmN1c3RvbS1yYW5nZTo6LXdlYmtpdC1zbGlkZXItdGh1bWIge1xcbiAgd2lkdGg6IDFyZW07XFxuICBoZWlnaHQ6IDFyZW07XFxuICBtYXJnaW4tdG9wOiAtMC4yNXJlbTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDdiZmY7XFxuICBib3JkZXI6IDA7XFxuICBib3JkZXItcmFkaXVzOiAxcmVtO1xcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjE1cyBlYXNlLWluLW91dCwgYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3gtc2hhZG93IDAuMTVzIGVhc2UtaW4tb3V0O1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbiAgYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuXFxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcXG4gIC5jdXN0b20tcmFuZ2U6Oi13ZWJraXQtc2xpZGVyLXRodW1iIHtcXG4gICAgdHJhbnNpdGlvbjogbm9uZTtcXG4gIH1cXG59XFxuXFxuLmN1c3RvbS1yYW5nZTo6LXdlYmtpdC1zbGlkZXItdGh1bWI6YWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiM2Q3ZmY7XFxufVxcblxcbi5jdXN0b20tcmFuZ2U6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAwLjVyZW07XFxuICBjb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVlMmU2O1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1yYWRpdXM6IDFyZW07XFxufVxcblxcbi5jdXN0b20tcmFuZ2U6Oi1tb3otcmFuZ2UtdGh1bWIge1xcbiAgd2lkdGg6IDFyZW07XFxuICBoZWlnaHQ6IDFyZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3YmZmO1xcbiAgYm9yZGVyOiAwO1xcbiAgYm9yZGVyLXJhZGl1czogMXJlbTtcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAwLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAwLjE1cyBlYXNlLWluLW91dDtcXG4gIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcXG4gIGFwcGVhcmFuY2U6IG5vbmU7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAuY3VzdG9tLXJhbmdlOjotbW96LXJhbmdlLXRodW1iIHtcXG4gICAgdHJhbnNpdGlvbjogbm9uZTtcXG4gIH1cXG59XFxuXFxuLmN1c3RvbS1yYW5nZTo6LW1vei1yYW5nZS10aHVtYjphY3RpdmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IzZDdmZjtcXG59XFxuXFxuLmN1c3RvbS1yYW5nZTo6LW1vei1yYW5nZS10cmFjayB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMC41cmVtO1xcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RlZTJlNjtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmFkaXVzOiAxcmVtO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlOjotbXMtdGh1bWIge1xcbiAgd2lkdGg6IDFyZW07XFxuICBoZWlnaHQ6IDFyZW07XFxuICBtYXJnaW4tdG9wOiAwO1xcbiAgbWFyZ2luLXJpZ2h0OiAwLjJyZW07XFxuICBtYXJnaW4tbGVmdDogMC4ycmVtO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjtcXG4gIGJvcmRlcjogMDtcXG4gIGJvcmRlci1yYWRpdXM6IDFyZW07XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJveC1zaGFkb3cgMC4xNXMgZWFzZS1pbi1vdXQ7XFxuICBhcHBlYXJhbmNlOiBub25lO1xcbn1cXG5cXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xcbiAgLmN1c3RvbS1yYW5nZTo6LW1zLXRodW1iIHtcXG4gICAgdHJhbnNpdGlvbjogbm9uZTtcXG4gIH1cXG59XFxuXFxuLmN1c3RvbS1yYW5nZTo6LW1zLXRodW1iOmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjNkN2ZmO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlOjotbXMtdHJhY2sge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDAuNXJlbTtcXG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci13aWR0aDogMC41cmVtO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlOjotbXMtZmlsbC1sb3dlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVlMmU2O1xcbiAgYm9yZGVyLXJhZGl1czogMXJlbTtcXG59XFxuXFxuLmN1c3RvbS1yYW5nZTo6LW1zLWZpbGwtdXBwZXIge1xcbiAgbWFyZ2luLXJpZ2h0OiAxNXB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RlZTJlNjtcXG4gIGJvcmRlci1yYWRpdXM6IDFyZW07XFxufVxcblxcbi5jdXN0b20tcmFuZ2U6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1iIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhZGI1YmQ7XFxufVxcblxcbi5jdXN0b20tcmFuZ2U6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrIHtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuXFxuLmN1c3RvbS1yYW5nZTpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWRiNWJkO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlOmRpc2FibGVkOjotbW96LXJhbmdlLXRyYWNrIHtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuXFxuLmN1c3RvbS1yYW5nZTpkaXNhYmxlZDo6LW1zLXRodW1iIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhZGI1YmQ7XFxufVxcblxcbi5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlLFxcbi5jdXN0b20tZmlsZS1sYWJlbCxcXG4uY3VzdG9tLXNlbGVjdCB7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJveC1zaGFkb3cgMC4xNXMgZWFzZS1pbi1vdXQ7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSxcXG4gIC5jdXN0b20tZmlsZS1sYWJlbCxcXG4gIC5jdXN0b20tc2VsZWN0IHtcXG4gICAgdHJhbnNpdGlvbjogbm9uZTtcXG4gIH1cXG59XFxuXFxuLm5hdiB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XFxufVxcblxcbi5uYXYtbGluayB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHBhZGRpbmc6IDAuNXJlbSAxcmVtO1xcbn1cXG5cXG4ubmF2LWxpbms6aG92ZXIsIC5uYXYtbGluazpmb2N1cyB7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcblxcbi5uYXYtbGluay5kaXNhYmxlZCB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbn1cXG5cXG4ubmF2LXRhYnMge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZWUyZTY7XFxufVxcblxcbi5uYXYtdGFicyAubmF2LWl0ZW0ge1xcbiAgbWFyZ2luLWJvdHRvbTogLTFweDtcXG59XFxuXFxuLm5hdi10YWJzIC5uYXYtbGluayB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLm5hdi10YWJzIC5uYXYtbGluazpob3ZlciwgLm5hdi10YWJzIC5uYXYtbGluazpmb2N1cyB7XFxuICBib3JkZXItY29sb3I6ICNlOWVjZWYgI2U5ZWNlZiAjZGVlMmU2O1xcbn1cXG5cXG4ubmF2LXRhYnMgLm5hdi1saW5rLmRpc2FibGVkIHtcXG4gIGNvbG9yOiAjNmM3NTdkO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4ubmF2LXRhYnMgLm5hdi1saW5rLmFjdGl2ZSxcXG4ubmF2LXRhYnMgLm5hdi1pdGVtLnNob3cgLm5hdi1saW5rIHtcXG4gIGNvbG9yOiAjNDk1MDU3O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlci1jb2xvcjogI2RlZTJlNiAjZGVlMmU2ICNmZmY7XFxufVxcblxcbi5uYXYtdGFicyAuZHJvcGRvd24tbWVudSB7XFxuICBtYXJnaW4tdG9wOiAtMXB4O1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xcbn1cXG5cXG4ubmF2LXBpbGxzIC5uYXYtbGluayB7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4ubmF2LXBpbGxzIC5uYXYtbGluay5hY3RpdmUsXFxuLm5hdi1waWxscyAuc2hvdyA+IC5uYXYtbGluayB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDdiZmY7XFxufVxcblxcbi5uYXYtZmlsbCAubmF2LWl0ZW0ge1xcbiAgLW1zLWZsZXg6IDEgMSBhdXRvO1xcbiAgZmxleDogMSAxIGF1dG87XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbi5uYXYtanVzdGlmaWVkIC5uYXYtaXRlbSB7XFxuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMDtcXG4gIGZsZXgtYmFzaXM6IDA7XFxuICAtbXMtZmxleC1wb3NpdGl2ZTogMTtcXG4gIGZsZXgtZ3JvdzogMTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuLnRhYi1jb250ZW50ID4gLnRhYi1wYW5lIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi50YWItY29udGVudCA+IC5hY3RpdmUge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi5uYXZiYXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcXG4gIGZsZXgtd3JhcDogd3JhcDtcXG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gIHBhZGRpbmc6IDAuNXJlbSAxcmVtO1xcbn1cXG5cXG4ubmF2YmFyID4gLmNvbnRhaW5lcixcXG4ubmF2YmFyID4gLmNvbnRhaW5lci1mbHVpZCB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbn1cXG5cXG4ubmF2YmFyLWJyYW5kIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHBhZGRpbmctdG9wOiAwLjMxMjVyZW07XFxuICBwYWRkaW5nLWJvdHRvbTogMC4zMTI1cmVtO1xcbiAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG5cXG4ubmF2YmFyLWJyYW5kOmhvdmVyLCAubmF2YmFyLWJyYW5kOmZvY3VzIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuXFxuLm5hdmJhci1uYXYge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XFxufVxcblxcbi5uYXZiYXItbmF2IC5uYXYtbGluayB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwO1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbn1cXG5cXG4ubmF2YmFyLW5hdiAuZHJvcGRvd24tbWVudSB7XFxuICBwb3NpdGlvbjogc3RhdGljO1xcbiAgZmxvYXQ6IG5vbmU7XFxufVxcblxcbi5uYXZiYXItdGV4dCB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBwYWRkaW5nLXRvcDogMC41cmVtO1xcbiAgcGFkZGluZy1ib3R0b206IDAuNXJlbTtcXG59XFxuXFxuLm5hdmJhci1jb2xsYXBzZSB7XFxuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMTAwJTtcXG4gIGZsZXgtYmFzaXM6IDEwMCU7XFxuICAtbXMtZmxleC1wb3NpdGl2ZTogMTtcXG4gIGZsZXgtZ3JvdzogMTtcXG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4ubmF2YmFyLXRvZ2dsZXIge1xcbiAgcGFkZGluZzogMC4yNXJlbSAwLjc1cmVtO1xcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLm5hdmJhci10b2dnbGVyOmhvdmVyLCAubmF2YmFyLXRvZ2dsZXI6Zm9jdXMge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbn1cXG5cXG4ubmF2YmFyLXRvZ2dsZXItaWNvbiB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB3aWR0aDogMS41ZW07XFxuICBoZWlnaHQ6IDEuNWVtO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgYmFja2dyb3VuZDogbm8tcmVwZWF0IGNlbnRlciBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMTAwJTtcXG59XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDU3NS45OHB4KSB7XFxuICAubmF2YmFyLWV4cGFuZC1zbSA+IC5jb250YWluZXIsXFxuICAubmF2YmFyLWV4cGFuZC1zbSA+IC5jb250YWluZXItZmx1aWQge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLm5hdmJhci1leHBhbmQtc20ge1xcbiAgICAtbXMtZmxleC1mbG93OiByb3cgbm93cmFwO1xcbiAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XFxuICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC1zbSAubmF2YmFyLW5hdiB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtc20gLm5hdmJhci1uYXYgLmRyb3Bkb3duLW1lbnUge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC1zbSAubmF2YmFyLW5hdiAubmF2LWxpbmsge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XFxuICAgIHBhZGRpbmctbGVmdDogMC41cmVtO1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtc20gPiAuY29udGFpbmVyLFxcbiAgLm5hdmJhci1leHBhbmQtc20gPiAuY29udGFpbmVyLWZsdWlkIHtcXG4gICAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xcbiAgICBmbGV4LXdyYXA6IG5vd3JhcDtcXG4gIH1cXG4gIC5uYXZiYXItZXhwYW5kLXNtIC5uYXZiYXItY29sbGFwc2Uge1xcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbiAgICBmbGV4LWJhc2lzOiBhdXRvO1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtc20gLm5hdmJhci10b2dnbGVyIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDc2Ny45OHB4KSB7XFxuICAubmF2YmFyLWV4cGFuZC1tZCA+IC5jb250YWluZXIsXFxuICAubmF2YmFyLWV4cGFuZC1tZCA+IC5jb250YWluZXItZmx1aWQge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLm5hdmJhci1leHBhbmQtbWQge1xcbiAgICAtbXMtZmxleC1mbG93OiByb3cgbm93cmFwO1xcbiAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XFxuICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC1tZCAubmF2YmFyLW5hdiB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtbWQgLm5hdmJhci1uYXYgLmRyb3Bkb3duLW1lbnUge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC1tZCAubmF2YmFyLW5hdiAubmF2LWxpbmsge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XFxuICAgIHBhZGRpbmctbGVmdDogMC41cmVtO1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtbWQgPiAuY29udGFpbmVyLFxcbiAgLm5hdmJhci1leHBhbmQtbWQgPiAuY29udGFpbmVyLWZsdWlkIHtcXG4gICAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xcbiAgICBmbGV4LXdyYXA6IG5vd3JhcDtcXG4gIH1cXG4gIC5uYXZiYXItZXhwYW5kLW1kIC5uYXZiYXItY29sbGFwc2Uge1xcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbiAgICBmbGV4LWJhc2lzOiBhdXRvO1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtbWQgLm5hdmJhci10b2dnbGVyIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDk5MS45OHB4KSB7XFxuICAubmF2YmFyLWV4cGFuZC1sZyA+IC5jb250YWluZXIsXFxuICAubmF2YmFyLWV4cGFuZC1sZyA+IC5jb250YWluZXItZmx1aWQge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xcbiAgLm5hdmJhci1leHBhbmQtbGcge1xcbiAgICAtbXMtZmxleC1mbG93OiByb3cgbm93cmFwO1xcbiAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XFxuICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC1sZyAubmF2YmFyLW5hdiB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtbGcgLm5hdmJhci1uYXYgLmRyb3Bkb3duLW1lbnUge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC1sZyAubmF2YmFyLW5hdiAubmF2LWxpbmsge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XFxuICAgIHBhZGRpbmctbGVmdDogMC41cmVtO1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtbGcgPiAuY29udGFpbmVyLFxcbiAgLm5hdmJhci1leHBhbmQtbGcgPiAuY29udGFpbmVyLWZsdWlkIHtcXG4gICAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xcbiAgICBmbGV4LXdyYXA6IG5vd3JhcDtcXG4gIH1cXG4gIC5uYXZiYXItZXhwYW5kLWxnIC5uYXZiYXItY29sbGFwc2Uge1xcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbiAgICBmbGV4LWJhc2lzOiBhdXRvO1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtbGcgLm5hdmJhci10b2dnbGVyIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDExOTkuOThweCkge1xcbiAgLm5hdmJhci1leHBhbmQteGwgPiAuY29udGFpbmVyLFxcbiAgLm5hdmJhci1leHBhbmQteGwgPiAuY29udGFpbmVyLWZsdWlkIHtcXG4gICAgcGFkZGluZy1yaWdodDogMDtcXG4gICAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XFxuICAubmF2YmFyLWV4cGFuZC14bCB7XFxuICAgIC1tcy1mbGV4LWZsb3c6IHJvdyBub3dyYXA7XFxuICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcXG4gICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcXG4gIH1cXG4gIC5uYXZiYXItZXhwYW5kLXhsIC5uYXZiYXItbmF2IHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC14bCAubmF2YmFyLW5hdiAuZHJvcGRvd24tbWVudSB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIH1cXG4gIC5uYXZiYXItZXhwYW5kLXhsIC5uYXZiYXItbmF2IC5uYXYtbGluayB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDAuNXJlbTtcXG4gICAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC14bCA+IC5jb250YWluZXIsXFxuICAubmF2YmFyLWV4cGFuZC14bCA+IC5jb250YWluZXItZmx1aWQge1xcbiAgICAtbXMtZmxleC13cmFwOiBub3dyYXA7XFxuICAgIGZsZXgtd3JhcDogbm93cmFwO1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQteGwgLm5hdmJhci1jb2xsYXBzZSB7XFxuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94ICFpbXBvcnRhbnQ7XFxuICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcXG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XFxuICAgIGZsZXgtYmFzaXM6IGF1dG87XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC14bCAubmF2YmFyLXRvZ2dsZXIge1xcbiAgICBkaXNwbGF5OiBub25lO1xcbiAgfVxcbn1cXG5cXG4ubmF2YmFyLWV4cGFuZCB7XFxuICAtbXMtZmxleC1mbG93OiByb3cgbm93cmFwO1xcbiAgZmxleC1mbG93OiByb3cgbm93cmFwO1xcbiAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxufVxcblxcbi5uYXZiYXItZXhwYW5kID4gLmNvbnRhaW5lcixcXG4ubmF2YmFyLWV4cGFuZCA+IC5jb250YWluZXItZmx1aWQge1xcbiAgcGFkZGluZy1yaWdodDogMDtcXG4gIHBhZGRpbmctbGVmdDogMDtcXG59XFxuXFxuLm5hdmJhci1leHBhbmQgLm5hdmJhci1uYXYge1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbn1cXG5cXG4ubmF2YmFyLWV4cGFuZCAubmF2YmFyLW5hdiAuZHJvcGRvd24tbWVudSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxufVxcblxcbi5uYXZiYXItZXhwYW5kIC5uYXZiYXItbmF2IC5uYXYtbGluayB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XFxuICBwYWRkaW5nLWxlZnQ6IDAuNXJlbTtcXG59XFxuXFxuLm5hdmJhci1leHBhbmQgPiAuY29udGFpbmVyLFxcbi5uYXZiYXItZXhwYW5kID4gLmNvbnRhaW5lci1mbHVpZCB7XFxuICAtbXMtZmxleC13cmFwOiBub3dyYXA7XFxuICBmbGV4LXdyYXA6IG5vd3JhcDtcXG59XFxuXFxuLm5hdmJhci1leHBhbmQgLm5hdmJhci1jb2xsYXBzZSB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XFxuICBmbGV4LWJhc2lzOiBhdXRvO1xcbn1cXG5cXG4ubmF2YmFyLWV4cGFuZCAubmF2YmFyLXRvZ2dsZXIge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLm5hdmJhci1saWdodCAubmF2YmFyLWJyYW5kIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOSk7XFxufVxcblxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci1icmFuZDpob3ZlciwgLm5hdmJhci1saWdodCAubmF2YmFyLWJyYW5kOmZvY3VzIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOSk7XFxufVxcblxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci1uYXYgLm5hdi1saW5rIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XFxufVxcblxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci1uYXYgLm5hdi1saW5rOmhvdmVyLCAubmF2YmFyLWxpZ2h0IC5uYXZiYXItbmF2IC5uYXYtbGluazpmb2N1cyB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjcpO1xcbn1cXG5cXG4ubmF2YmFyLWxpZ2h0IC5uYXZiYXItbmF2IC5uYXYtbGluay5kaXNhYmxlZCB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjMpO1xcbn1cXG5cXG4ubmF2YmFyLWxpZ2h0IC5uYXZiYXItbmF2IC5zaG93ID4gLm5hdi1saW5rLFxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci1uYXYgLmFjdGl2ZSA+IC5uYXYtbGluayxcXG4ubmF2YmFyLWxpZ2h0IC5uYXZiYXItbmF2IC5uYXYtbGluay5zaG93LFxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci1uYXYgLm5hdi1saW5rLmFjdGl2ZSB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjkpO1xcbn1cXG5cXG4ubmF2YmFyLWxpZ2h0IC5uYXZiYXItdG9nZ2xlciB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSk7XFxufVxcblxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci10b2dnbGVyLWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSUzY3BhdGggc3Ryb2tlPSdyZ2JhKDAsIDAsIDAsIDAuNSknIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbWl0ZXJsaW1pdD0nMTAnIGQ9J000IDdoMjJNNCAxNWgyMk00IDIzaDIyJy8lM2UlM2Mvc3ZnJTNlXFxcIik7XFxufVxcblxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci10ZXh0IHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XFxufVxcblxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci10ZXh0IGEge1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC45KTtcXG59XFxuXFxuLm5hdmJhci1saWdodCAubmF2YmFyLXRleHQgYTpob3ZlciwgLm5hdmJhci1saWdodCAubmF2YmFyLXRleHQgYTpmb2N1cyB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjkpO1xcbn1cXG5cXG4ubmF2YmFyLWRhcmsgLm5hdmJhci1icmFuZCB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuXFxuLm5hdmJhci1kYXJrIC5uYXZiYXItYnJhbmQ6aG92ZXIsIC5uYXZiYXItZGFyayAubmF2YmFyLWJyYW5kOmZvY3VzIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG5cXG4ubmF2YmFyLWRhcmsgLm5hdmJhci1uYXYgLm5hdi1saW5rIHtcXG4gIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XFxufVxcblxcbi5uYXZiYXItZGFyayAubmF2YmFyLW5hdiAubmF2LWxpbms6aG92ZXIsIC5uYXZiYXItZGFyayAubmF2YmFyLW5hdiAubmF2LWxpbms6Zm9jdXMge1xcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NSk7XFxufVxcblxcbi5uYXZiYXItZGFyayAubmF2YmFyLW5hdiAubmF2LWxpbmsuZGlzYWJsZWQge1xcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSk7XFxufVxcblxcbi5uYXZiYXItZGFyayAubmF2YmFyLW5hdiAuc2hvdyA+IC5uYXYtbGluayxcXG4ubmF2YmFyLWRhcmsgLm5hdmJhci1uYXYgLmFjdGl2ZSA+IC5uYXYtbGluayxcXG4ubmF2YmFyLWRhcmsgLm5hdmJhci1uYXYgLm5hdi1saW5rLnNob3csXFxuLm5hdmJhci1kYXJrIC5uYXZiYXItbmF2IC5uYXYtbGluay5hY3RpdmUge1xcbiAgY29sb3I6ICNmZmY7XFxufVxcblxcbi5uYXZiYXItZGFyayAubmF2YmFyLXRvZ2dsZXIge1xcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xcbn1cXG5cXG4ubmF2YmFyLWRhcmsgLm5hdmJhci10b2dnbGVyLWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSUzY3BhdGggc3Ryb2tlPSdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSknIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbWl0ZXJsaW1pdD0nMTAnIGQ9J000IDdoMjJNNCAxNWgyMk00IDIzaDIyJy8lM2UlM2Mvc3ZnJTNlXFxcIik7XFxufVxcblxcbi5uYXZiYXItZGFyayAubmF2YmFyLXRleHQge1xcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcXG59XFxuXFxuLm5hdmJhci1kYXJrIC5uYXZiYXItdGV4dCBhIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG5cXG4ubmF2YmFyLWRhcmsgLm5hdmJhci10ZXh0IGE6aG92ZXIsIC5uYXZiYXItZGFyayAubmF2YmFyLXRleHQgYTpmb2N1cyB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuXFxuLmNhcmQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgbWluLXdpZHRoOiAwO1xcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY2xpcDogYm9yZGVyLWJveDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xMjUpO1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLmNhcmQgPiBociB7XFxuICBtYXJnaW4tcmlnaHQ6IDA7XFxuICBtYXJnaW4tbGVmdDogMDtcXG59XFxuXFxuLmNhcmQgPiAubGlzdC1ncm91cDpmaXJzdC1jaGlsZCAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLmNhcmQgPiAubGlzdC1ncm91cDpsYXN0LWNoaWxkIC5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZCB7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxufVxcblxcbi5jYXJkLWJvZHkge1xcbiAgLW1zLWZsZXg6IDEgMSBhdXRvO1xcbiAgZmxleDogMSAxIGF1dG87XFxuICBwYWRkaW5nOiAxLjI1cmVtO1xcbn1cXG5cXG4uY2FyZC10aXRsZSB7XFxuICBtYXJnaW4tYm90dG9tOiAwLjc1cmVtO1xcbn1cXG5cXG4uY2FyZC1zdWJ0aXRsZSB7XFxuICBtYXJnaW4tdG9wOiAtMC4zNzVyZW07XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbn1cXG5cXG4uY2FyZC10ZXh0Omxhc3QtY2hpbGQge1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG59XFxuXFxuLmNhcmQtbGluazpob3ZlciB7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcblxcbi5jYXJkLWxpbmsgKyAuY2FyZC1saW5rIHtcXG4gIG1hcmdpbi1sZWZ0OiAxLjI1cmVtO1xcbn1cXG5cXG4uY2FyZC1oZWFkZXIge1xcbiAgcGFkZGluZzogMC43NXJlbSAxLjI1cmVtO1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wMyk7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEyNSk7XFxufVxcblxcbi5jYXJkLWhlYWRlcjpmaXJzdC1jaGlsZCB7XFxuICBib3JkZXItcmFkaXVzOiBjYWxjKDAuMjVyZW0gLSAxcHgpIGNhbGMoMC4yNXJlbSAtIDFweCkgMCAwO1xcbn1cXG5cXG4uY2FyZC1oZWFkZXIgKyAubGlzdC1ncm91cCAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHtcXG4gIGJvcmRlci10b3A6IDA7XFxufVxcblxcbi5jYXJkLWZvb3RlciB7XFxuICBwYWRkaW5nOiAwLjc1cmVtIDEuMjVyZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDMpO1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xMjUpO1xcbn1cXG5cXG4uY2FyZC1mb290ZXI6bGFzdC1jaGlsZCB7XFxuICBib3JkZXItcmFkaXVzOiAwIDAgY2FsYygwLjI1cmVtIC0gMXB4KSBjYWxjKDAuMjVyZW0gLSAxcHgpO1xcbn1cXG5cXG4uY2FyZC1oZWFkZXItdGFicyB7XFxuICBtYXJnaW4tcmlnaHQ6IC0wLjYyNXJlbTtcXG4gIG1hcmdpbi1ib3R0b206IC0wLjc1cmVtO1xcbiAgbWFyZ2luLWxlZnQ6IC0wLjYyNXJlbTtcXG4gIGJvcmRlci1ib3R0b206IDA7XFxufVxcblxcbi5jYXJkLWhlYWRlci1waWxscyB7XFxuICBtYXJnaW4tcmlnaHQ6IC0wLjYyNXJlbTtcXG4gIG1hcmdpbi1sZWZ0OiAtMC42MjVyZW07XFxufVxcblxcbi5jYXJkLWltZy1vdmVybGF5IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIHBhZGRpbmc6IDEuMjVyZW07XFxufVxcblxcbi5jYXJkLWltZyB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGJvcmRlci1yYWRpdXM6IGNhbGMoMC4yNXJlbSAtIDFweCk7XFxufVxcblxcbi5jYXJkLWltZy10b3Age1xcbiAgd2lkdGg6IDEwMCU7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBjYWxjKDAuMjVyZW0gLSAxcHgpO1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IGNhbGMoMC4yNXJlbSAtIDFweCk7XFxufVxcblxcbi5jYXJkLWltZy1ib3R0b20ge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogY2FsYygwLjI1cmVtIC0gMXB4KTtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IGNhbGMoMC4yNXJlbSAtIDFweCk7XFxufVxcblxcbi5jYXJkLWRlY2sge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbn1cXG5cXG4uY2FyZC1kZWNrIC5jYXJkIHtcXG4gIG1hcmdpbi1ib3R0b206IDE1cHg7XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLmNhcmQtZGVjayB7XFxuICAgIC1tcy1mbGV4LWZsb3c6IHJvdyB3cmFwO1xcbiAgICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0xNXB4O1xcbiAgICBtYXJnaW4tbGVmdDogLTE1cHg7XFxuICB9XFxuICAuY2FyZC1kZWNrIC5jYXJkIHtcXG4gICAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIC1tcy1mbGV4OiAxIDAgMCU7XFxuICAgIGZsZXg6IDEgMCAwJTtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIG1hcmdpbi1yaWdodDogMTVweDtcXG4gICAgbWFyZ2luLWJvdHRvbTogMDtcXG4gICAgbWFyZ2luLWxlZnQ6IDE1cHg7XFxuICB9XFxufVxcblxcbi5jYXJkLWdyb3VwIHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG59XFxuXFxuLmNhcmQtZ3JvdXAgPiAuY2FyZCB7XFxuICBtYXJnaW4tYm90dG9tOiAxNXB4O1xcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIHtcXG4gIC5jYXJkLWdyb3VwIHtcXG4gICAgLW1zLWZsZXgtZmxvdzogcm93IHdyYXA7XFxuICAgIGZsZXgtZmxvdzogcm93IHdyYXA7XFxuICB9XFxuICAuY2FyZC1ncm91cCA+IC5jYXJkIHtcXG4gICAgLW1zLWZsZXg6IDEgMCAwJTtcXG4gICAgZmxleDogMSAwIDAlO1xcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgfVxcbiAgLmNhcmQtZ3JvdXAgPiAuY2FyZCArIC5jYXJkIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDA7XFxuICAgIGJvcmRlci1sZWZ0OiAwO1xcbiAgfVxcbiAgLmNhcmQtZ3JvdXAgPiAuY2FyZDpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XFxuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xcbiAgfVxcbiAgLmNhcmQtZ3JvdXAgPiAuY2FyZDpub3QoOmxhc3QtY2hpbGQpIC5jYXJkLWltZy10b3AsXFxuICAuY2FyZC1ncm91cCA+IC5jYXJkOm5vdCg6bGFzdC1jaGlsZCkgLmNhcmQtaGVhZGVyIHtcXG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XFxuICB9XFxuICAuY2FyZC1ncm91cCA+IC5jYXJkOm5vdCg6bGFzdC1jaGlsZCkgLmNhcmQtaW1nLWJvdHRvbSxcXG4gIC5jYXJkLWdyb3VwID4gLmNhcmQ6bm90KDpsYXN0LWNoaWxkKSAuY2FyZC1mb290ZXIge1xcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcXG4gIH1cXG4gIC5jYXJkLWdyb3VwID4gLmNhcmQ6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xcbiAgfVxcbiAgLmNhcmQtZ3JvdXAgPiAuY2FyZDpub3QoOmZpcnN0LWNoaWxkKSAuY2FyZC1pbWctdG9wLFxcbiAgLmNhcmQtZ3JvdXAgPiAuY2FyZDpub3QoOmZpcnN0LWNoaWxkKSAuY2FyZC1oZWFkZXIge1xcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xcbiAgfVxcbiAgLmNhcmQtZ3JvdXAgPiAuY2FyZDpub3QoOmZpcnN0LWNoaWxkKSAuY2FyZC1pbWctYm90dG9tLFxcbiAgLmNhcmQtZ3JvdXAgPiAuY2FyZDpub3QoOmZpcnN0LWNoaWxkKSAuY2FyZC1mb290ZXIge1xcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xcbiAgfVxcbn1cXG5cXG4uY2FyZC1jb2x1bW5zIC5jYXJkIHtcXG4gIG1hcmdpbi1ib3R0b206IDAuNzVyZW07XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLmNhcmQtY29sdW1ucyB7XFxuICAgIC13ZWJraXQtY29sdW1uLWNvdW50OiAzO1xcbiAgICAtbW96LWNvbHVtbi1jb3VudDogMztcXG4gICAgY29sdW1uLWNvdW50OiAzO1xcbiAgICAtd2Via2l0LWNvbHVtbi1nYXA6IDEuMjVyZW07XFxuICAgIC1tb3otY29sdW1uLWdhcDogMS4yNXJlbTtcXG4gICAgY29sdW1uLWdhcDogMS4yNXJlbTtcXG4gICAgb3JwaGFuczogMTtcXG4gICAgd2lkb3dzOiAxO1xcbiAgfVxcbiAgLmNhcmQtY29sdW1ucyAuY2FyZCB7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgd2lkdGg6IDEwMCU7XFxuICB9XFxufVxcblxcbi5hY2NvcmRpb24gPiAuY2FyZCB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG5cXG4uYWNjb3JkaW9uID4gLmNhcmQ6bm90KDpmaXJzdC1vZi10eXBlKSAuY2FyZC1oZWFkZXI6Zmlyc3QtY2hpbGQge1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG59XFxuXFxuLmFjY29yZGlvbiA+IC5jYXJkOm5vdCg6Zmlyc3Qtb2YtdHlwZSk6bm90KDpsYXN0LW9mLXR5cGUpIHtcXG4gIGJvcmRlci1ib3R0b206IDA7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbn1cXG5cXG4uYWNjb3JkaW9uID4gLmNhcmQ6Zmlyc3Qtb2YtdHlwZSB7XFxuICBib3JkZXItYm90dG9tOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xcbn1cXG5cXG4uYWNjb3JkaW9uID4gLmNhcmQ6bGFzdC1vZi10eXBlIHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG59XFxuXFxuLmFjY29yZGlvbiA+IC5jYXJkIC5jYXJkLWhlYWRlciB7XFxuICBtYXJnaW4tYm90dG9tOiAtMXB4O1xcbn1cXG5cXG4uYnJlYWRjcnVtYiB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgcGFkZGluZzogMC43NXJlbSAxcmVtO1xcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLmJyZWFkY3J1bWItaXRlbSArIC5icmVhZGNydW1iLWl0ZW0ge1xcbiAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XFxufVxcblxcbi5icmVhZGNydW1iLWl0ZW0gKyAuYnJlYWRjcnVtYi1pdGVtOjpiZWZvcmUge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgcGFkZGluZy1yaWdodDogMC41cmVtO1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICBjb250ZW50OiBcXFwiL1xcXCI7XFxufVxcblxcbi5icmVhZGNydW1iLWl0ZW0gKyAuYnJlYWRjcnVtYi1pdGVtOmhvdmVyOjpiZWZvcmUge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxufVxcblxcbi5icmVhZGNydW1iLWl0ZW0gKyAuYnJlYWRjcnVtYi1pdGVtOmhvdmVyOjpiZWZvcmUge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbn1cXG5cXG4uYnJlYWRjcnVtYi1pdGVtLmFjdGl2ZSB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG59XFxuXFxuLnBhZ2luYXRpb24ge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgbGlzdC1zdHlsZTogbm9uZTtcXG4gIGJvcmRlci1yYWRpdXM6IDAuMjVyZW07XFxufVxcblxcbi5wYWdlLWxpbmsge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwYWRkaW5nOiAwLjVyZW0gMC43NXJlbTtcXG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xcbiAgbGluZS1oZWlnaHQ6IDEuMjU7XFxuICBjb2xvcjogIzAwN2JmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZGVlMmU2O1xcbn1cXG5cXG4ucGFnZS1saW5rOmhvdmVyIHtcXG4gIHotaW5kZXg6IDI7XFxuICBjb2xvcjogIzAwNTZiMztcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlOWVjZWY7XFxuICBib3JkZXItY29sb3I6ICNkZWUyZTY7XFxufVxcblxcbi5wYWdlLWxpbms6Zm9jdXMge1xcbiAgei1pbmRleDogMjtcXG4gIG91dGxpbmU6IDA7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgwLCAxMjMsIDI1NSwgMC4yNSk7XFxufVxcblxcbi5wYWdlLWl0ZW06Zmlyc3QtY2hpbGQgLnBhZ2UtbGluayB7XFxuICBtYXJnaW4tbGVmdDogMDtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4ucGFnZS1pdGVtOmxhc3QtY2hpbGQgLnBhZ2UtbGluayB7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4ucGFnZS1pdGVtLmFjdGl2ZSAucGFnZS1saW5rIHtcXG4gIHotaW5kZXg6IDE7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDdiZmY7XFxuICBib3JkZXItY29sb3I6ICMwMDdiZmY7XFxufVxcblxcbi5wYWdlLWl0ZW0uZGlzYWJsZWQgLnBhZ2UtbGluayB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgY3Vyc29yOiBhdXRvO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlci1jb2xvcjogI2RlZTJlNjtcXG59XFxuXFxuLnBhZ2luYXRpb24tbGcgLnBhZ2UtbGluayB7XFxuICBwYWRkaW5nOiAwLjc1cmVtIDEuNXJlbTtcXG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxufVxcblxcbi5wYWdpbmF0aW9uLWxnIC5wYWdlLWl0ZW06Zmlyc3QtY2hpbGQgLnBhZ2UtbGluayB7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwLjNyZW07XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwLjNyZW07XFxufVxcblxcbi5wYWdpbmF0aW9uLWxnIC5wYWdlLWl0ZW06bGFzdC1jaGlsZCAucGFnZS1saW5rIHtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjNyZW07XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4zcmVtO1xcbn1cXG5cXG4ucGFnaW5hdGlvbi1zbSAucGFnZS1saW5rIHtcXG4gIHBhZGRpbmc6IDAuMjVyZW0gMC41cmVtO1xcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxufVxcblxcbi5wYWdpbmF0aW9uLXNtIC5wYWdlLWl0ZW06Zmlyc3QtY2hpbGQgLnBhZ2UtbGluayB7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwLjJyZW07XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwLjJyZW07XFxufVxcblxcbi5wYWdpbmF0aW9uLXNtIC5wYWdlLWl0ZW06bGFzdC1jaGlsZCAucGFnZS1saW5rIHtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjJyZW07XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4ycmVtO1xcbn1cXG5cXG4uYmFkZ2Uge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgcGFkZGluZzogMC4yNWVtIDAuNGVtO1xcbiAgZm9udC1zaXplOiA3NSU7XFxuICBmb250LXdlaWdodDogNzAwO1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG4gIHRyYW5zaXRpb246IGNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJveC1zaGFkb3cgMC4xNXMgZWFzZS1pbi1vdXQ7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAuYmFkZ2Uge1xcbiAgICB0cmFuc2l0aW9uOiBub25lO1xcbiAgfVxcbn1cXG5cXG5hLmJhZGdlOmhvdmVyLCBhLmJhZGdlOmZvY3VzIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuXFxuLmJhZGdlOmVtcHR5IHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi5idG4gLmJhZGdlIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHRvcDogLTFweDtcXG59XFxuXFxuLmJhZGdlLXBpbGwge1xcbiAgcGFkZGluZy1yaWdodDogMC42ZW07XFxuICBwYWRkaW5nLWxlZnQ6IDAuNmVtO1xcbiAgYm9yZGVyLXJhZGl1czogMTByZW07XFxufVxcblxcbi5iYWRnZS1wcmltYXJ5IHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjtcXG59XFxuXFxuYS5iYWRnZS1wcmltYXJ5OmhvdmVyLCBhLmJhZGdlLXByaW1hcnk6Zm9jdXMge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA2MmNjO1xcbn1cXG5cXG5hLmJhZGdlLXByaW1hcnk6Zm9jdXMsIGEuYmFkZ2UtcHJpbWFyeS5mb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMCwgMTIzLCAyNTUsIDAuNSk7XFxufVxcblxcbi5iYWRnZS1zZWNvbmRhcnkge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM3NTdkO1xcbn1cXG5cXG5hLmJhZGdlLXNlY29uZGFyeTpob3ZlciwgYS5iYWRnZS1zZWNvbmRhcnk6Zm9jdXMge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTQ1YjYyO1xcbn1cXG5cXG5hLmJhZGdlLXNlY29uZGFyeTpmb2N1cywgYS5iYWRnZS1zZWNvbmRhcnkuZm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDEwOCwgMTE3LCAxMjUsIDAuNSk7XFxufVxcblxcbi5iYWRnZS1zdWNjZXNzIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI4YTc0NTtcXG59XFxuXFxuYS5iYWRnZS1zdWNjZXNzOmhvdmVyLCBhLmJhZGdlLXN1Y2Nlc3M6Zm9jdXMge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWU3ZTM0O1xcbn1cXG5cXG5hLmJhZGdlLXN1Y2Nlc3M6Zm9jdXMsIGEuYmFkZ2Utc3VjY2Vzcy5mb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNDAsIDE2NywgNjksIDAuNSk7XFxufVxcblxcbi5iYWRnZS1pbmZvIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE3YTJiODtcXG59XFxuXFxuYS5iYWRnZS1pbmZvOmhvdmVyLCBhLmJhZGdlLWluZm86Zm9jdXMge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTE3YThiO1xcbn1cXG5cXG5hLmJhZGdlLWluZm86Zm9jdXMsIGEuYmFkZ2UtaW5mby5mb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjMsIDE2MiwgMTg0LCAwLjUpO1xcbn1cXG5cXG4uYmFkZ2Utd2FybmluZyB7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmMxMDc7XFxufVxcblxcbmEuYmFkZ2Utd2FybmluZzpob3ZlciwgYS5iYWRnZS13YXJuaW5nOmZvY3VzIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QzOWUwMDtcXG59XFxuXFxuYS5iYWRnZS13YXJuaW5nOmZvY3VzLCBhLmJhZGdlLXdhcm5pbmcuZm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDI1NSwgMTkzLCA3LCAwLjUpO1xcbn1cXG5cXG4uYmFkZ2UtZGFuZ2VyIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RjMzU0NTtcXG59XFxuXFxuYS5iYWRnZS1kYW5nZXI6aG92ZXIsIGEuYmFkZ2UtZGFuZ2VyOmZvY3VzIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2JkMjEzMDtcXG59XFxuXFxuYS5iYWRnZS1kYW5nZXI6Zm9jdXMsIGEuYmFkZ2UtZGFuZ2VyLmZvY3VzIHtcXG4gIG91dGxpbmU6IDA7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgyMjAsIDUzLCA2OSwgMC41KTtcXG59XFxuXFxuLmJhZGdlLWxpZ2h0IHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcXG59XFxuXFxuYS5iYWRnZS1saWdodDpob3ZlciwgYS5iYWRnZS1saWdodDpmb2N1cyB7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkYWUwZTU7XFxufVxcblxcbmEuYmFkZ2UtbGlnaHQ6Zm9jdXMsIGEuYmFkZ2UtbGlnaHQuZm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDI0OCwgMjQ5LCAyNTAsIDAuNSk7XFxufVxcblxcbi5iYWRnZS1kYXJrIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM0M2E0MDtcXG59XFxuXFxuYS5iYWRnZS1kYXJrOmhvdmVyLCBhLmJhZGdlLWRhcms6Zm9jdXMge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWQyMTI0O1xcbn1cXG5cXG5hLmJhZGdlLWRhcms6Zm9jdXMsIGEuYmFkZ2UtZGFyay5mb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNTIsIDU4LCA2NCwgMC41KTtcXG59XFxuXFxuLmp1bWJvdHJvbiB7XFxuICBwYWRkaW5nOiAycmVtIDFyZW07XFxuICBtYXJnaW4tYm90dG9tOiAycmVtO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U5ZWNlZjtcXG4gIGJvcmRlci1yYWRpdXM6IDAuM3JlbTtcXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDU3NnB4KSB7XFxuICAuanVtYm90cm9uIHtcXG4gICAgcGFkZGluZzogNHJlbSAycmVtO1xcbiAgfVxcbn1cXG5cXG4uanVtYm90cm9uLWZsdWlkIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDA7XFxuICBwYWRkaW5nLWxlZnQ6IDA7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbn1cXG5cXG4uYWxlcnQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgcGFkZGluZzogMC43NXJlbSAxLjI1cmVtO1xcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLmFsZXJ0LWhlYWRpbmcge1xcbiAgY29sb3I6IGluaGVyaXQ7XFxufVxcblxcbi5hbGVydC1saW5rIHtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxufVxcblxcbi5hbGVydC1kaXNtaXNzaWJsZSB7XFxuICBwYWRkaW5nLXJpZ2h0OiA0cmVtO1xcbn1cXG5cXG4uYWxlcnQtZGlzbWlzc2libGUgLmNsb3NlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgcGFkZGluZzogMC43NXJlbSAxLjI1cmVtO1xcbiAgY29sb3I6IGluaGVyaXQ7XFxufVxcblxcbi5hbGVydC1wcmltYXJ5IHtcXG4gIGNvbG9yOiAjMDA0MDg1O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NjZTVmZjtcXG4gIGJvcmRlci1jb2xvcjogI2I4ZGFmZjtcXG59XFxuXFxuLmFsZXJ0LXByaW1hcnkgaHIge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogIzlmY2RmZjtcXG59XFxuXFxuLmFsZXJ0LXByaW1hcnkgLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICMwMDI3NTI7XFxufVxcblxcbi5hbGVydC1zZWNvbmRhcnkge1xcbiAgY29sb3I6ICMzODNkNDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTJlM2U1O1xcbiAgYm9yZGVyLWNvbG9yOiAjZDZkOGRiO1xcbn1cXG5cXG4uYWxlcnQtc2Vjb25kYXJ5IGhyIHtcXG4gIGJvcmRlci10b3AtY29sb3I6ICNjOGNiY2Y7XFxufVxcblxcbi5hbGVydC1zZWNvbmRhcnkgLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICMyMDIzMjY7XFxufVxcblxcbi5hbGVydC1zdWNjZXNzIHtcXG4gIGNvbG9yOiAjMTU1NzI0O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q0ZWRkYTtcXG4gIGJvcmRlci1jb2xvcjogI2MzZTZjYjtcXG59XFxuXFxuLmFsZXJ0LXN1Y2Nlc3MgaHIge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2IxZGZiYjtcXG59XFxuXFxuLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICMwYjJlMTM7XFxufVxcblxcbi5hbGVydC1pbmZvIHtcXG4gIGNvbG9yOiAjMGM1NDYwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QxZWNmMTtcXG4gIGJvcmRlci1jb2xvcjogI2JlZTVlYjtcXG59XFxuXFxuLmFsZXJ0LWluZm8gaHIge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2FiZGRlNTtcXG59XFxuXFxuLmFsZXJ0LWluZm8gLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICMwNjJjMzM7XFxufVxcblxcbi5hbGVydC13YXJuaW5nIHtcXG4gIGNvbG9yOiAjODU2NDA0O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjNjZDtcXG4gIGJvcmRlci1jb2xvcjogI2ZmZWViYTtcXG59XFxuXFxuLmFsZXJ0LXdhcm5pbmcgaHIge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2ZmZThhMTtcXG59XFxuXFxuLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICM1MzNmMDM7XFxufVxcblxcbi5hbGVydC1kYW5nZXIge1xcbiAgY29sb3I6ICM3MjFjMjQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhkN2RhO1xcbiAgYm9yZGVyLWNvbG9yOiAjZjVjNmNiO1xcbn1cXG5cXG4uYWxlcnQtZGFuZ2VyIGhyIHtcXG4gIGJvcmRlci10b3AtY29sb3I6ICNmMWIwYjc7XFxufVxcblxcbi5hbGVydC1kYW5nZXIgLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICM0OTEyMTc7XFxufVxcblxcbi5hbGVydC1saWdodCB7XFxuICBjb2xvcjogIzgxODE4MjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZWZlZmU7XFxuICBib3JkZXItY29sb3I6ICNmZGZkZmU7XFxufVxcblxcbi5hbGVydC1saWdodCBociB7XFxuICBib3JkZXItdG9wLWNvbG9yOiAjZWNlY2Y2O1xcbn1cXG5cXG4uYWxlcnQtbGlnaHQgLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICM2ODY4Njg7XFxufVxcblxcbi5hbGVydC1kYXJrIHtcXG4gIGNvbG9yOiAjMWIxZTIxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q2ZDhkOTtcXG4gIGJvcmRlci1jb2xvcjogI2M2YzhjYTtcXG59XFxuXFxuLmFsZXJ0LWRhcmsgaHIge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2I5YmJiZTtcXG59XFxuXFxuLmFsZXJ0LWRhcmsgLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICMwNDA1MDU7XFxufVxcblxcbkAtd2Via2l0LWtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlcyB7XFxuICBmcm9tIHtcXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMXJlbSAwO1xcbiAgfVxcbiAgdG8ge1xcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7XFxuICB9XFxufVxcblxcbkBrZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXMge1xcbiAgZnJvbSB7XFxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDFyZW0gMDtcXG4gIH1cXG4gIHRvIHtcXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwO1xcbiAgfVxcbn1cXG5cXG4ucHJvZ3Jlc3Mge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgaGVpZ2h0OiAxcmVtO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGZvbnQtc2l6ZTogMC43NXJlbTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlOWVjZWY7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4ucHJvZ3Jlc3MtYmFyIHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgY29sb3I6ICNmZmY7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjtcXG4gIHRyYW5zaXRpb246IHdpZHRoIDAuNnMgZWFzZTtcXG59XFxuXFxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcXG4gIC5wcm9ncmVzcy1iYXIge1xcbiAgICB0cmFuc2l0aW9uOiBub25lO1xcbiAgfVxcbn1cXG5cXG4ucHJvZ3Jlc3MtYmFyLXN0cmlwZWQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XFxuICBiYWNrZ3JvdW5kLXNpemU6IDFyZW0gMXJlbTtcXG59XFxuXFxuLnByb2dyZXNzLWJhci1hbmltYXRlZCB7XFxuICAtd2Via2l0LWFuaW1hdGlvbjogcHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMXMgbGluZWFyIGluZmluaXRlO1xcbiAgYW5pbWF0aW9uOiBwcm9ncmVzcy1iYXItc3RyaXBlcyAxcyBsaW5lYXIgaW5maW5pdGU7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAucHJvZ3Jlc3MtYmFyLWFuaW1hdGVkIHtcXG4gICAgLXdlYmtpdC1hbmltYXRpb246IG5vbmU7XFxuICAgIGFuaW1hdGlvbjogbm9uZTtcXG4gIH1cXG59XFxuXFxuLm1lZGlhIHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWFsaWduOiBzdGFydDtcXG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbn1cXG5cXG4ubWVkaWEtYm9keSB7XFxuICAtbXMtZmxleDogMTtcXG4gIGZsZXg6IDE7XFxufVxcblxcbi5saXN0LWdyb3VwIHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIHBhZGRpbmctbGVmdDogMDtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgY29sb3I6ICM0OTUwNTc7XFxuICB0ZXh0LWFsaWduOiBpbmhlcml0O1xcbn1cXG5cXG4ubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpob3ZlciwgLmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb246Zm9jdXMge1xcbiAgei1pbmRleDogMTtcXG4gIGNvbG9yOiAjNDk1MDU3O1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb246YWN0aXZlIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U5ZWNlZjtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaXRlbSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHBhZGRpbmc6IDAuNzVyZW0gMS4yNXJlbTtcXG4gIG1hcmdpbi1ib3R0b206IC0xcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEyNSk7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMC4yNXJlbTtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4ubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGQge1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwLjI1cmVtO1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZCwgLmxpc3QtZ3JvdXAtaXRlbTpkaXNhYmxlZCB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUge1xcbiAgei1pbmRleDogMjtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjtcXG4gIGJvcmRlci1jb2xvcjogIzAwN2JmZjtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbCB7XFxuICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxufVxcblxcbi5saXN0LWdyb3VwLWhvcml6b250YWwgLmxpc3QtZ3JvdXAtaXRlbSB7XFxuICBtYXJnaW4tcmlnaHQ6IC0xcHg7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbn1cXG5cXG4ubGlzdC1ncm91cC1ob3Jpem9udGFsIC5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMC4yNXJlbTtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbCAubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGQge1xcbiAgbWFyZ2luLXJpZ2h0OiAwO1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDAuMjVyZW07XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1zbSB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgfVxcbiAgLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1zbSAubGlzdC1ncm91cC1pdGVtIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtMXB4O1xcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgfVxcbiAgLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1zbSAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHtcXG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMC4yNXJlbTtcXG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMC4yNXJlbTtcXG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XFxuICB9XFxuICAubGlzdC1ncm91cC1ob3Jpem9udGFsLXNtIC5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZCB7XFxuICAgIG1hcmdpbi1yaWdodDogMDtcXG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDAuMjVyZW07XFxuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwLjI1cmVtO1xcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gIC5saXN0LWdyb3VwLWhvcml6b250YWwtbWQge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIH1cXG4gIC5saXN0LWdyb3VwLWhvcml6b250YWwtbWQgLmxpc3QtZ3JvdXAtaXRlbSB7XFxuICAgIG1hcmdpbi1yaWdodDogLTFweDtcXG4gICAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIH1cXG4gIC5saXN0LWdyb3VwLWhvcml6b250YWwtbWQgLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZCB7XFxuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xcbiAgfVxcbiAgLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1tZCAubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGQge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XFxuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjI1cmVtO1xcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XFxuICAubGlzdC1ncm91cC1ob3Jpem9udGFsLWxnIHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICB9XFxuICAubGlzdC1ncm91cC1ob3Jpem9udGFsLWxnIC5saXN0LWdyb3VwLWl0ZW0ge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0xcHg7XFxuICAgIG1hcmdpbi1ib3R0b206IDA7XFxuICB9XFxuICAubGlzdC1ncm91cC1ob3Jpem9udGFsLWxnIC5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwLjI1cmVtO1xcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwLjI1cmVtO1xcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG4gIH1cXG4gIC5saXN0LWdyb3VwLWhvcml6b250YWwtbGcgLmxpc3QtZ3JvdXAtaXRlbTpsYXN0LWNoaWxkIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG4gICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDAuMjVyZW07XFxuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC5saXN0LWdyb3VwLWhvcml6b250YWwteGwge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIH1cXG4gIC5saXN0LWdyb3VwLWhvcml6b250YWwteGwgLmxpc3QtZ3JvdXAtaXRlbSB7XFxuICAgIG1hcmdpbi1yaWdodDogLTFweDtcXG4gICAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIH1cXG4gIC5saXN0LWdyb3VwLWhvcml6b250YWwteGwgLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZCB7XFxuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xcbiAgfVxcbiAgLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC14bCAubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGQge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XFxuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjI1cmVtO1xcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcXG4gIH1cXG59XFxuXFxuLmxpc3QtZ3JvdXAtZmx1c2ggLmxpc3QtZ3JvdXAtaXRlbSB7XFxuICBib3JkZXItcmlnaHQ6IDA7XFxuICBib3JkZXItbGVmdDogMDtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxufVxcblxcbi5saXN0LWdyb3VwLWZsdXNoIC5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZCB7XFxuICBtYXJnaW4tYm90dG9tOiAtMXB4O1xcbn1cXG5cXG4ubGlzdC1ncm91cC1mbHVzaDpmaXJzdC1jaGlsZCAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHtcXG4gIGJvcmRlci10b3A6IDA7XFxufVxcblxcbi5saXN0LWdyb3VwLWZsdXNoOmxhc3QtY2hpbGQgLmxpc3QtZ3JvdXAtaXRlbTpsYXN0LWNoaWxkIHtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxuICBib3JkZXItYm90dG9tOiAwO1xcbn1cXG5cXG4ubGlzdC1ncm91cC1pdGVtLXByaW1hcnkge1xcbiAgY29sb3I6ICMwMDQwODU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjhkYWZmO1xcbn1cXG5cXG4ubGlzdC1ncm91cC1pdGVtLXByaW1hcnkubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpob3ZlciwgLmxpc3QtZ3JvdXAtaXRlbS1wcmltYXJ5Lmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb246Zm9jdXMge1xcbiAgY29sb3I6ICMwMDQwODU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWZjZGZmO1xcbn1cXG5cXG4ubGlzdC1ncm91cC1pdGVtLXByaW1hcnkubGlzdC1ncm91cC1pdGVtLWFjdGlvbi5hY3RpdmUge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA0MDg1O1xcbiAgYm9yZGVyLWNvbG9yOiAjMDA0MDg1O1xcbn1cXG5cXG4ubGlzdC1ncm91cC1pdGVtLXNlY29uZGFyeSB7XFxuICBjb2xvcjogIzM4M2Q0MTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkNmQ4ZGI7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tc2Vjb25kYXJ5Lmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb246aG92ZXIsIC5saXN0LWdyb3VwLWl0ZW0tc2Vjb25kYXJ5Lmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb246Zm9jdXMge1xcbiAgY29sb3I6ICMzODNkNDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzhjYmNmO1xcbn1cXG5cXG4ubGlzdC1ncm91cC1pdGVtLXNlY29uZGFyeS5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uLmFjdGl2ZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzODNkNDE7XFxuICBib3JkZXItY29sb3I6ICMzODNkNDE7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2VzcyB7XFxuICBjb2xvcjogIzE1NTcyNDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjM2U2Y2I7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmhvdmVyLCAubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpmb2N1cyB7XFxuICBjb2xvcjogIzE1NTcyNDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiMWRmYmI7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uLmFjdGl2ZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxNTU3MjQ7XFxuICBib3JkZXItY29sb3I6ICMxNTU3MjQ7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0taW5mbyB7XFxuICBjb2xvcjogIzBjNTQ2MDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiZWU1ZWI7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0taW5mby5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmhvdmVyLCAubGlzdC1ncm91cC1pdGVtLWluZm8ubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpmb2N1cyB7XFxuICBjb2xvcjogIzBjNTQ2MDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhYmRkZTU7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0taW5mby5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uLmFjdGl2ZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwYzU0NjA7XFxuICBib3JkZXItY29sb3I6ICMwYzU0NjA7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZyB7XFxuICBjb2xvcjogIzg1NjQwNDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmVlYmE7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZy5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmhvdmVyLCAubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpmb2N1cyB7XFxuICBjb2xvcjogIzg1NjQwNDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmU4YTE7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZy5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uLmFjdGl2ZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4NTY0MDQ7XFxuICBib3JkZXItY29sb3I6ICM4NTY0MDQ7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyIHtcXG4gIGNvbG9yOiAjNzIxYzI0O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1YzZjYjtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpob3ZlciwgLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpmb2N1cyB7XFxuICBjb2xvcjogIzcyMWMyNDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmMWIwYjc7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyLmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb24uYWN0aXZlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzcyMWMyNDtcXG4gIGJvcmRlci1jb2xvcjogIzcyMWMyNDtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaXRlbS1saWdodCB7XFxuICBjb2xvcjogIzgxODE4MjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZGZkZmU7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tbGlnaHQubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpob3ZlciwgLmxpc3QtZ3JvdXAtaXRlbS1saWdodC5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmZvY3VzIHtcXG4gIGNvbG9yOiAjODE4MTgyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNmNjtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaXRlbS1saWdodC5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uLmFjdGl2ZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MTgxODI7XFxuICBib3JkZXItY29sb3I6ICM4MTgxODI7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tZGFyayB7XFxuICBjb2xvcjogIzFiMWUyMTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjNmM4Y2E7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tZGFyay5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmhvdmVyLCAubGlzdC1ncm91cC1pdGVtLWRhcmsubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpmb2N1cyB7XFxuICBjb2xvcjogIzFiMWUyMTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiOWJiYmU7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tZGFyay5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uLmFjdGl2ZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxYjFlMjE7XFxuICBib3JkZXItY29sb3I6ICMxYjFlMjE7XFxufVxcblxcbi5jbG9zZSB7XFxuICBmbG9hdDogcmlnaHQ7XFxuICBmb250LXNpemU6IDEuNXJlbTtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxuICBsaW5lLWhlaWdodDogMTtcXG4gIGNvbG9yOiAjMDAwO1xcbiAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI2ZmZjtcXG4gIG9wYWNpdHk6IC41O1xcbn1cXG5cXG4uY2xvc2U6aG92ZXIge1xcbiAgY29sb3I6ICMwMDA7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcblxcbi5jbG9zZTpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTpob3ZlciwgLmNsb3NlOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmZvY3VzIHtcXG4gIG9wYWNpdHk6IC43NTtcXG59XFxuXFxuYnV0dG9uLmNsb3NlIHtcXG4gIHBhZGRpbmc6IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogMDtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG4gIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcXG4gIGFwcGVhcmFuY2U6IG5vbmU7XFxufVxcblxcbmEuY2xvc2UuZGlzYWJsZWQge1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi50b2FzdCB7XFxuICBtYXgtd2lkdGg6IDM1MHB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODUpO1xcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xKTtcXG4gIGJveC1zaGFkb3c6IDAgMC4yNXJlbSAwLjc1cmVtIHJnYmEoMCwgMCwgMCwgMC4xKTtcXG4gIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpO1xcbiAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpO1xcbiAgb3BhY2l0eTogMDtcXG4gIGJvcmRlci1yYWRpdXM6IDAuMjVyZW07XFxufVxcblxcbi50b2FzdDpub3QoOmxhc3QtY2hpbGQpIHtcXG4gIG1hcmdpbi1ib3R0b206IDAuNzVyZW07XFxufVxcblxcbi50b2FzdC5zaG93aW5nIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi50b2FzdC5zaG93IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLnRvYXN0LmhpZGUge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLnRvYXN0LWhlYWRlciB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIHBhZGRpbmc6IDAuMjVyZW0gMC43NXJlbTtcXG4gIGNvbG9yOiAjNmM3NTdkO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg1KTtcXG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjA1KTtcXG59XFxuXFxuLnRvYXN0LWJvZHkge1xcbiAgcGFkZGluZzogMC43NXJlbTtcXG59XFxuXFxuLm1vZGFsLW9wZW4ge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuXFxuLm1vZGFsLW9wZW4gLm1vZGFsIHtcXG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxufVxcblxcbi5tb2RhbCB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgei1pbmRleDogMTA1MDtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBvdXRsaW5lOiAwO1xcbn1cXG5cXG4ubW9kYWwtZGlhbG9nIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHdpZHRoOiBhdXRvO1xcbiAgbWFyZ2luOiAwLjVyZW07XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuLm1vZGFsLmZhZGUgLm1vZGFsLWRpYWxvZyB7XFxuICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjNzIGVhc2Utb3V0O1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgZWFzZS1vdXQ7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcyBlYXNlLW91dCwgLXdlYmtpdC10cmFuc2Zvcm0gMC4zcyBlYXNlLW91dDtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTUwcHgpO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTUwcHgpO1xcbn1cXG5cXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xcbiAgLm1vZGFsLmZhZGUgLm1vZGFsLWRpYWxvZyB7XFxuICAgIHRyYW5zaXRpb246IG5vbmU7XFxuICB9XFxufVxcblxcbi5tb2RhbC5zaG93IC5tb2RhbC1kaWFsb2cge1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IG5vbmU7XFxuICB0cmFuc2Zvcm06IG5vbmU7XFxufVxcblxcbi5tb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZSB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBtYXgtaGVpZ2h0OiBjYWxjKDEwMCUgLSAxcmVtKTtcXG59XFxuXFxuLm1vZGFsLWRpYWxvZy1zY3JvbGxhYmxlIC5tb2RhbC1jb250ZW50IHtcXG4gIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAxcmVtKTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5tb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZSAubW9kYWwtaGVhZGVyLFxcbi5tb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZSAubW9kYWwtZm9vdGVyIHtcXG4gIC1tcy1mbGV4LW5lZ2F0aXZlOiAwO1xcbiAgZmxleC1zaHJpbms6IDA7XFxufVxcblxcbi5tb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZSAubW9kYWwtYm9keSB7XFxuICBvdmVyZmxvdy15OiBhdXRvO1xcbn1cXG5cXG4ubW9kYWwtZGlhbG9nLWNlbnRlcmVkIHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgbWluLWhlaWdodDogY2FsYygxMDAlIC0gMXJlbSk7XFxufVxcblxcbi5tb2RhbC1kaWFsb2ctY2VudGVyZWQ6OmJlZm9yZSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGhlaWdodDogY2FsYygxMDB2aCAtIDFyZW0pO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxufVxcblxcbi5tb2RhbC1kaWFsb2ctY2VudGVyZWQubW9kYWwtZGlhbG9nLXNjcm9sbGFibGUge1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcblxcbi5tb2RhbC1kaWFsb2ctY2VudGVyZWQubW9kYWwtZGlhbG9nLXNjcm9sbGFibGUgLm1vZGFsLWNvbnRlbnQge1xcbiAgbWF4LWhlaWdodDogbm9uZTtcXG59XFxuXFxuLm1vZGFsLWRpYWxvZy1jZW50ZXJlZC5tb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZTo6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IG5vbmU7XFxufVxcblxcbi5tb2RhbC1jb250ZW50IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgcG9pbnRlci1ldmVudHM6IGF1dG87XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4yKTtcXG4gIGJvcmRlci1yYWRpdXM6IDAuM3JlbTtcXG4gIG91dGxpbmU6IDA7XFxufVxcblxcbi5tb2RhbC1iYWNrZHJvcCB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgei1pbmRleDogMTA0MDtcXG4gIHdpZHRoOiAxMDB2dztcXG4gIGhlaWdodDogMTAwdmg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xcbn1cXG5cXG4ubW9kYWwtYmFja2Ryb3AuZmFkZSB7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG5cXG4ubW9kYWwtYmFja2Ryb3Auc2hvdyB7XFxuICBvcGFjaXR5OiAwLjU7XFxufVxcblxcbi5tb2RhbC1oZWFkZXIge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0O1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxuICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgcGFkZGluZzogMXJlbSAxcmVtO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZWUyZTY7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwLjNyZW07XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC4zcmVtO1xcbn1cXG5cXG4ubW9kYWwtaGVhZGVyIC5jbG9zZSB7XFxuICBwYWRkaW5nOiAxcmVtIDFyZW07XFxuICBtYXJnaW46IC0xcmVtIC0xcmVtIC0xcmVtIGF1dG87XFxufVxcblxcbi5tb2RhbC10aXRsZSB7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG59XFxuXFxuLm1vZGFsLWJvZHkge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgLW1zLWZsZXg6IDEgMSBhdXRvO1xcbiAgZmxleDogMSAxIGF1dG87XFxuICBwYWRkaW5nOiAxcmVtO1xcbn1cXG5cXG4ubW9kYWwtZm9vdGVyIHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgLW1zLWZsZXgtcGFjazogZW5kO1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG4gIHBhZGRpbmc6IDFyZW07XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RlZTJlNjtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwLjNyZW07XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwLjNyZW07XFxufVxcblxcbi5tb2RhbC1mb290ZXIgPiA6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgbWFyZ2luLWxlZnQ6IC4yNXJlbTtcXG59XFxuXFxuLm1vZGFsLWZvb3RlciA+IDpub3QoOmxhc3QtY2hpbGQpIHtcXG4gIG1hcmdpbi1yaWdodDogLjI1cmVtO1xcbn1cXG5cXG4ubW9kYWwtc2Nyb2xsYmFyLW1lYXN1cmUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAtOTk5OXB4O1xcbiAgd2lkdGg6IDUwcHg7XFxuICBoZWlnaHQ6IDUwcHg7XFxuICBvdmVyZmxvdzogc2Nyb2xsO1xcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIHtcXG4gIC5tb2RhbC1kaWFsb2cge1xcbiAgICBtYXgtd2lkdGg6IDUwMHB4O1xcbiAgICBtYXJnaW46IDEuNzVyZW0gYXV0bztcXG4gIH1cXG4gIC5tb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZSB7XFxuICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIDMuNXJlbSk7XFxuICB9XFxuICAubW9kYWwtZGlhbG9nLXNjcm9sbGFibGUgLm1vZGFsLWNvbnRlbnQge1xcbiAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMy41cmVtKTtcXG4gIH1cXG4gIC5tb2RhbC1kaWFsb2ctY2VudGVyZWQge1xcbiAgICBtaW4taGVpZ2h0OiBjYWxjKDEwMCUgLSAzLjVyZW0pO1xcbiAgfVxcbiAgLm1vZGFsLWRpYWxvZy1jZW50ZXJlZDo6YmVmb3JlIHtcXG4gICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMy41cmVtKTtcXG4gIH1cXG4gIC5tb2RhbC1zbSB7XFxuICAgIG1heC13aWR0aDogMzAwcHg7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xcbiAgLm1vZGFsLWxnLFxcbiAgLm1vZGFsLXhsIHtcXG4gICAgbWF4LXdpZHRoOiA4MDBweDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xcbiAgLm1vZGFsLXhsIHtcXG4gICAgbWF4LXdpZHRoOiAxMTQwcHg7XFxuICB9XFxufVxcblxcbi50b29sdGlwIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHotaW5kZXg6IDEwNzA7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFxcXCJTZWdvZSBVSVxcXCIsIFJvYm90bywgXFxcIkhlbHZldGljYSBOZXVlXFxcIiwgQXJpYWwsIFxcXCJOb3RvIFNhbnNcXFwiLCBzYW5zLXNlcmlmLCBcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLCBcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLCBcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIiwgXFxcIk5vdG8gQ29sb3IgRW1vamlcXFwiO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgdGV4dC1hbGlnbjogc3RhcnQ7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICB0ZXh0LXNoYWRvdzogbm9uZTtcXG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xcbiAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcXG4gIHdvcmQtYnJlYWs6IG5vcm1hbDtcXG4gIHdvcmQtc3BhY2luZzogbm9ybWFsO1xcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcXG4gIGxpbmUtYnJlYWs6IGF1dG87XFxuICBmb250LXNpemU6IDAuODc1cmVtO1xcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xcbiAgb3BhY2l0eTogMDtcXG59XFxuXFxuLnRvb2x0aXAuc2hvdyB7XFxuICBvcGFjaXR5OiAwLjk7XFxufVxcblxcbi50b29sdGlwIC5hcnJvdyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAwLjhyZW07XFxuICBoZWlnaHQ6IDAuNHJlbTtcXG59XFxuXFxuLnRvb2x0aXAgLmFycm93OjpiZWZvcmUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcXG59XFxuXFxuLmJzLXRvb2x0aXAtdG9wLCAuYnMtdG9vbHRpcC1hdXRvW3gtcGxhY2VtZW50Xj1cXFwidG9wXFxcIl0ge1xcbiAgcGFkZGluZzogMC40cmVtIDA7XFxufVxcblxcbi5icy10b29sdGlwLXRvcCAuYXJyb3csIC5icy10b29sdGlwLWF1dG9beC1wbGFjZW1lbnRePVxcXCJ0b3BcXFwiXSAuYXJyb3cge1xcbiAgYm90dG9tOiAwO1xcbn1cXG5cXG4uYnMtdG9vbHRpcC10b3AgLmFycm93OjpiZWZvcmUsIC5icy10b29sdGlwLWF1dG9beC1wbGFjZW1lbnRePVxcXCJ0b3BcXFwiXSAuYXJyb3c6OmJlZm9yZSB7XFxuICB0b3A6IDA7XFxuICBib3JkZXItd2lkdGg6IDAuNHJlbSAwLjRyZW0gMDtcXG4gIGJvcmRlci10b3AtY29sb3I6ICMwMDA7XFxufVxcblxcbi5icy10b29sdGlwLXJpZ2h0LCAuYnMtdG9vbHRpcC1hdXRvW3gtcGxhY2VtZW50Xj1cXFwicmlnaHRcXFwiXSB7XFxuICBwYWRkaW5nOiAwIDAuNHJlbTtcXG59XFxuXFxuLmJzLXRvb2x0aXAtcmlnaHQgLmFycm93LCAuYnMtdG9vbHRpcC1hdXRvW3gtcGxhY2VtZW50Xj1cXFwicmlnaHRcXFwiXSAuYXJyb3cge1xcbiAgbGVmdDogMDtcXG4gIHdpZHRoOiAwLjRyZW07XFxuICBoZWlnaHQ6IDAuOHJlbTtcXG59XFxuXFxuLmJzLXRvb2x0aXAtcmlnaHQgLmFycm93OjpiZWZvcmUsIC5icy10b29sdGlwLWF1dG9beC1wbGFjZW1lbnRePVxcXCJyaWdodFxcXCJdIC5hcnJvdzo6YmVmb3JlIHtcXG4gIHJpZ2h0OiAwO1xcbiAgYm9yZGVyLXdpZHRoOiAwLjRyZW0gMC40cmVtIDAuNHJlbSAwO1xcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjMDAwO1xcbn1cXG5cXG4uYnMtdG9vbHRpcC1ib3R0b20sIC5icy10b29sdGlwLWF1dG9beC1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSB7XFxuICBwYWRkaW5nOiAwLjRyZW0gMDtcXG59XFxuXFxuLmJzLXRvb2x0aXAtYm90dG9tIC5hcnJvdywgLmJzLXRvb2x0aXAtYXV0b1t4LXBsYWNlbWVudF49XFxcImJvdHRvbVxcXCJdIC5hcnJvdyB7XFxuICB0b3A6IDA7XFxufVxcblxcbi5icy10b29sdGlwLWJvdHRvbSAuYXJyb3c6OmJlZm9yZSwgLmJzLXRvb2x0aXAtYXV0b1t4LXBsYWNlbWVudF49XFxcImJvdHRvbVxcXCJdIC5hcnJvdzo6YmVmb3JlIHtcXG4gIGJvdHRvbTogMDtcXG4gIGJvcmRlci13aWR0aDogMCAwLjRyZW0gMC40cmVtO1xcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzAwMDtcXG59XFxuXFxuLmJzLXRvb2x0aXAtbGVmdCwgLmJzLXRvb2x0aXAtYXV0b1t4LXBsYWNlbWVudF49XFxcImxlZnRcXFwiXSB7XFxuICBwYWRkaW5nOiAwIDAuNHJlbTtcXG59XFxuXFxuLmJzLXRvb2x0aXAtbGVmdCAuYXJyb3csIC5icy10b29sdGlwLWF1dG9beC1wbGFjZW1lbnRePVxcXCJsZWZ0XFxcIl0gLmFycm93IHtcXG4gIHJpZ2h0OiAwO1xcbiAgd2lkdGg6IDAuNHJlbTtcXG4gIGhlaWdodDogMC44cmVtO1xcbn1cXG5cXG4uYnMtdG9vbHRpcC1sZWZ0IC5hcnJvdzo6YmVmb3JlLCAuYnMtdG9vbHRpcC1hdXRvW3gtcGxhY2VtZW50Xj1cXFwibGVmdFxcXCJdIC5hcnJvdzo6YmVmb3JlIHtcXG4gIGxlZnQ6IDA7XFxuICBib3JkZXItd2lkdGg6IDAuNHJlbSAwIDAuNHJlbSAwLjRyZW07XFxuICBib3JkZXItbGVmdC1jb2xvcjogIzAwMDtcXG59XFxuXFxuLnRvb2x0aXAtaW5uZXIge1xcbiAgbWF4LXdpZHRoOiAyMDBweDtcXG4gIHBhZGRpbmc6IDAuMjVyZW0gMC41cmVtO1xcbiAgY29sb3I6ICNmZjAwMDA7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLnBvcG92ZXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHotaW5kZXg6IDEwNjA7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIG1heC13aWR0aDogMjc2cHg7XFxuICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcXFwiU2Vnb2UgVUlcXFwiLCBSb2JvdG8sIFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsIEFyaWFsLCBcXFwiTm90byBTYW5zXFxcIiwgc2Fucy1zZXJpZiwgXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIiwgXFxcIlNlZ29lIFVJIEVtb2ppXFxcIiwgXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCIsIFxcXCJOb3RvIENvbG9yIEVtb2ppXFxcIjtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG4gIHRleHQtYWxpZ246IHN0YXJ0O1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgdGV4dC1zaGFkb3c6IG5vbmU7XFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XFxuICB3b3JkLWJyZWFrOiBub3JtYWw7XFxuICB3b3JkLXNwYWNpbmc6IG5vcm1hbDtcXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XFxuICBsaW5lLWJyZWFrOiBhdXRvO1xcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcXG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjIpO1xcbiAgYm9yZGVyLXJhZGl1czogMC4zcmVtO1xcbn1cXG5cXG4ucG9wb3ZlciAuYXJyb3cge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMXJlbTtcXG4gIGhlaWdodDogMC41cmVtO1xcbiAgbWFyZ2luOiAwIDAuM3JlbTtcXG59XFxuXFxuLnBvcG92ZXIgLmFycm93OjpiZWZvcmUsIC5wb3BvdmVyIC5hcnJvdzo6YWZ0ZXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItc3R5bGU6IHNvbGlkO1xcbn1cXG5cXG4uYnMtcG9wb3Zlci10b3AsIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJ0b3BcXFwiXSB7XFxuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XFxufVxcblxcbi5icy1wb3BvdmVyLXRvcCA+IC5hcnJvdywgLmJzLXBvcG92ZXItYXV0b1t4LXBsYWNlbWVudF49XFxcInRvcFxcXCJdID4gLmFycm93IHtcXG4gIGJvdHRvbTogY2FsYygoMC41cmVtICsgMXB4KSAqIC0xKTtcXG59XFxuXFxuLmJzLXBvcG92ZXItdG9wID4gLmFycm93OjpiZWZvcmUsIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJ0b3BcXFwiXSA+IC5hcnJvdzo6YmVmb3JlIHtcXG4gIGJvdHRvbTogMDtcXG4gIGJvcmRlci13aWR0aDogMC41cmVtIDAuNXJlbSAwO1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcXG59XFxuXFxuLmJzLXBvcG92ZXItdG9wID4gLmFycm93OjphZnRlciwgLmJzLXBvcG92ZXItYXV0b1t4LXBsYWNlbWVudF49XFxcInRvcFxcXCJdID4gLmFycm93OjphZnRlciB7XFxuICBib3R0b206IDFweDtcXG4gIGJvcmRlci13aWR0aDogMC41cmVtIDAuNXJlbSAwO1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2ZmZjtcXG59XFxuXFxuLmJzLXBvcG92ZXItcmlnaHQsIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJyaWdodFxcXCJdIHtcXG4gIG1hcmdpbi1sZWZ0OiAwLjVyZW07XFxufVxcblxcbi5icy1wb3BvdmVyLXJpZ2h0ID4gLmFycm93LCAuYnMtcG9wb3Zlci1hdXRvW3gtcGxhY2VtZW50Xj1cXFwicmlnaHRcXFwiXSA+IC5hcnJvdyB7XFxuICBsZWZ0OiBjYWxjKCgwLjVyZW0gKyAxcHgpICogLTEpO1xcbiAgd2lkdGg6IDAuNXJlbTtcXG4gIGhlaWdodDogMXJlbTtcXG4gIG1hcmdpbjogMC4zcmVtIDA7XFxufVxcblxcbi5icy1wb3BvdmVyLXJpZ2h0ID4gLmFycm93OjpiZWZvcmUsIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJyaWdodFxcXCJdID4gLmFycm93OjpiZWZvcmUge1xcbiAgbGVmdDogMDtcXG4gIGJvcmRlci13aWR0aDogMC41cmVtIDAuNXJlbSAwLjVyZW0gMDtcXG4gIGJvcmRlci1yaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcXG59XFxuXFxuLmJzLXBvcG92ZXItcmlnaHQgPiAuYXJyb3c6OmFmdGVyLCAuYnMtcG9wb3Zlci1hdXRvW3gtcGxhY2VtZW50Xj1cXFwicmlnaHRcXFwiXSA+IC5hcnJvdzo6YWZ0ZXIge1xcbiAgbGVmdDogMXB4O1xcbiAgYm9yZGVyLXdpZHRoOiAwLjVyZW0gMC41cmVtIDAuNXJlbSAwO1xcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjZmZmO1xcbn1cXG5cXG4uYnMtcG9wb3Zlci1ib3R0b20sIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSB7XFxuICBtYXJnaW4tdG9wOiAwLjVyZW07XFxufVxcblxcbi5icy1wb3BvdmVyLWJvdHRvbSA+IC5hcnJvdywgLmJzLXBvcG92ZXItYXV0b1t4LXBsYWNlbWVudF49XFxcImJvdHRvbVxcXCJdID4gLmFycm93IHtcXG4gIHRvcDogY2FsYygoMC41cmVtICsgMXB4KSAqIC0xKTtcXG59XFxuXFxuLmJzLXBvcG92ZXItYm90dG9tID4gLmFycm93OjpiZWZvcmUsIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSA+IC5hcnJvdzo6YmVmb3JlIHtcXG4gIHRvcDogMDtcXG4gIGJvcmRlci13aWR0aDogMCAwLjVyZW0gMC41cmVtIDAuNXJlbTtcXG4gIGJvcmRlci1ib3R0b20tY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XFxufVxcblxcbi5icy1wb3BvdmVyLWJvdHRvbSA+IC5hcnJvdzo6YWZ0ZXIsIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSA+IC5hcnJvdzo6YWZ0ZXIge1xcbiAgdG9wOiAxcHg7XFxuICBib3JkZXItd2lkdGg6IDAgMC41cmVtIDAuNXJlbSAwLjVyZW07XFxuICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmO1xcbn1cXG5cXG4uYnMtcG9wb3Zlci1ib3R0b20gLnBvcG92ZXItaGVhZGVyOjpiZWZvcmUsIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSAucG9wb3Zlci1oZWFkZXI6OmJlZm9yZSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiA1MCU7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxcmVtO1xcbiAgbWFyZ2luLWxlZnQ6IC0wLjVyZW07XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjdmN2Y3O1xcbn1cXG5cXG4uYnMtcG9wb3Zlci1sZWZ0LCAuYnMtcG9wb3Zlci1hdXRvW3gtcGxhY2VtZW50Xj1cXFwibGVmdFxcXCJdIHtcXG4gIG1hcmdpbi1yaWdodDogMC41cmVtO1xcbn1cXG5cXG4uYnMtcG9wb3Zlci1sZWZ0ID4gLmFycm93LCAuYnMtcG9wb3Zlci1hdXRvW3gtcGxhY2VtZW50Xj1cXFwibGVmdFxcXCJdID4gLmFycm93IHtcXG4gIHJpZ2h0OiBjYWxjKCgwLjVyZW0gKyAxcHgpICogLTEpO1xcbiAgd2lkdGg6IDAuNXJlbTtcXG4gIGhlaWdodDogMXJlbTtcXG4gIG1hcmdpbjogMC4zcmVtIDA7XFxufVxcblxcbi5icy1wb3BvdmVyLWxlZnQgPiAuYXJyb3c6OmJlZm9yZSwgLmJzLXBvcG92ZXItYXV0b1t4LXBsYWNlbWVudF49XFxcImxlZnRcXFwiXSA+IC5hcnJvdzo6YmVmb3JlIHtcXG4gIHJpZ2h0OiAwO1xcbiAgYm9yZGVyLXdpZHRoOiAwLjVyZW0gMCAwLjVyZW0gMC41cmVtO1xcbiAgYm9yZGVyLWxlZnQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XFxufVxcblxcbi5icy1wb3BvdmVyLWxlZnQgPiAuYXJyb3c6OmFmdGVyLCAuYnMtcG9wb3Zlci1hdXRvW3gtcGxhY2VtZW50Xj1cXFwibGVmdFxcXCJdID4gLmFycm93OjphZnRlciB7XFxuICByaWdodDogMXB4O1xcbiAgYm9yZGVyLXdpZHRoOiAwLjVyZW0gMCAwLjVyZW0gMC41cmVtO1xcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICNmZmY7XFxufVxcblxcbi5wb3BvdmVyLWhlYWRlciB7XFxuICBwYWRkaW5nOiAwLjVyZW0gMC43NXJlbTtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxuICBmb250LXNpemU6IDFyZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3O1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlYmViZWI7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBjYWxjKDAuM3JlbSAtIDFweCk7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogY2FsYygwLjNyZW0gLSAxcHgpO1xcbn1cXG5cXG4ucG9wb3Zlci1oZWFkZXI6ZW1wdHkge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLnBvcG92ZXItYm9keSB7XFxuICBwYWRkaW5nOiAwLjVyZW0gMC43NXJlbTtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbn1cXG5cXG4uY2Fyb3VzZWwge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4uY2Fyb3VzZWwucG9pbnRlci1ldmVudCB7XFxuICAtbXMtdG91Y2gtYWN0aW9uOiBwYW4teTtcXG4gIHRvdWNoLWFjdGlvbjogcGFuLXk7XFxufVxcblxcbi5jYXJvdXNlbC1pbm5lciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMTAwJTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5jYXJvdXNlbC1pbm5lcjo6YWZ0ZXIge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBjbGVhcjogYm90aDtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbn1cXG5cXG4uY2Fyb3VzZWwtaXRlbSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgZmxvYXQ6IGxlZnQ7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1hcmdpbi1yaWdodDogLTEwMCU7XFxuICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuNnMgZWFzZS1pbi1vdXQ7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC42cyBlYXNlLWluLW91dDtcXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjZzIGVhc2UtaW4tb3V0LCAtd2Via2l0LXRyYW5zZm9ybSAwLjZzIGVhc2UtaW4tb3V0O1xcbn1cXG5cXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xcbiAgLmNhcm91c2VsLWl0ZW0ge1xcbiAgICB0cmFuc2l0aW9uOiBub25lO1xcbiAgfVxcbn1cXG5cXG4uY2Fyb3VzZWwtaXRlbS5hY3RpdmUsXFxuLmNhcm91c2VsLWl0ZW0tbmV4dCxcXG4uY2Fyb3VzZWwtaXRlbS1wcmV2IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4uY2Fyb3VzZWwtaXRlbS1uZXh0Om5vdCguY2Fyb3VzZWwtaXRlbS1sZWZ0KSxcXG4uYWN0aXZlLmNhcm91c2VsLWl0ZW0tcmlnaHQge1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XFxufVxcblxcbi5jYXJvdXNlbC1pdGVtLXByZXY6bm90KC5jYXJvdXNlbC1pdGVtLXJpZ2h0KSxcXG4uYWN0aXZlLmNhcm91c2VsLWl0ZW0tbGVmdCB7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSk7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xcbn1cXG5cXG4uY2Fyb3VzZWwtZmFkZSAuY2Fyb3VzZWwtaXRlbSB7XFxuICBvcGFjaXR5OiAwO1xcbiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogb3BhY2l0eTtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiBub25lO1xcbiAgdHJhbnNmb3JtOiBub25lO1xcbn1cXG5cXG4uY2Fyb3VzZWwtZmFkZSAuY2Fyb3VzZWwtaXRlbS5hY3RpdmUsXFxuLmNhcm91c2VsLWZhZGUgLmNhcm91c2VsLWl0ZW0tbmV4dC5jYXJvdXNlbC1pdGVtLWxlZnQsXFxuLmNhcm91c2VsLWZhZGUgLmNhcm91c2VsLWl0ZW0tcHJldi5jYXJvdXNlbC1pdGVtLXJpZ2h0IHtcXG4gIHotaW5kZXg6IDE7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG5cXG4uY2Fyb3VzZWwtZmFkZSAuYWN0aXZlLmNhcm91c2VsLWl0ZW0tbGVmdCxcXG4uY2Fyb3VzZWwtZmFkZSAuYWN0aXZlLmNhcm91c2VsLWl0ZW0tcmlnaHQge1xcbiAgei1pbmRleDogMDtcXG4gIG9wYWNpdHk6IDA7XFxuICB0cmFuc2l0aW9uOiAwcyAwLjZzIG9wYWNpdHk7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAuY2Fyb3VzZWwtZmFkZSAuYWN0aXZlLmNhcm91c2VsLWl0ZW0tbGVmdCxcXG4gIC5jYXJvdXNlbC1mYWRlIC5hY3RpdmUuY2Fyb3VzZWwtaXRlbS1yaWdodCB7XFxuICAgIHRyYW5zaXRpb246IG5vbmU7XFxuICB9XFxufVxcblxcbi5jYXJvdXNlbC1jb250cm9sLXByZXYsXFxuLmNhcm91c2VsLWNvbnRyb2wtbmV4dCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBib3R0b206IDA7XFxuICB6LWluZGV4OiAxO1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIHdpZHRoOiAxNSU7XFxuICBjb2xvcjogI2ZmZjtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIG9wYWNpdHk6IDAuNTtcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgZWFzZTtcXG59XFxuXFxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcXG4gIC5jYXJvdXNlbC1jb250cm9sLXByZXYsXFxuICAuY2Fyb3VzZWwtY29udHJvbC1uZXh0IHtcXG4gICAgdHJhbnNpdGlvbjogbm9uZTtcXG4gIH1cXG59XFxuXFxuLmNhcm91c2VsLWNvbnRyb2wtcHJldjpob3ZlciwgLmNhcm91c2VsLWNvbnRyb2wtcHJldjpmb2N1cyxcXG4uY2Fyb3VzZWwtY29udHJvbC1uZXh0OmhvdmVyLFxcbi5jYXJvdXNlbC1jb250cm9sLW5leHQ6Zm9jdXMge1xcbiAgY29sb3I6ICNmZmY7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICBvdXRsaW5lOiAwO1xcbiAgb3BhY2l0eTogMC45O1xcbn1cXG5cXG4uY2Fyb3VzZWwtY29udHJvbC1wcmV2IHtcXG4gIGxlZnQ6IDA7XFxufVxcblxcbi5jYXJvdXNlbC1jb250cm9sLW5leHQge1xcbiAgcmlnaHQ6IDA7XFxufVxcblxcbi5jYXJvdXNlbC1jb250cm9sLXByZXYtaWNvbixcXG4uY2Fyb3VzZWwtY29udHJvbC1uZXh0LWljb24ge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgd2lkdGg6IDIwcHg7XFxuICBoZWlnaHQ6IDIwcHg7XFxuICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgNTAlIC8gMTAwJSAxMDAlO1xcbn1cXG5cXG4uY2Fyb3VzZWwtY29udHJvbC1wcmV2LWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgZmlsbD0nJTIzZmZmJyB2aWV3Qm94PScwIDAgOCA4JyUzZSUzY3BhdGggZD0nTTUuMjUgMGwtNCA0IDQgNCAxLjUtMS41LTIuNS0yLjUgMi41LTIuNS0xLjUtMS41eicvJTNlJTNjL3N2ZyUzZVxcXCIpO1xcbn1cXG5cXG4uY2Fyb3VzZWwtY29udHJvbC1uZXh0LWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgZmlsbD0nJTIzZmZmJyB2aWV3Qm94PScwIDAgOCA4JyUzZSUzY3BhdGggZD0nTTIuNzUgMGwtMS41IDEuNSAyLjUgMi41LTIuNSAyLjUgMS41IDEuNSA0LTQtNC00eicvJTNlJTNjL3N2ZyUzZVxcXCIpO1xcbn1cXG5cXG4uY2Fyb3VzZWwtaW5kaWNhdG9ycyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICB6LWluZGV4OiAxNTtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgbWFyZ2luLXJpZ2h0OiAxNSU7XFxuICBtYXJnaW4tbGVmdDogMTUlO1xcbiAgbGlzdC1zdHlsZTogbm9uZTtcXG59XFxuXFxuLmNhcm91c2VsLWluZGljYXRvcnMgbGkge1xcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XFxuICAtbXMtZmxleDogMCAxIGF1dG87XFxuICBmbGV4OiAwIDEgYXV0bztcXG4gIHdpZHRoOiAzMHB4O1xcbiAgaGVpZ2h0OiAzcHg7XFxuICBtYXJnaW4tcmlnaHQ6IDNweDtcXG4gIG1hcmdpbi1sZWZ0OiAzcHg7XFxuICB0ZXh0LWluZGVudDogLTk5OXB4O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICBib3JkZXItdG9wOiAxMHB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWJvdHRvbTogMTBweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIG9wYWNpdHk6IC41O1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjZzIGVhc2U7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAuY2Fyb3VzZWwtaW5kaWNhdG9ycyBsaSB7XFxuICAgIHRyYW5zaXRpb246IG5vbmU7XFxuICB9XFxufVxcblxcbi5jYXJvdXNlbC1pbmRpY2F0b3JzIC5hY3RpdmUge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLmNhcm91c2VsLWNhcHRpb24ge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDE1JTtcXG4gIGJvdHRvbTogMjBweDtcXG4gIGxlZnQ6IDE1JTtcXG4gIHotaW5kZXg6IDEwO1xcbiAgcGFkZGluZy10b3A6IDIwcHg7XFxuICBwYWRkaW5nLWJvdHRvbTogMjBweDtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG5ALXdlYmtpdC1rZXlmcmFtZXMgc3Bpbm5lci1ib3JkZXIge1xcbiAgdG8ge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICB9XFxufVxcblxcbkBrZXlmcmFtZXMgc3Bpbm5lci1ib3JkZXIge1xcbiAgdG8ge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICB9XFxufVxcblxcbi5zcGlubmVyLWJvcmRlciB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB3aWR0aDogMnJlbTtcXG4gIGhlaWdodDogMnJlbTtcXG4gIHZlcnRpY2FsLWFsaWduOiB0ZXh0LWJvdHRvbTtcXG4gIGJvcmRlcjogMC4yNWVtIHNvbGlkIGN1cnJlbnRDb2xvcjtcXG4gIGJvcmRlci1yaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICAtd2Via2l0LWFuaW1hdGlvbjogc3Bpbm5lci1ib3JkZXIgLjc1cyBsaW5lYXIgaW5maW5pdGU7XFxuICBhbmltYXRpb246IHNwaW5uZXItYm9yZGVyIC43NXMgbGluZWFyIGluZmluaXRlO1xcbn1cXG5cXG4uc3Bpbm5lci1ib3JkZXItc20ge1xcbiAgd2lkdGg6IDFyZW07XFxuICBoZWlnaHQ6IDFyZW07XFxuICBib3JkZXItd2lkdGg6IDAuMmVtO1xcbn1cXG5cXG5ALXdlYmtpdC1rZXlmcmFtZXMgc3Bpbm5lci1ncm93IHtcXG4gIDAlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApO1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDApO1xcbiAgfVxcbiAgNTAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG59XFxuXFxuQGtleWZyYW1lcyBzcGlubmVyLWdyb3cge1xcbiAgMCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMCk7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XFxuICB9XFxuICA1MCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbn1cXG5cXG4uc3Bpbm5lci1ncm93IHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHdpZHRoOiAycmVtO1xcbiAgaGVpZ2h0OiAycmVtO1xcbiAgdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgb3BhY2l0eTogMDtcXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBzcGlubmVyLWdyb3cgLjc1cyBsaW5lYXIgaW5maW5pdGU7XFxuICBhbmltYXRpb246IHNwaW5uZXItZ3JvdyAuNzVzIGxpbmVhciBpbmZpbml0ZTtcXG59XFxuXFxuLnNwaW5uZXItZ3Jvdy1zbSB7XFxuICB3aWR0aDogMXJlbTtcXG4gIGhlaWdodDogMXJlbTtcXG59XFxuXFxuLmFsaWduLWJhc2VsaW5lIHtcXG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWxpZ24tdG9wIHtcXG4gIHZlcnRpY2FsLWFsaWduOiB0b3AgIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLW1pZGRsZSB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbGlnbi1ib3R0b20ge1xcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWxpZ24tdGV4dC1ib3R0b20ge1xcbiAgdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbGlnbi10ZXh0LXRvcCB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3AgIWltcG9ydGFudDtcXG59XFxuXFxuLmJnLXByaW1hcnkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG5hLmJnLXByaW1hcnk6aG92ZXIsIGEuYmctcHJpbWFyeTpmb2N1cyxcXG5idXR0b24uYmctcHJpbWFyeTpob3ZlcixcXG5idXR0b24uYmctcHJpbWFyeTpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA2MmNjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5iZy1zZWNvbmRhcnkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzZjNzU3ZCAhaW1wb3J0YW50O1xcbn1cXG5cXG5hLmJnLXNlY29uZGFyeTpob3ZlciwgYS5iZy1zZWNvbmRhcnk6Zm9jdXMsXFxuYnV0dG9uLmJnLXNlY29uZGFyeTpob3ZlcixcXG5idXR0b24uYmctc2Vjb25kYXJ5OmZvY3VzIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1NDViNjIgIWltcG9ydGFudDtcXG59XFxuXFxuLmJnLXN1Y2Nlc3Mge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI4YTc0NSAhaW1wb3J0YW50O1xcbn1cXG5cXG5hLmJnLXN1Y2Nlc3M6aG92ZXIsIGEuYmctc3VjY2Vzczpmb2N1cyxcXG5idXR0b24uYmctc3VjY2Vzczpob3ZlcixcXG5idXR0b24uYmctc3VjY2Vzczpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWU3ZTM0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5iZy1pbmZvIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxN2EyYjggIWltcG9ydGFudDtcXG59XFxuXFxuYS5iZy1pbmZvOmhvdmVyLCBhLmJnLWluZm86Zm9jdXMsXFxuYnV0dG9uLmJnLWluZm86aG92ZXIsXFxuYnV0dG9uLmJnLWluZm86Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzExN2E4YiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmctd2FybmluZyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZjMTA3ICFpbXBvcnRhbnQ7XFxufVxcblxcbmEuYmctd2FybmluZzpob3ZlciwgYS5iZy13YXJuaW5nOmZvY3VzLFxcbmJ1dHRvbi5iZy13YXJuaW5nOmhvdmVyLFxcbmJ1dHRvbi5iZy13YXJuaW5nOmZvY3VzIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkMzllMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmJnLWRhbmdlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGMzNTQ1ICFpbXBvcnRhbnQ7XFxufVxcblxcbmEuYmctZGFuZ2VyOmhvdmVyLCBhLmJnLWRhbmdlcjpmb2N1cyxcXG5idXR0b24uYmctZGFuZ2VyOmhvdmVyLFxcbmJ1dHRvbi5iZy1kYW5nZXI6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2JkMjEzMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmctbGlnaHQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYSAhaW1wb3J0YW50O1xcbn1cXG5cXG5hLmJnLWxpZ2h0OmhvdmVyLCBhLmJnLWxpZ2h0OmZvY3VzLFxcbmJ1dHRvbi5iZy1saWdodDpob3ZlcixcXG5idXR0b24uYmctbGlnaHQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RhZTBlNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmctZGFyayB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzQzYTQwICFpbXBvcnRhbnQ7XFxufVxcblxcbmEuYmctZGFyazpob3ZlciwgYS5iZy1kYXJrOmZvY3VzLFxcbmJ1dHRvbi5iZy1kYXJrOmhvdmVyLFxcbmJ1dHRvbi5iZy1kYXJrOmZvY3VzIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxZDIxMjQgIWltcG9ydGFudDtcXG59XFxuXFxuLmJnLXdoaXRlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJnLXRyYW5zcGFyZW50IHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ib3JkZXIge1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2RlZTJlNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLXRvcCB7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RlZTJlNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLXJpZ2h0IHtcXG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkZWUyZTYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJvcmRlci1ib3R0b20ge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZWUyZTYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJvcmRlci1sZWZ0IHtcXG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2RlZTJlNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLTAge1xcbiAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ib3JkZXItdG9wLTAge1xcbiAgYm9yZGVyLXRvcDogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLXJpZ2h0LTAge1xcbiAgYm9yZGVyLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ib3JkZXItYm90dG9tLTAge1xcbiAgYm9yZGVyLWJvdHRvbTogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLWxlZnQtMCB7XFxuICBib3JkZXItbGVmdDogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLXByaW1hcnkge1xcbiAgYm9yZGVyLWNvbG9yOiAjMDA3YmZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ib3JkZXItc2Vjb25kYXJ5IHtcXG4gIGJvcmRlci1jb2xvcjogIzZjNzU3ZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLXN1Y2Nlc3Mge1xcbiAgYm9yZGVyLWNvbG9yOiAjMjhhNzQ1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ib3JkZXItaW5mbyB7XFxuICBib3JkZXItY29sb3I6ICMxN2EyYjggIWltcG9ydGFudDtcXG59XFxuXFxuLmJvcmRlci13YXJuaW5nIHtcXG4gIGJvcmRlci1jb2xvcjogI2ZmYzEwNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLWRhbmdlciB7XFxuICBib3JkZXItY29sb3I6ICNkYzM1NDUgIWltcG9ydGFudDtcXG59XFxuXFxuLmJvcmRlci1saWdodCB7XFxuICBib3JkZXItY29sb3I6ICNmOGY5ZmEgIWltcG9ydGFudDtcXG59XFxuXFxuLmJvcmRlci1kYXJrIHtcXG4gIGJvcmRlci1jb2xvcjogIzM0M2E0MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLXdoaXRlIHtcXG4gIGJvcmRlci1jb2xvcjogI2ZmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucm91bmRlZC1zbSB7XFxuICBib3JkZXItcmFkaXVzOiAwLjJyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLnJvdW5kZWQge1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucm91bmRlZC10b3Age1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDAuMjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLnJvdW5kZWQtcmlnaHQge1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yb3VuZGVkLWJvdHRvbSB7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucm91bmRlZC1sZWZ0IHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAuMjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLnJvdW5kZWQtbGcge1xcbiAgYm9yZGVyLXJhZGl1czogMC4zcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yb3VuZGVkLWNpcmNsZSB7XFxuICBib3JkZXItcmFkaXVzOiA1MCUgIWltcG9ydGFudDtcXG59XFxuXFxuLnJvdW5kZWQtcGlsbCB7XFxuICBib3JkZXItcmFkaXVzOiA1MHJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucm91bmRlZC0wIHtcXG4gIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmNsZWFyZml4OjphZnRlciB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGNsZWFyOiBib3RoO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxufVxcblxcbi5kLW5vbmUge1xcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZC1pbmxpbmUge1xcbiAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kLWlubGluZS1ibG9jayB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcXG59XFxuXFxuLmQtYmxvY2sge1xcbiAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcXG59XFxuXFxuLmQtdGFibGUge1xcbiAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudDtcXG59XFxuXFxuLmQtdGFibGUtcm93IHtcXG4gIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZC10YWJsZS1jZWxsIHtcXG4gIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDtcXG59XFxuXFxuLmQtZmxleCB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZC1pbmxpbmUtZmxleCB7XFxuICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3ggIWltcG9ydGFudDtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLmQtc20tbm9uZSB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXNtLWlubGluZSB7XFxuICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtc20taW5saW5lLWJsb2NrIHtcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1zbS1ibG9jayB7XFxuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1zbS10YWJsZSB7XFxuICAgIGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1zbS10YWJsZS1yb3cge1xcbiAgICBkaXNwbGF5OiB0YWJsZS1yb3cgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXNtLXRhYmxlLWNlbGwge1xcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1zbS1mbGV4IHtcXG4gICAgZGlzcGxheTogLW1zLWZsZXhib3ggIWltcG9ydGFudDtcXG4gICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtc20taW5saW5lLWZsZXgge1xcbiAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3ggIWltcG9ydGFudDtcXG4gICAgZGlzcGxheTogaW5saW5lLWZsZXggIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XFxuICAuZC1tZC1ub25lIHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtbWQtaW5saW5lIHtcXG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1tZC1pbmxpbmUtYmxvY2sge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLW1kLWJsb2NrIHtcXG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLW1kLXRhYmxlIHtcXG4gICAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLW1kLXRhYmxlLXJvdyB7XFxuICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtbWQtdGFibGUtY2VsbCB7XFxuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLW1kLWZsZXgge1xcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1tZC1pbmxpbmUtZmxleCB7XFxuICAgIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcXG4gIC5kLWxnLW5vbmUge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1sZy1pbmxpbmUge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLWxnLWlubGluZS1ibG9jayB7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtbGctYmxvY2sge1xcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtbGctdGFibGUge1xcbiAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtbGctdGFibGUtcm93IHtcXG4gICAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1sZy10YWJsZS1jZWxsIHtcXG4gICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtbGctZmxleCB7XFxuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94ICFpbXBvcnRhbnQ7XFxuICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLWxnLWlubGluZS1mbGV4IHtcXG4gICAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94ICFpbXBvcnRhbnQ7XFxuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC5kLXhsLW5vbmUge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC14bC1pbmxpbmUge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXhsLWlubGluZS1ibG9jayB7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQteGwtYmxvY2sge1xcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQteGwtdGFibGUge1xcbiAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQteGwtdGFibGUtcm93IHtcXG4gICAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC14bC10YWJsZS1jZWxsIHtcXG4gICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQteGwtZmxleCB7XFxuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94ICFpbXBvcnRhbnQ7XFxuICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXhsLWlubGluZS1mbGV4IHtcXG4gICAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94ICFpbXBvcnRhbnQ7XFxuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSBwcmludCB7XFxuICAuZC1wcmludC1ub25lIHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtcHJpbnQtaW5saW5lIHtcXG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1wcmludC1pbmxpbmUtYmxvY2sge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXByaW50LWJsb2NrIHtcXG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXByaW50LXRhYmxlIHtcXG4gICAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXByaW50LXRhYmxlLXJvdyB7XFxuICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtcHJpbnQtdGFibGUtY2VsbCB7XFxuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXByaW50LWZsZXgge1xcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1wcmludC1pbmxpbmUtZmxleCB7XFxuICAgIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG4uZW1iZWQtcmVzcG9uc2l2ZSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxMDAlO1xcbiAgcGFkZGluZzogMDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5lbWJlZC1yZXNwb25zaXZlOjpiZWZvcmUge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG59XFxuXFxuLmVtYmVkLXJlc3BvbnNpdmUgLmVtYmVkLXJlc3BvbnNpdmUtaXRlbSxcXG4uZW1iZWQtcmVzcG9uc2l2ZSBpZnJhbWUsXFxuLmVtYmVkLXJlc3BvbnNpdmUgZW1iZWQsXFxuLmVtYmVkLXJlc3BvbnNpdmUgb2JqZWN0LFxcbi5lbWJlZC1yZXNwb25zaXZlIHZpZGVvIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGJvcmRlcjogMDtcXG59XFxuXFxuLmVtYmVkLXJlc3BvbnNpdmUtMjFieTk6OmJlZm9yZSB7XFxuICBwYWRkaW5nLXRvcDogNDIuODU3MTQzJTtcXG59XFxuXFxuLmVtYmVkLXJlc3BvbnNpdmUtMTZieTk6OmJlZm9yZSB7XFxuICBwYWRkaW5nLXRvcDogNTYuMjUlO1xcbn1cXG5cXG4uZW1iZWQtcmVzcG9uc2l2ZS00YnkzOjpiZWZvcmUge1xcbiAgcGFkZGluZy10b3A6IDc1JTtcXG59XFxuXFxuLmVtYmVkLXJlc3BvbnNpdmUtMWJ5MTo6YmVmb3JlIHtcXG4gIHBhZGRpbmctdG9wOiAxMDAlO1xcbn1cXG5cXG4uZmxleC1yb3cge1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3cgIWltcG9ydGFudDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3cgIWltcG9ydGFudDtcXG59XFxuXFxuLmZsZXgtY29sdW1uIHtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7XFxufVxcblxcbi5mbGV4LXJvdy1yZXZlcnNlIHtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2UgIWltcG9ydGFudDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZmxleC1jb2x1bW4tcmV2ZXJzZSB7XFxuICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2UgIWltcG9ydGFudDtcXG59XFxuXFxuLmZsZXgtd3JhcCB7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwICFpbXBvcnRhbnQ7XFxuICBmbGV4LXdyYXA6IHdyYXAgIWltcG9ydGFudDtcXG59XFxuXFxuLmZsZXgtbm93cmFwIHtcXG4gIC1tcy1mbGV4LXdyYXA6IG5vd3JhcCAhaW1wb3J0YW50O1xcbiAgZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDtcXG59XFxuXFxuLmZsZXgtd3JhcC1yZXZlcnNlIHtcXG4gIC1tcy1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgZmxleC13cmFwOiB3cmFwLXJldmVyc2UgIWltcG9ydGFudDtcXG59XFxuXFxuLmZsZXgtZmlsbCB7XFxuICAtbXMtZmxleDogMSAxIGF1dG8gIWltcG9ydGFudDtcXG4gIGZsZXg6IDEgMSBhdXRvICFpbXBvcnRhbnQ7XFxufVxcblxcbi5mbGV4LWdyb3ctMCB7XFxuICAtbXMtZmxleC1wb3NpdGl2ZTogMCAhaW1wb3J0YW50O1xcbiAgZmxleC1ncm93OiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5mbGV4LWdyb3ctMSB7XFxuICAtbXMtZmxleC1wb3NpdGl2ZTogMSAhaW1wb3J0YW50O1xcbiAgZmxleC1ncm93OiAxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5mbGV4LXNocmluay0wIHtcXG4gIC1tcy1mbGV4LW5lZ2F0aXZlOiAwICFpbXBvcnRhbnQ7XFxuICBmbGV4LXNocmluazogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZmxleC1zaHJpbmstMSB7XFxuICAtbXMtZmxleC1uZWdhdGl2ZTogMSAhaW1wb3J0YW50O1xcbiAgZmxleC1zaHJpbms6IDEgIWltcG9ydGFudDtcXG59XFxuXFxuLmp1c3RpZnktY29udGVudC1zdGFydCB7XFxuICAtbXMtZmxleC1wYWNrOiBzdGFydCAhaW1wb3J0YW50O1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5qdXN0aWZ5LWNvbnRlbnQtZW5kIHtcXG4gIC1tcy1mbGV4LXBhY2s6IGVuZCAhaW1wb3J0YW50O1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uanVzdGlmeS1jb250ZW50LWNlbnRlciB7XFxuICAtbXMtZmxleC1wYWNrOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB7XFxuICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5ICFpbXBvcnRhbnQ7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW4gIWltcG9ydGFudDtcXG59XFxuXFxuLmp1c3RpZnktY29udGVudC1hcm91bmQge1xcbiAgLW1zLWZsZXgtcGFjazogZGlzdHJpYnV0ZSAhaW1wb3J0YW50O1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQgIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLWl0ZW1zLXN0YXJ0IHtcXG4gIC1tcy1mbGV4LWFsaWduOiBzdGFydCAhaW1wb3J0YW50O1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLWl0ZW1zLWVuZCB7XFxuICAtbXMtZmxleC1hbGlnbjogZW5kICFpbXBvcnRhbnQ7XFxuICBhbGlnbi1pdGVtczogZmxleC1lbmQgIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLWl0ZW1zLWNlbnRlciB7XFxuICAtbXMtZmxleC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7XFxuICBhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbGlnbi1pdGVtcy1iYXNlbGluZSB7XFxuICAtbXMtZmxleC1hbGlnbjogYmFzZWxpbmUgIWltcG9ydGFudDtcXG4gIGFsaWduLWl0ZW1zOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWxpZ24taXRlbXMtc3RyZXRjaCB7XFxuICAtbXMtZmxleC1hbGlnbjogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2ggIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLWNvbnRlbnQtc3RhcnQge1xcbiAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdGFydCAhaW1wb3J0YW50O1xcbiAgYWxpZ24tY29udGVudDogZmxleC1zdGFydCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWxpZ24tY29udGVudC1lbmQge1xcbiAgLW1zLWZsZXgtbGluZS1wYWNrOiBlbmQgIWltcG9ydGFudDtcXG4gIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbGlnbi1jb250ZW50LWNlbnRlciB7XFxuICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgYWxpZ24tY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbGlnbi1jb250ZW50LWJldHdlZW4ge1xcbiAgLW1zLWZsZXgtbGluZS1wYWNrOiBqdXN0aWZ5ICFpbXBvcnRhbnQ7XFxuICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbGlnbi1jb250ZW50LWFyb3VuZCB7XFxuICAtbXMtZmxleC1saW5lLXBhY2s6IGRpc3RyaWJ1dGUgIWltcG9ydGFudDtcXG4gIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWxpZ24tY29udGVudC1zdHJldGNoIHtcXG4gIC1tcy1mbGV4LWxpbmUtcGFjazogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgYWxpZ24tY29udGVudDogc3RyZXRjaCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWxpZ24tc2VsZi1hdXRvIHtcXG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGF1dG8gIWltcG9ydGFudDtcXG4gIGFsaWduLXNlbGY6IGF1dG8gIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLXNlbGYtc3RhcnQge1xcbiAgLW1zLWZsZXgtaXRlbS1hbGlnbjogc3RhcnQgIWltcG9ydGFudDtcXG4gIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLXNlbGYtZW5kIHtcXG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGVuZCAhaW1wb3J0YW50O1xcbiAgYWxpZ24tc2VsZjogZmxleC1lbmQgIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLXNlbGYtY2VudGVyIHtcXG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgYWxpZ24tc2VsZjogY2VudGVyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbGlnbi1zZWxmLWJhc2VsaW5lIHtcXG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGJhc2VsaW5lICFpbXBvcnRhbnQ7XFxuICBhbGlnbi1zZWxmOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWxpZ24tc2VsZi1zdHJldGNoIHtcXG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gIGFsaWduLXNlbGY6IHN0cmV0Y2ggIWltcG9ydGFudDtcXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDU3NnB4KSB7XFxuICAuZmxleC1zbS1yb3cge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdyAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1zbS1jb2x1bW4ge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbiAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1zbS1yb3ctcmV2ZXJzZSB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2UgIWltcG9ydGFudDtcXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1zbS1jb2x1bW4tcmV2ZXJzZSB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2UgIWltcG9ydGFudDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1zbS13cmFwIHtcXG4gICAgLW1zLWZsZXgtd3JhcDogd3JhcCAhaW1wb3J0YW50O1xcbiAgICBmbGV4LXdyYXA6IHdyYXAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LXNtLW5vd3JhcCB7XFxuICAgIC1tcy1mbGV4LXdyYXA6IG5vd3JhcCAhaW1wb3J0YW50O1xcbiAgICBmbGV4LXdyYXA6IG5vd3JhcCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtc20td3JhcC1yZXZlcnNlIHtcXG4gICAgLW1zLWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtd3JhcDogd3JhcC1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1zbS1maWxsIHtcXG4gICAgLW1zLWZsZXg6IDEgMSBhdXRvICFpbXBvcnRhbnQ7XFxuICAgIGZsZXg6IDEgMSBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1zbS1ncm93LTAge1xcbiAgICAtbXMtZmxleC1wb3NpdGl2ZTogMCAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWdyb3c6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LXNtLWdyb3ctMSB7XFxuICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAxICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZ3JvdzogMSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtc20tc2hyaW5rLTAge1xcbiAgICAtbXMtZmxleC1uZWdhdGl2ZTogMCAhaW1wb3J0YW50O1xcbiAgICBmbGV4LXNocmluazogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtc20tc2hyaW5rLTEge1xcbiAgICAtbXMtZmxleC1uZWdhdGl2ZTogMSAhaW1wb3J0YW50O1xcbiAgICBmbGV4LXNocmluazogMSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmp1c3RpZnktY29udGVudC1zbS1zdGFydCB7XFxuICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0ICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmp1c3RpZnktY29udGVudC1zbS1lbmQge1xcbiAgICAtbXMtZmxleC1wYWNrOiBlbmQgIWltcG9ydGFudDtcXG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmp1c3RpZnktY29udGVudC1zbS1jZW50ZXIge1xcbiAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQtc20tYmV0d2VlbiB7XFxuICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnkgIWltcG9ydGFudDtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuanVzdGlmeS1jb250ZW50LXNtLWFyb3VuZCB7XFxuICAgIC1tcy1mbGV4LXBhY2s6IGRpc3RyaWJ1dGUgIWltcG9ydGFudDtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1pdGVtcy1zbS1zdGFydCB7XFxuICAgIC1tcy1mbGV4LWFsaWduOiBzdGFydCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLXNtLWVuZCB7XFxuICAgIC1tcy1mbGV4LWFsaWduOiBlbmQgIWltcG9ydGFudDtcXG4gICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24taXRlbXMtc20tY2VudGVyIHtcXG4gICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24taXRlbXMtc20tYmFzZWxpbmUge1xcbiAgICAtbXMtZmxleC1hbGlnbjogYmFzZWxpbmUgIWltcG9ydGFudDtcXG4gICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24taXRlbXMtc20tc3RyZXRjaCB7XFxuICAgIC1tcy1mbGV4LWFsaWduOiBzdHJldGNoICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tY29udGVudC1zbS1zdGFydCB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogc3RhcnQgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQtc20tZW5kIHtcXG4gICAgLW1zLWZsZXgtbGluZS1wYWNrOiBlbmQgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tY29udGVudDogZmxleC1lbmQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LXNtLWNlbnRlciB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogY2VudGVyICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQtc20tYmV0d2VlbiB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazoganVzdGlmeSAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tY29udGVudC1zbS1hcm91bmQge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IGRpc3RyaWJ1dGUgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tY29udGVudC1zbS1zdHJldGNoIHtcXG4gICAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdHJldGNoICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1zZWxmLXNtLWF1dG8ge1xcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBhdXRvICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1zZWxmLXNtLXN0YXJ0IHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogc3RhcnQgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tc2VsZjogZmxleC1zdGFydCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYtc20tZW5kIHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogZW5kICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi1zbS1jZW50ZXIge1xcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tc2VsZjogY2VudGVyICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi1zbS1iYXNlbGluZSB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGJhc2VsaW5lICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IGJhc2VsaW5lICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi1zbS1zdHJldGNoIHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBzdHJldGNoICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLmZsZXgtbWQtcm93IHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3cgIWltcG9ydGFudDtcXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdyAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbWQtY29sdW1uIHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4gIWltcG9ydGFudDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbiAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbWQtcm93LXJldmVyc2Uge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbWQtY29sdW1uLXJldmVyc2Uge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbWQtd3JhcCB7XFxuICAgIC1tcy1mbGV4LXdyYXA6IHdyYXAgIWltcG9ydGFudDtcXG4gICAgZmxleC13cmFwOiB3cmFwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1tZC1ub3dyYXAge1xcbiAgICAtbXMtZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDtcXG4gICAgZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LW1kLXdyYXAtcmV2ZXJzZSB7XFxuICAgIC1tcy1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgICBmbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbWQtZmlsbCB7XFxuICAgIC1tcy1mbGV4OiAxIDEgYXV0byAhaW1wb3J0YW50O1xcbiAgICBmbGV4OiAxIDEgYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbWQtZ3Jvdy0wIHtcXG4gICAgLW1zLWZsZXgtcG9zaXRpdmU6IDAgIWltcG9ydGFudDtcXG4gICAgZmxleC1ncm93OiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1tZC1ncm93LTEge1xcbiAgICAtbXMtZmxleC1wb3NpdGl2ZTogMSAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWdyb3c6IDEgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LW1kLXNocmluay0wIHtcXG4gICAgLW1zLWZsZXgtbmVnYXRpdmU6IDAgIWltcG9ydGFudDtcXG4gICAgZmxleC1zaHJpbms6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LW1kLXNocmluay0xIHtcXG4gICAgLW1zLWZsZXgtbmVnYXRpdmU6IDEgIWltcG9ydGFudDtcXG4gICAgZmxleC1zaHJpbms6IDEgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQtbWQtc3RhcnQge1xcbiAgICAtbXMtZmxleC1wYWNrOiBzdGFydCAhaW1wb3J0YW50O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQtbWQtZW5kIHtcXG4gICAgLW1zLWZsZXgtcGFjazogZW5kICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQtbWQtY2VudGVyIHtcXG4gICAgLW1zLWZsZXgtcGFjazogY2VudGVyICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuanVzdGlmeS1jb250ZW50LW1kLWJldHdlZW4ge1xcbiAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5ICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmp1c3RpZnktY29udGVudC1tZC1hcm91bmQge1xcbiAgICAtbXMtZmxleC1wYWNrOiBkaXN0cmlidXRlICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24taXRlbXMtbWQtc3RhcnQge1xcbiAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQgIWltcG9ydGFudDtcXG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1pdGVtcy1tZC1lbmQge1xcbiAgICAtbXMtZmxleC1hbGlnbjogZW5kICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLW1kLWNlbnRlciB7XFxuICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLW1kLWJhc2VsaW5lIHtcXG4gICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLW1kLXN0cmV0Y2gge1xcbiAgICAtbXMtZmxleC1hbGlnbjogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQtbWQtc3RhcnQge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IHN0YXJ0ICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LW1kLWVuZCB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZW5kICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tY29udGVudC1tZC1jZW50ZXIge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LW1kLWJldHdlZW4ge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IGp1c3RpZnkgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQtbWQtYXJvdW5kIHtcXG4gICAgLW1zLWZsZXgtbGluZS1wYWNrOiBkaXN0cmlidXRlICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQtbWQtc3RyZXRjaCB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBzdHJldGNoICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi1tZC1hdXRvIHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogYXV0byAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi1tZC1zdGFydCB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IHN0YXJ0ICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1zZWxmLW1kLWVuZCB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGVuZCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYtbWQtY2VudGVyIHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYtbWQtYmFzZWxpbmUge1xcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYtbWQtc3RyZXRjaCB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gICAgYWxpZ24tc2VsZjogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcXG4gIC5mbGV4LWxnLXJvdyB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93ICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3cgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LWxnLWNvbHVtbiB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LWxnLXJvdy1yZXZlcnNlIHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2UgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LWxnLWNvbHVtbi1yZXZlcnNlIHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2UgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LWxnLXdyYXAge1xcbiAgICAtbXMtZmxleC13cmFwOiB3cmFwICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtd3JhcDogd3JhcCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbGctbm93cmFwIHtcXG4gICAgLW1zLWZsZXgtd3JhcDogbm93cmFwICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtd3JhcDogbm93cmFwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1sZy13cmFwLXJldmVyc2Uge1xcbiAgICAtbXMtZmxleC13cmFwOiB3cmFwLXJldmVyc2UgIWltcG9ydGFudDtcXG4gICAgZmxleC13cmFwOiB3cmFwLXJldmVyc2UgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LWxnLWZpbGwge1xcbiAgICAtbXMtZmxleDogMSAxIGF1dG8gIWltcG9ydGFudDtcXG4gICAgZmxleDogMSAxIGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LWxnLWdyb3ctMCB7XFxuICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAwICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZ3JvdzogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbGctZ3Jvdy0xIHtcXG4gICAgLW1zLWZsZXgtcG9zaXRpdmU6IDEgIWltcG9ydGFudDtcXG4gICAgZmxleC1ncm93OiAxICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1sZy1zaHJpbmstMCB7XFxuICAgIC1tcy1mbGV4LW5lZ2F0aXZlOiAwICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtc2hyaW5rOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1sZy1zaHJpbmstMSB7XFxuICAgIC1tcy1mbGV4LW5lZ2F0aXZlOiAxICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtc2hyaW5rOiAxICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuanVzdGlmeS1jb250ZW50LWxnLXN0YXJ0IHtcXG4gICAgLW1zLWZsZXgtcGFjazogc3RhcnQgIWltcG9ydGFudDtcXG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuanVzdGlmeS1jb250ZW50LWxnLWVuZCB7XFxuICAgIC1tcy1mbGV4LXBhY2s6IGVuZCAhaW1wb3J0YW50O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuanVzdGlmeS1jb250ZW50LWxnLWNlbnRlciB7XFxuICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmp1c3RpZnktY29udGVudC1sZy1iZXR3ZWVuIHtcXG4gICAgLW1zLWZsZXgtcGFjazoganVzdGlmeSAhaW1wb3J0YW50O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW4gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQtbGctYXJvdW5kIHtcXG4gICAgLW1zLWZsZXgtcGFjazogZGlzdHJpYnV0ZSAhaW1wb3J0YW50O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLWxnLXN0YXJ0IHtcXG4gICAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0ICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24taXRlbXMtbGctZW5kIHtcXG4gICAgLW1zLWZsZXgtYWxpZ246IGVuZCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1pdGVtczogZmxleC1lbmQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1pdGVtcy1sZy1jZW50ZXIge1xcbiAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1pdGVtcy1sZy1iYXNlbGluZSB7XFxuICAgIC1tcy1mbGV4LWFsaWduOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1pdGVtcy1sZy1zdHJldGNoIHtcXG4gICAgLW1zLWZsZXgtYWxpZ246IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gICAgYWxpZ24taXRlbXM6IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LWxnLXN0YXJ0IHtcXG4gICAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdGFydCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tY29udGVudC1sZy1lbmQge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IGVuZCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBmbGV4LWVuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQtbGctY2VudGVyIHtcXG4gICAgLW1zLWZsZXgtbGluZS1wYWNrOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tY29udGVudC1sZy1iZXR3ZWVuIHtcXG4gICAgLW1zLWZsZXgtbGluZS1wYWNrOiBqdXN0aWZ5ICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW4gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LWxnLWFyb3VuZCB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZGlzdHJpYnV0ZSAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LWxnLXN0cmV0Y2gge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gICAgYWxpZ24tY29udGVudDogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYtbGctYXV0byB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGF1dG8gIWltcG9ydGFudDtcXG4gICAgYWxpZ24tc2VsZjogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYtbGctc3RhcnQge1xcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBzdGFydCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi1sZy1lbmQge1xcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBlbmQgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tc2VsZjogZmxleC1lbmQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1zZWxmLWxnLWNlbnRlciB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1zZWxmLWxnLWJhc2VsaW5lIHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogYmFzZWxpbmUgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tc2VsZjogYmFzZWxpbmUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1zZWxmLWxnLXN0cmV0Y2gge1xcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBzdHJldGNoICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xcbiAgLmZsZXgteGwtcm93IHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3cgIWltcG9ydGFudDtcXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdyAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgteGwtY29sdW1uIHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4gIWltcG9ydGFudDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbiAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgteGwtcm93LXJldmVyc2Uge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgteGwtY29sdW1uLXJldmVyc2Uge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgteGwtd3JhcCB7XFxuICAgIC1tcy1mbGV4LXdyYXA6IHdyYXAgIWltcG9ydGFudDtcXG4gICAgZmxleC13cmFwOiB3cmFwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC14bC1ub3dyYXAge1xcbiAgICAtbXMtZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDtcXG4gICAgZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LXhsLXdyYXAtcmV2ZXJzZSB7XFxuICAgIC1tcy1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgICBmbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgteGwtZmlsbCB7XFxuICAgIC1tcy1mbGV4OiAxIDEgYXV0byAhaW1wb3J0YW50O1xcbiAgICBmbGV4OiAxIDEgYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgteGwtZ3Jvdy0wIHtcXG4gICAgLW1zLWZsZXgtcG9zaXRpdmU6IDAgIWltcG9ydGFudDtcXG4gICAgZmxleC1ncm93OiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC14bC1ncm93LTEge1xcbiAgICAtbXMtZmxleC1wb3NpdGl2ZTogMSAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWdyb3c6IDEgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LXhsLXNocmluay0wIHtcXG4gICAgLW1zLWZsZXgtbmVnYXRpdmU6IDAgIWltcG9ydGFudDtcXG4gICAgZmxleC1zaHJpbms6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LXhsLXNocmluay0xIHtcXG4gICAgLW1zLWZsZXgtbmVnYXRpdmU6IDEgIWltcG9ydGFudDtcXG4gICAgZmxleC1zaHJpbms6IDEgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQteGwtc3RhcnQge1xcbiAgICAtbXMtZmxleC1wYWNrOiBzdGFydCAhaW1wb3J0YW50O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQteGwtZW5kIHtcXG4gICAgLW1zLWZsZXgtcGFjazogZW5kICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQteGwtY2VudGVyIHtcXG4gICAgLW1zLWZsZXgtcGFjazogY2VudGVyICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuanVzdGlmeS1jb250ZW50LXhsLWJldHdlZW4ge1xcbiAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5ICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmp1c3RpZnktY29udGVudC14bC1hcm91bmQge1xcbiAgICAtbXMtZmxleC1wYWNrOiBkaXN0cmlidXRlICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24taXRlbXMteGwtc3RhcnQge1xcbiAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQgIWltcG9ydGFudDtcXG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1pdGVtcy14bC1lbmQge1xcbiAgICAtbXMtZmxleC1hbGlnbjogZW5kICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLXhsLWNlbnRlciB7XFxuICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLXhsLWJhc2VsaW5lIHtcXG4gICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLXhsLXN0cmV0Y2gge1xcbiAgICAtbXMtZmxleC1hbGlnbjogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQteGwtc3RhcnQge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IHN0YXJ0ICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LXhsLWVuZCB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZW5kICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tY29udGVudC14bC1jZW50ZXIge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LXhsLWJldHdlZW4ge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IGp1c3RpZnkgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQteGwtYXJvdW5kIHtcXG4gICAgLW1zLWZsZXgtbGluZS1wYWNrOiBkaXN0cmlidXRlICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQteGwtc3RyZXRjaCB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBzdHJldGNoICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi14bC1hdXRvIHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogYXV0byAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi14bC1zdGFydCB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IHN0YXJ0ICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1zZWxmLXhsLWVuZCB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGVuZCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYteGwtY2VudGVyIHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYteGwtYmFzZWxpbmUge1xcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYteGwtc3RyZXRjaCB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gICAgYWxpZ24tc2VsZjogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG4uZmxvYXQtbGVmdCB7XFxuICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZmxvYXQtcmlnaHQge1xcbiAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5mbG9hdC1ub25lIHtcXG4gIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLmZsb2F0LXNtLWxlZnQge1xcbiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsb2F0LXNtLXJpZ2h0IHtcXG4gICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxvYXQtc20tbm9uZSB7XFxuICAgIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLmZsb2F0LW1kLWxlZnQge1xcbiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsb2F0LW1kLXJpZ2h0IHtcXG4gICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxvYXQtbWQtbm9uZSB7XFxuICAgIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xcbiAgLmZsb2F0LWxnLWxlZnQge1xcbiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsb2F0LWxnLXJpZ2h0IHtcXG4gICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxvYXQtbGctbm9uZSB7XFxuICAgIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC5mbG9hdC14bC1sZWZ0IHtcXG4gICAgZmxvYXQ6IGxlZnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbG9hdC14bC1yaWdodCB7XFxuICAgIGZsb2F0OiByaWdodCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsb2F0LXhsLW5vbmUge1xcbiAgICBmbG9hdDogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG4ub3ZlcmZsb3ctYXV0byB7XFxuICBvdmVyZmxvdzogYXV0byAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3ZlcmZsb3ctaGlkZGVuIHtcXG4gIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcXG59XFxuXFxuLnBvc2l0aW9uLXN0YXRpYyB7XFxuICBwb3NpdGlvbjogc3RhdGljICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wb3NpdGlvbi1yZWxhdGl2ZSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcXG59XFxuXFxuLnBvc2l0aW9uLWFic29sdXRlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucG9zaXRpb24tZml4ZWQge1xcbiAgcG9zaXRpb246IGZpeGVkICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wb3NpdGlvbi1zdGlja3kge1xcbiAgcG9zaXRpb246IC13ZWJraXQtc3RpY2t5ICFpbXBvcnRhbnQ7XFxuICBwb3NpdGlvbjogc3RpY2t5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5maXhlZC10b3Age1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgdG9wOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBsZWZ0OiAwO1xcbiAgei1pbmRleDogMTAzMDtcXG59XFxuXFxuLmZpeGVkLWJvdHRvbSB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICB6LWluZGV4OiAxMDMwO1xcbn1cXG5cXG5Ac3VwcG9ydHMgKChwb3NpdGlvbjogLXdlYmtpdC1zdGlja3kpIG9yIChwb3NpdGlvbjogc3RpY2t5KSkge1xcbiAgLnN0aWNreS10b3Age1xcbiAgICBwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7XFxuICAgIHBvc2l0aW9uOiBzdGlja3k7XFxuICAgIHRvcDogMDtcXG4gICAgei1pbmRleDogMTAyMDtcXG4gIH1cXG59XFxuXFxuLnNyLW9ubHkge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6IDFweDtcXG4gIGhlaWdodDogMXB4O1xcbiAgcGFkZGluZzogMDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBjbGlwOiByZWN0KDAsIDAsIDAsIDApO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIGJvcmRlcjogMDtcXG59XFxuXFxuLnNyLW9ubHktZm9jdXNhYmxlOmFjdGl2ZSwgLnNyLW9ubHktZm9jdXNhYmxlOmZvY3VzIHtcXG4gIHBvc2l0aW9uOiBzdGF0aWM7XFxuICB3aWR0aDogYXV0bztcXG4gIGhlaWdodDogYXV0bztcXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xcbiAgY2xpcDogYXV0bztcXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XFxufVxcblxcbi5zaGFkb3ctc20ge1xcbiAgYm94LXNoYWRvdzogMCAwLjEyNXJlbSAwLjI1cmVtIHJnYmEoMCwgMCwgMCwgMC4wNzUpICFpbXBvcnRhbnQ7XFxufVxcblxcbi5zaGFkb3cge1xcbiAgYm94LXNoYWRvdzogMCAwLjVyZW0gMXJlbSByZ2JhKDAsIDAsIDAsIDAuMTUpICFpbXBvcnRhbnQ7XFxufVxcblxcbi5zaGFkb3ctbGcge1xcbiAgYm94LXNoYWRvdzogMCAxcmVtIDNyZW0gcmdiYSgwLCAwLCAwLCAwLjE3NSkgIWltcG9ydGFudDtcXG59XFxuXFxuLnNoYWRvdy1ub25lIHtcXG4gIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuXFxuLnctMjUge1xcbiAgd2lkdGg6IDI1JSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udy01MCB7XFxuICB3aWR0aDogNTAlICFpbXBvcnRhbnQ7XFxufVxcblxcbi53LTc1IHtcXG4gIHdpZHRoOiA3NSUgIWltcG9ydGFudDtcXG59XFxuXFxuLnctMTAwIHtcXG4gIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XFxufVxcblxcbi53LWF1dG8ge1xcbiAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDtcXG59XFxuXFxuLmgtMjUge1xcbiAgaGVpZ2h0OiAyNSUgIWltcG9ydGFudDtcXG59XFxuXFxuLmgtNTAge1xcbiAgaGVpZ2h0OiA1MCUgIWltcG9ydGFudDtcXG59XFxuXFxuLmgtNzUge1xcbiAgaGVpZ2h0OiA3NSUgIWltcG9ydGFudDtcXG59XFxuXFxuLmgtMTAwIHtcXG4gIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaC1hdXRvIHtcXG4gIGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubXctMTAwIHtcXG4gIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWgtMTAwIHtcXG4gIG1heC1oZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcXG59XFxuXFxuLm1pbi12dy0xMDAge1xcbiAgbWluLXdpZHRoOiAxMDB2dyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWluLXZoLTEwMCB7XFxuICBtaW4taGVpZ2h0OiAxMDB2aCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udnctMTAwIHtcXG4gIHdpZHRoOiAxMDB2dyAhaW1wb3J0YW50O1xcbn1cXG5cXG4udmgtMTAwIHtcXG4gIGhlaWdodDogMTAwdmggIWltcG9ydGFudDtcXG59XFxuXFxuLnN0cmV0Y2hlZC1saW5rOjphZnRlciB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICB6LWluZGV4OiAxO1xcbiAgcG9pbnRlci1ldmVudHM6IGF1dG87XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7XFxufVxcblxcbi5tLTAge1xcbiAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC0wLFxcbi5teS0wIHtcXG4gIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm1yLTAsXFxuLm14LTAge1xcbiAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tYi0wLFxcbi5teS0wIHtcXG4gIG1hcmdpbi1ib3R0b206IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLTAsXFxuLm14LTAge1xcbiAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm0tMSB7XFxuICBtYXJnaW46IDAuMjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm10LTEsXFxuLm15LTEge1xcbiAgbWFyZ2luLXRvcDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubXItMSxcXG4ubXgtMSB7XFxuICBtYXJnaW4tcmlnaHQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1iLTEsXFxuLm15LTEge1xcbiAgbWFyZ2luLWJvdHRvbTogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWwtMSxcXG4ubXgtMSB7XFxuICBtYXJnaW4tbGVmdDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubS0yIHtcXG4gIG1hcmdpbjogMC41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC0yLFxcbi5teS0yIHtcXG4gIG1hcmdpbi10b3A6IDAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubXItMixcXG4ubXgtMiB7XFxuICBtYXJnaW4tcmlnaHQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWItMixcXG4ubXktMiB7XFxuICBtYXJnaW4tYm90dG9tOiAwLjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLTIsXFxuLm14LTIge1xcbiAgbWFyZ2luLWxlZnQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubS0zIHtcXG4gIG1hcmdpbjogMXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubXQtMyxcXG4ubXktMyB7XFxuICBtYXJnaW4tdG9wOiAxcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tci0zLFxcbi5teC0zIHtcXG4gIG1hcmdpbi1yaWdodDogMXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWItMyxcXG4ubXktMyB7XFxuICBtYXJnaW4tYm90dG9tOiAxcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tbC0zLFxcbi5teC0zIHtcXG4gIG1hcmdpbi1sZWZ0OiAxcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tLTQge1xcbiAgbWFyZ2luOiAxLjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm10LTQsXFxuLm15LTQge1xcbiAgbWFyZ2luLXRvcDogMS41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tci00LFxcbi5teC00IHtcXG4gIG1hcmdpbi1yaWdodDogMS41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tYi00LFxcbi5teS00IHtcXG4gIG1hcmdpbi1ib3R0b206IDEuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWwtNCxcXG4ubXgtNCB7XFxuICBtYXJnaW4tbGVmdDogMS41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tLTUge1xcbiAgbWFyZ2luOiAzcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC01LFxcbi5teS01IHtcXG4gIG1hcmdpbi10b3A6IDNyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1yLTUsXFxuLm14LTUge1xcbiAgbWFyZ2luLXJpZ2h0OiAzcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tYi01LFxcbi5teS01IHtcXG4gIG1hcmdpbi1ib3R0b206IDNyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLTUsXFxuLm14LTUge1xcbiAgbWFyZ2luLWxlZnQ6IDNyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLnAtMCB7XFxuICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdC0wLFxcbi5weS0wIHtcXG4gIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wci0wLFxcbi5weC0wIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnBiLTAsXFxuLnB5LTAge1xcbiAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnBsLTAsXFxuLnB4LTAge1xcbiAgcGFkZGluZy1sZWZ0OiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wLTEge1xcbiAgcGFkZGluZzogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHQtMSxcXG4ucHktMSB7XFxuICBwYWRkaW5nLXRvcDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHItMSxcXG4ucHgtMSB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wYi0xLFxcbi5weS0xIHtcXG4gIHBhZGRpbmctYm90dG9tOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wbC0xLFxcbi5weC0xIHtcXG4gIHBhZGRpbmctbGVmdDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucC0yIHtcXG4gIHBhZGRpbmc6IDAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHQtMixcXG4ucHktMiB7XFxuICBwYWRkaW5nLXRvcDogMC41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wci0yLFxcbi5weC0yIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGItMixcXG4ucHktMiB7XFxuICBwYWRkaW5nLWJvdHRvbTogMC41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wbC0yLFxcbi5weC0yIHtcXG4gIHBhZGRpbmctbGVmdDogMC41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wLTMge1xcbiAgcGFkZGluZzogMXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHQtMyxcXG4ucHktMyB7XFxuICBwYWRkaW5nLXRvcDogMXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHItMyxcXG4ucHgtMyB7XFxuICBwYWRkaW5nLXJpZ2h0OiAxcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wYi0zLFxcbi5weS0zIHtcXG4gIHBhZGRpbmctYm90dG9tOiAxcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wbC0zLFxcbi5weC0zIHtcXG4gIHBhZGRpbmctbGVmdDogMXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucC00IHtcXG4gIHBhZGRpbmc6IDEuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHQtNCxcXG4ucHktNCB7XFxuICBwYWRkaW5nLXRvcDogMS41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wci00LFxcbi5weC00IHtcXG4gIHBhZGRpbmctcmlnaHQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGItNCxcXG4ucHktNCB7XFxuICBwYWRkaW5nLWJvdHRvbTogMS41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wbC00LFxcbi5weC00IHtcXG4gIHBhZGRpbmctbGVmdDogMS41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wLTUge1xcbiAgcGFkZGluZzogM3JlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHQtNSxcXG4ucHktNSB7XFxuICBwYWRkaW5nLXRvcDogM3JlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHItNSxcXG4ucHgtNSB7XFxuICBwYWRkaW5nLXJpZ2h0OiAzcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wYi01LFxcbi5weS01IHtcXG4gIHBhZGRpbmctYm90dG9tOiAzcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wbC01LFxcbi5weC01IHtcXG4gIHBhZGRpbmctbGVmdDogM3JlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubS1uMSB7XFxuICBtYXJnaW46IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC1uMSxcXG4ubXktbjEge1xcbiAgbWFyZ2luLXRvcDogLTAuMjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1yLW4xLFxcbi5teC1uMSB7XFxuICBtYXJnaW4tcmlnaHQ6IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tYi1uMSxcXG4ubXktbjEge1xcbiAgbWFyZ2luLWJvdHRvbTogLTAuMjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLW4xLFxcbi5teC1uMSB7XFxuICBtYXJnaW4tbGVmdDogLTAuMjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm0tbjIge1xcbiAgbWFyZ2luOiAtMC41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC1uMixcXG4ubXktbjIge1xcbiAgbWFyZ2luLXRvcDogLTAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubXItbjIsXFxuLm14LW4yIHtcXG4gIG1hcmdpbi1yaWdodDogLTAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWItbjIsXFxuLm15LW4yIHtcXG4gIG1hcmdpbi1ib3R0b206IC0wLjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLW4yLFxcbi5teC1uMiB7XFxuICBtYXJnaW4tbGVmdDogLTAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubS1uMyB7XFxuICBtYXJnaW46IC0xcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC1uMyxcXG4ubXktbjMge1xcbiAgbWFyZ2luLXRvcDogLTFyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1yLW4zLFxcbi5teC1uMyB7XFxuICBtYXJnaW4tcmlnaHQ6IC0xcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tYi1uMyxcXG4ubXktbjMge1xcbiAgbWFyZ2luLWJvdHRvbTogLTFyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLW4zLFxcbi5teC1uMyB7XFxuICBtYXJnaW4tbGVmdDogLTFyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm0tbjQge1xcbiAgbWFyZ2luOiAtMS41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC1uNCxcXG4ubXktbjQge1xcbiAgbWFyZ2luLXRvcDogLTEuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubXItbjQsXFxuLm14LW40IHtcXG4gIG1hcmdpbi1yaWdodDogLTEuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWItbjQsXFxuLm15LW40IHtcXG4gIG1hcmdpbi1ib3R0b206IC0xLjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLW40LFxcbi5teC1uNCB7XFxuICBtYXJnaW4tbGVmdDogLTEuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubS1uNSB7XFxuICBtYXJnaW46IC0zcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC1uNSxcXG4ubXktbjUge1xcbiAgbWFyZ2luLXRvcDogLTNyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1yLW41LFxcbi5teC1uNSB7XFxuICBtYXJnaW4tcmlnaHQ6IC0zcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tYi1uNSxcXG4ubXktbjUge1xcbiAgbWFyZ2luLWJvdHRvbTogLTNyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLW41LFxcbi5teC1uNSB7XFxuICBtYXJnaW4tbGVmdDogLTNyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm0tYXV0byB7XFxuICBtYXJnaW46IGF1dG8gIWltcG9ydGFudDtcXG59XFxuXFxuLm10LWF1dG8sXFxuLm15LWF1dG8ge1xcbiAgbWFyZ2luLXRvcDogYXV0byAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubXItYXV0byxcXG4ubXgtYXV0byB7XFxuICBtYXJnaW4tcmlnaHQ6IGF1dG8gIWltcG9ydGFudDtcXG59XFxuXFxuLm1iLWF1dG8sXFxuLm15LWF1dG8ge1xcbiAgbWFyZ2luLWJvdHRvbTogYXV0byAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWwtYXV0byxcXG4ubXgtYXV0byB7XFxuICBtYXJnaW4tbGVmdDogYXV0byAhaW1wb3J0YW50O1xcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIHtcXG4gIC5tLXNtLTAge1xcbiAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1zbS0wLFxcbiAgLm15LXNtLTAge1xcbiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItc20tMCxcXG4gIC5teC1zbS0wIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItc20tMCxcXG4gIC5teS1zbS0wIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLXNtLTAsXFxuICAubXgtc20tMCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1zbS0xIHtcXG4gICAgbWFyZ2luOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtc20tMSxcXG4gIC5teS1zbS0xIHtcXG4gICAgbWFyZ2luLXRvcDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXNtLTEsXFxuICAubXgtc20tMSB7XFxuICAgIG1hcmdpbi1yaWdodDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXNtLTEsXFxuICAubXktc20tMSB7XFxuICAgIG1hcmdpbi1ib3R0b206IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1zbS0xLFxcbiAgLm14LXNtLTEge1xcbiAgICBtYXJnaW4tbGVmdDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tc20tMiB7XFxuICAgIG1hcmdpbjogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtc20tMixcXG4gIC5teS1zbS0yIHtcXG4gICAgbWFyZ2luLXRvcDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItc20tMixcXG4gIC5teC1zbS0yIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1zbS0yLFxcbiAgLm15LXNtLTIge1xcbiAgICBtYXJnaW4tYm90dG9tOiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1zbS0yLFxcbiAgLm14LXNtLTIge1xcbiAgICBtYXJnaW4tbGVmdDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1zbS0zIHtcXG4gICAgbWFyZ2luOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtc20tMyxcXG4gIC5teS1zbS0zIHtcXG4gICAgbWFyZ2luLXRvcDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXNtLTMsXFxuICAubXgtc20tMyB7XFxuICAgIG1hcmdpbi1yaWdodDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXNtLTMsXFxuICAubXktc20tMyB7XFxuICAgIG1hcmdpbi1ib3R0b206IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1zbS0zLFxcbiAgLm14LXNtLTMge1xcbiAgICBtYXJnaW4tbGVmdDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tc20tNCB7XFxuICAgIG1hcmdpbjogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtc20tNCxcXG4gIC5teS1zbS00IHtcXG4gICAgbWFyZ2luLXRvcDogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItc20tNCxcXG4gIC5teC1zbS00IHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1zbS00LFxcbiAgLm15LXNtLTQge1xcbiAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1zbS00LFxcbiAgLm14LXNtLTQge1xcbiAgICBtYXJnaW4tbGVmdDogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1zbS01IHtcXG4gICAgbWFyZ2luOiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtc20tNSxcXG4gIC5teS1zbS01IHtcXG4gICAgbWFyZ2luLXRvcDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXNtLTUsXFxuICAubXgtc20tNSB7XFxuICAgIG1hcmdpbi1yaWdodDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXNtLTUsXFxuICAubXktc20tNSB7XFxuICAgIG1hcmdpbi1ib3R0b206IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1zbS01LFxcbiAgLm14LXNtLTUge1xcbiAgICBtYXJnaW4tbGVmdDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnAtc20tMCB7XFxuICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC1zbS0wLFxcbiAgLnB5LXNtLTAge1xcbiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLXNtLTAsXFxuICAucHgtc20tMCB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYi1zbS0wLFxcbiAgLnB5LXNtLTAge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLXNtLTAsXFxuICAucHgtc20tMCB7XFxuICAgIHBhZGRpbmctbGVmdDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnAtc20tMSB7XFxuICAgIHBhZGRpbmc6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC1zbS0xLFxcbiAgLnB5LXNtLTEge1xcbiAgICBwYWRkaW5nLXRvcDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLXNtLTEsXFxuICAucHgtc20tMSB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYi1zbS0xLFxcbiAgLnB5LXNtLTEge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLXNtLTEsXFxuICAucHgtc20tMSB7XFxuICAgIHBhZGRpbmctbGVmdDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnAtc20tMiB7XFxuICAgIHBhZGRpbmc6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnB0LXNtLTIsXFxuICAucHktc20tMiB7XFxuICAgIHBhZGRpbmctdG9wOiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci1zbS0yLFxcbiAgLnB4LXNtLTIge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYi1zbS0yLFxcbiAgLnB5LXNtLTIge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGwtc20tMixcXG4gIC5weC1zbS0yIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLXNtLTMge1xcbiAgICBwYWRkaW5nOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQtc20tMyxcXG4gIC5weS1zbS0zIHtcXG4gICAgcGFkZGluZy10b3A6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci1zbS0zLFxcbiAgLnB4LXNtLTMge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGItc20tMyxcXG4gIC5weS1zbS0zIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC1zbS0zLFxcbiAgLnB4LXNtLTMge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLXNtLTQge1xcbiAgICBwYWRkaW5nOiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC1zbS00LFxcbiAgLnB5LXNtLTQge1xcbiAgICBwYWRkaW5nLXRvcDogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHItc20tNCxcXG4gIC5weC1zbS00IHtcXG4gICAgcGFkZGluZy1yaWdodDogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGItc20tNCxcXG4gIC5weS1zbS00IHtcXG4gICAgcGFkZGluZy1ib3R0b206IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLXNtLTQsXFxuICAucHgtc20tNCB7XFxuICAgIHBhZGRpbmctbGVmdDogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC1zbS01IHtcXG4gICAgcGFkZGluZzogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnB0LXNtLTUsXFxuICAucHktc20tNSB7XFxuICAgIHBhZGRpbmctdG9wOiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHItc20tNSxcXG4gIC5weC1zbS01IHtcXG4gICAgcGFkZGluZy1yaWdodDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLXNtLTUsXFxuICAucHktc20tNSB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGwtc20tNSxcXG4gIC5weC1zbS01IHtcXG4gICAgcGFkZGluZy1sZWZ0OiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1zbS1uMSB7XFxuICAgIG1hcmdpbjogLTAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1zbS1uMSxcXG4gIC5teS1zbS1uMSB7XFxuICAgIG1hcmdpbi10b3A6IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItc20tbjEsXFxuICAubXgtc20tbjEge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItc20tbjEsXFxuICAubXktc20tbjEge1xcbiAgICBtYXJnaW4tYm90dG9tOiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLXNtLW4xLFxcbiAgLm14LXNtLW4xIHtcXG4gICAgbWFyZ2luLWxlZnQ6IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1zbS1uMiB7XFxuICAgIG1hcmdpbjogLTAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXNtLW4yLFxcbiAgLm15LXNtLW4yIHtcXG4gICAgbWFyZ2luLXRvcDogLTAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXNtLW4yLFxcbiAgLm14LXNtLW4yIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItc20tbjIsXFxuICAubXktc20tbjIge1xcbiAgICBtYXJnaW4tYm90dG9tOiAtMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtc20tbjIsXFxuICAubXgtc20tbjIge1xcbiAgICBtYXJnaW4tbGVmdDogLTAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tc20tbjMge1xcbiAgICBtYXJnaW46IC0xcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtc20tbjMsXFxuICAubXktc20tbjMge1xcbiAgICBtYXJnaW4tdG9wOiAtMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXNtLW4zLFxcbiAgLm14LXNtLW4zIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXNtLW4zLFxcbiAgLm15LXNtLW4zIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1zbS1uMyxcXG4gIC5teC1zbS1uMyB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tc20tbjQge1xcbiAgICBtYXJnaW46IC0xLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1zbS1uNCxcXG4gIC5teS1zbS1uNCB7XFxuICAgIG1hcmdpbi10b3A6IC0xLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1zbS1uNCxcXG4gIC5teC1zbS1uNCB7XFxuICAgIG1hcmdpbi1yaWdodDogLTEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXNtLW40LFxcbiAgLm15LXNtLW40IHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLXNtLW40LFxcbiAgLm14LXNtLW40IHtcXG4gICAgbWFyZ2luLWxlZnQ6IC0xLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLXNtLW41IHtcXG4gICAgbWFyZ2luOiAtM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXNtLW41LFxcbiAgLm15LXNtLW41IHtcXG4gICAgbWFyZ2luLXRvcDogLTNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1zbS1uNSxcXG4gIC5teC1zbS1uNSB7XFxuICAgIG1hcmdpbi1yaWdodDogLTNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1zbS1uNSxcXG4gIC5teS1zbS1uNSB7XFxuICAgIG1hcmdpbi1ib3R0b206IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtc20tbjUsXFxuICAubXgtc20tbjUge1xcbiAgICBtYXJnaW4tbGVmdDogLTNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLXNtLWF1dG8ge1xcbiAgICBtYXJnaW46IGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1zbS1hdXRvLFxcbiAgLm15LXNtLWF1dG8ge1xcbiAgICBtYXJnaW4tdG9wOiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItc20tYXV0byxcXG4gIC5teC1zbS1hdXRvIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItc20tYXV0byxcXG4gIC5teS1zbS1hdXRvIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLXNtLWF1dG8sXFxuICAubXgtc20tYXV0byB7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLm0tbWQtMCB7XFxuICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LW1kLTAsXFxuICAubXktbWQtMCB7XFxuICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1tZC0wLFxcbiAgLm14LW1kLTAge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1tZC0wLFxcbiAgLm15LW1kLTAge1xcbiAgICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbWQtMCxcXG4gIC5teC1tZC0wIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLW1kLTEge1xcbiAgICBtYXJnaW46IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1tZC0xLFxcbiAgLm15LW1kLTEge1xcbiAgICBtYXJnaW4tdG9wOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItbWQtMSxcXG4gIC5teC1tZC0xIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbWQtMSxcXG4gIC5teS1tZC0xIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLW1kLTEsXFxuICAubXgtbWQtMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1tZC0yIHtcXG4gICAgbWFyZ2luOiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1tZC0yLFxcbiAgLm15LW1kLTIge1xcbiAgICBtYXJnaW4tdG9wOiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1tZC0yLFxcbiAgLm14LW1kLTIge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLW1kLTIsXFxuICAubXktbWQtMiB7XFxuICAgIG1hcmdpbi1ib3R0b206IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLW1kLTIsXFxuICAubXgtbWQtMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLW1kLTMge1xcbiAgICBtYXJnaW46IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1tZC0zLFxcbiAgLm15LW1kLTMge1xcbiAgICBtYXJnaW4tdG9wOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItbWQtMyxcXG4gIC5teC1tZC0zIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbWQtMyxcXG4gIC5teS1tZC0zIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLW1kLTMsXFxuICAubXgtbWQtMyB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1tZC00IHtcXG4gICAgbWFyZ2luOiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1tZC00LFxcbiAgLm15LW1kLTQge1xcbiAgICBtYXJnaW4tdG9wOiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1tZC00LFxcbiAgLm14LW1kLTQge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLW1kLTQsXFxuICAubXktbWQtNCB7XFxuICAgIG1hcmdpbi1ib3R0b206IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLW1kLTQsXFxuICAubXgtbWQtNCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLW1kLTUge1xcbiAgICBtYXJnaW46IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1tZC01LFxcbiAgLm15LW1kLTUge1xcbiAgICBtYXJnaW4tdG9wOiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItbWQtNSxcXG4gIC5teC1tZC01IHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbWQtNSxcXG4gIC5teS1tZC01IHtcXG4gICAgbWFyZ2luLWJvdHRvbTogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLW1kLTUsXFxuICAubXgtbWQtNSB7XFxuICAgIG1hcmdpbi1sZWZ0OiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC1tZC0wIHtcXG4gICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnB0LW1kLTAsXFxuICAucHktbWQtMCB7XFxuICAgIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHItbWQtMCxcXG4gIC5weC1tZC0wIHtcXG4gICAgcGFkZGluZy1yaWdodDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLW1kLTAsXFxuICAucHktbWQtMCB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGwtbWQtMCxcXG4gIC5weC1tZC0wIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC1tZC0xIHtcXG4gICAgcGFkZGluZzogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnB0LW1kLTEsXFxuICAucHktbWQtMSB7XFxuICAgIHBhZGRpbmctdG9wOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHItbWQtMSxcXG4gIC5weC1tZC0xIHtcXG4gICAgcGFkZGluZy1yaWdodDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLW1kLTEsXFxuICAucHktbWQtMSB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGwtbWQtMSxcXG4gIC5weC1tZC0xIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC1tZC0yIHtcXG4gICAgcGFkZGluZzogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQtbWQtMixcXG4gIC5weS1tZC0yIHtcXG4gICAgcGFkZGluZy10b3A6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLW1kLTIsXFxuICAucHgtbWQtMiB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLW1kLTIsXFxuICAucHktbWQtMiB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC1tZC0yLFxcbiAgLnB4LW1kLTIge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnAtbWQtMyB7XFxuICAgIHBhZGRpbmc6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC1tZC0zLFxcbiAgLnB5LW1kLTMge1xcbiAgICBwYWRkaW5nLXRvcDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLW1kLTMsXFxuICAucHgtbWQtMyB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYi1tZC0zLFxcbiAgLnB5LW1kLTMge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLW1kLTMsXFxuICAucHgtbWQtMyB7XFxuICAgIHBhZGRpbmctbGVmdDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnAtbWQtNCB7XFxuICAgIHBhZGRpbmc6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnB0LW1kLTQsXFxuICAucHktbWQtNCB7XFxuICAgIHBhZGRpbmctdG9wOiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci1tZC00LFxcbiAgLnB4LW1kLTQge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYi1tZC00LFxcbiAgLnB5LW1kLTQge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGwtbWQtNCxcXG4gIC5weC1tZC00IHtcXG4gICAgcGFkZGluZy1sZWZ0OiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLW1kLTUge1xcbiAgICBwYWRkaW5nOiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQtbWQtNSxcXG4gIC5weS1tZC01IHtcXG4gICAgcGFkZGluZy10b3A6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci1tZC01LFxcbiAgLnB4LW1kLTUge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGItbWQtNSxcXG4gIC5weS1tZC01IHtcXG4gICAgcGFkZGluZy1ib3R0b206IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC1tZC01LFxcbiAgLnB4LW1kLTUge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLW1kLW4xIHtcXG4gICAgbWFyZ2luOiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LW1kLW4xLFxcbiAgLm15LW1kLW4xIHtcXG4gICAgbWFyZ2luLXRvcDogLTAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1tZC1uMSxcXG4gIC5teC1tZC1uMSB7XFxuICAgIG1hcmdpbi1yaWdodDogLTAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1tZC1uMSxcXG4gIC5teS1tZC1uMSB7XFxuICAgIG1hcmdpbi1ib3R0b206IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbWQtbjEsXFxuICAubXgtbWQtbjEge1xcbiAgICBtYXJnaW4tbGVmdDogLTAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLW1kLW4yIHtcXG4gICAgbWFyZ2luOiAtMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtbWQtbjIsXFxuICAubXktbWQtbjIge1xcbiAgICBtYXJnaW4tdG9wOiAtMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItbWQtbjIsXFxuICAubXgtbWQtbjIge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1tZC1uMixcXG4gIC5teS1tZC1uMiB7XFxuICAgIG1hcmdpbi1ib3R0b206IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1tZC1uMixcXG4gIC5teC1tZC1uMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1tZC1uMyB7XFxuICAgIG1hcmdpbjogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1tZC1uMyxcXG4gIC5teS1tZC1uMyB7XFxuICAgIG1hcmdpbi10b3A6IC0xcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItbWQtbjMsXFxuICAubXgtbWQtbjMge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0xcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbWQtbjMsXFxuICAubXktbWQtbjMge1xcbiAgICBtYXJnaW4tYm90dG9tOiAtMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLW1kLW4zLFxcbiAgLm14LW1kLW4zIHtcXG4gICAgbWFyZ2luLWxlZnQ6IC0xcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1tZC1uNCB7XFxuICAgIG1hcmdpbjogLTEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LW1kLW40LFxcbiAgLm15LW1kLW40IHtcXG4gICAgbWFyZ2luLXRvcDogLTEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLW1kLW40LFxcbiAgLm14LW1kLW40IHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbWQtbjQsXFxuICAubXktbWQtbjQge1xcbiAgICBtYXJnaW4tYm90dG9tOiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbWQtbjQsXFxuICAubXgtbWQtbjQge1xcbiAgICBtYXJnaW4tbGVmdDogLTEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tbWQtbjUge1xcbiAgICBtYXJnaW46IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtbWQtbjUsXFxuICAubXktbWQtbjUge1xcbiAgICBtYXJnaW4tdG9wOiAtM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLW1kLW41LFxcbiAgLm14LW1kLW41IHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLW1kLW41LFxcbiAgLm15LW1kLW41IHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1tZC1uNSxcXG4gIC5teC1tZC1uNSB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tbWQtYXV0byB7XFxuICAgIG1hcmdpbjogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LW1kLWF1dG8sXFxuICAubXktbWQtYXV0byB7XFxuICAgIG1hcmdpbi10b3A6IGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1tZC1hdXRvLFxcbiAgLm14LW1kLWF1dG8ge1xcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1tZC1hdXRvLFxcbiAgLm15LW1kLWF1dG8ge1xcbiAgICBtYXJnaW4tYm90dG9tOiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbWQtYXV0byxcXG4gIC5teC1tZC1hdXRvIHtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XFxuICAubS1sZy0wIHtcXG4gICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtbGctMCxcXG4gIC5teS1sZy0wIHtcXG4gICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLWxnLTAsXFxuICAubXgtbGctMCB7XFxuICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLWxnLTAsXFxuICAubXktbGctMCB7XFxuICAgIG1hcmdpbi1ib3R0b206IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1sZy0wLFxcbiAgLm14LWxnLTAge1xcbiAgICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tbGctMSB7XFxuICAgIG1hcmdpbjogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LWxnLTEsXFxuICAubXktbGctMSB7XFxuICAgIG1hcmdpbi10b3A6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1sZy0xLFxcbiAgLm14LWxnLTEge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1sZy0xLFxcbiAgLm15LWxnLTEge1xcbiAgICBtYXJnaW4tYm90dG9tOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbGctMSxcXG4gIC5teC1sZy0xIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLWxnLTIge1xcbiAgICBtYXJnaW46IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LWxnLTIsXFxuICAubXktbGctMiB7XFxuICAgIG1hcmdpbi10b3A6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLWxnLTIsXFxuICAubXgtbGctMiB7XFxuICAgIG1hcmdpbi1yaWdodDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbGctMixcXG4gIC5teS1sZy0yIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbGctMixcXG4gIC5teC1sZy0yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tbGctMyB7XFxuICAgIG1hcmdpbjogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LWxnLTMsXFxuICAubXktbGctMyB7XFxuICAgIG1hcmdpbi10b3A6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1sZy0zLFxcbiAgLm14LWxnLTMge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1sZy0zLFxcbiAgLm15LWxnLTMge1xcbiAgICBtYXJnaW4tYm90dG9tOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbGctMyxcXG4gIC5teC1sZy0zIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLWxnLTQge1xcbiAgICBtYXJnaW46IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LWxnLTQsXFxuICAubXktbGctNCB7XFxuICAgIG1hcmdpbi10b3A6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLWxnLTQsXFxuICAubXgtbGctNCB7XFxuICAgIG1hcmdpbi1yaWdodDogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbGctNCxcXG4gIC5teS1sZy00IHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbGctNCxcXG4gIC5teC1sZy00IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tbGctNSB7XFxuICAgIG1hcmdpbjogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LWxnLTUsXFxuICAubXktbGctNSB7XFxuICAgIG1hcmdpbi10b3A6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1sZy01LFxcbiAgLm14LWxnLTUge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1sZy01LFxcbiAgLm15LWxnLTUge1xcbiAgICBtYXJnaW4tYm90dG9tOiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbGctNSxcXG4gIC5teC1sZy01IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLWxnLTAge1xcbiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQtbGctMCxcXG4gIC5weS1sZy0wIHtcXG4gICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci1sZy0wLFxcbiAgLnB4LWxnLTAge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGItbGctMCxcXG4gIC5weS1sZy0wIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC1sZy0wLFxcbiAgLnB4LWxnLTAge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLWxnLTEge1xcbiAgICBwYWRkaW5nOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQtbGctMSxcXG4gIC5weS1sZy0xIHtcXG4gICAgcGFkZGluZy10b3A6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci1sZy0xLFxcbiAgLnB4LWxnLTEge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGItbGctMSxcXG4gIC5weS1sZy0xIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC1sZy0xLFxcbiAgLnB4LWxnLTEge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLWxnLTIge1xcbiAgICBwYWRkaW5nOiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC1sZy0yLFxcbiAgLnB5LWxnLTIge1xcbiAgICBwYWRkaW5nLXRvcDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHItbGctMixcXG4gIC5weC1sZy0yIHtcXG4gICAgcGFkZGluZy1yaWdodDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGItbGctMixcXG4gIC5weS1sZy0yIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLWxnLTIsXFxuICAucHgtbGctMiB7XFxuICAgIHBhZGRpbmctbGVmdDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC1sZy0zIHtcXG4gICAgcGFkZGluZzogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnB0LWxnLTMsXFxuICAucHktbGctMyB7XFxuICAgIHBhZGRpbmctdG9wOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHItbGctMyxcXG4gIC5weC1sZy0zIHtcXG4gICAgcGFkZGluZy1yaWdodDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLWxnLTMsXFxuICAucHktbGctMyB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGwtbGctMyxcXG4gIC5weC1sZy0zIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC1sZy00IHtcXG4gICAgcGFkZGluZzogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQtbGctNCxcXG4gIC5weS1sZy00IHtcXG4gICAgcGFkZGluZy10b3A6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLWxnLTQsXFxuICAucHgtbGctNCB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLWxnLTQsXFxuICAucHktbGctNCB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC1sZy00LFxcbiAgLnB4LWxnLTQge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnAtbGctNSB7XFxuICAgIHBhZGRpbmc6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC1sZy01LFxcbiAgLnB5LWxnLTUge1xcbiAgICBwYWRkaW5nLXRvcDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLWxnLTUsXFxuICAucHgtbGctNSB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYi1sZy01LFxcbiAgLnB5LWxnLTUge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLWxnLTUsXFxuICAucHgtbGctNSB7XFxuICAgIHBhZGRpbmctbGVmdDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tbGctbjEge1xcbiAgICBtYXJnaW46IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtbGctbjEsXFxuICAubXktbGctbjEge1xcbiAgICBtYXJnaW4tdG9wOiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLWxnLW4xLFxcbiAgLm14LWxnLW4xIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLWxnLW4xLFxcbiAgLm15LWxnLW4xIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1sZy1uMSxcXG4gIC5teC1sZy1uMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tbGctbjIge1xcbiAgICBtYXJnaW46IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1sZy1uMixcXG4gIC5teS1sZy1uMiB7XFxuICAgIG1hcmdpbi10b3A6IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1sZy1uMixcXG4gIC5teC1sZy1uMiB7XFxuICAgIG1hcmdpbi1yaWdodDogLTAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLWxnLW4yLFxcbiAgLm15LWxnLW4yIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLWxnLW4yLFxcbiAgLm14LWxnLW4yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLWxnLW4zIHtcXG4gICAgbWFyZ2luOiAtMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LWxnLW4zLFxcbiAgLm15LWxnLW4zIHtcXG4gICAgbWFyZ2luLXRvcDogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1sZy1uMyxcXG4gIC5teC1sZy1uMyB7XFxuICAgIG1hcmdpbi1yaWdodDogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1sZy1uMyxcXG4gIC5teS1sZy1uMyB7XFxuICAgIG1hcmdpbi1ib3R0b206IC0xcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbGctbjMsXFxuICAubXgtbGctbjMge1xcbiAgICBtYXJnaW4tbGVmdDogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLWxnLW40IHtcXG4gICAgbWFyZ2luOiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtbGctbjQsXFxuICAubXktbGctbjQge1xcbiAgICBtYXJnaW4tdG9wOiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItbGctbjQsXFxuICAubXgtbGctbjQge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0xLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1sZy1uNCxcXG4gIC5teS1sZy1uNCB7XFxuICAgIG1hcmdpbi1ib3R0b206IC0xLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1sZy1uNCxcXG4gIC5teC1sZy1uNCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1sZy1uNSB7XFxuICAgIG1hcmdpbjogLTNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1sZy1uNSxcXG4gIC5teS1sZy1uNSB7XFxuICAgIG1hcmdpbi10b3A6IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItbGctbjUsXFxuICAubXgtbGctbjUge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbGctbjUsXFxuICAubXktbGctbjUge1xcbiAgICBtYXJnaW4tYm90dG9tOiAtM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLWxnLW41LFxcbiAgLm14LWxnLW41IHtcXG4gICAgbWFyZ2luLWxlZnQ6IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1sZy1hdXRvIHtcXG4gICAgbWFyZ2luOiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtbGctYXV0byxcXG4gIC5teS1sZy1hdXRvIHtcXG4gICAgbWFyZ2luLXRvcDogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLWxnLWF1dG8sXFxuICAubXgtbGctYXV0byB7XFxuICAgIG1hcmdpbi1yaWdodDogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLWxnLWF1dG8sXFxuICAubXktbGctYXV0byB7XFxuICAgIG1hcmdpbi1ib3R0b206IGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1sZy1hdXRvLFxcbiAgLm14LWxnLWF1dG8ge1xcbiAgICBtYXJnaW4tbGVmdDogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XFxuICAubS14bC0wIHtcXG4gICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQteGwtMCxcXG4gIC5teS14bC0wIHtcXG4gICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXhsLTAsXFxuICAubXgteGwtMCB7XFxuICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXhsLTAsXFxuICAubXkteGwtMCB7XFxuICAgIG1hcmdpbi1ib3R0b206IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC14bC0wLFxcbiAgLm14LXhsLTAge1xcbiAgICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0teGwtMSB7XFxuICAgIG1hcmdpbjogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXhsLTEsXFxuICAubXkteGwtMSB7XFxuICAgIG1hcmdpbi10b3A6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci14bC0xLFxcbiAgLm14LXhsLTEge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi14bC0xLFxcbiAgLm15LXhsLTEge1xcbiAgICBtYXJnaW4tYm90dG9tOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwteGwtMSxcXG4gIC5teC14bC0xIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLXhsLTIge1xcbiAgICBtYXJnaW46IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXhsLTIsXFxuICAubXkteGwtMiB7XFxuICAgIG1hcmdpbi10b3A6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXhsLTIsXFxuICAubXgteGwtMiB7XFxuICAgIG1hcmdpbi1yaWdodDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWIteGwtMixcXG4gIC5teS14bC0yIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwteGwtMixcXG4gIC5teC14bC0yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0teGwtMyB7XFxuICAgIG1hcmdpbjogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXhsLTMsXFxuICAubXkteGwtMyB7XFxuICAgIG1hcmdpbi10b3A6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci14bC0zLFxcbiAgLm14LXhsLTMge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi14bC0zLFxcbiAgLm15LXhsLTMge1xcbiAgICBtYXJnaW4tYm90dG9tOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwteGwtMyxcXG4gIC5teC14bC0zIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLXhsLTQge1xcbiAgICBtYXJnaW46IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXhsLTQsXFxuICAubXkteGwtNCB7XFxuICAgIG1hcmdpbi10b3A6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXhsLTQsXFxuICAubXgteGwtNCB7XFxuICAgIG1hcmdpbi1yaWdodDogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWIteGwtNCxcXG4gIC5teS14bC00IHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwteGwtNCxcXG4gIC5teC14bC00IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0teGwtNSB7XFxuICAgIG1hcmdpbjogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXhsLTUsXFxuICAubXkteGwtNSB7XFxuICAgIG1hcmdpbi10b3A6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci14bC01LFxcbiAgLm14LXhsLTUge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi14bC01LFxcbiAgLm15LXhsLTUge1xcbiAgICBtYXJnaW4tYm90dG9tOiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwteGwtNSxcXG4gIC5teC14bC01IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLXhsLTAge1xcbiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQteGwtMCxcXG4gIC5weS14bC0wIHtcXG4gICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci14bC0wLFxcbiAgLnB4LXhsLTAge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGIteGwtMCxcXG4gIC5weS14bC0wIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC14bC0wLFxcbiAgLnB4LXhsLTAge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLXhsLTEge1xcbiAgICBwYWRkaW5nOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQteGwtMSxcXG4gIC5weS14bC0xIHtcXG4gICAgcGFkZGluZy10b3A6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci14bC0xLFxcbiAgLnB4LXhsLTEge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGIteGwtMSxcXG4gIC5weS14bC0xIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC14bC0xLFxcbiAgLnB4LXhsLTEge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLXhsLTIge1xcbiAgICBwYWRkaW5nOiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC14bC0yLFxcbiAgLnB5LXhsLTIge1xcbiAgICBwYWRkaW5nLXRvcDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHIteGwtMixcXG4gIC5weC14bC0yIHtcXG4gICAgcGFkZGluZy1yaWdodDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGIteGwtMixcXG4gIC5weS14bC0yIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLXhsLTIsXFxuICAucHgteGwtMiB7XFxuICAgIHBhZGRpbmctbGVmdDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC14bC0zIHtcXG4gICAgcGFkZGluZzogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnB0LXhsLTMsXFxuICAucHkteGwtMyB7XFxuICAgIHBhZGRpbmctdG9wOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHIteGwtMyxcXG4gIC5weC14bC0zIHtcXG4gICAgcGFkZGluZy1yaWdodDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLXhsLTMsXFxuICAucHkteGwtMyB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGwteGwtMyxcXG4gIC5weC14bC0zIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC14bC00IHtcXG4gICAgcGFkZGluZzogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQteGwtNCxcXG4gIC5weS14bC00IHtcXG4gICAgcGFkZGluZy10b3A6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLXhsLTQsXFxuICAucHgteGwtNCB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLXhsLTQsXFxuICAucHkteGwtNCB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC14bC00LFxcbiAgLnB4LXhsLTQge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnAteGwtNSB7XFxuICAgIHBhZGRpbmc6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC14bC01LFxcbiAgLnB5LXhsLTUge1xcbiAgICBwYWRkaW5nLXRvcDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLXhsLTUsXFxuICAucHgteGwtNSB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYi14bC01LFxcbiAgLnB5LXhsLTUge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLXhsLTUsXFxuICAucHgteGwtNSB7XFxuICAgIHBhZGRpbmctbGVmdDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0teGwtbjEge1xcbiAgICBtYXJnaW46IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQteGwtbjEsXFxuICAubXkteGwtbjEge1xcbiAgICBtYXJnaW4tdG9wOiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXhsLW4xLFxcbiAgLm14LXhsLW4xIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXhsLW4xLFxcbiAgLm15LXhsLW4xIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC14bC1uMSxcXG4gIC5teC14bC1uMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0teGwtbjIge1xcbiAgICBtYXJnaW46IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC14bC1uMixcXG4gIC5teS14bC1uMiB7XFxuICAgIG1hcmdpbi10b3A6IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci14bC1uMixcXG4gIC5teC14bC1uMiB7XFxuICAgIG1hcmdpbi1yaWdodDogLTAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXhsLW4yLFxcbiAgLm15LXhsLW4yIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLXhsLW4yLFxcbiAgLm14LXhsLW4yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLXhsLW4zIHtcXG4gICAgbWFyZ2luOiAtMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXhsLW4zLFxcbiAgLm15LXhsLW4zIHtcXG4gICAgbWFyZ2luLXRvcDogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci14bC1uMyxcXG4gIC5teC14bC1uMyB7XFxuICAgIG1hcmdpbi1yaWdodDogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi14bC1uMyxcXG4gIC5teS14bC1uMyB7XFxuICAgIG1hcmdpbi1ib3R0b206IC0xcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwteGwtbjMsXFxuICAubXgteGwtbjMge1xcbiAgICBtYXJnaW4tbGVmdDogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLXhsLW40IHtcXG4gICAgbWFyZ2luOiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQteGwtbjQsXFxuICAubXkteGwtbjQge1xcbiAgICBtYXJnaW4tdG9wOiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXIteGwtbjQsXFxuICAubXgteGwtbjQge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0xLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi14bC1uNCxcXG4gIC5teS14bC1uNCB7XFxuICAgIG1hcmdpbi1ib3R0b206IC0xLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC14bC1uNCxcXG4gIC5teC14bC1uNCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS14bC1uNSB7XFxuICAgIG1hcmdpbjogLTNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC14bC1uNSxcXG4gIC5teS14bC1uNSB7XFxuICAgIG1hcmdpbi10b3A6IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXIteGwtbjUsXFxuICAubXgteGwtbjUge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWIteGwtbjUsXFxuICAubXkteGwtbjUge1xcbiAgICBtYXJnaW4tYm90dG9tOiAtM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLXhsLW41LFxcbiAgLm14LXhsLW41IHtcXG4gICAgbWFyZ2luLWxlZnQ6IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS14bC1hdXRvIHtcXG4gICAgbWFyZ2luOiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQteGwtYXV0byxcXG4gIC5teS14bC1hdXRvIHtcXG4gICAgbWFyZ2luLXRvcDogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXhsLWF1dG8sXFxuICAubXgteGwtYXV0byB7XFxuICAgIG1hcmdpbi1yaWdodDogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXhsLWF1dG8sXFxuICAubXkteGwtYXV0byB7XFxuICAgIG1hcmdpbi1ib3R0b206IGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC14bC1hdXRvLFxcbiAgLm14LXhsLWF1dG8ge1xcbiAgICBtYXJnaW4tbGVmdDogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG4udGV4dC1tb25vc3BhY2Uge1xcbiAgZm9udC1mYW1pbHk6IFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXFxcIkxpYmVyYXRpb24gTW9ub1xcXCIsIFxcXCJDb3VyaWVyIE5ld1xcXCIsIG1vbm9zcGFjZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1qdXN0aWZ5IHtcXG4gIHRleHQtYWxpZ246IGp1c3RpZnkgIWltcG9ydGFudDtcXG59XFxuXFxuLnRleHQtd3JhcCB7XFxuICB3aGl0ZS1zcGFjZTogbm9ybWFsICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZXh0LW5vd3JhcCB7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZXh0LXRydW5jYXRlIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxufVxcblxcbi50ZXh0LWxlZnQge1xcbiAgdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1yaWdodCB7XFxuICB0ZXh0LWFsaWduOiByaWdodCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1jZW50ZXIge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLnRleHQtc20tbGVmdCB7XFxuICAgIHRleHQtYWxpZ246IGxlZnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC50ZXh0LXNtLXJpZ2h0IHtcXG4gICAgdGV4dC1hbGlnbjogcmlnaHQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC50ZXh0LXNtLWNlbnRlciB7XFxuICAgIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gIC50ZXh0LW1kLWxlZnQge1xcbiAgICB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAudGV4dC1tZC1yaWdodCB7XFxuICAgIHRleHQtYWxpZ246IHJpZ2h0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAudGV4dC1tZC1jZW50ZXIge1xcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XFxuICAudGV4dC1sZy1sZWZ0IHtcXG4gICAgdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnRleHQtbGctcmlnaHQge1xcbiAgICB0ZXh0LWFsaWduOiByaWdodCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnRleHQtbGctY2VudGVyIHtcXG4gICAgdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC50ZXh0LXhsLWxlZnQge1xcbiAgICB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAudGV4dC14bC1yaWdodCB7XFxuICAgIHRleHQtYWxpZ246IHJpZ2h0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAudGV4dC14bC1jZW50ZXIge1xcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuLnRleHQtbG93ZXJjYXNlIHtcXG4gIHRleHQtdHJhbnNmb3JtOiBsb3dlcmNhc2UgIWltcG9ydGFudDtcXG59XFxuXFxuLnRleHQtdXBwZXJjYXNlIHtcXG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2UgIWltcG9ydGFudDtcXG59XFxuXFxuLnRleHQtY2FwaXRhbGl6ZSB7XFxuICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZm9udC13ZWlnaHQtbGlnaHQge1xcbiAgZm9udC13ZWlnaHQ6IDMwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZm9udC13ZWlnaHQtbGlnaHRlciB7XFxuICBmb250LXdlaWdodDogbGlnaHRlciAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZm9udC13ZWlnaHQtbm9ybWFsIHtcXG4gIGZvbnQtd2VpZ2h0OiA0MDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmZvbnQtd2VpZ2h0LWJvbGQge1xcbiAgZm9udC13ZWlnaHQ6IDcwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZm9udC13ZWlnaHQtYm9sZGVyIHtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkZXIgIWltcG9ydGFudDtcXG59XFxuXFxuLmZvbnQtaXRhbGljIHtcXG4gIGZvbnQtc3R5bGU6IGl0YWxpYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC13aGl0ZSB7XFxuICBjb2xvcjogI2ZmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1wcmltYXJ5IHtcXG4gIGNvbG9yOiAjMDA3YmZmICFpbXBvcnRhbnQ7XFxufVxcblxcbmEudGV4dC1wcmltYXJ5OmhvdmVyLCBhLnRleHQtcHJpbWFyeTpmb2N1cyB7XFxuICBjb2xvcjogIzAwNTZiMyAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1zZWNvbmRhcnkge1xcbiAgY29sb3I6ICM2Yzc1N2QgIWltcG9ydGFudDtcXG59XFxuXFxuYS50ZXh0LXNlY29uZGFyeTpob3ZlciwgYS50ZXh0LXNlY29uZGFyeTpmb2N1cyB7XFxuICBjb2xvcjogIzQ5NGY1NCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1zdWNjZXNzIHtcXG4gIGNvbG9yOiAjMjhhNzQ1ICFpbXBvcnRhbnQ7XFxufVxcblxcbmEudGV4dC1zdWNjZXNzOmhvdmVyLCBhLnRleHQtc3VjY2Vzczpmb2N1cyB7XFxuICBjb2xvcjogIzE5NjkyYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1pbmZvIHtcXG4gIGNvbG9yOiAjMTdhMmI4ICFpbXBvcnRhbnQ7XFxufVxcblxcbmEudGV4dC1pbmZvOmhvdmVyLCBhLnRleHQtaW5mbzpmb2N1cyB7XFxuICBjb2xvcjogIzBmNjY3NCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC13YXJuaW5nIHtcXG4gIGNvbG9yOiAjZmZjMTA3ICFpbXBvcnRhbnQ7XFxufVxcblxcbmEudGV4dC13YXJuaW5nOmhvdmVyLCBhLnRleHQtd2FybmluZzpmb2N1cyB7XFxuICBjb2xvcjogI2JhOGIwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1kYW5nZXIge1xcbiAgY29sb3I6ICNkYzM1NDUgIWltcG9ydGFudDtcXG59XFxuXFxuYS50ZXh0LWRhbmdlcjpob3ZlciwgYS50ZXh0LWRhbmdlcjpmb2N1cyB7XFxuICBjb2xvcjogI2E3MWQyYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1saWdodCB7XFxuICBjb2xvcjogI2Y4ZjlmYSAhaW1wb3J0YW50O1xcbn1cXG5cXG5hLnRleHQtbGlnaHQ6aG92ZXIsIGEudGV4dC1saWdodDpmb2N1cyB7XFxuICBjb2xvcjogI2NiZDNkYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1kYXJrIHtcXG4gIGNvbG9yOiAjMzQzYTQwICFpbXBvcnRhbnQ7XFxufVxcblxcbmEudGV4dC1kYXJrOmhvdmVyLCBhLnRleHQtZGFyazpmb2N1cyB7XFxuICBjb2xvcjogIzEyMTQxNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1ib2R5IHtcXG4gIGNvbG9yOiAjMjEyNTI5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZXh0LW11dGVkIHtcXG4gIGNvbG9yOiAjNmM3NTdkICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZXh0LWJsYWNrLTUwIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSkgIWltcG9ydGFudDtcXG59XFxuXFxuLnRleHQtd2hpdGUtNTAge1xcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1oaWRlIHtcXG4gIGZvbnQ6IDAvMCBhO1xcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgdGV4dC1zaGFkb3c6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogMDtcXG59XFxuXFxuLnRleHQtZGVjb3JhdGlvbi1ub25lIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1icmVhayB7XFxuICB3b3JkLWJyZWFrOiBicmVhay13b3JkICFpbXBvcnRhbnQ7XFxuICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZXh0LXJlc2V0IHtcXG4gIGNvbG9yOiBpbmhlcml0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi52aXNpYmxlIHtcXG4gIHZpc2liaWxpdHk6IHZpc2libGUgIWltcG9ydGFudDtcXG59XFxuXFxuLmludmlzaWJsZSB7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDtcXG59XFxuXFxuQG1lZGlhIHByaW50IHtcXG4gICosXFxuICAqOjpiZWZvcmUsXFxuICAqOjphZnRlciB7XFxuICAgIHRleHQtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XFxuICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG4gIGE6bm90KC5idG4pIHtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICB9XFxuICBhYmJyW3RpdGxlXTo6YWZ0ZXIge1xcbiAgICBjb250ZW50OiBcXFwiIChcXFwiIGF0dHIodGl0bGUpIFxcXCIpXFxcIjtcXG4gIH1cXG4gIHByZSB7XFxuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgcHJlLFxcbiAgYmxvY2txdW90ZSB7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNhZGI1YmQ7XFxuICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDtcXG4gIH1cXG4gIHRoZWFkIHtcXG4gICAgZGlzcGxheTogdGFibGUtaGVhZGVyLWdyb3VwO1xcbiAgfVxcbiAgdHIsXFxuICBpbWcge1xcbiAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7XFxuICB9XFxuICBwLFxcbiAgaDIsXFxuICBoMyB7XFxuICAgIG9ycGhhbnM6IDM7XFxuICAgIHdpZG93czogMztcXG4gIH1cXG4gIGgyLFxcbiAgaDMge1xcbiAgICBwYWdlLWJyZWFrLWFmdGVyOiBhdm9pZDtcXG4gIH1cXG4gIEBwYWdlIHtcXG4gICAgc2l6ZTogYTM7XFxuICB9XFxuICBib2R5IHtcXG4gICAgbWluLXdpZHRoOiA5OTJweCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmNvbnRhaW5lciB7XFxuICAgIG1pbi13aWR0aDogOTkycHggIWltcG9ydGFudDtcXG4gIH1cXG4gIC5uYXZiYXIge1xcbiAgICBkaXNwbGF5OiBub25lO1xcbiAgfVxcbiAgLmJhZGdlIHtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgIzAwMDtcXG4gIH1cXG4gIC50YWJsZSB7XFxuICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2UgIWltcG9ydGFudDtcXG4gIH1cXG4gIC50YWJsZSB0ZCxcXG4gIC50YWJsZSB0aCB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYgIWltcG9ydGFudDtcXG4gIH1cXG4gIC50YWJsZS1ib3JkZXJlZCB0aCxcXG4gIC50YWJsZS1ib3JkZXJlZCB0ZCB7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZWUyZTYgIWltcG9ydGFudDtcXG4gIH1cXG4gIC50YWJsZS1kYXJrIHtcXG4gICAgY29sb3I6IGluaGVyaXQ7XFxuICB9XFxuICAudGFibGUtZGFyayB0aCxcXG4gIC50YWJsZS1kYXJrIHRkLFxcbiAgLnRhYmxlLWRhcmsgdGhlYWQgdGgsXFxuICAudGFibGUtZGFyayB0Ym9keSArIHRib2R5IHtcXG4gICAgYm9yZGVyLWNvbG9yOiAjZGVlMmU2O1xcbiAgfVxcbiAgLnRhYmxlIC50aGVhZC1kYXJrIHRoIHtcXG4gICAgY29sb3I6IGluaGVyaXQ7XFxuICAgIGJvcmRlci1jb2xvcjogI2RlZTJlNjtcXG4gIH1cXG59XCIsIFwiXCJdKTtcblxuIiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIikoZmFsc2UpO1xuLy8gTW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCJib2R5IHtcXG5cXG59XFxuXFxuLnBhZ2Uge1xcbiAgcGFkZGluZy1ib3R0b206IDE1MHB4O1xcbn1cXG5cXG4uc2lkZWJhciB7XFxuICBwYWRkaW5nLXRvcDogMjBweDtcXG4gIG1hcmdpbi10b3A6IDQ4cHg7XFxuICBtaW4taGVpZ2h0OiA4ZW07XFxuICBwYWRkaW5nLWxlZnQ6IDEwcHhcXG59XFxuXFxuW3JvbGU9XFxcIm1haW5cXFwiXSB7XFxuICBwYWRkaW5nLXRvcDogMjBweDtcXG4gIG1hcmdpbi10b3A6IDQ4cHg7XFxufVxcblxcbi5pbmxpbmV7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcXG59XFxuXFxuc3BhbiB7XFxuICBmb250LXNpemU6IDFyZW07XFxufVxcblxcbnNlbGVjdCB7XFxuICBtYXJnaW4tbGVmdDogMTBweDtcXG59XFxuXFxubGFiZWwge1xcbiAgcGFkZGluZy1yaWdodDogMC4yNXJlbTtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG5cXG5zcGFuLmN1c3RvbSB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwLjI1cmVtO1xcbiAgcGFkZGluZy1sZWZ0OiAwLjI1cmVtO1xcbn1cXG5cXG5idXR0b24uY3VzdG9tIHtcXG4gIG1hcmdpbjogMC4yNXJlbTtcXG59XFxuXFxuYS5kaXNhYmxlZCB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuXFxuLm5hdi1pdGVtIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuXFxuLm5hdi1saW5rIHtcXG4gIHBhZGRpbmc6IDAuNXJlbSAwLjI1cmVtIDAuNXJlbSAxcmVtO1xcbn1cXG5cXG4uZHJvcGRvd24tbWVudSBsaTpob3ZlciB7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLm5hbWUge1xcbiAgd2lkdGg6IDhyZW07XFxufVxcblxcbi5mb3JtLWlucHV0IHtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG5cXG4uZm9ybS1pbnB1dC5sYWJlbGVkIHtcXG4gIHdpZHRoOiA2MCU7XFxufVxcblxcbjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbjo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24ge1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG4gIGNvbG9yOiAjMDA3YmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsgXFxuICBib3JkZXItY29sb3I6ICMwMDdiZmY7XFxuICBwYWRkaW5nOiAwLjM3NXJlbSwgMC43NXJlbTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkO1xcbiAgbWFyZ2luOiA1cHggMTBweCA1cHggMHB4ICFpbXBvcnRhbnQ7XFxuICBib3gtc2hhZG93OiA2cHggNnB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgLjIpLCAyLjI1cHggMi4yNXB4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgLjEpLCAzLjc1cHggMy43NXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgLjQpXFxufVxcblxcbmlucHV0W3R5cGU9XFxcImZpbGVcXFwiXTo6LW1zLWJyb3dzZSB7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbiAgY29sb3I6ICMwMDdiZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOyBcXG4gIGJvcmRlci1jb2xvcjogIzAwN2JmZjtcXG4gIHBhZGRpbmc6IDAuMzc1cmVtLCAwLjc1cmVtO1xcbiAgYm9yZGVyOiAxcHggc29saWQ7XFxuICBtYXJnaW46IDVweCAxMHB4IDVweCAwcHggIWltcG9ydGFudDtcXG4gIGJveC1zaGFkb3c6IDZweCA2cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAuMiksIDIuMjVweCAyLjI1cHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAuMSksIDMuNzVweCAzLjc1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAuNClcXG59XFxuXFxuOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbjpob3ZlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDdiZmY7XFxuICBib3JkZXItY29sb3I6ICMwMDdiZmY7XFxufVxcblxcbjo6LW1vei1wbGFjZWhvbGRlciB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG46Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbjo6cGxhY2Vob2xkZXIge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG4uc2lkZWJhci1uYXYge1xcbiAgcGFkZGluZzogOXB4IDA7XFxuICBmb250LXNpemU6IDE0cHg7XFxufVxcblxcbi5nZXQtc3RhcnRlZCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbn1cXG5cXG4ubmF2IHtcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG59XFxuXFxuLnNpZGViYXItc3RpY2t5IHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG59XFxuXFxuLnRvb2xzIHtcXG4gIG1pbi13aWR0aDogMTJlbTsgXFxufVxcblxcbi5ib2R5IHtcXG4gIG1pbi13aWR0aDogNTAwcHggIWltcG9ydGFudDsgXFxufVxcbi5wbG90LXByZXZpZXcge1xcbiAgbWFyZ2luOiAxMHB4O1xcbn1cXG5cXG4ucmVhY3Rpb24tc3VtbWFyeSB7XFxuICBwYWRkaW5nLWxlZnQ6IDE1cHg7XFxuICBwYWRkaW5nLXJpZ2h0OiA1cHg7XFxuICBwYWRkaW5nLWJvdHRvbTogMTBweDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuXFxuLmNvbnRhaW5lci1wYXJ0IHtcXG4gIG1heC13aWR0aDogbm9uZTtcXG59XFxuXFxuLmluZm9ybWF0aW9uLWJ0biB7XFxuICBjb2xvcjogIzAwN2JmZjtcXG4gIGJvcmRlci1jb2xvcjogI2ZmZmZmZjtcXG4gIHBhZGRpbmc6IDAuNXJlbSAxcmVtO1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG59XFxuXFxuLmhlbHAge1xcbiAgZm9udC1zaXplOiAyNXB4O1xcbiAgcGFkZGluZzogMDtcXG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XFxufVxcblxcbi50b29sdGlwLWljb24ge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgcGFkZGluZy1sZWZ0OiAycHg7XFxuICBwYWRkaW5nLXJpZ2h0OiAycHg7XFxuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xcbiAgY29sb3I6ICMwMDdiZmY7XFxufVxcblxcbi50b29sdGlwLWljb24tbGFyZ2Uge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgZm9udC1zaXplOiAyMHB4O1xcbiAgcGFkZGluZy1sZWZ0OiAxMHB4O1xcbiAgcGFkZGluZy1yaWdodDogMTBweDtcXG4gIHZlcnRpY2FsLWFsaWduOiBib3R0b207XFxuICBjb2xvcjogIzAwN2JmZjtcXG59XFxuXFxuLmluZm9ybWF0aW9uLWJ0bjpob3ZlciB7XFxuICBjb2xvcjogIzAwNTZiMztcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWNvbGxhcHNlIHtcXG4gIGNvbG9yOiAjMDAwO1xcbiAgcGFkZGluZzogMHB4IDEwcHg7XFxuICBmb250LXNpemU6IDIwcHg7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgbWFyZ2luLWJvdHRvbTogMC43NXJlbTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWNvbGxhcHNlOmhvdmVyIHtcXG4gIGNvbG9yOiAjMDA3YmZmO1xcbn1cXG5cXG4uYnRuLXByaW1hcnkge1xcbiAgbWFyZ2luOiA1cHggMTBweCA1cHggMHB4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWFjdGlvbi1zdWJkb21haW4ge1xcbiAgcGFkZGluZzogMHB4IDBweCAwcHggMjBweDtcXG4gIGJvcmRlcjogMDtcXG59XFxuXFxuLnJlYWN0aW9uLWRldGFpbHMtc3ViZG9tYWluIHtcXG4gIHBhZGRpbmc6IDBweCAwcHggMHB4IDVweDtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLXRvb2wge1xcbiAgY29sb3I6ICMwMDdiZmY7XFxuICBwYWRkaW5nOiAwLjVyZW0gMXJlbTtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxufVxcblxcbi5idG4tb3V0bGluZS10b29sOmhvdmVyIHtcXG4gIGNvbG9yOiAjMDA1NmIzO1xcbn1cXG5cXG4jY29sbGFwc2UtZGVzY3JpcHRpb24ge1xcbiAgcGFkZGluZzogMHJlbSAycmVtO1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbn1cXG5cXG4ubW9kYWwtY29udGVudC5pbmZvIHtcXG4gIHdpZHRoOiAxNTAlO1xcbn1cXG5cXG4ubW9kYWwtY29udGVudC5kZWZhdWx0LXNwZWNpZXMge1xcbiAgd2lkdGg6IDYwJTtcXG59XFxuXFxuLnNwaW5uZXItYm9yZGVyIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBtYXJnaW46IDE1cHg7XFxuICBsZWZ0OiA0MCU7XFxuICB3aWR0aDogOTBweDtcXG4gIGhlaWdodDogOTBweDtcXG4gIGJvcmRlcjogMTJweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMTI1KTtcXG4gIGJvcmRlci1yaWdodC1jb2xvcjogIzAwN2JmZjtcXG59XFxuXFxuLmVycm9ycyB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5cXG4ubWRsLWVkaXQtYnRuIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuXFxuQGtleWZyYW1lcyBzcGlubmVyLWdyb3cge1xcbiAwJSB7XFxuICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApO1xcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XFxuIH1cXG4gNTAlIHtcXG4gICAgIG9wYWNpdHk6IDE7IFxcbiAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpO1xcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XFxuIH1cXG59XFxuXFxuLnNhdmluZy1zdGF0dXMsIC5zYXZlZC1zdGF0dXMsIC5zYXZlLWVycm9yLXN0YXR1cyB7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgbWFyZ2luOiAxNXB4O1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG59XFxuXFxuLnNhdmluZy1zdGF0dXMge1xcbiAgY29sb3I6ICMxMTdhOGI7XFxufVxcblxcbi5zYXZlZC1zdGF0dXMge1xcbiAgY29sb3I6ICMxZTdlMzQ7XFxufVxcblxcbi5zYXZlLWVycm9yLXN0YXR1cyB7XFxuICBjb2xvcjogI2RjMzU0NTtcXG59XFxuXFxuLnJpZ2h0LWp1c3RpZnkge1xcbiAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XFxuICByaWdodDogNXB4O1xcbiAgbGVmdDogYXV0bztcXG59XFxuXFxuLmRlZmF1bHQtbW9kZSB7XFxuICBtYXJnaW46IDAuNzVyZW07XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGxlZnQ7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGxlZnQ7XFxufVxcblxcbi5jb25jZW50cmF0aW9uLWJ0biwgLnBvcHVsYXRpb24tYnRuLCAuaHlicmlkLWJ0biB7XFxuICBtaW4td2lkdGg6IDI0MHB4O1xcbiAgbWFyZ2luLXJpZ2h0OiAwLjc1cmVtO1xcbn1cXG5cXG5pbnB1dFt0eXBlPVxcXCJjaGVja2JveFxcXCJdIHtcXG4gIHBhZGRpbmc6IDAuNzVyZW07XFxufVxcblxcbnNwYW4uY2hlY2tib3gge1xcbiAgcGFkZGluZy1yaWdodDogMC4yNXJlbTtcXG59XFxuXFxuLmV2ZW50IHtcXG4gIG1hcmdpbi1ib3R0b206IDBweDtcXG59XFxuXFxuLmV2ZW50LXRoIC5ldmVudC10ZCB7XFxuICBwYWRkaW5nLWxlZnQ6IDBweCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udG9vbHRpcC1pbm5lciB7XFxuICBtYXgtd2lkdGg6IDMwMHB4O1xcbiAgcGFkZGluZzogMC4yNXJlbSAwLjVyZW07XFxuICBjb2xvcjogI2ZmZjtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLnZlcnRpY2xlLXNwYWNlIHtcXG4gIHBhZGRpbmctYm90dG9tOiAxMHB4O1xcbn1cXG5cXG4uaG9yaXpvbnRhbC1zcGFjZSB7XFxuICBwYWRkaW5nLWxlZnQ6IDVweDtcXG4gIHBhZGRpbmctcmlnaHQ6IDVweDtcXG59XFxuXFxuLnN3aXRjaGluZyB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xcbiAgaGVpZ2h0OiAyOXB4O1xcbn1cXG5cXG4jaG9tZS13cmFwcGVyIHtcXG4gIG1hcmdpbi10b3A6IDJlbTtcXG4gIG1hcmdpbi1ib3R0b206IDJlbTtcXG59XFxuXFxuLmxvZ28ge1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuLmxvZ28gaW1nIHtcXG4gIHdpZHRoOiA0MGVtO1xcbiAgbWFyZ2luLWxlZnQ6IC04ZW07XFxufVxcblxcbi50cnktc3RvY2hzcy1idG4ge1xcbiAgcGFkZGluZzogMS41cmVtIDEuNXJlbTtcXG4gIGZvbnQtc2l6ZTogMnJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxO1xcbiAgYm9yZGVyLXJhZGl1czogMS41cmVtO1xcbn1cXG5cXG4uaG9tZS1saXN0IHtcXG4gIGxpbmUtaGVpZ2h0OiAyO1xcbn1cXG5cXG4uY2VudGVyZWQge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG4uaG9tZS1wIHtcXG4gIG1hcmdpbi10b3A6IDEuNWVtO1xcbiAgbWFyZ2luLWJvdHRvbTogMS41ZW07XFxuICBmb250LXNpemU6IDIycHg7XFxufVxcblxcbi5iaWctdGlwIHtcXG4gIG1hcmdpbi1sZWZ0OiAuMmVtO1xcbn1cXG5cXG4vKnNoYWRvd2luZyBmb3IgYnV0dG9ucyovXFxuLmJveC1zaGFkb3cge1xcbiAgLypoLW9mZnNldCB2LW9mZnNldCBibHVyIHNwcmVhZCBjb2xvciovXFxuICBib3gtc2hhZG93OiA2cHggNnB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgLjIpLCAyLjI1cHggMi4yNXB4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgLjEpLCAzLjc1cHggMy43NXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgLjQpXFxufVwiLCBcIlwiXSk7XG5cbiIsImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi8uLi9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIikoZmFsc2UpO1xuLy8gTW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCIvKiFcXG4gKiBGb250IEF3ZXNvbWUgRnJlZSA1LjEyLjAgYnkgQGZvbnRhd2Vzb21lIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb21cXG4gKiBMaWNlbnNlIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20vbGljZW5zZS9mcmVlIChJY29uczogQ0MgQlkgNC4wLCBGb250czogU0lMIE9GTCAxLjEsIENvZGU6IE1JVCBMaWNlbnNlKVxcbiAqL1xcbi5zdmctaW5saW5lLS1mYSxzdmc6bm90KDpyb290KS5zdmctaW5saW5lLS1mYXtvdmVyZmxvdzp2aXNpYmxlfS5zdmctaW5saW5lLS1mYXtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6aW5oZXJpdDtoZWlnaHQ6MWVtO3ZlcnRpY2FsLWFsaWduOi0uMTI1ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLWxne3ZlcnRpY2FsLWFsaWduOi0uMjI1ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLXctMXt3aWR0aDouMDYyNWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTJ7d2lkdGg6LjEyNWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTN7d2lkdGg6LjE4NzVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy00e3dpZHRoOi4yNWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTV7d2lkdGg6LjMxMjVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy02e3dpZHRoOi4zNzVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy03e3dpZHRoOi40Mzc1ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLXctOHt3aWR0aDouNWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTl7d2lkdGg6LjU2MjVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy0xMHt3aWR0aDouNjI1ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLXctMTF7d2lkdGg6LjY4NzVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy0xMnt3aWR0aDouNzVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy0xM3t3aWR0aDouODEyNWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTE0e3dpZHRoOi44NzVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy0xNXt3aWR0aDouOTM3NWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTE2e3dpZHRoOjFlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy0xN3t3aWR0aDoxLjA2MjVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy0xOHt3aWR0aDoxLjEyNWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTE5e3dpZHRoOjEuMTg3NWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTIwe3dpZHRoOjEuMjVlbX0uc3ZnLWlubGluZS0tZmEuZmEtcHVsbC1sZWZ0e21hcmdpbi1yaWdodDouM2VtO3dpZHRoOmF1dG99LnN2Zy1pbmxpbmUtLWZhLmZhLXB1bGwtcmlnaHR7bWFyZ2luLWxlZnQ6LjNlbTt3aWR0aDphdXRvfS5zdmctaW5saW5lLS1mYS5mYS1ib3JkZXJ7aGVpZ2h0OjEuNWVtfS5zdmctaW5saW5lLS1mYS5mYS1saXt3aWR0aDoyZW19LnN2Zy1pbmxpbmUtLWZhLmZhLWZ3e3dpZHRoOjEuMjVlbX0uZmEtbGF5ZXJzIHN2Zy5zdmctaW5saW5lLS1mYXtib3R0b206MDtsZWZ0OjA7bWFyZ2luOmF1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0uZmEtbGF5ZXJze2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dmVydGljYWwtYWxpZ246LS4xMjVlbTt3aWR0aDoxZW19LmZhLWxheWVycyBzdmcuc3ZnLWlubGluZS0tZmF7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOmNlbnRlciBjZW50ZXI7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXIgY2VudGVyfS5mYS1sYXllcnMtY291bnRlciwuZmEtbGF5ZXJzLXRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dGV4dC1hbGlnbjpjZW50ZXJ9LmZhLWxheWVycy10ZXh0e2xlZnQ6NTAlO3RvcDo1MCU7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjpjZW50ZXIgY2VudGVyO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyIGNlbnRlcn0uZmEtbGF5ZXJzLWNvdW50ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmYyNTNhO2JvcmRlci1yYWRpdXM6MWVtOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjojZmZmO2hlaWdodDoxLjVlbTtsaW5lLWhlaWdodDoxO21heC13aWR0aDo1ZW07bWluLXdpZHRoOjEuNWVtO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4yNWVtO3JpZ2h0OjA7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt0b3A6MDstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguMjUpO3RyYW5zZm9ybTpzY2FsZSguMjUpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjp0b3AgcmlnaHQ7dHJhbnNmb3JtLW9yaWdpbjp0b3AgcmlnaHR9LmZhLWxheWVycy1ib3R0b20tcmlnaHR7Ym90dG9tOjA7cmlnaHQ6MDt0b3A6YXV0bzstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguMjUpO3RyYW5zZm9ybTpzY2FsZSguMjUpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjpib3R0b20gcmlnaHQ7dHJhbnNmb3JtLW9yaWdpbjpib3R0b20gcmlnaHR9LmZhLWxheWVycy1ib3R0b20tbGVmdHtib3R0b206MDtsZWZ0OjA7cmlnaHQ6YXV0bzt0b3A6YXV0bzstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguMjUpO3RyYW5zZm9ybTpzY2FsZSguMjUpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjpib3R0b20gbGVmdDt0cmFuc2Zvcm0tb3JpZ2luOmJvdHRvbSBsZWZ0fS5mYS1sYXllcnMtdG9wLXJpZ2h0e3JpZ2h0OjA7dG9wOjA7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLjI1KTt0cmFuc2Zvcm06c2NhbGUoLjI1KTstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46dG9wIHJpZ2h0O3RyYW5zZm9ybS1vcmlnaW46dG9wIHJpZ2h0fS5mYS1sYXllcnMtdG9wLWxlZnR7bGVmdDowO3JpZ2h0OmF1dG87dG9wOjA7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLjI1KTt0cmFuc2Zvcm06c2NhbGUoLjI1KTstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46dG9wIGxlZnQ7dHJhbnNmb3JtLW9yaWdpbjp0b3AgbGVmdH0uZmEtbGd7Zm9udC1zaXplOjEuMzMzMzNlbTtsaW5lLWhlaWdodDouNzVlbTt2ZXJ0aWNhbC1hbGlnbjotLjA2NjdlbX0uZmEteHN7Zm9udC1zaXplOi43NWVtfS5mYS1zbXtmb250LXNpemU6Ljg3NWVtfS5mYS0xeHtmb250LXNpemU6MWVtfS5mYS0yeHtmb250LXNpemU6MmVtfS5mYS0zeHtmb250LXNpemU6M2VtfS5mYS00eHtmb250LXNpemU6NGVtfS5mYS01eHtmb250LXNpemU6NWVtfS5mYS02eHtmb250LXNpemU6NmVtfS5mYS03eHtmb250LXNpemU6N2VtfS5mYS04eHtmb250LXNpemU6OGVtfS5mYS05eHtmb250LXNpemU6OWVtfS5mYS0xMHh7Zm9udC1zaXplOjEwZW19LmZhLWZ3e3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjEuMjVlbX0uZmEtdWx7bGlzdC1zdHlsZS10eXBlOm5vbmU7bWFyZ2luLWxlZnQ6Mi41ZW07cGFkZGluZy1sZWZ0OjB9LmZhLXVsPmxpe3Bvc2l0aW9uOnJlbGF0aXZlfS5mYS1saXtsZWZ0Oi0yZW07cG9zaXRpb246YWJzb2x1dGU7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MmVtO2xpbmUtaGVpZ2h0OmluaGVyaXR9LmZhLWJvcmRlcntib3JkZXI6LjA4ZW0gc29saWQgI2VlZTtib3JkZXItcmFkaXVzOi4xZW07cGFkZGluZzouMmVtIC4yNWVtIC4xNWVtfS5mYS1wdWxsLWxlZnR7ZmxvYXQ6bGVmdH0uZmEtcHVsbC1yaWdodHtmbG9hdDpyaWdodH0uZmEuZmEtcHVsbC1sZWZ0LC5mYWIuZmEtcHVsbC1sZWZ0LC5mYWwuZmEtcHVsbC1sZWZ0LC5mYXIuZmEtcHVsbC1sZWZ0LC5mYXMuZmEtcHVsbC1sZWZ0e21hcmdpbi1yaWdodDouM2VtfS5mYS5mYS1wdWxsLXJpZ2h0LC5mYWIuZmEtcHVsbC1yaWdodCwuZmFsLmZhLXB1bGwtcmlnaHQsLmZhci5mYS1wdWxsLXJpZ2h0LC5mYXMuZmEtcHVsbC1yaWdodHttYXJnaW4tbGVmdDouM2VtfS5mYS1zcGluey13ZWJraXQtYW5pbWF0aW9uOmZhLXNwaW4gMnMgbGluZWFyIGluZmluaXRlO2FuaW1hdGlvbjpmYS1zcGluIDJzIGxpbmVhciBpbmZpbml0ZX0uZmEtcHVsc2V7LXdlYmtpdC1hbmltYXRpb246ZmEtc3BpbiAxcyBzdGVwcyg4KSBpbmZpbml0ZTthbmltYXRpb246ZmEtc3BpbiAxcyBzdGVwcyg4KSBpbmZpbml0ZX1ALXdlYmtpdC1rZXlmcmFtZXMgZmEtc3BpbnswJXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMGRlZyk7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX10b3std2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMXR1cm4pO3RyYW5zZm9ybTpyb3RhdGUoMXR1cm4pfX1Aa2V5ZnJhbWVzIGZhLXNwaW57MCV7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDBkZWcpO3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9dG97LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDF0dXJuKTt0cmFuc2Zvcm06cm90YXRlKDF0dXJuKX19LmZhLXJvdGF0ZS05MHstbXMtZmlsdGVyOlxcXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0xKVxcXCI7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDkwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX0uZmEtcm90YXRlLTE4MHstbXMtZmlsdGVyOlxcXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0yKVxcXCI7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDE4MGRlZyk7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfS5mYS1yb3RhdGUtMjcwey1tcy1maWx0ZXI6XFxcInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5CYXNpY0ltYWdlKHJvdGF0aW9uPTMpXFxcIjstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDI3MGRlZyl9LmZhLWZsaXAtaG9yaXpvbnRhbHstbXMtZmlsdGVyOlxcXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0wLCBtaXJyb3I9MSlcXFwiOy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlWCgtMSk7dHJhbnNmb3JtOnNjYWxlWCgtMSl9LmZhLWZsaXAtdmVydGljYWx7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGVZKC0xKTt0cmFuc2Zvcm06c2NhbGVZKC0xKX0uZmEtZmxpcC1ib3RoLC5mYS1mbGlwLWhvcml6b250YWwuZmEtZmxpcC12ZXJ0aWNhbCwuZmEtZmxpcC12ZXJ0aWNhbHstbXMtZmlsdGVyOlxcXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0yLCBtaXJyb3I9MSlcXFwifS5mYS1mbGlwLWJvdGgsLmZhLWZsaXAtaG9yaXpvbnRhbC5mYS1mbGlwLXZlcnRpY2Fsey13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC0xKTt0cmFuc2Zvcm06c2NhbGUoLTEpfTpyb290IC5mYS1mbGlwLWJvdGgsOnJvb3QgLmZhLWZsaXAtaG9yaXpvbnRhbCw6cm9vdCAuZmEtZmxpcC12ZXJ0aWNhbCw6cm9vdCAuZmEtcm90YXRlLTkwLDpyb290IC5mYS1yb3RhdGUtMTgwLDpyb290IC5mYS1yb3RhdGUtMjcwey13ZWJraXQtZmlsdGVyOm5vbmU7ZmlsdGVyOm5vbmV9LmZhLXN0YWNre2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoyZW07cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6Mi41ZW19LmZhLXN0YWNrLTF4LC5mYS1zdGFjay0yeHtib3R0b206MDtsZWZ0OjA7bWFyZ2luOmF1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0uc3ZnLWlubGluZS0tZmEuZmEtc3RhY2stMXh7aGVpZ2h0OjFlbTt3aWR0aDoxLjI1ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLXN0YWNrLTJ4e2hlaWdodDoyZW07d2lkdGg6Mi41ZW19LmZhLWludmVyc2V7Y29sb3I6I2ZmZn0uc3Itb25seXtib3JkZXI6MDtjbGlwOnJlY3QoMCwwLDAsMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweH0uc3Itb25seS1mb2N1c2FibGU6YWN0aXZlLC5zci1vbmx5LWZvY3VzYWJsZTpmb2N1c3tjbGlwOmF1dG87aGVpZ2h0OmF1dG87bWFyZ2luOjA7b3ZlcmZsb3c6dmlzaWJsZTtwb3NpdGlvbjpzdGF0aWM7d2lkdGg6YXV0b30uc3ZnLWlubGluZS0tZmEgLmZhLXByaW1hcnl7ZmlsbDp2YXIoLS1mYS1wcmltYXJ5LWNvbG9yLGN1cnJlbnRDb2xvcik7b3BhY2l0eToxO29wYWNpdHk6dmFyKC0tZmEtcHJpbWFyeS1vcGFjaXR5LDEpfS5zdmctaW5saW5lLS1mYSAuZmEtc2Vjb25kYXJ5e2ZpbGw6dmFyKC0tZmEtc2Vjb25kYXJ5LWNvbG9yLGN1cnJlbnRDb2xvcil9LnN2Zy1pbmxpbmUtLWZhIC5mYS1zZWNvbmRhcnksLnN2Zy1pbmxpbmUtLWZhLmZhLXN3YXAtb3BhY2l0eSAuZmEtcHJpbWFyeXtvcGFjaXR5Oi40O29wYWNpdHk6dmFyKC0tZmEtc2Vjb25kYXJ5LW9wYWNpdHksLjQpfS5zdmctaW5saW5lLS1mYS5mYS1zd2FwLW9wYWNpdHkgLmZhLXNlY29uZGFyeXtvcGFjaXR5OjE7b3BhY2l0eTp2YXIoLS1mYS1wcmltYXJ5LW9wYWNpdHksMSl9LnN2Zy1pbmxpbmUtLWZhIG1hc2sgLmZhLXByaW1hcnksLnN2Zy1pbmxpbmUtLWZhIG1hc2sgLmZhLXNlY29uZGFyeXtmaWxsOiMwMDB9LmZhZC5mYS1pbnZlcnNle2NvbG9yOiNmZmZ9XCIsIFwiXCJdKTtcblxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG4vLyBjc3MgYmFzZSBjb2RlLCBpbmplY3RlZCBieSB0aGUgY3NzLWxvYWRlclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodXNlU291cmNlTWFwKSB7XG4gIHZhciBsaXN0ID0gW107IC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblxuICBsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgY29udGVudCA9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSwgdXNlU291cmNlTWFwKTtcblxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgcmV0dXJuICdAbWVkaWEgJyArIGl0ZW1bMl0gKyAneycgKyBjb250ZW50ICsgJ30nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfSkuam9pbignJyk7XG4gIH07IC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG5cblxuICBsaXN0LmkgPSBmdW5jdGlvbiAobW9kdWxlcywgbWVkaWFRdWVyeSkge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsICcnXV07XG4gICAgfVxuXG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkID0gdGhpc1tpXVswXTtcblxuICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBtb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IG1vZHVsZXNbaV07IC8vIHNraXAgYWxyZWFkeSBpbXBvcnRlZCBtb2R1bGVcbiAgICAgIC8vIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgbm90IDEwMCUgcGVyZmVjdCBmb3Igd2VpcmQgbWVkaWEgcXVlcnkgY29tYmluYXRpb25zXG4gICAgICAvLyB3aGVuIGEgbW9kdWxlIGlzIGltcG9ydGVkIG11bHRpcGxlIHRpbWVzIHdpdGggZGlmZmVyZW50IG1lZGlhIHF1ZXJpZXMuXG4gICAgICAvLyBJIGhvcGUgdGhpcyB3aWxsIG5ldmVyIG9jY3VyIChIZXkgdGhpcyB3YXkgd2UgaGF2ZSBzbWFsbGVyIGJ1bmRsZXMpXG5cbiAgICAgIGlmIChpdGVtWzBdID09IG51bGwgfHwgIWFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgaWYgKG1lZGlhUXVlcnkgJiYgIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWFRdWVyeTtcbiAgICAgICAgfSBlbHNlIGlmIChtZWRpYVF1ZXJ5KSB7XG4gICAgICAgICAgaXRlbVsyXSA9ICcoJyArIGl0ZW1bMl0gKyAnKSBhbmQgKCcgKyBtZWRpYVF1ZXJ5ICsgJyknO1xuICAgICAgICB9XG5cbiAgICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbGlzdDtcbn07XG5cbmZ1bmN0aW9uIGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSwgdXNlU291cmNlTWFwKSB7XG4gIHZhciBjb250ZW50ID0gaXRlbVsxXSB8fCAnJztcbiAgdmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuXG4gIGlmICghY3NzTWFwcGluZykge1xuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgaWYgKHVzZVNvdXJjZU1hcCAmJiB0eXBlb2YgYnRvYSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBzb3VyY2VNYXBwaW5nID0gdG9Db21tZW50KGNzc01hcHBpbmcpO1xuICAgIHZhciBzb3VyY2VVUkxzID0gY3NzTWFwcGluZy5zb3VyY2VzLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICByZXR1cm4gJy8qIyBzb3VyY2VVUkw9JyArIGNzc01hcHBpbmcuc291cmNlUm9vdCArIHNvdXJjZSArICcgKi8nO1xuICAgIH0pO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKCdcXG4nKTtcbn0gLy8gQWRhcHRlZCBmcm9tIGNvbnZlcnQtc291cmNlLW1hcCAoTUlUKVxuXG5cbmZ1bmN0aW9uIHRvQ29tbWVudChzb3VyY2VNYXApIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpO1xuICB2YXIgZGF0YSA9ICdzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCwnICsgYmFzZTY0O1xuICByZXR1cm4gJy8qIyAnICsgZGF0YSArICcgKi8nO1xufSIsIid1c2Ugc3RyaWN0JztcblxudmFyIGtleXMgPSByZXF1aXJlKCdvYmplY3Qta2V5cycpO1xudmFyIGhhc1N5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2woJ2ZvbycpID09PSAnc3ltYm9sJztcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBjb25jYXQgPSBBcnJheS5wcm90b3R5cGUuY29uY2F0O1xudmFyIG9yaWdEZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxudmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiAoZm4pIHtcblx0cmV0dXJuIHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyAmJiB0b1N0ci5jYWxsKGZuKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn07XG5cbnZhciBhcmVQcm9wZXJ0eURlc2NyaXB0b3JzU3VwcG9ydGVkID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgb2JqID0ge307XG5cdHRyeSB7XG5cdFx0b3JpZ0RlZmluZVByb3BlcnR5KG9iaiwgJ3gnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogb2JqIH0pO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycywgbm8tcmVzdHJpY3RlZC1zeW50YXhcblx0XHRmb3IgKHZhciBfIGluIG9iaikgeyAvLyBqc2NzOmlnbm9yZSBkaXNhbGxvd1VudXNlZFZhcmlhYmxlc1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gb2JqLnggPT09IG9iajtcblx0fSBjYXRjaCAoZSkgeyAvKiB0aGlzIGlzIElFIDguICovXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xudmFyIHN1cHBvcnRzRGVzY3JpcHRvcnMgPSBvcmlnRGVmaW5lUHJvcGVydHkgJiYgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCgpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lLCB2YWx1ZSwgcHJlZGljYXRlKSB7XG5cdGlmIChuYW1lIGluIG9iamVjdCAmJiAoIWlzRnVuY3Rpb24ocHJlZGljYXRlKSB8fCAhcHJlZGljYXRlKCkpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmIChzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0b3JpZ0RlZmluZVByb3BlcnR5KG9iamVjdCwgbmFtZSwge1xuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9iamVjdFtuYW1lXSA9IHZhbHVlO1xuXHR9XG59O1xuXG52YXIgZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIChvYmplY3QsIG1hcCkge1xuXHR2YXIgcHJlZGljYXRlcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDoge307XG5cdHZhciBwcm9wcyA9IGtleXMobWFwKTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHRwcm9wcyA9IGNvbmNhdC5jYWxsKHByb3BzLCBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG1hcCkpO1xuXHR9XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpICs9IDEpIHtcblx0XHRkZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BzW2ldLCBtYXBbcHJvcHNbaV1dLCBwcmVkaWNhdGVzW3Byb3BzW2ldXSk7XG5cdH1cbn07XG5cbmRlZmluZVByb3BlcnRpZXMuc3VwcG9ydHNEZXNjcmlwdG9ycyA9ICEhc3VwcG9ydHNEZXNjcmlwdG9ycztcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVQcm9wZXJ0aWVzO1xuIiwiLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbnZhciBjbG9zZXN0ID0gcmVxdWlyZSgnY2xvc2VzdCcpXG4gICwgZXZlbnQgPSByZXF1aXJlKCdjb21wb25lbnQtZXZlbnQnKTtcblxuLyoqXG4gKiBEZWxlZ2F0ZSBldmVudCBgdHlwZWAgdG8gYHNlbGVjdG9yYFxuICogYW5kIGludm9rZSBgZm4oZSlgLiBBIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKiBpcyByZXR1cm5lZCB3aGljaCBtYXkgYmUgcGFzc2VkIHRvIGAudW5iaW5kKClgLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvclxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGNhcHR1cmVcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG4vLyBTb21lIGV2ZW50cyBkb24ndCBidWJibGUsIHNvIHdlIHdhbnQgdG8gYmluZCB0byB0aGUgY2FwdHVyZSBwaGFzZSBpbnN0ZWFkXG4vLyB3aGVuIGRlbGVnYXRpbmcuXG52YXIgZm9yY2VDYXB0dXJlRXZlbnRzID0gWydmb2N1cycsICdibHVyJ107XG5cbmV4cG9ydHMuYmluZCA9IGZ1bmN0aW9uKGVsLCBzZWxlY3RvciwgdHlwZSwgZm4sIGNhcHR1cmUpe1xuICBpZiAoZm9yY2VDYXB0dXJlRXZlbnRzLmluZGV4T2YodHlwZSkgIT09IC0xKSBjYXB0dXJlID0gdHJ1ZTtcblxuICByZXR1cm4gZXZlbnQuYmluZChlbCwgdHlwZSwgZnVuY3Rpb24oZSl7XG4gICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudDtcbiAgICBlLmRlbGVnYXRlVGFyZ2V0ID0gY2xvc2VzdCh0YXJnZXQsIHNlbGVjdG9yLCB0cnVlLCBlbCk7XG4gICAgaWYgKGUuZGVsZWdhdGVUYXJnZXQpIGZuLmNhbGwoZWwsIGUpO1xuICB9LCBjYXB0dXJlKTtcbn07XG5cbi8qKlxuICogVW5iaW5kIGV2ZW50IGB0eXBlYCdzIGNhbGxiYWNrIGBmbmAuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbFxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGNhcHR1cmVcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy51bmJpbmQgPSBmdW5jdGlvbihlbCwgdHlwZSwgZm4sIGNhcHR1cmUpe1xuICBpZiAoZm9yY2VDYXB0dXJlRXZlbnRzLmluZGV4T2YodHlwZSkgIT09IC0xKSBjYXB0dXJlID0gdHJ1ZTtcblxuICBldmVudC51bmJpbmQoZWwsIHR5cGUsIGZuLCBjYXB0dXJlKTtcbn07XG4iLCJcbi8qKlxuICogRXhwb3NlIGBwYXJzZWAuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZTtcblxuLyoqXG4gKiBUZXN0cyBmb3IgYnJvd3NlciBzdXBwb3J0LlxuICovXG5cbnZhciBpbm5lckhUTUxCdWcgPSBmYWxzZTtcbnZhciBidWdUZXN0RGl2O1xuaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgYnVnVGVzdERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAvLyBTZXR1cFxuICBidWdUZXN0RGl2LmlubmVySFRNTCA9ICcgIDxsaW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPVwiL2FcIj5hPC9hPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIi8+JztcbiAgLy8gTWFrZSBzdXJlIHRoYXQgbGluayBlbGVtZW50cyBnZXQgc2VyaWFsaXplZCBjb3JyZWN0bHkgYnkgaW5uZXJIVE1MXG4gIC8vIFRoaXMgcmVxdWlyZXMgYSB3cmFwcGVyIGVsZW1lbnQgaW4gSUVcbiAgaW5uZXJIVE1MQnVnID0gIWJ1Z1Rlc3REaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xpbmsnKS5sZW5ndGg7XG4gIGJ1Z1Rlc3REaXYgPSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogV3JhcCBtYXAgZnJvbSBqcXVlcnkuXG4gKi9cblxudmFyIG1hcCA9IHtcbiAgbGVnZW5kOiBbMSwgJzxmaWVsZHNldD4nLCAnPC9maWVsZHNldD4nXSxcbiAgdHI6IFsyLCAnPHRhYmxlPjx0Ym9keT4nLCAnPC90Ym9keT48L3RhYmxlPiddLFxuICBjb2w6IFsyLCAnPHRhYmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4nLCAnPC9jb2xncm91cD48L3RhYmxlPiddLFxuICAvLyBmb3Igc2NyaXB0L2xpbmsvc3R5bGUgdGFncyB0byB3b3JrIGluIElFNi04LCB5b3UgaGF2ZSB0byB3cmFwXG4gIC8vIGluIGEgZGl2IHdpdGggYSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgaW4gZnJvbnQsIGhhIVxuICBfZGVmYXVsdDogaW5uZXJIVE1MQnVnID8gWzEsICdYPGRpdj4nLCAnPC9kaXY+J10gOiBbMCwgJycsICcnXVxufTtcblxubWFwLnRkID1cbm1hcC50aCA9IFszLCAnPHRhYmxlPjx0Ym9keT48dHI+JywgJzwvdHI+PC90Ym9keT48L3RhYmxlPiddO1xuXG5tYXAub3B0aW9uID1cbm1hcC5vcHRncm91cCA9IFsxLCAnPHNlbGVjdCBtdWx0aXBsZT1cIm11bHRpcGxlXCI+JywgJzwvc2VsZWN0PiddO1xuXG5tYXAudGhlYWQgPVxubWFwLnRib2R5ID1cbm1hcC5jb2xncm91cCA9XG5tYXAuY2FwdGlvbiA9XG5tYXAudGZvb3QgPSBbMSwgJzx0YWJsZT4nLCAnPC90YWJsZT4nXTtcblxubWFwLnBvbHlsaW5lID1cbm1hcC5lbGxpcHNlID1cbm1hcC5wb2x5Z29uID1cbm1hcC5jaXJjbGUgPVxubWFwLnRleHQgPVxubWFwLmxpbmUgPVxubWFwLnBhdGggPVxubWFwLnJlY3QgPVxubWFwLmcgPSBbMSwgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZlcnNpb249XCIxLjFcIj4nLCc8L3N2Zz4nXTtcblxuLyoqXG4gKiBQYXJzZSBgaHRtbGAgYW5kIHJldHVybiBhIERPTSBOb2RlIGluc3RhbmNlLCB3aGljaCBjb3VsZCBiZSBhIFRleHROb2RlLFxuICogSFRNTCBET00gTm9kZSBvZiBzb21lIGtpbmQgKDxkaXY+IGZvciBleGFtcGxlKSwgb3IgYSBEb2N1bWVudEZyYWdtZW50XG4gKiBpbnN0YW5jZSwgZGVwZW5kaW5nIG9uIHRoZSBjb250ZW50cyBvZiB0aGUgYGh0bWxgIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaHRtbCAtIEhUTUwgc3RyaW5nIHRvIFwiZG9taWZ5XCJcbiAqIEBwYXJhbSB7RG9jdW1lbnR9IGRvYyAtIFRoZSBgZG9jdW1lbnRgIGluc3RhbmNlIHRvIGNyZWF0ZSB0aGUgTm9kZSBmb3JcbiAqIEByZXR1cm4ge0RPTU5vZGV9IHRoZSBUZXh0Tm9kZSwgRE9NIE5vZGUsIG9yIERvY3VtZW50RnJhZ21lbnQgaW5zdGFuY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlKGh0bWwsIGRvYykge1xuICBpZiAoJ3N0cmluZycgIT0gdHlwZW9mIGh0bWwpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N0cmluZyBleHBlY3RlZCcpO1xuXG4gIC8vIGRlZmF1bHQgdG8gdGhlIGdsb2JhbCBgZG9jdW1lbnRgIG9iamVjdFxuICBpZiAoIWRvYykgZG9jID0gZG9jdW1lbnQ7XG5cbiAgLy8gdGFnIG5hbWVcbiAgdmFyIG0gPSAvPChbXFx3Ol0rKS8uZXhlYyhodG1sKTtcbiAgaWYgKCFtKSByZXR1cm4gZG9jLmNyZWF0ZVRleHROb2RlKGh0bWwpO1xuXG4gIGh0bWwgPSBodG1sLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTsgLy8gUmVtb3ZlIGxlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZVxuXG4gIHZhciB0YWcgPSBtWzFdO1xuXG4gIC8vIGJvZHkgc3VwcG9ydFxuICBpZiAodGFnID09ICdib2R5Jykge1xuICAgIHZhciBlbCA9IGRvYy5jcmVhdGVFbGVtZW50KCdodG1sJyk7XG4gICAgZWwuaW5uZXJIVE1MID0gaHRtbDtcbiAgICByZXR1cm4gZWwucmVtb3ZlQ2hpbGQoZWwubGFzdENoaWxkKTtcbiAgfVxuXG4gIC8vIHdyYXAgbWFwXG4gIHZhciB3cmFwID0gbWFwW3RhZ10gfHwgbWFwLl9kZWZhdWx0O1xuICB2YXIgZGVwdGggPSB3cmFwWzBdO1xuICB2YXIgcHJlZml4ID0gd3JhcFsxXTtcbiAgdmFyIHN1ZmZpeCA9IHdyYXBbMl07XG4gIHZhciBlbCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgZWwuaW5uZXJIVE1MID0gcHJlZml4ICsgaHRtbCArIHN1ZmZpeDtcbiAgd2hpbGUgKGRlcHRoLS0pIGVsID0gZWwubGFzdENoaWxkO1xuXG4gIC8vIG9uZSBlbGVtZW50XG4gIGlmIChlbC5maXJzdENoaWxkID09IGVsLmxhc3RDaGlsZCkge1xuICAgIHJldHVybiBlbC5yZW1vdmVDaGlsZChlbC5maXJzdENoaWxkKTtcbiAgfVxuXG4gIC8vIHNldmVyYWwgZWxlbWVudHNcbiAgdmFyIGZyYWdtZW50ID0gZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgd2hpbGUgKGVsLmZpcnN0Q2hpbGQpIHtcbiAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChlbC5yZW1vdmVDaGlsZChlbC5maXJzdENoaWxkKSk7XG4gIH1cblxuICByZXR1cm4gZnJhZ21lbnQ7XG59XG4iLCIvKiFcbiAgKiBkb21yZWFkeSAoYykgRHVzdGluIERpYXogMjAxNCAtIExpY2Vuc2UgTUlUXG4gICovXG4hZnVuY3Rpb24gKG5hbWUsIGRlZmluaXRpb24pIHtcblxuICBpZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZpbmVkJykgbW9kdWxlLmV4cG9ydHMgPSBkZWZpbml0aW9uKClcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnKSBkZWZpbmUoZGVmaW5pdGlvbilcbiAgZWxzZSB0aGlzW25hbWVdID0gZGVmaW5pdGlvbigpXG5cbn0oJ2RvbXJlYWR5JywgZnVuY3Rpb24gKCkge1xuXG4gIHZhciBmbnMgPSBbXSwgbGlzdGVuZXJcbiAgICAsIGRvYyA9IGRvY3VtZW50XG4gICAgLCBoYWNrID0gZG9jLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbFxuICAgICwgZG9tQ29udGVudExvYWRlZCA9ICdET01Db250ZW50TG9hZGVkJ1xuICAgICwgbG9hZGVkID0gKGhhY2sgPyAvXmxvYWRlZHxeYy8gOiAvXmxvYWRlZHxeaXxeYy8pLnRlc3QoZG9jLnJlYWR5U3RhdGUpXG5cblxuICBpZiAoIWxvYWRlZClcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoZG9tQ29udGVudExvYWRlZCwgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tQ29udGVudExvYWRlZCwgbGlzdGVuZXIpXG4gICAgbG9hZGVkID0gMVxuICAgIHdoaWxlIChsaXN0ZW5lciA9IGZucy5zaGlmdCgpKSBsaXN0ZW5lcigpXG4gIH0pXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgIGxvYWRlZCA/IHNldFRpbWVvdXQoZm4sIDApIDogZm5zLnB1c2goZm4pXG4gIH1cblxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qIGdsb2JhbHNcblx0U2V0LFxuXHRNYXAsXG5cdFdlYWtTZXQsXG5cdFdlYWtNYXAsXG5cblx0UHJvbWlzZSxcblxuXHRTeW1ib2wsXG5cdFByb3h5LFxuXG5cdEF0b21pY3MsXG5cdFNoYXJlZEFycmF5QnVmZmVyLFxuXG5cdEFycmF5QnVmZmVyLFxuXHREYXRhVmlldyxcblx0VWludDhBcnJheSxcblx0RmxvYXQzMkFycmF5LFxuXHRGbG9hdDY0QXJyYXksXG5cdEludDhBcnJheSxcblx0SW50MTZBcnJheSxcblx0SW50MzJBcnJheSxcblx0VWludDhDbGFtcGVkQXJyYXksXG5cdFVpbnQxNkFycmF5LFxuXHRVaW50MzJBcnJheSxcbiovXG5cbnZhciB1bmRlZmluZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2hhZG93LXJlc3RyaWN0ZWQtbmFtZXNcblxudmFyIFRocm93VHlwZUVycm9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvclxuXHQ/IChmdW5jdGlvbiAoKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJ2NhbGxlZScpLmdldDsgfSgpKVxuXHQ6IGZ1bmN0aW9uICgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyB9O1xuXG52YXIgaGFzU3ltYm9scyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gJ3N5bWJvbCc7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIGdlbmVyYXRvcjsgLy8gPSBmdW5jdGlvbiAqICgpIHt9O1xudmFyIGdlbmVyYXRvckZ1bmN0aW9uID0gZ2VuZXJhdG9yID8gZ2V0UHJvdG8oZ2VuZXJhdG9yKSA6IHVuZGVmaW5lZDtcbnZhciBhc3luY0ZuOyAvLyBhc3luYyBmdW5jdGlvbigpIHt9O1xudmFyIGFzeW5jRnVuY3Rpb24gPSBhc3luY0ZuID8gYXN5bmNGbi5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZDtcbnZhciBhc3luY0dlbjsgLy8gYXN5bmMgZnVuY3Rpb24gKiAoKSB7fTtcbnZhciBhc3luY0dlbkZ1bmN0aW9uID0gYXN5bmNHZW4gPyBnZXRQcm90byhhc3luY0dlbikgOiB1bmRlZmluZWQ7XG52YXIgYXN5bmNHZW5JdGVyYXRvciA9IGFzeW5jR2VuID8gYXN5bmNHZW4oKSA6IHVuZGVmaW5lZDtcblxudmFyIFR5cGVkQXJyYXkgPSB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBnZXRQcm90byhVaW50OEFycmF5KTtcblxudmFyIElOVFJJTlNJQ1MgPSB7XG5cdCckICVBcnJheSUnOiBBcnJheSxcblx0JyQgJUFycmF5QnVmZmVyJSc6IHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBcnJheUJ1ZmZlcixcblx0JyQgJUFycmF5QnVmZmVyUHJvdG90eXBlJSc6IHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBcnJheUJ1ZmZlci5wcm90b3R5cGUsXG5cdCckICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpIDogdW5kZWZpbmVkLFxuXHQnJCAlQXJyYXlQcm90b3R5cGUlJzogQXJyYXkucHJvdG90eXBlLFxuXHQnJCAlQXJyYXlQcm90b19lbnRyaWVzJSc6IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzLFxuXHQnJCAlQXJyYXlQcm90b19mb3JFYWNoJSc6IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLFxuXHQnJCAlQXJyYXlQcm90b19rZXlzJSc6IEFycmF5LnByb3RvdHlwZS5rZXlzLFxuXHQnJCAlQXJyYXlQcm90b192YWx1ZXMlJzogQXJyYXkucHJvdG90eXBlLnZhbHVlcyxcblx0JyQgJUFzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiB1bmRlZmluZWQsXG5cdCckICVBc3luY0Z1bmN0aW9uJSc6IGFzeW5jRnVuY3Rpb24sXG5cdCckICVBc3luY0Z1bmN0aW9uUHJvdG90eXBlJSc6IGFzeW5jRnVuY3Rpb24gPyBhc3luY0Z1bmN0aW9uLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcblx0JyQgJUFzeW5jR2VuZXJhdG9yJSc6IGFzeW5jR2VuID8gZ2V0UHJvdG8oYXN5bmNHZW5JdGVyYXRvcikgOiB1bmRlZmluZWQsXG5cdCckICVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSc6IGFzeW5jR2VuRnVuY3Rpb24sXG5cdCckICVBc3luY0dlbmVyYXRvclByb3RvdHlwZSUnOiBhc3luY0dlbkZ1bmN0aW9uID8gYXN5bmNHZW5GdW5jdGlvbi5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG5cdCckICVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IGFzeW5jR2VuSXRlcmF0b3IgJiYgaGFzU3ltYm9scyAmJiBTeW1ib2wuYXN5bmNJdGVyYXRvciA/IGFzeW5jR2VuSXRlcmF0b3JbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkgOiB1bmRlZmluZWQsXG5cdCckICVBdG9taWNzJSc6IHR5cGVvZiBBdG9taWNzID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEF0b21pY3MsXG5cdCckICVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCckICVCb29sZWFuUHJvdG90eXBlJSc6IEJvb2xlYW4ucHJvdG90eXBlLFxuXHQnJCAlRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJCAlRGF0YVZpZXdQcm90b3R5cGUlJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LnByb3RvdHlwZSxcblx0JyQgJURhdGUlJzogRGF0ZSxcblx0JyQgJURhdGVQcm90b3R5cGUlJzogRGF0ZS5wcm90b3R5cGUsXG5cdCckICVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJCAlZGVjb2RlVVJJQ29tcG9uZW50JSc6IGRlY29kZVVSSUNvbXBvbmVudCxcblx0JyQgJWVuY29kZVVSSSUnOiBlbmNvZGVVUkksXG5cdCckICVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJCAlRXJyb3IlJzogRXJyb3IsXG5cdCckICVFcnJvclByb3RvdHlwZSUnOiBFcnJvci5wcm90b3R5cGUsXG5cdCckICVldmFsJSc6IGV2YWwsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZXZhbFxuXHQnJCAlRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyQgJUV2YWxFcnJvclByb3RvdHlwZSUnOiBFdmFsRXJyb3IucHJvdG90eXBlLFxuXHQnJCAlRmxvYXQzMkFycmF5JSc6IHR5cGVvZiBGbG9hdDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQzMkFycmF5LFxuXHQnJCAlRmxvYXQzMkFycmF5UHJvdG90eXBlJSc6IHR5cGVvZiBGbG9hdDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQzMkFycmF5LnByb3RvdHlwZSxcblx0JyQgJUZsb2F0NjRBcnJheSUnOiB0eXBlb2YgRmxvYXQ2NEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZsb2F0NjRBcnJheSxcblx0JyQgJUZsb2F0NjRBcnJheVByb3RvdHlwZSUnOiB0eXBlb2YgRmxvYXQ2NEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZsb2F0NjRBcnJheS5wcm90b3R5cGUsXG5cdCckICVGdW5jdGlvbiUnOiBGdW5jdGlvbixcblx0JyQgJUZ1bmN0aW9uUHJvdG90eXBlJSc6IEZ1bmN0aW9uLnByb3RvdHlwZSxcblx0JyQgJUdlbmVyYXRvciUnOiBnZW5lcmF0b3IgPyBnZXRQcm90byhnZW5lcmF0b3IoKSkgOiB1bmRlZmluZWQsXG5cdCckICVHZW5lcmF0b3JGdW5jdGlvbiUnOiBnZW5lcmF0b3JGdW5jdGlvbixcblx0JyQgJUdlbmVyYXRvclByb3RvdHlwZSUnOiBnZW5lcmF0b3JGdW5jdGlvbiA/IGdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcblx0JyQgJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyQgJUludDhBcnJheVByb3RvdHlwZSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheS5wcm90b3R5cGUsXG5cdCckICVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCckICVJbnQxNkFycmF5UHJvdG90eXBlJSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheS5wcm90b3R5cGUsXG5cdCckICVJbnQzMkFycmF5JSc6IHR5cGVvZiBJbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDMyQXJyYXksXG5cdCckICVJbnQzMkFycmF5UHJvdG90eXBlJSc6IHR5cGVvZiBJbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDMyQXJyYXkucHJvdG90eXBlLFxuXHQnJCAlaXNGaW5pdGUlJzogaXNGaW5pdGUsXG5cdCckICVpc05hTiUnOiBpc05hTixcblx0JyQgJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyQgJUpTT04lJzogSlNPTixcblx0JyQgJUpTT05QYXJzZSUnOiBKU09OLnBhcnNlLFxuXHQnJCAlTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJCAlTWFwSXRlcmF0b3JQcm90b3R5cGUlJzogdHlwZW9mIE1hcCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWhhc1N5bWJvbHMgPyB1bmRlZmluZWQgOiBnZXRQcm90byhuZXcgTWFwKClbU3ltYm9sLml0ZXJhdG9yXSgpKSxcblx0JyQgJU1hcFByb3RvdHlwZSUnOiB0eXBlb2YgTWFwID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IE1hcC5wcm90b3R5cGUsXG5cdCckICVNYXRoJSc6IE1hdGgsXG5cdCckICVOdW1iZXIlJzogTnVtYmVyLFxuXHQnJCAlTnVtYmVyUHJvdG90eXBlJSc6IE51bWJlci5wcm90b3R5cGUsXG5cdCckICVPYmplY3QlJzogT2JqZWN0LFxuXHQnJCAlT2JqZWN0UHJvdG90eXBlJSc6IE9iamVjdC5wcm90b3R5cGUsXG5cdCckICVPYmpQcm90b190b1N0cmluZyUnOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLFxuXHQnJCAlT2JqUHJvdG9fdmFsdWVPZiUnOiBPYmplY3QucHJvdG90eXBlLnZhbHVlT2YsXG5cdCckICVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCckICVwYXJzZUludCUnOiBwYXJzZUludCxcblx0JyQgJVByb21pc2UlJzogdHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJvbWlzZSxcblx0JyQgJVByb21pc2VQcm90b3R5cGUlJzogdHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJvbWlzZS5wcm90b3R5cGUsXG5cdCckICVQcm9taXNlUHJvdG9fdGhlbiUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLnByb3RvdHlwZS50aGVuLFxuXHQnJCAlUHJvbWlzZV9hbGwlJzogdHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJvbWlzZS5hbGwsXG5cdCckICVQcm9taXNlX3JlamVjdCUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLnJlamVjdCxcblx0JyQgJVByb21pc2VfcmVzb2x2ZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLnJlc29sdmUsXG5cdCckICVQcm94eSUnOiB0eXBlb2YgUHJveHkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJveHksXG5cdCckICVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCckICVSYW5nZUVycm9yUHJvdG90eXBlJSc6IFJhbmdlRXJyb3IucHJvdG90eXBlLFxuXHQnJCAlUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCckICVSZWZlcmVuY2VFcnJvclByb3RvdHlwZSUnOiBSZWZlcmVuY2VFcnJvci5wcm90b3R5cGUsXG5cdCckICVSZWZsZWN0JSc6IHR5cGVvZiBSZWZsZWN0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFJlZmxlY3QsXG5cdCckICVSZWdFeHAlJzogUmVnRXhwLFxuXHQnJCAlUmVnRXhwUHJvdG90eXBlJSc6IFJlZ0V4cC5wcm90b3R5cGUsXG5cdCckICVTZXQlJzogdHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTZXQsXG5cdCckICVTZXRJdGVyYXRvclByb3RvdHlwZSUnOiB0eXBlb2YgU2V0ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzU3ltYm9scyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKG5ldyBTZXQoKVtTeW1ib2wuaXRlcmF0b3JdKCkpLFxuXHQnJCAlU2V0UHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LnByb3RvdHlwZSxcblx0JyQgJVNoYXJlZEFycmF5QnVmZmVyJSc6IHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTaGFyZWRBcnJheUJ1ZmZlcixcblx0JyQgJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTaGFyZWRBcnJheUJ1ZmZlci5wcm90b3R5cGUsXG5cdCckICVTdHJpbmclJzogU3RyaW5nLFxuXHQnJCAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCckICVTdHJpbmdQcm90b3R5cGUlJzogU3RyaW5nLnByb3RvdHlwZSxcblx0JyQgJVN5bWJvbCUnOiBoYXNTeW1ib2xzID8gU3ltYm9sIDogdW5kZWZpbmVkLFxuXHQnJCAlU3ltYm9sUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuXHQnJCAlU3ludGF4RXJyb3IlJzogU3ludGF4RXJyb3IsXG5cdCckICVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBTeW50YXhFcnJvci5wcm90b3R5cGUsXG5cdCckICVUaHJvd1R5cGVFcnJvciUnOiBUaHJvd1R5cGVFcnJvcixcblx0JyQgJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyQgJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogVHlwZWRBcnJheSA/IFR5cGVkQXJyYXkucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuXHQnJCAlVHlwZUVycm9yJSc6IFR5cGVFcnJvcixcblx0JyQgJVR5cGVFcnJvclByb3RvdHlwZSUnOiBUeXBlRXJyb3IucHJvdG90eXBlLFxuXHQnJCAlVWludDhBcnJheSUnOiB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OEFycmF5LFxuXHQnJCAlVWludDhBcnJheVByb3RvdHlwZSUnOiB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OEFycmF5LnByb3RvdHlwZSxcblx0JyQgJVVpbnQ4Q2xhbXBlZEFycmF5JSc6IHR5cGVvZiBVaW50OENsYW1wZWRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OENsYW1wZWRBcnJheSxcblx0JyQgJVVpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlJSc6IHR5cGVvZiBVaW50OENsYW1wZWRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OENsYW1wZWRBcnJheS5wcm90b3R5cGUsXG5cdCckICVVaW50MTZBcnJheSUnOiB0eXBlb2YgVWludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDE2QXJyYXksXG5cdCckICVVaW50MTZBcnJheVByb3RvdHlwZSUnOiB0eXBlb2YgVWludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDE2QXJyYXkucHJvdG90eXBlLFxuXHQnJCAlVWludDMyQXJyYXklJzogdHlwZW9mIFVpbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQzMkFycmF5LFxuXHQnJCAlVWludDMyQXJyYXlQcm90b3R5cGUlJzogdHlwZW9mIFVpbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQzMkFycmF5LnByb3RvdHlwZSxcblx0JyQgJVVSSUVycm9yJSc6IFVSSUVycm9yLFxuXHQnJCAlVVJJRXJyb3JQcm90b3R5cGUlJzogVVJJRXJyb3IucHJvdG90eXBlLFxuXHQnJCAlV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJCAlV2Vha01hcFByb3RvdHlwZSUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLnByb3RvdHlwZSxcblx0JyQgJVdlYWtTZXQlJzogdHlwZW9mIFdlYWtTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1NldCxcblx0JyQgJVdlYWtTZXRQcm90b3R5cGUlJzogdHlwZW9mIFdlYWtTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1NldC5wcm90b3R5cGVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0SW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgdHlwZW9mIGFsbG93TWlzc2luZyAhPT0gJ2Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIGtleSA9ICckICcgKyBuYW1lO1xuXHRpZiAoIShrZXkgaW4gSU5UUklOU0lDUykpIHtcblx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG5cdH1cblxuXHQvLyBpc3RhbmJ1bCBpZ25vcmUgaWYgLy8gaG9wZWZ1bGx5IHRoaXMgaXMgaW1wb3NzaWJsZSB0byB0ZXN0IDotKVxuXHRpZiAodHlwZW9mIElOVFJJTlNJQ1Nba2V5XSA9PT0gJ3VuZGVmaW5lZCcgJiYgIWFsbG93TWlzc2luZykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZXhpc3RzLCBidXQgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGZpbGUgYW4gaXNzdWUhJyk7XG5cdH1cblx0cmV0dXJuIElOVFJJTlNJQ1Nba2V5XTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuL0dldEludHJpbnNpYycpO1xuXG52YXIgJE9iamVjdCA9IEdldEludHJpbnNpYygnJU9iamVjdCUnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYXNzZXJ0UmVjb3JkJyk7XG52YXIgJGlzTmFOID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzRmluaXRlJyk7XG5cbnZhciBzaWduID0gcmVxdWlyZSgnLi9oZWxwZXJzL3NpZ24nKTtcbnZhciBtb2QgPSByZXF1aXJlKCcuL2hlbHBlcnMvbW9kJyk7XG5cbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnaXMtY2FsbGFibGUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJ2VzLXRvLXByaW1pdGl2ZS9lczUnKTtcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG4vLyBodHRwczovL2VzNS5naXRodWIuaW8vI3g5XG52YXIgRVM1ID0ge1xuXHRUb1ByaW1pdGl2ZTogdG9QcmltaXRpdmUsXG5cblx0VG9Cb29sZWFuOiBmdW5jdGlvbiBUb0Jvb2xlYW4odmFsdWUpIHtcblx0XHRyZXR1cm4gISF2YWx1ZTtcblx0fSxcblx0VG9OdW1iZXI6IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdFx0cmV0dXJuICt2YWx1ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbXBsaWNpdC1jb2VyY2lvblxuXHR9LFxuXHRUb0ludGVnZXI6IGZ1bmN0aW9uIFRvSW50ZWdlcih2YWx1ZSkge1xuXHRcdHZhciBudW1iZXIgPSB0aGlzLlRvTnVtYmVyKHZhbHVlKTtcblx0XHRpZiAoJGlzTmFOKG51bWJlcikpIHsgcmV0dXJuIDA7IH1cblx0XHRpZiAobnVtYmVyID09PSAwIHx8ICEkaXNGaW5pdGUobnVtYmVyKSkgeyByZXR1cm4gbnVtYmVyOyB9XG5cdFx0cmV0dXJuIHNpZ24obnVtYmVyKSAqIE1hdGguZmxvb3IoTWF0aC5hYnMobnVtYmVyKSk7XG5cdH0sXG5cdFRvSW50MzI6IGZ1bmN0aW9uIFRvSW50MzIoeCkge1xuXHRcdHJldHVybiB0aGlzLlRvTnVtYmVyKHgpID4+IDA7XG5cdH0sXG5cdFRvVWludDMyOiBmdW5jdGlvbiBUb1VpbnQzMih4KSB7XG5cdFx0cmV0dXJuIHRoaXMuVG9OdW1iZXIoeCkgPj4+IDA7XG5cdH0sXG5cdFRvVWludDE2OiBmdW5jdGlvbiBUb1VpbnQxNih2YWx1ZSkge1xuXHRcdHZhciBudW1iZXIgPSB0aGlzLlRvTnVtYmVyKHZhbHVlKTtcblx0XHRpZiAoJGlzTmFOKG51bWJlcikgfHwgbnVtYmVyID09PSAwIHx8ICEkaXNGaW5pdGUobnVtYmVyKSkgeyByZXR1cm4gMDsgfVxuXHRcdHZhciBwb3NJbnQgPSBzaWduKG51bWJlcikgKiBNYXRoLmZsb29yKE1hdGguYWJzKG51bWJlcikpO1xuXHRcdHJldHVybiBtb2QocG9zSW50LCAweDEwMDAwKTtcblx0fSxcblx0VG9TdHJpbmc6IGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlKSB7XG5cdFx0cmV0dXJuICRTdHJpbmcodmFsdWUpO1xuXHR9LFxuXHRUb09iamVjdDogZnVuY3Rpb24gVG9PYmplY3QodmFsdWUpIHtcblx0XHR0aGlzLkNoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlKTtcblx0XHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG5cdH0sXG5cdENoZWNrT2JqZWN0Q29lcmNpYmxlOiBmdW5jdGlvbiBDaGVja09iamVjdENvZXJjaWJsZSh2YWx1ZSwgb3B0TWVzc2FnZSkge1xuXHRcdC8qIGpzaGludCBlcW51bGw6dHJ1ZSAqL1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihvcHRNZXNzYWdlIHx8ICdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIHZhbHVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXHRJc0NhbGxhYmxlOiBJc0NhbGxhYmxlLFxuXHRTYW1lVmFsdWU6IGZ1bmN0aW9uIFNhbWVWYWx1ZSh4LCB5KSB7XG5cdFx0aWYgKHggPT09IHkpIHsgLy8gMCA9PT0gLTAsIGJ1dCB0aGV5IGFyZSBub3QgaWRlbnRpY2FsLlxuXHRcdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xuXHR9LFxuXG5cdC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOFxuXHRUeXBlOiBmdW5jdGlvbiBUeXBlKHgpIHtcblx0XHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuICdOdWxsJztcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdFx0cmV0dXJuICdVbmRlZmluZWQnO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gJ09iamVjdCc7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRcdHJldHVybiAnTnVtYmVyJztcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRcdHJldHVybiAnQm9vbGVhbic7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdHJldHVybiAnU3RyaW5nJztcblx0XHR9XG5cdH0sXG5cblx0Ly8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdElzUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBJc1Byb3BlcnR5RGVzY3JpcHRvcihEZXNjKSB7XG5cdFx0aWYgKHRoaXMuVHlwZShEZXNjKSAhPT0gJ09iamVjdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dmFyIGFsbG93ZWQgPSB7XG5cdFx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tFbnVtZXJhYmxlXV0nOiB0cnVlLFxuXHRcdFx0J1tbR2V0XV0nOiB0cnVlLFxuXHRcdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdFx0J1tbVmFsdWVdXSc6IHRydWUsXG5cdFx0XHQnW1tXcml0YWJsZV1dJzogdHJ1ZVxuXHRcdH07XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gRGVzYykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cdFx0XHRpZiAoaGFzKERlc2MsIGtleSkgJiYgIWFsbG93ZWRba2V5XSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIGlzRGF0YSA9IGhhcyhEZXNjLCAnW1tWYWx1ZV1dJyk7XG5cdFx0dmFyIElzQWNjZXNzb3IgPSBoYXMoRGVzYywgJ1tbR2V0XV0nKSB8fCBoYXMoRGVzYywgJ1tbU2V0XV0nKTtcblx0XHRpZiAoaXNEYXRhICYmIElzQWNjZXNzb3IpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdQcm9wZXJ0eSBEZXNjcmlwdG9ycyBtYXkgbm90IGJlIGJvdGggYWNjZXNzb3IgYW5kIGRhdGEgZGVzY3JpcHRvcnMnKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Ly8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTguMTAuMVxuXHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRcdGlmICh0eXBlb2YgRGVzYyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRhc3NlcnRSZWNvcmQodGhpcywgJ1Byb3BlcnR5IERlc2NyaXB0b3InLCAnRGVzYycsIERlc2MpO1xuXG5cdFx0aWYgKCFoYXMoRGVzYywgJ1tbR2V0XV0nKSAmJiAhaGFzKERlc2MsICdbW1NldF1dJykpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOC4xMC4yXG5cdElzRGF0YURlc2NyaXB0b3I6IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRcdGlmICh0eXBlb2YgRGVzYyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRhc3NlcnRSZWNvcmQodGhpcywgJ1Byb3BlcnR5IERlc2NyaXB0b3InLCAnRGVzYycsIERlc2MpO1xuXG5cdFx0aWYgKCFoYXMoRGVzYywgJ1tbVmFsdWVdXScpICYmICFoYXMoRGVzYywgJ1tbV3JpdGFibGVdXScpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Ly8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTguMTAuM1xuXHRJc0dlbmVyaWNEZXNjcmlwdG9yOiBmdW5jdGlvbiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIHtcblx0XHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0YXNzZXJ0UmVjb3JkKHRoaXMsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRcdGlmICghdGhpcy5Jc0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSAmJiAhdGhpcy5Jc0RhdGFEZXNjcmlwdG9yKERlc2MpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0Ly8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTguMTAuNFxuXHRGcm9tUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0XHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gRGVzYztcblx0XHR9XG5cblx0XHRhc3NlcnRSZWNvcmQodGhpcywgJ1Byb3BlcnR5IERlc2NyaXB0b3InLCAnRGVzYycsIERlc2MpO1xuXG5cdFx0aWYgKHRoaXMuSXNEYXRhRGVzY3JpcHRvcihEZXNjKSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dmFsdWU6IERlc2NbJ1tbVmFsdWVdXSddLFxuXHRcdFx0XHR3cml0YWJsZTogISFEZXNjWydbW1dyaXRhYmxlXV0nXSxcblx0XHRcdFx0ZW51bWVyYWJsZTogISFEZXNjWydbW0VudW1lcmFibGVdXSddLFxuXHRcdFx0XHRjb25maWd1cmFibGU6ICEhRGVzY1snW1tDb25maWd1cmFibGVdXSddXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSBpZiAodGhpcy5Jc0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Z2V0OiBEZXNjWydbW0dldF1dJ10sXG5cdFx0XHRcdHNldDogRGVzY1snW1tTZXRdXSddLFxuXHRcdFx0XHRlbnVtZXJhYmxlOiAhIURlc2NbJ1tbRW51bWVyYWJsZV1dJ10sXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogISFEZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ11cblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdGcm9tUHJvcGVydHlEZXNjcmlwdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggYSBmdWxseSBwb3B1bGF0ZWQgUHJvcGVydHkgRGVzY3JpcHRvcicpO1xuXHRcdH1cblx0fSxcblxuXHQvLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOC4xMC41XG5cdFRvUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0XHRpZiAodGhpcy5UeXBlKE9iaikgIT09ICdPYmplY3QnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2MgPSB7fTtcblx0XHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdFx0ZGVzY1snW1tFbnVtZXJhYmxlXV0nXSA9IHRoaXMuVG9Cb29sZWFuKE9iai5lbnVtZXJhYmxlKTtcblx0XHR9XG5cdFx0aWYgKGhhcyhPYmosICdjb25maWd1cmFibGUnKSkge1xuXHRcdFx0ZGVzY1snW1tDb25maWd1cmFibGVdXSddID0gdGhpcy5Ub0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdFx0fVxuXHRcdGlmIChoYXMoT2JqLCAndmFsdWUnKSkge1xuXHRcdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdFx0fVxuXHRcdGlmIChoYXMoT2JqLCAnd3JpdGFibGUnKSkge1xuXHRcdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSB0aGlzLlRvQm9vbGVhbihPYmoud3JpdGFibGUpO1xuXHRcdH1cblx0XHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0XHR2YXIgZ2V0dGVyID0gT2JqLmdldDtcblx0XHRcdGlmICh0eXBlb2YgZ2V0dGVyICE9PSAndW5kZWZpbmVkJyAmJiAhdGhpcy5Jc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignZ2V0dGVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuXHRcdFx0fVxuXHRcdFx0ZGVzY1snW1tHZXRdXSddID0gZ2V0dGVyO1xuXHRcdH1cblx0XHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0XHR2YXIgc2V0dGVyID0gT2JqLnNldDtcblx0XHRcdGlmICh0eXBlb2Ygc2V0dGVyICE9PSAndW5kZWZpbmVkJyAmJiAhdGhpcy5Jc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ3NldHRlciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblx0XHRcdH1cblx0XHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0XHR9XG5cblx0XHRpZiAoKGhhcyhkZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhkZXNjLCAnW1tTZXRdXScpKSAmJiAoaGFzKGRlc2MsICdbW1ZhbHVlXV0nKSB8fCBoYXMoZGVzYywgJ1tbV3JpdGFibGVdXScpKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdFx0fVxuXHRcdHJldHVybiBkZXNjO1xuXHR9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEVTNTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJy4uL0dldEludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcbnZhciAkU3ludGF4RXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVTeW50YXhFcnJvciUnKTtcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgcHJlZGljYXRlcyA9IHtcbiAgLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG4gICdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoRVMsIERlc2MpIHtcbiAgICBpZiAoRVMuVHlwZShEZXNjKSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGFsbG93ZWQgPSB7XG4gICAgICAnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG4gICAgICAnW1tFbnVtZXJhYmxlXV0nOiB0cnVlLFxuICAgICAgJ1tbR2V0XV0nOiB0cnVlLFxuICAgICAgJ1tbU2V0XV0nOiB0cnVlLFxuICAgICAgJ1tbVmFsdWVdXSc6IHRydWUsXG4gICAgICAnW1tXcml0YWJsZV1dJzogdHJ1ZVxuICAgIH07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gRGVzYykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICBpZiAoaGFzKERlc2MsIGtleSkgJiYgIWFsbG93ZWRba2V5XSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGlzRGF0YSA9IGhhcyhEZXNjLCAnW1tWYWx1ZV1dJyk7XG4gICAgdmFyIElzQWNjZXNzb3IgPSBoYXMoRGVzYywgJ1tbR2V0XV0nKSB8fCBoYXMoRGVzYywgJ1tbU2V0XV0nKTtcbiAgICBpZiAoaXNEYXRhICYmIElzQWNjZXNzb3IpIHtcbiAgICAgIHRocm93IG5ldyAkVHlwZUVycm9yKCdQcm9wZXJ0eSBEZXNjcmlwdG9ycyBtYXkgbm90IGJlIGJvdGggYWNjZXNzb3IgYW5kIGRhdGEgZGVzY3JpcHRvcnMnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYXNzZXJ0UmVjb3JkKEVTLCByZWNvcmRUeXBlLCBhcmd1bWVudE5hbWUsIHZhbHVlKSB7XG4gIHZhciBwcmVkaWNhdGUgPSBwcmVkaWNhdGVzW3JlY29yZFR5cGVdO1xuICBpZiAodHlwZW9mIHByZWRpY2F0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ3Vua25vd24gcmVjb3JkIHR5cGU6ICcgKyByZWNvcmRUeXBlKTtcbiAgfVxuICBpZiAoIXByZWRpY2F0ZShFUywgdmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuICB9XG4gIGNvbnNvbGUubG9nKHByZWRpY2F0ZShFUywgdmFsdWUpLCB2YWx1ZSk7XG59O1xuIiwidmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiIsIm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtb2QobnVtYmVyLCBtb2R1bG8pIHtcblx0dmFyIHJlbWFpbiA9IG51bWJlciAlIG1vZHVsbztcblx0cmV0dXJuIE1hdGguZmxvb3IocmVtYWluID49IDAgPyByZW1haW4gOiByZW1haW4gKyBtb2R1bG8pO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2lnbihudW1iZXIpIHtcblx0cmV0dXJuIG51bWJlciA+PSAwID8gMSA6IC0xO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG5cbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnaXMtY2FsbGFibGUnKTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOC4xMi44XG52YXIgRVM1aW50ZXJuYWxTbG90cyA9IHtcblx0J1tbRGVmYXVsdFZhbHVlXV0nOiBmdW5jdGlvbiAoTykge1xuXHRcdHZhciBhY3R1YWxIaW50O1xuXHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdFx0YWN0dWFsSGludCA9IGFyZ3VtZW50c1sxXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YWN0dWFsSGludCA9IHRvU3RyLmNhbGwoTykgPT09ICdbb2JqZWN0IERhdGVdJyA/IFN0cmluZyA6IE51bWJlcjtcblx0XHR9XG5cblx0XHRpZiAoYWN0dWFsSGludCA9PT0gU3RyaW5nIHx8IGFjdHVhbEhpbnQgPT09IE51bWJlcikge1xuXHRcdFx0dmFyIG1ldGhvZHMgPSBhY3R1YWxIaW50ID09PSBTdHJpbmcgPyBbJ3RvU3RyaW5nJywgJ3ZhbHVlT2YnXSA6IFsndmFsdWVPZicsICd0b1N0cmluZyddO1xuXHRcdFx0dmFyIHZhbHVlLCBpO1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0aWYgKGlzQ2FsbGFibGUoT1ttZXRob2RzW2ldXSkpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IE9bbWV0aG9kc1tpXV0oKTtcblx0XHRcdFx0XHRpZiAoaXNQcmltaXRpdmUodmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgW1tEZWZhdWx0VmFsdWVdXSBoaW50IHN1cHBsaWVkJyk7XG5cdH1cbn07XG5cbi8vIGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTkuMVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1ByaW1pdGl2ZShpbnB1dCkge1xuXHRpZiAoaXNQcmltaXRpdmUoaW5wdXQpKSB7XG5cdFx0cmV0dXJuIGlucHV0O1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiBFUzVpbnRlcm5hbFNsb3RzWydbW0RlZmF1bHRWYWx1ZV1dJ10oaW5wdXQsIGFyZ3VtZW50c1sxXSk7XG5cdH1cblx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKTtcbn07XG4iLCJcbi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG52YXIgZXZlbnRzID0gcmVxdWlyZSgnY29tcG9uZW50LWV2ZW50Jyk7XG52YXIgZGVsZWdhdGUgPSByZXF1aXJlKCdkZWxlZ2F0ZS1ldmVudHMnKTtcbnZhciBmb3JjZUNhcHR1cmVFdmVudHMgPSBbJ2ZvY3VzJywgJ2JsdXInXTtcblxuLyoqXG4gKiBFeHBvc2UgYEV2ZW50c2AuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBFdmVudHM7XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhbiBgRXZlbnRzYCB3aXRoIHRoZSBnaXZlblxuICogYGVsYCBvYmplY3Qgd2hpY2ggZXZlbnRzIHdpbGwgYmUgYm91bmQgdG8sXG4gKiBhbmQgdGhlIGBvYmpgIHdoaWNoIHdpbGwgcmVjZWl2ZSBtZXRob2QgY2FsbHMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGVsXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIEV2ZW50cyhlbCwgb2JqKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBFdmVudHMpKSByZXR1cm4gbmV3IEV2ZW50cyhlbCwgb2JqKTtcbiAgaWYgKCFlbCkgdGhyb3cgbmV3IEVycm9yKCdlbGVtZW50IHJlcXVpcmVkJyk7XG4gIGlmICghb2JqKSB0aHJvdyBuZXcgRXJyb3IoJ29iamVjdCByZXF1aXJlZCcpO1xuICB0aGlzLmVsID0gZWw7XG4gIHRoaXMub2JqID0gb2JqO1xuICB0aGlzLl9ldmVudHMgPSB7fTtcbn1cblxuLyoqXG4gKiBTdWJzY3JpcHRpb24gaGVscGVyLlxuICovXG5cbkV2ZW50cy5wcm90b3R5cGUuc3ViID0gZnVuY3Rpb24oZXZlbnQsIG1ldGhvZCwgY2Ipe1xuICB0aGlzLl9ldmVudHNbZXZlbnRdID0gdGhpcy5fZXZlbnRzW2V2ZW50XSB8fCB7fTtcbiAgdGhpcy5fZXZlbnRzW2V2ZW50XVttZXRob2RdID0gY2I7XG59O1xuXG4vKipcbiAqIEJpbmQgdG8gYGV2ZW50YCB3aXRoIG9wdGlvbmFsIGBtZXRob2RgIG5hbWUuXG4gKiBXaGVuIGBtZXRob2RgIGlzIHVuZGVmaW5lZCBpdCBiZWNvbWVzIGBldmVudGBcbiAqIHdpdGggdGhlIFwib25cIiBwcmVmaXguXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogIERpcmVjdCBldmVudCBoYW5kbGluZzpcbiAqXG4gKiAgICBldmVudHMuYmluZCgnY2xpY2snKSAvLyBpbXBsaWVzIFwib25jbGlja1wiXG4gKiAgICBldmVudHMuYmluZCgnY2xpY2snLCAncmVtb3ZlJylcbiAqICAgIGV2ZW50cy5iaW5kKCdjbGljaycsICdzb3J0JywgJ2FzYycpXG4gKlxuICogIERlbGVnYXRlZCBldmVudCBoYW5kbGluZzpcbiAqXG4gKiAgICBldmVudHMuYmluZCgnY2xpY2sgbGkgPiBhJylcbiAqICAgIGV2ZW50cy5iaW5kKCdjbGljayBsaSA+IGEnLCAncmVtb3ZlJylcbiAqICAgIGV2ZW50cy5iaW5kKCdjbGljayBhLnNvcnQtYXNjZW5kaW5nJywgJ3NvcnQnLCAnYXNjJylcbiAqICAgIGV2ZW50cy5iaW5kKCdjbGljayBhLnNvcnQtZGVzY2VuZGluZycsICdzb3J0JywgJ2Rlc2MnKVxuICpcbiAqICBNdWx0aXBsZSBldmVudHMgaGFuZGxpbmc6XG4gKlxuICogICAgZXZlbnRzLmJpbmQoe1xuICogICAgICAnY2xpY2sgLnJlbW92ZSc6ICdyZW1vdmUnLFxuICogICAgICAnY2xpY2sgLmFkZCc6ICdhZGQnXG4gKiAgICB9KTtcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xvYmplY3R9IC0gb2JqZWN0IGlzIHVzZWQgZm9yIG11bHRpcGxlIGJpbmRpbmcsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgZm9yIHNpbmdsZSBldmVudCBiaW5kaW5nXG4gKiBAcGFyYW0ge1N0cmluZ3xmdW5jdGlvbn0gW2FyZzJdIC0gbWV0aG9kIHRvIGNhbGwgKG9wdGlvbmFsKVxuICogQHBhcmFtIHsqfSBbYXJnM10gLSBkYXRhIGZvciBzaW5nbGUgZXZlbnQgYmluZGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuRXZlbnRzLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oYXJnMSwgYXJnMil7XG4gIHZhciBiaW5kRXZlbnQgPSBmdW5jdGlvbihldmVudCwgbWV0aG9kKSB7XG4gICAgdmFyIGUgPSBwYXJzZShldmVudCk7XG4gICAgdmFyIGVsID0gdGhpcy5lbDtcbiAgICB2YXIgb2JqID0gdGhpcy5vYmo7XG4gICAgdmFyIG5hbWUgPSBlLm5hbWU7XG4gICAgdmFyIG1ldGhvZCA9IG1ldGhvZCB8fCAnb24nICsgbmFtZTtcbiAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcblxuICAgIC8vIGNhbGxiYWNrXG4gICAgZnVuY3Rpb24gY2IoKXtcbiAgICAgIHZhciBhID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpLmNvbmNhdChhcmdzKTtcblxuICAgICAgaWYgKHR5cGVvZiBtZXRob2QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBtZXRob2QuYXBwbHkob2JqLCBhKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghb2JqW21ldGhvZF0pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWV0aG9kICsgJyBtZXRob2QgaXMgbm90IGRlZmluZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JqW21ldGhvZF0uYXBwbHkob2JqLCBhKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBiaW5kXG4gICAgaWYgKGUuc2VsZWN0b3IpIHtcbiAgICAgIGNiID0gZGVsZWdhdGUuYmluZChlbCwgZS5zZWxlY3RvciwgbmFtZSwgY2IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBldmVudHMuYmluZChlbCwgbmFtZSwgY2IpO1xuICAgIH1cblxuICAgIC8vIHN1YnNjcmlwdGlvbiBmb3IgdW5iaW5kaW5nXG4gICAgdGhpcy5zdWIobmFtZSwgbWV0aG9kLCBjYik7XG5cbiAgICByZXR1cm4gY2I7XG4gIH07XG5cbiAgaWYgKHR5cGVvZiBhcmcxID09ICdzdHJpbmcnKSB7XG4gICAgYmluZEV2ZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH0gZWxzZSB7XG4gICAgZm9yKHZhciBrZXkgaW4gYXJnMSkge1xuICAgICAgaWYgKGFyZzEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBiaW5kRXZlbnQuY2FsbCh0aGlzLCBrZXksIGFyZzFba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIFVuYmluZCBhIHNpbmdsZSBiaW5kaW5nLCBhbGwgYmluZGluZ3MgZm9yIGBldmVudGAsXG4gKiBvciBhbGwgYmluZGluZ3Mgd2l0aGluIHRoZSBtYW5hZ2VyLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICBVbmJpbmQgZGlyZWN0IGhhbmRsZXJzOlxuICpcbiAqICAgICBldmVudHMudW5iaW5kKCdjbGljaycsICdyZW1vdmUnKVxuICogICAgIGV2ZW50cy51bmJpbmQoJ2NsaWNrJylcbiAqICAgICBldmVudHMudW5iaW5kKClcbiAqXG4gKiBVbmJpbmQgZGVsZWdhdGUgaGFuZGxlcnM6XG4gKlxuICogICAgIGV2ZW50cy51bmJpbmQoJ2NsaWNrJywgJ3JlbW92ZScpXG4gKiAgICAgZXZlbnRzLnVuYmluZCgnY2xpY2snKVxuICogICAgIGV2ZW50cy51bmJpbmQoKVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBbZXZlbnRdXG4gKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gW21ldGhvZF1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuRXZlbnRzLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbihldmVudCwgbWV0aG9kKXtcbiAgaWYgKDAgPT0gYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRoaXMudW5iaW5kQWxsKCk7XG4gIGlmICgxID09IGFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB0aGlzLnVuYmluZEFsbE9mKGV2ZW50KTtcblxuICAvLyBubyBiaW5kaW5ncyBmb3IgdGhpcyBldmVudFxuICB2YXIgYmluZGluZ3MgPSB0aGlzLl9ldmVudHNbZXZlbnRdO1xuICB2YXIgY2FwdHVyZSA9IChmb3JjZUNhcHR1cmVFdmVudHMuaW5kZXhPZihldmVudCkgIT09IC0xKTtcbiAgaWYgKCFiaW5kaW5ncykgcmV0dXJuO1xuXG4gIC8vIG5vIGJpbmRpbmdzIGZvciB0aGlzIG1ldGhvZFxuICB2YXIgY2IgPSBiaW5kaW5nc1ttZXRob2RdO1xuICBpZiAoIWNiKSByZXR1cm47XG5cbiAgZXZlbnRzLnVuYmluZCh0aGlzLmVsLCBldmVudCwgY2IsIGNhcHR1cmUpO1xufTtcblxuLyoqXG4gKiBVbmJpbmQgYWxsIGV2ZW50cy5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5FdmVudHMucHJvdG90eXBlLnVuYmluZEFsbCA9IGZ1bmN0aW9uKCl7XG4gIGZvciAodmFyIGV2ZW50IGluIHRoaXMuX2V2ZW50cykge1xuICAgIHRoaXMudW5iaW5kQWxsT2YoZXZlbnQpO1xuICB9XG59O1xuXG4vKipcbiAqIFVuYmluZCBhbGwgZXZlbnRzIGZvciBgZXZlbnRgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuRXZlbnRzLnByb3RvdHlwZS51bmJpbmRBbGxPZiA9IGZ1bmN0aW9uKGV2ZW50KXtcbiAgdmFyIGJpbmRpbmdzID0gdGhpcy5fZXZlbnRzW2V2ZW50XTtcbiAgaWYgKCFiaW5kaW5ncykgcmV0dXJuO1xuXG4gIGZvciAodmFyIG1ldGhvZCBpbiBiaW5kaW5ncykge1xuICAgIHRoaXMudW5iaW5kKGV2ZW50LCBtZXRob2QpO1xuICB9XG59O1xuXG4vKipcbiAqIFBhcnNlIGBldmVudGAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZShldmVudCkge1xuICB2YXIgcGFydHMgPSBldmVudC5zcGxpdCgvICsvKTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBwYXJ0cy5zaGlmdCgpLFxuICAgIHNlbGVjdG9yOiBwYXJ0cy5qb2luKCcgJylcbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgZm9yRWFjaEFycmF5ID0gZnVuY3Rpb24gZm9yRWFjaEFycmF5KGFycmF5LCBpdGVyYXRvciwgcmVjZWl2ZXIpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoYXJyYXksIGkpKSB7XG4gICAgICAgICAgICBpZiAocmVjZWl2ZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKGFycmF5W2ldLCBpLCBhcnJheSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwocmVjZWl2ZXIsIGFycmF5W2ldLCBpLCBhcnJheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG52YXIgZm9yRWFjaFN0cmluZyA9IGZ1bmN0aW9uIGZvckVhY2hTdHJpbmcoc3RyaW5nLCBpdGVyYXRvciwgcmVjZWl2ZXIpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gc3RyaW5nLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIC8vIG5vIHN1Y2ggdGhpbmcgYXMgYSBzcGFyc2Ugc3RyaW5nLlxuICAgICAgICBpZiAocmVjZWl2ZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgaXRlcmF0b3Ioc3RyaW5nLmNoYXJBdChpKSwgaSwgc3RyaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwocmVjZWl2ZXIsIHN0cmluZy5jaGFyQXQoaSksIGksIHN0cmluZyk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG52YXIgZm9yRWFjaE9iamVjdCA9IGZ1bmN0aW9uIGZvckVhY2hPYmplY3Qob2JqZWN0LCBpdGVyYXRvciwgcmVjZWl2ZXIpIHtcbiAgICBmb3IgKHZhciBrIGluIG9iamVjdCkge1xuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGspKSB7XG4gICAgICAgICAgICBpZiAocmVjZWl2ZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrXSwgaywgb2JqZWN0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IuY2FsbChyZWNlaXZlciwgb2JqZWN0W2tdLCBrLCBvYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxudmFyIGZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGxpc3QsIGl0ZXJhdG9yLCB0aGlzQXJnKSB7XG4gICAgaWYgKCFpc0NhbGxhYmxlKGl0ZXJhdG9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpdGVyYXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICB2YXIgcmVjZWl2ZXI7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMykge1xuICAgICAgICByZWNlaXZlciA9IHRoaXNBcmc7XG4gICAgfVxuXG4gICAgaWYgKHRvU3RyLmNhbGwobGlzdCkgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgICAgZm9yRWFjaEFycmF5KGxpc3QsIGl0ZXJhdG9yLCByZWNlaXZlcik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbGlzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZm9yRWFjaFN0cmluZyhsaXN0LCBpdGVyYXRvciwgcmVjZWl2ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvckVhY2hPYmplY3QobGlzdCwgaXRlcmF0b3IsIHJlY2VpdmVyKTtcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZvckVhY2g7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBuby1pbnZhbGlkLXRoaXM6IDEgKi9cblxudmFyIEVSUk9SX01FU1NBR0UgPSAnRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0aWJsZSAnO1xudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jVHlwZSA9ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmluZCh0aGF0KSB7XG4gICAgdmFyIHRhcmdldCA9IHRoaXM7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09ICdmdW5jdGlvbicgfHwgdG9TdHIuY2FsbCh0YXJnZXQpICE9PSBmdW5jVHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUk9SX01FU1NBR0UgKyB0YXJnZXQpO1xuICAgIH1cbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblxuICAgIHZhciBib3VuZDtcbiAgICB2YXIgYmluZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIGJvdW5kKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChPYmplY3QocmVzdWx0KSA9PT0gcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseShcbiAgICAgICAgICAgICAgICB0aGF0LFxuICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGJvdW5kTGVuZ3RoID0gTWF0aC5tYXgoMCwgdGFyZ2V0Lmxlbmd0aCAtIGFyZ3MubGVuZ3RoKTtcbiAgICB2YXIgYm91bmRBcmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3VuZExlbmd0aDsgaSsrKSB7XG4gICAgICAgIGJvdW5kQXJncy5wdXNoKCckJyArIGkpO1xuICAgIH1cblxuICAgIGJvdW5kID0gRnVuY3Rpb24oJ2JpbmRlcicsICdyZXR1cm4gZnVuY3Rpb24gKCcgKyBib3VuZEFyZ3Muam9pbignLCcpICsgJyl7IHJldHVybiBiaW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOyB9JykoYmluZGVyKTtcblxuICAgIGlmICh0YXJnZXQucHJvdG90eXBlKSB7XG4gICAgICAgIHZhciBFbXB0eSA9IGZ1bmN0aW9uIEVtcHR5KCkge307XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7XG4gICAgICAgIGJvdW5kLnByb3RvdHlwZSA9IG5ldyBFbXB0eSgpO1xuICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBib3VuZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiIsInZhciB3aW47XG5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgd2luID0gd2luZG93O1xufSBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgd2luID0gZ2xvYmFsO1xufSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIil7XG4gICAgd2luID0gc2VsZjtcbn0gZWxzZSB7XG4gICAgd2luID0ge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd2luO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBmblRvU3RyID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgY29uc3RydWN0b3JSZWdleCA9IC9eXFxzKmNsYXNzXFxiLztcbnZhciBpc0VTNkNsYXNzRm4gPSBmdW5jdGlvbiBpc0VTNkNsYXNzRnVuY3Rpb24odmFsdWUpIHtcblx0dHJ5IHtcblx0XHR2YXIgZm5TdHIgPSBmblRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBjb25zdHJ1Y3RvclJlZ2V4LnRlc3QoZm5TdHIpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlOyAvLyBub3QgYSBmdW5jdGlvblxuXHR9XG59O1xuXG52YXIgdHJ5RnVuY3Rpb25PYmplY3QgPSBmdW5jdGlvbiB0cnlGdW5jdGlvblRvU3RyKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0aWYgKGlzRVM2Q2xhc3NGbih2YWx1ZSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0Zm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZm5DbGFzcyA9ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG52YXIgZ2VuQ2xhc3MgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLnRvU3RyaW5nVGFnID09PSAnc3ltYm9sJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0NhbGxhYmxlKHZhbHVlKSB7XG5cdGlmICghdmFsdWUpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdGlmIChoYXNUb1N0cmluZ1RhZykgeyByZXR1cm4gdHJ5RnVuY3Rpb25PYmplY3QodmFsdWUpOyB9XG5cdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHR2YXIgc3RyQ2xhc3MgPSB0b1N0ci5jYWxsKHZhbHVlKTtcblx0cmV0dXJuIHN0ckNsYXNzID09PSBmbkNsYXNzIHx8IHN0ckNsYXNzID09PSBnZW5DbGFzcztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGlzRnVuY3Rpb25cblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uIChmbikge1xuICB2YXIgc3RyaW5nID0gdG9TdHJpbmcuY2FsbChmbilcbiAgcmV0dXJuIHN0cmluZyA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJyB8fFxuICAgICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgc3RyaW5nICE9PSAnW29iamVjdCBSZWdFeHBdJykgfHxcbiAgICAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgLy8gSUU4IGFuZCBiZWxvd1xuICAgICAoZm4gPT09IHdpbmRvdy5zZXRUaW1lb3V0IHx8XG4gICAgICBmbiA9PT0gd2luZG93LmFsZXJ0IHx8XG4gICAgICBmbiA9PT0gd2luZG93LmNvbmZpcm0gfHxcbiAgICAgIGZuID09PSB3aW5kb3cucHJvbXB0KSlcbn07XG4iLCIvKiFcbiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjMuNC4xXG4gKiBodHRwczovL2pxdWVyeS5jb20vXG4gKlxuICogSW5jbHVkZXMgU2l6emxlLmpzXG4gKiBodHRwczovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHBzOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogRGF0ZTogMjAxOS0wNS0wMVQyMTowNFpcbiAqL1xuKCBmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdGlmICggdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyBGb3IgQ29tbW9uSlMgYW5kIENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHdoZXJlIGEgcHJvcGVyIGB3aW5kb3dgXG5cdFx0Ly8gaXMgcHJlc2VudCwgZXhlY3V0ZSB0aGUgZmFjdG9yeSBhbmQgZ2V0IGpRdWVyeS5cblx0XHQvLyBGb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IGhhdmUgYSBgd2luZG93YCB3aXRoIGEgYGRvY3VtZW50YFxuXHRcdC8vIChzdWNoIGFzIE5vZGUuanMpLCBleHBvc2UgYSBmYWN0b3J5IGFzIG1vZHVsZS5leHBvcnRzLlxuXHRcdC8vIFRoaXMgYWNjZW50dWF0ZXMgdGhlIG5lZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHJlYWwgYHdpbmRvd2AuXG5cdFx0Ly8gZS5nLiB2YXIgalF1ZXJ5ID0gcmVxdWlyZShcImpxdWVyeVwiKSh3aW5kb3cpO1xuXHRcdC8vIFNlZSB0aWNrZXQgIzE0NTQ5IGZvciBtb3JlIGluZm8uXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgP1xuXHRcdFx0ZmFjdG9yeSggZ2xvYmFsLCB0cnVlICkgOlxuXHRcdFx0ZnVuY3Rpb24oIHcgKSB7XG5cdFx0XHRcdGlmICggIXcuZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCBcImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnRcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWN0b3J5KCB3ICk7XG5cdFx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGZhY3RvcnkoIGdsb2JhbCApO1xuXHR9XG5cbi8vIFBhc3MgdGhpcyBpZiB3aW5kb3cgaXMgbm90IGRlZmluZWQgeWV0XG59ICkoIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiggd2luZG93LCBub0dsb2JhbCApIHtcblxuLy8gRWRnZSA8PSAxMiAtIDEzKywgRmlyZWZveCA8PTE4IC0gNDUrLCBJRSAxMCAtIDExLCBTYWZhcmkgNS4xIC0gOSssIGlPUyA2IC0gOS4xXG4vLyB0aHJvdyBleGNlcHRpb25zIHdoZW4gbm9uLXN0cmljdCBjb2RlIChlLmcuLCBBU1AuTkVUIDQuNSkgYWNjZXNzZXMgc3RyaWN0IG1vZGVcbi8vIGFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyICh0cmFjLTEzMzM1KS4gQnV0IGFzIG9mIGpRdWVyeSAzLjAgKDIwMTYpLCBzdHJpY3QgbW9kZSBzaG91bGQgYmUgY29tbW9uXG4vLyBlbm91Z2ggdGhhdCBhbGwgc3VjaCBhdHRlbXB0cyBhcmUgZ3VhcmRlZCBpbiBhIHRyeSBibG9jay5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgYXJyID0gW107XG5cbnZhciBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcblxudmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuXG52YXIgc2xpY2UgPSBhcnIuc2xpY2U7XG5cbnZhciBjb25jYXQgPSBhcnIuY29uY2F0O1xuXG52YXIgcHVzaCA9IGFyci5wdXNoO1xuXG52YXIgaW5kZXhPZiA9IGFyci5pbmRleE9mO1xuXG52YXIgY2xhc3MydHlwZSA9IHt9O1xuXG52YXIgdG9TdHJpbmcgPSBjbGFzczJ0eXBlLnRvU3RyaW5nO1xuXG52YXIgaGFzT3duID0gY2xhc3MydHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIGZuVG9TdHJpbmcgPSBoYXNPd24udG9TdHJpbmc7XG5cbnZhciBPYmplY3RGdW5jdGlvblN0cmluZyA9IGZuVG9TdHJpbmcuY2FsbCggT2JqZWN0ICk7XG5cbnZhciBzdXBwb3J0ID0ge307XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gaXNGdW5jdGlvbiggb2JqICkge1xuXG4gICAgICAvLyBTdXBwb3J0OiBDaHJvbWUgPD01NywgRmlyZWZveCA8PTUyXG4gICAgICAvLyBJbiBzb21lIGJyb3dzZXJzLCB0eXBlb2YgcmV0dXJucyBcImZ1bmN0aW9uXCIgZm9yIEhUTUwgPG9iamVjdD4gZWxlbWVudHNcbiAgICAgIC8vIChpLmUuLCBgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwib2JqZWN0XCIgKSA9PT0gXCJmdW5jdGlvblwiYCkuXG4gICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGNsYXNzaWZ5ICphbnkqIERPTSBub2RlIGFzIGEgZnVuY3Rpb24uXG4gICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBvYmoubm9kZVR5cGUgIT09IFwibnVtYmVyXCI7XG4gIH07XG5cblxudmFyIGlzV2luZG93ID0gZnVuY3Rpb24gaXNXaW5kb3coIG9iaiApIHtcblx0XHRyZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqID09PSBvYmoud2luZG93O1xuXHR9O1xuXG5cblxuXG5cdHZhciBwcmVzZXJ2ZWRTY3JpcHRBdHRyaWJ1dGVzID0ge1xuXHRcdHR5cGU6IHRydWUsXG5cdFx0c3JjOiB0cnVlLFxuXHRcdG5vbmNlOiB0cnVlLFxuXHRcdG5vTW9kdWxlOiB0cnVlXG5cdH07XG5cblx0ZnVuY3Rpb24gRE9NRXZhbCggY29kZSwgbm9kZSwgZG9jICkge1xuXHRcdGRvYyA9IGRvYyB8fCBkb2N1bWVudDtcblxuXHRcdHZhciBpLCB2YWwsXG5cdFx0XHRzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudCggXCJzY3JpcHRcIiApO1xuXG5cdFx0c2NyaXB0LnRleHQgPSBjb2RlO1xuXHRcdGlmICggbm9kZSApIHtcblx0XHRcdGZvciAoIGkgaW4gcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDY0KywgRWRnZSAxOCtcblx0XHRcdFx0Ly8gU29tZSBicm93c2VycyBkb24ndCBzdXBwb3J0IHRoZSBcIm5vbmNlXCIgcHJvcGVydHkgb24gc2NyaXB0cy5cblx0XHRcdFx0Ly8gT24gdGhlIG90aGVyIGhhbmQsIGp1c3QgdXNpbmcgYGdldEF0dHJpYnV0ZWAgaXMgbm90IGVub3VnaCBhc1xuXHRcdFx0XHQvLyB0aGUgYG5vbmNlYCBhdHRyaWJ1dGUgaXMgcmVzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIHdoZW5ldmVyIGl0XG5cdFx0XHRcdC8vIGJlY29tZXMgYnJvd3NpbmctY29udGV4dCBjb25uZWN0ZWQuXG5cdFx0XHRcdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2h0bWwvaXNzdWVzLzIzNjlcblx0XHRcdFx0Ly8gU2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI25vbmNlLWF0dHJpYnV0ZXNcblx0XHRcdFx0Ly8gVGhlIGBub2RlLmdldEF0dHJpYnV0ZWAgY2hlY2sgd2FzIGFkZGVkIGZvciB0aGUgc2FrZSBvZlxuXHRcdFx0XHQvLyBgalF1ZXJ5Lmdsb2JhbEV2YWxgIHNvIHRoYXQgaXQgY2FuIGZha2UgYSBub25jZS1jb250YWluaW5nIG5vZGVcblx0XHRcdFx0Ly8gdmlhIGFuIG9iamVjdC5cblx0XHRcdFx0dmFsID0gbm9kZVsgaSBdIHx8IG5vZGUuZ2V0QXR0cmlidXRlICYmIG5vZGUuZ2V0QXR0cmlidXRlKCBpICk7XG5cdFx0XHRcdGlmICggdmFsICkge1xuXHRcdFx0XHRcdHNjcmlwdC5zZXRBdHRyaWJ1dGUoIGksIHZhbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGRvYy5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHQgKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTtcblx0fVxuXG5cbmZ1bmN0aW9uIHRvVHlwZSggb2JqICkge1xuXHRpZiAoIG9iaiA9PSBudWxsICkge1xuXHRcdHJldHVybiBvYmogKyBcIlwiO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5IChmdW5jdGlvbmlzaCBSZWdFeHApXG5cdHJldHVybiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiA/XG5cdFx0Y2xhc3MydHlwZVsgdG9TdHJpbmcuY2FsbCggb2JqICkgXSB8fCBcIm9iamVjdFwiIDpcblx0XHR0eXBlb2Ygb2JqO1xufVxuLyogZ2xvYmFsIFN5bWJvbCAqL1xuLy8gRGVmaW5pbmcgdGhpcyBnbG9iYWwgaW4gLmVzbGludHJjLmpzb24gd291bGQgY3JlYXRlIGEgZGFuZ2VyIG9mIHVzaW5nIHRoZSBnbG9iYWxcbi8vIHVuZ3VhcmRlZCBpbiBhbm90aGVyIHBsYWNlLCBpdCBzZWVtcyBzYWZlciB0byBkZWZpbmUgZ2xvYmFsIG9ubHkgZm9yIHRoaXMgbW9kdWxlXG5cblxuXG52YXJcblx0dmVyc2lvbiA9IFwiMy40LjFcIixcblxuXHQvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeVxuXHRqUXVlcnkgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cblx0XHQvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCdcblx0XHQvLyBOZWVkIGluaXQgaWYgalF1ZXJ5IGlzIGNhbGxlZCAoanVzdCBhbGxvdyBlcnJvciB0byBiZSB0aHJvd24gaWYgbm90IGluY2x1ZGVkKVxuXHRcdHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5XG5cdC8vIE1ha2Ugc3VyZSB3ZSB0cmltIEJPTSBhbmQgTkJTUFxuXHRydHJpbSA9IC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZztcblxualF1ZXJ5LmZuID0galF1ZXJ5LnByb3RvdHlwZSA9IHtcblxuXHQvLyBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIGpRdWVyeSBiZWluZyB1c2VkXG5cdGpxdWVyeTogdmVyc2lvbixcblxuXHRjb25zdHJ1Y3RvcjogalF1ZXJ5LFxuXG5cdC8vIFRoZSBkZWZhdWx0IGxlbmd0aCBvZiBhIGpRdWVyeSBvYmplY3QgaXMgMFxuXHRsZW5ndGg6IDAsXG5cblx0dG9BcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTtcblx0fSxcblxuXHQvLyBHZXQgdGhlIE50aCBlbGVtZW50IGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0IE9SXG5cdC8vIEdldCB0aGUgd2hvbGUgbWF0Y2hlZCBlbGVtZW50IHNldCBhcyBhIGNsZWFuIGFycmF5XG5cdGdldDogZnVuY3Rpb24oIG51bSApIHtcblxuXHRcdC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGluIGEgY2xlYW4gYXJyYXlcblx0XHRpZiAoIG51bSA9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4ganVzdCB0aGUgb25lIGVsZW1lbnQgZnJvbSB0aGUgc2V0XG5cdFx0cmV0dXJuIG51bSA8IDAgPyB0aGlzWyBudW0gKyB0aGlzLmxlbmd0aCBdIDogdGhpc1sgbnVtIF07XG5cdH0sXG5cblx0Ly8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBvbnRvIHRoZSBzdGFja1xuXHQvLyAocmV0dXJuaW5nIHRoZSBuZXcgbWF0Y2hlZCBlbGVtZW50IHNldClcblx0cHVzaFN0YWNrOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cblx0XHQvLyBCdWlsZCBhIG5ldyBqUXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldFxuXHRcdHZhciByZXQgPSBqUXVlcnkubWVyZ2UoIHRoaXMuY29uc3RydWN0b3IoKSwgZWxlbXMgKTtcblxuXHRcdC8vIEFkZCB0aGUgb2xkIG9iamVjdCBvbnRvIHRoZSBzdGFjayAoYXMgYSByZWZlcmVuY2UpXG5cdFx0cmV0LnByZXZPYmplY3QgPSB0aGlzO1xuXG5cdFx0Ly8gUmV0dXJuIHRoZSBuZXdseS1mb3JtZWQgZWxlbWVudCBzZXRcblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdC8vIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZXZlcnkgZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBzZXQuXG5cdGVhY2g6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmVhY2goIHRoaXMsIGNhbGxiYWNrICk7XG5cdH0sXG5cblx0bWFwOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWFwKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiBjYWxsYmFjay5jYWxsKCBlbGVtLCBpLCBlbGVtICk7XG5cdFx0fSApICk7XG5cdH0sXG5cblx0c2xpY2U6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggc2xpY2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApICk7XG5cdH0sXG5cblx0Zmlyc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAwICk7XG5cdH0sXG5cblx0bGFzdDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXEoIC0xICk7XG5cdH0sXG5cblx0ZXE6IGZ1bmN0aW9uKCBpICkge1xuXHRcdHZhciBsZW4gPSB0aGlzLmxlbmd0aCxcblx0XHRcdGogPSAraSArICggaSA8IDAgPyBsZW4gOiAwICk7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqID49IDAgJiYgaiA8IGxlbiA/IFsgdGhpc1sgaiBdIF0gOiBbXSApO1xuXHR9LFxuXG5cdGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHJldk9iamVjdCB8fCB0aGlzLmNvbnN0cnVjdG9yKCk7XG5cdH0sXG5cblx0Ly8gRm9yIGludGVybmFsIHVzZSBvbmx5LlxuXHQvLyBCZWhhdmVzIGxpa2UgYW4gQXJyYXkncyBtZXRob2QsIG5vdCBsaWtlIGEgalF1ZXJ5IG1ldGhvZC5cblx0cHVzaDogcHVzaCxcblx0c29ydDogYXJyLnNvcnQsXG5cdHNwbGljZTogYXJyLnNwbGljZVxufTtcblxualF1ZXJ5LmV4dGVuZCA9IGpRdWVyeS5mbi5leHRlbmQgPSBmdW5jdGlvbigpIHtcblx0dmFyIG9wdGlvbnMsIG5hbWUsIHNyYywgY29weSwgY29weUlzQXJyYXksIGNsb25lLFxuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sgMCBdIHx8IHt9LFxuXHRcdGkgPSAxLFxuXHRcdGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cdFx0ZGVlcCA9IGZhbHNlO1xuXG5cdC8vIEhhbmRsZSBhIGRlZXAgY29weSBzaXR1YXRpb25cblx0aWYgKCB0eXBlb2YgdGFyZ2V0ID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRkZWVwID0gdGFyZ2V0O1xuXG5cdFx0Ly8gU2tpcCB0aGUgYm9vbGVhbiBhbmQgdGhlIHRhcmdldFxuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sgaSBdIHx8IHt9O1xuXHRcdGkrKztcblx0fVxuXG5cdC8vIEhhbmRsZSBjYXNlIHdoZW4gdGFyZ2V0IGlzIGEgc3RyaW5nIG9yIHNvbWV0aGluZyAocG9zc2libGUgaW4gZGVlcCBjb3B5KVxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgIT09IFwib2JqZWN0XCIgJiYgIWlzRnVuY3Rpb24oIHRhcmdldCApICkge1xuXHRcdHRhcmdldCA9IHt9O1xuXHR9XG5cblx0Ly8gRXh0ZW5kIGpRdWVyeSBpdHNlbGYgaWYgb25seSBvbmUgYXJndW1lbnQgaXMgcGFzc2VkXG5cdGlmICggaSA9PT0gbGVuZ3RoICkge1xuXHRcdHRhcmdldCA9IHRoaXM7XG5cdFx0aS0tO1xuXHR9XG5cblx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cblx0XHQvLyBPbmx5IGRlYWwgd2l0aCBub24tbnVsbC91bmRlZmluZWQgdmFsdWVzXG5cdFx0aWYgKCAoIG9wdGlvbnMgPSBhcmd1bWVudHNbIGkgXSApICE9IG51bGwgKSB7XG5cblx0XHRcdC8vIEV4dGVuZCB0aGUgYmFzZSBvYmplY3Rcblx0XHRcdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRcdFx0Y29weSA9IG9wdGlvbnNbIG5hbWUgXTtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IE9iamVjdC5wcm90b3R5cGUgcG9sbHV0aW9uXG5cdFx0XHRcdC8vIFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3Bcblx0XHRcdFx0aWYgKCBuYW1lID09PSBcIl9fcHJvdG9fX1wiIHx8IHRhcmdldCA9PT0gY29weSApIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3RzIG9yIGFycmF5c1xuXHRcdFx0XHRpZiAoIGRlZXAgJiYgY29weSAmJiAoIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb3B5ICkgfHxcblx0XHRcdFx0XHQoIGNvcHlJc0FycmF5ID0gQXJyYXkuaXNBcnJheSggY29weSApICkgKSApIHtcblx0XHRcdFx0XHRzcmMgPSB0YXJnZXRbIG5hbWUgXTtcblxuXHRcdFx0XHRcdC8vIEVuc3VyZSBwcm9wZXIgdHlwZSBmb3IgdGhlIHNvdXJjZSB2YWx1ZVxuXHRcdFx0XHRcdGlmICggY29weUlzQXJyYXkgJiYgIUFycmF5LmlzQXJyYXkoIHNyYyApICkge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSBbXTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCAhY29weUlzQXJyYXkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBzcmMgKSApIHtcblx0XHRcdFx0XHRcdGNsb25lID0ge307XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNsb25lID0gc3JjO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb3B5SXNBcnJheSA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0Ly8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtXG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBkZWVwLCBjbG9uZSwgY29weSApO1xuXG5cdFx0XHRcdC8vIERvbid0IGJyaW5nIGluIHVuZGVmaW5lZCB2YWx1ZXNcblx0XHRcdFx0fSBlbHNlIGlmICggY29weSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0gY29weTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbW9kaWZpZWQgb2JqZWN0XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gVW5pcXVlIGZvciBlYWNoIGNvcHkgb2YgalF1ZXJ5IG9uIHRoZSBwYWdlXG5cdGV4cGFuZG86IFwialF1ZXJ5XCIgKyAoIHZlcnNpb24gKyBNYXRoLnJhbmRvbSgpICkucmVwbGFjZSggL1xcRC9nLCBcIlwiICksXG5cblx0Ly8gQXNzdW1lIGpRdWVyeSBpcyByZWFkeSB3aXRob3V0IHRoZSByZWFkeSBtb2R1bGVcblx0aXNSZWFkeTogdHJ1ZSxcblxuXHRlcnJvcjogZnVuY3Rpb24oIG1zZyApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoIG1zZyApO1xuXHR9LFxuXG5cdG5vb3A6IGZ1bmN0aW9uKCkge30sXG5cblx0aXNQbGFpbk9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIgcHJvdG8sIEN0b3I7XG5cblx0XHQvLyBEZXRlY3Qgb2J2aW91cyBuZWdhdGl2ZXNcblx0XHQvLyBVc2UgdG9TdHJpbmcgaW5zdGVhZCBvZiBqUXVlcnkudHlwZSB0byBjYXRjaCBob3N0IG9iamVjdHNcblx0XHRpZiAoICFvYmogfHwgdG9TdHJpbmcuY2FsbCggb2JqICkgIT09IFwiW29iamVjdCBPYmplY3RdXCIgKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cHJvdG8gPSBnZXRQcm90byggb2JqICk7XG5cblx0XHQvLyBPYmplY3RzIHdpdGggbm8gcHJvdG90eXBlIChlLmcuLCBgT2JqZWN0LmNyZWF0ZSggbnVsbCApYCkgYXJlIHBsYWluXG5cdFx0aWYgKCAhcHJvdG8gKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBPYmplY3RzIHdpdGggcHJvdG90eXBlIGFyZSBwbGFpbiBpZmYgdGhleSB3ZXJlIGNvbnN0cnVjdGVkIGJ5IGEgZ2xvYmFsIE9iamVjdCBmdW5jdGlvblxuXHRcdEN0b3IgPSBoYXNPd24uY2FsbCggcHJvdG8sIFwiY29uc3RydWN0b3JcIiApICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuXHRcdHJldHVybiB0eXBlb2YgQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmIGZuVG9TdHJpbmcuY2FsbCggQ3RvciApID09PSBPYmplY3RGdW5jdGlvblN0cmluZztcblx0fSxcblxuXHRpc0VtcHR5T2JqZWN0OiBmdW5jdGlvbiggb2JqICkge1xuXHRcdHZhciBuYW1lO1xuXG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdC8vIEV2YWx1YXRlcyBhIHNjcmlwdCBpbiBhIGdsb2JhbCBjb250ZXh0XG5cdGdsb2JhbEV2YWw6IGZ1bmN0aW9uKCBjb2RlLCBvcHRpb25zICkge1xuXHRcdERPTUV2YWwoIGNvZGUsIHsgbm9uY2U6IG9wdGlvbnMgJiYgb3B0aW9ucy5ub25jZSB9ICk7XG5cdH0sXG5cblx0ZWFjaDogZnVuY3Rpb24oIG9iaiwgY2FsbGJhY2sgKSB7XG5cdFx0dmFyIGxlbmd0aCwgaSA9IDA7XG5cblx0XHRpZiAoIGlzQXJyYXlMaWtlKCBvYmogKSApIHtcblx0XHRcdGxlbmd0aCA9IG9iai5sZW5ndGg7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICggaSBpbiBvYmogKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9iajtcblx0fSxcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHlcblx0dHJpbTogZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0cmV0dXJuIHRleHQgPT0gbnVsbCA/XG5cdFx0XHRcIlwiIDpcblx0XHRcdCggdGV4dCArIFwiXCIgKS5yZXBsYWNlKCBydHJpbSwgXCJcIiApO1xuXHR9LFxuXG5cdC8vIHJlc3VsdHMgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0bWFrZUFycmF5OiBmdW5jdGlvbiggYXJyLCByZXN1bHRzICkge1xuXHRcdHZhciByZXQgPSByZXN1bHRzIHx8IFtdO1xuXG5cdFx0aWYgKCBhcnIgIT0gbnVsbCApIHtcblx0XHRcdGlmICggaXNBcnJheUxpa2UoIE9iamVjdCggYXJyICkgKSApIHtcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCByZXQsXG5cdFx0XHRcdFx0dHlwZW9mIGFyciA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0WyBhcnIgXSA6IGFyclxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHVzaC5jYWxsKCByZXQsIGFyciApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0aW5BcnJheTogZnVuY3Rpb24oIGVsZW0sIGFyciwgaSApIHtcblx0XHRyZXR1cm4gYXJyID09IG51bGwgPyAtMSA6IGluZGV4T2YuY2FsbCggYXJyLCBlbGVtLCBpICk7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0bWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkge1xuXHRcdHZhciBsZW4gPSArc2Vjb25kLmxlbmd0aCxcblx0XHRcdGogPSAwLFxuXHRcdFx0aSA9IGZpcnN0Lmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0Zmlyc3RbIGkrKyBdID0gc2Vjb25kWyBqIF07XG5cdFx0fVxuXG5cdFx0Zmlyc3QubGVuZ3RoID0gaTtcblxuXHRcdHJldHVybiBmaXJzdDtcblx0fSxcblxuXHRncmVwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBpbnZlcnQgKSB7XG5cdFx0dmFyIGNhbGxiYWNrSW52ZXJzZSxcblx0XHRcdG1hdGNoZXMgPSBbXSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoLFxuXHRcdFx0Y2FsbGJhY2tFeHBlY3QgPSAhaW52ZXJ0O1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtc1xuXHRcdC8vIHRoYXQgcGFzcyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uXG5cdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRjYWxsYmFja0ludmVyc2UgPSAhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTtcblx0XHRcdGlmICggY2FsbGJhY2tJbnZlcnNlICE9PSBjYWxsYmFja0V4cGVjdCApIHtcblx0XHRcdFx0bWF0Y2hlcy5wdXNoKCBlbGVtc1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hdGNoZXM7XG5cdH0sXG5cblx0Ly8gYXJnIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkge1xuXHRcdHZhciBsZW5ndGgsIHZhbHVlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRyZXQgPSBbXTtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVpciBuZXcgdmFsdWVzXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggZWxlbXMgKSApIHtcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsXG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gZWxlbXMgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0XHRyZXR1cm4gY29uY2F0LmFwcGx5KCBbXSwgcmV0ICk7XG5cdH0sXG5cblx0Ly8gQSBnbG9iYWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzXG5cdGd1aWQ6IDEsXG5cblx0Ly8galF1ZXJ5LnN1cHBvcnQgaXMgbm90IHVzZWQgaW4gQ29yZSBidXQgb3RoZXIgcHJvamVjdHMgYXR0YWNoIHRoZWlyXG5cdC8vIHByb3BlcnRpZXMgdG8gaXQgc28gaXQgbmVlZHMgdG8gZXhpc3QuXG5cdHN1cHBvcnQ6IHN1cHBvcnRcbn0gKTtcblxuaWYgKCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cdGpRdWVyeS5mblsgU3ltYm9sLml0ZXJhdG9yIF0gPSBhcnJbIFN5bWJvbC5pdGVyYXRvciBdO1xufVxuXG4vLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlwZSBtYXBcbmpRdWVyeS5lYWNoKCBcIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sXCIuc3BsaXQoIFwiIFwiICksXG5mdW5jdGlvbiggaSwgbmFtZSApIHtcblx0Y2xhc3MydHlwZVsgXCJbb2JqZWN0IFwiICsgbmFtZSArIFwiXVwiIF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG59ICk7XG5cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKCBvYmogKSB7XG5cblx0Ly8gU3VwcG9ydDogcmVhbCBpT1MgOC4yIG9ubHkgKG5vdCByZXByb2R1Y2libGUgaW4gc2ltdWxhdG9yKVxuXHQvLyBgaW5gIGNoZWNrIHVzZWQgdG8gcHJldmVudCBKSVQgZXJyb3IgKGdoLTIxNDUpXG5cdC8vIGhhc093biBpc24ndCB1c2VkIGhlcmUgZHVlIHRvIGZhbHNlIG5lZ2F0aXZlc1xuXHQvLyByZWdhcmRpbmcgTm9kZWxpc3QgbGVuZ3RoIGluIElFXG5cdHZhciBsZW5ndGggPSAhIW9iaiAmJiBcImxlbmd0aFwiIGluIG9iaiAmJiBvYmoubGVuZ3RoLFxuXHRcdHR5cGUgPSB0b1R5cGUoIG9iaiApO1xuXG5cdGlmICggaXNGdW5jdGlvbiggb2JqICkgfHwgaXNXaW5kb3coIG9iaiApICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0eXBlID09PSBcImFycmF5XCIgfHwgbGVuZ3RoID09PSAwIHx8XG5cdFx0dHlwZW9mIGxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJiBsZW5ndGggPiAwICYmICggbGVuZ3RoIC0gMSApIGluIG9iajtcbn1cbnZhciBTaXp6bGUgPVxuLyohXG4gKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2luZSB2Mi4zLjRcbiAqIGh0dHBzOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCBKUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cHM6Ly9qcy5mb3VuZGF0aW9uL1xuICpcbiAqIERhdGU6IDIwMTktMDQtMDhcbiAqL1xuKGZ1bmN0aW9uKCB3aW5kb3cgKSB7XG5cbnZhciBpLFxuXHRzdXBwb3J0LFxuXHRFeHByLFxuXHRnZXRUZXh0LFxuXHRpc1hNTCxcblx0dG9rZW5pemUsXG5cdGNvbXBpbGUsXG5cdHNlbGVjdCxcblx0b3V0ZXJtb3N0Q29udGV4dCxcblx0c29ydElucHV0LFxuXHRoYXNEdXBsaWNhdGUsXG5cblx0Ly8gTG9jYWwgZG9jdW1lbnQgdmFyc1xuXHRzZXREb2N1bWVudCxcblx0ZG9jdW1lbnQsXG5cdGRvY0VsZW0sXG5cdGRvY3VtZW50SXNIVE1MLFxuXHRyYnVnZ3lRU0EsXG5cdHJidWdneU1hdGNoZXMsXG5cdG1hdGNoZXMsXG5cdGNvbnRhaW5zLFxuXG5cdC8vIEluc3RhbmNlLXNwZWNpZmljIGRhdGFcblx0ZXhwYW5kbyA9IFwic2l6emxlXCIgKyAxICogbmV3IERhdGUoKSxcblx0cHJlZmVycmVkRG9jID0gd2luZG93LmRvY3VtZW50LFxuXHRkaXJydW5zID0gMCxcblx0ZG9uZSA9IDAsXG5cdGNsYXNzQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHR0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0Y29tcGlsZXJDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRzb3J0T3JkZXIgPSBmdW5jdGlvbiggYSwgYiApIHtcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gMDtcblx0fSxcblxuXHQvLyBJbnN0YW5jZSBtZXRob2RzXG5cdGhhc093biA9ICh7fSkuaGFzT3duUHJvcGVydHksXG5cdGFyciA9IFtdLFxuXHRwb3AgPSBhcnIucG9wLFxuXHRwdXNoX25hdGl2ZSA9IGFyci5wdXNoLFxuXHRwdXNoID0gYXJyLnB1c2gsXG5cdHNsaWNlID0gYXJyLnNsaWNlLFxuXHQvLyBVc2UgYSBzdHJpcHBlZC1kb3duIGluZGV4T2YgYXMgaXQncyBmYXN0ZXIgdGhhbiBuYXRpdmVcblx0Ly8gaHR0cHM6Ly9qc3BlcmYuY29tL3Rob3ItaW5kZXhvZi12cy1mb3IvNVxuXHRpbmRleE9mID0gZnVuY3Rpb24oIGxpc3QsIGVsZW0gKSB7XG5cdFx0dmFyIGkgPSAwLFxuXHRcdFx0bGVuID0gbGlzdC5sZW5ndGg7XG5cdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRpZiAoIGxpc3RbaV0gPT09IGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gLTE7XG5cdH0sXG5cblx0Ym9vbGVhbnMgPSBcImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkXCIsXG5cblx0Ly8gUmVndWxhciBleHByZXNzaW9uc1xuXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc2VsZWN0b3JzLyN3aGl0ZXNwYWNlXG5cdHdoaXRlc3BhY2UgPSBcIltcXFxceDIwXFxcXHRcXFxcclxcXFxuXFxcXGZdXCIsXG5cblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI3ZhbHVlLWRlZi1pZGVudGlmaWVyXG5cdGlkZW50aWZpZXIgPSBcIig/OlxcXFxcXFxcLnxbXFxcXHctXXxbXlxcMC1cXFxceGEwXSkrXCIsXG5cblx0Ly8gQXR0cmlidXRlIHNlbGVjdG9yczogaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNhdHRyaWJ1dGUtc2VsZWN0b3JzXG5cdGF0dHJpYnV0ZXMgPSBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFwiICsgaWRlbnRpZmllciArIFwiKSg/OlwiICsgd2hpdGVzcGFjZSArXG5cdFx0Ly8gT3BlcmF0b3IgKGNhcHR1cmUgMilcblx0XHRcIiooWypeJHwhfl0/PSlcIiArIHdoaXRlc3BhY2UgK1xuXHRcdC8vIFwiQXR0cmlidXRlIHZhbHVlcyBtdXN0IGJlIENTUyBpZGVudGlmaWVycyBbY2FwdHVyZSA1XSBvciBzdHJpbmdzIFtjYXB0dXJlIDMgb3IgY2FwdHVyZSA0XVwiXG5cdFx0XCIqKD86JygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwifChcIiArIGlkZW50aWZpZXIgKyBcIikpfClcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFwiKlxcXFxdXCIsXG5cblx0cHNldWRvcyA9IFwiOihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcXFxcKChcIiArXG5cdFx0Ly8gVG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2VsZWN0b3JzIG5lZWRpbmcgdG9rZW5pemUgaW4gdGhlIHByZUZpbHRlciwgcHJlZmVyIGFyZ3VtZW50czpcblx0XHQvLyAxLiBxdW90ZWQgKGNhcHR1cmUgMzsgY2FwdHVyZSA0IG9yIGNhcHR1cmUgNSlcblx0XHRcIignKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCIpfFwiICtcblx0XHQvLyAyLiBzaW1wbGUgKGNhcHR1cmUgNilcblx0XHRcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpW1xcXFxdXXxcIiArIGF0dHJpYnV0ZXMgKyBcIikqKXxcIiArXG5cdFx0Ly8gMy4gYW55dGhpbmcgZWxzZSAoY2FwdHVyZSAyKVxuXHRcdFwiLipcIiArXG5cdFx0XCIpXFxcXCl8KVwiLFxuXG5cdC8vIExlYWRpbmcgYW5kIG5vbi1lc2NhcGVkIHRyYWlsaW5nIHdoaXRlc3BhY2UsIGNhcHR1cmluZyBzb21lIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgcHJlY2VkaW5nIHRoZSBsYXR0ZXJcblx0cndoaXRlc3BhY2UgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNlICsgXCIrXCIsIFwiZ1wiICksXG5cdHJ0cmltID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIrfCgoPzpefFteXFxcXFxcXFxdKSg/OlxcXFxcXFxcLikqKVwiICsgd2hpdGVzcGFjZSArIFwiKyRcIiwgXCJnXCIgKSxcblxuXHRyY29tbWEgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiosXCIgKyB3aGl0ZXNwYWNlICsgXCIqXCIgKSxcblx0cmNvbWJpbmF0b3JzID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFs+K35dfFwiICsgd2hpdGVzcGFjZSArIFwiKVwiICsgd2hpdGVzcGFjZSArIFwiKlwiICksXG5cdHJkZXNjZW5kID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArIFwifD5cIiApLFxuXG5cdHJwc2V1ZG8gPSBuZXcgUmVnRXhwKCBwc2V1ZG9zICksXG5cdHJpZGVudGlmaWVyID0gbmV3IFJlZ0V4cCggXCJeXCIgKyBpZGVudGlmaWVyICsgXCIkXCIgKSxcblxuXHRtYXRjaEV4cHIgPSB7XG5cdFx0XCJJRFwiOiBuZXcgUmVnRXhwKCBcIl4jKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0XCJDTEFTU1wiOiBuZXcgUmVnRXhwKCBcIl5cXFxcLihcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdFwiVEFHXCI6IG5ldyBSZWdFeHAoIFwiXihcIiArIGlkZW50aWZpZXIgKyBcInxbKl0pXCIgKSxcblx0XHRcIkFUVFJcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBhdHRyaWJ1dGVzICksXG5cdFx0XCJQU0VVRE9cIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBwc2V1ZG9zICksXG5cdFx0XCJDSElMRFwiOiBuZXcgUmVnRXhwKCBcIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcXFwoXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKihldmVufG9kZHwoKFsrLV18KShcXFxcZCopbnwpXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86KFsrLV18KVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcIiooXFxcXGQrKXwpKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfClcIiwgXCJpXCIgKSxcblx0XHRcImJvb2xcIjogbmV3IFJlZ0V4cCggXCJeKD86XCIgKyBib29sZWFucyArIFwiKSRcIiwgXCJpXCIgKSxcblx0XHQvLyBGb3IgdXNlIGluIGxpYnJhcmllcyBpbXBsZW1lbnRpbmcgLmlzKClcblx0XHQvLyBXZSB1c2UgdGhpcyBmb3IgUE9TIG1hdGNoaW5nIGluIGBzZWxlY3RgXG5cdFx0XCJuZWVkc0NvbnRleHRcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXFxcKFwiICtcblx0XHRcdHdoaXRlc3BhY2UgKyBcIiooKD86LVxcXFxkKT9cXFxcZCopXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KSg/PVteLV18JClcIiwgXCJpXCIgKVxuXHR9LFxuXG5cdHJodG1sID0gL0hUTUwkL2ksXG5cdHJpbnB1dHMgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyaGVhZGVyID0gL15oXFxkJC9pLFxuXG5cdHJuYXRpdmUgPSAvXltee10rXFx7XFxzKlxcW25hdGl2ZSBcXHcvLFxuXG5cdC8vIEVhc2lseS1wYXJzZWFibGUvcmV0cmlldmFibGUgSUQgb3IgVEFHIG9yIENMQVNTIHNlbGVjdG9yc1xuXHRycXVpY2tFeHByID0gL14oPzojKFtcXHctXSspfChcXHcrKXxcXC4oW1xcdy1dKykpJC8sXG5cblx0cnNpYmxpbmcgPSAvWyt+XS8sXG5cblx0Ly8gQ1NTIGVzY2FwZXNcblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI2VzY2FwZWQtY2hhcmFjdGVyc1xuXHRydW5lc2NhcGUgPSBuZXcgUmVnRXhwKCBcIlxcXFxcXFxcKFtcXFxcZGEtZl17MSw2fVwiICsgd2hpdGVzcGFjZSArIFwiP3woXCIgKyB3aGl0ZXNwYWNlICsgXCIpfC4pXCIsIFwiaWdcIiApLFxuXHRmdW5lc2NhcGUgPSBmdW5jdGlvbiggXywgZXNjYXBlZCwgZXNjYXBlZFdoaXRlc3BhY2UgKSB7XG5cdFx0dmFyIGhpZ2ggPSBcIjB4XCIgKyBlc2NhcGVkIC0gMHgxMDAwMDtcblx0XHQvLyBOYU4gbWVhbnMgbm9uLWNvZGVwb2ludFxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3g8MjRcblx0XHQvLyBXb3JrYXJvdW5kIGVycm9uZW91cyBudW1lcmljIGludGVycHJldGF0aW9uIG9mICtcIjB4XCJcblx0XHRyZXR1cm4gaGlnaCAhPT0gaGlnaCB8fCBlc2NhcGVkV2hpdGVzcGFjZSA/XG5cdFx0XHRlc2NhcGVkIDpcblx0XHRcdGhpZ2ggPCAwID9cblx0XHRcdFx0Ly8gQk1QIGNvZGVwb2ludFxuXHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoICsgMHgxMDAwMCApIDpcblx0XHRcdFx0Ly8gU3VwcGxlbWVudGFsIFBsYW5lIGNvZGVwb2ludCAoc3Vycm9nYXRlIHBhaXIpXG5cdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggPj4gMTAgfCAweEQ4MDAsIGhpZ2ggJiAweDNGRiB8IDB4REMwMCApO1xuXHR9LFxuXG5cdC8vIENTUyBzdHJpbmcvaWRlbnRpZmllciBzZXJpYWxpemF0aW9uXG5cdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jY29tbW9uLXNlcmlhbGl6aW5nLWlkaW9tc1xuXHRyY3NzZXNjYXBlID0gLyhbXFwwLVxceDFmXFx4N2ZdfF4tP1xcZCl8Xi0kfFteXFwwLVxceDFmXFx4N2YtXFx1RkZGRlxcdy1dL2csXG5cdGZjc3Nlc2NhcGUgPSBmdW5jdGlvbiggY2gsIGFzQ29kZVBvaW50ICkge1xuXHRcdGlmICggYXNDb2RlUG9pbnQgKSB7XG5cblx0XHRcdC8vIFUrMDAwMCBOVUxMIGJlY29tZXMgVStGRkZEIFJFUExBQ0VNRU5UIENIQVJBQ1RFUlxuXHRcdFx0aWYgKCBjaCA9PT0gXCJcXDBcIiApIHtcblx0XHRcdFx0cmV0dXJuIFwiXFx1RkZGRFwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb250cm9sIGNoYXJhY3RlcnMgYW5kIChkZXBlbmRlbnQgdXBvbiBwb3NpdGlvbikgbnVtYmVycyBnZXQgZXNjYXBlZCBhcyBjb2RlIHBvaW50c1xuXHRcdFx0cmV0dXJuIGNoLnNsaWNlKCAwLCAtMSApICsgXCJcXFxcXCIgKyBjaC5jaGFyQ29kZUF0KCBjaC5sZW5ndGggLSAxICkudG9TdHJpbmcoIDE2ICkgKyBcIiBcIjtcblx0XHR9XG5cblx0XHQvLyBPdGhlciBwb3RlbnRpYWxseS1zcGVjaWFsIEFTQ0lJIGNoYXJhY3RlcnMgZ2V0IGJhY2tzbGFzaC1lc2NhcGVkXG5cdFx0cmV0dXJuIFwiXFxcXFwiICsgY2g7XG5cdH0sXG5cblx0Ly8gVXNlZCBmb3IgaWZyYW1lc1xuXHQvLyBTZWUgc2V0RG9jdW1lbnQoKVxuXHQvLyBSZW1vdmluZyB0aGUgZnVuY3Rpb24gd3JhcHBlciBjYXVzZXMgYSBcIlBlcm1pc3Npb24gRGVuaWVkXCJcblx0Ly8gZXJyb3IgaW4gSUVcblx0dW5sb2FkSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuXHRcdHNldERvY3VtZW50KCk7XG5cdH0sXG5cblx0aW5EaXNhYmxlZEZpZWxkc2V0ID0gYWRkQ29tYmluYXRvcihcblx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSB0cnVlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJmaWVsZHNldFwiO1xuXHRcdH0sXG5cdFx0eyBkaXI6IFwicGFyZW50Tm9kZVwiLCBuZXh0OiBcImxlZ2VuZFwiIH1cblx0KTtcblxuLy8gT3B0aW1pemUgZm9yIHB1c2guYXBwbHkoIF8sIE5vZGVMaXN0IClcbnRyeSB7XG5cdHB1c2guYXBwbHkoXG5cdFx0KGFyciA9IHNsaWNlLmNhbGwoIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzICkpLFxuXHRcdHByZWZlcnJlZERvYy5jaGlsZE5vZGVzXG5cdCk7XG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4wXG5cdC8vIERldGVjdCBzaWxlbnRseSBmYWlsaW5nIHB1c2guYXBwbHlcblx0YXJyWyBwcmVmZXJyZWREb2MuY2hpbGROb2Rlcy5sZW5ndGggXS5ub2RlVHlwZTtcbn0gY2F0Y2ggKCBlICkge1xuXHRwdXNoID0geyBhcHBseTogYXJyLmxlbmd0aCA/XG5cblx0XHQvLyBMZXZlcmFnZSBzbGljZSBpZiBwb3NzaWJsZVxuXHRcdGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHtcblx0XHRcdHB1c2hfbmF0aXZlLmFwcGx5KCB0YXJnZXQsIHNsaWNlLmNhbGwoZWxzKSApO1xuXHRcdH0gOlxuXG5cdFx0Ly8gU3VwcG9ydDogSUU8OVxuXHRcdC8vIE90aGVyd2lzZSBhcHBlbmQgZGlyZWN0bHlcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHR2YXIgaiA9IHRhcmdldC5sZW5ndGgsXG5cdFx0XHRcdGkgPSAwO1xuXHRcdFx0Ly8gQ2FuJ3QgdHJ1c3QgTm9kZUxpc3QubGVuZ3RoXG5cdFx0XHR3aGlsZSAoICh0YXJnZXRbaisrXSA9IGVsc1tpKytdKSApIHt9XG5cdFx0XHR0YXJnZXQubGVuZ3RoID0gaiAtIDE7XG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xuXHR2YXIgbSwgaSwgZWxlbSwgbmlkLCBtYXRjaCwgZ3JvdXBzLCBuZXdTZWxlY3Rvcixcblx0XHRuZXdDb250ZXh0ID0gY29udGV4dCAmJiBjb250ZXh0Lm93bmVyRG9jdW1lbnQsXG5cblx0XHQvLyBub2RlVHlwZSBkZWZhdWx0cyB0byA5LCBzaW5jZSBjb250ZXh0IGRlZmF1bHRzIHRvIGRvY3VtZW50XG5cdFx0bm9kZVR5cGUgPSBjb250ZXh0ID8gY29udGV4dC5ub2RlVHlwZSA6IDk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gUmV0dXJuIGVhcmx5IGZyb20gY2FsbHMgd2l0aCBpbnZhbGlkIHNlbGVjdG9yIG9yIGNvbnRleHRcblx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgfHwgIXNlbGVjdG9yIHx8XG5cdFx0bm9kZVR5cGUgIT09IDEgJiYgbm9kZVR5cGUgIT09IDkgJiYgbm9kZVR5cGUgIT09IDExICkge1xuXG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH1cblxuXHQvLyBUcnkgdG8gc2hvcnRjdXQgZmluZCBvcGVyYXRpb25zIChhcyBvcHBvc2VkIHRvIGZpbHRlcnMpIGluIEhUTUwgZG9jdW1lbnRzXG5cdGlmICggIXNlZWQgKSB7XG5cblx0XHRpZiAoICggY29udGV4dCA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogcHJlZmVycmVkRG9jICkgIT09IGRvY3VtZW50ICkge1xuXHRcdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0XHR9XG5cdFx0Y29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7XG5cblx0XHRpZiAoIGRvY3VtZW50SXNIVE1MICkge1xuXG5cdFx0XHQvLyBJZiB0aGUgc2VsZWN0b3IgaXMgc3VmZmljaWVudGx5IHNpbXBsZSwgdHJ5IHVzaW5nIGEgXCJnZXQqQnkqXCIgRE9NIG1ldGhvZFxuXHRcdFx0Ly8gKGV4Y2VwdGluZyBEb2N1bWVudEZyYWdtZW50IGNvbnRleHQsIHdoZXJlIHRoZSBtZXRob2RzIGRvbid0IGV4aXN0KVxuXHRcdFx0aWYgKCBub2RlVHlwZSAhPT0gMTEgJiYgKG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApKSApIHtcblxuXHRcdFx0XHQvLyBJRCBzZWxlY3RvclxuXHRcdFx0XHRpZiAoIChtID0gbWF0Y2hbMV0pICkge1xuXG5cdFx0XHRcdFx0Ly8gRG9jdW1lbnQgY29udGV4dFxuXHRcdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIChlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApKSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdFxuXHRcdFx0XHRcdFx0XHQvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9uc1xuXHRcdFx0XHRcdFx0XHQvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElEXG5cdFx0XHRcdFx0XHRcdGlmICggZWxlbS5pZCA9PT0gbSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBFbGVtZW50IGNvbnRleHRcblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdFxuXHRcdFx0XHRcdFx0Ly8gVE9ETzogaWRlbnRpZnkgdmVyc2lvbnNcblx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcblx0XHRcdFx0XHRcdGlmICggbmV3Q29udGV4dCAmJiAoZWxlbSA9IG5ld0NvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSkgJiZcblx0XHRcdFx0XHRcdFx0Y29udGFpbnMoIGNvbnRleHQsIGVsZW0gKSAmJlxuXHRcdFx0XHRcdFx0XHRlbGVtLmlkID09PSBtICkge1xuXG5cdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVHlwZSBzZWxlY3RvclxuXHRcdFx0XHR9IGVsc2UgaWYgKCBtYXRjaFsyXSApIHtcblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBzZWxlY3RvciApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cblx0XHRcdFx0Ly8gQ2xhc3Mgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggKG0gPSBtYXRjaFszXSkgJiYgc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmXG5cdFx0XHRcdFx0Y29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICkge1xuXG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBtICkgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUYWtlIGFkdmFudGFnZSBvZiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHRpZiAoIHN1cHBvcnQucXNhICYmXG5cdFx0XHRcdCFub25uYXRpdmVTZWxlY3RvckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF0gJiZcblx0XHRcdFx0KCFyYnVnZ3lRU0EgfHwgIXJidWdneVFTQS50ZXN0KCBzZWxlY3RvciApKSAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDggb25seVxuXHRcdFx0XHQvLyBFeGNsdWRlIG9iamVjdCBlbGVtZW50c1xuXHRcdFx0XHQobm9kZVR5cGUgIT09IDEgfHwgY29udGV4dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSBcIm9iamVjdFwiKSApIHtcblxuXHRcdFx0XHRuZXdTZWxlY3RvciA9IHNlbGVjdG9yO1xuXHRcdFx0XHRuZXdDb250ZXh0ID0gY29udGV4dDtcblxuXHRcdFx0XHQvLyBxU0EgY29uc2lkZXJzIGVsZW1lbnRzIG91dHNpZGUgYSBzY29waW5nIHJvb3Qgd2hlbiBldmFsdWF0aW5nIGNoaWxkIG9yXG5cdFx0XHRcdC8vIGRlc2NlbmRhbnQgY29tYmluYXRvcnMsIHdoaWNoIGlzIG5vdCB3aGF0IHdlIHdhbnQuXG5cdFx0XHRcdC8vIEluIHN1Y2ggY2FzZXMsIHdlIHdvcmsgYXJvdW5kIHRoZSBiZWhhdmlvciBieSBwcmVmaXhpbmcgZXZlcnkgc2VsZWN0b3IgaW4gdGhlXG5cdFx0XHRcdC8vIGxpc3Qgd2l0aCBhbiBJRCBzZWxlY3RvciByZWZlcmVuY2luZyB0aGUgc2NvcGUgY29udGV4dC5cblx0XHRcdFx0Ly8gVGhhbmtzIHRvIEFuZHJldyBEdXBvbnQgZm9yIHRoaXMgdGVjaG5pcXVlLlxuXHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSAxICYmIHJkZXNjZW5kLnRlc3QoIHNlbGVjdG9yICkgKSB7XG5cblx0XHRcdFx0XHQvLyBDYXB0dXJlIHRoZSBjb250ZXh0IElELCBzZXR0aW5nIGl0IGZpcnN0IGlmIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdGlmICggKG5pZCA9IGNvbnRleHQuZ2V0QXR0cmlidXRlKCBcImlkXCIgKSkgKSB7XG5cdFx0XHRcdFx0XHRuaWQgPSBuaWQucmVwbGFjZSggcmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb250ZXh0LnNldEF0dHJpYnV0ZSggXCJpZFwiLCAobmlkID0gZXhwYW5kbykgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmVmaXggZXZlcnkgc2VsZWN0b3IgaW4gdGhlIGxpc3Rcblx0XHRcdFx0XHRncm91cHMgPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcblx0XHRcdFx0XHRpID0gZ3JvdXBzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGdyb3Vwc1tpXSA9IFwiI1wiICsgbmlkICsgXCIgXCIgKyB0b1NlbGVjdG9yKCBncm91cHNbaV0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bmV3U2VsZWN0b3IgPSBncm91cHMuam9pbiggXCIsXCIgKTtcblxuXHRcdFx0XHRcdC8vIEV4cGFuZCBjb250ZXh0IGZvciBzaWJsaW5nIHNlbGVjdG9yc1xuXHRcdFx0XHRcdG5ld0NvbnRleHQgPSByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fFxuXHRcdFx0XHRcdFx0Y29udGV4dDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cyxcblx0XHRcdFx0XHRcdG5ld0NvbnRleHQucXVlcnlTZWxlY3RvckFsbCggbmV3U2VsZWN0b3IgKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH0gY2F0Y2ggKCBxc2FFcnJvciApIHtcblx0XHRcdFx0XHRub25uYXRpdmVTZWxlY3RvckNhY2hlKCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRcdGlmICggbmlkID09PSBleHBhbmRvICkge1xuXHRcdFx0XHRcdFx0Y29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFsbCBvdGhlcnNcblx0cmV0dXJuIHNlbGVjdCggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGtleS12YWx1ZSBjYWNoZXMgb2YgbGltaXRlZCBzaXplXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oc3RyaW5nLCBvYmplY3QpfSBSZXR1cm5zIHRoZSBPYmplY3QgZGF0YSBhZnRlciBzdG9yaW5nIGl0IG9uIGl0c2VsZiB3aXRoXG4gKlx0cHJvcGVydHkgbmFtZSB0aGUgKHNwYWNlLXN1ZmZpeGVkKSBzdHJpbmcgYW5kIChpZiB0aGUgY2FjaGUgaXMgbGFyZ2VyIHRoYW4gRXhwci5jYWNoZUxlbmd0aClcbiAqXHRkZWxldGluZyB0aGUgb2xkZXN0IGVudHJ5XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhY2hlKCkge1xuXHR2YXIga2V5cyA9IFtdO1xuXG5cdGZ1bmN0aW9uIGNhY2hlKCBrZXksIHZhbHVlICkge1xuXHRcdC8vIFVzZSAoa2V5ICsgXCIgXCIpIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIG5hdGl2ZSBwcm90b3R5cGUgcHJvcGVydGllcyAoc2VlIElzc3VlICMxNTcpXG5cdFx0aWYgKCBrZXlzLnB1c2goIGtleSArIFwiIFwiICkgPiBFeHByLmNhY2hlTGVuZ3RoICkge1xuXHRcdFx0Ly8gT25seSBrZWVwIHRoZSBtb3N0IHJlY2VudCBlbnRyaWVzXG5cdFx0XHRkZWxldGUgY2FjaGVbIGtleXMuc2hpZnQoKSBdO1xuXHRcdH1cblx0XHRyZXR1cm4gKGNhY2hlWyBrZXkgKyBcIiBcIiBdID0gdmFsdWUpO1xuXHR9XG5cdHJldHVybiBjYWNoZTtcbn1cblxuLyoqXG4gKiBNYXJrIGEgZnVuY3Rpb24gZm9yIHNwZWNpYWwgdXNlIGJ5IFNpenpsZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIG1hcmtcbiAqL1xuZnVuY3Rpb24gbWFya0Z1bmN0aW9uKCBmbiApIHtcblx0Zm5bIGV4cGFuZG8gXSA9IHRydWU7XG5cdHJldHVybiBmbjtcbn1cblxuLyoqXG4gKiBTdXBwb3J0IHRlc3RpbmcgdXNpbmcgYW4gZWxlbWVudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gUGFzc2VkIHRoZSBjcmVhdGVkIGVsZW1lbnQgYW5kIHJldHVybnMgYSBib29sZWFuIHJlc3VsdFxuICovXG5mdW5jdGlvbiBhc3NlcnQoIGZuICkge1xuXHR2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZmllbGRzZXRcIik7XG5cblx0dHJ5IHtcblx0XHRyZXR1cm4gISFmbiggZWwgKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBmaW5hbGx5IHtcblx0XHQvLyBSZW1vdmUgZnJvbSBpdHMgcGFyZW50IGJ5IGRlZmF1bHRcblx0XHRpZiAoIGVsLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbCApO1xuXHRcdH1cblx0XHQvLyByZWxlYXNlIG1lbW9yeSBpbiBJRVxuXHRcdGVsID0gbnVsbDtcblx0fVxufVxuXG4vKipcbiAqIEFkZHMgdGhlIHNhbWUgaGFuZGxlciBmb3IgYWxsIG9mIHRoZSBzcGVjaWZpZWQgYXR0cnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBhdHRycyBQaXBlLXNlcGFyYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgVGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgYXBwbGllZFxuICovXG5mdW5jdGlvbiBhZGRIYW5kbGUoIGF0dHJzLCBoYW5kbGVyICkge1xuXHR2YXIgYXJyID0gYXR0cnMuc3BsaXQoXCJ8XCIpLFxuXHRcdGkgPSBhcnIubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdEV4cHIuYXR0ckhhbmRsZVsgYXJyW2ldIF0gPSBoYW5kbGVyO1xuXHR9XG59XG5cbi8qKlxuICogQ2hlY2tzIGRvY3VtZW50IG9yZGVyIG9mIHR3byBzaWJsaW5nc1xuICogQHBhcmFtIHtFbGVtZW50fSBhXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFJldHVybnMgbGVzcyB0aGFuIDAgaWYgYSBwcmVjZWRlcyBiLCBncmVhdGVyIHRoYW4gMCBpZiBhIGZvbGxvd3MgYlxuICovXG5mdW5jdGlvbiBzaWJsaW5nQ2hlY2soIGEsIGIgKSB7XG5cdHZhciBjdXIgPSBiICYmIGEsXG5cdFx0ZGlmZiA9IGN1ciAmJiBhLm5vZGVUeXBlID09PSAxICYmIGIubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4O1xuXG5cdC8vIFVzZSBJRSBzb3VyY2VJbmRleCBpZiBhdmFpbGFibGUgb24gYm90aCBub2Rlc1xuXHRpZiAoIGRpZmYgKSB7XG5cdFx0cmV0dXJuIGRpZmY7XG5cdH1cblxuXHQvLyBDaGVjayBpZiBiIGZvbGxvd3MgYVxuXHRpZiAoIGN1ciApIHtcblx0XHR3aGlsZSAoIChjdXIgPSBjdXIubmV4dFNpYmxpbmcpICkge1xuXHRcdFx0aWYgKCBjdXIgPT09IGIgKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYSA/IDEgOiAtMTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGlucHV0IHR5cGVzXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVJbnB1dFBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgYnV0dG9uc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQnV0dG9uUHNldWRvKCB0eXBlICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0cmV0dXJuIChuYW1lID09PSBcImlucHV0XCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIikgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgOmVuYWJsZWQvOmRpc2FibGVkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGRpc2FibGVkIHRydWUgZm9yIDpkaXNhYmxlZDsgZmFsc2UgZm9yIDplbmFibGVkXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURpc2FibGVkUHNldWRvKCBkaXNhYmxlZCApIHtcblxuXHQvLyBLbm93biA6ZGlzYWJsZWQgZmFsc2UgcG9zaXRpdmVzOiBmaWVsZHNldFtkaXNhYmxlZF0gPiBsZWdlbmQ6bnRoLW9mLXR5cGUobisyKSA6Y2FuLWRpc2FibGVcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gT25seSBjZXJ0YWluIGVsZW1lbnRzIGNhbiBtYXRjaCA6ZW5hYmxlZCBvciA6ZGlzYWJsZWRcblx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1lbmFibGVkXG5cdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0b3ItZGlzYWJsZWRcblx0XHRpZiAoIFwiZm9ybVwiIGluIGVsZW0gKSB7XG5cblx0XHRcdC8vIENoZWNrIGZvciBpbmhlcml0ZWQgZGlzYWJsZWRuZXNzIG9uIHJlbGV2YW50IG5vbi1kaXNhYmxlZCBlbGVtZW50czpcblx0XHRcdC8vICogbGlzdGVkIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50cyBpbiBhIGRpc2FibGVkIGZpZWxkc2V0XG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY2F0ZWdvcnktbGlzdGVkXG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2VwdC1mZS1kaXNhYmxlZFxuXHRcdFx0Ly8gKiBvcHRpb24gZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtb3B0aW9uLWRpc2FibGVkXG5cdFx0XHQvLyBBbGwgc3VjaCBlbGVtZW50cyBoYXZlIGEgXCJmb3JtXCIgcHJvcGVydHkuXG5cdFx0XHRpZiAoIGVsZW0ucGFyZW50Tm9kZSAmJiBlbGVtLmRpc2FibGVkID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHQvLyBPcHRpb24gZWxlbWVudHMgZGVmZXIgdG8gYSBwYXJlbnQgb3B0Z3JvdXAgaWYgcHJlc2VudFxuXHRcdFx0XHRpZiAoIFwibGFiZWxcIiBpbiBlbGVtICkge1xuXHRcdFx0XHRcdGlmICggXCJsYWJlbFwiIGluIGVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLnBhcmVudE5vZGUuZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDExXG5cdFx0XHRcdC8vIFVzZSB0aGUgaXNEaXNhYmxlZCBzaG9ydGN1dCBwcm9wZXJ0eSB0byBjaGVjayBmb3IgZGlzYWJsZWQgZmllbGRzZXQgYW5jZXN0b3JzXG5cdFx0XHRcdHJldHVybiBlbGVtLmlzRGlzYWJsZWQgPT09IGRpc2FibGVkIHx8XG5cblx0XHRcdFx0XHQvLyBXaGVyZSB0aGVyZSBpcyBubyBpc0Rpc2FibGVkLCBjaGVjayBtYW51YWxseVxuXHRcdFx0XHRcdC8qIGpzaGludCAtVzAxOCAqL1xuXHRcdFx0XHRcdGVsZW0uaXNEaXNhYmxlZCAhPT0gIWRpc2FibGVkICYmXG5cdFx0XHRcdFx0XHRpbkRpc2FibGVkRmllbGRzZXQoIGVsZW0gKSA9PT0gZGlzYWJsZWQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblxuXHRcdC8vIFRyeSB0byB3aW5ub3cgb3V0IGVsZW1lbnRzIHRoYXQgY2FuJ3QgYmUgZGlzYWJsZWQgYmVmb3JlIHRydXN0aW5nIHRoZSBkaXNhYmxlZCBwcm9wZXJ0eS5cblx0XHQvLyBTb21lIHZpY3RpbXMgZ2V0IGNhdWdodCBpbiBvdXIgbmV0IChsYWJlbCwgbGVnZW5kLCBtZW51LCB0cmFjayksIGJ1dCBpdCBzaG91bGRuJ3Rcblx0XHQvLyBldmVuIGV4aXN0IG9uIHRoZW0sIGxldCBhbG9uZSBoYXZlIGEgYm9vbGVhbiB2YWx1ZS5cblx0XHR9IGVsc2UgaWYgKCBcImxhYmVsXCIgaW4gZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHR9XG5cblx0XHQvLyBSZW1haW5pbmcgZWxlbWVudHMgYXJlIG5laXRoZXIgOmVuYWJsZWQgbm9yIDpkaXNhYmxlZFxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIHBvc2l0aW9uYWxzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICovXG5mdW5jdGlvbiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmbiApIHtcblx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggYXJndW1lbnQgKSB7XG5cdFx0YXJndW1lbnQgPSArYXJndW1lbnQ7XG5cdFx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdHZhciBqLFxuXHRcdFx0XHRtYXRjaEluZGV4ZXMgPSBmbiggW10sIHNlZWQubGVuZ3RoLCBhcmd1bWVudCApLFxuXHRcdFx0XHRpID0gbWF0Y2hJbmRleGVzLmxlbmd0aDtcblxuXHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBpbmRleGVzXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCBzZWVkWyAoaiA9IG1hdGNoSW5kZXhlc1tpXSkgXSApIHtcblx0XHRcdFx0XHRzZWVkW2pdID0gIShtYXRjaGVzW2pdID0gc2VlZFtqXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBTaXp6bGUgY29udGV4dFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdD19IGNvbnRleHRcbiAqIEByZXR1cm5zIHtFbGVtZW50fE9iamVjdHxCb29sZWFufSBUaGUgaW5wdXQgbm9kZSBpZiBhY2NlcHRhYmxlLCBvdGhlcndpc2UgYSBmYWxzeSB2YWx1ZVxuICovXG5mdW5jdGlvbiB0ZXN0Q29udGV4dCggY29udGV4dCApIHtcblx0cmV0dXJuIGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29udGV4dDtcbn1cblxuLy8gRXhwb3NlIHN1cHBvcnQgdmFycyBmb3IgY29udmVuaWVuY2VcbnN1cHBvcnQgPSBTaXp6bGUuc3VwcG9ydCA9IHt9O1xuXG4vKipcbiAqIERldGVjdHMgWE1MIG5vZGVzXG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBlbGVtIEFuIGVsZW1lbnQgb3IgYSBkb2N1bWVudFxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWZmIGVsZW0gaXMgYSBub24tSFRNTCBYTUwgbm9kZVxuICovXG5pc1hNTCA9IFNpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHR2YXIgbmFtZXNwYWNlID0gZWxlbS5uYW1lc3BhY2VVUkksXG5cdFx0ZG9jRWxlbSA9IChlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSkuZG9jdW1lbnRFbGVtZW50O1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OFxuXHQvLyBBc3N1bWUgSFRNTCB3aGVuIGRvY3VtZW50RWxlbWVudCBkb2Vzbid0IHlldCBleGlzdCwgc3VjaCBhcyBpbnNpZGUgbG9hZGluZyBpZnJhbWVzXG5cdC8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC80ODMzXG5cdHJldHVybiAhcmh0bWwudGVzdCggbmFtZXNwYWNlIHx8IGRvY0VsZW0gJiYgZG9jRWxlbS5ub2RlTmFtZSB8fCBcIkhUTUxcIiApO1xufTtcblxuLyoqXG4gKiBTZXRzIGRvY3VtZW50LXJlbGF0ZWQgdmFyaWFibGVzIG9uY2UgYmFzZWQgb24gdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IFtkb2NdIEFuIGVsZW1lbnQgb3IgZG9jdW1lbnQgb2JqZWN0IHRvIHVzZSB0byBzZXQgdGhlIGRvY3VtZW50XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKi9cbnNldERvY3VtZW50ID0gU2l6emxlLnNldERvY3VtZW50ID0gZnVuY3Rpb24oIG5vZGUgKSB7XG5cdHZhciBoYXNDb21wYXJlLCBzdWJXaW5kb3csXG5cdFx0ZG9jID0gbm9kZSA/IG5vZGUub3duZXJEb2N1bWVudCB8fCBub2RlIDogcHJlZmVycmVkRG9jO1xuXG5cdC8vIFJldHVybiBlYXJseSBpZiBkb2MgaXMgaW52YWxpZCBvciBhbHJlYWR5IHNlbGVjdGVkXG5cdGlmICggZG9jID09PSBkb2N1bWVudCB8fCBkb2Mubm9kZVR5cGUgIT09IDkgfHwgIWRvYy5kb2N1bWVudEVsZW1lbnQgKSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50O1xuXHR9XG5cblx0Ly8gVXBkYXRlIGdsb2JhbCB2YXJpYWJsZXNcblx0ZG9jdW1lbnQgPSBkb2M7XG5cdGRvY0VsZW0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cdGRvY3VtZW50SXNIVE1MID0gIWlzWE1MKCBkb2N1bWVudCApO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDktMTEsIEVkZ2Vcblx0Ly8gQWNjZXNzaW5nIGlmcmFtZSBkb2N1bWVudHMgYWZ0ZXIgdW5sb2FkIHRocm93cyBcInBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3JzIChqUXVlcnkgIzEzOTM2KVxuXHRpZiAoIHByZWZlcnJlZERvYyAhPT0gZG9jdW1lbnQgJiZcblx0XHQoc3ViV2luZG93ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcpICYmIHN1YldpbmRvdy50b3AgIT09IHN1YldpbmRvdyApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDExLCBFZGdlXG5cdFx0aWYgKCBzdWJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lciApIHtcblx0XHRcdHN1YldpbmRvdy5hZGRFdmVudExpc3RlbmVyKCBcInVubG9hZFwiLCB1bmxvYWRIYW5kbGVyLCBmYWxzZSApO1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDEwIG9ubHlcblx0XHR9IGVsc2UgaWYgKCBzdWJXaW5kb3cuYXR0YWNoRXZlbnQgKSB7XG5cdFx0XHRzdWJXaW5kb3cuYXR0YWNoRXZlbnQoIFwib251bmxvYWRcIiwgdW5sb2FkSGFuZGxlciApO1xuXHRcdH1cblx0fVxuXG5cdC8qIEF0dHJpYnV0ZXNcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIFN1cHBvcnQ6IElFPDhcblx0Ly8gVmVyaWZ5IHRoYXQgZ2V0QXR0cmlidXRlIHJlYWxseSByZXR1cm5zIGF0dHJpYnV0ZXMgYW5kIG5vdCBwcm9wZXJ0aWVzXG5cdC8vIChleGNlcHRpbmcgSUU4IGJvb2xlYW5zKVxuXHRzdXBwb3J0LmF0dHJpYnV0ZXMgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdGVsLmNsYXNzTmFtZSA9IFwiaVwiO1xuXHRcdHJldHVybiAhZWwuZ2V0QXR0cmlidXRlKFwiY2xhc3NOYW1lXCIpO1xuXHR9KTtcblxuXHQvKiBnZXRFbGVtZW50KHMpQnkqXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikgcmV0dXJucyBvbmx5IGVsZW1lbnRzXG5cdHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdGVsLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVDb21tZW50KFwiXCIpICk7XG5cdFx0cmV0dXJuICFlbC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikubGVuZ3RoO1xuXHR9KTtcblxuXHQvLyBTdXBwb3J0OiBJRTw5XG5cdHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IHJuYXRpdmUudGVzdCggZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApO1xuXG5cdC8vIFN1cHBvcnQ6IElFPDEwXG5cdC8vIENoZWNrIGlmIGdldEVsZW1lbnRCeUlkIHJldHVybnMgZWxlbWVudHMgYnkgbmFtZVxuXHQvLyBUaGUgYnJva2VuIGdldEVsZW1lbnRCeUlkIG1ldGhvZHMgZG9uJ3QgcGljayB1cCBwcm9ncmFtbWF0aWNhbGx5LXNldCBuYW1lcyxcblx0Ly8gc28gdXNlIGEgcm91bmRhYm91dCBnZXRFbGVtZW50c0J5TmFtZSB0ZXN0XG5cdHN1cHBvcnQuZ2V0QnlJZCA9IGFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5pZCA9IGV4cGFuZG87XG5cdFx0cmV0dXJuICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSB8fCAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIGV4cGFuZG8gKS5sZW5ndGg7XG5cdH0pO1xuXG5cdC8vIElEIGZpbHRlciBhbmQgZmluZFxuXHRpZiAoIHN1cHBvcnQuZ2V0QnlJZCApIHtcblx0XHRFeHByLmZpbHRlcltcIklEXCJdID0gZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZShcImlkXCIpID09PSBhdHRySWQ7XG5cdFx0XHR9O1xuXHRcdH07XG5cdFx0RXhwci5maW5kW1wiSURcIl0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XG5cdFx0XHRcdHJldHVybiBlbGVtID8gWyBlbGVtIF0gOiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdEV4cHIuZmlsdGVyW1wiSURcIl0gPSAgZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpO1xuXHRcdFx0XHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlID09PSBhdHRySWQ7XG5cdFx0XHR9O1xuXHRcdH07XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA2IC0gNyBvbmx5XG5cdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgaXMgbm90IHJlbGlhYmxlIGFzIGEgZmluZCBzaG9ydGN1dFxuXHRcdEV4cHIuZmluZFtcIklEXCJdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIG5vZGUsIGksIGVsZW1zLFxuXHRcdFx0XHRcdGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXG5cdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdC8vIFZlcmlmeSB0aGUgaWQgYXR0cmlidXRlXG5cdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpO1xuXHRcdFx0XHRcdGlmICggbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZCApIHtcblx0XHRcdFx0XHRcdHJldHVybiBbIGVsZW0gXTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBGYWxsIGJhY2sgb24gZ2V0RWxlbWVudHNCeU5hbWVcblx0XHRcdFx0XHRlbGVtcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeU5hbWUoIGlkICk7XG5cdFx0XHRcdFx0aSA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoZWxlbSA9IGVsZW1zW2krK10pICkge1xuXHRcdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpO1xuXHRcdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gWyBlbGVtIF07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHQvLyBUYWdcblx0RXhwci5maW5kW1wiVEFHXCJdID0gc3VwcG9ydC5nZXRFbGVtZW50c0J5VGFnTmFtZSA/XG5cdFx0ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTtcblxuXHRcdFx0Ly8gRG9jdW1lbnRGcmFnbWVudCBub2RlcyBkb24ndCBoYXZlIGdFQlROXG5cdFx0XHR9IGVsc2UgaWYgKCBzdXBwb3J0LnFzYSApIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnICk7XG5cdFx0XHR9XG5cdFx0fSA6XG5cblx0XHRmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkge1xuXHRcdFx0dmFyIGVsZW0sXG5cdFx0XHRcdHRtcCA9IFtdLFxuXHRcdFx0XHRpID0gMCxcblx0XHRcdFx0Ly8gQnkgaGFwcHkgY29pbmNpZGVuY2UsIGEgKGJyb2tlbikgZ0VCVE4gYXBwZWFycyBvbiBEb2N1bWVudEZyYWdtZW50IG5vZGVzIHRvb1xuXHRcdFx0XHRyZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIEZpbHRlciBvdXQgcG9zc2libGUgY29tbWVudHNcblx0XHRcdGlmICggdGFnID09PSBcIipcIiApIHtcblx0XHRcdFx0d2hpbGUgKCAoZWxlbSA9IHJlc3VsdHNbaSsrXSkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRcdFx0dG1wLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdG1wO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0fTtcblxuXHQvLyBDbGFzc1xuXHRFeHByLmZpbmRbXCJDTEFTU1wiXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiBmdW5jdGlvbiggY2xhc3NOYW1lLCBjb250ZXh0ICkge1xuXHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIGNsYXNzTmFtZSApO1xuXHRcdH1cblx0fTtcblxuXHQvKiBRU0EvbWF0Y2hlc1NlbGVjdG9yXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBRU0EgYW5kIG1hdGNoZXNTZWxlY3RvciBzdXBwb3J0XG5cblx0Ly8gbWF0Y2hlc1NlbGVjdG9yKDphY3RpdmUpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChJRTkvT3BlcmEgMTEuNSlcblx0cmJ1Z2d5TWF0Y2hlcyA9IFtdO1xuXG5cdC8vIHFTYSg6Zm9jdXMpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChDaHJvbWUgMjEpXG5cdC8vIFdlIGFsbG93IHRoaXMgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBJRTgvOSB0aGF0IHRocm93cyBhbiBlcnJvclxuXHQvLyB3aGVuZXZlciBgZG9jdW1lbnQuYWN0aXZlRWxlbWVudGAgaXMgYWNjZXNzZWQgb24gYW4gaWZyYW1lXG5cdC8vIFNvLCB3ZSBhbGxvdyA6Zm9jdXMgdG8gcGFzcyB0aHJvdWdoIFFTQSBhbGwgdGhlIHRpbWUgdG8gYXZvaWQgdGhlIElFIGVycm9yXG5cdC8vIFNlZSBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTMzNzhcblx0cmJ1Z2d5UVNBID0gW107XG5cblx0aWYgKCAoc3VwcG9ydC5xc2EgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKSkgKSB7XG5cdFx0Ly8gQnVpbGQgUVNBIHJlZ2V4XG5cdFx0Ly8gUmVnZXggc3RyYXRlZ3kgYWRvcHRlZCBmcm9tIERpZWdvIFBlcmluaVxuXHRcdGFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHQvLyBTZWxlY3QgaXMgc2V0IHRvIGVtcHR5IHN0cmluZyBvbiBwdXJwb3NlXG5cdFx0XHQvLyBUaGlzIGlzIHRvIHRlc3QgSUUncyB0cmVhdG1lbnQgb2Ygbm90IGV4cGxpY2l0bHlcblx0XHRcdC8vIHNldHRpbmcgYSBib29sZWFuIGNvbnRlbnQgYXR0cmlidXRlLFxuXHRcdFx0Ly8gc2luY2UgaXRzIHByZXNlbmNlIHNob3VsZCBiZSBlbm91Z2hcblx0XHRcdC8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMjM1OVxuXHRcdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5pbm5lckhUTUwgPSBcIjxhIGlkPSdcIiArIGV4cGFuZG8gKyBcIic+PC9hPlwiICtcblx0XHRcdFx0XCI8c2VsZWN0IGlkPSdcIiArIGV4cGFuZG8gKyBcIi1cXHJcXFxcJyBtc2FsbG93Y2FwdHVyZT0nJz5cIiArXG5cdFx0XHRcdFwiPG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD5cIjtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4LCBPcGVyYSAxMS0xMi4xNlxuXHRcdFx0Ly8gTm90aGluZyBzaG91bGQgYmUgc2VsZWN0ZWQgd2hlbiBlbXB0eSBzdHJpbmdzIGZvbGxvdyBePSBvciAkPSBvciAqPVxuXHRcdFx0Ly8gVGhlIHRlc3QgYXR0cmlidXRlIG11c3QgYmUgdW5rbm93biBpbiBPcGVyYSBidXQgXCJzYWZlXCIgZm9yIFdpblJUXG5cdFx0XHQvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2hoNDY1Mzg4LmFzcHgjYXR0cmlidXRlX3NlY3Rpb25cblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbChcIlttc2FsbG93Y2FwdHVyZV49JyddXCIpLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiWypeJF09XCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86Jyd8XFxcIlxcXCIpXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XG5cdFx0XHQvLyBCb29sZWFuIGF0dHJpYnV0ZXMgYW5kIFwidmFsdWVcIiBhcmUgbm90IHRyZWF0ZWQgY29ycmVjdGx5XG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKFwiW3NlbGVjdGVkXVwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86dmFsdWV8XCIgKyBib29sZWFucyArIFwiKVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZTwyOSwgQW5kcm9pZDw0LjQsIFNhZmFyaTw3LjArLCBpT1M8Ny4wKywgUGhhbnRvbUpTPDEuOS44K1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJbaWR+PVwiICsgZXhwYW5kbyArIFwiLV1cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goXCJ+PVwiKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gV2Via2l0L09wZXJhIC0gOmNoZWNrZWQgc2hvdWxkIHJldHVybiBzZWxlY3RlZCBvcHRpb24gZWxlbWVudHNcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbChcIjpjaGVja2VkXCIpLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goXCI6Y2hlY2tlZFwiKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrLCBpT1MgOCtcblx0XHRcdC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY4NTFcblx0XHRcdC8vIEluLXBhZ2UgYHNlbGVjdG9yI2lkIHNpYmxpbmctY29tYmluYXRvciBzZWxlY3RvcmAgZmFpbHNcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiYSNcIiArIGV4cGFuZG8gKyBcIisqXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKFwiLiMuK1srfl1cIik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0ZWwuaW5uZXJIVE1MID0gXCI8YSBocmVmPScnIGRpc2FibGVkPSdkaXNhYmxlZCc+PC9hPlwiICtcblx0XHRcdFx0XCI8c2VsZWN0IGRpc2FibGVkPSdkaXNhYmxlZCc+PG9wdGlvbi8+PC9zZWxlY3Q+XCI7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IFdpbmRvd3MgOCBOYXRpdmUgQXBwc1xuXHRcdFx0Ly8gVGhlIHR5cGUgYW5kIG5hbWUgYXR0cmlidXRlcyBhcmUgcmVzdHJpY3RlZCBkdXJpbmcgLmlubmVySFRNTCBhc3NpZ25tZW50XG5cdFx0XHR2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG5cdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcImhpZGRlblwiICk7XG5cdFx0XHRlbC5hcHBlbmRDaGlsZCggaW5wdXQgKS5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcIkRcIiApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRThcblx0XHRcdC8vIEVuZm9yY2UgY2FzZS1zZW5zaXRpdml0eSBvZiBuYW1lIGF0dHJpYnV0ZVxuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKFwiW25hbWU9ZF1cIikubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJuYW1lXCIgKyB3aGl0ZXNwYWNlICsgXCIqWypeJHwhfl0/PVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZGIDMuNSAtIDplbmFibGVkLzpkaXNhYmxlZCBhbmQgaGlkZGVuIGVsZW1lbnRzIChoaWRkZW4gZWxlbWVudHMgYXJlIHN0aWxsIGVuYWJsZWQpXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKFwiOmVuYWJsZWRcIikubGVuZ3RoICE9PSAyICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6ZW5hYmxlZFwiLCBcIjpkaXNhYmxlZFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOS0xMStcblx0XHRcdC8vIElFJ3MgOmRpc2FibGVkIHNlbGVjdG9yIGRvZXMgbm90IHBpY2sgdXAgdGhlIGNoaWxkcmVuIG9mIGRpc2FibGVkIGZpZWxkc2V0c1xuXHRcdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5kaXNhYmxlZCA9IHRydWU7XG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCI6ZGlzYWJsZWRcIikubGVuZ3RoICE9PSAyICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6ZW5hYmxlZFwiLCBcIjpkaXNhYmxlZFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9wZXJhIDEwLTExIGRvZXMgbm90IHRocm93IG9uIHBvc3QtY29tbWEgaW52YWxpZCBwc2V1ZG9zXG5cdFx0XHRlbC5xdWVyeVNlbGVjdG9yQWxsKFwiKiw6eFwiKTtcblx0XHRcdHJidWdneVFTQS5wdXNoKFwiLC4qOlwiKTtcblx0XHR9KTtcblx0fVxuXG5cdGlmICggKHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yID0gcm5hdGl2ZS50ZXN0KCAobWF0Y2hlcyA9IGRvY0VsZW0ubWF0Y2hlcyB8fFxuXHRcdGRvY0VsZW0ud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5tb3pNYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm9NYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm1zTWF0Y2hlc1NlbGVjdG9yKSApKSApIHtcblxuXHRcdGFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHQvLyBDaGVjayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBtYXRjaGVzU2VsZWN0b3Jcblx0XHRcdC8vIG9uIGEgZGlzY29ubmVjdGVkIG5vZGUgKElFIDkpXG5cdFx0XHRzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoID0gbWF0Y2hlcy5jYWxsKCBlbCwgXCIqXCIgKTtcblxuXHRcdFx0Ly8gVGhpcyBzaG91bGQgZmFpbCB3aXRoIGFuIGV4Y2VwdGlvblxuXHRcdFx0Ly8gR2Vja28gZG9lcyBub3QgZXJyb3IsIHJldHVybnMgZmFsc2UgaW5zdGVhZFxuXHRcdFx0bWF0Y2hlcy5jYWxsKCBlbCwgXCJbcyE9JyddOnhcIiApO1xuXHRcdFx0cmJ1Z2d5TWF0Y2hlcy5wdXNoKCBcIiE9XCIsIHBzZXVkb3MgKTtcblx0XHR9KTtcblx0fVxuXG5cdHJidWdneVFTQSA9IHJidWdneVFTQS5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5UVNBLmpvaW4oXCJ8XCIpICk7XG5cdHJidWdneU1hdGNoZXMgPSByYnVnZ3lNYXRjaGVzLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lNYXRjaGVzLmpvaW4oXCJ8XCIpICk7XG5cblx0LyogQ29udGFpbnNcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXHRoYXNDb21wYXJlID0gcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICk7XG5cblx0Ly8gRWxlbWVudCBjb250YWlucyBhbm90aGVyXG5cdC8vIFB1cnBvc2VmdWxseSBzZWxmLWV4Y2x1c2l2ZVxuXHQvLyBBcyBpbiwgYW4gZWxlbWVudCBkb2VzIG5vdCBjb250YWluIGl0c2VsZlxuXHRjb250YWlucyA9IGhhc0NvbXBhcmUgfHwgcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbnRhaW5zICkgP1xuXHRcdGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdFx0dmFyIGFkb3duID0gYS5ub2RlVHlwZSA9PT0gOSA/IGEuZG9jdW1lbnRFbGVtZW50IDogYSxcblx0XHRcdFx0YnVwID0gYiAmJiBiLnBhcmVudE5vZGU7XG5cdFx0XHRyZXR1cm4gYSA9PT0gYnVwIHx8ICEhKCBidXAgJiYgYnVwLm5vZGVUeXBlID09PSAxICYmIChcblx0XHRcdFx0YWRvd24uY29udGFpbnMgP1xuXHRcdFx0XHRcdGFkb3duLmNvbnRhaW5zKCBidXAgKSA6XG5cdFx0XHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAmJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBidXAgKSAmIDE2XG5cdFx0XHQpKTtcblx0XHR9IDpcblx0XHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHRcdGlmICggYiApIHtcblx0XHRcdFx0d2hpbGUgKCAoYiA9IGIucGFyZW50Tm9kZSkgKSB7XG5cdFx0XHRcdFx0aWYgKCBiID09PSBhICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblxuXHQvKiBTb3J0aW5nXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBEb2N1bWVudCBvcmRlciBzb3J0aW5nXG5cdHNvcnRPcmRlciA9IGhhc0NvbXBhcmUgP1xuXHRmdW5jdGlvbiggYSwgYiApIHtcblxuXHRcdC8vIEZsYWcgZm9yIGR1cGxpY2F0ZSByZW1vdmFsXG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdC8vIFNvcnQgb24gbWV0aG9kIGV4aXN0ZW5jZSBpZiBvbmx5IG9uZSBpbnB1dCBoYXMgY29tcGFyZURvY3VtZW50UG9zaXRpb25cblx0XHR2YXIgY29tcGFyZSA9ICFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIC0gIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb247XG5cdFx0aWYgKCBjb21wYXJlICkge1xuXHRcdFx0cmV0dXJuIGNvbXBhcmU7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsY3VsYXRlIHBvc2l0aW9uIGlmIGJvdGggaW5wdXRzIGJlbG9uZyB0byB0aGUgc2FtZSBkb2N1bWVudFxuXHRcdGNvbXBhcmUgPSAoIGEub3duZXJEb2N1bWVudCB8fCBhICkgPT09ICggYi5vd25lckRvY3VtZW50IHx8IGIgKSA/XG5cdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBiICkgOlxuXG5cdFx0XHQvLyBPdGhlcndpc2Ugd2Uga25vdyB0aGV5IGFyZSBkaXNjb25uZWN0ZWRcblx0XHRcdDE7XG5cblx0XHQvLyBEaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRpZiAoIGNvbXBhcmUgJiAxIHx8XG5cdFx0XHQoIXN1cHBvcnQuc29ydERldGFjaGVkICYmIGIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGEgKSA9PT0gY29tcGFyZSkgKSB7XG5cblx0XHRcdC8vIENob29zZSB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IGlzIHJlbGF0ZWQgdG8gb3VyIHByZWZlcnJlZCBkb2N1bWVudFxuXHRcdFx0aWYgKCBhID09PSBkb2N1bWVudCB8fCBhLm93bmVyRG9jdW1lbnQgPT09IHByZWZlcnJlZERvYyAmJiBjb250YWlucyhwcmVmZXJyZWREb2MsIGEpICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGIgPT09IGRvY3VtZW50IHx8IGIub3duZXJEb2N1bWVudCA9PT0gcHJlZmVycmVkRG9jICYmIGNvbnRhaW5zKHByZWZlcnJlZERvYywgYikgKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWludGFpbiBvcmlnaW5hbCBvcmRlclxuXHRcdFx0cmV0dXJuIHNvcnRJbnB1dCA/XG5cdFx0XHRcdCggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tcGFyZSAmIDQgPyAtMSA6IDE7XG5cdH0gOlxuXHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHQvLyBFeGl0IGVhcmx5IGlmIHRoZSBub2RlcyBhcmUgaWRlbnRpY2FsXG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdHZhciBjdXIsXG5cdFx0XHRpID0gMCxcblx0XHRcdGF1cCA9IGEucGFyZW50Tm9kZSxcblx0XHRcdGJ1cCA9IGIucGFyZW50Tm9kZSxcblx0XHRcdGFwID0gWyBhIF0sXG5cdFx0XHRicCA9IFsgYiBdO1xuXG5cdFx0Ly8gUGFyZW50bGVzcyBub2RlcyBhcmUgZWl0aGVyIGRvY3VtZW50cyBvciBkaXNjb25uZWN0ZWRcblx0XHRpZiAoICFhdXAgfHwgIWJ1cCApIHtcblx0XHRcdHJldHVybiBhID09PSBkb2N1bWVudCA/IC0xIDpcblx0XHRcdFx0YiA9PT0gZG9jdW1lbnQgPyAxIDpcblx0XHRcdFx0YXVwID8gLTEgOlxuXHRcdFx0XHRidXAgPyAxIDpcblx0XHRcdFx0c29ydElucHV0ID9cblx0XHRcdFx0KCBpbmRleE9mKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOlxuXHRcdFx0XHQwO1xuXG5cdFx0Ly8gSWYgdGhlIG5vZGVzIGFyZSBzaWJsaW5ncywgd2UgY2FuIGRvIGEgcXVpY2sgY2hlY2tcblx0XHR9IGVsc2UgaWYgKCBhdXAgPT09IGJ1cCApIHtcblx0XHRcdHJldHVybiBzaWJsaW5nQ2hlY2soIGEsIGIgKTtcblx0XHR9XG5cblx0XHQvLyBPdGhlcndpc2Ugd2UgbmVlZCBmdWxsIGxpc3RzIG9mIHRoZWlyIGFuY2VzdG9ycyBmb3IgY29tcGFyaXNvblxuXHRcdGN1ciA9IGE7XG5cdFx0d2hpbGUgKCAoY3VyID0gY3VyLnBhcmVudE5vZGUpICkge1xuXHRcdFx0YXAudW5zaGlmdCggY3VyICk7XG5cdFx0fVxuXHRcdGN1ciA9IGI7XG5cdFx0d2hpbGUgKCAoY3VyID0gY3VyLnBhcmVudE5vZGUpICkge1xuXHRcdFx0YnAudW5zaGlmdCggY3VyICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2FsayBkb3duIHRoZSB0cmVlIGxvb2tpbmcgZm9yIGEgZGlzY3JlcGFuY3lcblx0XHR3aGlsZSAoIGFwW2ldID09PSBicFtpXSApIHtcblx0XHRcdGkrKztcblx0XHR9XG5cblx0XHRyZXR1cm4gaSA/XG5cdFx0XHQvLyBEbyBhIHNpYmxpbmcgY2hlY2sgaWYgdGhlIG5vZGVzIGhhdmUgYSBjb21tb24gYW5jZXN0b3Jcblx0XHRcdHNpYmxpbmdDaGVjayggYXBbaV0sIGJwW2ldICkgOlxuXG5cdFx0XHQvLyBPdGhlcndpc2Ugbm9kZXMgaW4gb3VyIGRvY3VtZW50IHNvcnQgZmlyc3Rcblx0XHRcdGFwW2ldID09PSBwcmVmZXJyZWREb2MgPyAtMSA6XG5cdFx0XHRicFtpXSA9PT0gcHJlZmVycmVkRG9jID8gMSA6XG5cdFx0XHQwO1xuXHR9O1xuXG5cdHJldHVybiBkb2N1bWVudDtcbn07XG5cblNpenpsZS5tYXRjaGVzID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1lbnRzICkge1xuXHRyZXR1cm4gU2l6emxlKCBleHByLCBudWxsLCBudWxsLCBlbGVtZW50cyApO1xufTtcblxuU2l6emxlLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBlbGVtLCBleHByICkge1xuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0aWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT09IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdH1cblxuXHRpZiAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yICYmIGRvY3VtZW50SXNIVE1MICYmXG5cdFx0IW5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGVbIGV4cHIgKyBcIiBcIiBdICYmXG5cdFx0KCAhcmJ1Z2d5TWF0Y2hlcyB8fCAhcmJ1Z2d5TWF0Y2hlcy50ZXN0KCBleHByICkgKSAmJlxuXHRcdCggIXJidWdneVFTQSAgICAgfHwgIXJidWdneVFTQS50ZXN0KCBleHByICkgKSApIHtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBlbGVtLCBleHByICk7XG5cblx0XHRcdC8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRcdGlmICggcmV0IHx8IHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggfHxcblx0XHRcdFx0XHQvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudFxuXHRcdFx0XHRcdC8vIGZyYWdtZW50IGluIElFIDlcblx0XHRcdFx0XHRlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09IDExICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUoIGV4cHIsIHRydWUgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gU2l6emxlKCBleHByLCBkb2N1bWVudCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5ndGggPiAwO1xufTtcblxuU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oIGNvbnRleHQsIGVsZW0gKSB7XG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHRpZiAoICggY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0fVxuXHRyZXR1cm4gY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKTtcbn07XG5cblNpenpsZS5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHRpZiAoICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0fVxuXG5cdHZhciBmbiA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZS50b0xvd2VyQ2FzZSgpIF0sXG5cdFx0Ly8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKGpRdWVyeSAjMTM4MDcpXG5cdFx0dmFsID0gZm4gJiYgaGFzT3duLmNhbGwoIEV4cHIuYXR0ckhhbmRsZSwgbmFtZS50b0xvd2VyQ2FzZSgpICkgP1xuXHRcdFx0Zm4oIGVsZW0sIG5hbWUsICFkb2N1bWVudElzSFRNTCApIDpcblx0XHRcdHVuZGVmaW5lZDtcblxuXHRyZXR1cm4gdmFsICE9PSB1bmRlZmluZWQgP1xuXHRcdHZhbCA6XG5cdFx0c3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApIDpcblx0XHRcdCh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUobmFtZSkpICYmIHZhbC5zcGVjaWZpZWQgP1xuXHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xufTtcblxuU2l6emxlLmVzY2FwZSA9IGZ1bmN0aW9uKCBzZWwgKSB7XG5cdHJldHVybiAoc2VsICsgXCJcIikucmVwbGFjZSggcmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApO1xufTtcblxuU2l6emxlLmVycm9yID0gZnVuY3Rpb24oIG1zZyApIHtcblx0dGhyb3cgbmV3IEVycm9yKCBcIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246IFwiICsgbXNnICk7XG59O1xuXG4vKipcbiAqIERvY3VtZW50IHNvcnRpbmcgYW5kIHJlbW92aW5nIGR1cGxpY2F0ZXNcbiAqIEBwYXJhbSB7QXJyYXlMaWtlfSByZXN1bHRzXG4gKi9cblNpenpsZS51bmlxdWVTb3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7XG5cdHZhciBlbGVtLFxuXHRcdGR1cGxpY2F0ZXMgPSBbXSxcblx0XHRqID0gMCxcblx0XHRpID0gMDtcblxuXHQvLyBVbmxlc3Mgd2UgKmtub3cqIHdlIGNhbiBkZXRlY3QgZHVwbGljYXRlcywgYXNzdW1lIHRoZWlyIHByZXNlbmNlXG5cdGhhc0R1cGxpY2F0ZSA9ICFzdXBwb3J0LmRldGVjdER1cGxpY2F0ZXM7XG5cdHNvcnRJbnB1dCA9ICFzdXBwb3J0LnNvcnRTdGFibGUgJiYgcmVzdWx0cy5zbGljZSggMCApO1xuXHRyZXN1bHRzLnNvcnQoIHNvcnRPcmRlciApO1xuXG5cdGlmICggaGFzRHVwbGljYXRlICkge1xuXHRcdHdoaWxlICggKGVsZW0gPSByZXN1bHRzW2krK10pICkge1xuXHRcdFx0aWYgKCBlbGVtID09PSByZXN1bHRzWyBpIF0gKSB7XG5cdFx0XHRcdGogPSBkdXBsaWNhdGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRyZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sgaiBdLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNlIG9iamVjdHNcblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL3B1bGwvMjI1XG5cdHNvcnRJbnB1dCA9IG51bGw7XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVzXG4gKiBAcGFyYW0ge0FycmF5fEVsZW1lbnR9IGVsZW1cbiAqL1xuZ2V0VGV4dCA9IFNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHZhciBub2RlLFxuXHRcdHJldCA9IFwiXCIsXG5cdFx0aSA9IDAsXG5cdFx0bm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdGlmICggIW5vZGVUeXBlICkge1xuXHRcdC8vIElmIG5vIG5vZGVUeXBlLCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5XG5cdFx0d2hpbGUgKCAobm9kZSA9IGVsZW1baSsrXSkgKSB7XG5cdFx0XHQvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2Rlc1xuXHRcdFx0cmV0ICs9IGdldFRleHQoIG5vZGUgKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09PSA5IHx8IG5vZGVUeXBlID09PSAxMSApIHtcblx0XHQvLyBVc2UgdGV4dENvbnRlbnQgZm9yIGVsZW1lbnRzXG5cdFx0Ly8gaW5uZXJUZXh0IHVzYWdlIHJlbW92ZWQgZm9yIGNvbnNpc3RlbmN5IG9mIG5ldyBsaW5lcyAoalF1ZXJ5ICMxMTE1Mylcblx0XHRpZiAoIHR5cGVvZiBlbGVtLnRleHRDb250ZW50ID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0udGV4dENvbnRlbnQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFRyYXZlcnNlIGl0cyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdHJldCArPSBnZXRUZXh0KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVmFsdWU7XG5cdH1cblx0Ly8gRG8gbm90IGluY2x1ZGUgY29tbWVudCBvciBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzXG5cblx0cmV0dXJuIHJldDtcbn07XG5cbkV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzID0ge1xuXG5cdC8vIENhbiBiZSBhZGp1c3RlZCBieSB0aGUgdXNlclxuXHRjYWNoZUxlbmd0aDogNTAsXG5cblx0Y3JlYXRlUHNldWRvOiBtYXJrRnVuY3Rpb24sXG5cblx0bWF0Y2g6IG1hdGNoRXhwcixcblxuXHRhdHRySGFuZGxlOiB7fSxcblxuXHRmaW5kOiB7fSxcblxuXHRyZWxhdGl2ZToge1xuXHRcdFwiPlwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCIgXCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiB9LFxuXHRcdFwiK1wiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIn5cIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIgfVxuXHR9LFxuXG5cdHByZUZpbHRlcjoge1xuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaFsxXSA9IG1hdGNoWzFdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdC8vIE1vdmUgdGhlIGdpdmVuIHZhbHVlIHRvIG1hdGNoWzNdIHdoZXRoZXIgcXVvdGVkIG9yIHVucXVvdGVkXG5cdFx0XHRtYXRjaFszXSA9ICggbWF0Y2hbM10gfHwgbWF0Y2hbNF0gfHwgbWF0Y2hbNV0gfHwgXCJcIiApLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdGlmICggbWF0Y2hbMl0gPT09IFwifj1cIiApIHtcblx0XHRcdFx0bWF0Y2hbM10gPSBcIiBcIiArIG1hdGNoWzNdICsgXCIgXCI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgNCApO1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdC8qIG1hdGNoZXMgZnJvbSBtYXRjaEV4cHJbXCJDSElMRFwiXVxuXHRcdFx0XHQxIHR5cGUgKG9ubHl8bnRofC4uLilcblx0XHRcdFx0MiB3aGF0IChjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHQzIGFyZ3VtZW50IChldmVufG9kZHxcXGQqfFxcZCpuKFsrLV1cXGQrKT98Li4uKVxuXHRcdFx0XHQ0IHhuLWNvbXBvbmVudCBvZiB4bit5IGFyZ3VtZW50IChbKy1dP1xcZCpufClcblx0XHRcdFx0NSBzaWduIG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ2IHggb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDcgc2lnbiBvZiB5LWNvbXBvbmVudFxuXHRcdFx0XHQ4IHkgb2YgeS1jb21wb25lbnRcblx0XHRcdCovXG5cdFx0XHRtYXRjaFsxXSA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdGlmICggbWF0Y2hbMV0uc2xpY2UoIDAsIDMgKSA9PT0gXCJudGhcIiApIHtcblx0XHRcdFx0Ly8gbnRoLSogcmVxdWlyZXMgYXJndW1lbnRcblx0XHRcdFx0aWYgKCAhbWF0Y2hbM10gKSB7XG5cdFx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFswXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gbnVtZXJpYyB4IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxEXG5cdFx0XHRcdC8vIHJlbWVtYmVyIHRoYXQgZmFsc2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzFcblx0XHRcdFx0bWF0Y2hbNF0gPSArKCBtYXRjaFs0XSA/IG1hdGNoWzVdICsgKG1hdGNoWzZdIHx8IDEpIDogMiAqICggbWF0Y2hbM10gPT09IFwiZXZlblwiIHx8IG1hdGNoWzNdID09PSBcIm9kZFwiICkgKTtcblx0XHRcdFx0bWF0Y2hbNV0gPSArKCAoIG1hdGNoWzddICsgbWF0Y2hbOF0gKSB8fCBtYXRjaFszXSA9PT0gXCJvZGRcIiApO1xuXG5cdFx0XHQvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWzNdICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaDtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0dmFyIGV4Y2Vzcyxcblx0XHRcdFx0dW5xdW90ZWQgPSAhbWF0Y2hbNl0gJiYgbWF0Y2hbMl07XG5cblx0XHRcdGlmICggbWF0Y2hFeHByW1wiQ0hJTERcIl0udGVzdCggbWF0Y2hbMF0gKSApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFjY2VwdCBxdW90ZWQgYXJndW1lbnRzIGFzLWlzXG5cdFx0XHRpZiAoIG1hdGNoWzNdICkge1xuXHRcdFx0XHRtYXRjaFsyXSA9IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8IFwiXCI7XG5cblx0XHRcdC8vIFN0cmlwIGV4Y2VzcyBjaGFyYWN0ZXJzIGZyb20gdW5xdW90ZWQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCB1bnF1b3RlZCAmJiBycHNldWRvLnRlc3QoIHVucXVvdGVkICkgJiZcblx0XHRcdFx0Ly8gR2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSlcblx0XHRcdFx0KGV4Y2VzcyA9IHRva2VuaXplKCB1bnF1b3RlZCwgdHJ1ZSApKSAmJlxuXHRcdFx0XHQvLyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNsb3NpbmcgcGFyZW50aGVzaXNcblx0XHRcdFx0KGV4Y2VzcyA9IHVucXVvdGVkLmluZGV4T2YoIFwiKVwiLCB1bnF1b3RlZC5sZW5ndGggLSBleGNlc3MgKSAtIHVucXVvdGVkLmxlbmd0aCkgKSB7XG5cblx0XHRcdFx0Ly8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXhcblx0XHRcdFx0bWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHRcdG1hdGNoWzJdID0gdW5xdW90ZWQuc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXR1cm4gb25seSBjYXB0dXJlcyBuZWVkZWQgYnkgdGhlIHBzZXVkbyBmaWx0ZXIgbWV0aG9kICh0eXBlIGFuZCBhcmd1bWVudClcblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgMyApO1xuXHRcdH1cblx0fSxcblxuXHRmaWx0ZXI6IHtcblxuXHRcdFwiVEFHXCI6IGZ1bmN0aW9uKCBub2RlTmFtZVNlbGVjdG9yICkge1xuXHRcdFx0dmFyIG5vZGVOYW1lID0gbm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gXCIqXCIgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7IH0gOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5vZGVOYW1lO1xuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNMQVNTXCI6IGZ1bmN0aW9uKCBjbGFzc05hbWUgKSB7XG5cdFx0XHR2YXIgcGF0dGVybiA9IGNsYXNzQ2FjaGVbIGNsYXNzTmFtZSArIFwiIFwiIF07XG5cblx0XHRcdHJldHVybiBwYXR0ZXJuIHx8XG5cdFx0XHRcdChwYXR0ZXJuID0gbmV3IFJlZ0V4cCggXCIoXnxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIGNsYXNzTmFtZSArIFwiKFwiICsgd2hpdGVzcGFjZSArIFwifCQpXCIgKSkgJiZcblx0XHRcdFx0Y2xhc3NDYWNoZSggY2xhc3NOYW1lLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGF0dGVybi50ZXN0KCB0eXBlb2YgZWxlbS5jbGFzc05hbWUgPT09IFwic3RyaW5nXCIgJiYgZWxlbS5jbGFzc05hbWUgfHwgdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9PSBcInVuZGVmaW5lZFwiICYmIGVsZW0uZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgfHwgXCJcIiApO1xuXHRcdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBuYW1lLCBvcGVyYXRvciwgY2hlY2sgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciByZXN1bHQgPSBTaXp6bGUuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0XHRcdGlmICggcmVzdWx0ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIiE9XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAhb3BlcmF0b3IgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXN1bHQgKz0gXCJcIjtcblxuXHRcdFx0XHRyZXR1cm4gb3BlcmF0b3IgPT09IFwiPVwiID8gcmVzdWx0ID09PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiIT1cIiA/IHJlc3VsdCAhPT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIl49XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA9PT0gMCA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiKj1cIiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID4gLTEgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiQ9XCIgPyBjaGVjayAmJiByZXN1bHQuc2xpY2UoIC1jaGVjay5sZW5ndGggKSA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIn49XCIgPyAoIFwiIFwiICsgcmVzdWx0LnJlcGxhY2UoIHJ3aGl0ZXNwYWNlLCBcIiBcIiApICsgXCIgXCIgKS5pbmRleE9mKCBjaGVjayApID4gLTEgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcInw9XCIgPyByZXN1bHQgPT09IGNoZWNrIHx8IHJlc3VsdC5zbGljZSggMCwgY2hlY2subGVuZ3RoICsgMSApID09PSBjaGVjayArIFwiLVwiIDpcblx0XHRcdFx0XHRmYWxzZTtcblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiQ0hJTERcIjogZnVuY3Rpb24oIHR5cGUsIHdoYXQsIGFyZ3VtZW50LCBmaXJzdCwgbGFzdCApIHtcblx0XHRcdHZhciBzaW1wbGUgPSB0eXBlLnNsaWNlKCAwLCAzICkgIT09IFwibnRoXCIsXG5cdFx0XHRcdGZvcndhcmQgPSB0eXBlLnNsaWNlKCAtNCApICE9PSBcImxhc3RcIixcblx0XHRcdFx0b2ZUeXBlID0gd2hhdCA9PT0gXCJvZi10eXBlXCI7XG5cblx0XHRcdHJldHVybiBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwID9cblxuXHRcdFx0XHQvLyBTaG9ydGN1dCBmb3IgOm50aC0qKG4pXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiAhIWVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdFx0fSA6XG5cblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgY2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLCBub2RlLCBub2RlSW5kZXgsIHN0YXJ0LFxuXHRcdFx0XHRcdFx0ZGlyID0gc2ltcGxlICE9PSBmb3J3YXJkID8gXCJuZXh0U2libGluZ1wiIDogXCJwcmV2aW91c1NpYmxpbmdcIixcblx0XHRcdFx0XHRcdHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZSxcblx0XHRcdFx0XHRcdG5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0XHRcdFx0dXNlQ2FjaGUgPSAheG1sICYmICFvZlR5cGUsXG5cdFx0XHRcdFx0XHRkaWZmID0gZmFsc2U7XG5cblx0XHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gOihmaXJzdHxsYXN0fG9ubHkpLShjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHRcdFx0aWYgKCBzaW1wbGUgKSB7XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggZGlyICkge1xuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKG5vZGUgPSBub2RlWyBkaXIgXSkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG9mVHlwZSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvLyBSZXZlcnNlIGRpcmVjdGlvbiBmb3IgOm9ubHktKiAoaWYgd2UgaGF2ZW4ndCB5ZXQgZG9uZSBzbylcblx0XHRcdFx0XHRcdFx0XHRzdGFydCA9IGRpciA9IHR5cGUgPT09IFwib25seVwiICYmICFzdGFydCAmJiBcIm5leHRTaWJsaW5nXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHN0YXJ0ID0gWyBmb3J3YXJkID8gcGFyZW50LmZpcnN0Q2hpbGQgOiBwYXJlbnQubGFzdENoaWxkIF07XG5cblx0XHRcdFx0XHRcdC8vIG5vbi14bWwgOm50aC1jaGlsZCguLi4pIHN0b3JlcyBjYWNoZSBkYXRhIG9uIGBwYXJlbnRgXG5cdFx0XHRcdFx0XHRpZiAoIGZvcndhcmQgJiYgdXNlQ2FjaGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU2VlayBgZWxlbWAgZnJvbSBhIHByZXZpb3VzbHktY2FjaGVkIGluZGV4XG5cblx0XHRcdFx0XHRcdFx0Ly8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheVxuXHRcdFx0XHRcdFx0XHRub2RlID0gcGFyZW50O1xuXHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHQob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdGNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4ICYmIGNhY2hlWyAyIF07XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBub2RlSW5kZXggJiYgcGFyZW50LmNoaWxkTm9kZXNbIG5vZGVJbmRleCBdO1xuXG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBGYWxsYmFjayB0byBzZWVraW5nIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdChkaWZmID0gbm9kZUluZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gV2hlbiBmb3VuZCwgY2FjaGUgaW5kZXhlcyBvbiBgcGFyZW50YCBhbmQgYnJlYWtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgJiYgKytkaWZmICYmIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBub2RlSW5kZXgsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBVc2UgcHJldmlvdXNseS1jYWNoZWQgZWxlbWVudCBpbmRleCBpZiBhdmFpbGFibGVcblx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0XHQvLyAuLi5pbiBhIGd6aXAtZnJpZW5kbHkgd2F5XG5cdFx0XHRcdFx0XHRcdFx0bm9kZSA9IGVsZW07XG5cdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0Y2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4O1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8geG1sIDpudGgtY2hpbGQoLi4uKVxuXHRcdFx0XHRcdFx0XHQvLyBvciA6bnRoLWxhc3QtY2hpbGQoLi4uKSBvciA6bnRoKC1sYXN0KT8tb2YtdHlwZSguLi4pXG5cdFx0XHRcdFx0XHRcdGlmICggZGlmZiA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gVXNlIHRoZSBzYW1lIGxvb3AgYXMgYWJvdmUgdG8gc2VlayBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoIChub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KGRpZmYgPSBub2RlSW5kZXggPSAwKSB8fCBzdGFydC5wb3AoKSkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmICggKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVUeXBlID09PSAxICkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0KytkaWZmICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIENhY2hlIHRoZSBpbmRleCBvZiBlYWNoIGVuY291bnRlcmVkIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgdGhlIG9mZnNldCwgdGhlbiBjaGVjayBhZ2FpbnN0IGN5Y2xlIHNpemVcblx0XHRcdFx0XHRcdGRpZmYgLT0gbGFzdDtcblx0XHRcdFx0XHRcdHJldHVybiBkaWZmID09PSBmaXJzdCB8fCAoIGRpZmYgJSBmaXJzdCA9PT0gMCAmJiBkaWZmIC8gZmlyc3QgPj0gMCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIHBzZXVkbywgYXJndW1lbnQgKSB7XG5cdFx0XHQvLyBwc2V1ZG8tY2xhc3MgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmVcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXNcblx0XHRcdC8vIFByaW9yaXRpemUgYnkgY2FzZSBzZW5zaXRpdml0eSBpbiBjYXNlIGN1c3RvbSBwc2V1ZG9zIGFyZSBhZGRlZCB3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzXG5cdFx0XHQvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRlcnMgaW5oZXJpdHMgZnJvbSBwc2V1ZG9zXG5cdFx0XHR2YXIgYXJncyxcblx0XHRcdFx0Zm4gPSBFeHByLnBzZXVkb3NbIHBzZXVkbyBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiICsgcHNldWRvICk7XG5cblx0XHRcdC8vIFRoZSB1c2VyIG1heSB1c2UgY3JlYXRlUHNldWRvIHRvIGluZGljYXRlIHRoYXRcblx0XHRcdC8vIGFyZ3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9uXG5cdFx0XHQvLyBqdXN0IGFzIFNpenpsZSBkb2VzXG5cdFx0XHRpZiAoIGZuWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHJldHVybiBmbiggYXJndW1lbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQnV0IG1haW50YWluIHN1cHBvcnQgZm9yIG9sZCBzaWduYXR1cmVzXG5cdFx0XHRpZiAoIGZuLmxlbmd0aCA+IDEgKSB7XG5cdFx0XHRcdGFyZ3MgPSBbIHBzZXVkbywgcHNldWRvLCBcIlwiLCBhcmd1bWVudCBdO1xuXHRcdFx0XHRyZXR1cm4gRXhwci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID9cblx0XHRcdFx0XHRtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHRcdFx0XHR2YXIgaWR4LFxuXHRcdFx0XHRcdFx0XHRtYXRjaGVkID0gZm4oIHNlZWQsIGFyZ3VtZW50ICksXG5cdFx0XHRcdFx0XHRcdGkgPSBtYXRjaGVkLmxlbmd0aDtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZHggPSBpbmRleE9mKCBzZWVkLCBtYXRjaGVkW2ldICk7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGlkeCBdID0gISggbWF0Y2hlc1sgaWR4IF0gPSBtYXRjaGVkW2ldICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSkgOlxuXHRcdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZuO1xuXHRcdH1cblx0fSxcblxuXHRwc2V1ZG9zOiB7XG5cdFx0Ly8gUG90ZW50aWFsbHkgY29tcGxleCBwc2V1ZG9zXG5cdFx0XCJub3RcIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRcdC8vIFRyaW0gdGhlIHNlbGVjdG9yIHBhc3NlZCB0byBjb21waWxlXG5cdFx0XHQvLyB0byBhdm9pZCB0cmVhdGluZyBsZWFkaW5nIGFuZCB0cmFpbGluZ1xuXHRcdFx0Ly8gc3BhY2VzIGFzIGNvbWJpbmF0b3JzXG5cdFx0XHR2YXIgaW5wdXQgPSBbXSxcblx0XHRcdFx0cmVzdWx0cyA9IFtdLFxuXHRcdFx0XHRtYXRjaGVyID0gY29tcGlsZSggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApICk7XG5cblx0XHRcdHJldHVybiBtYXRjaGVyWyBleHBhbmRvIF0gP1xuXHRcdFx0XHRtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMsIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgZWxlbSxcblx0XHRcdFx0XHRcdHVubWF0Y2hlZCA9IG1hdGNoZXIoIHNlZWQsIG51bGwsIHhtbCwgW10gKSxcblx0XHRcdFx0XHRcdGkgPSBzZWVkLmxlbmd0aDtcblxuXHRcdFx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIHVubWF0Y2hlZCBieSBgbWF0Y2hlcmBcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkge1xuXHRcdFx0XHRcdFx0XHRzZWVkW2ldID0gIShtYXRjaGVzW2ldID0gZWxlbSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0aW5wdXRbMF0gPSBlbGVtO1xuXHRcdFx0XHRcdG1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJlc3VsdHMgKTtcblx0XHRcdFx0XHQvLyBEb24ndCBrZWVwIHRoZSBlbGVtZW50IChpc3N1ZSAjMjk5KVxuXHRcdFx0XHRcdGlucHV0WzBdID0gbnVsbDtcblx0XHRcdFx0XHRyZXR1cm4gIXJlc3VsdHMucG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0fSksXG5cblx0XHRcImhhc1wiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gU2l6emxlKCBzZWxlY3RvciwgZWxlbSApLmxlbmd0aCA+IDA7XG5cdFx0XHR9O1xuXHRcdH0pLFxuXG5cdFx0XCJjb250YWluc1wiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gKCBlbGVtLnRleHRDb250ZW50IHx8IGdldFRleHQoIGVsZW0gKSApLmluZGV4T2YoIHRleHQgKSA+IC0xO1xuXHRcdFx0fTtcblx0XHR9KSxcblxuXHRcdC8vIFwiV2hldGhlciBhbiBlbGVtZW50IGlzIHJlcHJlc2VudGVkIGJ5IGEgOmxhbmcoKSBzZWxlY3RvclxuXHRcdC8vIGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlXG5cdFx0Ly8gYmVpbmcgZXF1YWwgdG8gdGhlIGlkZW50aWZpZXIgQyxcblx0XHQvLyBvciBiZWdpbm5pbmcgd2l0aCB0aGUgaWRlbnRpZmllciBDIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IFwiLVwiLlxuXHRcdC8vIFRoZSBtYXRjaGluZyBvZiBDIGFnYWluc3QgdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZSBpcyBwZXJmb3JtZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LlxuXHRcdC8vIFRoZSBpZGVudGlmaWVyIEMgZG9lcyBub3QgaGF2ZSB0byBiZSBhIHZhbGlkIGxhbmd1YWdlIG5hbWUuXCJcblx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2xhbmctcHNldWRvXG5cdFx0XCJsYW5nXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGxhbmcgKSB7XG5cdFx0XHQvLyBsYW5nIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWVyXG5cdFx0XHRpZiAoICFyaWRlbnRpZmllci50ZXN0KGxhbmcgfHwgXCJcIikgKSB7XG5cdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBsYW5nOiBcIiArIGxhbmcgKTtcblx0XHRcdH1cblx0XHRcdGxhbmcgPSBsYW5nLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIGVsZW1MYW5nO1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0aWYgKCAoZWxlbUxhbmcgPSBkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRcdFx0XHRlbGVtLmxhbmcgOlxuXHRcdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoXCJ4bWw6bGFuZ1wiKSB8fCBlbGVtLmdldEF0dHJpYnV0ZShcImxhbmdcIikpICkge1xuXG5cdFx0XHRcdFx0XHRlbGVtTGFuZyA9IGVsZW1MYW5nLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbUxhbmcgPT09IGxhbmcgfHwgZWxlbUxhbmcuaW5kZXhPZiggbGFuZyArIFwiLVwiICkgPT09IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IHdoaWxlICggKGVsZW0gPSBlbGVtLnBhcmVudE5vZGUpICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fTtcblx0XHR9KSxcblxuXHRcdC8vIE1pc2NlbGxhbmVvdXNcblx0XHRcInRhcmdldFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHRcdFx0cmV0dXJuIGhhc2ggJiYgaGFzaC5zbGljZSggMSApID09PSBlbGVtLmlkO1xuXHRcdH0sXG5cblx0XHRcInJvb3RcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jRWxlbTtcblx0XHR9LFxuXG5cdFx0XCJmb2N1c1wiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmICghZG9jdW1lbnQuaGFzRm9jdXMgfHwgZG9jdW1lbnQuaGFzRm9jdXMoKSkgJiYgISEoZWxlbS50eXBlIHx8IGVsZW0uaHJlZiB8fCB+ZWxlbS50YWJJbmRleCk7XG5cdFx0fSxcblxuXHRcdC8vIEJvb2xlYW4gcHJvcGVydGllc1xuXHRcdFwiZW5hYmxlZFwiOiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggZmFsc2UgKSxcblx0XHRcImRpc2FibGVkXCI6IGNyZWF0ZURpc2FibGVkUHNldWRvKCB0cnVlICksXG5cblx0XHRcImNoZWNrZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHQvLyBJbiBDU1MzLCA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIGJvdGggY2hlY2tlZCBhbmQgc2VsZWN0ZWQgZWxlbWVudHNcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXG5cdFx0XHR2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gKG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgISFlbGVtLmNoZWNrZWQpIHx8IChub2RlTmFtZSA9PT0gXCJvcHRpb25cIiAmJiAhIWVsZW0uc2VsZWN0ZWQpO1xuXHRcdH0sXG5cblx0XHRcInNlbGVjdGVkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0Ly8gQWNjZXNzaW5nIHRoaXMgcHJvcGVydHkgbWFrZXMgc2VsZWN0ZWQtYnktZGVmYXVsdFxuXHRcdFx0Ly8gb3B0aW9ucyBpbiBTYWZhcmkgd29yayBwcm9wZXJseVxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gQ29udGVudHNcblx0XHRcImVtcHR5XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNlbXB0eS1wc2V1ZG9cblx0XHRcdC8vIDplbXB0eSBpcyBuZWdhdGVkIGJ5IGVsZW1lbnQgKDEpIG9yIGNvbnRlbnQgbm9kZXMgKHRleHQ6IDM7IGNkYXRhOiA0OyBlbnRpdHkgcmVmOiA1KSxcblx0XHRcdC8vICAgYnV0IG5vdCBieSBvdGhlcnMgKGNvbW1lbnQ6IDg7IHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb246IDc7IGV0Yy4pXG5cdFx0XHQvLyBub2RlVHlwZSA8IDYgd29ya3MgYmVjYXVzZSBhdHRyaWJ1dGVzICgyKSBkbyBub3QgYXBwZWFyIGFzIGNoaWxkcmVuXG5cdFx0XHRmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlIDwgNiApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHRcInBhcmVudFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAhRXhwci5wc2V1ZG9zW1wiZW1wdHlcIl0oIGVsZW0gKTtcblx0XHR9LFxuXG5cdFx0Ly8gRWxlbWVudC9pbnB1dCB0eXBlc1xuXHRcdFwiaGVhZGVyXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJoZWFkZXIudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRcImlucHV0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJpbnB1dHMudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRcImJ1dHRvblwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIG5hbWUgPT09IFwiaW5wdXRcIiAmJiBlbGVtLnR5cGUgPT09IFwiYnV0dG9uXCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIjtcblx0XHR9LFxuXG5cdFx0XCJ0ZXh0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIGF0dHI7XG5cdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCIgJiZcblx0XHRcdFx0ZWxlbS50eXBlID09PSBcInRleHRcIiAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFPDhcblx0XHRcdFx0Ly8gTmV3IEhUTUw1IGF0dHJpYnV0ZSB2YWx1ZXMgKGUuZy4sIFwic2VhcmNoXCIpIGFwcGVhciB3aXRoIGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCJcblx0XHRcdFx0KCAoYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKFwidHlwZVwiKSkgPT0gbnVsbCB8fCBhdHRyLnRvTG93ZXJDYXNlKCkgPT09IFwidGV4dFwiICk7XG5cdFx0fSxcblxuXHRcdC8vIFBvc2l0aW9uLWluLWNvbGxlY3Rpb25cblx0XHRcImZpcnN0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gWyAwIF07XG5cdFx0fSksXG5cblx0XHRcImxhc3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gWyBsZW5ndGggLSAxIF07XG5cdFx0fSksXG5cblx0XHRcImVxXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHJldHVybiBbIGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQgXTtcblx0XHR9KSxcblxuXHRcdFwiZXZlblwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9KSxcblxuXHRcdFwib2RkXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAxO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0pLFxuXG5cdFx0XCJsdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/XG5cdFx0XHRcdGFyZ3VtZW50ICsgbGVuZ3RoIDpcblx0XHRcdFx0YXJndW1lbnQgPiBsZW5ndGggP1xuXHRcdFx0XHRcdGxlbmd0aCA6XG5cdFx0XHRcdFx0YXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7IC0taSA+PSAwOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSksXG5cblx0XHRcImd0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpID0gYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDtcblx0XHRcdGZvciAoIDsgKytpIDwgbGVuZ3RoOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSlcblx0fVxufTtcblxuRXhwci5wc2V1ZG9zW1wibnRoXCJdID0gRXhwci5wc2V1ZG9zW1wiZXFcIl07XG5cbi8vIEFkZCBidXR0b24vaW5wdXQgdHlwZSBwc2V1ZG9zXG5mb3IgKCBpIGluIHsgcmFkaW86IHRydWUsIGNoZWNrYm94OiB0cnVlLCBmaWxlOiB0cnVlLCBwYXNzd29yZDogdHJ1ZSwgaW1hZ2U6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVJbnB1dFBzZXVkbyggaSApO1xufVxuZm9yICggaSBpbiB7IHN1Ym1pdDogdHJ1ZSwgcmVzZXQ6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVCdXR0b25Qc2V1ZG8oIGkgKTtcbn1cblxuLy8gRWFzeSBBUEkgZm9yIGNyZWF0aW5nIG5ldyBzZXRGaWx0ZXJzXG5mdW5jdGlvbiBzZXRGaWx0ZXJzKCkge31cbnNldEZpbHRlcnMucHJvdG90eXBlID0gRXhwci5maWx0ZXJzID0gRXhwci5wc2V1ZG9zO1xuRXhwci5zZXRGaWx0ZXJzID0gbmV3IHNldEZpbHRlcnMoKTtcblxudG9rZW5pemUgPSBTaXp6bGUudG9rZW5pemUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIHBhcnNlT25seSApIHtcblx0dmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsXG5cdFx0c29GYXIsIGdyb3VwcywgcHJlRmlsdGVycyxcblx0XHRjYWNoZWQgPSB0b2tlbkNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCBjYWNoZWQgKSB7XG5cdFx0cmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTtcblx0fVxuXG5cdHNvRmFyID0gc2VsZWN0b3I7XG5cdGdyb3VwcyA9IFtdO1xuXHRwcmVGaWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7XG5cblx0d2hpbGUgKCBzb0ZhciApIHtcblxuXHRcdC8vIENvbW1hIGFuZCBmaXJzdCBydW5cblx0XHRpZiAoICFtYXRjaGVkIHx8IChtYXRjaCA9IHJjb21tYS5leGVjKCBzb0ZhciApKSApIHtcblx0XHRcdGlmICggbWF0Y2ggKSB7XG5cdFx0XHRcdC8vIERvbid0IGNvbnN1bWUgdHJhaWxpbmcgY29tbWFzIGFzIHZhbGlkXG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoWzBdLmxlbmd0aCApIHx8IHNvRmFyO1xuXHRcdFx0fVxuXHRcdFx0Z3JvdXBzLnB1c2goICh0b2tlbnMgPSBbXSkgKTtcblx0XHR9XG5cblx0XHRtYXRjaGVkID0gZmFsc2U7XG5cblx0XHQvLyBDb21iaW5hdG9yc1xuXHRcdGlmICggKG1hdGNoID0gcmNvbWJpbmF0b3JzLmV4ZWMoIHNvRmFyICkpICkge1xuXHRcdFx0bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7XG5cdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXHRcdFx0XHQvLyBDYXN0IGRlc2NlbmRhbnQgY29tYmluYXRvcnMgdG8gc3BhY2Vcblx0XHRcdFx0dHlwZTogbWF0Y2hbMF0ucmVwbGFjZSggcnRyaW0sIFwiIFwiIClcblx0XHRcdH0pO1xuXHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHR9XG5cblx0XHQvLyBGaWx0ZXJzXG5cdFx0Zm9yICggdHlwZSBpbiBFeHByLmZpbHRlciApIHtcblx0XHRcdGlmICggKG1hdGNoID0gbWF0Y2hFeHByWyB0eXBlIF0uZXhlYyggc29GYXIgKSkgJiYgKCFwcmVGaWx0ZXJzWyB0eXBlIF0gfHxcblx0XHRcdFx0KG1hdGNoID0gcHJlRmlsdGVyc1sgdHlwZSBdKCBtYXRjaCApKSkgKSB7XG5cdFx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cdFx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0XHRtYXRjaGVzOiBtYXRjaFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoICFtYXRjaGVkICkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGludmFsaWQgZXhjZXNzXG5cdC8vIGlmIHdlJ3JlIGp1c3QgcGFyc2luZ1xuXHQvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJldHVybiB0b2tlbnNcblx0cmV0dXJuIHBhcnNlT25seSA/XG5cdFx0c29GYXIubGVuZ3RoIDpcblx0XHRzb0ZhciA/XG5cdFx0XHRTaXp6bGUuZXJyb3IoIHNlbGVjdG9yICkgOlxuXHRcdFx0Ly8gQ2FjaGUgdGhlIHRva2Vuc1xuXHRcdFx0dG9rZW5DYWNoZSggc2VsZWN0b3IsIGdyb3VwcyApLnNsaWNlKCAwICk7XG59O1xuXG5mdW5jdGlvbiB0b1NlbGVjdG9yKCB0b2tlbnMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdHNlbGVjdG9yID0gXCJcIjtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0c2VsZWN0b3IgKz0gdG9rZW5zW2ldLnZhbHVlO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rvcjtcbn1cblxuZnVuY3Rpb24gYWRkQ29tYmluYXRvciggbWF0Y2hlciwgY29tYmluYXRvciwgYmFzZSApIHtcblx0dmFyIGRpciA9IGNvbWJpbmF0b3IuZGlyLFxuXHRcdHNraXAgPSBjb21iaW5hdG9yLm5leHQsXG5cdFx0a2V5ID0gc2tpcCB8fCBkaXIsXG5cdFx0Y2hlY2tOb25FbGVtZW50cyA9IGJhc2UgJiYga2V5ID09PSBcInBhcmVudE5vZGVcIixcblx0XHRkb25lTmFtZSA9IGRvbmUrKztcblxuXHRyZXR1cm4gY29tYmluYXRvci5maXJzdCA/XG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdHJldHVybiBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gOlxuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBhbGwgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRzXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciBvbGRDYWNoZSwgdW5pcXVlQ2FjaGUsIG91dGVyQ2FjaGUsXG5cdFx0XHRcdG5ld0NhY2hlID0gWyBkaXJydW5zLCBkb25lTmFtZSBdO1xuXG5cdFx0XHQvLyBXZSBjYW4ndCBzZXQgYXJiaXRyYXJ5IGRhdGEgb24gWE1MIG5vZGVzLCBzbyB0aGV5IGRvbid0IGJlbmVmaXQgZnJvbSBjb21iaW5hdG9yIGNhY2hpbmdcblx0XHRcdGlmICggeG1sICkge1xuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IGVsZW1bIGV4cGFuZG8gXSB8fCAoZWxlbVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdIHx8IChvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdGlmICggc2tpcCAmJiBza2lwID09PSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdGVsZW0gPSBlbGVtWyBkaXIgXSB8fCBlbGVtO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICggKG9sZENhY2hlID0gdW5pcXVlQ2FjaGVbIGtleSBdKSAmJlxuXHRcdFx0XHRcdFx0XHRvbGRDYWNoZVsgMCBdID09PSBkaXJydW5zICYmIG9sZENhY2hlWyAxIF0gPT09IGRvbmVOYW1lICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFzc2lnbiB0byBuZXdDYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdHJldHVybiAobmV3Q2FjaGVbIDIgXSA9IG9sZENhY2hlWyAyIF0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gUmV1c2UgbmV3Y2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsga2V5IF0gPSBuZXdDYWNoZTtcblxuXHRcdFx0XHRcdFx0XHQvLyBBIG1hdGNoIG1lYW5zIHdlJ3JlIGRvbmU7IGEgZmFpbCBtZWFucyB3ZSBoYXZlIHRvIGtlZXAgY2hlY2tpbmdcblx0XHRcdFx0XHRcdFx0aWYgKCAobmV3Q2FjaGVbIDIgXSA9IG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG59XG5cbmZ1bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApIHtcblx0cmV0dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDEgP1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgaSA9IG1hdGNoZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoICFtYXRjaGVyc1tpXSggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IDpcblx0XHRtYXRjaGVyc1swXTtcbn1cblxuZnVuY3Rpb24gbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gY29udGV4dHMubGVuZ3RoO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0c1tpXSwgcmVzdWx0cyApO1xuXHR9XG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRlciwgY29udGV4dCwgeG1sICkge1xuXHR2YXIgZWxlbSxcblx0XHRuZXdVbm1hdGNoZWQgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsZW4gPSB1bm1hdGNoZWQubGVuZ3RoLFxuXHRcdG1hcHBlZCA9IG1hcCAhPSBudWxsO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkge1xuXHRcdFx0aWYgKCAhZmlsdGVyIHx8IGZpbHRlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdG5ld1VubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdGlmICggbWFwcGVkICkge1xuXHRcdFx0XHRcdG1hcC5wdXNoKCBpICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbmV3VW5tYXRjaGVkO1xufVxuXG5mdW5jdGlvbiBzZXRNYXRjaGVyKCBwcmVGaWx0ZXIsIHNlbGVjdG9yLCBtYXRjaGVyLCBwb3N0RmlsdGVyLCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKSB7XG5cdGlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZpbHRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaWx0ZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmlsdGVyICk7XG5cdH1cblx0aWYgKCBwb3N0RmluZGVyICYmICFwb3N0RmluZGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbmRlciA9IHNldE1hdGNoZXIoIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApO1xuXHR9XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIHJlc3VsdHMsIGNvbnRleHQsIHhtbCApIHtcblx0XHR2YXIgdGVtcCwgaSwgZWxlbSxcblx0XHRcdHByZU1hcCA9IFtdLFxuXHRcdFx0cG9zdE1hcCA9IFtdLFxuXHRcdFx0cHJlZXhpc3RpbmcgPSByZXN1bHRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gR2V0IGluaXRpYWwgZWxlbWVudHMgZnJvbSBzZWVkIG9yIGNvbnRleHRcblx0XHRcdGVsZW1zID0gc2VlZCB8fCBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciB8fCBcIipcIiwgY29udGV4dC5ub2RlVHlwZSA/IFsgY29udGV4dCBdIDogY29udGV4dCwgW10gKSxcblxuXHRcdFx0Ly8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uXG5cdFx0XHRtYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID9cblx0XHRcdFx0Y29uZGVuc2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRlbGVtcyxcblxuXHRcdFx0bWF0Y2hlck91dCA9IG1hdGNoZXIgP1xuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlciBvciBwcmVleGlzdGluZyByZXN1bHRzLFxuXHRcdFx0XHRwb3N0RmluZGVyIHx8ICggc2VlZCA/IHByZUZpbHRlciA6IHByZWV4aXN0aW5nIHx8IHBvc3RGaWx0ZXIgKSA/XG5cblx0XHRcdFx0XHQvLyAuLi5pbnRlcm1lZGlhdGUgcHJvY2Vzc2luZyBpcyBuZWNlc3Nhcnlcblx0XHRcdFx0XHRbXSA6XG5cblx0XHRcdFx0XHQvLyAuLi5vdGhlcndpc2UgdXNlIHJlc3VsdHMgZGlyZWN0bHlcblx0XHRcdFx0XHRyZXN1bHRzIDpcblx0XHRcdFx0bWF0Y2hlckluO1xuXG5cdFx0Ly8gRmluZCBwcmltYXJ5IG1hdGNoZXNcblx0XHRpZiAoIG1hdGNoZXIgKSB7XG5cdFx0XHRtYXRjaGVyKCBtYXRjaGVySW4sIG1hdGNoZXJPdXQsIGNvbnRleHQsIHhtbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHBvc3RGaWx0ZXJcblx0XHRpZiAoIHBvc3RGaWx0ZXIgKSB7XG5cdFx0XHR0ZW1wID0gY29uZGVuc2UoIG1hdGNoZXJPdXQsIHBvc3RNYXAgKTtcblx0XHRcdHBvc3RGaWx0ZXIoIHRlbXAsIFtdLCBjb250ZXh0LCB4bWwgKTtcblxuXHRcdFx0Ly8gVW4tbWF0Y2ggZmFpbGluZyBlbGVtZW50cyBieSBtb3ZpbmcgdGhlbSBiYWNrIHRvIG1hdGNoZXJJblxuXHRcdFx0aSA9IHRlbXAubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggKGVsZW0gPSB0ZW1wW2ldKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyT3V0WyBwb3N0TWFwW2ldIF0gPSAhKG1hdGNoZXJJblsgcG9zdE1hcFtpXSBdID0gZWxlbSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgfHwgcHJlRmlsdGVyICkge1xuXHRcdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cdFx0XHRcdFx0Ly8gR2V0IHRoZSBmaW5hbCBtYXRjaGVyT3V0IGJ5IGNvbmRlbnNpbmcgdGhpcyBpbnRlcm1lZGlhdGUgaW50byBwb3N0RmluZGVyIGNvbnRleHRzXG5cdFx0XHRcdFx0dGVtcCA9IFtdO1xuXHRcdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKGVsZW0gPSBtYXRjaGVyT3V0W2ldKSApIHtcblx0XHRcdFx0XHRcdFx0Ly8gUmVzdG9yZSBtYXRjaGVySW4gc2luY2UgZWxlbSBpcyBub3QgeWV0IGEgZmluYWwgbWF0Y2hcblx0XHRcdFx0XHRcdFx0dGVtcC5wdXNoKCAobWF0Y2hlckluW2ldID0gZWxlbSkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgKG1hdGNoZXJPdXQgPSBbXSksIHRlbXAsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTW92ZSBtYXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJvbml6ZWRcblx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRpZiAoIChlbGVtID0gbWF0Y2hlck91dFtpXSkgJiZcblx0XHRcdFx0XHRcdCh0ZW1wID0gcG9zdEZpbmRlciA/IGluZGV4T2YoIHNlZWQsIGVsZW0gKSA6IHByZU1hcFtpXSkgPiAtMSApIHtcblxuXHRcdFx0XHRcdFx0c2VlZFt0ZW1wXSA9ICEocmVzdWx0c1t0ZW1wXSA9IGVsZW0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gQWRkIGVsZW1lbnRzIHRvIHJlc3VsdHMsIHRocm91Z2ggcG9zdEZpbmRlciBpZiBkZWZpbmVkXG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXJPdXQgPSBjb25kZW5zZShcblx0XHRcdFx0bWF0Y2hlck91dCA9PT0gcmVzdWx0cyA/XG5cdFx0XHRcdFx0bWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVyT3V0Lmxlbmd0aCApIDpcblx0XHRcdFx0XHRtYXRjaGVyT3V0XG5cdFx0XHQpO1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXHRcdFx0XHRwb3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zICkge1xuXHR2YXIgY2hlY2tDb250ZXh0LCBtYXRjaGVyLCBqLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0bGVhZGluZ1JlbGF0aXZlID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWzBdLnR5cGUgXSxcblx0XHRpbXBsaWNpdFJlbGF0aXZlID0gbGVhZGluZ1JlbGF0aXZlIHx8IEV4cHIucmVsYXRpdmVbXCIgXCJdLFxuXHRcdGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCxcblxuXHRcdC8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRoYXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpXG5cdFx0bWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0O1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaEFueUNvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBpbmRleE9mKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xO1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaGVycyA9IFsgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciByZXQgPSAoICFsZWFkaW5nUmVsYXRpdmUgJiYgKCB4bWwgfHwgY29udGV4dCAhPT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKFxuXHRcdFx0XHQoY2hlY2tDb250ZXh0ID0gY29udGV4dCkubm9kZVR5cGUgP1xuXHRcdFx0XHRcdG1hdGNoQ29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRcdG1hdGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgKTtcblx0XHRcdC8vIEF2b2lkIGhhbmdpbmcgb250byBlbGVtZW50IChpc3N1ZSAjMjk5KVxuXHRcdFx0Y2hlY2tDb250ZXh0ID0gbnVsbDtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fSBdO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKG1hdGNoZXIgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbaV0udHlwZSBdKSApIHtcblx0XHRcdG1hdGNoZXJzID0gWyBhZGRDb21iaW5hdG9yKGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyKSBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyID0gRXhwci5maWx0ZXJbIHRva2Vuc1tpXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1tpXS5tYXRjaGVzICk7XG5cblx0XHRcdC8vIFJldHVybiBzcGVjaWFsIHVwb24gc2VlaW5nIGEgcG9zaXRpb25hbCBtYXRjaGVyXG5cdFx0XHRpZiAoIG1hdGNoZXJbIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0Ly8gRmluZCB0aGUgbmV4dCByZWxhdGl2ZSBvcGVyYXRvciAoaWYgYW55KSBmb3IgcHJvcGVyIGhhbmRsaW5nXG5cdFx0XHRcdGogPSArK2k7XG5cdFx0XHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0XHRcdGlmICggRXhwci5yZWxhdGl2ZVsgdG9rZW5zW2pdLnR5cGUgXSApIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc2V0TWF0Y2hlcihcblx0XHRcdFx0XHRpID4gMSAmJiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSxcblx0XHRcdFx0XHRpID4gMSAmJiB0b1NlbGVjdG9yKFxuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlIHByZWNlZGluZyB0b2tlbiB3YXMgYSBkZXNjZW5kYW50IGNvbWJpbmF0b3IsIGluc2VydCBhbiBpbXBsaWNpdCBhbnktZWxlbWVudCBgKmBcblx0XHRcdFx0XHRcdHRva2Vucy5zbGljZSggMCwgaSAtIDEgKS5jb25jYXQoeyB2YWx1ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUgPT09IFwiIFwiID8gXCIqXCIgOiBcIlwiIH0pXG5cdFx0XHRcdFx0KS5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICksXG5cdFx0XHRcdFx0bWF0Y2hlcixcblx0XHRcdFx0XHRpIDwgaiAmJiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zLnNsaWNlKCBpLCBqICkgKSxcblx0XHRcdFx0XHRqIDwgbGVuICYmIG1hdGNoZXJGcm9tVG9rZW5zKCAodG9rZW5zID0gdG9rZW5zLnNsaWNlKCBqICkpICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlcnMucHVzaCggbWF0Y2hlciApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkge1xuXHR2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdGJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdHN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9uKCBzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIG91dGVybW9zdCApIHtcblx0XHRcdHZhciBlbGVtLCBqLCBtYXRjaGVyLFxuXHRcdFx0XHRtYXRjaGVkQ291bnQgPSAwLFxuXHRcdFx0XHRpID0gXCIwXCIsXG5cdFx0XHRcdHVubWF0Y2hlZCA9IHNlZWQgJiYgW10sXG5cdFx0XHRcdHNldE1hdGNoZWQgPSBbXSxcblx0XHRcdFx0Y29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsXG5cdFx0XHRcdC8vIFdlIG11c3QgYWx3YXlzIGhhdmUgZWl0aGVyIHNlZWQgZWxlbWVudHMgb3Igb3V0ZXJtb3N0IGNvbnRleHRcblx0XHRcdFx0ZWxlbXMgPSBzZWVkIHx8IGJ5RWxlbWVudCAmJiBFeHByLmZpbmRbXCJUQUdcIl0oIFwiKlwiLCBvdXRlcm1vc3QgKSxcblx0XHRcdFx0Ly8gVXNlIGludGVnZXIgZGlycnVucyBpZmYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNoZXJcblx0XHRcdFx0ZGlycnVuc1VuaXF1ZSA9IChkaXJydW5zICs9IGNvbnRleHRCYWNrdXAgPT0gbnVsbCA/IDEgOiBNYXRoLnJhbmRvbSgpIHx8IDAuMSksXG5cdFx0XHRcdGxlbiA9IGVsZW1zLmxlbmd0aDtcblxuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ID09PSBkb2N1bWVudCB8fCBjb250ZXh0IHx8IG91dGVybW9zdDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHNcblx0XHRcdC8vIFN1cHBvcnQ6IElFPDksIFNhZmFyaVxuXHRcdFx0Ly8gVG9sZXJhdGUgTm9kZUxpc3QgcHJvcGVydGllcyAoSUU6IFwibGVuZ3RoXCI7IFNhZmFyaTogPG51bWJlcj4pIG1hdGNoaW5nIGVsZW1lbnRzIGJ5IGlkXG5cdFx0XHRmb3IgKCA7IGkgIT09IGxlbiAmJiAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggYnlFbGVtZW50ICYmIGVsZW0gKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0aWYgKCAhY29udGV4dCAmJiBlbGVtLm93bmVyRG9jdW1lbnQgIT09IGRvY3VtZW50ICkge1xuXHRcdFx0XHRcdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0XHRcdFx0XHRcdHhtbCA9ICFkb2N1bWVudElzSFRNTDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0d2hpbGUgKCAobWF0Y2hlciA9IGVsZW1lbnRNYXRjaGVyc1tqKytdKSApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCB8fCBkb2N1bWVudCwgeG1sKSApIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFRyYWNrIHVubWF0Y2hlZCBlbGVtZW50cyBmb3Igc2V0IGZpbHRlcnNcblx0XHRcdFx0aWYgKCBieVNldCApIHtcblx0XHRcdFx0XHQvLyBUaGV5IHdpbGwgaGF2ZSBnb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIG1hdGNoZXJzXG5cdFx0XHRcdFx0aWYgKCAoZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0pICkge1xuXHRcdFx0XHRcdFx0bWF0Y2hlZENvdW50LS07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gTGVuZ3RoZW4gdGhlIGFycmF5IGZvciBldmVyeSBlbGVtZW50LCBtYXRjaGVkIG9yIG5vdFxuXHRcdFx0XHRcdGlmICggc2VlZCApIHtcblx0XHRcdFx0XHRcdHVubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIGBpYCBpcyBub3cgdGhlIGNvdW50IG9mIGVsZW1lbnRzIHZpc2l0ZWQgYWJvdmUsIGFuZCBhZGRpbmcgaXQgdG8gYG1hdGNoZWRDb3VudGBcblx0XHRcdC8vIG1ha2VzIHRoZSBsYXR0ZXIgbm9ubmVnYXRpdmUuXG5cdFx0XHRtYXRjaGVkQ291bnQgKz0gaTtcblxuXHRcdFx0Ly8gQXBwbHkgc2V0IGZpbHRlcnMgdG8gdW5tYXRjaGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBOT1RFOiBUaGlzIGNhbiBiZSBza2lwcGVkIGlmIHRoZXJlIGFyZSBubyB1bm1hdGNoZWQgZWxlbWVudHMgKGkuZS4sIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBlcXVhbHMgYGlgKSwgdW5sZXNzIHdlIGRpZG4ndCB2aXNpdCBfYW55XyBlbGVtZW50cyBpbiB0aGUgYWJvdmUgbG9vcCBiZWNhdXNlIHdlIGhhdmVcblx0XHRcdC8vIG5vIGVsZW1lbnQgbWF0Y2hlcnMgYW5kIG5vIHNlZWQuXG5cdFx0XHQvLyBJbmNyZW1lbnRpbmcgYW4gaW5pdGlhbGx5LXN0cmluZyBcIjBcIiBgaWAgYWxsb3dzIGBpYCB0byByZW1haW4gYSBzdHJpbmcgb25seSBpbiB0aGF0XG5cdFx0XHQvLyBjYXNlLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBhIFwiMDBcIiBgbWF0Y2hlZENvdW50YCB0aGF0IGRpZmZlcnMgZnJvbSBgaWAgYnV0IGlzIGFsc29cblx0XHRcdC8vIG51bWVyaWNhbGx5IHplcm8uXG5cdFx0XHRpZiAoIGJ5U2V0ICYmIGkgIT09IG1hdGNoZWRDb3VudCApIHtcblx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdHdoaWxlICggKG1hdGNoZXIgPSBzZXRNYXRjaGVyc1tqKytdKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyKCB1bm1hdGNoZWQsIHNldE1hdGNoZWQsIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0XHRcdC8vIFJlaW50ZWdyYXRlIGVsZW1lbnQgbWF0Y2hlcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIHNvcnRpbmdcblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRDb3VudCA+IDAgKSB7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCAhKHVubWF0Y2hlZFtpXSB8fCBzZXRNYXRjaGVkW2ldKSApIHtcblx0XHRcdFx0XHRcdFx0XHRzZXRNYXRjaGVkW2ldID0gcG9wLmNhbGwoIHJlc3VsdHMgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIERpc2NhcmQgaW5kZXggcGxhY2Vob2xkZXIgdmFsdWVzIHRvIGdldCBvbmx5IGFjdHVhbCBtYXRjaGVzXG5cdFx0XHRcdFx0c2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVkICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBZGQgbWF0Y2hlcyB0byByZXN1bHRzXG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNldE1hdGNoZWQgKTtcblxuXHRcdFx0XHQvLyBTZWVkbGVzcyBzZXQgbWF0Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVsYXRlIHNvcnRpbmdcblx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgJiYgIXNlZWQgJiYgc2V0TWF0Y2hlZC5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0KCBtYXRjaGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7XG5cblx0XHRcdFx0XHRTaXp6bGUudW5pcXVlU29ydCggcmVzdWx0cyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIE92ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBnbG9iYWxzIGJ5IG5lc3RlZCBtYXRjaGVyc1xuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dEJhY2t1cDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVubWF0Y2hlZDtcblx0XHR9O1xuXG5cdHJldHVybiBieVNldCA/XG5cdFx0bWFya0Z1bmN0aW9uKCBzdXBlck1hdGNoZXIgKSA6XG5cdFx0c3VwZXJNYXRjaGVyO1xufVxuXG5jb21waWxlID0gU2l6emxlLmNvbXBpbGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIG1hdGNoIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkge1xuXHR2YXIgaSxcblx0XHRzZXRNYXRjaGVycyA9IFtdLFxuXHRcdGVsZW1lbnRNYXRjaGVycyA9IFtdLFxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoICFjYWNoZWQgKSB7XG5cdFx0Ly8gR2VuZXJhdGUgYSBmdW5jdGlvbiBvZiByZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFjaCBlbGVtZW50XG5cdFx0aWYgKCAhbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaCA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdH1cblx0XHRpID0gbWF0Y2gubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0Y2FjaGVkID0gbWF0Y2hlckZyb21Ub2tlbnMoIG1hdGNoW2ldICk7XG5cdFx0XHRpZiAoIGNhY2hlZFsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRzZXRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWNoZSB0aGUgY29tcGlsZWQgZnVuY3Rpb25cblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlKCBzZWxlY3RvciwgbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkgKTtcblxuXHRcdC8vIFNhdmUgc2VsZWN0b3IgYW5kIHRva2VuaXphdGlvblxuXHRcdGNhY2hlZC5zZWxlY3RvciA9IHNlbGVjdG9yO1xuXHR9XG5cdHJldHVybiBjYWNoZWQ7XG59O1xuXG4vKipcbiAqIEEgbG93LWxldmVsIHNlbGVjdGlvbiBmdW5jdGlvbiB0aGF0IHdvcmtzIHdpdGggU2l6emxlJ3MgY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBzZWxlY3RvciBBIHNlbGVjdG9yIG9yIGEgcHJlLWNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb24gYnVpbHQgd2l0aCBTaXp6bGUuY29tcGlsZVxuICogQHBhcmFtIHtFbGVtZW50fSBjb250ZXh0XG4gKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0c11cbiAqIEBwYXJhbSB7QXJyYXl9IFtzZWVkXSBBIHNldCBvZiBlbGVtZW50cyB0byBtYXRjaCBhZ2FpbnN0XG4gKi9cbnNlbGVjdCA9IFNpenpsZS5zZWxlY3QgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBpLCB0b2tlbnMsIHRva2VuLCB0eXBlLCBmaW5kLFxuXHRcdGNvbXBpbGVkID0gdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgc2VsZWN0b3IsXG5cdFx0bWF0Y2ggPSAhc2VlZCAmJiB0b2tlbml6ZSggKHNlbGVjdG9yID0gY29tcGlsZWQuc2VsZWN0b3IgfHwgc2VsZWN0b3IpICk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gVHJ5IHRvIG1pbmltaXplIG9wZXJhdGlvbnMgaWYgdGhlcmUgaXMgb25seSBvbmUgc2VsZWN0b3IgaW4gdGhlIGxpc3QgYW5kIG5vIHNlZWRcblx0Ly8gKHRoZSBsYXR0ZXIgb2Ygd2hpY2ggZ3VhcmFudGVlcyB1cyBjb250ZXh0KVxuXHRpZiAoIG1hdGNoLmxlbmd0aCA9PT0gMSApIHtcblxuXHRcdC8vIFJlZHVjZSBjb250ZXh0IGlmIHRoZSBsZWFkaW5nIGNvbXBvdW5kIHNlbGVjdG9yIGlzIGFuIElEXG5cdFx0dG9rZW5zID0gbWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCApO1xuXHRcdGlmICggdG9rZW5zLmxlbmd0aCA+IDIgJiYgKHRva2VuID0gdG9rZW5zWzBdKS50eXBlID09PSBcIklEXCIgJiZcblx0XHRcdFx0Y29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBkb2N1bWVudElzSFRNTCAmJiBFeHByLnJlbGF0aXZlWyB0b2tlbnNbMV0udHlwZSBdICkge1xuXG5cdFx0XHRjb250ZXh0ID0gKCBFeHByLmZpbmRbXCJJRFwiXSggdG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKHJ1bmVzY2FwZSwgZnVuZXNjYXBlKSwgY29udGV4dCApIHx8IFtdIClbMF07XG5cdFx0XHRpZiAoICFjb250ZXh0ICkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0Ly8gUHJlY29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBzdGlsbCB2ZXJpZnkgYW5jZXN0cnksIHNvIHN0ZXAgdXAgYSBsZXZlbFxuXHRcdFx0fSBlbHNlIGlmICggY29tcGlsZWQgKSB7XG5cdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoIHRva2Vucy5zaGlmdCgpLnZhbHVlLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZldGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmdcblx0XHRpID0gbWF0Y2hFeHByW1wibmVlZHNDb250ZXh0XCJdLnRlc3QoIHNlbGVjdG9yICkgPyAwIDogdG9rZW5zLmxlbmd0aDtcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdHRva2VuID0gdG9rZW5zW2ldO1xuXG5cdFx0XHQvLyBBYm9ydCBpZiB3ZSBoaXQgYSBjb21iaW5hdG9yXG5cdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbICh0eXBlID0gdG9rZW4udHlwZSkgXSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIChmaW5kID0gRXhwci5maW5kWyB0eXBlIF0pICkge1xuXHRcdFx0XHQvLyBTZWFyY2gsIGV4cGFuZGluZyBjb250ZXh0IGZvciBsZWFkaW5nIHNpYmxpbmcgY29tYmluYXRvcnNcblx0XHRcdFx0aWYgKCAoc2VlZCA9IGZpbmQoXG5cdFx0XHRcdFx0dG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLFxuXHRcdFx0XHRcdHJzaWJsaW5nLnRlc3QoIHRva2Vuc1swXS50eXBlICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcblx0XHRcdFx0KSkgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiBzZWVkIGlzIGVtcHR5IG9yIG5vIHRva2VucyByZW1haW4sIHdlIGNhbiByZXR1cm4gZWFybHlcblx0XHRcdFx0XHR0b2tlbnMuc3BsaWNlKCBpLCAxICk7XG5cdFx0XHRcdFx0c2VsZWN0b3IgPSBzZWVkLmxlbmd0aCAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKTtcblx0XHRcdFx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNlZWQgKTtcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ29tcGlsZSBhbmQgZXhlY3V0ZSBhIGZpbHRlcmluZyBmdW5jdGlvbiBpZiBvbmUgaXMgbm90IHByb3ZpZGVkXG5cdC8vIFByb3ZpZGUgYG1hdGNoYCB0byBhdm9pZCByZXRva2VuaXphdGlvbiBpZiB3ZSBtb2RpZmllZCB0aGUgc2VsZWN0b3IgYWJvdmVcblx0KCBjb21waWxlZCB8fCBjb21waWxlKCBzZWxlY3RvciwgbWF0Y2ggKSApKFxuXHRcdHNlZWQsXG5cdFx0Y29udGV4dCxcblx0XHQhZG9jdW1lbnRJc0hUTUwsXG5cdFx0cmVzdWx0cyxcblx0XHQhY29udGV4dCB8fCByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0XG5cdCk7XG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLy8gT25lLXRpbWUgYXNzaWdubWVudHNcblxuLy8gU29ydCBzdGFiaWxpdHlcbnN1cHBvcnQuc29ydFN0YWJsZSA9IGV4cGFuZG8uc3BsaXQoXCJcIikuc29ydCggc29ydE9yZGVyICkuam9pbihcIlwiKSA9PT0gZXhwYW5kbztcblxuLy8gU3VwcG9ydDogQ2hyb21lIDE0LTM1K1xuLy8gQWx3YXlzIGFzc3VtZSBkdXBsaWNhdGVzIGlmIHRoZXkgYXJlbid0IHBhc3NlZCB0byB0aGUgY29tcGFyaXNvbiBmdW5jdGlvblxuc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzID0gISFoYXNEdXBsaWNhdGU7XG5cbi8vIEluaXRpYWxpemUgYWdhaW5zdCB0aGUgZGVmYXVsdCBkb2N1bWVudFxuc2V0RG9jdW1lbnQoKTtcblxuLy8gU3VwcG9ydDogV2Via2l0PDUzNy4zMiAtIFNhZmFyaSA2LjAuMy9DaHJvbWUgMjUgKGZpeGVkIGluIENocm9tZSAyNylcbi8vIERldGFjaGVkIG5vZGVzIGNvbmZvdW5kaW5nbHkgZm9sbG93ICplYWNoIG90aGVyKlxuc3VwcG9ydC5zb3J0RGV0YWNoZWQgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHQvLyBTaG91bGQgcmV0dXJuIDEsIGJ1dCByZXR1cm5zIDQgKGZvbGxvd2luZylcblx0cmV0dXJuIGVsLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZmllbGRzZXRcIikgKSAmIDE7XG59KTtcblxuLy8gU3VwcG9ydDogSUU8OFxuLy8gUHJldmVudCBhdHRyaWJ1dGUvcHJvcGVydHkgXCJpbnRlcnBvbGF0aW9uXCJcbi8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzY0MjklMjhWUy44NSUyOS5hc3B4XG5pZiAoICFhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRlbC5pbm5lckhUTUwgPSBcIjxhIGhyZWY9JyMnPjwvYT5cIjtcblx0cmV0dXJuIGVsLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSA9PT0gXCIjXCIgO1xufSkgKSB7XG5cdGFkZEhhbmRsZSggXCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoXCIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpID09PSBcInR5cGVcIiA/IDEgOiAyICk7XG5cdFx0fVxuXHR9KTtcbn1cblxuLy8gU3VwcG9ydDogSUU8OVxuLy8gVXNlIGRlZmF1bHRWYWx1ZSBpbiBwbGFjZSBvZiBnZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKVxuaWYgKCAhc3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRlbC5pbm5lckhUTUwgPSBcIjxpbnB1dC8+XCI7XG5cdGVsLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCBcInZhbHVlXCIsIFwiXCIgKTtcblx0cmV0dXJuIGVsLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCBcInZhbHVlXCIgKSA9PT0gXCJcIjtcbn0pICkge1xuXHRhZGRIYW5kbGUoIFwidmFsdWVcIiwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdGlmICggIWlzWE1MICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGVmYXVsdFZhbHVlO1xuXHRcdH1cblx0fSk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBnZXRBdHRyaWJ1dGVOb2RlIHRvIGZldGNoIGJvb2xlYW5zIHdoZW4gZ2V0QXR0cmlidXRlIGxpZXNcbmlmICggIWFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdHJldHVybiBlbC5nZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSA9PSBudWxsO1xufSkgKSB7XG5cdGFkZEhhbmRsZSggYm9vbGVhbnMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgdmFsO1xuXHRcdGlmICggIWlzWE1MICkge1xuXHRcdFx0cmV0dXJuIGVsZW1bIG5hbWUgXSA9PT0gdHJ1ZSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6XG5cdFx0XHRcdFx0KHZhbCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xuXHRcdH1cblx0fSk7XG59XG5cbnJldHVybiBTaXp6bGU7XG5cbn0pKCB3aW5kb3cgKTtcblxuXG5cbmpRdWVyeS5maW5kID0gU2l6emxlO1xualF1ZXJ5LmV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzO1xuXG4vLyBEZXByZWNhdGVkXG5qUXVlcnkuZXhwclsgXCI6XCIgXSA9IGpRdWVyeS5leHByLnBzZXVkb3M7XG5qUXVlcnkudW5pcXVlU29ydCA9IGpRdWVyeS51bmlxdWUgPSBTaXp6bGUudW5pcXVlU29ydDtcbmpRdWVyeS50ZXh0ID0gU2l6emxlLmdldFRleHQ7XG5qUXVlcnkuaXNYTUxEb2MgPSBTaXp6bGUuaXNYTUw7XG5qUXVlcnkuY29udGFpbnMgPSBTaXp6bGUuY29udGFpbnM7XG5qUXVlcnkuZXNjYXBlU2VsZWN0b3IgPSBTaXp6bGUuZXNjYXBlO1xuXG5cblxuXG52YXIgZGlyID0gZnVuY3Rpb24oIGVsZW0sIGRpciwgdW50aWwgKSB7XG5cdHZhciBtYXRjaGVkID0gW10sXG5cdFx0dHJ1bmNhdGUgPSB1bnRpbCAhPT0gdW5kZWZpbmVkO1xuXG5cdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSAmJiBlbGVtLm5vZGVUeXBlICE9PSA5ICkge1xuXHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGlmICggdHJ1bmNhdGUgJiYgalF1ZXJ5KCBlbGVtICkuaXMoIHVudGlsICkgKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgc2libGluZ3MgPSBmdW5jdGlvbiggbiwgZWxlbSApIHtcblx0dmFyIG1hdGNoZWQgPSBbXTtcblxuXHRmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkge1xuXHRcdGlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtICkge1xuXHRcdFx0bWF0Y2hlZC5wdXNoKCBuICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1hdGNoZWQ7XG59O1xuXG5cbnZhciBybmVlZHNDb250ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0O1xuXG5cblxuZnVuY3Rpb24gbm9kZU5hbWUoIGVsZW0sIG5hbWUgKSB7XG5cbiAgcmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbn07XG52YXIgcnNpbmdsZVRhZyA9ICggL148KFthLXpdW15cXC9cXDA+OlxceDIwXFx0XFxyXFxuXFxmXSopW1xceDIwXFx0XFxyXFxuXFxmXSpcXC8/Pig/OjxcXC9cXDE+fCkkL2kgKTtcblxuXG5cbi8vIEltcGxlbWVudCB0aGUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90XG5mdW5jdGlvbiB3aW5ub3coIGVsZW1lbnRzLCBxdWFsaWZpZXIsIG5vdCApIHtcblx0aWYgKCBpc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiAhIXF1YWxpZmllci5jYWxsKCBlbGVtLCBpLCBlbGVtICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBTaW5nbGUgZWxlbWVudFxuXHRpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGVsZW0gPT09IHF1YWxpZmllciApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gQXJyYXlsaWtlIG9mIGVsZW1lbnRzIChqUXVlcnksIGFyZ3VtZW50cywgQXJyYXkpXG5cdGlmICggdHlwZW9mIHF1YWxpZmllciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGluZGV4T2YuY2FsbCggcXVhbGlmaWVyLCBlbGVtICkgPiAtMSApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gRmlsdGVyZWQgZGlyZWN0bHkgZm9yIGJvdGggc2ltcGxlIGFuZCBjb21wbGV4IHNlbGVjdG9yc1xuXHRyZXR1cm4galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBlbGVtZW50cywgbm90ICk7XG59XG5cbmpRdWVyeS5maWx0ZXIgPSBmdW5jdGlvbiggZXhwciwgZWxlbXMsIG5vdCApIHtcblx0dmFyIGVsZW0gPSBlbGVtc1sgMCBdO1xuXG5cdGlmICggbm90ICkge1xuXHRcdGV4cHIgPSBcIjpub3QoXCIgKyBleHByICsgXCIpXCI7XG5cdH1cblxuXHRpZiAoIGVsZW1zLmxlbmd0aCA9PT0gMSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGVsZW0sIGV4cHIgKSA/IFsgZWxlbSBdIDogW107XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlcyggZXhwciwgalF1ZXJ5LmdyZXAoIGVsZW1zLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTtcblx0fSApICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgaSwgcmV0LFxuXHRcdFx0bGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRzZWxmID0gdGhpcztcblxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkoIHNlbGVjdG9yICkuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlzICkgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gKSApO1xuXHRcdH1cblxuXHRcdHJldCA9IHRoaXMucHVzaFN0YWNrKCBbXSApO1xuXG5cdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGpRdWVyeS5maW5kKCBzZWxlY3Rvciwgc2VsZlsgaSBdLCByZXQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbGVuID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCByZXQgKSA6IHJldDtcblx0fSxcblx0ZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCBmYWxzZSApICk7XG5cdH0sXG5cdG5vdDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgdHJ1ZSApICk7XG5cdH0sXG5cdGlzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuICEhd2lubm93KFxuXHRcdFx0dGhpcyxcblxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIHBvc2l0aW9uYWwvcmVsYXRpdmUgc2VsZWN0b3IsIGNoZWNrIG1lbWJlcnNoaXAgaW4gdGhlIHJldHVybmVkIHNldFxuXHRcdFx0Ly8gc28gJChcInA6Zmlyc3RcIikuaXMoXCJwOmxhc3RcIikgd29uJ3QgcmV0dXJuIHRydWUgZm9yIGEgZG9jIHdpdGggdHdvIFwicFwiLlxuXHRcdFx0dHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICYmIHJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSA/XG5cdFx0XHRcdGpRdWVyeSggc2VsZWN0b3IgKSA6XG5cdFx0XHRcdHNlbGVjdG9yIHx8IFtdLFxuXHRcdFx0ZmFsc2Vcblx0XHQpLmxlbmd0aDtcblx0fVxufSApO1xuXG5cbi8vIEluaXRpYWxpemUgYSBqUXVlcnkgb2JqZWN0XG5cblxuLy8gQSBjZW50cmFsIHJlZmVyZW5jZSB0byB0aGUgcm9vdCBqUXVlcnkoZG9jdW1lbnQpXG52YXIgcm9vdGpRdWVyeSxcblxuXHQvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhUTUwgc3RyaW5nc1xuXHQvLyBQcmlvcml0aXplICNpZCBvdmVyIDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAoIzk1MjEpXG5cdC8vIFN0cmljdCBIVE1MIHJlY29nbml0aW9uICgjMTEyOTA6IG11c3Qgc3RhcnQgd2l0aCA8KVxuXHQvLyBTaG9ydGN1dCBzaW1wbGUgI2lkIGNhc2UgZm9yIHNwZWVkXG5cdHJxdWlja0V4cHIgPSAvXig/OlxccyooPFtcXHdcXFddKz4pW14+XSp8IyhbXFx3LV0rKSkkLyxcblxuXHRpbml0ID0galF1ZXJ5LmZuLmluaXQgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJvb3QgKSB7XG5cdFx0dmFyIG1hdGNoLCBlbGVtO1xuXG5cdFx0Ly8gSEFORExFOiAkKFwiXCIpLCAkKG51bGwpLCAkKHVuZGVmaW5lZCksICQoZmFsc2UpXG5cdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHQvLyBNZXRob2QgaW5pdCgpIGFjY2VwdHMgYW4gYWx0ZXJuYXRlIHJvb3RqUXVlcnlcblx0XHQvLyBzbyBtaWdyYXRlIGNhbiBzdXBwb3J0IGpRdWVyeS5zdWIgKGdoLTIxMDEpXG5cdFx0cm9vdCA9IHJvb3QgfHwgcm9vdGpRdWVyeTtcblxuXHRcdC8vIEhhbmRsZSBIVE1MIHN0cmluZ3Ncblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGlmICggc2VsZWN0b3JbIDAgXSA9PT0gXCI8XCIgJiZcblx0XHRcdFx0c2VsZWN0b3JbIHNlbGVjdG9yLmxlbmd0aCAtIDEgXSA9PT0gXCI+XCIgJiZcblx0XHRcdFx0c2VsZWN0b3IubGVuZ3RoID49IDMgKSB7XG5cblx0XHRcdFx0Ly8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0aCA8PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2tcblx0XHRcdFx0bWF0Y2ggPSBbIG51bGwsIHNlbGVjdG9yLCBudWxsIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYXRjaCBodG1sIG9yIG1ha2Ugc3VyZSBubyBjb250ZXh0IGlzIHNwZWNpZmllZCBmb3IgI2lkXG5cdFx0XHRpZiAoIG1hdGNoICYmICggbWF0Y2hbIDEgXSB8fCAhY29udGV4dCApICkge1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJChodG1sKSAtPiAkKGFycmF5KVxuXHRcdFx0XHRpZiAoIG1hdGNoWyAxIF0gKSB7XG5cdFx0XHRcdFx0Y29udGV4dCA9IGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgPyBjb250ZXh0WyAwIF0gOiBjb250ZXh0O1xuXG5cdFx0XHRcdFx0Ly8gT3B0aW9uIHRvIHJ1biBzY3JpcHRzIGlzIHRydWUgZm9yIGJhY2stY29tcGF0XG5cdFx0XHRcdFx0Ly8gSW50ZW50aW9uYWxseSBsZXQgdGhlIGVycm9yIGJlIHRocm93biBpZiBwYXJzZUhUTUwgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMsIGpRdWVyeS5wYXJzZUhUTUwoXG5cdFx0XHRcdFx0XHRtYXRjaFsgMSBdLFxuXHRcdFx0XHRcdFx0Y29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBkb2N1bWVudCxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpICk7XG5cblx0XHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCwgcHJvcHMpXG5cdFx0XHRcdFx0aWYgKCByc2luZ2xlVGFnLnRlc3QoIG1hdGNoWyAxIF0gKSAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29udGV4dCApICkge1xuXHRcdFx0XHRcdFx0Zm9yICggbWF0Y2ggaW4gY29udGV4dCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBQcm9wZXJ0aWVzIG9mIGNvbnRleHQgYXJlIGNhbGxlZCBhcyBtZXRob2RzIGlmIHBvc3NpYmxlXG5cdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggdGhpc1sgbWF0Y2ggXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXNbIG1hdGNoIF0oIGNvbnRleHRbIG1hdGNoIF0gKTtcblxuXHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgb3RoZXJ3aXNlIHNldCBhcyBhdHRyaWJ1dGVzXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hdHRyKCBtYXRjaCwgY29udGV4dFsgbWF0Y2ggXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKCNpZClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWyAyIF0gKTtcblxuXHRcdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSW5qZWN0IHRoZSBlbGVtZW50IGRpcmVjdGx5IGludG8gdGhlIGpRdWVyeSBvYmplY3Rcblx0XHRcdFx0XHRcdHRoaXNbIDAgXSA9IGVsZW07XG5cdFx0XHRcdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCAkKC4uLikpXG5cdFx0XHR9IGVsc2UgaWYgKCAhY29udGV4dCB8fCBjb250ZXh0LmpxdWVyeSApIHtcblx0XHRcdFx0cmV0dXJuICggY29udGV4dCB8fCByb290ICkuZmluZCggc2VsZWN0b3IgKTtcblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsIGNvbnRleHQpXG5cdFx0XHQvLyAod2hpY2ggaXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNvbnRleHQpLmZpbmQoZXhwcilcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdC8vIEhBTkRMRTogJChET01FbGVtZW50KVxuXHRcdH0gZWxzZSBpZiAoIHNlbGVjdG9yLm5vZGVUeXBlICkge1xuXHRcdFx0dGhpc1sgMCBdID0gc2VsZWN0b3I7XG5cdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdC8vIEhBTkRMRTogJChmdW5jdGlvbilcblx0XHQvLyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHlcblx0XHR9IGVsc2UgaWYgKCBpc0Z1bmN0aW9uKCBzZWxlY3RvciApICkge1xuXHRcdFx0cmV0dXJuIHJvb3QucmVhZHkgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHJvb3QucmVhZHkoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIEV4ZWN1dGUgaW1tZWRpYXRlbHkgaWYgcmVhZHkgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0c2VsZWN0b3IoIGpRdWVyeSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWFrZUFycmF5KCBzZWxlY3RvciwgdGhpcyApO1xuXHR9O1xuXG4vLyBHaXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRoZSBqUXVlcnkgcHJvdG90eXBlIGZvciBsYXRlciBpbnN0YW50aWF0aW9uXG5pbml0LnByb3RvdHlwZSA9IGpRdWVyeS5mbjtcblxuLy8gSW5pdGlhbGl6ZSBjZW50cmFsIHJlZmVyZW5jZVxucm9vdGpRdWVyeSA9IGpRdWVyeSggZG9jdW1lbnQgKTtcblxuXG52YXIgcnBhcmVudHNwcmV2ID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sXG5cblx0Ly8gTWV0aG9kcyBndWFyYW50ZWVkIHRvIHByb2R1Y2UgYSB1bmlxdWUgc2V0IHdoZW4gc3RhcnRpbmcgZnJvbSBhIHVuaXF1ZSBzZXRcblx0Z3VhcmFudGVlZFVuaXF1ZSA9IHtcblx0XHRjaGlsZHJlbjogdHJ1ZSxcblx0XHRjb250ZW50czogdHJ1ZSxcblx0XHRuZXh0OiB0cnVlLFxuXHRcdHByZXY6IHRydWVcblx0fTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRoYXM6IGZ1bmN0aW9uKCB0YXJnZXQgKSB7XG5cdFx0dmFyIHRhcmdldHMgPSBqUXVlcnkoIHRhcmdldCwgdGhpcyApLFxuXHRcdFx0bCA9IHRhcmdldHMubGVuZ3RoO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHRoaXMsIHRhcmdldHNbIGkgXSApICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRleHQgKSB7XG5cdFx0dmFyIGN1cixcblx0XHRcdGkgPSAwLFxuXHRcdFx0bCA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0bWF0Y2hlZCA9IFtdLFxuXHRcdFx0dGFyZ2V0cyA9IHR5cGVvZiBzZWxlY3RvcnMgIT09IFwic3RyaW5nXCIgJiYgalF1ZXJ5KCBzZWxlY3RvcnMgKTtcblxuXHRcdC8vIFBvc2l0aW9uYWwgc2VsZWN0b3JzIG5ldmVyIG1hdGNoLCBzaW5jZSB0aGVyZSdzIG5vIF9zZWxlY3Rpb25fIGNvbnRleHRcblx0XHRpZiAoICFybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9ycyApICkge1xuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRmb3IgKCBjdXIgPSB0aGlzWyBpIF07IGN1ciAmJiBjdXIgIT09IGNvbnRleHQ7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkge1xuXG5cdFx0XHRcdFx0Ly8gQWx3YXlzIHNraXAgZG9jdW1lbnQgZnJhZ21lbnRzXG5cdFx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPCAxMSAmJiAoIHRhcmdldHMgP1xuXHRcdFx0XHRcdFx0dGFyZ2V0cy5pbmRleCggY3VyICkgPiAtMSA6XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IHBhc3Mgbm9uLWVsZW1lbnRzIHRvIFNpenpsZVxuXHRcdFx0XHRcdFx0Y3VyLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggY3VyLCBzZWxlY3RvcnMgKSApICkge1xuXG5cdFx0XHRcdFx0XHRtYXRjaGVkLnB1c2goIGN1ciApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkLmxlbmd0aCA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApIDogbWF0Y2hlZCApO1xuXHR9LFxuXG5cdC8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRoaW4gdGhlIHNldFxuXHRpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBObyBhcmd1bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVudFxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCB0aGlzWyAwIF0gJiYgdGhpc1sgMCBdLnBhcmVudE5vZGUgKSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoIDogLTE7XG5cdFx0fVxuXG5cdFx0Ly8gSW5kZXggaW4gc2VsZWN0b3Jcblx0XHRpZiAoIHR5cGVvZiBlbGVtID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggalF1ZXJ5KCBlbGVtICksIHRoaXNbIDAgXSApO1xuXHRcdH1cblxuXHRcdC8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQgZWxlbWVudFxuXHRcdHJldHVybiBpbmRleE9mLmNhbGwoIHRoaXMsXG5cblx0XHRcdC8vIElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdXNlZFxuXHRcdFx0ZWxlbS5qcXVlcnkgPyBlbGVtWyAwIF0gOiBlbGVtXG5cdFx0KTtcblx0fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soXG5cdFx0XHRqUXVlcnkudW5pcXVlU29ydChcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgpLCBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0ICkgKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkQmFjazogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/XG5cdFx0XHR0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKCBzZWxlY3RvciApXG5cdFx0KTtcblx0fVxufSApO1xuXG5mdW5jdGlvbiBzaWJsaW5nKCBjdXIsIGRpciApIHtcblx0d2hpbGUgKCAoIGN1ciA9IGN1clsgZGlyIF0gKSAmJiBjdXIubm9kZVR5cGUgIT09IDEgKSB7fVxuXHRyZXR1cm4gY3VyO1xufVxuXG5qUXVlcnkuZWFjaCgge1xuXHRwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0cmV0dXJuIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDtcblx0fSxcblx0cGFyZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIgKTtcblx0fSxcblx0cGFyZW50c1VudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIsIHVudGlsICk7XG5cdH0sXG5cdG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXZBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRzaWJsaW5nczogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCAoIGVsZW0ucGFyZW50Tm9kZSB8fCB7fSApLmZpcnN0Q2hpbGQsIGVsZW0gKTtcblx0fSxcblx0Y2hpbGRyZW46IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggZWxlbS5maXJzdENoaWxkICk7XG5cdH0sXG5cdGNvbnRlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRpZiAoIHR5cGVvZiBlbGVtLmNvbnRlbnREb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLmNvbnRlbnREb2N1bWVudDtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seSwgaU9TIDcgb25seSwgQW5kcm9pZCBCcm93c2VyIDw9NC4zIG9ubHlcblx0XHQvLyBUcmVhdCB0aGUgdGVtcGxhdGUgZWxlbWVudCBhcyBhIHJlZ3VsYXIgb25lIGluIGJyb3dzZXJzIHRoYXRcblx0XHQvLyBkb24ndCBzdXBwb3J0IGl0LlxuXHRcdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGVtcGxhdGVcIiApICkge1xuXHRcdFx0ZWxlbSA9IGVsZW0uY29udGVudCB8fCBlbGVtO1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9kZXMgKTtcblx0fVxufSwgZnVuY3Rpb24oIG5hbWUsIGZuICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB1bnRpbCwgc2VsZWN0b3IgKSB7XG5cdFx0dmFyIG1hdGNoZWQgPSBqUXVlcnkubWFwKCB0aGlzLCBmbiwgdW50aWwgKTtcblxuXHRcdGlmICggbmFtZS5zbGljZSggLTUgKSAhPT0gXCJVbnRpbFwiICkge1xuXHRcdFx0c2VsZWN0b3IgPSB1bnRpbDtcblx0XHR9XG5cblx0XHRpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdG1hdGNoZWQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgbWF0Y2hlZCApO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5sZW5ndGggPiAxICkge1xuXG5cdFx0XHQvLyBSZW1vdmUgZHVwbGljYXRlc1xuXHRcdFx0aWYgKCAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFtZSBdICkge1xuXHRcdFx0XHRqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXZlcnNlIG9yZGVyIGZvciBwYXJlbnRzKiBhbmQgcHJldi1kZXJpdmF0aXZlc1xuXHRcdFx0aWYgKCBycGFyZW50c3ByZXYudGVzdCggbmFtZSApICkge1xuXHRcdFx0XHRtYXRjaGVkLnJldmVyc2UoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQgKTtcblx0fTtcbn0gKTtcbnZhciBybm90aHRtbHdoaXRlID0gKCAvW15cXHgyMFxcdFxcclxcblxcZl0rL2cgKTtcblxuXG5cbi8vIENvbnZlcnQgU3RyaW5nLWZvcm1hdHRlZCBvcHRpb25zIGludG8gT2JqZWN0LWZvcm1hdHRlZCBvbmVzXG5mdW5jdGlvbiBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkge1xuXHR2YXIgb2JqZWN0ID0ge307XG5cdGpRdWVyeS5lYWNoKCBvcHRpb25zLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10sIGZ1bmN0aW9uKCBfLCBmbGFnICkge1xuXHRcdG9iamVjdFsgZmxhZyBdID0gdHJ1ZTtcblx0fSApO1xuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG4vKlxuICogQ3JlYXRlIGEgY2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6XG4gKlxuICpcdG9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3dcbiAqXHRcdFx0dGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0aW9uIG9iamVjdFxuICpcbiAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxpa2UgYW4gZXZlbnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlXG4gKiBcImZpcmVkXCIgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogUG9zc2libGUgb3B0aW9uczpcbiAqXG4gKlx0b25jZTpcdFx0XHR3aWxsIGVuc3VyZSB0aGUgY2FsbGJhY2sgbGlzdCBjYW4gb25seSBiZSBmaXJlZCBvbmNlIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdG1lbW9yeTpcdFx0XHR3aWxsIGtlZXAgdHJhY2sgb2YgcHJldmlvdXMgdmFsdWVzIGFuZCB3aWxsIGNhbGwgYW55IGNhbGxiYWNrIGFkZGVkXG4gKlx0XHRcdFx0XHRhZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBmaXJlZCByaWdodCBhd2F5IHdpdGggdGhlIGxhdGVzdCBcIm1lbW9yaXplZFwiXG4gKlx0XHRcdFx0XHR2YWx1ZXMgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0dW5pcXVlOlx0XHRcdHdpbGwgZW5zdXJlIGEgY2FsbGJhY2sgY2FuIG9ubHkgYmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KVxuICpcbiAqXHRzdG9wT25GYWxzZTpcdGludGVycnVwdCBjYWxsaW5ncyB3aGVuIGEgY2FsbGJhY2sgcmV0dXJucyBmYWxzZVxuICpcbiAqL1xualF1ZXJ5LkNhbGxiYWNrcyA9IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXG5cdC8vIENvbnZlcnQgb3B0aW9ucyBmcm9tIFN0cmluZy1mb3JtYXR0ZWQgdG8gT2JqZWN0LWZvcm1hdHRlZCBpZiBuZWVkZWRcblx0Ly8gKHdlIGNoZWNrIGluIGNhY2hlIGZpcnN0KVxuXHRvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIgP1xuXHRcdGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSA6XG5cdFx0alF1ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMgKTtcblxuXHR2YXIgLy8gRmxhZyB0byBrbm93IGlmIGxpc3QgaXMgY3VycmVudGx5IGZpcmluZ1xuXHRcdGZpcmluZyxcblxuXHRcdC8vIExhc3QgZmlyZSB2YWx1ZSBmb3Igbm9uLWZvcmdldHRhYmxlIGxpc3RzXG5cdFx0bWVtb3J5LFxuXG5cdFx0Ly8gRmxhZyB0byBrbm93IGlmIGxpc3Qgd2FzIGFscmVhZHkgZmlyZWRcblx0XHRmaXJlZCxcblxuXHRcdC8vIEZsYWcgdG8gcHJldmVudCBmaXJpbmdcblx0XHRsb2NrZWQsXG5cblx0XHQvLyBBY3R1YWwgY2FsbGJhY2sgbGlzdFxuXHRcdGxpc3QgPSBbXSxcblxuXHRcdC8vIFF1ZXVlIG9mIGV4ZWN1dGlvbiBkYXRhIGZvciByZXBlYXRhYmxlIGxpc3RzXG5cdFx0cXVldWUgPSBbXSxcblxuXHRcdC8vIEluZGV4IG9mIGN1cnJlbnRseSBmaXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IGFkZC9yZW1vdmUgYXMgbmVlZGVkKVxuXHRcdGZpcmluZ0luZGV4ID0gLTEsXG5cblx0XHQvLyBGaXJlIGNhbGxiYWNrc1xuXHRcdGZpcmUgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5mb3JjZSBzaW5nbGUtZmlyaW5nXG5cdFx0XHRsb2NrZWQgPSBsb2NrZWQgfHwgb3B0aW9ucy5vbmNlO1xuXG5cdFx0XHQvLyBFeGVjdXRlIGNhbGxiYWNrcyBmb3IgYWxsIHBlbmRpbmcgZXhlY3V0aW9ucyxcblx0XHRcdC8vIHJlc3BlY3RpbmcgZmlyaW5nSW5kZXggb3ZlcnJpZGVzIGFuZCBydW50aW1lIGNoYW5nZXNcblx0XHRcdGZpcmVkID0gZmlyaW5nID0gdHJ1ZTtcblx0XHRcdGZvciAoIDsgcXVldWUubGVuZ3RoOyBmaXJpbmdJbmRleCA9IC0xICkge1xuXHRcdFx0XHRtZW1vcnkgPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0XHR3aGlsZSAoICsrZmlyaW5nSW5kZXggPCBsaXN0Lmxlbmd0aCApIHtcblxuXHRcdFx0XHRcdC8vIFJ1biBjYWxsYmFjayBhbmQgY2hlY2sgZm9yIGVhcmx5IHRlcm1pbmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBsaXN0WyBmaXJpbmdJbmRleCBdLmFwcGx5KCBtZW1vcnlbIDAgXSwgbWVtb3J5WyAxIF0gKSA9PT0gZmFsc2UgJiZcblx0XHRcdFx0XHRcdG9wdGlvbnMuc3RvcE9uRmFsc2UgKSB7XG5cblx0XHRcdFx0XHRcdC8vIEp1bXAgdG8gZW5kIGFuZCBmb3JnZXQgdGhlIGRhdGEgc28gLmFkZCBkb2Vzbid0IHJlLWZpcmVcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGg7XG5cdFx0XHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yZ2V0IHRoZSBkYXRhIGlmIHdlJ3JlIGRvbmUgd2l0aCBpdFxuXHRcdFx0aWYgKCAhb3B0aW9ucy5tZW1vcnkgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRmaXJpbmcgPSBmYWxzZTtcblxuXHRcdFx0Ly8gQ2xlYW4gdXAgaWYgd2UncmUgZG9uZSBmaXJpbmcgZm9yIGdvb2Rcblx0XHRcdGlmICggbG9ja2VkICkge1xuXG5cdFx0XHRcdC8vIEtlZXAgYW4gZW1wdHkgbGlzdCBpZiB3ZSBoYXZlIGRhdGEgZm9yIGZ1dHVyZSBhZGQgY2FsbHNcblx0XHRcdFx0aWYgKCBtZW1vcnkgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgdGhpcyBvYmplY3QgaXMgc3BlbnRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsaXN0ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBBY3R1YWwgQ2FsbGJhY2tzIG9iamVjdFxuXHRcdHNlbGYgPSB7XG5cblx0XHRcdC8vIEFkZCBhIGNhbGxiYWNrIG9yIGEgY29sbGVjdGlvbiBvZiBjYWxsYmFja3MgdG8gdGhlIGxpc3Rcblx0XHRcdGFkZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblxuXHRcdFx0XHRcdC8vIElmIHdlIGhhdmUgbWVtb3J5IGZyb20gYSBwYXN0IHJ1biwgd2Ugc2hvdWxkIGZpcmUgYWZ0ZXIgYWRkaW5nXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGggLSAxO1xuXHRcdFx0XHRcdFx0cXVldWUucHVzaCggbWVtb3J5ICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0KCBmdW5jdGlvbiBhZGQoIGFyZ3MgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggYXJncywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoICFvcHRpb25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGlzdC5wdXNoKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVuZ3RoICYmIHRvVHlwZSggYXJnICkgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBJbnNwZWN0IHJlY3Vyc2l2ZWx5XG5cdFx0XHRcdFx0XHRcdFx0YWRkKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdH0gKSggYXJndW1lbnRzICk7XG5cblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhIGNhbGxiYWNrIGZyb20gdGhlIGxpc3Rcblx0XHRcdHJlbW92ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0dmFyIGluZGV4O1xuXHRcdFx0XHRcdHdoaWxlICggKCBpbmRleCA9IGpRdWVyeS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0bGlzdC5zcGxpY2UoIGluZGV4LCAxICk7XG5cblx0XHRcdFx0XHRcdC8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlc1xuXHRcdFx0XHRcdFx0aWYgKCBpbmRleCA8PSBmaXJpbmdJbmRleCApIHtcblx0XHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXgtLTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDaGVjayBpZiBhIGdpdmVuIGNhbGxiYWNrIGlzIGluIHRoZSBsaXN0LlxuXHRcdFx0Ly8gSWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sIHJldHVybiB3aGV0aGVyIG9yIG5vdCBsaXN0IGhhcyBjYWxsYmFja3MgYXR0YWNoZWQuXG5cdFx0XHRoYXM6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0cmV0dXJuIGZuID9cblx0XHRcdFx0XHRqUXVlcnkuaW5BcnJheSggZm4sIGxpc3QgKSA+IC0xIDpcblx0XHRcdFx0XHRsaXN0Lmxlbmd0aCA+IDA7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBsaXN0XG5cdFx0XHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlIGFuZCAuYWRkXG5cdFx0XHQvLyBBYm9ydCBhbnkgY3VycmVudC9wZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdC8vIENsZWFyIGFsbCBjYWxsYmFja3MgYW5kIHZhbHVlc1xuXHRcdFx0ZGlzYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRkaXNhYmxlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhbGlzdDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmVcblx0XHRcdC8vIEFsc28gZGlzYWJsZSAuYWRkIHVubGVzcyB3ZSBoYXZlIG1lbW9yeSAoc2luY2UgaXQgd291bGQgaGF2ZSBubyBlZmZlY3QpXG5cdFx0XHQvLyBBYm9ydCBhbnkgcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHRsb2NrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0aWYgKCAhbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0bG9ja2VkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhbG9ja2VkO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGNvbnRleHQgYW5kIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZVdpdGg6IGZ1bmN0aW9uKCBjb250ZXh0LCBhcmdzICkge1xuXHRcdFx0XHRpZiAoICFsb2NrZWQgKSB7XG5cdFx0XHRcdFx0YXJncyA9IGFyZ3MgfHwgW107XG5cdFx0XHRcdFx0YXJncyA9IFsgY29udGV4dCwgYXJncy5zbGljZSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3MgXTtcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBhcmdzICk7XG5cdFx0XHRcdFx0aWYgKCAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzXG5cdFx0XHRmaXJlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0c2VsZi5maXJlV2l0aCggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiB0aGUgY2FsbGJhY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbGxlZCBhdCBsZWFzdCBvbmNlXG5cdFx0XHRmaXJlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWZpcmVkO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0cmV0dXJuIHNlbGY7XG59O1xuXG5cbmZ1bmN0aW9uIElkZW50aXR5KCB2ICkge1xuXHRyZXR1cm4gdjtcbn1cbmZ1bmN0aW9uIFRocm93ZXIoIGV4ICkge1xuXHR0aHJvdyBleDtcbn1cblxuZnVuY3Rpb24gYWRvcHRWYWx1ZSggdmFsdWUsIHJlc29sdmUsIHJlamVjdCwgbm9WYWx1ZSApIHtcblx0dmFyIG1ldGhvZDtcblxuXHR0cnkge1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIHByb21pc2UgYXNwZWN0IGZpcnN0IHRvIHByaXZpbGVnZSBzeW5jaHJvbm91cyBiZWhhdmlvclxuXHRcdGlmICggdmFsdWUgJiYgaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS5wcm9taXNlICkgKSApIHtcblx0XHRcdG1ldGhvZC5jYWxsKCB2YWx1ZSApLmRvbmUoIHJlc29sdmUgKS5mYWlsKCByZWplY3QgKTtcblxuXHRcdC8vIE90aGVyIHRoZW5hYmxlc1xuXHRcdH0gZWxzZSBpZiAoIHZhbHVlICYmIGlzRnVuY3Rpb24oICggbWV0aG9kID0gdmFsdWUudGhlbiApICkgKSB7XG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUsIHJlc29sdmUsIHJlamVjdCApO1xuXG5cdFx0Ly8gT3RoZXIgbm9uLXRoZW5hYmxlc1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIENvbnRyb2wgYHJlc29sdmVgIGFyZ3VtZW50cyBieSBsZXR0aW5nIEFycmF5I3NsaWNlIGNhc3QgYm9vbGVhbiBgbm9WYWx1ZWAgdG8gaW50ZWdlcjpcblx0XHRcdC8vICogZmFsc2U6IFsgdmFsdWUgXS5zbGljZSggMCApID0+IHJlc29sdmUoIHZhbHVlIClcblx0XHRcdC8vICogdHJ1ZTogWyB2YWx1ZSBdLnNsaWNlKCAxICkgPT4gcmVzb2x2ZSgpXG5cdFx0XHRyZXNvbHZlLmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXS5zbGljZSggbm9WYWx1ZSApICk7XG5cdFx0fVxuXG5cdC8vIEZvciBQcm9taXNlcy9BKywgY29udmVydCBleGNlcHRpb25zIGludG8gcmVqZWN0aW9uc1xuXHQvLyBTaW5jZSBqUXVlcnkud2hlbiBkb2Vzbid0IHVud3JhcCB0aGVuYWJsZXMsIHdlIGNhbiBza2lwIHRoZSBleHRyYSBjaGVja3MgYXBwZWFyaW5nIGluXG5cdC8vIERlZmVycmVkI3RoZW4gdG8gY29uZGl0aW9uYWxseSBzdXBwcmVzcyByZWplY3Rpb24uXG5cdH0gY2F0Y2ggKCB2YWx1ZSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIG9ubHlcblx0XHQvLyBTdHJpY3QgbW9kZSBmdW5jdGlvbnMgaW52b2tlZCB3aXRob3V0IC5jYWxsLy5hcHBseSBnZXQgZ2xvYmFsLW9iamVjdCBjb250ZXh0XG5cdFx0cmVqZWN0LmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXSApO1xuXHR9XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHREZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7XG5cdFx0dmFyIHR1cGxlcyA9IFtcblxuXHRcdFx0XHQvLyBhY3Rpb24sIGFkZCBsaXN0ZW5lciwgY2FsbGJhY2tzLFxuXHRcdFx0XHQvLyAuLi4gLnRoZW4gaGFuZGxlcnMsIGFyZ3VtZW50IGluZGV4LCBbZmluYWwgc3RhdGVdXG5cdFx0XHRcdFsgXCJub3RpZnlcIiwgXCJwcm9ncmVzc1wiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLCAyIF0sXG5cdFx0XHRcdFsgXCJyZXNvbHZlXCIsIFwiZG9uZVwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgMCwgXCJyZXNvbHZlZFwiIF0sXG5cdFx0XHRcdFsgXCJyZWplY3RcIiwgXCJmYWlsXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCAxLCBcInJlamVjdGVkXCIgXVxuXHRcdFx0XSxcblx0XHRcdHN0YXRlID0gXCJwZW5kaW5nXCIsXG5cdFx0XHRwcm9taXNlID0ge1xuXHRcdFx0XHRzdGF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRhbHdheXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGRlZmVycmVkLmRvbmUoIGFyZ3VtZW50cyApLmZhaWwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImNhdGNoXCI6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJvbWlzZS50aGVuKCBudWxsLCBmbiApO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEtlZXAgcGlwZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0cGlwZTogZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICovICkge1xuXHRcdFx0XHRcdHZhciBmbnMgPSBhcmd1bWVudHM7XG5cblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTWFwIHR1cGxlcyAocHJvZ3Jlc3MsIGRvbmUsIGZhaWwpIHRvIGFyZ3VtZW50cyAoZG9uZSwgZmFpbCwgcHJvZ3Jlc3MpXG5cdFx0XHRcdFx0XHRcdHZhciBmbiA9IGlzRnVuY3Rpb24oIGZuc1sgdHVwbGVbIDQgXSBdICkgJiYgZm5zWyB0dXBsZVsgNCBdIF07XG5cblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQucHJvZ3Jlc3MoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIubm90aWZ5IH0pXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLmRvbmUoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVzb2x2ZSB9KVxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5mYWlsKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlamVjdCB9KVxuXHRcdFx0XHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDEgXSBdKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQgPSBmbiAmJiBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCAmJiBpc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC5wcm9taXNlKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnByb2dyZXNzKCBuZXdEZWZlci5ub3RpZnkgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5mYWlsKCBuZXdEZWZlci5yZWplY3QgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXJbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmbiA/IFsgcmV0dXJuZWQgXSA6IGFyZ3VtZW50c1xuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdGZucyA9IG51bGw7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhlbjogZnVuY3Rpb24oIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBvblByb2dyZXNzICkge1xuXHRcdFx0XHRcdHZhciBtYXhEZXB0aCA9IDA7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gcmVzb2x2ZSggZGVwdGgsIGRlZmVycmVkLCBoYW5kbGVyLCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdGhhdCA9IHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0YXJncyA9IGFyZ3VtZW50cyxcblx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQsIHRoZW47XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4zXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01OVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIGRvdWJsZS1yZXNvbHV0aW9uIGF0dGVtcHRzXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoIDwgbWF4RGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQgPSBoYW5kbGVyLmFwcGx5KCB0aGF0LCBhcmdzICk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjFcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTQ4XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkID09PSBkZWZlcnJlZC5wcm9taXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoIFwiVGhlbmFibGUgc2VsZi1yZXNvbHV0aW9uXCIgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbnMgMi4zLjMuMSwgMy41XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01NFxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNzVcblx0XHRcdFx0XHRcdFx0XHRcdC8vIFJldHJpZXZlIGB0aGVuYCBvbmx5IG9uY2Vcblx0XHRcdFx0XHRcdFx0XHRcdHRoZW4gPSByZXR1cm5lZCAmJlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBjaGVjayBvYmplY3RzIGFuZCBmdW5jdGlvbnMgZm9yIHRoZW5hYmlsaXR5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggdHlwZW9mIHJldHVybmVkID09PSBcIm9iamVjdFwiIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHJldHVybmVkID09PSBcImZ1bmN0aW9uXCIgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC50aGVuO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYSByZXR1cm5lZCB0aGVuYWJsZVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGVuICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3BlY2lhbCBwcm9jZXNzb3JzIChub3RpZnkpIGp1c3Qgd2FpdCBmb3IgcmVzb2x1dGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWwgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gTm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGFsc28gaG9vayBpbnRvIHByb2dyZXNzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgZGlzcmVnYXJkIG9sZGVyIHJlc29sdXRpb24gdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4RGVwdGgrKztcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhbGwgb3RoZXIgcmV0dXJuZWQgdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggaGFuZGxlciAhPT0gSWRlbnRpdHkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyByZXR1cm5lZCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gUHJvY2VzcyB0aGUgdmFsdWUocylcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmYXVsdCBwcm9jZXNzIGlzIHJlc29sdmVcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCBzcGVjaWFsIHx8IGRlZmVycmVkLnJlc29sdmVXaXRoICkoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBub3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgY2F0Y2ggYW5kIHJlamVjdCBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcyA9IHNwZWNpYWwgP1xuXHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rKCBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLnN0YWNrVHJhY2UgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuNC4xXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBJZ25vcmUgcG9zdC1yZXNvbHV0aW9uIGV4Y2VwdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoICsgMSA+PSBtYXhEZXB0aCApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBzdWJzdGl0dXRlIGhhbmRsZXJzIHBhc3Mgb24gY29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGhhbmRsZXIgIT09IFRocm93ZXIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoYXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBbIGUgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggdGhhdCwgYXJncyApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuMVxuXHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01N1xuXHRcdFx0XHRcdFx0XHQvLyBSZS1yZXNvbHZlIHByb21pc2VzIGltbWVkaWF0ZWx5IHRvIGRvZGdlIGZhbHNlIHJlamVjdGlvbiBmcm9tXG5cdFx0XHRcdFx0XHRcdC8vIHN1YnNlcXVlbnQgZXJyb3JzXG5cdFx0XHRcdFx0XHRcdGlmICggZGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcygpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2FsbCBhbiBvcHRpb25hbCBob29rIHRvIHJlY29yZCB0aGUgc3RhY2ssIGluIGNhc2Ugb2YgZXhjZXB0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Ly8gc2luY2UgaXQncyBvdGhlcndpc2UgbG9zdCB3aGVuIGV4ZWN1dGlvbiBnb2VzIGFzeW5jXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5zdGFja1RyYWNlID0galF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggcHJvY2VzcyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcblxuXHRcdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblByb2dyZXNzICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25Qcm9ncmVzcyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eSxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlci5ub3RpZnlXaXRoXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDEgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uRnVsZmlsbGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25GdWxmaWxsZWQgOlxuXHRcdFx0XHRcdFx0XHRcdFx0SWRlbnRpdHlcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAyIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblJlamVjdGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25SZWplY3RlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRUaHJvd2VyXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBHZXQgYSBwcm9taXNlIGZvciB0aGlzIGRlZmVycmVkXG5cdFx0XHRcdC8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3Rcblx0XHRcdFx0cHJvbWlzZTogZnVuY3Rpb24oIG9iaiApIHtcblx0XHRcdFx0XHRyZXR1cm4gb2JqICE9IG51bGwgPyBqUXVlcnkuZXh0ZW5kKCBvYmosIHByb21pc2UgKSA6IHByb21pc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWZlcnJlZCA9IHt9O1xuXG5cdFx0Ly8gQWRkIGxpc3Qtc3BlY2lmaWMgbWV0aG9kc1xuXHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHtcblx0XHRcdHZhciBsaXN0ID0gdHVwbGVbIDIgXSxcblx0XHRcdFx0c3RhdGVTdHJpbmcgPSB0dXBsZVsgNSBdO1xuXG5cdFx0XHQvLyBwcm9taXNlLnByb2dyZXNzID0gbGlzdC5hZGRcblx0XHRcdC8vIHByb21pc2UuZG9uZSA9IGxpc3QuYWRkXG5cdFx0XHQvLyBwcm9taXNlLmZhaWwgPSBsaXN0LmFkZFxuXHRcdFx0cHJvbWlzZVsgdHVwbGVbIDEgXSBdID0gbGlzdC5hZGQ7XG5cblx0XHRcdC8vIEhhbmRsZSBzdGF0ZVxuXHRcdFx0aWYgKCBzdGF0ZVN0cmluZyApIHtcblx0XHRcdFx0bGlzdC5hZGQoXG5cdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIHN0YXRlID0gXCJyZXNvbHZlZFwiIChpLmUuLCBmdWxmaWxsZWQpXG5cdFx0XHRcdFx0XHQvLyBzdGF0ZSA9IFwicmVqZWN0ZWRcIlxuXHRcdFx0XHRcdFx0c3RhdGUgPSBzdGF0ZVN0cmluZztcblx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHR0dXBsZXNbIDMgLSBpIF1bIDIgXS5kaXNhYmxlLFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZGlzYWJsZVxuXHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5kaXNhYmxlXG5cdFx0XHRcdFx0dHVwbGVzWyAzIC0gaSBdWyAzIF0uZGlzYWJsZSxcblxuXHRcdFx0XHRcdC8vIHByb2dyZXNzX2NhbGxiYWNrcy5sb2NrXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDIgXS5sb2NrLFxuXG5cdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMubG9ja1xuXHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAzIF0ubG9ja1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5maXJlXG5cdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0bGlzdC5hZGQoIHR1cGxlWyAzIF0uZmlyZSApO1xuXG5cdFx0XHQvLyBkZWZlcnJlZC5ub3RpZnkgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQubm90aWZ5V2l0aCguLi4pIH1cblx0XHRcdC8vIGRlZmVycmVkLnJlc29sdmUgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVzb2x2ZVdpdGgoLi4uKSB9XG5cdFx0XHQvLyBkZWZlcnJlZC5yZWplY3QgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVqZWN0V2l0aCguLi4pIH1cblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKCB0aGlzID09PSBkZWZlcnJlZCA/IHVuZGVmaW5lZCA6IHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH07XG5cblx0XHRcdC8vIGRlZmVycmVkLm5vdGlmeVdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHQvLyBkZWZlcnJlZC5yZXNvbHZlV2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdC8vIGRlZmVycmVkLnJlamVjdFdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0gPSBsaXN0LmZpcmVXaXRoO1xuXHRcdH0gKTtcblxuXHRcdC8vIE1ha2UgdGhlIGRlZmVycmVkIGEgcHJvbWlzZVxuXHRcdHByb21pc2UucHJvbWlzZSggZGVmZXJyZWQgKTtcblxuXHRcdC8vIENhbGwgZ2l2ZW4gZnVuYyBpZiBhbnlcblx0XHRpZiAoIGZ1bmMgKSB7XG5cdFx0XHRmdW5jLmNhbGwoIGRlZmVycmVkLCBkZWZlcnJlZCApO1xuXHRcdH1cblxuXHRcdC8vIEFsbCBkb25lIVxuXHRcdHJldHVybiBkZWZlcnJlZDtcblx0fSxcblxuXHQvLyBEZWZlcnJlZCBoZWxwZXJcblx0d2hlbjogZnVuY3Rpb24oIHNpbmdsZVZhbHVlICkge1xuXHRcdHZhclxuXG5cdFx0XHQvLyBjb3VudCBvZiB1bmNvbXBsZXRlZCBzdWJvcmRpbmF0ZXNcblx0XHRcdHJlbWFpbmluZyA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cblx0XHRcdC8vIGNvdW50IG9mIHVucHJvY2Vzc2VkIGFyZ3VtZW50c1xuXHRcdFx0aSA9IHJlbWFpbmluZyxcblxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgZnVsZmlsbG1lbnQgZGF0YVxuXHRcdFx0cmVzb2x2ZUNvbnRleHRzID0gQXJyYXkoIGkgKSxcblx0XHRcdHJlc29sdmVWYWx1ZXMgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSxcblxuXHRcdFx0Ly8gdGhlIG1hc3RlciBEZWZlcnJlZFxuXHRcdFx0bWFzdGVyID0galF1ZXJ5LkRlZmVycmVkKCksXG5cblx0XHRcdC8vIHN1Ym9yZGluYXRlIGNhbGxiYWNrIGZhY3Rvcnlcblx0XHRcdHVwZGF0ZUZ1bmMgPSBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXNvbHZlQ29udGV4dHNbIGkgXSA9IHRoaXM7XG5cdFx0XHRcdFx0cmVzb2x2ZVZhbHVlc1sgaSBdID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSA6IHZhbHVlO1xuXHRcdFx0XHRcdGlmICggISggLS1yZW1haW5pbmcgKSApIHtcblx0XHRcdFx0XHRcdG1hc3Rlci5yZXNvbHZlV2l0aCggcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblxuXHRcdC8vIFNpbmdsZS0gYW5kIGVtcHR5IGFyZ3VtZW50cyBhcmUgYWRvcHRlZCBsaWtlIFByb21pc2UucmVzb2x2ZVxuXHRcdGlmICggcmVtYWluaW5nIDw9IDEgKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCBzaW5nbGVWYWx1ZSwgbWFzdGVyLmRvbmUoIHVwZGF0ZUZ1bmMoIGkgKSApLnJlc29sdmUsIG1hc3Rlci5yZWplY3QsXG5cdFx0XHRcdCFyZW1haW5pbmcgKTtcblxuXHRcdFx0Ly8gVXNlIC50aGVuKCkgdG8gdW53cmFwIHNlY29uZGFyeSB0aGVuYWJsZXMgKGNmLiBnaC0zMDAwKVxuXHRcdFx0aWYgKCBtYXN0ZXIuc3RhdGUoKSA9PT0gXCJwZW5kaW5nXCIgfHxcblx0XHRcdFx0aXNGdW5jdGlvbiggcmVzb2x2ZVZhbHVlc1sgaSBdICYmIHJlc29sdmVWYWx1ZXNbIGkgXS50aGVuICkgKSB7XG5cblx0XHRcdFx0cmV0dXJuIG1hc3Rlci50aGVuKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gTXVsdGlwbGUgYXJndW1lbnRzIGFyZSBhZ2dyZWdhdGVkIGxpa2UgUHJvbWlzZS5hbGwgYXJyYXkgZWxlbWVudHNcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHJlc29sdmVWYWx1ZXNbIGkgXSwgdXBkYXRlRnVuYyggaSApLCBtYXN0ZXIucmVqZWN0ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hc3Rlci5wcm9taXNlKCk7XG5cdH1cbn0gKTtcblxuXG4vLyBUaGVzZSB1c3VhbGx5IGluZGljYXRlIGEgcHJvZ3JhbW1lciBtaXN0YWtlIGR1cmluZyBkZXZlbG9wbWVudCxcbi8vIHdhcm4gYWJvdXQgdGhlbSBBU0FQIHJhdGhlciB0aGFuIHN3YWxsb3dpbmcgdGhlbSBieSBkZWZhdWx0LlxudmFyIHJlcnJvck5hbWVzID0gL14oRXZhbHxJbnRlcm5hbHxSYW5nZXxSZWZlcmVuY2V8U3ludGF4fFR5cGV8VVJJKUVycm9yJC87XG5cbmpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rID0gZnVuY3Rpb24oIGVycm9yLCBzdGFjayApIHtcblxuXHQvLyBTdXBwb3J0OiBJRSA4IC0gOSBvbmx5XG5cdC8vIENvbnNvbGUgZXhpc3RzIHdoZW4gZGV2IHRvb2xzIGFyZSBvcGVuLCB3aGljaCBjYW4gaGFwcGVuIGF0IGFueSB0aW1lXG5cdGlmICggd2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUud2FybiAmJiBlcnJvciAmJiByZXJyb3JOYW1lcy50ZXN0KCBlcnJvci5uYW1lICkgKSB7XG5cdFx0d2luZG93LmNvbnNvbGUud2FybiggXCJqUXVlcnkuRGVmZXJyZWQgZXhjZXB0aW9uOiBcIiArIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBzdGFjayApO1xuXHR9XG59O1xuXG5cblxuXG5qUXVlcnkucmVhZHlFeGNlcHRpb24gPSBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHR0aHJvdyBlcnJvcjtcblx0fSApO1xufTtcblxuXG5cblxuLy8gVGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5XG52YXIgcmVhZHlMaXN0ID0galF1ZXJ5LkRlZmVycmVkKCk7XG5cbmpRdWVyeS5mbi5yZWFkeSA9IGZ1bmN0aW9uKCBmbiApIHtcblxuXHRyZWFkeUxpc3Rcblx0XHQudGhlbiggZm4gKVxuXG5cdFx0Ly8gV3JhcCBqUXVlcnkucmVhZHlFeGNlcHRpb24gaW4gYSBmdW5jdGlvbiBzbyB0aGF0IHRoZSBsb29rdXBcblx0XHQvLyBoYXBwZW5zIGF0IHRoZSB0aW1lIG9mIGVycm9yIGhhbmRsaW5nIGluc3RlYWQgb2YgY2FsbGJhY2tcblx0XHQvLyByZWdpc3RyYXRpb24uXG5cdFx0LmNhdGNoKCBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdFx0XHRqUXVlcnkucmVhZHlFeGNlcHRpb24oIGVycm9yICk7XG5cdFx0fSApO1xuXG5cdHJldHVybiB0aGlzO1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIElzIHRoZSBET00gcmVhZHkgdG8gYmUgdXNlZD8gU2V0IHRvIHRydWUgb25jZSBpdCBvY2N1cnMuXG5cdGlzUmVhZHk6IGZhbHNlLFxuXG5cdC8vIEEgY291bnRlciB0byB0cmFjayBob3cgbWFueSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmVcblx0Ly8gdGhlIHJlYWR5IGV2ZW50IGZpcmVzLiBTZWUgIzY3ODFcblx0cmVhZHlXYWl0OiAxLFxuXG5cdC8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHlcblx0cmVhZHk6IGZ1bmN0aW9uKCB3YWl0ICkge1xuXG5cdFx0Ly8gQWJvcnQgaWYgdGhlcmUgYXJlIHBlbmRpbmcgaG9sZHMgb3Igd2UncmUgYWxyZWFkeSByZWFkeVxuXHRcdGlmICggd2FpdCA9PT0gdHJ1ZSA/IC0talF1ZXJ5LnJlYWR5V2FpdCA6IGpRdWVyeS5pc1JlYWR5ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJlbWVtYmVyIHRoYXQgdGhlIERPTSBpcyByZWFkeVxuXHRcdGpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTtcblxuXHRcdC8vIElmIGEgbm9ybWFsIERPTSBSZWFkeSBldmVudCBmaXJlZCwgZGVjcmVtZW50LCBhbmQgd2FpdCBpZiBuZWVkIGJlXG5cdFx0aWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5LnJlYWR5V2FpdCA+IDAgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlcmUgYXJlIGZ1bmN0aW9ucyBib3VuZCwgdG8gZXhlY3V0ZVxuXHRcdHJlYWR5TGlzdC5yZXNvbHZlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5IF0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkucmVhZHkudGhlbiA9IHJlYWR5TGlzdC50aGVuO1xuXG4vLyBUaGUgcmVhZHkgZXZlbnQgaGFuZGxlciBhbmQgc2VsZiBjbGVhbnVwIG1ldGhvZFxuZnVuY3Rpb24gY29tcGxldGVkKCkge1xuXHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG5cdGpRdWVyeS5yZWFkeSgpO1xufVxuXG4vLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZFxuLy8gYWZ0ZXIgdGhlIGJyb3dzZXIgZXZlbnQgaGFzIGFscmVhZHkgb2NjdXJyZWQuXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMCBvbmx5XG4vLyBPbGRlciBJRSBzb21ldGltZXMgc2lnbmFscyBcImludGVyYWN0aXZlXCIgdG9vIHNvb25cbmlmICggZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiIHx8XG5cdCggZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gXCJsb2FkaW5nXCIgJiYgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCApICkge1xuXG5cdC8vIEhhbmRsZSBpdCBhc3luY2hyb25vdXNseSB0byBhbGxvdyBzY3JpcHRzIHRoZSBvcHBvcnR1bml0eSB0byBkZWxheSByZWFkeVxuXHR3aW5kb3cuc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5ICk7XG5cbn0gZWxzZSB7XG5cblx0Ly8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxsYmFja1xuXHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cblx0Ly8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcbn1cblxuXG5cblxuLy8gTXVsdGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2YWx1ZXMgb2YgYSBjb2xsZWN0aW9uXG4vLyBUaGUgdmFsdWUvcyBjYW4gb3B0aW9uYWxseSBiZSBleGVjdXRlZCBpZiBpdCdzIGEgZnVuY3Rpb25cbnZhciBhY2Nlc3MgPSBmdW5jdGlvbiggZWxlbXMsIGZuLCBrZXksIHZhbHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0LCByYXcgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSBlbGVtcy5sZW5ndGgsXG5cdFx0YnVsayA9IGtleSA9PSBudWxsO1xuXG5cdC8vIFNldHMgbWFueSB2YWx1ZXNcblx0aWYgKCB0b1R5cGUoIGtleSApID09PSBcIm9iamVjdFwiICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cdFx0Zm9yICggaSBpbiBrZXkgKSB7XG5cdFx0XHRhY2Nlc3MoIGVsZW1zLCBmbiwgaSwga2V5WyBpIF0sIHRydWUsIGVtcHR5R2V0LCByYXcgKTtcblx0XHR9XG5cblx0Ly8gU2V0cyBvbmUgdmFsdWVcblx0fSBlbHNlIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXG5cdFx0aWYgKCAhaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJhdyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBidWxrICkge1xuXG5cdFx0XHQvLyBCdWxrIG9wZXJhdGlvbnMgcnVuIGFnYWluc3QgdGhlIGVudGlyZSBzZXRcblx0XHRcdGlmICggcmF3ICkge1xuXHRcdFx0XHRmbi5jYWxsKCBlbGVtcywgdmFsdWUgKTtcblx0XHRcdFx0Zm4gPSBudWxsO1xuXG5cdFx0XHQvLyAuLi5leGNlcHQgd2hlbiBleGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRidWxrID0gZm47XG5cdFx0XHRcdGZuID0gZnVuY3Rpb24oIGVsZW0sIGtleSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGJ1bGsuY2FsbCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRmbihcblx0XHRcdFx0XHRlbGVtc1sgaSBdLCBrZXksIHJhdyA/XG5cdFx0XHRcdFx0dmFsdWUgOlxuXHRcdFx0XHRcdHZhbHVlLmNhbGwoIGVsZW1zWyBpIF0sIGksIGZuKCBlbGVtc1sgaSBdLCBrZXkgKSApXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKCBjaGFpbmFibGUgKSB7XG5cdFx0cmV0dXJuIGVsZW1zO1xuXHR9XG5cblx0Ly8gR2V0c1xuXHRpZiAoIGJ1bGsgKSB7XG5cdFx0cmV0dXJuIGZuLmNhbGwoIGVsZW1zICk7XG5cdH1cblxuXHRyZXR1cm4gbGVuID8gZm4oIGVsZW1zWyAwIF0sIGtleSApIDogZW1wdHlHZXQ7XG59O1xuXG5cbi8vIE1hdGNoZXMgZGFzaGVkIHN0cmluZyBmb3IgY2FtZWxpemluZ1xudmFyIHJtc1ByZWZpeCA9IC9eLW1zLS8sXG5cdHJkYXNoQWxwaGEgPSAvLShbYS16XSkvZztcblxuLy8gVXNlZCBieSBjYW1lbENhc2UgYXMgY2FsbGJhY2sgdG8gcmVwbGFjZSgpXG5mdW5jdGlvbiBmY2FtZWxDYXNlKCBhbGwsIGxldHRlciApIHtcblx0cmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpO1xufVxuXG4vLyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhlIGNzcyBhbmQgZGF0YSBtb2R1bGVzXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG4vLyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAoIzk1NzIpXG5mdW5jdGlvbiBjYW1lbENhc2UoIHN0cmluZyApIHtcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsIFwibXMtXCIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7XG59XG52YXIgYWNjZXB0RGF0YSA9IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHQvLyBBY2NlcHRzIG9ubHk6XG5cdC8vICAtIE5vZGVcblx0Ly8gICAgLSBOb2RlLkVMRU1FTlRfTk9ERVxuXHQvLyAgICAtIE5vZGUuRE9DVU1FTlRfTk9ERVxuXHQvLyAgLSBPYmplY3Rcblx0Ly8gICAgLSBBbnlcblx0cmV0dXJuIG93bmVyLm5vZGVUeXBlID09PSAxIHx8IG93bmVyLm5vZGVUeXBlID09PSA5IHx8ICEoICtvd25lci5ub2RlVHlwZSApO1xufTtcblxuXG5cblxuZnVuY3Rpb24gRGF0YSgpIHtcblx0dGhpcy5leHBhbmRvID0galF1ZXJ5LmV4cGFuZG8gKyBEYXRhLnVpZCsrO1xufVxuXG5EYXRhLnVpZCA9IDE7XG5cbkRhdGEucHJvdG90eXBlID0ge1xuXG5cdGNhY2hlOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGVcblx0XHR2YXIgdmFsdWUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHQvLyBJZiBub3QsIGNyZWF0ZSBvbmVcblx0XHRpZiAoICF2YWx1ZSApIHtcblx0XHRcdHZhbHVlID0ge307XG5cblx0XHRcdC8vIFdlIGNhbiBhY2NlcHQgZGF0YSBmb3Igbm9uLWVsZW1lbnQgbm9kZXMgaW4gbW9kZXJuIGJyb3dzZXJzLFxuXHRcdFx0Ly8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSAjODMzNS5cblx0XHRcdC8vIEFsd2F5cyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LlxuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBvd25lciApICkge1xuXG5cdFx0XHRcdC8vIElmIGl0IGlzIGEgbm9kZSB1bmxpa2VseSB0byBiZSBzdHJpbmdpZnktZWQgb3IgbG9vcGVkIG92ZXJcblx0XHRcdFx0Ly8gdXNlIHBsYWluIGFzc2lnbm1lbnRcblx0XHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB2YWx1ZTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2Ugc2VjdXJlIGl0IGluIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHlcblx0XHRcdFx0Ly8gY29uZmlndXJhYmxlIG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUgcHJvcGVydHkgdG8gYmVcblx0XHRcdFx0Ly8gZGVsZXRlZCB3aGVuIGRhdGEgaXMgcmVtb3ZlZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggb3duZXIsIHRoaXMuZXhwYW5kbywge1xuXHRcdFx0XHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXHRzZXQ6IGZ1bmN0aW9uKCBvd25lciwgZGF0YSwgdmFsdWUgKSB7XG5cdFx0dmFyIHByb3AsXG5cdFx0XHRjYWNoZSA9IHRoaXMuY2FjaGUoIG93bmVyICk7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIGtleSwgdmFsdWUgXSBhcmdzXG5cdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBkYXRhICkgXSA9IHZhbHVlO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCB7IHByb3BlcnRpZXMgfSBdIGFyZ3Ncblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb3B5IHRoZSBwcm9wZXJ0aWVzIG9uZS1ieS1vbmUgdG8gdGhlIGNhY2hlIG9iamVjdFxuXHRcdFx0Zm9yICggcHJvcCBpbiBkYXRhICkge1xuXHRcdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBwcm9wICkgXSA9IGRhdGFbIHByb3AgXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNhY2hlO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzLmNhY2hlKCBvd25lciApIDpcblxuXHRcdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdICYmIG93bmVyWyB0aGlzLmV4cGFuZG8gXVsgY2FtZWxDYXNlKCBrZXkgKSBdO1xuXHR9LFxuXHRhY2Nlc3M6IGZ1bmN0aW9uKCBvd25lciwga2V5LCB2YWx1ZSApIHtcblxuXHRcdC8vIEluIGNhc2VzIHdoZXJlIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gTm8ga2V5IHdhcyBzcGVjaWZpZWRcblx0XHQvLyAgIDIuIEEgc3RyaW5nIGtleSB3YXMgc3BlY2lmaWVkLCBidXQgbm8gdmFsdWUgcHJvdmlkZWRcblx0XHQvL1xuXHRcdC8vIFRha2UgdGhlIFwicmVhZFwiIHBhdGggYW5kIGFsbG93IHRoZSBnZXQgbWV0aG9kIHRvIGRldGVybWluZVxuXHRcdC8vIHdoaWNoIHZhbHVlIHRvIHJldHVybiwgcmVzcGVjdGl2ZWx5IGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gVGhlIGVudGlyZSBjYWNoZSBvYmplY3Rcblx0XHQvLyAgIDIuIFRoZSBkYXRhIHN0b3JlZCBhdCB0aGUga2V5XG5cdFx0Ly9cblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdCggKCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIiApICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSApIHtcblxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0KCBvd25lciwga2V5ICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2hlbiB0aGUga2V5IGlzIG5vdCBhIHN0cmluZywgb3IgYm90aCBhIGtleSBhbmQgdmFsdWVcblx0XHQvLyBhcmUgc3BlY2lmaWVkLCBzZXQgb3IgZXh0ZW5kIChleGlzdGluZyBvYmplY3RzKSB3aXRoIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gQW4gb2JqZWN0IG9mIHByb3BlcnRpZXNcblx0XHQvLyAgIDIuIEEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vXG5cdFx0dGhpcy5zZXQoIG93bmVyLCBrZXksIHZhbHVlICk7XG5cblx0XHQvLyBTaW5jZSB0aGUgXCJzZXRcIiBwYXRoIGNhbiBoYXZlIHR3byBwb3NzaWJsZSBlbnRyeSBwb2ludHNcblx0XHQvLyByZXR1cm4gdGhlIGV4cGVjdGVkIGRhdGEgYmFzZWQgb24gd2hpY2ggcGF0aCB3YXMgdGFrZW5bKl1cblx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoga2V5O1xuXHR9LFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHZhciBpLFxuXHRcdFx0Y2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHRpZiAoIGNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGtleXNcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSgga2V5ICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYga2V5IGlzIGFuIGFycmF5IG9mIGtleXMuLi5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHNldCBjYW1lbENhc2Uga2V5cywgc28gcmVtb3ZlIHRoYXQuXG5cdFx0XHRcdGtleSA9IGtleS5tYXAoIGNhbWVsQ2FzZSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0a2V5ID0gY2FtZWxDYXNlKCBrZXkgKTtcblxuXHRcdFx0XHQvLyBJZiBhIGtleSB3aXRoIHRoZSBzcGFjZXMgZXhpc3RzLCB1c2UgaXQuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgY3JlYXRlIGFuIGFycmF5IGJ5IG1hdGNoaW5nIG5vbi13aGl0ZXNwYWNlXG5cdFx0XHRcdGtleSA9IGtleSBpbiBjYWNoZSA/XG5cdFx0XHRcdFx0WyBrZXkgXSA6XG5cdFx0XHRcdFx0KCBrZXkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpID0ga2V5Lmxlbmd0aDtcblxuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5WyBpIF0gXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgdGhlIGV4cGFuZG8gaWYgdGhlcmUncyBubyBtb3JlIGRhdGFcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1XG5cdFx0XHQvLyBXZWJraXQgJiBCbGluayBwZXJmb3JtYW5jZSBzdWZmZXJzIHdoZW4gZGVsZXRpbmcgcHJvcGVydGllc1xuXHRcdFx0Ly8gZnJvbSBET00gbm9kZXMsIHNvIHNldCB0byB1bmRlZmluZWQgaW5zdGVhZFxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzc4NjA3IChidWcgcmVzdHJpY3RlZClcblx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlbGV0ZSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRoYXNEYXRhOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cdFx0dmFyIGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdHJldHVybiBjYWNoZSAhPT0gdW5kZWZpbmVkICYmICFqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKTtcblx0fVxufTtcbnZhciBkYXRhUHJpdiA9IG5ldyBEYXRhKCk7XG5cbnZhciBkYXRhVXNlciA9IG5ldyBEYXRhKCk7XG5cblxuXG4vL1x0SW1wbGVtZW50YXRpb24gU3VtbWFyeVxuLy9cbi8vXHQxLiBFbmZvcmNlIEFQSSBzdXJmYWNlIGFuZCBzZW1hbnRpYyBjb21wYXRpYmlsaXR5IHdpdGggMS45LnggYnJhbmNoXG4vL1x0Mi4gSW1wcm92ZSB0aGUgbW9kdWxlJ3MgbWFpbnRhaW5hYmlsaXR5IGJ5IHJlZHVjaW5nIHRoZSBzdG9yYWdlXG4vL1x0XHRwYXRocyB0byBhIHNpbmdsZSBtZWNoYW5pc20uXG4vL1x0My4gVXNlIHRoZSBzYW1lIHNpbmdsZSBtZWNoYW5pc20gdG8gc3VwcG9ydCBcInByaXZhdGVcIiBhbmQgXCJ1c2VyXCIgZGF0YS5cbi8vXHQ0LiBfTmV2ZXJfIGV4cG9zZSBcInByaXZhdGVcIiBkYXRhIHRvIHVzZXIgY29kZSAoVE9ETzogRHJvcCBfZGF0YSwgX3JlbW92ZURhdGEpXG4vL1x0NS4gQXZvaWQgZXhwb3NpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvbiB1c2VyIG9iamVjdHMgKGVnLiBleHBhbmRvIHByb3BlcnRpZXMpXG4vL1x0Ni4gUHJvdmlkZSBhIGNsZWFyIHBhdGggZm9yIGltcGxlbWVudGF0aW9uIHVwZ3JhZGUgdG8gV2Vha01hcCBpbiAyMDE0XG5cbnZhciByYnJhY2UgPSAvXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC8sXG5cdHJtdWx0aURhc2ggPSAvW0EtWl0vZztcblxuZnVuY3Rpb24gZ2V0RGF0YSggZGF0YSApIHtcblx0aWYgKCBkYXRhID09PSBcInRydWVcIiApIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJmYWxzZVwiICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJudWxsXCIgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBPbmx5IGNvbnZlcnQgdG8gYSBudW1iZXIgaWYgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZ1xuXHRpZiAoIGRhdGEgPT09ICtkYXRhICsgXCJcIiApIHtcblx0XHRyZXR1cm4gK2RhdGE7XG5cdH1cblxuXHRpZiAoIHJicmFjZS50ZXN0KCBkYXRhICkgKSB7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2UoIGRhdGEgKTtcblx0fVxuXG5cdHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICkge1xuXHR2YXIgbmFtZTtcblxuXHQvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbnRlcm5hbGx5LCB0cnkgdG8gZmV0Y2ggYW55XG5cdC8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZVxuXHRpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdG5hbWUgPSBcImRhdGEtXCIgKyBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgXCItJCZcIiApLnRvTG93ZXJDYXNlKCk7XG5cdFx0ZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZGF0YSA9IGdldERhdGEoIGRhdGEgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge31cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyXG5cdFx0XHRkYXRhVXNlci5zZXQoIGVsZW0sIGtleSwgZGF0YSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGF0YTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuaGFzRGF0YSggZWxlbSApIHx8IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKTtcblx0fSxcblxuXHRkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVVzZXIucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH0sXG5cblx0Ly8gVE9ETzogTm93IHRoYXQgYWxsIGNhbGxzIHRvIF9kYXRhIGFuZCBfcmVtb3ZlRGF0YSBoYXZlIGJlZW4gcmVwbGFjZWRcblx0Ly8gd2l0aCBkaXJlY3QgY2FsbHMgdG8gZGF0YVByaXYgbWV0aG9kcywgdGhlc2UgY2FuIGJlIGRlcHJlY2F0ZWQuXG5cdF9kYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0X3JlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGF0YTogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0dmFyIGksIG5hbWUsIGRhdGEsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0YXR0cnMgPSBlbGVtICYmIGVsZW0uYXR0cmlidXRlcztcblxuXHRcdC8vIEdldHMgYWxsIHZhbHVlc1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHRoaXMubGVuZ3RoICkge1xuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtICk7XG5cblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICFkYXRhUHJpdi5nZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIgKSApIHtcblx0XHRcdFx0XHRpID0gYXR0cnMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBUaGUgYXR0cnMgZWxlbWVudHMgY2FuIGJlIG51bGwgKCMxNDg5NClcblx0XHRcdFx0XHRcdGlmICggYXR0cnNbIGkgXSApIHtcblx0XHRcdFx0XHRcdFx0bmFtZSA9IGF0dHJzWyBpIF0ubmFtZTtcblx0XHRcdFx0XHRcdFx0aWYgKCBuYW1lLmluZGV4T2YoIFwiZGF0YS1cIiApID09PSAwICkge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgPSBjYW1lbENhc2UoIG5hbWUuc2xpY2UoIDUgKSApO1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9XG5cblx0XHQvLyBTZXRzIG11bHRpcGxlIHZhbHVlc1xuXHRcdGlmICggdHlwZW9mIGtleSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBkYXRhO1xuXG5cdFx0XHQvLyBUaGUgY2FsbGluZyBqUXVlcnkgb2JqZWN0IChlbGVtZW50IG1hdGNoZXMpIGlzIG5vdCBlbXB0eVxuXHRcdFx0Ly8gKGFuZCB0aGVyZWZvcmUgaGFzIGFuIGVsZW1lbnQgYXBwZWFycyBhdCB0aGlzWyAwIF0pIGFuZCB0aGVcblx0XHRcdC8vIGB2YWx1ZWAgcGFyYW1ldGVyIHdhcyBub3QgdW5kZWZpbmVkLiBBbiBlbXB0eSBqUXVlcnkgb2JqZWN0XG5cdFx0XHQvLyB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBmb3IgZWxlbSA9IHRoaXNbIDAgXSB3aGljaCB3aWxsXG5cdFx0XHQvLyB0aHJvdyBhbiBleGNlcHRpb24gaWYgYW4gYXR0ZW1wdCB0byByZWFkIGEgZGF0YSBjYWNoZSBpcyBtYWRlLlxuXHRcdFx0aWYgKCBlbGVtICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBnZXQgZGF0YSBmcm9tIHRoZSBjYWNoZVxuXHRcdFx0XHQvLyBUaGUga2V5IHdpbGwgYWx3YXlzIGJlIGNhbWVsQ2FzZWQgaW4gRGF0YVxuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIFwiZGlzY292ZXJcIiB0aGUgZGF0YSBpblxuXHRcdFx0XHQvLyBIVE1MNSBjdXN0b20gZGF0YS0qIGF0dHJzXG5cdFx0XHRcdGRhdGEgPSBkYXRhQXR0ciggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2UgdHJpZWQgcmVhbGx5IGhhcmQsIGJ1dCB0aGUgZGF0YSBkb2Vzbid0IGV4aXN0LlxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCB0aGUgZGF0YS4uLlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBXZSBhbHdheXMgc3RvcmUgdGhlIGNhbWVsQ2FzZWQga2V5XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5LCB2YWx1ZSApO1xuXHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSwgbnVsbCwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkYXRhVXNlci5yZW1vdmUoIHRoaXMsIGtleSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBxdWV1ZTtcblxuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHR5cGUgPSAoIHR5cGUgfHwgXCJmeFwiICkgKyBcInF1ZXVlXCI7XG5cdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmdldCggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHQvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwXG5cdFx0XHRpZiAoIGRhdGEgKSB7XG5cdFx0XHRcdGlmICggIXF1ZXVlIHx8IEFycmF5LmlzQXJyYXkoIGRhdGEgKSApIHtcblx0XHRcdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cXVldWUucHVzaCggZGF0YSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcXVldWUgfHwgW107XG5cdFx0fVxuXHR9LFxuXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLFxuXHRcdFx0c3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsXG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCksXG5cdFx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSApLFxuXHRcdFx0bmV4dCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggZWxlbSwgdHlwZSApO1xuXHRcdFx0fTtcblxuXHRcdC8vIElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWxcblx0XHRpZiAoIGZuID09PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdHN0YXJ0TGVuZ3RoLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblxuXHRcdFx0Ly8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZ1xuXHRcdFx0Ly8gYXV0b21hdGljYWxseSBkZXF1ZXVlZFxuXHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgKSB7XG5cdFx0XHRcdHF1ZXVlLnVuc2hpZnQoIFwiaW5wcm9ncmVzc1wiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb25cblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0Zm4uY2FsbCggZWxlbSwgbmV4dCwgaG9va3MgKTtcblx0XHR9XG5cblx0XHRpZiAoICFzdGFydExlbmd0aCAmJiBob29rcyApIHtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gTm90IHB1YmxpYyAtIGdlbmVyYXRlIGEgcXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybiB0aGUgY3VycmVudCBvbmVcblx0X3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHZhciBrZXkgPSB0eXBlICsgXCJxdWV1ZUhvb2tzXCI7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmdldCggZWxlbSwga2V5ICkgfHwgZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBrZXksIHtcblx0XHRcdGVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKS5hZGQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFsgdHlwZSArIFwicXVldWVcIiwga2V5IF0gKTtcblx0XHRcdH0gKVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgc2V0dGVyID0gMjtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRkYXRhID0gdHlwZTtcblx0XHRcdHR5cGUgPSBcImZ4XCI7XG5cdFx0XHRzZXR0ZXItLTtcblx0XHR9XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPCBzZXR0ZXIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWyAwIF0sIHR5cGUgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMgOlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIGEgaG9va3MgZm9yIHRoaXMgcXVldWVcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgJiYgcXVldWVbIDAgXSAhPT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHR9LFxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0fSApO1xuXHR9LFxuXHRjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdH0sXG5cblx0Ly8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZVxuXHQvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdClcblx0cHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iaiApIHtcblx0XHR2YXIgdG1wLFxuXHRcdFx0Y291bnQgPSAxLFxuXHRcdFx0ZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGVsZW1lbnRzID0gdGhpcyxcblx0XHRcdGkgPSB0aGlzLmxlbmd0aCxcblx0XHRcdHJlc29sdmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhKCAtLWNvdW50ICkgKSB7XG5cdFx0XHRcdFx0ZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRvYmogPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0bXAgPSBkYXRhUHJpdi5nZXQoIGVsZW1lbnRzWyBpIF0sIHR5cGUgKyBcInF1ZXVlSG9va3NcIiApO1xuXHRcdFx0aWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkge1xuXHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHR0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJlc29sdmUoKTtcblx0XHRyZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7XG5cdH1cbn0gKTtcbnZhciBwbnVtID0gKCAvWystXT8oPzpcXGQqXFwufClcXGQrKD86W2VFXVsrLV0/XFxkK3wpLyApLnNvdXJjZTtcblxudmFyIHJjc3NOdW0gPSBuZXcgUmVnRXhwKCBcIl4oPzooWystXSk9fCkoXCIgKyBwbnVtICsgXCIpKFthLXolXSopJFwiLCBcImlcIiApO1xuXG5cbnZhciBjc3NFeHBhbmQgPSBbIFwiVG9wXCIsIFwiUmlnaHRcIiwgXCJCb3R0b21cIiwgXCJMZWZ0XCIgXTtcblxudmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuXG5cblx0dmFyIGlzQXR0YWNoZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApO1xuXHRcdH0sXG5cdFx0Y29tcG9zZWQgPSB7IGNvbXBvc2VkOiB0cnVlIH07XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4KywgaU9TIDEwLjAgLSAxMC4yIG9ubHlcblx0Ly8gQ2hlY2sgYXR0YWNobWVudCBhY3Jvc3Mgc2hhZG93IERPTSBib3VuZGFyaWVzIHdoZW4gcG9zc2libGUgKGdoLTM1MDQpXG5cdC8vIFN1cHBvcnQ6IGlPUyAxMC4wLTEwLjIgb25seVxuXHQvLyBFYXJseSBpT1MgMTAgdmVyc2lvbnMgc3VwcG9ydCBgYXR0YWNoU2hhZG93YCBidXQgbm90IGBnZXRSb290Tm9kZWAsXG5cdC8vIGxlYWRpbmcgdG8gZXJyb3JzLiBXZSBuZWVkIHRvIGNoZWNrIGZvciBgZ2V0Um9vdE5vZGVgLlxuXHRpZiAoIGRvY3VtZW50RWxlbWVudC5nZXRSb290Tm9kZSApIHtcblx0XHRpc0F0dGFjaGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKSB8fFxuXHRcdFx0XHRlbGVtLmdldFJvb3ROb2RlKCBjb21wb3NlZCApID09PSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0fTtcblx0fVxudmFyIGlzSGlkZGVuV2l0aGluVHJlZSA9IGZ1bmN0aW9uKCBlbGVtLCBlbCApIHtcblxuXHRcdC8vIGlzSGlkZGVuV2l0aGluVHJlZSBtaWdodCBiZSBjYWxsZWQgZnJvbSBqUXVlcnkjZmlsdGVyIGZ1bmN0aW9uO1xuXHRcdC8vIGluIHRoYXQgY2FzZSwgZWxlbWVudCB3aWxsIGJlIHNlY29uZCBhcmd1bWVudFxuXHRcdGVsZW0gPSBlbCB8fCBlbGVtO1xuXG5cdFx0Ly8gSW5saW5lIHN0eWxlIHRydW1wcyBhbGxcblx0XHRyZXR1cm4gZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIiB8fFxuXHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmXG5cblx0XHRcdC8vIE90aGVyd2lzZSwgY2hlY2sgY29tcHV0ZWQgc3R5bGVcblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MyAtIDQ1XG5cdFx0XHQvLyBEaXNjb25uZWN0ZWQgZWxlbWVudHMgY2FuIGhhdmUgY29tcHV0ZWQgZGlzcGxheTogbm9uZSwgc28gZmlyc3QgY29uZmlybSB0aGF0IGVsZW0gaXNcblx0XHRcdC8vIGluIHRoZSBkb2N1bWVudC5cblx0XHRcdGlzQXR0YWNoZWQoIGVsZW0gKSAmJlxuXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApID09PSBcIm5vbmVcIjtcblx0fTtcblxudmFyIHN3YXAgPSBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgY2FsbGJhY2ssIGFyZ3MgKSB7XG5cdHZhciByZXQsIG5hbWUsXG5cdFx0b2xkID0ge307XG5cblx0Ly8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1ZXMsIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmVzXG5cdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRvbGRbIG5hbWUgXSA9IGVsZW0uc3R5bGVbIG5hbWUgXTtcblx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSBvcHRpb25zWyBuYW1lIF07XG5cdH1cblxuXHRyZXQgPSBjYWxsYmFjay5hcHBseSggZWxlbSwgYXJncyB8fCBbXSApO1xuXG5cdC8vIFJldmVydCB0aGUgb2xkIHZhbHVlc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufTtcblxuXG5cblxuZnVuY3Rpb24gYWRqdXN0Q1NTKCBlbGVtLCBwcm9wLCB2YWx1ZVBhcnRzLCB0d2VlbiApIHtcblx0dmFyIGFkanVzdGVkLCBzY2FsZSxcblx0XHRtYXhJdGVyYXRpb25zID0gMjAsXG5cdFx0Y3VycmVudFZhbHVlID0gdHdlZW4gP1xuXHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5jdXIoKTtcblx0XHRcdH0gOlxuXHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wLCBcIlwiICk7XG5cdFx0XHR9LFxuXHRcdGluaXRpYWwgPSBjdXJyZW50VmFsdWUoKSxcblx0XHR1bml0ID0gdmFsdWVQYXJ0cyAmJiB2YWx1ZVBhcnRzWyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyBcIlwiIDogXCJweFwiICksXG5cblx0XHQvLyBTdGFydGluZyB2YWx1ZSBjb21wdXRhdGlvbiBpcyByZXF1aXJlZCBmb3IgcG90ZW50aWFsIHVuaXQgbWlzbWF0Y2hlc1xuXHRcdGluaXRpYWxJblVuaXQgPSBlbGVtLm5vZGVUeXBlICYmXG5cdFx0XHQoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSB8fCB1bml0ICE9PSBcInB4XCIgJiYgK2luaXRpYWwgKSAmJlxuXHRcdFx0cmNzc051bS5leGVjKCBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wICkgKTtcblxuXHRpZiAoIGluaXRpYWxJblVuaXQgJiYgaW5pdGlhbEluVW5pdFsgMyBdICE9PSB1bml0ICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTU0XG5cdFx0Ly8gSGFsdmUgdGhlIGl0ZXJhdGlvbiB0YXJnZXQgdmFsdWUgdG8gcHJldmVudCBpbnRlcmZlcmVuY2UgZnJvbSBDU1MgdXBwZXIgYm91bmRzIChnaC0yMTQ0KVxuXHRcdGluaXRpYWwgPSBpbml0aWFsIC8gMjtcblxuXHRcdC8vIFRydXN0IHVuaXRzIHJlcG9ydGVkIGJ5IGpRdWVyeS5jc3Ncblx0XHR1bml0ID0gdW5pdCB8fCBpbml0aWFsSW5Vbml0WyAzIF07XG5cblx0XHQvLyBJdGVyYXRpdmVseSBhcHByb3hpbWF0ZSBmcm9tIGEgbm9uemVybyBzdGFydGluZyBwb2ludFxuXHRcdGluaXRpYWxJblVuaXQgPSAraW5pdGlhbCB8fCAxO1xuXG5cdFx0d2hpbGUgKCBtYXhJdGVyYXRpb25zLS0gKSB7XG5cblx0XHRcdC8vIEV2YWx1YXRlIGFuZCB1cGRhdGUgb3VyIGJlc3QgZ3Vlc3MgKGRvdWJsaW5nIGd1ZXNzZXMgdGhhdCB6ZXJvIG91dCkuXG5cdFx0XHQvLyBGaW5pc2ggaWYgdGhlIHNjYWxlIGVxdWFscyBvciBjcm9zc2VzIDEgKG1ha2luZyB0aGUgb2xkKm5ldyBwcm9kdWN0IG5vbi1wb3NpdGl2ZSkuXG5cdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cdFx0XHRpZiAoICggMSAtIHNjYWxlICkgKiAoIDEgLSAoIHNjYWxlID0gY3VycmVudFZhbHVlKCkgLyBpbml0aWFsIHx8IDAuNSApICkgPD0gMCApIHtcblx0XHRcdFx0bWF4SXRlcmF0aW9ucyA9IDA7XG5cdFx0XHR9XG5cdFx0XHRpbml0aWFsSW5Vbml0ID0gaW5pdGlhbEluVW5pdCAvIHNjYWxlO1xuXG5cdFx0fVxuXG5cdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgKiAyO1xuXHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB3ZSB1cGRhdGUgdGhlIHR3ZWVuIHByb3BlcnRpZXMgbGF0ZXIgb25cblx0XHR2YWx1ZVBhcnRzID0gdmFsdWVQYXJ0cyB8fCBbXTtcblx0fVxuXG5cdGlmICggdmFsdWVQYXJ0cyApIHtcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWxJblVuaXQgfHwgK2luaXRpYWwgfHwgMDtcblxuXHRcdC8vIEFwcGx5IHJlbGF0aXZlIG9mZnNldCAoKz0vLT0pIGlmIHNwZWNpZmllZFxuXHRcdGFkanVzdGVkID0gdmFsdWVQYXJ0c1sgMSBdID9cblx0XHRcdGluaXRpYWxJblVuaXQgKyAoIHZhbHVlUGFydHNbIDEgXSArIDEgKSAqIHZhbHVlUGFydHNbIDIgXSA6XG5cdFx0XHQrdmFsdWVQYXJ0c1sgMiBdO1xuXHRcdGlmICggdHdlZW4gKSB7XG5cdFx0XHR0d2Vlbi51bml0ID0gdW5pdDtcblx0XHRcdHR3ZWVuLnN0YXJ0ID0gaW5pdGlhbEluVW5pdDtcblx0XHRcdHR3ZWVuLmVuZCA9IGFkanVzdGVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYWRqdXN0ZWQ7XG59XG5cblxudmFyIGRlZmF1bHREaXNwbGF5TWFwID0ge307XG5cbmZ1bmN0aW9uIGdldERlZmF1bHREaXNwbGF5KCBlbGVtICkge1xuXHR2YXIgdGVtcCxcblx0XHRkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQsXG5cdFx0bm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLFxuXHRcdGRpc3BsYXkgPSBkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXTtcblxuXHRpZiAoIGRpc3BsYXkgKSB7XG5cdFx0cmV0dXJuIGRpc3BsYXk7XG5cdH1cblxuXHR0ZW1wID0gZG9jLmJvZHkuYXBwZW5kQ2hpbGQoIGRvYy5jcmVhdGVFbGVtZW50KCBub2RlTmFtZSApICk7XG5cdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCB0ZW1wLCBcImRpc3BsYXlcIiApO1xuXG5cdHRlbXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggdGVtcCApO1xuXG5cdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0ZGlzcGxheSA9IFwiYmxvY2tcIjtcblx0fVxuXHRkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXSA9IGRpc3BsYXk7XG5cblx0cmV0dXJuIGRpc3BsYXk7XG59XG5cbmZ1bmN0aW9uIHNob3dIaWRlKCBlbGVtZW50cywgc2hvdyApIHtcblx0dmFyIGRpc3BsYXksIGVsZW0sXG5cdFx0dmFsdWVzID0gW10sXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblxuXHQvLyBEZXRlcm1pbmUgbmV3IGRpc3BsYXkgdmFsdWUgZm9yIGVsZW1lbnRzIHRoYXQgbmVlZCB0byBjaGFuZ2Vcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRlbGVtID0gZWxlbWVudHNbIGluZGV4IF07XG5cdFx0aWYgKCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXk7XG5cdFx0aWYgKCBzaG93ICkge1xuXG5cdFx0XHQvLyBTaW5jZSB3ZSBmb3JjZSB2aXNpYmlsaXR5IHVwb24gY2FzY2FkZS1oaWRkZW4gZWxlbWVudHMsIGFuIGltbWVkaWF0ZSAoYW5kIHNsb3cpXG5cdFx0XHQvLyBjaGVjayBpcyByZXF1aXJlZCBpbiB0aGlzIGZpcnN0IGxvb3AgdW5sZXNzIHdlIGhhdmUgYSBub25lbXB0eSBkaXNwbGF5IHZhbHVlIChlaXRoZXJcblx0XHRcdC8vIGlubGluZSBvciBhYm91dC10by1iZS1yZXN0b3JlZClcblx0XHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKSB8fCBudWxsO1xuXHRcdFx0XHRpZiAoICF2YWx1ZXNbIGluZGV4IF0gKSB7XG5cdFx0XHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwiXCIgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICkgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGdldERlZmF1bHREaXNwbGF5KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICggZGlzcGxheSAhPT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IFwibm9uZVwiO1xuXG5cdFx0XHRcdC8vIFJlbWVtYmVyIHdoYXQgd2UncmUgb3ZlcndyaXRpbmdcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCBlbGVtLCBcImRpc3BsYXlcIiwgZGlzcGxheSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFNldCB0aGUgZGlzcGxheSBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcCB0byBhdm9pZCBjb25zdGFudCByZWZsb3dcblx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRpZiAoIHZhbHVlc1sgaW5kZXggXSAhPSBudWxsICkge1xuXHRcdFx0ZWxlbWVudHNbIGluZGV4IF0uc3R5bGUuZGlzcGxheSA9IHZhbHVlc1sgaW5kZXggXTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudHM7XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0c2hvdzogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNob3dIaWRlKCB0aGlzLCB0cnVlICk7XG5cdH0sXG5cdGhpZGU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcyApO1xuXHR9LFxuXHR0b2dnbGU6IGZ1bmN0aW9uKCBzdGF0ZSApIHtcblx0XHRpZiAoIHR5cGVvZiBzdGF0ZSA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGUgPyB0aGlzLnNob3coKSA6IHRoaXMuaGlkZSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBpc0hpZGRlbldpdGhpblRyZWUoIHRoaXMgKSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuc2hvdygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuaGlkZSgpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xudmFyIHJjaGVja2FibGVUeXBlID0gKCAvXig/OmNoZWNrYm94fHJhZGlvKSQvaSApO1xuXG52YXIgcnRhZ05hbWUgPSAoIC88KFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKikvaSApO1xuXG52YXIgcnNjcmlwdFR5cGUgPSAoIC9eJHxebW9kdWxlJHxcXC8oPzpqYXZhfGVjbWEpc2NyaXB0L2kgKTtcblxuXG5cbi8vIFdlIGhhdmUgdG8gY2xvc2UgdGhlc2UgdGFncyB0byBzdXBwb3J0IFhIVE1MICgjMTMyMDApXG52YXIgd3JhcE1hcCA9IHtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRvcHRpb246IFsgMSwgXCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+XCIsIFwiPC9zZWxlY3Q+XCIgXSxcblxuXHQvLyBYSFRNTCBwYXJzZXJzIGRvIG5vdCBtYWdpY2FsbHkgaW5zZXJ0IGVsZW1lbnRzIGluIHRoZVxuXHQvLyBzYW1lIHdheSB0aGF0IHRhZyBzb3VwIHBhcnNlcnMgZG8uIFNvIHdlIGNhbm5vdCBzaG9ydGVuXG5cdC8vIHRoaXMgYnkgb21pdHRpbmcgPHRib2R5PiBvciBvdGhlciByZXF1aXJlZCBlbGVtZW50cy5cblx0dGhlYWQ6IFsgMSwgXCI8dGFibGU+XCIsIFwiPC90YWJsZT5cIiBdLFxuXHRjb2w6IFsgMiwgXCI8dGFibGU+PGNvbGdyb3VwPlwiLCBcIjwvY29sZ3JvdXA+PC90YWJsZT5cIiBdLFxuXHR0cjogWyAyLCBcIjx0YWJsZT48dGJvZHk+XCIsIFwiPC90Ym9keT48L3RhYmxlPlwiIF0sXG5cdHRkOiBbIDMsIFwiPHRhYmxlPjx0Ym9keT48dHI+XCIsIFwiPC90cj48L3Rib2R5PjwvdGFibGU+XCIgXSxcblxuXHRfZGVmYXVsdDogWyAwLCBcIlwiLCBcIlwiIF1cbn07XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG53cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb247XG5cbndyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7XG53cmFwTWFwLnRoID0gd3JhcE1hcC50ZDtcblxuXG5mdW5jdGlvbiBnZXRBbGwoIGNvbnRleHQsIHRhZyApIHtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdC8vIFVzZSB0eXBlb2YgdG8gYXZvaWQgemVyby1hcmd1bWVudCBtZXRob2QgaW52b2NhdGlvbiBvbiBob3N0IG9iamVjdHMgKCMxNTE1MSlcblx0dmFyIHJldDtcblxuXHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyB8fCBcIipcIiApO1xuXG5cdH0gZWxzZSBpZiAoIHR5cGVvZiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0cmV0ID0gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2Uge1xuXHRcdHJldCA9IFtdO1xuXHR9XG5cblx0aWYgKCB0YWcgPT09IHVuZGVmaW5lZCB8fCB0YWcgJiYgbm9kZU5hbWUoIGNvbnRleHQsIHRhZyApICkge1xuXHRcdHJldHVybiBqUXVlcnkubWVyZ2UoIFsgY29udGV4dCBdLCByZXQgKTtcblx0fVxuXG5cdHJldHVybiByZXQ7XG59XG5cblxuLy8gTWFyayBzY3JpcHRzIGFzIGhhdmluZyBhbHJlYWR5IGJlZW4gZXZhbHVhdGVkXG5mdW5jdGlvbiBzZXRHbG9iYWxFdmFsKCBlbGVtcywgcmVmRWxlbWVudHMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsID0gZWxlbXMubGVuZ3RoO1xuXG5cdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRkYXRhUHJpdi5zZXQoXG5cdFx0XHRlbGVtc1sgaSBdLFxuXHRcdFx0XCJnbG9iYWxFdmFsXCIsXG5cdFx0XHQhcmVmRWxlbWVudHMgfHwgZGF0YVByaXYuZ2V0KCByZWZFbGVtZW50c1sgaSBdLCBcImdsb2JhbEV2YWxcIiApXG5cdFx0KTtcblx0fVxufVxuXG5cbnZhciByaHRtbCA9IC88fCYjP1xcdys7LztcblxuZnVuY3Rpb24gYnVpbGRGcmFnbWVudCggZWxlbXMsIGNvbnRleHQsIHNjcmlwdHMsIHNlbGVjdGlvbiwgaWdub3JlZCApIHtcblx0dmFyIGVsZW0sIHRtcCwgdGFnLCB3cmFwLCBhdHRhY2hlZCwgaixcblx0XHRmcmFnbWVudCA9IGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuXHRcdG5vZGVzID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1zWyBpIF07XG5cblx0XHRpZiAoIGVsZW0gfHwgZWxlbSA9PT0gMCApIHtcblxuXHRcdFx0Ly8gQWRkIG5vZGVzIGRpcmVjdGx5XG5cdFx0XHRpZiAoIHRvVHlwZSggZWxlbSApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIGVsZW0ubm9kZVR5cGUgPyBbIGVsZW0gXSA6IGVsZW0gKTtcblxuXHRcdFx0Ly8gQ29udmVydCBub24taHRtbCBpbnRvIGEgdGV4dCBub2RlXG5cdFx0XHR9IGVsc2UgaWYgKCAhcmh0bWwudGVzdCggZWxlbSApICkge1xuXHRcdFx0XHRub2Rlcy5wdXNoKCBjb250ZXh0LmNyZWF0ZVRleHROb2RlKCBlbGVtICkgKTtcblxuXHRcdFx0Ly8gQ29udmVydCBodG1sIGludG8gRE9NIG5vZGVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0bXAgPSB0bXAgfHwgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGNvbnRleHQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICk7XG5cblx0XHRcdFx0Ly8gRGVzZXJpYWxpemUgYSBzdGFuZGFyZCByZXByZXNlbnRhdGlvblxuXHRcdFx0XHR0YWcgPSAoIHJ0YWdOYW1lLmV4ZWMoIGVsZW0gKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0d3JhcCA9IHdyYXBNYXBbIHRhZyBdIHx8IHdyYXBNYXAuX2RlZmF1bHQ7XG5cdFx0XHRcdHRtcC5pbm5lckhUTUwgPSB3cmFwWyAxIF0gKyBqUXVlcnkuaHRtbFByZWZpbHRlciggZWxlbSApICsgd3JhcFsgMiBdO1xuXG5cdFx0XHRcdC8vIERlc2NlbmQgdGhyb3VnaCB3cmFwcGVycyB0byB0aGUgcmlnaHQgY29udGVudFxuXHRcdFx0XHRqID0gd3JhcFsgMCBdO1xuXHRcdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0XHR0bXAgPSB0bXAubGFzdENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBub2RlcywgdG1wLmNoaWxkTm9kZXMgKTtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB0aGUgdG9wLWxldmVsIGNvbnRhaW5lclxuXHRcdFx0XHR0bXAgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0XHRcdC8vIEVuc3VyZSB0aGUgY3JlYXRlZCBub2RlcyBhcmUgb3JwaGFuZWQgKCMxMjM5Milcblx0XHRcdFx0dG1wLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZW1vdmUgd3JhcHBlciBmcm9tIGZyYWdtZW50XG5cdGZyYWdtZW50LnRleHRDb250ZW50ID0gXCJcIjtcblxuXHRpID0gMDtcblx0d2hpbGUgKCAoIGVsZW0gPSBub2Rlc1sgaSsrIF0gKSApIHtcblxuXHRcdC8vIFNraXAgZWxlbWVudHMgYWxyZWFkeSBpbiB0aGUgY29udGV4dCBjb2xsZWN0aW9uICh0cmFjLTQwODcpXG5cdFx0aWYgKCBzZWxlY3Rpb24gJiYgalF1ZXJ5LmluQXJyYXkoIGVsZW0sIHNlbGVjdGlvbiApID4gLTEgKSB7XG5cdFx0XHRpZiAoIGlnbm9yZWQgKSB7XG5cdFx0XHRcdGlnbm9yZWQucHVzaCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0YXR0YWNoZWQgPSBpc0F0dGFjaGVkKCBlbGVtICk7XG5cblx0XHQvLyBBcHBlbmQgdG8gZnJhZ21lbnRcblx0XHR0bXAgPSBnZXRBbGwoIGZyYWdtZW50LmFwcGVuZENoaWxkKCBlbGVtICksIFwic2NyaXB0XCIgKTtcblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRpZiAoIGF0dGFjaGVkICkge1xuXHRcdFx0c2V0R2xvYmFsRXZhbCggdG1wICk7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FwdHVyZSBleGVjdXRhYmxlc1xuXHRcdGlmICggc2NyaXB0cyApIHtcblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0bXBbIGorKyBdICkgKSB7XG5cdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggZWxlbS50eXBlIHx8IFwiXCIgKSApIHtcblx0XHRcdFx0XHRzY3JpcHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmcmFnbWVudDtcbn1cblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0ZGl2ID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApLFxuXHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seVxuXHQvLyBDaGVjayBzdGF0ZSBsb3N0IGlmIHRoZSBuYW1lIGlzIHNldCAoIzExMjE3KVxuXHQvLyBTdXBwb3J0OiBXaW5kb3dzIFdlYiBBcHBzIChXV0EpXG5cdC8vIGBuYW1lYCBhbmQgYHR5cGVgIG11c3QgdXNlIC5zZXRBdHRyaWJ1dGUgZm9yIFdXQSAoIzE0OTAxKVxuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcInJhZGlvXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcImNoZWNrZWRcIiwgXCJjaGVja2VkXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJ0XCIgKTtcblxuXHRkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSBvbmx5XG5cdC8vIE9sZGVyIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGluIGZyYWdtZW50c1xuXHRzdXBwb3J0LmNoZWNrQ2xvbmUgPSBkaXYuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmNoZWNrZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIE1ha2Ugc3VyZSB0ZXh0YXJlYSAoYW5kIGNoZWNrYm94KSBkZWZhdWx0VmFsdWUgaXMgcHJvcGVybHkgY2xvbmVkXG5cdGRpdi5pbm5lckhUTUwgPSBcIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT5cIjtcblx0c3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9ICEhZGl2LmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWU7XG59ICkoKTtcblxuXG52YXJcblx0cmtleUV2ZW50ID0gL15rZXkvLFxuXHRybW91c2VFdmVudCA9IC9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudXxkcmFnfGRyb3ApfGNsaWNrLyxcblx0cnR5cGVuYW1lc3BhY2UgPSAvXihbXi5dKikoPzpcXC4oLispfCkvO1xuXG5mdW5jdGlvbiByZXR1cm5UcnVlKCkge1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmV0dXJuRmFsc2UoKSB7XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLy8gU3VwcG9ydDogSUUgPD05IC0gMTErXG4vLyBmb2N1cygpIGFuZCBibHVyKCkgYXJlIGFzeW5jaHJvbm91cywgZXhjZXB0IHdoZW4gdGhleSBhcmUgbm8tb3AuXG4vLyBTbyBleHBlY3QgZm9jdXMgdG8gYmUgc3luY2hyb25vdXMgd2hlbiB0aGUgZWxlbWVudCBpcyBhbHJlYWR5IGFjdGl2ZSxcbi8vIGFuZCBibHVyIHRvIGJlIHN5bmNocm9ub3VzIHdoZW4gdGhlIGVsZW1lbnQgaXMgbm90IGFscmVhZHkgYWN0aXZlLlxuLy8gKGZvY3VzIGFuZCBibHVyIGFyZSBhbHdheXMgc3luY2hyb25vdXMgaW4gb3RoZXIgc3VwcG9ydGVkIGJyb3dzZXJzLFxuLy8gdGhpcyBqdXN0IGRlZmluZXMgd2hlbiB3ZSBjYW4gY291bnQgb24gaXQpLlxuZnVuY3Rpb24gZXhwZWN0U3luYyggZWxlbSwgdHlwZSApIHtcblx0cmV0dXJuICggZWxlbSA9PT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSApID09PSAoIHR5cGUgPT09IFwiZm9jdXNcIiApO1xufVxuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuLy8gQWNjZXNzaW5nIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgY2FuIHRocm93IHVuZXhwZWN0ZWRseVxuLy8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEzMzkzXG5mdW5jdGlvbiBzYWZlQWN0aXZlRWxlbWVudCgpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblx0fSBjYXRjaCAoIGVyciApIHsgfVxufVxuXG5mdW5jdGlvbiBvbiggZWxlbSwgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgb25lICkge1xuXHR2YXIgb3JpZ0ZuLCB0eXBlO1xuXG5cdC8vIFR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVyc1xuXHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vICggdHlwZXMtT2JqZWN0LCBzZWxlY3RvciwgZGF0YSApXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtT2JqZWN0LCBkYXRhIClcblx0XHRcdGRhdGEgPSBkYXRhIHx8IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRvbiggZWxlbSwgdHlwZSwgc2VsZWN0b3IsIGRhdGEsIHR5cGVzWyB0eXBlIF0sIG9uZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gZWxlbTtcblx0fVxuXG5cdGlmICggZGF0YSA9PSBudWxsICYmIGZuID09IG51bGwgKSB7XG5cblx0XHQvLyAoIHR5cGVzLCBmbiApXG5cdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRkYXRhID0gc2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoIGZuID09IG51bGwgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMsIHNlbGVjdG9yLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vICggdHlwZXMsIGRhdGEsIGZuIClcblx0XHRcdGZuID0gZGF0YTtcblx0XHRcdGRhdGEgPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHR9IGVsc2UgaWYgKCAhZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIG9uZSA9PT0gMSApIHtcblx0XHRvcmlnRm4gPSBmbjtcblx0XHRmbiA9IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0Ly8gQ2FuIHVzZSBhbiBlbXB0eSBzZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5zIHRoZSBpbmZvXG5cdFx0XHRqUXVlcnkoKS5vZmYoIGV2ZW50ICk7XG5cdFx0XHRyZXR1cm4gb3JpZ0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9O1xuXG5cdFx0Ly8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1c2luZyBvcmlnRm5cblx0XHRmbi5ndWlkID0gb3JpZ0ZuLmd1aWQgfHwgKCBvcmlnRm4uZ3VpZCA9IGpRdWVyeS5ndWlkKysgKTtcblx0fVxuXHRyZXR1cm4gZWxlbS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlcywgZm4sIGRhdGEsIHNlbGVjdG9yICk7XG5cdH0gKTtcbn1cblxuLypcbiAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGV2ZW50cyAtLSBub3QgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS5cbiAqIFByb3BzIHRvIERlYW4gRWR3YXJkcycgYWRkRXZlbnQgbGlicmFyeSBmb3IgbWFueSBvZiB0aGUgaWRlYXMuXG4gKi9cbmpRdWVyeS5ldmVudCA9IHtcblxuXHRnbG9iYWw6IHt9LFxuXG5cdGFkZDogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBkYXRhLCBzZWxlY3RvciApIHtcblxuXHRcdHZhciBoYW5kbGVPYmpJbiwgZXZlbnRIYW5kbGUsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdC8vIERvbid0IGF0dGFjaCBldmVudHMgdG8gbm9EYXRhIG9yIHRleHQvY29tbWVudCBub2RlcyAoYnV0IGFsbG93IHBsYWluIG9iamVjdHMpXG5cdFx0aWYgKCAhZWxlbURhdGEgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGVyIGNhbiBwYXNzIGluIGFuIG9iamVjdCBvZiBjdXN0b20gZGF0YSBpbiBsaWV1IG9mIHRoZSBoYW5kbGVyXG5cdFx0aWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7XG5cdFx0XHRoYW5kbGVPYmpJbiA9IGhhbmRsZXI7XG5cdFx0XHRoYW5kbGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjtcblx0XHRcdHNlbGVjdG9yID0gaGFuZGxlT2JqSW4uc2VsZWN0b3I7XG5cdFx0fVxuXG5cdFx0Ly8gRW5zdXJlIHRoYXQgaW52YWxpZCBzZWxlY3RvcnMgdGhyb3cgZXhjZXB0aW9ucyBhdCBhdHRhY2ggdGltZVxuXHRcdC8vIEV2YWx1YXRlIGFnYWluc3QgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgZWxlbSBpcyBhIG5vbi1lbGVtZW50IG5vZGUgKGUuZy4sIGRvY3VtZW50KVxuXHRcdGlmICggc2VsZWN0b3IgKSB7XG5cdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGRvY3VtZW50RWxlbWVudCwgc2VsZWN0b3IgKTtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXJcblx0XHRpZiAoICFoYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRoYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrO1xuXHRcdH1cblxuXHRcdC8vIEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBzdHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmlyc3Rcblx0XHRpZiAoICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0ZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzID0ge307XG5cdFx0fVxuXHRcdGlmICggISggZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgKSApIHtcblx0XHRcdGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlID0gZnVuY3Rpb24oIGUgKSB7XG5cblx0XHRcdFx0Ly8gRGlzY2FyZCB0aGUgc2Vjb25kIGV2ZW50IG9mIGEgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoKSBhbmRcblx0XHRcdFx0Ly8gd2hlbiBhbiBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgYSBwYWdlIGhhcyB1bmxvYWRlZFxuXHRcdFx0XHRyZXR1cm4gdHlwZW9mIGpRdWVyeSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICE9PSBlLnR5cGUgP1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5kaXNwYXRjaC5hcHBseSggZWxlbSwgYXJndW1lbnRzICkgOiB1bmRlZmluZWQ7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2Vcblx0XHR0eXBlcyA9ICggdHlwZXMgfHwgXCJcIiApLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cdFx0dCA9IHR5cGVzLmxlbmd0aDtcblx0XHR3aGlsZSAoIHQtLSApIHtcblx0XHRcdHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTtcblx0XHRcdHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdO1xuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgXCJcIiApLnNwbGl0KCBcIi5cIiApLnNvcnQoKTtcblxuXHRcdFx0Ly8gVGhlcmUgKm11c3QqIGJlIGEgdHlwZSwgbm8gYXR0YWNoaW5nIG5hbWVzcGFjZS1vbmx5IGhhbmRsZXJzXG5cdFx0XHRpZiAoICF0eXBlICkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgZXZlbnQgY2hhbmdlcyBpdHMgdHlwZSwgdXNlIHRoZSBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgY2hhbmdlZCB0eXBlXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gSWYgc2VsZWN0b3IgZGVmaW5lZCwgZGV0ZXJtaW5lIHNwZWNpYWwgZXZlbnQgYXBpIHR5cGUsIG90aGVyd2lzZSBnaXZlbiB0eXBlXG5cdFx0XHR0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7XG5cblx0XHRcdC8vIFVwZGF0ZSBzcGVjaWFsIGJhc2VkIG9uIG5ld2x5IHJlc2V0IHR5cGVcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXG5cdFx0XHQvLyBoYW5kbGVPYmogaXMgcGFzc2VkIHRvIGFsbCBldmVudCBoYW5kbGVyc1xuXHRcdFx0aGFuZGxlT2JqID0galF1ZXJ5LmV4dGVuZCgge1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRvcmlnVHlwZTogb3JpZ1R5cGUsXG5cdFx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRcdGhhbmRsZXI6IGhhbmRsZXIsXG5cdFx0XHRcdGd1aWQ6IGhhbmRsZXIuZ3VpZCxcblx0XHRcdFx0c2VsZWN0b3I6IHNlbGVjdG9yLFxuXHRcdFx0XHRuZWVkc0NvbnRleHQ6IHNlbGVjdG9yICYmIGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApLFxuXHRcdFx0XHRuYW1lc3BhY2U6IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKVxuXHRcdFx0fSwgaGFuZGxlT2JqSW4gKTtcblxuXHRcdFx0Ly8gSW5pdCB0aGUgZXZlbnQgaGFuZGxlciBxdWV1ZSBpZiB3ZSdyZSB0aGUgZmlyc3Rcblx0XHRcdGlmICggISggaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSApICkge1xuXHRcdFx0XHRoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdID0gW107XG5cdFx0XHRcdGhhbmRsZXJzLmRlbGVnYXRlQ291bnQgPSAwO1xuXG5cdFx0XHRcdC8vIE9ubHkgdXNlIGFkZEV2ZW50TGlzdGVuZXIgaWYgdGhlIHNwZWNpYWwgZXZlbnRzIGhhbmRsZXIgcmV0dXJucyBmYWxzZVxuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnNldHVwIHx8XG5cdFx0XHRcdFx0c3BlY2lhbC5zZXR1cC5jYWxsKCBlbGVtLCBkYXRhLCBuYW1lc3BhY2VzLCBldmVudEhhbmRsZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdGlmICggZWxlbS5hZGRFdmVudExpc3RlbmVyICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBldmVudEhhbmRsZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHNwZWNpYWwuYWRkICkge1xuXHRcdFx0XHRzcGVjaWFsLmFkZC5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcblxuXHRcdFx0XHRpZiAoICFoYW5kbGVPYmouaGFuZGxlci5ndWlkICkge1xuXHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyLmd1aWQgPSBoYW5kbGVyLmd1aWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIHRvIHRoZSBlbGVtZW50J3MgaGFuZGxlciBsaXN0LCBkZWxlZ2F0ZXMgaW4gZnJvbnRcblx0XHRcdGlmICggc2VsZWN0b3IgKSB7XG5cdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaGFuZGxlcnMuZGVsZWdhdGVDb3VudCsrLCAwLCBoYW5kbGVPYmogKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBLZWVwIHRyYWNrIG9mIHdoaWNoIGV2ZW50cyBoYXZlIGV2ZXIgYmVlbiB1c2VkLCBmb3IgZXZlbnQgb3B0aW1pemF0aW9uXG5cdFx0XHRqUXVlcnkuZXZlbnQuZ2xvYmFsWyB0eXBlIF0gPSB0cnVlO1xuXHRcdH1cblxuXHR9LFxuXG5cdC8vIERldGFjaCBhbiBldmVudCBvciBzZXQgb2YgZXZlbnRzIGZyb20gYW4gZWxlbWVudFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgc2VsZWN0b3IsIG1hcHBlZFR5cGVzICkge1xuXG5cdFx0dmFyIGosIG9yaWdDb3VudCwgdG1wLFxuXHRcdFx0ZXZlbnRzLCB0LCBoYW5kbGVPYmosXG5cdFx0XHRzcGVjaWFsLCBoYW5kbGVycywgdHlwZSwgbmFtZXNwYWNlcywgb3JpZ1R5cGUsXG5cdFx0XHRlbGVtRGF0YSA9IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKSAmJiBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdGlmICggIWVsZW1EYXRhIHx8ICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIE9uY2UgZm9yIGVhY2ggdHlwZS5uYW1lc3BhY2UgaW4gdHlwZXM7IHR5cGUgbWF5IGJlIG9taXR0ZWRcblx0XHR0eXBlcyA9ICggdHlwZXMgfHwgXCJcIiApLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cdFx0dCA9IHR5cGVzLmxlbmd0aDtcblx0XHR3aGlsZSAoIHQtLSApIHtcblx0XHRcdHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTtcblx0XHRcdHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdO1xuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgXCJcIiApLnNwbGl0KCBcIi5cIiApLnNvcnQoKTtcblxuXHRcdFx0Ly8gVW5iaW5kIGFsbCBldmVudHMgKG9uIHRoaXMgbmFtZXNwYWNlLCBpZiBwcm92aWRlZCkgZm9yIHRoZSBlbGVtZW50XG5cdFx0XHRpZiAoICF0eXBlICkge1xuXHRcdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICsgdHlwZXNbIHQgXSwgaGFuZGxlciwgc2VsZWN0b3IsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0XHR0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7XG5cdFx0XHRoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdIHx8IFtdO1xuXHRcdFx0dG1wID0gdG1wWyAyIF0gJiZcblx0XHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICk7XG5cblx0XHRcdC8vIFJlbW92ZSBtYXRjaGluZyBldmVudHNcblx0XHRcdG9yaWdDb3VudCA9IGogPSBoYW5kbGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGogXTtcblxuXHRcdFx0XHRpZiAoICggbWFwcGVkVHlwZXMgfHwgb3JpZ1R5cGUgPT09IGhhbmRsZU9iai5vcmlnVHlwZSApICYmXG5cdFx0XHRcdFx0KCAhaGFuZGxlciB8fCBoYW5kbGVyLmd1aWQgPT09IGhhbmRsZU9iai5ndWlkICkgJiZcblx0XHRcdFx0XHQoICF0bXAgfHwgdG1wLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApICYmXG5cdFx0XHRcdFx0KCAhc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IGhhbmRsZU9iai5zZWxlY3RvciB8fFxuXHRcdFx0XHRcdFx0c2VsZWN0b3IgPT09IFwiKipcIiAmJiBoYW5kbGVPYmouc2VsZWN0b3IgKSApIHtcblx0XHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGosIDEgKTtcblxuXHRcdFx0XHRcdGlmICggaGFuZGxlT2JqLnNlbGVjdG9yICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudC0tO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIHNwZWNpYWwucmVtb3ZlICkge1xuXHRcdFx0XHRcdFx0c3BlY2lhbC5yZW1vdmUuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlbW92ZSBnZW5lcmljIGV2ZW50IGhhbmRsZXIgaWYgd2UgcmVtb3ZlZCBzb21ldGhpbmcgYW5kIG5vIG1vcmUgaGFuZGxlcnMgZXhpc3Rcblx0XHRcdC8vIChhdm9pZHMgcG90ZW50aWFsIGZvciBlbmRsZXNzIHJlY3Vyc2lvbiBkdXJpbmcgcmVtb3ZhbCBvZiBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzKVxuXHRcdFx0aWYgKCBvcmlnQ291bnQgJiYgIWhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC50ZWFyZG93biB8fFxuXHRcdFx0XHRcdHNwZWNpYWwudGVhcmRvd24uY2FsbCggZWxlbSwgbmFtZXNwYWNlcywgZWxlbURhdGEuaGFuZGxlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBlbGVtRGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRlbGV0ZSBldmVudHNbIHR5cGUgXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgZGF0YSBhbmQgdGhlIGV4cGFuZG8gaWYgaXQncyBubyBsb25nZXIgdXNlZFxuXHRcdGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGV2ZW50cyApICkge1xuXHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBcImhhbmRsZSBldmVudHNcIiApO1xuXHRcdH1cblx0fSxcblxuXHRkaXNwYXRjaDogZnVuY3Rpb24oIG5hdGl2ZUV2ZW50ICkge1xuXG5cdFx0Ly8gTWFrZSBhIHdyaXRhYmxlIGpRdWVyeS5FdmVudCBmcm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0XG5cdFx0dmFyIGV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggbmF0aXZlRXZlbnQgKTtcblxuXHRcdHZhciBpLCBqLCByZXQsIG1hdGNoZWQsIGhhbmRsZU9iaiwgaGFuZGxlclF1ZXVlLFxuXHRcdFx0YXJncyA9IG5ldyBBcnJheSggYXJndW1lbnRzLmxlbmd0aCApLFxuXHRcdFx0aGFuZGxlcnMgPSAoIGRhdGFQcml2LmdldCggdGhpcywgXCJldmVudHNcIiApIHx8IHt9IClbIGV2ZW50LnR5cGUgXSB8fCBbXSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZXZlbnQudHlwZSBdIHx8IHt9O1xuXG5cdFx0Ly8gVXNlIHRoZSBmaXgtZWQgalF1ZXJ5LkV2ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUgZXZlbnRcblx0XHRhcmdzWyAwIF0gPSBldmVudDtcblxuXHRcdGZvciAoIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrICkge1xuXHRcdFx0YXJnc1sgaSBdID0gYXJndW1lbnRzWyBpIF07XG5cdFx0fVxuXG5cdFx0ZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzO1xuXG5cdFx0Ly8gQ2FsbCB0aGUgcHJlRGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlLCBhbmQgbGV0IGl0IGJhaWwgaWYgZGVzaXJlZFxuXHRcdGlmICggc3BlY2lhbC5wcmVEaXNwYXRjaCAmJiBzcGVjaWFsLnByZURpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERldGVybWluZSBoYW5kbGVyc1xuXHRcdGhhbmRsZXJRdWV1ZSA9IGpRdWVyeS5ldmVudC5oYW5kbGVycy5jYWxsKCB0aGlzLCBldmVudCwgaGFuZGxlcnMgKTtcblxuXHRcdC8vIFJ1biBkZWxlZ2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdhdGlvbiBiZW5lYXRoIHVzXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIG1hdGNoZWQgPSBoYW5kbGVyUXVldWVbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRldmVudC5jdXJyZW50VGFyZ2V0ID0gbWF0Y2hlZC5lbGVtO1xuXG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBoYW5kbGVPYmogPSBtYXRjaGVkLmhhbmRsZXJzWyBqKysgXSApICYmXG5cdFx0XHRcdCFldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXG5cdFx0XHRcdC8vIElmIHRoZSBldmVudCBpcyBuYW1lc3BhY2VkLCB0aGVuIGVhY2ggaGFuZGxlciBpcyBvbmx5IGludm9rZWQgaWYgaXQgaXNcblx0XHRcdFx0Ly8gc3BlY2lhbGx5IHVuaXZlcnNhbCBvciBpdHMgbmFtZXNwYWNlcyBhcmUgYSBzdXBlcnNldCBvZiB0aGUgZXZlbnQncy5cblx0XHRcdFx0aWYgKCAhZXZlbnQucm5hbWVzcGFjZSB8fCBoYW5kbGVPYmoubmFtZXNwYWNlID09PSBmYWxzZSB8fFxuXHRcdFx0XHRcdGV2ZW50LnJuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkge1xuXG5cdFx0XHRcdFx0ZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqO1xuXHRcdFx0XHRcdGV2ZW50LmRhdGEgPSBoYW5kbGVPYmouZGF0YTtcblxuXHRcdFx0XHRcdHJldCA9ICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgaGFuZGxlT2JqLm9yaWdUeXBlIF0gfHwge30gKS5oYW5kbGUgfHxcblx0XHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyICkuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApO1xuXG5cdFx0XHRcdFx0aWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdGlmICggKCBldmVudC5yZXN1bHQgPSByZXQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhbGwgdGhlIHBvc3REaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGVcblx0XHRpZiAoIHNwZWNpYWwucG9zdERpc3BhdGNoICkge1xuXHRcdFx0c3BlY2lhbC5wb3N0RGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdGhhbmRsZXJzOiBmdW5jdGlvbiggZXZlbnQsIGhhbmRsZXJzICkge1xuXHRcdHZhciBpLCBoYW5kbGVPYmosIHNlbCwgbWF0Y2hlZEhhbmRsZXJzLCBtYXRjaGVkU2VsZWN0b3JzLFxuXHRcdFx0aGFuZGxlclF1ZXVlID0gW10sXG5cdFx0XHRkZWxlZ2F0ZUNvdW50ID0gaGFuZGxlcnMuZGVsZWdhdGVDb3VudCxcblx0XHRcdGN1ciA9IGV2ZW50LnRhcmdldDtcblxuXHRcdC8vIEZpbmQgZGVsZWdhdGUgaGFuZGxlcnNcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05XG5cdFx0XHQvLyBCbGFjay1ob2xlIFNWRyA8dXNlPiBpbnN0YW5jZSB0cmVlcyAodHJhYy0xMzE4MClcblx0XHRcdGN1ci5ub2RlVHlwZSAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDJcblx0XHRcdC8vIFN1cHByZXNzIHNwZWMtdmlvbGF0aW5nIGNsaWNrcyBpbmRpY2F0aW5nIGEgbm9uLXByaW1hcnkgcG9pbnRlciBidXR0b24gKHRyYWMtMzg2MSlcblx0XHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50LXR5cGUtY2xpY2tcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExIG9ubHlcblx0XHRcdC8vIC4uLmJ1dCBub3QgYXJyb3cga2V5IFwiY2xpY2tzXCIgb2YgcmFkaW8gaW5wdXRzLCB3aGljaCBjYW4gaGF2ZSBgYnV0dG9uYCAtMSAoZ2gtMjM0Mylcblx0XHRcdCEoIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBldmVudC5idXR0b24gPj0gMSApICkge1xuXG5cdFx0XHRmb3IgKCA7IGN1ciAhPT0gdGhpczsgY3VyID0gY3VyLnBhcmVudE5vZGUgfHwgdGhpcyApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjaGVjayBub24tZWxlbWVudHMgKCMxMzIwOClcblx0XHRcdFx0Ly8gRG9uJ3QgcHJvY2VzcyBjbGlja3Mgb24gZGlzYWJsZWQgZWxlbWVudHMgKCM2OTExLCAjODE2NSwgIzExMzgyLCAjMTE3NjQpXG5cdFx0XHRcdGlmICggY3VyLm5vZGVUeXBlID09PSAxICYmICEoIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBjdXIuZGlzYWJsZWQgPT09IHRydWUgKSApIHtcblx0XHRcdFx0XHRtYXRjaGVkSGFuZGxlcnMgPSBbXTtcblx0XHRcdFx0XHRtYXRjaGVkU2VsZWN0b3JzID0ge307XG5cdFx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBkZWxlZ2F0ZUNvdW50OyBpKysgKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaSBdO1xuXG5cdFx0XHRcdFx0XHQvLyBEb24ndCBjb25mbGljdCB3aXRoIE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoIzEzMjAzKVxuXHRcdFx0XHRcdFx0c2VsID0gaGFuZGxlT2JqLnNlbGVjdG9yICsgXCIgXCI7XG5cblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPSBoYW5kbGVPYmoubmVlZHNDb250ZXh0ID9cblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkoIHNlbCwgdGhpcyApLmluZGV4KCBjdXIgKSA+IC0xIDpcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZmluZCggc2VsLCB0aGlzLCBudWxsLCBbIGN1ciBdICkubGVuZ3RoO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZEhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRIYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBtYXRjaGVkSGFuZGxlcnMgfSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFkZCB0aGUgcmVtYWluaW5nIChkaXJlY3RseS1ib3VuZCkgaGFuZGxlcnNcblx0XHRjdXIgPSB0aGlzO1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCA8IGhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNvdW50ICkgfSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBoYW5kbGVyUXVldWU7XG5cdH0sXG5cblx0YWRkUHJvcDogZnVuY3Rpb24oIG5hbWUsIGhvb2sgKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBqUXVlcnkuRXZlbnQucHJvdG90eXBlLCBuYW1lLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXG5cdFx0XHRnZXQ6IGlzRnVuY3Rpb24oIGhvb2sgKSA/XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gaG9vayggdGhpcy5vcmlnaW5hbEV2ZW50ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IDpcblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLm9yaWdpbmFsRXZlbnRbIG5hbWUgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cblx0XHRcdHNldDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIHRoaXMsIG5hbWUsIHtcblx0XHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHR2YWx1ZTogdmFsdWVcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRmaXg6IGZ1bmN0aW9uKCBvcmlnaW5hbEV2ZW50ICkge1xuXHRcdHJldHVybiBvcmlnaW5hbEV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID9cblx0XHRcdG9yaWdpbmFsRXZlbnQgOlxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCggb3JpZ2luYWxFdmVudCApO1xuXHR9LFxuXG5cdHNwZWNpYWw6IHtcblx0XHRsb2FkOiB7XG5cblx0XHRcdC8vIFByZXZlbnQgdHJpZ2dlcmVkIGltYWdlLmxvYWQgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gd2luZG93LmxvYWRcblx0XHRcdG5vQnViYmxlOiB0cnVlXG5cdFx0fSxcblx0XHRjbGljazoge1xuXG5cdFx0XHQvLyBVdGlsaXplIG5hdGl2ZSBldmVudCB0byBlbnN1cmUgY29ycmVjdCBzdGF0ZSBmb3IgY2hlY2thYmxlIGlucHV0c1xuXHRcdFx0c2V0dXA6IGZ1bmN0aW9uKCBkYXRhICkge1xuXG5cdFx0XHRcdC8vIEZvciBtdXR1YWwgY29tcHJlc3NpYmlsaXR5IHdpdGggX2RlZmF1bHQsIHJlcGxhY2UgYHRoaXNgIGFjY2VzcyB3aXRoIGEgbG9jYWwgdmFyLlxuXHRcdFx0XHQvLyBgfHwgZGF0YWAgaXMgZGVhZCBjb2RlIG1lYW50IG9ubHkgdG8gcHJlc2VydmUgdGhlIHZhcmlhYmxlIHRocm91Z2ggbWluaWZpY2F0aW9uLlxuXHRcdFx0XHR2YXIgZWwgPSB0aGlzIHx8IGRhdGE7XG5cblx0XHRcdFx0Ly8gQ2xhaW0gdGhlIGZpcnN0IGhhbmRsZXJcblx0XHRcdFx0aWYgKCByY2hlY2thYmxlVHlwZS50ZXN0KCBlbC50eXBlICkgJiZcblx0XHRcdFx0XHRlbC5jbGljayAmJiBub2RlTmFtZSggZWwsIFwiaW5wdXRcIiApICkge1xuXG5cdFx0XHRcdFx0Ly8gZGF0YVByaXYuc2V0KCBlbCwgXCJjbGlja1wiLCAuLi4gKVxuXHRcdFx0XHRcdGxldmVyYWdlTmF0aXZlKCBlbCwgXCJjbGlja1wiLCByZXR1cm5UcnVlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXR1cm4gZmFsc2UgdG8gYWxsb3cgbm9ybWFsIHByb2Nlc3NpbmcgaW4gdGhlIGNhbGxlclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9LFxuXHRcdFx0dHJpZ2dlcjogZnVuY3Rpb24oIGRhdGEgKSB7XG5cblx0XHRcdFx0Ly8gRm9yIG11dHVhbCBjb21wcmVzc2liaWxpdHkgd2l0aCBfZGVmYXVsdCwgcmVwbGFjZSBgdGhpc2AgYWNjZXNzIHdpdGggYSBsb2NhbCB2YXIuXG5cdFx0XHRcdC8vIGB8fCBkYXRhYCBpcyBkZWFkIGNvZGUgbWVhbnQgb25seSB0byBwcmVzZXJ2ZSB0aGUgdmFyaWFibGUgdGhyb3VnaCBtaW5pZmljYXRpb24uXG5cdFx0XHRcdHZhciBlbCA9IHRoaXMgfHwgZGF0YTtcblxuXHRcdFx0XHQvLyBGb3JjZSBzZXR1cCBiZWZvcmUgdHJpZ2dlcmluZyBhIGNsaWNrXG5cdFx0XHRcdGlmICggcmNoZWNrYWJsZVR5cGUudGVzdCggZWwudHlwZSApICYmXG5cdFx0XHRcdFx0ZWwuY2xpY2sgJiYgbm9kZU5hbWUoIGVsLCBcImlucHV0XCIgKSApIHtcblxuXHRcdFx0XHRcdGxldmVyYWdlTmF0aXZlKCBlbCwgXCJjbGlja1wiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXR1cm4gbm9uLWZhbHNlIHRvIGFsbG93IG5vcm1hbCBldmVudC1wYXRoIHByb3BhZ2F0aW9uXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRm9yIGNyb3NzLWJyb3dzZXIgY29uc2lzdGVuY3ksIHN1cHByZXNzIG5hdGl2ZSAuY2xpY2soKSBvbiBsaW5rc1xuXHRcdFx0Ly8gQWxzbyBwcmV2ZW50IGl0IGlmIHdlJ3JlIGN1cnJlbnRseSBpbnNpZGUgYSBsZXZlcmFnZWQgbmF0aXZlLWV2ZW50IHN0YWNrXG5cdFx0XHRfZGVmYXVsdDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdFx0XHRyZXR1cm4gcmNoZWNrYWJsZVR5cGUudGVzdCggdGFyZ2V0LnR5cGUgKSAmJlxuXHRcdFx0XHRcdHRhcmdldC5jbGljayAmJiBub2RlTmFtZSggdGFyZ2V0LCBcImlucHV0XCIgKSAmJlxuXHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGFyZ2V0LCBcImNsaWNrXCIgKSB8fFxuXHRcdFx0XHRcdG5vZGVOYW1lKCB0YXJnZXQsIFwiYVwiICk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGJlZm9yZXVubG9hZDoge1xuXHRcdFx0cG9zdERpc3BhdGNoOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCAyMCtcblx0XHRcdFx0Ly8gRmlyZWZveCBkb2Vzbid0IGFsZXJ0IGlmIHRoZSByZXR1cm5WYWx1ZSBmaWVsZCBpcyBub3Qgc2V0LlxuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCAhPT0gdW5kZWZpbmVkICYmIGV2ZW50Lm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0ZXZlbnQub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZSA9IGV2ZW50LnJlc3VsdDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuLy8gRW5zdXJlIHRoZSBwcmVzZW5jZSBvZiBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGhhbmRsZXMgbWFudWFsbHktdHJpZ2dlcmVkXG4vLyBzeW50aGV0aWMgZXZlbnRzIGJ5IGludGVycnVwdGluZyBwcm9ncmVzcyB1bnRpbCByZWludm9rZWQgaW4gcmVzcG9uc2UgdG9cbi8vICpuYXRpdmUqIGV2ZW50cyB0aGF0IGl0IGZpcmVzIGRpcmVjdGx5LCBlbnN1cmluZyB0aGF0IHN0YXRlIGNoYW5nZXMgaGF2ZVxuLy8gYWxyZWFkeSBvY2N1cnJlZCBiZWZvcmUgb3RoZXIgbGlzdGVuZXJzIGFyZSBpbnZva2VkLlxuZnVuY3Rpb24gbGV2ZXJhZ2VOYXRpdmUoIGVsLCB0eXBlLCBleHBlY3RTeW5jICkge1xuXG5cdC8vIE1pc3NpbmcgZXhwZWN0U3luYyBpbmRpY2F0ZXMgYSB0cmlnZ2VyIGNhbGwsIHdoaWNoIG11c3QgZm9yY2Ugc2V0dXAgdGhyb3VnaCBqUXVlcnkuZXZlbnQuYWRkXG5cdGlmICggIWV4cGVjdFN5bmMgKSB7XG5cdFx0aWYgKCBkYXRhUHJpdi5nZXQoIGVsLCB0eXBlICkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC5hZGQoIGVsLCB0eXBlLCByZXR1cm5UcnVlICk7XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFJlZ2lzdGVyIHRoZSBjb250cm9sbGVyIGFzIGEgc3BlY2lhbCB1bml2ZXJzYWwgaGFuZGxlciBmb3IgYWxsIGV2ZW50IG5hbWVzcGFjZXNcblx0ZGF0YVByaXYuc2V0KCBlbCwgdHlwZSwgZmFsc2UgKTtcblx0alF1ZXJ5LmV2ZW50LmFkZCggZWwsIHR5cGUsIHtcblx0XHRuYW1lc3BhY2U6IGZhbHNlLFxuXHRcdGhhbmRsZXI6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciBub3RBc3luYywgcmVzdWx0LFxuXHRcdFx0XHRzYXZlZCA9IGRhdGFQcml2LmdldCggdGhpcywgdHlwZSApO1xuXG5cdFx0XHRpZiAoICggZXZlbnQuaXNUcmlnZ2VyICYgMSApICYmIHRoaXNbIHR5cGUgXSApIHtcblxuXHRcdFx0XHQvLyBJbnRlcnJ1cHQgcHJvY2Vzc2luZyBvZiB0aGUgb3V0ZXIgc3ludGhldGljIC50cmlnZ2VyKCllZCBldmVudFxuXHRcdFx0XHQvLyBTYXZlZCBkYXRhIHNob3VsZCBiZSBmYWxzZSBpbiBzdWNoIGNhc2VzLCBidXQgbWlnaHQgYmUgYSBsZWZ0b3ZlciBjYXB0dXJlIG9iamVjdFxuXHRcdFx0XHQvLyBmcm9tIGFuIGFzeW5jIG5hdGl2ZSBoYW5kbGVyIChnaC00MzUwKVxuXHRcdFx0XHRpZiAoICFzYXZlZC5sZW5ndGggKSB7XG5cblx0XHRcdFx0XHQvLyBTdG9yZSBhcmd1bWVudHMgZm9yIHVzZSB3aGVuIGhhbmRsaW5nIHRoZSBpbm5lciBuYXRpdmUgZXZlbnRcblx0XHRcdFx0XHQvLyBUaGVyZSB3aWxsIGFsd2F5cyBiZSBhdCBsZWFzdCBvbmUgYXJndW1lbnQgKGFuIGV2ZW50IG9iamVjdCksIHNvIHRoaXMgYXJyYXlcblx0XHRcdFx0XHQvLyB3aWxsIG5vdCBiZSBjb25mdXNlZCB3aXRoIGEgbGVmdG92ZXIgY2FwdHVyZSBvYmplY3QuXG5cdFx0XHRcdFx0c2F2ZWQgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIHNhdmVkICk7XG5cblx0XHRcdFx0XHQvLyBUcmlnZ2VyIHRoZSBuYXRpdmUgZXZlbnQgYW5kIGNhcHR1cmUgaXRzIHJlc3VsdFxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExK1xuXHRcdFx0XHRcdC8vIGZvY3VzKCkgYW5kIGJsdXIoKSBhcmUgYXN5bmNocm9ub3VzXG5cdFx0XHRcdFx0bm90QXN5bmMgPSBleHBlY3RTeW5jKCB0aGlzLCB0eXBlICk7XG5cdFx0XHRcdFx0dGhpc1sgdHlwZSBdKCk7XG5cdFx0XHRcdFx0cmVzdWx0ID0gZGF0YVByaXYuZ2V0KCB0aGlzLCB0eXBlICk7XG5cdFx0XHRcdFx0aWYgKCBzYXZlZCAhPT0gcmVzdWx0IHx8IG5vdEFzeW5jICkge1xuXHRcdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCBmYWxzZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQgPSB7fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBzYXZlZCAhPT0gcmVzdWx0ICkge1xuXG5cdFx0XHRcdFx0XHQvLyBDYW5jZWwgdGhlIG91dGVyIHN5bnRoZXRpYyBldmVudFxuXHRcdFx0XHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdC52YWx1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgdGhpcyBpcyBhbiBpbm5lciBzeW50aGV0aWMgZXZlbnQgZm9yIGFuIGV2ZW50IHdpdGggYSBidWJibGluZyBzdXJyb2dhdGVcblx0XHRcdFx0Ly8gKGZvY3VzIG9yIGJsdXIpLCBhc3N1bWUgdGhhdCB0aGUgc3Vycm9nYXRlIGFscmVhZHkgcHJvcGFnYXRlZCBmcm9tIHRyaWdnZXJpbmcgdGhlXG5cdFx0XHRcdC8vIG5hdGl2ZSBldmVudCBhbmQgcHJldmVudCB0aGF0IGZyb20gaGFwcGVuaW5nIGFnYWluIGhlcmUuXG5cdFx0XHRcdC8vIFRoaXMgdGVjaG5pY2FsbHkgZ2V0cyB0aGUgb3JkZXJpbmcgd3Jvbmcgdy5yLnQuIHRvIGAudHJpZ2dlcigpYCAoaW4gd2hpY2ggdGhlXG5cdFx0XHRcdC8vIGJ1YmJsaW5nIHN1cnJvZ2F0ZSBwcm9wYWdhdGVzICphZnRlciogdGhlIG5vbi1idWJibGluZyBiYXNlKSwgYnV0IHRoYXQgc2VlbXNcblx0XHRcdFx0Ly8gbGVzcyBiYWQgdGhhbiBkdXBsaWNhdGlvbi5cblx0XHRcdFx0fSBlbHNlIGlmICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9ICkuZGVsZWdhdGVUeXBlICkge1xuXHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHR9XG5cblx0XHRcdC8vIElmIHRoaXMgaXMgYSBuYXRpdmUgZXZlbnQgdHJpZ2dlcmVkIGFib3ZlLCBldmVyeXRoaW5nIGlzIG5vdyBpbiBvcmRlclxuXHRcdFx0Ly8gRmlyZSBhbiBpbm5lciBzeW50aGV0aWMgZXZlbnQgd2l0aCB0aGUgb3JpZ2luYWwgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCBzYXZlZC5sZW5ndGggKSB7XG5cblx0XHRcdFx0Ly8gLi4uYW5kIGNhcHR1cmUgdGhlIHJlc3VsdFxuXHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIHtcblx0XHRcdFx0XHR2YWx1ZTogalF1ZXJ5LmV2ZW50LnRyaWdnZXIoXG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExK1xuXHRcdFx0XHRcdFx0Ly8gRXh0ZW5kIHdpdGggdGhlIHByb3RvdHlwZSB0byByZXNldCB0aGUgYWJvdmUgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcblx0XHRcdFx0XHRcdGpRdWVyeS5leHRlbmQoIHNhdmVkWyAwIF0sIGpRdWVyeS5FdmVudC5wcm90b3R5cGUgKSxcblx0XHRcdFx0XHRcdHNhdmVkLnNsaWNlKCAxICksXG5cdFx0XHRcdFx0XHR0aGlzXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0Ly8gQWJvcnQgaGFuZGxpbmcgb2YgdGhlIG5hdGl2ZSBldmVudFxuXHRcdFx0XHRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gKTtcbn1cblxualF1ZXJ5LnJlbW92ZUV2ZW50ID0gZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRsZSApIHtcblxuXHQvLyBUaGlzIFwiaWZcIiBpcyBuZWVkZWQgZm9yIHBsYWluIG9iamVjdHNcblx0aWYgKCBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0ZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGUgKTtcblx0fVxufTtcblxualF1ZXJ5LkV2ZW50ID0gZnVuY3Rpb24oIHNyYywgcHJvcHMgKSB7XG5cblx0Ly8gQWxsb3cgaW5zdGFudGlhdGlvbiB3aXRob3V0IHRoZSAnbmV3JyBrZXl3b3JkXG5cdGlmICggISggdGhpcyBpbnN0YW5jZW9mIGpRdWVyeS5FdmVudCApICkge1xuXHRcdHJldHVybiBuZXcgalF1ZXJ5LkV2ZW50KCBzcmMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBFdmVudCBvYmplY3Rcblx0aWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7XG5cdFx0dGhpcy5vcmlnaW5hbEV2ZW50ID0gc3JjO1xuXHRcdHRoaXMudHlwZSA9IHNyYy50eXBlO1xuXG5cdFx0Ly8gRXZlbnRzIGJ1YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50ZWRcblx0XHQvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUgY29ycmVjdCB2YWx1ZS5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHNyYy5kZWZhdWx0UHJldmVudGVkIHx8XG5cdFx0XHRcdHNyYy5kZWZhdWx0UHJldmVudGVkID09PSB1bmRlZmluZWQgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9Mi4zIG9ubHlcblx0XHRcdFx0c3JjLnJldHVyblZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRyZXR1cm5UcnVlIDpcblx0XHRcdHJldHVybkZhbHNlO1xuXG5cdFx0Ly8gQ3JlYXRlIHRhcmdldCBwcm9wZXJ0aWVzXG5cdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDw9NiAtIDcgb25seVxuXHRcdC8vIFRhcmdldCBzaG91bGQgbm90IGJlIGEgdGV4dCBub2RlICgjNTA0LCAjMTMxNDMpXG5cdFx0dGhpcy50YXJnZXQgPSAoIHNyYy50YXJnZXQgJiYgc3JjLnRhcmdldC5ub2RlVHlwZSA9PT0gMyApID9cblx0XHRcdHNyYy50YXJnZXQucGFyZW50Tm9kZSA6XG5cdFx0XHRzcmMudGFyZ2V0O1xuXG5cdFx0dGhpcy5jdXJyZW50VGFyZ2V0ID0gc3JjLmN1cnJlbnRUYXJnZXQ7XG5cdFx0dGhpcy5yZWxhdGVkVGFyZ2V0ID0gc3JjLnJlbGF0ZWRUYXJnZXQ7XG5cblx0Ly8gRXZlbnQgdHlwZVxuXHR9IGVsc2Uge1xuXHRcdHRoaXMudHlwZSA9IHNyYztcblx0fVxuXG5cdC8vIFB1dCBleHBsaWNpdGx5IHByb3ZpZGVkIHByb3BlcnRpZXMgb250byB0aGUgZXZlbnQgb2JqZWN0XG5cdGlmICggcHJvcHMgKSB7XG5cdFx0alF1ZXJ5LmV4dGVuZCggdGhpcywgcHJvcHMgKTtcblx0fVxuXG5cdC8vIENyZWF0ZSBhIHRpbWVzdGFtcCBpZiBpbmNvbWluZyBldmVudCBkb2Vzbid0IGhhdmUgb25lXG5cdHRoaXMudGltZVN0YW1wID0gc3JjICYmIHNyYy50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKTtcblxuXHQvLyBNYXJrIGl0IGFzIGZpeGVkXG5cdHRoaXNbIGpRdWVyeS5leHBhbmRvIF0gPSB0cnVlO1xufTtcblxuLy8galF1ZXJ5LkV2ZW50IGlzIGJhc2VkIG9uIERPTTMgRXZlbnRzIGFzIHNwZWNpZmllZCBieSB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBCaW5kaW5nXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAwMzAzMzEvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sXG5qUXVlcnkuRXZlbnQucHJvdG90eXBlID0ge1xuXHRjb25zdHJ1Y3RvcjogalF1ZXJ5LkV2ZW50LFxuXHRpc0RlZmF1bHRQcmV2ZW50ZWQ6IHJldHVybkZhbHNlLFxuXHRpc1Byb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcblx0aXNTaW11bGF0ZWQ6IGZhbHNlLFxuXG5cdHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH0sXG5cdHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdH1cblxuXHRcdHRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdH1cbn07XG5cbi8vIEluY2x1ZGVzIGFsbCBjb21tb24gZXZlbnQgcHJvcHMgaW5jbHVkaW5nIEtleUV2ZW50IGFuZCBNb3VzZUV2ZW50IHNwZWNpZmljIHByb3BzXG5qUXVlcnkuZWFjaCgge1xuXHRhbHRLZXk6IHRydWUsXG5cdGJ1YmJsZXM6IHRydWUsXG5cdGNhbmNlbGFibGU6IHRydWUsXG5cdGNoYW5nZWRUb3VjaGVzOiB0cnVlLFxuXHRjdHJsS2V5OiB0cnVlLFxuXHRkZXRhaWw6IHRydWUsXG5cdGV2ZW50UGhhc2U6IHRydWUsXG5cdG1ldGFLZXk6IHRydWUsXG5cdHBhZ2VYOiB0cnVlLFxuXHRwYWdlWTogdHJ1ZSxcblx0c2hpZnRLZXk6IHRydWUsXG5cdHZpZXc6IHRydWUsXG5cdFwiY2hhclwiOiB0cnVlLFxuXHRjb2RlOiB0cnVlLFxuXHRjaGFyQ29kZTogdHJ1ZSxcblx0a2V5OiB0cnVlLFxuXHRrZXlDb2RlOiB0cnVlLFxuXHRidXR0b246IHRydWUsXG5cdGJ1dHRvbnM6IHRydWUsXG5cdGNsaWVudFg6IHRydWUsXG5cdGNsaWVudFk6IHRydWUsXG5cdG9mZnNldFg6IHRydWUsXG5cdG9mZnNldFk6IHRydWUsXG5cdHBvaW50ZXJJZDogdHJ1ZSxcblx0cG9pbnRlclR5cGU6IHRydWUsXG5cdHNjcmVlblg6IHRydWUsXG5cdHNjcmVlblk6IHRydWUsXG5cdHRhcmdldFRvdWNoZXM6IHRydWUsXG5cdHRvRWxlbWVudDogdHJ1ZSxcblx0dG91Y2hlczogdHJ1ZSxcblxuXHR3aGljaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBidXR0b24gPSBldmVudC5idXR0b247XG5cblx0XHQvLyBBZGQgd2hpY2ggZm9yIGtleSBldmVudHNcblx0XHRpZiAoIGV2ZW50LndoaWNoID09IG51bGwgJiYgcmtleUV2ZW50LnRlc3QoIGV2ZW50LnR5cGUgKSApIHtcblx0XHRcdHJldHVybiBldmVudC5jaGFyQ29kZSAhPSBudWxsID8gZXZlbnQuY2hhckNvZGUgOiBldmVudC5rZXlDb2RlO1xuXHRcdH1cblxuXHRcdC8vIEFkZCB3aGljaCBmb3IgY2xpY2s6IDEgPT09IGxlZnQ7IDIgPT09IG1pZGRsZTsgMyA9PT0gcmlnaHRcblx0XHRpZiAoICFldmVudC53aGljaCAmJiBidXR0b24gIT09IHVuZGVmaW5lZCAmJiBybW91c2VFdmVudC50ZXN0KCBldmVudC50eXBlICkgKSB7XG5cdFx0XHRpZiAoIGJ1dHRvbiAmIDEgKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGJ1dHRvbiAmIDIgKSB7XG5cdFx0XHRcdHJldHVybiAzO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGJ1dHRvbiAmIDQgKSB7XG5cdFx0XHRcdHJldHVybiAyO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQud2hpY2g7XG5cdH1cbn0sIGpRdWVyeS5ldmVudC5hZGRQcm9wICk7XG5cbmpRdWVyeS5lYWNoKCB7IGZvY3VzOiBcImZvY3VzaW5cIiwgYmx1cjogXCJmb2N1c291dFwiIH0sIGZ1bmN0aW9uKCB0eXBlLCBkZWxlZ2F0ZVR5cGUgKSB7XG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gPSB7XG5cblx0XHQvLyBVdGlsaXplIG5hdGl2ZSBldmVudCBpZiBwb3NzaWJsZSBzbyBibHVyL2ZvY3VzIHNlcXVlbmNlIGlzIGNvcnJlY3Rcblx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIENsYWltIHRoZSBmaXJzdCBoYW5kbGVyXG5cdFx0XHQvLyBkYXRhUHJpdi5zZXQoIHRoaXMsIFwiZm9jdXNcIiwgLi4uIClcblx0XHRcdC8vIGRhdGFQcml2LnNldCggdGhpcywgXCJibHVyXCIsIC4uLiApXG5cdFx0XHRsZXZlcmFnZU5hdGl2ZSggdGhpcywgdHlwZSwgZXhwZWN0U3luYyApO1xuXG5cdFx0XHQvLyBSZXR1cm4gZmFsc2UgdG8gYWxsb3cgbm9ybWFsIHByb2Nlc3NpbmcgaW4gdGhlIGNhbGxlclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cdFx0dHJpZ2dlcjogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEZvcmNlIHNldHVwIGJlZm9yZSB0cmlnZ2VyXG5cdFx0XHRsZXZlcmFnZU5hdGl2ZSggdGhpcywgdHlwZSApO1xuXG5cdFx0XHQvLyBSZXR1cm4gbm9uLWZhbHNlIHRvIGFsbG93IG5vcm1hbCBldmVudC1wYXRoIHByb3BhZ2F0aW9uXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0ZGVsZWdhdGVUeXBlOiBkZWxlZ2F0ZVR5cGVcblx0fTtcbn0gKTtcblxuLy8gQ3JlYXRlIG1vdXNlZW50ZXIvbGVhdmUgZXZlbnRzIHVzaW5nIG1vdXNlb3Zlci9vdXQgYW5kIGV2ZW50LXRpbWUgY2hlY2tzXG4vLyBzbyB0aGF0IGV2ZW50IGRlbGVnYXRpb24gd29ya3MgaW4galF1ZXJ5LlxuLy8gRG8gdGhlIHNhbWUgZm9yIHBvaW50ZXJlbnRlci9wb2ludGVybGVhdmUgYW5kIHBvaW50ZXJvdmVyL3BvaW50ZXJvdXRcbi8vXG4vLyBTdXBwb3J0OiBTYWZhcmkgNyBvbmx5XG4vLyBTYWZhcmkgc2VuZHMgbW91c2VlbnRlciB0b28gb2Z0ZW47IHNlZTpcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ3MDI1OFxuLy8gZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYnVnIChpdCBleGlzdGVkIGluIG9sZGVyIENocm9tZSB2ZXJzaW9ucyBhcyB3ZWxsKS5cbmpRdWVyeS5lYWNoKCB7XG5cdG1vdXNlZW50ZXI6IFwibW91c2VvdmVyXCIsXG5cdG1vdXNlbGVhdmU6IFwibW91c2VvdXRcIixcblx0cG9pbnRlcmVudGVyOiBcInBvaW50ZXJvdmVyXCIsXG5cdHBvaW50ZXJsZWF2ZTogXCJwb2ludGVyb3V0XCJcbn0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBvcmlnIF0gPSB7XG5cdFx0ZGVsZWdhdGVUeXBlOiBmaXgsXG5cdFx0YmluZFR5cGU6IGZpeCxcblxuXHRcdGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIHJldCxcblx0XHRcdFx0dGFyZ2V0ID0gdGhpcyxcblx0XHRcdFx0cmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsXG5cdFx0XHRcdGhhbmRsZU9iaiA9IGV2ZW50LmhhbmRsZU9iajtcblxuXHRcdFx0Ly8gRm9yIG1vdXNlZW50ZXIvbGVhdmUgY2FsbCB0aGUgaGFuZGxlciBpZiByZWxhdGVkIGlzIG91dHNpZGUgdGhlIHRhcmdldC5cblx0XHRcdC8vIE5COiBObyByZWxhdGVkVGFyZ2V0IGlmIHRoZSBtb3VzZSBsZWZ0L2VudGVyZWQgdGhlIGJyb3dzZXIgd2luZG93XG5cdFx0XHRpZiAoICFyZWxhdGVkIHx8ICggcmVsYXRlZCAhPT0gdGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRhcmdldCwgcmVsYXRlZCApICkgKSB7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBoYW5kbGVPYmoub3JpZ1R5cGU7XG5cdFx0XHRcdHJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0ZXZlbnQudHlwZSA9IGZpeDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0b246IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHRvbmU6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgMSApO1xuXHR9LFxuXHRvZmY6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGZuICkge1xuXHRcdHZhciBoYW5kbGVPYmosIHR5cGU7XG5cdFx0aWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2ZW50RGVmYXVsdCAmJiB0eXBlcy5oYW5kbGVPYmogKSB7XG5cblx0XHRcdC8vICggZXZlbnQgKSAgZGlzcGF0Y2hlZCBqUXVlcnkuRXZlbnRcblx0XHRcdGhhbmRsZU9iaiA9IHR5cGVzLmhhbmRsZU9iajtcblx0XHRcdGpRdWVyeSggdHlwZXMuZGVsZWdhdGVUYXJnZXQgKS5vZmYoXG5cdFx0XHRcdGhhbmRsZU9iai5uYW1lc3BhY2UgP1xuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSArIFwiLlwiICsgaGFuZGxlT2JqLm5hbWVzcGFjZSA6XG5cdFx0XHRcdFx0aGFuZGxlT2JqLm9yaWdUeXBlLFxuXHRcdFx0XHRoYW5kbGVPYmouc2VsZWN0b3IsXG5cdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggdHlwZW9mIHR5cGVzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLW9iamVjdCBbLCBzZWxlY3Rvcl0gKVxuXHRcdFx0Zm9yICggdHlwZSBpbiB0eXBlcyApIHtcblx0XHRcdFx0dGhpcy5vZmYoIHR5cGUsIHNlbGVjdG9yLCB0eXBlc1sgdHlwZSBdICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKCBzZWxlY3RvciA9PT0gZmFsc2UgfHwgdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMgWywgZm5dIClcblx0XHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsIHR5cGVzLCBmbiwgc2VsZWN0b3IgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG52YXJcblxuXHQvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5cblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNsaW50L2lzc3Vlcy8zMjI5XG5cdHJ4aHRtbFRhZyA9IC88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKilbXj5dKilcXC8+L2dpLFxuXG5cdC8qIGVzbGludC1lbmFibGUgKi9cblxuXHQvLyBTdXBwb3J0OiBJRSA8PTEwIC0gMTEsIEVkZ2UgMTIgLSAxMyBvbmx5XG5cdC8vIEluIElFL0VkZ2UgdXNpbmcgcmVnZXggZ3JvdXBzIGhlcmUgY2F1c2VzIHNldmVyZSBzbG93ZG93bnMuXG5cdC8vIFNlZSBodHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzE3MzY1MTIvXG5cdHJub0lubmVyaHRtbCA9IC88c2NyaXB0fDxzdHlsZXw8bGluay9pLFxuXG5cdC8vIGNoZWNrZWQ9XCJjaGVja2VkXCIgb3IgY2hlY2tlZFxuXHRyY2hlY2tlZCA9IC9jaGVja2VkXFxzKig/OltePV18PVxccyouY2hlY2tlZC4pL2ksXG5cdHJjbGVhblNjcmlwdCA9IC9eXFxzKjwhKD86XFxbQ0RBVEFcXFt8LS0pfCg/OlxcXVxcXXwtLSk+XFxzKiQvZztcblxuLy8gUHJlZmVyIGEgdGJvZHkgb3ZlciBpdHMgcGFyZW50IHRhYmxlIGZvciBjb250YWluaW5nIG5ldyByb3dzXG5mdW5jdGlvbiBtYW5pcHVsYXRpb25UYXJnZXQoIGVsZW0sIGNvbnRlbnQgKSB7XG5cdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGFibGVcIiApICYmXG5cdFx0bm9kZU5hbWUoIGNvbnRlbnQubm9kZVR5cGUgIT09IDExID8gY29udGVudCA6IGNvbnRlbnQuZmlyc3RDaGlsZCwgXCJ0clwiICkgKSB7XG5cblx0XHRyZXR1cm4galF1ZXJ5KCBlbGVtICkuY2hpbGRyZW4oIFwidGJvZHlcIiApWyAwIF0gfHwgZWxlbTtcblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG4vLyBSZXBsYWNlL3Jlc3RvcmUgdGhlIHR5cGUgYXR0cmlidXRlIG9mIHNjcmlwdCBlbGVtZW50cyBmb3Igc2FmZSBET00gbWFuaXB1bGF0aW9uXG5mdW5jdGlvbiBkaXNhYmxlU2NyaXB0KCBlbGVtICkge1xuXHRlbGVtLnR5cGUgPSAoIGVsZW0uZ2V0QXR0cmlidXRlKCBcInR5cGVcIiApICE9PSBudWxsICkgKyBcIi9cIiArIGVsZW0udHlwZTtcblx0cmV0dXJuIGVsZW07XG59XG5mdW5jdGlvbiByZXN0b3JlU2NyaXB0KCBlbGVtICkge1xuXHRpZiAoICggZWxlbS50eXBlIHx8IFwiXCIgKS5zbGljZSggMCwgNSApID09PSBcInRydWUvXCIgKSB7XG5cdFx0ZWxlbS50eXBlID0gZWxlbS50eXBlLnNsaWNlKCA1ICk7XG5cdH0gZWxzZSB7XG5cdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIFwidHlwZVwiICk7XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHtcblx0dmFyIGksIGwsIHR5cGUsIHBkYXRhT2xkLCBwZGF0YUN1ciwgdWRhdGFPbGQsIHVkYXRhQ3VyLCBldmVudHM7XG5cblx0aWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIDEuIENvcHkgcHJpdmF0ZSBkYXRhOiBldmVudHMsIGhhbmRsZXJzLCBldGMuXG5cdGlmICggZGF0YVByaXYuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0cGRhdGFPbGQgPSBkYXRhUHJpdi5hY2Nlc3MoIHNyYyApO1xuXHRcdHBkYXRhQ3VyID0gZGF0YVByaXYuc2V0KCBkZXN0LCBwZGF0YU9sZCApO1xuXHRcdGV2ZW50cyA9IHBkYXRhT2xkLmV2ZW50cztcblxuXHRcdGlmICggZXZlbnRzICkge1xuXHRcdFx0ZGVsZXRlIHBkYXRhQ3VyLmhhbmRsZTtcblx0XHRcdHBkYXRhQ3VyLmV2ZW50cyA9IHt9O1xuXG5cdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBldmVudHNbIHR5cGUgXS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmFkZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gMi4gQ29weSB1c2VyIGRhdGFcblx0aWYgKCBkYXRhVXNlci5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHR1ZGF0YU9sZCA9IGRhdGFVc2VyLmFjY2Vzcyggc3JjICk7XG5cdFx0dWRhdGFDdXIgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgdWRhdGFPbGQgKTtcblxuXHRcdGRhdGFVc2VyLnNldCggZGVzdCwgdWRhdGFDdXIgKTtcblx0fVxufVxuXG4vLyBGaXggSUUgYnVncywgc2VlIHN1cHBvcnQgdGVzdHNcbmZ1bmN0aW9uIGZpeElucHV0KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBub2RlTmFtZSA9IGRlc3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHQvLyBGYWlscyB0byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvbi5cblx0aWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmIHJjaGVja2FibGVUeXBlLnRlc3QoIHNyYy50eXBlICkgKSB7XG5cdFx0ZGVzdC5jaGVja2VkID0gc3JjLmNoZWNrZWQ7XG5cblx0Ly8gRmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQgc3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlvbnNcblx0fSBlbHNlIGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiB8fCBub2RlTmFtZSA9PT0gXCJ0ZXh0YXJlYVwiICkge1xuXHRcdGRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRlZmF1bHRWYWx1ZTtcblx0fVxufVxuXG5mdW5jdGlvbiBkb21NYW5pcCggY29sbGVjdGlvbiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKSB7XG5cblx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRhcmdzID0gY29uY2F0LmFwcGx5KCBbXSwgYXJncyApO1xuXG5cdHZhciBmcmFnbWVudCwgZmlyc3QsIHNjcmlwdHMsIGhhc1NjcmlwdHMsIG5vZGUsIGRvYyxcblx0XHRpID0gMCxcblx0XHRsID0gY29sbGVjdGlvbi5sZW5ndGgsXG5cdFx0aU5vQ2xvbmUgPSBsIC0gMSxcblx0XHR2YWx1ZSA9IGFyZ3NbIDAgXSxcblx0XHR2YWx1ZUlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCB2YWx1ZSApO1xuXG5cdC8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFnbWVudHMgdGhhdCBjb250YWluIGNoZWNrZWQsIGluIFdlYktpdFxuXHRpZiAoIHZhbHVlSXNGdW5jdGlvbiB8fFxuXHRcdFx0KCBsID4gMSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0IXN1cHBvcnQuY2hlY2tDbG9uZSAmJiByY2hlY2tlZC50ZXN0KCB2YWx1ZSApICkgKSB7XG5cdFx0cmV0dXJuIGNvbGxlY3Rpb24uZWFjaCggZnVuY3Rpb24oIGluZGV4ICkge1xuXHRcdFx0dmFyIHNlbGYgPSBjb2xsZWN0aW9uLmVxKCBpbmRleCApO1xuXHRcdFx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gKSB7XG5cdFx0XHRcdGFyZ3NbIDAgXSA9IHZhbHVlLmNhbGwoIHRoaXMsIGluZGV4LCBzZWxmLmh0bWwoKSApO1xuXHRcdFx0fVxuXHRcdFx0ZG9tTWFuaXAoIHNlbGYsIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICk7XG5cdFx0fSApO1xuXHR9XG5cblx0aWYgKCBsICkge1xuXHRcdGZyYWdtZW50ID0gYnVpbGRGcmFnbWVudCggYXJncywgY29sbGVjdGlvblsgMCBdLm93bmVyRG9jdW1lbnQsIGZhbHNlLCBjb2xsZWN0aW9uLCBpZ25vcmVkICk7XG5cdFx0Zmlyc3QgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0aWYgKCBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSApIHtcblx0XHRcdGZyYWdtZW50ID0gZmlyc3Q7XG5cdFx0fVxuXG5cdFx0Ly8gUmVxdWlyZSBlaXRoZXIgbmV3IGNvbnRlbnQgb3IgYW4gaW50ZXJlc3QgaW4gaWdub3JlZCBlbGVtZW50cyB0byBpbnZva2UgdGhlIGNhbGxiYWNrXG5cdFx0aWYgKCBmaXJzdCB8fCBpZ25vcmVkICkge1xuXHRcdFx0c2NyaXB0cyA9IGpRdWVyeS5tYXAoIGdldEFsbCggZnJhZ21lbnQsIFwic2NyaXB0XCIgKSwgZGlzYWJsZVNjcmlwdCApO1xuXHRcdFx0aGFzU2NyaXB0cyA9IHNjcmlwdHMubGVuZ3RoO1xuXG5cdFx0XHQvLyBVc2UgdGhlIG9yaWdpbmFsIGZyYWdtZW50IGZvciB0aGUgbGFzdCBpdGVtXG5cdFx0XHQvLyBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBiZWNhdXNlIGl0IGNhbiBlbmQgdXBcblx0XHRcdC8vIGJlaW5nIGVtcHRpZWQgaW5jb3JyZWN0bHkgaW4gY2VydGFpbiBzaXR1YXRpb25zICgjODA3MCkuXG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdG5vZGUgPSBmcmFnbWVudDtcblxuXHRcdFx0XHRpZiAoIGkgIT09IGlOb0Nsb25lICkge1xuXHRcdFx0XHRcdG5vZGUgPSBqUXVlcnkuY2xvbmUoIG5vZGUsIHRydWUsIHRydWUgKTtcblxuXHRcdFx0XHRcdC8vIEtlZXAgcmVmZXJlbmNlcyB0byBjbG9uZWQgc2NyaXB0cyBmb3IgbGF0ZXIgcmVzdG9yYXRpb25cblx0XHRcdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBzY3JpcHRzLCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhbGxiYWNrLmNhbGwoIGNvbGxlY3Rpb25bIGkgXSwgbm9kZSwgaSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cdFx0XHRcdGRvYyA9IHNjcmlwdHNbIHNjcmlwdHMubGVuZ3RoIC0gMSBdLm93bmVyRG9jdW1lbnQ7XG5cblx0XHRcdFx0Ly8gUmVlbmFibGUgc2NyaXB0c1xuXHRcdFx0XHRqUXVlcnkubWFwKCBzY3JpcHRzLCByZXN0b3JlU2NyaXB0ICk7XG5cblx0XHRcdFx0Ly8gRXZhbHVhdGUgZXhlY3V0YWJsZSBzY3JpcHRzIG9uIGZpcnN0IGRvY3VtZW50IGluc2VydGlvblxuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGhhc1NjcmlwdHM7IGkrKyApIHtcblx0XHRcdFx0XHRub2RlID0gc2NyaXB0c1sgaSBdO1xuXHRcdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggbm9kZS50eXBlIHx8IFwiXCIgKSAmJlxuXHRcdFx0XHRcdFx0IWRhdGFQcml2LmFjY2Vzcyggbm9kZSwgXCJnbG9iYWxFdmFsXCIgKSAmJlxuXHRcdFx0XHRcdFx0alF1ZXJ5LmNvbnRhaW5zKCBkb2MsIG5vZGUgKSApIHtcblxuXHRcdFx0XHRcdFx0aWYgKCBub2RlLnNyYyAmJiAoIG5vZGUudHlwZSB8fCBcIlwiICkudG9Mb3dlckNhc2UoKSAgIT09IFwibW9kdWxlXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gT3B0aW9uYWwgQUpBWCBkZXBlbmRlbmN5LCBidXQgd29uJ3QgcnVuIHNjcmlwdHMgaWYgbm90IHByZXNlbnRcblx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuX2V2YWxVcmwgJiYgIW5vZGUubm9Nb2R1bGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5Ll9ldmFsVXJsKCBub2RlLnNyYywge1xuXHRcdFx0XHRcdFx0XHRcdFx0bm9uY2U6IG5vZGUubm9uY2UgfHwgbm9kZS5nZXRBdHRyaWJ1dGUoIFwibm9uY2VcIiApXG5cdFx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRET01FdmFsKCBub2RlLnRleHRDb250ZW50LnJlcGxhY2UoIHJjbGVhblNjcmlwdCwgXCJcIiApLCBub2RlLCBkb2MgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY29sbGVjdGlvbjtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlKCBlbGVtLCBzZWxlY3Rvciwga2VlcERhdGEgKSB7XG5cdHZhciBub2RlLFxuXHRcdG5vZGVzID0gc2VsZWN0b3IgPyBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgZWxlbSApIDogZWxlbSxcblx0XHRpID0gMDtcblxuXHRmb3IgKCA7ICggbm9kZSA9IG5vZGVzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0aWYgKCAha2VlcERhdGEgJiYgbm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggbm9kZSApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBub2RlLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRpZiAoIGtlZXBEYXRhICYmIGlzQXR0YWNoZWQoIG5vZGUgKSApIHtcblx0XHRcdFx0c2V0R2xvYmFsRXZhbCggZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdH1cblx0XHRcdG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggbm9kZSApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGh0bWxQcmVmaWx0ZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHJldHVybiBodG1sLnJlcGxhY2UoIHJ4aHRtbFRhZywgXCI8JDE+PC8kMj5cIiApO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0dmFyIGksIGwsIHNyY0VsZW1lbnRzLCBkZXN0RWxlbWVudHMsXG5cdFx0XHRjbG9uZSA9IGVsZW0uY2xvbmVOb2RlKCB0cnVlICksXG5cdFx0XHRpblBhZ2UgPSBpc0F0dGFjaGVkKCBlbGVtICk7XG5cblx0XHQvLyBGaXggSUUgY2xvbmluZyBpc3N1ZXNcblx0XHRpZiAoICFzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkICYmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSApICYmXG5cdFx0XHRcdCFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gV2UgZXNjaGV3IFNpenpsZSBoZXJlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zOiBodHRwczovL2pzcGVyZi5jb20vZ2V0YWxsLXZzLXNpenpsZS8yXG5cdFx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7XG5cdFx0XHRzcmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSApO1xuXG5cdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zml4SW5wdXQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZVxuXHRcdGlmICggZGF0YUFuZEV2ZW50cyApIHtcblx0XHRcdGlmICggZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRcdHNyY0VsZW1lbnRzID0gc3JjRWxlbWVudHMgfHwgZ2V0QWxsKCBlbGVtICk7XG5cdFx0XHRcdGRlc3RFbGVtZW50cyA9IGRlc3RFbGVtZW50cyB8fCBnZXRBbGwoIGNsb25lICk7XG5cblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNsb25lQ29weUV2ZW50KCBlbGVtLCBjbG9uZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lLCBcInNjcmlwdFwiICk7XG5cdFx0aWYgKCBkZXN0RWxlbWVudHMubGVuZ3RoID4gMCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIGRlc3RFbGVtZW50cywgIWluUGFnZSAmJiBnZXRBbGwoIGVsZW0sIFwic2NyaXB0XCIgKSApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiB0aGUgY2xvbmVkIHNldFxuXHRcdHJldHVybiBjbG9uZTtcblx0fSxcblxuXHRjbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblx0XHR2YXIgZGF0YSwgZWxlbSwgdHlwZSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbCxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT09IHVuZGVmaW5lZDsgaSsrICkge1xuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cdFx0XHRcdGlmICggKCBkYXRhID0gZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhLmV2ZW50cyApIHtcblx0XHRcdFx0XHRcdGZvciAoIHR5cGUgaW4gZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggc3BlY2lhbFsgdHlwZSBdICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKTtcblxuXHRcdFx0XHRcdFx0XHQvLyBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gKSB7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1K1xuXHRcdFx0XHRcdC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZVxuXHRcdFx0XHRcdGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGRldGFjaDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yLCB0cnVlICk7XG5cdH0sXG5cblx0cmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IgKTtcblx0fSxcblxuXHR0ZXh0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRqUXVlcnkudGV4dCggdGhpcyApIDpcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0dGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0YXBwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xuXHRcdFx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0cHJlcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZSggZWxlbSwgdGFyZ2V0LmZpcnN0Q2hpbGQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YmVmb3JlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRhZnRlcjogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlbGVtLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7ICggZWxlbSA9IHRoaXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblxuXHRcdFx0XHQvLyBSZW1vdmUgYW55IHJlbWFpbmluZyBub2Rlc1xuXHRcdFx0XHRlbGVtLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdGRhdGFBbmRFdmVudHMgPSBkYXRhQW5kRXZlbnRzID09IG51bGwgPyBmYWxzZSA6IGRhdGFBbmRFdmVudHM7XG5cdFx0ZGVlcERhdGFBbmRFdmVudHMgPSBkZWVwRGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRhQW5kRXZlbnRzO1xuXG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY2xvbmUoIHRoaXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdGh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXSB8fCB7fSxcblx0XHRcdFx0aSA9IDAsXG5cdFx0XHRcdGwgPSB0aGlzLmxlbmd0aDtcblxuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmlubmVySFRNTDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2VlIGlmIHdlIGNhbiB0YWtlIGEgc2hvcnRjdXQgYW5kIGp1c3QgdXNlIGlubmVySFRNTFxuXHRcdFx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgIXJub0lubmVyaHRtbC50ZXN0KCB2YWx1ZSApICYmXG5cdFx0XHRcdCF3cmFwTWFwWyAoIHJ0YWdOYW1lLmV4ZWMoIHZhbHVlICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCkgXSApIHtcblxuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5odG1sUHJlZmlsdGVyKCB2YWx1ZSApO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdFx0ZWxlbSA9IHRoaXNbIGkgXSB8fCB7fTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXHRcdFx0XHRcdFx0XHRlbGVtLmlubmVySFRNTCA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW0gPSAwO1xuXG5cdFx0XHRcdC8vIElmIHVzaW5nIGlubmVySFRNTCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGZhbGxiYWNrIG1ldGhvZFxuXHRcdFx0XHR9IGNhdGNoICggZSApIHt9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmFwcGVuZCggdmFsdWUgKTtcblx0XHRcdH1cblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdHJlcGxhY2VXaXRoOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaWdub3JlZCA9IFtdO1xuXG5cdFx0Ly8gTWFrZSB0aGUgY2hhbmdlcywgcmVwbGFjaW5nIGVhY2ggbm9uLWlnbm9yZWQgY29udGV4dCBlbGVtZW50IHdpdGggdGhlIG5ldyBjb250ZW50XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcblxuXHRcdFx0aWYgKCBqUXVlcnkuaW5BcnJheSggdGhpcywgaWdub3JlZCApIDwgMCApIHtcblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCB0aGlzICkgKTtcblx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnJlcGxhY2VDaGlsZCggZWxlbSwgdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBGb3JjZSBjYWxsYmFjayBpbnZvY2F0aW9uXG5cdFx0fSwgaWdub3JlZCApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCB7XG5cdGFwcGVuZFRvOiBcImFwcGVuZFwiLFxuXHRwcmVwZW5kVG86IFwicHJlcGVuZFwiLFxuXHRpbnNlcnRCZWZvcmU6IFwiYmVmb3JlXCIsXG5cdGluc2VydEFmdGVyOiBcImFmdGVyXCIsXG5cdHJlcGxhY2VBbGw6IFwicmVwbGFjZVdpdGhcIlxufSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgZWxlbXMsXG5cdFx0XHRyZXQgPSBbXSxcblx0XHRcdGluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSxcblx0XHRcdGxhc3QgPSBpbnNlcnQubGVuZ3RoIC0gMSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyBpIDw9IGxhc3Q7IGkrKyApIHtcblx0XHRcdGVsZW1zID0gaSA9PT0gbGFzdCA/IHRoaXMgOiB0aGlzLmNsb25lKCB0cnVlICk7XG5cdFx0XHRqUXVlcnkoIGluc2VydFsgaSBdIClbIG9yaWdpbmFsIF0oIGVsZW1zICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0Ly8gLmdldCgpIGJlY2F1c2UgcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0cHVzaC5hcHBseSggcmV0LCBlbGVtcy5nZXQoKSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0ICk7XG5cdH07XG59ICk7XG52YXIgcm51bW5vbnB4ID0gbmV3IFJlZ0V4cCggXCJeKFwiICsgcG51bSArIFwiKSg/IXB4KVthLXolXSskXCIsIFwiaVwiICk7XG5cbnZhciBnZXRTdHlsZXMgPSBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seSwgRmlyZWZveCA8PTMwICgjMTUwOTgsICMxNDE1MClcblx0XHQvLyBJRSB0aHJvd3Mgb24gZWxlbWVudHMgY3JlYXRlZCBpbiBwb3B1cHNcblx0XHQvLyBGRiBtZWFud2hpbGUgdGhyb3dzIG9uIGZyYW1lIGVsZW1lbnRzIHRocm91Z2ggXCJkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlXCJcblx0XHR2YXIgdmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcblxuXHRcdGlmICggIXZpZXcgfHwgIXZpZXcub3BlbmVyICkge1xuXHRcdFx0dmlldyA9IHdpbmRvdztcblx0XHR9XG5cblx0XHRyZXR1cm4gdmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtICk7XG5cdH07XG5cbnZhciByYm94U3R5bGUgPSBuZXcgUmVnRXhwKCBjc3NFeHBhbmQuam9pbiggXCJ8XCIgKSwgXCJpXCIgKTtcblxuXG5cbiggZnVuY3Rpb24oKSB7XG5cblx0Ly8gRXhlY3V0aW5nIGJvdGggcGl4ZWxQb3NpdGlvbiAmIGJveFNpemluZ1JlbGlhYmxlIHRlc3RzIHJlcXVpcmUgb25seSBvbmUgbGF5b3V0XG5cdC8vIHNvIHRoZXkncmUgZXhlY3V0ZWQgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHRoZSBzZWNvbmQgY29tcHV0YXRpb24uXG5cdGZ1bmN0aW9uIGNvbXB1dGVTdHlsZVRlc3RzKCkge1xuXG5cdFx0Ly8gVGhpcyBpcyBhIHNpbmdsZXRvbiwgd2UgbmVlZCB0byBleGVjdXRlIGl0IG9ubHkgb25jZVxuXHRcdGlmICggIWRpdiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb250YWluZXIuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDt3aWR0aDo2MHB4O1wiICtcblx0XHRcdFwibWFyZ2luLXRvcDoxcHg7cGFkZGluZzowO2JvcmRlcjowXCI7XG5cdFx0ZGl2LnN0eWxlLmNzc1RleHQgPVxuXHRcdFx0XCJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpzY3JvbGw7XCIgK1xuXHRcdFx0XCJtYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4O1wiICtcblx0XHRcdFwid2lkdGg6NjAlO3RvcDoxJVwiO1xuXHRcdGRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggY29udGFpbmVyICkuYXBwZW5kQ2hpbGQoIGRpdiApO1xuXG5cdFx0dmFyIGRpdlN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIGRpdiApO1xuXHRcdHBpeGVsUG9zaXRpb25WYWwgPSBkaXZTdHlsZS50b3AgIT09IFwiMSVcIjtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHksIEZpcmVmb3ggPD0zIC0gNDRcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnRWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLm1hcmdpbkxlZnQgKSA9PT0gMTI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBTYWZhcmkgPD05LjEgLSAxMC4xLCBpT1MgPD03LjAgLSA5LjNcblx0XHQvLyBTb21lIHN0eWxlcyBjb21lIGJhY2sgd2l0aCBwZXJjZW50YWdlIHZhbHVlcywgZXZlbiB0aG91Z2ggdGhleSBzaG91bGRuJ3Rcblx0XHRkaXYuc3R5bGUucmlnaHQgPSBcIjYwJVwiO1xuXHRcdHBpeGVsQm94U3R5bGVzVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5yaWdodCApID09PSAzNjtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdFx0Ly8gRGV0ZWN0IG1pc3JlcG9ydGluZyBvZiBjb250ZW50IGRpbWVuc2lvbnMgZm9yIGJveC1zaXppbmc6Ym9yZGVyLWJveCBlbGVtZW50c1xuXHRcdGJveFNpemluZ1JlbGlhYmxlVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS53aWR0aCApID09PSAzNjtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdC8vIERldGVjdCBvdmVyZmxvdzpzY3JvbGwgc2NyZXdpbmVzcyAoZ2gtMzY5OSlcblx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD02NFxuXHRcdC8vIERvbid0IGdldCB0cmlja2VkIHdoZW4gem9vbSBhZmZlY3RzIG9mZnNldFdpZHRoIChnaC00MDI5KVxuXHRcdGRpdi5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblx0XHRzY3JvbGxib3hTaXplVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXYub2Zmc2V0V2lkdGggLyAzICkgPT09IDEyO1xuXG5cdFx0ZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTtcblxuXHRcdC8vIE51bGxpZnkgdGhlIGRpdiBzbyBpdCB3b3VsZG4ndCBiZSBzdG9yZWQgaW4gdGhlIG1lbW9yeSBhbmRcblx0XHQvLyBpdCB3aWxsIGFsc28gYmUgYSBzaWduIHRoYXQgY2hlY2tzIGFscmVhZHkgcGVyZm9ybWVkXG5cdFx0ZGl2ID0gbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIHJvdW5kUGl4ZWxNZWFzdXJlcyggbWVhc3VyZSApIHtcblx0XHRyZXR1cm4gTWF0aC5yb3VuZCggcGFyc2VGbG9hdCggbWVhc3VyZSApICk7XG5cdH1cblxuXHR2YXIgcGl4ZWxQb3NpdGlvblZhbCwgYm94U2l6aW5nUmVsaWFibGVWYWwsIHNjcm9sbGJveFNpemVWYWwsIHBpeGVsQm94U3R5bGVzVmFsLFxuXHRcdHJlbGlhYmxlTWFyZ2luTGVmdFZhbCxcblx0XHRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICksXG5cdFx0ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApO1xuXG5cdC8vIEZpbmlzaCBlYXJseSBpbiBsaW1pdGVkIChub24tYnJvd3NlcikgZW52aXJvbm1lbnRzXG5cdGlmICggIWRpdi5zdHlsZSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdC8vIFN0eWxlIG9mIGNsb25lZCBlbGVtZW50IGFmZmVjdHMgc291cmNlIGVsZW1lbnQgY2xvbmVkICgjODkwOClcblx0ZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJjb250ZW50LWJveFwiO1xuXHRkaXYuY2xvbmVOb2RlKCB0cnVlICkuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcIlwiO1xuXHRzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSA9IGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9PT0gXCJjb250ZW50LWJveFwiO1xuXG5cdGpRdWVyeS5leHRlbmQoIHN1cHBvcnQsIHtcblx0XHRib3hTaXppbmdSZWxpYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIGJveFNpemluZ1JlbGlhYmxlVmFsO1xuXHRcdH0sXG5cdFx0cGl4ZWxCb3hTdHlsZXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbEJveFN0eWxlc1ZhbDtcblx0XHR9LFxuXHRcdHBpeGVsUG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbFBvc2l0aW9uVmFsO1xuXHRcdH0sXG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0OiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcmVsaWFibGVNYXJnaW5MZWZ0VmFsO1xuXHRcdH0sXG5cdFx0c2Nyb2xsYm94U2l6ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHNjcm9sbGJveFNpemVWYWw7XG5cdFx0fVxuXHR9ICk7XG59ICkoKTtcblxuXG5mdW5jdGlvbiBjdXJDU1MoIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkge1xuXHR2YXIgd2lkdGgsIG1pbldpZHRoLCBtYXhXaWR0aCwgcmV0LFxuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA1MStcblx0XHQvLyBSZXRyaWV2aW5nIHN0eWxlIGJlZm9yZSBjb21wdXRlZCBzb21laG93XG5cdFx0Ly8gZml4ZXMgYW4gaXNzdWUgd2l0aCBnZXR0aW5nIHdyb25nIHZhbHVlc1xuXHRcdC8vIG9uIGRldGFjaGVkIGVsZW1lbnRzXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdGNvbXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7XG5cblx0Ly8gZ2V0UHJvcGVydHlWYWx1ZSBpcyBuZWVkZWQgZm9yOlxuXHQvLyAgIC5jc3MoJ2ZpbHRlcicpIChJRSA5IG9ubHksICMxMjUzNylcblx0Ly8gICAuY3NzKCctLWN1c3RvbVByb3BlcnR5KSAoIzMxNDQpXG5cdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0cmV0ID0gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSggbmFtZSApIHx8IGNvbXB1dGVkWyBuYW1lIF07XG5cblx0XHRpZiAoIHJldCA9PT0gXCJcIiAmJiAhaXNBdHRhY2hlZCggZWxlbSApICkge1xuXHRcdFx0cmV0ID0galF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gQSB0cmlidXRlIHRvIHRoZSBcImF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHNcIlxuXHRcdC8vIEFuZHJvaWQgQnJvd3NlciByZXR1cm5zIHBlcmNlbnRhZ2UgZm9yIHNvbWUgdmFsdWVzLFxuXHRcdC8vIGJ1dCB3aWR0aCBzZWVtcyB0byBiZSByZWxpYWJseSBwaXhlbHMuXG5cdFx0Ly8gVGhpcyBpcyBhZ2FpbnN0IHRoZSBDU1NPTSBkcmFmdCBzcGVjOlxuXHRcdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jcmVzb2x2ZWQtdmFsdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5waXhlbEJveFN0eWxlcygpICYmIHJudW1ub25weC50ZXN0KCByZXQgKSAmJiByYm94U3R5bGUudGVzdCggbmFtZSApICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgb3JpZ2luYWwgdmFsdWVzXG5cdFx0XHR3aWR0aCA9IHN0eWxlLndpZHRoO1xuXHRcdFx0bWluV2lkdGggPSBzdHlsZS5taW5XaWR0aDtcblx0XHRcdG1heFdpZHRoID0gc3R5bGUubWF4V2lkdGg7XG5cblx0XHRcdC8vIFB1dCBpbiB0aGUgbmV3IHZhbHVlcyB0byBnZXQgYSBjb21wdXRlZCB2YWx1ZSBvdXRcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gc3R5bGUubWF4V2lkdGggPSBzdHlsZS53aWR0aCA9IHJldDtcblx0XHRcdHJldCA9IGNvbXB1dGVkLndpZHRoO1xuXG5cdFx0XHQvLyBSZXZlcnQgdGhlIGNoYW5nZWQgdmFsdWVzXG5cdFx0XHRzdHlsZS53aWR0aCA9IHdpZHRoO1xuXHRcdFx0c3R5bGUubWluV2lkdGggPSBtaW5XaWR0aDtcblx0XHRcdHN0eWxlLm1heFdpZHRoID0gbWF4V2lkdGg7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJldCAhPT0gdW5kZWZpbmVkID9cblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0XHQvLyBJRSByZXR1cm5zIHpJbmRleCB2YWx1ZSBhcyBhbiBpbnRlZ2VyLlxuXHRcdHJldCArIFwiXCIgOlxuXHRcdHJldDtcbn1cblxuXG5mdW5jdGlvbiBhZGRHZXRIb29rSWYoIGNvbmRpdGlvbkZuLCBob29rRm4gKSB7XG5cblx0Ly8gRGVmaW5lIHRoZSBob29rLCB3ZSdsbCBjaGVjayBvbiB0aGUgZmlyc3QgcnVuIGlmIGl0J3MgcmVhbGx5IG5lZWRlZC5cblx0cmV0dXJuIHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBjb25kaXRpb25GbigpICkge1xuXG5cdFx0XHRcdC8vIEhvb2sgbm90IG5lZWRlZCAob3IgaXQncyBub3QgcG9zc2libGUgdG8gdXNlIGl0IGR1ZVxuXHRcdFx0XHQvLyB0byBtaXNzaW5nIGRlcGVuZGVuY3kpLCByZW1vdmUgaXQuXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLmdldDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBIb29rIG5lZWRlZDsgcmVkZWZpbmUgaXQgc28gdGhhdCB0aGUgc3VwcG9ydCB0ZXN0IGlzIG5vdCBleGVjdXRlZCBhZ2Fpbi5cblx0XHRcdHJldHVybiAoIHRoaXMuZ2V0ID0gaG9va0ZuICkuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH1cblx0fTtcbn1cblxuXG52YXIgY3NzUHJlZml4ZXMgPSBbIFwiV2Via2l0XCIsIFwiTW96XCIsIFwibXNcIiBdLFxuXHRlbXB0eVN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLnN0eWxlLFxuXHR2ZW5kb3JQcm9wcyA9IHt9O1xuXG4vLyBSZXR1cm4gYSB2ZW5kb3ItcHJlZml4ZWQgcHJvcGVydHkgb3IgdW5kZWZpbmVkXG5mdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHtcblxuXHQvLyBDaGVjayBmb3IgdmVuZG9yIHByZWZpeGVkIG5hbWVzXG5cdHZhciBjYXBOYW1lID0gbmFtZVsgMCBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKCAxICksXG5cdFx0aSA9IGNzc1ByZWZpeGVzLmxlbmd0aDtcblxuXHR3aGlsZSAoIGktLSApIHtcblx0XHRuYW1lID0gY3NzUHJlZml4ZXNbIGkgXSArIGNhcE5hbWU7XG5cdFx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0XHRyZXR1cm4gbmFtZTtcblx0XHR9XG5cdH1cbn1cblxuLy8gUmV0dXJuIGEgcG90ZW50aWFsbHktbWFwcGVkIGpRdWVyeS5jc3NQcm9wcyBvciB2ZW5kb3IgcHJlZml4ZWQgcHJvcGVydHlcbmZ1bmN0aW9uIGZpbmFsUHJvcE5hbWUoIG5hbWUgKSB7XG5cdHZhciBmaW5hbCA9IGpRdWVyeS5jc3NQcm9wc1sgbmFtZSBdIHx8IHZlbmRvclByb3BzWyBuYW1lIF07XG5cblx0aWYgKCBmaW5hbCApIHtcblx0XHRyZXR1cm4gZmluYWw7XG5cdH1cblx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cblx0cmV0dXJuIHZlbmRvclByb3BzWyBuYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHx8IG5hbWU7XG59XG5cblxudmFyXG5cblx0Ly8gU3dhcHBhYmxlIGlmIGRpc3BsYXkgaXMgbm9uZSBvciBzdGFydHMgd2l0aCB0YWJsZVxuXHQvLyBleGNlcHQgXCJ0YWJsZVwiLCBcInRhYmxlLWNlbGxcIiwgb3IgXCJ0YWJsZS1jYXB0aW9uXCJcblx0Ly8gU2VlIGhlcmUgZm9yIGRpc3BsYXkgdmFsdWVzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9kaXNwbGF5XG5cdHJkaXNwbGF5c3dhcCA9IC9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxcblx0cmN1c3RvbVByb3AgPSAvXi0tLyxcblx0Y3NzU2hvdyA9IHsgcG9zaXRpb246IFwiYWJzb2x1dGVcIiwgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiwgZGlzcGxheTogXCJibG9ja1wiIH0sXG5cdGNzc05vcm1hbFRyYW5zZm9ybSA9IHtcblx0XHRsZXR0ZXJTcGFjaW5nOiBcIjBcIixcblx0XHRmb250V2VpZ2h0OiBcIjQwMFwiXG5cdH07XG5cbmZ1bmN0aW9uIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgc3VidHJhY3QgKSB7XG5cblx0Ly8gQW55IHJlbGF0aXZlICgrLy0pIHZhbHVlcyBoYXZlIGFscmVhZHkgYmVlblxuXHQvLyBub3JtYWxpemVkIGF0IHRoaXMgcG9pbnRcblx0dmFyIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICk7XG5cdHJldHVybiBtYXRjaGVzID9cblxuXHRcdC8vIEd1YXJkIGFnYWluc3QgdW5kZWZpbmVkIFwic3VidHJhY3RcIiwgZS5nLiwgd2hlbiB1c2VkIGFzIGluIGNzc0hvb2tzXG5cdFx0TWF0aC5tYXgoIDAsIG1hdGNoZXNbIDIgXSAtICggc3VidHJhY3QgfHwgMCApICkgKyAoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSA6XG5cdFx0dmFsdWU7XG59XG5cbmZ1bmN0aW9uIGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBib3gsIGlzQm9yZGVyQm94LCBzdHlsZXMsIGNvbXB1dGVkVmFsICkge1xuXHR2YXIgaSA9IGRpbWVuc2lvbiA9PT0gXCJ3aWR0aFwiID8gMSA6IDAsXG5cdFx0ZXh0cmEgPSAwLFxuXHRcdGRlbHRhID0gMDtcblxuXHQvLyBBZGp1c3RtZW50IG1heSBub3QgYmUgbmVjZXNzYXJ5XG5cdGlmICggYm94ID09PSAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICkgKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgKSB7XG5cblx0XHQvLyBCb3RoIGJveCBtb2RlbHMgZXhjbHVkZSBtYXJnaW5cblx0XHRpZiAoIGJveCA9PT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIGJveCArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgY29udGVudC1ib3gsIHdlJ3JlIHNlZWtpbmcgXCJwYWRkaW5nXCIgb3IgXCJib3JkZXJcIiBvciBcIm1hcmdpblwiXG5cdFx0aWYgKCAhaXNCb3JkZXJCb3ggKSB7XG5cblx0XHRcdC8vIEFkZCBwYWRkaW5nXG5cdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblxuXHRcdFx0Ly8gRm9yIFwiYm9yZGVyXCIgb3IgXCJtYXJnaW5cIiwgYWRkIGJvcmRlclxuXHRcdFx0aWYgKCBib3ggIT09IFwicGFkZGluZ1wiICkge1xuXHRcdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXG5cdFx0XHQvLyBCdXQgc3RpbGwga2VlcCB0cmFjayBvZiBpdCBvdGhlcndpc2Vcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGV4dHJhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgYm9yZGVyLWJveCAoY29udGVudCArIHBhZGRpbmcgKyBib3JkZXIpLCB3ZSdyZSBzZWVraW5nIFwiY29udGVudFwiIG9yXG5cdFx0Ly8gXCJwYWRkaW5nXCIgb3IgXCJtYXJnaW5cIlxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIEZvciBcImNvbnRlbnRcIiwgc3VidHJhY3QgcGFkZGluZ1xuXHRcdFx0aWYgKCBib3ggPT09IFwiY29udGVudFwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yIFwiY29udGVudFwiIG9yIFwicGFkZGluZ1wiLCBzdWJ0cmFjdCBib3JkZXJcblx0XHRcdGlmICggYm94ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFjY291bnQgZm9yIHBvc2l0aXZlIGNvbnRlbnQtYm94IHNjcm9sbCBndXR0ZXIgd2hlbiByZXF1ZXN0ZWQgYnkgcHJvdmlkaW5nIGNvbXB1dGVkVmFsXG5cdGlmICggIWlzQm9yZGVyQm94ICYmIGNvbXB1dGVkVmFsID49IDAgKSB7XG5cblx0XHQvLyBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgYSByb3VuZGVkIHN1bSBvZiBjb250ZW50LCBwYWRkaW5nLCBzY3JvbGwgZ3V0dGVyLCBhbmQgYm9yZGVyXG5cdFx0Ly8gQXNzdW1pbmcgaW50ZWdlciBzY3JvbGwgZ3V0dGVyLCBzdWJ0cmFjdCB0aGUgcmVzdCBhbmQgcm91bmQgZG93blxuXHRcdGRlbHRhICs9IE1hdGgubWF4KCAwLCBNYXRoLmNlaWwoXG5cdFx0XHRlbGVtWyBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApIF0gLVxuXHRcdFx0Y29tcHV0ZWRWYWwgLVxuXHRcdFx0ZGVsdGEgLVxuXHRcdFx0ZXh0cmEgLVxuXHRcdFx0MC41XG5cblx0XHQvLyBJZiBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgdW5rbm93biwgdGhlbiB3ZSBjYW4ndCBkZXRlcm1pbmUgY29udGVudC1ib3ggc2Nyb2xsIGd1dHRlclxuXHRcdC8vIFVzZSBhbiBleHBsaWNpdCB6ZXJvIHRvIGF2b2lkIE5hTiAoZ2gtMzk2NClcblx0XHQpICkgfHwgMDtcblx0fVxuXG5cdHJldHVybiBkZWx0YTtcbn1cblxuZnVuY3Rpb24gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApIHtcblxuXHQvLyBTdGFydCB3aXRoIGNvbXB1dGVkIHN0eWxlXG5cdHZhciBzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblxuXHRcdC8vIFRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3csIG9ubHkgZmV0Y2ggYm94U2l6aW5nIGlmIHdlIG5lZWQgaXQgKGdoLTQzMjIpLlxuXHRcdC8vIEZha2UgY29udGVudC1ib3ggdW50aWwgd2Uga25vdyBpdCdzIG5lZWRlZCB0byBrbm93IHRoZSB0cnVlIHZhbHVlLlxuXHRcdGJveFNpemluZ05lZWRlZCA9ICFzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgfHwgZXh0cmEsXG5cdFx0aXNCb3JkZXJCb3ggPSBib3hTaXppbmdOZWVkZWQgJiZcblx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCIsXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IGlzQm9yZGVyQm94LFxuXG5cdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBkaW1lbnNpb24sIHN0eWxlcyApLFxuXHRcdG9mZnNldFByb3AgPSBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApO1xuXG5cdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NFxuXHQvLyBSZXR1cm4gYSBjb25mb3VuZGluZyBub24tcGl4ZWwgdmFsdWUgb3IgZmVpZ24gaWdub3JhbmNlLCBhcyBhcHByb3ByaWF0ZS5cblx0aWYgKCBybnVtbm9ucHgudGVzdCggdmFsICkgKSB7XG5cdFx0aWYgKCAhZXh0cmEgKSB7XG5cdFx0XHRyZXR1cm4gdmFsO1xuXHRcdH1cblx0XHR2YWwgPSBcImF1dG9cIjtcblx0fVxuXG5cblx0Ly8gRmFsbCBiYWNrIHRvIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCB3aGVuIHZhbHVlIGlzIFwiYXV0b1wiXG5cdC8vIFRoaXMgaGFwcGVucyBmb3IgaW5saW5lIGVsZW1lbnRzIHdpdGggbm8gZXhwbGljaXQgc2V0dGluZyAoZ2gtMzU3MSlcblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSAtIDQuMyBvbmx5XG5cdC8vIEFsc28gdXNlIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBmb3IgbWlzcmVwb3J0ZWQgaW5saW5lIGRpbWVuc2lvbnMgKGdoLTM2MDIpXG5cdC8vIFN1cHBvcnQ6IElFIDktMTEgb25seVxuXHQvLyBBbHNvIHVzZSBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgZm9yIHdoZW4gYm94IHNpemluZyBpcyB1bnJlbGlhYmxlXG5cdC8vIFdlIHVzZSBnZXRDbGllbnRSZWN0cygpIHRvIGNoZWNrIGZvciBoaWRkZW4vZGlzY29ubmVjdGVkLlxuXHQvLyBJbiB0aG9zZSBjYXNlcywgdGhlIGNvbXB1dGVkIHZhbHVlIGNhbiBiZSB0cnVzdGVkIHRvIGJlIGJvcmRlci1ib3hcblx0aWYgKCAoICFzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgJiYgaXNCb3JkZXJCb3ggfHxcblx0XHR2YWwgPT09IFwiYXV0b1wiIHx8XG5cdFx0IXBhcnNlRmxvYXQoIHZhbCApICYmIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiaW5saW5lXCIgKSAmJlxuXHRcdGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7XG5cblx0XHRpc0JvcmRlckJveCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCI7XG5cblx0XHQvLyBXaGVyZSBhdmFpbGFibGUsIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBhcHByb3hpbWF0ZSBib3JkZXIgYm94IGRpbWVuc2lvbnMuXG5cdFx0Ly8gV2hlcmUgbm90IGF2YWlsYWJsZSAoZS5nLiwgU1ZHKSwgYXNzdW1lIHVucmVsaWFibGUgYm94LXNpemluZyBhbmQgaW50ZXJwcmV0IHRoZVxuXHRcdC8vIHJldHJpZXZlZCB2YWx1ZSBhcyBhIGNvbnRlbnQgYm94IGRpbWVuc2lvbi5cblx0XHR2YWx1ZUlzQm9yZGVyQm94ID0gb2Zmc2V0UHJvcCBpbiBlbGVtO1xuXHRcdGlmICggdmFsdWVJc0JvcmRlckJveCApIHtcblx0XHRcdHZhbCA9IGVsZW1bIG9mZnNldFByb3AgXTtcblx0XHR9XG5cdH1cblxuXHQvLyBOb3JtYWxpemUgXCJcIiBhbmQgYXV0b1xuXHR2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwO1xuXG5cdC8vIEFkanVzdCBmb3IgdGhlIGVsZW1lbnQncyBib3ggbW9kZWxcblx0cmV0dXJuICggdmFsICtcblx0XHRib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRlbGVtLFxuXHRcdFx0ZGltZW5zaW9uLFxuXHRcdFx0ZXh0cmEgfHwgKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApLFxuXHRcdFx0dmFsdWVJc0JvcmRlckJveCxcblx0XHRcdHN0eWxlcyxcblxuXHRcdFx0Ly8gUHJvdmlkZSB0aGUgY3VycmVudCBjb21wdXRlZCBzaXplIHRvIHJlcXVlc3Qgc2Nyb2xsIGd1dHRlciBjYWxjdWxhdGlvbiAoZ2gtMzU4OSlcblx0XHRcdHZhbFxuXHRcdClcblx0KSArIFwicHhcIjtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIEFkZCBpbiBzdHlsZSBwcm9wZXJ0eSBob29rcyBmb3Igb3ZlcnJpZGluZyB0aGUgZGVmYXVsdFxuXHQvLyBiZWhhdmlvciBvZiBnZXR0aW5nIGFuZCBzZXR0aW5nIGEgc3R5bGUgcHJvcGVydHlcblx0Y3NzSG9va3M6IHtcblx0XHRvcGFjaXR5OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdFx0XHRcdC8vIFdlIHNob3VsZCBhbHdheXMgZ2V0IGEgbnVtYmVyIGJhY2sgZnJvbSBvcGFjaXR5XG5cdFx0XHRcdFx0dmFyIHJldCA9IGN1ckNTUyggZWxlbSwgXCJvcGFjaXR5XCIgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmV0ID09PSBcIlwiID8gXCIxXCIgOiByZXQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0Ly8gRG9uJ3QgYXV0b21hdGljYWxseSBhZGQgXCJweFwiIHRvIHRoZXNlIHBvc3NpYmx5LXVuaXRsZXNzIHByb3BlcnRpZXNcblx0Y3NzTnVtYmVyOiB7XG5cdFx0XCJhbmltYXRpb25JdGVyYXRpb25Db3VudFwiOiB0cnVlLFxuXHRcdFwiY29sdW1uQ291bnRcIjogdHJ1ZSxcblx0XHRcImZpbGxPcGFjaXR5XCI6IHRydWUsXG5cdFx0XCJmbGV4R3Jvd1wiOiB0cnVlLFxuXHRcdFwiZmxleFNocmlua1wiOiB0cnVlLFxuXHRcdFwiZm9udFdlaWdodFwiOiB0cnVlLFxuXHRcdFwiZ3JpZEFyZWFcIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5cIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5FbmRcIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5TdGFydFwiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd1wiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd0VuZFwiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd1N0YXJ0XCI6IHRydWUsXG5cdFx0XCJsaW5lSGVpZ2h0XCI6IHRydWUsXG5cdFx0XCJvcGFjaXR5XCI6IHRydWUsXG5cdFx0XCJvcmRlclwiOiB0cnVlLFxuXHRcdFwib3JwaGFuc1wiOiB0cnVlLFxuXHRcdFwid2lkb3dzXCI6IHRydWUsXG5cdFx0XCJ6SW5kZXhcIjogdHJ1ZSxcblx0XHRcInpvb21cIjogdHJ1ZVxuXHR9LFxuXG5cdC8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3NlIG5hbWVzIHlvdSB3aXNoIHRvIGZpeCBiZWZvcmVcblx0Ly8gc2V0dGluZyBvciBnZXR0aW5nIHRoZSB2YWx1ZVxuXHRjc3NQcm9wczoge30sXG5cblx0Ly8gR2V0IGFuZCBzZXQgdGhlIHN0eWxlIHByb3BlcnR5IG9uIGEgRE9NIE5vZGVcblx0c3R5bGU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7XG5cblx0XHQvLyBEb24ndCBzZXQgc3R5bGVzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoICFlbGVtIHx8IGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWVcblx0XHR2YXIgcmV0LCB0eXBlLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0gY2FtZWxDYXNlKCBuYW1lICksXG5cdFx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICksXG5cdFx0XHRzdHlsZSA9IGVsZW0uc3R5bGU7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUuIFdlIGRvbid0XG5cdFx0Ly8gd2FudCB0byBxdWVyeSB0aGUgdmFsdWUgaWYgaXQgaXMgYSBDU1MgY3VzdG9tIHByb3BlcnR5XG5cdFx0Ly8gc2luY2UgdGhleSBhcmUgdXNlci1kZWZpbmVkLlxuXHRcdGlmICggIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdG5hbWUgPSBmaW5hbFByb3BOYW1lKCBvcmlnTmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIEdldHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24sIHRoZW4gdW5wcmVmaXhlZCB2ZXJzaW9uXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBDaGVjayBpZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWVcblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR0eXBlID0gdHlwZW9mIHZhbHVlO1xuXG5cdFx0XHQvLyBDb252ZXJ0IFwiKz1cIiBvciBcIi09XCIgdG8gcmVsYXRpdmUgbnVtYmVycyAoIzczNDUpXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwic3RyaW5nXCIgJiYgKCByZXQgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJiByZXRbIDEgXSApIHtcblx0XHRcdFx0dmFsdWUgPSBhZGp1c3RDU1MoIGVsZW0sIG5hbWUsIHJldCApO1xuXG5cdFx0XHRcdC8vIEZpeGVzIGJ1ZyAjOTIzN1xuXHRcdFx0XHR0eXBlID0gXCJudW1iZXJcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgbnVsbCBhbmQgTmFOIHZhbHVlcyBhcmVuJ3Qgc2V0ICgjNzExNilcblx0XHRcdGlmICggdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBudW1iZXIgd2FzIHBhc3NlZCBpbiwgYWRkIHRoZSB1bml0IChleGNlcHQgZm9yIGNlcnRhaW4gQ1NTIHByb3BlcnRpZXMpXG5cdFx0XHQvLyBUaGUgaXNDdXN0b21Qcm9wIGNoZWNrIGNhbiBiZSByZW1vdmVkIGluIGpRdWVyeSA0LjAgd2hlbiB3ZSBvbmx5IGF1dG8tYXBwZW5kXG5cdFx0XHQvLyBcInB4XCIgdG8gYSBmZXcgaGFyZGNvZGVkIHZhbHVlcy5cblx0XHRcdGlmICggdHlwZSA9PT0gXCJudW1iZXJcIiAmJiAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0XHR2YWx1ZSArPSByZXQgJiYgcmV0WyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBvcmlnTmFtZSBdID8gXCJcIiA6IFwicHhcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBiYWNrZ3JvdW5kLSogcHJvcHMgYWZmZWN0IG9yaWdpbmFsIGNsb25lJ3MgdmFsdWVzXG5cdFx0XHRpZiAoICFzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSAmJiB2YWx1ZSA9PT0gXCJcIiAmJiBuYW1lLmluZGV4T2YoIFwiYmFja2dyb3VuZFwiICkgPT09IDAgKSB7XG5cdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSBcImluaGVyaXRcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCwgdXNlIHRoYXQgdmFsdWUsIG90aGVyd2lzZSBqdXN0IHNldCB0aGUgc3BlY2lmaWVkIHZhbHVlXG5cdFx0XHRpZiAoICFob29rcyB8fCAhKCBcInNldFwiIGluIGhvb2tzICkgfHxcblx0XHRcdFx0KCB2YWx1ZSA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGlmICggaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0XHRcdHN0eWxlLnNldFByb3BlcnR5KCBuYW1lLCB2YWx1ZSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIG5vbi1jb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIGZhbHNlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdGhlcndpc2UganVzdCBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIHN0eWxlIG9iamVjdFxuXHRcdFx0cmV0dXJuIHN0eWxlWyBuYW1lIF07XG5cdFx0fVxuXHR9LFxuXG5cdGNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGV4dHJhLCBzdHlsZXMgKSB7XG5cdFx0dmFyIHZhbCwgbnVtLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0gY2FtZWxDYXNlKCBuYW1lICksXG5cdFx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUuIFdlIGRvbid0XG5cdFx0Ly8gd2FudCB0byBtb2RpZnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cblx0XHRpZiAoICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBUcnkgcHJlZml4ZWQgbmFtZSBmb2xsb3dlZCBieSB0aGUgdW5wcmVmaXhlZCBuYW1lXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyApIHtcblx0XHRcdHZhbCA9IGhvb2tzLmdldCggZWxlbSwgdHJ1ZSwgZXh0cmEgKTtcblx0XHR9XG5cblx0XHQvLyBPdGhlcndpc2UsIGlmIGEgd2F5IHRvIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZXhpc3RzLCB1c2UgdGhhdFxuXHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApO1xuXHRcdH1cblxuXHRcdC8vIENvbnZlcnQgXCJub3JtYWxcIiB0byBjb21wdXRlZCB2YWx1ZVxuXHRcdGlmICggdmFsID09PSBcIm5vcm1hbFwiICYmIG5hbWUgaW4gY3NzTm9ybWFsVHJhbnNmb3JtICkge1xuXHRcdFx0dmFsID0gY3NzTm9ybWFsVHJhbnNmb3JtWyBuYW1lIF07XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBudW1lcmljIGlmIGZvcmNlZCBvciBhIHF1YWxpZmllciB3YXMgcHJvdmlkZWQgYW5kIHZhbCBsb29rcyBudW1lcmljXG5cdFx0aWYgKCBleHRyYSA9PT0gXCJcIiB8fCBleHRyYSApIHtcblx0XHRcdG51bSA9IHBhcnNlRmxvYXQoIHZhbCApO1xuXHRcdFx0cmV0dXJuIGV4dHJhID09PSB0cnVlIHx8IGlzRmluaXRlKCBudW0gKSA/IG51bSB8fCAwIDogdmFsO1xuXHRcdH1cblxuXHRcdHJldHVybiB2YWw7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJoZWlnaHRcIiwgXCJ3aWR0aFwiIF0sIGZ1bmN0aW9uKCBpLCBkaW1lbnNpb24gKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgZGltZW5zaW9uIF0gPSB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQsIGV4dHJhICkge1xuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdFx0XHQvLyBDZXJ0YWluIGVsZW1lbnRzIGNhbiBoYXZlIGRpbWVuc2lvbiBpbmZvIGlmIHdlIGludmlzaWJseSBzaG93IHRoZW1cblx0XHRcdFx0Ly8gYnV0IGl0IG11c3QgaGF2ZSBhIGN1cnJlbnQgZGlzcGxheSBzdHlsZSB0aGF0IHdvdWxkIGJlbmVmaXRcblx0XHRcdFx0cmV0dXJuIHJkaXNwbGF5c3dhcC50ZXN0KCBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApICkgJiZcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA4K1xuXHRcdFx0XHRcdC8vIFRhYmxlIGNvbHVtbnMgaW4gU2FmYXJpIGhhdmUgbm9uLXplcm8gb2Zmc2V0V2lkdGggJiB6ZXJvXG5cdFx0XHRcdFx0Ly8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggdW5sZXNzIGRpc3BsYXkgaXMgY2hhbmdlZC5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHRcdFx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlXG5cdFx0XHRcdFx0Ly8gaW4gSUUgdGhyb3dzIGFuIGVycm9yLlxuXHRcdFx0XHRcdCggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggfHwgIWVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKSA/XG5cdFx0XHRcdFx0XHRzd2FwKCBlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKTtcblx0XHRcdFx0XHRcdH0gKSA6XG5cdFx0XHRcdFx0XHRnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBleHRyYSApIHtcblx0XHRcdHZhciBtYXRjaGVzLFxuXHRcdFx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblxuXHRcdFx0XHQvLyBPbmx5IHJlYWQgc3R5bGVzLnBvc2l0aW9uIGlmIHRoZSB0ZXN0IGhhcyBhIGNoYW5jZSB0byBmYWlsXG5cdFx0XHRcdC8vIHRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3cuXG5cdFx0XHRcdHNjcm9sbGJveFNpemVCdWdneSA9ICFzdXBwb3J0LnNjcm9sbGJveFNpemUoKSAmJlxuXHRcdFx0XHRcdHN0eWxlcy5wb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiLFxuXG5cdFx0XHRcdC8vIFRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3csIG9ubHkgZmV0Y2ggYm94U2l6aW5nIGlmIHdlIG5lZWQgaXQgKGdoLTM5OTEpXG5cdFx0XHRcdGJveFNpemluZ05lZWRlZCA9IHNjcm9sbGJveFNpemVCdWdneSB8fCBleHRyYSxcblx0XHRcdFx0aXNCb3JkZXJCb3ggPSBib3hTaXppbmdOZWVkZWQgJiZcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdFx0XHRzdWJ0cmFjdCA9IGV4dHJhID9cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRcdFx0XHRlbGVtLFxuXHRcdFx0XHRcdFx0ZGltZW5zaW9uLFxuXHRcdFx0XHRcdFx0ZXh0cmEsXG5cdFx0XHRcdFx0XHRpc0JvcmRlckJveCxcblx0XHRcdFx0XHRcdHN0eWxlc1xuXHRcdFx0XHRcdCkgOlxuXHRcdFx0XHRcdDA7XG5cblx0XHRcdC8vIEFjY291bnQgZm9yIHVucmVsaWFibGUgYm9yZGVyLWJveCBkaW1lbnNpb25zIGJ5IGNvbXBhcmluZyBvZmZzZXQqIHRvIGNvbXB1dGVkIGFuZFxuXHRcdFx0Ly8gZmFraW5nIGEgY29udGVudC1ib3ggdG8gZ2V0IGJvcmRlciBhbmQgcGFkZGluZyAoZ2gtMzY5OSlcblx0XHRcdGlmICggaXNCb3JkZXJCb3ggJiYgc2Nyb2xsYm94U2l6ZUJ1Z2d5ICkge1xuXHRcdFx0XHRzdWJ0cmFjdCAtPSBNYXRoLmNlaWwoXG5cdFx0XHRcdFx0ZWxlbVsgXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC1cblx0XHRcdFx0XHRwYXJzZUZsb2F0KCBzdHlsZXNbIGRpbWVuc2lvbiBdICkgLVxuXHRcdFx0XHRcdGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBcImJvcmRlclwiLCBmYWxzZSwgc3R5bGVzICkgLVxuXHRcdFx0XHRcdDAuNVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb252ZXJ0IHRvIHBpeGVscyBpZiB2YWx1ZSBhZGp1c3RtZW50IGlzIG5lZWRlZFxuXHRcdFx0aWYgKCBzdWJ0cmFjdCAmJiAoIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJlxuXHRcdFx0XHQoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSAhPT0gXCJweFwiICkge1xuXG5cdFx0XHRcdGVsZW0uc3R5bGVbIGRpbWVuc2lvbiBdID0gdmFsdWU7XG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5LmNzcyggZWxlbSwgZGltZW5zaW9uICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICk7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuY3NzSG9va3MubWFyZ2luTGVmdCA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5yZWxpYWJsZU1hcmdpbkxlZnQsXG5cdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0cmV0dXJuICggcGFyc2VGbG9hdCggY3VyQ1NTKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiApICkgfHxcblx0XHRcdFx0ZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC1cblx0XHRcdFx0XHRzd2FwKCBlbGVtLCB7IG1hcmdpbkxlZnQ6IDAgfSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuXHRcdFx0XHRcdH0gKVxuXHRcdFx0XHQpICsgXCJweFwiO1xuXHRcdH1cblx0fVxuKTtcblxuLy8gVGhlc2UgaG9va3MgYXJlIHVzZWQgYnkgYW5pbWF0ZSB0byBleHBhbmQgcHJvcGVydGllc1xualF1ZXJ5LmVhY2goIHtcblx0bWFyZ2luOiBcIlwiLFxuXHRwYWRkaW5nOiBcIlwiLFxuXHRib3JkZXI6IFwiV2lkdGhcIlxufSwgZnVuY3Rpb24oIHByZWZpeCwgc3VmZml4ICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdID0ge1xuXHRcdGV4cGFuZDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGkgPSAwLFxuXHRcdFx0XHRleHBhbmRlZCA9IHt9LFxuXG5cdFx0XHRcdC8vIEFzc3VtZXMgYSBzaW5nbGUgbnVtYmVyIGlmIG5vdCBhIHN0cmluZ1xuXHRcdFx0XHRwYXJ0cyA9IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlLnNwbGl0KCBcIiBcIiApIDogWyB2YWx1ZSBdO1xuXG5cdFx0XHRmb3IgKCA7IGkgPCA0OyBpKysgKSB7XG5cdFx0XHRcdGV4cGFuZGVkWyBwcmVmaXggKyBjc3NFeHBhbmRbIGkgXSArIHN1ZmZpeCBdID1cblx0XHRcdFx0XHRwYXJ0c1sgaSBdIHx8IHBhcnRzWyBpIC0gMiBdIHx8IHBhcnRzWyAwIF07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBleHBhbmRlZDtcblx0XHR9XG5cdH07XG5cblx0aWYgKCBwcmVmaXggIT09IFwibWFyZ2luXCIgKSB7XG5cdFx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXS5zZXQgPSBzZXRQb3NpdGl2ZU51bWJlcjtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGNzczogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHRcdHZhciBzdHlsZXMsIGxlbixcblx0XHRcdFx0bWFwID0ge30sXG5cdFx0XHRcdGkgPSAwO1xuXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIG5hbWUgKSApIHtcblx0XHRcdFx0c3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICk7XG5cdFx0XHRcdGxlbiA9IG5hbWUubGVuZ3RoO1xuXG5cdFx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRcdG1hcFsgbmFtZVsgaSBdIF0gPSBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lWyBpIF0sIGZhbHNlLCBzdHlsZXMgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBtYXA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lLCB2YWx1ZSApIDpcblx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgbmFtZSApO1xuXHRcdH0sIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9XG59ICk7XG5cblxuZnVuY3Rpb24gVHdlZW4oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICkge1xuXHRyZXR1cm4gbmV3IFR3ZWVuLnByb3RvdHlwZS5pbml0KCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApO1xufVxualF1ZXJ5LlR3ZWVuID0gVHdlZW47XG5cblR3ZWVuLnByb3RvdHlwZSA9IHtcblx0Y29uc3RydWN0b3I6IFR3ZWVuLFxuXHRpbml0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcsIHVuaXQgKSB7XG5cdFx0dGhpcy5lbGVtID0gZWxlbTtcblx0XHR0aGlzLnByb3AgPSBwcm9wO1xuXHRcdHRoaXMuZWFzaW5nID0gZWFzaW5nIHx8IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHQ7XG5cdFx0dGhpcy5vcHRpb25zID0gb3B0aW9ucztcblx0XHR0aGlzLnN0YXJ0ID0gdGhpcy5ub3cgPSB0aGlzLmN1cigpO1xuXHRcdHRoaXMuZW5kID0gZW5kO1xuXHRcdHRoaXMudW5pdCA9IHVuaXQgfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyBcIlwiIDogXCJweFwiICk7XG5cdH0sXG5cdGN1cjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnByb3AgXTtcblxuXHRcdHJldHVybiBob29rcyAmJiBob29rcy5nZXQgP1xuXHRcdFx0aG9va3MuZ2V0KCB0aGlzICkgOlxuXHRcdFx0VHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LmdldCggdGhpcyApO1xuXHR9LFxuXHRydW46IGZ1bmN0aW9uKCBwZXJjZW50ICkge1xuXHRcdHZhciBlYXNlZCxcblx0XHRcdGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnByb3AgXTtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLmR1cmF0aW9uICkge1xuXHRcdFx0dGhpcy5wb3MgPSBlYXNlZCA9IGpRdWVyeS5lYXNpbmdbIHRoaXMuZWFzaW5nIF0oXG5cdFx0XHRcdHBlcmNlbnQsIHRoaXMub3B0aW9ucy5kdXJhdGlvbiAqIHBlcmNlbnQsIDAsIDEsIHRoaXMub3B0aW9ucy5kdXJhdGlvblxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5wb3MgPSBlYXNlZCA9IHBlcmNlbnQ7XG5cdFx0fVxuXHRcdHRoaXMubm93ID0gKCB0aGlzLmVuZCAtIHRoaXMuc3RhcnQgKSAqIGVhc2VkICsgdGhpcy5zdGFydDtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLnN0ZXAgKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKCB0aGlzLmVsZW0sIHRoaXMubm93LCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBob29rcy5zZXQgKSB7XG5cdFx0XHRob29rcy5zZXQoIHRoaXMgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0VHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LnNldCggdGhpcyApO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufTtcblxuVHdlZW4ucHJvdG90eXBlLmluaXQucHJvdG90eXBlID0gVHdlZW4ucHJvdG90eXBlO1xuXG5Ud2Vlbi5wcm9wSG9va3MgPSB7XG5cdF9kZWZhdWx0OiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cdFx0XHR2YXIgcmVzdWx0O1xuXG5cdFx0XHQvLyBVc2UgYSBwcm9wZXJ0eSBvbiB0aGUgZWxlbWVudCBkaXJlY3RseSB3aGVuIGl0IGlzIG5vdCBhIERPTSBlbGVtZW50LFxuXHRcdFx0Ly8gb3Igd2hlbiB0aGVyZSBpcyBubyBtYXRjaGluZyBzdHlsZSBwcm9wZXJ0eSB0aGF0IGV4aXN0cy5cblx0XHRcdGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAhPT0gMSB8fFxuXHRcdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gIT0gbnVsbCAmJiB0d2Vlbi5lbGVtLnN0eWxlWyB0d2Vlbi5wcm9wIF0gPT0gbnVsbCApIHtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUGFzc2luZyBhbiBlbXB0eSBzdHJpbmcgYXMgYSAzcmQgcGFyYW1ldGVyIHRvIC5jc3Mgd2lsbCBhdXRvbWF0aWNhbGx5XG5cdFx0XHQvLyBhdHRlbXB0IGEgcGFyc2VGbG9hdCBhbmQgZmFsbGJhY2sgdG8gYSBzdHJpbmcgaWYgdGhlIHBhcnNlIGZhaWxzLlxuXHRcdFx0Ly8gU2ltcGxlIHZhbHVlcyBzdWNoIGFzIFwiMTBweFwiIGFyZSBwYXJzZWQgdG8gRmxvYXQ7XG5cdFx0XHQvLyBjb21wbGV4IHZhbHVlcyBzdWNoIGFzIFwicm90YXRlKDFyYWQpXCIgYXJlIHJldHVybmVkIGFzLWlzLlxuXHRcdFx0cmVzdWx0ID0galF1ZXJ5LmNzcyggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgXCJcIiApO1xuXG5cdFx0XHQvLyBFbXB0eSBzdHJpbmdzLCBudWxsLCB1bmRlZmluZWQgYW5kIFwiYXV0b1wiIGFyZSBjb252ZXJ0ZWQgdG8gMC5cblx0XHRcdHJldHVybiAhcmVzdWx0IHx8IHJlc3VsdCA9PT0gXCJhdXRvXCIgPyAwIDogcmVzdWx0O1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cblx0XHRcdC8vIFVzZSBzdGVwIGhvb2sgZm9yIGJhY2sgY29tcGF0LlxuXHRcdFx0Ly8gVXNlIGNzc0hvb2sgaWYgaXRzIHRoZXJlLlxuXHRcdFx0Ly8gVXNlIC5zdHlsZSBpZiBhdmFpbGFibGUgYW5kIHVzZSBwbGFpbiBwcm9wZXJ0aWVzIHdoZXJlIGF2YWlsYWJsZS5cblx0XHRcdGlmICggalF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSApIHtcblx0XHRcdFx0alF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSggdHdlZW4gKTtcblx0XHRcdH0gZWxzZSBpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKFxuXHRcdFx0XHRcdGpRdWVyeS5jc3NIb29rc1sgdHdlZW4ucHJvcCBdIHx8XG5cdFx0XHRcdFx0dHdlZW4uZWxlbS5zdHlsZVsgZmluYWxQcm9wTmFtZSggdHdlZW4ucHJvcCApIF0gIT0gbnVsbCApICkge1xuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIHR3ZWVuLm5vdyArIHR3ZWVuLnVuaXQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG4vLyBQYW5pYyBiYXNlZCBhcHByb2FjaCB0byBzZXR0aW5nIHRoaW5ncyBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblR3ZWVuLnByb3BIb29rcy5zY3JvbGxUb3AgPSBUd2Vlbi5wcm9wSG9va3Muc2Nyb2xsTGVmdCA9IHtcblx0c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cdFx0aWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICYmIHR3ZWVuLmVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdztcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5lYXNpbmcgPSB7XG5cdGxpbmVhcjogZnVuY3Rpb24oIHAgKSB7XG5cdFx0cmV0dXJuIHA7XG5cdH0sXG5cdHN3aW5nOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gMC41IC0gTWF0aC5jb3MoIHAgKiBNYXRoLlBJICkgLyAyO1xuXHR9LFxuXHRfZGVmYXVsdDogXCJzd2luZ1wiXG59O1xuXG5qUXVlcnkuZnggPSBUd2Vlbi5wcm90b3R5cGUuaW5pdDtcblxuLy8gQmFjayBjb21wYXQgPDEuOCBleHRlbnNpb24gcG9pbnRcbmpRdWVyeS5meC5zdGVwID0ge307XG5cblxuXG5cbnZhclxuXHRmeE5vdywgaW5Qcm9ncmVzcyxcblx0cmZ4dHlwZXMgPSAvXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sXG5cdHJydW4gPSAvcXVldWVIb29rcyQvO1xuXG5mdW5jdGlvbiBzY2hlZHVsZSgpIHtcblx0aWYgKCBpblByb2dyZXNzICkge1xuXHRcdGlmICggZG9jdW1lbnQuaGlkZGVuID09PSBmYWxzZSAmJiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lICkge1xuXHRcdFx0d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSggc2NoZWR1bGUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0d2luZG93LnNldFRpbWVvdXQoIHNjaGVkdWxlLCBqUXVlcnkuZnguaW50ZXJ2YWwgKTtcblx0XHR9XG5cblx0XHRqUXVlcnkuZngudGljaygpO1xuXHR9XG59XG5cbi8vIEFuaW1hdGlvbnMgY3JlYXRlZCBzeW5jaHJvbm91c2x5IHdpbGwgcnVuIHN5bmNocm9ub3VzbHlcbmZ1bmN0aW9uIGNyZWF0ZUZ4Tm93KCkge1xuXHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0ZnhOb3cgPSB1bmRlZmluZWQ7XG5cdH0gKTtcblx0cmV0dXJuICggZnhOb3cgPSBEYXRlLm5vdygpICk7XG59XG5cbi8vIEdlbmVyYXRlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIGEgc3RhbmRhcmQgYW5pbWF0aW9uXG5mdW5jdGlvbiBnZW5GeCggdHlwZSwgaW5jbHVkZVdpZHRoICkge1xuXHR2YXIgd2hpY2gsXG5cdFx0aSA9IDAsXG5cdFx0YXR0cnMgPSB7IGhlaWdodDogdHlwZSB9O1xuXG5cdC8vIElmIHdlIGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMSB0byBkbyBhbGwgY3NzRXhwYW5kIHZhbHVlcyxcblx0Ly8gb3RoZXJ3aXNlIHN0ZXAgdmFsdWUgaXMgMiB0byBza2lwIG92ZXIgTGVmdCBhbmQgUmlnaHRcblx0aW5jbHVkZVdpZHRoID0gaW5jbHVkZVdpZHRoID8gMSA6IDA7XG5cdGZvciAoIDsgaSA8IDQ7IGkgKz0gMiAtIGluY2x1ZGVXaWR0aCApIHtcblx0XHR3aGljaCA9IGNzc0V4cGFuZFsgaSBdO1xuXHRcdGF0dHJzWyBcIm1hcmdpblwiICsgd2hpY2ggXSA9IGF0dHJzWyBcInBhZGRpbmdcIiArIHdoaWNoIF0gPSB0eXBlO1xuXHR9XG5cblx0aWYgKCBpbmNsdWRlV2lkdGggKSB7XG5cdFx0YXR0cnMub3BhY2l0eSA9IGF0dHJzLndpZHRoID0gdHlwZTtcblx0fVxuXG5cdHJldHVybiBhdHRycztcbn1cblxuZnVuY3Rpb24gY3JlYXRlVHdlZW4oIHZhbHVlLCBwcm9wLCBhbmltYXRpb24gKSB7XG5cdHZhciB0d2Vlbixcblx0XHRjb2xsZWN0aW9uID0gKCBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXSApLmNvbmNhdCggQW5pbWF0aW9uLnR3ZWVuZXJzWyBcIipcIiBdICksXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoO1xuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGlmICggKCB0d2VlbiA9IGNvbGxlY3Rpb25bIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBwcm9wLCB2YWx1ZSApICkgKSB7XG5cblx0XHRcdC8vIFdlJ3JlIGRvbmUgd2l0aCB0aGlzIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRQcmVmaWx0ZXIoIGVsZW0sIHByb3BzLCBvcHRzICkge1xuXHR2YXIgcHJvcCwgdmFsdWUsIHRvZ2dsZSwgaG9va3MsIG9sZGZpcmUsIHByb3BUd2VlbiwgcmVzdG9yZURpc3BsYXksIGRpc3BsYXksXG5cdFx0aXNCb3ggPSBcIndpZHRoXCIgaW4gcHJvcHMgfHwgXCJoZWlnaHRcIiBpbiBwcm9wcyxcblx0XHRhbmltID0gdGhpcyxcblx0XHRvcmlnID0ge30sXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlLFxuXHRcdGhpZGRlbiA9IGVsZW0ubm9kZVR5cGUgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICksXG5cdFx0ZGF0YVNob3cgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZnhzaG93XCIgKTtcblxuXHQvLyBRdWV1ZS1za2lwcGluZyBhbmltYXRpb25zIGhpamFjayB0aGUgZnggaG9va3Ncblx0aWYgKCAhb3B0cy5xdWV1ZSApIHtcblx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgXCJmeFwiICk7XG5cdFx0aWYgKCBob29rcy51bnF1ZXVlZCA9PSBudWxsICkge1xuXHRcdFx0aG9va3MudW5xdWV1ZWQgPSAwO1xuXHRcdFx0b2xkZmlyZSA9IGhvb2tzLmVtcHR5LmZpcmU7XG5cdFx0XHRob29rcy5lbXB0eS5maXJlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggIWhvb2tzLnVucXVldWVkICkge1xuXHRcdFx0XHRcdG9sZGZpcmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aG9va3MudW5xdWV1ZWQrKztcblxuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5zdXJlIHRoZSBjb21wbGV0ZSBoYW5kbGVyIGlzIGNhbGxlZCBiZWZvcmUgdGhpcyBjb21wbGV0ZXNcblx0XHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0aG9va3MudW5xdWV1ZWQtLTtcblx0XHRcdFx0aWYgKCAhalF1ZXJ5LnF1ZXVlKCBlbGVtLCBcImZ4XCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdFx0aG9va3MuZW1wdHkuZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gRGV0ZWN0IHNob3cvaGlkZSBhbmltYXRpb25zXG5cdGZvciAoIHByb3AgaW4gcHJvcHMgKSB7XG5cdFx0dmFsdWUgPSBwcm9wc1sgcHJvcCBdO1xuXHRcdGlmICggcmZ4dHlwZXMudGVzdCggdmFsdWUgKSApIHtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgcHJvcCBdO1xuXHRcdFx0dG9nZ2xlID0gdG9nZ2xlIHx8IHZhbHVlID09PSBcInRvZ2dsZVwiO1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gKCBoaWRkZW4gPyBcImhpZGVcIiA6IFwic2hvd1wiICkgKSB7XG5cblx0XHRcdFx0Ly8gUHJldGVuZCB0byBiZSBoaWRkZW4gaWYgdGhpcyBpcyBhIFwic2hvd1wiIGFuZFxuXHRcdFx0XHQvLyB0aGVyZSBpcyBzdGlsbCBkYXRhIGZyb20gYSBzdG9wcGVkIHNob3cvaGlkZVxuXHRcdFx0XHRpZiAoIHZhbHVlID09PSBcInNob3dcIiAmJiBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0aGlkZGVuID0gdHJ1ZTtcblxuXHRcdFx0XHQvLyBJZ25vcmUgYWxsIG90aGVyIG5vLW9wIHNob3cvaGlkZSBkYXRhXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG9yaWdbIHByb3AgXSA9IGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gfHwgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQmFpbCBvdXQgaWYgdGhpcyBpcyBhIG5vLW9wIGxpa2UgLmhpZGUoKS5oaWRlKClcblx0cHJvcFR3ZWVuID0gIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wcyApO1xuXHRpZiAoICFwcm9wVHdlZW4gJiYgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIG9yaWcgKSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBSZXN0cmljdCBcIm92ZXJmbG93XCIgYW5kIFwiZGlzcGxheVwiIHN0eWxlcyBkdXJpbmcgYm94IGFuaW1hdGlvbnNcblx0aWYgKCBpc0JveCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEsIEVkZ2UgMTIgLSAxNVxuXHRcdC8vIFJlY29yZCBhbGwgMyBvdmVyZmxvdyBhdHRyaWJ1dGVzIGJlY2F1c2UgSUUgZG9lcyBub3QgaW5mZXIgdGhlIHNob3J0aGFuZFxuXHRcdC8vIGZyb20gaWRlbnRpY2FsbHktdmFsdWVkIG92ZXJmbG93WCBhbmQgb3ZlcmZsb3dZIGFuZCBFZGdlIGp1c3QgbWlycm9yc1xuXHRcdC8vIHRoZSBvdmVyZmxvd1ggdmFsdWUgdGhlcmUuXG5cdFx0b3B0cy5vdmVyZmxvdyA9IFsgc3R5bGUub3ZlcmZsb3csIHN0eWxlLm92ZXJmbG93WCwgc3R5bGUub3ZlcmZsb3dZIF07XG5cblx0XHQvLyBJZGVudGlmeSBhIGRpc3BsYXkgdHlwZSwgcHJlZmVycmluZyBvbGQgc2hvdy9oaWRlIGRhdGEgb3ZlciB0aGUgQ1NTIGNhc2NhZGVcblx0XHRyZXN0b3JlRGlzcGxheSA9IGRhdGFTaG93ICYmIGRhdGFTaG93LmRpc3BsYXk7XG5cdFx0aWYgKCByZXN0b3JlRGlzcGxheSA9PSBudWxsICkge1xuXHRcdFx0cmVzdG9yZURpc3BsYXkgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0fVxuXHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ICkge1xuXHRcdFx0XHRkaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEdldCBub25lbXB0eSB2YWx1ZShzKSBieSB0ZW1wb3JhcmlseSBmb3JjaW5nIHZpc2liaWxpdHlcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7XG5cdFx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5IHx8IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQW5pbWF0ZSBpbmxpbmUgZWxlbWVudHMgYXMgaW5saW5lLWJsb2NrXG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcImlubGluZVwiIHx8IGRpc3BsYXkgPT09IFwiaW5saW5lLWJsb2NrXCIgJiYgcmVzdG9yZURpc3BsYXkgIT0gbnVsbCApIHtcblx0XHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJmbG9hdFwiICkgPT09IFwibm9uZVwiICkge1xuXG5cdFx0XHRcdC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGRpc3BsYXkgdmFsdWUgYXQgdGhlIGVuZCBvZiBwdXJlIHNob3cvaGlkZSBhbmltYXRpb25zXG5cdFx0XHRcdGlmICggIXByb3BUd2VlbiApIHtcblx0XHRcdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0c3R5bGUuZGlzcGxheSA9IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRkaXNwbGF5ID0gc3R5bGUuZGlzcGxheTtcblx0XHRcdFx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZGlzcGxheSA9PT0gXCJub25lXCIgPyBcIlwiIDogZGlzcGxheTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0c3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKCBvcHRzLm92ZXJmbG93ICkge1xuXHRcdHN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcblx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cdFx0XHRzdHlsZS5vdmVyZmxvdyA9IG9wdHMub3ZlcmZsb3dbIDAgXTtcblx0XHRcdHN0eWxlLm92ZXJmbG93WCA9IG9wdHMub3ZlcmZsb3dbIDEgXTtcblx0XHRcdHN0eWxlLm92ZXJmbG93WSA9IG9wdHMub3ZlcmZsb3dbIDIgXTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBJbXBsZW1lbnQgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0cHJvcFR3ZWVuID0gZmFsc2U7XG5cdGZvciAoIHByb3AgaW4gb3JpZyApIHtcblxuXHRcdC8vIEdlbmVyYWwgc2hvdy9oaWRlIHNldHVwIGZvciB0aGlzIGVsZW1lbnQgYW5pbWF0aW9uXG5cdFx0aWYgKCAhcHJvcFR3ZWVuICkge1xuXHRcdFx0aWYgKCBkYXRhU2hvdyApIHtcblx0XHRcdFx0aWYgKCBcImhpZGRlblwiIGluIGRhdGFTaG93ICkge1xuXHRcdFx0XHRcdGhpZGRlbiA9IGRhdGFTaG93LmhpZGRlbjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGF0YVNob3cgPSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIFwiZnhzaG93XCIsIHsgZGlzcGxheTogcmVzdG9yZURpc3BsYXkgfSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdG9yZSBoaWRkZW4vdmlzaWJsZSBmb3IgdG9nZ2xlIHNvIGAuc3RvcCgpLnRvZ2dsZSgpYCBcInJldmVyc2VzXCJcblx0XHRcdGlmICggdG9nZ2xlICkge1xuXHRcdFx0XHRkYXRhU2hvdy5oaWRkZW4gPSAhaGlkZGVuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTaG93IGVsZW1lbnRzIGJlZm9yZSBhbmltYXRpbmcgdGhlbVxuXHRcdFx0aWYgKCBoaWRkZW4gKSB7XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSwgdHJ1ZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1bmMgKi9cblxuXHRcdFx0YW5pbS5kb25lKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1sb29wLWZ1bmMgKi9cblxuXHRcdFx0XHQvLyBUaGUgZmluYWwgc3RlcCBvZiBhIFwiaGlkZVwiIGFuaW1hdGlvbiBpcyBhY3R1YWxseSBoaWRpbmcgdGhlIGVsZW1lbnRcblx0XHRcdFx0aWYgKCAhaGlkZGVuICkge1xuXHRcdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgXCJmeHNob3dcIiApO1xuXHRcdFx0XHRmb3IgKCBwcm9wIGluIG9yaWcgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBvcmlnWyBwcm9wIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdC8vIFBlci1wcm9wZXJ0eSBzZXR1cFxuXHRcdHByb3BUd2VlbiA9IGNyZWF0ZVR3ZWVuKCBoaWRkZW4gPyBkYXRhU2hvd1sgcHJvcCBdIDogMCwgcHJvcCwgYW5pbSApO1xuXHRcdGlmICggISggcHJvcCBpbiBkYXRhU2hvdyApICkge1xuXHRcdFx0ZGF0YVNob3dbIHByb3AgXSA9IHByb3BUd2Vlbi5zdGFydDtcblx0XHRcdGlmICggaGlkZGVuICkge1xuXHRcdFx0XHRwcm9wVHdlZW4uZW5kID0gcHJvcFR3ZWVuLnN0YXJ0O1xuXHRcdFx0XHRwcm9wVHdlZW4uc3RhcnQgPSAwO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBwcm9wRmlsdGVyKCBwcm9wcywgc3BlY2lhbEVhc2luZyApIHtcblx0dmFyIGluZGV4LCBuYW1lLCBlYXNpbmcsIHZhbHVlLCBob29rcztcblxuXHQvLyBjYW1lbENhc2UsIHNwZWNpYWxFYXNpbmcgYW5kIGV4cGFuZCBjc3NIb29rIHBhc3Ncblx0Zm9yICggaW5kZXggaW4gcHJvcHMgKSB7XG5cdFx0bmFtZSA9IGNhbWVsQ2FzZSggaW5kZXggKTtcblx0XHRlYXNpbmcgPSBzcGVjaWFsRWFzaW5nWyBuYW1lIF07XG5cdFx0dmFsdWUgPSBwcm9wc1sgaW5kZXggXTtcblx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRlYXNpbmcgPSB2YWx1ZVsgMSBdO1xuXHRcdFx0dmFsdWUgPSBwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyAwIF07XG5cdFx0fVxuXG5cdFx0aWYgKCBpbmRleCAhPT0gbmFtZSApIHtcblx0XHRcdHByb3BzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgaW5kZXggXTtcblx0XHR9XG5cblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdO1xuXHRcdGlmICggaG9va3MgJiYgXCJleHBhbmRcIiBpbiBob29rcyApIHtcblx0XHRcdHZhbHVlID0gaG9va3MuZXhwYW5kKCB2YWx1ZSApO1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBuYW1lIF07XG5cblx0XHRcdC8vIE5vdCBxdWl0ZSAkLmV4dGVuZCwgdGhpcyB3b24ndCBvdmVyd3JpdGUgZXhpc3Rpbmcga2V5cy5cblx0XHRcdC8vIFJldXNpbmcgJ2luZGV4JyBiZWNhdXNlIHdlIGhhdmUgdGhlIGNvcnJlY3QgXCJuYW1lXCJcblx0XHRcdGZvciAoIGluZGV4IGluIHZhbHVlICkge1xuXHRcdFx0XHRpZiAoICEoIGluZGV4IGluIHByb3BzICkgKSB7XG5cdFx0XHRcdFx0cHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgaW5kZXggXTtcblx0XHRcdFx0XHRzcGVjaWFsRWFzaW5nWyBpbmRleCBdID0gZWFzaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNwZWNpYWxFYXNpbmdbIG5hbWUgXSA9IGVhc2luZztcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gQW5pbWF0aW9uKCBlbGVtLCBwcm9wZXJ0aWVzLCBvcHRpb25zICkge1xuXHR2YXIgcmVzdWx0LFxuXHRcdHN0b3BwZWQsXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzLmxlbmd0aCxcblx0XHRkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIERvbid0IG1hdGNoIGVsZW0gaW4gdGhlIDphbmltYXRlZCBzZWxlY3RvclxuXHRcdFx0ZGVsZXRlIHRpY2suZWxlbTtcblx0XHR9ICksXG5cdFx0dGljayA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBzdG9wcGVkICkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHR2YXIgY3VycmVudFRpbWUgPSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLFxuXHRcdFx0XHRyZW1haW5pbmcgPSBNYXRoLm1heCggMCwgYW5pbWF0aW9uLnN0YXJ0VGltZSArIGFuaW1hdGlvbi5kdXJhdGlvbiAtIGN1cnJlbnRUaW1lICksXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCAyLjMgb25seVxuXHRcdFx0XHQvLyBBcmNoYWljIGNyYXNoIGJ1ZyB3b24ndCBhbGxvdyB1cyB0byB1c2UgYDEgLSAoIDAuNSB8fCAwIClgICgjMTI0OTcpXG5cdFx0XHRcdHRlbXAgPSByZW1haW5pbmcgLyBhbmltYXRpb24uZHVyYXRpb24gfHwgMCxcblx0XHRcdFx0cGVyY2VudCA9IDEgLSB0ZW1wLFxuXHRcdFx0XHRpbmRleCA9IDAsXG5cdFx0XHRcdGxlbmd0aCA9IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoO1xuXG5cdFx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggcGVyY2VudCApO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgcGVyY2VudCwgcmVtYWluaW5nIF0gKTtcblxuXHRcdFx0Ly8gSWYgdGhlcmUncyBtb3JlIHRvIGRvLCB5aWVsZFxuXHRcdFx0aWYgKCBwZXJjZW50IDwgMSAmJiBsZW5ndGggKSB7XG5cdFx0XHRcdHJldHVybiByZW1haW5pbmc7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHRoaXMgd2FzIGFuIGVtcHR5IGFuaW1hdGlvbiwgc3ludGhlc2l6ZSBhIGZpbmFsIHByb2dyZXNzIG5vdGlmaWNhdGlvblxuXHRcdFx0aWYgKCAhbGVuZ3RoICkge1xuXHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlc29sdmUgdGhlIGFuaW1hdGlvbiBhbmQgcmVwb3J0IGl0cyBjb25jbHVzaW9uXG5cdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24gXSApO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cdFx0YW5pbWF0aW9uID0gZGVmZXJyZWQucHJvbWlzZSgge1xuXHRcdFx0ZWxlbTogZWxlbSxcblx0XHRcdHByb3BzOiBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcGVydGllcyApLFxuXHRcdFx0b3B0czogalF1ZXJ5LmV4dGVuZCggdHJ1ZSwge1xuXHRcdFx0XHRzcGVjaWFsRWFzaW5nOiB7fSxcblx0XHRcdFx0ZWFzaW5nOiBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0XG5cdFx0XHR9LCBvcHRpb25zICksXG5cdFx0XHRvcmlnaW5hbFByb3BlcnRpZXM6IHByb3BlcnRpZXMsXG5cdFx0XHRvcmlnaW5hbE9wdGlvbnM6IG9wdGlvbnMsXG5cdFx0XHRzdGFydFRpbWU6IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksXG5cdFx0XHRkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbixcblx0XHRcdHR3ZWVuczogW10sXG5cdFx0XHRjcmVhdGVUd2VlbjogZnVuY3Rpb24oIHByb3AsIGVuZCApIHtcblx0XHRcdFx0dmFyIHR3ZWVuID0galF1ZXJ5LlR3ZWVuKCBlbGVtLCBhbmltYXRpb24ub3B0cywgcHJvcCwgZW5kLFxuXHRcdFx0XHRcdFx0YW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFuaW1hdGlvbi5vcHRzLmVhc2luZyApO1xuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zLnB1c2goIHR3ZWVuICk7XG5cdFx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHRcdH0sXG5cdFx0XHRzdG9wOiBmdW5jdGlvbiggZ290b0VuZCApIHtcblx0XHRcdFx0dmFyIGluZGV4ID0gMCxcblxuXHRcdFx0XHRcdC8vIElmIHdlIGFyZSBnb2luZyB0byB0aGUgZW5kLCB3ZSB3YW50IHRvIHJ1biBhbGwgdGhlIHR3ZWVuc1xuXHRcdFx0XHRcdC8vIG90aGVyd2lzZSB3ZSBza2lwIHRoaXMgcGFydFxuXHRcdFx0XHRcdGxlbmd0aCA9IGdvdG9FbmQgPyBhbmltYXRpb24udHdlZW5zLmxlbmd0aCA6IDA7XG5cdFx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0XHRzdG9wcGVkID0gdHJ1ZTtcblx0XHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggMSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVzb2x2ZSB3aGVuIHdlIHBsYXllZCB0aGUgbGFzdCBmcmFtZTsgb3RoZXJ3aXNlLCByZWplY3Rcblx0XHRcdFx0aWYgKCBnb3RvRW5kICkge1xuXHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblx0XHR9ICksXG5cdFx0cHJvcHMgPSBhbmltYXRpb24ucHJvcHM7XG5cblx0cHJvcEZpbHRlciggcHJvcHMsIGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmcgKTtcblxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdHJlc3VsdCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgZWxlbSwgcHJvcHMsIGFuaW1hdGlvbi5vcHRzICk7XG5cdFx0aWYgKCByZXN1bHQgKSB7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHJlc3VsdC5zdG9wICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggYW5pbWF0aW9uLmVsZW0sIGFuaW1hdGlvbi5vcHRzLnF1ZXVlICkuc3RvcCA9XG5cdFx0XHRcdFx0cmVzdWx0LnN0b3AuYmluZCggcmVzdWx0ICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fVxuXG5cdGpRdWVyeS5tYXAoIHByb3BzLCBjcmVhdGVUd2VlbiwgYW5pbWF0aW9uICk7XG5cblx0aWYgKCBpc0Z1bmN0aW9uKCBhbmltYXRpb24ub3B0cy5zdGFydCApICkge1xuXHRcdGFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApO1xuXHR9XG5cblx0Ly8gQXR0YWNoIGNhbGxiYWNrcyBmcm9tIG9wdGlvbnNcblx0YW5pbWF0aW9uXG5cdFx0LnByb2dyZXNzKCBhbmltYXRpb24ub3B0cy5wcm9ncmVzcyApXG5cdFx0LmRvbmUoIGFuaW1hdGlvbi5vcHRzLmRvbmUsIGFuaW1hdGlvbi5vcHRzLmNvbXBsZXRlIClcblx0XHQuZmFpbCggYW5pbWF0aW9uLm9wdHMuZmFpbCApXG5cdFx0LmFsd2F5cyggYW5pbWF0aW9uLm9wdHMuYWx3YXlzICk7XG5cblx0alF1ZXJ5LmZ4LnRpbWVyKFxuXHRcdGpRdWVyeS5leHRlbmQoIHRpY2ssIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRhbmltOiBhbmltYXRpb24sXG5cdFx0XHRxdWV1ZTogYW5pbWF0aW9uLm9wdHMucXVldWVcblx0XHR9IClcblx0KTtcblxuXHRyZXR1cm4gYW5pbWF0aW9uO1xufVxuXG5qUXVlcnkuQW5pbWF0aW9uID0galF1ZXJ5LmV4dGVuZCggQW5pbWF0aW9uLCB7XG5cblx0dHdlZW5lcnM6IHtcblx0XHRcIipcIjogWyBmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgdHdlZW4gPSB0aGlzLmNyZWF0ZVR3ZWVuKCBwcm9wLCB2YWx1ZSApO1xuXHRcdFx0YWRqdXN0Q1NTKCB0d2Vlbi5lbGVtLCBwcm9wLCByY3NzTnVtLmV4ZWMoIHZhbHVlICksIHR3ZWVuICk7XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fSBdXG5cdH0sXG5cblx0dHdlZW5lcjogZnVuY3Rpb24oIHByb3BzLCBjYWxsYmFjayApIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIHByb3BzICkgKSB7XG5cdFx0XHRjYWxsYmFjayA9IHByb3BzO1xuXHRcdFx0cHJvcHMgPSBbIFwiKlwiIF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHByb3BzID0gcHJvcHMubWF0Y2goIHJub3RodG1sd2hpdGUgKTtcblx0XHR9XG5cblx0XHR2YXIgcHJvcCxcblx0XHRcdGluZGV4ID0gMCxcblx0XHRcdGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRwcm9wID0gcHJvcHNbIGluZGV4IF07XG5cdFx0XHRBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSA9IEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0udW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH0sXG5cblx0cHJlZmlsdGVyczogWyBkZWZhdWx0UHJlZmlsdGVyIF0sXG5cblx0cHJlZmlsdGVyOiBmdW5jdGlvbiggY2FsbGJhY2ssIHByZXBlbmQgKSB7XG5cdFx0aWYgKCBwcmVwZW5kICkge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMudW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMucHVzaCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LnNwZWVkID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGZuICkge1xuXHR2YXIgb3B0ID0gc3BlZWQgJiYgdHlwZW9mIHNwZWVkID09PSBcIm9iamVjdFwiID8galF1ZXJ5LmV4dGVuZCgge30sIHNwZWVkICkgOiB7XG5cdFx0Y29tcGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHxcblx0XHRcdGlzRnVuY3Rpb24oIHNwZWVkICkgJiYgc3BlZWQsXG5cdFx0ZHVyYXRpb246IHNwZWVkLFxuXHRcdGVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhaXNGdW5jdGlvbiggZWFzaW5nICkgJiYgZWFzaW5nXG5cdH07XG5cblx0Ly8gR28gdG8gdGhlIGVuZCBzdGF0ZSBpZiBmeCBhcmUgb2ZmXG5cdGlmICggalF1ZXJ5LmZ4Lm9mZiApIHtcblx0XHRvcHQuZHVyYXRpb24gPSAwO1xuXG5cdH0gZWxzZSB7XG5cdFx0aWYgKCB0eXBlb2Ygb3B0LmR1cmF0aW9uICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0aWYgKCBvcHQuZHVyYXRpb24gaW4galF1ZXJ5LmZ4LnNwZWVkcyApIHtcblx0XHRcdFx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkc1sgb3B0LmR1cmF0aW9uIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIG9wdC5xdWV1ZSAtIHRydWUvdW5kZWZpbmVkL251bGwgLT4gXCJmeFwiXG5cdGlmICggb3B0LnF1ZXVlID09IG51bGwgfHwgb3B0LnF1ZXVlID09PSB0cnVlICkge1xuXHRcdG9wdC5xdWV1ZSA9IFwiZnhcIjtcblx0fVxuXG5cdC8vIFF1ZXVlaW5nXG5cdG9wdC5vbGQgPSBvcHQuY29tcGxldGU7XG5cblx0b3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHQub2xkICkgKSB7XG5cdFx0XHRvcHQub2xkLmNhbGwoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdC5xdWV1ZSApIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCBvcHQucXVldWUgKTtcblx0XHR9XG5cdH07XG5cblx0cmV0dXJuIG9wdDtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmFkZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXG5cdFx0Ly8gU2hvdyBhbnkgaGlkZGVuIGVsZW1lbnRzIGFmdGVyIHNldHRpbmcgb3BhY2l0eSB0byAwXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBpc0hpZGRlbldpdGhpblRyZWUgKS5jc3MoIFwib3BhY2l0eVwiLCAwICkuc2hvdygpXG5cblx0XHRcdC8vIEFuaW1hdGUgdG8gdGhlIHZhbHVlIHNwZWNpZmllZFxuXHRcdFx0LmVuZCgpLmFuaW1hdGUoIHsgb3BhY2l0eTogdG8gfSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fSxcblx0YW5pbWF0ZTogZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHZhciBlbXB0eSA9IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wICksXG5cdFx0XHRvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICksXG5cdFx0XHRkb0FuaW1hdGlvbiA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28gcGVyLXByb3BlcnR5IGVhc2luZyB3b24ndCBiZSBsb3N0XG5cdFx0XHRcdHZhciBhbmltID0gQW5pbWF0aW9uKCB0aGlzLCBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcCApLCBvcHRhbGwgKTtcblxuXHRcdFx0XHQvLyBFbXB0eSBhbmltYXRpb25zLCBvciBmaW5pc2hpbmcgcmVzb2x2ZXMgaW1tZWRpYXRlbHlcblx0XHRcdFx0aWYgKCBlbXB0eSB8fCBkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZmluaXNoXCIgKSApIHtcblx0XHRcdFx0XHRhbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGRvQW5pbWF0aW9uLmZpbmlzaCA9IGRvQW5pbWF0aW9uO1xuXG5cdFx0cmV0dXJuIGVtcHR5IHx8IG9wdGFsbC5xdWV1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0dGhpcy5lYWNoKCBkb0FuaW1hdGlvbiApIDpcblx0XHRcdHRoaXMucXVldWUoIG9wdGFsbC5xdWV1ZSwgZG9BbmltYXRpb24gKTtcblx0fSxcblx0c3RvcDogZnVuY3Rpb24oIHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7XG5cdFx0dmFyIHN0b3BRdWV1ZSA9IGZ1bmN0aW9uKCBob29rcyApIHtcblx0XHRcdHZhciBzdG9wID0gaG9va3Muc3RvcDtcblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0c3RvcCggZ290b0VuZCApO1xuXHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Z290b0VuZCA9IGNsZWFyUXVldWU7XG5cdFx0XHRjbGVhclF1ZXVlID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggY2xlYXJRdWV1ZSAmJiB0eXBlICE9PSBmYWxzZSApIHtcblx0XHRcdHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGRlcXVldWUgPSB0cnVlLFxuXHRcdFx0XHRpbmRleCA9IHR5cGUgIT0gbnVsbCAmJiB0eXBlICsgXCJxdWV1ZUhvb2tzXCIsXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKTtcblxuXHRcdFx0aWYgKCBpbmRleCApIHtcblx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCApIHtcblx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yICggaW5kZXggaW4gZGF0YSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICYmIHJydW4udGVzdCggaW5kZXggKSApIHtcblx0XHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmXG5cdFx0XHRcdFx0KCB0eXBlID09IG51bGwgfHwgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkgKSB7XG5cblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCBnb3RvRW5kICk7XG5cdFx0XHRcdFx0ZGVxdWV1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhcnQgdGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0IGZvcmNlZC5cblx0XHRcdC8vIFRpbWVycyBjdXJyZW50bHkgd2lsbCBjYWxsIHRoZWlyIGNvbXBsZXRlIGNhbGxiYWNrcywgd2hpY2hcblx0XHRcdC8vIHdpbGwgZGVxdWV1ZSBidXQgb25seSBpZiB0aGV5IHdlcmUgZ290b0VuZC5cblx0XHRcdGlmICggZGVxdWV1ZSB8fCAhZ290b0VuZCApIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cdGZpbmlzaDogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0aWYgKCB0eXBlICE9PSBmYWxzZSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaW5kZXgsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKSxcblx0XHRcdFx0cXVldWUgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZVwiIF0sXG5cdFx0XHRcdGhvb2tzID0gZGF0YVsgdHlwZSArIFwicXVldWVIb29rc1wiIF0sXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGxlbmd0aCA9IHF1ZXVlID8gcXVldWUubGVuZ3RoIDogMDtcblxuXHRcdFx0Ly8gRW5hYmxlIGZpbmlzaGluZyBmbGFnIG9uIHByaXZhdGUgZGF0YVxuXHRcdFx0ZGF0YS5maW5pc2ggPSB0cnVlO1xuXG5cdFx0XHQvLyBFbXB0eSB0aGUgcXVldWUgZmlyc3Rcblx0XHRcdGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgW10gKTtcblxuXHRcdFx0aWYgKCBob29rcyAmJiBob29rcy5zdG9wICkge1xuXHRcdFx0XHRob29rcy5zdG9wLmNhbGwoIHRoaXMsIHRydWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFjdGl2ZSBhbmltYXRpb25zLCBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiYgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkge1xuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhbmltYXRpb25zIGluIHRoZSBvbGQgcXVldWUgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRpZiAoIHF1ZXVlWyBpbmRleCBdICYmIHF1ZXVlWyBpbmRleCBdLmZpbmlzaCApIHtcblx0XHRcdFx0XHRxdWV1ZVsgaW5kZXggXS5maW5pc2guY2FsbCggdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFR1cm4gb2ZmIGZpbmlzaGluZyBmbGFnXG5cdFx0XHRkZWxldGUgZGF0YS5maW5pc2g7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwidG9nZ2xlXCIsIFwic2hvd1wiLCBcImhpZGVcIiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHtcblx0dmFyIGNzc0ZuID0galF1ZXJ5LmZuWyBuYW1lIF07XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBzcGVlZCA9PSBudWxsIHx8IHR5cGVvZiBzcGVlZCA9PT0gXCJib29sZWFuXCIgP1xuXHRcdFx0Y3NzRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApIDpcblx0XHRcdHRoaXMuYW5pbWF0ZSggZ2VuRngoIG5hbWUsIHRydWUgKSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxuLy8gR2VuZXJhdGUgc2hvcnRjdXRzIGZvciBjdXN0b20gYW5pbWF0aW9uc1xualF1ZXJ5LmVhY2goIHtcblx0c2xpZGVEb3duOiBnZW5GeCggXCJzaG93XCIgKSxcblx0c2xpZGVVcDogZ2VuRngoIFwiaGlkZVwiICksXG5cdHNsaWRlVG9nZ2xlOiBnZW5GeCggXCJ0b2dnbGVcIiApLFxuXHRmYWRlSW46IHsgb3BhY2l0eTogXCJzaG93XCIgfSxcblx0ZmFkZU91dDogeyBvcGFjaXR5OiBcImhpZGVcIiB9LFxuXHRmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6IFwidG9nZ2xlXCIgfVxufSwgZnVuY3Rpb24oIG5hbWUsIHByb3BzICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9wcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LnRpbWVycyA9IFtdO1xualF1ZXJ5LmZ4LnRpY2sgPSBmdW5jdGlvbigpIHtcblx0dmFyIHRpbWVyLFxuXHRcdGkgPSAwLFxuXHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnM7XG5cblx0ZnhOb3cgPSBEYXRlLm5vdygpO1xuXG5cdGZvciAoIDsgaSA8IHRpbWVycy5sZW5ndGg7IGkrKyApIHtcblx0XHR0aW1lciA9IHRpbWVyc1sgaSBdO1xuXG5cdFx0Ly8gUnVuIHRoZSB0aW1lciBhbmQgc2FmZWx5IHJlbW92ZSBpdCB3aGVuIGRvbmUgKGFsbG93aW5nIGZvciBleHRlcm5hbCByZW1vdmFsKVxuXHRcdGlmICggIXRpbWVyKCkgJiYgdGltZXJzWyBpIF0gPT09IHRpbWVyICkge1xuXHRcdFx0dGltZXJzLnNwbGljZSggaS0tLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCAhdGltZXJzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkuZnguc3RvcCgpO1xuXHR9XG5cdGZ4Tm93ID0gdW5kZWZpbmVkO1xufTtcblxualF1ZXJ5LmZ4LnRpbWVyID0gZnVuY3Rpb24oIHRpbWVyICkge1xuXHRqUXVlcnkudGltZXJzLnB1c2goIHRpbWVyICk7XG5cdGpRdWVyeS5meC5zdGFydCgpO1xufTtcblxualF1ZXJ5LmZ4LmludGVydmFsID0gMTM7XG5qUXVlcnkuZnguc3RhcnQgPSBmdW5jdGlvbigpIHtcblx0aWYgKCBpblByb2dyZXNzICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGluUHJvZ3Jlc3MgPSB0cnVlO1xuXHRzY2hlZHVsZSgpO1xufTtcblxualF1ZXJ5LmZ4LnN0b3AgPSBmdW5jdGlvbigpIHtcblx0aW5Qcm9ncmVzcyA9IG51bGw7XG59O1xuXG5qUXVlcnkuZnguc3BlZWRzID0ge1xuXHRzbG93OiA2MDAsXG5cdGZhc3Q6IDIwMCxcblxuXHQvLyBEZWZhdWx0IHNwZWVkXG5cdF9kZWZhdWx0OiA0MDBcbn07XG5cblxuLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBwZXJtaXNzaW9uLlxuLy8gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTAwMzI0MDE0NzQ3L2h0dHA6Ly9ibGluZHNpZ25hbHMuY29tL2luZGV4LnBocC8yMDA5LzA3L2pxdWVyeS1kZWxheS9cbmpRdWVyeS5mbi5kZWxheSA9IGZ1bmN0aW9uKCB0aW1lLCB0eXBlICkge1xuXHR0aW1lID0galF1ZXJ5LmZ4ID8galF1ZXJ5LmZ4LnNwZWVkc1sgdGltZSBdIHx8IHRpbWUgOiB0aW1lO1xuXHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHtcblx0XHR2YXIgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCBuZXh0LCB0aW1lICk7XG5cdFx0aG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdH07XG5cdH0gKTtcbn07XG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICksXG5cdFx0c2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJzZWxlY3RcIiApLFxuXHRcdG9wdCA9IHNlbGVjdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvcHRpb25cIiApICk7XG5cblx0aW5wdXQudHlwZSA9IFwiY2hlY2tib3hcIjtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4zIG9ubHlcblx0Ly8gRGVmYXVsdCB2YWx1ZSBmb3IgYSBjaGVja2JveCBzaG91bGQgYmUgXCJvblwiXG5cdHN1cHBvcnQuY2hlY2tPbiA9IGlucHV0LnZhbHVlICE9PSBcIlwiO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBNdXN0IGFjY2VzcyBzZWxlY3RlZEluZGV4IHRvIG1ha2UgZGVmYXVsdCBvcHRpb25zIHNlbGVjdFxuXHRzdXBwb3J0Lm9wdFNlbGVjdGVkID0gb3B0LnNlbGVjdGVkO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBBbiBpbnB1dCBsb3NlcyBpdHMgdmFsdWUgYWZ0ZXIgYmVjb21pbmcgYSByYWRpb1xuXHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRpbnB1dC52YWx1ZSA9IFwidFwiO1xuXHRpbnB1dC50eXBlID0gXCJyYWRpb1wiO1xuXHRzdXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gXCJ0XCI7XG59ICkoKTtcblxuXG52YXIgYm9vbEhvb2ssXG5cdGF0dHJIYW5kbGUgPSBqUXVlcnkuZXhwci5hdHRySGFuZGxlO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkuYXR0ciwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgYXR0cmlidXRlcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRyaWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgPT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXR0cmlidXRlIGhvb2tzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBsb3dlcmNhc2UgdmVyc2lvblxuXHRcdC8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25lIGlzIGRlZmluZWRcblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblx0XHRcdGhvb2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0KCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnRlc3QoIG5hbWUgKSA/IGJvb2xIb29rIDogdW5kZWZpbmVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gbnVsbCApIHtcblx0XHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyBcIlwiICk7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0Ly8gTm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgcmV0dXJuIG51bGwsIHdlIG5vcm1hbGl6ZSB0byB1bmRlZmluZWRcblx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7XG5cdH0sXG5cblx0YXR0ckhvb2tzOiB7XG5cdFx0dHlwZToge1xuXHRcdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggIXN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gXCJyYWRpb1wiICYmXG5cdFx0XHRcdFx0bm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICkge1xuXHRcdFx0XHRcdHZhciB2YWwgPSBlbGVtLnZhbHVlO1xuXHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgdmFsdWUgKTtcblx0XHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRcdGVsZW0udmFsdWUgPSB2YWw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0dmFyIG5hbWUsXG5cdFx0XHRpID0gMCxcblxuXHRcdFx0Ly8gQXR0cmlidXRlIG5hbWVzIGNhbiBjb250YWluIG5vbi1IVE1MIHdoaXRlc3BhY2UgY2hhcmFjdGVyc1xuXHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjYXR0cmlidXRlcy0yXG5cdFx0XHRhdHRyTmFtZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xuXG5cdFx0aWYgKCBhdHRyTmFtZXMgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdHdoaWxlICggKCBuYW1lID0gYXR0ck5hbWVzWyBpKysgXSApICkge1xuXHRcdFx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIb29rcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzXG5ib29sSG9vayA9IHtcblx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7XG5cdFx0aWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2Vcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lICk7XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lO1xuXHR9XG59O1xuXG5qUXVlcnkuZWFjaCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goIC9cXHcrL2cgKSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cdHZhciBnZXR0ZXIgPSBhdHRySGFuZGxlWyBuYW1lIF0gfHwgalF1ZXJ5LmZpbmQuYXR0cjtcblxuXHRhdHRySGFuZGxlWyBuYW1lIF0gPSBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0dmFyIHJldCwgaGFuZGxlLFxuXHRcdFx0bG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdGlmICggIWlzWE1MICkge1xuXG5cdFx0XHQvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wIGJ5IHRlbXBvcmFyaWx5IHJlbW92aW5nIHRoaXMgZnVuY3Rpb24gZnJvbSB0aGUgZ2V0dGVyXG5cdFx0XHRoYW5kbGUgPSBhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF07XG5cdFx0XHRhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF0gPSByZXQ7XG5cdFx0XHRyZXQgPSBnZXR0ZXIoIGVsZW0sIG5hbWUsIGlzWE1MICkgIT0gbnVsbCA/XG5cdFx0XHRcdGxvd2VyY2FzZU5hbWUgOlxuXHRcdFx0XHRudWxsO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gaGFuZGxlO1xuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xufSApO1xuXG5cblxuXG52YXIgcmZvY3VzYWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJjbGlja2FibGUgPSAvXig/OmF8YXJlYSkkL2k7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5wcm9wLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGRlbGV0ZSB0aGlzWyBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWUgXTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHRwcm9wOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0dmFyIHJldCwgaG9va3MsXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHQvLyBEb24ndCBnZXQvc2V0IHByb3BlcnRpZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXG5cdFx0aWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gRml4IG5hbWUgYW5kIGF0dGFjaCBob29rc1xuXHRcdFx0bmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTtcblx0XHRcdGhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFtZSBdO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAoIGVsZW1bIG5hbWUgXSA9IHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVsZW1bIG5hbWUgXTtcblx0fSxcblxuXHRwcm9wSG9va3M6IHtcblx0XHR0YWJJbmRleDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdFx0XHRcdC8vIGVsZW0udGFiSW5kZXggZG9lc24ndCBhbHdheXMgcmV0dXJuIHRoZVxuXHRcdFx0XHQvLyBjb3JyZWN0IHZhbHVlIHdoZW4gaXQgaGFzbid0IGJlZW4gZXhwbGljaXRseSBzZXRcblx0XHRcdFx0Ly8gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTQxMTE2MjMzMzQ3L2h0dHA6Ly9mbHVpZHByb2plY3Qub3JnL2Jsb2cvMjAwOC8wMS8wOS9nZXR0aW5nLXNldHRpbmctYW5kLXJlbW92aW5nLXRhYmluZGV4LXZhbHVlcy13aXRoLWphdmFzY3JpcHQvXG5cdFx0XHRcdC8vIFVzZSBwcm9wZXIgYXR0cmlidXRlIHJldHJpZXZhbCgjMTIwNzIpXG5cdFx0XHRcdHZhciB0YWJpbmRleCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIFwidGFiaW5kZXhcIiApO1xuXG5cdFx0XHRcdGlmICggdGFiaW5kZXggKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlSW50KCB0YWJpbmRleCwgMTAgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRyZm9jdXNhYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSB8fFxuXHRcdFx0XHRcdHJjbGlja2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmXG5cdFx0XHRcdFx0ZWxlbS5ocmVmXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRwcm9wRml4OiB7XG5cdFx0XCJmb3JcIjogXCJodG1sRm9yXCIsXG5cdFx0XCJjbGFzc1wiOiBcImNsYXNzTmFtZVwiXG5cdH1cbn0gKTtcblxuLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG4vLyBBY2Nlc3NpbmcgdGhlIHNlbGVjdGVkSW5kZXggcHJvcGVydHlcbi8vIGZvcmNlcyB0aGUgYnJvd3NlciB0byByZXNwZWN0IHNldHRpbmcgc2VsZWN0ZWRcbi8vIG9uIHRoZSBvcHRpb25cbi8vIFRoZSBnZXR0ZXIgZW5zdXJlcyBhIGRlZmF1bHQgb3B0aW9uIGlzIHNlbGVjdGVkXG4vLyB3aGVuIGluIGFuIG9wdGdyb3VwXG4vLyBlc2xpbnQgcnVsZSBcIm5vLXVudXNlZC1leHByZXNzaW9uc1wiIGlzIGRpc2FibGVkIGZvciB0aGlzIGNvZGVcbi8vIHNpbmNlIGl0IGNvbnNpZGVycyBzdWNoIGFjY2Vzc2lvbnMgbm9vcFxuaWYgKCAhc3VwcG9ydC5vcHRTZWxlY3RlZCApIHtcblx0alF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiBcIm9mZlwiICovXG5cblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIHBhcmVudCAmJiBwYXJlbnQucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0LyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogXCJvZmZcIiAqL1xuXG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdHBhcmVudC5zZWxlY3RlZEluZGV4O1xuXG5cdFx0XHRcdGlmICggcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxualF1ZXJ5LmVhY2goIFtcblx0XCJ0YWJJbmRleFwiLFxuXHRcInJlYWRPbmx5XCIsXG5cdFwibWF4TGVuZ3RoXCIsXG5cdFwiY2VsbFNwYWNpbmdcIixcblx0XCJjZWxsUGFkZGluZ1wiLFxuXHRcInJvd1NwYW5cIixcblx0XCJjb2xTcGFuXCIsXG5cdFwidXNlTWFwXCIsXG5cdFwiZnJhbWVCb3JkZXJcIixcblx0XCJjb250ZW50RWRpdGFibGVcIlxuXSwgZnVuY3Rpb24oKSB7XG5cdGpRdWVyeS5wcm9wRml4WyB0aGlzLnRvTG93ZXJDYXNlKCkgXSA9IHRoaXM7XG59ICk7XG5cblxuXG5cblx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2UgYWNjb3JkaW5nIHRvIEhUTUwgc3BlY1xuXHQvLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLWFzY2lpLXdoaXRlc3BhY2Vcblx0ZnVuY3Rpb24gc3RyaXBBbmRDb2xsYXBzZSggdmFsdWUgKSB7XG5cdFx0dmFyIHRva2VucyA9IHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cdFx0cmV0dXJuIHRva2Vucy5qb2luKCBcIiBcIiApO1xuXHR9XG5cblxuZnVuY3Rpb24gZ2V0Q2xhc3MoIGVsZW0gKSB7XG5cdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSAmJiBlbGVtLmdldEF0dHJpYnV0ZSggXCJjbGFzc1wiICkgfHwgXCJcIjtcbn1cblxuZnVuY3Rpb24gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICkge1xuXHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXHR9XG5cdHJldHVybiBbXTtcbn1cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRhZGRDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBjbGFzc2VzLCBlbGVtLCBjdXIsIGN1clZhbHVlLCBjbGF6eiwgaiwgZmluYWxWYWx1ZSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmFkZENsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRjbGFzc2VzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGNsYXNzZXMubGVuZ3RoICkge1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCBlbGVtICk7XG5cdFx0XHRcdGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKCBjbGF6eiA9IGNsYXNzZXNbIGorKyBdICkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIgKSA8IDAgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciArPSBjbGF6eiArIFwiIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsXG5cdFx0XHRpID0gMDtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5yZW1vdmVDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB0aGlzLmF0dHIoIFwiY2xhc3NcIiwgXCJcIiApO1xuXHRcdH1cblxuXHRcdGNsYXNzZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggY2xhc3Nlcy5sZW5ndGggKSB7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGN1clZhbHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTtcblxuXHRcdFx0XHQvLyBUaGlzIGV4cHJlc3Npb24gaXMgaGVyZSBmb3IgYmV0dGVyIGNvbXByZXNzaWJpbGl0eSAoc2VlIGFkZENsYXNzKVxuXHRcdFx0XHRjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRqID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgKmFsbCogaW5zdGFuY2VzXG5cdFx0XHRcdFx0XHR3aGlsZSAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgPSBjdXIucmVwbGFjZSggXCIgXCIgKyBjbGF6eiArIFwiIFwiLCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSwgc3RhdGVWYWwgKSB7XG5cdFx0dmFyIHR5cGUgPSB0eXBlb2YgdmFsdWUsXG5cdFx0XHRpc1ZhbGlkVmFsdWUgPSB0eXBlID09PSBcInN0cmluZ1wiIHx8IEFycmF5LmlzQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIHR5cGVvZiBzdGF0ZVZhbCA9PT0gXCJib29sZWFuXCIgJiYgaXNWYWxpZFZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlVmFsID8gdGhpcy5hZGRDbGFzcyggdmFsdWUgKSA6IHRoaXMucmVtb3ZlQ2xhc3MoIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKFxuXHRcdFx0XHRcdHZhbHVlLmNhbGwoIHRoaXMsIGksIGdldENsYXNzKCB0aGlzICksIHN0YXRlVmFsICksXG5cdFx0XHRcdFx0c3RhdGVWYWxcblx0XHRcdFx0KTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBjbGFzc05hbWUsIGksIHNlbGYsIGNsYXNzTmFtZXM7XG5cblx0XHRcdGlmICggaXNWYWxpZFZhbHVlICkge1xuXG5cdFx0XHRcdC8vIFRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzXG5cdFx0XHRcdGkgPSAwO1xuXHRcdFx0XHRzZWxmID0galF1ZXJ5KCB0aGlzICk7XG5cdFx0XHRcdGNsYXNzTmFtZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdFx0XHR3aGlsZSAoICggY2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHRcdC8vIENoZWNrIGVhY2ggY2xhc3NOYW1lIGdpdmVuLCBzcGFjZSBzZXBhcmF0ZWQgbGlzdFxuXHRcdFx0XHRcdGlmICggc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICkgKSB7XG5cdFx0XHRcdFx0XHRzZWxmLnJlbW92ZUNsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2VsZi5hZGRDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdC8vIFRvZ2dsZSB3aG9sZSBjbGFzcyBuYW1lXG5cdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0XHRjbGFzc05hbWUgPSBnZXRDbGFzcyggdGhpcyApO1xuXHRcdFx0XHRpZiAoIGNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGNsYXNzTmFtZSBpZiBzZXRcblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIFwiX19jbGFzc05hbWVfX1wiLCBjbGFzc05hbWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoZSBlbGVtZW50IGhhcyBhIGNsYXNzIG5hbWUgb3IgaWYgd2UncmUgcGFzc2VkIGBmYWxzZWAsXG5cdFx0XHRcdC8vIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBjbGFzc25hbWUgKGlmIHRoZXJlIHdhcyBvbmUsIHRoZSBhYm92ZSBzYXZlZCBpdCkuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBicmluZyBiYWNrIHdoYXRldmVyIHdhcyBwcmV2aW91c2x5IHNhdmVkIChpZiBhbnl0aGluZyksXG5cdFx0XHRcdC8vIGZhbGxpbmcgYmFjayB0byB0aGUgZW1wdHkgc3RyaW5nIGlmIG5vdGhpbmcgd2FzIHN0b3JlZC5cblx0XHRcdFx0aWYgKCB0aGlzLnNldEF0dHJpYnV0ZSApIHtcblx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lIHx8IHZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRcdFx0XHRcIlwiIDpcblx0XHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIgKSB8fCBcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRoYXNDbGFzczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBjbGFzc05hbWUsIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGNsYXNzTmFtZSA9IFwiIFwiICsgc2VsZWN0b3IgKyBcIiBcIjtcblx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0KCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGdldENsYXNzKCBlbGVtICkgKSArIFwiIFwiICkuaW5kZXhPZiggY2xhc3NOYW1lICkgPiAtMSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIHJyZXR1cm4gPSAvXFxyL2c7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0dmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGhvb2tzLCByZXQsIHZhbHVlSXNGdW5jdGlvbixcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF07XG5cblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHxcblx0XHRcdFx0XHRqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHRcdGlmICggaG9va3MgJiZcblx0XHRcdFx0XHRcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIFwidmFsdWVcIiApICkgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0ID0gZWxlbS52YWx1ZTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgbW9zdCBjb21tb24gc3RyaW5nIGNhc2VzXG5cdFx0XHRcdGlmICggdHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0LnJlcGxhY2UoIHJyZXR1cm4sIFwiXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEhhbmRsZSBjYXNlcyB3aGVyZSB2YWx1ZSBpcyBudWxsL3VuZGVmIG9yIG51bWJlclxuXHRcdFx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyBcIlwiIDogcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0dmFyIHZhbDtcblxuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlICE9PSAxICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsdWVJc0Z1bmN0aW9uICkge1xuXHRcdFx0XHR2YWwgPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBqUXVlcnkoIHRoaXMgKS52YWwoKSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFsID0gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzIFwiXCI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmdcblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHZhbCA9IFwiXCI7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdHZhbCArPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0dmFsID0galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKyBcIlwiO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyB0aGlzLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHQvLyBJZiBzZXQgcmV0dXJucyB1bmRlZmluZWQsIGZhbGwgYmFjayB0byBub3JtYWwgc2V0dGluZ1xuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCBcInZhbHVlXCIgKSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHR0aGlzLnZhbHVlID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHZhbEhvb2tzOiB7XG5cdFx0b3B0aW9uOiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHRcdHZhciB2YWwgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInZhbHVlXCIgKTtcblx0XHRcdFx0cmV0dXJuIHZhbCAhPSBudWxsID9cblx0XHRcdFx0XHR2YWwgOlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExIG9ubHlcblx0XHRcdFx0XHQvLyBvcHRpb24udGV4dCB0aHJvd3MgZXhjZXB0aW9ucyAoIzE0Njg2LCAjMTQ4NTgpXG5cdFx0XHRcdFx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2Vcblx0XHRcdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2Utd2hpdGVzcGFjZVxuXHRcdFx0XHRcdHN0cmlwQW5kQ29sbGFwc2UoIGpRdWVyeS50ZXh0KCBlbGVtICkgKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHNlbGVjdDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHZhbHVlLCBvcHRpb24sIGksXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHRpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCxcblx0XHRcdFx0XHRvbmUgPSBlbGVtLnR5cGUgPT09IFwic2VsZWN0LW9uZVwiLFxuXHRcdFx0XHRcdHZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSxcblx0XHRcdFx0XHRtYXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHRpZiAoIGluZGV4IDwgMCApIHtcblx0XHRcdFx0XHRpID0gbWF4O1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aSA9IG9uZSA/IGluZGV4IDogMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnNcblx0XHRcdFx0Zm9yICggOyBpIDwgbWF4OyBpKysgKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHQvLyBJRTgtOSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICgjMjU1MSlcblx0XHRcdFx0XHRpZiAoICggb3B0aW9uLnNlbGVjdGVkIHx8IGkgPT09IGluZGV4ICkgJiZcblxuXHRcdFx0XHRcdFx0XHQvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHRcdFx0XHRcdCFvcHRpb24uZGlzYWJsZWQgJiZcblx0XHRcdFx0XHRcdFx0KCAhb3B0aW9uLnBhcmVudE5vZGUuZGlzYWJsZWQgfHxcblx0XHRcdFx0XHRcdFx0XHQhbm9kZU5hbWUoIG9wdGlvbi5wYXJlbnROb2RlLCBcIm9wdGdyb3VwXCIgKSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7XG5cblx0XHRcdFx0XHRcdC8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzXG5cdFx0XHRcdFx0XHRpZiAoIG9uZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBNdWx0aS1TZWxlY3RzIHJldHVybiBhbiBhcnJheVxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH0sXG5cblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgb3B0aW9uU2V0LCBvcHRpb24sXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHR2YWx1ZXMgPSBqUXVlcnkubWFrZUFycmF5KCB2YWx1ZSApLFxuXHRcdFx0XHRcdGkgPSBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRvcHRpb24gPSBvcHRpb25zWyBpIF07XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXG5cdFx0XHRcdFx0aWYgKCBvcHRpb24uc2VsZWN0ZWQgPVxuXHRcdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGpRdWVyeS52YWxIb29rcy5vcHRpb24uZ2V0KCBvcHRpb24gKSwgdmFsdWVzICkgPiAtMVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0b3B0aW9uU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbmQtYXNzaWduICovXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGb3JjZSBicm93c2VycyB0byBiZWhhdmUgY29uc2lzdGVudGx5IHdoZW4gbm9uLW1hdGNoaW5nIHZhbHVlIGlzIHNldFxuXHRcdFx0XHRpZiAoICFvcHRpb25TZXQgKSB7XG5cdFx0XHRcdFx0ZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gUmFkaW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXJcbmpRdWVyeS5lYWNoKCBbIFwicmFkaW9cIiwgXCJjaGVja2JveFwiIF0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHtcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS5jaGVja2VkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeSggZWxlbSApLnZhbCgpLCB2YWx1ZSApID4gLTEgKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGlmICggIXN1cHBvcnQuY2hlY2tPbiApIHtcblx0XHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXS5nZXQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiICkgPT09IG51bGwgPyBcIm9uXCIgOiBlbGVtLnZhbHVlO1xuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUmV0dXJuIGpRdWVyeSBmb3IgYXR0cmlidXRlcy1vbmx5IGluY2x1c2lvblxuXG5cbnN1cHBvcnQuZm9jdXNpbiA9IFwib25mb2N1c2luXCIgaW4gd2luZG93O1xuXG5cbnZhciByZm9jdXNNb3JwaCA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxcblx0c3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgPSBmdW5jdGlvbiggZSApIHtcblx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9O1xuXG5qUXVlcnkuZXh0ZW5kKCBqUXVlcnkuZXZlbnQsIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9ubHlIYW5kbGVycyApIHtcblxuXHRcdHZhciBpLCBjdXIsIHRtcCwgYnViYmxlVHlwZSwgb250eXBlLCBoYW5kbGUsIHNwZWNpYWwsIGxhc3RFbGVtZW50LFxuXHRcdFx0ZXZlbnRQYXRoID0gWyBlbGVtIHx8IGRvY3VtZW50IF0sXG5cdFx0XHR0eXBlID0gaGFzT3duLmNhbGwoIGV2ZW50LCBcInR5cGVcIiApID8gZXZlbnQudHlwZSA6IGV2ZW50LFxuXHRcdFx0bmFtZXNwYWNlcyA9IGhhc093bi5jYWxsKCBldmVudCwgXCJuYW1lc3BhY2VcIiApID8gZXZlbnQubmFtZXNwYWNlLnNwbGl0KCBcIi5cIiApIDogW107XG5cblx0XHRjdXIgPSBsYXN0RWxlbWVudCA9IHRtcCA9IGVsZW0gPSBlbGVtIHx8IGRvY3VtZW50O1xuXG5cdFx0Ly8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBmb2N1cy9ibHVyIG1vcnBocyB0byBmb2N1c2luL291dDsgZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3dcblx0XHRpZiAoIHJmb2N1c01vcnBoLnRlc3QoIHR5cGUgKyBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlLmluZGV4T2YoIFwiLlwiICkgPiAtMSApIHtcblxuXHRcdFx0Ly8gTmFtZXNwYWNlZCB0cmlnZ2VyOyBjcmVhdGUgYSByZWdleHAgdG8gbWF0Y2ggZXZlbnQgdHlwZSBpbiBoYW5kbGUoKVxuXHRcdFx0bmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoIFwiLlwiICk7XG5cdFx0XHR0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpO1xuXHRcdFx0bmFtZXNwYWNlcy5zb3J0KCk7XG5cdFx0fVxuXHRcdG9udHlwZSA9IHR5cGUuaW5kZXhPZiggXCI6XCIgKSA8IDAgJiYgXCJvblwiICsgdHlwZTtcblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhIGpRdWVyeS5FdmVudCBvYmplY3QsIE9iamVjdCwgb3IganVzdCBhbiBldmVudCB0eXBlIHN0cmluZ1xuXHRcdGV2ZW50ID0gZXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0ZXZlbnQgOlxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCggdHlwZSwgdHlwZW9mIGV2ZW50ID09PSBcIm9iamVjdFwiICYmIGV2ZW50ICk7XG5cblx0XHQvLyBUcmlnZ2VyIGJpdG1hc2s6ICYgMSBmb3IgbmF0aXZlIGhhbmRsZXJzOyAmIDIgZm9yIGpRdWVyeSAoYWx3YXlzIHRydWUpXG5cdFx0ZXZlbnQuaXNUcmlnZ2VyID0gb25seUhhbmRsZXJzID8gMiA6IDM7XG5cdFx0ZXZlbnQubmFtZXNwYWNlID0gbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApO1xuXHRcdGV2ZW50LnJuYW1lc3BhY2UgPSBldmVudC5uYW1lc3BhY2UgP1xuXHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICkgOlxuXHRcdFx0bnVsbDtcblxuXHRcdC8vIENsZWFuIHVwIHRoZSBldmVudCBpbiBjYXNlIGl0IGlzIGJlaW5nIHJldXNlZFxuXHRcdGV2ZW50LnJlc3VsdCA9IHVuZGVmaW5lZDtcblx0XHRpZiAoICFldmVudC50YXJnZXQgKSB7XG5cdFx0XHRldmVudC50YXJnZXQgPSBlbGVtO1xuXHRcdH1cblxuXHRcdC8vIENsb25lIGFueSBpbmNvbWluZyBkYXRhIGFuZCBwcmVwZW5kIHRoZSBldmVudCwgY3JlYXRpbmcgdGhlIGhhbmRsZXIgYXJnIGxpc3Rcblx0XHRkYXRhID0gZGF0YSA9PSBudWxsID9cblx0XHRcdFsgZXZlbnQgXSA6XG5cdFx0XHRqUXVlcnkubWFrZUFycmF5KCBkYXRhLCBbIGV2ZW50IF0gKTtcblxuXHRcdC8vIEFsbG93IHNwZWNpYWwgZXZlbnRzIHRvIGRyYXcgb3V0c2lkZSB0aGUgbGluZXNcblx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgc3BlY2lhbC50cmlnZ2VyICYmIHNwZWNpYWwudHJpZ2dlci5hcHBseSggZWxlbSwgZGF0YSApID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgZXZlbnQgcHJvcGFnYXRpb24gcGF0aCBpbiBhZHZhbmNlLCBwZXIgVzNDIGV2ZW50cyBzcGVjICgjOTk1MSlcblx0XHQvLyBCdWJibGUgdXAgdG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93OyB3YXRjaCBmb3IgYSBnbG9iYWwgb3duZXJEb2N1bWVudCB2YXIgKCM5NzI0KVxuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhc3BlY2lhbC5ub0J1YmJsZSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0YnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7XG5cdFx0XHRpZiAoICFyZm9jdXNNb3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApICkge1xuXHRcdFx0XHRjdXIgPSBjdXIucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGZvciAoIDsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIGN1ciApO1xuXHRcdFx0XHR0bXAgPSBjdXI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKVxuXHRcdFx0aWYgKCB0bXAgPT09ICggZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50ICkgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCB0bXAuZGVmYXVsdFZpZXcgfHwgdG1wLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGV2ZW50UGF0aFsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGxhc3RFbGVtZW50ID0gY3VyO1xuXHRcdFx0ZXZlbnQudHlwZSA9IGkgPiAxID9cblx0XHRcdFx0YnViYmxlVHlwZSA6XG5cdFx0XHRcdHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTtcblxuXHRcdFx0Ly8galF1ZXJ5IGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9ICggZGF0YVByaXYuZ2V0KCBjdXIsIFwiZXZlbnRzXCIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gJiZcblx0XHRcdFx0ZGF0YVByaXYuZ2V0KCBjdXIsIFwiaGFuZGxlXCIgKTtcblx0XHRcdGlmICggaGFuZGxlICkge1xuXHRcdFx0XHRoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBOYXRpdmUgaGFuZGxlclxuXHRcdFx0aGFuZGxlID0gb250eXBlICYmIGN1clsgb250eXBlIF07XG5cdFx0XHRpZiAoIGhhbmRsZSAmJiBoYW5kbGUuYXBwbHkgJiYgYWNjZXB0RGF0YSggY3VyICkgKSB7XG5cdFx0XHRcdGV2ZW50LnJlc3VsdCA9IGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGV2ZW50LnR5cGUgPSB0eXBlO1xuXG5cdFx0Ly8gSWYgbm9ib2R5IHByZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRvIGl0IG5vd1xuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7XG5cblx0XHRcdGlmICggKCAhc3BlY2lhbC5fZGVmYXVsdCB8fFxuXHRcdFx0XHRzcGVjaWFsLl9kZWZhdWx0LmFwcGx5KCBldmVudFBhdGgucG9wKCksIGRhdGEgKSA9PT0gZmFsc2UgKSAmJlxuXHRcdFx0XHRhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cblx0XHRcdFx0Ly8gQ2FsbCBhIG5hdGl2ZSBET00gbWV0aG9kIG9uIHRoZSB0YXJnZXQgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBldmVudC5cblx0XHRcdFx0Ly8gRG9uJ3QgZG8gZGVmYXVsdCBhY3Rpb25zIG9uIHdpbmRvdywgdGhhdCdzIHdoZXJlIGdsb2JhbCB2YXJpYWJsZXMgYmUgKCM2MTcwKVxuXHRcdFx0XHRpZiAoIG9udHlwZSAmJiBpc0Z1bmN0aW9uKCBlbGVtWyB0eXBlIF0gKSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vIERvbid0IHJlLXRyaWdnZXIgYW4gb25GT08gZXZlbnQgd2hlbiB3ZSBjYWxsIGl0cyBGT08oKSBtZXRob2Rcblx0XHRcdFx0XHR0bXAgPSBlbGVtWyBvbnR5cGUgXTtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSBudWxsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFByZXZlbnQgcmUtdHJpZ2dlcmluZyBvZiB0aGUgc2FtZSBldmVudCwgc2luY2Ugd2UgYWxyZWFkeSBidWJibGVkIGl0IGFib3ZlXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHR5cGU7XG5cblx0XHRcdFx0XHRpZiAoIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRcdFx0XHRsYXN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBzdG9wUHJvcGFnYXRpb25DYWxsYmFjayApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW1bIHR5cGUgXSgpO1xuXG5cdFx0XHRcdFx0aWYgKCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0XHRcdFx0bGFzdEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IHRtcDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdC8vIFBpZ2d5YmFjayBvbiBhIGRvbm9yIGV2ZW50IHRvIHNpbXVsYXRlIGEgZGlmZmVyZW50IG9uZVxuXHQvLyBVc2VkIG9ubHkgZm9yIGBmb2N1cyhpbiB8IG91dClgIGV2ZW50c1xuXHRzaW11bGF0ZTogZnVuY3Rpb24oIHR5cGUsIGVsZW0sIGV2ZW50ICkge1xuXHRcdHZhciBlID0galF1ZXJ5LmV4dGVuZChcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoKSxcblx0XHRcdGV2ZW50LFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRpc1NpbXVsYXRlZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxlbSApO1xuXHR9XG5cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdHRyaWdnZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTtcblx0XHR9ICk7XG5cdH0sXG5cdHRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXTtcblx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIGVsZW0sIHRydWUgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxuXG4vLyBTdXBwb3J0OiBGaXJlZm94IDw9NDRcbi8vIEZpcmVmb3ggZG9lc24ndCBoYXZlIGZvY3VzKGluIHwgb3V0KSBldmVudHNcbi8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3Nzg3XG4vL1xuLy8gU3VwcG9ydDogQ2hyb21lIDw9NDggLSA0OSwgU2FmYXJpIDw9OS4wIC0gOS4xXG4vLyBmb2N1cyhpbiB8IG91dCkgZXZlbnRzIGZpcmUgYWZ0ZXIgZm9jdXMgJiBibHVyIGV2ZW50cyxcbi8vIHdoaWNoIGlzIHNwZWMgdmlvbGF0aW9uIC0gaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudHMtZm9jdXNldmVudC1ldmVudC1vcmRlclxuLy8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NDk4NTdcbmlmICggIXN1cHBvcnQuZm9jdXNpbiApIHtcblx0alF1ZXJ5LmVhY2goIHsgZm9jdXM6IFwiZm9jdXNpblwiLCBibHVyOiBcImZvY3Vzb3V0XCIgfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHtcblxuXHRcdC8vIEF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciBvbiB0aGUgZG9jdW1lbnQgd2hpbGUgc29tZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0XG5cdFx0dmFyIGhhbmRsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQuc2ltdWxhdGUoIGZpeCwgZXZlbnQudGFyZ2V0LCBqUXVlcnkuZXZlbnQuZml4KCBldmVudCApICk7XG5cdFx0fTtcblxuXHRcdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBmaXggXSA9IHtcblx0XHRcdHNldHVwOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCApO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5hZGRFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgKCBhdHRhY2hlcyB8fCAwICkgKyAxICk7XG5cdFx0XHR9LFxuXHRcdFx0dGVhcmRvd246IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMsXG5cdFx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4ICkgLSAxO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkb2MsIGZpeCApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgYXR0YWNoZXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH0gKTtcbn1cbnZhciBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcblxudmFyIG5vbmNlID0gRGF0ZS5ub3coKTtcblxudmFyIHJxdWVyeSA9ICggL1xcPy8gKTtcblxuXG5cbi8vIENyb3NzLWJyb3dzZXIgeG1sIHBhcnNpbmdcbmpRdWVyeS5wYXJzZVhNTCA9IGZ1bmN0aW9uKCBkYXRhICkge1xuXHR2YXIgeG1sO1xuXHRpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0Ly8gSUUgdGhyb3dzIG9uIHBhcnNlRnJvbVN0cmluZyB3aXRoIGludmFsaWQgaW5wdXQuXG5cdHRyeSB7XG5cdFx0eG1sID0gKCBuZXcgd2luZG93LkRPTVBhcnNlcigpICkucGFyc2VGcm9tU3RyaW5nKCBkYXRhLCBcInRleHQveG1sXCIgKTtcblx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0eG1sID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKCAheG1sIHx8IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSggXCJwYXJzZXJlcnJvclwiICkubGVuZ3RoICkge1xuXHRcdGpRdWVyeS5lcnJvciggXCJJbnZhbGlkIFhNTDogXCIgKyBkYXRhICk7XG5cdH1cblx0cmV0dXJuIHhtbDtcbn07XG5cblxudmFyXG5cdHJicmFja2V0ID0gL1xcW1xcXSQvLFxuXHRyQ1JMRiA9IC9cXHI/XFxuL2csXG5cdHJzdWJtaXR0ZXJUeXBlcyA9IC9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxcblx0cnN1Ym1pdHRhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO1xuXG5mdW5jdGlvbiBidWlsZFBhcmFtcyggcHJlZml4LCBvYmosIHRyYWRpdGlvbmFsLCBhZGQgKSB7XG5cdHZhciBuYW1lO1xuXG5cdGlmICggQXJyYXkuaXNBcnJheSggb2JqICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS5cblx0XHRqUXVlcnkuZWFjaCggb2JqLCBmdW5jdGlvbiggaSwgdiApIHtcblx0XHRcdGlmICggdHJhZGl0aW9uYWwgfHwgcmJyYWNrZXQudGVzdCggcHJlZml4ICkgKSB7XG5cblx0XHRcdFx0Ly8gVHJlYXQgZWFjaCBhcnJheSBpdGVtIGFzIGEgc2NhbGFyLlxuXHRcdFx0XHRhZGQoIHByZWZpeCwgdiApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEl0ZW0gaXMgbm9uLXNjYWxhciAoYXJyYXkgb3Igb2JqZWN0KSwgZW5jb2RlIGl0cyBudW1lcmljIGluZGV4LlxuXHRcdFx0XHRidWlsZFBhcmFtcyhcblx0XHRcdFx0XHRwcmVmaXggKyBcIltcIiArICggdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPSBudWxsID8gaSA6IFwiXCIgKSArIFwiXVwiLFxuXHRcdFx0XHRcdHYsXG5cdFx0XHRcdFx0dHJhZGl0aW9uYWwsXG5cdFx0XHRcdFx0YWRkXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdH0gZWxzZSBpZiAoICF0cmFkaXRpb25hbCAmJiB0b1R5cGUoIG9iaiApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIG9iamVjdCBpdGVtLlxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCArIFwiW1wiICsgbmFtZSArIFwiXVwiLCBvYmpbIG5hbWUgXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xuXHRcdH1cblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gU2VyaWFsaXplIHNjYWxhciBpdGVtLlxuXHRcdGFkZCggcHJlZml4LCBvYmogKTtcblx0fVxufVxuXG4vLyBTZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cyBvciBhIHNldCBvZlxuLy8ga2V5L3ZhbHVlcyBpbnRvIGEgcXVlcnkgc3RyaW5nXG5qUXVlcnkucGFyYW0gPSBmdW5jdGlvbiggYSwgdHJhZGl0aW9uYWwgKSB7XG5cdHZhciBwcmVmaXgsXG5cdFx0cyA9IFtdLFxuXHRcdGFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlT3JGdW5jdGlvbiApIHtcblxuXHRcdFx0Ly8gSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCB1c2UgaXRzIHJldHVybiB2YWx1ZVxuXHRcdFx0dmFyIHZhbHVlID0gaXNGdW5jdGlvbiggdmFsdWVPckZ1bmN0aW9uICkgP1xuXHRcdFx0XHR2YWx1ZU9yRnVuY3Rpb24oKSA6XG5cdFx0XHRcdHZhbHVlT3JGdW5jdGlvbjtcblxuXHRcdFx0c1sgcy5sZW5ndGggXSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyBcIj1cIiArXG5cdFx0XHRcdGVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSApO1xuXHRcdH07XG5cblx0aWYgKCBhID09IG51bGwgKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHQvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLlxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHNcblx0XHRqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRhZGQoIHRoaXMubmFtZSwgdGhpcy52YWx1ZSApO1xuXHRcdH0gKTtcblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUgXCJvbGRcIiB3YXkgKHRoZSB3YXkgMS4zLjIgb3Igb2xkZXJcblx0XHQvLyBkaWQgaXQpLCBvdGhlcndpc2UgZW5jb2RlIHBhcmFtcyByZWN1cnNpdmVseS5cblx0XHRmb3IgKCBwcmVmaXggaW4gYSApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvblxuXHRyZXR1cm4gcy5qb2luKCBcIiZcIiApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRzZXJpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApO1xuXHR9LFxuXHRzZXJpYWxpemVBcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gQ2FuIGFkZCBwcm9wSG9vayBmb3IgXCJlbGVtZW50c1wiIHRvIGZpbHRlciBvciBhZGQgZm9ybSBlbGVtZW50c1xuXHRcdFx0dmFyIGVsZW1lbnRzID0galF1ZXJ5LnByb3AoIHRoaXMsIFwiZWxlbWVudHNcIiApO1xuXHRcdFx0cmV0dXJuIGVsZW1lbnRzID8galF1ZXJ5Lm1ha2VBcnJheSggZWxlbWVudHMgKSA6IHRoaXM7XG5cdFx0fSApXG5cdFx0LmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcblxuXHRcdFx0Ly8gVXNlIC5pcyggXCI6ZGlzYWJsZWRcIiApIHNvIHRoYXQgZmllbGRzZXRbZGlzYWJsZWRdIHdvcmtzXG5cdFx0XHRyZXR1cm4gdGhpcy5uYW1lICYmICFqUXVlcnkoIHRoaXMgKS5pcyggXCI6ZGlzYWJsZWRcIiApICYmXG5cdFx0XHRcdHJzdWJtaXR0YWJsZS50ZXN0KCB0aGlzLm5vZGVOYW1lICkgJiYgIXJzdWJtaXR0ZXJUeXBlcy50ZXN0KCB0eXBlICkgJiZcblx0XHRcdFx0KCB0aGlzLmNoZWNrZWQgfHwgIXJjaGVja2FibGVUeXBlLnRlc3QoIHR5cGUgKSApO1xuXHRcdH0gKVxuXHRcdC5tYXAoIGZ1bmN0aW9uKCBpLCBlbGVtICkge1xuXHRcdFx0dmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpO1xuXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0cmV0dXJuIGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbCApIHtcblx0XHRcdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0fSApLmdldCgpO1xuXHR9XG59ICk7XG5cblxudmFyXG5cdHIyMCA9IC8lMjAvZyxcblx0cmhhc2ggPSAvIy4qJC8sXG5cdHJhbnRpQ2FjaGUgPSAvKFs/Jl0pXz1bXiZdKi8sXG5cdHJoZWFkZXJzID0gL14oLio/KTpbIFxcdF0qKFteXFxyXFxuXSopJC9tZyxcblxuXHQvLyAjNzY1MywgIzgxMjUsICM4MTUyOiBsb2NhbCBwcm90b2NvbCBkZXRlY3Rpb25cblx0cmxvY2FsUHJvdG9jb2wgPSAvXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxcblx0cm5vQ29udGVudCA9IC9eKD86R0VUfEhFQUQpJC8sXG5cdHJwcm90b2NvbCA9IC9eXFwvXFwvLyxcblxuXHQvKiBQcmVmaWx0ZXJzXG5cdCAqIDEpIFRoZXkgYXJlIHVzZWZ1bCB0byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9yIGFuIGV4YW1wbGUpXG5cdCAqIDIpIFRoZXNlIGFyZSBjYWxsZWQ6XG5cdCAqICAgIC0gQkVGT1JFIGFza2luZyBmb3IgYSB0cmFuc3BvcnRcblx0ICogICAgLSBBRlRFUiBwYXJhbSBzZXJpYWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVlKVxuXHQgKiAzKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDQpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogNSkgZXhlY3V0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gY29udGludWUgZG93biB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHByZWZpbHRlcnMgPSB7fSxcblxuXHQvKiBUcmFuc3BvcnRzIGJpbmRpbmdzXG5cdCAqIDEpIGtleSBpcyB0aGUgZGF0YVR5cGVcblx0ICogMikgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxuXHQgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHRyYW5zcG9ydHMgPSB7fSxcblxuXHQvLyBBdm9pZCBjb21tZW50LXByb2xvZyBjaGFyIHNlcXVlbmNlICgjMTAwOTgpOyBtdXN0IGFwcGVhc2UgbGludCBhbmQgZXZhZGUgY29tcHJlc3Npb25cblx0YWxsVHlwZXMgPSBcIiovXCIuY29uY2F0KCBcIipcIiApLFxuXG5cdC8vIEFuY2hvciB0YWcgZm9yIHBhcnNpbmcgdGhlIGRvY3VtZW50IG9yaWdpblxuXHRvcmlnaW5BbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImFcIiApO1xuXHRvcmlnaW5BbmNob3IuaHJlZiA9IGxvY2F0aW9uLmhyZWY7XG5cbi8vIEJhc2UgXCJjb25zdHJ1Y3RvclwiIGZvciBqUXVlcnkuYWpheFByZWZpbHRlciBhbmQgalF1ZXJ5LmFqYXhUcmFuc3BvcnRcbmZ1bmN0aW9uIGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlICkge1xuXG5cdC8vIGRhdGFUeXBlRXhwcmVzc2lvbiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gXCIqXCJcblx0cmV0dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Npb24gIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRmdW5jID0gZGF0YVR5cGVFeHByZXNzaW9uO1xuXHRcdFx0ZGF0YVR5cGVFeHByZXNzaW9uID0gXCIqXCI7XG5cdFx0fVxuXG5cdFx0dmFyIGRhdGFUeXBlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRkYXRhVHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBmdW5jICkgKSB7XG5cblx0XHRcdC8vIEZvciBlYWNoIGRhdGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4cHJlc3Npb25cblx0XHRcdHdoaWxlICggKCBkYXRhVHlwZSA9IGRhdGFUeXBlc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHQvLyBQcmVwZW5kIGlmIHJlcXVlc3RlZFxuXHRcdFx0XHRpZiAoIGRhdGFUeXBlWyAwIF0gPT09IFwiK1wiICkge1xuXHRcdFx0XHRcdGRhdGFUeXBlID0gZGF0YVR5cGUuc2xpY2UoIDEgKSB8fCBcIipcIjtcblx0XHRcdFx0XHQoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSApLnVuc2hpZnQoIGZ1bmMgKTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYXBwZW5kXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS5wdXNoKCBmdW5jICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbi8vIEJhc2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQgdHJhbnNwb3J0c1xuZnVuY3Rpb24gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApIHtcblxuXHR2YXIgaW5zcGVjdGVkID0ge30sXG5cdFx0c2Vla2luZ1RyYW5zcG9ydCA9ICggc3RydWN0dXJlID09PSB0cmFuc3BvcnRzICk7XG5cblx0ZnVuY3Rpb24gaW5zcGVjdCggZGF0YVR5cGUgKSB7XG5cdFx0dmFyIHNlbGVjdGVkO1xuXHRcdGluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7XG5cdFx0alF1ZXJ5LmVhY2goIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSwgZnVuY3Rpb24oIF8sIHByZWZpbHRlck9yRmFjdG9yeSApIHtcblx0XHRcdHZhciBkYXRhVHlwZU9yVHJhbnNwb3J0ID0gcHJlZmlsdGVyT3JGYWN0b3J5KCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICk7XG5cdFx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZU9yVHJhbnNwb3J0ID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzZWVraW5nVHJhbnNwb3J0ICYmICFpbnNwZWN0ZWRbIGRhdGFUeXBlT3JUcmFuc3BvcnQgXSApIHtcblxuXHRcdFx0XHRvcHRpb25zLmRhdGFUeXBlcy51bnNoaWZ0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdGluc3BlY3QoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmICggc2Vla2luZ1RyYW5zcG9ydCApIHtcblx0XHRcdFx0cmV0dXJuICEoIHNlbGVjdGVkID0gZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHRyZXR1cm4gc2VsZWN0ZWQ7XG5cdH1cblxuXHRyZXR1cm4gaW5zcGVjdCggb3B0aW9ucy5kYXRhVHlwZXNbIDAgXSApIHx8ICFpbnNwZWN0ZWRbIFwiKlwiIF0gJiYgaW5zcGVjdCggXCIqXCIgKTtcbn1cblxuLy8gQSBzcGVjaWFsIGV4dGVuZCBmb3IgYWpheCBvcHRpb25zXG4vLyB0aGF0IHRha2VzIFwiZmxhdFwiIG9wdGlvbnMgKG5vdCB0byBiZSBkZWVwIGV4dGVuZGVkKVxuLy8gRml4ZXMgIzk4ODdcbmZ1bmN0aW9uIGFqYXhFeHRlbmQoIHRhcmdldCwgc3JjICkge1xuXHR2YXIga2V5LCBkZWVwLFxuXHRcdGZsYXRPcHRpb25zID0galF1ZXJ5LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9ucyB8fCB7fTtcblxuXHRmb3IgKCBrZXkgaW4gc3JjICkge1xuXHRcdGlmICggc3JjWyBrZXkgXSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0KCBmbGF0T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQgOiAoIGRlZXAgfHwgKCBkZWVwID0ge30gKSApIClbIGtleSBdID0gc3JjWyBrZXkgXTtcblx0XHR9XG5cdH1cblx0aWYgKCBkZWVwICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRydWUsIHRhcmdldCwgZGVlcCApO1xuXHR9XG5cblx0cmV0dXJuIHRhcmdldDtcbn1cblxuLyogSGFuZGxlcyByZXNwb25zZXMgdG8gYW4gYWpheCByZXF1ZXN0OlxuICogLSBmaW5kcyB0aGUgcmlnaHQgZGF0YVR5cGUgKG1lZGlhdGVzIGJldHdlZW4gY29udGVudC10eXBlIGFuZCBleHBlY3RlZCBkYXRhVHlwZSlcbiAqIC0gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxuICovXG5mdW5jdGlvbiBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICkge1xuXG5cdHZhciBjdCwgdHlwZSwgZmluYWxEYXRhVHlwZSwgZmlyc3REYXRhVHlwZSxcblx0XHRjb250ZW50cyA9IHMuY29udGVudHMsXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXM7XG5cblx0Ly8gUmVtb3ZlIGF1dG8gZGF0YVR5cGUgYW5kIGdldCBjb250ZW50LXR5cGUgaW4gdGhlIHByb2Nlc3Ncblx0d2hpbGUgKCBkYXRhVHlwZXNbIDAgXSA9PT0gXCIqXCIgKSB7XG5cdFx0ZGF0YVR5cGVzLnNoaWZ0KCk7XG5cdFx0aWYgKCBjdCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0Y3QgPSBzLm1pbWVUeXBlIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEga25vd24gY29udGVudC10eXBlXG5cdGlmICggY3QgKSB7XG5cdFx0Zm9yICggdHlwZSBpbiBjb250ZW50cyApIHtcblx0XHRcdGlmICggY29udGVudHNbIHR5cGUgXSAmJiBjb250ZW50c1sgdHlwZSBdLnRlc3QoIGN0ICkgKSB7XG5cdFx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCB0eXBlICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgcmVzcG9uc2UgZm9yIHRoZSBleHBlY3RlZCBkYXRhVHlwZVxuXHRpZiAoIGRhdGFUeXBlc1sgMCBdIGluIHJlc3BvbnNlcyApIHtcblx0XHRmaW5hbERhdGFUeXBlID0gZGF0YVR5cGVzWyAwIF07XG5cdH0gZWxzZSB7XG5cblx0XHQvLyBUcnkgY29udmVydGlibGUgZGF0YVR5cGVzXG5cdFx0Zm9yICggdHlwZSBpbiByZXNwb25zZXMgKSB7XG5cdFx0XHRpZiAoICFkYXRhVHlwZXNbIDAgXSB8fCBzLmNvbnZlcnRlcnNbIHR5cGUgKyBcIiBcIiArIGRhdGFUeXBlc1sgMCBdIF0gKSB7XG5cdFx0XHRcdGZpbmFsRGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmICggIWZpcnN0RGF0YVR5cGUgKSB7XG5cdFx0XHRcdGZpcnN0RGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE9yIGp1c3QgdXNlIGZpcnN0IG9uZVxuXHRcdGZpbmFsRGF0YVR5cGUgPSBmaW5hbERhdGFUeXBlIHx8IGZpcnN0RGF0YVR5cGU7XG5cdH1cblxuXHQvLyBJZiB3ZSBmb3VuZCBhIGRhdGFUeXBlXG5cdC8vIFdlIGFkZCB0aGUgZGF0YVR5cGUgdG8gdGhlIGxpc3QgaWYgbmVlZGVkXG5cdC8vIGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2Vcblx0aWYgKCBmaW5hbERhdGFUeXBlICkge1xuXHRcdGlmICggZmluYWxEYXRhVHlwZSAhPT0gZGF0YVR5cGVzWyAwIF0gKSB7XG5cdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggZmluYWxEYXRhVHlwZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzcG9uc2VzWyBmaW5hbERhdGFUeXBlIF07XG5cdH1cbn1cblxuLyogQ2hhaW4gY29udmVyc2lvbnMgZ2l2ZW4gdGhlIHJlcXVlc3QgYW5kIHRoZSBvcmlnaW5hbCByZXNwb25zZVxuICogQWxzbyBzZXRzIHRoZSByZXNwb25zZVhYWCBmaWVsZHMgb24gdGhlIGpxWEhSIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApIHtcblx0dmFyIGNvbnYyLCBjdXJyZW50LCBjb252LCB0bXAsIHByZXYsXG5cdFx0Y29udmVydGVycyA9IHt9LFxuXG5cdFx0Ly8gV29yayB3aXRoIGEgY29weSBvZiBkYXRhVHlwZXMgaW4gY2FzZSB3ZSBuZWVkIHRvIG1vZGlmeSBpdCBmb3IgY29udmVyc2lvblxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLnNsaWNlKCk7XG5cblx0Ly8gQ3JlYXRlIGNvbnZlcnRlcnMgbWFwIHdpdGggbG93ZXJjYXNlZCBrZXlzXG5cdGlmICggZGF0YVR5cGVzWyAxIF0gKSB7XG5cdFx0Zm9yICggY29udiBpbiBzLmNvbnZlcnRlcnMgKSB7XG5cdFx0XHRjb252ZXJ0ZXJzWyBjb252LnRvTG93ZXJDYXNlKCkgXSA9IHMuY29udmVydGVyc1sgY29udiBdO1xuXHRcdH1cblx0fVxuXG5cdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHQvLyBDb252ZXJ0IHRvIGVhY2ggc2VxdWVudGlhbCBkYXRhVHlwZVxuXHR3aGlsZSAoIGN1cnJlbnQgKSB7XG5cblx0XHRpZiAoIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSApIHtcblx0XHRcdGpxWEhSWyBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gXSA9IHJlc3BvbnNlO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkXG5cdFx0aWYgKCAhcHJldiAmJiBpc1N1Y2Nlc3MgJiYgcy5kYXRhRmlsdGVyICkge1xuXHRcdFx0cmVzcG9uc2UgPSBzLmRhdGFGaWx0ZXIoIHJlc3BvbnNlLCBzLmRhdGFUeXBlICk7XG5cdFx0fVxuXG5cdFx0cHJldiA9IGN1cnJlbnQ7XG5cdFx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xuXG5cdFx0aWYgKCBjdXJyZW50ICkge1xuXG5cdFx0XHQvLyBUaGVyZSdzIG9ubHkgd29yayB0byBkbyBpZiBjdXJyZW50IGRhdGFUeXBlIGlzIG5vbi1hdXRvXG5cdFx0XHRpZiAoIGN1cnJlbnQgPT09IFwiKlwiICkge1xuXG5cdFx0XHRcdGN1cnJlbnQgPSBwcmV2O1xuXG5cdFx0XHQvLyBDb252ZXJ0IHJlc3BvbnNlIGlmIHByZXYgZGF0YVR5cGUgaXMgbm9uLWF1dG8gYW5kIGRpZmZlcnMgZnJvbSBjdXJyZW50XG5cdFx0XHR9IGVsc2UgaWYgKCBwcmV2ICE9PSBcIipcIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdC8vIFNlZWsgYSBkaXJlY3QgY29udmVydGVyXG5cdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyBjdXJyZW50IF0gfHwgY29udmVydGVyc1sgXCIqIFwiICsgY3VycmVudCBdO1xuXG5cdFx0XHRcdC8vIElmIG5vbmUgZm91bmQsIHNlZWsgYSBwYWlyXG5cdFx0XHRcdGlmICggIWNvbnYgKSB7XG5cdFx0XHRcdFx0Zm9yICggY29udjIgaW4gY29udmVydGVycyApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSWYgY29udjIgb3V0cHV0cyBjdXJyZW50XG5cdFx0XHRcdFx0XHR0bXAgPSBjb252Mi5zcGxpdCggXCIgXCIgKTtcblx0XHRcdFx0XHRcdGlmICggdG1wWyAxIF0gPT09IGN1cnJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gSWYgcHJldiBjYW4gYmUgY29udmVydGVkIHRvIGFjY2VwdGVkIGlucHV0XG5cdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyB0bXBbIDAgXSBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyc1sgXCIqIFwiICsgdG1wWyAwIF0gXTtcblx0XHRcdFx0XHRcdFx0aWYgKCBjb252ICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ29uZGVuc2UgZXF1aXZhbGVuY2UgY29udmVydGVyc1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY29udiA9PT0gdHJ1ZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBjb252MiBdO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBpbnNlcnQgdGhlIGludGVybWVkaWF0ZSBkYXRhVHlwZVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGNvbnZlcnRlcnNbIGNvbnYyIF0gIT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50ID0gdG1wWyAwIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdG1wWyAxIF0gKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBcHBseSBjb252ZXJ0ZXIgKGlmIG5vdCBhbiBlcXVpdmFsZW5jZSlcblx0XHRcdFx0aWYgKCBjb252ICE9PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0Ly8gVW5sZXNzIGVycm9ycyBhcmUgYWxsb3dlZCB0byBidWJibGUsIGNhdGNoIGFuZCByZXR1cm4gdGhlbVxuXHRcdFx0XHRcdGlmICggY29udiAmJiBzLnRocm93cyApIHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdGU6IFwicGFyc2VyZXJyb3JcIixcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjogY29udiA/IGUgOiBcIk5vIGNvbnZlcnNpb24gZnJvbSBcIiArIHByZXYgKyBcIiB0byBcIiArIGN1cnJlbnRcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyBzdGF0ZTogXCJzdWNjZXNzXCIsIGRhdGE6IHJlc3BvbnNlIH07XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBDb3VudGVyIGZvciBob2xkaW5nIHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1ZXJpZXNcblx0YWN0aXZlOiAwLFxuXG5cdC8vIExhc3QtTW9kaWZpZWQgaGVhZGVyIGNhY2hlIGZvciBuZXh0IHJlcXVlc3Rcblx0bGFzdE1vZGlmaWVkOiB7fSxcblx0ZXRhZzoge30sXG5cblx0YWpheFNldHRpbmdzOiB7XG5cdFx0dXJsOiBsb2NhdGlvbi5ocmVmLFxuXHRcdHR5cGU6IFwiR0VUXCIsXG5cdFx0aXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggbG9jYXRpb24ucHJvdG9jb2wgKSxcblx0XHRnbG9iYWw6IHRydWUsXG5cdFx0cHJvY2Vzc0RhdGE6IHRydWUsXG5cdFx0YXN5bmM6IHRydWUsXG5cdFx0Y29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsXG5cblx0XHQvKlxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0ZGF0YTogbnVsbCxcblx0XHRkYXRhVHlwZTogbnVsbCxcblx0XHR1c2VybmFtZTogbnVsbCxcblx0XHRwYXNzd29yZDogbnVsbCxcblx0XHRjYWNoZTogbnVsbCxcblx0XHR0aHJvd3M6IGZhbHNlLFxuXHRcdHRyYWRpdGlvbmFsOiBmYWxzZSxcblx0XHRoZWFkZXJzOiB7fSxcblx0XHQqL1xuXG5cdFx0YWNjZXB0czoge1xuXHRcdFx0XCIqXCI6IGFsbFR5cGVzLFxuXHRcdFx0dGV4dDogXCJ0ZXh0L3BsYWluXCIsXG5cdFx0XHRodG1sOiBcInRleHQvaHRtbFwiLFxuXHRcdFx0eG1sOiBcImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWxcIixcblx0XHRcdGpzb246IFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0XCJcblx0XHR9LFxuXG5cdFx0Y29udGVudHM6IHtcblx0XHRcdHhtbDogL1xcYnhtbFxcYi8sXG5cdFx0XHRodG1sOiAvXFxiaHRtbC8sXG5cdFx0XHRqc29uOiAvXFxianNvblxcYi9cblx0XHR9LFxuXG5cdFx0cmVzcG9uc2VGaWVsZHM6IHtcblx0XHRcdHhtbDogXCJyZXNwb25zZVhNTFwiLFxuXHRcdFx0dGV4dDogXCJyZXNwb25zZVRleHRcIixcblx0XHRcdGpzb246IFwicmVzcG9uc2VKU09OXCJcblx0XHR9LFxuXG5cdFx0Ly8gRGF0YSBjb252ZXJ0ZXJzXG5cdFx0Ly8gS2V5cyBzZXBhcmF0ZSBzb3VyY2UgKG9yIGNhdGNoYWxsIFwiKlwiKSBhbmQgZGVzdGluYXRpb24gdHlwZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuXHRcdGNvbnZlcnRlcnM6IHtcblxuXHRcdFx0Ly8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0XG5cdFx0XHRcIiogdGV4dFwiOiBTdHJpbmcsXG5cblx0XHRcdC8vIFRleHQgdG8gaHRtbCAodHJ1ZSA9IG5vIHRyYW5zZm9ybWF0aW9uKVxuXHRcdFx0XCJ0ZXh0IGh0bWxcIjogdHJ1ZSxcblxuXHRcdFx0Ly8gRXZhbHVhdGUgdGV4dCBhcyBhIGpzb24gZXhwcmVzc2lvblxuXHRcdFx0XCJ0ZXh0IGpzb25cIjogSlNPTi5wYXJzZSxcblxuXHRcdFx0Ly8gUGFyc2UgdGV4dCBhcyB4bWxcblx0XHRcdFwidGV4dCB4bWxcIjogalF1ZXJ5LnBhcnNlWE1MXG5cdFx0fSxcblxuXHRcdC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6XG5cdFx0Ly8geW91IGNhbiBhZGQgeW91ciBvd24gY3VzdG9tIG9wdGlvbnMgaGVyZSBpZlxuXHRcdC8vIGFuZCB3aGVuIHlvdSBjcmVhdGUgb25lIHRoYXQgc2hvdWxkbid0IGJlXG5cdFx0Ly8gZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQpXG5cdFx0ZmxhdE9wdGlvbnM6IHtcblx0XHRcdHVybDogdHJ1ZSxcblx0XHRcdGNvbnRleHQ6IHRydWVcblx0XHR9XG5cdH0sXG5cblx0Ly8gQ3JlYXRlcyBhIGZ1bGwgZmxlZGdlZCBzZXR0aW5ncyBvYmplY3QgaW50byB0YXJnZXRcblx0Ly8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRzLlxuXHQvLyBJZiB0YXJnZXQgaXMgb21pdHRlZCwgd3JpdGVzIGludG8gYWpheFNldHRpbmdzLlxuXHRhamF4U2V0dXA6IGZ1bmN0aW9uKCB0YXJnZXQsIHNldHRpbmdzICkge1xuXHRcdHJldHVybiBzZXR0aW5ncyA/XG5cblx0XHRcdC8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2JqZWN0XG5cdFx0XHRhamF4RXh0ZW5kKCBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGluZ3MgKSwgc2V0dGluZ3MgKSA6XG5cblx0XHRcdC8vIEV4dGVuZGluZyBhamF4U2V0dGluZ3Ncblx0XHRcdGFqYXhFeHRlbmQoIGpRdWVyeS5hamF4U2V0dGluZ3MsIHRhcmdldCApO1xuXHR9LFxuXG5cdGFqYXhQcmVmaWx0ZXI6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycyApLFxuXHRhamF4VHJhbnNwb3J0OiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMgKSxcblxuXHQvLyBNYWluIG1ldGhvZFxuXHRhamF4OiBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkge1xuXG5cdFx0Ly8gSWYgdXJsIGlzIGFuIG9iamVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmVcblx0XHRpZiAoIHR5cGVvZiB1cmwgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRvcHRpb25zID0gdXJsO1xuXHRcdFx0dXJsID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0XG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0XHR2YXIgdHJhbnNwb3J0LFxuXG5cdFx0XHQvLyBVUkwgd2l0aG91dCBhbnRpLWNhY2hlIHBhcmFtXG5cdFx0XHRjYWNoZVVSTCxcblxuXHRcdFx0Ly8gUmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nLFxuXHRcdFx0cmVzcG9uc2VIZWFkZXJzLFxuXG5cdFx0XHQvLyB0aW1lb3V0IGhhbmRsZVxuXHRcdFx0dGltZW91dFRpbWVyLFxuXG5cdFx0XHQvLyBVcmwgY2xlYW51cCB2YXJcblx0XHRcdHVybEFuY2hvcixcblxuXHRcdFx0Ly8gUmVxdWVzdCBzdGF0ZSAoYmVjb21lcyBmYWxzZSB1cG9uIHNlbmQgYW5kIHRydWUgdXBvbiBjb21wbGV0aW9uKVxuXHRcdFx0Y29tcGxldGVkLFxuXG5cdFx0XHQvLyBUbyBrbm93IGlmIGdsb2JhbCBldmVudHMgYXJlIHRvIGJlIGRpc3BhdGNoZWRcblx0XHRcdGZpcmVHbG9iYWxzLFxuXG5cdFx0XHQvLyBMb29wIHZhcmlhYmxlXG5cdFx0XHRpLFxuXG5cdFx0XHQvLyB1bmNhY2hlZCBwYXJ0IG9mIHRoZSB1cmxcblx0XHRcdHVuY2FjaGVkLFxuXG5cdFx0XHQvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0XG5cdFx0XHRzID0galF1ZXJ5LmFqYXhTZXR1cCgge30sIG9wdGlvbnMgKSxcblxuXHRcdFx0Ly8gQ2FsbGJhY2tzIGNvbnRleHRcblx0XHRcdGNhbGxiYWNrQ29udGV4dCA9IHMuY29udGV4dCB8fCBzLFxuXG5cdFx0XHQvLyBDb250ZXh0IGZvciBnbG9iYWwgZXZlbnRzIGlzIGNhbGxiYWNrQ29udGV4dCBpZiBpdCBpcyBhIERPTSBub2RlIG9yIGpRdWVyeSBjb2xsZWN0aW9uXG5cdFx0XHRnbG9iYWxFdmVudENvbnRleHQgPSBzLmNvbnRleHQgJiZcblx0XHRcdFx0KCBjYWxsYmFja0NvbnRleHQubm9kZVR5cGUgfHwgY2FsbGJhY2tDb250ZXh0LmpxdWVyeSApID9cblx0XHRcdFx0XHRqUXVlcnkoIGNhbGxiYWNrQ29udGV4dCApIDpcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQsXG5cblx0XHRcdC8vIERlZmVycmVkc1xuXHRcdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQgPSBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdHN0YXR1c0NvZGUgPSBzLnN0YXR1c0NvZGUgfHwge30sXG5cblx0XHRcdC8vIEhlYWRlcnMgKHRoZXkgYXJlIHNlbnQgYWxsIGF0IG9uY2UpXG5cdFx0XHRyZXF1ZXN0SGVhZGVycyA9IHt9LFxuXHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lcyA9IHt9LFxuXG5cdFx0XHQvLyBEZWZhdWx0IGFib3J0IG1lc3NhZ2Vcblx0XHRcdHN0ckFib3J0ID0gXCJjYW5jZWxlZFwiLFxuXG5cdFx0XHQvLyBGYWtlIHhoclxuXHRcdFx0anFYSFIgPSB7XG5cdFx0XHRcdHJlYWR5U3RhdGU6IDAsXG5cblx0XHRcdFx0Ly8gQnVpbGRzIGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRlZFxuXHRcdFx0XHRnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24oIGtleSApIHtcblx0XHRcdFx0XHR2YXIgbWF0Y2g7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICFyZXNwb25zZUhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVycyA9IHt9O1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbWF0Y2ggPSByaGVhZGVycy5leGVjKCByZXNwb25zZUhlYWRlcnNTdHJpbmcgKSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXSA9XG5cdFx0XHRcdFx0XHRcdFx0XHQoIHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXSB8fCBbXSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5jb25jYXQoIG1hdGNoWyAyIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bWF0Y2ggPSByZXNwb25zZUhlYWRlcnNbIGtleS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoID09IG51bGwgPyBudWxsIDogbWF0Y2guam9pbiggXCIsIFwiICk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gUmF3IHN0cmluZ1xuXHRcdFx0XHRnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBjb21wbGV0ZWQgPyByZXNwb25zZUhlYWRlcnNTdHJpbmcgOiBudWxsO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhY2hlcyB0aGUgaGVhZGVyXG5cdFx0XHRcdHNldFJlcXVlc3RIZWFkZXI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0bmFtZSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdID1cblx0XHRcdFx0XHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHwgbmFtZTtcblx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGVzIHJlc3BvbnNlIGNvbnRlbnQtdHlwZSBoZWFkZXJcblx0XHRcdFx0b3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdHMubWltZVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0XHRzdGF0dXNDb2RlOiBmdW5jdGlvbiggbWFwICkge1xuXHRcdFx0XHRcdHZhciBjb2RlO1xuXHRcdFx0XHRcdGlmICggbWFwICkge1xuXHRcdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gRXhlY3V0ZSB0aGUgYXBwcm9wcmlhdGUgY2FsbGJhY2tzXG5cdFx0XHRcdFx0XHRcdGpxWEhSLmFsd2F5cyggbWFwWyBqcVhIUi5zdGF0dXMgXSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBMYXp5LWFkZCB0aGUgbmV3IGNhbGxiYWNrcyBpbiBhIHdheSB0aGF0IHByZXNlcnZlcyBvbGQgb25lc1xuXHRcdFx0XHRcdFx0XHRmb3IgKCBjb2RlIGluIG1hcCApIHtcblx0XHRcdFx0XHRcdFx0XHRzdGF0dXNDb2RlWyBjb2RlIF0gPSBbIHN0YXR1c0NvZGVbIGNvZGUgXSwgbWFwWyBjb2RlIF0gXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYW5jZWwgdGhlIHJlcXVlc3Rcblx0XHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCBzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHZhciBmaW5hbFRleHQgPSBzdGF0dXNUZXh0IHx8IHN0ckFib3J0O1xuXHRcdFx0XHRcdGlmICggdHJhbnNwb3J0ICkge1xuXHRcdFx0XHRcdFx0dHJhbnNwb3J0LmFib3J0KCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZG9uZSggMCwgZmluYWxUZXh0ICk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHQvLyBBdHRhY2ggZGVmZXJyZWRzXG5cdFx0ZGVmZXJyZWQucHJvbWlzZSgganFYSFIgKTtcblxuXHRcdC8vIEFkZCBwcm90b2NvbCBpZiBub3QgcHJvdmlkZWQgKHByZWZpbHRlcnMgbWlnaHQgZXhwZWN0IGl0KVxuXHRcdC8vIEhhbmRsZSBmYWxzeSB1cmwgaW4gdGhlIHNldHRpbmdzIG9iamVjdCAoIzEwMDkzOiBjb25zaXN0ZW5jeSB3aXRoIG9sZCBzaWduYXR1cmUpXG5cdFx0Ly8gV2UgYWxzbyB1c2UgdGhlIHVybCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlXG5cdFx0cy51cmwgPSAoICggdXJsIHx8IHMudXJsIHx8IGxvY2F0aW9uLmhyZWYgKSArIFwiXCIgKVxuXHRcdFx0LnJlcGxhY2UoIHJwcm90b2NvbCwgbG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKTtcblxuXHRcdC8vIEFsaWFzIG1ldGhvZCBvcHRpb24gdG8gdHlwZSBhcyBwZXIgdGlja2V0ICMxMjAwNFxuXHRcdHMudHlwZSA9IG9wdGlvbnMubWV0aG9kIHx8IG9wdGlvbnMudHlwZSB8fCBzLm1ldGhvZCB8fCBzLnR5cGU7XG5cblx0XHQvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0XG5cdFx0cy5kYXRhVHlwZXMgPSAoIHMuZGF0YVR5cGUgfHwgXCIqXCIgKS50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cblx0XHQvLyBBIGNyb3NzLWRvbWFpbiByZXF1ZXN0IGlzIGluIG9yZGVyIHdoZW4gdGhlIG9yaWdpbiBkb2Vzbid0IG1hdGNoIHRoZSBjdXJyZW50IG9yaWdpbi5cblx0XHRpZiAoIHMuY3Jvc3NEb21haW4gPT0gbnVsbCApIHtcblx0XHRcdHVybEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiYVwiICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExLCBFZGdlIDEyIC0gMTVcblx0XHRcdC8vIElFIHRocm93cyBleGNlcHRpb24gb24gYWNjZXNzaW5nIHRoZSBocmVmIHByb3BlcnR5IGlmIHVybCBpcyBtYWxmb3JtZWQsXG5cdFx0XHQvLyBlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbTo4MHgvXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHMudXJsO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExIG9ubHlcblx0XHRcdFx0Ly8gQW5jaG9yJ3MgaG9zdCBwcm9wZXJ0eSBpc24ndCBjb3JyZWN0bHkgc2V0IHdoZW4gcy51cmwgaXMgcmVsYXRpdmVcblx0XHRcdFx0dXJsQW5jaG9yLmhyZWYgPSB1cmxBbmNob3IuaHJlZjtcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IG9yaWdpbkFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIG9yaWdpbkFuY2hvci5ob3N0ICE9PVxuXHRcdFx0XHRcdHVybEFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIHVybEFuY2hvci5ob3N0O1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYW4gZXJyb3IgcGFyc2luZyB0aGUgVVJMLCBhc3N1bWUgaXQgaXMgY3Jvc3NEb21haW4sXG5cdFx0XHRcdC8vIGl0IGNhbiBiZSByZWplY3RlZCBieSB0aGUgdHJhbnNwb3J0IGlmIGl0IGlzIGludmFsaWRcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29udmVydCBkYXRhIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nXG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJiB0eXBlb2Ygcy5kYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cy5kYXRhID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9uYWwgKTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBwcmVmaWx0ZXJzXG5cdFx0aW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XG5cblx0XHQvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhIHByZWZpbHRlciwgc3RvcCB0aGVyZVxuXHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdH1cblxuXHRcdC8vIFdlIGNhbiBmaXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvXG5cdFx0Ly8gRG9uJ3QgZmlyZSBldmVudHMgaWYgalF1ZXJ5LmV2ZW50IGlzIHVuZGVmaW5lZCBpbiBhbiBBTUQtdXNhZ2Ugc2NlbmFyaW8gKCMxNTExOClcblx0XHRmaXJlR2xvYmFscyA9IGpRdWVyeS5ldmVudCAmJiBzLmdsb2JhbDtcblxuXHRcdC8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHNcblx0XHRpZiAoIGZpcmVHbG9iYWxzICYmIGpRdWVyeS5hY3RpdmUrKyA9PT0gMCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdGFydFwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gVXBwZXJjYXNlIHRoZSB0eXBlXG5cdFx0cy50eXBlID0gcy50eXBlLnRvVXBwZXJDYXNlKCk7XG5cblx0XHQvLyBEZXRlcm1pbmUgaWYgcmVxdWVzdCBoYXMgY29udGVudFxuXHRcdHMuaGFzQ29udGVudCA9ICFybm9Db250ZW50LnRlc3QoIHMudHlwZSApO1xuXG5cdFx0Ly8gU2F2ZSB0aGUgVVJMIGluIGNhc2Ugd2UncmUgdG95aW5nIHdpdGggdGhlIElmLU1vZGlmaWVkLVNpbmNlXG5cdFx0Ly8gYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyIGxhdGVyIG9uXG5cdFx0Ly8gUmVtb3ZlIGhhc2ggdG8gc2ltcGxpZnkgdXJsIG1hbmlwdWxhdGlvblxuXHRcdGNhY2hlVVJMID0gcy51cmwucmVwbGFjZSggcmhhc2gsIFwiXCIgKTtcblxuXHRcdC8vIE1vcmUgb3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBubyBjb250ZW50XG5cdFx0aWYgKCAhcy5oYXNDb250ZW50ICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgaGFzaCBzbyB3ZSBjYW4gcHV0IGl0IGJhY2tcblx0XHRcdHVuY2FjaGVkID0gcy51cmwuc2xpY2UoIGNhY2hlVVJMLmxlbmd0aCApO1xuXG5cdFx0XHQvLyBJZiBkYXRhIGlzIGF2YWlsYWJsZSBhbmQgc2hvdWxkIGJlIHByb2Nlc3NlZCwgYXBwZW5kIGRhdGEgdG8gdXJsXG5cdFx0XHRpZiAoIHMuZGF0YSAmJiAoIHMucHJvY2Vzc0RhdGEgfHwgdHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiApICkge1xuXHRcdFx0XHRjYWNoZVVSTCArPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gXCImXCIgOiBcIj9cIiApICsgcy5kYXRhO1xuXG5cdFx0XHRcdC8vICM5NjgyOiByZW1vdmUgZGF0YSBzbyB0aGF0IGl0J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1YWwgcmV0cnlcblx0XHRcdFx0ZGVsZXRlIHMuZGF0YTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIG9yIHVwZGF0ZSBhbnRpLWNhY2hlIHBhcmFtIGlmIG5lZWRlZFxuXHRcdFx0aWYgKCBzLmNhY2hlID09PSBmYWxzZSApIHtcblx0XHRcdFx0Y2FjaGVVUkwgPSBjYWNoZVVSTC5yZXBsYWNlKCByYW50aUNhY2hlLCBcIiQxXCIgKTtcblx0XHRcdFx0dW5jYWNoZWQgPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gXCImXCIgOiBcIj9cIiApICsgXCJfPVwiICsgKCBub25jZSsrICkgKyB1bmNhY2hlZDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUHV0IGhhc2ggYW5kIGFudGktY2FjaGUgb24gdGhlIFVSTCB0aGF0IHdpbGwgYmUgcmVxdWVzdGVkIChnaC0xNzMyKVxuXHRcdFx0cy51cmwgPSBjYWNoZVVSTCArIHVuY2FjaGVkO1xuXG5cdFx0Ly8gQ2hhbmdlICclMjAnIHRvICcrJyBpZiB0aGlzIGlzIGVuY29kZWQgZm9ybSBib2R5IGNvbnRlbnQgKGdoLTI2NTgpXG5cdFx0fSBlbHNlIGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiZcblx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiICkuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICkge1xuXHRcdFx0cy5kYXRhID0gcy5kYXRhLnJlcGxhY2UoIHIyMCwgXCIrXCIgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0aWYgKCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICkge1xuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU1vZGlmaWVkLVNpbmNlXCIsIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKTtcblx0XHRcdH1cblx0XHRcdGlmICggalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTm9uZS1NYXRjaFwiLCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVpbmcgc2VudFxuXHRcdGlmICggcy5kYXRhICYmIHMuaGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8fCBvcHRpb25zLmNvbnRlbnRUeXBlICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJDb250ZW50LVR5cGVcIiwgcy5jb250ZW50VHlwZSApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRoZSBzZXJ2ZXIsIGRlcGVuZGluZyBvbiB0aGUgZGF0YVR5cGVcblx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKFxuXHRcdFx0XCJBY2NlcHRcIixcblx0XHRcdHMuZGF0YVR5cGVzWyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gP1xuXHRcdFx0XHRzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSArXG5cdFx0XHRcdFx0KCBzLmRhdGFUeXBlc1sgMCBdICE9PSBcIipcIiA/IFwiLCBcIiArIGFsbFR5cGVzICsgXCI7IHE9MC4wMVwiIDogXCJcIiApIDpcblx0XHRcdFx0cy5hY2NlcHRzWyBcIipcIiBdXG5cdFx0KTtcblxuXHRcdC8vIENoZWNrIGZvciBoZWFkZXJzIG9wdGlvblxuXHRcdGZvciAoIGkgaW4gcy5oZWFkZXJzICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggaSwgcy5oZWFkZXJzWyBpIF0gKTtcblx0XHR9XG5cblx0XHQvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlwZXMgYW5kIGVhcmx5IGFib3J0XG5cdFx0aWYgKCBzLmJlZm9yZVNlbmQgJiZcblx0XHRcdCggcy5iZWZvcmVTZW5kLmNhbGwoIGNhbGxiYWNrQ29udGV4dCwganFYSFIsIHMgKSA9PT0gZmFsc2UgfHwgY29tcGxldGVkICkgKSB7XG5cblx0XHRcdC8vIEFib3J0IGlmIG5vdCBkb25lIGFscmVhZHkgYW5kIHJldHVyblxuXHRcdFx0cmV0dXJuIGpxWEhSLmFib3J0KCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWJvcnRpbmcgaXMgbm8gbG9uZ2VyIGEgY2FuY2VsbGF0aW9uXG5cdFx0c3RyQWJvcnQgPSBcImFib3J0XCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrcyBvbiBkZWZlcnJlZHNcblx0XHRjb21wbGV0ZURlZmVycmVkLmFkZCggcy5jb21wbGV0ZSApO1xuXHRcdGpxWEhSLmRvbmUoIHMuc3VjY2VzcyApO1xuXHRcdGpxWEhSLmZhaWwoIHMuZXJyb3IgKTtcblxuXHRcdC8vIEdldCB0cmFuc3BvcnRcblx0XHR0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9ydFxuXHRcdGlmICggIXRyYW5zcG9ydCApIHtcblx0XHRcdGRvbmUoIC0xLCBcIk5vIFRyYW5zcG9ydFwiICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSAxO1xuXG5cdFx0XHQvLyBTZW5kIGdsb2JhbCBldmVudFxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheFNlbmRcIiwgWyBqcVhIUiwgcyBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGFqYXhTZW5kLCBzdG9wIHRoZXJlXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaW1lb3V0XG5cdFx0XHRpZiAoIHMuYXN5bmMgJiYgcy50aW1lb3V0ID4gMCApIHtcblx0XHRcdFx0dGltZW91dFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGpxWEhSLmFib3J0KCBcInRpbWVvdXRcIiApO1xuXHRcdFx0XHR9LCBzLnRpbWVvdXQgKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29tcGxldGVkID0gZmFsc2U7XG5cdFx0XHRcdHRyYW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gUmV0aHJvdyBwb3N0LWNvbXBsZXRpb24gZXhjZXB0aW9uc1xuXHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUHJvcGFnYXRlIG90aGVycyBhcyByZXN1bHRzXG5cdFx0XHRcdGRvbmUoIC0xLCBlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBkb25lXG5cdFx0ZnVuY3Rpb24gZG9uZSggc3RhdHVzLCBuYXRpdmVTdGF0dXNUZXh0LCByZXNwb25zZXMsIGhlYWRlcnMgKSB7XG5cdFx0XHR2YXIgaXNTdWNjZXNzLCBzdWNjZXNzLCBlcnJvciwgcmVzcG9uc2UsIG1vZGlmaWVkLFxuXHRcdFx0XHRzdGF0dXNUZXh0ID0gbmF0aXZlU3RhdHVzVGV4dDtcblxuXHRcdFx0Ly8gSWdub3JlIHJlcGVhdCBpbnZvY2F0aW9uc1xuXHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29tcGxldGVkID0gdHJ1ZTtcblxuXHRcdFx0Ly8gQ2xlYXIgdGltZW91dCBpZiBpdCBleGlzdHNcblx0XHRcdGlmICggdGltZW91dFRpbWVyICkge1xuXHRcdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0VGltZXIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRGVyZWZlcmVuY2UgdHJhbnNwb3J0IGZvciBlYXJseSBnYXJiYWdlIGNvbGxlY3Rpb25cblx0XHRcdC8vIChubyBtYXR0ZXIgaG93IGxvbmcgdGhlIGpxWEhSIG9iamVjdCB3aWxsIGJlIHVzZWQpXG5cdFx0XHR0cmFuc3BvcnQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdC8vIENhY2hlIHJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyA9IGhlYWRlcnMgfHwgXCJcIjtcblxuXHRcdFx0Ly8gU2V0IHJlYWR5U3RhdGVcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSBzdGF0dXMgPiAwID8gNCA6IDA7XG5cblx0XHRcdC8vIERldGVybWluZSBpZiBzdWNjZXNzZnVsXG5cdFx0XHRpc1N1Y2Nlc3MgPSBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMgPT09IDMwNDtcblxuXHRcdFx0Ly8gR2V0IHJlc3BvbnNlIGRhdGFcblx0XHRcdGlmICggcmVzcG9uc2VzICkge1xuXHRcdFx0XHRyZXNwb25zZSA9IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCBubyBtYXR0ZXIgd2hhdCAodGhhdCB3YXkgcmVzcG9uc2VYWFggZmllbGRzIGFyZSBhbHdheXMgc2V0KVxuXHRcdFx0cmVzcG9uc2UgPSBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKTtcblxuXHRcdFx0Ly8gSWYgc3VjY2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmdcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXG5cdFx0XHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0XHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiTGFzdC1Nb2RpZmllZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJldGFnXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBpZiBubyBjb250ZW50XG5cdFx0XHRcdGlmICggc3RhdHVzID09PSAyMDQgfHwgcy50eXBlID09PSBcIkhFQURcIiApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub2NvbnRlbnRcIjtcblxuXHRcdFx0XHQvLyBpZiBub3QgbW9kaWZpZWRcblx0XHRcdFx0fSBlbHNlIGlmICggc3RhdHVzID09PSAzMDQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm90bW9kaWZpZWRcIjtcblxuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGRhdGEsIGxldCdzIGNvbnZlcnQgaXRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gcmVzcG9uc2Uuc3RhdGU7XG5cdFx0XHRcdFx0c3VjY2VzcyA9IHJlc3BvbnNlLmRhdGE7XG5cdFx0XHRcdFx0ZXJyb3IgPSByZXNwb25zZS5lcnJvcjtcblx0XHRcdFx0XHRpc1N1Y2Nlc3MgPSAhZXJyb3I7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gRXh0cmFjdCBlcnJvciBmcm9tIHN0YXR1c1RleHQgYW5kIG5vcm1hbGl6ZSBmb3Igbm9uLWFib3J0c1xuXHRcdFx0XHRlcnJvciA9IHN0YXR1c1RleHQ7XG5cdFx0XHRcdGlmICggc3RhdHVzIHx8ICFzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcImVycm9yXCI7XG5cdFx0XHRcdFx0aWYgKCBzdGF0dXMgPCAwICkge1xuXHRcdFx0XHRcdFx0c3RhdHVzID0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IGRhdGEgZm9yIHRoZSBmYWtlIHhociBvYmplY3Rcblx0XHRcdGpxWEhSLnN0YXR1cyA9IHN0YXR1cztcblx0XHRcdGpxWEhSLnN0YXR1c1RleHQgPSAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCApICsgXCJcIjtcblxuXHRcdFx0Ly8gU3VjY2Vzcy9FcnJvclxuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsgc3VjY2Vzcywgc3RhdHVzVGV4dCwganFYSFIgXSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7XG5cdFx0XHRzdGF0dXNDb2RlID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggaXNTdWNjZXNzID8gXCJhamF4U3VjY2Vzc1wiIDogXCJhamF4RXJyb3JcIixcblx0XHRcdFx0XHRbIGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBzdWNjZXNzIDogZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb21wbGV0ZVxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZC5maXJlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0IF0gKTtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheENvbXBsZXRlXCIsIFsganFYSFIsIHMgXSApO1xuXG5cdFx0XHRcdC8vIEhhbmRsZSB0aGUgZ2xvYmFsIEFKQVggY291bnRlclxuXHRcdFx0XHRpZiAoICEoIC0talF1ZXJ5LmFjdGl2ZSApICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdG9wXCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBqcVhIUjtcblx0fSxcblxuXHRnZXRKU09OOiBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgXCJqc29uXCIgKTtcblx0fSxcblxuXHRnZXRTY3JpcHQ6IGZ1bmN0aW9uKCB1cmwsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssIFwic2NyaXB0XCIgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcImdldFwiLCBcInBvc3RcIiBdLCBmdW5jdGlvbiggaSwgbWV0aG9kICkge1xuXHRqUXVlcnlbIG1ldGhvZCBdID0gZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2ssIHR5cGUgKSB7XG5cblx0XHQvLyBTaGlmdCBhcmd1bWVudHMgaWYgZGF0YSBhcmd1bWVudCB3YXMgb21pdHRlZFxuXHRcdGlmICggaXNGdW5jdGlvbiggZGF0YSApICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7XG5cdFx0XHRjYWxsYmFjayA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIFRoZSB1cmwgY2FuIGJlIGFuIG9wdGlvbnMgb2JqZWN0ICh3aGljaCB0aGVuIG11c3QgaGF2ZSAudXJsKVxuXHRcdHJldHVybiBqUXVlcnkuYWpheCggalF1ZXJ5LmV4dGVuZCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cdFx0XHR0eXBlOiBtZXRob2QsXG5cdFx0XHRkYXRhVHlwZTogdHlwZSxcblx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRzdWNjZXNzOiBjYWxsYmFja1xuXHRcdH0sIGpRdWVyeS5pc1BsYWluT2JqZWN0KCB1cmwgKSAmJiB1cmwgKSApO1xuXHR9O1xufSApO1xuXG5cbmpRdWVyeS5fZXZhbFVybCA9IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMgKSB7XG5cdHJldHVybiBqUXVlcnkuYWpheCgge1xuXHRcdHVybDogdXJsLFxuXG5cdFx0Ly8gTWFrZSB0aGlzIGV4cGxpY2l0LCBzaW5jZSB1c2VyIGNhbiBvdmVycmlkZSB0aGlzIHRocm91Z2ggYWpheFNldHVwICgjMTEyNjQpXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRkYXRhVHlwZTogXCJzY3JpcHRcIixcblx0XHRjYWNoZTogdHJ1ZSxcblx0XHRhc3luYzogZmFsc2UsXG5cdFx0Z2xvYmFsOiBmYWxzZSxcblxuXHRcdC8vIE9ubHkgZXZhbHVhdGUgdGhlIHJlc3BvbnNlIGlmIGl0IGlzIHN1Y2Nlc3NmdWwgKGdoLTQxMjYpXG5cdFx0Ly8gZGF0YUZpbHRlciBpcyBub3QgaW52b2tlZCBmb3IgZmFpbHVyZSByZXNwb25zZXMsIHNvIHVzaW5nIGl0IGluc3RlYWRcblx0XHQvLyBvZiB0aGUgZGVmYXVsdCBjb252ZXJ0ZXIgaXMga2x1ZGd5IGJ1dCBpdCB3b3Jrcy5cblx0XHRjb252ZXJ0ZXJzOiB7XG5cdFx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCkge31cblx0XHR9LFxuXHRcdGRhdGFGaWx0ZXI6IGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCByZXNwb25zZSwgb3B0aW9ucyApO1xuXHRcdH1cblx0fSApO1xufTtcblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHdyYXBBbGw6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciB3cmFwO1xuXG5cdFx0aWYgKCB0aGlzWyAwIF0gKSB7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIGh0bWwgKSApIHtcblx0XHRcdFx0aHRtbCA9IGh0bWwuY2FsbCggdGhpc1sgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRoZSBlbGVtZW50cyB0byB3cmFwIHRoZSB0YXJnZXQgYXJvdW5kXG5cdFx0XHR3cmFwID0galF1ZXJ5KCBodG1sLCB0aGlzWyAwIF0ub3duZXJEb2N1bWVudCApLmVxKCAwICkuY2xvbmUoIHRydWUgKTtcblxuXHRcdFx0aWYgKCB0aGlzWyAwIF0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0d3JhcC5pbnNlcnRCZWZvcmUoIHRoaXNbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHR3cmFwLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBlbGVtID0gdGhpcztcblxuXHRcdFx0XHR3aGlsZSAoIGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQgKSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZWxlbTtcblx0XHRcdH0gKS5hcHBlbmQoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR3cmFwSW5uZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBJbm5lciggaHRtbC5jYWxsKCB0aGlzLCBpICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0galF1ZXJ5KCB0aGlzICksXG5cdFx0XHRcdGNvbnRlbnRzID0gc2VsZi5jb250ZW50cygpO1xuXG5cdFx0XHRpZiAoIGNvbnRlbnRzLmxlbmd0aCApIHtcblx0XHRcdFx0Y29udGVudHMud3JhcEFsbCggaHRtbCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWxmLmFwcGVuZCggaHRtbCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHR3cmFwOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHR2YXIgaHRtbElzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCBodG1sICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGh0bWxJc0Z1bmN0aW9uID8gaHRtbC5jYWxsKCB0aGlzLCBpICkgOiBodG1sICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdHVud3JhcDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHRoaXMucGFyZW50KCBzZWxlY3RvciApLm5vdCggXCJib2R5XCIgKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLnJlcGxhY2VXaXRoKCB0aGlzLmNoaWxkTm9kZXMgKTtcblx0XHR9ICk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmhpZGRlbiA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gIWpRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSggZWxlbSApO1xufTtcbmpRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gISEoIGVsZW0ub2Zmc2V0V2lkdGggfHwgZWxlbS5vZmZzZXRIZWlnaHQgfHwgZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApO1xufTtcblxuXG5cblxualF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIgPSBmdW5jdGlvbigpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpO1xuXHR9IGNhdGNoICggZSApIHt9XG59O1xuXG52YXIgeGhyU3VjY2Vzc1N0YXR1cyA9IHtcblxuXHRcdC8vIEZpbGUgcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgY29kZSAwLCBhc3N1bWUgMjAwXG5cdFx0MDogMjAwLFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHQvLyAjMTQ1MDogc29tZXRpbWVzIElFIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDRcblx0XHQxMjIzOiAyMDRcblx0fSxcblx0eGhyU3VwcG9ydGVkID0galF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIoKTtcblxuc3VwcG9ydC5jb3JzID0gISF4aHJTdXBwb3J0ZWQgJiYgKCBcIndpdGhDcmVkZW50aWFsc1wiIGluIHhoclN1cHBvcnRlZCApO1xuc3VwcG9ydC5hamF4ID0geGhyU3VwcG9ydGVkID0gISF4aHJTdXBwb3J0ZWQ7XG5cbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0dmFyIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrO1xuXG5cdC8vIENyb3NzIGRvbWFpbiBvbmx5IGFsbG93ZWQgaWYgc3VwcG9ydGVkIHRocm91Z2ggWE1MSHR0cFJlcXVlc3Rcblx0aWYgKCBzdXBwb3J0LmNvcnMgfHwgeGhyU3VwcG9ydGVkICYmICFvcHRpb25zLmNyb3NzRG9tYWluICkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggaGVhZGVycywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHZhciBpLFxuXHRcdFx0XHRcdHhociA9IG9wdGlvbnMueGhyKCk7XG5cblx0XHRcdFx0eGhyLm9wZW4oXG5cdFx0XHRcdFx0b3B0aW9ucy50eXBlLFxuXHRcdFx0XHRcdG9wdGlvbnMudXJsLFxuXHRcdFx0XHRcdG9wdGlvbnMuYXN5bmMsXG5cdFx0XHRcdFx0b3B0aW9ucy51c2VybmFtZSxcblx0XHRcdFx0XHRvcHRpb25zLnBhc3N3b3JkXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Ly8gQXBwbHkgY3VzdG9tIGZpZWxkcyBpZiBwcm92aWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMueGhyRmllbGRzICkge1xuXHRcdFx0XHRcdGZvciAoIGkgaW4gb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0XHR4aHJbIGkgXSA9IG9wdGlvbnMueGhyRmllbGRzWyBpIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGUgbWltZSB0eXBlIGlmIG5lZWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMubWltZVR5cGUgJiYgeGhyLm92ZXJyaWRlTWltZVR5cGUgKSB7XG5cdFx0XHRcdFx0eGhyLm92ZXJyaWRlTWltZVR5cGUoIG9wdGlvbnMubWltZVR5cGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFgtUmVxdWVzdGVkLVdpdGggaGVhZGVyXG5cdFx0XHRcdC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25zIGZvciBhIHByZWZsaWdodCBhcmVcblx0XHRcdFx0Ly8gYWtpbiB0byBhIGppZ3NhdyBwdXp6bGUsIHdlIHNpbXBseSBuZXZlciBzZXQgaXQgdG8gYmUgc3VyZS5cblx0XHRcdFx0Ly8gKGl0IGNhbiBhbHdheXMgYmUgc2V0IG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMgb3IgZXZlbiB1c2luZyBhamF4U2V0dXApXG5cdFx0XHRcdC8vIEZvciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3ZpZGVkLlxuXHRcdFx0XHRpZiAoICFvcHRpb25zLmNyb3NzRG9tYWluICYmICFoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdICkge1xuXHRcdFx0XHRcdGhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gPSBcIlhNTEh0dHBSZXF1ZXN0XCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTZXQgaGVhZGVyc1xuXHRcdFx0XHRmb3IgKCBpIGluIGhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoIGksIGhlYWRlcnNbIGkgXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRjYWxsYmFjayA9IGVycm9yQ2FsbGJhY2sgPSB4aHIub25sb2FkID1cblx0XHRcdFx0XHRcdFx0XHR4aHIub25lcnJvciA9IHhoci5vbmFib3J0ID0geGhyLm9udGltZW91dCA9XG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiYWJvcnRcIiApIHtcblx0XHRcdFx0XHRcdFx0XHR4aHIuYWJvcnQoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggdHlwZSA9PT0gXCJlcnJvclwiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHQvLyBPbiBhIG1hbnVhbCBuYXRpdmUgYWJvcnQsIElFOSB0aHJvd3Ncblx0XHRcdFx0XHRcdFx0XHQvLyBlcnJvcnMgb24gYW55IHByb3BlcnR5IGFjY2VzcyB0aGF0IGlzIG5vdCByZWFkeVN0YXRlXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlb2YgeGhyLnN0YXR1cyAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCAwLCBcImVycm9yXCIgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRmlsZTogcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgMDsgc2VlICM4NjA1LCAjMTQyMDdcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHRcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyU3VjY2Vzc1N0YXR1c1sgeGhyLnN0YXR1cyBdIHx8IHhoci5zdGF0dXMsXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dCxcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHRcdC8vIElFOSBoYXMgbm8gWEhSMiBidXQgdGhyb3dzIG9uIGJpbmFyeSAodHJhYy0xMTQyNilcblx0XHRcdFx0XHRcdFx0XHRcdC8vIEZvciBYSFIyIG5vbi10ZXh0LCBsZXQgdGhlIGNhbGxlciBoYW5kbGUgaXQgKGdoLTI0OTgpXG5cdFx0XHRcdFx0XHRcdFx0XHQoIHhoci5yZXNwb25zZVR5cGUgfHwgXCJ0ZXh0XCIgKSAhPT0gXCJ0ZXh0XCIgIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgeGhyLnJlc3BvbnNlVGV4dCAhPT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgYmluYXJ5OiB4aHIucmVzcG9uc2UgfSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgdGV4dDogeGhyLnJlc3BvbnNlVGV4dCB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gTGlzdGVuIHRvIGV2ZW50c1xuXHRcdFx0XHR4aHIub25sb2FkID0gY2FsbGJhY2soKTtcblx0XHRcdFx0ZXJyb3JDYWxsYmFjayA9IHhoci5vbmVycm9yID0geGhyLm9udGltZW91dCA9IGNhbGxiYWNrKCBcImVycm9yXCIgKTtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHRcdFx0Ly8gVXNlIG9ucmVhZHlzdGF0ZWNoYW5nZSB0byByZXBsYWNlIG9uYWJvcnRcblx0XHRcdFx0Ly8gdG8gaGFuZGxlIHVuY2F1Z2h0IGFib3J0c1xuXHRcdFx0XHRpZiAoIHhoci5vbmFib3J0ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0eGhyLm9uYWJvcnQgPSBlcnJvckNhbGxiYWNrO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2hlY2sgcmVhZHlTdGF0ZSBiZWZvcmUgdGltZW91dCBhcyBpdCBjaGFuZ2VzXG5cdFx0XHRcdFx0XHRpZiAoIHhoci5yZWFkeVN0YXRlID09PSA0ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFsbG93IG9uZXJyb3IgdG8gYmUgY2FsbGVkIGZpcnN0LFxuXHRcdFx0XHRcdFx0XHQvLyBidXQgdGhhdCB3aWxsIG5vdCBoYW5kbGUgYSBuYXRpdmUgYWJvcnRcblx0XHRcdFx0XHRcdFx0Ly8gQWxzbywgc2F2ZSBlcnJvckNhbGxiYWNrIHRvIGEgdmFyaWFibGVcblx0XHRcdFx0XHRcdFx0Ly8gYXMgeGhyLm9uZXJyb3IgY2Fubm90IGJlIGFjY2Vzc2VkXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIGFib3J0IGNhbGxiYWNrXG5cdFx0XHRcdGNhbGxiYWNrID0gY2FsbGJhY2soIFwiYWJvcnRcIiApO1xuXG5cdFx0XHRcdHRyeSB7XG5cblx0XHRcdFx0XHQvLyBEbyBzZW5kIHRoZSByZXF1ZXN0ICh0aGlzIG1heSByYWlzZSBhbiBleGNlcHRpb24pXG5cdFx0XHRcdFx0eGhyLnNlbmQoIG9wdGlvbnMuaGFzQ29udGVudCAmJiBvcHRpb25zLmRhdGEgfHwgbnVsbCApO1xuXHRcdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRcdC8vICMxNDY4MzogT25seSByZXRocm93IGlmIHRoaXMgaGFzbid0IGJlZW4gbm90aWZpZWQgYXMgYW4gZXJyb3IgeWV0XG5cdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUHJldmVudCBhdXRvLWV4ZWN1dGlvbiBvZiBzY3JpcHRzIHdoZW4gbm8gZXhwbGljaXQgZGF0YVR5cGUgd2FzIHByb3ZpZGVkIChTZWUgZ2gtMjQzMilcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBmdW5jdGlvbiggcyApIHtcblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMuY29udGVudHMuc2NyaXB0ID0gZmFsc2U7XG5cdH1cbn0gKTtcblxuLy8gSW5zdGFsbCBzY3JpcHQgZGF0YVR5cGVcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0YWNjZXB0czoge1xuXHRcdHNjcmlwdDogXCJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIFwiICtcblx0XHRcdFwiYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0XCJcblx0fSxcblx0Y29udGVudHM6IHtcblx0XHRzY3JpcHQ6IC9cXGIoPzpqYXZhfGVjbWEpc2NyaXB0XFxiL1xuXHR9LFxuXHRjb252ZXJ0ZXJzOiB7XG5cdFx0XCJ0ZXh0IHNjcmlwdFwiOiBmdW5jdGlvbiggdGV4dCApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCB0ZXh0ICk7XG5cdFx0XHRyZXR1cm4gdGV4dDtcblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gSGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBjcm9zc0RvbWFpblxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY2FjaGUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRzLmNhY2hlID0gZmFsc2U7XG5cdH1cblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMudHlwZSA9IFwiR0VUXCI7XG5cdH1cbn0gKTtcblxuLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNwb3J0XG5qUXVlcnkuYWpheFRyYW5zcG9ydCggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cblx0Ly8gVGhpcyB0cmFuc3BvcnQgb25seSBkZWFscyB3aXRoIGNyb3NzIGRvbWFpbiBvciBmb3JjZWQtYnktYXR0cnMgcmVxdWVzdHNcblx0aWYgKCBzLmNyb3NzRG9tYWluIHx8IHMuc2NyaXB0QXR0cnMgKSB7XG5cdFx0dmFyIHNjcmlwdCwgY2FsbGJhY2s7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBfLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0c2NyaXB0ID0galF1ZXJ5KCBcIjxzY3JpcHQ+XCIgKVxuXHRcdFx0XHRcdC5hdHRyKCBzLnNjcmlwdEF0dHJzIHx8IHt9IClcblx0XHRcdFx0XHQucHJvcCggeyBjaGFyc2V0OiBzLnNjcmlwdENoYXJzZXQsIHNyYzogcy51cmwgfSApXG5cdFx0XHRcdFx0Lm9uKCBcImxvYWQgZXJyb3JcIiwgY2FsbGJhY2sgPSBmdW5jdGlvbiggZXZ0ICkge1xuXHRcdFx0XHRcdFx0c2NyaXB0LnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBudWxsO1xuXHRcdFx0XHRcdFx0aWYgKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCBldnQudHlwZSA9PT0gXCJlcnJvclwiID8gNDA0IDogMjAwLCBldnQudHlwZSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHQvLyBVc2UgbmF0aXZlIERPTSBtYW5pcHVsYXRpb24gdG8gYXZvaWQgb3VyIGRvbU1hbmlwIEFKQVggdHJpY2tlcnlcblx0XHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0WyAwIF0gKTtcblx0XHRcdH0sXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIG9sZENhbGxiYWNrcyA9IFtdLFxuXHRyanNvbnAgPSAvKD0pXFw/KD89JnwkKXxcXD9cXD8vO1xuXG4vLyBEZWZhdWx0IGpzb25wIHNldHRpbmdzXG5qUXVlcnkuYWpheFNldHVwKCB7XG5cdGpzb25wOiBcImNhbGxiYWNrXCIsXG5cdGpzb25wQ2FsbGJhY2s6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBjYWxsYmFjayA9IG9sZENhbGxiYWNrcy5wb3AoKSB8fCAoIGpRdWVyeS5leHBhbmRvICsgXCJfXCIgKyAoIG5vbmNlKysgKSApO1xuXHRcdHRoaXNbIGNhbGxiYWNrIF0gPSB0cnVlO1xuXHRcdHJldHVybiBjYWxsYmFjaztcblx0fVxufSApO1xuXG4vLyBEZXRlY3QsIG5vcm1hbGl6ZSBvcHRpb25zIGFuZCBpbnN0YWxsIGNhbGxiYWNrcyBmb3IganNvbnAgcmVxdWVzdHNcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcImpzb24ganNvbnBcIiwgZnVuY3Rpb24oIHMsIG9yaWdpbmFsU2V0dGluZ3MsIGpxWEhSICkge1xuXG5cdHZhciBjYWxsYmFja05hbWUsIG92ZXJ3cml0dGVuLCByZXNwb25zZUNvbnRhaW5lcixcblx0XHRqc29uUHJvcCA9IHMuanNvbnAgIT09IGZhbHNlICYmICggcmpzb25wLnRlc3QoIHMudXJsICkgP1xuXHRcdFx0XCJ1cmxcIiA6XG5cdFx0XHR0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiIClcblx0XHRcdFx0XHQuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICYmXG5cdFx0XHRcdHJqc29ucC50ZXN0KCBzLmRhdGEgKSAmJiBcImRhdGFcIlxuXHRcdCk7XG5cblx0Ly8gSGFuZGxlIGlmZiB0aGUgZXhwZWN0ZWQgZGF0YSB0eXBlIGlzIFwianNvbnBcIiBvciB3ZSBoYXZlIGEgcGFyYW1ldGVyIHRvIHNldFxuXHRpZiAoIGpzb25Qcm9wIHx8IHMuZGF0YVR5cGVzWyAwIF0gPT09IFwianNvbnBcIiApIHtcblxuXHRcdC8vIEdldCBjYWxsYmFjayBuYW1lLCByZW1lbWJlcmluZyBwcmVleGlzdGluZyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggaXRcblx0XHRjYWxsYmFja05hbWUgPSBzLmpzb25wQ2FsbGJhY2sgPSBpc0Z1bmN0aW9uKCBzLmpzb25wQ2FsbGJhY2sgKSA/XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2soKSA6XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2s7XG5cblx0XHQvLyBJbnNlcnQgY2FsbGJhY2sgaW50byB1cmwgb3IgZm9ybSBkYXRhXG5cdFx0aWYgKCBqc29uUHJvcCApIHtcblx0XHRcdHNbIGpzb25Qcm9wIF0gPSBzWyBqc29uUHJvcCBdLnJlcGxhY2UoIHJqc29ucCwgXCIkMVwiICsgY2FsbGJhY2tOYW1lICk7XG5cdFx0fSBlbHNlIGlmICggcy5qc29ucCAhPT0gZmFsc2UgKSB7XG5cdFx0XHRzLnVybCArPSAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gXCImXCIgOiBcIj9cIiApICsgcy5qc29ucCArIFwiPVwiICsgY2FsbGJhY2tOYW1lO1xuXHRcdH1cblxuXHRcdC8vIFVzZSBkYXRhIGNvbnZlcnRlciB0byByZXRyaWV2ZSBqc29uIGFmdGVyIHNjcmlwdCBleGVjdXRpb25cblx0XHRzLmNvbnZlcnRlcnNbIFwic2NyaXB0IGpzb25cIiBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoICFyZXNwb25zZUNvbnRhaW5lciApIHtcblx0XHRcdFx0alF1ZXJ5LmVycm9yKCBjYWxsYmFja05hbWUgKyBcIiB3YXMgbm90IGNhbGxlZFwiICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzcG9uc2VDb250YWluZXJbIDAgXTtcblx0XHR9O1xuXG5cdFx0Ly8gRm9yY2UganNvbiBkYXRhVHlwZVxuXHRcdHMuZGF0YVR5cGVzWyAwIF0gPSBcImpzb25cIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tcblx0XHRvdmVyd3JpdHRlbiA9IHdpbmRvd1sgY2FsbGJhY2tOYW1lIF07XG5cdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBhcmd1bWVudHM7XG5cdFx0fTtcblxuXHRcdC8vIENsZWFuLXVwIGZ1bmN0aW9uIChmaXJlcyBhZnRlciBjb252ZXJ0ZXJzKVxuXHRcdGpxWEhSLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIElmIHByZXZpb3VzIHZhbHVlIGRpZG4ndCBleGlzdCAtIHJlbW92ZSBpdFxuXHRcdFx0aWYgKCBvdmVyd3JpdHRlbiA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRqUXVlcnkoIHdpbmRvdyApLnJlbW92ZVByb3AoIGNhbGxiYWNrTmFtZSApO1xuXG5cdFx0XHQvLyBPdGhlcndpc2UgcmVzdG9yZSBwcmVleGlzdGluZyB2YWx1ZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IG92ZXJ3cml0dGVuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTYXZlIGJhY2sgYXMgZnJlZVxuXHRcdFx0aWYgKCBzWyBjYWxsYmFja05hbWUgXSApIHtcblxuXHRcdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCByZS11c2luZyB0aGUgb3B0aW9ucyBkb2Vzbid0IHNjcmV3IHRoaW5ncyBhcm91bmRcblx0XHRcdFx0cy5qc29ucENhbGxiYWNrID0gb3JpZ2luYWxTZXR0aW5ncy5qc29ucENhbGxiYWNrO1xuXG5cdFx0XHRcdC8vIFNhdmUgdGhlIGNhbGxiYWNrIG5hbWUgZm9yIGZ1dHVyZSB1c2Vcblx0XHRcdFx0b2xkQ2FsbGJhY2tzLnB1c2goIGNhbGxiYWNrTmFtZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDYWxsIGlmIGl0IHdhcyBhIGZ1bmN0aW9uIGFuZCB3ZSBoYXZlIGEgcmVzcG9uc2Vcblx0XHRcdGlmICggcmVzcG9uc2VDb250YWluZXIgJiYgaXNGdW5jdGlvbiggb3ZlcndyaXR0ZW4gKSApIHtcblx0XHRcdFx0b3ZlcndyaXR0ZW4oIHJlc3BvbnNlQ29udGFpbmVyWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBvdmVyd3JpdHRlbiA9IHVuZGVmaW5lZDtcblx0XHR9ICk7XG5cblx0XHQvLyBEZWxlZ2F0ZSB0byBzY3JpcHRcblx0XHRyZXR1cm4gXCJzY3JpcHRcIjtcblx0fVxufSApO1xuXG5cblxuXG4vLyBTdXBwb3J0OiBTYWZhcmkgOCBvbmx5XG4vLyBJbiBTYWZhcmkgOCBkb2N1bWVudHMgY3JlYXRlZCB2aWEgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50XG4vLyBjb2xsYXBzZSBzaWJsaW5nIGZvcm1zOiB0aGUgc2Vjb25kIG9uZSBiZWNvbWVzIGEgY2hpbGQgb2YgdGhlIGZpcnN0IG9uZS5cbi8vIEJlY2F1c2Ugb2YgdGhhdCwgdGhpcyBzZWN1cml0eSBtZWFzdXJlIGhhcyB0byBiZSBkaXNhYmxlZCBpbiBTYWZhcmkgOC5cbi8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzczMzdcbnN1cHBvcnQuY3JlYXRlSFRNTERvY3VtZW50ID0gKCBmdW5jdGlvbigpIHtcblx0dmFyIGJvZHkgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKS5ib2R5O1xuXHRib2R5LmlubmVySFRNTCA9IFwiPGZvcm0+PC9mb3JtPjxmb3JtPjwvZm9ybT5cIjtcblx0cmV0dXJuIGJvZHkuY2hpbGROb2Rlcy5sZW5ndGggPT09IDI7XG59ICkoKTtcblxuXG4vLyBBcmd1bWVudCBcImRhdGFcIiBzaG91bGQgYmUgc3RyaW5nIG9mIGh0bWxcbi8vIGNvbnRleHQgKG9wdGlvbmFsKTogSWYgc3BlY2lmaWVkLCB0aGUgZnJhZ21lbnQgd2lsbCBiZSBjcmVhdGVkIGluIHRoaXMgY29udGV4dCxcbi8vIGRlZmF1bHRzIHRvIGRvY3VtZW50XG4vLyBrZWVwU2NyaXB0cyAob3B0aW9uYWwpOiBJZiB0cnVlLCB3aWxsIGluY2x1ZGUgc2NyaXB0cyBwYXNzZWQgaW4gdGhlIGh0bWwgc3RyaW5nXG5qUXVlcnkucGFyc2VIVE1MID0gZnVuY3Rpb24oIGRhdGEsIGNvbnRleHQsIGtlZXBTY3JpcHRzICkge1xuXHRpZiAoIHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRrZWVwU2NyaXB0cyA9IGNvbnRleHQ7XG5cdFx0Y29udGV4dCA9IGZhbHNlO1xuXHR9XG5cblx0dmFyIGJhc2UsIHBhcnNlZCwgc2NyaXB0cztcblxuXHRpZiAoICFjb250ZXh0ICkge1xuXG5cdFx0Ly8gU3RvcCBzY3JpcHRzIG9yIGlubGluZSBldmVudCBoYW5kbGVycyBmcm9tIGJlaW5nIGV4ZWN1dGVkIGltbWVkaWF0ZWx5XG5cdFx0Ly8gYnkgdXNpbmcgZG9jdW1lbnQuaW1wbGVtZW50YXRpb25cblx0XHRpZiAoIHN1cHBvcnQuY3JlYXRlSFRNTERvY3VtZW50ICkge1xuXHRcdFx0Y29udGV4dCA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCggXCJcIiApO1xuXG5cdFx0XHQvLyBTZXQgdGhlIGJhc2UgaHJlZiBmb3IgdGhlIGNyZWF0ZWQgZG9jdW1lbnRcblx0XHRcdC8vIHNvIGFueSBwYXJzZWQgZWxlbWVudHMgd2l0aCBVUkxzXG5cdFx0XHQvLyBhcmUgYmFzZWQgb24gdGhlIGRvY3VtZW50J3MgVVJMIChnaC0yOTY1KVxuXHRcdFx0YmFzZSA9IGNvbnRleHQuY3JlYXRlRWxlbWVudCggXCJiYXNlXCIgKTtcblx0XHRcdGJhc2UuaHJlZiA9IGRvY3VtZW50LmxvY2F0aW9uLmhyZWY7XG5cdFx0XHRjb250ZXh0LmhlYWQuYXBwZW5kQ2hpbGQoIGJhc2UgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGV4dCA9IGRvY3VtZW50O1xuXHRcdH1cblx0fVxuXG5cdHBhcnNlZCA9IHJzaW5nbGVUYWcuZXhlYyggZGF0YSApO1xuXHRzY3JpcHRzID0gIWtlZXBTY3JpcHRzICYmIFtdO1xuXG5cdC8vIFNpbmdsZSB0YWdcblx0aWYgKCBwYXJzZWQgKSB7XG5cdFx0cmV0dXJuIFsgY29udGV4dC5jcmVhdGVFbGVtZW50KCBwYXJzZWRbIDEgXSApIF07XG5cdH1cblxuXHRwYXJzZWQgPSBidWlsZEZyYWdtZW50KCBbIGRhdGEgXSwgY29udGV4dCwgc2NyaXB0cyApO1xuXG5cdGlmICggc2NyaXB0cyAmJiBzY3JpcHRzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkoIHNjcmlwdHMgKS5yZW1vdmUoKTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBwYXJzZWQuY2hpbGROb2RlcyApO1xufTtcblxuXG4vKipcbiAqIExvYWQgYSB1cmwgaW50byBhIHBhZ2VcbiAqL1xualF1ZXJ5LmZuLmxvYWQgPSBmdW5jdGlvbiggdXJsLCBwYXJhbXMsIGNhbGxiYWNrICkge1xuXHR2YXIgc2VsZWN0b3IsIHR5cGUsIHJlc3BvbnNlLFxuXHRcdHNlbGYgPSB0aGlzLFxuXHRcdG9mZiA9IHVybC5pbmRleE9mKCBcIiBcIiApO1xuXG5cdGlmICggb2ZmID4gLTEgKSB7XG5cdFx0c2VsZWN0b3IgPSBzdHJpcEFuZENvbGxhcHNlKCB1cmwuc2xpY2UoIG9mZiApICk7XG5cdFx0dXJsID0gdXJsLnNsaWNlKCAwLCBvZmYgKTtcblx0fVxuXG5cdC8vIElmIGl0J3MgYSBmdW5jdGlvblxuXHRpZiAoIGlzRnVuY3Rpb24oIHBhcmFtcyApICkge1xuXG5cdFx0Ly8gV2UgYXNzdW1lIHRoYXQgaXQncyB0aGUgY2FsbGJhY2tcblx0XHRjYWxsYmFjayA9IHBhcmFtcztcblx0XHRwYXJhbXMgPSB1bmRlZmluZWQ7XG5cblx0Ly8gT3RoZXJ3aXNlLCBidWlsZCBhIHBhcmFtIHN0cmluZ1xuXHR9IGVsc2UgaWYgKCBwYXJhbXMgJiYgdHlwZW9mIHBhcmFtcyA9PT0gXCJvYmplY3RcIiApIHtcblx0XHR0eXBlID0gXCJQT1NUXCI7XG5cdH1cblxuXHQvLyBJZiB3ZSBoYXZlIGVsZW1lbnRzIHRvIG1vZGlmeSwgbWFrZSB0aGUgcmVxdWVzdFxuXHRpZiAoIHNlbGYubGVuZ3RoID4gMCApIHtcblx0XHRqUXVlcnkuYWpheCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cblx0XHRcdC8vIElmIFwidHlwZVwiIHZhcmlhYmxlIGlzIHVuZGVmaW5lZCwgdGhlbiBcIkdFVFwiIG1ldGhvZCB3aWxsIGJlIHVzZWQuXG5cdFx0XHQvLyBNYWtlIHZhbHVlIG9mIHRoaXMgZmllbGQgZXhwbGljaXQgc2luY2Vcblx0XHRcdC8vIHVzZXIgY2FuIG92ZXJyaWRlIGl0IHRocm91Z2ggYWpheFNldHVwIG1ldGhvZFxuXHRcdFx0dHlwZTogdHlwZSB8fCBcIkdFVFwiLFxuXHRcdFx0ZGF0YVR5cGU6IFwiaHRtbFwiLFxuXHRcdFx0ZGF0YTogcGFyYW1zXG5cdFx0fSApLmRvbmUoIGZ1bmN0aW9uKCByZXNwb25zZVRleHQgKSB7XG5cblx0XHRcdC8vIFNhdmUgcmVzcG9uc2UgZm9yIHVzZSBpbiBjb21wbGV0ZSBjYWxsYmFja1xuXHRcdFx0cmVzcG9uc2UgPSBhcmd1bWVudHM7XG5cblx0XHRcdHNlbGYuaHRtbCggc2VsZWN0b3IgP1xuXG5cdFx0XHRcdC8vIElmIGEgc2VsZWN0b3Igd2FzIHNwZWNpZmllZCwgbG9jYXRlIHRoZSByaWdodCBlbGVtZW50cyBpbiBhIGR1bW15IGRpdlxuXHRcdFx0XHQvLyBFeGNsdWRlIHNjcmlwdHMgdG8gYXZvaWQgSUUgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJvcnNcblx0XHRcdFx0alF1ZXJ5KCBcIjxkaXY+XCIgKS5hcHBlbmQoIGpRdWVyeS5wYXJzZUhUTUwoIHJlc3BvbnNlVGV4dCApICkuZmluZCggc2VsZWN0b3IgKSA6XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHVzZSB0aGUgZnVsbCByZXN1bHRcblx0XHRcdFx0cmVzcG9uc2VUZXh0ICk7XG5cblx0XHQvLyBJZiB0aGUgcmVxdWVzdCBzdWNjZWVkcywgdGhpcyBmdW5jdGlvbiBnZXRzIFwiZGF0YVwiLCBcInN0YXR1c1wiLCBcImpxWEhSXCJcblx0XHQvLyBidXQgdGhleSBhcmUgaWdub3JlZCBiZWNhdXNlIHJlc3BvbnNlIHdhcyBzZXQgYWJvdmUuXG5cdFx0Ly8gSWYgaXQgZmFpbHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImpxWEhSXCIsIFwic3RhdHVzXCIsIFwiZXJyb3JcIlxuXHRcdH0gKS5hbHdheXMoIGNhbGxiYWNrICYmIGZ1bmN0aW9uKCBqcVhIUiwgc3RhdHVzICkge1xuXHRcdFx0c2VsZi5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Y2FsbGJhY2suYXBwbHkoIHRoaXMsIHJlc3BvbnNlIHx8IFsganFYSFIucmVzcG9uc2VUZXh0LCBzdGF0dXMsIGpxWEhSIF0gKTtcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn07XG5cblxuXG5cbi8vIEF0dGFjaCBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgY29tbW9uIEFKQVggZXZlbnRzXG5qUXVlcnkuZWFjaCggW1xuXHRcImFqYXhTdGFydFwiLFxuXHRcImFqYXhTdG9wXCIsXG5cdFwiYWpheENvbXBsZXRlXCIsXG5cdFwiYWpheEVycm9yXCIsXG5cdFwiYWpheFN1Y2Nlc3NcIixcblx0XCJhamF4U2VuZFwiXG5dLCBmdW5jdGlvbiggaSwgdHlwZSApIHtcblx0alF1ZXJ5LmZuWyB0eXBlIF0gPSBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGUsIGZuICk7XG5cdH07XG59ICk7XG5cblxuXG5cbmpRdWVyeS5leHByLnBzZXVkb3MuYW5pbWF0ZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuIGpRdWVyeS5ncmVwKCBqUXVlcnkudGltZXJzLCBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW0gPT09IGZuLmVsZW07XG5cdH0gKS5sZW5ndGg7XG59O1xuXG5cblxuXG5qUXVlcnkub2Zmc2V0ID0ge1xuXHRzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkge1xuXHRcdHZhciBjdXJQb3NpdGlvbiwgY3VyTGVmdCwgY3VyQ1NTVG9wLCBjdXJUb3AsIGN1ck9mZnNldCwgY3VyQ1NTTGVmdCwgY2FsY3VsYXRlUG9zaXRpb24sXG5cdFx0XHRwb3NpdGlvbiA9IGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApLFxuXHRcdFx0Y3VyRWxlbSA9IGpRdWVyeSggZWxlbSApLFxuXHRcdFx0cHJvcHMgPSB7fTtcblxuXHRcdC8vIFNldCBwb3NpdGlvbiBmaXJzdCwgaW4tY2FzZSB0b3AvbGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW1cblx0XHRpZiAoIHBvc2l0aW9uID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0ZWxlbS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcblx0XHR9XG5cblx0XHRjdXJPZmZzZXQgPSBjdXJFbGVtLm9mZnNldCgpO1xuXHRcdGN1ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwidG9wXCIgKTtcblx0XHRjdXJDU1NMZWZ0ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJsZWZ0XCIgKTtcblx0XHRjYWxjdWxhdGVQb3NpdGlvbiA9ICggcG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiB8fCBwb3NpdGlvbiA9PT0gXCJmaXhlZFwiICkgJiZcblx0XHRcdCggY3VyQ1NTVG9wICsgY3VyQ1NTTGVmdCApLmluZGV4T2YoIFwiYXV0b1wiICkgPiAtMTtcblxuXHRcdC8vIE5lZWQgdG8gYmUgYWJsZSB0byBjYWxjdWxhdGUgcG9zaXRpb24gaWYgZWl0aGVyXG5cdFx0Ly8gdG9wIG9yIGxlZnQgaXMgYXV0byBhbmQgcG9zaXRpb24gaXMgZWl0aGVyIGFic29sdXRlIG9yIGZpeGVkXG5cdFx0aWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHtcblx0XHRcdGN1clBvc2l0aW9uID0gY3VyRWxlbS5wb3NpdGlvbigpO1xuXHRcdFx0Y3VyVG9wID0gY3VyUG9zaXRpb24udG9wO1xuXHRcdFx0Y3VyTGVmdCA9IGN1clBvc2l0aW9uLmxlZnQ7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyVG9wID0gcGFyc2VGbG9hdCggY3VyQ1NTVG9wICkgfHwgMDtcblx0XHRcdGN1ckxlZnQgPSBwYXJzZUZsb2F0KCBjdXJDU1NMZWZ0ICkgfHwgMDtcblx0XHR9XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIG9wdGlvbnMgKSApIHtcblxuXHRcdFx0Ly8gVXNlIGpRdWVyeS5leHRlbmQgaGVyZSB0byBhbGxvdyBtb2RpZmljYXRpb24gb2YgY29vcmRpbmF0ZXMgYXJndW1lbnQgKGdoLTE4NDgpXG5cdFx0XHRvcHRpb25zID0gb3B0aW9ucy5jYWxsKCBlbGVtLCBpLCBqUXVlcnkuZXh0ZW5kKCB7fSwgY3VyT2Zmc2V0ICkgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdGlvbnMudG9wICE9IG51bGwgKSB7XG5cdFx0XHRwcm9wcy50b3AgPSAoIG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCApICsgY3VyVG9wO1xuXHRcdH1cblx0XHRpZiAoIG9wdGlvbnMubGVmdCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMubGVmdCA9ICggb3B0aW9ucy5sZWZ0IC0gY3VyT2Zmc2V0LmxlZnQgKSArIGN1ckxlZnQ7XG5cdFx0fVxuXG5cdFx0aWYgKCBcInVzaW5nXCIgaW4gb3B0aW9ucyApIHtcblx0XHRcdG9wdGlvbnMudXNpbmcuY2FsbCggZWxlbSwgcHJvcHMgKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJFbGVtLmNzcyggcHJvcHMgKTtcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHQvLyBvZmZzZXQoKSByZWxhdGVzIGFuIGVsZW1lbnQncyBib3JkZXIgYm94IHRvIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b2Zmc2V0OiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHRcdC8vIFByZXNlcnZlIGNoYWluaW5nIGZvciBzZXR0ZXJcblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0dGhpcyA6XG5cdFx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTtcblx0XHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHZhciByZWN0LCB3aW4sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gemVyb3MgZm9yIGRpc2Nvbm5lY3RlZCBhbmQgaGlkZGVuIChkaXNwbGF5OiBub25lKSBlbGVtZW50cyAoZ2gtMjMxMClcblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhXG5cdFx0Ly8gZGlzY29ubmVjdGVkIG5vZGUgaW4gSUUgdGhyb3dzIGFuIGVycm9yXG5cdFx0aWYgKCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB7IHRvcDogMCwgbGVmdDogMCB9O1xuXHRcdH1cblxuXHRcdC8vIEdldCBkb2N1bWVudC1yZWxhdGl2ZSBwb3NpdGlvbiBieSBhZGRpbmcgdmlld3BvcnQgc2Nyb2xsIHRvIHZpZXdwb3J0LXJlbGF0aXZlIGdCQ1Jcblx0XHRyZWN0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHR3aW4gPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogcmVjdC50b3AgKyB3aW4ucGFnZVlPZmZzZXQsXG5cdFx0XHRsZWZ0OiByZWN0LmxlZnQgKyB3aW4ucGFnZVhPZmZzZXRcblx0XHR9O1xuXHR9LFxuXG5cdC8vIHBvc2l0aW9uKCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgbWFyZ2luIGJveCB0byBpdHMgb2Zmc2V0IHBhcmVudCdzIHBhZGRpbmcgYm94XG5cdC8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGJlaGF2aW9yIG9mIENTUyBhYnNvbHV0ZSBwb3NpdGlvbmluZ1xuXHRwb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCAhdGhpc1sgMCBdICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBvZmZzZXRQYXJlbnQsIG9mZnNldCwgZG9jLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdHBhcmVudE9mZnNldCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cblx0XHQvLyBwb3NpdGlvbjpmaXhlZCBlbGVtZW50cyBhcmUgb2Zmc2V0IGZyb20gdGhlIHZpZXdwb3J0LCB3aGljaCBpdHNlbGYgYWx3YXlzIGhhcyB6ZXJvIG9mZnNldFxuXHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICkgPT09IFwiZml4ZWRcIiApIHtcblxuXHRcdFx0Ly8gQXNzdW1lIHBvc2l0aW9uOmZpeGVkIGltcGxpZXMgYXZhaWxhYmlsaXR5IG9mIGdldEJvdW5kaW5nQ2xpZW50UmVjdFxuXHRcdFx0b2Zmc2V0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvZmZzZXQgPSB0aGlzLm9mZnNldCgpO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB0aGUgKnJlYWwqIG9mZnNldCBwYXJlbnQsIHdoaWNoIGNhbiBiZSB0aGUgZG9jdW1lbnQgb3IgaXRzIHJvb3QgZWxlbWVudFxuXHRcdFx0Ly8gd2hlbiBhIHN0YXRpY2FsbHkgcG9zaXRpb25lZCBlbGVtZW50IGlzIGlkZW50aWZpZWRcblx0XHRcdGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudDtcblx0XHRcdG9mZnNldFBhcmVudCA9IGVsZW0ub2Zmc2V0UGFyZW50IHx8IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJlxuXHRcdFx0XHQoIG9mZnNldFBhcmVudCA9PT0gZG9jLmJvZHkgfHwgb2Zmc2V0UGFyZW50ID09PSBkb2MuZG9jdW1lbnRFbGVtZW50ICkgJiZcblx0XHRcdFx0alF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcInBvc2l0aW9uXCIgKSA9PT0gXCJzdGF0aWNcIiApIHtcblxuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGlmICggb2Zmc2V0UGFyZW50ICYmIG9mZnNldFBhcmVudCAhPT0gZWxlbSAmJiBvZmZzZXRQYXJlbnQubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgYm9yZGVycyBpbnRvIGl0cyBvZmZzZXQsIHNpbmNlIHRoZXkgYXJlIG91dHNpZGUgaXRzIGNvbnRlbnQgb3JpZ2luXG5cdFx0XHRcdHBhcmVudE9mZnNldCA9IGpRdWVyeSggb2Zmc2V0UGFyZW50ICkub2Zmc2V0KCk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC50b3AgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlclRvcFdpZHRoXCIsIHRydWUgKTtcblx0XHRcdFx0cGFyZW50T2Zmc2V0LmxlZnQgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlckxlZnRXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU3VidHJhY3QgcGFyZW50IG9mZnNldHMgYW5kIGVsZW1lbnQgbWFyZ2luc1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IG9mZnNldC50b3AgLSBwYXJlbnRPZmZzZXQudG9wIC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5Ub3BcIiwgdHJ1ZSApLFxuXHRcdFx0bGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luTGVmdFwiLCB0cnVlIClcblx0XHR9O1xuXHR9LFxuXG5cdC8vIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGRvY3VtZW50RWxlbWVudCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuXHQvLyAxKSBGb3IgdGhlIGVsZW1lbnQgaW5zaWRlIHRoZSBpZnJhbWUgd2l0aG91dCBvZmZzZXRQYXJlbnQsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuXG5cdC8vICAgIGRvY3VtZW50RWxlbWVudCBvZiB0aGUgcGFyZW50IHdpbmRvd1xuXHQvLyAyKSBGb3IgdGhlIGhpZGRlbiBvciBkZXRhY2hlZCBlbGVtZW50XG5cdC8vIDMpIEZvciBib2R5IG9yIGh0bWwgZWxlbWVudCwgaS5lLiBpbiBjYXNlIG9mIHRoZSBodG1sIG5vZGUgLSBpdCB3aWxsIHJldHVybiBpdHNlbGZcblx0Ly9cblx0Ly8gYnV0IHRob3NlIGV4Y2VwdGlvbnMgd2VyZSBuZXZlciBwcmVzZW50ZWQgYXMgYSByZWFsIGxpZmUgdXNlLWNhc2VzXG5cdC8vIGFuZCBtaWdodCBiZSBjb25zaWRlcmVkIGFzIG1vcmUgcHJlZmVyYWJsZSByZXN1bHRzLlxuXHQvL1xuXHQvLyBUaGlzIGxvZ2ljLCBob3dldmVyLCBpcyBub3QgZ3VhcmFudGVlZCBhbmQgY2FuIGNoYW5nZSBhdCBhbnkgcG9pbnQgaW4gdGhlIGZ1dHVyZVxuXHRvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQ7XG5cblx0XHRcdHdoaWxlICggb2Zmc2V0UGFyZW50ICYmIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnRFbGVtZW50O1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG4vLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IHNjcm9sbExlZnQ6IFwicGFnZVhPZmZzZXRcIiwgc2Nyb2xsVG9wOiBcInBhZ2VZT2Zmc2V0XCIgfSwgZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHtcblx0dmFyIHRvcCA9IFwicGFnZVlPZmZzZXRcIiA9PT0gcHJvcDtcblxuXHRqUXVlcnkuZm5bIG1ldGhvZCBdID0gZnVuY3Rpb24oIHZhbCApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7XG5cblx0XHRcdC8vIENvYWxlc2NlIGRvY3VtZW50cyBhbmQgd2luZG93c1xuXHRcdFx0dmFyIHdpbjtcblx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblx0XHRcdFx0d2luID0gZWxlbTtcblx0XHRcdH0gZWxzZSBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW0uZGVmYXVsdFZpZXc7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiB3aW4gPyB3aW5bIHByb3AgXSA6IGVsZW1bIG1ldGhvZCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHdpbiApIHtcblx0XHRcdFx0d2luLnNjcm9sbFRvKFxuXHRcdFx0XHRcdCF0b3AgPyB2YWwgOiB3aW4ucGFnZVhPZmZzZXQsXG5cdFx0XHRcdFx0dG9wID8gdmFsIDogd2luLnBhZ2VZT2Zmc2V0XG5cdFx0XHRcdCk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1bIG1ldGhvZCBdID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0sIG1ldGhvZCwgdmFsLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH07XG59ICk7XG5cbi8vIFN1cHBvcnQ6IFNhZmFyaSA8PTcgLSA5LjEsIENocm9tZSA8PTM3IC0gNDlcbi8vIEFkZCB0aGUgdG9wL2xlZnQgY3NzSG9va3MgdXNpbmcgalF1ZXJ5LmZuLnBvc2l0aW9uXG4vLyBXZWJraXQgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwODRcbi8vIEJsaW5rIGJ1ZzogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NTg5MzQ3XG4vLyBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgcGVyY2VudCB3aGVuIHNwZWNpZmllZCBmb3IgdG9wL2xlZnQvYm90dG9tL3JpZ2h0O1xuLy8gcmF0aGVyIHRoYW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQgb24gdGhlIG9mZnNldCBtb2R1bGUsIGp1c3QgY2hlY2sgZm9yIGl0IGhlcmVcbmpRdWVyeS5lYWNoKCBbIFwidG9wXCIsIFwibGVmdFwiIF0sIGZ1bmN0aW9uKCBpLCBwcm9wICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIHByb3AgXSA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5waXhlbFBvc2l0aW9uLFxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGNvbXB1dGVkID0gY3VyQ1NTKCBlbGVtLCBwcm9wICk7XG5cblx0XHRcdFx0Ly8gSWYgY3VyQ1NTIHJldHVybnMgcGVyY2VudGFnZSwgZmFsbGJhY2sgdG8gb2Zmc2V0XG5cdFx0XHRcdHJldHVybiBybnVtbm9ucHgudGVzdCggY29tcHV0ZWQgKSA/XG5cdFx0XHRcdFx0alF1ZXJ5KCBlbGVtICkucG9zaXRpb24oKVsgcHJvcCBdICsgXCJweFwiIDpcblx0XHRcdFx0XHRjb21wdXRlZDtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG59ICk7XG5cblxuLy8gQ3JlYXRlIGlubmVySGVpZ2h0LCBpbm5lcldpZHRoLCBoZWlnaHQsIHdpZHRoLCBvdXRlckhlaWdodCBhbmQgb3V0ZXJXaWR0aCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBIZWlnaHQ6IFwiaGVpZ2h0XCIsIFdpZHRoOiBcIndpZHRoXCIgfSwgZnVuY3Rpb24oIG5hbWUsIHR5cGUgKSB7XG5cdGpRdWVyeS5lYWNoKCB7IHBhZGRpbmc6IFwiaW5uZXJcIiArIG5hbWUsIGNvbnRlbnQ6IHR5cGUsIFwiXCI6IFwib3V0ZXJcIiArIG5hbWUgfSxcblx0XHRmdW5jdGlvbiggZGVmYXVsdEV4dHJhLCBmdW5jTmFtZSApIHtcblxuXHRcdC8vIE1hcmdpbiBpcyBvbmx5IGZvciBvdXRlckhlaWdodCwgb3V0ZXJXaWR0aFxuXHRcdGpRdWVyeS5mblsgZnVuY05hbWUgXSA9IGZ1bmN0aW9uKCBtYXJnaW4sIHZhbHVlICkge1xuXHRcdFx0dmFyIGNoYWluYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggJiYgKCBkZWZhdWx0RXh0cmEgfHwgdHlwZW9mIG1hcmdpbiAhPT0gXCJib29sZWFuXCIgKSxcblx0XHRcdFx0ZXh0cmEgPSBkZWZhdWx0RXh0cmEgfHwgKCBtYXJnaW4gPT09IHRydWUgfHwgdmFsdWUgPT09IHRydWUgPyBcIm1hcmdpblwiIDogXCJib3JkZXJcIiApO1xuXG5cdFx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgdHlwZSwgdmFsdWUgKSB7XG5cdFx0XHRcdHZhciBkb2M7XG5cblx0XHRcdFx0aWYgKCBpc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRcdFx0Ly8gJCggd2luZG93ICkub3V0ZXJXaWR0aC9IZWlnaHQgcmV0dXJuIHcvaCBpbmNsdWRpbmcgc2Nyb2xsYmFycyAoZ2gtMTcyOSlcblx0XHRcdFx0XHRyZXR1cm4gZnVuY05hbWUuaW5kZXhPZiggXCJvdXRlclwiICkgPT09IDAgP1xuXHRcdFx0XHRcdFx0ZWxlbVsgXCJpbm5lclwiICsgbmFtZSBdIDpcblx0XHRcdFx0XHRcdGVsZW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyBcImNsaWVudFwiICsgbmFtZSBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gR2V0IGRvY3VtZW50IHdpZHRoIG9yIGhlaWdodFxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0ZG9jID0gZWxlbS5kb2N1bWVudEVsZW1lbnQ7XG5cblx0XHRcdFx0XHQvLyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0gb3Igb2Zmc2V0W1dpZHRoL0hlaWdodF0gb3IgY2xpZW50W1dpZHRoL0hlaWdodF0sXG5cdFx0XHRcdFx0Ly8gd2hpY2hldmVyIGlzIGdyZWF0ZXN0XG5cdFx0XHRcdFx0cmV0dXJuIE1hdGgubWF4KFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcInNjcm9sbFwiICsgbmFtZSBdLCBkb2NbIFwic2Nyb2xsXCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwib2Zmc2V0XCIgKyBuYW1lIF0sIGRvY1sgXCJvZmZzZXRcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGRvY1sgXCJjbGllbnRcIiArIG5hbWUgXVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cblx0XHRcdFx0XHQvLyBHZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50LCByZXF1ZXN0aW5nIGJ1dCBub3QgZm9yY2luZyBwYXJzZUZsb2F0XG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgZXh0cmEgKSA6XG5cblx0XHRcdFx0XHQvLyBTZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50XG5cdFx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCB0eXBlLCB2YWx1ZSwgZXh0cmEgKTtcblx0XHRcdH0sIHR5cGUsIGNoYWluYWJsZSA/IG1hcmdpbiA6IHVuZGVmaW5lZCwgY2hhaW5hYmxlICk7XG5cdFx0fTtcblx0fSApO1xufSApO1xuXG5cbmpRdWVyeS5lYWNoKCAoIFwiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgXCIgK1xuXHRcIm1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIFwiICtcblx0XCJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51XCIgKS5zcGxpdCggXCIgXCIgKSxcblx0ZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cblx0Ly8gSGFuZGxlIGV2ZW50IGJpbmRpbmdcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID9cblx0XHRcdHRoaXMub24oIG5hbWUsIG51bGwsIGRhdGEsIGZuICkgOlxuXHRcdFx0dGhpcy50cmlnZ2VyKCBuYW1lICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0aG92ZXI6IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkge1xuXHRcdHJldHVybiB0aGlzLm1vdXNlZW50ZXIoIGZuT3ZlciApLm1vdXNlbGVhdmUoIGZuT3V0IHx8IGZuT3ZlciApO1xuXHR9XG59ICk7XG5cblxuXG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHRiaW5kOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgbnVsbCwgZGF0YSwgZm4gKTtcblx0fSxcblx0dW5iaW5kOiBmdW5jdGlvbiggdHlwZXMsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9mZiggdHlwZXMsIG51bGwsIGZuICk7XG5cdH0sXG5cblx0ZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGZuICkge1xuXG5cdFx0Ly8gKCBuYW1lc3BhY2UgKSBvciAoIHNlbGVjdG9yLCB0eXBlcyBbLCBmbl0gKVxuXHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID9cblx0XHRcdHRoaXMub2ZmKCBzZWxlY3RvciwgXCIqKlwiICkgOlxuXHRcdFx0dGhpcy5vZmYoIHR5cGVzLCBzZWxlY3RvciB8fCBcIioqXCIsIGZuICk7XG5cdH1cbn0gKTtcblxuLy8gQmluZCBhIGZ1bmN0aW9uIHRvIGEgY29udGV4dCwgb3B0aW9uYWxseSBwYXJ0aWFsbHkgYXBwbHlpbmcgYW55XG4vLyBhcmd1bWVudHMuXG4vLyBqUXVlcnkucHJveHkgaXMgZGVwcmVjYXRlZCB0byBwcm9tb3RlIHN0YW5kYXJkcyAoc3BlY2lmaWNhbGx5IEZ1bmN0aW9uI2JpbmQpXG4vLyBIb3dldmVyLCBpdCBpcyBub3Qgc2xhdGVkIGZvciByZW1vdmFsIGFueSB0aW1lIHNvb25cbmpRdWVyeS5wcm94eSA9IGZ1bmN0aW9uKCBmbiwgY29udGV4dCApIHtcblx0dmFyIHRtcCwgYXJncywgcHJveHk7XG5cblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHR0bXAgPSBmblsgY29udGV4dCBdO1xuXHRcdGNvbnRleHQgPSBmbjtcblx0XHRmbiA9IHRtcDtcblx0fVxuXG5cdC8vIFF1aWNrIGNoZWNrIHRvIGRldGVybWluZSBpZiB0YXJnZXQgaXMgY2FsbGFibGUsIGluIHRoZSBzcGVjXG5cdC8vIHRoaXMgdGhyb3dzIGEgVHlwZUVycm9yLCBidXQgd2Ugd2lsbCBqdXN0IHJldHVybiB1bmRlZmluZWQuXG5cdGlmICggIWlzRnVuY3Rpb24oIGZuICkgKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8vIFNpbXVsYXRlZCBiaW5kXG5cdGFyZ3MgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMsIDIgKTtcblx0cHJveHkgPSBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZm4uYXBwbHkoIGNvbnRleHQgfHwgdGhpcywgYXJncy5jb25jYXQoIHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApICkgKTtcblx0fTtcblxuXHQvLyBTZXQgdGhlIGd1aWQgb2YgdW5pcXVlIGhhbmRsZXIgdG8gdGhlIHNhbWUgb2Ygb3JpZ2luYWwgaGFuZGxlciwgc28gaXQgY2FuIGJlIHJlbW92ZWRcblx0cHJveHkuZ3VpZCA9IGZuLmd1aWQgPSBmbi5ndWlkIHx8IGpRdWVyeS5ndWlkKys7XG5cblx0cmV0dXJuIHByb3h5O1xufTtcblxualF1ZXJ5LmhvbGRSZWFkeSA9IGZ1bmN0aW9uKCBob2xkICkge1xuXHRpZiAoIGhvbGQgKSB7XG5cdFx0alF1ZXJ5LnJlYWR5V2FpdCsrO1xuXHR9IGVsc2Uge1xuXHRcdGpRdWVyeS5yZWFkeSggdHJ1ZSApO1xuXHR9XG59O1xualF1ZXJ5LmlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xualF1ZXJ5LnBhcnNlSlNPTiA9IEpTT04ucGFyc2U7XG5qUXVlcnkubm9kZU5hbWUgPSBub2RlTmFtZTtcbmpRdWVyeS5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcbmpRdWVyeS5pc1dpbmRvdyA9IGlzV2luZG93O1xualF1ZXJ5LmNhbWVsQ2FzZSA9IGNhbWVsQ2FzZTtcbmpRdWVyeS50eXBlID0gdG9UeXBlO1xuXG5qUXVlcnkubm93ID0gRGF0ZS5ub3c7XG5cbmpRdWVyeS5pc051bWVyaWMgPSBmdW5jdGlvbiggb2JqICkge1xuXG5cdC8vIEFzIG9mIGpRdWVyeSAzLjAsIGlzTnVtZXJpYyBpcyBsaW1pdGVkIHRvXG5cdC8vIHN0cmluZ3MgYW5kIG51bWJlcnMgKHByaW1pdGl2ZXMgb3Igb2JqZWN0cylcblx0Ly8gdGhhdCBjYW4gYmUgY29lcmNlZCB0byBmaW5pdGUgbnVtYmVycyAoZ2gtMjY2Milcblx0dmFyIHR5cGUgPSBqUXVlcnkudHlwZSggb2JqICk7XG5cdHJldHVybiAoIHR5cGUgPT09IFwibnVtYmVyXCIgfHwgdHlwZSA9PT0gXCJzdHJpbmdcIiApICYmXG5cblx0XHQvLyBwYXJzZUZsb2F0IE5hTnMgbnVtZXJpYy1jYXN0IGZhbHNlIHBvc2l0aXZlcyAoXCJcIilcblx0XHQvLyAuLi5idXQgbWlzaW50ZXJwcmV0cyBsZWFkaW5nLW51bWJlciBzdHJpbmdzLCBwYXJ0aWN1bGFybHkgaGV4IGxpdGVyYWxzIChcIjB4Li4uXCIpXG5cdFx0Ly8gc3VidHJhY3Rpb24gZm9yY2VzIGluZmluaXRpZXMgdG8gTmFOXG5cdFx0IWlzTmFOKCBvYmogLSBwYXJzZUZsb2F0KCBvYmogKSApO1xufTtcblxuXG5cblxuLy8gUmVnaXN0ZXIgYXMgYSBuYW1lZCBBTUQgbW9kdWxlLCBzaW5jZSBqUXVlcnkgY2FuIGJlIGNvbmNhdGVuYXRlZCB3aXRoIG90aGVyXG4vLyBmaWxlcyB0aGF0IG1heSB1c2UgZGVmaW5lLCBidXQgbm90IHZpYSBhIHByb3BlciBjb25jYXRlbmF0aW9uIHNjcmlwdCB0aGF0XG4vLyB1bmRlcnN0YW5kcyBhbm9ueW1vdXMgQU1EIG1vZHVsZXMuIEEgbmFtZWQgQU1EIGlzIHNhZmVzdCBhbmQgbW9zdCByb2J1c3Rcbi8vIHdheSB0byByZWdpc3Rlci4gTG93ZXJjYXNlIGpxdWVyeSBpcyB1c2VkIGJlY2F1c2UgQU1EIG1vZHVsZSBuYW1lcyBhcmVcbi8vIGRlcml2ZWQgZnJvbSBmaWxlIG5hbWVzLCBhbmQgalF1ZXJ5IGlzIG5vcm1hbGx5IGRlbGl2ZXJlZCBpbiBhIGxvd2VyY2FzZVxuLy8gZmlsZSBuYW1lLiBEbyB0aGlzIGFmdGVyIGNyZWF0aW5nIHRoZSBnbG9iYWwgc28gdGhhdCBpZiBhbiBBTUQgbW9kdWxlIHdhbnRzXG4vLyB0byBjYWxsIG5vQ29uZmxpY3QgdG8gaGlkZSB0aGlzIHZlcnNpb24gb2YgalF1ZXJ5LCBpdCB3aWxsIHdvcmsuXG5cbi8vIE5vdGUgdGhhdCBmb3IgbWF4aW11bSBwb3J0YWJpbGl0eSwgbGlicmFyaWVzIHRoYXQgYXJlIG5vdCBqUXVlcnkgc2hvdWxkXG4vLyBkZWNsYXJlIHRoZW1zZWx2ZXMgYXMgYW5vbnltb3VzIG1vZHVsZXMsIGFuZCBhdm9pZCBzZXR0aW5nIGEgZ2xvYmFsIGlmIGFuXG4vLyBBTUQgbG9hZGVyIGlzIHByZXNlbnQuIGpRdWVyeSBpcyBhIHNwZWNpYWwgY2FzZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2pyYnVya2UvcmVxdWlyZWpzL3dpa2kvVXBkYXRpbmctZXhpc3RpbmctbGlicmFyaWVzI3dpa2ktYW5vblxuXG5pZiAoIHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kICkge1xuXHRkZWZpbmUoIFwianF1ZXJ5XCIsIFtdLCBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4galF1ZXJ5O1xuXHR9ICk7XG59XG5cblxuXG5cbnZhclxuXG5cdC8vIE1hcCBvdmVyIGpRdWVyeSBpbiBjYXNlIG9mIG92ZXJ3cml0ZVxuXHRfalF1ZXJ5ID0gd2luZG93LmpRdWVyeSxcblxuXHQvLyBNYXAgb3ZlciB0aGUgJCBpbiBjYXNlIG9mIG92ZXJ3cml0ZVxuXHRfJCA9IHdpbmRvdy4kO1xuXG5qUXVlcnkubm9Db25mbGljdCA9IGZ1bmN0aW9uKCBkZWVwICkge1xuXHRpZiAoIHdpbmRvdy4kID09PSBqUXVlcnkgKSB7XG5cdFx0d2luZG93LiQgPSBfJDtcblx0fVxuXG5cdGlmICggZGVlcCAmJiB3aW5kb3cualF1ZXJ5ID09PSBqUXVlcnkgKSB7XG5cdFx0d2luZG93LmpRdWVyeSA9IF9qUXVlcnk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5O1xufTtcblxuLy8gRXhwb3NlIGpRdWVyeSBhbmQgJCBpZGVudGlmaWVycywgZXZlbiBpbiBBTURcbi8vICgjNzEwMiNjb21tZW50OjEwLCBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9wdWxsLzU1Nylcbi8vIGFuZCBDb21tb25KUyBmb3IgYnJvd3NlciBlbXVsYXRvcnMgKCMxMzU2NilcbmlmICggIW5vR2xvYmFsICkge1xuXHR3aW5kb3cualF1ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7XG59XG5cblxuXG5cbnJldHVybiBqUXVlcnk7XG59ICk7XG4iLCIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJrYXRleFwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJrYXRleFwiXSA9IGZhY3RvcnkoKTtcbn0pKCh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdGhpcyksIGZ1bmN0aW9uKCkge1xucmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMSk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIChbXG4vKiAwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuXG4vKioqLyB9KSxcbi8qIDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9zcmMva2F0ZXgubGVzc1xudmFyIGthdGV4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvU291cmNlTG9jYXRpb24uanNcbi8qKlxuICogTGV4aW5nIG9yIHBhcnNpbmcgcG9zaXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgZXJyb3IgcmVwb3J0aW5nLlxuICogVGhpcyBvYmplY3QgaXMgaW1tdXRhYmxlLlxuICovXG52YXIgU291cmNlTG9jYXRpb24gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICAvLyBUaGUgKyBwcmVmaXggaW5kaWNhdGVzIHRoYXQgdGhlc2UgZmllbGRzIGFyZW4ndCB3cml0ZWFibGVcbiAgLy8gTGV4ZXIgaG9sZGluZyB0aGUgaW5wdXQgc3RyaW5nLlxuICAvLyBTdGFydCBvZmZzZXQsIHplcm8tYmFzZWQgaW5jbHVzaXZlLlxuICAvLyBFbmQgb2Zmc2V0LCB6ZXJvLWJhc2VkIGV4Y2x1c2l2ZS5cbiAgZnVuY3Rpb24gU291cmNlTG9jYXRpb24obGV4ZXIsIHN0YXJ0LCBlbmQpIHtcbiAgICB0aGlzLmxleGVyID0gdm9pZCAwO1xuICAgIHRoaXMuc3RhcnQgPSB2b2lkIDA7XG4gICAgdGhpcy5lbmQgPSB2b2lkIDA7XG4gICAgdGhpcy5sZXhlciA9IGxleGVyO1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuICAvKipcbiAgICogTWVyZ2VzIHR3byBgU291cmNlTG9jYXRpb25gcyBmcm9tIGxvY2F0aW9uIHByb3ZpZGVycywgZ2l2ZW4gdGhleSBhcmVcbiAgICogcHJvdmlkZWQgaW4gb3JkZXIgb2YgYXBwZWFyYW5jZS5cbiAgICogLSBSZXR1cm5zIHRoZSBmaXJzdCBvbmUncyBsb2NhdGlvbiBpZiBvbmx5IHRoZSBmaXJzdCBpcyBwcm92aWRlZC5cbiAgICogLSBSZXR1cm5zIGEgbWVyZ2VkIHJhbmdlIG9mIHRoZSBmaXJzdCBhbmQgdGhlIGxhc3QgaWYgYm90aCBhcmUgcHJvdmlkZWRcbiAgICogICBhbmQgdGhlaXIgbGV4ZXJzIG1hdGNoLlxuICAgKiAtIE90aGVyd2lzZSwgcmV0dXJucyBudWxsLlxuICAgKi9cblxuXG4gIFNvdXJjZUxvY2F0aW9uLnJhbmdlID0gZnVuY3Rpb24gcmFuZ2UoZmlyc3QsIHNlY29uZCkge1xuICAgIGlmICghc2Vjb25kKSB7XG4gICAgICByZXR1cm4gZmlyc3QgJiYgZmlyc3QubG9jO1xuICAgIH0gZWxzZSBpZiAoIWZpcnN0IHx8ICFmaXJzdC5sb2MgfHwgIXNlY29uZC5sb2MgfHwgZmlyc3QubG9jLmxleGVyICE9PSBzZWNvbmQubG9jLmxleGVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBTb3VyY2VMb2NhdGlvbihmaXJzdC5sb2MubGV4ZXIsIGZpcnN0LmxvYy5zdGFydCwgc2Vjb25kLmxvYy5lbmQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gU291cmNlTG9jYXRpb247XG59KCk7XG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvVG9rZW4uanNcblxuLyoqXG4gKiBJbnRlcmZhY2UgcmVxdWlyZWQgdG8gYnJlYWsgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuIFRva2VuLCBMZXhlciwgYW5kXG4gKiBQYXJzZUVycm9yLlxuICovXG5cbi8qKlxuICogVGhlIHJlc3VsdGluZyB0b2tlbiByZXR1cm5lZCBmcm9tIGBsZXhgLlxuICpcbiAqIEl0IGNvbnNpc3RzIG9mIHRoZSB0b2tlbiB0ZXh0IHBsdXMgc29tZSBwb3NpdGlvbiBpbmZvcm1hdGlvbi5cbiAqIFRoZSBwb3NpdGlvbiBpbmZvcm1hdGlvbiBpcyBlc3NlbnRpYWxseSBhIHJhbmdlIGluIGFuIGlucHV0IHN0cmluZyxcbiAqIGJ1dCBpbnN0ZWFkIG9mIHJlZmVyZW5jaW5nIHRoZSBiYXJlIGlucHV0IHN0cmluZywgd2UgcmVmZXIgdG8gdGhlIGxleGVyLlxuICogVGhhdCB3YXkgaXQgaXMgcG9zc2libGUgdG8gYXR0YWNoIGV4dHJhIG1ldGFkYXRhIHRvIHRoZSBpbnB1dCBzdHJpbmcsXG4gKiBsaWtlIGZvciBleGFtcGxlIGEgZmlsZSBuYW1lIG9yIHNpbWlsYXIuXG4gKlxuICogVGhlIHBvc2l0aW9uIGluZm9ybWF0aW9uIGlzIG9wdGlvbmFsLCBzbyBpdCBpcyBPSyB0byBjb25zdHJ1Y3Qgc3ludGhldGljXG4gKiB0b2tlbnMgaWYgYXBwcm9wcmlhdGUuIE5vdCBwcm92aWRpbmcgYXZhaWxhYmxlIHBvc2l0aW9uIGluZm9ybWF0aW9uIG1heVxuICogbGVhZCB0byBkZWdyYWRlZCBlcnJvciByZXBvcnRpbmcsIHRob3VnaC5cbiAqL1xudmFyIFRva2VuX1Rva2VuID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVG9rZW4odGV4dCwgLy8gdGhlIHRleHQgb2YgdGhpcyB0b2tlblxuICBsb2MpIHtcbiAgICB0aGlzLnRleHQgPSB2b2lkIDA7XG4gICAgdGhpcy5sb2MgPSB2b2lkIDA7XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICB0aGlzLmxvYyA9IGxvYztcbiAgfVxuICAvKipcbiAgICogR2l2ZW4gYSBwYWlyIG9mIHRva2VucyAodGhpcyBhbmQgZW5kVG9rZW4pLCBjb21wdXRlIGEgYFRva2VuYCBlbmNvbXBhc3NpbmdcbiAgICogdGhlIHdob2xlIGlucHV0IHJhbmdlIGVuY2xvc2VkIGJ5IHRoZXNlIHR3by5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gVG9rZW4ucHJvdG90eXBlO1xuXG4gIF9wcm90by5yYW5nZSA9IGZ1bmN0aW9uIHJhbmdlKGVuZFRva2VuLCAvLyBsYXN0IHRva2VuIG9mIHRoZSByYW5nZSwgaW5jbHVzaXZlXG4gIHRleHQpIC8vIHRoZSB0ZXh0IG9mIHRoZSBuZXdseSBjb25zdHJ1Y3RlZCB0b2tlblxuICB7XG4gICAgcmV0dXJuIG5ldyBUb2tlbih0ZXh0LCBTb3VyY2VMb2NhdGlvbi5yYW5nZSh0aGlzLCBlbmRUb2tlbikpO1xuICB9O1xuXG4gIHJldHVybiBUb2tlbjtcbn0oKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1BhcnNlRXJyb3IuanNcblxuXG4vKipcbiAqIFRoaXMgaXMgdGhlIFBhcnNlRXJyb3IgY2xhc3MsIHdoaWNoIGlzIHRoZSBtYWluIGVycm9yIHRocm93biBieSBLYVRlWFxuICogZnVuY3Rpb25zIHdoZW4gc29tZXRoaW5nIGhhcyBnb25lIHdyb25nLiBUaGlzIGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggaW50ZXJuYWxcbiAqIGVycm9ycyBmcm9tIGVycm9ycyBpbiB0aGUgZXhwcmVzc2lvbiB0aGF0IHRoZSB1c2VyIHByb3ZpZGVkLlxuICpcbiAqIElmIHBvc3NpYmxlLCBhIGNhbGxlciBzaG91bGQgcHJvdmlkZSBhIFRva2VuIG9yIFBhcnNlTm9kZSB3aXRoIGluZm9ybWF0aW9uXG4gKiBhYm91dCB3aGVyZSBpbiB0aGUgc291cmNlIHN0cmluZyB0aGUgcHJvYmxlbSBvY2N1cnJlZC5cbiAqL1xudmFyIFBhcnNlRXJyb3IgPSAvLyBFcnJvciBwb3NpdGlvbiBiYXNlZCBvbiBwYXNzZWQtaW4gVG9rZW4gb3IgUGFyc2VOb2RlLlxuZnVuY3Rpb24gUGFyc2VFcnJvcihtZXNzYWdlLCAvLyBUaGUgZXJyb3IgbWVzc2FnZVxudG9rZW4pIC8vIEFuIG9iamVjdCBwcm92aWRpbmcgcG9zaXRpb24gaW5mb3JtYXRpb25cbntcbiAgdGhpcy5wb3NpdGlvbiA9IHZvaWQgMDtcbiAgdmFyIGVycm9yID0gXCJLYVRlWCBwYXJzZSBlcnJvcjogXCIgKyBtZXNzYWdlO1xuICB2YXIgc3RhcnQ7XG4gIHZhciBsb2MgPSB0b2tlbiAmJiB0b2tlbi5sb2M7XG5cbiAgaWYgKGxvYyAmJiBsb2Muc3RhcnQgPD0gbG9jLmVuZCkge1xuICAgIC8vIElmIHdlIGhhdmUgdGhlIGlucHV0IGFuZCBhIHBvc2l0aW9uLCBtYWtlIHRoZSBlcnJvciBhIGJpdCBmYW5jaWVyXG4gICAgLy8gR2V0IHRoZSBpbnB1dFxuICAgIHZhciBpbnB1dCA9IGxvYy5sZXhlci5pbnB1dDsgLy8gUHJlcGVuZCBzb21lIGluZm9ybWF0aW9uXG5cbiAgICBzdGFydCA9IGxvYy5zdGFydDtcbiAgICB2YXIgZW5kID0gbG9jLmVuZDtcblxuICAgIGlmIChzdGFydCA9PT0gaW5wdXQubGVuZ3RoKSB7XG4gICAgICBlcnJvciArPSBcIiBhdCBlbmQgb2YgaW5wdXQ6IFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvciArPSBcIiBhdCBwb3NpdGlvbiBcIiArIChzdGFydCArIDEpICsgXCI6IFwiO1xuICAgIH0gLy8gVW5kZXJsaW5lIHRva2VuIGluIHF1ZXN0aW9uIHVzaW5nIGNvbWJpbmluZyB1bmRlcnNjb3Jlc1xuXG5cbiAgICB2YXIgdW5kZXJsaW5lZCA9IGlucHV0LnNsaWNlKHN0YXJ0LCBlbmQpLnJlcGxhY2UoL1teXS9nLCBcIiQmXFx1MDMzMlwiKTsgLy8gRXh0cmFjdCBzb21lIGNvbnRleHQgZnJvbSB0aGUgaW5wdXQgYW5kIGFkZCBpdCB0byB0aGUgZXJyb3JcblxuICAgIHZhciBsZWZ0O1xuXG4gICAgaWYgKHN0YXJ0ID4gMTUpIHtcbiAgICAgIGxlZnQgPSBcIuKAplwiICsgaW5wdXQuc2xpY2Uoc3RhcnQgLSAxNSwgc3RhcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZWZ0ID0gaW5wdXQuc2xpY2UoMCwgc3RhcnQpO1xuICAgIH1cblxuICAgIHZhciByaWdodDtcblxuICAgIGlmIChlbmQgKyAxNSA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgcmlnaHQgPSBpbnB1dC5zbGljZShlbmQsIGVuZCArIDE1KSArIFwi4oCmXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJpZ2h0ID0gaW5wdXQuc2xpY2UoZW5kKTtcbiAgICB9XG5cbiAgICBlcnJvciArPSBsZWZ0ICsgdW5kZXJsaW5lZCArIHJpZ2h0O1xuICB9IC8vIFNvbWUgaGFja2VyeSB0byBtYWtlIFBhcnNlRXJyb3IgYSBwcm90b3R5cGUgb2YgRXJyb3JcbiAgLy8gU2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzg0NjA3NTNcblxuXG4gIHZhciBzZWxmID0gbmV3IEVycm9yKGVycm9yKTtcbiAgc2VsZi5uYW1lID0gXCJQYXJzZUVycm9yXCI7IC8vICRGbG93Rml4TWVcblxuICBzZWxmLl9fcHJvdG9fXyA9IFBhcnNlRXJyb3IucHJvdG90eXBlOyAvLyAkRmxvd0ZpeE1lXG5cbiAgc2VsZi5wb3NpdGlvbiA9IHN0YXJ0O1xuICByZXR1cm4gc2VsZjtcbn07IC8vICRGbG93Rml4TWUgTW9yZSBoYWNrZXJ5XG5cblxuUGFyc2VFcnJvci5wcm90b3R5cGUuX19wcm90b19fID0gRXJyb3IucHJvdG90eXBlO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX1BhcnNlRXJyb3IgPSAoUGFyc2VFcnJvcik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy91dGlscy5qc1xuLyoqXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgYSBsaXN0IG9mIHV0aWxpdHkgZnVuY3Rpb25zIHdoaWNoIGFyZSB1c2VmdWwgaW4gb3RoZXJcbiAqIGZpbGVzLlxuICovXG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgYW4gZWxlbWVudCBpcyBjb250YWluZWQgaW4gYSBsaXN0XG4gKi9cbnZhciBjb250YWlucyA9IGZ1bmN0aW9uIGNvbnRhaW5zKGxpc3QsIGVsZW0pIHtcbiAgcmV0dXJuIGxpc3QuaW5kZXhPZihlbGVtKSAhPT0gLTE7XG59O1xuLyoqXG4gKiBQcm92aWRlIGEgZGVmYXVsdCB2YWx1ZSBpZiBhIHNldHRpbmcgaXMgdW5kZWZpbmVkXG4gKiBOT1RFOiBDb3VsZG4ndCB1c2UgYFRgIGFzIHRoZSBvdXRwdXQgdHlwZSBkdWUgdG8gZmFjZWJvb2svZmxvdyM1MDIyLlxuICovXG5cblxudmFyIGRlZmx0ID0gZnVuY3Rpb24gZGVmbHQoc2V0dGluZywgZGVmYXVsdElmVW5kZWZpbmVkKSB7XG4gIHJldHVybiBzZXR0aW5nID09PSB1bmRlZmluZWQgPyBkZWZhdWx0SWZVbmRlZmluZWQgOiBzZXR0aW5nO1xufTsgLy8gaHlwaGVuYXRlIGFuZCBlc2NhcGUgYWRhcHRlZCBmcm9tIEZhY2Vib29rJ3MgUmVhY3QgdW5kZXIgQXBhY2hlIDIgbGljZW5zZVxuXG5cbnZhciB1cHBlcmNhc2UgPSAvKFtBLVpdKS9nO1xuXG52YXIgaHlwaGVuYXRlID0gZnVuY3Rpb24gaHlwaGVuYXRlKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UodXBwZXJjYXNlLCBcIi0kMVwiKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIEVTQ0FQRV9MT09LVVAgPSB7XG4gIFwiJlwiOiBcIiZhbXA7XCIsXG4gIFwiPlwiOiBcIiZndDtcIixcbiAgXCI8XCI6IFwiJmx0O1wiLFxuICBcIlxcXCJcIjogXCImcXVvdDtcIixcbiAgXCInXCI6IFwiJiN4Mjc7XCJcbn07XG52YXIgRVNDQVBFX1JFR0VYID0gL1smPjxcIiddL2c7XG4vKipcbiAqIEVzY2FwZXMgdGV4dCB0byBwcmV2ZW50IHNjcmlwdGluZyBhdHRhY2tzLlxuICovXG5cbmZ1bmN0aW9uIHV0aWxzX2VzY2FwZSh0ZXh0KSB7XG4gIHJldHVybiBTdHJpbmcodGV4dCkucmVwbGFjZShFU0NBUEVfUkVHRVgsIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIHJldHVybiBFU0NBUEVfTE9PS1VQW21hdGNoXTtcbiAgfSk7XG59XG4vKipcbiAqIFNvbWV0aW1lcyB3ZSB3YW50IHRvIHB1bGwgb3V0IHRoZSBpbm5lcm1vc3QgZWxlbWVudCBvZiBhIGdyb3VwLiBJbiBtb3N0XG4gKiBjYXNlcywgdGhpcyB3aWxsIGp1c3QgYmUgdGhlIGdyb3VwIGl0c2VsZiwgYnV0IHdoZW4gb3JkZ3JvdXBzIGFuZCBjb2xvcnMgaGF2ZVxuICogYSBzaW5nbGUgZWxlbWVudCwgd2Ugd2FudCB0byBwdWxsIHRoYXQgb3V0LlxuICovXG5cblxudmFyIGdldEJhc2VFbGVtID0gZnVuY3Rpb24gZ2V0QmFzZUVsZW0oZ3JvdXApIHtcbiAgaWYgKGdyb3VwLnR5cGUgPT09IFwib3JkZ3JvdXBcIikge1xuICAgIGlmIChncm91cC5ib2R5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGdldEJhc2VFbGVtKGdyb3VwLmJvZHlbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGdyb3VwLnR5cGUgPT09IFwiY29sb3JcIikge1xuICAgIGlmIChncm91cC5ib2R5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGdldEJhc2VFbGVtKGdyb3VwLmJvZHlbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGdyb3VwLnR5cGUgPT09IFwiZm9udFwiKSB7XG4gICAgcmV0dXJuIGdldEJhc2VFbGVtKGdyb3VwLmJvZHkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBncm91cDtcbiAgfVxufTtcbi8qKlxuICogVGVYYm9vayBhbGdvcml0aG1zIG9mdGVuIHJlZmVyZW5jZSBcImNoYXJhY3RlciBib3hlc1wiLCB3aGljaCBhcmUgc2ltcGx5IGdyb3Vwc1xuICogd2l0aCBhIHNpbmdsZSBjaGFyYWN0ZXIgaW4gdGhlbS4gVG8gZGVjaWRlIGlmIHNvbWV0aGluZyBpcyBhIGNoYXJhY3RlciBib3gsXG4gKiB3ZSBmaW5kIGl0cyBpbm5lcm1vc3QgZ3JvdXAsIGFuZCBzZWUgaWYgaXQgaXMgYSBzaW5nbGUgY2hhcmFjdGVyLlxuICovXG5cblxudmFyIHV0aWxzX2lzQ2hhcmFjdGVyQm94ID0gZnVuY3Rpb24gaXNDaGFyYWN0ZXJCb3goZ3JvdXApIHtcbiAgdmFyIGJhc2VFbGVtID0gZ2V0QmFzZUVsZW0oZ3JvdXApOyAvLyBUaGVzZSBhcmUgYWxsIHRoZXkgdHlwZXMgb2YgZ3JvdXBzIHdoaWNoIGhvbGQgc2luZ2xlIGNoYXJhY3RlcnNcblxuICByZXR1cm4gYmFzZUVsZW0udHlwZSA9PT0gXCJtYXRob3JkXCIgfHwgYmFzZUVsZW0udHlwZSA9PT0gXCJ0ZXh0b3JkXCIgfHwgYmFzZUVsZW0udHlwZSA9PT0gXCJhdG9tXCI7XG59O1xuXG52YXIgYXNzZXJ0ID0gZnVuY3Rpb24gYXNzZXJ0KHZhbHVlKSB7XG4gIGlmICghdmFsdWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIG5vbi1udWxsLCBidXQgZ290ICcgKyBTdHJpbmcodmFsdWUpKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG4vKipcbiAqIFJldHVybiB0aGUgcHJvdG9jb2wgb2YgYSBVUkwsIG9yIFwiX3JlbGF0aXZlXCIgaWYgdGhlIFVSTCBkb2VzIG5vdCBzcGVjaWZ5IGFcbiAqIHByb3RvY29sIChhbmQgdGh1cyBpcyByZWxhdGl2ZSkuXG4gKi9cblxudmFyIHByb3RvY29sRnJvbVVybCA9IGZ1bmN0aW9uIHByb3RvY29sRnJvbVVybCh1cmwpIHtcbiAgdmFyIHByb3RvY29sID0gL15cXHMqKFteXFxcXC8jXSo/KSg/Ojp8JiMwKjU4fCYjeDAqM2EpL2kuZXhlYyh1cmwpO1xuICByZXR1cm4gcHJvdG9jb2wgIT0gbnVsbCA/IHByb3RvY29sWzFdIDogXCJfcmVsYXRpdmVcIjtcbn07XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB1dGlscyA9ICh7XG4gIGNvbnRhaW5zOiBjb250YWlucyxcbiAgZGVmbHQ6IGRlZmx0LFxuICBlc2NhcGU6IHV0aWxzX2VzY2FwZSxcbiAgaHlwaGVuYXRlOiBoeXBoZW5hdGUsXG4gIGdldEJhc2VFbGVtOiBnZXRCYXNlRWxlbSxcbiAgaXNDaGFyYWN0ZXJCb3g6IHV0aWxzX2lzQ2hhcmFjdGVyQm94LFxuICBwcm90b2NvbEZyb21Vcmw6IHByb3RvY29sRnJvbVVybFxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9TZXR0aW5ncy5qc1xuLyogZXNsaW50IG5vLWNvbnNvbGU6MCAqL1xuXG4vKipcbiAqIFRoaXMgaXMgYSBtb2R1bGUgZm9yIHN0b3Jpbmcgc2V0dGluZ3MgcGFzc2VkIGludG8gS2FUZVguIEl0IGNvcnJlY3RseSBoYW5kbGVzXG4gKiBkZWZhdWx0IHNldHRpbmdzLlxuICovXG5cblxuXG5cbi8qKlxuICogVGhlIG1haW4gU2V0dGluZ3Mgb2JqZWN0XG4gKlxuICogVGhlIGN1cnJlbnQgb3B0aW9ucyBzdG9yZWQgYXJlOlxuICogIC0gZGlzcGxheU1vZGU6IFdoZXRoZXIgdGhlIGV4cHJlc3Npb24gc2hvdWxkIGJlIHR5cGVzZXQgYXMgaW5saW5lIG1hdGhcbiAqICAgICAgICAgICAgICAgICAoZmFsc2UsIHRoZSBkZWZhdWx0KSwgbWVhbmluZyB0aGF0IHRoZSBtYXRoIHN0YXJ0cyBpblxuICogICAgICAgICAgICAgICAgIFxcdGV4dHN0eWxlIGFuZCBpcyBwbGFjZWQgaW4gYW4gaW5saW5lLWJsb2NrKTsgb3IgYXMgZGlzcGxheVxuICogICAgICAgICAgICAgICAgIG1hdGggKHRydWUpLCBtZWFuaW5nIHRoYXQgdGhlIG1hdGggc3RhcnRzIGluIFxcZGlzcGxheXN0eWxlXG4gKiAgICAgICAgICAgICAgICAgYW5kIGlzIHBsYWNlZCBpbiBhIGJsb2NrIHdpdGggdmVydGljYWwgbWFyZ2luLlxuICovXG52YXIgU2V0dGluZ3NfU2V0dGluZ3MgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTZXR0aW5ncyhvcHRpb25zKSB7XG4gICAgdGhpcy5kaXNwbGF5TW9kZSA9IHZvaWQgMDtcbiAgICB0aGlzLm91dHB1dCA9IHZvaWQgMDtcbiAgICB0aGlzLmxlcW5vID0gdm9pZCAwO1xuICAgIHRoaXMuZmxlcW4gPSB2b2lkIDA7XG4gICAgdGhpcy50aHJvd09uRXJyb3IgPSB2b2lkIDA7XG4gICAgdGhpcy5lcnJvckNvbG9yID0gdm9pZCAwO1xuICAgIHRoaXMubWFjcm9zID0gdm9pZCAwO1xuICAgIHRoaXMubWluUnVsZVRoaWNrbmVzcyA9IHZvaWQgMDtcbiAgICB0aGlzLmNvbG9ySXNUZXh0Q29sb3IgPSB2b2lkIDA7XG4gICAgdGhpcy5zdHJpY3QgPSB2b2lkIDA7XG4gICAgdGhpcy50cnVzdCA9IHZvaWQgMDtcbiAgICB0aGlzLm1heFNpemUgPSB2b2lkIDA7XG4gICAgdGhpcy5tYXhFeHBhbmQgPSB2b2lkIDA7XG4gICAgLy8gYWxsb3cgbnVsbCBvcHRpb25zXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdGhpcy5kaXNwbGF5TW9kZSA9IHV0aWxzLmRlZmx0KG9wdGlvbnMuZGlzcGxheU1vZGUsIGZhbHNlKTtcbiAgICB0aGlzLm91dHB1dCA9IHV0aWxzLmRlZmx0KG9wdGlvbnMub3V0cHV0LCBcImh0bWxBbmRNYXRobWxcIik7XG4gICAgdGhpcy5sZXFubyA9IHV0aWxzLmRlZmx0KG9wdGlvbnMubGVxbm8sIGZhbHNlKTtcbiAgICB0aGlzLmZsZXFuID0gdXRpbHMuZGVmbHQob3B0aW9ucy5mbGVxbiwgZmFsc2UpO1xuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdXRpbHMuZGVmbHQob3B0aW9ucy50aHJvd09uRXJyb3IsIHRydWUpO1xuICAgIHRoaXMuZXJyb3JDb2xvciA9IHV0aWxzLmRlZmx0KG9wdGlvbnMuZXJyb3JDb2xvciwgXCIjY2MwMDAwXCIpO1xuICAgIHRoaXMubWFjcm9zID0gb3B0aW9ucy5tYWNyb3MgfHwge307XG4gICAgdGhpcy5taW5SdWxlVGhpY2tuZXNzID0gTWF0aC5tYXgoMCwgdXRpbHMuZGVmbHQob3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzLCAwKSk7XG4gICAgdGhpcy5jb2xvcklzVGV4dENvbG9yID0gdXRpbHMuZGVmbHQob3B0aW9ucy5jb2xvcklzVGV4dENvbG9yLCBmYWxzZSk7XG4gICAgdGhpcy5zdHJpY3QgPSB1dGlscy5kZWZsdChvcHRpb25zLnN0cmljdCwgXCJ3YXJuXCIpO1xuICAgIHRoaXMudHJ1c3QgPSB1dGlscy5kZWZsdChvcHRpb25zLnRydXN0LCBmYWxzZSk7XG4gICAgdGhpcy5tYXhTaXplID0gTWF0aC5tYXgoMCwgdXRpbHMuZGVmbHQob3B0aW9ucy5tYXhTaXplLCBJbmZpbml0eSkpO1xuICAgIHRoaXMubWF4RXhwYW5kID0gTWF0aC5tYXgoMCwgdXRpbHMuZGVmbHQob3B0aW9ucy5tYXhFeHBhbmQsIDEwMDApKTtcbiAgfVxuICAvKipcbiAgICogUmVwb3J0IG5vbnN0cmljdCAobm9uLUxhVGVYLWNvbXBhdGlibGUpIGlucHV0LlxuICAgKiBDYW4gc2FmZWx5IG5vdCBiZSBjYWxsZWQgaWYgYHRoaXMuc3RyaWN0YCBpcyBmYWxzZSBpbiBKYXZhU2NyaXB0LlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBTZXR0aW5ncy5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnJlcG9ydE5vbnN0cmljdCA9IGZ1bmN0aW9uIHJlcG9ydE5vbnN0cmljdChlcnJvckNvZGUsIGVycm9yTXNnLCB0b2tlbikge1xuICAgIHZhciBzdHJpY3QgPSB0aGlzLnN0cmljdDtcblxuICAgIGlmICh0eXBlb2Ygc3RyaWN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIC8vIEFsbG93IHJldHVybiB2YWx1ZSBvZiBzdHJpY3QgZnVuY3Rpb24gdG8gYmUgYm9vbGVhbiBvciBzdHJpbmdcbiAgICAgIC8vIChvciBudWxsL3VuZGVmaW5lZCwgbWVhbmluZyBubyBmdXJ0aGVyIHByb2Nlc3NpbmcpLlxuICAgICAgc3RyaWN0ID0gc3RyaWN0KGVycm9yQ29kZSwgZXJyb3JNc2csIHRva2VuKTtcbiAgICB9XG5cbiAgICBpZiAoIXN0cmljdCB8fCBzdHJpY3QgPT09IFwiaWdub3JlXCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKHN0cmljdCA9PT0gdHJ1ZSB8fCBzdHJpY3QgPT09IFwiZXJyb3JcIikge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiTGFUZVgtaW5jb21wYXRpYmxlIGlucHV0IGFuZCBzdHJpY3QgbW9kZSBpcyBzZXQgdG8gJ2Vycm9yJzogXCIgKyAoZXJyb3JNc2cgKyBcIiBbXCIgKyBlcnJvckNvZGUgKyBcIl1cIiksIHRva2VuKTtcbiAgICB9IGVsc2UgaWYgKHN0cmljdCA9PT0gXCJ3YXJuXCIpIHtcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvICd3YXJuJzogXCIgKyAoZXJyb3JNc2cgKyBcIiBbXCIgKyBlcnJvckNvZGUgKyBcIl1cIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB3b24ndCBoYXBwZW4gaW4gdHlwZS1zYWZlIGNvZGVcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvIFwiICsgKFwidW5yZWNvZ25pemVkICdcIiArIHN0cmljdCArIFwiJzogXCIgKyBlcnJvck1zZyArIFwiIFtcIiArIGVycm9yQ29kZSArIFwiXVwiKSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRvIGFwcGx5IHN0cmljdCAoTGFUZVgtYWRoZXJpbmcpIGJlaGF2aW9yIGZvciB1bnVzdWFsXG4gICAqIGlucHV0IChsaWtlIGBcXFxcYCkuICBVbmxpa2UgYG5vbnN0cmljdGAsIHdpbGwgbm90IHRocm93IGFuIGVycm9yO1xuICAgKiBpbnN0ZWFkLCBcImVycm9yXCIgdHJhbnNsYXRlcyB0byBhIHJldHVybiB2YWx1ZSBvZiBgdHJ1ZWAsIHdoaWxlIFwiaWdub3JlXCJcbiAgICogdHJhbnNsYXRlcyB0byBhIHJldHVybiB2YWx1ZSBvZiBgZmFsc2VgLiAgTWF5IHN0aWxsIHByaW50IGEgd2FybmluZzpcbiAgICogXCJ3YXJuXCIgcHJpbnRzIGEgd2FybmluZyBhbmQgcmV0dXJucyBgZmFsc2VgLlxuICAgKiBUaGlzIGlzIGZvciB0aGUgc2Vjb25kIGNhdGVnb3J5IG9mIGBlcnJvckNvZGVgcyBsaXN0ZWQgaW4gdGhlIFJFQURNRS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8udXNlU3RyaWN0QmVoYXZpb3IgPSBmdW5jdGlvbiB1c2VTdHJpY3RCZWhhdmlvcihlcnJvckNvZGUsIGVycm9yTXNnLCB0b2tlbikge1xuICAgIHZhciBzdHJpY3QgPSB0aGlzLnN0cmljdDtcblxuICAgIGlmICh0eXBlb2Ygc3RyaWN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIC8vIEFsbG93IHJldHVybiB2YWx1ZSBvZiBzdHJpY3QgZnVuY3Rpb24gdG8gYmUgYm9vbGVhbiBvciBzdHJpbmdcbiAgICAgIC8vIChvciBudWxsL3VuZGVmaW5lZCwgbWVhbmluZyBubyBmdXJ0aGVyIHByb2Nlc3NpbmcpLlxuICAgICAgLy8gQnV0IGNhdGNoIGFueSBleGNlcHRpb25zIHRocm93biBieSBmdW5jdGlvbiwgdHJlYXRpbmcgdGhlbVxuICAgICAgLy8gbGlrZSBcImVycm9yXCIuXG4gICAgICB0cnkge1xuICAgICAgICBzdHJpY3QgPSBzdHJpY3QoZXJyb3JDb2RlLCBlcnJvck1zZywgdG9rZW4pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc3RyaWN0ID0gXCJlcnJvclwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghc3RyaWN0IHx8IHN0cmljdCA9PT0gXCJpZ25vcmVcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoc3RyaWN0ID09PSB0cnVlIHx8IHN0cmljdCA9PT0gXCJlcnJvclwiKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHN0cmljdCA9PT0gXCJ3YXJuXCIpIHtcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvICd3YXJuJzogXCIgKyAoZXJyb3JNc2cgKyBcIiBbXCIgKyBlcnJvckNvZGUgKyBcIl1cIikpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB3b24ndCBoYXBwZW4gaW4gdHlwZS1zYWZlIGNvZGVcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvIFwiICsgKFwidW5yZWNvZ25pemVkICdcIiArIHN0cmljdCArIFwiJzogXCIgKyBlcnJvck1zZyArIFwiIFtcIiArIGVycm9yQ29kZSArIFwiXVwiKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRvIHRlc3QgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIGlucHV0LCBhbmQgcmV0dXJuXG4gICAqIGB0cnVlYCAodHJ1c3RlZCkgb3IgYGZhbHNlYCAodW50cnVzdGVkKS4gIFRoZSBzb2xlIGFyZ3VtZW50IGBjb250ZXh0YFxuICAgKiBzaG91bGQgYmUgYW4gb2JqZWN0IHdpdGggYGNvbW1hbmRgIGZpZWxkIHNwZWNpZnlpbmcgdGhlIHJlbGV2YW50IExhVGVYXG4gICAqIGNvbW1hbmQgKGFzIGEgc3RyaW5nIHN0YXJ0aW5nIHdpdGggYFxcYCksIGFuZCBhbnkgb3RoZXIgYXJndW1lbnRzLCBldGMuXG4gICAqIElmIGBjb250ZXh0YCBoYXMgYSBgdXJsYCBmaWVsZCwgYSBgcHJvdG9jb2xgIGZpZWxkIHdpbGwgYXV0b21hdGljYWxseVxuICAgKiBnZXQgYWRkZWQgYnkgdGhpcyBmdW5jdGlvbiAoY2hhbmdpbmcgdGhlIHNwZWNpZmllZCBvYmplY3QpLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5pc1RydXN0ZWQgPSBmdW5jdGlvbiBpc1RydXN0ZWQoY29udGV4dCkge1xuICAgIGlmIChjb250ZXh0LnVybCAmJiAhY29udGV4dC5wcm90b2NvbCkge1xuICAgICAgY29udGV4dC5wcm90b2NvbCA9IHV0aWxzLnByb3RvY29sRnJvbVVybChjb250ZXh0LnVybCk7XG4gICAgfVxuXG4gICAgdmFyIHRydXN0ID0gdHlwZW9mIHRoaXMudHJ1c3QgPT09IFwiZnVuY3Rpb25cIiA/IHRoaXMudHJ1c3QoY29udGV4dCkgOiB0aGlzLnRydXN0O1xuICAgIHJldHVybiBCb29sZWFuKHRydXN0KTtcbiAgfTtcblxuICByZXR1cm4gU2V0dGluZ3M7XG59KCk7XG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvU3R5bGUuanNcbi8qKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFuZCBjbGFzc2VzIGZvciB0aGUgdmFyaW91cyBraW5kcyBvZiBzdHlsZXNcbiAqIHVzZWQgaW4gVGVYLiBJdCBwcm92aWRlcyBhIGdlbmVyaWMgYFN0eWxlYCBjbGFzcywgd2hpY2ggaG9sZHMgaW5mb3JtYXRpb25cbiAqIGFib3V0IGEgc3BlY2lmaWMgc3R5bGUuIEl0IHRoZW4gcHJvdmlkZXMgaW5zdGFuY2VzIG9mIGFsbCB0aGUgZGlmZmVyZW50IGtpbmRzXG4gKiBvZiBzdHlsZXMgcG9zc2libGUsIGFuZCBwcm92aWRlcyBmdW5jdGlvbnMgdG8gbW92ZSBiZXR3ZWVuIHRoZW0gYW5kIGdldFxuICogaW5mb3JtYXRpb24gYWJvdXQgdGhlbS5cbiAqL1xuXG4vKipcbiAqIFRoZSBtYWluIHN0eWxlIGNsYXNzLiBDb250YWlucyBhIHVuaXF1ZSBpZCBmb3IgdGhlIHN0eWxlLCBhIHNpemUgKHdoaWNoIGlzXG4gKiB0aGUgc2FtZSBmb3IgY3JhbXBlZCBhbmQgdW5jcmFtcGVkIHZlcnNpb24gb2YgYSBzdHlsZSksIGFuZCBhIGNyYW1wZWQgZmxhZy5cbiAqL1xudmFyIFN0eWxlID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3R5bGUoaWQsIHNpemUsIGNyYW1wZWQpIHtcbiAgICB0aGlzLmlkID0gdm9pZCAwO1xuICAgIHRoaXMuc2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLmNyYW1wZWQgPSB2b2lkIDA7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG4gICAgdGhpcy5jcmFtcGVkID0gY3JhbXBlZDtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBzdHlsZSBvZiBhIHN1cGVyc2NyaXB0IGdpdmVuIGEgYmFzZSBpbiB0aGUgY3VycmVudCBzdHlsZS5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gU3R5bGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5zdXAgPSBmdW5jdGlvbiBzdXAoKSB7XG4gICAgcmV0dXJuIFN0eWxlX3N0eWxlc1tfc3VwW3RoaXMuaWRdXTtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBzdHlsZSBvZiBhIHN1YnNjcmlwdCBnaXZlbiBhIGJhc2UgaW4gdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnN1YiA9IGZ1bmN0aW9uIHN1YigpIHtcbiAgICByZXR1cm4gU3R5bGVfc3R5bGVzW19zdWJbdGhpcy5pZF1dO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0eWxlIG9mIGEgZnJhY3Rpb24gbnVtZXJhdG9yIGdpdmVuIHRoZSBmcmFjdGlvbiBpbiB0aGUgY3VycmVudFxuICAgKiBzdHlsZS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZnJhY051bSA9IGZ1bmN0aW9uIGZyYWNOdW0oKSB7XG4gICAgcmV0dXJuIFN0eWxlX3N0eWxlc1tfZnJhY051bVt0aGlzLmlkXV07XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgc3R5bGUgb2YgYSBmcmFjdGlvbiBkZW5vbWluYXRvciBnaXZlbiB0aGUgZnJhY3Rpb24gaW4gdGhlIGN1cnJlbnRcbiAgICogc3R5bGUuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmZyYWNEZW4gPSBmdW5jdGlvbiBmcmFjRGVuKCkge1xuICAgIHJldHVybiBTdHlsZV9zdHlsZXNbX2ZyYWNEZW5bdGhpcy5pZF1dO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGNyYW1wZWQgdmVyc2lvbiBvZiBhIHN0eWxlIChpbiBwYXJ0aWN1bGFyLCBjcmFtcGluZyBhIGNyYW1wZWQgc3R5bGVcbiAgICogZG9lc24ndCBjaGFuZ2UgdGhlIHN0eWxlKS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uY3JhbXAgPSBmdW5jdGlvbiBjcmFtcCgpIHtcbiAgICByZXR1cm4gU3R5bGVfc3R5bGVzW19jcmFtcFt0aGlzLmlkXV07XG4gIH1cbiAgLyoqXG4gICAqIEdldCBhIHRleHQgb3IgZGlzcGxheSB2ZXJzaW9uIG9mIHRoaXMgc3R5bGUuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnRleHQgPSBmdW5jdGlvbiB0ZXh0KCkge1xuICAgIHJldHVybiBTdHlsZV9zdHlsZXNbX3RleHRbdGhpcy5pZF1dO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGlzIHN0eWxlIGlzIHRpZ2h0bHkgc3BhY2VkIChzY3JpcHRzdHlsZS9zY3JpcHRzY3JpcHRzdHlsZSlcbiAgICovXG4gIDtcblxuICBfcHJvdG8uaXNUaWdodCA9IGZ1bmN0aW9uIGlzVGlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSA+PSAyO1xuICB9O1xuXG4gIHJldHVybiBTdHlsZTtcbn0oKTsgLy8gRXhwb3J0IGFuIGludGVyZmFjZSBmb3IgdHlwZSBjaGVja2luZywgYnV0IGRvbid0IGV4cG9zZSB0aGUgaW1wbGVtZW50YXRpb24uXG4vLyBUaGlzIHdheSwgbm8gbW9yZSBzdHlsZXMgY2FuIGJlIGdlbmVyYXRlZC5cblxuXG4vLyBJRHMgb2YgdGhlIGRpZmZlcmVudCBzdHlsZXNcbnZhciBEID0gMDtcbnZhciBEYyA9IDE7XG52YXIgVCA9IDI7XG52YXIgVGMgPSAzO1xudmFyIFMgPSA0O1xudmFyIFNjID0gNTtcbnZhciBTUyA9IDY7XG52YXIgU1NjID0gNzsgLy8gSW5zdGFuY2VzIG9mIHRoZSBkaWZmZXJlbnQgc3R5bGVzXG5cbnZhciBTdHlsZV9zdHlsZXMgPSBbbmV3IFN0eWxlKEQsIDAsIGZhbHNlKSwgbmV3IFN0eWxlKERjLCAwLCB0cnVlKSwgbmV3IFN0eWxlKFQsIDEsIGZhbHNlKSwgbmV3IFN0eWxlKFRjLCAxLCB0cnVlKSwgbmV3IFN0eWxlKFMsIDIsIGZhbHNlKSwgbmV3IFN0eWxlKFNjLCAyLCB0cnVlKSwgbmV3IFN0eWxlKFNTLCAzLCBmYWxzZSksIG5ldyBTdHlsZShTU2MsIDMsIHRydWUpXTsgLy8gTG9va3VwIHRhYmxlcyBmb3Igc3dpdGNoaW5nIGZyb20gb25lIHN0eWxlIHRvIGFub3RoZXJcblxudmFyIF9zdXAgPSBbUywgU2MsIFMsIFNjLCBTUywgU1NjLCBTUywgU1NjXTtcbnZhciBfc3ViID0gW1NjLCBTYywgU2MsIFNjLCBTU2MsIFNTYywgU1NjLCBTU2NdO1xudmFyIF9mcmFjTnVtID0gW1QsIFRjLCBTLCBTYywgU1MsIFNTYywgU1MsIFNTY107XG52YXIgX2ZyYWNEZW4gPSBbVGMsIFRjLCBTYywgU2MsIFNTYywgU1NjLCBTU2MsIFNTY107XG52YXIgX2NyYW1wID0gW0RjLCBEYywgVGMsIFRjLCBTYywgU2MsIFNTYywgU1NjXTtcbnZhciBfdGV4dCA9IFtELCBEYywgVCwgVGMsIFQsIFRjLCBULCBUY107IC8vIFdlIG9ubHkgZXhwb3J0IHNvbWUgb2YgdGhlIHN0eWxlcy5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX1N0eWxlID0gKHtcbiAgRElTUExBWTogU3R5bGVfc3R5bGVzW0RdLFxuICBURVhUOiBTdHlsZV9zdHlsZXNbVF0sXG4gIFNDUklQVDogU3R5bGVfc3R5bGVzW1NdLFxuICBTQ1JJUFRTQ1JJUFQ6IFN0eWxlX3N0eWxlc1tTU11cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdW5pY29kZVNjcmlwdHMuanNcbi8qXG4gKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgVW5pY29kZSBzY3JpcHRzIGFuZCBzY3JpcHQgZmFtaWxpZXMgdGhhdCB3ZVxuICogc3VwcG9ydC4gVG8gYWRkIG5ldyBzY3JpcHRzIG9yIGZhbWlsaWVzLCBqdXN0IGFkZCBhIG5ldyBlbnRyeSB0byB0aGVcbiAqIHNjcmlwdERhdGEgYXJyYXkgYmVsb3cuIEFkZGluZyBzY3JpcHRzIHRvIHRoZSBzY3JpcHREYXRhIGFycmF5IGFsbG93c1xuICogY2hhcmFjdGVycyBmcm9tIHRoYXQgc2NyaXB0IHRvIGFwcGVhciBpbiBcXHRleHR7fSBlbnZpcm9ubWVudHMuXG4gKi9cblxuLyoqXG4gKiBFYWNoIHNjcmlwdCBvciBzY3JpcHQgZmFtaWx5IGhhcyBhIG5hbWUgYW5kIGFuIGFycmF5IG9mIGJsb2Nrcy5cbiAqIEVhY2ggYmxvY2sgaXMgYW4gYXJyYXkgb2YgdHdvIG51bWJlcnMgd2hpY2ggc3BlY2lmeSB0aGUgc3RhcnQgYW5kXG4gKiBlbmQgcG9pbnRzIChpbmNsdXNpdmUpIG9mIGEgYmxvY2sgb2YgVW5pY29kZSBjb2RlcG9pbnRzLlxuICovXG5cbi8qKlxuICogVW5pY29kZSBibG9jayBkYXRhIGZvciB0aGUgZmFtaWxpZXMgb2Ygc2NyaXB0cyB3ZSBzdXBwb3J0IGluIFxcdGV4dHt9LlxuICogU2NyaXB0cyBvbmx5IG5lZWQgdG8gYXBwZWFyIGhlcmUgaWYgdGhleSBkbyBub3QgaGF2ZSBmb250IG1ldHJpY3MuXG4gKi9cbnZhciBzY3JpcHREYXRhID0gW3tcbiAgLy8gTGF0aW4gY2hhcmFjdGVycyBiZXlvbmQgdGhlIExhdGluLTEgY2hhcmFjdGVycyB3ZSBoYXZlIG1ldHJpY3MgZm9yLlxuICAvLyBOZWVkZWQgZm9yIEN6ZWNoLCBIdW5nYXJpYW4gYW5kIFR1cmtpc2ggdGV4dCwgZm9yIGV4YW1wbGUuXG4gIG5hbWU6ICdsYXRpbicsXG4gIGJsb2NrczogW1sweDAxMDAsIDB4MDI0Zl0sIC8vIExhdGluIEV4dGVuZGVkLUEgYW5kIExhdGluIEV4dGVuZGVkLUJcbiAgWzB4MDMwMCwgMHgwMzZmXV1cbn0sIHtcbiAgLy8gVGhlIEN5cmlsbGljIHNjcmlwdCB1c2VkIGJ5IFJ1c3NpYW4gYW5kIHJlbGF0ZWQgbGFuZ3VhZ2VzLlxuICAvLyBBIEN5cmlsbGljIHN1YnNldCB1c2VkIHRvIGJlIHN1cHBvcnRlZCBhcyBleHBsaWNpdGx5IGRlZmluZWRcbiAgLy8gc3ltYm9scyBpbiBzeW1ib2xzLmpzXG4gIG5hbWU6ICdjeXJpbGxpYycsXG4gIGJsb2NrczogW1sweDA0MDAsIDB4MDRmZl1dXG59LCB7XG4gIC8vIFRoZSBCcmFobWljIHNjcmlwdHMgb2YgU291dGggYW5kIFNvdXRoZWFzdCBBc2lhXG4gIC8vIERldmFuYWdhcmkgKDA5MDDigJMwOTdGKVxuICAvLyBCZW5nYWxpICgwOTgw4oCTMDlGRilcbiAgLy8gR3VybXVraGkgKDBBMDDigJMwQTdGKVxuICAvLyBHdWphcmF0aSAoMEE4MOKAkzBBRkYpXG4gIC8vIE9yaXlhICgwQjAw4oCTMEI3RilcbiAgLy8gVGFtaWwgKDBCODDigJMwQkZGKVxuICAvLyBUZWx1Z3UgKDBDMDDigJMwQzdGKVxuICAvLyBLYW5uYWRhICgwQzgw4oCTMENGRilcbiAgLy8gTWFsYXlhbGFtICgwRDAw4oCTMEQ3RilcbiAgLy8gU2luaGFsYSAoMEQ4MOKAkzBERkYpXG4gIC8vIFRoYWkgKDBFMDDigJMwRTdGKVxuICAvLyBMYW8gKDBFODDigJMwRUZGKVxuICAvLyBUaWJldGFuICgwRjAw4oCTMEZGRilcbiAgLy8gTXlhbm1hciAoMTAwMOKAkzEwOUYpXG4gIG5hbWU6ICdicmFobWljJyxcbiAgYmxvY2tzOiBbWzB4MDkwMCwgMHgxMDlGXV1cbn0sIHtcbiAgbmFtZTogJ2dlb3JnaWFuJyxcbiAgYmxvY2tzOiBbWzB4MTBBMCwgMHgxMGZmXV1cbn0sIHtcbiAgLy8gQ2hpbmVzZSBhbmQgSmFwYW5lc2UuXG4gIC8vIFRoZSBcImtcIiBpbiBjamsgaXMgZm9yIEtvcmVhbiwgYnV0IHdlJ3ZlIHNlcGFyYXRlZCBLb3JlYW4gb3V0XG4gIG5hbWU6IFwiY2prXCIsXG4gIGJsb2NrczogW1sweDMwMDAsIDB4MzBGRl0sIC8vIENKSyBzeW1ib2xzIGFuZCBwdW5jdHVhdGlvbiwgSGlyYWdhbmEsIEthdGFrYW5hXG4gIFsweDRFMDAsIDB4OUZBRl0sIC8vIENKSyBpZGVvZ3JhbXNcbiAgWzB4RkYwMCwgMHhGRjYwXV1cbn0sIHtcbiAgLy8gS29yZWFuXG4gIG5hbWU6ICdoYW5ndWwnLFxuICBibG9ja3M6IFtbMHhBQzAwLCAweEQ3QUZdXVxufV07XG4vKipcbiAqIEdpdmVuIGEgY29kZXBvaW50LCByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHNjcmlwdCBvciBzY3JpcHQgZmFtaWx5XG4gKiBpdCBpcyBmcm9tLCBvciBudWxsIGlmIGl0IGlzIG5vdCBwYXJ0IG9mIGEga25vd24gYmxvY2tcbiAqL1xuXG5mdW5jdGlvbiBzY3JpcHRGcm9tQ29kZXBvaW50KGNvZGVwb2ludCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNjcmlwdERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc2NyaXB0ID0gc2NyaXB0RGF0YVtpXTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBzY3JpcHQuYmxvY2tzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIGJsb2NrID0gc2NyaXB0LmJsb2Nrc1tfaV07XG5cbiAgICAgIGlmIChjb2RlcG9pbnQgPj0gYmxvY2tbMF0gJiYgY29kZXBvaW50IDw9IGJsb2NrWzFdKSB7XG4gICAgICAgIHJldHVybiBzY3JpcHQubmFtZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogQSBmbGF0dGVuZWQgdmVyc2lvbiBvZiBhbGwgdGhlIHN1cHBvcnRlZCBibG9ja3MgaW4gYSBzaW5nbGUgYXJyYXkuXG4gKiBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiB0byBtYWtlIHN1cHBvcnRlZENvZGVwb2ludCgpIGZhc3QuXG4gKi9cblxudmFyIGFsbEJsb2NrcyA9IFtdO1xuc2NyaXB0RGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChzKSB7XG4gIHJldHVybiBzLmJsb2Nrcy5mb3JFYWNoKGZ1bmN0aW9uIChiKSB7XG4gICAgcmV0dXJuIGFsbEJsb2Nrcy5wdXNoLmFwcGx5KGFsbEJsb2NrcywgYik7XG4gIH0pO1xufSk7XG4vKipcbiAqIEdpdmVuIGEgY29kZXBvaW50LCByZXR1cm4gdHJ1ZSBpZiBpdCBmYWxscyB3aXRoaW4gb25lIG9mIHRoZVxuICogc2NyaXB0cyBvciBzY3JpcHQgZmFtaWxpZXMgZGVmaW5lZCBhYm92ZSBhbmQgZmFsc2Ugb3RoZXJ3aXNlLlxuICpcbiAqIE1pY3JvIGJlbmNobWFya3Mgc2hvd3MgdGhhdCB0aGlzIGlzIGZhc3RlciB0aGFuXG4gKiAvW1xcdTMwMDAtXFx1MzBGRlxcdTRFMDAtXFx1OUZBRlxcdUZGMDAtXFx1RkY2MFxcdUFDMDAtXFx1RDdBRlxcdTA5MDAtXFx1MTA5Rl0vLnRlc3QoKVxuICogaW4gRmlyZWZveCwgQ2hyb21lIGFuZCBOb2RlLlxuICovXG5cbmZ1bmN0aW9uIHN1cHBvcnRlZENvZGVwb2ludChjb2RlcG9pbnQpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxCbG9ja3MubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBpZiAoY29kZXBvaW50ID49IGFsbEJsb2Nrc1tpXSAmJiBjb2RlcG9pbnQgPD0gYWxsQmxvY2tzW2kgKyAxXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvc3ZnR2VvbWV0cnkuanNcbi8qKlxuICogVGhpcyBmaWxlIHByb3ZpZGVzIHN1cHBvcnQgdG8gZG9tVHJlZS5qcyBhbmQgZGVsaW1pdGVyLmpzLlxuICogSXQncyBhIHN0b3JlaG91c2Ugb2YgcGF0aCBnZW9tZXRyeSBmb3IgU1ZHIGltYWdlcy5cbiAqL1xuLy8gSW4gYWxsIHBhdGhzIGJlbG93LCB0aGUgdmlld0JveC10by1lbSBzY2FsZSBpcyAxMDAwOjEuXG52YXIgaExpbmVQYWQgPSA4MDsgLy8gcGFkZGluZyBhYm92ZSBhIHNxcnQgdmluaWN1bHVtLiBQcmV2ZW50cyBpbWFnZSBjcm9wcGluZy5cbi8vIFRoZSB2aW5pY3VsdW0gb2YgYSBcXHNxcnQgY2FuIGJlIG1hZGUgdGhpY2tlciBieSBhIEthVGVYIHJlbmRlcmluZyBvcHRpb24uXG4vLyBUaGluayBvZiB2YXJpYWJsZSBleHRyYVZpbmljdWx1bSBhcyB0d28gZGV0b3VycyBpbiB0aGUgU1ZHIHBhdGguXG4vLyBUaGUgZGV0b3VyIGJlZ2lucyBhdCB0aGUgbG93ZXIgbGVmdCBvZiB0aGUgYXJlYSBsYWJlbGVkIGV4dHJhVmluaWN1bHVtIGJlbG93LlxuLy8gVGhlIGRldG91ciBwcm9jZWVkcyBvbmUgZXh0cmFWaW5pY3VsdW0gZGlzdGFuY2UgdXAgYW5kIHNsaWdodGx5IHRvIHRoZSByaWdodCxcbi8vIGRpc3BsYWNpbmcgdGhlIHJhZGl1c2VkIGNvcm5lciBiZXR3ZWVuIHN1cmQgYW5kIHZpbmljdWx1bS4gVGhlIHJhZGl1cyBpc1xuLy8gdHJhdmVyc2VkIGFzIHVzdWFsLCB0aGVuIHRoZSBkZXRvdXIgcmVzdW1lcy4gSXQgZ29lcyByaWdodCwgdG8gdGhlIGVuZCBvZlxuLy8gdGhlIHZlcnkgbG9uZyB2aW5pY3VsdW1uLCB0aGVuIGRvd24gb25lIGV4dHJhVmluaWN1bHVtIGRpc3RhbmNlLFxuLy8gYWZ0ZXIgd2hpY2ggaXQgcmVzdW1lcyByZWd1bGFyIHBhdGggZ2VvbWV0cnkgZm9yIHRoZSByYWRpY2FsLlxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmluaWN1bHVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvXG4gICAgICAgICAv4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4oaQZXh0cmFWaW5pY3VsdW1cbiAgICAgICAgLyDilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojihpAwLjA0ZW0gKDQwIHVuaXQpIHN0ZCB2aW5pY3VsdW0gdGhpY2tuZXNzXG4gICAgICAgLyAvXG4gICAgICAvIC9cbiAgICAgLyAvXFxcbiAgICAvIC8gc3VyZFxuKi9cblxudmFyIHNxcnRNYWluID0gZnVuY3Rpb24gc3FydE1haW4oZXh0cmFWaW5pY3VsdW0sIGhMaW5lUGFkKSB7XG4gIC8vIHNxcnRNYWluIHBhdGggZ2VvbWV0cnkgaXMgZnJvbSBnbHlwaCBVMjIxQSBpbiB0aGUgZm9udCBLYVRlWCBNYWluXG4gIHJldHVybiBcIk05NSxcIiArICg2MjIgKyBleHRyYVZpbmljdWx1bSArIGhMaW5lUGFkKSArIFwiXFxuYy0yLjcsMCwtNy4xNywtMi43LC0xMy41LC04Yy01LjgsLTUuMywtOS41LC0xMCwtOS41LC0xNFxcbmMwLC0yLDAuMywtMy4zLDEsLTRjMS4zLC0yLjcsMjMuODMsLTIwLjcsNjcuNSwtNTRcXG5jNDQuMiwtMzMuMyw2NS44LC01MC4zLDY2LjUsLTUxYzEuMywtMS4zLDMsLTIsNSwtMmM0LjcsMCw4LjcsMy4zLDEyLDEwXFxuczE3MywzNzgsMTczLDM3OGMwLjcsMCwzNS4zLC03MSwxMDQsLTIxM2M2OC43LC0xNDIsMTM3LjUsLTI4NSwyMDYuNSwtNDI5XFxuYzY5LC0xNDQsMTA0LjUsLTIxNy43LDEwNi41LC0yMjFcXG5sXCIgKyBleHRyYVZpbmljdWx1bSAvIDIuMDc1ICsgXCIgLVwiICsgZXh0cmFWaW5pY3VsdW0gKyBcIlxcbmM1LjMsLTkuMywxMiwtMTQsMjAsLTE0XFxuSDQwMDAwMHZcIiArICg0MCArIGV4dHJhVmluaWN1bHVtKSArIFwiSDg0NS4yNzI0XFxucy0yMjUuMjcyLDQ2NywtMjI1LjI3Miw0NjdzLTIzNSw0ODYsLTIzNSw0ODZjLTIuNyw0LjcsLTksNywtMTksN1xcbmMtNiwwLC0xMCwtMSwtMTIsLTNzLTE5NCwtNDIyLC0xOTQsLTQyMnMtNjUsNDcsLTY1LDQ3elxcbk1cIiArICg4MzQgKyBleHRyYVZpbmljdWx1bSkgKyBcIiBcIiArIGhMaW5lUGFkICsgXCJoNDAwMDAwdlwiICsgKDQwICsgZXh0cmFWaW5pY3VsdW0pICsgXCJoLTQwMDAwMHpcIjtcbn07XG5cbnZhciBzcXJ0U2l6ZTEgPSBmdW5jdGlvbiBzcXJ0U2l6ZTEoZXh0cmFWaW5pY3VsdW0sIGhMaW5lUGFkKSB7XG4gIC8vIHNpemUxIGlzIGZyb20gZ2x5cGggVTIyMUEgaW4gdGhlIGZvbnQgS2FUZVhfU2l6ZTEtUmVndWxhclxuICByZXR1cm4gXCJNMjYzLFwiICsgKDYwMSArIGV4dHJhVmluaWN1bHVtICsgaExpbmVQYWQpICsgXCJjMC43LDAsMTgsMzkuNyw1MiwxMTlcXG5jMzQsNzkuMyw2OC4xNjcsMTU4LjcsMTAyLjUsMjM4YzM0LjMsNzkuMyw1MS44LDExOS4zLDUyLjUsMTIwXFxuYzM0MCwtNzA0LjcsNTEwLjcsLTEwNjAuMyw1MTIsLTEwNjdcXG5sXCIgKyBleHRyYVZpbmljdWx1bSAvIDIuMDg0ICsgXCIgLVwiICsgZXh0cmFWaW5pY3VsdW0gKyBcIlxcbmM0LjcsLTcuMywxMSwtMTEsMTksLTExXFxuSDQwMDAwdlwiICsgKDQwICsgZXh0cmFWaW5pY3VsdW0pICsgXCJIMTAxMi4zXFxucy0yNzEuMyw1NjcsLTI3MS4zLDU2N2MtMzguNyw4MC43LC04NCwxNzUsLTEzNiwyODNjLTUyLDEwOCwtODkuMTY3LDE4NS4zLC0xMTEuNSwyMzJcXG5jLTIyLjMsNDYuNywtMzMuOCw3MC4zLC0zNC41LDcxYy00LjcsNC43LC0xMi4zLDcsLTIzLDdzLTEyLC0xLC0xMiwtMVxcbnMtMTA5LC0yNTMsLTEwOSwtMjUzYy03Mi43LC0xNjgsLTEwOS4zLC0yNTIsLTExMCwtMjUyYy0xMC43LDgsLTIyLDE2LjcsLTM0LDI2XFxuYy0yMiwxNy4zLC0zMy4zLDI2LC0zNCwyNnMtMjYsLTI2LC0yNiwtMjZzNzYsLTU5LDc2LC01OXM3NiwtNjAsNzYsLTYwelxcbk1cIiArICgxMDAxICsgZXh0cmFWaW5pY3VsdW0pICsgXCIgXCIgKyBoTGluZVBhZCArIFwiaDQwMDAwMHZcIiArICg0MCArIGV4dHJhVmluaWN1bHVtKSArIFwiaC00MDAwMDB6XCI7XG59O1xuXG52YXIgc3FydFNpemUyID0gZnVuY3Rpb24gc3FydFNpemUyKGV4dHJhVmluaWN1bHVtLCBoTGluZVBhZCkge1xuICAvLyBzaXplMiBpcyBmcm9tIGdseXBoIFUyMjFBIGluIHRoZSBmb250IEthVGVYX1NpemUyLVJlZ3VsYXJcbiAgcmV0dXJuIFwiTTk4MyBcIiArICgxMCArIGV4dHJhVmluaWN1bHVtICsgaExpbmVQYWQpICsgXCJcXG5sXCIgKyBleHRyYVZpbmljdWx1bSAvIDMuMTMgKyBcIiAtXCIgKyBleHRyYVZpbmljdWx1bSArIFwiXFxuYzQsLTYuNywxMCwtMTAsMTgsLTEwIEg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmljdWx1bSkgKyBcIlxcbkgxMDEzLjFzLTgzLjQsMjY4LC0yNjQuMSw4NDBjLTE4MC43LDU3MiwtMjc3LDg3Ni4zLC0yODksOTEzYy00LjcsNC43LC0xMi43LDcsLTI0LDdcXG5zLTEyLDAsLTEyLDBjLTEuMywtMy4zLC0zLjcsLTExLjcsLTcsLTI1Yy0zNS4zLC0xMjUuMywtMTA2LjcsLTM3My4zLC0yMTQsLTc0NFxcbmMtMTAsMTIsLTIxLDI1LC0zMywzOXMtMzIsMzksLTMyLDM5Yy02LC01LjMsLTE1LC0xNCwtMjcsLTI2czI1LC0zMCwyNSwtMzBcXG5jMjYuNywtMzIuNyw1MiwtNjMsNzYsLTkxczUyLC02MCw1MiwtNjBzMjA4LDcyMiwyMDgsNzIyXFxuYzU2LC0xNzUuMywxMjYuMywtMzk3LjMsMjExLC02NjZjODQuNywtMjY4LjcsMTUzLjgsLTQ4OC4yLDIwNy41LC02NTguNVxcbmM1My43LC0xNzAuMyw4NC41LC0yNjYuOCw5Mi41LC0yODkuNXpcXG5NXCIgKyAoMTAwMSArIGV4dHJhVmluaWN1bHVtKSArIFwiIFwiICsgaExpbmVQYWQgKyBcImg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmljdWx1bSkgKyBcImgtNDAwMDAwelwiO1xufTtcblxudmFyIHNxcnRTaXplMyA9IGZ1bmN0aW9uIHNxcnRTaXplMyhleHRyYVZpbmljdWx1bSwgaExpbmVQYWQpIHtcbiAgLy8gc2l6ZTMgaXMgZnJvbSBnbHlwaCBVMjIxQSBpbiB0aGUgZm9udCBLYVRlWF9TaXplMy1SZWd1bGFyXG4gIHJldHVybiBcIk00MjQsXCIgKyAoMjM5OCArIGV4dHJhVmluaWN1bHVtICsgaExpbmVQYWQpICsgXCJcXG5jLTEuMywtMC43LC0zOC41LC0xNzIsLTExMS41LC01MTRjLTczLC0zNDIsLTEwOS44LC01MTMuMywtMTEwLjUsLTUxNFxcbmMwLC0yLC0xMC43LDE0LjMsLTMyLDQ5Yy00LjcsNy4zLC05LjgsMTUuNywtMTUuNSwyNWMtNS43LDkuMywtOS44LDE2LC0xMi41LDIwXFxucy01LDcsLTUsN2MtNCwtMy4zLC04LjMsLTcuNywtMTMsLTEzcy0xMywtMTMsLTEzLC0xM3M3NiwtMTIyLDc2LC0xMjJzNzcsLTEyMSw3NywtMTIxXFxuczIwOSw5NjgsMjA5LDk2OGMwLC0yLDg0LjcsLTM2MS43LDI1NCwtMTA3OWMxNjkuMywtNzE3LjMsMjU0LjcsLTEwNzcuNywyNTYsLTEwODFcXG5sXCIgKyBleHRyYVZpbmljdWx1bSAvIDQuMjIzICsgXCIgLVwiICsgZXh0cmFWaW5pY3VsdW0gKyBcImM0LC02LjcsMTAsLTEwLDE4LC0xMCBINDAwMDAwXFxudlwiICsgKDQwICsgZXh0cmFWaW5pY3VsdW0pICsgXCJIMTAxNC42XFxucy04Ny4zLDM3OC43LC0yNzIuNiwxMTY2Yy0xODUuMyw3ODcuMywtMjc5LjMsMTE4Mi4zLC0yODIsMTE4NVxcbmMtMiw2LC0xMCw5LC0yNCw5XFxuYy04LDAsLTEyLC0wLjcsLTEyLC0yeiBNXCIgKyAoMTAwMSArIGV4dHJhVmluaWN1bHVtKSArIFwiIFwiICsgaExpbmVQYWQgKyBcIlxcbmg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmljdWx1bSkgKyBcImgtNDAwMDAwelwiO1xufTtcblxudmFyIHNxcnRTaXplNCA9IGZ1bmN0aW9uIHNxcnRTaXplNChleHRyYVZpbmljdWx1bSwgaExpbmVQYWQpIHtcbiAgLy8gc2l6ZTQgaXMgZnJvbSBnbHlwaCBVMjIxQSBpbiB0aGUgZm9udCBLYVRlWF9TaXplNC1SZWd1bGFyXG4gIHJldHVybiBcIk00NzMsXCIgKyAoMjcxMyArIGV4dHJhVmluaWN1bHVtICsgaExpbmVQYWQpICsgXCJcXG5jMzM5LjMsLTE3OTkuMyw1MDkuMywtMjcwMCw1MTAsLTI3MDIgbFwiICsgZXh0cmFWaW5pY3VsdW0gLyA1LjI5OCArIFwiIC1cIiArIGV4dHJhVmluaWN1bHVtICsgXCJcXG5jMy4zLC03LjMsOS4zLC0xMSwxOCwtMTEgSDQwMDAwMHZcIiArICg0MCArIGV4dHJhVmluaWN1bHVtKSArIFwiSDEwMTcuN1xcbnMtOTAuNSw0NzgsLTI3Ni4yLDE0NjZjLTE4NS43LDk4OCwtMjc5LjUsMTQ4MywtMjgxLjUsMTQ4NWMtMiw2LC0xMCw5LC0yNCw5XFxuYy04LDAsLTEyLC0wLjcsLTEyLC0yYzAsLTEuMywtNS4zLC0zMiwtMTYsLTkyYy01MC43LC0yOTMuMywtMTE5LjcsLTY5My4zLC0yMDcsLTEyMDBcXG5jMCwtMS4zLC01LjMsOC43LC0xNiwzMGMtMTAuNywyMS4zLC0yMS4zLDQyLjcsLTMyLDY0cy0xNiwzMywtMTYsMzNzLTI2LC0yNiwtMjYsLTI2XFxuczc2LC0xNTMsNzYsLTE1M3M3NywtMTUxLDc3LC0xNTFjMC43LDAuNywzNS43LDIwMiwxMDUsNjA0YzY3LjMsNDAwLjcsMTAyLDYwMi43LDEwNCxcXG42MDZ6TVwiICsgKDEwMDEgKyBleHRyYVZpbmljdWx1bSkgKyBcIiBcIiArIGhMaW5lUGFkICsgXCJoNDAwMDAwdlwiICsgKDQwICsgZXh0cmFWaW5pY3VsdW0pICsgXCJIMTAxNy43elwiO1xufTtcblxudmFyIHNxcnRUYWxsID0gZnVuY3Rpb24gc3FydFRhbGwoZXh0cmFWaW5pY3VsdW0sIGhMaW5lUGFkLCB2aWV3Qm94SGVpZ2h0KSB7XG4gIC8vIHNxcnRUYWxsIGlzIGZyb20gZ2x5cGggVTIzQjcgaW4gdGhlIGZvbnQgS2FUZVhfU2l6ZTQtUmVndWxhclxuICAvLyBPbmUgcGF0aCBlZGdlIGhhcyBhIHZhcmlhYmxlIGxlbmd0aC4gSXQgcnVucyB2ZXJ0aWNhbGx5IGZyb20gdGhlIHZpbmljdWx1bW5cbiAgLy8gdG8gYSBwb2ludCBuZWFyICgxNCB1bml0cykgdGhlIGJvdHRvbSBvZiB0aGUgc3VyZC4gVGhlIHZpbmljdWx1bVxuICAvLyBpcyBub3JtYWxseSA0MCB1bml0cyB0aGljay4gU28gdGhlIGxlbmd0aCBvZiB0aGUgbGluZSBpbiBxdWVzdGlvbiBpczpcbiAgdmFyIHZlcnRTZWdtZW50ID0gdmlld0JveEhlaWdodCAtIDU0IC0gaExpbmVQYWQgLSBleHRyYVZpbmljdWx1bTtcbiAgcmV0dXJuIFwiTTcwMiBcIiArIChleHRyYVZpbmljdWx1bSArIGhMaW5lUGFkKSArIFwiSDQwMDAwMFwiICsgKDQwICsgZXh0cmFWaW5pY3VsdW0pICsgXCJcXG5INzQydlwiICsgdmVydFNlZ21lbnQgKyBcImwtNCA0LTQgNGMtLjY2Ny43IC0yIDEuNS00IDIuNXMtNC4xNjcgMS44MzMtNi41IDIuNS01LjUgMS05LjUgMVxcbmgtMTJsLTI4LTg0Yy0xNi42NjctNTItOTYuNjY3IC0yOTQuMzMzLTI0MC03MjdsLTIxMiAtNjQzIC04NSAxNzBcXG5jLTQtMy4zMzMtOC4zMzMtNy42NjctMTMgLTEzbC0xMy0xM2w3Ny0xNTUgNzctMTU2YzY2IDE5OS4zMzMgMTM5IDQxOS42NjdcXG4yMTkgNjYxIGwyMTggNjYxek03MDIgXCIgKyBoTGluZVBhZCArIFwiSDQwMDAwMHZcIiArICg0MCArIGV4dHJhVmluaWN1bHVtKSArIFwiSDc0MnpcIjtcbn07XG5cbnZhciBzcXJ0UGF0aCA9IGZ1bmN0aW9uIHNxcnRQYXRoKHNpemUsIGV4dHJhVmluaWN1bHVtLCB2aWV3Qm94SGVpZ2h0KSB7XG4gIGV4dHJhVmluaWN1bHVtID0gMTAwMCAqIGV4dHJhVmluaWN1bHVtOyAvLyBDb252ZXJ0IGZyb20gZG9jdW1lbnQgZW1zIHRvIHZpZXdCb3guXG5cbiAgdmFyIHBhdGggPSBcIlwiO1xuXG4gIHN3aXRjaCAoc2l6ZSkge1xuICAgIGNhc2UgXCJzcXJ0TWFpblwiOlxuICAgICAgcGF0aCA9IHNxcnRNYWluKGV4dHJhVmluaWN1bHVtLCBoTGluZVBhZCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJzcXJ0U2l6ZTFcIjpcbiAgICAgIHBhdGggPSBzcXJ0U2l6ZTEoZXh0cmFWaW5pY3VsdW0sIGhMaW5lUGFkKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInNxcnRTaXplMlwiOlxuICAgICAgcGF0aCA9IHNxcnRTaXplMihleHRyYVZpbmljdWx1bSwgaExpbmVQYWQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwic3FydFNpemUzXCI6XG4gICAgICBwYXRoID0gc3FydFNpemUzKGV4dHJhVmluaWN1bHVtLCBoTGluZVBhZCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJzcXJ0U2l6ZTRcIjpcbiAgICAgIHBhdGggPSBzcXJ0U2l6ZTQoZXh0cmFWaW5pY3VsdW0sIGhMaW5lUGFkKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInNxcnRUYWxsXCI6XG4gICAgICBwYXRoID0gc3FydFRhbGwoZXh0cmFWaW5pY3VsdW0sIGhMaW5lUGFkLCB2aWV3Qm94SGVpZ2h0KTtcbiAgfVxuXG4gIHJldHVybiBwYXRoO1xufTtcbnZhciBzdmdHZW9tZXRyeV9wYXRoID0ge1xuICAvLyBUaGUgZG91YmxlbGVmdGFycm93IGdlb21ldHJ5IGlzIGZyb20gZ2x5cGggVSsyMUQwIGluIHRoZSBmb250IEthVGVYIE1haW5cbiAgZG91YmxlbGVmdGFycm93OiBcIk0yNjIgMTU3XFxubDEwLTEwYzM0LTM2IDYyLjctNzcgODYtMTIzIDMuMy04IDUtMTMuMyA1LTE2IDAtNS4zLTYuNy04LTIwLTgtNy4zXFxuIDAtMTIuMi41LTE0LjUgMS41LTIuMyAxLTQuOCA0LjUtNy41IDEwLjUtNDkuMyA5Ny4zLTEyMS43IDE2OS4zLTIxNyAyMTYtMjhcXG4gMTQtNTcuMyAyNS04OCAzMy02LjcgMi0xMSAzLjgtMTMgNS41LTIgMS43LTMgNC4yLTMgNy41czEgNS44IDMgNy41XFxuYzIgMS43IDYuMyAzLjUgMTMgNS41IDY4IDE3LjMgMTI4LjIgNDcuOCAxODAuNSA5MS41IDUyLjMgNDMuNyA5My44IDk2LjIgMTI0LjVcXG4gMTU3LjUgOS4zIDggMTUuMyAxMi4zIDE4IDEzaDZjMTItLjcgMTgtNCAxOC0xMCAwLTItMS43LTctNS0xNS0yMy4zLTQ2LTUyLTg3XFxuLTg2LTEyM2wtMTAtMTBoMzk5NzM4di00MEgyMThjMzI4IDAgMCAwIDAgMGwtMTAtOGMtMjYuNy0yMC02NS43LTQzLTExNy02OSAyLjdcXG4tMiA2LTMuNyAxMC01IDM2LjctMTYgNzIuMy0zNy4zIDEwNy02NGwxMC04aDM5OTc4MnYtNDB6XFxubTggMHY0MGgzOTk3MzB2LTQwem0wIDE5NHY0MGgzOTk3MzB2LTQwelwiLFxuICAvLyBkb3VibGVyaWdodGFycm93IGlzIGZyb20gZ2x5cGggVSsyMUQyIGluIGZvbnQgS2FUZVggTWFpblxuICBkb3VibGVyaWdodGFycm93OiBcIk0zOTk3MzggMzkybFxcbi0xMCAxMGMtMzQgMzYtNjIuNyA3Ny04NiAxMjMtMy4zIDgtNSAxMy4zLTUgMTYgMCA1LjMgNi43IDggMjAgOCA3LjMgMCAxMi4yLS41XFxuIDE0LjUtMS41IDIuMy0xIDQuOC00LjUgNy41LTEwLjUgNDkuMy05Ny4zIDEyMS43LTE2OS4zIDIxNy0yMTYgMjgtMTQgNTcuMy0yNSA4OFxcbi0zMyA2LjctMiAxMS0zLjggMTMtNS41IDItMS43IDMtNC4yIDMtNy41cy0xLTUuOC0zLTcuNWMtMi0xLjctNi4zLTMuNS0xMy01LjUtNjhcXG4tMTcuMy0xMjguMi00Ny44LTE4MC41LTkxLjUtNTIuMy00My43LTkzLjgtOTYuMi0xMjQuNS0xNTcuNS05LjMtOC0xNS4zLTEyLjMtMThcXG4tMTNoLTZjLTEyIC43LTE4IDQtMTggMTAgMCAyIDEuNyA3IDUgMTUgMjMuMyA0NiA1MiA4NyA4NiAxMjNsMTAgMTBIMHY0MGgzOTk3ODJcXG5jLTMyOCAwIDAgMCAwIDBsMTAgOGMyNi43IDIwIDY1LjcgNDMgMTE3IDY5LTIuNyAyLTYgMy43LTEwIDUtMzYuNyAxNi03Mi4zIDM3LjNcXG4tMTA3IDY0bC0xMCA4SDB2NDB6TTAgMTU3djQwaDM5OTczMHYtNDB6bTAgMTk0djQwaDM5OTczMHYtNDB6XCIsXG4gIC8vIGxlZnRhcnJvdyBpcyBmcm9tIGdseXBoIFUrMjE5MCBpbiBmb250IEthVGVYIE1haW5cbiAgbGVmdGFycm93OiBcIk00MDAwMDAgMjQxSDExMGwzLTNjNjguNy01Mi43IDExMy43LTEyMFxcbiAxMzUtMjAyIDQtMTQuNyA2LTIzIDYtMjUgMC03LjMtNy0xMS0yMS0xMS04IDAtMTMuMi44LTE1LjUgMi41LTIuMyAxLjctNC4yIDUuOFxcbi01LjUgMTIuNS0xLjMgNC43LTIuNyAxMC4zLTQgMTctMTIgNDguNy0zNC44IDkyLTY4LjUgMTMwUzY1LjMgMjI4LjMgMTggMjQ3XFxuYy0xMCA0LTE2IDcuNy0xOCAxMSAwIDguNyA2IDE0LjMgMTggMTcgNDcuMyAxOC43IDg3LjggNDcgMTIxLjUgODVTMTk2IDQ0MS4zIDIwOFxcbiA0OTBjLjcgMiAxLjMgNSAyIDlzMS4yIDYuNyAxLjUgOGMuMyAxLjMgMSAzLjMgMiA2czIuMiA0LjUgMy41IDUuNWMxLjMgMSAzLjNcXG4gMS44IDYgMi41czYgMSAxMCAxYzE0IDAgMjEtMy43IDIxLTExIDAtMi0yLTEwLjMtNi0yNS0yMC03OS4zLTY1LTE0Ni43LTEzNS0yMDJcXG4gbC0zLTNoMzk5ODkwek0xMDAgMjQxdjQwaDM5OTkwMHYtNDB6XCIsXG4gIC8vIG92ZXJicmFjZSBpcyBmcm9tIGdseXBocyBVKzIzQTkvMjNBOC8yM0E3IGluIGZvbnQgS2FUZVhfU2l6ZTQtUmVndWxhclxuICBsZWZ0YnJhY2U6IFwiTTYgNTQ4bC02LTZ2LTM1bDYtMTFjNTYtMTA0IDEzNS4zLTE4MS4zIDIzOC0yMzIgNTcuMy0yOC43IDExN1xcbi00NSAxNzktNTBoMzk5NTc3djEyMEg0MDNjLTQzLjMgNy04MSAxNS0xMTMgMjYtMTAwLjcgMzMtMTc5LjcgOTEtMjM3IDE3NC0yLjdcXG4gNS02IDktMTAgMTMtLjcgMS03LjMgMS0yMCAxSDZ6XCIsXG4gIGxlZnRicmFjZXVuZGVyOiBcIk0wIDZsNi02aDE3YzEyLjY4OCAwIDE5LjMxMy4zIDIwIDEgNCA0IDcuMzEzIDguMyAxMCAxM1xcbiAzNS4zMTMgNTEuMyA4MC44MTMgOTMuOCAxMzYuNSAxMjcuNSA1NS42ODggMzMuNyAxMTcuMTg4IDU1LjggMTg0LjUgNjYuNS42ODhcXG4gMCAyIC4zIDQgMSAxOC42ODggMi43IDc2IDQuMyAxNzIgNWgzOTk0NTB2MTIwSDQyOWwtNi0xYy0xMjQuNjg4LTgtMjM1LTYxLjdcXG4tMzMxLTE2MUM2MC42ODcgMTM4LjcgMzIuMzEyIDk5LjMgNyA1NEwwIDQxVjZ6XCIsXG4gIC8vIG92ZXJncm91cCBpcyBmcm9tIHRoZSBNblN5bWJvbCBwYWNrYWdlIChwdWJsaWMgZG9tYWluKVxuICBsZWZ0Z3JvdXA6IFwiTTQwMDAwMCA4MFxcbkg0MzVDNjQgODAgMTY4LjMgMjI5LjQgMjEgMjYwYy01LjkgMS4yLTE4IDAtMTggMC0yIDAtMy0xLTMtM3YtMzhDNzYgNjEgMjU3IDBcXG4gNDM1IDBoMzk5NTY1elwiLFxuICBsZWZ0Z3JvdXB1bmRlcjogXCJNNDAwMDAwIDI2Mlxcbkg0MzVDNjQgMjYyIDE2OC4zIDExMi42IDIxIDgyYy01LjktMS4yLTE4IDAtMTggMC0yIDAtMyAxLTMgM3YzOGM3NiAxNTggMjU3IDIxOVxcbiA0MzUgMjE5aDM5OTU2NXpcIixcbiAgLy8gSGFycG9vbnMgYXJlIGZyb20gZ2x5cGggVSsyMUJEIGluIGZvbnQgS2FUZVggTWFpblxuICBsZWZ0aGFycG9vbjogXCJNMCAyNjdjLjcgNS4zIDMgMTAgNyAxNGgzOTk5OTN2LTQwSDkzYzMuM1xcbi0zLjMgMTAuMi05LjUgMjAuNS0xOC41czE3LjgtMTUuOCAyMi41LTIwLjVjNTAuNy01MiA4OC0xMTAuMyAxMTItMTc1IDQtMTEuMyA1XFxuLTE4LjMgMy0yMS0xLjMtNC03LjMtNi0xOC02LTggMC0xMyAuNy0xNSAycy00LjcgNi43LTggMTZjLTQyIDk4LjctMTA3LjMgMTc0LjdcXG4tMTk2IDIyOC02LjcgNC43LTEwLjcgOC0xMiAxMC0xLjMgMi0yIDUuNy0yIDExem0xMDAtMjZ2NDBoMzk5OTAwdi00MHpcIixcbiAgbGVmdGhhcnBvb25wbHVzOiBcIk0wIDI2N2MuNyA1LjMgMyAxMCA3IDE0aDM5OTk5M3YtNDBIOTNjMy4zLTMuMyAxMC4yLTkuNVxcbiAyMC41LTE4LjVzMTcuOC0xNS44IDIyLjUtMjAuNWM1MC43LTUyIDg4LTExMC4zIDExMi0xNzUgNC0xMS4zIDUtMTguMyAzLTIxLTEuM1xcbi00LTcuMy02LTE4LTYtOCAwLTEzIC43LTE1IDJzLTQuNyA2LjctOCAxNmMtNDIgOTguNy0xMDcuMyAxNzQuNy0xOTYgMjI4LTYuNyA0LjdcXG4tMTAuNyA4LTEyIDEwLTEuMyAyLTIgNS43LTIgMTF6bTEwMC0yNnY0MGgzOTk5MDB2LTQwek0wIDQzNXY0MGg0MDAwMDB2LTQwelxcbm0wIDB2NDBoNDAwMDAwdi00MHpcIixcbiAgbGVmdGhhcnBvb25kb3duOiBcIk03IDI0MWMtNCA0LTYuMzMzIDguNjY3LTcgMTQgMCA1LjMzMy42NjcgOSAyIDExczUuMzMzXFxuIDUuMzMzIDEyIDEwYzkwLjY2NyA1NCAxNTYgMTMwIDE5NiAyMjggMy4zMzMgMTAuNjY3IDYuMzMzIDE2LjMzMyA5IDE3IDIgLjY2NyA1XFxuIDEgOSAxaDVjMTAuNjY3IDAgMTYuNjY3LTIgMTgtNiAyLTIuNjY3IDEtOS42NjctMy0yMS0zMi04Ny4zMzMtODIuNjY3LTE1Ny42NjdcXG4tMTUyLTIxMWwtMy0zaDM5OTkwN3YtNDB6TTkzIDI4MSBINDAwMDAwIHYtNDBMNyAyNDF6XCIsXG4gIGxlZnRoYXJwb29uZG93bnBsdXM6IFwiTTcgNDM1Yy00IDQtNi4zIDguNy03IDE0IDAgNS4zLjcgOSAyIDExczUuMyA1LjMgMTJcXG4gMTBjOTAuNyA1NCAxNTYgMTMwIDE5NiAyMjggMy4zIDEwLjcgNi4zIDE2LjMgOSAxNyAyIC43IDUgMSA5IDFoNWMxMC43IDAgMTYuN1xcbi0yIDE4LTYgMi0yLjcgMS05LjctMy0yMS0zMi04Ny4zLTgyLjctMTU3LjctMTUyLTIxMWwtMy0zaDM5OTkwN3YtNDBIN3ptOTMgMFxcbnY0MGgzOTk5MDB2LTQwek0wIDI0MXY0MGgzOTk5MDB2LTQwem0wIDB2NDBoMzk5OTAwdi00MHpcIixcbiAgLy8gaG9vayBpcyBmcm9tIGdseXBoIFUrMjFBOSBpbiBmb250IEthVGVYIE1haW5cbiAgbGVmdGhvb2s6IFwiTTQwMDAwMCAyODEgSDEwM3MtMzMtMTEuMi02MS0zMy41UzAgMTk3LjMgMCAxNjRzMTQuMi02MS4yIDQyLjVcXG4tODMuNUM3MC44IDU4LjIgMTA0IDQ3IDE0MiA0NyBjMTYuNyAwIDI1IDYuNyAyNSAyMCAwIDEyLTguNyAxOC43LTI2IDIwLTQwIDMuM1xcbi02OC43IDE1LjctODYgMzctMTAgMTItMTUgMjUuMy0xNSA0MCAwIDIyLjcgOS44IDQwLjcgMjkuNSA1NCAxOS43IDEzLjMgNDMuNSAyMVxcbiA3MS41IDIzaDM5OTg1OXpNMTAzIDI4MXYtNDBoMzk5ODk3djQwelwiLFxuICBsZWZ0bGluZXNlZ21lbnQ6IFwiTTQwIDI4MSBWNDI4IEgwIFY5NCBINDAgVjI0MSBINDAwMDAwIHY0MHpcXG5NNDAgMjgxIFY0MjggSDAgVjk0IEg0MCBWMjQxIEg0MDAwMDAgdjQwelwiLFxuICBsZWZ0bWFwc3RvOiBcIk00MCAyODEgVjQ0OEgwVjc0SDQwVjI0MUg0MDAwMDB2NDB6XFxuTTQwIDI4MSBWNDQ4SDBWNzRINDBWMjQxSDQwMDAwMHY0MHpcIixcbiAgLy8gdG9mcm9tIGlzIGZyb20gZ2x5cGggVSsyMUM0IGluIGZvbnQgS2FUZVggQU1TIFJlZ3VsYXJcbiAgbGVmdFRvRnJvbTogXCJNMCAxNDdoNDAwMDAwdjQwSDB6bTAgMjE0YzY4IDQwIDExNS43IDk1LjcgMTQzIDE2N2gyMmMxNS4zIDAgMjNcXG4tLjMgMjMtMSAwLTEuMy01LjMtMTMuNy0xNi0zNy0xOC0zNS4zLTQxLjMtNjktNzAtMTAxbC03LThoMzk5OTA1di00MEg5NWw3LThcXG5jMjguNy0zMiA1Mi02NS43IDcwLTEwMSAxMC43LTIzLjMgMTYtMzUuNyAxNi0zNyAwLS43LTcuNy0xLTIzLTFoLTIyQzExNS43IDI2NS4zXFxuIDY4IDMyMSAwIDM2MXptMC0xNzR2LTQwaDM5OTkwMHY0MHptMTAwIDE1NHY0MGgzOTk5MDB2LTQwelwiLFxuICBsb25nZXF1YWw6IFwiTTAgNTAgaDQwMDAwMCB2NDBIMHogbTAgMTk0aDQwMDAwdjQwSDB6XFxuTTAgNTAgaDQwMDAwMCB2NDBIMHogbTAgMTk0aDQwMDAwdjQwSDB6XCIsXG4gIG1pZGJyYWNlOiBcIk0yMDA0MjggMzM0XFxuYy0xMDAuNy04LjMtMTk1LjMtNDQtMjgwLTEwOC01NS4zLTQyLTEwMS43LTkzLTEzOS0xNTNsLTktMTRjLTIuNyA0LTUuNyA4LjctOSAxNFxcbi01My4zIDg2LjctMTIzLjcgMTUzLTIxMSAxOTktNjYuNyAzNi0xMzcuMyA1Ni4zLTIxMiA2MkgwVjIxNGgxOTk1NjhjMTc4LjMtMTEuN1xcbiAzMTEuNy03OC4zIDQwMy0yMDEgNi04IDkuNy0xMiAxMS0xMiAuNy0uNyA2LjctMSAxOC0xczE3LjMuMyAxOCAxYzEuMyAwIDUgNCAxMVxcbiAxMiA0NC43IDU5LjMgMTAxLjMgMTA2LjMgMTcwIDE0MXMxNDUuMyA1NC4zIDIyOSA2MGgxOTk1NzJ2MTIwelwiLFxuICBtaWRicmFjZXVuZGVyOiBcIk0xOTk1NzIgMjE0XFxuYzEwMC43IDguMyAxOTUuMyA0NCAyODAgMTA4IDU1LjMgNDIgMTAxLjcgOTMgMTM5IDE1M2w5IDE0YzIuNy00IDUuNy04LjcgOS0xNFxcbiA1My4zLTg2LjcgMTIzLjctMTUzIDIxMS0xOTkgNjYuNy0zNiAxMzcuMy01Ni4zIDIxMi02MmgxOTk1Njh2MTIwSDIwMDQzMmMtMTc4LjNcXG4gMTEuNy0zMTEuNyA3OC4zLTQwMyAyMDEtNiA4LTkuNyAxMi0xMSAxMi0uNy43LTYuNyAxLTE4IDFzLTE3LjMtLjMtMTgtMWMtMS4zIDBcXG4tNS00LTExLTEyLTQ0LjctNTkuMy0xMDEuMy0xMDYuMy0xNzAtMTQxcy0xNDUuMy01NC4zLTIyOS02MEgwVjIxNHpcIixcbiAgb2lpbnRTaXplMTogXCJNNTEyLjYgNzEuNmMyNzIuNiAwIDMyMC4zIDEwNi44IDMyMC4zIDE3OC4yIDAgNzAuOC00Ny43IDE3Ny42XFxuLTMyMC4zIDE3Ny42UzE5My4xIDMyMC42IDE5My4xIDI0OS44YzAtNzEuNCA0Ni45LTE3OC4yIDMxOS41LTE3OC4yelxcbm0zNjguMSAxNzguMmMwLTg2LjQtNjAuOS0yMTUuNC0zNjguMS0yMTUuNC0zMDYuNCAwLTM2Ny4zIDEyOS0zNjcuMyAyMTUuNCAwIDg1LjhcXG42MC45IDIxNC44IDM2Ny4zIDIxNC44IDMwNy4yIDAgMzY4LjEtMTI5IDM2OC4xLTIxNC44elwiLFxuICBvaWludFNpemUyOiBcIk03NTcuOCAxMDAuMWMzODQuNyAwIDQ1MS4xIDEzNy42IDQ1MS4xIDIzMCAwIDkxLjMtNjYuNCAyMjguOFxcbi00NTEuMSAyMjguOC0zODYuMyAwLTQ1Mi43LTEzNy41LTQ1Mi43LTIyOC44IDAtOTIuNCA2Ni40LTIzMCA0NTIuNy0yMzB6XFxubTUwMi40IDIzMGMwLTExMS4yLTgyLjQtMjc3LjItNTAyLjQtMjc3LjJzLTUwNCAxNjYtNTA0IDI3Ny4yXFxuYzAgMTEwIDg0IDI3NiA1MDQgMjc2czUwMi40LTE2NiA1MDIuNC0yNzZ6XCIsXG4gIG9paWludFNpemUxOiBcIk02ODEuNCA3MS42YzQwOC45IDAgNDgwLjUgMTA2LjggNDgwLjUgMTc4LjIgMCA3MC44LTcxLjYgMTc3LjZcXG4tNDgwLjUgMTc3LjZTMjAyLjEgMzIwLjYgMjAyLjEgMjQ5LjhjMC03MS40IDcwLjUtMTc4LjIgNDc5LjMtMTc4LjJ6XFxubTUyNS44IDE3OC4yYzAtODYuNC04Ni44LTIxNS40LTUyNS43LTIxNS40LTQzNy45IDAtNTI0LjcgMTI5LTUyNC43IDIxNS40IDBcXG44NS44IDg2LjggMjE0LjggNTI0LjcgMjE0LjggNDM4LjkgMCA1MjUuNy0xMjkgNTI1LjctMjE0Ljh6XCIsXG4gIG9paWludFNpemUyOiBcIk0xMDIxLjIgNTNjNjAzLjYgMCA3MDcuOCAxNjUuOCA3MDcuOCAyNzcuMiAwIDExMC0xMDQuMiAyNzUuOFxcbi03MDcuOCAyNzUuOC02MDYgMC03MTAuMi0xNjUuOC03MTAuMi0yNzUuOEMzMTEgMjE4LjggNDE1LjIgNTMgMTAyMS4yIDUzelxcbm03NzAuNCAyNzcuMWMwLTEzMS4yLTEyNi40LTMyNy42LTc3MC41LTMyNy42UzI0OC40IDE5OC45IDI0OC40IDMzMC4xXFxuYzAgMTMwIDEyOC44IDMyNi40IDc3Mi43IDMyNi40czc3MC41LTE5Ni40IDc3MC41LTMyNi40elwiLFxuICByaWdodGFycm93OiBcIk0wIDI0MXY0MGgzOTk4OTFjLTQ3LjMgMzUuMy04NCA3OC0xMTAgMTI4XFxuLTE2LjcgMzItMjcuNyA2My43LTMzIDk1IDAgMS4zLS4yIDIuNy0uNSA0LS4zIDEuMy0uNSAyLjMtLjUgMyAwIDcuMyA2LjcgMTEgMjBcXG4gMTEgOCAwIDEzLjItLjggMTUuNS0yLjUgMi4zLTEuNyA0LjItNS41IDUuNS0xMS41IDItMTMuMyA1LjctMjcgMTEtNDEgMTQuNy00NC43XFxuIDM5LTg0LjUgNzMtMTE5LjVzNzMuNy02MC4yIDExOS03NS41YzYtMiA5LTUuNyA5LTExcy0zLTktOS0xMWMtNDUuMy0xNS4zLTg1XFxuLTQwLjUtMTE5LTc1LjVzLTU4LjMtNzQuOC03My0xMTkuNWMtNC43LTE0LTguMy0yNy4zLTExLTQwLTEuMy02LjctMy4yLTEwLjgtNS41XFxuLTEyLjUtMi4zLTEuNy03LjUtMi41LTE1LjUtMi41LTE0IDAtMjEgMy43LTIxIDExIDAgMiAyIDEwLjMgNiAyNSAyMC43IDgzLjMgNjdcXG4gMTUxLjcgMTM5IDIwNXptMCAwdjQwaDM5OTkwMHYtNDB6XCIsXG4gIHJpZ2h0YnJhY2U6IFwiTTQwMDAwMCA1NDJsXFxuLTYgNmgtMTdjLTEyLjcgMC0xOS4zLS4zLTIwLTEtNC00LTcuMy04LjMtMTAtMTMtMzUuMy01MS4zLTgwLjgtOTMuOC0xMzYuNS0xMjcuNVxcbnMtMTE3LjItNTUuOC0xODQuNS02Ni41Yy0uNyAwLTItLjMtNC0xLTE4LjctMi43LTc2LTQuMy0xNzItNUgwVjIxNGgzOTk1NzFsNiAxXFxuYzEyNC43IDggMjM1IDYxLjcgMzMxIDE2MSAzMS4zIDMzLjMgNTkuNyA3Mi43IDg1IDExOGw3IDEzdjM1elwiLFxuICByaWdodGJyYWNldW5kZXI6IFwiTTM5OTk5NCAwbDYgNnYzNWwtNiAxMWMtNTYgMTA0LTEzNS4zIDE4MS4zLTIzOCAyMzItNTcuM1xcbiAyOC43LTExNyA0NS0xNzkgNTBILTMwMFYyMTRoMzk5ODk3YzQzLjMtNyA4MS0xNSAxMTMtMjYgMTAwLjctMzMgMTc5LjctOTEgMjM3XFxuLTE3NCAyLjctNSA2LTkgMTAtMTMgLjctMSA3LjMtMSAyMC0xaDE3elwiLFxuICByaWdodGdyb3VwOiBcIk0wIDgwaDM5OTU2NWMzNzEgMCAyNjYuNyAxNDkuNCA0MTQgMTgwIDUuOSAxLjIgMTggMCAxOCAwIDIgMFxcbiAzLTEgMy0zdi0zOGMtNzYtMTU4LTI1Ny0yMTktNDM1LTIxOUgwelwiLFxuICByaWdodGdyb3VwdW5kZXI6IFwiTTAgMjYyaDM5OTU2NWMzNzEgMCAyNjYuNy0xNDkuNCA0MTQtMTgwIDUuOS0xLjIgMTggMCAxOFxcbiAwIDIgMCAzIDEgMyAzdjM4Yy03NiAxNTgtMjU3IDIxOS00MzUgMjE5SDB6XCIsXG4gIHJpZ2h0aGFycG9vbjogXCJNMCAyNDF2NDBoMzk5OTkzYzQuNy00LjcgNy05LjMgNy0xNCAwLTkuM1xcbi0zLjctMTUuMy0xMS0xOC05Mi43LTU2LjctMTU5LTEzMy43LTE5OS0yMzEtMy4zLTkuMy02LTE0LjctOC0xNi0yLTEuMy03LTItMTUtMlxcbi0xMC43IDAtMTYuNyAyLTE4IDYtMiAyLjctMSA5LjcgMyAyMSAxNS4zIDQyIDM2LjcgODEuOCA2NCAxMTkuNSAyNy4zIDM3LjcgNThcXG4gNjkuMiA5MiA5NC41em0wIDB2NDBoMzk5OTAwdi00MHpcIixcbiAgcmlnaHRoYXJwb29ucGx1czogXCJNMCAyNDF2NDBoMzk5OTkzYzQuNy00LjcgNy05LjMgNy0xNCAwLTkuMy0zLjctMTUuMy0xMVxcbi0xOC05Mi43LTU2LjctMTU5LTEzMy43LTE5OS0yMzEtMy4zLTkuMy02LTE0LjctOC0xNi0yLTEuMy03LTItMTUtMi0xMC43IDAtMTYuN1xcbiAyLTE4IDYtMiAyLjctMSA5LjcgMyAyMSAxNS4zIDQyIDM2LjcgODEuOCA2NCAxMTkuNSAyNy4zIDM3LjcgNTggNjkuMiA5MiA5NC41elxcbm0wIDB2NDBoMzk5OTAwdi00MHogbTEwMCAxOTR2NDBoMzk5OTAwdi00MHptMCAwdjQwaDM5OTkwMHYtNDB6XCIsXG4gIHJpZ2h0aGFycG9vbmRvd246IFwiTTM5OTc0NyA1MTFjMCA3LjMgNi43IDExIDIwIDExIDggMCAxMy0uOCAxNS0yLjVzNC43LTYuOFxcbiA4LTE1LjVjNDAtOTQgOTkuMy0xNjYuMyAxNzgtMjE3IDEzLjMtOCAyMC4zLTEyLjMgMjEtMTMgNS4zLTMuMyA4LjUtNS44IDkuNVxcbi03LjUgMS0xLjcgMS41LTUuMiAxLjUtMTAuNXMtMi4zLTEwLjMtNy0xNUgwdjQwaDM5OTkwOGMtMzQgMjUuMy02NC43IDU3LTkyIDk1XFxuLTI3LjMgMzgtNDguNyA3Ny43LTY0IDExOS0zLjMgOC43LTUgMTQtNSAxNnpNMCAyNDF2NDBoMzk5OTAwdi00MHpcIixcbiAgcmlnaHRoYXJwb29uZG93bnBsdXM6IFwiTTM5OTc0NyA3MDVjMCA3LjMgNi43IDExIDIwIDExIDggMCAxMy0uOFxcbiAxNS0yLjVzNC43LTYuOCA4LTE1LjVjNDAtOTQgOTkuMy0xNjYuMyAxNzgtMjE3IDEzLjMtOCAyMC4zLTEyLjMgMjEtMTMgNS4zLTMuM1xcbiA4LjUtNS44IDkuNS03LjUgMS0xLjcgMS41LTUuMiAxLjUtMTAuNXMtMi4zLTEwLjMtNy0xNUgwdjQwaDM5OTkwOGMtMzQgMjUuM1xcbi02NC43IDU3LTkyIDk1LTI3LjMgMzgtNDguNyA3Ny43LTY0IDExOS0zLjMgOC43LTUgMTQtNSAxNnpNMCA0MzV2NDBoMzk5OTAwdi00MHpcXG5tMC0xOTR2NDBoNDAwMDAwdi00MHptMCAwdjQwaDQwMDAwMHYtNDB6XCIsXG4gIHJpZ2h0aG9vazogXCJNMzk5ODU5IDI0MWMtNzY0IDAgMCAwIDAgMCA0MC0zLjMgNjguNy0xNS43IDg2LTM3IDEwLTEyIDE1LTI1LjNcXG4gMTUtNDAgMC0yMi43LTkuOC00MC43LTI5LjUtNTQtMTkuNy0xMy4zLTQzLjUtMjEtNzEuNS0yMy0xNy4zLTEuMy0yNi04LTI2LTIwIDBcXG4tMTMuMyA4LjctMjAgMjYtMjAgMzggMCA3MSAxMS4yIDk5IDMzLjUgMCAwIDcgNS42IDIxIDE2LjcgMTQgMTEuMiAyMSAzMy41IDIxXFxuIDY2LjhzLTE0IDYxLjItNDIgODMuNWMtMjggMjIuMy02MSAzMy41LTk5IDMzLjVMMCAyNDF6IE0wIDI4MXYtNDBoMzk5ODU5djQwelwiLFxuICByaWdodGxpbmVzZWdtZW50OiBcIk0zOTk5NjAgMjQxIFY5NCBoNDAgVjQyOCBoLTQwIFYyODEgSDAgdi00MHpcXG5NMzk5OTYwIDI0MSBWOTQgaDQwIFY0MjggaC00MCBWMjgxIEgwIHYtNDB6XCIsXG4gIHJpZ2h0VG9Gcm9tOiBcIk00MDAwMDAgMTY3Yy03MC43LTQyLTExOC05Ny43LTE0Mi0xNjdoLTIzYy0xNS4zIDAtMjMgLjMtMjNcXG4gMSAwIDEuMyA1LjMgMTMuNyAxNiAzNyAxOCAzNS4zIDQxLjMgNjkgNzAgMTAxbDcgOEgwdjQwaDM5OTkwNWwtNyA4Yy0yOC43IDMyXFxuLTUyIDY1LjctNzAgMTAxLTEwLjcgMjMuMy0xNiAzNS43LTE2IDM3IDAgLjcgNy43IDEgMjMgMWgyM2MyNC02OS4zIDcxLjMtMTI1IDE0Mlxcbi0xNjd6IE0xMDAgMTQ3djQwaDM5OTkwMHYtNDB6TTAgMzQxdjQwaDM5OTkwMHYtNDB6XCIsXG4gIC8vIHR3b2hlYWRsZWZ0YXJyb3cgaXMgZnJvbSBnbHlwaCBVKzIxOUUgaW4gZm9udCBLYVRlWCBBTVMgUmVndWxhclxuICB0d29oZWFkbGVmdGFycm93OiBcIk0wIDE2N2M2OCA0MFxcbiAxMTUuNyA5NS43IDE0MyAxNjdoMjJjMTUuMyAwIDIzLS4zIDIzLTEgMC0xLjMtNS4zLTEzLjctMTYtMzctMTgtMzUuMy00MS4zLTY5XFxuLTcwLTEwMWwtNy04aDEyNWw5IDdjNTAuNyAzOS4zIDg1IDg2IDEwMyAxNDBoNDZjMC00LjctNi4zLTE4LjctMTktNDItMTgtMzUuM1xcbi00MC02Ny4zLTY2LTk2bC05LTloMzk5NzE2di00MEgyODRsOS05YzI2LTI4LjcgNDgtNjAuNyA2Ni05NiAxMi43LTIzLjMzMyAxOVxcbi0zNy4zMzMgMTktNDJoLTQ2Yy0xOCA1NC01Mi4zIDEwMC43LTEwMyAxNDBsLTkgN0g5NWw3LThjMjguNy0zMiA1Mi02NS43IDcwLTEwMVxcbiAxMC43LTIzLjMzMyAxNi0zNS43IDE2LTM3IDAtLjctNy43LTEtMjMtMWgtMjJDMTE1LjcgNzEuMyA2OCAxMjcgMCAxNjd6XCIsXG4gIHR3b2hlYWRyaWdodGFycm93OiBcIk00MDAwMDAgMTY3XFxuYy02OC00MC0xMTUuNy05NS43LTE0My0xNjdoLTIyYy0xNS4zIDAtMjMgLjMtMjMgMSAwIDEuMyA1LjMgMTMuNyAxNiAzNyAxOCAzNS4zXFxuIDQxLjMgNjkgNzAgMTAxbDcgOGgtMTI1bC05LTdjLTUwLjctMzkuMy04NS04Ni0xMDMtMTQwaC00NmMwIDQuNyA2LjMgMTguNyAxOSA0MlxcbiAxOCAzNS4zIDQwIDY3LjMgNjYgOTZsOSA5SDB2NDBoMzk5NzE2bC05IDljLTI2IDI4LjctNDggNjAuNy02NiA5Ni0xMi43IDIzLjMzM1xcbi0xOSAzNy4zMzMtMTkgNDJoNDZjMTgtNTQgNTIuMy0xMDAuNyAxMDMtMTQwbDktN2gxMjVsLTcgOGMtMjguNyAzMi01MiA2NS43LTcwXFxuIDEwMS0xMC43IDIzLjMzMy0xNiAzNS43LTE2IDM3IDAgLjcgNy43IDEgMjMgMWgyMmMyNy4zLTcxLjMgNzUtMTI3IDE0My0xNjd6XCIsXG4gIC8vIHRpbGRlMSBpcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgYSBnbHlwaCBmcm9tIHRoZSBNblN5bWJvbCBwYWNrYWdlXG4gIHRpbGRlMTogXCJNMjAwIDU1LjUzOGMtNzcgMC0xNjggNzMuOTUzLTE3NyA3My45NTMtMyAwLTdcXG4tMi4xNzUtOS01LjQzN0wyIDk3Yy0xLTItMi00LTItNiAwLTQgMi03IDUtOWwyMC0xMkMxMTYgMTIgMTcxIDAgMjA3IDBjODYgMFxcbiAxMTQgNjggMTkxIDY4IDc4IDAgMTY4LTY4IDE3Ny02OCA0IDAgNyAyIDkgNWwxMiAxOWMxIDIuMTc1IDIgNC4zNSAyIDYuNTI1IDBcXG4gNC4zNS0yIDcuNjEzLTUgOS43ODhsLTE5IDEzLjA1Yy05MiA2My4wNzctMTE2LjkzNyA3NS4zMDgtMTgzIDc2LjEyOFxcbi02OC4yNjcuODQ3LTExMy03My45NTItMTkxLTczLjk1MnpcIixcbiAgLy8gZGl0dG8gdGlsZGUyLCB0aWxkZTMsICYgdGlsZGU0XG4gIHRpbGRlMjogXCJNMzQ0IDU1LjI2NmMtMTQyIDAtMzAwLjYzOCA4MS4zMTYtMzExLjUgODYuNDE4XFxuLTguMDEgMy43NjItMjIuNSAxMC45MS0yMy41IDUuNTYyTDEgMTIwYy0xLTItMS0zLTEtNCAwLTUgMy05IDgtMTBsMTguNC05QzE2MC45XFxuIDMxLjkgMjgzIDAgMzU4IDBjMTQ4IDAgMTg4IDEyMiAzMzEgMTIyczMxNC05NyAzMjYtOTdjNCAwIDggMiAxMCA3bDcgMjEuMTE0XFxuYzEgMi4xNCAxIDMuMjEgMSA0LjI4IDAgNS4zNDctMyA5LjYyNi03IDEwLjY5NmwtMjIuMyAxMi42MjJDODUyLjYgMTU4LjM3MiA3NTFcXG4gMTgxLjQ3NiA2NzYgMTgxLjQ3NmMtMTQ5IDAtMTg5LTEyNi4yMS0zMzItMTI2LjIxelwiLFxuICB0aWxkZTM6IFwiTTc4NiA1OUM0NTcgNTkgMzIgMTc1LjI0MiAxMyAxNzUuMjQyYy02IDAtMTAtMy40NTdcXG4tMTEtMTAuMzdMLjE1IDEzOGMtMS03IDMtMTIgMTAtMTNsMTkuMi02LjRDMzc4LjQgNDAuNyA2MzQuMyAwIDgwNC4zIDBjMzM3IDBcXG4gNDExLjggMTU3IDc0Ni44IDE1NyAzMjggMCA3NTQtMTEyIDc3My0xMTIgNSAwIDEwIDMgMTEgOWwxIDE0LjA3NWMxIDguMDY2LS42OTdcXG4gMTYuNTk1LTYuNjk3IDE3LjQ5MmwtMjEuMDUyIDcuMzFjLTM2Ny45IDk4LjE0Ni02MDkuMTUgMTIyLjY5Ni03NzguMTUgMTIyLjY5NlxcbiAtMzM4IDAtNDA5LTE1Ni41NzMtNzQ0LTE1Ni41NzN6XCIsXG4gIHRpbGRlNDogXCJNNzg2IDU4QzQ1NyA1OCAzMiAxNzcuNDg3IDEzIDE3Ny40ODdjLTYgMC0xMC0zLjM0NVxcbi0xMS0xMC4wMzVMLjE1IDE0M2MtMS03IDMtMTIgMTAtMTNsMjItNi43QzM4MS4yIDM1IDYzNy4xNSAwIDgwNy4xNSAwYzMzNyAwIDQwOVxcbiAxNzcgNzQ0IDE3NyAzMjggMCA3NTQtMTI3IDc3My0xMjcgNSAwIDEwIDMgMTEgOWwxIDE0Ljc5NGMxIDcuODA1LTMgMTMuMzgtOVxcbiAxNC40OTVsLTIwLjcgNS41NzRjLTM2Ni44NSA5OS43OS02MDcuMyAxMzkuMzcyLTc3Ni4zIDEzOS4zNzItMzM4IDAtNDA5XFxuIC0xNzUuMjM2LTc0NC0xNzUuMjM2elwiLFxuICAvLyB2ZWMgaXMgZnJvbSBnbHlwaCBVKzIwRDcgaW4gZm9udCBLYVRlWCBNYWluXG4gIHZlYzogXCJNMzc3IDIwYzAtNS4zMzMgMS44MzMtMTAgNS41LTE0UzM5MSAwIDM5NyAwYzQuNjY3IDAgOC42NjcgMS42NjcgMTIgNVxcbjMuMzMzIDIuNjY3IDYuNjY3IDkgMTAgMTkgNi42NjcgMjQuNjY3IDIwLjMzMyA0My42NjcgNDEgNTcgNy4zMzMgNC42NjcgMTFcXG4xMC42NjcgMTEgMTggMCA2LTEgMTAtMyAxMnMtNi42NjcgNS0xNCA5Yy0yOC42NjcgMTQuNjY3LTUzLjY2NyAzNS42NjctNzUgNjNcXG4tMS4zMzMgMS4zMzMtMy4xNjcgMy41LTUuNSA2LjVzLTQgNC44MzMtNSA1LjVjLTEgLjY2Ny0yLjUgMS4zMzMtNC41IDJzLTQuMzMzIDFcXG4tNyAxYy00LjY2NyAwLTkuMTY3LTEuODMzLTEzLjUtNS41UzMzNyAxODQgMzM3IDE3OGMwLTEyLjY2NyAxNS42NjctMzIuMzMzIDQ3LTU5XFxuSDIxM2wtMTcxLTFjLTguNjY3LTYtMTMtMTIuMzMzLTEzLTE5IDAtNC42NjcgNC4zMzMtMTEuMzMzIDEzLTIwaDM1OVxcbmMtMTYtMjUuMzMzLTI0LTQ1LTI0LTU5elwiLFxuICAvLyB3aWRlaGF0MSBpcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgYSBnbHlwaCBmcm9tIHRoZSBNblN5bWJvbCBwYWNrYWdlXG4gIHdpZGVoYXQxOiBcIk01MjkgMGg1bDUxOSAxMTVjNSAxIDkgNSA5IDEwIDAgMS0xIDItMSAzbC00IDIyXFxuYy0xIDUtNSA5LTExIDloLTJMNTMyIDY3IDE5IDE1OWgtMmMtNSAwLTktNC0xMS05bC01LTIyYy0xLTYgMi0xMiA4LTEzelwiLFxuICAvLyBkaXR0byB3aWRlaGF0Miwgd2lkZWhhdDMsICYgd2lkZWhhdDRcbiAgd2lkZWhhdDI6IFwiTTExODEgMGgybDExNzEgMTc2YzYgMCAxMCA1IDEwIDExbC0yIDIzYy0xIDYtNSAxMFxcbi0xMSAxMGgtMUwxMTgyIDY3IDE1IDIyMGgtMWMtNiAwLTEwLTQtMTEtMTBsLTItMjNjLTEtNiA0LTExIDEwLTExelwiLFxuICB3aWRlaGF0MzogXCJNMTE4MSAwaDJsMTE3MSAyMzZjNiAwIDEwIDUgMTAgMTFsLTIgMjNjLTEgNi01IDEwXFxuLTExIDEwaC0xTDExODIgNjcgMTUgMjgwaC0xYy02IDAtMTAtNC0xMS0xMGwtMi0yM2MtMS02IDQtMTEgMTAtMTF6XCIsXG4gIHdpZGVoYXQ0OiBcIk0xMTgxIDBoMmwxMTcxIDI5NmM2IDAgMTAgNSAxMCAxMWwtMiAyM2MtMSA2LTUgMTBcXG4tMTEgMTBoLTFMMTE4MiA2NyAxNSAzNDBoLTFjLTYgMC0xMC00LTExLTEwbC0yLTIzYy0xLTYgNC0xMSAxMC0xMXpcIixcbiAgLy8gd2lkZWNoZWNrIHBhdGhzIGFyZSBhbGwgaW52ZXJ0ZWQgdmVyc2lvbnMgb2Ygd2lkZWhhdFxuICB3aWRlY2hlY2sxOiBcIk01MjksMTU5aDVsNTE5LC0xMTVjNSwtMSw5LC01LDksLTEwYzAsLTEsLTEsLTIsLTEsLTNsLTQsLTIyYy0xLFxcbi01LC01LC05LC0xMSwtOWgtMmwtNTEyLDkybC01MTMsLTkyaC0yYy01LDAsLTksNCwtMTEsOWwtNSwyMmMtMSw2LDIsMTIsOCwxM3pcIixcbiAgd2lkZWNoZWNrMjogXCJNMTE4MSwyMjBoMmwxMTcxLC0xNzZjNiwwLDEwLC01LDEwLC0xMWwtMiwtMjNjLTEsLTYsLTUsLTEwLFxcbi0xMSwtMTBoLTFsLTExNjgsMTUzbC0xMTY3LC0xNTNoLTFjLTYsMCwtMTAsNCwtMTEsMTBsLTIsMjNjLTEsNiw0LDExLDEwLDExelwiLFxuICB3aWRlY2hlY2szOiBcIk0xMTgxLDI4MGgybDExNzEsLTIzNmM2LDAsMTAsLTUsMTAsLTExbC0yLC0yM2MtMSwtNiwtNSwtMTAsXFxuLTExLC0xMGgtMWwtMTE2OCwyMTNsLTExNjcsLTIxM2gtMWMtNiwwLC0xMCw0LC0xMSwxMGwtMiwyM2MtMSw2LDQsMTEsMTAsMTF6XCIsXG4gIHdpZGVjaGVjazQ6IFwiTTExODEsMzQwaDJsMTE3MSwtMjk2YzYsMCwxMCwtNSwxMCwtMTFsLTIsLTIzYy0xLC02LC01LC0xMCxcXG4tMTEsLTEwaC0xbC0xMTY4LDI3M2wtMTE2NywtMjczaC0xYy02LDAsLTEwLDQsLTExLDEwbC0yLDIzYy0xLDYsNCwxMSwxMCwxMXpcIixcbiAgLy8gVGhlIG5leHQgdGVuIHBhdGhzIHN1cHBvcnQgcmVhY3Rpb24gYXJyb3dzIGZyb20gdGhlIG1oY2hlbSBwYWNrYWdlLlxuICAvLyBBcnJvd3MgZm9yIFxcY2V7PC0tPn0gYXJlIG9mZnNldCBmcm9tIHhBeGlzIGJ5IDAuMjJleCwgcGVyIG1oY2hlbSBpbiBMYVRlWFxuICAvLyBiYXJhYm92ZWxlZnRhcnJvdyBpcyBtb3N0bHkgZnJvbSBmcm9tIGdseXBoIFUrMjE5MCBpbiBmb250IEthVGVYIE1haW5cbiAgYmFyYWJvdmVsZWZ0YXJyb3c6IFwiTTQwMDAwMCA2MjBoLTM5OTg5MGwzIC0zYzY4LjcgLTUyLjcgMTEzLjcgLTEyMCAxMzUgLTIwMlxcbmM0IC0xNC43IDYgLTIzIDYgLTI1YzAgLTcuMyAtNyAtMTEgLTIxIC0xMWMtOCAwIC0xMy4yIDAuOCAtMTUuNSAyLjVcXG5jLTIuMyAxLjcgLTQuMiA1LjggLTUuNSAxMi41Yy0xLjMgNC43IC0yLjcgMTAuMyAtNCAxN2MtMTIgNDguNyAtMzQuOCA5MiAtNjguNSAxMzBcXG5zLTc0LjIgNjYuMyAtMTIxLjUgODVjLTEwIDQgLTE2IDcuNyAtMTggMTFjMCA4LjcgNiAxNC4zIDE4IDE3YzQ3LjMgMTguNyA4Ny44IDQ3XFxuMTIxLjUgODVzNTYuNSA4MS4zIDY4LjUgMTMwYzAuNyAyIDEuMyA1IDIgOXMxLjIgNi43IDEuNSA4YzAuMyAxLjMgMSAzLjMgMiA2XFxuczIuMiA0LjUgMy41IDUuNWMxLjMgMSAzLjMgMS44IDYgMi41czYgMSAxMCAxYzE0IDAgMjEgLTMuNyAyMSAtMTFcXG5jMCAtMiAtMiAtMTAuMyAtNiAtMjVjLTIwIC03OS4zIC02NSAtMTQ2LjcgLTEzNSAtMjAybC0zIC0zaDM5OTg5MHpcXG5NMTAwIDYyMHY0MGgzOTk5MDB2LTQweiBNMCAyNDF2NDBoMzk5OTAwdi00MHpNMCAyNDF2NDBoMzk5OTAwdi00MHpcIixcbiAgLy8gcmlnaHRhcnJvd2Fib3ZlYmFyIGlzIG1vc3RseSBmcm9tIGdseXBoIFUrMjE5MiwgS2FUZVggTWFpblxuICByaWdodGFycm93YWJvdmViYXI6IFwiTTAgMjQxdjQwaDM5OTg5MWMtNDcuMyAzNS4zLTg0IDc4LTExMCAxMjgtMTYuNyAzMlxcbi0yNy43IDYzLjctMzMgOTUgMCAxLjMtLjIgMi43LS41IDQtLjMgMS4zLS41IDIuMy0uNSAzIDAgNy4zIDYuNyAxMSAyMCAxMSA4IDBcXG4xMy4yLS44IDE1LjUtMi41IDIuMy0xLjcgNC4yLTUuNSA1LjUtMTEuNSAyLTEzLjMgNS43LTI3IDExLTQxIDE0LjctNDQuNyAzOVxcbi04NC41IDczLTExOS41czczLjctNjAuMiAxMTktNzUuNWM2LTIgOS01LjcgOS0xMXMtMy05LTktMTFjLTQ1LjMtMTUuMy04NS00MC41XFxuLTExOS03NS41cy01OC4zLTc0LjgtNzMtMTE5LjVjLTQuNy0xNC04LjMtMjcuMy0xMS00MC0xLjMtNi43LTMuMi0xMC44LTUuNVxcbi0xMi41LTIuMy0xLjctNy41LTIuNS0xNS41LTIuNS0xNCAwLTIxIDMuNy0yMSAxMSAwIDIgMiAxMC4zIDYgMjUgMjAuNyA4My4zIDY3XFxuMTUxLjcgMTM5IDIwNXptOTYgMzc5aDM5OTg5NHY0MEgwem0wIDBoMzk5OTA0djQwSDB6XCIsXG4gIC8vIFRoZSBzaG9ydCBsZWZ0IGhhcnBvb24gaGFzIDAuNWVtIChpLmUuIDUwMCB1bml0cykga2VybiBvbiB0aGUgbGVmdCBlbmQuXG4gIC8vIFJlZiBmcm9tIG1oY2hlbS5zdHk6IFxccmxhcHtcXHJhaXNlYm94ey0uMjJleH17JFxca2VybjAuNWVtXG4gIGJhcmFib3Zlc2hvcnRsZWZ0aGFycG9vbjogXCJNNTA3LDQzNWMtNCw0LC02LjMsOC43LC03LDE0YzAsNS4zLDAuNyw5LDIsMTFcXG5jMS4zLDIsNS4zLDUuMywxMiwxMGM5MC43LDU0LDE1NiwxMzAsMTk2LDIyOGMzLjMsMTAuNyw2LjMsMTYuMyw5LDE3XFxuYzIsMC43LDUsMSw5LDFjMCwwLDUsMCw1LDBjMTAuNywwLDE2LjcsLTIsMTgsLTZjMiwtMi43LDEsLTkuNywtMywtMjFcXG5jLTMyLC04Ny4zLC04Mi43LC0xNTcuNywtMTUyLC0yMTFjMCwwLC0zLC0zLC0zLC0zbDM5OTM1MSwwbDAsLTQwXFxuYy0zOTg1NzAsMCwtMzk5NDM3LDAsLTM5OTQzNywweiBNNTkzIDQzNSB2NDAgSDM5OTUwMCB2LTQwelxcbk0wIDI4MSB2LTQwIEgzOTk5MDggdjQweiBNMCAyODEgdi00MCBIMzk5OTA4IHY0MHpcIixcbiAgcmlnaHRoYXJwb29uYWJvdmVzaG9ydGJhcjogXCJNMCwyNDEgbDAsNDBjMzk5MTI2LDAsMzk5OTkzLDAsMzk5OTkzLDBcXG5jNC43LC00LjcsNywtOS4zLDcsLTE0YzAsLTkuMywtMy43LC0xNS4zLC0xMSwtMThjLTkyLjcsLTU2LjcsLTE1OSwtMTMzLjcsLTE5OSxcXG4tMjMxYy0zLjMsLTkuMywtNiwtMTQuNywtOCwtMTZjLTIsLTEuMywtNywtMiwtMTUsLTJjLTEwLjcsMCwtMTYuNywyLC0xOCw2XFxuYy0yLDIuNywtMSw5LjcsMywyMWMxNS4zLDQyLDM2LjcsODEuOCw2NCwxMTkuNWMyNy4zLDM3LjcsNTgsNjkuMiw5Miw5NC41elxcbk0wIDI0MSB2NDAgSDM5OTkwOCB2LTQweiBNMCA0NzUgdi00MCBIMzk5NTAwIHY0MHogTTAgNDc1IHYtNDAgSDM5OTUwMCB2NDB6XCIsXG4gIHNob3J0YmFyYWJvdmVsZWZ0aGFycG9vbjogXCJNNyw0MzVjLTQsNCwtNi4zLDguNywtNywxNGMwLDUuMywwLjcsOSwyLDExXFxuYzEuMywyLDUuMyw1LjMsMTIsMTBjOTAuNyw1NCwxNTYsMTMwLDE5NiwyMjhjMy4zLDEwLjcsNi4zLDE2LjMsOSwxN2MyLDAuNyw1LDEsOSxcXG4xYzAsMCw1LDAsNSwwYzEwLjcsMCwxNi43LC0yLDE4LC02YzIsLTIuNywxLC05LjcsLTMsLTIxYy0zMiwtODcuMywtODIuNywtMTU3LjcsXFxuLTE1MiwtMjExYzAsMCwtMywtMywtMywtM2wzOTk5MDcsMGwwLC00MGMtMzk5MTI2LDAsLTM5OTk5MywwLC0zOTk5OTMsMHpcXG5NOTMgNDM1IHY0MCBINDAwMDAwIHYtNDB6IE01MDAgMjQxIHY0MCBINDAwMDAwIHYtNDB6IE01MDAgMjQxIHY0MCBINDAwMDAwIHYtNDB6XCIsXG4gIHNob3J0cmlnaHRoYXJwb29uYWJvdmViYXI6IFwiTTUzLDI0MWwwLDQwYzM5ODU3MCwwLDM5OTQzNywwLDM5OTQzNywwXFxuYzQuNywtNC43LDcsLTkuMyw3LC0xNGMwLC05LjMsLTMuNywtMTUuMywtMTEsLTE4Yy05Mi43LC01Ni43LC0xNTksLTEzMy43LC0xOTksXFxuLTIzMWMtMy4zLC05LjMsLTYsLTE0LjcsLTgsLTE2Yy0yLC0xLjMsLTcsLTIsLTE1LC0yYy0xMC43LDAsLTE2LjcsMiwtMTgsNlxcbmMtMiwyLjcsLTEsOS43LDMsMjFjMTUuMyw0MiwzNi43LDgxLjgsNjQsMTE5LjVjMjcuMywzNy43LDU4LDY5LjIsOTIsOTQuNXpcXG5NNTAwIDI0MSB2NDAgSDM5OTQwOCB2LTQweiBNNTAwIDQzNSB2NDAgSDQwMDAwMCB2LTQwelwiXG59O1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdHJlZS5qc1xuXG5cbi8qKlxuICogVGhpcyBub2RlIHJlcHJlc2VudHMgYSBkb2N1bWVudCBmcmFnbWVudCwgd2hpY2ggY29udGFpbnMgZWxlbWVudHMsIGJ1dCB3aGVuXG4gKiBwbGFjZWQgaW50byB0aGUgRE9NIGRvZXNuJ3QgaGF2ZSBhbnkgcmVwcmVzZW50YXRpb24gaXRzZWxmLiBJdCBvbmx5IGNvbnRhaW5zXG4gKiBjaGlsZHJlbiBhbmQgZG9lc24ndCBoYXZlIGFueSBET00gbm9kZSBwcm9wZXJ0aWVzLlxuICovXG52YXIgdHJlZV9Eb2N1bWVudEZyYWdtZW50ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgLy8gSHRtbERvbU5vZGVcbiAgLy8gTmV2ZXIgdXNlZDsgbmVlZGVkIGZvciBzYXRpc2Z5aW5nIGludGVyZmFjZS5cbiAgZnVuY3Rpb24gRG9jdW1lbnRGcmFnbWVudChjaGlsZHJlbikge1xuICAgIHRoaXMuY2hpbGRyZW4gPSB2b2lkIDA7XG4gICAgdGhpcy5jbGFzc2VzID0gdm9pZCAwO1xuICAgIHRoaXMuaGVpZ2h0ID0gdm9pZCAwO1xuICAgIHRoaXMuZGVwdGggPSB2b2lkIDA7XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLnN0eWxlID0gdm9pZCAwO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICB0aGlzLmNsYXNzZXMgPSBbXTtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG4gICAgdGhpcy5kZXB0aCA9IDA7XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IDA7XG4gICAgdGhpcy5zdHlsZSA9IHt9O1xuICB9XG5cbiAgdmFyIF9wcm90byA9IERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYXNDbGFzcyA9IGZ1bmN0aW9uIGhhc0NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHJldHVybiB1dGlscy5jb250YWlucyh0aGlzLmNsYXNzZXMsIGNsYXNzTmFtZSk7XG4gIH1cbiAgLyoqIENvbnZlcnQgdGhlIGZyYWdtZW50IGludG8gYSBub2RlLiAqL1xuICA7XG5cbiAgX3Byb3RvLnRvTm9kZSA9IGZ1bmN0aW9uIHRvTm9kZSgpIHtcbiAgICB2YXIgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgZnJhZy5hcHBlbmRDaGlsZCh0aGlzLmNoaWxkcmVuW2ldLnRvTm9kZSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnJhZztcbiAgfVxuICAvKiogQ29udmVydCB0aGUgZnJhZ21lbnQgaW50byBIVE1MIG1hcmt1cC4gKi9cbiAgO1xuXG4gIF9wcm90by50b01hcmt1cCA9IGZ1bmN0aW9uIHRvTWFya3VwKCkge1xuICAgIHZhciBtYXJrdXAgPSBcIlwiOyAvLyBTaW1wbHkgY29uY2F0ZW5hdGUgdGhlIG1hcmt1cCBmb3IgdGhlIGNoaWxkcmVuIHRvZ2V0aGVyLlxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBtYXJrdXAgKz0gdGhpcy5jaGlsZHJlbltpXS50b01hcmt1cCgpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrdXA7XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBtYXRoIG5vZGUgaW50byBhIHN0cmluZywgc2ltaWxhciB0byBpbm5lclRleHQuIEFwcGxpZXMgdG9cbiAgICogTWF0aERvbU5vZGUncyBvbmx5LlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by50b1RleHQgPSBmdW5jdGlvbiB0b1RleHQoKSB7XG4gICAgLy8gVG8gYXZvaWQgdGhpcywgd2Ugd291bGQgc3ViY2xhc3MgZG9jdW1lbnRGcmFnbWVudCBzZXBhcmF0ZWx5IGZvclxuICAgIC8vIE1hdGhNTCwgYnV0IHBvbHlmaWxscyBmb3Igc3ViY2xhc3NpbmcgaXMgZXhwZW5zaXZlIHBlciBQUiAxNDY5LlxuICAgIC8vICRGbG93Rml4TWU6IE9ubHkgd29ya3MgZm9yIENoaWxkVHlwZSA9IE1hdGhEb21Ob2RlLlxuICAgIHZhciB0b1RleHQgPSBmdW5jdGlvbiB0b1RleHQoY2hpbGQpIHtcbiAgICAgIHJldHVybiBjaGlsZC50b1RleHQoKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4ubWFwKHRvVGV4dCkuam9pbihcIlwiKTtcbiAgfTtcblxuICByZXR1cm4gRG9jdW1lbnRGcmFnbWVudDtcbn0oKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2RvbVRyZWUuanNcbi8qKlxuICogVGhlc2Ugb2JqZWN0cyBzdG9yZSB0aGUgZGF0YSBhYm91dCB0aGUgRE9NIG5vZGVzIHdlIGNyZWF0ZSwgYXMgd2VsbCBhcyBzb21lXG4gKiBleHRyYSBkYXRhLiBUaGV5IGNhbiB0aGVuIGJlIHRyYW5zZm9ybWVkIGludG8gcmVhbCBET00gbm9kZXMgd2l0aCB0aGVcbiAqIGB0b05vZGVgIGZ1bmN0aW9uIG9yIEhUTUwgbWFya3VwIHVzaW5nIGB0b01hcmt1cGAuIFRoZXkgYXJlIHVzZWZ1bCBmb3IgYm90aFxuICogc3RvcmluZyBleHRyYSBwcm9wZXJ0aWVzIG9uIHRoZSBub2RlcywgYXMgd2VsbCBhcyBwcm92aWRpbmcgYSB3YXkgdG8gZWFzaWx5XG4gKiB3b3JrIHdpdGggdGhlIERPTS5cbiAqXG4gKiBTaW1pbGFyIGZ1bmN0aW9ucyBmb3Igd29ya2luZyB3aXRoIE1hdGhNTCBub2RlcyBleGlzdCBpbiBtYXRoTUxUcmVlLmpzLlxuICpcbiAqIFRPRE86IHJlZmFjdG9yIGBzcGFuYCBhbmQgYGFuY2hvcmAgaW50byBjb21tb24gc3VwZXJjbGFzcyB3aGVuXG4gKiB0YXJnZXQgZW52aXJvbm1lbnRzIHN1cHBvcnQgY2xhc3MgaW5oZXJpdGFuY2VcbiAqL1xuXG5cblxuXG5cbi8qKlxuICogQ3JlYXRlIGFuIEhUTUwgY2xhc3NOYW1lIGJhc2VkIG9uIGEgbGlzdCBvZiBjbGFzc2VzLiBJbiBhZGRpdGlvbiB0byBqb2luaW5nXG4gKiB3aXRoIHNwYWNlcywgd2UgYWxzbyByZW1vdmUgZW1wdHkgY2xhc3Nlcy5cbiAqL1xudmFyIGNyZWF0ZUNsYXNzID0gZnVuY3Rpb24gY3JlYXRlQ2xhc3MoY2xhc3Nlcykge1xuICByZXR1cm4gY2xhc3Nlcy5maWx0ZXIoZnVuY3Rpb24gKGNscykge1xuICAgIHJldHVybiBjbHM7XG4gIH0pLmpvaW4oXCIgXCIpO1xufTtcblxudmFyIGluaXROb2RlID0gZnVuY3Rpb24gaW5pdE5vZGUoY2xhc3Nlcywgb3B0aW9ucywgc3R5bGUpIHtcbiAgdGhpcy5jbGFzc2VzID0gY2xhc3NlcyB8fCBbXTtcbiAgdGhpcy5hdHRyaWJ1dGVzID0ge307XG4gIHRoaXMuaGVpZ2h0ID0gMDtcbiAgdGhpcy5kZXB0aCA9IDA7XG4gIHRoaXMubWF4Rm9udFNpemUgPSAwO1xuICB0aGlzLnN0eWxlID0gc3R5bGUgfHwge307XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5zdHlsZS5pc1RpZ2h0KCkpIHtcbiAgICAgIHRoaXMuY2xhc3Nlcy5wdXNoKFwibXRpZ2h0XCIpO1xuICAgIH1cblxuICAgIHZhciBjb2xvciA9IG9wdGlvbnMuZ2V0Q29sb3IoKTtcblxuICAgIGlmIChjb2xvcikge1xuICAgICAgdGhpcy5zdHlsZS5jb2xvciA9IGNvbG9yO1xuICAgIH1cbiAgfVxufTtcbi8qKlxuICogQ29udmVydCBpbnRvIGFuIEhUTUwgbm9kZVxuICovXG5cblxudmFyIF90b05vZGUgPSBmdW5jdGlvbiB0b05vZGUodGFnTmFtZSkge1xuICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7IC8vIEFwcGx5IHRoZSBjbGFzc1xuXG4gIG5vZGUuY2xhc3NOYW1lID0gY3JlYXRlQ2xhc3ModGhpcy5jbGFzc2VzKTsgLy8gQXBwbHkgaW5saW5lIHN0eWxlc1xuXG4gIGZvciAodmFyIHN0eWxlIGluIHRoaXMuc3R5bGUpIHtcbiAgICBpZiAodGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZSkpIHtcbiAgICAgIC8vICRGbG93Rml4TWUgRmxvdyBkb2Vzbid0IHNlZW0gdG8gdW5kZXJzdGFuZCBzcGFuLnN0eWxlJ3MgdHlwZS5cbiAgICAgIG5vZGUuc3R5bGVbc3R5bGVdID0gdGhpcy5zdHlsZVtzdHlsZV07XG4gICAgfVxuICB9IC8vIEFwcGx5IGF0dHJpYnV0ZXNcblxuXG4gIGZvciAodmFyIGF0dHIgaW4gdGhpcy5hdHRyaWJ1dGVzKSB7XG4gICAgaWYgKHRoaXMuYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShhdHRyKSkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYXR0ciwgdGhpcy5hdHRyaWJ1dGVzW2F0dHJdKTtcbiAgICB9XG4gIH0gLy8gQXBwZW5kIHRoZSBjaGlsZHJlbiwgYWxzbyBhcyBIVE1MIG5vZGVzXG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBub2RlLmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5baV0udG9Ob2RlKCkpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59O1xuLyoqXG4gKiBDb252ZXJ0IGludG8gYW4gSFRNTCBtYXJrdXAgc3RyaW5nXG4gKi9cblxuXG52YXIgX3RvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAodGFnTmFtZSkge1xuICB2YXIgbWFya3VwID0gXCI8XCIgKyB0YWdOYW1lOyAvLyBBZGQgdGhlIGNsYXNzXG5cbiAgaWYgKHRoaXMuY2xhc3Nlcy5sZW5ndGgpIHtcbiAgICBtYXJrdXAgKz0gXCIgY2xhc3M9XFxcIlwiICsgdXRpbHMuZXNjYXBlKGNyZWF0ZUNsYXNzKHRoaXMuY2xhc3NlcykpICsgXCJcXFwiXCI7XG4gIH1cblxuICB2YXIgc3R5bGVzID0gXCJcIjsgLy8gQWRkIHRoZSBzdHlsZXMsIGFmdGVyIGh5cGhlbmF0aW9uXG5cbiAgZm9yICh2YXIgc3R5bGUgaW4gdGhpcy5zdHlsZSkge1xuICAgIGlmICh0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlKSkge1xuICAgICAgc3R5bGVzICs9IHV0aWxzLmh5cGhlbmF0ZShzdHlsZSkgKyBcIjpcIiArIHRoaXMuc3R5bGVbc3R5bGVdICsgXCI7XCI7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0eWxlcykge1xuICAgIG1hcmt1cCArPSBcIiBzdHlsZT1cXFwiXCIgKyB1dGlscy5lc2NhcGUoc3R5bGVzKSArIFwiXFxcIlwiO1xuICB9IC8vIEFkZCB0aGUgYXR0cmlidXRlc1xuXG5cbiAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICBpZiAodGhpcy5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KGF0dHIpKSB7XG4gICAgICBtYXJrdXAgKz0gXCIgXCIgKyBhdHRyICsgXCI9XFxcIlwiICsgdXRpbHMuZXNjYXBlKHRoaXMuYXR0cmlidXRlc1thdHRyXSkgKyBcIlxcXCJcIjtcbiAgICB9XG4gIH1cblxuICBtYXJrdXAgKz0gXCI+XCI7IC8vIEFkZCB0aGUgbWFya3VwIG9mIHRoZSBjaGlsZHJlbiwgYWxzbyBhcyBtYXJrdXBcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBtYXJrdXAgKz0gdGhpcy5jaGlsZHJlbltpXS50b01hcmt1cCgpO1xuICB9XG5cbiAgbWFya3VwICs9IFwiPC9cIiArIHRhZ05hbWUgKyBcIj5cIjtcbiAgcmV0dXJuIG1hcmt1cDtcbn07IC8vIE1ha2luZyB0aGUgdHlwZSBiZWxvdyBleGFjdCB3aXRoIGFsbCBvcHRpb25hbCBmaWVsZHMgZG9lc24ndCB3b3JrIGR1ZSB0b1xuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNDU4MlxuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNTY4OFxuLy8gSG93ZXZlciwgc2luY2UgKmFsbCogZmllbGRzIGFyZSBvcHRpb25hbCwgJFNoYXBlPD4gd29ya3MgYXMgc3VnZ2VzdGVkIGluIDU2ODhcbi8vIGFib3ZlLlxuLy8gVGhpcyB0eXBlIGRvZXMgbm90IGluY2x1ZGUgYWxsIENTUyBwcm9wZXJ0aWVzLiBBZGRpdGlvbmFsIHByb3BlcnRpZXMgc2hvdWxkXG4vLyBiZSBhZGRlZCBhcyBuZWVkZWQuXG5cblxuLyoqXG4gKiBUaGlzIG5vZGUgcmVwcmVzZW50cyBhIHNwYW4gbm9kZSwgd2l0aCBhIGNsYXNzTmFtZSwgYSBsaXN0IG9mIGNoaWxkcmVuLCBhbmRcbiAqIGFuIGlubGluZSBzdHlsZS4gSXQgYWxzbyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBpdHMgaGVpZ2h0LCBkZXB0aCwgYW5kXG4gKiBtYXhGb250U2l6ZS5cbiAqXG4gKiBSZXByZXNlbnRzIHR3byB0eXBlcyB3aXRoIGRpZmZlcmVudCB1c2VzOiBTdmdTcGFuIHRvIHdyYXAgYW4gU1ZHIGFuZCBEb21TcGFuXG4gKiBvdGhlcndpc2UuIFRoaXMgdHlwZXNhZmV0eSBpcyBpbXBvcnRhbnQgd2hlbiBIVE1MIGJ1aWxkZXJzIGFjY2VzcyBhIHNwYW4nc1xuICogY2hpbGRyZW4uXG4gKi9cbnZhciBkb21UcmVlX1NwYW4gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTcGFuKGNsYXNzZXMsIGNoaWxkcmVuLCBvcHRpb25zLCBzdHlsZSkge1xuICAgIHRoaXMuY2hpbGRyZW4gPSB2b2lkIDA7XG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gdm9pZCAwO1xuICAgIHRoaXMuY2xhc3NlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmhlaWdodCA9IHZvaWQgMDtcbiAgICB0aGlzLmRlcHRoID0gdm9pZCAwO1xuICAgIHRoaXMud2lkdGggPSB2b2lkIDA7XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLnN0eWxlID0gdm9pZCAwO1xuICAgIGluaXROb2RlLmNhbGwodGhpcywgY2xhc3Nlcywgb3B0aW9ucywgc3R5bGUpO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbiB8fCBbXTtcbiAgfVxuICAvKipcbiAgICogU2V0cyBhbiBhcmJpdHJhcnkgYXR0cmlidXRlIG9uIHRoZSBzcGFuLiBXYXJuaW5nOiB1c2UgdGhpcyB3aXNlbHkuIE5vdFxuICAgKiBhbGwgYnJvd3NlcnMgc3VwcG9ydCBhdHRyaWJ1dGVzIHRoZSBzYW1lLCBhbmQgaGF2aW5nIHRvbyBtYW55IGN1c3RvbVxuICAgKiBhdHRyaWJ1dGVzIGlzIHByb2JhYmx5IGJhZC5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gU3Bhbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uIHNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gICAgdGhpcy5hdHRyaWJ1dGVzW2F0dHJpYnV0ZV0gPSB2YWx1ZTtcbiAgfTtcblxuICBfcHJvdG8uaGFzQ2xhc3MgPSBmdW5jdGlvbiBoYXNDbGFzcyhjbGFzc05hbWUpIHtcbiAgICByZXR1cm4gdXRpbHMuY29udGFpbnModGhpcy5jbGFzc2VzLCBjbGFzc05hbWUpO1xuICB9O1xuXG4gIF9wcm90by50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgcmV0dXJuIF90b05vZGUuY2FsbCh0aGlzLCBcInNwYW5cIik7XG4gIH07XG5cbiAgX3Byb3RvLnRvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAoKSB7XG4gICAgcmV0dXJuIF90b01hcmt1cC5jYWxsKHRoaXMsIFwic3BhblwiKTtcbiAgfTtcblxuICByZXR1cm4gU3Bhbjtcbn0oKTtcbi8qKlxuICogVGhpcyBub2RlIHJlcHJlc2VudHMgYW4gYW5jaG9yICg8YT4pIGVsZW1lbnQgd2l0aCBhIGh5cGVybGluay4gIFNlZSBgc3BhbmBcbiAqIGZvciBmdXJ0aGVyIGRldGFpbHMuXG4gKi9cblxudmFyIGRvbVRyZWVfQW5jaG9yID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQW5jaG9yKGhyZWYsIGNsYXNzZXMsIGNoaWxkcmVuLCBvcHRpb25zKSB7XG4gICAgdGhpcy5jaGlsZHJlbiA9IHZvaWQgMDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSB2b2lkIDA7XG4gICAgdGhpcy5jbGFzc2VzID0gdm9pZCAwO1xuICAgIHRoaXMuaGVpZ2h0ID0gdm9pZCAwO1xuICAgIHRoaXMuZGVwdGggPSB2b2lkIDA7XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLnN0eWxlID0gdm9pZCAwO1xuICAgIGluaXROb2RlLmNhbGwodGhpcywgY2xhc3Nlcywgb3B0aW9ucyk7XG4gICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuIHx8IFtdO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gIH1cblxuICB2YXIgX3Byb3RvMiA9IEFuY2hvci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvMi5zZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbiBzZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZSkge1xuICAgIHRoaXMuYXR0cmlidXRlc1thdHRyaWJ1dGVdID0gdmFsdWU7XG4gIH07XG5cbiAgX3Byb3RvMi5oYXNDbGFzcyA9IGZ1bmN0aW9uIGhhc0NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHJldHVybiB1dGlscy5jb250YWlucyh0aGlzLmNsYXNzZXMsIGNsYXNzTmFtZSk7XG4gIH07XG5cbiAgX3Byb3RvMi50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgcmV0dXJuIF90b05vZGUuY2FsbCh0aGlzLCBcImFcIik7XG4gIH07XG5cbiAgX3Byb3RvMi50b01hcmt1cCA9IGZ1bmN0aW9uIHRvTWFya3VwKCkge1xuICAgIHJldHVybiBfdG9NYXJrdXAuY2FsbCh0aGlzLCBcImFcIik7XG4gIH07XG5cbiAgcmV0dXJuIEFuY2hvcjtcbn0oKTtcbi8qKlxuICogVGhpcyBub2RlIHJlcHJlc2VudHMgYW4gaW1hZ2UgZW1iZWQgKDxpbWc+KSBlbGVtZW50LlxuICovXG5cbnZhciBkb21UcmVlX0ltZyA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEltZyhzcmMsIGFsdCwgc3R5bGUpIHtcbiAgICB0aGlzLnNyYyA9IHZvaWQgMDtcbiAgICB0aGlzLmFsdCA9IHZvaWQgMDtcbiAgICB0aGlzLmNsYXNzZXMgPSB2b2lkIDA7XG4gICAgdGhpcy5oZWlnaHQgPSB2b2lkIDA7XG4gICAgdGhpcy5kZXB0aCA9IHZvaWQgMDtcbiAgICB0aGlzLm1heEZvbnRTaXplID0gdm9pZCAwO1xuICAgIHRoaXMuc3R5bGUgPSB2b2lkIDA7XG4gICAgdGhpcy5hbHQgPSBhbHQ7XG4gICAgdGhpcy5zcmMgPSBzcmM7XG4gICAgdGhpcy5jbGFzc2VzID0gW1wibW9yZFwiXTtcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG4gIH1cblxuICB2YXIgX3Byb3RvMyA9IEltZy5wcm90b3R5cGU7XG5cbiAgX3Byb3RvMy5oYXNDbGFzcyA9IGZ1bmN0aW9uIGhhc0NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHJldHVybiB1dGlscy5jb250YWlucyh0aGlzLmNsYXNzZXMsIGNsYXNzTmFtZSk7XG4gIH07XG5cbiAgX3Byb3RvMy50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xuICAgIG5vZGUuc3JjID0gdGhpcy5zcmM7XG4gICAgbm9kZS5hbHQgPSB0aGlzLmFsdDtcbiAgICBub2RlLmNsYXNzTmFtZSA9IFwibW9yZFwiOyAvLyBBcHBseSBpbmxpbmUgc3R5bGVzXG5cbiAgICBmb3IgKHZhciBzdHlsZSBpbiB0aGlzLnN0eWxlKSB7XG4gICAgICBpZiAodGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZSkpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICBub2RlLnN0eWxlW3N0eWxlXSA9IHRoaXMuc3R5bGVbc3R5bGVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9O1xuXG4gIF9wcm90bzMudG9NYXJrdXAgPSBmdW5jdGlvbiB0b01hcmt1cCgpIHtcbiAgICB2YXIgbWFya3VwID0gXCI8aW1nICBzcmM9J1wiICsgdGhpcy5zcmMgKyBcIiAnYWx0PSdcIiArIHRoaXMuYWx0ICsgXCInIFwiOyAvLyBBZGQgdGhlIHN0eWxlcywgYWZ0ZXIgaHlwaGVuYXRpb25cblxuICAgIHZhciBzdHlsZXMgPSBcIlwiO1xuXG4gICAgZm9yICh2YXIgc3R5bGUgaW4gdGhpcy5zdHlsZSkge1xuICAgICAgaWYgKHRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkoc3R5bGUpKSB7XG4gICAgICAgIHN0eWxlcyArPSB1dGlscy5oeXBoZW5hdGUoc3R5bGUpICsgXCI6XCIgKyB0aGlzLnN0eWxlW3N0eWxlXSArIFwiO1wiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdHlsZXMpIHtcbiAgICAgIG1hcmt1cCArPSBcIiBzdHlsZT1cXFwiXCIgKyB1dGlscy5lc2NhcGUoc3R5bGVzKSArIFwiXFxcIlwiO1xuICAgIH1cblxuICAgIG1hcmt1cCArPSBcIicvPlwiO1xuICAgIHJldHVybiBtYXJrdXA7XG4gIH07XG5cbiAgcmV0dXJuIEltZztcbn0oKTtcbnZhciBpQ29tYmluYXRpb25zID0ge1xuICAnw64nOiBcIlxcdTAxMzFcXHUwMzAyXCIsXG4gICfDryc6IFwiXFx1MDEzMVxcdTAzMDhcIixcbiAgJ8OtJzogXCJcXHUwMTMxXFx1MDMwMVwiLFxuICAvLyAnxKsnOiAnXFx1MDEzMVxcdTAzMDQnLCAvLyBlbmFibGUgd2hlbiB3ZSBhZGQgRXh0ZW5kZWQgTGF0aW5cbiAgJ8OsJzogXCJcXHUwMTMxXFx1MDMwMFwiXG59O1xuLyoqXG4gKiBBIHN5bWJvbCBub2RlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGEgc2luZ2xlIHN5bWJvbC4gSXQgZWl0aGVyIHJlbmRlcnNcbiAqIHRvIGEgc2luZ2xlIHRleHQgbm9kZSwgb3IgYSBzcGFuIHdpdGggYSBzaW5nbGUgdGV4dCBub2RlIGluIGl0LCBkZXBlbmRpbmcgb25cbiAqIHdoZXRoZXIgaXQgaGFzIENTUyBjbGFzc2VzLCBzdHlsZXMsIG9yIG5lZWRzIGl0YWxpYyBjb3JyZWN0aW9uLlxuICovXG5cbnZhciBkb21UcmVlX1N5bWJvbE5vZGUgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTeW1ib2xOb2RlKHRleHQsIGhlaWdodCwgZGVwdGgsIGl0YWxpYywgc2tldywgd2lkdGgsIGNsYXNzZXMsIHN0eWxlKSB7XG4gICAgdGhpcy50ZXh0ID0gdm9pZCAwO1xuICAgIHRoaXMuaGVpZ2h0ID0gdm9pZCAwO1xuICAgIHRoaXMuZGVwdGggPSB2b2lkIDA7XG4gICAgdGhpcy5pdGFsaWMgPSB2b2lkIDA7XG4gICAgdGhpcy5za2V3ID0gdm9pZCAwO1xuICAgIHRoaXMud2lkdGggPSB2b2lkIDA7XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLmNsYXNzZXMgPSB2b2lkIDA7XG4gICAgdGhpcy5zdHlsZSA9IHZvaWQgMDtcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG4gICAgdGhpcy5kZXB0aCA9IGRlcHRoIHx8IDA7XG4gICAgdGhpcy5pdGFsaWMgPSBpdGFsaWMgfHwgMDtcbiAgICB0aGlzLnNrZXcgPSBza2V3IHx8IDA7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG4gICAgdGhpcy5jbGFzc2VzID0gY2xhc3NlcyB8fCBbXTtcbiAgICB0aGlzLnN0eWxlID0gc3R5bGUgfHwge307XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IDA7IC8vIE1hcmsgdGV4dCBmcm9tIG5vbi1MYXRpbiBzY3JpcHRzIHdpdGggc3BlY2lmaWMgY2xhc3NlcyBzbyB0aGF0IHdlXG4gICAgLy8gY2FuIHNwZWNpZnkgd2hpY2ggZm9udHMgdG8gdXNlLiAgVGhpcyBhbGxvd3MgdXMgdG8gcmVuZGVyIHRoZXNlXG4gICAgLy8gY2hhcmFjdGVycyB3aXRoIGEgc2VyaWYgZm9udCBpbiBzaXR1YXRpb25zIHdoZXJlIHRoZSBicm93c2VyIHdvdWxkXG4gICAgLy8gZWl0aGVyIGRlZmF1bHQgdG8gYSBzYW5zIHNlcmlmIG9yIHJlbmRlciBhIHBsYWNlaG9sZGVyIGNoYXJhY3Rlci5cbiAgICAvLyBXZSB1c2UgQ1NTIGNsYXNzIG5hbWVzIGxpa2UgY2prX2ZhbGxiYWNrLCBoYW5ndWxfZmFsbGJhY2sgYW5kXG4gICAgLy8gYnJhaG1pY19mYWxsYmFjay4gU2VlIC4vdW5pY29kZVNjcmlwdHMuanMgZm9yIHRoZSBzZXQgb2YgcG9zc2libGVcbiAgICAvLyBzY3JpcHQgbmFtZXNcblxuICAgIHZhciBzY3JpcHQgPSBzY3JpcHRGcm9tQ29kZXBvaW50KHRoaXMudGV4dC5jaGFyQ29kZUF0KDApKTtcblxuICAgIGlmIChzY3JpcHQpIHtcbiAgICAgIHRoaXMuY2xhc3Nlcy5wdXNoKHNjcmlwdCArIFwiX2ZhbGxiYWNrXCIpO1xuICAgIH1cblxuICAgIGlmICgvW8Ouw6/DrcOsXS8udGVzdCh0aGlzLnRleHQpKSB7XG4gICAgICAvLyBhZGQgxKsgd2hlbiB3ZSBhZGQgRXh0ZW5kZWQgTGF0aW5cbiAgICAgIHRoaXMudGV4dCA9IGlDb21iaW5hdGlvbnNbdGhpcy50ZXh0XTtcbiAgICB9XG4gIH1cblxuICB2YXIgX3Byb3RvNCA9IFN5bWJvbE5vZGUucHJvdG90eXBlO1xuXG4gIF9wcm90bzQuaGFzQ2xhc3MgPSBmdW5jdGlvbiBoYXNDbGFzcyhjbGFzc05hbWUpIHtcbiAgICByZXR1cm4gdXRpbHMuY29udGFpbnModGhpcy5jbGFzc2VzLCBjbGFzc05hbWUpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdGV4dCBub2RlIG9yIHNwYW4gZnJvbSBhIHN5bWJvbCBub2RlLiBOb3RlIHRoYXQgYSBzcGFuIGlzIG9ubHlcbiAgICogY3JlYXRlZCBpZiBpdCBpcyBuZWVkZWQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvNC50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLnRleHQpO1xuICAgIHZhciBzcGFuID0gbnVsbDtcblxuICAgIGlmICh0aGlzLml0YWxpYyA+IDApIHtcbiAgICAgIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICAgIHNwYW4uc3R5bGUubWFyZ2luUmlnaHQgPSB0aGlzLml0YWxpYyArIFwiZW1cIjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHNwYW4gPSBzcGFuIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgICAgc3Bhbi5jbGFzc05hbWUgPSBjcmVhdGVDbGFzcyh0aGlzLmNsYXNzZXMpO1xuICAgIH1cblxuICAgIGZvciAodmFyIHN0eWxlIGluIHRoaXMuc3R5bGUpIHtcbiAgICAgIGlmICh0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlKSkge1xuICAgICAgICBzcGFuID0gc3BhbiB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTsgLy8gJEZsb3dGaXhNZSBGbG93IGRvZXNuJ3Qgc2VlbSB0byB1bmRlcnN0YW5kIHNwYW4uc3R5bGUncyB0eXBlLlxuXG4gICAgICAgIHNwYW4uc3R5bGVbc3R5bGVdID0gdGhpcy5zdHlsZVtzdHlsZV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNwYW4pIHtcbiAgICAgIHNwYW4uYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICByZXR1cm4gc3BhbjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIG1hcmt1cCBmb3IgYSBzeW1ib2wgbm9kZS5cbiAgICovXG4gIDtcblxuICBfcHJvdG80LnRvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAoKSB7XG4gICAgLy8gVE9ETyhhbHBlcnQpOiBNb3JlIGR1cGxpY2F0aW9uIHRoYW4gSSdkIGxpa2UgZnJvbVxuICAgIC8vIHNwYW4ucHJvdG90eXBlLnRvTWFya3VwIGFuZCBzeW1ib2xOb2RlLnByb3RvdHlwZS50b05vZGUuLi5cbiAgICB2YXIgbmVlZHNTcGFuID0gZmFsc2U7XG4gICAgdmFyIG1hcmt1cCA9IFwiPHNwYW5cIjtcblxuICAgIGlmICh0aGlzLmNsYXNzZXMubGVuZ3RoKSB7XG4gICAgICBuZWVkc1NwYW4gPSB0cnVlO1xuICAgICAgbWFya3VwICs9IFwiIGNsYXNzPVxcXCJcIjtcbiAgICAgIG1hcmt1cCArPSB1dGlscy5lc2NhcGUoY3JlYXRlQ2xhc3ModGhpcy5jbGFzc2VzKSk7XG4gICAgICBtYXJrdXAgKz0gXCJcXFwiXCI7XG4gICAgfVxuXG4gICAgdmFyIHN0eWxlcyA9IFwiXCI7XG5cbiAgICBpZiAodGhpcy5pdGFsaWMgPiAwKSB7XG4gICAgICBzdHlsZXMgKz0gXCJtYXJnaW4tcmlnaHQ6XCIgKyB0aGlzLml0YWxpYyArIFwiZW07XCI7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgc3R5bGUgaW4gdGhpcy5zdHlsZSkge1xuICAgICAgaWYgKHRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkoc3R5bGUpKSB7XG4gICAgICAgIHN0eWxlcyArPSB1dGlscy5oeXBoZW5hdGUoc3R5bGUpICsgXCI6XCIgKyB0aGlzLnN0eWxlW3N0eWxlXSArIFwiO1wiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdHlsZXMpIHtcbiAgICAgIG5lZWRzU3BhbiA9IHRydWU7XG4gICAgICBtYXJrdXAgKz0gXCIgc3R5bGU9XFxcIlwiICsgdXRpbHMuZXNjYXBlKHN0eWxlcykgKyBcIlxcXCJcIjtcbiAgICB9XG5cbiAgICB2YXIgZXNjYXBlZCA9IHV0aWxzLmVzY2FwZSh0aGlzLnRleHQpO1xuXG4gICAgaWYgKG5lZWRzU3Bhbikge1xuICAgICAgbWFya3VwICs9IFwiPlwiO1xuICAgICAgbWFya3VwICs9IGVzY2FwZWQ7XG4gICAgICBtYXJrdXAgKz0gXCI8L3NwYW4+XCI7XG4gICAgICByZXR1cm4gbWFya3VwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZXNjYXBlZDtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFN5bWJvbE5vZGU7XG59KCk7XG4vKipcbiAqIFNWRyBub2RlcyBhcmUgdXNlZCB0byByZW5kZXIgc3RyZXRjaHkgd2lkZSBlbGVtZW50cy5cbiAqL1xuXG52YXIgU3ZnTm9kZSA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFN2Z05vZGUoY2hpbGRyZW4sIGF0dHJpYnV0ZXMpIHtcbiAgICB0aGlzLmNoaWxkcmVuID0gdm9pZCAwO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW4gfHwgW107XG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcbiAgfVxuXG4gIHZhciBfcHJvdG81ID0gU3ZnTm9kZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvNS50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgdmFyIHN2Z05TID0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCBcInN2Z1wiKTsgLy8gQXBwbHkgYXR0cmlidXRlc1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyLCB0aGlzLmF0dHJpYnV0ZXNbYXR0cl0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZS5hcHBlbmRDaGlsZCh0aGlzLmNoaWxkcmVuW2ldLnRvTm9kZSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcblxuICBfcHJvdG81LnRvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAoKSB7XG4gICAgdmFyIG1hcmt1cCA9IFwiPHN2Z1wiOyAvLyBBcHBseSBhdHRyaWJ1dGVzXG5cbiAgICBmb3IgKHZhciBhdHRyIGluIHRoaXMuYXR0cmlidXRlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMsIGF0dHIpKSB7XG4gICAgICAgIG1hcmt1cCArPSBcIiBcIiArIGF0dHIgKyBcIj0nXCIgKyB0aGlzLmF0dHJpYnV0ZXNbYXR0cl0gKyBcIidcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtYXJrdXAgKz0gXCI+XCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1hcmt1cCArPSB0aGlzLmNoaWxkcmVuW2ldLnRvTWFya3VwKCk7XG4gICAgfVxuXG4gICAgbWFya3VwICs9IFwiPC9zdmc+XCI7XG4gICAgcmV0dXJuIG1hcmt1cDtcbiAgfTtcblxuICByZXR1cm4gU3ZnTm9kZTtcbn0oKTtcbnZhciBkb21UcmVlX1BhdGhOb2RlID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUGF0aE5vZGUocGF0aE5hbWUsIGFsdGVybmF0ZSkge1xuICAgIHRoaXMucGF0aE5hbWUgPSB2b2lkIDA7XG4gICAgdGhpcy5hbHRlcm5hdGUgPSB2b2lkIDA7XG4gICAgdGhpcy5wYXRoTmFtZSA9IHBhdGhOYW1lO1xuICAgIHRoaXMuYWx0ZXJuYXRlID0gYWx0ZXJuYXRlOyAvLyBVc2VkIG9ubHkgZm9yIFxcc3FydFxuICB9XG5cbiAgdmFyIF9wcm90bzYgPSBQYXRoTm9kZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvNi50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgdmFyIHN2Z05TID0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCBcInBhdGhcIik7XG5cbiAgICBpZiAodGhpcy5hbHRlcm5hdGUpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZFwiLCB0aGlzLmFsdGVybmF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZFwiLCBzdmdHZW9tZXRyeV9wYXRoW3RoaXMucGF0aE5hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcblxuICBfcHJvdG82LnRvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAoKSB7XG4gICAgaWYgKHRoaXMuYWx0ZXJuYXRlKSB7XG4gICAgICByZXR1cm4gXCI8cGF0aCBkPSdcIiArIHRoaXMuYWx0ZXJuYXRlICsgXCInLz5cIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiPHBhdGggZD0nXCIgKyBzdmdHZW9tZXRyeV9wYXRoW3RoaXMucGF0aE5hbWVdICsgXCInLz5cIjtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFBhdGhOb2RlO1xufSgpO1xudmFyIExpbmVOb2RlID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTGluZU5vZGUoYXR0cmlidXRlcykge1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzIHx8IHt9O1xuICB9XG5cbiAgdmFyIF9wcm90bzcgPSBMaW5lTm9kZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvNy50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgdmFyIHN2Z05TID0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCBcImxpbmVcIik7IC8vIEFwcGx5IGF0dHJpYnV0ZXNcblxuICAgIGZvciAodmFyIGF0dHIgaW4gdGhpcy5hdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcywgYXR0cikpIHtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYXR0ciwgdGhpcy5hdHRyaWJ1dGVzW2F0dHJdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcblxuICBfcHJvdG83LnRvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAoKSB7XG4gICAgdmFyIG1hcmt1cCA9IFwiPGxpbmVcIjtcblxuICAgIGZvciAodmFyIGF0dHIgaW4gdGhpcy5hdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcywgYXR0cikpIHtcbiAgICAgICAgbWFya3VwICs9IFwiIFwiICsgYXR0ciArIFwiPSdcIiArIHRoaXMuYXR0cmlidXRlc1thdHRyXSArIFwiJ1wiO1xuICAgICAgfVxuICAgIH1cblxuICAgIG1hcmt1cCArPSBcIi8+XCI7XG4gICAgcmV0dXJuIG1hcmt1cDtcbiAgfTtcblxuICByZXR1cm4gTGluZU5vZGU7XG59KCk7XG5mdW5jdGlvbiBhc3NlcnRTeW1ib2xEb21Ob2RlKGdyb3VwKSB7XG4gIGlmIChncm91cCBpbnN0YW5jZW9mIGRvbVRyZWVfU3ltYm9sTm9kZSkge1xuICAgIHJldHVybiBncm91cDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBzeW1ib2xOb2RlIGJ1dCBnb3QgXCIgKyBTdHJpbmcoZ3JvdXApICsgXCIuXCIpO1xuICB9XG59XG5mdW5jdGlvbiBhc3NlcnRTcGFuKGdyb3VwKSB7XG4gIGlmIChncm91cCBpbnN0YW5jZW9mIGRvbVRyZWVfU3Bhbikge1xuICAgIHJldHVybiBncm91cDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBzcGFuPEh0bWxEb21Ob2RlPiBidXQgZ290IFwiICsgU3RyaW5nKGdyb3VwKSArIFwiLlwiKTtcbiAgfVxufVxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zdWJtb2R1bGVzL2thdGV4LWZvbnRzL2ZvbnRNZXRyaWNzRGF0YS5qc1xuLy8gVGhpcyBmaWxlIGlzIEdFTkVSQVRFRCBieSBidWlsZE1ldHJpY3Muc2guIERPIE5PVCBNT0RJRlkuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBmb250TWV0cmljc0RhdGEgPSAoe1xuICBcIkFNUy1SZWd1bGFyXCI6IHtcbiAgICBcIjY1XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjY2XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjY3XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjY4XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjY5XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjcwXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjcxXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjczXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjc0XCI6IFswLjE2NjY3LCAwLjY4ODg5LCAwLCAwLCAwLjVdLFxuICAgIFwiNzVcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNzZcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiNzdcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuOTQ0NDVdLFxuICAgIFwiNzhcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiNzlcIjogWzAuMTY2NjcsIDAuNjg4ODksIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODBcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODFcIjogWzAuMTY2NjcsIDAuNjg4ODksIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODJcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODNcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODRcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODVcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODZcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODdcIjogWzAsIDAuNjg4ODksIDAsIDAsIDEuMF0sXG4gICAgXCI4OFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4OVwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5MFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCIxMDdcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiMTY1XCI6IFswLCAwLjY3NSwgMC4wMjUsIDAsIDAuNzVdLFxuICAgIFwiMTc0XCI6IFswLjE1NTU5LCAwLjY5MjI0LCAwLCAwLCAwLjk0NjY2XSxcbiAgICBcIjI0MFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIyOTVcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTQwMjhdLFxuICAgIFwiNzEwXCI6IFswLCAwLjgyNSwgMCwgMCwgMi4zMzMzNF0sXG4gICAgXCI3MzJcIjogWzAsIDAuOSwgMCwgMCwgMi4zMzMzNF0sXG4gICAgXCI3NzBcIjogWzAsIDAuODI1LCAwLCAwLCAyLjMzMzM0XSxcbiAgICBcIjc3MVwiOiBbMCwgMC45LCAwLCAwLCAyLjMzMzM0XSxcbiAgICBcIjk4OVwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDA4XCI6IFswLCAwLjQzMDU2LCAwLjA0MDI4LCAwLCAwLjY2NjY3XSxcbiAgICBcIjgyNDVcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDAuMjc1XSxcbiAgICBcIjg0NjNcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTQwMjhdLFxuICAgIFwiODQ4N1wiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4NDk4XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg1MDJcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODUwM1wiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCI4NTA0XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg1MTNcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiODU5MlwiOiBbLTAuMDM1OTgsIDAuNDY0MDIsIDAsIDAsIDAuNV0sXG4gICAgXCI4NTk0XCI6IFstMC4wMzU5OCwgMC40NjQwMiwgMCwgMCwgMC41XSxcbiAgICBcIjg2MDJcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODYwM1wiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjA2XCI6IFswLjAxMzU0LCAwLjUyMjM5LCAwLCAwLCAxLjBdLFxuICAgIFwiODYwOFwiOiBbMC4wMTM1NCwgMC41MjIzOSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MTBcIjogWzAuMDEzNTQsIDAuNTIyMzksIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiODYxMVwiOiBbMC4wMTM1NCwgMC41MjIzOSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCI4NjE5XCI6IFswLCAwLjU0OTg2LCAwLCAwLCAxLjBdLFxuICAgIFwiODYyMFwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MjFcIjogWy0wLjEzMzEzLCAwLjM3Nzg4LCAwLCAwLCAxLjM4ODg5XSxcbiAgICBcIjg2MjJcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODYyNFwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC41XSxcbiAgICBcIjg2MjVcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNV0sXG4gICAgXCI4NjMwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAxLjBdLFxuICAgIFwiODYzMVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MzRcIjogWzAuMDgxOTgsIDAuNTgxOTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODYzNVwiOiBbMC4wODE5OCwgMC41ODE5OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NjM4XCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjQxNjY3XSxcbiAgICBcIjg2MzlcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuNDE2NjddLFxuICAgIFwiODY0MlwiOiBbMC4xOTQ0NCwgMC42OTIyNCwgMCwgMCwgMC40MTY2N10sXG4gICAgXCI4NjQzXCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjQxNjY3XSxcbiAgICBcIjg2NDRcIjogWzAuMTgwOCwgMC42NzUsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjQ2XCI6IFswLjE4MDgsIDAuNjc1LCAwLCAwLCAxLjBdLFxuICAgIFwiODY0N1wiOiBbMC4xODA4LCAwLjY3NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2NDhcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODY0OVwiOiBbMC4xODA4LCAwLjY3NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTBcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODY1MVwiOiBbMC4wMTM1NCwgMC41MjIzOSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTJcIjogWzAuMDEzNTQsIDAuNTIyMzksIDAsIDAsIDEuMF0sXG4gICAgXCI4NjUzXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTRcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY1NVwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjY2XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY2N1wiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NjlcIjogWy0wLjEzMzEzLCAwLjM3Nzg4LCAwLCAwLCAxLjBdLFxuICAgIFwiODY3MlwiOiBbLTAuMDY0LCAwLjQzNywgMCwgMCwgMS4zMzRdLFxuICAgIFwiODY3NFwiOiBbLTAuMDY0LCAwLjQzNywgMCwgMCwgMS4zMzRdLFxuICAgIFwiODcwNVwiOiBbMCwgMC44MjUsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzA4XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg3MDlcIjogWzAuMDgxNjcsIDAuNTgxNjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODcxN1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC40MjkxN10sXG4gICAgXCI4NzIyXCI6IFstMC4wMzU5OCwgMC40NjQwMiwgMCwgMCwgMC41XSxcbiAgICBcIjg3MjRcIjogWzAuMDgxOTgsIDAuNjkyMjQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODcyNlwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzMzXCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3MzZcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODczN1wiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4NzM4XCI6IFswLjAzNTE3LCAwLjUyMjM5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg3MzlcIjogWzAuMDgxNjcsIDAuNTgxNjcsIDAsIDAsIDAuMjIyMjJdLFxuICAgIFwiODc0MFwiOiBbMC4yNTE0MiwgMC43NDExMSwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4NzQxXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjg3NDJcIjogWzAuMjUxNDIsIDAuNzQxMTEsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzU2XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg3NTdcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODc2NFwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc2NVwiOiBbLTAuMTMzMTMsIDAuMzc3ODgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc2OVwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc3MFwiOiBbLTAuMDM2MjUsIDAuNDYzNzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc3NFwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4Nzc2XCI6IFstMC4wMTY4OCwgMC40ODMxMiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4Nzc4XCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3ODJcIjogWzAuMDYwNjIsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc4M1wiOiBbMC4wNjA2MiwgMC41NDk4NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4Nzg1XCI6IFswLjA4MTk4LCAwLjU4MTk4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3ODZcIjogWzAuMDgxOTgsIDAuNTgxOTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc4N1wiOiBbMC4wODE5OCwgMC41ODE5OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzkwXCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3OTFcIjogWzAuMjI5NTgsIDAuNzI5NTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc5NlwiOiBbMC4wODE5OCwgMC45MTY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODA2XCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MDdcIjogWzAuMjU1ODMsIDAuNzU1ODMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgwOFwiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODA5XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MTJcIjogWzAuMjU1ODMsIDAuNzU1ODMsIDAsIDAsIDAuNV0sXG4gICAgXCI4ODE0XCI6IFswLjIwNTc2LCAwLjcwNTc2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MTVcIjogWzAuMjA1NzYsIDAuNzA1NzYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgxNlwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODE3XCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MThcIjogWzAuMjI5NTgsIDAuNzI5NTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgxOVwiOiBbMC4yMjk1OCwgMC43Mjk1OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODIyXCI6IFswLjE4MDgsIDAuNjc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MjNcIjogWzAuMTgwOCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgyOFwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODI5XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzBcIjogWzAuMjI5NTgsIDAuNzI5NTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgzMVwiOiBbMC4yMjk1OCwgMC43Mjk1OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODMyXCI6IFswLjIwNTc2LCAwLjcwNTc2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzNcIjogWzAuMjA1NzYsIDAuNzA1NzYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg0MFwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODQxXCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NDJcIjogWzAuMTM1OTcsIDAuNjM1OTcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg0M1wiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODQ3XCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NDhcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg1OFwiOiBbMC4wODE5OCwgMC41ODE5OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODU5XCI6IFswLjA4MTk4LCAwLjU4MTk4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NjFcIjogWzAuMDgxOTgsIDAuNTgxOTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2MlwiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2M1wiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2NFwiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2NVwiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg3MlwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4ODczXCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg4NzRcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuODg4ODldLFxuICAgIFwiODg3NlwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4ODc3XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg4NzhcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODg3OVwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4ODgyXCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4ODNcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg4NFwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODg1XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4ODhcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiODg5MFwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI4ODkxXCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg4OTJcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODkwMVwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4OTAzXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MDVcIjogWzAuMDgxNjcsIDAuNTgxNjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkwNlwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTA3XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MDhcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkwOVwiOiBbLTAuMDM1OTgsIDAuNDY0MDIsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkxMFwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC43NjA0Ml0sXG4gICAgXCI4OTExXCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjc2MDQyXSxcbiAgICBcIjg5MTJcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkxM1wiOiBbMC4wMzUxNywgMC41NDk4NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTE0XCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg5MTVcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODkxNlwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4OTE4XCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTE5XCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTIwXCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAxLjMzMzM0XSxcbiAgICBcIjg5MjFcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDEuMzMzMzRdLFxuICAgIFwiODkyMlwiOiBbMC4zODU2OSwgMC44ODU2OSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTIzXCI6IFswLjM4NTY5LCAwLjg4NTY5LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MjZcIjogWzAuMTM2NjcsIDAuNjM2NjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkyN1wiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTI4XCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MjlcIjogWzAuMzAyNzQsIDAuNzkzODMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkzNFwiOiBbMC4yMzIyMiwgMC43NDExMSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTM1XCI6IFswLjIzMjIyLCAwLjc0MTExLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MzZcIjogWzAuMjMyMjIsIDAuNzQxMTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkzN1wiOiBbMC4yMzIyMiwgMC43NDExMSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTM4XCI6IFswLjIwNTc2LCAwLjcwNTc2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MzlcIjogWzAuMjA1NzYsIDAuNzA1NzYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODk0MFwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTQxXCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5OTRcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODk5NVwiOiBbMC4xOTQ0NCwgMC42OTIyNCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5NDE2XCI6IFswLjE1NTU5LCAwLjY5MjI0LCAwLCAwLCAwLjkwMjIyXSxcbiAgICBcIjk0ODRcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNV0sXG4gICAgXCI5NDg4XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjVdLFxuICAgIFwiOTQ5MlwiOiBbMCwgMC4zNzc4OCwgMCwgMCwgMC41XSxcbiAgICBcIjk0OTZcIjogWzAsIDAuMzc3ODgsIDAsIDAsIDAuNV0sXG4gICAgXCI5NTg1XCI6IFswLjE5NDQ0LCAwLjY4ODg5LCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjk1ODZcIjogWzAuMTk0NDQsIDAuNzQxMTEsIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTYzMlwiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTYzM1wiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTY1MFwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5NjUxXCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjk2NTRcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTY2MFwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5NjYxXCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjk2NjRcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTY3NFwiOiBbMC4xMTExMSwgMC42OTIyNCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5NzMzXCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjk0NDQ1XSxcbiAgICBcIjEwMDAzXCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjEwMDE2XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjEwNzMxXCI6IFswLjExMTExLCAwLjY5MjI0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjEwODQ2XCI6IFswLjE5NDQ0LCAwLjc1NTgzLCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjEwODc3XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODc4XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg1XCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg2XCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg3XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg4XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg5XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODkwXCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODkxXCI6IFswLjQ4MjU2LCAwLjk4MjU2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODkyXCI6IFswLjQ4MjU2LCAwLjk4MjU2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTAxXCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTAyXCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTMzXCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM0XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM1XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM2XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM3XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM4XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTQ5XCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTUwXCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTU1XCI6IFswLjI4NDgxLCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTU2XCI6IFswLjI4NDgxLCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzUwXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjIyMjIyXSxcbiAgICBcIjU3MzUxXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjU3MzUyXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzUzXCI6IFswLCAwLjQzMDU2LCAwLjA0MDI4LCAwLCAwLjY2NjY3XSxcbiAgICBcIjU3MzU2XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzU3XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzU4XCI6IFswLjQxOTUxLCAwLjkxOTUxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzU5XCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzYwXCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzYxXCI6IFswLjQxOTUxLCAwLjkxOTUxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzY2XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzY3XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzY4XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzY5XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzcwXCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzcxXCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XVxuICB9LFxuICBcIkNhbGlncmFwaGljLVJlZ3VsYXJcIjoge1xuICAgIFwiNDhcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCI0OVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1MlwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTRcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1NVwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjU2XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTdcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCI2NVwiOiBbMCwgMC42ODMzMywgMCwgMC4xOTQ0NSwgMC43OTg0N10sXG4gICAgXCI2NlwiOiBbMCwgMC42ODMzMywgMC4wMzA0MSwgMC4xMzg4OSwgMC42NTY4MV0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODMzMywgMC4wNTgzNCwgMC4xMzg4OSwgMC41MjY1M10sXG4gICAgXCI2OFwiOiBbMCwgMC42ODMzMywgMC4wMjc3OCwgMC4wODMzNCwgMC43NzEzOV0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODMzMywgMC4wODk0NCwgMC4xMTExMSwgMC41Mjc3OF0sXG4gICAgXCI3MFwiOiBbMCwgMC42ODMzMywgMC4wOTkzMSwgMC4xMTExMSwgMC43MTg3NV0sXG4gICAgXCI3MVwiOiBbMC4wOTcyMiwgMC42ODMzMywgMC4wNTkzLCAwLjExMTExLCAwLjU5NDg3XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4MzMzLCAwLjAwOTY1LCAwLjExMTExLCAwLjg0NDUyXSxcbiAgICBcIjczXCI6IFswLCAwLjY4MzMzLCAwLjA3MzgyLCAwLCAwLjU0NDUyXSxcbiAgICBcIjc0XCI6IFswLjA5NzIyLCAwLjY4MzMzLCAwLjE4NDcyLCAwLjE2NjY3LCAwLjY3Nzc4XSxcbiAgICBcIjc1XCI6IFswLCAwLjY4MzMzLCAwLjAxNDQ1LCAwLjA1NTU2LCAwLjc2MTk1XSxcbiAgICBcIjc2XCI6IFswLCAwLjY4MzMzLCAwLCAwLjEzODg5LCAwLjY4OTcyXSxcbiAgICBcIjc3XCI6IFswLCAwLjY4MzMzLCAwLCAwLjEzODg5LCAxLjIwMDldLFxuICAgIFwiNzhcIjogWzAsIDAuNjgzMzMsIDAuMTQ3MzYsIDAuMDgzMzQsIDAuODIwNDldLFxuICAgIFwiNzlcIjogWzAsIDAuNjgzMzMsIDAuMDI3NzgsIDAuMTExMTEsIDAuNzk2MTFdLFxuICAgIFwiODBcIjogWzAsIDAuNjgzMzMsIDAuMDgyMjIsIDAuMDgzMzQsIDAuNjk1NTZdLFxuICAgIFwiODFcIjogWzAuMDk3MjIsIDAuNjgzMzMsIDAsIDAuMTExMTEsIDAuODE2NjddLFxuICAgIFwiODJcIjogWzAsIDAuNjgzMzMsIDAsIDAuMDgzMzQsIDAuODQ3NV0sXG4gICAgXCI4M1wiOiBbMCwgMC42ODMzMywgMC4wNzUsIDAuMTM4ODksIDAuNjA1NTZdLFxuICAgIFwiODRcIjogWzAsIDAuNjgzMzMsIDAuMjU0MTcsIDAsIDAuNTQ0NjRdLFxuICAgIFwiODVcIjogWzAsIDAuNjgzMzMsIDAuMDk5MzEsIDAuMDgzMzQsIDAuNjI1ODNdLFxuICAgIFwiODZcIjogWzAsIDAuNjgzMzMsIDAuMDgyMjIsIDAsIDAuNjEyNzhdLFxuICAgIFwiODdcIjogWzAsIDAuNjgzMzMsIDAuMDgyMjIsIDAuMDgzMzQsIDAuOTg3NzhdLFxuICAgIFwiODhcIjogWzAsIDAuNjgzMzMsIDAuMTQ2NDMsIDAuMTM4ODksIDAuNzEzM10sXG4gICAgXCI4OVwiOiBbMC4wOTcyMiwgMC42ODMzMywgMC4wODIyMiwgMC4wODMzNCwgMC42NjgzNF0sXG4gICAgXCI5MFwiOiBbMCwgMC42ODMzMywgMC4wNzk0NCwgMC4xMzg4OSwgMC43MjQ3M11cbiAgfSxcbiAgXCJGcmFrdHVyLVJlZ3VsYXJcIjoge1xuICAgIFwiMzNcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjk1NzRdLFxuICAgIFwiMzRcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjE0NzFdLFxuICAgIFwiMzhcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNzM3ODZdLFxuICAgIFwiMzlcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjEyMDFdLFxuICAgIFwiNDBcIjogWzAuMjQ5ODIsIDAuNzQ5NDcsIDAsIDAsIDAuMzg4NjVdLFxuICAgIFwiNDFcIjogWzAuMjQ5ODIsIDAuNzQ5NDcsIDAsIDAsIDAuMzg4NjVdLFxuICAgIFwiNDJcIjogWzAsIDAuNjIxMTksIDAsIDAsIDAuMjc3NjRdLFxuICAgIFwiNDNcIjogWzAuMDgzMTksIDAuNTgyODMsIDAsIDAsIDAuNzU2MjNdLFxuICAgIFwiNDRcIjogWzAsIDAuMTA4MDMsIDAsIDAsIDAuMjc3NjRdLFxuICAgIFwiNDVcIjogWzAuMDgzMTksIDAuNTgyODMsIDAsIDAsIDAuNzU2MjNdLFxuICAgIFwiNDZcIjogWzAsIDAuMTA4MDMsIDAsIDAsIDAuMjc3NjRdLFxuICAgIFwiNDdcIjogWzAuMjQ5ODIsIDAuNzQ5NDcsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNDhcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNDlcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTBcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTFcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTJcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTNcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTRcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTVcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTZcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTdcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNThcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuMjE2MDZdLFxuICAgIFwiNTlcIjogWzAuMTI2MDQsIDAuNDc1MzQsIDAsIDAsIDAuMjE2MDZdLFxuICAgIFwiNjFcIjogWy0wLjEzMDk5LCAwLjM2ODY2LCAwLCAwLCAwLjc1NjIzXSxcbiAgICBcIjYzXCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjM2MjQ1XSxcbiAgICBcIjY1XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjcxNzZdLFxuICAgIFwiNjZcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuODgzOTddLFxuICAgIFwiNjdcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNjEyNTRdLFxuICAgIFwiNjhcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuODMxNThdLFxuICAgIFwiNjlcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNjYyNzhdLFxuICAgIFwiNzBcIjogWzAuMTI2MDQsIDAuNjkxNDEsIDAsIDAsIDAuNjExMTldLFxuICAgIFwiNzFcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNzg1MzldLFxuICAgIFwiNzJcIjogWzAuMDYzMDIsIDAuNjkxNDEsIDAsIDAsIDAuNzIwM10sXG4gICAgXCI3M1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC41NTQ0OF0sXG4gICAgXCI3NFwiOiBbMC4xMjYwNCwgMC42OTE0MSwgMCwgMCwgMC41NTIzMV0sXG4gICAgXCI3NVwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42Njg0NV0sXG4gICAgXCI3NlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42NjYwMl0sXG4gICAgXCI3N1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMS4wNDk1M10sXG4gICAgXCI3OFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MzIxMl0sXG4gICAgXCI3OVwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MjY5OV0sXG4gICAgXCI4MFwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC44Mjc1M10sXG4gICAgXCI4MVwiOiBbMC4wMzc4MSwgMC42OTE0MSwgMCwgMCwgMC44MjY5OV0sXG4gICAgXCI4MlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MjgwN10sXG4gICAgXCI4M1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44Mjg2MV0sXG4gICAgXCI4NFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42Njg5OV0sXG4gICAgXCI4NVwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42NDU3Nl0sXG4gICAgXCI4NlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MzEzMV0sXG4gICAgXCI4N1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMS4wNDYwMl0sXG4gICAgXCI4OFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC43MTkyMl0sXG4gICAgXCI4OVwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC44MzI5M10sXG4gICAgXCI5MFwiOiBbMC4xMjYwNCwgMC42OTE0MSwgMCwgMCwgMC42MDIwMV0sXG4gICAgXCI5MVwiOiBbMC4yNDk4MiwgMC43NDk0NywgMCwgMCwgMC4yNzc2NF0sXG4gICAgXCI5M1wiOiBbMC4yNDk4MiwgMC43NDk0NywgMCwgMCwgMC4yNzc2NF0sXG4gICAgXCI5NFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC40OTk2NV0sXG4gICAgXCI5N1wiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC41MDA0Nl0sXG4gICAgXCI5OFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC41MTMxNV0sXG4gICAgXCI5OVwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC4zODk0Nl0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjIxMTksIDAsIDAsIDAuNDk4NTddLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjQwMDUzXSxcbiAgICBcIjEwMlwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC4zMjYyNl0sXG4gICAgXCIxMDNcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAzN10sXG4gICAgXCIxMDRcIjogWzAuMTg5MDYsIDAuNjkxNDEsIDAsIDAsIDAuNTIxMjZdLFxuICAgIFwiMTA1XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjI3ODk5XSxcbiAgICBcIjEwNlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC4yODA4OF0sXG4gICAgXCIxMDdcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMzg5NDZdLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjI3OTUzXSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC43NjY3Nl0sXG4gICAgXCIxMTBcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTI2NjZdLFxuICAgIFwiMTExXCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjQ4ODg1XSxcbiAgICBcIjExMlwiOiBbMC4xODkwNiwgMC41MjM5NiwgMCwgMCwgMC41MDA0Nl0sXG4gICAgXCIxMTNcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNDg5MTJdLFxuICAgIFwiMTE0XCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjM4OTE5XSxcbiAgICBcIjExNVwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC40NDI2Nl0sXG4gICAgXCIxMTZcIjogWzAsIDAuNjIxMTksIDAsIDAsIDAuMzMzMDFdLFxuICAgIFwiMTE3XCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjUxNzJdLFxuICAgIFwiMTE4XCI6IFswLCAwLjUyMzk2LCAwLCAwLCAwLjUxMThdLFxuICAgIFwiMTE5XCI6IFswLCAwLjUyMzk2LCAwLCAwLCAwLjc3MzUxXSxcbiAgICBcIjEyMFwiOiBbMC4xODkwNiwgMC40NzUzNCwgMCwgMCwgMC4zODg2NV0sXG4gICAgXCIxMjFcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNDk4ODRdLFxuICAgIFwiMTIyXCI6IFswLjE4OTA2LCAwLjQ3NTM0LCAwLCAwLCAwLjM5MDU0XSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjE0NzFdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC4yMTQ3MV0sXG4gICAgXCI1ODExMlwiOiBbMCwgMC42MjExOSwgMCwgMCwgMC40OTc0OV0sXG4gICAgXCI1ODExM1wiOiBbMCwgMC42MjExOSwgMCwgMCwgMC40OTgzXSxcbiAgICBcIjU4MTE0XCI6IFswLjE4OTA2LCAwLjY5MTQxLCAwLCAwLCAwLjMzMzI4XSxcbiAgICBcIjU4MTE1XCI6IFswLjE4OTA2LCAwLjY5MTQxLCAwLCAwLCAwLjMyOTIzXSxcbiAgICBcIjU4MTE2XCI6IFswLjE4OTA2LCAwLjQ3NTM0LCAwLCAwLCAwLjUwMzQzXSxcbiAgICBcIjU4MTE3XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjMzMzAxXSxcbiAgICBcIjU4MTE4XCI6IFswLCAwLjYyMTE5LCAwLCAwLCAwLjMzNDA5XSxcbiAgICBcIjU4MTE5XCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjUwMDczXVxuICB9LFxuICBcIk1haW4tQm9sZFwiOiB7XG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zNV0sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MDI3OF0sXG4gICAgXCIzNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC45NTgzM10sXG4gICAgXCIzNlwiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDAuOTU4MzNdLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjQzXCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjQ0XCI6IFswLjE5NDQ0LCAwLjE1NTU2LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjQ1XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjM4MzMzXSxcbiAgICBcIjQ2XCI6IFswLCAwLjE1NTU2LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjQ3XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI0OFwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNDlcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjUwXCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1MVwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTJcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjUzXCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1NFwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTVcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjU2XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1N1wiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNThcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiNTlcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiNjBcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiNjFcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjYyXCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjYzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU0MzA1XSxcbiAgICBcIjY0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjY1XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg2OTQ0XSxcbiAgICBcIjY2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjgxODA1XSxcbiAgICBcIjY3XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjgzMDU1XSxcbiAgICBcIjY4XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg4MTk0XSxcbiAgICBcIjY5XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjc1NTU1XSxcbiAgICBcIjcwXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjcyMzYxXSxcbiAgICBcIjcxXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjkwNDE2XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjldLFxuICAgIFwiNzNcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNDM2MTFdLFxuICAgIFwiNzRcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNTk0NDRdLFxuICAgIFwiNzVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuOTAxMzhdLFxuICAgIFwiNzZcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNjkxNjZdLFxuICAgIFwiNzdcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDEuMDkxNjZdLFxuICAgIFwiNzhcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuOV0sXG4gICAgXCI3OVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44NjM4OF0sXG4gICAgXCI4MFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC43ODYxMV0sXG4gICAgXCI4MVwiOiBbMC4xOTQ0NCwgMC42ODYxMSwgMCwgMCwgMC44NjM4OF0sXG4gICAgXCI4MlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44NjI1XSxcbiAgICBcIjgzXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjg0XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjhdLFxuICAgIFwiODVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODg0NzJdLFxuICAgIFwiODZcIjogWzAsIDAuNjg2MTEsIDAuMDE1OTcsIDAsIDAuODY5NDRdLFxuICAgIFwiODdcIjogWzAsIDAuNjg2MTEsIDAuMDE1OTcsIDAsIDEuMTg4ODhdLFxuICAgIFwiODhcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODY5NDRdLFxuICAgIFwiODlcIjogWzAsIDAuNjg2MTEsIDAuMDI4NzUsIDAsIDAuODY5NDRdLFxuICAgIFwiOTBcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNzAyNzddLFxuICAgIFwiOTFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiOTJcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI5NVwiOiBbMC4zMSwgMC4xMzQ0NCwgMC4wMzE5NCwgMCwgMC41NzVdLFxuICAgIFwiOTdcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTU5MDJdLFxuICAgIFwiOThcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiOTlcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiMTAwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjEwMVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MjcwOF0sXG4gICAgXCIxMDJcIjogWzAsIDAuNjk0NDQsIDAuMTA5MDMsIDAsIDAuMzUxMzldLFxuICAgIFwiMTAzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAxNTk3LCAwLCAwLjU3NV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiMTA1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4zNTEzOV0sXG4gICAgXCIxMDdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjA2OTRdLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC45NTgzM10sXG4gICAgXCIxMTBcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiMTExXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjYwNjk0XSxcbiAgICBcIjExNFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40NzM2MV0sXG4gICAgXCIxMTVcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNDUzNjFdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYzNDkyLCAwLCAwLCAwLjQ0NzIyXSxcbiAgICBcIjExN1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCIxMThcIjogWzAsIDAuNDQ0NDQsIDAuMDE1OTcsIDAsIDAuNjA2OTRdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQ0NDQ0LCAwLjAxNTk3LCAwLCAwLjgzMDU1XSxcbiAgICBcIjEyMFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC42MDY5NF0sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDE1OTcsIDAsIDAuNjA2OTRdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjEyM1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiMTI0XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjEyNVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiMTI2XCI6IFswLjM1LCAwLjM0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCIxNjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjE3MlwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCIxNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODY5NDRdLFxuICAgIFwiMTc3XCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjE4NFwiOiBbMC4xNzAxNCwgMCwgMCwgMCwgMC41MTExMV0sXG4gICAgXCIxOThcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDEuMDQxNjZdLFxuICAgIFwiMjE1XCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjIxNlwiOiBbMC4wNDg2MSwgMC43MzQ3MiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCIyMjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTk3MjJdLFxuICAgIFwiMjMwXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjgzMDU1XSxcbiAgICBcIjI0N1wiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCIyNDhcIjogWzAuMDk3MjIsIDAuNTQxNjcsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjMwNVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCIzMzhcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDEuMTY5NDRdLFxuICAgIFwiMzM5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjU2N1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC4zNTEzOV0sXG4gICAgXCI3MTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjcxMVwiOiBbMCwgMC42MzE5NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNzEzXCI6IFswLCAwLjU5NjExLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI3MTRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjcxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI3MjlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiNzMwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg2OTQ0XSxcbiAgICBcIjczMlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNzMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNjkxNjZdLFxuICAgIFwiOTE2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjk1ODMzXSxcbiAgICBcIjkyMFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI5MjNcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODA1NTVdLFxuICAgIFwiOTI2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44MzA1NV0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjgzMDU1XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODMwNTVdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40NDQ0NCwgMC4wMzE5NCwgMCwgMC41NzVdLFxuICAgIFwiODIxMlwiOiBbMCwgMC40NDQ0NCwgMC4wMzE5NCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4MjE2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjgyMTdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiODIyMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MDI3OF0sXG4gICAgXCI4MjIxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYwMjc4XSxcbiAgICBcIjgyMjRcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiODIyNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC41MTExMV0sXG4gICAgXCI4MjQyXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjM0NDQ0XSxcbiAgICBcIjg0MDdcIjogWzAsIDAuNzI0NDQsIDAuMTU0ODYsIDAsIDAuNTc1XSxcbiAgICBcIjg0NjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY3NTldLFxuICAgIFwiODQ2NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44MzA1NV0sXG4gICAgXCI4NDY3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjQ3MzYxXSxcbiAgICBcIjg0NzJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNzQwMjddLFxuICAgIFwiODQ3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44MzA1NV0sXG4gICAgXCI4NTAxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc3XSxcbiAgICBcIjg1OTJcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg1OTNcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg1OTRcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg1OTVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg1OTZcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg1OTdcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg1OThcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODU5OVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4NjAwXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg2MDFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODYzNlwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODYzN1wiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY0MFwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY0MVwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY1NlwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY1N1wiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC43MDI3N10sXG4gICAgXCI4NjU4XCI6IFstMC4xMDg4OSwgMC4zOTExMSwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4NjU5XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc3XSxcbiAgICBcIjg2NjBcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg2NjFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNzAyNzddLFxuICAgIFwiODcwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI4NzA2XCI6IFswLCAwLjY5NDQ0LCAwLjA2Mzg5LCAwLCAwLjYyODQ3XSxcbiAgICBcIjg3MDdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiODcwOVwiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiODcxMVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45NTgzM10sXG4gICAgXCI4NzEyXCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg3MTVcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiODcyMlwiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4NzIzXCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg3MjVcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg3MjZcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg3MjdcIjogWy0wLjAyNzc4LCAwLjQ3MjIyLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI4NzI4XCI6IFstMC4wMjYzOSwgMC40NzM2MSwgMCwgMCwgMC41NzVdLFxuICAgIFwiODcyOVwiOiBbLTAuMDI2MzksIDAuNDczNjEsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg3MzBcIjogWzAuMTgsIDAuODIsIDAsIDAsIDAuOTU4MzNdLFxuICAgIFwiODczM1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4NzM0XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg3MzZcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODczOVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI4NzQxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI4NzQzXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg3NDRcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiODc0NVwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCI4NzQ2XCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg3NDdcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMTI3NzgsIDAsIDAuNTY4NzVdLFxuICAgIFwiODc2NFwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODc2OFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI4NzcxXCI6IFswLjAwMjIyLCAwLjUwMjIyLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg3NzZcIjogWzAuMDI0NDQsIDAuNTI0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODc4MVwiOiBbMC4wMDIyMiwgMC41MDIyMiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODAxXCI6IFswLjAwMjIyLCAwLjUwMjIyLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4MDRcIjogWzAuMTk2NjcsIDAuNjk2NjcsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODgwNVwiOiBbMC4xOTY2NywgMC42OTY2NywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODEwXCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg4MTFcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODgyNlwiOiBbMC4wODU1NiwgMC41ODU1NiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODI3XCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4MzRcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODgzNVwiOiBbMC4wODU1NiwgMC41ODU1NiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODM4XCI6IFswLjE5NjY3LCAwLjY5NjY3LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4MzlcIjogWzAuMTk2NjcsIDAuNjk2NjcsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODg0NlwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCI4ODQ5XCI6IFswLjE5NjY3LCAwLjY5NjY3LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4NTBcIjogWzAuMTk2NjcsIDAuNjk2NjcsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODg1MVwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCI4ODUyXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg4NTNcIjogWzAuMTMzMzMsIDAuNjMzMzMsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODg1NFwiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODU1XCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4NTZcIjogWzAuMTMzMzMsIDAuNjMzMzMsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODg1N1wiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODY2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc3XSxcbiAgICBcIjg4NjdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzAyNzddLFxuICAgIFwiODg2OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODY5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg5MDBcIjogWy0wLjAyNjM5LCAwLjQ3MzYxLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI4OTAxXCI6IFstMC4wMjYzOSwgMC40NzM2MSwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI4OTAyXCI6IFstMC4wMjc3OCwgMC40NzIyMiwgMCwgMCwgMC41NzVdLFxuICAgIFwiODk2OFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41MTExMV0sXG4gICAgXCI4OTY5XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjg5NzBcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiODk3MVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41MTExMV0sXG4gICAgXCI4OTk0XCI6IFstMC4xMzg4OSwgMC4zNjExMSwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4OTk1XCI6IFstMC4xMzg4OSwgMC4zNjExMSwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI5NjUxXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjAyMjIyXSxcbiAgICBcIjk2NTdcIjogWy0wLjAyNzc4LCAwLjQ3MjIyLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI5NjYxXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjAyMjIyXSxcbiAgICBcIjk2NjdcIjogWy0wLjAyNzc4LCAwLjQ3MjIyLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI5NzExXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjk4MjRcIjogWzAuMTI5NjMsIDAuNjk0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiOTgyNVwiOiBbMC4xMjk2MywgMC42OTQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI5ODI2XCI6IFswLjEyOTYzLCAwLjY5NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjk4MjdcIjogWzAuMTI5NjMsIDAuNjk0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiOTgzN1wiOiBbMCwgMC43NSwgMCwgMCwgMC40NDcyMl0sXG4gICAgXCI5ODM4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjQ0NzIyXSxcbiAgICBcIjk4MzlcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiMTAyMTZcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiMTAyMTdcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiMTA4MTVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuOV0sXG4gICAgXCIxMDkyN1wiOiBbMC4xOTY2NywgMC42OTY2NywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCIxMDkyOFwiOiBbMC4xOTY2NywgMC42OTY2NywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI1NzM3NlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMF1cbiAgfSxcbiAgXCJNYWluLUJvbGRJdGFsaWNcIjoge1xuICAgIFwiMzNcIjogWzAsIDAuNjk0NDQsIDAuMTE0MTcsIDAsIDAuMzg2MTFdLFxuICAgIFwiMzRcIjogWzAsIDAuNjk0NDQsIDAuMDc5MzksIDAsIDAuNjIwNTVdLFxuICAgIFwiMzVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDY4MzMsIDAsIDAuOTQ0NDRdLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAuMTI4NjEsIDAsIDAuOTQ0NDRdLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAuMDg1MjgsIDAsIDAuODg1NTVdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAuMTI5NDUsIDAsIDAuMzU1NTVdLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAuMTU4MDYsIDAsIDAuNDczMzNdLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAuMDMzMDYsIDAsIDAuNDczMzNdLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAuMTQzMzMsIDAsIDAuNTkxMTFdLFxuICAgIFwiNDNcIjogWzAuMTAzMzMsIDAuNjAzMzMsIDAuMDMzMDYsIDAsIDAuODg1NTVdLFxuICAgIFwiNDRcIjogWzAuMTk0NDQsIDAuMTQ3MjIsIDAsIDAsIDAuMzU1NTVdLFxuICAgIFwiNDVcIjogWzAsIDAuNDQ0NDQsIDAuMDI2MTEsIDAsIDAuNDE0NDRdLFxuICAgIFwiNDZcIjogWzAsIDAuMTQ3MjIsIDAsIDAsIDAuMzU1NTVdLFxuICAgIFwiNDdcIjogWzAuMjUsIDAuNzUsIDAuMTU4MDYsIDAsIDAuNTkxMTFdLFxuICAgIFwiNDhcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNDlcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTBcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTFcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTJcIjogWzAuMTk0NDQsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTNcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTRcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTVcIjogWzAuMTk0NDQsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTZcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTdcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNThcIjogWzAsIDAuNDQ0NDQsIDAuMDY2OTUsIDAsIDAuMzU1NTVdLFxuICAgIFwiNTlcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDY2OTUsIDAsIDAuMzU1NTVdLFxuICAgIFwiNjFcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLjA2ODMzLCAwLCAwLjg4NTU1XSxcbiAgICBcIjYzXCI6IFswLCAwLjY5NDQ0LCAwLjExNDcyLCAwLCAwLjU5MTExXSxcbiAgICBcIjY0XCI6IFswLCAwLjY5NDQ0LCAwLjA5MjA4LCAwLCAwLjg4NTU1XSxcbiAgICBcIjY1XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg2NTU1XSxcbiAgICBcIjY2XCI6IFswLCAwLjY4NjExLCAwLjA5OTIsIDAsIDAuODE2NjZdLFxuICAgIFwiNjdcIjogWzAsIDAuNjg2MTEsIDAuMTQyMDgsIDAsIDAuODI2NjZdLFxuICAgIFwiNjhcIjogWzAsIDAuNjg2MTEsIDAuMDkwNjIsIDAsIDAuODc1NTVdLFxuICAgIFwiNjlcIjogWzAsIDAuNjg2MTEsIDAuMTE0MzEsIDAsIDAuNzU2NjZdLFxuICAgIFwiNzBcIjogWzAsIDAuNjg2MTEsIDAuMTI5MDMsIDAsIDAuNzI3MjJdLFxuICAgIFwiNzFcIjogWzAsIDAuNjg2MTEsIDAuMDczNDcsIDAsIDAuODk1MjddLFxuICAgIFwiNzJcIjogWzAsIDAuNjg2MTEsIDAuMTcyMDgsIDAsIDAuODk2MV0sXG4gICAgXCI3M1wiOiBbMCwgMC42ODYxMSwgMC4xNTY4MSwgMCwgMC40NzE2Nl0sXG4gICAgXCI3NFwiOiBbMCwgMC42ODYxMSwgMC4xNDUsIDAsIDAuNjEwNTVdLFxuICAgIFwiNzVcIjogWzAsIDAuNjg2MTEsIDAuMTQyMDgsIDAsIDAuODk0OTldLFxuICAgIFwiNzZcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNjk3NzddLFxuICAgIFwiNzdcIjogWzAsIDAuNjg2MTEsIDAuMTcyMDgsIDAsIDEuMDcyNzddLFxuICAgIFwiNzhcIjogWzAsIDAuNjg2MTEsIDAuMTcyMDgsIDAsIDAuODk2MV0sXG4gICAgXCI3OVwiOiBbMCwgMC42ODYxMSwgMC4wOTA2MiwgMCwgMC44NTQ5OV0sXG4gICAgXCI4MFwiOiBbMCwgMC42ODYxMSwgMC4wOTkyLCAwLCAwLjc4NzIxXSxcbiAgICBcIjgxXCI6IFswLjE5NDQ0LCAwLjY4NjExLCAwLjA5MDYyLCAwLCAwLjg1NDk5XSxcbiAgICBcIjgyXCI6IFswLCAwLjY4NjExLCAwLjAyNTU5LCAwLCAwLjg1OTQ0XSxcbiAgICBcIjgzXCI6IFswLCAwLjY4NjExLCAwLjExMjY0LCAwLCAwLjY0OTk5XSxcbiAgICBcIjg0XCI6IFswLCAwLjY4NjExLCAwLjEyOTAzLCAwLCAwLjc5NjFdLFxuICAgIFwiODVcIjogWzAsIDAuNjg2MTEsIDAuMTcyMDgsIDAsIDAuODgwODNdLFxuICAgIFwiODZcIjogWzAsIDAuNjg2MTEsIDAuMTg2MjUsIDAsIDAuODY1NTVdLFxuICAgIFwiODdcIjogWzAsIDAuNjg2MTEsIDAuMTg2MjUsIDAsIDEuMTU5OTldLFxuICAgIFwiODhcIjogWzAsIDAuNjg2MTEsIDAuMTU2ODEsIDAsIDAuODY1NTVdLFxuICAgIFwiODlcIjogWzAsIDAuNjg2MTEsIDAuMTk4MDMsIDAsIDAuODY1NTVdLFxuICAgIFwiOTBcIjogWzAsIDAuNjg2MTEsIDAuMTQyMDgsIDAsIDAuNzA4ODhdLFxuICAgIFwiOTFcIjogWzAuMjUsIDAuNzUsIDAuMTg3NSwgMCwgMC4zNTYxMV0sXG4gICAgXCI5M1wiOiBbMC4yNSwgMC43NSwgMC4wOTk3MiwgMCwgMC4zNTYxMV0sXG4gICAgXCI5NFwiOiBbMCwgMC42OTQ0NCwgMC4wNjcwOSwgMCwgMC41OTExMV0sXG4gICAgXCI5NVwiOiBbMC4zMSwgMC4xMzQ0NCwgMC4wOTgxMSwgMCwgMC41OTExMV0sXG4gICAgXCI5N1wiOiBbMCwgMC40NDQ0NCwgMC4wOTQyNiwgMCwgMC41OTExMV0sXG4gICAgXCI5OFwiOiBbMCwgMC42OTQ0NCwgMC4wNzg2MSwgMCwgMC41MzIyMl0sXG4gICAgXCI5OVwiOiBbMCwgMC40NDQ0NCwgMC4wNTIyMiwgMCwgMC41MzIyMl0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjk0NDQsIDAuMTA4NjEsIDAsIDAuNTkxMTFdLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ0NDQ0LCAwLjA4NSwgMCwgMC41MzIyMl0sXG4gICAgXCIxMDJcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMjE3NzgsIDAsIDAuNF0sXG4gICAgXCIxMDNcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMTA1LCAwLCAwLjUzMjIyXSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMC4wOTQyNiwgMCwgMC41OTExMV0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjkzMjYsIDAuMTEzODcsIDAsIDAuMzU1NTVdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY5MzI2LCAwLjE2NzIsIDAsIDAuMzU1NTVdLFxuICAgIFwiMTA3XCI6IFswLCAwLjY5NDQ0LCAwLjExMTExLCAwLCAwLjUzMjIyXSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMC4xMDg2MSwgMCwgMC4yOTY2Nl0sXG4gICAgXCIxMDlcIjogWzAsIDAuNDQ0NDQsIDAuMDk0MjYsIDAsIDAuOTQ0NDRdLFxuICAgIFwiMTEwXCI6IFswLCAwLjQ0NDQ0LCAwLjA5NDI2LCAwLCAwLjY0OTk5XSxcbiAgICBcIjExMVwiOiBbMCwgMC40NDQ0NCwgMC4wNzg2MSwgMCwgMC41OTExMV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDc4NjEsIDAsIDAuNTkxMTFdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjEwNSwgMCwgMC41MzIyMl0sXG4gICAgXCIxMTRcIjogWzAsIDAuNDQ0NDQsIDAuMTExMTEsIDAsIDAuNTAxNjddLFxuICAgIFwiMTE1XCI6IFswLCAwLjQ0NDQ0LCAwLjA4MTY3LCAwLCAwLjQ4Njk0XSxcbiAgICBcIjExNlwiOiBbMCwgMC42MzQ5MiwgMC4wOTYzOSwgMCwgMC4zODVdLFxuICAgIFwiMTE3XCI6IFswLCAwLjQ0NDQ0LCAwLjA5NDI2LCAwLCAwLjYyMDU1XSxcbiAgICBcIjExOFwiOiBbMCwgMC40NDQ0NCwgMC4xMTExMSwgMCwgMC41MzIyMl0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDQ0NDQsIDAuMTExMTEsIDAsIDAuNzY3NzddLFxuICAgIFwiMTIwXCI6IFswLCAwLjQ0NDQ0LCAwLjEyNTgzLCAwLCAwLjU2MDU1XSxcbiAgICBcIjEyMVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4xMDUsIDAsIDAuNTYxNjZdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQ0NDQ0LCAwLjEzODg5LCAwLCAwLjQ5MDU1XSxcbiAgICBcIjEyNlwiOiBbMC4zNSwgMC4zNDQ0NCwgMC4xMTQ3MiwgMCwgMC41OTExMV0sXG4gICAgXCIxNjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODY4NTNdLFxuICAgIFwiMTY4XCI6IFswLCAwLjY5NDQ0LCAwLjExNDczLCAwLCAwLjU5MTExXSxcbiAgICBcIjE3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC45NDg4OF0sXG4gICAgXCIxODRcIjogWzAuMTcwMTQsIDAsIDAsIDAsIDAuNTMyMjJdLFxuICAgIFwiMTk4XCI6IFswLCAwLjY4NjExLCAwLjExNDMxLCAwLCAxLjAyMjc3XSxcbiAgICBcIjIxNlwiOiBbMC4wNDg2MSwgMC43MzQ3MiwgMC4wOTA2MiwgMCwgMC44ODU1NV0sXG4gICAgXCIyMjNcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDk3MzYsIDAsIDAuNjY1XSxcbiAgICBcIjIzMFwiOiBbMCwgMC40NDQ0NCwgMC4wODUsIDAsIDAuODI2NjZdLFxuICAgIFwiMjQ4XCI6IFswLjA5NzIyLCAwLjU0MTY3LCAwLjA5NDU4LCAwLCAwLjU5MTExXSxcbiAgICBcIjMwNVwiOiBbMCwgMC40NDQ0NCwgMC4wOTQyNiwgMCwgMC4zNTU1NV0sXG4gICAgXCIzMzhcIjogWzAsIDAuNjg2MTEsIDAuMTE0MzEsIDAsIDEuMTQwNTRdLFxuICAgIFwiMzM5XCI6IFswLCAwLjQ0NDQ0LCAwLjA4NSwgMCwgMC44MjY2Nl0sXG4gICAgXCI1NjdcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDQ2MTEsIDAsIDAuMzg1XSxcbiAgICBcIjcxMFwiOiBbMCwgMC42OTQ0NCwgMC4wNjcwOSwgMCwgMC41OTExMV0sXG4gICAgXCI3MTFcIjogWzAsIDAuNjMxOTQsIDAuMDgyNzEsIDAsIDAuNTkxMTFdLFxuICAgIFwiNzEzXCI6IFswLCAwLjU5NDQ0LCAwLjEwNDQ0LCAwLCAwLjU5MTExXSxcbiAgICBcIjcxNFwiOiBbMCwgMC42OTQ0NCwgMC4wODUyOCwgMCwgMC41OTExMV0sXG4gICAgXCI3MTVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTkxMTFdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLjEwMzMzLCAwLCAwLjU5MTExXSxcbiAgICBcIjcyOVwiOiBbMCwgMC42OTQ0NCwgMC4xMjk0NSwgMCwgMC4zNTU1NV0sXG4gICAgXCI3MzBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuOTQ4ODhdLFxuICAgIFwiNzMyXCI6IFswLCAwLjY5NDQ0LCAwLjExNDcyLCAwLCAwLjU5MTExXSxcbiAgICBcIjczM1wiOiBbMCwgMC42OTQ0NCwgMC4xMTQ3MiwgMCwgMC41OTExMV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjg2MTEsIDAuMTI5MDMsIDAsIDAuNjk3NzddLFxuICAgIFwiOTE2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjk0NDQ0XSxcbiAgICBcIjkyMFwiOiBbMCwgMC42ODYxMSwgMC4wOTA2MiwgMCwgMC44ODU1NV0sXG4gICAgXCI5MjNcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODA2NjZdLFxuICAgIFwiOTI2XCI6IFswLCAwLjY4NjExLCAwLjE1MDkyLCAwLCAwLjc2Nzc3XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42ODYxMSwgMC4xNzIwOCwgMCwgMC44OTYxXSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODYxMSwgMC4xMTQzMSwgMCwgMC44MjY2Nl0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjg2MTEsIDAuMTA3NzgsIDAsIDAuODg1NTVdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4NjExLCAwLjA1NjMyLCAwLCAwLjgyNjY2XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODYxMSwgMC4xMDc3OCwgMCwgMC44ODU1NV0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjg2MTEsIDAuMDk5MiwgMCwgMC44MjY2Nl0sXG4gICAgXCI4MjExXCI6IFswLCAwLjQ0NDQ0LCAwLjA5ODExLCAwLCAwLjU5MTExXSxcbiAgICBcIjgyMTJcIjogWzAsIDAuNDQ0NDQsIDAuMDk4MTEsIDAsIDEuMTgyMjFdLFxuICAgIFwiODIxNlwiOiBbMCwgMC42OTQ0NCwgMC4xMjk0NSwgMCwgMC4zNTU1NV0sXG4gICAgXCI4MjE3XCI6IFswLCAwLjY5NDQ0LCAwLjEyOTQ1LCAwLCAwLjM1NTU1XSxcbiAgICBcIjgyMjBcIjogWzAsIDAuNjk0NDQsIDAuMTY3NzIsIDAsIDAuNjIwNTVdLFxuICAgIFwiODIyMVwiOiBbMCwgMC42OTQ0NCwgMC4wNzkzOSwgMCwgMC42MjA1NV1cbiAgfSxcbiAgXCJNYWluLUl0YWxpY1wiOiB7XG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMC4xMjQxNywgMCwgMC4zMDY2N10sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMC4wNjk2MSwgMCwgMC41MTQ0NF0sXG4gICAgXCIzNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wNjYxNiwgMCwgMC44MTc3N10sXG4gICAgXCIzN1wiOiBbMC4wNTU1NiwgMC43NSwgMC4xMzYzOSwgMCwgMC44MTc3N10sXG4gICAgXCIzOFwiOiBbMCwgMC42OTQ0NCwgMC4wOTY5NCwgMCwgMC43NjY2Nl0sXG4gICAgXCIzOVwiOiBbMCwgMC42OTQ0NCwgMC4xMjQxNywgMCwgMC4zMDY2N10sXG4gICAgXCI0MFwiOiBbMC4yNSwgMC43NSwgMC4xNjE5NCwgMCwgMC40MDg4OV0sXG4gICAgXCI0MVwiOiBbMC4yNSwgMC43NSwgMC4wMzY5NCwgMCwgMC40MDg4OV0sXG4gICAgXCI0MlwiOiBbMCwgMC43NSwgMC4xNDkxNywgMCwgMC41MTExMV0sXG4gICAgXCI0M1wiOiBbMC4wNTY2NywgMC41NjE2NywgMC4wMzY5NCwgMCwgMC43NjY2Nl0sXG4gICAgXCI0NFwiOiBbMC4xOTQ0NCwgMC4xMDU1NiwgMCwgMCwgMC4zMDY2N10sXG4gICAgXCI0NVwiOiBbMCwgMC40MzA1NiwgMC4wMjgyNiwgMCwgMC4zNTc3OF0sXG4gICAgXCI0NlwiOiBbMCwgMC4xMDU1NiwgMCwgMCwgMC4zMDY2N10sXG4gICAgXCI0N1wiOiBbMC4yNSwgMC43NSwgMC4xNjE5NCwgMCwgMC41MTExMV0sXG4gICAgXCI0OFwiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI0OVwiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1MFwiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1MVwiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1MlwiOiBbMC4xOTQ0NCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1M1wiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1NFwiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1NVwiOiBbMC4xOTQ0NCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1NlwiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1N1wiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1OFwiOiBbMCwgMC40MzA1NiwgMC4wNTgyLCAwLCAwLjMwNjY3XSxcbiAgICBcIjU5XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjA1ODIsIDAsIDAuMzA2NjddLFxuICAgIFwiNjFcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLjA2NjE2LCAwLCAwLjc2NjY2XSxcbiAgICBcIjYzXCI6IFswLCAwLjY5NDQ0LCAwLjEyMjUsIDAsIDAuNTExMTFdLFxuICAgIFwiNjRcIjogWzAsIDAuNjk0NDQsIDAuMDk1OTcsIDAsIDAuNzY2NjZdLFxuICAgIFwiNjVcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzQzMzNdLFxuICAgIFwiNjZcIjogWzAsIDAuNjgzMzMsIDAuMTAyNTcsIDAsIDAuNzAzODldLFxuICAgIFwiNjdcIjogWzAsIDAuNjgzMzMsIDAuMTQ1MjgsIDAsIDAuNzE1NTVdLFxuICAgIFwiNjhcIjogWzAsIDAuNjgzMzMsIDAuMDk0MDMsIDAsIDAuNzU1XSxcbiAgICBcIjY5XCI6IFswLCAwLjY4MzMzLCAwLjEyMDI4LCAwLCAwLjY3ODMzXSxcbiAgICBcIjcwXCI6IFswLCAwLjY4MzMzLCAwLjEzMzA1LCAwLCAwLjY1Mjc3XSxcbiAgICBcIjcxXCI6IFswLCAwLjY4MzMzLCAwLjA4NzIyLCAwLCAwLjc3MzYxXSxcbiAgICBcIjcyXCI6IFswLCAwLjY4MzMzLCAwLjE2Mzg5LCAwLCAwLjc0MzMzXSxcbiAgICBcIjczXCI6IFswLCAwLjY4MzMzLCAwLjE1ODA2LCAwLCAwLjM4NTU1XSxcbiAgICBcIjc0XCI6IFswLCAwLjY4MzMzLCAwLjE0MDI4LCAwLCAwLjUyNV0sXG4gICAgXCI3NVwiOiBbMCwgMC42ODMzMywgMC4xNDUyOCwgMCwgMC43Njg4OF0sXG4gICAgXCI3NlwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42MjcyMl0sXG4gICAgXCI3N1wiOiBbMCwgMC42ODMzMywgMC4xNjM4OSwgMCwgMC44OTY2Nl0sXG4gICAgXCI3OFwiOiBbMCwgMC42ODMzMywgMC4xNjM4OSwgMCwgMC43NDMzM10sXG4gICAgXCI3OVwiOiBbMCwgMC42ODMzMywgMC4wOTQwMywgMCwgMC43NjY2Nl0sXG4gICAgXCI4MFwiOiBbMCwgMC42ODMzMywgMC4xMDI1NywgMCwgMC42NzgzM10sXG4gICAgXCI4MVwiOiBbMC4xOTQ0NCwgMC42ODMzMywgMC4wOTQwMywgMCwgMC43NjY2Nl0sXG4gICAgXCI4MlwiOiBbMCwgMC42ODMzMywgMC4wMzg2OCwgMCwgMC43Mjk0NF0sXG4gICAgXCI4M1wiOiBbMCwgMC42ODMzMywgMC4xMTk3MiwgMCwgMC41NjIyMl0sXG4gICAgXCI4NFwiOiBbMCwgMC42ODMzMywgMC4xMzMwNSwgMCwgMC43MTU1NV0sXG4gICAgXCI4NVwiOiBbMCwgMC42ODMzMywgMC4xNjM4OSwgMCwgMC43NDMzM10sXG4gICAgXCI4NlwiOiBbMCwgMC42ODMzMywgMC4xODM2MSwgMCwgMC43NDMzM10sXG4gICAgXCI4N1wiOiBbMCwgMC42ODMzMywgMC4xODM2MSwgMCwgMC45OTg4OF0sXG4gICAgXCI4OFwiOiBbMCwgMC42ODMzMywgMC4xNTgwNiwgMCwgMC43NDMzM10sXG4gICAgXCI4OVwiOiBbMCwgMC42ODMzMywgMC4xOTM4MywgMCwgMC43NDMzM10sXG4gICAgXCI5MFwiOiBbMCwgMC42ODMzMywgMC4xNDUyOCwgMCwgMC42MTMzM10sXG4gICAgXCI5MVwiOiBbMC4yNSwgMC43NSwgMC4xODc1LCAwLCAwLjMwNjY3XSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLjEwNTI4LCAwLCAwLjMwNjY3XSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLjA2NjQ2LCAwLCAwLjUxMTExXSxcbiAgICBcIjk1XCI6IFswLjMxLCAwLjEyMDU2LCAwLjA5MjA4LCAwLCAwLjUxMTExXSxcbiAgICBcIjk3XCI6IFswLCAwLjQzMDU2LCAwLjA3NjcxLCAwLCAwLjUxMTExXSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLjA2MzEyLCAwLCAwLjQ2XSxcbiAgICBcIjk5XCI6IFswLCAwLjQzMDU2LCAwLjA1NjUzLCAwLCAwLjQ2XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMC4xMDMzMywgMCwgMC41MTExMV0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDMwNTYsIDAuMDc1MTQsIDAsIDAuNDZdLFxuICAgIFwiMTAyXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjIxMTk0LCAwLCAwLjMwNjY3XSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wODg0NywgMCwgMC40Nl0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAuMDc2NzEsIDAsIDAuNTExMTFdLFxuICAgIFwiMTA1XCI6IFswLCAwLjY1NTM2LCAwLjEwMTksIDAsIDAuMzA2NjddLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY1NTM2LCAwLjE0NDY3LCAwLCAwLjMwNjY3XSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMC4xMDc2NCwgMCwgMC40Nl0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjk0NDQsIDAuMTAzMzMsIDAsIDAuMjU1NTVdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQzMDU2LCAwLjA3NjcxLCAwLCAwLjgxNzc3XSxcbiAgICBcIjExMFwiOiBbMCwgMC40MzA1NiwgMC4wNzY3MSwgMCwgMC41NjIyMl0sXG4gICAgXCIxMTFcIjogWzAsIDAuNDMwNTYsIDAuMDYzMTIsIDAsIDAuNTExMTFdLFxuICAgIFwiMTEyXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjA2MzEyLCAwLCAwLjUxMTExXSxcbiAgICBcIjExM1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wODg0NywgMCwgMC40Nl0sXG4gICAgXCIxMTRcIjogWzAsIDAuNDMwNTYsIDAuMTA3NjQsIDAsIDAuNDIxNjZdLFxuICAgIFwiMTE1XCI6IFswLCAwLjQzMDU2LCAwLjA4MjA4LCAwLCAwLjQwODg5XSxcbiAgICBcIjExNlwiOiBbMCwgMC42MTUwOCwgMC4wOTQ4NiwgMCwgMC4zMzIyMl0sXG4gICAgXCIxMTdcIjogWzAsIDAuNDMwNTYsIDAuMDc2NzEsIDAsIDAuNTM2NjZdLFxuICAgIFwiMTE4XCI6IFswLCAwLjQzMDU2LCAwLjEwNzY0LCAwLCAwLjQ2XSxcbiAgICBcIjExOVwiOiBbMCwgMC40MzA1NiwgMC4xMDc2NCwgMCwgMC42NjQ0NF0sXG4gICAgXCIxMjBcIjogWzAsIDAuNDMwNTYsIDAuMTIwNDIsIDAsIDAuNDYzODldLFxuICAgIFwiMTIxXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjA4ODQ3LCAwLCAwLjQ4NTU1XSxcbiAgICBcIjEyMlwiOiBbMCwgMC40MzA1NiwgMC4xMjI5MiwgMCwgMC40MDg4OV0sXG4gICAgXCIxMjZcIjogWzAuMzUsIDAuMzE3ODYsIDAuMTE1ODUsIDAsIDAuNTExMTFdLFxuICAgIFwiMTYzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc2OTA5XSxcbiAgICBcIjE2OFwiOiBbMCwgMC42Njc4NiwgMC4xMDQ3NCwgMCwgMC41MTExMV0sXG4gICAgXCIxNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODMxMjldLFxuICAgIFwiMTg0XCI6IFswLjE3MDE0LCAwLCAwLCAwLCAwLjQ2XSxcbiAgICBcIjE5OFwiOiBbMCwgMC42ODMzMywgMC4xMjAyOCwgMCwgMC44ODI3N10sXG4gICAgXCIyMTZcIjogWzAuMDQ4NjEsIDAuNzMxOTQsIDAuMDk0MDMsIDAsIDAuNzY2NjZdLFxuICAgIFwiMjIzXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjEwNTE0LCAwLCAwLjUzNjY2XSxcbiAgICBcIjIzMFwiOiBbMCwgMC40MzA1NiwgMC4wNzUxNCwgMCwgMC43MTU1NV0sXG4gICAgXCIyNDhcIjogWzAuMDk3MjIsIDAuNTI3NzgsIDAuMDkxOTQsIDAsIDAuNTExMTFdLFxuICAgIFwiMzA1XCI6IFswLCAwLjQzMDU2LCAwLCAwLjAyNzc4LCAwLjMyMjQ2XSxcbiAgICBcIjMzOFwiOiBbMCwgMC42ODMzMywgMC4xMjAyOCwgMCwgMC45ODQ5OV0sXG4gICAgXCIzMzlcIjogWzAsIDAuNDMwNTYsIDAuMDc1MTQsIDAsIDAuNzE1NTVdLFxuICAgIFwiNTY3XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLjA4MzM0LCAwLjM4NDAzXSxcbiAgICBcIjcxMFwiOiBbMCwgMC42OTQ0NCwgMC4wNjY0NiwgMCwgMC41MTExMV0sXG4gICAgXCI3MTFcIjogWzAsIDAuNjI4NDcsIDAuMDgyOTUsIDAsIDAuNTExMTFdLFxuICAgIFwiNzEzXCI6IFswLCAwLjU2MTY3LCAwLjEwMzMzLCAwLCAwLjUxMTExXSxcbiAgICBcIjcxNFwiOiBbMCwgMC42OTQ0NCwgMC4wOTY5NCwgMCwgMC41MTExMV0sXG4gICAgXCI3MTVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLjEwODA2LCAwLCAwLjUxMTExXSxcbiAgICBcIjcyOVwiOiBbMCwgMC42Njc4NiwgMC4xMTc1MiwgMCwgMC4zMDY2N10sXG4gICAgXCI3MzBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODMxMjldLFxuICAgIFwiNzMyXCI6IFswLCAwLjY2Nzg2LCAwLjExNTg1LCAwLCAwLjUxMTExXSxcbiAgICBcIjczM1wiOiBbMCwgMC42OTQ0NCwgMC4xMjI1LCAwLCAwLjUxMTExXSxcbiAgICBcIjkxNVwiOiBbMCwgMC42ODMzMywgMC4xMzMwNSwgMCwgMC42MjcyMl0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuODE3NzddLFxuICAgIFwiOTIwXCI6IFswLCAwLjY4MzMzLCAwLjA5NDAzLCAwLCAwLjc2NjY2XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42OTIyMl0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjgzMzMsIDAuMTUyOTQsIDAsIDAuNjY0NDRdLFxuICAgIFwiOTI4XCI6IFswLCAwLjY4MzMzLCAwLjE2Mzg5LCAwLCAwLjc0MzMzXSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODMzMywgMC4xMjAyOCwgMCwgMC43MTU1NV0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjgzMzMsIDAuMTExMTEsIDAsIDAuNzY2NjZdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4MzMzLCAwLjA1OTg2LCAwLCAwLjcxNTU1XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODMzMywgMC4xMTExMSwgMCwgMC43NjY2Nl0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjgzMzMsIDAuMTAyNTcsIDAsIDAuNzE1NTVdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40MzA1NiwgMC4wOTIwOCwgMCwgMC41MTExMV0sXG4gICAgXCI4MjEyXCI6IFswLCAwLjQzMDU2LCAwLjA5MjA4LCAwLCAxLjAyMjIyXSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAuMTI0MTcsIDAsIDAuMzA2NjddLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMC4xMjQxNywgMCwgMC4zMDY2N10sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLjE2ODUsIDAsIDAuNTE0NDRdLFxuICAgIFwiODIyMVwiOiBbMCwgMC42OTQ0NCwgMC4wNjk2MSwgMCwgMC41MTQ0NF0sXG4gICAgXCI4NDYzXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjU0MDI4XVxuICB9LFxuICBcIk1haW4tUmVndWxhclwiOiB7XG4gICAgXCIzMlwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjM1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjM2XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMzg4ODldLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMzg4ODldLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCI0M1wiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI0NFwiOiBbMC4xOTQ0NCwgMC4xMDU1NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0NVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC4zMzMzM10sXG4gICAgXCI0NlwiOiBbMCwgMC4xMDU1NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0N1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjQ4XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNDlcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1MFwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjUxXCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTJcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1M1wiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjU0XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTVcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1NlwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjU3XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNThcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNTlcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNjBcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjYxXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI2MlwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiNjRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNjVcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzVdLFxuICAgIFwiNjZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzA4MzRdLFxuICAgIFwiNjdcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiNjhcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzYzODldLFxuICAgIFwiNjlcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjgwNTZdLFxuICAgIFwiNzBcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjUyNzhdLFxuICAgIFwiNzFcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzg0NzJdLFxuICAgIFwiNzJcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzVdLFxuICAgIFwiNzNcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuMzYxMTFdLFxuICAgIFwiNzRcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNTEzODldLFxuICAgIFwiNzVcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNzZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjI1XSxcbiAgICBcIjc3XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjkxNjY3XSxcbiAgICBcIjc4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc1XSxcbiAgICBcIjc5XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjgwXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjY4MDU2XSxcbiAgICBcIjgxXCI6IFswLjE5NDQ0LCAwLjY4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjgyXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjczNjExXSxcbiAgICBcIjgzXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg0XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg1XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc1XSxcbiAgICBcIjg2XCI6IFswLCAwLjY4MzMzLCAwLjAxMzg5LCAwLCAwLjc1XSxcbiAgICBcIjg3XCI6IFswLCAwLjY4MzMzLCAwLjAxMzg5LCAwLCAxLjAyNzc4XSxcbiAgICBcIjg4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc1XSxcbiAgICBcIjg5XCI6IFswLCAwLjY4MzMzLCAwLjAyNSwgMCwgMC43NV0sXG4gICAgXCI5MFwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42MTExMV0sXG4gICAgXCI5MVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI5MlwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiOTVcIjogWzAuMzEsIDAuMTIwNTYsIDAuMDI3NzgsIDAsIDAuNV0sXG4gICAgXCI5N1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjk5XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMTAyXCI6IFswLCAwLjY5NDQ0LCAwLjA3Nzc4LCAwLCAwLjMwNTU2XSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wMTM4OSwgMCwgMC41XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjY3ODYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY2Nzg2LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjExMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMTFcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjExNFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC4zOTE2N10sXG4gICAgXCIxMTVcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuMzk0NDVdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYxNTA4LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjExN1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMThcIjogWzAsIDAuNDMwNTYsIDAuMDEzODksIDAsIDAuNTI3NzhdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQzMDU2LCAwLjAxMzg5LCAwLCAwLjcyMjIyXSxcbiAgICBcIjEyMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDEzODksIDAsIDAuNTI3NzhdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEyM1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjEyNFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCIxMjVcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCIxMjZcIjogWzAuMzUsIDAuMzE3ODYsIDAsIDAsIDAuNV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMTY3XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjE2OFwiOiBbMCwgMC42Njc4NiwgMCwgMCwgMC41XSxcbiAgICBcIjE3MlwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCIxNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzVdLFxuICAgIFwiMTc3XCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjE4MlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCIxODRcIjogWzAuMTcwMTQsIDAsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMTk4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjkwMjc4XSxcbiAgICBcIjIxNVwiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIyMTZcIjogWzAuMDQ4NjEsIDAuNzMxOTQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiMjIzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiMjMwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjI0N1wiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIyNDhcIjogWzAuMDk3MjIsIDAuNTI3NzgsIDAsIDAsIDAuNV0sXG4gICAgXCIzMDVcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiMzM4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAxLjAxMzg5XSxcbiAgICBcIjMzOVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NjdcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiNzEwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzExXCI6IFswLCAwLjYyODQ3LCAwLCAwLCAwLjVdLFxuICAgIFwiNzEzXCI6IFswLCAwLjU2Nzc4LCAwLCAwLCAwLjVdLFxuICAgIFwiNzE0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzE1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzI5XCI6IFswLCAwLjY2Nzg2LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjczMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43NV0sXG4gICAgXCI3MzJcIjogWzAsIDAuNjY3ODYsIDAsIDAsIDAuNV0sXG4gICAgXCI3MzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjI1XSxcbiAgICBcIjkxNlwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI5MjBcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTIzXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjY5NDQ1XSxcbiAgICBcIjkyNlwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MjhcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzVdLFxuICAgIFwiOTMxXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjkzM1wiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5MzRcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiOTM2XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjkzN1wiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4MjExXCI6IFswLCAwLjQzMDU2LCAwLjAyNzc4LCAwLCAwLjVdLFxuICAgIFwiODIxMlwiOiBbMCwgMC40MzA1NiwgMC4wMjc3OCwgMCwgMS4wXSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiODIyMVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjgyMjRcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiODIyNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCI4MjMwXCI6IFswLCAwLjEyLCAwLCAwLCAxLjE3Ml0sXG4gICAgXCI4MjQyXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjI3NV0sXG4gICAgXCI4NDA3XCI6IFswLCAwLjcxNDQ0LCAwLjE1MzgyLCAwLCAwLjVdLFxuICAgIFwiODQ2M1wiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC41NDAyOF0sXG4gICAgXCI4NDY1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg0NjdcIjogWzAsIDAuNjk0NDQsIDAsIDAuMTExMTEsIDAuNDE2NjddLFxuICAgIFwiODQ3MlwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4xMTExMSwgMC42MzY0Nl0sXG4gICAgXCI4NDc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg1MDFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODU5MlwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NTkzXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiODU5NFwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NTk1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiODU5NlwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NTk3XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiODU5OFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4wXSxcbiAgICBcIjg1OTlcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjAwXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjBdLFxuICAgIFwiODYwMVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MTRcIjogWzAuMDExLCAwLjUxMSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MTdcIjogWzAuMDExLCAwLjUxMSwgMCwgMCwgMS4xMjZdLFxuICAgIFwiODYxOFwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjEyNl0sXG4gICAgXCI4NjM2XCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2MzdcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY0MFwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjQxXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTJcIjogWzAuMDExLCAwLjY3MSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTZcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY1N1wiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4NjU4XCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTlcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODY2MFwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjYxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg3MDRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODcwNlwiOiBbMCwgMC42OTQ0NCwgMC4wNTU1NiwgMC4wODMzNCwgMC41MzA5XSxcbiAgICBcIjg3MDdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODcwOVwiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjg3MTFcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODcxMlwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODcxNVwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODcyMlwiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzIzXCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3MjVcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzI2XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiODcyN1wiOiBbLTAuMDM0NzIsIDAuNDY1MjgsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzI4XCI6IFstMC4wNTU1NSwgMC40NDQ0NSwgMCwgMCwgMC41XSxcbiAgICBcIjg3MjlcIjogWy0wLjA1NTU1LCAwLjQ0NDQ1LCAwLCAwLCAwLjVdLFxuICAgIFwiODczMFwiOiBbMC4yLCAwLjgsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODczM1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzM0XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAxLjBdLFxuICAgIFwiODczNlwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4NzM5XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjg3NDFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzQzXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg3NDRcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODc0NVwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NzQ2XCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg3NDdcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMTExMTEsIDAsIDAuNDE2NjddLFxuICAgIFwiODc2NFwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc2OFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4NzcxXCI6IFstMC4wMzYyNSwgMC40NjM3NSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzczXCI6IFstMC4wMjIsIDAuNTg5LCAwLCAwLCAxLjBdLFxuICAgIFwiODc3NlwiOiBbLTAuMDE2ODgsIDAuNDgzMTIsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc4MVwiOiBbLTAuMDM2MjUsIDAuNDYzNzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc4NFwiOiBbLTAuMTMzLCAwLjY3LCAwLCAwLCAwLjc3OF0sXG4gICAgXCI4ODAxXCI6IFstMC4wMzYyNSwgMC40NjM3NSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODA0XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MDVcIjogWzAuMTM1OTcsIDAuNjM1OTcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgxMFwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDEuMF0sXG4gICAgXCI4ODExXCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMS4wXSxcbiAgICBcIjg4MjZcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MjdcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzRcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzVcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzhcIjogWzAuMTM1OTcsIDAuNjM1OTcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgzOVwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODQ2XCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg4NDlcIjogWzAuMTM1OTcsIDAuNjM1OTcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg1MFwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODUxXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg4NTJcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODg1M1wiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODU0XCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NTVcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg1NlwiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODU3XCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NjZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODg2N1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4ODY4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NjlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg3MlwiOiBbMC4yNDksIDAuNzUsIDAsIDAsIDAuODY3XSxcbiAgICBcIjg5MDBcIjogWy0wLjA1NTU1LCAwLjQ0NDQ1LCAwLCAwLCAwLjVdLFxuICAgIFwiODkwMVwiOiBbLTAuMDU1NTUsIDAuNDQ0NDUsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODkwMlwiOiBbLTAuMDM0NzIsIDAuNDY1MjgsIDAsIDAsIDAuNV0sXG4gICAgXCI4OTA0XCI6IFswLjAwNSwgMC41MDUsIDAsIDAsIDAuOV0sXG4gICAgXCI4OTQyXCI6IFswLjAzLCAwLjksIDAsIDAsIDAuMjc4XSxcbiAgICBcIjg5NDNcIjogWy0wLjE5LCAwLjMxLCAwLCAwLCAxLjE3Ml0sXG4gICAgXCI4OTQ1XCI6IFstMC4xLCAwLjgyLCAwLCAwLCAxLjI4Ml0sXG4gICAgXCI4OTY4XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjg5NjlcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiODk3MFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCI4OTcxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjg5OTRcIjogWy0wLjE0MjM2LCAwLjM1NzY0LCAwLCAwLCAxLjBdLFxuICAgIFwiODk5NVwiOiBbLTAuMTQyMzYsIDAuMzU3NjQsIDAsIDAsIDEuMF0sXG4gICAgXCI5MTM2XCI6IFswLjI0NCwgMC43NDQsIDAsIDAsIDAuNDEyXSxcbiAgICBcIjkxMzdcIjogWzAuMjQ0LCAwLjc0NCwgMCwgMCwgMC40MTJdLFxuICAgIFwiOTY1MVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5NjU3XCI6IFstMC4wMzQ3MiwgMC40NjUyOCwgMCwgMCwgMC41XSxcbiAgICBcIjk2NjFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTY2N1wiOiBbLTAuMDM0NzIsIDAuNDY1MjgsIDAsIDAsIDAuNV0sXG4gICAgXCI5NzExXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjBdLFxuICAgIFwiOTgyNFwiOiBbMC4xMjk2MywgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5ODI1XCI6IFswLjEyOTYzLCAwLjY5NDQ0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjk4MjZcIjogWzAuMTI5NjMsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTgyN1wiOiBbMC4xMjk2MywgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5ODM3XCI6IFswLCAwLjc1LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjk4MzhcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuMzg4ODldLFxuICAgIFwiOTgzOVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCIxMDIxNlwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCIxMDIxN1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCIxMDIyMlwiOiBbMC4yNDQsIDAuNzQ0LCAwLCAwLCAwLjQxMl0sXG4gICAgXCIxMDIyM1wiOiBbMC4yNDQsIDAuNzQ0LCAwLCAwLCAwLjQxMl0sXG4gICAgXCIxMDIyOVwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjYwOV0sXG4gICAgXCIxMDIzMFwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjYzOF0sXG4gICAgXCIxMDIzMVwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjg1OV0sXG4gICAgXCIxMDIzMlwiOiBbMC4wMjQsIDAuNTI1LCAwLCAwLCAxLjYwOV0sXG4gICAgXCIxMDIzM1wiOiBbMC4wMjQsIDAuNTI1LCAwLCAwLCAxLjYzOF0sXG4gICAgXCIxMDIzNFwiOiBbMC4wMjQsIDAuNTI1LCAwLCAwLCAxLjg1OF0sXG4gICAgXCIxMDIzNlwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjYzOF0sXG4gICAgXCIxMDgxNVwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43NV0sXG4gICAgXCIxMDkyN1wiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkyOFwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM3NlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMF1cbiAgfSxcbiAgXCJNYXRoLUJvbGRJdGFsaWNcIjoge1xuICAgIFwiNjVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODY5NDRdLFxuICAgIFwiNjZcIjogWzAsIDAuNjg2MTEsIDAuMDQ4MzUsIDAsIDAuODY2NF0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODYxMSwgMC4wNjk3OSwgMCwgMC44MTY5NF0sXG4gICAgXCI2OFwiOiBbMCwgMC42ODYxMSwgMC4wMzE5NCwgMCwgMC45MzgxMl0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODYxMSwgMC4wNTQ1MSwgMCwgMC44MTAwN10sXG4gICAgXCI3MFwiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMC42ODg4OV0sXG4gICAgXCI3MVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44ODY3M10sXG4gICAgXCI3MlwiOiBbMCwgMC42ODYxMSwgMC4wODIyOSwgMCwgMC45ODIyOV0sXG4gICAgXCI3M1wiOiBbMCwgMC42ODYxMSwgMC4wNzc3OCwgMCwgMC41MTExMV0sXG4gICAgXCI3NFwiOiBbMCwgMC42ODYxMSwgMC4xMDA2OSwgMCwgMC42MzEyNV0sXG4gICAgXCI3NVwiOiBbMCwgMC42ODYxMSwgMC4wNjk3OSwgMCwgMC45NzExOF0sXG4gICAgXCI3NlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC43NTU1NV0sXG4gICAgXCI3N1wiOiBbMCwgMC42ODYxMSwgMC4xMTQyNCwgMCwgMS4xNDIwMV0sXG4gICAgXCI3OFwiOiBbMCwgMC42ODYxMSwgMC4xMTQyNCwgMCwgMC45NTAzNF0sXG4gICAgXCI3OVwiOiBbMCwgMC42ODYxMSwgMC4wMzE5NCwgMCwgMC44MzY2Nl0sXG4gICAgXCI4MFwiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMC43MjMwOV0sXG4gICAgXCI4MVwiOiBbMC4xOTQ0NCwgMC42ODYxMSwgMCwgMCwgMC44Njg2MV0sXG4gICAgXCI4MlwiOiBbMCwgMC42ODYxMSwgMC4wMDQyMSwgMCwgMC44NzIzNV0sXG4gICAgXCI4M1wiOiBbMCwgMC42ODYxMSwgMC4wNTM4MiwgMCwgMC42OTI3MV0sXG4gICAgXCI4NFwiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMC42MzY2M10sXG4gICAgXCI4NVwiOiBbMCwgMC42ODYxMSwgMC4xMTQyNCwgMCwgMC44MDAyN10sXG4gICAgXCI4NlwiOiBbMCwgMC42ODYxMSwgMC4yNTU1NSwgMCwgMC42Nzc3OF0sXG4gICAgXCI4N1wiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMS4wOTMwNV0sXG4gICAgXCI4OFwiOiBbMCwgMC42ODYxMSwgMC4wNzc3OCwgMCwgMC45NDcyMl0sXG4gICAgXCI4OVwiOiBbMCwgMC42ODYxMSwgMC4yNTU1NSwgMCwgMC42NzQ1OF0sXG4gICAgXCI5MFwiOiBbMCwgMC42ODYxMSwgMC4wNjk3OSwgMCwgMC43NzI1N10sXG4gICAgXCI5N1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC42MzI4N10sXG4gICAgXCI5OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MjA4M10sXG4gICAgXCI5OVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MTM0Ml0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjA5NzJdLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjU1MzYxXSxcbiAgICBcIjEwMlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4xMTA0MiwgMCwgMC41NjgwNl0sXG4gICAgXCIxMDNcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDM3MDQsIDAsIDAuNTQ0OV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY3NTldLFxuICAgIFwiMTA1XCI6IFswLCAwLjY5MzI2LCAwLCAwLCAwLjQwNDhdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY5MzI2LCAwLjA2MjIsIDAsIDAuNDcwODNdLFxuICAgIFwiMTA3XCI6IFswLCAwLjY5NDQ0LCAwLjAxODUyLCAwLCAwLjYwMzddLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLjAwODgsIDAsIDAuMzQ4MTVdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAxLjAzMjRdLFxuICAgIFwiMTEwXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjcxMjk2XSxcbiAgICBcIjExMVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41ODQ3Ml0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNjAwOTJdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAzNzA0LCAwLCAwLjU0MjEzXSxcbiAgICBcIjExNFwiOiBbMCwgMC40NDQ0NCwgMC4wMzE5NCwgMCwgMC41Mjg3XSxcbiAgICBcIjExNVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MzEyNV0sXG4gICAgXCIxMTZcIjogWzAsIDAuNjM0OTIsIDAsIDAsIDAuNDE1MjhdLFxuICAgIFwiMTE3XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjY4MTAyXSxcbiAgICBcIjExOFwiOiBbMCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC41NjY2Nl0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDQ0NDQsIDAuMDI3NzgsIDAsIDAuODMxNDhdLFxuICAgIFwiMTIwXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjY1OTAzXSxcbiAgICBcIjEyMVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC41OTAyOF0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDQ0NDQsIDAuMDQyMTMsIDAsIDAuNTU1MDldLFxuICAgIFwiOTE1XCI6IFswLCAwLjY4NjExLCAwLjE1OTcyLCAwLCAwLjY1Njk0XSxcbiAgICBcIjkxNlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45NTgzM10sXG4gICAgXCI5MjBcIjogWzAsIDAuNjg2MTEsIDAuMDMxOTQsIDAsIDAuODY3MjJdLFxuICAgIFwiOTIzXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjgwNTU1XSxcbiAgICBcIjkyNlwiOiBbMCwgMC42ODYxMSwgMC4wNzQ1OCwgMCwgMC44NDEyNV0sXG4gICAgXCI5MjhcIjogWzAsIDAuNjg2MTEsIDAuMDgyMjksIDAsIDAuOTgyMjldLFxuICAgIFwiOTMxXCI6IFswLCAwLjY4NjExLCAwLjA1NDUxLCAwLCAwLjg4NTA3XSxcbiAgICBcIjkzM1wiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMC42NzA4M10sXG4gICAgXCI5MzRcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiOTM2XCI6IFswLCAwLjY4NjExLCAwLjExNjUzLCAwLCAwLjcxNDAyXSxcbiAgICBcIjkzN1wiOiBbMCwgMC42ODYxMSwgMC4wNDgzNSwgMCwgMC44Nzg5XSxcbiAgICBcIjk0NVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC43NjA2NF0sXG4gICAgXCI5NDZcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDM0MDMsIDAsIDAuNjU5NzJdLFxuICAgIFwiOTQ3XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjA2Mzg5LCAwLCAwLjU5MDAzXSxcbiAgICBcIjk0OFwiOiBbMCwgMC42OTQ0NCwgMC4wMzgxOSwgMCwgMC41MjIyMl0sXG4gICAgXCI5NDlcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTI4ODJdLFxuICAgIFwiOTUwXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA2MjE1LCAwLCAwLjUwODMzXSxcbiAgICBcIjk1MVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC42XSxcbiAgICBcIjk1MlwiOiBbMCwgMC42OTQ0NCwgMC4wMzE5NCwgMCwgMC41NjE4XSxcbiAgICBcIjk1M1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40MTIwNF0sXG4gICAgXCI5NTRcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNjY3NTldLFxuICAgIFwiOTU1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY3MDgzXSxcbiAgICBcIjk1NlwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC43MDc4N10sXG4gICAgXCI5NTdcIjogWzAsIDAuNDQ0NDQsIDAuMDY4OTgsIDAsIDAuNTc2ODVdLFxuICAgIFwiOTU4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjAzMDIxLCAwLCAwLjUwODMzXSxcbiAgICBcIjk1OVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41ODQ3Ml0sXG4gICAgXCI5NjBcIjogWzAsIDAuNDQ0NDQsIDAuMDM3MDQsIDAsIDAuNjgyNDFdLFxuICAgIFwiOTYxXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjYxMThdLFxuICAgIFwiOTYyXCI6IFswLjA5NzIyLCAwLjQ0NDQ0LCAwLjA3OTE3LCAwLCAwLjQyMzYxXSxcbiAgICBcIjk2M1wiOiBbMCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC42ODU4OF0sXG4gICAgXCI5NjRcIjogWzAsIDAuNDQ0NDQsIDAuMTM0NzIsIDAsIDAuNTIwODNdLFxuICAgIFwiOTY1XCI6IFswLCAwLjQ0NDQ0LCAwLjAzNzA0LCAwLCAwLjYzMDU1XSxcbiAgICBcIjk2NlwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC43NDcyMl0sXG4gICAgXCI5NjdcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNzE4MDVdLFxuICAgIFwiOTY4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjAzNzA0LCAwLCAwLjc1ODMzXSxcbiAgICBcIjk2OVwiOiBbMCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC43MTc4Ml0sXG4gICAgXCI5NzdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjkxNTVdLFxuICAgIFwiOTgxXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjcxMjVdLFxuICAgIFwiOTgyXCI6IFswLCAwLjQ0NDQ0LCAwLjAzMTk0LCAwLCAwLjk3NV0sXG4gICAgXCIxMDA5XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjYxMThdLFxuICAgIFwiMTAxM1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40ODMzM11cbiAgfSxcbiAgXCJNYXRoLUl0YWxpY1wiOiB7XG4gICAgXCI2NVwiOiBbMCwgMC42ODMzMywgMCwgMC4xMzg4OSwgMC43NV0sXG4gICAgXCI2NlwiOiBbMCwgMC42ODMzMywgMC4wNTAxNywgMC4wODMzNCwgMC43NTg1MV0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODMzMywgMC4wNzE1MywgMC4wODMzNCwgMC43MTQ3Ml0sXG4gICAgXCI2OFwiOiBbMCwgMC42ODMzMywgMC4wMjc3OCwgMC4wNTU1NiwgMC44Mjc5Ml0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODMzMywgMC4wNTc2NCwgMC4wODMzNCwgMC43MzgyXSxcbiAgICBcIjcwXCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLjA4MzM0LCAwLjY0MzA2XSxcbiAgICBcIjcxXCI6IFswLCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjc4NjI1XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4MzMzLCAwLjA4MTI1LCAwLjA1NTU2LCAwLjgzMTI1XSxcbiAgICBcIjczXCI6IFswLCAwLjY4MzMzLCAwLjA3ODQ3LCAwLjExMTExLCAwLjQzOTU4XSxcbiAgICBcIjc0XCI6IFswLCAwLjY4MzMzLCAwLjA5NjE4LCAwLjE2NjY3LCAwLjU1NDUxXSxcbiAgICBcIjc1XCI6IFswLCAwLjY4MzMzLCAwLjA3MTUzLCAwLjA1NTU2LCAwLjg0OTMxXSxcbiAgICBcIjc2XCI6IFswLCAwLjY4MzMzLCAwLCAwLjAyNzc4LCAwLjY4MDU2XSxcbiAgICBcIjc3XCI6IFswLCAwLjY4MzMzLCAwLjEwOTAzLCAwLjA4MzM0LCAwLjk3MDE0XSxcbiAgICBcIjc4XCI6IFswLCAwLjY4MzMzLCAwLjEwOTAzLCAwLjA4MzM0LCAwLjgwMzQ3XSxcbiAgICBcIjc5XCI6IFswLCAwLjY4MzMzLCAwLjAyNzc4LCAwLjA4MzM0LCAwLjc2Mjc4XSxcbiAgICBcIjgwXCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLjA4MzM0LCAwLjY0MjAxXSxcbiAgICBcIjgxXCI6IFswLjE5NDQ0LCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjc5MDU2XSxcbiAgICBcIjgyXCI6IFswLCAwLjY4MzMzLCAwLjAwNzczLCAwLjA4MzM0LCAwLjc1OTI5XSxcbiAgICBcIjgzXCI6IFswLCAwLjY4MzMzLCAwLjA1NzY0LCAwLjA4MzM0LCAwLjYxMzJdLFxuICAgIFwiODRcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAuMDgzMzQsIDAuNTg0MzhdLFxuICAgIFwiODVcIjogWzAsIDAuNjgzMzMsIDAuMTA5MDMsIDAuMDI3NzgsIDAuNjgyNzhdLFxuICAgIFwiODZcIjogWzAsIDAuNjgzMzMsIDAuMjIyMjIsIDAsIDAuNTgzMzNdLFxuICAgIFwiODdcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAsIDAuOTQ0NDVdLFxuICAgIFwiODhcIjogWzAsIDAuNjgzMzMsIDAuMDc4NDcsIDAuMDgzMzQsIDAuODI4NDddLFxuICAgIFwiODlcIjogWzAsIDAuNjgzMzMsIDAuMjIyMjIsIDAsIDAuNTgwNTZdLFxuICAgIFwiOTBcIjogWzAsIDAuNjgzMzMsIDAuMDcxNTMsIDAuMDgzMzQsIDAuNjgyNjRdLFxuICAgIFwiOTdcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI4NTldLFxuICAgIFwiOThcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNDI5MTddLFxuICAgIFwiOTlcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDMyNzZdLFxuICAgIFwiMTAwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLjE2NjY3LCAwLjUyMDQ5XSxcbiAgICBcIjEwMVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40NjU2M10sXG4gICAgXCIxMDJcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMTA3NjQsIDAuMTY2NjcsIDAuNDg5NTldLFxuICAgIFwiMTAzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjAzNTg4LCAwLjAyNzc4LCAwLjQ3Njk3XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzYxNl0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjU5NTIsIDAsIDAsIDAuMzQ0NTFdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY1OTUyLCAwLjA1NzI0LCAwLCAwLjQxMTgxXSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMC4wMzE0OCwgMCwgMC41MjA2XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMC4wMTk2OCwgMC4wODMzNCwgMC4yOTgzOF0sXG4gICAgXCIxMDlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuODc4MDFdLFxuICAgIFwiMTEwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjYwMDIzXSxcbiAgICBcIjExMVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40ODQ3Ml0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNTAzMTNdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjAzNTg4LCAwLjA4MzM0LCAwLjQ0NjQxXSxcbiAgICBcIjExNFwiOiBbMCwgMC40MzA1NiwgMC4wMjc3OCwgMC4wNTU1NiwgMC40NTExNl0sXG4gICAgXCIxMTVcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDY4NzVdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYxNTA4LCAwLCAwLjA4MzM0LCAwLjM2MTExXSxcbiAgICBcIjExN1wiOiBbMCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC41NzI0Nl0sXG4gICAgXCIxMThcIjogWzAsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDI3NzgsIDAuNDg0NzJdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQzMDU2LCAwLjAyNjkxLCAwLjA4MzM0LCAwLjcxNTkyXSxcbiAgICBcIjEyMFwiOiBbMCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC41NzE1M10sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDU1NTYsIDAuNDkwMjhdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQzMDU2LCAwLjA0Mzk4LCAwLjA1NTU2LCAwLjQ2NTA1XSxcbiAgICBcIjkxNVwiOiBbMCwgMC42ODMzMywgMC4xMzg4OSwgMC4wODMzNCwgMC42MTUyOF0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjgzMzMsIDAsIDAuMTY2NjcsIDAuODMzMzRdLFxuICAgIFwiOTIwXCI6IFswLCAwLjY4MzMzLCAwLjAyNzc4LCAwLjA4MzM0LCAwLjc2Mjc4XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42ODMzMywgMCwgMC4xNjY2NywgMC42OTQ0NV0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjgzMzMsIDAuMDc1NjksIDAuMDgzMzQsIDAuNzQyMzZdLFxuICAgIFwiOTI4XCI6IFswLCAwLjY4MzMzLCAwLjA4MTI1LCAwLjA1NTU2LCAwLjgzMTI1XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODMzMywgMC4wNTc2NCwgMC4wODMzNCwgMC43Nzk4Nl0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAuMDU1NTYsIDAuNTgzMzNdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjY2NjY3XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODMzMywgMC4xMSwgMC4wNTU1NiwgMC42MTIyMl0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjgzMzMsIDAuMDUwMTcsIDAuMDgzMzQsIDAuNzcyNF0sXG4gICAgXCI5NDVcIjogWzAsIDAuNDMwNTYsIDAuMDAzNywgMC4wMjc3OCwgMC42Mzk3XSxcbiAgICBcIjk0NlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wNTI3OCwgMC4wODMzNCwgMC41NjU2M10sXG4gICAgXCI5NDdcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDU1NTYsIDAsIDAuNTE3NzNdLFxuICAgIFwiOTQ4XCI6IFswLCAwLjY5NDQ0LCAwLjAzNzg1LCAwLjA1NTU2LCAwLjQ0NDQ0XSxcbiAgICBcIjk0OVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wODMzNCwgMC40NjYzMl0sXG4gICAgXCI5NTBcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDczNzgsIDAuMDgzMzQsIDAuNDM3NV0sXG4gICAgXCI5NTFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDU1NTYsIDAuNDk2NTNdLFxuICAgIFwiOTUyXCI6IFswLCAwLjY5NDQ0LCAwLjAyNzc4LCAwLjA4MzM0LCAwLjQ2OTQ0XSxcbiAgICBcIjk1M1wiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC4zNTM5NF0sXG4gICAgXCI5NTRcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTc2MTZdLFxuICAgIFwiOTU1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjk1NlwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC42MDI1NV0sXG4gICAgXCI5NTdcIjogWzAsIDAuNDMwNTYsIDAuMDYzNjYsIDAuMDI3NzgsIDAuNDkzOThdLFxuICAgIFwiOTU4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA0NjAxLCAwLjExMTExLCAwLjQzNzVdLFxuICAgIFwiOTU5XCI6IFswLCAwLjQzMDU2LCAwLCAwLjA1NTU2LCAwLjQ4NDcyXSxcbiAgICBcIjk2MFwiOiBbMCwgMC40MzA1NiwgMC4wMzU4OCwgMCwgMC41NzAwM10sXG4gICAgXCI5NjFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNTE3MDJdLFxuICAgIFwiOTYyXCI6IFswLjA5NzIyLCAwLjQzMDU2LCAwLjA3OTg2LCAwLjA4MzM0LCAwLjM2Mjg1XSxcbiAgICBcIjk2M1wiOiBbMCwgMC40MzA1NiwgMC4wMzU4OCwgMCwgMC41NzE0MV0sXG4gICAgXCI5NjRcIjogWzAsIDAuNDMwNTYsIDAuMTEzMiwgMC4wMjc3OCwgMC40MzcxNV0sXG4gICAgXCI5NjVcIjogWzAsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDI3NzgsIDAuNTQwMjhdLFxuICAgIFwiOTY2XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLjA4MzM0LCAwLjY1NDE3XSxcbiAgICBcIjk2N1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC42MjU2OV0sXG4gICAgXCI5NjhcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDM1ODgsIDAuMTExMTEsIDAuNjUxMzldLFxuICAgIFwiOTY5XCI6IFswLCAwLjQzMDU2LCAwLjAzNTg4LCAwLCAwLjYyMjQ1XSxcbiAgICBcIjk3N1wiOiBbMCwgMC42OTQ0NCwgMCwgMC4wODMzNCwgMC41OTE0NF0sXG4gICAgXCI5ODFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAuMDgzMzQsIDAuNTk1ODNdLFxuICAgIFwiOTgyXCI6IFswLCAwLjQzMDU2LCAwLjAyNzc4LCAwLCAwLjgyODEzXSxcbiAgICBcIjEwMDlcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNTE3MDJdLFxuICAgIFwiMTAxM1wiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40MDU5XVxuICB9LFxuICBcIk1hdGgtUmVndWxhclwiOiB7XG4gICAgXCI2NVwiOiBbMCwgMC42ODMzMywgMCwgMC4xMzg4OSwgMC43NV0sXG4gICAgXCI2NlwiOiBbMCwgMC42ODMzMywgMC4wNTAxNywgMC4wODMzNCwgMC43NTg1MV0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODMzMywgMC4wNzE1MywgMC4wODMzNCwgMC43MTQ3Ml0sXG4gICAgXCI2OFwiOiBbMCwgMC42ODMzMywgMC4wMjc3OCwgMC4wNTU1NiwgMC44Mjc5Ml0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODMzMywgMC4wNTc2NCwgMC4wODMzNCwgMC43MzgyXSxcbiAgICBcIjcwXCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLjA4MzM0LCAwLjY0MzA2XSxcbiAgICBcIjcxXCI6IFswLCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjc4NjI1XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4MzMzLCAwLjA4MTI1LCAwLjA1NTU2LCAwLjgzMTI1XSxcbiAgICBcIjczXCI6IFswLCAwLjY4MzMzLCAwLjA3ODQ3LCAwLjExMTExLCAwLjQzOTU4XSxcbiAgICBcIjc0XCI6IFswLCAwLjY4MzMzLCAwLjA5NjE4LCAwLjE2NjY3LCAwLjU1NDUxXSxcbiAgICBcIjc1XCI6IFswLCAwLjY4MzMzLCAwLjA3MTUzLCAwLjA1NTU2LCAwLjg0OTMxXSxcbiAgICBcIjc2XCI6IFswLCAwLjY4MzMzLCAwLCAwLjAyNzc4LCAwLjY4MDU2XSxcbiAgICBcIjc3XCI6IFswLCAwLjY4MzMzLCAwLjEwOTAzLCAwLjA4MzM0LCAwLjk3MDE0XSxcbiAgICBcIjc4XCI6IFswLCAwLjY4MzMzLCAwLjEwOTAzLCAwLjA4MzM0LCAwLjgwMzQ3XSxcbiAgICBcIjc5XCI6IFswLCAwLjY4MzMzLCAwLjAyNzc4LCAwLjA4MzM0LCAwLjc2Mjc4XSxcbiAgICBcIjgwXCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLjA4MzM0LCAwLjY0MjAxXSxcbiAgICBcIjgxXCI6IFswLjE5NDQ0LCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjc5MDU2XSxcbiAgICBcIjgyXCI6IFswLCAwLjY4MzMzLCAwLjAwNzczLCAwLjA4MzM0LCAwLjc1OTI5XSxcbiAgICBcIjgzXCI6IFswLCAwLjY4MzMzLCAwLjA1NzY0LCAwLjA4MzM0LCAwLjYxMzJdLFxuICAgIFwiODRcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAuMDgzMzQsIDAuNTg0MzhdLFxuICAgIFwiODVcIjogWzAsIDAuNjgzMzMsIDAuMTA5MDMsIDAuMDI3NzgsIDAuNjgyNzhdLFxuICAgIFwiODZcIjogWzAsIDAuNjgzMzMsIDAuMjIyMjIsIDAsIDAuNTgzMzNdLFxuICAgIFwiODdcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAsIDAuOTQ0NDVdLFxuICAgIFwiODhcIjogWzAsIDAuNjgzMzMsIDAuMDc4NDcsIDAuMDgzMzQsIDAuODI4NDddLFxuICAgIFwiODlcIjogWzAsIDAuNjgzMzMsIDAuMjIyMjIsIDAsIDAuNTgwNTZdLFxuICAgIFwiOTBcIjogWzAsIDAuNjgzMzMsIDAuMDcxNTMsIDAuMDgzMzQsIDAuNjgyNjRdLFxuICAgIFwiOTdcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI4NTldLFxuICAgIFwiOThcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNDI5MTddLFxuICAgIFwiOTlcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDMyNzZdLFxuICAgIFwiMTAwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLjE2NjY3LCAwLjUyMDQ5XSxcbiAgICBcIjEwMVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40NjU2M10sXG4gICAgXCIxMDJcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMTA3NjQsIDAuMTY2NjcsIDAuNDg5NTldLFxuICAgIFwiMTAzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjAzNTg4LCAwLjAyNzc4LCAwLjQ3Njk3XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzYxNl0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjU5NTIsIDAsIDAsIDAuMzQ0NTFdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY1OTUyLCAwLjA1NzI0LCAwLCAwLjQxMTgxXSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMC4wMzE0OCwgMCwgMC41MjA2XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMC4wMTk2OCwgMC4wODMzNCwgMC4yOTgzOF0sXG4gICAgXCIxMDlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuODc4MDFdLFxuICAgIFwiMTEwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjYwMDIzXSxcbiAgICBcIjExMVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40ODQ3Ml0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNTAzMTNdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjAzNTg4LCAwLjA4MzM0LCAwLjQ0NjQxXSxcbiAgICBcIjExNFwiOiBbMCwgMC40MzA1NiwgMC4wMjc3OCwgMC4wNTU1NiwgMC40NTExNl0sXG4gICAgXCIxMTVcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDY4NzVdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYxNTA4LCAwLCAwLjA4MzM0LCAwLjM2MTExXSxcbiAgICBcIjExN1wiOiBbMCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC41NzI0Nl0sXG4gICAgXCIxMThcIjogWzAsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDI3NzgsIDAuNDg0NzJdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQzMDU2LCAwLjAyNjkxLCAwLjA4MzM0LCAwLjcxNTkyXSxcbiAgICBcIjEyMFwiOiBbMCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC41NzE1M10sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDU1NTYsIDAuNDkwMjhdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQzMDU2LCAwLjA0Mzk4LCAwLjA1NTU2LCAwLjQ2NTA1XSxcbiAgICBcIjkxNVwiOiBbMCwgMC42ODMzMywgMC4xMzg4OSwgMC4wODMzNCwgMC42MTUyOF0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjgzMzMsIDAsIDAuMTY2NjcsIDAuODMzMzRdLFxuICAgIFwiOTIwXCI6IFswLCAwLjY4MzMzLCAwLjAyNzc4LCAwLjA4MzM0LCAwLjc2Mjc4XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42ODMzMywgMCwgMC4xNjY2NywgMC42OTQ0NV0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjgzMzMsIDAuMDc1NjksIDAuMDgzMzQsIDAuNzQyMzZdLFxuICAgIFwiOTI4XCI6IFswLCAwLjY4MzMzLCAwLjA4MTI1LCAwLjA1NTU2LCAwLjgzMTI1XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODMzMywgMC4wNTc2NCwgMC4wODMzNCwgMC43Nzk4Nl0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAuMDU1NTYsIDAuNTgzMzNdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjY2NjY3XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODMzMywgMC4xMSwgMC4wNTU1NiwgMC42MTIyMl0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjgzMzMsIDAuMDUwMTcsIDAuMDgzMzQsIDAuNzcyNF0sXG4gICAgXCI5NDVcIjogWzAsIDAuNDMwNTYsIDAuMDAzNywgMC4wMjc3OCwgMC42Mzk3XSxcbiAgICBcIjk0NlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wNTI3OCwgMC4wODMzNCwgMC41NjU2M10sXG4gICAgXCI5NDdcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDU1NTYsIDAsIDAuNTE3NzNdLFxuICAgIFwiOTQ4XCI6IFswLCAwLjY5NDQ0LCAwLjAzNzg1LCAwLjA1NTU2LCAwLjQ0NDQ0XSxcbiAgICBcIjk0OVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wODMzNCwgMC40NjYzMl0sXG4gICAgXCI5NTBcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDczNzgsIDAuMDgzMzQsIDAuNDM3NV0sXG4gICAgXCI5NTFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDU1NTYsIDAuNDk2NTNdLFxuICAgIFwiOTUyXCI6IFswLCAwLjY5NDQ0LCAwLjAyNzc4LCAwLjA4MzM0LCAwLjQ2OTQ0XSxcbiAgICBcIjk1M1wiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC4zNTM5NF0sXG4gICAgXCI5NTRcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTc2MTZdLFxuICAgIFwiOTU1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjk1NlwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC42MDI1NV0sXG4gICAgXCI5NTdcIjogWzAsIDAuNDMwNTYsIDAuMDYzNjYsIDAuMDI3NzgsIDAuNDkzOThdLFxuICAgIFwiOTU4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA0NjAxLCAwLjExMTExLCAwLjQzNzVdLFxuICAgIFwiOTU5XCI6IFswLCAwLjQzMDU2LCAwLCAwLjA1NTU2LCAwLjQ4NDcyXSxcbiAgICBcIjk2MFwiOiBbMCwgMC40MzA1NiwgMC4wMzU4OCwgMCwgMC41NzAwM10sXG4gICAgXCI5NjFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNTE3MDJdLFxuICAgIFwiOTYyXCI6IFswLjA5NzIyLCAwLjQzMDU2LCAwLjA3OTg2LCAwLjA4MzM0LCAwLjM2Mjg1XSxcbiAgICBcIjk2M1wiOiBbMCwgMC40MzA1NiwgMC4wMzU4OCwgMCwgMC41NzE0MV0sXG4gICAgXCI5NjRcIjogWzAsIDAuNDMwNTYsIDAuMTEzMiwgMC4wMjc3OCwgMC40MzcxNV0sXG4gICAgXCI5NjVcIjogWzAsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDI3NzgsIDAuNTQwMjhdLFxuICAgIFwiOTY2XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLjA4MzM0LCAwLjY1NDE3XSxcbiAgICBcIjk2N1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC42MjU2OV0sXG4gICAgXCI5NjhcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDM1ODgsIDAuMTExMTEsIDAuNjUxMzldLFxuICAgIFwiOTY5XCI6IFswLCAwLjQzMDU2LCAwLjAzNTg4LCAwLCAwLjYyMjQ1XSxcbiAgICBcIjk3N1wiOiBbMCwgMC42OTQ0NCwgMCwgMC4wODMzNCwgMC41OTE0NF0sXG4gICAgXCI5ODFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAuMDgzMzQsIDAuNTk1ODNdLFxuICAgIFwiOTgyXCI6IFswLCAwLjQzMDU2LCAwLjAyNzc4LCAwLCAwLjgyODEzXSxcbiAgICBcIjEwMDlcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNTE3MDJdLFxuICAgIFwiMTAxM1wiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40MDU5XVxuICB9LFxuICBcIlNhbnNTZXJpZi1Cb2xkXCI6IHtcbiAgICBcIjMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjM2NjY3XSxcbiAgICBcIjM0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1ODM0XSxcbiAgICBcIjM1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjkxNjY3XSxcbiAgICBcIjM2XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAwLjU1XSxcbiAgICBcIjM3XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAxLjAyOTEyXSxcbiAgICBcIjM4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjgzMDU2XSxcbiAgICBcIjM5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjQwXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQyNzc4XSxcbiAgICBcIjQxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQyNzc4XSxcbiAgICBcIjQyXCI6IFswLCAwLjc1LCAwLCAwLCAwLjU1XSxcbiAgICBcIjQzXCI6IFswLjExNjY3LCAwLjYxNjY3LCAwLCAwLCAwLjg1NTU2XSxcbiAgICBcIjQ0XCI6IFswLjEwNTU2LCAwLjEzMDU2LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjQ1XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjM2NjY3XSxcbiAgICBcIjQ2XCI6IFswLCAwLjEzMDU2LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjQ3XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjU1XSxcbiAgICBcIjQ4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjQ5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjUwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjUxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjUyXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjUzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjU0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjU1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjU2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjU3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjU4XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjU5XCI6IFswLjEwNTU2LCAwLjQ1ODMzLCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjYxXCI6IFstMC4wOTM3NSwgMC40MDYyNSwgMCwgMCwgMC44NTU1Nl0sXG4gICAgXCI2M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MTk0NV0sXG4gICAgXCI2NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI2NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI2NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI2N1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MDI3OF0sXG4gICAgXCI2OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI2OVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NDE2N10sXG4gICAgXCI3MFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI3MVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI3MlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI3M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zMzA1Nl0sXG4gICAgXCI3NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MTk0NV0sXG4gICAgXCI3NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43NjM4OV0sXG4gICAgXCI3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41ODA1Nl0sXG4gICAgXCI3N1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC45Nzc3OF0sXG4gICAgXCI3OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI3OVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI4MFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MDI3OF0sXG4gICAgXCI4MVwiOiBbMC4xMDU1NiwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI4MlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MDI3OF0sXG4gICAgXCI4M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI4NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43NjM4OV0sXG4gICAgXCI4NlwiOiBbMCwgMC42OTQ0NCwgMC4wMTUyOCwgMCwgMC43MzMzNF0sXG4gICAgXCI4N1wiOiBbMCwgMC42OTQ0NCwgMC4wMTUyOCwgMCwgMS4wMzg4OV0sXG4gICAgXCI4OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI4OVwiOiBbMCwgMC42OTQ0NCwgMC4wMjc1LCAwLCAwLjczMzM0XSxcbiAgICBcIjkwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY3MjIzXSxcbiAgICBcIjkxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjM0MzA2XSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjM0MzA2XSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjk1XCI6IFswLjM1LCAwLjEwODMzLCAwLjAzMDU2LCAwLCAwLjU1XSxcbiAgICBcIjk3XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NjExMV0sXG4gICAgXCI5OVwiOiBbMCwgMC40NTgzMywgMCwgMCwgMC40ODg4OV0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTYxMTFdLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjEwMlwiOiBbMCwgMC42OTQ0NCwgMC4wNzYzOSwgMCwgMC4zMzYxMV0sXG4gICAgXCIxMDNcIjogWzAuMTk0NDQsIDAuNDU4MzMsIDAuMDE1MjgsIDAsIDAuNTVdLFxuICAgIFwiMTA0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU2MTExXSxcbiAgICBcIjEwNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNTU1Nl0sXG4gICAgXCIxMDZcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuMjg2MTFdLFxuICAgIFwiMTA3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjUzMDU2XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNTU1Nl0sXG4gICAgXCIxMDlcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuODY2NjddLFxuICAgIFwiMTEwXCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjU2MTExXSxcbiAgICBcIjExMVwiOiBbMCwgMC40NTgzMywgMCwgMCwgMC41NV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDU4MzMsIDAsIDAsIDAuNTYxMTFdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ1ODMzLCAwLCAwLCAwLjU2MTExXSxcbiAgICBcIjExNFwiOiBbMCwgMC40NTgzMywgMC4wMTUyOCwgMCwgMC4zNzIyMl0sXG4gICAgXCIxMTVcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuNDIxNjddLFxuICAgIFwiMTE2XCI6IFswLCAwLjU4OTI5LCAwLCAwLCAwLjQwNDE3XSxcbiAgICBcIjExN1wiOiBbMCwgMC40NTgzMywgMCwgMCwgMC41NjExMV0sXG4gICAgXCIxMThcIjogWzAsIDAuNDU4MzMsIDAuMDE1MjgsIDAsIDAuNV0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDU4MzMsIDAuMDE1MjgsIDAsIDAuNzQ0NDVdLFxuICAgIFwiMTIwXCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjVdLFxuICAgIFwiMTIxXCI6IFswLjE5NDQ0LCAwLjQ1ODMzLCAwLjAxNTI4LCAwLCAwLjVdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjQ3NjM5XSxcbiAgICBcIjEyNlwiOiBbMC4zNSwgMC4zNDQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCIxNjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiMTc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczMzM0XSxcbiAgICBcIjE4MFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCIxODRcIjogWzAuMTcwMTQsIDAsIDAsIDAsIDAuNDg4ODldLFxuICAgIFwiMzA1XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjI1NTU2XSxcbiAgICBcIjU2N1wiOiBbMC4xOTQ0NCwgMC40NTgzMywgMCwgMCwgMC4yODYxMV0sXG4gICAgXCI3MTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNzExXCI6IFswLCAwLjYzNTQyLCAwLCAwLCAwLjU1XSxcbiAgICBcIjcxM1wiOiBbMCwgMC42Mzc3OCwgMCwgMCwgMC41NV0sXG4gICAgXCI3MjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNzI5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjczMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI3MzJcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNzMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjkxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41ODA1Nl0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuOTE2NjddLFxuICAgIFwiOTIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg1NTU2XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NzIyM10sXG4gICAgXCI5MjZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzMzMzRdLFxuICAgIFwiOTI4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODU1NTZdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44NTU1Nl0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzk0NDVdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40NTgzMywgMC4wMzA1NiwgMCwgMC41NV0sXG4gICAgXCI4MjEyXCI6IFswLCAwLjQ1ODMzLCAwLjAzMDU2LCAwLCAxLjEwMDAxXSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zMDU1Nl0sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1ODM0XSxcbiAgICBcIjgyMjFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTU4MzRdXG4gIH0sXG4gIFwiU2Fuc1NlcmlmLUl0YWxpY1wiOiB7XG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMC4wNTczMywgMCwgMC4zMTk0NV0sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMC4wMDMxNiwgMCwgMC41XSxcbiAgICBcIjM1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA1MDg3LCAwLCAwLjgzMzM0XSxcbiAgICBcIjM2XCI6IFswLjA1NTU2LCAwLjc1LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAuMDMxMjYsIDAsIDAuODMzMzRdLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAuMDMwNTgsIDAsIDAuNzU4MzRdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAuMDc4MTYsIDAsIDAuMjc3NzhdLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAuMTMxNjQsIDAsIDAuMzg4ODldLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAuMDI1MzYsIDAsIDAuMzg4ODldLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAuMTE3NzUsIDAsIDAuNV0sXG4gICAgXCI0M1wiOiBbMC4wODMzMywgMC41ODMzMywgMC4wMjUzNiwgMCwgMC43Nzc3OF0sXG4gICAgXCI0NFwiOiBbMC4xMjUsIDAuMDgzMzMsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNDVcIjogWzAsIDAuNDQ0NDQsIDAuMDE5NDYsIDAsIDAuMzMzMzNdLFxuICAgIFwiNDZcIjogWzAsIDAuMDgzMzMsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNDdcIjogWzAuMjUsIDAuNzUsIDAuMTMxNjQsIDAsIDAuNV0sXG4gICAgXCI0OFwiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjQ5XCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNTBcIjogWzAsIDAuNjU1NTYsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCI1MVwiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjUyXCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNTNcIjogWzAsIDAuNjU1NTYsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCI1NFwiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjU1XCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNTZcIjogWzAsIDAuNjU1NTYsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCI1N1wiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjU4XCI6IFswLCAwLjQ0NDQ0LCAwLjAyNTAyLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjU5XCI6IFswLjEyNSwgMC40NDQ0NCwgMC4wMjUwMiwgMCwgMC4yNzc3OF0sXG4gICAgXCI2MVwiOiBbLTAuMTMsIDAuMzcsIDAuMDUwODcsIDAsIDAuNzc3NzhdLFxuICAgIFwiNjNcIjogWzAsIDAuNjk0NDQsIDAuMTE4MDksIDAsIDAuNDcyMjJdLFxuICAgIFwiNjRcIjogWzAsIDAuNjk0NDQsIDAuMDc1NTUsIDAsIDAuNjY2NjddLFxuICAgIFwiNjVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiNjZcIjogWzAsIDAuNjk0NDQsIDAuMDgyOTMsIDAsIDAuNjY2NjddLFxuICAgIFwiNjdcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNjM4ODldLFxuICAgIFwiNjhcIjogWzAsIDAuNjk0NDQsIDAuMDc1NTUsIDAsIDAuNzIyMjNdLFxuICAgIFwiNjlcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNTk3MjJdLFxuICAgIFwiNzBcIjogWzAsIDAuNjk0NDQsIDAuMTMzNzIsIDAsIDAuNTY5NDVdLFxuICAgIFwiNzFcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNjY2NjddLFxuICAgIFwiNzJcIjogWzAsIDAuNjk0NDQsIDAuMDgwOTQsIDAsIDAuNzA4MzRdLFxuICAgIFwiNzNcIjogWzAsIDAuNjk0NDQsIDAuMTMzNzIsIDAsIDAuMjc3NzhdLFxuICAgIFwiNzRcIjogWzAsIDAuNjk0NDQsIDAuMDgwOTQsIDAsIDAuNDcyMjJdLFxuICAgIFwiNzVcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNjk0NDVdLFxuICAgIFwiNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTQxNjddLFxuICAgIFwiNzdcIjogWzAsIDAuNjk0NDQsIDAuMDgwOTQsIDAsIDAuODc1XSxcbiAgICBcIjc4XCI6IFswLCAwLjY5NDQ0LCAwLjA4MDk0LCAwLCAwLjcwODM0XSxcbiAgICBcIjc5XCI6IFswLCAwLjY5NDQ0LCAwLjA3NTU1LCAwLCAwLjczNjExXSxcbiAgICBcIjgwXCI6IFswLCAwLjY5NDQ0LCAwLjA4MjkzLCAwLCAwLjYzODg5XSxcbiAgICBcIjgxXCI6IFswLjEyNSwgMC42OTQ0NCwgMC4wNzU1NSwgMCwgMC43MzYxMV0sXG4gICAgXCI4MlwiOiBbMCwgMC42OTQ0NCwgMC4wODI5MywgMCwgMC42NDU4NF0sXG4gICAgXCI4M1wiOiBbMCwgMC42OTQ0NCwgMC4wOTIwNSwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NFwiOiBbMCwgMC42OTQ0NCwgMC4xMzM3MiwgMCwgMC42ODA1Nl0sXG4gICAgXCI4NVwiOiBbMCwgMC42OTQ0NCwgMC4wODA5NCwgMCwgMC42ODc1XSxcbiAgICBcIjg2XCI6IFswLCAwLjY5NDQ0LCAwLjE2MTUsIDAsIDAuNjY2NjddLFxuICAgIFwiODdcIjogWzAsIDAuNjk0NDQsIDAuMTYxNSwgMCwgMC45NDQ0NV0sXG4gICAgXCI4OFwiOiBbMCwgMC42OTQ0NCwgMC4xMzM3MiwgMCwgMC42NjY2N10sXG4gICAgXCI4OVwiOiBbMCwgMC42OTQ0NCwgMC4xNzI2MSwgMCwgMC42NjY2N10sXG4gICAgXCI5MFwiOiBbMCwgMC42OTQ0NCwgMC4xMTk4MywgMCwgMC42MTExMV0sXG4gICAgXCI5MVwiOiBbMC4yNSwgMC43NSwgMC4xNTk0MiwgMCwgMC4yODg4OV0sXG4gICAgXCI5M1wiOiBbMC4yNSwgMC43NSwgMC4wODcxOSwgMCwgMC4yODg4OV0sXG4gICAgXCI5NFwiOiBbMCwgMC42OTQ0NCwgMC4wNzk5LCAwLCAwLjVdLFxuICAgIFwiOTVcIjogWzAuMzUsIDAuMDk0NDQsIDAuMDg2MTYsIDAsIDAuNV0sXG4gICAgXCI5N1wiOiBbMCwgMC40NDQ0NCwgMC4wMDk4MSwgMCwgMC40ODA1Nl0sXG4gICAgXCI5OFwiOiBbMCwgMC42OTQ0NCwgMC4wMzA1NywgMCwgMC41MTY2N10sXG4gICAgXCI5OVwiOiBbMCwgMC40NDQ0NCwgMC4wODMzNiwgMCwgMC40NDQ0NV0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjk0NDQsIDAuMDk0ODMsIDAsIDAuNTE2NjddLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ0NDQ0LCAwLjA2Nzc4LCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEwMlwiOiBbMCwgMC42OTQ0NCwgMC4yMTcwNSwgMCwgMC4zMDU1Nl0sXG4gICAgXCIxMDNcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMTA4MzYsIDAsIDAuNV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAuMDE3NzgsIDAsIDAuNTE2NjddLFxuICAgIFwiMTA1XCI6IFswLCAwLjY3OTM3LCAwLjA5NzE4LCAwLCAwLjIzODg5XSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42NzkzNywgMC4wOTE2MiwgMCwgMC4yNjY2N10sXG4gICAgXCIxMDdcIjogWzAsIDAuNjk0NDQsIDAuMDgzMzYsIDAsIDAuNDg4ODldLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLjA5NDgzLCAwLCAwLjIzODg5XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NDQ0NCwgMC4wMTc3OCwgMCwgMC43OTQ0NV0sXG4gICAgXCIxMTBcIjogWzAsIDAuNDQ0NDQsIDAuMDE3NzgsIDAsIDAuNTE2NjddLFxuICAgIFwiMTExXCI6IFswLCAwLjQ0NDQ0LCAwLjA2NjEzLCAwLCAwLjVdLFxuICAgIFwiMTEyXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAzODksIDAsIDAuNTE2NjddLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjA0MTY5LCAwLCAwLjUxNjY3XSxcbiAgICBcIjExNFwiOiBbMCwgMC40NDQ0NCwgMC4xMDgzNiwgMCwgMC4zNDE2N10sXG4gICAgXCIxMTVcIjogWzAsIDAuNDQ0NDQsIDAuMDc3OCwgMCwgMC4zODMzM10sXG4gICAgXCIxMTZcIjogWzAsIDAuNTcxNDMsIDAuMDcyMjUsIDAsIDAuMzYxMTFdLFxuICAgIFwiMTE3XCI6IFswLCAwLjQ0NDQ0LCAwLjA0MTY5LCAwLCAwLjUxNjY3XSxcbiAgICBcIjExOFwiOiBbMCwgMC40NDQ0NCwgMC4xMDgzNiwgMCwgMC40NjExMV0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDQ0NDQsIDAuMTA4MzYsIDAsIDAuNjgzMzRdLFxuICAgIFwiMTIwXCI6IFswLCAwLjQ0NDQ0LCAwLjA5MTY5LCAwLCAwLjQ2MTExXSxcbiAgICBcIjEyMVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4xMDgzNiwgMCwgMC40NjExMV0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDQ0NDQsIDAuMDg3NTIsIDAsIDAuNDM0NzJdLFxuICAgIFwiMTI2XCI6IFswLjM1LCAwLjMyNjU5LCAwLjA4ODI2LCAwLCAwLjVdLFxuICAgIFwiMTY4XCI6IFswLCAwLjY3OTM3LCAwLjA2Mzg1LCAwLCAwLjVdLFxuICAgIFwiMTc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczNzUyXSxcbiAgICBcIjE4NFwiOiBbMC4xNzAxNCwgMCwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCIzMDVcIjogWzAsIDAuNDQ0NDQsIDAuMDQxNjksIDAsIDAuMjM4ODldLFxuICAgIFwiNTY3XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjA0MTY5LCAwLCAwLjI2NjY3XSxcbiAgICBcIjcxMFwiOiBbMCwgMC42OTQ0NCwgMC4wNzk5LCAwLCAwLjVdLFxuICAgIFwiNzExXCI6IFswLCAwLjYzMTk0LCAwLjA4NDMyLCAwLCAwLjVdLFxuICAgIFwiNzEzXCI6IFswLCAwLjYwODg5LCAwLjA4Nzc2LCAwLCAwLjVdLFxuICAgIFwiNzE0XCI6IFswLCAwLjY5NDQ0LCAwLjA5MjA1LCAwLCAwLjVdLFxuICAgIFwiNzE1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLjA5NDgzLCAwLCAwLjVdLFxuICAgIFwiNzI5XCI6IFswLCAwLjY3OTM3LCAwLjA3Nzc0LCAwLCAwLjI3Nzc4XSxcbiAgICBcIjczMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43Mzc1Ml0sXG4gICAgXCI3MzJcIjogWzAsIDAuNjc2NTksIDAuMDg4MjYsIDAsIDAuNV0sXG4gICAgXCI3MzNcIjogWzAsIDAuNjk0NDQsIDAuMDkyMDUsIDAsIDAuNV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjk0NDQsIDAuMTMzNzIsIDAsIDAuNTQxNjddLFxuICAgIFwiOTE2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjkyMFwiOiBbMCwgMC42OTQ0NCwgMC4wNzU1NSwgMCwgMC43Nzc3OF0sXG4gICAgXCI5MjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiOTI2XCI6IFswLCAwLjY5NDQ0LCAwLjEyODE2LCAwLCAwLjY2NjY3XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42OTQ0NCwgMC4wODA5NCwgMCwgMC43MDgzNF0sXG4gICAgXCI5MzFcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNzIyMjJdLFxuICAgIFwiOTMzXCI6IFswLCAwLjY5NDQ0LCAwLjA5MDMxLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjkzNFwiOiBbMCwgMC42OTQ0NCwgMC4wNDYwMywgMCwgMC43MjIyMl0sXG4gICAgXCI5MzZcIjogWzAsIDAuNjk0NDQsIDAuMDkwMzEsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTM3XCI6IFswLCAwLjY5NDQ0LCAwLjA4MjkzLCAwLCAwLjcyMjIyXSxcbiAgICBcIjgyMTFcIjogWzAsIDAuNDQ0NDQsIDAuMDg2MTYsIDAsIDAuNV0sXG4gICAgXCI4MjEyXCI6IFswLCAwLjQ0NDQ0LCAwLjA4NjE2LCAwLCAxLjBdLFxuICAgIFwiODIxNlwiOiBbMCwgMC42OTQ0NCwgMC4wNzgxNiwgMCwgMC4yNzc3OF0sXG4gICAgXCI4MjE3XCI6IFswLCAwLjY5NDQ0LCAwLjA3ODE2LCAwLCAwLjI3Nzc4XSxcbiAgICBcIjgyMjBcIjogWzAsIDAuNjk0NDQsIDAuMTQyMDUsIDAsIDAuNV0sXG4gICAgXCI4MjIxXCI6IFswLCAwLjY5NDQ0LCAwLjAwMzE2LCAwLCAwLjVdXG4gIH0sXG4gIFwiU2Fuc1NlcmlmLVJlZ3VsYXJcIjoge1xuICAgIFwiMzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzE5NDVdLFxuICAgIFwiMzRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCIzNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCIzNlwiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjM3XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjM4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc1ODM0XSxcbiAgICBcIjM5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjQwXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjQxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjQyXCI6IFswLCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiNDNcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNDRcIjogWzAuMTI1LCAwLjA4MzMzLCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjQ1XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjMzMzMzXSxcbiAgICBcIjQ2XCI6IFswLCAwLjA4MzMzLCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjQ3XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiNDhcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI0OVwiOiBbMCwgMC42NTU1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUwXCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTFcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1MlwiOiBbMCwgMC42NTU1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUzXCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTRcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1NVwiOiBbMCwgMC42NTU1NiwgMCwgMCwgMC41XSxcbiAgICBcIjU2XCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTdcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1OFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI1OVwiOiBbMC4xMjUsIDAuNDQ0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNjFcIjogWy0wLjEzLCAwLjM3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjYzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjY0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjY1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjY2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjY3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjY4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcyMjIzXSxcbiAgICBcIjY5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU5NzIyXSxcbiAgICBcIjcwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU2OTQ1XSxcbiAgICBcIjcxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjcyXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwODM0XSxcbiAgICBcIjczXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjc0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjc1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY5NDQ1XSxcbiAgICBcIjc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU0MTY3XSxcbiAgICBcIjc3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg3NV0sXG4gICAgXCI3OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MDgzNF0sXG4gICAgXCI3OVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzYxMV0sXG4gICAgXCI4MFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI4MVwiOiBbMC4xMjUsIDAuNjk0NDQsIDAsIDAsIDAuNzM2MTFdLFxuICAgIFwiODJcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjQ1ODRdLFxuICAgIFwiODNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjgwNTZdLFxuICAgIFwiODVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjg3NV0sXG4gICAgXCI4NlwiOiBbMCwgMC42OTQ0NCwgMC4wMTM4OSwgMCwgMC42NjY2N10sXG4gICAgXCI4N1wiOiBbMCwgMC42OTQ0NCwgMC4wMTM4OSwgMCwgMC45NDQ0NV0sXG4gICAgXCI4OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4OVwiOiBbMCwgMC42OTQ0NCwgMC4wMjUsIDAsIDAuNjY2NjddLFxuICAgIFwiOTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiOTFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMjg4ODldLFxuICAgIFwiOTNcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMjg4ODldLFxuICAgIFwiOTRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI5NVwiOiBbMC4zNSwgMC4wOTQ0NCwgMC4wMjc3OCwgMCwgMC41XSxcbiAgICBcIjk3XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQ4MDU2XSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjUxNjY3XSxcbiAgICBcIjk5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCIxMDFcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMTAyXCI6IFswLCAwLjY5NDQ0LCAwLjA2OTQ0LCAwLCAwLjMwNTU2XSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wMTM4OSwgMCwgMC41XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCIxMDVcIjogWzAsIDAuNjc5MzcsIDAsIDAsIDAuMjM4ODldLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY3OTM3LCAwLCAwLCAwLjI2NjY3XSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC40ODg4OV0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjM4ODldLFxuICAgIFwiMTA5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjExMFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCIxMTFcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNTE2NjddLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjUxNjY3XSxcbiAgICBcIjExNFwiOiBbMCwgMC40NDQ0NCwgMC4wMTM4OSwgMCwgMC4zNDE2N10sXG4gICAgXCIxMTVcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuMzgzMzNdLFxuICAgIFwiMTE2XCI6IFswLCAwLjU3MTQzLCAwLCAwLCAwLjM2MTExXSxcbiAgICBcIjExN1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCIxMThcIjogWzAsIDAuNDQ0NDQsIDAuMDEzODksIDAsIDAuNDYxMTFdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQ0NDQ0LCAwLjAxMzg5LCAwLCAwLjY4MzM0XSxcbiAgICBcIjEyMFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40NjExMV0sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDEzODksIDAsIDAuNDYxMTFdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQzNDcyXSxcbiAgICBcIjEyNlwiOiBbMC4zNSwgMC4zMjY1OSwgMCwgMCwgMC41XSxcbiAgICBcIjE2OFwiOiBbMCwgMC42NzkzNywgMCwgMCwgMC41XSxcbiAgICBcIjE3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCIxODRcIjogWzAuMTcwMTQsIDAsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMzA1XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjIzODg5XSxcbiAgICBcIjU2N1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC4yNjY2N10sXG4gICAgXCI3MTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI3MTFcIjogWzAsIDAuNjMxOTQsIDAsIDAsIDAuNV0sXG4gICAgXCI3MTNcIjogWzAsIDAuNjA4ODksIDAsIDAsIDAuNV0sXG4gICAgXCI3MTRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI3MTVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI3MjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI3MjlcIjogWzAsIDAuNjc5MzcsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNzMwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjczMlwiOiBbMCwgMC42NzY1OSwgMCwgMCwgMC41XSxcbiAgICBcIjczM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjkxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NDE2N10sXG4gICAgXCI5MTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiOTIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTI4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwODM0XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjkzNlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40NDQ0NCwgMC4wMjc3OCwgMCwgMC41XSxcbiAgICBcIjgyMTJcIjogWzAsIDAuNDQ0NDQsIDAuMDI3NzgsIDAsIDEuMF0sXG4gICAgXCI4MjE2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjgyMTdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODIyMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjgyMjFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV1cbiAgfSxcbiAgXCJTY3JpcHQtUmVndWxhclwiOiB7XG4gICAgXCI2NVwiOiBbMCwgMC43LCAwLjIyOTI1LCAwLCAwLjgwMjUzXSxcbiAgICBcIjY2XCI6IFswLCAwLjcsIDAuMDQwODcsIDAsIDAuOTA3NTddLFxuICAgIFwiNjdcIjogWzAsIDAuNywgMC4xNjg5LCAwLCAwLjY2NjE5XSxcbiAgICBcIjY4XCI6IFswLCAwLjcsIDAuMDkzNzEsIDAsIDAuNzc0NDNdLFxuICAgIFwiNjlcIjogWzAsIDAuNywgMC4xODU4MywgMCwgMC41NjE2Ml0sXG4gICAgXCI3MFwiOiBbMCwgMC43LCAwLjEzNjM0LCAwLCAwLjg5NTQ0XSxcbiAgICBcIjcxXCI6IFswLCAwLjcsIDAuMTczMjIsIDAsIDAuNjA5NjFdLFxuICAgIFwiNzJcIjogWzAsIDAuNywgMC4yOTY5NCwgMCwgMC45NjkxOV0sXG4gICAgXCI3M1wiOiBbMCwgMC43LCAwLjE5MTg5LCAwLCAwLjgwOTA3XSxcbiAgICBcIjc0XCI6IFswLjI3Nzc4LCAwLjcsIDAuMTkxODksIDAsIDEuMDUxNTldLFxuICAgIFwiNzVcIjogWzAsIDAuNywgMC4zMTI1OSwgMCwgMC45MTM2NF0sXG4gICAgXCI3NlwiOiBbMCwgMC43LCAwLjE5MTg5LCAwLCAwLjg3MzczXSxcbiAgICBcIjc3XCI6IFswLCAwLjcsIDAuMTU5ODEsIDAsIDEuMDgwMzFdLFxuICAgIFwiNzhcIjogWzAsIDAuNywgMC4zNTI1LCAwLCAwLjkwMTVdLFxuICAgIFwiNzlcIjogWzAsIDAuNywgMC4wODA3OCwgMCwgMC43Mzc4N10sXG4gICAgXCI4MFwiOiBbMCwgMC43LCAwLjA4MDc4LCAwLCAxLjAxMjYyXSxcbiAgICBcIjgxXCI6IFswLCAwLjcsIDAuMDMzMDUsIDAsIDAuODgyODJdLFxuICAgIFwiODJcIjogWzAsIDAuNywgMC4wNjI1OSwgMCwgMC44NV0sXG4gICAgXCI4M1wiOiBbMCwgMC43LCAwLjE5MTg5LCAwLCAwLjg2NzY3XSxcbiAgICBcIjg0XCI6IFswLCAwLjcsIDAuMjkwODcsIDAsIDAuNzQ2OTddLFxuICAgIFwiODVcIjogWzAsIDAuNywgMC4yNTgxNSwgMCwgMC43OTk5Nl0sXG4gICAgXCI4NlwiOiBbMCwgMC43LCAwLjI3NTIzLCAwLCAwLjYyMjA0XSxcbiAgICBcIjg3XCI6IFswLCAwLjcsIDAuMjc1MjMsIDAsIDAuODA1MzJdLFxuICAgIFwiODhcIjogWzAsIDAuNywgMC4yNjAwNiwgMCwgMC45NDQ0NV0sXG4gICAgXCI4OVwiOiBbMCwgMC43LCAwLjI5MzksIDAsIDAuNzA5NjFdLFxuICAgIFwiOTBcIjogWzAsIDAuNywgMC4yNDAzNywgMCwgMC44MjEyXVxuICB9LFxuICBcIlNpemUxLVJlZ3VsYXJcIjoge1xuICAgIFwiNDBcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDU4MzRdLFxuICAgIFwiNDFcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDU4MzRdLFxuICAgIFwiNDdcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNTc3NzhdLFxuICAgIFwiOTFcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDE2NjddLFxuICAgIFwiOTJcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNTc3NzhdLFxuICAgIFwiOTNcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDE2NjddLFxuICAgIFwiMTIzXCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjEyNVwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC41ODMzNF0sXG4gICAgXCI3MTBcIjogWzAsIDAuNzIyMjIsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiNzMyXCI6IFswLCAwLjcyMjIyLCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjc3MFwiOiBbMCwgMC43MjIyMiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI3NzFcIjogWzAsIDAuNzIyMjIsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODIxNFwiOiBbLTAuMDAwOTksIDAuNjAxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg1OTNcIjogWzFlLTA1LCAwLjYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODU5NVwiOiBbMWUtMDUsIDAuNiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NjU3XCI6IFsxZS0wNSwgMC42LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg2NTlcIjogWzFlLTA1LCAwLjYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODcxOVwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMC45NDQ0NV0sXG4gICAgXCI4NzIwXCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjk0NDQ1XSxcbiAgICBcIjg3MjFcIjogWzAuMjUwMDEsIDAuNzUsIDAsIDAsIDEuMDU1NTZdLFxuICAgIFwiODczMFwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg3MzlcIjogWy0wLjAwNTk5LCAwLjYwNiwgMCwgMCwgMC4zMzMzM10sXG4gICAgXCI4NzQxXCI6IFstMC4wMDU5OSwgMC42MDYsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODc0N1wiOiBbMC4zMDYxMiwgMC44MDUsIDAuMTk0NDUsIDAsIDAuNDcyMjJdLFxuICAgIFwiODc0OFwiOiBbMC4zMDYsIDAuODA1LCAwLjE5NDQ1LCAwLCAwLjQ3MjIyXSxcbiAgICBcIjg3NDlcIjogWzAuMzA2LCAwLjgwNSwgMC4xOTQ0NSwgMCwgMC40NzIyMl0sXG4gICAgXCI4NzUwXCI6IFswLjMwNjEyLCAwLjgwNSwgMC4xOTQ0NSwgMCwgMC40NzIyMl0sXG4gICAgXCI4ODk2XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjg4OTdcIjogWzAuMjUwMDEsIDAuNzUsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODg5OFwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI4ODk5XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjg5NjhcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiODk2OVwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC40NzIyMl0sXG4gICAgXCI4OTcwXCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjg5NzFcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiOTE2OFwiOiBbLTAuMDAwOTksIDAuNjAxLCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjEwMjE2XCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjEwMjE3XCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjEwNzUyXCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjEwNzUzXCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjEwNzU0XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjEwNzU2XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjEwNzU4XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjgzMzM0XVxuICB9LFxuICBcIlNpemUyLVJlZ3VsYXJcIjoge1xuICAgIFwiNDBcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNTk3MjJdLFxuICAgIFwiNDFcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNTk3MjJdLFxuICAgIFwiNDdcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuODExMTFdLFxuICAgIFwiOTFcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiOTJcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuODExMTFdLFxuICAgIFwiOTNcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiMTIzXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjEyNVwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI3MTBcIjogWzAsIDAuNzUsIDAsIDAsIDEuMF0sXG4gICAgXCI3MzJcIjogWzAsIDAuNzUsIDAsIDAsIDEuMF0sXG4gICAgXCI3NzBcIjogWzAsIDAuNzUsIDAsIDAsIDEuMF0sXG4gICAgXCI3NzFcIjogWzAsIDAuNzUsIDAsIDAsIDEuMF0sXG4gICAgXCI4NzE5XCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjI3Nzc4XSxcbiAgICBcIjg3MjBcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuMjc3NzhdLFxuICAgIFwiODcyMVwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS40NDQ0NV0sXG4gICAgXCI4NzMwXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAxLjBdLFxuICAgIFwiODc0N1wiOiBbMC44NjIyNSwgMS4zNiwgMC40NDQ0NSwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NzQ4XCI6IFswLjg2MiwgMS4zNiwgMC40NDQ0NSwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NzQ5XCI6IFswLjg2MiwgMS4zNiwgMC40NDQ0NSwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NzUwXCI6IFswLjg2MjI1LCAxLjM2LCAwLjQ0NDQ1LCAwLCAwLjU1NTU2XSxcbiAgICBcIjg4OTZcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiODg5N1wiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCI4ODk4XCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjg4OTlcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiODk2OFwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCI4OTY5XCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjg5NzBcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNTI3NzhdLFxuICAgIFwiODk3MVwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCIxMDIxNlwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC42MTExMV0sXG4gICAgXCIxMDIxN1wiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC42MTExMV0sXG4gICAgXCIxMDc1MlwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS41MTExMl0sXG4gICAgXCIxMDc1M1wiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS41MTExMl0sXG4gICAgXCIxMDc1NFwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS41MTExMl0sXG4gICAgXCIxMDc1NlwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCIxMDc1OFwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS4xMTExMV1cbiAgfSxcbiAgXCJTaXplMy1SZWd1bGFyXCI6IHtcbiAgICBcIjQwXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjczNjExXSxcbiAgICBcIjQxXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjczNjExXSxcbiAgICBcIjQ3XCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAxLjA0NDQ1XSxcbiAgICBcIjkxXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjkyXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAxLjA0NDQ1XSxcbiAgICBcIjkzXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjEyM1wiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMC43NV0sXG4gICAgXCIxMjVcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNzVdLFxuICAgIFwiNzEwXCI6IFswLCAwLjc1LCAwLCAwLCAxLjQ0NDQ1XSxcbiAgICBcIjczMlwiOiBbMCwgMC43NSwgMCwgMCwgMS40NDQ0NV0sXG4gICAgXCI3NzBcIjogWzAsIDAuNzUsIDAsIDAsIDEuNDQ0NDVdLFxuICAgIFwiNzcxXCI6IFswLCAwLjc1LCAwLCAwLCAxLjQ0NDQ1XSxcbiAgICBcIjg3MzBcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDEuMF0sXG4gICAgXCI4OTY4XCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjg5NjlcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiODk3MFwiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMC41ODMzNF0sXG4gICAgXCI4OTcxXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjEwMjE2XCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjc1XSxcbiAgICBcIjEwMjE3XCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjc1XVxuICB9LFxuICBcIlNpemU0LVJlZ3VsYXJcIjoge1xuICAgIFwiNDBcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNzkxNjddLFxuICAgIFwiNDFcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNzkxNjddLFxuICAgIFwiNDdcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDEuMjc3NzhdLFxuICAgIFwiOTFcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiOTJcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDEuMjc3NzhdLFxuICAgIFwiOTNcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiMTIzXCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjgwNTU2XSxcbiAgICBcIjEyNVwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC44MDU1Nl0sXG4gICAgXCI3MTBcIjogWzAsIDAuODI1LCAwLCAwLCAxLjg4ODldLFxuICAgIFwiNzMyXCI6IFswLCAwLjgyNSwgMCwgMCwgMS44ODg5XSxcbiAgICBcIjc3MFwiOiBbMCwgMC44MjUsIDAsIDAsIDEuODg4OV0sXG4gICAgXCI3NzFcIjogWzAsIDAuODI1LCAwLCAwLCAxLjg4ODldLFxuICAgIFwiODczMFwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg5NjhcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiODk2OVwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI4OTcwXCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjg5NzFcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiOTExNVwiOiBbMC42NDUwMiwgMS4xNTUsIDAsIDAsIDAuODc1XSxcbiAgICBcIjkxMTZcIjogWzFlLTA1LCAwLjYsIDAsIDAsIDAuODc1XSxcbiAgICBcIjkxMTdcIjogWzAuNjQ1MDIsIDEuMTU1LCAwLCAwLCAwLjg3NV0sXG4gICAgXCI5MTE4XCI6IFswLjY0NTAyLCAxLjE1NSwgMCwgMCwgMC44NzVdLFxuICAgIFwiOTExOVwiOiBbMWUtMDUsIDAuNiwgMCwgMCwgMC44NzVdLFxuICAgIFwiOTEyMFwiOiBbMC42NDUwMiwgMS4xNTUsIDAsIDAsIDAuODc1XSxcbiAgICBcIjkxMjFcIjogWzAuNjQ1MDIsIDEuMTU1LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjkxMjJcIjogWy0wLjAwMDk5LCAwLjYwMSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MTIzXCI6IFswLjY0NTAyLCAxLjE1NSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MTI0XCI6IFswLjY0NTAyLCAxLjE1NSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MTI1XCI6IFstMC4wMDA5OSwgMC42MDEsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTEyNlwiOiBbMC42NDUwMiwgMS4xNTUsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTEyN1wiOiBbMWUtMDUsIDAuOSwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5MTI4XCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjkxMjlcIjogWzAuOTAwMDEsIDAsIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTEzMFwiOiBbMCwgMC4zLCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjkxMzFcIjogWzFlLTA1LCAwLjksIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTEzMlwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5MTMzXCI6IFswLjkwMDAxLCAwLCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjkxNDNcIjogWzAuODg1MDIsIDAuOTE1LCAwLCAwLCAxLjA1NTU2XSxcbiAgICBcIjEwMjE2XCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjgwNTU2XSxcbiAgICBcIjEwMjE3XCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjgwNTU2XSxcbiAgICBcIjU3MzQ0XCI6IFstMC4wMDQ5OSwgMC42MDUsIDAsIDAsIDEuMDU1NTZdLFxuICAgIFwiNTczNDVcIjogWy0wLjAwNDk5LCAwLjYwNSwgMCwgMCwgMS4wNTU1Nl0sXG4gICAgXCI1NzY4MFwiOiBbMCwgMC4xMiwgMCwgMCwgMC40NV0sXG4gICAgXCI1NzY4MVwiOiBbMCwgMC4xMiwgMCwgMCwgMC40NV0sXG4gICAgXCI1NzY4MlwiOiBbMCwgMC4xMiwgMCwgMCwgMC40NV0sXG4gICAgXCI1NzY4M1wiOiBbMCwgMC4xMiwgMCwgMCwgMC40NV1cbiAgfSxcbiAgXCJUeXBld3JpdGVyLVJlZ3VsYXJcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjMzXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIzNFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMzVcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjM2XCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIzN1wiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiMzhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjM5XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0MFwiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiNDFcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjQyXCI6IFswLCAwLjUyMDgzLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0M1wiOiBbLTAuMDgwNTYsIDAuNTMwNTUsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjQ0XCI6IFswLjEzODg5LCAwLjEyNSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNDVcIjogWy0wLjA4MDU2LCAwLjUzMDU1LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0NlwiOiBbMCwgMC4xMjUsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjQ3XCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0OFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNDlcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjUwXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1MVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNTJcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjUzXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1NFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNTVcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjU2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1N1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNThcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjU5XCI6IFswLjEzODg5LCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2MFwiOiBbLTAuMDU1NTYsIDAuNTU1NTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjYxXCI6IFstMC4xOTU0OSwgMC40MTU2MiwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjJcIjogWy0wLjA1NTU2LCAwLjU1NTU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2M1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjY1XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjY4XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2OVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzBcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjcxXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3MlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzNcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjc0XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3NVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjc3XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3OFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzlcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgwXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4MVwiOiBbMC4xMzg4OSwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiODJcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgzXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4NFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiODVcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjg2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4N1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiODhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjg5XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTFcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkyXCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5M1wiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjk1XCI6IFswLjA5NTE0LCAwLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTdcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjk4XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5OVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTAwXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwMlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTAzXCI6IFswLjIyMjIyLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwNVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTA2XCI6IFswLjIyMjIyLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMDdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTBcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjExMVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTEyXCI6IFswLjIyMjIyLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTNcIjogWzAuMjIyMjIsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjExNFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTE1XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTZcIjogWzAsIDAuNTUzNTgsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjExN1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTE4XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEyMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTIxXCI6IFswLjIyMjIyLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEyM1wiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTI0XCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMjVcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEyNlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTI3XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjE3NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTg0XCI6IFswLjE5NDQ1LCAwLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIzMDVcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjU2N1wiOiBbMC4yMjIyMiwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzExXCI6IFswLCAwLjU2NTk3LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3MTNcIjogWzAsIDAuNTY1NTUsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjcxNFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzE1XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3MjhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjczMFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzcwXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3NzFcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjc3NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTE1XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkyMFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTIzXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTMxXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkzNFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTM2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgyMTdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgyNDJcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkyNTFcIjogWzAuMTExMTEsIDAuMjE5NDQsIDAsIDAsIDAuNTI1XVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2ZvbnRNZXRyaWNzLmpzXG5cblxuLyoqXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgbWV0cmljcyByZWdhcmRpbmcgZm9udHMgYW5kIGluZGl2aWR1YWwgc3ltYm9scy4gVGhlIHNpZ21hXG4gKiBhbmQgeGkgdmFyaWFibGVzLCBhcyB3ZWxsIGFzIHRoZSBtZXRyaWNNYXAgbWFwIGNvbnRhaW4gZGF0YSBleHRyYWN0ZWQgZnJvbVxuICogVGVYLCBUZVggZm9udCBtZXRyaWNzLCBhbmQgdGhlIFRURiBmaWxlcy4gVGhlc2UgZGF0YSBhcmUgdGhlbiBleHBvc2VkIHZpYSB0aGVcbiAqIGBtZXRyaWNzYCB2YXJpYWJsZSBhbmQgdGhlIGdldENoYXJhY3Rlck1ldHJpY3MgZnVuY3Rpb24uXG4gKi9cbi8vIEluIFRlWCwgdGhlcmUgYXJlIGFjdHVhbGx5IHRocmVlIHNldHMgb2YgZGltZW5zaW9ucywgb25lIGZvciBlYWNoIG9mXG4vLyB0ZXh0c3R5bGUgKHNpemUgaW5kZXggNSBhbmQgaGlnaGVyOiA+PTlwdCksIHNjcmlwdHN0eWxlIChzaXplIGluZGV4IDMgYW5kIDQ6XG4vLyA3LThwdCksIGFuZCBzY3JpcHRzY3JpcHRzdHlsZSAoc2l6ZSBpbmRleCAxIGFuZCAyOiA1LTZwdCkuICBUaGVzZSBhcmVcbi8vIHByb3ZpZGVkIGluIHRoZSB0aGUgYXJyYXlzIGJlbG93LCBpbiB0aGF0IG9yZGVyLlxuLy9cbi8vIFRoZSBmb250IG1ldHJpY3MgYXJlIHN0b3JlZCBpbiBmb250cyBjbXN5MTAsIGNtc3k3LCBhbmQgY21zeTUgcmVzcHNlY3RpdmVseS5cbi8vIFRoaXMgd2FzIGRldGVybWluZWQgYnkgcnVubmluZyB0aGUgZm9sbG93aW5nIHNjcmlwdDpcbi8vXG4vLyAgICAgbGF0ZXggLWludGVyYWN0aW9uPW5vbnN0b3Btb2RlIFxcXG4vLyAgICAgJ1xcZG9jdW1lbnRjbGFzc3thcnRpY2xlfVxcdXNlcGFja2FnZXthbXNtYXRofVxcYmVnaW57ZG9jdW1lbnR9JyBcXFxuLy8gICAgICckYSQgXFxleHBhbmRhZnRlclxcc2hvd1xcdGhlXFx0ZXh0Zm9udDInIFxcXG4vLyAgICAgJ1xcZXhwYW5kYWZ0ZXJcXHNob3dcXHRoZVxcc2NyaXB0Zm9udDInIFxcXG4vLyAgICAgJ1xcZXhwYW5kYWZ0ZXJcXHNob3dcXHRoZVxcc2NyaXB0c2NyaXB0Zm9udDInIFxcXG4vLyAgICAgJ1xcc3RvcCdcbi8vXG4vLyBUaGUgbWV0cmljcyB0aGVtc2VsdmVzIHdlcmUgcmV0cmVpdmVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6XG4vL1xuLy8gICAgIHRmdG9wbCBjbXN5MTBcbi8vICAgICB0ZnRvcGwgY21zeTdcbi8vICAgICB0ZnRvcGwgY21zeTVcbi8vXG4vLyBUaGUgb3V0cHV0IG9mIGVhY2ggb2YgdGhlc2UgY29tbWFuZHMgaXMgcXVpdGUgbGVuZ3RoeS4gIFRoZSBvbmx5IHBhcnQgd2Vcbi8vIGNhcmUgYWJvdXQgaXMgdGhlIEZPTlRESU1FTiBzZWN0aW9uLiBFYWNoIHZhbHVlIGlzIG1lYXN1cmVkIGluIEVNcy5cbnZhciBzaWdtYXNBbmRYaXMgPSB7XG4gIHNsYW50OiBbMC4yNTAsIDAuMjUwLCAwLjI1MF0sXG4gIC8vIHNpZ21hMVxuICBzcGFjZTogWzAuMDAwLCAwLjAwMCwgMC4wMDBdLFxuICAvLyBzaWdtYTJcbiAgc3RyZXRjaDogWzAuMDAwLCAwLjAwMCwgMC4wMDBdLFxuICAvLyBzaWdtYTNcbiAgc2hyaW5rOiBbMC4wMDAsIDAuMDAwLCAwLjAwMF0sXG4gIC8vIHNpZ21hNFxuICB4SGVpZ2h0OiBbMC40MzEsIDAuNDMxLCAwLjQzMV0sXG4gIC8vIHNpZ21hNVxuICBxdWFkOiBbMS4wMDAsIDEuMTcxLCAxLjQ3Ml0sXG4gIC8vIHNpZ21hNlxuICBleHRyYVNwYWNlOiBbMC4wMDAsIDAuMDAwLCAwLjAwMF0sXG4gIC8vIHNpZ21hN1xuICBudW0xOiBbMC42NzcsIDAuNzMyLCAwLjkyNV0sXG4gIC8vIHNpZ21hOFxuICBudW0yOiBbMC4zOTQsIDAuMzg0LCAwLjM4N10sXG4gIC8vIHNpZ21hOVxuICBudW0zOiBbMC40NDQsIDAuNDcxLCAwLjUwNF0sXG4gIC8vIHNpZ21hMTBcbiAgZGVub20xOiBbMC42ODYsIDAuNzUyLCAxLjAyNV0sXG4gIC8vIHNpZ21hMTFcbiAgZGVub20yOiBbMC4zNDUsIDAuMzQ0LCAwLjUzMl0sXG4gIC8vIHNpZ21hMTJcbiAgc3VwMTogWzAuNDEzLCAwLjUwMywgMC41MDRdLFxuICAvLyBzaWdtYTEzXG4gIHN1cDI6IFswLjM2MywgMC40MzEsIDAuNDA0XSxcbiAgLy8gc2lnbWExNFxuICBzdXAzOiBbMC4yODksIDAuMjg2LCAwLjI5NF0sXG4gIC8vIHNpZ21hMTVcbiAgc3ViMTogWzAuMTUwLCAwLjE0MywgMC4yMDBdLFxuICAvLyBzaWdtYTE2XG4gIHN1YjI6IFswLjI0NywgMC4yODYsIDAuNDAwXSxcbiAgLy8gc2lnbWExN1xuICBzdXBEcm9wOiBbMC4zODYsIDAuMzUzLCAwLjQ5NF0sXG4gIC8vIHNpZ21hMThcbiAgc3ViRHJvcDogWzAuMDUwLCAwLjA3MSwgMC4xMDBdLFxuICAvLyBzaWdtYTE5XG4gIGRlbGltMTogWzIuMzkwLCAxLjcwMCwgMS45ODBdLFxuICAvLyBzaWdtYTIwXG4gIGRlbGltMjogWzEuMDEwLCAxLjE1NywgMS40MjBdLFxuICAvLyBzaWdtYTIxXG4gIGF4aXNIZWlnaHQ6IFswLjI1MCwgMC4yNTAsIDAuMjUwXSxcbiAgLy8gc2lnbWEyMlxuICAvLyBUaGVzZSBmb250IG1ldHJpY3MgYXJlIGV4dHJhY3RlZCBmcm9tIFRlWCBieSB1c2luZyB0ZnRvcGwgb24gY21leDEwLnRmbTtcbiAgLy8gdGhleSBjb3JyZXNwb25kIHRvIHRoZSBmb250IHBhcmFtZXRlcnMgb2YgdGhlIGV4dGVuc2lvbiBmb250cyAoZmFtaWx5IDMpLlxuICAvLyBTZWUgdGhlIFRlWGJvb2ssIHBhZ2UgNDQxLiBJbiBBTVNUZVgsIHRoZSBleHRlbnNpb24gZm9udHMgc2NhbGU7IHRvXG4gIC8vIG1hdGNoIGNtZXg3LCB3ZSdkIHVzZSBjbWV4Ny50Zm0gdmFsdWVzIGZvciBzY3JpcHQgYW5kIHNjcmlwdHNjcmlwdFxuICAvLyB2YWx1ZXMuXG4gIGRlZmF1bHRSdWxlVGhpY2tuZXNzOiBbMC4wNCwgMC4wNDksIDAuMDQ5XSxcbiAgLy8geGk4OyBjbWV4NzogMC4wNDlcbiAgYmlnT3BTcGFjaW5nMTogWzAuMTExLCAwLjExMSwgMC4xMTFdLFxuICAvLyB4aTlcbiAgYmlnT3BTcGFjaW5nMjogWzAuMTY2LCAwLjE2NiwgMC4xNjZdLFxuICAvLyB4aTEwXG4gIGJpZ09wU3BhY2luZzM6IFswLjIsIDAuMiwgMC4yXSxcbiAgLy8geGkxMVxuICBiaWdPcFNwYWNpbmc0OiBbMC42LCAwLjYxMSwgMC42MTFdLFxuICAvLyB4aTEyOyBjbWV4NzogMC42MTFcbiAgYmlnT3BTcGFjaW5nNTogWzAuMSwgMC4xNDMsIDAuMTQzXSxcbiAgLy8geGkxMzsgY21leDc6IDAuMTQzXG4gIC8vIFRoZSBcXHNxcnQgcnVsZSB3aWR0aCBpcyB0YWtlbiBmcm9tIHRoZSBoZWlnaHQgb2YgdGhlIHN1cmQgY2hhcmFjdGVyLlxuICAvLyBTaW5jZSB3ZSB1c2UgdGhlIHNhbWUgZm9udCBhdCBhbGwgc2l6ZXMsIHRoaXMgdGhpY2tuZXNzIGRvZXNuJ3Qgc2NhbGUuXG4gIHNxcnRSdWxlVGhpY2tuZXNzOiBbMC4wNCwgMC4wNCwgMC4wNF0sXG4gIC8vIFRoaXMgdmFsdWUgZGV0ZXJtaW5lcyBob3cgbGFyZ2UgYSBwdCBpcywgZm9yIG1ldHJpY3Mgd2hpY2ggYXJlIGRlZmluZWRcbiAgLy8gaW4gdGVybXMgb2YgcHRzLlxuICAvLyBUaGlzIHZhbHVlIGlzIGFsc28gdXNlZCBpbiBrYXRleC5sZXNzOyBpZiB5b3UgY2hhbmdlIGl0IG1ha2Ugc3VyZSB0aGVcbiAgLy8gdmFsdWVzIG1hdGNoLlxuICBwdFBlckVtOiBbMTAuMCwgMTAuMCwgMTAuMF0sXG4gIC8vIFRoZSBzcGFjZSBiZXR3ZWVuIGFkamFjZW50IGB8YCBjb2x1bW5zIGluIGFuIGFycmF5IGRlZmluaXRpb24uIEZyb21cbiAgLy8gYFxcc2hvd3RoZVxcZG91YmxlcnVsZXNlcGAgaW4gTGFUZVguIEVxdWFscyAyLjAgLyBwdFBlckVtLlxuICBkb3VibGVSdWxlU2VwOiBbMC4yLCAwLjIsIDAuMl0sXG4gIC8vIFRoZSB3aWR0aCBvZiBzZXBhcmF0b3IgbGluZXMgaW4ge2FycmF5fSBlbnZpcm9ubWVudHMuIEZyb21cbiAgLy8gYFxcc2hvd3RoZVxcYXJyYXlydWxld2lkdGhgIGluIExhVGVYLiBFcXVhbHMgMC40IC8gcHRQZXJFbS5cbiAgYXJyYXlSdWxlV2lkdGg6IFswLjA0LCAwLjA0LCAwLjA0XSxcbiAgLy8gVHdvIHZhbHVlcyBmcm9tIExhVGVYIHNvdXJjZTJlOlxuICBmYm94c2VwOiBbMC4zLCAwLjMsIDAuM10sXG4gIC8vICAgICAgICAzIHB0IC8gcHRQZXJFbVxuICBmYm94cnVsZTogWzAuMDQsIDAuMDQsIDAuMDRdIC8vIDAuNCBwdCAvIHB0UGVyRW1cblxufTsgLy8gVGhpcyBtYXAgY29udGFpbnMgYSBtYXBwaW5nIGZyb20gZm9udCBuYW1lIGFuZCBjaGFyYWN0ZXIgY29kZSB0byBjaGFyYWN0ZXJcbi8vIG1ldHJpY3MsIGluY2x1ZGluZyBoZWlnaHQsIGRlcHRoLCBpdGFsaWMgY29ycmVjdGlvbiwgYW5kIHNrZXcgKGtlcm4gZnJvbSB0aGVcbi8vIGNoYXJhY3RlciB0byB0aGUgY29ycmVzcG9uZGluZyBcXHNrZXdjaGFyKVxuLy8gVGhpcyBtYXAgaXMgZ2VuZXJhdGVkIHZpYSBgbWFrZSBtZXRyaWNzYC4gSXQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIG1hbnVhbGx5LlxuXG4gLy8gVGhlc2UgYXJlIHZlcnkgcm91Z2ggYXBwcm94aW1hdGlvbnMuICBXZSBkZWZhdWx0IHRvIFRpbWVzIE5ldyBSb21hbiB3aGljaFxuLy8gc2hvdWxkIGhhdmUgTGF0aW4tMSBhbmQgQ3lyaWxsaWMgY2hhcmFjdGVycywgYnV0IG1heSBub3QgZGVwZW5kaW5nIG9uIHRoZVxuLy8gb3BlcmF0aW5nIHN5c3RlbS4gIFRoZSBtZXRyaWNzIGRvIG5vdCBhY2NvdW50IGZvciBleHRyYSBoZWlnaHQgZnJvbSB0aGVcbi8vIGFjY2VudHMuICBJbiB0aGUgY2FzZSBvZiBDeXJpbGxpYyBjaGFyYWN0ZXJzIHdoaWNoIGhhdmUgYm90aCBhc2NlbmRlcnMgYW5kXG4vLyBkZXNjZW5kZXJzIHdlIHByZWZlciBhcHByb3hpbWF0aW9ucyB3aXRoIGFzY2VuZGVycywgcHJpbWFyaWx5IHRvIHByZXZlbnRcbi8vIHRoZSBmcmFjdGlvbiBiYXIgb3Igcm9vdCBsaW5lIGZyb20gaW50ZXJzZWN0aW5nIHRoZSBnbHlwaC5cbi8vIFRPRE8oa2V2aW5iKSBhbGxvdyB1bmlvbiBvZiBtdWx0aXBsZSBnbHlwaCBtZXRyaWNzIGZvciBiZXR0ZXIgYWNjdXJhY3kuXG5cbnZhciBleHRyYUNoYXJhY3Rlck1hcCA9IHtcbiAgLy8gTGF0aW4tMVxuICAnw4UnOiAnQScsXG4gICfDhyc6ICdDJyxcbiAgJ8OQJzogJ0QnLFxuICAnw54nOiAnbycsXG4gICfDpSc6ICdhJyxcbiAgJ8OnJzogJ2MnLFxuICAnw7AnOiAnZCcsXG4gICfDvic6ICdvJyxcbiAgLy8gQ3lyaWxsaWNcbiAgJ9CQJzogJ0EnLFxuICAn0JEnOiAnQicsXG4gICfQkic6ICdCJyxcbiAgJ9CTJzogJ0YnLFxuICAn0JQnOiAnQScsXG4gICfQlSc6ICdFJyxcbiAgJ9CWJzogJ0snLFxuICAn0JcnOiAnMycsXG4gICfQmCc6ICdOJyxcbiAgJ9CZJzogJ04nLFxuICAn0JonOiAnSycsXG4gICfQmyc6ICdOJyxcbiAgJ9CcJzogJ00nLFxuICAn0J0nOiAnSCcsXG4gICfQnic6ICdPJyxcbiAgJ9CfJzogJ04nLFxuICAn0KAnOiAnUCcsXG4gICfQoSc6ICdDJyxcbiAgJ9CiJzogJ1QnLFxuICAn0KMnOiAneScsXG4gICfQpCc6ICdPJyxcbiAgJ9ClJzogJ1gnLFxuICAn0KYnOiAnVScsXG4gICfQpyc6ICdoJyxcbiAgJ9CoJzogJ1cnLFxuICAn0KknOiAnVycsXG4gICfQqic6ICdCJyxcbiAgJ9CrJzogJ1gnLFxuICAn0KwnOiAnQicsXG4gICfQrSc6ICczJyxcbiAgJ9CuJzogJ1gnLFxuICAn0K8nOiAnUicsXG4gICfQsCc6ICdhJyxcbiAgJ9CxJzogJ2InLFxuICAn0LInOiAnYScsXG4gICfQsyc6ICdyJyxcbiAgJ9C0JzogJ3knLFxuICAn0LUnOiAnZScsXG4gICfQtic6ICdtJyxcbiAgJ9C3JzogJ2UnLFxuICAn0LgnOiAnbicsXG4gICfQuSc6ICduJyxcbiAgJ9C6JzogJ24nLFxuICAn0LsnOiAnbicsXG4gICfQvCc6ICdtJyxcbiAgJ9C9JzogJ24nLFxuICAn0L4nOiAnbycsXG4gICfQvyc6ICduJyxcbiAgJ9GAJzogJ3AnLFxuICAn0YEnOiAnYycsXG4gICfRgic6ICdvJyxcbiAgJ9GDJzogJ3knLFxuICAn0YQnOiAnYicsXG4gICfRhSc6ICd4JyxcbiAgJ9GGJzogJ24nLFxuICAn0YcnOiAnbicsXG4gICfRiCc6ICd3JyxcbiAgJ9GJJzogJ3cnLFxuICAn0YonOiAnYScsXG4gICfRiyc6ICdtJyxcbiAgJ9GMJzogJ2EnLFxuICAn0Y0nOiAnZScsXG4gICfRjic6ICdtJyxcbiAgJ9GPJzogJ3InXG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gYWRkcyBuZXcgZm9udCBtZXRyaWNzIHRvIGRlZmF1bHQgbWV0cmljTWFwXG4gKiBJdCBjYW4gYWxzbyBvdmVycmlkZSBleGlzdGluZyBtZXRyaWNzXG4gKi9cbmZ1bmN0aW9uIHNldEZvbnRNZXRyaWNzKGZvbnROYW1lLCBtZXRyaWNzKSB7XG4gIGZvbnRNZXRyaWNzRGF0YVtmb250TmFtZV0gPSBtZXRyaWNzO1xufVxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGxvb2tpbmcgdXAgaW5mb3JtYXRpb24gaW4gdGhlXG4gKiBtZXRyaWNNYXAgdGFibGUuIEl0IHRha2VzIGEgY2hhcmFjdGVyIGFzIGEgc3RyaW5nLCBhbmQgYSBmb250LlxuICpcbiAqIE5vdGU6IHRoZSBgd2lkdGhgIHByb3BlcnR5IG1heSBiZSB1bmRlZmluZWQgaWYgZm9udE1ldHJpY3NEYXRhLmpzIHdhc24ndFxuICogYnVpbHQgdXNpbmcgYE1ha2UgZXh0ZW5kZWRfbWV0cmljc2AuXG4gKi9cblxuZnVuY3Rpb24gZ2V0Q2hhcmFjdGVyTWV0cmljcyhjaGFyYWN0ZXIsIGZvbnQsIG1vZGUpIHtcbiAgaWYgKCFmb250TWV0cmljc0RhdGFbZm9udF0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJGb250IG1ldHJpY3Mgbm90IGZvdW5kIGZvciBmb250OiBcIiArIGZvbnQgKyBcIi5cIik7XG4gIH1cblxuICB2YXIgY2ggPSBjaGFyYWN0ZXIuY2hhckNvZGVBdCgwKTtcbiAgdmFyIG1ldHJpY3MgPSBmb250TWV0cmljc0RhdGFbZm9udF1bY2hdO1xuXG4gIGlmICghbWV0cmljcyAmJiBjaGFyYWN0ZXJbMF0gaW4gZXh0cmFDaGFyYWN0ZXJNYXApIHtcbiAgICBjaCA9IGV4dHJhQ2hhcmFjdGVyTWFwW2NoYXJhY3RlclswXV0uY2hhckNvZGVBdCgwKTtcbiAgICBtZXRyaWNzID0gZm9udE1ldHJpY3NEYXRhW2ZvbnRdW2NoXTtcbiAgfVxuXG4gIGlmICghbWV0cmljcyAmJiBtb2RlID09PSAndGV4dCcpIHtcbiAgICAvLyBXZSBkb24ndCB0eXBpY2FsbHkgaGF2ZSBmb250IG1ldHJpY3MgZm9yIEFzaWFuIHNjcmlwdHMuXG4gICAgLy8gQnV0IHNpbmNlIHdlIHN1cHBvcnQgdGhlbSBpbiB0ZXh0IG1vZGUsIHdlIG5lZWQgdG8gcmV0dXJuXG4gICAgLy8gc29tZSBzb3J0IG9mIG1ldHJpY3MuXG4gICAgLy8gU28gaWYgdGhlIGNoYXJhY3RlciBpcyBpbiBhIHNjcmlwdCB3ZSBzdXBwb3J0IGJ1dCB3ZVxuICAgIC8vIGRvbid0IGhhdmUgbWV0cmljcyBmb3IgaXQsIGp1c3QgdXNlIHRoZSBtZXRyaWNzIGZvclxuICAgIC8vIHRoZSBMYXRpbiBjYXBpdGFsIGxldHRlciBNLiBUaGlzIGlzIGNsb3NlIGVub3VnaCBiZWNhdXNlXG4gICAgLy8gd2UgKGN1cnJlbnRseSkgb25seSBjYXJlIGFib3V0IHRoZSBoZWlnaHQgb2YgdGhlIGdscHloXG4gICAgLy8gbm90IGl0cyB3aWR0aC5cbiAgICBpZiAoc3VwcG9ydGVkQ29kZXBvaW50KGNoKSkge1xuICAgICAgbWV0cmljcyA9IGZvbnRNZXRyaWNzRGF0YVtmb250XVs3N107IC8vIDc3IGlzIHRoZSBjaGFyY29kZSBmb3IgJ00nXG4gICAgfVxuICB9XG5cbiAgaWYgKG1ldHJpY3MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGVwdGg6IG1ldHJpY3NbMF0sXG4gICAgICBoZWlnaHQ6IG1ldHJpY3NbMV0sXG4gICAgICBpdGFsaWM6IG1ldHJpY3NbMl0sXG4gICAgICBza2V3OiBtZXRyaWNzWzNdLFxuICAgICAgd2lkdGg6IG1ldHJpY3NbNF1cbiAgICB9O1xuICB9XG59XG52YXIgZm9udE1ldHJpY3NCeVNpemVJbmRleCA9IHt9O1xuLyoqXG4gKiBHZXQgdGhlIGZvbnQgbWV0cmljcyBmb3IgYSBnaXZlbiBzaXplLlxuICovXG5cbmZ1bmN0aW9uIGdldEdsb2JhbE1ldHJpY3Moc2l6ZSkge1xuICB2YXIgc2l6ZUluZGV4O1xuXG4gIGlmIChzaXplID49IDUpIHtcbiAgICBzaXplSW5kZXggPSAwO1xuICB9IGVsc2UgaWYgKHNpemUgPj0gMykge1xuICAgIHNpemVJbmRleCA9IDE7XG4gIH0gZWxzZSB7XG4gICAgc2l6ZUluZGV4ID0gMjtcbiAgfVxuXG4gIGlmICghZm9udE1ldHJpY3NCeVNpemVJbmRleFtzaXplSW5kZXhdKSB7XG4gICAgdmFyIG1ldHJpY3MgPSBmb250TWV0cmljc0J5U2l6ZUluZGV4W3NpemVJbmRleF0gPSB7XG4gICAgICBjc3NFbVBlck11OiBzaWdtYXNBbmRYaXMucXVhZFtzaXplSW5kZXhdIC8gMThcbiAgICB9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIHNpZ21hc0FuZFhpcykge1xuICAgICAgaWYgKHNpZ21hc0FuZFhpcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIG1ldHJpY3Nba2V5XSA9IHNpZ21hc0FuZFhpc1trZXldW3NpemVJbmRleF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZvbnRNZXRyaWNzQnlTaXplSW5kZXhbc2l6ZUluZGV4XTtcbn1cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3N5bWJvbHMuanNcbi8qKlxuICogVGhpcyBmaWxlIGhvbGRzIGEgbGlzdCBvZiBhbGwgbm8tYXJndW1lbnQgZnVuY3Rpb25zIGFuZCBzaW5nbGUtY2hhcmFjdGVyXG4gKiBzeW1ib2xzIChsaWtlICdhJyBvciAnOycpLlxuICpcbiAqIEZvciBlYWNoIG9mIHRoZSBzeW1ib2xzLCB0aGVyZSBhcmUgdGhyZWUgcHJvcGVydGllcyB0aGV5IGNhbiBoYXZlOlxuICogLSBmb250IChyZXF1aXJlZCk6IHRoZSBmb250IHRvIGJlIHVzZWQgZm9yIHRoaXMgc3ltYm9sLiBFaXRoZXIgXCJtYWluXCIgKHRoZVxuICAgICBub3JtYWwgZm9udCksIG9yIFwiYW1zXCIgKHRoZSBhbXMgZm9udHMpLlxuICogLSBncm91cCAocmVxdWlyZWQpOiB0aGUgUGFyc2VOb2RlIGdyb3VwIHR5cGUgdGhlIHN5bWJvbCBzaG91bGQgaGF2ZSAoaS5lLlxuICAgICBcInRleHRvcmRcIiwgXCJtYXRob3JkXCIsIGV0YykuXG4gICAgIFNlZSBodHRwczovL2dpdGh1Yi5jb20vS2FUZVgvS2FUZVgvd2lraS9FeGFtaW5pbmctVGVYI2dyb3VwLXR5cGVzXG4gKiAtIHJlcGxhY2U6IHRoZSBjaGFyYWN0ZXIgdGhhdCB0aGlzIHN5bWJvbCBvciBmdW5jdGlvbiBzaG91bGQgYmVcbiAqICAgcmVwbGFjZWQgd2l0aCAoaS5lLiBcIlxccGhpXCIgaGFzIGEgcmVwbGFjZSB2YWx1ZSBvZiBcIlxcdTAzZDVcIiwgdGhlIHBoaVxuICogICBjaGFyYWN0ZXIgaW4gdGhlIG1haW4gZm9udCkuXG4gKlxuICogVGhlIG91dGVybW9zdCBtYXAgaW4gdGhlIHRhYmxlIGluZGljYXRlcyB3aGF0IG1vZGUgdGhlIHN5bWJvbHMgc2hvdWxkIGJlXG4gKiBhY2NlcHRlZCBpbiAoZS5nLiBcIm1hdGhcIiBvciBcInRleHRcIikuXG4gKi9cbi8vIFNvbWUgb2YgdGhlc2UgaGF2ZSBhIFwiLXRva2VuXCIgc3VmZml4IHNpbmNlIHRoZXNlIGFyZSBhbHNvIHVzZWQgYXMgYFBhcnNlTm9kZWBcbi8vIHR5cGVzIGZvciByYXcgdGV4dCB0b2tlbnMsIGFuZCB3ZSB3YW50IHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIGhpZ2hlci1sZXZlbFxuLy8gYFBhcnNlTm9kZWAgdHlwZXMuIFRoZXNlIGBQYXJzZU5vZGVgcyBhcmUgY29uc3RydWN0ZWQgd2l0aGluIGBQYXJzZXJgIGJ5XG4vLyBsb29raW5nIHVwIHRoZSBgc3ltYm9sc2AgbWFwLlxudmFyIEFUT01TID0ge1xuICBcImJpblwiOiAxLFxuICBcImNsb3NlXCI6IDEsXG4gIFwiaW5uZXJcIjogMSxcbiAgXCJvcGVuXCI6IDEsXG4gIFwicHVuY3RcIjogMSxcbiAgXCJyZWxcIjogMVxufTtcbnZhciBOT05fQVRPTVMgPSB7XG4gIFwiYWNjZW50LXRva2VuXCI6IDEsXG4gIFwibWF0aG9yZFwiOiAxLFxuICBcIm9wLXRva2VuXCI6IDEsXG4gIFwic3BhY2luZ1wiOiAxLFxuICBcInRleHRvcmRcIjogMVxufTtcbnZhciBzeW1ib2xzID0ge1xuICBcIm1hdGhcIjoge30sXG4gIFwidGV4dFwiOiB7fVxufTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19zeW1ib2xzID0gKHN5bWJvbHMpO1xuLyoqIGBhY2NlcHRVbmljb2RlQ2hhciA9IHRydWVgIGlzIG9ubHkgYXBwbGljYWJsZSBpZiBgcmVwbGFjZWAgaXMgc2V0LiAqL1xuXG5mdW5jdGlvbiBkZWZpbmVTeW1ib2wobW9kZSwgZm9udCwgZ3JvdXAsIHJlcGxhY2UsIG5hbWUsIGFjY2VwdFVuaWNvZGVDaGFyKSB7XG4gIHN5bWJvbHNbbW9kZV1bbmFtZV0gPSB7XG4gICAgZm9udDogZm9udCxcbiAgICBncm91cDogZ3JvdXAsXG4gICAgcmVwbGFjZTogcmVwbGFjZVxuICB9O1xuXG4gIGlmIChhY2NlcHRVbmljb2RlQ2hhciAmJiByZXBsYWNlKSB7XG4gICAgc3ltYm9sc1ttb2RlXVtyZXBsYWNlXSA9IHN5bWJvbHNbbW9kZV1bbmFtZV07XG4gIH1cbn0gLy8gU29tZSBhYmJyZXZpYXRpb25zIGZvciBjb21tb25seSB1c2VkIHN0cmluZ3MuXG4vLyBUaGlzIGhlbHBzIG1pbmlmeSB0aGUgY29kZSwgYW5kIGFsc28gc3BvdHRpbmcgdHlwb3MgdXNpbmcganNoaW50LlxuLy8gbW9kZXM6XG5cbnZhciBzeW1ib2xzX21hdGggPSBcIm1hdGhcIjtcbnZhciBzeW1ib2xzX3RleHQgPSBcInRleHRcIjsgLy8gZm9udHM6XG5cbnZhciBtYWluID0gXCJtYWluXCI7XG52YXIgYW1zID0gXCJhbXNcIjsgLy8gZ3JvdXBzOlxuXG52YXIgc3ltYm9sc19hY2NlbnQgPSBcImFjY2VudC10b2tlblwiO1xudmFyIGJpbiA9IFwiYmluXCI7XG52YXIgc3ltYm9sc19jbG9zZSA9IFwiY2xvc2VcIjtcbnZhciBzeW1ib2xzX2lubmVyID0gXCJpbm5lclwiO1xudmFyIG1hdGhvcmQgPSBcIm1hdGhvcmRcIjtcbnZhciBvcCA9IFwib3AtdG9rZW5cIjtcbnZhciBzeW1ib2xzX29wZW4gPSBcIm9wZW5cIjtcbnZhciBwdW5jdCA9IFwicHVuY3RcIjtcbnZhciByZWwgPSBcInJlbFwiO1xudmFyIHN5bWJvbHNfc3BhY2luZyA9IFwic3BhY2luZ1wiO1xudmFyIHN5bWJvbHNfdGV4dG9yZCA9IFwidGV4dG9yZFwiOyAvLyBOb3cgY29tZXMgdGhlIHN5bWJvbCB0YWJsZVxuLy8gUmVsYXRpb24gU3ltYm9sc1xuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjI2MVwiLCBcIlxcXFxlcXVpdlwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjdBXCIsIFwiXFxcXHByZWNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjI3QlwiLCBcIlxcXFxzdWNjXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyM0NcIiwgXCJcXFxcc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyQTVcIiwgXCJcXFxccGVycFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyQUFGXCIsIFwiXFxcXHByZWNlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyQUIwXCIsIFwiXFxcXHN1Y2NlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjQzXCIsIFwiXFxcXHNpbWVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyMjNcIiwgXCJcXFxcbWlkXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNkFcIiwgXCJcXFxcbGxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjI2QlwiLCBcIlxcXFxnZ1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjREXCIsIFwiXFxcXGFzeW1wXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyMjVcIiwgXCJcXFxccGFyYWxsZWxcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjJDOFwiLCBcIlxcXFxib3d0aWVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjMyM1wiLCBcIlxcXFxzbWlsZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjkxXCIsIFwiXFxcXHNxc3Vic2V0ZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjI5MlwiLCBcIlxcXFxzcXN1cHNldGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNTBcIiwgXCJcXFxcZG90ZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjMyMlwiLCBcIlxcXFxmcm93blwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjBCXCIsIFwiXFxcXG5pXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyMURcIiwgXCJcXFxccHJvcHRvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyQTJcIiwgXCJcXFxcdmRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjJBM1wiLCBcIlxcXFxkYXNodlwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjBCXCIsIFwiXFxcXG93bnNcIik7IC8vIFB1bmN0dWF0aW9uXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHB1bmN0LCBcIi5cIiwgXCJcXFxcbGRvdHBcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBwdW5jdCwgXCJcXHUyMkM1XCIsIFwiXFxcXGNkb3RwXCIpOyAvLyBNaXNjIFN5bWJvbHNcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIiNcIiwgXCJcXFxcI1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCIjXCIsIFwiXFxcXCNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiJlwiLCBcIlxcXFwmXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIiZcIiwgXCJcXFxcJlwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTM1XCIsIFwiXFxcXGFsZXBoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyMDBcIiwgXCJcXFxcZm9yYWxsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIxMEZcIiwgXCJcXFxcaGJhclwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjAzXCIsIFwiXFxcXGV4aXN0c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjA3XCIsIFwiXFxcXG5hYmxhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTI2NkRcIiwgXCJcXFxcZmxhdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTEzXCIsIFwiXFxcXGVsbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyNjZFXCIsIFwiXFxcXG5hdHVyYWxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjY2M1wiLCBcIlxcXFxjbHVic3VpdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTE4XCIsIFwiXFxcXHdwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTI2NkZcIiwgXCJcXFxcc2hhcnBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjY2MlwiLCBcIlxcXFxkaWFtb25kc3VpdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTFDXCIsIFwiXFxcXFJlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTI2NjFcIiwgXCJcXFxcaGVhcnRzdWl0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIxMTFcIiwgXCJcXFxcSW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjY2MFwiLCBcIlxcXFxzcGFkZXN1aXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4QTdcIiwgXCJcXFxcU1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHhCNlwiLCBcIlxcXFxQXCIsIHRydWUpOyAvLyBNYXRoIGFuZCBUZXh0XG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDIwXCIsIFwiXFxcXGRhZ1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDIwXCIsIFwiXFxcXGRhZ1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDIwXCIsIFwiXFxcXHRleHRkYWdnZXJcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjAyMVwiLCBcIlxcXFxkZGFnXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMjFcIiwgXCJcXFxcZGRhZ1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDIxXCIsIFwiXFxcXHRleHRkYWdnZXJkYmxcIik7IC8vIExhcmdlIERlbGltaXRlcnNcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19jbG9zZSwgXCJcXHUyM0IxXCIsIFwiXFxcXHJtb3VzdGFjaGVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX29wZW4sIFwiXFx1MjNCMFwiLCBcIlxcXFxsbW91c3RhY2hlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19jbG9zZSwgXCJcXHUyN0VGXCIsIFwiXFxcXHJncm91cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCJcXHUyN0VFXCIsIFwiXFxcXGxncm91cFwiLCB0cnVlKTsgLy8gQmluYXJ5IE9wZXJhdG9yc1xuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxM1wiLCBcIlxcXFxtcFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjk2XCIsIFwiXFxcXG9taW51c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjhFXCIsIFwiXFxcXHVwbHVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOTNcIiwgXCJcXFxcc3FjYXBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxN1wiLCBcIlxcXFxhc3RcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjI5NFwiLCBcIlxcXFxzcWN1cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyNUVGXCIsIFwiXFxcXGJpZ2NpcmNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxOVwiLCBcIlxcXFxidWxsZXRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjAyMVwiLCBcIlxcXFxkZGFnZ2VyXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyNDBcIiwgXCJcXFxcd3JcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MkEzRlwiLCBcIlxcXFxhbWFsZ1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCImXCIsIFwiXFxcXEFuZFwiKTsgLy8gZnJvbSBhbXNtYXRoXG4vLyBBcnJvdyBTeW1ib2xzXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyN0Y1XCIsIFwiXFxcXGxvbmdsZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjFEMFwiLCBcIlxcXFxMZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjdGOFwiLCBcIlxcXFxMb25nbGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTI3RjZcIiwgXCJcXFxcbG9uZ3JpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjFEMlwiLCBcIlxcXFxSaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTI3RjlcIiwgXCJcXFxcTG9uZ3JpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5NFwiLCBcIlxcXFxsZWZ0cmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyN0Y3XCIsIFwiXFxcXGxvbmdsZWZ0cmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMUQ0XCIsIFwiXFxcXExlZnRyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTI3RkFcIiwgXCJcXFxcTG9uZ2xlZnRyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxQTZcIiwgXCJcXFxcbWFwc3RvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTI3RkNcIiwgXCJcXFxcbG9uZ21hcHN0b1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTk3XCIsIFwiXFxcXG5lYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjFBOVwiLCBcIlxcXFxob29rbGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxQUFcIiwgXCJcXFxcaG9va3JpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5OFwiLCBcIlxcXFxzZWFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxQkNcIiwgXCJcXFxcbGVmdGhhcnBvb251cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMUMwXCIsIFwiXFxcXHJpZ2h0aGFycG9vbnVwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTlcIiwgXCJcXFxcc3dhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMUJEXCIsIFwiXFxcXGxlZnRoYXJwb29uZG93blwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMUMxXCIsIFwiXFxcXHJpZ2h0aGFycG9vbmRvd25cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5NlwiLCBcIlxcXFxud2Fycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxQ0NcIiwgXCJcXFxccmlnaHRsZWZ0aGFycG9vbnNcIiwgdHJ1ZSk7IC8vIEFNUyBOZWdhdGVkIEJpbmFyeSBSZWxhdGlvbnNcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI2RVwiLCBcIlxcXFxubGVzc1wiLCB0cnVlKTsgLy8gU3ltYm9sIG5hbWVzIHByZWNlZWRlZCBieSBcIkBcIiBlYWNoIGhhdmUgYSBjb3JyZXNwb25kaW5nIG1hY3JvLlxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHVFMDEwXCIsIFwiXFxcXEBubGVxc2xhbnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHVFMDExXCIsIFwiXFxcXEBubGVxcVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTJBODdcIiwgXCJcXFxcbG5lcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNjhcIiwgXCJcXFxcbG5lcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHVFMDBDXCIsIFwiXFxcXEBsdmVydG5lcXFcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkU2XCIsIFwiXFxcXGxuc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MkE4OVwiLCBcIlxcXFxsbmFwcHJveFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyODBcIiwgXCJcXFxcbnByZWNcIiwgdHJ1ZSk7IC8vIHVuaWNvZGUtbWF0aCBtYXBzIFxcdTIyZTAgdG8gXFxucHJlY2N1cmx5ZXEuIFdlJ2xsIHVzZSB0aGUgQU1TIHN5bm9ueW0uXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyRTBcIiwgXCJcXFxcbnByZWNlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyRThcIiwgXCJcXFxccHJlY25zaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQUI5XCIsIFwiXFxcXHByZWNuYXBwcm94XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0MVwiLCBcIlxcXFxuc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1RTAwNlwiLCBcIlxcXFxAbnNob3J0bWlkXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjIyNFwiLCBcIlxcXFxubWlkXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJBQ1wiLCBcIlxcXFxudmRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkFEXCIsIFwiXFxcXG52RGFzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyRUFcIiwgXCJcXFxcbnRyaWFuZ2xlbGVmdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyRUNcIiwgXCJcXFxcbnRyaWFuZ2xlbGVmdGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI4QVwiLCBcIlxcXFxzdWJzZXRuZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHVFMDFBXCIsIFwiXFxcXEB2YXJzdWJzZXRuZXFcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQUNCXCIsIFwiXFxcXHN1YnNldG5lcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHVFMDE3XCIsIFwiXFxcXEB2YXJzdWJzZXRuZXFxXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI2RlwiLCBcIlxcXFxuZ3RyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1RTAwRlwiLCBcIlxcXFxAbmdlcXNsYW50XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1RTAwRVwiLCBcIlxcXFxAbmdlcXFcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQTg4XCIsIFwiXFxcXGduZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjY5XCIsIFwiXFxcXGduZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1RTAwRFwiLCBcIlxcXFxAZ3ZlcnRuZXFxXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJFN1wiLCBcIlxcXFxnbnNpbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTJBOEFcIiwgXCJcXFxcZ25hcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjgxXCIsIFwiXFxcXG5zdWNjXCIsIHRydWUpOyAvLyB1bmljb2RlLW1hdGggbWFwcyBcXHUyMmUxIHRvIFxcbnN1Y2NjdXJseWVxLiBXZSdsbCB1c2UgdGhlIEFNUyBzeW5vbnltLlxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkUxXCIsIFwiXFxcXG5zdWNjZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkU5XCIsIFwiXFxcXHN1Y2Nuc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MkFCQVwiLCBcIlxcXFxzdWNjbmFwcHJveFwiLCB0cnVlKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgXFx1MjI0NiB0byBcXHNpbW5lcXEuIFdlJ2xsIHVzZSB0aGUgQU1TIHN5bm9ueW0uXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNDZcIiwgXCJcXFxcbmNvbmdcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHVFMDA3XCIsIFwiXFxcXEBuc2hvcnRwYXJhbGxlbFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyMjZcIiwgXCJcXFxcbnBhcmFsbGVsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJBRlwiLCBcIlxcXFxuVkRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkVCXCIsIFwiXFxcXG50cmlhbmdsZXJpZ2h0XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJFRFwiLCBcIlxcXFxudHJpYW5nbGVyaWdodGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1RTAxOFwiLCBcIlxcXFxAbnN1cHNldGVxcVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyOEJcIiwgXCJcXFxcc3Vwc2V0bmVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1RTAxQlwiLCBcIlxcXFxAdmFyc3Vwc2V0bmVxXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MkFDQ1wiLCBcIlxcXFxzdXBzZXRuZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1RTAxOVwiLCBcIlxcXFxAdmFyc3Vwc2V0bmVxcVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyQUVcIiwgXCJcXFxcblZkYXNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MkFCNVwiLCBcIlxcXFxwcmVjbmVxcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTJBQjZcIiwgXCJcXFxcc3VjY25lcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHVFMDE2XCIsIFwiXFxcXEBuc3Vic2V0ZXFxXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJCNFwiLCBcIlxcXFx1bmxoZFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyQjVcIiwgXCJcXFxcdW5yaGRcIik7IC8vIEFNUyBOZWdhdGVkIEFycm93c1xuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMTlBXCIsIFwiXFxcXG5sZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMTlCXCIsIFwiXFxcXG5yaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDRFwiLCBcIlxcXFxuTGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDRlwiLCBcIlxcXFxuUmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQUVcIiwgXCJcXFxcbmxlZnRyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDRVwiLCBcIlxcXFxuTGVmdHJpZ2h0YXJyb3dcIiwgdHJ1ZSk7IC8vIEFNUyBNaXNjXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTI1QjNcIiwgXCJcXFxcdmFydHJpYW5nbGVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTBGXCIsIFwiXFxcXGhzbGFzaFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTI1QkRcIiwgXCJcXFxcdHJpYW5nbGVkb3duXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjVDQVwiLCBcIlxcXFxsb3plbmdlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjRDOFwiLCBcIlxcXFxjaXJjbGVkU1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxceEFFXCIsIFwiXFxcXGNpcmNsZWRSXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4QUVcIiwgXCJcXFxcY2lyY2xlZFJcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjIxXCIsIFwiXFxcXG1lYXN1cmVkYW5nbGVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjA0XCIsIFwiXFxcXG5leGlzdHNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTI3XCIsIFwiXFxcXG1ob1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIxMzJcIiwgXCJcXFxcRmludlwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIxNDFcIiwgXCJcXFxcR2FtZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMzVcIiwgXCJcXFxcYmFja3ByaW1lXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjVCMlwiLCBcIlxcXFxibGFja3RyaWFuZ2xlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjVCQ1wiLCBcIlxcXFxibGFja3RyaWFuZ2xlZG93blwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTI1QTBcIiwgXCJcXFxcYmxhY2tzcXVhcmVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyOUVCXCIsIFwiXFxcXGJsYWNrbG96ZW5nZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTI2MDVcIiwgXCJcXFxcYmlnc3RhclwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyMjJcIiwgXCJcXFxcc3BoZXJpY2FsYW5nbGVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjAxXCIsIFwiXFxcXGNvbXBsZW1lbnRcIiwgdHJ1ZSk7IC8vIHVuaWNvZGUtbWF0aCBtYXBzIFUrRjAgKMOwKSB0byBcXG1hdGhldGguIFdlIG1hcCB0byBBTVMgZnVuY3Rpb24gXFxldGhcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4RjBcIiwgXCJcXFxcZXRoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjU3MVwiLCBcIlxcXFxkaWFndXBcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyNTcyXCIsIFwiXFxcXGRpYWdkb3duXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjVBMVwiLCBcIlxcXFxzcXVhcmVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyNUExXCIsIFwiXFxcXEJveFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTI1Q0FcIiwgXCJcXFxcRGlhbW9uZFwiKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgVStBNSB0byBcXG1hdGh5ZW4uIFdlIG1hcCB0byBBTVMgZnVuY3Rpb24gXFx5ZW5cblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4QTVcIiwgXCJcXFxceWVuXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4QTVcIiwgXCJcXFxceWVuXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjcxM1wiLCBcIlxcXFxjaGVja21hcmtcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyNzEzXCIsIFwiXFxcXGNoZWNrbWFya1wiKTsgLy8gQU1TIEhlYnJld1xuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTM2XCIsIFwiXFxcXGJldGhcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTM4XCIsIFwiXFxcXGRhbGV0aFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIxMzdcIiwgXCJcXFxcZ2ltZWxcIiwgdHJ1ZSk7IC8vIEFNUyBHcmVla1xuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwM0REXCIsIFwiXFxcXGRpZ2FtbWFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwM0YwXCIsIFwiXFxcXHZhcmthcHBhXCIpOyAvLyBBTVMgRGVsaW1pdGVyc1xuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfb3BlbiwgXCJcXHUyNTBDXCIsIFwiXFxcXHVsY29ybmVyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX2Nsb3NlLCBcIlxcdTI1MTBcIiwgXCJcXFxcdXJjb3JuZXJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfb3BlbiwgXCJcXHUyNTE0XCIsIFwiXFxcXGxsY29ybmVyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX2Nsb3NlLCBcIlxcdTI1MThcIiwgXCJcXFxcbHJjb3JuZXJcIiwgdHJ1ZSk7IC8vIEFNUyBCaW5hcnkgUmVsYXRpb25zXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNjZcIiwgXCJcXFxcbGVxcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTJBN0RcIiwgXCJcXFxcbGVxc2xhbnRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQTk1XCIsIFwiXFxcXGVxc2xhbnRsZXNzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3MlwiLCBcIlxcXFxsZXNzc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MkE4NVwiLCBcIlxcXFxsZXNzYXBwcm94XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0QVwiLCBcIlxcXFxhcHByb3hlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyRDZcIiwgXCJcXFxcbGVzc2RvdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyRDhcIiwgXCJcXFxcbGxsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3NlwiLCBcIlxcXFxsZXNzZ3RyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJEQVwiLCBcIlxcXFxsZXNzZXFndHJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQThCXCIsIFwiXFxcXGxlc3NlcXFndHJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjUxXCIsIFwiXFxcXGRvdGVxZG90XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI1M1wiLCBcIlxcXFxyaXNpbmdkb3RzZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjUyXCIsIFwiXFxcXGZhbGxpbmdkb3RzZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjNEXCIsIFwiXFxcXGJhY2tzaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkNEXCIsIFwiXFxcXGJhY2tzaW1lcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTJBQzVcIiwgXCJcXFxcc3Vic2V0ZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJEMFwiLCBcIlxcXFxTdWJzZXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjhGXCIsIFwiXFxcXHNxc3Vic2V0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3Q1wiLCBcIlxcXFxwcmVjY3VybHllcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyREVcIiwgXCJcXFxcY3VybHllcXByZWNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjdFXCIsIFwiXFxcXHByZWNzaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQUI3XCIsIFwiXFxcXHByZWNhcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkIyXCIsIFwiXFxcXHZhcnRyaWFuZ2xlbGVmdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyQjRcIiwgXCJcXFxcdHJpYW5nbGVsZWZ0ZXFcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkE4XCIsIFwiXFxcXHZEYXNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJBQVwiLCBcIlxcXFxWdmRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMzIzXCIsIFwiXFxcXHNtYWxsc21pbGVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMzIyXCIsIFwiXFxcXHNtYWxsZnJvd25cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjRGXCIsIFwiXFxcXGJ1bXBlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNEVcIiwgXCJcXFxcQnVtcGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI2N1wiLCBcIlxcXFxnZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MkE3RVwiLCBcIlxcXFxnZXFzbGFudFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTJBOTZcIiwgXCJcXFxcZXFzbGFudGd0clwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNzNcIiwgXCJcXFxcZ3Ryc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MkE4NlwiLCBcIlxcXFxndHJhcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkQ3XCIsIFwiXFxcXGd0cmRvdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyRDlcIiwgXCJcXFxcZ2dnXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3N1wiLCBcIlxcXFxndHJsZXNzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJEQlwiLCBcIlxcXFxndHJlcWxlc3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQThDXCIsIFwiXFxcXGd0cmVxcWxlc3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjU2XCIsIFwiXFxcXGVxY2lyY1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNTdcIiwgXCJcXFxcY2lyY2VxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI1Q1wiLCBcIlxcXFx0cmlhbmdsZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjNDXCIsIFwiXFxcXHRoaWNrc2ltXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0OFwiLCBcIlxcXFx0aGlja2FwcHJveFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTJBQzZcIiwgXCJcXFxcc3Vwc2V0ZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJEMVwiLCBcIlxcXFxTdXBzZXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjkwXCIsIFwiXFxcXHNxc3Vwc2V0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3RFwiLCBcIlxcXFxzdWNjY3VybHllcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyREZcIiwgXCJcXFxcY3VybHllcXN1Y2NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjdGXCIsIFwiXFxcXHN1Y2NzaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQUI4XCIsIFwiXFxcXHN1Y2NhcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkIzXCIsIFwiXFxcXHZhcnRyaWFuZ2xlcmlnaHRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkI1XCIsIFwiXFxcXHRyaWFuZ2xlcmlnaHRlcVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyQTlcIiwgXCJcXFxcVmRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjIzXCIsIFwiXFxcXHNob3J0bWlkXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjIyNVwiLCBcIlxcXFxzaG9ydHBhcmFsbGVsXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI2Q1wiLCBcIlxcXFxiZXR3ZWVuXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJENFwiLCBcIlxcXFxwaXRjaGZvcmtcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjFEXCIsIFwiXFxcXHZhcnByb3B0b1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTI1QzBcIiwgXCJcXFxcYmxhY2t0cmlhbmdsZWxlZnRcIik7IC8vIHVuaWNvZGUtbWF0aCBzYXlzIHRoYXQgXFx0aGVyZWZvcmUgaXMgYSBtYXRob3JkIGF0b20uXG4vLyBXZSBrZXB0IHRoZSBhbXNzeW1iIGF0b20gdHlwZSwgd2hpY2ggaXMgcmVsLlxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjM0XCIsIFwiXFxcXHRoZXJlZm9yZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyMERcIiwgXCJcXFxcYmFja2Vwc2lsb25cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyNUI2XCIsIFwiXFxcXGJsYWNrdHJpYW5nbGVyaWdodFwiKTsgLy8gdW5pY29kZS1tYXRoIHNheXMgdGhhdCBcXGJlY2F1c2UgaXMgYSBtYXRob3JkIGF0b20uXG4vLyBXZSBrZXB0IHRoZSBhbXNzeW1iIGF0b20gdHlwZSwgd2hpY2ggaXMgcmVsLlxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjM1XCIsIFwiXFxcXGJlY2F1c2VcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkQ4XCIsIFwiXFxcXGxsbGVzc1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyRDlcIiwgXCJcXFxcZ2dndHJcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkIyXCIsIFwiXFxcXGxoZFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyQjNcIiwgXCJcXFxccmhkXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0MlwiLCBcIlxcXFxlcXNpbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMkM4XCIsIFwiXFxcXEpvaW5cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjUxXCIsIFwiXFxcXERvdGVxXCIsIHRydWUpOyAvLyBBTVMgQmluYXJ5IE9wZXJhdG9yc1xuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjE0XCIsIFwiXFxcXGRvdHBsdXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjE2XCIsIFwiXFxcXHNtYWxsc2V0bWludXNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkQyXCIsIFwiXFxcXENhcFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyRDNcIiwgXCJcXFxcQ3VwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBiaW4sIFwiXFx1MkE1RVwiLCBcIlxcXFxkb3VibGViYXJ3ZWRnZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyOUZcIiwgXCJcXFxcYm94bWludXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjlFXCIsIFwiXFxcXGJveHBsdXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkM3XCIsIFwiXFxcXGRpdmlkZW9udGltZXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkM5XCIsIFwiXFxcXGx0aW1lc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyQ0FcIiwgXCJcXFxccnRpbWVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJDQlwiLCBcIlxcXFxsZWZ0dGhyZWV0aW1lc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyQ0NcIiwgXCJcXFxccmlnaHR0aHJlZXRpbWVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJDRlwiLCBcIlxcXFxjdXJseXdlZGdlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJDRVwiLCBcIlxcXFxjdXJseXZlZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyOURcIiwgXCJcXFxcY2lyY2xlZGRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjlCXCIsIFwiXFxcXGNpcmNsZWRhc3RcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkM1XCIsIFwiXFxcXGNlbnRlcmRvdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyQkFcIiwgXCJcXFxcaW50ZXJjYWxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkQyXCIsIFwiXFxcXGRvdWJsZWNhcFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyRDNcIiwgXCJcXFxcZG91YmxlY3VwXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJBMFwiLCBcIlxcXFxib3h0aW1lc1wiLCB0cnVlKTsgLy8gQU1TIEFycm93c1xuLy8gTm90ZTogdW5pY29kZS1tYXRoIG1hcHMgXFx1MjFlMiB0byB0aGVpciBvd24gZnVuY3Rpb24gXFxyaWdodGRhc2hhcnJvdy5cbi8vIFdlJ2xsIG1hcCBpdCB0byBBTVMgZnVuY3Rpb24gXFxkYXNocmlnaHRhcnJvdy4gSXQgcHJvZHVjZXMgdGhlIHNhbWUgYXRvbS5cblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFFMlwiLCBcIlxcXFxkYXNocmlnaHRhcnJvd1wiLCB0cnVlKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgXFx1MjFlMCB0byBcXGxlZnRkYXNoYXJyb3cuIFdlJ2xsIHVzZSB0aGUgQU1TIHN5bm9ueW0uXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxRTBcIiwgXCJcXFxcZGFzaGxlZnRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQzdcIiwgXCJcXFxcbGVmdGxlZnRhcnJvd3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUM2XCIsIFwiXFxcXGxlZnRyaWdodGFycm93c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxREFcIiwgXCJcXFxcTGxlZnRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxOUVcIiwgXCJcXFxcdHdvaGVhZGxlZnRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQTJcIiwgXCJcXFxcbGVmdGFycm93dGFpbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQUJcIiwgXCJcXFxcbG9vcGFycm93bGVmdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQ0JcIiwgXCJcXFxcbGVmdHJpZ2h0aGFycG9vbnNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUI2XCIsIFwiXFxcXGN1cnZlYXJyb3dsZWZ0XCIsIHRydWUpOyAvLyB1bmljb2RlLW1hdGggbWFwcyBcXHUyMWJhIHRvIFxcYWN3b3BlbmNpcmNsZWFycm93LiBXZSdsbCB1c2UgdGhlIEFNUyBzeW5vbnltLlxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUJBXCIsIFwiXFxcXGNpcmNsZWFycm93bGVmdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQjBcIiwgXCJcXFxcTHNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDOFwiLCBcIlxcXFx1cHVwYXJyb3dzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFCRlwiLCBcIlxcXFx1cGhhcnBvb25sZWZ0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDM1wiLCBcIlxcXFxkb3duaGFycG9vbmxlZnRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkI4XCIsIFwiXFxcXG11bHRpbWFwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFBRFwiLCBcIlxcXFxsZWZ0cmlnaHRzcXVpZ2Fycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDOVwiLCBcIlxcXFxyaWdodHJpZ2h0YXJyb3dzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDNFwiLCBcIlxcXFxyaWdodGxlZnRhcnJvd3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUEwXCIsIFwiXFxcXHR3b2hlYWRyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFBM1wiLCBcIlxcXFxyaWdodGFycm93dGFpbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQUNcIiwgXCJcXFxcbG9vcGFycm93cmlnaHRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUI3XCIsIFwiXFxcXGN1cnZlYXJyb3dyaWdodFwiLCB0cnVlKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgXFx1MjFiYiB0byBcXGN3b3BlbmNpcmNsZWFycm93LiBXZSdsbCB1c2UgdGhlIEFNUyBzeW5vbnltLlxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUJCXCIsIFwiXFxcXGNpcmNsZWFycm93cmlnaHRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUIxXCIsIFwiXFxcXFJzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQ0FcIiwgXCJcXFxcZG93bmRvd25hcnJvd3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUJFXCIsIFwiXFxcXHVwaGFycG9vbnJpZ2h0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDMlwiLCBcIlxcXFxkb3duaGFycG9vbnJpZ2h0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFERFwiLCBcIlxcXFxyaWdodHNxdWlnYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUREXCIsIFwiXFxcXGxlYWRzdG9cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMURCXCIsIFwiXFxcXFJyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFCRVwiLCBcIlxcXFxyZXN0cmljdGlvblwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDE4XCIsIFwiYFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCIkXCIsIFwiXFxcXCRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiJFwiLCBcIlxcXFwkXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIiRcIiwgXCJcXFxcdGV4dGRvbGxhclwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCIlXCIsIFwiXFxcXCVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiJVwiLCBcIlxcXFwlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIl9cIiwgXCJcXFxcX1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJfXCIsIFwiXFxcXF9cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiX1wiLCBcIlxcXFx0ZXh0dW5kZXJzY29yZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjIwXCIsIFwiXFxcXGFuZ2xlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyMUVcIiwgXCJcXFxcaW5mdHlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjAzMlwiLCBcIlxcXFxwcmltZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyNUIzXCIsIFwiXFxcXHRyaWFuZ2xlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTAzOTNcIiwgXCJcXFxcR2FtbWFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MDM5NFwiLCBcIlxcXFxEZWx0YVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwMzk4XCIsIFwiXFxcXFRoZXRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTAzOUJcIiwgXCJcXFxcTGFtYmRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTAzOUVcIiwgXCJcXFxcWGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MDNBMFwiLCBcIlxcXFxQaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwM0EzXCIsIFwiXFxcXFNpZ21hXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTAzQTVcIiwgXCJcXFxcVXBzaWxvblwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwM0E2XCIsIFwiXFxcXFBoaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwM0E4XCIsIFwiXFxcXFBzaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwM0E5XCIsIFwiXFxcXE9tZWdhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIkFcIiwgXCJcXHUwMzkxXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIkJcIiwgXCJcXHUwMzkyXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIkVcIiwgXCJcXHUwMzk1XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlpcIiwgXCJcXHUwMzk2XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIkhcIiwgXCJcXHUwMzk3XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIklcIiwgXCJcXHUwMzk5XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIktcIiwgXCJcXHUwMzlBXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIk1cIiwgXCJcXHUwMzlDXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIk5cIiwgXCJcXHUwMzlEXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIk9cIiwgXCJcXHUwMzlGXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlBcIiwgXCJcXHUwM0ExXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlRcIiwgXCJcXHUwM0E0XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlhcIiwgXCJcXHUwM0E3XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxceEFDXCIsIFwiXFxcXG5lZ1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHhBQ1wiLCBcIlxcXFxsbm90XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyQTRcIiwgXCJcXFxcdG9wXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyQTVcIiwgXCJcXFxcYm90XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyMDVcIiwgXCJcXFxcZW1wdHlzZXRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjA1XCIsIFwiXFxcXHZhcm5vdGhpbmdcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQjFcIiwgXCJcXFxcYWxwaGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQjJcIiwgXCJcXFxcYmV0YVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNCM1wiLCBcIlxcXFxnYW1tYVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNCNFwiLCBcIlxcXFxkZWx0YVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNGNVwiLCBcIlxcXFxlcHNpbG9uXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0I2XCIsIFwiXFxcXHpldGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQjdcIiwgXCJcXFxcZXRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0I4XCIsIFwiXFxcXHRoZXRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0I5XCIsIFwiXFxcXGlvdGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQkFcIiwgXCJcXFxca2FwcGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQkJcIiwgXCJcXFxcbGFtYmRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0JDXCIsIFwiXFxcXG11XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0JEXCIsIFwiXFxcXG51XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0JFXCIsIFwiXFxcXHhpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0JGXCIsIFwiXFxcXG9taWNyb25cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQzBcIiwgXCJcXFxccGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQzFcIiwgXCJcXFxccmhvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0MzXCIsIFwiXFxcXHNpZ21hXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0M0XCIsIFwiXFxcXHRhdVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNDNVwiLCBcIlxcXFx1cHNpbG9uXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0Q1XCIsIFwiXFxcXHBoaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNDN1wiLCBcIlxcXFxjaGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQzhcIiwgXCJcXFxccHNpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0M5XCIsIFwiXFxcXG9tZWdhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0I1XCIsIFwiXFxcXHZhcmVwc2lsb25cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzRDFcIiwgXCJcXFxcdmFydGhldGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzRDZcIiwgXCJcXFxcdmFycGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzRjFcIiwgXCJcXFxcdmFycmhvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0MyXCIsIFwiXFxcXHZhcnNpZ21hXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0M2XCIsIFwiXFxcXHZhcnBoaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjE3XCIsIFwiKlwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCIrXCIsIFwiK1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjEyXCIsIFwiLVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMkM1XCIsIFwiXFxcXGNkb3RcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxOFwiLCBcIlxcXFxjaXJjXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxceEY3XCIsIFwiXFxcXGRpdlwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHhCMVwiLCBcIlxcXFxwbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHhEN1wiLCBcIlxcXFx0aW1lc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjI5XCIsIFwiXFxcXGNhcFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjJBXCIsIFwiXFxcXGN1cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjE2XCIsIFwiXFxcXHNldG1pbnVzXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyMjdcIiwgXCJcXFxcbGFuZFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjI4XCIsIFwiXFxcXGxvclwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjI3XCIsIFwiXFxcXHdlZGdlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyMjhcIiwgXCJcXFxcdmVlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyMUFcIiwgXCJcXFxcc3VyZFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCIoXCIsIFwiKFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCJbXCIsIFwiW1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCJcXHUyN0U4XCIsIFwiXFxcXGxhbmdsZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCJcXHUyMjIzXCIsIFwiXFxcXGx2ZXJ0XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19vcGVuLCBcIlxcdTIyMjVcIiwgXCJcXFxcbFZlcnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2Nsb3NlLCBcIilcIiwgXCIpXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19jbG9zZSwgXCJdXCIsIFwiXVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfY2xvc2UsIFwiP1wiLCBcIj9cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2Nsb3NlLCBcIiFcIiwgXCIhXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19jbG9zZSwgXCJcXHUyN0U5XCIsIFwiXFxcXHJhbmdsZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfY2xvc2UsIFwiXFx1MjIyM1wiLCBcIlxcXFxydmVydFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfY2xvc2UsIFwiXFx1MjIyNVwiLCBcIlxcXFxyVmVydFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCI9XCIsIFwiPVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCI8XCIsIFwiPFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCI+XCIsIFwiPlwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCI6XCIsIFwiOlwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjQ4XCIsIFwiXFxcXGFwcHJveFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjQ1XCIsIFwiXFxcXGNvbmdcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjI2NVwiLCBcIlxcXFxnZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjY1XCIsIFwiXFxcXGdlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTkwXCIsIFwiXFxcXGdldHNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiPlwiLCBcIlxcXFxndFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjA4XCIsIFwiXFxcXGluXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdUUwMjBcIiwgXCJcXFxcQG5vdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjgyXCIsIFwiXFxcXHN1YnNldFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjgzXCIsIFwiXFxcXHN1cHNldFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjg2XCIsIFwiXFxcXHN1YnNldGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyODdcIiwgXCJcXFxcc3Vwc2V0ZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjg4XCIsIFwiXFxcXG5zdWJzZXRlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyODlcIiwgXCJcXFxcbnN1cHNldGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyQThcIiwgXCJcXFxcbW9kZWxzXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTBcIiwgXCJcXFxcbGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNjRcIiwgXCJcXFxcbGVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjI2NFwiLCBcIlxcXFxsZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiPFwiLCBcIlxcXFxsdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTkyXCIsIFwiXFxcXHJpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5MlwiLCBcIlxcXFx0b1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNzFcIiwgXCJcXFxcbmdlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNzBcIiwgXCJcXFxcbmxlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfc3BhY2luZywgXCJcXHhBMFwiLCBcIlxcXFwgXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19zcGFjaW5nLCBcIlxceEEwXCIsIFwiflwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfc3BhY2luZywgXCJcXHhBMFwiLCBcIlxcXFxzcGFjZVwiKTsgLy8gUmVmOiBMYVRlWCBTb3VyY2UgMmU6IFxcRGVjbGFyZVJvYnVzdENvbW1hbmR7XFxub2JyZWFrc3BhY2V9eyVcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19zcGFjaW5nLCBcIlxceEEwXCIsIFwiXFxcXG5vYnJlYWtzcGFjZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfc3BhY2luZywgXCJcXHhBMFwiLCBcIlxcXFwgXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19zcGFjaW5nLCBcIlxceEEwXCIsIFwiflwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfc3BhY2luZywgXCJcXHhBMFwiLCBcIlxcXFxzcGFjZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfc3BhY2luZywgXCJcXHhBMFwiLCBcIlxcXFxub2JyZWFrc3BhY2VcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3NwYWNpbmcsIG51bGwsIFwiXFxcXG5vYnJlYWtcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3NwYWNpbmcsIG51bGwsIFwiXFxcXGFsbG93YnJlYWtcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBwdW5jdCwgXCIsXCIsIFwiLFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHB1bmN0LCBcIjtcIiwgXCI7XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJCQ1wiLCBcIlxcXFxiYXJ3ZWRnZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyQkJcIiwgXCJcXFxcdmVlYmFyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOTlcIiwgXCJcXFxcb2RvdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjk1XCIsIFwiXFxcXG9wbHVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOTdcIiwgXCJcXFxcb3RpbWVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyMDJcIiwgXCJcXFxccGFydGlhbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjk4XCIsIFwiXFxcXG9zbGFzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyOUFcIiwgXCJcXFxcY2lyY2xlZGNpcmNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkExXCIsIFwiXFxcXGJveGRvdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyNUIzXCIsIFwiXFxcXGJpZ3RyaWFuZ2xldXBcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjVCRFwiLCBcIlxcXFxiaWd0cmlhbmdsZWRvd25cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjAyMFwiLCBcIlxcXFxkYWdnZXJcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjJDNFwiLCBcIlxcXFxkaWFtb25kXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyQzZcIiwgXCJcXFxcc3RhclwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyNUMzXCIsIFwiXFxcXHRyaWFuZ2xlbGVmdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyNUI5XCIsIFwiXFxcXHRyaWFuZ2xlcmlnaHRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX29wZW4sIFwie1wiLCBcIlxcXFx7XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIntcIiwgXCJcXFxce1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJ7XCIsIFwiXFxcXHRleHRicmFjZWxlZnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2Nsb3NlLCBcIn1cIiwgXCJcXFxcfVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJ9XCIsIFwiXFxcXH1cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwifVwiLCBcIlxcXFx0ZXh0YnJhY2VyaWdodFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCJ7XCIsIFwiXFxcXGxicmFjZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfY2xvc2UsIFwifVwiLCBcIlxcXFxyYnJhY2VcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX29wZW4sIFwiW1wiLCBcIlxcXFxsYnJhY2tcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiW1wiLCBcIlxcXFxsYnJhY2tcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2Nsb3NlLCBcIl1cIiwgXCJcXFxccmJyYWNrXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIl1cIiwgXCJcXFxccmJyYWNrXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19vcGVuLCBcIihcIiwgXCJcXFxcbHBhcmVuXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19jbG9zZSwgXCIpXCIsIFwiXFxcXHJwYXJlblwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCI8XCIsIFwiXFxcXHRleHRsZXNzXCIpOyAvLyBpbiBUMSBmb250ZW5jXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCI+XCIsIFwiXFxcXHRleHRncmVhdGVyXCIpOyAvLyBpbiBUMSBmb250ZW5jXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCJcXHUyMzBBXCIsIFwiXFxcXGxmbG9vclwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfY2xvc2UsIFwiXFx1MjMwQlwiLCBcIlxcXFxyZmxvb3JcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX29wZW4sIFwiXFx1MjMwOFwiLCBcIlxcXFxsY2VpbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfY2xvc2UsIFwiXFx1MjMwOVwiLCBcIlxcXFxyY2VpbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXFxcXCIsIFwiXFxcXGJhY2tzbGFzaFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjIzXCIsIFwifFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjIzXCIsIFwiXFxcXHZlcnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwifFwiLCBcIlxcXFx0ZXh0YmFyXCIpOyAvLyBpbiBUMSBmb250ZW5jXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjI1XCIsIFwiXFxcXHxcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjIyNVwiLCBcIlxcXFxWZXJ0XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyMjVcIiwgXCJcXFxcdGV4dGJhcmRibFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJ+XCIsIFwiXFxcXHRleHRhc2NpaXRpbGRlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcXFxcIiwgXCJcXFxcdGV4dGJhY2tzbGFzaFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJeXCIsIFwiXFxcXHRleHRhc2NpaWNpcmN1bVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTkxXCIsIFwiXFxcXHVwYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjFEMVwiLCBcIlxcXFxVcGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTNcIiwgXCJcXFxcZG93bmFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxRDNcIiwgXCJcXFxcRG93bmFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTVcIiwgXCJcXFxcdXBkb3duYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjFENVwiLCBcIlxcXFxVcGRvd25hcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG9wLCBcIlxcdTIyMTBcIiwgXCJcXFxcY29wcm9kXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgb3AsIFwiXFx1MjJDMVwiLCBcIlxcXFxiaWd2ZWVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyMkMwXCIsIFwiXFxcXGJpZ3dlZGdlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgb3AsIFwiXFx1MkEwNFwiLCBcIlxcXFxiaWd1cGx1c1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG9wLCBcIlxcdTIyQzJcIiwgXCJcXFxcYmlnY2FwXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgb3AsIFwiXFx1MjJDM1wiLCBcIlxcXFxiaWdjdXBcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJCXCIsIFwiXFxcXGludFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG9wLCBcIlxcdTIyMkJcIiwgXCJcXFxcaW50b3BcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJDXCIsIFwiXFxcXGlpbnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJEXCIsIFwiXFxcXGlpaW50XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIwRlwiLCBcIlxcXFxwcm9kXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIxMVwiLCBcIlxcXFxzdW1cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyQTAyXCIsIFwiXFxcXGJpZ290aW1lc1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG9wLCBcIlxcdTJBMDFcIiwgXCJcXFxcYmlnb3BsdXNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyQTAwXCIsIFwiXFxcXGJpZ29kb3RcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJFXCIsIFwiXFxcXG9pbnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJGXCIsIFwiXFxcXG9paW50XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIzMFwiLCBcIlxcXFxvaWlpbnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyQTA2XCIsIFwiXFxcXGJpZ3NxY3VwXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIyQlwiLCBcIlxcXFxzbWFsbGludFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfaW5uZXIsIFwiXFx1MjAyNlwiLCBcIlxcXFx0ZXh0ZWxsaXBzaXNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2lubmVyLCBcIlxcdTIwMjZcIiwgXCJcXFxcbWF0aGVsbGlwc2lzXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19pbm5lciwgXCJcXHUyMDI2XCIsIFwiXFxcXGxkb3RzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19pbm5lciwgXCJcXHUyMDI2XCIsIFwiXFxcXGxkb3RzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19pbm5lciwgXCJcXHUyMkVGXCIsIFwiXFxcXEBjZG90c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfaW5uZXIsIFwiXFx1MjJGMVwiLCBcIlxcXFxkZG90c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMkVFXCIsIFwiXFxcXHZhcnZkb3RzXCIpOyAvLyBcXHZkb3RzIGlzIGEgbWFjcm9cblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiXFx1MDJDQVwiLCBcIlxcXFxhY3V0ZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxcdTAyQ0JcIiwgXCJcXFxcZ3JhdmVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2FjY2VudCwgXCJcXHhBOFwiLCBcIlxcXFxkZG90XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiflwiLCBcIlxcXFx0aWxkZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxcdTAyQzlcIiwgXCJcXFxcYmFyXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiXFx1MDJEOFwiLCBcIlxcXFxicmV2ZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxcdTAyQzdcIiwgXCJcXFxcY2hlY2tcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2FjY2VudCwgXCJeXCIsIFwiXFxcXGhhdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxcdTIwRDdcIiwgXCJcXFxcdmVjXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiXFx1MDJEOVwiLCBcIlxcXFxkb3RcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2FjY2VudCwgXCJcXHUwMkRBXCIsIFwiXFxcXG1hdGhyaW5nXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwMTMxXCIsIFwiXFxcXGltYXRoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwMjM3XCIsIFwiXFxcXGptYXRoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTAxMzFcIiwgXCJcXFxcaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwMjM3XCIsIFwiXFxcXGpcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4REZcIiwgXCJcXFxcc3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4RTZcIiwgXCJcXFxcYWVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4RTZcIiwgXCJcXFxcYWVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MDE1M1wiLCBcIlxcXFxvZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHhGOFwiLCBcIlxcXFxvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxceEM2XCIsIFwiXFxcXEFFXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTAxNTJcIiwgXCJcXFxcT0VcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4RDhcIiwgXCJcXFxcT1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxcdTAyQ0FcIiwgXCJcXFxcJ1wiKTsgLy8gYWN1dGVcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiXFx1MDJDQlwiLCBcIlxcXFxgXCIpOyAvLyBncmF2ZVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX2FjY2VudCwgXCJcXHUwMkM2XCIsIFwiXFxcXF5cIik7IC8vIGNpcmN1bWZsZXhcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiXFx1MDJEQ1wiLCBcIlxcXFx+XCIpOyAvLyB0aWxkZVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX2FjY2VudCwgXCJcXHUwMkM5XCIsIFwiXFxcXD1cIik7IC8vIG1hY3JvblxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX2FjY2VudCwgXCJcXHUwMkQ4XCIsIFwiXFxcXHVcIik7IC8vIGJyZXZlXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxcdTAyRDlcIiwgXCJcXFxcLlwiKTsgLy8gZG90IGFib3ZlXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxcdTAyREFcIiwgXCJcXFxcclwiKTsgLy8gcmluZyBhYm92ZVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX2FjY2VudCwgXCJcXHUwMkM3XCIsIFwiXFxcXHZcIik7IC8vIGNhcm9uXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxceEE4XCIsICdcXFxcXCInKTsgLy8gZGlhcmVzaXNcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiXFx1MDJERFwiLCBcIlxcXFxIXCIpOyAvLyBkb3VibGUgYWN1dGVcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiXFx1MjVFRlwiLCBcIlxcXFx0ZXh0Y2lyY2xlZFwiKTsgLy8gXFxiaWdjaXJjIGdseXBoXG4vLyBUaGVzZSBsaWdhdHVyZXMgYXJlIGRldGVjdGVkIGFuZCBjcmVhdGVkIGluIFBhcnNlci5qcydzIGBmb3JtTGlnYXR1cmVzYC5cblxudmFyIGxpZ2F0dXJlcyA9IHtcbiAgXCItLVwiOiB0cnVlLFxuICBcIi0tLVwiOiB0cnVlLFxuICBcImBgXCI6IHRydWUsXG4gIFwiJydcIjogdHJ1ZVxufTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDEzXCIsIFwiLS1cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjAxM1wiLCBcIlxcXFx0ZXh0ZW5kYXNoXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMTRcIiwgXCItLS1cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjAxNFwiLCBcIlxcXFx0ZXh0ZW1kYXNoXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMThcIiwgXCJgXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMThcIiwgXCJcXFxcdGV4dHF1b3RlbGVmdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDE5XCIsIFwiJ1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDE5XCIsIFwiXFxcXHRleHRxdW90ZXJpZ2h0XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMUNcIiwgXCJgYFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDFDXCIsIFwiXFxcXHRleHRxdW90ZWRibGxlZnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjAxRFwiLCBcIicnXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMURcIiwgXCJcXFxcdGV4dHF1b3RlZGJscmlnaHRcIik7IC8vICBcXGRlZ3JlZSBmcm9tIGdlbnN5bWIgcGFja2FnZVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4QjBcIiwgXCJcXFxcZGVncmVlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxceEIwXCIsIFwiXFxcXGRlZ3JlZVwiKTsgLy8gXFx0ZXh0ZGVncmVlIGZyb20gaW5wdXRlbmMgcGFja2FnZVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4QjBcIiwgXCJcXFxcdGV4dGRlZ3JlZVwiLCB0cnVlKTsgLy8gVE9ETzogSW4gTGFUZVgsIFxccG91bmRzIGNhbiBnZW5lcmF0ZSBhIGRpZmZlcmVudCBjaGFyYWN0ZXIgaW4gdGV4dCBhbmQgbWF0aFxuLy8gbW9kZSwgYnV0IGFtb25nIG91ciBmb250cywgb25seSBNYWluLUl0YWxpYyBkZWZpbmVzIHRoaXMgY2hhcmFjdGVyIFwiMTYzXCIuXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx4QTNcIiwgXCJcXFxccG91bmRzXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHhBM1wiLCBcIlxcXFxtYXRoc3RlcmxpbmdcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBtYXRob3JkLCBcIlxceEEzXCIsIFwiXFxcXHBvdW5kc1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIG1hdGhvcmQsIFwiXFx4QTNcIiwgXCJcXFxcdGV4dHN0ZXJsaW5nXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjcyMFwiLCBcIlxcXFxtYWx0ZXNlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjcyMFwiLCBcIlxcXFxtYWx0ZXNlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19zcGFjaW5nLCBcIlxceEEwXCIsIFwiXFxcXCBcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3NwYWNpbmcsIFwiXFx4QTBcIiwgXCIgXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19zcGFjaW5nLCBcIlxceEEwXCIsIFwiflwiKTsgLy8gVGhlcmUgYXJlIGxvdHMgb2Ygc3ltYm9scyB3aGljaCBhcmUgdGhlIHNhbWUsIHNvIHdlIGFkZCB0aGVtIGluIGFmdGVyd2FyZHMuXG4vLyBBbGwgb2YgdGhlc2UgYXJlIHRleHRvcmRzIGluIG1hdGggbW9kZVxuXG52YXIgbWF0aFRleHRTeW1ib2xzID0gXCIwMTIzNDU2Nzg5L0AuXFxcIlwiO1xuXG5mb3IgKHZhciBzeW1ib2xzX2kgPSAwOyBzeW1ib2xzX2kgPCBtYXRoVGV4dFN5bWJvbHMubGVuZ3RoOyBzeW1ib2xzX2krKykge1xuICB2YXIgc3ltYm9sc19jaCA9IG1hdGhUZXh0U3ltYm9scy5jaGFyQXQoc3ltYm9sc19pKTtcbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBzeW1ib2xzX2NoLCBzeW1ib2xzX2NoKTtcbn0gLy8gQWxsIG9mIHRoZXNlIGFyZSB0ZXh0b3JkcyBpbiB0ZXh0IG1vZGVcblxuXG52YXIgdGV4dFN5bWJvbHMgPSBcIjAxMjM0NTY3ODkhQCooKS09K1tdPD58XFxcIjs6Py8uLFwiO1xuXG5mb3IgKHZhciBzcmNfc3ltYm9sc19pID0gMDsgc3JjX3N5bWJvbHNfaSA8IHRleHRTeW1ib2xzLmxlbmd0aDsgc3JjX3N5bWJvbHNfaSsrKSB7XG4gIHZhciBfY2ggPSB0ZXh0U3ltYm9scy5jaGFyQXQoc3JjX3N5bWJvbHNfaSk7XG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBfY2gsIF9jaCk7XG59IC8vIEFsbCBvZiB0aGVzZSBhcmUgdGV4dG9yZHMgaW4gdGV4dCBtb2RlLCBhbmQgbWF0aG9yZHMgaW4gbWF0aCBtb2RlXG5cblxudmFyIGxldHRlcnMgPSBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjtcblxuZm9yICh2YXIgc3ltYm9sc19pMiA9IDA7IHN5bWJvbHNfaTIgPCBsZXR0ZXJzLmxlbmd0aDsgc3ltYm9sc19pMisrKSB7XG4gIHZhciBfY2gyID0gbGV0dGVycy5jaGFyQXQoc3ltYm9sc19pMik7XG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMiwgX2NoMik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoMiwgX2NoMik7XG59IC8vIEJsYWNrYm9hcmQgYm9sZCBhbmQgc2NyaXB0IGxldHRlcnMgaW4gVW5pY29kZSByYW5nZVxuXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIkNcIiwgXCJcXHUyMTAyXCIpOyAvLyBibGFja2JvYXJkIGJvbGRcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiQ1wiLCBcIlxcdTIxMDJcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJIXCIsIFwiXFx1MjEwRFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIkhcIiwgXCJcXHUyMTBEXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiTlwiLCBcIlxcdTIxMTVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJOXCIsIFwiXFx1MjExNVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlBcIiwgXCJcXHUyMTE5XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiUFwiLCBcIlxcdTIxMTlcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJRXCIsIFwiXFx1MjExQVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlFcIiwgXCJcXHUyMTFBXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiUlwiLCBcIlxcdTIxMURcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJSXCIsIFwiXFx1MjExRFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlpcIiwgXCJcXHUyMTI0XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiWlwiLCBcIlxcdTIxMjRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcImhcIiwgXCJcXHUyMTBFXCIpOyAvLyBpdGFsaWMgaCwgUGxhbmNrIGNvbnN0YW50XG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIG1hdGhvcmQsIFwiaFwiLCBcIlxcdTIxMEVcIik7IC8vIFRoZSBuZXh0IGxvb3AgbG9hZHMgd2lkZSAoc3Vycm9nYXRlIHBhaXIpIGNoYXJhY3RlcnMuXG4vLyBXZSBzdXBwb3J0IHNvbWUgbGV0dGVycyBpbiB0aGUgVW5pY29kZSByYW5nZSBVKzFENDAwIHRvIFUrMUQ3RkYsXG4vLyBNYXRoZW1hdGljYWwgQWxwaGFudW1lcmljIFN5bWJvbHMuXG4vLyBTb21lIGVkaXRvcnMgZG8gbm90IGRlYWwgd2VsbCB3aXRoIHdpZGUgY2hhcmFjdGVycy4gU28gZG9uJ3Qgd3JpdGUgdGhlXG4vLyBzdHJpbmcgaW50byB0aGlzIGZpbGUuIEluc3RlYWQsIGNyZWF0ZSB0aGUgc3RyaW5nIGZyb20gdGhlIHN1cnJvZ2F0ZSBwYWlyLlxuXG52YXIgc3ltYm9sc193aWRlQ2hhciA9IFwiXCI7XG5cbmZvciAodmFyIHN5bWJvbHNfaTMgPSAwOyBzeW1ib2xzX2kzIDwgbGV0dGVycy5sZW5ndGg7IHN5bWJvbHNfaTMrKykge1xuICB2YXIgX2NoMyA9IGxldHRlcnMuY2hhckF0KHN5bWJvbHNfaTMpOyAvLyBUaGUgaGV4IG51bWJlcnMgaW4gdGhlIG5leHQgbGluZSBhcmUgYSBzdXJyb2dhdGUgcGFpci5cbiAgLy8gMHhEODM1IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBmb3IgYWxsIGxldHRlcnMgaW4gdGhlIHJhbmdlIHdlIHN1cHBvcnQuXG4gIC8vIDB4REMwMCBpcyB0aGUgbG93IHN1cnJvZ2F0ZSBmb3IgYm9sZCBBLlxuXG5cbiAgc3ltYm9sc193aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweERDMDAgKyBzeW1ib2xzX2kzKTsgLy8gQS1aIGEteiBib2xkXG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIHN5bWJvbHNfd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhEQzM0ICsgc3ltYm9sc19pMyk7IC8vIEEtWiBhLXogaXRhbGljXG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIHN5bWJvbHNfd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhEQzY4ICsgc3ltYm9sc19pMyk7IC8vIEEtWiBhLXogYm9sZCBpdGFsaWNcblxuICBkZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBfY2gzLCBzeW1ib2xzX3dpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBfY2gzLCBzeW1ib2xzX3dpZGVDaGFyKTtcbiAgc3ltYm9sc193aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweEREMDQgKyBzeW1ib2xzX2kzKTsgLy8gQS1aIGEteiBGcmFjdHVyXG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIHN5bWJvbHNfd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhEREEwICsgc3ltYm9sc19pMyk7IC8vIEEtWiBhLXogc2Fucy1zZXJpZlxuXG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDMsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIF9jaDMsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBzeW1ib2xzX3dpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4RERENCArIHN5bWJvbHNfaTMpOyAvLyBBLVogYS16IHNhbnMgYm9sZFxuXG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDMsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIF9jaDMsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBzeW1ib2xzX3dpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REUwOCArIHN5bWJvbHNfaTMpOyAvLyBBLVogYS16IHNhbnMgaXRhbGljXG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIHN5bWJvbHNfd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERTcwICsgc3ltYm9sc19pMyk7IC8vIEEtWiBhLXogbW9ub3NwYWNlXG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG5cbiAgaWYgKHN5bWJvbHNfaTMgPCAyNikge1xuICAgIC8vIEthVGVYIGZvbnRzIGhhdmUgb25seSBjYXBpdGFsIGxldHRlcnMgZm9yIGJsYWNrYm9hcmQgYm9sZCBhbmQgc2NyaXB0LlxuICAgIC8vIFNlZSBleGNlcHRpb24gZm9yIGsgYmVsb3cuXG4gICAgc3ltYm9sc193aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweEREMzggKyBzeW1ib2xzX2kzKTsgLy8gQS1aIGRvdWJsZSBzdHJ1Y2tcblxuICAgIGRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDMsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICAgIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gICAgc3ltYm9sc193aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweERDOUMgKyBzeW1ib2xzX2kzKTsgLy8gQS1aIHNjcmlwdFxuXG4gICAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gICAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBfY2gzLCBzeW1ib2xzX3dpZGVDaGFyKTtcbiAgfSAvLyBUT0RPOiBBZGQgYm9sZCBzY3JpcHQgd2hlbiBpdCBpcyBzdXBwb3J0ZWQgYnkgYSBLYVRlWCBmb250LlxuXG59IC8vIFwia1wiIGlzIHRoZSBvbmx5IGRvdWJsZSBzdHJ1Y2sgbG93ZXIgY2FzZSBsZXR0ZXIgaW4gdGhlIEthVGVYIGZvbnRzLlxuXG5cbnN5bWJvbHNfd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERDVDKTsgLy8gayBkb3VibGUgc3RydWNrXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIFwia1wiLCBzeW1ib2xzX3dpZGVDaGFyKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJrXCIsIHN5bWJvbHNfd2lkZUNoYXIpOyAvLyBOZXh0LCBzb21lIHdpZGUgY2hhcmFjdGVyIG51bWVyYWxzXG5cbmZvciAodmFyIHN5bWJvbHNfaTQgPSAwOyBzeW1ib2xzX2k0IDwgMTA7IHN5bWJvbHNfaTQrKykge1xuICB2YXIgX2NoNCA9IHN5bWJvbHNfaTQudG9TdHJpbmcoKTtcblxuICBzeW1ib2xzX3dpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REZDRSArIHN5bWJvbHNfaTQpOyAvLyAwLTkgYm9sZFxuXG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDQsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIF9jaDQsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBzeW1ib2xzX3dpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REZFMiArIHN5bWJvbHNfaTQpOyAvLyAwLTkgc2FucyBzZXJpZlxuXG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDQsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIF9jaDQsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBzeW1ib2xzX3dpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REZFQyArIHN5bWJvbHNfaTQpOyAvLyAwLTkgYm9sZCBzYW5zXG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoNCwgc3ltYm9sc193aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoNCwgc3ltYm9sc193aWRlQ2hhcik7XG4gIHN5bWJvbHNfd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERkY2ICsgc3ltYm9sc19pNCk7IC8vIDAtOSBtb25vc3BhY2VcblxuICBkZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBfY2g0LCBzeW1ib2xzX3dpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBfY2g0LCBzeW1ib2xzX3dpZGVDaGFyKTtcbn0gLy8gV2UgYWRkIHRoZXNlIExhdGluLTEgbGV0dGVycyBhcyBzeW1ib2xzIGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSxcbi8vIGJ1dCB0aGV5IGFyZSBub3QgYWN0dWFsbHkgaW4gdGhlIGZvbnQsIG5vciBhcmUgdGhleSBzdXBwb3J0ZWQgYnkgdGhlXG4vLyBVbmljb2RlIGFjY2VudCBtZWNoYW5pc20sIHNvIHRoZXkgZmFsbCBiYWNrIHRvIFRpbWVzIGZvbnQgYW5kIGxvb2sgdWdseS5cbi8vIFRPRE8oZWRlbWFpbmUpOiBGaXggdGhpcy5cblxuXG52YXIgZXh0cmFMYXRpbiA9IFwiw4fDkMOew6fDvlwiO1xuXG5mb3IgKHZhciBfaTUgPSAwOyBfaTUgPCBleHRyYUxhdGluLmxlbmd0aDsgX2k1KyspIHtcbiAgdmFyIF9jaDUgPSBleHRyYUxhdGluLmNoYXJBdChfaTUpO1xuXG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDUsIF9jaDUpO1xuICBkZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIF9jaDUsIF9jaDUpO1xufVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiw7BcIiwgXCLDsFwiKTsgLy8gVW5pY29kZSB2ZXJzaW9ucyBvZiBleGlzdGluZyBjaGFyYWN0ZXJzXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDEzXCIsIFwi4oCTXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMTRcIiwgXCLigJRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjAxOFwiLCBcIuKAmFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDE5XCIsIFwi4oCZXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMUNcIiwgXCLigJxcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjAxRFwiLCBcIuKAnVwiKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3dpZGUtY2hhcmFjdGVyLmpzXG4vKipcbiAqIFRoaXMgZmlsZSBwcm92aWRlcyBzdXBwb3J0IGZvciBVbmljb2RlIHJhbmdlIFUrMUQ0MDAgdG8gVSsxRDdGRixcbiAqIE1hdGhlbWF0aWNhbCBBbHBoYW51bWVyaWMgU3ltYm9scy5cbiAqXG4gKiBGdW5jdGlvbiB3aWRlQ2hhcmFjdGVyRm9udCB0YWtlcyBhIHdpZGUgY2hhcmFjdGVyIGFzIGlucHV0IGFuZCByZXR1cm5zXG4gKiB0aGUgZm9udCBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8gcmVuZGVyIGl0IHByb3Blcmx5LlxuICovXG5cbi8qKlxuICogRGF0YSBiZWxvdyBpcyBmcm9tIGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL2NoYXJ0cy9QREYvVTFENDAwLnBkZlxuICogVGhhdCBkb2N1bWVudCBzb3J0cyBjaGFyYWN0ZXJzIGludG8gZ3JvdXBzIGJ5IGZvbnQgdHlwZSwgc2F5IGJvbGQgb3IgaXRhbGljLlxuICpcbiAqIEluIHRoZSBhcnJheXMgYmVsb3csIGVhY2ggc3ViYXJyYXkgY29uc2lzdHMgdGhyZWUgZWxlbWVudHM6XG4gKiAgICAgICogVGhlIENTUyBjbGFzcyBvZiB0aGF0IGdyb3VwIHdoZW4gaW4gbWF0aCBtb2RlLlxuICogICAgICAqIFRoZSBDU1MgY2xhc3Mgb2YgdGhhdCBncm91cCB3aGVuIGluIHRleHQgbW9kZS5cbiAqICAgICAgKiBUaGUgZm9udCBuYW1lLCBzbyB0aGF0IEthVGVYIGNhbiBnZXQgZm9udCBtZXRyaWNzLlxuICovXG5cbnZhciB3aWRlTGF0aW5MZXR0ZXJEYXRhID0gW1tcIm1hdGhiZlwiLCBcInRleHRiZlwiLCBcIk1haW4tQm9sZFwiXSwgLy8gQS1aIGJvbGQgdXByaWdodFxuW1wibWF0aGJmXCIsIFwidGV4dGJmXCIsIFwiTWFpbi1Cb2xkXCJdLCAvLyBhLXogYm9sZCB1cHJpZ2h0XG5bXCJtYXRoZGVmYXVsdFwiLCBcInRleHRpdFwiLCBcIk1hdGgtSXRhbGljXCJdLCAvLyBBLVogaXRhbGljXG5bXCJtYXRoZGVmYXVsdFwiLCBcInRleHRpdFwiLCBcIk1hdGgtSXRhbGljXCJdLCAvLyBhLXogaXRhbGljXG5bXCJib2xkc3ltYm9sXCIsIFwiYm9sZHN5bWJvbFwiLCBcIk1haW4tQm9sZEl0YWxpY1wiXSwgLy8gQS1aIGJvbGQgaXRhbGljXG5bXCJib2xkc3ltYm9sXCIsIFwiYm9sZHN5bWJvbFwiLCBcIk1haW4tQm9sZEl0YWxpY1wiXSwgLy8gYS16IGJvbGQgaXRhbGljXG4vLyBNYXAgZmFuY3kgQS1aIGxldHRlcnMgdG8gc2NyaXB0LCBub3QgY2FsbGlncmFwaGljLlxuLy8gVGhpcyBhbGlnbnMgd2l0aCB1bmljb2RlLW1hdGggYW5kIG1hdGggZm9udHMgKGV4Y2VwdCBDYW1icmlhIE1hdGgpLlxuW1wibWF0aHNjclwiLCBcInRleHRzY3JcIiwgXCJTY3JpcHQtUmVndWxhclwiXSwgLy8gQS1aIHNjcmlwdFxuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBhLXogc2NyaXB0LiAgTm8gZm9udFxuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBBLVogYm9sZCBzY3JpcHQuIE5vIGZvbnRcbltcIlwiLCBcIlwiLCBcIlwiXSwgLy8gYS16IGJvbGQgc2NyaXB0LiBObyBmb250XG5bXCJtYXRoZnJha1wiLCBcInRleHRmcmFrXCIsIFwiRnJha3R1ci1SZWd1bGFyXCJdLCAvLyBBLVogRnJha3R1clxuW1wibWF0aGZyYWtcIiwgXCJ0ZXh0ZnJha1wiLCBcIkZyYWt0dXItUmVndWxhclwiXSwgLy8gYS16IEZyYWt0dXJcbltcIm1hdGhiYlwiLCBcInRleHRiYlwiLCBcIkFNUy1SZWd1bGFyXCJdLCAvLyBBLVogZG91YmxlLXN0cnVja1xuW1wibWF0aGJiXCIsIFwidGV4dGJiXCIsIFwiQU1TLVJlZ3VsYXJcIl0sIC8vIGsgZG91YmxlLXN0cnVja1xuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBBLVogYm9sZCBGcmFrdHVyIE5vIGZvbnQgbWV0cmljc1xuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBhLXogYm9sZCBGcmFrdHVyLiAgIE5vIGZvbnQuXG5bXCJtYXRoc2ZcIiwgXCJ0ZXh0c2ZcIiwgXCJTYW5zU2VyaWYtUmVndWxhclwiXSwgLy8gQS1aIHNhbnMtc2VyaWZcbltcIm1hdGhzZlwiLCBcInRleHRzZlwiLCBcIlNhbnNTZXJpZi1SZWd1bGFyXCJdLCAvLyBhLXogc2Fucy1zZXJpZlxuW1wibWF0aGJvbGRzZlwiLCBcInRleHRib2xkc2ZcIiwgXCJTYW5zU2VyaWYtQm9sZFwiXSwgLy8gQS1aIGJvbGQgc2Fucy1zZXJpZlxuW1wibWF0aGJvbGRzZlwiLCBcInRleHRib2xkc2ZcIiwgXCJTYW5zU2VyaWYtQm9sZFwiXSwgLy8gYS16IGJvbGQgc2Fucy1zZXJpZlxuW1wibWF0aGl0c2ZcIiwgXCJ0ZXh0aXRzZlwiLCBcIlNhbnNTZXJpZi1JdGFsaWNcIl0sIC8vIEEtWiBpdGFsaWMgc2Fucy1zZXJpZlxuW1wibWF0aGl0c2ZcIiwgXCJ0ZXh0aXRzZlwiLCBcIlNhbnNTZXJpZi1JdGFsaWNcIl0sIC8vIGEteiBpdGFsaWMgc2Fucy1zZXJpZlxuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBBLVogYm9sZCBpdGFsaWMgc2Fucy4gTm8gZm9udFxuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBhLXogYm9sZCBpdGFsaWMgc2Fucy4gTm8gZm9udFxuW1wibWF0aHR0XCIsIFwidGV4dHR0XCIsIFwiVHlwZXdyaXRlci1SZWd1bGFyXCJdLCAvLyBBLVogbW9ub3NwYWNlXG5bXCJtYXRodHRcIiwgXCJ0ZXh0dHRcIiwgXCJUeXBld3JpdGVyLVJlZ3VsYXJcIl1dO1xudmFyIHdpZGVOdW1lcmFsRGF0YSA9IFtbXCJtYXRoYmZcIiwgXCJ0ZXh0YmZcIiwgXCJNYWluLUJvbGRcIl0sIC8vIDAtOSBib2xkXG5bXCJcIiwgXCJcIiwgXCJcIl0sIC8vIDAtOSBkb3VibGUtc3RydWNrLiBObyBLYVRlWCBmb250LlxuW1wibWF0aHNmXCIsIFwidGV4dHNmXCIsIFwiU2Fuc1NlcmlmLVJlZ3VsYXJcIl0sIC8vIDAtOSBzYW5zLXNlcmlmXG5bXCJtYXRoYm9sZHNmXCIsIFwidGV4dGJvbGRzZlwiLCBcIlNhbnNTZXJpZi1Cb2xkXCJdLCAvLyAwLTkgYm9sZCBzYW5zLXNlcmlmXG5bXCJtYXRodHRcIiwgXCJ0ZXh0dHRcIiwgXCJUeXBld3JpdGVyLVJlZ3VsYXJcIl1dO1xudmFyIHdpZGVfY2hhcmFjdGVyX3dpZGVDaGFyYWN0ZXJGb250ID0gZnVuY3Rpb24gd2lkZUNoYXJhY3RlckZvbnQod2lkZUNoYXIsIG1vZGUpIHtcbiAgLy8gSUUgZG9lc24ndCBzdXBwb3J0IGNvZGVQb2ludEF0KCkuIFNvIHdvcmsgd2l0aCB0aGUgc3Vycm9nYXRlIHBhaXIuXG4gIHZhciBIID0gd2lkZUNoYXIuY2hhckNvZGVBdCgwKTsgLy8gaGlnaCBzdXJyb2dhdGVcblxuICB2YXIgTCA9IHdpZGVDaGFyLmNoYXJDb2RlQXQoMSk7IC8vIGxvdyBzdXJyb2dhdGVcblxuICB2YXIgY29kZVBvaW50ID0gKEggLSAweEQ4MDApICogMHg0MDAgKyAoTCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB2YXIgaiA9IG1vZGUgPT09IFwibWF0aFwiID8gMCA6IDE7IC8vIGNvbHVtbiBpbmRleCBmb3IgQ1NTIGNsYXNzLlxuXG4gIGlmICgweDFENDAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPCAweDFENkE0KSB7XG4gICAgLy8gd2lkZUxhdGluTGV0dGVyRGF0YSBjb250YWlucyBleGFjdGx5IDI2IGNoYXJzIG9uIGVhY2ggcm93LlxuICAgIC8vIFNvIHdlIGNhbiBjYWxjdWxhdGUgdGhlIHJlbGV2YW50IHJvdy4gTm8gdHJhdmVyc2UgbmVjZXNzYXJ5LlxuICAgIHZhciBpID0gTWF0aC5mbG9vcigoY29kZVBvaW50IC0gMHgxRDQwMCkgLyAyNik7XG4gICAgcmV0dXJuIFt3aWRlTGF0aW5MZXR0ZXJEYXRhW2ldWzJdLCB3aWRlTGF0aW5MZXR0ZXJEYXRhW2ldW2pdXTtcbiAgfSBlbHNlIGlmICgweDFEN0NFIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxRDdGRikge1xuICAgIC8vIE51bWVyYWxzLCB0ZW4gcGVyIHJvdy5cbiAgICB2YXIgX2kgPSBNYXRoLmZsb29yKChjb2RlUG9pbnQgLSAweDFEN0NFKSAvIDEwKTtcblxuICAgIHJldHVybiBbd2lkZU51bWVyYWxEYXRhW19pXVsyXSwgd2lkZU51bWVyYWxEYXRhW19pXVtqXV07XG4gIH0gZWxzZSBpZiAoY29kZVBvaW50ID09PSAweDFENkE1IHx8IGNvZGVQb2ludCA9PT0gMHgxRDZBNikge1xuICAgIC8vIGRvdGxlc3MgaSBvciBqXG4gICAgcmV0dXJuIFt3aWRlTGF0aW5MZXR0ZXJEYXRhWzBdWzJdLCB3aWRlTGF0aW5MZXR0ZXJEYXRhWzBdW2pdXTtcbiAgfSBlbHNlIGlmICgweDFENkE2IDwgY29kZVBvaW50ICYmIGNvZGVQb2ludCA8IDB4MUQ3Q0UpIHtcbiAgICAvLyBHcmVlayBsZXR0ZXJzLiBOb3Qgc3VwcG9ydGVkLCB5ZXQuXG4gICAgcmV0dXJuIFtcIlwiLCBcIlwiXTtcbiAgfSBlbHNlIHtcbiAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGFueSB3aWRlIGNoYXJhY3RlcnMgb3V0c2lkZSAxRDQwMOKAkzFEN0ZGLlxuICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlVuc3VwcG9ydGVkIGNoYXJhY3RlcjogXCIgKyB3aWRlQ2hhcik7XG4gIH1cbn07XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9PcHRpb25zLmpzXG4vKipcbiAqIFRoaXMgZmlsZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3B0aW9ucyB0aGF0IHRoZSBQYXJzZXIgY2Fycmllc1xuICogYXJvdW5kIHdpdGggaXQgd2hpbGUgcGFyc2luZy4gRGF0YSBpcyBoZWxkIGluIGFuIGBPcHRpb25zYCBvYmplY3QsIGFuZCB3aGVuXG4gKiByZWN1cnNpbmcsIGEgbmV3IGBPcHRpb25zYCBvYmplY3QgY2FuIGJlIGNyZWF0ZWQgd2l0aCB0aGUgYC53aXRoKmAgYW5kXG4gKiBgLnJlc2V0YCBmdW5jdGlvbnMuXG4gKi9cblxudmFyIHNpemVTdHlsZU1hcCA9IFsvLyBFYWNoIGVsZW1lbnQgY29udGFpbnMgW3RleHRzaXplLCBzY3JpcHRzaXplLCBzY3JpcHRzY3JpcHRzaXplXS5cbi8vIFRoZSBzaXplIG1hcHBpbmdzIGFyZSB0YWtlbiBmcm9tIFRlWCB3aXRoIFxcbm9ybWFsc2l6ZT0xMHB0LlxuWzEsIDEsIDFdLCAvLyBzaXplMTogWzUsIDUsIDVdICAgICAgICAgICAgICBcXHRpbnlcblsyLCAxLCAxXSwgLy8gc2l6ZTI6IFs2LCA1LCA1XVxuWzMsIDEsIDFdLCAvLyBzaXplMzogWzcsIDUsIDVdICAgICAgICAgICAgICBcXHNjcmlwdHNpemVcbls0LCAyLCAxXSwgLy8gc2l6ZTQ6IFs4LCA2LCA1XSAgICAgICAgICAgICAgXFxmb290bm90ZXNpemVcbls1LCAyLCAxXSwgLy8gc2l6ZTU6IFs5LCA2LCA1XSAgICAgICAgICAgICAgXFxzbWFsbFxuWzYsIDMsIDFdLCAvLyBzaXplNjogWzEwLCA3LCA1XSAgICAgICAgICAgICBcXG5vcm1hbHNpemVcbls3LCA0LCAyXSwgLy8gc2l6ZTc6IFsxMiwgOCwgNl0gICAgICAgICAgICAgXFxsYXJnZVxuWzgsIDYsIDNdLCAvLyBzaXplODogWzE0LjQsIDEwLCA3XSAgICAgICAgICBcXExhcmdlXG5bOSwgNywgNl0sIC8vIHNpemU5OiBbMTcuMjgsIDEyLCAxMF0gICAgICAgIFxcTEFSR0VcblsxMCwgOCwgN10sIC8vIHNpemUxMDogWzIwLjc0LCAxNC40LCAxMl0gICAgIFxcaHVnZVxuWzExLCAxMCwgOV1dO1xudmFyIHNpemVNdWx0aXBsaWVycyA9IFsvLyBmb250TWV0cmljcy5qczpnZXRHbG9iYWxNZXRyaWNzIGFsc28gdXNlcyBzaXplIGluZGV4ZXMsIHNvIGlmXG4vLyB5b3UgY2hhbmdlIHNpemUgaW5kZXhlcywgY2hhbmdlIHRoYXQgZnVuY3Rpb24uXG4wLjUsIDAuNiwgMC43LCAwLjgsIDAuOSwgMS4wLCAxLjIsIDEuNDQsIDEuNzI4LCAyLjA3NCwgMi40ODhdO1xuXG52YXIgc2l6ZUF0U3R5bGUgPSBmdW5jdGlvbiBzaXplQXRTdHlsZShzaXplLCBzdHlsZSkge1xuICByZXR1cm4gc3R5bGUuc2l6ZSA8IDIgPyBzaXplIDogc2l6ZVN0eWxlTWFwW3NpemUgLSAxXVtzdHlsZS5zaXplIC0gMV07XG59OyAvLyBJbiB0aGVzZSB0eXBlcywgXCJcIiAoZW1wdHkgc3RyaW5nKSBtZWFucyBcIm5vIGNoYW5nZVwiLlxuXG5cbi8qKlxuICogVGhpcyBpcyB0aGUgbWFpbiBvcHRpb25zIGNsYXNzLiBJdCBjb250YWlucyB0aGUgY3VycmVudCBzdHlsZSwgc2l6ZSwgY29sb3IsXG4gKiBhbmQgZm9udC5cbiAqXG4gKiBPcHRpb25zIG9iamVjdHMgc2hvdWxkIG5vdCBiZSBtb2RpZmllZC4gVG8gY3JlYXRlIGEgbmV3IE9wdGlvbnMgd2l0aFxuICogZGlmZmVyZW50IHByb3BlcnRpZXMsIGNhbGwgYSBgLmhhdmluZypgIG1ldGhvZC5cbiAqL1xudmFyIE9wdGlvbnNfT3B0aW9ucyA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIC8vIEEgZm9udCBmYW1pbHkgYXBwbGllcyB0byBhIGdyb3VwIG9mIGZvbnRzIChpLmUuIFNhbnNTZXJpZiksIHdoaWxlIGEgZm9udFxuICAvLyByZXByZXNlbnRzIGEgc3BlY2lmaWMgZm9udCAoaS5lLiBTYW5zU2VyaWYgQm9sZCkuXG4gIC8vIFNlZTogaHR0cHM6Ly90ZXguc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzIyMzUwL2RpZmZlcmVuY2UtYmV0d2Vlbi10ZXh0cm0tYW5kLW1hdGhybVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBzaXplIGluZGV4LlxuICAgKi9cbiAgZnVuY3Rpb24gT3B0aW9ucyhkYXRhKSB7XG4gICAgdGhpcy5zdHlsZSA9IHZvaWQgMDtcbiAgICB0aGlzLmNvbG9yID0gdm9pZCAwO1xuICAgIHRoaXMuc2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLnRleHRTaXplID0gdm9pZCAwO1xuICAgIHRoaXMucGhhbnRvbSA9IHZvaWQgMDtcbiAgICB0aGlzLmZvbnQgPSB2b2lkIDA7XG4gICAgdGhpcy5mb250RmFtaWx5ID0gdm9pZCAwO1xuICAgIHRoaXMuZm9udFdlaWdodCA9IHZvaWQgMDtcbiAgICB0aGlzLmZvbnRTaGFwZSA9IHZvaWQgMDtcbiAgICB0aGlzLnNpemVNdWx0aXBsaWVyID0gdm9pZCAwO1xuICAgIHRoaXMubWF4U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLm1pblJ1bGVUaGlja25lc3MgPSB2b2lkIDA7XG4gICAgdGhpcy5fZm9udE1ldHJpY3MgPSB2b2lkIDA7XG4gICAgdGhpcy5zdHlsZSA9IGRhdGEuc3R5bGU7XG4gICAgdGhpcy5jb2xvciA9IGRhdGEuY29sb3I7XG4gICAgdGhpcy5zaXplID0gZGF0YS5zaXplIHx8IE9wdGlvbnMuQkFTRVNJWkU7XG4gICAgdGhpcy50ZXh0U2l6ZSA9IGRhdGEudGV4dFNpemUgfHwgdGhpcy5zaXplO1xuICAgIHRoaXMucGhhbnRvbSA9ICEhZGF0YS5waGFudG9tO1xuICAgIHRoaXMuZm9udCA9IGRhdGEuZm9udCB8fCBcIlwiO1xuICAgIHRoaXMuZm9udEZhbWlseSA9IGRhdGEuZm9udEZhbWlseSB8fCBcIlwiO1xuICAgIHRoaXMuZm9udFdlaWdodCA9IGRhdGEuZm9udFdlaWdodCB8fCAnJztcbiAgICB0aGlzLmZvbnRTaGFwZSA9IGRhdGEuZm9udFNoYXBlIHx8ICcnO1xuICAgIHRoaXMuc2l6ZU11bHRpcGxpZXIgPSBzaXplTXVsdGlwbGllcnNbdGhpcy5zaXplIC0gMV07XG4gICAgdGhpcy5tYXhTaXplID0gZGF0YS5tYXhTaXplO1xuICAgIHRoaXMubWluUnVsZVRoaWNrbmVzcyA9IGRhdGEubWluUnVsZVRoaWNrbmVzcztcbiAgICB0aGlzLl9mb250TWV0cmljcyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBvcHRpb25zIG9iamVjdCB3aXRoIHRoZSBzYW1lIHByb3BlcnRpZXMgYXMgXCJ0aGlzXCIuICBQcm9wZXJ0aWVzXG4gICAqIGZyb20gXCJleHRlbnNpb25cIiB3aWxsIGJlIGNvcGllZCB0byB0aGUgbmV3IG9wdGlvbnMgb2JqZWN0LlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBPcHRpb25zLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZXh0ZW5kID0gZnVuY3Rpb24gZXh0ZW5kKGV4dGVuc2lvbikge1xuICAgIHZhciBkYXRhID0ge1xuICAgICAgc3R5bGU6IHRoaXMuc3R5bGUsXG4gICAgICBzaXplOiB0aGlzLnNpemUsXG4gICAgICB0ZXh0U2l6ZTogdGhpcy50ZXh0U2l6ZSxcbiAgICAgIGNvbG9yOiB0aGlzLmNvbG9yLFxuICAgICAgcGhhbnRvbTogdGhpcy5waGFudG9tLFxuICAgICAgZm9udDogdGhpcy5mb250LFxuICAgICAgZm9udEZhbWlseTogdGhpcy5mb250RmFtaWx5LFxuICAgICAgZm9udFdlaWdodDogdGhpcy5mb250V2VpZ2h0LFxuICAgICAgZm9udFNoYXBlOiB0aGlzLmZvbnRTaGFwZSxcbiAgICAgIG1heFNpemU6IHRoaXMubWF4U2l6ZSxcbiAgICAgIG1pblJ1bGVUaGlja25lc3M6IHRoaXMubWluUnVsZVRoaWNrbmVzc1xuICAgIH07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gZXh0ZW5zaW9uKSB7XG4gICAgICBpZiAoZXh0ZW5zaW9uLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgZGF0YVtrZXldID0gZXh0ZW5zaW9uW2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBPcHRpb25zKGRhdGEpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gb3B0aW9ucyBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gc3R5bGUuIElmIGB0aGlzLnN0eWxlID09PSBzdHlsZWAsXG4gICAqIHJldHVybnMgYHRoaXNgLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYXZpbmdTdHlsZSA9IGZ1bmN0aW9uIGhhdmluZ1N0eWxlKHN0eWxlKSB7XG4gICAgaWYgKHRoaXMuc3R5bGUgPT09IHN0eWxlKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBzaXplOiBzaXplQXRTdHlsZSh0aGlzLnRleHRTaXplLCBzdHlsZSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJuIGFuIG9wdGlvbnMgb2JqZWN0IHdpdGggYSBjcmFtcGVkIHZlcnNpb24gb2YgdGhlIGN1cnJlbnQgc3R5bGUuIElmXG4gICAqIHRoZSBjdXJyZW50IHN0eWxlIGlzIGNyYW1wZWQsIHJldHVybnMgYHRoaXNgLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYXZpbmdDcmFtcGVkU3R5bGUgPSBmdW5jdGlvbiBoYXZpbmdDcmFtcGVkU3R5bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGF2aW5nU3R5bGUodGhpcy5zdHlsZS5jcmFtcCgpKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIGFuIG9wdGlvbnMgb2JqZWN0IHdpdGggdGhlIGdpdmVuIHNpemUgYW5kIGluIGF0IGxlYXN0IGBcXHRleHRzdHlsZWAuXG4gICAqIFJldHVybnMgYHRoaXNgIGlmIGFwcHJvcHJpYXRlLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYXZpbmdTaXplID0gZnVuY3Rpb24gaGF2aW5nU2l6ZShzaXplKSB7XG4gICAgaWYgKHRoaXMuc2l6ZSA9PT0gc2l6ZSAmJiB0aGlzLnRleHRTaXplID09PSBzaXplKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgICAgc3R5bGU6IHRoaXMuc3R5bGUudGV4dCgpLFxuICAgICAgICBzaXplOiBzaXplLFxuICAgICAgICB0ZXh0U2l6ZTogc2l6ZSxcbiAgICAgICAgc2l6ZU11bHRpcGxpZXI6IHNpemVNdWx0aXBsaWVyc1tzaXplIC0gMV1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogTGlrZSBgdGhpcy5oYXZpbmdTaXplKEJBU0VTSVpFKS5oYXZpbmdTdHlsZShzdHlsZSlgLiBJZiBgc3R5bGVgIGlzIG9taXR0ZWQsXG4gICAqIGNoYW5nZXMgdG8gYXQgbGVhc3QgYFxcdGV4dHN0eWxlYC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGF2aW5nQmFzZVN0eWxlID0gZnVuY3Rpb24gaGF2aW5nQmFzZVN0eWxlKHN0eWxlKSB7XG4gICAgc3R5bGUgPSBzdHlsZSB8fCB0aGlzLnN0eWxlLnRleHQoKTtcbiAgICB2YXIgd2FudFNpemUgPSBzaXplQXRTdHlsZShPcHRpb25zLkJBU0VTSVpFLCBzdHlsZSk7XG5cbiAgICBpZiAodGhpcy5zaXplID09PSB3YW50U2l6ZSAmJiB0aGlzLnRleHRTaXplID09PSBPcHRpb25zLkJBU0VTSVpFICYmIHRoaXMuc3R5bGUgPT09IHN0eWxlKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBzaXplOiB3YW50U2l6ZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIGVmZmVjdCBvZiBzaXppbmcgY2hhbmdlcyBzdWNoIGFzIFxcSHVnZS5cbiAgICogS2VlcCB0aGUgZWZmZWN0IG9mIHRoZSBjdXJyZW50IHN0eWxlLCBzdWNoIGFzIFxcc2NyaXB0c3R5bGUuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhdmluZ0Jhc2VTaXppbmcgPSBmdW5jdGlvbiBoYXZpbmdCYXNlU2l6aW5nKCkge1xuICAgIHZhciBzaXplO1xuXG4gICAgc3dpdGNoICh0aGlzLnN0eWxlLmlkKSB7XG4gICAgICBjYXNlIDQ6XG4gICAgICBjYXNlIDU6XG4gICAgICAgIHNpemUgPSAzOyAvLyBub3JtYWxzaXplIGluIHNjcmlwdHN0eWxlXG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNjpcbiAgICAgIGNhc2UgNzpcbiAgICAgICAgc2l6ZSA9IDE7IC8vIG5vcm1hbHNpemUgaW4gc2NyaXB0c2NyaXB0c3R5bGVcblxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgc2l6ZSA9IDY7XG4gICAgICAvLyBub3JtYWxzaXplIGluIHRleHRzdHlsZSBvciBkaXNwbGF5c3R5bGVcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5leHRlbmQoe1xuICAgICAgc3R5bGU6IHRoaXMuc3R5bGUudGV4dCgpLFxuICAgICAgc2l6ZTogc2l6ZVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgb3B0aW9ucyBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gY29sb3IuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLndpdGhDb2xvciA9IGZ1bmN0aW9uIHdpdGhDb2xvcihjb2xvcikge1xuICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICBjb2xvcjogY29sb3JcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG9wdGlvbnMgb2JqZWN0IHdpdGggXCJwaGFudG9tXCIgc2V0IHRvIHRydWUuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLndpdGhQaGFudG9tID0gZnVuY3Rpb24gd2l0aFBoYW50b20oKSB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgIHBoYW50b206IHRydWVcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBvcHRpb25zIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBtYXRoIGZvbnQgb3Igb2xkIHRleHQgZm9udC5cbiAgICogQHR5cGUge1t0eXBlXX1cbiAgICovXG4gIDtcblxuICBfcHJvdG8ud2l0aEZvbnQgPSBmdW5jdGlvbiB3aXRoRm9udChmb250KSB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgIGZvbnQ6IGZvbnRcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG9wdGlvbnMgb2JqZWN0cyB3aXRoIHRoZSBnaXZlbiBmb250RmFtaWx5LlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by53aXRoVGV4dEZvbnRGYW1pbHkgPSBmdW5jdGlvbiB3aXRoVGV4dEZvbnRGYW1pbHkoZm9udEZhbWlseSkge1xuICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICBmb250RmFtaWx5OiBmb250RmFtaWx5LFxuICAgICAgZm9udDogXCJcIlxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IG9wdGlvbnMgb2JqZWN0IHdpdGggdGhlIGdpdmVuIGZvbnQgd2VpZ2h0XG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLndpdGhUZXh0Rm9udFdlaWdodCA9IGZ1bmN0aW9uIHdpdGhUZXh0Rm9udFdlaWdodChmb250V2VpZ2h0KSB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgIGZvbnRXZWlnaHQ6IGZvbnRXZWlnaHQsXG4gICAgICBmb250OiBcIlwiXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgb3B0aW9ucyBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gZm9udCB3ZWlnaHRcbiAgICovXG4gIDtcblxuICBfcHJvdG8ud2l0aFRleHRGb250U2hhcGUgPSBmdW5jdGlvbiB3aXRoVGV4dEZvbnRTaGFwZShmb250U2hhcGUpIHtcbiAgICByZXR1cm4gdGhpcy5leHRlbmQoe1xuICAgICAgZm9udFNoYXBlOiBmb250U2hhcGUsXG4gICAgICBmb250OiBcIlwiXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgQ1NTIHNpemluZyBjbGFzc2VzIHJlcXVpcmVkIHRvIHN3aXRjaCBmcm9tIGVuY2xvc2luZyBvcHRpb25zXG4gICAqIGBvbGRPcHRpb25zYCB0byBgdGhpc2AuIFJldHVybnMgYW4gYXJyYXkgb2YgY2xhc3Nlcy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uc2l6aW5nQ2xhc3NlcyA9IGZ1bmN0aW9uIHNpemluZ0NsYXNzZXMob2xkT3B0aW9ucykge1xuICAgIGlmIChvbGRPcHRpb25zLnNpemUgIT09IHRoaXMuc2l6ZSkge1xuICAgICAgcmV0dXJuIFtcInNpemluZ1wiLCBcInJlc2V0LXNpemVcIiArIG9sZE9wdGlvbnMuc2l6ZSwgXCJzaXplXCIgKyB0aGlzLnNpemVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIENTUyBzaXppbmcgY2xhc3NlcyByZXF1aXJlZCB0byBzd2l0Y2ggdG8gdGhlIGJhc2Ugc2l6ZS4gTGlrZVxuICAgKiBgdGhpcy5oYXZpbmdTaXplKEJBU0VTSVpFKS5zaXppbmdDbGFzc2VzKHRoaXMpYC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uYmFzZVNpemluZ0NsYXNzZXMgPSBmdW5jdGlvbiBiYXNlU2l6aW5nQ2xhc3NlcygpIHtcbiAgICBpZiAodGhpcy5zaXplICE9PSBPcHRpb25zLkJBU0VTSVpFKSB7XG4gICAgICByZXR1cm4gW1wic2l6aW5nXCIsIFwicmVzZXQtc2l6ZVwiICsgdGhpcy5zaXplLCBcInNpemVcIiArIE9wdGlvbnMuQkFTRVNJWkVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGZvbnQgbWV0cmljcyBmb3IgdGhpcyBzaXplLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5mb250TWV0cmljcyA9IGZ1bmN0aW9uIGZvbnRNZXRyaWNzKCkge1xuICAgIGlmICghdGhpcy5fZm9udE1ldHJpY3MpIHtcbiAgICAgIHRoaXMuX2ZvbnRNZXRyaWNzID0gZ2V0R2xvYmFsTWV0cmljcyh0aGlzLnNpemUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9mb250TWV0cmljcztcbiAgfVxuICAvKipcbiAgICogR2V0cyB0aGUgQ1NTIGNvbG9yIG9mIHRoZSBjdXJyZW50IG9wdGlvbnMgb2JqZWN0XG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmdldENvbG9yID0gZnVuY3Rpb24gZ2V0Q29sb3IoKSB7XG4gICAgaWYgKHRoaXMucGhhbnRvbSkge1xuICAgICAgcmV0dXJuIFwidHJhbnNwYXJlbnRcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuY29sb3I7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBPcHRpb25zO1xufSgpO1xuXG5PcHRpb25zX09wdGlvbnMuQkFTRVNJWkUgPSA2O1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX09wdGlvbnMgPSAoT3B0aW9uc19PcHRpb25zKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3VuaXRzLmpzXG4vKipcbiAqIFRoaXMgZmlsZSBkb2VzIGNvbnZlcnNpb24gYmV0d2VlbiB1bml0cy4gIEluIHBhcnRpY3VsYXIsIGl0IHByb3ZpZGVzXG4gKiBjYWxjdWxhdGVTaXplIHRvIGNvbnZlcnQgb3RoZXIgdW5pdHMgaW50byBlbXMuXG4gKi9cblxuIC8vIFRoaXMgdGFibGUgZ2l2ZXMgdGhlIG51bWJlciBvZiBUZVggcHRzIGluIG9uZSBvZiBlYWNoICphYnNvbHV0ZSogVGVYIHVuaXQuXG4vLyBUaHVzLCBtdWx0aXBseWluZyBhIGxlbmd0aCBieSB0aGlzIG51bWJlciBjb252ZXJ0cyB0aGUgbGVuZ3RoIGZyb20gdW5pdHNcbi8vIGludG8gcHRzLiAgRGl2aWRpbmcgdGhlIHJlc3VsdCBieSBwdFBlckVtIGdpdmVzIHRoZSBudW1iZXIgb2YgZW1zXG4vLyAqYXNzdW1pbmcqIGEgZm9udCBzaXplIG9mIHB0UGVyRW0gKG5vcm1hbCBzaXplLCBub3JtYWwgc3R5bGUpLlxuXG52YXIgcHRQZXJVbml0ID0ge1xuICAvLyBodHRwczovL2VuLndpa2lib29rcy5vcmcvd2lraS9MYVRlWC9MZW5ndGhzIGFuZFxuICAvLyBodHRwczovL3RleC5zdGFja2V4Y2hhbmdlLmNvbS9hLzgyNjNcbiAgXCJwdFwiOiAxLFxuICAvLyBUZVggcG9pbnRcbiAgXCJtbVwiOiA3MjI3IC8gMjU0MCxcbiAgLy8gbWlsbGltZXRlclxuICBcImNtXCI6IDcyMjcgLyAyNTQsXG4gIC8vIGNlbnRpbWV0ZXJcbiAgXCJpblwiOiA3Mi4yNyxcbiAgLy8gaW5jaFxuICBcImJwXCI6IDgwMyAvIDgwMCxcbiAgLy8gYmlnIChQb3N0U2NyaXB0KSBwb2ludHNcbiAgXCJwY1wiOiAxMixcbiAgLy8gcGljYVxuICBcImRkXCI6IDEyMzggLyAxMTU3LFxuICAvLyBkaWRvdFxuICBcImNjXCI6IDE0ODU2IC8gMTE1NyxcbiAgLy8gY2ljZXJvICgxMiBkaWRvdClcbiAgXCJuZFwiOiA2ODUgLyA2NDIsXG4gIC8vIG5ldyBkaWRvdFxuICBcIm5jXCI6IDEzNzAgLyAxMDcsXG4gIC8vIG5ldyBjaWNlcm8gKDEyIG5ldyBkaWRvdClcbiAgXCJzcFwiOiAxIC8gNjU1MzYsXG4gIC8vIHNjYWxlZCBwb2ludCAoVGVYJ3MgaW50ZXJuYWwgc21hbGxlc3QgdW5pdClcbiAgLy8gaHR0cHM6Ly90ZXguc3RhY2tleGNoYW5nZS5jb20vYS80MTM3MVxuICBcInB4XCI6IDgwMyAvIDgwMCAvLyBcXHBkZnB4ZGltZW4gZGVmYXVsdHMgdG8gMSBicCBpbiBwZGZUZVggYW5kIEx1YVRlWFxuXG59OyAvLyBEaWN0aW9uYXJ5IG9mIHJlbGF0aXZlIHVuaXRzLCBmb3IgZmFzdCB2YWxpZGl0eSB0ZXN0aW5nLlxuXG52YXIgcmVsYXRpdmVVbml0ID0ge1xuICBcImV4XCI6IHRydWUsXG4gIFwiZW1cIjogdHJ1ZSxcbiAgXCJtdVwiOiB0cnVlXG59O1xuXG4vKipcbiAqIERldGVybWluZSB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgdW5pdCAoZWl0aGVyIGEgc3RyaW5nIGRlZmluaW5nIHRoZSB1bml0XG4gKiBvciBhIFwic2l6ZVwiIHBhcnNlIG5vZGUgY29udGFpbmluZyBhIHVuaXQgZmllbGQpIGlzIHZhbGlkLlxuICovXG52YXIgdmFsaWRVbml0ID0gZnVuY3Rpb24gdmFsaWRVbml0KHVuaXQpIHtcbiAgaWYgKHR5cGVvZiB1bml0ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgdW5pdCA9IHVuaXQudW5pdDtcbiAgfVxuXG4gIHJldHVybiB1bml0IGluIHB0UGVyVW5pdCB8fCB1bml0IGluIHJlbGF0aXZlVW5pdCB8fCB1bml0ID09PSBcImV4XCI7XG59O1xuLypcbiAqIENvbnZlcnQgYSBcInNpemVcIiBwYXJzZSBub2RlICh3aXRoIG51bWVyaWMgXCJudW1iZXJcIiBhbmQgc3RyaW5nIFwidW5pdFwiIGZpZWxkcyxcbiAqIGFzIHBhcnNlZCBieSBmdW5jdGlvbnMuanMgYXJnVHlwZSBcInNpemVcIikgaW50byBhIENTUyBlbSB2YWx1ZSBmb3IgdGhlXG4gKiBjdXJyZW50IHN0eWxlL3NjYWxlLiAgYG9wdGlvbnNgIGdpdmVzIHRoZSBjdXJyZW50IG9wdGlvbnMuXG4gKi9cblxudmFyIHVuaXRzX2NhbGN1bGF0ZVNpemUgPSBmdW5jdGlvbiBjYWxjdWxhdGVTaXplKHNpemVWYWx1ZSwgb3B0aW9ucykge1xuICB2YXIgc2NhbGU7XG5cbiAgaWYgKHNpemVWYWx1ZS51bml0IGluIHB0UGVyVW5pdCkge1xuICAgIC8vIEFic29sdXRlIHVuaXRzXG4gICAgc2NhbGUgPSBwdFBlclVuaXRbc2l6ZVZhbHVlLnVuaXRdIC8vIENvbnZlcnQgdW5pdCB0byBwdFxuICAgIC8gb3B0aW9ucy5mb250TWV0cmljcygpLnB0UGVyRW0gLy8gQ29udmVydCBwdCB0byBDU1MgZW1cbiAgICAvIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7IC8vIFVuc2NhbGUgdG8gbWFrZSBhYnNvbHV0ZSB1bml0c1xuICB9IGVsc2UgaWYgKHNpemVWYWx1ZS51bml0ID09PSBcIm11XCIpIHtcbiAgICAvLyBgbXVgIHVuaXRzIHNjYWxlIHdpdGggc2NyaXB0c3R5bGUvc2NyaXB0c2NyaXB0c3R5bGUuXG4gICAgc2NhbGUgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuY3NzRW1QZXJNdTtcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlciByZWxhdGl2ZSB1bml0cyBhbHdheXMgcmVmZXIgdG8gdGhlICp0ZXh0c3R5bGUqIGZvbnRcbiAgICAvLyBpbiB0aGUgY3VycmVudCBzaXplLlxuICAgIHZhciB1bml0T3B0aW9ucztcblxuICAgIGlmIChvcHRpb25zLnN0eWxlLmlzVGlnaHQoKSkge1xuICAgICAgLy8gaXNUaWdodCgpIG1lYW5zIGN1cnJlbnQgc3R5bGUgaXMgc2NyaXB0L3NjcmlwdHNjcmlwdC5cbiAgICAgIHVuaXRPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShvcHRpb25zLnN0eWxlLnRleHQoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuaXRPcHRpb25zID0gb3B0aW9ucztcbiAgICB9IC8vIFRPRE86IEluIFRlWCB0aGVzZSB1bml0cyBhcmUgcmVsYXRpdmUgdG8gdGhlIHF1YWQgb2YgdGhlIGN1cnJlbnRcbiAgICAvLyAqdGV4dCogZm9udCwgZS5nLiBjbXIxMC4gS2FUZVggaW5zdGVhZCB1c2VzIHZhbHVlcyBmcm9tIHRoZVxuICAgIC8vIGNvbXBhcmFibHktc2l6ZWQgKkNvbXB1dGVyIE1vZGVybiBzeW1ib2wqIGZvbnQuIEF0IDEwcHQsIHRoZXNlXG4gICAgLy8gbWF0Y2guIEF0IDdwdCBhbmQgNXB0LCB0aGV5IGRpZmZlcjogY21yNz0xLjEzODg5NCwgY21zeTc9MS4xNzA2NDE7XG4gICAgLy8gY21yNT0xLjM2MTEzMywgY21zeTU9MS40NzIyNDEuIENvbnNpZGVyICRcXHNjcmlwdHNpemUgYVxca2VybjFlbWIkLlxuICAgIC8vIFRlWCBcXHNob3dsaXN0cyBzaG93cyBhIGtlcm4gb2YgMS4xMzg4OSAqIGZvbnRzaXplO1xuICAgIC8vIEthVGVYIHNob3dzIGEga2VybiBvZiAxLjE3MSAqIGZvbnRzaXplLlxuXG5cbiAgICBpZiAoc2l6ZVZhbHVlLnVuaXQgPT09IFwiZXhcIikge1xuICAgICAgc2NhbGUgPSB1bml0T3B0aW9ucy5mb250TWV0cmljcygpLnhIZWlnaHQ7XG4gICAgfSBlbHNlIGlmIChzaXplVmFsdWUudW5pdCA9PT0gXCJlbVwiKSB7XG4gICAgICBzY2FsZSA9IHVuaXRPcHRpb25zLmZvbnRNZXRyaWNzKCkucXVhZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCB1bml0OiAnXCIgKyBzaXplVmFsdWUudW5pdCArIFwiJ1wiKTtcbiAgICB9XG5cbiAgICBpZiAodW5pdE9wdGlvbnMgIT09IG9wdGlvbnMpIHtcbiAgICAgIHNjYWxlICo9IHVuaXRPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gTWF0aC5taW4oc2l6ZVZhbHVlLm51bWJlciAqIHNjYWxlLCBvcHRpb25zLm1heFNpemUpO1xufTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2J1aWxkQ29tbW9uLmpzXG4vKiBlc2xpbnQgbm8tY29uc29sZTowICovXG5cbi8qKlxuICogVGhpcyBtb2R1bGUgY29udGFpbnMgZ2VuZXJhbCBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCBmb3IgYnVpbGRpbmdcbiAqIGRpZmZlcmVudCBraW5kcyBvZiBkb21UcmVlIG5vZGVzIGluIGEgY29uc2lzdGVudCBtYW5uZXIuXG4gKi9cblxuXG5cblxuXG5cblxuLy8gVGhlIGZvbGxvd2luZyBoYXZlIHRvIGJlIGxvYWRlZCBmcm9tIE1haW4tSXRhbGljIGZvbnQsIHVzaW5nIGNsYXNzIG1hdGhpdFxudmFyIG1hdGhpdExldHRlcnMgPSBbXCJcXFxcaW1hdGhcIiwgXCLEsVwiLCAvLyBkb3RsZXNzIGlcblwiXFxcXGptYXRoXCIsIFwiyLdcIiwgLy8gZG90bGVzcyBqXG5cIlxcXFxwb3VuZHNcIiwgXCJcXFxcbWF0aHN0ZXJsaW5nXCIsIFwiXFxcXHRleHRzdGVybGluZ1wiLCBcIsKjXCJdO1xuLyoqXG4gKiBMb29rcyB1cCB0aGUgZ2l2ZW4gc3ltYm9sIGluIGZvbnRNZXRyaWNzLCBhZnRlciBhcHBseWluZyBhbnkgc3ltYm9sXG4gKiByZXBsYWNlbWVudHMgZGVmaW5lZCBpbiBzeW1ib2wuanNcbiAqL1xuXG52YXIgYnVpbGRDb21tb25fbG9va3VwU3ltYm9sID0gZnVuY3Rpb24gbG9va3VwU3ltYm9sKHZhbHVlLCAvLyBUT0RPKCM5NjMpOiBVc2UgYSB1bmlvbiB0eXBlIGZvciB0aGlzLlxuZm9udE5hbWUsIG1vZGUpIHtcbiAgLy8gUmVwbGFjZSB0aGUgdmFsdWUgd2l0aCBpdHMgcmVwbGFjZWQgdmFsdWUgZnJvbSBzeW1ib2wuanNcbiAgaWYgKHNyY19zeW1ib2xzW21vZGVdW3ZhbHVlXSAmJiBzcmNfc3ltYm9sc1ttb2RlXVt2YWx1ZV0ucmVwbGFjZSkge1xuICAgIHZhbHVlID0gc3JjX3N5bWJvbHNbbW9kZV1bdmFsdWVdLnJlcGxhY2U7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBtZXRyaWNzOiBnZXRDaGFyYWN0ZXJNZXRyaWNzKHZhbHVlLCBmb250TmFtZSwgbW9kZSlcbiAgfTtcbn07XG4vKipcbiAqIE1ha2VzIGEgc3ltYm9sTm9kZSBhZnRlciB0cmFuc2xhdGlvbiB2aWEgdGhlIGxpc3Qgb2Ygc3ltYm9scyBpbiBzeW1ib2xzLmpzLlxuICogQ29ycmVjdGx5IHB1bGxzIG91dCBtZXRyaWNzIGZvciB0aGUgY2hhcmFjdGVyLCBhbmQgb3B0aW9uYWxseSB0YWtlcyBhIGxpc3Qgb2ZcbiAqIGNsYXNzZXMgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIG5vZGUuXG4gKlxuICogVE9ETzogbWFrZSBhcmd1bWVudCBvcmRlciBjbG9zZXIgdG8gbWFrZVNwYW5cbiAqIFRPRE86IGFkZCBhIHNlcGFyYXRlIGFyZ3VtZW50IGZvciBtYXRoIGNsYXNzIChlLmcuIGBtb3BgLCBgbWJpbmApLCB3aGljaFxuICogc2hvdWxkIGlmIHByZXNlbnQgY29tZSBmaXJzdCBpbiBgY2xhc3Nlc2AuXG4gKiBUT0RPKCM5NTMpOiBNYWtlIGBvcHRpb25zYCBtYW5kYXRvcnkgYW5kIGFsd2F5cyBwYXNzIGl0IGluLlxuICovXG5cblxudmFyIGJ1aWxkQ29tbW9uX21ha2VTeW1ib2wgPSBmdW5jdGlvbiBtYWtlU3ltYm9sKHZhbHVlLCBmb250TmFtZSwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcykge1xuICB2YXIgbG9va3VwID0gYnVpbGRDb21tb25fbG9va3VwU3ltYm9sKHZhbHVlLCBmb250TmFtZSwgbW9kZSk7XG4gIHZhciBtZXRyaWNzID0gbG9va3VwLm1ldHJpY3M7XG4gIHZhbHVlID0gbG9va3VwLnZhbHVlO1xuICB2YXIgc3ltYm9sTm9kZTtcblxuICBpZiAobWV0cmljcykge1xuICAgIHZhciBpdGFsaWMgPSBtZXRyaWNzLml0YWxpYztcblxuICAgIGlmIChtb2RlID09PSBcInRleHRcIiB8fCBvcHRpb25zICYmIG9wdGlvbnMuZm9udCA9PT0gXCJtYXRoaXRcIikge1xuICAgICAgaXRhbGljID0gMDtcbiAgICB9XG5cbiAgICBzeW1ib2xOb2RlID0gbmV3IGRvbVRyZWVfU3ltYm9sTm9kZSh2YWx1ZSwgbWV0cmljcy5oZWlnaHQsIG1ldHJpY3MuZGVwdGgsIGl0YWxpYywgbWV0cmljcy5za2V3LCBtZXRyaWNzLndpZHRoLCBjbGFzc2VzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBUT0RPKGVtaWx5KTogRmlndXJlIG91dCBhIGdvb2Qgd2F5IHRvIG9ubHkgcHJpbnQgdGhpcyBpbiBkZXZlbG9wbWVudFxuICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIk5vIGNoYXJhY3RlciBtZXRyaWNzIFwiICsgKFwiZm9yICdcIiArIHZhbHVlICsgXCInIGluIHN0eWxlICdcIiArIGZvbnROYW1lICsgXCInIGFuZCBtb2RlICdcIiArIG1vZGUgKyBcIidcIikpO1xuICAgIHN5bWJvbE5vZGUgPSBuZXcgZG9tVHJlZV9TeW1ib2xOb2RlKHZhbHVlLCAwLCAwLCAwLCAwLCAwLCBjbGFzc2VzKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgc3ltYm9sTm9kZS5tYXhGb250U2l6ZSA9IG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG5cbiAgICBpZiAob3B0aW9ucy5zdHlsZS5pc1RpZ2h0KCkpIHtcbiAgICAgIHN5bWJvbE5vZGUuY2xhc3Nlcy5wdXNoKFwibXRpZ2h0XCIpO1xuICAgIH1cblxuICAgIHZhciBjb2xvciA9IG9wdGlvbnMuZ2V0Q29sb3IoKTtcblxuICAgIGlmIChjb2xvcikge1xuICAgICAgc3ltYm9sTm9kZS5zdHlsZS5jb2xvciA9IGNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW1ib2xOb2RlO1xufTtcbi8qKlxuICogTWFrZXMgYSBzeW1ib2wgaW4gTWFpbi1SZWd1bGFyIG9yIEFNUy1SZWd1bGFyLlxuICogVXNlZCBmb3IgcmVsLCBiaW4sIG9wZW4sIGNsb3NlLCBpbm5lciwgYW5kIHB1bmN0LlxuICovXG5cblxudmFyIGJ1aWxkQ29tbW9uX21hdGhzeW0gPSBmdW5jdGlvbiBtYXRoc3ltKHZhbHVlLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzKSB7XG4gIGlmIChjbGFzc2VzID09PSB2b2lkIDApIHtcbiAgICBjbGFzc2VzID0gW107XG4gIH1cblxuICAvLyBEZWNpZGUgd2hhdCBmb250IHRvIHJlbmRlciB0aGUgc3ltYm9sIGluIGJ5IGl0cyBlbnRyeSBpbiB0aGUgc3ltYm9sc1xuICAvLyB0YWJsZS5cbiAgLy8gSGF2ZSBhIHNwZWNpYWwgY2FzZSBmb3Igd2hlbiB0aGUgdmFsdWUgPSBcXCBiZWNhdXNlIHRoZSBcXCBpcyB1c2VkIGFzIGFcbiAgLy8gdGV4dG9yZCBpbiB1bnN1cHBvcnRlZCBjb21tYW5kIGVycm9ycyBidXQgY2Fubm90IGJlIHBhcnNlZCBhcyBhIHJlZ3VsYXJcbiAgLy8gdGV4dCBvcmRpbmFsIGFuZCBpcyB0aGVyZWZvcmUgbm90IHByZXNlbnQgYXMgYSBzeW1ib2wgaW4gdGhlIHN5bWJvbHNcbiAgLy8gdGFibGUgZm9yIHRleHQsIGFzIHdlbGwgYXMgYSBzcGVjaWFsIGNhc2UgZm9yIGJvbGRzeW1ib2wgYmVjYXVzZSBpdFxuICAvLyBjYW4gYmUgdXNlZCBmb3IgYm9sZCArIGFuZCAtXG4gIGlmIChvcHRpb25zLmZvbnQgPT09IFwiYm9sZHN5bWJvbFwiICYmIGJ1aWxkQ29tbW9uX2xvb2t1cFN5bWJvbCh2YWx1ZSwgXCJNYWluLUJvbGRcIiwgbW9kZSkubWV0cmljcykge1xuICAgIHJldHVybiBidWlsZENvbW1vbl9tYWtlU3ltYm9sKHZhbHVlLCBcIk1haW4tQm9sZFwiLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzLmNvbmNhdChbXCJtYXRoYmZcIl0pKTtcbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gXCJcXFxcXCIgfHwgc3JjX3N5bWJvbHNbbW9kZV1bdmFsdWVdLmZvbnQgPT09IFwibWFpblwiKSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uX21ha2VTeW1ib2wodmFsdWUsIFwiTWFpbi1SZWd1bGFyXCIsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBidWlsZENvbW1vbl9tYWtlU3ltYm9sKHZhbHVlLCBcIkFNUy1SZWd1bGFyXCIsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KFtcImFtc3JtXCJdKSk7XG4gIH1cbn07XG4vKipcbiAqIERldGVybWluZXMgd2hpY2ggb2YgdGhlIHR3byBmb250IG5hbWVzIChNYWluLUl0YWxpYyBhbmQgTWF0aC1JdGFsaWMpIGFuZFxuICogY29ycmVzcG9uZGluZyBzdHlsZSB0YWdzIChtYWluZGVmYXVsdCBvciBtYXRoaXQpIHRvIHVzZSBmb3IgZGVmYXVsdCBtYXRoIGZvbnQsXG4gKiBkZXBlbmRpbmcgb24gdGhlIHN5bWJvbC5cbiAqL1xuXG5cbnZhciBidWlsZENvbW1vbl9tYXRoZGVmYXVsdCA9IGZ1bmN0aW9uIG1hdGhkZWZhdWx0KHZhbHVlLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzKSB7XG4gIGlmICgvWzAtOV0vLnRlc3QodmFsdWUuY2hhckF0KDApKSB8fCAvLyBnbHlwaHMgZm9yIFxcaW1hdGggYW5kIFxcam1hdGggZG8gbm90IGV4aXN0IGluIE1hdGgtSXRhbGljIHNvIHdlXG4gIC8vIG5lZWQgdG8gdXNlIE1haW4tSXRhbGljIGluc3RlYWRcbiAgdXRpbHMuY29udGFpbnMobWF0aGl0TGV0dGVycywgdmFsdWUpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvbnROYW1lOiBcIk1haW4tSXRhbGljXCIsXG4gICAgICBmb250Q2xhc3M6IFwibWF0aGl0XCJcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICBmb250TmFtZTogXCJNYXRoLUl0YWxpY1wiLFxuICAgICAgZm9udENsYXNzOiBcIm1hdGhkZWZhdWx0XCJcbiAgICB9O1xuICB9XG59O1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoaWNoIG9mIHRoZSBmb250IG5hbWVzIChNYWluLUl0YWxpYywgTWF0aC1JdGFsaWMsIGFuZCBDYWxpZ3JhcGhpYylcbiAqIGFuZCBjb3JyZXNwb25kaW5nIHN0eWxlIHRhZ3MgKG1hdGhpdCwgbWF0aGRlZmF1bHQsIG9yIG1hdGhjYWwpIHRvIHVzZSBmb3IgZm9udFxuICogXCJtYXRobm9ybWFsXCIsIGRlcGVuZGluZyBvbiB0aGUgc3ltYm9sLiAgVXNlIHRoaXMgZnVuY3Rpb24gaW5zdGVhZCBvZiBmb250TWFwIGZvclxuICogZm9udCBcIm1hdGhub3JtYWxcIi5cbiAqL1xuXG5cbnZhciBidWlsZENvbW1vbl9tYXRobm9ybWFsID0gZnVuY3Rpb24gbWF0aG5vcm1hbCh2YWx1ZSwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcykge1xuICBpZiAodXRpbHMuY29udGFpbnMobWF0aGl0TGV0dGVycywgdmFsdWUpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvbnROYW1lOiBcIk1haW4tSXRhbGljXCIsXG4gICAgICBmb250Q2xhc3M6IFwibWF0aGl0XCJcbiAgICB9O1xuICB9IGVsc2UgaWYgKC9bMC05XS8udGVzdCh2YWx1ZS5jaGFyQXQoMCkpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvbnROYW1lOiBcIkNhbGlncmFwaGljLVJlZ3VsYXJcIixcbiAgICAgIGZvbnRDbGFzczogXCJtYXRoY2FsXCJcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICBmb250TmFtZTogXCJNYXRoLUl0YWxpY1wiLFxuICAgICAgZm9udENsYXNzOiBcIm1hdGhkZWZhdWx0XCJcbiAgICB9O1xuICB9XG59O1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoaWNoIG9mIHRoZSB0d28gZm9udCBuYW1lcyAoTWFpbi1Cb2xkIGFuZCBNYXRoLUJvbGRJdGFsaWMpIGFuZFxuICogY29ycmVzcG9uZGluZyBzdHlsZSB0YWdzIChtYXRoYmYgb3IgYm9sZHN5bWJvbCkgdG8gdXNlIGZvciBmb250IFwiYm9sZHN5bWJvbFwiLFxuICogZGVwZW5kaW5nIG9uIHRoZSBzeW1ib2wuICBVc2UgdGhpcyBmdW5jdGlvbiBpbnN0ZWFkIG9mIGZvbnRNYXAgZm9yIGZvbnRcbiAqIFwiYm9sZHN5bWJvbFwiLlxuICovXG5cblxudmFyIGJvbGRzeW1ib2wgPSBmdW5jdGlvbiBib2xkc3ltYm9sKHZhbHVlLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzKSB7XG4gIGlmIChidWlsZENvbW1vbl9sb29rdXBTeW1ib2wodmFsdWUsIFwiTWF0aC1Cb2xkSXRhbGljXCIsIG1vZGUpLm1ldHJpY3MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9udE5hbWU6IFwiTWF0aC1Cb2xkSXRhbGljXCIsXG4gICAgICBmb250Q2xhc3M6IFwiYm9sZHN5bWJvbFwiXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBTb21lIGdseXBocyBkbyBub3QgZXhpc3QgaW4gTWF0aC1Cb2xkSXRhbGljIHNvIHdlIG5lZWQgdG8gdXNlXG4gICAgLy8gTWFpbi1Cb2xkIGluc3RlYWQuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZvbnROYW1lOiBcIk1haW4tQm9sZFwiLFxuICAgICAgZm9udENsYXNzOiBcIm1hdGhiZlwiXG4gICAgfTtcbiAgfVxufTtcbi8qKlxuICogTWFrZXMgZWl0aGVyIGEgbWF0aG9yZCBvciB0ZXh0b3JkIGluIHRoZSBjb3JyZWN0IGZvbnQgYW5kIGNvbG9yLlxuICovXG5cblxudmFyIGJ1aWxkQ29tbW9uX21ha2VPcmQgPSBmdW5jdGlvbiBtYWtlT3JkKGdyb3VwLCBvcHRpb25zLCB0eXBlKSB7XG4gIHZhciBtb2RlID0gZ3JvdXAubW9kZTtcbiAgdmFyIHRleHQgPSBncm91cC50ZXh0O1xuICB2YXIgY2xhc3NlcyA9IFtcIm1vcmRcIl07IC8vIE1hdGggbW9kZSBvciBPbGQgZm9udCAoaS5lLiBcXHJtKVxuXG4gIHZhciBpc0ZvbnQgPSBtb2RlID09PSBcIm1hdGhcIiB8fCBtb2RlID09PSBcInRleHRcIiAmJiBvcHRpb25zLmZvbnQ7XG4gIHZhciBmb250T3JGYW1pbHkgPSBpc0ZvbnQgPyBvcHRpb25zLmZvbnQgOiBvcHRpb25zLmZvbnRGYW1pbHk7XG5cbiAgaWYgKHRleHQuY2hhckNvZGVBdCgwKSA9PT0gMHhEODM1KSB7XG4gICAgLy8gc3Vycm9nYXRlIHBhaXJzIGdldCBzcGVjaWFsIHRyZWF0bWVudFxuICAgIHZhciBfd2lkZUNoYXJhY3RlckZvbnQgPSB3aWRlX2NoYXJhY3Rlcl93aWRlQ2hhcmFjdGVyRm9udCh0ZXh0LCBtb2RlKSxcbiAgICAgICAgd2lkZUZvbnROYW1lID0gX3dpZGVDaGFyYWN0ZXJGb250WzBdLFxuICAgICAgICB3aWRlRm9udENsYXNzID0gX3dpZGVDaGFyYWN0ZXJGb250WzFdO1xuXG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uX21ha2VTeW1ib2wodGV4dCwgd2lkZUZvbnROYW1lLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzLmNvbmNhdCh3aWRlRm9udENsYXNzKSk7XG4gIH0gZWxzZSBpZiAoZm9udE9yRmFtaWx5KSB7XG4gICAgdmFyIGZvbnROYW1lO1xuICAgIHZhciBmb250Q2xhc3NlcztcblxuICAgIGlmIChmb250T3JGYW1pbHkgPT09IFwiYm9sZHN5bWJvbFwiIHx8IGZvbnRPckZhbWlseSA9PT0gXCJtYXRobm9ybWFsXCIpIHtcbiAgICAgIHZhciBmb250RGF0YSA9IGZvbnRPckZhbWlseSA9PT0gXCJib2xkc3ltYm9sXCIgPyBib2xkc3ltYm9sKHRleHQsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMpIDogYnVpbGRDb21tb25fbWF0aG5vcm1hbCh0ZXh0LCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzKTtcbiAgICAgIGZvbnROYW1lID0gZm9udERhdGEuZm9udE5hbWU7XG4gICAgICBmb250Q2xhc3NlcyA9IFtmb250RGF0YS5mb250Q2xhc3NdO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuY29udGFpbnMobWF0aGl0TGV0dGVycywgdGV4dCkpIHtcbiAgICAgIGZvbnROYW1lID0gXCJNYWluLUl0YWxpY1wiO1xuICAgICAgZm9udENsYXNzZXMgPSBbXCJtYXRoaXRcIl07XG4gICAgfSBlbHNlIGlmIChpc0ZvbnQpIHtcbiAgICAgIGZvbnROYW1lID0gZm9udE1hcFtmb250T3JGYW1pbHldLmZvbnROYW1lO1xuICAgICAgZm9udENsYXNzZXMgPSBbZm9udE9yRmFtaWx5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9udE5hbWUgPSByZXRyaWV2ZVRleHRGb250TmFtZShmb250T3JGYW1pbHksIG9wdGlvbnMuZm9udFdlaWdodCwgb3B0aW9ucy5mb250U2hhcGUpO1xuICAgICAgZm9udENsYXNzZXMgPSBbZm9udE9yRmFtaWx5LCBvcHRpb25zLmZvbnRXZWlnaHQsIG9wdGlvbnMuZm9udFNoYXBlXTtcbiAgICB9XG5cbiAgICBpZiAoYnVpbGRDb21tb25fbG9va3VwU3ltYm9sKHRleHQsIGZvbnROYW1lLCBtb2RlKS5tZXRyaWNzKSB7XG4gICAgICByZXR1cm4gYnVpbGRDb21tb25fbWFrZVN5bWJvbCh0ZXh0LCBmb250TmFtZSwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcy5jb25jYXQoZm9udENsYXNzZXMpKTtcbiAgICB9IGVsc2UgaWYgKGxpZ2F0dXJlcy5oYXNPd25Qcm9wZXJ0eSh0ZXh0KSAmJiBmb250TmFtZS5zdWJzdHIoMCwgMTApID09PSBcIlR5cGV3cml0ZXJcIikge1xuICAgICAgLy8gRGVjb25zdHJ1Y3QgbGlnYXR1cmVzIGluIG1vbm9zcGFjZSBmb250cyAoXFx0ZXh0dHQsIFxcdHQpLlxuICAgICAgdmFyIHBhcnRzID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBwYXJ0cy5wdXNoKGJ1aWxkQ29tbW9uX21ha2VTeW1ib2wodGV4dFtpXSwgZm9udE5hbWUsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KGZvbnRDbGFzc2VzKSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYnVpbGRDb21tb25fbWFrZUZyYWdtZW50KHBhcnRzKTtcbiAgICB9XG4gIH0gLy8gTWFrZXMgYSBzeW1ib2wgaW4gdGhlIGRlZmF1bHQgZm9udCBmb3IgbWF0aG9yZHMgYW5kIHRleHRvcmRzLlxuXG5cbiAgaWYgKHR5cGUgPT09IFwibWF0aG9yZFwiKSB7XG4gICAgdmFyIGZvbnRMb29rdXAgPSBidWlsZENvbW1vbl9tYXRoZGVmYXVsdCh0ZXh0LCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb25fbWFrZVN5bWJvbCh0ZXh0LCBmb250TG9va3VwLmZvbnROYW1lLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzLmNvbmNhdChbZm9udExvb2t1cC5mb250Q2xhc3NdKSk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJ0ZXh0b3JkXCIpIHtcbiAgICB2YXIgZm9udCA9IHNyY19zeW1ib2xzW21vZGVdW3RleHRdICYmIHNyY19zeW1ib2xzW21vZGVdW3RleHRdLmZvbnQ7XG5cbiAgICBpZiAoZm9udCA9PT0gXCJhbXNcIikge1xuICAgICAgdmFyIF9mb250TmFtZSA9IHJldHJpZXZlVGV4dEZvbnROYW1lKFwiYW1zcm1cIiwgb3B0aW9ucy5mb250V2VpZ2h0LCBvcHRpb25zLmZvbnRTaGFwZSk7XG5cbiAgICAgIHJldHVybiBidWlsZENvbW1vbl9tYWtlU3ltYm9sKHRleHQsIF9mb250TmFtZSwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcy5jb25jYXQoXCJhbXNybVwiLCBvcHRpb25zLmZvbnRXZWlnaHQsIG9wdGlvbnMuZm9udFNoYXBlKSk7XG4gICAgfSBlbHNlIGlmIChmb250ID09PSBcIm1haW5cIiB8fCAhZm9udCkge1xuICAgICAgdmFyIF9mb250TmFtZTIgPSByZXRyaWV2ZVRleHRGb250TmFtZShcInRleHRybVwiLCBvcHRpb25zLmZvbnRXZWlnaHQsIG9wdGlvbnMuZm9udFNoYXBlKTtcblxuICAgICAgcmV0dXJuIGJ1aWxkQ29tbW9uX21ha2VTeW1ib2wodGV4dCwgX2ZvbnROYW1lMiwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcy5jb25jYXQob3B0aW9ucy5mb250V2VpZ2h0LCBvcHRpb25zLmZvbnRTaGFwZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmb250cyBhZGRlZCBieSBwbHVnaW5zXG4gICAgICB2YXIgX2ZvbnROYW1lMyA9IHJldHJpZXZlVGV4dEZvbnROYW1lKGZvbnQsIG9wdGlvbnMuZm9udFdlaWdodCwgb3B0aW9ucy5mb250U2hhcGUpOyAvLyBXZSBhZGQgZm9udCBuYW1lIGFzIGEgY3NzIGNsYXNzXG5cblxuICAgICAgcmV0dXJuIGJ1aWxkQ29tbW9uX21ha2VTeW1ib2wodGV4dCwgX2ZvbnROYW1lMywgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcy5jb25jYXQoX2ZvbnROYW1lMywgb3B0aW9ucy5mb250V2VpZ2h0LCBvcHRpb25zLmZvbnRTaGFwZSkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmV4cGVjdGVkIHR5cGU6IFwiICsgdHlwZSArIFwiIGluIG1ha2VPcmRcIik7XG4gIH1cbn07XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBzdWJzZXF1ZW50IHN5bWJvbE5vZGVzIGhhdmUgdGhlIHNhbWUgY2xhc3Nlcywgc2tldywgbWF4Rm9udCxcbiAqIGFuZCBzdHlsZXMuXG4gKi9cblxuXG52YXIgYnVpbGRDb21tb25fY2FuQ29tYmluZSA9IGZ1bmN0aW9uIGNhbkNvbWJpbmUocHJldiwgbmV4dCkge1xuICBpZiAoY3JlYXRlQ2xhc3MocHJldi5jbGFzc2VzKSAhPT0gY3JlYXRlQ2xhc3MobmV4dC5jbGFzc2VzKSB8fCBwcmV2LnNrZXcgIT09IG5leHQuc2tldyB8fCBwcmV2Lm1heEZvbnRTaXplICE9PSBuZXh0Lm1heEZvbnRTaXplKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIgc3R5bGUgaW4gcHJldi5zdHlsZSkge1xuICAgIGlmIChwcmV2LnN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlKSAmJiBwcmV2LnN0eWxlW3N0eWxlXSAhPT0gbmV4dC5zdHlsZVtzdHlsZV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBfc3R5bGUgaW4gbmV4dC5zdHlsZSkge1xuICAgIGlmIChuZXh0LnN0eWxlLmhhc093blByb3BlcnR5KF9zdHlsZSkgJiYgcHJldi5zdHlsZVtfc3R5bGVdICE9PSBuZXh0LnN0eWxlW19zdHlsZV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG4vKipcbiAqIENvbWJpbmUgY29uc2VxdWV0aXZlIGRvbVRyZWUuc3ltYm9sTm9kZXMgaW50byBhIHNpbmdsZSBzeW1ib2xOb2RlLlxuICogTm90ZTogdGhpcyBmdW5jdGlvbiBtdXRhdGVzIHRoZSBhcmd1bWVudC5cbiAqL1xuXG5cbnZhciBidWlsZENvbW1vbl90cnlDb21iaW5lQ2hhcnMgPSBmdW5jdGlvbiB0cnlDb21iaW5lQ2hhcnMoY2hhcnMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICB2YXIgcHJldiA9IGNoYXJzW2ldO1xuICAgIHZhciBuZXh0ID0gY2hhcnNbaSArIDFdO1xuXG4gICAgaWYgKHByZXYgaW5zdGFuY2VvZiBkb21UcmVlX1N5bWJvbE5vZGUgJiYgbmV4dCBpbnN0YW5jZW9mIGRvbVRyZWVfU3ltYm9sTm9kZSAmJiBidWlsZENvbW1vbl9jYW5Db21iaW5lKHByZXYsIG5leHQpKSB7XG4gICAgICBwcmV2LnRleHQgKz0gbmV4dC50ZXh0O1xuICAgICAgcHJldi5oZWlnaHQgPSBNYXRoLm1heChwcmV2LmhlaWdodCwgbmV4dC5oZWlnaHQpO1xuICAgICAgcHJldi5kZXB0aCA9IE1hdGgubWF4KHByZXYuZGVwdGgsIG5leHQuZGVwdGgpOyAvLyBVc2UgdGhlIGxhc3QgY2hhcmFjdGVyJ3MgaXRhbGljIGNvcnJlY3Rpb24gc2luY2Ugd2UgdXNlXG4gICAgICAvLyBpdCB0byBhZGQgcGFkZGluZyB0byB0aGUgcmlnaHQgb2YgdGhlIHNwYW4gY3JlYXRlZCBmcm9tXG4gICAgICAvLyB0aGUgY29tYmluZWQgY2hhcmFjdGVycy5cblxuICAgICAgcHJldi5pdGFsaWMgPSBuZXh0Lml0YWxpYztcbiAgICAgIGNoYXJzLnNwbGljZShpICsgMSwgMSk7XG4gICAgICBpLS07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNoYXJzO1xufTtcbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBoZWlnaHQsIGRlcHRoLCBhbmQgbWF4Rm9udFNpemUgb2YgYW4gZWxlbWVudCBiYXNlZCBvbiBpdHNcbiAqIGNoaWxkcmVuLlxuICovXG5cblxudmFyIHNpemVFbGVtZW50RnJvbUNoaWxkcmVuID0gZnVuY3Rpb24gc2l6ZUVsZW1lbnRGcm9tQ2hpbGRyZW4oZWxlbSkge1xuICB2YXIgaGVpZ2h0ID0gMDtcbiAgdmFyIGRlcHRoID0gMDtcbiAgdmFyIG1heEZvbnRTaXplID0gMDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW0uY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2hpbGQgPSBlbGVtLmNoaWxkcmVuW2ldO1xuXG4gICAgaWYgKGNoaWxkLmhlaWdodCA+IGhlaWdodCkge1xuICAgICAgaGVpZ2h0ID0gY2hpbGQuaGVpZ2h0O1xuICAgIH1cblxuICAgIGlmIChjaGlsZC5kZXB0aCA+IGRlcHRoKSB7XG4gICAgICBkZXB0aCA9IGNoaWxkLmRlcHRoO1xuICAgIH1cblxuICAgIGlmIChjaGlsZC5tYXhGb250U2l6ZSA+IG1heEZvbnRTaXplKSB7XG4gICAgICBtYXhGb250U2l6ZSA9IGNoaWxkLm1heEZvbnRTaXplO1xuICAgIH1cbiAgfVxuXG4gIGVsZW0uaGVpZ2h0ID0gaGVpZ2h0O1xuICBlbGVtLmRlcHRoID0gZGVwdGg7XG4gIGVsZW0ubWF4Rm9udFNpemUgPSBtYXhGb250U2l6ZTtcbn07XG4vKipcbiAqIE1ha2VzIGEgc3BhbiB3aXRoIHRoZSBnaXZlbiBsaXN0IG9mIGNsYXNzZXMsIGxpc3Qgb2YgY2hpbGRyZW4sIGFuZCBvcHRpb25zLlxuICpcbiAqIFRPRE8oIzk1Myk6IEVuc3VyZSB0aGF0IGBvcHRpb25zYCBpcyBhbHdheXMgcHJvdmlkZWQgKGN1cnJlbnRseSBzb21lIGNhbGxcbiAqIHNpdGVzIGRvbid0IHBhc3MgaXQpIGFuZCBtYWtlIHRoZSB0eXBlIGJlbG93IG1hbmRhdG9yeS5cbiAqIFRPRE86IGFkZCBhIHNlcGFyYXRlIGFyZ3VtZW50IGZvciBtYXRoIGNsYXNzIChlLmcuIGBtb3BgLCBgbWJpbmApLCB3aGljaFxuICogc2hvdWxkIGlmIHByZXNlbnQgY29tZSBmaXJzdCBpbiBgY2xhc3Nlc2AuXG4gKi9cblxuXG52YXIgYnVpbGRDb21tb25fbWFrZVNwYW4gPSBmdW5jdGlvbiBtYWtlU3BhbihjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucywgc3R5bGUpIHtcbiAgdmFyIHNwYW4gPSBuZXcgZG9tVHJlZV9TcGFuKGNsYXNzZXMsIGNoaWxkcmVuLCBvcHRpb25zLCBzdHlsZSk7XG4gIHNpemVFbGVtZW50RnJvbUNoaWxkcmVuKHNwYW4pO1xuICByZXR1cm4gc3Bhbjtcbn07IC8vIFNWRyBvbmUgaXMgc2ltcGxlciAtLSBkb2Vzbid0IHJlcXVpcmUgaGVpZ2h0LCBkZXB0aCwgbWF4LWZvbnQgc2V0dGluZy5cbi8vIFRoaXMgaXMgYWxzbyBhIHNlcGFyYXRlIG1ldGhvZCBmb3IgdHlwZXNhZmV0eS5cblxuXG52YXIgYnVpbGRDb21tb25fbWFrZVN2Z1NwYW4gPSBmdW5jdGlvbiBtYWtlU3ZnU3BhbihjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucywgc3R5bGUpIHtcbiAgcmV0dXJuIG5ldyBkb21UcmVlX1NwYW4oY2xhc3NlcywgY2hpbGRyZW4sIG9wdGlvbnMsIHN0eWxlKTtcbn07XG5cbnZhciBtYWtlTGluZVNwYW4gPSBmdW5jdGlvbiBtYWtlTGluZVNwYW4oY2xhc3NOYW1lLCBvcHRpb25zLCB0aGlja25lc3MpIHtcbiAgdmFyIGxpbmUgPSBidWlsZENvbW1vbl9tYWtlU3BhbihbY2xhc3NOYW1lXSwgW10sIG9wdGlvbnMpO1xuICBsaW5lLmhlaWdodCA9IE1hdGgubWF4KHRoaWNrbmVzcyB8fCBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3MsIG9wdGlvbnMubWluUnVsZVRoaWNrbmVzcyk7XG4gIGxpbmUuc3R5bGUuYm9yZGVyQm90dG9tV2lkdGggPSBsaW5lLmhlaWdodCArIFwiZW1cIjtcbiAgbGluZS5tYXhGb250U2l6ZSA9IDEuMDtcbiAgcmV0dXJuIGxpbmU7XG59O1xuLyoqXG4gKiBNYWtlcyBhbiBhbmNob3Igd2l0aCB0aGUgZ2l2ZW4gaHJlZiwgbGlzdCBvZiBjbGFzc2VzLCBsaXN0IG9mIGNoaWxkcmVuLFxuICogYW5kIG9wdGlvbnMuXG4gKi9cblxuXG52YXIgYnVpbGRDb21tb25fbWFrZUFuY2hvciA9IGZ1bmN0aW9uIG1ha2VBbmNob3IoaHJlZiwgY2xhc3NlcywgY2hpbGRyZW4sIG9wdGlvbnMpIHtcbiAgdmFyIGFuY2hvciA9IG5ldyBkb21UcmVlX0FuY2hvcihocmVmLCBjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucyk7XG4gIHNpemVFbGVtZW50RnJvbUNoaWxkcmVuKGFuY2hvcik7XG4gIHJldHVybiBhbmNob3I7XG59O1xuLyoqXG4gKiBNYWtlcyBhIGRvY3VtZW50IGZyYWdtZW50IHdpdGggdGhlIGdpdmVuIGxpc3Qgb2YgY2hpbGRyZW4uXG4gKi9cblxuXG52YXIgYnVpbGRDb21tb25fbWFrZUZyYWdtZW50ID0gZnVuY3Rpb24gbWFrZUZyYWdtZW50KGNoaWxkcmVuKSB7XG4gIHZhciBmcmFnbWVudCA9IG5ldyB0cmVlX0RvY3VtZW50RnJhZ21lbnQoY2hpbGRyZW4pO1xuICBzaXplRWxlbWVudEZyb21DaGlsZHJlbihmcmFnbWVudCk7XG4gIHJldHVybiBmcmFnbWVudDtcbn07XG4vKipcbiAqIFdyYXBzIGdyb3VwIGluIGEgc3BhbiBpZiBpdCdzIGEgZG9jdW1lbnQgZnJhZ21lbnQsIGFsbG93aW5nIHRvIGFwcGx5IGNsYXNzZXNcbiAqIGFuZCBzdHlsZXNcbiAqL1xuXG5cbnZhciBidWlsZENvbW1vbl93cmFwRnJhZ21lbnQgPSBmdW5jdGlvbiB3cmFwRnJhZ21lbnQoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgaWYgKGdyb3VwIGluc3RhbmNlb2YgdHJlZV9Eb2N1bWVudEZyYWdtZW50KSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uX21ha2VTcGFuKFtdLCBbZ3JvdXBdLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJldHVybiBncm91cDtcbn07IC8vIFRoZXNlIGFyZSBleGFjdCBvYmplY3QgdHlwZXMgdG8gY2F0Y2ggdHlwb3MgaW4gdGhlIG5hbWVzIG9mIHRoZSBvcHRpb25hbCBmaWVsZHMuXG5cblxuLy8gQ29tcHV0ZXMgdGhlIHVwZGF0ZWQgYGNoaWxkcmVuYCBsaXN0IGFuZCB0aGUgb3ZlcmFsbCBkZXB0aC5cbi8vXG4vLyBUaGlzIGhlbHBlciBmdW5jdGlvbiBmb3IgbWFrZVZMaXN0IG1ha2VzIGl0IGVhc2llciB0byBlbmZvcmNlIHR5cGUgc2FmZXR5IGJ5XG4vLyBhbGxvd2luZyBlYXJseSBleGl0cyAocmV0dXJucykgaW4gdGhlIGxvZ2ljLlxudmFyIGdldFZMaXN0Q2hpbGRyZW5BbmREZXB0aCA9IGZ1bmN0aW9uIGdldFZMaXN0Q2hpbGRyZW5BbmREZXB0aChwYXJhbXMpIHtcbiAgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwiaW5kaXZpZHVhbFNoaWZ0XCIpIHtcbiAgICB2YXIgb2xkQ2hpbGRyZW4gPSBwYXJhbXMuY2hpbGRyZW47XG4gICAgdmFyIGNoaWxkcmVuID0gW29sZENoaWxkcmVuWzBdXTsgLy8gQWRkIGluIGtlcm5zIHRvIHRoZSBsaXN0IG9mIHBhcmFtcy5jaGlsZHJlbiB0byBnZXQgZWFjaCBlbGVtZW50IHRvIGJlXG4gICAgLy8gc2hpZnRlZCB0byB0aGUgY29ycmVjdCBzcGVjaWZpZWQgc2hpZnRcblxuICAgIHZhciBfZGVwdGggPSAtb2xkQ2hpbGRyZW5bMF0uc2hpZnQgLSBvbGRDaGlsZHJlblswXS5lbGVtLmRlcHRoO1xuXG4gICAgdmFyIGN1cnJQb3MgPSBfZGVwdGg7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IG9sZENoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGlmZiA9IC1vbGRDaGlsZHJlbltpXS5zaGlmdCAtIGN1cnJQb3MgLSBvbGRDaGlsZHJlbltpXS5lbGVtLmRlcHRoO1xuICAgICAgdmFyIHNpemUgPSBkaWZmIC0gKG9sZENoaWxkcmVuW2kgLSAxXS5lbGVtLmhlaWdodCArIG9sZENoaWxkcmVuW2kgLSAxXS5lbGVtLmRlcHRoKTtcbiAgICAgIGN1cnJQb3MgPSBjdXJyUG9zICsgZGlmZjtcbiAgICAgIGNoaWxkcmVuLnB1c2goe1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogc2l6ZVxuICAgICAgfSk7XG4gICAgICBjaGlsZHJlbi5wdXNoKG9sZENoaWxkcmVuW2ldKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgICAgZGVwdGg6IF9kZXB0aFxuICAgIH07XG4gIH1cblxuICB2YXIgZGVwdGg7XG5cbiAgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwidG9wXCIpIHtcbiAgICAvLyBXZSBhbHdheXMgc3RhcnQgYXQgdGhlIGJvdHRvbSwgc28gY2FsY3VsYXRlIHRoZSBib3R0b20gYnkgYWRkaW5nIHVwXG4gICAgLy8gYWxsIHRoZSBzaXplc1xuICAgIHZhciBib3R0b20gPSBwYXJhbXMucG9zaXRpb25EYXRhO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHBhcmFtcy5jaGlsZHJlbi5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IHBhcmFtcy5jaGlsZHJlbltfaV07XG4gICAgICBib3R0b20gLT0gY2hpbGQudHlwZSA9PT0gXCJrZXJuXCIgPyBjaGlsZC5zaXplIDogY2hpbGQuZWxlbS5oZWlnaHQgKyBjaGlsZC5lbGVtLmRlcHRoO1xuICAgIH1cblxuICAgIGRlcHRoID0gYm90dG9tO1xuICB9IGVsc2UgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwiYm90dG9tXCIpIHtcbiAgICBkZXB0aCA9IC1wYXJhbXMucG9zaXRpb25EYXRhO1xuICB9IGVsc2Uge1xuICAgIHZhciBmaXJzdENoaWxkID0gcGFyYW1zLmNoaWxkcmVuWzBdO1xuXG4gICAgaWYgKGZpcnN0Q2hpbGQudHlwZSAhPT0gXCJlbGVtXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmlyc3QgY2hpbGQgbXVzdCBoYXZlIHR5cGUgXCJlbGVtXCIuJyk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwic2hpZnRcIikge1xuICAgICAgZGVwdGggPSAtZmlyc3RDaGlsZC5lbGVtLmRlcHRoIC0gcGFyYW1zLnBvc2l0aW9uRGF0YTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwiZmlyc3RCYXNlbGluZVwiKSB7XG4gICAgICBkZXB0aCA9IC1maXJzdENoaWxkLmVsZW0uZGVwdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcG9zaXRpb25UeXBlIFwiICsgcGFyYW1zLnBvc2l0aW9uVHlwZSArIFwiLlwiKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNoaWxkcmVuOiBwYXJhbXMuY2hpbGRyZW4sXG4gICAgZGVwdGg6IGRlcHRoXG4gIH07XG59O1xuLyoqXG4gKiBNYWtlcyBhIHZlcnRpY2FsIGxpc3QgYnkgc3RhY2tpbmcgZWxlbWVudHMgYW5kIGtlcm5zIG9uIHRvcCBvZiBlYWNoIG90aGVyLlxuICogQWxsb3dzIGZvciBtYW55IGRpZmZlcmVudCB3YXlzIG9mIHNwZWNpZnlpbmcgdGhlIHBvc2l0aW9uaW5nIG1ldGhvZC5cbiAqXG4gKiBTZWUgVkxpc3RQYXJhbSBkb2N1bWVudGF0aW9uIGFib3ZlLlxuICovXG5cblxudmFyIGJ1aWxkQ29tbW9uX21ha2VWTGlzdCA9IGZ1bmN0aW9uIG1ha2VWTGlzdChwYXJhbXMsIG9wdGlvbnMpIHtcbiAgdmFyIF9nZXRWTGlzdENoaWxkcmVuQW5kRCA9IGdldFZMaXN0Q2hpbGRyZW5BbmREZXB0aChwYXJhbXMpLFxuICAgICAgY2hpbGRyZW4gPSBfZ2V0Vkxpc3RDaGlsZHJlbkFuZEQuY2hpbGRyZW4sXG4gICAgICBkZXB0aCA9IF9nZXRWTGlzdENoaWxkcmVuQW5kRC5kZXB0aDsgLy8gQ3JlYXRlIGEgc3RydXQgdGhhdCBpcyB0YWxsZXIgdGhhbiBhbnkgbGlzdCBpdGVtLiBUaGUgc3RydXQgaXMgYWRkZWQgdG9cbiAgLy8gZWFjaCBpdGVtLCB3aGVyZSBpdCB3aWxsIGRldGVybWluZSB0aGUgaXRlbSdzIGJhc2VsaW5lLiBTaW5jZSBpdCBoYXNcbiAgLy8gYG92ZXJmbG93OmhpZGRlbmAsIHRoZSBzdHJ1dCdzIHRvcCBlZGdlIHdpbGwgc2l0IG9uIHRoZSBpdGVtJ3MgbGluZSBib3gnc1xuICAvLyB0b3AgZWRnZSBhbmQgdGhlIHN0cnV0J3MgYm90dG9tIGVkZ2Ugd2lsbCBzaXQgb24gdGhlIGl0ZW0ncyBiYXNlbGluZSxcbiAgLy8gd2l0aCBubyBhZGRpdGlvbmFsIGxpbmUtaGVpZ2h0IHNwYWNpbmcuIFRoaXMgYWxsb3dzIHRoZSBpdGVtIGJhc2VsaW5lIHRvXG4gIC8vIGJlIHBvc2l0aW9uZWQgcHJlY2lzZWx5IHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgZm9udCBhc2NlbnQgYW5kXG4gIC8vIGxpbmUtaGVpZ2h0LlxuXG5cbiAgdmFyIHBzdHJ1dFNpemUgPSAwO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTtcblxuICAgIGlmIChjaGlsZC50eXBlID09PSBcImVsZW1cIikge1xuICAgICAgdmFyIGVsZW0gPSBjaGlsZC5lbGVtO1xuICAgICAgcHN0cnV0U2l6ZSA9IE1hdGgubWF4KHBzdHJ1dFNpemUsIGVsZW0ubWF4Rm9udFNpemUsIGVsZW0uaGVpZ2h0KTtcbiAgICB9XG4gIH1cblxuICBwc3RydXRTaXplICs9IDI7XG4gIHZhciBwc3RydXQgPSBidWlsZENvbW1vbl9tYWtlU3BhbihbXCJwc3RydXRcIl0sIFtdKTtcbiAgcHN0cnV0LnN0eWxlLmhlaWdodCA9IHBzdHJ1dFNpemUgKyBcImVtXCI7IC8vIENyZWF0ZSBhIG5ldyBsaXN0IG9mIGFjdHVhbCBjaGlsZHJlbiBhdCB0aGUgY29ycmVjdCBvZmZzZXRzXG5cbiAgdmFyIHJlYWxDaGlsZHJlbiA9IFtdO1xuICB2YXIgbWluUG9zID0gZGVwdGg7XG4gIHZhciBtYXhQb3MgPSBkZXB0aDtcbiAgdmFyIGN1cnJQb3MgPSBkZXB0aDtcblxuICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBjaGlsZHJlbi5sZW5ndGg7IF9pMisrKSB7XG4gICAgdmFyIF9jaGlsZCA9IGNoaWxkcmVuW19pMl07XG5cbiAgICBpZiAoX2NoaWxkLnR5cGUgPT09IFwia2VyblwiKSB7XG4gICAgICBjdXJyUG9zICs9IF9jaGlsZC5zaXplO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX2VsZW0gPSBfY2hpbGQuZWxlbTtcbiAgICAgIHZhciBjbGFzc2VzID0gX2NoaWxkLndyYXBwZXJDbGFzc2VzIHx8IFtdO1xuICAgICAgdmFyIHN0eWxlID0gX2NoaWxkLndyYXBwZXJTdHlsZSB8fCB7fTtcbiAgICAgIHZhciBjaGlsZFdyYXAgPSBidWlsZENvbW1vbl9tYWtlU3BhbihjbGFzc2VzLCBbcHN0cnV0LCBfZWxlbV0sIHVuZGVmaW5lZCwgc3R5bGUpO1xuICAgICAgY2hpbGRXcmFwLnN0eWxlLnRvcCA9IC1wc3RydXRTaXplIC0gY3VyclBvcyAtIF9lbGVtLmRlcHRoICsgXCJlbVwiO1xuXG4gICAgICBpZiAoX2NoaWxkLm1hcmdpbkxlZnQpIHtcbiAgICAgICAgY2hpbGRXcmFwLnN0eWxlLm1hcmdpbkxlZnQgPSBfY2hpbGQubWFyZ2luTGVmdDtcbiAgICAgIH1cblxuICAgICAgaWYgKF9jaGlsZC5tYXJnaW5SaWdodCkge1xuICAgICAgICBjaGlsZFdyYXAuc3R5bGUubWFyZ2luUmlnaHQgPSBfY2hpbGQubWFyZ2luUmlnaHQ7XG4gICAgICB9XG5cbiAgICAgIHJlYWxDaGlsZHJlbi5wdXNoKGNoaWxkV3JhcCk7XG4gICAgICBjdXJyUG9zICs9IF9lbGVtLmhlaWdodCArIF9lbGVtLmRlcHRoO1xuICAgIH1cblxuICAgIG1pblBvcyA9IE1hdGgubWluKG1pblBvcywgY3VyclBvcyk7XG4gICAgbWF4UG9zID0gTWF0aC5tYXgobWF4UG9zLCBjdXJyUG9zKTtcbiAgfSAvLyBUaGUgdmxpc3QgY29udGVudHMgZ28gaW4gYSB0YWJsZS1jZWxsIHdpdGggYHZlcnRpY2FsLWFsaWduOmJvdHRvbWAuXG4gIC8vIFRoaXMgY2VsbCdzIGJvdHRvbSBlZGdlIHdpbGwgZGV0ZXJtaW5lIHRoZSBjb250YWluaW5nIHRhYmxlJ3MgYmFzZWxpbmVcbiAgLy8gd2l0aG91dCBvdmVybHkgZXhwYW5kaW5nIHRoZSBjb250YWluaW5nIGxpbmUtYm94LlxuXG5cbiAgdmFyIHZsaXN0ID0gYnVpbGRDb21tb25fbWFrZVNwYW4oW1widmxpc3RcIl0sIHJlYWxDaGlsZHJlbik7XG4gIHZsaXN0LnN0eWxlLmhlaWdodCA9IG1heFBvcyArIFwiZW1cIjsgLy8gQSBzZWNvbmQgcm93IGlzIHVzZWQgaWYgbmVjZXNzYXJ5IHRvIHJlcHJlc2VudCB0aGUgdmxpc3QncyBkZXB0aC5cblxuICB2YXIgcm93cztcblxuICBpZiAobWluUG9zIDwgMCkge1xuICAgIC8vIFdlIHdpbGwgZGVmaW5lIGRlcHRoIGluIGFuIGVtcHR5IHNwYW4gd2l0aCBkaXNwbGF5OiB0YWJsZS1jZWxsLlxuICAgIC8vIEl0IHNob3VsZCByZW5kZXIgd2l0aCB0aGUgaGVpZ2h0IHRoYXQgd2UgZGVmaW5lLiBCdXQgQ2hyb21lLCBpblxuICAgIC8vIGNvbnRlbnRlZGl0YWJsZSBtb2RlIG9ubHksIHRyZWF0cyB0aGF0IHNwYW4gYXMgaWYgaXQgY29udGFpbnMgc29tZVxuICAgIC8vIHRleHQgY29udGVudC4gQW5kIHRoYXQgbWluLWhlaWdodCBvdmVyLXJpZGVzIG91ciBkZXNpcmVkIGhlaWdodC5cbiAgICAvLyBTbyB3ZSBwdXQgYW5vdGhlciBlbXB0eSBzcGFuIGluc2lkZSB0aGUgZGVwdGggc3RydXQgc3Bhbi5cbiAgICB2YXIgZW1wdHlTcGFuID0gYnVpbGRDb21tb25fbWFrZVNwYW4oW10sIFtdKTtcbiAgICB2YXIgZGVwdGhTdHJ1dCA9IGJ1aWxkQ29tbW9uX21ha2VTcGFuKFtcInZsaXN0XCJdLCBbZW1wdHlTcGFuXSk7XG4gICAgZGVwdGhTdHJ1dC5zdHlsZS5oZWlnaHQgPSAtbWluUG9zICsgXCJlbVwiOyAvLyBTYWZhcmkgd2FudHMgdGhlIGZpcnN0IHJvdyB0byBoYXZlIGlubGluZSBjb250ZW50OyBvdGhlcndpc2UgaXRcbiAgICAvLyBwdXRzIHRoZSBib3R0b20gb2YgdGhlICpzZWNvbmQqIHJvdyBvbiB0aGUgYmFzZWxpbmUuXG5cbiAgICB2YXIgdG9wU3RydXQgPSBidWlsZENvbW1vbl9tYWtlU3BhbihbXCJ2bGlzdC1zXCJdLCBbbmV3IGRvbVRyZWVfU3ltYm9sTm9kZShcIlxcdTIwMEJcIildKTtcbiAgICByb3dzID0gW2J1aWxkQ29tbW9uX21ha2VTcGFuKFtcInZsaXN0LXJcIl0sIFt2bGlzdCwgdG9wU3RydXRdKSwgYnVpbGRDb21tb25fbWFrZVNwYW4oW1widmxpc3QtclwiXSwgW2RlcHRoU3RydXRdKV07XG4gIH0gZWxzZSB7XG4gICAgcm93cyA9IFtidWlsZENvbW1vbl9tYWtlU3BhbihbXCJ2bGlzdC1yXCJdLCBbdmxpc3RdKV07XG4gIH1cblxuICB2YXIgdnRhYmxlID0gYnVpbGRDb21tb25fbWFrZVNwYW4oW1widmxpc3QtdFwiXSwgcm93cyk7XG5cbiAgaWYgKHJvd3MubGVuZ3RoID09PSAyKSB7XG4gICAgdnRhYmxlLmNsYXNzZXMucHVzaChcInZsaXN0LXQyXCIpO1xuICB9XG5cbiAgdnRhYmxlLmhlaWdodCA9IG1heFBvcztcbiAgdnRhYmxlLmRlcHRoID0gLW1pblBvcztcbiAgcmV0dXJuIHZ0YWJsZTtcbn07IC8vIEdsdWUgaXMgYSBjb25jZXB0IGZyb20gVGVYIHdoaWNoIGlzIGEgZmxleGlibGUgc3BhY2UgYmV0d2VlbiBlbGVtZW50cyBpblxuLy8gZWl0aGVyIGEgdmVydGljYWwgb3IgaG9yaXpvbnRhbCBsaXN0LiBJbiBLYVRlWCwgYXQgbGVhc3QgZm9yIG5vdywgaXQnc1xuLy8gc3RhdGljIHNwYWNlIGJldHdlZW4gZWxlbWVudHMgaW4gYSBob3Jpem9udGFsIGxheW91dC5cblxuXG52YXIgYnVpbGRDb21tb25fbWFrZUdsdWUgPSBmdW5jdGlvbiBtYWtlR2x1ZShtZWFzdXJlbWVudCwgb3B0aW9ucykge1xuICAvLyBNYWtlIGFuIGVtcHR5IHNwYW4gZm9yIHRoZSBzcGFjZVxuICB2YXIgcnVsZSA9IGJ1aWxkQ29tbW9uX21ha2VTcGFuKFtcIm1zcGFjZVwiXSwgW10sIG9wdGlvbnMpO1xuICB2YXIgc2l6ZSA9IHVuaXRzX2NhbGN1bGF0ZVNpemUobWVhc3VyZW1lbnQsIG9wdGlvbnMpO1xuICBydWxlLnN0eWxlLm1hcmdpblJpZ2h0ID0gc2l6ZSArIFwiZW1cIjtcbiAgcmV0dXJuIHJ1bGU7XG59OyAvLyBUYWtlcyBmb250IG9wdGlvbnMsIGFuZCByZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBmb250TG9va3VwIG5hbWVcblxuXG52YXIgcmV0cmlldmVUZXh0Rm9udE5hbWUgPSBmdW5jdGlvbiByZXRyaWV2ZVRleHRGb250TmFtZShmb250RmFtaWx5LCBmb250V2VpZ2h0LCBmb250U2hhcGUpIHtcbiAgdmFyIGJhc2VGb250TmFtZSA9IFwiXCI7XG5cbiAgc3dpdGNoIChmb250RmFtaWx5KSB7XG4gICAgY2FzZSBcImFtc3JtXCI6XG4gICAgICBiYXNlRm9udE5hbWUgPSBcIkFNU1wiO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwidGV4dHJtXCI6XG4gICAgICBiYXNlRm9udE5hbWUgPSBcIk1haW5cIjtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInRleHRzZlwiOlxuICAgICAgYmFzZUZvbnROYW1lID0gXCJTYW5zU2VyaWZcIjtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInRleHR0dFwiOlxuICAgICAgYmFzZUZvbnROYW1lID0gXCJUeXBld3JpdGVyXCI7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBiYXNlRm9udE5hbWUgPSBmb250RmFtaWx5O1xuICAgIC8vIHVzZSBmb250cyBhZGRlZCBieSBhIHBsdWdpblxuICB9XG5cbiAgdmFyIGZvbnRTdHlsZXNOYW1lO1xuXG4gIGlmIChmb250V2VpZ2h0ID09PSBcInRleHRiZlwiICYmIGZvbnRTaGFwZSA9PT0gXCJ0ZXh0aXRcIikge1xuICAgIGZvbnRTdHlsZXNOYW1lID0gXCJCb2xkSXRhbGljXCI7XG4gIH0gZWxzZSBpZiAoZm9udFdlaWdodCA9PT0gXCJ0ZXh0YmZcIikge1xuICAgIGZvbnRTdHlsZXNOYW1lID0gXCJCb2xkXCI7XG4gIH0gZWxzZSBpZiAoZm9udFdlaWdodCA9PT0gXCJ0ZXh0aXRcIikge1xuICAgIGZvbnRTdHlsZXNOYW1lID0gXCJJdGFsaWNcIjtcbiAgfSBlbHNlIHtcbiAgICBmb250U3R5bGVzTmFtZSA9IFwiUmVndWxhclwiO1xuICB9XG5cbiAgcmV0dXJuIGJhc2VGb250TmFtZSArIFwiLVwiICsgZm9udFN0eWxlc05hbWU7XG59O1xuLyoqXG4gKiBNYXBzIFRlWCBmb250IGNvbW1hbmRzIHRvIG9iamVjdHMgY29udGFpbmluZzpcbiAqIC0gdmFyaWFudDogc3RyaW5nIHVzZWQgZm9yIFwibWF0aHZhcmlhbnRcIiBhdHRyaWJ1dGUgaW4gYnVpbGRNYXRoTUwuanNcbiAqIC0gZm9udE5hbWU6IHRoZSBcInN0eWxlXCIgcGFyYW1ldGVyIHRvIGZvbnRNZXRyaWNzLmdldENoYXJhY3Rlck1ldHJpY3NcbiAqL1xuLy8gQSBtYXAgYmV0d2VlbiB0ZXggZm9udCBjb21tYW5kcyBhbiBNYXRoTUwgbWF0aHZhcmlhbnQgYXR0cmlidXRlIHZhbHVlc1xuXG5cbnZhciBmb250TWFwID0ge1xuICAvLyBzdHlsZXNcbiAgXCJtYXRoYmZcIjoge1xuICAgIHZhcmlhbnQ6IFwiYm9sZFwiLFxuICAgIGZvbnROYW1lOiBcIk1haW4tQm9sZFwiXG4gIH0sXG4gIFwibWF0aHJtXCI6IHtcbiAgICB2YXJpYW50OiBcIm5vcm1hbFwiLFxuICAgIGZvbnROYW1lOiBcIk1haW4tUmVndWxhclwiXG4gIH0sXG4gIFwidGV4dGl0XCI6IHtcbiAgICB2YXJpYW50OiBcIml0YWxpY1wiLFxuICAgIGZvbnROYW1lOiBcIk1haW4tSXRhbGljXCJcbiAgfSxcbiAgXCJtYXRoaXRcIjoge1xuICAgIHZhcmlhbnQ6IFwiaXRhbGljXCIsXG4gICAgZm9udE5hbWU6IFwiTWFpbi1JdGFsaWNcIlxuICB9LFxuICAvLyBEZWZhdWx0IG1hdGggZm9udCwgXCJtYXRobm9ybWFsXCIgYW5kIFwiYm9sZHN5bWJvbFwiIGFyZSBtaXNzaW5nIGJlY2F1c2UgdGhleVxuICAvLyByZXF1aXJlIHRoZSB1c2Ugb2Ygc2V2ZXJhbCBmb250czogTWFpbi1JdGFsaWMgYW5kIE1hdGgtSXRhbGljIGZvciBkZWZhdWx0XG4gIC8vIG1hdGggZm9udCwgTWFpbi1JdGFsaWMsIE1hdGgtSXRhbGljLCBDYWxpZ3JhcGhpYyBmb3IgXCJtYXRobm9ybWFsXCIsIGFuZFxuICAvLyBNYXRoLUJvbGRJdGFsaWMgYW5kIE1haW4tQm9sZCBmb3IgXCJib2xkc3ltYm9sXCIuICBUaGlzIGlzIGhhbmRsZWQgYnkgYVxuICAvLyBzcGVjaWFsIGNhc2UgaW4gbWFrZU9yZCB3aGljaCBlbmRzIHVwIGNhbGxpbmcgbWF0aGRlZmF1bHQsIG1hdGhub3JtYWwsXG4gIC8vIGFuZCBib2xkc3ltYm9sLlxuICAvLyBmYW1pbGllc1xuICBcIm1hdGhiYlwiOiB7XG4gICAgdmFyaWFudDogXCJkb3VibGUtc3RydWNrXCIsXG4gICAgZm9udE5hbWU6IFwiQU1TLVJlZ3VsYXJcIlxuICB9LFxuICBcIm1hdGhjYWxcIjoge1xuICAgIHZhcmlhbnQ6IFwic2NyaXB0XCIsXG4gICAgZm9udE5hbWU6IFwiQ2FsaWdyYXBoaWMtUmVndWxhclwiXG4gIH0sXG4gIFwibWF0aGZyYWtcIjoge1xuICAgIHZhcmlhbnQ6IFwiZnJha3R1clwiLFxuICAgIGZvbnROYW1lOiBcIkZyYWt0dXItUmVndWxhclwiXG4gIH0sXG4gIFwibWF0aHNjclwiOiB7XG4gICAgdmFyaWFudDogXCJzY3JpcHRcIixcbiAgICBmb250TmFtZTogXCJTY3JpcHQtUmVndWxhclwiXG4gIH0sXG4gIFwibWF0aHNmXCI6IHtcbiAgICB2YXJpYW50OiBcInNhbnMtc2VyaWZcIixcbiAgICBmb250TmFtZTogXCJTYW5zU2VyaWYtUmVndWxhclwiXG4gIH0sXG4gIFwibWF0aHR0XCI6IHtcbiAgICB2YXJpYW50OiBcIm1vbm9zcGFjZVwiLFxuICAgIGZvbnROYW1lOiBcIlR5cGV3cml0ZXItUmVndWxhclwiXG4gIH1cbn07XG52YXIgc3ZnRGF0YSA9IHtcbiAgLy8gICBwYXRoLCB3aWR0aCwgaGVpZ2h0XG4gIHZlYzogW1widmVjXCIsIDAuNDcxLCAwLjcxNF0sXG4gIC8vIHZhbHVlcyBmcm9tIHRoZSBmb250IGdseXBoXG4gIG9paW50U2l6ZTE6IFtcIm9paW50U2l6ZTFcIiwgMC45NTcsIDAuNDk5XSxcbiAgLy8gb3ZhbCB0byBvdmVybGF5IHRoZSBpbnRlZ3JhbmRcbiAgb2lpbnRTaXplMjogW1wib2lpbnRTaXplMlwiLCAxLjQ3MiwgMC42NTldLFxuICBvaWlpbnRTaXplMTogW1wib2lpaW50U2l6ZTFcIiwgMS4zMDQsIDAuNDk5XSxcbiAgb2lpaW50U2l6ZTI6IFtcIm9paWludFNpemUyXCIsIDEuOTgsIDAuNjU5XVxufTtcblxudmFyIGJ1aWxkQ29tbW9uX3N0YXRpY1N2ZyA9IGZ1bmN0aW9uIHN0YXRpY1N2Zyh2YWx1ZSwgb3B0aW9ucykge1xuICAvLyBDcmVhdGUgYSBzcGFuIHdpdGggaW5saW5lIFNWRyBmb3IgdGhlIGVsZW1lbnQuXG4gIHZhciBfc3ZnRGF0YSR2YWx1ZSA9IHN2Z0RhdGFbdmFsdWVdLFxuICAgICAgcGF0aE5hbWUgPSBfc3ZnRGF0YSR2YWx1ZVswXSxcbiAgICAgIHdpZHRoID0gX3N2Z0RhdGEkdmFsdWVbMV0sXG4gICAgICBoZWlnaHQgPSBfc3ZnRGF0YSR2YWx1ZVsyXTtcbiAgdmFyIHBhdGggPSBuZXcgZG9tVHJlZV9QYXRoTm9kZShwYXRoTmFtZSk7XG4gIHZhciBzdmdOb2RlID0gbmV3IFN2Z05vZGUoW3BhdGhdLCB7XG4gICAgXCJ3aWR0aFwiOiB3aWR0aCArIFwiZW1cIixcbiAgICBcImhlaWdodFwiOiBoZWlnaHQgKyBcImVtXCIsXG4gICAgLy8gT3ZlcnJpZGUgQ1NTIHJ1bGUgYC5rYXRleCBzdmcgeyB3aWR0aDogMTAwJSB9YFxuICAgIFwic3R5bGVcIjogXCJ3aWR0aDpcIiArIHdpZHRoICsgXCJlbVwiLFxuICAgIFwidmlld0JveFwiOiBcIjAgMCBcIiArIDEwMDAgKiB3aWR0aCArIFwiIFwiICsgMTAwMCAqIGhlaWdodCxcbiAgICBcInByZXNlcnZlQXNwZWN0UmF0aW9cIjogXCJ4TWluWU1pblwiXG4gIH0pO1xuICB2YXIgc3BhbiA9IGJ1aWxkQ29tbW9uX21ha2VTdmdTcGFuKFtcIm92ZXJsYXlcIl0sIFtzdmdOb2RlXSwgb3B0aW9ucyk7XG4gIHNwYW4uaGVpZ2h0ID0gaGVpZ2h0O1xuICBzcGFuLnN0eWxlLmhlaWdodCA9IGhlaWdodCArIFwiZW1cIjtcbiAgc3Bhbi5zdHlsZS53aWR0aCA9IHdpZHRoICsgXCJlbVwiO1xuICByZXR1cm4gc3Bhbjtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGJ1aWxkQ29tbW9uID0gKHtcbiAgZm9udE1hcDogZm9udE1hcCxcbiAgbWFrZVN5bWJvbDogYnVpbGRDb21tb25fbWFrZVN5bWJvbCxcbiAgbWF0aHN5bTogYnVpbGRDb21tb25fbWF0aHN5bSxcbiAgbWFrZVNwYW46IGJ1aWxkQ29tbW9uX21ha2VTcGFuLFxuICBtYWtlU3ZnU3BhbjogYnVpbGRDb21tb25fbWFrZVN2Z1NwYW4sXG4gIG1ha2VMaW5lU3BhbjogbWFrZUxpbmVTcGFuLFxuICBtYWtlQW5jaG9yOiBidWlsZENvbW1vbl9tYWtlQW5jaG9yLFxuICBtYWtlRnJhZ21lbnQ6IGJ1aWxkQ29tbW9uX21ha2VGcmFnbWVudCxcbiAgd3JhcEZyYWdtZW50OiBidWlsZENvbW1vbl93cmFwRnJhZ21lbnQsXG4gIG1ha2VWTGlzdDogYnVpbGRDb21tb25fbWFrZVZMaXN0LFxuICBtYWtlT3JkOiBidWlsZENvbW1vbl9tYWtlT3JkLFxuICBtYWtlR2x1ZTogYnVpbGRDb21tb25fbWFrZUdsdWUsXG4gIHN0YXRpY1N2ZzogYnVpbGRDb21tb25fc3RhdGljU3ZnLFxuICBzdmdEYXRhOiBzdmdEYXRhLFxuICB0cnlDb21iaW5lQ2hhcnM6IGJ1aWxkQ29tbW9uX3RyeUNvbWJpbmVDaGFyc1xufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9wYXJzZU5vZGUuanNcblxuXG4vKipcbiAqIEFzc2VydHMgdGhhdCB0aGUgbm9kZSBpcyBvZiB0aGUgZ2l2ZW4gdHlwZSBhbmQgcmV0dXJucyBpdCB3aXRoIHN0cmljdGVyXG4gKiB0eXBpbmcuIFRocm93cyBpZiB0aGUgbm9kZSdzIHR5cGUgZG9lcyBub3QgbWF0Y2guXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vZGVUeXBlKG5vZGUsIHR5cGUpIHtcbiAgdmFyIHR5cGVkTm9kZSA9IGNoZWNrTm9kZVR5cGUobm9kZSwgdHlwZSk7XG5cbiAgaWYgKCF0eXBlZE5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBub2RlIG9mIHR5cGUgXCIgKyB0eXBlICsgXCIsIGJ1dCBnb3QgXCIgKyAobm9kZSA/IFwibm9kZSBvZiB0eXBlIFwiICsgbm9kZS50eXBlIDogU3RyaW5nKG5vZGUpKSk7XG4gIH0gLy8gJEZsb3dGaXhNZTogVW5zdXJlIHdoeS5cblxuXG4gIHJldHVybiB0eXBlZE5vZGU7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIG5vZGUgbW9yZSBzdHJpY3RseSB0eXBlZCBpZmYgaXQgaXMgb2YgdGhlIGdpdmVuIHR5cGUuIE90aGVyd2lzZSxcbiAqIHJldHVybnMgbnVsbC5cbiAqL1xuXG5mdW5jdGlvbiBjaGVja05vZGVUeXBlKG5vZGUsIHR5cGUpIHtcbiAgaWYgKG5vZGUgJiYgbm9kZS50eXBlID09PSB0eXBlKSB7XG4gICAgLy8gVGhlIGRlZmluaXRpb24gb2YgUGFyc2VOb2RlPFRZUEU+IGRvZXNuJ3QgY29tbXVuaWNhdGUgdG8gZmxvdyB0aGF0XG4gICAgLy8gYHR5cGU6IFRZUEVgIChhcyB0aGF0J3Mgbm90IGV4cGxpY2l0bHkgbWVudGlvbmVkIGFueXdoZXJlKSwgdGhvdWdoIHRoYXRcbiAgICAvLyBoYXBwZW5zIHRvIGJlIHRydWUgZm9yIGFsbCBvdXIgdmFsdWUgdHlwZXMuXG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIEFzc2VydHMgdGhhdCB0aGUgbm9kZSBpcyBvZiB0aGUgZ2l2ZW4gdHlwZSBhbmQgcmV0dXJucyBpdCB3aXRoIHN0cmljdGVyXG4gKiB0eXBpbmcuIFRocm93cyBpZiB0aGUgbm9kZSdzIHR5cGUgZG9lcyBub3QgbWF0Y2guXG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0QXRvbUZhbWlseShub2RlLCBmYW1pbHkpIHtcbiAgdmFyIHR5cGVkTm9kZSA9IGNoZWNrQXRvbUZhbWlseShub2RlLCBmYW1pbHkpO1xuXG4gIGlmICghdHlwZWROb2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbm9kZSBvZiB0eXBlIFxcXCJhdG9tXFxcIiBhbmQgZmFtaWx5IFxcXCJcIiArIGZhbWlseSArIFwiXFxcIiwgYnV0IGdvdCBcIiArIChub2RlID8gbm9kZS50eXBlID09PSBcImF0b21cIiA/IFwiYXRvbSBvZiBmYW1pbHkgXCIgKyBub2RlLmZhbWlseSA6IFwibm9kZSBvZiB0eXBlIFwiICsgbm9kZS50eXBlIDogU3RyaW5nKG5vZGUpKSk7XG4gIH1cblxuICByZXR1cm4gdHlwZWROb2RlO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBub2RlIG1vcmUgc3RyaWN0bHkgdHlwZWQgaWZmIGl0IGlzIG9mIHRoZSBnaXZlbiB0eXBlLiBPdGhlcndpc2UsXG4gKiByZXR1cm5zIG51bGwuXG4gKi9cblxuZnVuY3Rpb24gY2hlY2tBdG9tRmFtaWx5KG5vZGUsIGZhbWlseSkge1xuICByZXR1cm4gbm9kZSAmJiBub2RlLnR5cGUgPT09IFwiYXRvbVwiICYmIG5vZGUuZmFtaWx5ID09PSBmYW1pbHkgPyBub2RlIDogbnVsbDtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgbm9kZSBtb3JlIHN0cmljdGx5IHR5cGVkIGlmZiBpdCBpcyBvZiB0aGUgZ2l2ZW4gdHlwZS4gT3RoZXJ3aXNlLFxuICogcmV0dXJucyBudWxsLlxuICovXG5cbmZ1bmN0aW9uIGFzc2VydFN5bWJvbE5vZGVUeXBlKG5vZGUpIHtcbiAgdmFyIHR5cGVkTm9kZSA9IGNoZWNrU3ltYm9sTm9kZVR5cGUobm9kZSk7XG5cbiAgaWYgKCF0eXBlZE5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBub2RlIG9mIHN5bWJvbCBncm91cCB0eXBlLCBidXQgZ290IFwiICsgKG5vZGUgPyBcIm5vZGUgb2YgdHlwZSBcIiArIG5vZGUudHlwZSA6IFN0cmluZyhub2RlKSkpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGVkTm9kZTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgbm9kZSBtb3JlIHN0cmljdGx5IHR5cGVkIGlmZiBpdCBpcyBvZiB0aGUgZ2l2ZW4gdHlwZS4gT3RoZXJ3aXNlLFxuICogcmV0dXJucyBudWxsLlxuICovXG5cbmZ1bmN0aW9uIGNoZWNrU3ltYm9sTm9kZVR5cGUobm9kZSkge1xuICBpZiAobm9kZSAmJiAobm9kZS50eXBlID09PSBcImF0b21cIiB8fCBOT05fQVRPTVMuaGFzT3duUHJvcGVydHkobm9kZS50eXBlKSkpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3NwYWNpbmdEYXRhLmpzXG4vKipcbiAqIERlc2NyaWJlcyBzcGFjZXMgYmV0d2VlbiBkaWZmZXJlbnQgY2xhc3NlcyBvZiBhdG9tcy5cbiAqL1xudmFyIHRoaW5zcGFjZSA9IHtcbiAgbnVtYmVyOiAzLFxuICB1bml0OiBcIm11XCJcbn07XG52YXIgbWVkaXVtc3BhY2UgPSB7XG4gIG51bWJlcjogNCxcbiAgdW5pdDogXCJtdVwiXG59O1xudmFyIHRoaWNrc3BhY2UgPSB7XG4gIG51bWJlcjogNSxcbiAgdW5pdDogXCJtdVwiXG59OyAvLyBNYWtpbmcgdGhlIHR5cGUgYmVsb3cgZXhhY3Qgd2l0aCBhbGwgb3B0aW9uYWwgZmllbGRzIGRvZXNuJ3Qgd29yayBkdWUgdG9cbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzQ1ODJcbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzU2ODhcbi8vIEhvd2V2ZXIsIHNpbmNlICphbGwqIGZpZWxkcyBhcmUgb3B0aW9uYWwsICRTaGFwZTw+IHdvcmtzIGFzIHN1Z2dlc3RlZCBpbiA1Njg4XG4vLyBhYm92ZS5cblxuLy8gU3BhY2luZyByZWxhdGlvbnNoaXBzIGZvciBkaXNwbGF5IGFuZCB0ZXh0IHN0eWxlc1xudmFyIHNwYWNpbmdzID0ge1xuICBtb3JkOiB7XG4gICAgbW9wOiB0aGluc3BhY2UsXG4gICAgbWJpbjogbWVkaXVtc3BhY2UsXG4gICAgbXJlbDogdGhpY2tzcGFjZSxcbiAgICBtaW5uZXI6IHRoaW5zcGFjZVxuICB9LFxuICBtb3A6IHtcbiAgICBtb3JkOiB0aGluc3BhY2UsXG4gICAgbW9wOiB0aGluc3BhY2UsXG4gICAgbXJlbDogdGhpY2tzcGFjZSxcbiAgICBtaW5uZXI6IHRoaW5zcGFjZVxuICB9LFxuICBtYmluOiB7XG4gICAgbW9yZDogbWVkaXVtc3BhY2UsXG4gICAgbW9wOiBtZWRpdW1zcGFjZSxcbiAgICBtb3BlbjogbWVkaXVtc3BhY2UsXG4gICAgbWlubmVyOiBtZWRpdW1zcGFjZVxuICB9LFxuICBtcmVsOiB7XG4gICAgbW9yZDogdGhpY2tzcGFjZSxcbiAgICBtb3A6IHRoaWNrc3BhY2UsXG4gICAgbW9wZW46IHRoaWNrc3BhY2UsXG4gICAgbWlubmVyOiB0aGlja3NwYWNlXG4gIH0sXG4gIG1vcGVuOiB7fSxcbiAgbWNsb3NlOiB7XG4gICAgbW9wOiB0aGluc3BhY2UsXG4gICAgbWJpbjogbWVkaXVtc3BhY2UsXG4gICAgbXJlbDogdGhpY2tzcGFjZSxcbiAgICBtaW5uZXI6IHRoaW5zcGFjZVxuICB9LFxuICBtcHVuY3Q6IHtcbiAgICBtb3JkOiB0aGluc3BhY2UsXG4gICAgbW9wOiB0aGluc3BhY2UsXG4gICAgbXJlbDogdGhpY2tzcGFjZSxcbiAgICBtb3BlbjogdGhpbnNwYWNlLFxuICAgIG1jbG9zZTogdGhpbnNwYWNlLFxuICAgIG1wdW5jdDogdGhpbnNwYWNlLFxuICAgIG1pbm5lcjogdGhpbnNwYWNlXG4gIH0sXG4gIG1pbm5lcjoge1xuICAgIG1vcmQ6IHRoaW5zcGFjZSxcbiAgICBtb3A6IHRoaW5zcGFjZSxcbiAgICBtYmluOiBtZWRpdW1zcGFjZSxcbiAgICBtcmVsOiB0aGlja3NwYWNlLFxuICAgIG1vcGVuOiB0aGluc3BhY2UsXG4gICAgbXB1bmN0OiB0aGluc3BhY2UsXG4gICAgbWlubmVyOiB0aGluc3BhY2VcbiAgfVxufTsgLy8gU3BhY2luZyByZWxhdGlvbnNoaXBzIGZvciBzY3JpcHQgYW5kIHNjcmlwdHNjcmlwdCBzdHlsZXNcblxudmFyIHRpZ2h0U3BhY2luZ3MgPSB7XG4gIG1vcmQ6IHtcbiAgICBtb3A6IHRoaW5zcGFjZVxuICB9LFxuICBtb3A6IHtcbiAgICBtb3JkOiB0aGluc3BhY2UsXG4gICAgbW9wOiB0aGluc3BhY2VcbiAgfSxcbiAgbWJpbjoge30sXG4gIG1yZWw6IHt9LFxuICBtb3Blbjoge30sXG4gIG1jbG9zZToge1xuICAgIG1vcDogdGhpbnNwYWNlXG4gIH0sXG4gIG1wdW5jdDoge30sXG4gIG1pbm5lcjoge1xuICAgIG1vcDogdGhpbnNwYWNlXG4gIH1cbn07XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9kZWZpbmVGdW5jdGlvbi5qc1xuXG5cbi8qKlxuICogQWxsIHJlZ2lzdGVyZWQgZnVuY3Rpb25zLlxuICogYGZ1bmN0aW9ucy5qc2AganVzdCBleHBvcnRzIHRoaXMgc2FtZSBkaWN0aW9uYXJ5IGFnYWluIGFuZCBtYWtlcyBpdCBwdWJsaWMuXG4gKiBgUGFyc2VyLmpzYCByZXF1aXJlcyB0aGlzIGRpY3Rpb25hcnkuXG4gKi9cbnZhciBfZnVuY3Rpb25zID0ge307XG4vKipcbiAqIEFsbCBIVE1MIGJ1aWxkZXJzLiBTaG91bGQgYmUgb25seSB1c2VkIGluIHRoZSBgZGVmaW5lKmAgYW5kIHRoZSBgYnVpbGQqTUxgXG4gKiBmdW5jdGlvbnMuXG4gKi9cblxudmFyIF9odG1sR3JvdXBCdWlsZGVycyA9IHt9O1xuLyoqXG4gKiBBbGwgTWF0aE1MIGJ1aWxkZXJzLiBTaG91bGQgYmUgb25seSB1c2VkIGluIHRoZSBgZGVmaW5lKmAgYW5kIHRoZSBgYnVpbGQqTUxgXG4gKiBmdW5jdGlvbnMuXG4gKi9cblxudmFyIF9tYXRobWxHcm91cEJ1aWxkZXJzID0ge307XG5mdW5jdGlvbiBkZWZpbmVGdW5jdGlvbihfcmVmKSB7XG4gIHZhciB0eXBlID0gX3JlZi50eXBlLFxuICAgICAgbmFtZXMgPSBfcmVmLm5hbWVzLFxuICAgICAgcHJvcHMgPSBfcmVmLnByb3BzLFxuICAgICAgaGFuZGxlciA9IF9yZWYuaGFuZGxlcixcbiAgICAgIGh0bWxCdWlsZGVyID0gX3JlZi5odG1sQnVpbGRlcixcbiAgICAgIG1hdGhtbEJ1aWxkZXIgPSBfcmVmLm1hdGhtbEJ1aWxkZXI7XG4gIC8vIFNldCBkZWZhdWx0IHZhbHVlcyBvZiBmdW5jdGlvbnNcbiAgdmFyIGRhdGEgPSB7XG4gICAgdHlwZTogdHlwZSxcbiAgICBudW1BcmdzOiBwcm9wcy5udW1BcmdzLFxuICAgIGFyZ1R5cGVzOiBwcm9wcy5hcmdUeXBlcyxcbiAgICBncmVlZGluZXNzOiBwcm9wcy5ncmVlZGluZXNzID09PSB1bmRlZmluZWQgPyAxIDogcHJvcHMuZ3JlZWRpbmVzcyxcbiAgICBhbGxvd2VkSW5UZXh0OiAhIXByb3BzLmFsbG93ZWRJblRleHQsXG4gICAgYWxsb3dlZEluTWF0aDogcHJvcHMuYWxsb3dlZEluTWF0aCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHByb3BzLmFsbG93ZWRJbk1hdGgsXG4gICAgbnVtT3B0aW9uYWxBcmdzOiBwcm9wcy5udW1PcHRpb25hbEFyZ3MgfHwgMCxcbiAgICBpbmZpeDogISFwcm9wcy5pbmZpeCxcbiAgICBjb25zdW1lTW9kZTogcHJvcHMuY29uc3VtZU1vZGUsXG4gICAgaGFuZGxlcjogaGFuZGxlclxuICB9O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyArK2kpIHtcbiAgICBfZnVuY3Rpb25zW25hbWVzW2ldXSA9IGRhdGE7XG4gIH1cblxuICBpZiAodHlwZSkge1xuICAgIGlmIChodG1sQnVpbGRlcikge1xuICAgICAgX2h0bWxHcm91cEJ1aWxkZXJzW3R5cGVdID0gaHRtbEJ1aWxkZXI7XG4gICAgfVxuXG4gICAgaWYgKG1hdGhtbEJ1aWxkZXIpIHtcbiAgICAgIF9tYXRobWxHcm91cEJ1aWxkZXJzW3R5cGVdID0gbWF0aG1sQnVpbGRlcjtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogVXNlIHRoaXMgdG8gcmVnaXN0ZXIgb25seSB0aGUgSFRNTCBhbmQgTWF0aE1MIGJ1aWxkZXJzIGZvciBhIGZ1bmN0aW9uIChlLmcuXG4gKiBpZiB0aGUgZnVuY3Rpb24ncyBQYXJzZU5vZGUgaXMgZ2VuZXJhdGVkIGluIFBhcnNlci5qcyByYXRoZXIgdGhhbiB2aWEgYVxuICogc3RhbmQtYWxvbmUgaGFuZGxlciBwcm92aWRlZCB0byBgZGVmaW5lRnVuY3Rpb25gKS5cbiAqL1xuXG5mdW5jdGlvbiBkZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKF9yZWYyKSB7XG4gIHZhciB0eXBlID0gX3JlZjIudHlwZSxcbiAgICAgIGh0bWxCdWlsZGVyID0gX3JlZjIuaHRtbEJ1aWxkZXIsXG4gICAgICBtYXRobWxCdWlsZGVyID0gX3JlZjIubWF0aG1sQnVpbGRlcjtcbiAgZGVmaW5lRnVuY3Rpb24oe1xuICAgIHR5cGU6IHR5cGUsXG4gICAgbmFtZXM6IFtdLFxuICAgIHByb3BzOiB7XG4gICAgICBudW1BcmdzOiAwXG4gICAgfSxcbiAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaG91bGQgbmV2ZXIgYmUgY2FsbGVkLicpO1xuICAgIH0sXG4gICAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyLFxuICAgIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXJcbiAgfSk7XG59IC8vIFNpbmNlIHRoZSBjb3JyZXNwb25kaW5nIGJ1aWxkSFRNTC9idWlsZE1hdGhNTCBmdW5jdGlvbiBleHBlY3RzIGFcbi8vIGxpc3Qgb2YgZWxlbWVudHMsIHdlIG5vcm1hbGl6ZSBmb3IgZGlmZmVyZW50IGtpbmRzIG9mIGFyZ3VtZW50c1xuXG52YXIgZGVmaW5lRnVuY3Rpb25fb3JkYXJndW1lbnQgPSBmdW5jdGlvbiBvcmRhcmd1bWVudChhcmcpIHtcbiAgdmFyIG5vZGUgPSBjaGVja05vZGVUeXBlKGFyZywgXCJvcmRncm91cFwiKTtcbiAgcmV0dXJuIG5vZGUgPyBub2RlLmJvZHkgOiBbYXJnXTtcbn07XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9idWlsZEhUTUwuanNcbi8qKlxuICogVGhpcyBmaWxlIGRvZXMgdGhlIG1haW4gd29yayBvZiBidWlsZGluZyBhIGRvbVRyZWUgc3RydWN0dXJlIGZyb20gYSBwYXJzZVxuICogdHJlZS4gVGhlIGVudHJ5IHBvaW50IGlzIHRoZSBgYnVpbGRIVE1MYCBmdW5jdGlvbiwgd2hpY2ggdGFrZXMgYSBwYXJzZSB0cmVlLlxuICogVGhlbiwgdGhlIGJ1aWxkRXhwcmVzc2lvbiwgYnVpbGRHcm91cCwgYW5kIHZhcmlvdXMgZ3JvdXBCdWlsZGVycyBmdW5jdGlvbnNcbiAqIGFyZSBjYWxsZWQsIHRvIHByb2R1Y2UgYSBmaW5hbCBIVE1MIHRyZWUuXG4gKi9cblxuXG5cblxuXG5cblxuXG5cbnZhciBidWlsZEhUTUxfbWFrZVNwYW4gPSBidWlsZENvbW1vbi5tYWtlU3BhbjsgLy8gQmluYXJ5IGF0b21zIChmaXJzdCBjbGFzcyBgbWJpbmApIGNoYW5nZSBpbnRvIG9yZGluYXJ5IGF0b21zIChgbW9yZGApXG4vLyBkZXBlbmRpbmcgb24gdGhlaXIgc3Vycm91bmRpbmdzLiBTZWUgVGVYYm9vayBwZy4gNDQyLTQ0NiwgUnVsZXMgNSBhbmQgNixcbi8vIGFuZCB0aGUgdGV4dCBiZWZvcmUgUnVsZSAxOS5cblxudmFyIGJpbkxlZnRDYW5jZWxsZXIgPSBbXCJsZWZ0bW9zdFwiLCBcIm1iaW5cIiwgXCJtb3BlblwiLCBcIm1yZWxcIiwgXCJtb3BcIiwgXCJtcHVuY3RcIl07XG52YXIgYmluUmlnaHRDYW5jZWxsZXIgPSBbXCJyaWdodG1vc3RcIiwgXCJtcmVsXCIsIFwibWNsb3NlXCIsIFwibXB1bmN0XCJdO1xudmFyIHN0eWxlTWFwID0ge1xuICBcImRpc3BsYXlcIjogc3JjX1N0eWxlLkRJU1BMQVksXG4gIFwidGV4dFwiOiBzcmNfU3R5bGUuVEVYVCxcbiAgXCJzY3JpcHRcIjogc3JjX1N0eWxlLlNDUklQVCxcbiAgXCJzY3JpcHRzY3JpcHRcIjogc3JjX1N0eWxlLlNDUklQVFNDUklQVFxufTtcbnZhciBEb21FbnVtID0ge1xuICBtb3JkOiBcIm1vcmRcIixcbiAgbW9wOiBcIm1vcFwiLFxuICBtYmluOiBcIm1iaW5cIixcbiAgbXJlbDogXCJtcmVsXCIsXG4gIG1vcGVuOiBcIm1vcGVuXCIsXG4gIG1jbG9zZTogXCJtY2xvc2VcIixcbiAgbXB1bmN0OiBcIm1wdW5jdFwiLFxuICBtaW5uZXI6IFwibWlubmVyXCJcbn07XG5cbi8qKlxuICogVGFrZSBhIGxpc3Qgb2Ygbm9kZXMsIGJ1aWxkIHRoZW0gaW4gb3JkZXIsIGFuZCByZXR1cm4gYSBsaXN0IG9mIHRoZSBidWlsdFxuICogbm9kZXMuIGRvY3VtZW50RnJhZ21lbnRzIGFyZSBmbGF0dGVuZWQgaW50byB0aGVpciBjb250ZW50cywgc28gdGhlXG4gKiByZXR1cm5lZCBsaXN0IGNvbnRhaW5zIG5vIGZyYWdtZW50cy4gYGlzUmVhbEdyb3VwYCBpcyB0cnVlIGlmIGBleHByZXNzaW9uYFxuICogaXMgYSByZWFsIGdyb3VwIChubyBhdG9tcyB3aWxsIGJlIGFkZGVkIG9uIGVpdGhlciBzaWRlKSwgYXMgb3Bwb3NlZCB0b1xuICogYSBwYXJ0aWFsIGdyb3VwIChlLmcuIG9uZSBjcmVhdGVkIGJ5IFxcY29sb3IpLiBgc3Vycm91bmRpbmdgIGlzIGFuIGFycmF5XG4gKiBjb25zaXN0aW5nIHR5cGUgb2Ygbm9kZXMgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBsZWZ0IGFuZCByaWdodC5cbiAqL1xudmFyIGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24gPSBmdW5jdGlvbiBidWlsZEV4cHJlc3Npb24oZXhwcmVzc2lvbiwgb3B0aW9ucywgaXNSZWFsR3JvdXAsIHN1cnJvdW5kaW5nKSB7XG4gIGlmIChzdXJyb3VuZGluZyA9PT0gdm9pZCAwKSB7XG4gICAgc3Vycm91bmRpbmcgPSBbbnVsbCwgbnVsbF07XG4gIH1cblxuICAvLyBQYXJzZSBleHByZXNzaW9ucyBpbnRvIGBncm91cHNgLlxuICB2YXIgZ3JvdXBzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9uLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG91dHB1dCA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKGV4cHJlc3Npb25baV0sIG9wdGlvbnMpO1xuXG4gICAgaWYgKG91dHB1dCBpbnN0YW5jZW9mIHRyZWVfRG9jdW1lbnRGcmFnbWVudCkge1xuICAgICAgdmFyIGNoaWxkcmVuID0gb3V0cHV0LmNoaWxkcmVuO1xuICAgICAgZ3JvdXBzLnB1c2guYXBwbHkoZ3JvdXBzLCBjaGlsZHJlbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdyb3Vwcy5wdXNoKG91dHB1dCk7XG4gICAgfVxuICB9IC8vIElmIGBleHByZXNzaW9uYCBpcyBhIHBhcnRpYWwgZ3JvdXAsIGxldCB0aGUgcGFyZW50IGhhbmRsZSBzcGFjaW5nc1xuICAvLyB0byBhdm9pZCBwcm9jZXNzaW5nIGdyb3VwcyBtdWx0aXBsZSB0aW1lcy5cblxuXG4gIGlmICghaXNSZWFsR3JvdXApIHtcbiAgICByZXR1cm4gZ3JvdXBzO1xuICB9XG5cbiAgdmFyIGdsdWVPcHRpb25zID0gb3B0aW9ucztcblxuICBpZiAoZXhwcmVzc2lvbi5sZW5ndGggPT09IDEpIHtcbiAgICB2YXIgbm9kZSA9IGNoZWNrTm9kZVR5cGUoZXhwcmVzc2lvblswXSwgXCJzaXppbmdcIikgfHwgY2hlY2tOb2RlVHlwZShleHByZXNzaW9uWzBdLCBcInN0eWxpbmdcIik7XG5cbiAgICBpZiAoIW5vZGUpIHsvLyBObyBtYXRjaC5cbiAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gXCJzaXppbmdcIikge1xuICAgICAgZ2x1ZU9wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1NpemUobm9kZS5zaXplKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gXCJzdHlsaW5nXCIpIHtcbiAgICAgIGdsdWVPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShzdHlsZU1hcFtub2RlLnN0eWxlXSk7XG4gICAgfVxuICB9IC8vIER1bW15IHNwYW5zIGZvciBkZXRlcm1pbmluZyBzcGFjaW5ncyBiZXR3ZWVuIHN1cnJvdW5kaW5nIGF0b21zLlxuICAvLyBJZiBgZXhwcmVzc2lvbmAgaGFzIG5vIGF0b21zIG9uIHRoZSBsZWZ0IG9yIHJpZ2h0LCBjbGFzcyBcImxlZnRtb3N0XCJcbiAgLy8gb3IgXCJyaWdodG1vc3RcIiwgcmVzcGVjdGl2ZWx5LCBpcyB1c2VkIHRvIGluZGljYXRlIGl0LlxuXG5cbiAgdmFyIGR1bW15UHJldiA9IGJ1aWxkSFRNTF9tYWtlU3Bhbihbc3Vycm91bmRpbmdbMF0gfHwgXCJsZWZ0bW9zdFwiXSwgW10sIG9wdGlvbnMpO1xuICB2YXIgZHVtbXlOZXh0ID0gYnVpbGRIVE1MX21ha2VTcGFuKFtzdXJyb3VuZGluZ1sxXSB8fCBcInJpZ2h0bW9zdFwiXSwgW10sIG9wdGlvbnMpOyAvLyBUT0RPOiBUaGVzZSBjb2RlIGFzc3VtZXMgdGhhdCBhIG5vZGUncyBtYXRoIGNsYXNzIGlzIHRoZSBmaXJzdCBlbGVtZW50XG4gIC8vIG9mIGl0cyBgY2xhc3Nlc2AgYXJyYXkuIEEgbGF0ZXIgY2xlYW51cCBzaG91bGQgZW5zdXJlIHRoaXMsIGZvclxuICAvLyBpbnN0YW5jZSBieSBjaGFuZ2luZyB0aGUgc2lnbmF0dXJlIG9mIGBtYWtlU3BhbmAuXG4gIC8vIEJlZm9yZSBkZXRlcm1pbmluZyB3aGF0IHNwYWNlcyB0byBpbnNlcnQsIHBlcmZvcm0gYmluIGNhbmNlbGxhdGlvbi5cbiAgLy8gQmluYXJ5IG9wZXJhdG9ycyBjaGFuZ2UgdG8gb3JkaW5hcnkgc3ltYm9scyBpbiBzb21lIGNvbnRleHRzLlxuXG4gIHRyYXZlcnNlTm9uU3BhY2VOb2Rlcyhncm91cHMsIGZ1bmN0aW9uIChub2RlLCBwcmV2KSB7XG4gICAgdmFyIHByZXZUeXBlID0gcHJldi5jbGFzc2VzWzBdO1xuICAgIHZhciB0eXBlID0gbm9kZS5jbGFzc2VzWzBdO1xuXG4gICAgaWYgKHByZXZUeXBlID09PSBcIm1iaW5cIiAmJiB1dGlscy5jb250YWlucyhiaW5SaWdodENhbmNlbGxlciwgdHlwZSkpIHtcbiAgICAgIHByZXYuY2xhc3Nlc1swXSA9IFwibW9yZFwiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJtYmluXCIgJiYgdXRpbHMuY29udGFpbnMoYmluTGVmdENhbmNlbGxlciwgcHJldlR5cGUpKSB7XG4gICAgICBub2RlLmNsYXNzZXNbMF0gPSBcIm1vcmRcIjtcbiAgICB9XG4gIH0sIHtcbiAgICBub2RlOiBkdW1teVByZXZcbiAgfSwgZHVtbXlOZXh0KTtcbiAgdHJhdmVyc2VOb25TcGFjZU5vZGVzKGdyb3VwcywgZnVuY3Rpb24gKG5vZGUsIHByZXYpIHtcbiAgICB2YXIgcHJldlR5cGUgPSBnZXRUeXBlT2ZEb21UcmVlKHByZXYpO1xuICAgIHZhciB0eXBlID0gZ2V0VHlwZU9mRG9tVHJlZShub2RlKTsgLy8gJ210aWdodCcgaW5kaWNhdGVzIHRoYXQgdGhlIG5vZGUgaXMgc2NyaXB0IG9yIHNjcmlwdHNjcmlwdCBzdHlsZS5cblxuICAgIHZhciBzcGFjZSA9IHByZXZUeXBlICYmIHR5cGUgPyBub2RlLmhhc0NsYXNzKFwibXRpZ2h0XCIpID8gdGlnaHRTcGFjaW5nc1twcmV2VHlwZV1bdHlwZV0gOiBzcGFjaW5nc1twcmV2VHlwZV1bdHlwZV0gOiBudWxsO1xuXG4gICAgaWYgKHNwYWNlKSB7XG4gICAgICAvLyBJbnNlcnQgZ2x1ZSAoc3BhY2luZykgYWZ0ZXIgdGhlIGBwcmV2YC5cbiAgICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlR2x1ZShzcGFjZSwgZ2x1ZU9wdGlvbnMpO1xuICAgIH1cbiAgfSwge1xuICAgIG5vZGU6IGR1bW15UHJldlxuICB9LCBkdW1teU5leHQpO1xuICByZXR1cm4gZ3JvdXBzO1xufTsgLy8gRGVwdGgtZmlyc3QgdHJhdmVyc2Ugbm9uLXNwYWNlIGBub2Rlc2AsIGNhbGxpbmcgYGNhbGxiYWNrYCB3aXRoIHRoZSBjdXJyZW50IGFuZFxuLy8gcHJldmlvdXMgbm9kZSBhcyBhcmd1bWVudHMsIG9wdGlvbmFsbHkgcmV0dXJuaW5nIGEgbm9kZSB0byBpbnNlcnQgYWZ0ZXIgdGhlXG4vLyBwcmV2aW91cyBub2RlLiBgcHJldmAgaXMgYW4gb2JqZWN0IHdpdGggdGhlIHByZXZpb3VzIG5vZGUgYW5kIGBpbnNlcnRBZnRlcmBcbi8vIGZ1bmN0aW9uIHRvIGluc2VydCBhZnRlciBpdC4gYG5leHRgIGlzIGEgbm9kZSB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHJpZ2h0LlxuLy8gVXNlZCBmb3IgYmluIGNhbmNlbGxhdGlvbiBhbmQgaW5zZXJ0aW5nIHNwYWNpbmdzLlxuXG52YXIgdHJhdmVyc2VOb25TcGFjZU5vZGVzID0gZnVuY3Rpb24gdHJhdmVyc2VOb25TcGFjZU5vZGVzKG5vZGVzLCBjYWxsYmFjaywgcHJldiwgbmV4dCkge1xuICBpZiAobmV4dCkge1xuICAgIC8vIHRlbXBvcmFyaWx5IGFwcGVuZCB0aGUgcmlnaHQgbm9kZSwgaWYgZXhpc3RzXG4gICAgbm9kZXMucHVzaChuZXh0KTtcbiAgfVxuXG4gIHZhciBpID0gMDtcblxuICBmb3IgKDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICB2YXIgcGFydGlhbEdyb3VwID0gYnVpbGRIVE1MX2NoZWNrUGFydGlhbEdyb3VwKG5vZGUpO1xuXG4gICAgaWYgKHBhcnRpYWxHcm91cCkge1xuICAgICAgLy8gUmVjdXJzaXZlIERGU1xuICAgICAgLy8gJEZsb3dGaXhNZTogbWFrZSBub2RlcyBhICRSZWFkT25seUFycmF5IGJ5IHJldHVybmluZyBhIG5ldyBhcnJheVxuICAgICAgdHJhdmVyc2VOb25TcGFjZU5vZGVzKHBhcnRpYWxHcm91cC5jaGlsZHJlbiwgY2FsbGJhY2ssIHByZXYpO1xuICAgICAgY29udGludWU7XG4gICAgfSAvLyBJZ25vcmUgZXhwbGljaXQgc3BhY2VzIChlLmcuLCBcXDssIFxcLCkgd2hlbiBkZXRlcm1pbmluZyB3aGF0IGltcGxpY2l0XG4gICAgLy8gc3BhY2luZyBzaG91bGQgZ28gYmV0d2VlbiBhdG9tcyBvZiBkaWZmZXJlbnQgY2xhc3Nlc1xuXG5cbiAgICBpZiAobm9kZS5jbGFzc2VzWzBdID09PSBcIm1zcGFjZVwiKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0ID0gY2FsbGJhY2sobm9kZSwgcHJldi5ub2RlKTtcblxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIGlmIChwcmV2Lmluc2VydEFmdGVyKSB7XG4gICAgICAgIHByZXYuaW5zZXJ0QWZ0ZXIocmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGluc2VydCBhdCBmcm9udFxuICAgICAgICBub2Rlcy51bnNoaWZ0KHJlc3VsdCk7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcmV2Lm5vZGUgPSBub2RlO1xuXG4gICAgcHJldi5pbnNlcnRBZnRlciA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChuKSB7XG4gICAgICAgIG5vZGVzLnNwbGljZShpbmRleCArIDEsIDAsIG4pO1xuICAgICAgICBpKys7XG4gICAgICB9O1xuICAgIH0oaSk7XG4gIH1cblxuICBpZiAobmV4dCkge1xuICAgIG5vZGVzLnBvcCgpO1xuICB9XG59OyAvLyBDaGVjayBpZiBnaXZlbiBub2RlIGlzIGEgcGFydGlhbCBncm91cCwgaS5lLiwgZG9lcyBub3QgYWZmZWN0IHNwYWNpbmcgYXJvdW5kLlxuXG5cbnZhciBidWlsZEhUTUxfY2hlY2tQYXJ0aWFsR3JvdXAgPSBmdW5jdGlvbiBjaGVja1BhcnRpYWxHcm91cChub2RlKSB7XG4gIGlmIChub2RlIGluc3RhbmNlb2YgdHJlZV9Eb2N1bWVudEZyYWdtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBkb21UcmVlX0FuY2hvcikge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59OyAvLyBSZXR1cm4gdGhlIG91dGVybW9zdCBub2RlIG9mIGEgZG9tVHJlZS5cblxuXG52YXIgZ2V0T3V0ZXJtb3N0Tm9kZSA9IGZ1bmN0aW9uIGdldE91dGVybW9zdE5vZGUobm9kZSwgc2lkZSkge1xuICB2YXIgcGFydGlhbEdyb3VwID0gYnVpbGRIVE1MX2NoZWNrUGFydGlhbEdyb3VwKG5vZGUpO1xuXG4gIGlmIChwYXJ0aWFsR3JvdXApIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBwYXJ0aWFsR3JvdXAuY2hpbGRyZW47XG5cbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBpZiAoc2lkZSA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgIHJldHVybiBnZXRPdXRlcm1vc3ROb2RlKGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdLCBcInJpZ2h0XCIpO1xuICAgICAgfSBlbHNlIGlmIChzaWRlID09PSBcImxlZnRcIikge1xuICAgICAgICByZXR1cm4gZ2V0T3V0ZXJtb3N0Tm9kZShjaGlsZHJlblswXSwgXCJsZWZ0XCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub2RlO1xufTsgLy8gUmV0dXJuIG1hdGggYXRvbSBjbGFzcyAobWNsYXNzKSBvZiBhIGRvbVRyZWUuXG4vLyBJZiBgc2lkZWAgaXMgZ2l2ZW4sIGl0IHdpbGwgZ2V0IHRoZSB0eXBlIG9mIHRoZSBvdXRlcm1vc3Qgbm9kZSBhdCBnaXZlbiBzaWRlLlxuXG5cbnZhciBnZXRUeXBlT2ZEb21UcmVlID0gZnVuY3Rpb24gZ2V0VHlwZU9mRG9tVHJlZShub2RlLCBzaWRlKSB7XG4gIGlmICghbm9kZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHNpZGUpIHtcbiAgICBub2RlID0gZ2V0T3V0ZXJtb3N0Tm9kZShub2RlLCBzaWRlKTtcbiAgfSAvLyBUaGlzIG1ha2VzIGEgbG90IG9mIGFzc3VtcHRpb25zIGFzIHRvIHdoZXJlIHRoZSB0eXBlIG9mIGF0b21cbiAgLy8gYXBwZWFycy4gIFdlIHNob3VsZCBkbyBhIGJldHRlciBqb2Igb2YgZW5mb3JjaW5nIHRoaXMuXG5cblxuICByZXR1cm4gRG9tRW51bVtub2RlLmNsYXNzZXNbMF1dIHx8IG51bGw7XG59O1xudmFyIG1ha2VOdWxsRGVsaW1pdGVyID0gZnVuY3Rpb24gbWFrZU51bGxEZWxpbWl0ZXIob3B0aW9ucywgY2xhc3Nlcykge1xuICB2YXIgbW9yZUNsYXNzZXMgPSBbXCJudWxsZGVsaW1pdGVyXCJdLmNvbmNhdChvcHRpb25zLmJhc2VTaXppbmdDbGFzc2VzKCkpO1xuICByZXR1cm4gYnVpbGRIVE1MX21ha2VTcGFuKGNsYXNzZXMuY29uY2F0KG1vcmVDbGFzc2VzKSk7XG59O1xuLyoqXG4gKiBidWlsZEdyb3VwIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgZ3JvdXAgYW5kIGNhbGxzIHRoZSBjb3JyZWN0IGdyb3VwVHlwZVxuICogZnVuY3Rpb24gZm9yIGl0LiBJdCBhbHNvIGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIG9mIHNpemUgYW5kIHN0eWxlIGNoYW5nZXNcbiAqIGJldHdlZW4gcGFyZW50cyBhbmQgY2hpbGRyZW4uXG4gKi9cblxudmFyIGJ1aWxkSFRNTF9idWlsZEdyb3VwID0gZnVuY3Rpb24gYnVpbGRHcm91cChncm91cCwgb3B0aW9ucywgYmFzZU9wdGlvbnMpIHtcbiAgaWYgKCFncm91cCkge1xuICAgIHJldHVybiBidWlsZEhUTUxfbWFrZVNwYW4oKTtcbiAgfVxuXG4gIGlmIChfaHRtbEdyb3VwQnVpbGRlcnNbZ3JvdXAudHlwZV0pIHtcbiAgICAvLyBDYWxsIHRoZSBncm91cEJ1aWxkZXJzIGZ1bmN0aW9uXG4gICAgdmFyIGdyb3VwTm9kZSA9IF9odG1sR3JvdXBCdWlsZGVyc1tncm91cC50eXBlXShncm91cCwgb3B0aW9ucyk7IC8vIElmIHRoZSBzaXplIGNoYW5nZWQgYmV0d2VlbiB0aGUgcGFyZW50IGFuZCB0aGUgY3VycmVudCBncm91cCwgYWNjb3VudFxuICAgIC8vIGZvciB0aGF0IHNpemUgZGlmZmVyZW5jZS5cblxuICAgIGlmIChiYXNlT3B0aW9ucyAmJiBvcHRpb25zLnNpemUgIT09IGJhc2VPcHRpb25zLnNpemUpIHtcbiAgICAgIGdyb3VwTm9kZSA9IGJ1aWxkSFRNTF9tYWtlU3BhbihvcHRpb25zLnNpemluZ0NsYXNzZXMoYmFzZU9wdGlvbnMpLCBbZ3JvdXBOb2RlXSwgb3B0aW9ucyk7XG4gICAgICB2YXIgbXVsdGlwbGllciA9IG9wdGlvbnMuc2l6ZU11bHRpcGxpZXIgLyBiYXNlT3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgICAgIGdyb3VwTm9kZS5oZWlnaHQgKj0gbXVsdGlwbGllcjtcbiAgICAgIGdyb3VwTm9kZS5kZXB0aCAqPSBtdWx0aXBsaWVyO1xuICAgIH1cblxuICAgIHJldHVybiBncm91cE5vZGU7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiR290IGdyb3VwIG9mIHVua25vd24gdHlwZTogJ1wiICsgZ3JvdXAudHlwZSArIFwiJ1wiKTtcbiAgfVxufTtcbi8qKlxuICogQ29tYmluZSBhbiBhcnJheSBvZiBIVE1MIERPTSBub2RlcyAoZS5nLiwgdGhlIG91dHB1dCBvZiBgYnVpbGRFeHByZXNzaW9uYClcbiAqIGludG8gYW4gdW5icmVha2FibGUgSFRNTCBub2RlIG9mIGNsYXNzIC5iYXNlLCB3aXRoIHByb3BlciBzdHJ1dHMgdG9cbiAqIGd1YXJhbnRlZSBjb3JyZWN0IHZlcnRpY2FsIGV4dGVudC4gIGBidWlsZEhUTUxgIGNhbGxzIHRoaXMgcmVwZWF0ZWRseSB0b1xuICogbWFrZSB1cCB0aGUgZW50aXJlIGV4cHJlc3Npb24gYXMgYSBzZXF1ZW5jZSBvZiB1bmJyZWFrYWJsZSB1bml0cy5cbiAqL1xuXG5mdW5jdGlvbiBidWlsZEhUTUxVbmJyZWFrYWJsZShjaGlsZHJlbiwgb3B0aW9ucykge1xuICAvLyBDb21wdXRlIGhlaWdodCBhbmQgZGVwdGggb2YgdGhpcyBjaHVuay5cbiAgdmFyIGJvZHkgPSBidWlsZEhUTUxfbWFrZVNwYW4oW1wiYmFzZVwiXSwgY2hpbGRyZW4sIG9wdGlvbnMpOyAvLyBBZGQgc3RydXQsIHdoaWNoIGVuc3VyZXMgdGhhdCB0aGUgdG9wIG9mIHRoZSBIVE1MIGVsZW1lbnQgZmFsbHMgYXRcbiAgLy8gdGhlIGhlaWdodCBvZiB0aGUgZXhwcmVzc2lvbiwgYW5kIHRoZSBib3R0b20gb2YgdGhlIEhUTUwgZWxlbWVudFxuICAvLyBmYWxscyBhdCB0aGUgZGVwdGggb2YgdGhlIGV4cHJlc3Npb24uXG4gIC8vIFdlIHVzZWQgdG8gaGF2ZSBzZXBhcmF0ZSB0b3AgYW5kIGJvdHRvbSBzdHJ1dHMsIHdoZXJlIHRoZSBib3R0b20gc3RydXRcbiAgLy8gd291bGQgbGlrZSB0byB1c2UgYHZlcnRpY2FsLWFsaWduOiB0b3BgLCBidXQgaW4gSUUgOSB0aGlzIGxvd2VycyB0aGVcbiAgLy8gYmFzZWxpbmUgb2YgdGhlIGJveCB0byB0aGUgYm90dG9tIG9mIHRoaXMgc3RydXQgKGluc3RlYWQgb2Ygc3RheWluZyBpblxuICAvLyB0aGUgbm9ybWFsIHBsYWNlKSBzbyB3ZSB1c2UgYW4gYWJzb2x1dGUgdmFsdWUgZm9yIHZlcnRpY2FsLWFsaWduIGluc3RlYWQuXG5cbiAgdmFyIHN0cnV0ID0gYnVpbGRIVE1MX21ha2VTcGFuKFtcInN0cnV0XCJdKTtcbiAgc3RydXQuc3R5bGUuaGVpZ2h0ID0gYm9keS5oZWlnaHQgKyBib2R5LmRlcHRoICsgXCJlbVwiO1xuICBzdHJ1dC5zdHlsZS52ZXJ0aWNhbEFsaWduID0gLWJvZHkuZGVwdGggKyBcImVtXCI7XG4gIGJvZHkuY2hpbGRyZW4udW5zaGlmdChzdHJ1dCk7XG4gIHJldHVybiBib2R5O1xufVxuLyoqXG4gKiBUYWtlIGFuIGVudGlyZSBwYXJzZSB0cmVlLCBhbmQgYnVpbGQgaXQgaW50byBhbiBhcHByb3ByaWF0ZSBzZXQgb2YgSFRNTFxuICogbm9kZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBidWlsZEhUTUwodHJlZSwgb3B0aW9ucykge1xuICAvLyBTdHJpcCBvZmYgb3V0ZXIgdGFnIHdyYXBwZXIgZm9yIHByb2Nlc3NpbmcgYmVsb3cuXG4gIHZhciB0YWcgPSBudWxsO1xuXG4gIGlmICh0cmVlLmxlbmd0aCA9PT0gMSAmJiB0cmVlWzBdLnR5cGUgPT09IFwidGFnXCIpIHtcbiAgICB0YWcgPSB0cmVlWzBdLnRhZztcbiAgICB0cmVlID0gdHJlZVswXS5ib2R5O1xuICB9IC8vIEJ1aWxkIHRoZSBleHByZXNzaW9uIGNvbnRhaW5lZCBpbiB0aGUgdHJlZVxuXG5cbiAgdmFyIGV4cHJlc3Npb24gPSBidWlsZEhUTUxfYnVpbGRFeHByZXNzaW9uKHRyZWUsIG9wdGlvbnMsIHRydWUpO1xuICB2YXIgY2hpbGRyZW4gPSBbXTsgLy8gQ3JlYXRlIG9uZSBiYXNlIG5vZGUgZm9yIGVhY2ggY2h1bmsgYmV0d2VlbiBwb3RlbnRpYWwgbGluZSBicmVha3MuXG4gIC8vIFRoZSBUZVhCb29rIFtwLjE3M10gc2F5cyBcIkEgZm9ybXVsYSB3aWxsIGJlIGJyb2tlbiBvbmx5IGFmdGVyIGFcbiAgLy8gcmVsYXRpb24gc3ltYm9sIGxpa2UgJD0kIG9yICQ8JCBvciAkXFxyaWdodGFycm93JCwgb3IgYWZ0ZXIgYSBiaW5hcnlcbiAgLy8gb3BlcmF0aW9uIHN5bWJvbCBsaWtlICQrJCBvciAkLSQgb3IgJFxcdGltZXMkLCB3aGVyZSB0aGUgcmVsYXRpb24gb3JcbiAgLy8gYmluYXJ5IG9wZXJhdGlvbiBpcyBvbiB0aGUgYGBvdXRlciBsZXZlbCcnIG9mIHRoZSBmb3JtdWxhIChpLmUuLCBub3RcbiAgLy8gZW5jbG9zZWQgaW4gey4uLn0gYW5kIG5vdCBwYXJ0IG9mIGFuIFxcb3ZlciBjb25zdHJ1Y3Rpb24pLlwiXG5cbiAgdmFyIHBhcnRzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9uLmxlbmd0aDsgaSsrKSB7XG4gICAgcGFydHMucHVzaChleHByZXNzaW9uW2ldKTtcblxuICAgIGlmIChleHByZXNzaW9uW2ldLmhhc0NsYXNzKFwibWJpblwiKSB8fCBleHByZXNzaW9uW2ldLmhhc0NsYXNzKFwibXJlbFwiKSB8fCBleHByZXNzaW9uW2ldLmhhc0NsYXNzKFwiYWxsb3dicmVha1wiKSkge1xuICAgICAgLy8gUHV0IGFueSBwb3N0LW9wZXJhdG9yIGdsdWUgb24gc2FtZSBsaW5lIGFzIG9wZXJhdG9yLlxuICAgICAgLy8gV2F0Y2ggZm9yIFxcbm9icmVhayBhbG9uZyB0aGUgd2F5LCBhbmQgc3RvcCBhdCBcXG5ld2xpbmUuXG4gICAgICB2YXIgbm9icmVhayA9IGZhbHNlO1xuXG4gICAgICB3aGlsZSAoaSA8IGV4cHJlc3Npb24ubGVuZ3RoIC0gMSAmJiBleHByZXNzaW9uW2kgKyAxXS5oYXNDbGFzcyhcIm1zcGFjZVwiKSAmJiAhZXhwcmVzc2lvbltpICsgMV0uaGFzQ2xhc3MoXCJuZXdsaW5lXCIpKSB7XG4gICAgICAgIGkrKztcbiAgICAgICAgcGFydHMucHVzaChleHByZXNzaW9uW2ldKTtcblxuICAgICAgICBpZiAoZXhwcmVzc2lvbltpXS5oYXNDbGFzcyhcIm5vYnJlYWtcIikpIHtcbiAgICAgICAgICBub2JyZWFrID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBEb24ndCBhbGxvdyBicmVhayBpZiBcXG5vYnJlYWsgYW1vbmcgdGhlIHBvc3Qtb3BlcmF0b3IgZ2x1ZS5cblxuXG4gICAgICBpZiAoIW5vYnJlYWspIHtcbiAgICAgICAgY2hpbGRyZW4ucHVzaChidWlsZEhUTUxVbmJyZWFrYWJsZShwYXJ0cywgb3B0aW9ucykpO1xuICAgICAgICBwYXJ0cyA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbltpXS5oYXNDbGFzcyhcIm5ld2xpbmVcIikpIHtcbiAgICAgIC8vIFdyaXRlIHRoZSBsaW5lIGV4Y2VwdCB0aGUgbmV3bGluZVxuICAgICAgcGFydHMucG9wKCk7XG5cbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNoaWxkcmVuLnB1c2goYnVpbGRIVE1MVW5icmVha2FibGUocGFydHMsIG9wdGlvbnMpKTtcbiAgICAgICAgcGFydHMgPSBbXTtcbiAgICAgIH0gLy8gUHV0IHRoZSBuZXdsaW5lIGF0IHRoZSB0b3AgbGV2ZWxcblxuXG4gICAgICBjaGlsZHJlbi5wdXNoKGV4cHJlc3Npb25baV0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgY2hpbGRyZW4ucHVzaChidWlsZEhUTUxVbmJyZWFrYWJsZShwYXJ0cywgb3B0aW9ucykpO1xuICB9IC8vIE5vdywgaWYgdGhlcmUgd2FzIGEgdGFnLCBidWlsZCBpdCB0b28gYW5kIGFwcGVuZCBpdCBhcyBhIGZpbmFsIGNoaWxkLlxuXG5cbiAgdmFyIHRhZ0NoaWxkO1xuXG4gIGlmICh0YWcpIHtcbiAgICB0YWdDaGlsZCA9IGJ1aWxkSFRNTFVuYnJlYWthYmxlKGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24odGFnLCBvcHRpb25zLCB0cnVlKSk7XG4gICAgdGFnQ2hpbGQuY2xhc3NlcyA9IFtcInRhZ1wiXTtcbiAgICBjaGlsZHJlbi5wdXNoKHRhZ0NoaWxkKTtcbiAgfVxuXG4gIHZhciBodG1sTm9kZSA9IGJ1aWxkSFRNTF9tYWtlU3BhbihbXCJrYXRleC1odG1sXCJdLCBjaGlsZHJlbik7XG4gIGh0bWxOb2RlLnNldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIsIFwidHJ1ZVwiKTsgLy8gQWRqdXN0IHRoZSBzdHJ1dCBvZiB0aGUgdGFnIHRvIGJlIHRoZSBtYXhpbXVtIGhlaWdodCBvZiBhbGwgY2hpbGRyZW5cbiAgLy8gKHRoZSBoZWlnaHQgb2YgdGhlIGVuY2xvc2luZyBodG1sTm9kZSkgZm9yIHByb3BlciB2ZXJ0aWNhbCBhbGlnbm1lbnQuXG5cbiAgaWYgKHRhZ0NoaWxkKSB7XG4gICAgdmFyIHN0cnV0ID0gdGFnQ2hpbGQuY2hpbGRyZW5bMF07XG4gICAgc3RydXQuc3R5bGUuaGVpZ2h0ID0gaHRtbE5vZGUuaGVpZ2h0ICsgaHRtbE5vZGUuZGVwdGggKyBcImVtXCI7XG4gICAgc3RydXQuc3R5bGUudmVydGljYWxBbGlnbiA9IC1odG1sTm9kZS5kZXB0aCArIFwiZW1cIjtcbiAgfVxuXG4gIHJldHVybiBodG1sTm9kZTtcbn1cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL21hdGhNTFRyZWUuanNcbi8qKlxuICogVGhlc2Ugb2JqZWN0cyBzdG9yZSBkYXRhIGFib3V0IE1hdGhNTCBub2Rlcy4gVGhpcyBpcyB0aGUgTWF0aE1MIGVxdWl2YWxlbnRcbiAqIG9mIHRoZSB0eXBlcyBpbiBkb21UcmVlLmpzLiBTaW5jZSBNYXRoTUwgaGFuZGxlcyBpdHMgb3duIHJlbmRlcmluZywgYW5kXG4gKiBzaW5jZSB3ZSdyZSBtYWlubHkgdXNpbmcgTWF0aE1MIHRvIGltcHJvdmUgYWNjZXNzaWJpbGl0eSwgd2UgZG9uJ3QgbWFuYWdlXG4gKiBhbnkgb2YgdGhlIHN0eWxpbmcgc3RhdGUgdGhhdCB0aGUgcGxhaW4gRE9NIG5vZGVzIGRvLlxuICpcbiAqIFRoZSBgdG9Ob2RlYCBhbmQgYHRvTWFya3VwYCBmdW5jdGlvbnMgd29yayBzaW1sYXJseSB0byBob3cgdGhleSBkbyBpblxuICogZG9tVHJlZS5qcywgY3JlYXRpbmcgbmFtZXNwYWNlZCBET00gbm9kZXMgYW5kIEhUTUwgdGV4dCBtYXJrdXAgcmVzcGVjdGl2ZWx5LlxuICovXG5cblxuZnVuY3Rpb24gbmV3RG9jdW1lbnRGcmFnbWVudChjaGlsZHJlbikge1xuICByZXR1cm4gbmV3IHRyZWVfRG9jdW1lbnRGcmFnbWVudChjaGlsZHJlbik7XG59XG4vKipcbiAqIFRoaXMgbm9kZSByZXByZXNlbnRzIGEgZ2VuZXJhbCBwdXJwb3NlIE1hdGhNTCBub2RlIG9mIGFueSB0eXBlLiBUaGVcbiAqIGNvbnN0cnVjdG9yIHJlcXVpcmVzIHRoZSB0eXBlIG9mIG5vZGUgdG8gY3JlYXRlIChmb3IgZXhhbXBsZSwgYFwibW9cImAgb3JcbiAqIGBcIm1zcGFjZVwiYCwgY29ycmVzcG9uZGluZyB0byBgPG1vPmAgYW5kIGA8bXNwYWNlPmAgdGFncykuXG4gKi9cblxudmFyIG1hdGhNTFRyZWVfTWF0aE5vZGUgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBNYXRoTm9kZSh0eXBlLCBjaGlsZHJlbikge1xuICAgIHRoaXMudHlwZSA9IHZvaWQgMDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSB2b2lkIDA7XG4gICAgdGhpcy5jaGlsZHJlbiA9IHZvaWQgMDtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHt9O1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbiB8fCBbXTtcbiAgfVxuICAvKipcbiAgICogU2V0cyBhbiBhdHRyaWJ1dGUgb24gYSBNYXRoTUwgbm9kZS4gTWF0aE1MIGRlcGVuZHMgb24gYXR0cmlidXRlcyB0byBjb252ZXkgYVxuICAgKiBzZW1hbnRpYyBjb250ZW50LCBzbyB0aGlzIGlzIHVzZWQgaGVhdmlseS5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gTWF0aE5vZGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbiBzZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpIHtcbiAgICB0aGlzLmF0dHJpYnV0ZXNbbmFtZV0gPSB2YWx1ZTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBhbiBhdHRyaWJ1dGUgb24gYSBNYXRoTUwgbm9kZS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZ2V0QXR0cmlidXRlID0gZnVuY3Rpb24gZ2V0QXR0cmlidXRlKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW25hbWVdO1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgbWF0aCBub2RlIGludG8gYSBNYXRoTUwtbmFtZXNwYWNlZCBET00gZWxlbWVudC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8udG9Ob2RlID0gZnVuY3Rpb24gdG9Ob2RlKCkge1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiLCB0aGlzLnR5cGUpO1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyLCB0aGlzLmF0dHJpYnV0ZXNbYXR0cl0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZS5hcHBlbmRDaGlsZCh0aGlzLmNoaWxkcmVuW2ldLnRvTm9kZSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIG1hdGggbm9kZSBpbnRvIGFuIEhUTUwgbWFya3VwIHN0cmluZy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8udG9NYXJrdXAgPSBmdW5jdGlvbiB0b01hcmt1cCgpIHtcbiAgICB2YXIgbWFya3VwID0gXCI8XCIgKyB0aGlzLnR5cGU7IC8vIEFkZCB0aGUgYXR0cmlidXRlc1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBtYXJrdXAgKz0gXCIgXCIgKyBhdHRyICsgXCI9XFxcIlwiO1xuICAgICAgICBtYXJrdXAgKz0gdXRpbHMuZXNjYXBlKHRoaXMuYXR0cmlidXRlc1thdHRyXSk7XG4gICAgICAgIG1hcmt1cCArPSBcIlxcXCJcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtYXJrdXAgKz0gXCI+XCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1hcmt1cCArPSB0aGlzLmNoaWxkcmVuW2ldLnRvTWFya3VwKCk7XG4gICAgfVxuXG4gICAgbWFya3VwICs9IFwiPC9cIiArIHRoaXMudHlwZSArIFwiPlwiO1xuICAgIHJldHVybiBtYXJrdXA7XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBtYXRoIG5vZGUgaW50byBhIHN0cmluZywgc2ltaWxhciB0byBpbm5lclRleHQsIGJ1dCBlc2NhcGVkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by50b1RleHQgPSBmdW5jdGlvbiB0b1RleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgcmV0dXJuIGNoaWxkLnRvVGV4dCgpO1xuICAgIH0pLmpvaW4oXCJcIik7XG4gIH07XG5cbiAgcmV0dXJuIE1hdGhOb2RlO1xufSgpO1xuLyoqXG4gKiBUaGlzIG5vZGUgcmVwcmVzZW50cyBhIHBpZWNlIG9mIHRleHQuXG4gKi9cblxudmFyIG1hdGhNTFRyZWVfVGV4dE5vZGUgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBUZXh0Tm9kZSh0ZXh0KSB7XG4gICAgdGhpcy50ZXh0ID0gdm9pZCAwO1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSB0ZXh0IG5vZGUgaW50byBhIERPTSB0ZXh0IG5vZGUuXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90bzIgPSBUZXh0Tm9kZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvMi50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMudGV4dCk7XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSB0ZXh0IG5vZGUgaW50byBlc2NhcGVkIEhUTUwgbWFya3VwXG4gICAqIChyZXByZXNlbnRpbmcgdGhlIHRleHQgaXRzZWxmKS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8yLnRvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAoKSB7XG4gICAgcmV0dXJuIHV0aWxzLmVzY2FwZSh0aGlzLnRvVGV4dCgpKTtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIHRleHQgbm9kZSBpbnRvIGEgc3RyaW5nXG4gICAqIChyZXByZXNlbnRpbmcgdGhlIHRleHQgaXRlc2VsZikuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvMi50b1RleHQgPSBmdW5jdGlvbiB0b1RleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dDtcbiAgfTtcblxuICByZXR1cm4gVGV4dE5vZGU7XG59KCk7XG4vKipcbiAqIFRoaXMgbm9kZSByZXByZXNlbnRzIGEgc3BhY2UsIGJ1dCBtYXkgcmVuZGVyIGFzIDxtc3BhY2UuLi4vPiBvciBhcyB0ZXh0LFxuICogZGVwZW5kaW5nIG9uIHRoZSB3aWR0aC5cbiAqL1xuXG52YXIgU3BhY2VOb2RlID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIFNwYWNlIG5vZGUgd2l0aCB3aWR0aCBnaXZlbiBpbiBDU1MgZW1zLlxuICAgKi9cbiAgZnVuY3Rpb24gU3BhY2VOb2RlKHdpZHRoKSB7XG4gICAgdGhpcy53aWR0aCA9IHZvaWQgMDtcbiAgICB0aGlzLmNoYXJhY3RlciA9IHZvaWQgMDtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7IC8vIFNlZSBodHRwczovL3d3dy53My5vcmcvVFIvMjAwMC9XRC1NYXRoTUwyLTIwMDAwMzI4L2NoYXB0ZXI2Lmh0bWxcbiAgICAvLyBmb3IgYSB0YWJsZSBvZiBzcGFjZS1saWtlIGNoYXJhY3RlcnMuICBXZSB1c2UgVW5pY29kZVxuICAgIC8vIHJlcHJlc2VudGF0aW9ucyBpbnN0ZWFkIG9mICZMb25nTmFtZXM7IGFzIGl0J3Mgbm90IGNsZWFyIGhvdyB0b1xuICAgIC8vIG1ha2UgdGhlIGxhdHRlciB2aWEgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUuXG5cbiAgICBpZiAod2lkdGggPj0gMC4wNTU1NSAmJiB3aWR0aCA8PSAwLjA1NTU2KSB7XG4gICAgICB0aGlzLmNoYXJhY3RlciA9IFwiXFx1MjAwQVwiOyAvLyAmVmVyeVRoaW5TcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IDAuMTY2NiAmJiB3aWR0aCA8PSAwLjE2NjcpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gXCJcXHUyMDA5XCI7IC8vICZUaGluU3BhY2U7XG4gICAgfSBlbHNlIGlmICh3aWR0aCA+PSAwLjIyMjIgJiYgd2lkdGggPD0gMC4yMjIzKSB7XG4gICAgICB0aGlzLmNoYXJhY3RlciA9IFwiXFx1MjAwNVwiOyAvLyAmTWVkaXVtU3BhY2U7XG4gICAgfSBlbHNlIGlmICh3aWR0aCA+PSAwLjI3NzcgJiYgd2lkdGggPD0gMC4yNzc4KSB7XG4gICAgICB0aGlzLmNoYXJhY3RlciA9IFwiXFx1MjAwNVxcdTIwMEFcIjsgLy8gJlRoaWNrU3BhY2U7XG4gICAgfSBlbHNlIGlmICh3aWR0aCA+PSAtMC4wNTU1NiAmJiB3aWR0aCA8PSAtMC4wNTU1NSkge1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBcIlxcdTIwMEFcXHUyMDYzXCI7IC8vICZOZWdhdGl2ZVZlcnlUaGluU3BhY2U7XG4gICAgfSBlbHNlIGlmICh3aWR0aCA+PSAtMC4xNjY3ICYmIHdpZHRoIDw9IC0wLjE2NjYpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gXCJcXHUyMDA5XFx1MjA2M1wiOyAvLyAmTmVnYXRpdmVUaGluU3BhY2U7XG4gICAgfSBlbHNlIGlmICh3aWR0aCA+PSAtMC4yMjIzICYmIHdpZHRoIDw9IC0wLjIyMjIpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gXCJcXHUyMDVGXFx1MjA2M1wiOyAvLyAmTmVnYXRpdmVNZWRpdW1TcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IC0wLjI3NzggJiYgd2lkdGggPD0gLTAuMjc3Nykge1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBcIlxcdTIwMDVcXHUyMDYzXCI7IC8vICZOZWdhdGl2ZVRoaWNrU3BhY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBtYXRoIG5vZGUgaW50byBhIE1hdGhNTC1uYW1lc3BhY2VkIERPTSBlbGVtZW50LlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8zID0gU3BhY2VOb2RlLnByb3RvdHlwZTtcblxuICBfcHJvdG8zLnRvTm9kZSA9IGZ1bmN0aW9uIHRvTm9kZSgpIHtcbiAgICBpZiAodGhpcy5jaGFyYWN0ZXIpIHtcbiAgICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLmNoYXJhY3Rlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiLCBcIm1zcGFjZVwiKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgdGhpcy53aWR0aCArIFwiZW1cIik7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBtYXRoIG5vZGUgaW50byBhbiBIVE1MIG1hcmt1cCBzdHJpbmcuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvMy50b01hcmt1cCA9IGZ1bmN0aW9uIHRvTWFya3VwKCkge1xuICAgIGlmICh0aGlzLmNoYXJhY3Rlcikge1xuICAgICAgcmV0dXJuIFwiPG10ZXh0PlwiICsgdGhpcy5jaGFyYWN0ZXIgKyBcIjwvbXRleHQ+XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIjxtc3BhY2Ugd2lkdGg9XFxcIlwiICsgdGhpcy53aWR0aCArIFwiZW1cXFwiLz5cIjtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBtYXRoIG5vZGUgaW50byBhIHN0cmluZywgc2ltaWxhciB0byBpbm5lclRleHQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvMy50b1RleHQgPSBmdW5jdGlvbiB0b1RleHQoKSB7XG4gICAgaWYgKHRoaXMuY2hhcmFjdGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGFyYWN0ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIiBcIjtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFNwYWNlTm9kZTtcbn0oKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbWF0aE1MVHJlZSA9ICh7XG4gIE1hdGhOb2RlOiBtYXRoTUxUcmVlX01hdGhOb2RlLFxuICBUZXh0Tm9kZTogbWF0aE1MVHJlZV9UZXh0Tm9kZSxcbiAgU3BhY2VOb2RlOiBTcGFjZU5vZGUsXG4gIG5ld0RvY3VtZW50RnJhZ21lbnQ6IG5ld0RvY3VtZW50RnJhZ21lbnRcbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvYnVpbGRNYXRoTUwuanNcbi8qKlxuICogVGhpcyBmaWxlIGNvbnZlcnRzIGEgcGFyc2UgdHJlZSBpbnRvIGEgY29vcmVzcG9uZGluZyBNYXRoTUwgdHJlZS4gVGhlIG1haW5cbiAqIGVudHJ5IHBvaW50IGlzIHRoZSBgYnVpbGRNYXRoTUxgIGZ1bmN0aW9uLCB3aGljaCB0YWtlcyBhIHBhcnNlIHRyZWUgZnJvbSB0aGVcbiAqIHBhcnNlci5cbiAqL1xuXG5cblxuXG5cblxuXG5cblxuLyoqXG4gKiBUYWtlcyBhIHN5bWJvbCBhbmQgY29udmVydHMgaXQgaW50byBhIE1hdGhNTCB0ZXh0IG5vZGUgYWZ0ZXIgcGVyZm9ybWluZ1xuICogb3B0aW9uYWwgcmVwbGFjZW1lbnQgZnJvbSBzeW1ib2xzLmpzLlxuICovXG52YXIgYnVpbGRNYXRoTUxfbWFrZVRleHQgPSBmdW5jdGlvbiBtYWtlVGV4dCh0ZXh0LCBtb2RlLCBvcHRpb25zKSB7XG4gIGlmIChzcmNfc3ltYm9sc1ttb2RlXVt0ZXh0XSAmJiBzcmNfc3ltYm9sc1ttb2RlXVt0ZXh0XS5yZXBsYWNlICYmIHRleHQuY2hhckNvZGVBdCgwKSAhPT0gMHhEODM1ICYmICEobGlnYXR1cmVzLmhhc093blByb3BlcnR5KHRleHQpICYmIG9wdGlvbnMgJiYgKG9wdGlvbnMuZm9udEZhbWlseSAmJiBvcHRpb25zLmZvbnRGYW1pbHkuc3Vic3RyKDQsIDIpID09PSBcInR0XCIgfHwgb3B0aW9ucy5mb250ICYmIG9wdGlvbnMuZm9udC5zdWJzdHIoNCwgMikgPT09IFwidHRcIikpKSB7XG4gICAgdGV4dCA9IHNyY19zeW1ib2xzW21vZGVdW3RleHRdLnJlcGxhY2U7XG4gIH1cblxuICByZXR1cm4gbmV3IG1hdGhNTFRyZWUuVGV4dE5vZGUodGV4dCk7XG59O1xuLyoqXG4gKiBXcmFwIHRoZSBnaXZlbiBhcnJheSBvZiBub2RlcyBpbiBhbiA8bXJvdz4gbm9kZSBpZiBuZWVkZWQsIGkuZS4sXG4gKiB1bmxlc3MgdGhlIGFycmF5IGhhcyBsZW5ndGggMS4gIEFsd2F5cyByZXR1cm5zIGEgc2luZ2xlIG5vZGUuXG4gKi9cblxudmFyIGJ1aWxkTWF0aE1MX21ha2VSb3cgPSBmdW5jdGlvbiBtYWtlUm93KGJvZHkpIHtcbiAgaWYgKGJvZHkubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGJvZHlbMF07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXJvd1wiLCBib2R5KTtcbiAgfVxufTtcbi8qKlxuICogUmV0dXJucyB0aGUgbWF0aCB2YXJpYW50IGFzIGEgc3RyaW5nIG9yIG51bGwgaWYgbm9uZSBpcyByZXF1aXJlZC5cbiAqL1xuXG52YXIgYnVpbGRNYXRoTUxfZ2V0VmFyaWFudCA9IGZ1bmN0aW9uIGdldFZhcmlhbnQoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgLy8gSGFuZGxlIFxcdGV4dC4uLiBmb250IHNwZWNpZmllcnMgYXMgYmVzdCB3ZSBjYW4uXG4gIC8vIE1hdGhNTCBoYXMgYSBsaW1pdGVkIGxpc3Qgb2YgYWxsb3dhYmxlIG1hdGh2YXJpYW50IHNwZWNpZmllcnM7IHNlZVxuICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvTWF0aE1MMy9jaGFwdGVyMy5odG1sI3ByZXNtLmNvbW1hdHRcbiAgaWYgKG9wdGlvbnMuZm9udEZhbWlseSA9PT0gXCJ0ZXh0dHRcIikge1xuICAgIHJldHVybiBcIm1vbm9zcGFjZVwiO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9udEZhbWlseSA9PT0gXCJ0ZXh0c2ZcIikge1xuICAgIGlmIChvcHRpb25zLmZvbnRTaGFwZSA9PT0gXCJ0ZXh0aXRcIiAmJiBvcHRpb25zLmZvbnRXZWlnaHQgPT09IFwidGV4dGJmXCIpIHtcbiAgICAgIHJldHVybiBcInNhbnMtc2VyaWYtYm9sZC1pdGFsaWNcIjtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9udFNoYXBlID09PSBcInRleHRpdFwiKSB7XG4gICAgICByZXR1cm4gXCJzYW5zLXNlcmlmLWl0YWxpY1wiO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5mb250V2VpZ2h0ID09PSBcInRleHRiZlwiKSB7XG4gICAgICByZXR1cm4gXCJib2xkLXNhbnMtc2VyaWZcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwic2Fucy1zZXJpZlwiO1xuICAgIH1cbiAgfSBlbHNlIGlmIChvcHRpb25zLmZvbnRTaGFwZSA9PT0gXCJ0ZXh0aXRcIiAmJiBvcHRpb25zLmZvbnRXZWlnaHQgPT09IFwidGV4dGJmXCIpIHtcbiAgICByZXR1cm4gXCJib2xkLWl0YWxpY1wiO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9udFNoYXBlID09PSBcInRleHRpdFwiKSB7XG4gICAgcmV0dXJuIFwiaXRhbGljXCI7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5mb250V2VpZ2h0ID09PSBcInRleHRiZlwiKSB7XG4gICAgcmV0dXJuIFwiYm9sZFwiO1xuICB9XG5cbiAgdmFyIGZvbnQgPSBvcHRpb25zLmZvbnQ7XG5cbiAgaWYgKCFmb250IHx8IGZvbnQgPT09IFwibWF0aG5vcm1hbFwiKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbW9kZSA9IGdyb3VwLm1vZGU7XG5cbiAgaWYgKGZvbnQgPT09IFwibWF0aGl0XCIpIHtcbiAgICByZXR1cm4gXCJpdGFsaWNcIjtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcImJvbGRzeW1ib2xcIikge1xuICAgIHJldHVybiBcImJvbGQtaXRhbGljXCI7XG4gIH0gZWxzZSBpZiAoZm9udCA9PT0gXCJtYXRoYmZcIikge1xuICAgIHJldHVybiBcImJvbGRcIjtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcIm1hdGhiYlwiKSB7XG4gICAgcmV0dXJuIFwiZG91YmxlLXN0cnVja1wiO1xuICB9IGVsc2UgaWYgKGZvbnQgPT09IFwibWF0aGZyYWtcIikge1xuICAgIHJldHVybiBcImZyYWt0dXJcIjtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcIm1hdGhzY3JcIiB8fCBmb250ID09PSBcIm1hdGhjYWxcIikge1xuICAgIC8vIE1hdGhNTCBtYWtlcyBubyBkaXN0aW5jdGlvbiBiZXR3ZWVuIHNjcmlwdCBhbmQgY2FsaWdyYWhwaWNcbiAgICByZXR1cm4gXCJzY3JpcHRcIjtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcIm1hdGhzZlwiKSB7XG4gICAgcmV0dXJuIFwic2Fucy1zZXJpZlwiO1xuICB9IGVsc2UgaWYgKGZvbnQgPT09IFwibWF0aHR0XCIpIHtcbiAgICByZXR1cm4gXCJtb25vc3BhY2VcIjtcbiAgfVxuXG4gIHZhciB0ZXh0ID0gZ3JvdXAudGV4dDtcblxuICBpZiAodXRpbHMuY29udGFpbnMoW1wiXFxcXGltYXRoXCIsIFwiXFxcXGptYXRoXCJdLCB0ZXh0KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHNyY19zeW1ib2xzW21vZGVdW3RleHRdICYmIHNyY19zeW1ib2xzW21vZGVdW3RleHRdLnJlcGxhY2UpIHtcbiAgICB0ZXh0ID0gc3JjX3N5bWJvbHNbbW9kZV1bdGV4dF0ucmVwbGFjZTtcbiAgfVxuXG4gIHZhciBmb250TmFtZSA9IGJ1aWxkQ29tbW9uLmZvbnRNYXBbZm9udF0uZm9udE5hbWU7XG5cbiAgaWYgKGdldENoYXJhY3Rlck1ldHJpY3ModGV4dCwgZm9udE5hbWUsIG1vZGUpKSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLmZvbnRNYXBbZm9udF0udmFyaWFudDtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcbi8qKlxuICogVGFrZXMgYSBsaXN0IG9mIG5vZGVzLCBidWlsZHMgdGhlbSwgYW5kIHJldHVybnMgYSBsaXN0IG9mIHRoZSBnZW5lcmF0ZWRcbiAqIE1hdGhNTCBub2Rlcy4gIEFsc28gY29tYmluZSBjb25zZWN1dGl2ZSA8bXRleHQ+IG91dHB1dHMgaW50byBhIHNpbmdsZVxuICogPG10ZXh0PiB0YWcuXG4gKi9cblxudmFyIGJ1aWxkTWF0aE1MX2J1aWxkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIGJ1aWxkRXhwcmVzc2lvbihleHByZXNzaW9uLCBvcHRpb25zLCBpc09yZGdyb3VwKSB7XG4gIGlmIChleHByZXNzaW9uLmxlbmd0aCA9PT0gMSkge1xuICAgIHZhciBncm91cCA9IGJ1aWxkTWF0aE1MX2J1aWxkR3JvdXAoZXhwcmVzc2lvblswXSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoaXNPcmRncm91cCAmJiBncm91cCBpbnN0YW5jZW9mIG1hdGhNTFRyZWVfTWF0aE5vZGUgJiYgZ3JvdXAudHlwZSA9PT0gXCJtb1wiKSB7XG4gICAgICAvLyBXaGVuIFRlWCB3cml0ZXJzIHdhbnQgdG8gc3VwcHJlc3Mgc3BhY2luZyBvbiBhbiBvcGVyYXRvcixcbiAgICAgIC8vIHRoZXkgb2Z0ZW4gcHV0IHRoZSBvcGVyYXRvciBieSBpdHNlbGYgaW5zaWRlIGJyYWNlcy5cbiAgICAgIGdyb3VwLnNldEF0dHJpYnV0ZShcImxzcGFjZVwiLCBcIjBlbVwiKTtcbiAgICAgIGdyb3VwLnNldEF0dHJpYnV0ZShcInJzcGFjZVwiLCBcIjBlbVwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gW2dyb3VwXTtcbiAgfVxuXG4gIHZhciBncm91cHMgPSBbXTtcbiAgdmFyIGxhc3RHcm91cDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cHJlc3Npb24ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgX2dyb3VwID0gYnVpbGRNYXRoTUxfYnVpbGRHcm91cChleHByZXNzaW9uW2ldLCBvcHRpb25zKTtcblxuICAgIGlmIChfZ3JvdXAgaW5zdGFuY2VvZiBtYXRoTUxUcmVlX01hdGhOb2RlICYmIGxhc3RHcm91cCBpbnN0YW5jZW9mIG1hdGhNTFRyZWVfTWF0aE5vZGUpIHtcbiAgICAgIC8vIENvbmNhdGVuYXRlIGFkamFjZW50IDxtdGV4dD5zXG4gICAgICBpZiAoX2dyb3VwLnR5cGUgPT09ICdtdGV4dCcgJiYgbGFzdEdyb3VwLnR5cGUgPT09ICdtdGV4dCcgJiYgX2dyb3VwLmdldEF0dHJpYnV0ZSgnbWF0aHZhcmlhbnQnKSA9PT0gbGFzdEdyb3VwLmdldEF0dHJpYnV0ZSgnbWF0aHZhcmlhbnQnKSkge1xuICAgICAgICB2YXIgX2xhc3RHcm91cCRjaGlsZHJlbjtcblxuICAgICAgICAoX2xhc3RHcm91cCRjaGlsZHJlbiA9IGxhc3RHcm91cC5jaGlsZHJlbikucHVzaC5hcHBseShfbGFzdEdyb3VwJGNoaWxkcmVuLCBfZ3JvdXAuY2hpbGRyZW4pO1xuXG4gICAgICAgIGNvbnRpbnVlOyAvLyBDb25jYXRlbmF0ZSBhZGphY2VudCA8bW4+c1xuICAgICAgfSBlbHNlIGlmIChfZ3JvdXAudHlwZSA9PT0gJ21uJyAmJiBsYXN0R3JvdXAudHlwZSA9PT0gJ21uJykge1xuICAgICAgICB2YXIgX2xhc3RHcm91cCRjaGlsZHJlbjI7XG5cbiAgICAgICAgKF9sYXN0R3JvdXAkY2hpbGRyZW4yID0gbGFzdEdyb3VwLmNoaWxkcmVuKS5wdXNoLmFwcGx5KF9sYXN0R3JvdXAkY2hpbGRyZW4yLCBfZ3JvdXAuY2hpbGRyZW4pO1xuXG4gICAgICAgIGNvbnRpbnVlOyAvLyBDb25jYXRlbmF0ZSA8bW4+Li4uPC9tbj4gZm9sbG93ZWQgYnkgPG1pPi48L21pPlxuICAgICAgfSBlbHNlIGlmIChfZ3JvdXAudHlwZSA9PT0gJ21pJyAmJiBfZ3JvdXAuY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmIGxhc3RHcm91cC50eXBlID09PSAnbW4nKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IF9ncm91cC5jaGlsZHJlblswXTtcblxuICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBtYXRoTUxUcmVlX1RleHROb2RlICYmIGNoaWxkLnRleHQgPT09ICcuJykge1xuICAgICAgICAgIHZhciBfbGFzdEdyb3VwJGNoaWxkcmVuMztcblxuICAgICAgICAgIChfbGFzdEdyb3VwJGNoaWxkcmVuMyA9IGxhc3RHcm91cC5jaGlsZHJlbikucHVzaC5hcHBseShfbGFzdEdyb3VwJGNoaWxkcmVuMywgX2dyb3VwLmNoaWxkcmVuKTtcblxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGxhc3RHcm91cC50eXBlID09PSAnbWknICYmIGxhc3RHcm91cC5jaGlsZHJlbi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdmFyIGxhc3RDaGlsZCA9IGxhc3RHcm91cC5jaGlsZHJlblswXTtcblxuICAgICAgICBpZiAobGFzdENoaWxkIGluc3RhbmNlb2YgbWF0aE1MVHJlZV9UZXh0Tm9kZSAmJiBsYXN0Q2hpbGQudGV4dCA9PT0gXCJcXHUwMzM4XCIgJiYgKF9ncm91cC50eXBlID09PSAnbW8nIHx8IF9ncm91cC50eXBlID09PSAnbWknIHx8IF9ncm91cC50eXBlID09PSAnbW4nKSkge1xuICAgICAgICAgIHZhciBfY2hpbGQgPSBfZ3JvdXAuY2hpbGRyZW5bMF07XG5cbiAgICAgICAgICBpZiAoX2NoaWxkIGluc3RhbmNlb2YgbWF0aE1MVHJlZV9UZXh0Tm9kZSAmJiBfY2hpbGQudGV4dC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBPdmVybGF5IHdpdGggY29tYmluaW5nIGNoYXJhY3RlciBsb25nIHNvbGlkdXNcbiAgICAgICAgICAgIF9jaGlsZC50ZXh0ID0gX2NoaWxkLnRleHQuc2xpY2UoMCwgMSkgKyBcIlxcdTAzMzhcIiArIF9jaGlsZC50ZXh0LnNsaWNlKDEpO1xuICAgICAgICAgICAgZ3JvdXBzLnBvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGdyb3Vwcy5wdXNoKF9ncm91cCk7XG4gICAgbGFzdEdyb3VwID0gX2dyb3VwO1xuICB9XG5cbiAgcmV0dXJuIGdyb3Vwcztcbn07XG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gYnVpbGRFeHByZXNzaW9uLCBidXQgd3JhcHMgdGhlIGVsZW1lbnRzIGluIGFuIDxtcm93PlxuICogaWYgdGhlcmUncyBtb3JlIHRoYW4gb25lLiAgUmV0dXJucyBhIHNpbmdsZSBub2RlIGluc3RlYWQgb2YgYW4gYXJyYXkuXG4gKi9cblxudmFyIGJ1aWxkRXhwcmVzc2lvblJvdyA9IGZ1bmN0aW9uIGJ1aWxkRXhwcmVzc2lvblJvdyhleHByZXNzaW9uLCBvcHRpb25zLCBpc09yZGdyb3VwKSB7XG4gIHJldHVybiBidWlsZE1hdGhNTF9tYWtlUm93KGJ1aWxkTWF0aE1MX2J1aWxkRXhwcmVzc2lvbihleHByZXNzaW9uLCBvcHRpb25zLCBpc09yZGdyb3VwKSk7XG59O1xuLyoqXG4gKiBUYWtlcyBhIGdyb3VwIGZyb20gdGhlIHBhcnNlciBhbmQgY2FsbHMgdGhlIGFwcHJvcHJpYXRlIGdyb3VwQnVpbGRlcnMgZnVuY3Rpb25cbiAqIG9uIGl0IHRvIHByb2R1Y2UgYSBNYXRoTUwgbm9kZS5cbiAqL1xuXG52YXIgYnVpbGRNYXRoTUxfYnVpbGRHcm91cCA9IGZ1bmN0aW9uIGJ1aWxkR3JvdXAoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgaWYgKCFncm91cCkge1xuICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1yb3dcIik7XG4gIH1cblxuICBpZiAoX21hdGhtbEdyb3VwQnVpbGRlcnNbZ3JvdXAudHlwZV0pIHtcbiAgICAvLyBDYWxsIHRoZSBncm91cEJ1aWxkZXJzIGZ1bmN0aW9uXG4gICAgdmFyIHJlc3VsdCA9IF9tYXRobWxHcm91cEJ1aWxkZXJzW2dyb3VwLnR5cGVdKGdyb3VwLCBvcHRpb25zKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkdvdCBncm91cCBvZiB1bmtub3duIHR5cGU6ICdcIiArIGdyb3VwLnR5cGUgKyBcIidcIik7XG4gIH1cbn07XG4vKipcbiAqIFRha2VzIGEgZnVsbCBwYXJzZSB0cmVlIGFuZCBzZXR0aW5ncyBhbmQgYnVpbGRzIGEgTWF0aE1MIHJlcHJlc2VudGF0aW9uIG9mXG4gKiBpdC4gSW4gcGFydGljdWxhciwgd2UgcHV0IHRoZSBlbGVtZW50cyBmcm9tIGJ1aWxkaW5nIHRoZSBwYXJzZSB0cmVlIGludG8gYVxuICogPHNlbWFudGljcz4gdGFnIHNvIHdlIGNhbiBhbHNvIGluY2x1ZGUgdGhhdCBUZVggc291cmNlIGFzIGFuIGFubm90YXRpb24uXG4gKlxuICogTm90ZSB0aGF0IHdlIGFjdHVhbGx5IHJldHVybiBhIGRvbVRyZWUgZWxlbWVudCB3aXRoIGEgYDxtYXRoPmAgaW5zaWRlIGl0IHNvXG4gKiB3ZSBjYW4gZG8gYXBwcm9wcmlhdGUgc3R5bGluZy5cbiAqL1xuXG5mdW5jdGlvbiBidWlsZE1hdGhNTCh0cmVlLCB0ZXhFeHByZXNzaW9uLCBvcHRpb25zLCBmb3JNYXRobWxPbmx5KSB7XG4gIHZhciBleHByZXNzaW9uID0gYnVpbGRNYXRoTUxfYnVpbGRFeHByZXNzaW9uKHRyZWUsIG9wdGlvbnMpOyAvLyBXcmFwIHVwIHRoZSBleHByZXNzaW9uIGluIGFuIG1yb3cgc28gaXQgaXMgcHJlc2VudGVkIGluIHRoZSBzZW1hbnRpY3NcbiAgLy8gdGFnIGNvcnJlY3RseSwgdW5sZXNzIGl0J3MgYSBzaW5nbGUgPG1yb3c+IG9yIDxtdGFibGU+LlxuXG4gIHZhciB3cmFwcGVyO1xuXG4gIGlmIChleHByZXNzaW9uLmxlbmd0aCA9PT0gMSAmJiBleHByZXNzaW9uWzBdIGluc3RhbmNlb2YgbWF0aE1MVHJlZV9NYXRoTm9kZSAmJiB1dGlscy5jb250YWlucyhbXCJtcm93XCIsIFwibXRhYmxlXCJdLCBleHByZXNzaW9uWzBdLnR5cGUpKSB7XG4gICAgd3JhcHBlciA9IGV4cHJlc3Npb25bMF07XG4gIH0gZWxzZSB7XG4gICAgd3JhcHBlciA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXJvd1wiLCBleHByZXNzaW9uKTtcbiAgfSAvLyBCdWlsZCBhIFRlWCBhbm5vdGF0aW9uIG9mIHRoZSBzb3VyY2VcblxuXG4gIHZhciBhbm5vdGF0aW9uID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJhbm5vdGF0aW9uXCIsIFtuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZSh0ZXhFeHByZXNzaW9uKV0pO1xuICBhbm5vdGF0aW9uLnNldEF0dHJpYnV0ZShcImVuY29kaW5nXCIsIFwiYXBwbGljYXRpb24veC10ZXhcIik7XG4gIHZhciBzZW1hbnRpY3MgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcInNlbWFudGljc1wiLCBbd3JhcHBlciwgYW5ub3RhdGlvbl0pO1xuICB2YXIgbWF0aCA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibWF0aFwiLCBbc2VtYW50aWNzXSk7XG4gIG1hdGguc2V0QXR0cmlidXRlKFwieG1sbnNcIiwgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCIpOyAvLyBZb3UgY2FuJ3Qgc3R5bGUgPG1hdGg+IG5vZGVzLCBzbyB3ZSB3cmFwIHRoZSBub2RlIGluIGEgc3Bhbi5cbiAgLy8gTk9URTogVGhlIHNwYW4gY2xhc3MgaXMgbm90IHR5cGVkIHRvIGhhdmUgPG1hdGg+IG5vZGVzIGFzIGNoaWxkcmVuLCBhbmRcbiAgLy8gd2UgZG9uJ3Qgd2FudCB0byBtYWtlIHRoZSBjaGlsZHJlbiB0eXBlIG1vcmUgZ2VuZXJpYyBzaW5jZSB0aGUgY2hpbGRyZW5cbiAgLy8gb2Ygc3BhbiBhcmUgZXhwZWN0ZWQgdG8gaGF2ZSBtb3JlIGZpZWxkcyBpbiBgYnVpbGRIdG1sYCBjb250ZXh0cy5cblxuICB2YXIgd3JhcHBlckNsYXNzID0gZm9yTWF0aG1sT25seSA/IFwia2F0ZXhcIiA6IFwia2F0ZXgtbWF0aG1sXCI7IC8vICRGbG93Rml4TWVcblxuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW3dyYXBwZXJDbGFzc10sIFttYXRoXSk7XG59XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9idWlsZFRyZWUuanNcblxuXG5cblxuXG5cblxudmFyIGJ1aWxkVHJlZV9vcHRpb25zRnJvbVNldHRpbmdzID0gZnVuY3Rpb24gb3B0aW9uc0Zyb21TZXR0aW5ncyhzZXR0aW5ncykge1xuICByZXR1cm4gbmV3IHNyY19PcHRpb25zKHtcbiAgICBzdHlsZTogc2V0dGluZ3MuZGlzcGxheU1vZGUgPyBzcmNfU3R5bGUuRElTUExBWSA6IHNyY19TdHlsZS5URVhULFxuICAgIG1heFNpemU6IHNldHRpbmdzLm1heFNpemUsXG4gICAgbWluUnVsZVRoaWNrbmVzczogc2V0dGluZ3MubWluUnVsZVRoaWNrbmVzc1xuICB9KTtcbn07XG5cbnZhciBidWlsZFRyZWVfZGlzcGxheVdyYXAgPSBmdW5jdGlvbiBkaXNwbGF5V3JhcChub2RlLCBzZXR0aW5ncykge1xuICBpZiAoc2V0dGluZ3MuZGlzcGxheU1vZGUpIHtcbiAgICB2YXIgY2xhc3NlcyA9IFtcImthdGV4LWRpc3BsYXlcIl07XG5cbiAgICBpZiAoc2V0dGluZ3MubGVxbm8pIHtcbiAgICAgIGNsYXNzZXMucHVzaChcImxlcW5vXCIpO1xuICAgIH1cblxuICAgIGlmIChzZXR0aW5ncy5mbGVxbikge1xuICAgICAgY2xhc3Nlcy5wdXNoKFwiZmxlcW5cIik7XG4gICAgfVxuXG4gICAgbm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKGNsYXNzZXMsIFtub2RlXSk7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn07XG5cbnZhciBidWlsZFRyZWVfYnVpbGRUcmVlID0gZnVuY3Rpb24gYnVpbGRUcmVlKHRyZWUsIGV4cHJlc3Npb24sIHNldHRpbmdzKSB7XG4gIHZhciBvcHRpb25zID0gYnVpbGRUcmVlX29wdGlvbnNGcm9tU2V0dGluZ3Moc2V0dGluZ3MpO1xuICB2YXIga2F0ZXhOb2RlO1xuXG4gIGlmIChzZXR0aW5ncy5vdXRwdXQgPT09IFwibWF0aG1sXCIpIHtcbiAgICByZXR1cm4gYnVpbGRNYXRoTUwodHJlZSwgZXhwcmVzc2lvbiwgb3B0aW9ucywgdHJ1ZSk7XG4gIH0gZWxzZSBpZiAoc2V0dGluZ3Mub3V0cHV0ID09PSBcImh0bWxcIikge1xuICAgIHZhciBodG1sTm9kZSA9IGJ1aWxkSFRNTCh0cmVlLCBvcHRpb25zKTtcbiAgICBrYXRleE5vZGUgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJrYXRleFwiXSwgW2h0bWxOb2RlXSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG1hdGhNTE5vZGUgPSBidWlsZE1hdGhNTCh0cmVlLCBleHByZXNzaW9uLCBvcHRpb25zLCBmYWxzZSk7XG5cbiAgICB2YXIgX2h0bWxOb2RlID0gYnVpbGRIVE1MKHRyZWUsIG9wdGlvbnMpO1xuXG4gICAga2F0ZXhOb2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wia2F0ZXhcIl0sIFttYXRoTUxOb2RlLCBfaHRtbE5vZGVdKTtcbiAgfVxuXG4gIHJldHVybiBidWlsZFRyZWVfZGlzcGxheVdyYXAoa2F0ZXhOb2RlLCBzZXR0aW5ncyk7XG59O1xudmFyIGJ1aWxkVHJlZV9idWlsZEhUTUxUcmVlID0gZnVuY3Rpb24gYnVpbGRIVE1MVHJlZSh0cmVlLCBleHByZXNzaW9uLCBzZXR0aW5ncykge1xuICB2YXIgb3B0aW9ucyA9IGJ1aWxkVHJlZV9vcHRpb25zRnJvbVNldHRpbmdzKHNldHRpbmdzKTtcbiAgdmFyIGh0bWxOb2RlID0gYnVpbGRIVE1MKHRyZWUsIG9wdGlvbnMpO1xuICB2YXIga2F0ZXhOb2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wia2F0ZXhcIl0sIFtodG1sTm9kZV0pO1xuICByZXR1cm4gYnVpbGRUcmVlX2Rpc3BsYXlXcmFwKGthdGV4Tm9kZSwgc2V0dGluZ3MpO1xufTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19idWlsZFRyZWUgPSAoYnVpbGRUcmVlX2J1aWxkVHJlZSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9zdHJldGNoeS5qc1xuLyoqXG4gKiBUaGlzIGZpbGUgcHJvdmlkZXMgc3VwcG9ydCB0byBidWlsZE1hdGhNTC5qcyBhbmQgYnVpbGRIVE1MLmpzXG4gKiBmb3Igc3RyZXRjaHkgd2lkZSBlbGVtZW50cyByZW5kZXJlZCBmcm9tIFNWRyBmaWxlc1xuICogYW5kIG90aGVyIENTUyB0cmlja2VyeS5cbiAqL1xuXG5cblxuXG52YXIgc3RyZXRjaHlDb2RlUG9pbnQgPSB7XG4gIHdpZGVoYXQ6IFwiXlwiLFxuICB3aWRlY2hlY2s6IFwiy4dcIixcbiAgd2lkZXRpbGRlOiBcIn5cIixcbiAgdXRpbGRlOiBcIn5cIixcbiAgb3ZlcmxlZnRhcnJvdzogXCJcXHUyMTkwXCIsXG4gIHVuZGVybGVmdGFycm93OiBcIlxcdTIxOTBcIixcbiAgeGxlZnRhcnJvdzogXCJcXHUyMTkwXCIsXG4gIG92ZXJyaWdodGFycm93OiBcIlxcdTIxOTJcIixcbiAgdW5kZXJyaWdodGFycm93OiBcIlxcdTIxOTJcIixcbiAgeHJpZ2h0YXJyb3c6IFwiXFx1MjE5MlwiLFxuICB1bmRlcmJyYWNlOiBcIlxcdTIzREZcIixcbiAgb3ZlcmJyYWNlOiBcIlxcdTIzREVcIixcbiAgb3Zlcmdyb3VwOiBcIlxcdTIzRTBcIixcbiAgdW5kZXJncm91cDogXCJcXHUyM0UxXCIsXG4gIG92ZXJsZWZ0cmlnaHRhcnJvdzogXCJcXHUyMTk0XCIsXG4gIHVuZGVybGVmdHJpZ2h0YXJyb3c6IFwiXFx1MjE5NFwiLFxuICB4bGVmdHJpZ2h0YXJyb3c6IFwiXFx1MjE5NFwiLFxuICBPdmVycmlnaHRhcnJvdzogXCJcXHUyMUQyXCIsXG4gIHhSaWdodGFycm93OiBcIlxcdTIxRDJcIixcbiAgb3ZlcmxlZnRoYXJwb29uOiBcIlxcdTIxQkNcIixcbiAgeGxlZnRoYXJwb29udXA6IFwiXFx1MjFCQ1wiLFxuICBvdmVycmlnaHRoYXJwb29uOiBcIlxcdTIxQzBcIixcbiAgeHJpZ2h0aGFycG9vbnVwOiBcIlxcdTIxQzBcIixcbiAgeExlZnRhcnJvdzogXCJcXHUyMUQwXCIsXG4gIHhMZWZ0cmlnaHRhcnJvdzogXCJcXHUyMUQ0XCIsXG4gIHhob29rbGVmdGFycm93OiBcIlxcdTIxQTlcIixcbiAgeGhvb2tyaWdodGFycm93OiBcIlxcdTIxQUFcIixcbiAgeG1hcHN0bzogXCJcXHUyMUE2XCIsXG4gIHhyaWdodGhhcnBvb25kb3duOiBcIlxcdTIxQzFcIixcbiAgeGxlZnRoYXJwb29uZG93bjogXCJcXHUyMUJEXCIsXG4gIHhyaWdodGxlZnRoYXJwb29uczogXCJcXHUyMUNDXCIsXG4gIHhsZWZ0cmlnaHRoYXJwb29uczogXCJcXHUyMUNCXCIsXG4gIHh0d29oZWFkbGVmdGFycm93OiBcIlxcdTIxOUVcIixcbiAgeHR3b2hlYWRyaWdodGFycm93OiBcIlxcdTIxQTBcIixcbiAgeGxvbmdlcXVhbDogXCI9XCIsXG4gIHh0b2Zyb206IFwiXFx1MjFDNFwiLFxuICB4cmlnaHRsZWZ0YXJyb3dzOiBcIlxcdTIxQzRcIixcbiAgeHJpZ2h0ZXF1aWxpYnJpdW06IFwiXFx1MjFDQ1wiLFxuICAvLyBOb3QgYSBwZXJmZWN0IG1hdGNoLlxuICB4bGVmdGVxdWlsaWJyaXVtOiBcIlxcdTIxQ0JcIiAvLyBOb25lIGJldHRlciBhdmFpbGFibGUuXG5cbn07XG5cbnZhciBzdHJldGNoeV9tYXRoTUxub2RlID0gZnVuY3Rpb24gbWF0aE1Mbm9kZShsYWJlbCkge1xuICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKHN0cmV0Y2h5Q29kZVBvaW50W2xhYmVsLnN1YnN0cigxKV0pXSk7XG4gIG5vZGUuc2V0QXR0cmlidXRlKFwic3RyZXRjaHlcIiwgXCJ0cnVlXCIpO1xuICByZXR1cm4gbm9kZTtcbn07IC8vIE1hbnkgb2YgdGhlIEthVGVYIFNWRyBpbWFnZXMgaGF2ZSBiZWVuIGFkYXB0ZWQgZnJvbSBnbHlwaHMgaW4gS2FUZVggZm9udHMuXG4vLyBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCwgRGVzaWduIFNjaWVuY2UsIEluYy4gKDx3d3cubWF0aGpheC5vcmc+KVxuLy8gQ29weXJpZ2h0IChjKSAyMDE0LTIwMTcgS2hhbiBBY2FkZW15ICg8d3d3LmtoYW5hY2FkZW15Lm9yZz4pXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgU0lMIE9wZW4gRm9udCBMaWNlbnNlLCBWZXJzaW9uIDEuMS5cbi8vIFNlZSBcXG5odHRwOi8vc2NyaXB0cy5zaWwub3JnL09GTFxuLy8gVmVyeSBMb25nIFNWR3Ncbi8vICAgIE1hbnkgb2YgdGhlIEthVGVYIHN0cmV0Y2h5IHdpZGUgZWxlbWVudHMgdXNlIGEgbG9uZyBTVkcgaW1hZ2UgYW5kIGFuXG4vLyAgICBvdmVyZmxvdzogaGlkZGVuIHRhY3RpYyB0byBhY2hpZXZlIGEgc3RyZXRjaHkgaW1hZ2Ugd2hpbGUgYXZvaWRpbmdcbi8vICAgIGRpc3RvcnRpb24gb2YgYXJyb3doZWFkcyBvciBicmFjZSBjb3JuZXJzLlxuLy8gICAgVGhlIFNWRyB0eXBpY2FsbHkgY29udGFpbnMgYSB2ZXJ5IGxvbmcgKDQwMCBlbSkgYXJyb3cuXG4vLyAgICBUaGUgU1ZHIGlzIGluIGEgY29udGFpbmVyIHNwYW4gdGhhdCBoYXMgb3ZlcmZsb3c6IGhpZGRlbiwgc28gdGhlIHNwYW5cbi8vICAgIGFjdHMgbGlrZSBhIHdpbmRvdyB0aGF0IGV4cG9zZXMgb25seSBwYXJ0IG9mIHRoZSAgU1ZHLlxuLy8gICAgVGhlIFNWRyBhbHdheXMgaGFzIGEgbG9uZ2VyLCB0aGlubmVyIGFzcGVjdCByYXRpbyB0aGFuIHRoZSBjb250YWluZXIgc3Bhbi5cbi8vICAgIEFmdGVyIHRoZSBTVkcgZmlsbHMgMTAwJSBvZiB0aGUgaGVpZ2h0IG9mIHRoZSBjb250YWluZXIgc3Bhbixcbi8vICAgIHRoZXJlIGlzIGEgbG9uZyBhcnJvdyBzaGFmdCBsZWZ0IG92ZXIuIFRoYXQgbGVmdC1vdmVyIHNoYWZ0IGlzIG5vdCBzaG93bi5cbi8vICAgIEluc3RlYWQsIGl0IGlzIHNsaWNlZCBvZmYgYmVjYXVzZSB0aGUgc3BhbidzIENTUyBoYXMgb3ZlcmZsb3c6IGhpZGRlbi5cbi8vICAgIFRodXMsIHRoZSByZWFkZXIgc2VlcyBhbiBhcnJvdyB0aGF0IG1hdGNoZXMgdGhlIHN1YmplY3QgbWF0dGVyIHdpZHRoXG4vLyAgICB3aXRob3V0IGRpc3RvcnRpb24uXG4vLyAgICBTb21lIGZ1bmN0aW9ucywgc3VjaCBhcyBcXGNhbmNlbCwgbmVlZCB0byB2YXJ5IHRoZWlyIGFzcGVjdCByYXRpby4gVGhlc2Vcbi8vICAgIGZ1bmN0aW9ucyBkbyBub3QgZ2V0IHRoZSBvdmVyZmxvdyBTVkcgdHJlYXRtZW50LlxuLy8gU2Vjb25kIEJydXNoIFN0cm9rZVxuLy8gICAgTG93IHJlc29sdXRpb24gbW9uaXRvcnMgc3RydWdnbGUgdG8gZGlzcGxheSBpbWFnZXMgaW4gZmluZSBkZXRhaWwuXG4vLyAgICBTbyBicm93c2VycyBhcHBseSBhbnRpLWFsaWFzaW5nLiBBIGxvbmcgc3RyYWlnaHQgYXJyb3cgc2hhZnQgdGhlcmVmb3JlXG4vLyAgICB3aWxsIHNvbWV0aW1lcyBhcHBlYXIgYXMgaWYgaXQgaGFzIGEgYmx1cnJlZCBlZGdlLlxuLy8gICAgVG8gbWl0aWdhdGUgdGhpcywgdGhlc2UgU1ZHIGZpbGVzIGNvbnRhaW4gYSBzZWNvbmQgXCJicnVzaC1zdHJva2VcIiBvbiB0aGVcbi8vICAgIGFycm93IHNoYWZ0cy4gVGhhdCBpcywgYSBzZWNvbmQgbG9uZyB0aGluIHJlY3Rhbmd1bGFyIFNWRyBwYXRoIGhhcyBiZWVuXG4vLyAgICB3cml0dGVuIGRpcmVjdGx5IG9uIHRvcCBvZiBlYWNoIGFycm93IHNoYWZ0LiBUaGlzIHJlaW5mb3JjZW1lbnQgY2F1c2VzXG4vLyAgICBzb21lIG9mIHRoZSBzY3JlZW4gcGl4ZWxzIHRvIGRpc3BsYXkgYXMgYmxhY2sgaW5zdGVhZCBvZiB0aGUgYW50aS1hbGlhc2VkXG4vLyAgICBncmF5IHBpeGVsIHRoYXQgYSAgc2luZ2xlIHBhdGggd291bGQgZ2VuZXJhdGUuIFNvIHdlIGdldCBhcnJvdyBzaGFmdHNcbi8vICAgIHdob3NlIGVkZ2VzIGFwcGVhciB0byBiZSBzaGFycGVyLlxuLy8gSW4gdGhlIGthdGV4SW1hZ2VzRGF0YSBvYmplY3QganVzdCBiZWxvdywgdGhlIGRpbWVuc2lvbnMgYWxsXG4vLyBjb3JyZXNwb25kIHRvIHBhdGggZ2VvbWV0cnkgaW5zaWRlIHRoZSByZWxldmFudCBTVkcuXG4vLyBGb3IgZXhhbXBsZSwgXFxvdmVycmlnaHRhcnJvdyB1c2VzIHRoZSBzYW1lIGFycm93aGVhZCBhcyBnbHlwaCBVKzIxOTJcbi8vIGZyb20gdGhlIEthVGVYIE1haW4gZm9udC4gVGhlIHNjYWxpbmcgZmFjdG9yIGlzIDEwMDAuXG4vLyBUaGF0IGlzLCBpbnNpZGUgdGhlIGZvbnQsIHRoYXQgYXJyb3doZWFkIGlzIDUyMiB1bml0cyB0YWxsLCB3aGljaFxuLy8gY29ycmVzcG9uZHMgdG8gMC41MjIgZW0gaW5zaWRlIHRoZSBkb2N1bWVudC5cblxuXG52YXIga2F0ZXhJbWFnZXNEYXRhID0ge1xuICAvLyAgIHBhdGgocyksIG1pbldpZHRoLCBoZWlnaHQsIGFsaWduXG4gIG92ZXJyaWdodGFycm93OiBbW1wicmlnaHRhcnJvd1wiXSwgMC44ODgsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgb3ZlcmxlZnRhcnJvdzogW1tcImxlZnRhcnJvd1wiXSwgMC44ODgsIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgdW5kZXJyaWdodGFycm93OiBbW1wicmlnaHRhcnJvd1wiXSwgMC44ODgsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgdW5kZXJsZWZ0YXJyb3c6IFtbXCJsZWZ0YXJyb3dcIl0sIDAuODg4LCA1MjIsIFwieE1pbllNaW5cIl0sXG4gIHhyaWdodGFycm93OiBbW1wicmlnaHRhcnJvd1wiXSwgMS40NjksIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgeGxlZnRhcnJvdzogW1tcImxlZnRhcnJvd1wiXSwgMS40NjksIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgT3ZlcnJpZ2h0YXJyb3c6IFtbXCJkb3VibGVyaWdodGFycm93XCJdLCAwLjg4OCwgNTYwLCBcInhNYXhZTWluXCJdLFxuICB4UmlnaHRhcnJvdzogW1tcImRvdWJsZXJpZ2h0YXJyb3dcIl0sIDEuNTI2LCA1NjAsIFwieE1heFlNaW5cIl0sXG4gIHhMZWZ0YXJyb3c6IFtbXCJkb3VibGVsZWZ0YXJyb3dcIl0sIDEuNTI2LCA1NjAsIFwieE1pbllNaW5cIl0sXG4gIG92ZXJsZWZ0aGFycG9vbjogW1tcImxlZnRoYXJwb29uXCJdLCAwLjg4OCwgNTIyLCBcInhNaW5ZTWluXCJdLFxuICB4bGVmdGhhcnBvb251cDogW1tcImxlZnRoYXJwb29uXCJdLCAwLjg4OCwgNTIyLCBcInhNaW5ZTWluXCJdLFxuICB4bGVmdGhhcnBvb25kb3duOiBbW1wibGVmdGhhcnBvb25kb3duXCJdLCAwLjg4OCwgNTIyLCBcInhNaW5ZTWluXCJdLFxuICBvdmVycmlnaHRoYXJwb29uOiBbW1wicmlnaHRoYXJwb29uXCJdLCAwLjg4OCwgNTIyLCBcInhNYXhZTWluXCJdLFxuICB4cmlnaHRoYXJwb29udXA6IFtbXCJyaWdodGhhcnBvb25cIl0sIDAuODg4LCA1MjIsIFwieE1heFlNaW5cIl0sXG4gIHhyaWdodGhhcnBvb25kb3duOiBbW1wicmlnaHRoYXJwb29uZG93blwiXSwgMC44ODgsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgeGxvbmdlcXVhbDogW1tcImxvbmdlcXVhbFwiXSwgMC44ODgsIDMzNCwgXCJ4TWluWU1pblwiXSxcbiAgeHR3b2hlYWRsZWZ0YXJyb3c6IFtbXCJ0d29oZWFkbGVmdGFycm93XCJdLCAwLjg4OCwgMzM0LCBcInhNaW5ZTWluXCJdLFxuICB4dHdvaGVhZHJpZ2h0YXJyb3c6IFtbXCJ0d29oZWFkcmlnaHRhcnJvd1wiXSwgMC44ODgsIDMzNCwgXCJ4TWF4WU1pblwiXSxcbiAgb3ZlcmxlZnRyaWdodGFycm93OiBbW1wibGVmdGFycm93XCIsIFwicmlnaHRhcnJvd1wiXSwgMC44ODgsIDUyMl0sXG4gIG92ZXJicmFjZTogW1tcImxlZnRicmFjZVwiLCBcIm1pZGJyYWNlXCIsIFwicmlnaHRicmFjZVwiXSwgMS42LCA1NDhdLFxuICB1bmRlcmJyYWNlOiBbW1wibGVmdGJyYWNldW5kZXJcIiwgXCJtaWRicmFjZXVuZGVyXCIsIFwicmlnaHRicmFjZXVuZGVyXCJdLCAxLjYsIDU0OF0sXG4gIHVuZGVybGVmdHJpZ2h0YXJyb3c6IFtbXCJsZWZ0YXJyb3dcIiwgXCJyaWdodGFycm93XCJdLCAwLjg4OCwgNTIyXSxcbiAgeGxlZnRyaWdodGFycm93OiBbW1wibGVmdGFycm93XCIsIFwicmlnaHRhcnJvd1wiXSwgMS43NSwgNTIyXSxcbiAgeExlZnRyaWdodGFycm93OiBbW1wiZG91YmxlbGVmdGFycm93XCIsIFwiZG91YmxlcmlnaHRhcnJvd1wiXSwgMS43NSwgNTYwXSxcbiAgeHJpZ2h0bGVmdGhhcnBvb25zOiBbW1wibGVmdGhhcnBvb25kb3ducGx1c1wiLCBcInJpZ2h0aGFycG9vbnBsdXNcIl0sIDEuNzUsIDcxNl0sXG4gIHhsZWZ0cmlnaHRoYXJwb29uczogW1tcImxlZnRoYXJwb29ucGx1c1wiLCBcInJpZ2h0aGFycG9vbmRvd25wbHVzXCJdLCAxLjc1LCA3MTZdLFxuICB4aG9va2xlZnRhcnJvdzogW1tcImxlZnRhcnJvd1wiLCBcInJpZ2h0aG9va1wiXSwgMS4wOCwgNTIyXSxcbiAgeGhvb2tyaWdodGFycm93OiBbW1wibGVmdGhvb2tcIiwgXCJyaWdodGFycm93XCJdLCAxLjA4LCA1MjJdLFxuICBvdmVybGluZXNlZ21lbnQ6IFtbXCJsZWZ0bGluZXNlZ21lbnRcIiwgXCJyaWdodGxpbmVzZWdtZW50XCJdLCAwLjg4OCwgNTIyXSxcbiAgdW5kZXJsaW5lc2VnbWVudDogW1tcImxlZnRsaW5lc2VnbWVudFwiLCBcInJpZ2h0bGluZXNlZ21lbnRcIl0sIDAuODg4LCA1MjJdLFxuICBvdmVyZ3JvdXA6IFtbXCJsZWZ0Z3JvdXBcIiwgXCJyaWdodGdyb3VwXCJdLCAwLjg4OCwgMzQyXSxcbiAgdW5kZXJncm91cDogW1tcImxlZnRncm91cHVuZGVyXCIsIFwicmlnaHRncm91cHVuZGVyXCJdLCAwLjg4OCwgMzQyXSxcbiAgeG1hcHN0bzogW1tcImxlZnRtYXBzdG9cIiwgXCJyaWdodGFycm93XCJdLCAxLjUsIDUyMl0sXG4gIHh0b2Zyb206IFtbXCJsZWZ0VG9Gcm9tXCIsIFwicmlnaHRUb0Zyb21cIl0sIDEuNzUsIDUyOF0sXG4gIC8vIFRoZSBuZXh0IHRocmVlIGFycm93cyBhcmUgZnJvbSB0aGUgbWhjaGVtIHBhY2thZ2UuXG4gIC8vIEluIG1oY2hlbS5zdHksIG1pbi1sZW5ndGggaXMgMi4wZW0uIEJ1dCB0aGVzZSBhcnJvd3MgbWlnaHQgYXBwZWFyIGluIHRoZVxuICAvLyBkb2N1bWVudCBhcyBcXHhyaWdodGFycm93IG9yIFxceHJpZ2h0bGVmdGhhcnBvb25zLiBUaG9zZSBoYXZlXG4gIC8vIG1pbi1sZW5ndGggPSAxLjc1ZW0sIHNvIHdlIHNldCBtaW4tbGVuZ3RoIG9uIHRoZXNlIG5leHQgdGhyZWUgdG8gbWF0Y2guXG4gIHhyaWdodGxlZnRhcnJvd3M6IFtbXCJiYXJhYm92ZWxlZnRhcnJvd1wiLCBcInJpZ2h0YXJyb3dhYm92ZWJhclwiXSwgMS43NSwgOTAxXSxcbiAgeHJpZ2h0ZXF1aWxpYnJpdW06IFtbXCJiYXJhYm92ZXNob3J0bGVmdGhhcnBvb25cIiwgXCJyaWdodGhhcnBvb25hYm92ZXNob3J0YmFyXCJdLCAxLjc1LCA3MTZdLFxuICB4bGVmdGVxdWlsaWJyaXVtOiBbW1wic2hvcnRiYXJhYm92ZWxlZnRoYXJwb29uXCIsIFwic2hvcnRyaWdodGhhcnBvb25hYm92ZWJhclwiXSwgMS43NSwgNzE2XVxufTtcblxudmFyIGdyb3VwTGVuZ3RoID0gZnVuY3Rpb24gZ3JvdXBMZW5ndGgoYXJnKSB7XG4gIGlmIChhcmcudHlwZSA9PT0gXCJvcmRncm91cFwiKSB7XG4gICAgcmV0dXJuIGFyZy5ib2R5Lmxlbmd0aDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMTtcbiAgfVxufTtcblxudmFyIHN0cmV0Y2h5X3N2Z1NwYW4gPSBmdW5jdGlvbiBzdmdTcGFuKGdyb3VwLCBvcHRpb25zKSB7XG4gIC8vIENyZWF0ZSBhIHNwYW4gd2l0aCBpbmxpbmUgU1ZHIGZvciB0aGUgZWxlbWVudC5cbiAgZnVuY3Rpb24gYnVpbGRTdmdTcGFuXygpIHtcbiAgICB2YXIgdmlld0JveFdpZHRoID0gNDAwMDAwOyAvLyBkZWZhdWx0XG5cbiAgICB2YXIgbGFiZWwgPSBncm91cC5sYWJlbC5zdWJzdHIoMSk7XG5cbiAgICBpZiAodXRpbHMuY29udGFpbnMoW1wid2lkZWhhdFwiLCBcIndpZGVjaGVja1wiLCBcIndpZGV0aWxkZVwiLCBcInV0aWxkZVwiXSwgbGFiZWwpKSB7XG4gICAgICAvLyBFYWNoIHR5cGUgaW4gdGhlIGBpZmAgc3RhdGVtZW50IGNvcnJlc3BvbmRzIHRvIG9uZSBvZiB0aGUgUGFyc2VOb2RlXG4gICAgICAvLyB0eXBlcyBiZWxvdy4gVGhpcyBuYXJyb3dpbmcgaXMgcmVxdWlyZWQgdG8gYWNjZXNzIGBncnAuYmFzZWAuXG4gICAgICB2YXIgZ3JwID0gZ3JvdXA7IC8vIFRoZXJlIGFyZSBmb3VyIFNWRyBpbWFnZXMgYXZhaWxhYmxlIGZvciBlYWNoIGZ1bmN0aW9uLlxuICAgICAgLy8gQ2hvb3NlIGEgdGFsbGVyIGltYWdlIHdoZW4gdGhlcmUgYXJlIG1vcmUgY2hhcmFjdGVycy5cblxuICAgICAgdmFyIG51bUNoYXJzID0gZ3JvdXBMZW5ndGgoZ3JwLmJhc2UpO1xuICAgICAgdmFyIHZpZXdCb3hIZWlnaHQ7XG4gICAgICB2YXIgcGF0aE5hbWU7XG5cbiAgICAgIHZhciBfaGVpZ2h0O1xuXG4gICAgICBpZiAobnVtQ2hhcnMgPiA1KSB7XG4gICAgICAgIGlmIChsYWJlbCA9PT0gXCJ3aWRlaGF0XCIgfHwgbGFiZWwgPT09IFwid2lkZWNoZWNrXCIpIHtcbiAgICAgICAgICB2aWV3Qm94SGVpZ2h0ID0gNDIwO1xuICAgICAgICAgIHZpZXdCb3hXaWR0aCA9IDIzNjQ7XG4gICAgICAgICAgX2hlaWdodCA9IDAuNDI7XG4gICAgICAgICAgcGF0aE5hbWUgPSBsYWJlbCArIFwiNFwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZpZXdCb3hIZWlnaHQgPSAzMTI7XG4gICAgICAgICAgdmlld0JveFdpZHRoID0gMjM0MDtcbiAgICAgICAgICBfaGVpZ2h0ID0gMC4zNDtcbiAgICAgICAgICBwYXRoTmFtZSA9IFwidGlsZGU0XCI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBpbWdJbmRleCA9IFsxLCAxLCAyLCAyLCAzLCAzXVtudW1DaGFyc107XG5cbiAgICAgICAgaWYgKGxhYmVsID09PSBcIndpZGVoYXRcIiB8fCBsYWJlbCA9PT0gXCJ3aWRlY2hlY2tcIikge1xuICAgICAgICAgIHZpZXdCb3hXaWR0aCA9IFswLCAxMDYyLCAyMzY0LCAyMzY0LCAyMzY0XVtpbWdJbmRleF07XG4gICAgICAgICAgdmlld0JveEhlaWdodCA9IFswLCAyMzksIDMwMCwgMzYwLCA0MjBdW2ltZ0luZGV4XTtcbiAgICAgICAgICBfaGVpZ2h0ID0gWzAsIDAuMjQsIDAuMywgMC4zLCAwLjM2LCAwLjQyXVtpbWdJbmRleF07XG4gICAgICAgICAgcGF0aE5hbWUgPSBsYWJlbCArIGltZ0luZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZpZXdCb3hXaWR0aCA9IFswLCA2MDAsIDEwMzMsIDIzMzksIDIzNDBdW2ltZ0luZGV4XTtcbiAgICAgICAgICB2aWV3Qm94SGVpZ2h0ID0gWzAsIDI2MCwgMjg2LCAzMDYsIDMxMl1baW1nSW5kZXhdO1xuICAgICAgICAgIF9oZWlnaHQgPSBbMCwgMC4yNiwgMC4yODYsIDAuMywgMC4zMDYsIDAuMzRdW2ltZ0luZGV4XTtcbiAgICAgICAgICBwYXRoTmFtZSA9IFwidGlsZGVcIiArIGltZ0luZGV4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBwYXRoID0gbmV3IGRvbVRyZWVfUGF0aE5vZGUocGF0aE5hbWUpO1xuICAgICAgdmFyIHN2Z05vZGUgPSBuZXcgU3ZnTm9kZShbcGF0aF0sIHtcbiAgICAgICAgXCJ3aWR0aFwiOiBcIjEwMCVcIixcbiAgICAgICAgXCJoZWlnaHRcIjogX2hlaWdodCArIFwiZW1cIixcbiAgICAgICAgXCJ2aWV3Qm94XCI6IFwiMCAwIFwiICsgdmlld0JveFdpZHRoICsgXCIgXCIgKyB2aWV3Qm94SGVpZ2h0LFxuICAgICAgICBcInByZXNlcnZlQXNwZWN0UmF0aW9cIjogXCJub25lXCJcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3BhbjogYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW10sIFtzdmdOb2RlXSwgb3B0aW9ucyksXG4gICAgICAgIG1pbldpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IF9oZWlnaHRcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzcGFucyA9IFtdO1xuICAgICAgdmFyIGRhdGEgPSBrYXRleEltYWdlc0RhdGFbbGFiZWxdO1xuICAgICAgdmFyIHBhdGhzID0gZGF0YVswXSxcbiAgICAgICAgICBfbWluV2lkdGggPSBkYXRhWzFdLFxuICAgICAgICAgIF92aWV3Qm94SGVpZ2h0ID0gZGF0YVsyXTtcblxuICAgICAgdmFyIF9oZWlnaHQyID0gX3ZpZXdCb3hIZWlnaHQgLyAxMDAwO1xuXG4gICAgICB2YXIgbnVtU3ZnQ2hpbGRyZW4gPSBwYXRocy5sZW5ndGg7XG4gICAgICB2YXIgd2lkdGhDbGFzc2VzO1xuICAgICAgdmFyIGFsaWducztcblxuICAgICAgaWYgKG51bVN2Z0NoaWxkcmVuID09PSAxKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWU6IEFsbCB0aGVzZSBjYXNlcyBtdXN0IGJlIG9mIHRoZSA0LXR1cGxlIHR5cGUuXG4gICAgICAgIHZhciBhbGlnbjEgPSBkYXRhWzNdO1xuICAgICAgICB3aWR0aENsYXNzZXMgPSBbXCJoaWRlLXRhaWxcIl07XG4gICAgICAgIGFsaWducyA9IFthbGlnbjFdO1xuICAgICAgfSBlbHNlIGlmIChudW1TdmdDaGlsZHJlbiA9PT0gMikge1xuICAgICAgICB3aWR0aENsYXNzZXMgPSBbXCJoYWxmYXJyb3ctbGVmdFwiLCBcImhhbGZhcnJvdy1yaWdodFwiXTtcbiAgICAgICAgYWxpZ25zID0gW1wieE1pbllNaW5cIiwgXCJ4TWF4WU1pblwiXTtcbiAgICAgIH0gZWxzZSBpZiAobnVtU3ZnQ2hpbGRyZW4gPT09IDMpIHtcbiAgICAgICAgd2lkdGhDbGFzc2VzID0gW1wiYnJhY2UtbGVmdFwiLCBcImJyYWNlLWNlbnRlclwiLCBcImJyYWNlLXJpZ2h0XCJdO1xuICAgICAgICBhbGlnbnMgPSBbXCJ4TWluWU1pblwiLCBcInhNaWRZTWluXCIsIFwieE1heFlNaW5cIl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3JyZWN0IGthdGV4SW1hZ2VzRGF0YSBvciB1cGRhdGUgY29kZSBoZXJlIHRvIHN1cHBvcnRcXG4gICAgICAgICAgICAgICAgICAgIFwiICsgbnVtU3ZnQ2hpbGRyZW4gKyBcIiBjaGlsZHJlbi5cIik7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtU3ZnQ2hpbGRyZW47IGkrKykge1xuICAgICAgICB2YXIgX3BhdGggPSBuZXcgZG9tVHJlZV9QYXRoTm9kZShwYXRoc1tpXSk7XG5cbiAgICAgICAgdmFyIF9zdmdOb2RlID0gbmV3IFN2Z05vZGUoW19wYXRoXSwge1xuICAgICAgICAgIFwid2lkdGhcIjogXCI0MDBlbVwiLFxuICAgICAgICAgIFwiaGVpZ2h0XCI6IF9oZWlnaHQyICsgXCJlbVwiLFxuICAgICAgICAgIFwidmlld0JveFwiOiBcIjAgMCBcIiArIHZpZXdCb3hXaWR0aCArIFwiIFwiICsgX3ZpZXdCb3hIZWlnaHQsXG4gICAgICAgICAgXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCI6IGFsaWduc1tpXSArIFwiIHNsaWNlXCJcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIF9zcGFuID0gYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW3dpZHRoQ2xhc3Nlc1tpXV0sIFtfc3ZnTm9kZV0sIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChudW1TdmdDaGlsZHJlbiA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzcGFuOiBfc3BhbixcbiAgICAgICAgICAgIG1pbldpZHRoOiBfbWluV2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IF9oZWlnaHQyXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfc3Bhbi5zdHlsZS5oZWlnaHQgPSBfaGVpZ2h0MiArIFwiZW1cIjtcbiAgICAgICAgICBzcGFucy5wdXNoKF9zcGFuKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzcGFuOiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJzdHJldGNoeVwiXSwgc3BhbnMsIG9wdGlvbnMpLFxuICAgICAgICBtaW5XaWR0aDogX21pbldpZHRoLFxuICAgICAgICBoZWlnaHQ6IF9oZWlnaHQyXG4gICAgICB9O1xuICAgIH1cbiAgfSAvLyBidWlsZFN2Z1NwYW5fKClcblxuXG4gIHZhciBfYnVpbGRTdmdTcGFuXyA9IGJ1aWxkU3ZnU3Bhbl8oKSxcbiAgICAgIHNwYW4gPSBfYnVpbGRTdmdTcGFuXy5zcGFuLFxuICAgICAgbWluV2lkdGggPSBfYnVpbGRTdmdTcGFuXy5taW5XaWR0aCxcbiAgICAgIGhlaWdodCA9IF9idWlsZFN2Z1NwYW5fLmhlaWdodDsgLy8gTm90ZSB0aGF0IHdlIGFyZSByZXR1cm5pbmcgc3Bhbi5kZXB0aCA9IDAuXG4gIC8vIEFueSBhZGp1c3RtZW50cyByZWxhdGl2ZSB0byB0aGUgYmFzZWxpbmUgbXVzdCBiZSBkb25lIGluIGJ1aWxkSFRNTC5cblxuXG4gIHNwYW4uaGVpZ2h0ID0gaGVpZ2h0O1xuICBzcGFuLnN0eWxlLmhlaWdodCA9IGhlaWdodCArIFwiZW1cIjtcblxuICBpZiAobWluV2lkdGggPiAwKSB7XG4gICAgc3Bhbi5zdHlsZS5taW5XaWR0aCA9IG1pbldpZHRoICsgXCJlbVwiO1xuICB9XG5cbiAgcmV0dXJuIHNwYW47XG59O1xuXG52YXIgc3RyZXRjaHlfZW5jbG9zZVNwYW4gPSBmdW5jdGlvbiBlbmNsb3NlU3Bhbihpbm5lciwgbGFiZWwsIHBhZCwgb3B0aW9ucykge1xuICAvLyBSZXR1cm4gYW4gaW1hZ2Ugc3BhbiBmb3IgXFxjYW5jZWwsIFxcYmNhbmNlbCwgXFx4Y2FuY2VsLCBvciBcXGZib3hcbiAgdmFyIGltZztcbiAgdmFyIHRvdGFsSGVpZ2h0ID0gaW5uZXIuaGVpZ2h0ICsgaW5uZXIuZGVwdGggKyAyICogcGFkO1xuXG4gIGlmICgvZmJveHxjb2xvci8udGVzdChsYWJlbCkpIHtcbiAgICBpbWcgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJzdHJldGNoeVwiLCBsYWJlbF0sIFtdLCBvcHRpb25zKTtcblxuICAgIGlmIChsYWJlbCA9PT0gXCJmYm94XCIpIHtcbiAgICAgIHZhciBjb2xvciA9IG9wdGlvbnMuY29sb3IgJiYgb3B0aW9ucy5nZXRDb2xvcigpO1xuXG4gICAgICBpZiAoY29sb3IpIHtcbiAgICAgICAgaW1nLnN0eWxlLmJvcmRlckNvbG9yID0gY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFxcY2FuY2VsLCBcXGJjYW5jZWwsIG9yIFxceGNhbmNlbFxuICAgIC8vIFNpbmNlIFxcY2FuY2VsJ3MgU1ZHIGlzIGlubGluZSBhbmQgaXQgb21pdHMgdGhlIHZpZXdCb3ggYXR0cmlidXRlLFxuICAgIC8vIGl0cyBzdHJva2Utd2lkdGggd2lsbCBub3QgdmFyeSB3aXRoIHNwYW4gYXJlYS5cbiAgICB2YXIgbGluZXMgPSBbXTtcblxuICAgIGlmICgvXltieF1jYW5jZWwkLy50ZXN0KGxhYmVsKSkge1xuICAgICAgbGluZXMucHVzaChuZXcgTGluZU5vZGUoe1xuICAgICAgICBcIngxXCI6IFwiMFwiLFxuICAgICAgICBcInkxXCI6IFwiMFwiLFxuICAgICAgICBcIngyXCI6IFwiMTAwJVwiLFxuICAgICAgICBcInkyXCI6IFwiMTAwJVwiLFxuICAgICAgICBcInN0cm9rZS13aWR0aFwiOiBcIjAuMDQ2ZW1cIlxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlmICgvXng/Y2FuY2VsJC8udGVzdChsYWJlbCkpIHtcbiAgICAgIGxpbmVzLnB1c2gobmV3IExpbmVOb2RlKHtcbiAgICAgICAgXCJ4MVwiOiBcIjBcIixcbiAgICAgICAgXCJ5MVwiOiBcIjEwMCVcIixcbiAgICAgICAgXCJ4MlwiOiBcIjEwMCVcIixcbiAgICAgICAgXCJ5MlwiOiBcIjBcIixcbiAgICAgICAgXCJzdHJva2Utd2lkdGhcIjogXCIwLjA0NmVtXCJcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICB2YXIgc3ZnTm9kZSA9IG5ldyBTdmdOb2RlKGxpbmVzLCB7XG4gICAgICBcIndpZHRoXCI6IFwiMTAwJVwiLFxuICAgICAgXCJoZWlnaHRcIjogdG90YWxIZWlnaHQgKyBcImVtXCJcbiAgICB9KTtcbiAgICBpbWcgPSBidWlsZENvbW1vbi5tYWtlU3ZnU3BhbihbXSwgW3N2Z05vZGVdLCBvcHRpb25zKTtcbiAgfVxuXG4gIGltZy5oZWlnaHQgPSB0b3RhbEhlaWdodDtcbiAgaW1nLnN0eWxlLmhlaWdodCA9IHRvdGFsSGVpZ2h0ICsgXCJlbVwiO1xuICByZXR1cm4gaW1nO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3RyZXRjaHkgPSAoe1xuICBlbmNsb3NlU3Bhbjogc3RyZXRjaHlfZW5jbG9zZVNwYW4sXG4gIG1hdGhNTG5vZGU6IHN0cmV0Y2h5X21hdGhNTG5vZGUsXG4gIHN2Z1NwYW46IHN0cmV0Y2h5X3N2Z1NwYW5cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2FjY2VudC5qc1xuXG5cblxuXG5cblxuXG5cblxuLy8gTk9URTogVW5saWtlIG1vc3QgYGh0bWxCdWlsZGVyYHMsIHRoaXMgb25lIGhhbmRsZXMgbm90IG9ubHkgXCJhY2NlbnRcIiwgYnV0XG52YXIgYWNjZW50X2h0bWxCdWlsZGVyID0gZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JwLCBvcHRpb25zKSB7XG4gIC8vIEFjY2VudHMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgcGcuIDQ0MywgcnVsZSAxMi5cbiAgdmFyIGJhc2U7XG4gIHZhciBncm91cDtcbiAgdmFyIHN1cFN1YiA9IGNoZWNrTm9kZVR5cGUoZ3JwLCBcInN1cHN1YlwiKTtcbiAgdmFyIHN1cFN1Ykdyb3VwO1xuXG4gIGlmIChzdXBTdWIpIHtcbiAgICAvLyBJZiBvdXIgYmFzZSBpcyBhIGNoYXJhY3RlciBib3gsIGFuZCB3ZSBoYXZlIHN1cGVyc2NyaXB0cyBhbmRcbiAgICAvLyBzdWJzY3JpcHRzLCB0aGUgc3Vwc3ViIHdpbGwgZGVmZXIgdG8gdXMuIEluIHBhcnRpY3VsYXIsIHdlIHdhbnRcbiAgICAvLyB0byBhdHRhY2ggdGhlIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cyB0byB0aGUgaW5uZXIgYm9keSAoc29cbiAgICAvLyB0aGF0IHRoZSBwb3NpdGlvbiBvZiB0aGUgc3VwZXJzY3JpcHRzIGFuZCBzdWJzY3JpcHRzIHdvbid0IGJlXG4gICAgLy8gYWZmZWN0ZWQgYnkgdGhlIGhlaWdodCBvZiB0aGUgYWNjZW50KS4gV2UgYWNjb21wbGlzaCB0aGlzIGJ5XG4gICAgLy8gc3RpY2tpbmcgdGhlIGJhc2Ugb2YgdGhlIGFjY2VudCBpbnRvIHRoZSBiYXNlIG9mIHRoZSBzdXBzdWIsIGFuZFxuICAgIC8vIHJlbmRlcmluZyB0aGF0LCB3aGlsZSBrZWVwaW5nIHRyYWNrIG9mIHdoZXJlIHRoZSBhY2NlbnQgaXMuXG4gICAgLy8gVGhlIHJlYWwgYWNjZW50IGdyb3VwIGlzIHRoZSBiYXNlIG9mIHRoZSBzdXBzdWIgZ3JvdXBcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKHN1cFN1Yi5iYXNlLCBcImFjY2VudFwiKTsgLy8gVGhlIGNoYXJhY3RlciBib3ggaXMgdGhlIGJhc2Ugb2YgdGhlIGFjY2VudCBncm91cFxuXG4gICAgYmFzZSA9IGdyb3VwLmJhc2U7IC8vIFN0aWNrIHRoZSBjaGFyYWN0ZXIgYm94IGludG8gdGhlIGJhc2Ugb2YgdGhlIHN1cHN1YiBncm91cFxuXG4gICAgc3VwU3ViLmJhc2UgPSBiYXNlOyAvLyBSZXJlbmRlciB0aGUgc3Vwc3ViIGdyb3VwIHdpdGggaXRzIG5ldyBiYXNlLCBhbmQgc3RvcmUgdGhhdFxuICAgIC8vIHJlc3VsdC5cblxuICAgIHN1cFN1Ykdyb3VwID0gYXNzZXJ0U3BhbihidWlsZEhUTUxfYnVpbGRHcm91cChzdXBTdWIsIG9wdGlvbnMpKTsgLy8gcmVzZXQgb3JpZ2luYWwgYmFzZVxuXG4gICAgc3VwU3ViLmJhc2UgPSBncm91cDtcbiAgfSBlbHNlIHtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKGdycCwgXCJhY2NlbnRcIik7XG4gICAgYmFzZSA9IGdyb3VwLmJhc2U7XG4gIH0gLy8gQnVpbGQgdGhlIGJhc2UgZ3JvdXBcblxuXG4gIHZhciBib2R5ID0gYnVpbGRIVE1MX2J1aWxkR3JvdXAoYmFzZSwgb3B0aW9ucy5oYXZpbmdDcmFtcGVkU3R5bGUoKSk7IC8vIERvZXMgdGhlIGFjY2VudCBuZWVkIHRvIHNoaWZ0IGZvciB0aGUgc2tldyBvZiBhIGNoYXJhY3Rlcj9cblxuICB2YXIgbXVzdFNoaWZ0ID0gZ3JvdXAuaXNTaGlmdHkgJiYgdXRpbHMuaXNDaGFyYWN0ZXJCb3goYmFzZSk7IC8vIENhbGN1bGF0ZSB0aGUgc2tldyBvZiB0aGUgYWNjZW50LiBUaGlzIGlzIGJhc2VkIG9uIHRoZSBsaW5lIFwiSWYgdGhlXG4gIC8vIG51Y2xldXMgaXMgbm90IGEgc2luZ2xlIGNoYXJhY3RlciwgbGV0IHMgPSAwOyBvdGhlcndpc2Ugc2V0IHMgdG8gdGhlXG4gIC8vIGtlcm4gYW1vdW50IGZvciB0aGUgbnVjbGV1cyBmb2xsb3dlZCBieSB0aGUgXFxza2V3Y2hhciBvZiBpdHMgZm9udC5cIlxuICAvLyBOb3RlIHRoYXQgb3VyIHNrZXcgbWV0cmljcyBhcmUganVzdCB0aGUga2VybiBiZXR3ZWVuIGVhY2ggY2hhcmFjdGVyXG4gIC8vIGFuZCB0aGUgc2tld2NoYXIuXG5cbiAgdmFyIHNrZXcgPSAwO1xuXG4gIGlmIChtdXN0U2hpZnQpIHtcbiAgICAvLyBJZiB0aGUgYmFzZSBpcyBhIGNoYXJhY3RlciBib3gsIHRoZW4gd2Ugd2FudCB0aGUgc2tldyBvZiB0aGVcbiAgICAvLyBpbm5lcm1vc3QgY2hhcmFjdGVyLiBUbyBkbyB0aGF0LCB3ZSBmaW5kIHRoZSBpbm5lcm1vc3QgY2hhcmFjdGVyOlxuICAgIHZhciBiYXNlQ2hhciA9IHV0aWxzLmdldEJhc2VFbGVtKGJhc2UpOyAvLyBUaGVuLCB3ZSByZW5kZXIgaXRzIGdyb3VwIHRvIGdldCB0aGUgc3ltYm9sIGluc2lkZSBpdFxuXG4gICAgdmFyIGJhc2VHcm91cCA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKGJhc2VDaGFyLCBvcHRpb25zLmhhdmluZ0NyYW1wZWRTdHlsZSgpKTsgLy8gRmluYWxseSwgd2UgcHVsbCB0aGUgc2tldyBvZmYgb2YgdGhlIHN5bWJvbC5cblxuICAgIHNrZXcgPSBhc3NlcnRTeW1ib2xEb21Ob2RlKGJhc2VHcm91cCkuc2tldzsgLy8gTm90ZSB0aGF0IHdlIG5vdyB0aHJvdyBhd2F5IGJhc2VHcm91cCwgYmVjYXVzZSB0aGUgbGF5ZXJzIHdlXG4gICAgLy8gcmVtb3ZlZCB3aXRoIGdldEJhc2VFbGVtIG1pZ2h0IGNvbnRhaW4gdGhpbmdzIGxpa2UgXFxjb2xvciB3aGljaFxuICAgIC8vIHdlIGNhbid0IGdldCByaWQgb2YuXG4gICAgLy8gVE9ETyhlbWlseSk6IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGdldCB0aGUgc2tld1xuICB9IC8vIGNhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIHNwYWNlIGJldHdlZW4gdGhlIGJvZHkgYW5kIHRoZSBhY2NlbnRcblxuXG4gIHZhciBjbGVhcmFuY2UgPSBNYXRoLm1pbihib2R5LmhlaWdodCwgb3B0aW9ucy5mb250TWV0cmljcygpLnhIZWlnaHQpOyAvLyBCdWlsZCB0aGUgYWNjZW50XG5cbiAgdmFyIGFjY2VudEJvZHk7XG5cbiAgaWYgKCFncm91cC5pc1N0cmV0Y2h5KSB7XG4gICAgdmFyIGFjY2VudDtcbiAgICB2YXIgd2lkdGg7XG5cbiAgICBpZiAoZ3JvdXAubGFiZWwgPT09IFwiXFxcXHZlY1wiKSB7XG4gICAgICAvLyBCZWZvcmUgdmVyc2lvbiAwLjksIFxcdmVjIHVzZWQgdGhlIGNvbWJpbmluZyBmb250IGdseXBoIFUrMjBENy5cbiAgICAgIC8vIEJ1dCBicm93c2VycywgZXNwZWNpYWxseSBTYWZhcmksIGFyZSBub3QgY29uc2lzdGVudCBpbiBob3cgdGhleVxuICAgICAgLy8gcmVuZGVyIGNvbWJpbmluZyBjaGFyYWN0ZXJzIHdoZW4gbm90IHByZWNlZGVkIGJ5IGEgY2hhcmFjdGVyLlxuICAgICAgLy8gU28gbm93IHdlIHVzZSBhbiBTVkcuXG4gICAgICAvLyBJZiBTYWZhcmkgcmVmb3Jtcywgd2Ugc2hvdWxkIGNvbnNpZGVyIHJldmVydGluZyB0byB0aGUgZ2x5cGguXG4gICAgICBhY2NlbnQgPSBidWlsZENvbW1vbi5zdGF0aWNTdmcoXCJ2ZWNcIiwgb3B0aW9ucyk7XG4gICAgICB3aWR0aCA9IGJ1aWxkQ29tbW9uLnN2Z0RhdGEudmVjWzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBhY2NlbnQgPSBidWlsZENvbW1vbi5tYWtlU3ltYm9sKGdyb3VwLmxhYmVsLCBcIk1haW4tUmVndWxhclwiLCBncm91cC5tb2RlLCBvcHRpb25zKTsgLy8gUmVtb3ZlIHRoZSBpdGFsaWMgY29ycmVjdGlvbiBvZiB0aGUgYWNjZW50LCBiZWNhdXNlIGl0IG9ubHkgc2VydmVzIHRvXG4gICAgICAvLyBzaGlmdCB0aGUgYWNjZW50IG92ZXIgdG8gYSBwbGFjZSB3ZSBkb24ndCB3YW50LlxuXG4gICAgICBhY2NlbnQuaXRhbGljID0gMDtcbiAgICAgIHdpZHRoID0gYWNjZW50LndpZHRoO1xuICAgIH1cblxuICAgIGFjY2VudEJvZHkgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJhY2NlbnQtYm9keVwiXSwgW2FjY2VudF0pOyAvLyBcIkZ1bGxcIiBhY2NlbnRzIGV4cGFuZCB0aGUgd2lkdGggb2YgdGhlIHJlc3VsdGluZyBzeW1ib2wgdG8gYmVcbiAgICAvLyBhdCBsZWFzdCB0aGUgd2lkdGggb2YgdGhlIGFjY2VudCwgYW5kIG92ZXJsYXAgZGlyZWN0bHkgb250byB0aGVcbiAgICAvLyBjaGFyYWN0ZXIgd2l0aG91dCBhbnkgdmVydGljYWwgb2Zmc2V0LlxuXG4gICAgdmFyIGFjY2VudEZ1bGwgPSBncm91cC5sYWJlbCA9PT0gXCJcXFxcdGV4dGNpcmNsZWRcIjtcblxuICAgIGlmIChhY2NlbnRGdWxsKSB7XG4gICAgICBhY2NlbnRCb2R5LmNsYXNzZXMucHVzaCgnYWNjZW50LWZ1bGwnKTtcbiAgICAgIGNsZWFyYW5jZSA9IGJvZHkuaGVpZ2h0O1xuICAgIH0gLy8gU2hpZnQgdGhlIGFjY2VudCBvdmVyIGJ5IHRoZSBza2V3LlxuXG5cbiAgICB2YXIgbGVmdCA9IHNrZXc7IC8vIENTUyBkZWZpbmVzIGAua2F0ZXggLmFjY2VudCAuYWNjZW50LWJvZHk6bm90KC5hY2NlbnQtZnVsbCkgeyB3aWR0aDogMCB9YFxuICAgIC8vIHNvIHRoYXQgdGhlIGFjY2VudCBkb2Vzbid0IGNvbnRyaWJ1dGUgdG8gdGhlIGJvdW5kaW5nIGJveC5cbiAgICAvLyBXZSBuZWVkIHRvIHNoaWZ0IHRoZSBjaGFyYWN0ZXIgYnkgaXRzIHdpZHRoIChlZmZlY3RpdmVseSBoYWxmXG4gICAgLy8gaXRzIHdpZHRoKSB0byBjb21wZW5zYXRlLlxuXG4gICAgaWYgKCFhY2NlbnRGdWxsKSB7XG4gICAgICBsZWZ0IC09IHdpZHRoIC8gMjtcbiAgICB9XG5cbiAgICBhY2NlbnRCb2R5LnN0eWxlLmxlZnQgPSBsZWZ0ICsgXCJlbVwiOyAvLyBcXHRleHRjaXJjbGVkIHVzZXMgdGhlIFxcYmlnY2lyYyBnbHlwaCwgc28gaXQgbmVlZHMgc29tZVxuICAgIC8vIHZlcnRpY2FsIGFkanVzdG1lbnQgdG8gbWF0Y2ggTGFUZVguXG5cbiAgICBpZiAoZ3JvdXAubGFiZWwgPT09IFwiXFxcXHRleHRjaXJjbGVkXCIpIHtcbiAgICAgIGFjY2VudEJvZHkuc3R5bGUudG9wID0gXCIuMmVtXCI7XG4gICAgfVxuXG4gICAgYWNjZW50Qm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBib2R5XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiAtY2xlYXJhbmNlXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBhY2NlbnRCb2R5XG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIGFjY2VudEJvZHkgPSBzdHJldGNoeS5zdmdTcGFuKGdyb3VwLCBvcHRpb25zKTtcbiAgICBhY2NlbnRCb2R5ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJmaXJzdEJhc2VsaW5lXCIsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJvZHlcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGFjY2VudEJvZHksXG4gICAgICAgIHdyYXBwZXJDbGFzc2VzOiBbXCJzdmctYWxpZ25cIl0sXG4gICAgICAgIHdyYXBwZXJTdHlsZTogc2tldyA+IDAgPyB7XG4gICAgICAgICAgd2lkdGg6IFwiY2FsYygxMDAlIC0gXCIgKyAyICogc2tldyArIFwiZW0pXCIsXG4gICAgICAgICAgbWFyZ2luTGVmdDogMiAqIHNrZXcgKyBcImVtXCJcbiAgICAgICAgfSA6IHVuZGVmaW5lZFxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfVxuXG4gIHZhciBhY2NlbnRXcmFwID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcImFjY2VudFwiXSwgW2FjY2VudEJvZHldLCBvcHRpb25zKTtcblxuICBpZiAoc3VwU3ViR3JvdXApIHtcbiAgICAvLyBIZXJlLCB3ZSByZXBsYWNlIHRoZSBcImJhc2VcIiBjaGlsZCBvZiB0aGUgc3Vwc3ViIHdpdGggb3VyIG5ld2x5XG4gICAgLy8gZ2VuZXJhdGVkIGFjY2VudC5cbiAgICBzdXBTdWJHcm91cC5jaGlsZHJlblswXSA9IGFjY2VudFdyYXA7IC8vIFNpbmNlIHdlIGRvbid0IHJlcnVuIHRoZSBoZWlnaHQgY2FsY3VsYXRpb24gYWZ0ZXIgcmVwbGFjaW5nIHRoZVxuICAgIC8vIGFjY2VudCwgd2UgbWFudWFsbHkgcmVjYWxjdWxhdGUgaGVpZ2h0LlxuXG4gICAgc3VwU3ViR3JvdXAuaGVpZ2h0ID0gTWF0aC5tYXgoYWNjZW50V3JhcC5oZWlnaHQsIHN1cFN1Ykdyb3VwLmhlaWdodCk7IC8vIEFjY2VudHMgc2hvdWxkIGFsd2F5cyBiZSBvcmRzLCBldmVuIHdoZW4gdGhlaXIgaW5uYXJkcyBhcmUgbm90LlxuXG4gICAgc3VwU3ViR3JvdXAuY2xhc3Nlc1swXSA9IFwibW9yZFwiO1xuICAgIHJldHVybiBzdXBTdWJHcm91cDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYWNjZW50V3JhcDtcbiAgfVxufTtcblxudmFyIGFjY2VudF9tYXRobWxCdWlsZGVyID0gZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICB2YXIgYWNjZW50Tm9kZSA9IGdyb3VwLmlzU3RyZXRjaHkgPyBzdHJldGNoeS5tYXRoTUxub2RlKGdyb3VwLmxhYmVsKSA6IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW2J1aWxkTWF0aE1MX21ha2VUZXh0KGdyb3VwLmxhYmVsLCBncm91cC5tb2RlKV0pO1xuICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW92ZXJcIiwgW2J1aWxkTWF0aE1MX2J1aWxkR3JvdXAoZ3JvdXAuYmFzZSwgb3B0aW9ucyksIGFjY2VudE5vZGVdKTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJhY2NlbnRcIiwgXCJ0cnVlXCIpO1xuICByZXR1cm4gbm9kZTtcbn07XG5cbnZhciBOT05fU1RSRVRDSFlfQUNDRU5UX1JFR0VYID0gbmV3IFJlZ0V4cChbXCJcXFxcYWN1dGVcIiwgXCJcXFxcZ3JhdmVcIiwgXCJcXFxcZGRvdFwiLCBcIlxcXFx0aWxkZVwiLCBcIlxcXFxiYXJcIiwgXCJcXFxcYnJldmVcIiwgXCJcXFxcY2hlY2tcIiwgXCJcXFxcaGF0XCIsIFwiXFxcXHZlY1wiLCBcIlxcXFxkb3RcIiwgXCJcXFxcbWF0aHJpbmdcIl0ubWFwKGZ1bmN0aW9uIChhY2NlbnQpIHtcbiAgcmV0dXJuIFwiXFxcXFwiICsgYWNjZW50O1xufSkuam9pbihcInxcIikpOyAvLyBBY2NlbnRzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJhY2NlbnRcIixcbiAgbmFtZXM6IFtcIlxcXFxhY3V0ZVwiLCBcIlxcXFxncmF2ZVwiLCBcIlxcXFxkZG90XCIsIFwiXFxcXHRpbGRlXCIsIFwiXFxcXGJhclwiLCBcIlxcXFxicmV2ZVwiLCBcIlxcXFxjaGVja1wiLCBcIlxcXFxoYXRcIiwgXCJcXFxcdmVjXCIsIFwiXFxcXGRvdFwiLCBcIlxcXFxtYXRocmluZ1wiLCBcIlxcXFx3aWRlY2hlY2tcIiwgXCJcXFxcd2lkZWhhdFwiLCBcIlxcXFx3aWRldGlsZGVcIiwgXCJcXFxcb3ZlcnJpZ2h0YXJyb3dcIiwgXCJcXFxcb3ZlcmxlZnRhcnJvd1wiLCBcIlxcXFxPdmVycmlnaHRhcnJvd1wiLCBcIlxcXFxvdmVybGVmdHJpZ2h0YXJyb3dcIiwgXCJcXFxcb3Zlcmdyb3VwXCIsIFwiXFxcXG92ZXJsaW5lc2VnbWVudFwiLCBcIlxcXFxvdmVybGVmdGhhcnBvb25cIiwgXCJcXFxcb3ZlcnJpZ2h0aGFycG9vblwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoY29udGV4dCwgYXJncykge1xuICAgIHZhciBiYXNlID0gYXJnc1swXTtcbiAgICB2YXIgaXNTdHJldGNoeSA9ICFOT05fU1RSRVRDSFlfQUNDRU5UX1JFR0VYLnRlc3QoY29udGV4dC5mdW5jTmFtZSk7XG4gICAgdmFyIGlzU2hpZnR5ID0gIWlzU3RyZXRjaHkgfHwgY29udGV4dC5mdW5jTmFtZSA9PT0gXCJcXFxcd2lkZWhhdFwiIHx8IGNvbnRleHQuZnVuY05hbWUgPT09IFwiXFxcXHdpZGV0aWxkZVwiIHx8IGNvbnRleHQuZnVuY05hbWUgPT09IFwiXFxcXHdpZGVjaGVja1wiO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImFjY2VudFwiLFxuICAgICAgbW9kZTogY29udGV4dC5wYXJzZXIubW9kZSxcbiAgICAgIGxhYmVsOiBjb250ZXh0LmZ1bmNOYW1lLFxuICAgICAgaXNTdHJldGNoeTogaXNTdHJldGNoeSxcbiAgICAgIGlzU2hpZnR5OiBpc1NoaWZ0eSxcbiAgICAgIGJhc2U6IGJhc2VcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogYWNjZW50X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhY2NlbnRfbWF0aG1sQnVpbGRlclxufSk7IC8vIFRleHQtbW9kZSBhY2NlbnRzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJhY2NlbnRcIixcbiAgbmFtZXM6IFtcIlxcXFwnXCIsIFwiXFxcXGBcIiwgXCJcXFxcXlwiLCBcIlxcXFx+XCIsIFwiXFxcXD1cIiwgXCJcXFxcdVwiLCBcIlxcXFwuXCIsICdcXFxcXCInLCBcIlxcXFxyXCIsIFwiXFxcXEhcIiwgXCJcXFxcdlwiLCBcIlxcXFx0ZXh0Y2lyY2xlZFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgYWxsb3dlZEluTWF0aDogZmFsc2VcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gICAgdmFyIGJhc2UgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImFjY2VudFwiLFxuICAgICAgbW9kZTogY29udGV4dC5wYXJzZXIubW9kZSxcbiAgICAgIGxhYmVsOiBjb250ZXh0LmZ1bmNOYW1lLFxuICAgICAgaXNTdHJldGNoeTogZmFsc2UsXG4gICAgICBpc1NoaWZ0eTogdHJ1ZSxcbiAgICAgIGJhc2U6IGJhc2VcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogYWNjZW50X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhY2NlbnRfbWF0aG1sQnVpbGRlclxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvYWNjZW50dW5kZXIuanNcbi8vIEhvcml6b250YWwgb3ZlcmxhcCBmdW5jdGlvbnNcblxuXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJhY2NlbnRVbmRlclwiLFxuICBuYW1lczogW1wiXFxcXHVuZGVybGVmdGFycm93XCIsIFwiXFxcXHVuZGVycmlnaHRhcnJvd1wiLCBcIlxcXFx1bmRlcmxlZnRyaWdodGFycm93XCIsIFwiXFxcXHVuZGVyZ3JvdXBcIiwgXCJcXFxcdW5kZXJsaW5lc2VnbWVudFwiLCBcIlxcXFx1dGlsZGVcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZi5wYXJzZXIsXG4gICAgICAgIGZ1bmNOYW1lID0gX3JlZi5mdW5jTmFtZTtcbiAgICB2YXIgYmFzZSA9IGFyZ3NbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiYWNjZW50VW5kZXJcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGFiZWw6IGZ1bmNOYW1lLFxuICAgICAgYmFzZTogYmFzZVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIFRyZWF0IHVuZGVyIGFjY2VudHMgbXVjaCBsaWtlIHVuZGVybGluZXMuXG4gICAgdmFyIGlubmVyR3JvdXAgPSBidWlsZEhUTUxfYnVpbGRHcm91cChncm91cC5iYXNlLCBvcHRpb25zKTtcbiAgICB2YXIgYWNjZW50Qm9keSA9IHN0cmV0Y2h5LnN2Z1NwYW4oZ3JvdXAsIG9wdGlvbnMpO1xuICAgIHZhciBrZXJuID0gZ3JvdXAubGFiZWwgPT09IFwiXFxcXHV0aWxkZVwiID8gMC4xMiA6IDA7IC8vIEdlbmVyYXRlIHRoZSB2bGlzdCwgd2l0aCB0aGUgYXBwcm9wcmlhdGUga2VybnNcblxuICAgIHZhciB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IGFjY2VudEJvZHkuaGVpZ2h0ICsga2VybixcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogYWNjZW50Qm9keSxcbiAgICAgICAgd3JhcHBlckNsYXNzZXM6IFtcInN2Zy1hbGlnblwiXVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZToga2VyblxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogaW5uZXJHcm91cFxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcImFjY2VudHVuZGVyXCJdLCBbdmxpc3RdLCBvcHRpb25zKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBhY2NlbnROb2RlID0gc3RyZXRjaHkubWF0aE1Mbm9kZShncm91cC5sYWJlbCk7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm11bmRlclwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5iYXNlLCBvcHRpb25zKSwgYWNjZW50Tm9kZV0pO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiYWNjZW50dW5kZXJcIiwgXCJ0cnVlXCIpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9hcnJvdy5qc1xuXG5cblxuXG5cblxuXG4vLyBIZWxwZXIgZnVuY3Rpb25cbnZhciBhcnJvd19wYWRkZWROb2RlID0gZnVuY3Rpb24gcGFkZGVkTm9kZShncm91cCkge1xuICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBncm91cCA/IFtncm91cF0gOiBbXSk7XG4gIG5vZGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgXCIrMC42ZW1cIik7XG4gIG5vZGUuc2V0QXR0cmlidXRlKFwibHNwYWNlXCIsIFwiMC4zZW1cIik7XG4gIHJldHVybiBub2RlO1xufTsgLy8gU3RyZXRjaHkgYXJyb3dzIHdpdGggYW4gb3B0aW9uYWwgYXJndW1lbnRcblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwieEFycm93XCIsXG4gIG5hbWVzOiBbXCJcXFxceGxlZnRhcnJvd1wiLCBcIlxcXFx4cmlnaHRhcnJvd1wiLCBcIlxcXFx4TGVmdGFycm93XCIsIFwiXFxcXHhSaWdodGFycm93XCIsIFwiXFxcXHhsZWZ0cmlnaHRhcnJvd1wiLCBcIlxcXFx4TGVmdHJpZ2h0YXJyb3dcIiwgXCJcXFxceGhvb2tsZWZ0YXJyb3dcIiwgXCJcXFxceGhvb2tyaWdodGFycm93XCIsIFwiXFxcXHhtYXBzdG9cIiwgXCJcXFxceHJpZ2h0aGFycG9vbmRvd25cIiwgXCJcXFxceHJpZ2h0aGFycG9vbnVwXCIsIFwiXFxcXHhsZWZ0aGFycG9vbmRvd25cIiwgXCJcXFxceGxlZnRoYXJwb29udXBcIiwgXCJcXFxceHJpZ2h0bGVmdGhhcnBvb25zXCIsIFwiXFxcXHhsZWZ0cmlnaHRoYXJwb29uc1wiLCBcIlxcXFx4bG9uZ2VxdWFsXCIsIFwiXFxcXHh0d29oZWFkcmlnaHRhcnJvd1wiLCBcIlxcXFx4dHdvaGVhZGxlZnRhcnJvd1wiLCBcIlxcXFx4dG9mcm9tXCIsIC8vIFRoZSBuZXh0IDMgZnVuY3Rpb25zIGFyZSBoZXJlIHRvIHN1cHBvcnQgdGhlIG1oY2hlbSBleHRlbnNpb24uXG4gIC8vIERpcmVjdCB1c2Ugb2YgdGhlc2UgZnVuY3Rpb25zIGlzIGRpc2NvdXJhZ2VkIGFuZCBtYXkgYnJlYWsgc29tZWRheS5cbiAgXCJcXFxceHJpZ2h0bGVmdGFycm93c1wiLCBcIlxcXFx4cmlnaHRlcXVpbGlicml1bVwiLCBcIlxcXFx4bGVmdGVxdWlsaWJyaXVtXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgbnVtT3B0aW9uYWxBcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInhBcnJvd1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBib2R5OiBhcmdzWzBdLFxuICAgICAgYmVsb3c6IG9wdEFyZ3NbMF1cbiAgICB9O1xuICB9LFxuICAvLyBGbG93IGlzIHVuYWJsZSB0byBjb3JyZWN0bHkgaW5mZXIgdGhlIHR5cGUgb2YgYGdyb3VwYCwgZXZlbiB0aG91Z2ggaXQnc1xuICAvLyB1bmFtaWJpZ3VvdXNseSBkZXRlcm1pbmVkIGZyb20gdGhlIHBhc3NlZC1pbiBgdHlwZWAgYWJvdmUuXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBzdHlsZSA9IG9wdGlvbnMuc3R5bGU7IC8vIEJ1aWxkIHRoZSBhcmd1bWVudCBncm91cHMgaW4gdGhlIGFwcHJvcHJpYXRlIHN0eWxlLlxuICAgIC8vIFJlZjogYW1zbWF0aC5kdHg6ICAgXFxoYm94eyRcXHNjcmlwdHN0eWxlXFxta2VybiMzbXV7IzZ9XFxta2VybiM0bXUkfSVcbiAgICAvLyBTb21lIGdyb3VwcyBjYW4gcmV0dXJuIGRvY3VtZW50IGZyYWdtZW50cy4gIEhhbmRsZSB0aG9zZSBieSB3cmFwcGluZ1xuICAgIC8vIHRoZW0gaW4gYSBzcGFuLlxuXG4gICAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlLnN1cCgpKTtcbiAgICB2YXIgdXBwZXJHcm91cCA9IGJ1aWxkQ29tbW9uLndyYXBGcmFnbWVudChidWlsZEhUTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBuZXdPcHRpb25zLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgdXBwZXJHcm91cC5jbGFzc2VzLnB1c2goXCJ4LWFycm93LXBhZFwiKTtcbiAgICB2YXIgbG93ZXJHcm91cDtcblxuICAgIGlmIChncm91cC5iZWxvdykge1xuICAgICAgLy8gQnVpbGQgdGhlIGxvd2VyIGdyb3VwXG4gICAgICBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShzdHlsZS5zdWIoKSk7XG4gICAgICBsb3dlckdyb3VwID0gYnVpbGRDb21tb24ud3JhcEZyYWdtZW50KGJ1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJlbG93LCBuZXdPcHRpb25zLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgICBsb3dlckdyb3VwLmNsYXNzZXMucHVzaChcIngtYXJyb3ctcGFkXCIpO1xuICAgIH1cblxuICAgIHZhciBhcnJvd0JvZHkgPSBzdHJldGNoeS5zdmdTcGFuKGdyb3VwLCBvcHRpb25zKTsgLy8gUmUgc2hpZnQ6IE5vdGUgdGhhdCBzdHJldGNoeS5zdmdTcGFuIHJldHVybmVkIGFycm93Qm9keS5kZXB0aCA9IDAuXG4gICAgLy8gVGhlIHBvaW50IHdlIHdhbnQgb24gdGhlIG1hdGggYXhpcyBpcyBhdCAwLjUgKiBhcnJvd0JvZHkuaGVpZ2h0LlxuXG4gICAgdmFyIGFycm93U2hpZnQgPSAtb3B0aW9ucy5mb250TWV0cmljcygpLmF4aXNIZWlnaHQgKyAwLjUgKiBhcnJvd0JvZHkuaGVpZ2h0OyAvLyAyIG11IGtlcm4uIFJlZjogYW1zbWF0aC5kdHg6ICM3XFxpZjAjMlxcZWxzZVxcbWtlcm4jMm11XFxmaVxuXG4gICAgdmFyIHVwcGVyU2hpZnQgPSAtb3B0aW9ucy5mb250TWV0cmljcygpLmF4aXNIZWlnaHQgLSAwLjUgKiBhcnJvd0JvZHkuaGVpZ2h0IC0gMC4xMTE7IC8vIDAuMTExIGVtID0gMiBtdVxuXG4gICAgaWYgKHVwcGVyR3JvdXAuZGVwdGggPiAwLjI1IHx8IGdyb3VwLmxhYmVsID09PSBcIlxcXFx4bGVmdGVxdWlsaWJyaXVtXCIpIHtcbiAgICAgIHVwcGVyU2hpZnQgLT0gdXBwZXJHcm91cC5kZXB0aDsgLy8gc2hpZnQgdXAgaWYgZGVwdGggZW5jcm9hY2hlc1xuICAgIH0gLy8gR2VuZXJhdGUgdGhlIHZsaXN0XG5cblxuICAgIHZhciB2bGlzdDtcblxuICAgIGlmIChsb3dlckdyb3VwKSB7XG4gICAgICB2YXIgbG93ZXJTaGlmdCA9IC1vcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCArIGxvd2VyR3JvdXAuaGVpZ2h0ICsgMC41ICogYXJyb3dCb2R5LmhlaWdodCArIDAuMTExO1xuICAgICAgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IHVwcGVyR3JvdXAsXG4gICAgICAgICAgc2hpZnQ6IHVwcGVyU2hpZnRcbiAgICAgICAgfSwge1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IGFycm93Qm9keSxcbiAgICAgICAgICBzaGlmdDogYXJyb3dTaGlmdFxuICAgICAgICB9LCB7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogbG93ZXJHcm91cCxcbiAgICAgICAgICBzaGlmdDogbG93ZXJTaGlmdFxuICAgICAgICB9XVxuICAgICAgfSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiB1cHBlckdyb3VwLFxuICAgICAgICAgIHNoaWZ0OiB1cHBlclNoaWZ0XG4gICAgICAgIH0sIHtcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBhcnJvd0JvZHksXG4gICAgICAgICAgc2hpZnQ6IGFycm93U2hpZnRcbiAgICAgICAgfV1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH0gLy8gJEZsb3dGaXhNZTogUmVwbGFjZSB0aGlzIHdpdGggcGFzc2luZyBcInN2Zy1hbGlnblwiIGludG8gbWFrZVZMaXN0LlxuXG5cbiAgICB2bGlzdC5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jaGlsZHJlblsxXS5jbGFzc2VzLnB1c2goXCJzdmctYWxpZ25cIik7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1yZWxcIiwgXCJ4LWFycm93XCJdLCBbdmxpc3RdLCBvcHRpb25zKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBhcnJvd05vZGUgPSBzdHJldGNoeS5tYXRoTUxub2RlKGdyb3VwLmxhYmVsKTtcbiAgICB2YXIgbm9kZTtcblxuICAgIGlmIChncm91cC5ib2R5KSB7XG4gICAgICB2YXIgdXBwZXJOb2RlID0gYXJyb3dfcGFkZGVkTm9kZShidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpKTtcblxuICAgICAgaWYgKGdyb3VwLmJlbG93KSB7XG4gICAgICAgIHZhciBsb3dlck5vZGUgPSBhcnJvd19wYWRkZWROb2RlKGJ1aWxkTWF0aE1MX2J1aWxkR3JvdXAoZ3JvdXAuYmVsb3csIG9wdGlvbnMpKTtcbiAgICAgICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXVuZGVyb3ZlclwiLCBbYXJyb3dOb2RlLCBsb3dlck5vZGUsIHVwcGVyTm9kZV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW92ZXJcIiwgW2Fycm93Tm9kZSwgdXBwZXJOb2RlXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChncm91cC5iZWxvdykge1xuICAgICAgdmFyIF9sb3dlck5vZGUgPSBhcnJvd19wYWRkZWROb2RlKGJ1aWxkTWF0aE1MX2J1aWxkR3JvdXAoZ3JvdXAuYmVsb3csIG9wdGlvbnMpKTtcblxuICAgICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXVuZGVyXCIsIFthcnJvd05vZGUsIF9sb3dlck5vZGVdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLlxuICAgICAgLy8gUGFyc2VyLmpzIHRocm93cyBhbiBlcnJvciBpZiB0aGVyZSBpcyBubyBhcmd1bWVudC5cbiAgICAgIG5vZGUgPSBhcnJvd19wYWRkZWROb2RlKCk7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb3ZlclwiLCBbYXJyb3dOb2RlLCBub2RlXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2NoYXIuanNcblxuXG4gLy8gXFxAY2hhciBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiB0aGF0IHRha2VzIGEgZ3JvdXBlZCBkZWNpbWFsIGFyZ3VtZW50IGxpa2Vcbi8vIHsxMjN9IGFuZCBjb252ZXJ0cyBpbnRvIHN5bWJvbCB3aXRoIGNvZGUgMTIzLiAgSXQgaXMgdXNlZCBieSB0aGUgKm1hY3JvKlxuLy8gXFxjaGFyIGRlZmluZWQgaW4gbWFjcm9zLmpzLlxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidGV4dG9yZFwiLFxuICBuYW1lczogW1wiXFxcXEBjaGFyXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZi5wYXJzZXI7XG4gICAgdmFyIGFyZyA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwib3JkZ3JvdXBcIik7XG4gICAgdmFyIGdyb3VwID0gYXJnLmJvZHk7XG4gICAgdmFyIG51bWJlciA9IFwiXCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyb3VwLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbm9kZSA9IGFzc2VydE5vZGVUeXBlKGdyb3VwW2ldLCBcInRleHRvcmRcIik7XG4gICAgICBudW1iZXIgKz0gbm9kZS50ZXh0O1xuICAgIH1cblxuICAgIHZhciBjb2RlID0gcGFyc2VJbnQobnVtYmVyKTtcblxuICAgIGlmIChpc05hTihjb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiXFxcXEBjaGFyIGhhcyBub24tbnVtZXJpYyBhcmd1bWVudCBcIiArIG51bWJlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwidGV4dG9yZFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICB0ZXh0OiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgfTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvY29sb3IuanNcblxuXG5cblxuXG5cblxudmFyIGNvbG9yX2h0bWxCdWlsZGVyID0gZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIGVsZW1lbnRzID0gYnVpbGRIVE1MX2J1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zLndpdGhDb2xvcihncm91cC5jb2xvciksIGZhbHNlKTsgLy8gXFxjb2xvciBpc24ndCBzdXBwb3NlZCB0byBhZmZlY3QgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnRzIGl0IGNvbnRhaW5zLlxuICAvLyBUbyBhY2NvbXBsaXNoIHRoaXMsIHdlIHdyYXAgdGhlIHJlc3VsdHMgaW4gYSBmcmFnbWVudCwgc28gdGhlIGlubmVyXG4gIC8vIGVsZW1lbnRzIHdpbGwgYmUgYWJsZSB0byBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIHRoZWlyIG5laWdoYm9ycy4gRm9yXG4gIC8vIGV4YW1wbGUsIGBcXGNvbG9ye3JlZH17MiArfSAzYCBoYXMgdGhlIHNhbWUgc3BhY2luZyBhcyBgMiArIDNgXG5cbiAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VGcmFnbWVudChlbGVtZW50cyk7XG59O1xuXG52YXIgY29sb3JfbWF0aG1sQnVpbGRlciA9IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIGlubmVyID0gYnVpbGRNYXRoTUxfYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMud2l0aENvbG9yKGdyb3VwLmNvbG9yKSk7XG4gIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3R5bGVcIiwgaW5uZXIpO1xuICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGhjb2xvclwiLCBncm91cC5jb2xvcik7XG4gIHJldHVybiBub2RlO1xufTtcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImNvbG9yXCIsXG4gIG5hbWVzOiBbXCJcXFxcdGV4dGNvbG9yXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZSxcbiAgICBncmVlZGluZXNzOiAzLFxuICAgIGFyZ1R5cGVzOiBbXCJjb2xvclwiLCBcIm9yaWdpbmFsXCJdXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICB2YXIgY29sb3IgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcImNvbG9yLXRva2VuXCIpLmNvbG9yO1xuICAgIHZhciBib2R5ID0gYXJnc1sxXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJjb2xvclwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBjb2xvcjogY29sb3IsXG4gICAgICBib2R5OiBkZWZpbmVGdW5jdGlvbl9vcmRhcmd1bWVudChib2R5KVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBjb2xvcl9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogY29sb3JfbWF0aG1sQnVpbGRlclxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiY29sb3JcIixcbiAgbmFtZXM6IFtcIlxcXFxjb2xvclwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgZ3JlZWRpbmVzczogMyxcbiAgICBhcmdUeXBlczogW1wiY29sb3JcIl1cbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmMiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmMi5wYXJzZXIsXG4gICAgICAgIGJyZWFrT25Ub2tlblRleHQgPSBfcmVmMi5icmVha09uVG9rZW5UZXh0O1xuICAgIHZhciBjb2xvciA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwiY29sb3ItdG9rZW5cIikuY29sb3I7IC8vIFNldCBtYWNybyBcXGN1cnJlbnRAY29sb3IgaW4gY3VycmVudCBuYW1lc3BhY2UgdG8gc3RvcmUgdGhlIGN1cnJlbnRcbiAgICAvLyBjb2xvciwgbWltaWNraW5nIHRoZSBiZWhhdmlvciBvZiBjb2xvci5zdHkuXG4gICAgLy8gVGhpcyBpcyBjdXJyZW50bHkgdXNlZCBqdXN0IHRvIGNvcnJlY3RseSBjb2xvciBhIFxccmlnaHRcbiAgICAvLyB0aGF0IGZvbGxvd3MgYSBcXGNvbG9yIGNvbW1hbmQuXG5cbiAgICBwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5zZXQoXCJcXFxcY3VycmVudEBjb2xvclwiLCBjb2xvcik7IC8vIFBhcnNlIG91dCB0aGUgaW1wbGljaXQgYm9keSB0aGF0IHNob3VsZCBiZSBjb2xvcmVkLlxuXG4gICAgdmFyIGJvZHkgPSBwYXJzZXIucGFyc2VFeHByZXNzaW9uKHRydWUsIGJyZWFrT25Ub2tlblRleHQpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImNvbG9yXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgIGJvZHk6IGJvZHlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogY29sb3JfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGNvbG9yX21hdGhtbEJ1aWxkZXJcbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2NyLmpzXG4vLyBSb3cgYnJlYWtzIHdpdGhpbiB0YWJ1bGFyIGVudmlyb25tZW50cywgYW5kIGxpbmUgYnJlYWtzIGF0IHRvcCBsZXZlbFxuXG5cblxuXG5cbiAvLyBcXFxcIGlzIGEgbWFjcm8gbWFwcGluZyB0byBlaXRoZXIgXFxjciBvciBcXG5ld2xpbmUuICBCZWNhdXNlIHRoZXkgaGF2ZSB0aGVcbi8vIHNhbWUgc2lnbmF0dXJlLCB3ZSBpbXBsZW1lbnQgdGhlbSBhcyBvbmUgbWVnYWZ1bmN0aW9uLCB3aXRoIG5ld1Jvd1xuLy8gaW5kaWNhdGluZyB3aGV0aGVyIHdlJ3JlIGluIHRoZSBcXGNyIGNhc2UsIGFuZCBuZXdMaW5lIGluZGljYXRpbmcgd2hldGhlclxuLy8gdG8gYnJlYWsgdGhlIGxpbmUgaW4gdGhlIFxcbmV3bGluZSBjYXNlLlxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiY3JcIixcbiAgbmFtZXM6IFtcIlxcXFxjclwiLCBcIlxcXFxuZXdsaW5lXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgbnVtT3B0aW9uYWxBcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJzaXplXCJdLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzLCBvcHRBcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWYuZnVuY05hbWU7XG4gICAgdmFyIHNpemUgPSBvcHRBcmdzWzBdO1xuICAgIHZhciBuZXdSb3cgPSBmdW5jTmFtZSA9PT0gXCJcXFxcY3JcIjtcbiAgICB2YXIgbmV3TGluZSA9IGZhbHNlO1xuXG4gICAgaWYgKCFuZXdSb3cpIHtcbiAgICAgIGlmIChwYXJzZXIuc2V0dGluZ3MuZGlzcGxheU1vZGUgJiYgcGFyc2VyLnNldHRpbmdzLnVzZVN0cmljdEJlaGF2aW9yKFwibmV3TGluZUluRGlzcGxheU1vZGVcIiwgXCJJbiBMYVRlWCwgXFxcXFxcXFwgb3IgXFxcXG5ld2xpbmUgXCIgKyBcImRvZXMgbm90aGluZyBpbiBkaXNwbGF5IG1vZGVcIikpIHtcbiAgICAgICAgbmV3TGluZSA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3TGluZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiY3JcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbmV3TGluZTogbmV3TGluZSxcbiAgICAgIG5ld1JvdzogbmV3Um93LFxuICAgICAgc2l6ZTogc2l6ZSAmJiBhc3NlcnROb2RlVHlwZShzaXplLCBcInNpemVcIikudmFsdWVcbiAgICB9O1xuICB9LFxuICAvLyBUaGUgZm9sbG93aW5nIGJ1aWxkZXJzIGFyZSBjYWxsZWQgb25seSBhdCB0aGUgdG9wIGxldmVsLFxuICAvLyBub3Qgd2l0aGluIHRhYnVsYXIvYXJyYXkgZW52aXJvbm1lbnRzLlxuICBodG1sQnVpbGRlcjogZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICBpZiAoZ3JvdXAubmV3Um93KSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJcXFxcY3IgdmFsaWQgb25seSB3aXRoaW4gYSB0YWJ1bGFyL2FycmF5IGVudmlyb25tZW50XCIpO1xuICAgIH1cblxuICAgIHZhciBzcGFuID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibXNwYWNlXCJdLCBbXSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoZ3JvdXAubmV3TGluZSkge1xuICAgICAgc3Bhbi5jbGFzc2VzLnB1c2goXCJuZXdsaW5lXCIpO1xuXG4gICAgICBpZiAoZ3JvdXAuc2l6ZSkge1xuICAgICAgICBzcGFuLnN0eWxlLm1hcmdpblRvcCA9IHVuaXRzX2NhbGN1bGF0ZVNpemUoZ3JvdXAuc2l6ZSwgb3B0aW9ucykgKyBcImVtXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNwYW47XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXNwYWNlXCIpO1xuXG4gICAgaWYgKGdyb3VwLm5ld0xpbmUpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibGluZWJyZWFrXCIsIFwibmV3bGluZVwiKTtcblxuICAgICAgaWYgKGdyb3VwLnNpemUpIHtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgdW5pdHNfY2FsY3VsYXRlU2l6ZShncm91cC5zaXplLCBvcHRpb25zKSArIFwiZW1cIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZGVsaW1pdGVyLmpzXG4vKipcbiAqIFRoaXMgZmlsZSBkZWFscyB3aXRoIGNyZWF0aW5nIGRlbGltaXRlcnMgb2YgdmFyaW91cyBzaXplcy4gVGhlIFRlWGJvb2tcbiAqIGRpc2N1c3NlcyB0aGVzZSByb3V0aW5lcyBvbiBwYWdlIDQ0MS00NDIsIGluIHRoZSBcIkFub3RoZXIgc3Vicm91dGluZSBzZXRzIGJveFxuICogeCB0byBhIHNwZWNpZmllZCB2YXJpYWJsZSBkZWxpbWl0ZXJcIiBwYXJhZ3JhcGguXG4gKlxuICogVGhlcmUgYXJlIHRocmVlIG1haW4gcm91dGluZXMgaGVyZS4gYG1ha2VTbWFsbERlbGltYCBtYWtlcyBhIGRlbGltaXRlciBpbiB0aGVcbiAqIG5vcm1hbCBmb250LCBidXQgaW4gZWl0aGVyIHRleHQsIHNjcmlwdCwgb3Igc2NyaXB0c2NyaXB0IHN0eWxlLlxuICogYG1ha2VMYXJnZURlbGltYCBtYWtlcyBhIGRlbGltaXRlciBpbiB0ZXh0c3R5bGUsIGJ1dCBpbiBvbmUgb2YgdGhlIFNpemUxLFxuICogU2l6ZTIsIFNpemUzLCBvciBTaXplNCBmb250cy4gYG1ha2VTdGFja2VkRGVsaW1gIG1ha2VzIGEgZGVsaW1pdGVyIG91dCBvZlxuICogc21hbGxlciBwaWVjZXMgdGhhdCBhcmUgc3RhY2tlZCBvbiB0b3Agb2Ygb25lIGFub3RoZXIuXG4gKlxuICogVGhlIGZ1bmN0aW9ucyB0YWtlIGEgcGFyYW1ldGVyIGBjZW50ZXJgLCB3aGljaCBkZXRlcm1pbmVzIGlmIHRoZSBkZWxpbWl0ZXJcbiAqIHNob3VsZCBiZSBjZW50ZXJlZCBhcm91bmQgdGhlIGF4aXMuXG4gKlxuICogVGhlbiwgdGhlcmUgYXJlIHRocmVlIGV4cG9zZWQgZnVuY3Rpb25zLiBgc2l6ZWREZWxpbWAgbWFrZXMgYSBkZWxpbWl0ZXIgaW5cbiAqIG9uZSBvZiB0aGUgZ2l2ZW4gc2l6ZXMuIFRoaXMgaXMgdXNlZCBmb3IgdGhpbmdzIGxpa2UgYFxcYmlnbGAuXG4gKiBgY3VzdG9tU2l6ZWREZWxpbWAgbWFrZXMgYSBkZWxpbWl0ZXIgd2l0aCBhIGdpdmVuIHRvdGFsIGhlaWdodCtkZXB0aC4gSXQgaXNcbiAqIGNhbGxlZCBpbiBwbGFjZXMgbGlrZSBgXFxzcXJ0YC4gYGxlZnRSaWdodERlbGltYCBtYWtlcyBhbiBhcHByb3ByaWF0ZVxuICogZGVsaW1pdGVyIHdoaWNoIHN1cnJvdW5kcyBhbiBleHByZXNzaW9uIG9mIGEgZ2l2ZW4gaGVpZ2h0IGFuIGRlcHRoLiBJdCBpc1xuICogdXNlZCBpbiBgXFxsZWZ0YCBhbmQgYFxccmlnaHRgLlxuICovXG5cblxuXG5cblxuXG5cblxuXG4vKipcbiAqIEdldCB0aGUgbWV0cmljcyBmb3IgYSBnaXZlbiBzeW1ib2wgYW5kIGZvbnQsIGFmdGVyIHRyYW5zZm9ybWF0aW9uIChpLmUuXG4gKiBhZnRlciBmb2xsb3dpbmcgcmVwbGFjZW1lbnQgZnJvbSBzeW1ib2xzLmpzKVxuICovXG52YXIgZGVsaW1pdGVyX2dldE1ldHJpY3MgPSBmdW5jdGlvbiBnZXRNZXRyaWNzKHN5bWJvbCwgZm9udCwgbW9kZSkge1xuICB2YXIgcmVwbGFjZSA9IHNyY19zeW1ib2xzLm1hdGhbc3ltYm9sXSAmJiBzcmNfc3ltYm9scy5tYXRoW3N5bWJvbF0ucmVwbGFjZTtcbiAgdmFyIG1ldHJpY3MgPSBnZXRDaGFyYWN0ZXJNZXRyaWNzKHJlcGxhY2UgfHwgc3ltYm9sLCBmb250LCBtb2RlKTtcblxuICBpZiAoIW1ldHJpY3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBzeW1ib2wgXCIgKyBzeW1ib2wgKyBcIiBhbmQgZm9udCBzaXplIFwiICsgZm9udCArIFwiLlwiKTtcbiAgfVxuXG4gIHJldHVybiBtZXRyaWNzO1xufTtcbi8qKlxuICogUHV0cyBhIGRlbGltaXRlciBzcGFuIGluIGEgZ2l2ZW4gc3R5bGUsIGFuZCBhZGRzIGFwcHJvcHJpYXRlIGhlaWdodCwgZGVwdGgsXG4gKiBhbmQgbWF4Rm9udFNpemVzLlxuICovXG5cblxudmFyIGRlbGltaXRlcl9zdHlsZVdyYXAgPSBmdW5jdGlvbiBzdHlsZVdyYXAoZGVsaW0sIHRvU3R5bGUsIG9wdGlvbnMsIGNsYXNzZXMpIHtcbiAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ0Jhc2VTdHlsZSh0b1N0eWxlKTtcbiAgdmFyIHNwYW4gPSBidWlsZENvbW1vbi5tYWtlU3BhbihjbGFzc2VzLmNvbmNhdChuZXdPcHRpb25zLnNpemluZ0NsYXNzZXMob3B0aW9ucykpLCBbZGVsaW1dLCBvcHRpb25zKTtcbiAgdmFyIGRlbGltU2l6ZU11bHRpcGxpZXIgPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgc3Bhbi5oZWlnaHQgKj0gZGVsaW1TaXplTXVsdGlwbGllcjtcbiAgc3Bhbi5kZXB0aCAqPSBkZWxpbVNpemVNdWx0aXBsaWVyO1xuICBzcGFuLm1heEZvbnRTaXplID0gbmV3T3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgcmV0dXJuIHNwYW47XG59O1xuXG52YXIgY2VudGVyU3BhbiA9IGZ1bmN0aW9uIGNlbnRlclNwYW4oc3Bhbiwgb3B0aW9ucywgc3R5bGUpIHtcbiAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ0Jhc2VTdHlsZShzdHlsZSk7XG4gIHZhciBzaGlmdCA9ICgxIC0gb3B0aW9ucy5zaXplTXVsdGlwbGllciAvIG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXIpICogb3B0aW9ucy5mb250TWV0cmljcygpLmF4aXNIZWlnaHQ7XG4gIHNwYW4uY2xhc3Nlcy5wdXNoKFwiZGVsaW1jZW50ZXJcIik7XG4gIHNwYW4uc3R5bGUudG9wID0gc2hpZnQgKyBcImVtXCI7XG4gIHNwYW4uaGVpZ2h0IC09IHNoaWZ0O1xuICBzcGFuLmRlcHRoICs9IHNoaWZ0O1xufTtcbi8qKlxuICogTWFrZXMgYSBzbWFsbCBkZWxpbWl0ZXIuIFRoaXMgaXMgYSBkZWxpbWl0ZXIgdGhhdCBjb21lcyBpbiB0aGUgTWFpbi1SZWd1bGFyXG4gKiBmb250LCBidXQgaXMgcmVzdHlsZWQgdG8gZWl0aGVyIGJlIGluIHRleHRzdHlsZSwgc2NyaXB0c3R5bGUsIG9yXG4gKiBzY3JpcHRzY3JpcHRzdHlsZS5cbiAqL1xuXG5cbnZhciBkZWxpbWl0ZXJfbWFrZVNtYWxsRGVsaW0gPSBmdW5jdGlvbiBtYWtlU21hbGxEZWxpbShkZWxpbSwgc3R5bGUsIGNlbnRlciwgb3B0aW9ucywgbW9kZSwgY2xhc3Nlcykge1xuICB2YXIgdGV4dCA9IGJ1aWxkQ29tbW9uLm1ha2VTeW1ib2woZGVsaW0sIFwiTWFpbi1SZWd1bGFyXCIsIG1vZGUsIG9wdGlvbnMpO1xuICB2YXIgc3BhbiA9IGRlbGltaXRlcl9zdHlsZVdyYXAodGV4dCwgc3R5bGUsIG9wdGlvbnMsIGNsYXNzZXMpO1xuXG4gIGlmIChjZW50ZXIpIHtcbiAgICBjZW50ZXJTcGFuKHNwYW4sIG9wdGlvbnMsIHN0eWxlKTtcbiAgfVxuXG4gIHJldHVybiBzcGFuO1xufTtcbi8qKlxuICogQnVpbGRzIGEgc3ltYm9sIGluIHRoZSBnaXZlbiBmb250IHNpemUgKG5vdGUgc2l6ZSBpcyBhbiBpbnRlZ2VyKVxuICovXG5cblxudmFyIGRlbGltaXRlcl9tYXRocm1TaXplID0gZnVuY3Rpb24gbWF0aHJtU2l6ZSh2YWx1ZSwgc2l6ZSwgbW9kZSwgb3B0aW9ucykge1xuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVN5bWJvbCh2YWx1ZSwgXCJTaXplXCIgKyBzaXplICsgXCItUmVndWxhclwiLCBtb2RlLCBvcHRpb25zKTtcbn07XG4vKipcbiAqIE1ha2VzIGEgbGFyZ2UgZGVsaW1pdGVyLiBUaGlzIGlzIGEgZGVsaW1pdGVyIHRoYXQgY29tZXMgaW4gdGhlIFNpemUxLCBTaXplMixcbiAqIFNpemUzLCBvciBTaXplNCBmb250cy4gSXQgaXMgYWx3YXlzIHJlbmRlcmVkIGluIHRleHRzdHlsZS5cbiAqL1xuXG5cbnZhciBkZWxpbWl0ZXJfbWFrZUxhcmdlRGVsaW0gPSBmdW5jdGlvbiBtYWtlTGFyZ2VEZWxpbShkZWxpbSwgc2l6ZSwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKSB7XG4gIHZhciBpbm5lciA9IGRlbGltaXRlcl9tYXRocm1TaXplKGRlbGltLCBzaXplLCBtb2RlLCBvcHRpb25zKTtcbiAgdmFyIHNwYW4gPSBkZWxpbWl0ZXJfc3R5bGVXcmFwKGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImRlbGltc2l6aW5nXCIsIFwic2l6ZVwiICsgc2l6ZV0sIFtpbm5lcl0sIG9wdGlvbnMpLCBzcmNfU3R5bGUuVEVYVCwgb3B0aW9ucywgY2xhc3Nlcyk7XG5cbiAgaWYgKGNlbnRlcikge1xuICAgIGNlbnRlclNwYW4oc3Bhbiwgb3B0aW9ucywgc3JjX1N0eWxlLlRFWFQpO1xuICB9XG5cbiAgcmV0dXJuIHNwYW47XG59O1xuLyoqXG4gKiBNYWtlIGFuIGlubmVyIHNwYW4gd2l0aCB0aGUgZ2l2ZW4gb2Zmc2V0IGFuZCBpbiB0aGUgZ2l2ZW4gZm9udC4gVGhpcyBpcyB1c2VkXG4gKiBpbiBgbWFrZVN0YWNrZWREZWxpbWAgdG8gbWFrZSB0aGUgc3RhY2tpbmcgcGllY2VzIGZvciB0aGUgZGVsaW1pdGVyLlxuICovXG5cblxudmFyIGRlbGltaXRlcl9tYWtlSW5uZXIgPSBmdW5jdGlvbiBtYWtlSW5uZXIoc3ltYm9sLCBmb250LCBtb2RlKSB7XG4gIHZhciBzaXplQ2xhc3M7IC8vIEFwcGx5IHRoZSBjb3JyZWN0IENTUyBjbGFzcyB0byBjaG9vc2UgdGhlIHJpZ2h0IGZvbnQuXG5cbiAgaWYgKGZvbnQgPT09IFwiU2l6ZTEtUmVndWxhclwiKSB7XG4gICAgc2l6ZUNsYXNzID0gXCJkZWxpbS1zaXplMVwiO1xuICB9IGVsc2VcbiAgICAvKiBpZiAoZm9udCA9PT0gXCJTaXplNC1SZWd1bGFyXCIpICovXG4gICAge1xuICAgICAgc2l6ZUNsYXNzID0gXCJkZWxpbS1zaXplNFwiO1xuICAgIH1cblxuICB2YXIgaW5uZXIgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJkZWxpbXNpemluZ2lubmVyXCIsIHNpemVDbGFzc10sIFtidWlsZENvbW1vbi5tYWtlU3BhbihbXSwgW2J1aWxkQ29tbW9uLm1ha2VTeW1ib2woc3ltYm9sLCBmb250LCBtb2RlKV0pXSk7IC8vIFNpbmNlIHRoaXMgd2lsbCBiZSBwYXNzZWQgaW50byBgbWFrZVZMaXN0YCBpbiB0aGUgZW5kLCB3cmFwIHRoZSBlbGVtZW50XG4gIC8vIGluIHRoZSBhcHByb3ByaWF0ZSB0YWcgdGhhdCBWTGlzdCB1c2VzLlxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJlbGVtXCIsXG4gICAgZWxlbTogaW5uZXJcbiAgfTtcbn07IC8vIEhlbHBlciBmb3IgbWFrZVN0YWNrZWREZWxpbVxuXG5cbnZhciBsYXAgPSB7XG4gIHR5cGU6IFwia2VyblwiLFxuICBzaXplOiAtMC4wMDVcbn07XG4vKipcbiAqIE1ha2UgYSBzdGFja2VkIGRlbGltaXRlciBvdXQgb2YgYSBnaXZlbiBkZWxpbWl0ZXIsIHdpdGggdGhlIHRvdGFsIGhlaWdodCBhdFxuICogbGVhc3QgYGhlaWdodFRvdGFsYC4gVGhpcyByb3V0aW5lIGlzIG1lbnRpb25lZCBvbiBwYWdlIDQ0MiBvZiB0aGUgVGVYYm9vay5cbiAqL1xuXG52YXIgZGVsaW1pdGVyX21ha2VTdGFja2VkRGVsaW0gPSBmdW5jdGlvbiBtYWtlU3RhY2tlZERlbGltKGRlbGltLCBoZWlnaHRUb3RhbCwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKSB7XG4gIC8vIFRoZXJlIGFyZSBmb3VyIHBhcnRzLCB0aGUgdG9wLCBhbiBvcHRpb25hbCBtaWRkbGUsIGEgcmVwZWF0ZWQgcGFydCwgYW5kIGFcbiAgLy8gYm90dG9tLlxuICB2YXIgdG9wO1xuICB2YXIgbWlkZGxlO1xuICB2YXIgcmVwZWF0O1xuICB2YXIgYm90dG9tO1xuICB0b3AgPSByZXBlYXQgPSBib3R0b20gPSBkZWxpbTtcbiAgbWlkZGxlID0gbnVsbDsgLy8gQWxzbyBrZWVwIHRyYWNrIG9mIHdoYXQgZm9udCB0aGUgZGVsaW1pdGVycyBhcmUgaW5cblxuICB2YXIgZm9udCA9IFwiU2l6ZTEtUmVndWxhclwiOyAvLyBXZSBzZXQgdGhlIHBhcnRzIGFuZCBmb250IGJhc2VkIG9uIHRoZSBzeW1ib2wuIE5vdGUgdGhhdCB3ZSB1c2VcbiAgLy8gJ1xcdTIzZDAnIGluc3RlYWQgb2YgJ3wnIGFuZCAnXFx1MjAxNicgaW5zdGVhZCBvZiAnXFxcXHwnIGZvciB0aGVcbiAgLy8gcmVwZWF0cyBvZiB0aGUgYXJyb3dzXG5cbiAgaWYgKGRlbGltID09PSBcIlxcXFx1cGFycm93XCIpIHtcbiAgICByZXBlYXQgPSBib3R0b20gPSBcIlxcdTIzRDBcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxcVXBhcnJvd1wiKSB7XG4gICAgcmVwZWF0ID0gYm90dG9tID0gXCJcXHUyMDE2XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXGRvd25hcnJvd1wiKSB7XG4gICAgdG9wID0gcmVwZWF0ID0gXCJcXHUyM0QwXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXERvd25hcnJvd1wiKSB7XG4gICAgdG9wID0gcmVwZWF0ID0gXCJcXHUyMDE2XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXHVwZG93bmFycm93XCIpIHtcbiAgICB0b3AgPSBcIlxcXFx1cGFycm93XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM0QwXCI7XG4gICAgYm90dG9tID0gXCJcXFxcZG93bmFycm93XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXFVwZG93bmFycm93XCIpIHtcbiAgICB0b3AgPSBcIlxcXFxVcGFycm93XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyMDE2XCI7XG4gICAgYm90dG9tID0gXCJcXFxcRG93bmFycm93XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiW1wiIHx8IGRlbGltID09PSBcIlxcXFxsYnJhY2tcIikge1xuICAgIHRvcCA9IFwiXFx1MjNBMVwiO1xuICAgIHJlcGVhdCA9IFwiXFx1MjNBMlwiO1xuICAgIGJvdHRvbSA9IFwiXFx1MjNBM1wiO1xuICAgIGZvbnQgPSBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJdXCIgfHwgZGVsaW0gPT09IFwiXFxcXHJicmFja1wiKSB7XG4gICAgdG9wID0gXCJcXHUyM0E0XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM0E1XCI7XG4gICAgYm90dG9tID0gXCJcXHUyM0E2XCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxsZmxvb3JcIiB8fCBkZWxpbSA9PT0gXCJcXHUyMzBBXCIpIHtcbiAgICByZXBlYXQgPSB0b3AgPSBcIlxcdTIzQTJcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzQTNcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXGxjZWlsXCIgfHwgZGVsaW0gPT09IFwiXFx1MjMwOFwiKSB7XG4gICAgdG9wID0gXCJcXHUyM0ExXCI7XG4gICAgcmVwZWF0ID0gYm90dG9tID0gXCJcXHUyM0EyXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxyZmxvb3JcIiB8fCBkZWxpbSA9PT0gXCJcXHUyMzBCXCIpIHtcbiAgICByZXBlYXQgPSB0b3AgPSBcIlxcdTIzQTVcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzQTZcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXHJjZWlsXCIgfHwgZGVsaW0gPT09IFwiXFx1MjMwOVwiKSB7XG4gICAgdG9wID0gXCJcXHUyM0E0XCI7XG4gICAgcmVwZWF0ID0gYm90dG9tID0gXCJcXHUyM0E1XCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIihcIiB8fCBkZWxpbSA9PT0gXCJcXFxcbHBhcmVuXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzOUJcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzOUNcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzOURcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiKVwiIHx8IGRlbGltID09PSBcIlxcXFxycGFyZW5cIikge1xuICAgIHRvcCA9IFwiXFx1MjM5RVwiO1xuICAgIHJlcGVhdCA9IFwiXFx1MjM5RlwiO1xuICAgIGJvdHRvbSA9IFwiXFx1MjNBMFwiO1xuICAgIGZvbnQgPSBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxce1wiIHx8IGRlbGltID09PSBcIlxcXFxsYnJhY2VcIikge1xuICAgIHRvcCA9IFwiXFx1MjNBN1wiO1xuICAgIG1pZGRsZSA9IFwiXFx1MjNBOFwiO1xuICAgIGJvdHRvbSA9IFwiXFx1MjNBOVwiO1xuICAgIHJlcGVhdCA9IFwiXFx1MjNBQVwiO1xuICAgIGZvbnQgPSBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxcfVwiIHx8IGRlbGltID09PSBcIlxcXFxyYnJhY2VcIikge1xuICAgIHRvcCA9IFwiXFx1MjNBQlwiO1xuICAgIG1pZGRsZSA9IFwiXFx1MjNBQ1wiO1xuICAgIGJvdHRvbSA9IFwiXFx1MjNBRFwiO1xuICAgIHJlcGVhdCA9IFwiXFx1MjNBQVwiO1xuICAgIGZvbnQgPSBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxcbGdyb3VwXCIgfHwgZGVsaW0gPT09IFwiXFx1MjdFRVwiKSB7XG4gICAgdG9wID0gXCJcXHUyM0E3XCI7XG4gICAgYm90dG9tID0gXCJcXHUyM0E5XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM0FBXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxyZ3JvdXBcIiB8fCBkZWxpbSA9PT0gXCJcXHUyN0VGXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzQUJcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzQURcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzQUFcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXGxtb3VzdGFjaGVcIiB8fCBkZWxpbSA9PT0gXCJcXHUyM0IwXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzQTdcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzQURcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzQUFcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXHJtb3VzdGFjaGVcIiB8fCBkZWxpbSA9PT0gXCJcXHUyM0IxXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzQUJcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzQTlcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzQUFcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gLy8gR2V0IHRoZSBtZXRyaWNzIG9mIHRoZSBmb3VyIHNlY3Rpb25zXG5cblxuICB2YXIgdG9wTWV0cmljcyA9IGRlbGltaXRlcl9nZXRNZXRyaWNzKHRvcCwgZm9udCwgbW9kZSk7XG4gIHZhciB0b3BIZWlnaHRUb3RhbCA9IHRvcE1ldHJpY3MuaGVpZ2h0ICsgdG9wTWV0cmljcy5kZXB0aDtcbiAgdmFyIHJlcGVhdE1ldHJpY3MgPSBkZWxpbWl0ZXJfZ2V0TWV0cmljcyhyZXBlYXQsIGZvbnQsIG1vZGUpO1xuICB2YXIgcmVwZWF0SGVpZ2h0VG90YWwgPSByZXBlYXRNZXRyaWNzLmhlaWdodCArIHJlcGVhdE1ldHJpY3MuZGVwdGg7XG4gIHZhciBib3R0b21NZXRyaWNzID0gZGVsaW1pdGVyX2dldE1ldHJpY3MoYm90dG9tLCBmb250LCBtb2RlKTtcbiAgdmFyIGJvdHRvbUhlaWdodFRvdGFsID0gYm90dG9tTWV0cmljcy5oZWlnaHQgKyBib3R0b21NZXRyaWNzLmRlcHRoO1xuICB2YXIgbWlkZGxlSGVpZ2h0VG90YWwgPSAwO1xuICB2YXIgbWlkZGxlRmFjdG9yID0gMTtcblxuICBpZiAobWlkZGxlICE9PSBudWxsKSB7XG4gICAgdmFyIG1pZGRsZU1ldHJpY3MgPSBkZWxpbWl0ZXJfZ2V0TWV0cmljcyhtaWRkbGUsIGZvbnQsIG1vZGUpO1xuICAgIG1pZGRsZUhlaWdodFRvdGFsID0gbWlkZGxlTWV0cmljcy5oZWlnaHQgKyBtaWRkbGVNZXRyaWNzLmRlcHRoO1xuICAgIG1pZGRsZUZhY3RvciA9IDI7IC8vIHJlcGVhdCBzeW1tZXRyaWNhbGx5IGFib3ZlIGFuZCBiZWxvdyBtaWRkbGVcbiAgfSAvLyBDYWxjdWF0ZSB0aGUgbWluaW1hbCBoZWlnaHQgdGhhdCB0aGUgZGVsaW1pdGVyIGNhbiBoYXZlLlxuICAvLyBJdCBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiB0aGUgdG9wLCBib3R0b20sIGFuZCBvcHRpb25hbCBtaWRkbGUgY29tYmluZWQuXG5cblxuICB2YXIgbWluSGVpZ2h0ID0gdG9wSGVpZ2h0VG90YWwgKyBib3R0b21IZWlnaHRUb3RhbCArIG1pZGRsZUhlaWdodFRvdGFsOyAvLyBDb21wdXRlIHRoZSBudW1iZXIgb2YgY29waWVzIG9mIHRoZSByZXBlYXQgc3ltYm9sIHdlIHdpbGwgbmVlZFxuXG4gIHZhciByZXBlYXRDb3VudCA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCgoaGVpZ2h0VG90YWwgLSBtaW5IZWlnaHQpIC8gKG1pZGRsZUZhY3RvciAqIHJlcGVhdEhlaWdodFRvdGFsKSkpOyAvLyBDb21wdXRlIHRoZSB0b3RhbCBoZWlnaHQgb2YgdGhlIGRlbGltaXRlciBpbmNsdWRpbmcgYWxsIHRoZSBzeW1ib2xzXG5cbiAgdmFyIHJlYWxIZWlnaHRUb3RhbCA9IG1pbkhlaWdodCArIHJlcGVhdENvdW50ICogbWlkZGxlRmFjdG9yICogcmVwZWF0SGVpZ2h0VG90YWw7IC8vIFRoZSBjZW50ZXIgb2YgdGhlIGRlbGltaXRlciBpcyBwbGFjZWQgYXQgdGhlIGNlbnRlciBvZiB0aGUgYXhpcy4gTm90ZVxuICAvLyB0aGF0IGluIHRoaXMgY29udGV4dCwgXCJjZW50ZXJcIiBtZWFucyB0aGF0IHRoZSBkZWxpbWl0ZXIgc2hvdWxkIGJlXG4gIC8vIGNlbnRlcmVkIGFyb3VuZCB0aGUgYXhpcyBpbiB0aGUgY3VycmVudCBzdHlsZSwgd2hpbGUgbm9ybWFsbHkgaXQgaXNcbiAgLy8gY2VudGVyZWQgYXJvdW5kIHRoZSBheGlzIGluIHRleHRzdHlsZS5cblxuICB2YXIgYXhpc0hlaWdodCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O1xuXG4gIGlmIChjZW50ZXIpIHtcbiAgICBheGlzSGVpZ2h0ICo9IG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gIH0gLy8gQ2FsY3VsYXRlIHRoZSBkZXB0aFxuXG5cbiAgdmFyIGRlcHRoID0gcmVhbEhlaWdodFRvdGFsIC8gMiAtIGF4aXNIZWlnaHQ7IC8vIFRoaXMgZnVuY3Rpb24gZGlmZmVycyBmcm9tIHRoZSBUZVggcHJvY2VkdXJlIGluIG9uZSB3YXkuXG4gIC8vIFdlIHNoaWZ0IGVhY2ggcmVwZWF0IGVsZW1lbnQgZG93bndhcmRzIGJ5IDAuMDA1ZW0sIHRvIHByZXZlbnQgYSBnYXBcbiAgLy8gZHVlIHRvIGJyb3dzZXIgZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3IuXG4gIC8vIFRoZW4sIGF0IHRoZSBsYXN0IGVsZW1lbnQtdG8gZWxlbWVudCBqb2ludCwgd2UgYWRkIG9uZSBleHRyYSByZXBlYXRcbiAgLy8gZWxlbWVudCB0byBjb3ZlciB0aGUgZ2FwIGNyZWF0ZWQgYnkgdGhlIHNoaWZ0cy5cbiAgLy8gRmluZCB0aGUgc2hpZnQgbmVlZGVkIHRvIGFsaWduIHRoZSB1cHBlciBlbmQgb2YgdGhlIGV4dHJhIGVsZW1lbnQgYXQgYSBwb2ludFxuICAvLyAwLjAwNWVtIGFib3ZlIHRoZSBsb3dlciBlbmQgb2YgdGhlIHRvcCBlbGVtZW50LlxuXG4gIHZhciBzaGlmdE9mRXh0cmFFbGVtZW50ID0gKHJlcGVhdENvdW50ICsgMSkgKiAwLjAwNSAtIHJlcGVhdEhlaWdodFRvdGFsOyAvLyBOb3csIHdlIHN0YXJ0IGJ1aWxkaW5nIHRoZSBwaWVjZXMgdGhhdCB3aWxsIGdvIGludG8gdGhlIHZsaXN0XG4gIC8vIEtlZXAgYSBsaXN0IG9mIHRoZSBpbm5lciBwaWVjZXNcblxuICB2YXIgaW5uZXJzID0gW107IC8vIEFkZCB0aGUgYm90dG9tIHN5bWJvbFxuXG4gIGlubmVycy5wdXNoKGRlbGltaXRlcl9tYWtlSW5uZXIoYm90dG9tLCBmb250LCBtb2RlKSk7XG5cbiAgaWYgKG1pZGRsZSA9PT0gbnVsbCkge1xuICAgIC8vIEFkZCB0aGF0IG1hbnkgc3ltYm9sc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVwZWF0Q291bnQ7IGkrKykge1xuICAgICAgaW5uZXJzLnB1c2gobGFwKTsgLy8gb3ZlcmxhcFxuXG4gICAgICBpbm5lcnMucHVzaChkZWxpbWl0ZXJfbWFrZUlubmVyKHJlcGVhdCwgZm9udCwgbW9kZSkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBXaGVuIHRoZXJlIGlzIGEgbWlkZGxlIGJpdCwgd2UgbmVlZCB0aGUgbWlkZGxlIHBhcnQgYW5kIHR3byByZXBlYXRlZFxuICAgIC8vIHNlY3Rpb25zXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHJlcGVhdENvdW50OyBfaSsrKSB7XG4gICAgICBpbm5lcnMucHVzaChsYXApO1xuICAgICAgaW5uZXJzLnB1c2goZGVsaW1pdGVyX21ha2VJbm5lcihyZXBlYXQsIGZvbnQsIG1vZGUpKTtcbiAgICB9IC8vIEluc2VydCBvbmUgZXh0cmEgcmVwZWF0IGVsZW1lbnQuXG5cblxuICAgIGlubmVycy5wdXNoKHtcbiAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgc2l6ZTogc2hpZnRPZkV4dHJhRWxlbWVudFxuICAgIH0pO1xuICAgIGlubmVycy5wdXNoKGRlbGltaXRlcl9tYWtlSW5uZXIocmVwZWF0LCBmb250LCBtb2RlKSk7XG4gICAgaW5uZXJzLnB1c2gobGFwKTsgLy8gTm93IGluc2VydCB0aGUgbWlkZGxlIG9mIHRoZSBicmFjZS5cblxuICAgIGlubmVycy5wdXNoKGRlbGltaXRlcl9tYWtlSW5uZXIobWlkZGxlLCBmb250LCBtb2RlKSk7XG5cbiAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCByZXBlYXRDb3VudDsgX2kyKyspIHtcbiAgICAgIGlubmVycy5wdXNoKGxhcCk7XG4gICAgICBpbm5lcnMucHVzaChkZWxpbWl0ZXJfbWFrZUlubmVyKHJlcGVhdCwgZm9udCwgbW9kZSkpO1xuICAgIH1cbiAgfSAvLyBUbyBjb3ZlciB0aGUgZ2FwIGNyZWF0ZSBieSB0aGUgb3ZlcmxhcHMsIGluc2VydCBvbmUgbW9yZSByZXBlYXQgZWxlbWVudCxcbiAgLy8gYXQgYSBwb3NpdGlvbiB0aGF0IGp1dHMgMC4wMDUgYWJvdmUgdGhlIGJvdHRvbSBvZiB0aGUgdG9wIGVsZW1lbnQuXG5cblxuICBpbm5lcnMucHVzaCh7XG4gICAgdHlwZTogXCJrZXJuXCIsXG4gICAgc2l6ZTogc2hpZnRPZkV4dHJhRWxlbWVudFxuICB9KTtcbiAgaW5uZXJzLnB1c2goZGVsaW1pdGVyX21ha2VJbm5lcihyZXBlYXQsIGZvbnQsIG1vZGUpKTtcbiAgaW5uZXJzLnB1c2gobGFwKTsgLy8gQWRkIHRoZSB0b3Agc3ltYm9sXG5cbiAgaW5uZXJzLnB1c2goZGVsaW1pdGVyX21ha2VJbm5lcih0b3AsIGZvbnQsIG1vZGUpKTsgLy8gRmluYWxseSwgYnVpbGQgdGhlIHZsaXN0XG5cbiAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ0Jhc2VTdHlsZShzcmNfU3R5bGUuVEVYVCk7XG4gIHZhciBpbm5lciA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgcG9zaXRpb25UeXBlOiBcImJvdHRvbVwiLFxuICAgIHBvc2l0aW9uRGF0YTogZGVwdGgsXG4gICAgY2hpbGRyZW46IGlubmVyc1xuICB9LCBuZXdPcHRpb25zKTtcbiAgcmV0dXJuIGRlbGltaXRlcl9zdHlsZVdyYXAoYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiZGVsaW1zaXppbmdcIiwgXCJtdWx0XCJdLCBbaW5uZXJdLCBuZXdPcHRpb25zKSwgc3JjX1N0eWxlLlRFWFQsIG9wdGlvbnMsIGNsYXNzZXMpO1xufTsgLy8gQWxsIHN1cmRzIGhhdmUgMC4wOGVtIHBhZGRpbmcgYWJvdmUgdGhlIHZpbmljdWx1bSBpbnNpZGUgdGhlIFNWRy5cbi8vIFRoYXQga2VlcHMgYnJvd3NlciBzcGFuIGhlaWdodCByb3VuZGluZyBlcnJvciBmcm9tIHBpbmNoaW5nIHRoZSBsaW5lLlxuXG5cbnZhciB2YlBhZCA9IDgwOyAvLyBwYWRkaW5nIGFib3ZlIHRoZSBzdXJkLCBtZWFzdXJlZCBpbnNpZGUgdGhlIHZpZXdCb3guXG5cbnZhciBlbVBhZCA9IDAuMDg7IC8vIHBhZGRpbmcsIGluIGVtcywgbWVhc3VyZWQgaW4gdGhlIGRvY3VtZW50LlxuXG52YXIgZGVsaW1pdGVyX3NxcnRTdmcgPSBmdW5jdGlvbiBzcXJ0U3ZnKHNxcnROYW1lLCBoZWlnaHQsIHZpZXdCb3hIZWlnaHQsIGV4dHJhVmluaWN1bHVtLCBvcHRpb25zKSB7XG4gIHZhciBwYXRoID0gc3FydFBhdGgoc3FydE5hbWUsIGV4dHJhVmluaWN1bHVtLCB2aWV3Qm94SGVpZ2h0KTtcbiAgdmFyIHBhdGhOb2RlID0gbmV3IGRvbVRyZWVfUGF0aE5vZGUoc3FydE5hbWUsIHBhdGgpO1xuICB2YXIgc3ZnID0gbmV3IFN2Z05vZGUoW3BhdGhOb2RlXSwge1xuICAgIC8vIE5vdGU6IDEwMDA6MSByYXRpbyBvZiB2aWV3Qm94IHRvIGRvY3VtZW50IGVtIHdpZHRoLlxuICAgIFwid2lkdGhcIjogXCI0MDBlbVwiLFxuICAgIFwiaGVpZ2h0XCI6IGhlaWdodCArIFwiZW1cIixcbiAgICBcInZpZXdCb3hcIjogXCIwIDAgNDAwMDAwIFwiICsgdmlld0JveEhlaWdodCxcbiAgICBcInByZXNlcnZlQXNwZWN0UmF0aW9cIjogXCJ4TWluWU1pbiBzbGljZVwiXG4gIH0pO1xuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW1wiaGlkZS10YWlsXCJdLCBbc3ZnXSwgb3B0aW9ucyk7XG59O1xuLyoqXG4gKiBNYWtlIGEgc3FydCBpbWFnZSBvZiB0aGUgZ2l2ZW4gaGVpZ2h0LFxuICovXG5cblxudmFyIG1ha2VTcXJ0SW1hZ2UgPSBmdW5jdGlvbiBtYWtlU3FydEltYWdlKGhlaWdodCwgb3B0aW9ucykge1xuICAvLyBEZWZpbmUgYSBuZXdPcHRpb25zIHRoYXQgcmVtb3ZlcyB0aGUgZWZmZWN0IG9mIHNpemUgY2hhbmdlcyBzdWNoIGFzIFxcSHVnZS5cbiAgLy8gV2UgZG9uJ3QgcGljayBkaWZmZXJlbnQgYSBoZWlnaHQgc3VyZCBmb3IgXFxIdWdlLiBGb3IgaXQsIHdlIHNjYWxlIHVwLlxuICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nQmFzZVNpemluZygpOyAvLyBQaWNrIHRoZSBkZXNpcmVkIHN1cmQgZ2x5cGggZnJvbSBhIHNlcXVlbmNlIG9mIHN1cmRzLlxuXG4gIHZhciBkZWxpbSA9IHRyYXZlcnNlU2VxdWVuY2UoXCJcXFxcc3VyZFwiLCBoZWlnaHQgKiBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyLCBzdGFja0xhcmdlRGVsaW1pdGVyU2VxdWVuY2UsIG5ld09wdGlvbnMpO1xuICB2YXIgc2l6ZU11bHRpcGxpZXIgPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyOyAvLyBkZWZhdWx0XG4gIC8vIFRoZSBzdGFuZGFyZCBzcXJ0IFNWR3MgZWFjaCBoYXZlIGEgMC4wNGVtIHRoaWNrIHZpbmljdWx1bS5cbiAgLy8gSWYgU2V0dGluZ3MubWluUnVsZVRoaWNrbmVzcyBpcyBsYXJnZXIgdGhhbiB0aGF0LCB3ZSBhZGQgZXh0cmFWaW5pY3VsdW0uXG5cbiAgdmFyIGV4dHJhVmluaWN1bHVtID0gTWF0aC5tYXgoMCwgb3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzIC0gb3B0aW9ucy5mb250TWV0cmljcygpLnNxcnRSdWxlVGhpY2tuZXNzKTsgLy8gQ3JlYXRlIGEgc3BhbiBjb250YWluaW5nIGFuIFNWRyBpbWFnZSBvZiBhIHNxcnQgc3ltYm9sLlxuXG4gIHZhciBzcGFuO1xuICB2YXIgc3BhbkhlaWdodCA9IDA7XG4gIHZhciB0ZXhIZWlnaHQgPSAwO1xuICB2YXIgdmlld0JveEhlaWdodCA9IDA7XG4gIHZhciBhZHZhbmNlV2lkdGg7IC8vIFdlIGNyZWF0ZSB2aWV3Qm94ZXMgd2l0aCA4MCB1bml0cyBvZiBcInBhZGRpbmdcIiBhYm92ZSBlYWNoIHN1cmQuXG4gIC8vIFRoZW4gYnJvd3NlciByb3VuZGluZyBlcnJvciBvbiB0aGUgcGFyZW50IHNwYW4gaGVpZ2h0IHdpbGwgbm90XG4gIC8vIGVuY3JvYWNoIG9uIHRoZSBpbmsgb2YgdGhlIHZpbmljdWx1bS4gQnV0IHRoYXQgcGFkZGluZyBpcyBub3RcbiAgLy8gaW5jbHVkZWQgaW4gdGhlIFRlWC1saWtlIGBoZWlnaHRgIHVzZWQgZm9yIGNhbGN1bGF0aW9uIG9mXG4gIC8vIHZlcnRpY2FsIGFsaWdubWVudC4gU28gdGV4SGVpZ2h0ID0gc3Bhbi5oZWlnaHQgPCBzcGFuLnN0eWxlLmhlaWdodC5cblxuICBpZiAoZGVsaW0udHlwZSA9PT0gXCJzbWFsbFwiKSB7XG4gICAgLy8gR2V0IGFuIFNWRyB0aGF0IGlzIGRlcml2ZWQgZnJvbSBnbHlwaCBVKzIyMUEgaW4gZm9udCBLYVRlWC1NYWluLlxuICAgIC8vIDEwMDAgdW5pdCBub3JtYWwgZ2x5cGggaGVpZ2h0LlxuICAgIHZpZXdCb3hIZWlnaHQgPSAxMDAwICsgMTAwMCAqIGV4dHJhVmluaWN1bHVtICsgdmJQYWQ7XG5cbiAgICBpZiAoaGVpZ2h0IDwgMS4wKSB7XG4gICAgICBzaXplTXVsdGlwbGllciA9IDEuMDsgLy8gbWltaWMgYSBcXHRleHRmb250IHJhZGljYWxcbiAgICB9IGVsc2UgaWYgKGhlaWdodCA8IDEuNCkge1xuICAgICAgc2l6ZU11bHRpcGxpZXIgPSAwLjc7IC8vIG1pbWljIGEgXFxzY3JpcHRmb250IHJhZGljYWxcbiAgICB9XG5cbiAgICBzcGFuSGVpZ2h0ID0gKDEuMCArIGV4dHJhVmluaWN1bHVtICsgZW1QYWQpIC8gc2l6ZU11bHRpcGxpZXI7XG4gICAgdGV4SGVpZ2h0ID0gKDEuMDAgKyBleHRyYVZpbmljdWx1bSkgLyBzaXplTXVsdGlwbGllcjtcbiAgICBzcGFuID0gZGVsaW1pdGVyX3NxcnRTdmcoXCJzcXJ0TWFpblwiLCBzcGFuSGVpZ2h0LCB2aWV3Qm94SGVpZ2h0LCBleHRyYVZpbmljdWx1bSwgb3B0aW9ucyk7XG4gICAgc3Bhbi5zdHlsZS5taW5XaWR0aCA9IFwiMC44NTNlbVwiO1xuICAgIGFkdmFuY2VXaWR0aCA9IDAuODMzIC8gc2l6ZU11bHRpcGxpZXI7IC8vIGZyb20gdGhlIGZvbnQuXG4gIH0gZWxzZSBpZiAoZGVsaW0udHlwZSA9PT0gXCJsYXJnZVwiKSB7XG4gICAgLy8gVGhlc2UgU1ZHcyBjb21lIGZyb20gZm9udHM6IEthVGVYX1NpemUxLCBfU2l6ZTIsIGV0Yy5cbiAgICB2aWV3Qm94SGVpZ2h0ID0gKDEwMDAgKyB2YlBhZCkgKiBzaXplVG9NYXhIZWlnaHRbZGVsaW0uc2l6ZV07XG4gICAgdGV4SGVpZ2h0ID0gKHNpemVUb01heEhlaWdodFtkZWxpbS5zaXplXSArIGV4dHJhVmluaWN1bHVtKSAvIHNpemVNdWx0aXBsaWVyO1xuICAgIHNwYW5IZWlnaHQgPSAoc2l6ZVRvTWF4SGVpZ2h0W2RlbGltLnNpemVdICsgZXh0cmFWaW5pY3VsdW0gKyBlbVBhZCkgLyBzaXplTXVsdGlwbGllcjtcbiAgICBzcGFuID0gZGVsaW1pdGVyX3NxcnRTdmcoXCJzcXJ0U2l6ZVwiICsgZGVsaW0uc2l6ZSwgc3BhbkhlaWdodCwgdmlld0JveEhlaWdodCwgZXh0cmFWaW5pY3VsdW0sIG9wdGlvbnMpO1xuICAgIHNwYW4uc3R5bGUubWluV2lkdGggPSBcIjEuMDJlbVwiO1xuICAgIGFkdmFuY2VXaWR0aCA9IDEuMCAvIHNpemVNdWx0aXBsaWVyOyAvLyAxLjAgZnJvbSB0aGUgZm9udC5cbiAgfSBlbHNlIHtcbiAgICAvLyBUYWxsIHNxcnQuIEluIFRlWCwgdGhpcyB3b3VsZCBiZSBzdGFja2VkIHVzaW5nIG11bHRpcGxlIGdseXBocy5cbiAgICAvLyBXZSdsbCB1c2UgYSBzaW5nbGUgU1ZHIHRvIGFjY29tcGxpc2ggdGhlIHNhbWUgdGhpbmcuXG4gICAgc3BhbkhlaWdodCA9IGhlaWdodCArIGV4dHJhVmluaWN1bHVtICsgZW1QYWQ7XG4gICAgdGV4SGVpZ2h0ID0gaGVpZ2h0ICsgZXh0cmFWaW5pY3VsdW07XG4gICAgdmlld0JveEhlaWdodCA9IE1hdGguZmxvb3IoMTAwMCAqIGhlaWdodCArIGV4dHJhVmluaWN1bHVtKSArIHZiUGFkO1xuICAgIHNwYW4gPSBkZWxpbWl0ZXJfc3FydFN2ZyhcInNxcnRUYWxsXCIsIHNwYW5IZWlnaHQsIHZpZXdCb3hIZWlnaHQsIGV4dHJhVmluaWN1bHVtLCBvcHRpb25zKTtcbiAgICBzcGFuLnN0eWxlLm1pbldpZHRoID0gXCIwLjc0MmVtXCI7XG4gICAgYWR2YW5jZVdpZHRoID0gMS4wNTY7XG4gIH1cblxuICBzcGFuLmhlaWdodCA9IHRleEhlaWdodDtcbiAgc3Bhbi5zdHlsZS5oZWlnaHQgPSBzcGFuSGVpZ2h0ICsgXCJlbVwiO1xuICByZXR1cm4ge1xuICAgIHNwYW46IHNwYW4sXG4gICAgYWR2YW5jZVdpZHRoOiBhZHZhbmNlV2lkdGgsXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhY3R1YWwgbGluZSB3aWR0aC5cbiAgICAvLyBUaGlzIGFjdHVhbGx5IHNob3VsZCBkZXBlbmQgb24gdGhlIGNob3NlbiBmb250IC0tIGUuZy4gXFxib2xkbWF0aFxuICAgIC8vIHNob3VsZCB1c2UgdGhlIHRoaWNrZXIgc3VyZCBzeW1ib2xzIGZyb20gZS5nLiBLYVRlWF9NYWluLUJvbGQsIGFuZFxuICAgIC8vIGhhdmUgdGhpY2tlciBydWxlcy5cbiAgICBydWxlV2lkdGg6IChvcHRpb25zLmZvbnRNZXRyaWNzKCkuc3FydFJ1bGVUaGlja25lc3MgKyBleHRyYVZpbmljdWx1bSkgKiBzaXplTXVsdGlwbGllclxuICB9O1xufTsgLy8gVGhlcmUgYXJlIHRocmVlIGtpbmRzIG9mIGRlbGltaXRlcnMsIGRlbGltaXRlcnMgdGhhdCBzdGFjayB3aGVuIHRoZXkgYmVjb21lXG4vLyB0b28gbGFyZ2VcblxuXG52YXIgc3RhY2tMYXJnZURlbGltaXRlcnMgPSBbXCIoXCIsIFwiXFxcXGxwYXJlblwiLCBcIilcIiwgXCJcXFxccnBhcmVuXCIsIFwiW1wiLCBcIlxcXFxsYnJhY2tcIiwgXCJdXCIsIFwiXFxcXHJicmFja1wiLCBcIlxcXFx7XCIsIFwiXFxcXGxicmFjZVwiLCBcIlxcXFx9XCIsIFwiXFxcXHJicmFjZVwiLCBcIlxcXFxsZmxvb3JcIiwgXCJcXFxccmZsb29yXCIsIFwiXFx1MjMwQVwiLCBcIlxcdTIzMEJcIiwgXCJcXFxcbGNlaWxcIiwgXCJcXFxccmNlaWxcIiwgXCJcXHUyMzA4XCIsIFwiXFx1MjMwOVwiLCBcIlxcXFxzdXJkXCJdOyAvLyBkZWxpbWl0ZXJzIHRoYXQgYWx3YXlzIHN0YWNrXG5cbnZhciBzdGFja0Fsd2F5c0RlbGltaXRlcnMgPSBbXCJcXFxcdXBhcnJvd1wiLCBcIlxcXFxkb3duYXJyb3dcIiwgXCJcXFxcdXBkb3duYXJyb3dcIiwgXCJcXFxcVXBhcnJvd1wiLCBcIlxcXFxEb3duYXJyb3dcIiwgXCJcXFxcVXBkb3duYXJyb3dcIiwgXCJ8XCIsIFwiXFxcXHxcIiwgXCJcXFxcdmVydFwiLCBcIlxcXFxWZXJ0XCIsIFwiXFxcXGx2ZXJ0XCIsIFwiXFxcXHJ2ZXJ0XCIsIFwiXFxcXGxWZXJ0XCIsIFwiXFxcXHJWZXJ0XCIsIFwiXFxcXGxncm91cFwiLCBcIlxcXFxyZ3JvdXBcIiwgXCJcXHUyN0VFXCIsIFwiXFx1MjdFRlwiLCBcIlxcXFxsbW91c3RhY2hlXCIsIFwiXFxcXHJtb3VzdGFjaGVcIiwgXCJcXHUyM0IwXCIsIFwiXFx1MjNCMVwiXTsgLy8gYW5kIGRlbGltaXRlcnMgdGhhdCBuZXZlciBzdGFja1xuXG52YXIgc3RhY2tOZXZlckRlbGltaXRlcnMgPSBbXCI8XCIsIFwiPlwiLCBcIlxcXFxsYW5nbGVcIiwgXCJcXFxccmFuZ2xlXCIsIFwiL1wiLCBcIlxcXFxiYWNrc2xhc2hcIiwgXCJcXFxcbHRcIiwgXCJcXFxcZ3RcIl07IC8vIE1ldHJpY3Mgb2YgdGhlIGRpZmZlcmVudCBzaXplcy4gRm91bmQgYnkgbG9va2luZyBhdCBUZVgncyBvdXRwdXQgb2Zcbi8vICRcXGJpZ2x8IC8vIFxcQmlnbHwgXFxiaWdnbHwgXFxCaWdnbHwgXFxzaG93bGlzdHMkXG4vLyBVc2VkIHRvIGNyZWF0ZSBzdGFja2VkIGRlbGltaXRlcnMgb2YgYXBwcm9wcmlhdGUgc2l6ZXMgaW4gbWFrZVNpemVkRGVsaW0uXG5cbnZhciBzaXplVG9NYXhIZWlnaHQgPSBbMCwgMS4yLCAxLjgsIDIuNCwgMy4wXTtcbi8qKlxuICogVXNlZCB0byBjcmVhdGUgYSBkZWxpbWl0ZXIgb2YgYSBzcGVjaWZpYyBzaXplLCB3aGVyZSBgc2l6ZWAgaXMgMSwgMiwgMywgb3IgNC5cbiAqL1xuXG52YXIgZGVsaW1pdGVyX21ha2VTaXplZERlbGltID0gZnVuY3Rpb24gbWFrZVNpemVkRGVsaW0oZGVsaW0sIHNpemUsIG9wdGlvbnMsIG1vZGUsIGNsYXNzZXMpIHtcbiAgLy8gPCBhbmQgPiB0dXJuIGludG8gXFxsYW5nbGUgYW5kIFxccmFuZ2xlIGluIGRlbGltaXRlcnNcbiAgaWYgKGRlbGltID09PSBcIjxcIiB8fCBkZWxpbSA9PT0gXCJcXFxcbHRcIiB8fCBkZWxpbSA9PT0gXCJcXHUyN0U4XCIpIHtcbiAgICBkZWxpbSA9IFwiXFxcXGxhbmdsZVwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIj5cIiB8fCBkZWxpbSA9PT0gXCJcXFxcZ3RcIiB8fCBkZWxpbSA9PT0gXCJcXHUyN0U5XCIpIHtcbiAgICBkZWxpbSA9IFwiXFxcXHJhbmdsZVwiO1xuICB9IC8vIFNpemVkIGRlbGltaXRlcnMgYXJlIG5ldmVyIGNlbnRlcmVkLlxuXG5cbiAgaWYgKHV0aWxzLmNvbnRhaW5zKHN0YWNrTGFyZ2VEZWxpbWl0ZXJzLCBkZWxpbSkgfHwgdXRpbHMuY29udGFpbnMoc3RhY2tOZXZlckRlbGltaXRlcnMsIGRlbGltKSkge1xuICAgIHJldHVybiBkZWxpbWl0ZXJfbWFrZUxhcmdlRGVsaW0oZGVsaW0sIHNpemUsIGZhbHNlLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbiAgfSBlbHNlIGlmICh1dGlscy5jb250YWlucyhzdGFja0Fsd2F5c0RlbGltaXRlcnMsIGRlbGltKSkge1xuICAgIHJldHVybiBkZWxpbWl0ZXJfbWFrZVN0YWNrZWREZWxpbShkZWxpbSwgc2l6ZVRvTWF4SGVpZ2h0W3NpemVdLCBmYWxzZSwgb3B0aW9ucywgbW9kZSwgY2xhc3Nlcyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSWxsZWdhbCBkZWxpbWl0ZXI6ICdcIiArIGRlbGltICsgXCInXCIpO1xuICB9XG59O1xuLyoqXG4gKiBUaGVyZSBhcmUgdGhyZWUgZGlmZmVyZW50IHNlcXVlbmNlcyBvZiBkZWxpbWl0ZXIgc2l6ZXMgdGhhdCB0aGUgZGVsaW1pdGVyc1xuICogZm9sbG93IGRlcGVuZGluZyBvbiB0aGUga2luZCBvZiBkZWxpbWl0ZXIuIFRoaXMgaXMgdXNlZCB3aGVuIGNyZWF0aW5nIGN1c3RvbVxuICogc2l6ZWQgZGVsaW1pdGVycyB0byBkZWNpZGUgd2hldGhlciB0byBjcmVhdGUgYSBzbWFsbCwgbGFyZ2UsIG9yIHN0YWNrZWRcbiAqIGRlbGltaXRlci5cbiAqXG4gKiBJbiByZWFsIFRlWCwgdGhlc2Ugc2VxdWVuY2VzIGFyZW4ndCBleHBsaWNpdGx5IGRlZmluZWQsIGJ1dCBhcmUgaW5zdGVhZFxuICogZGVmaW5lZCBpbnNpZGUgdGhlIGZvbnQgbWV0cmljcy4gU2luY2UgdGhlcmUgYXJlIG9ubHkgdGhyZWUgc2VxdWVuY2VzIHRoYXRcbiAqIGFyZSBwb3NzaWJsZSBmb3IgdGhlIGRlbGltaXRlcnMgdGhhdCBUZVggZGVmaW5lcywgaXQgaXMgZWFzaWVyIHRvIGp1c3QgZW5jb2RlXG4gKiB0aGVtIGV4cGxpY2l0bHkgaGVyZS5cbiAqL1xuXG5cbi8vIERlbGltaXRlcnMgdGhhdCBuZXZlciBzdGFjayB0cnkgc21hbGwgZGVsaW1pdGVycyBhbmQgbGFyZ2UgZGVsaW1pdGVycyBvbmx5XG52YXIgc3RhY2tOZXZlckRlbGltaXRlclNlcXVlbmNlID0gW3tcbiAgdHlwZTogXCJzbWFsbFwiLFxuICBzdHlsZTogc3JjX1N0eWxlLlNDUklQVFNDUklQVFxufSwge1xuICB0eXBlOiBcInNtYWxsXCIsXG4gIHN0eWxlOiBzcmNfU3R5bGUuU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IHNyY19TdHlsZS5URVhUXG59LCB7XG4gIHR5cGU6IFwibGFyZ2VcIixcbiAgc2l6ZTogMVxufSwge1xuICB0eXBlOiBcImxhcmdlXCIsXG4gIHNpemU6IDJcbn0sIHtcbiAgdHlwZTogXCJsYXJnZVwiLFxuICBzaXplOiAzXG59LCB7XG4gIHR5cGU6IFwibGFyZ2VcIixcbiAgc2l6ZTogNFxufV07IC8vIERlbGltaXRlcnMgdGhhdCBhbHdheXMgc3RhY2sgdHJ5IHRoZSBzbWFsbCBkZWxpbWl0ZXJzIGZpcnN0LCB0aGVuIHN0YWNrXG5cbnZhciBzdGFja0Fsd2F5c0RlbGltaXRlclNlcXVlbmNlID0gW3tcbiAgdHlwZTogXCJzbWFsbFwiLFxuICBzdHlsZTogc3JjX1N0eWxlLlNDUklQVFNDUklQVFxufSwge1xuICB0eXBlOiBcInNtYWxsXCIsXG4gIHN0eWxlOiBzcmNfU3R5bGUuU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IHNyY19TdHlsZS5URVhUXG59LCB7XG4gIHR5cGU6IFwic3RhY2tcIlxufV07IC8vIERlbGltaXRlcnMgdGhhdCBzdGFjayB3aGVuIGxhcmdlIHRyeSB0aGUgc21hbGwgYW5kIHRoZW4gbGFyZ2UgZGVsaW1pdGVycywgYW5kXG4vLyBzdGFjayBhZnRlcndhcmRzXG5cbnZhciBzdGFja0xhcmdlRGVsaW1pdGVyU2VxdWVuY2UgPSBbe1xuICB0eXBlOiBcInNtYWxsXCIsXG4gIHN0eWxlOiBzcmNfU3R5bGUuU0NSSVBUU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IHNyY19TdHlsZS5TQ1JJUFRcbn0sIHtcbiAgdHlwZTogXCJzbWFsbFwiLFxuICBzdHlsZTogc3JjX1N0eWxlLlRFWFRcbn0sIHtcbiAgdHlwZTogXCJsYXJnZVwiLFxuICBzaXplOiAxXG59LCB7XG4gIHR5cGU6IFwibGFyZ2VcIixcbiAgc2l6ZTogMlxufSwge1xuICB0eXBlOiBcImxhcmdlXCIsXG4gIHNpemU6IDNcbn0sIHtcbiAgdHlwZTogXCJsYXJnZVwiLFxuICBzaXplOiA0XG59LCB7XG4gIHR5cGU6IFwic3RhY2tcIlxufV07XG4vKipcbiAqIEdldCB0aGUgZm9udCB1c2VkIGluIGEgZGVsaW1pdGVyIGJhc2VkIG9uIHdoYXQga2luZCBvZiBkZWxpbWl0ZXIgaXQgaXMuXG4gKiBUT0RPKCM5NjMpIFVzZSBtb3JlIHNwZWNpZmljIGZvbnQgZmFtaWx5IHJldHVybiB0eXBlIG9uY2UgdGhhdCBpcyBpbnRyb2R1Y2VkLlxuICovXG5cbnZhciBkZWxpbVR5cGVUb0ZvbnQgPSBmdW5jdGlvbiBkZWxpbVR5cGVUb0ZvbnQodHlwZSkge1xuICBpZiAodHlwZS50eXBlID09PSBcInNtYWxsXCIpIHtcbiAgICByZXR1cm4gXCJNYWluLVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmICh0eXBlLnR5cGUgPT09IFwibGFyZ2VcIikge1xuICAgIHJldHVybiBcIlNpemVcIiArIHR5cGUuc2l6ZSArIFwiLVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmICh0eXBlLnR5cGUgPT09IFwic3RhY2tcIikge1xuICAgIHJldHVybiBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBZGQgc3VwcG9ydCBmb3IgZGVsaW0gdHlwZSAnXCIgKyB0eXBlLnR5cGUgKyBcIicgaGVyZS5cIik7XG4gIH1cbn07XG4vKipcbiAqIFRyYXZlcnNlIGEgc2VxdWVuY2Ugb2YgdHlwZXMgb2YgZGVsaW1pdGVycyB0byBkZWNpZGUgd2hhdCBraW5kIG9mIGRlbGltaXRlclxuICogc2hvdWxkIGJlIHVzZWQgdG8gY3JlYXRlIGEgZGVsaW1pdGVyIG9mIHRoZSBnaXZlbiBoZWlnaHQrZGVwdGguXG4gKi9cblxuXG52YXIgdHJhdmVyc2VTZXF1ZW5jZSA9IGZ1bmN0aW9uIHRyYXZlcnNlU2VxdWVuY2UoZGVsaW0sIGhlaWdodCwgc2VxdWVuY2UsIG9wdGlvbnMpIHtcbiAgLy8gSGVyZSwgd2UgY2hvb3NlIHRoZSBpbmRleCB3ZSBzaG91bGQgc3RhcnQgYXQgaW4gdGhlIHNlcXVlbmNlcy4gSW4gc21hbGxlclxuICAvLyBzaXplcyAod2hpY2ggY29ycmVzcG9uZCB0byBsYXJnZXIgbnVtYmVycyBpbiBzdHlsZS5zaXplKSB3ZSBzdGFydCBlYXJsaWVyXG4gIC8vIGluIHRoZSBzZXF1ZW5jZS4gVGh1cywgc2NyaXB0c2NyaXB0IHN0YXJ0cyBhdCBpbmRleCAzLTM9MCwgc2NyaXB0IHN0YXJ0c1xuICAvLyBhdCBpbmRleCAzLTI9MSwgdGV4dCBzdGFydHMgYXQgMy0xPTIsIGFuZCBkaXNwbGF5IHN0YXJ0cyBhdCBtaW4oMiwzLTApPTJcbiAgdmFyIHN0YXJ0ID0gTWF0aC5taW4oMiwgMyAtIG9wdGlvbnMuc3R5bGUuc2l6ZSk7XG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgc2VxdWVuY2UubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc2VxdWVuY2VbaV0udHlwZSA9PT0gXCJzdGFja1wiKSB7XG4gICAgICAvLyBUaGlzIGlzIGFsd2F5cyB0aGUgbGFzdCBkZWxpbWl0ZXIsIHNvIHdlIGp1c3QgYnJlYWsgdGhlIGxvb3Agbm93LlxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIG1ldHJpY3MgPSBkZWxpbWl0ZXJfZ2V0TWV0cmljcyhkZWxpbSwgZGVsaW1UeXBlVG9Gb250KHNlcXVlbmNlW2ldKSwgXCJtYXRoXCIpO1xuICAgIHZhciBoZWlnaHREZXB0aCA9IG1ldHJpY3MuaGVpZ2h0ICsgbWV0cmljcy5kZXB0aDsgLy8gU21hbGwgZGVsaW1pdGVycyBhcmUgc2NhbGVkIGRvd24gdmVyc2lvbnMgb2YgdGhlIHNhbWUgZm9udCwgc28gd2VcbiAgICAvLyBhY2NvdW50IGZvciB0aGUgc3R5bGUgY2hhbmdlIHNpemUuXG5cbiAgICBpZiAoc2VxdWVuY2VbaV0udHlwZSA9PT0gXCJzbWFsbFwiKSB7XG4gICAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nQmFzZVN0eWxlKHNlcXVlbmNlW2ldLnN0eWxlKTtcbiAgICAgIGhlaWdodERlcHRoICo9IG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgfSAvLyBDaGVjayBpZiB0aGUgZGVsaW1pdGVyIGF0IHRoaXMgc2l6ZSB3b3JrcyBmb3IgdGhlIGdpdmVuIGhlaWdodC5cblxuXG4gICAgaWYgKGhlaWdodERlcHRoID4gaGVpZ2h0KSB7XG4gICAgICByZXR1cm4gc2VxdWVuY2VbaV07XG4gICAgfVxuICB9IC8vIElmIHdlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UsIHJldHVybiB0aGUgbGFzdCBzZXF1ZW5jZSBlbGVtZW50LlxuXG5cbiAgcmV0dXJuIHNlcXVlbmNlW3NlcXVlbmNlLmxlbmd0aCAtIDFdO1xufTtcbi8qKlxuICogTWFrZSBhIGRlbGltaXRlciBvZiBhIGdpdmVuIGhlaWdodCtkZXB0aCwgd2l0aCBvcHRpb25hbCBjZW50ZXJpbmcuIEhlcmUsIHdlXG4gKiB0cmF2ZXJzZSB0aGUgc2VxdWVuY2VzLCBhbmQgY3JlYXRlIGEgZGVsaW1pdGVyIHRoYXQgdGhlIHNlcXVlbmNlIHRlbGxzIHVzIHRvLlxuICovXG5cblxudmFyIGRlbGltaXRlcl9tYWtlQ3VzdG9tU2l6ZWREZWxpbSA9IGZ1bmN0aW9uIG1ha2VDdXN0b21TaXplZERlbGltKGRlbGltLCBoZWlnaHQsIGNlbnRlciwgb3B0aW9ucywgbW9kZSwgY2xhc3Nlcykge1xuICBpZiAoZGVsaW0gPT09IFwiPFwiIHx8IGRlbGltID09PSBcIlxcXFxsdFwiIHx8IGRlbGltID09PSBcIlxcdTI3RThcIikge1xuICAgIGRlbGltID0gXCJcXFxcbGFuZ2xlXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiPlwiIHx8IGRlbGltID09PSBcIlxcXFxndFwiIHx8IGRlbGltID09PSBcIlxcdTI3RTlcIikge1xuICAgIGRlbGltID0gXCJcXFxccmFuZ2xlXCI7XG4gIH0gLy8gRGVjaWRlIHdoYXQgc2VxdWVuY2UgdG8gdXNlXG5cblxuICB2YXIgc2VxdWVuY2U7XG5cbiAgaWYgKHV0aWxzLmNvbnRhaW5zKHN0YWNrTmV2ZXJEZWxpbWl0ZXJzLCBkZWxpbSkpIHtcbiAgICBzZXF1ZW5jZSA9IHN0YWNrTmV2ZXJEZWxpbWl0ZXJTZXF1ZW5jZTtcbiAgfSBlbHNlIGlmICh1dGlscy5jb250YWlucyhzdGFja0xhcmdlRGVsaW1pdGVycywgZGVsaW0pKSB7XG4gICAgc2VxdWVuY2UgPSBzdGFja0xhcmdlRGVsaW1pdGVyU2VxdWVuY2U7XG4gIH0gZWxzZSB7XG4gICAgc2VxdWVuY2UgPSBzdGFja0Fsd2F5c0RlbGltaXRlclNlcXVlbmNlO1xuICB9IC8vIExvb2sgdGhyb3VnaCB0aGUgc2VxdWVuY2VcblxuXG4gIHZhciBkZWxpbVR5cGUgPSB0cmF2ZXJzZVNlcXVlbmNlKGRlbGltLCBoZWlnaHQsIHNlcXVlbmNlLCBvcHRpb25zKTsgLy8gR2V0IHRoZSBkZWxpbWl0ZXIgZnJvbSBmb250IGdseXBocy5cbiAgLy8gRGVwZW5kaW5nIG9uIHRoZSBzZXF1ZW5jZSBlbGVtZW50IHdlIGRlY2lkZWQgb24sIGNhbGwgdGhlXG4gIC8vIGFwcHJvcHJpYXRlIGZ1bmN0aW9uLlxuXG4gIGlmIChkZWxpbVR5cGUudHlwZSA9PT0gXCJzbWFsbFwiKSB7XG4gICAgcmV0dXJuIGRlbGltaXRlcl9tYWtlU21hbGxEZWxpbShkZWxpbSwgZGVsaW1UeXBlLnN0eWxlLCBjZW50ZXIsIG9wdGlvbnMsIG1vZGUsIGNsYXNzZXMpO1xuICB9IGVsc2UgaWYgKGRlbGltVHlwZS50eXBlID09PSBcImxhcmdlXCIpIHtcbiAgICByZXR1cm4gZGVsaW1pdGVyX21ha2VMYXJnZURlbGltKGRlbGltLCBkZWxpbVR5cGUuc2l6ZSwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbiAgfSBlbHNlXG4gICAgLyogaWYgKGRlbGltVHlwZS50eXBlID09PSBcInN0YWNrXCIpICovXG4gICAge1xuICAgICAgcmV0dXJuIGRlbGltaXRlcl9tYWtlU3RhY2tlZERlbGltKGRlbGltLCBoZWlnaHQsIGNlbnRlciwgb3B0aW9ucywgbW9kZSwgY2xhc3Nlcyk7XG4gICAgfVxufTtcbi8qKlxuICogTWFrZSBhIGRlbGltaXRlciBmb3IgdXNlIHdpdGggYFxcbGVmdGAgYW5kIGBcXHJpZ2h0YCwgZ2l2ZW4gYSBoZWlnaHQgYW5kIGRlcHRoXG4gKiBvZiBhbiBleHByZXNzaW9uIHRoYXQgdGhlIGRlbGltaXRlcnMgc3Vycm91bmQuXG4gKi9cblxuXG52YXIgbWFrZUxlZnRSaWdodERlbGltID0gZnVuY3Rpb24gbWFrZUxlZnRSaWdodERlbGltKGRlbGltLCBoZWlnaHQsIGRlcHRoLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKSB7XG4gIC8vIFdlIGFsd2F5cyBjZW50ZXIgXFxsZWZ0L1xccmlnaHQgZGVsaW1pdGVycywgc28gdGhlIGF4aXMgaXMgYWx3YXlzIHNoaWZ0ZWRcbiAgdmFyIGF4aXNIZWlnaHQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCAqIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7IC8vIFRha2VuIGZyb20gVGVYIHNvdXJjZSwgdGV4LndlYiwgZnVuY3Rpb24gbWFrZV9sZWZ0X3JpZ2h0XG5cbiAgdmFyIGRlbGltaXRlckZhY3RvciA9IDkwMTtcbiAgdmFyIGRlbGltaXRlckV4dGVuZCA9IDUuMCAvIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5wdFBlckVtO1xuICB2YXIgbWF4RGlzdEZyb21BeGlzID0gTWF0aC5tYXgoaGVpZ2h0IC0gYXhpc0hlaWdodCwgZGVwdGggKyBheGlzSGVpZ2h0KTtcbiAgdmFyIHRvdGFsSGVpZ2h0ID0gTWF0aC5tYXgoIC8vIEluIHJlYWwgVGVYLCBjYWxjdWxhdGlvbnMgYXJlIGRvbmUgdXNpbmcgaW50ZWdyYWwgdmFsdWVzIHdoaWNoIGFyZVxuICAvLyA2NTUzNiBwZXIgcHQsIG9yIDY1NTM2MCBwZXIgZW0uIFNvLCB0aGUgZGl2aXNpb24gaGVyZSB0cnVuY2F0ZXMgaW5cbiAgLy8gVGVYIGJ1dCBkb2Vzbid0IGhlcmUsIHByb2R1Y2luZyBkaWZmZXJlbnQgcmVzdWx0cy4gSWYgd2Ugd2FudGVkIHRvXG4gIC8vIGV4YWN0bHkgbWF0Y2ggVGVYJ3MgY2FsY3VsYXRpb24sIHdlIGNvdWxkIGRvXG4gIC8vICAgTWF0aC5mbG9vcig2NTUzNjAgKiBtYXhEaXN0RnJvbUF4aXMgLyA1MDApICpcbiAgLy8gICAgZGVsaW1pdGVyRmFjdG9yIC8gNjU1MzYwXG4gIC8vIChUbyBzZWUgdGhlIGRpZmZlcmVuY2UsIGNvbXBhcmVcbiAgLy8gICAgeF57eF57XFxsZWZ0KFxccnVsZXswLjFlbX17MC42OGVtfVxccmlnaHQpfX1cbiAgLy8gaW4gVGVYIGFuZCBLYVRlWClcbiAgbWF4RGlzdEZyb21BeGlzIC8gNTAwICogZGVsaW1pdGVyRmFjdG9yLCAyICogbWF4RGlzdEZyb21BeGlzIC0gZGVsaW1pdGVyRXh0ZW5kKTsgLy8gRmluYWxseSwgd2UgZGVmZXIgdG8gYG1ha2VDdXN0b21TaXplZERlbGltYCB3aXRoIG91ciBjYWxjdWxhdGVkIHRvdGFsXG4gIC8vIGhlaWdodFxuXG4gIHJldHVybiBkZWxpbWl0ZXJfbWFrZUN1c3RvbVNpemVkRGVsaW0oZGVsaW0sIHRvdGFsSGVpZ2h0LCB0cnVlLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGRlbGltaXRlciA9ICh7XG4gIHNxcnRJbWFnZTogbWFrZVNxcnRJbWFnZSxcbiAgc2l6ZWREZWxpbTogZGVsaW1pdGVyX21ha2VTaXplZERlbGltLFxuICBjdXN0b21TaXplZERlbGltOiBkZWxpbWl0ZXJfbWFrZUN1c3RvbVNpemVkRGVsaW0sXG4gIGxlZnRSaWdodERlbGltOiBtYWtlTGVmdFJpZ2h0RGVsaW1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2RlbGltc2l6aW5nLmpzXG5cblxuXG5cblxuXG5cblxuXG4vLyBFeHRyYSBkYXRhIG5lZWRlZCBmb3IgdGhlIGRlbGltaXRlciBoYW5kbGVyIGRvd24gYmVsb3dcbnZhciBkZWxpbWl0ZXJTaXplcyA9IHtcbiAgXCJcXFxcYmlnbFwiOiB7XG4gICAgbWNsYXNzOiBcIm1vcGVuXCIsXG4gICAgc2l6ZTogMVxuICB9LFxuICBcIlxcXFxCaWdsXCI6IHtcbiAgICBtY2xhc3M6IFwibW9wZW5cIixcbiAgICBzaXplOiAyXG4gIH0sXG4gIFwiXFxcXGJpZ2dsXCI6IHtcbiAgICBtY2xhc3M6IFwibW9wZW5cIixcbiAgICBzaXplOiAzXG4gIH0sXG4gIFwiXFxcXEJpZ2dsXCI6IHtcbiAgICBtY2xhc3M6IFwibW9wZW5cIixcbiAgICBzaXplOiA0XG4gIH0sXG4gIFwiXFxcXGJpZ3JcIjoge1xuICAgIG1jbGFzczogXCJtY2xvc2VcIixcbiAgICBzaXplOiAxXG4gIH0sXG4gIFwiXFxcXEJpZ3JcIjoge1xuICAgIG1jbGFzczogXCJtY2xvc2VcIixcbiAgICBzaXplOiAyXG4gIH0sXG4gIFwiXFxcXGJpZ2dyXCI6IHtcbiAgICBtY2xhc3M6IFwibWNsb3NlXCIsXG4gICAgc2l6ZTogM1xuICB9LFxuICBcIlxcXFxCaWdnclwiOiB7XG4gICAgbWNsYXNzOiBcIm1jbG9zZVwiLFxuICAgIHNpemU6IDRcbiAgfSxcbiAgXCJcXFxcYmlnbVwiOiB7XG4gICAgbWNsYXNzOiBcIm1yZWxcIixcbiAgICBzaXplOiAxXG4gIH0sXG4gIFwiXFxcXEJpZ21cIjoge1xuICAgIG1jbGFzczogXCJtcmVsXCIsXG4gICAgc2l6ZTogMlxuICB9LFxuICBcIlxcXFxiaWdnbVwiOiB7XG4gICAgbWNsYXNzOiBcIm1yZWxcIixcbiAgICBzaXplOiAzXG4gIH0sXG4gIFwiXFxcXEJpZ2dtXCI6IHtcbiAgICBtY2xhc3M6IFwibXJlbFwiLFxuICAgIHNpemU6IDRcbiAgfSxcbiAgXCJcXFxcYmlnXCI6IHtcbiAgICBtY2xhc3M6IFwibW9yZFwiLFxuICAgIHNpemU6IDFcbiAgfSxcbiAgXCJcXFxcQmlnXCI6IHtcbiAgICBtY2xhc3M6IFwibW9yZFwiLFxuICAgIHNpemU6IDJcbiAgfSxcbiAgXCJcXFxcYmlnZ1wiOiB7XG4gICAgbWNsYXNzOiBcIm1vcmRcIixcbiAgICBzaXplOiAzXG4gIH0sXG4gIFwiXFxcXEJpZ2dcIjoge1xuICAgIG1jbGFzczogXCJtb3JkXCIsXG4gICAgc2l6ZTogNFxuICB9XG59O1xudmFyIGRlbGltaXRlcnMgPSBbXCIoXCIsIFwiXFxcXGxwYXJlblwiLCBcIilcIiwgXCJcXFxccnBhcmVuXCIsIFwiW1wiLCBcIlxcXFxsYnJhY2tcIiwgXCJdXCIsIFwiXFxcXHJicmFja1wiLCBcIlxcXFx7XCIsIFwiXFxcXGxicmFjZVwiLCBcIlxcXFx9XCIsIFwiXFxcXHJicmFjZVwiLCBcIlxcXFxsZmxvb3JcIiwgXCJcXFxccmZsb29yXCIsIFwiXFx1MjMwQVwiLCBcIlxcdTIzMEJcIiwgXCJcXFxcbGNlaWxcIiwgXCJcXFxccmNlaWxcIiwgXCJcXHUyMzA4XCIsIFwiXFx1MjMwOVwiLCBcIjxcIiwgXCI+XCIsIFwiXFxcXGxhbmdsZVwiLCBcIlxcdTI3RThcIiwgXCJcXFxccmFuZ2xlXCIsIFwiXFx1MjdFOVwiLCBcIlxcXFxsdFwiLCBcIlxcXFxndFwiLCBcIlxcXFxsdmVydFwiLCBcIlxcXFxydmVydFwiLCBcIlxcXFxsVmVydFwiLCBcIlxcXFxyVmVydFwiLCBcIlxcXFxsZ3JvdXBcIiwgXCJcXFxccmdyb3VwXCIsIFwiXFx1MjdFRVwiLCBcIlxcdTI3RUZcIiwgXCJcXFxcbG1vdXN0YWNoZVwiLCBcIlxcXFxybW91c3RhY2hlXCIsIFwiXFx1MjNCMFwiLCBcIlxcdTIzQjFcIiwgXCIvXCIsIFwiXFxcXGJhY2tzbGFzaFwiLCBcInxcIiwgXCJcXFxcdmVydFwiLCBcIlxcXFx8XCIsIFwiXFxcXFZlcnRcIiwgXCJcXFxcdXBhcnJvd1wiLCBcIlxcXFxVcGFycm93XCIsIFwiXFxcXGRvd25hcnJvd1wiLCBcIlxcXFxEb3duYXJyb3dcIiwgXCJcXFxcdXBkb3duYXJyb3dcIiwgXCJcXFxcVXBkb3duYXJyb3dcIiwgXCIuXCJdO1xuXG4vLyBEZWxpbWl0ZXIgZnVuY3Rpb25zXG5mdW5jdGlvbiBjaGVja0RlbGltaXRlcihkZWxpbSwgY29udGV4dCkge1xuICB2YXIgc3ltRGVsaW0gPSBjaGVja1N5bWJvbE5vZGVUeXBlKGRlbGltKTtcblxuICBpZiAoc3ltRGVsaW0gJiYgdXRpbHMuY29udGFpbnMoZGVsaW1pdGVycywgc3ltRGVsaW0udGV4dCkpIHtcbiAgICByZXR1cm4gc3ltRGVsaW07XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCBkZWxpbWl0ZXI6ICdcIiArIChzeW1EZWxpbSA/IHN5bURlbGltLnRleHQgOiBKU09OLnN0cmluZ2lmeShkZWxpbSkpICsgXCInIGFmdGVyICdcIiArIGNvbnRleHQuZnVuY05hbWUgKyBcIidcIiwgZGVsaW0pO1xuICB9XG59XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJkZWxpbXNpemluZ1wiLFxuICBuYW1lczogW1wiXFxcXGJpZ2xcIiwgXCJcXFxcQmlnbFwiLCBcIlxcXFxiaWdnbFwiLCBcIlxcXFxCaWdnbFwiLCBcIlxcXFxiaWdyXCIsIFwiXFxcXEJpZ3JcIiwgXCJcXFxcYmlnZ3JcIiwgXCJcXFxcQmlnZ3JcIiwgXCJcXFxcYmlnbVwiLCBcIlxcXFxCaWdtXCIsIFwiXFxcXGJpZ2dtXCIsIFwiXFxcXEJpZ2dtXCIsIFwiXFxcXGJpZ1wiLCBcIlxcXFxCaWdcIiwgXCJcXFxcYmlnZ1wiLCBcIlxcXFxCaWdnXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gICAgdmFyIGRlbGltID0gY2hlY2tEZWxpbWl0ZXIoYXJnc1swXSwgY29udGV4dCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZGVsaW1zaXppbmdcIixcbiAgICAgIG1vZGU6IGNvbnRleHQucGFyc2VyLm1vZGUsXG4gICAgICBzaXplOiBkZWxpbWl0ZXJTaXplc1tjb250ZXh0LmZ1bmNOYW1lXS5zaXplLFxuICAgICAgbWNsYXNzOiBkZWxpbWl0ZXJTaXplc1tjb250ZXh0LmZ1bmNOYW1lXS5tY2xhc3MsXG4gICAgICBkZWxpbTogZGVsaW0udGV4dFxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIGlmIChncm91cC5kZWxpbSA9PT0gXCIuXCIpIHtcbiAgICAgIC8vIEVtcHR5IGRlbGltaXRlcnMgc3RpbGwgY291bnQgYXMgZWxlbWVudHMsIGV2ZW4gdGhvdWdoIHRoZXkgZG9uJ3RcbiAgICAgIC8vIHNob3cgYW55dGhpbmcuXG4gICAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW2dyb3VwLm1jbGFzc10pO1xuICAgIH0gLy8gVXNlIGRlbGltaXRlci5zaXplZERlbGltIHRvIGdlbmVyYXRlIHRoZSBkZWxpbWl0ZXIuXG5cblxuICAgIHJldHVybiBkZWxpbWl0ZXIuc2l6ZWREZWxpbShncm91cC5kZWxpbSwgZ3JvdXAuc2l6ZSwgb3B0aW9ucywgZ3JvdXAubW9kZSwgW2dyb3VwLm1jbGFzc10pO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gW107XG5cbiAgICBpZiAoZ3JvdXAuZGVsaW0gIT09IFwiLlwiKSB7XG4gICAgICBjaGlsZHJlbi5wdXNoKGJ1aWxkTWF0aE1MX21ha2VUZXh0KGdyb3VwLmRlbGltLCBncm91cC5tb2RlKSk7XG4gICAgfVxuXG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIGNoaWxkcmVuKTtcblxuICAgIGlmIChncm91cC5tY2xhc3MgPT09IFwibW9wZW5cIiB8fCBncm91cC5tY2xhc3MgPT09IFwibWNsb3NlXCIpIHtcbiAgICAgIC8vIE9ubHkgc29tZSBvZiB0aGUgZGVsaW1zaXppbmcgZnVuY3Rpb25zIGFjdCBhcyBmZW5jZXMsIGFuZCB0aGV5XG4gICAgICAvLyByZXR1cm4gXCJtb3BlblwiIG9yIFwibWNsb3NlXCIgbWNsYXNzLlxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJmZW5jZVwiLCBcInRydWVcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEV4cGxpY2l0bHkgZGlzYWJsZSBmZW5jaW5nIGlmIGl0J3Mgbm90IGEgZmVuY2UsIHRvIG92ZXJyaWRlIHRoZVxuICAgICAgLy8gZGVmYXVsdHMuXG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImZlbmNlXCIsIFwiZmFsc2VcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBhc3NlcnRQYXJzZWQoZ3JvdXApIHtcbiAgaWYgKCFncm91cC5ib2R5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQnVnOiBUaGUgbGVmdHJpZ2h0IFBhcnNlTm9kZSB3YXNuJ3QgZnVsbHkgcGFyc2VkLlwiKTtcbiAgfVxufVxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibGVmdHJpZ2h0LXJpZ2h0XCIsXG4gIG5hbWVzOiBbXCJcXFxccmlnaHRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKGNvbnRleHQsIGFyZ3MpIHtcbiAgICAvLyBcXGxlZnQgY2FzZSBiZWxvdyB0cmlnZ2VycyBwYXJzaW5nIG9mIFxccmlnaHQgaW5cbiAgICAvLyAgIGBjb25zdCByaWdodCA9IHBhcnNlci5wYXJzZUZ1bmN0aW9uKCk7YFxuICAgIC8vIHVzZXMgdGhpcyByZXR1cm4gdmFsdWUuXG4gICAgdmFyIGNvbG9yID0gY29udGV4dC5wYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5nZXQoXCJcXFxcY3VycmVudEBjb2xvclwiKTtcblxuICAgIGlmIChjb2xvciAmJiB0eXBlb2YgY29sb3IgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlxcXFxjdXJyZW50QGNvbG9yIHNldCB0byBub24tc3RyaW5nIGluIFxcXFxyaWdodFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJsZWZ0cmlnaHQtcmlnaHRcIixcbiAgICAgIG1vZGU6IGNvbnRleHQucGFyc2VyLm1vZGUsXG4gICAgICBkZWxpbTogY2hlY2tEZWxpbWl0ZXIoYXJnc1swXSwgY29udGV4dCkudGV4dCxcbiAgICAgIGNvbG9yOiBjb2xvciAvLyB1bmRlZmluZWQgaWYgbm90IHNldCB2aWEgXFxjb2xvclxuXG4gICAgfTtcbiAgfVxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibGVmdHJpZ2h0XCIsXG4gIG5hbWVzOiBbXCJcXFxcbGVmdFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoY29udGV4dCwgYXJncykge1xuICAgIHZhciBkZWxpbSA9IGNoZWNrRGVsaW1pdGVyKGFyZ3NbMF0sIGNvbnRleHQpO1xuICAgIHZhciBwYXJzZXIgPSBjb250ZXh0LnBhcnNlcjsgLy8gUGFyc2Ugb3V0IHRoZSBpbXBsaWNpdCBib2R5XG5cbiAgICArK3BhcnNlci5sZWZ0cmlnaHREZXB0aDsgLy8gcGFyc2VFeHByZXNzaW9uIHN0b3BzIGJlZm9yZSAnXFxcXHJpZ2h0J1xuXG4gICAgdmFyIGJvZHkgPSBwYXJzZXIucGFyc2VFeHByZXNzaW9uKGZhbHNlKTtcbiAgICAtLXBhcnNlci5sZWZ0cmlnaHREZXB0aDsgLy8gQ2hlY2sgdGhlIG5leHQgdG9rZW5cblxuICAgIHBhcnNlci5leHBlY3QoXCJcXFxccmlnaHRcIiwgZmFsc2UpO1xuICAgIHZhciByaWdodCA9IGFzc2VydE5vZGVUeXBlKHBhcnNlci5wYXJzZUZ1bmN0aW9uKCksIFwibGVmdHJpZ2h0LXJpZ2h0XCIpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImxlZnRyaWdodFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5OiBib2R5LFxuICAgICAgbGVmdDogZGVsaW0udGV4dCxcbiAgICAgIHJpZ2h0OiByaWdodC5kZWxpbSxcbiAgICAgIHJpZ2h0Q29sb3I6IHJpZ2h0LmNvbG9yXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgYXNzZXJ0UGFyc2VkKGdyb3VwKTsgLy8gQnVpbGQgdGhlIGlubmVyIGV4cHJlc3Npb25cblxuICAgIHZhciBpbm5lciA9IGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucywgdHJ1ZSwgW1wibW9wZW5cIiwgXCJtY2xvc2VcIl0pO1xuICAgIHZhciBpbm5lckhlaWdodCA9IDA7XG4gICAgdmFyIGlubmVyRGVwdGggPSAwO1xuICAgIHZhciBoYWRNaWRkbGUgPSBmYWxzZTsgLy8gQ2FsY3VsYXRlIGl0cyBoZWlnaHQgYW5kIGRlcHRoXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlubmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBQcm9wZXJ0eSBgaXNNaWRkbGVgIG5vdCBkZWZpbmVkIG9uIGBzcGFuYC4gU2VlIGNvbW1lbnQgaW5cbiAgICAgIC8vIFwibWlkZGxlXCIncyBodG1sQnVpbGRlci5cbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIGlmIChpbm5lcltpXS5pc01pZGRsZSkge1xuICAgICAgICBoYWRNaWRkbGUgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5uZXJIZWlnaHQgPSBNYXRoLm1heChpbm5lcltpXS5oZWlnaHQsIGlubmVySGVpZ2h0KTtcbiAgICAgICAgaW5uZXJEZXB0aCA9IE1hdGgubWF4KGlubmVyW2ldLmRlcHRoLCBpbm5lckRlcHRoKTtcbiAgICAgIH1cbiAgICB9IC8vIFRoZSBzaXplIG9mIGRlbGltaXRlcnMgaXMgdGhlIHNhbWUsIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBzdHlsZSB3ZSBhcmVcbiAgICAvLyBpbi4gVGh1cywgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiBkZWxpbWl0ZXIgd2UgbmVlZCBhcm91bmRcbiAgICAvLyBhIGdyb3VwLCB3ZSBzY2FsZSBkb3duIHRoZSBpbm5lciBzaXplIGJhc2VkIG9uIHRoZSBzaXplLlxuXG5cbiAgICBpbm5lckhlaWdodCAqPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICAgIGlubmVyRGVwdGggKj0gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgICB2YXIgbGVmdERlbGltO1xuXG4gICAgaWYgKGdyb3VwLmxlZnQgPT09IFwiLlwiKSB7XG4gICAgICAvLyBFbXB0eSBkZWxpbWl0ZXJzIGluIFxcbGVmdCBhbmQgXFxyaWdodCBtYWtlIG51bGwgZGVsaW1pdGVyIHNwYWNlcy5cbiAgICAgIGxlZnREZWxpbSA9IG1ha2VOdWxsRGVsaW1pdGVyKG9wdGlvbnMsIFtcIm1vcGVuXCJdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlLCB1c2UgbGVmdFJpZ2h0RGVsaW0gdG8gZ2VuZXJhdGUgdGhlIGNvcnJlY3Qgc2l6ZWRcbiAgICAgIC8vIGRlbGltaXRlci5cbiAgICAgIGxlZnREZWxpbSA9IGRlbGltaXRlci5sZWZ0UmlnaHREZWxpbShncm91cC5sZWZ0LCBpbm5lckhlaWdodCwgaW5uZXJEZXB0aCwgb3B0aW9ucywgZ3JvdXAubW9kZSwgW1wibW9wZW5cIl0pO1xuICAgIH0gLy8gQWRkIGl0IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGV4cHJlc3Npb25cblxuXG4gICAgaW5uZXIudW5zaGlmdChsZWZ0RGVsaW0pOyAvLyBIYW5kbGUgbWlkZGxlIGRlbGltaXRlcnNcblxuICAgIGlmIChoYWRNaWRkbGUpIHtcbiAgICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBpbm5lci5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdmFyIG1pZGRsZURlbGltID0gaW5uZXJbX2ldOyAvLyBQcm9wZXJ0eSBgaXNNaWRkbGVgIG5vdCBkZWZpbmVkIG9uIGBzcGFuYC4gU2VlIGNvbW1lbnQgaW5cbiAgICAgICAgLy8gXCJtaWRkbGVcIidzIGh0bWxCdWlsZGVyLlxuICAgICAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgICAgdmFyIGlzTWlkZGxlID0gbWlkZGxlRGVsaW0uaXNNaWRkbGU7XG5cbiAgICAgICAgaWYgKGlzTWlkZGxlKSB7XG4gICAgICAgICAgLy8gQXBwbHkgdGhlIG9wdGlvbnMgdGhhdCB3ZXJlIGFjdGl2ZSB3aGVuIFxcbWlkZGxlIHdhcyBjYWxsZWRcbiAgICAgICAgICBpbm5lcltfaV0gPSBkZWxpbWl0ZXIubGVmdFJpZ2h0RGVsaW0oaXNNaWRkbGUuZGVsaW0sIGlubmVySGVpZ2h0LCBpbm5lckRlcHRoLCBpc01pZGRsZS5vcHRpb25zLCBncm91cC5tb2RlLCBbXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmlnaHREZWxpbTsgLy8gU2FtZSBmb3IgdGhlIHJpZ2h0IGRlbGltaXRlciwgYnV0IHVzaW5nIGNvbG9yIHNwZWNpZmllZCBieSBcXGNvbG9yXG5cbiAgICBpZiAoZ3JvdXAucmlnaHQgPT09IFwiLlwiKSB7XG4gICAgICByaWdodERlbGltID0gbWFrZU51bGxEZWxpbWl0ZXIob3B0aW9ucywgW1wibWNsb3NlXCJdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGNvbG9yT3B0aW9ucyA9IGdyb3VwLnJpZ2h0Q29sb3IgPyBvcHRpb25zLndpdGhDb2xvcihncm91cC5yaWdodENvbG9yKSA6IG9wdGlvbnM7XG4gICAgICByaWdodERlbGltID0gZGVsaW1pdGVyLmxlZnRSaWdodERlbGltKGdyb3VwLnJpZ2h0LCBpbm5lckhlaWdodCwgaW5uZXJEZXB0aCwgY29sb3JPcHRpb25zLCBncm91cC5tb2RlLCBbXCJtY2xvc2VcIl0pO1xuICAgIH0gLy8gQWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGV4cHJlc3Npb24uXG5cblxuICAgIGlubmVyLnB1c2gocmlnaHREZWxpbSk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1pbm5lclwiXSwgaW5uZXIsIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgYXNzZXJ0UGFyc2VkKGdyb3VwKTtcbiAgICB2YXIgaW5uZXIgPSBidWlsZE1hdGhNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoZ3JvdXAubGVmdCAhPT0gXCIuXCIpIHtcbiAgICAgIHZhciBsZWZ0Tm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW2J1aWxkTWF0aE1MX21ha2VUZXh0KGdyb3VwLmxlZnQsIGdyb3VwLm1vZGUpXSk7XG4gICAgICBsZWZ0Tm9kZS5zZXRBdHRyaWJ1dGUoXCJmZW5jZVwiLCBcInRydWVcIik7XG4gICAgICBpbm5lci51bnNoaWZ0KGxlZnROb2RlKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JvdXAucmlnaHQgIT09IFwiLlwiKSB7XG4gICAgICB2YXIgcmlnaHROb2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbYnVpbGRNYXRoTUxfbWFrZVRleHQoZ3JvdXAucmlnaHQsIGdyb3VwLm1vZGUpXSk7XG4gICAgICByaWdodE5vZGUuc2V0QXR0cmlidXRlKFwiZmVuY2VcIiwgXCJ0cnVlXCIpO1xuXG4gICAgICBpZiAoZ3JvdXAucmlnaHRDb2xvcikge1xuICAgICAgICByaWdodE5vZGUuc2V0QXR0cmlidXRlKFwibWF0aGNvbG9yXCIsIGdyb3VwLnJpZ2h0Q29sb3IpO1xuICAgICAgfVxuXG4gICAgICBpbm5lci5wdXNoKHJpZ2h0Tm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1aWxkTWF0aE1MX21ha2VSb3coaW5uZXIpO1xuICB9XG59KTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJtaWRkbGVcIixcbiAgbmFtZXM6IFtcIlxcXFxtaWRkbGVcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKGNvbnRleHQsIGFyZ3MpIHtcbiAgICB2YXIgZGVsaW0gPSBjaGVja0RlbGltaXRlcihhcmdzWzBdLCBjb250ZXh0KTtcblxuICAgIGlmICghY29udGV4dC5wYXJzZXIubGVmdHJpZ2h0RGVwdGgpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlxcXFxtaWRkbGUgd2l0aG91dCBwcmVjZWRpbmcgXFxcXGxlZnRcIiwgZGVsaW0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm1pZGRsZVwiLFxuICAgICAgbW9kZTogY29udGV4dC5wYXJzZXIubW9kZSxcbiAgICAgIGRlbGltOiBkZWxpbS50ZXh0XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG1pZGRsZURlbGltO1xuXG4gICAgaWYgKGdyb3VwLmRlbGltID09PSBcIi5cIikge1xuICAgICAgbWlkZGxlRGVsaW0gPSBtYWtlTnVsbERlbGltaXRlcihvcHRpb25zLCBbXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1pZGRsZURlbGltID0gZGVsaW1pdGVyLnNpemVkRGVsaW0oZ3JvdXAuZGVsaW0sIDEsIG9wdGlvbnMsIGdyb3VwLm1vZGUsIFtdKTtcbiAgICAgIHZhciBpc01pZGRsZSA9IHtcbiAgICAgICAgZGVsaW06IGdyb3VwLmRlbGltLFxuICAgICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgICB9OyAvLyBQcm9wZXJ0eSBgaXNNaWRkbGVgIG5vdCBkZWZpbmVkIG9uIGBzcGFuYC4gSXQgaXMgb25seSB1c2VkIGluXG4gICAgICAvLyB0aGlzIGZpbGUgYWJvdmUuXG4gICAgICAvLyBUT0RPOiBGaXggdGhpcyB2aW9sYXRpb24gb2YgdGhlIGBzcGFuYCB0eXBlIGFuZCBwb3NzaWJseSByZW5hbWVcbiAgICAgIC8vIHRoaW5ncyBzaW5jZSBgaXNNaWRkbGVgIHNvdW5kcyBsaWtlIGEgYm9vbGVhbiwgYnV0IGlzIGEgc3RydWN0LlxuICAgICAgLy8gJEZsb3dGaXhNZVxuXG4gICAgICBtaWRkbGVEZWxpbS5pc01pZGRsZSA9IGlzTWlkZGxlO1xuICAgIH1cblxuICAgIHJldHVybiBtaWRkbGVEZWxpbTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIEEgRmlyZWZveCBcXG1pZGRsZSB3aWxsIHN0cmVjaCBhIGNoYXJhY3RlciB2ZXJ0aWNhbGx5IG9ubHkgaWYgaXRcbiAgICAvLyBpcyBpbiB0aGUgZmVuY2UgcGFydCBvZiB0aGUgb3BlcmF0b3IgZGljdGlvbmFyeSBhdDpcbiAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvTWF0aE1MMy9hcHBlbmRpeGMuaHRtbC5cbiAgICAvLyBTbyB3ZSBuZWVkIHRvIGF2b2lkIFUrMjIyMyBhbmQgdXNlIHBsYWluIFwifFwiIGluc3RlYWQuXG4gICAgdmFyIHRleHROb2RlID0gZ3JvdXAuZGVsaW0gPT09IFwiXFxcXHZlcnRcIiB8fCBncm91cC5kZWxpbSA9PT0gXCJ8XCIgPyBidWlsZE1hdGhNTF9tYWtlVGV4dChcInxcIiwgXCJ0ZXh0XCIpIDogYnVpbGRNYXRoTUxfbWFrZVRleHQoZ3JvdXAuZGVsaW0sIGdyb3VwLm1vZGUpO1xuICAgIHZhciBtaWRkbGVOb2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbdGV4dE5vZGVdKTtcbiAgICBtaWRkbGVOb2RlLnNldEF0dHJpYnV0ZShcImZlbmNlXCIsIFwidHJ1ZVwiKTsgLy8gTWF0aE1MIGdpdmVzIDUvMThlbSBzcGFjaW5nIHRvIGVhY2ggPG1vPiBlbGVtZW50LlxuICAgIC8vIFxcbWlkZGxlIHNob3VsZCBnZXQgZGVsaW1pdGVyIHNwYWNpbmcgaW5zdGVhZC5cblxuICAgIG1pZGRsZU5vZGUuc2V0QXR0cmlidXRlKFwibHNwYWNlXCIsIFwiMC4wNWVtXCIpO1xuICAgIG1pZGRsZU5vZGUuc2V0QXR0cmlidXRlKFwicnNwYWNlXCIsIFwiMC4wNWVtXCIpO1xuICAgIHJldHVybiBtaWRkbGVOb2RlO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9lbmNsb3NlLmpzXG5cblxuXG5cblxuXG5cblxuXG52YXIgZW5jbG9zZV9odG1sQnVpbGRlciA9IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gIC8vIFxcY2FuY2VsLCBcXGJjYW5jZWwsIFxceGNhbmNlbCwgXFxzb3V0LCBcXGZib3gsIFxcY29sb3Jib3gsIFxcZmNvbG9yYm94XG4gIC8vIFNvbWUgZ3JvdXBzIGNhbiByZXR1cm4gZG9jdW1lbnQgZnJhZ21lbnRzLiAgSGFuZGxlIHRob3NlIGJ5IHdyYXBwaW5nXG4gIC8vIHRoZW0gaW4gYSBzcGFuLlxuICB2YXIgaW5uZXIgPSBidWlsZENvbW1vbi53cmFwRnJhZ21lbnQoYnVpbGRIVE1MX2J1aWxkR3JvdXAoZ3JvdXAuYm9keSwgb3B0aW9ucyksIG9wdGlvbnMpO1xuICB2YXIgbGFiZWwgPSBncm91cC5sYWJlbC5zdWJzdHIoMSk7XG4gIHZhciBzY2FsZSA9IG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gIHZhciBpbWc7XG4gIHZhciBpbWdTaGlmdCA9IDA7IC8vIEluIHRoZSBMYVRlWCBjYW5jZWwgcGFja2FnZSwgbGluZSBnZW9tZXRyeSBpcyBzbGlnaHRseSBkaWZmZXJlbnRcbiAgLy8gZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIHN1YmplY3QgaXMgd2lkZXIgdGhhbiBpdCBpcyB0YWxsLCBvciB2aWNlIHZlcnNhLlxuICAvLyBXZSBkb24ndCBrbm93IHRoZSB3aWR0aCBvZiBhIGdyb3VwLCBzbyBhcyBhIHByb3h5LCB3ZSB0ZXN0IGlmXG4gIC8vIHRoZSBzdWJqZWN0IGlzIGEgc2luZ2xlIGNoYXJhY3Rlci4gVGhpcyBjYXB0dXJlcyBtb3N0IG9mIHRoZVxuICAvLyBzdWJqZWN0cyB0aGF0IHNob3VsZCBnZXQgdGhlIFwidGFsbFwiIHRyZWF0bWVudC5cblxuICB2YXIgaXNTaW5nbGVDaGFyID0gdXRpbHMuaXNDaGFyYWN0ZXJCb3goZ3JvdXAuYm9keSk7XG5cbiAgaWYgKGxhYmVsID09PSBcInNvdXRcIikge1xuICAgIGltZyA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcInN0cmV0Y2h5XCIsIFwic291dFwiXSk7XG4gICAgaW1nLmhlaWdodCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcyAvIHNjYWxlO1xuICAgIGltZ1NoaWZ0ID0gLTAuNSAqIG9wdGlvbnMuZm9udE1ldHJpY3MoKS54SGVpZ2h0O1xuICB9IGVsc2Uge1xuICAgIC8vIEFkZCBob3Jpem9udGFsIHBhZGRpbmdcbiAgICBpZiAoL2NhbmNlbC8udGVzdChsYWJlbCkpIHtcbiAgICAgIGlmICghaXNTaW5nbGVDaGFyKSB7XG4gICAgICAgIGlubmVyLmNsYXNzZXMucHVzaChcImNhbmNlbC1wYWRcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlubmVyLmNsYXNzZXMucHVzaChcImJveHBhZFwiKTtcbiAgICB9IC8vIEFkZCB2ZXJ0aWNhbCBwYWRkaW5nXG5cblxuICAgIHZhciB2ZXJ0UGFkID0gMDtcbiAgICB2YXIgcnVsZVRoaWNrbmVzcyA9IDA7IC8vIHJlZjogY2FuY2VsIHBhY2thZ2U6IFxcYWR2YW5jZVxcdG90YWxoZWlnaHQyXFxwQCAlIFwiKzJcIlxuXG4gICAgaWYgKC9ib3gvLnRlc3QobGFiZWwpKSB7XG4gICAgICBydWxlVGhpY2tuZXNzID0gTWF0aC5tYXgob3B0aW9ucy5mb250TWV0cmljcygpLmZib3hydWxlLCAvLyBkZWZhdWx0XG4gICAgICBvcHRpb25zLm1pblJ1bGVUaGlja25lc3MgLy8gVXNlciBvdmVycmlkZS5cbiAgICAgICk7XG4gICAgICB2ZXJ0UGFkID0gb3B0aW9ucy5mb250TWV0cmljcygpLmZib3hzZXAgKyAobGFiZWwgPT09IFwiY29sb3Jib3hcIiA/IDAgOiBydWxlVGhpY2tuZXNzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmVydFBhZCA9IGlzU2luZ2xlQ2hhciA/IDAuMiA6IDA7XG4gICAgfVxuXG4gICAgaW1nID0gc3RyZXRjaHkuZW5jbG9zZVNwYW4oaW5uZXIsIGxhYmVsLCB2ZXJ0UGFkLCBvcHRpb25zKTtcblxuICAgIGlmICgvZmJveHxib3hlZHxmY29sb3Jib3gvLnRlc3QobGFiZWwpKSB7XG4gICAgICBpbWcuc3R5bGUuYm9yZGVyU3R5bGUgPSBcInNvbGlkXCI7XG4gICAgICBpbWcuc3R5bGUuYm9yZGVyV2lkdGggPSBydWxlVGhpY2tuZXNzICsgXCJlbVwiO1xuICAgIH1cblxuICAgIGltZ1NoaWZ0ID0gaW5uZXIuZGVwdGggKyB2ZXJ0UGFkO1xuXG4gICAgaWYgKGdyb3VwLmJhY2tncm91bmRDb2xvcikge1xuICAgICAgaW1nLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGdyb3VwLmJhY2tncm91bmRDb2xvcjtcblxuICAgICAgaWYgKGdyb3VwLmJvcmRlckNvbG9yKSB7XG4gICAgICAgIGltZy5zdHlsZS5ib3JkZXJDb2xvciA9IGdyb3VwLmJvcmRlckNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciB2bGlzdDtcblxuICBpZiAoZ3JvdXAuYmFja2dyb3VuZENvbG9yKSB7XG4gICAgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgY2hpbGRyZW46IFsvLyBQdXQgdGhlIGNvbG9yIGJhY2tncm91bmQgYmVoaW5kIGlubmVyO1xuICAgICAge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogaW1nLFxuICAgICAgICBzaGlmdDogaW1nU2hpZnRcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGlubmVyLFxuICAgICAgICBzaGlmdDogMFxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICBjaGlsZHJlbjogWy8vIFdyaXRlIHRoZSBcXGNhbmNlbCBzdHJva2Ugb24gdG9wIG9mIGlubmVyLlxuICAgICAge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogaW5uZXIsXG4gICAgICAgIHNoaWZ0OiAwXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBpbWcsXG4gICAgICAgIHNoaWZ0OiBpbWdTaGlmdCxcbiAgICAgICAgd3JhcHBlckNsYXNzZXM6IC9jYW5jZWwvLnRlc3QobGFiZWwpID8gW1wic3ZnLWFsaWduXCJdIDogW11cbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH1cblxuICBpZiAoL2NhbmNlbC8udGVzdChsYWJlbCkpIHtcbiAgICAvLyBUaGUgY2FuY2VsIHBhY2thZ2UgZG9jdW1lbnRhdGlvbiBzYXlzIHRoYXQgY2FuY2VsIGxpbmVzIGFkZCB0aGVpciBoZWlnaHRcbiAgICAvLyB0byB0aGUgZXhwcmVzc2lvbiwgYnV0IHRlc3RzIHNob3cgdGhhdCBpc24ndCBob3cgaXQgYWN0dWFsbHkgd29ya3MuXG4gICAgdmxpc3QuaGVpZ2h0ID0gaW5uZXIuaGVpZ2h0O1xuICAgIHZsaXN0LmRlcHRoID0gaW5uZXIuZGVwdGg7XG4gIH1cblxuICBpZiAoL2NhbmNlbC8udGVzdChsYWJlbCkgJiYgIWlzU2luZ2xlQ2hhcikge1xuICAgIC8vIGNhbmNlbCBkb2VzIG5vdCBjcmVhdGUgaG9yaXogc3BhY2UgZm9yIGl0cyBsaW5lIGV4dGVuc2lvbi5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcImNhbmNlbC1sYXBcIl0sIFt2bGlzdF0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCJdLCBbdmxpc3RdLCBvcHRpb25zKTtcbiAgfVxufTtcblxudmFyIGVuY2xvc2VfbWF0aG1sQnVpbGRlciA9IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIGZib3hzZXAgPSAwO1xuICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKGdyb3VwLmxhYmVsLmluZGV4T2YoXCJjb2xvcmJveFwiKSA+IC0xID8gXCJtcGFkZGVkXCIgOiBcIm1lbmNsb3NlXCIsIFtidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpXSk7XG5cbiAgc3dpdGNoIChncm91cC5sYWJlbCkge1xuICAgIGNhc2UgXCJcXFxcY2FuY2VsXCI6XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm5vdGF0aW9uXCIsIFwidXBkaWFnb25hbHN0cmlrZVwiKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIlxcXFxiY2FuY2VsXCI6XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm5vdGF0aW9uXCIsIFwiZG93bmRpYWdvbmFsc3RyaWtlXCIpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiXFxcXHNvdXRcIjpcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibm90YXRpb25cIiwgXCJob3Jpem9udGFsc3RyaWtlXCIpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiXFxcXGZib3hcIjpcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibm90YXRpb25cIiwgXCJib3hcIik7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJcXFxcZmNvbG9yYm94XCI6XG4gICAgY2FzZSBcIlxcXFxjb2xvcmJveFwiOlxuICAgICAgLy8gPG1lbmNsb3NlPiBkb2Vzbid0IGhhdmUgYSBnb29kIG5vdGF0aW9uIG9wdGlvbi4gU28gdXNlIDxtcGFkZGVkPlxuICAgICAgLy8gaW5zdGVhZC4gU2V0IHNvbWUgYXR0cmlidXRlcyB0aGF0IGNvbWUgaW5jbHVkZWQgd2l0aCA8bWVuY2xvc2U+LlxuICAgICAgZmJveHNlcCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5mYm94c2VwICogb3B0aW9ucy5mb250TWV0cmljcygpLnB0UGVyRW07XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFwiK1wiICsgMiAqIGZib3hzZXAgKyBcInB0XCIpO1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgXCIrXCIgKyAyICogZmJveHNlcCArIFwicHRcIik7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImxzcGFjZVwiLCBmYm94c2VwICsgXCJwdFwiKTsgLy9cblxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ2b2Zmc2V0XCIsIGZib3hzZXAgKyBcInB0XCIpO1xuXG4gICAgICBpZiAoZ3JvdXAubGFiZWwgPT09IFwiXFxcXGZjb2xvcmJveFwiKSB7XG4gICAgICAgIHZhciB0aGsgPSBNYXRoLm1heChvcHRpb25zLmZvbnRNZXRyaWNzKCkuZmJveHJ1bGUsIC8vIGRlZmF1bHRcbiAgICAgICAgb3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzIC8vIHVzZXIgb3ZlcnJpZGVcbiAgICAgICAgKTtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcImJvcmRlcjogXCIgKyB0aGsgKyBcImVtIHNvbGlkIFwiICsgU3RyaW5nKGdyb3VwLmJvcmRlckNvbG9yKSk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIlxcXFx4Y2FuY2VsXCI6XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm5vdGF0aW9uXCIsIFwidXBkaWFnb25hbHN0cmlrZSBkb3duZGlhZ29uYWxzdHJpa2VcIik7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGlmIChncm91cC5iYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGhiYWNrZ3JvdW5kXCIsIGdyb3VwLmJhY2tncm91bmRDb2xvcik7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJlbmNsb3NlXCIsXG4gIG5hbWVzOiBbXCJcXFxcY29sb3Jib3hcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMixcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGdyZWVkaW5lc3M6IDMsXG4gICAgYXJnVHlwZXM6IFtcImNvbG9yXCIsIFwidGV4dFwiXVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MsIG9wdEFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZi5wYXJzZXIsXG4gICAgICAgIGZ1bmNOYW1lID0gX3JlZi5mdW5jTmFtZTtcbiAgICB2YXIgY29sb3IgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcImNvbG9yLXRva2VuXCIpLmNvbG9yO1xuICAgIHZhciBib2R5ID0gYXJnc1sxXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJlbmNsb3NlXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGxhYmVsOiBmdW5jTmFtZSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogY29sb3IsXG4gICAgICBib2R5OiBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGVuY2xvc2VfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGVuY2xvc2VfbWF0aG1sQnVpbGRlclxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiZW5jbG9zZVwiLFxuICBuYW1lczogW1wiXFxcXGZjb2xvcmJveFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAzLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgZ3JlZWRpbmVzczogMyxcbiAgICBhcmdUeXBlczogW1wiY29sb3JcIiwgXCJjb2xvclwiLCBcInRleHRcIl1cbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmMiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmMi5wYXJzZXIsXG4gICAgICAgIGZ1bmNOYW1lID0gX3JlZjIuZnVuY05hbWU7XG4gICAgdmFyIGJvcmRlckNvbG9yID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXSwgXCJjb2xvci10b2tlblwiKS5jb2xvcjtcbiAgICB2YXIgYmFja2dyb3VuZENvbG9yID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1sxXSwgXCJjb2xvci10b2tlblwiKS5jb2xvcjtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMl07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZW5jbG9zZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IGJhY2tncm91bmRDb2xvcixcbiAgICAgIGJvcmRlckNvbG9yOiBib3JkZXJDb2xvcixcbiAgICAgIGJvZHk6IGJvZHlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZW5jbG9zZV9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogZW5jbG9zZV9tYXRobWxCdWlsZGVyXG59KTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJlbmNsb3NlXCIsXG4gIG5hbWVzOiBbXCJcXFxcZmJveFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJoYm94XCJdLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmMywgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmMy5wYXJzZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZW5jbG9zZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogXCJcXFxcZmJveFwiLFxuICAgICAgYm9keTogYXJnc1swXVxuICAgIH07XG4gIH1cbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImVuY2xvc2VcIixcbiAgbmFtZXM6IFtcIlxcXFxjYW5jZWxcIiwgXCJcXFxcYmNhbmNlbFwiLCBcIlxcXFx4Y2FuY2VsXCIsIFwiXFxcXHNvdXRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWY0LCBhcmdzLCBvcHRBcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWY0LnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmNC5mdW5jTmFtZTtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZW5jbG9zZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBib2R5OiBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGVuY2xvc2VfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGVuY2xvc2VfbWF0aG1sQnVpbGRlclxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9kZWZpbmVFbnZpcm9ubWVudC5qc1xuXG5cbi8qKlxuICogQWxsIHJlZ2lzdGVyZWQgZW52aXJvbm1lbnRzLlxuICogYGVudmlyb25tZW50cy5qc2AgZXhwb3J0cyB0aGlzIHNhbWUgZGljdGlvbmFyeSBhZ2FpbiBhbmQgbWFrZXMgaXQgcHVibGljLlxuICogYFBhcnNlci5qc2AgcmVxdWlyZXMgdGhpcyBkaWN0aW9uYXJ5IHZpYSBgZW52aXJvbm1lbnRzLmpzYC5cbiAqL1xudmFyIF9lbnZpcm9ubWVudHMgPSB7fTtcbmZ1bmN0aW9uIGRlZmluZUVudmlyb25tZW50KF9yZWYpIHtcbiAgdmFyIHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICBuYW1lcyA9IF9yZWYubmFtZXMsXG4gICAgICBwcm9wcyA9IF9yZWYucHJvcHMsXG4gICAgICBoYW5kbGVyID0gX3JlZi5oYW5kbGVyLFxuICAgICAgaHRtbEJ1aWxkZXIgPSBfcmVmLmh0bWxCdWlsZGVyLFxuICAgICAgbWF0aG1sQnVpbGRlciA9IF9yZWYubWF0aG1sQnVpbGRlcjtcbiAgLy8gU2V0IGRlZmF1bHQgdmFsdWVzIG9mIGVudmlyb25tZW50cy5cbiAgdmFyIGRhdGEgPSB7XG4gICAgdHlwZTogdHlwZSxcbiAgICBudW1BcmdzOiBwcm9wcy5udW1BcmdzIHx8IDAsXG4gICAgZ3JlZWRpbmVzczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiBmYWxzZSxcbiAgICBudW1PcHRpb25hbEFyZ3M6IDAsXG4gICAgaGFuZGxlcjogaGFuZGxlclxuICB9O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBUT0RPOiBUaGUgdmFsdWUgdHlwZSBvZiBfZW52aXJvbm1lbnRzIHNob3VsZCBiZSBhIHR5cGUgdW5pb24gb2YgYWxsXG4gICAgLy8gcG9zc2libGUgYEVudlNwZWM8PmAgcG9zc2liaWxpdGllcyBpbnN0ZWFkIG9mIGBFbnZTcGVjPCo+YCwgd2hpY2ggaXNcbiAgICAvLyBhbiBleGlzdGVudGlhbCB0eXBlLlxuICAgIC8vICRGbG93Rml4TWVcbiAgICBfZW52aXJvbm1lbnRzW25hbWVzW2ldXSA9IGRhdGE7XG4gIH1cblxuICBpZiAoaHRtbEJ1aWxkZXIpIHtcbiAgICBfaHRtbEdyb3VwQnVpbGRlcnNbdHlwZV0gPSBodG1sQnVpbGRlcjtcbiAgfVxuXG4gIGlmIChtYXRobWxCdWlsZGVyKSB7XG4gICAgX21hdGhtbEdyb3VwQnVpbGRlcnNbdHlwZV0gPSBtYXRobWxCdWlsZGVyO1xuICB9XG59XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9lbnZpcm9ubWVudHMvYXJyYXkuanNcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuZnVuY3Rpb24gZ2V0SExpbmVzKHBhcnNlcikge1xuICAvLyBSZXR1cm4gYW4gYXJyYXkuIFRoZSBhcnJheSBsZW5ndGggPSBudW1iZXIgb2YgaGxpbmVzLlxuICAvLyBFYWNoIGVsZW1lbnQgaW4gdGhlIGFycmF5IHRlbGxzIGlmIHRoZSBsaW5lIGlzIGRhc2hlZC5cbiAgdmFyIGhsaW5lSW5mbyA9IFtdO1xuICBwYXJzZXIuY29uc3VtZVNwYWNlcygpO1xuICB2YXIgbnh0ID0gcGFyc2VyLm5leHRUb2tlbi50ZXh0O1xuXG4gIHdoaWxlIChueHQgPT09IFwiXFxcXGhsaW5lXCIgfHwgbnh0ID09PSBcIlxcXFxoZGFzaGxpbmVcIikge1xuICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgaGxpbmVJbmZvLnB1c2gobnh0ID09PSBcIlxcXFxoZGFzaGxpbmVcIik7XG4gICAgcGFyc2VyLmNvbnN1bWVTcGFjZXMoKTtcbiAgICBueHQgPSBwYXJzZXIubmV4dFRva2VuLnRleHQ7XG4gIH1cblxuICByZXR1cm4gaGxpbmVJbmZvO1xufVxuLyoqXG4gKiBQYXJzZSB0aGUgYm9keSBvZiB0aGUgZW52aXJvbm1lbnQsIHdpdGggcm93cyBkZWxpbWl0ZWQgYnkgXFxcXCBhbmRcbiAqIGNvbHVtbnMgZGVsaW1pdGVkIGJ5ICYsIGFuZCBjcmVhdGUgYSBuZXN0ZWQgbGlzdCBpbiByb3ctbWFqb3Igb3JkZXJcbiAqIHdpdGggb25lIGdyb3VwIHBlciBjZWxsLiAgSWYgZ2l2ZW4gYW4gb3B0aW9uYWwgYXJndW1lbnQgc3R5bGVcbiAqIChcInRleHRcIiwgXCJkaXNwbGF5XCIsIGV0Yy4pLCB0aGVuIGVhY2ggY2VsbCBpcyBjYXN0IGludG8gdGhhdCBzdHlsZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHBhcnNlQXJyYXkocGFyc2VyLCBfcmVmLCBzdHlsZSkge1xuICB2YXIgaHNraXBCZWZvcmVBbmRBZnRlciA9IF9yZWYuaHNraXBCZWZvcmVBbmRBZnRlcixcbiAgICAgIGFkZEpvdCA9IF9yZWYuYWRkSm90LFxuICAgICAgY29scyA9IF9yZWYuY29scyxcbiAgICAgIGFycmF5c3RyZXRjaCA9IF9yZWYuYXJyYXlzdHJldGNoLFxuICAgICAgY29sU2VwYXJhdGlvblR5cGUgPSBfcmVmLmNvbFNlcGFyYXRpb25UeXBlO1xuICAvLyBQYXJzZSBib2R5IG9mIGFycmF5IHdpdGggXFxcXCB0ZW1wb3JhcmlseSBtYXBwZWQgdG8gXFxjclxuICBwYXJzZXIuZ3VsbGV0LmJlZ2luR3JvdXAoKTtcbiAgcGFyc2VyLmd1bGxldC5tYWNyb3Muc2V0KFwiXFxcXFxcXFxcIiwgXCJcXFxcY3JcIik7IC8vIEdldCBjdXJyZW50IGFycmF5c3RyZXRjaCBpZiBpdCdzIG5vdCBzZXQgYnkgdGhlIGVudmlyb25tZW50XG5cbiAgaWYgKCFhcnJheXN0cmV0Y2gpIHtcbiAgICB2YXIgc3RyZXRjaCA9IHBhcnNlci5ndWxsZXQuZXhwYW5kTWFjcm9Bc1RleHQoXCJcXFxcYXJyYXlzdHJldGNoXCIpO1xuXG4gICAgaWYgKHN0cmV0Y2ggPT0gbnVsbCkge1xuICAgICAgLy8gRGVmYXVsdCBcXGFycmF5c3RyZXRjaCBmcm9tIGx0dGFiLmR0eFxuICAgICAgYXJyYXlzdHJldGNoID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJyYXlzdHJldGNoID0gcGFyc2VGbG9hdChzdHJldGNoKTtcblxuICAgICAgaWYgKCFhcnJheXN0cmV0Y2ggfHwgYXJyYXlzdHJldGNoIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJJbnZhbGlkIFxcXFxhcnJheXN0cmV0Y2g6IFwiICsgc3RyZXRjaCk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIFN0YXJ0IGdyb3VwIGZvciBmaXJzdCBjZWxsXG5cblxuICBwYXJzZXIuZ3VsbGV0LmJlZ2luR3JvdXAoKTtcbiAgdmFyIHJvdyA9IFtdO1xuICB2YXIgYm9keSA9IFtyb3ddO1xuICB2YXIgcm93R2FwcyA9IFtdO1xuICB2YXIgaExpbmVzQmVmb3JlUm93ID0gW107IC8vIFRlc3QgZm9yIFxcaGxpbmUgYXQgdGhlIHRvcCBvZiB0aGUgYXJyYXkuXG5cbiAgaExpbmVzQmVmb3JlUm93LnB1c2goZ2V0SExpbmVzKHBhcnNlcikpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICAvLyBQYXJzZSBlYWNoIGNlbGwgaW4gaXRzIG93biBncm91cCAobmFtZXNwYWNlKVxuICAgIHZhciBjZWxsID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbihmYWxzZSwgXCJcXFxcY3JcIik7XG4gICAgcGFyc2VyLmd1bGxldC5lbmRHcm91cCgpO1xuICAgIHBhcnNlci5ndWxsZXQuYmVnaW5Hcm91cCgpO1xuICAgIGNlbGwgPSB7XG4gICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IGNlbGxcbiAgICB9O1xuXG4gICAgaWYgKHN0eWxlKSB7XG4gICAgICBjZWxsID0ge1xuICAgICAgICB0eXBlOiBcInN0eWxpbmdcIixcbiAgICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgYm9keTogW2NlbGxdXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJvdy5wdXNoKGNlbGwpO1xuICAgIHZhciBuZXh0ID0gcGFyc2VyLm5leHRUb2tlbi50ZXh0O1xuXG4gICAgaWYgKG5leHQgPT09IFwiJlwiKSB7XG4gICAgICBwYXJzZXIuY29uc3VtZSgpO1xuICAgIH0gZWxzZSBpZiAobmV4dCA9PT0gXCJcXFxcZW5kXCIpIHtcbiAgICAgIC8vIEFycmF5cyB0ZXJtaW5hdGUgbmV3bGluZXMgd2l0aCBgXFxjcmNyYCB3aGljaCBjb25zdW1lcyBhIGBcXGNyYCBpZlxuICAgICAgLy8gdGhlIGxhc3QgbGluZSBpcyBlbXB0eS5cbiAgICAgIC8vIE5PVEU6IEN1cnJlbnRseSwgYGNlbGxgIGlzIHRoZSBsYXN0IGl0ZW0gYWRkZWQgaW50byBgcm93YC5cbiAgICAgIGlmIChyb3cubGVuZ3RoID09PSAxICYmIGNlbGwudHlwZSA9PT0gXCJzdHlsaW5nXCIgJiYgY2VsbC5ib2R5WzBdLmJvZHkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGJvZHkucG9wKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChoTGluZXNCZWZvcmVSb3cubGVuZ3RoIDwgYm9keS5sZW5ndGggKyAxKSB7XG4gICAgICAgIGhMaW5lc0JlZm9yZVJvdy5wdXNoKFtdKTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIGlmIChuZXh0ID09PSBcIlxcXFxjclwiKSB7XG4gICAgICB2YXIgY3IgPSBhc3NlcnROb2RlVHlwZShwYXJzZXIucGFyc2VGdW5jdGlvbigpLCBcImNyXCIpO1xuICAgICAgcm93R2Fwcy5wdXNoKGNyLnNpemUpOyAvLyBjaGVjayBmb3IgXFxobGluZShzKSBmb2xsb3dpbmcgdGhlIHJvdyBzZXBhcmF0b3JcblxuICAgICAgaExpbmVzQmVmb3JlUm93LnB1c2goZ2V0SExpbmVzKHBhcnNlcikpO1xuICAgICAgcm93ID0gW107XG4gICAgICBib2R5LnB1c2gocm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiRXhwZWN0ZWQgJiBvciBcXFxcXFxcXCBvciBcXFxcY3Igb3IgXFxcXGVuZFwiLCBwYXJzZXIubmV4dFRva2VuKTtcbiAgICB9XG4gIH0gLy8gRW5kIGNlbGwgZ3JvdXBcblxuXG4gIHBhcnNlci5ndWxsZXQuZW5kR3JvdXAoKTsgLy8gRW5kIGFycmF5IGdyb3VwIGRlZmluaW5nIFxcXFxcblxuICBwYXJzZXIuZ3VsbGV0LmVuZEdyb3VwKCk7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgIGFkZEpvdDogYWRkSm90LFxuICAgIGFycmF5c3RyZXRjaDogYXJyYXlzdHJldGNoLFxuICAgIGJvZHk6IGJvZHksXG4gICAgY29sczogY29scyxcbiAgICByb3dHYXBzOiByb3dHYXBzLFxuICAgIGhza2lwQmVmb3JlQW5kQWZ0ZXI6IGhza2lwQmVmb3JlQW5kQWZ0ZXIsXG4gICAgaExpbmVzQmVmb3JlUm93OiBoTGluZXNCZWZvcmVSb3csXG4gICAgY29sU2VwYXJhdGlvblR5cGU6IGNvbFNlcGFyYXRpb25UeXBlXG4gIH07XG59IC8vIERlY2lkZXMgb24gYSBzdHlsZSBmb3IgY2VsbHMgaW4gYW4gYXJyYXkgYWNjb3JkaW5nIHRvIHdoZXRoZXIgdGhlIGdpdmVuXG4vLyBlbnZpcm9ubWVudCBuYW1lIHN0YXJ0cyB3aXRoIHRoZSBsZXR0ZXIgJ2QnLlxuXG5cbmZ1bmN0aW9uIGRDZWxsU3R5bGUoZW52TmFtZSkge1xuICBpZiAoZW52TmFtZS5zdWJzdHIoMCwgMSkgPT09IFwiZFwiKSB7XG4gICAgcmV0dXJuIFwiZGlzcGxheVwiO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcInRleHRcIjtcbiAgfVxufVxuXG52YXIgYXJyYXlfaHRtbEJ1aWxkZXIgPSBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICB2YXIgcjtcbiAgdmFyIGM7XG4gIHZhciBuciA9IGdyb3VwLmJvZHkubGVuZ3RoO1xuICB2YXIgaExpbmVzQmVmb3JlUm93ID0gZ3JvdXAuaExpbmVzQmVmb3JlUm93O1xuICB2YXIgbmMgPSAwO1xuICB2YXIgYm9keSA9IG5ldyBBcnJheShucik7XG4gIHZhciBobGluZXMgPSBbXTtcbiAgdmFyIHJ1bGVUaGlja25lc3MgPSBNYXRoLm1heCggLy8gRnJvbSBMYVRlWCBcXHNob3d0aGVcXGFycmF5cnVsZXdpZHRoLiBFcXVhbHMgMC4wNCBlbS5cbiAgb3B0aW9ucy5mb250TWV0cmljcygpLmFycmF5UnVsZVdpZHRoLCBvcHRpb25zLm1pblJ1bGVUaGlja25lc3MgLy8gVXNlciBvdmVycmlkZS5cbiAgKTsgLy8gSG9yaXpvbnRhbCBzcGFjaW5nXG5cbiAgdmFyIHB0ID0gMSAvIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5wdFBlckVtO1xuICB2YXIgYXJyYXljb2xzZXAgPSA1ICogcHQ7IC8vIGRlZmF1bHQgdmFsdWUsIGkuZS4gXFxhcnJheWNvbHNlcCBpbiBhcnRpY2xlLmNsc1xuXG4gIGlmIChncm91cC5jb2xTZXBhcmF0aW9uVHlwZSAmJiBncm91cC5jb2xTZXBhcmF0aW9uVHlwZSA9PT0gXCJzbWFsbFwiKSB7XG4gICAgLy8gV2UncmUgaW4gYSB7c21hbGxtYXRyaXh9LiBEZWZhdWx0IGNvbHVtbiBzcGFjZSBpcyBcXHRoaWNrc3BhY2UsXG4gICAgLy8gaS5lLiA1LzE4ZW0gPSAwLjI3NzhlbSwgcGVyIGFtc21hdGguZHR4IGZvciB7c21hbGxtYXRyaXh9LlxuICAgIC8vIEJ1dCB0aGF0IG5lZWRzIGFkanVzdG1lbnQgYmVjYXVzZSBMYVRlWCBhcHBsaWVzIFxcc2NyaXB0c3R5bGUgdG8gdGhlXG4gICAgLy8gZW50aXJlIGFycmF5LCBpbmNsdWRpbmcgdGhlIGNvbHNwYWNlLCBidXQgdGhpcyBmdW5jdGlvbiBhcHBsaWVzXG4gICAgLy8gXFxzY3JpcHRzdHlsZSBvbmx5IGluc2lkZSBlYWNoIGVsZW1lbnQuXG4gICAgdmFyIGxvY2FsTXVsdGlwbGllciA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoc3JjX1N0eWxlLlNDUklQVCkuc2l6ZU11bHRpcGxpZXI7XG4gICAgYXJyYXljb2xzZXAgPSAwLjI3NzggKiAobG9jYWxNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcik7XG4gIH0gLy8gVmVydGljYWwgc3BhY2luZ1xuXG5cbiAgdmFyIGJhc2VsaW5lc2tpcCA9IDEyICogcHQ7IC8vIHNlZSBzaXplMTAuY2xvXG4gIC8vIERlZmF1bHQgXFxqb3QgZnJvbSBsdG1hdGguZHR4XG4gIC8vIFRPRE8oZWRlbWFpbmUpOiBhbGxvdyBvdmVycmlkaW5nIFxcam90IHZpYSBcXHNldGxlbmd0aCAoIzY4NylcblxuICB2YXIgam90ID0gMyAqIHB0O1xuICB2YXIgYXJyYXlza2lwID0gZ3JvdXAuYXJyYXlzdHJldGNoICogYmFzZWxpbmVza2lwO1xuICB2YXIgYXJzdHJ1dEhlaWdodCA9IDAuNyAqIGFycmF5c2tpcDsgLy8gXFxzdHJ1dGJveCBpbiBsdGZzc3RyYy5kdHggYW5kXG5cbiAgdmFyIGFyc3RydXREZXB0aCA9IDAuMyAqIGFycmF5c2tpcDsgLy8gXFxAYXJzdHJ1dGJveCBpbiBsdHRhYi5kdHhcblxuICB2YXIgdG90YWxIZWlnaHQgPSAwOyAvLyBTZXQgYSBwb3NpdGlvbiBmb3IgXFxobGluZShzKSBhdCB0aGUgdG9wIG9mIHRoZSBhcnJheSwgaWYgYW55LlxuXG4gIGZ1bmN0aW9uIHNldEhMaW5lUG9zKGhsaW5lc0luR2FwKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBobGluZXNJbkdhcC5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgIHRvdGFsSGVpZ2h0ICs9IDAuMjU7XG4gICAgICB9XG5cbiAgICAgIGhsaW5lcy5wdXNoKHtcbiAgICAgICAgcG9zOiB0b3RhbEhlaWdodCxcbiAgICAgICAgaXNEYXNoZWQ6IGhsaW5lc0luR2FwW2ldXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzZXRITGluZVBvcyhoTGluZXNCZWZvcmVSb3dbMF0pO1xuXG4gIGZvciAociA9IDA7IHIgPCBncm91cC5ib2R5Lmxlbmd0aDsgKytyKSB7XG4gICAgdmFyIGlucm93ID0gZ3JvdXAuYm9keVtyXTtcbiAgICB2YXIgaGVpZ2h0ID0gYXJzdHJ1dEhlaWdodDsgLy8gXFxAYXJyYXkgYWRkcyBhbiBcXEBhcnN0cnV0XG5cbiAgICB2YXIgZGVwdGggPSBhcnN0cnV0RGVwdGg7IC8vIHRvIGVhY2ggdG93ICh2aWEgdGhlIHRlbXBsYXRlKVxuXG4gICAgaWYgKG5jIDwgaW5yb3cubGVuZ3RoKSB7XG4gICAgICBuYyA9IGlucm93Lmxlbmd0aDtcbiAgICB9XG5cbiAgICB2YXIgb3V0cm93ID0gbmV3IEFycmF5KGlucm93Lmxlbmd0aCk7XG5cbiAgICBmb3IgKGMgPSAwOyBjIDwgaW5yb3cubGVuZ3RoOyArK2MpIHtcbiAgICAgIHZhciBlbHQgPSBidWlsZEhUTUxfYnVpbGRHcm91cChpbnJvd1tjXSwgb3B0aW9ucyk7XG5cbiAgICAgIGlmIChkZXB0aCA8IGVsdC5kZXB0aCkge1xuICAgICAgICBkZXB0aCA9IGVsdC5kZXB0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKGhlaWdodCA8IGVsdC5oZWlnaHQpIHtcbiAgICAgICAgaGVpZ2h0ID0gZWx0LmhlaWdodDtcbiAgICAgIH1cblxuICAgICAgb3V0cm93W2NdID0gZWx0O1xuICAgIH1cblxuICAgIHZhciByb3dHYXAgPSBncm91cC5yb3dHYXBzW3JdO1xuICAgIHZhciBnYXAgPSAwO1xuXG4gICAgaWYgKHJvd0dhcCkge1xuICAgICAgZ2FwID0gdW5pdHNfY2FsY3VsYXRlU2l6ZShyb3dHYXAsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAoZ2FwID4gMCkge1xuICAgICAgICAvLyBcXEBhcmdhcnJheWNyXG4gICAgICAgIGdhcCArPSBhcnN0cnV0RGVwdGg7XG5cbiAgICAgICAgaWYgKGRlcHRoIDwgZ2FwKSB7XG4gICAgICAgICAgZGVwdGggPSBnYXA7IC8vIFxcQHhhcmdhcnJheWNyXG4gICAgICAgIH1cblxuICAgICAgICBnYXAgPSAwO1xuICAgICAgfVxuICAgIH0gLy8gSW4gQU1TIG11bHRpbGluZSBlbnZpcm9ubWVudHMgc3VjaCBhcyBhbGlnbmVkIGFuZCBnYXRoZXJlZCwgcm93c1xuICAgIC8vIGNvcnJlc3BvbmQgdG8gbGluZXMgdGhhdCBoYXZlIGFkZGl0aW9uYWwgXFxqb3QgYWRkZWQgdG8gdGhlXG4gICAgLy8gXFxiYXNlbGluZXNraXAgdmlhIFxcb3BlbnVwLlxuXG5cbiAgICBpZiAoZ3JvdXAuYWRkSm90KSB7XG4gICAgICBkZXB0aCArPSBqb3Q7XG4gICAgfVxuXG4gICAgb3V0cm93LmhlaWdodCA9IGhlaWdodDtcbiAgICBvdXRyb3cuZGVwdGggPSBkZXB0aDtcbiAgICB0b3RhbEhlaWdodCArPSBoZWlnaHQ7XG4gICAgb3V0cm93LnBvcyA9IHRvdGFsSGVpZ2h0O1xuICAgIHRvdGFsSGVpZ2h0ICs9IGRlcHRoICsgZ2FwOyAvLyBcXEB5YXJnYXJyYXljclxuXG4gICAgYm9keVtyXSA9IG91dHJvdzsgLy8gU2V0IGEgcG9zaXRpb24gZm9yIFxcaGxpbmUocyksIGlmIGFueS5cblxuICAgIHNldEhMaW5lUG9zKGhMaW5lc0JlZm9yZVJvd1tyICsgMV0pO1xuICB9XG5cbiAgdmFyIG9mZnNldCA9IHRvdGFsSGVpZ2h0IC8gMiArIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O1xuICB2YXIgY29sRGVzY3JpcHRpb25zID0gZ3JvdXAuY29scyB8fCBbXTtcbiAgdmFyIGNvbHMgPSBbXTtcbiAgdmFyIGNvbFNlcDtcbiAgdmFyIGNvbERlc2NyTnVtO1xuXG4gIGZvciAoYyA9IDAsIGNvbERlc2NyTnVtID0gMDsgLy8gQ29udGludWUgd2hpbGUgZWl0aGVyIHRoZXJlIGFyZSBtb3JlIGNvbHVtbnMgb3IgbW9yZSBjb2x1bW5cbiAgLy8gZGVzY3JpcHRpb25zLCBzbyB0cmFpbGluZyBzZXBhcmF0b3JzIGRvbid0IGdldCBsb3N0LlxuICBjIDwgbmMgfHwgY29sRGVzY3JOdW0gPCBjb2xEZXNjcmlwdGlvbnMubGVuZ3RoOyArK2MsICsrY29sRGVzY3JOdW0pIHtcbiAgICB2YXIgY29sRGVzY3IgPSBjb2xEZXNjcmlwdGlvbnNbY29sRGVzY3JOdW1dIHx8IHt9O1xuICAgIHZhciBmaXJzdFNlcGFyYXRvciA9IHRydWU7XG5cbiAgICB3aGlsZSAoY29sRGVzY3IudHlwZSA9PT0gXCJzZXBhcmF0b3JcIikge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBzZXBhcmF0b3IgaW4gYSByb3csIGFkZCBhIHNwYWNlXG4gICAgICAvLyBiZXR3ZWVuIHRoZW0uXG4gICAgICBpZiAoIWZpcnN0U2VwYXJhdG9yKSB7XG4gICAgICAgIGNvbFNlcCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImFycmF5Y29sc2VwXCJdLCBbXSk7XG4gICAgICAgIGNvbFNlcC5zdHlsZS53aWR0aCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5kb3VibGVSdWxlU2VwICsgXCJlbVwiO1xuICAgICAgICBjb2xzLnB1c2goY29sU2VwKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbERlc2NyLnNlcGFyYXRvciA9PT0gXCJ8XCIgfHwgY29sRGVzY3Iuc2VwYXJhdG9yID09PSBcIjpcIikge1xuICAgICAgICB2YXIgbGluZVR5cGUgPSBjb2xEZXNjci5zZXBhcmF0b3IgPT09IFwifFwiID8gXCJzb2xpZFwiIDogXCJkYXNoZWRcIjtcbiAgICAgICAgdmFyIHNlcGFyYXRvciA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcInZlcnRpY2FsLXNlcGFyYXRvclwiXSwgW10sIG9wdGlvbnMpO1xuICAgICAgICBzZXBhcmF0b3Iuc3R5bGUuaGVpZ2h0ID0gdG90YWxIZWlnaHQgKyBcImVtXCI7XG4gICAgICAgIHNlcGFyYXRvci5zdHlsZS5ib3JkZXJSaWdodFdpZHRoID0gcnVsZVRoaWNrbmVzcyArIFwiZW1cIjtcbiAgICAgICAgc2VwYXJhdG9yLnN0eWxlLmJvcmRlclJpZ2h0U3R5bGUgPSBsaW5lVHlwZTtcbiAgICAgICAgc2VwYXJhdG9yLnN0eWxlLm1hcmdpbiA9IFwiMCAtXCIgKyBydWxlVGhpY2tuZXNzIC8gMiArIFwiZW1cIjtcbiAgICAgICAgc2VwYXJhdG9yLnN0eWxlLnZlcnRpY2FsQWxpZ24gPSAtKHRvdGFsSGVpZ2h0IC0gb2Zmc2V0KSArIFwiZW1cIjtcbiAgICAgICAgY29scy5wdXNoKHNlcGFyYXRvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJJbnZhbGlkIHNlcGFyYXRvciB0eXBlOiBcIiArIGNvbERlc2NyLnNlcGFyYXRvcik7XG4gICAgICB9XG5cbiAgICAgIGNvbERlc2NyTnVtKys7XG4gICAgICBjb2xEZXNjciA9IGNvbERlc2NyaXB0aW9uc1tjb2xEZXNjck51bV0gfHwge307XG4gICAgICBmaXJzdFNlcGFyYXRvciA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChjID49IG5jKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgc2Vwd2lkdGggPSB2b2lkIDA7XG5cbiAgICBpZiAoYyA+IDAgfHwgZ3JvdXAuaHNraXBCZWZvcmVBbmRBZnRlcikge1xuICAgICAgc2Vwd2lkdGggPSB1dGlscy5kZWZsdChjb2xEZXNjci5wcmVnYXAsIGFycmF5Y29sc2VwKTtcblxuICAgICAgaWYgKHNlcHdpZHRoICE9PSAwKSB7XG4gICAgICAgIGNvbFNlcCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImFycmF5Y29sc2VwXCJdLCBbXSk7XG4gICAgICAgIGNvbFNlcC5zdHlsZS53aWR0aCA9IHNlcHdpZHRoICsgXCJlbVwiO1xuICAgICAgICBjb2xzLnB1c2goY29sU2VwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY29sID0gW107XG5cbiAgICBmb3IgKHIgPSAwOyByIDwgbnI7ICsrcikge1xuICAgICAgdmFyIHJvdyA9IGJvZHlbcl07XG4gICAgICB2YXIgZWxlbSA9IHJvd1tjXTtcblxuICAgICAgaWYgKCFlbGVtKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2hpZnQgPSByb3cucG9zIC0gb2Zmc2V0O1xuICAgICAgZWxlbS5kZXB0aCA9IHJvdy5kZXB0aDtcbiAgICAgIGVsZW0uaGVpZ2h0ID0gcm93LmhlaWdodDtcbiAgICAgIGNvbC5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGVsZW0sXG4gICAgICAgIHNoaWZ0OiBzaGlmdFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29sID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJpbmRpdmlkdWFsU2hpZnRcIixcbiAgICAgIGNoaWxkcmVuOiBjb2xcbiAgICB9LCBvcHRpb25zKTtcbiAgICBjb2wgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJjb2wtYWxpZ24tXCIgKyAoY29sRGVzY3IuYWxpZ24gfHwgXCJjXCIpXSwgW2NvbF0pO1xuICAgIGNvbHMucHVzaChjb2wpO1xuXG4gICAgaWYgKGMgPCBuYyAtIDEgfHwgZ3JvdXAuaHNraXBCZWZvcmVBbmRBZnRlcikge1xuICAgICAgc2Vwd2lkdGggPSB1dGlscy5kZWZsdChjb2xEZXNjci5wb3N0Z2FwLCBhcnJheWNvbHNlcCk7XG5cbiAgICAgIGlmIChzZXB3aWR0aCAhPT0gMCkge1xuICAgICAgICBjb2xTZXAgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJhcnJheWNvbHNlcFwiXSwgW10pO1xuICAgICAgICBjb2xTZXAuc3R5bGUud2lkdGggPSBzZXB3aWR0aCArIFwiZW1cIjtcbiAgICAgICAgY29scy5wdXNoKGNvbFNlcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm10YWJsZVwiXSwgY29scyk7IC8vIEFkZCBcXGhsaW5lKHMpLCBpZiBhbnkuXG5cbiAgaWYgKGhsaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGxpbmUgPSBidWlsZENvbW1vbi5tYWtlTGluZVNwYW4oXCJobGluZVwiLCBvcHRpb25zLCBydWxlVGhpY2tuZXNzKTtcbiAgICB2YXIgZGFzaGVzID0gYnVpbGRDb21tb24ubWFrZUxpbmVTcGFuKFwiaGRhc2hsaW5lXCIsIG9wdGlvbnMsIHJ1bGVUaGlja25lc3MpO1xuICAgIHZhciB2TGlzdEVsZW1zID0gW3tcbiAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgZWxlbTogYm9keSxcbiAgICAgIHNoaWZ0OiAwXG4gICAgfV07XG5cbiAgICB3aGlsZSAoaGxpbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBobGluZSA9IGhsaW5lcy5wb3AoKTtcbiAgICAgIHZhciBsaW5lU2hpZnQgPSBobGluZS5wb3MgLSBvZmZzZXQ7XG5cbiAgICAgIGlmIChobGluZS5pc0Rhc2hlZCkge1xuICAgICAgICB2TGlzdEVsZW1zLnB1c2goe1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IGRhc2hlcyxcbiAgICAgICAgICBzaGlmdDogbGluZVNoaWZ0XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdkxpc3RFbGVtcy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBsaW5lLFxuICAgICAgICAgIHNoaWZ0OiBsaW5lU2hpZnRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICBjaGlsZHJlbjogdkxpc3RFbGVtc1xuICAgIH0sIG9wdGlvbnMpO1xuICB9XG5cbiAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIl0sIFtib2R5XSwgb3B0aW9ucyk7XG59O1xuXG52YXIgYWxpZ25NYXAgPSB7XG4gIGM6IFwiY2VudGVyIFwiLFxuICBsOiBcImxlZnQgXCIsXG4gIHI6IFwicmlnaHQgXCJcbn07XG5cbnZhciBhcnJheV9tYXRobWxCdWlsZGVyID0gZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICB2YXIgdGFibGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10YWJsZVwiLCBncm91cC5ib2R5Lm1hcChmdW5jdGlvbiAocm93KSB7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRyXCIsIHJvdy5tYXAoZnVuY3Rpb24gKGNlbGwpIHtcbiAgICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZFwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChjZWxsLCBvcHRpb25zKV0pO1xuICAgIH0pKTtcbiAgfSkpOyAvLyBTZXQgY29sdW1uIGFsaWdubWVudCwgcm93IHNwYWNpbmcsIGNvbHVtbiBzcGFjaW5nLCBhbmRcbiAgLy8gYXJyYXkgbGluZXMgYnkgc2V0dGluZyBhdHRyaWJ1dGVzIG9uIHRoZSB0YWJsZSBlbGVtZW50LlxuICAvLyBTZXQgdGhlIHJvdyBzcGFjaW5nLiBJbiBNYXRoTUwsIHdlIHNwZWNpZnkgYSBnYXAgZGlzdGFuY2UuXG4gIC8vIFdlIGRvIG5vdCB1c2Ugcm93R2FwW10gYmVjYXVzZSBNYXRoTUwgYXV0b21hdGljYWxseSBpbmNyZWFzZXNcbiAgLy8gY2VsbCBoZWlnaHQgd2l0aCB0aGUgaGVpZ2h0L2RlcHRoIG9mIHRoZSBlbGVtZW50IGNvbnRlbnQuXG4gIC8vIExhVGVYIFxcYXJyYXlzdHJldGNoIG11bHRpcGxpZXMgdGhlIHJvdyBiYXNlbGluZS10by1iYXNlbGluZSBkaXN0YW5jZS5cbiAgLy8gV2Ugc2ltdWxhdGUgdGhpcyBieSBhZGRpbmcgKGFycmF5c3RyZXRjaCAtIDEpZW0gdG8gdGhlIGdhcC4gVGhpc1xuICAvLyBkb2VzIGEgcmVhc29uYWJsZSBqb2Igb2YgYWRqdXN0aW5nIGFycmF5cyBjb250YWluaW5nIDEgZW0gdGFsbCBjb250ZW50LlxuICAvLyBUaGUgMC4xNiBhbmQgMC4wOSB2YWx1ZXMgYXJlIGZvdW5kIGVtcHJpY2FsbHkuIFRoZXkgcHJvZHVjZSBhbiBhcnJheVxuICAvLyBzaW1pbGFyIHRvIExhVGVYIGFuZCBpbiB3aGljaCBjb250ZW50IGRvZXMgbm90IGludGVyZmVyZSB3aXRoIFxcaGluZXMuXG5cbiAgdmFyIGdhcCA9IGdyb3VwLmFycmF5c3RyZXRjaCA9PT0gMC41ID8gMC4xIC8vIHtzbWFsbG1hdHJpeH0sIHtzdWJhcnJheX1cbiAgOiAwLjE2ICsgZ3JvdXAuYXJyYXlzdHJldGNoIC0gMSArIChncm91cC5hZGRKb3QgPyAwLjA5IDogMCk7XG4gIHRhYmxlLnNldEF0dHJpYnV0ZShcInJvd3NwYWNpbmdcIiwgZ2FwICsgXCJlbVwiKTsgLy8gTWF0aE1MIHRhYmxlIGxpbmVzIGdvIG9ubHkgYmV0d2VlbiBjZWxscy5cbiAgLy8gVG8gcGxhY2UgYSBsaW5lIG9uIGFuIGVkZ2Ugd2UnbGwgdXNlIDxtZW5jbG9zZT4sIGlmIG5lY2Vzc2FyeS5cblxuICB2YXIgbWVuY2xvc2UgPSBcIlwiO1xuICB2YXIgYWxpZ24gPSBcIlwiO1xuXG4gIGlmIChncm91cC5jb2xzKSB7XG4gICAgLy8gRmluZCBjb2x1bW4gYWxpZ25tZW50LCBjb2x1bW4gc3BhY2luZywgYW5kICB2ZXJ0aWNhbCBsaW5lcy5cbiAgICB2YXIgY29scyA9IGdyb3VwLmNvbHM7XG4gICAgdmFyIGNvbHVtbkxpbmVzID0gXCJcIjtcbiAgICB2YXIgcHJldlR5cGVXYXNBbGlnbiA9IGZhbHNlO1xuICAgIHZhciBpU3RhcnQgPSAwO1xuICAgIHZhciBpRW5kID0gY29scy5sZW5ndGg7XG5cbiAgICBpZiAoY29sc1swXS50eXBlID09PSBcInNlcGFyYXRvclwiKSB7XG4gICAgICBtZW5jbG9zZSArPSBcInRvcCBcIjtcbiAgICAgIGlTdGFydCA9IDE7XG4gICAgfVxuXG4gICAgaWYgKGNvbHNbY29scy5sZW5ndGggLSAxXS50eXBlID09PSBcInNlcGFyYXRvclwiKSB7XG4gICAgICBtZW5jbG9zZSArPSBcImJvdHRvbSBcIjtcbiAgICAgIGlFbmQgLT0gMTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gaVN0YXJ0OyBpIDwgaUVuZDsgaSsrKSB7XG4gICAgICBpZiAoY29sc1tpXS50eXBlID09PSBcImFsaWduXCIpIHtcbiAgICAgICAgYWxpZ24gKz0gYWxpZ25NYXBbY29sc1tpXS5hbGlnbl07XG5cbiAgICAgICAgaWYgKHByZXZUeXBlV2FzQWxpZ24pIHtcbiAgICAgICAgICBjb2x1bW5MaW5lcyArPSBcIm5vbmUgXCI7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2VHlwZVdhc0FsaWduID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoY29sc1tpXS50eXBlID09PSBcInNlcGFyYXRvclwiKSB7XG4gICAgICAgIC8vIE1hdGhNTCBhY2NlcHRzIG9ubHkgc2luZ2xlIGxpbmVzIGJldHdlZW4gY2VsbHMuXG4gICAgICAgIC8vIFNvIHdlIHJlYWQgb25seSB0aGUgZmlyc3Qgb2YgY29uc2VjdXRpdmUgc2VwYXJhdG9ycy5cbiAgICAgICAgaWYgKHByZXZUeXBlV2FzQWxpZ24pIHtcbiAgICAgICAgICBjb2x1bW5MaW5lcyArPSBjb2xzW2ldLnNlcGFyYXRvciA9PT0gXCJ8XCIgPyBcInNvbGlkIFwiIDogXCJkYXNoZWQgXCI7XG4gICAgICAgICAgcHJldlR5cGVXYXNBbGlnbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGFibGUuc2V0QXR0cmlidXRlKFwiY29sdW1uYWxpZ25cIiwgYWxpZ24udHJpbSgpKTtcblxuICAgIGlmICgvW3NkXS8udGVzdChjb2x1bW5MaW5lcykpIHtcbiAgICAgIHRhYmxlLnNldEF0dHJpYnV0ZShcImNvbHVtbmxpbmVzXCIsIGNvbHVtbkxpbmVzLnRyaW0oKSk7XG4gICAgfVxuICB9IC8vIFNldCBjb2x1bW4gc3BhY2luZy5cblxuXG4gIGlmIChncm91cC5jb2xTZXBhcmF0aW9uVHlwZSA9PT0gXCJhbGlnblwiKSB7XG4gICAgdmFyIF9jb2xzID0gZ3JvdXAuY29scyB8fCBbXTtcblxuICAgIHZhciBzcGFjaW5nID0gXCJcIjtcblxuICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBfY29scy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHNwYWNpbmcgKz0gX2kgJSAyID8gXCIwZW0gXCIgOiBcIjFlbSBcIjtcbiAgICB9XG5cbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIHNwYWNpbmcudHJpbSgpKTtcbiAgfSBlbHNlIGlmIChncm91cC5jb2xTZXBhcmF0aW9uVHlwZSA9PT0gXCJhbGlnbmF0XCIpIHtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIFwiMGVtXCIpO1xuICB9IGVsc2UgaWYgKGdyb3VwLmNvbFNlcGFyYXRpb25UeXBlID09PSBcInNtYWxsXCIpIHtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIFwiMC4yNzc4ZW1cIik7XG4gIH0gZWxzZSB7XG4gICAgdGFibGUuc2V0QXR0cmlidXRlKFwiY29sdW1uc3BhY2luZ1wiLCBcIjFlbVwiKTtcbiAgfSAvLyBBZGRyZXNzIFxcaGxpbmUgYW5kIFxcaGRhc2hsaW5lXG5cblxuICB2YXIgcm93TGluZXMgPSBcIlwiO1xuICB2YXIgaGxpbmVzID0gZ3JvdXAuaExpbmVzQmVmb3JlUm93O1xuICBtZW5jbG9zZSArPSBobGluZXNbMF0ubGVuZ3RoID4gMCA/IFwibGVmdCBcIiA6IFwiXCI7XG4gIG1lbmNsb3NlICs9IGhsaW5lc1tobGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoID4gMCA/IFwicmlnaHQgXCIgOiBcIlwiO1xuXG4gIGZvciAodmFyIF9pMiA9IDE7IF9pMiA8IGhsaW5lcy5sZW5ndGggLSAxOyBfaTIrKykge1xuICAgIHJvd0xpbmVzICs9IGhsaW5lc1tfaTJdLmxlbmd0aCA9PT0gMCA/IFwibm9uZSBcIiAvLyBNYXRoTUwgYWNjZXB0cyBvbmx5IGEgc2luZ2xlIGxpbmUgYmV0d2VlbiByb3dzLiBSZWFkIG9uZSBlbGVtZW50LlxuICAgIDogaGxpbmVzW19pMl1bMF0gPyBcImRhc2hlZCBcIiA6IFwic29saWQgXCI7XG4gIH1cblxuICBpZiAoL1tzZF0vLnRlc3Qocm93TGluZXMpKSB7XG4gICAgdGFibGUuc2V0QXR0cmlidXRlKFwicm93bGluZXNcIiwgcm93TGluZXMudHJpbSgpKTtcbiAgfVxuXG4gIGlmIChtZW5jbG9zZSAhPT0gXCJcIikge1xuICAgIHRhYmxlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtZW5jbG9zZVwiLCBbdGFibGVdKTtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJub3RhdGlvblwiLCBtZW5jbG9zZS50cmltKCkpO1xuICB9XG5cbiAgaWYgKGdyb3VwLmFycmF5c3RyZXRjaCAmJiBncm91cC5hcnJheXN0cmV0Y2ggPCAxKSB7XG4gICAgLy8gQSBzbWFsbCBhcnJheS4gV3JhcCBpbiBzY3JpcHRzdHlsZSBzbyByb3cgZ2FwIGlzIG5vdCB0b28gbGFyZ2UuXG4gICAgdGFibGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1zdHlsZVwiLCBbdGFibGVdKTtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJzY3JpcHRsZXZlbFwiLCBcIjFcIik7XG4gIH1cblxuICByZXR1cm4gdGFibGU7XG59OyAvLyBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgYWxpZ25lZCBhbmQgYWxpZ25lZGF0IGVudmlyb25tZW50cy5cblxuXG52YXIgYXJyYXlfYWxpZ25lZEhhbmRsZXIgPSBmdW5jdGlvbiBhbGlnbmVkSGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gIHZhciBjb2xzID0gW107XG4gIHZhciByZXMgPSBwYXJzZUFycmF5KGNvbnRleHQucGFyc2VyLCB7XG4gICAgY29sczogY29scyxcbiAgICBhZGRKb3Q6IHRydWVcbiAgfSwgXCJkaXNwbGF5XCIpOyAvLyBEZXRlcm1pbmluZyBudW1iZXIgb2YgY29sdW1ucy5cbiAgLy8gMS4gSWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGdpdmVuLCB3ZSB1c2UgaXQgYXMgYSBudW1iZXIgb2YgY29sdW1ucyxcbiAgLy8gICAgYW5kIG1ha2VzIHN1cmUgdGhhdCBlYWNoIHJvdyBkb2Vzbid0IGV4Y2VlZCB0aGF0IG51bWJlci5cbiAgLy8gMi4gT3RoZXJ3aXNlLCBqdXN0IGNvdW50IG51bWJlciBvZiBjb2x1bW5zID0gbWF4aW11bSBudW1iZXJcbiAgLy8gICAgb2YgY2VsbHMgaW4gZWFjaCByb3cgKFwiYWxpZ25lZFwiIG1vZGUgLS0gaXNBbGlnbmVkIHdpbGwgYmUgdHJ1ZSkuXG4gIC8vXG4gIC8vIEF0IHRoZSBzYW1lIHRpbWUsIHByZXBlbmQgZW1wdHkgZ3JvdXAge30gYXQgYmVnaW5uaW5nIG9mIGV2ZXJ5IHNlY29uZFxuICAvLyBjZWxsIGluIGVhY2ggcm93IChzdGFydGluZyB3aXRoIHNlY29uZCBjZWxsKSBzbyB0aGF0IG9wZXJhdG9ycyBiZWNvbWVcbiAgLy8gYmluYXJ5LiAgVGhpcyBiZWhhdmlvciBpcyBpbXBsZW1lbnRlZCBpbiBhbXNtYXRoJ3MgXFxzdGFydEBhbGlnbmVkLlxuXG4gIHZhciBudW1NYXRocztcbiAgdmFyIG51bUNvbHMgPSAwO1xuICB2YXIgZW1wdHlHcm91cCA9IHtcbiAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgbW9kZTogY29udGV4dC5tb2RlLFxuICAgIGJvZHk6IFtdXG4gIH07XG4gIHZhciBvcmRncm91cCA9IGNoZWNrTm9kZVR5cGUoYXJnc1swXSwgXCJvcmRncm91cFwiKTtcblxuICBpZiAob3JkZ3JvdXApIHtcbiAgICB2YXIgYXJnMCA9IFwiXCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZGdyb3VwLmJvZHkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB0ZXh0b3JkID0gYXNzZXJ0Tm9kZVR5cGUob3JkZ3JvdXAuYm9keVtpXSwgXCJ0ZXh0b3JkXCIpO1xuICAgICAgYXJnMCArPSB0ZXh0b3JkLnRleHQ7XG4gICAgfVxuXG4gICAgbnVtTWF0aHMgPSBOdW1iZXIoYXJnMCk7XG4gICAgbnVtQ29scyA9IG51bU1hdGhzICogMjtcbiAgfVxuXG4gIHZhciBpc0FsaWduZWQgPSAhbnVtQ29scztcbiAgcmVzLmJvZHkuZm9yRWFjaChmdW5jdGlvbiAocm93KSB7XG4gICAgZm9yICh2YXIgX2kzID0gMTsgX2kzIDwgcm93Lmxlbmd0aDsgX2kzICs9IDIpIHtcbiAgICAgIC8vIE1vZGlmeSBvcmRncm91cCBub2RlIHdpdGhpbiBzdHlsaW5nIG5vZGVcbiAgICAgIHZhciBzdHlsaW5nID0gYXNzZXJ0Tm9kZVR5cGUocm93W19pM10sIFwic3R5bGluZ1wiKTtcblxuICAgICAgdmFyIF9vcmRncm91cCA9IGFzc2VydE5vZGVUeXBlKHN0eWxpbmcuYm9keVswXSwgXCJvcmRncm91cFwiKTtcblxuICAgICAgX29yZGdyb3VwLmJvZHkudW5zaGlmdChlbXB0eUdyb3VwKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzQWxpZ25lZCkge1xuICAgICAgLy8gQ2FzZSAxXG4gICAgICB2YXIgY3VyTWF0aHMgPSByb3cubGVuZ3RoIC8gMjtcblxuICAgICAgaWYgKG51bU1hdGhzIDwgY3VyTWF0aHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiVG9vIG1hbnkgbWF0aCBpbiBhIHJvdzogXCIgKyAoXCJleHBlY3RlZCBcIiArIG51bU1hdGhzICsgXCIsIGJ1dCBnb3QgXCIgKyBjdXJNYXRocyksIHJvd1swXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChudW1Db2xzIDwgcm93Lmxlbmd0aCkge1xuICAgICAgLy8gQ2FzZSAyXG4gICAgICBudW1Db2xzID0gcm93Lmxlbmd0aDtcbiAgICB9XG4gIH0pOyAvLyBBZGp1c3RpbmcgYWxpZ25tZW50LlxuICAvLyBJbiBhbGlnbmVkIG1vZGUsIHdlIGFkZCBvbmUgXFxxcXVhZCBiZXR3ZWVuIGNvbHVtbnM7XG4gIC8vIG90aGVyd2lzZSB3ZSBhZGQgbm90aGluZy5cblxuICBmb3IgKHZhciBfaTQgPSAwOyBfaTQgPCBudW1Db2xzOyArK19pNCkge1xuICAgIHZhciBhbGlnbiA9IFwiclwiO1xuICAgIHZhciBwcmVnYXAgPSAwO1xuXG4gICAgaWYgKF9pNCAlIDIgPT09IDEpIHtcbiAgICAgIGFsaWduID0gXCJsXCI7XG4gICAgfSBlbHNlIGlmIChfaTQgPiAwICYmIGlzQWxpZ25lZCkge1xuICAgICAgLy8gXCJhbGlnbmVkXCIgbW9kZS5cbiAgICAgIHByZWdhcCA9IDE7IC8vIGFkZCBvbmUgXFxxdWFkXG4gICAgfVxuXG4gICAgY29sc1tfaTRdID0ge1xuICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgYWxpZ246IGFsaWduLFxuICAgICAgcHJlZ2FwOiBwcmVnYXAsXG4gICAgICBwb3N0Z2FwOiAwXG4gICAgfTtcbiAgfVxuXG4gIHJlcy5jb2xTZXBhcmF0aW9uVHlwZSA9IGlzQWxpZ25lZCA/IFwiYWxpZ25cIiA6IFwiYWxpZ25hdFwiO1xuICByZXR1cm4gcmVzO1xufTsgLy8gQXJyYXlzIGFyZSBwYXJ0IG9mIExhVGVYLCBkZWZpbmVkIGluIGx0dGFiLmR0eCBzbyBpdHMgZG9jdW1lbnRhdGlvblxuLy8gaXMgcGFydCBvZiB0aGUgc291cmNlMmUucGRmIGZpbGUgb2YgTGFUZVgyZSBzb3VyY2UgZG9jdW1lbnRhdGlvbi5cbi8vIHtkYXJyYXl9IGlzIGFuIHthcnJheX0gZW52aXJvbm1lbnQgd2hlcmUgY2VsbHMgYXJlIHNldCBpbiBcXGRpc3BsYXlzdHlsZSxcbi8vIGFzIGRlZmluZWQgaW4gbmNjbWF0aC5zdHkuXG5cblxuZGVmaW5lRW52aXJvbm1lbnQoe1xuICB0eXBlOiBcImFycmF5XCIsXG4gIG5hbWVzOiBbXCJhcnJheVwiLCBcImRhcnJheVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoY29udGV4dCwgYXJncykge1xuICAgIC8vIFNpbmNlIG5vIHR5cGVzIGFyZSBzcGVjaWZpZWQgYWJvdmUsIHRoZSB0d28gcG9zc2liaWxpdGllcyBhcmVcbiAgICAvLyAtIFRoZSBhcmd1bWVudCBpcyB3cmFwcGVkIGluIHt9IG9yIFtdLCBpbiB3aGljaCBjYXNlIFBhcnNlcidzXG4gICAgLy8gICBwYXJzZUdyb3VwKCkgcmV0dXJucyBhbiBcIm9yZGdyb3VwXCIgd3JhcHBpbmcgc29tZSBzeW1ib2wgbm9kZS5cbiAgICAvLyAtIFRoZSBhcmd1bWVudCBpcyBhIGJhcmUgc3ltYm9sIG5vZGUuXG4gICAgdmFyIHN5bU5vZGUgPSBjaGVja1N5bWJvbE5vZGVUeXBlKGFyZ3NbMF0pO1xuICAgIHZhciBjb2xhbGlnbiA9IHN5bU5vZGUgPyBbYXJnc1swXV0gOiBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcIm9yZGdyb3VwXCIpLmJvZHk7XG4gICAgdmFyIGNvbHMgPSBjb2xhbGlnbi5tYXAoZnVuY3Rpb24gKG5kZSkge1xuICAgICAgdmFyIG5vZGUgPSBhc3NlcnRTeW1ib2xOb2RlVHlwZShuZGUpO1xuICAgICAgdmFyIGNhID0gbm9kZS50ZXh0O1xuXG4gICAgICBpZiAoXCJsY3JcIi5pbmRleE9mKGNhKSAhPT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiBcImFsaWduXCIsXG4gICAgICAgICAgYWxpZ246IGNhXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGNhID09PSBcInxcIikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IFwic2VwYXJhdG9yXCIsXG4gICAgICAgICAgc2VwYXJhdG9yOiBcInxcIlxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChjYSA9PT0gXCI6XCIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiBcInNlcGFyYXRvclwiLFxuICAgICAgICAgIHNlcGFyYXRvcjogXCI6XCJcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiVW5rbm93biBjb2x1bW4gYWxpZ25tZW50OiBcIiArIGNhLCBuZGUpO1xuICAgIH0pO1xuICAgIHZhciByZXMgPSB7XG4gICAgICBjb2xzOiBjb2xzLFxuICAgICAgaHNraXBCZWZvcmVBbmRBZnRlcjogdHJ1ZSAvLyBcXEBwcmVhbWJsZSBpbiBsdHRhYi5kdHhcblxuICAgIH07XG4gICAgcmV0dXJuIHBhcnNlQXJyYXkoY29udGV4dC5wYXJzZXIsIHJlcywgZENlbGxTdHlsZShjb250ZXh0LmVudk5hbWUpKTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGFycmF5X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhcnJheV9tYXRobWxCdWlsZGVyXG59KTsgLy8gVGhlIG1hdHJpeCBlbnZpcm9ubWVudHMgb2YgYW1zbWF0aCBidWlsZHMgb24gdGhlIGFycmF5IGVudmlyb25tZW50XG4vLyBvZiBMYVRlWCwgd2hpY2ggaXMgZGlzY3Vzc2VkIGFib3ZlLlxuXG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcIm1hdHJpeFwiLCBcInBtYXRyaXhcIiwgXCJibWF0cml4XCIsIFwiQm1hdHJpeFwiLCBcInZtYXRyaXhcIiwgXCJWbWF0cml4XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDBcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihjb250ZXh0KSB7XG4gICAgdmFyIGRlbGltaXRlcnMgPSB7XG4gICAgICBcIm1hdHJpeFwiOiBudWxsLFxuICAgICAgXCJwbWF0cml4XCI6IFtcIihcIiwgXCIpXCJdLFxuICAgICAgXCJibWF0cml4XCI6IFtcIltcIiwgXCJdXCJdLFxuICAgICAgXCJCbWF0cml4XCI6IFtcIlxcXFx7XCIsIFwiXFxcXH1cIl0sXG4gICAgICBcInZtYXRyaXhcIjogW1wifFwiLCBcInxcIl0sXG4gICAgICBcIlZtYXRyaXhcIjogW1wiXFxcXFZlcnRcIiwgXCJcXFxcVmVydFwiXVxuICAgIH1bY29udGV4dC5lbnZOYW1lXTsgLy8gXFxoc2tpcCAtXFxhcnJheWNvbHNlcCBpbiBhbXNtYXRoXG5cbiAgICB2YXIgcGF5bG9hZCA9IHtcbiAgICAgIGhza2lwQmVmb3JlQW5kQWZ0ZXI6IGZhbHNlXG4gICAgfTtcbiAgICB2YXIgcmVzID0gcGFyc2VBcnJheShjb250ZXh0LnBhcnNlciwgcGF5bG9hZCwgZENlbGxTdHlsZShjb250ZXh0LmVudk5hbWUpKTtcbiAgICByZXR1cm4gZGVsaW1pdGVycyA/IHtcbiAgICAgIHR5cGU6IFwibGVmdHJpZ2h0XCIsXG4gICAgICBtb2RlOiBjb250ZXh0Lm1vZGUsXG4gICAgICBib2R5OiBbcmVzXSxcbiAgICAgIGxlZnQ6IGRlbGltaXRlcnNbMF0sXG4gICAgICByaWdodDogZGVsaW1pdGVyc1sxXSxcbiAgICAgIHJpZ2h0Q29sb3I6IHVuZGVmaW5lZCAvLyBcXHJpZ2h0IHVuaW5mbHVlbmNlZCBieSBcXGNvbG9yIGluIGFycmF5XG5cbiAgICB9IDogcmVzO1xuICB9LFxuICBodG1sQnVpbGRlcjogYXJyYXlfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGFycmF5X21hdGhtbEJ1aWxkZXJcbn0pO1xuZGVmaW5lRW52aXJvbm1lbnQoe1xuICB0eXBlOiBcImFycmF5XCIsXG4gIG5hbWVzOiBbXCJzbWFsbG1hdHJpeFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoY29udGV4dCkge1xuICAgIHZhciBwYXlsb2FkID0ge1xuICAgICAgYXJyYXlzdHJldGNoOiAwLjVcbiAgICB9O1xuICAgIHZhciByZXMgPSBwYXJzZUFycmF5KGNvbnRleHQucGFyc2VyLCBwYXlsb2FkLCBcInNjcmlwdFwiKTtcbiAgICByZXMuY29sU2VwYXJhdGlvblR5cGUgPSBcInNtYWxsXCI7XG4gICAgcmV0dXJuIHJlcztcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGFycmF5X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhcnJheV9tYXRobWxCdWlsZGVyXG59KTtcbmRlZmluZUVudmlyb25tZW50KHtcbiAgdHlwZTogXCJhcnJheVwiLFxuICBuYW1lczogW1wic3ViYXJyYXlcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKGNvbnRleHQsIGFyZ3MpIHtcbiAgICAvLyBQYXJzaW5nIG9mIHtzdWJhcnJheX0gaXMgc2ltaWxhciB0byB7YXJyYXl9XG4gICAgdmFyIHN5bU5vZGUgPSBjaGVja1N5bWJvbE5vZGVUeXBlKGFyZ3NbMF0pO1xuICAgIHZhciBjb2xhbGlnbiA9IHN5bU5vZGUgPyBbYXJnc1swXV0gOiBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcIm9yZGdyb3VwXCIpLmJvZHk7XG4gICAgdmFyIGNvbHMgPSBjb2xhbGlnbi5tYXAoZnVuY3Rpb24gKG5kZSkge1xuICAgICAgdmFyIG5vZGUgPSBhc3NlcnRTeW1ib2xOb2RlVHlwZShuZGUpO1xuICAgICAgdmFyIGNhID0gbm9kZS50ZXh0OyAvLyB7c3ViYXJyYXl9IG9ubHkgcmVjb2duaXplcyBcImxcIiAmIFwiY1wiXG5cbiAgICAgIGlmIChcImxjXCIuaW5kZXhPZihjYSkgIT09IC0xKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgICAgIGFsaWduOiBjYVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJVbmtub3duIGNvbHVtbiBhbGlnbm1lbnQ6IFwiICsgY2EsIG5kZSk7XG4gICAgfSk7XG5cbiAgICBpZiAoY29scy5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJ7c3ViYXJyYXl9IGNhbiBjb250YWluIG9ubHkgb25lIGNvbHVtblwiKTtcbiAgICB9XG5cbiAgICB2YXIgcmVzID0ge1xuICAgICAgY29sczogY29scyxcbiAgICAgIGhza2lwQmVmb3JlQW5kQWZ0ZXI6IGZhbHNlLFxuICAgICAgYXJyYXlzdHJldGNoOiAwLjVcbiAgICB9O1xuICAgIHJlcyA9IHBhcnNlQXJyYXkoY29udGV4dC5wYXJzZXIsIHJlcywgXCJzY3JpcHRcIik7XG5cbiAgICBpZiAocmVzLmJvZHlbMF0ubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwie3N1YmFycmF5fSBjYW4gY29udGFpbiBvbmx5IG9uZSBjb2x1bW5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGFycmF5X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhcnJheV9tYXRobWxCdWlsZGVyXG59KTsgLy8gQSBjYXNlcyBlbnZpcm9ubWVudCAoaW4gYW1zbWF0aC5zdHkpIGlzIGFsbW9zdCBlcXVpdmFsZW50IHRvXG4vLyBcXGRlZlxcYXJyYXlzdHJldGNoezEuMn0lXG4vLyBcXGxlZnRcXHtcXGJlZ2lue2FycmF5fXtAe31sQHtcXHF1YWR9bEB7fX0g4oCmIFxcZW5ke2FycmF5fVxccmlnaHQuXG4vLyB7ZGNhc2VzfSBpcyBhIHtjYXNlc30gZW52aXJvbm1lbnQgd2hlcmUgY2VsbHMgYXJlIHNldCBpbiBcXGRpc3BsYXlzdHlsZSxcbi8vIGFzIGRlZmluZWQgaW4gbWF0aHRvb2xzLnN0eS5cblxuZGVmaW5lRW52aXJvbm1lbnQoe1xuICB0eXBlOiBcImFycmF5XCIsXG4gIG5hbWVzOiBbXCJjYXNlc1wiLCBcImRjYXNlc1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoY29udGV4dCkge1xuICAgIHZhciBwYXlsb2FkID0ge1xuICAgICAgYXJyYXlzdHJldGNoOiAxLjIsXG4gICAgICBjb2xzOiBbe1xuICAgICAgICB0eXBlOiBcImFsaWduXCIsXG4gICAgICAgIGFsaWduOiBcImxcIixcbiAgICAgICAgcHJlZ2FwOiAwLFxuICAgICAgICAvLyBUT0RPKGtldmluYikgZ2V0IHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAgICAvLyBGb3Igbm93IHdlIHVzZSB0aGUgbWV0cmljcyBmb3IgVEVYVCBzdHlsZSB3aGljaCBpcyB3aGF0IHdlIHdlcmVcbiAgICAgICAgLy8gZG9pbmcgYmVmb3JlLiAgQmVmb3JlIGF0dGVtcHRpbmcgdG8gZ2V0IHRoZSBjdXJyZW50IHN0eWxlIHdlXG4gICAgICAgIC8vIHNob3VsZCBsb29rIGF0IFRlWCdzIGJlaGF2aW9yIGVzcGVjaWFsbHkgZm9yIFxcb3ZlciBhbmQgbWF0cmljZXMuXG4gICAgICAgIHBvc3RnYXA6IDEuMFxuICAgICAgICAvKiAxZW0gcXVhZCAqL1xuXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiYWxpZ25cIixcbiAgICAgICAgYWxpZ246IFwibFwiLFxuICAgICAgICBwcmVnYXA6IDAsXG4gICAgICAgIHBvc3RnYXA6IDBcbiAgICAgIH1dXG4gICAgfTtcbiAgICB2YXIgcmVzID0gcGFyc2VBcnJheShjb250ZXh0LnBhcnNlciwgcGF5bG9hZCwgZENlbGxTdHlsZShjb250ZXh0LmVudk5hbWUpKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJsZWZ0cmlnaHRcIixcbiAgICAgIG1vZGU6IGNvbnRleHQubW9kZSxcbiAgICAgIGJvZHk6IFtyZXNdLFxuICAgICAgbGVmdDogXCJcXFxce1wiLFxuICAgICAgcmlnaHQ6IFwiLlwiLFxuICAgICAgcmlnaHRDb2xvcjogdW5kZWZpbmVkXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGFycmF5X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhcnJheV9tYXRobWxCdWlsZGVyXG59KTsgLy8gQW4gYWxpZ25lZCBlbnZpcm9ubWVudCBpcyBsaWtlIHRoZSBhbGlnbiogZW52aXJvbm1lbnRcbi8vIGV4Y2VwdCBpdCBvcGVyYXRlcyB3aXRoaW4gbWF0aCBtb2RlLlxuLy8gTm90ZSB0aGF0IHdlIGFzc3VtZSBcXG5vbWFsbGluZXNraXBsaW1pdCB0byBiZSB6ZXJvLFxuLy8gc28gdGhhdCBcXHN0cnV0QCBpcyB0aGUgc2FtZSBhcyBcXHN0cnV0LlxuXG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcImFsaWduZWRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuICBoYW5kbGVyOiBhcnJheV9hbGlnbmVkSGFuZGxlcixcbiAgaHRtbEJ1aWxkZXI6IGFycmF5X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhcnJheV9tYXRobWxCdWlsZGVyXG59KTsgLy8gQSBnYXRoZXJlZCBlbnZpcm9ubWVudCBpcyBsaWtlIGFuIGFycmF5IGVudmlyb25tZW50IHdpdGggb25lIGNlbnRlcmVkXG4vLyBjb2x1bW4sIGJ1dCB3aGVyZSByb3dzIGFyZSBjb25zaWRlcmVkIGxpbmVzIHNvIGdldCBcXGpvdCBsaW5lIHNwYWNpbmdcbi8vIGFuZCBjb250ZW50cyBhcmUgc2V0IGluIFxcZGlzcGxheXN0eWxlLlxuXG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcImdhdGhlcmVkXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDBcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihjb250ZXh0KSB7XG4gICAgdmFyIHJlcyA9IHtcbiAgICAgIGNvbHM6IFt7XG4gICAgICAgIHR5cGU6IFwiYWxpZ25cIixcbiAgICAgICAgYWxpZ246IFwiY1wiXG4gICAgICB9XSxcbiAgICAgIGFkZEpvdDogdHJ1ZVxuICAgIH07XG4gICAgcmV0dXJuIHBhcnNlQXJyYXkoY29udGV4dC5wYXJzZXIsIHJlcywgXCJkaXNwbGF5XCIpO1xuICB9LFxuICBodG1sQnVpbGRlcjogYXJyYXlfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGFycmF5X21hdGhtbEJ1aWxkZXJcbn0pOyAvLyBhbGlnbmF0IGVudmlyb25tZW50IGlzIGxpa2UgYW4gYWxpZ24gZW52aXJvbm1lbnQsIGJ1dCBvbmUgbXVzdCBleHBsaWNpdGx5XG4vLyBzcGVjaWZ5IG1heGltdW0gbnVtYmVyIG9mIGNvbHVtbnMgaW4gZWFjaCByb3csIGFuZCBjYW4gYWRqdXN0IHNwYWNpbmcgYmV0d2VlblxuLy8gZWFjaCBjb2x1bW5zLlxuXG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcImFsaWduZWRhdFwiXSxcbiAgLy8gT25lIGZvciBudW1iZXJlZCBhbmQgZm9yIHVubnVtYmVyZWQ7XG4gIC8vIGJ1dCwgS2FUZVggZG9lc24ndCBzdXBwb3J0cyBtYXRoIG51bWJlcmluZyB5ZXQsXG4gIC8vIHRoZXkgbWFrZSBubyBkaWZmZXJlbmNlIGZvciBub3cuXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiBhcnJheV9hbGlnbmVkSGFuZGxlcixcbiAgaHRtbEJ1aWxkZXI6IGFycmF5X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhcnJheV9tYXRobWxCdWlsZGVyXG59KTsgLy8gQ2F0Y2ggXFxobGluZSBvdXRzaWRlIGFycmF5IGVudmlyb25tZW50XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJ0ZXh0XCIsXG4gIC8vIERvZXNuJ3QgbWF0dGVyIHdoYXQgdGhpcyBpcy5cbiAgbmFtZXM6IFtcIlxcXFxobGluZVwiLCBcIlxcXFxoZGFzaGxpbmVcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGFsbG93ZWRJbk1hdGg6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKGNvbnRleHQuZnVuY05hbWUgKyBcIiB2YWxpZCBvbmx5IHdpdGhpbiBhcnJheSBlbnZpcm9ubWVudFwiKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9lbnZpcm9ubWVudHMuanNcblxudmFyIGVudmlyb25tZW50cyA9IF9lbnZpcm9ubWVudHM7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfZW52aXJvbm1lbnRzID0gKGVudmlyb25tZW50cyk7IC8vIEFsbCBlbnZpcm9ubWVudCBkZWZpbml0aW9ucyBzaG91bGQgYmUgaW1wb3J0ZWQgYmVsb3dcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvZW52aXJvbm1lbnQuanNcblxuXG5cbiAvLyBFbnZpcm9ubWVudCBkZWxpbWl0ZXJzLiBIVE1ML01hdGhNTCByZW5kZXJpbmcgaXMgZGVmaW5lZCBpbiB0aGUgY29ycmVzcG9uZGluZ1xuLy8gZGVmaW5lRW52aXJvbm1lbnQgZGVmaW5pdGlvbnMuXG4vLyAkRmxvd0ZpeE1lLCBcImVudmlyb25tZW50XCIgaGFuZGxlciByZXR1cm5zIGFuIGVudmlyb25tZW50IFBhcnNlTm9kZVxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiZW52aXJvbm1lbnRcIixcbiAgbmFtZXM6IFtcIlxcXFxiZWdpblwiLCBcIlxcXFxlbmRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1widGV4dFwiXVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZi5wYXJzZXIsXG4gICAgICAgIGZ1bmNOYW1lID0gX3JlZi5mdW5jTmFtZTtcbiAgICB2YXIgbmFtZUdyb3VwID0gYXJnc1swXTtcblxuICAgIGlmIChuYW1lR3JvdXAudHlwZSAhPT0gXCJvcmRncm91cFwiKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJJbnZhbGlkIGVudmlyb25tZW50IG5hbWVcIiwgbmFtZUdyb3VwKTtcbiAgICB9XG5cbiAgICB2YXIgZW52TmFtZSA9IFwiXCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVHcm91cC5ib2R5Lmxlbmd0aDsgKytpKSB7XG4gICAgICBlbnZOYW1lICs9IGFzc2VydE5vZGVUeXBlKG5hbWVHcm91cC5ib2R5W2ldLCBcInRleHRvcmRcIikudGV4dDtcbiAgICB9XG5cbiAgICBpZiAoZnVuY05hbWUgPT09IFwiXFxcXGJlZ2luXCIpIHtcbiAgICAgIC8vIGJlZ2luLi4uZW5kIGlzIHNpbWlsYXIgdG8gbGVmdC4uLnJpZ2h0XG4gICAgICBpZiAoIXNyY19lbnZpcm9ubWVudHMuaGFzT3duUHJvcGVydHkoZW52TmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiTm8gc3VjaCBlbnZpcm9ubWVudDogXCIgKyBlbnZOYW1lLCBuYW1lR3JvdXApO1xuICAgICAgfSAvLyBCdWlsZCB0aGUgZW52aXJvbm1lbnQgb2JqZWN0LiBBcmd1bWVudHMgYW5kIG90aGVyIGluZm9ybWF0aW9uIHdpbGxcbiAgICAgIC8vIGJlIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBiZWdpbiBhbmQgZW5kIG1ldGhvZHMgdXNpbmcgcHJvcGVydGllcy5cblxuXG4gICAgICB2YXIgZW52ID0gc3JjX2Vudmlyb25tZW50c1tlbnZOYW1lXTtcblxuICAgICAgdmFyIF9wYXJzZXIkcGFyc2VBcmd1bWVudCA9IHBhcnNlci5wYXJzZUFyZ3VtZW50cyhcIlxcXFxiZWdpbntcIiArIGVudk5hbWUgKyBcIn1cIiwgZW52KSxcbiAgICAgICAgICBfYXJncyA9IF9wYXJzZXIkcGFyc2VBcmd1bWVudC5hcmdzLFxuICAgICAgICAgIG9wdEFyZ3MgPSBfcGFyc2VyJHBhcnNlQXJndW1lbnQub3B0QXJncztcblxuICAgICAgdmFyIGNvbnRleHQgPSB7XG4gICAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgICBlbnZOYW1lOiBlbnZOYW1lLFxuICAgICAgICBwYXJzZXI6IHBhcnNlclxuICAgICAgfTtcbiAgICAgIHZhciByZXN1bHQgPSBlbnYuaGFuZGxlcihjb250ZXh0LCBfYXJncywgb3B0QXJncyk7XG4gICAgICBwYXJzZXIuZXhwZWN0KFwiXFxcXGVuZFwiLCBmYWxzZSk7XG4gICAgICB2YXIgZW5kTmFtZVRva2VuID0gcGFyc2VyLm5leHRUb2tlbjtcbiAgICAgIHZhciBlbmQgPSBhc3NlcnROb2RlVHlwZShwYXJzZXIucGFyc2VGdW5jdGlvbigpLCBcImVudmlyb25tZW50XCIpO1xuXG4gICAgICBpZiAoZW5kLm5hbWUgIT09IGVudk5hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiTWlzbWF0Y2g6IFxcXFxiZWdpbntcIiArIGVudk5hbWUgKyBcIn0gbWF0Y2hlZCBieSBcXFxcZW5ke1wiICsgZW5kLm5hbWUgKyBcIn1cIiwgZW5kTmFtZVRva2VuKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJlbnZpcm9ubWVudFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBuYW1lOiBlbnZOYW1lLFxuICAgICAgbmFtZUdyb3VwOiBuYW1lR3JvdXBcbiAgICB9O1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9tY2xhc3MuanNcblxuXG5cblxuXG5cbnZhciBtY2xhc3NfbWFrZVNwYW4gPSBidWlsZENvbW1vbi5tYWtlU3BhbjtcblxuZnVuY3Rpb24gbWNsYXNzX2h0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gIHZhciBlbGVtZW50cyA9IGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucywgdHJ1ZSk7XG4gIHJldHVybiBtY2xhc3NfbWFrZVNwYW4oW2dyb3VwLm1jbGFzc10sIGVsZW1lbnRzLCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gbWNsYXNzX21hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIG5vZGU7XG4gIHZhciBpbm5lciA9IGJ1aWxkTWF0aE1MX2J1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zKTtcblxuICBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1pbm5lclwiKSB7XG4gICAgcmV0dXJuIG1hdGhNTFRyZWUubmV3RG9jdW1lbnRGcmFnbWVudChpbm5lcik7XG4gIH0gZWxzZSBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1vcmRcIikge1xuICAgIGlmIChncm91cC5pc0NoYXJhY3RlckJveCkge1xuICAgICAgbm9kZSA9IGlubmVyWzBdO1xuICAgICAgbm9kZS50eXBlID0gXCJtaVwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtaVwiLCBpbm5lcik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChncm91cC5pc0NoYXJhY3RlckJveCkge1xuICAgICAgbm9kZSA9IGlubmVyWzBdO1xuICAgICAgbm9kZS50eXBlID0gXCJtb1wiO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBpbm5lcik7XG4gICAgfSAvLyBTZXQgc3BhY2luZyBiYXNlZCBvbiB3aGF0IGlzIHRoZSBtb3N0IGxpa2VseSBhZGphY2VudCBhdG9tIHR5cGUuXG4gICAgLy8gU2VlIFRlWGJvb2sgcDE3MC5cblxuXG4gICAgaWYgKGdyb3VwLm1jbGFzcyA9PT0gXCJtYmluXCIpIHtcbiAgICAgIG5vZGUuYXR0cmlidXRlcy5sc3BhY2UgPSBcIjAuMjJlbVwiOyAvLyBtZWRpdW0gc3BhY2VcblxuICAgICAgbm9kZS5hdHRyaWJ1dGVzLnJzcGFjZSA9IFwiMC4yMmVtXCI7XG4gICAgfSBlbHNlIGlmIChncm91cC5tY2xhc3MgPT09IFwibXB1bmN0XCIpIHtcbiAgICAgIG5vZGUuYXR0cmlidXRlcy5sc3BhY2UgPSBcIjBlbVwiO1xuICAgICAgbm9kZS5hdHRyaWJ1dGVzLnJzcGFjZSA9IFwiMC4xN2VtXCI7IC8vIHRoaW5zcGFjZVxuICAgIH0gZWxzZSBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1vcGVuXCIgfHwgZ3JvdXAubWNsYXNzID09PSBcIm1jbG9zZVwiKSB7XG4gICAgICBub2RlLmF0dHJpYnV0ZXMubHNwYWNlID0gXCIwZW1cIjtcbiAgICAgIG5vZGUuYXR0cmlidXRlcy5yc3BhY2UgPSBcIjBlbVwiO1xuICAgIH0gLy8gTWF0aE1MIDxtbz4gZGVmYXVsdCBzcGFjZSBpcyA1LzE4IGVtLCBzbyA8bXJlbD4gbmVlZHMgbm8gYWN0aW9uLlxuICAgIC8vIFJlZjogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvTWF0aE1ML0VsZW1lbnQvbW9cblxuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59IC8vIE1hdGggY2xhc3MgY29tbWFuZHMgZXhjZXB0IFxcbWF0aG9wXG5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcIm1jbGFzc1wiLFxuICBuYW1lczogW1wiXFxcXG1hdGhvcmRcIiwgXCJcXFxcbWF0aGJpblwiLCBcIlxcXFxtYXRocmVsXCIsIFwiXFxcXG1hdGhvcGVuXCIsIFwiXFxcXG1hdGhjbG9zZVwiLCBcIlxcXFxtYXRocHVuY3RcIiwgXCJcXFxcbWF0aGlubmVyXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWYuZnVuY05hbWU7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm1jbGFzc1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBtY2xhc3M6IFwibVwiICsgZnVuY05hbWUuc3Vic3RyKDUpLFxuICAgICAgLy8gVE9ETyhrZXZpbmIpOiBkb24ndCBwcmVmaXggd2l0aCAnbSdcbiAgICAgIGJvZHk6IGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGJvZHkpLFxuICAgICAgaXNDaGFyYWN0ZXJCb3g6IHV0aWxzLmlzQ2hhcmFjdGVyQm94KGJvZHkpXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IG1jbGFzc19odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogbWNsYXNzX21hdGhtbEJ1aWxkZXJcbn0pO1xudmFyIGJpbnJlbENsYXNzID0gZnVuY3Rpb24gYmlucmVsQ2xhc3MoYXJnKSB7XG4gIC8vIFxcYmlucmVsQCBzcGFjaW5nIHZhcmllcyB3aXRoIChiaW58cmVsfG9yZCkgb2YgdGhlIGF0b20gaW4gdGhlIGFyZ3VtZW50LlxuICAvLyAoYnkgcmVuZGVyaW5nIHNlcGFyYXRlbHkgYW5kIHdpdGgge31zIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZCBtZWFzdXJpbmdcbiAgLy8gdGhlIGNoYW5nZSBpbiBzcGFjaW5nKS4gIFdlJ2xsIGRvIHJvdWdobHkgdGhlIHNhbWUgYnkgZGV0ZWN0aW5nIHRoZVxuICAvLyBhdG9tIHR5cGUgZGlyZWN0bHkuXG4gIHZhciBhdG9tID0gYXJnLnR5cGUgPT09IFwib3JkZ3JvdXBcIiAmJiBhcmcuYm9keS5sZW5ndGggPyBhcmcuYm9keVswXSA6IGFyZztcblxuICBpZiAoYXRvbS50eXBlID09PSBcImF0b21cIiAmJiAoYXRvbS5mYW1pbHkgPT09IFwiYmluXCIgfHwgYXRvbS5mYW1pbHkgPT09IFwicmVsXCIpKSB7XG4gICAgcmV0dXJuIFwibVwiICsgYXRvbS5mYW1pbHk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwibW9yZFwiO1xuICB9XG59OyAvLyBcXEBiaW5yZWx7eH17eX0gcmVuZGVycyBsaWtlIHkgYnV0IGFzIG1iaW4vbXJlbC9tb3JkIGlmIHggaXMgbWJpbi9tcmVsL21vcmQuXG4vLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gXFxiaW5yZWxAe3h9XFxiaW5yZWxAQHt5fSBpbiBBTVNUZVguXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJtY2xhc3NcIixcbiAgbmFtZXM6IFtcIlxcXFxAYmlucmVsXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDJcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmMiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmMi5wYXJzZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwibWNsYXNzXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG1jbGFzczogYmlucmVsQ2xhc3MoYXJnc1swXSksXG4gICAgICBib2R5OiBbYXJnc1sxXV0sXG4gICAgICBpc0NoYXJhY3RlckJveDogdXRpbHMuaXNDaGFyYWN0ZXJCb3goYXJnc1sxXSlcbiAgICB9O1xuICB9XG59KTsgLy8gQnVpbGQgYSByZWxhdGlvbiBvciBzdGFja2VkIG9wIGJ5IHBsYWNpbmcgb25lIHN5bWJvbCBvbiB0b3Agb2YgYW5vdGhlclxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibWNsYXNzXCIsXG4gIG5hbWVzOiBbXCJcXFxcc3RhY2tyZWxcIiwgXCJcXFxcb3ZlcnNldFwiLCBcIlxcXFx1bmRlcnNldFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZjMsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZjMucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWYzLmZ1bmNOYW1lO1xuICAgIHZhciBiYXNlQXJnID0gYXJnc1sxXTtcbiAgICB2YXIgc2hpZnRlZEFyZyA9IGFyZ3NbMF07XG4gICAgdmFyIG1jbGFzcztcblxuICAgIGlmIChmdW5jTmFtZSAhPT0gXCJcXFxcc3RhY2tyZWxcIikge1xuICAgICAgLy8gTGFUZVggYXBwbGllcyBcXGJpbnJlbCBzcGFjaW5nIHRvIFxcb3ZlcnNldCBhbmQgXFx1bmRlcnNldC5cbiAgICAgIG1jbGFzcyA9IGJpbnJlbENsYXNzKGJhc2VBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtY2xhc3MgPSBcIm1yZWxcIjsgLy8gZm9yIFxcc3RhY2tyZWxcbiAgICB9XG5cbiAgICB2YXIgYmFzZU9wID0ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogYmFzZUFyZy5tb2RlLFxuICAgICAgbGltaXRzOiB0cnVlLFxuICAgICAgYWx3YXlzSGFuZGxlU3VwU3ViOiB0cnVlLFxuICAgICAgcGFyZW50SXNTdXBTdWI6IGZhbHNlLFxuICAgICAgc3ltYm9sOiBmYWxzZSxcbiAgICAgIHN1cHByZXNzQmFzZVNoaWZ0OiBmdW5jTmFtZSAhPT0gXCJcXFxcc3RhY2tyZWxcIixcbiAgICAgIGJvZHk6IGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGJhc2VBcmcpXG4gICAgfTtcbiAgICB2YXIgc3Vwc3ViID0ge1xuICAgICAgdHlwZTogXCJzdXBzdWJcIixcbiAgICAgIG1vZGU6IHNoaWZ0ZWRBcmcubW9kZSxcbiAgICAgIGJhc2U6IGJhc2VPcCxcbiAgICAgIHN1cDogZnVuY05hbWUgPT09IFwiXFxcXHVuZGVyc2V0XCIgPyBudWxsIDogc2hpZnRlZEFyZyxcbiAgICAgIHN1YjogZnVuY05hbWUgPT09IFwiXFxcXHVuZGVyc2V0XCIgPyBzaGlmdGVkQXJnIDogbnVsbFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwibWNsYXNzXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG1jbGFzczogbWNsYXNzLFxuICAgICAgYm9keTogW3N1cHN1Yl0sXG4gICAgICBpc0NoYXJhY3RlckJveDogdXRpbHMuaXNDaGFyYWN0ZXJCb3goc3Vwc3ViKVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBtY2xhc3NfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IG1jbGFzc19tYXRobWxCdWlsZGVyXG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9mb250LmpzXG4vLyBUT0RPKGtldmluYik6IGltcGxlbWVudCBcXFxcc2wgYW5kIFxcXFxzY1xuXG5cblxuXG5cblxudmFyIGZvbnRfaHRtbEJ1aWxkZXIgPSBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICB2YXIgZm9udCA9IGdyb3VwLmZvbnQ7XG4gIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy53aXRoRm9udChmb250KTtcbiAgcmV0dXJuIGJ1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG5ld09wdGlvbnMpO1xufTtcblxudmFyIGZvbnRfbWF0aG1sQnVpbGRlciA9IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIGZvbnQgPSBncm91cC5mb250O1xuICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMud2l0aEZvbnQoZm9udCk7XG4gIHJldHVybiBidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG5ld09wdGlvbnMpO1xufTtcblxudmFyIGZvbnRBbGlhc2VzID0ge1xuICBcIlxcXFxCYmJcIjogXCJcXFxcbWF0aGJiXCIsXG4gIFwiXFxcXGJvbGRcIjogXCJcXFxcbWF0aGJmXCIsXG4gIFwiXFxcXGZyYWtcIjogXCJcXFxcbWF0aGZyYWtcIixcbiAgXCJcXFxcYm1cIjogXCJcXFxcYm9sZHN5bWJvbFwiXG59O1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImZvbnRcIixcbiAgbmFtZXM6IFsvLyBzdHlsZXMsIGV4Y2VwdCBcXGJvbGRzeW1ib2wgZGVmaW5lZCBiZWxvd1xuICBcIlxcXFxtYXRocm1cIiwgXCJcXFxcbWF0aGl0XCIsIFwiXFxcXG1hdGhiZlwiLCBcIlxcXFxtYXRobm9ybWFsXCIsIC8vIGZhbWlsaWVzXG4gIFwiXFxcXG1hdGhiYlwiLCBcIlxcXFxtYXRoY2FsXCIsIFwiXFxcXG1hdGhmcmFrXCIsIFwiXFxcXG1hdGhzY3JcIiwgXCJcXFxcbWF0aHNmXCIsIFwiXFxcXG1hdGh0dFwiLCAvLyBhbGlhc2VzLCBleGNlcHQgXFxibSBkZWZpbmVkIGJlbG93XG4gIFwiXFxcXEJiYlwiLCBcIlxcXFxib2xkXCIsIFwiXFxcXGZyYWtcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBncmVlZGluZXNzOiAyXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICB2YXIgZnVuYyA9IGZ1bmNOYW1lO1xuXG4gICAgaWYgKGZ1bmMgaW4gZm9udEFsaWFzZXMpIHtcbiAgICAgIGZ1bmMgPSBmb250QWxpYXNlc1tmdW5jXTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJmb250XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGZvbnQ6IGZ1bmMuc2xpY2UoMSksXG4gICAgICBib2R5OiBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZvbnRfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGZvbnRfbWF0aG1sQnVpbGRlclxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibWNsYXNzXCIsXG4gIG5hbWVzOiBbXCJcXFxcYm9sZHN5bWJvbFwiLCBcIlxcXFxibVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGdyZWVkaW5lc3M6IDJcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmMiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmMi5wYXJzZXI7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHZhciBpc0NoYXJhY3RlckJveCA9IHV0aWxzLmlzQ2hhcmFjdGVyQm94KGJvZHkpOyAvLyBhbXNic3kuc3R5J3MgXFxib2xkc3ltYm9sIHVzZXMgXFxiaW5yZWwgc3BhY2luZyB0byBpbmhlcml0IHRoZVxuICAgIC8vIGFyZ3VtZW50J3MgYmlufHJlbHxvcmQgc3RhdHVzXG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJtY2xhc3NcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbWNsYXNzOiBiaW5yZWxDbGFzcyhib2R5KSxcbiAgICAgIGJvZHk6IFt7XG4gICAgICAgIHR5cGU6IFwiZm9udFwiLFxuICAgICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgICAgZm9udDogXCJib2xkc3ltYm9sXCIsXG4gICAgICAgIGJvZHk6IGJvZHlcbiAgICAgIH1dLFxuICAgICAgaXNDaGFyYWN0ZXJCb3g6IGlzQ2hhcmFjdGVyQm94XG4gICAgfTtcbiAgfVxufSk7IC8vIE9sZCBmb250IGNoYW5naW5nIGZ1bmN0aW9uc1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiZm9udFwiLFxuICBuYW1lczogW1wiXFxcXHJtXCIsIFwiXFxcXHNmXCIsIFwiXFxcXHR0XCIsIFwiXFxcXGJmXCIsIFwiXFxcXGl0XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYzLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYzLnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmMy5mdW5jTmFtZSxcbiAgICAgICAgYnJlYWtPblRva2VuVGV4dCA9IF9yZWYzLmJyZWFrT25Ub2tlblRleHQ7XG4gICAgdmFyIG1vZGUgPSBwYXJzZXIubW9kZTtcbiAgICB2YXIgYm9keSA9IHBhcnNlci5wYXJzZUV4cHJlc3Npb24odHJ1ZSwgYnJlYWtPblRva2VuVGV4dCk7XG4gICAgdmFyIHN0eWxlID0gXCJtYXRoXCIgKyBmdW5jTmFtZS5zbGljZSgxKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJmb250XCIsXG4gICAgICBtb2RlOiBtb2RlLFxuICAgICAgZm9udDogc3R5bGUsXG4gICAgICBib2R5OiB7XG4gICAgICAgIHR5cGU6IFwib3JkZ3JvdXBcIixcbiAgICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICAgIGJvZHk6IGJvZHlcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZm9udF9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogZm9udF9tYXRobWxCdWlsZGVyXG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9nZW5mcmFjLmpzXG5cblxuXG5cblxuXG5cblxuXG5cblxudmFyIGdlbmZyYWNfYWRqdXN0U3R5bGUgPSBmdW5jdGlvbiBhZGp1c3RTdHlsZShzaXplLCBvcmlnaW5hbFN0eWxlKSB7XG4gIC8vIEZpZ3VyZSBvdXQgd2hhdCBzdHlsZSB0aGlzIGZyYWN0aW9uIHNob3VsZCBiZSBpbiBiYXNlZCBvbiB0aGVcbiAgLy8gZnVuY3Rpb24gdXNlZFxuICB2YXIgc3R5bGUgPSBvcmlnaW5hbFN0eWxlO1xuXG4gIGlmIChzaXplID09PSBcImRpc3BsYXlcIikge1xuICAgIC8vIEdldCBkaXNwbGF5IHN0eWxlIGFzIGEgZGVmYXVsdC5cbiAgICAvLyBJZiBpbmNvbWluZyBzdHlsZSBpcyBzdWIvc3VwLCB1c2Ugc3R5bGUudGV4dCgpIHRvIGdldCBjb3JyZWN0IHNpemUuXG4gICAgc3R5bGUgPSBzdHlsZS5pZCA+PSBzcmNfU3R5bGUuU0NSSVBULmlkID8gc3R5bGUudGV4dCgpIDogc3JjX1N0eWxlLkRJU1BMQVk7XG4gIH0gZWxzZSBpZiAoc2l6ZSA9PT0gXCJ0ZXh0XCIgJiYgc3R5bGUuc2l6ZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkuc2l6ZSkge1xuICAgIC8vIFdlJ3JlIGluIGEgXFx0ZnJhYyBidXQgaW5jb21pbmcgc3R5bGUgaXMgZGlzcGxheXN0eWxlLCBzbzpcbiAgICBzdHlsZSA9IHNyY19TdHlsZS5URVhUO1xuICB9IGVsc2UgaWYgKHNpemUgPT09IFwic2NyaXB0XCIpIHtcbiAgICBzdHlsZSA9IHNyY19TdHlsZS5TQ1JJUFQ7XG4gIH0gZWxzZSBpZiAoc2l6ZSA9PT0gXCJzY3JpcHRzY3JpcHRcIikge1xuICAgIHN0eWxlID0gc3JjX1N0eWxlLlNDUklQVFNDUklQVDtcbiAgfVxuXG4gIHJldHVybiBzdHlsZTtcbn07XG5cbnZhciBnZW5mcmFjX2h0bWxCdWlsZGVyID0gZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgLy8gRnJhY3Rpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBUZVhib29rIG9uIHBhZ2VzIDQ0NC00NDUsIHJ1bGVzIDE1KGEtZSkuXG4gIHZhciBzdHlsZSA9IGdlbmZyYWNfYWRqdXN0U3R5bGUoZ3JvdXAuc2l6ZSwgb3B0aW9ucy5zdHlsZSk7XG4gIHZhciBuc3R5bGUgPSBzdHlsZS5mcmFjTnVtKCk7XG4gIHZhciBkc3R5bGUgPSBzdHlsZS5mcmFjRGVuKCk7XG4gIHZhciBuZXdPcHRpb25zO1xuICBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShuc3R5bGUpO1xuICB2YXIgbnVtZXJtID0gYnVpbGRIVE1MX2J1aWxkR3JvdXAoZ3JvdXAubnVtZXIsIG5ld09wdGlvbnMsIG9wdGlvbnMpO1xuXG4gIGlmIChncm91cC5jb250aW51ZWQpIHtcbiAgICAvLyBcXGNmcmFjIGluc2VydHMgYSBcXHN0cnV0IGludG8gdGhlIG51bWVyYXRvci5cbiAgICAvLyBHZXQgXFxzdHJ1dCBkaW1lbnNpb25zIGZyb20gVGVYYm9vayBwYWdlIDM1My5cbiAgICB2YXIgaFN0cnV0ID0gOC41IC8gb3B0aW9ucy5mb250TWV0cmljcygpLnB0UGVyRW07XG4gICAgdmFyIGRTdHJ1dCA9IDMuNSAvIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5wdFBlckVtO1xuICAgIG51bWVybS5oZWlnaHQgPSBudW1lcm0uaGVpZ2h0IDwgaFN0cnV0ID8gaFN0cnV0IDogbnVtZXJtLmhlaWdodDtcbiAgICBudW1lcm0uZGVwdGggPSBudW1lcm0uZGVwdGggPCBkU3RydXQgPyBkU3RydXQgOiBudW1lcm0uZGVwdGg7XG4gIH1cblxuICBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShkc3R5bGUpO1xuICB2YXIgZGVub21tID0gYnVpbGRIVE1MX2J1aWxkR3JvdXAoZ3JvdXAuZGVub20sIG5ld09wdGlvbnMsIG9wdGlvbnMpO1xuICB2YXIgcnVsZTtcbiAgdmFyIHJ1bGVXaWR0aDtcbiAgdmFyIHJ1bGVTcGFjaW5nO1xuXG4gIGlmIChncm91cC5oYXNCYXJMaW5lKSB7XG4gICAgaWYgKGdyb3VwLmJhclNpemUpIHtcbiAgICAgIHJ1bGVXaWR0aCA9IHVuaXRzX2NhbGN1bGF0ZVNpemUoZ3JvdXAuYmFyU2l6ZSwgb3B0aW9ucyk7XG4gICAgICBydWxlID0gYnVpbGRDb21tb24ubWFrZUxpbmVTcGFuKFwiZnJhYy1saW5lXCIsIG9wdGlvbnMsIHJ1bGVXaWR0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJ1bGUgPSBidWlsZENvbW1vbi5tYWtlTGluZVNwYW4oXCJmcmFjLWxpbmVcIiwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcnVsZVdpZHRoID0gcnVsZS5oZWlnaHQ7XG4gICAgcnVsZVNwYWNpbmcgPSBydWxlLmhlaWdodDtcbiAgfSBlbHNlIHtcbiAgICBydWxlID0gbnVsbDtcbiAgICBydWxlV2lkdGggPSAwO1xuICAgIHJ1bGVTcGFjaW5nID0gb3B0aW9ucy5mb250TWV0cmljcygpLmRlZmF1bHRSdWxlVGhpY2tuZXNzO1xuICB9IC8vIFJ1bGUgMTViXG5cblxuICB2YXIgbnVtU2hpZnQ7XG4gIHZhciBjbGVhcmFuY2U7XG4gIHZhciBkZW5vbVNoaWZ0O1xuXG4gIGlmIChzdHlsZS5zaXplID09PSBzcmNfU3R5bGUuRElTUExBWS5zaXplIHx8IGdyb3VwLnNpemUgPT09IFwiZGlzcGxheVwiKSB7XG4gICAgbnVtU2hpZnQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkubnVtMTtcblxuICAgIGlmIChydWxlV2lkdGggPiAwKSB7XG4gICAgICBjbGVhcmFuY2UgPSAzICogcnVsZVNwYWNpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFyYW5jZSA9IDcgKiBydWxlU3BhY2luZztcbiAgICB9XG5cbiAgICBkZW5vbVNoaWZ0ID0gb3B0aW9ucy5mb250TWV0cmljcygpLmRlbm9tMTtcbiAgfSBlbHNlIHtcbiAgICBpZiAocnVsZVdpZHRoID4gMCkge1xuICAgICAgbnVtU2hpZnQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkubnVtMjtcbiAgICAgIGNsZWFyYW5jZSA9IHJ1bGVTcGFjaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBudW1TaGlmdCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5udW0zO1xuICAgICAgY2xlYXJhbmNlID0gMyAqIHJ1bGVTcGFjaW5nO1xuICAgIH1cblxuICAgIGRlbm9tU2hpZnQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVub20yO1xuICB9XG5cbiAgdmFyIGZyYWM7XG5cbiAgaWYgKCFydWxlKSB7XG4gICAgLy8gUnVsZSAxNWNcbiAgICB2YXIgY2FuZGlkYXRlQ2xlYXJhbmNlID0gbnVtU2hpZnQgLSBudW1lcm0uZGVwdGggLSAoZGVub21tLmhlaWdodCAtIGRlbm9tU2hpZnQpO1xuXG4gICAgaWYgKGNhbmRpZGF0ZUNsZWFyYW5jZSA8IGNsZWFyYW5jZSkge1xuICAgICAgbnVtU2hpZnQgKz0gMC41ICogKGNsZWFyYW5jZSAtIGNhbmRpZGF0ZUNsZWFyYW5jZSk7XG4gICAgICBkZW5vbVNoaWZ0ICs9IDAuNSAqIChjbGVhcmFuY2UgLSBjYW5kaWRhdGVDbGVhcmFuY2UpO1xuICAgIH1cblxuICAgIGZyYWMgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBkZW5vbW0sXG4gICAgICAgIHNoaWZ0OiBkZW5vbVNoaWZ0XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBudW1lcm0sXG4gICAgICAgIHNoaWZ0OiAtbnVtU2hpZnRcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gUnVsZSAxNWRcbiAgICB2YXIgYXhpc0hlaWdodCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O1xuXG4gICAgaWYgKG51bVNoaWZ0IC0gbnVtZXJtLmRlcHRoIC0gKGF4aXNIZWlnaHQgKyAwLjUgKiBydWxlV2lkdGgpIDwgY2xlYXJhbmNlKSB7XG4gICAgICBudW1TaGlmdCArPSBjbGVhcmFuY2UgLSAobnVtU2hpZnQgLSBudW1lcm0uZGVwdGggLSAoYXhpc0hlaWdodCArIDAuNSAqIHJ1bGVXaWR0aCkpO1xuICAgIH1cblxuICAgIGlmIChheGlzSGVpZ2h0IC0gMC41ICogcnVsZVdpZHRoIC0gKGRlbm9tbS5oZWlnaHQgLSBkZW5vbVNoaWZ0KSA8IGNsZWFyYW5jZSkge1xuICAgICAgZGVub21TaGlmdCArPSBjbGVhcmFuY2UgLSAoYXhpc0hlaWdodCAtIDAuNSAqIHJ1bGVXaWR0aCAtIChkZW5vbW0uaGVpZ2h0IC0gZGVub21TaGlmdCkpO1xuICAgIH1cblxuICAgIHZhciBtaWRTaGlmdCA9IC0oYXhpc0hlaWdodCAtIDAuNSAqIHJ1bGVXaWR0aCk7XG4gICAgZnJhYyA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGRlbm9tbSxcbiAgICAgICAgc2hpZnQ6IGRlbm9tU2hpZnRcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHJ1bGUsXG4gICAgICAgIHNoaWZ0OiBtaWRTaGlmdFxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogbnVtZXJtLFxuICAgICAgICBzaGlmdDogLW51bVNoaWZ0XG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICB9IC8vIFNpbmNlIHdlIG1hbnVhbGx5IGNoYW5nZSB0aGUgc3R5bGUgc29tZXRpbWVzICh3aXRoIFxcZGZyYWMgb3IgXFx0ZnJhYyksXG4gIC8vIGFjY291bnQgZm9yIHRoZSBwb3NzaWJsZSBzaXplIGNoYW5nZSBoZXJlLlxuXG5cbiAgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoc3R5bGUpO1xuICBmcmFjLmhlaWdodCAqPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgZnJhYy5kZXB0aCAqPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjsgLy8gUnVsZSAxNWVcblxuICB2YXIgZGVsaW1TaXplO1xuXG4gIGlmIChzdHlsZS5zaXplID09PSBzcmNfU3R5bGUuRElTUExBWS5zaXplKSB7XG4gICAgZGVsaW1TaXplID0gb3B0aW9ucy5mb250TWV0cmljcygpLmRlbGltMTtcbiAgfSBlbHNlIHtcbiAgICBkZWxpbVNpemUgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVsaW0yO1xuICB9XG5cbiAgdmFyIGxlZnREZWxpbTtcbiAgdmFyIHJpZ2h0RGVsaW07XG5cbiAgaWYgKGdyb3VwLmxlZnREZWxpbSA9PSBudWxsKSB7XG4gICAgbGVmdERlbGltID0gbWFrZU51bGxEZWxpbWl0ZXIob3B0aW9ucywgW1wibW9wZW5cIl0pO1xuICB9IGVsc2Uge1xuICAgIGxlZnREZWxpbSA9IGRlbGltaXRlci5jdXN0b21TaXplZERlbGltKGdyb3VwLmxlZnREZWxpbSwgZGVsaW1TaXplLCB0cnVlLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlKSwgZ3JvdXAubW9kZSwgW1wibW9wZW5cIl0pO1xuICB9XG5cbiAgaWYgKGdyb3VwLmNvbnRpbnVlZCkge1xuICAgIHJpZ2h0RGVsaW0gPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXSk7IC8vIHplcm8gd2lkdGggZm9yIFxcY2ZyYWNcbiAgfSBlbHNlIGlmIChncm91cC5yaWdodERlbGltID09IG51bGwpIHtcbiAgICByaWdodERlbGltID0gbWFrZU51bGxEZWxpbWl0ZXIob3B0aW9ucywgW1wibWNsb3NlXCJdKTtcbiAgfSBlbHNlIHtcbiAgICByaWdodERlbGltID0gZGVsaW1pdGVyLmN1c3RvbVNpemVkRGVsaW0oZ3JvdXAucmlnaHREZWxpbSwgZGVsaW1TaXplLCB0cnVlLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlKSwgZ3JvdXAubW9kZSwgW1wibWNsb3NlXCJdKTtcbiAgfVxuXG4gIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCJdLmNvbmNhdChuZXdPcHRpb25zLnNpemluZ0NsYXNzZXMob3B0aW9ucykpLCBbbGVmdERlbGltLCBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtZnJhY1wiXSwgW2ZyYWNdKSwgcmlnaHREZWxpbV0sIG9wdGlvbnMpO1xufTtcblxudmFyIGdlbmZyYWNfbWF0aG1sQnVpbGRlciA9IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1mcmFjXCIsIFtidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLm51bWVyLCBvcHRpb25zKSwgYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5kZW5vbSwgb3B0aW9ucyldKTtcblxuICBpZiAoIWdyb3VwLmhhc0JhckxpbmUpIHtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImxpbmV0aGlja25lc3NcIiwgXCIwcHhcIik7XG4gIH0gZWxzZSBpZiAoZ3JvdXAuYmFyU2l6ZSkge1xuICAgIHZhciBydWxlV2lkdGggPSB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLmJhclNpemUsIG9wdGlvbnMpO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibGluZXRoaWNrbmVzc1wiLCBydWxlV2lkdGggKyBcImVtXCIpO1xuICB9XG5cbiAgdmFyIHN0eWxlID0gZ2VuZnJhY19hZGp1c3RTdHlsZShncm91cC5zaXplLCBvcHRpb25zLnN0eWxlKTtcblxuICBpZiAoc3R5bGUuc2l6ZSAhPT0gb3B0aW9ucy5zdHlsZS5zaXplKSB7XG4gICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXN0eWxlXCIsIFtub2RlXSk7XG4gICAgdmFyIGlzRGlzcGxheSA9IHN0eWxlLnNpemUgPT09IHNyY19TdHlsZS5ESVNQTEFZLnNpemUgPyBcInRydWVcIiA6IFwiZmFsc2VcIjtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImRpc3BsYXlzdHlsZVwiLCBpc0Rpc3BsYXkpO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic2NyaXB0bGV2ZWxcIiwgXCIwXCIpO1xuICB9XG5cbiAgaWYgKGdyb3VwLmxlZnREZWxpbSAhPSBudWxsIHx8IGdyb3VwLnJpZ2h0RGVsaW0gIT0gbnVsbCkge1xuICAgIHZhciB3aXRoRGVsaW1zID0gW107XG5cbiAgICBpZiAoZ3JvdXAubGVmdERlbGltICE9IG51bGwpIHtcbiAgICAgIHZhciBsZWZ0T3AgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFtuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZShncm91cC5sZWZ0RGVsaW0ucmVwbGFjZShcIlxcXFxcIiwgXCJcIikpXSk7XG4gICAgICBsZWZ0T3Auc2V0QXR0cmlidXRlKFwiZmVuY2VcIiwgXCJ0cnVlXCIpO1xuICAgICAgd2l0aERlbGltcy5wdXNoKGxlZnRPcCk7XG4gICAgfVxuXG4gICAgd2l0aERlbGltcy5wdXNoKG5vZGUpO1xuXG4gICAgaWYgKGdyb3VwLnJpZ2h0RGVsaW0gIT0gbnVsbCkge1xuICAgICAgdmFyIHJpZ2h0T3AgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFtuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZShncm91cC5yaWdodERlbGltLnJlcGxhY2UoXCJcXFxcXCIsIFwiXCIpKV0pO1xuICAgICAgcmlnaHRPcC5zZXRBdHRyaWJ1dGUoXCJmZW5jZVwiLCBcInRydWVcIik7XG4gICAgICB3aXRoRGVsaW1zLnB1c2gocmlnaHRPcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1aWxkTWF0aE1MX21ha2VSb3cod2l0aERlbGltcyk7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJnZW5mcmFjXCIsXG4gIG5hbWVzOiBbXCJcXFxcY2ZyYWNcIiwgXCJcXFxcZGZyYWNcIiwgXCJcXFxcZnJhY1wiLCBcIlxcXFx0ZnJhY1wiLCBcIlxcXFxkYmlub21cIiwgXCJcXFxcYmlub21cIiwgXCJcXFxcdGJpbm9tXCIsIFwiXFxcXFxcXFxhdG9wZnJhY1wiLCAvLyBjYW7igJl0IGJlIGVudGVyZWQgZGlyZWN0bHlcbiAgXCJcXFxcXFxcXGJyYWNlZnJhY1wiLCBcIlxcXFxcXFxcYnJhY2tmcmFjXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgZ3JlZWRpbmVzczogMlxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZi5wYXJzZXIsXG4gICAgICAgIGZ1bmNOYW1lID0gX3JlZi5mdW5jTmFtZTtcbiAgICB2YXIgbnVtZXIgPSBhcmdzWzBdO1xuICAgIHZhciBkZW5vbSA9IGFyZ3NbMV07XG4gICAgdmFyIGhhc0JhckxpbmU7XG4gICAgdmFyIGxlZnREZWxpbSA9IG51bGw7XG4gICAgdmFyIHJpZ2h0RGVsaW0gPSBudWxsO1xuICAgIHZhciBzaXplID0gXCJhdXRvXCI7XG5cbiAgICBzd2l0Y2ggKGZ1bmNOYW1lKSB7XG4gICAgICBjYXNlIFwiXFxcXGNmcmFjXCI6XG4gICAgICBjYXNlIFwiXFxcXGRmcmFjXCI6XG4gICAgICBjYXNlIFwiXFxcXGZyYWNcIjpcbiAgICAgIGNhc2UgXCJcXFxcdGZyYWNcIjpcbiAgICAgICAgaGFzQmFyTGluZSA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiXFxcXFxcXFxhdG9wZnJhY1wiOlxuICAgICAgICBoYXNCYXJMaW5lID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiXFxcXGRiaW5vbVwiOlxuICAgICAgY2FzZSBcIlxcXFxiaW5vbVwiOlxuICAgICAgY2FzZSBcIlxcXFx0Ymlub21cIjpcbiAgICAgICAgaGFzQmFyTGluZSA9IGZhbHNlO1xuICAgICAgICBsZWZ0RGVsaW0gPSBcIihcIjtcbiAgICAgICAgcmlnaHREZWxpbSA9IFwiKVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxcXFxcYnJhY2VmcmFjXCI6XG4gICAgICAgIGhhc0JhckxpbmUgPSBmYWxzZTtcbiAgICAgICAgbGVmdERlbGltID0gXCJcXFxce1wiO1xuICAgICAgICByaWdodERlbGltID0gXCJcXFxcfVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxcXFxcYnJhY2tmcmFjXCI6XG4gICAgICAgIGhhc0JhckxpbmUgPSBmYWxzZTtcbiAgICAgICAgbGVmdERlbGltID0gXCJbXCI7XG4gICAgICAgIHJpZ2h0RGVsaW0gPSBcIl1cIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVucmVjb2duaXplZCBnZW5mcmFjIGNvbW1hbmRcIik7XG4gICAgfVxuXG4gICAgc3dpdGNoIChmdW5jTmFtZSkge1xuICAgICAgY2FzZSBcIlxcXFxjZnJhY1wiOlxuICAgICAgY2FzZSBcIlxcXFxkZnJhY1wiOlxuICAgICAgY2FzZSBcIlxcXFxkYmlub21cIjpcbiAgICAgICAgc2l6ZSA9IFwiZGlzcGxheVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFx0ZnJhY1wiOlxuICAgICAgY2FzZSBcIlxcXFx0Ymlub21cIjpcbiAgICAgICAgc2l6ZSA9IFwidGV4dFwiO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJnZW5mcmFjXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGNvbnRpbnVlZDogZnVuY05hbWUgPT09IFwiXFxcXGNmcmFjXCIsXG4gICAgICBudW1lcjogbnVtZXIsXG4gICAgICBkZW5vbTogZGVub20sXG4gICAgICBoYXNCYXJMaW5lOiBoYXNCYXJMaW5lLFxuICAgICAgbGVmdERlbGltOiBsZWZ0RGVsaW0sXG4gICAgICByaWdodERlbGltOiByaWdodERlbGltLFxuICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgIGJhclNpemU6IG51bGxcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZ2VuZnJhY19odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogZ2VuZnJhY19tYXRobWxCdWlsZGVyXG59KTsgLy8gSW5maXggZ2VuZXJhbGl6ZWQgZnJhY3Rpb25zIC0tIHRoZXNlIGFyZSBub3QgcmVuZGVyZWQgZGlyZWN0bHksIGJ1dCByZXBsYWNlZFxuLy8gaW1tZWRpYXRlbHkgYnkgb25lIG9mIHRoZSB2YXJpYW50cyBhYm92ZS5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImluZml4XCIsXG4gIG5hbWVzOiBbXCJcXFxcb3ZlclwiLCBcIlxcXFxjaG9vc2VcIiwgXCJcXFxcYXRvcFwiLCBcIlxcXFxicmFjZVwiLCBcIlxcXFxicmFja1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIGluZml4OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZjIpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZjIucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWYyLmZ1bmNOYW1lLFxuICAgICAgICB0b2tlbiA9IF9yZWYyLnRva2VuO1xuICAgIHZhciByZXBsYWNlV2l0aDtcblxuICAgIHN3aXRjaCAoZnVuY05hbWUpIHtcbiAgICAgIGNhc2UgXCJcXFxcb3ZlclwiOlxuICAgICAgICByZXBsYWNlV2l0aCA9IFwiXFxcXGZyYWNcIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcY2hvb3NlXCI6XG4gICAgICAgIHJlcGxhY2VXaXRoID0gXCJcXFxcYmlub21cIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcYXRvcFwiOlxuICAgICAgICByZXBsYWNlV2l0aCA9IFwiXFxcXFxcXFxhdG9wZnJhY1wiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxicmFjZVwiOlxuICAgICAgICByZXBsYWNlV2l0aCA9IFwiXFxcXFxcXFxicmFjZWZyYWNcIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcYnJhY2tcIjpcbiAgICAgICAgcmVwbGFjZVdpdGggPSBcIlxcXFxcXFxcYnJhY2tmcmFjXCI7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgaW5maXggZ2VuZnJhYyBjb21tYW5kXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImluZml4XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIHJlcGxhY2VXaXRoOiByZXBsYWNlV2l0aCxcbiAgICAgIHRva2VuOiB0b2tlblxuICAgIH07XG4gIH1cbn0pO1xudmFyIHN0eWxBcnJheSA9IFtcImRpc3BsYXlcIiwgXCJ0ZXh0XCIsIFwic2NyaXB0XCIsIFwic2NyaXB0c2NyaXB0XCJdO1xuXG52YXIgZGVsaW1Gcm9tVmFsdWUgPSBmdW5jdGlvbiBkZWxpbUZyb21WYWx1ZShkZWxpbVN0cmluZykge1xuICB2YXIgZGVsaW0gPSBudWxsO1xuXG4gIGlmIChkZWxpbVN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgZGVsaW0gPSBkZWxpbVN0cmluZztcbiAgICBkZWxpbSA9IGRlbGltID09PSBcIi5cIiA/IG51bGwgOiBkZWxpbTtcbiAgfVxuXG4gIHJldHVybiBkZWxpbTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJnZW5mcmFjXCIsXG4gIG5hbWVzOiBbXCJcXFxcZ2VuZnJhY1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiA2LFxuICAgIGdyZWVkaW5lc3M6IDYsXG4gICAgYXJnVHlwZXM6IFtcIm1hdGhcIiwgXCJtYXRoXCIsIFwic2l6ZVwiLCBcInRleHRcIiwgXCJtYXRoXCIsIFwibWF0aFwiXVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYzLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYzLnBhcnNlcjtcbiAgICB2YXIgbnVtZXIgPSBhcmdzWzRdO1xuICAgIHZhciBkZW5vbSA9IGFyZ3NbNV07IC8vIExvb2sgaW50byB0aGUgcGFyc2Ugbm9kZXMgdG8gZ2V0IHRoZSBkZXNpcmVkIGRlbGltaXRlcnMuXG5cbiAgICB2YXIgbGVmdE5vZGUgPSBjaGVja05vZGVUeXBlKGFyZ3NbMF0sIFwiYXRvbVwiKTtcblxuICAgIGlmIChsZWZ0Tm9kZSkge1xuICAgICAgbGVmdE5vZGUgPSBhc3NlcnRBdG9tRmFtaWx5KGFyZ3NbMF0sIFwib3BlblwiKTtcbiAgICB9XG5cbiAgICB2YXIgbGVmdERlbGltID0gbGVmdE5vZGUgPyBkZWxpbUZyb21WYWx1ZShsZWZ0Tm9kZS50ZXh0KSA6IG51bGw7XG4gICAgdmFyIHJpZ2h0Tm9kZSA9IGNoZWNrTm9kZVR5cGUoYXJnc1sxXSwgXCJhdG9tXCIpO1xuXG4gICAgaWYgKHJpZ2h0Tm9kZSkge1xuICAgICAgcmlnaHROb2RlID0gYXNzZXJ0QXRvbUZhbWlseShhcmdzWzFdLCBcImNsb3NlXCIpO1xuICAgIH1cblxuICAgIHZhciByaWdodERlbGltID0gcmlnaHROb2RlID8gZGVsaW1Gcm9tVmFsdWUocmlnaHROb2RlLnRleHQpIDogbnVsbDtcbiAgICB2YXIgYmFyTm9kZSA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMl0sIFwic2l6ZVwiKTtcbiAgICB2YXIgaGFzQmFyTGluZTtcbiAgICB2YXIgYmFyU2l6ZSA9IG51bGw7XG5cbiAgICBpZiAoYmFyTm9kZS5pc0JsYW5rKSB7XG4gICAgICAvLyBcXGdlbmZyYWMgYWN0cyBkaWZmZXJlbnRseSB0aGFuIFxcYWJvdmUuXG4gICAgICAvLyBcXGdlbmZyYWMgdHJlYXRzIGFuIGVtcHR5IHNpemUgZ3JvdXAgYXMgYSBzaWduYWwgdG8gdXNlIGFcbiAgICAgIC8vIHN0YW5kYXJkIGJhciBzaXplLiBcXGFib3ZlIHdvdWxkIHNlZSBzaXplID0gMCBhbmQgb21pdCB0aGUgYmFyLlxuICAgICAgaGFzQmFyTGluZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhclNpemUgPSBiYXJOb2RlLnZhbHVlO1xuICAgICAgaGFzQmFyTGluZSA9IGJhclNpemUubnVtYmVyID4gMDtcbiAgICB9IC8vIEZpbmQgb3V0IGlmIHdlIHdhbnQgZGlzcGxheXN0eWxlLCB0ZXh0c3R5bGUsIGV0Yy5cblxuXG4gICAgdmFyIHNpemUgPSBcImF1dG9cIjtcbiAgICB2YXIgc3R5bCA9IGNoZWNrTm9kZVR5cGUoYXJnc1szXSwgXCJvcmRncm91cFwiKTtcblxuICAgIGlmIChzdHlsKSB7XG4gICAgICBpZiAoc3R5bC5ib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIHRleHRPcmQgPSBhc3NlcnROb2RlVHlwZShzdHlsLmJvZHlbMF0sIFwidGV4dG9yZFwiKTtcbiAgICAgICAgc2l6ZSA9IHN0eWxBcnJheVtOdW1iZXIodGV4dE9yZC50ZXh0KV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWwgPSBhc3NlcnROb2RlVHlwZShhcmdzWzNdLCBcInRleHRvcmRcIik7XG4gICAgICBzaXplID0gc3R5bEFycmF5W051bWJlcihzdHlsLnRleHQpXTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJnZW5mcmFjXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG51bWVyOiBudW1lcixcbiAgICAgIGRlbm9tOiBkZW5vbSxcbiAgICAgIGNvbnRpbnVlZDogZmFsc2UsXG4gICAgICBoYXNCYXJMaW5lOiBoYXNCYXJMaW5lLFxuICAgICAgYmFyU2l6ZTogYmFyU2l6ZSxcbiAgICAgIGxlZnREZWxpbTogbGVmdERlbGltLFxuICAgICAgcmlnaHREZWxpbTogcmlnaHREZWxpbSxcbiAgICAgIHNpemU6IHNpemVcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZ2VuZnJhY19odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogZ2VuZnJhY19tYXRobWxCdWlsZGVyXG59KTsgLy8gXFxhYm92ZSBpcyBhbiBpbmZpeCBmcmFjdGlvbiB0aGF0IGFsc28gZGVmaW5lcyBhIGZyYWN0aW9uIGJhciBzaXplLlxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaW5maXhcIixcbiAgbmFtZXM6IFtcIlxcXFxhYm92ZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJzaXplXCJdLFxuICAgIGluZml4OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZjQsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZjQucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWY0LmZ1bmNOYW1lLFxuICAgICAgICB0b2tlbiA9IF9yZWY0LnRva2VuO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImluZml4XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIHJlcGxhY2VXaXRoOiBcIlxcXFxcXFxcYWJvdmVmcmFjXCIsXG4gICAgICBzaXplOiBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcInNpemVcIikudmFsdWUsXG4gICAgICB0b2tlbjogdG9rZW5cbiAgICB9O1xuICB9XG59KTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJnZW5mcmFjXCIsXG4gIG5hbWVzOiBbXCJcXFxcXFxcXGFib3ZlZnJhY1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAzLFxuICAgIGFyZ1R5cGVzOiBbXCJtYXRoXCIsIFwic2l6ZVwiLCBcIm1hdGhcIl1cbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmNSwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmNS5wYXJzZXIsXG4gICAgICAgIGZ1bmNOYW1lID0gX3JlZjUuZnVuY05hbWU7XG4gICAgdmFyIG51bWVyID0gYXJnc1swXTtcbiAgICB2YXIgYmFyU2l6ZSA9IGFzc2VydChhc3NlcnROb2RlVHlwZShhcmdzWzFdLCBcImluZml4XCIpLnNpemUpO1xuICAgIHZhciBkZW5vbSA9IGFyZ3NbMl07XG4gICAgdmFyIGhhc0JhckxpbmUgPSBiYXJTaXplLm51bWJlciA+IDA7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZ2VuZnJhY1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBudW1lcjogbnVtZXIsXG4gICAgICBkZW5vbTogZGVub20sXG4gICAgICBjb250aW51ZWQ6IGZhbHNlLFxuICAgICAgaGFzQmFyTGluZTogaGFzQmFyTGluZSxcbiAgICAgIGJhclNpemU6IGJhclNpemUsXG4gICAgICBsZWZ0RGVsaW06IG51bGwsXG4gICAgICByaWdodERlbGltOiBudWxsLFxuICAgICAgc2l6ZTogXCJhdXRvXCJcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZ2VuZnJhY19odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogZ2VuZnJhY19tYXRobWxCdWlsZGVyXG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9ob3JpekJyYWNlLmpzXG5cblxuXG5cblxuXG5cblxuLy8gTk9URTogVW5saWtlIG1vc3QgYGh0bWxCdWlsZGVyYHMsIHRoaXMgb25lIGhhbmRsZXMgbm90IG9ubHkgXCJob3JpekJyYWNlXCIsIGJ1dFxudmFyIGhvcml6QnJhY2VfaHRtbEJ1aWxkZXIgPSBmdW5jdGlvbiBodG1sQnVpbGRlcihncnAsIG9wdGlvbnMpIHtcbiAgdmFyIHN0eWxlID0gb3B0aW9ucy5zdHlsZTsgLy8gUHVsbCBvdXQgdGhlIGBQYXJzZU5vZGU8XCJob3JpekJyYWNlXCI+YCBpZiBgZ3JwYCBpcyBhIFwic3Vwc3ViXCIgbm9kZS5cblxuICB2YXIgc3VwU3ViR3JvdXA7XG4gIHZhciBncm91cDtcbiAgdmFyIHN1cFN1YiA9IGNoZWNrTm9kZVR5cGUoZ3JwLCBcInN1cHN1YlwiKTtcblxuICBpZiAoc3VwU3ViKSB7XG4gICAgLy8gUmVmOiBMYVRlWCBzb3VyY2UyZTogfX19fVxcbGltaXRzfVxuICAgIC8vIGkuZS4gTGFUZVggdHJlYXRzIHRoZSBicmFjZSBzaW1pbGFyIHRvIGFuIG9wIGFuZCBwYXNzZXMgaXRcbiAgICAvLyB3aXRoIFxcbGltaXRzLCBzbyB3ZSBuZWVkIHRvIGFzc2lnbiBzdXBzdWIgc3R5bGUuXG4gICAgc3VwU3ViR3JvdXAgPSBzdXBTdWIuc3VwID8gYnVpbGRIVE1MX2J1aWxkR3JvdXAoc3VwU3ViLnN1cCwgb3B0aW9ucy5oYXZpbmdTdHlsZShzdHlsZS5zdXAoKSksIG9wdGlvbnMpIDogYnVpbGRIVE1MX2J1aWxkR3JvdXAoc3VwU3ViLnN1Yiwgb3B0aW9ucy5oYXZpbmdTdHlsZShzdHlsZS5zdWIoKSksIG9wdGlvbnMpO1xuICAgIGdyb3VwID0gYXNzZXJ0Tm9kZVR5cGUoc3VwU3ViLmJhc2UsIFwiaG9yaXpCcmFjZVwiKTtcbiAgfSBlbHNlIHtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKGdycCwgXCJob3JpekJyYWNlXCIpO1xuICB9IC8vIEJ1aWxkIHRoZSBiYXNlIGdyb3VwXG5cblxuICB2YXIgYm9keSA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJhc2UsIG9wdGlvbnMuaGF2aW5nQmFzZVN0eWxlKHNyY19TdHlsZS5ESVNQTEFZKSk7IC8vIENyZWF0ZSB0aGUgc3RyZXRjaHkgZWxlbWVudFxuXG4gIHZhciBicmFjZUJvZHkgPSBzdHJldGNoeS5zdmdTcGFuKGdyb3VwLCBvcHRpb25zKTsgLy8gR2VuZXJhdGUgdGhlIHZsaXN0LCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBrZXJucyAgICAgICAg4pSP4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSTXG4gIC8vIFRoaXMgZmlyc3Qgdmxpc3QgY29udGFpbnMgdGhlIGNvbnRlbnQgYW5kIHRoZSBicmFjZTogICBlcXVhdGlvblxuXG4gIHZhciB2bGlzdDtcblxuICBpZiAoZ3JvdXAuaXNPdmVyKSB7XG4gICAgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImZpcnN0QmFzZWxpbmVcIixcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogYm9keVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogMC4xXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBicmFjZUJvZHlcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7IC8vICRGbG93Rml4TWU6IFJlcGxhY2UgdGhpcyB3aXRoIHBhc3NpbmcgXCJzdmctYWxpZ25cIiBpbnRvIG1ha2VWTGlzdC5cblxuICAgIHZsaXN0LmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzFdLmNsYXNzZXMucHVzaChcInN2Zy1hbGlnblwiKTtcbiAgfSBlbHNlIHtcbiAgICB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IGJvZHkuZGVwdGggKyAwLjEgKyBicmFjZUJvZHkuaGVpZ2h0LFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBicmFjZUJvZHlcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IDAuMVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogYm9keVxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTsgLy8gJEZsb3dGaXhNZTogUmVwbGFjZSB0aGlzIHdpdGggcGFzc2luZyBcInN2Zy1hbGlnblwiIGludG8gbWFrZVZMaXN0LlxuXG4gICAgdmxpc3QuY2hpbGRyZW5bMF0uY2hpbGRyZW5bMF0uY2hpbGRyZW5bMF0uY2xhc3Nlcy5wdXNoKFwic3ZnLWFsaWduXCIpO1xuICB9XG5cbiAgaWYgKHN1cFN1Ykdyb3VwKSB7XG4gICAgLy8gVG8gd3JpdGUgdGhlIHN1cHN1Yiwgd3JhcCB0aGUgZmlyc3Qgdmxpc3QgaW4gYW5vdGhlciB2bGlzdDpcbiAgICAvLyBUaGV5IGNhbid0IGFsbCBnbyBpbiB0aGUgc2FtZSB2bGlzdCwgYmVjYXVzZSB0aGUgbm90ZSBtaWdodCBiZVxuICAgIC8vIHdpZGVyIHRoYW4gdGhlIGVxdWF0aW9uLiBXZSB3YW50IHRoZSBlcXVhdGlvbiB0byBjb250cm9sIHRoZVxuICAgIC8vIGJyYWNlIHdpZHRoLlxuICAgIC8vICAgICAgbm90ZSAgICAgICAgICBsb25nIG5vdGUgICAgICAgICAgIGxvbmcgbm90ZVxuICAgIC8vICAg4pSP4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSTICAgb3IgICAg4pSP4pSB4pSB4pSB4pSTICAgICBub3QgICAg4pSP4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSTXG4gICAgLy8gICAgZXF1YXRpb24gICAgICAgICAgIGVxbiAgICAgICAgICAgICAgICAgZXFuXG4gICAgdmFyIHZTcGFuID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBncm91cC5pc092ZXIgPyBcIm1vdmVyXCIgOiBcIm11bmRlclwiXSwgW3ZsaXN0XSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoZ3JvdXAuaXNPdmVyKSB7XG4gICAgICB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJmaXJzdEJhc2VsaW5lXCIsXG4gICAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IHZTcGFuXG4gICAgICAgIH0sIHtcbiAgICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgICBzaXplOiAwLjJcbiAgICAgICAgfSwge1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IHN1cFN1Ykdyb3VwXG4gICAgICAgIH1dXG4gICAgICB9LCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICAgIHBvc2l0aW9uRGF0YTogdlNwYW4uZGVwdGggKyAwLjIgKyBzdXBTdWJHcm91cC5oZWlnaHQgKyBzdXBTdWJHcm91cC5kZXB0aCxcbiAgICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogc3VwU3ViR3JvdXBcbiAgICAgICAgfSwge1xuICAgICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICAgIHNpemU6IDAuMlxuICAgICAgICB9LCB7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogdlNwYW5cbiAgICAgICAgfV1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCIsIGdyb3VwLmlzT3ZlciA/IFwibW92ZXJcIiA6IFwibXVuZGVyXCJdLCBbdmxpc3RdLCBvcHRpb25zKTtcbn07XG5cbnZhciBob3JpekJyYWNlX21hdGhtbEJ1aWxkZXIgPSBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gIHZhciBhY2NlbnROb2RlID0gc3RyZXRjaHkubWF0aE1Mbm9kZShncm91cC5sYWJlbCk7XG4gIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShncm91cC5pc092ZXIgPyBcIm1vdmVyXCIgOiBcIm11bmRlclwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5iYXNlLCBvcHRpb25zKSwgYWNjZW50Tm9kZV0pO1xufTsgLy8gSG9yaXpvbnRhbCBzdHJldGNoeSBicmFjZXNcblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaG9yaXpCcmFjZVwiLFxuICBuYW1lczogW1wiXFxcXG92ZXJicmFjZVwiLCBcIlxcXFx1bmRlcmJyYWNlXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWYuZnVuY05hbWU7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiaG9yaXpCcmFjZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBpc092ZXI6IC9eXFxcXG92ZXIvLnRlc3QoZnVuY05hbWUpLFxuICAgICAgYmFzZTogYXJnc1swXVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBob3JpekJyYWNlX2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBob3JpekJyYWNlX21hdGhtbEJ1aWxkZXJcbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2hyZWYuanNcblxuXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJocmVmXCIsXG4gIG5hbWVzOiBbXCJcXFxcaHJlZlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyLFxuICAgIGFyZ1R5cGVzOiBbXCJ1cmxcIiwgXCJvcmlnaW5hbFwiXSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMV07XG4gICAgdmFyIGhyZWYgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcInVybFwiKS51cmw7XG5cbiAgICBpZiAoIXBhcnNlci5zZXR0aW5ncy5pc1RydXN0ZWQoe1xuICAgICAgY29tbWFuZDogXCJcXFxcaHJlZlwiLFxuICAgICAgdXJsOiBocmVmXG4gICAgfSkpIHtcbiAgICAgIHJldHVybiBwYXJzZXIuZm9ybWF0VW5zdXBwb3J0ZWRDbWQoXCJcXFxcaHJlZlwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJocmVmXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICBib2R5OiBkZWZpbmVGdW5jdGlvbl9vcmRhcmd1bWVudChib2R5KVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBlbGVtZW50cyA9IGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucywgZmFsc2UpO1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlQW5jaG9yKGdyb3VwLmhyZWYsIFtdLCBlbGVtZW50cywgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbWF0aCA9IGJ1aWxkRXhwcmVzc2lvblJvdyhncm91cC5ib2R5LCBvcHRpb25zKTtcblxuICAgIGlmICghKG1hdGggaW5zdGFuY2VvZiBtYXRoTUxUcmVlX01hdGhOb2RlKSkge1xuICAgICAgbWF0aCA9IG5ldyBtYXRoTUxUcmVlX01hdGhOb2RlKFwibXJvd1wiLCBbbWF0aF0pO1xuICAgIH1cblxuICAgIG1hdGguc2V0QXR0cmlidXRlKFwiaHJlZlwiLCBncm91cC5ocmVmKTtcbiAgICByZXR1cm4gbWF0aDtcbiAgfVxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaHJlZlwiLFxuICBuYW1lczogW1wiXFxcXHVybFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJ1cmxcIl0sXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYyLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYyLnBhcnNlcjtcbiAgICB2YXIgaHJlZiA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwidXJsXCIpLnVybDtcblxuICAgIGlmICghcGFyc2VyLnNldHRpbmdzLmlzVHJ1c3RlZCh7XG4gICAgICBjb21tYW5kOiBcIlxcXFx1cmxcIixcbiAgICAgIHVybDogaHJlZlxuICAgIH0pKSB7XG4gICAgICByZXR1cm4gcGFyc2VyLmZvcm1hdFVuc3VwcG9ydGVkQ21kKFwiXFxcXHVybFwiKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhcnMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaHJlZi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGMgPSBocmVmW2ldO1xuXG4gICAgICBpZiAoYyA9PT0gXCJ+XCIpIHtcbiAgICAgICAgYyA9IFwiXFxcXHRleHRhc2NpaXRpbGRlXCI7XG4gICAgICB9XG5cbiAgICAgIGNoYXJzLnB1c2goe1xuICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgbW9kZTogXCJ0ZXh0XCIsXG4gICAgICAgIHRleHQ6IGNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBib2R5ID0ge1xuICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGZvbnQ6IFwiXFxcXHRleHR0dFwiLFxuICAgICAgYm9keTogY2hhcnNcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImhyZWZcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgaHJlZjogaHJlZixcbiAgICAgIGJvZHk6IGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGJvZHkpXG4gICAgfTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvaHRtbG1hdGhtbC5qc1xuXG5cblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaHRtbG1hdGhtbFwiLFxuICBuYW1lczogW1wiXFxcXGh0bWxAbWF0aG1sXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZi5wYXJzZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiaHRtbG1hdGhtbFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBodG1sOiBkZWZpbmVGdW5jdGlvbl9vcmRhcmd1bWVudChhcmdzWzBdKSxcbiAgICAgIG1hdGhtbDogZGVmaW5lRnVuY3Rpb25fb3JkYXJndW1lbnQoYXJnc1sxXSlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBidWlsZEhUTUxfYnVpbGRFeHByZXNzaW9uKGdyb3VwLmh0bWwsIG9wdGlvbnMsIGZhbHNlKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUZyYWdtZW50KGVsZW1lbnRzKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHJldHVybiBidWlsZEV4cHJlc3Npb25Sb3coZ3JvdXAubWF0aG1sLCBvcHRpb25zKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvaW5jbHVkZWdyYXBoaWNzLmpzXG5cblxuXG5cblxuXG5cbnZhciBpbmNsdWRlZ3JhcGhpY3Nfc2l6ZURhdGEgPSBmdW5jdGlvbiBzaXplRGF0YShzdHIpIHtcbiAgaWYgKC9eWy0rXT8gKihcXGQrKFxcLlxcZCopP3xcXC5cXGQrKSQvLnRlc3Qoc3RyKSkge1xuICAgIC8vIHN0ciBpcyBhIG51bWJlciB3aXRoIG5vIHVuaXQgc3BlY2lmaWVkLlxuICAgIC8vIGRlZmF1bHQgdW5pdCBpcyBicCwgcGVyIGdyYXBoaXggcGFja2FnZS5cbiAgICByZXR1cm4ge1xuICAgICAgbnVtYmVyOiArc3RyLFxuICAgICAgdW5pdDogXCJicFwiXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbWF0Y2ggPSAvKFstK10/KSAqKFxcZCsoPzpcXC5cXGQqKT98XFwuXFxkKykgKihbYS16XXsyfSkvLmV4ZWMoc3RyKTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgc2l6ZTogJ1wiICsgc3RyICsgXCInIGluIFxcXFxpbmNsdWRlZ3JhcGhpY3NcIik7XG4gICAgfVxuXG4gICAgdmFyIGRhdGEgPSB7XG4gICAgICBudW1iZXI6ICsobWF0Y2hbMV0gKyBtYXRjaFsyXSksXG4gICAgICAvLyBzaWduICsgbWFnbml0dWRlLCBjYXN0IHRvIG51bWJlclxuICAgICAgdW5pdDogbWF0Y2hbM11cbiAgICB9O1xuXG4gICAgaWYgKCF2YWxpZFVuaXQoZGF0YSkpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgdW5pdDogJ1wiICsgZGF0YS51bml0ICsgXCInIGluIFxcXFxpbmNsdWRlZ3JhcGhpY3MuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG59O1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaW5jbHVkZWdyYXBoaWNzXCIsXG4gIG5hbWVzOiBbXCJcXFxcaW5jbHVkZWdyYXBoaWNzXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgbnVtT3B0aW9uYWxBcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJyYXdcIiwgXCJ1cmxcIl0sXG4gICAgYWxsb3dlZEluVGV4dDogZmFsc2VcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzLCBvcHRBcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyO1xuICAgIHZhciB3aWR0aCA9IHtcbiAgICAgIG51bWJlcjogMCxcbiAgICAgIHVuaXQ6IFwiZW1cIlxuICAgIH07XG4gICAgdmFyIGhlaWdodCA9IHtcbiAgICAgIG51bWJlcjogMC45LFxuICAgICAgdW5pdDogXCJlbVwiXG4gICAgfTsgLy8gc29ydGEgY2hhcmFjdGVyIHNpemVkLlxuXG4gICAgdmFyIHRvdGFsaGVpZ2h0ID0ge1xuICAgICAgbnVtYmVyOiAwLFxuICAgICAgdW5pdDogXCJlbVwiXG4gICAgfTtcbiAgICB2YXIgYWx0ID0gXCJcIjtcblxuICAgIGlmIChvcHRBcmdzWzBdKSB7XG4gICAgICB2YXIgYXR0cmlidXRlU3RyID0gYXNzZXJ0Tm9kZVR5cGUob3B0QXJnc1swXSwgXCJyYXdcIikuc3RyaW5nOyAvLyBQYXJzZXIuanMgZG9lcyBub3QgcGFyc2Uga2V5L3ZhbHVlIHBhaXJzLiBXZSBnZXQgYSBzdHJpbmcuXG5cbiAgICAgIHZhciBhdHRyaWJ1dGVzID0gYXR0cmlidXRlU3RyLnNwbGl0KFwiLFwiKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBrZXlWYWwgPSBhdHRyaWJ1dGVzW2ldLnNwbGl0KFwiPVwiKTtcblxuICAgICAgICBpZiAoa2V5VmFsLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHZhciBzdHIgPSBrZXlWYWxbMV0udHJpbSgpO1xuXG4gICAgICAgICAgc3dpdGNoIChrZXlWYWxbMF0udHJpbSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiYWx0XCI6XG4gICAgICAgICAgICAgIGFsdCA9IHN0cjtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJ3aWR0aFwiOlxuICAgICAgICAgICAgICB3aWR0aCA9IGluY2x1ZGVncmFwaGljc19zaXplRGF0YShzdHIpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcImhlaWdodFwiOlxuICAgICAgICAgICAgICBoZWlnaHQgPSBpbmNsdWRlZ3JhcGhpY3Nfc2l6ZURhdGEoc3RyKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJ0b3RhbGhlaWdodFwiOlxuICAgICAgICAgICAgICB0b3RhbGhlaWdodCA9IGluY2x1ZGVncmFwaGljc19zaXplRGF0YShzdHIpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCBrZXk6ICdcIiArIGtleVZhbFswXSArIFwiJyBpbiBcXFxcaW5jbHVkZWdyYXBoaWNzLlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc3JjID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXSwgXCJ1cmxcIikudXJsO1xuXG4gICAgaWYgKGFsdCA9PT0gXCJcIikge1xuICAgICAgLy8gTm8gYWx0IGdpdmVuLiBVc2UgdGhlIGZpbGUgbmFtZS4gU3RyaXAgYXdheSB0aGUgcGF0aC5cbiAgICAgIGFsdCA9IHNyYztcbiAgICAgIGFsdCA9IGFsdC5yZXBsYWNlKC9eLipbXFxcXC9dLywgJycpO1xuICAgICAgYWx0ID0gYWx0LnN1YnN0cmluZygwLCBhbHQubGFzdEluZGV4T2YoJy4nKSk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZXIuc2V0dGluZ3MuaXNUcnVzdGVkKHtcbiAgICAgIGNvbW1hbmQ6IFwiXFxcXGluY2x1ZGVncmFwaGljc1wiLFxuICAgICAgdXJsOiBzcmNcbiAgICB9KSkge1xuICAgICAgcmV0dXJuIHBhcnNlci5mb3JtYXRVbnN1cHBvcnRlZENtZChcIlxcXFxpbmNsdWRlZ3JhcGhpY3NcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiaW5jbHVkZWdyYXBoaWNzXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGFsdDogYWx0LFxuICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICB0b3RhbGhlaWdodDogdG90YWxoZWlnaHQsXG4gICAgICBzcmM6IHNyY1xuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBoZWlnaHQgPSB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLmhlaWdodCwgb3B0aW9ucyk7XG4gICAgdmFyIGRlcHRoID0gMDtcblxuICAgIGlmIChncm91cC50b3RhbGhlaWdodC5udW1iZXIgPiAwKSB7XG4gICAgICBkZXB0aCA9IHVuaXRzX2NhbGN1bGF0ZVNpemUoZ3JvdXAudG90YWxoZWlnaHQsIG9wdGlvbnMpIC0gaGVpZ2h0O1xuICAgICAgZGVwdGggPSBOdW1iZXIoZGVwdGgudG9GaXhlZCgyKSk7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gMDtcblxuICAgIGlmIChncm91cC53aWR0aC5udW1iZXIgPiAwKSB7XG4gICAgICB3aWR0aCA9IHVuaXRzX2NhbGN1bGF0ZVNpemUoZ3JvdXAud2lkdGgsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHZhciBzdHlsZSA9IHtcbiAgICAgIGhlaWdodDogaGVpZ2h0ICsgZGVwdGggKyBcImVtXCJcbiAgICB9O1xuXG4gICAgaWYgKHdpZHRoID4gMCkge1xuICAgICAgc3R5bGUud2lkdGggPSB3aWR0aCArIFwiZW1cIjtcbiAgICB9XG5cbiAgICBpZiAoZGVwdGggPiAwKSB7XG4gICAgICBzdHlsZS52ZXJ0aWNhbEFsaWduID0gLWRlcHRoICsgXCJlbVwiO1xuICAgIH1cblxuICAgIHZhciBub2RlID0gbmV3IGRvbVRyZWVfSW1nKGdyb3VwLnNyYywgZ3JvdXAuYWx0LCBzdHlsZSk7XG4gICAgbm9kZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgbm9kZS5kZXB0aCA9IGRlcHRoO1xuICAgIHJldHVybiBub2RlO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1nbHlwaFwiLCBbXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJhbHRcIiwgZ3JvdXAuYWx0KTtcbiAgICB2YXIgaGVpZ2h0ID0gdW5pdHNfY2FsY3VsYXRlU2l6ZShncm91cC5oZWlnaHQsIG9wdGlvbnMpO1xuICAgIHZhciBkZXB0aCA9IDA7XG5cbiAgICBpZiAoZ3JvdXAudG90YWxoZWlnaHQubnVtYmVyID4gMCkge1xuICAgICAgZGVwdGggPSB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLnRvdGFsaGVpZ2h0LCBvcHRpb25zKSAtIGhlaWdodDtcbiAgICAgIGRlcHRoID0gZGVwdGgudG9GaXhlZCgyKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwidmFsaWduXCIsIFwiLVwiICsgZGVwdGggKyBcImVtXCIpO1xuICAgIH1cblxuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGhlaWdodCArIGRlcHRoICsgXCJlbVwiKTtcblxuICAgIGlmIChncm91cC53aWR0aC5udW1iZXIgPiAwKSB7XG4gICAgICB2YXIgd2lkdGggPSB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLndpZHRoLCBvcHRpb25zKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgd2lkdGggKyBcImVtXCIpO1xuICAgIH1cblxuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic3JjXCIsIGdyb3VwLnNyYyk7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2tlcm4uanNcbi8vIEhvcml6b250YWwgc3BhY2luZyBjb21tYW5kc1xuXG5cblxuXG4gLy8gVE9ETzogXFxoc2tpcCBhbmQgXFxtc2tpcCBzaG91bGQgc3VwcG9ydCBwbHVzIGFuZCBtaW51cyBpbiBsZW5ndGhzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJrZXJuXCIsXG4gIG5hbWVzOiBbXCJcXFxca2VyblwiLCBcIlxcXFxta2VyblwiLCBcIlxcXFxoc2tpcFwiLCBcIlxcXFxtc2tpcFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJzaXplXCJdLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWYuZnVuY05hbWU7XG4gICAgdmFyIHNpemUgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcInNpemVcIik7XG5cbiAgICBpZiAocGFyc2VyLnNldHRpbmdzLnN0cmljdCkge1xuICAgICAgdmFyIG1hdGhGdW5jdGlvbiA9IGZ1bmNOYW1lWzFdID09PSAnbSc7IC8vIFxcbWtlcm4sIFxcbXNraXBcblxuICAgICAgdmFyIG11VW5pdCA9IHNpemUudmFsdWUudW5pdCA9PT0gJ211JztcblxuICAgICAgaWYgKG1hdGhGdW5jdGlvbikge1xuICAgICAgICBpZiAoIW11VW5pdCkge1xuICAgICAgICAgIHBhcnNlci5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJtYXRoVnNUZXh0VW5pdHNcIiwgXCJMYVRlWCdzIFwiICsgZnVuY05hbWUgKyBcIiBzdXBwb3J0cyBvbmx5IG11IHVuaXRzLCBcIiArIChcIm5vdCBcIiArIHNpemUudmFsdWUudW5pdCArIFwiIHVuaXRzXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZXIubW9kZSAhPT0gXCJtYXRoXCIpIHtcbiAgICAgICAgICBwYXJzZXIuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KFwibWF0aFZzVGV4dFVuaXRzXCIsIFwiTGFUZVgncyBcIiArIGZ1bmNOYW1lICsgXCIgd29ya3Mgb25seSBpbiBtYXRoIG1vZGVcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vICFtYXRoRnVuY3Rpb25cbiAgICAgICAgaWYgKG11VW5pdCkge1xuICAgICAgICAgIHBhcnNlci5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJtYXRoVnNUZXh0VW5pdHNcIiwgXCJMYVRlWCdzIFwiICsgZnVuY05hbWUgKyBcIiBkb2Vzbid0IHN1cHBvcnQgbXUgdW5pdHNcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGRpbWVuc2lvbjogc2l6ZS52YWx1ZVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlR2x1ZShncm91cC5kaW1lbnNpb24sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIGRpbWVuc2lvbiA9IHVuaXRzX2NhbGN1bGF0ZVNpemUoZ3JvdXAuZGltZW5zaW9uLCBvcHRpb25zKTtcbiAgICByZXR1cm4gbmV3IG1hdGhNTFRyZWUuU3BhY2VOb2RlKGRpbWVuc2lvbik7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2xhcC5qc1xuLy8gSG9yaXpvbnRhbCBvdmVybGFwIGZ1bmN0aW9uc1xuXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJsYXBcIixcbiAgbmFtZXM6IFtcIlxcXFxtYXRobGxhcFwiLCBcIlxcXFxtYXRocmxhcFwiLCBcIlxcXFxtYXRoY2xhcFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWYuZnVuY05hbWU7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImxhcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBhbGlnbm1lbnQ6IGZ1bmNOYW1lLnNsaWNlKDUpLFxuICAgICAgYm9keTogYm9keVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIG1hdGhsbGFwLCBtYXRocmxhcCwgbWF0aGNsYXBcbiAgICB2YXIgaW5uZXI7XG5cbiAgICBpZiAoZ3JvdXAuYWxpZ25tZW50ID09PSBcImNsYXBcIikge1xuICAgICAgLy8gcmVmOiBodHRwczovL3d3dy5tYXRoLmxzdS5lZHUvfmFwZXJsaXMvcHVibGljYXRpb25zL21hdGhjbGFwL1xuICAgICAgaW5uZXIgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXSwgW2J1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpXSk7IC8vIHdyYXAsIHNpbmNlIENTUyB3aWxsIGNlbnRlciBhIC5jbGFwID4gLmlubmVyID4gc3BhblxuXG4gICAgICBpbm5lciA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImlubmVyXCJdLCBbaW5uZXJdLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5uZXIgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJpbm5lclwiXSwgW2J1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpXSk7XG4gICAgfVxuXG4gICAgdmFyIGZpeCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImZpeFwiXSwgW10pO1xuICAgIHZhciBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW2dyb3VwLmFsaWdubWVudF0sIFtpbm5lciwgZml4XSwgb3B0aW9ucyk7IC8vIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgY29ycmVjdGx5IHNldCBob3Jpem9udGFsIGFsaWdubWVudCBvZiB0aGVcbiAgICAvLyB0d28gaXRlbXMgaW52b2x2ZWQgaW4gdGhlIGxhcC5cbiAgICAvLyBOZXh0LCB1c2UgYSBzdHJ1dCB0byBzZXQgdGhlIGhlaWdodCBvZiB0aGUgSFRNTCBib3VuZGluZyBib3guXG4gICAgLy8gT3RoZXJ3aXNlLCBhIHRhbGwgYXJndW1lbnQgbWF5IGJlIG1pc3BsYWNlZC5cblxuICAgIHZhciBzdHJ1dCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcInN0cnV0XCJdKTtcbiAgICBzdHJ1dC5zdHlsZS5oZWlnaHQgPSBub2RlLmhlaWdodCArIG5vZGUuZGVwdGggKyBcImVtXCI7XG4gICAgc3RydXQuc3R5bGUudmVydGljYWxBbGlnbiA9IC1ub2RlLmRlcHRoICsgXCJlbVwiO1xuICAgIG5vZGUuY2hpbGRyZW4udW5zaGlmdChzdHJ1dCk7IC8vIE5leHQsIHByZXZlbnQgdmVydGljYWwgbWlzcGxhY2VtZW50IHdoZW4gbmV4dCB0byBzb21ldGhpbmcgdGFsbC5cblxuICAgIG5vZGUgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImZpcnN0QmFzZWxpbmVcIixcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogbm9kZVxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTsgLy8gR2V0IHRoZSBob3Jpem9udGFsIHNwYWNpbmcgY29ycmVjdCByZWxhdGl2ZSB0byBhZGphY2VudCBpdGVtcy5cblxuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCJdLCBbbm9kZV0sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gbWF0aGxsYXAsIG1hdGhybGFwLCBtYXRoY2xhcFxuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcGFkZGVkXCIsIFtidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpXSk7XG5cbiAgICBpZiAoZ3JvdXAuYWxpZ25tZW50ICE9PSBcInJsYXBcIikge1xuICAgICAgdmFyIG9mZnNldCA9IGdyb3VwLmFsaWdubWVudCA9PT0gXCJsbGFwXCIgPyBcIi0xXCIgOiBcIi0wLjVcIjtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibHNwYWNlXCIsIG9mZnNldCArIFwid2lkdGhcIik7XG4gICAgfVxuXG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBcIjBweFwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvbWF0aC5qc1xuXG4gLy8gU3dpdGNoaW5nIGZyb20gdGV4dCBtb2RlIGJhY2sgdG8gbWF0aCBtb2RlXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJzdHlsaW5nXCIsXG4gIG5hbWVzOiBbXCJcXFxcKFwiLCBcIiRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGFsbG93ZWRJbk1hdGg6IGZhbHNlLFxuICAgIGNvbnN1bWVNb2RlOiBcIm1hdGhcIlxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lLFxuICAgICAgICBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICB2YXIgb3V0ZXJNb2RlID0gcGFyc2VyLm1vZGU7XG4gICAgcGFyc2VyLnN3aXRjaE1vZGUoXCJtYXRoXCIpO1xuICAgIHZhciBjbG9zZSA9IGZ1bmNOYW1lID09PSBcIlxcXFwoXCIgPyBcIlxcXFwpXCIgOiBcIiRcIjtcbiAgICB2YXIgYm9keSA9IHBhcnNlci5wYXJzZUV4cHJlc3Npb24oZmFsc2UsIGNsb3NlKTsgLy8gV2UgY2FuJ3QgZXhwYW5kIHRoZSBuZXh0IHN5bWJvbCBhZnRlciB0aGUgY2xvc2luZyAkIHVudGlsIGFmdGVyXG4gICAgLy8gc3dpdGNoaW5nIG1vZGVzIGJhY2suICBTbyBkb24ndCBjb25zdW1lIHdpdGhpbiBleHBlY3QuXG5cbiAgICBwYXJzZXIuZXhwZWN0KGNsb3NlLCBmYWxzZSk7XG4gICAgcGFyc2VyLnN3aXRjaE1vZGUob3V0ZXJNb2RlKTtcbiAgICBwYXJzZXIuY29uc3VtZSgpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInN0eWxpbmdcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgc3R5bGU6IFwidGV4dFwiLFxuICAgICAgYm9keTogYm9keVxuICAgIH07XG4gIH1cbn0pOyAvLyBDaGVjayBmb3IgZXh0cmEgY2xvc2luZyBtYXRoIGRlbGltaXRlcnNcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInRleHRcIixcbiAgLy8gRG9lc24ndCBtYXR0ZXIgd2hhdCB0aGlzIGlzLlxuICBuYW1lczogW1wiXFxcXClcIiwgXCJcXFxcXVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgYWxsb3dlZEluTWF0aDogZmFsc2VcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiTWlzbWF0Y2hlZCBcIiArIGNvbnRleHQuZnVuY05hbWUpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9tYXRoY2hvaWNlLmpzXG5cblxuXG5cblxuXG52YXIgbWF0aGNob2ljZV9jaG9vc2VNYXRoU3R5bGUgPSBmdW5jdGlvbiBjaG9vc2VNYXRoU3R5bGUoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgc3dpdGNoIChvcHRpb25zLnN0eWxlLnNpemUpIHtcbiAgICBjYXNlIHNyY19TdHlsZS5ESVNQTEFZLnNpemU6XG4gICAgICByZXR1cm4gZ3JvdXAuZGlzcGxheTtcblxuICAgIGNhc2Ugc3JjX1N0eWxlLlRFWFQuc2l6ZTpcbiAgICAgIHJldHVybiBncm91cC50ZXh0O1xuXG4gICAgY2FzZSBzcmNfU3R5bGUuU0NSSVBULnNpemU6XG4gICAgICByZXR1cm4gZ3JvdXAuc2NyaXB0O1xuXG4gICAgY2FzZSBzcmNfU3R5bGUuU0NSSVBUU0NSSVBULnNpemU6XG4gICAgICByZXR1cm4gZ3JvdXAuc2NyaXB0c2NyaXB0O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBncm91cC50ZXh0O1xuICB9XG59O1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibWF0aGNob2ljZVwiLFxuICBuYW1lczogW1wiXFxcXG1hdGhjaG9pY2VcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogNFxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZi5wYXJzZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwibWF0aGNob2ljZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBkaXNwbGF5OiBkZWZpbmVGdW5jdGlvbl9vcmRhcmd1bWVudChhcmdzWzBdKSxcbiAgICAgIHRleHQ6IGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGFyZ3NbMV0pLFxuICAgICAgc2NyaXB0OiBkZWZpbmVGdW5jdGlvbl9vcmRhcmd1bWVudChhcmdzWzJdKSxcbiAgICAgIHNjcmlwdHNjcmlwdDogZGVmaW5lRnVuY3Rpb25fb3JkYXJndW1lbnQoYXJnc1szXSlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgYm9keSA9IG1hdGhjaG9pY2VfY2hvb3NlTWF0aFN0eWxlKGdyb3VwLCBvcHRpb25zKTtcbiAgICB2YXIgZWxlbWVudHMgPSBidWlsZEhUTUxfYnVpbGRFeHByZXNzaW9uKGJvZHksIG9wdGlvbnMsIGZhbHNlKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUZyYWdtZW50KGVsZW1lbnRzKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBib2R5ID0gbWF0aGNob2ljZV9jaG9vc2VNYXRoU3R5bGUoZ3JvdXAsIG9wdGlvbnMpO1xuICAgIHJldHVybiBidWlsZEV4cHJlc3Npb25Sb3coYm9keSwgb3B0aW9ucyk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3V0aWxzL2Fzc2VtYmxlU3VwU3ViLmpzXG5cblxuLy8gRm9yIGFuIG9wZXJhdG9yIHdpdGggbGltaXRzLCBhc3NlbWJsZSB0aGUgYmFzZSwgc3VwLCBhbmQgc3ViIGludG8gYSBzcGFuLlxudmFyIGFzc2VtYmxlU3VwU3ViX2Fzc2VtYmxlU3VwU3ViID0gZnVuY3Rpb24gYXNzZW1ibGVTdXBTdWIoYmFzZSwgc3VwR3JvdXAsIHN1Ykdyb3VwLCBvcHRpb25zLCBzdHlsZSwgc2xhbnQsIGJhc2VTaGlmdCkge1xuICAvLyBJRSA4IGNsaXBzIFxcaW50IGlmIGl0IGlzIGluIGEgZGlzcGxheTogaW5saW5lLWJsb2NrLiBXZSB3cmFwIGl0XG4gIC8vIGluIGEgbmV3IHNwYW4gc28gaXQgaXMgYW4gaW5saW5lLCBhbmQgd29ya3MuXG4gIGJhc2UgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXSwgW2Jhc2VdKTtcbiAgdmFyIHN1YjtcbiAgdmFyIHN1cDsgLy8gV2UgbWFudWFsbHkgaGF2ZSB0byBoYW5kbGUgdGhlIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cy4gVGhpcyxcbiAgLy8gYXNpZGUgZnJvbSB0aGUga2VybiBjYWxjdWxhdGlvbnMsIGlzIGNvcGllZCBmcm9tIHN1cHN1Yi5cblxuICBpZiAoc3VwR3JvdXApIHtcbiAgICB2YXIgZWxlbSA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKHN1cEdyb3VwLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlLnN1cCgpKSwgb3B0aW9ucyk7XG4gICAgc3VwID0ge1xuICAgICAgZWxlbTogZWxlbSxcbiAgICAgIGtlcm46IE1hdGgubWF4KG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmcxLCBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nMyAtIGVsZW0uZGVwdGgpXG4gICAgfTtcbiAgfVxuXG4gIGlmIChzdWJHcm91cCkge1xuICAgIHZhciBfZWxlbSA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKHN1Ykdyb3VwLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlLnN1YigpKSwgb3B0aW9ucyk7XG5cbiAgICBzdWIgPSB7XG4gICAgICBlbGVtOiBfZWxlbSxcbiAgICAgIGtlcm46IE1hdGgubWF4KG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmcyLCBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNCAtIF9lbGVtLmhlaWdodClcbiAgICB9O1xuICB9IC8vIEJ1aWxkIHRoZSBmaW5hbCBncm91cCBhcyBhIHZsaXN0IG9mIHRoZSBwb3NzaWJsZSBzdWJzY3JpcHQsIGJhc2UsXG4gIC8vIGFuZCBwb3NzaWJsZSBzdXBlcnNjcmlwdC5cblxuXG4gIHZhciBmaW5hbEdyb3VwO1xuXG4gIGlmIChzdXAgJiYgc3ViKSB7XG4gICAgdmFyIGJvdHRvbSA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1ICsgc3ViLmVsZW0uaGVpZ2h0ICsgc3ViLmVsZW0uZGVwdGggKyBzdWIua2VybiArIGJhc2UuZGVwdGggKyBiYXNlU2hpZnQ7XG4gICAgZmluYWxHcm91cCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IGJvdHRvbSxcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogb3B0aW9ucy5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzVcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHN1Yi5lbGVtLFxuICAgICAgICBtYXJnaW5MZWZ0OiAtc2xhbnQgKyBcImVtXCJcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IHN1Yi5rZXJuXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBiYXNlXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiBzdXAua2VyblxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogc3VwLmVsZW0sXG4gICAgICAgIG1hcmdpbkxlZnQ6IHNsYW50ICsgXCJlbVwiXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNVxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfSBlbHNlIGlmIChzdWIpIHtcbiAgICB2YXIgdG9wID0gYmFzZS5oZWlnaHQgLSBiYXNlU2hpZnQ7IC8vIFNoaWZ0IHRoZSBsaW1pdHMgYnkgdGhlIHNsYW50IG9mIHRoZSBzeW1ib2wuIE5vdGVcbiAgICAvLyB0aGF0IHdlIGFyZSBzdXBwb3NlZCB0byBzaGlmdCB0aGUgbGltaXRzIGJ5IDEvMiBvZiB0aGUgc2xhbnQsXG4gICAgLy8gYnV0IHNpbmNlIHdlIGFyZSBjZW50ZXJpbmcgdGhlIGxpbWl0cyBhZGRpbmcgYSBmdWxsIHNsYW50IG9mXG4gICAgLy8gbWFyZ2luIHdpbGwgc2hpZnQgYnkgMS8yIHRoYXQuXG5cbiAgICBmaW5hbEdyb3VwID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJ0b3BcIixcbiAgICAgIHBvc2l0aW9uRGF0YTogdG9wLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogc3ViLmVsZW0sXG4gICAgICAgIG1hcmdpbkxlZnQ6IC1zbGFudCArIFwiZW1cIlxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogc3ViLmtlcm5cbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJhc2VcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSBpZiAoc3VwKSB7XG4gICAgdmFyIF9ib3R0b20gPSBiYXNlLmRlcHRoICsgYmFzZVNoaWZ0O1xuXG4gICAgZmluYWxHcm91cCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IF9ib3R0b20sXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJhc2VcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IHN1cC5rZXJuXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBzdXAuZWxlbSxcbiAgICAgICAgbWFyZ2luTGVmdDogc2xhbnQgKyBcImVtXCJcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1XG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgY2FzZSBwcm9iYWJseSBzaG91bGRuJ3Qgb2NjdXIgKHRoaXMgd291bGQgbWVhbiB0aGVcbiAgICAvLyBzdXBzdWIgd2FzIHNlbmRpbmcgdXMgYSBncm91cCB3aXRoIG5vIHN1cGVyc2NyaXB0IG9yXG4gICAgLy8gc3Vic2NyaXB0KSBidXQgYmUgc2FmZS5cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuXG4gIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3BcIiwgXCJvcC1saW1pdHNcIl0sIFtmaW5hbEdyb3VwXSwgb3B0aW9ucyk7XG59O1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL29wLmpzXG4vLyBMaW1pdHMsIHN5bWJvbHNcblxuXG5cblxuXG5cblxuXG5cblxuLy8gTW9zdCBvcGVyYXRvcnMgaGF2ZSBhIGxhcmdlIHN1Y2Nlc3NvciBzeW1ib2wsIGJ1dCB0aGVzZSBkb24ndC5cbnZhciBub1N1Y2Nlc3NvciA9IFtcIlxcXFxzbWFsbGludFwiXTsgLy8gTk9URTogVW5saWtlIG1vc3QgYGh0bWxCdWlsZGVyYHMsIHRoaXMgb25lIGhhbmRsZXMgbm90IG9ubHkgXCJvcFwiLCBidXQgYWxzb1xuLy8gXCJzdXBzdWJcIiBzaW5jZSBzb21lIG9mIHRoZW0gKGxpa2UgXFxpbnQpIGNhbiBhZmZlY3Qgc3VwZXIvc3Vic2NyaXB0aW5nLlxuXG52YXIgb3BfaHRtbEJ1aWxkZXIgPSBmdW5jdGlvbiBodG1sQnVpbGRlcihncnAsIG9wdGlvbnMpIHtcbiAgLy8gT3BlcmF0b3JzIGFyZSBoYW5kbGVkIGluIHRoZSBUZVhib29rIHBnLiA0NDMtNDQ0LCBydWxlIDEzKGEpLlxuICB2YXIgc3VwR3JvdXA7XG4gIHZhciBzdWJHcm91cDtcbiAgdmFyIGhhc0xpbWl0cyA9IGZhbHNlO1xuICB2YXIgZ3JvdXA7XG4gIHZhciBzdXBTdWIgPSBjaGVja05vZGVUeXBlKGdycCwgXCJzdXBzdWJcIik7XG5cbiAgaWYgKHN1cFN1Yikge1xuICAgIC8vIElmIHdlIGhhdmUgbGltaXRzLCBzdXBzdWIgd2lsbCBwYXNzIHVzIGl0cyBncm91cCB0byBoYW5kbGUuIFB1bGxcbiAgICAvLyBvdXQgdGhlIHN1cGVyc2NyaXB0IGFuZCBzdWJzY3JpcHQgYW5kIHNldCB0aGUgZ3JvdXAgdG8gdGhlIG9wIGluXG4gICAgLy8gaXRzIGJhc2UuXG4gICAgc3VwR3JvdXAgPSBzdXBTdWIuc3VwO1xuICAgIHN1Ykdyb3VwID0gc3VwU3ViLnN1YjtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKHN1cFN1Yi5iYXNlLCBcIm9wXCIpO1xuICAgIGhhc0xpbWl0cyA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgZ3JvdXAgPSBhc3NlcnROb2RlVHlwZShncnAsIFwib3BcIik7XG4gIH1cblxuICB2YXIgc3R5bGUgPSBvcHRpb25zLnN0eWxlO1xuICB2YXIgbGFyZ2UgPSBmYWxzZTtcblxuICBpZiAoc3R5bGUuc2l6ZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkuc2l6ZSAmJiBncm91cC5zeW1ib2wgJiYgIXV0aWxzLmNvbnRhaW5zKG5vU3VjY2Vzc29yLCBncm91cC5uYW1lKSkge1xuICAgIC8vIE1vc3Qgc3ltYm9sIG9wZXJhdG9ycyBnZXQgbGFyZ2VyIGluIGRpc3BsYXlzdHlsZSAocnVsZSAxMylcbiAgICBsYXJnZSA9IHRydWU7XG4gIH1cblxuICB2YXIgYmFzZTtcblxuICBpZiAoZ3JvdXAuc3ltYm9sKSB7XG4gICAgLy8gSWYgdGhpcyBpcyBhIHN5bWJvbCwgY3JlYXRlIHRoZSBzeW1ib2wuXG4gICAgdmFyIGZvbnROYW1lID0gbGFyZ2UgPyBcIlNpemUyLVJlZ3VsYXJcIiA6IFwiU2l6ZTEtUmVndWxhclwiO1xuICAgIHZhciBzdGFzaCA9IFwiXCI7XG5cbiAgICBpZiAoZ3JvdXAubmFtZSA9PT0gXCJcXFxcb2lpbnRcIiB8fCBncm91cC5uYW1lID09PSBcIlxcXFxvaWlpbnRcIikge1xuICAgICAgLy8gTm8gZm9udCBnbHlwaHMgeWV0LCBzbyB1c2UgYSBnbHlwaCB3L28gdGhlIG92YWwuXG4gICAgICAvLyBUT0RPOiBXaGVuIGZvbnQgZ2x5cGhzIGFyZSBhdmFpbGFibGUsIGRlbGV0ZSB0aGlzIGNvZGUuXG4gICAgICBzdGFzaCA9IGdyb3VwLm5hbWUuc3Vic3RyKDEpOyAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgIGdyb3VwLm5hbWUgPSBzdGFzaCA9PT0gXCJvaWludFwiID8gXCJcXFxcaWludFwiIDogXCJcXFxcaWlpbnRcIjtcbiAgICB9XG5cbiAgICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVN5bWJvbChncm91cC5uYW1lLCBmb250TmFtZSwgXCJtYXRoXCIsIG9wdGlvbnMsIFtcIm1vcFwiLCBcIm9wLXN5bWJvbFwiLCBsYXJnZSA/IFwibGFyZ2Utb3BcIiA6IFwic21hbGwtb3BcIl0pO1xuXG4gICAgaWYgKHN0YXNoLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIFdlJ3JlIGluIFxcb2lpbnQgb3IgXFxvaWlpbnQuIE92ZXJsYXkgdGhlIG92YWwuXG4gICAgICAvLyBUT0RPOiBXaGVuIGZvbnQgZ2x5cGhzIGFyZSBhdmFpbGFibGUsIGRlbGV0ZSB0aGlzIGNvZGUuXG4gICAgICB2YXIgaXRhbGljID0gYmFzZS5pdGFsaWM7XG4gICAgICB2YXIgb3ZhbCA9IGJ1aWxkQ29tbW9uLnN0YXRpY1N2ZyhzdGFzaCArIFwiU2l6ZVwiICsgKGxhcmdlID8gXCIyXCIgOiBcIjFcIiksIG9wdGlvbnMpO1xuICAgICAgYmFzZSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJpbmRpdmlkdWFsU2hpZnRcIixcbiAgICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogYmFzZSxcbiAgICAgICAgICBzaGlmdDogMFxuICAgICAgICB9LCB7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogb3ZhbCxcbiAgICAgICAgICBzaGlmdDogbGFyZ2UgPyAwLjA4IDogMFxuICAgICAgICB9XVxuICAgICAgfSwgb3B0aW9ucyk7IC8vICRGbG93Rml4TWVcblxuICAgICAgZ3JvdXAubmFtZSA9IFwiXFxcXFwiICsgc3Rhc2g7XG4gICAgICBiYXNlLmNsYXNzZXMudW5zaGlmdChcIm1vcFwiKTsgLy8gJEZsb3dGaXhNZVxuXG4gICAgICBiYXNlLml0YWxpYyA9IGl0YWxpYztcbiAgICB9XG4gIH0gZWxzZSBpZiAoZ3JvdXAuYm9keSkge1xuICAgIC8vIElmIHRoaXMgaXMgYSBsaXN0LCBjb21wb3NlIHRoYXQgbGlzdC5cbiAgICB2YXIgaW5uZXIgPSBidWlsZEhUTUxfYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMsIHRydWUpO1xuXG4gICAgaWYgKGlubmVyLmxlbmd0aCA9PT0gMSAmJiBpbm5lclswXSBpbnN0YW5jZW9mIGRvbVRyZWVfU3ltYm9sTm9kZSkge1xuICAgICAgYmFzZSA9IGlubmVyWzBdO1xuICAgICAgYmFzZS5jbGFzc2VzWzBdID0gXCJtb3BcIjsgLy8gcmVwbGFjZSBvbGQgbWNsYXNzXG4gICAgfSBlbHNlIHtcbiAgICAgIGJhc2UgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3BcIl0sIGJ1aWxkQ29tbW9uLnRyeUNvbWJpbmVDaGFycyhpbm5lciksIG9wdGlvbnMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2UsIHRoaXMgaXMgYSB0ZXh0IG9wZXJhdG9yLiBCdWlsZCB0aGUgdGV4dCBmcm9tIHRoZVxuICAgIC8vIG9wZXJhdG9yJ3MgbmFtZS5cbiAgICAvLyBUT0RPKGVtaWx5KTogQWRkIGEgc3BhY2UgaW4gdGhlIG1pZGRsZSBvZiBzb21lIG9mIHRoZXNlXG4gICAgLy8gb3BlcmF0b3JzLCBsaWtlIFxcbGltc3VwXG4gICAgdmFyIG91dHB1dCA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBncm91cC5uYW1lLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvdXRwdXQucHVzaChidWlsZENvbW1vbi5tYXRoc3ltKGdyb3VwLm5hbWVbaV0sIGdyb3VwLm1vZGUsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9wXCJdLCBvdXRwdXQsIG9wdGlvbnMpO1xuICB9IC8vIElmIGNvbnRlbnQgb2Ygb3AgaXMgYSBzaW5nbGUgc3ltYm9sLCBzaGlmdCBpdCB2ZXJ0aWNhbGx5LlxuXG5cbiAgdmFyIGJhc2VTaGlmdCA9IDA7XG4gIHZhciBzbGFudCA9IDA7XG5cbiAgaWYgKChiYXNlIGluc3RhbmNlb2YgZG9tVHJlZV9TeW1ib2xOb2RlIHx8IGdyb3VwLm5hbWUgPT09IFwiXFxcXG9paW50XCIgfHwgZ3JvdXAubmFtZSA9PT0gXCJcXFxcb2lpaW50XCIpICYmICFncm91cC5zdXBwcmVzc0Jhc2VTaGlmdCkge1xuICAgIC8vIFdlIHN1cHByZXNzIHRoZSBzaGlmdCBvZiB0aGUgYmFzZSBvZiBcXG92ZXJzZXQgYW5kIFxcdW5kZXJzZXQuIE90aGVyd2lzZSxcbiAgICAvLyBzaGlmdCB0aGUgc3ltYm9sIHNvIGl0cyBjZW50ZXIgbGllcyBvbiB0aGUgYXhpcyAocnVsZSAxMykuIEl0XG4gICAgLy8gYXBwZWFycyB0aGF0IG91ciBmb250cyBoYXZlIHRoZSBjZW50ZXJzIG9mIHRoZSBzeW1ib2xzIGFscmVhZHlcbiAgICAvLyBhbG1vc3Qgb24gdGhlIGF4aXMsIHNvIHRoZXNlIG51bWJlcnMgYXJlIHZlcnkgc21hbGwuIE5vdGUgd2VcbiAgICAvLyBkb24ndCBhY3R1YWxseSBhcHBseSB0aGlzIGhlcmUsIGJ1dCBpbnN0ZWFkIGl0IGlzIHVzZWQgZWl0aGVyIGluXG4gICAgLy8gdGhlIHZsaXN0IGNyZWF0aW9uIG9yIHNlcGFyYXRlbHkgd2hlbiB0aGVyZSBhcmUgbm8gbGltaXRzLlxuICAgIGJhc2VTaGlmdCA9IChiYXNlLmhlaWdodCAtIGJhc2UuZGVwdGgpIC8gMiAtIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0OyAvLyBUaGUgc2xhbnQgb2YgdGhlIHN5bWJvbCBpcyBqdXN0IGl0cyBpdGFsaWMgY29ycmVjdGlvbi5cbiAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICBzbGFudCA9IGJhc2UuaXRhbGljO1xuICB9XG5cbiAgaWYgKGhhc0xpbWl0cykge1xuICAgIHJldHVybiBhc3NlbWJsZVN1cFN1Yl9hc3NlbWJsZVN1cFN1YihiYXNlLCBzdXBHcm91cCwgc3ViR3JvdXAsIG9wdGlvbnMsIHN0eWxlLCBzbGFudCwgYmFzZVNoaWZ0KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoYmFzZVNoaWZ0KSB7XG4gICAgICBiYXNlLnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICAgICAgYmFzZS5zdHlsZS50b3AgPSBiYXNlU2hpZnQgKyBcImVtXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2U7XG4gIH1cbn07XG5cbnZhciBvcF9tYXRobWxCdWlsZGVyID0gZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICB2YXIgbm9kZTtcblxuICBpZiAoZ3JvdXAuc3ltYm9sKSB7XG4gICAgLy8gVGhpcyBpcyBhIHN5bWJvbC4gSnVzdCBhZGQgdGhlIHN5bWJvbC5cbiAgICBub2RlID0gbmV3IG1hdGhNTFRyZWVfTWF0aE5vZGUoXCJtb1wiLCBbYnVpbGRNYXRoTUxfbWFrZVRleHQoZ3JvdXAubmFtZSwgZ3JvdXAubW9kZSldKTtcblxuICAgIGlmICh1dGlscy5jb250YWlucyhub1N1Y2Nlc3NvciwgZ3JvdXAubmFtZSkpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibGFyZ2VvcFwiLCBcImZhbHNlXCIpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChncm91cC5ib2R5KSB7XG4gICAgLy8gVGhpcyBpcyBhbiBvcGVyYXRvciB3aXRoIGNoaWxkcmVuLiBBZGQgdGhlbS5cbiAgICBub2RlID0gbmV3IG1hdGhNTFRyZWVfTWF0aE5vZGUoXCJtb1wiLCBidWlsZE1hdGhNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucykpO1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgaXMgYSB0ZXh0IG9wZXJhdG9yLiBBZGQgYWxsIG9mIHRoZSBjaGFyYWN0ZXJzIGZyb20gdGhlXG4gICAgLy8gb3BlcmF0b3IncyBuYW1lLlxuICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZV9NYXRoTm9kZShcIm1pXCIsIFtuZXcgbWF0aE1MVHJlZV9UZXh0Tm9kZShncm91cC5uYW1lLnNsaWNlKDEpKV0pOyAvLyBBcHBlbmQgYW4gPG1vPiZBcHBseUZ1bmN0aW9uOzwvbW8+LlxuICAgIC8vIHJlZjogaHR0cHM6Ly93d3cudzMub3JnL1RSL1JFQy1NYXRoTUwvY2hhcDNfMi5odG1sI3NlYzMuMi40XG5cbiAgICB2YXIgb3BlcmF0b3IgPSBuZXcgbWF0aE1MVHJlZV9NYXRoTm9kZShcIm1vXCIsIFtidWlsZE1hdGhNTF9tYWtlVGV4dChcIlxcdTIwNjFcIiwgXCJ0ZXh0XCIpXSk7XG5cbiAgICBpZiAoZ3JvdXAucGFyZW50SXNTdXBTdWIpIHtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZV9NYXRoTm9kZShcIm1vXCIsIFtub2RlLCBvcGVyYXRvcl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3RG9jdW1lbnRGcmFnbWVudChbbm9kZSwgb3BlcmF0b3JdKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn07XG5cbnZhciBzaW5nbGVDaGFyQmlnT3BzID0ge1xuICBcIlxcdTIyMEZcIjogXCJcXFxccHJvZFwiLFxuICBcIlxcdTIyMTBcIjogXCJcXFxcY29wcm9kXCIsXG4gIFwiXFx1MjIxMVwiOiBcIlxcXFxzdW1cIixcbiAgXCJcXHUyMkMwXCI6IFwiXFxcXGJpZ3dlZGdlXCIsXG4gIFwiXFx1MjJDMVwiOiBcIlxcXFxiaWd2ZWVcIixcbiAgXCJcXHUyMkMyXCI6IFwiXFxcXGJpZ2NhcFwiLFxuICBcIlxcdTIyQzNcIjogXCJcXFxcYmlnY3VwXCIsXG4gIFwiXFx1MkEwMFwiOiBcIlxcXFxiaWdvZG90XCIsXG4gIFwiXFx1MkEwMVwiOiBcIlxcXFxiaWdvcGx1c1wiLFxuICBcIlxcdTJBMDJcIjogXCJcXFxcYmlnb3RpbWVzXCIsXG4gIFwiXFx1MkEwNFwiOiBcIlxcXFxiaWd1cGx1c1wiLFxuICBcIlxcdTJBMDZcIjogXCJcXFxcYmlnc3FjdXBcIlxufTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcFwiLFxuICBuYW1lczogW1wiXFxcXGNvcHJvZFwiLCBcIlxcXFxiaWd2ZWVcIiwgXCJcXFxcYmlnd2VkZ2VcIiwgXCJcXFxcYmlndXBsdXNcIiwgXCJcXFxcYmlnY2FwXCIsIFwiXFxcXGJpZ2N1cFwiLCBcIlxcXFxpbnRvcFwiLCBcIlxcXFxwcm9kXCIsIFwiXFxcXHN1bVwiLCBcIlxcXFxiaWdvdGltZXNcIiwgXCJcXFxcYmlnb3BsdXNcIiwgXCJcXFxcYmlnb2RvdFwiLCBcIlxcXFxiaWdzcWN1cFwiLCBcIlxcXFxzbWFsbGludFwiLCBcIlxcdTIyMEZcIiwgXCJcXHUyMjEwXCIsIFwiXFx1MjIxMVwiLCBcIlxcdTIyQzBcIiwgXCJcXHUyMkMxXCIsIFwiXFx1MjJDMlwiLCBcIlxcdTIyQzNcIiwgXCJcXHUyQTAwXCIsIFwiXFx1MkEwMVwiLCBcIlxcdTJBMDJcIiwgXCJcXHUyQTA0XCIsIFwiXFx1MkEwNlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lO1xuICAgIHZhciBmTmFtZSA9IGZ1bmNOYW1lO1xuXG4gICAgaWYgKGZOYW1lLmxlbmd0aCA9PT0gMSkge1xuICAgICAgZk5hbWUgPSBzaW5nbGVDaGFyQmlnT3BzW2ZOYW1lXTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsaW1pdHM6IHRydWUsXG4gICAgICBwYXJlbnRJc1N1cFN1YjogZmFsc2UsXG4gICAgICBzeW1ib2w6IHRydWUsXG4gICAgICBuYW1lOiBmTmFtZVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBvcF9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogb3BfbWF0aG1sQnVpbGRlclxufSk7IC8vIE5vdGU6IGNhbGxpbmcgZGVmaW5lRnVuY3Rpb24gd2l0aCBhIHR5cGUgdGhhdCdzIGFscmVhZHkgYmVlbiBkZWZpbmVkIG9ubHlcbi8vIHdvcmtzIGJlY2F1c2UgdGhlIHNhbWUgaHRtbEJ1aWxkZXIgYW5kIG1hdGhtbEJ1aWxkZXIgYXJlIGJlaW5nIHVzZWQuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcFwiLFxuICBuYW1lczogW1wiXFxcXG1hdGhvcFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZjIsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZjIucGFyc2VyO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsaW1pdHM6IGZhbHNlLFxuICAgICAgcGFyZW50SXNTdXBTdWI6IGZhbHNlLFxuICAgICAgc3ltYm9sOiBmYWxzZSxcbiAgICAgIGJvZHk6IGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGJvZHkpXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IG9wX2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBvcF9tYXRobWxCdWlsZGVyXG59KTsgLy8gVGhlcmUgYXJlIDIgZmxhZ3MgZm9yIG9wZXJhdG9yczsgd2hldGhlciB0aGV5IHByb2R1Y2UgbGltaXRzIGluXG4vLyBkaXNwbGF5c3R5bGUsIGFuZCB3aGV0aGVyIHRoZXkgYXJlIHN5bWJvbHMgYW5kIHNob3VsZCBncm93IGluXG4vLyBkaXNwbGF5c3R5bGUuIFRoZXNlIGZvdXIgZ3JvdXBzIGNvdmVyIHRoZSBmb3VyIHBvc3NpYmxlIGNob2ljZXMuXG5cbnZhciBzaW5nbGVDaGFySW50ZWdyYWxzID0ge1xuICBcIlxcdTIyMkJcIjogXCJcXFxcaW50XCIsXG4gIFwiXFx1MjIyQ1wiOiBcIlxcXFxpaW50XCIsXG4gIFwiXFx1MjIyRFwiOiBcIlxcXFxpaWludFwiLFxuICBcIlxcdTIyMkVcIjogXCJcXFxcb2ludFwiLFxuICBcIlxcdTIyMkZcIjogXCJcXFxcb2lpbnRcIixcbiAgXCJcXHUyMjMwXCI6IFwiXFxcXG9paWludFwiXG59OyAvLyBObyBsaW1pdHMsIG5vdCBzeW1ib2xzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcFwiLFxuICBuYW1lczogW1wiXFxcXGFyY3NpblwiLCBcIlxcXFxhcmNjb3NcIiwgXCJcXFxcYXJjdGFuXCIsIFwiXFxcXGFyY3RnXCIsIFwiXFxcXGFyY2N0Z1wiLCBcIlxcXFxhcmdcIiwgXCJcXFxcY2hcIiwgXCJcXFxcY29zXCIsIFwiXFxcXGNvc2VjXCIsIFwiXFxcXGNvc2hcIiwgXCJcXFxcY290XCIsIFwiXFxcXGNvdGdcIiwgXCJcXFxcY290aFwiLCBcIlxcXFxjc2NcIiwgXCJcXFxcY3RnXCIsIFwiXFxcXGN0aFwiLCBcIlxcXFxkZWdcIiwgXCJcXFxcZGltXCIsIFwiXFxcXGV4cFwiLCBcIlxcXFxob21cIiwgXCJcXFxca2VyXCIsIFwiXFxcXGxnXCIsIFwiXFxcXGxuXCIsIFwiXFxcXGxvZ1wiLCBcIlxcXFxzZWNcIiwgXCJcXFxcc2luXCIsIFwiXFxcXHNpbmhcIiwgXCJcXFxcc2hcIiwgXCJcXFxcdGFuXCIsIFwiXFxcXHRhbmhcIiwgXCJcXFxcdGdcIiwgXCJcXFxcdGhcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYzLnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmMy5mdW5jTmFtZTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsaW1pdHM6IGZhbHNlLFxuICAgICAgcGFyZW50SXNTdXBTdWI6IGZhbHNlLFxuICAgICAgc3ltYm9sOiBmYWxzZSxcbiAgICAgIG5hbWU6IGZ1bmNOYW1lXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IG9wX2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBvcF9tYXRobWxCdWlsZGVyXG59KTsgLy8gTGltaXRzLCBub3Qgc3ltYm9sc1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwib3BcIixcbiAgbmFtZXM6IFtcIlxcXFxkZXRcIiwgXCJcXFxcZ2NkXCIsIFwiXFxcXGluZlwiLCBcIlxcXFxsaW1cIiwgXCJcXFxcbWF4XCIsIFwiXFxcXG1pblwiLCBcIlxcXFxQclwiLCBcIlxcXFxzdXBcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWY0KSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWY0LnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmNC5mdW5jTmFtZTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsaW1pdHM6IHRydWUsXG4gICAgICBwYXJlbnRJc1N1cFN1YjogZmFsc2UsXG4gICAgICBzeW1ib2w6IGZhbHNlLFxuICAgICAgbmFtZTogZnVuY05hbWVcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogb3BfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IG9wX21hdGhtbEJ1aWxkZXJcbn0pOyAvLyBObyBsaW1pdHMsIHN5bWJvbHNcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcIm9wXCIsXG4gIG5hbWVzOiBbXCJcXFxcaW50XCIsIFwiXFxcXGlpbnRcIiwgXCJcXFxcaWlpbnRcIiwgXCJcXFxcb2ludFwiLCBcIlxcXFxvaWludFwiLCBcIlxcXFxvaWlpbnRcIiwgXCJcXHUyMjJCXCIsIFwiXFx1MjIyQ1wiLCBcIlxcdTIyMkRcIiwgXCJcXHUyMjJFXCIsIFwiXFx1MjIyRlwiLCBcIlxcdTIyMzBcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWY1KSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWY1LnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmNS5mdW5jTmFtZTtcbiAgICB2YXIgZk5hbWUgPSBmdW5jTmFtZTtcblxuICAgIGlmIChmTmFtZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGZOYW1lID0gc2luZ2xlQ2hhckludGVncmFsc1tmTmFtZV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwib3BcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGltaXRzOiBmYWxzZSxcbiAgICAgIHBhcmVudElzU3VwU3ViOiBmYWxzZSxcbiAgICAgIHN5bWJvbDogdHJ1ZSxcbiAgICAgIG5hbWU6IGZOYW1lXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IG9wX2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBvcF9tYXRobWxCdWlsZGVyXG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9vcGVyYXRvcm5hbWUuanNcblxuXG5cblxuXG5cblxuXG4vLyBOT1RFOiBVbmxpa2UgbW9zdCBgaHRtbEJ1aWxkZXJgcywgdGhpcyBvbmUgaGFuZGxlcyBub3Qgb25seVxuLy8gXCJvcGVyYXRvcm5hbWVcIiwgYnV0IGFsc28gIFwic3Vwc3ViXCIgc2luY2UgXFxvcGVyYXRvcm5hbWUqIGNhblxudmFyIG9wZXJhdG9ybmFtZV9odG1sQnVpbGRlciA9IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdycCwgb3B0aW9ucykge1xuICAvLyBPcGVyYXRvcnMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgcGcuIDQ0My00NDQsIHJ1bGUgMTMoYSkuXG4gIHZhciBzdXBHcm91cDtcbiAgdmFyIHN1Ykdyb3VwO1xuICB2YXIgaGFzTGltaXRzID0gZmFsc2U7XG4gIHZhciBncm91cDtcbiAgdmFyIHN1cFN1YiA9IGNoZWNrTm9kZVR5cGUoZ3JwLCBcInN1cHN1YlwiKTtcblxuICBpZiAoc3VwU3ViKSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBsaW1pdHMsIHN1cHN1YiB3aWxsIHBhc3MgdXMgaXRzIGdyb3VwIHRvIGhhbmRsZS4gUHVsbFxuICAgIC8vIG91dCB0aGUgc3VwZXJzY3JpcHQgYW5kIHN1YnNjcmlwdCBhbmQgc2V0IHRoZSBncm91cCB0byB0aGUgb3AgaW5cbiAgICAvLyBpdHMgYmFzZS5cbiAgICBzdXBHcm91cCA9IHN1cFN1Yi5zdXA7XG4gICAgc3ViR3JvdXAgPSBzdXBTdWIuc3ViO1xuICAgIGdyb3VwID0gYXNzZXJ0Tm9kZVR5cGUoc3VwU3ViLmJhc2UsIFwib3BlcmF0b3JuYW1lXCIpO1xuICAgIGhhc0xpbWl0cyA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgZ3JvdXAgPSBhc3NlcnROb2RlVHlwZShncnAsIFwib3BlcmF0b3JuYW1lXCIpO1xuICB9XG5cbiAgdmFyIGJhc2U7XG5cbiAgaWYgKGdyb3VwLmJvZHkubGVuZ3RoID4gMCkge1xuICAgIHZhciBib2R5ID0gZ3JvdXAuYm9keS5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lOiBDaGVjayBpZiB0aGUgbm9kZSBoYXMgYSBzdHJpbmcgYHRleHRgIHByb3BlcnR5LlxuICAgICAgdmFyIGNoaWxkVGV4dCA9IGNoaWxkLnRleHQ7XG5cbiAgICAgIGlmICh0eXBlb2YgY2hpbGRUZXh0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgICAgbW9kZTogY2hpbGQubW9kZSxcbiAgICAgICAgICB0ZXh0OiBjaGlsZFRleHRcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cbiAgICB9KTsgLy8gQ29uc29saWRhdGUgZnVuY3Rpb24gbmFtZXMgaW50byBzeW1ib2wgY2hhcmFjdGVycy5cblxuICAgIHZhciBleHByZXNzaW9uID0gYnVpbGRIVE1MX2J1aWxkRXhwcmVzc2lvbihib2R5LCBvcHRpb25zLndpdGhGb250KFwibWF0aHJtXCIpLCB0cnVlKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwcmVzc2lvbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoaWxkID0gZXhwcmVzc2lvbltpXTtcblxuICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgZG9tVHJlZV9TeW1ib2xOb2RlKSB7XG4gICAgICAgIC8vIFBlciBhbXNvcG4gcGFja2FnZSxcbiAgICAgICAgLy8gY2hhbmdlIG1pbnVzIHRvIGh5cGhlbiBhbmQgXFxhc3QgdG8gYXN0ZXJpc2tcbiAgICAgICAgY2hpbGQudGV4dCA9IGNoaWxkLnRleHQucmVwbGFjZSgvXFx1MjIxMi8sIFwiLVwiKS5yZXBsYWNlKC9cXHUyMjE3LywgXCIqXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGJhc2UgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3BcIl0sIGV4cHJlc3Npb24sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIGJhc2UgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3BcIl0sIFtdLCBvcHRpb25zKTtcbiAgfVxuXG4gIGlmIChoYXNMaW1pdHMpIHtcbiAgICByZXR1cm4gYXNzZW1ibGVTdXBTdWJfYXNzZW1ibGVTdXBTdWIoYmFzZSwgc3VwR3JvdXAsIHN1Ykdyb3VwLCBvcHRpb25zLCBvcHRpb25zLnN0eWxlLCAwLCAwKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTtcbiAgfVxufTtcblxudmFyIG9wZXJhdG9ybmFtZV9tYXRobWxCdWlsZGVyID0gZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAvLyBUaGUgc3RlcHMgdGFrZW4gaGVyZSBhcmUgc2ltaWxhciB0byB0aGUgaHRtbCB2ZXJzaW9uLlxuICB2YXIgZXhwcmVzc2lvbiA9IGJ1aWxkTWF0aE1MX2J1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zLndpdGhGb250KFwibWF0aHJtXCIpKTsgLy8gSXMgZXhwcmVzc2lvbiBhIHN0cmluZyBvciBoYXMgaXQgc29tZXRoaW5nIGxpa2UgYSBmcmFjdGlvbj9cblxuICB2YXIgaXNBbGxTdHJpbmcgPSB0cnVlOyAvLyBkZWZhdWx0XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9uLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG5vZGUgPSBleHByZXNzaW9uW2ldO1xuXG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBtYXRoTUxUcmVlLlNwYWNlTm9kZSkgey8vIERvIG5vdGhpbmdcbiAgICB9IGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBtYXRoTUxUcmVlLk1hdGhOb2RlKSB7XG4gICAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgICBjYXNlIFwibWlcIjpcbiAgICAgICAgY2FzZSBcIm1uXCI6XG4gICAgICAgIGNhc2UgXCJtc1wiOlxuICAgICAgICBjYXNlIFwibXNwYWNlXCI6XG4gICAgICAgIGNhc2UgXCJtdGV4dFwiOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyBEbyBub3RoaW5nIHlldC5cblxuICAgICAgICBjYXNlIFwibW9cIjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBub2RlLmNoaWxkcmVuWzBdO1xuXG4gICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgY2hpbGQgaW5zdGFuY2VvZiBtYXRoTUxUcmVlLlRleHROb2RlKSB7XG4gICAgICAgICAgICAgIGNoaWxkLnRleHQgPSBjaGlsZC50ZXh0LnJlcGxhY2UoL1xcdTIyMTIvLCBcIi1cIikucmVwbGFjZSgvXFx1MjIxNy8sIFwiKlwiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlzQWxsU3RyaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlzQWxsU3RyaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzQWxsU3RyaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzQWxsU3RyaW5nKSB7XG4gICAgLy8gV3JpdGUgYSBzaW5nbGUgVGV4dE5vZGUgaW5zdGVhZCBvZiBtdWx0aXBsZSBuZXN0ZWQgdGFncy5cbiAgICB2YXIgd29yZCA9IGV4cHJlc3Npb24ubWFwKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICByZXR1cm4gbm9kZS50b1RleHQoKTtcbiAgICB9KS5qb2luKFwiXCIpO1xuICAgIGV4cHJlc3Npb24gPSBbbmV3IG1hdGhNTFRyZWUuVGV4dE5vZGUod29yZCldO1xuICB9XG5cbiAgdmFyIGlkZW50aWZpZXIgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1pXCIsIGV4cHJlc3Npb24pO1xuICBpZGVudGlmaWVyLnNldEF0dHJpYnV0ZShcIm1hdGh2YXJpYW50XCIsIFwibm9ybWFsXCIpOyAvLyBcXHUyMDYxIGlzIHRoZSBzYW1lIGFzICZBcHBseUZ1bmN0aW9uO1xuICAvLyByZWY6IGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vY2hhcnNldHMvcmVmX2h0bWxfZW50aXRpZXNfYS5hc3BcblxuICB2YXIgb3BlcmF0b3IgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFtidWlsZE1hdGhNTF9tYWtlVGV4dChcIlxcdTIwNjFcIiwgXCJ0ZXh0XCIpXSk7XG5cbiAgaWYgKGdyb3VwLnBhcmVudElzU3VwU3ViKSB7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW2lkZW50aWZpZXIsIG9wZXJhdG9yXSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG1hdGhNTFRyZWUubmV3RG9jdW1lbnRGcmFnbWVudChbaWRlbnRpZmllciwgb3BlcmF0b3JdKTtcbiAgfVxufTsgLy8gXFxvcGVyYXRvcm5hbWVcbi8vIGFtc29wbi5kdHg6IFxcbWF0aG9weyMxXFxrZXJuXFx6QFxcb3BlcmF0b3JAZm9udCMzfVxcbmV3bWNvZGVzQFxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcGVyYXRvcm5hbWVcIixcbiAgbmFtZXM6IFtcIlxcXFxvcGVyYXRvcm5hbWVcIiwgXCJcXFxcb3BlcmF0b3JuYW1lKlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcGVyYXRvcm5hbWVcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keTogZGVmaW5lRnVuY3Rpb25fb3JkYXJndW1lbnQoYm9keSksXG4gICAgICBhbHdheXNIYW5kbGVTdXBTdWI6IGZ1bmNOYW1lID09PSBcIlxcXFxvcGVyYXRvcm5hbWUqXCIsXG4gICAgICBsaW1pdHM6IGZhbHNlLFxuICAgICAgcGFyZW50SXNTdXBTdWI6IGZhbHNlXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IG9wZXJhdG9ybmFtZV9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogb3BlcmF0b3JuYW1lX21hdGhtbEJ1aWxkZXJcbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL29yZGdyb3VwLmpzXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uQnVpbGRlcnMoe1xuICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIGlmIChncm91cC5zZW1pc2ltcGxlKSB7XG4gICAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUZyYWdtZW50KGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucywgZmFsc2UpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiXSwgYnVpbGRIVE1MX2J1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zLCB0cnVlKSwgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYnVpbGRFeHByZXNzaW9uUm93KGdyb3VwLmJvZHksIG9wdGlvbnMsIHRydWUpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9vdmVybGluZS5qc1xuXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvdmVybGluZVwiLFxuICBuYW1lczogW1wiXFxcXG92ZXJsaW5lXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvdmVybGluZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5OiBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gT3ZlcmxpbmVzIGFyZSBoYW5kbGVkIGluIHRoZSBUZVhib29rIHBnIDQ0MywgUnVsZSA5LlxuICAgIC8vIEJ1aWxkIHRoZSBpbm5lciBncm91cCBpbiB0aGUgY3JhbXBlZCBzdHlsZS5cbiAgICB2YXIgaW5uZXJHcm91cCA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMuaGF2aW5nQ3JhbXBlZFN0eWxlKCkpOyAvLyBDcmVhdGUgdGhlIGxpbmUgYWJvdmUgdGhlIGJvZHlcblxuICAgIHZhciBsaW5lID0gYnVpbGRDb21tb24ubWFrZUxpbmVTcGFuKFwib3ZlcmxpbmUtbGluZVwiLCBvcHRpb25zKTsgLy8gR2VuZXJhdGUgdGhlIHZsaXN0LCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBrZXJuc1xuXG4gICAgdmFyIGRlZmF1bHRSdWxlVGhpY2tuZXNzID0gb3B0aW9ucy5mb250TWV0cmljcygpLmRlZmF1bHRSdWxlVGhpY2tuZXNzO1xuICAgIHZhciB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBpbm5lckdyb3VwXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiAzICogZGVmYXVsdFJ1bGVUaGlja25lc3NcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGxpbmVcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IGRlZmF1bHRSdWxlVGhpY2tuZXNzXG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCIsIFwib3ZlcmxpbmVcIl0sIFt2bGlzdF0sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG9wZXJhdG9yID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbbmV3IG1hdGhNTFRyZWUuVGV4dE5vZGUoXCJcXHUyMDNFXCIpXSk7XG4gICAgb3BlcmF0b3Iuc2V0QXR0cmlidXRlKFwic3RyZXRjaHlcIiwgXCJ0cnVlXCIpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb3ZlclwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKSwgb3BlcmF0b3JdKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImFjY2VudFwiLCBcInRydWVcIik7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3BoYW50b20uanNcblxuXG5cblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwicGhhbnRvbVwiLFxuICBuYW1lczogW1wiXFxcXHBoYW50b21cIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwicGhhbnRvbVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5OiBkZWZpbmVGdW5jdGlvbl9vcmRhcmd1bWVudChib2R5KVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBlbGVtZW50cyA9IGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucy53aXRoUGhhbnRvbSgpLCBmYWxzZSk7IC8vIFxccGhhbnRvbSBpc24ndCBzdXBwb3NlZCB0byBhZmZlY3QgdGhlIGVsZW1lbnRzIGl0IGNvbnRhaW5zLlxuICAgIC8vIFNlZSBcImNvbG9yXCIgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlRnJhZ21lbnQoZWxlbWVudHMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIGlubmVyID0gYnVpbGRNYXRoTUxfYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMpO1xuICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1waGFudG9tXCIsIGlubmVyKTtcbiAgfVxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaHBoYW50b21cIixcbiAgbmFtZXM6IFtcIlxcXFxocGhhbnRvbVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmMiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmMi5wYXJzZXI7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImhwaGFudG9tXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IGJvZHlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtdLCBbYnVpbGRIVE1MX2J1aWxkR3JvdXAoZ3JvdXAuYm9keSwgb3B0aW9ucy53aXRoUGhhbnRvbSgpKV0pO1xuICAgIG5vZGUuaGVpZ2h0ID0gMDtcbiAgICBub2RlLmRlcHRoID0gMDtcblxuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbm9kZS5jaGlsZHJlbltpXS5oZWlnaHQgPSAwO1xuICAgICAgICBub2RlLmNoaWxkcmVuW2ldLmRlcHRoID0gMDtcbiAgICAgIH1cbiAgICB9IC8vIFNlZSBzbWFzaCBmb3IgY29tbWVudCByZTogdXNlIG9mIG1ha2VWTGlzdFxuXG5cbiAgICBub2RlID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJmaXJzdEJhc2VsaW5lXCIsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IG5vZGVcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7IC8vIEZvciBzcGFjaW5nLCBUZVggdHJlYXRzIFxcc21hc2ggYXMgYSBtYXRoIGdyb3VwIChzYW1lIHNwYWNpbmcgYXMgb3JkKS5cblxuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCJdLCBbbm9kZV0sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIGlubmVyID0gYnVpbGRNYXRoTUxfYnVpbGRFeHByZXNzaW9uKGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGdyb3VwLmJvZHkpLCBvcHRpb25zKTtcbiAgICB2YXIgcGhhbnRvbSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBoYW50b21cIiwgaW5uZXIpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcGFkZGVkXCIsIFtwaGFudG9tXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgXCIwcHhcIik7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJkZXB0aFwiLCBcIjBweFwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidnBoYW50b21cIixcbiAgbmFtZXM6IFtcIlxcXFx2cGhhbnRvbVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmMywgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmMy5wYXJzZXI7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInZwaGFudG9tXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IGJvZHlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgaW5uZXIgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJpbm5lclwiXSwgW2J1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMud2l0aFBoYW50b20oKSldKTtcbiAgICB2YXIgZml4ID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiZml4XCJdLCBbXSk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJybGFwXCJdLCBbaW5uZXIsIGZpeF0sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIGlubmVyID0gYnVpbGRNYXRoTUxfYnVpbGRFeHByZXNzaW9uKGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGdyb3VwLmJvZHkpLCBvcHRpb25zKTtcbiAgICB2YXIgcGhhbnRvbSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBoYW50b21cIiwgaW5uZXIpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcGFkZGVkXCIsIFtwaGFudG9tXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBcIjBweFwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvcmFpc2Vib3guanNcblxuXG5cblxuXG5cbiAvLyBCb3ggbWFuaXB1bGF0aW9uXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJyYWlzZWJveFwiLFxuICBuYW1lczogW1wiXFxcXHJhaXNlYm94XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYXJnVHlwZXM6IFtcInNpemVcIiwgXCJoYm94XCJdLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyO1xuICAgIHZhciBhbW91bnQgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcInNpemVcIikudmFsdWU7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzFdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInJhaXNlYm94XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGR5OiBhbW91bnQsXG4gICAgICBib2R5OiBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIGJvZHkgPSBidWlsZEhUTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKTtcbiAgICB2YXIgZHkgPSB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLmR5LCBvcHRpb25zKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJzaGlmdFwiLFxuICAgICAgcG9zaXRpb25EYXRhOiAtZHksXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJvZHlcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuICAgIHZhciBkeSA9IGdyb3VwLmR5Lm51bWJlciArIGdyb3VwLmR5LnVuaXQ7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ2b2Zmc2V0XCIsIGR5KTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvcnVsZS5qc1xuXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJydWxlXCIsXG4gIG5hbWVzOiBbXCJcXFxccnVsZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyLFxuICAgIG51bU9wdGlvbmFsQXJnczogMSxcbiAgICBhcmdUeXBlczogW1wic2l6ZVwiLCBcInNpemVcIiwgXCJzaXplXCJdXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICB2YXIgc2hpZnQgPSBvcHRBcmdzWzBdO1xuICAgIHZhciB3aWR0aCA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwic2l6ZVwiKTtcbiAgICB2YXIgaGVpZ2h0ID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1sxXSwgXCJzaXplXCIpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInJ1bGVcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgc2hpZnQ6IHNoaWZ0ICYmIGFzc2VydE5vZGVUeXBlKHNoaWZ0LCBcInNpemVcIikudmFsdWUsXG4gICAgICB3aWR0aDogd2lkdGgudmFsdWUsXG4gICAgICBoZWlnaHQ6IGhlaWdodC52YWx1ZVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIE1ha2UgYW4gZW1wdHkgc3BhbiBmb3IgdGhlIHJ1bGVcbiAgICB2YXIgcnVsZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJydWxlXCJdLCBbXSwgb3B0aW9ucyk7IC8vIENhbGN1bGF0ZSB0aGUgc2hpZnQsIHdpZHRoLCBhbmQgaGVpZ2h0IG9mIHRoZSBydWxlLCBhbmQgYWNjb3VudCBmb3IgdW5pdHNcblxuICAgIHZhciB3aWR0aCA9IHVuaXRzX2NhbGN1bGF0ZVNpemUoZ3JvdXAud2lkdGgsIG9wdGlvbnMpO1xuICAgIHZhciBoZWlnaHQgPSB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLmhlaWdodCwgb3B0aW9ucyk7XG4gICAgdmFyIHNoaWZ0ID0gZ3JvdXAuc2hpZnQgPyB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLnNoaWZ0LCBvcHRpb25zKSA6IDA7IC8vIFN0eWxlIHRoZSBydWxlIHRvIHRoZSByaWdodCBzaXplXG5cbiAgICBydWxlLnN0eWxlLmJvcmRlclJpZ2h0V2lkdGggPSB3aWR0aCArIFwiZW1cIjtcbiAgICBydWxlLnN0eWxlLmJvcmRlclRvcFdpZHRoID0gaGVpZ2h0ICsgXCJlbVwiO1xuICAgIHJ1bGUuc3R5bGUuYm90dG9tID0gc2hpZnQgKyBcImVtXCI7IC8vIFJlY29yZCB0aGUgaGVpZ2h0IGFuZCB3aWR0aFxuXG4gICAgcnVsZS53aWR0aCA9IHdpZHRoO1xuICAgIHJ1bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgc2hpZnQ7XG4gICAgcnVsZS5kZXB0aCA9IC1zaGlmdDsgLy8gRm9udCBzaXplIGlzIHRoZSBudW1iZXIgbGFyZ2UgZW5vdWdoIHRoYXQgdGhlIGJyb3dzZXIgd2lsbFxuICAgIC8vIHJlc2VydmUgYXQgbGVhc3QgYGFic0hlaWdodGAgc3BhY2UgYWJvdmUgdGhlIGJhc2VsaW5lLlxuICAgIC8vIFRoZSAxLjEyNSBmYWN0b3Igd2FzIGVtcGlyaWNhbGx5IGRldGVybWluZWRcblxuICAgIHJ1bGUubWF4Rm9udFNpemUgPSBoZWlnaHQgKiAxLjEyNSAqIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgcmV0dXJuIHJ1bGU7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgd2lkdGggPSB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLndpZHRoLCBvcHRpb25zKTtcbiAgICB2YXIgaGVpZ2h0ID0gdW5pdHNfY2FsY3VsYXRlU2l6ZShncm91cC5oZWlnaHQsIG9wdGlvbnMpO1xuICAgIHZhciBzaGlmdCA9IGdyb3VwLnNoaWZ0ID8gdW5pdHNfY2FsY3VsYXRlU2l6ZShncm91cC5zaGlmdCwgb3B0aW9ucykgOiAwO1xuICAgIHZhciBjb2xvciA9IG9wdGlvbnMuY29sb3IgJiYgb3B0aW9ucy5nZXRDb2xvcigpIHx8IFwiYmxhY2tcIjtcbiAgICB2YXIgcnVsZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXNwYWNlXCIpO1xuICAgIHJ1bGUuc2V0QXR0cmlidXRlKFwibWF0aGJhY2tncm91bmRcIiwgY29sb3IpO1xuICAgIHJ1bGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgd2lkdGggKyBcImVtXCIpO1xuICAgIHJ1bGUuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGhlaWdodCArIFwiZW1cIik7XG4gICAgdmFyIHdyYXBwZXIgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1wYWRkZWRcIiwgW3J1bGVdKTtcblxuICAgIGlmIChzaGlmdCA+PSAwKSB7XG4gICAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBcIitcIiArIHNoaWZ0ICsgXCJlbVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgc2hpZnQgKyBcImVtXCIpO1xuICAgICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoXCJkZXB0aFwiLCBcIitcIiArIC1zaGlmdCArIFwiZW1cIik7XG4gICAgfVxuXG4gICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoXCJ2b2Zmc2V0XCIsIHNoaWZ0ICsgXCJlbVwiKTtcbiAgICByZXR1cm4gd3JhcHBlcjtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvc2l6aW5nLmpzXG5cblxuXG5cblxuZnVuY3Rpb24gc2l6aW5nR3JvdXAodmFsdWUsIG9wdGlvbnMsIGJhc2VPcHRpb25zKSB7XG4gIHZhciBpbm5lciA9IGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24odmFsdWUsIG9wdGlvbnMsIGZhbHNlKTtcbiAgdmFyIG11bHRpcGxpZXIgPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gYmFzZU9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7IC8vIEFkZCBzaXplLXJlc2V0dGluZyBjbGFzc2VzIHRvIHRoZSBpbm5lciBsaXN0IGFuZCBzZXQgbWF4Rm9udFNpemVcbiAgLy8gbWFudWFsbHkuIEhhbmRsZSBuZXN0ZWQgc2l6ZSBjaGFuZ2VzLlxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaW5uZXIubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcG9zID0gaW5uZXJbaV0uY2xhc3Nlcy5pbmRleE9mKFwic2l6aW5nXCIpO1xuXG4gICAgaWYgKHBvcyA8IDApIHtcbiAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGlubmVyW2ldLmNsYXNzZXMsIG9wdGlvbnMuc2l6aW5nQ2xhc3NlcyhiYXNlT3B0aW9ucykpO1xuICAgIH0gZWxzZSBpZiAoaW5uZXJbaV0uY2xhc3Nlc1twb3MgKyAxXSA9PT0gXCJyZXNldC1zaXplXCIgKyBvcHRpb25zLnNpemUpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBuZXN0ZWQgc2l6ZSBjaGFuZ2U6IGUuZy4sIGlubmVyW2ldIGlzIHRoZSBcImJcIiBpblxuICAgICAgLy8gYFxcSHVnZSBhIFxcc21hbGwgYmAuIE92ZXJyaWRlIHRoZSBvbGQgc2l6ZSAodGhlIGByZXNldC1gIGNsYXNzKVxuICAgICAgLy8gYnV0IG5vdCB0aGUgbmV3IHNpemUuXG4gICAgICBpbm5lcltpXS5jbGFzc2VzW3BvcyArIDFdID0gXCJyZXNldC1zaXplXCIgKyBiYXNlT3B0aW9ucy5zaXplO1xuICAgIH1cblxuICAgIGlubmVyW2ldLmhlaWdodCAqPSBtdWx0aXBsaWVyO1xuICAgIGlubmVyW2ldLmRlcHRoICo9IG11bHRpcGxpZXI7XG4gIH1cblxuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUZyYWdtZW50KGlubmVyKTtcbn1cbnZhciBzaXplRnVuY3MgPSBbXCJcXFxcdGlueVwiLCBcIlxcXFxzaXhwdHNpemVcIiwgXCJcXFxcc2NyaXB0c2l6ZVwiLCBcIlxcXFxmb290bm90ZXNpemVcIiwgXCJcXFxcc21hbGxcIiwgXCJcXFxcbm9ybWFsc2l6ZVwiLCBcIlxcXFxsYXJnZVwiLCBcIlxcXFxMYXJnZVwiLCBcIlxcXFxMQVJHRVwiLCBcIlxcXFxodWdlXCIsIFwiXFxcXEh1Z2VcIl07XG52YXIgc2l6aW5nX2h0bWxCdWlsZGVyID0gZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgLy8gSGFuZGxlIHNpemluZyBvcGVyYXRvcnMgbGlrZSBcXEh1Z2UuIFJlYWwgVGVYIGRvZXNuJ3QgYWN0dWFsbHkgYWxsb3dcbiAgLy8gdGhlc2UgZnVuY3Rpb25zIGluc2lkZSBvZiBtYXRoIGV4cHJlc3Npb25zLCBzbyB3ZSBkbyBzb21lIHNwZWNpYWxcbiAgLy8gaGFuZGxpbmcuXG4gIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTaXplKGdyb3VwLnNpemUpO1xuICByZXR1cm4gc2l6aW5nR3JvdXAoZ3JvdXAuYm9keSwgbmV3T3B0aW9ucywgb3B0aW9ucyk7XG59O1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInNpemluZ1wiLFxuICBuYW1lczogc2l6ZUZ1bmNzLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgYnJlYWtPblRva2VuVGV4dCA9IF9yZWYuYnJlYWtPblRva2VuVGV4dCxcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lLFxuICAgICAgICBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICB2YXIgYm9keSA9IHBhcnNlci5wYXJzZUV4cHJlc3Npb24oZmFsc2UsIGJyZWFrT25Ub2tlblRleHQpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInNpemluZ1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICAvLyBGaWd1cmUgb3V0IHdoYXQgc2l6ZSB0byB1c2UgYmFzZWQgb24gdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIGFib3ZlXG4gICAgICBzaXplOiBzaXplRnVuY3MuaW5kZXhPZihmdW5jTmFtZSkgKyAxLFxuICAgICAgYm9keTogYm9keVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBzaXppbmdfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU2l6ZShncm91cC5zaXplKTtcbiAgICB2YXIgaW5uZXIgPSBidWlsZE1hdGhNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgbmV3T3B0aW9ucyk7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1zdHlsZVwiLCBpbm5lcik7IC8vIFRPRE8oZW1pbHkpOiBUaGlzIGRvZXNuJ3QgcHJvZHVjZSB0aGUgY29ycmVjdCBzaXplIGZvciBuZXN0ZWQgc2l6ZVxuICAgIC8vIGNoYW5nZXMsIGJlY2F1c2Ugd2UgZG9uJ3Qga2VlcCBzdGF0ZSBvZiB3aGF0IHN0eWxlIHdlJ3JlIGN1cnJlbnRseVxuICAgIC8vIGluLCBzbyB3ZSBjYW4ndCByZXNldCB0aGUgc2l6ZSB0byBub3JtYWwgYmVmb3JlIGNoYW5naW5nIGl0LiAgTm93XG4gICAgLy8gdGhhdCB3ZSdyZSBwYXNzaW5nIGFuIG9wdGlvbnMgcGFyYW1ldGVyIHdlIHNob3VsZCBiZSBhYmxlIHRvIGZpeFxuICAgIC8vIHRoaXMuXG5cbiAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGhzaXplXCIsIG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXIgKyBcImVtXCIpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9zbWFzaC5qc1xuLy8gc21hc2gsIHdpdGggb3B0aW9uYWwgW3RiXSwgYXMgaW4gQU1TXG5cblxuXG5cblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwic21hc2hcIixcbiAgbmFtZXM6IFtcIlxcXFxzbWFzaFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIG51bU9wdGlvbmFsQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICB2YXIgc21hc2hIZWlnaHQgPSBmYWxzZTtcbiAgICB2YXIgc21hc2hEZXB0aCA9IGZhbHNlO1xuICAgIHZhciB0YkFyZyA9IG9wdEFyZ3NbMF0gJiYgYXNzZXJ0Tm9kZVR5cGUob3B0QXJnc1swXSwgXCJvcmRncm91cFwiKTtcblxuICAgIGlmICh0YkFyZykge1xuICAgICAgLy8gT3B0aW9uYWwgW3RiXSBhcmd1bWVudCBpcyBlbmdhZ2VkLlxuICAgICAgLy8gcmVmOiBhbXNtYXRoOiBcXHJlbmV3Y29tbWFuZHtcXHNtYXNofVsxXVt0Yl17JVxuICAgICAgLy8gICAgICAgICAgICAgICBkZWZcXG1iQHR7XFxodH1cXGRlZlxcbWJAYntcXGRwfVxcZGVmXFxtYkB0YntcXGh0XFx6QFxcekBcXGRwfSVcbiAgICAgIHZhciBsZXR0ZXIgPSBcIlwiO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRiQXJnLmJvZHkubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIG5vZGUgPSB0YkFyZy5ib2R5W2ldOyAvLyAkRmxvd0ZpeE1lOiBOb3QgZXZlcnkgbm9kZSB0eXBlIGhhcyBhIGB0ZXh0YCBwcm9wZXJ0eS5cblxuICAgICAgICBsZXR0ZXIgPSBub2RlLnRleHQ7XG5cbiAgICAgICAgaWYgKGxldHRlciA9PT0gXCJ0XCIpIHtcbiAgICAgICAgICBzbWFzaEhlaWdodCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAobGV0dGVyID09PSBcImJcIikge1xuICAgICAgICAgIHNtYXNoRGVwdGggPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNtYXNoSGVpZ2h0ID0gZmFsc2U7XG4gICAgICAgICAgc21hc2hEZXB0aCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNtYXNoSGVpZ2h0ID0gdHJ1ZTtcbiAgICAgIHNtYXNoRGVwdGggPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzbWFzaFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5OiBib2R5LFxuICAgICAgc21hc2hIZWlnaHQ6IHNtYXNoSGVpZ2h0LFxuICAgICAgc21hc2hEZXB0aDogc21hc2hEZXB0aFxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW10sIFtidWlsZEhUTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuXG4gICAgaWYgKCFncm91cC5zbWFzaEhlaWdodCAmJiAhZ3JvdXAuc21hc2hEZXB0aCkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgaWYgKGdyb3VwLnNtYXNoSGVpZ2h0KSB7XG4gICAgICBub2RlLmhlaWdodCA9IDA7IC8vIEluIG9yZGVyIHRvIGluZmx1ZW5jZSBtYWtlVkxpc3QsIHdlIGhhdmUgdG8gcmVzZXQgdGhlIGNoaWxkcmVuLlxuXG4gICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBub2RlLmNoaWxkcmVuW2ldLmhlaWdodCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JvdXAuc21hc2hEZXB0aCkge1xuICAgICAgbm9kZS5kZXB0aCA9IDA7XG5cbiAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgIG5vZGUuY2hpbGRyZW5bX2ldLmRlcHRoID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gQXQgdGhpcyBwb2ludCwgd2UndmUgcmVzZXQgdGhlIFRlWC1saWtlIGhlaWdodCBhbmQgZGVwdGggdmFsdWVzLlxuICAgIC8vIEJ1dCB0aGUgc3BhbiBzdGlsbCBoYXMgYW4gSFRNTCBsaW5lIGhlaWdodC5cbiAgICAvLyBtYWtlVkxpc3QgYXBwbGllcyBcImRpc3BsYXk6IHRhYmxlLWNlbGxcIiwgd2hpY2ggcHJldmVudHMgdGhlIGJyb3dzZXJcbiAgICAvLyBmcm9tIGFjdGluZyBvbiB0aGF0IGxpbmUgaGVpZ2h0LiBTbyB3ZSdsbCBjYWxsIG1ha2VWTGlzdCBub3cuXG5cblxuICAgIHZhciBzbWFzaGVkTm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBub2RlXG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpOyAvLyBGb3Igc3BhY2luZywgVGVYIHRyZWF0cyBcXGhwaGFudG9tIGFzIGEgbWF0aCBncm91cCAoc2FtZSBzcGFjaW5nIGFzIG9yZCkuXG5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiXSwgW3NtYXNoZWROb2RlXSwgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuXG4gICAgaWYgKGdyb3VwLnNtYXNoSGVpZ2h0KSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBcIjBweFwiKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JvdXAuc21hc2hEZXB0aCkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJkZXB0aFwiLCBcIjBweFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvc3FydC5qc1xuXG5cblxuXG5cblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwic3FydFwiLFxuICBuYW1lczogW1wiXFxcXHNxcnRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBudW1PcHRpb25hbEFyZ3M6IDFcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzLCBvcHRBcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyO1xuICAgIHZhciBpbmRleCA9IG9wdEFyZ3NbMF07XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInNxcnRcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keTogYm9keSxcbiAgICAgIGluZGV4OiBpbmRleFxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIFNxdWFyZSByb290cyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBwZy4gNDQzLCBSdWxlIDExLlxuICAgIC8vIEZpcnN0LCB3ZSBkbyB0aGUgc2FtZSBzdGVwcyBhcyBpbiBvdmVybGluZSB0byBidWlsZCB0aGUgaW5uZXIgZ3JvdXBcbiAgICAvLyBhbmQgbGluZVxuICAgIHZhciBpbm5lciA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMuaGF2aW5nQ3JhbXBlZFN0eWxlKCkpO1xuXG4gICAgaWYgKGlubmVyLmhlaWdodCA9PT0gMCkge1xuICAgICAgLy8gUmVuZGVyIGEgc21hbGwgc3VyZC5cbiAgICAgIGlubmVyLmhlaWdodCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS54SGVpZ2h0O1xuICAgIH0gLy8gU29tZSBncm91cHMgY2FuIHJldHVybiBkb2N1bWVudCBmcmFnbWVudHMuICBIYW5kbGUgdGhvc2UgYnkgd3JhcHBpbmdcbiAgICAvLyB0aGVtIGluIGEgc3Bhbi5cblxuXG4gICAgaW5uZXIgPSBidWlsZENvbW1vbi53cmFwRnJhZ21lbnQoaW5uZXIsIG9wdGlvbnMpOyAvLyBDYWxjdWxhdGUgdGhlIG1pbmltdW0gc2l6ZSBmb3IgdGhlIFxcc3VyZCBkZWxpbWl0ZXJcblxuICAgIHZhciBtZXRyaWNzID0gb3B0aW9ucy5mb250TWV0cmljcygpO1xuICAgIHZhciB0aGV0YSA9IG1ldHJpY3MuZGVmYXVsdFJ1bGVUaGlja25lc3M7XG4gICAgdmFyIHBoaSA9IHRoZXRhO1xuXG4gICAgaWYgKG9wdGlvbnMuc3R5bGUuaWQgPCBzcmNfU3R5bGUuVEVYVC5pZCkge1xuICAgICAgcGhpID0gb3B0aW9ucy5mb250TWV0cmljcygpLnhIZWlnaHQ7XG4gICAgfSAvLyBDYWxjdWxhdGUgdGhlIGNsZWFyYW5jZSBiZXR3ZWVuIHRoZSBib2R5IGFuZCBsaW5lXG5cblxuICAgIHZhciBsaW5lQ2xlYXJhbmNlID0gdGhldGEgKyBwaGkgLyA0O1xuICAgIHZhciBtaW5EZWxpbWl0ZXJIZWlnaHQgPSBpbm5lci5oZWlnaHQgKyBpbm5lci5kZXB0aCArIGxpbmVDbGVhcmFuY2UgKyB0aGV0YTsgLy8gQ3JlYXRlIGEgc3FydCBTVkcgb2YgdGhlIHJlcXVpcmVkIG1pbmltdW0gc2l6ZVxuXG4gICAgdmFyIF9kZWxpbWl0ZXIkc3FydEltYWdlID0gZGVsaW1pdGVyLnNxcnRJbWFnZShtaW5EZWxpbWl0ZXJIZWlnaHQsIG9wdGlvbnMpLFxuICAgICAgICBpbWcgPSBfZGVsaW1pdGVyJHNxcnRJbWFnZS5zcGFuLFxuICAgICAgICBydWxlV2lkdGggPSBfZGVsaW1pdGVyJHNxcnRJbWFnZS5ydWxlV2lkdGgsXG4gICAgICAgIGFkdmFuY2VXaWR0aCA9IF9kZWxpbWl0ZXIkc3FydEltYWdlLmFkdmFuY2VXaWR0aDtcblxuICAgIHZhciBkZWxpbURlcHRoID0gaW1nLmhlaWdodCAtIHJ1bGVXaWR0aDsgLy8gQWRqdXN0IHRoZSBjbGVhcmFuY2UgYmFzZWQgb24gdGhlIGRlbGltaXRlciBzaXplXG5cbiAgICBpZiAoZGVsaW1EZXB0aCA+IGlubmVyLmhlaWdodCArIGlubmVyLmRlcHRoICsgbGluZUNsZWFyYW5jZSkge1xuICAgICAgbGluZUNsZWFyYW5jZSA9IChsaW5lQ2xlYXJhbmNlICsgZGVsaW1EZXB0aCAtIGlubmVyLmhlaWdodCAtIGlubmVyLmRlcHRoKSAvIDI7XG4gICAgfSAvLyBTaGlmdCB0aGUgc3FydCBpbWFnZVxuXG5cbiAgICB2YXIgaW1nU2hpZnQgPSBpbWcuaGVpZ2h0IC0gaW5uZXIuaGVpZ2h0IC0gbGluZUNsZWFyYW5jZSAtIHJ1bGVXaWR0aDtcbiAgICBpbm5lci5zdHlsZS5wYWRkaW5nTGVmdCA9IGFkdmFuY2VXaWR0aCArIFwiZW1cIjsgLy8gT3ZlcmxheSB0aGUgaW1hZ2UgYW5kIHRoZSBhcmd1bWVudC5cblxuICAgIHZhciBib2R5ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJmaXJzdEJhc2VsaW5lXCIsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGlubmVyLFxuICAgICAgICB3cmFwcGVyQ2xhc3NlczogW1wic3ZnLWFsaWduXCJdXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiAtKGlubmVyLmhlaWdodCArIGltZ1NoaWZ0KVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogaW1nXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiBydWxlV2lkdGhcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWdyb3VwLmluZGV4KSB7XG4gICAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcInNxcnRcIl0sIFtib2R5XSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEhhbmRsZSB0aGUgb3B0aW9uYWwgcm9vdCBpbmRleFxuICAgICAgLy8gVGhlIGluZGV4IGlzIGFsd2F5cyBpbiBzY3JpcHRzY3JpcHQgc3R5bGVcbiAgICAgIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShzcmNfU3R5bGUuU0NSSVBUU0NSSVBUKTtcbiAgICAgIHZhciByb290bSA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmluZGV4LCBuZXdPcHRpb25zLCBvcHRpb25zKTsgLy8gVGhlIGFtb3VudCB0aGUgaW5kZXggaXMgc2hpZnRlZCBieS4gVGhpcyBpcyB0YWtlbiBmcm9tIHRoZSBUZVhcbiAgICAgIC8vIHNvdXJjZSwgaW4gdGhlIGRlZmluaXRpb24gb2YgYFxcckBAdGAuXG5cbiAgICAgIHZhciB0b1NoaWZ0ID0gMC42ICogKGJvZHkuaGVpZ2h0IC0gYm9keS5kZXB0aCk7IC8vIEJ1aWxkIGEgVkxpc3Qgd2l0aCB0aGUgc3VwZXJzY3JpcHQgc2hpZnRlZCB1cCBjb3JyZWN0bHlcblxuICAgICAgdmFyIHJvb3RWTGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJzaGlmdFwiLFxuICAgICAgICBwb3NpdGlvbkRhdGE6IC10b1NoaWZ0LFxuICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiByb290bVxuICAgICAgICB9XVxuICAgICAgfSwgb3B0aW9ucyk7IC8vIEFkZCBhIGNsYXNzIHN1cnJvdW5kaW5nIGl0IHNvIHdlIGNhbiBhZGQgb24gdGhlIGFwcHJvcHJpYXRlXG4gICAgICAvLyBrZXJuaW5nXG5cbiAgICAgIHZhciByb290Vkxpc3RXcmFwID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wicm9vdFwiXSwgW3Jvb3RWTGlzdF0pO1xuICAgICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJzcXJ0XCJdLCBbcm9vdFZMaXN0V3JhcCwgYm9keV0sIG9wdGlvbnMpO1xuICAgIH1cbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBib2R5ID0gZ3JvdXAuYm9keSxcbiAgICAgICAgaW5kZXggPSBncm91cC5pbmRleDtcbiAgICByZXR1cm4gaW5kZXggPyBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1yb290XCIsIFtidWlsZE1hdGhNTF9idWlsZEdyb3VwKGJvZHksIG9wdGlvbnMpLCBidWlsZE1hdGhNTF9idWlsZEdyb3VwKGluZGV4LCBvcHRpb25zKV0pIDogbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3FydFwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChib2R5LCBvcHRpb25zKV0pO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9zdHlsaW5nLmpzXG5cblxuXG5cblxudmFyIHN0eWxpbmdfc3R5bGVNYXAgPSB7XG4gIFwiZGlzcGxheVwiOiBzcmNfU3R5bGUuRElTUExBWSxcbiAgXCJ0ZXh0XCI6IHNyY19TdHlsZS5URVhULFxuICBcInNjcmlwdFwiOiBzcmNfU3R5bGUuU0NSSVBULFxuICBcInNjcmlwdHNjcmlwdFwiOiBzcmNfU3R5bGUuU0NSSVBUU0NSSVBUXG59O1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInN0eWxpbmdcIixcbiAgbmFtZXM6IFtcIlxcXFxkaXNwbGF5c3R5bGVcIiwgXCJcXFxcdGV4dHN0eWxlXCIsIFwiXFxcXHNjcmlwdHN0eWxlXCIsIFwiXFxcXHNjcmlwdHNjcmlwdHN0eWxlXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgYnJlYWtPblRva2VuVGV4dCA9IF9yZWYuYnJlYWtPblRva2VuVGV4dCxcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lLFxuICAgICAgICBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICAvLyBwYXJzZSBvdXQgdGhlIGltcGxpY2l0IGJvZHlcbiAgICB2YXIgYm9keSA9IHBhcnNlci5wYXJzZUV4cHJlc3Npb24odHJ1ZSwgYnJlYWtPblRva2VuVGV4dCk7IC8vIFRPRE86IFJlZmFjdG9yIHRvIGF2b2lkIGR1cGxpY2F0aW5nIHN0eWxlTWFwIGluIG11bHRpcGxlIHBsYWNlcyAoZS5nLlxuICAgIC8vIGhlcmUgYW5kIGluIGJ1aWxkSFRNTCBhbmQgZGUtZHVwZSB0aGUgZW51bWVyYXRpb24gb2YgYWxsIHRoZSBzdHlsZXMpLlxuICAgIC8vICRGbG93Rml4TWU6IFRoZSBuYW1lcyBhYm92ZSBleGFjdGx5IG1hdGNoIHRoZSBzdHlsZXMuXG5cbiAgICB2YXIgc3R5bGUgPSBmdW5jTmFtZS5zbGljZSgxLCBmdW5jTmFtZS5sZW5ndGggLSA1KTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzdHlsaW5nXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCBzdHlsZSB0byB1c2UgYnkgcHVsbGluZyBvdXQgdGhlIHN0eWxlIGZyb21cbiAgICAgIC8vIHRoZSBmdW5jdGlvbiBuYW1lXG4gICAgICBzdHlsZTogc3R5bGUsXG4gICAgICBib2R5OiBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gU3R5bGUgY2hhbmdlcyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBvbiBwZy4gNDQyLCBSdWxlIDMuXG4gICAgdmFyIG5ld1N0eWxlID0gc3R5bGluZ19zdHlsZU1hcFtncm91cC5zdHlsZV07XG4gICAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1N0eWxlKG5ld1N0eWxlKS53aXRoRm9udCgnJyk7XG4gICAgcmV0dXJuIHNpemluZ0dyb3VwKGdyb3VwLmJvZHksIG5ld09wdGlvbnMsIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gRmlndXJlIG91dCB3aGF0IHN0eWxlIHdlJ3JlIGNoYW5naW5nIHRvLlxuICAgIHZhciBuZXdTdHlsZSA9IHN0eWxpbmdfc3R5bGVNYXBbZ3JvdXAuc3R5bGVdO1xuICAgIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShuZXdTdHlsZSk7XG4gICAgdmFyIGlubmVyID0gYnVpbGRNYXRoTUxfYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG5ld09wdGlvbnMpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3R5bGVcIiwgaW5uZXIpO1xuICAgIHZhciBzdHlsZUF0dHJpYnV0ZXMgPSB7XG4gICAgICBcImRpc3BsYXlcIjogW1wiMFwiLCBcInRydWVcIl0sXG4gICAgICBcInRleHRcIjogW1wiMFwiLCBcImZhbHNlXCJdLFxuICAgICAgXCJzY3JpcHRcIjogW1wiMVwiLCBcImZhbHNlXCJdLFxuICAgICAgXCJzY3JpcHRzY3JpcHRcIjogW1wiMlwiLCBcImZhbHNlXCJdXG4gICAgfTtcbiAgICB2YXIgYXR0ciA9IHN0eWxlQXR0cmlidXRlc1tncm91cC5zdHlsZV07XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzY3JpcHRsZXZlbFwiLCBhdHRyWzBdKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImRpc3BsYXlzdHlsZVwiLCBhdHRyWzFdKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvc3Vwc3ViLmpzXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyoqXG4gKiBTb21ldGltZXMsIGdyb3VwcyBwZXJmb3JtIHNwZWNpYWwgcnVsZXMgd2hlbiB0aGV5IGhhdmUgc3VwZXJzY3JpcHRzIG9yXG4gKiBzdWJzY3JpcHRzIGF0dGFjaGVkIHRvIHRoZW0uIFRoaXMgZnVuY3Rpb24gbGV0cyB0aGUgYHN1cHN1YmAgZ3JvdXAga25vdyB0aGF0XG4gKiBTb21ldGltZXMsIGdyb3VwcyBwZXJmb3JtIHNwZWNpYWwgcnVsZXMgd2hlbiB0aGV5IGhhdmUgc3VwZXJzY3JpcHRzIG9yXG4gKiBpdHMgaW5uZXIgZWxlbWVudCBzaG91bGQgaGFuZGxlIHRoZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMgaW5zdGVhZCBvZlxuICogaGFuZGxpbmcgdGhlbSBpdHNlbGYuXG4gKi9cbnZhciBzdXBzdWJfaHRtbEJ1aWxkZXJEZWxlZ2F0ZSA9IGZ1bmN0aW9uIGh0bWxCdWlsZGVyRGVsZWdhdGUoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIGJhc2UgPSBncm91cC5iYXNlO1xuXG4gIGlmICghYmFzZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2UgaWYgKGJhc2UudHlwZSA9PT0gXCJvcFwiKSB7XG4gICAgLy8gT3BlcmF0b3JzIGhhbmRsZSBzdXBzdWJzIGRpZmZlcmVudGx5IHdoZW4gdGhleSBoYXZlIGxpbWl0c1xuICAgIC8vIChlLmcuIGBcXGRpc3BsYXlzdHlsZVxcc3VtXzJeM2ApXG4gICAgdmFyIGRlbGVnYXRlID0gYmFzZS5saW1pdHMgJiYgKG9wdGlvbnMuc3R5bGUuc2l6ZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkuc2l6ZSB8fCBiYXNlLmFsd2F5c0hhbmRsZVN1cFN1Yik7XG4gICAgcmV0dXJuIGRlbGVnYXRlID8gb3BfaHRtbEJ1aWxkZXIgOiBudWxsO1xuICB9IGVsc2UgaWYgKGJhc2UudHlwZSA9PT0gXCJvcGVyYXRvcm5hbWVcIikge1xuICAgIHZhciBfZGVsZWdhdGUgPSBiYXNlLmFsd2F5c0hhbmRsZVN1cFN1YiAmJiAob3B0aW9ucy5zdHlsZS5zaXplID09PSBzcmNfU3R5bGUuRElTUExBWS5zaXplIHx8IGJhc2UubGltaXRzKTtcblxuICAgIHJldHVybiBfZGVsZWdhdGUgPyBvcGVyYXRvcm5hbWVfaHRtbEJ1aWxkZXIgOiBudWxsO1xuICB9IGVsc2UgaWYgKGJhc2UudHlwZSA9PT0gXCJhY2NlbnRcIikge1xuICAgIHJldHVybiB1dGlscy5pc0NoYXJhY3RlckJveChiYXNlLmJhc2UpID8gYWNjZW50X2h0bWxCdWlsZGVyIDogbnVsbDtcbiAgfSBlbHNlIGlmIChiYXNlLnR5cGUgPT09IFwiaG9yaXpCcmFjZVwiKSB7XG4gICAgdmFyIGlzU3VwID0gIWdyb3VwLnN1YjtcbiAgICByZXR1cm4gaXNTdXAgPT09IGJhc2UuaXNPdmVyID8gaG9yaXpCcmFjZV9odG1sQnVpbGRlciA6IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07IC8vIFN1cGVyIHNjcmlwdHMgYW5kIHN1YnNjcmlwdHMsIHdob3NlIHByZWNpc2UgcGxhY2VtZW50IGNhbiBkZXBlbmQgb24gb3RoZXJcbi8vIGZ1bmN0aW9ucyB0aGF0IHByZWNlZGUgdGhlbS5cblxuXG5kZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKHtcbiAgdHlwZTogXCJzdXBzdWJcIixcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gU3VwZXJzY3JpcHQgYW5kIHN1YnNjcmlwdHMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgb24gcGFnZVxuICAgIC8vIDQ0NS00NDYsIHJ1bGVzIDE4KGEtZikuXG4gICAgLy8gSGVyZSBpcyB3aGVyZSB3ZSBkZWZlciB0byB0aGUgaW5uZXIgZ3JvdXAgaWYgaXQgc2hvdWxkIGhhbmRsZVxuICAgIC8vIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cyBpdHNlbGYuXG4gICAgdmFyIGJ1aWxkZXJEZWxlZ2F0ZSA9IHN1cHN1Yl9odG1sQnVpbGRlckRlbGVnYXRlKGdyb3VwLCBvcHRpb25zKTtcblxuICAgIGlmIChidWlsZGVyRGVsZWdhdGUpIHtcbiAgICAgIHJldHVybiBidWlsZGVyRGVsZWdhdGUoZ3JvdXAsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZUJhc2UgPSBncm91cC5iYXNlLFxuICAgICAgICB2YWx1ZVN1cCA9IGdyb3VwLnN1cCxcbiAgICAgICAgdmFsdWVTdWIgPSBncm91cC5zdWI7XG4gICAgdmFyIGJhc2UgPSBidWlsZEhUTUxfYnVpbGRHcm91cCh2YWx1ZUJhc2UsIG9wdGlvbnMpO1xuICAgIHZhciBzdXBtO1xuICAgIHZhciBzdWJtO1xuICAgIHZhciBtZXRyaWNzID0gb3B0aW9ucy5mb250TWV0cmljcygpOyAvLyBSdWxlIDE4YVxuXG4gICAgdmFyIHN1cFNoaWZ0ID0gMDtcbiAgICB2YXIgc3ViU2hpZnQgPSAwO1xuICAgIHZhciBpc0NoYXJhY3RlckJveCA9IHZhbHVlQmFzZSAmJiB1dGlscy5pc0NoYXJhY3RlckJveCh2YWx1ZUJhc2UpO1xuXG4gICAgaWYgKHZhbHVlU3VwKSB7XG4gICAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUob3B0aW9ucy5zdHlsZS5zdXAoKSk7XG4gICAgICBzdXBtID0gYnVpbGRIVE1MX2J1aWxkR3JvdXAodmFsdWVTdXAsIG5ld09wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAoIWlzQ2hhcmFjdGVyQm94KSB7XG4gICAgICAgIHN1cFNoaWZ0ID0gYmFzZS5oZWlnaHQgLSBuZXdPcHRpb25zLmZvbnRNZXRyaWNzKCkuc3VwRHJvcCAqIG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXIgLyBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWx1ZVN1Yikge1xuICAgICAgdmFyIF9uZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShvcHRpb25zLnN0eWxlLnN1YigpKTtcblxuICAgICAgc3VibSA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKHZhbHVlU3ViLCBfbmV3T3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgICAgIGlmICghaXNDaGFyYWN0ZXJCb3gpIHtcbiAgICAgICAgc3ViU2hpZnQgPSBiYXNlLmRlcHRoICsgX25ld09wdGlvbnMuZm9udE1ldHJpY3MoKS5zdWJEcm9wICogX25ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXIgLyBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICAgICAgfVxuICAgIH0gLy8gUnVsZSAxOGNcblxuXG4gICAgdmFyIG1pblN1cFNoaWZ0O1xuXG4gICAgaWYgKG9wdGlvbnMuc3R5bGUgPT09IHNyY19TdHlsZS5ESVNQTEFZKSB7XG4gICAgICBtaW5TdXBTaGlmdCA9IG1ldHJpY3Muc3VwMTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuc3R5bGUuY3JhbXBlZCkge1xuICAgICAgbWluU3VwU2hpZnQgPSBtZXRyaWNzLnN1cDM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1pblN1cFNoaWZ0ID0gbWV0cmljcy5zdXAyO1xuICAgIH0gLy8gc2NyaXB0c3BhY2UgaXMgYSBmb250LXNpemUtaW5kZXBlbmRlbnQgc2l6ZSwgc28gc2NhbGUgaXRcbiAgICAvLyBhcHByb3ByaWF0ZWx5IGZvciB1c2UgYXMgdGhlIG1hcmdpblJpZ2h0LlxuXG5cbiAgICB2YXIgbXVsdGlwbGllciA9IG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgdmFyIG1hcmdpblJpZ2h0ID0gMC41IC8gbWV0cmljcy5wdFBlckVtIC8gbXVsdGlwbGllciArIFwiZW1cIjtcbiAgICB2YXIgbWFyZ2luTGVmdCA9IG51bGw7XG5cbiAgICBpZiAoc3VibSkge1xuICAgICAgLy8gU3Vic2NyaXB0cyBzaG91bGRuJ3QgYmUgc2hpZnRlZCBieSB0aGUgYmFzZSdzIGl0YWxpYyBjb3JyZWN0aW9uLlxuICAgICAgLy8gQWNjb3VudCBmb3IgdGhhdCBieSBzaGlmdGluZyB0aGUgc3Vic2NyaXB0IGJhY2sgdGhlIGFwcHJvcHJpYXRlXG4gICAgICAvLyBhbW91bnQuIE5vdGUgd2Ugb25seSBkbyB0aGlzIHdoZW4gdGhlIGJhc2UgaXMgYSBzaW5nbGUgc3ltYm9sLlxuICAgICAgdmFyIGlzT2lpbnQgPSBncm91cC5iYXNlICYmIGdyb3VwLmJhc2UudHlwZSA9PT0gXCJvcFwiICYmIGdyb3VwLmJhc2UubmFtZSAmJiAoZ3JvdXAuYmFzZS5uYW1lID09PSBcIlxcXFxvaWludFwiIHx8IGdyb3VwLmJhc2UubmFtZSA9PT0gXCJcXFxcb2lpaW50XCIpO1xuXG4gICAgICBpZiAoYmFzZSBpbnN0YW5jZW9mIGRvbVRyZWVfU3ltYm9sTm9kZSB8fCBpc09paW50KSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgbWFyZ2luTGVmdCA9IC1iYXNlLml0YWxpYyArIFwiZW1cIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc3Vwc3ViO1xuXG4gICAgaWYgKHN1cG0gJiYgc3VibSkge1xuICAgICAgc3VwU2hpZnQgPSBNYXRoLm1heChzdXBTaGlmdCwgbWluU3VwU2hpZnQsIHN1cG0uZGVwdGggKyAwLjI1ICogbWV0cmljcy54SGVpZ2h0KTtcbiAgICAgIHN1YlNoaWZ0ID0gTWF0aC5tYXgoc3ViU2hpZnQsIG1ldHJpY3Muc3ViMik7XG4gICAgICB2YXIgcnVsZVdpZHRoID0gbWV0cmljcy5kZWZhdWx0UnVsZVRoaWNrbmVzczsgLy8gUnVsZSAxOGVcblxuICAgICAgdmFyIG1heFdpZHRoID0gNCAqIHJ1bGVXaWR0aDtcblxuICAgICAgaWYgKHN1cFNoaWZ0IC0gc3VwbS5kZXB0aCAtIChzdWJtLmhlaWdodCAtIHN1YlNoaWZ0KSA8IG1heFdpZHRoKSB7XG4gICAgICAgIHN1YlNoaWZ0ID0gbWF4V2lkdGggLSAoc3VwU2hpZnQgLSBzdXBtLmRlcHRoKSArIHN1Ym0uaGVpZ2h0O1xuICAgICAgICB2YXIgcHNpID0gMC44ICogbWV0cmljcy54SGVpZ2h0IC0gKHN1cFNoaWZ0IC0gc3VwbS5kZXB0aCk7XG5cbiAgICAgICAgaWYgKHBzaSA+IDApIHtcbiAgICAgICAgICBzdXBTaGlmdCArPSBwc2k7XG4gICAgICAgICAgc3ViU2hpZnQgLT0gcHNpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB2bGlzdEVsZW0gPSBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogc3VibSxcbiAgICAgICAgc2hpZnQ6IHN1YlNoaWZ0LFxuICAgICAgICBtYXJnaW5SaWdodDogbWFyZ2luUmlnaHQsXG4gICAgICAgIG1hcmdpbkxlZnQ6IG1hcmdpbkxlZnRcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHN1cG0sXG4gICAgICAgIHNoaWZ0OiAtc3VwU2hpZnQsXG4gICAgICAgIG1hcmdpblJpZ2h0OiBtYXJnaW5SaWdodFxuICAgICAgfV07XG4gICAgICBzdXBzdWIgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICAgIGNoaWxkcmVuOiB2bGlzdEVsZW1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAoc3VibSkge1xuICAgICAgLy8gUnVsZSAxOGJcbiAgICAgIHN1YlNoaWZ0ID0gTWF0aC5tYXgoc3ViU2hpZnQsIG1ldHJpY3Muc3ViMSwgc3VibS5oZWlnaHQgLSAwLjggKiBtZXRyaWNzLnhIZWlnaHQpO1xuICAgICAgdmFyIF92bGlzdEVsZW0gPSBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogc3VibSxcbiAgICAgICAgbWFyZ2luTGVmdDogbWFyZ2luTGVmdCxcbiAgICAgICAgbWFyZ2luUmlnaHQ6IG1hcmdpblJpZ2h0XG4gICAgICB9XTtcbiAgICAgIHN1cHN1YiA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJzaGlmdFwiLFxuICAgICAgICBwb3NpdGlvbkRhdGE6IHN1YlNoaWZ0LFxuICAgICAgICBjaGlsZHJlbjogX3ZsaXN0RWxlbVxuICAgICAgfSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIGlmIChzdXBtKSB7XG4gICAgICAvLyBSdWxlIDE4YywgZFxuICAgICAgc3VwU2hpZnQgPSBNYXRoLm1heChzdXBTaGlmdCwgbWluU3VwU2hpZnQsIHN1cG0uZGVwdGggKyAwLjI1ICogbWV0cmljcy54SGVpZ2h0KTtcbiAgICAgIHN1cHN1YiA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJzaGlmdFwiLFxuICAgICAgICBwb3NpdGlvbkRhdGE6IC1zdXBTaGlmdCxcbiAgICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogc3VwbSxcbiAgICAgICAgICBtYXJnaW5SaWdodDogbWFyZ2luUmlnaHRcbiAgICAgICAgfV1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzdXBzdWIgbXVzdCBoYXZlIGVpdGhlciBzdXAgb3Igc3ViLlwiKTtcbiAgICB9IC8vIFdyYXAgdGhlIHN1cHN1YiB2bGlzdCBpbiBhIHNwYW4ubXN1cHN1YiB0byByZXNldCB0ZXh0LWFsaWduLlxuXG5cbiAgICB2YXIgbWNsYXNzID0gZ2V0VHlwZU9mRG9tVHJlZShiYXNlLCBcInJpZ2h0XCIpIHx8IFwibW9yZFwiO1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbbWNsYXNzXSwgW2Jhc2UsIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1zdXBzdWJcIl0sIFtzdXBzdWJdKV0sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gSXMgdGhlIGlubmVyIGdyb3VwIGEgcmVsZXZhbnQgaG9yaXpvbmFsIGJyYWNlP1xuICAgIHZhciBpc0JyYWNlID0gZmFsc2U7XG4gICAgdmFyIGlzT3ZlcjtcbiAgICB2YXIgaXNTdXA7XG4gICAgdmFyIGhvcml6QnJhY2UgPSBjaGVja05vZGVUeXBlKGdyb3VwLmJhc2UsIFwiaG9yaXpCcmFjZVwiKTtcblxuICAgIGlmIChob3JpekJyYWNlKSB7XG4gICAgICBpc1N1cCA9ICEhZ3JvdXAuc3VwO1xuXG4gICAgICBpZiAoaXNTdXAgPT09IGhvcml6QnJhY2UuaXNPdmVyKSB7XG4gICAgICAgIGlzQnJhY2UgPSB0cnVlO1xuICAgICAgICBpc092ZXIgPSBob3JpekJyYWNlLmlzT3ZlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JvdXAuYmFzZSAmJiAoZ3JvdXAuYmFzZS50eXBlID09PSBcIm9wXCIgfHwgZ3JvdXAuYmFzZS50eXBlID09PSBcIm9wZXJhdG9ybmFtZVwiKSkge1xuICAgICAgZ3JvdXAuYmFzZS5wYXJlbnRJc1N1cFN1YiA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkcmVuID0gW2J1aWxkTWF0aE1MX2J1aWxkR3JvdXAoZ3JvdXAuYmFzZSwgb3B0aW9ucyldO1xuXG4gICAgaWYgKGdyb3VwLnN1Yikge1xuICAgICAgY2hpbGRyZW4ucHVzaChidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLnN1Yiwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIGlmIChncm91cC5zdXApIHtcbiAgICAgIGNoaWxkcmVuLnB1c2goYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5zdXAsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICB2YXIgbm9kZVR5cGU7XG5cbiAgICBpZiAoaXNCcmFjZSkge1xuICAgICAgbm9kZVR5cGUgPSBpc092ZXIgPyBcIm1vdmVyXCIgOiBcIm11bmRlclwiO1xuICAgIH0gZWxzZSBpZiAoIWdyb3VwLnN1Yikge1xuICAgICAgdmFyIGJhc2UgPSBncm91cC5iYXNlO1xuXG4gICAgICBpZiAoYmFzZSAmJiBiYXNlLnR5cGUgPT09IFwib3BcIiAmJiBiYXNlLmxpbWl0cyAmJiAob3B0aW9ucy5zdHlsZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkgfHwgYmFzZS5hbHdheXNIYW5kbGVTdXBTdWIpKSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtb3ZlclwiO1xuICAgICAgfSBlbHNlIGlmIChiYXNlICYmIGJhc2UudHlwZSA9PT0gXCJvcGVyYXRvcm5hbWVcIiAmJiBiYXNlLmFsd2F5c0hhbmRsZVN1cFN1YiAmJiAoYmFzZS5saW1pdHMgfHwgb3B0aW9ucy5zdHlsZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkpKSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtb3ZlclwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm1zdXBcIjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFncm91cC5zdXApIHtcbiAgICAgIHZhciBfYmFzZSA9IGdyb3VwLmJhc2U7XG5cbiAgICAgIGlmIChfYmFzZSAmJiBfYmFzZS50eXBlID09PSBcIm9wXCIgJiYgX2Jhc2UubGltaXRzICYmIChvcHRpb25zLnN0eWxlID09PSBzcmNfU3R5bGUuRElTUExBWSB8fCBfYmFzZS5hbHdheXNIYW5kbGVTdXBTdWIpKSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtdW5kZXJcIjtcbiAgICAgIH0gZWxzZSBpZiAoX2Jhc2UgJiYgX2Jhc2UudHlwZSA9PT0gXCJvcGVyYXRvcm5hbWVcIiAmJiBfYmFzZS5hbHdheXNIYW5kbGVTdXBTdWIgJiYgKF9iYXNlLmxpbWl0cyB8fCBvcHRpb25zLnN0eWxlID09PSBzcmNfU3R5bGUuRElTUExBWSkpIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm11bmRlclwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm1zdWJcIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9iYXNlMiA9IGdyb3VwLmJhc2U7XG5cbiAgICAgIGlmIChfYmFzZTIgJiYgX2Jhc2UyLnR5cGUgPT09IFwib3BcIiAmJiBfYmFzZTIubGltaXRzICYmIG9wdGlvbnMuc3R5bGUgPT09IHNyY19TdHlsZS5ESVNQTEFZKSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtdW5kZXJvdmVyXCI7XG4gICAgICB9IGVsc2UgaWYgKF9iYXNlMiAmJiBfYmFzZTIudHlwZSA9PT0gXCJvcGVyYXRvcm5hbWVcIiAmJiBfYmFzZTIuYWx3YXlzSGFuZGxlU3VwU3ViICYmIChvcHRpb25zLnN0eWxlID09PSBzcmNfU3R5bGUuRElTUExBWSB8fCBfYmFzZTIubGltaXRzKSkge1xuICAgICAgICBub2RlVHlwZSA9IFwibXVuZGVyb3ZlclwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm1zdWJzdXBcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKG5vZGVUeXBlLCBjaGlsZHJlbik7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3N5bWJvbHNPcC5qc1xuXG5cblxuIC8vIE9wZXJhdG9yIFBhcnNlTm9kZXMgY3JlYXRlZCBpbiBQYXJzZXIuanMgZnJvbSBzeW1ib2wgR3JvdXBzIGluIHNyYy9zeW1ib2xzLmpzLlxuXG5kZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKHtcbiAgdHlwZTogXCJhdG9tXCIsXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYXRoc3ltKGdyb3VwLnRleHQsIGdyb3VwLm1vZGUsIG9wdGlvbnMsIFtcIm1cIiArIGdyb3VwLmZhbWlseV0pO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFtidWlsZE1hdGhNTF9tYWtlVGV4dChncm91cC50ZXh0LCBncm91cC5tb2RlKV0pO1xuXG4gICAgaWYgKGdyb3VwLmZhbWlseSA9PT0gXCJiaW5cIikge1xuICAgICAgdmFyIHZhcmlhbnQgPSBidWlsZE1hdGhNTF9nZXRWYXJpYW50KGdyb3VwLCBvcHRpb25zKTtcblxuICAgICAgaWYgKHZhcmlhbnQgPT09IFwiYm9sZC1pdGFsaWNcIikge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGh2YXJpYW50XCIsIHZhcmlhbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZ3JvdXAuZmFtaWx5ID09PSBcInB1bmN0XCIpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic2VwYXJhdG9yXCIsIFwidHJ1ZVwiKTtcbiAgICB9IGVsc2UgaWYgKGdyb3VwLmZhbWlseSA9PT0gXCJvcGVuXCIgfHwgZ3JvdXAuZmFtaWx5ID09PSBcImNsb3NlXCIpIHtcbiAgICAgIC8vIERlbGltcyBidWlsdCBoZXJlIHNob3VsZCBub3Qgc3RyZXRjaCB2ZXJ0aWNhbGx5LlxuICAgICAgLy8gU2VlIGRlbGltc2l6aW5nLmpzIGZvciBzdHJldGNoeSBkZWxpbXMuXG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcInN0cmV0Y2h5XCIsIFwiZmFsc2VcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3N5bWJvbHNPcmQuanNcblxuXG5cblxuLy8gXCJtYXRob3JkXCIgYW5kIFwidGV4dG9yZFwiIFBhcnNlTm9kZXMgY3JlYXRlZCBpbiBQYXJzZXIuanMgZnJvbSBzeW1ib2wgR3JvdXBzIGluXG52YXIgZGVmYXVsdFZhcmlhbnQgPSB7XG4gIFwibWlcIjogXCJpdGFsaWNcIixcbiAgXCJtblwiOiBcIm5vcm1hbFwiLFxuICBcIm10ZXh0XCI6IFwibm9ybWFsXCJcbn07XG5kZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKHtcbiAgdHlwZTogXCJtYXRob3JkXCIsXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlT3JkKGdyb3VwLCBvcHRpb25zLCBcIm1hdGhvcmRcIik7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibWlcIiwgW2J1aWxkTWF0aE1MX21ha2VUZXh0KGdyb3VwLnRleHQsIGdyb3VwLm1vZGUsIG9wdGlvbnMpXSk7XG4gICAgdmFyIHZhcmlhbnQgPSBidWlsZE1hdGhNTF9nZXRWYXJpYW50KGdyb3VwLCBvcHRpb25zKSB8fCBcIml0YWxpY1wiO1xuXG4gICAgaWYgKHZhcmlhbnQgIT09IGRlZmF1bHRWYXJpYW50W25vZGUudHlwZV0pIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWF0aHZhcmlhbnRcIiwgdmFyaWFudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuZGVmaW5lRnVuY3Rpb25CdWlsZGVycyh7XG4gIHR5cGU6IFwidGV4dG9yZFwiLFxuICBodG1sQnVpbGRlcjogZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZU9yZChncm91cCwgb3B0aW9ucywgXCJ0ZXh0b3JkXCIpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIHRleHQgPSBidWlsZE1hdGhNTF9tYWtlVGV4dChncm91cC50ZXh0LCBncm91cC5tb2RlLCBvcHRpb25zKTtcbiAgICB2YXIgdmFyaWFudCA9IGJ1aWxkTWF0aE1MX2dldFZhcmlhbnQoZ3JvdXAsIG9wdGlvbnMpIHx8IFwibm9ybWFsXCI7XG4gICAgdmFyIG5vZGU7XG5cbiAgICBpZiAoZ3JvdXAubW9kZSA9PT0gJ3RleHQnKSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdGV4dFwiLCBbdGV4dF0pO1xuICAgIH0gZWxzZSBpZiAoL1swLTldLy50ZXN0KGdyb3VwLnRleHQpKSB7XG4gICAgICAvLyBUT0RPKGtldmluYikgbWVyZ2UgYWRqYWNlbnQgPG1uPiBub2Rlc1xuICAgICAgLy8gZG8gaXQgYXMgYSBwb3N0IHByb2Nlc3Npbmcgc3RlcFxuICAgICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW5cIiwgW3RleHRdKTtcbiAgICB9IGVsc2UgaWYgKGdyb3VwLnRleHQgPT09IFwiXFxcXHByaW1lXCIpIHtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFt0ZXh0XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1pXCIsIFt0ZXh0XSk7XG4gICAgfVxuXG4gICAgaWYgKHZhcmlhbnQgIT09IGRlZmF1bHRWYXJpYW50W25vZGUudHlwZV0pIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWF0aHZhcmlhbnRcIiwgdmFyaWFudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3N5bWJvbHNTcGFjaW5nLmpzXG5cblxuXG4gLy8gQSBtYXAgb2YgQ1NTLWJhc2VkIHNwYWNpbmcgZnVuY3Rpb25zIHRvIHRoZWlyIENTUyBjbGFzcy5cblxudmFyIGNzc1NwYWNlID0ge1xuICBcIlxcXFxub2JyZWFrXCI6IFwibm9icmVha1wiLFxuICBcIlxcXFxhbGxvd2JyZWFrXCI6IFwiYWxsb3dicmVha1wiXG59OyAvLyBBIGxvb2t1cCB0YWJsZSB0byBkZXRlcm1pbmUgd2hldGhlciBhIHNwYWNpbmcgZnVuY3Rpb24vc3ltYm9sIHNob3VsZCBiZVxuLy8gdHJlYXRlZCBsaWtlIGEgcmVndWxhciBzcGFjZSBjaGFyYWN0ZXIuICBJZiBhIHN5bWJvbCBvciBjb21tYW5kIGlzIGEga2V5XG4vLyBpbiB0aGlzIHRhYmxlLCB0aGVuIGl0IHNob3VsZCBiZSBhIHJlZ3VsYXIgc3BhY2UgY2hhcmFjdGVyLiAgRnVydGhlcm1vcmUsXG4vLyB0aGUgYXNzb2NpYXRlZCB2YWx1ZSBtYXkgaGF2ZSBhIGBjbGFzc05hbWVgIHNwZWNpZnlpbmcgYW4gZXh0cmEgQ1NTIGNsYXNzXG4vLyB0byBhZGQgdG8gdGhlIGNyZWF0ZWQgYHNwYW5gLlxuXG52YXIgcmVndWxhclNwYWNlID0ge1xuICBcIiBcIjoge30sXG4gIFwiXFxcXCBcIjoge30sXG4gIFwiflwiOiB7XG4gICAgY2xhc3NOYW1lOiBcIm5vYnJlYWtcIlxuICB9LFxuICBcIlxcXFxzcGFjZVwiOiB7fSxcbiAgXCJcXFxcbm9icmVha3NwYWNlXCI6IHtcbiAgICBjbGFzc05hbWU6IFwibm9icmVha1wiXG4gIH1cbn07IC8vIFBhcnNlTm9kZTxcInNwYWNpbmdcIj4gY3JlYXRlZCBpbiBQYXJzZXIuanMgZnJvbSB0aGUgXCJzcGFjaW5nXCIgc3ltYm9sIEdyb3VwcyBpblxuLy8gc3JjL3N5bWJvbHMuanMuXG5cbmRlZmluZUZ1bmN0aW9uQnVpbGRlcnMoe1xuICB0eXBlOiBcInNwYWNpbmdcIixcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgaWYgKHJlZ3VsYXJTcGFjZS5oYXNPd25Qcm9wZXJ0eShncm91cC50ZXh0KSkge1xuICAgICAgdmFyIGNsYXNzTmFtZSA9IHJlZ3VsYXJTcGFjZVtncm91cC50ZXh0XS5jbGFzc05hbWUgfHwgXCJcIjsgLy8gU3BhY2VzIGFyZSBnZW5lcmF0ZWQgYnkgYWRkaW5nIGFuIGFjdHVhbCBzcGFjZS4gRWFjaCBvZiB0aGVzZVxuICAgICAgLy8gdGhpbmdzIGhhcyBhbiBlbnRyeSBpbiB0aGUgc3ltYm9scyB0YWJsZSwgc28gdGhlc2Ugd2lsbCBiZSB0dXJuZWRcbiAgICAgIC8vIGludG8gYXBwcm9wcmlhdGUgb3V0cHV0cy5cblxuICAgICAgaWYgKGdyb3VwLm1vZGUgPT09IFwidGV4dFwiKSB7XG4gICAgICAgIHZhciBvcmQgPSBidWlsZENvbW1vbi5tYWtlT3JkKGdyb3VwLCBvcHRpb25zLCBcInRleHRvcmRcIik7XG4gICAgICAgIG9yZC5jbGFzc2VzLnB1c2goY2xhc3NOYW1lKTtcbiAgICAgICAgcmV0dXJuIG9yZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtc3BhY2VcIiwgY2xhc3NOYW1lXSwgW2J1aWxkQ29tbW9uLm1hdGhzeW0oZ3JvdXAudGV4dCwgZ3JvdXAubW9kZSwgb3B0aW9ucyldLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNzc1NwYWNlLmhhc093blByb3BlcnR5KGdyb3VwLnRleHQpKSB7XG4gICAgICAvLyBTcGFjZXMgYmFzZWQgb24ganVzdCBhIENTUyBjbGFzcy5cbiAgICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtc3BhY2VcIiwgY3NzU3BhY2VbZ3JvdXAudGV4dF1dLCBbXSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlVua25vd24gdHlwZSBvZiBzcGFjZSBcXFwiXCIgKyBncm91cC50ZXh0ICsgXCJcXFwiXCIpO1xuICAgIH1cbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBub2RlO1xuXG4gICAgaWYgKHJlZ3VsYXJTcGFjZS5oYXNPd25Qcm9wZXJ0eShncm91cC50ZXh0KSkge1xuICAgICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRleHRcIiwgW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKFwiXFx4QTBcIildKTtcbiAgICB9IGVsc2UgaWYgKGNzc1NwYWNlLmhhc093blByb3BlcnR5KGdyb3VwLnRleHQpKSB7XG4gICAgICAvLyBDU1MtYmFzZWQgTWF0aE1MIHNwYWNlcyAoXFxub2JyZWFrLCBcXGFsbG93YnJlYWspIGFyZSBpZ25vcmVkXG4gICAgICByZXR1cm4gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3BhY2VcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlVua25vd24gdHlwZSBvZiBzcGFjZSBcXFwiXCIgKyBncm91cC50ZXh0ICsgXCJcXFwiXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy90YWcuanNcblxuXG5cblxudmFyIHRhZ19wYWQgPSBmdW5jdGlvbiBwYWQoKSB7XG4gIHZhciBwYWROb2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdGRcIiwgW10pO1xuICBwYWROb2RlLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFwiNTAlXCIpO1xuICByZXR1cm4gcGFkTm9kZTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uQnVpbGRlcnMoe1xuICB0eXBlOiBcInRhZ1wiLFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIHRhYmxlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdGFibGVcIiwgW25ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRyXCIsIFt0YWdfcGFkKCksIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRkXCIsIFtidWlsZEV4cHJlc3Npb25Sb3coZ3JvdXAuYm9keSwgb3B0aW9ucyldKSwgdGFnX3BhZCgpLCBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZFwiLCBbYnVpbGRFeHByZXNzaW9uUm93KGdyb3VwLnRhZywgb3B0aW9ucyldKV0pXSk7XG4gICAgdGFibGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgXCIxMDAlXCIpO1xuICAgIHJldHVybiB0YWJsZTsgLy8gVE9ETzogTGVmdC1hbGlnbmVkIHRhZ3MuXG4gICAgLy8gQ3VycmVudGx5LCB0aGUgZ3JvdXAgYW5kIG9wdGlvbnMgcGFzc2VkIGhlcmUgZG8gbm90IGNvbnRhaW5cbiAgICAvLyBlbm91Z2ggaW5mbyB0byBzZXQgdGFnIGFsaWdubWVudC4gYGxlcW5vYCBpcyBpbiBTZXR0aW5ncyBidXQgaXQgaXNcbiAgICAvLyBub3QgcGFzc2VkIHRvIE9wdGlvbnMuIE9uIHRoZSBIVE1MIHNpZGUsIGxlcW5vIGlzXG4gICAgLy8gc2V0IGJ5IGEgQ1NTIGNsYXNzIGFwcGxpZWQgaW4gYnVpbGRUcmVlLmpzLiBUaGF0IHdvdWxkIGhhdmUgd29ya2VkXG4gICAgLy8gaW4gTWF0aE1MIGlmIGJyb3dzZXJzIHN1cHBvcnRlZCA8bWxhYmVsZWR0cj4uIFNpbmNlIHRoZXkgZG9uJ3QsIHdlXG4gICAgLy8gbmVlZCB0byByZXdyaXRlIHRoZSB3YXkgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuXG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3RleHQuanNcblxuXG5cbiAvLyBOb24tbWF0aHkgdGV4dCwgcG9zc2libHkgaW4gYSBmb250XG5cbnZhciB0ZXh0Rm9udEZhbWlsaWVzID0ge1xuICBcIlxcXFx0ZXh0XCI6IHVuZGVmaW5lZCxcbiAgXCJcXFxcdGV4dHJtXCI6IFwidGV4dHJtXCIsXG4gIFwiXFxcXHRleHRzZlwiOiBcInRleHRzZlwiLFxuICBcIlxcXFx0ZXh0dHRcIjogXCJ0ZXh0dHRcIixcbiAgXCJcXFxcdGV4dG5vcm1hbFwiOiBcInRleHRybVwiXG59O1xudmFyIHRleHRGb250V2VpZ2h0cyA9IHtcbiAgXCJcXFxcdGV4dGJmXCI6IFwidGV4dGJmXCIsXG4gIFwiXFxcXHRleHRtZFwiOiBcInRleHRtZFwiXG59O1xudmFyIHRleHRGb250U2hhcGVzID0ge1xuICBcIlxcXFx0ZXh0aXRcIjogXCJ0ZXh0aXRcIixcbiAgXCJcXFxcdGV4dHVwXCI6IFwidGV4dHVwXCJcbn07XG5cbnZhciBvcHRpb25zV2l0aEZvbnQgPSBmdW5jdGlvbiBvcHRpb25zV2l0aEZvbnQoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIGZvbnQgPSBncm91cC5mb250OyAvLyBDaGVja3MgaWYgdGhlIGFyZ3VtZW50IGlzIGEgZm9udCBmYW1pbHkgb3IgYSBmb250IHN0eWxlLlxuXG4gIGlmICghZm9udCkge1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9IGVsc2UgaWYgKHRleHRGb250RmFtaWxpZXNbZm9udF0pIHtcbiAgICByZXR1cm4gb3B0aW9ucy53aXRoVGV4dEZvbnRGYW1pbHkodGV4dEZvbnRGYW1pbGllc1tmb250XSk7XG4gIH0gZWxzZSBpZiAodGV4dEZvbnRXZWlnaHRzW2ZvbnRdKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMud2l0aFRleHRGb250V2VpZ2h0KHRleHRGb250V2VpZ2h0c1tmb250XSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG9wdGlvbnMud2l0aFRleHRGb250U2hhcGUodGV4dEZvbnRTaGFwZXNbZm9udF0pO1xuICB9XG59O1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidGV4dFwiLFxuICBuYW1lczogWy8vIEZvbnQgZmFtaWxpZXNcbiAgXCJcXFxcdGV4dFwiLCBcIlxcXFx0ZXh0cm1cIiwgXCJcXFxcdGV4dHNmXCIsIFwiXFxcXHRleHR0dFwiLCBcIlxcXFx0ZXh0bm9ybWFsXCIsIC8vIEZvbnQgd2VpZ2h0c1xuICBcIlxcXFx0ZXh0YmZcIiwgXCJcXFxcdGV4dG1kXCIsIC8vIEZvbnQgU2hhcGVzXG4gIFwiXFxcXHRleHRpdFwiLCBcIlxcXFx0ZXh0dXBcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1widGV4dFwiXSxcbiAgICBncmVlZGluZXNzOiAyLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgY29uc3VtZU1vZGU6IFwidGV4dFwiXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGJvZHkpLFxuICAgICAgZm9udDogZnVuY05hbWVcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnNXaXRoRm9udChncm91cCwgb3B0aW9ucyk7XG4gICAgdmFyIGlubmVyID0gYnVpbGRIVE1MX2J1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBuZXdPcHRpb25zLCB0cnVlKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcInRleHRcIl0sIGJ1aWxkQ29tbW9uLnRyeUNvbWJpbmVDaGFycyhpbm5lciksIG5ld09wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zV2l0aEZvbnQoZ3JvdXAsIG9wdGlvbnMpO1xuICAgIHJldHVybiBidWlsZEV4cHJlc3Npb25Sb3coZ3JvdXAuYm9keSwgbmV3T3B0aW9ucyk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3VuZGVybGluZS5qc1xuXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJ1bmRlcmxpbmVcIixcbiAgbmFtZXM6IFtcIlxcXFx1bmRlcmxpbmVcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ1bmRlcmxpbmVcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keTogYXJnc1swXVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIFVuZGVybGluZXMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgcGcgNDQzLCBSdWxlIDEwLlxuICAgIC8vIEJ1aWxkIHRoZSBpbm5lciBncm91cC5cbiAgICB2YXIgaW5uZXJHcm91cCA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpOyAvLyBDcmVhdGUgdGhlIGxpbmUgdG8gZ28gYmVsb3cgdGhlIGJvZHlcblxuICAgIHZhciBsaW5lID0gYnVpbGRDb21tb24ubWFrZUxpbmVTcGFuKFwidW5kZXJsaW5lLWxpbmVcIiwgb3B0aW9ucyk7IC8vIEdlbmVyYXRlIHRoZSB2bGlzdCwgd2l0aCB0aGUgYXBwcm9wcmlhdGUga2VybnNcblxuICAgIHZhciBkZWZhdWx0UnVsZVRoaWNrbmVzcyA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcztcbiAgICB2YXIgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcInRvcFwiLFxuICAgICAgcG9zaXRpb25EYXRhOiBpbm5lckdyb3VwLmhlaWdodCxcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogZGVmYXVsdFJ1bGVUaGlja25lc3NcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGxpbmVcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IDMgKiBkZWZhdWx0UnVsZVRoaWNrbmVzc1xuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogaW5uZXJHcm91cFxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcInVuZGVybGluZVwiXSwgW3ZsaXN0XSwgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3BlcmF0b3IgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFtuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZShcIlxcdTIwM0VcIildKTtcbiAgICBvcGVyYXRvci5zZXRBdHRyaWJ1dGUoXCJzdHJldGNoeVwiLCBcInRydWVcIik7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm11bmRlclwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKSwgb3BlcmF0b3JdKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImFjY2VudHVuZGVyXCIsIFwidHJ1ZVwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvdmVyYi5qc1xuXG5cblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidmVyYlwiLFxuICBuYW1lczogW1wiXFxcXHZlcmJcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoY29udGV4dCwgYXJncywgb3B0QXJncykge1xuICAgIC8vIFxcdmVyYiBhbmQgXFx2ZXJiKiBhcmUgZGVhbHQgd2l0aCBkaXJlY3RseSBpbiBQYXJzZXIuanMuXG4gICAgLy8gSWYgd2UgZW5kIHVwIGhlcmUsIGl0J3MgYmVjYXVzZSBvZiBhIGZhaWx1cmUgdG8gbWF0Y2ggdGhlIHR3byBkZWxpbWl0ZXJzXG4gICAgLy8gaW4gdGhlIHJlZ2V4IGluIExleGVyLmpzLiAgTGFUZVggcmFpc2VzIHRoZSBmb2xsb3dpbmcgZXJyb3Igd2hlbiBcXHZlcmIgaXNcbiAgICAvLyB0ZXJtaW5hdGVkIGJ5IGVuZCBvZiBsaW5lIChvciBmaWxlKS5cbiAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJcXFxcdmVyYiBlbmRlZCBieSBlbmQgb2YgbGluZSBpbnN0ZWFkIG9mIG1hdGNoaW5nIGRlbGltaXRlclwiKTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIHRleHQgPSBtYWtlVmVyYihncm91cCk7XG4gICAgdmFyIGJvZHkgPSBbXTsgLy8gXFx2ZXJiIGVudGVycyB0ZXh0IG1vZGUgYW5kIHRoZXJlZm9yZSBpcyBzaXplZCBsaWtlIFxcdGV4dHN0eWxlXG5cbiAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUob3B0aW9ucy5zdHlsZS50ZXh0KCkpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgYyA9IHRleHRbaV07XG5cbiAgICAgIGlmIChjID09PSAnficpIHtcbiAgICAgICAgYyA9ICdcXFxcdGV4dGFzY2lpdGlsZGUnO1xuICAgICAgfVxuXG4gICAgICBib2R5LnB1c2goYnVpbGRDb21tb24ubWFrZVN5bWJvbChjLCBcIlR5cGV3cml0ZXItUmVndWxhclwiLCBncm91cC5tb2RlLCBuZXdPcHRpb25zLCBbXCJtb3JkXCIsIFwidGV4dHR0XCJdKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJ0ZXh0XCJdLmNvbmNhdChuZXdPcHRpb25zLnNpemluZ0NsYXNzZXMob3B0aW9ucykpLCBidWlsZENvbW1vbi50cnlDb21iaW5lQ2hhcnMoYm9keSksIG5ld09wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIHRleHQgPSBuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZShtYWtlVmVyYihncm91cCkpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdGV4dFwiLCBbdGV4dF0pO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWF0aHZhcmlhbnRcIiwgXCJtb25vc3BhY2VcIik7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLyoqXG4gKiBDb252ZXJ0cyB2ZXJiIGdyb3VwIGludG8gYm9keSBzdHJpbmcuXG4gKlxuICogXFx2ZXJiKiByZXBsYWNlcyBlYWNoIHNwYWNlIHdpdGggYW4gb3BlbiBib3ggXFx1MjQyM1xuICogXFx2ZXJiIHJlcGxhY2VzIGVhY2ggc3BhY2Ugd2l0aCBhIG5vLWJyZWFrIHNwYWNlIFxceEEwXG4gKi9cblxudmFyIG1ha2VWZXJiID0gZnVuY3Rpb24gbWFrZVZlcmIoZ3JvdXApIHtcbiAgcmV0dXJuIGdyb3VwLmJvZHkucmVwbGFjZSgvIC9nLCBncm91cC5zdGFyID8gXCJcXHUyNDIzXCIgOiAnXFx4QTAnKTtcbn07XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMuanNcbi8qKiBJbmNsdWRlIHRoaXMgdG8gZW5zdXJlIHRoYXQgYWxsIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZC4gKi9cblxudmFyIGZ1bmN0aW9ucyA9IF9mdW5jdGlvbnM7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfZnVuY3Rpb25zID0gKGZ1bmN0aW9ucyk7IC8vIFRPRE8oa2V2aW5iKTogaGF2ZSBmdW5jdGlvbnMgcmV0dXJuIGFuIG9iamVjdCBhbmQgY2FsbCBkZWZpbmVGdW5jdGlvbiB3aXRoXG4vLyB0aGF0IG9iamVjdCBpbiB0aGlzIGZpbGUgaW5zdGVhZCBvZiByZWx5aW5nIG9uIHNpZGUtZWZmZWN0cy5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvTGV4ZXIuanNcbi8qKlxuICogVGhlIExleGVyIGNsYXNzIGhhbmRsZXMgdG9rZW5pemluZyB0aGUgaW5wdXQgaW4gdmFyaW91cyB3YXlzLiBTaW5jZSBvdXJcbiAqIHBhcnNlciBleHBlY3RzIHVzIHRvIGJlIGFibGUgdG8gYmFja3RyYWNrLCB0aGUgbGV4ZXIgYWxsb3dzIGxleGluZyBmcm9tIGFueVxuICogZ2l2ZW4gc3RhcnRpbmcgcG9pbnQuXG4gKlxuICogSXRzIG1haW4gZXhwb3NlZCBmdW5jdGlvbiBpcyB0aGUgYGxleGAgZnVuY3Rpb24sIHdoaWNoIHRha2VzIGEgcG9zaXRpb24gdG9cbiAqIGxleCBmcm9tIGFuZCBhIHR5cGUgb2YgdG9rZW4gdG8gbGV4LiBJdCBkZWZlcnMgdG8gdGhlIGFwcHJvcHJpYXRlIGBfaW5uZXJMZXhgXG4gKiBmdW5jdGlvbi5cbiAqXG4gKiBUaGUgdmFyaW91cyBgX2lubmVyTGV4YCBmdW5jdGlvbnMgcGVyZm9ybSB0aGUgYWN0dWFsIGxleGluZyBvZiBkaWZmZXJlbnRcbiAqIGtpbmRzLlxuICovXG5cblxuXG5cbi8qIFRoZSBmb2xsb3dpbmcgdG9rZW5SZWdleFxuICogLSBtYXRjaGVzIHR5cGljYWwgd2hpdGVzcGFjZSAoYnV0IG5vdCBOQlNQIGV0Yy4pIHVzaW5nIGl0cyBmaXJzdCBncm91cFxuICogLSBkb2VzIG5vdCBtYXRjaCBhbnkgY29udHJvbCBjaGFyYWN0ZXIgXFx4MDAtXFx4MWYgZXhjZXB0IHdoaXRlc3BhY2VcbiAqIC0gZG9lcyBub3QgbWF0Y2ggYSBiYXJlIGJhY2tzbGFzaFxuICogLSBtYXRjaGVzIGFueSBBU0NJSSBjaGFyYWN0ZXIgZXhjZXB0IHRob3NlIGp1c3QgbWVudGlvbmVkXG4gKiAtIGRvZXMgbm90IG1hdGNoIHRoZSBCTVAgcHJpdmF0ZSB1c2UgYXJlYSBcXHVFMDAwLVxcdUY4RkZcbiAqIC0gZG9lcyBub3QgbWF0Y2ggYmFyZSBzdXJyb2dhdGUgY29kZSB1bml0c1xuICogLSBtYXRjaGVzIGFueSBCTVAgY2hhcmFjdGVyIGV4Y2VwdCBmb3IgdGhvc2UganVzdCBkZXNjcmliZWRcbiAqIC0gbWF0Y2hlcyBhbnkgdmFsaWQgVW5pY29kZSBzdXJyb2dhdGUgcGFpclxuICogLSBtYXRjaGVzIGEgYmFja3NsYXNoIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIGxldHRlcnNcbiAqIC0gbWF0Y2hlcyBhIGJhY2tzbGFzaCBmb2xsb3dlZCBieSBhbnkgQk1QIGNoYXJhY3RlciwgaW5jbHVkaW5nIG5ld2xpbmVcbiAqIEp1c3QgYmVjYXVzZSB0aGUgTGV4ZXIgbWF0Y2hlcyBzb21ldGhpbmcgZG9lc24ndCBtZWFuIGl0J3MgdmFsaWQgaW5wdXQ6XG4gKiBJZiB0aGVyZSBpcyBubyBtYXRjaGluZyBmdW5jdGlvbiBvciBzeW1ib2wgZGVmaW5pdGlvbiwgdGhlIFBhcnNlciB3aWxsXG4gKiBzdGlsbCByZWplY3QgdGhlIGlucHV0LlxuICovXG52YXIgc3BhY2VSZWdleFN0cmluZyA9IFwiWyBcXHJcXG5cXHRdXCI7XG52YXIgY29udHJvbFdvcmRSZWdleFN0cmluZyA9IFwiXFxcXFxcXFxbYS16QS1aQF0rXCI7XG52YXIgY29udHJvbFN5bWJvbFJlZ2V4U3RyaW5nID0gXCJcXFxcXFxcXFteXFx1RDgwMC1cXHVERkZGXVwiO1xudmFyIGNvbnRyb2xXb3JkV2hpdGVzcGFjZVJlZ2V4U3RyaW5nID0gXCJcIiArIGNvbnRyb2xXb3JkUmVnZXhTdHJpbmcgKyBzcGFjZVJlZ2V4U3RyaW5nICsgXCIqXCI7XG52YXIgY29udHJvbFdvcmRXaGl0ZXNwYWNlUmVnZXggPSBuZXcgUmVnRXhwKFwiXihcIiArIGNvbnRyb2xXb3JkUmVnZXhTdHJpbmcgKyBcIilcIiArIHNwYWNlUmVnZXhTdHJpbmcgKyBcIiokXCIpO1xudmFyIGNvbWJpbmluZ0RpYWNyaXRpY2FsTWFya1N0cmluZyA9IFwiW1xcdTAzMDAtXFx1MDM2Rl1cIjtcbnZhciBjb21iaW5pbmdEaWFjcml0aWNhbE1hcmtzRW5kUmVnZXggPSBuZXcgUmVnRXhwKGNvbWJpbmluZ0RpYWNyaXRpY2FsTWFya1N0cmluZyArIFwiKyRcIik7XG52YXIgdG9rZW5SZWdleFN0cmluZyA9IFwiKFwiICsgc3BhY2VSZWdleFN0cmluZyArIFwiKyl8XCIgKyAvLyB3aGl0ZXNwYWNlXG5cIihbIS1cXFxcW1xcXFxdLVxcdTIwMjdcXHUyMDJBLVxcdUQ3RkZcXHVGOTAwLVxcdUZGRkZdXCIgKyAoIC8vIHNpbmdsZSBjb2RlcG9pbnRcbmNvbWJpbmluZ0RpYWNyaXRpY2FsTWFya1N0cmluZyArIFwiKlwiKSArIC8vIC4uLnBsdXMgYWNjZW50c1xuXCJ8W1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXVwiICsgKCAvLyBzdXJyb2dhdGUgcGFpclxuY29tYmluaW5nRGlhY3JpdGljYWxNYXJrU3RyaW5nICsgXCIqXCIpICsgLy8gLi4ucGx1cyBhY2NlbnRzXG5cInxcXFxcXFxcXHZlcmJcXFxcKihbXl0pLio/XFxcXDNcIiArIC8vIFxcdmVyYipcblwifFxcXFxcXFxcdmVyYihbXiphLXpBLVpdKS4qP1xcXFw0XCIgKyAvLyBcXHZlcmIgdW5zdGFycmVkXG5cInxcXFxcXFxcXG9wZXJhdG9ybmFtZVxcXFwqXCIgKyAoIC8vIFxcb3BlcmF0b3JuYW1lKlxuXCJ8XCIgKyBjb250cm9sV29yZFdoaXRlc3BhY2VSZWdleFN0cmluZykgKyAoIC8vIFxcbWFjcm9OYW1lICsgc3BhY2VzXG5cInxcIiArIGNvbnRyb2xTeW1ib2xSZWdleFN0cmluZyArIFwiKVwiKTsgLy8gXFxcXCwgXFwnLCBldGMuXG5cbi8qKiBNYWluIExleGVyIGNsYXNzICovXG5cbnZhciBMZXhlcl9MZXhlciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIC8vIGNhdGVnb3J5IGNvZGVzLCBvbmx5IHN1cHBvcnRzIGNvbW1lbnQgY2hhcmFjdGVycyAoMTQpIGZvciBub3dcbiAgZnVuY3Rpb24gTGV4ZXIoaW5wdXQsIHNldHRpbmdzKSB7XG4gICAgdGhpcy5pbnB1dCA9IHZvaWQgMDtcbiAgICB0aGlzLnNldHRpbmdzID0gdm9pZCAwO1xuICAgIHRoaXMudG9rZW5SZWdleCA9IHZvaWQgMDtcbiAgICB0aGlzLmNhdGNvZGVzID0gdm9pZCAwO1xuICAgIC8vIFNlcGFyYXRlIGFjY2VudHMgZnJvbSBjaGFyYWN0ZXJzXG4gICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgICB0aGlzLnRva2VuUmVnZXggPSBuZXcgUmVnRXhwKHRva2VuUmVnZXhTdHJpbmcsICdnJyk7XG4gICAgdGhpcy5jYXRjb2RlcyA9IHtcbiAgICAgIFwiJVwiOiAxNCAvLyBjb21tZW50IGNoYXJhY3RlclxuXG4gICAgfTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBMZXhlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldENhdGNvZGUgPSBmdW5jdGlvbiBzZXRDYXRjb2RlKGNoYXIsIGNvZGUpIHtcbiAgICB0aGlzLmNhdGNvZGVzW2NoYXJdID0gY29kZTtcbiAgfVxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBsZXhlcyBhIHNpbmdsZSB0b2tlbi5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ubGV4ID0gZnVuY3Rpb24gbGV4KCkge1xuICAgIHZhciBpbnB1dCA9IHRoaXMuaW5wdXQ7XG4gICAgdmFyIHBvcyA9IHRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXg7XG5cbiAgICBpZiAocG9zID09PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBuZXcgVG9rZW5fVG9rZW4oXCJFT0ZcIiwgbmV3IFNvdXJjZUxvY2F0aW9uKHRoaXMsIHBvcywgcG9zKSk7XG4gICAgfVxuXG4gICAgdmFyIG1hdGNoID0gdGhpcy50b2tlblJlZ2V4LmV4ZWMoaW5wdXQpO1xuXG4gICAgaWYgKG1hdGNoID09PSBudWxsIHx8IG1hdGNoLmluZGV4ICE9PSBwb3MpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlVuZXhwZWN0ZWQgY2hhcmFjdGVyOiAnXCIgKyBpbnB1dFtwb3NdICsgXCInXCIsIG5ldyBUb2tlbl9Ub2tlbihpbnB1dFtwb3NdLCBuZXcgU291cmNlTG9jYXRpb24odGhpcywgcG9zLCBwb3MgKyAxKSkpO1xuICAgIH1cblxuICAgIHZhciB0ZXh0ID0gbWF0Y2hbMl0gfHwgXCIgXCI7XG5cbiAgICBpZiAodGhpcy5jYXRjb2Rlc1t0ZXh0XSA9PT0gMTQpIHtcbiAgICAgIC8vIGNvbW1lbnQgY2hhcmFjdGVyXG4gICAgICB2YXIgbmxJbmRleCA9IGlucHV0LmluZGV4T2YoJ1xcbicsIHRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXgpO1xuXG4gICAgICBpZiAobmxJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgdGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleCA9IGlucHV0Lmxlbmd0aDsgLy8gRU9GXG5cbiAgICAgICAgdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJjb21tZW50QXRFbmRcIiwgXCIlIGNvbW1lbnQgaGFzIG5vIHRlcm1pbmF0aW5nIG5ld2xpbmU7IExhVGVYIHdvdWxkIFwiICsgXCJmYWlsIGJlY2F1c2Ugb2YgY29tbWVudGluZyB0aGUgZW5kIG9mIG1hdGggbW9kZSAoZS5nLiAkKVwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXggPSBubEluZGV4ICsgMTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMubGV4KCk7XG4gICAgfSAvLyBUcmltIGFueSB0cmFpbGluZyB3aGl0ZXNwYWNlIGZyb20gY29udHJvbCB3b3JkIG1hdGNoXG5cblxuICAgIHZhciBjb250cm9sTWF0Y2ggPSB0ZXh0Lm1hdGNoKGNvbnRyb2xXb3JkV2hpdGVzcGFjZVJlZ2V4KTtcblxuICAgIGlmIChjb250cm9sTWF0Y2gpIHtcbiAgICAgIHRleHQgPSBjb250cm9sTWF0Y2hbMV07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUb2tlbl9Ub2tlbih0ZXh0LCBuZXcgU291cmNlTG9jYXRpb24odGhpcywgcG9zLCB0aGlzLnRva2VuUmVnZXgubGFzdEluZGV4KSk7XG4gIH07XG5cbiAgcmV0dXJuIExleGVyO1xufSgpO1xuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL05hbWVzcGFjZS5qc1xuLyoqXG4gKiBBIGBOYW1lc3BhY2VgIHJlZmVycyB0byBhIHNwYWNlIG9mIG5hbWVhYmxlIHRoaW5ncyBsaWtlIG1hY3JvcyBvciBsZW5ndGhzLFxuICogd2hpY2ggY2FuIGJlIGBzZXRgIGVpdGhlciBnbG9iYWxseSBvciBsb2NhbCB0byBhIG5lc3RlZCBncm91cCwgdXNpbmcgYW5cbiAqIHVuZG8gc3RhY2sgc2ltaWxhciB0byBob3cgVGVYIGltcGxlbWVudHMgdGhpcyBmdW5jdGlvbmFsaXR5LlxuICogUGVyZm9ybWFuY2Utd2lzZSwgYGdldGAgYW5kIGxvY2FsIGBzZXRgIHRha2UgY29uc3RhbnQgdGltZSwgd2hpbGUgZ2xvYmFsXG4gKiBgc2V0YCB0YWtlcyB0aW1lIHByb3BvcnRpb25hbCB0byB0aGUgZGVwdGggb2YgZ3JvdXAgbmVzdGluZy5cbiAqL1xuXG5cbnZhciBOYW1lc3BhY2VfTmFtZXNwYWNlID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIEJvdGggYXJndW1lbnRzIGFyZSBvcHRpb25hbC4gIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhbiBvYmplY3Qgb2ZcbiAgICogYnVpbHQtaW4gbWFwcGluZ3Mgd2hpY2ggbmV2ZXIgY2hhbmdlLiAgVGhlIHNlY29uZCBhcmd1bWVudCBpcyBhbiBvYmplY3RcbiAgICogb2YgaW5pdGlhbCAoZ2xvYmFsLWxldmVsKSBtYXBwaW5ncywgd2hpY2ggd2lsbCBjb25zdGFudGx5IGNoYW5nZVxuICAgKiBhY2NvcmRpbmcgdG8gYW55IGdsb2JhbC90b3AtbGV2ZWwgYHNldGBzIGRvbmUuXG4gICAqL1xuICBmdW5jdGlvbiBOYW1lc3BhY2UoYnVpbHRpbnMsIGdsb2JhbE1hY3Jvcykge1xuICAgIGlmIChidWlsdGlucyA9PT0gdm9pZCAwKSB7XG4gICAgICBidWlsdGlucyA9IHt9O1xuICAgIH1cblxuICAgIGlmIChnbG9iYWxNYWNyb3MgPT09IHZvaWQgMCkge1xuICAgICAgZ2xvYmFsTWFjcm9zID0ge307XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50ID0gdm9pZCAwO1xuICAgIHRoaXMuYnVpbHRpbnMgPSB2b2lkIDA7XG4gICAgdGhpcy51bmRlZlN0YWNrID0gdm9pZCAwO1xuICAgIHRoaXMuY3VycmVudCA9IGdsb2JhbE1hY3JvcztcbiAgICB0aGlzLmJ1aWx0aW5zID0gYnVpbHRpbnM7XG4gICAgdGhpcy51bmRlZlN0YWNrID0gW107XG4gIH1cbiAgLyoqXG4gICAqIFN0YXJ0IGEgbmV3IG5lc3RlZCBncm91cCwgYWZmZWN0aW5nIGZ1dHVyZSBsb2NhbCBgc2V0YHMuXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IE5hbWVzcGFjZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJlZ2luR3JvdXAgPSBmdW5jdGlvbiBiZWdpbkdyb3VwKCkge1xuICAgIHRoaXMudW5kZWZTdGFjay5wdXNoKHt9KTtcbiAgfVxuICAvKipcbiAgICogRW5kIGN1cnJlbnQgbmVzdGVkIGdyb3VwLCByZXN0b3JpbmcgdmFsdWVzIGJlZm9yZSB0aGUgZ3JvdXAgYmVnYW4uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmVuZEdyb3VwID0gZnVuY3Rpb24gZW5kR3JvdXAoKSB7XG4gICAgaWYgKHRoaXMudW5kZWZTdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlVuYmFsYW5jZWQgbmFtZXNwYWNlIGRlc3RydWN0aW9uOiBhdHRlbXB0IFwiICsgXCJ0byBwb3AgZ2xvYmFsIG5hbWVzcGFjZTsgcGxlYXNlIHJlcG9ydCB0aGlzIGFzIGEgYnVnXCIpO1xuICAgIH1cblxuICAgIHZhciB1bmRlZnMgPSB0aGlzLnVuZGVmU3RhY2sucG9wKCk7XG5cbiAgICBmb3IgKHZhciB1bmRlZiBpbiB1bmRlZnMpIHtcbiAgICAgIGlmICh1bmRlZnMuaGFzT3duUHJvcGVydHkodW5kZWYpKSB7XG4gICAgICAgIGlmICh1bmRlZnNbdW5kZWZdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkZWxldGUgdGhpcy5jdXJyZW50W3VuZGVmXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRbdW5kZWZdID0gdW5kZWZzW3VuZGVmXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogRGV0ZWN0IHdoZXRoZXIgYG5hbWVgIGhhcyBhIGRlZmluaXRpb24uICBFcXVpdmFsZW50IHRvXG4gICAqIGBnZXQobmFtZSkgIT0gbnVsbGAuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhcyA9IGZ1bmN0aW9uIGhhcyhuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudC5oYXNPd25Qcm9wZXJ0eShuYW1lKSB8fCB0aGlzLmJ1aWx0aW5zLmhhc093blByb3BlcnR5KG5hbWUpO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgYSBuYW1lLCBvciBgdW5kZWZpbmVkYCBpZiB0aGVyZSBpcyBubyB2YWx1ZS5cbiAgICpcbiAgICogTm90ZTogRG8gbm90IHVzZSBgaWYgKG5hbWVzcGFjZS5nZXQoLi4uKSlgIHRvIGRldGVjdCB3aGV0aGVyIGEgbWFjcm9cbiAgICogaXMgZGVmaW5lZCwgYXMgdGhlIGRlZmluaXRpb24gbWF5IGJlIHRoZSBlbXB0eSBzdHJpbmcgd2hpY2ggZXZhbHVhdGVzXG4gICAqIHRvIGBmYWxzZWAgaW4gSmF2YVNjcmlwdC4gIFVzZSBgaWYgKG5hbWVzcGFjZS5nZXQoLi4uKSAhPSBudWxsKWAgb3JcbiAgICogYGlmIChuYW1lc3BhY2UuaGFzKC4uLikpYC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZ2V0ID0gZnVuY3Rpb24gZ2V0KG5hbWUpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50W25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsdGluc1tuYW1lXTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VycmVudCB2YWx1ZSBvZiBhIG5hbWUsIGFuZCBvcHRpb25hbGx5IHNldCBpdCBnbG9iYWxseSB0b28uXG4gICAqIExvY2FsIHNldCgpIHNldHMgdGhlIGN1cnJlbnQgdmFsdWUgYW5kICh3aGVuIGFwcHJvcHJpYXRlKSBhZGRzIGFuIHVuZG9cbiAgICogb3BlcmF0aW9uIHRvIHRoZSB1bmRvIHN0YWNrLiAgR2xvYmFsIHNldCgpIG1heSBjaGFuZ2UgdGhlIHVuZG9cbiAgICogb3BlcmF0aW9uIGF0IGV2ZXJ5IGxldmVsLCBzbyB0YWtlcyB0aW1lIGxpbmVhciBpbiB0aGVpciBudW1iZXIuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldChuYW1lLCB2YWx1ZSwgZ2xvYmFsKSB7XG4gICAgaWYgKGdsb2JhbCA9PT0gdm9pZCAwKSB7XG4gICAgICBnbG9iYWwgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAvLyBHbG9iYWwgc2V0IGlzIGVxdWl2YWxlbnQgdG8gc2V0dGluZyBpbiBhbGwgZ3JvdXBzLiAgU2ltdWxhdGUgdGhpc1xuICAgICAgLy8gYnkgZGVzdHJveWluZyBhbnkgdW5kb3MgY3VycmVudGx5IHNjaGVkdWxlZCBmb3IgdGhpcyBuYW1lLFxuICAgICAgLy8gYW5kIGFkZGluZyBhbiB1bmRvIHdpdGggdGhlICpuZXcqIHZhbHVlIChpbiBjYXNlIGl0IGxhdGVyIGdldHNcbiAgICAgIC8vIGxvY2FsbHkgcmVzZXQgd2l0aGluIHRoaXMgZW52aXJvbm1lbnQpLlxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnVuZGVmU3RhY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZGVsZXRlIHRoaXMudW5kZWZTdGFja1tpXVtuYW1lXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudW5kZWZTdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMudW5kZWZTdGFja1t0aGlzLnVuZGVmU3RhY2subGVuZ3RoIC0gMV1bbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVW5kbyB0aGlzIHNldCBhdCBlbmQgb2YgdGhpcyBncm91cCAocG9zc2libHkgdG8gYHVuZGVmaW5lZGApLFxuICAgICAgLy8gdW5sZXNzIGFuIHVuZG8gaXMgYWxyZWFkeSBpbiBwbGFjZSwgaW4gd2hpY2ggY2FzZSB0aGF0IG9sZGVyXG4gICAgICAvLyB2YWx1ZSBpcyB0aGUgY29ycmVjdCBvbmUuXG4gICAgICB2YXIgdG9wID0gdGhpcy51bmRlZlN0YWNrW3RoaXMudW5kZWZTdGFjay5sZW5ndGggLSAxXTtcblxuICAgICAgaWYgKHRvcCAmJiAhdG9wLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIHRvcFtuYW1lXSA9IHRoaXMuY3VycmVudFtuYW1lXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRbbmFtZV0gPSB2YWx1ZTtcbiAgfTtcblxuICByZXR1cm4gTmFtZXNwYWNlO1xufSgpO1xuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL21hY3Jvcy5qc1xuLyoqXG4gKiBQcmVkZWZpbmVkIG1hY3JvcyBmb3IgS2FUZVguXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGRlZmluZSBzb21lIGNvbW1hbmRzIGluIHRlcm1zIG9mIG90aGVycy5cbiAqL1xuXG5cblxuXG5cbnZhciBidWlsdGluTWFjcm9zID0ge307XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBtYWNyb3MgPSAoYnVpbHRpbk1hY3Jvcyk7IC8vIFRoaXMgZnVuY3Rpb24gbWlnaHQgb25lIGRheSBhY2NlcHQgYW4gYWRkaXRpb25hbCBhcmd1bWVudCBhbmQgZG8gbW9yZSB0aGluZ3MuXG5cbmZ1bmN0aW9uIGRlZmluZU1hY3JvKG5hbWUsIGJvZHkpIHtcbiAgYnVpbHRpbk1hY3Jvc1tuYW1lXSA9IGJvZHk7XG59IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIG1hY3JvIHRvb2xzXG4vLyBMYVRlWCdzIFxcQGZpcnN0b2Z0d297IzF9eyMyfSBleHBhbmRzIHRvICMxLCBza2lwcGluZyAjMlxuLy8gVGVYIHNvdXJjZTogXFxsb25nXFxkZWZcXEBmaXJzdG9mdHdvIzEjMnsjMX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcQGZpcnN0b2Z0d29cIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgdmFyIGFyZ3MgPSBjb250ZXh0LmNvbnN1bWVBcmdzKDIpO1xuICByZXR1cm4ge1xuICAgIHRva2VuczogYXJnc1swXSxcbiAgICBudW1BcmdzOiAwXG4gIH07XG59KTsgLy8gTGFUZVgncyBcXEBzZWNvbmRvZnR3b3sjMX17IzJ9IGV4cGFuZHMgdG8gIzIsIHNraXBwaW5nICMxXG4vLyBUZVggc291cmNlOiBcXGxvbmdcXGRlZlxcQHNlY29uZG9mdHdvIzEjMnsjMn1cblxuZGVmaW5lTWFjcm8oXCJcXFxcQHNlY29uZG9mdHdvXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciBhcmdzID0gY29udGV4dC5jb25zdW1lQXJncygyKTtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbnM6IGFyZ3NbMV0sXG4gICAgbnVtQXJnczogMFxuICB9O1xufSk7IC8vIExhVGVYJ3MgXFxAaWZuZXh0Y2hhcnsjMX17IzJ9eyMzfSBsb29rcyBhaGVhZCB0byB0aGUgbmV4dCAodW5leHBhbmRlZClcbi8vIHN5bWJvbC4gIElmIGl0IG1hdGNoZXMgIzEsIHRoZW4gdGhlIG1hY3JvIGV4cGFuZHMgdG8gIzI7IG90aGVyd2lzZSwgIzMuXG4vLyBOb3RlLCBob3dldmVyLCB0aGF0IGl0IGRvZXMgbm90IGNvbnN1bWUgdGhlIG5leHQgc3ltYm9sIGluIGVpdGhlciBjYXNlLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxAaWZuZXh0Y2hhclwiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICB2YXIgYXJncyA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMyk7IC8vIHN5bWJvbCwgaWYsIGVsc2VcblxuICB2YXIgbmV4dFRva2VuID0gY29udGV4dC5mdXR1cmUoKTtcblxuICBpZiAoYXJnc1swXS5sZW5ndGggPT09IDEgJiYgYXJnc1swXVswXS50ZXh0ID09PSBuZXh0VG9rZW4udGV4dCkge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbnM6IGFyZ3NbMV0sXG4gICAgICBudW1BcmdzOiAwXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW5zOiBhcmdzWzJdLFxuICAgICAgbnVtQXJnczogMFxuICAgIH07XG4gIH1cbn0pOyAvLyBMYVRlWCdzIFxcQGlmc3RhcnsjMX17IzJ9IGxvb2tzIGFoZWFkIHRvIHRoZSBuZXh0ICh1bmV4cGFuZGVkKSBzeW1ib2wuXG4vLyBJZiBpdCBpcyBgKmAsIHRoZW4gaXQgY29uc3VtZXMgdGhlIHN5bWJvbCwgYW5kIHRoZSBtYWNybyBleHBhbmRzIHRvICMxO1xuLy8gb3RoZXJ3aXNlLCB0aGUgbWFjcm8gZXhwYW5kcyB0byAjMiAod2l0aG91dCBjb25zdW1pbmcgdGhlIHN5bWJvbCkuXG4vLyBUZVggc291cmNlOiBcXGRlZlxcQGlmc3RhciMxe1xcQGlmbmV4dGNoYXIgKntcXEBmaXJzdG9mdHdveyMxfX19XG5cbmRlZmluZU1hY3JvKFwiXFxcXEBpZnN0YXJcIiwgXCJcXFxcQGlmbmV4dGNoYXIgKntcXFxcQGZpcnN0b2Z0d297IzF9fVwiKTsgLy8gTGFUZVgncyBcXFRleHRPck1hdGh7IzF9eyMyfSBleHBhbmRzIHRvICMxIGluIHRleHQgbW9kZSwgIzIgaW4gbWF0aCBtb2RlXG5cbmRlZmluZU1hY3JvKFwiXFxcXFRleHRPck1hdGhcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgdmFyIGFyZ3MgPSBjb250ZXh0LmNvbnN1bWVBcmdzKDIpO1xuXG4gIGlmIChjb250ZXh0Lm1vZGUgPT09ICd0ZXh0Jykge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbnM6IGFyZ3NbMF0sXG4gICAgICBudW1BcmdzOiAwXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW5zOiBhcmdzWzFdLFxuICAgICAgbnVtQXJnczogMFxuICAgIH07XG4gIH1cbn0pOyAvLyBMb29rdXAgdGFibGUgZm9yIHBhcnNpbmcgbnVtYmVycyBpbiBiYXNlIDggdGhyb3VnaCAxNlxuXG52YXIgZGlnaXRUb051bWJlciA9IHtcbiAgXCIwXCI6IDAsXG4gIFwiMVwiOiAxLFxuICBcIjJcIjogMixcbiAgXCIzXCI6IDMsXG4gIFwiNFwiOiA0LFxuICBcIjVcIjogNSxcbiAgXCI2XCI6IDYsXG4gIFwiN1wiOiA3LFxuICBcIjhcIjogOCxcbiAgXCI5XCI6IDksXG4gIFwiYVwiOiAxMCxcbiAgXCJBXCI6IDEwLFxuICBcImJcIjogMTEsXG4gIFwiQlwiOiAxMSxcbiAgXCJjXCI6IDEyLFxuICBcIkNcIjogMTIsXG4gIFwiZFwiOiAxMyxcbiAgXCJEXCI6IDEzLFxuICBcImVcIjogMTQsXG4gIFwiRVwiOiAxNCxcbiAgXCJmXCI6IDE1LFxuICBcIkZcIjogMTVcbn07IC8vIFRlWCBcXGNoYXIgbWFrZXMgYSBsaXRlcmFsIGNoYXJhY3RlciAoY2F0Y29kZSAxMikgdXNpbmcgdGhlIGZvbGxvd2luZyBmb3Jtczpcbi8vIChzZWUgVGhlIFRlWEJvb2ssIHAuIDQzKVxuLy8gICBcXGNoYXIxMjMgIC0tIGRlY2ltYWxcbi8vICAgXFxjaGFyJzEyMyAtLSBvY3RhbFxuLy8gICBcXGNoYXJcIjEyMyAtLSBoZXhcbi8vICAgXFxjaGFyYHggICAtLSBjaGFyYWN0ZXIgdGhhdCBjYW4gYmUgd3JpdHRlbiAoaS5lLiBpc24ndCBhY3RpdmUpXG4vLyAgIFxcY2hhcmBcXHggIC0tIGNoYXJhY3RlciB0aGF0IGNhbm5vdCBiZSB3cml0dGVuIChlLmcuICUpXG4vLyBUaGVzZSBhbGwgcmVmZXIgdG8gY2hhcmFjdGVycyBmcm9tIHRoZSBmb250LCBzbyB3ZSB0dXJuIHRoZW0gaW50byBzcGVjaWFsXG4vLyBjYWxscyB0byBhIGZ1bmN0aW9uIFxcQGNoYXIgZGVhbHQgd2l0aCBpbiB0aGUgUGFyc2VyLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxjaGFyXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciB0b2tlbiA9IGNvbnRleHQucG9wVG9rZW4oKTtcbiAgdmFyIGJhc2U7XG4gIHZhciBudW1iZXIgPSAnJztcblxuICBpZiAodG9rZW4udGV4dCA9PT0gXCInXCIpIHtcbiAgICBiYXNlID0gODtcbiAgICB0b2tlbiA9IGNvbnRleHQucG9wVG9rZW4oKTtcbiAgfSBlbHNlIGlmICh0b2tlbi50ZXh0ID09PSAnXCInKSB7XG4gICAgYmFzZSA9IDE2O1xuICAgIHRva2VuID0gY29udGV4dC5wb3BUb2tlbigpO1xuICB9IGVsc2UgaWYgKHRva2VuLnRleHQgPT09IFwiYFwiKSB7XG4gICAgdG9rZW4gPSBjb250ZXh0LnBvcFRva2VuKCk7XG5cbiAgICBpZiAodG9rZW4udGV4dFswXSA9PT0gXCJcXFxcXCIpIHtcbiAgICAgIG51bWJlciA9IHRva2VuLnRleHQuY2hhckNvZGVBdCgxKTtcbiAgICB9IGVsc2UgaWYgKHRva2VuLnRleHQgPT09IFwiRU9GXCIpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlxcXFxjaGFyYCBtaXNzaW5nIGFyZ3VtZW50XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBudW1iZXIgPSB0b2tlbi50ZXh0LmNoYXJDb2RlQXQoMCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGJhc2UgPSAxMDtcbiAgfVxuXG4gIGlmIChiYXNlKSB7XG4gICAgLy8gUGFyc2UgYSBudW1iZXIgaW4gdGhlIGdpdmVuIGJhc2UsIHN0YXJ0aW5nIHdpdGggZmlyc3QgYHRva2VuYC5cbiAgICBudW1iZXIgPSBkaWdpdFRvTnVtYmVyW3Rva2VuLnRleHRdO1xuXG4gICAgaWYgKG51bWJlciA9PSBudWxsIHx8IG51bWJlciA+PSBiYXNlKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJJbnZhbGlkIGJhc2UtXCIgKyBiYXNlICsgXCIgZGlnaXQgXCIgKyB0b2tlbi50ZXh0KTtcbiAgICB9XG5cbiAgICB2YXIgZGlnaXQ7XG5cbiAgICB3aGlsZSAoKGRpZ2l0ID0gZGlnaXRUb051bWJlcltjb250ZXh0LmZ1dHVyZSgpLnRleHRdKSAhPSBudWxsICYmIGRpZ2l0IDwgYmFzZSkge1xuICAgICAgbnVtYmVyICo9IGJhc2U7XG4gICAgICBudW1iZXIgKz0gZGlnaXQ7XG4gICAgICBjb250ZXh0LnBvcFRva2VuKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFwiXFxcXEBjaGFye1wiICsgbnVtYmVyICsgXCJ9XCI7XG59KTsgLy8gQmFzaWMgc3VwcG9ydCBmb3IgbWFjcm8gZGVmaW5pdGlvbnM6XG4vLyAgICAgXFxkZWZcXG1hY3Jve2V4cGFuc2lvbn1cbi8vICAgICBcXGRlZlxcbWFjcm8jMXtleHBhbnNpb259XG4vLyAgICAgXFxkZWZcXG1hY3JvIzEjMntleHBhbnNpb259XG4vLyAgICAgXFxkZWZcXG1hY3JvIzEjMiMzIzQjNSM2IzcjOCM5e2V4cGFuc2lvbn1cbi8vIEFsc28gdGhlIFxcZ2RlZiBhbmQgXFxnbG9iYWxcXGRlZiBlcXVpdmFsZW50c1xuXG52YXIgbWFjcm9zX2RlZiA9IGZ1bmN0aW9uIGRlZihjb250ZXh0LCBnbG9iYWwpIHtcbiAgdmFyIGFyZyA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMSlbMF07XG5cbiAgaWYgKGFyZy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJcXFxcZ2RlZidzIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBtYWNybyBuYW1lXCIpO1xuICB9XG5cbiAgdmFyIG5hbWUgPSBhcmdbMF0udGV4dDsgLy8gQ291bnQgYXJndW1lbnQgc3BlY2lmaWVycywgYW5kIGNoZWNrIHRoZXkgYXJlIGluIHRoZSBvcmRlciAjMSAjMiAuLi5cblxuICB2YXIgbnVtQXJncyA9IDA7XG4gIGFyZyA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMSlbMF07XG5cbiAgd2hpbGUgKGFyZy5sZW5ndGggPT09IDEgJiYgYXJnWzBdLnRleHQgPT09IFwiI1wiKSB7XG4gICAgYXJnID0gY29udGV4dC5jb25zdW1lQXJncygxKVswXTtcblxuICAgIGlmIChhcmcubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50IG51bWJlciBsZW5ndGggXFxcIlwiICsgYXJnLmxlbmd0aCArIFwiXFxcIlwiKTtcbiAgICB9XG5cbiAgICBpZiAoIS9eWzEtOV0kLy50ZXN0KGFyZ1swXS50ZXh0KSkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCBhcmd1bWVudCBudW1iZXIgXFxcIlwiICsgYXJnWzBdLnRleHQgKyBcIlxcXCJcIik7XG4gICAgfVxuXG4gICAgbnVtQXJncysrO1xuXG4gICAgaWYgKHBhcnNlSW50KGFyZ1swXS50ZXh0KSAhPT0gbnVtQXJncykge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiQXJndW1lbnQgbnVtYmVyIFxcXCJcIiArIGFyZ1swXS50ZXh0ICsgXCJcXFwiIG91dCBvZiBvcmRlclwiKTtcbiAgICB9XG5cbiAgICBhcmcgPSBjb250ZXh0LmNvbnN1bWVBcmdzKDEpWzBdO1xuICB9IC8vIEZpbmFsIGFyZyBpcyB0aGUgZXhwYW5zaW9uIG9mIHRoZSBtYWNyb1xuXG5cbiAgY29udGV4dC5tYWNyb3Muc2V0KG5hbWUsIHtcbiAgICB0b2tlbnM6IGFyZyxcbiAgICBudW1BcmdzOiBudW1BcmdzXG4gIH0sIGdsb2JhbCk7XG4gIHJldHVybiAnJztcbn07XG5cbmRlZmluZU1hY3JvKFwiXFxcXGdkZWZcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgcmV0dXJuIG1hY3Jvc19kZWYoY29udGV4dCwgdHJ1ZSk7XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXGRlZlwiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICByZXR1cm4gbWFjcm9zX2RlZihjb250ZXh0LCBmYWxzZSk7XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXGdsb2JhbFwiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICB2YXIgbmV4dCA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMSlbMF07XG5cbiAgaWYgKG5leHQubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCBjb21tYW5kIGFmdGVyIFxcXFxnbG9iYWxcIik7XG4gIH1cblxuICB2YXIgY29tbWFuZCA9IG5leHRbMF0udGV4dDsgLy8gVE9ETzogU2hvdWxkIGV4cGFuZCBjb21tYW5kXG5cbiAgaWYgKGNvbW1hbmQgPT09IFwiXFxcXGRlZlwiKSB7XG4gICAgLy8gXFxnbG9iYWxcXGRlZiBpcyBlcXVpdmFsZW50IHRvIFxcZ2RlZlxuICAgIHJldHVybiBtYWNyb3NfZGVmKGNvbnRleHQsIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgY29tbWFuZCAnXCIgKyBjb21tYW5kICsgXCInIGFmdGVyIFxcXFxnbG9iYWxcIik7XG4gIH1cbn0pOyAvLyBcXG5ld2NvbW1hbmR7XFxtYWNyb31bYXJnc117ZGVmaW5pdGlvbn1cbi8vIFxccmVuZXdjb21tYW5ke1xcbWFjcm99W2FyZ3Nde2RlZmluaXRpb259XG4vLyBUT0RPOiBPcHRpb25hbCBhcmd1bWVudHM6IFxcbmV3Y29tbWFuZHtcXG1hY3JvfVthcmdzXVtkZWZhdWx0XXtkZWZpbml0aW9ufVxuXG52YXIgbWFjcm9zX25ld2NvbW1hbmQgPSBmdW5jdGlvbiBuZXdjb21tYW5kKGNvbnRleHQsIGV4aXN0c09LLCBub25leGlzdHNPSykge1xuICB2YXIgYXJnID0gY29udGV4dC5jb25zdW1lQXJncygxKVswXTtcblxuICBpZiAoYXJnLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlxcXFxuZXdjb21tYW5kJ3MgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIG1hY3JvIG5hbWVcIik7XG4gIH1cblxuICB2YXIgbmFtZSA9IGFyZ1swXS50ZXh0O1xuICB2YXIgZXhpc3RzID0gY29udGV4dC5pc0RlZmluZWQobmFtZSk7XG5cbiAgaWYgKGV4aXN0cyAmJiAhZXhpc3RzT0spIHtcbiAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJcXFxcbmV3Y29tbWFuZHtcIiArIG5hbWUgKyBcIn0gYXR0ZW1wdGluZyB0byByZWRlZmluZSBcIiArIChuYW1lICsgXCI7IHVzZSBcXFxccmVuZXdjb21tYW5kXCIpKTtcbiAgfVxuXG4gIGlmICghZXhpc3RzICYmICFub25leGlzdHNPSykge1xuICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlxcXFxyZW5ld2NvbW1hbmR7XCIgKyBuYW1lICsgXCJ9IHdoZW4gY29tbWFuZCBcIiArIG5hbWUgKyBcIiBcIiArIFwiZG9lcyBub3QgeWV0IGV4aXN0OyB1c2UgXFxcXG5ld2NvbW1hbmRcIik7XG4gIH1cblxuICB2YXIgbnVtQXJncyA9IDA7XG4gIGFyZyA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMSlbMF07XG5cbiAgaWYgKGFyZy5sZW5ndGggPT09IDEgJiYgYXJnWzBdLnRleHQgPT09IFwiW1wiKSB7XG4gICAgdmFyIGFyZ1RleHQgPSAnJztcbiAgICB2YXIgdG9rZW4gPSBjb250ZXh0LmV4cGFuZE5leHRUb2tlbigpO1xuXG4gICAgd2hpbGUgKHRva2VuLnRleHQgIT09IFwiXVwiICYmIHRva2VuLnRleHQgIT09IFwiRU9GXCIpIHtcbiAgICAgIC8vIFRPRE86IFNob3VsZCBwcm9wZXJseSBleHBhbmQgYXJnLCBlLmcuLCBpZ25vcmUge31zXG4gICAgICBhcmdUZXh0ICs9IHRva2VuLnRleHQ7XG4gICAgICB0b2tlbiA9IGNvbnRleHQuZXhwYW5kTmV4dFRva2VuKCk7XG4gICAgfVxuXG4gICAgaWYgKCFhcmdUZXh0Lm1hdGNoKC9eXFxzKlswLTldK1xccyokLykpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50czogXCIgKyBhcmdUZXh0KTtcbiAgICB9XG5cbiAgICBudW1BcmdzID0gcGFyc2VJbnQoYXJnVGV4dCk7XG4gICAgYXJnID0gY29udGV4dC5jb25zdW1lQXJncygxKVswXTtcbiAgfSAvLyBGaW5hbCBhcmcgaXMgdGhlIGV4cGFuc2lvbiBvZiB0aGUgbWFjcm9cblxuXG4gIGNvbnRleHQubWFjcm9zLnNldChuYW1lLCB7XG4gICAgdG9rZW5zOiBhcmcsXG4gICAgbnVtQXJnczogbnVtQXJnc1xuICB9KTtcbiAgcmV0dXJuICcnO1xufTtcblxuZGVmaW5lTWFjcm8oXCJcXFxcbmV3Y29tbWFuZFwiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICByZXR1cm4gbWFjcm9zX25ld2NvbW1hbmQoY29udGV4dCwgZmFsc2UsIHRydWUpO1xufSk7XG5kZWZpbmVNYWNybyhcIlxcXFxyZW5ld2NvbW1hbmRcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgcmV0dXJuIG1hY3Jvc19uZXdjb21tYW5kKGNvbnRleHQsIHRydWUsIGZhbHNlKTtcbn0pO1xuZGVmaW5lTWFjcm8oXCJcXFxccHJvdmlkZWNvbW1hbmRcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgcmV0dXJuIG1hY3Jvc19uZXdjb21tYW5kKGNvbnRleHQsIHRydWUsIHRydWUpO1xufSk7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEdyb3VwaW5nXG4vLyBcXGxldFxcYmdyb3VwPXsgXFxsZXRcXGVncm91cD19XG5cbmRlZmluZU1hY3JvKFwiXFxcXGJncm91cFwiLCBcIntcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxlZ3JvdXBcIiwgXCJ9XCIpOyAvLyBTeW1ib2xzIGZyb20gbGF0ZXgubHR4OlxuLy8gXFxkZWZcXGxxe2B9XG4vLyBcXGRlZlxccnF7J31cbi8vIFxcZGVmIFxcYWEge1xcciBhfVxuLy8gXFxkZWYgXFxBQSB7XFxyIEF9XG5cbmRlZmluZU1hY3JvKFwiXFxcXGxxXCIsIFwiYFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJxXCIsIFwiJ1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGFhXCIsIFwiXFxcXHIgYVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEFBXCIsIFwiXFxcXHIgQVwiKTsgLy8gQ29weXJpZ2h0IChDKSBhbmQgcmVnaXN0ZXJlZCAoUikgc3ltYm9scy4gVXNlIHJhdyBzeW1ib2wgaW4gTWF0aE1MLlxuLy8gXFxEZWNsYXJlVGV4dENvbW1hbmREZWZhdWx0e1xcdGV4dGNvcHlyaWdodH17XFx0ZXh0Y2lyY2xlZHtjfX1cbi8vIFxcRGVjbGFyZVRleHRDb21tYW5kRGVmYXVsdHtcXHRleHRyZWdpc3RlcmVkfXtcXHRleHRjaXJjbGVkeyVcbi8vICAgICAgXFxjaGVja0BtYXRoZm9udHNcXGZvbnRzaXplXFxzZkBzaXplXFx6QFxcbWF0aEBmb250c2ZhbHNlXFxzZWxlY3Rmb250IFJ9fVxuLy8gXFxEZWNsYXJlUm9idXN0Q29tbWFuZHtcXGNvcHlyaWdodH17JVxuLy8gICAgXFxpZm1tb2Rle1xcbmZzc0B0ZXh0e1xcdGV4dGNvcHlyaWdodH19XFxlbHNlXFx0ZXh0Y29weXJpZ2h0XFxmaX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcdGV4dGNvcHlyaWdodFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcdGV4dGNpcmNsZWR7Y319e1xcXFxjaGFyYMKpfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNvcHlyaWdodFwiLCBcIlxcXFxUZXh0T3JNYXRoe1xcXFx0ZXh0Y29weXJpZ2h0fXtcXFxcdGV4dHtcXFxcdGV4dGNvcHlyaWdodH19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGV4dHJlZ2lzdGVyZWRcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXHRleHRjaXJjbGVke1xcXFxzY3JpcHRzaXplIFJ9fXtcXFxcY2hhcmDCrn1cIik7IC8vIENoYXJhY3RlcnMgb21pdHRlZCBmcm9tIFVuaWNvZGUgcmFuZ2UgMUQ0MDDigJMxRDdGRlxuXG5kZWZpbmVNYWNybyhcIlxcdTIxMkNcIiwgXCJcXFxcbWF0aHNjcntCfVwiKTsgLy8gc2NyaXB0XG5cbmRlZmluZU1hY3JvKFwiXFx1MjEzMFwiLCBcIlxcXFxtYXRoc2Nye0V9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMTMxXCIsIFwiXFxcXG1hdGhzY3J7Rn1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIxMEJcIiwgXCJcXFxcbWF0aHNjcntIfVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjExMFwiLCBcIlxcXFxtYXRoc2Nye0l9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMTEyXCIsIFwiXFxcXG1hdGhzY3J7TH1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIxMzNcIiwgXCJcXFxcbWF0aHNjcntNfVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjExQlwiLCBcIlxcXFxtYXRoc2Nye1J9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMTJEXCIsIFwiXFxcXG1hdGhmcmFre0N9XCIpOyAvLyBGcmFrdHVyXG5cbmRlZmluZU1hY3JvKFwiXFx1MjEwQ1wiLCBcIlxcXFxtYXRoZnJha3tIfVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjEyOFwiLCBcIlxcXFxtYXRoZnJha3tafVwiKTsgLy8gRGVmaW5lIFxcQmJiayB3aXRoIGEgbWFjcm8gdGhhdCB3b3JrcyBpbiBib3RoIEhUTUwgYW5kIE1hdGhNTC5cblxuZGVmaW5lTWFjcm8oXCJcXFxcQmJia1wiLCBcIlxcXFxCYmJ7a31cIik7IC8vIFVuaWNvZGUgbWlkZGxlIGRvdFxuLy8gVGhlIEthVGVYIGZvbnRzIGRvIG5vdCBjb250YWluIFUrMDBCNy4gSW5zdGVhZCwgXFxjZG90cCBkaXNwbGF5c1xuLy8gdGhlIGRvdCBhdCBVKzIyQzUgYW5kIGdpdmVzIGl0IHB1bmN0IHNwYWNpbmcuXG5cbmRlZmluZU1hY3JvKFwiXFx4QjdcIiwgXCJcXFxcY2RvdHBcIik7IC8vIFxcbGxhcCBhbmQgXFxybGFwIHJlbmRlciB0aGVpciBjb250ZW50cyBpbiB0ZXh0IG1vZGVcblxuZGVmaW5lTWFjcm8oXCJcXFxcbGxhcFwiLCBcIlxcXFxtYXRobGxhcHtcXFxcdGV4dHJteyMxfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxybGFwXCIsIFwiXFxcXG1hdGhybGFwe1xcXFx0ZXh0cm17IzF9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNsYXBcIiwgXCJcXFxcbWF0aGNsYXB7XFxcXHRleHRybXsjMX19XCIpOyAvLyBcXG5vdCBpcyBkZWZpbmVkIGJ5IGJhc2UvZm9udG1hdGgubHR4IHZpYVxuLy8gXFxEZWNsYXJlTWF0aFN5bWJvbHtcXG5vdH17XFxtYXRocmVsfXtzeW1ib2xzfXtcIjM2fVxuLy8gSXQncyB0aHVzIHRyZWF0ZWQgbGlrZSBhIFxcbWF0aHJlbCwgYnV0IGRlZmluZWQgYnkgYSBzeW1ib2wgdGhhdCBoYXMgemVyb1xuLy8gd2lkdGggYnV0IGV4dGVuZHMgdG8gdGhlIHJpZ2h0LiAgV2UgdXNlIFxccmxhcCB0byBnZXQgdGhhdCBzcGFjaW5nLlxuLy8gRm9yIE1hdGhNTCB3ZSB3cml0ZSBVKzAzMzggaGVyZS4gYnVpbGRNYXRoTUwuanMgd2lsbCB0aGVuIGRvIHRoZSBvdmVybGF5LlxuXG5kZWZpbmVNYWNybyhcIlxcXFxub3RcIiwgJ1xcXFxodG1sQG1hdGhtbHtcXFxcbWF0aHJlbHtcXFxcbWF0aHJsYXBcXFxcQG5vdH19e1xcXFxjaGFyXCIzMzh9Jyk7IC8vIE5lZ2F0ZWQgc3ltYm9scyBmcm9tIGJhc2UvZm9udG1hdGgubHR4OlxuLy8gXFxkZWZcXG5lcXtcXG5vdD19IFxcbGV0XFxuZT1cXG5lcVxuLy8gXFxEZWNsYXJlUm9idXN0Q29tbWFuZFxuLy8gICBcXG5vdGlue1xcbWF0aHJlbHtcXG1AdGhcXG1hdGhwYWxldHRlXFxjQG5jZWxcXGlufX1cbi8vIFxcZGVmXFxjQG5jZWwjMSMye1xcbUB0aFxcb29hbGlnbnskXFxoZmlsIzFcXG1rZXJuMW11L1xcaGZpbCRcXGNyY3IkIzEjMiR9fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxuZXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXG1hdGhyZWx7XFxcXG5vdD19fXtcXFxcbWF0aHJlbHtcXFxcY2hhcmDiiaB9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5lXCIsIFwiXFxcXG5lcVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjI2MFwiLCBcIlxcXFxuZXFcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxub3RpblwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcbWF0aHJlbHt7XFxcXGlufVxcXFxtYXRobGxhcHsvXFxcXG1za2lwMW11fX19XCIgKyBcIntcXFxcbWF0aHJlbHtcXFxcY2hhcmDiiIl9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjIwOVwiLCBcIlxcXFxub3RpblwiKTsgLy8gVW5pY29kZSBzdGFja2VkIHJlbGF0aW9uc1xuXG5kZWZpbmVNYWNybyhcIlxcdTIyNThcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVsez1cXFxca2VybnstMWVtfVxcXFxyYWlzZWJveHswLjRlbX17JFxcXFxzY3JpcHRzaXplXFxcXGZyb3duJH19XCIgKyBcIn17XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjI1OH19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjU5XCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxzdGFja3JlbHtcXFxcdGlueVxcXFx3ZWRnZX17PX19e1xcXFxtYXRocmVse1xcXFxjaGFyYFxcdTIyNTh9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjI1QVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcc3RhY2tyZWx7XFxcXHRpbnlcXFxcdmVlfXs9fX17XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjI1QX19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjVCXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxzdGFja3JlbHtcXFxcc2NyaXB0c2l6ZVxcXFxzdGFyfXs9fX1cIiArIFwie1xcXFxtYXRocmVse1xcXFxjaGFyYFxcdTIyNUJ9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjI1RFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcc3RhY2tyZWx7XFxcXHRpbnlcXFxcbWF0aHJte2RlZn19ez19fVwiICsgXCJ7XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjI1RH19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjVFXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxzdGFja3JlbHtcXFxcdGlueVxcXFxtYXRocm17bX19ez19fVwiICsgXCJ7XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjI1RX19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjVGXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxzdGFja3JlbHtcXFxcdGlueT99ez19fXtcXFxcbWF0aHJlbHtcXFxcY2hhcmBcXHUyMjVGfX1cIik7IC8vIE1pc2MgVW5pY29kZVxuXG5kZWZpbmVNYWNybyhcIlxcdTI3QzJcIiwgXCJcXFxccGVycFwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjAzQ1wiLCBcIlxcXFxtYXRoY2xvc2V7IVxcXFxta2Vybi0wLjhtdSF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjBDXCIsIFwiXFxcXG5vdG5pXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMzFDXCIsIFwiXFxcXHVsY29ybmVyXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMzFEXCIsIFwiXFxcXHVyY29ybmVyXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMzFFXCIsIFwiXFxcXGxsY29ybmVyXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMzFGXCIsIFwiXFxcXGxyY29ybmVyXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHhBOVwiLCBcIlxcXFxjb3B5cmlnaHRcIik7XG5kZWZpbmVNYWNybyhcIlxceEFFXCIsIFwiXFxcXHRleHRyZWdpc3RlcmVkXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHVGRTBGXCIsIFwiXFxcXHRleHRyZWdpc3RlcmVkXCIpOyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBMYVRlWF8yzrVcbi8vIFxcdmRvdHN7XFx2Ym94e1xcYmFzZWxpbmVza2lwNFxccEAgIFxcbGluZXNraXBsaW1pdFxcekBcbi8vIFxca2VybjZcXHBAXFxoYm94ey59XFxoYm94ey59XFxoYm94ey59fX1cbi8vIFdlJ2xsIGNhbGwgXFx2YXJ2ZG90cywgd2hpY2ggZ2V0cyBhIGdseXBoIGZyb20gc3ltYm9scy5qcy5cbi8vIFRoZSB6ZXJvLXdpZHRoIHJ1bGUgZ2V0cyB1cyBhbiBlcXVpdmFsZW50IHRvIHRoZSB2ZXJ0aWNhbCA2cHQga2Vybi5cblxuZGVmaW5lTWFjcm8oXCJcXFxcdmRvdHNcIiwgXCJcXFxcbWF0aG9yZHtcXFxcdmFydmRvdHNcXFxccnVsZXswcHR9ezE1cHR9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjJFRVwiLCBcIlxcXFx2ZG90c1wiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gYW1zbWF0aC5zdHlcbi8vIGh0dHA6Ly9taXJyb3JzLmNvbmNlcnRwYXNzLmNvbS90ZXgtYXJjaGl2ZS9tYWNyb3MvbGF0ZXgvcmVxdWlyZWQvYW1zbWF0aC9hbXNtYXRoLnBkZlxuLy8gSXRhbGljIEdyZWVrIGNhcGl0YWwgbGV0dGVycy4gIEFNUyBkZWZpbmVzIHRoZXNlIHdpdGggXFxEZWNsYXJlTWF0aFN5bWJvbCxcbi8vIGJ1dCB0aGV5IGFyZSBlcXVpdmFsZW50IHRvIFxcbWF0aGl0e1xcTGV0dGVyfS5cblxuZGVmaW5lTWFjcm8oXCJcXFxcdmFyR2FtbWFcIiwgXCJcXFxcbWF0aGl0e1xcXFxHYW1tYX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJEZWx0YVwiLCBcIlxcXFxtYXRoaXR7XFxcXERlbHRhfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhclRoZXRhXCIsIFwiXFxcXG1hdGhpdHtcXFxcVGhldGF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyTGFtYmRhXCIsIFwiXFxcXG1hdGhpdHtcXFxcTGFtYmRhfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhclhpXCIsIFwiXFxcXG1hdGhpdHtcXFxcWGl9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyUGlcIiwgXCJcXFxcbWF0aGl0e1xcXFxQaX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJTaWdtYVwiLCBcIlxcXFxtYXRoaXR7XFxcXFNpZ21hfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhclVwc2lsb25cIiwgXCJcXFxcbWF0aGl0e1xcXFxVcHNpbG9ufVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhclBoaVwiLCBcIlxcXFxtYXRoaXR7XFxcXFBoaX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJQc2lcIiwgXCJcXFxcbWF0aGl0e1xcXFxQc2l9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyT21lZ2FcIiwgXCJcXFxcbWF0aGl0e1xcXFxPbWVnYX1cIik7IC8vXFxuZXdjb21tYW5ke1xcc3Vic3RhY2t9WzFde1xcc3ViYXJyYXl7Y30jMVxcZW5kc3ViYXJyYXl9XG5cbmRlZmluZU1hY3JvKFwiXFxcXHN1YnN0YWNrXCIsIFwiXFxcXGJlZ2lue3N1YmFycmF5fXtjfSMxXFxcXGVuZHtzdWJhcnJheX1cIik7IC8vIFxccmVuZXdjb21tYW5ke1xcY29sb259e1xcbm9icmVha1xcbXNraXAybXVcXG1hdGhwdW5jdHt9XFxub25zY3JpcHRcbi8vIFxcbWtlcm4tXFx0aGlubXVza2lwezp9XFxtc2tpcDZtdXBsdXMxbXVcXHJlbGF4fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxjb2xvblwiLCBcIlxcXFxub2JyZWFrXFxcXG1za2lwMm11XFxcXG1hdGhwdW5jdHt9XCIgKyBcIlxcXFxtYXRoY2hvaWNle1xcXFxta2Vybi0zbXV9e1xcXFxta2Vybi0zbXV9e317fXs6fVxcXFxtc2tpcDZtdVwiKTsgLy8gXFxuZXdjb21tYW5ke1xcYm94ZWR9WzFde1xcZmJveHtcXG1AdGgkXFxkaXNwbGF5c3R5bGUjMSR9fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxib3hlZFwiLCBcIlxcXFxmYm94eyRcXFxcZGlzcGxheXN0eWxleyMxfSR9XCIpOyAvLyBcXGRlZlxcaWZme1xcRE9UU0JcXDtcXExvbmdsZWZ0cmlnaHRhcnJvd1xcO31cbi8vIFxcZGVmXFxpbXBsaWVze1xcRE9UU0JcXDtcXExvbmdyaWdodGFycm93XFw7fVxuLy8gXFxkZWZcXGltcGxpZWRieXtcXERPVFNCXFw7XFxMb25nbGVmdGFycm93XFw7fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxpZmZcIiwgXCJcXFxcRE9UU0JcXFxcO1xcXFxMb25nbGVmdHJpZ2h0YXJyb3dcXFxcO1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGltcGxpZXNcIiwgXCJcXFxcRE9UU0JcXFxcO1xcXFxMb25ncmlnaHRhcnJvd1xcXFw7XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaW1wbGllZGJ5XCIsIFwiXFxcXERPVFNCXFxcXDtcXFxcTG9uZ2xlZnRhcnJvd1xcXFw7XCIpOyAvLyBBTVNNYXRoJ3MgYXV0b21hdGljIFxcZG90cywgYmFzZWQgb24gXFxtZG90c0BAIG1hY3JvLlxuXG52YXIgZG90c0J5VG9rZW4gPSB7XG4gICcsJzogJ1xcXFxkb3RzYycsXG4gICdcXFxcbm90JzogJ1xcXFxkb3RzYicsXG4gIC8vIFxca2V5YmluQCBjaGVja3MgZm9yIHRoZSBmb2xsb3dpbmc6XG4gICcrJzogJ1xcXFxkb3RzYicsXG4gICc9JzogJ1xcXFxkb3RzYicsXG4gICc8JzogJ1xcXFxkb3RzYicsXG4gICc+JzogJ1xcXFxkb3RzYicsXG4gICctJzogJ1xcXFxkb3RzYicsXG4gICcqJzogJ1xcXFxkb3RzYicsXG4gICc6JzogJ1xcXFxkb3RzYicsXG4gIC8vIFN5bWJvbHMgd2hvc2UgZGVmaW5pdGlvbiBzdGFydHMgd2l0aCBcXERPVFNCOlxuICAnXFxcXERPVFNCJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcY29wcm9kJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcYmlndmVlJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcYmlnd2VkZ2UnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWd1cGx1cyc6ICdcXFxcZG90c2InLFxuICAnXFxcXGJpZ2NhcCc6ICdcXFxcZG90c2InLFxuICAnXFxcXGJpZ2N1cCc6ICdcXFxcZG90c2InLFxuICAnXFxcXHByb2QnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxzdW0nOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWdvdGltZXMnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWdvcGx1cyc6ICdcXFxcZG90c2InLFxuICAnXFxcXGJpZ29kb3QnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWdzcWN1cCc6ICdcXFxcZG90c2InLFxuICAnXFxcXEFuZCc6ICdcXFxcZG90c2InLFxuICAnXFxcXGxvbmdyaWdodGFycm93JzogJ1xcXFxkb3RzYicsXG4gICdcXFxcTG9uZ3JpZ2h0YXJyb3cnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxsb25nbGVmdGFycm93JzogJ1xcXFxkb3RzYicsXG4gICdcXFxcTG9uZ2xlZnRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXGxvbmdsZWZ0cmlnaHRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXExvbmdsZWZ0cmlnaHRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXG1hcHN0byc6ICdcXFxcZG90c2InLFxuICAnXFxcXGxvbmdtYXBzdG8nOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxob29rcmlnaHRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXGRvdGVxJzogJ1xcXFxkb3RzYicsXG4gIC8vIFN5bWJvbHMgd2hvc2UgZGVmaW5pdGlvbiBzdGFydHMgd2l0aCBcXG1hdGhiaW46XG4gICdcXFxcbWF0aGJpbic6ICdcXFxcZG90c2InLFxuICAvLyBTeW1ib2xzIHdob3NlIGRlZmluaXRpb24gc3RhcnRzIHdpdGggXFxtYXRocmVsOlxuICAnXFxcXG1hdGhyZWwnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxyZWxiYXInOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxSZWxiYXInOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFx4cmlnaHRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXHhsZWZ0YXJyb3cnOiAnXFxcXGRvdHNiJyxcbiAgLy8gU3ltYm9scyB3aG9zZSBkZWZpbml0aW9uIHN0YXJ0cyB3aXRoIFxcRE9UU0k6XG4gICdcXFxcRE9UU0knOiAnXFxcXGRvdHNpJyxcbiAgJ1xcXFxpbnQnOiAnXFxcXGRvdHNpJyxcbiAgJ1xcXFxvaW50JzogJ1xcXFxkb3RzaScsXG4gICdcXFxcaWludCc6ICdcXFxcZG90c2knLFxuICAnXFxcXGlpaW50JzogJ1xcXFxkb3RzaScsXG4gICdcXFxcaWlpaW50JzogJ1xcXFxkb3RzaScsXG4gICdcXFxcaWRvdHNpbnQnOiAnXFxcXGRvdHNpJyxcbiAgLy8gU3ltYm9scyB3aG9zZSBkZWZpbml0aW9uIHN0YXJ0cyB3aXRoIFxcRE9UU1g6XG4gICdcXFxcRE9UU1gnOiAnXFxcXGRvdHN4J1xufTtcbmRlZmluZU1hY3JvKFwiXFxcXGRvdHNcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgLy8gVE9ETzogSWYgdXNlZCBpbiB0ZXh0IG1vZGUsIHNob3VsZCBleHBhbmQgdG8gXFx0ZXh0ZWxsaXBzaXMuXG4gIC8vIEhvd2V2ZXIsIGluIEthVGVYLCBcXHRleHRlbGxpcHNpcyBhbmQgXFxsZG90cyBiZWhhdmUgdGhlIHNhbWVcbiAgLy8gKGluIHRleHQgbW9kZSksIGFuZCBpdCdzIHVubGlrZWx5IHdlJ2Qgc2VlIGFueSBvZiB0aGUgbWF0aCBjb21tYW5kc1xuICAvLyB0aGF0IGFmZmVjdCB0aGUgYmVoYXZpb3Igb2YgXFxkb3RzIHdoZW4gaW4gdGV4dCBtb2RlLiAgU28gZmluZSBmb3Igbm93XG4gIC8vICh1bnRpbCB3ZSBzdXBwb3J0IFxcaWZtbW9kZSAuLi4gXFxlbHNlIC4uLiBcXGZpKS5cbiAgdmFyIHRoZWRvdHMgPSAnXFxcXGRvdHNvJztcbiAgdmFyIG5leHQgPSBjb250ZXh0LmV4cGFuZEFmdGVyRnV0dXJlKCkudGV4dDtcblxuICBpZiAobmV4dCBpbiBkb3RzQnlUb2tlbikge1xuICAgIHRoZWRvdHMgPSBkb3RzQnlUb2tlbltuZXh0XTtcbiAgfSBlbHNlIGlmIChuZXh0LnN1YnN0cigwLCA0KSA9PT0gJ1xcXFxub3QnKSB7XG4gICAgdGhlZG90cyA9ICdcXFxcZG90c2InO1xuICB9IGVsc2UgaWYgKG5leHQgaW4gc3JjX3N5bWJvbHMubWF0aCkge1xuICAgIGlmICh1dGlscy5jb250YWlucyhbJ2JpbicsICdyZWwnXSwgc3JjX3N5bWJvbHMubWF0aFtuZXh0XS5ncm91cCkpIHtcbiAgICAgIHRoZWRvdHMgPSAnXFxcXGRvdHNiJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhlZG90cztcbn0pO1xudmFyIHNwYWNlQWZ0ZXJEb3RzID0ge1xuICAvLyBcXHJpZ2h0ZGVsaW1AIGNoZWNrcyBmb3IgdGhlIGZvbGxvd2luZzpcbiAgJyknOiB0cnVlLFxuICAnXSc6IHRydWUsXG4gICdcXFxccmJyYWNrJzogdHJ1ZSxcbiAgJ1xcXFx9JzogdHJ1ZSxcbiAgJ1xcXFxyYnJhY2UnOiB0cnVlLFxuICAnXFxcXHJhbmdsZSc6IHRydWUsXG4gICdcXFxccmNlaWwnOiB0cnVlLFxuICAnXFxcXHJmbG9vcic6IHRydWUsXG4gICdcXFxccmdyb3VwJzogdHJ1ZSxcbiAgJ1xcXFxybW91c3RhY2hlJzogdHJ1ZSxcbiAgJ1xcXFxyaWdodCc6IHRydWUsXG4gICdcXFxcYmlncic6IHRydWUsXG4gICdcXFxcYmlnZ3InOiB0cnVlLFxuICAnXFxcXEJpZ3InOiB0cnVlLFxuICAnXFxcXEJpZ2dyJzogdHJ1ZSxcbiAgLy8gXFxleHRyYUAgYWxzbyB0ZXN0cyBmb3IgdGhlIGZvbGxvd2luZzpcbiAgJyQnOiB0cnVlLFxuICAvLyBcXGV4dHJhcEAgY2hlY2tzIGZvciB0aGUgZm9sbG93aW5nOlxuICAnOyc6IHRydWUsXG4gICcuJzogdHJ1ZSxcbiAgJywnOiB0cnVlXG59O1xuZGVmaW5lTWFjcm8oXCJcXFxcZG90c29cIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgdmFyIG5leHQgPSBjb250ZXh0LmZ1dHVyZSgpLnRleHQ7XG5cbiAgaWYgKG5leHQgaW4gc3BhY2VBZnRlckRvdHMpIHtcbiAgICByZXR1cm4gXCJcXFxcbGRvdHNcXFxcLFwiO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIlxcXFxsZG90c1wiO1xuICB9XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXGRvdHNjXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciBuZXh0ID0gY29udGV4dC5mdXR1cmUoKS50ZXh0OyAvLyBcXGRvdHNjIHVzZXMgXFxleHRyYUAgYnV0IG5vdCBcXGV4dHJhcEAsIGluc3RlYWQgc3BlY2lhbGx5IGNoZWNraW5nIGZvclxuICAvLyAnOycgYW5kICcuJywgYnV0IGRvZXNuJ3QgY2hlY2sgZm9yICcsJy5cblxuICBpZiAobmV4dCBpbiBzcGFjZUFmdGVyRG90cyAmJiBuZXh0ICE9PSAnLCcpIHtcbiAgICByZXR1cm4gXCJcXFxcbGRvdHNcXFxcLFwiO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIlxcXFxsZG90c1wiO1xuICB9XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXGNkb3RzXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciBuZXh0ID0gY29udGV4dC5mdXR1cmUoKS50ZXh0O1xuXG4gIGlmIChuZXh0IGluIHNwYWNlQWZ0ZXJEb3RzKSB7XG4gICAgcmV0dXJuIFwiXFxcXEBjZG90c1xcXFwsXCI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwiXFxcXEBjZG90c1wiO1xuICB9XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXGRvdHNiXCIsIFwiXFxcXGNkb3RzXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZG90c21cIiwgXCJcXFxcY2RvdHNcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxkb3RzaVwiLCBcIlxcXFwhXFxcXGNkb3RzXCIpOyAvLyBhbXNtYXRoIGRvZXNuJ3QgYWN0dWFsbHkgZGVmaW5lIFxcZG90c3gsIGJ1dCBcXGRvdHMgZm9sbG93ZWQgYnkgYSBtYWNyb1xuLy8gc3RhcnRpbmcgd2l0aCBcXERPVFNYIGltcGxpZXMgXFxkb3RzbywgYW5kIHRoZW4gXFxleHRyYUAgZGV0ZWN0cyB0aGlzIGNhc2Vcbi8vIGFuZCBmb3JjZXMgdGhlIGFkZGVkIGBcXCxgLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxkb3RzeFwiLCBcIlxcXFxsZG90c1xcXFwsXCIpOyAvLyBcXGxldFxcRE9UU0lcXHJlbGF4XG4vLyBcXGxldFxcRE9UU0JcXHJlbGF4XG4vLyBcXGxldFxcRE9UU1hcXHJlbGF4XG5cbmRlZmluZU1hY3JvKFwiXFxcXERPVFNJXCIsIFwiXFxcXHJlbGF4XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcRE9UU0JcIiwgXCJcXFxccmVsYXhcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxET1RTWFwiLCBcIlxcXFxyZWxheFwiKTsgLy8gU3BhY2luZywgYmFzZWQgb24gYW1zbWF0aC5zdHkncyBvdmVycmlkZSBvZiBMYVRlWCBkZWZhdWx0c1xuLy8gXFxEZWNsYXJlUm9idXN0Q29tbWFuZHtcXHRtc3BhY2V9WzNdeyVcbi8vICAgXFxpZm1tb2RlXFxtc2tpcCMxIzJcXGVsc2VcXGtlcm4jMSMzXFxmaVxccmVsYXh9XG5cbmRlZmluZU1hY3JvKFwiXFxcXHRtc3BhY2VcIiwgXCJcXFxcVGV4dE9yTWF0aHtcXFxca2VybiMxIzN9e1xcXFxtc2tpcCMxIzJ9XFxcXHJlbGF4XCIpOyAvLyBcXHJlbmV3Y29tbWFuZHtcXCx9e1xcdG1zcGFjZStcXHRoaW5tdXNraXB7LjE2NjdlbX19XG4vLyBUT0RPOiBtYXRoIG1vZGUgc2hvdWxkIHVzZSBcXHRoaW5tdXNraXBcblxuZGVmaW5lTWFjcm8oXCJcXFxcLFwiLCBcIlxcXFx0bXNwYWNlK3szbXV9ey4xNjY3ZW19XCIpOyAvLyBcXGxldFxcdGhpbnNwYWNlXFwsXG5cbmRlZmluZU1hY3JvKFwiXFxcXHRoaW5zcGFjZVwiLCBcIlxcXFwsXCIpOyAvLyBcXGRlZlxcPntcXG1za2lwXFxtZWRtdXNraXB9XG4vLyBcXHJlbmV3Y29tbWFuZHtcXDp9e1xcdG1zcGFjZStcXG1lZG11c2tpcHsuMjIyMmVtfX1cbi8vIFRPRE86IFxcPiBhbmQgbWF0aCBtb2RlIG9mIFxcOiBzaG91bGQgdXNlIFxcbWVkbXVza2lwID0gNG11IHBsdXMgMm11IG1pbnVzIDRtdVxuXG5kZWZpbmVNYWNybyhcIlxcXFw+XCIsIFwiXFxcXG1za2lwezRtdX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFw6XCIsIFwiXFxcXHRtc3BhY2UrezRtdX17LjIyMjJlbX1cIik7IC8vIFxcbGV0XFxtZWRzcGFjZVxcOlxuXG5kZWZpbmVNYWNybyhcIlxcXFxtZWRzcGFjZVwiLCBcIlxcXFw6XCIpOyAvLyBcXHJlbmV3Y29tbWFuZHtcXDt9e1xcdG1zcGFjZStcXHRoaWNrbXVza2lwey4yNzc3ZW19fVxuLy8gVE9ETzogbWF0aCBtb2RlIHNob3VsZCB1c2UgXFx0aGlja211c2tpcCA9IDVtdSBwbHVzIDVtdVxuXG5kZWZpbmVNYWNybyhcIlxcXFw7XCIsIFwiXFxcXHRtc3BhY2UrezVtdX17LjI3NzdlbX1cIik7IC8vIFxcbGV0XFx0aGlja3NwYWNlXFw7XG5cbmRlZmluZU1hY3JvKFwiXFxcXHRoaWNrc3BhY2VcIiwgXCJcXFxcO1wiKTsgLy8gXFxyZW5ld2NvbW1hbmR7XFwhfXtcXHRtc3BhY2UtXFx0aGlubXVza2lwey4xNjY3ZW19fVxuLy8gVE9ETzogbWF0aCBtb2RlIHNob3VsZCB1c2UgXFx0aGlubXVza2lwXG5cbmRlZmluZU1hY3JvKFwiXFxcXCFcIiwgXCJcXFxcdG1zcGFjZS17M211fXsuMTY2N2VtfVwiKTsgLy8gXFxsZXRcXG5lZ3RoaW5zcGFjZVxcIVxuXG5kZWZpbmVNYWNybyhcIlxcXFxuZWd0aGluc3BhY2VcIiwgXCJcXFxcIVwiKTsgLy8gXFxuZXdjb21tYW5ke1xcbmVnbWVkc3BhY2V9e1xcdG1zcGFjZS1cXG1lZG11c2tpcHsuMjIyMmVtfX1cbi8vIFRPRE86IG1hdGggbW9kZSBzaG91bGQgdXNlIFxcbWVkbXVza2lwXG5cbmRlZmluZU1hY3JvKFwiXFxcXG5lZ21lZHNwYWNlXCIsIFwiXFxcXHRtc3BhY2UtezRtdX17LjIyMjJlbX1cIik7IC8vIFxcbmV3Y29tbWFuZHtcXG5lZ3RoaWNrc3BhY2V9e1xcdG1zcGFjZS1cXHRoaWNrbXVza2lwey4yNzc3ZW19fVxuLy8gVE9ETzogbWF0aCBtb2RlIHNob3VsZCB1c2UgXFx0aGlja211c2tpcFxuXG5kZWZpbmVNYWNybyhcIlxcXFxuZWd0aGlja3NwYWNlXCIsIFwiXFxcXHRtc3BhY2UtezVtdX17LjI3N2VtfVwiKTsgLy8gXFxkZWZcXGVuc3BhY2V7XFxrZXJuLjVlbSB9XG5cbmRlZmluZU1hY3JvKFwiXFxcXGVuc3BhY2VcIiwgXCJcXFxca2Vybi41ZW0gXCIpOyAvLyBcXGRlZlxcZW5za2lwe1xcaHNraXAuNWVtXFxyZWxheH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcZW5za2lwXCIsIFwiXFxcXGhza2lwLjVlbVxcXFxyZWxheFwiKTsgLy8gXFxkZWZcXHF1YWR7XFxoc2tpcDFlbVxccmVsYXh9XG5cbmRlZmluZU1hY3JvKFwiXFxcXHF1YWRcIiwgXCJcXFxcaHNraXAxZW1cXFxccmVsYXhcIik7IC8vIFxcZGVmXFxxcXVhZHtcXGhza2lwMmVtXFxyZWxheH1cblxuZGVmaW5lTWFjcm8oXCJcXFxccXF1YWRcIiwgXCJcXFxcaHNraXAyZW1cXFxccmVsYXhcIik7IC8vIFxcdGFnQGluQGRpc3BsYXkgZm9ybSBvZiBcXHRhZ1xuXG5kZWZpbmVNYWNybyhcIlxcXFx0YWdcIiwgXCJcXFxcQGlmc3RhclxcXFx0YWdAbGl0ZXJhbFxcXFx0YWdAcGFyZW5cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx0YWdAcGFyZW5cIiwgXCJcXFxcdGFnQGxpdGVyYWx7KHsjMX0pfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHRhZ0BsaXRlcmFsXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIGlmIChjb250ZXh0Lm1hY3Jvcy5nZXQoXCJcXFxcZGZAdGFnXCIpKSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiTXVsdGlwbGUgXFxcXHRhZ1wiKTtcbiAgfVxuXG4gIHJldHVybiBcIlxcXFxnZGVmXFxcXGRmQHRhZ3tcXFxcdGV4dHsjMX19XCI7XG59KTsgLy8gXFxyZW5ld2NvbW1hbmR7XFxibW9kfXtcXG5vbnNjcmlwdFxcbXNraXAtXFxtZWRtdXNraXBcXG1rZXJuNW11XFxtYXRoYmluXG4vLyAgIHtcXG9wZXJhdG9yQGZvbnQgbW9kfVxccGVuYWx0eTkwMFxuLy8gICBcXG1rZXJuNW11XFxub25zY3JpcHRcXG1za2lwLVxcbWVkbXVza2lwfVxuLy8gXFxuZXdjb21tYW5ke1xccG9kfVsxXXtcXGFsbG93YnJlYWtcbi8vICAgXFxpZkBkaXNwbGF5XFxta2VybjE4bXVcXGVsc2VcXG1rZXJuOG11XFxmaSgjMSl9XG4vLyBcXHJlbmV3Y29tbWFuZHtcXHBtb2R9WzFde1xccG9ke3tcXG9wZXJhdG9yQGZvbnQgbW9kfVxcbWtlcm42bXUjMX19XG4vLyBcXG5ld2NvbW1hbmR7XFxtb2R9WzFde1xcYWxsb3dicmVha1xcaWZAZGlzcGxheVxcbWtlcm4xOG11XG4vLyAgIFxcZWxzZVxcbWtlcm4xMm11XFxmaXtcXG9wZXJhdG9yQGZvbnQgbW9kfVxcLFxcLCMxfVxuLy8gVE9ETzogbWF0aCBtb2RlIHNob3VsZCB1c2UgXFxtZWRtdXNraXAgPSA0bXUgcGx1cyAybXUgbWludXMgNG11XG5cbmRlZmluZU1hY3JvKFwiXFxcXGJtb2RcIiwgXCJcXFxcbWF0aGNob2ljZXtcXFxcbXNraXAxbXV9e1xcXFxtc2tpcDFtdX17XFxcXG1za2lwNW11fXtcXFxcbXNraXA1bXV9XCIgKyBcIlxcXFxtYXRoYmlue1xcXFxybSBtb2R9XCIgKyBcIlxcXFxtYXRoY2hvaWNle1xcXFxtc2tpcDFtdX17XFxcXG1za2lwMW11fXtcXFxcbXNraXA1bXV9e1xcXFxtc2tpcDVtdX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwb2RcIiwgXCJcXFxcYWxsb3dicmVha1wiICsgXCJcXFxcbWF0aGNob2ljZXtcXFxcbWtlcm4xOG11fXtcXFxcbWtlcm44bXV9e1xcXFxta2VybjhtdX17XFxcXG1rZXJuOG11fSgjMSlcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwbW9kXCIsIFwiXFxcXHBvZHt7XFxcXHJtIG1vZH1cXFxcbWtlcm42bXUjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtb2RcIiwgXCJcXFxcYWxsb3dicmVha1wiICsgXCJcXFxcbWF0aGNob2ljZXtcXFxcbWtlcm4xOG11fXtcXFxcbWtlcm4xMm11fXtcXFxcbWtlcm4xMm11fXtcXFxcbWtlcm4xMm11fVwiICsgXCJ7XFxcXHJtIG1vZH1cXFxcLFxcXFwsIzFcIik7IC8vIFxccG1iICAgIC0tICAgQSBzaW11bGF0aW9uIG9mIGJvbGQuXG4vLyBUaGUgdmVyc2lvbiBpbiBhbWJzeS5zdHkgd29ya3MgYnkgdHlwZXNldHRpbmcgdGhyZWUgY29waWVzIG9mIHRoZSBhcmd1bWVudFxuLy8gd2l0aCBzbWFsbCBvZmZzZXRzLiBXZSB1c2UgdHdvIGNvcGllcy4gV2Ugb21pdCB0aGUgdmVydGljYWwgb2Zmc2V0IGJlY2F1c2Vcbi8vIG9mIHJlbmRlcmluZyBwcm9ibGVtcyB0aGF0IG1ha2VWTGlzdCBlbmNvdW50ZXJzIGluIFNhZmFyaS5cblxuZGVmaW5lTWFjcm8oXCJcXFxccG1iXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcQGJpbnJlbHsjMX17XFxcXG1hdGhybGFweyMxfVxcXFxrZXJuMC41cHgjMX19XCIgKyBcIntcXFxcbWF0aGJmeyMxfX1cIik7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIExhVGVYIHNvdXJjZTJlXG4vLyBcXFxcIGRlZmF1bHRzIHRvIFxcbmV3bGluZSwgYnV0IGNoYW5nZXMgdG8gXFxjciB3aXRoaW4gYXJyYXkgZW52aXJvbm1lbnRcblxuZGVmaW5lTWFjcm8oXCJcXFxcXFxcXFwiLCBcIlxcXFxuZXdsaW5lXCIpOyAvLyBcXGRlZlxcVGVYe1RcXGtlcm4tLjE2NjdlbVxcbG93ZXIuNWV4XFxoYm94e0V9XFxrZXJuLS4xMjVlbVhcXEB9XG4vLyBUT0RPOiBEb2Vzbid0IG5vcm1hbGx5IHdvcmsgaW4gbWF0aCBtb2RlIGJlY2F1c2UgXFxAIGZhaWxzLiAgS2FUZVggZG9lc24ndFxuLy8gc3VwcG9ydCBcXEAgeWV0LCBzbyB0aGF0J3Mgb21pdHRlZCwgYW5kIHdlIGFkZCBcXHRleHQgc28gdGhhdCB0aGUgcmVzdWx0XG4vLyBkb2Vzbid0IGxvb2sgZnVubnkgaW4gbWF0aCBtb2RlLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxUZVhcIiwgXCJcXFxcdGV4dHJte1xcXFxodG1sQG1hdGhtbHtcIiArIFwiVFxcXFxrZXJuLS4xNjY3ZW1cXFxccmFpc2Vib3h7LS41ZXh9e0V9XFxcXGtlcm4tLjEyNWVtWFwiICsgXCJ9e1RlWH19XCIpOyAvLyBcXERlY2xhcmVSb2J1c3RDb21tYW5ke1xcTGFUZVh9e0xcXGtlcm4tLjM2ZW0lXG4vLyAgICAgICAgIHtcXHNib3hcXHpAIFQlXG4vLyAgICAgICAgICBcXHZib3ggdG9cXGh0XFx6QHtcXGhib3h7XFxjaGVja0BtYXRoZm9udHNcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcZm9udHNpemVcXHNmQHNpemVcXHpAXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG1hdGhAZm9udHNmYWxzZVxcc2VsZWN0Zm9udFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQX0lXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICBcXHZzc30lXG4vLyAgICAgICAgIH0lXG4vLyAgICAgICAgIFxca2Vybi0uMTVlbSVcbi8vICAgICAgICAgXFxUZVh9XG4vLyBUaGlzIGNvZGUgYWxpZ25zIHRoZSB0b3Agb2YgdGhlIEEgd2l0aCB0aGUgVCAoZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgVGVYJ3Ncbi8vIGJveGVzLCB0aG91Z2ggdmlzdWFsbHkgdGhlIEEgYXBwZWFycyB0byBleHRlbmQgYWJvdmUgc2xpZ2h0bHkpLlxuLy8gV2UgY29tcHV0ZSB0aGUgY29ycmVzcG9uZGluZyBcXHJhaXNlYm94IHdoZW4gQSBpcyByZW5kZXJlZCBpbiBcXG5vcm1hbHNpemVcbi8vIFxcc2NyaXB0c3R5bGUsIHdoaWNoIGhhcyBhIHNjYWxlIGZhY3RvciBvZiAwLjcgKHNlZSBPcHRpb25zLmpzKS5cblxudmFyIGxhdGV4UmFpc2VBID0gZm9udE1ldHJpY3NEYXRhWydNYWluLVJlZ3VsYXInXVtcIlRcIi5jaGFyQ29kZUF0KDApXVsxXSAtIDAuNyAqIGZvbnRNZXRyaWNzRGF0YVsnTWFpbi1SZWd1bGFyJ11bXCJBXCIuY2hhckNvZGVBdCgwKV1bMV0gKyBcImVtXCI7XG5kZWZpbmVNYWNybyhcIlxcXFxMYVRlWFwiLCBcIlxcXFx0ZXh0cm17XFxcXGh0bWxAbWF0aG1se1wiICsgKFwiTFxcXFxrZXJuLS4zNmVtXFxcXHJhaXNlYm94e1wiICsgbGF0ZXhSYWlzZUEgKyBcIn17XFxcXHNjcmlwdHN0eWxlIEF9XCIpICsgXCJcXFxca2Vybi0uMTVlbVxcXFxUZVh9e0xhVGVYfX1cIik7IC8vIE5ldyBLYVRlWCBsb2dvIGJhc2VkIG9uIHR3ZWFraW5nIExhVGVYIGxvZ29cblxuZGVmaW5lTWFjcm8oXCJcXFxcS2FUZVhcIiwgXCJcXFxcdGV4dHJte1xcXFxodG1sQG1hdGhtbHtcIiArIChcIktcXFxca2Vybi0uMTdlbVxcXFxyYWlzZWJveHtcIiArIGxhdGV4UmFpc2VBICsgXCJ9e1xcXFxzY3JpcHRzdHlsZSBBfVwiKSArIFwiXFxcXGtlcm4tLjE1ZW1cXFxcVGVYfXtLYVRlWH19XCIpOyAvLyBcXERlY2xhcmVSb2J1c3RDb21tYW5kXFxoc3BhY2V7XFxAaWZzdGFyXFxAaHNwYWNlclxcQGhzcGFjZX1cbi8vIFxcZGVmXFxAaHNwYWNlIzF7XFxoc2tpcCAgIzFcXHJlbGF4fVxuLy8gXFxkZWZcXEBoc3BhY2VyIzF7XFx2cnVsZSBcXEB3aWR0aFxcekBcXG5vYnJlYWtcbi8vICAgICAgICAgICAgICAgICBcXGhza2lwICMxXFxoc2tpcCBcXHpAc2tpcH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcaHNwYWNlXCIsIFwiXFxcXEBpZnN0YXJcXFxcQGhzcGFjZXJcXFxcQGhzcGFjZVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEBoc3BhY2VcIiwgXCJcXFxcaHNraXAgIzFcXFxccmVsYXhcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxAaHNwYWNlclwiLCBcIlxcXFxydWxlezBwdH17MHB0fVxcXFxoc2tpcCAjMVxcXFxyZWxheFwiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gbWF0aHRvb2xzLnN0eVxuLy9cXHByb3ZpZGVjb21tYW5kXFxvcmRpbmFyeWNvbG9uezp9XG5cbmRlZmluZU1hY3JvKFwiXFxcXG9yZGluYXJ5Y29sb25cIiwgXCI6XCIpOyAvL1xcZGVmXFx2Y2VudGNvbG9ue1xcbWF0aHJlbHtcXG1hdGhvcFxcb3JkaW5hcnljb2xvbn19XG4vL1RPRE8oZWRlbWFpbmUpOiBOb3QgeWV0IGNlbnRlcmVkLiBGaXggdmlhIFxccmFpc2Vib3ggb3IgIzcyNlxuXG5kZWZpbmVNYWNybyhcIlxcXFx2Y2VudGNvbG9uXCIsIFwiXFxcXG1hdGhyZWx7XFxcXG1hdGhvcFxcXFxvcmRpbmFyeWNvbG9ufVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGRibGNvbG9ue1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLS45bXV9XFx2Y2VudGNvbG9ufVxuXG5kZWZpbmVNYWNybyhcIlxcXFxkYmxjb2xvblwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXHZjZW50Y29sb25cXFxcbWF0aHJlbHtcXFxcbWtlcm4tLjltdX1cXFxcdmNlbnRjb2xvbn19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjIyMzd9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGNvbG9uZXFxe1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fT19XG5cbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uZXFxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHtcXFxcdmNlbnRjb2xvblxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX09fX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjI1NH19XCIpOyAvLyDiiZRcbi8vIFxccHJvdmlkZWNvbW1hbmQqXFxDb2xvbmVxcXtcXGRibGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9PX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcQ29sb25lcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFxkYmxjb2xvblxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX09fX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjIzN1xcXFxjaGFyXFxcIjNkfX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxjb2xvbmVxe1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcbWF0aHJlbHstfX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25lcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXHZjZW50Y29sb25cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXG1hdGhyZWx7LX19fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIzYVxcXFxjaGFyXFxcIjIyMTJ9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXENvbG9uZXF7XFxkYmxjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcbWF0aHJlbHstfX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcQ29sb25lcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXGRibGNvbG9uXFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxtYXRocmVsey19fX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjIzN1xcXFxjaGFyXFxcIjIyMTJ9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGVxcWNvbG9uez1cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXHZjZW50Y29sb259XG5cbmRlZmluZU1hY3JvKFwiXFxcXGVxcWNvbG9uXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHs9XFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFx2Y2VudGNvbG9ufX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjI1NX19XCIpOyAvLyDiiZVcbi8vIFxccHJvdmlkZWNvbW1hbmQqXFxFcXFjb2xvbns9XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxkYmxjb2xvbn1cblxuZGVmaW5lTWFjcm8oXCJcXFxcRXFxY29sb25cIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVsez1cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXGRibGNvbG9ufX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiM2RcXFxcY2hhclxcXCIyMjM3fX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxlcWNvbG9ue1xcbWF0aHJlbHstfVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcdmNlbnRjb2xvbn1cblxuZGVmaW5lTWFjcm8oXCJcXFxcZXFjb2xvblwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXG1hdGhyZWx7LX1cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXHZjZW50Y29sb259fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMjM5fX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxFcWNvbG9ue1xcbWF0aHJlbHstfVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcZGJsY29sb259XG5cbmRlZmluZU1hY3JvKFwiXFxcXEVxY29sb25cIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFxtYXRocmVsey19XFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxkYmxjb2xvbn19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjIyMTJcXFxcY2hhclxcXCIyMjM3fX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxjb2xvbmFwcHJveHtcXHZjZW50Y29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXGFwcHJveH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25hcHByb3hcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFx2Y2VudGNvbG9uXFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxhcHByb3h9fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIzYVxcXFxjaGFyXFxcIjIyNDh9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXENvbG9uYXBwcm94e1xcZGJsY29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXGFwcHJveH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcQ29sb25hcHByb3hcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFxkYmxjb2xvblxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcYXBwcm94fX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjIzN1xcXFxjaGFyXFxcIjIyNDh9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGNvbG9uc2lte1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcc2ltfVxuXG5kZWZpbmVNYWNybyhcIlxcXFxjb2xvbnNpbVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXHZjZW50Y29sb25cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXHNpbX19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjNhXFxcXGNoYXJcXFwiMjIzY319XCIpOyAvLyBcXHByb3ZpZGVjb21tYW5kKlxcQ29sb25zaW17XFxkYmxjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcc2ltfVxuXG5kZWZpbmVNYWNybyhcIlxcXFxDb2xvbnNpbVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXGRibGNvbG9uXFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxzaW19fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMjM3XFxcXGNoYXJcXFwiMjIzY319XCIpOyAvLyBTb21lIFVuaWNvZGUgY2hhcmFjdGVycyBhcmUgaW1wbGVtZW50ZWQgd2l0aCBtYWNyb3MgdG8gbWF0aHRvb2xzIGZ1bmN0aW9ucy5cblxuZGVmaW5lTWFjcm8oXCJcXHUyMjM3XCIsIFwiXFxcXGRibGNvbG9uXCIpOyAvLyA6OlxuXG5kZWZpbmVNYWNybyhcIlxcdTIyMzlcIiwgXCJcXFxcZXFjb2xvblwiKTsgLy8gLTpcblxuZGVmaW5lTWFjcm8oXCJcXHUyMjU0XCIsIFwiXFxcXGNvbG9uZXFxXCIpOyAvLyA6PVxuXG5kZWZpbmVNYWNybyhcIlxcdTIyNTVcIiwgXCJcXFxcZXFxY29sb25cIik7IC8vID06XG5cbmRlZmluZU1hY3JvKFwiXFx1MkE3NFwiLCBcIlxcXFxDb2xvbmVxcVwiKTsgLy8gOjo9XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBjb2xvbmVxdWFscy5zdHlcbi8vIEFsdGVybmF0ZSBuYW1lcyBmb3IgbWF0aHRvb2xzJ3MgbWFjcm9zOlxuXG5kZWZpbmVNYWNybyhcIlxcXFxyYXRpb1wiLCBcIlxcXFx2Y2VudGNvbG9uXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25jb2xvblwiLCBcIlxcXFxkYmxjb2xvblwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uZXF1YWxzXCIsIFwiXFxcXGNvbG9uZXFxXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25jb2xvbmVxdWFsc1wiLCBcIlxcXFxDb2xvbmVxcVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGVxdWFsc2NvbG9uXCIsIFwiXFxcXGVxcWNvbG9uXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZXF1YWxzY29sb25jb2xvblwiLCBcIlxcXFxFcXFjb2xvblwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9ubWludXNcIiwgXCJcXFxcY29sb25lcVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uY29sb25taW51c1wiLCBcIlxcXFxDb2xvbmVxXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWludXNjb2xvblwiLCBcIlxcXFxlcWNvbG9uXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWludXNjb2xvbmNvbG9uXCIsIFwiXFxcXEVxY29sb25cIik7IC8vIFxcY29sb25hcHByb3ggbmFtZSBpcyBzYW1lIGluIG1hdGh0b29scyBhbmQgY29sb25lcXVhbHMuXG5cbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uY29sb25hcHByb3hcIiwgXCJcXFxcQ29sb25hcHByb3hcIik7IC8vIFxcY29sb25zaW0gbmFtZSBpcyBzYW1lIGluIG1hdGh0b29scyBhbmQgY29sb25lcXVhbHMuXG5cbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uY29sb25zaW1cIiwgXCJcXFxcQ29sb25zaW1cIik7IC8vIEFkZGl0aW9uYWwgbWFjcm9zLCBpbXBsZW1lbnRlZCBieSBhbmFsb2d5IHdpdGggbWF0aHRvb2xzIGRlZmluaXRpb25zOlxuXG5kZWZpbmVNYWNybyhcIlxcXFxzaW1jb2xvblwiLCBcIlxcXFxtYXRocmVse1xcXFxzaW1cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXHZjZW50Y29sb259XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcc2ltY29sb25jb2xvblwiLCBcIlxcXFxtYXRocmVse1xcXFxzaW1cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXGRibGNvbG9ufVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGFwcHJveGNvbG9uXCIsIFwiXFxcXG1hdGhyZWx7XFxcXGFwcHJveFxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcdmNlbnRjb2xvbn1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxhcHByb3hjb2xvbmNvbG9uXCIsIFwiXFxcXG1hdGhyZWx7XFxcXGFwcHJveFxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcZGJsY29sb259XCIpOyAvLyBQcmVzZW50IGluIG5ld3R4bWF0aCwgcHhmb250cyBhbmQgdHhmb250c1xuXG5kZWZpbmVNYWNybyhcIlxcXFxub3RuaVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcbm90XFxcXG5pfXtcXFxcbWF0aHJlbHtcXFxcY2hhcmBcXHUyMjBDfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsaW1zdXBcIiwgXCJcXFxcRE9UU0JcXFxcb3BlcmF0b3JuYW1lKntsaW1cXFxcLHN1cH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsaW1pbmZcIiwgXCJcXFxcRE9UU0JcXFxcb3BlcmF0b3JuYW1lKntsaW1cXFxcLGluZn1cIik7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIE1hdGhNTCBhbHRlcm5hdGVzIGZvciBLYVRlWCBnbHlwaHMgaW4gdGhlIFVuaWNvZGUgcHJpdmF0ZSBhcmVhXG5cbmRlZmluZU1hY3JvKFwiXFxcXGd2ZXJ0bmVxcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQGd2ZXJ0bmVxcX17XFx1MjI2OX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsdmVydG5lcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBsdmVydG5lcXF9e1xcdTIyNjh9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbmdlcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBuZ2VxcX17XFx1MjI3MX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxuZ2Vxc2xhbnRcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBuZ2Vxc2xhbnR9e1xcdTIyNzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbmxlcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBubGVxcX17XFx1MjI3MH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxubGVxc2xhbnRcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBubGVxc2xhbnR9e1xcdTIyNzB9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbnNob3J0bWlkXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAbnNob3J0bWlkfXviiKR9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbnNob3J0cGFyYWxsZWxcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBuc2hvcnRwYXJhbGxlbH174oimfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5zdWJzZXRlcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBuc3Vic2V0ZXFxfXtcXHUyMjg4fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5zdXBzZXRlcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBuc3Vwc2V0ZXFxfXtcXHUyMjg5fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhcnN1YnNldG5lcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQHZhcnN1YnNldG5lcX174oqKfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhcnN1YnNldG5lcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEB2YXJzdWJzZXRuZXFxfXviq4t9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyc3Vwc2V0bmVxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAdmFyc3Vwc2V0bmVxfXviiot9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyc3Vwc2V0bmVxcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQHZhcnN1cHNldG5lcXF9e+KrjH1cIik7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIHN0bWFyeXJkIGFuZCBzZW1hbnRpY1xuLy8gVGhlIHN0bWFyeXJkIGFuZCBzZW1hbnRpYyBwYWNrYWdlcyByZW5kZXIgdGhlIG5leHQgZm91ciBpdGVtcyBieSBjYWxsaW5nIGFcbi8vIGdseXBoLiBUaG9zZSBnbHlwaHMgZG8gbm90IGV4aXN0IGluIHRoZSBLYVRlWCBmb250cy4gSGVuY2UgdGhlIG1hY3Jvcy5cblxuZGVmaW5lTWFjcm8oXCJcXFxcbGxicmFja2V0XCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aG9wZW57W1xcXFxta2Vybi0zLjJtdVt9fVwiICsgXCJ7XFxcXG1hdGhvcGVue1xcXFxjaGFyYFxcdTI3RTZ9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJyYnJhY2tldFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhjbG9zZXtdXFxcXG1rZXJuLTMuMm11XX19XCIgKyBcIntcXFxcbWF0aGNsb3Nle1xcXFxjaGFyYFxcdTI3RTd9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjdFNlwiLCBcIlxcXFxsbGJyYWNrZXRcIik7IC8vIGJsYWNrYm9hcmQgYm9sZCBbXG5cbmRlZmluZU1hY3JvKFwiXFx1MjdFN1wiLCBcIlxcXFxycmJyYWNrZXRcIik7IC8vIGJsYWNrYm9hcmQgYm9sZCBdXG5cbmRlZmluZU1hY3JvKFwiXFxcXGxCcmFjZVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhvcGVue1xcXFx7XFxcXG1rZXJuLTMuMm11W319XCIgKyBcIntcXFxcbWF0aG9wZW57XFxcXGNoYXJgXFx1Mjk4M319XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcckJyYWNlXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aGNsb3Nle11cXFxcbWtlcm4tMy4ybXVcXFxcfX19XCIgKyBcIntcXFxcbWF0aGNsb3Nle1xcXFxjaGFyYFxcdTI5ODR9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1Mjk4M1wiLCBcIlxcXFxsQnJhY2VcIik7IC8vIGJsYWNrYm9hcmQgYm9sZCB7XG5cbmRlZmluZU1hY3JvKFwiXFx1Mjk4NFwiLCBcIlxcXFxyQnJhY2VcIik7IC8vIGJsYWNrYm9hcmQgYm9sZCB9XG4vLyBUT0RPOiBDcmVhdGUgdmFyaWFibGUgc2l6ZWQgdmVyc2lvbnMgb2YgdGhlIGxhc3QgdHdvIGl0ZW1zLiBJIGJlbGlldmUgdGhhdFxuLy8gd2lsbCByZXF1aXJlIG5ldyBmb250IGdseXBocy5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIHRleHZjLnN0eVxuLy8gVGhlIHRleHZjIHBhY2thZ2UgY29udGFpbnMgbWFjcm9zIGF2YWlsYWJsZSBpbiBtZWRpYXdpa2kgcGFnZXMuXG4vLyBXZSBvbWl0IHRoZSBmdW5jdGlvbnMgZGVwcmVjYXRlZCBhdFxuLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSGVscDpEaXNwbGF5aW5nX2FfZm9ybXVsYSNEZXByZWNhdGVkX3N5bnRheFxuLy8gV2UgYWxzbyBvbWl0IHRleHZjJ3MgXFxPLCB3aGljaCBjb25mbGljdHMgd2l0aCBcXHRleHR7XFxPfVxuXG5kZWZpbmVNYWNybyhcIlxcXFxkYXJyXCIsIFwiXFxcXGRvd25hcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGRBcnJcIiwgXCJcXFxcRG93bmFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcRGFyclwiLCBcIlxcXFxEb3duYXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsYW5nXCIsIFwiXFxcXGxhbmdsZVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJhbmdcIiwgXCJcXFxccmFuZ2xlXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdWFyclwiLCBcIlxcXFx1cGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdUFyclwiLCBcIlxcXFxVcGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcVWFyclwiLCBcIlxcXFxVcGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcTlwiLCBcIlxcXFxtYXRoYmJ7Tn1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxSXCIsIFwiXFxcXG1hdGhiYntSfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXFpcIiwgXCJcXFxcbWF0aGJie1p9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYWxlZlwiLCBcIlxcXFxhbGVwaFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGFsZWZzeW1cIiwgXCJcXFxcYWxlcGhcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxBbHBoYVwiLCBcIlxcXFxtYXRocm17QX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxCZXRhXCIsIFwiXFxcXG1hdGhybXtCfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGJ1bGxcIiwgXCJcXFxcYnVsbGV0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcQ2hpXCIsIFwiXFxcXG1hdGhybXtYfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNsdWJzXCIsIFwiXFxcXGNsdWJzdWl0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY251bXNcIiwgXCJcXFxcbWF0aGJie0N9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcQ29tcGxleFwiLCBcIlxcXFxtYXRoYmJ7Q31cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxEYWdnZXJcIiwgXCJcXFxcZGRhZ2dlclwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGRpYW1vbmRzXCIsIFwiXFxcXGRpYW1vbmRzdWl0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZW1wdHlcIiwgXCJcXFxcZW1wdHlzZXRcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxFcHNpbG9uXCIsIFwiXFxcXG1hdGhybXtFfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEV0YVwiLCBcIlxcXFxtYXRocm17SH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxleGlzdFwiLCBcIlxcXFxleGlzdHNcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxoYXJyXCIsIFwiXFxcXGxlZnRyaWdodGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaEFyclwiLCBcIlxcXFxMZWZ0cmlnaHRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEhhcnJcIiwgXCJcXFxcTGVmdHJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxoZWFydHNcIiwgXCJcXFxcaGVhcnRzdWl0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaW1hZ2VcIiwgXCJcXFxcSW1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxpbmZpblwiLCBcIlxcXFxpbmZ0eVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXElvdGFcIiwgXCJcXFxcbWF0aHJte0l9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaXNpblwiLCBcIlxcXFxpblwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEthcHBhXCIsIFwiXFxcXG1hdGhybXtLfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGxhcnJcIiwgXCJcXFxcbGVmdGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbEFyclwiLCBcIlxcXFxMZWZ0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxMYXJyXCIsIFwiXFxcXExlZnRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGxyYXJyXCIsIFwiXFxcXGxlZnRyaWdodGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbHJBcnJcIiwgXCJcXFxcTGVmdHJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxMcmFyclwiLCBcIlxcXFxMZWZ0cmlnaHRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXE11XCIsIFwiXFxcXG1hdGhybXtNfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5hdG51bXNcIiwgXCJcXFxcbWF0aGJie059XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcTnVcIiwgXCJcXFxcbWF0aHJte059XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcT21pY3JvblwiLCBcIlxcXFxtYXRocm17T31cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwbHVzbW5cIiwgXCJcXFxccG1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyYXJyXCIsIFwiXFxcXHJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyQXJyXCIsIFwiXFxcXFJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxSYXJyXCIsIFwiXFxcXFJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyZWFsXCIsIFwiXFxcXFJlXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVhbHNcIiwgXCJcXFxcbWF0aGJie1J9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcUmVhbHNcIiwgXCJcXFxcbWF0aGJie1J9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcUmhvXCIsIFwiXFxcXG1hdGhybXtQfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHNkb3RcIiwgXCJcXFxcY2RvdFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHNlY3RcIiwgXCJcXFxcU1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHNwYWRlc1wiLCBcIlxcXFxzcGFkZXN1aXRcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxzdWJcIiwgXCJcXFxcc3Vic2V0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcc3ViZVwiLCBcIlxcXFxzdWJzZXRlcVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHN1cGVcIiwgXCJcXFxcc3Vwc2V0ZXFcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxUYXVcIiwgXCJcXFxcbWF0aHJte1R9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGhldGFzeW1cIiwgXCJcXFxcdmFydGhldGFcIik7IC8vIFRPRE86IGRlZmluZU1hY3JvKFwiXFxcXHZhcmNvcHBhXCIsIFwiXFxcXFxcbWJveHtcXFxcY29wcGF9XCIpO1xuXG5kZWZpbmVNYWNybyhcIlxcXFx3ZWllcnBcIiwgXCJcXFxcd3BcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxaZXRhXCIsIFwiXFxcXG1hdGhybXtafVwiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gc3RhdG1hdGguc3R5XG4vLyBodHRwczovL2N0YW4ubWF0aC5pbGxpbm9pcy5lZHUvbWFjcm9zL2xhdGV4L2NvbnRyaWIvc3RhdG1hdGgvc3RhdG1hdGgucGRmXG5cbmRlZmluZU1hY3JvKFwiXFxcXGFyZ21pblwiLCBcIlxcXFxET1RTQlxcXFxvcGVyYXRvcm5hbWUqe2FyZ1xcXFwsbWlufVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGFyZ21heFwiLCBcIlxcXFxET1RTQlxcXFxvcGVyYXRvcm5hbWUqe2FyZ1xcXFwsbWF4fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHBsaW1cIiwgXCJcXFxcRE9UU0JcXFxcbWF0aG9we1xcXFxvcGVyYXRvcm5hbWV7cGxpbX19XFxcXGxpbWl0c1wiKTsgLy8gQ3VzdG9tIEtoYW4gQWNhZGVteSBjb2xvcnMsIHNob3VsZCBiZSBtb3ZlZCB0byBhbiBvcHRpb25hbCBwYWNrYWdlXG5cbmRlZmluZU1hY3JvKFwiXFxcXGJsdWVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjNjQ5NWVkfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxvcmFuZ2VcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZmZhNTAwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwaW5rXCIsIFwiXFxcXHRleHRjb2xvcnsjI2ZmMDBhZn17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVkXCIsIFwiXFxcXHRleHRjb2xvcnsjI2RmMDAzMH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JlZW5cIiwgXCJcXFxcdGV4dGNvbG9yeyMjMjhhZTdifXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5XCIsIFwiXFxcXHRleHRjb2xvcntncmF5fXsjIzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccHVycGxlXCIsIFwiXFxcXHRleHRjb2xvcnsjIzlkMzhiZH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYmx1ZUFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjY2NmYWZmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxibHVlQlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM4MGY2ZmZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGJsdWVDXCIsIFwiXFxcXHRleHRjb2xvcnsjIzYzZDllYX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYmx1ZURcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMTFhY2NkfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxibHVlRVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyMwYzdmOTl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHRlYWxBXCIsIFwiXFxcXHRleHRjb2xvcnsjIzk0ZmZmNX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGVhbEJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMjZlZGQ1fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx0ZWFsQ1wiLCBcIlxcXFx0ZXh0Y29sb3J7IyMwMWQxYzF9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHRlYWxEXCIsIFwiXFxcXHRleHRjb2xvcnsjIzAxYTk5NX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGVhbEVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMjA4MTcwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjYjZmZmIwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjOGFmMjgxfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkNcIiwgXCJcXFxcdGV4dGNvbG9yeyMjNzRjZjcwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkRcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMWZhYjU0fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMGQ5MjNmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxnb2xkQVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmZmQwYTl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdvbGRCXCIsIFwiXFxcXHRleHRjb2xvcnsjI2ZmYmI3MX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ29sZENcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZmY5YzM5fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxnb2xkRFwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNlMDdkMTB9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdvbGRFXCIsIFwiXFxcXHRleHRjb2xvcnsjI2E3NWEwNX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVkQVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmY2E5YTl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJlZEJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZmY4NDgyfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyZWRDXCIsIFwiXFxcXHRleHRjb2xvcnsjI2Y5Njg1ZH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVkRFwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNlODRkMzl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJlZEVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjYmMyNjEyfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtYXJvb25BXCIsIFwiXFxcXHRleHRjb2xvcnsjI2ZmYmRlMH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWFyb29uQlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmZjkyYzZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG1hcm9vbkNcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZWQ1ZmE2fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtYXJvb25EXCIsIFwiXFxcXHRleHRjb2xvcnsjI2NhMzM3Y317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWFyb29uRVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM5ZTAzNGV9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHB1cnBsZUFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZGRkN2ZmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwdXJwbGVCXCIsIFwiXFxcXHRleHRjb2xvcnsjI2M2YjlmY317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccHVycGxlQ1wiLCBcIlxcXFx0ZXh0Y29sb3J7IyNhYTg3ZmZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHB1cnBsZURcIiwgXCJcXFxcdGV4dGNvbG9yeyMjNzg1NGFifXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwdXJwbGVFXCIsIFwiXFxcXHRleHRjb2xvcnsjIzU0M2I3OH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWludEFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZjVmOWU4fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtaW50QlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNlZGYyZGZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG1pbnRDXCIsIFwiXFxcXHRleHRjb2xvcnsjI2UwZTVjY317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheUFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZjZmN2Y3fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5QlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmMGYxZjJ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlDXCIsIFwiXFxcXHRleHRjb2xvcnsjI2UzZTVlNn17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheURcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZDZkOGRhfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5RVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNiYWJlYzJ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlGXCIsIFwiXFxcXHRleHRjb2xvcnsjIzg4OGQ5M317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheUdcIiwgXCJcXFxcdGV4dGNvbG9yeyMjNjI2NTY5fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5SFwiLCBcIlxcXFx0ZXh0Y29sb3J7IyMzYjNlNDB9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlJXCIsIFwiXFxcXHRleHRjb2xvcnsjIzIxMjQyY317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxca2FCbHVlXCIsIFwiXFxcXHRleHRjb2xvcnsjIzMxNDQ1M317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxca2FHcmVlblwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM3MUIzMDd9eyMxfVwiKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL01hY3JvRXhwYW5kZXIuanNcbi8qKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSDigJxndWxsZXTigJ0gd2hlcmUgbWFjcm9zIGFyZSBleHBhbmRlZFxuICogdW50aWwgb25seSBub24tbWFjcm8gdG9rZW5zIHJlbWFpbi5cbiAqL1xuXG5cblxuXG5cblxuXG4vLyBMaXN0IG9mIGNvbW1hbmRzIHRoYXQgYWN0IGxpa2UgbWFjcm9zIGJ1dCBhcmVuJ3QgZGVmaW5lZCBhcyBhIG1hY3JvLFxuLy8gZnVuY3Rpb24sIG9yIHN5bWJvbC4gIFVzZWQgaW4gYGlzRGVmaW5lZGAuXG52YXIgaW1wbGljaXRDb21tYW5kcyA9IHtcbiAgXCJcXFxccmVsYXhcIjogdHJ1ZSxcbiAgLy8gTWFjcm9FeHBhbmRlci5qc1xuICBcIl5cIjogdHJ1ZSxcbiAgLy8gUGFyc2VyLmpzXG4gIFwiX1wiOiB0cnVlLFxuICAvLyBQYXJzZXIuanNcbiAgXCJcXFxcbGltaXRzXCI6IHRydWUsXG4gIC8vIFBhcnNlci5qc1xuICBcIlxcXFxub2xpbWl0c1wiOiB0cnVlIC8vIFBhcnNlci5qc1xuXG59O1xuXG52YXIgTWFjcm9FeHBhbmRlcl9NYWNyb0V4cGFuZGVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTWFjcm9FeHBhbmRlcihpbnB1dCwgc2V0dGluZ3MsIG1vZGUpIHtcbiAgICB0aGlzLnNldHRpbmdzID0gdm9pZCAwO1xuICAgIHRoaXMuZXhwYW5zaW9uQ291bnQgPSB2b2lkIDA7XG4gICAgdGhpcy5sZXhlciA9IHZvaWQgMDtcbiAgICB0aGlzLm1hY3JvcyA9IHZvaWQgMDtcbiAgICB0aGlzLnN0YWNrID0gdm9pZCAwO1xuICAgIHRoaXMubW9kZSA9IHZvaWQgMDtcbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgdGhpcy5leHBhbnNpb25Db3VudCA9IDA7XG4gICAgdGhpcy5mZWVkKGlucHV0KTsgLy8gTWFrZSBuZXcgZ2xvYmFsIG5hbWVzcGFjZVxuXG4gICAgdGhpcy5tYWNyb3MgPSBuZXcgTmFtZXNwYWNlX05hbWVzcGFjZShtYWNyb3MsIHNldHRpbmdzLm1hY3Jvcyk7XG4gICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgICB0aGlzLnN0YWNrID0gW107IC8vIGNvbnRhaW5zIHRva2VucyBpbiBSRVZFUlNFIG9yZGVyXG4gIH1cbiAgLyoqXG4gICAqIEZlZWQgYSBuZXcgaW5wdXQgc3RyaW5nIHRvIHRoZSBzYW1lIE1hY3JvRXhwYW5kZXJcbiAgICogKHdpdGggZXhpc3RpbmcgbWFjcm9zIGV0Yy4pLlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBNYWNyb0V4cGFuZGVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZmVlZCA9IGZ1bmN0aW9uIGZlZWQoaW5wdXQpIHtcbiAgICB0aGlzLmxleGVyID0gbmV3IExleGVyX0xleGVyKGlucHV0LCB0aGlzLnNldHRpbmdzKTtcbiAgfVxuICAvKipcbiAgICogU3dpdGNoZXMgYmV0d2VlbiBcInRleHRcIiBhbmQgXCJtYXRoXCIgbW9kZXMuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnN3aXRjaE1vZGUgPSBmdW5jdGlvbiBzd2l0Y2hNb2RlKG5ld01vZGUpIHtcbiAgICB0aGlzLm1vZGUgPSBuZXdNb2RlO1xuICB9XG4gIC8qKlxuICAgKiBTdGFydCBhIG5ldyBncm91cCBuZXN0aW5nIHdpdGhpbiBhbGwgbmFtZXNwYWNlcy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uYmVnaW5Hcm91cCA9IGZ1bmN0aW9uIGJlZ2luR3JvdXAoKSB7XG4gICAgdGhpcy5tYWNyb3MuYmVnaW5Hcm91cCgpO1xuICB9XG4gIC8qKlxuICAgKiBFbmQgY3VycmVudCBncm91cCBuZXN0aW5nIHdpdGhpbiBhbGwgbmFtZXNwYWNlcy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZW5kR3JvdXAgPSBmdW5jdGlvbiBlbmRHcm91cCgpIHtcbiAgICB0aGlzLm1hY3Jvcy5lbmRHcm91cCgpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0b3Btb3N0IHRva2VuIG9uIHRoZSBzdGFjaywgd2l0aG91dCBleHBhbmRpbmcgaXQuXG4gICAqIFNpbWlsYXIgaW4gYmVoYXZpb3IgdG8gVGVYJ3MgYFxcZnV0dXJlbGV0YC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZnV0dXJlID0gZnVuY3Rpb24gZnV0dXJlKCkge1xuICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5wdXNoVG9rZW4odGhpcy5sZXhlci5sZXgoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTtcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlIGFuZCByZXR1cm4gdGhlIG5leHQgdW5leHBhbmRlZCB0b2tlbi5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ucG9wVG9rZW4gPSBmdW5jdGlvbiBwb3BUb2tlbigpIHtcbiAgICB0aGlzLmZ1dHVyZSgpOyAvLyBlbnN1cmUgbm9uLWVtcHR5IHN0YWNrXG5cbiAgICByZXR1cm4gdGhpcy5zdGFjay5wb3AoKTtcbiAgfVxuICAvKipcbiAgICogQWRkIGEgZ2l2ZW4gdG9rZW4gdG8gdGhlIHRva2VuIHN0YWNrLiAgSW4gcGFydGljdWxhciwgdGhpcyBnZXQgYmUgdXNlZFxuICAgKiB0byBwdXQgYmFjayBhIHRva2VuIHJldHVybmVkIGZyb20gb25lIG9mIHRoZSBvdGhlciBtZXRob2RzLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5wdXNoVG9rZW4gPSBmdW5jdGlvbiBwdXNoVG9rZW4odG9rZW4pIHtcbiAgICB0aGlzLnN0YWNrLnB1c2godG9rZW4pO1xuICB9XG4gIC8qKlxuICAgKiBBcHBlbmQgYW4gYXJyYXkgb2YgdG9rZW5zIHRvIHRoZSB0b2tlbiBzdGFjay5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ucHVzaFRva2VucyA9IGZ1bmN0aW9uIHB1c2hUb2tlbnModG9rZW5zKSB7XG4gICAgdmFyIF90aGlzJHN0YWNrO1xuXG4gICAgKF90aGlzJHN0YWNrID0gdGhpcy5zdGFjaykucHVzaC5hcHBseShfdGhpcyRzdGFjaywgdG9rZW5zKTtcbiAgfVxuICAvKipcbiAgICogQ29uc3VtZSBhbGwgZm9sbG93aW5nIHNwYWNlIHRva2Vucywgd2l0aG91dCBleHBhbnNpb24uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmNvbnN1bWVTcGFjZXMgPSBmdW5jdGlvbiBjb25zdW1lU3BhY2VzKCkge1xuICAgIGZvciAoOzspIHtcbiAgICAgIHZhciB0b2tlbiA9IHRoaXMuZnV0dXJlKCk7XG5cbiAgICAgIGlmICh0b2tlbi50ZXh0ID09PSBcIiBcIikge1xuICAgICAgICB0aGlzLnN0YWNrLnBvcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDb25zdW1lIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGFyZ3VtZW50cyBmcm9tIHRoZSB0b2tlbiBzdHJlYW0sXG4gICAqIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBhcnJheSBvZiBhcmd1bWVudHMuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmNvbnN1bWVBcmdzID0gZnVuY3Rpb24gY29uc3VtZUFyZ3MobnVtQXJncykge1xuICAgIHZhciBhcmdzID0gW107IC8vIG9idGFpbiBhcmd1bWVudHMsIGVpdGhlciBzaW5nbGUgdG9rZW4gb3IgYmFsYW5jZWQge+KApn0gZ3JvdXBcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtQXJnczsgKytpKSB7XG4gICAgICB0aGlzLmNvbnN1bWVTcGFjZXMoKTsgLy8gaWdub3JlIHNwYWNlcyBiZWZvcmUgZWFjaCBhcmd1bWVudFxuXG4gICAgICB2YXIgc3RhcnRPZkFyZyA9IHRoaXMucG9wVG9rZW4oKTtcblxuICAgICAgaWYgKHN0YXJ0T2ZBcmcudGV4dCA9PT0gXCJ7XCIpIHtcbiAgICAgICAgdmFyIGFyZyA9IFtdO1xuICAgICAgICB2YXIgZGVwdGggPSAxO1xuXG4gICAgICAgIHdoaWxlIChkZXB0aCAhPT0gMCkge1xuICAgICAgICAgIHZhciB0b2sgPSB0aGlzLnBvcFRva2VuKCk7XG4gICAgICAgICAgYXJnLnB1c2godG9rKTtcblxuICAgICAgICAgIGlmICh0b2sudGV4dCA9PT0gXCJ7XCIpIHtcbiAgICAgICAgICAgICsrZGVwdGg7XG4gICAgICAgICAgfSBlbHNlIGlmICh0b2sudGV4dCA9PT0gXCJ9XCIpIHtcbiAgICAgICAgICAgIC0tZGVwdGg7XG4gICAgICAgICAgfSBlbHNlIGlmICh0b2sudGV4dCA9PT0gXCJFT0ZcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiRW5kIG9mIGlucHV0IGluIG1hY3JvIGFyZ3VtZW50XCIsIHN0YXJ0T2ZBcmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGFyZy5wb3AoKTsgLy8gcmVtb3ZlIGxhc3QgfVxuXG4gICAgICAgIGFyZy5yZXZlcnNlKCk7IC8vIGxpa2UgYWJvdmUsIHRvIGZpdCBpbiB3aXRoIHN0YWNrIG9yZGVyXG5cbiAgICAgICAgYXJnc1tpXSA9IGFyZztcbiAgICAgIH0gZWxzZSBpZiAoc3RhcnRPZkFyZy50ZXh0ID09PSBcIkVPRlwiKSB7XG4gICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkVuZCBvZiBpbnB1dCBleHBlY3RpbmcgbWFjcm8gYXJndW1lbnRcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcmdzW2ldID0gW3N0YXJ0T2ZBcmddO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhcmdzO1xuICB9XG4gIC8qKlxuICAgKiBFeHBhbmQgdGhlIG5leHQgdG9rZW4gb25seSBvbmNlIGlmIHBvc3NpYmxlLlxuICAgKlxuICAgKiBJZiB0aGUgdG9rZW4gaXMgZXhwYW5kZWQsIHRoZSByZXN1bHRpbmcgdG9rZW5zIHdpbGwgYmUgcHVzaGVkIG9udG9cbiAgICogdGhlIHN0YWNrIGluIHJldmVyc2Ugb3JkZXIgYW5kIHdpbGwgYmUgcmV0dXJuZWQgYXMgYW4gYXJyYXksXG4gICAqIGFsc28gaW4gcmV2ZXJzZSBvcmRlci5cbiAgICpcbiAgICogSWYgbm90LCB0aGUgbmV4dCB0b2tlbiB3aWxsIGJlIHJldHVybmVkIHdpdGhvdXQgcmVtb3ZpbmcgaXRcbiAgICogZnJvbSB0aGUgc3RhY2suICBUaGlzIGNhc2UgY2FuIGJlIGRldGVjdGVkIGJ5IGEgYFRva2VuYCByZXR1cm4gdmFsdWVcbiAgICogaW5zdGVhZCBvZiBhbiBgQXJyYXlgIHJldHVybiB2YWx1ZS5cbiAgICpcbiAgICogSW4gZWl0aGVyIGNhc2UsIHRoZSBuZXh0IHRva2VuIHdpbGwgYmUgb24gdGhlIHRvcCBvZiB0aGUgc3RhY2ssXG4gICAqIG9yIHRoZSBzdGFjayB3aWxsIGJlIGVtcHR5LlxuICAgKlxuICAgKiBVc2VkIHRvIGltcGxlbWVudCBgZXhwYW5kQWZ0ZXJGdXR1cmVgIGFuZCBgZXhwYW5kTmV4dFRva2VuYC5cbiAgICpcbiAgICogQXQgdGhlIG1vbWVudCwgbWFjcm8gZXhwYW5zaW9uIGRvZXNuJ3QgaGFuZGxlIGRlbGltaXRlZCBtYWNyb3MsXG4gICAqIGkuZS4gdGhpbmdzIGxpa2UgdGhvc2UgZGVmaW5lZCBieSBcXGRlZlxcZm9vIzFcXGVuZHvigKZ9LlxuICAgKiBTZWUgdGhlIFRlWCBib29rIHBhZ2UgMjAyZmYuIGZvciBkZXRhaWxzIG9uIGhvdyB0aG9zZSBzaG91bGQgYmVoYXZlLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5leHBhbmRPbmNlID0gZnVuY3Rpb24gZXhwYW5kT25jZSgpIHtcbiAgICB2YXIgdG9wVG9rZW4gPSB0aGlzLnBvcFRva2VuKCk7XG4gICAgdmFyIG5hbWUgPSB0b3BUb2tlbi50ZXh0O1xuXG4gICAgdmFyIGV4cGFuc2lvbiA9IHRoaXMuX2dldEV4cGFuc2lvbihuYW1lKTtcblxuICAgIGlmIChleHBhbnNpb24gPT0gbnVsbCkge1xuICAgICAgLy8gbWFpbmx5IGNoZWNraW5nIGZvciB1bmRlZmluZWQgaGVyZVxuICAgICAgLy8gRnVsbHkgZXhwYW5kZWRcbiAgICAgIHRoaXMucHVzaFRva2VuKHRvcFRva2VuKTtcbiAgICAgIHJldHVybiB0b3BUb2tlbjtcbiAgICB9XG5cbiAgICB0aGlzLmV4cGFuc2lvbkNvdW50Kys7XG5cbiAgICBpZiAodGhpcy5leHBhbnNpb25Db3VudCA+IHRoaXMuc2V0dGluZ3MubWF4RXhwYW5kKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJUb28gbWFueSBleHBhbnNpb25zOiBpbmZpbml0ZSBsb29wIG9yIFwiICsgXCJuZWVkIHRvIGluY3JlYXNlIG1heEV4cGFuZCBzZXR0aW5nXCIpO1xuICAgIH1cblxuICAgIHZhciB0b2tlbnMgPSBleHBhbnNpb24udG9rZW5zO1xuXG4gICAgaWYgKGV4cGFuc2lvbi5udW1BcmdzKSB7XG4gICAgICB2YXIgYXJncyA9IHRoaXMuY29uc3VtZUFyZ3MoZXhwYW5zaW9uLm51bUFyZ3MpOyAvLyBwYXN0ZSBhcmd1bWVudHMgaW4gcGxhY2Ugb2YgdGhlIHBsYWNlaG9sZGVyc1xuXG4gICAgICB0b2tlbnMgPSB0b2tlbnMuc2xpY2UoKTsgLy8gbWFrZSBhIHNoYWxsb3cgY29weVxuXG4gICAgICBmb3IgKHZhciBpID0gdG9rZW5zLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciB0b2sgPSB0b2tlbnNbaV07XG5cbiAgICAgICAgaWYgKHRvay50ZXh0ID09PSBcIiNcIikge1xuICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJJbmNvbXBsZXRlIHBsYWNlaG9sZGVyIGF0IGVuZCBvZiBtYWNybyBib2R5XCIsIHRvayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdG9rID0gdG9rZW5zWy0taV07IC8vIG5leHQgdG9rZW4gb24gc3RhY2tcblxuICAgICAgICAgIGlmICh0b2sudGV4dCA9PT0gXCIjXCIpIHtcbiAgICAgICAgICAgIC8vICMjIOKGkiAjXG4gICAgICAgICAgICB0b2tlbnMuc3BsaWNlKGkgKyAxLCAxKTsgLy8gZHJvcCBmaXJzdCAjXG4gICAgICAgICAgfSBlbHNlIGlmICgvXlsxLTldJC8udGVzdCh0b2sudGV4dCkpIHtcbiAgICAgICAgICAgIHZhciBfdG9rZW5zO1xuXG4gICAgICAgICAgICAvLyByZXBsYWNlIHRoZSBwbGFjZWhvbGRlciB3aXRoIHRoZSBpbmRpY2F0ZWQgYXJndW1lbnRcbiAgICAgICAgICAgIChfdG9rZW5zID0gdG9rZW5zKS5zcGxpY2UuYXBwbHkoX3Rva2VucywgW2ksIDJdLmNvbmNhdChhcmdzWyt0b2sudGV4dCAtIDFdKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIk5vdCBhIHZhbGlkIGFyZ3VtZW50IG51bWJlclwiLCB0b2spO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gQ29uY2F0ZW5hdGUgZXhwYW5zaW9uIG9udG8gdG9wIG9mIHN0YWNrLlxuXG5cbiAgICB0aGlzLnB1c2hUb2tlbnModG9rZW5zKTtcbiAgICByZXR1cm4gdG9rZW5zO1xuICB9XG4gIC8qKlxuICAgKiBFeHBhbmQgdGhlIG5leHQgdG9rZW4gb25seSBvbmNlIChpZiBwb3NzaWJsZSksIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZ1xuICAgKiB0b3AgdG9rZW4gb24gdGhlIHN0YWNrICh3aXRob3V0IHJlbW92aW5nIGFueXRoaW5nIGZyb20gdGhlIHN0YWNrKS5cbiAgICogU2ltaWxhciBpbiBiZWhhdmlvciB0byBUZVgncyBgXFxleHBhbmRhZnRlclxcZnV0dXJlbGV0YC5cbiAgICogRXF1aXZhbGVudCB0byBleHBhbmRPbmNlKCkgZm9sbG93ZWQgYnkgZnV0dXJlKCkuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmV4cGFuZEFmdGVyRnV0dXJlID0gZnVuY3Rpb24gZXhwYW5kQWZ0ZXJGdXR1cmUoKSB7XG4gICAgdGhpcy5leHBhbmRPbmNlKCk7XG4gICAgcmV0dXJuIHRoaXMuZnV0dXJlKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGV4cGFuZCBmaXJzdCB0b2tlbiwgdGhlbiByZXR1cm4gZmlyc3Qgbm9uLWV4cGFuZGFibGUgdG9rZW4uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmV4cGFuZE5leHRUb2tlbiA9IGZ1bmN0aW9uIGV4cGFuZE5leHRUb2tlbigpIHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICB2YXIgZXhwYW5kZWQgPSB0aGlzLmV4cGFuZE9uY2UoKTsgLy8gZXhwYW5kT25jZSByZXR1cm5zIFRva2VuIGlmIGFuZCBvbmx5IGlmIGl0J3MgZnVsbHkgZXhwYW5kZWQuXG5cbiAgICAgIGlmIChleHBhbmRlZCBpbnN0YW5jZW9mIFRva2VuX1Rva2VuKSB7XG4gICAgICAgIC8vIFxccmVsYXggc3RvcHMgdGhlIGV4cGFuc2lvbiwgYnV0IHNob3VsZG4ndCBnZXQgcmV0dXJuZWQgKGFcbiAgICAgICAgLy8gbnVsbCByZXR1cm4gdmFsdWUgY291bGRuJ3QgZ2V0IGltcGxlbWVudGVkIGFzIGEgZnVuY3Rpb24pLlxuICAgICAgICBpZiAoZXhwYW5kZWQudGV4dCA9PT0gXCJcXFxccmVsYXhcIikge1xuICAgICAgICAgIHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3RhY2sucG9wKCk7IC8vID09PSBleHBhbmRlZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBGbG93IHVuYWJsZSB0byBmaWd1cmUgb3V0IHRoYXQgdGhpcyBwYXRod2F5IGlzIGltcG9zc2libGUuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzQ4MDhcblxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5yZWFjaGFibGVcbiAgfVxuICAvKipcbiAgICogRnVsbHkgZXhwYW5kIHRoZSBnaXZlbiBtYWNybyBuYW1lIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBsaXN0IG9mXG4gICAqIHRva2Vucywgb3IgcmV0dXJuIGB1bmRlZmluZWRgIGlmIG5vIHN1Y2ggbWFjcm8gaXMgZGVmaW5lZC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZXhwYW5kTWFjcm8gPSBmdW5jdGlvbiBleHBhbmRNYWNybyhuYW1lKSB7XG4gICAgaWYgKCF0aGlzLm1hY3Jvcy5nZXQobmFtZSkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IFtdO1xuICAgIHZhciBvbGRTdGFja0xlbmd0aCA9IHRoaXMuc3RhY2subGVuZ3RoO1xuICAgIHRoaXMucHVzaFRva2VuKG5ldyBUb2tlbl9Ub2tlbihuYW1lKSk7XG5cbiAgICB3aGlsZSAodGhpcy5zdGFjay5sZW5ndGggPiBvbGRTdGFja0xlbmd0aCkge1xuICAgICAgdmFyIGV4cGFuZGVkID0gdGhpcy5leHBhbmRPbmNlKCk7IC8vIGV4cGFuZE9uY2UgcmV0dXJucyBUb2tlbiBpZiBhbmQgb25seSBpZiBpdCdzIGZ1bGx5IGV4cGFuZGVkLlxuXG4gICAgICBpZiAoZXhwYW5kZWQgaW5zdGFuY2VvZiBUb2tlbl9Ub2tlbikge1xuICAgICAgICBvdXRwdXQucHVzaCh0aGlzLnN0YWNrLnBvcCgpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG4gIC8qKlxuICAgKiBGdWxseSBleHBhbmQgdGhlIGdpdmVuIG1hY3JvIG5hbWUgYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIGEgc3RyaW5nLFxuICAgKiBvciByZXR1cm4gYHVuZGVmaW5lZGAgaWYgbm8gc3VjaCBtYWNybyBpcyBkZWZpbmVkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5leHBhbmRNYWNyb0FzVGV4dCA9IGZ1bmN0aW9uIGV4cGFuZE1hY3JvQXNUZXh0KG5hbWUpIHtcbiAgICB2YXIgdG9rZW5zID0gdGhpcy5leHBhbmRNYWNybyhuYW1lKTtcblxuICAgIGlmICh0b2tlbnMpIHtcbiAgICAgIHJldHVybiB0b2tlbnMubWFwKGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICByZXR1cm4gdG9rZW4udGV4dDtcbiAgICAgIH0pLmpvaW4oXCJcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0b2tlbnM7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBleHBhbmRlZCBtYWNybyBhcyBhIHJldmVyc2VkIGFycmF5IG9mIHRva2VucyBhbmQgYSBtYWNyb1xuICAgKiBhcmd1bWVudCBjb3VudC4gIE9yIHJldHVybnMgYG51bGxgIGlmIG5vIHN1Y2ggbWFjcm8uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLl9nZXRFeHBhbnNpb24gPSBmdW5jdGlvbiBfZ2V0RXhwYW5zaW9uKG5hbWUpIHtcbiAgICB2YXIgZGVmaW5pdGlvbiA9IHRoaXMubWFjcm9zLmdldChuYW1lKTtcblxuICAgIGlmIChkZWZpbml0aW9uID09IG51bGwpIHtcbiAgICAgIC8vIG1haW5seSBjaGVja2luZyBmb3IgdW5kZWZpbmVkIGhlcmVcbiAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgIH1cblxuICAgIHZhciBleHBhbnNpb24gPSB0eXBlb2YgZGVmaW5pdGlvbiA9PT0gXCJmdW5jdGlvblwiID8gZGVmaW5pdGlvbih0aGlzKSA6IGRlZmluaXRpb247XG5cbiAgICBpZiAodHlwZW9mIGV4cGFuc2lvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdmFyIG51bUFyZ3MgPSAwO1xuXG4gICAgICBpZiAoZXhwYW5zaW9uLmluZGV4T2YoXCIjXCIpICE9PSAtMSkge1xuICAgICAgICB2YXIgc3RyaXBwZWQgPSBleHBhbnNpb24ucmVwbGFjZSgvIyMvZywgXCJcIik7XG5cbiAgICAgICAgd2hpbGUgKHN0cmlwcGVkLmluZGV4T2YoXCIjXCIgKyAobnVtQXJncyArIDEpKSAhPT0gLTEpIHtcbiAgICAgICAgICArK251bUFyZ3M7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGJvZHlMZXhlciA9IG5ldyBMZXhlcl9MZXhlcihleHBhbnNpb24sIHRoaXMuc2V0dGluZ3MpO1xuICAgICAgdmFyIHRva2VucyA9IFtdO1xuICAgICAgdmFyIHRvayA9IGJvZHlMZXhlci5sZXgoKTtcblxuICAgICAgd2hpbGUgKHRvay50ZXh0ICE9PSBcIkVPRlwiKSB7XG4gICAgICAgIHRva2Vucy5wdXNoKHRvayk7XG4gICAgICAgIHRvayA9IGJvZHlMZXhlci5sZXgoKTtcbiAgICAgIH1cblxuICAgICAgdG9rZW5zLnJldmVyc2UoKTsgLy8gdG8gZml0IGluIHdpdGggc3RhY2sgdXNpbmcgcHVzaCBhbmQgcG9wXG5cbiAgICAgIHZhciBleHBhbmRlZCA9IHtcbiAgICAgICAgdG9rZW5zOiB0b2tlbnMsXG4gICAgICAgIG51bUFyZ3M6IG51bUFyZ3NcbiAgICAgIH07XG4gICAgICByZXR1cm4gZXhwYW5kZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cGFuc2lvbjtcbiAgfVxuICAvKipcbiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgYSBjb21tYW5kIGlzIGN1cnJlbnRseSBcImRlZmluZWRcIiAoaGFzIHNvbWVcbiAgICogZnVuY3Rpb25hbGl0eSksIG1lYW5pbmcgdGhhdCBpdCdzIGEgbWFjcm8gKGluIHRoZSBjdXJyZW50IGdyb3VwKSxcbiAgICogYSBmdW5jdGlvbiwgYSBzeW1ib2wsIG9yIG9uZSBvZiB0aGUgc3BlY2lhbCBjb21tYW5kcyBsaXN0ZWQgaW5cbiAgICogYGltcGxpY2l0Q29tbWFuZHNgLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5pc0RlZmluZWQgPSBmdW5jdGlvbiBpc0RlZmluZWQobmFtZSkge1xuICAgIHJldHVybiB0aGlzLm1hY3Jvcy5oYXMobmFtZSkgfHwgc3JjX2Z1bmN0aW9ucy5oYXNPd25Qcm9wZXJ0eShuYW1lKSB8fCBzcmNfc3ltYm9scy5tYXRoLmhhc093blByb3BlcnR5KG5hbWUpIHx8IHNyY19zeW1ib2xzLnRleHQuaGFzT3duUHJvcGVydHkobmFtZSkgfHwgaW1wbGljaXRDb21tYW5kcy5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcbiAgfTtcblxuICByZXR1cm4gTWFjcm9FeHBhbmRlcjtcbn0oKTtcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy91bmljb2RlQWNjZW50cy5qc1xuLy8gTWFwcGluZyBvZiBVbmljb2RlIGFjY2VudCBjaGFyYWN0ZXJzIHRvIHRoZWlyIExhVGVYIGVxdWl2YWxlbnQgaW4gdGV4dCBhbmRcbi8vIG1hdGggbW9kZSAod2hlbiB0aGV5IGV4aXN0KS5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHVuaWNvZGVBY2NlbnRzID0gKHtcbiAgXCJcXHUwMzAxXCI6IHtcbiAgICB0ZXh0OiBcIlxcXFwnXCIsXG4gICAgbWF0aDogJ1xcXFxhY3V0ZSdcbiAgfSxcbiAgXCJcXHUwMzAwXCI6IHtcbiAgICB0ZXh0OiAnXFxcXGAnLFxuICAgIG1hdGg6ICdcXFxcZ3JhdmUnXG4gIH0sXG4gIFwiXFx1MDMwOFwiOiB7XG4gICAgdGV4dDogJ1xcXFxcIicsXG4gICAgbWF0aDogJ1xcXFxkZG90J1xuICB9LFxuICBcIlxcdTAzMDNcIjoge1xuICAgIHRleHQ6ICdcXFxcficsXG4gICAgbWF0aDogJ1xcXFx0aWxkZSdcbiAgfSxcbiAgXCJcXHUwMzA0XCI6IHtcbiAgICB0ZXh0OiAnXFxcXD0nLFxuICAgIG1hdGg6ICdcXFxcYmFyJ1xuICB9LFxuICBcIlxcdTAzMDZcIjoge1xuICAgIHRleHQ6IFwiXFxcXHVcIixcbiAgICBtYXRoOiAnXFxcXGJyZXZlJ1xuICB9LFxuICBcIlxcdTAzMENcIjoge1xuICAgIHRleHQ6ICdcXFxcdicsXG4gICAgbWF0aDogJ1xcXFxjaGVjaydcbiAgfSxcbiAgXCJcXHUwMzAyXCI6IHtcbiAgICB0ZXh0OiAnXFxcXF4nLFxuICAgIG1hdGg6ICdcXFxcaGF0J1xuICB9LFxuICBcIlxcdTAzMDdcIjoge1xuICAgIHRleHQ6ICdcXFxcLicsXG4gICAgbWF0aDogJ1xcXFxkb3QnXG4gIH0sXG4gIFwiXFx1MDMwQVwiOiB7XG4gICAgdGV4dDogJ1xcXFxyJyxcbiAgICBtYXRoOiAnXFxcXG1hdGhyaW5nJ1xuICB9LFxuICBcIlxcdTAzMEJcIjoge1xuICAgIHRleHQ6ICdcXFxcSCdcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy91bmljb2RlU3ltYm9scy5qc1xuLy8gVGhpcyBmaWxlIGlzIEdFTkVSQVRFRCBieSB1bmljb2RlTWFrZS5qcy4gRE8gTk9UIE1PRElGWS5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHVuaWNvZGVTeW1ib2xzID0gKHtcbiAgXCJcXHhFMVwiOiBcImFcXHUwMzAxXCIsXG4gIC8vIMOhID0gXFwne2F9XG4gIFwiXFx4RTBcIjogXCJhXFx1MDMwMFwiLFxuICAvLyDDoCA9IFxcYHthfVxuICBcIlxceEU0XCI6IFwiYVxcdTAzMDhcIixcbiAgLy8gw6QgPSBcXFwie2F9XG4gIFwiXFx1MDFERlwiOiBcImFcXHUwMzA4XFx1MDMwNFwiLFxuICAvLyDHnyA9IFxcXCJcXD17YX1cbiAgXCJcXHhFM1wiOiBcImFcXHUwMzAzXCIsXG4gIC8vIMOjID0gXFx+e2F9XG4gIFwiXFx1MDEwMVwiOiBcImFcXHUwMzA0XCIsXG4gIC8vIMSBID0gXFw9e2F9XG4gIFwiXFx1MDEwM1wiOiBcImFcXHUwMzA2XCIsXG4gIC8vIMSDID0gXFx1e2F9XG4gIFwiXFx1MUVBRlwiOiBcImFcXHUwMzA2XFx1MDMwMVwiLFxuICAvLyDhuq8gPSBcXHVcXCd7YX1cbiAgXCJcXHUxRUIxXCI6IFwiYVxcdTAzMDZcXHUwMzAwXCIsXG4gIC8vIOG6sSA9IFxcdVxcYHthfVxuICBcIlxcdTFFQjVcIjogXCJhXFx1MDMwNlxcdTAzMDNcIixcbiAgLy8g4bq1ID0gXFx1XFx+e2F9XG4gIFwiXFx1MDFDRVwiOiBcImFcXHUwMzBDXCIsXG4gIC8vIMeOID0gXFx2e2F9XG4gIFwiXFx4RTJcIjogXCJhXFx1MDMwMlwiLFxuICAvLyDDoiA9IFxcXnthfVxuICBcIlxcdTFFQTVcIjogXCJhXFx1MDMwMlxcdTAzMDFcIixcbiAgLy8g4bqlID0gXFxeXFwne2F9XG4gIFwiXFx1MUVBN1wiOiBcImFcXHUwMzAyXFx1MDMwMFwiLFxuICAvLyDhuqcgPSBcXF5cXGB7YX1cbiAgXCJcXHUxRUFCXCI6IFwiYVxcdTAzMDJcXHUwMzAzXCIsXG4gIC8vIOG6qyA9IFxcXlxcfnthfVxuICBcIlxcdTAyMjdcIjogXCJhXFx1MDMwN1wiLFxuICAvLyDIpyA9IFxcLnthfVxuICBcIlxcdTAxRTFcIjogXCJhXFx1MDMwN1xcdTAzMDRcIixcbiAgLy8gx6EgPSBcXC5cXD17YX1cbiAgXCJcXHhFNVwiOiBcImFcXHUwMzBBXCIsXG4gIC8vIMOlID0gXFxye2F9XG4gIFwiXFx1MDFGQlwiOiBcImFcXHUwMzBBXFx1MDMwMVwiLFxuICAvLyDHuyA9IFxcclxcJ3thfVxuICBcIlxcdTFFMDNcIjogXCJiXFx1MDMwN1wiLFxuICAvLyDhuIMgPSBcXC57Yn1cbiAgXCJcXHUwMTA3XCI6IFwiY1xcdTAzMDFcIixcbiAgLy8gxIcgPSBcXCd7Y31cbiAgXCJcXHUwMTBEXCI6IFwiY1xcdTAzMENcIixcbiAgLy8gxI0gPSBcXHZ7Y31cbiAgXCJcXHUwMTA5XCI6IFwiY1xcdTAzMDJcIixcbiAgLy8gxIkgPSBcXF57Y31cbiAgXCJcXHUwMTBCXCI6IFwiY1xcdTAzMDdcIixcbiAgLy8gxIsgPSBcXC57Y31cbiAgXCJcXHUwMTBGXCI6IFwiZFxcdTAzMENcIixcbiAgLy8gxI8gPSBcXHZ7ZH1cbiAgXCJcXHUxRTBCXCI6IFwiZFxcdTAzMDdcIixcbiAgLy8g4biLID0gXFwue2R9XG4gIFwiXFx4RTlcIjogXCJlXFx1MDMwMVwiLFxuICAvLyDDqSA9IFxcJ3tlfVxuICBcIlxceEU4XCI6IFwiZVxcdTAzMDBcIixcbiAgLy8gw6ggPSBcXGB7ZX1cbiAgXCJcXHhFQlwiOiBcImVcXHUwMzA4XCIsXG4gIC8vIMOrID0gXFxcIntlfVxuICBcIlxcdTFFQkRcIjogXCJlXFx1MDMwM1wiLFxuICAvLyDhur0gPSBcXH57ZX1cbiAgXCJcXHUwMTEzXCI6IFwiZVxcdTAzMDRcIixcbiAgLy8gxJMgPSBcXD17ZX1cbiAgXCJcXHUxRTE3XCI6IFwiZVxcdTAzMDRcXHUwMzAxXCIsXG4gIC8vIOG4lyA9IFxcPVxcJ3tlfVxuICBcIlxcdTFFMTVcIjogXCJlXFx1MDMwNFxcdTAzMDBcIixcbiAgLy8g4biVID0gXFw9XFxge2V9XG4gIFwiXFx1MDExNVwiOiBcImVcXHUwMzA2XCIsXG4gIC8vIMSVID0gXFx1e2V9XG4gIFwiXFx1MDExQlwiOiBcImVcXHUwMzBDXCIsXG4gIC8vIMSbID0gXFx2e2V9XG4gIFwiXFx4RUFcIjogXCJlXFx1MDMwMlwiLFxuICAvLyDDqiA9IFxcXntlfVxuICBcIlxcdTFFQkZcIjogXCJlXFx1MDMwMlxcdTAzMDFcIixcbiAgLy8g4bq/ID0gXFxeXFwne2V9XG4gIFwiXFx1MUVDMVwiOiBcImVcXHUwMzAyXFx1MDMwMFwiLFxuICAvLyDhu4EgPSBcXF5cXGB7ZX1cbiAgXCJcXHUxRUM1XCI6IFwiZVxcdTAzMDJcXHUwMzAzXCIsXG4gIC8vIOG7hSA9IFxcXlxcfntlfVxuICBcIlxcdTAxMTdcIjogXCJlXFx1MDMwN1wiLFxuICAvLyDElyA9IFxcLntlfVxuICBcIlxcdTFFMUZcIjogXCJmXFx1MDMwN1wiLFxuICAvLyDhuJ8gPSBcXC57Zn1cbiAgXCJcXHUwMUY1XCI6IFwiZ1xcdTAzMDFcIixcbiAgLy8gx7UgPSBcXCd7Z31cbiAgXCJcXHUxRTIxXCI6IFwiZ1xcdTAzMDRcIixcbiAgLy8g4bihID0gXFw9e2d9XG4gIFwiXFx1MDExRlwiOiBcImdcXHUwMzA2XCIsXG4gIC8vIMSfID0gXFx1e2d9XG4gIFwiXFx1MDFFN1wiOiBcImdcXHUwMzBDXCIsXG4gIC8vIMenID0gXFx2e2d9XG4gIFwiXFx1MDExRFwiOiBcImdcXHUwMzAyXCIsXG4gIC8vIMSdID0gXFxee2d9XG4gIFwiXFx1MDEyMVwiOiBcImdcXHUwMzA3XCIsXG4gIC8vIMShID0gXFwue2d9XG4gIFwiXFx1MUUyN1wiOiBcImhcXHUwMzA4XCIsXG4gIC8vIOG4pyA9IFxcXCJ7aH1cbiAgXCJcXHUwMjFGXCI6IFwiaFxcdTAzMENcIixcbiAgLy8gyJ8gPSBcXHZ7aH1cbiAgXCJcXHUwMTI1XCI6IFwiaFxcdTAzMDJcIixcbiAgLy8gxKUgPSBcXF57aH1cbiAgXCJcXHUxRTIzXCI6IFwiaFxcdTAzMDdcIixcbiAgLy8g4bijID0gXFwue2h9XG4gIFwiXFx4RURcIjogXCJpXFx1MDMwMVwiLFxuICAvLyDDrSA9IFxcJ3tpfVxuICBcIlxceEVDXCI6IFwiaVxcdTAzMDBcIixcbiAgLy8gw6wgPSBcXGB7aX1cbiAgXCJcXHhFRlwiOiBcImlcXHUwMzA4XCIsXG4gIC8vIMOvID0gXFxcIntpfVxuICBcIlxcdTFFMkZcIjogXCJpXFx1MDMwOFxcdTAzMDFcIixcbiAgLy8g4bivID0gXFxcIlxcJ3tpfVxuICBcIlxcdTAxMjlcIjogXCJpXFx1MDMwM1wiLFxuICAvLyDEqSA9IFxcfntpfVxuICBcIlxcdTAxMkJcIjogXCJpXFx1MDMwNFwiLFxuICAvLyDEqyA9IFxcPXtpfVxuICBcIlxcdTAxMkRcIjogXCJpXFx1MDMwNlwiLFxuICAvLyDErSA9IFxcdXtpfVxuICBcIlxcdTAxRDBcIjogXCJpXFx1MDMwQ1wiLFxuICAvLyDHkCA9IFxcdntpfVxuICBcIlxceEVFXCI6IFwiaVxcdTAzMDJcIixcbiAgLy8gw64gPSBcXF57aX1cbiAgXCJcXHUwMUYwXCI6IFwialxcdTAzMENcIixcbiAgLy8gx7AgPSBcXHZ7an1cbiAgXCJcXHUwMTM1XCI6IFwialxcdTAzMDJcIixcbiAgLy8gxLUgPSBcXF57an1cbiAgXCJcXHUxRTMxXCI6IFwia1xcdTAzMDFcIixcbiAgLy8g4bixID0gXFwne2t9XG4gIFwiXFx1MDFFOVwiOiBcImtcXHUwMzBDXCIsXG4gIC8vIMepID0gXFx2e2t9XG4gIFwiXFx1MDEzQVwiOiBcImxcXHUwMzAxXCIsXG4gIC8vIMS6ID0gXFwne2x9XG4gIFwiXFx1MDEzRVwiOiBcImxcXHUwMzBDXCIsXG4gIC8vIMS+ID0gXFx2e2x9XG4gIFwiXFx1MUUzRlwiOiBcIm1cXHUwMzAxXCIsXG4gIC8vIOG4vyA9IFxcJ3ttfVxuICBcIlxcdTFFNDFcIjogXCJtXFx1MDMwN1wiLFxuICAvLyDhuYEgPSBcXC57bX1cbiAgXCJcXHUwMTQ0XCI6IFwiblxcdTAzMDFcIixcbiAgLy8gxYQgPSBcXCd7bn1cbiAgXCJcXHUwMUY5XCI6IFwiblxcdTAzMDBcIixcbiAgLy8gx7kgPSBcXGB7bn1cbiAgXCJcXHhGMVwiOiBcIm5cXHUwMzAzXCIsXG4gIC8vIMOxID0gXFx+e259XG4gIFwiXFx1MDE0OFwiOiBcIm5cXHUwMzBDXCIsXG4gIC8vIMWIID0gXFx2e259XG4gIFwiXFx1MUU0NVwiOiBcIm5cXHUwMzA3XCIsXG4gIC8vIOG5hSA9IFxcLntufVxuICBcIlxceEYzXCI6IFwib1xcdTAzMDFcIixcbiAgLy8gw7MgPSBcXCd7b31cbiAgXCJcXHhGMlwiOiBcIm9cXHUwMzAwXCIsXG4gIC8vIMOyID0gXFxge299XG4gIFwiXFx4RjZcIjogXCJvXFx1MDMwOFwiLFxuICAvLyDDtiA9IFxcXCJ7b31cbiAgXCJcXHUwMjJCXCI6IFwib1xcdTAzMDhcXHUwMzA0XCIsXG4gIC8vIMirID0gXFxcIlxcPXtvfVxuICBcIlxceEY1XCI6IFwib1xcdTAzMDNcIixcbiAgLy8gw7UgPSBcXH57b31cbiAgXCJcXHUxRTREXCI6IFwib1xcdTAzMDNcXHUwMzAxXCIsXG4gIC8vIOG5jSA9IFxcflxcJ3tvfVxuICBcIlxcdTFFNEZcIjogXCJvXFx1MDMwM1xcdTAzMDhcIixcbiAgLy8g4bmPID0gXFx+XFxcIntvfVxuICBcIlxcdTAyMkRcIjogXCJvXFx1MDMwM1xcdTAzMDRcIixcbiAgLy8gyK0gPSBcXH5cXD17b31cbiAgXCJcXHUwMTREXCI6IFwib1xcdTAzMDRcIixcbiAgLy8gxY0gPSBcXD17b31cbiAgXCJcXHUxRTUzXCI6IFwib1xcdTAzMDRcXHUwMzAxXCIsXG4gIC8vIOG5kyA9IFxcPVxcJ3tvfVxuICBcIlxcdTFFNTFcIjogXCJvXFx1MDMwNFxcdTAzMDBcIixcbiAgLy8g4bmRID0gXFw9XFxge299XG4gIFwiXFx1MDE0RlwiOiBcIm9cXHUwMzA2XCIsXG4gIC8vIMWPID0gXFx1e299XG4gIFwiXFx1MDFEMlwiOiBcIm9cXHUwMzBDXCIsXG4gIC8vIMeSID0gXFx2e299XG4gIFwiXFx4RjRcIjogXCJvXFx1MDMwMlwiLFxuICAvLyDDtCA9IFxcXntvfVxuICBcIlxcdTFFRDFcIjogXCJvXFx1MDMwMlxcdTAzMDFcIixcbiAgLy8g4buRID0gXFxeXFwne299XG4gIFwiXFx1MUVEM1wiOiBcIm9cXHUwMzAyXFx1MDMwMFwiLFxuICAvLyDhu5MgPSBcXF5cXGB7b31cbiAgXCJcXHUxRUQ3XCI6IFwib1xcdTAzMDJcXHUwMzAzXCIsXG4gIC8vIOG7lyA9IFxcXlxcfntvfVxuICBcIlxcdTAyMkZcIjogXCJvXFx1MDMwN1wiLFxuICAvLyDIryA9IFxcLntvfVxuICBcIlxcdTAyMzFcIjogXCJvXFx1MDMwN1xcdTAzMDRcIixcbiAgLy8gyLEgPSBcXC5cXD17b31cbiAgXCJcXHUwMTUxXCI6IFwib1xcdTAzMEJcIixcbiAgLy8gxZEgPSBcXEh7b31cbiAgXCJcXHUxRTU1XCI6IFwicFxcdTAzMDFcIixcbiAgLy8g4bmVID0gXFwne3B9XG4gIFwiXFx1MUU1N1wiOiBcInBcXHUwMzA3XCIsXG4gIC8vIOG5lyA9IFxcLntwfVxuICBcIlxcdTAxNTVcIjogXCJyXFx1MDMwMVwiLFxuICAvLyDFlSA9IFxcJ3tyfVxuICBcIlxcdTAxNTlcIjogXCJyXFx1MDMwQ1wiLFxuICAvLyDFmSA9IFxcdntyfVxuICBcIlxcdTFFNTlcIjogXCJyXFx1MDMwN1wiLFxuICAvLyDhuZkgPSBcXC57cn1cbiAgXCJcXHUwMTVCXCI6IFwic1xcdTAzMDFcIixcbiAgLy8gxZsgPSBcXCd7c31cbiAgXCJcXHUxRTY1XCI6IFwic1xcdTAzMDFcXHUwMzA3XCIsXG4gIC8vIOG5pSA9IFxcJ1xcLntzfVxuICBcIlxcdTAxNjFcIjogXCJzXFx1MDMwQ1wiLFxuICAvLyDFoSA9IFxcdntzfVxuICBcIlxcdTFFNjdcIjogXCJzXFx1MDMwQ1xcdTAzMDdcIixcbiAgLy8g4bmnID0gXFx2XFwue3N9XG4gIFwiXFx1MDE1RFwiOiBcInNcXHUwMzAyXCIsXG4gIC8vIMWdID0gXFxee3N9XG4gIFwiXFx1MUU2MVwiOiBcInNcXHUwMzA3XCIsXG4gIC8vIOG5oSA9IFxcLntzfVxuICBcIlxcdTFFOTdcIjogXCJ0XFx1MDMwOFwiLFxuICAvLyDhupcgPSBcXFwie3R9XG4gIFwiXFx1MDE2NVwiOiBcInRcXHUwMzBDXCIsXG4gIC8vIMWlID0gXFx2e3R9XG4gIFwiXFx1MUU2QlwiOiBcInRcXHUwMzA3XCIsXG4gIC8vIOG5qyA9IFxcLnt0fVxuICBcIlxceEZBXCI6IFwidVxcdTAzMDFcIixcbiAgLy8gw7ogPSBcXCd7dX1cbiAgXCJcXHhGOVwiOiBcInVcXHUwMzAwXCIsXG4gIC8vIMO5ID0gXFxge3V9XG4gIFwiXFx4RkNcIjogXCJ1XFx1MDMwOFwiLFxuICAvLyDDvCA9IFxcXCJ7dX1cbiAgXCJcXHUwMUQ4XCI6IFwidVxcdTAzMDhcXHUwMzAxXCIsXG4gIC8vIMeYID0gXFxcIlxcJ3t1fVxuICBcIlxcdTAxRENcIjogXCJ1XFx1MDMwOFxcdTAzMDBcIixcbiAgLy8gx5wgPSBcXFwiXFxge3V9XG4gIFwiXFx1MDFENlwiOiBcInVcXHUwMzA4XFx1MDMwNFwiLFxuICAvLyDHliA9IFxcXCJcXD17dX1cbiAgXCJcXHUwMURBXCI6IFwidVxcdTAzMDhcXHUwMzBDXCIsXG4gIC8vIMeaID0gXFxcIlxcdnt1fVxuICBcIlxcdTAxNjlcIjogXCJ1XFx1MDMwM1wiLFxuICAvLyDFqSA9IFxcfnt1fVxuICBcIlxcdTFFNzlcIjogXCJ1XFx1MDMwM1xcdTAzMDFcIixcbiAgLy8g4bm5ID0gXFx+XFwne3V9XG4gIFwiXFx1MDE2QlwiOiBcInVcXHUwMzA0XCIsXG4gIC8vIMWrID0gXFw9e3V9XG4gIFwiXFx1MUU3QlwiOiBcInVcXHUwMzA0XFx1MDMwOFwiLFxuICAvLyDhubsgPSBcXD1cXFwie3V9XG4gIFwiXFx1MDE2RFwiOiBcInVcXHUwMzA2XCIsXG4gIC8vIMWtID0gXFx1e3V9XG4gIFwiXFx1MDFENFwiOiBcInVcXHUwMzBDXCIsXG4gIC8vIMeUID0gXFx2e3V9XG4gIFwiXFx4RkJcIjogXCJ1XFx1MDMwMlwiLFxuICAvLyDDuyA9IFxcXnt1fVxuICBcIlxcdTAxNkZcIjogXCJ1XFx1MDMwQVwiLFxuICAvLyDFryA9IFxccnt1fVxuICBcIlxcdTAxNzFcIjogXCJ1XFx1MDMwQlwiLFxuICAvLyDFsSA9IFxcSHt1fVxuICBcIlxcdTFFN0RcIjogXCJ2XFx1MDMwM1wiLFxuICAvLyDhub0gPSBcXH57dn1cbiAgXCJcXHUxRTgzXCI6IFwid1xcdTAzMDFcIixcbiAgLy8g4bqDID0gXFwne3d9XG4gIFwiXFx1MUU4MVwiOiBcIndcXHUwMzAwXCIsXG4gIC8vIOG6gSA9IFxcYHt3fVxuICBcIlxcdTFFODVcIjogXCJ3XFx1MDMwOFwiLFxuICAvLyDhuoUgPSBcXFwie3d9XG4gIFwiXFx1MDE3NVwiOiBcIndcXHUwMzAyXCIsXG4gIC8vIMW1ID0gXFxee3d9XG4gIFwiXFx1MUU4N1wiOiBcIndcXHUwMzA3XCIsXG4gIC8vIOG6hyA9IFxcLnt3fVxuICBcIlxcdTFFOThcIjogXCJ3XFx1MDMwQVwiLFxuICAvLyDhupggPSBcXHJ7d31cbiAgXCJcXHUxRThEXCI6IFwieFxcdTAzMDhcIixcbiAgLy8g4bqNID0gXFxcInt4fVxuICBcIlxcdTFFOEJcIjogXCJ4XFx1MDMwN1wiLFxuICAvLyDhuosgPSBcXC57eH1cbiAgXCJcXHhGRFwiOiBcInlcXHUwMzAxXCIsXG4gIC8vIMO9ID0gXFwne3l9XG4gIFwiXFx1MUVGM1wiOiBcInlcXHUwMzAwXCIsXG4gIC8vIOG7syA9IFxcYHt5fVxuICBcIlxceEZGXCI6IFwieVxcdTAzMDhcIixcbiAgLy8gw78gPSBcXFwie3l9XG4gIFwiXFx1MUVGOVwiOiBcInlcXHUwMzAzXCIsXG4gIC8vIOG7uSA9IFxcfnt5fVxuICBcIlxcdTAyMzNcIjogXCJ5XFx1MDMwNFwiLFxuICAvLyDIsyA9IFxcPXt5fVxuICBcIlxcdTAxNzdcIjogXCJ5XFx1MDMwMlwiLFxuICAvLyDFtyA9IFxcXnt5fVxuICBcIlxcdTFFOEZcIjogXCJ5XFx1MDMwN1wiLFxuICAvLyDhuo8gPSBcXC57eX1cbiAgXCJcXHUxRTk5XCI6IFwieVxcdTAzMEFcIixcbiAgLy8g4bqZID0gXFxye3l9XG4gIFwiXFx1MDE3QVwiOiBcInpcXHUwMzAxXCIsXG4gIC8vIMW6ID0gXFwne3p9XG4gIFwiXFx1MDE3RVwiOiBcInpcXHUwMzBDXCIsXG4gIC8vIMW+ID0gXFx2e3p9XG4gIFwiXFx1MUU5MVwiOiBcInpcXHUwMzAyXCIsXG4gIC8vIOG6kSA9IFxcXnt6fVxuICBcIlxcdTAxN0NcIjogXCJ6XFx1MDMwN1wiLFxuICAvLyDFvCA9IFxcLnt6fVxuICBcIlxceEMxXCI6IFwiQVxcdTAzMDFcIixcbiAgLy8gw4EgPSBcXCd7QX1cbiAgXCJcXHhDMFwiOiBcIkFcXHUwMzAwXCIsXG4gIC8vIMOAID0gXFxge0F9XG4gIFwiXFx4QzRcIjogXCJBXFx1MDMwOFwiLFxuICAvLyDDhCA9IFxcXCJ7QX1cbiAgXCJcXHUwMURFXCI6IFwiQVxcdTAzMDhcXHUwMzA0XCIsXG4gIC8vIMeeID0gXFxcIlxcPXtBfVxuICBcIlxceEMzXCI6IFwiQVxcdTAzMDNcIixcbiAgLy8gw4MgPSBcXH57QX1cbiAgXCJcXHUwMTAwXCI6IFwiQVxcdTAzMDRcIixcbiAgLy8gxIAgPSBcXD17QX1cbiAgXCJcXHUwMTAyXCI6IFwiQVxcdTAzMDZcIixcbiAgLy8gxIIgPSBcXHV7QX1cbiAgXCJcXHUxRUFFXCI6IFwiQVxcdTAzMDZcXHUwMzAxXCIsXG4gIC8vIOG6riA9IFxcdVxcJ3tBfVxuICBcIlxcdTFFQjBcIjogXCJBXFx1MDMwNlxcdTAzMDBcIixcbiAgLy8g4bqwID0gXFx1XFxge0F9XG4gIFwiXFx1MUVCNFwiOiBcIkFcXHUwMzA2XFx1MDMwM1wiLFxuICAvLyDhurQgPSBcXHVcXH57QX1cbiAgXCJcXHUwMUNEXCI6IFwiQVxcdTAzMENcIixcbiAgLy8gx40gPSBcXHZ7QX1cbiAgXCJcXHhDMlwiOiBcIkFcXHUwMzAyXCIsXG4gIC8vIMOCID0gXFxee0F9XG4gIFwiXFx1MUVBNFwiOiBcIkFcXHUwMzAyXFx1MDMwMVwiLFxuICAvLyDhuqQgPSBcXF5cXCd7QX1cbiAgXCJcXHUxRUE2XCI6IFwiQVxcdTAzMDJcXHUwMzAwXCIsXG4gIC8vIOG6piA9IFxcXlxcYHtBfVxuICBcIlxcdTFFQUFcIjogXCJBXFx1MDMwMlxcdTAzMDNcIixcbiAgLy8g4bqqID0gXFxeXFx+e0F9XG4gIFwiXFx1MDIyNlwiOiBcIkFcXHUwMzA3XCIsXG4gIC8vIMimID0gXFwue0F9XG4gIFwiXFx1MDFFMFwiOiBcIkFcXHUwMzA3XFx1MDMwNFwiLFxuICAvLyDHoCA9IFxcLlxcPXtBfVxuICBcIlxceEM1XCI6IFwiQVxcdTAzMEFcIixcbiAgLy8gw4UgPSBcXHJ7QX1cbiAgXCJcXHUwMUZBXCI6IFwiQVxcdTAzMEFcXHUwMzAxXCIsXG4gIC8vIMe6ID0gXFxyXFwne0F9XG4gIFwiXFx1MUUwMlwiOiBcIkJcXHUwMzA3XCIsXG4gIC8vIOG4giA9IFxcLntCfVxuICBcIlxcdTAxMDZcIjogXCJDXFx1MDMwMVwiLFxuICAvLyDEhiA9IFxcJ3tDfVxuICBcIlxcdTAxMENcIjogXCJDXFx1MDMwQ1wiLFxuICAvLyDEjCA9IFxcdntDfVxuICBcIlxcdTAxMDhcIjogXCJDXFx1MDMwMlwiLFxuICAvLyDEiCA9IFxcXntDfVxuICBcIlxcdTAxMEFcIjogXCJDXFx1MDMwN1wiLFxuICAvLyDEiiA9IFxcLntDfVxuICBcIlxcdTAxMEVcIjogXCJEXFx1MDMwQ1wiLFxuICAvLyDEjiA9IFxcdntEfVxuICBcIlxcdTFFMEFcIjogXCJEXFx1MDMwN1wiLFxuICAvLyDhuIogPSBcXC57RH1cbiAgXCJcXHhDOVwiOiBcIkVcXHUwMzAxXCIsXG4gIC8vIMOJID0gXFwne0V9XG4gIFwiXFx4QzhcIjogXCJFXFx1MDMwMFwiLFxuICAvLyDDiCA9IFxcYHtFfVxuICBcIlxceENCXCI6IFwiRVxcdTAzMDhcIixcbiAgLy8gw4sgPSBcXFwie0V9XG4gIFwiXFx1MUVCQ1wiOiBcIkVcXHUwMzAzXCIsXG4gIC8vIOG6vCA9IFxcfntFfVxuICBcIlxcdTAxMTJcIjogXCJFXFx1MDMwNFwiLFxuICAvLyDEkiA9IFxcPXtFfVxuICBcIlxcdTFFMTZcIjogXCJFXFx1MDMwNFxcdTAzMDFcIixcbiAgLy8g4biWID0gXFw9XFwne0V9XG4gIFwiXFx1MUUxNFwiOiBcIkVcXHUwMzA0XFx1MDMwMFwiLFxuICAvLyDhuJQgPSBcXD1cXGB7RX1cbiAgXCJcXHUwMTE0XCI6IFwiRVxcdTAzMDZcIixcbiAgLy8gxJQgPSBcXHV7RX1cbiAgXCJcXHUwMTFBXCI6IFwiRVxcdTAzMENcIixcbiAgLy8gxJogPSBcXHZ7RX1cbiAgXCJcXHhDQVwiOiBcIkVcXHUwMzAyXCIsXG4gIC8vIMOKID0gXFxee0V9XG4gIFwiXFx1MUVCRVwiOiBcIkVcXHUwMzAyXFx1MDMwMVwiLFxuICAvLyDhur4gPSBcXF5cXCd7RX1cbiAgXCJcXHUxRUMwXCI6IFwiRVxcdTAzMDJcXHUwMzAwXCIsXG4gIC8vIOG7gCA9IFxcXlxcYHtFfVxuICBcIlxcdTFFQzRcIjogXCJFXFx1MDMwMlxcdTAzMDNcIixcbiAgLy8g4buEID0gXFxeXFx+e0V9XG4gIFwiXFx1MDExNlwiOiBcIkVcXHUwMzA3XCIsXG4gIC8vIMSWID0gXFwue0V9XG4gIFwiXFx1MUUxRVwiOiBcIkZcXHUwMzA3XCIsXG4gIC8vIOG4niA9IFxcLntGfVxuICBcIlxcdTAxRjRcIjogXCJHXFx1MDMwMVwiLFxuICAvLyDHtCA9IFxcJ3tHfVxuICBcIlxcdTFFMjBcIjogXCJHXFx1MDMwNFwiLFxuICAvLyDhuKAgPSBcXD17R31cbiAgXCJcXHUwMTFFXCI6IFwiR1xcdTAzMDZcIixcbiAgLy8gxJ4gPSBcXHV7R31cbiAgXCJcXHUwMUU2XCI6IFwiR1xcdTAzMENcIixcbiAgLy8gx6YgPSBcXHZ7R31cbiAgXCJcXHUwMTFDXCI6IFwiR1xcdTAzMDJcIixcbiAgLy8gxJwgPSBcXF57R31cbiAgXCJcXHUwMTIwXCI6IFwiR1xcdTAzMDdcIixcbiAgLy8gxKAgPSBcXC57R31cbiAgXCJcXHUxRTI2XCI6IFwiSFxcdTAzMDhcIixcbiAgLy8g4bimID0gXFxcIntIfVxuICBcIlxcdTAyMUVcIjogXCJIXFx1MDMwQ1wiLFxuICAvLyDIniA9IFxcdntIfVxuICBcIlxcdTAxMjRcIjogXCJIXFx1MDMwMlwiLFxuICAvLyDEpCA9IFxcXntIfVxuICBcIlxcdTFFMjJcIjogXCJIXFx1MDMwN1wiLFxuICAvLyDhuKIgPSBcXC57SH1cbiAgXCJcXHhDRFwiOiBcIklcXHUwMzAxXCIsXG4gIC8vIMONID0gXFwne0l9XG4gIFwiXFx4Q0NcIjogXCJJXFx1MDMwMFwiLFxuICAvLyDDjCA9IFxcYHtJfVxuICBcIlxceENGXCI6IFwiSVxcdTAzMDhcIixcbiAgLy8gw48gPSBcXFwie0l9XG4gIFwiXFx1MUUyRVwiOiBcIklcXHUwMzA4XFx1MDMwMVwiLFxuICAvLyDhuK4gPSBcXFwiXFwne0l9XG4gIFwiXFx1MDEyOFwiOiBcIklcXHUwMzAzXCIsXG4gIC8vIMSoID0gXFx+e0l9XG4gIFwiXFx1MDEyQVwiOiBcIklcXHUwMzA0XCIsXG4gIC8vIMSqID0gXFw9e0l9XG4gIFwiXFx1MDEyQ1wiOiBcIklcXHUwMzA2XCIsXG4gIC8vIMSsID0gXFx1e0l9XG4gIFwiXFx1MDFDRlwiOiBcIklcXHUwMzBDXCIsXG4gIC8vIMePID0gXFx2e0l9XG4gIFwiXFx4Q0VcIjogXCJJXFx1MDMwMlwiLFxuICAvLyDDjiA9IFxcXntJfVxuICBcIlxcdTAxMzBcIjogXCJJXFx1MDMwN1wiLFxuICAvLyDEsCA9IFxcLntJfVxuICBcIlxcdTAxMzRcIjogXCJKXFx1MDMwMlwiLFxuICAvLyDEtCA9IFxcXntKfVxuICBcIlxcdTFFMzBcIjogXCJLXFx1MDMwMVwiLFxuICAvLyDhuLAgPSBcXCd7S31cbiAgXCJcXHUwMUU4XCI6IFwiS1xcdTAzMENcIixcbiAgLy8gx6ggPSBcXHZ7S31cbiAgXCJcXHUwMTM5XCI6IFwiTFxcdTAzMDFcIixcbiAgLy8gxLkgPSBcXCd7TH1cbiAgXCJcXHUwMTNEXCI6IFwiTFxcdTAzMENcIixcbiAgLy8gxL0gPSBcXHZ7TH1cbiAgXCJcXHUxRTNFXCI6IFwiTVxcdTAzMDFcIixcbiAgLy8g4bi+ID0gXFwne019XG4gIFwiXFx1MUU0MFwiOiBcIk1cXHUwMzA3XCIsXG4gIC8vIOG5gCA9IFxcLntNfVxuICBcIlxcdTAxNDNcIjogXCJOXFx1MDMwMVwiLFxuICAvLyDFgyA9IFxcJ3tOfVxuICBcIlxcdTAxRjhcIjogXCJOXFx1MDMwMFwiLFxuICAvLyDHuCA9IFxcYHtOfVxuICBcIlxceEQxXCI6IFwiTlxcdTAzMDNcIixcbiAgLy8gw5EgPSBcXH57Tn1cbiAgXCJcXHUwMTQ3XCI6IFwiTlxcdTAzMENcIixcbiAgLy8gxYcgPSBcXHZ7Tn1cbiAgXCJcXHUxRTQ0XCI6IFwiTlxcdTAzMDdcIixcbiAgLy8g4bmEID0gXFwue059XG4gIFwiXFx4RDNcIjogXCJPXFx1MDMwMVwiLFxuICAvLyDDkyA9IFxcJ3tPfVxuICBcIlxceEQyXCI6IFwiT1xcdTAzMDBcIixcbiAgLy8gw5IgPSBcXGB7T31cbiAgXCJcXHhENlwiOiBcIk9cXHUwMzA4XCIsXG4gIC8vIMOWID0gXFxcIntPfVxuICBcIlxcdTAyMkFcIjogXCJPXFx1MDMwOFxcdTAzMDRcIixcbiAgLy8gyKogPSBcXFwiXFw9e099XG4gIFwiXFx4RDVcIjogXCJPXFx1MDMwM1wiLFxuICAvLyDDlSA9IFxcfntPfVxuICBcIlxcdTFFNENcIjogXCJPXFx1MDMwM1xcdTAzMDFcIixcbiAgLy8g4bmMID0gXFx+XFwne099XG4gIFwiXFx1MUU0RVwiOiBcIk9cXHUwMzAzXFx1MDMwOFwiLFxuICAvLyDhuY4gPSBcXH5cXFwie099XG4gIFwiXFx1MDIyQ1wiOiBcIk9cXHUwMzAzXFx1MDMwNFwiLFxuICAvLyDIrCA9IFxcflxcPXtPfVxuICBcIlxcdTAxNENcIjogXCJPXFx1MDMwNFwiLFxuICAvLyDFjCA9IFxcPXtPfVxuICBcIlxcdTFFNTJcIjogXCJPXFx1MDMwNFxcdTAzMDFcIixcbiAgLy8g4bmSID0gXFw9XFwne099XG4gIFwiXFx1MUU1MFwiOiBcIk9cXHUwMzA0XFx1MDMwMFwiLFxuICAvLyDhuZAgPSBcXD1cXGB7T31cbiAgXCJcXHUwMTRFXCI6IFwiT1xcdTAzMDZcIixcbiAgLy8gxY4gPSBcXHV7T31cbiAgXCJcXHUwMUQxXCI6IFwiT1xcdTAzMENcIixcbiAgLy8gx5EgPSBcXHZ7T31cbiAgXCJcXHhENFwiOiBcIk9cXHUwMzAyXCIsXG4gIC8vIMOUID0gXFxee099XG4gIFwiXFx1MUVEMFwiOiBcIk9cXHUwMzAyXFx1MDMwMVwiLFxuICAvLyDhu5AgPSBcXF5cXCd7T31cbiAgXCJcXHUxRUQyXCI6IFwiT1xcdTAzMDJcXHUwMzAwXCIsXG4gIC8vIOG7kiA9IFxcXlxcYHtPfVxuICBcIlxcdTFFRDZcIjogXCJPXFx1MDMwMlxcdTAzMDNcIixcbiAgLy8g4buWID0gXFxeXFx+e099XG4gIFwiXFx1MDIyRVwiOiBcIk9cXHUwMzA3XCIsXG4gIC8vIMiuID0gXFwue099XG4gIFwiXFx1MDIzMFwiOiBcIk9cXHUwMzA3XFx1MDMwNFwiLFxuICAvLyDIsCA9IFxcLlxcPXtPfVxuICBcIlxcdTAxNTBcIjogXCJPXFx1MDMwQlwiLFxuICAvLyDFkCA9IFxcSHtPfVxuICBcIlxcdTFFNTRcIjogXCJQXFx1MDMwMVwiLFxuICAvLyDhuZQgPSBcXCd7UH1cbiAgXCJcXHUxRTU2XCI6IFwiUFxcdTAzMDdcIixcbiAgLy8g4bmWID0gXFwue1B9XG4gIFwiXFx1MDE1NFwiOiBcIlJcXHUwMzAxXCIsXG4gIC8vIMWUID0gXFwne1J9XG4gIFwiXFx1MDE1OFwiOiBcIlJcXHUwMzBDXCIsXG4gIC8vIMWYID0gXFx2e1J9XG4gIFwiXFx1MUU1OFwiOiBcIlJcXHUwMzA3XCIsXG4gIC8vIOG5mCA9IFxcLntSfVxuICBcIlxcdTAxNUFcIjogXCJTXFx1MDMwMVwiLFxuICAvLyDFmiA9IFxcJ3tTfVxuICBcIlxcdTFFNjRcIjogXCJTXFx1MDMwMVxcdTAzMDdcIixcbiAgLy8g4bmkID0gXFwnXFwue1N9XG4gIFwiXFx1MDE2MFwiOiBcIlNcXHUwMzBDXCIsXG4gIC8vIMWgID0gXFx2e1N9XG4gIFwiXFx1MUU2NlwiOiBcIlNcXHUwMzBDXFx1MDMwN1wiLFxuICAvLyDhuaYgPSBcXHZcXC57U31cbiAgXCJcXHUwMTVDXCI6IFwiU1xcdTAzMDJcIixcbiAgLy8gxZwgPSBcXF57U31cbiAgXCJcXHUxRTYwXCI6IFwiU1xcdTAzMDdcIixcbiAgLy8g4bmgID0gXFwue1N9XG4gIFwiXFx1MDE2NFwiOiBcIlRcXHUwMzBDXCIsXG4gIC8vIMWkID0gXFx2e1R9XG4gIFwiXFx1MUU2QVwiOiBcIlRcXHUwMzA3XCIsXG4gIC8vIOG5qiA9IFxcLntUfVxuICBcIlxceERBXCI6IFwiVVxcdTAzMDFcIixcbiAgLy8gw5ogPSBcXCd7VX1cbiAgXCJcXHhEOVwiOiBcIlVcXHUwMzAwXCIsXG4gIC8vIMOZID0gXFxge1V9XG4gIFwiXFx4RENcIjogXCJVXFx1MDMwOFwiLFxuICAvLyDDnCA9IFxcXCJ7VX1cbiAgXCJcXHUwMUQ3XCI6IFwiVVxcdTAzMDhcXHUwMzAxXCIsXG4gIC8vIMeXID0gXFxcIlxcJ3tVfVxuICBcIlxcdTAxREJcIjogXCJVXFx1MDMwOFxcdTAzMDBcIixcbiAgLy8gx5sgPSBcXFwiXFxge1V9XG4gIFwiXFx1MDFENVwiOiBcIlVcXHUwMzA4XFx1MDMwNFwiLFxuICAvLyDHlSA9IFxcXCJcXD17VX1cbiAgXCJcXHUwMUQ5XCI6IFwiVVxcdTAzMDhcXHUwMzBDXCIsXG4gIC8vIMeZID0gXFxcIlxcdntVfVxuICBcIlxcdTAxNjhcIjogXCJVXFx1MDMwM1wiLFxuICAvLyDFqCA9IFxcfntVfVxuICBcIlxcdTFFNzhcIjogXCJVXFx1MDMwM1xcdTAzMDFcIixcbiAgLy8g4bm4ID0gXFx+XFwne1V9XG4gIFwiXFx1MDE2QVwiOiBcIlVcXHUwMzA0XCIsXG4gIC8vIMWqID0gXFw9e1V9XG4gIFwiXFx1MUU3QVwiOiBcIlVcXHUwMzA0XFx1MDMwOFwiLFxuICAvLyDhubogPSBcXD1cXFwie1V9XG4gIFwiXFx1MDE2Q1wiOiBcIlVcXHUwMzA2XCIsXG4gIC8vIMWsID0gXFx1e1V9XG4gIFwiXFx1MDFEM1wiOiBcIlVcXHUwMzBDXCIsXG4gIC8vIMeTID0gXFx2e1V9XG4gIFwiXFx4REJcIjogXCJVXFx1MDMwMlwiLFxuICAvLyDDmyA9IFxcXntVfVxuICBcIlxcdTAxNkVcIjogXCJVXFx1MDMwQVwiLFxuICAvLyDFriA9IFxccntVfVxuICBcIlxcdTAxNzBcIjogXCJVXFx1MDMwQlwiLFxuICAvLyDFsCA9IFxcSHtVfVxuICBcIlxcdTFFN0NcIjogXCJWXFx1MDMwM1wiLFxuICAvLyDhubwgPSBcXH57Vn1cbiAgXCJcXHUxRTgyXCI6IFwiV1xcdTAzMDFcIixcbiAgLy8g4bqCID0gXFwne1d9XG4gIFwiXFx1MUU4MFwiOiBcIldcXHUwMzAwXCIsXG4gIC8vIOG6gCA9IFxcYHtXfVxuICBcIlxcdTFFODRcIjogXCJXXFx1MDMwOFwiLFxuICAvLyDhuoQgPSBcXFwie1d9XG4gIFwiXFx1MDE3NFwiOiBcIldcXHUwMzAyXCIsXG4gIC8vIMW0ID0gXFxee1d9XG4gIFwiXFx1MUU4NlwiOiBcIldcXHUwMzA3XCIsXG4gIC8vIOG6hiA9IFxcLntXfVxuICBcIlxcdTFFOENcIjogXCJYXFx1MDMwOFwiLFxuICAvLyDhuowgPSBcXFwie1h9XG4gIFwiXFx1MUU4QVwiOiBcIlhcXHUwMzA3XCIsXG4gIC8vIOG6iiA9IFxcLntYfVxuICBcIlxceEREXCI6IFwiWVxcdTAzMDFcIixcbiAgLy8gw50gPSBcXCd7WX1cbiAgXCJcXHUxRUYyXCI6IFwiWVxcdTAzMDBcIixcbiAgLy8g4buyID0gXFxge1l9XG4gIFwiXFx1MDE3OFwiOiBcIllcXHUwMzA4XCIsXG4gIC8vIMW4ID0gXFxcIntZfVxuICBcIlxcdTFFRjhcIjogXCJZXFx1MDMwM1wiLFxuICAvLyDhu7ggPSBcXH57WX1cbiAgXCJcXHUwMjMyXCI6IFwiWVxcdTAzMDRcIixcbiAgLy8gyLIgPSBcXD17WX1cbiAgXCJcXHUwMTc2XCI6IFwiWVxcdTAzMDJcIixcbiAgLy8gxbYgPSBcXF57WX1cbiAgXCJcXHUxRThFXCI6IFwiWVxcdTAzMDdcIixcbiAgLy8g4bqOID0gXFwue1l9XG4gIFwiXFx1MDE3OVwiOiBcIlpcXHUwMzAxXCIsXG4gIC8vIMW5ID0gXFwne1p9XG4gIFwiXFx1MDE3RFwiOiBcIlpcXHUwMzBDXCIsXG4gIC8vIMW9ID0gXFx2e1p9XG4gIFwiXFx1MUU5MFwiOiBcIlpcXHUwMzAyXCIsXG4gIC8vIOG6kCA9IFxcXntafVxuICBcIlxcdTAxN0JcIjogXCJaXFx1MDMwN1wiLFxuICAvLyDFuyA9IFxcLntafVxuICBcIlxcdTAzQUNcIjogXCJcXHUwM0IxXFx1MDMwMVwiLFxuICAvLyDOrCA9IFxcJ3vOsX1cbiAgXCJcXHUxRjcwXCI6IFwiXFx1MDNCMVxcdTAzMDBcIixcbiAgLy8g4b2wID0gXFxge86xfVxuICBcIlxcdTFGQjFcIjogXCJcXHUwM0IxXFx1MDMwNFwiLFxuICAvLyDhvrEgPSBcXD17zrF9XG4gIFwiXFx1MUZCMFwiOiBcIlxcdTAzQjFcXHUwMzA2XCIsXG4gIC8vIOG+sCA9IFxcdXvOsX1cbiAgXCJcXHUwM0FEXCI6IFwiXFx1MDNCNVxcdTAzMDFcIixcbiAgLy8gzq0gPSBcXCd7zrV9XG4gIFwiXFx1MUY3MlwiOiBcIlxcdTAzQjVcXHUwMzAwXCIsXG4gIC8vIOG9siA9IFxcYHvOtX1cbiAgXCJcXHUwM0FFXCI6IFwiXFx1MDNCN1xcdTAzMDFcIixcbiAgLy8gzq4gPSBcXCd7zrd9XG4gIFwiXFx1MUY3NFwiOiBcIlxcdTAzQjdcXHUwMzAwXCIsXG4gIC8vIOG9tCA9IFxcYHvOt31cbiAgXCJcXHUwM0FGXCI6IFwiXFx1MDNCOVxcdTAzMDFcIixcbiAgLy8gzq8gPSBcXCd7zrl9XG4gIFwiXFx1MUY3NlwiOiBcIlxcdTAzQjlcXHUwMzAwXCIsXG4gIC8vIOG9tiA9IFxcYHvOuX1cbiAgXCJcXHUwM0NBXCI6IFwiXFx1MDNCOVxcdTAzMDhcIixcbiAgLy8gz4ogPSBcXFwie865fVxuICBcIlxcdTAzOTBcIjogXCJcXHUwM0I5XFx1MDMwOFxcdTAzMDFcIixcbiAgLy8gzpAgPSBcXFwiXFwne865fVxuICBcIlxcdTFGRDJcIjogXCJcXHUwM0I5XFx1MDMwOFxcdTAzMDBcIixcbiAgLy8g4b+SID0gXFxcIlxcYHvOuX1cbiAgXCJcXHUxRkQxXCI6IFwiXFx1MDNCOVxcdTAzMDRcIixcbiAgLy8g4b+RID0gXFw9e865fVxuICBcIlxcdTFGRDBcIjogXCJcXHUwM0I5XFx1MDMwNlwiLFxuICAvLyDhv5AgPSBcXHV7zrl9XG4gIFwiXFx1MDNDQ1wiOiBcIlxcdTAzQkZcXHUwMzAxXCIsXG4gIC8vIM+MID0gXFwne86/fVxuICBcIlxcdTFGNzhcIjogXCJcXHUwM0JGXFx1MDMwMFwiLFxuICAvLyDhvbggPSBcXGB7zr99XG4gIFwiXFx1MDNDRFwiOiBcIlxcdTAzQzVcXHUwMzAxXCIsXG4gIC8vIM+NID0gXFwne8+FfVxuICBcIlxcdTFGN0FcIjogXCJcXHUwM0M1XFx1MDMwMFwiLFxuICAvLyDhvbogPSBcXGB7z4V9XG4gIFwiXFx1MDNDQlwiOiBcIlxcdTAzQzVcXHUwMzA4XCIsXG4gIC8vIM+LID0gXFxcInvPhX1cbiAgXCJcXHUwM0IwXCI6IFwiXFx1MDNDNVxcdTAzMDhcXHUwMzAxXCIsXG4gIC8vIM6wID0gXFxcIlxcJ3vPhX1cbiAgXCJcXHUxRkUyXCI6IFwiXFx1MDNDNVxcdTAzMDhcXHUwMzAwXCIsXG4gIC8vIOG/oiA9IFxcXCJcXGB7z4V9XG4gIFwiXFx1MUZFMVwiOiBcIlxcdTAzQzVcXHUwMzA0XCIsXG4gIC8vIOG/oSA9IFxcPXvPhX1cbiAgXCJcXHUxRkUwXCI6IFwiXFx1MDNDNVxcdTAzMDZcIixcbiAgLy8g4b+gID0gXFx1e8+FfVxuICBcIlxcdTAzQ0VcIjogXCJcXHUwM0M5XFx1MDMwMVwiLFxuICAvLyDPjiA9IFxcJ3vPiX1cbiAgXCJcXHUxRjdDXCI6IFwiXFx1MDNDOVxcdTAzMDBcIixcbiAgLy8g4b28ID0gXFxge8+JfVxuICBcIlxcdTAzOEVcIjogXCJcXHUwM0E1XFx1MDMwMVwiLFxuICAvLyDOjiA9IFxcJ3vOpX1cbiAgXCJcXHUxRkVBXCI6IFwiXFx1MDNBNVxcdTAzMDBcIixcbiAgLy8g4b+qID0gXFxge86lfVxuICBcIlxcdTAzQUJcIjogXCJcXHUwM0E1XFx1MDMwOFwiLFxuICAvLyDOqyA9IFxcXCJ7zqV9XG4gIFwiXFx1MUZFOVwiOiBcIlxcdTAzQTVcXHUwMzA0XCIsXG4gIC8vIOG/qSA9IFxcPXvOpX1cbiAgXCJcXHUxRkU4XCI6IFwiXFx1MDNBNVxcdTAzMDZcIixcbiAgLy8g4b+oID0gXFx1e86lfVxuICBcIlxcdTAzOEZcIjogXCJcXHUwM0E5XFx1MDMwMVwiLFxuICAvLyDOjyA9IFxcJ3vOqX1cbiAgXCJcXHUxRkZBXCI6IFwiXFx1MDNBOVxcdTAzMDBcIiAvLyDhv7ogPSBcXGB7zql9XG5cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvUGFyc2VyLmpzXG4vKiBlc2xpbnQgbm8tY29uc3RhbnQtY29uZGl0aW9uOjAgKi9cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKipcbiAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgcGFyc2VyIHVzZWQgdG8gcGFyc2Ugb3V0IGEgVGVYIGV4cHJlc3Npb24gZnJvbSB0aGVcbiAqIGlucHV0LiBTaW5jZSBUZVggaXNuJ3QgY29udGV4dC1mcmVlLCBzdGFuZGFyZCBwYXJzZXJzIGRvbid0IHdvcmsgcGFydGljdWxhcmx5XG4gKiB3ZWxsLlxuICpcbiAqIFRoZSBzdHJhdGVneSBvZiB0aGlzIHBhcnNlciBpcyBhcyBzdWNoOlxuICpcbiAqIFRoZSBtYWluIGZ1bmN0aW9ucyAodGhlIGAucGFyc2UuLi5gIG9uZXMpIHRha2UgYSBwb3NpdGlvbiBpbiB0aGUgY3VycmVudFxuICogcGFyc2Ugc3RyaW5nIHRvIHBhcnNlIHRva2VucyBmcm9tLiBUaGUgbGV4ZXIgKGZvdW5kIGluIExleGVyLmpzLCBzdG9yZWQgYXRcbiAqIHRoaXMuZ3VsbGV0LmxleGVyKSBhbHNvIHN1cHBvcnRzIHB1bGxpbmcgb3V0IHRva2VucyBhdCBhcmJpdHJhcnkgcGxhY2VzLiBXaGVuXG4gKiBpbmRpdmlkdWFsIHRva2VucyBhcmUgbmVlZGVkIGF0IGEgcG9zaXRpb24sIHRoZSBsZXhlciBpcyBjYWxsZWQgdG8gcHVsbCBvdXQgYVxuICogdG9rZW4sIHdoaWNoIGlzIHRoZW4gdXNlZC5cbiAqXG4gKiBUaGUgcGFyc2VyIGhhcyBhIHByb3BlcnR5IGNhbGxlZCBcIm1vZGVcIiBpbmRpY2F0aW5nIHRoZSBtb2RlIHRoYXRcbiAqIHRoZSBwYXJzZXIgaXMgY3VycmVudGx5IGluLiBDdXJyZW50bHkgaXQgaGFzIHRvIGJlIG9uZSBvZiBcIm1hdGhcIiBvclxuICogXCJ0ZXh0XCIsIHdoaWNoIGRlbm90ZXMgd2hldGhlciB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBpcyBhIG1hdGgteVxuICogb25lIG9yIGEgdGV4dC15IG9uZSAoZS5nLiBpbnNpZGUgXFx0ZXh0KS4gQ3VycmVudGx5LCB0aGlzIHNlcnZlcyB0b1xuICogbGltaXQgdGhlIGZ1bmN0aW9ucyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0ZXh0IG1vZGUuXG4gKlxuICogVGhlIG1haW4gZnVuY3Rpb25zIHRoZW4gcmV0dXJuIGFuIG9iamVjdCB3aGljaCBjb250YWlucyB0aGUgdXNlZnVsIGRhdGEgdGhhdFxuICogd2FzIHBhcnNlZCBhdCBpdHMgZ2l2ZW4gcG9pbnQsIGFuZCBhIG5ldyBwb3NpdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBwYXJzZWRcbiAqIGRhdGEuIFRoZSBtYWluIGZ1bmN0aW9ucyBjYW4gY2FsbCBlYWNoIG90aGVyIGFuZCBjb250aW51ZSB0aGUgcGFyc2luZyBieVxuICogdXNpbmcgdGhlIHJldHVybmVkIHBvc2l0aW9uIGFzIGEgbmV3IHN0YXJ0aW5nIHBvaW50LlxuICpcbiAqIFRoZXJlIGFyZSBhbHNvIGV4dHJhIGAuaGFuZGxlLi4uYCBmdW5jdGlvbnMsIHdoaWNoIHB1bGwgb3V0IHNvbWUgcmV1c2VkXG4gKiBmdW5jdGlvbmFsaXR5IGludG8gc2VsZi1jb250YWluZWQgZnVuY3Rpb25zLlxuICpcbiAqIFRoZSBmdW5jdGlvbnMgcmV0dXJuIFBhcnNlTm9kZXMuXG4gKi9cbnZhciBQYXJzZXJfUGFyc2VyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUGFyc2VyKGlucHV0LCBzZXR0aW5ncykge1xuICAgIHRoaXMubW9kZSA9IHZvaWQgMDtcbiAgICB0aGlzLmd1bGxldCA9IHZvaWQgMDtcbiAgICB0aGlzLnNldHRpbmdzID0gdm9pZCAwO1xuICAgIHRoaXMubGVmdHJpZ2h0RGVwdGggPSB2b2lkIDA7XG4gICAgdGhpcy5uZXh0VG9rZW4gPSB2b2lkIDA7XG4gICAgLy8gU3RhcnQgaW4gbWF0aCBtb2RlXG4gICAgdGhpcy5tb2RlID0gXCJtYXRoXCI7IC8vIENyZWF0ZSBhIG5ldyBtYWNybyBleHBhbmRlciAoZ3VsbGV0KSBhbmQgKGluZGlyZWN0bHkgdmlhIHRoYXQpIGFsc28gYVxuICAgIC8vIG5ldyBsZXhlciAobW91dGgpIGZvciB0aGlzIHBhcnNlciAoc3RvbWFjaCwgaW4gdGhlIGxhbmd1YWdlIG9mIFRlWClcblxuICAgIHRoaXMuZ3VsbGV0ID0gbmV3IE1hY3JvRXhwYW5kZXJfTWFjcm9FeHBhbmRlcihpbnB1dCwgc2V0dGluZ3MsIHRoaXMubW9kZSk7IC8vIFN0b3JlIHRoZSBzZXR0aW5ncyBmb3IgdXNlIGluIHBhcnNpbmdcblxuICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5nczsgLy8gQ291bnQgbGVmdHJpZ2h0IGRlcHRoIChmb3IgXFxtaWRkbGUgZXJyb3JzKVxuXG4gICAgdGhpcy5sZWZ0cmlnaHREZXB0aCA9IDA7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrcyBhIHJlc3VsdCB0byBtYWtlIHN1cmUgaXQgaGFzIHRoZSByaWdodCB0eXBlLCBhbmQgdGhyb3dzIGFuXG4gICAqIGFwcHJvcHJpYXRlIGVycm9yIG90aGVyd2lzZS5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gUGFyc2VyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZXhwZWN0ID0gZnVuY3Rpb24gZXhwZWN0KHRleHQsIGNvbnN1bWUpIHtcbiAgICBpZiAoY29uc3VtZSA9PT0gdm9pZCAwKSB7XG4gICAgICBjb25zdW1lID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5uZXh0VG9rZW4udGV4dCAhPT0gdGV4dCkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiRXhwZWN0ZWQgJ1wiICsgdGV4dCArIFwiJywgZ290ICdcIiArIHRoaXMubmV4dFRva2VuLnRleHQgKyBcIidcIiwgdGhpcy5uZXh0VG9rZW4pO1xuICAgIH1cblxuICAgIGlmIChjb25zdW1lKSB7XG4gICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENvbnNpZGVycyB0aGUgY3VycmVudCBsb29rIGFoZWFkIHRva2VuIGFzIGNvbnN1bWVkLFxuICAgKiBhbmQgZmV0Y2hlcyB0aGUgb25lIGFmdGVyIHRoYXQgYXMgdGhlIG5ldyBsb29rIGFoZWFkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jb25zdW1lID0gZnVuY3Rpb24gY29uc3VtZSgpIHtcbiAgICB0aGlzLm5leHRUb2tlbiA9IHRoaXMuZ3VsbGV0LmV4cGFuZE5leHRUb2tlbigpO1xuICB9XG4gIC8qKlxuICAgKiBTd2l0Y2hlcyBiZXR3ZWVuIFwidGV4dFwiIGFuZCBcIm1hdGhcIiBtb2Rlcy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uc3dpdGNoTW9kZSA9IGZ1bmN0aW9uIHN3aXRjaE1vZGUobmV3TW9kZSkge1xuICAgIHRoaXMubW9kZSA9IG5ld01vZGU7XG4gICAgdGhpcy5ndWxsZXQuc3dpdGNoTW9kZShuZXdNb2RlKTtcbiAgfVxuICAvKipcbiAgICogTWFpbiBwYXJzaW5nIGZ1bmN0aW9uLCB3aGljaCBwYXJzZXMgYW4gZW50aXJlIGlucHV0LlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKCkge1xuICAgIC8vIENyZWF0ZSBhIGdyb3VwIG5hbWVzcGFjZSBmb3IgdGhlIG1hdGggZXhwcmVzc2lvbi5cbiAgICAvLyAoTGFUZVggY3JlYXRlcyBhIG5ldyBncm91cCBmb3IgZXZlcnkgJC4uLiQsICQkLi4uJCQsIFxcWy4uLlxcXS4pXG4gICAgdGhpcy5ndWxsZXQuYmVnaW5Hcm91cCgpOyAvLyBVc2Ugb2xkIFxcY29sb3IgYmVoYXZpb3IgKHNhbWUgYXMgTGFUZVgncyBcXHRleHRjb2xvcikgaWYgcmVxdWVzdGVkLlxuICAgIC8vIFdlIGRvIHRoaXMgd2l0aGluIHRoZSBncm91cCBmb3IgdGhlIG1hdGggZXhwcmVzc2lvbiwgc28gaXQgZG9lc24ndFxuICAgIC8vIHBvbGx1dGUgc2V0dGluZ3MubWFjcm9zLlxuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MuY29sb3JJc1RleHRDb2xvcikge1xuICAgICAgdGhpcy5ndWxsZXQubWFjcm9zLnNldChcIlxcXFxjb2xvclwiLCBcIlxcXFx0ZXh0Y29sb3JcIik7XG4gICAgfSAvLyBUcnkgdG8gcGFyc2UgdGhlIGlucHV0XG5cblxuICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIHZhciBwYXJzZSA9IHRoaXMucGFyc2VFeHByZXNzaW9uKGZhbHNlKTsgLy8gSWYgd2Ugc3VjY2VlZGVkLCBtYWtlIHN1cmUgdGhlcmUncyBhbiBFT0YgYXQgdGhlIGVuZFxuXG4gICAgdGhpcy5leHBlY3QoXCJFT0ZcIiwgZmFsc2UpOyAvLyBFbmQgdGhlIGdyb3VwIG5hbWVzcGFjZSBmb3IgdGhlIGV4cHJlc3Npb25cblxuICAgIHRoaXMuZ3VsbGV0LmVuZEdyb3VwKCk7XG4gICAgcmV0dXJuIHBhcnNlO1xuICB9O1xuXG4gIF9wcm90by5wYXJzZUV4cHJlc3Npb24gPSBmdW5jdGlvbiBwYXJzZUV4cHJlc3Npb24oYnJlYWtPbkluZml4LCBicmVha09uVG9rZW5UZXh0KSB7XG4gICAgdmFyIGJvZHkgPSBbXTsgLy8gS2VlcCBhZGRpbmcgYXRvbXMgdG8gdGhlIGJvZHkgdW50aWwgd2UgY2FuJ3QgcGFyc2UgYW55IG1vcmUgYXRvbXMgKGVpdGhlclxuICAgIC8vIHdlIHJlYWNoZWQgdGhlIGVuZCwgYSB9LCBvciBhIFxccmlnaHQpXG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgLy8gSWdub3JlIHNwYWNlcyBpbiBtYXRoIG1vZGVcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09IFwibWF0aFwiKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZVNwYWNlcygpO1xuICAgICAgfVxuXG4gICAgICB2YXIgbGV4ID0gdGhpcy5uZXh0VG9rZW47XG5cbiAgICAgIGlmIChQYXJzZXIuZW5kT2ZFeHByZXNzaW9uLmluZGV4T2YobGV4LnRleHQpICE9PSAtMSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGJyZWFrT25Ub2tlblRleHQgJiYgbGV4LnRleHQgPT09IGJyZWFrT25Ub2tlblRleHQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChicmVha09uSW5maXggJiYgc3JjX2Z1bmN0aW9uc1tsZXgudGV4dF0gJiYgc3JjX2Z1bmN0aW9uc1tsZXgudGV4dF0uaW5maXgpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHZhciBhdG9tID0gdGhpcy5wYXJzZUF0b20oYnJlYWtPblRva2VuVGV4dCk7XG5cbiAgICAgIGlmICghYXRvbSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgYm9keS5wdXNoKGF0b20pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1vZGUgPT09IFwidGV4dFwiKSB7XG4gICAgICB0aGlzLmZvcm1MaWdhdHVyZXMoYm9keSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlSW5maXhOb2Rlcyhib2R5KTtcbiAgfVxuICAvKipcbiAgICogUmV3cml0ZXMgaW5maXggb3BlcmF0b3JzIHN1Y2ggYXMgXFxvdmVyIHdpdGggY29ycmVzcG9uZGluZyBjb21tYW5kcyBzdWNoXG4gICAqIGFzIFxcZnJhYy5cbiAgICpcbiAgICogVGhlcmUgY2FuIG9ubHkgYmUgb25lIGluZml4IG9wZXJhdG9yIHBlciBncm91cC4gIElmIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZVxuICAgKiB0aGVuIHRoZSBleHByZXNzaW9uIGlzIGFtYmlndW91cy4gIFRoaXMgY2FuIGJlIHJlc29sdmVkIGJ5IGFkZGluZyB7fS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlSW5maXhOb2RlcyA9IGZ1bmN0aW9uIGhhbmRsZUluZml4Tm9kZXMoYm9keSkge1xuICAgIHZhciBvdmVySW5kZXggPSAtMTtcbiAgICB2YXIgZnVuY05hbWU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvZHkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBub2RlID0gY2hlY2tOb2RlVHlwZShib2R5W2ldLCBcImluZml4XCIpO1xuXG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICBpZiAob3ZlckluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIm9ubHkgb25lIGluZml4IG9wZXJhdG9yIHBlciBncm91cFwiLCBub2RlLnRva2VuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG92ZXJJbmRleCA9IGk7XG4gICAgICAgIGZ1bmNOYW1lID0gbm9kZS5yZXBsYWNlV2l0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3ZlckluZGV4ICE9PSAtMSAmJiBmdW5jTmFtZSkge1xuICAgICAgdmFyIG51bWVyTm9kZTtcbiAgICAgIHZhciBkZW5vbU5vZGU7XG4gICAgICB2YXIgbnVtZXJCb2R5ID0gYm9keS5zbGljZSgwLCBvdmVySW5kZXgpO1xuICAgICAgdmFyIGRlbm9tQm9keSA9IGJvZHkuc2xpY2Uob3ZlckluZGV4ICsgMSk7XG5cbiAgICAgIGlmIChudW1lckJvZHkubGVuZ3RoID09PSAxICYmIG51bWVyQm9keVswXS50eXBlID09PSBcIm9yZGdyb3VwXCIpIHtcbiAgICAgICAgbnVtZXJOb2RlID0gbnVtZXJCb2R5WzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbnVtZXJOb2RlID0ge1xuICAgICAgICAgIHR5cGU6IFwib3JkZ3JvdXBcIixcbiAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgYm9keTogbnVtZXJCb2R5XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChkZW5vbUJvZHkubGVuZ3RoID09PSAxICYmIGRlbm9tQm9keVswXS50eXBlID09PSBcIm9yZGdyb3VwXCIpIHtcbiAgICAgICAgZGVub21Ob2RlID0gZGVub21Cb2R5WzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVub21Ob2RlID0ge1xuICAgICAgICAgIHR5cGU6IFwib3JkZ3JvdXBcIixcbiAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgYm9keTogZGVub21Cb2R5XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciBfbm9kZTtcblxuICAgICAgaWYgKGZ1bmNOYW1lID09PSBcIlxcXFxcXFxcYWJvdmVmcmFjXCIpIHtcbiAgICAgICAgX25vZGUgPSB0aGlzLmNhbGxGdW5jdGlvbihmdW5jTmFtZSwgW251bWVyTm9kZSwgYm9keVtvdmVySW5kZXhdLCBkZW5vbU5vZGVdLCBbXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfbm9kZSA9IHRoaXMuY2FsbEZ1bmN0aW9uKGZ1bmNOYW1lLCBbbnVtZXJOb2RlLCBkZW5vbU5vZGVdLCBbXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbX25vZGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYm9keTtcbiAgICB9XG4gIH0gLy8gVGhlIGdyZWVkaW5lc3Mgb2YgYSBzdXBlcnNjcmlwdCBvciBzdWJzY3JpcHRcbiAgO1xuXG4gIC8qKlxuICAgKiBIYW5kbGUgYSBzdWJzY3JpcHQgb3Igc3VwZXJzY3JpcHQgd2l0aCBuaWNlIGVycm9ycy5cbiAgICovXG4gIF9wcm90by5oYW5kbGVTdXBTdWJzY3JpcHQgPSBmdW5jdGlvbiBoYW5kbGVTdXBTdWJzY3JpcHQobmFtZSkge1xuICAgIHZhciBzeW1ib2xUb2tlbiA9IHRoaXMubmV4dFRva2VuO1xuICAgIHZhciBzeW1ib2wgPSBzeW1ib2xUb2tlbi50ZXh0O1xuICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIHRoaXMuY29uc3VtZVNwYWNlcygpOyAvLyBpZ25vcmUgc3BhY2VzIGJlZm9yZSBzdXAvc3Vic2NyaXB0IGFyZ3VtZW50XG5cbiAgICB2YXIgZ3JvdXAgPSB0aGlzLnBhcnNlR3JvdXAobmFtZSwgZmFsc2UsIFBhcnNlci5TVVBTVUJfR1JFRURJTkVTUyk7XG5cbiAgICBpZiAoIWdyb3VwKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJFeHBlY3RlZCBncm91cCBhZnRlciAnXCIgKyBzeW1ib2wgKyBcIidcIiwgc3ltYm9sVG9rZW4pO1xuICAgIH1cblxuICAgIHJldHVybiBncm91cDtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIHRleHR1YWwgaW5wdXQgb2YgYW4gdW5zdXBwb3J0ZWQgY29tbWFuZCBpbnRvIGEgdGV4dCBub2RlXG4gICAqIGNvbnRhaW5lZCB3aXRoaW4gYSBjb2xvciBub2RlIHdob3NlIGNvbG9yIGlzIGRldGVybWluZWQgYnkgZXJyb3JDb2xvclxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5mb3JtYXRVbnN1cHBvcnRlZENtZCA9IGZ1bmN0aW9uIGZvcm1hdFVuc3VwcG9ydGVkQ21kKHRleHQpIHtcbiAgICB2YXIgdGV4dG9yZEFycmF5ID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRleHRvcmRBcnJheS5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICB0ZXh0OiB0ZXh0W2ldXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgdGV4dE5vZGUgPSB7XG4gICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIGJvZHk6IHRleHRvcmRBcnJheVxuICAgIH07XG4gICAgdmFyIGNvbG9yTm9kZSA9IHtcbiAgICAgIHR5cGU6IFwiY29sb3JcIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIGNvbG9yOiB0aGlzLnNldHRpbmdzLmVycm9yQ29sb3IsXG4gICAgICBib2R5OiBbdGV4dE5vZGVdXG4gICAgfTtcbiAgICByZXR1cm4gY29sb3JOb2RlO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgYSBncm91cCB3aXRoIG9wdGlvbmFsIHN1cGVyL3N1YnNjcmlwdHMuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnBhcnNlQXRvbSA9IGZ1bmN0aW9uIHBhcnNlQXRvbShicmVha09uVG9rZW5UZXh0KSB7XG4gICAgLy8gVGhlIGJvZHkgb2YgYW4gYXRvbSBpcyBhbiBpbXBsaWNpdCBncm91cCwgc28gdGhhdCB0aGluZ3MgbGlrZVxuICAgIC8vIFxcbGVmdCh4XFxyaWdodCleMiB3b3JrIGNvcnJlY3RseS5cbiAgICB2YXIgYmFzZSA9IHRoaXMucGFyc2VHcm91cChcImF0b21cIiwgZmFsc2UsIG51bGwsIGJyZWFrT25Ub2tlblRleHQpOyAvLyBJbiB0ZXh0IG1vZGUsIHdlIGRvbid0IGhhdmUgc3VwZXJzY3JpcHRzIG9yIHN1YnNjcmlwdHNcblxuICAgIGlmICh0aGlzLm1vZGUgPT09IFwidGV4dFwiKSB7XG4gICAgICByZXR1cm4gYmFzZTtcbiAgICB9IC8vIE5vdGUgdGhhdCBiYXNlIG1heSBiZSBlbXB0eSAoaS5lLiBudWxsKSBhdCB0aGlzIHBvaW50LlxuXG5cbiAgICB2YXIgc3VwZXJzY3JpcHQ7XG4gICAgdmFyIHN1YnNjcmlwdDtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAvLyBHdWFyYW50ZWVkIGluIG1hdGggbW9kZSwgc28gZWF0IGFueSBzcGFjZXMgZmlyc3QuXG4gICAgICB0aGlzLmNvbnN1bWVTcGFjZXMoKTsgLy8gTGV4IHRoZSBmaXJzdCB0b2tlblxuXG4gICAgICB2YXIgbGV4ID0gdGhpcy5uZXh0VG9rZW47XG5cbiAgICAgIGlmIChsZXgudGV4dCA9PT0gXCJcXFxcbGltaXRzXCIgfHwgbGV4LnRleHQgPT09IFwiXFxcXG5vbGltaXRzXCIpIHtcbiAgICAgICAgLy8gV2UgZ290IGEgbGltaXQgY29udHJvbFxuICAgICAgICB2YXIgb3BOb2RlID0gY2hlY2tOb2RlVHlwZShiYXNlLCBcIm9wXCIpO1xuXG4gICAgICAgIGlmIChvcE5vZGUpIHtcbiAgICAgICAgICB2YXIgbGltaXRzID0gbGV4LnRleHQgPT09IFwiXFxcXGxpbWl0c1wiO1xuICAgICAgICAgIG9wTm9kZS5saW1pdHMgPSBsaW1pdHM7XG4gICAgICAgICAgb3BOb2RlLmFsd2F5c0hhbmRsZVN1cFN1YiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3BOb2RlID0gY2hlY2tOb2RlVHlwZShiYXNlLCBcIm9wZXJhdG9ybmFtZVwiKTtcblxuICAgICAgICAgIGlmIChvcE5vZGUgJiYgb3BOb2RlLmFsd2F5c0hhbmRsZVN1cFN1Yikge1xuICAgICAgICAgICAgdmFyIF9saW1pdHMgPSBsZXgudGV4dCA9PT0gXCJcXFxcbGltaXRzXCI7XG5cbiAgICAgICAgICAgIG9wTm9kZS5saW1pdHMgPSBfbGltaXRzO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJMaW1pdCBjb250cm9scyBtdXN0IGZvbGxvdyBhIG1hdGggb3BlcmF0b3JcIiwgbGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgIH0gZWxzZSBpZiAobGV4LnRleHQgPT09IFwiXlwiKSB7XG4gICAgICAgIC8vIFdlIGdvdCBhIHN1cGVyc2NyaXB0IHN0YXJ0XG4gICAgICAgIGlmIChzdXBlcnNjcmlwdCkge1xuICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkRvdWJsZSBzdXBlcnNjcmlwdFwiLCBsZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXJzY3JpcHQgPSB0aGlzLmhhbmRsZVN1cFN1YnNjcmlwdChcInN1cGVyc2NyaXB0XCIpO1xuICAgICAgfSBlbHNlIGlmIChsZXgudGV4dCA9PT0gXCJfXCIpIHtcbiAgICAgICAgLy8gV2UgZ290IGEgc3Vic2NyaXB0IHN0YXJ0XG4gICAgICAgIGlmIChzdWJzY3JpcHQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJEb3VibGUgc3Vic2NyaXB0XCIsIGxleCk7XG4gICAgICAgIH1cblxuICAgICAgICBzdWJzY3JpcHQgPSB0aGlzLmhhbmRsZVN1cFN1YnNjcmlwdChcInN1YnNjcmlwdFwiKTtcbiAgICAgIH0gZWxzZSBpZiAobGV4LnRleHQgPT09IFwiJ1wiKSB7XG4gICAgICAgIC8vIFdlIGdvdCBhIHByaW1lXG4gICAgICAgIGlmIChzdXBlcnNjcmlwdCkge1xuICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkRvdWJsZSBzdXBlcnNjcmlwdFwiLCBsZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHByaW1lID0ge1xuICAgICAgICAgIHR5cGU6IFwidGV4dG9yZFwiLFxuICAgICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgICB0ZXh0OiBcIlxcXFxwcmltZVwiXG4gICAgICAgIH07IC8vIE1hbnkgcHJpbWVzIGNhbiBiZSBncm91cGVkIHRvZ2V0aGVyLCBzbyB3ZSBoYW5kbGUgdGhpcyBoZXJlXG5cbiAgICAgICAgdmFyIHByaW1lcyA9IFtwcmltZV07XG4gICAgICAgIHRoaXMuY29uc3VtZSgpOyAvLyBLZWVwIGxleGluZyB0b2tlbnMgdW50aWwgd2UgZ2V0IHNvbWV0aGluZyB0aGF0J3Mgbm90IGEgcHJpbWVcblxuICAgICAgICB3aGlsZSAodGhpcy5uZXh0VG9rZW4udGV4dCA9PT0gXCInXCIpIHtcbiAgICAgICAgICAvLyBGb3IgZWFjaCBvbmUsIGFkZCBhbm90aGVyIHByaW1lIHRvIHRoZSBsaXN0XG4gICAgICAgICAgcHJpbWVzLnB1c2gocHJpbWUpO1xuICAgICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICB9IC8vIElmIHRoZXJlJ3MgYSBzdXBlcnNjcmlwdCBmb2xsb3dpbmcgdGhlIHByaW1lcywgY29tYmluZSB0aGF0XG4gICAgICAgIC8vIHN1cGVyc2NyaXB0IGluIHdpdGggdGhlIHByaW1lcy5cblxuXG4gICAgICAgIGlmICh0aGlzLm5leHRUb2tlbi50ZXh0ID09PSBcIl5cIikge1xuICAgICAgICAgIHByaW1lcy5wdXNoKHRoaXMuaGFuZGxlU3VwU3Vic2NyaXB0KFwic3VwZXJzY3JpcHRcIikpO1xuICAgICAgICB9IC8vIFB1dCBldmVyeXRoaW5nIGludG8gYW4gb3JkZ3JvdXAgYXMgdGhlIHN1cGVyc2NyaXB0XG5cblxuICAgICAgICBzdXBlcnNjcmlwdCA9IHtcbiAgICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgICAgIGJvZHk6IHByaW1lc1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgaXQgd2Fzbid0IF4sIF8sIG9yICcsIHN0b3AgcGFyc2luZyBzdXBlci9zdWJzY3JpcHRzXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gLy8gQmFzZSBtdXN0IGJlIHNldCBpZiBzdXBlcnNjcmlwdCBvciBzdWJzY3JpcHQgYXJlIHNldCBwZXIgbG9naWMgYWJvdmUsXG4gICAgLy8gYnV0IG5lZWQgdG8gY2hlY2sgaGVyZSBmb3IgdHlwZSBjaGVjayB0byBwYXNzLlxuXG5cbiAgICBpZiAoc3VwZXJzY3JpcHQgfHwgc3Vic2NyaXB0KSB7XG4gICAgICAvLyBJZiB3ZSBnb3QgZWl0aGVyIGEgc3VwZXJzY3JpcHQgb3Igc3Vic2NyaXB0LCBjcmVhdGUgYSBzdXBzdWJcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwic3Vwc3ViXCIsXG4gICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgYmFzZTogYmFzZSxcbiAgICAgICAgc3VwOiBzdXBlcnNjcmlwdCxcbiAgICAgICAgc3ViOiBzdWJzY3JpcHRcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyd2lzZSByZXR1cm4gdGhlIG9yaWdpbmFsIGJvZHlcbiAgICAgIHJldHVybiBiYXNlO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGFuIGVudGlyZSBmdW5jdGlvbiwgaW5jbHVkaW5nIGl0cyBiYXNlIGFuZCBhbGwgb2YgaXRzIGFyZ3VtZW50cy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ucGFyc2VGdW5jdGlvbiA9IGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb24oYnJlYWtPblRva2VuVGV4dCwgbmFtZSwgLy8gRm9yIGVycm9yIHJlcG9ydGluZy5cbiAgZ3JlZWRpbmVzcykge1xuICAgIHZhciB0b2tlbiA9IHRoaXMubmV4dFRva2VuO1xuICAgIHZhciBmdW5jID0gdG9rZW4udGV4dDtcbiAgICB2YXIgZnVuY0RhdGEgPSBzcmNfZnVuY3Rpb25zW2Z1bmNdO1xuXG4gICAgaWYgKCFmdW5jRGF0YSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGdyZWVkaW5lc3MgIT0gbnVsbCAmJiBmdW5jRGF0YS5ncmVlZGluZXNzIDw9IGdyZWVkaW5lc3MpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkdvdCBmdW5jdGlvbiAnXCIgKyBmdW5jICsgXCInIHdpdGggbm8gYXJndW1lbnRzXCIgKyAobmFtZSA/IFwiIGFzIFwiICsgbmFtZSA6IFwiXCIpLCB0b2tlbik7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09IFwidGV4dFwiICYmICFmdW5jRGF0YS5hbGxvd2VkSW5UZXh0KSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJDYW4ndCB1c2UgZnVuY3Rpb24gJ1wiICsgZnVuYyArIFwiJyBpbiB0ZXh0IG1vZGVcIiwgdG9rZW4pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSBcIm1hdGhcIiAmJiBmdW5jRGF0YS5hbGxvd2VkSW5NYXRoID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiQ2FuJ3QgdXNlIGZ1bmN0aW9uICdcIiArIGZ1bmMgKyBcIicgaW4gbWF0aCBtb2RlXCIsIHRva2VuKTtcbiAgICB9IC8vIGh5cGVycmVmIHBhY2thZ2Ugc2V0cyB0aGUgY2F0Y29kZSBvZiAlIGFzIGFuIGFjdGl2ZSBjaGFyYWN0ZXJcblxuXG4gICAgaWYgKGZ1bmNEYXRhLmFyZ1R5cGVzICYmIGZ1bmNEYXRhLmFyZ1R5cGVzWzBdID09PSBcInVybFwiKSB7XG4gICAgICB0aGlzLmd1bGxldC5sZXhlci5zZXRDYXRjb2RlKFwiJVwiLCAxMyk7XG4gICAgfSAvLyBDb25zdW1lIHRoZSBjb21tYW5kIHRva2VuIGFmdGVyIHBvc3NpYmx5IHN3aXRjaGluZyB0byB0aGVcbiAgICAvLyBtb2RlIHNwZWNpZmllZCBieSB0aGUgZnVuY3Rpb24gKGZvciBpbnN0YW50IG1vZGUgc3dpdGNoaW5nKSxcbiAgICAvLyBhbmQgdGhlbiBpbW1lZGlhdGVseSBzd2l0Y2ggYmFjay5cblxuXG4gICAgaWYgKGZ1bmNEYXRhLmNvbnN1bWVNb2RlKSB7XG4gICAgICB2YXIgb2xkTW9kZSA9IHRoaXMubW9kZTtcbiAgICAgIHRoaXMuc3dpdGNoTW9kZShmdW5jRGF0YS5jb25zdW1lTW9kZSk7XG4gICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgIHRoaXMuc3dpdGNoTW9kZShvbGRNb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgfVxuXG4gICAgdmFyIF90aGlzJHBhcnNlQXJndW1lbnRzID0gdGhpcy5wYXJzZUFyZ3VtZW50cyhmdW5jLCBmdW5jRGF0YSksXG4gICAgICAgIGFyZ3MgPSBfdGhpcyRwYXJzZUFyZ3VtZW50cy5hcmdzLFxuICAgICAgICBvcHRBcmdzID0gX3RoaXMkcGFyc2VBcmd1bWVudHMub3B0QXJncztcblxuICAgIHJldHVybiB0aGlzLmNhbGxGdW5jdGlvbihmdW5jLCBhcmdzLCBvcHRBcmdzLCB0b2tlbiwgYnJlYWtPblRva2VuVGV4dCk7XG4gIH1cbiAgLyoqXG4gICAqIENhbGwgYSBmdW5jdGlvbiBoYW5kbGVyIHdpdGggYSBzdWl0YWJsZSBjb250ZXh0IGFuZCBhcmd1bWVudHMuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmNhbGxGdW5jdGlvbiA9IGZ1bmN0aW9uIGNhbGxGdW5jdGlvbihuYW1lLCBhcmdzLCBvcHRBcmdzLCB0b2tlbiwgYnJlYWtPblRva2VuVGV4dCkge1xuICAgIHZhciBjb250ZXh0ID0ge1xuICAgICAgZnVuY05hbWU6IG5hbWUsXG4gICAgICBwYXJzZXI6IHRoaXMsXG4gICAgICB0b2tlbjogdG9rZW4sXG4gICAgICBicmVha09uVG9rZW5UZXh0OiBicmVha09uVG9rZW5UZXh0XG4gICAgfTtcbiAgICB2YXIgZnVuYyA9IHNyY19mdW5jdGlvbnNbbmFtZV07XG5cbiAgICBpZiAoZnVuYyAmJiBmdW5jLmhhbmRsZXIpIHtcbiAgICAgIHJldHVybiBmdW5jLmhhbmRsZXIoY29udGV4dCwgYXJncywgb3B0QXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIk5vIGZ1bmN0aW9uIGhhbmRsZXIgZm9yIFwiICsgbmFtZSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgdGhlIGFyZ3VtZW50cyBvZiBhIGZ1bmN0aW9uIG9yIGVudmlyb25tZW50XG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnBhcnNlQXJndW1lbnRzID0gZnVuY3Rpb24gcGFyc2VBcmd1bWVudHMoZnVuYywgLy8gU2hvdWxkIGxvb2sgbGlrZSBcIlxcbmFtZVwiIG9yIFwiXFxiZWdpbntuYW1lfVwiLlxuICBmdW5jRGF0YSkge1xuICAgIHZhciB0b3RhbEFyZ3MgPSBmdW5jRGF0YS5udW1BcmdzICsgZnVuY0RhdGEubnVtT3B0aW9uYWxBcmdzO1xuXG4gICAgaWYgKHRvdGFsQXJncyA9PT0gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYXJnczogW10sXG4gICAgICAgIG9wdEFyZ3M6IFtdXG4gICAgICB9O1xuICAgIH1cblxuICAgIHZhciBiYXNlR3JlZWRpbmVzcyA9IGZ1bmNEYXRhLmdyZWVkaW5lc3M7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgb3B0QXJncyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEFyZ3M7IGkrKykge1xuICAgICAgdmFyIGFyZ1R5cGUgPSBmdW5jRGF0YS5hcmdUeXBlcyAmJiBmdW5jRGF0YS5hcmdUeXBlc1tpXTtcbiAgICAgIHZhciBpc09wdGlvbmFsID0gaSA8IGZ1bmNEYXRhLm51bU9wdGlvbmFsQXJnczsgLy8gSWdub3JlIHNwYWNlcyBiZXR3ZWVuIGFyZ3VtZW50cy4gIEFzIHRoZSBUZVhib29rIHNheXM6XG4gICAgICAvLyBcIkFmdGVyIHlvdSBoYXZlIHNhaWQg4oCYXFxkZWZcXHJvdyMxIzJ7Li4ufeKAmSwgeW91IGFyZSBhbGxvd2VkIHRvXG4gICAgICAvLyAgcHV0IHNwYWNlcyBiZXR3ZWVuIHRoZSBhcmd1bWVudHMgKGUuZy4sIOKAmFxccm93IHggbuKAmSksIGJlY2F1c2VcbiAgICAgIC8vICBUZVggZG9lc27igJl0IHVzZSBzaW5nbGUgc3BhY2VzIGFzIHVuZGVsaW1pdGVkIGFyZ3VtZW50cy5cIlxuXG4gICAgICBpZiAoaSA+IDAgJiYgIWlzT3B0aW9uYWwpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lU3BhY2VzKCk7XG4gICAgICB9IC8vIEFsc28gY29uc3VtZSBsZWFkaW5nIHNwYWNlcyBpbiBtYXRoIG1vZGUsIGFzIHBhcnNlU3ltYm9sXG4gICAgICAvLyB3b24ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCB0aGVtLiAgVGhpcyBjYW4gb25seSBoYXBwZW4gd2l0aFxuICAgICAgLy8gbWFjcm9zLCBlLmcuIFxcZnJhY1xcZm9vXFxmb28gd2hlcmUgXFxmb28gZXhwYW5kcyB0byBhIHNwYWNlIHN5bWJvbC5cbiAgICAgIC8vIEluIExhVGVYLCB0aGUgXFxmb28ncyBnZXQgdHJlYXRlZCBhcyAoYmxhbmspIGFyZ3VtZW50cykuXG4gICAgICAvLyBJbiBLYVRlWCwgZm9yIG5vdywgYm90aCBzcGFjZXMgd2lsbCBnZXQgY29uc3VtZWQuXG4gICAgICAvLyBUT0RPKGVkZW1haW5lKVxuXG5cbiAgICAgIGlmIChpID09PSAwICYmICFpc09wdGlvbmFsICYmIHRoaXMubW9kZSA9PT0gXCJtYXRoXCIpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lU3BhY2VzKCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXh0VG9rZW4gPSB0aGlzLm5leHRUb2tlbjtcbiAgICAgIHZhciBhcmcgPSB0aGlzLnBhcnNlR3JvdXBPZlR5cGUoXCJhcmd1bWVudCB0byAnXCIgKyBmdW5jICsgXCInXCIsIGFyZ1R5cGUsIGlzT3B0aW9uYWwsIGJhc2VHcmVlZGluZXNzKTtcblxuICAgICAgaWYgKCFhcmcpIHtcbiAgICAgICAgaWYgKGlzT3B0aW9uYWwpIHtcbiAgICAgICAgICBvcHRBcmdzLnB1c2gobnVsbCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJFeHBlY3RlZCBncm91cCBhZnRlciAnXCIgKyBmdW5jICsgXCInXCIsIG5leHRUb2tlbik7XG4gICAgICB9XG5cbiAgICAgIChpc09wdGlvbmFsID8gb3B0QXJncyA6IGFyZ3MpLnB1c2goYXJnKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYXJnczogYXJncyxcbiAgICAgIG9wdEFyZ3M6IG9wdEFyZ3NcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgYSBncm91cCB3aGVuIHRoZSBtb2RlIGlzIGNoYW5naW5nLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5wYXJzZUdyb3VwT2ZUeXBlID0gZnVuY3Rpb24gcGFyc2VHcm91cE9mVHlwZShuYW1lLCB0eXBlLCBvcHRpb25hbCwgZ3JlZWRpbmVzcykge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcImNvbG9yXCI6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlQ29sb3JHcm91cChvcHRpb25hbCk7XG5cbiAgICAgIGNhc2UgXCJzaXplXCI6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlU2l6ZUdyb3VwKG9wdGlvbmFsKTtcblxuICAgICAgY2FzZSBcInVybFwiOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVVybEdyb3VwKG9wdGlvbmFsKTtcblxuICAgICAgY2FzZSBcIm1hdGhcIjpcbiAgICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlR3JvdXAobmFtZSwgb3B0aW9uYWwsIGdyZWVkaW5lc3MsIHVuZGVmaW5lZCwgdHlwZSk7XG5cbiAgICAgIGNhc2UgXCJoYm94XCI6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBoYm94IGFyZ3VtZW50IHR5cGUgd3JhcHMgdGhlIGFyZ3VtZW50IGluIHRoZSBlcXVpdmFsZW50IG9mXG4gICAgICAgICAgLy8gXFxoYm94LCB3aGljaCBpcyBsaWtlIFxcdGV4dCBidXQgc3dpdGNoaW5nIHRvIFxcdGV4dHN0eWxlIHNpemUuXG4gICAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5wYXJzZUdyb3VwKG5hbWUsIG9wdGlvbmFsLCBncmVlZGluZXNzLCB1bmRlZmluZWQsIFwidGV4dFwiKTtcblxuICAgICAgICAgIGlmICghZ3JvdXApIHtcbiAgICAgICAgICAgIHJldHVybiBncm91cDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc3R5bGVkR3JvdXAgPSB7XG4gICAgICAgICAgICB0eXBlOiBcInN0eWxpbmdcIixcbiAgICAgICAgICAgIG1vZGU6IGdyb3VwLm1vZGUsXG4gICAgICAgICAgICBib2R5OiBbZ3JvdXBdLFxuICAgICAgICAgICAgc3R5bGU6IFwidGV4dFwiIC8vIHNpbXVsYXRlIFxcdGV4dHN0eWxlXG5cbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBzdHlsZWRHcm91cDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFwicmF3XCI6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAob3B0aW9uYWwgJiYgdGhpcy5uZXh0VG9rZW4udGV4dCA9PT0gXCJ7XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMucGFyc2VTdHJpbmdHcm91cChcInJhd1wiLCBvcHRpb25hbCwgdHJ1ZSk7XG5cbiAgICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwicmF3XCIsXG4gICAgICAgICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICBzdHJpbmc6IHRva2VuLnRleHRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkV4cGVjdGVkIHJhdyBncm91cFwiLCB0aGlzLm5leHRUb2tlbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgXCJvcmlnaW5hbFwiOlxuICAgICAgY2FzZSBudWxsOlxuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlR3JvdXAobmFtZSwgb3B0aW9uYWwsIGdyZWVkaW5lc3MpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJVbmtub3duIGdyb3VwIHR5cGUgYXMgXCIgKyBuYW1lLCB0aGlzLm5leHRUb2tlbik7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jb25zdW1lU3BhY2VzID0gZnVuY3Rpb24gY29uc3VtZVNwYWNlcygpIHtcbiAgICB3aGlsZSAodGhpcy5uZXh0VG9rZW4udGV4dCA9PT0gXCIgXCIpIHtcbiAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGEgZ3JvdXAsIGVzc2VudGlhbGx5IHJldHVybmluZyB0aGUgc3RyaW5nIGZvcm1lZCBieSB0aGVcbiAgICogYnJhY2UtZW5jbG9zZWQgdG9rZW5zIHBsdXMgc29tZSBwb3NpdGlvbiBpbmZvcm1hdGlvbi5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ucGFyc2VTdHJpbmdHcm91cCA9IGZ1bmN0aW9uIHBhcnNlU3RyaW5nR3JvdXAobW9kZU5hbWUsIC8vIFVzZWQgdG8gZGVzY3JpYmUgdGhlIG1vZGUgaW4gZXJyb3IgbWVzc2FnZXMuXG4gIG9wdGlvbmFsLCByYXcpIHtcbiAgICB2YXIgZ3JvdXBCZWdpbiA9IG9wdGlvbmFsID8gXCJbXCIgOiBcIntcIjtcbiAgICB2YXIgZ3JvdXBFbmQgPSBvcHRpb25hbCA/IFwiXVwiIDogXCJ9XCI7XG4gICAgdmFyIG5leHRUb2tlbiA9IHRoaXMubmV4dFRva2VuO1xuXG4gICAgaWYgKG5leHRUb2tlbi50ZXh0ICE9PSBncm91cEJlZ2luKSB7XG4gICAgICBpZiAob3B0aW9uYWwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHJhdyAmJiBuZXh0VG9rZW4udGV4dCAhPT0gXCJFT0ZcIiAmJiAvW157fVtcXF1dLy50ZXN0KG5leHRUb2tlbi50ZXh0KSkge1xuICAgICAgICAvLyBhbGxvdyBhIHNpbmdsZSBjaGFyYWN0ZXIgaW4gcmF3IHN0cmluZyBncm91cFxuICAgICAgICB0aGlzLmd1bGxldC5sZXhlci5zZXRDYXRjb2RlKFwiJVwiLCAxNCk7IC8vIHJlc2V0IHRoZSBjYXRjb2RlIG9mICVcblxuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgcmV0dXJuIG5leHRUb2tlbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgb3V0ZXJNb2RlID0gdGhpcy5tb2RlO1xuICAgIHRoaXMubW9kZSA9IFwidGV4dFwiO1xuICAgIHRoaXMuZXhwZWN0KGdyb3VwQmVnaW4pO1xuICAgIHZhciBzdHIgPSBcIlwiO1xuICAgIHZhciBmaXJzdFRva2VuID0gdGhpcy5uZXh0VG9rZW47XG4gICAgdmFyIG5lc3RlZCA9IDA7IC8vIGFsbG93IG5lc3RlZCBicmFjZXMgaW4gcmF3IHN0cmluZyBncm91cFxuXG4gICAgdmFyIGxhc3RUb2tlbiA9IGZpcnN0VG9rZW47XG5cbiAgICB3aGlsZSAocmF3ICYmIG5lc3RlZCA+IDAgfHwgdGhpcy5uZXh0VG9rZW4udGV4dCAhPT0gZ3JvdXBFbmQpIHtcbiAgICAgIHN3aXRjaCAodGhpcy5uZXh0VG9rZW4udGV4dCkge1xuICAgICAgICBjYXNlIFwiRU9GXCI6XG4gICAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgaW4gXCIgKyBtb2RlTmFtZSwgZmlyc3RUb2tlbi5yYW5nZShsYXN0VG9rZW4sIHN0cikpO1xuXG4gICAgICAgIGNhc2UgZ3JvdXBCZWdpbjpcbiAgICAgICAgICBuZXN0ZWQrKztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIGdyb3VwRW5kOlxuICAgICAgICAgIG5lc3RlZC0tO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBsYXN0VG9rZW4gPSB0aGlzLm5leHRUb2tlbjtcbiAgICAgIHN0ciArPSBsYXN0VG9rZW4udGV4dDtcbiAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIH1cblxuICAgIHRoaXMubW9kZSA9IG91dGVyTW9kZTtcbiAgICB0aGlzLmd1bGxldC5sZXhlci5zZXRDYXRjb2RlKFwiJVwiLCAxNCk7IC8vIHJlc2V0IHRoZSBjYXRjb2RlIG9mICVcblxuICAgIHRoaXMuZXhwZWN0KGdyb3VwRW5kKTtcbiAgICByZXR1cm4gZmlyc3RUb2tlbi5yYW5nZShsYXN0VG9rZW4sIHN0cik7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhIHJlZ2V4LWRlbGltaXRlZCBncm91cDogdGhlIGxhcmdlc3Qgc2VxdWVuY2Ugb2YgdG9rZW5zXG4gICAqIHdob3NlIGNvbmNhdGVuYXRlZCBzdHJpbmdzIG1hdGNoIGByZWdleGAuIFJldHVybnMgdGhlIHN0cmluZ1xuICAgKiBmb3JtZWQgYnkgdGhlIHRva2VucyBwbHVzIHNvbWUgcG9zaXRpb24gaW5mb3JtYXRpb24uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnBhcnNlUmVnZXhHcm91cCA9IGZ1bmN0aW9uIHBhcnNlUmVnZXhHcm91cChyZWdleCwgbW9kZU5hbWUpIHtcbiAgICB2YXIgb3V0ZXJNb2RlID0gdGhpcy5tb2RlO1xuICAgIHRoaXMubW9kZSA9IFwidGV4dFwiO1xuICAgIHZhciBmaXJzdFRva2VuID0gdGhpcy5uZXh0VG9rZW47XG4gICAgdmFyIGxhc3RUb2tlbiA9IGZpcnN0VG9rZW47XG4gICAgdmFyIHN0ciA9IFwiXCI7XG5cbiAgICB3aGlsZSAodGhpcy5uZXh0VG9rZW4udGV4dCAhPT0gXCJFT0ZcIiAmJiByZWdleC50ZXN0KHN0ciArIHRoaXMubmV4dFRva2VuLnRleHQpKSB7XG4gICAgICBsYXN0VG9rZW4gPSB0aGlzLm5leHRUb2tlbjtcbiAgICAgIHN0ciArPSBsYXN0VG9rZW4udGV4dDtcbiAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIH1cblxuICAgIGlmIChzdHIgPT09IFwiXCIpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgXCIgKyBtb2RlTmFtZSArIFwiOiAnXCIgKyBmaXJzdFRva2VuLnRleHQgKyBcIidcIiwgZmlyc3RUb2tlbik7XG4gICAgfVxuXG4gICAgdGhpcy5tb2RlID0gb3V0ZXJNb2RlO1xuICAgIHJldHVybiBmaXJzdFRva2VuLnJhbmdlKGxhc3RUb2tlbiwgc3RyKTtcbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGEgY29sb3IgZGVzY3JpcHRpb24uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnBhcnNlQ29sb3JHcm91cCA9IGZ1bmN0aW9uIHBhcnNlQ29sb3JHcm91cChvcHRpb25hbCkge1xuICAgIHZhciByZXMgPSB0aGlzLnBhcnNlU3RyaW5nR3JvdXAoXCJjb2xvclwiLCBvcHRpb25hbCk7XG5cbiAgICBpZiAoIXJlcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIG1hdGNoID0gL14oI1thLWYwLTldezN9fCM/W2EtZjAtOV17Nn18W2Etel0rKSQvaS5leGVjKHJlcy50ZXh0KTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgY29sb3I6ICdcIiArIHJlcy50ZXh0ICsgXCInXCIsIHJlcyk7XG4gICAgfVxuXG4gICAgdmFyIGNvbG9yID0gbWF0Y2hbMF07XG5cbiAgICBpZiAoL15bMC05YS1mXXs2fSQvaS50ZXN0KGNvbG9yKSkge1xuICAgICAgLy8gV2UgYWxsb3cgYSA2LWRpZ2l0IEhUTUwgY29sb3Igc3BlYyB3aXRob3V0IGEgbGVhZGluZyBcIiNcIi5cbiAgICAgIC8vIFRoaXMgZm9sbG93cyB0aGUgeGNvbG9yIHBhY2thZ2UncyBIVE1MIGNvbG9yIG1vZGVsLlxuICAgICAgLy8gUHJlZGVmaW5lZCBjb2xvciBuYW1lcyBhcmUgYWxsIG1pc3NlZCBieSB0aGlzIFJlZ0V4IHBhdHRlcm4uXG4gICAgICBjb2xvciA9IFwiI1wiICsgY29sb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiY29sb3ItdG9rZW5cIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIGNvbG9yOiBjb2xvclxuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhIHNpemUgc3BlY2lmaWNhdGlvbiwgY29uc2lzdGluZyBvZiBtYWduaXR1ZGUgYW5kIHVuaXQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnBhcnNlU2l6ZUdyb3VwID0gZnVuY3Rpb24gcGFyc2VTaXplR3JvdXAob3B0aW9uYWwpIHtcbiAgICB2YXIgcmVzO1xuICAgIHZhciBpc0JsYW5rID0gZmFsc2U7XG5cbiAgICBpZiAoIW9wdGlvbmFsICYmIHRoaXMubmV4dFRva2VuLnRleHQgIT09IFwie1wiKSB7XG4gICAgICByZXMgPSB0aGlzLnBhcnNlUmVnZXhHcm91cCgvXlstK10/ICooPzokfFxcZCt8XFxkK1xcLlxcZCp8XFwuXFxkKikgKlthLXpdezAsMn0gKiQvLCBcInNpemVcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IHRoaXMucGFyc2VTdHJpbmdHcm91cChcInNpemVcIiwgb3B0aW9uYWwpO1xuICAgIH1cblxuICAgIGlmICghcmVzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbmFsICYmIHJlcy50ZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gQmVjYXVzZSB3ZSd2ZSB0ZXN0ZWQgZm9yIHdoYXQgaXMgIW9wdGlvbmFsLCB0aGlzIGJsb2NrIHdvbid0XG4gICAgICAvLyBhZmZlY3QgXFxrZXJuLCBcXGhzcGFjZSwgZXRjLiBJdCB3aWxsIGNhcHR1cmUgdGhlIG1hbmRhdG9yeSBhcmd1bWVudHNcbiAgICAgIC8vIHRvIFxcZ2VuZnJhYyBhbmQgXFxhYm92ZS5cbiAgICAgIHJlcy50ZXh0ID0gXCIwcHRcIjsgLy8gRW5hYmxlIFxcYWJvdmV7fVxuXG4gICAgICBpc0JsYW5rID0gdHJ1ZTsgLy8gVGhpcyBpcyBoZXJlIHNwZWNpZmljYWxseSBmb3IgXFxnZW5mcmFjXG4gICAgfVxuXG4gICAgdmFyIG1hdGNoID0gLyhbLStdPykgKihcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspICooW2Etel17Mn0pLy5leGVjKHJlcy50ZXh0KTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgc2l6ZTogJ1wiICsgcmVzLnRleHQgKyBcIidcIiwgcmVzKTtcbiAgICB9XG5cbiAgICB2YXIgZGF0YSA9IHtcbiAgICAgIG51bWJlcjogKyhtYXRjaFsxXSArIG1hdGNoWzJdKSxcbiAgICAgIC8vIHNpZ24gKyBtYWduaXR1ZGUsIGNhc3QgdG8gbnVtYmVyXG4gICAgICB1bml0OiBtYXRjaFszXVxuICAgIH07XG5cbiAgICBpZiAoIXZhbGlkVW5pdChkYXRhKSkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCB1bml0OiAnXCIgKyBkYXRhLnVuaXQgKyBcIidcIiwgcmVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzaXplXCIsXG4gICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICB2YWx1ZTogZGF0YSxcbiAgICAgIGlzQmxhbms6IGlzQmxhbmtcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgYW4gVVJMLCBjaGVja2luZyBlc2NhcGVkIGxldHRlcnMgYW5kIGFsbG93ZWQgcHJvdG9jb2xzLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5wYXJzZVVybEdyb3VwID0gZnVuY3Rpb24gcGFyc2VVcmxHcm91cChvcHRpb25hbCkge1xuICAgIHZhciByZXMgPSB0aGlzLnBhcnNlU3RyaW5nR3JvdXAoXCJ1cmxcIiwgb3B0aW9uYWwsIHRydWUpOyAvLyBnZXQgcmF3IHN0cmluZ1xuXG4gICAgaWYgKCFyZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gaHlwZXJyZWYgcGFja2FnZSBhbGxvd3MgYmFja3NsYXNoZXMgYWxvbmUgaW4gaHJlZiwgYnV0IGRvZXNuJ3RcbiAgICAvLyBnZW5lcmF0ZSB2YWxpZCBsaW5rcyBpbiBzdWNoIGNhc2VzOyB3ZSBpbnRlcnByZXQgdGhpcyBhc1xuICAgIC8vIFwidW5kZWZpbmVkXCIgYmVoYXZpb3VyLCBhbmQga2VlcCB0aGVtIGFzLWlzLiBTb21lIGJyb3dzZXIgd2lsbFxuICAgIC8vIHJlcGxhY2UgYmFja3NsYXNoZXMgd2l0aCBmb3J3YXJkIHNsYXNoZXMuXG5cblxuICAgIHZhciB1cmwgPSByZXMudGV4dC5yZXBsYWNlKC9cXFxcKFsjJCUmfl9ee31dKS9nLCAnJDEnKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ1cmxcIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIHVybDogdXJsXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogSWYgYG9wdGlvbmFsYCBpcyBmYWxzZSBvciBhYnNlbnQsIHRoaXMgcGFyc2VzIGFuIG9yZGluYXJ5IGdyb3VwLFxuICAgKiB3aGljaCBpcyBlaXRoZXIgYSBzaW5nbGUgbnVjbGV1cyAobGlrZSBcInhcIikgb3IgYW4gZXhwcmVzc2lvblxuICAgKiBpbiBicmFjZXMgKGxpa2UgXCJ7eCt5fVwiKSBvciBhbiBpbXBsaWNpdCBncm91cCwgYSBncm91cCB0aGF0IHN0YXJ0c1xuICAgKiBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiwgYW5kIGVuZHMgcmlnaHQgYmVmb3JlIGEgaGlnaGVyIGV4cGxpY2l0XG4gICAqIGdyb3VwIGVuZHMsIG9yIGF0IEVPRi5cbiAgICogSWYgYG9wdGlvbmFsYCBpcyB0cnVlLCBpdCBwYXJzZXMgZWl0aGVyIGEgYnJhY2tldC1kZWxpbWl0ZWQgZXhwcmVzc2lvblxuICAgKiAobGlrZSBcIlt4K3ldXCIpIG9yIHJldHVybnMgbnVsbCB0byBpbmRpY2F0ZSB0aGUgYWJzZW5jZSBvZiBhXG4gICAqIGJyYWNrZXQtZW5jbG9zZWQgZ3JvdXAuXG4gICAqIElmIGBtb2RlYCBpcyBwcmVzZW50LCBzd2l0Y2hlcyB0byB0aGF0IG1vZGUgd2hpbGUgcGFyc2luZyB0aGUgZ3JvdXAsXG4gICAqIGFuZCBzd2l0Y2hlcyBiYWNrIGFmdGVyLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5wYXJzZUdyb3VwID0gZnVuY3Rpb24gcGFyc2VHcm91cChuYW1lLCAvLyBGb3IgZXJyb3IgcmVwb3J0aW5nLlxuICBvcHRpb25hbCwgZ3JlZWRpbmVzcywgYnJlYWtPblRva2VuVGV4dCwgbW9kZSkge1xuICAgIHZhciBvdXRlck1vZGUgPSB0aGlzLm1vZGU7XG4gICAgdmFyIGZpcnN0VG9rZW4gPSB0aGlzLm5leHRUb2tlbjtcbiAgICB2YXIgdGV4dCA9IGZpcnN0VG9rZW4udGV4dDsgLy8gU3dpdGNoIHRvIHNwZWNpZmllZCBtb2RlXG5cbiAgICBpZiAobW9kZSkge1xuICAgICAgdGhpcy5zd2l0Y2hNb2RlKG1vZGUpO1xuICAgIH1cblxuICAgIHZhciBncm91cEVuZDtcbiAgICB2YXIgcmVzdWx0OyAvLyBUcnkgdG8gcGFyc2UgYW4gb3BlbiBicmFjZSBvciBcXGJlZ2luZ3JvdXBcblxuICAgIGlmIChvcHRpb25hbCA/IHRleHQgPT09IFwiW1wiIDogdGV4dCA9PT0gXCJ7XCIgfHwgdGV4dCA9PT0gXCJcXFxcYmVnaW5ncm91cFwiKSB7XG4gICAgICBncm91cEVuZCA9IFBhcnNlci5lbmRPZkdyb3VwW3RleHRdOyAvLyBTdGFydCBhIG5ldyBncm91cCBuYW1lc3BhY2VcblxuICAgICAgdGhpcy5ndWxsZXQuYmVnaW5Hcm91cCgpOyAvLyBJZiB3ZSBnZXQgYSBicmFjZSwgcGFyc2UgYW4gZXhwcmVzc2lvblxuXG4gICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgIHZhciBleHByZXNzaW9uID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oZmFsc2UsIGdyb3VwRW5kKTtcbiAgICAgIHZhciBsYXN0VG9rZW4gPSB0aGlzLm5leHRUb2tlbjsgLy8gRW5kIGdyb3VwIG5hbWVzcGFjZSBiZWZvcmUgY29uc3VtaW5nIHN5bWJvbCBhZnRlciBjbG9zZSBicmFjZVxuXG4gICAgICB0aGlzLmd1bGxldC5lbmRHcm91cCgpO1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgbG9jOiBTb3VyY2VMb2NhdGlvbi5yYW5nZShmaXJzdFRva2VuLCBsYXN0VG9rZW4pLFxuICAgICAgICBib2R5OiBleHByZXNzaW9uLFxuICAgICAgICAvLyBBIGdyb3VwIGZvcm1lZCBieSBcXGJlZ2luZ3JvdXAuLi5cXGVuZGdyb3VwIGlzIGEgc2VtaS1zaW1wbGUgZ3JvdXBcbiAgICAgICAgLy8gd2hpY2ggZG9lc24ndCBhZmZlY3Qgc3BhY2luZyBpbiBtYXRoIG1vZGUsIGkuZS4sIGlzIHRyYW5zcGFyZW50LlxuICAgICAgICAvLyBodHRwczovL3RleC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMTkzMC93aGVuLXNob3VsZC1vbmUtXG4gICAgICAgIC8vIHVzZS1iZWdpbmdyb3VwLWluc3RlYWQtb2YtYmdyb3VwXG4gICAgICAgIHNlbWlzaW1wbGU6IHRleHQgPT09IFwiXFxcXGJlZ2luZ3JvdXBcIiB8fCB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChvcHRpb25hbCkge1xuICAgICAgLy8gUmV0dXJuIG5vdGhpbmcgZm9yIGFuIG9wdGlvbmFsIGdyb3VwXG4gICAgICByZXN1bHQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiB0aGVyZSBleGlzdHMgYSBmdW5jdGlvbiB3aXRoIHRoaXMgbmFtZSwgcGFyc2UgdGhlIGZ1bmN0aW9uLlxuICAgICAgLy8gT3RoZXJ3aXNlLCBqdXN0IHJldHVybiBhIG51Y2xldXNcbiAgICAgIHJlc3VsdCA9IHRoaXMucGFyc2VGdW5jdGlvbihicmVha09uVG9rZW5UZXh0LCBuYW1lLCBncmVlZGluZXNzKSB8fCB0aGlzLnBhcnNlU3ltYm9sKCk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCAmJiB0ZXh0WzBdID09PSBcIlxcXFxcIiAmJiAhaW1wbGljaXRDb21tYW5kcy5oYXNPd25Qcm9wZXJ0eSh0ZXh0KSkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy50aHJvd09uRXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJVbmRlZmluZWQgY29udHJvbCBzZXF1ZW5jZTogXCIgKyB0ZXh0LCBmaXJzdFRva2VuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdCA9IHRoaXMuZm9ybWF0VW5zdXBwb3J0ZWRDbWQodGV4dCk7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgfVxuICAgIH0gLy8gU3dpdGNoIG1vZGUgYmFja1xuXG5cbiAgICBpZiAobW9kZSkge1xuICAgICAgdGhpcy5zd2l0Y2hNb2RlKG91dGVyTW9kZSk7XG4gICAgfSAvLyBNYWtlIHN1cmUgd2UgZ290IGEgY2xvc2UgYnJhY2VcblxuXG4gICAgaWYgKGdyb3VwRW5kKSB7XG4gICAgICB0aGlzLmV4cGVjdChncm91cEVuZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICAvKipcbiAgICogRm9ybSBsaWdhdHVyZS1saWtlIGNvbWJpbmF0aW9ucyBvZiBjaGFyYWN0ZXJzIGZvciB0ZXh0IG1vZGUuXG4gICAqIFRoaXMgaW5jbHVkZXMgaW5wdXRzIGxpa2UgXCItLVwiLCBcIi0tLVwiLCBcImBgXCIgYW5kIFwiJydcIi5cbiAgICogVGhlIHJlc3VsdCB3aWxsIHNpbXBseSByZXBsYWNlIG11bHRpcGxlIHRleHRvcmQgbm9kZXMgd2l0aCBhIHNpbmdsZVxuICAgKiBjaGFyYWN0ZXIgaW4gZWFjaCB2YWx1ZSBieSBhIHNpbmdsZSB0ZXh0b3JkIG5vZGUgaGF2aW5nIG11bHRpcGxlXG4gICAqIGNoYXJhY3RlcnMgaW4gaXRzIHZhbHVlLiAgVGhlIHJlcHJlc2VudGF0aW9uIGlzIHN0aWxsIEFTQ0lJIHNvdXJjZS5cbiAgICogVGhlIGdyb3VwIHdpbGwgYmUgbW9kaWZpZWQgaW4gcGxhY2UuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmZvcm1MaWdhdHVyZXMgPSBmdW5jdGlvbiBmb3JtTGlnYXR1cmVzKGdyb3VwKSB7XG4gICAgdmFyIG4gPSBncm91cC5sZW5ndGggLSAxO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIHZhciBhID0gZ3JvdXBbaV07IC8vICRGbG93Rml4TWU6IE5vdCBldmVyeSBub2RlIHR5cGUgaGFzIGEgYHRleHRgIHByb3BlcnR5LlxuXG4gICAgICB2YXIgdiA9IGEudGV4dDtcblxuICAgICAgaWYgKHYgPT09IFwiLVwiICYmIGdyb3VwW2kgKyAxXS50ZXh0ID09PSBcIi1cIikge1xuICAgICAgICBpZiAoaSArIDEgPCBuICYmIGdyb3VwW2kgKyAyXS50ZXh0ID09PSBcIi1cIikge1xuICAgICAgICAgIGdyb3VwLnNwbGljZShpLCAzLCB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgbG9jOiBTb3VyY2VMb2NhdGlvbi5yYW5nZShhLCBncm91cFtpICsgMl0pLFxuICAgICAgICAgICAgdGV4dDogXCItLS1cIlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIG4gLT0gMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBncm91cC5zcGxpY2UoaSwgMiwge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgICAgICBtb2RlOiBcInRleHRcIixcbiAgICAgICAgICAgIGxvYzogU291cmNlTG9jYXRpb24ucmFuZ2UoYSwgZ3JvdXBbaSArIDFdKSxcbiAgICAgICAgICAgIHRleHQ6IFwiLS1cIlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIG4gLT0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoKHYgPT09IFwiJ1wiIHx8IHYgPT09IFwiYFwiKSAmJiBncm91cFtpICsgMV0udGV4dCA9PT0gdikge1xuICAgICAgICBncm91cC5zcGxpY2UoaSwgMiwge1xuICAgICAgICAgIHR5cGU6IFwidGV4dG9yZFwiLFxuICAgICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICAgIGxvYzogU291cmNlTG9jYXRpb24ucmFuZ2UoYSwgZ3JvdXBbaSArIDFdKSxcbiAgICAgICAgICB0ZXh0OiB2ICsgdlxuICAgICAgICB9KTtcbiAgICAgICAgbiAtPSAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogUGFyc2UgYSBzaW5nbGUgc3ltYm9sIG91dCBvZiB0aGUgc3RyaW5nLiBIZXJlLCB3ZSBoYW5kbGUgc2luZ2xlIGNoYXJhY3RlclxuICAgKiBzeW1ib2xzIGFuZCBzcGVjaWFsIGZ1bmN0aW9ucyBsaWtlIHZlcmJhdGltXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnBhcnNlU3ltYm9sID0gZnVuY3Rpb24gcGFyc2VTeW1ib2woKSB7XG4gICAgdmFyIG51Y2xldXMgPSB0aGlzLm5leHRUb2tlbjtcbiAgICB2YXIgdGV4dCA9IG51Y2xldXMudGV4dDtcblxuICAgIGlmICgvXlxcXFx2ZXJiW15hLXpBLVpdLy50ZXN0KHRleHQpKSB7XG4gICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgIHZhciBhcmcgPSB0ZXh0LnNsaWNlKDUpO1xuICAgICAgdmFyIHN0YXIgPSBhcmcuY2hhckF0KDApID09PSBcIipcIjtcblxuICAgICAgaWYgKHN0YXIpIHtcbiAgICAgICAgYXJnID0gYXJnLnNsaWNlKDEpO1xuICAgICAgfSAvLyBMZXhlcidzIHRva2VuUmVnZXggaXMgY29uc3RydWN0ZWQgdG8gYWx3YXlzIGhhdmUgbWF0Y2hpbmdcbiAgICAgIC8vIGZpcnN0L2xhc3QgY2hhcmFjdGVycy5cblxuXG4gICAgICBpZiAoYXJnLmxlbmd0aCA8IDIgfHwgYXJnLmNoYXJBdCgwKSAhPT0gYXJnLnNsaWNlKC0xKSkge1xuICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJcXFxcdmVyYiBhc3NlcnRpb24gZmFpbGVkIC0tXFxuICAgICAgICAgICAgICAgICAgICBwbGVhc2UgcmVwb3J0IHdoYXQgaW5wdXQgY2F1c2VkIHRoaXMgYnVnXCIpO1xuICAgICAgfVxuXG4gICAgICBhcmcgPSBhcmcuc2xpY2UoMSwgLTEpOyAvLyByZW1vdmUgZmlyc3QgYW5kIGxhc3QgY2hhclxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcInZlcmJcIixcbiAgICAgICAgbW9kZTogXCJ0ZXh0XCIsXG4gICAgICAgIGJvZHk6IGFyZyxcbiAgICAgICAgc3Rhcjogc3RhclxuICAgICAgfTtcbiAgICB9IC8vIEF0IHRoaXMgcG9pbnQsIHdlIHNob3VsZCBoYXZlIGEgc3ltYm9sLCBwb3NzaWJseSB3aXRoIGFjY2VudHMuXG4gICAgLy8gRmlyc3QgZXhwYW5kIGFueSBhY2NlbnRlZCBiYXNlIHN5bWJvbCBhY2NvcmRpbmcgdG8gdW5pY29kZVN5bWJvbHMuXG5cblxuICAgIGlmICh1bmljb2RlU3ltYm9scy5oYXNPd25Qcm9wZXJ0eSh0ZXh0WzBdKSAmJiAhc3JjX3N5bWJvbHNbdGhpcy5tb2RlXVt0ZXh0WzBdXSkge1xuICAgICAgLy8gVGhpcyBiZWhhdmlvciBpcyBub3Qgc3RyaWN0IChYZVRlWC1jb21wYXRpYmxlKSBpbiBtYXRoIG1vZGUuXG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5zdHJpY3QgJiYgdGhpcy5tb2RlID09PSBcIm1hdGhcIikge1xuICAgICAgICB0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcInVuaWNvZGVUZXh0SW5NYXRoTW9kZVwiLCBcIkFjY2VudGVkIFVuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgXFxcIlwiICsgdGV4dFswXSArIFwiXFxcIiB1c2VkIGluIFwiICsgXCJtYXRoIG1vZGVcIiwgbnVjbGV1cyk7XG4gICAgICB9XG5cbiAgICAgIHRleHQgPSB1bmljb2RlU3ltYm9sc1t0ZXh0WzBdXSArIHRleHQuc3Vic3RyKDEpO1xuICAgIH0gLy8gU3RyaXAgb2ZmIGFueSBjb21iaW5pbmcgY2hhcmFjdGVyc1xuXG5cbiAgICB2YXIgbWF0Y2ggPSBjb21iaW5pbmdEaWFjcml0aWNhbE1hcmtzRW5kUmVnZXguZXhlYyh0ZXh0KTtcblxuICAgIGlmIChtYXRjaCkge1xuICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIG1hdGNoLmluZGV4KTtcblxuICAgICAgaWYgKHRleHQgPT09ICdpJykge1xuICAgICAgICB0ZXh0ID0gXCJcXHUwMTMxXCI7IC8vIGRvdGxlc3MgaSwgaW4gbWF0aCBhbmQgdGV4dCBtb2RlXG4gICAgICB9IGVsc2UgaWYgKHRleHQgPT09ICdqJykge1xuICAgICAgICB0ZXh0ID0gXCJcXHUwMjM3XCI7IC8vIGRvdGxlc3MgaiwgaW4gbWF0aCBhbmQgdGV4dCBtb2RlXG4gICAgICB9XG4gICAgfSAvLyBSZWNvZ25pemUgYmFzZSBzeW1ib2xcblxuXG4gICAgdmFyIHN5bWJvbDtcblxuICAgIGlmIChzcmNfc3ltYm9sc1t0aGlzLm1vZGVdW3RleHRdKSB7XG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5zdHJpY3QgJiYgdGhpcy5tb2RlID09PSAnbWF0aCcgJiYgZXh0cmFMYXRpbi5pbmRleE9mKHRleHQpID49IDApIHtcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJ1bmljb2RlVGV4dEluTWF0aE1vZGVcIiwgXCJMYXRpbi0xL1VuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgXFxcIlwiICsgdGV4dFswXSArIFwiXFxcIiB1c2VkIGluIFwiICsgXCJtYXRoIG1vZGVcIiwgbnVjbGV1cyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBncm91cCA9IHNyY19zeW1ib2xzW3RoaXMubW9kZV1bdGV4dF0uZ3JvdXA7XG4gICAgICB2YXIgbG9jID0gU291cmNlTG9jYXRpb24ucmFuZ2UobnVjbGV1cyk7XG4gICAgICB2YXIgcztcblxuICAgICAgaWYgKEFUT01TLmhhc093blByb3BlcnR5KGdyb3VwKSkge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICAgIHZhciBmYW1pbHkgPSBncm91cDtcbiAgICAgICAgcyA9IHtcbiAgICAgICAgICB0eXBlOiBcImF0b21cIixcbiAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgZmFtaWx5OiBmYW1pbHksXG4gICAgICAgICAgbG9jOiBsb2MsXG4gICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICBzID0ge1xuICAgICAgICAgIHR5cGU6IGdyb3VwLFxuICAgICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgICBsb2M6IGxvYyxcbiAgICAgICAgICB0ZXh0OiB0ZXh0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHN5bWJvbCA9IHM7XG4gICAgfSBlbHNlIGlmICh0ZXh0LmNoYXJDb2RlQXQoMCkgPj0gMHg4MCkge1xuICAgICAgLy8gbm8gc3ltYm9sIGZvciBlLmcuIF5cbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLnN0cmljdCkge1xuICAgICAgICBpZiAoIXN1cHBvcnRlZENvZGVwb2ludCh0ZXh0LmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJ1bmtub3duU3ltYm9sXCIsIFwiVW5yZWNvZ25pemVkIFVuaWNvZGUgY2hhcmFjdGVyIFxcXCJcIiArIHRleHRbMF0gKyBcIlxcXCJcIiArIChcIiAoXCIgKyB0ZXh0LmNoYXJDb2RlQXQoMCkgKyBcIilcIiksIG51Y2xldXMpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gXCJtYXRoXCIpIHtcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcInVuaWNvZGVUZXh0SW5NYXRoTW9kZVwiLCBcIlVuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgXFxcIlwiICsgdGV4dFswXSArIFwiXFxcIiB1c2VkIGluIG1hdGggbW9kZVwiLCBudWNsZXVzKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBBbGwgbm9ubWF0aGVtYXRpY2FsIFVuaWNvZGUgY2hhcmFjdGVycyBhcmUgcmVuZGVyZWQgYXMgaWYgdGhleVxuICAgICAgLy8gYXJlIGluIHRleHQgbW9kZSAod3JhcHBlZCBpbiBcXHRleHQpIGJlY2F1c2UgdGhhdCdzIHdoYXQgaXRcbiAgICAgIC8vIHRha2VzIHRvIHJlbmRlciB0aGVtIGluIExhVGVYLiAgU2V0dGluZyBgbW9kZTogdGhpcy5tb2RlYCBpc1xuICAgICAgLy8gYW5vdGhlciBuYXR1cmFsIGNob2ljZSAodGhlIHVzZXIgcmVxdWVzdGVkIG1hdGggbW9kZSksIGJ1dFxuICAgICAgLy8gdGhpcyBtYWtlcyBpdCBtb3JlIGRpZmZpY3VsdCBmb3IgZ2V0Q2hhcmFjdGVyTWV0cmljcygpIHRvXG4gICAgICAvLyBkaXN0aW5ndWlzaCBVbmljb2RlIGNoYXJhY3RlcnMgd2l0aG91dCBtZXRyaWNzIGFuZCB0aG9zZSBmb3JcbiAgICAgIC8vIHdoaWNoIHdlIHdhbnQgdG8gc2ltdWxhdGUgdGhlIGxldHRlciBNLlxuXG5cbiAgICAgIHN5bWJvbCA9IHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICBsb2M6IFNvdXJjZUxvY2F0aW9uLnJhbmdlKG51Y2xldXMpLFxuICAgICAgICB0ZXh0OiB0ZXh0XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gRU9GLCBeLCBfLCB7LCB9LCBldGMuXG4gICAgfVxuXG4gICAgdGhpcy5jb25zdW1lKCk7IC8vIFRyYW5zZm9ybSBjb21iaW5pbmcgY2hhcmFjdGVycyBpbnRvIGFjY2VudHNcblxuICAgIGlmIChtYXRjaCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRjaFswXS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYWNjZW50ID0gbWF0Y2hbMF1baV07XG5cbiAgICAgICAgaWYgKCF1bmljb2RlQWNjZW50c1thY2NlbnRdKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiVW5rbm93biBhY2NlbnQgJyBcIiArIGFjY2VudCArIFwiJ1wiLCBudWNsZXVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjb21tYW5kID0gdW5pY29kZUFjY2VudHNbYWNjZW50XVt0aGlzLm1vZGVdO1xuXG4gICAgICAgIGlmICghY29tbWFuZCkge1xuICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkFjY2VudCBcIiArIGFjY2VudCArIFwiIHVuc3VwcG9ydGVkIGluIFwiICsgdGhpcy5tb2RlICsgXCIgbW9kZVwiLCBudWNsZXVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN5bWJvbCA9IHtcbiAgICAgICAgICB0eXBlOiBcImFjY2VudFwiLFxuICAgICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgICBsb2M6IFNvdXJjZUxvY2F0aW9uLnJhbmdlKG51Y2xldXMpLFxuICAgICAgICAgIGxhYmVsOiBjb21tYW5kLFxuICAgICAgICAgIGlzU3RyZXRjaHk6IGZhbHNlLFxuICAgICAgICAgIGlzU2hpZnR5OiB0cnVlLFxuICAgICAgICAgIGJhc2U6IHN5bWJvbFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzeW1ib2w7XG4gIH07XG5cbiAgcmV0dXJuIFBhcnNlcjtcbn0oKTtcblxuUGFyc2VyX1BhcnNlci5lbmRPZkV4cHJlc3Npb24gPSBbXCJ9XCIsIFwiXFxcXGVuZGdyb3VwXCIsIFwiXFxcXGVuZFwiLCBcIlxcXFxyaWdodFwiLCBcIiZcIl07XG5QYXJzZXJfUGFyc2VyLmVuZE9mR3JvdXAgPSB7XG4gIFwiW1wiOiBcIl1cIixcbiAgXCJ7XCI6IFwifVwiLFxuICBcIlxcXFxiZWdpbmdyb3VwXCI6IFwiXFxcXGVuZGdyb3VwXCJcbiAgLyoqXG4gICAqIFBhcnNlcyBhbiBcImV4cHJlc3Npb25cIiwgd2hpY2ggaXMgYSBsaXN0IG9mIGF0b21zLlxuICAgKlxuICAgKiBgYnJlYWtPbkluZml4YDogU2hvdWxkIHRoZSBwYXJzaW5nIHN0b3Agd2hlbiB3ZSBoaXQgaW5maXggbm9kZXM/IFRoaXNcbiAgICogICAgICAgICAgICAgICAgIGhhcHBlbnMgd2hlbiBmdW5jdGlvbnMgaGF2ZSBoaWdoZXIgcHJlY2VuZGVuY2UgaGFuIGluZml4XG4gICAqICAgICAgICAgICAgICAgICBub2RlcyBpbiBpbXBsaWNpdCBwYXJzZXMuXG4gICAqXG4gICAqIGBicmVha09uVG9rZW5UZXh0YDogVGhlIHRleHQgb2YgdGhlIHRva2VuIHRoYXQgdGhlIGV4cHJlc3Npb24gc2hvdWxkIGVuZFxuICAgKiAgICAgICAgICAgICAgICAgICAgIHdpdGgsIG9yIGBudWxsYCBpZiBzb21ldGhpbmcgZWxzZSBzaG91bGQgZW5kIHRoZVxuICAgKiAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24uXG4gICAqL1xuXG59O1xuUGFyc2VyX1BhcnNlci5TVVBTVUJfR1JFRURJTkVTUyA9IDE7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3BhcnNlVHJlZS5qc1xuLyoqXG4gKiBQcm92aWRlcyBhIHNpbmdsZSBmdW5jdGlvbiBmb3IgcGFyc2luZyBhbiBleHByZXNzaW9uIHVzaW5nIGEgUGFyc2VyXG4gKiBUT0RPKGVtaWx5KTogUmVtb3ZlIHRoaXNcbiAqL1xuXG5cblxuLyoqXG4gKiBQYXJzZXMgYW4gZXhwcmVzc2lvbiB1c2luZyBhIFBhcnNlciwgdGhlbiByZXR1cm5zIHRoZSBwYXJzZWQgcmVzdWx0LlxuICovXG52YXIgcGFyc2VUcmVlX3BhcnNlVHJlZSA9IGZ1bmN0aW9uIHBhcnNlVHJlZSh0b1BhcnNlLCBzZXR0aW5ncykge1xuICBpZiAoISh0eXBlb2YgdG9QYXJzZSA9PT0gJ3N0cmluZycgfHwgdG9QYXJzZSBpbnN0YW5jZW9mIFN0cmluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdLYVRlWCBjYW4gb25seSBwYXJzZSBzdHJpbmcgdHlwZWQgZXhwcmVzc2lvbicpO1xuICB9XG5cbiAgdmFyIHBhcnNlciA9IG5ldyBQYXJzZXJfUGFyc2VyKHRvUGFyc2UsIHNldHRpbmdzKTsgLy8gQmxhbmsgb3V0IGFueSBcXGRmQHRhZyB0byBhdm9pZCBzcHVyaW91cyBcIkR1cGxpY2F0ZSBcXHRhZ1wiIGVycm9yc1xuXG4gIGRlbGV0ZSBwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5jdXJyZW50W1wiXFxcXGRmQHRhZ1wiXTtcbiAgdmFyIHRyZWUgPSBwYXJzZXIucGFyc2UoKTsgLy8gSWYgdGhlIGlucHV0IHVzZWQgXFx0YWcsIGl0IHdpbGwgc2V0IHRoZSBcXGRmQHRhZyBtYWNybyB0byB0aGUgdGFnLlxuICAvLyBJbiB0aGlzIGNhc2UsIHdlIHNlcGFyYXRlbHkgcGFyc2UgdGhlIHRhZyBhbmQgd3JhcCB0aGUgdHJlZS5cblxuICBpZiAocGFyc2VyLmd1bGxldC5tYWNyb3MuZ2V0KFwiXFxcXGRmQHRhZ1wiKSkge1xuICAgIGlmICghc2V0dGluZ3MuZGlzcGxheU1vZGUpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlxcXFx0YWcgd29ya3Mgb25seSBpbiBkaXNwbGF5IGVxdWF0aW9uc1wiKTtcbiAgICB9XG5cbiAgICBwYXJzZXIuZ3VsbGV0LmZlZWQoXCJcXFxcZGZAdGFnXCIpO1xuICAgIHRyZWUgPSBbe1xuICAgICAgdHlwZTogXCJ0YWdcIixcbiAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgYm9keTogdHJlZSxcbiAgICAgIHRhZzogcGFyc2VyLnBhcnNlKClcbiAgICB9XTtcbiAgfVxuXG4gIHJldHVybiB0cmVlO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3BhcnNlVHJlZSA9IChwYXJzZVRyZWVfcGFyc2VUcmVlKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4va2F0ZXguanNcbi8qIGVzbGludCBuby1jb25zb2xlOjAgKi9cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBLYVRlWC4gSGVyZSwgd2UgZXhwb3NlIGZ1bmN0aW9ucyBmb3JcbiAqIHJlbmRlcmluZyBleHByZXNzaW9ucyBlaXRoZXIgdG8gRE9NIG5vZGVzIG9yIHRvIG1hcmt1cCBzdHJpbmdzLlxuICpcbiAqIFdlIGFsc28gZXhwb3NlIHRoZSBQYXJzZUVycm9yIGNsYXNzIHRvIGNoZWNrIGlmIGVycm9ycyB0aHJvd24gZnJvbSBLYVRlWCBhcmVcbiAqIGVycm9ycyBpbiB0aGUgZXhwcmVzc2lvbiwgb3IgZXJyb3JzIGluIGphdmFzY3JpcHQgaGFuZGxpbmcuXG4gKi9cblxuXG5cblxuXG5cblxuXG5cblxuLyoqXG4gKiBQYXJzZSBhbmQgYnVpbGQgYW4gZXhwcmVzc2lvbiwgYW5kIHBsYWNlIHRoYXQgZXhwcmVzc2lvbiBpbiB0aGUgRE9NIG5vZGVcbiAqIGdpdmVuLlxuICovXG52YXIga2F0ZXhfcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKGV4cHJlc3Npb24sIGJhc2VOb2RlLCBvcHRpb25zKSB7XG4gIGJhc2VOb2RlLnRleHRDb250ZW50ID0gXCJcIjtcbiAgdmFyIG5vZGUgPSBrYXRleF9yZW5kZXJUb0RvbVRyZWUoZXhwcmVzc2lvbiwgb3B0aW9ucykudG9Ob2RlKCk7XG4gIGJhc2VOb2RlLmFwcGVuZENoaWxkKG5vZGUpO1xufTsgLy8gS2FUZVgncyBzdHlsZXMgZG9uJ3Qgd29yayBwcm9wZXJseSBpbiBxdWlya3MgbW9kZS4gUHJpbnQgb3V0IGFuIGVycm9yLCBhbmRcbi8vIGRpc2FibGUgcmVuZGVyaW5nLlxuXG5cbmlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgaWYgKGRvY3VtZW50LmNvbXBhdE1vZGUgIT09IFwiQ1NTMUNvbXBhdFwiKSB7XG4gICAgdHlwZW9mIGNvbnNvbGUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29uc29sZS53YXJuKFwiV2FybmluZzogS2FUZVggZG9lc24ndCB3b3JrIGluIHF1aXJrcyBtb2RlLiBNYWtlIHN1cmUgeW91ciBcIiArIFwid2Vic2l0ZSBoYXMgYSBzdWl0YWJsZSBkb2N0eXBlLlwiKTtcblxuICAgIGthdGV4X3JlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkthVGVYIGRvZXNuJ3Qgd29yayBpbiBxdWlya3MgbW9kZS5cIik7XG4gICAgfTtcbiAgfVxufVxuLyoqXG4gKiBQYXJzZSBhbmQgYnVpbGQgYW4gZXhwcmVzc2lvbiwgYW5kIHJldHVybiB0aGUgbWFya3VwIGZvciB0aGF0LlxuICovXG5cblxudmFyIHJlbmRlclRvU3RyaW5nID0gZnVuY3Rpb24gcmVuZGVyVG9TdHJpbmcoZXhwcmVzc2lvbiwgb3B0aW9ucykge1xuICB2YXIgbWFya3VwID0ga2F0ZXhfcmVuZGVyVG9Eb21UcmVlKGV4cHJlc3Npb24sIG9wdGlvbnMpLnRvTWFya3VwKCk7XG4gIHJldHVybiBtYXJrdXA7XG59O1xuLyoqXG4gKiBQYXJzZSBhbiBleHByZXNzaW9uIGFuZCByZXR1cm4gdGhlIHBhcnNlIHRyZWUuXG4gKi9cblxuXG52YXIga2F0ZXhfZ2VuZXJhdGVQYXJzZVRyZWUgPSBmdW5jdGlvbiBnZW5lcmF0ZVBhcnNlVHJlZShleHByZXNzaW9uLCBvcHRpb25zKSB7XG4gIHZhciBzZXR0aW5ncyA9IG5ldyBTZXR0aW5nc19TZXR0aW5ncyhvcHRpb25zKTtcbiAgcmV0dXJuIHNyY19wYXJzZVRyZWUoZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xufTtcbi8qKlxuICogSWYgdGhlIGdpdmVuIGVycm9yIGlzIGEgS2FUZVggUGFyc2VFcnJvciBhbmQgb3B0aW9ucy50aHJvd09uRXJyb3IgaXMgZmFsc2UsXG4gKiByZW5kZXJzIHRoZSBpbnZhbGlkIExhVGVYIGFzIGEgc3BhbiB3aXRoIGhvdmVyIHRpdGxlIGdpdmluZyB0aGUgS2FUZVhcbiAqIGVycm9yIG1lc3NhZ2UuICBPdGhlcndpc2UsIHNpbXBseSB0aHJvd3MgdGhlIGVycm9yLlxuICovXG5cblxudmFyIGthdGV4X3JlbmRlckVycm9yID0gZnVuY3Rpb24gcmVuZGVyRXJyb3IoZXJyb3IsIGV4cHJlc3Npb24sIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMudGhyb3dPbkVycm9yIHx8ICEoZXJyb3IgaW5zdGFuY2VvZiBzcmNfUGFyc2VFcnJvcikpIHtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIHZhciBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wia2F0ZXgtZXJyb3JcIl0sIFtuZXcgZG9tVHJlZV9TeW1ib2xOb2RlKGV4cHJlc3Npb24pXSk7XG4gIG5vZGUuc2V0QXR0cmlidXRlKFwidGl0bGVcIiwgZXJyb3IudG9TdHJpbmcoKSk7XG4gIG5vZGUuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJjb2xvcjpcIiArIG9wdGlvbnMuZXJyb3JDb2xvcik7XG4gIHJldHVybiBub2RlO1xufTtcbi8qKlxuICogR2VuZXJhdGVzIGFuZCByZXR1cm5zIHRoZSBrYXRleCBidWlsZCB0cmVlLiBUaGlzIGlzIHVzZWQgZm9yIGFkdmFuY2VkXG4gKiB1c2UgY2FzZXMgKGxpa2UgcmVuZGVyaW5nIHRvIGN1c3RvbSBvdXRwdXQpLlxuICovXG5cblxudmFyIGthdGV4X3JlbmRlclRvRG9tVHJlZSA9IGZ1bmN0aW9uIHJlbmRlclRvRG9tVHJlZShleHByZXNzaW9uLCBvcHRpb25zKSB7XG4gIHZhciBzZXR0aW5ncyA9IG5ldyBTZXR0aW5nc19TZXR0aW5ncyhvcHRpb25zKTtcblxuICB0cnkge1xuICAgIHZhciB0cmVlID0gc3JjX3BhcnNlVHJlZShleHByZXNzaW9uLCBzZXR0aW5ncyk7XG4gICAgcmV0dXJuIGJ1aWxkVHJlZV9idWlsZFRyZWUodHJlZSwgZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBrYXRleF9yZW5kZXJFcnJvcihlcnJvciwgZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICB9XG59O1xuLyoqXG4gKiBHZW5lcmF0ZXMgYW5kIHJldHVybnMgdGhlIGthdGV4IGJ1aWxkIHRyZWUsIHdpdGgganVzdCBIVE1MIChubyBNYXRoTUwpLlxuICogVGhpcyBpcyB1c2VkIGZvciBhZHZhbmNlZCB1c2UgY2FzZXMgKGxpa2UgcmVuZGVyaW5nIHRvIGN1c3RvbSBvdXRwdXQpLlxuICovXG5cblxudmFyIGthdGV4X3JlbmRlclRvSFRNTFRyZWUgPSBmdW5jdGlvbiByZW5kZXJUb0hUTUxUcmVlKGV4cHJlc3Npb24sIG9wdGlvbnMpIHtcbiAgdmFyIHNldHRpbmdzID0gbmV3IFNldHRpbmdzX1NldHRpbmdzKG9wdGlvbnMpO1xuXG4gIHRyeSB7XG4gICAgdmFyIHRyZWUgPSBzcmNfcGFyc2VUcmVlKGV4cHJlc3Npb24sIHNldHRpbmdzKTtcbiAgICByZXR1cm4gYnVpbGRUcmVlX2J1aWxkSFRNTFRyZWUodHJlZSwgZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBrYXRleF9yZW5kZXJFcnJvcihlcnJvciwgZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICB9XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBrYXRleF8wID0gKHtcbiAgLyoqXG4gICAqIEN1cnJlbnQgS2FUZVggdmVyc2lvblxuICAgKi9cbiAgdmVyc2lvbjogXCIwLjExLjBcIixcblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgZ2l2ZW4gTGFUZVggaW50byBhbiBIVE1MK01hdGhNTCBjb21iaW5hdGlvbiwgYW5kIGFkZHNcbiAgICogaXQgYXMgYSBjaGlsZCB0byB0aGUgc3BlY2lmaWVkIERPTSBub2RlLlxuICAgKi9cbiAgcmVuZGVyOiBrYXRleF9yZW5kZXIsXG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGdpdmVuIExhVGVYIGludG8gYW4gSFRNTCtNYXRoTUwgY29tYmluYXRpb24gc3RyaW5nLFxuICAgKiBmb3Igc2VuZGluZyB0byB0aGUgY2xpZW50LlxuICAgKi9cbiAgcmVuZGVyVG9TdHJpbmc6IHJlbmRlclRvU3RyaW5nLFxuXG4gIC8qKlxuICAgKiBLYVRlWCBlcnJvciwgdXN1YWxseSBkdXJpbmcgcGFyc2luZy5cbiAgICovXG4gIFBhcnNlRXJyb3I6IHNyY19QYXJzZUVycm9yLFxuXG4gIC8qKlxuICAgKiBQYXJzZXMgdGhlIGdpdmVuIExhVGVYIGludG8gS2FUZVgncyBpbnRlcm5hbCBwYXJzZSB0cmVlIHN0cnVjdHVyZSxcbiAgICogd2l0aG91dCByZW5kZXJpbmcgdG8gSFRNTCBvciBNYXRoTUwuXG4gICAqXG4gICAqIE5PVEU6IFRoaXMgbWV0aG9kIGlzIG5vdCBjdXJyZW50bHkgcmVjb21tZW5kZWQgZm9yIHB1YmxpYyB1c2UuXG4gICAqIFRoZSBpbnRlcm5hbCB0cmVlIHJlcHJlc2VudGF0aW9uIGlzIHVuc3RhYmxlIGFuZCBpcyB2ZXJ5IGxpa2VseVxuICAgKiB0byBjaGFuZ2UuIFVzZSBhdCB5b3VyIG93biByaXNrLlxuICAgKi9cbiAgX19wYXJzZToga2F0ZXhfZ2VuZXJhdGVQYXJzZVRyZWUsXG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGdpdmVuIExhVGVYIGludG8gYW4gSFRNTCtNYXRoTUwgaW50ZXJuYWwgRE9NIHRyZWVcbiAgICogcmVwcmVzZW50YXRpb24sIHdpdGhvdXQgZmxhdHRlbmluZyB0aGF0IHJlcHJlc2VudGF0aW9uIHRvIGEgc3RyaW5nLlxuICAgKlxuICAgKiBOT1RFOiBUaGlzIG1ldGhvZCBpcyBub3QgY3VycmVudGx5IHJlY29tbWVuZGVkIGZvciBwdWJsaWMgdXNlLlxuICAgKiBUaGUgaW50ZXJuYWwgdHJlZSByZXByZXNlbnRhdGlvbiBpcyB1bnN0YWJsZSBhbmQgaXMgdmVyeSBsaWtlbHlcbiAgICogdG8gY2hhbmdlLiBVc2UgYXQgeW91ciBvd24gcmlzay5cbiAgICovXG4gIF9fcmVuZGVyVG9Eb21UcmVlOiBrYXRleF9yZW5kZXJUb0RvbVRyZWUsXG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGdpdmVuIExhVGVYIGludG8gYW4gSFRNTCBpbnRlcm5hbCBET00gdHJlZSByZXByZXNlbnRhdGlvbixcbiAgICogd2l0aG91dCBNYXRoTUwgYW5kIHdpdGhvdXQgZmxhdHRlbmluZyB0aGF0IHJlcHJlc2VudGF0aW9uIHRvIGEgc3RyaW5nLlxuICAgKlxuICAgKiBOT1RFOiBUaGlzIG1ldGhvZCBpcyBub3QgY3VycmVudGx5IHJlY29tbWVuZGVkIGZvciBwdWJsaWMgdXNlLlxuICAgKiBUaGUgaW50ZXJuYWwgdHJlZSByZXByZXNlbnRhdGlvbiBpcyB1bnN0YWJsZSBhbmQgaXMgdmVyeSBsaWtlbHlcbiAgICogdG8gY2hhbmdlLiBVc2UgYXQgeW91ciBvd24gcmlzay5cbiAgICovXG4gIF9fcmVuZGVyVG9IVE1MVHJlZToga2F0ZXhfcmVuZGVyVG9IVE1MVHJlZSxcblxuICAvKipcbiAgICogZXh0ZW5kcyBpbnRlcm5hbCBmb250IG1ldHJpY3Mgb2JqZWN0IHdpdGggYSBuZXcgb2JqZWN0XG4gICAqIGVhY2gga2V5IGluIHRoZSBuZXcgb2JqZWN0IHJlcHJlc2VudHMgYSBmb250IG5hbWVcbiAgKi9cbiAgX19zZXRGb250TWV0cmljczogc2V0Rm9udE1ldHJpY3MsXG5cbiAgLyoqXG4gICAqIGFkZHMgYSBuZXcgc3ltYm9sIHRvIGJ1aWx0aW4gc3ltYm9scyB0YWJsZVxuICAgKi9cbiAgX19kZWZpbmVTeW1ib2w6IGRlZmluZVN5bWJvbCxcblxuICAvKipcbiAgICogYWRkcyBhIG5ldyBtYWNybyB0byBidWlsdGluIG1hY3JvIGxpc3RcbiAgICovXG4gIF9fZGVmaW5lTWFjcm86IGRlZmluZU1hY3JvLFxuXG4gIC8qKlxuICAgKiBFeHBvc2UgdGhlIGRvbSB0cmVlIG5vZGUgdHlwZXMsIHdoaWNoIGNhbiBiZSB1c2VmdWwgZm9yIHR5cGUgY2hlY2tpbmcgbm9kZXMuXG4gICAqXG4gICAqIE5PVEU6IFRoaXMgbWV0aG9kIGlzIG5vdCBjdXJyZW50bHkgcmVjb21tZW5kZWQgZm9yIHB1YmxpYyB1c2UuXG4gICAqIFRoZSBpbnRlcm5hbCB0cmVlIHJlcHJlc2VudGF0aW9uIGlzIHVuc3RhYmxlIGFuZCBpcyB2ZXJ5IGxpa2VseVxuICAgKiB0byBjaGFuZ2UuIFVzZSBhdCB5b3VyIG93biByaXNrLlxuICAgKi9cbiAgX19kb21UcmVlOiB7XG4gICAgU3BhbjogZG9tVHJlZV9TcGFuLFxuICAgIEFuY2hvcjogZG9tVHJlZV9BbmNob3IsXG4gICAgU3ltYm9sTm9kZTogZG9tVHJlZV9TeW1ib2xOb2RlLFxuICAgIFN2Z05vZGU6IFN2Z05vZGUsXG4gICAgUGF0aE5vZGU6IGRvbVRyZWVfUGF0aE5vZGUsXG4gICAgTGluZU5vZGU6IExpbmVOb2RlXG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9rYXRleC53ZWJwYWNrLmpzXG4vKipcbiAqIFRoaXMgaXMgdGhlIHdlYnBhY2sgZW50cnkgcG9pbnQgZm9yIEthVGVYLiBBcyBFQ01BU2NyaXB0LCBmbG93WzFdIGFuZCBqZXN0WzJdXG4gKiBkb2Vzbid0IHN1cHBvcnQgQ1NTIG1vZHVsZXMgbmF0aXZlbHksIGEgc2VwYXJhdGUgZW50cnkgcG9pbnQgaXMgdXNlZCBhbmRcbiAqIGl0IGlzIG5vdCBmbG93dHlwZWQuXG4gKlxuICogWzFdIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2xhbWJkYWhhbmRzL2QxOWUwZGE5NjI4NWI3NDlmMGVmXG4gKiBbMl0gaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vamVzdC9kb2NzL2VuL3dlYnBhY2suaHRtbFxuICovXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIga2F0ZXhfd2VicGFjayA9IF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGthdGV4XzApO1xuXG4vKioqLyB9KVxuLyoqKioqKi8gXSlbXCJkZWZhdWx0XCJdO1xufSk7IiwidmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG4vLyBvdXIgY29uc3RydWN0b3JcbmZ1bmN0aW9uIEtleVRyZWVTdG9yZShvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuICAgIHZhciBERUZBVUxUX1NFUEFSQVRPUiA9ICcuJztcblxuICAgIHRoaXMuc3RvcmFnZSA9IHt9O1xuICAgIHRoaXMuc2VwYXJhdG9yID0gb3B0aW9ucy5zZXBhcmF0b3IgfHwgREVGQVVMVF9TRVBBUkFUT1I7XG59XG5cbi8vIGFkZCBhbiBvYmplY3QgdG8gdGhlIHN0b3JlXG5LZXlUcmVlU3RvcmUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChrZXlwYXRoLCBvYmopIHtcbiAgICB2YXIgYXJyID0gdGhpcy5zdG9yYWdlW2tleXBhdGhdIHx8ICh0aGlzLnN0b3JhZ2Vba2V5cGF0aF0gPSBbXSk7XG4gICAgYXJyLnB1c2gob2JqKTtcbn07XG5cbi8vIHJlbW92ZSBhbiBvYmplY3RcbktleVRyZWVTdG9yZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKG9iaikge1xuICAgIHZhciBwYXRoLCBhcnI7XG4gICAgZm9yIChwYXRoIGluIHRoaXMuc3RvcmFnZSkge1xuICAgICAgICBhcnIgPSB0aGlzLnN0b3JhZ2VbcGF0aF07XG4gICAgICAgIGFyci5zb21lKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICAgICAgaWYgKGl0ZW0gPT09IG9iaikge1xuICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG4vLyBnZXQgYXJyYXkgb2YgYWxsIGFsbCByZWxldmFudCBmdW5jdGlvbnMsIHdpdGhvdXQga2V5c1xuS2V5VHJlZVN0b3JlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5cGF0aCkge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIga2V5O1xuXG4gICAgZm9yIChrZXkgaW4gdGhpcy5zdG9yYWdlKSB7XG4gICAgICAgIGlmICgha2V5cGF0aCB8fCBrZXlwYXRoID09PSBrZXkgfHwga2V5LmluZGV4T2Yoa2V5cGF0aCArIHRoaXMuc2VwYXJhdG9yKSA9PT0gMCkge1xuICAgICAgICAgICAgcmVzID0gcmVzLmNvbmNhdCh0aGlzLnN0b3JhZ2Vba2V5XSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xufTtcblxuLy8gZ2V0IGFsbCByZXN1bHRzIHRoYXQgbWF0Y2gga2V5cGF0aCBidXQgc3RpbGwgZ3JvdXBlZCBieSBrZXlcbktleVRyZWVTdG9yZS5wcm90b3R5cGUuZ2V0R3JvdXBlZCA9IGZ1bmN0aW9uIChrZXlwYXRoKSB7XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIHZhciBrZXk7XG5cbiAgICBmb3IgKGtleSBpbiB0aGlzLnN0b3JhZ2UpIHtcbiAgICAgICAgaWYgKCFrZXlwYXRoIHx8IGtleXBhdGggPT09IGtleSB8fCBrZXkuaW5kZXhPZihrZXlwYXRoICsgdGhpcy5zZXBhcmF0b3IpID09PSAwKSB7XG4gICAgICAgICAgICByZXNba2V5XSA9IHNsaWNlLmNhbGwodGhpcy5zdG9yYWdlW2tleV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbn07XG5cbi8vIGdldCBhbGwgcmVzdWx0cyB0aGF0IG1hdGNoIGtleXBhdGggYnV0IHN0aWxsIGdyb3VwZWQgYnkga2V5XG5LZXlUcmVlU3RvcmUucHJvdG90eXBlLmdldEFsbCA9IGZ1bmN0aW9uIChrZXlwYXRoKSB7XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIHZhciBrZXk7XG5cbiAgICBmb3IgKGtleSBpbiB0aGlzLnN0b3JhZ2UpIHtcbiAgICAgICAgaWYgKGtleXBhdGggPT09IGtleSB8fCBrZXkuaW5kZXhPZihrZXlwYXRoICsgdGhpcy5zZXBhcmF0b3IpID09PSAwKSB7XG4gICAgICAgICAgICByZXNba2V5XSA9IHNsaWNlLmNhbGwodGhpcy5zdG9yYWdlW2tleV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbn07XG5cbi8vIHJ1biBhbGwgbWF0Y2hlcyB3aXRoIG9wdGlvbmFsIGNvbnRleHRcbktleVRyZWVTdG9yZS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKGtleXBhdGgsIGNvbnRleHQpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICB0aGlzLmdldChrZXlwYXRoKS5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgICBmbi5hcHBseShjb250ZXh0IHx8IHRoaXMsIGFyZ3MpO1xuICAgIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBLZXlUcmVlU3RvcmU7XG4iLCJmdW5jdGlvbiBpc0hUTUxFbGVtZW50IChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJlxuICAgICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JykgJiZcbiAgICAob2JqLm5vZGVUeXBlID09PSAxKSAmJlxuICAgICh0eXBlb2Ygb2JqLnN0eWxlID09PSAnb2JqZWN0JykgJiZcbiAgICAodHlwZW9mIG9iai5vd25lckRvY3VtZW50ID09PSAnb2JqZWN0Jylcbn1cblxuZnVuY3Rpb24gaXNBIChvYmopIHtcbiAgcmV0dXJuIGlzSFRNTEVsZW1lbnQob2JqKSAmJiBvYmoudGFnTmFtZSA9PT0gJ0EnXG59XG5cbmZ1bmN0aW9uIGNsb3Nlc3RBIChjaGVja05vZGUpIHtcbiAgZG8ge1xuICAgIGlmIChpc0EoY2hlY2tOb2RlKSkge1xuICAgICAgcmV0dXJuIGNoZWNrTm9kZVxuICAgIH1cbiAgfSB3aGlsZSAoKGNoZWNrTm9kZSA9IGNoZWNrTm9kZS5wYXJlbnROb2RlKSlcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTGVhZGluZ1NsYXNoIChwYXRobmFtZSkge1xuICBpZiAocGF0aG5hbWUuY2hhckF0KDApICE9PSAnLycpIHtcbiAgICBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lXG4gIH1cbiAgcmV0dXJuIHBhdGhuYW1lXG59XG5cbmZ1bmN0aW9uIGlzUmVsYXRpdmVVcmwgKGhyZWYpIHtcbiAgdmFyIHIgPSAvXmh0dHBzPzpcXC9cXC98XlxcL1xcLy9pXG4gIHJldHVybiAhci50ZXN0KGhyZWYpXG59XG5cbmZ1bmN0aW9uIGlzU2Vjb25kYXJ5QnV0dG9uIChldmVudCkge1xuICByZXR1cm4gKHR5cGVvZiBldmVudCA9PT0gJ29iamVjdCcpICYmICgnYnV0dG9uJyBpbiBldmVudCkgJiYgZXZlbnQuYnV0dG9uICE9PSAwXG59XG5cbi8vIFsxXSBodHRwOi8vYmxvZ3MubXNkbi5jb20vYi9pZWludGVybmFscy9hcmNoaXZlLzIwMTEvMDIvMjgvaW50ZXJuZXQtZXhwbG9yZXItd2luZG93LWxvY2F0aW9uLXBhdGhuYW1lLW1pc3Npbmctc2xhc2gtYW5kLWhvc3QtaGFzLXBvcnQuYXNweFxuLy8gWzJdIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9jYXRjaC1saW5rcy9ibG9iLzdhZWUyMTljZGMyYzg0NWM3OGNhYWQ2MDcwODg2YTkzODBiOTBlNGMvaW5kZXguanMjTDEzLUwxN1xuLy8gWzNdIElFMTAgKGFuZCBwb3NzaWJseSBsYXRlcikgcmVwb3J0IHRoYXQgYW5jaG9yLnBvcnQgaXMgdGhlIGRlZmF1bHQgcG9ydFxuLy8gICAgIGJ1dCBkb250IGFwcGVuZCBpdCB0byB0aGUgaG9zdG5hbWUsIHNvIGlmIHRoZSBob3N0IGRvZXNudCBlbmQgd2l0aCB0aGUgcG9ydFxuLy8gICAgIGFwcGVuZCBpdCB0byB0aGUgYW5jaG9yIGhvc3QgYXMgd2VsbFxuXG5mdW5jdGlvbiBpc0xvY2FsIChldmVudCwgYW5jaG9yLCBsb29rRm9ySGFzaCkge1xuICBldmVudCB8fCAoZXZlbnQgPSB7fSlcblxuICAvLyBTa2lwIG1vZGlmaWVyIGV2ZW50c1xuICBpZiAoZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtleSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyBTa2lwIG5vbi1wcmltYXJ5IGNsaWNrc1xuICBpZiAoaXNTZWNvbmRhcnlCdXR0b24oZXZlbnQpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIElmIHdlIGhhdmUgYW4gYW5jaG9yIGJ1dCBpdHMgbm90IGFuIEEgdGFnXG4gIC8vIHRyeSB0byBmaW5kIHRoZSBjbG9zZXN0IG9uZVxuICBpZiAoYW5jaG9yICYmICFpc0EoYW5jaG9yKSkge1xuICAgIGFuY2hvciA9IGNsb3Nlc3RBKGFuY2hvcilcbiAgfVxuXG4gIC8vIE9ubHkgdGVzdCBhbmNob3IgZWxlbWVudHNcbiAgaWYgKCFhbmNob3IgfHwgIWlzQShhbmNob3IpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIERvbnQgdGVzdCBhbmNob3JzIHdpdGggdGFyZ2V0PV9ibGFua1xuICBpZiAoYW5jaG9yLnRhcmdldCA9PT0gJ19ibGFuaycpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gSUU5IGRvZXNuJ3QgcHV0IGEgbGVhZGluZyBzbGFzaCBvbiBhbmNob3IucGF0aG5hbWUgWzFdXG4gIHZhciBhUGF0aG5hbWUgPSBub3JtYWxpemVMZWFkaW5nU2xhc2goYW5jaG9yLnBhdGhuYW1lKVxuICB2YXIgd1BhdGhuYW1lID0gbm9ybWFsaXplTGVhZGluZ1NsYXNoKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSlcbiAgdmFyIGFIb3N0ID0gYW5jaG9yLmhvc3RcbiAgdmFyIGFQb3J0ID0gYW5jaG9yLnBvcnRcbiAgdmFyIHdIb3N0ID0gd2luZG93LmxvY2F0aW9uLmhvc3RcbiAgdmFyIHdQb3J0ID0gd2luZG93LmxvY2F0aW9uLnBvcnRcblxuICAvLyBJbiBzb21lIGNhc2VzLCBJRSB3aWxsIGhhdmUgYSBibGFuayBob3N0IHByb3BlcnR5IHdoZW4gdGhlIGhyZWZcbiAgLy8gaXMgYSByZWxhdGl2ZSBVUkwuIFdlIGNhbiBjaGVjayBmb3IgcmVsYXRpdmVuZXNzIHZpYSB0aGUgYWNob3Inc1xuICAvLyBocmVmIGF0dHJpYnV0ZSBhbmQgdGhlbiBzZXQgdGhlIGFuY2hvcidzIGhvc3QgdG8gdGhlIHdpbmRvdydzIGhvc3QuXG4gIGlmIChhSG9zdCA9PT0gJycgJiZcbiAgICAnYXR0cmlidXRlcycgaW4gYW5jaG9yICYmXG4gICAgJ2hyZWYnIGluIGFuY2hvci5hdHRyaWJ1dGVzICYmXG4gICAgJ3ZhbHVlJyBpbiBhbmNob3IuYXR0cmlidXRlcy5ocmVmICYmXG4gICAgaXNSZWxhdGl2ZVVybChhbmNob3IuYXR0cmlidXRlcy5ocmVmLnZhbHVlKSkge1xuICAgIGFIb3N0ID0gd0hvc3RcbiAgfVxuXG4gIC8vIFNvbWUgYnJvd3NlcnMgKENocm9tZSAzNikgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBmb3IgYW5jaG9yLmhhc2hcbiAgLy8gZXZlbiB3aGVuIGhyZWY9XCIjXCIsIHNvIHdlIGFsc28gY2hlY2sgdGhlIGhyZWZcbiAgdmFyIGFIYXNoID0gYW5jaG9yLmhhc2ggfHwgKGFuY2hvci5ocmVmLmluZGV4T2YoJyMnKSA+IC0xID8gJyMnICsgYW5jaG9yLmhyZWYuc3BsaXQoJyMnKVsxXSA6IG51bGwpXG4gIHZhciBpblBhZ2VIYXNoXG5cbiAgLy8gV2luZG93IGhhcyBubyBwb3J0LCBidXQgYW5jaG9yIGhhcyB0aGUgZGVmYXVsdCBwb3J0XG4gIGlmICghd1BvcnQgJiYgYVBvcnQgJiYgKGFQb3J0ID09PSAnODAnIHx8IGFQb3J0ID09PSAnNDQzJykpIHtcbiAgICAvLyBJRTkgc29tZXRpbWVzIGluY2x1ZGVzIHRoZSBkZWZhdWx0IHBvcnQgKDgwIG9yIDQ0Mykgb24gYW5jaG9yLmhvc3RcbiAgICAvLyBzbyB3ZSBhcHBlbmQgdGhlIGRlZmF1bHQgcG9ydCB0byB0aGUgd2luZG93IGhvc3QgaW4gdGhpcyBjYXNlXG4gICAgLy8gc28gdGhleSB3aWxsIG1hdGNoIGZvciB0aGUgaG9zdCBlcXVhbGl0eSBjaGVjayBbMV1cbiAgICB3SG9zdCArPSAnOicgKyBhUG9ydFxuICAgIGFIb3N0ICs9IGFIb3N0LmluZGV4T2YoYVBvcnQsIGFIb3N0Lmxlbmd0aCAtIGFQb3J0Lmxlbmd0aCkgPT09IC0xID8gJzonICsgYVBvcnQgOiAnJyAvLyBbM11cbiAgfVxuXG4gIC8vIEhvc3RzIGFyZSB0aGUgc2FtZSwgaXRzIGEgbG9jYWwgbGlua1xuICBpZiAoYUhvc3QgPT09IHdIb3N0KSB7XG4gICAgLy8gSWYgZXZlcnl0aGluZyBlbHNlIGlzIHRoZSBzYW1lXG4gICAgLy8gYW5kIGhhc2ggZXhpc3RzLCB0aGVuIGl0IGlzIGFuIGluLXBhZ2UgaGFzaCBbMl1cbiAgICBpblBhZ2VIYXNoID1cbiAgICAgIGFQYXRobmFtZSA9PT0gd1BhdGhuYW1lICYmXG4gICAgICBhbmNob3Iuc2VhcmNoID09PSB3aW5kb3cubG9jYXRpb24uc2VhcmNoICYmXG4gICAgICBhSGFzaFxuXG4gICAgaWYgKGxvb2tGb3JIYXNoID09PSB0cnVlKSB7XG4gICAgICAvLyBJZiB3ZSBhcmUgbG9va2luZyBmb3IgdGhlIGhhc2ggdGhlbiB0aGlzIHdpbGxcbiAgICAgIC8vIG9ubHkgcmV0dXJuIGEgdHJ1dGh5IHZhbHVlIGlmIHRoZSBsaW5rXG4gICAgICAvLyBpcyBhbiAqaW4tcGFnZSogaGFzaCBsaW5rXG4gICAgICByZXR1cm4gaW5QYWdlSGFzaFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiB0aGlzIGlzIGFuIGluIHBhZ2UgaGFzaCBsaW5rXG4gICAgICAvLyB0aGVuIGlnbm9yZSBpdCBiZWNhdXNlIHdlIHdlcmVudCBsb29raW5nIGZvciBoYXNoIGxpbmtzXG4gICAgICByZXR1cm4gaW5QYWdlSGFzaFxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiBhUGF0aG5hbWUgKyAoYW5jaG9yLnNlYXJjaCB8fCAnJykgKyAoYUhhc2ggfHwgJycpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuLy8gVGFrZSB0d28gYXJndW1lbnRzIGFuZCByZXR1cm4gYW4gb3JkZXJlZCBhcnJheSBvZiBbZXZlbnQsIGFuY2hvcl1cbmZ1bmN0aW9uIGdldEV2ZW50QW5kQW5jaG9yIChhcmcxLCBhcmcyKSB7XG4gIHZhciBldiA9IG51bGxcbiAgdmFyIGFuY2hvciA9IG51bGxcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIC8vIFR3byBhcmd1bWVudHMgd2lsbCBjb21lIGluIHRoaXMgb3JkZXJcbiAgICBldiA9IGFyZzFcbiAgICBhbmNob3IgPSBhcmcyXG4gIH0gZWxzZSBpZiAoaXNIVE1MRWxlbWVudChhcmcxKSkge1xuICAgIC8vIElmIG91ciBmaXJzdCBhcmcgaXMgYW4gZWxlbWVudFxuICAgIC8vIHRoZW4gdXNlIHRoYXQgYXMgb3VyIGFuY2hvclxuICAgIGFuY2hvciA9IGFyZzFcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2Ugb3VyIGFyZ3VtZW50IGlzIGFuIGV2ZW50XG4gICAgZXYgPSBhcmcxXG4gIH1cblxuICAgIC8vIElmIHRoZXJlIGlzIG5vIGFuY2hvciwgYnV0IHdlIGhhdmUgYW4gZXZlbnRcbiAgICAvLyB0aGVuIHVzZSBldmVudC50YXJnZXRcbiAgaWYgKCFhbmNob3IgJiYgZXYgJiYgZXYudGFyZ2V0KSB7XG4gICAgYW5jaG9yID0gZXYudGFyZ2V0XG4gIH1cblxuICAgIC8vIFJldHVybiBhbiBhcnJheSBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIHdpdGggRnVuY3Rpb24uYXBwbHlcbiAgcmV0dXJuIFtldiwgYW5jaG9yXVxufVxuXG4vLyBGdW5jdGlvbnMgdG8gYmUgdXNlZCBpbiBleHBvcnRzLiBEZWZpbmVkIGhlcmUgZm9yIGFsaWFzIHB1cnBvc2VzXG5mdW5jdGlvbiBwYXRobmFtZSAoKSB7XG4gIHJldHVybiBpc0xvY2FsLmFwcGx5KG51bGwsIGdldEV2ZW50QW5kQW5jaG9yLmFwcGx5KG51bGwsIGFyZ3VtZW50cykpXG59XG5cbmZ1bmN0aW9uIGhhc2ggKCkge1xuICByZXR1cm4gaXNMb2NhbC5hcHBseShudWxsLCBnZXRFdmVudEFuZEFuY2hvci5hcHBseShudWxsLCBhcmd1bWVudHMpLmNvbmNhdCh0cnVlKSlcbn1cblxuZnVuY3Rpb24gYWN0aXZlICgpIHtcbiAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpXG4gIHZhciBsYXN0ID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdXG4gIHZhciBjaGVja1BhdGggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWVcblxuICBpZiAodHlwZW9mIGxhc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgY2hlY2tQYXRoID0gbGFzdFxuICAgIGFyZ3MgPSBhcmdzLnNsaWNlKDAsIC0xKVxuICB9XG5cbiAgcmV0dXJuIHBhdGhuYW1lLmFwcGx5KG51bGwsIGFyZ3MpID09PSBub3JtYWxpemVMZWFkaW5nU2xhc2goY2hlY2tQYXRoKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNMb2NhbDogaXNMb2NhbCxcbiAgcGF0aG5hbWU6IHBhdGhuYW1lLFxuICBnZXRMb2NhbFBhdGhuYW1lOiBwYXRobmFtZSxcbiAgaGFzaDogaGFzaCxcbiAgZ2V0TG9jYWxIYXNoOiBoYXNoLFxuICBhY3RpdmU6IGFjdGl2ZSxcbiAgaXNBY3RpdmU6IGFjdGl2ZVxufVxuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBEYXRhVmlldyA9IGdldE5hdGl2ZShyb290LCAnRGF0YVZpZXcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBEYXRhVmlldztcbiIsInZhciBoYXNoQ2xlYXIgPSByZXF1aXJlKCcuL19oYXNoQ2xlYXInKSxcbiAgICBoYXNoRGVsZXRlID0gcmVxdWlyZSgnLi9faGFzaERlbGV0ZScpLFxuICAgIGhhc2hHZXQgPSByZXF1aXJlKCcuL19oYXNoR2V0JyksXG4gICAgaGFzaEhhcyA9IHJlcXVpcmUoJy4vX2hhc2hIYXMnKSxcbiAgICBoYXNoU2V0ID0gcmVxdWlyZSgnLi9faGFzaFNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoO1xuIiwidmFyIGJhc2VDcmVhdGUgPSByZXF1aXJlKCcuL19iYXNlQ3JlYXRlJyksXG4gICAgYmFzZUxvZGFzaCA9IHJlcXVpcmUoJy4vX2Jhc2VMb2Rhc2gnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdGhlIG1heGltdW0gbGVuZ3RoIGFuZCBpbmRleCBvZiBhbiBhcnJheS4gKi9cbnZhciBNQVhfQVJSQVlfTEVOR1RIID0gNDI5NDk2NzI5NTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbGF6eSB3cmFwcGVyIG9iamVjdCB3aGljaCB3cmFwcyBgdmFsdWVgIHRvIGVuYWJsZSBsYXp5IGV2YWx1YXRpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcC5cbiAqL1xuZnVuY3Rpb24gTGF6eVdyYXBwZXIodmFsdWUpIHtcbiAgdGhpcy5fX3dyYXBwZWRfXyA9IHZhbHVlO1xuICB0aGlzLl9fYWN0aW9uc19fID0gW107XG4gIHRoaXMuX19kaXJfXyA9IDE7XG4gIHRoaXMuX19maWx0ZXJlZF9fID0gZmFsc2U7XG4gIHRoaXMuX19pdGVyYXRlZXNfXyA9IFtdO1xuICB0aGlzLl9fdGFrZUNvdW50X18gPSBNQVhfQVJSQVlfTEVOR1RIO1xuICB0aGlzLl9fdmlld3NfXyA9IFtdO1xufVxuXG4vLyBFbnN1cmUgYExhenlXcmFwcGVyYCBpcyBhbiBpbnN0YW5jZSBvZiBgYmFzZUxvZGFzaGAuXG5MYXp5V3JhcHBlci5wcm90b3R5cGUgPSBiYXNlQ3JlYXRlKGJhc2VMb2Rhc2gucHJvdG90eXBlKTtcbkxhenlXcmFwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExhenlXcmFwcGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExhenlXcmFwcGVyO1xuIiwidmFyIGxpc3RDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlQ2xlYXInKSxcbiAgICBsaXN0Q2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVEZWxldGUnKSxcbiAgICBsaXN0Q2FjaGVHZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVHZXQnKSxcbiAgICBsaXN0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVIYXMnKSxcbiAgICBsaXN0Q2FjaGVTZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExpc3RDYWNoZTtcbiIsInZhciBiYXNlQ3JlYXRlID0gcmVxdWlyZSgnLi9fYmFzZUNyZWF0ZScpLFxuICAgIGJhc2VMb2Rhc2ggPSByZXF1aXJlKCcuL19iYXNlTG9kYXNoJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgY29uc3RydWN0b3IgZm9yIGNyZWF0aW5nIGBsb2Rhc2hgIHdyYXBwZXIgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoYWluQWxsXSBFbmFibGUgZXhwbGljaXQgbWV0aG9kIGNoYWluIHNlcXVlbmNlcy5cbiAqL1xuZnVuY3Rpb24gTG9kYXNoV3JhcHBlcih2YWx1ZSwgY2hhaW5BbGwpIHtcbiAgdGhpcy5fX3dyYXBwZWRfXyA9IHZhbHVlO1xuICB0aGlzLl9fYWN0aW9uc19fID0gW107XG4gIHRoaXMuX19jaGFpbl9fID0gISFjaGFpbkFsbDtcbiAgdGhpcy5fX2luZGV4X18gPSAwO1xuICB0aGlzLl9fdmFsdWVzX18gPSB1bmRlZmluZWQ7XG59XG5cbkxvZGFzaFdyYXBwZXIucHJvdG90eXBlID0gYmFzZUNyZWF0ZShiYXNlTG9kYXNoLnByb3RvdHlwZSk7XG5Mb2Rhc2hXcmFwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvZGFzaFdyYXBwZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gTG9kYXNoV3JhcHBlcjtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdNYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXA7XG4iLCJ2YXIgbWFwQ2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX21hcENhY2hlQ2xlYXInKSxcbiAgICBtYXBDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX21hcENhY2hlRGVsZXRlJyksXG4gICAgbWFwQ2FjaGVHZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZUdldCcpLFxuICAgIG1hcENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVIYXMnKSxcbiAgICBtYXBDYWNoZVNldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcENhY2hlO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBQcm9taXNlID0gZ2V0TmF0aXZlKHJvb3QsICdQcm9taXNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgU2V0ID0gZ2V0TmF0aXZlKHJvb3QsICdTZXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZXQ7XG4iLCJ2YXIgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpLFxuICAgIHNldENhY2hlQWRkID0gcmVxdWlyZSgnLi9fc2V0Q2FjaGVBZGQnKSxcbiAgICBzZXRDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX3NldENhY2hlSGFzJyk7XG5cbi8qKlxuICpcbiAqIENyZWF0ZXMgYW4gYXJyYXkgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIHVuaXF1ZSB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU2V0Q2FjaGUodmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzID09IG51bGwgPyAwIDogdmFsdWVzLmxlbmd0aDtcblxuICB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHRoaXMuYWRkKHZhbHVlc1tpbmRleF0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTZXRDYWNoZWAuXG5TZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBzZXRDYWNoZUFkZDtcblNldENhY2hlLnByb3RvdHlwZS5oYXMgPSBzZXRDYWNoZUhhcztcblxubW9kdWxlLmV4cG9ydHMgPSBTZXRDYWNoZTtcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBzdGFja0NsZWFyID0gcmVxdWlyZSgnLi9fc3RhY2tDbGVhcicpLFxuICAgIHN0YWNrRGVsZXRlID0gcmVxdWlyZSgnLi9fc3RhY2tEZWxldGUnKSxcbiAgICBzdGFja0dldCA9IHJlcXVpcmUoJy4vX3N0YWNrR2V0JyksXG4gICAgc3RhY2tIYXMgPSByZXF1aXJlKCcuL19zdGFja0hhcycpLFxuICAgIHN0YWNrU2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTdGFja2AuXG5TdGFjay5wcm90b3R5cGUuY2xlYXIgPSBzdGFja0NsZWFyO1xuU3RhY2sucHJvdG90eXBlWydkZWxldGUnXSA9IHN0YWNrRGVsZXRlO1xuU3RhY2sucHJvdG90eXBlLmdldCA9IHN0YWNrR2V0O1xuU3RhY2sucHJvdG90eXBlLmhhcyA9IHN0YWNrSGFzO1xuU3RhY2sucHJvdG90eXBlLnNldCA9IHN0YWNrU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YWNrO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbDtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBVaW50OEFycmF5ID0gcm9vdC5VaW50OEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVpbnQ4QXJyYXk7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFdlYWtNYXAgPSBnZXROYXRpdmUocm9vdCwgJ1dlYWtNYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBXZWFrTWFwO1xuIiwiLyoqXG4gKiBBIGZhc3RlciBhbHRlcm5hdGl2ZSB0byBgRnVuY3Rpb24jYXBwbHlgLCB0aGlzIGZ1bmN0aW9uIGludm9rZXMgYGZ1bmNgXG4gKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cbiAqL1xuZnVuY3Rpb24gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncykge1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFwcGx5O1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZm9yRWFjaGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RWFjaChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkgPT09IGZhbHNlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5RWFjaDtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZpbHRlcmAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheUZpbHRlcihhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXNJbmRleCA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUZpbHRlcjtcbiIsInZhciBiYXNlSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Jhc2VJbmRleE9mJyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluY2x1ZGVzYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIHNwZWNpZnlpbmcgYW4gaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHRhcmdldCBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdGFyZ2V0YCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheUluY2x1ZGVzKGFycmF5LCB2YWx1ZSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiAhIWxlbmd0aCAmJiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIDApID4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlJbmNsdWRlcztcbiIsIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBhcnJheUluY2x1ZGVzYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGEgY29tcGFyYXRvci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyYXRvciBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXNXaXRoKGFycmF5LCB2YWx1ZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIGFycmF5W2luZGV4XSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4iLCJ2YXIgYmFzZVRpbWVzID0gcmVxdWlyZSgnLi9fYmFzZVRpbWVzJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TGlrZUtleXM7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TWFwO1xuIiwiLyoqXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXBwZW5kLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHZhbHVlc1tpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5UHVzaDtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheVNvbWUoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlTb21lO1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBhbiBBU0NJSSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXNjaWlUb0FycmF5KHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnNwbGl0KCcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc2NpaVRvQXJyYXk7XG4iLCJ2YXIgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV07XG4gIGlmICghKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGVxKG9ialZhbHVlLCB2YWx1ZSkpIHx8XG4gICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzaWduVmFsdWU7XG4iLCJ2YXIgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGlmIChlcShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XG4gICAgICByZXR1cm4gbGVuZ3RoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzb2NJbmRleE9mO1xuIiwidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbmAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzXG4gKiBvciBgY3VzdG9taXplcmAgZnVuY3Rpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnbihvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnbjtcbiIsInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ25JbihvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQXNzaWduSW47XG4iLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ25WYWx1ZTtcbiIsInZhciBTdGFjayA9IHJlcXVpcmUoJy4vX1N0YWNrJyksXG4gICAgYXJyYXlFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXlFYWNoJyksXG4gICAgYXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25WYWx1ZScpLFxuICAgIGJhc2VBc3NpZ24gPSByZXF1aXJlKCcuL19iYXNlQXNzaWduJyksXG4gICAgYmFzZUFzc2lnbkluID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnbkluJyksXG4gICAgY2xvbmVCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUJ1ZmZlcicpLFxuICAgIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpLFxuICAgIGNvcHlTeW1ib2xzID0gcmVxdWlyZSgnLi9fY29weVN5bWJvbHMnKSxcbiAgICBjb3B5U3ltYm9sc0luID0gcmVxdWlyZSgnLi9fY29weVN5bWJvbHNJbicpLFxuICAgIGdldEFsbEtleXMgPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzJyksXG4gICAgZ2V0QWxsS2V5c0luID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5c0luJyksXG4gICAgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaW5pdENsb25lQXJyYXkgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVBcnJheScpLFxuICAgIGluaXRDbG9uZUJ5VGFnID0gcmVxdWlyZSgnLi9faW5pdENsb25lQnlUYWcnKSxcbiAgICBpbml0Q2xvbmVPYmplY3QgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVPYmplY3QnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNNYXAgPSByZXF1aXJlKCcuL2lzTWFwJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNTZXQgPSByZXF1aXJlKCcuL2lzU2V0JyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX0RFRVBfRkxBRyA9IDEsXG4gICAgQ0xPTkVfRkxBVF9GTEFHID0gMixcbiAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIHN1cHBvcnRlZCBieSBgXy5jbG9uZWAuICovXG52YXIgY2xvbmVhYmxlVGFncyA9IHt9O1xuY2xvbmVhYmxlVGFnc1thcmdzVGFnXSA9IGNsb25lYWJsZVRhZ3NbYXJyYXlUYWddID1cbmNsb25lYWJsZVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gY2xvbmVhYmxlVGFnc1tkYXRhVmlld1RhZ10gPVxuY2xvbmVhYmxlVGFnc1tib29sVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0ZVRhZ10gPVxuY2xvbmVhYmxlVGFnc1tmbG9hdDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZmxvYXQ2NFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbaW50MTZUYWddID1cbmNsb25lYWJsZVRhZ3NbaW50MzJUYWddID0gY2xvbmVhYmxlVGFnc1ttYXBUYWddID1cbmNsb25lYWJsZVRhZ3NbbnVtYmVyVGFnXSA9IGNsb25lYWJsZVRhZ3Nbb2JqZWN0VGFnXSA9XG5jbG9uZWFibGVUYWdzW3JlZ2V4cFRhZ10gPSBjbG9uZWFibGVUYWdzW3NldFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tzdHJpbmdUYWddID0gY2xvbmVhYmxlVGFnc1tzeW1ib2xUYWddID1cbmNsb25lYWJsZVRhZ3NbdWludDhUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50OENsYW1wZWRUYWddID1cbmNsb25lYWJsZVRhZ3NbdWludDE2VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG5jbG9uZWFibGVUYWdzW2Vycm9yVGFnXSA9IGNsb25lYWJsZVRhZ3NbZnVuY1RhZ10gPVxuY2xvbmVhYmxlVGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNsb25lYCBhbmQgYF8uY2xvbmVEZWVwYCB3aGljaCB0cmFja3NcbiAqIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gRGVlcCBjbG9uZVxuICogIDIgLSBGbGF0dGVuIGluaGVyaXRlZCBwcm9wZXJ0aWVzXG4gKiAgNCAtIENsb25lIHN5bWJvbHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gVGhlIGtleSBvZiBgdmFsdWVgLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBwYXJlbnQgb2JqZWN0IG9mIGB2YWx1ZWAuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIG9iamVjdHMgYW5kIHRoZWlyIGNsb25lIGNvdW50ZXJwYXJ0cy5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBjbG9uZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VDbG9uZSh2YWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCBvYmplY3QsIHN0YWNrKSB7XG4gIHZhciByZXN1bHQsXG4gICAgICBpc0RlZXAgPSBiaXRtYXNrICYgQ0xPTkVfREVFUF9GTEFHLFxuICAgICAgaXNGbGF0ID0gYml0bWFzayAmIENMT05FX0ZMQVRfRkxBRyxcbiAgICAgIGlzRnVsbCA9IGJpdG1hc2sgJiBDTE9ORV9TWU1CT0xTX0ZMQUc7XG5cbiAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICByZXN1bHQgPSBvYmplY3QgPyBjdXN0b21pemVyKHZhbHVlLCBrZXksIG9iamVjdCwgc3RhY2spIDogY3VzdG9taXplcih2YWx1ZSk7XG4gIH1cbiAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKTtcbiAgaWYgKGlzQXJyKSB7XG4gICAgcmVzdWx0ID0gaW5pdENsb25lQXJyYXkodmFsdWUpO1xuICAgIGlmICghaXNEZWVwKSB7XG4gICAgICByZXR1cm4gY29weUFycmF5KHZhbHVlLCByZXN1bHQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKSxcbiAgICAgICAgaXNGdW5jID0gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZztcblxuICAgIGlmIChpc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjbG9uZUJ1ZmZlcih2YWx1ZSwgaXNEZWVwKTtcbiAgICB9XG4gICAgaWYgKHRhZyA9PSBvYmplY3RUYWcgfHwgdGFnID09IGFyZ3NUYWcgfHwgKGlzRnVuYyAmJiAhb2JqZWN0KSkge1xuICAgICAgcmVzdWx0ID0gKGlzRmxhdCB8fCBpc0Z1bmMpID8ge30gOiBpbml0Q2xvbmVPYmplY3QodmFsdWUpO1xuICAgICAgaWYgKCFpc0RlZXApIHtcbiAgICAgICAgcmV0dXJuIGlzRmxhdFxuICAgICAgICAgID8gY29weVN5bWJvbHNJbih2YWx1ZSwgYmFzZUFzc2lnbkluKHJlc3VsdCwgdmFsdWUpKVxuICAgICAgICAgIDogY29weVN5bWJvbHModmFsdWUsIGJhc2VBc3NpZ24ocmVzdWx0LCB2YWx1ZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNsb25lYWJsZVRhZ3NbdGFnXSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0ID8gdmFsdWUgOiB7fTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IGluaXRDbG9uZUJ5VGFnKHZhbHVlLCB0YWcsIGlzRGVlcCk7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIGFuZCByZXR1cm4gaXRzIGNvcnJlc3BvbmRpbmcgY2xvbmUuXG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KHZhbHVlKTtcbiAgaWYgKHN0YWNrZWQpIHtcbiAgICByZXR1cm4gc3RhY2tlZDtcbiAgfVxuICBzdGFjay5zZXQodmFsdWUsIHJlc3VsdCk7XG5cbiAgaWYgKGlzU2V0KHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUpIHtcbiAgICAgIHJlc3VsdC5hZGQoYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdWJWYWx1ZSwgdmFsdWUsIHN0YWNrKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKGlzTWFwKHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkge1xuICAgICAgcmVzdWx0LnNldChrZXksIGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2spKTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICB2YXIga2V5c0Z1bmMgPSBpc0Z1bGxcbiAgICA/IChpc0ZsYXQgPyBnZXRBbGxLZXlzSW4gOiBnZXRBbGxLZXlzKVxuICAgIDogKGlzRmxhdCA/IGtleXNJbiA6IGtleXMpO1xuXG4gIHZhciBwcm9wcyA9IGlzQXJyID8gdW5kZWZpbmVkIDoga2V5c0Z1bmModmFsdWUpO1xuICBhcnJheUVhY2gocHJvcHMgfHwgdmFsdWUsIGZ1bmN0aW9uKHN1YlZhbHVlLCBrZXkpIHtcbiAgICBpZiAocHJvcHMpIHtcbiAgICAgIGtleSA9IHN1YlZhbHVlO1xuICAgICAgc3ViVmFsdWUgPSB2YWx1ZVtrZXldO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBwb3B1bGF0ZSBjbG9uZSAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCBiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgdmFsdWUsIHN0YWNrKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VDbG9uZTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXG4gKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xudmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIG9iamVjdCgpIHt9XG4gIHJldHVybiBmdW5jdGlvbihwcm90bykge1xuICAgIGlmICghaXNPYmplY3QocHJvdG8pKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGlmIChvYmplY3RDcmVhdGUpIHtcbiAgICAgIHJldHVybiBvYmplY3RDcmVhdGUocHJvdG8pO1xuICAgIH1cbiAgICBvYmplY3QucHJvdG90eXBlID0gcHJvdG87XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBvYmplY3Q7XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQ3JlYXRlO1xuIiwidmFyIFNldENhY2hlID0gcmVxdWlyZSgnLi9fU2V0Q2FjaGUnKSxcbiAgICBhcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlcycpLFxuICAgIGFycmF5SW5jbHVkZXNXaXRoID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlc1dpdGgnKSxcbiAgICBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgY2FjaGVIYXMgPSByZXF1aXJlKCcuL19jYWNoZUhhcycpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5kaWZmZXJlbmNlYCB3aXRob3V0IHN1cHBvcnRcbiAqIGZvciBleGNsdWRpbmcgbXVsdGlwbGUgYXJyYXlzIG9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gYmFzZURpZmZlcmVuY2UoYXJyYXksIHZhbHVlcywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXMsXG4gICAgICBpc0NvbW1vbiA9IHRydWUsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBbXSxcbiAgICAgIHZhbHVlc0xlbmd0aCA9IHZhbHVlcy5sZW5ndGg7XG5cbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChpdGVyYXRlZSkge1xuICAgIHZhbHVlcyA9IGFycmF5TWFwKHZhbHVlcywgYmFzZVVuYXJ5KGl0ZXJhdGVlKSk7XG4gIH1cbiAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXNXaXRoO1xuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gIH1cbiAgZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA+PSBMQVJHRV9BUlJBWV9TSVpFKSB7XG4gICAgaW5jbHVkZXMgPSBjYWNoZUhhcztcbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIHZhbHVlcyA9IG5ldyBTZXRDYWNoZSh2YWx1ZXMpO1xuICB9XG4gIG91dGVyOlxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA9PSBudWxsID8gdmFsdWUgOiBpdGVyYXRlZSh2YWx1ZSk7XG5cbiAgICB2YWx1ZSA9IChjb21wYXJhdG9yIHx8IHZhbHVlICE9PSAwKSA/IHZhbHVlIDogMDtcbiAgICBpZiAoaXNDb21tb24gJiYgY29tcHV0ZWQgPT09IGNvbXB1dGVkKSB7XG4gICAgICB2YXIgdmFsdWVzSW5kZXggPSB2YWx1ZXNMZW5ndGg7XG4gICAgICB3aGlsZSAodmFsdWVzSW5kZXgtLSkge1xuICAgICAgICBpZiAodmFsdWVzW3ZhbHVlc0luZGV4XSA9PT0gY29tcHV0ZWQpIHtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmICghaW5jbHVkZXModmFsdWVzLCBjb21wdXRlZCwgY29tcGFyYXRvcikpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRGlmZmVyZW5jZTtcbiIsInZhciBiYXNlRm9yT3duID0gcmVxdWlyZSgnLi9fYmFzZUZvck93bicpLFxuICAgIGNyZWF0ZUJhc2VFYWNoID0gcmVxdWlyZSgnLi9fY3JlYXRlQmFzZUVhY2gnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JFYWNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAqL1xudmFyIGJhc2VFYWNoID0gY3JlYXRlQmFzZUVhY2goYmFzZUZvck93bik7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUVhY2g7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbmRJbmRleGAgYW5kIGBfLmZpbmRMYXN0SW5kZXhgIHdpdGhvdXRcbiAqIHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgsIGZyb21SaWdodCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgaW5kZXggPSBmcm9tSW5kZXggKyAoZnJvbVJpZ2h0ID8gMSA6IC0xKTtcblxuICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRmluZEluZGV4O1xuIiwidmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGlzRmxhdHRlbmFibGUgPSByZXF1aXJlKCcuL19pc0ZsYXR0ZW5hYmxlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmxhdHRlbmAgd2l0aCBzdXBwb3J0IGZvciByZXN0cmljdGluZyBmbGF0dGVuaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBkZXB0aCBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcmVkaWNhdGU9aXNGbGF0dGVuYWJsZV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzU3RyaWN0XSBSZXN0cmljdCB0byB2YWx1ZXMgdGhhdCBwYXNzIGBwcmVkaWNhdGVgIGNoZWNrcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHQ9W11dIFRoZSBpbml0aWFsIHJlc3VsdCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZUZsYXR0ZW4oYXJyYXksIGRlcHRoLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgcHJlZGljYXRlIHx8IChwcmVkaWNhdGUgPSBpc0ZsYXR0ZW5hYmxlKTtcbiAgcmVzdWx0IHx8IChyZXN1bHQgPSBbXSk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKGRlcHRoID4gMCAmJiBwcmVkaWNhdGUodmFsdWUpKSB7XG4gICAgICBpZiAoZGVwdGggPiAxKSB7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGZsYXR0ZW4gYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIGJhc2VGbGF0dGVuKHZhbHVlLCBkZXB0aCAtIDEsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcnJheVB1c2gocmVzdWx0LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaXNTdHJpY3QpIHtcbiAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGbGF0dGVuO1xuIiwidmFyIGNyZWF0ZUJhc2VGb3IgPSByZXF1aXJlKCcuL19jcmVhdGVCYXNlRm9yJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGJhc2VGb3JPd25gIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYG9iamVjdGBcbiAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxuICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG52YXIgYmFzZUZvciA9IGNyZWF0ZUJhc2VGb3IoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRm9yO1xuIiwidmFyIGJhc2VGb3IgPSByZXF1aXJlKCcuL19iYXNlRm9yJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZvck93bmAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGb3JPd24ob2JqZWN0LCBpdGVyYXRlZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3Iob2JqZWN0LCBpdGVyYXRlZSwga2V5cyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZvck93bjtcbiIsInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gMCxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgIG9iamVjdCA9IG9iamVjdFt0b0tleShwYXRoW2luZGV4KytdKV07XG4gIH1cbiAgcmV0dXJuIChpbmRleCAmJiBpbmRleCA9PSBsZW5ndGgpID8gb2JqZWN0IDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXQ7XG4iLCJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRBbGxLZXlzYCBhbmQgYGdldEFsbEtleXNJbmAgd2hpY2ggdXNlc1xuICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XG4gIHZhciByZXN1bHQgPSBrZXlzRnVuYyhvYmplY3QpO1xuICByZXR1cm4gaXNBcnJheShvYmplY3QpID8gcmVzdWx0IDogYXJyYXlQdXNoKHJlc3VsdCwgc3ltYm9sc0Z1bmMob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldEFsbEtleXM7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgZ2V0UmF3VGFnID0gcmVxdWlyZSgnLi9fZ2V0UmF3VGFnJyksXG4gICAgb2JqZWN0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19vYmplY3RUb1N0cmluZycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0VGFnO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5oYXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VIYXMob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VIYXM7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmhhc0luYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGtleSBUaGUga2V5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSGFzSW4ob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGtleSBpbiBPYmplY3Qob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSGFzSW47XG4iLCJ2YXIgYmFzZUZpbmRJbmRleCA9IHJlcXVpcmUoJy4vX2Jhc2VGaW5kSW5kZXgnKSxcbiAgICBiYXNlSXNOYU4gPSByZXF1aXJlKCcuL19iYXNlSXNOYU4nKSxcbiAgICBzdHJpY3RJbmRleE9mID0gcmVxdWlyZSgnLi9fc3RyaWN0SW5kZXhPZicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmluZGV4T2ZgIHdpdGhvdXQgYGZyb21JbmRleGAgYm91bmRzIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlXG4gICAgPyBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KVxuICAgIDogYmFzZUZpbmRJbmRleChhcnJheSwgYmFzZUlzTmFOLCBmcm9tSW5kZXgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJbmRleE9mO1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKSxcbiAgICBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgbGFzdCA9IHJlcXVpcmUoJy4vbGFzdCcpLFxuICAgIHBhcmVudCA9IHJlcXVpcmUoJy4vX3BhcmVudCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pbnZva2VgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaW5kaXZpZHVhbFxuICogbWV0aG9kIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIG1ldGhvZCB0byBpbnZva2UuXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIHRoZSBtZXRob2Qgd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGludm9rZWQgbWV0aG9kLlxuICovXG5mdW5jdGlvbiBiYXNlSW52b2tlKG9iamVjdCwgcGF0aCwgYXJncykge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgb2JqZWN0ID0gcGFyZW50KG9iamVjdCwgcGF0aCk7XG4gIHZhciBmdW5jID0gb2JqZWN0ID09IG51bGwgPyBvYmplY3QgOiBvYmplY3RbdG9LZXkobGFzdChwYXRoKSldO1xuICByZXR1cm4gZnVuYyA9PSBudWxsID8gdW5kZWZpbmVkIDogYXBwbHkoZnVuYywgb2JqZWN0LCBhcmdzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSW52b2tlO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICovXG5mdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYXJnc1RhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNBcmd1bWVudHM7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0RhdGVgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZGF0ZSBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRGF0ZSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBkYXRlVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0RhdGU7XG4iLCJ2YXIgYmFzZUlzRXF1YWxEZWVwID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWxEZWVwJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAqICAyIC0gUGFydGlhbCBjb21wYXJpc29uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzT2JqZWN0TGlrZShvdGhlcikpKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gIH1cbiAgcmV0dXJuIGJhc2VJc0VxdWFsRGVlcCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGJhc2VJc0VxdWFsLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWw7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGVxdWFsQXJyYXlzID0gcmVxdWlyZSgnLi9fZXF1YWxBcnJheXMnKSxcbiAgICBlcXVhbEJ5VGFnID0gcmVxdWlyZSgnLi9fZXF1YWxCeVRhZycpLFxuICAgIGVxdWFsT2JqZWN0cyA9IHJlcXVpcmUoJy4vX2VxdWFsT2JqZWN0cycpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcbiAqIGRlZXAgY29tcGFyaXNvbnMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAqIHJlZmVyZW5jZXMgdG8gYmUgY29tcGFyZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBvYmpJc0FyciA9IGlzQXJyYXkob2JqZWN0KSxcbiAgICAgIG90aElzQXJyID0gaXNBcnJheShvdGhlciksXG4gICAgICBvYmpUYWcgPSBvYmpJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG9iamVjdCksXG4gICAgICBvdGhUYWcgPSBvdGhJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG90aGVyKTtcblxuICBvYmpUYWcgPSBvYmpUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG9ialRhZztcbiAgb3RoVGFnID0gb3RoVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvdGhUYWc7XG5cbiAgdmFyIG9iaklzT2JqID0gb2JqVGFnID09IG9iamVjdFRhZyxcbiAgICAgIG90aElzT2JqID0gb3RoVGFnID09IG9iamVjdFRhZyxcbiAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XG5cbiAgaWYgKGlzU2FtZVRhZyAmJiBpc0J1ZmZlcihvYmplY3QpKSB7XG4gICAgaWYgKCFpc0J1ZmZlcihvdGhlcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgb2JqSXNBcnIgPSB0cnVlO1xuICAgIG9iaklzT2JqID0gZmFsc2U7XG4gIH1cbiAgaWYgKGlzU2FtZVRhZyAmJiAhb2JqSXNPYmopIHtcbiAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgIHJldHVybiAob2JqSXNBcnIgfHwgaXNUeXBlZEFycmF5KG9iamVjdCkpXG4gICAgICA/IGVxdWFsQXJyYXlzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXG4gICAgICA6IGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgb2JqVGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgfVxuICBpZiAoIShiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcpKSB7XG4gICAgdmFyIG9iaklzV3JhcHBlZCA9IG9iaklzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAnX193cmFwcGVkX18nKSxcbiAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XG5cbiAgICBpZiAob2JqSXNXcmFwcGVkIHx8IG90aElzV3JhcHBlZCkge1xuICAgICAgdmFyIG9ialVud3JhcHBlZCA9IG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LFxuICAgICAgICAgIG90aFVud3JhcHBlZCA9IG90aElzV3JhcHBlZCA/IG90aGVyLnZhbHVlKCkgOiBvdGhlcjtcblxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgIHJldHVybiBlcXVhbEZ1bmMob2JqVW53cmFwcGVkLCBvdGhVbndyYXBwZWQsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1NhbWVUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgcmV0dXJuIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNFcXVhbERlZXA7XG4iLCJ2YXIgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWFwYCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNNYXAodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSBtYXBUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTWFwO1xuIiwidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBiYXNlSXNFcXVhbCA9IHJlcXVpcmUoJy4vX2Jhc2VJc0VxdWFsJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hdGNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAqIEBwYXJhbSB7QXJyYXl9IG1hdGNoRGF0YSBUaGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3MgdG8gbWF0Y2guXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBpcyBhIG1hdGNoLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBtYXRjaERhdGEsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGluZGV4ID0gbWF0Y2hEYXRhLmxlbmd0aCxcbiAgICAgIGxlbmd0aCA9IGluZGV4LFxuICAgICAgbm9DdXN0b21pemVyID0gIWN1c3RvbWl6ZXI7XG5cbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuICFsZW5ndGg7XG4gIH1cbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgdmFyIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xuICAgIGlmICgobm9DdXN0b21pemVyICYmIGRhdGFbMl0pXG4gICAgICAgICAgPyBkYXRhWzFdICE9PSBvYmplY3RbZGF0YVswXV1cbiAgICAgICAgICA6ICEoZGF0YVswXSBpbiBvYmplY3QpXG4gICAgICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xuICAgIHZhciBrZXkgPSBkYXRhWzBdLFxuICAgICAgICBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICBzcmNWYWx1ZSA9IGRhdGFbMV07XG5cbiAgICBpZiAobm9DdXN0b21pemVyICYmIGRhdGFbMl0pIHtcbiAgICAgIGlmIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3RhY2sgPSBuZXcgU3RhY2s7XG4gICAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgICB2YXIgcmVzdWx0ID0gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UsIHN0YWNrKTtcbiAgICAgIH1cbiAgICAgIGlmICghKHJlc3VsdCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGJhc2VJc0VxdWFsKHNyY1ZhbHVlLCBvYmpWYWx1ZSwgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgfCBDT01QQVJFX1VOT1JERVJFRF9GTEFHLCBjdXN0b21pemVyLCBzdGFjaylcbiAgICAgICAgICAgIDogcmVzdWx0XG4gICAgICAgICAgKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc01hdGNoO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hTmAgd2l0aG91dCBzdXBwb3J0IGZvciBudW1iZXIgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgTmFOYCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYU4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYU47XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTWFza2VkID0gcmVxdWlyZSgnLi9faXNNYXNrZWQnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTmF0aXZlO1xuIiwidmFyIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzZXRUYWcgPSAnW29iamVjdCBTZXRdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1NldGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzZXQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzU2V0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGdldFRhZyh2YWx1ZSkgPT0gc2V0VGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc1NldDtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNUeXBlZEFycmF5O1xuIiwidmFyIGJhc2VNYXRjaGVzID0gcmVxdWlyZSgnLi9fYmFzZU1hdGNoZXMnKSxcbiAgICBiYXNlTWF0Y2hlc1Byb3BlcnR5ID0gcmVxdWlyZSgnLi9fYmFzZU1hdGNoZXNQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBwcm9wZXJ0eSA9IHJlcXVpcmUoJy4vcHJvcGVydHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pdGVyYXRlZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gW3ZhbHVlPV8uaWRlbnRpdHldIFRoZSB2YWx1ZSB0byBjb252ZXJ0IHRvIGFuIGl0ZXJhdGVlLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBpdGVyYXRlZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUl0ZXJhdGVlKHZhbHVlKSB7XG4gIC8vIERvbid0IHN0b3JlIHRoZSBgdHlwZW9mYCByZXN1bHQgaW4gYSB2YXJpYWJsZSB0byBhdm9pZCBhIEpJVCBidWcgaW4gU2FmYXJpIDkuXG4gIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MDM0IGZvciBtb3JlIGRldGFpbHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBpZGVudGl0eTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGlzQXJyYXkodmFsdWUpXG4gICAgICA/IGJhc2VNYXRjaGVzUHJvcGVydHkodmFsdWVbMF0sIHZhbHVlWzFdKVxuICAgICAgOiBiYXNlTWF0Y2hlcyh2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHByb3BlcnR5KHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXRlcmF0ZWU7XG4iLCJ2YXIgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c2Agd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBrZXkgIT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5cztcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAgbmF0aXZlS2V5c0luID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5c0luJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c0luYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzSW4ob2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzSW4ob2JqZWN0KTtcbiAgfVxuICB2YXIgaXNQcm90byA9IGlzUHJvdG90eXBlKG9iamVjdCksXG4gICAgICByZXN1bHQgPSBbXTtcblxuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgaWYgKCEoa2V5ID09ICdjb25zdHJ1Y3RvcicgJiYgKGlzUHJvdG8gfHwgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXNJbjtcbiIsIi8qKlxuICogVGhlIGZ1bmN0aW9uIHdob3NlIHByb3RvdHlwZSBjaGFpbiBzZXF1ZW5jZSB3cmFwcGVycyBpbmhlcml0IGZyb20uXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYmFzZUxvZGFzaCgpIHtcbiAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTG9kYXNoO1xuIiwidmFyIGJhc2VJc01hdGNoID0gcmVxdWlyZSgnLi9fYmFzZUlzTWF0Y2gnKSxcbiAgICBnZXRNYXRjaERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXRjaERhdGEnKSxcbiAgICBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSA9IHJlcXVpcmUoJy4vX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWF0Y2hlc2Agd2hpY2ggZG9lc24ndCBjbG9uZSBgc291cmNlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VNYXRjaGVzKHNvdXJjZSkge1xuICB2YXIgbWF0Y2hEYXRhID0gZ2V0TWF0Y2hEYXRhKHNvdXJjZSk7XG4gIGlmIChtYXRjaERhdGEubGVuZ3RoID09IDEgJiYgbWF0Y2hEYXRhWzBdWzJdKSB7XG4gICAgcmV0dXJuIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKG1hdGNoRGF0YVswXVswXSwgbWF0Y2hEYXRhWzBdWzFdKTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PT0gc291cmNlIHx8IGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBtYXRjaERhdGEpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNYXRjaGVzO1xuIiwidmFyIGJhc2VJc0VxdWFsID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWwnKSxcbiAgICBnZXQgPSByZXF1aXJlKCcuL2dldCcpLFxuICAgIGhhc0luID0gcmVxdWlyZSgnLi9oYXNJbicpLFxuICAgIGlzS2V5ID0gcmVxdWlyZSgnLi9faXNLZXknKSxcbiAgICBpc1N0cmljdENvbXBhcmFibGUgPSByZXF1aXJlKCcuL19pc1N0cmljdENvbXBhcmFibGUnKSxcbiAgICBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSA9IHJlcXVpcmUoJy4vX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlJyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWF0Y2hlc1Byb3BlcnR5YCB3aGljaCBkb2Vzbid0IGNsb25lIGBzcmNWYWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VNYXRjaGVzUHJvcGVydHkocGF0aCwgc3JjVmFsdWUpIHtcbiAgaWYgKGlzS2V5KHBhdGgpICYmIGlzU3RyaWN0Q29tcGFyYWJsZShzcmNWYWx1ZSkpIHtcbiAgICByZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUodG9LZXkocGF0aCksIHNyY1ZhbHVlKTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgdmFyIG9ialZhbHVlID0gZ2V0KG9iamVjdCwgcGF0aCk7XG4gICAgcmV0dXJuIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIG9ialZhbHVlID09PSBzcmNWYWx1ZSlcbiAgICAgID8gaGFzSW4ob2JqZWN0LCBwYXRoKVxuICAgICAgOiBiYXNlSXNFcXVhbChzcmNWYWx1ZSwgb2JqVmFsdWUsIENPTVBBUkVfUEFSVElBTF9GTEFHIHwgQ09NUEFSRV9VTk9SREVSRURfRkxBRyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZU1hdGNoZXNQcm9wZXJ0eTtcbiIsInZhciBiYXNlUGlja0J5ID0gcmVxdWlyZSgnLi9fYmFzZVBpY2tCeScpLFxuICAgIGhhc0luID0gcmVxdWlyZSgnLi9oYXNJbicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnBpY2tgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaW5kaXZpZHVhbFxuICogcHJvcGVydHkgaWRlbnRpZmllcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRocyBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGJhc2VQaWNrKG9iamVjdCwgcGF0aHMpIHtcbiAgcmV0dXJuIGJhc2VQaWNrQnkob2JqZWN0LCBwYXRocywgZnVuY3Rpb24odmFsdWUsIHBhdGgpIHtcbiAgICByZXR1cm4gaGFzSW4ob2JqZWN0LCBwYXRoKTtcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVBpY2s7XG4iLCJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKSxcbiAgICBiYXNlU2V0ID0gcmVxdWlyZSgnLi9fYmFzZVNldCcpLFxuICAgIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiAgYF8ucGlja0J5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRocyBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgcHJvcGVydHkuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBiYXNlUGlja0J5KG9iamVjdCwgcGF0aHMsIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHBhdGhzLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IHt9O1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHBhdGggPSBwYXRoc1tpbmRleF0sXG4gICAgICAgIHZhbHVlID0gYmFzZUdldChvYmplY3QsIHBhdGgpO1xuXG4gICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgcGF0aCkpIHtcbiAgICAgIGJhc2VTZXQocmVzdWx0LCBjYXN0UGF0aChwYXRoLCBvYmplY3QpLCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVBpY2tCeTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucHJvcGVydHlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVByb3BlcnR5KGtleSkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVByb3BlcnR5O1xuIiwidmFyIGJhc2VHZXQgPSByZXF1aXJlKCcuL19iYXNlR2V0Jyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUHJvcGVydHlgIHdoaWNoIHN1cHBvcnRzIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVByb3BlcnR5RGVlcChwYXRoKSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gYmFzZUdldChvYmplY3QsIHBhdGgpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VQcm9wZXJ0eURlZXA7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5T2ZgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eU9mKG9iamVjdCkge1xuICByZXR1cm4gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVByb3BlcnR5T2Y7XG4iLCJ2YXIgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5JyksXG4gICAgb3ZlclJlc3QgPSByZXF1aXJlKCcuL19vdmVyUmVzdCcpLFxuICAgIHNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fc2V0VG9TdHJpbmcnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXN0YCB3aGljaCBkb2Vzbid0IHZhbGlkYXRlIG9yIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCBpZGVudGl0eSksIGZ1bmMgKyAnJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVJlc3Q7XG4iLCJ2YXIgYXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25WYWx1ZScpLFxuICAgIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zZXRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIHBhdGggY3JlYXRpb24uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdmFsdWUsIGN1c3RvbWl6ZXIpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoLFxuICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMSxcbiAgICAgIG5lc3RlZCA9IG9iamVjdDtcblxuICB3aGlsZSAobmVzdGVkICE9IG51bGwgJiYgKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSB0b0tleShwYXRoW2luZGV4XSksXG4gICAgICAgIG5ld1ZhbHVlID0gdmFsdWU7XG5cbiAgICBpZiAoaW5kZXggIT0gbGFzdEluZGV4KSB7XG4gICAgICB2YXIgb2JqVmFsdWUgPSBuZXN0ZWRba2V5XTtcbiAgICAgIG5ld1ZhbHVlID0gY3VzdG9taXplciA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIGtleSwgbmVzdGVkKSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gaXNPYmplY3Qob2JqVmFsdWUpXG4gICAgICAgICAgPyBvYmpWYWx1ZVxuICAgICAgICAgIDogKGlzSW5kZXgocGF0aFtpbmRleCArIDFdKSA/IFtdIDoge30pO1xuICAgICAgfVxuICAgIH1cbiAgICBhc3NpZ25WYWx1ZShuZXN0ZWQsIGtleSwgbmV3VmFsdWUpO1xuICAgIG5lc3RlZCA9IG5lc3RlZFtrZXldO1xuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldDtcbiIsInZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBtZXRhTWFwID0gcmVxdWlyZSgnLi9fbWV0YU1hcCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXREYXRhYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NvY2lhdGUgbWV0YWRhdGEgd2l0aC5cbiAqIEBwYXJhbSB7Kn0gZGF0YSBUaGUgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldERhdGEgPSAhbWV0YU1hcCA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgZGF0YSkge1xuICBtZXRhTWFwLnNldChmdW5jLCBkYXRhKTtcbiAgcmV0dXJuIGZ1bmM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTZXREYXRhO1xuIiwidmFyIGNvbnN0YW50ID0gcmVxdWlyZSgnLi9jb25zdGFudCcpLFxuICAgIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fZGVmaW5lUHJvcGVydHknKSxcbiAgICBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldFRvU3RyaW5nO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zbGljZWAgd2l0aG91dCBhbiBpdGVyYXRlZSBjYWxsIGd1YXJkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2xpY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IC1zdGFydCA+IGxlbmd0aCA/IDAgOiAobGVuZ3RoICsgc3RhcnQpO1xuICB9XG4gIGVuZCA9IGVuZCA+IGxlbmd0aCA/IGxlbmd0aCA6IGVuZDtcbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuZ3RoO1xuICB9XG4gIGxlbmd0aCA9IHN0YXJ0ID4gZW5kID8gMCA6ICgoZW5kIC0gc3RhcnQpID4+PiAwKTtcbiAgc3RhcnQgPj4+PSAwO1xuXG4gIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBhcnJheVtpbmRleCArIHN0YXJ0XTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTbGljZTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRpbWVzO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXG4gKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRvU3RyaW5nO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmFyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBzdG9yaW5nIG1ldGFkYXRhLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmModmFsdWUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbmFyeTtcbiIsInZhciBTZXRDYWNoZSA9IHJlcXVpcmUoJy4vX1NldENhY2hlJyksXG4gICAgYXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXMnKSxcbiAgICBhcnJheUluY2x1ZGVzV2l0aCA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXNXaXRoJyksXG4gICAgY2FjaGVIYXMgPSByZXF1aXJlKCcuL19jYWNoZUhhcycpLFxuICAgIGNyZWF0ZVNldCA9IHJlcXVpcmUoJy4vX2NyZWF0ZVNldCcpLFxuICAgIHNldFRvQXJyYXkgPSByZXF1aXJlKCcuL19zZXRUb0FycmF5Jyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5pcUJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmlxKGFycmF5LCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlcyxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGlzQ29tbW9uID0gdHJ1ZSxcbiAgICAgIHJlc3VsdCA9IFtdLFxuICAgICAgc2VlbiA9IHJlc3VsdDtcblxuICBpZiAoY29tcGFyYXRvcikge1xuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiAgfVxuICBlbHNlIGlmIChsZW5ndGggPj0gTEFSR0VfQVJSQVlfU0laRSkge1xuICAgIHZhciBzZXQgPSBpdGVyYXRlZSA/IG51bGwgOiBjcmVhdGVTZXQoYXJyYXkpO1xuICAgIGlmIChzZXQpIHtcbiAgICAgIHJldHVybiBzZXRUb0FycmF5KHNldCk7XG4gICAgfVxuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgaW5jbHVkZXMgPSBjYWNoZUhhcztcbiAgICBzZWVuID0gbmV3IFNldENhY2hlO1xuICB9XG4gIGVsc2Uge1xuICAgIHNlZW4gPSBpdGVyYXRlZSA/IFtdIDogcmVzdWx0O1xuICB9XG4gIG91dGVyOlxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlKSA6IHZhbHVlO1xuXG4gICAgdmFsdWUgPSAoY29tcGFyYXRvciB8fCB2YWx1ZSAhPT0gMCkgPyB2YWx1ZSA6IDA7XG4gICAgaWYgKGlzQ29tbW9uICYmIGNvbXB1dGVkID09PSBjb21wdXRlZCkge1xuICAgICAgdmFyIHNlZW5JbmRleCA9IHNlZW4ubGVuZ3RoO1xuICAgICAgd2hpbGUgKHNlZW5JbmRleC0tKSB7XG4gICAgICAgIGlmIChzZWVuW3NlZW5JbmRleF0gPT09IGNvbXB1dGVkKSB7XG4gICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpdGVyYXRlZSkge1xuICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmICghaW5jbHVkZXMoc2VlbiwgY29tcHV0ZWQsIGNvbXBhcmF0b3IpKSB7XG4gICAgICBpZiAoc2VlbiAhPT0gcmVzdWx0KSB7XG4gICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuaXE7XG4iLCJ2YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIGxhc3QgPSByZXF1aXJlKCcuL2xhc3QnKSxcbiAgICBwYXJlbnQgPSByZXF1aXJlKCcuL19wYXJlbnQnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5zZXRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHByb3BlcnR5IHBhdGggdG8gdW5zZXQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IGlzIGRlbGV0ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuc2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgb2JqZWN0ID0gcGFyZW50KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCB8fCBkZWxldGUgb2JqZWN0W3RvS2V5KGxhc3QocGF0aCkpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5zZXQ7XG4iLCJ2YXIgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnZhbHVlc2AgYW5kIGBfLnZhbHVlc0luYCB3aGljaCBjcmVhdGVzIGFuXG4gKiBhcnJheSBvZiBgb2JqZWN0YCBwcm9wZXJ0eSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvcGVydHkgbmFtZXNcbiAqIG9mIGBwcm9wc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBuYW1lcyB0byBnZXQgdmFsdWVzIGZvci5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gYmFzZVZhbHVlcyhvYmplY3QsIHByb3BzKSB7XG4gIHJldHVybiBhcnJheU1hcChwcm9wcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIG9iamVjdFtrZXldO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVmFsdWVzO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICByZXR1cm4gY2FjaGUuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FjaGVIYXM7XG4iLCJ2YXIgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5Jyk7XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBgaWRlbnRpdHlgIGlmIGl0J3Mgbm90IGEgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgY2FzdCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY2FzdEZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJyA/IHZhbHVlIDogaWRlbnRpdHk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FzdEZ1bmN0aW9uO1xuIiwidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0tleSA9IHJlcXVpcmUoJy4vX2lzS2V5JyksXG4gICAgc3RyaW5nVG9QYXRoID0gcmVxdWlyZSgnLi9fc3RyaW5nVG9QYXRoJyksXG4gICAgdG9TdHJpbmcgPSByZXF1aXJlKCcuL3RvU3RyaW5nJyk7XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBhIHBhdGggYXJyYXkgaWYgaXQncyBub3Qgb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICovXG5mdW5jdGlvbiBjYXN0UGF0aCh2YWx1ZSwgb2JqZWN0KSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gaXNLZXkodmFsdWUsIG9iamVjdCkgPyBbdmFsdWVdIDogc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FzdFBhdGg7XG4iLCJ2YXIgVWludDhBcnJheSA9IHJlcXVpcmUoJy4vX1VpbnQ4QXJyYXknKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGFycmF5QnVmZmVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYXJyYXlCdWZmZXIgVGhlIGFycmF5IGJ1ZmZlciB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtBcnJheUJ1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGFycmF5IGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gY2xvbmVBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikge1xuICB2YXIgcmVzdWx0ID0gbmV3IGFycmF5QnVmZmVyLmNvbnN0cnVjdG9yKGFycmF5QnVmZmVyLmJ5dGVMZW5ndGgpO1xuICBuZXcgVWludDhBcnJheShyZXN1bHQpLnNldChuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcikpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lQXJyYXlCdWZmZXI7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQsXG4gICAgYWxsb2NVbnNhZmUgPSBCdWZmZXIgPyBCdWZmZXIuYWxsb2NVbnNhZmUgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mICBgYnVmZmVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQnVmZmVyKGJ1ZmZlciwgaXNEZWVwKSB7XG4gIGlmIChpc0RlZXApIHtcbiAgICByZXR1cm4gYnVmZmVyLnNsaWNlKCk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBhbGxvY1Vuc2FmZSA/IGFsbG9jVW5zYWZlKGxlbmd0aCkgOiBuZXcgYnVmZmVyLmNvbnN0cnVjdG9yKGxlbmd0aCk7XG5cbiAgYnVmZmVyLmNvcHkocmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZUJ1ZmZlcjtcbiIsInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgZGF0YVZpZXdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YVZpZXcgVGhlIGRhdGEgdmlldyB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgZGF0YSB2aWV3LlxuICovXG5mdW5jdGlvbiBjbG9uZURhdGFWaWV3KGRhdGFWaWV3LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIoZGF0YVZpZXcuYnVmZmVyKSA6IGRhdGFWaWV3LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyBkYXRhVmlldy5jb25zdHJ1Y3RvcihidWZmZXIsIGRhdGFWaWV3LmJ5dGVPZmZzZXQsIGRhdGFWaWV3LmJ5dGVMZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lRGF0YVZpZXc7XG4iLCIvKiogVXNlZCB0byBtYXRjaCBgUmVnRXhwYCBmbGFncyBmcm9tIHRoZWlyIGNvZXJjZWQgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUZsYWdzID0gL1xcdyokLztcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHJlZ2V4cGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWdleHAgVGhlIHJlZ2V4cCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCByZWdleHAuXG4gKi9cbmZ1bmN0aW9uIGNsb25lUmVnRXhwKHJlZ2V4cCkge1xuICB2YXIgcmVzdWx0ID0gbmV3IHJlZ2V4cC5jb25zdHJ1Y3RvcihyZWdleHAuc291cmNlLCByZUZsYWdzLmV4ZWMocmVnZXhwKSk7XG4gIHJlc3VsdC5sYXN0SW5kZXggPSByZWdleHAubGFzdEluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lUmVnRXhwO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGBzeW1ib2xgIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHN5bWJvbCBUaGUgc3ltYm9sIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBzeW1ib2wgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBjbG9uZVN5bWJvbChzeW1ib2wpIHtcbiAgcmV0dXJuIHN5bWJvbFZhbHVlT2YgPyBPYmplY3Qoc3ltYm9sVmFsdWVPZi5jYWxsKHN5bWJvbCkpIDoge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVTeW1ib2w7XG4iLCJ2YXIgY2xvbmVBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQXJyYXlCdWZmZXInKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHR5cGVkQXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gdHlwZWRBcnJheSBUaGUgdHlwZWQgYXJyYXkgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHR5cGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBjbG9uZVR5cGVkQXJyYXkodHlwZWRBcnJheSwgaXNEZWVwKSB7XG4gIHZhciBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKHR5cGVkQXJyYXkuYnVmZmVyKSA6IHR5cGVkQXJyYXkuYnVmZmVyO1xuICByZXR1cm4gbmV3IHR5cGVkQXJyYXkuY29uc3RydWN0b3IoYnVmZmVyLCB0eXBlZEFycmF5LmJ5dGVPZmZzZXQsIHR5cGVkQXJyYXkubGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVR5cGVkQXJyYXk7XG4iLCIvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMsXG4gKiBwbGFjZWhvbGRlcnMsIGFuZCBwcm92aWRlZCBhcmd1bWVudHMgaW50byBhIHNpbmdsZSBhcnJheSBvZiBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZC5cbiAqIEBwYXJhbSB7QXJyYXl9IGhvbGRlcnMgVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbXMge2Jvb2xlYW59IFtpc0N1cnJpZWRdIFNwZWNpZnkgY29tcG9zaW5nIGZvciBhIGN1cnJpZWQgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21wb3NlZCBhcmd1bWVudHMuXG4gKi9cbmZ1bmN0aW9uIGNvbXBvc2VBcmdzKGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpIHtcbiAgdmFyIGFyZ3NJbmRleCA9IC0xLFxuICAgICAgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoLFxuICAgICAgaG9sZGVyc0xlbmd0aCA9IGhvbGRlcnMubGVuZ3RoLFxuICAgICAgbGVmdEluZGV4ID0gLTEsXG4gICAgICBsZWZ0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgcmFuZ2VMZW5ndGggPSBuYXRpdmVNYXgoYXJnc0xlbmd0aCAtIGhvbGRlcnNMZW5ndGgsIDApLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVmdExlbmd0aCArIHJhbmdlTGVuZ3RoKSxcbiAgICAgIGlzVW5jdXJyaWVkID0gIWlzQ3VycmllZDtcblxuICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgcmVzdWx0W2xlZnRJbmRleF0gPSBwYXJ0aWFsc1tsZWZ0SW5kZXhdO1xuICB9XG4gIHdoaWxlICgrK2FyZ3NJbmRleCA8IGhvbGRlcnNMZW5ndGgpIHtcbiAgICBpZiAoaXNVbmN1cnJpZWQgfHwgYXJnc0luZGV4IDwgYXJnc0xlbmd0aCkge1xuICAgICAgcmVzdWx0W2hvbGRlcnNbYXJnc0luZGV4XV0gPSBhcmdzW2FyZ3NJbmRleF07XG4gICAgfVxuICB9XG4gIHdoaWxlIChyYW5nZUxlbmd0aC0tKSB7XG4gICAgcmVzdWx0W2xlZnRJbmRleCsrXSA9IGFyZ3NbYXJnc0luZGV4KytdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcG9zZUFyZ3M7XG4iLCIvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBjb21wb3NlQXJnc2AgZXhjZXB0IHRoYXQgdGhlIGFyZ3VtZW50cyBjb21wb3NpdGlvblxuICogaXMgdGFpbG9yZWQgZm9yIGBfLnBhcnRpYWxSaWdodGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gYXBwZW5kIHRvIHRob3NlIHByb3ZpZGVkLlxuICogQHBhcmFtIHtBcnJheX0gaG9sZGVycyBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtcyB7Ym9vbGVhbn0gW2lzQ3VycmllZF0gU3BlY2lmeSBjb21wb3NpbmcgZm9yIGEgY3VycmllZCBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbXBvc2VkIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gY29tcG9zZUFyZ3NSaWdodChhcmdzLCBwYXJ0aWFscywgaG9sZGVycywgaXNDdXJyaWVkKSB7XG4gIHZhciBhcmdzSW5kZXggPSAtMSxcbiAgICAgIGFyZ3NMZW5ndGggPSBhcmdzLmxlbmd0aCxcbiAgICAgIGhvbGRlcnNJbmRleCA9IC0xLFxuICAgICAgaG9sZGVyc0xlbmd0aCA9IGhvbGRlcnMubGVuZ3RoLFxuICAgICAgcmlnaHRJbmRleCA9IC0xLFxuICAgICAgcmlnaHRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsXG4gICAgICByYW5nZUxlbmd0aCA9IG5hdGl2ZU1heChhcmdzTGVuZ3RoIC0gaG9sZGVyc0xlbmd0aCwgMCksXG4gICAgICByZXN1bHQgPSBBcnJheShyYW5nZUxlbmd0aCArIHJpZ2h0TGVuZ3RoKSxcbiAgICAgIGlzVW5jdXJyaWVkID0gIWlzQ3VycmllZDtcblxuICB3aGlsZSAoKythcmdzSW5kZXggPCByYW5nZUxlbmd0aCkge1xuICAgIHJlc3VsdFthcmdzSW5kZXhdID0gYXJnc1thcmdzSW5kZXhdO1xuICB9XG4gIHZhciBvZmZzZXQgPSBhcmdzSW5kZXg7XG4gIHdoaWxlICgrK3JpZ2h0SW5kZXggPCByaWdodExlbmd0aCkge1xuICAgIHJlc3VsdFtvZmZzZXQgKyByaWdodEluZGV4XSA9IHBhcnRpYWxzW3JpZ2h0SW5kZXhdO1xuICB9XG4gIHdoaWxlICgrK2hvbGRlcnNJbmRleCA8IGhvbGRlcnNMZW5ndGgpIHtcbiAgICBpZiAoaXNVbmN1cnJpZWQgfHwgYXJnc0luZGV4IDwgYXJnc0xlbmd0aCkge1xuICAgICAgcmVzdWx0W29mZnNldCArIGhvbGRlcnNbaG9sZGVyc0luZGV4XV0gPSBhcmdzW2FyZ3NJbmRleCsrXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb21wb3NlQXJnc1JpZ2h0O1xuIiwiLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBgc291cmNlYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG5cbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weUFycmF5O1xuIiwidmFyIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKTtcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weU9iamVjdDtcbiIsInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGdldFN5bWJvbHMgPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzJyk7XG5cbi8qKlxuICogQ29waWVzIG93biBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5U3ltYm9scyhzb3VyY2UsIG9iamVjdCkge1xuICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHMoc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5U3ltYm9scztcbiIsInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGdldFN5bWJvbHNJbiA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHNJbicpO1xuXG4vKipcbiAqIENvcGllcyBvd24gYW5kIGluaGVyaXRlZCBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5U3ltYm9sc0luKHNvdXJjZSwgb2JqZWN0KSB7XG4gIHJldHVybiBjb3B5T2JqZWN0KHNvdXJjZSwgZ2V0U3ltYm9sc0luKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVN5bWJvbHNJbjtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcmVKc0RhdGE7XG4iLCIvKipcbiAqIEdldHMgdGhlIG51bWJlciBvZiBgcGxhY2Vob2xkZXJgIG9jY3VycmVuY2VzIGluIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBwbGFjZWhvbGRlciBUaGUgcGxhY2Vob2xkZXIgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHBsYWNlaG9sZGVyIGNvdW50LlxuICovXG5mdW5jdGlvbiBjb3VudEhvbGRlcnMoYXJyYXksIHBsYWNlaG9sZGVyKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSAwO1xuXG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGlmIChhcnJheVtsZW5ndGhdID09PSBwbGFjZWhvbGRlcikge1xuICAgICAgKytyZXN1bHQ7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY291bnRIb2xkZXJzO1xuIiwidmFyIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBpc0l0ZXJhdGVlQ2FsbCA9IHJlcXVpcmUoJy4vX2lzSXRlcmF0ZWVDYWxsJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uYXNzaWduYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gYXNzaWduZXIgVGhlIGZ1bmN0aW9uIHRvIGFzc2lnbiB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhc3NpZ25lciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoYXNzaWduZXIpIHtcbiAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwgc291cmNlcykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBzb3VyY2VzLmxlbmd0aCxcbiAgICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA+IDEgPyBzb3VyY2VzW2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkLFxuICAgICAgICBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xuXG4gICAgY3VzdG9taXplciA9IChhc3NpZ25lci5sZW5ndGggPiAzICYmIHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicpXG4gICAgICA/IChsZW5ndGgtLSwgY3VzdG9taXplcilcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHNvdXJjZXNbMF0sIHNvdXJjZXNbMV0sIGd1YXJkKSkge1xuICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiBjdXN0b21pemVyO1xuICAgICAgbGVuZ3RoID0gMTtcbiAgICB9XG4gICAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzW2luZGV4XTtcbiAgICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgYXNzaWduZXIob2JqZWN0LCBzb3VyY2UsIGluZGV4LCBjdXN0b21pemVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQXNzaWduZXI7XG4iLCJ2YXIgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGBiYXNlRWFjaGAgb3IgYGJhc2VFYWNoUmlnaHRgIGZ1bmN0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlYWNoRnVuYyBUaGUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGEgY29sbGVjdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmFzZUVhY2goZWFjaEZ1bmMsIGZyb21SaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICB9XG4gICAgaWYgKCFpc0FycmF5TGlrZShjb2xsZWN0aW9uKSkge1xuICAgICAgcmV0dXJuIGVhY2hGdW5jKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKTtcbiAgICB9XG4gICAgdmFyIGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IGZyb21SaWdodCA/IGxlbmd0aCA6IC0xLFxuICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChjb2xsZWN0aW9uKTtcblxuICAgIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVbaW5kZXhdLCBpbmRleCwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQmFzZUVhY2g7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBiYXNlIGZ1bmN0aW9uIGZvciBtZXRob2RzIGxpa2UgYF8uZm9ySW5gIGFuZCBgXy5mb3JPd25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VGb3IoZnJvbVJpZ2h0KSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzRnVuYykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChvYmplY3QpLFxuICAgICAgICBwcm9wcyA9IGtleXNGdW5jKG9iamVjdCksXG4gICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgdmFyIGtleSA9IHByb3BzW2Zyb21SaWdodCA/IGxlbmd0aCA6ICsraW5kZXhdO1xuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVCYXNlRm9yO1xuIiwidmFyIGNyZWF0ZUN0b3IgPSByZXF1aXJlKCcuL19jcmVhdGVDdG9yJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBpbnZva2UgaXQgd2l0aCB0aGUgb3B0aW9uYWwgYHRoaXNgXG4gKiBiaW5kaW5nIG9mIGB0aGlzQXJnYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmluZChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnKSB7XG4gIHZhciBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICBDdG9yID0gY3JlYXRlQ3RvcihmdW5jKTtcblxuICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgIHZhciBmbiA9ICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpID8gQ3RvciA6IGZ1bmM7XG4gICAgcmV0dXJuIGZuLmFwcGx5KGlzQmluZCA/IHRoaXNBcmcgOiB0aGlzLCBhcmd1bWVudHMpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUJpbmQ7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwcm9kdWNlcyBhbiBpbnN0YW5jZSBvZiBgQ3RvcmAgcmVnYXJkbGVzcyBvZlxuICogd2hldGhlciBpdCB3YXMgaW52b2tlZCBhcyBwYXJ0IG9mIGEgYG5ld2AgZXhwcmVzc2lvbiBvciBieSBgY2FsbGAgb3IgYGFwcGx5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gQ3RvciBUaGUgY29uc3RydWN0b3IgdG8gd3JhcC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUN0b3IoQ3Rvcikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgLy8gVXNlIGEgYHN3aXRjaGAgc3RhdGVtZW50IHRvIHdvcmsgd2l0aCBjbGFzcyBjb25zdHJ1Y3RvcnMuIFNlZVxuICAgIC8vIGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtZnVuY3Rpb24tb2JqZWN0cy1jYWxsLXRoaXNhcmd1bWVudC1hcmd1bWVudHNsaXN0XG4gICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6IHJldHVybiBuZXcgQ3RvcjtcbiAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0pO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICBjYXNlIDM6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSk7XG4gICAgICBjYXNlIDY6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdKTtcbiAgICAgIGNhc2UgNzogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0sIGFyZ3NbNl0pO1xuICAgIH1cbiAgICB2YXIgdGhpc0JpbmRpbmcgPSBiYXNlQ3JlYXRlKEN0b3IucHJvdG90eXBlKSxcbiAgICAgICAgcmVzdWx0ID0gQ3Rvci5hcHBseSh0aGlzQmluZGluZywgYXJncyk7XG5cbiAgICAvLyBNaW1pYyB0aGUgY29uc3RydWN0b3IncyBgcmV0dXJuYCBiZWhhdmlvci5cbiAgICAvLyBTZWUgaHR0cHM6Ly9lczUuZ2l0aHViLmlvLyN4MTMuMi4yIGZvciBtb3JlIGRldGFpbHMuXG4gICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiB0aGlzQmluZGluZztcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDdG9yO1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKSxcbiAgICBjcmVhdGVDdG9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQ3RvcicpLFxuICAgIGNyZWF0ZUh5YnJpZCA9IHJlcXVpcmUoJy4vX2NyZWF0ZUh5YnJpZCcpLFxuICAgIGNyZWF0ZVJlY3VycnkgPSByZXF1aXJlKCcuL19jcmVhdGVSZWN1cnJ5JyksXG4gICAgZ2V0SG9sZGVyID0gcmVxdWlyZSgnLi9fZ2V0SG9sZGVyJyksXG4gICAgcmVwbGFjZUhvbGRlcnMgPSByZXF1aXJlKCcuL19yZXBsYWNlSG9sZGVycycpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGVuYWJsZSBjdXJyeWluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge251bWJlcn0gYXJpdHkgVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUN1cnJ5KGZ1bmMsIGJpdG1hc2ssIGFyaXR5KSB7XG4gIHZhciBDdG9yID0gY3JlYXRlQ3RvcihmdW5jKTtcblxuICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICBhcmdzID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgaW5kZXggPSBsZW5ndGgsXG4gICAgICAgIHBsYWNlaG9sZGVyID0gZ2V0SG9sZGVyKHdyYXBwZXIpO1xuXG4gICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgIGFyZ3NbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICB9XG4gICAgdmFyIGhvbGRlcnMgPSAobGVuZ3RoIDwgMyAmJiBhcmdzWzBdICE9PSBwbGFjZWhvbGRlciAmJiBhcmdzW2xlbmd0aCAtIDFdICE9PSBwbGFjZWhvbGRlcilcbiAgICAgID8gW11cbiAgICAgIDogcmVwbGFjZUhvbGRlcnMoYXJncywgcGxhY2Vob2xkZXIpO1xuXG4gICAgbGVuZ3RoIC09IGhvbGRlcnMubGVuZ3RoO1xuICAgIGlmIChsZW5ndGggPCBhcml0eSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZVJlY3VycnkoXG4gICAgICAgIGZ1bmMsIGJpdG1hc2ssIGNyZWF0ZUh5YnJpZCwgd3JhcHBlci5wbGFjZWhvbGRlciwgdW5kZWZpbmVkLFxuICAgICAgICBhcmdzLCBob2xkZXJzLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYXJpdHkgLSBsZW5ndGgpO1xuICAgIH1cbiAgICB2YXIgZm4gPSAodGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSA/IEN0b3IgOiBmdW5jO1xuICAgIHJldHVybiBhcHBseShmbiwgdGhpcywgYXJncyk7XG4gIH1cbiAgcmV0dXJuIHdyYXBwZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQ3Vycnk7XG4iLCJ2YXIgYmFzZUl0ZXJhdGVlID0gcmVxdWlyZSgnLi9fYmFzZUl0ZXJhdGVlJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgXy5maW5kYCBvciBgXy5maW5kTGFzdGAgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZpbmRJbmRleEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGNvbGxlY3Rpb24gaW5kZXguXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmaW5kIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVGaW5kKGZpbmRJbmRleEZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZnJvbUluZGV4KSB7XG4gICAgdmFyIGl0ZXJhYmxlID0gT2JqZWN0KGNvbGxlY3Rpb24pO1xuICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgIHZhciBpdGVyYXRlZSA9IGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpO1xuICAgICAgY29sbGVjdGlvbiA9IGtleXMoY29sbGVjdGlvbik7XG4gICAgICBwcmVkaWNhdGUgPSBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpOyB9O1xuICAgIH1cbiAgICB2YXIgaW5kZXggPSBmaW5kSW5kZXhGdW5jKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZnJvbUluZGV4KTtcbiAgICByZXR1cm4gaW5kZXggPiAtMSA/IGl0ZXJhYmxlW2l0ZXJhdGVlID8gY29sbGVjdGlvbltpbmRleF0gOiBpbmRleF0gOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlRmluZDtcbiIsInZhciBjb21wb3NlQXJncyA9IHJlcXVpcmUoJy4vX2NvbXBvc2VBcmdzJyksXG4gICAgY29tcG9zZUFyZ3NSaWdodCA9IHJlcXVpcmUoJy4vX2NvbXBvc2VBcmdzUmlnaHQnKSxcbiAgICBjb3VudEhvbGRlcnMgPSByZXF1aXJlKCcuL19jb3VudEhvbGRlcnMnKSxcbiAgICBjcmVhdGVDdG9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQ3RvcicpLFxuICAgIGNyZWF0ZVJlY3VycnkgPSByZXF1aXJlKCcuL19jcmVhdGVSZWN1cnJ5JyksXG4gICAgZ2V0SG9sZGVyID0gcmVxdWlyZSgnLi9fZ2V0SG9sZGVyJyksXG4gICAgcmVvcmRlciA9IHJlcXVpcmUoJy4vX3Jlb3JkZXInKSxcbiAgICByZXBsYWNlSG9sZGVycyA9IHJlcXVpcmUoJy4vX3JlcGxhY2VIb2xkZXJzJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcgPSAxNixcbiAgICBXUkFQX0FSWV9GTEFHID0gMTI4LFxuICAgIFdSQVBfRkxJUF9GTEFHID0gNTEyO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBpbnZva2UgaXQgd2l0aCBvcHRpb25hbCBgdGhpc2BcbiAqIGJpbmRpbmcgb2YgYHRoaXNBcmdgLCBwYXJ0aWFsIGFwcGxpY2F0aW9uLCBhbmQgY3VycnlpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb258c3RyaW5nfSBmdW5jIFRoZSBmdW5jdGlvbiBvciBtZXRob2QgbmFtZSB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0b1xuICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc10gVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc1JpZ2h0XSBUaGUgYXJndW1lbnRzIHRvIGFwcGVuZCB0byB0aG9zZSBwcm92aWRlZFxuICogIHRvIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc1JpZ2h0XSBUaGUgYHBhcnRpYWxzUmlnaHRgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJnUG9zXSBUaGUgYXJndW1lbnQgcG9zaXRpb25zIG9mIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyeV0gVGhlIGFyaXR5IGNhcCBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5XSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSHlicmlkKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBwYXJ0aWFsc1JpZ2h0LCBob2xkZXJzUmlnaHQsIGFyZ1BvcywgYXJ5LCBhcml0eSkge1xuICB2YXIgaXNBcnkgPSBiaXRtYXNrICYgV1JBUF9BUllfRkxBRyxcbiAgICAgIGlzQmluZCA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRyxcbiAgICAgIGlzQmluZEtleSA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfS0VZX0ZMQUcsXG4gICAgICBpc0N1cnJpZWQgPSBiaXRtYXNrICYgKFdSQVBfQ1VSUllfRkxBRyB8IFdSQVBfQ1VSUllfUklHSFRfRkxBRyksXG4gICAgICBpc0ZsaXAgPSBiaXRtYXNrICYgV1JBUF9GTElQX0ZMQUcsXG4gICAgICBDdG9yID0gaXNCaW5kS2V5ID8gdW5kZWZpbmVkIDogY3JlYXRlQ3RvcihmdW5jKTtcblxuICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICBhcmdzID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgaW5kZXggPSBsZW5ndGg7XG5cbiAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgIH1cbiAgICBpZiAoaXNDdXJyaWVkKSB7XG4gICAgICB2YXIgcGxhY2Vob2xkZXIgPSBnZXRIb2xkZXIod3JhcHBlciksXG4gICAgICAgICAgaG9sZGVyc0NvdW50ID0gY291bnRIb2xkZXJzKGFyZ3MsIHBsYWNlaG9sZGVyKTtcbiAgICB9XG4gICAgaWYgKHBhcnRpYWxzKSB7XG4gICAgICBhcmdzID0gY29tcG9zZUFyZ3MoYXJncywgcGFydGlhbHMsIGhvbGRlcnMsIGlzQ3VycmllZCk7XG4gICAgfVxuICAgIGlmIChwYXJ0aWFsc1JpZ2h0KSB7XG4gICAgICBhcmdzID0gY29tcG9zZUFyZ3NSaWdodChhcmdzLCBwYXJ0aWFsc1JpZ2h0LCBob2xkZXJzUmlnaHQsIGlzQ3VycmllZCk7XG4gICAgfVxuICAgIGxlbmd0aCAtPSBob2xkZXJzQ291bnQ7XG4gICAgaWYgKGlzQ3VycmllZCAmJiBsZW5ndGggPCBhcml0eSkge1xuICAgICAgdmFyIG5ld0hvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhhcmdzLCBwbGFjZWhvbGRlcik7XG4gICAgICByZXR1cm4gY3JlYXRlUmVjdXJyeShcbiAgICAgICAgZnVuYywgYml0bWFzaywgY3JlYXRlSHlicmlkLCB3cmFwcGVyLnBsYWNlaG9sZGVyLCB0aGlzQXJnLFxuICAgICAgICBhcmdzLCBuZXdIb2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkgLSBsZW5ndGhcbiAgICAgICk7XG4gICAgfVxuICAgIHZhciB0aGlzQmluZGluZyA9IGlzQmluZCA/IHRoaXNBcmcgOiB0aGlzLFxuICAgICAgICBmbiA9IGlzQmluZEtleSA/IHRoaXNCaW5kaW5nW2Z1bmNdIDogZnVuYztcblxuICAgIGxlbmd0aCA9IGFyZ3MubGVuZ3RoO1xuICAgIGlmIChhcmdQb3MpIHtcbiAgICAgIGFyZ3MgPSByZW9yZGVyKGFyZ3MsIGFyZ1Bvcyk7XG4gICAgfSBlbHNlIGlmIChpc0ZsaXAgJiYgbGVuZ3RoID4gMSkge1xuICAgICAgYXJncy5yZXZlcnNlKCk7XG4gICAgfVxuICAgIGlmIChpc0FyeSAmJiBhcnkgPCBsZW5ndGgpIHtcbiAgICAgIGFyZ3MubGVuZ3RoID0gYXJ5O1xuICAgIH1cbiAgICBpZiAodGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSB7XG4gICAgICBmbiA9IEN0b3IgfHwgY3JlYXRlQ3Rvcihmbik7XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQmluZGluZywgYXJncyk7XG4gIH1cbiAgcmV0dXJuIHdyYXBwZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlSHlicmlkO1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKSxcbiAgICBjcmVhdGVDdG9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQ3RvcicpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gaW52b2tlIGl0IHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nXG4gKiBvZiBgdGhpc0FyZ2AgYW5kIGBwYXJ0aWFsc2AgcHJlcGVuZGVkIHRvIHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBwYXJ0aWFscyBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAqICB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUGFydGlhbChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscykge1xuICB2YXIgaXNCaW5kID0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHLFxuICAgICAgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgYXJnc0luZGV4ID0gLTEsXG4gICAgICAgIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICBsZWZ0SW5kZXggPSAtMSxcbiAgICAgICAgbGVmdExlbmd0aCA9IHBhcnRpYWxzLmxlbmd0aCxcbiAgICAgICAgYXJncyA9IEFycmF5KGxlZnRMZW5ndGggKyBhcmdzTGVuZ3RoKSxcbiAgICAgICAgZm4gPSAodGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSA/IEN0b3IgOiBmdW5jO1xuXG4gICAgd2hpbGUgKCsrbGVmdEluZGV4IDwgbGVmdExlbmd0aCkge1xuICAgICAgYXJnc1tsZWZ0SW5kZXhdID0gcGFydGlhbHNbbGVmdEluZGV4XTtcbiAgICB9XG4gICAgd2hpbGUgKGFyZ3NMZW5ndGgtLSkge1xuICAgICAgYXJnc1tsZWZ0SW5kZXgrK10gPSBhcmd1bWVudHNbKythcmdzSW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gYXBwbHkoZm4sIGlzQmluZCA/IHRoaXNBcmcgOiB0aGlzLCBhcmdzKTtcbiAgfVxuICByZXR1cm4gd3JhcHBlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVQYXJ0aWFsO1xuIiwidmFyIGlzTGF6aWFibGUgPSByZXF1aXJlKCcuL19pc0xhemlhYmxlJyksXG4gICAgc2V0RGF0YSA9IHJlcXVpcmUoJy4vX3NldERhdGEnKSxcbiAgICBzZXRXcmFwVG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRXcmFwVG9TdHJpbmcnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9CT1VORF9GTEFHID0gNCxcbiAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzIsXG4gICAgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgPSA2NDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gY29udGludWUgY3VycnlpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gd3JhcEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgYGZ1bmNgIHdyYXBwZXIuXG4gKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB2YWx1ZS5cbiAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0b1xuICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc10gVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcmdQb3NdIFRoZSBhcmd1bWVudCBwb3NpdGlvbnMgb2YgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVSZWN1cnJ5KGZ1bmMsIGJpdG1hc2ssIHdyYXBGdW5jLCBwbGFjZWhvbGRlciwgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIGFyZ1BvcywgYXJ5LCBhcml0eSkge1xuICB2YXIgaXNDdXJyeSA9IGJpdG1hc2sgJiBXUkFQX0NVUlJZX0ZMQUcsXG4gICAgICBuZXdIb2xkZXJzID0gaXNDdXJyeSA/IGhvbGRlcnMgOiB1bmRlZmluZWQsXG4gICAgICBuZXdIb2xkZXJzUmlnaHQgPSBpc0N1cnJ5ID8gdW5kZWZpbmVkIDogaG9sZGVycyxcbiAgICAgIG5ld1BhcnRpYWxzID0gaXNDdXJyeSA/IHBhcnRpYWxzIDogdW5kZWZpbmVkLFxuICAgICAgbmV3UGFydGlhbHNSaWdodCA9IGlzQ3VycnkgPyB1bmRlZmluZWQgOiBwYXJ0aWFscztcblxuICBiaXRtYXNrIHw9IChpc0N1cnJ5ID8gV1JBUF9QQVJUSUFMX0ZMQUcgOiBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyk7XG4gIGJpdG1hc2sgJj0gfihpc0N1cnJ5ID8gV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgOiBXUkFQX1BBUlRJQUxfRkxBRyk7XG5cbiAgaWYgKCEoYml0bWFzayAmIFdSQVBfQ1VSUllfQk9VTkRfRkxBRykpIHtcbiAgICBiaXRtYXNrICY9IH4oV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX0JJTkRfS0VZX0ZMQUcpO1xuICB9XG4gIHZhciBuZXdEYXRhID0gW1xuICAgIGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIG5ld1BhcnRpYWxzLCBuZXdIb2xkZXJzLCBuZXdQYXJ0aWFsc1JpZ2h0LFxuICAgIG5ld0hvbGRlcnNSaWdodCwgYXJnUG9zLCBhcnksIGFyaXR5XG4gIF07XG5cbiAgdmFyIHJlc3VsdCA9IHdyYXBGdW5jLmFwcGx5KHVuZGVmaW5lZCwgbmV3RGF0YSk7XG4gIGlmIChpc0xhemlhYmxlKGZ1bmMpKSB7XG4gICAgc2V0RGF0YShyZXN1bHQsIG5ld0RhdGEpO1xuICB9XG4gIHJlc3VsdC5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xuICByZXR1cm4gc2V0V3JhcFRvU3RyaW5nKHJlc3VsdCwgZnVuYywgYml0bWFzayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlUmVjdXJyeTtcbiIsInZhciBTZXQgPSByZXF1aXJlKCcuL19TZXQnKSxcbiAgICBub29wID0gcmVxdWlyZSgnLi9ub29wJyksXG4gICAgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4vX3NldFRvQXJyYXknKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2V0IG9iamVjdCBvZiBgdmFsdWVzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYWRkIHRvIHRoZSBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgc2V0LlxuICovXG52YXIgY3JlYXRlU2V0ID0gIShTZXQgJiYgKDEgLyBzZXRUb0FycmF5KG5ldyBTZXQoWywtMF0pKVsxXSkgPT0gSU5GSU5JVFkpID8gbm9vcCA6IGZ1bmN0aW9uKHZhbHVlcykge1xuICByZXR1cm4gbmV3IFNldCh2YWx1ZXMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVTZXQ7XG4iLCJ2YXIgYmFzZVNldERhdGEgPSByZXF1aXJlKCcuL19iYXNlU2V0RGF0YScpLFxuICAgIGNyZWF0ZUJpbmQgPSByZXF1aXJlKCcuL19jcmVhdGVCaW5kJyksXG4gICAgY3JlYXRlQ3VycnkgPSByZXF1aXJlKCcuL19jcmVhdGVDdXJyeScpLFxuICAgIGNyZWF0ZUh5YnJpZCA9IHJlcXVpcmUoJy4vX2NyZWF0ZUh5YnJpZCcpLFxuICAgIGNyZWF0ZVBhcnRpYWwgPSByZXF1aXJlKCcuL19jcmVhdGVQYXJ0aWFsJyksXG4gICAgZ2V0RGF0YSA9IHJlcXVpcmUoJy4vX2dldERhdGEnKSxcbiAgICBtZXJnZURhdGEgPSByZXF1aXJlKCcuL19tZXJnZURhdGEnKSxcbiAgICBzZXREYXRhID0gcmVxdWlyZSgnLi9fc2V0RGF0YScpLFxuICAgIHNldFdyYXBUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFdyYXBUb1N0cmluZycpLFxuICAgIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vdG9JbnRlZ2VyJyk7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfQ1VSUllfRkxBRyA9IDgsXG4gICAgV1JBUF9DVVJSWV9SSUdIVF9GTEFHID0gMTYsXG4gICAgV1JBUF9QQVJUSUFMX0ZMQUcgPSAzMixcbiAgICBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyA9IDY0O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgZWl0aGVyIGN1cnJpZXMgb3IgaW52b2tlcyBgZnVuY2Agd2l0aCBvcHRpb25hbFxuICogYHRoaXNgIGJpbmRpbmcgYW5kIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbnxzdHJpbmd9IGZ1bmMgVGhlIGZ1bmN0aW9uIG9yIG1ldGhvZCBuYW1lIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAgIDEgLSBgXy5iaW5kYFxuICogICAgMiAtIGBfLmJpbmRLZXlgXG4gKiAgICA0IC0gYF8uY3VycnlgIG9yIGBfLmN1cnJ5UmlnaHRgIG9mIGEgYm91bmQgZnVuY3Rpb25cbiAqICAgIDggLSBgXy5jdXJyeWBcbiAqICAgMTYgLSBgXy5jdXJyeVJpZ2h0YFxuICogICAzMiAtIGBfLnBhcnRpYWxgXG4gKiAgIDY0IC0gYF8ucGFydGlhbFJpZ2h0YFxuICogIDEyOCAtIGBfLnJlYXJnYFxuICogIDI1NiAtIGBfLmFyeWBcbiAqICA1MTIgLSBgXy5mbGlwYFxuICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzXSBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVdyYXAoZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIGFyZ1BvcywgYXJ5LCBhcml0eSkge1xuICB2YXIgaXNCaW5kS2V5ID0gYml0bWFzayAmIFdSQVBfQklORF9LRVlfRkxBRztcbiAgaWYgKCFpc0JpbmRLZXkgJiYgdHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB2YXIgbGVuZ3RoID0gcGFydGlhbHMgPyBwYXJ0aWFscy5sZW5ndGggOiAwO1xuICBpZiAoIWxlbmd0aCkge1xuICAgIGJpdG1hc2sgJj0gfihXUkFQX1BBUlRJQUxfRkxBRyB8IFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHKTtcbiAgICBwYXJ0aWFscyA9IGhvbGRlcnMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgYXJ5ID0gYXJ5ID09PSB1bmRlZmluZWQgPyBhcnkgOiBuYXRpdmVNYXgodG9JbnRlZ2VyKGFyeSksIDApO1xuICBhcml0eSA9IGFyaXR5ID09PSB1bmRlZmluZWQgPyBhcml0eSA6IHRvSW50ZWdlcihhcml0eSk7XG4gIGxlbmd0aCAtPSBob2xkZXJzID8gaG9sZGVycy5sZW5ndGggOiAwO1xuXG4gIGlmIChiaXRtYXNrICYgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcpIHtcbiAgICB2YXIgcGFydGlhbHNSaWdodCA9IHBhcnRpYWxzLFxuICAgICAgICBob2xkZXJzUmlnaHQgPSBob2xkZXJzO1xuXG4gICAgcGFydGlhbHMgPSBob2xkZXJzID0gdW5kZWZpbmVkO1xuICB9XG4gIHZhciBkYXRhID0gaXNCaW5kS2V5ID8gdW5kZWZpbmVkIDogZ2V0RGF0YShmdW5jKTtcblxuICB2YXIgbmV3RGF0YSA9IFtcbiAgICBmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LFxuICAgIGFyZ1BvcywgYXJ5LCBhcml0eVxuICBdO1xuXG4gIGlmIChkYXRhKSB7XG4gICAgbWVyZ2VEYXRhKG5ld0RhdGEsIGRhdGEpO1xuICB9XG4gIGZ1bmMgPSBuZXdEYXRhWzBdO1xuICBiaXRtYXNrID0gbmV3RGF0YVsxXTtcbiAgdGhpc0FyZyA9IG5ld0RhdGFbMl07XG4gIHBhcnRpYWxzID0gbmV3RGF0YVszXTtcbiAgaG9sZGVycyA9IG5ld0RhdGFbNF07XG4gIGFyaXR5ID0gbmV3RGF0YVs5XSA9IG5ld0RhdGFbOV0gPT09IHVuZGVmaW5lZFxuICAgID8gKGlzQmluZEtleSA/IDAgOiBmdW5jLmxlbmd0aClcbiAgICA6IG5hdGl2ZU1heChuZXdEYXRhWzldIC0gbGVuZ3RoLCAwKTtcblxuICBpZiAoIWFyaXR5ICYmIGJpdG1hc2sgJiAoV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9DVVJSWV9SSUdIVF9GTEFHKSkge1xuICAgIGJpdG1hc2sgJj0gfihXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpO1xuICB9XG4gIGlmICghYml0bWFzayB8fCBiaXRtYXNrID09IFdSQVBfQklORF9GTEFHKSB7XG4gICAgdmFyIHJlc3VsdCA9IGNyZWF0ZUJpbmQoZnVuYywgYml0bWFzaywgdGhpc0FyZyk7XG4gIH0gZWxzZSBpZiAoYml0bWFzayA9PSBXUkFQX0NVUlJZX0ZMQUcgfHwgYml0bWFzayA9PSBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpIHtcbiAgICByZXN1bHQgPSBjcmVhdGVDdXJyeShmdW5jLCBiaXRtYXNrLCBhcml0eSk7XG4gIH0gZWxzZSBpZiAoKGJpdG1hc2sgPT0gV1JBUF9QQVJUSUFMX0ZMQUcgfHwgYml0bWFzayA9PSAoV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX1BBUlRJQUxfRkxBRykpICYmICFob2xkZXJzLmxlbmd0aCkge1xuICAgIHJlc3VsdCA9IGNyZWF0ZVBhcnRpYWwoZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IGNyZWF0ZUh5YnJpZC5hcHBseSh1bmRlZmluZWQsIG5ld0RhdGEpO1xuICB9XG4gIHZhciBzZXR0ZXIgPSBkYXRhID8gYmFzZVNldERhdGEgOiBzZXREYXRhO1xuICByZXR1cm4gc2V0V3JhcFRvU3RyaW5nKHNldHRlcihyZXN1bHQsIG5ld0RhdGEpLCBmdW5jLCBiaXRtYXNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVXcmFwO1xuIiwidmFyIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuL2lzUGxhaW5PYmplY3QnKTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLm9taXRgIHRvIGN1c3RvbWl6ZSBpdHMgYF8uY2xvbmVEZWVwYCB1c2UgdG8gb25seSBjbG9uZSBwbGFpblxuICogb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB1bmNsb25lZCB2YWx1ZSBvciBgdW5kZWZpbmVkYCB0byBkZWZlciBjbG9uaW5nIHRvIGBfLmNsb25lRGVlcGAuXG4gKi9cbmZ1bmN0aW9uIGN1c3RvbU9taXRDbG9uZSh2YWx1ZSkge1xuICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyB1bmRlZmluZWQgOiB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjdXN0b21PbWl0Q2xvbmU7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICB2YXIgZnVuYyA9IGdldE5hdGl2ZShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xuICAgIGZ1bmMoe30sICcnLCB7fSk7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZVByb3BlcnR5O1xuIiwidmFyIFNldENhY2hlID0gcmVxdWlyZSgnLi9fU2V0Q2FjaGUnKSxcbiAgICBhcnJheVNvbWUgPSByZXF1aXJlKCcuL19hcnJheVNvbWUnKSxcbiAgICBjYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2NhY2hlSGFzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGFycmF5cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtBcnJheX0gb3RoZXIgVGhlIG90aGVyIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBhcnJheWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQXJyYXlzKGFycmF5LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgYXJyTGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoZXIubGVuZ3RoO1xuXG4gIGlmIChhcnJMZW5ndGggIT0gb3RoTGVuZ3RoICYmICEoaXNQYXJ0aWFsICYmIG90aExlbmd0aCA+IGFyckxlbmd0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChhcnJheSk7XG4gIGlmIChzdGFja2VkICYmIHN0YWNrLmdldChvdGhlcikpIHtcbiAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgfVxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IHRydWUsXG4gICAgICBzZWVuID0gKGJpdG1hc2sgJiBDT01QQVJFX1VOT1JERVJFRF9GTEFHKSA/IG5ldyBTZXRDYWNoZSA6IHVuZGVmaW5lZDtcblxuICBzdGFjay5zZXQoYXJyYXksIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBhcnJheSk7XG5cbiAgLy8gSWdub3JlIG5vbi1pbmRleCBwcm9wZXJ0aWVzLlxuICB3aGlsZSAoKytpbmRleCA8IGFyckxlbmd0aCkge1xuICAgIHZhciBhcnJWYWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltpbmRleF07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgYXJyVmFsdWUsIGluZGV4LCBvdGhlciwgYXJyYXksIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIoYXJyVmFsdWUsIG90aFZhbHVlLCBpbmRleCwgYXJyYXksIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIGlmIChjb21wYXJlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY29tcGFyZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmIChzZWVuKSB7XG4gICAgICBpZiAoIWFycmF5U29tZShvdGhlciwgZnVuY3Rpb24ob3RoVmFsdWUsIG90aEluZGV4KSB7XG4gICAgICAgICAgICBpZiAoIWNhY2hlSGFzKHNlZW4sIG90aEluZGV4KSAmJlxuICAgICAgICAgICAgICAgIChhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKSkge1xuICAgICAgICAgICAgICByZXR1cm4gc2Vlbi5wdXNoKG90aEluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSkge1xuICAgICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghKFxuICAgICAgICAgIGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fFxuICAgICAgICAgICAgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShhcnJheSk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxBcnJheXM7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgVWludDhBcnJheSA9IHJlcXVpcmUoJy4vX1VpbnQ4QXJyYXknKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgbWFwVG9BcnJheSA9IHJlcXVpcmUoJy4vX21hcFRvQXJyYXknKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFZhbHVlT2YgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnZhbHVlT2YgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBjb21wYXJpbmcgb2JqZWN0cyBvZlxuICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNvbXBhcmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0cyB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAob2JqZWN0LmJ5dGVPZmZzZXQgIT0gb3RoZXIuYnl0ZU9mZnNldCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgb2JqZWN0ID0gb2JqZWN0LmJ1ZmZlcjtcbiAgICAgIG90aGVyID0gb3RoZXIuYnVmZmVyO1xuXG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBVaW50OEFycmF5KG9iamVjdCksIG5ldyBVaW50OEFycmF5KG90aGVyKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cbiAgICAgIC8vIEludmFsaWQgZGF0ZXMgYXJlIGNvZXJjZWQgdG8gYE5hTmAuXG4gICAgICByZXR1cm4gZXEoK29iamVjdCwgK290aGVyKTtcblxuICAgIGNhc2UgZXJyb3JUYWc6XG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWUgPT0gb3RoZXIubmFtZSAmJiBvYmplY3QubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICAvLyBDb2VyY2UgcmVnZXhlcyB0byBzdHJpbmdzIGFuZCB0cmVhdCBzdHJpbmdzLCBwcmltaXRpdmVzIGFuZCBvYmplY3RzLFxuICAgICAgLy8gYXMgZXF1YWwuIFNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiBvYmplY3QgPT0gKG90aGVyICsgJycpO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICB2YXIgY29udmVydCA9IG1hcFRvQXJyYXk7XG5cbiAgICBjYXNlIHNldFRhZzpcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XG4gICAgICBjb252ZXJ0IHx8IChjb252ZXJ0ID0gc2V0VG9BcnJheSk7XG5cbiAgICAgIGlmIChvYmplY3Quc2l6ZSAhPSBvdGhlci5zaXplICYmICFpc1BhcnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgICAgIGlmIChzdGFja2VkKSB7XG4gICAgICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xuICAgICAgfVxuICAgICAgYml0bWFzayB8PSBDT01QQVJFX1VOT1JERVJFRF9GTEFHO1xuXG4gICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgICAgIHZhciByZXN1bHQgPSBlcXVhbEFycmF5cyhjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgICAgIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgaWYgKHN5bWJvbFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQnlUYWc7XG4iLCJ2YXIgZ2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3Igb2JqZWN0cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgb2JqUHJvcHMgPSBnZXRBbGxLZXlzKG9iamVjdCksXG4gICAgICBvYmpMZW5ndGggPSBvYmpQcm9wcy5sZW5ndGgsXG4gICAgICBvdGhQcm9wcyA9IGdldEFsbEtleXMob3RoZXIpLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoUHJvcHMubGVuZ3RoO1xuXG4gIGlmIChvYmpMZW5ndGggIT0gb3RoTGVuZ3RoICYmICFpc1BhcnRpYWwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGluZGV4ID0gb2JqTGVuZ3RoO1xuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIHZhciBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgaWYgKCEoaXNQYXJ0aWFsID8ga2V5IGluIG90aGVyIDogaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwga2V5KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICBpZiAoc3RhY2tlZCAmJiBzdGFjay5nZXQob3RoZXIpKSB7XG4gICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IHRydWU7XG4gIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBvYmplY3QpO1xuXG4gIHZhciBza2lwQ3RvciA9IGlzUGFydGlhbDtcbiAgd2hpbGUgKCsraW5kZXggPCBvYmpMZW5ndGgpIHtcbiAgICBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJba2V5XTtcblxuICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBvYmpWYWx1ZSwga2V5LCBvdGhlciwgb2JqZWN0LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSwga2V5LCBvYmplY3QsIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmICghKGNvbXBhcmVkID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IChvYmpWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKG9ialZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKVxuICAgICAgICAgIDogY29tcGFyZWRcbiAgICAgICAgKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2tpcEN0b3IgfHwgKHNraXBDdG9yID0ga2V5ID09ICdjb25zdHJ1Y3RvcicpO1xuICB9XG4gIGlmIChyZXN1bHQgJiYgIXNraXBDdG9yKSB7XG4gICAgdmFyIG9iakN0b3IgPSBvYmplY3QuY29uc3RydWN0b3IsXG4gICAgICAgIG90aEN0b3IgPSBvdGhlci5jb25zdHJ1Y3RvcjtcblxuICAgIC8vIE5vbiBgT2JqZWN0YCBvYmplY3QgaW5zdGFuY2VzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWFsLlxuICAgIGlmIChvYmpDdG9yICE9IG90aEN0b3IgJiZcbiAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmXG4gICAgICAgICEodHlwZW9mIG9iakN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvYmpDdG9yIGluc3RhbmNlb2Ygb2JqQ3RvciAmJlxuICAgICAgICAgIHR5cGVvZiBvdGhDdG9yID09ICdmdW5jdGlvbicgJiYgb3RoQ3RvciBpbnN0YW5jZW9mIG90aEN0b3IpKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxPYmplY3RzO1xuIiwidmFyIGJhc2VQcm9wZXJ0eU9mID0gcmVxdWlyZSgnLi9fYmFzZVByb3BlcnR5T2YnKTtcblxuLyoqIFVzZWQgdG8gbWFwIGNoYXJhY3RlcnMgdG8gSFRNTCBlbnRpdGllcy4gKi9cbnZhciBodG1sRXNjYXBlcyA9IHtcbiAgJyYnOiAnJmFtcDsnLFxuICAnPCc6ICcmbHQ7JyxcbiAgJz4nOiAnJmd0OycsXG4gICdcIic6ICcmcXVvdDsnLFxuICBcIidcIjogJyYjMzk7J1xufTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLmVzY2FwZWAgdG8gY29udmVydCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaHIgVGhlIG1hdGNoZWQgY2hhcmFjdGVyIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgY2hhcmFjdGVyLlxuICovXG52YXIgZXNjYXBlSHRtbENoYXIgPSBiYXNlUHJvcGVydHlPZihodG1sRXNjYXBlcyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZXNjYXBlSHRtbENoYXI7XG4iLCJ2YXIgZmxhdHRlbiA9IHJlcXVpcmUoJy4vZmxhdHRlbicpLFxuICAgIG92ZXJSZXN0ID0gcmVxdWlyZSgnLi9fb3ZlclJlc3QnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggZmxhdHRlbnMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gZmxhdFJlc3QoZnVuYykge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgdW5kZWZpbmVkLCBmbGF0dGVuKSwgZnVuYyArICcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0UmVzdDtcbiIsIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbm1vZHVsZS5leHBvcnRzID0gZnJlZUdsb2JhbDtcbiIsInZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5cywgZ2V0U3ltYm9scyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsS2V5cztcbiIsInZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9sc0luID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9sc0luJyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBnZXRBbGxLZXlzSW4ob2JqZWN0KSB7XG4gIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNJbiwgZ2V0U3ltYm9sc0luKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRBbGxLZXlzSW47XG4iLCJ2YXIgbWV0YU1hcCA9IHJlcXVpcmUoJy4vX21ldGFNYXAnKSxcbiAgICBub29wID0gcmVxdWlyZSgnLi9ub29wJyk7XG5cbi8qKlxuICogR2V0cyBtZXRhZGF0YSBmb3IgYGZ1bmNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtZXRhZGF0YSBmb3IgYGZ1bmNgLlxuICovXG52YXIgZ2V0RGF0YSA9ICFtZXRhTWFwID8gbm9vcCA6IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgcmV0dXJuIG1ldGFNYXAuZ2V0KGZ1bmMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXREYXRhO1xuIiwidmFyIHJlYWxOYW1lcyA9IHJlcXVpcmUoJy4vX3JlYWxOYW1lcycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIG5hbWUgb2YgYGZ1bmNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNOYW1lKGZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IChmdW5jLm5hbWUgKyAnJyksXG4gICAgICBhcnJheSA9IHJlYWxOYW1lc1tyZXN1bHRdLFxuICAgICAgbGVuZ3RoID0gaGFzT3duUHJvcGVydHkuY2FsbChyZWFsTmFtZXMsIHJlc3VsdCkgPyBhcnJheS5sZW5ndGggOiAwO1xuXG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIHZhciBkYXRhID0gYXJyYXlbbGVuZ3RoXSxcbiAgICAgICAgb3RoZXJGdW5jID0gZGF0YS5mdW5jO1xuICAgIGlmIChvdGhlckZ1bmMgPT0gbnVsbCB8fCBvdGhlckZ1bmMgPT0gZnVuYykge1xuICAgICAgcmV0dXJuIGRhdGEubmFtZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRGdW5jTmFtZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgYXJndW1lbnQgcGxhY2Vob2xkZXIgdmFsdWUgZm9yIGBmdW5jYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwbGFjZWhvbGRlciB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0SG9sZGVyKGZ1bmMpIHtcbiAgdmFyIG9iamVjdCA9IGZ1bmM7XG4gIHJldHVybiBvYmplY3QucGxhY2Vob2xkZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0SG9sZGVyO1xuIiwidmFyIGlzS2V5YWJsZSA9IHJlcXVpcmUoJy4vX2lzS2V5YWJsZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWFwRGF0YTtcbiIsInZhciBpc1N0cmljdENvbXBhcmFibGUgPSByZXF1aXJlKCcuL19pc1N0cmljdENvbXBhcmFibGUnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3Mgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbWF0Y2ggZGF0YSBvZiBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gZ2V0TWF0Y2hEYXRhKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0ga2V5cyhvYmplY3QpLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICB2YXIga2V5ID0gcmVzdWx0W2xlbmd0aF0sXG4gICAgICAgIHZhbHVlID0gb2JqZWN0W2tleV07XG5cbiAgICByZXN1bHRbbGVuZ3RoXSA9IFtrZXksIHZhbHVlLCBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpXTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE1hdGNoRGF0YTtcbiIsInZhciBiYXNlSXNOYXRpdmUgPSByZXF1aXJlKCcuL19iYXNlSXNOYXRpdmUnKSxcbiAgICBnZXRWYWx1ZSA9IHJlcXVpcmUoJy4vX2dldFZhbHVlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TmF0aXZlO1xuIiwidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFByb3RvdHlwZTtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFJhd1RhZztcbiIsInZhciBhcnJheUZpbHRlciA9IHJlcXVpcmUoJy4vX2FycmF5RmlsdGVyJyksXG4gICAgc3R1YkFycmF5ID0gcmVxdWlyZSgnLi9zdHViQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAqL1xudmFyIGdldFN5bWJvbHMgPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gIHJldHVybiBhcnJheUZpbHRlcihuYXRpdmVHZXRTeW1ib2xzKG9iamVjdCksIGZ1bmN0aW9uKHN5bWJvbCkge1xuICAgIHJldHVybiBwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgc3ltYm9sKTtcbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFN5bWJvbHM7XG4iLCJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBzdHViQXJyYXkgPSByZXF1aXJlKCcuL3N0dWJBcnJheScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzSW4gPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHdoaWxlIChvYmplY3QpIHtcbiAgICBhcnJheVB1c2gocmVzdWx0LCBnZXRTeW1ib2xzKG9iamVjdCkpO1xuICAgIG9iamVjdCA9IGdldFByb3RvdHlwZShvYmplY3QpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFN5bWJvbHNJbjtcbiIsInZhciBEYXRhVmlldyA9IHJlcXVpcmUoJy4vX0RhdGFWaWV3JyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgUHJvbWlzZSA9IHJlcXVpcmUoJy4vX1Byb21pc2UnKSxcbiAgICBTZXQgPSByZXF1aXJlKCcuL19TZXQnKSxcbiAgICBXZWFrTWFwID0gcmVxdWlyZSgnLi9fV2Vha01hcCcpLFxuICAgIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcHJvbWlzZVRhZyA9ICdbb2JqZWN0IFByb21pc2VdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWFwcywgc2V0cywgYW5kIHdlYWttYXBzLiAqL1xudmFyIGRhdGFWaWV3Q3RvclN0cmluZyA9IHRvU291cmNlKERhdGFWaWV3KSxcbiAgICBtYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoTWFwKSxcbiAgICBwcm9taXNlQ3RvclN0cmluZyA9IHRvU291cmNlKFByb21pc2UpLFxuICAgIHNldEN0b3JTdHJpbmcgPSB0b1NvdXJjZShTZXQpLFxuICAgIHdlYWtNYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoV2Vha01hcCk7XG5cbi8qKlxuICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbnZhciBnZXRUYWcgPSBiYXNlR2V0VGFnO1xuXG4vLyBGYWxsYmFjayBmb3IgZGF0YSB2aWV3cywgbWFwcywgc2V0cywgYW5kIHdlYWsgbWFwcyBpbiBJRSAxMSBhbmQgcHJvbWlzZXMgaW4gTm9kZS5qcyA8IDYuXG5pZiAoKERhdGFWaWV3ICYmIGdldFRhZyhuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcpIHx8XG4gICAgKE1hcCAmJiBnZXRUYWcobmV3IE1hcCkgIT0gbWFwVGFnKSB8fFxuICAgIChQcm9taXNlICYmIGdldFRhZyhQcm9taXNlLnJlc29sdmUoKSkgIT0gcHJvbWlzZVRhZykgfHxcbiAgICAoU2V0ICYmIGdldFRhZyhuZXcgU2V0KSAhPSBzZXRUYWcpIHx8XG4gICAgKFdlYWtNYXAgJiYgZ2V0VGFnKG5ldyBXZWFrTWFwKSAhPSB3ZWFrTWFwVGFnKSkge1xuICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhciByZXN1bHQgPSBiYXNlR2V0VGFnKHZhbHVlKSxcbiAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgY3RvclN0cmluZyA9IEN0b3IgPyB0b1NvdXJjZShDdG9yKSA6ICcnO1xuXG4gICAgaWYgKGN0b3JTdHJpbmcpIHtcbiAgICAgIHN3aXRjaCAoY3RvclN0cmluZykge1xuICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xuICAgICAgICBjYXNlIG1hcEN0b3JTdHJpbmc6IHJldHVybiBtYXBUYWc7XG4gICAgICAgIGNhc2UgcHJvbWlzZUN0b3JTdHJpbmc6IHJldHVybiBwcm9taXNlVGFnO1xuICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XG4gICAgICAgIGNhc2Ugd2Vha01hcEN0b3JTdHJpbmc6IHJldHVybiB3ZWFrTWFwVGFnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFRhZztcbiIsIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFZhbHVlO1xuIiwiLyoqIFVzZWQgdG8gbWF0Y2ggd3JhcCBkZXRhaWwgY29tbWVudHMuICovXG52YXIgcmVXcmFwRGV0YWlscyA9IC9cXHtcXG5cXC9cXCogXFxbd3JhcHBlZCB3aXRoICguKylcXF0gXFwqLyxcbiAgICByZVNwbGl0RGV0YWlscyA9IC8sPyAmIC87XG5cbi8qKlxuICogRXh0cmFjdHMgd3JhcHBlciBkZXRhaWxzIGZyb20gdGhlIGBzb3VyY2VgIGJvZHkgY29tbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBUaGUgc291cmNlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHdyYXBwZXIgZGV0YWlscy5cbiAqL1xuZnVuY3Rpb24gZ2V0V3JhcERldGFpbHMoc291cmNlKSB7XG4gIHZhciBtYXRjaCA9IHNvdXJjZS5tYXRjaChyZVdyYXBEZXRhaWxzKTtcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0uc3BsaXQocmVTcGxpdERldGFpbHMpIDogW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0V3JhcERldGFpbHM7XG4iLCJ2YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHBhdGhgIGV4aXN0cyBvbiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYXNGdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjayBwcm9wZXJ0aWVzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzUGF0aChvYmplY3QsIHBhdGgsIGhhc0Z1bmMpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHRvS2V5KHBhdGhbaW5kZXhdKTtcbiAgICBpZiAoIShyZXN1bHQgPSBvYmplY3QgIT0gbnVsbCAmJiBoYXNGdW5jKG9iamVjdCwga2V5KSkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBvYmplY3QgPSBvYmplY3Rba2V5XTtcbiAgfVxuICBpZiAocmVzdWx0IHx8ICsraW5kZXggIT0gbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBsZW5ndGggPSBvYmplY3QgPT0gbnVsbCA/IDAgOiBvYmplY3QubGVuZ3RoO1xuICByZXR1cm4gISFsZW5ndGggJiYgaXNMZW5ndGgobGVuZ3RoKSAmJiBpc0luZGV4KGtleSwgbGVuZ3RoKSAmJlxuICAgIChpc0FycmF5KG9iamVjdCkgfHwgaXNBcmd1bWVudHMob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzUGF0aDtcbiIsIi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjaGFyYWN0ZXIgY2xhc3Nlcy4gKi9cbnZhciByc0FzdHJhbFJhbmdlID0gJ1xcXFx1ZDgwMC1cXFxcdWRmZmYnLFxuICAgIHJzQ29tYm9NYXJrc1JhbmdlID0gJ1xcXFx1MDMwMC1cXFxcdTAzNmYnLFxuICAgIHJlQ29tYm9IYWxmTWFya3NSYW5nZSA9ICdcXFxcdWZlMjAtXFxcXHVmZTJmJyxcbiAgICByc0NvbWJvU3ltYm9sc1JhbmdlID0gJ1xcXFx1MjBkMC1cXFxcdTIwZmYnLFxuICAgIHJzQ29tYm9SYW5nZSA9IHJzQ29tYm9NYXJrc1JhbmdlICsgcmVDb21ib0hhbGZNYXJrc1JhbmdlICsgcnNDb21ib1N5bWJvbHNSYW5nZSxcbiAgICByc1ZhclJhbmdlID0gJ1xcXFx1ZmUwZVxcXFx1ZmUwZic7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjYXB0dXJlIGdyb3Vwcy4gKi9cbnZhciByc1pXSiA9ICdcXFxcdTIwMGQnO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgc3RyaW5ncyB3aXRoIFt6ZXJvLXdpZHRoIGpvaW5lcnMgb3IgY29kZSBwb2ludHMgZnJvbSB0aGUgYXN0cmFsIHBsYW5lc10oaHR0cDovL2Vldi5lZS9ibG9nLzIwMTUvMDkvMTIvZGFyay1jb3JuZXJzLW9mLXVuaWNvZGUvKS4gKi9cbnZhciByZUhhc1VuaWNvZGUgPSBSZWdFeHAoJ1snICsgcnNaV0ogKyByc0FzdHJhbFJhbmdlICArIHJzQ29tYm9SYW5nZSArIHJzVmFyUmFuZ2UgKyAnXScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgc3RyaW5nYCBjb250YWlucyBVbmljb2RlIHN5bWJvbHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGEgc3ltYm9sIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc1VuaWNvZGUoc3RyaW5nKSB7XG4gIHJldHVybiByZUhhc1VuaWNvZGUudGVzdChzdHJpbmcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc1VuaWNvZGU7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKi9cbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gdGhpcy5oYXMoa2V5KSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaERlbGV0ZTtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hHZXQ7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgaGFzaCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoSGFzO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoU2V0O1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBhcnJheSBjbG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lQXJyYXkoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IG5ldyBhcnJheS5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIC8vIEFkZCBwcm9wZXJ0aWVzIGFzc2lnbmVkIGJ5IGBSZWdFeHAjZXhlY2AuXG4gIGlmIChsZW5ndGggJiYgdHlwZW9mIGFycmF5WzBdID09ICdzdHJpbmcnICYmIGhhc093blByb3BlcnR5LmNhbGwoYXJyYXksICdpbmRleCcpKSB7XG4gICAgcmVzdWx0LmluZGV4ID0gYXJyYXkuaW5kZXg7XG4gICAgcmVzdWx0LmlucHV0ID0gYXJyYXkuaW5wdXQ7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVBcnJheTtcbiIsInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpLFxuICAgIGNsb25lRGF0YVZpZXcgPSByZXF1aXJlKCcuL19jbG9uZURhdGFWaWV3JyksXG4gICAgY2xvbmVSZWdFeHAgPSByZXF1aXJlKCcuL19jbG9uZVJlZ0V4cCcpLFxuICAgIGNsb25lU3ltYm9sID0gcmVxdWlyZSgnLi9fY2xvbmVTeW1ib2wnKSxcbiAgICBjbG9uZVR5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19jbG9uZVR5cGVkQXJyYXknKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lIGJhc2VkIG9uIGl0cyBgdG9TdHJpbmdUYWdgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY2xvbmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE1hcGAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgYFNldGAsIG9yIGBTdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZUJ5VGFnKG9iamVjdCwgdGFnLCBpc0RlZXApIHtcbiAgdmFyIEN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIHJldHVybiBjbG9uZUFycmF5QnVmZmVyKG9iamVjdCk7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yKCtvYmplY3QpO1xuXG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIHJldHVybiBjbG9uZURhdGFWaWV3KG9iamVjdCwgaXNEZWVwKTtcblxuICAgIGNhc2UgZmxvYXQzMlRhZzogY2FzZSBmbG9hdDY0VGFnOlxuICAgIGNhc2UgaW50OFRhZzogY2FzZSBpbnQxNlRhZzogY2FzZSBpbnQzMlRhZzpcbiAgICBjYXNlIHVpbnQ4VGFnOiBjYXNlIHVpbnQ4Q2xhbXBlZFRhZzogY2FzZSB1aW50MTZUYWc6IGNhc2UgdWludDMyVGFnOlxuICAgICAgcmV0dXJuIGNsb25lVHlwZWRBcnJheShvYmplY3QsIGlzRGVlcCk7XG5cbiAgICBjYXNlIG1hcFRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcjtcblxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yKG9iamVjdCk7XG5cbiAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICAgIHJldHVybiBjbG9uZVJlZ0V4cChvYmplY3QpO1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3I7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIHJldHVybiBjbG9uZVN5bWJvbChvYmplY3QpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5pdENsb25lQnlUYWc7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xuICByZXR1cm4gKHR5cGVvZiBvYmplY3QuY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNQcm90b3R5cGUob2JqZWN0KSlcbiAgICA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpXG4gICAgOiB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVPYmplY3Q7XG4iLCIvKiogVXNlZCB0byBtYXRjaCB3cmFwIGRldGFpbCBjb21tZW50cy4gKi9cbnZhciByZVdyYXBDb21tZW50ID0gL1xceyg/OlxcblxcL1xcKiBcXFt3cmFwcGVkIHdpdGggLitcXF0gXFwqXFwvKT9cXG4/LztcblxuLyoqXG4gKiBJbnNlcnRzIHdyYXBwZXIgYGRldGFpbHNgIGluIGEgY29tbWVudCBhdCB0aGUgdG9wIG9mIHRoZSBgc291cmNlYCBib2R5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIFRoZSBzb3VyY2UgdG8gbW9kaWZ5LlxuICogQHJldHVybnMge0FycmF5fSBkZXRhaWxzIFRoZSBkZXRhaWxzIHRvIGluc2VydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIG1vZGlmaWVkIHNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gaW5zZXJ0V3JhcERldGFpbHMoc291cmNlLCBkZXRhaWxzKSB7XG4gIHZhciBsZW5ndGggPSBkZXRhaWxzLmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBsZW5ndGggLSAxO1xuICBkZXRhaWxzW2xhc3RJbmRleF0gPSAobGVuZ3RoID4gMSA/ICcmICcgOiAnJykgKyBkZXRhaWxzW2xhc3RJbmRleF07XG4gIGRldGFpbHMgPSBkZXRhaWxzLmpvaW4obGVuZ3RoID4gMiA/ICcsICcgOiAnICcpO1xuICByZXR1cm4gc291cmNlLnJlcGxhY2UocmVXcmFwQ29tbWVudCwgJ3tcXG4vKiBbd3JhcHBlZCB3aXRoICcgKyBkZXRhaWxzICsgJ10gKi9cXG4nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRXcmFwRGV0YWlscztcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwcmVhZGFibGVTeW1ib2wgPSBTeW1ib2wgPyBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgZmxhdHRlbmFibGUgYGFyZ3VtZW50c2Agb2JqZWN0IG9yIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZsYXR0ZW5hYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzRmxhdHRlbmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIGlzQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSB8fFxuICAgICEhKHNwcmVhZGFibGVTeW1ib2wgJiYgdmFsdWUgJiYgdmFsdWVbc3ByZWFkYWJsZVN5bWJvbF0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRmxhdHRlbmFibGU7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xudmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJbmRleDtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgKSB7XG4gICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJdGVyYXRlZUNhbGw7XG4iLCJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxcbiAgICByZUlzUGxhaW5Qcm9wID0gL15cXHcqJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lIGFuZCBub3QgYSBwcm9wZXJ0eSBwYXRoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXkodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGlmICh0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicgfHxcbiAgICAgIHZhbHVlID09IG51bGwgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIHJlSXNQbGFpblByb3AudGVzdCh2YWx1ZSkgfHwgIXJlSXNEZWVwUHJvcC50ZXN0KHZhbHVlKSB8fFxuICAgIChvYmplY3QgIT0gbnVsbCAmJiB2YWx1ZSBpbiBPYmplY3Qob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXk7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXlhYmxlO1xuIiwidmFyIExhenlXcmFwcGVyID0gcmVxdWlyZSgnLi9fTGF6eVdyYXBwZXInKSxcbiAgICBnZXREYXRhID0gcmVxdWlyZSgnLi9fZ2V0RGF0YScpLFxuICAgIGdldEZ1bmNOYW1lID0gcmVxdWlyZSgnLi9fZ2V0RnVuY05hbWUnKSxcbiAgICBsb2Rhc2ggPSByZXF1aXJlKCcuL3dyYXBwZXJMb2Rhc2gnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBhIGxhenkgY291bnRlcnBhcnQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBoYXMgYSBsYXp5IGNvdW50ZXJwYXJ0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNMYXppYWJsZShmdW5jKSB7XG4gIHZhciBmdW5jTmFtZSA9IGdldEZ1bmNOYW1lKGZ1bmMpLFxuICAgICAgb3RoZXIgPSBsb2Rhc2hbZnVuY05hbWVdO1xuXG4gIGlmICh0eXBlb2Ygb3RoZXIgIT0gJ2Z1bmN0aW9uJyB8fCAhKGZ1bmNOYW1lIGluIExhenlXcmFwcGVyLnByb3RvdHlwZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGZ1bmMgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIGRhdGEgPSBnZXREYXRhKG90aGVyKTtcbiAgcmV0dXJuICEhZGF0YSAmJiBmdW5jID09PSBkYXRhWzBdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTGF6aWFibGU7XG4iLCJ2YXIgY29yZUpzRGF0YSA9IHJlcXVpcmUoJy4vX2NvcmVKc0RhdGEnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc01hc2tlZDtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb3RvdHlwZTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcbiAqICBlcXVhbGl0eSBjb21wYXJpc29ucywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSAmJiAhaXNPYmplY3QodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyaWN0Q29tcGFyYWJsZTtcbiIsIi8qKlxuICogQ29udmVydHMgYGl0ZXJhdG9yYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGl0ZXJhdG9yIFRoZSBpdGVyYXRvciB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGl0ZXJhdG9yVG9BcnJheShpdGVyYXRvcikge1xuICB2YXIgZGF0YSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICghKGRhdGEgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICByZXN1bHQucHVzaChkYXRhLnZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGl0ZXJhdG9yVG9BcnJheTtcbiIsIi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVDbGVhcjtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgLS10aGlzLnNpemU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZURlbGV0ZTtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVHZXQ7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUhhcztcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICArK3RoaXMuc2l6ZTtcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZVNldDtcbiIsInZhciBIYXNoID0gcmVxdWlyZSgnLi9fSGFzaCcpLFxuICAgIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVDbGVhcjtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZURlbGV0ZTtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVHZXQ7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUhhcztcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVTZXQ7XG4iLCIvKipcbiAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gKi9cbmZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobWFwLnNpemUpO1xuXG4gIG1hcC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSBba2V5LCB2YWx1ZV07XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFRvQXJyYXk7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgbWF0Y2hlc1Byb3BlcnR5YCBmb3Igc291cmNlIHZhbHVlcyBzdWl0YWJsZVxuICogZm9yIHN0cmljdCBlcXVhbGl0eSBjb21wYXJpc29ucywgaS5lLiBgPT09YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKGtleSwgc3JjVmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0W2tleV0gPT09IHNyY1ZhbHVlICYmXG4gICAgICAoc3JjVmFsdWUgIT09IHVuZGVmaW5lZCB8fCAoa2V5IGluIE9iamVjdChvYmplY3QpKSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWF0Y2hlc1N0cmljdENvbXBhcmFibGU7XG4iLCJ2YXIgbWVtb2l6ZSA9IHJlcXVpcmUoJy4vbWVtb2l6ZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgbWF4aW11bSBtZW1vaXplIGNhY2hlIHNpemUuICovXG52YXIgTUFYX01FTU9JWkVfU0laRSA9IDUwMDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XG4gIHZhciByZXN1bHQgPSBtZW1vaXplKGZ1bmMsIGZ1bmN0aW9uKGtleSkge1xuICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XG4gICAgICBjYWNoZS5jbGVhcigpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9KTtcblxuICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZUNhcHBlZDtcbiIsInZhciBjb21wb3NlQXJncyA9IHJlcXVpcmUoJy4vX2NvbXBvc2VBcmdzJyksXG4gICAgY29tcG9zZUFyZ3NSaWdodCA9IHJlcXVpcmUoJy4vX2NvbXBvc2VBcmdzUmlnaHQnKSxcbiAgICByZXBsYWNlSG9sZGVycyA9IHJlcXVpcmUoJy4vX3JlcGxhY2VIb2xkZXJzJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBpbnRlcm5hbCBhcmd1bWVudCBwbGFjZWhvbGRlci4gKi9cbnZhciBQTEFDRUhPTERFUiA9ICdfX2xvZGFzaF9wbGFjZWhvbGRlcl9fJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9CT1VORF9GTEFHID0gNCxcbiAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgIFdSQVBfQVJZX0ZMQUcgPSAxMjgsXG4gICAgV1JBUF9SRUFSR19GTEFHID0gMjU2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWluID0gTWF0aC5taW47XG5cbi8qKlxuICogTWVyZ2VzIHRoZSBmdW5jdGlvbiBtZXRhZGF0YSBvZiBgc291cmNlYCBpbnRvIGBkYXRhYC5cbiAqXG4gKiBNZXJnaW5nIG1ldGFkYXRhIHJlZHVjZXMgdGhlIG51bWJlciBvZiB3cmFwcGVycyB1c2VkIHRvIGludm9rZSBhIGZ1bmN0aW9uLlxuICogVGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIG1ldGhvZHMgbGlrZSBgXy5iaW5kYCwgYF8uY3VycnlgLCBhbmQgYF8ucGFydGlhbGBcbiAqIG1heSBiZSBhcHBsaWVkIHJlZ2FyZGxlc3Mgb2YgZXhlY3V0aW9uIG9yZGVyLiBNZXRob2RzIGxpa2UgYF8uYXJ5YCBhbmRcbiAqIGBfLnJlYXJnYCBtb2RpZnkgZnVuY3Rpb24gYXJndW1lbnRzLCBtYWtpbmcgdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlXG4gKiBleGVjdXRlZCBpbXBvcnRhbnQsIHByZXZlbnRpbmcgdGhlIG1lcmdpbmcgb2YgbWV0YWRhdGEuIEhvd2V2ZXIsIHdlIG1ha2VcbiAqIGFuIGV4Y2VwdGlvbiBmb3IgYSBzYWZlIGNvbWJpbmVkIGNhc2Ugd2hlcmUgY3VycmllZCBmdW5jdGlvbnMgaGF2ZSBgXy5hcnlgXG4gKiBhbmQgb3IgYF8ucmVhcmdgIGFwcGxpZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgVGhlIGRlc3RpbmF0aW9uIG1ldGFkYXRhLlxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBzb3VyY2UgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGRhdGFgLlxuICovXG5mdW5jdGlvbiBtZXJnZURhdGEoZGF0YSwgc291cmNlKSB7XG4gIHZhciBiaXRtYXNrID0gZGF0YVsxXSxcbiAgICAgIHNyY0JpdG1hc2sgPSBzb3VyY2VbMV0sXG4gICAgICBuZXdCaXRtYXNrID0gYml0bWFzayB8IHNyY0JpdG1hc2ssXG4gICAgICBpc0NvbW1vbiA9IG5ld0JpdG1hc2sgPCAoV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX0JJTkRfS0VZX0ZMQUcgfCBXUkFQX0FSWV9GTEFHKTtcblxuICB2YXIgaXNDb21ibyA9XG4gICAgKChzcmNCaXRtYXNrID09IFdSQVBfQVJZX0ZMQUcpICYmIChiaXRtYXNrID09IFdSQVBfQ1VSUllfRkxBRykpIHx8XG4gICAgKChzcmNCaXRtYXNrID09IFdSQVBfQVJZX0ZMQUcpICYmIChiaXRtYXNrID09IFdSQVBfUkVBUkdfRkxBRykgJiYgKGRhdGFbN10ubGVuZ3RoIDw9IHNvdXJjZVs4XSkpIHx8XG4gICAgKChzcmNCaXRtYXNrID09IChXUkFQX0FSWV9GTEFHIHwgV1JBUF9SRUFSR19GTEFHKSkgJiYgKHNvdXJjZVs3XS5sZW5ndGggPD0gc291cmNlWzhdKSAmJiAoYml0bWFzayA9PSBXUkFQX0NVUlJZX0ZMQUcpKTtcblxuICAvLyBFeGl0IGVhcmx5IGlmIG1ldGFkYXRhIGNhbid0IGJlIG1lcmdlZC5cbiAgaWYgKCEoaXNDb21tb24gfHwgaXNDb21ibykpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGB0aGlzQXJnYCBpZiBhdmFpbGFibGUuXG4gIGlmIChzcmNCaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcpIHtcbiAgICBkYXRhWzJdID0gc291cmNlWzJdO1xuICAgIC8vIFNldCB3aGVuIGN1cnJ5aW5nIGEgYm91bmQgZnVuY3Rpb24uXG4gICAgbmV3Qml0bWFzayB8PSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcgPyAwIDogV1JBUF9DVVJSWV9CT1VORF9GTEFHO1xuICB9XG4gIC8vIENvbXBvc2UgcGFydGlhbCBhcmd1bWVudHMuXG4gIHZhciB2YWx1ZSA9IHNvdXJjZVszXTtcbiAgaWYgKHZhbHVlKSB7XG4gICAgdmFyIHBhcnRpYWxzID0gZGF0YVszXTtcbiAgICBkYXRhWzNdID0gcGFydGlhbHMgPyBjb21wb3NlQXJncyhwYXJ0aWFscywgdmFsdWUsIHNvdXJjZVs0XSkgOiB2YWx1ZTtcbiAgICBkYXRhWzRdID0gcGFydGlhbHMgPyByZXBsYWNlSG9sZGVycyhkYXRhWzNdLCBQTEFDRUhPTERFUikgOiBzb3VyY2VbNF07XG4gIH1cbiAgLy8gQ29tcG9zZSBwYXJ0aWFsIHJpZ2h0IGFyZ3VtZW50cy5cbiAgdmFsdWUgPSBzb3VyY2VbNV07XG4gIGlmICh2YWx1ZSkge1xuICAgIHBhcnRpYWxzID0gZGF0YVs1XTtcbiAgICBkYXRhWzVdID0gcGFydGlhbHMgPyBjb21wb3NlQXJnc1JpZ2h0KHBhcnRpYWxzLCB2YWx1ZSwgc291cmNlWzZdKSA6IHZhbHVlO1xuICAgIGRhdGFbNl0gPSBwYXJ0aWFscyA/IHJlcGxhY2VIb2xkZXJzKGRhdGFbNV0sIFBMQUNFSE9MREVSKSA6IHNvdXJjZVs2XTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGBhcmdQb3NgIGlmIGF2YWlsYWJsZS5cbiAgdmFsdWUgPSBzb3VyY2VbN107XG4gIGlmICh2YWx1ZSkge1xuICAgIGRhdGFbN10gPSB2YWx1ZTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGBhcnlgIGlmIGl0J3Mgc21hbGxlci5cbiAgaWYgKHNyY0JpdG1hc2sgJiBXUkFQX0FSWV9GTEFHKSB7XG4gICAgZGF0YVs4XSA9IGRhdGFbOF0gPT0gbnVsbCA/IHNvdXJjZVs4XSA6IG5hdGl2ZU1pbihkYXRhWzhdLCBzb3VyY2VbOF0pO1xuICB9XG4gIC8vIFVzZSBzb3VyY2UgYGFyaXR5YCBpZiBvbmUgaXMgbm90IHByb3ZpZGVkLlxuICBpZiAoZGF0YVs5XSA9PSBudWxsKSB7XG4gICAgZGF0YVs5XSA9IHNvdXJjZVs5XTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGBmdW5jYCBhbmQgbWVyZ2UgYml0bWFza3MuXG4gIGRhdGFbMF0gPSBzb3VyY2VbMF07XG4gIGRhdGFbMV0gPSBuZXdCaXRtYXNrO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlRGF0YTtcbiIsInZhciBXZWFrTWFwID0gcmVxdWlyZSgnLi9fV2Vha01hcCcpO1xuXG4vKiogVXNlZCB0byBzdG9yZSBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBtZXRhTWFwID0gV2Vha01hcCAmJiBuZXcgV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBtZXRhTWFwO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgbmF0aXZlQ3JlYXRlID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2NyZWF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUNyZWF0ZTtcbiIsInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlS2V5cyA9IG92ZXJBcmcoT2JqZWN0LmtleXMsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5cztcbiIsIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBleGNlcHQgdGhhdCBpdCBpbmNsdWRlcyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUtleXNJbjtcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGVVdGlsO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0VG9TdHJpbmc7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgfVxuICAgIGluZGV4ID0gLTE7XG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgIH1cbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcbiAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyUmVzdDtcbiIsInZhciBiYXNlR2V0ID0gcmVxdWlyZSgnLi9fYmFzZUdldCcpLFxuICAgIGJhc2VTbGljZSA9IHJlcXVpcmUoJy4vX2Jhc2VTbGljZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIHBhcmVudCB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhdGggVGhlIHBhdGggdG8gZ2V0IHRoZSBwYXJlbnQgdmFsdWUgb2YuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcGFyZW50IHZhbHVlLlxuICovXG5mdW5jdGlvbiBwYXJlbnQob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBwYXRoLmxlbmd0aCA8IDIgPyBvYmplY3QgOiBiYXNlR2V0KG9iamVjdCwgYmFzZVNsaWNlKHBhdGgsIDAsIC0xKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiLyoqIFVzZWQgdG8gbG9va3VwIHVubWluaWZpZWQgZnVuY3Rpb24gbmFtZXMuICovXG52YXIgcmVhbE5hbWVzID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gcmVhbE5hbWVzO1xuIiwidmFyIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBSZW9yZGVyIGBhcnJheWAgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgaW5kZXhlcyB3aGVyZSB0aGUgZWxlbWVudCBhdFxuICogdGhlIGZpcnN0IGluZGV4IGlzIGFzc2lnbmVkIGFzIHRoZSBmaXJzdCBlbGVtZW50LCB0aGUgZWxlbWVudCBhdFxuICogdGhlIHNlY29uZCBpbmRleCBpcyBhc3NpZ25lZCBhcyB0aGUgc2Vjb25kIGVsZW1lbnQsIGFuZCBzbyBvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHJlb3JkZXIuXG4gKiBAcGFyYW0ge0FycmF5fSBpbmRleGVzIFRoZSBhcnJhbmdlZCBhcnJheSBpbmRleGVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIHJlb3JkZXIoYXJyYXksIGluZGV4ZXMpIHtcbiAgdmFyIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGxlbmd0aCA9IG5hdGl2ZU1pbihpbmRleGVzLmxlbmd0aCwgYXJyTGVuZ3RoKSxcbiAgICAgIG9sZEFycmF5ID0gY29weUFycmF5KGFycmF5KTtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICB2YXIgaW5kZXggPSBpbmRleGVzW2xlbmd0aF07XG4gICAgYXJyYXlbbGVuZ3RoXSA9IGlzSW5kZXgoaW5kZXgsIGFyckxlbmd0aCkgPyBvbGRBcnJheVtpbmRleF0gOiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlb3JkZXI7XG4iLCIvKiogVXNlZCBhcyB0aGUgaW50ZXJuYWwgYXJndW1lbnQgcGxhY2Vob2xkZXIuICovXG52YXIgUExBQ0VIT0xERVIgPSAnX19sb2Rhc2hfcGxhY2Vob2xkZXJfXyc7XG5cbi8qKlxuICogUmVwbGFjZXMgYWxsIGBwbGFjZWhvbGRlcmAgZWxlbWVudHMgaW4gYGFycmF5YCB3aXRoIGFuIGludGVybmFsIHBsYWNlaG9sZGVyXG4gKiBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiB0aGVpciBpbmRleGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHsqfSBwbGFjZWhvbGRlciBUaGUgcGxhY2Vob2xkZXIgdG8gcmVwbGFjZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2VIb2xkZXJzKGFycmF5LCBwbGFjZWhvbGRlcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmICh2YWx1ZSA9PT0gcGxhY2Vob2xkZXIgfHwgdmFsdWUgPT09IFBMQUNFSE9MREVSKSB7XG4gICAgICBhcnJheVtpbmRleF0gPSBQTEFDRUhPTERFUjtcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcGxhY2VIb2xkZXJzO1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxubW9kdWxlLmV4cG9ydHMgPSByb290O1xuIiwiLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIEFkZHMgYHZhbHVlYCB0byB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGFkZFxuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAYWxpYXMgcHVzaFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2FjaGUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVBZGQodmFsdWUpIHtcbiAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVBZGQ7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVIYXM7XG4iLCJ2YXIgYmFzZVNldERhdGEgPSByZXF1aXJlKCcuL19iYXNlU2V0RGF0YScpLFxuICAgIHNob3J0T3V0ID0gcmVxdWlyZSgnLi9fc2hvcnRPdXQnKTtcblxuLyoqXG4gKiBTZXRzIG1ldGFkYXRhIGZvciBgZnVuY2AuXG4gKlxuICogKipOb3RlOioqIElmIHRoaXMgZnVuY3Rpb24gYmVjb21lcyBob3QsIGkuZS4gaXMgaW52b2tlZCBhIGxvdCBpbiBhIHNob3J0XG4gKiBwZXJpb2Qgb2YgdGltZSwgaXQgd2lsbCB0cmlwIGl0cyBicmVha2VyIGFuZCB0cmFuc2l0aW9uIHRvIGFuIGlkZW50aXR5XG4gKiBmdW5jdGlvbiB0byBhdm9pZCBnYXJiYWdlIGNvbGxlY3Rpb24gcGF1c2VzIGluIFY4LiBTZWVcbiAqIFtWOCBpc3N1ZSAyMDcwXShodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0yMDcwKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXNzb2NpYXRlIG1ldGFkYXRhIHdpdGguXG4gKiBAcGFyYW0geyp9IGRhdGEgVGhlIG1ldGFkYXRhLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldERhdGEgPSBzaG9ydE91dChiYXNlU2V0RGF0YSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0RGF0YTtcbiIsIi8qKlxuICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9BcnJheTtcbiIsInZhciBiYXNlU2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlU2V0VG9TdHJpbmcnKSxcbiAgICBzaG9ydE91dCA9IHJlcXVpcmUoJy4vX3Nob3J0T3V0Jyk7XG5cbi8qKlxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBzZXRUb1N0cmluZyA9IHNob3J0T3V0KGJhc2VTZXRUb1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9TdHJpbmc7XG4iLCJ2YXIgZ2V0V3JhcERldGFpbHMgPSByZXF1aXJlKCcuL19nZXRXcmFwRGV0YWlscycpLFxuICAgIGluc2VydFdyYXBEZXRhaWxzID0gcmVxdWlyZSgnLi9faW5zZXJ0V3JhcERldGFpbHMnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyksXG4gICAgdXBkYXRlV3JhcERldGFpbHMgPSByZXF1aXJlKCcuL191cGRhdGVXcmFwRGV0YWlscycpO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGB3cmFwcGVyYCB0byBtaW1pYyB0aGUgc291cmNlIG9mIGByZWZlcmVuY2VgXG4gKiB3aXRoIHdyYXBwZXIgZGV0YWlscyBpbiBhIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgc291cmNlIGJvZHkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHdyYXBwZXIgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlZmVyZW5jZSBUaGUgcmVmZXJlbmNlIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgd3JhcHBlcmAuXG4gKi9cbmZ1bmN0aW9uIHNldFdyYXBUb1N0cmluZyh3cmFwcGVyLCByZWZlcmVuY2UsIGJpdG1hc2spIHtcbiAgdmFyIHNvdXJjZSA9IChyZWZlcmVuY2UgKyAnJyk7XG4gIHJldHVybiBzZXRUb1N0cmluZyh3cmFwcGVyLCBpbnNlcnRXcmFwRGV0YWlscyhzb3VyY2UsIHVwZGF0ZVdyYXBEZXRhaWxzKGdldFdyYXBEZXRhaWxzKHNvdXJjZSksIGJpdG1hc2spKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0V3JhcFRvU3RyaW5nO1xuIiwiLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xudmFyIEhPVF9DT1VOVCA9IDgwMCxcbiAgICBIT1RfU1BBTiA9IDE2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAqIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgdmFyIGNvdW50ID0gMCxcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3J0T3V0O1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIFN0YWNrXG4gKi9cbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrQ2xlYXI7XG4iLCIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgcmVzdWx0ID0gZGF0YVsnZGVsZXRlJ10oa2V5KTtcblxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tEZWxldGU7XG4iLCIvKipcbiAqIEdldHMgdGhlIHN0YWNrIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzdGFja0dldChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tHZXQ7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBhIHN0YWNrIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrSGFzO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBzdGFjayBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTGlzdENhY2hlKSB7XG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcbiAgICBpZiAoIU1hcCB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XG4gICAgICBwYWlycy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlycyk7XG4gIH1cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tTZXQ7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5pbmRleE9mYCB3aGljaCBwZXJmb3JtcyBzdHJpY3QgZXF1YWxpdHlcbiAqIGNvbXBhcmlzb25zIG9mIHZhbHVlcywgaS5lLiBgPT09YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gIHZhciBpbmRleCA9IGZyb21JbmRleCAtIDEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoYXJyYXlbaW5kZXhdID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaWN0SW5kZXhPZjtcbiIsInZhciBhc2NpaVRvQXJyYXkgPSByZXF1aXJlKCcuL19hc2NpaVRvQXJyYXknKSxcbiAgICBoYXNVbmljb2RlID0gcmVxdWlyZSgnLi9faGFzVW5pY29kZScpLFxuICAgIHVuaWNvZGVUb0FycmF5ID0gcmVxdWlyZSgnLi9fdW5pY29kZVRvQXJyYXknKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gc3RyaW5nVG9BcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIGhhc1VuaWNvZGUoc3RyaW5nKVxuICAgID8gdW5pY29kZVRvQXJyYXkoc3RyaW5nKVxuICAgIDogYXNjaWlUb0FycmF5KHN0cmluZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nVG9BcnJheTtcbiIsInZhciBtZW1vaXplQ2FwcGVkID0gcmVxdWlyZSgnLi9fbWVtb2l6ZUNhcHBlZCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVQcm9wTmFtZSA9IC9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IG1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XG4gICAgcmVzdWx0LnB1c2goJycpO1xuICB9XG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcbiAgICByZXN1bHQucHVzaChxdW90ZSA/IHN1YlN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nVG9QYXRoO1xuIiwidmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcga2V5IGlmIGl0J3Mgbm90IGEgc3RyaW5nIG9yIHN5bWJvbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtzdHJpbmd8c3ltYm9sfSBSZXR1cm5zIHRoZSBrZXkuXG4gKi9cbmZ1bmN0aW9uIHRvS2V5KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0tleTtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1NvdXJjZTtcbiIsIi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjaGFyYWN0ZXIgY2xhc3Nlcy4gKi9cbnZhciByc0FzdHJhbFJhbmdlID0gJ1xcXFx1ZDgwMC1cXFxcdWRmZmYnLFxuICAgIHJzQ29tYm9NYXJrc1JhbmdlID0gJ1xcXFx1MDMwMC1cXFxcdTAzNmYnLFxuICAgIHJlQ29tYm9IYWxmTWFya3NSYW5nZSA9ICdcXFxcdWZlMjAtXFxcXHVmZTJmJyxcbiAgICByc0NvbWJvU3ltYm9sc1JhbmdlID0gJ1xcXFx1MjBkMC1cXFxcdTIwZmYnLFxuICAgIHJzQ29tYm9SYW5nZSA9IHJzQ29tYm9NYXJrc1JhbmdlICsgcmVDb21ib0hhbGZNYXJrc1JhbmdlICsgcnNDb21ib1N5bWJvbHNSYW5nZSxcbiAgICByc1ZhclJhbmdlID0gJ1xcXFx1ZmUwZVxcXFx1ZmUwZic7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjYXB0dXJlIGdyb3Vwcy4gKi9cbnZhciByc0FzdHJhbCA9ICdbJyArIHJzQXN0cmFsUmFuZ2UgKyAnXScsXG4gICAgcnNDb21ibyA9ICdbJyArIHJzQ29tYm9SYW5nZSArICddJyxcbiAgICByc0ZpdHogPSAnXFxcXHVkODNjW1xcXFx1ZGZmYi1cXFxcdWRmZmZdJyxcbiAgICByc01vZGlmaWVyID0gJyg/OicgKyByc0NvbWJvICsgJ3wnICsgcnNGaXR6ICsgJyknLFxuICAgIHJzTm9uQXN0cmFsID0gJ1teJyArIHJzQXN0cmFsUmFuZ2UgKyAnXScsXG4gICAgcnNSZWdpb25hbCA9ICcoPzpcXFxcdWQ4M2NbXFxcXHVkZGU2LVxcXFx1ZGRmZl0pezJ9JyxcbiAgICByc1N1cnJQYWlyID0gJ1tcXFxcdWQ4MDAtXFxcXHVkYmZmXVtcXFxcdWRjMDAtXFxcXHVkZmZmXScsXG4gICAgcnNaV0ogPSAnXFxcXHUyMDBkJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIHJlZ2V4ZXMuICovXG52YXIgcmVPcHRNb2QgPSByc01vZGlmaWVyICsgJz8nLFxuICAgIHJzT3B0VmFyID0gJ1snICsgcnNWYXJSYW5nZSArICddPycsXG4gICAgcnNPcHRKb2luID0gJyg/OicgKyByc1pXSiArICcoPzonICsgW3JzTm9uQXN0cmFsLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyXS5qb2luKCd8JykgKyAnKScgKyByc09wdFZhciArIHJlT3B0TW9kICsgJykqJyxcbiAgICByc1NlcSA9IHJzT3B0VmFyICsgcmVPcHRNb2QgKyByc09wdEpvaW4sXG4gICAgcnNTeW1ib2wgPSAnKD86JyArIFtyc05vbkFzdHJhbCArIHJzQ29tYm8gKyAnPycsIHJzQ29tYm8sIHJzUmVnaW9uYWwsIHJzU3VyclBhaXIsIHJzQXN0cmFsXS5qb2luKCd8JykgKyAnKSc7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIFtzdHJpbmcgc3ltYm9sc10oaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtdW5pY29kZSkuICovXG52YXIgcmVVbmljb2RlID0gUmVnRXhwKHJzRml0eiArICcoPz0nICsgcnNGaXR6ICsgJyl8JyArIHJzU3ltYm9sICsgcnNTZXEsICdnJyk7XG5cbi8qKlxuICogQ29udmVydHMgYSBVbmljb2RlIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiB1bmljb2RlVG9BcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5tYXRjaChyZVVuaWNvZGUpIHx8IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHVuaWNvZGVUb0FycmF5O1xuIiwidmFyIGFycmF5RWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5RWFjaCcpLFxuICAgIGFycmF5SW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfQ1VSUllfRkxBRyA9IDgsXG4gICAgV1JBUF9DVVJSWV9SSUdIVF9GTEFHID0gMTYsXG4gICAgV1JBUF9QQVJUSUFMX0ZMQUcgPSAzMixcbiAgICBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyA9IDY0LFxuICAgIFdSQVBfQVJZX0ZMQUcgPSAxMjgsXG4gICAgV1JBUF9SRUFSR19GTEFHID0gMjU2LFxuICAgIFdSQVBfRkxJUF9GTEFHID0gNTEyO1xuXG4vKiogVXNlZCB0byBhc3NvY2lhdGUgd3JhcCBtZXRob2RzIHdpdGggdGhlaXIgYml0IGZsYWdzLiAqL1xudmFyIHdyYXBGbGFncyA9IFtcbiAgWydhcnknLCBXUkFQX0FSWV9GTEFHXSxcbiAgWydiaW5kJywgV1JBUF9CSU5EX0ZMQUddLFxuICBbJ2JpbmRLZXknLCBXUkFQX0JJTkRfS0VZX0ZMQUddLFxuICBbJ2N1cnJ5JywgV1JBUF9DVVJSWV9GTEFHXSxcbiAgWydjdXJyeVJpZ2h0JywgV1JBUF9DVVJSWV9SSUdIVF9GTEFHXSxcbiAgWydmbGlwJywgV1JBUF9GTElQX0ZMQUddLFxuICBbJ3BhcnRpYWwnLCBXUkFQX1BBUlRJQUxfRkxBR10sXG4gIFsncGFydGlhbFJpZ2h0JywgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUddLFxuICBbJ3JlYXJnJywgV1JBUF9SRUFSR19GTEFHXVxuXTtcblxuLyoqXG4gKiBVcGRhdGVzIHdyYXBwZXIgYGRldGFpbHNgIGJhc2VkIG9uIGBiaXRtYXNrYCBmbGFncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybnMge0FycmF5fSBkZXRhaWxzIFRoZSBkZXRhaWxzIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGRldGFpbHNgLlxuICovXG5mdW5jdGlvbiB1cGRhdGVXcmFwRGV0YWlscyhkZXRhaWxzLCBiaXRtYXNrKSB7XG4gIGFycmF5RWFjaCh3cmFwRmxhZ3MsIGZ1bmN0aW9uKHBhaXIpIHtcbiAgICB2YXIgdmFsdWUgPSAnXy4nICsgcGFpclswXTtcbiAgICBpZiAoKGJpdG1hc2sgJiBwYWlyWzFdKSAmJiAhYXJyYXlJbmNsdWRlcyhkZXRhaWxzLCB2YWx1ZSkpIHtcbiAgICAgIGRldGFpbHMucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRldGFpbHMuc29ydCgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHVwZGF0ZVdyYXBEZXRhaWxzO1xuIiwidmFyIExhenlXcmFwcGVyID0gcmVxdWlyZSgnLi9fTGF6eVdyYXBwZXInKSxcbiAgICBMb2Rhc2hXcmFwcGVyID0gcmVxdWlyZSgnLi9fTG9kYXNoV3JhcHBlcicpLFxuICAgIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgd3JhcHBlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSB3cmFwcGVyIFRoZSB3cmFwcGVyIHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHdyYXBwZXIuXG4gKi9cbmZ1bmN0aW9uIHdyYXBwZXJDbG9uZSh3cmFwcGVyKSB7XG4gIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpIHtcbiAgICByZXR1cm4gd3JhcHBlci5jbG9uZSgpO1xuICB9XG4gIHZhciByZXN1bHQgPSBuZXcgTG9kYXNoV3JhcHBlcih3cmFwcGVyLl9fd3JhcHBlZF9fLCB3cmFwcGVyLl9fY2hhaW5fXyk7XG4gIHJlc3VsdC5fX2FjdGlvbnNfXyA9IGNvcHlBcnJheSh3cmFwcGVyLl9fYWN0aW9uc19fKTtcbiAgcmVzdWx0Ll9faW5kZXhfXyAgPSB3cmFwcGVyLl9faW5kZXhfXztcbiAgcmVzdWx0Ll9fdmFsdWVzX18gPSB3cmFwcGVyLl9fdmFsdWVzX187XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd3JhcHBlckNsb25lO1xuIiwidmFyIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGNyZWF0ZUFzc2lnbmVyID0gcmVxdWlyZSgnLi9fY3JlYXRlQXNzaWduZXInKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2Ygc291cmNlIG9iamVjdHMgdG8gdGhlXG4gKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC5cbiAqIFN1YnNlcXVlbnQgc291cmNlcyBvdmVyd3JpdGUgcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgc291cmNlcy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YCBhbmQgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BPYmplY3QuYXNzaWduYF0oaHR0cHM6Ly9tZG4uaW8vT2JqZWN0L2Fzc2lnbikuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEwLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBzZWUgXy5hc3NpZ25JblxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogZnVuY3Rpb24gQmFyKCkge1xuICogICB0aGlzLmMgPSAzO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYiA9IDI7XG4gKiBCYXIucHJvdG90eXBlLmQgPSA0O1xuICpcbiAqIF8uYXNzaWduKHsgJ2EnOiAwIH0sIG5ldyBGb28sIG5ldyBCYXIpO1xuICogLy8gPT4geyAnYSc6IDEsICdjJzogMyB9XG4gKi9cbnZhciBhc3NpZ24gPSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSkge1xuICBpZiAoaXNQcm90b3R5cGUoc291cmNlKSB8fCBpc0FycmF5TGlrZShzb3VyY2UpKSB7XG4gICAgY29weU9iamVjdChzb3VyY2UsIGtleXMoc291cmNlKSwgb2JqZWN0KTtcbiAgICByZXR1cm47XG4gIH1cbiAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICB9XG4gIH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnbjtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL3RvSW50ZWdlcicpO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgLCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBhbmQgYXJndW1lbnRzXG4gKiBvZiB0aGUgY3JlYXRlZCBmdW5jdGlvbiwgd2hpbGUgaXQncyBjYWxsZWQgbGVzcyB0aGFuIGBuYCB0aW1lcy4gU3Vic2VxdWVudFxuICogY2FsbHMgdG8gdGhlIGNyZWF0ZWQgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgIGludm9jYXRpb24uXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGNhbGxzIGF0IHdoaWNoIGBmdW5jYCBpcyBubyBsb25nZXIgaW52b2tlZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmVzdHJpY3RlZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIF8uYmVmb3JlKDUsIGFkZENvbnRhY3RUb0xpc3QpKTtcbiAqIC8vID0+IEFsbG93cyBhZGRpbmcgdXAgdG8gNCBjb250YWN0cyB0byB0aGUgbGlzdC5cbiAqL1xuZnVuY3Rpb24gYmVmb3JlKG4sIGZ1bmMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgbiA9IHRvSW50ZWdlcihuKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGlmICgtLW4gPiAwKSB7XG4gICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIGlmIChuIDw9IDEpIHtcbiAgICAgIGZ1bmMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmVmb3JlO1xuIiwidmFyIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBjcmVhdGVXcmFwID0gcmVxdWlyZSgnLi9fY3JlYXRlV3JhcCcpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlcGxhY2VIb2xkZXJzID0gcmVxdWlyZSgnLi9fcmVwbGFjZUhvbGRlcnMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzI7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgXG4gKiBhbmQgYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAqXG4gKiBUaGUgYF8uYmluZC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljIGJ1aWxkcyxcbiAqIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIG5hdGl2ZSBgRnVuY3Rpb24jYmluZGAsIHRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiXG4gKiBwcm9wZXJ0eSBvZiBib3VuZCBmdW5jdGlvbnMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBiaW5kLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0gey4uLip9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJvdW5kIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBncmVldChncmVldGluZywgcHVuY3R1YXRpb24pIHtcbiAqICAgcmV0dXJuIGdyZWV0aW5nICsgJyAnICsgdGhpcy51c2VyICsgcHVuY3R1YXRpb247XG4gKiB9XG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ3VzZXInOiAnZnJlZCcgfTtcbiAqXG4gKiB2YXIgYm91bmQgPSBfLmJpbmQoZ3JlZXQsIG9iamVjdCwgJ2hpJyk7XG4gKiBib3VuZCgnIScpO1xuICogLy8gPT4gJ2hpIGZyZWQhJ1xuICpcbiAqIC8vIEJvdW5kIHdpdGggcGxhY2Vob2xkZXJzLlxuICogdmFyIGJvdW5kID0gXy5iaW5kKGdyZWV0LCBvYmplY3QsIF8sICchJyk7XG4gKiBib3VuZCgnaGknKTtcbiAqIC8vID0+ICdoaSBmcmVkISdcbiAqL1xudmFyIGJpbmQgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCB0aGlzQXJnLCBwYXJ0aWFscykge1xuICB2YXIgYml0bWFzayA9IFdSQVBfQklORF9GTEFHO1xuICBpZiAocGFydGlhbHMubGVuZ3RoKSB7XG4gICAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgZ2V0SG9sZGVyKGJpbmQpKTtcbiAgICBiaXRtYXNrIHw9IFdSQVBfUEFSVElBTF9GTEFHO1xuICB9XG4gIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzKTtcbn0pO1xuXG4vLyBBc3NpZ24gZGVmYXVsdCBwbGFjZWhvbGRlcnMuXG5iaW5kLnBsYWNlaG9sZGVyID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gYmluZDtcbiIsInZhciBiYXNlQ2xvbmUgPSByZXF1aXJlKCcuL19iYXNlQ2xvbmUnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzaGFsbG93IGNsb25lIG9mIGB2YWx1ZWAuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb24gdGhlXG4gKiBbc3RydWN0dXJlZCBjbG9uZSBhbGdvcml0aG1dKGh0dHBzOi8vbWRuLmlvL1N0cnVjdHVyZWRfY2xvbmVfYWxnb3JpdGhtKVxuICogYW5kIHN1cHBvcnRzIGNsb25pbmcgYXJyYXlzLCBhcnJheSBidWZmZXJzLCBib29sZWFucywgZGF0ZSBvYmplY3RzLCBtYXBzLFxuICogbnVtYmVycywgYE9iamVjdGAgb2JqZWN0cywgcmVnZXhlcywgc2V0cywgc3RyaW5ncywgc3ltYm9scywgYW5kIHR5cGVkXG4gKiBhcnJheXMuIFRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9mIGBhcmd1bWVudHNgIG9iamVjdHMgYXJlIGNsb25lZFxuICogYXMgcGxhaW4gb2JqZWN0cy4gQW4gZW1wdHkgb2JqZWN0IGlzIHJldHVybmVkIGZvciB1bmNsb25lYWJsZSB2YWx1ZXMgc3VjaFxuICogYXMgZXJyb3Igb2JqZWN0cywgZnVuY3Rpb25zLCBET00gbm9kZXMsIGFuZCBXZWFrTWFwcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgY2xvbmVkIHZhbHVlLlxuICogQHNlZSBfLmNsb25lRGVlcFxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFt7ICdhJzogMSB9LCB7ICdiJzogMiB9XTtcbiAqXG4gKiB2YXIgc2hhbGxvdyA9IF8uY2xvbmUob2JqZWN0cyk7XG4gKiBjb25zb2xlLmxvZyhzaGFsbG93WzBdID09PSBvYmplY3RzWzBdKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gY2xvbmUodmFsdWUpIHtcbiAgcmV0dXJuIGJhc2VDbG9uZSh2YWx1ZSwgQ0xPTkVfU1lNQk9MU19GTEFHKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZTtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnN0YW50O1xuIiwidmFyIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBpc0l0ZXJhdGVlQ2FsbCA9IHJlcXVpcmUoJy4vX2lzSXRlcmF0ZWVDYWxsJyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBc3NpZ25zIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2Ygc291cmNlXG4gKiBvYmplY3RzIHRvIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QgZm9yIGFsbCBkZXN0aW5hdGlvbiBwcm9wZXJ0aWVzIHRoYXRcbiAqIHJlc29sdmUgdG8gYHVuZGVmaW5lZGAuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC5cbiAqIE9uY2UgYSBwcm9wZXJ0eSBpcyBzZXQsIGFkZGl0aW9uYWwgdmFsdWVzIG9mIHRoZSBzYW1lIHByb3BlcnR5IGFyZSBpZ25vcmVkLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBzZWUgXy5kZWZhdWx0c0RlZXBcbiAqIEBleGFtcGxlXG4gKlxuICogXy5kZWZhdWx0cyh7ICdhJzogMSB9LCB7ICdiJzogMiB9LCB7ICdhJzogMyB9KTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICovXG52YXIgZGVmYXVsdHMgPSBiYXNlUmVzdChmdW5jdGlvbihvYmplY3QsIHNvdXJjZXMpIHtcbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gLTE7XG4gIHZhciBsZW5ndGggPSBzb3VyY2VzLmxlbmd0aDtcbiAgdmFyIGd1YXJkID0gbGVuZ3RoID4gMiA/IHNvdXJjZXNbMl0gOiB1bmRlZmluZWQ7XG5cbiAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHNvdXJjZXNbMF0sIHNvdXJjZXNbMV0sIGd1YXJkKSkge1xuICAgIGxlbmd0aCA9IDE7XG4gIH1cblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzW2luZGV4XTtcbiAgICB2YXIgcHJvcHMgPSBrZXlzSW4oc291cmNlKTtcbiAgICB2YXIgcHJvcHNJbmRleCA9IC0xO1xuICAgIHZhciBwcm9wc0xlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICAgIHdoaWxlICgrK3Byb3BzSW5kZXggPCBwcm9wc0xlbmd0aCkge1xuICAgICAgdmFyIGtleSA9IHByb3BzW3Byb3BzSW5kZXhdO1xuICAgICAgdmFyIHZhbHVlID0gb2JqZWN0W2tleV07XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgKGVxKHZhbHVlLCBvYmplY3RQcm90b1trZXldKSAmJiAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSB7XG4gICAgICAgIG9iamVjdFtrZXldID0gc291cmNlW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iamVjdDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRzO1xuIiwidmFyIGJhc2VEaWZmZXJlbmNlID0gcmVxdWlyZSgnLi9fYmFzZURpZmZlcmVuY2UnKSxcbiAgICBiYXNlRmxhdHRlbiA9IHJlcXVpcmUoJy4vX2Jhc2VGbGF0dGVuJyksXG4gICAgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGlzQXJyYXlMaWtlT2JqZWN0ID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZU9iamVjdCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgYGFycmF5YCB2YWx1ZXMgbm90IGluY2x1ZGVkIGluIHRoZSBvdGhlciBnaXZlbiBhcnJheXNcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIFRoZSBvcmRlciBhbmQgcmVmZXJlbmNlcyBvZiByZXN1bHQgdmFsdWVzIGFyZVxuICogZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuXG4gKlxuICogKipOb3RlOioqIFVubGlrZSBgXy5wdWxsQWxsYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsuLi5BcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICogQHNlZSBfLndpdGhvdXQsIF8ueG9yXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGlmZmVyZW5jZShbMiwgMV0sIFsyLCAzXSk7XG4gKiAvLyA9PiBbMV1cbiAqL1xudmFyIGRpZmZlcmVuY2UgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheSwgdmFsdWVzKSB7XG4gIHJldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSlcbiAgICA/IGJhc2VEaWZmZXJlbmNlKGFycmF5LCBiYXNlRmxhdHRlbih2YWx1ZXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSlcbiAgICA6IFtdO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGlmZmVyZW5jZTtcbiIsIi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxO1xuIiwidmFyIGVzY2FwZUh0bWxDaGFyID0gcmVxdWlyZSgnLi9fZXNjYXBlSHRtbENoYXInKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggSFRNTCBlbnRpdGllcyBhbmQgSFRNTCBjaGFyYWN0ZXJzLiAqL1xudmFyIHJlVW5lc2NhcGVkSHRtbCA9IC9bJjw+XCInXS9nLFxuICAgIHJlSGFzVW5lc2NhcGVkSHRtbCA9IFJlZ0V4cChyZVVuZXNjYXBlZEh0bWwuc291cmNlKTtcblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgY2hhcmFjdGVycyBcIiZcIiwgXCI8XCIsIFwiPlwiLCAnXCInLCBhbmQgXCInXCIgaW4gYHN0cmluZ2AgdG8gdGhlaXJcbiAqIGNvcnJlc3BvbmRpbmcgSFRNTCBlbnRpdGllcy5cbiAqXG4gKiAqKk5vdGU6KiogTm8gb3RoZXIgY2hhcmFjdGVycyBhcmUgZXNjYXBlZC4gVG8gZXNjYXBlIGFkZGl0aW9uYWxcbiAqIGNoYXJhY3RlcnMgdXNlIGEgdGhpcmQtcGFydHkgbGlicmFyeSBsaWtlIFtfaGVfXShodHRwczovL210aHMuYmUvaGUpLlxuICpcbiAqIFRob3VnaCB0aGUgXCI+XCIgY2hhcmFjdGVyIGlzIGVzY2FwZWQgZm9yIHN5bW1ldHJ5LCBjaGFyYWN0ZXJzIGxpa2VcbiAqIFwiPlwiIGFuZCBcIi9cIiBkb24ndCBuZWVkIGVzY2FwaW5nIGluIEhUTUwgYW5kIGhhdmUgbm8gc3BlY2lhbCBtZWFuaW5nXG4gKiB1bmxlc3MgdGhleSdyZSBwYXJ0IG9mIGEgdGFnIG9yIHVucXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZS4gU2VlXG4gKiBbTWF0aGlhcyBCeW5lbnMncyBhcnRpY2xlXShodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvYW1iaWd1b3VzLWFtcGVyc2FuZHMpXG4gKiAodW5kZXIgXCJzZW1pLXJlbGF0ZWQgZnVuIGZhY3RcIikgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBXaGVuIHdvcmtpbmcgd2l0aCBIVE1MIHlvdSBzaG91bGQgYWx3YXlzXG4gKiBbcXVvdGUgYXR0cmlidXRlIHZhbHVlc10oaHR0cDovL3dvbmtvLmNvbS9wb3N0L2h0bWwtZXNjYXBpbmcpIHRvIHJlZHVjZVxuICogWFNTIHZlY3RvcnMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gZXNjYXBlLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZXNjYXBlKCdmcmVkLCBiYXJuZXksICYgcGViYmxlcycpO1xuICogLy8gPT4gJ2ZyZWQsIGJhcm5leSwgJmFtcDsgcGViYmxlcydcbiAqL1xuZnVuY3Rpb24gZXNjYXBlKHN0cmluZykge1xuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICByZXR1cm4gKHN0cmluZyAmJiByZUhhc1VuZXNjYXBlZEh0bWwudGVzdChzdHJpbmcpKVxuICAgID8gc3RyaW5nLnJlcGxhY2UocmVVbmVzY2FwZWRIdG1sLCBlc2NhcGVIdG1sQ2hhcilcbiAgICA6IHN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlc2NhcGU7XG4iLCJ2YXIgY3JlYXRlRmluZCA9IHJlcXVpcmUoJy4vX2NyZWF0ZUZpbmQnKSxcbiAgICBmaW5kSW5kZXggPSByZXF1aXJlKCcuL2ZpbmRJbmRleCcpO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gLCByZXR1cm5pbmcgdGhlIGZpcnN0IGVsZW1lbnRcbiAqIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hdGNoZWQgZWxlbWVudCwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHVzZXJzID0gW1xuICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IHRydWUgfVxuICogXTtcbiAqXG4gKiBfLmZpbmQodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWdlIDwgNDA7IH0pO1xuICogLy8gPT4gb2JqZWN0IGZvciAnYmFybmV5J1xuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmQodXNlcnMsIHsgJ2FnZSc6IDEsICdhY3RpdmUnOiB0cnVlIH0pO1xuICogLy8gPT4gb2JqZWN0IGZvciAncGViYmxlcydcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmQodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IG9iamVjdCBmb3IgJ2ZyZWQnXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmQodXNlcnMsICdhY3RpdmUnKTtcbiAqIC8vID0+IG9iamVjdCBmb3IgJ2Jhcm5leSdcbiAqL1xudmFyIGZpbmQgPSBjcmVhdGVGaW5kKGZpbmRJbmRleCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmluZDtcbiIsInZhciBiYXNlRmluZEluZGV4ID0gcmVxdWlyZSgnLi9fYmFzZUZpbmRJbmRleCcpLFxuICAgIGJhc2VJdGVyYXRlZSA9IHJlcXVpcmUoJy4vX2Jhc2VJdGVyYXRlZScpLFxuICAgIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vdG9JbnRlZ2VyJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZpbmRgIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdFxuICogZWxlbWVudCBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgaW5zdGVhZCBvZiB0aGUgZWxlbWVudCBpdHNlbGYuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAxLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmb3VuZCBlbGVtZW50LCBlbHNlIGAtMWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogdHJ1ZSB9XG4gKiBdO1xuICpcbiAqIF8uZmluZEluZGV4KHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLnVzZXIgPT0gJ2Jhcm5leSc7IH0pO1xuICogLy8gPT4gMFxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmRJbmRleCh1c2VycywgeyAndXNlcic6ICdmcmVkJywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICogLy8gPT4gMVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmluZEluZGV4KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gKiAvLyA9PiAwXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmRJbmRleCh1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gMlxuICovXG5mdW5jdGlvbiBmaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSwgZnJvbUluZGV4KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgdmFyIGluZGV4ID0gZnJvbUluZGV4ID09IG51bGwgPyAwIDogdG9JbnRlZ2VyKGZyb21JbmRleCk7XG4gIGlmIChpbmRleCA8IDApIHtcbiAgICBpbmRleCA9IG5hdGl2ZU1heChsZW5ndGggKyBpbmRleCwgMCk7XG4gIH1cbiAgcmV0dXJuIGJhc2VGaW5kSW5kZXgoYXJyYXksIGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCBpbmRleCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmluZEluZGV4O1xuIiwidmFyIGJhc2VGbGF0dGVuID0gcmVxdWlyZSgnLi9fYmFzZUZsYXR0ZW4nKTtcblxuLyoqXG4gKiBGbGF0dGVucyBgYXJyYXlgIGEgc2luZ2xlIGxldmVsIGRlZXAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5mbGF0dGVuKFsxLCBbMiwgWzMsIFs0XV0sIDVdXSk7XG4gKiAvLyA9PiBbMSwgMiwgWzMsIFs0XV0sIDVdXG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYmFzZUZsYXR0ZW4oYXJyYXksIDEpIDogW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdHRlbjtcbiIsInZhciBhcnJheUVhY2ggPSByZXF1aXJlKCcuL19hcnJheUVhY2gnKSxcbiAgICBiYXNlRWFjaCA9IHJlcXVpcmUoJy4vX2Jhc2VFYWNoJyksXG4gICAgY2FzdEZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fY2FzdEZ1bmN0aW9uJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gIGFuZCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggZWxlbWVudC5cbiAqIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gKiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gKlxuICogKipOb3RlOioqIEFzIHdpdGggb3RoZXIgXCJDb2xsZWN0aW9uc1wiIG1ldGhvZHMsIG9iamVjdHMgd2l0aCBhIFwibGVuZ3RoXCJcbiAqIHByb3BlcnR5IGFyZSBpdGVyYXRlZCBsaWtlIGFycmF5cy4gVG8gYXZvaWQgdGhpcyBiZWhhdmlvciB1c2UgYF8uZm9ySW5gXG4gKiBvciBgXy5mb3JPd25gIGZvciBvYmplY3QgaXRlcmF0aW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBhbGlhcyBlYWNoXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAqIEBzZWUgXy5mb3JFYWNoUmlnaHRcbiAqIEBleGFtcGxlXG4gKlxuICogXy5mb3JFYWNoKFsxLCAyXSwgZnVuY3Rpb24odmFsdWUpIHtcbiAqICAgY29uc29sZS5sb2codmFsdWUpO1xuICogfSk7XG4gKiAvLyA9PiBMb2dzIGAxYCB0aGVuIGAyYC5cbiAqXG4gKiBfLmZvckVhY2goeyAnYSc6IDEsICdiJzogMiB9LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gKiB9KTtcbiAqIC8vID0+IExvZ3MgJ2EnIHRoZW4gJ2InIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICovXG5mdW5jdGlvbiBmb3JFYWNoKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RWFjaCA6IGJhc2VFYWNoO1xuICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBjYXN0RnVuY3Rpb24oaXRlcmF0ZWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmb3JFYWNoO1xuIiwidmFyIGJhc2VGb3JPd24gPSByZXF1aXJlKCcuL19iYXNlRm9yT3duJyksXG4gICAgY2FzdEZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fY2FzdEZ1bmN0aW9uJyk7XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBhbiBvYmplY3QgYW5kXG4gKiBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggcHJvcGVydHkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAqIGFyZ3VtZW50czogKHZhbHVlLCBrZXksIG9iamVjdCkuIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb25cbiAqIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjMuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBzZWUgXy5mb3JPd25SaWdodFxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmZvck93bihuZXcgRm9vLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gKiB9KTtcbiAqIC8vID0+IExvZ3MgJ2EnIHRoZW4gJ2InIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICovXG5mdW5jdGlvbiBmb3JPd24ob2JqZWN0LCBpdGVyYXRlZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3JPd24ob2JqZWN0LCBjYXN0RnVuY3Rpb24oaXRlcmF0ZWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmb3JPd247XG4iLCJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIHRoZSByZXNvbHZlZCB2YWx1ZSBpc1xuICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjcuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGZvciBgdW5kZWZpbmVkYCByZXNvbHZlZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gKlxuICogXy5nZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsICdhLmIuYycsICdkZWZhdWx0Jyk7XG4gKiAvLyA9PiAnZGVmYXVsdCdcbiAqL1xuZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldDtcbiIsInZhciBiYXNlSGFzID0gcmVxdWlyZSgnLi9fYmFzZUhhcycpLFxuICAgIGhhc1BhdGggPSByZXF1aXJlKCcuL19oYXNQYXRoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBwcm9wZXJ0eSBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogeyAnYic6IDIgfSB9O1xuICogdmFyIG90aGVyID0gXy5jcmVhdGUoeyAnYSc6IF8uY3JlYXRlKHsgJ2InOiAyIH0pIH0pO1xuICpcbiAqIF8uaGFzKG9iamVjdCwgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhcyhvYmplY3QsICdhLmInKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhcyhvYmplY3QsIFsnYScsICdiJ10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzKG90aGVyLCAnYScpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaGFzKG9iamVjdCwgcGF0aCkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYgaGFzUGF0aChvYmplY3QsIHBhdGgsIGJhc2VIYXMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhcztcbiIsInZhciBiYXNlSGFzSW4gPSByZXF1aXJlKCcuL19iYXNlSGFzSW4nKSxcbiAgICBoYXNQYXRoID0gcmVxdWlyZSgnLi9faGFzUGF0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgcGF0aGAgaXMgYSBkaXJlY3Qgb3IgaW5oZXJpdGVkIHByb3BlcnR5IG9mIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IF8uY3JlYXRlKHsgJ2EnOiBfLmNyZWF0ZSh7ICdiJzogMiB9KSB9KTtcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EuYicpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2InKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGhhc0luKG9iamVjdCwgcGF0aCkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYgaGFzUGF0aChvYmplY3QsIHBhdGgsIGJhc2VIYXNJbik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzSW47XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuIiwidmFyIGJhc2VJbmRleE9mID0gcmVxdWlyZSgnLi9fYmFzZUluZGV4T2YnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc1N0cmluZyA9IHJlcXVpcmUoJy4vaXNTdHJpbmcnKSxcbiAgICB0b0ludGVnZXIgPSByZXF1aXJlKCcuL3RvSW50ZWdlcicpLFxuICAgIHZhbHVlcyA9IHJlcXVpcmUoJy4vdmFsdWVzJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiBgY29sbGVjdGlvbmAuIElmIGBjb2xsZWN0aW9uYCBpcyBhIHN0cmluZywgaXQnc1xuICogY2hlY2tlZCBmb3IgYSBzdWJzdHJpbmcgb2YgYHZhbHVlYCwgb3RoZXJ3aXNlXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogaXMgdXNlZCBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIElmIGBmcm9tSW5kZXhgIGlzIG5lZ2F0aXZlLCBpdCdzIHVzZWQgYXNcbiAqIHRoZSBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIGBjb2xsZWN0aW9uYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ucmVkdWNlYC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaW5jbHVkZXMoWzEsIDIsIDNdLCAxKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmluY2x1ZGVzKFsxLCAyLCAzXSwgMSwgMik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaW5jbHVkZXMoeyAnYSc6IDEsICdiJzogMiB9LCAxKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmluY2x1ZGVzKCdhYmNkJywgJ2JjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGluY2x1ZGVzKGNvbGxlY3Rpb24sIHZhbHVlLCBmcm9tSW5kZXgsIGd1YXJkKSB7XG4gIGNvbGxlY3Rpb24gPSBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSA/IGNvbGxlY3Rpb24gOiB2YWx1ZXMoY29sbGVjdGlvbik7XG4gIGZyb21JbmRleCA9IChmcm9tSW5kZXggJiYgIWd1YXJkKSA/IHRvSW50ZWdlcihmcm9tSW5kZXgpIDogMDtcblxuICB2YXIgbGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7XG4gIGlmIChmcm9tSW5kZXggPCAwKSB7XG4gICAgZnJvbUluZGV4ID0gbmF0aXZlTWF4KGxlbmd0aCArIGZyb21JbmRleCwgMCk7XG4gIH1cbiAgcmV0dXJuIGlzU3RyaW5nKGNvbGxlY3Rpb24pXG4gICAgPyAoZnJvbUluZGV4IDw9IGxlbmd0aCAmJiBjb2xsZWN0aW9uLmluZGV4T2YodmFsdWUsIGZyb21JbmRleCkgPiAtMSlcbiAgICA6ICghIWxlbmd0aCAmJiBiYXNlSW5kZXhPZihjb2xsZWN0aW9uLCB2YWx1ZSwgZnJvbUluZGV4KSA+IC0xKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbmNsdWRlcztcbiIsInZhciBhcHBseSA9IHJlcXVpcmUoJy4vX2FwcGx5JyksXG4gICAgYmFzZUVhY2ggPSByZXF1aXJlKCcuL19iYXNlRWFjaCcpLFxuICAgIGJhc2VJbnZva2UgPSByZXF1aXJlKCcuL19iYXNlSW52b2tlJyksXG4gICAgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIEludm9rZXMgdGhlIG1ldGhvZCBhdCBgcGF0aGAgb2YgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYCwgcmV0dXJuaW5nXG4gKiBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiBlYWNoIGludm9rZWQgbWV0aG9kLiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHNcbiAqIGFyZSBwcm92aWRlZCB0byBlYWNoIGludm9rZWQgbWV0aG9kLiBJZiBgcGF0aGAgaXMgYSBmdW5jdGlvbiwgaXQncyBpbnZva2VkXG4gKiBmb3IsIGFuZCBgdGhpc2AgYm91bmQgdG8sIGVhY2ggZWxlbWVudCBpbiBgY29sbGVjdGlvbmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb258c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBtZXRob2QgdG8gaW52b2tlIG9yXG4gKiAgdGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGVhY2ggbWV0aG9kIHdpdGguXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaW52b2tlTWFwKFtbNSwgMSwgN10sIFszLCAyLCAxXV0sICdzb3J0Jyk7XG4gKiAvLyA9PiBbWzEsIDUsIDddLCBbMSwgMiwgM11dXG4gKlxuICogXy5pbnZva2VNYXAoWzEyMywgNDU2XSwgU3RyaW5nLnByb3RvdHlwZS5zcGxpdCwgJycpO1xuICogLy8gPT4gW1snMScsICcyJywgJzMnXSwgWyc0JywgJzUnLCAnNiddXVxuICovXG52YXIgaW52b2tlTWFwID0gYmFzZVJlc3QoZnVuY3Rpb24oY29sbGVjdGlvbiwgcGF0aCwgYXJncykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGlzRnVuYyA9IHR5cGVvZiBwYXRoID09ICdmdW5jdGlvbicsXG4gICAgICByZXN1bHQgPSBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSA/IEFycmF5KGNvbGxlY3Rpb24ubGVuZ3RoKSA6IFtdO1xuXG4gIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gaXNGdW5jID8gYXBwbHkocGF0aCwgdmFsdWUsIGFyZ3MpIDogYmFzZUludm9rZSh2YWx1ZSwgcGF0aCwgYXJncyk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gaW52b2tlTWFwO1xuIiwidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheTtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlO1xuIiwidmFyIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc0FycmF5TGlrZWAgZXhjZXB0IHRoYXQgaXQgYWxzbyBjaGVja3MgaWYgYHZhbHVlYFxuICogaXMgYW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LWxpa2Ugb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZU9iamVjdDtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpLFxuICAgIHN0dWJGYWxzZSA9IHJlcXVpcmUoJy4vc3R1YkZhbHNlJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0J1ZmZlcjtcbiIsInZhciBiYXNlSXNEYXRlID0gcmVxdWlyZSgnLi9fYmFzZUlzRGF0ZScpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNEYXRlID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNEYXRlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRGF0ZWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZGF0ZSBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0RhdGUobmV3IERhdGUpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNEYXRlKCdNb24gQXByaWwgMjMgMjAxMicpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzRGF0ZSA9IG5vZGVJc0RhdGUgPyBiYXNlVW5hcnkobm9kZUlzRGF0ZSkgOiBiYXNlSXNEYXRlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRGF0ZTtcbiIsInZhciBiYXNlS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzJyksXG4gICAgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gZW1wdHkgb2JqZWN0LCBjb2xsZWN0aW9uLCBtYXAsIG9yIHNldC5cbiAqXG4gKiBPYmplY3RzIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBubyBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWRcbiAqIHByb3BlcnRpZXMuXG4gKlxuICogQXJyYXktbGlrZSB2YWx1ZXMgc3VjaCBhcyBgYXJndW1lbnRzYCBvYmplY3RzLCBhcnJheXMsIGJ1ZmZlcnMsIHN0cmluZ3MsIG9yXG4gKiBqUXVlcnktbGlrZSBjb2xsZWN0aW9ucyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgYSBgbGVuZ3RoYCBvZiBgMGAuXG4gKiBTaW1pbGFybHksIG1hcHMgYW5kIHNldHMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIGEgYHNpemVgIG9mIGAwYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBlbXB0eSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRW1wdHkobnVsbCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0VtcHR5KHRydWUpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbXB0eSgxKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRW1wdHkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0VtcHR5KHsgJ2EnOiAxIH0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiZcbiAgICAgIChpc0FycmF5KHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlLnNwbGljZSA9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIGlzQnVmZmVyKHZhbHVlKSB8fCBpc1R5cGVkQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSkpIHtcbiAgICByZXR1cm4gIXZhbHVlLmxlbmd0aDtcbiAgfVxuICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKTtcbiAgaWYgKHRhZyA9PSBtYXBUYWcgfHwgdGFnID09IHNldFRhZykge1xuICAgIHJldHVybiAhdmFsdWUuc2l6ZTtcbiAgfVxuICBpZiAoaXNQcm90b3R5cGUodmFsdWUpKSB7XG4gICAgcmV0dXJuICFiYXNlS2V5cyh2YWx1ZSkubGVuZ3RoO1xuICB9XG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRW1wdHk7XG4iLCJ2YXIgYmFzZUlzRXF1YWwgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbCcpO1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmVcbiAqIGVxdWl2YWxlbnQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIHN1cHBvcnRzIGNvbXBhcmluZyBhcnJheXMsIGFycmF5IGJ1ZmZlcnMsIGJvb2xlYW5zLFxuICogZGF0ZSBvYmplY3RzLCBlcnJvciBvYmplY3RzLCBtYXBzLCBudW1iZXJzLCBgT2JqZWN0YCBvYmplY3RzLCByZWdleGVzLFxuICogc2V0cywgc3RyaW5ncywgc3ltYm9scywgYW5kIHR5cGVkIGFycmF5cy4gYE9iamVjdGAgb2JqZWN0cyBhcmUgY29tcGFyZWRcbiAqIGJ5IHRoZWlyIG93biwgbm90IGluaGVyaXRlZCwgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLiBGdW5jdGlvbnMgYW5kIERPTVxuICogbm9kZXMgYXJlIGNvbXBhcmVkIGJ5IHN0cmljdCBlcXVhbGl0eSwgaS5lLiBgPT09YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5pc0VxdWFsKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIG9iamVjdCA9PT0gb3RoZXI7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0VxdWFsKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0VxdWFsO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGdW5jdGlvbjtcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xlbmd0aDtcbiIsInZhciBiYXNlSXNNYXAgPSByZXF1aXJlKCcuL19iYXNlSXNNYXAnKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzTWFwID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNNYXA7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBNYXBgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTWFwKG5ldyBNYXApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNNYXAobmV3IFdlYWtNYXApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzTWFwID0gbm9kZUlzTWFwID8gYmFzZVVuYXJ5KG5vZGVJc01hcCkgOiBiYXNlSXNNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNNYXA7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0TGlrZTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGdldFByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2dldFByb3RvdHlwZScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cbnZhciBvYmplY3RDdG9yU3RyaW5nID0gZnVuY1RvU3RyaW5nLmNhbGwoT2JqZWN0KTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgdGhhdCBpcywgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlXG4gKiBgT2JqZWN0YCBjb25zdHJ1Y3RvciBvciBvbmUgd2l0aCBhIGBbW1Byb3RvdHlwZV1dYCBvZiBgbnVsbGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjguMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogfVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChuZXcgRm9vKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdCh7ICd4JzogMCwgJ3knOiAwIH0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgfHwgYmFzZUdldFRhZyh2YWx1ZSkgIT0gb2JqZWN0VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwcm90byA9IGdldFByb3RvdHlwZSh2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmXG4gICAgZnVuY1RvU3RyaW5nLmNhbGwoQ3RvcikgPT0gb2JqZWN0Q3RvclN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1BsYWluT2JqZWN0O1xuIiwidmFyIGJhc2VJc1NldCA9IHJlcXVpcmUoJy4vX2Jhc2VJc1NldCcpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNTZXQgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1NldDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFNldGAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTZXQobmV3IFNldCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1NldChuZXcgV2Vha1NldCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNTZXQgPSBub2RlSXNTZXQgPyBiYXNlVW5hcnkobm9kZUlzU2V0KSA6IGJhc2VJc1NldDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1NldDtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTdHJpbmdgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzdHJpbmcsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N0cmluZygnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N0cmluZygxKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHxcbiAgICAoIWlzQXJyYXkodmFsdWUpICYmIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3RyaW5nVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N0cmluZztcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N5bWJvbDtcbiIsInZhciBiYXNlSXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fYmFzZUlzVHlwZWRBcnJheScpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNUeXBlZEFycmF5O1xuIiwidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXMgPSByZXF1aXJlKCcuL19iYXNlS2V5cycpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5cyhuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLmtleXMoJ2hpJyk7XG4gKiAvLyA9PiBbJzAnLCAnMSddXG4gKi9cbmZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzO1xuIiwidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXNJbiA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzSW4nKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c0luO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5sYXN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAzXG4gKi9cbmZ1bmN0aW9uIGxhc3QoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYXJyYXlbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGFzdDtcbiIsInZhciBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyk7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgbWVtb2l6ZXMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuIElmIGByZXNvbHZlcmAgaXNcbiAqIHByb3ZpZGVkLCBpdCBkZXRlcm1pbmVzIHRoZSBjYWNoZSBrZXkgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGVcbiAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudFxuICogcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uIGlzIHVzZWQgYXMgdGhlIG1hcCBjYWNoZSBrZXkuIFRoZSBgZnVuY2BcbiAqIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlIG1lbW9pemVkIGZ1bmN0aW9uLlxuICpcbiAqICoqTm90ZToqKiBUaGUgY2FjaGUgaXMgZXhwb3NlZCBhcyB0aGUgYGNhY2hlYCBwcm9wZXJ0eSBvbiB0aGUgbWVtb2l6ZWRcbiAqIGZ1bmN0aW9uLiBJdHMgY3JlYXRpb24gbWF5IGJlIGN1c3RvbWl6ZWQgYnkgcmVwbGFjaW5nIHRoZSBgXy5tZW1vaXplLkNhY2hlYFxuICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5zdGFuY2VzIGltcGxlbWVudCB0aGVcbiAqIFtgTWFwYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcHJvcGVydGllcy1vZi10aGUtbWFwLXByb3RvdHlwZS1vYmplY3QpXG4gKiBtZXRob2QgaW50ZXJmYWNlIG9mIGBjbGVhcmAsIGBkZWxldGVgLCBgZ2V0YCwgYGhhc2AsIGFuZCBgc2V0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0gVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiB9O1xuICogdmFyIG90aGVyID0geyAnYyc6IDMsICdkJzogNCB9O1xuICpcbiAqIHZhciB2YWx1ZXMgPSBfLm1lbW9pemUoXy52YWx1ZXMpO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiB2YWx1ZXMob3RoZXIpO1xuICogLy8gPT4gWzMsIDRdXG4gKlxuICogb2JqZWN0LmEgPSAyO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiAvLyBNb2RpZnkgdGhlIHJlc3VsdCBjYWNoZS5cbiAqIHZhbHVlcy5jYWNoZS5zZXQob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWydhJywgJ2InXVxuICpcbiAqIC8vIFJlcGxhY2UgYF8ubWVtb2l6ZS5DYWNoZWAuXG4gKiBfLm1lbW9pemUuQ2FjaGUgPSBXZWFrTWFwO1xuICovXG5mdW5jdGlvbiBtZW1vaXplKGZ1bmMsIHJlc29sdmVyKSB7XG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAhPSBudWxsICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXG4gICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XG5cbiAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpIHx8IGNhY2hlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IE1hcENhY2hlKTtcbiAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG4vLyBFeHBvc2UgYE1hcENhY2hlYC5cbm1lbW9pemUuQ2FjaGUgPSBNYXBDYWNoZTtcblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGB1bmRlZmluZWRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi4zLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5ub29wKTtcbiAqIC8vID0+IFt1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAqL1xuZnVuY3Rpb24gbm9vcCgpIHtcbiAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBub29wO1xuIiwidmFyIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBiYXNlQ2xvbmUgPSByZXF1aXJlKCcuL19iYXNlQ2xvbmUnKSxcbiAgICBiYXNlVW5zZXQgPSByZXF1aXJlKCcuL19iYXNlVW5zZXQnKSxcbiAgICBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBjdXN0b21PbWl0Q2xvbmUgPSByZXF1aXJlKCcuL19jdXN0b21PbWl0Q2xvbmUnKSxcbiAgICBmbGF0UmVzdCA9IHJlcXVpcmUoJy4vX2ZsYXRSZXN0JyksXG4gICAgZ2V0QWxsS2V5c0luID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5c0luJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG52YXIgQ0xPTkVfREVFUF9GTEFHID0gMSxcbiAgICBDTE9ORV9GTEFUX0ZMQUcgPSAyLFxuICAgIENMT05FX1NZTUJPTFNfRkxBRyA9IDQ7XG5cbi8qKlxuICogVGhlIG9wcG9zaXRlIG9mIGBfLnBpY2tgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGVcbiAqIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgcGF0aHMgb2YgYG9iamVjdGAgdGhhdCBhcmUgbm90IG9taXR0ZWQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGNvbnNpZGVyYWJseSBzbG93ZXIgdGhhbiBgXy5waWNrYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gb21pdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAnMicsICdjJzogMyB9O1xuICpcbiAqIF8ub21pdChvYmplY3QsIFsnYScsICdjJ10pO1xuICogLy8gPT4geyAnYic6ICcyJyB9XG4gKi9cbnZhciBvbWl0ID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBwYXRocykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgdmFyIGlzRGVlcCA9IGZhbHNlO1xuICBwYXRocyA9IGFycmF5TWFwKHBhdGhzLCBmdW5jdGlvbihwYXRoKSB7XG4gICAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG4gICAgaXNEZWVwIHx8IChpc0RlZXAgPSBwYXRoLmxlbmd0aCA+IDEpO1xuICAgIHJldHVybiBwYXRoO1xuICB9KTtcbiAgY29weU9iamVjdChvYmplY3QsIGdldEFsbEtleXNJbihvYmplY3QpLCByZXN1bHQpO1xuICBpZiAoaXNEZWVwKSB7XG4gICAgcmVzdWx0ID0gYmFzZUNsb25lKHJlc3VsdCwgQ0xPTkVfREVFUF9GTEFHIHwgQ0xPTkVfRkxBVF9GTEFHIHwgQ0xPTkVfU1lNQk9MU19GTEFHLCBjdXN0b21PbWl0Q2xvbmUpO1xuICB9XG4gIHZhciBsZW5ndGggPSBwYXRocy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGJhc2VVbnNldChyZXN1bHQsIHBhdGhzW2xlbmd0aF0pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBvbWl0O1xuIiwidmFyIGJlZm9yZSA9IHJlcXVpcmUoJy4vYmVmb3JlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaXMgcmVzdHJpY3RlZCB0byBpbnZva2luZyBgZnVuY2Agb25jZS4gUmVwZWF0IGNhbGxzXG4gKiB0byB0aGUgZnVuY3Rpb24gcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgaW52b2NhdGlvbi4gVGhlIGBmdW5jYCBpc1xuICogaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBhbmQgYXJndW1lbnRzIG9mIHRoZSBjcmVhdGVkIGZ1bmN0aW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyByZXN0cmljdGVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgaW5pdGlhbGl6ZSA9IF8ub25jZShjcmVhdGVBcHBsaWNhdGlvbik7XG4gKiBpbml0aWFsaXplKCk7XG4gKiBpbml0aWFsaXplKCk7XG4gKiAvLyA9PiBgY3JlYXRlQXBwbGljYXRpb25gIGlzIGludm9rZWQgb25jZVxuICovXG5mdW5jdGlvbiBvbmNlKGZ1bmMpIHtcbiAgcmV0dXJuIGJlZm9yZSgyLCBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvbmNlO1xuIiwidmFyIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBjcmVhdGVXcmFwID0gcmVxdWlyZSgnLi9fY3JlYXRlV3JhcCcpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlcGxhY2VIb2xkZXJzID0gcmVxdWlyZSgnLi9fcmVwbGFjZUhvbGRlcnMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9QQVJUSUFMX0ZMQUcgPSAzMjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGBwYXJ0aWFsc2AgcHJlcGVuZGVkIHRvIHRoZVxuICogYXJndW1lbnRzIGl0IHJlY2VpdmVzLiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmJpbmRgIGV4Y2VwdCBpdCBkb2VzICoqbm90KipcbiAqIGFsdGVyIHRoZSBgdGhpc2AgYmluZGluZy5cbiAqXG4gKiBUaGUgYF8ucGFydGlhbC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljXG4gKiBidWlsZHMsIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgcGFydGlhbGx5XG4gKiBhcHBsaWVkIGZ1bmN0aW9ucy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMi4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHBhcnRpYWxseSBhcHBseSBhcmd1bWVudHMgdG8uXG4gKiBAcGFyYW0gey4uLip9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhcnRpYWxseSBhcHBsaWVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBncmVldChncmVldGluZywgbmFtZSkge1xuICogICByZXR1cm4gZ3JlZXRpbmcgKyAnICcgKyBuYW1lO1xuICogfVxuICpcbiAqIHZhciBzYXlIZWxsb1RvID0gXy5wYXJ0aWFsKGdyZWV0LCAnaGVsbG8nKTtcbiAqIHNheUhlbGxvVG8oJ2ZyZWQnKTtcbiAqIC8vID0+ICdoZWxsbyBmcmVkJ1xuICpcbiAqIC8vIFBhcnRpYWxseSBhcHBsaWVkIHdpdGggcGxhY2Vob2xkZXJzLlxuICogdmFyIGdyZWV0RnJlZCA9IF8ucGFydGlhbChncmVldCwgXywgJ2ZyZWQnKTtcbiAqIGdyZWV0RnJlZCgnaGknKTtcbiAqIC8vID0+ICdoaSBmcmVkJ1xuICovXG52YXIgcGFydGlhbCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIHBhcnRpYWxzKSB7XG4gIHZhciBob2xkZXJzID0gcmVwbGFjZUhvbGRlcnMocGFydGlhbHMsIGdldEhvbGRlcihwYXJ0aWFsKSk7XG4gIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfUEFSVElBTF9GTEFHLCB1bmRlZmluZWQsIHBhcnRpYWxzLCBob2xkZXJzKTtcbn0pO1xuXG4vLyBBc3NpZ24gZGVmYXVsdCBwbGFjZWhvbGRlcnMuXG5wYXJ0aWFsLnBsYWNlaG9sZGVyID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gcGFydGlhbDtcbiIsInZhciBiYXNlUGljayA9IHJlcXVpcmUoJy4vX2Jhc2VQaWNrJyksXG4gICAgZmxhdFJlc3QgPSByZXF1aXJlKCcuL19mbGF0UmVzdCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZSBwaWNrZWQgYG9iamVjdGAgcHJvcGVydGllcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAnMicsICdjJzogMyB9O1xuICpcbiAqIF8ucGljayhvYmplY3QsIFsnYScsICdjJ10pO1xuICogLy8gPT4geyAnYSc6IDEsICdjJzogMyB9XG4gKi9cbnZhciBwaWNrID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBwYXRocykge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB7fSA6IGJhc2VQaWNrKG9iamVjdCwgcGF0aHMpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGljaztcbiIsInZhciBiYXNlUHJvcGVydHkgPSByZXF1aXJlKCcuL19iYXNlUHJvcGVydHknKSxcbiAgICBiYXNlUHJvcGVydHlEZWVwID0gcmVxdWlyZSgnLi9fYmFzZVByb3BlcnR5RGVlcCcpLFxuICAgIGlzS2V5ID0gcmVxdWlyZSgnLi9faXNLZXknKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGEgZ2l2ZW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW1xuICogICB7ICdhJzogeyAnYic6IDIgfSB9LFxuICogICB7ICdhJzogeyAnYic6IDEgfSB9XG4gKiBdO1xuICpcbiAqIF8ubWFwKG9iamVjdHMsIF8ucHJvcGVydHkoJ2EuYicpKTtcbiAqIC8vID0+IFsyLCAxXVxuICpcbiAqIF8ubWFwKF8uc29ydEJ5KG9iamVjdHMsIF8ucHJvcGVydHkoWydhJywgJ2InXSkpLCAnYS5iJyk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqL1xuZnVuY3Rpb24gcHJvcGVydHkocGF0aCkge1xuICByZXR1cm4gaXNLZXkocGF0aCkgPyBiYXNlUHJvcGVydHkodG9LZXkocGF0aCkpIDogYmFzZVByb3BlcnR5RGVlcChwYXRoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwcm9wZXJ0eTtcbiIsInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmdldGAgZXhjZXB0IHRoYXQgaWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzIGFcbiAqIGZ1bmN0aW9uIGl0J3MgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBpdHMgcGFyZW50IG9iamVjdCBhbmRcbiAqIGl0cyByZXN1bHQgaXMgcmV0dXJuZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHJlc29sdmUuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYzEnOiAzLCAnYzInOiBfLmNvbnN0YW50KDQpIH0gfV0gfTtcbiAqXG4gKiBfLnJlc3VsdChvYmplY3QsICdhWzBdLmIuYzEnKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLnJlc3VsdChvYmplY3QsICdhWzBdLmIuYzInKTtcbiAqIC8vID0+IDRcbiAqXG4gKiBfLnJlc3VsdChvYmplY3QsICdhWzBdLmIuYzMnLCAnZGVmYXVsdCcpO1xuICogLy8gPT4gJ2RlZmF1bHQnXG4gKlxuICogXy5yZXN1bHQob2JqZWN0LCAnYVswXS5iLmMzJywgXy5jb25zdGFudCgnZGVmYXVsdCcpKTtcbiAqIC8vID0+ICdkZWZhdWx0J1xuICovXG5mdW5jdGlvbiByZXN1bHQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICAvLyBFbnN1cmUgdGhlIGxvb3AgaXMgZW50ZXJlZCB3aGVuIHBhdGggaXMgZW1wdHkuXG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gMTtcbiAgICBvYmplY3QgPSB1bmRlZmluZWQ7XG4gIH1cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFt0b0tleShwYXRoW2luZGV4XSldO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbmRleCA9IGxlbmd0aDtcbiAgICAgIHZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgICBvYmplY3QgPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHZhbHVlLmNhbGwob2JqZWN0KSA6IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVzdWx0O1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheXMgPSBfLnRpbWVzKDIsIF8uc3R1YkFycmF5KTtcbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXMpO1xuICogLy8gPT4gW1tdLCBbXV1cbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXNbMF0gPT09IGFycmF5c1sxXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBzdHViQXJyYXkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViQXJyYXk7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkZhbHNlO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzU3RyaW5nID0gcmVxdWlyZSgnLi9pc1N0cmluZycpLFxuICAgIGl0ZXJhdG9yVG9BcnJheSA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9yVG9BcnJheScpLFxuICAgIG1hcFRvQXJyYXkgPSByZXF1aXJlKCcuL19tYXBUb0FycmF5JyksXG4gICAgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4vX3NldFRvQXJyYXknKSxcbiAgICBzdHJpbmdUb0FycmF5ID0gcmVxdWlyZSgnLi9fc3RyaW5nVG9BcnJheScpLFxuICAgIHZhbHVlcyA9IHJlcXVpcmUoJy4vdmFsdWVzJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltSXRlcmF0b3IgPSBTeW1ib2wgPyBTeW1ib2wuaXRlcmF0b3IgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvQXJyYXkoeyAnYSc6IDEsICdiJzogMiB9KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIF8udG9BcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ11cbiAqXG4gKiBfLnRvQXJyYXkoMSk7XG4gKiAvLyA9PiBbXVxuICpcbiAqIF8udG9BcnJheShudWxsKTtcbiAqIC8vID0+IFtdXG4gKi9cbmZ1bmN0aW9uIHRvQXJyYXkodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBpZiAoaXNBcnJheUxpa2UodmFsdWUpKSB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlKSA/IHN0cmluZ1RvQXJyYXkodmFsdWUpIDogY29weUFycmF5KHZhbHVlKTtcbiAgfVxuICBpZiAoc3ltSXRlcmF0b3IgJiYgdmFsdWVbc3ltSXRlcmF0b3JdKSB7XG4gICAgcmV0dXJuIGl0ZXJhdG9yVG9BcnJheSh2YWx1ZVtzeW1JdGVyYXRvcl0oKSk7XG4gIH1cbiAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSksXG4gICAgICBmdW5jID0gdGFnID09IG1hcFRhZyA/IG1hcFRvQXJyYXkgOiAodGFnID09IHNldFRhZyA/IHNldFRvQXJyYXkgOiB2YWx1ZXMpO1xuXG4gIHJldHVybiBmdW5jKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0FycmF5O1xuIiwidmFyIHRvTnVtYmVyID0gcmVxdWlyZSgnLi90b051bWJlcicpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwLFxuICAgIE1BWF9JTlRFR0VSID0gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIGZpbml0ZSBudW1iZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEyLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b0Zpbml0ZSgzLjIpO1xuICogLy8gPT4gMy4yXG4gKlxuICogXy50b0Zpbml0ZShOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDVlLTMyNFxuICpcbiAqIF8udG9GaW5pdGUoSW5maW5pdHkpO1xuICogLy8gPT4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhcbiAqXG4gKiBfLnRvRmluaXRlKCczLjInKTtcbiAqIC8vID0+IDMuMlxuICovXG5mdW5jdGlvbiB0b0Zpbml0ZSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiAwO1xuICB9XG4gIHZhbHVlID0gdG9OdW1iZXIodmFsdWUpO1xuICBpZiAodmFsdWUgPT09IElORklOSVRZIHx8IHZhbHVlID09PSAtSU5GSU5JVFkpIHtcbiAgICB2YXIgc2lnbiA9ICh2YWx1ZSA8IDAgPyAtMSA6IDEpO1xuICAgIHJldHVybiBzaWduICogTUFYX0lOVEVHRVI7XG4gIH1cbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/IHZhbHVlIDogMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0Zpbml0ZTtcbiIsInZhciB0b0Zpbml0ZSA9IHJlcXVpcmUoJy4vdG9GaW5pdGUnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGFuIGludGVnZXIuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9JbnRlZ2VyYF0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvaW50ZWdlcikuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgaW50ZWdlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b0ludGVnZXIoMy4yKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLnRvSW50ZWdlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDBcbiAqXG4gKiBfLnRvSW50ZWdlcihJbmZpbml0eSk7XG4gKiAvLyA9PiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFxuICpcbiAqIF8udG9JbnRlZ2VyKCczLjInKTtcbiAqIC8vID0+IDNcbiAqL1xuZnVuY3Rpb24gdG9JbnRlZ2VyKHZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSB0b0Zpbml0ZSh2YWx1ZSksXG4gICAgICByZW1haW5kZXIgPSByZXN1bHQgJSAxO1xuXG4gIHJldHVybiByZXN1bHQgPT09IHJlc3VsdCA/IChyZW1haW5kZXIgPyByZXN1bHQgLSByZW1haW5kZXIgOiByZXN1bHQpIDogMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0ludGVnZXI7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE5BTiA9IDAgLyAwO1xuXG4vKiogVXNlZCB0byBtYXRjaCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLiAqL1xudmFyIHJlVHJpbSA9IC9eXFxzK3xcXHMrJC9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmFkIHNpZ25lZCBoZXhhZGVjaW1hbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCYWRIZXggPSAvXlstK10weFswLTlhLWZdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGJpbmFyeSBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCaW5hcnkgPSAvXjBiWzAxXSskL2k7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvY3RhbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNPY3RhbCA9IC9eMG9bMC03XSskL2k7XG5cbi8qKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB3aXRob3V0IGEgZGVwZW5kZW5jeSBvbiBgcm9vdGAuICovXG52YXIgZnJlZVBhcnNlSW50ID0gcGFyc2VJbnQ7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIG51bWJlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b051bWJlcigzLjIpO1xuICogLy8gPT4gMy4yXG4gKlxuICogXy50b051bWJlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDVlLTMyNFxuICpcbiAqIF8udG9OdW1iZXIoSW5maW5pdHkpO1xuICogLy8gPT4gSW5maW5pdHlcbiAqXG4gKiBfLnRvTnVtYmVyKCczLjInKTtcbiAqIC8vID0+IDMuMlxuICovXG5mdW5jdGlvbiB0b051bWJlcih2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gTkFOO1xuICB9XG4gIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICB2YXIgb3RoZXIgPSB0eXBlb2YgdmFsdWUudmFsdWVPZiA9PSAnZnVuY3Rpb24nID8gdmFsdWUudmFsdWVPZigpIDogdmFsdWU7XG4gICAgdmFsdWUgPSBpc09iamVjdChvdGhlcikgPyAob3RoZXIgKyAnJykgOiBvdGhlcjtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiArdmFsdWU7XG4gIH1cbiAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHJlVHJpbSwgJycpO1xuICB2YXIgaXNCaW5hcnkgPSByZUlzQmluYXJ5LnRlc3QodmFsdWUpO1xuICByZXR1cm4gKGlzQmluYXJ5IHx8IHJlSXNPY3RhbC50ZXN0KHZhbHVlKSlcbiAgICA/IGZyZWVQYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgaXNCaW5hcnkgPyAyIDogOClcbiAgICA6IChyZUlzQmFkSGV4LnRlc3QodmFsdWUpID8gTkFOIDogK3ZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b051bWJlcjtcbiIsInZhciBiYXNlVG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlVG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU3RyaW5nO1xuIiwidmFyIGJhc2VGbGF0dGVuID0gcmVxdWlyZSgnLi9fYmFzZUZsYXR0ZW4nKSxcbiAgICBiYXNlUmVzdCA9IHJlcXVpcmUoJy4vX2Jhc2VSZXN0JyksXG4gICAgYmFzZVVuaXEgPSByZXF1aXJlKCcuL19iYXNlVW5pcScpLFxuICAgIGlzQXJyYXlMaWtlT2JqZWN0ID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZU9iamVjdCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcywgaW4gb3JkZXIsIGZyb20gYWxsIGdpdmVuIGFycmF5cyB1c2luZ1xuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbWJpbmVkIHZhbHVlcy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy51bmlvbihbMl0sIFsxLCAyXSk7XG4gKiAvLyA9PiBbMiwgMV1cbiAqL1xudmFyIHVuaW9uID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gIHJldHVybiBiYXNlVW5pcShiYXNlRmxhdHRlbihhcnJheXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmlvbjtcbiIsInZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqIFVzZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIElEcy4gKi9cbnZhciBpZENvdW50ZXIgPSAwO1xuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHVuaXF1ZSBJRC4gSWYgYHByZWZpeGAgaXMgZ2l2ZW4sIHRoZSBJRCBpcyBhcHBlbmRlZCB0byBpdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtzdHJpbmd9IFtwcmVmaXg9JyddIFRoZSB2YWx1ZSB0byBwcmVmaXggdGhlIElEIHdpdGguXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB1bmlxdWUgSUQuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udW5pcXVlSWQoJ2NvbnRhY3RfJyk7XG4gKiAvLyA9PiAnY29udGFjdF8xMDQnXG4gKlxuICogXy51bmlxdWVJZCgpO1xuICogLy8gPT4gJzEwNSdcbiAqL1xuZnVuY3Rpb24gdW5pcXVlSWQocHJlZml4KSB7XG4gIHZhciBpZCA9ICsraWRDb3VudGVyO1xuICByZXR1cm4gdG9TdHJpbmcocHJlZml4KSArIGlkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHVuaXF1ZUlkO1xuIiwidmFyIGJhc2VWYWx1ZXMgPSByZXF1aXJlKCcuL19iYXNlVmFsdWVzJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8udmFsdWVzKG5ldyBGb28pO1xuICogLy8gPT4gWzEsIDJdIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKlxuICogXy52YWx1ZXMoJ2hpJyk7XG4gKiAvLyA9PiBbJ2gnLCAnaSddXG4gKi9cbmZ1bmN0aW9uIHZhbHVlcyhvYmplY3QpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gW10gOiBiYXNlVmFsdWVzKG9iamVjdCwga2V5cyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2YWx1ZXM7XG4iLCJ2YXIgTGF6eVdyYXBwZXIgPSByZXF1aXJlKCcuL19MYXp5V3JhcHBlcicpLFxuICAgIExvZGFzaFdyYXBwZXIgPSByZXF1aXJlKCcuL19Mb2Rhc2hXcmFwcGVyJyksXG4gICAgYmFzZUxvZGFzaCA9IHJlcXVpcmUoJy4vX2Jhc2VMb2Rhc2gnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKSxcbiAgICB3cmFwcGVyQ2xvbmUgPSByZXF1aXJlKCcuL193cmFwcGVyQ2xvbmUnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgYGxvZGFzaGAgb2JqZWN0IHdoaWNoIHdyYXBzIGB2YWx1ZWAgdG8gZW5hYmxlIGltcGxpY2l0IG1ldGhvZFxuICogY2hhaW4gc2VxdWVuY2VzLiBNZXRob2RzIHRoYXQgb3BlcmF0ZSBvbiBhbmQgcmV0dXJuIGFycmF5cywgY29sbGVjdGlvbnMsXG4gKiBhbmQgZnVuY3Rpb25zIGNhbiBiZSBjaGFpbmVkIHRvZ2V0aGVyLiBNZXRob2RzIHRoYXQgcmV0cmlldmUgYSBzaW5nbGUgdmFsdWVcbiAqIG9yIG1heSByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IGVuZCB0aGUgY2hhaW4gc2VxdWVuY2VcbiAqIGFuZCByZXR1cm4gdGhlIHVud3JhcHBlZCB2YWx1ZS4gT3RoZXJ3aXNlLCB0aGUgdmFsdWUgbXVzdCBiZSB1bndyYXBwZWRcbiAqIHdpdGggYF8jdmFsdWVgLlxuICpcbiAqIEV4cGxpY2l0IGNoYWluIHNlcXVlbmNlcywgd2hpY2ggbXVzdCBiZSB1bndyYXBwZWQgd2l0aCBgXyN2YWx1ZWAsIG1heSBiZVxuICogZW5hYmxlZCB1c2luZyBgXy5jaGFpbmAuXG4gKlxuICogVGhlIGV4ZWN1dGlvbiBvZiBjaGFpbmVkIG1ldGhvZHMgaXMgbGF6eSwgdGhhdCBpcywgaXQncyBkZWZlcnJlZCB1bnRpbFxuICogYF8jdmFsdWVgIGlzIGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBjYWxsZWQuXG4gKlxuICogTGF6eSBldmFsdWF0aW9uIGFsbG93cyBzZXZlcmFsIG1ldGhvZHMgdG8gc3VwcG9ydCBzaG9ydGN1dCBmdXNpb24uXG4gKiBTaG9ydGN1dCBmdXNpb24gaXMgYW4gb3B0aW1pemF0aW9uIHRvIG1lcmdlIGl0ZXJhdGVlIGNhbGxzOyB0aGlzIGF2b2lkc1xuICogdGhlIGNyZWF0aW9uIG9mIGludGVybWVkaWF0ZSBhcnJheXMgYW5kIGNhbiBncmVhdGx5IHJlZHVjZSB0aGUgbnVtYmVyIG9mXG4gKiBpdGVyYXRlZSBleGVjdXRpb25zLiBTZWN0aW9ucyBvZiBhIGNoYWluIHNlcXVlbmNlIHF1YWxpZnkgZm9yIHNob3J0Y3V0XG4gKiBmdXNpb24gaWYgdGhlIHNlY3Rpb24gaXMgYXBwbGllZCB0byBhbiBhcnJheSBhbmQgaXRlcmF0ZWVzIGFjY2VwdCBvbmx5XG4gKiBvbmUgYXJndW1lbnQuIFRoZSBoZXVyaXN0aWMgZm9yIHdoZXRoZXIgYSBzZWN0aW9uIHF1YWxpZmllcyBmb3Igc2hvcnRjdXRcbiAqIGZ1c2lvbiBpcyBzdWJqZWN0IHRvIGNoYW5nZS5cbiAqXG4gKiBDaGFpbmluZyBpcyBzdXBwb3J0ZWQgaW4gY3VzdG9tIGJ1aWxkcyBhcyBsb25nIGFzIHRoZSBgXyN2YWx1ZWAgbWV0aG9kIGlzXG4gKiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluY2x1ZGVkIGluIHRoZSBidWlsZC5cbiAqXG4gKiBJbiBhZGRpdGlvbiB0byBsb2Rhc2ggbWV0aG9kcywgd3JhcHBlcnMgaGF2ZSBgQXJyYXlgIGFuZCBgU3RyaW5nYCBtZXRob2RzLlxuICpcbiAqIFRoZSB3cmFwcGVyIGBBcnJheWAgbWV0aG9kcyBhcmU6XG4gKiBgY29uY2F0YCwgYGpvaW5gLCBgcG9wYCwgYHB1c2hgLCBgc2hpZnRgLCBgc29ydGAsIGBzcGxpY2VgLCBhbmQgYHVuc2hpZnRgXG4gKlxuICogVGhlIHdyYXBwZXIgYFN0cmluZ2AgbWV0aG9kcyBhcmU6XG4gKiBgcmVwbGFjZWAgYW5kIGBzcGxpdGBcbiAqXG4gKiBUaGUgd3JhcHBlciBtZXRob2RzIHRoYXQgc3VwcG9ydCBzaG9ydGN1dCBmdXNpb24gYXJlOlxuICogYGF0YCwgYGNvbXBhY3RgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLCBgZHJvcFdoaWxlYCwgYGZpbHRlcmAsIGBmaW5kYCxcbiAqIGBmaW5kTGFzdGAsIGBoZWFkYCwgYGluaXRpYWxgLCBgbGFzdGAsIGBtYXBgLCBgcmVqZWN0YCwgYHJldmVyc2VgLCBgc2xpY2VgLFxuICogYHRhaWxgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLCBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYW5kIGB0b0FycmF5YFxuICpcbiAqIFRoZSBjaGFpbmFibGUgd3JhcHBlciBtZXRob2RzIGFyZTpcbiAqIGBhZnRlcmAsIGBhcnlgLCBgYXNzaWduYCwgYGFzc2lnbkluYCwgYGFzc2lnbkluV2l0aGAsIGBhc3NpZ25XaXRoYCwgYGF0YCxcbiAqIGBiZWZvcmVgLCBgYmluZGAsIGBiaW5kQWxsYCwgYGJpbmRLZXlgLCBgY2FzdEFycmF5YCwgYGNoYWluYCwgYGNodW5rYCxcbiAqIGBjb21taXRgLCBgY29tcGFjdGAsIGBjb25jYXRgLCBgY29uZm9ybXNgLCBgY29uc3RhbnRgLCBgY291bnRCeWAsIGBjcmVhdGVgLFxuICogYGN1cnJ5YCwgYGRlYm91bmNlYCwgYGRlZmF1bHRzYCwgYGRlZmF1bHRzRGVlcGAsIGBkZWZlcmAsIGBkZWxheWAsXG4gKiBgZGlmZmVyZW5jZWAsIGBkaWZmZXJlbmNlQnlgLCBgZGlmZmVyZW5jZVdpdGhgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLFxuICogYGRyb3BSaWdodFdoaWxlYCwgYGRyb3BXaGlsZWAsIGBleHRlbmRgLCBgZXh0ZW5kV2l0aGAsIGBmaWxsYCwgYGZpbHRlcmAsXG4gKiBgZmxhdE1hcGAsIGBmbGF0TWFwRGVlcGAsIGBmbGF0TWFwRGVwdGhgLCBgZmxhdHRlbmAsIGBmbGF0dGVuRGVlcGAsXG4gKiBgZmxhdHRlbkRlcHRoYCwgYGZsaXBgLCBgZmxvd2AsIGBmbG93UmlnaHRgLCBgZnJvbVBhaXJzYCwgYGZ1bmN0aW9uc2AsXG4gKiBgZnVuY3Rpb25zSW5gLCBgZ3JvdXBCeWAsIGBpbml0aWFsYCwgYGludGVyc2VjdGlvbmAsIGBpbnRlcnNlY3Rpb25CeWAsXG4gKiBgaW50ZXJzZWN0aW9uV2l0aGAsIGBpbnZlcnRgLCBgaW52ZXJ0QnlgLCBgaW52b2tlTWFwYCwgYGl0ZXJhdGVlYCwgYGtleUJ5YCxcbiAqIGBrZXlzYCwgYGtleXNJbmAsIGBtYXBgLCBgbWFwS2V5c2AsIGBtYXBWYWx1ZXNgLCBgbWF0Y2hlc2AsIGBtYXRjaGVzUHJvcGVydHlgLFxuICogYG1lbW9pemVgLCBgbWVyZ2VgLCBgbWVyZ2VXaXRoYCwgYG1ldGhvZGAsIGBtZXRob2RPZmAsIGBtaXhpbmAsIGBuZWdhdGVgLFxuICogYG50aEFyZ2AsIGBvbWl0YCwgYG9taXRCeWAsIGBvbmNlYCwgYG9yZGVyQnlgLCBgb3ZlcmAsIGBvdmVyQXJnc2AsXG4gKiBgb3ZlckV2ZXJ5YCwgYG92ZXJTb21lYCwgYHBhcnRpYWxgLCBgcGFydGlhbFJpZ2h0YCwgYHBhcnRpdGlvbmAsIGBwaWNrYCxcbiAqIGBwaWNrQnlgLCBgcGxhbnRgLCBgcHJvcGVydHlgLCBgcHJvcGVydHlPZmAsIGBwdWxsYCwgYHB1bGxBbGxgLCBgcHVsbEFsbEJ5YCxcbiAqIGBwdWxsQWxsV2l0aGAsIGBwdWxsQXRgLCBgcHVzaGAsIGByYW5nZWAsIGByYW5nZVJpZ2h0YCwgYHJlYXJnYCwgYHJlamVjdGAsXG4gKiBgcmVtb3ZlYCwgYHJlc3RgLCBgcmV2ZXJzZWAsIGBzYW1wbGVTaXplYCwgYHNldGAsIGBzZXRXaXRoYCwgYHNodWZmbGVgLFxuICogYHNsaWNlYCwgYHNvcnRgLCBgc29ydEJ5YCwgYHNwbGljZWAsIGBzcHJlYWRgLCBgdGFpbGAsIGB0YWtlYCwgYHRha2VSaWdodGAsXG4gKiBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYHRhcGAsIGB0aHJvdHRsZWAsIGB0aHJ1YCwgYHRvQXJyYXlgLFxuICogYHRvUGFpcnNgLCBgdG9QYWlyc0luYCwgYHRvUGF0aGAsIGB0b1BsYWluT2JqZWN0YCwgYHRyYW5zZm9ybWAsIGB1bmFyeWAsXG4gKiBgdW5pb25gLCBgdW5pb25CeWAsIGB1bmlvbldpdGhgLCBgdW5pcWAsIGB1bmlxQnlgLCBgdW5pcVdpdGhgLCBgdW5zZXRgLFxuICogYHVuc2hpZnRgLCBgdW56aXBgLCBgdW56aXBXaXRoYCwgYHVwZGF0ZWAsIGB1cGRhdGVXaXRoYCwgYHZhbHVlc2AsXG4gKiBgdmFsdWVzSW5gLCBgd2l0aG91dGAsIGB3cmFwYCwgYHhvcmAsIGB4b3JCeWAsIGB4b3JXaXRoYCwgYHppcGAsXG4gKiBgemlwT2JqZWN0YCwgYHppcE9iamVjdERlZXBgLCBhbmQgYHppcFdpdGhgXG4gKlxuICogVGhlIHdyYXBwZXIgbWV0aG9kcyB0aGF0IGFyZSAqKm5vdCoqIGNoYWluYWJsZSBieSBkZWZhdWx0IGFyZTpcbiAqIGBhZGRgLCBgYXR0ZW1wdGAsIGBjYW1lbENhc2VgLCBgY2FwaXRhbGl6ZWAsIGBjZWlsYCwgYGNsYW1wYCwgYGNsb25lYCxcbiAqIGBjbG9uZURlZXBgLCBgY2xvbmVEZWVwV2l0aGAsIGBjbG9uZVdpdGhgLCBgY29uZm9ybXNUb2AsIGBkZWJ1cnJgLFxuICogYGRlZmF1bHRUb2AsIGBkaXZpZGVgLCBgZWFjaGAsIGBlYWNoUmlnaHRgLCBgZW5kc1dpdGhgLCBgZXFgLCBgZXNjYXBlYCxcbiAqIGBlc2NhcGVSZWdFeHBgLCBgZXZlcnlgLCBgZmluZGAsIGBmaW5kSW5kZXhgLCBgZmluZEtleWAsIGBmaW5kTGFzdGAsXG4gKiBgZmluZExhc3RJbmRleGAsIGBmaW5kTGFzdEtleWAsIGBmaXJzdGAsIGBmbG9vcmAsIGBmb3JFYWNoYCwgYGZvckVhY2hSaWdodGAsXG4gKiBgZm9ySW5gLCBgZm9ySW5SaWdodGAsIGBmb3JPd25gLCBgZm9yT3duUmlnaHRgLCBgZ2V0YCwgYGd0YCwgYGd0ZWAsIGBoYXNgLFxuICogYGhhc0luYCwgYGhlYWRgLCBgaWRlbnRpdHlgLCBgaW5jbHVkZXNgLCBgaW5kZXhPZmAsIGBpblJhbmdlYCwgYGludm9rZWAsXG4gKiBgaXNBcmd1bWVudHNgLCBgaXNBcnJheWAsIGBpc0FycmF5QnVmZmVyYCwgYGlzQXJyYXlMaWtlYCwgYGlzQXJyYXlMaWtlT2JqZWN0YCxcbiAqIGBpc0Jvb2xlYW5gLCBgaXNCdWZmZXJgLCBgaXNEYXRlYCwgYGlzRWxlbWVudGAsIGBpc0VtcHR5YCwgYGlzRXF1YWxgLFxuICogYGlzRXF1YWxXaXRoYCwgYGlzRXJyb3JgLCBgaXNGaW5pdGVgLCBgaXNGdW5jdGlvbmAsIGBpc0ludGVnZXJgLCBgaXNMZW5ndGhgLFxuICogYGlzTWFwYCwgYGlzTWF0Y2hgLCBgaXNNYXRjaFdpdGhgLCBgaXNOYU5gLCBgaXNOYXRpdmVgLCBgaXNOaWxgLCBgaXNOdWxsYCxcbiAqIGBpc051bWJlcmAsIGBpc09iamVjdGAsIGBpc09iamVjdExpa2VgLCBgaXNQbGFpbk9iamVjdGAsIGBpc1JlZ0V4cGAsXG4gKiBgaXNTYWZlSW50ZWdlcmAsIGBpc1NldGAsIGBpc1N0cmluZ2AsIGBpc1VuZGVmaW5lZGAsIGBpc1R5cGVkQXJyYXlgLFxuICogYGlzV2Vha01hcGAsIGBpc1dlYWtTZXRgLCBgam9pbmAsIGBrZWJhYkNhc2VgLCBgbGFzdGAsIGBsYXN0SW5kZXhPZmAsXG4gKiBgbG93ZXJDYXNlYCwgYGxvd2VyRmlyc3RgLCBgbHRgLCBgbHRlYCwgYG1heGAsIGBtYXhCeWAsIGBtZWFuYCwgYG1lYW5CeWAsXG4gKiBgbWluYCwgYG1pbkJ5YCwgYG11bHRpcGx5YCwgYG5vQ29uZmxpY3RgLCBgbm9vcGAsIGBub3dgLCBgbnRoYCwgYHBhZGAsXG4gKiBgcGFkRW5kYCwgYHBhZFN0YXJ0YCwgYHBhcnNlSW50YCwgYHBvcGAsIGByYW5kb21gLCBgcmVkdWNlYCwgYHJlZHVjZVJpZ2h0YCxcbiAqIGByZXBlYXRgLCBgcmVzdWx0YCwgYHJvdW5kYCwgYHJ1bkluQ29udGV4dGAsIGBzYW1wbGVgLCBgc2hpZnRgLCBgc2l6ZWAsXG4gKiBgc25ha2VDYXNlYCwgYHNvbWVgLCBgc29ydGVkSW5kZXhgLCBgc29ydGVkSW5kZXhCeWAsIGBzb3J0ZWRMYXN0SW5kZXhgLFxuICogYHNvcnRlZExhc3RJbmRleEJ5YCwgYHN0YXJ0Q2FzZWAsIGBzdGFydHNXaXRoYCwgYHN0dWJBcnJheWAsIGBzdHViRmFsc2VgLFxuICogYHN0dWJPYmplY3RgLCBgc3R1YlN0cmluZ2AsIGBzdHViVHJ1ZWAsIGBzdWJ0cmFjdGAsIGBzdW1gLCBgc3VtQnlgLFxuICogYHRlbXBsYXRlYCwgYHRpbWVzYCwgYHRvRmluaXRlYCwgYHRvSW50ZWdlcmAsIGB0b0pTT05gLCBgdG9MZW5ndGhgLFxuICogYHRvTG93ZXJgLCBgdG9OdW1iZXJgLCBgdG9TYWZlSW50ZWdlcmAsIGB0b1N0cmluZ2AsIGB0b1VwcGVyYCwgYHRyaW1gLFxuICogYHRyaW1FbmRgLCBgdHJpbVN0YXJ0YCwgYHRydW5jYXRlYCwgYHVuZXNjYXBlYCwgYHVuaXF1ZUlkYCwgYHVwcGVyQ2FzZWAsXG4gKiBgdXBwZXJGaXJzdGAsIGB2YWx1ZWAsIGFuZCBgd29yZHNgXG4gKlxuICogQG5hbWUgX1xuICogQGNvbnN0cnVjdG9yXG4gKiBAY2F0ZWdvcnkgU2VxXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwIGluIGEgYGxvZGFzaGAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAqICAgcmV0dXJuIG4gKiBuO1xuICogfVxuICpcbiAqIHZhciB3cmFwcGVkID0gXyhbMSwgMiwgM10pO1xuICpcbiAqIC8vIFJldHVybnMgYW4gdW53cmFwcGVkIHZhbHVlLlxuICogd3JhcHBlZC5yZWR1Y2UoXy5hZGQpO1xuICogLy8gPT4gNlxuICpcbiAqIC8vIFJldHVybnMgYSB3cmFwcGVkIHZhbHVlLlxuICogdmFyIHNxdWFyZXMgPSB3cmFwcGVkLm1hcChzcXVhcmUpO1xuICpcbiAqIF8uaXNBcnJheShzcXVhcmVzKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KHNxdWFyZXMudmFsdWUoKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGxvZGFzaCh2YWx1ZSkge1xuICBpZiAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNBcnJheSh2YWx1ZSkgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIExvZGFzaFdyYXBwZXIpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdfX3dyYXBwZWRfXycpKSB7XG4gICAgICByZXR1cm4gd3JhcHBlckNsb25lKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHZhbHVlKTtcbn1cblxuLy8gRW5zdXJlIHdyYXBwZXJzIGFyZSBpbnN0YW5jZXMgb2YgYGJhc2VMb2Rhc2hgLlxubG9kYXNoLnByb3RvdHlwZSA9IGJhc2VMb2Rhc2gucHJvdG90eXBlO1xubG9kYXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGxvZGFzaDtcblxubW9kdWxlLmV4cG9ydHMgPSBsb2Rhc2g7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBwcm90byA9IHR5cGVvZiBFbGVtZW50ICE9PSAndW5kZWZpbmVkJyA/IEVsZW1lbnQucHJvdG90eXBlIDoge307XG52YXIgdmVuZG9yID0gcHJvdG8ubWF0Y2hlc1xuICB8fCBwcm90by5tYXRjaGVzU2VsZWN0b3JcbiAgfHwgcHJvdG8ud2Via2l0TWF0Y2hlc1NlbGVjdG9yXG4gIHx8IHByb3RvLm1vek1hdGNoZXNTZWxlY3RvclxuICB8fCBwcm90by5tc01hdGNoZXNTZWxlY3RvclxuICB8fCBwcm90by5vTWF0Y2hlc1NlbGVjdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1hdGNoO1xuXG4vKipcbiAqIE1hdGNoIGBlbGAgdG8gYHNlbGVjdG9yYC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3JcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIG1hdGNoKGVsLCBzZWxlY3Rvcikge1xuICBpZiAoIWVsIHx8IGVsLm5vZGVUeXBlICE9PSAxKSByZXR1cm4gZmFsc2U7XG4gIGlmICh2ZW5kb3IpIHJldHVybiB2ZW5kb3IuY2FsbChlbCwgc2VsZWN0b3IpO1xuICB2YXIgbm9kZXMgPSBlbC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG5vZGVzW2ldID09IGVsKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4iLCIvKipcbiAqIG1lZGlhLXR5cGVcbiAqIEBhdXRob3IgTG92ZWxsIEZ1bGxlclxuICpcbiAqIFRoaXMgY29kZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIHRoZSB0ZXJtcyBvZlxuICogd2hpY2ggbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMC5odG1sXG4gKi9cblxudmFyIE1lZGlhVHlwZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnR5cGUgPSBudWxsO1xuICB0aGlzLl9zZXRTdWJ0eXBlQW5kU3VmZml4KG51bGwpO1xuICB0aGlzLnBhcmFtZXRlcnMgPSB7fTtcbn07XG5cbk1lZGlhVHlwZS5wcm90b3R5cGUuaXNWYWxpZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy50eXBlICE9PSBudWxsICYmIHRoaXMuc3VidHlwZSAhPT0gbnVsbCAmJiB0aGlzLnN1YnR5cGUgIT09IFwiZXhhbXBsZVwiO1xufTtcblxuTWVkaWFUeXBlLnByb3RvdHlwZS5fc2V0U3VidHlwZUFuZFN1ZmZpeCA9IGZ1bmN0aW9uKHN1YnR5cGUpIHtcbiAgdGhpcy5zdWJ0eXBlID0gc3VidHlwZTtcbiAgdGhpcy5zdWJ0eXBlRmFjZXRzID0gW107XG4gIHRoaXMuc3VmZml4ID0gbnVsbDtcbiAgaWYgKHN1YnR5cGUpIHtcbiAgICBpZiAoc3VidHlwZS5pbmRleE9mKFwiK1wiKSA+IC0xICYmIHN1YnR5cGUuc3Vic3RyKC0xKSAhPT0gXCIrXCIpIHtcbiAgICAgIHZhciBmaXhlcyA9IHN1YnR5cGUuc3BsaXQoXCIrXCIsIDIpO1xuICAgICAgdGhpcy5zdWJ0eXBlID0gZml4ZXNbMF07XG4gICAgICB0aGlzLnN1YnR5cGVGYWNldHMgPSBmaXhlc1swXS5zcGxpdChcIi5cIik7XG4gICAgICB0aGlzLnN1ZmZpeCA9IGZpeGVzWzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN1YnR5cGVGYWNldHMgPSBzdWJ0eXBlLnNwbGl0KFwiLlwiKTtcbiAgICB9XG4gIH1cbn07XG5cbk1lZGlhVHlwZS5wcm90b3R5cGUuaGFzU3VmZml4ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAhIXRoaXMuc3VmZml4O1xufTtcblxuTWVkaWFUeXBlLnByb3RvdHlwZS5fZmlyc3RTdWJ0eXBlRmFjZXRFcXVhbHMgPSBmdW5jdGlvbihzdHIpIHtcbiAgcmV0dXJuIHRoaXMuc3VidHlwZUZhY2V0cy5sZW5ndGggPiAwICYmIHRoaXMuc3VidHlwZUZhY2V0c1swXSA9PT0gc3RyO1xufTtcblxuTWVkaWFUeXBlLnByb3RvdHlwZS5pc1ZlbmRvciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fZmlyc3RTdWJ0eXBlRmFjZXRFcXVhbHMoXCJ2bmRcIik7XG59O1xuXG5NZWRpYVR5cGUucHJvdG90eXBlLmlzUGVyc29uYWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX2ZpcnN0U3VidHlwZUZhY2V0RXF1YWxzKFwicHJzXCIpO1xufTtcblxuTWVkaWFUeXBlLnByb3RvdHlwZS5pc0V4cGVyaW1lbnRhbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fZmlyc3RTdWJ0eXBlRmFjZXRFcXVhbHMoXCJ4XCIpIHx8IHRoaXMuc3VidHlwZS5zdWJzdHJpbmcoMCwgMikudG9Mb3dlckNhc2UoKSA9PT0gXCJ4LVwiO1xufTtcblxuTWVkaWFUeXBlLnByb3RvdHlwZS5hc1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgc3RyID0gXCJcIjtcbiAgaWYgKHRoaXMuaXNWYWxpZCgpKSB7XG4gICAgc3RyID0gc3RyICsgdGhpcy50eXBlICsgXCIvXCIgKyB0aGlzLnN1YnR5cGU7XG4gICAgaWYgKHRoaXMuaGFzU3VmZml4KCkpIHtcbiAgICAgIHN0ciA9IHN0ciArIFwiK1wiICsgdGhpcy5zdWZmaXg7XG4gICAgfVxuICAgIHZhciBwYXJhbWV0ZXJLZXlzID0gT2JqZWN0LmtleXModGhpcy5wYXJhbWV0ZXJzKTtcbiAgICBpZiAocGFyYW1ldGVyS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgcGFyYW1ldGVycyA9IFtdO1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgcGFyYW1ldGVyS2V5cy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGEubG9jYWxlQ29tcGFyZShiKTtcbiAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICBwYXJhbWV0ZXJzLnB1c2goZWxlbWVudCArIFwiPVwiICsgd3JhcFF1b3Rlcyh0aGF0LnBhcmFtZXRlcnNbZWxlbWVudF0pKTtcbiAgICAgIH0pO1xuICAgICAgc3RyID0gc3RyICsgXCI7XCIgKyBwYXJhbWV0ZXJzLmpvaW4oXCI7XCIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyO1xufTtcblxudmFyIHdyYXBRdW90ZXMgPSBmdW5jdGlvbihzdHIpIHtcbiAgcmV0dXJuIChzdHIuaW5kZXhPZihcIjtcIikgPiAtMSkgPyAnXCInICsgc3RyICsgJ1wiJyA6IHN0cjtcbn07XG5cbnZhciB1bndyYXBRdW90ZXMgPSBmdW5jdGlvbihzdHIpIHtcbiAgcmV0dXJuIChzdHIuc3Vic3RyKDAsIDEpID09PSAnXCInICYmIHN0ci5zdWJzdHIoLTEpID09PSAnXCInKSA/IHN0ci5zdWJzdHIoMSwgc3RyLmxlbmd0aCAtIDIpIDogc3RyO1xufTtcblxudmFyIG1lZGlhVHlwZU1hdGNoZXIgPSAvXihhcHBsaWNhdGlvbnxhdWRpb3xpbWFnZXxtZXNzYWdlfG1vZGVsfG11bHRpcGFydHx0ZXh0fHZpZGVvfFxcKilcXC8oW2EtekEtWjAtOSEjJCVeJlxcKl9cXC1cXCt7fVxcfCcuYH5dezEsMTI3fSkoOy4qKT8kLztcblxudmFyIHBhcmFtZXRlclNwbGl0dGVyID0gLzsoPz0oPzpbXlxcXCJdKlxcXCJbXlxcXCJdKlxcXCIpKig/IVteXFxcIl0qXFxcIikpLztcblxuZXhwb3J0cy5mcm9tU3RyaW5nID0gZnVuY3Rpb24oc3RyKSB7XG4gIHZhciBtZWRpYVR5cGUgPSBuZXcgTWVkaWFUeXBlKCk7XG4gIGlmIChzdHIpIHtcbiAgICB2YXIgbWF0Y2ggPSBzdHIubWF0Y2gobWVkaWFUeXBlTWF0Y2hlcik7XG4gICAgaWYgKG1hdGNoICYmICEobWF0Y2hbMV0gPT09ICcqJyAmJiBtYXRjaFsyXSAhPT0gJyonKSkgeyBcbiAgICAgIG1lZGlhVHlwZS50eXBlID0gbWF0Y2hbMV07XG4gICAgICBtZWRpYVR5cGUuX3NldFN1YnR5cGVBbmRTdWZmaXgobWF0Y2hbMl0pO1xuICAgICAgaWYgKG1hdGNoWzNdKSB7XG4gICAgICAgIG1hdGNoWzNdLnN1YnN0cigxKS5zcGxpdChwYXJhbWV0ZXJTcGxpdHRlcikuZm9yRWFjaChmdW5jdGlvbihwYXJhbWV0ZXIpIHtcbiAgICAgICAgICB2YXIga2V5QW5kVmFsdWUgPSBwYXJhbWV0ZXIuc3BsaXQoJz0nLCAyKTtcbiAgICAgICAgICBpZiAoa2V5QW5kVmFsdWUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBtZWRpYVR5cGUucGFyYW1ldGVyc1trZXlBbmRWYWx1ZVswXS50b0xvd2VyQ2FzZSgpLnRyaW0oKV0gPSB1bndyYXBRdW90ZXMoa2V5QW5kVmFsdWVbMV0udHJpbSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbWVkaWFUeXBlO1xufTtcbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgaXNBcmdzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpO1xuXG52YXIgb3JpZ0tleXMgPSBPYmplY3Qua2V5cztcbnZhciBrZXlzU2hpbSA9IG9yaWdLZXlzID8gZnVuY3Rpb24ga2V5cyhvKSB7IHJldHVybiBvcmlnS2V5cyhvKTsgfSA6IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxudmFyIG9yaWdpbmFsS2V5cyA9IE9iamVjdC5rZXlzO1xuXG5rZXlzU2hpbS5zaGltID0gZnVuY3Rpb24gc2hpbU9iamVjdEtleXMoKSB7XG5cdGlmIChPYmplY3Qua2V5cykge1xuXHRcdHZhciBrZXlzV29ya3NXaXRoQXJndW1lbnRzID0gKGZ1bmN0aW9uICgpIHtcblx0XHRcdC8vIFNhZmFyaSA1LjAgYnVnXG5cdFx0XHR2YXIgYXJncyA9IE9iamVjdC5rZXlzKGFyZ3VtZW50cyk7XG5cdFx0XHRyZXR1cm4gYXJncyAmJiBhcmdzLmxlbmd0aCA9PT0gYXJndW1lbnRzLmxlbmd0aDtcblx0XHR9KDEsIDIpKTtcblx0XHRpZiAoIWtleXNXb3Jrc1dpdGhBcmd1bWVudHMpIHtcblx0XHRcdE9iamVjdC5rZXlzID0gZnVuY3Rpb24ga2V5cyhvYmplY3QpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBmdW5jLW5hbWUtbWF0Y2hpbmdcblx0XHRcdFx0aWYgKGlzQXJncyhvYmplY3QpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9yaWdpbmFsS2V5cyhzbGljZS5jYWxsKG9iamVjdCkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMob2JqZWN0KTtcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdE9iamVjdC5rZXlzID0ga2V5c1NoaW07XG5cdH1cblx0cmV0dXJuIE9iamVjdC5rZXlzIHx8IGtleXNTaGltO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzU2hpbTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0FyZ3VtZW50cyh2YWx1ZSkge1xuXHR2YXIgc3RyID0gdG9TdHIuY2FsbCh2YWx1ZSk7XG5cdHZhciBpc0FyZ3MgPSBzdHIgPT09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXHRpZiAoIWlzQXJncykge1xuXHRcdGlzQXJncyA9IHN0ciAhPT0gJ1tvYmplY3QgQXJyYXldJyAmJlxuXHRcdFx0dmFsdWUgIT09IG51bGwgJiZcblx0XHRcdHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcblx0XHRcdHR5cGVvZiB2YWx1ZS5sZW5ndGggPT09ICdudW1iZXInICYmXG5cdFx0XHR2YWx1ZS5sZW5ndGggPj0gMCAmJlxuXHRcdFx0dG9TdHIuY2FsbCh2YWx1ZS5jYWxsZWUpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHR9XG5cdHJldHVybiBpc0FyZ3M7XG59O1xuIiwidmFyIHRyaW0gPSByZXF1aXJlKCdzdHJpbmcucHJvdG90eXBlLnRyaW0nKVxuICAsIGZvckVhY2ggPSByZXF1aXJlKCdmb3ItZWFjaCcpXG4gICwgaXNBcnJheSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGVhZGVycykge1xuICBpZiAoIWhlYWRlcnMpXG4gICAgcmV0dXJuIHt9XG5cbiAgdmFyIHJlc3VsdCA9IHt9XG5cbiAgZm9yRWFjaChcbiAgICAgIHRyaW0oaGVhZGVycykuc3BsaXQoJ1xcbicpXG4gICAgLCBmdW5jdGlvbiAocm93KSB7XG4gICAgICAgIHZhciBpbmRleCA9IHJvdy5pbmRleE9mKCc6JylcbiAgICAgICAgICAsIGtleSA9IHRyaW0ocm93LnNsaWNlKDAsIGluZGV4KSkudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICwgdmFsdWUgPSB0cmltKHJvdy5zbGljZShpbmRleCArIDEpKVxuXG4gICAgICAgIGlmICh0eXBlb2YocmVzdWx0W2tleV0pID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWVcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KHJlc3VsdFtrZXldKSkge1xuICAgICAgICAgIHJlc3VsdFtrZXldLnB1c2godmFsdWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBbIHJlc3VsdFtrZXldLCB2YWx1ZSBdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgKVxuXG4gIHJldHVybiByZXN1bHRcbn1cbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLyoqIVxuICogQGZpbGVPdmVydmlldyBLaWNrYXNzIGxpYnJhcnkgdG8gY3JlYXRlIGFuZCBwbGFjZSBwb3BwZXJzIG5lYXIgdGhlaXIgcmVmZXJlbmNlIGVsZW1lbnRzLlxuICogQHZlcnNpb24gMS4xNS4wXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE2IEZlZGVyaWNvIFppdm9sbyBhbmQgY29udHJpYnV0b3JzXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xudmFyIGlzQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbnZhciBsb25nZXJUaW1lb3V0QnJvd3NlcnMgPSBbJ0VkZ2UnLCAnVHJpZGVudCcsICdGaXJlZm94J107XG52YXIgdGltZW91dER1cmF0aW9uID0gMDtcbmZvciAodmFyIGkgPSAwOyBpIDwgbG9uZ2VyVGltZW91dEJyb3dzZXJzLmxlbmd0aDsgaSArPSAxKSB7XG4gIGlmIChpc0Jyb3dzZXIgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKGxvbmdlclRpbWVvdXRCcm93c2Vyc1tpXSkgPj0gMCkge1xuICAgIHRpbWVvdXREdXJhdGlvbiA9IDE7XG4gICAgYnJlYWs7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWljcm90YXNrRGVib3VuY2UoZm4pIHtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmIChjYWxsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2FsbGVkID0gdHJ1ZTtcbiAgICB3aW5kb3cuUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsZWQgPSBmYWxzZTtcbiAgICAgIGZuKCk7XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRhc2tEZWJvdW5jZShmbikge1xuICB2YXIgc2NoZWR1bGVkID0gZmFsc2U7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFzY2hlZHVsZWQpIHtcbiAgICAgIHNjaGVkdWxlZCA9IHRydWU7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2NoZWR1bGVkID0gZmFsc2U7XG4gICAgICAgIGZuKCk7XG4gICAgICB9LCB0aW1lb3V0RHVyYXRpb24pO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIHN1cHBvcnRzTWljcm9UYXNrcyA9IGlzQnJvd3NlciAmJiB3aW5kb3cuUHJvbWlzZTtcblxuLyoqXG4qIENyZWF0ZSBhIGRlYm91bmNlZCB2ZXJzaW9uIG9mIGEgbWV0aG9kLCB0aGF0J3MgYXN5bmNocm9ub3VzbHkgZGVmZXJyZWRcbiogYnV0IGNhbGxlZCBpbiB0aGUgbWluaW11bSB0aW1lIHBvc3NpYmxlLlxuKlxuKiBAbWV0aG9kXG4qIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiogQGFyZ3VtZW50IHtGdW5jdGlvbn0gZm5cbiogQHJldHVybnMge0Z1bmN0aW9ufVxuKi9cbnZhciBkZWJvdW5jZSA9IHN1cHBvcnRzTWljcm9UYXNrcyA/IG1pY3JvdGFza0RlYm91bmNlIDogdGFza0RlYm91bmNlO1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBnaXZlbiB2YXJpYWJsZSBpcyBhIGZ1bmN0aW9uXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0FueX0gZnVuY3Rpb25Ub0NoZWNrIC0gdmFyaWFibGUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtCb29sZWFufSBhbnN3ZXIgdG86IGlzIGEgZnVuY3Rpb24/XG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oZnVuY3Rpb25Ub0NoZWNrKSB7XG4gIHZhciBnZXRUeXBlID0ge307XG4gIHJldHVybiBmdW5jdGlvblRvQ2hlY2sgJiYgZ2V0VHlwZS50b1N0cmluZy5jYWxsKGZ1bmN0aW9uVG9DaGVjaykgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5cbi8qKlxuICogR2V0IENTUyBjb21wdXRlZCBwcm9wZXJ0eSBvZiB0aGUgZ2l2ZW4gZWxlbWVudFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFZW1lbnR9IGVsZW1lbnRcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBwcm9wZXJ0eVxuICovXG5mdW5jdGlvbiBnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkoZWxlbWVudCwgcHJvcGVydHkpIHtcbiAgaWYgKGVsZW1lbnQubm9kZVR5cGUgIT09IDEpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgLy8gTk9URTogMSBET00gYWNjZXNzIGhlcmVcbiAgdmFyIHdpbmRvdyA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcbiAgdmFyIGNzcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIG51bGwpO1xuICByZXR1cm4gcHJvcGVydHkgPyBjc3NbcHJvcGVydHldIDogY3NzO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBhcmVudE5vZGUgb3IgdGhlIGhvc3Qgb2YgdGhlIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0VsZW1lbnR9IHBhcmVudFxuICovXG5mdW5jdGlvbiBnZXRQYXJlbnROb2RlKGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQubm9kZU5hbWUgPT09ICdIVE1MJykge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG4gIHJldHVybiBlbGVtZW50LnBhcmVudE5vZGUgfHwgZWxlbWVudC5ob3N0O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHNjcm9sbGluZyBwYXJlbnQgb2YgdGhlIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0VsZW1lbnR9IHNjcm9sbCBwYXJlbnRcbiAqL1xuZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KGVsZW1lbnQpIHtcbiAgLy8gUmV0dXJuIGJvZHksIGBnZXRTY3JvbGxgIHdpbGwgdGFrZSBjYXJlIHRvIGdldCB0aGUgY29ycmVjdCBgc2Nyb2xsVG9wYCBmcm9tIGl0XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiBkb2N1bWVudC5ib2R5O1xuICB9XG5cbiAgc3dpdGNoIChlbGVtZW50Lm5vZGVOYW1lKSB7XG4gICAgY2FzZSAnSFRNTCc6XG4gICAgY2FzZSAnQk9EWSc6XG4gICAgICByZXR1cm4gZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHk7XG4gICAgY2FzZSAnI2RvY3VtZW50JzpcbiAgICAgIHJldHVybiBlbGVtZW50LmJvZHk7XG4gIH1cblxuICAvLyBGaXJlZm94IHdhbnQgdXMgdG8gY2hlY2sgYC14YCBhbmQgYC15YCB2YXJpYXRpb25zIGFzIHdlbGxcblxuICB2YXIgX2dldFN0eWxlQ29tcHV0ZWRQcm9wID0gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGVsZW1lbnQpLFxuICAgICAgb3ZlcmZsb3cgPSBfZ2V0U3R5bGVDb21wdXRlZFByb3Aub3ZlcmZsb3csXG4gICAgICBvdmVyZmxvd1ggPSBfZ2V0U3R5bGVDb21wdXRlZFByb3Aub3ZlcmZsb3dYLFxuICAgICAgb3ZlcmZsb3dZID0gX2dldFN0eWxlQ29tcHV0ZWRQcm9wLm92ZXJmbG93WTtcblxuICBpZiAoLyhhdXRvfHNjcm9sbHxvdmVybGF5KS8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCkpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiBnZXRTY3JvbGxQYXJlbnQoZ2V0UGFyZW50Tm9kZShlbGVtZW50KSk7XG59XG5cbnZhciBpc0lFMTEgPSBpc0Jyb3dzZXIgJiYgISEod2luZG93Lk1TSW5wdXRNZXRob2RDb250ZXh0ICYmIGRvY3VtZW50LmRvY3VtZW50TW9kZSk7XG52YXIgaXNJRTEwID0gaXNCcm93c2VyICYmIC9NU0lFIDEwLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGJyb3dzZXIgaXMgSW50ZXJuZXQgRXhwbG9yZXJcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7TnVtYmVyfSB2ZXJzaW9uIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gaXNJRVxuICovXG5mdW5jdGlvbiBpc0lFKHZlcnNpb24pIHtcbiAgaWYgKHZlcnNpb24gPT09IDExKSB7XG4gICAgcmV0dXJuIGlzSUUxMTtcbiAgfVxuICBpZiAodmVyc2lvbiA9PT0gMTApIHtcbiAgICByZXR1cm4gaXNJRTEwO1xuICB9XG4gIHJldHVybiBpc0lFMTEgfHwgaXNJRTEwO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG9mZnNldCBwYXJlbnQgb2YgdGhlIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0VsZW1lbnR9IG9mZnNldCBwYXJlbnRcbiAqL1xuZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfVxuXG4gIHZhciBub09mZnNldFBhcmVudCA9IGlzSUUoMTApID8gZG9jdW1lbnQuYm9keSA6IG51bGw7XG5cbiAgLy8gTk9URTogMSBET00gYWNjZXNzIGhlcmVcbiAgdmFyIG9mZnNldFBhcmVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50IHx8IG51bGw7XG4gIC8vIFNraXAgaGlkZGVuIGVsZW1lbnRzIHdoaWNoIGRvbid0IGhhdmUgYW4gb2Zmc2V0UGFyZW50XG4gIHdoaWxlIChvZmZzZXRQYXJlbnQgPT09IG5vT2Zmc2V0UGFyZW50ICYmIGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKSB7XG4gICAgb2Zmc2V0UGFyZW50ID0gKGVsZW1lbnQgPSBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZykub2Zmc2V0UGFyZW50O1xuICB9XG5cbiAgdmFyIG5vZGVOYW1lID0gb2Zmc2V0UGFyZW50ICYmIG9mZnNldFBhcmVudC5ub2RlTmFtZTtcblxuICBpZiAoIW5vZGVOYW1lIHx8IG5vZGVOYW1lID09PSAnQk9EWScgfHwgbm9kZU5hbWUgPT09ICdIVE1MJykge1xuICAgIHJldHVybiBlbGVtZW50ID8gZWxlbWVudC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfVxuXG4gIC8vIC5vZmZzZXRQYXJlbnQgd2lsbCByZXR1cm4gdGhlIGNsb3Nlc3QgVEgsIFREIG9yIFRBQkxFIGluIGNhc2VcbiAgLy8gbm8gb2Zmc2V0UGFyZW50IGlzIHByZXNlbnQsIEkgaGF0ZSB0aGlzIGpvYi4uLlxuICBpZiAoWydUSCcsICdURCcsICdUQUJMRSddLmluZGV4T2Yob2Zmc2V0UGFyZW50Lm5vZGVOYW1lKSAhPT0gLTEgJiYgZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KG9mZnNldFBhcmVudCwgJ3Bvc2l0aW9uJykgPT09ICdzdGF0aWMnKSB7XG4gICAgcmV0dXJuIGdldE9mZnNldFBhcmVudChvZmZzZXRQYXJlbnQpO1xuICB9XG5cbiAgcmV0dXJuIG9mZnNldFBhcmVudDtcbn1cblxuZnVuY3Rpb24gaXNPZmZzZXRDb250YWluZXIoZWxlbWVudCkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lO1xuXG4gIGlmIChub2RlTmFtZSA9PT0gJ0JPRFknKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBub2RlTmFtZSA9PT0gJ0hUTUwnIHx8IGdldE9mZnNldFBhcmVudChlbGVtZW50LmZpcnN0RWxlbWVudENoaWxkKSA9PT0gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgcm9vdCBub2RlIChkb2N1bWVudCwgc2hhZG93RE9NIHJvb3QpIG9mIHRoZSBnaXZlbiBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IG5vZGVcbiAqIEByZXR1cm5zIHtFbGVtZW50fSByb290IG5vZGVcbiAqL1xuZnVuY3Rpb24gZ2V0Um9vdChub2RlKSB7XG4gIGlmIChub2RlLnBhcmVudE5vZGUgIT09IG51bGwpIHtcbiAgICByZXR1cm4gZ2V0Um9vdChub2RlLnBhcmVudE5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIG9mZnNldCBwYXJlbnQgY29tbW9uIHRvIHRoZSB0d28gcHJvdmlkZWQgbm9kZXNcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudDFcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudDJcbiAqIEByZXR1cm5zIHtFbGVtZW50fSBjb21tb24gb2Zmc2V0IHBhcmVudFxuICovXG5mdW5jdGlvbiBmaW5kQ29tbW9uT2Zmc2V0UGFyZW50KGVsZW1lbnQxLCBlbGVtZW50Mikge1xuICAvLyBUaGlzIGNoZWNrIGlzIG5lZWRlZCB0byBhdm9pZCBlcnJvcnMgaW4gY2FzZSBvbmUgb2YgdGhlIGVsZW1lbnRzIGlzbid0IGRlZmluZWQgZm9yIGFueSByZWFzb25cbiAgaWYgKCFlbGVtZW50MSB8fCAhZWxlbWVudDEubm9kZVR5cGUgfHwgIWVsZW1lbnQyIHx8ICFlbGVtZW50Mi5ub2RlVHlwZSkge1xuICAgIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIH1cblxuICAvLyBIZXJlIHdlIG1ha2Ugc3VyZSB0byBnaXZlIGFzIFwic3RhcnRcIiB0aGUgZWxlbWVudCB0aGF0IGNvbWVzIGZpcnN0IGluIHRoZSBET01cbiAgdmFyIG9yZGVyID0gZWxlbWVudDEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZWxlbWVudDIpICYgTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkc7XG4gIHZhciBzdGFydCA9IG9yZGVyID8gZWxlbWVudDEgOiBlbGVtZW50MjtcbiAgdmFyIGVuZCA9IG9yZGVyID8gZWxlbWVudDIgOiBlbGVtZW50MTtcblxuICAvLyBHZXQgY29tbW9uIGFuY2VzdG9yIGNvbnRhaW5lclxuICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICByYW5nZS5zZXRTdGFydChzdGFydCwgMCk7XG4gIHJhbmdlLnNldEVuZChlbmQsIDApO1xuICB2YXIgY29tbW9uQW5jZXN0b3JDb250YWluZXIgPSByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtcblxuICAvLyBCb3RoIG5vZGVzIGFyZSBpbnNpZGUgI2RvY3VtZW50XG5cbiAgaWYgKGVsZW1lbnQxICE9PSBjb21tb25BbmNlc3RvckNvbnRhaW5lciAmJiBlbGVtZW50MiAhPT0gY29tbW9uQW5jZXN0b3JDb250YWluZXIgfHwgc3RhcnQuY29udGFpbnMoZW5kKSkge1xuICAgIGlmIChpc09mZnNldENvbnRhaW5lcihjb21tb25BbmNlc3RvckNvbnRhaW5lcikpIHtcbiAgICAgIHJldHVybiBjb21tb25BbmNlc3RvckNvbnRhaW5lcjtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0T2Zmc2V0UGFyZW50KGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKTtcbiAgfVxuXG4gIC8vIG9uZSBvZiB0aGUgbm9kZXMgaXMgaW5zaWRlIHNoYWRvd0RPTSwgZmluZCB3aGljaCBvbmVcbiAgdmFyIGVsZW1lbnQxcm9vdCA9IGdldFJvb3QoZWxlbWVudDEpO1xuICBpZiAoZWxlbWVudDFyb290Lmhvc3QpIHtcbiAgICByZXR1cm4gZmluZENvbW1vbk9mZnNldFBhcmVudChlbGVtZW50MXJvb3QuaG9zdCwgZWxlbWVudDIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmaW5kQ29tbW9uT2Zmc2V0UGFyZW50KGVsZW1lbnQxLCBnZXRSb290KGVsZW1lbnQyKS5ob3N0KTtcbiAgfVxufVxuXG4vKipcbiAqIEdldHMgdGhlIHNjcm9sbCB2YWx1ZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudCBpbiB0aGUgZ2l2ZW4gc2lkZSAodG9wIGFuZCBsZWZ0KVxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50XG4gKiBAYXJndW1lbnQge1N0cmluZ30gc2lkZSBgdG9wYCBvciBgbGVmdGBcbiAqIEByZXR1cm5zIHtudW1iZXJ9IGFtb3VudCBvZiBzY3JvbGxlZCBwaXhlbHNcbiAqL1xuZnVuY3Rpb24gZ2V0U2Nyb2xsKGVsZW1lbnQpIHtcbiAgdmFyIHNpZGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICd0b3AnO1xuXG4gIHZhciB1cHBlclNpZGUgPSBzaWRlID09PSAndG9wJyA/ICdzY3JvbGxUb3AnIDogJ3Njcm9sbExlZnQnO1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lO1xuXG4gIGlmIChub2RlTmFtZSA9PT0gJ0JPRFknIHx8IG5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICB2YXIgaHRtbCA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgdmFyIHNjcm9sbGluZ0VsZW1lbnQgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCB8fCBodG1sO1xuICAgIHJldHVybiBzY3JvbGxpbmdFbGVtZW50W3VwcGVyU2lkZV07XG4gIH1cblxuICByZXR1cm4gZWxlbWVudFt1cHBlclNpZGVdO1xufVxuXG4vKlxuICogU3VtIG9yIHN1YnRyYWN0IHRoZSBlbGVtZW50IHNjcm9sbCB2YWx1ZXMgKGxlZnQgYW5kIHRvcCkgZnJvbSBhIGdpdmVuIHJlY3Qgb2JqZWN0XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge09iamVjdH0gcmVjdCAtIFJlY3Qgb2JqZWN0IHlvdSB3YW50IHRvIGNoYW5nZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIFRoZSBlbGVtZW50IGZyb20gdGhlIGZ1bmN0aW9uIHJlYWRzIHRoZSBzY3JvbGwgdmFsdWVzXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHN1YnRyYWN0IC0gc2V0IHRvIHRydWUgaWYgeW91IHdhbnQgdG8gc3VidHJhY3QgdGhlIHNjcm9sbCB2YWx1ZXNcbiAqIEByZXR1cm4ge09iamVjdH0gcmVjdCAtIFRoZSBtb2RpZmllciByZWN0IG9iamVjdFxuICovXG5mdW5jdGlvbiBpbmNsdWRlU2Nyb2xsKHJlY3QsIGVsZW1lbnQpIHtcbiAgdmFyIHN1YnRyYWN0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcblxuICB2YXIgc2Nyb2xsVG9wID0gZ2V0U2Nyb2xsKGVsZW1lbnQsICd0b3AnKTtcbiAgdmFyIHNjcm9sbExlZnQgPSBnZXRTY3JvbGwoZWxlbWVudCwgJ2xlZnQnKTtcbiAgdmFyIG1vZGlmaWVyID0gc3VidHJhY3QgPyAtMSA6IDE7XG4gIHJlY3QudG9wICs9IHNjcm9sbFRvcCAqIG1vZGlmaWVyO1xuICByZWN0LmJvdHRvbSArPSBzY3JvbGxUb3AgKiBtb2RpZmllcjtcbiAgcmVjdC5sZWZ0ICs9IHNjcm9sbExlZnQgKiBtb2RpZmllcjtcbiAgcmVjdC5yaWdodCArPSBzY3JvbGxMZWZ0ICogbW9kaWZpZXI7XG4gIHJldHVybiByZWN0O1xufVxuXG4vKlxuICogSGVscGVyIHRvIGRldGVjdCBib3JkZXJzIG9mIGEgZ2l2ZW4gZWxlbWVudFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHtDU1NTdHlsZURlY2xhcmF0aW9ufSBzdHlsZXNcbiAqIFJlc3VsdCBvZiBgZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5YCBvbiB0aGUgZ2l2ZW4gZWxlbWVudFxuICogQHBhcmFtIHtTdHJpbmd9IGF4aXMgLSBgeGAgb3IgYHlgXG4gKiBAcmV0dXJuIHtudW1iZXJ9IGJvcmRlcnMgLSBUaGUgYm9yZGVycyBzaXplIG9mIHRoZSBnaXZlbiBheGlzXG4gKi9cblxuZnVuY3Rpb24gZ2V0Qm9yZGVyc1NpemUoc3R5bGVzLCBheGlzKSB7XG4gIHZhciBzaWRlQSA9IGF4aXMgPT09ICd4JyA/ICdMZWZ0JyA6ICdUb3AnO1xuICB2YXIgc2lkZUIgPSBzaWRlQSA9PT0gJ0xlZnQnID8gJ1JpZ2h0JyA6ICdCb3R0b20nO1xuXG4gIHJldHVybiBwYXJzZUZsb2F0KHN0eWxlc1snYm9yZGVyJyArIHNpZGVBICsgJ1dpZHRoJ10sIDEwKSArIHBhcnNlRmxvYXQoc3R5bGVzWydib3JkZXInICsgc2lkZUIgKyAnV2lkdGgnXSwgMTApO1xufVxuXG5mdW5jdGlvbiBnZXRTaXplKGF4aXMsIGJvZHksIGh0bWwsIGNvbXB1dGVkU3R5bGUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KGJvZHlbJ29mZnNldCcgKyBheGlzXSwgYm9keVsnc2Nyb2xsJyArIGF4aXNdLCBodG1sWydjbGllbnQnICsgYXhpc10sIGh0bWxbJ29mZnNldCcgKyBheGlzXSwgaHRtbFsnc2Nyb2xsJyArIGF4aXNdLCBpc0lFKDEwKSA/IHBhcnNlSW50KGh0bWxbJ29mZnNldCcgKyBheGlzXSkgKyBwYXJzZUludChjb21wdXRlZFN0eWxlWydtYXJnaW4nICsgKGF4aXMgPT09ICdIZWlnaHQnID8gJ1RvcCcgOiAnTGVmdCcpXSkgKyBwYXJzZUludChjb21wdXRlZFN0eWxlWydtYXJnaW4nICsgKGF4aXMgPT09ICdIZWlnaHQnID8gJ0JvdHRvbScgOiAnUmlnaHQnKV0pIDogMCk7XG59XG5cbmZ1bmN0aW9uIGdldFdpbmRvd1NpemVzKGRvY3VtZW50KSB7XG4gIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgdmFyIGh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIHZhciBjb21wdXRlZFN0eWxlID0gaXNJRSgxMCkgJiYgZ2V0Q29tcHV0ZWRTdHlsZShodG1sKTtcblxuICByZXR1cm4ge1xuICAgIGhlaWdodDogZ2V0U2l6ZSgnSGVpZ2h0JywgYm9keSwgaHRtbCwgY29tcHV0ZWRTdHlsZSksXG4gICAgd2lkdGg6IGdldFNpemUoJ1dpZHRoJywgYm9keSwgaHRtbCwgY29tcHV0ZWRTdHlsZSlcbiAgfTtcbn1cblxudmFyIGNsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn07XG5cbnZhciBjcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfTtcbn0oKTtcblxuXG5cblxuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59O1xuXG4vKipcbiAqIEdpdmVuIGVsZW1lbnQgb2Zmc2V0cywgZ2VuZXJhdGUgYW4gb3V0cHV0IHNpbWlsYXIgdG8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge09iamVjdH0gb2Zmc2V0c1xuICogQHJldHVybnMge09iamVjdH0gQ2xpZW50UmVjdCBsaWtlIG91dHB1dFxuICovXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0KG9mZnNldHMpIHtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvZmZzZXRzLCB7XG4gICAgcmlnaHQ6IG9mZnNldHMubGVmdCArIG9mZnNldHMud2lkdGgsXG4gICAgYm90dG9tOiBvZmZzZXRzLnRvcCArIG9mZnNldHMuaGVpZ2h0XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBib3VuZGluZyBjbGllbnQgcmVjdCBvZiBnaXZlbiBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHtPYmplY3R9IGNsaWVudCByZWN0XG4gKi9cbmZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50KSB7XG4gIHZhciByZWN0ID0ge307XG5cbiAgLy8gSUUxMCAxMCBGSVg6IFBsZWFzZSwgZG9uJ3QgYXNrLCB0aGUgZWxlbWVudCBpc24ndFxuICAvLyBjb25zaWRlcmVkIGluIERPTSBpbiBzb21lIGNpcmN1bXN0YW5jZXMuLi5cbiAgLy8gVGhpcyBpc24ndCByZXByb2R1Y2libGUgaW4gSUUxMCBjb21wYXRpYmlsaXR5IG1vZGUgb2YgSUUxMVxuICB0cnkge1xuICAgIGlmIChpc0lFKDEwKSkge1xuICAgICAgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB2YXIgc2Nyb2xsVG9wID0gZ2V0U2Nyb2xsKGVsZW1lbnQsICd0b3AnKTtcbiAgICAgIHZhciBzY3JvbGxMZWZ0ID0gZ2V0U2Nyb2xsKGVsZW1lbnQsICdsZWZ0Jyk7XG4gICAgICByZWN0LnRvcCArPSBzY3JvbGxUb3A7XG4gICAgICByZWN0LmxlZnQgKz0gc2Nyb2xsTGVmdDtcbiAgICAgIHJlY3QuYm90dG9tICs9IHNjcm9sbFRvcDtcbiAgICAgIHJlY3QucmlnaHQgKz0gc2Nyb2xsTGVmdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSB7XG4gICAgbGVmdDogcmVjdC5sZWZ0LFxuICAgIHRvcDogcmVjdC50b3AsXG4gICAgd2lkdGg6IHJlY3QucmlnaHQgLSByZWN0LmxlZnQsXG4gICAgaGVpZ2h0OiByZWN0LmJvdHRvbSAtIHJlY3QudG9wXG4gIH07XG5cbiAgLy8gc3VidHJhY3Qgc2Nyb2xsYmFyIHNpemUgZnJvbSBzaXplc1xuICB2YXIgc2l6ZXMgPSBlbGVtZW50Lm5vZGVOYW1lID09PSAnSFRNTCcgPyBnZXRXaW5kb3dTaXplcyhlbGVtZW50Lm93bmVyRG9jdW1lbnQpIDoge307XG4gIHZhciB3aWR0aCA9IHNpemVzLndpZHRoIHx8IGVsZW1lbnQuY2xpZW50V2lkdGggfHwgcmVzdWx0LnJpZ2h0IC0gcmVzdWx0LmxlZnQ7XG4gIHZhciBoZWlnaHQgPSBzaXplcy5oZWlnaHQgfHwgZWxlbWVudC5jbGllbnRIZWlnaHQgfHwgcmVzdWx0LmJvdHRvbSAtIHJlc3VsdC50b3A7XG5cbiAgdmFyIGhvcml6U2Nyb2xsYmFyID0gZWxlbWVudC5vZmZzZXRXaWR0aCAtIHdpZHRoO1xuICB2YXIgdmVydFNjcm9sbGJhciA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gaGVpZ2h0O1xuXG4gIC8vIGlmIGFuIGh5cG90aGV0aWNhbCBzY3JvbGxiYXIgaXMgZGV0ZWN0ZWQsIHdlIG11c3QgYmUgc3VyZSBpdCdzIG5vdCBhIGBib3JkZXJgXG4gIC8vIHdlIG1ha2UgdGhpcyBjaGVjayBjb25kaXRpb25hbCBmb3IgcGVyZm9ybWFuY2UgcmVhc29uc1xuICBpZiAoaG9yaXpTY3JvbGxiYXIgfHwgdmVydFNjcm9sbGJhcikge1xuICAgIHZhciBzdHlsZXMgPSBnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkoZWxlbWVudCk7XG4gICAgaG9yaXpTY3JvbGxiYXIgLT0gZ2V0Qm9yZGVyc1NpemUoc3R5bGVzLCAneCcpO1xuICAgIHZlcnRTY3JvbGxiYXIgLT0gZ2V0Qm9yZGVyc1NpemUoc3R5bGVzLCAneScpO1xuXG4gICAgcmVzdWx0LndpZHRoIC09IGhvcml6U2Nyb2xsYmFyO1xuICAgIHJlc3VsdC5oZWlnaHQgLT0gdmVydFNjcm9sbGJhcjtcbiAgfVxuXG4gIHJldHVybiBnZXRDbGllbnRSZWN0KHJlc3VsdCk7XG59XG5cbmZ1bmN0aW9uIGdldE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJiaXRyYXJ5Tm9kZShjaGlsZHJlbiwgcGFyZW50KSB7XG4gIHZhciBmaXhlZFBvc2l0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcblxuICB2YXIgaXNJRTEwID0gaXNJRSgxMCk7XG4gIHZhciBpc0hUTUwgPSBwYXJlbnQubm9kZU5hbWUgPT09ICdIVE1MJztcbiAgdmFyIGNoaWxkcmVuUmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChjaGlsZHJlbik7XG4gIHZhciBwYXJlbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHBhcmVudCk7XG4gIHZhciBzY3JvbGxQYXJlbnQgPSBnZXRTY3JvbGxQYXJlbnQoY2hpbGRyZW4pO1xuXG4gIHZhciBzdHlsZXMgPSBnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkocGFyZW50KTtcbiAgdmFyIGJvcmRlclRvcFdpZHRoID0gcGFyc2VGbG9hdChzdHlsZXMuYm9yZGVyVG9wV2lkdGgsIDEwKTtcbiAgdmFyIGJvcmRlckxlZnRXaWR0aCA9IHBhcnNlRmxvYXQoc3R5bGVzLmJvcmRlckxlZnRXaWR0aCwgMTApO1xuXG4gIC8vIEluIGNhc2VzIHdoZXJlIHRoZSBwYXJlbnQgaXMgZml4ZWQsIHdlIG11c3QgaWdub3JlIG5lZ2F0aXZlIHNjcm9sbCBpbiBvZmZzZXQgY2FsY1xuICBpZiAoZml4ZWRQb3NpdGlvbiAmJiBpc0hUTUwpIHtcbiAgICBwYXJlbnRSZWN0LnRvcCA9IE1hdGgubWF4KHBhcmVudFJlY3QudG9wLCAwKTtcbiAgICBwYXJlbnRSZWN0LmxlZnQgPSBNYXRoLm1heChwYXJlbnRSZWN0LmxlZnQsIDApO1xuICB9XG4gIHZhciBvZmZzZXRzID0gZ2V0Q2xpZW50UmVjdCh7XG4gICAgdG9wOiBjaGlsZHJlblJlY3QudG9wIC0gcGFyZW50UmVjdC50b3AgLSBib3JkZXJUb3BXaWR0aCxcbiAgICBsZWZ0OiBjaGlsZHJlblJlY3QubGVmdCAtIHBhcmVudFJlY3QubGVmdCAtIGJvcmRlckxlZnRXaWR0aCxcbiAgICB3aWR0aDogY2hpbGRyZW5SZWN0LndpZHRoLFxuICAgIGhlaWdodDogY2hpbGRyZW5SZWN0LmhlaWdodFxuICB9KTtcbiAgb2Zmc2V0cy5tYXJnaW5Ub3AgPSAwO1xuICBvZmZzZXRzLm1hcmdpbkxlZnQgPSAwO1xuXG4gIC8vIFN1YnRyYWN0IG1hcmdpbnMgb2YgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgaXQncyBiZWluZyB1c2VkIGFzIHBhcmVudFxuICAvLyB3ZSBkbyB0aGlzIG9ubHkgb24gSFRNTCBiZWNhdXNlIGl0J3MgdGhlIG9ubHkgZWxlbWVudCB0aGF0IGJlaGF2ZXNcbiAgLy8gZGlmZmVyZW50bHkgd2hlbiBtYXJnaW5zIGFyZSBhcHBsaWVkIHRvIGl0LiBUaGUgbWFyZ2lucyBhcmUgaW5jbHVkZWQgaW5cbiAgLy8gdGhlIGJveCBvZiB0aGUgZG9jdW1lbnRFbGVtZW50LCBpbiB0aGUgb3RoZXIgY2FzZXMgbm90LlxuICBpZiAoIWlzSUUxMCAmJiBpc0hUTUwpIHtcbiAgICB2YXIgbWFyZ2luVG9wID0gcGFyc2VGbG9hdChzdHlsZXMubWFyZ2luVG9wLCAxMCk7XG4gICAgdmFyIG1hcmdpbkxlZnQgPSBwYXJzZUZsb2F0KHN0eWxlcy5tYXJnaW5MZWZ0LCAxMCk7XG5cbiAgICBvZmZzZXRzLnRvcCAtPSBib3JkZXJUb3BXaWR0aCAtIG1hcmdpblRvcDtcbiAgICBvZmZzZXRzLmJvdHRvbSAtPSBib3JkZXJUb3BXaWR0aCAtIG1hcmdpblRvcDtcbiAgICBvZmZzZXRzLmxlZnQgLT0gYm9yZGVyTGVmdFdpZHRoIC0gbWFyZ2luTGVmdDtcbiAgICBvZmZzZXRzLnJpZ2h0IC09IGJvcmRlckxlZnRXaWR0aCAtIG1hcmdpbkxlZnQ7XG5cbiAgICAvLyBBdHRhY2ggbWFyZ2luVG9wIGFuZCBtYXJnaW5MZWZ0IGJlY2F1c2UgaW4gc29tZSBjaXJjdW1zdGFuY2VzIHdlIG1heSBuZWVkIHRoZW1cbiAgICBvZmZzZXRzLm1hcmdpblRvcCA9IG1hcmdpblRvcDtcbiAgICBvZmZzZXRzLm1hcmdpbkxlZnQgPSBtYXJnaW5MZWZ0O1xuICB9XG5cbiAgaWYgKGlzSUUxMCAmJiAhZml4ZWRQb3NpdGlvbiA/IHBhcmVudC5jb250YWlucyhzY3JvbGxQYXJlbnQpIDogcGFyZW50ID09PSBzY3JvbGxQYXJlbnQgJiYgc2Nyb2xsUGFyZW50Lm5vZGVOYW1lICE9PSAnQk9EWScpIHtcbiAgICBvZmZzZXRzID0gaW5jbHVkZVNjcm9sbChvZmZzZXRzLCBwYXJlbnQpO1xuICB9XG5cbiAgcmV0dXJuIG9mZnNldHM7XG59XG5cbmZ1bmN0aW9uIGdldFZpZXdwb3J0T2Zmc2V0UmVjdFJlbGF0aXZlVG9BcnRiaXRyYXJ5Tm9kZShlbGVtZW50KSB7XG4gIHZhciBleGNsdWRlU2Nyb2xsID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcblxuICB2YXIgaHRtbCA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIHZhciByZWxhdGl2ZU9mZnNldCA9IGdldE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJiaXRyYXJ5Tm9kZShlbGVtZW50LCBodG1sKTtcbiAgdmFyIHdpZHRoID0gTWF0aC5tYXgoaHRtbC5jbGllbnRXaWR0aCwgd2luZG93LmlubmVyV2lkdGggfHwgMCk7XG4gIHZhciBoZWlnaHQgPSBNYXRoLm1heChodG1sLmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IDApO1xuXG4gIHZhciBzY3JvbGxUb3AgPSAhZXhjbHVkZVNjcm9sbCA/IGdldFNjcm9sbChodG1sKSA6IDA7XG4gIHZhciBzY3JvbGxMZWZ0ID0gIWV4Y2x1ZGVTY3JvbGwgPyBnZXRTY3JvbGwoaHRtbCwgJ2xlZnQnKSA6IDA7XG5cbiAgdmFyIG9mZnNldCA9IHtcbiAgICB0b3A6IHNjcm9sbFRvcCAtIHJlbGF0aXZlT2Zmc2V0LnRvcCArIHJlbGF0aXZlT2Zmc2V0Lm1hcmdpblRvcCxcbiAgICBsZWZ0OiBzY3JvbGxMZWZ0IC0gcmVsYXRpdmVPZmZzZXQubGVmdCArIHJlbGF0aXZlT2Zmc2V0Lm1hcmdpbkxlZnQsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG5cbiAgcmV0dXJuIGdldENsaWVudFJlY3Qob2Zmc2V0KTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBmaXhlZCBvciBpcyBpbnNpZGUgYSBmaXhlZCBwYXJlbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQGFyZ3VtZW50IHtFbGVtZW50fSBjdXN0b21Db250YWluZXJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBhbnN3ZXIgdG8gXCJpc0ZpeGVkP1wiXG4gKi9cbmZ1bmN0aW9uIGlzRml4ZWQoZWxlbWVudCkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lO1xuICBpZiAobm9kZU5hbWUgPT09ICdCT0RZJyB8fCBub2RlTmFtZSA9PT0gJ0hUTUwnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIGlmICghcGFyZW50Tm9kZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gaXNGaXhlZChwYXJlbnROb2RlKTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgZmlyc3QgcGFyZW50IG9mIGFuIGVsZW1lbnQgdGhhdCBoYXMgYSB0cmFuc2Zvcm1lZCBwcm9wZXJ0eSBkZWZpbmVkXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtFbGVtZW50fSBmaXJzdCB0cmFuc2Zvcm1lZCBwYXJlbnQgb3IgZG9jdW1lbnRFbGVtZW50XG4gKi9cblxuZnVuY3Rpb24gZ2V0Rml4ZWRQb3NpdGlvbk9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIC8vIFRoaXMgY2hlY2sgaXMgbmVlZGVkIHRvIGF2b2lkIGVycm9ycyBpbiBjYXNlIG9uZSBvZiB0aGUgZWxlbWVudHMgaXNuJ3QgZGVmaW5lZCBmb3IgYW55IHJlYXNvblxuICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQucGFyZW50RWxlbWVudCB8fCBpc0lFKCkpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB9XG4gIHZhciBlbCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgd2hpbGUgKGVsICYmIGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShlbCwgJ3RyYW5zZm9ybScpID09PSAnbm9uZScpIHtcbiAgICBlbCA9IGVsLnBhcmVudEVsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIGVsIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbn1cblxuLyoqXG4gKiBDb21wdXRlZCB0aGUgYm91bmRhcmllcyBsaW1pdHMgYW5kIHJldHVybiB0aGVtXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwb3BwZXJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJlZmVyZW5jZVxuICogQHBhcmFtIHtudW1iZXJ9IHBhZGRpbmdcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGJvdW5kYXJpZXNFbGVtZW50IC0gRWxlbWVudCB1c2VkIHRvIGRlZmluZSB0aGUgYm91bmRhcmllc1xuICogQHBhcmFtIHtCb29sZWFufSBmaXhlZFBvc2l0aW9uIC0gSXMgaW4gZml4ZWQgcG9zaXRpb24gbW9kZVxuICogQHJldHVybnMge09iamVjdH0gQ29vcmRpbmF0ZXMgb2YgdGhlIGJvdW5kYXJpZXNcbiAqL1xuZnVuY3Rpb24gZ2V0Qm91bmRhcmllcyhwb3BwZXIsIHJlZmVyZW5jZSwgcGFkZGluZywgYm91bmRhcmllc0VsZW1lbnQpIHtcbiAgdmFyIGZpeGVkUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IGZhbHNlO1xuXG4gIC8vIE5PVEU6IDEgRE9NIGFjY2VzcyBoZXJlXG5cbiAgdmFyIGJvdW5kYXJpZXMgPSB7IHRvcDogMCwgbGVmdDogMCB9O1xuICB2YXIgb2Zmc2V0UGFyZW50ID0gZml4ZWRQb3NpdGlvbiA/IGdldEZpeGVkUG9zaXRpb25PZmZzZXRQYXJlbnQocG9wcGVyKSA6IGZpbmRDb21tb25PZmZzZXRQYXJlbnQocG9wcGVyLCByZWZlcmVuY2UpO1xuXG4gIC8vIEhhbmRsZSB2aWV3cG9ydCBjYXNlXG4gIGlmIChib3VuZGFyaWVzRWxlbWVudCA9PT0gJ3ZpZXdwb3J0Jykge1xuICAgIGJvdW5kYXJpZXMgPSBnZXRWaWV3cG9ydE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJ0Yml0cmFyeU5vZGUob2Zmc2V0UGFyZW50LCBmaXhlZFBvc2l0aW9uKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBIYW5kbGUgb3RoZXIgY2FzZXMgYmFzZWQgb24gRE9NIGVsZW1lbnQgdXNlZCBhcyBib3VuZGFyaWVzXG4gICAgdmFyIGJvdW5kYXJpZXNOb2RlID0gdm9pZCAwO1xuICAgIGlmIChib3VuZGFyaWVzRWxlbWVudCA9PT0gJ3Njcm9sbFBhcmVudCcpIHtcbiAgICAgIGJvdW5kYXJpZXNOb2RlID0gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUocmVmZXJlbmNlKSk7XG4gICAgICBpZiAoYm91bmRhcmllc05vZGUubm9kZU5hbWUgPT09ICdCT0RZJykge1xuICAgICAgICBib3VuZGFyaWVzTm9kZSA9IHBvcHBlci5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGJvdW5kYXJpZXNFbGVtZW50ID09PSAnd2luZG93Jykge1xuICAgICAgYm91bmRhcmllc05vZGUgPSBwb3BwZXIub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvdW5kYXJpZXNOb2RlID0gYm91bmRhcmllc0VsZW1lbnQ7XG4gICAgfVxuXG4gICAgdmFyIG9mZnNldHMgPSBnZXRPZmZzZXRSZWN0UmVsYXRpdmVUb0FyYml0cmFyeU5vZGUoYm91bmRhcmllc05vZGUsIG9mZnNldFBhcmVudCwgZml4ZWRQb3NpdGlvbik7XG5cbiAgICAvLyBJbiBjYXNlIG9mIEhUTUwsIHdlIG5lZWQgYSBkaWZmZXJlbnQgY29tcHV0YXRpb25cbiAgICBpZiAoYm91bmRhcmllc05vZGUubm9kZU5hbWUgPT09ICdIVE1MJyAmJiAhaXNGaXhlZChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICB2YXIgX2dldFdpbmRvd1NpemVzID0gZ2V0V2luZG93U2l6ZXMocG9wcGVyLm93bmVyRG9jdW1lbnQpLFxuICAgICAgICAgIGhlaWdodCA9IF9nZXRXaW5kb3dTaXplcy5oZWlnaHQsXG4gICAgICAgICAgd2lkdGggPSBfZ2V0V2luZG93U2l6ZXMud2lkdGg7XG5cbiAgICAgIGJvdW5kYXJpZXMudG9wICs9IG9mZnNldHMudG9wIC0gb2Zmc2V0cy5tYXJnaW5Ub3A7XG4gICAgICBib3VuZGFyaWVzLmJvdHRvbSA9IGhlaWdodCArIG9mZnNldHMudG9wO1xuICAgICAgYm91bmRhcmllcy5sZWZ0ICs9IG9mZnNldHMubGVmdCAtIG9mZnNldHMubWFyZ2luTGVmdDtcbiAgICAgIGJvdW5kYXJpZXMucmlnaHQgPSB3aWR0aCArIG9mZnNldHMubGVmdDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZm9yIGFsbCB0aGUgb3RoZXIgRE9NIGVsZW1lbnRzLCB0aGlzIG9uZSBpcyBnb29kXG4gICAgICBib3VuZGFyaWVzID0gb2Zmc2V0cztcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgcGFkZGluZ3NcbiAgcGFkZGluZyA9IHBhZGRpbmcgfHwgMDtcbiAgdmFyIGlzUGFkZGluZ051bWJlciA9IHR5cGVvZiBwYWRkaW5nID09PSAnbnVtYmVyJztcbiAgYm91bmRhcmllcy5sZWZ0ICs9IGlzUGFkZGluZ051bWJlciA/IHBhZGRpbmcgOiBwYWRkaW5nLmxlZnQgfHwgMDtcbiAgYm91bmRhcmllcy50b3AgKz0gaXNQYWRkaW5nTnVtYmVyID8gcGFkZGluZyA6IHBhZGRpbmcudG9wIHx8IDA7XG4gIGJvdW5kYXJpZXMucmlnaHQgLT0gaXNQYWRkaW5nTnVtYmVyID8gcGFkZGluZyA6IHBhZGRpbmcucmlnaHQgfHwgMDtcbiAgYm91bmRhcmllcy5ib3R0b20gLT0gaXNQYWRkaW5nTnVtYmVyID8gcGFkZGluZyA6IHBhZGRpbmcuYm90dG9tIHx8IDA7XG5cbiAgcmV0dXJuIGJvdW5kYXJpZXM7XG59XG5cbmZ1bmN0aW9uIGdldEFyZWEoX3JlZikge1xuICB2YXIgd2lkdGggPSBfcmVmLndpZHRoLFxuICAgICAgaGVpZ2h0ID0gX3JlZi5oZWlnaHQ7XG5cbiAgcmV0dXJuIHdpZHRoICogaGVpZ2h0O1xufVxuXG4vKipcbiAqIFV0aWxpdHkgdXNlZCB0byB0cmFuc2Zvcm0gdGhlIGBhdXRvYCBwbGFjZW1lbnQgdG8gdGhlIHBsYWNlbWVudCB3aXRoIG1vcmVcbiAqIGF2YWlsYWJsZSBzcGFjZS5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSB1cGRhdGUgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVBdXRvUGxhY2VtZW50KHBsYWNlbWVudCwgcmVmUmVjdCwgcG9wcGVyLCByZWZlcmVuY2UsIGJvdW5kYXJpZXNFbGVtZW50KSB7XG4gIHZhciBwYWRkaW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgJiYgYXJndW1lbnRzWzVdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNV0gOiAwO1xuXG4gIGlmIChwbGFjZW1lbnQuaW5kZXhPZignYXV0bycpID09PSAtMSkge1xuICAgIHJldHVybiBwbGFjZW1lbnQ7XG4gIH1cblxuICB2YXIgYm91bmRhcmllcyA9IGdldEJvdW5kYXJpZXMocG9wcGVyLCByZWZlcmVuY2UsIHBhZGRpbmcsIGJvdW5kYXJpZXNFbGVtZW50KTtcblxuICB2YXIgcmVjdHMgPSB7XG4gICAgdG9wOiB7XG4gICAgICB3aWR0aDogYm91bmRhcmllcy53aWR0aCxcbiAgICAgIGhlaWdodDogcmVmUmVjdC50b3AgLSBib3VuZGFyaWVzLnRvcFxuICAgIH0sXG4gICAgcmlnaHQ6IHtcbiAgICAgIHdpZHRoOiBib3VuZGFyaWVzLnJpZ2h0IC0gcmVmUmVjdC5yaWdodCxcbiAgICAgIGhlaWdodDogYm91bmRhcmllcy5oZWlnaHRcbiAgICB9LFxuICAgIGJvdHRvbToge1xuICAgICAgd2lkdGg6IGJvdW5kYXJpZXMud2lkdGgsXG4gICAgICBoZWlnaHQ6IGJvdW5kYXJpZXMuYm90dG9tIC0gcmVmUmVjdC5ib3R0b21cbiAgICB9LFxuICAgIGxlZnQ6IHtcbiAgICAgIHdpZHRoOiByZWZSZWN0LmxlZnQgLSBib3VuZGFyaWVzLmxlZnQsXG4gICAgICBoZWlnaHQ6IGJvdW5kYXJpZXMuaGVpZ2h0XG4gICAgfVxuICB9O1xuXG4gIHZhciBzb3J0ZWRBcmVhcyA9IE9iamVjdC5rZXlzKHJlY3RzKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgICBrZXk6IGtleVxuICAgIH0sIHJlY3RzW2tleV0sIHtcbiAgICAgIGFyZWE6IGdldEFyZWEocmVjdHNba2V5XSlcbiAgICB9KTtcbiAgfSkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBiLmFyZWEgLSBhLmFyZWE7XG4gIH0pO1xuXG4gIHZhciBmaWx0ZXJlZEFyZWFzID0gc29ydGVkQXJlYXMuZmlsdGVyKGZ1bmN0aW9uIChfcmVmMikge1xuICAgIHZhciB3aWR0aCA9IF9yZWYyLndpZHRoLFxuICAgICAgICBoZWlnaHQgPSBfcmVmMi5oZWlnaHQ7XG4gICAgcmV0dXJuIHdpZHRoID49IHBvcHBlci5jbGllbnRXaWR0aCAmJiBoZWlnaHQgPj0gcG9wcGVyLmNsaWVudEhlaWdodDtcbiAgfSk7XG5cbiAgdmFyIGNvbXB1dGVkUGxhY2VtZW50ID0gZmlsdGVyZWRBcmVhcy5sZW5ndGggPiAwID8gZmlsdGVyZWRBcmVhc1swXS5rZXkgOiBzb3J0ZWRBcmVhc1swXS5rZXk7XG5cbiAgdmFyIHZhcmlhdGlvbiA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzFdO1xuXG4gIHJldHVybiBjb21wdXRlZFBsYWNlbWVudCArICh2YXJpYXRpb24gPyAnLScgKyB2YXJpYXRpb24gOiAnJyk7XG59XG5cbi8qKlxuICogR2V0IG9mZnNldHMgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7RWxlbWVudH0gcG9wcGVyIC0gdGhlIHBvcHBlciBlbGVtZW50XG4gKiBAcGFyYW0ge0VsZW1lbnR9IHJlZmVyZW5jZSAtIHRoZSByZWZlcmVuY2UgZWxlbWVudCAodGhlIHBvcHBlciB3aWxsIGJlIHJlbGF0aXZlIHRvIHRoaXMpXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGZpeGVkUG9zaXRpb24gLSBpcyBpbiBmaXhlZCBwb3NpdGlvbiBtb2RlXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgb2Zmc2V0cyB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlclxuICovXG5mdW5jdGlvbiBnZXRSZWZlcmVuY2VPZmZzZXRzKHN0YXRlLCBwb3BwZXIsIHJlZmVyZW5jZSkge1xuICB2YXIgZml4ZWRQb3NpdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogbnVsbDtcblxuICB2YXIgY29tbW9uT2Zmc2V0UGFyZW50ID0gZml4ZWRQb3NpdGlvbiA/IGdldEZpeGVkUG9zaXRpb25PZmZzZXRQYXJlbnQocG9wcGVyKSA6IGZpbmRDb21tb25PZmZzZXRQYXJlbnQocG9wcGVyLCByZWZlcmVuY2UpO1xuICByZXR1cm4gZ2V0T2Zmc2V0UmVjdFJlbGF0aXZlVG9BcmJpdHJhcnlOb2RlKHJlZmVyZW5jZSwgY29tbW9uT2Zmc2V0UGFyZW50LCBmaXhlZFBvc2l0aW9uKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG91dGVyIHNpemVzIG9mIHRoZSBnaXZlbiBlbGVtZW50IChvZmZzZXQgc2l6ZSArIG1hcmdpbnMpXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtPYmplY3R9IG9iamVjdCBjb250YWluaW5nIHdpZHRoIGFuZCBoZWlnaHQgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBnZXRPdXRlclNpemVzKGVsZW1lbnQpIHtcbiAgdmFyIHdpbmRvdyA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcbiAgdmFyIHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICB2YXIgeCA9IHBhcnNlRmxvYXQoc3R5bGVzLm1hcmdpblRvcCB8fCAwKSArIHBhcnNlRmxvYXQoc3R5bGVzLm1hcmdpbkJvdHRvbSB8fCAwKTtcbiAgdmFyIHkgPSBwYXJzZUZsb2F0KHN0eWxlcy5tYXJnaW5MZWZ0IHx8IDApICsgcGFyc2VGbG9hdChzdHlsZXMubWFyZ2luUmlnaHQgfHwgMCk7XG4gIHZhciByZXN1bHQgPSB7XG4gICAgd2lkdGg6IGVsZW1lbnQub2Zmc2V0V2lkdGggKyB5LFxuICAgIGhlaWdodDogZWxlbWVudC5vZmZzZXRIZWlnaHQgKyB4XG4gIH07XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogR2V0IHRoZSBvcHBvc2l0ZSBwbGFjZW1lbnQgb2YgdGhlIGdpdmVuIG9uZVxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtTdHJpbmd9IHBsYWNlbWVudFxuICogQHJldHVybnMge1N0cmluZ30gZmxpcHBlZCBwbGFjZW1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHZhciBoYXNoID0geyBsZWZ0OiAncmlnaHQnLCByaWdodDogJ2xlZnQnLCBib3R0b206ICd0b3AnLCB0b3A6ICdib3R0b20nIH07XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBvZmZzZXRzIHRvIHRoZSBwb3BwZXJcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwb3NpdGlvbiAtIENTUyBwb3NpdGlvbiB0aGUgUG9wcGVyIHdpbGwgZ2V0IGFwcGxpZWRcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBvcHBlciAtIHRoZSBwb3BwZXIgZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IHJlZmVyZW5jZU9mZnNldHMgLSB0aGUgcmVmZXJlbmNlIG9mZnNldHMgKHRoZSBwb3BwZXIgd2lsbCBiZSByZWxhdGl2ZSB0byB0aGlzKVxuICogQHBhcmFtIHtTdHJpbmd9IHBsYWNlbWVudCAtIG9uZSBvZiB0aGUgdmFsaWQgcGxhY2VtZW50IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IHBvcHBlck9mZnNldHMgLSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgb2Zmc2V0cyB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlclxuICovXG5mdW5jdGlvbiBnZXRQb3BwZXJPZmZzZXRzKHBvcHBlciwgcmVmZXJlbmNlT2Zmc2V0cywgcGxhY2VtZW50KSB7XG4gIHBsYWNlbWVudCA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuXG4gIC8vIEdldCBwb3BwZXIgbm9kZSBzaXplc1xuICB2YXIgcG9wcGVyUmVjdCA9IGdldE91dGVyU2l6ZXMocG9wcGVyKTtcblxuICAvLyBBZGQgcG9zaXRpb24sIHdpZHRoIGFuZCBoZWlnaHQgdG8gb3VyIG9mZnNldHMgb2JqZWN0XG4gIHZhciBwb3BwZXJPZmZzZXRzID0ge1xuICAgIHdpZHRoOiBwb3BwZXJSZWN0LndpZHRoLFxuICAgIGhlaWdodDogcG9wcGVyUmVjdC5oZWlnaHRcbiAgfTtcblxuICAvLyBkZXBlbmRpbmcgYnkgdGhlIHBvcHBlciBwbGFjZW1lbnQgd2UgaGF2ZSB0byBjb21wdXRlIGl0cyBvZmZzZXRzIHNsaWdodGx5IGRpZmZlcmVudGx5XG4gIHZhciBpc0hvcml6ID0gWydyaWdodCcsICdsZWZ0J10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMTtcbiAgdmFyIG1haW5TaWRlID0gaXNIb3JpeiA/ICd0b3AnIDogJ2xlZnQnO1xuICB2YXIgc2Vjb25kYXJ5U2lkZSA9IGlzSG9yaXogPyAnbGVmdCcgOiAndG9wJztcbiAgdmFyIG1lYXN1cmVtZW50ID0gaXNIb3JpeiA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgdmFyIHNlY29uZGFyeU1lYXN1cmVtZW50ID0gIWlzSG9yaXogPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgcG9wcGVyT2Zmc2V0c1ttYWluU2lkZV0gPSByZWZlcmVuY2VPZmZzZXRzW21haW5TaWRlXSArIHJlZmVyZW5jZU9mZnNldHNbbWVhc3VyZW1lbnRdIC8gMiAtIHBvcHBlclJlY3RbbWVhc3VyZW1lbnRdIC8gMjtcbiAgaWYgKHBsYWNlbWVudCA9PT0gc2Vjb25kYXJ5U2lkZSkge1xuICAgIHBvcHBlck9mZnNldHNbc2Vjb25kYXJ5U2lkZV0gPSByZWZlcmVuY2VPZmZzZXRzW3NlY29uZGFyeVNpZGVdIC0gcG9wcGVyUmVjdFtzZWNvbmRhcnlNZWFzdXJlbWVudF07XG4gIH0gZWxzZSB7XG4gICAgcG9wcGVyT2Zmc2V0c1tzZWNvbmRhcnlTaWRlXSA9IHJlZmVyZW5jZU9mZnNldHNbZ2V0T3Bwb3NpdGVQbGFjZW1lbnQoc2Vjb25kYXJ5U2lkZSldO1xuICB9XG5cbiAgcmV0dXJuIHBvcHBlck9mZnNldHM7XG59XG5cbi8qKlxuICogTWltaWNzIHRoZSBgZmluZGAgbWV0aG9kIG9mIEFycmF5XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0FycmF5fSBhcnJcbiAqIEBhcmd1bWVudCBwcm9wXG4gKiBAYXJndW1lbnQgdmFsdWVcbiAqIEByZXR1cm5zIGluZGV4IG9yIC0xXG4gKi9cbmZ1bmN0aW9uIGZpbmQoYXJyLCBjaGVjaykge1xuICAvLyB1c2UgbmF0aXZlIGZpbmQgaWYgc3VwcG9ydGVkXG4gIGlmIChBcnJheS5wcm90b3R5cGUuZmluZCkge1xuICAgIHJldHVybiBhcnIuZmluZChjaGVjayk7XG4gIH1cblxuICAvLyB1c2UgYGZpbHRlcmAgdG8gb2J0YWluIHRoZSBzYW1lIGJlaGF2aW9yIG9mIGBmaW5kYFxuICByZXR1cm4gYXJyLmZpbHRlcihjaGVjaylbMF07XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hpbmcgb2JqZWN0XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0FycmF5fSBhcnJcbiAqIEBhcmd1bWVudCBwcm9wXG4gKiBAYXJndW1lbnQgdmFsdWVcbiAqIEByZXR1cm5zIGluZGV4IG9yIC0xXG4gKi9cbmZ1bmN0aW9uIGZpbmRJbmRleChhcnIsIHByb3AsIHZhbHVlKSB7XG4gIC8vIHVzZSBuYXRpdmUgZmluZEluZGV4IGlmIHN1cHBvcnRlZFxuICBpZiAoQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleCkge1xuICAgIHJldHVybiBhcnIuZmluZEluZGV4KGZ1bmN0aW9uIChjdXIpIHtcbiAgICAgIHJldHVybiBjdXJbcHJvcF0gPT09IHZhbHVlO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gdXNlIGBmaW5kYCArIGBpbmRleE9mYCBpZiBgZmluZEluZGV4YCBpc24ndCBzdXBwb3J0ZWRcbiAgdmFyIG1hdGNoID0gZmluZChhcnIsIGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqW3Byb3BdID09PSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiBhcnIuaW5kZXhPZihtYXRjaCk7XG59XG5cbi8qKlxuICogTG9vcCB0cm91Z2ggdGhlIGxpc3Qgb2YgbW9kaWZpZXJzIGFuZCBydW4gdGhlbSBpbiBvcmRlcixcbiAqIGVhY2ggb2YgdGhlbSB3aWxsIHRoZW4gZWRpdCB0aGUgZGF0YSBvYmplY3QuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge2RhdGFPYmplY3R9IGRhdGFcbiAqIEBwYXJhbSB7QXJyYXl9IG1vZGlmaWVyc1xuICogQHBhcmFtIHtTdHJpbmd9IGVuZHMgLSBPcHRpb25hbCBtb2RpZmllciBuYW1lIHVzZWQgYXMgc3RvcHBlclxuICogQHJldHVybnMge2RhdGFPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHJ1bk1vZGlmaWVycyhtb2RpZmllcnMsIGRhdGEsIGVuZHMpIHtcbiAgdmFyIG1vZGlmaWVyc1RvUnVuID0gZW5kcyA9PT0gdW5kZWZpbmVkID8gbW9kaWZpZXJzIDogbW9kaWZpZXJzLnNsaWNlKDAsIGZpbmRJbmRleChtb2RpZmllcnMsICduYW1lJywgZW5kcykpO1xuXG4gIG1vZGlmaWVyc1RvUnVuLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgaWYgKG1vZGlmaWVyWydmdW5jdGlvbiddKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGRvdC1ub3RhdGlvblxuICAgICAgY29uc29sZS53YXJuKCdgbW9kaWZpZXIuZnVuY3Rpb25gIGlzIGRlcHJlY2F0ZWQsIHVzZSBgbW9kaWZpZXIuZm5gIScpO1xuICAgIH1cbiAgICB2YXIgZm4gPSBtb2RpZmllclsnZnVuY3Rpb24nXSB8fCBtb2RpZmllci5mbjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICBpZiAobW9kaWZpZXIuZW5hYmxlZCAmJiBpc0Z1bmN0aW9uKGZuKSkge1xuICAgICAgLy8gQWRkIHByb3BlcnRpZXMgdG8gb2Zmc2V0cyB0byBtYWtlIHRoZW0gYSBjb21wbGV0ZSBjbGllbnRSZWN0IG9iamVjdFxuICAgICAgLy8gd2UgZG8gdGhpcyBiZWZvcmUgZWFjaCBtb2RpZmllciB0byBtYWtlIHN1cmUgdGhlIHByZXZpb3VzIG9uZSBkb2Vzbid0XG4gICAgICAvLyBtZXNzIHdpdGggdGhlc2UgdmFsdWVzXG4gICAgICBkYXRhLm9mZnNldHMucG9wcGVyID0gZ2V0Q2xpZW50UmVjdChkYXRhLm9mZnNldHMucG9wcGVyKTtcbiAgICAgIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UgPSBnZXRDbGllbnRSZWN0KGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UpO1xuXG4gICAgICBkYXRhID0gZm4oZGF0YSwgbW9kaWZpZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcHBlciwgY29tcHV0aW5nIHRoZSBuZXcgb2Zmc2V0cyBhbmQgYXBwbHlpbmdcbiAqIHRoZSBuZXcgc3R5bGUuPGJyIC8+XG4gKiBQcmVmZXIgYHNjaGVkdWxlVXBkYXRlYCBvdmVyIGB1cGRhdGVgIGJlY2F1c2Ugb2YgcGVyZm9ybWFuY2UgcmVhc29ucy5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXJcbiAqL1xuZnVuY3Rpb24gdXBkYXRlKCkge1xuICAvLyBpZiBwb3BwZXIgaXMgZGVzdHJveWVkLCBkb24ndCBwZXJmb3JtIGFueSBmdXJ0aGVyIHVwZGF0ZVxuICBpZiAodGhpcy5zdGF0ZS5pc0Rlc3Ryb3llZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBkYXRhID0ge1xuICAgIGluc3RhbmNlOiB0aGlzLFxuICAgIHN0eWxlczoge30sXG4gICAgYXJyb3dTdHlsZXM6IHt9LFxuICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgIGZsaXBwZWQ6IGZhbHNlLFxuICAgIG9mZnNldHM6IHt9XG4gIH07XG5cbiAgLy8gY29tcHV0ZSByZWZlcmVuY2UgZWxlbWVudCBvZmZzZXRzXG4gIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UgPSBnZXRSZWZlcmVuY2VPZmZzZXRzKHRoaXMuc3RhdGUsIHRoaXMucG9wcGVyLCB0aGlzLnJlZmVyZW5jZSwgdGhpcy5vcHRpb25zLnBvc2l0aW9uRml4ZWQpO1xuXG4gIC8vIGNvbXB1dGUgYXV0byBwbGFjZW1lbnQsIHN0b3JlIHBsYWNlbWVudCBpbnNpZGUgdGhlIGRhdGEgb2JqZWN0LFxuICAvLyBtb2RpZmllcnMgd2lsbCBiZSBhYmxlIHRvIGVkaXQgYHBsYWNlbWVudGAgaWYgbmVlZGVkXG4gIC8vIGFuZCByZWZlciB0byBvcmlnaW5hbFBsYWNlbWVudCB0byBrbm93IHRoZSBvcmlnaW5hbCB2YWx1ZVxuICBkYXRhLnBsYWNlbWVudCA9IGNvbXB1dGVBdXRvUGxhY2VtZW50KHRoaXMub3B0aW9ucy5wbGFjZW1lbnQsIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UsIHRoaXMucG9wcGVyLCB0aGlzLnJlZmVyZW5jZSwgdGhpcy5vcHRpb25zLm1vZGlmaWVycy5mbGlwLmJvdW5kYXJpZXNFbGVtZW50LCB0aGlzLm9wdGlvbnMubW9kaWZpZXJzLmZsaXAucGFkZGluZyk7XG5cbiAgLy8gc3RvcmUgdGhlIGNvbXB1dGVkIHBsYWNlbWVudCBpbnNpZGUgYG9yaWdpbmFsUGxhY2VtZW50YFxuICBkYXRhLm9yaWdpbmFsUGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQ7XG5cbiAgZGF0YS5wb3NpdGlvbkZpeGVkID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uRml4ZWQ7XG5cbiAgLy8gY29tcHV0ZSB0aGUgcG9wcGVyIG9mZnNldHNcbiAgZGF0YS5vZmZzZXRzLnBvcHBlciA9IGdldFBvcHBlck9mZnNldHModGhpcy5wb3BwZXIsIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UsIGRhdGEucGxhY2VtZW50KTtcblxuICBkYXRhLm9mZnNldHMucG9wcGVyLnBvc2l0aW9uID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uRml4ZWQgPyAnZml4ZWQnIDogJ2Fic29sdXRlJztcblxuICAvLyBydW4gdGhlIG1vZGlmaWVyc1xuICBkYXRhID0gcnVuTW9kaWZpZXJzKHRoaXMubW9kaWZpZXJzLCBkYXRhKTtcblxuICAvLyB0aGUgZmlyc3QgYHVwZGF0ZWAgd2lsbCBjYWxsIGBvbkNyZWF0ZWAgY2FsbGJhY2tcbiAgLy8gdGhlIG90aGVyIG9uZXMgd2lsbCBjYWxsIGBvblVwZGF0ZWAgY2FsbGJhY2tcbiAgaWYgKCF0aGlzLnN0YXRlLmlzQ3JlYXRlZCkge1xuICAgIHRoaXMuc3RhdGUuaXNDcmVhdGVkID0gdHJ1ZTtcbiAgICB0aGlzLm9wdGlvbnMub25DcmVhdGUoZGF0YSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5vcHRpb25zLm9uVXBkYXRlKGRhdGEpO1xuICB9XG59XG5cbi8qKlxuICogSGVscGVyIHVzZWQgdG8ga25vdyBpZiB0aGUgZ2l2ZW4gbW9kaWZpZXIgaXMgZW5hYmxlZC5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBpc01vZGlmaWVyRW5hYmxlZChtb2RpZmllcnMsIG1vZGlmaWVyTmFtZSkge1xuICByZXR1cm4gbW9kaWZpZXJzLnNvbWUoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgICAgZW5hYmxlZCA9IF9yZWYuZW5hYmxlZDtcbiAgICByZXR1cm4gZW5hYmxlZCAmJiBuYW1lID09PSBtb2RpZmllck5hbWU7XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcHJlZml4ZWQgc3VwcG9ydGVkIHByb3BlcnR5IG5hbWVcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBwcm9wZXJ0eSAoY2FtZWxDYXNlKVxuICogQHJldHVybnMge1N0cmluZ30gcHJlZml4ZWQgcHJvcGVydHkgKGNhbWVsQ2FzZSBvciBQYXNjYWxDYXNlLCBkZXBlbmRpbmcgb24gdGhlIHZlbmRvciBwcmVmaXgpXG4gKi9cbmZ1bmN0aW9uIGdldFN1cHBvcnRlZFByb3BlcnR5TmFtZShwcm9wZXJ0eSkge1xuICB2YXIgcHJlZml4ZXMgPSBbZmFsc2UsICdtcycsICdXZWJraXQnLCAnTW96JywgJ08nXTtcbiAgdmFyIHVwcGVyUHJvcCA9IHByb3BlcnR5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcHJvcGVydHkuc2xpY2UoMSk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmVmaXhlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwcmVmaXggPSBwcmVmaXhlc1tpXTtcbiAgICB2YXIgdG9DaGVjayA9IHByZWZpeCA/ICcnICsgcHJlZml4ICsgdXBwZXJQcm9wIDogcHJvcGVydHk7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudC5ib2R5LnN0eWxlW3RvQ2hlY2tdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRvQ2hlY2s7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBwb3BwZXIuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyXG4gKi9cbmZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gIHRoaXMuc3RhdGUuaXNEZXN0cm95ZWQgPSB0cnVlO1xuXG4gIC8vIHRvdWNoIERPTSBvbmx5IGlmIGBhcHBseVN0eWxlYCBtb2RpZmllciBpcyBlbmFibGVkXG4gIGlmIChpc01vZGlmaWVyRW5hYmxlZCh0aGlzLm1vZGlmaWVycywgJ2FwcGx5U3R5bGUnKSkge1xuICAgIHRoaXMucG9wcGVyLnJlbW92ZUF0dHJpYnV0ZSgneC1wbGFjZW1lbnQnKTtcbiAgICB0aGlzLnBvcHBlci5zdHlsZS5wb3NpdGlvbiA9ICcnO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlLnRvcCA9ICcnO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlLmxlZnQgPSAnJztcbiAgICB0aGlzLnBvcHBlci5zdHlsZS5yaWdodCA9ICcnO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlLmJvdHRvbSA9ICcnO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlLndpbGxDaGFuZ2UgPSAnJztcbiAgICB0aGlzLnBvcHBlci5zdHlsZVtnZXRTdXBwb3J0ZWRQcm9wZXJ0eU5hbWUoJ3RyYW5zZm9ybScpXSA9ICcnO1xuICB9XG5cbiAgdGhpcy5kaXNhYmxlRXZlbnRMaXN0ZW5lcnMoKTtcblxuICAvLyByZW1vdmUgdGhlIHBvcHBlciBpZiB1c2VyIGV4cGxpY2l0eSBhc2tlZCBmb3IgdGhlIGRlbGV0aW9uIG9uIGRlc3Ryb3lcbiAgLy8gZG8gbm90IHVzZSBgcmVtb3ZlYCBiZWNhdXNlIElFMTEgZG9lc24ndCBzdXBwb3J0IGl0XG4gIGlmICh0aGlzLm9wdGlvbnMucmVtb3ZlT25EZXN0cm95KSB7XG4gICAgdGhpcy5wb3BwZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnBvcHBlcik7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogR2V0IHRoZSB3aW5kb3cgYXNzb2NpYXRlZCB3aXRoIHRoZSBlbGVtZW50XG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtXaW5kb3d9XG4gKi9cbmZ1bmN0aW9uIGdldFdpbmRvdyhlbGVtZW50KSB7XG4gIHZhciBvd25lckRvY3VtZW50ID0gZWxlbWVudC5vd25lckRvY3VtZW50O1xuICByZXR1cm4gb3duZXJEb2N1bWVudCA/IG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgOiB3aW5kb3c7XG59XG5cbmZ1bmN0aW9uIGF0dGFjaFRvU2Nyb2xsUGFyZW50cyhzY3JvbGxQYXJlbnQsIGV2ZW50LCBjYWxsYmFjaywgc2Nyb2xsUGFyZW50cykge1xuICB2YXIgaXNCb2R5ID0gc2Nyb2xsUGFyZW50Lm5vZGVOYW1lID09PSAnQk9EWSc7XG4gIHZhciB0YXJnZXQgPSBpc0JvZHkgPyBzY3JvbGxQYXJlbnQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyA6IHNjcm9sbFBhcmVudDtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGNhbGxiYWNrLCB7IHBhc3NpdmU6IHRydWUgfSk7XG5cbiAgaWYgKCFpc0JvZHkpIHtcbiAgICBhdHRhY2hUb1Njcm9sbFBhcmVudHMoZ2V0U2Nyb2xsUGFyZW50KHRhcmdldC5wYXJlbnROb2RlKSwgZXZlbnQsIGNhbGxiYWNrLCBzY3JvbGxQYXJlbnRzKTtcbiAgfVxuICBzY3JvbGxQYXJlbnRzLnB1c2godGFyZ2V0KTtcbn1cblxuLyoqXG4gKiBTZXR1cCBuZWVkZWQgZXZlbnQgbGlzdGVuZXJzIHVzZWQgdG8gdXBkYXRlIHRoZSBwb3BwZXIgcG9zaXRpb25cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNldHVwRXZlbnRMaXN0ZW5lcnMocmVmZXJlbmNlLCBvcHRpb25zLCBzdGF0ZSwgdXBkYXRlQm91bmQpIHtcbiAgLy8gUmVzaXplIGV2ZW50IGxpc3RlbmVyIG9uIHdpbmRvd1xuICBzdGF0ZS51cGRhdGVCb3VuZCA9IHVwZGF0ZUJvdW5kO1xuICBnZXRXaW5kb3cocmVmZXJlbmNlKS5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBzdGF0ZS51cGRhdGVCb3VuZCwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuXG4gIC8vIFNjcm9sbCBldmVudCBsaXN0ZW5lciBvbiBzY3JvbGwgcGFyZW50c1xuICB2YXIgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbFBhcmVudChyZWZlcmVuY2UpO1xuICBhdHRhY2hUb1Njcm9sbFBhcmVudHMoc2Nyb2xsRWxlbWVudCwgJ3Njcm9sbCcsIHN0YXRlLnVwZGF0ZUJvdW5kLCBzdGF0ZS5zY3JvbGxQYXJlbnRzKTtcbiAgc3RhdGUuc2Nyb2xsRWxlbWVudCA9IHNjcm9sbEVsZW1lbnQ7XG4gIHN0YXRlLmV2ZW50c0VuYWJsZWQgPSB0cnVlO1xuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBJdCB3aWxsIGFkZCByZXNpemUvc2Nyb2xsIGV2ZW50cyBhbmQgc3RhcnQgcmVjYWxjdWxhdGluZ1xuICogcG9zaXRpb24gb2YgdGhlIHBvcHBlciBlbGVtZW50IHdoZW4gdGhleSBhcmUgdHJpZ2dlcmVkLlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG5mdW5jdGlvbiBlbmFibGVFdmVudExpc3RlbmVycygpIHtcbiAgaWYgKCF0aGlzLnN0YXRlLmV2ZW50c0VuYWJsZWQpIHtcbiAgICB0aGlzLnN0YXRlID0gc2V0dXBFdmVudExpc3RlbmVycyh0aGlzLnJlZmVyZW5jZSwgdGhpcy5vcHRpb25zLCB0aGlzLnN0YXRlLCB0aGlzLnNjaGVkdWxlVXBkYXRlKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMgdXNlZCB0byB1cGRhdGUgdGhlIHBvcHBlciBwb3NpdGlvblxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcnMocmVmZXJlbmNlLCBzdGF0ZSkge1xuICAvLyBSZW1vdmUgcmVzaXplIGV2ZW50IGxpc3RlbmVyIG9uIHdpbmRvd1xuICBnZXRXaW5kb3cocmVmZXJlbmNlKS5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBzdGF0ZS51cGRhdGVCb3VuZCk7XG5cbiAgLy8gUmVtb3ZlIHNjcm9sbCBldmVudCBsaXN0ZW5lciBvbiBzY3JvbGwgcGFyZW50c1xuICBzdGF0ZS5zY3JvbGxQYXJlbnRzLmZvckVhY2goZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzdGF0ZS51cGRhdGVCb3VuZCk7XG4gIH0pO1xuXG4gIC8vIFJlc2V0IHN0YXRlXG4gIHN0YXRlLnVwZGF0ZUJvdW5kID0gbnVsbDtcbiAgc3RhdGUuc2Nyb2xsUGFyZW50cyA9IFtdO1xuICBzdGF0ZS5zY3JvbGxFbGVtZW50ID0gbnVsbDtcbiAgc3RhdGUuZXZlbnRzRW5hYmxlZCA9IGZhbHNlO1xuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogSXQgd2lsbCByZW1vdmUgcmVzaXplL3Njcm9sbCBldmVudHMgYW5kIHdvbid0IHJlY2FsY3VsYXRlIHBvcHBlciBwb3NpdGlvblxuICogd2hlbiB0aGV5IGFyZSB0cmlnZ2VyZWQuIEl0IGFsc28gd29uJ3QgdHJpZ2dlciBgb25VcGRhdGVgIGNhbGxiYWNrIGFueW1vcmUsXG4gKiB1bmxlc3MgeW91IGNhbGwgYHVwZGF0ZWAgbWV0aG9kIG1hbnVhbGx5LlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG5mdW5jdGlvbiBkaXNhYmxlRXZlbnRMaXN0ZW5lcnMoKSB7XG4gIGlmICh0aGlzLnN0YXRlLmV2ZW50c0VuYWJsZWQpIHtcbiAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnNjaGVkdWxlVXBkYXRlKTtcbiAgICB0aGlzLnN0YXRlID0gcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy5yZWZlcmVuY2UsIHRoaXMuc3RhdGUpO1xuICB9XG59XG5cbi8qKlxuICogVGVsbHMgaWYgYSBnaXZlbiBpbnB1dCBpcyBhIG51bWJlclxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHsqfSBpbnB1dCB0byBjaGVja1xuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNOdW1lcmljKG4pIHtcbiAgcmV0dXJuIG4gIT09ICcnICYmICFpc05hTihwYXJzZUZsb2F0KG4pKSAmJiBpc0Zpbml0ZShuKTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIHN0eWxlIHRvIHRoZSBnaXZlbiBwb3BwZXJcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gYXBwbHkgdGhlIHN0eWxlIHRvXG4gKiBAYXJndW1lbnQge09iamVjdH0gc3R5bGVzXG4gKiBPYmplY3Qgd2l0aCBhIGxpc3Qgb2YgcHJvcGVydGllcyBhbmQgdmFsdWVzIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgZWxlbWVudFxuICovXG5mdW5jdGlvbiBzZXRTdHlsZXMoZWxlbWVudCwgc3R5bGVzKSB7XG4gIE9iamVjdC5rZXlzKHN0eWxlcykuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgIHZhciB1bml0ID0gJyc7XG4gICAgLy8gYWRkIHVuaXQgaWYgdGhlIHZhbHVlIGlzIG51bWVyaWMgYW5kIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nXG4gICAgaWYgKFsnd2lkdGgnLCAnaGVpZ2h0JywgJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddLmluZGV4T2YocHJvcCkgIT09IC0xICYmIGlzTnVtZXJpYyhzdHlsZXNbcHJvcF0pKSB7XG4gICAgICB1bml0ID0gJ3B4JztcbiAgICB9XG4gICAgZWxlbWVudC5zdHlsZVtwcm9wXSA9IHN0eWxlc1twcm9wXSArIHVuaXQ7XG4gIH0pO1xufVxuXG4vKipcbiAqIFNldCB0aGUgYXR0cmlidXRlcyB0byB0aGUgZ2l2ZW4gcG9wcGVyXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGFwcGx5IHRoZSBhdHRyaWJ1dGVzIHRvXG4gKiBAYXJndW1lbnQge09iamVjdH0gc3R5bGVzXG4gKiBPYmplY3Qgd2l0aCBhIGxpc3Qgb2YgcHJvcGVydGllcyBhbmQgdmFsdWVzIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgZWxlbWVudFxuICovXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIGF0dHJpYnV0ZXMpIHtcbiAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgIHZhciB2YWx1ZSA9IGF0dHJpYnV0ZXNbcHJvcF07XG4gICAgaWYgKHZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUocHJvcCwgYXR0cmlidXRlc1twcm9wXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHByb3ApO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgYHVwZGF0ZWAgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YS5zdHlsZXMgLSBMaXN0IG9mIHN0eWxlIHByb3BlcnRpZXMgLSB2YWx1ZXMgdG8gYXBwbHkgdG8gcG9wcGVyIGVsZW1lbnRcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhLmF0dHJpYnV0ZXMgLSBMaXN0IG9mIGF0dHJpYnV0ZSBwcm9wZXJ0aWVzIC0gdmFsdWVzIHRvIGFwcGx5IHRvIHBvcHBlciBlbGVtZW50XG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgc2FtZSBkYXRhIG9iamVjdFxuICovXG5mdW5jdGlvbiBhcHBseVN0eWxlKGRhdGEpIHtcbiAgLy8gYW55IHByb3BlcnR5IHByZXNlbnQgaW4gYGRhdGEuc3R5bGVzYCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlcixcbiAgLy8gaW4gdGhpcyB3YXkgd2UgY2FuIG1ha2UgdGhlIDNyZCBwYXJ0eSBtb2RpZmllcnMgYWRkIGN1c3RvbSBzdHlsZXMgdG8gaXRcbiAgLy8gQmUgYXdhcmUsIG1vZGlmaWVycyBjb3VsZCBvdmVycmlkZSB0aGUgcHJvcGVydGllcyBkZWZpbmVkIGluIHRoZSBwcmV2aW91c1xuICAvLyBsaW5lcyBvZiB0aGlzIG1vZGlmaWVyIVxuICBzZXRTdHlsZXMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEuc3R5bGVzKTtcblxuICAvLyBhbnkgcHJvcGVydHkgcHJlc2VudCBpbiBgZGF0YS5hdHRyaWJ1dGVzYCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlcixcbiAgLy8gdGhleSB3aWxsIGJlIHNldCBhcyBIVE1MIGF0dHJpYnV0ZXMgb2YgdGhlIGVsZW1lbnRcbiAgc2V0QXR0cmlidXRlcyhkYXRhLmluc3RhbmNlLnBvcHBlciwgZGF0YS5hdHRyaWJ1dGVzKTtcblxuICAvLyBpZiBhcnJvd0VsZW1lbnQgaXMgZGVmaW5lZCBhbmQgYXJyb3dTdHlsZXMgaGFzIHNvbWUgcHJvcGVydGllc1xuICBpZiAoZGF0YS5hcnJvd0VsZW1lbnQgJiYgT2JqZWN0LmtleXMoZGF0YS5hcnJvd1N0eWxlcykubGVuZ3RoKSB7XG4gICAgc2V0U3R5bGVzKGRhdGEuYXJyb3dFbGVtZW50LCBkYXRhLmFycm93U3R5bGVzKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIFNldCB0aGUgeC1wbGFjZW1lbnQgYXR0cmlidXRlIGJlZm9yZSBldmVyeXRoaW5nIGVsc2UgYmVjYXVzZSBpdCBjb3VsZCBiZSB1c2VkXG4gKiB0byBhZGQgbWFyZ2lucyB0byB0aGUgcG9wcGVyIG1hcmdpbnMgbmVlZHMgdG8gYmUgY2FsY3VsYXRlZCB0byBnZXQgdGhlXG4gKiBjb3JyZWN0IHBvcHBlciBvZmZzZXRzLlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5tb2RpZmllcnNcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgZWxlbWVudCB1c2VkIHRvIHBvc2l0aW9uIHRoZSBwb3BwZXJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBvcHBlciAtIFRoZSBIVE1MIGVsZW1lbnQgdXNlZCBhcyBwb3BwZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUG9wcGVyLmpzIG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gYXBwbHlTdHlsZU9uTG9hZChyZWZlcmVuY2UsIHBvcHBlciwgb3B0aW9ucywgbW9kaWZpZXJPcHRpb25zLCBzdGF0ZSkge1xuICAvLyBjb21wdXRlIHJlZmVyZW5jZSBlbGVtZW50IG9mZnNldHNcbiAgdmFyIHJlZmVyZW5jZU9mZnNldHMgPSBnZXRSZWZlcmVuY2VPZmZzZXRzKHN0YXRlLCBwb3BwZXIsIHJlZmVyZW5jZSwgb3B0aW9ucy5wb3NpdGlvbkZpeGVkKTtcblxuICAvLyBjb21wdXRlIGF1dG8gcGxhY2VtZW50LCBzdG9yZSBwbGFjZW1lbnQgaW5zaWRlIHRoZSBkYXRhIG9iamVjdCxcbiAgLy8gbW9kaWZpZXJzIHdpbGwgYmUgYWJsZSB0byBlZGl0IGBwbGFjZW1lbnRgIGlmIG5lZWRlZFxuICAvLyBhbmQgcmVmZXIgdG8gb3JpZ2luYWxQbGFjZW1lbnQgdG8ga25vdyB0aGUgb3JpZ2luYWwgdmFsdWVcbiAgdmFyIHBsYWNlbWVudCA9IGNvbXB1dGVBdXRvUGxhY2VtZW50KG9wdGlvbnMucGxhY2VtZW50LCByZWZlcmVuY2VPZmZzZXRzLCBwb3BwZXIsIHJlZmVyZW5jZSwgb3B0aW9ucy5tb2RpZmllcnMuZmxpcC5ib3VuZGFyaWVzRWxlbWVudCwgb3B0aW9ucy5tb2RpZmllcnMuZmxpcC5wYWRkaW5nKTtcblxuICBwb3BwZXIuc2V0QXR0cmlidXRlKCd4LXBsYWNlbWVudCcsIHBsYWNlbWVudCk7XG5cbiAgLy8gQXBwbHkgYHBvc2l0aW9uYCB0byBwb3BwZXIgYmVmb3JlIGFueXRoaW5nIGVsc2UgYmVjYXVzZVxuICAvLyB3aXRob3V0IHRoZSBwb3NpdGlvbiBhcHBsaWVkIHdlIGNhbid0IGd1YXJhbnRlZSBjb3JyZWN0IGNvbXB1dGF0aW9uc1xuICBzZXRTdHlsZXMocG9wcGVyLCB7IHBvc2l0aW9uOiBvcHRpb25zLnBvc2l0aW9uRml4ZWQgPyAnZml4ZWQnIDogJ2Fic29sdXRlJyB9KTtcblxuICByZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAqIEBhcmd1bWVudCB7Qm9vbGVhbn0gc2hvdWxkUm91bmQgLSBJZiB0aGUgb2Zmc2V0cyBzaG91bGQgYmUgcm91bmRlZCBhdCBhbGxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBwb3BwZXIncyBwb3NpdGlvbiBvZmZzZXRzIHJvdW5kZWRcbiAqXG4gKiBUaGUgdGFsZSBvZiBwaXhlbC1wZXJmZWN0IHBvc2l0aW9uaW5nLiBJdCdzIHN0aWxsIG5vdCAxMDAlIHBlcmZlY3QsIGJ1dCBhc1xuICogZ29vZCBhcyBpdCBjYW4gYmUgd2l0aGluIHJlYXNvbi5cbiAqIERpc2N1c3Npb24gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL0ZlelZyYXN0YS9wb3BwZXIuanMvcHVsbC83MTVcbiAqXG4gKiBMb3cgRFBJIHNjcmVlbnMgY2F1c2UgYSBwb3BwZXIgdG8gYmUgYmx1cnJ5IGlmIG5vdCB1c2luZyBmdWxsIHBpeGVscyAoU2FmYXJpXG4gKiBhcyB3ZWxsIG9uIEhpZ2ggRFBJIHNjcmVlbnMpLlxuICpcbiAqIEZpcmVmb3ggcHJlZmVycyBubyByb3VuZGluZyBmb3IgcG9zaXRpb25pbmcgYW5kIGRvZXMgbm90IGhhdmUgYmx1cnJpbmVzcyBvblxuICogaGlnaCBEUEkgc2NyZWVucy5cbiAqXG4gKiBPbmx5IGhvcml6b250YWwgcGxhY2VtZW50IGFuZCBsZWZ0L3JpZ2h0IHZhbHVlcyBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuXG4gKi9cbmZ1bmN0aW9uIGdldFJvdW5kZWRPZmZzZXRzKGRhdGEsIHNob3VsZFJvdW5kKSB7XG4gIHZhciBfZGF0YSRvZmZzZXRzID0gZGF0YS5vZmZzZXRzLFxuICAgICAgcG9wcGVyID0gX2RhdGEkb2Zmc2V0cy5wb3BwZXIsXG4gICAgICByZWZlcmVuY2UgPSBfZGF0YSRvZmZzZXRzLnJlZmVyZW5jZTtcbiAgdmFyIHJvdW5kID0gTWF0aC5yb3VuZCxcbiAgICAgIGZsb29yID0gTWF0aC5mbG9vcjtcblxuICB2YXIgbm9Sb3VuZCA9IGZ1bmN0aW9uIG5vUm91bmQodikge1xuICAgIHJldHVybiB2O1xuICB9O1xuXG4gIHZhciByZWZlcmVuY2VXaWR0aCA9IHJvdW5kKHJlZmVyZW5jZS53aWR0aCk7XG4gIHZhciBwb3BwZXJXaWR0aCA9IHJvdW5kKHBvcHBlci53aWR0aCk7XG5cbiAgdmFyIGlzVmVydGljYWwgPSBbJ2xlZnQnLCAncmlnaHQnXS5pbmRleE9mKGRhdGEucGxhY2VtZW50KSAhPT0gLTE7XG4gIHZhciBpc1ZhcmlhdGlvbiA9IGRhdGEucGxhY2VtZW50LmluZGV4T2YoJy0nKSAhPT0gLTE7XG4gIHZhciBzYW1lV2lkdGhQYXJpdHkgPSByZWZlcmVuY2VXaWR0aCAlIDIgPT09IHBvcHBlcldpZHRoICUgMjtcbiAgdmFyIGJvdGhPZGRXaWR0aCA9IHJlZmVyZW5jZVdpZHRoICUgMiA9PT0gMSAmJiBwb3BwZXJXaWR0aCAlIDIgPT09IDE7XG5cbiAgdmFyIGhvcml6b250YWxUb0ludGVnZXIgPSAhc2hvdWxkUm91bmQgPyBub1JvdW5kIDogaXNWZXJ0aWNhbCB8fCBpc1ZhcmlhdGlvbiB8fCBzYW1lV2lkdGhQYXJpdHkgPyByb3VuZCA6IGZsb29yO1xuICB2YXIgdmVydGljYWxUb0ludGVnZXIgPSAhc2hvdWxkUm91bmQgPyBub1JvdW5kIDogcm91bmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBsZWZ0OiBob3Jpem9udGFsVG9JbnRlZ2VyKGJvdGhPZGRXaWR0aCAmJiAhaXNWYXJpYXRpb24gJiYgc2hvdWxkUm91bmQgPyBwb3BwZXIubGVmdCAtIDEgOiBwb3BwZXIubGVmdCksXG4gICAgdG9wOiB2ZXJ0aWNhbFRvSW50ZWdlcihwb3BwZXIudG9wKSxcbiAgICBib3R0b206IHZlcnRpY2FsVG9JbnRlZ2VyKHBvcHBlci5ib3R0b20pLFxuICAgIHJpZ2h0OiBob3Jpem9udGFsVG9JbnRlZ2VyKHBvcHBlci5yaWdodClcbiAgfTtcbn1cblxudmFyIGlzRmlyZWZveCA9IGlzQnJvd3NlciAmJiAvRmlyZWZveC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgYHVwZGF0ZWAgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVTdHlsZShkYXRhLCBvcHRpb25zKSB7XG4gIHZhciB4ID0gb3B0aW9ucy54LFxuICAgICAgeSA9IG9wdGlvbnMueTtcbiAgdmFyIHBvcHBlciA9IGRhdGEub2Zmc2V0cy5wb3BwZXI7XG5cbiAgLy8gUmVtb3ZlIHRoaXMgbGVnYWN5IHN1cHBvcnQgaW4gUG9wcGVyLmpzIHYyXG5cbiAgdmFyIGxlZ2FjeUdwdUFjY2VsZXJhdGlvbk9wdGlvbiA9IGZpbmQoZGF0YS5pbnN0YW5jZS5tb2RpZmllcnMsIGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIHJldHVybiBtb2RpZmllci5uYW1lID09PSAnYXBwbHlTdHlsZSc7XG4gIH0pLmdwdUFjY2VsZXJhdGlvbjtcbiAgaWYgKGxlZ2FjeUdwdUFjY2VsZXJhdGlvbk9wdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc29sZS53YXJuKCdXQVJOSU5HOiBgZ3B1QWNjZWxlcmF0aW9uYCBvcHRpb24gbW92ZWQgdG8gYGNvbXB1dGVTdHlsZWAgbW9kaWZpZXIgYW5kIHdpbGwgbm90IGJlIHN1cHBvcnRlZCBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgUG9wcGVyLmpzIScpO1xuICB9XG4gIHZhciBncHVBY2NlbGVyYXRpb24gPSBsZWdhY3lHcHVBY2NlbGVyYXRpb25PcHRpb24gIT09IHVuZGVmaW5lZCA/IGxlZ2FjeUdwdUFjY2VsZXJhdGlvbk9wdGlvbiA6IG9wdGlvbnMuZ3B1QWNjZWxlcmF0aW9uO1xuXG4gIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQoZGF0YS5pbnN0YW5jZS5wb3BwZXIpO1xuICB2YXIgb2Zmc2V0UGFyZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQpO1xuXG4gIC8vIFN0eWxlc1xuICB2YXIgc3R5bGVzID0ge1xuICAgIHBvc2l0aW9uOiBwb3BwZXIucG9zaXRpb25cbiAgfTtcblxuICB2YXIgb2Zmc2V0cyA9IGdldFJvdW5kZWRPZmZzZXRzKGRhdGEsIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDwgMiB8fCAhaXNGaXJlZm94KTtcblxuICB2YXIgc2lkZUEgPSB4ID09PSAnYm90dG9tJyA/ICd0b3AnIDogJ2JvdHRvbSc7XG4gIHZhciBzaWRlQiA9IHkgPT09ICdyaWdodCcgPyAnbGVmdCcgOiAncmlnaHQnO1xuXG4gIC8vIGlmIGdwdUFjY2VsZXJhdGlvbiBpcyBzZXQgdG8gYHRydWVgIGFuZCB0cmFuc2Zvcm0gaXMgc3VwcG9ydGVkLFxuICAvLyAgd2UgdXNlIGB0cmFuc2xhdGUzZGAgdG8gYXBwbHkgdGhlIHBvc2l0aW9uIHRvIHRoZSBwb3BwZXIgd2VcbiAgLy8gYXV0b21hdGljYWxseSB1c2UgdGhlIHN1cHBvcnRlZCBwcmVmaXhlZCB2ZXJzaW9uIGlmIG5lZWRlZFxuICB2YXIgcHJlZml4ZWRQcm9wZXJ0eSA9IGdldFN1cHBvcnRlZFByb3BlcnR5TmFtZSgndHJhbnNmb3JtJyk7XG5cbiAgLy8gbm93LCBsZXQncyBtYWtlIGEgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHRoaXMgY29kZSBjbG9zZWx5ICh3dGY/KVxuICAvLyBJZiB0aGUgY29udGVudCBvZiB0aGUgcG9wcGVyIGdyb3dzIG9uY2UgaXQncyBiZWVuIHBvc2l0aW9uZWQsIGl0XG4gIC8vIG1heSBoYXBwZW4gdGhhdCB0aGUgcG9wcGVyIGdldHMgbWlzcGxhY2VkIGJlY2F1c2Ugb2YgdGhlIG5ldyBjb250ZW50XG4gIC8vIG92ZXJmbG93aW5nIGl0cyByZWZlcmVuY2UgZWxlbWVudFxuICAvLyBUbyBhdm9pZCB0aGlzIHByb2JsZW0sIHdlIHByb3ZpZGUgdHdvIG9wdGlvbnMgKHggYW5kIHkpLCB3aGljaCBhbGxvd1xuICAvLyB0aGUgY29uc3VtZXIgdG8gZGVmaW5lIHRoZSBvZmZzZXQgb3JpZ2luLlxuICAvLyBJZiB3ZSBwb3NpdGlvbiBhIHBvcHBlciBvbiB0b3Agb2YgYSByZWZlcmVuY2UgZWxlbWVudCwgd2UgY2FuIHNldFxuICAvLyBgeGAgdG8gYHRvcGAgdG8gbWFrZSB0aGUgcG9wcGVyIGdyb3cgdG93YXJkcyBpdHMgdG9wIGluc3RlYWQgb2ZcbiAgLy8gaXRzIGJvdHRvbS5cbiAgdmFyIGxlZnQgPSB2b2lkIDAsXG4gICAgICB0b3AgPSB2b2lkIDA7XG4gIGlmIChzaWRlQSA9PT0gJ2JvdHRvbScpIHtcbiAgICAvLyB3aGVuIG9mZnNldFBhcmVudCBpcyA8aHRtbD4gdGhlIHBvc2l0aW9uaW5nIGlzIHJlbGF0aXZlIHRvIHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbiAoZXhjbHVkaW5nIHRoZSBzY3JvbGxiYXIpXG4gICAgLy8gYW5kIG5vdCB0aGUgYm90dG9tIG9mIHRoZSBodG1sIGVsZW1lbnRcbiAgICBpZiAob2Zmc2V0UGFyZW50Lm5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICAgIHRvcCA9IC1vZmZzZXRQYXJlbnQuY2xpZW50SGVpZ2h0ICsgb2Zmc2V0cy5ib3R0b207XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvcCA9IC1vZmZzZXRQYXJlbnRSZWN0LmhlaWdodCArIG9mZnNldHMuYm90dG9tO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0b3AgPSBvZmZzZXRzLnRvcDtcbiAgfVxuICBpZiAoc2lkZUIgPT09ICdyaWdodCcpIHtcbiAgICBpZiAob2Zmc2V0UGFyZW50Lm5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICAgIGxlZnQgPSAtb2Zmc2V0UGFyZW50LmNsaWVudFdpZHRoICsgb2Zmc2V0cy5yaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGVmdCA9IC1vZmZzZXRQYXJlbnRSZWN0LndpZHRoICsgb2Zmc2V0cy5yaWdodDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGVmdCA9IG9mZnNldHMubGVmdDtcbiAgfVxuICBpZiAoZ3B1QWNjZWxlcmF0aW9uICYmIHByZWZpeGVkUHJvcGVydHkpIHtcbiAgICBzdHlsZXNbcHJlZml4ZWRQcm9wZXJ0eV0gPSAndHJhbnNsYXRlM2QoJyArIGxlZnQgKyAncHgsICcgKyB0b3AgKyAncHgsIDApJztcbiAgICBzdHlsZXNbc2lkZUFdID0gMDtcbiAgICBzdHlsZXNbc2lkZUJdID0gMDtcbiAgICBzdHlsZXMud2lsbENoYW5nZSA9ICd0cmFuc2Zvcm0nO1xuICB9IGVsc2Uge1xuICAgIC8vIG90aHdlcmlzZSwgd2UgdXNlIHRoZSBzdGFuZGFyZCBgdG9wYCwgYGxlZnRgLCBgYm90dG9tYCBhbmQgYHJpZ2h0YCBwcm9wZXJ0aWVzXG4gICAgdmFyIGludmVydFRvcCA9IHNpZGVBID09PSAnYm90dG9tJyA/IC0xIDogMTtcbiAgICB2YXIgaW52ZXJ0TGVmdCA9IHNpZGVCID09PSAncmlnaHQnID8gLTEgOiAxO1xuICAgIHN0eWxlc1tzaWRlQV0gPSB0b3AgKiBpbnZlcnRUb3A7XG4gICAgc3R5bGVzW3NpZGVCXSA9IGxlZnQgKiBpbnZlcnRMZWZ0O1xuICAgIHN0eWxlcy53aWxsQ2hhbmdlID0gc2lkZUEgKyAnLCAnICsgc2lkZUI7XG4gIH1cblxuICAvLyBBdHRyaWJ1dGVzXG4gIHZhciBhdHRyaWJ1dGVzID0ge1xuICAgICd4LXBsYWNlbWVudCc6IGRhdGEucGxhY2VtZW50XG4gIH07XG5cbiAgLy8gVXBkYXRlIGBkYXRhYCBhdHRyaWJ1dGVzLCBzdHlsZXMgYW5kIGFycm93U3R5bGVzXG4gIGRhdGEuYXR0cmlidXRlcyA9IF9leHRlbmRzKHt9LCBhdHRyaWJ1dGVzLCBkYXRhLmF0dHJpYnV0ZXMpO1xuICBkYXRhLnN0eWxlcyA9IF9leHRlbmRzKHt9LCBzdHlsZXMsIGRhdGEuc3R5bGVzKTtcbiAgZGF0YS5hcnJvd1N0eWxlcyA9IF9leHRlbmRzKHt9LCBkYXRhLm9mZnNldHMuYXJyb3csIGRhdGEuYXJyb3dTdHlsZXMpO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEhlbHBlciB1c2VkIHRvIGtub3cgaWYgdGhlIGdpdmVuIG1vZGlmaWVyIGRlcGVuZHMgZnJvbSBhbm90aGVyIG9uZS48YnIgLz5cbiAqIEl0IGNoZWNrcyBpZiB0aGUgbmVlZGVkIG1vZGlmaWVyIGlzIGxpc3RlZCBhbmQgZW5hYmxlZC5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7QXJyYXl9IG1vZGlmaWVycyAtIGxpc3Qgb2YgbW9kaWZpZXJzXG4gKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdGluZ05hbWUgLSBuYW1lIG9mIHJlcXVlc3RpbmcgbW9kaWZpZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0ZWROYW1lIC0gbmFtZSBvZiByZXF1ZXN0ZWQgbW9kaWZpZXJcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBpc01vZGlmaWVyUmVxdWlyZWQobW9kaWZpZXJzLCByZXF1ZXN0aW5nTmFtZSwgcmVxdWVzdGVkTmFtZSkge1xuICB2YXIgcmVxdWVzdGluZyA9IGZpbmQobW9kaWZpZXJzLCBmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBuYW1lID0gX3JlZi5uYW1lO1xuICAgIHJldHVybiBuYW1lID09PSByZXF1ZXN0aW5nTmFtZTtcbiAgfSk7XG5cbiAgdmFyIGlzUmVxdWlyZWQgPSAhIXJlcXVlc3RpbmcgJiYgbW9kaWZpZXJzLnNvbWUoZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgcmV0dXJuIG1vZGlmaWVyLm5hbWUgPT09IHJlcXVlc3RlZE5hbWUgJiYgbW9kaWZpZXIuZW5hYmxlZCAmJiBtb2RpZmllci5vcmRlciA8IHJlcXVlc3Rpbmcub3JkZXI7XG4gIH0pO1xuXG4gIGlmICghaXNSZXF1aXJlZCkge1xuICAgIHZhciBfcmVxdWVzdGluZyA9ICdgJyArIHJlcXVlc3RpbmdOYW1lICsgJ2AnO1xuICAgIHZhciByZXF1ZXN0ZWQgPSAnYCcgKyByZXF1ZXN0ZWROYW1lICsgJ2AnO1xuICAgIGNvbnNvbGUud2FybihyZXF1ZXN0ZWQgKyAnIG1vZGlmaWVyIGlzIHJlcXVpcmVkIGJ5ICcgKyBfcmVxdWVzdGluZyArICcgbW9kaWZpZXIgaW4gb3JkZXIgdG8gd29yaywgYmUgc3VyZSB0byBpbmNsdWRlIGl0IGJlZm9yZSAnICsgX3JlcXVlc3RpbmcgKyAnIScpO1xuICB9XG4gIHJldHVybiBpc1JlcXVpcmVkO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHVwZGF0ZSBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gYXJyb3coZGF0YSwgb3B0aW9ucykge1xuICB2YXIgX2RhdGEkb2Zmc2V0cyRhcnJvdztcblxuICAvLyBhcnJvdyBkZXBlbmRzIG9uIGtlZXBUb2dldGhlciBpbiBvcmRlciB0byB3b3JrXG4gIGlmICghaXNNb2RpZmllclJlcXVpcmVkKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCAnYXJyb3cnLCAna2VlcFRvZ2V0aGVyJykpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHZhciBhcnJvd0VsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQ7XG5cbiAgLy8gaWYgYXJyb3dFbGVtZW50IGlzIGEgc3RyaW5nLCBzdXBwb3NlIGl0J3MgYSBDU1Mgc2VsZWN0b3JcbiAgaWYgKHR5cGVvZiBhcnJvd0VsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgYXJyb3dFbGVtZW50ID0gZGF0YS5pbnN0YW5jZS5wb3BwZXIucXVlcnlTZWxlY3RvcihhcnJvd0VsZW1lbnQpO1xuXG4gICAgLy8gaWYgYXJyb3dFbGVtZW50IGlzIG5vdCBmb3VuZCwgZG9uJ3QgcnVuIHRoZSBtb2RpZmllclxuICAgIGlmICghYXJyb3dFbGVtZW50KSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgdGhlIGFycm93RWxlbWVudCBpc24ndCBhIHF1ZXJ5IHNlbGVjdG9yIHdlIG11c3QgY2hlY2sgdGhhdCB0aGVcbiAgICAvLyBwcm92aWRlZCBET00gbm9kZSBpcyBjaGlsZCBvZiBpdHMgcG9wcGVyIG5vZGVcbiAgICBpZiAoIWRhdGEuaW5zdGFuY2UucG9wcGVyLmNvbnRhaW5zKGFycm93RWxlbWVudCkpIHtcbiAgICAgIGNvbnNvbGUud2FybignV0FSTklORzogYGFycm93LmVsZW1lbnRgIG11c3QgYmUgY2hpbGQgb2YgaXRzIHBvcHBlciBlbGVtZW50IScpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICB9XG5cbiAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gIHZhciBfZGF0YSRvZmZzZXRzID0gZGF0YS5vZmZzZXRzLFxuICAgICAgcG9wcGVyID0gX2RhdGEkb2Zmc2V0cy5wb3BwZXIsXG4gICAgICByZWZlcmVuY2UgPSBfZGF0YSRvZmZzZXRzLnJlZmVyZW5jZTtcblxuICB2YXIgaXNWZXJ0aWNhbCA9IFsnbGVmdCcsICdyaWdodCddLmluZGV4T2YocGxhY2VtZW50KSAhPT0gLTE7XG5cbiAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gIHZhciBzaWRlQ2FwaXRhbGl6ZWQgPSBpc1ZlcnRpY2FsID8gJ1RvcCcgOiAnTGVmdCc7XG4gIHZhciBzaWRlID0gc2lkZUNhcGl0YWxpemVkLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBhbHRTaWRlID0gaXNWZXJ0aWNhbCA/ICdsZWZ0JyA6ICd0b3AnO1xuICB2YXIgb3BTaWRlID0gaXNWZXJ0aWNhbCA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgdmFyIGFycm93RWxlbWVudFNpemUgPSBnZXRPdXRlclNpemVzKGFycm93RWxlbWVudClbbGVuXTtcblxuICAvL1xuICAvLyBleHRlbmRzIGtlZXBUb2dldGhlciBiZWhhdmlvciBtYWtpbmcgc3VyZSB0aGUgcG9wcGVyIGFuZCBpdHNcbiAgLy8gcmVmZXJlbmNlIGhhdmUgZW5vdWdoIHBpeGVscyBpbiBjb25qdW5jdGlvblxuICAvL1xuXG4gIC8vIHRvcC9sZWZ0IHNpZGVcbiAgaWYgKHJlZmVyZW5jZVtvcFNpZGVdIC0gYXJyb3dFbGVtZW50U2l6ZSA8IHBvcHBlcltzaWRlXSkge1xuICAgIGRhdGEub2Zmc2V0cy5wb3BwZXJbc2lkZV0gLT0gcG9wcGVyW3NpZGVdIC0gKHJlZmVyZW5jZVtvcFNpZGVdIC0gYXJyb3dFbGVtZW50U2l6ZSk7XG4gIH1cbiAgLy8gYm90dG9tL3JpZ2h0IHNpZGVcbiAgaWYgKHJlZmVyZW5jZVtzaWRlXSArIGFycm93RWxlbWVudFNpemUgPiBwb3BwZXJbb3BTaWRlXSkge1xuICAgIGRhdGEub2Zmc2V0cy5wb3BwZXJbc2lkZV0gKz0gcmVmZXJlbmNlW3NpZGVdICsgYXJyb3dFbGVtZW50U2l6ZSAtIHBvcHBlcltvcFNpZGVdO1xuICB9XG4gIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSBnZXRDbGllbnRSZWN0KGRhdGEub2Zmc2V0cy5wb3BwZXIpO1xuXG4gIC8vIGNvbXB1dGUgY2VudGVyIG9mIHRoZSBwb3BwZXJcbiAgdmFyIGNlbnRlciA9IHJlZmVyZW5jZVtzaWRlXSArIHJlZmVyZW5jZVtsZW5dIC8gMiAtIGFycm93RWxlbWVudFNpemUgLyAyO1xuXG4gIC8vIENvbXB1dGUgdGhlIHNpZGVWYWx1ZSB1c2luZyB0aGUgdXBkYXRlZCBwb3BwZXIgb2Zmc2V0c1xuICAvLyB0YWtlIHBvcHBlciBtYXJnaW4gaW4gYWNjb3VudCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdGhpcyBpbmZvIGF2YWlsYWJsZVxuICB2YXIgY3NzID0gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGRhdGEuaW5zdGFuY2UucG9wcGVyKTtcbiAgdmFyIHBvcHBlck1hcmdpblNpZGUgPSBwYXJzZUZsb2F0KGNzc1snbWFyZ2luJyArIHNpZGVDYXBpdGFsaXplZF0sIDEwKTtcbiAgdmFyIHBvcHBlckJvcmRlclNpZGUgPSBwYXJzZUZsb2F0KGNzc1snYm9yZGVyJyArIHNpZGVDYXBpdGFsaXplZCArICdXaWR0aCddLCAxMCk7XG4gIHZhciBzaWRlVmFsdWUgPSBjZW50ZXIgLSBkYXRhLm9mZnNldHMucG9wcGVyW3NpZGVdIC0gcG9wcGVyTWFyZ2luU2lkZSAtIHBvcHBlckJvcmRlclNpZGU7XG5cbiAgLy8gcHJldmVudCBhcnJvd0VsZW1lbnQgZnJvbSBiZWluZyBwbGFjZWQgbm90IGNvbnRpZ3VvdXNseSB0byBpdHMgcG9wcGVyXG4gIHNpZGVWYWx1ZSA9IE1hdGgubWF4KE1hdGgubWluKHBvcHBlcltsZW5dIC0gYXJyb3dFbGVtZW50U2l6ZSwgc2lkZVZhbHVlKSwgMCk7XG5cbiAgZGF0YS5hcnJvd0VsZW1lbnQgPSBhcnJvd0VsZW1lbnQ7XG4gIGRhdGEub2Zmc2V0cy5hcnJvdyA9IChfZGF0YSRvZmZzZXRzJGFycm93ID0ge30sIGRlZmluZVByb3BlcnR5KF9kYXRhJG9mZnNldHMkYXJyb3csIHNpZGUsIE1hdGgucm91bmQoc2lkZVZhbHVlKSksIGRlZmluZVByb3BlcnR5KF9kYXRhJG9mZnNldHMkYXJyb3csIGFsdFNpZGUsICcnKSwgX2RhdGEkb2Zmc2V0cyRhcnJvdyk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogR2V0IHRoZSBvcHBvc2l0ZSBwbGFjZW1lbnQgdmFyaWF0aW9uIG9mIHRoZSBnaXZlbiBvbmVcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBwbGFjZW1lbnQgdmFyaWF0aW9uXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBmbGlwcGVkIHBsYWNlbWVudCB2YXJpYXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVWYXJpYXRpb24odmFyaWF0aW9uKSB7XG4gIGlmICh2YXJpYXRpb24gPT09ICdlbmQnKSB7XG4gICAgcmV0dXJuICdzdGFydCc7XG4gIH0gZWxzZSBpZiAodmFyaWF0aW9uID09PSAnc3RhcnQnKSB7XG4gICAgcmV0dXJuICdlbmQnO1xuICB9XG4gIHJldHVybiB2YXJpYXRpb247XG59XG5cbi8qKlxuICogTGlzdCBvZiBhY2NlcHRlZCBwbGFjZW1lbnRzIHRvIHVzZSBhcyB2YWx1ZXMgb2YgdGhlIGBwbGFjZW1lbnRgIG9wdGlvbi48YnIgLz5cbiAqIFZhbGlkIHBsYWNlbWVudHMgYXJlOlxuICogLSBgYXV0b2BcbiAqIC0gYHRvcGBcbiAqIC0gYHJpZ2h0YFxuICogLSBgYm90dG9tYFxuICogLSBgbGVmdGBcbiAqXG4gKiBFYWNoIHBsYWNlbWVudCBjYW4gaGF2ZSBhIHZhcmlhdGlvbiBmcm9tIHRoaXMgbGlzdDpcbiAqIC0gYC1zdGFydGBcbiAqIC0gYC1lbmRgXG4gKlxuICogVmFyaWF0aW9ucyBhcmUgaW50ZXJwcmV0ZWQgZWFzaWx5IGlmIHlvdSB0aGluayBvZiB0aGVtIGFzIHRoZSBsZWZ0IHRvIHJpZ2h0XG4gKiB3cml0dGVuIGxhbmd1YWdlcy4gSG9yaXpvbnRhbGx5IChgdG9wYCBhbmQgYGJvdHRvbWApLCBgc3RhcnRgIGlzIGxlZnQgYW5kIGBlbmRgXG4gKiBpcyByaWdodC48YnIgLz5cbiAqIFZlcnRpY2FsbHkgKGBsZWZ0YCBhbmQgYHJpZ2h0YCksIGBzdGFydGAgaXMgdG9wIGFuZCBgZW5kYCBpcyBib3R0b20uXG4gKlxuICogU29tZSB2YWxpZCBleGFtcGxlcyBhcmU6XG4gKiAtIGB0b3AtZW5kYCAob24gdG9wIG9mIHJlZmVyZW5jZSwgcmlnaHQgYWxpZ25lZClcbiAqIC0gYHJpZ2h0LXN0YXJ0YCAob24gcmlnaHQgb2YgcmVmZXJlbmNlLCB0b3AgYWxpZ25lZClcbiAqIC0gYGJvdHRvbWAgKG9uIGJvdHRvbSwgY2VudGVyZWQpXG4gKiAtIGBhdXRvLWVuZGAgKG9uIHRoZSBzaWRlIHdpdGggbW9yZSBzcGFjZSBhdmFpbGFibGUsIGFsaWdubWVudCBkZXBlbmRzIGJ5IHBsYWNlbWVudClcbiAqXG4gKiBAc3RhdGljXG4gKiBAdHlwZSB7QXJyYXl9XG4gKiBAZW51bSB7U3RyaW5nfVxuICogQHJlYWRvbmx5XG4gKiBAbWV0aG9kIHBsYWNlbWVudHNcbiAqIEBtZW1iZXJvZiBQb3BwZXJcbiAqL1xudmFyIHBsYWNlbWVudHMgPSBbJ2F1dG8tc3RhcnQnLCAnYXV0bycsICdhdXRvLWVuZCcsICd0b3Atc3RhcnQnLCAndG9wJywgJ3RvcC1lbmQnLCAncmlnaHQtc3RhcnQnLCAncmlnaHQnLCAncmlnaHQtZW5kJywgJ2JvdHRvbS1lbmQnLCAnYm90dG9tJywgJ2JvdHRvbS1zdGFydCcsICdsZWZ0LWVuZCcsICdsZWZ0JywgJ2xlZnQtc3RhcnQnXTtcblxuLy8gR2V0IHJpZCBvZiBgYXV0b2AgYGF1dG8tc3RhcnRgIGFuZCBgYXV0by1lbmRgXG52YXIgdmFsaWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cy5zbGljZSgzKTtcblxuLyoqXG4gKiBHaXZlbiBhbiBpbml0aWFsIHBsYWNlbWVudCwgcmV0dXJucyBhbGwgdGhlIHN1YnNlcXVlbnQgcGxhY2VtZW50c1xuICogY2xvY2t3aXNlIChvciBjb3VudGVyLWNsb2Nrd2lzZSkuXG4gKlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtTdHJpbmd9IHBsYWNlbWVudCAtIEEgdmFsaWQgcGxhY2VtZW50IChpdCBhY2NlcHRzIHZhcmlhdGlvbnMpXG4gKiBAYXJndW1lbnQge0Jvb2xlYW59IGNvdW50ZXIgLSBTZXQgdG8gdHJ1ZSB0byB3YWxrIHRoZSBwbGFjZW1lbnRzIGNvdW50ZXJjbG9ja3dpc2VcbiAqIEByZXR1cm5zIHtBcnJheX0gcGxhY2VtZW50cyBpbmNsdWRpbmcgdGhlaXIgdmFyaWF0aW9uc1xuICovXG5mdW5jdGlvbiBjbG9ja3dpc2UocGxhY2VtZW50KSB7XG4gIHZhciBjb3VudGVyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcblxuICB2YXIgaW5kZXggPSB2YWxpZFBsYWNlbWVudHMuaW5kZXhPZihwbGFjZW1lbnQpO1xuICB2YXIgYXJyID0gdmFsaWRQbGFjZW1lbnRzLnNsaWNlKGluZGV4ICsgMSkuY29uY2F0KHZhbGlkUGxhY2VtZW50cy5zbGljZSgwLCBpbmRleCkpO1xuICByZXR1cm4gY291bnRlciA/IGFyci5yZXZlcnNlKCkgOiBhcnI7XG59XG5cbnZhciBCRUhBVklPUlMgPSB7XG4gIEZMSVA6ICdmbGlwJyxcbiAgQ0xPQ0tXSVNFOiAnY2xvY2t3aXNlJyxcbiAgQ09VTlRFUkNMT0NLV0lTRTogJ2NvdW50ZXJjbG9ja3dpc2UnXG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHVwZGF0ZSBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gZmxpcChkYXRhLCBvcHRpb25zKSB7XG4gIC8vIGlmIGBpbm5lcmAgbW9kaWZpZXIgaXMgZW5hYmxlZCwgd2UgY2FuJ3QgdXNlIHRoZSBgZmxpcGAgbW9kaWZpZXJcbiAgaWYgKGlzTW9kaWZpZXJFbmFibGVkKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCAnaW5uZXInKSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgaWYgKGRhdGEuZmxpcHBlZCAmJiBkYXRhLnBsYWNlbWVudCA9PT0gZGF0YS5vcmlnaW5hbFBsYWNlbWVudCkge1xuICAgIC8vIHNlZW1zIGxpa2UgZmxpcCBpcyB0cnlpbmcgdG8gbG9vcCwgcHJvYmFibHkgdGhlcmUncyBub3QgZW5vdWdoIHNwYWNlIG9uIGFueSBvZiB0aGUgZmxpcHBhYmxlIHNpZGVzXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICB2YXIgYm91bmRhcmllcyA9IGdldEJvdW5kYXJpZXMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEuaW5zdGFuY2UucmVmZXJlbmNlLCBvcHRpb25zLnBhZGRpbmcsIG9wdGlvbnMuYm91bmRhcmllc0VsZW1lbnQsIGRhdGEucG9zaXRpb25GaXhlZCk7XG5cbiAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gIHZhciBwbGFjZW1lbnRPcHBvc2l0ZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHZhciB2YXJpYXRpb24gPSBkYXRhLnBsYWNlbWVudC5zcGxpdCgnLScpWzFdIHx8ICcnO1xuXG4gIHZhciBmbGlwT3JkZXIgPSBbXTtcblxuICBzd2l0Y2ggKG9wdGlvbnMuYmVoYXZpb3IpIHtcbiAgICBjYXNlIEJFSEFWSU9SUy5GTElQOlxuICAgICAgZmxpcE9yZGVyID0gW3BsYWNlbWVudCwgcGxhY2VtZW50T3Bwb3NpdGVdO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBCRUhBVklPUlMuQ0xPQ0tXSVNFOlxuICAgICAgZmxpcE9yZGVyID0gY2xvY2t3aXNlKHBsYWNlbWVudCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIEJFSEFWSU9SUy5DT1VOVEVSQ0xPQ0tXSVNFOlxuICAgICAgZmxpcE9yZGVyID0gY2xvY2t3aXNlKHBsYWNlbWVudCwgdHJ1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgZmxpcE9yZGVyID0gb3B0aW9ucy5iZWhhdmlvcjtcbiAgfVxuXG4gIGZsaXBPcmRlci5mb3JFYWNoKGZ1bmN0aW9uIChzdGVwLCBpbmRleCkge1xuICAgIGlmIChwbGFjZW1lbnQgIT09IHN0ZXAgfHwgZmxpcE9yZGVyLmxlbmd0aCA9PT0gaW5kZXggKyAxKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICAgIHBsYWNlbWVudE9wcG9zaXRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcblxuICAgIHZhciBwb3BwZXJPZmZzZXRzID0gZGF0YS5vZmZzZXRzLnBvcHBlcjtcbiAgICB2YXIgcmVmT2Zmc2V0cyA9IGRhdGEub2Zmc2V0cy5yZWZlcmVuY2U7XG5cbiAgICAvLyB1c2luZyBmbG9vciBiZWNhdXNlIHRoZSByZWZlcmVuY2Ugb2Zmc2V0cyBtYXkgY29udGFpbiBkZWNpbWFscyB3ZSBhcmUgbm90IGdvaW5nIHRvIGNvbnNpZGVyIGhlcmVcbiAgICB2YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuICAgIHZhciBvdmVybGFwc1JlZiA9IHBsYWNlbWVudCA9PT0gJ2xlZnQnICYmIGZsb29yKHBvcHBlck9mZnNldHMucmlnaHQpID4gZmxvb3IocmVmT2Zmc2V0cy5sZWZ0KSB8fCBwbGFjZW1lbnQgPT09ICdyaWdodCcgJiYgZmxvb3IocG9wcGVyT2Zmc2V0cy5sZWZ0KSA8IGZsb29yKHJlZk9mZnNldHMucmlnaHQpIHx8IHBsYWNlbWVudCA9PT0gJ3RvcCcgJiYgZmxvb3IocG9wcGVyT2Zmc2V0cy5ib3R0b20pID4gZmxvb3IocmVmT2Zmc2V0cy50b3ApIHx8IHBsYWNlbWVudCA9PT0gJ2JvdHRvbScgJiYgZmxvb3IocG9wcGVyT2Zmc2V0cy50b3ApIDwgZmxvb3IocmVmT2Zmc2V0cy5ib3R0b20pO1xuXG4gICAgdmFyIG92ZXJmbG93c0xlZnQgPSBmbG9vcihwb3BwZXJPZmZzZXRzLmxlZnQpIDwgZmxvb3IoYm91bmRhcmllcy5sZWZ0KTtcbiAgICB2YXIgb3ZlcmZsb3dzUmlnaHQgPSBmbG9vcihwb3BwZXJPZmZzZXRzLnJpZ2h0KSA+IGZsb29yKGJvdW5kYXJpZXMucmlnaHQpO1xuICAgIHZhciBvdmVyZmxvd3NUb3AgPSBmbG9vcihwb3BwZXJPZmZzZXRzLnRvcCkgPCBmbG9vcihib3VuZGFyaWVzLnRvcCk7XG4gICAgdmFyIG92ZXJmbG93c0JvdHRvbSA9IGZsb29yKHBvcHBlck9mZnNldHMuYm90dG9tKSA+IGZsb29yKGJvdW5kYXJpZXMuYm90dG9tKTtcblxuICAgIHZhciBvdmVyZmxvd3NCb3VuZGFyaWVzID0gcGxhY2VtZW50ID09PSAnbGVmdCcgJiYgb3ZlcmZsb3dzTGVmdCB8fCBwbGFjZW1lbnQgPT09ICdyaWdodCcgJiYgb3ZlcmZsb3dzUmlnaHQgfHwgcGxhY2VtZW50ID09PSAndG9wJyAmJiBvdmVyZmxvd3NUb3AgfHwgcGxhY2VtZW50ID09PSAnYm90dG9tJyAmJiBvdmVyZmxvd3NCb3R0b207XG5cbiAgICAvLyBmbGlwIHRoZSB2YXJpYXRpb24gaWYgcmVxdWlyZWRcbiAgICB2YXIgaXNWZXJ0aWNhbCA9IFsndG9wJywgJ2JvdHRvbSddLmluZGV4T2YocGxhY2VtZW50KSAhPT0gLTE7XG5cbiAgICAvLyBmbGlwcyB2YXJpYXRpb24gaWYgcmVmZXJlbmNlIGVsZW1lbnQgb3ZlcmZsb3dzIGJvdW5kYXJpZXNcbiAgICB2YXIgZmxpcHBlZFZhcmlhdGlvbkJ5UmVmID0gISFvcHRpb25zLmZsaXBWYXJpYXRpb25zICYmIChpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ3N0YXJ0JyAmJiBvdmVyZmxvd3NMZWZ0IHx8IGlzVmVydGljYWwgJiYgdmFyaWF0aW9uID09PSAnZW5kJyAmJiBvdmVyZmxvd3NSaWdodCB8fCAhaXNWZXJ0aWNhbCAmJiB2YXJpYXRpb24gPT09ICdzdGFydCcgJiYgb3ZlcmZsb3dzVG9wIHx8ICFpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ2VuZCcgJiYgb3ZlcmZsb3dzQm90dG9tKTtcblxuICAgIC8vIGZsaXBzIHZhcmlhdGlvbiBpZiBwb3BwZXIgY29udGVudCBvdmVyZmxvd3MgYm91bmRhcmllc1xuICAgIHZhciBmbGlwcGVkVmFyaWF0aW9uQnlDb250ZW50ID0gISFvcHRpb25zLmZsaXBWYXJpYXRpb25zQnlDb250ZW50ICYmIChpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ3N0YXJ0JyAmJiBvdmVyZmxvd3NSaWdodCB8fCBpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ2VuZCcgJiYgb3ZlcmZsb3dzTGVmdCB8fCAhaXNWZXJ0aWNhbCAmJiB2YXJpYXRpb24gPT09ICdzdGFydCcgJiYgb3ZlcmZsb3dzQm90dG9tIHx8ICFpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ2VuZCcgJiYgb3ZlcmZsb3dzVG9wKTtcblxuICAgIHZhciBmbGlwcGVkVmFyaWF0aW9uID0gZmxpcHBlZFZhcmlhdGlvbkJ5UmVmIHx8IGZsaXBwZWRWYXJpYXRpb25CeUNvbnRlbnQ7XG5cbiAgICBpZiAob3ZlcmxhcHNSZWYgfHwgb3ZlcmZsb3dzQm91bmRhcmllcyB8fCBmbGlwcGVkVmFyaWF0aW9uKSB7XG4gICAgICAvLyB0aGlzIGJvb2xlYW4gdG8gZGV0ZWN0IGFueSBmbGlwIGxvb3BcbiAgICAgIGRhdGEuZmxpcHBlZCA9IHRydWU7XG5cbiAgICAgIGlmIChvdmVybGFwc1JlZiB8fCBvdmVyZmxvd3NCb3VuZGFyaWVzKSB7XG4gICAgICAgIHBsYWNlbWVudCA9IGZsaXBPcmRlcltpbmRleCArIDFdO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmxpcHBlZFZhcmlhdGlvbikge1xuICAgICAgICB2YXJpYXRpb24gPSBnZXRPcHBvc2l0ZVZhcmlhdGlvbih2YXJpYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBkYXRhLnBsYWNlbWVudCA9IHBsYWNlbWVudCArICh2YXJpYXRpb24gPyAnLScgKyB2YXJpYXRpb24gOiAnJyk7XG5cbiAgICAgIC8vIHRoaXMgb2JqZWN0IGNvbnRhaW5zIGBwb3NpdGlvbmAsIHdlIHdhbnQgdG8gcHJlc2VydmUgaXQgYWxvbmcgd2l0aFxuICAgICAgLy8gYW55IGFkZGl0aW9uYWwgcHJvcGVydHkgd2UgbWF5IGFkZCBpbiB0aGUgZnV0dXJlXG4gICAgICBkYXRhLm9mZnNldHMucG9wcGVyID0gX2V4dGVuZHMoe30sIGRhdGEub2Zmc2V0cy5wb3BwZXIsIGdldFBvcHBlck9mZnNldHMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UsIGRhdGEucGxhY2VtZW50KSk7XG5cbiAgICAgIGRhdGEgPSBydW5Nb2RpZmllcnMoZGF0YS5pbnN0YW5jZS5tb2RpZmllcnMsIGRhdGEsICdmbGlwJyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgdXBkYXRlIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBrZWVwVG9nZXRoZXIoZGF0YSkge1xuICB2YXIgX2RhdGEkb2Zmc2V0cyA9IGRhdGEub2Zmc2V0cyxcbiAgICAgIHBvcHBlciA9IF9kYXRhJG9mZnNldHMucG9wcGVyLFxuICAgICAgcmVmZXJlbmNlID0gX2RhdGEkb2Zmc2V0cy5yZWZlcmVuY2U7XG5cbiAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gIHZhciBmbG9vciA9IE1hdGguZmxvb3I7XG4gIHZhciBpc1ZlcnRpY2FsID0gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMTtcbiAgdmFyIHNpZGUgPSBpc1ZlcnRpY2FsID8gJ3JpZ2h0JyA6ICdib3R0b20nO1xuICB2YXIgb3BTaWRlID0gaXNWZXJ0aWNhbCA/ICdsZWZ0JyA6ICd0b3AnO1xuICB2YXIgbWVhc3VyZW1lbnQgPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuXG4gIGlmIChwb3BwZXJbc2lkZV0gPCBmbG9vcihyZWZlcmVuY2Vbb3BTaWRlXSkpIHtcbiAgICBkYXRhLm9mZnNldHMucG9wcGVyW29wU2lkZV0gPSBmbG9vcihyZWZlcmVuY2Vbb3BTaWRlXSkgLSBwb3BwZXJbbWVhc3VyZW1lbnRdO1xuICB9XG4gIGlmIChwb3BwZXJbb3BTaWRlXSA+IGZsb29yKHJlZmVyZW5jZVtzaWRlXSkpIHtcbiAgICBkYXRhLm9mZnNldHMucG9wcGVyW29wU2lkZV0gPSBmbG9vcihyZWZlcmVuY2Vbc2lkZV0pO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgY29udGFpbmluZyB2YWx1ZSArIHVuaXQgaW50byBhIHB4IHZhbHVlIG51bWJlclxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2Yge21vZGlmaWVyc35vZmZzZXR9XG4gKiBAcHJpdmF0ZVxuICogQGFyZ3VtZW50IHtTdHJpbmd9IHN0ciAtIFZhbHVlICsgdW5pdCBzdHJpbmdcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBtZWFzdXJlbWVudCAtIGBoZWlnaHRgIG9yIGB3aWR0aGBcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBwb3BwZXJPZmZzZXRzXG4gKiBAYXJndW1lbnQge09iamVjdH0gcmVmZXJlbmNlT2Zmc2V0c1xuICogQHJldHVybnMge051bWJlcnxTdHJpbmd9XG4gKiBWYWx1ZSBpbiBwaXhlbHMsIG9yIG9yaWdpbmFsIHN0cmluZyBpZiBubyB2YWx1ZXMgd2VyZSBleHRyYWN0ZWRcbiAqL1xuZnVuY3Rpb24gdG9WYWx1ZShzdHIsIG1lYXN1cmVtZW50LCBwb3BwZXJPZmZzZXRzLCByZWZlcmVuY2VPZmZzZXRzKSB7XG4gIC8vIHNlcGFyYXRlIHZhbHVlIGZyb20gdW5pdFxuICB2YXIgc3BsaXQgPSBzdHIubWF0Y2goLygoPzpcXC18XFwrKT9cXGQqXFwuP1xcZCopKC4qKS8pO1xuICB2YXIgdmFsdWUgPSArc3BsaXRbMV07XG4gIHZhciB1bml0ID0gc3BsaXRbMl07XG5cbiAgLy8gSWYgaXQncyBub3QgYSBudW1iZXIgaXQncyBhbiBvcGVyYXRvciwgSSBndWVzc1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIGlmICh1bml0LmluZGV4T2YoJyUnKSA9PT0gMCkge1xuICAgIHZhciBlbGVtZW50ID0gdm9pZCAwO1xuICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgY2FzZSAnJXAnOlxuICAgICAgICBlbGVtZW50ID0gcG9wcGVyT2Zmc2V0cztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICclJzpcbiAgICAgIGNhc2UgJyVyJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGVsZW1lbnQgPSByZWZlcmVuY2VPZmZzZXRzO1xuICAgIH1cblxuICAgIHZhciByZWN0ID0gZ2V0Q2xpZW50UmVjdChlbGVtZW50KTtcbiAgICByZXR1cm4gcmVjdFttZWFzdXJlbWVudF0gLyAxMDAgKiB2YWx1ZTtcbiAgfSBlbHNlIGlmICh1bml0ID09PSAndmgnIHx8IHVuaXQgPT09ICd2dycpIHtcbiAgICAvLyBpZiBpcyBhIHZoIG9yIHZ3LCB3ZSBjYWxjdWxhdGUgdGhlIHNpemUgYmFzZWQgb24gdGhlIHZpZXdwb3J0XG4gICAgdmFyIHNpemUgPSB2b2lkIDA7XG4gICAgaWYgKHVuaXQgPT09ICd2aCcpIHtcbiAgICAgIHNpemUgPSBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNpemUgPSBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApO1xuICAgIH1cbiAgICByZXR1cm4gc2l6ZSAvIDEwMCAqIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIC8vIGlmIGlzIGFuIGV4cGxpY2l0IHBpeGVsIHVuaXQsIHdlIGdldCByaWQgb2YgdGhlIHVuaXQgYW5kIGtlZXAgdGhlIHZhbHVlXG4gICAgLy8gaWYgaXMgYW4gaW1wbGljaXQgdW5pdCwgaXQncyBweCwgYW5kIHdlIHJldHVybiBqdXN0IHRoZSB2YWx1ZVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlIGFuIGBvZmZzZXRgIHN0cmluZyB0byBleHRyYXBvbGF0ZSBgeGAgYW5kIGB5YCBudW1lcmljIG9mZnNldHMuXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiB7bW9kaWZpZXJzfm9mZnNldH1cbiAqIEBwcml2YXRlXG4gKiBAYXJndW1lbnQge1N0cmluZ30gb2Zmc2V0XG4gKiBAYXJndW1lbnQge09iamVjdH0gcG9wcGVyT2Zmc2V0c1xuICogQGFyZ3VtZW50IHtPYmplY3R9IHJlZmVyZW5jZU9mZnNldHNcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBiYXNlUGxhY2VtZW50XG4gKiBAcmV0dXJucyB7QXJyYXl9IGEgdHdvIGNlbGxzIGFycmF5IHdpdGggeCBhbmQgeSBvZmZzZXRzIGluIG51bWJlcnNcbiAqL1xuZnVuY3Rpb24gcGFyc2VPZmZzZXQob2Zmc2V0LCBwb3BwZXJPZmZzZXRzLCByZWZlcmVuY2VPZmZzZXRzLCBiYXNlUGxhY2VtZW50KSB7XG4gIHZhciBvZmZzZXRzID0gWzAsIDBdO1xuXG4gIC8vIFVzZSBoZWlnaHQgaWYgcGxhY2VtZW50IGlzIGxlZnQgb3IgcmlnaHQgYW5kIGluZGV4IGlzIDAgb3RoZXJ3aXNlIHVzZSB3aWR0aFxuICAvLyBpbiB0aGlzIHdheSB0aGUgZmlyc3Qgb2Zmc2V0IHdpbGwgdXNlIGFuIGF4aXMgYW5kIHRoZSBzZWNvbmQgb25lXG4gIC8vIHdpbGwgdXNlIHRoZSBvdGhlciBvbmVcbiAgdmFyIHVzZUhlaWdodCA9IFsncmlnaHQnLCAnbGVmdCddLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgIT09IC0xO1xuXG4gIC8vIFNwbGl0IHRoZSBvZmZzZXQgc3RyaW5nIHRvIG9idGFpbiBhIGxpc3Qgb2YgdmFsdWVzIGFuZCBvcGVyYW5kc1xuICAvLyBUaGUgcmVnZXggYWRkcmVzc2VzIHZhbHVlcyB3aXRoIHRoZSBwbHVzIG9yIG1pbnVzIHNpZ24gaW4gZnJvbnQgKCsxMCwgLTIwLCBldGMpXG4gIHZhciBmcmFnbWVudHMgPSBvZmZzZXQuc3BsaXQoLyhcXCt8XFwtKS8pLm1hcChmdW5jdGlvbiAoZnJhZykge1xuICAgIHJldHVybiBmcmFnLnRyaW0oKTtcbiAgfSk7XG5cbiAgLy8gRGV0ZWN0IGlmIHRoZSBvZmZzZXQgc3RyaW5nIGNvbnRhaW5zIGEgcGFpciBvZiB2YWx1ZXMgb3IgYSBzaW5nbGUgb25lXG4gIC8vIHRoZXkgY291bGQgYmUgc2VwYXJhdGVkIGJ5IGNvbW1hIG9yIHNwYWNlXG4gIHZhciBkaXZpZGVyID0gZnJhZ21lbnRzLmluZGV4T2YoZmluZChmcmFnbWVudHMsIGZ1bmN0aW9uIChmcmFnKSB7XG4gICAgcmV0dXJuIGZyYWcuc2VhcmNoKC8sfFxccy8pICE9PSAtMTtcbiAgfSkpO1xuXG4gIGlmIChmcmFnbWVudHNbZGl2aWRlcl0gJiYgZnJhZ21lbnRzW2RpdmlkZXJdLmluZGV4T2YoJywnKSA9PT0gLTEpIHtcbiAgICBjb25zb2xlLndhcm4oJ09mZnNldHMgc2VwYXJhdGVkIGJ5IHdoaXRlIHNwYWNlKHMpIGFyZSBkZXByZWNhdGVkLCB1c2UgYSBjb21tYSAoLCkgaW5zdGVhZC4nKTtcbiAgfVxuXG4gIC8vIElmIGRpdmlkZXIgaXMgZm91bmQsIHdlIGRpdmlkZSB0aGUgbGlzdCBvZiB2YWx1ZXMgYW5kIG9wZXJhbmRzIHRvIGRpdmlkZVxuICAvLyB0aGVtIGJ5IG9mc2V0IFggYW5kIFkuXG4gIHZhciBzcGxpdFJlZ2V4ID0gL1xccyosXFxzKnxcXHMrLztcbiAgdmFyIG9wcyA9IGRpdmlkZXIgIT09IC0xID8gW2ZyYWdtZW50cy5zbGljZSgwLCBkaXZpZGVyKS5jb25jYXQoW2ZyYWdtZW50c1tkaXZpZGVyXS5zcGxpdChzcGxpdFJlZ2V4KVswXV0pLCBbZnJhZ21lbnRzW2RpdmlkZXJdLnNwbGl0KHNwbGl0UmVnZXgpWzFdXS5jb25jYXQoZnJhZ21lbnRzLnNsaWNlKGRpdmlkZXIgKyAxKSldIDogW2ZyYWdtZW50c107XG5cbiAgLy8gQ29udmVydCB0aGUgdmFsdWVzIHdpdGggdW5pdHMgdG8gYWJzb2x1dGUgcGl4ZWxzIHRvIGFsbG93IG91ciBjb21wdXRhdGlvbnNcbiAgb3BzID0gb3BzLm1hcChmdW5jdGlvbiAob3AsIGluZGV4KSB7XG4gICAgLy8gTW9zdCBvZiB0aGUgdW5pdHMgcmVseSBvbiB0aGUgb3JpZW50YXRpb24gb2YgdGhlIHBvcHBlclxuICAgIHZhciBtZWFzdXJlbWVudCA9IChpbmRleCA9PT0gMSA/ICF1c2VIZWlnaHQgOiB1c2VIZWlnaHQpID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgIHZhciBtZXJnZVdpdGhQcmV2aW91cyA9IGZhbHNlO1xuICAgIHJldHVybiBvcFxuICAgIC8vIFRoaXMgYWdncmVnYXRlcyBhbnkgYCtgIG9yIGAtYCBzaWduIHRoYXQgYXJlbid0IGNvbnNpZGVyZWQgb3BlcmF0b3JzXG4gICAgLy8gZS5nLjogMTAgKyArNSA9PiBbMTAsICssICs1XVxuICAgIC5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIGlmIChhW2EubGVuZ3RoIC0gMV0gPT09ICcnICYmIFsnKycsICctJ10uaW5kZXhPZihiKSAhPT0gLTEpIHtcbiAgICAgICAgYVthLmxlbmd0aCAtIDFdID0gYjtcbiAgICAgICAgbWVyZ2VXaXRoUHJldmlvdXMgPSB0cnVlO1xuICAgICAgICByZXR1cm4gYTtcbiAgICAgIH0gZWxzZSBpZiAobWVyZ2VXaXRoUHJldmlvdXMpIHtcbiAgICAgICAgYVthLmxlbmd0aCAtIDFdICs9IGI7XG4gICAgICAgIG1lcmdlV2l0aFByZXZpb3VzID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGEuY29uY2F0KGIpO1xuICAgICAgfVxuICAgIH0sIFtdKVxuICAgIC8vIEhlcmUgd2UgY29udmVydCB0aGUgc3RyaW5nIHZhbHVlcyBpbnRvIG51bWJlciB2YWx1ZXMgKGluIHB4KVxuICAgIC5tYXAoZnVuY3Rpb24gKHN0cikge1xuICAgICAgcmV0dXJuIHRvVmFsdWUoc3RyLCBtZWFzdXJlbWVudCwgcG9wcGVyT2Zmc2V0cywgcmVmZXJlbmNlT2Zmc2V0cyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIExvb3AgdHJvdWdoIHRoZSBvZmZzZXRzIGFycmF5cyBhbmQgZXhlY3V0ZSB0aGUgb3BlcmF0aW9uc1xuICBvcHMuZm9yRWFjaChmdW5jdGlvbiAob3AsIGluZGV4KSB7XG4gICAgb3AuZm9yRWFjaChmdW5jdGlvbiAoZnJhZywgaW5kZXgyKSB7XG4gICAgICBpZiAoaXNOdW1lcmljKGZyYWcpKSB7XG4gICAgICAgIG9mZnNldHNbaW5kZXhdICs9IGZyYWcgKiAob3BbaW5kZXgyIC0gMV0gPT09ICctJyA/IC0xIDogMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gb2Zmc2V0cztcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBNb2RpZmllcnNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSB1cGRhdGUgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAYXJndW1lbnQge051bWJlcnxTdHJpbmd9IG9wdGlvbnMub2Zmc2V0PTBcbiAqIFRoZSBvZmZzZXQgdmFsdWUgYXMgZGVzY3JpYmVkIGluIHRoZSBtb2RpZmllciBkZXNjcmlwdGlvblxuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBvZmZzZXQoZGF0YSwgX3JlZikge1xuICB2YXIgb2Zmc2V0ID0gX3JlZi5vZmZzZXQ7XG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudCxcbiAgICAgIF9kYXRhJG9mZnNldHMgPSBkYXRhLm9mZnNldHMsXG4gICAgICBwb3BwZXIgPSBfZGF0YSRvZmZzZXRzLnBvcHBlcixcbiAgICAgIHJlZmVyZW5jZSA9IF9kYXRhJG9mZnNldHMucmVmZXJlbmNlO1xuXG4gIHZhciBiYXNlUGxhY2VtZW50ID0gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG5cbiAgdmFyIG9mZnNldHMgPSB2b2lkIDA7XG4gIGlmIChpc051bWVyaWMoK29mZnNldCkpIHtcbiAgICBvZmZzZXRzID0gWytvZmZzZXQsIDBdO1xuICB9IGVsc2Uge1xuICAgIG9mZnNldHMgPSBwYXJzZU9mZnNldChvZmZzZXQsIHBvcHBlciwgcmVmZXJlbmNlLCBiYXNlUGxhY2VtZW50KTtcbiAgfVxuXG4gIGlmIChiYXNlUGxhY2VtZW50ID09PSAnbGVmdCcpIHtcbiAgICBwb3BwZXIudG9wICs9IG9mZnNldHNbMF07XG4gICAgcG9wcGVyLmxlZnQgLT0gb2Zmc2V0c1sxXTtcbiAgfSBlbHNlIGlmIChiYXNlUGxhY2VtZW50ID09PSAncmlnaHQnKSB7XG4gICAgcG9wcGVyLnRvcCArPSBvZmZzZXRzWzBdO1xuICAgIHBvcHBlci5sZWZ0ICs9IG9mZnNldHNbMV07XG4gIH0gZWxzZSBpZiAoYmFzZVBsYWNlbWVudCA9PT0gJ3RvcCcpIHtcbiAgICBwb3BwZXIubGVmdCArPSBvZmZzZXRzWzBdO1xuICAgIHBvcHBlci50b3AgLT0gb2Zmc2V0c1sxXTtcbiAgfSBlbHNlIGlmIChiYXNlUGxhY2VtZW50ID09PSAnYm90dG9tJykge1xuICAgIHBvcHBlci5sZWZ0ICs9IG9mZnNldHNbMF07XG4gICAgcG9wcGVyLnRvcCArPSBvZmZzZXRzWzFdO1xuICB9XG5cbiAgZGF0YS5wb3BwZXIgPSBwb3BwZXI7XG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IGB1cGRhdGVgIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBwcmV2ZW50T3ZlcmZsb3coZGF0YSwgb3B0aW9ucykge1xuICB2YXIgYm91bmRhcmllc0VsZW1lbnQgPSBvcHRpb25zLmJvdW5kYXJpZXNFbGVtZW50IHx8IGdldE9mZnNldFBhcmVudChkYXRhLmluc3RhbmNlLnBvcHBlcik7XG5cbiAgLy8gSWYgb2Zmc2V0UGFyZW50IGlzIHRoZSByZWZlcmVuY2UgZWxlbWVudCwgd2UgcmVhbGx5IHdhbnQgdG9cbiAgLy8gZ28gb25lIHN0ZXAgdXAgYW5kIHVzZSB0aGUgbmV4dCBvZmZzZXRQYXJlbnQgYXMgcmVmZXJlbmNlIHRvXG4gIC8vIGF2b2lkIHRvIG1ha2UgdGhpcyBtb2RpZmllciBjb21wbGV0ZWx5IHVzZWxlc3MgYW5kIGxvb2sgbGlrZSBicm9rZW5cbiAgaWYgKGRhdGEuaW5zdGFuY2UucmVmZXJlbmNlID09PSBib3VuZGFyaWVzRWxlbWVudCkge1xuICAgIGJvdW5kYXJpZXNFbGVtZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGJvdW5kYXJpZXNFbGVtZW50KTtcbiAgfVxuXG4gIC8vIE5PVEU6IERPTSBhY2Nlc3MgaGVyZVxuICAvLyByZXNldHMgdGhlIHBvcHBlcidzIHBvc2l0aW9uIHNvIHRoYXQgdGhlIGRvY3VtZW50IHNpemUgY2FuIGJlIGNhbGN1bGF0ZWQgZXhjbHVkaW5nXG4gIC8vIHRoZSBzaXplIG9mIHRoZSBwb3BwZXIgZWxlbWVudCBpdHNlbGZcbiAgdmFyIHRyYW5zZm9ybVByb3AgPSBnZXRTdXBwb3J0ZWRQcm9wZXJ0eU5hbWUoJ3RyYW5zZm9ybScpO1xuICB2YXIgcG9wcGVyU3R5bGVzID0gZGF0YS5pbnN0YW5jZS5wb3BwZXIuc3R5bGU7IC8vIGFzc2lnbm1lbnQgdG8gaGVscCBtaW5pZmljYXRpb25cbiAgdmFyIHRvcCA9IHBvcHBlclN0eWxlcy50b3AsXG4gICAgICBsZWZ0ID0gcG9wcGVyU3R5bGVzLmxlZnQsXG4gICAgICB0cmFuc2Zvcm0gPSBwb3BwZXJTdHlsZXNbdHJhbnNmb3JtUHJvcF07XG5cbiAgcG9wcGVyU3R5bGVzLnRvcCA9ICcnO1xuICBwb3BwZXJTdHlsZXMubGVmdCA9ICcnO1xuICBwb3BwZXJTdHlsZXNbdHJhbnNmb3JtUHJvcF0gPSAnJztcblxuICB2YXIgYm91bmRhcmllcyA9IGdldEJvdW5kYXJpZXMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEuaW5zdGFuY2UucmVmZXJlbmNlLCBvcHRpb25zLnBhZGRpbmcsIGJvdW5kYXJpZXNFbGVtZW50LCBkYXRhLnBvc2l0aW9uRml4ZWQpO1xuXG4gIC8vIE5PVEU6IERPTSBhY2Nlc3MgaGVyZVxuICAvLyByZXN0b3JlcyB0aGUgb3JpZ2luYWwgc3R5bGUgcHJvcGVydGllcyBhZnRlciB0aGUgb2Zmc2V0cyBoYXZlIGJlZW4gY29tcHV0ZWRcbiAgcG9wcGVyU3R5bGVzLnRvcCA9IHRvcDtcbiAgcG9wcGVyU3R5bGVzLmxlZnQgPSBsZWZ0O1xuICBwb3BwZXJTdHlsZXNbdHJhbnNmb3JtUHJvcF0gPSB0cmFuc2Zvcm07XG5cbiAgb3B0aW9ucy5ib3VuZGFyaWVzID0gYm91bmRhcmllcztcblxuICB2YXIgb3JkZXIgPSBvcHRpb25zLnByaW9yaXR5O1xuICB2YXIgcG9wcGVyID0gZGF0YS5vZmZzZXRzLnBvcHBlcjtcblxuICB2YXIgY2hlY2sgPSB7XG4gICAgcHJpbWFyeTogZnVuY3Rpb24gcHJpbWFyeShwbGFjZW1lbnQpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHBvcHBlcltwbGFjZW1lbnRdO1xuICAgICAgaWYgKHBvcHBlcltwbGFjZW1lbnRdIDwgYm91bmRhcmllc1twbGFjZW1lbnRdICYmICFvcHRpb25zLmVzY2FwZVdpdGhSZWZlcmVuY2UpIHtcbiAgICAgICAgdmFsdWUgPSBNYXRoLm1heChwb3BwZXJbcGxhY2VtZW50XSwgYm91bmRhcmllc1twbGFjZW1lbnRdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eSh7fSwgcGxhY2VtZW50LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZWNvbmRhcnk6IGZ1bmN0aW9uIHNlY29uZGFyeShwbGFjZW1lbnQpIHtcbiAgICAgIHZhciBtYWluU2lkZSA9IHBsYWNlbWVudCA9PT0gJ3JpZ2h0JyA/ICdsZWZ0JyA6ICd0b3AnO1xuICAgICAgdmFyIHZhbHVlID0gcG9wcGVyW21haW5TaWRlXTtcbiAgICAgIGlmIChwb3BwZXJbcGxhY2VtZW50XSA+IGJvdW5kYXJpZXNbcGxhY2VtZW50XSAmJiAhb3B0aW9ucy5lc2NhcGVXaXRoUmVmZXJlbmNlKSB7XG4gICAgICAgIHZhbHVlID0gTWF0aC5taW4ocG9wcGVyW21haW5TaWRlXSwgYm91bmRhcmllc1twbGFjZW1lbnRdIC0gKHBsYWNlbWVudCA9PT0gJ3JpZ2h0JyA/IHBvcHBlci53aWR0aCA6IHBvcHBlci5oZWlnaHQpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eSh7fSwgbWFpblNpZGUsIHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgb3JkZXIuZm9yRWFjaChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgdmFyIHNpZGUgPSBbJ2xlZnQnLCAndG9wJ10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMSA/ICdwcmltYXJ5JyA6ICdzZWNvbmRhcnknO1xuICAgIHBvcHBlciA9IF9leHRlbmRzKHt9LCBwb3BwZXIsIGNoZWNrW3NpZGVdKHBsYWNlbWVudCkpO1xuICB9KTtcblxuICBkYXRhLm9mZnNldHMucG9wcGVyID0gcG9wcGVyO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IGB1cGRhdGVgIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBzaGlmdChkYXRhKSB7XG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbiAgdmFyIHNoaWZ0dmFyaWF0aW9uID0gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG5cbiAgLy8gaWYgc2hpZnQgc2hpZnR2YXJpYXRpb24gaXMgc3BlY2lmaWVkLCBydW4gdGhlIG1vZGlmaWVyXG4gIGlmIChzaGlmdHZhcmlhdGlvbikge1xuICAgIHZhciBfZGF0YSRvZmZzZXRzID0gZGF0YS5vZmZzZXRzLFxuICAgICAgICByZWZlcmVuY2UgPSBfZGF0YSRvZmZzZXRzLnJlZmVyZW5jZSxcbiAgICAgICAgcG9wcGVyID0gX2RhdGEkb2Zmc2V0cy5wb3BwZXI7XG5cbiAgICB2YXIgaXNWZXJ0aWNhbCA9IFsnYm90dG9tJywgJ3RvcCddLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgIT09IC0xO1xuICAgIHZhciBzaWRlID0gaXNWZXJ0aWNhbCA/ICdsZWZ0JyA6ICd0b3AnO1xuICAgIHZhciBtZWFzdXJlbWVudCA9IGlzVmVydGljYWwgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG5cbiAgICB2YXIgc2hpZnRPZmZzZXRzID0ge1xuICAgICAgc3RhcnQ6IGRlZmluZVByb3BlcnR5KHt9LCBzaWRlLCByZWZlcmVuY2Vbc2lkZV0pLFxuICAgICAgZW5kOiBkZWZpbmVQcm9wZXJ0eSh7fSwgc2lkZSwgcmVmZXJlbmNlW3NpZGVdICsgcmVmZXJlbmNlW21lYXN1cmVtZW50XSAtIHBvcHBlclttZWFzdXJlbWVudF0pXG4gICAgfTtcblxuICAgIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSBfZXh0ZW5kcyh7fSwgcG9wcGVyLCBzaGlmdE9mZnNldHNbc2hpZnR2YXJpYXRpb25dKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHVwZGF0ZSBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gaGlkZShkYXRhKSB7XG4gIGlmICghaXNNb2RpZmllclJlcXVpcmVkKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCAnaGlkZScsICdwcmV2ZW50T3ZlcmZsb3cnKSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgdmFyIHJlZlJlY3QgPSBkYXRhLm9mZnNldHMucmVmZXJlbmNlO1xuICB2YXIgYm91bmQgPSBmaW5kKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCBmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICByZXR1cm4gbW9kaWZpZXIubmFtZSA9PT0gJ3ByZXZlbnRPdmVyZmxvdyc7XG4gIH0pLmJvdW5kYXJpZXM7XG5cbiAgaWYgKHJlZlJlY3QuYm90dG9tIDwgYm91bmQudG9wIHx8IHJlZlJlY3QubGVmdCA+IGJvdW5kLnJpZ2h0IHx8IHJlZlJlY3QudG9wID4gYm91bmQuYm90dG9tIHx8IHJlZlJlY3QucmlnaHQgPCBib3VuZC5sZWZ0KSB7XG4gICAgLy8gQXZvaWQgdW5uZWNlc3NhcnkgRE9NIGFjY2VzcyBpZiB2aXNpYmlsaXR5IGhhc24ndCBjaGFuZ2VkXG4gICAgaWYgKGRhdGEuaGlkZSA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgZGF0YS5oaWRlID0gdHJ1ZTtcbiAgICBkYXRhLmF0dHJpYnV0ZXNbJ3gtb3V0LW9mLWJvdW5kYXJpZXMnXSA9ICcnO1xuICB9IGVsc2Uge1xuICAgIC8vIEF2b2lkIHVubmVjZXNzYXJ5IERPTSBhY2Nlc3MgaWYgdmlzaWJpbGl0eSBoYXNuJ3QgY2hhbmdlZFxuICAgIGlmIChkYXRhLmhpZGUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBkYXRhLmhpZGUgPSBmYWxzZTtcbiAgICBkYXRhLmF0dHJpYnV0ZXNbJ3gtb3V0LW9mLWJvdW5kYXJpZXMnXSA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgYHVwZGF0ZWAgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cbmZ1bmN0aW9uIGlubmVyKGRhdGEpIHtcbiAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICB2YXIgX2RhdGEkb2Zmc2V0cyA9IGRhdGEub2Zmc2V0cyxcbiAgICAgIHBvcHBlciA9IF9kYXRhJG9mZnNldHMucG9wcGVyLFxuICAgICAgcmVmZXJlbmNlID0gX2RhdGEkb2Zmc2V0cy5yZWZlcmVuY2U7XG5cbiAgdmFyIGlzSG9yaXogPSBbJ2xlZnQnLCAncmlnaHQnXS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMTtcblxuICB2YXIgc3VidHJhY3RMZW5ndGggPSBbJ3RvcCcsICdsZWZ0J10uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA9PT0gLTE7XG5cbiAgcG9wcGVyW2lzSG9yaXogPyAnbGVmdCcgOiAndG9wJ10gPSByZWZlcmVuY2VbYmFzZVBsYWNlbWVudF0gLSAoc3VidHJhY3RMZW5ndGggPyBwb3BwZXJbaXNIb3JpeiA/ICd3aWR0aCcgOiAnaGVpZ2h0J10gOiAwKTtcblxuICBkYXRhLnBsYWNlbWVudCA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSBnZXRDbGllbnRSZWN0KHBvcHBlcik7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogTW9kaWZpZXIgZnVuY3Rpb24sIGVhY2ggbW9kaWZpZXIgY2FuIGhhdmUgYSBmdW5jdGlvbiBvZiB0aGlzIHR5cGUgYXNzaWduZWRcbiAqIHRvIGl0cyBgZm5gIHByb3BlcnR5LjxiciAvPlxuICogVGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggdXBkYXRlLCB0aGlzIG1lYW5zIHRoYXQgeW91IG11c3RcbiAqIG1ha2Ugc3VyZSB0aGV5IGFyZSBwZXJmb3JtYW50IGVub3VnaCB0byBhdm9pZCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy5cbiAqXG4gKiBAZnVuY3Rpb24gTW9kaWZpZXJGblxuICogQGFyZ3VtZW50IHtkYXRhT2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtkYXRhT2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cblxuLyoqXG4gKiBNb2RpZmllcnMgYXJlIHBsdWdpbnMgdXNlZCB0byBhbHRlciB0aGUgYmVoYXZpb3Igb2YgeW91ciBwb3BwZXJzLjxiciAvPlxuICogUG9wcGVyLmpzIHVzZXMgYSBzZXQgb2YgOSBtb2RpZmllcnMgdG8gcHJvdmlkZSBhbGwgdGhlIGJhc2ljIGZ1bmN0aW9uYWxpdGllc1xuICogbmVlZGVkIGJ5IHRoZSBsaWJyYXJ5LlxuICpcbiAqIFVzdWFsbHkgeW91IGRvbid0IHdhbnQgdG8gb3ZlcnJpZGUgdGhlIGBvcmRlcmAsIGBmbmAgYW5kIGBvbkxvYWRgIHByb3BzLlxuICogQWxsIHRoZSBvdGhlciBwcm9wZXJ0aWVzIGFyZSBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIGJlIHR3ZWFrZWQuXG4gKiBAbmFtZXNwYWNlIG1vZGlmaWVyc1xuICovXG52YXIgbW9kaWZpZXJzID0ge1xuICAvKipcbiAgICogTW9kaWZpZXIgdXNlZCB0byBzaGlmdCB0aGUgcG9wcGVyIG9uIHRoZSBzdGFydCBvciBlbmQgb2YgaXRzIHJlZmVyZW5jZVxuICAgKiBlbGVtZW50LjxiciAvPlxuICAgKiBJdCB3aWxsIHJlYWQgdGhlIHZhcmlhdGlvbiBvZiB0aGUgYHBsYWNlbWVudGAgcHJvcGVydHkuPGJyIC8+XG4gICAqIEl0IGNhbiBiZSBvbmUgZWl0aGVyIGAtZW5kYCBvciBgLXN0YXJ0YC5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIHNoaWZ0OiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTEwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogMTAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogc2hpZnRcbiAgfSxcblxuICAvKipcbiAgICogVGhlIGBvZmZzZXRgIG1vZGlmaWVyIGNhbiBzaGlmdCB5b3VyIHBvcHBlciBvbiBib3RoIGl0cyBheGlzLlxuICAgKlxuICAgKiBJdCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgdW5pdHM6XG4gICAqIC0gYHB4YCBvciB1bml0LWxlc3MsIGludGVycHJldGVkIGFzIHBpeGVsc1xuICAgKiAtIGAlYCBvciBgJXJgLCBwZXJjZW50YWdlIHJlbGF0aXZlIHRvIHRoZSBsZW5ndGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50XG4gICAqIC0gYCVwYCwgcGVyY2VudGFnZSByZWxhdGl2ZSB0byB0aGUgbGVuZ3RoIG9mIHRoZSBwb3BwZXIgZWxlbWVudFxuICAgKiAtIGB2d2AsIENTUyB2aWV3cG9ydCB3aWR0aCB1bml0XG4gICAqIC0gYHZoYCwgQ1NTIHZpZXdwb3J0IGhlaWdodCB1bml0XG4gICAqXG4gICAqIEZvciBsZW5ndGggaXMgaW50ZW5kZWQgdGhlIG1haW4gYXhpcyByZWxhdGl2ZSB0byB0aGUgcGxhY2VtZW50IG9mIHRoZSBwb3BwZXIuPGJyIC8+XG4gICAqIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgcGxhY2VtZW50IGlzIGB0b3BgIG9yIGBib3R0b21gLCB0aGUgbGVuZ3RoIHdpbGwgYmUgdGhlXG4gICAqIGB3aWR0aGAuIEluIGNhc2Ugb2YgYGxlZnRgIG9yIGByaWdodGAsIGl0IHdpbGwgYmUgdGhlIGBoZWlnaHRgLlxuICAgKlxuICAgKiBZb3UgY2FuIHByb3ZpZGUgYSBzaW5nbGUgdmFsdWUgKGFzIGBOdW1iZXJgIG9yIGBTdHJpbmdgKSwgb3IgYSBwYWlyIG9mIHZhbHVlc1xuICAgKiBhcyBgU3RyaW5nYCBkaXZpZGVkIGJ5IGEgY29tbWEgb3Igb25lIChvciBtb3JlKSB3aGl0ZSBzcGFjZXMuPGJyIC8+XG4gICAqIFRoZSBsYXR0ZXIgaXMgYSBkZXByZWNhdGVkIG1ldGhvZCBiZWNhdXNlIGl0IGxlYWRzIHRvIGNvbmZ1c2lvbiBhbmQgd2lsbCBiZVxuICAgKiByZW1vdmVkIGluIHYyLjxiciAvPlxuICAgKiBBZGRpdGlvbmFsbHksIGl0IGFjY2VwdHMgYWRkaXRpb25zIGFuZCBzdWJ0cmFjdGlvbnMgYmV0d2VlbiBkaWZmZXJlbnQgdW5pdHMuXG4gICAqIE5vdGUgdGhhdCBtdWx0aXBsaWNhdGlvbnMgYW5kIGRpdmlzaW9ucyBhcmVuJ3Qgc3VwcG9ydGVkLlxuICAgKlxuICAgKiBWYWxpZCBleGFtcGxlcyBhcmU6XG4gICAqIGBgYFxuICAgKiAxMFxuICAgKiAnMTAlJ1xuICAgKiAnMTAsIDEwJ1xuICAgKiAnMTAlLCAxMCdcbiAgICogJzEwICsgMTAlJ1xuICAgKiAnMTAgLSA1dmggKyAzJSdcbiAgICogJy0xMHB4ICsgNXZoLCA1cHggLSA2JSdcbiAgICogYGBgXG4gICAqID4gKipOQioqOiBJZiB5b3UgZGVzaXJlIHRvIGFwcGx5IG9mZnNldHMgdG8geW91ciBwb3BwZXJzIGluIGEgd2F5IHRoYXQgbWF5IG1ha2UgdGhlbSBvdmVybGFwXG4gICAqID4gd2l0aCB0aGVpciByZWZlcmVuY2UgZWxlbWVudCwgdW5mb3J0dW5hdGVseSwgeW91IHdpbGwgaGF2ZSB0byBkaXNhYmxlIHRoZSBgZmxpcGAgbW9kaWZpZXIuXG4gICAqID4gWW91IGNhbiByZWFkIG1vcmUgb24gdGhpcyBhdCB0aGlzIFtpc3N1ZV0oaHR0cHM6Ly9naXRodWIuY29tL0ZlelZyYXN0YS9wb3BwZXIuanMvaXNzdWVzLzM3MykuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBvZmZzZXQ6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9MjAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiAyMDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBvZmZzZXQsXG4gICAgLyoqIEBwcm9wIHtOdW1iZXJ8U3RyaW5nfSBvZmZzZXQ9MFxuICAgICAqIFRoZSBvZmZzZXQgdmFsdWUgYXMgZGVzY3JpYmVkIGluIHRoZSBtb2RpZmllciBkZXNjcmlwdGlvblxuICAgICAqL1xuICAgIG9mZnNldDogMFxuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIHByZXZlbnQgdGhlIHBvcHBlciBmcm9tIGJlaW5nIHBvc2l0aW9uZWQgb3V0c2lkZSB0aGUgYm91bmRhcnkuXG4gICAqXG4gICAqIEEgc2NlbmFyaW8gZXhpc3RzIHdoZXJlIHRoZSByZWZlcmVuY2UgaXRzZWxmIGlzIG5vdCB3aXRoaW4gdGhlIGJvdW5kYXJpZXMuPGJyIC8+XG4gICAqIFdlIGNhbiBzYXkgaXQgaGFzIFwiZXNjYXBlZCB0aGUgYm91bmRhcmllc1wiIOKAlCBvciBqdXN0IFwiZXNjYXBlZFwiLjxiciAvPlxuICAgKiBJbiB0aGlzIGNhc2Ugd2UgbmVlZCB0byBkZWNpZGUgd2hldGhlciB0aGUgcG9wcGVyIHNob3VsZCBlaXRoZXI6XG4gICAqXG4gICAqIC0gZGV0YWNoIGZyb20gdGhlIHJlZmVyZW5jZSBhbmQgcmVtYWluIFwidHJhcHBlZFwiIGluIHRoZSBib3VuZGFyaWVzLCBvclxuICAgKiAtIGlmIGl0IHNob3VsZCBpZ25vcmUgdGhlIGJvdW5kYXJ5IGFuZCBcImVzY2FwZSB3aXRoIGl0cyByZWZlcmVuY2VcIlxuICAgKlxuICAgKiBXaGVuIGBlc2NhcGVXaXRoUmVmZXJlbmNlYCBpcyBzZXQgdG9gdHJ1ZWAgYW5kIHJlZmVyZW5jZSBpcyBjb21wbGV0ZWx5XG4gICAqIG91dHNpZGUgaXRzIGJvdW5kYXJpZXMsIHRoZSBwb3BwZXIgd2lsbCBvdmVyZmxvdyAob3IgY29tcGxldGVseSBsZWF2ZSlcbiAgICogdGhlIGJvdW5kYXJpZXMgaW4gb3JkZXIgdG8gcmVtYWluIGF0dGFjaGVkIHRvIHRoZSBlZGdlIG9mIHRoZSByZWZlcmVuY2UuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBwcmV2ZW50T3ZlcmZsb3c6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9MzAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiAzMDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBwcmV2ZW50T3ZlcmZsb3csXG4gICAgLyoqXG4gICAgICogQHByb3Age0FycmF5fSBbcHJpb3JpdHk9WydsZWZ0JywncmlnaHQnLCd0b3AnLCdib3R0b20nXV1cbiAgICAgKiBQb3BwZXIgd2lsbCB0cnkgdG8gcHJldmVudCBvdmVyZmxvdyBmb2xsb3dpbmcgdGhlc2UgcHJpb3JpdGllcyBieSBkZWZhdWx0LFxuICAgICAqIHRoZW4sIGl0IGNvdWxkIG92ZXJmbG93IG9uIHRoZSBsZWZ0IGFuZCBvbiB0b3Agb2YgdGhlIGBib3VuZGFyaWVzRWxlbWVudGBcbiAgICAgKi9cbiAgICBwcmlvcml0eTogWydsZWZ0JywgJ3JpZ2h0JywgJ3RvcCcsICdib3R0b20nXSxcbiAgICAvKipcbiAgICAgKiBAcHJvcCB7bnVtYmVyfSBwYWRkaW5nPTVcbiAgICAgKiBBbW91bnQgb2YgcGl4ZWwgdXNlZCB0byBkZWZpbmUgYSBtaW5pbXVtIGRpc3RhbmNlIGJldHdlZW4gdGhlIGJvdW5kYXJpZXNcbiAgICAgKiBhbmQgdGhlIHBvcHBlci4gVGhpcyBtYWtlcyBzdXJlIHRoZSBwb3BwZXIgYWx3YXlzIGhhcyBhIGxpdHRsZSBwYWRkaW5nXG4gICAgICogYmV0d2VlbiB0aGUgZWRnZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuICAgIHBhZGRpbmc6IDUsXG4gICAgLyoqXG4gICAgICogQHByb3Age1N0cmluZ3xIVE1MRWxlbWVudH0gYm91bmRhcmllc0VsZW1lbnQ9J3Njcm9sbFBhcmVudCdcbiAgICAgKiBCb3VuZGFyaWVzIHVzZWQgYnkgdGhlIG1vZGlmaWVyLiBDYW4gYmUgYHNjcm9sbFBhcmVudGAsIGB3aW5kb3dgLFxuICAgICAqIGB2aWV3cG9ydGAgb3IgYW55IERPTSBlbGVtZW50LlxuICAgICAqL1xuICAgIGJvdW5kYXJpZXNFbGVtZW50OiAnc2Nyb2xsUGFyZW50J1xuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIG1ha2Ugc3VyZSB0aGUgcmVmZXJlbmNlIGFuZCBpdHMgcG9wcGVyIHN0YXkgbmVhciBlYWNoIG90aGVyXG4gICAqIHdpdGhvdXQgbGVhdmluZyBhbnkgZ2FwIGJldHdlZW4gdGhlIHR3by4gRXNwZWNpYWxseSB1c2VmdWwgd2hlbiB0aGUgYXJyb3cgaXNcbiAgICogZW5hYmxlZCBhbmQgeW91IHdhbnQgdG8gZW5zdXJlIHRoYXQgaXQgcG9pbnRzIHRvIGl0cyByZWZlcmVuY2UgZWxlbWVudC5cbiAgICogSXQgY2FyZXMgb25seSBhYm91dCB0aGUgZmlyc3QgYXhpcy4gWW91IGNhbiBzdGlsbCBoYXZlIHBvcHBlcnMgd2l0aCBtYXJnaW5cbiAgICogYmV0d2VlbiB0aGUgcG9wcGVyIGFuZCBpdHMgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBrZWVwVG9nZXRoZXI6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9NDAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA0MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBrZWVwVG9nZXRoZXJcbiAgfSxcblxuICAvKipcbiAgICogVGhpcyBtb2RpZmllciBpcyB1c2VkIHRvIG1vdmUgdGhlIGBhcnJvd0VsZW1lbnRgIG9mIHRoZSBwb3BwZXIgdG8gbWFrZVxuICAgKiBzdXJlIGl0IGlzIHBvc2l0aW9uZWQgYmV0d2VlbiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQgYW5kIGl0cyBwb3BwZXIgZWxlbWVudC5cbiAgICogSXQgd2lsbCByZWFkIHRoZSBvdXRlciBzaXplIG9mIHRoZSBgYXJyb3dFbGVtZW50YCBub2RlIHRvIGRldGVjdCBob3cgbWFueVxuICAgKiBwaXhlbHMgb2YgY29uanVuY3Rpb24gYXJlIG5lZWRlZC5cbiAgICpcbiAgICogSXQgaGFzIG5vIGVmZmVjdCBpZiBubyBgYXJyb3dFbGVtZW50YCBpcyBwcm92aWRlZC5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGFycm93OiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTUwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogNTAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogYXJyb3csXG4gICAgLyoqIEBwcm9wIHtTdHJpbmd8SFRNTEVsZW1lbnR9IGVsZW1lbnQ9J1t4LWFycm93XScgLSBTZWxlY3RvciBvciBub2RlIHVzZWQgYXMgYXJyb3cgKi9cbiAgICBlbGVtZW50OiAnW3gtYXJyb3ddJ1xuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIGZsaXAgdGhlIHBvcHBlcidzIHBsYWNlbWVudCB3aGVuIGl0IHN0YXJ0cyB0byBvdmVybGFwIGl0c1xuICAgKiByZWZlcmVuY2UgZWxlbWVudC5cbiAgICpcbiAgICogUmVxdWlyZXMgdGhlIGBwcmV2ZW50T3ZlcmZsb3dgIG1vZGlmaWVyIGJlZm9yZSBpdCBpbiBvcmRlciB0byB3b3JrLlxuICAgKlxuICAgKiAqKk5PVEU6KiogdGhpcyBtb2RpZmllciB3aWxsIGludGVycnVwdCB0aGUgY3VycmVudCB1cGRhdGUgY3ljbGUgYW5kIHdpbGxcbiAgICogcmVzdGFydCBpdCBpZiBpdCBkZXRlY3RzIHRoZSBuZWVkIHRvIGZsaXAgdGhlIHBsYWNlbWVudC5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGZsaXA6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9NjAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA2MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBmbGlwLFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtTdHJpbmd8QXJyYXl9IGJlaGF2aW9yPSdmbGlwJ1xuICAgICAqIFRoZSBiZWhhdmlvciB1c2VkIHRvIGNoYW5nZSB0aGUgcG9wcGVyJ3MgcGxhY2VtZW50LiBJdCBjYW4gYmUgb25lIG9mXG4gICAgICogYGZsaXBgLCBgY2xvY2t3aXNlYCwgYGNvdW50ZXJjbG9ja3dpc2VgIG9yIGFuIGFycmF5IHdpdGggYSBsaXN0IG9mIHZhbGlkXG4gICAgICogcGxhY2VtZW50cyAod2l0aCBvcHRpb25hbCB2YXJpYXRpb25zKVxuICAgICAqL1xuICAgIGJlaGF2aW9yOiAnZmxpcCcsXG4gICAgLyoqXG4gICAgICogQHByb3Age251bWJlcn0gcGFkZGluZz01XG4gICAgICogVGhlIHBvcHBlciB3aWxsIGZsaXAgaWYgaXQgaGl0cyB0aGUgZWRnZXMgb2YgdGhlIGBib3VuZGFyaWVzRWxlbWVudGBcbiAgICAgKi9cbiAgICBwYWRkaW5nOiA1LFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtTdHJpbmd8SFRNTEVsZW1lbnR9IGJvdW5kYXJpZXNFbGVtZW50PSd2aWV3cG9ydCdcbiAgICAgKiBUaGUgZWxlbWVudCB3aGljaCB3aWxsIGRlZmluZSB0aGUgYm91bmRhcmllcyBvZiB0aGUgcG9wcGVyIHBvc2l0aW9uLlxuICAgICAqIFRoZSBwb3BwZXIgd2lsbCBuZXZlciBiZSBwbGFjZWQgb3V0c2lkZSBvZiB0aGUgZGVmaW5lZCBib3VuZGFyaWVzXG4gICAgICogKGV4Y2VwdCBpZiBga2VlcFRvZ2V0aGVyYCBpcyBlbmFibGVkKVxuICAgICAqL1xuICAgIGJvdW5kYXJpZXNFbGVtZW50OiAndmlld3BvcnQnLFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtCb29sZWFufSBmbGlwVmFyaWF0aW9ucz1mYWxzZVxuICAgICAqIFRoZSBwb3BwZXIgd2lsbCBzd2l0Y2ggcGxhY2VtZW50IHZhcmlhdGlvbiBiZXR3ZWVuIGAtc3RhcnRgIGFuZCBgLWVuZGAgd2hlblxuICAgICAqIHRoZSByZWZlcmVuY2UgZWxlbWVudCBvdmVybGFwcyBpdHMgYm91bmRhcmllcy5cbiAgICAgKlxuICAgICAqIFRoZSBvcmlnaW5hbCBwbGFjZW1lbnQgc2hvdWxkIGhhdmUgYSBzZXQgdmFyaWF0aW9uLlxuICAgICAqL1xuICAgIGZsaXBWYXJpYXRpb25zOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAcHJvcCB7Qm9vbGVhbn0gZmxpcFZhcmlhdGlvbnNCeUNvbnRlbnQ9ZmFsc2VcbiAgICAgKiBUaGUgcG9wcGVyIHdpbGwgc3dpdGNoIHBsYWNlbWVudCB2YXJpYXRpb24gYmV0d2VlbiBgLXN0YXJ0YCBhbmQgYC1lbmRgIHdoZW5cbiAgICAgKiB0aGUgcG9wcGVyIGVsZW1lbnQgb3ZlcmxhcHMgaXRzIHJlZmVyZW5jZSBib3VuZGFyaWVzLlxuICAgICAqXG4gICAgICogVGhlIG9yaWdpbmFsIHBsYWNlbWVudCBzaG91bGQgaGF2ZSBhIHNldCB2YXJpYXRpb24uXG4gICAgICovXG4gICAgZmxpcFZhcmlhdGlvbnNCeUNvbnRlbnQ6IGZhbHNlXG4gIH0sXG5cbiAgLyoqXG4gICAqIE1vZGlmaWVyIHVzZWQgdG8gbWFrZSB0aGUgcG9wcGVyIGZsb3cgdG93YXJkIHRoZSBpbm5lciBvZiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAqIEJ5IGRlZmF1bHQsIHdoZW4gdGhpcyBtb2RpZmllciBpcyBkaXNhYmxlZCwgdGhlIHBvcHBlciB3aWxsIGJlIHBsYWNlZCBvdXRzaWRlXG4gICAqIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGlubmVyOiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTcwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogNzAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD1mYWxzZSAtIFdoZXRoZXIgdGhlIG1vZGlmaWVyIGlzIGVuYWJsZWQgb3Igbm90ICovXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBpbm5lclxuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIGhpZGUgdGhlIHBvcHBlciB3aGVuIGl0cyByZWZlcmVuY2UgZWxlbWVudCBpcyBvdXRzaWRlIG9mIHRoZVxuICAgKiBwb3BwZXIgYm91bmRhcmllcy4gSXQgd2lsbCBzZXQgYSBgeC1vdXQtb2YtYm91bmRhcmllc2AgYXR0cmlidXRlIHdoaWNoIGNhblxuICAgKiBiZSB1c2VkIHRvIGhpZGUgd2l0aCBhIENTUyBzZWxlY3RvciB0aGUgcG9wcGVyIHdoZW4gaXRzIHJlZmVyZW5jZSBpc1xuICAgKiBvdXQgb2YgYm91bmRhcmllcy5cbiAgICpcbiAgICogUmVxdWlyZXMgdGhlIGBwcmV2ZW50T3ZlcmZsb3dgIG1vZGlmaWVyIGJlZm9yZSBpdCBpbiBvcmRlciB0byB3b3JrLlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgaGlkZToge1xuICAgIC8qKiBAcHJvcCB7bnVtYmVyfSBvcmRlcj04MDAgLSBJbmRleCB1c2VkIHRvIGRlZmluZSB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uICovXG4gICAgb3JkZXI6IDgwMCxcbiAgICAvKiogQHByb3Age0Jvb2xlYW59IGVuYWJsZWQ9dHJ1ZSAtIFdoZXRoZXIgdGhlIG1vZGlmaWVyIGlzIGVuYWJsZWQgb3Igbm90ICovXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAvKiogQHByb3Age01vZGlmaWVyRm59ICovXG4gICAgZm46IGhpZGVcbiAgfSxcblxuICAvKipcbiAgICogQ29tcHV0ZXMgdGhlIHN0eWxlIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBwb3BwZXIgZWxlbWVudCB0byBnZXRzXG4gICAqIHByb3Blcmx5IHBvc2l0aW9uZWQuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGlzIG1vZGlmaWVyIHdpbGwgbm90IHRvdWNoIHRoZSBET00sIGl0IGp1c3QgcHJlcGFyZXMgdGhlIHN0eWxlc1xuICAgKiBzbyB0aGF0IGBhcHBseVN0eWxlYCBtb2RpZmllciBjYW4gYXBwbHkgaXQuIFRoaXMgc2VwYXJhdGlvbiBpcyB1c2VmdWxcbiAgICogaW4gY2FzZSB5b3UgbmVlZCB0byByZXBsYWNlIGBhcHBseVN0eWxlYCB3aXRoIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uLlxuICAgKlxuICAgKiBUaGlzIG1vZGlmaWVyIGhhcyBgODUwYCBhcyBgb3JkZXJgIHZhbHVlIHRvIG1haW50YWluIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICogd2l0aCBwcmV2aW91cyB2ZXJzaW9ucyBvZiBQb3BwZXIuanMuIEV4cGVjdCB0aGUgbW9kaWZpZXJzIG9yZGVyaW5nIG1ldGhvZFxuICAgKiB0byBjaGFuZ2UgaW4gZnV0dXJlIG1ham9yIHZlcnNpb25zIG9mIHRoZSBsaWJyYXJ5LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgY29tcHV0ZVN0eWxlOiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTg1MCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogODUwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogY29tcHV0ZVN0eWxlLFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtCb29sZWFufSBncHVBY2NlbGVyYXRpb249dHJ1ZVxuICAgICAqIElmIHRydWUsIGl0IHVzZXMgdGhlIENTUyAzRCB0cmFuc2Zvcm1hdGlvbiB0byBwb3NpdGlvbiB0aGUgcG9wcGVyLlxuICAgICAqIE90aGVyd2lzZSwgaXQgd2lsbCB1c2UgdGhlIGB0b3BgIGFuZCBgbGVmdGAgcHJvcGVydGllc1xuICAgICAqL1xuICAgIGdwdUFjY2VsZXJhdGlvbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAcHJvcCB7c3RyaW5nfSBbeD0nYm90dG9tJ11cbiAgICAgKiBXaGVyZSB0byBhbmNob3IgdGhlIFggYXhpcyAoYGJvdHRvbWAgb3IgYHRvcGApLiBBS0EgWCBvZmZzZXQgb3JpZ2luLlxuICAgICAqIENoYW5nZSB0aGlzIGlmIHlvdXIgcG9wcGVyIHNob3VsZCBncm93IGluIGEgZGlyZWN0aW9uIGRpZmZlcmVudCBmcm9tIGBib3R0b21gXG4gICAgICovXG4gICAgeDogJ2JvdHRvbScsXG4gICAgLyoqXG4gICAgICogQHByb3Age3N0cmluZ30gW3g9J2xlZnQnXVxuICAgICAqIFdoZXJlIHRvIGFuY2hvciB0aGUgWSBheGlzIChgbGVmdGAgb3IgYHJpZ2h0YCkuIEFLQSBZIG9mZnNldCBvcmlnaW4uXG4gICAgICogQ2hhbmdlIHRoaXMgaWYgeW91ciBwb3BwZXIgc2hvdWxkIGdyb3cgaW4gYSBkaXJlY3Rpb24gZGlmZmVyZW50IGZyb20gYHJpZ2h0YFxuICAgICAqL1xuICAgIHk6ICdyaWdodCdcbiAgfSxcblxuICAvKipcbiAgICogQXBwbGllcyB0aGUgY29tcHV0ZWQgc3R5bGVzIHRvIHRoZSBwb3BwZXIgZWxlbWVudC5cbiAgICpcbiAgICogQWxsIHRoZSBET00gbWFuaXB1bGF0aW9ucyBhcmUgbGltaXRlZCB0byB0aGlzIG1vZGlmaWVyLiBUaGlzIGlzIHVzZWZ1bCBpbiBjYXNlXG4gICAqIHlvdSB3YW50IHRvIGludGVncmF0ZSBQb3BwZXIuanMgaW5zaWRlIGEgZnJhbWV3b3JrIG9yIHZpZXcgbGlicmFyeSBhbmQgeW91XG4gICAqIHdhbnQgdG8gZGVsZWdhdGUgYWxsIHRoZSBET00gbWFuaXB1bGF0aW9ucyB0byBpdC5cbiAgICpcbiAgICogTm90ZSB0aGF0IGlmIHlvdSBkaXNhYmxlIHRoaXMgbW9kaWZpZXIsIHlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcG9wcGVyIGVsZW1lbnRcbiAgICogaGFzIGl0cyBwb3NpdGlvbiBzZXQgdG8gYGFic29sdXRlYCBiZWZvcmUgUG9wcGVyLmpzIGNhbiBkbyBpdHMgd29yayFcbiAgICpcbiAgICogSnVzdCBkaXNhYmxlIHRoaXMgbW9kaWZpZXIgYW5kIGRlZmluZSB5b3VyIG93biB0byBhY2hpZXZlIHRoZSBkZXNpcmVkIGVmZmVjdC5cbiAgICpcbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGFwcGx5U3R5bGU6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9OTAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA5MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBhcHBseVN0eWxlLFxuICAgIC8qKiBAcHJvcCB7RnVuY3Rpb259ICovXG4gICAgb25Mb2FkOiBhcHBseVN0eWxlT25Mb2FkLFxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMS4xMC4wLCB0aGUgcHJvcGVydHkgbW92ZWQgdG8gYGNvbXB1dGVTdHlsZWAgbW9kaWZpZXJcbiAgICAgKiBAcHJvcCB7Qm9vbGVhbn0gZ3B1QWNjZWxlcmF0aW9uPXRydWVcbiAgICAgKiBJZiB0cnVlLCBpdCB1c2VzIHRoZSBDU1MgM0QgdHJhbnNmb3JtYXRpb24gdG8gcG9zaXRpb24gdGhlIHBvcHBlci5cbiAgICAgKiBPdGhlcndpc2UsIGl0IHdpbGwgdXNlIHRoZSBgdG9wYCBhbmQgYGxlZnRgIHByb3BlcnRpZXNcbiAgICAgKi9cbiAgICBncHVBY2NlbGVyYXRpb246IHVuZGVmaW5lZFxuICB9XG59O1xuXG4vKipcbiAqIFRoZSBgZGF0YU9iamVjdGAgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIGJ5IFBvcHBlci5qcy5cbiAqIFRoaXMgb2JqZWN0IGlzIHBhc3NlZCB0byBtb2RpZmllcnMgYW5kIHRvIHRoZSBgb25DcmVhdGVgIGFuZCBgb25VcGRhdGVgIGNhbGxiYWNrcy5cbiAqIEBuYW1lIGRhdGFPYmplY3RcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkYXRhLmluc3RhbmNlIFRoZSBQb3BwZXIuanMgaW5zdGFuY2VcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBkYXRhLnBsYWNlbWVudCBQbGFjZW1lbnQgYXBwbGllZCB0byBwb3BwZXJcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBkYXRhLm9yaWdpbmFsUGxhY2VtZW50IFBsYWNlbWVudCBvcmlnaW5hbGx5IGRlZmluZWQgb24gaW5pdFxuICogQHByb3BlcnR5IHtCb29sZWFufSBkYXRhLmZsaXBwZWQgVHJ1ZSBpZiBwb3BwZXIgaGFzIGJlZW4gZmxpcHBlZCBieSBmbGlwIG1vZGlmaWVyXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGRhdGEuaGlkZSBUcnVlIGlmIHRoZSByZWZlcmVuY2UgZWxlbWVudCBpcyBvdXQgb2YgYm91bmRhcmllcywgdXNlZnVsIHRvIGtub3cgd2hlbiB0byBoaWRlIHRoZSBwb3BwZXJcbiAqIEBwcm9wZXJ0eSB7SFRNTEVsZW1lbnR9IGRhdGEuYXJyb3dFbGVtZW50IE5vZGUgdXNlZCBhcyBhcnJvdyBieSBhcnJvdyBtb2RpZmllclxuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEuc3R5bGVzIEFueSBDU1MgcHJvcGVydHkgZGVmaW5lZCBoZXJlIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyLiBJdCBleHBlY3RzIHRoZSBKYXZhU2NyaXB0IG5vbWVuY2xhdHVyZSAoZWcuIGBtYXJnaW5Cb3R0b21gKVxuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEuYXJyb3dTdHlsZXMgQW55IENTUyBwcm9wZXJ0eSBkZWZpbmVkIGhlcmUgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBwb3BwZXIgYXJyb3cuIEl0IGV4cGVjdHMgdGhlIEphdmFTY3JpcHQgbm9tZW5jbGF0dXJlIChlZy4gYG1hcmdpbkJvdHRvbWApXG4gKiBAcHJvcGVydHkge09iamVjdH0gZGF0YS5ib3VuZGFyaWVzIE9mZnNldHMgb2YgdGhlIHBvcHBlciBib3VuZGFyaWVzXG4gKiBAcHJvcGVydHkge09iamVjdH0gZGF0YS5vZmZzZXRzIFRoZSBtZWFzdXJlbWVudHMgb2YgcG9wcGVyLCByZWZlcmVuY2UgYW5kIGFycm93IGVsZW1lbnRzXG4gKiBAcHJvcGVydHkge09iamVjdH0gZGF0YS5vZmZzZXRzLnBvcHBlciBgdG9wYCwgYGxlZnRgLCBgd2lkdGhgLCBgaGVpZ2h0YCB2YWx1ZXNcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkYXRhLm9mZnNldHMucmVmZXJlbmNlIGB0b3BgLCBgbGVmdGAsIGB3aWR0aGAsIGBoZWlnaHRgIHZhbHVlc1xuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEub2Zmc2V0cy5hcnJvd10gYHRvcGAgYW5kIGBsZWZ0YCBvZmZzZXRzLCBvbmx5IG9uZSBvZiB0aGVtIHdpbGwgYmUgZGlmZmVyZW50IGZyb20gMFxuICovXG5cbi8qKlxuICogRGVmYXVsdCBvcHRpb25zIHByb3ZpZGVkIHRvIFBvcHBlci5qcyBjb25zdHJ1Y3Rvci48YnIgLz5cbiAqIFRoZXNlIGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSBgb3B0aW9uc2AgYXJndW1lbnQgb2YgUG9wcGVyLmpzLjxiciAvPlxuICogVG8gb3ZlcnJpZGUgYW4gb3B0aW9uLCBzaW1wbHkgcGFzcyBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZVxuICogc3RydWN0dXJlIG9mIHRoZSBgb3B0aW9uc2Agb2JqZWN0LCBhcyB0aGUgM3JkIGFyZ3VtZW50LiBGb3IgZXhhbXBsZTpcbiAqIGBgYFxuICogbmV3IFBvcHBlcihyZWYsIHBvcCwge1xuICogICBtb2RpZmllcnM6IHtcbiAqICAgICBwcmV2ZW50T3ZlcmZsb3c6IHsgZW5hYmxlZDogZmFsc2UgfVxuICogICB9XG4gKiB9KVxuICogYGBgXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHN0YXRpY1xuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG52YXIgRGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBQb3BwZXIncyBwbGFjZW1lbnQuXG4gICAqIEBwcm9wIHtQb3BwZXIucGxhY2VtZW50c30gcGxhY2VtZW50PSdib3R0b20nXG4gICAqL1xuICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuXG4gIC8qKlxuICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIHlvdSB3YW50IHBvcHBlciB0byBwb3NpdGlvbiBpdCBzZWxmIGluICdmaXhlZCcgbW9kZVxuICAgKiBAcHJvcCB7Qm9vbGVhbn0gcG9zaXRpb25GaXhlZD1mYWxzZVxuICAgKi9cbiAgcG9zaXRpb25GaXhlZDogZmFsc2UsXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgZXZlbnRzIChyZXNpemUsIHNjcm9sbCkgYXJlIGluaXRpYWxseSBlbmFibGVkLlxuICAgKiBAcHJvcCB7Qm9vbGVhbn0gZXZlbnRzRW5hYmxlZD10cnVlXG4gICAqL1xuICBldmVudHNFbmFibGVkOiB0cnVlLFxuXG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0byBhdXRvbWF0aWNhbGx5IHJlbW92ZSB0aGUgcG9wcGVyIHdoZW5cbiAgICogeW91IGNhbGwgdGhlIGBkZXN0cm95YCBtZXRob2QuXG4gICAqIEBwcm9wIHtCb29sZWFufSByZW1vdmVPbkRlc3Ryb3k9ZmFsc2VcbiAgICovXG4gIHJlbW92ZU9uRGVzdHJveTogZmFsc2UsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGNhbGxlZCB3aGVuIHRoZSBwb3BwZXIgaXMgY3JlYXRlZC48YnIgLz5cbiAgICogQnkgZGVmYXVsdCwgaXQgaXMgc2V0IHRvIG5vLW9wLjxiciAvPlxuICAgKiBBY2Nlc3MgUG9wcGVyLmpzIGluc3RhbmNlIHdpdGggYGRhdGEuaW5zdGFuY2VgLlxuICAgKiBAcHJvcCB7b25DcmVhdGV9XG4gICAqL1xuICBvbkNyZWF0ZTogZnVuY3Rpb24gb25DcmVhdGUoKSB7fSxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgY2FsbGVkIHdoZW4gdGhlIHBvcHBlciBpcyB1cGRhdGVkLiBUaGlzIGNhbGxiYWNrIGlzIG5vdCBjYWxsZWRcbiAgICogb24gdGhlIGluaXRpYWxpemF0aW9uL2NyZWF0aW9uIG9mIHRoZSBwb3BwZXIsIGJ1dCBvbmx5IG9uIHN1YnNlcXVlbnRcbiAgICogdXBkYXRlcy48YnIgLz5cbiAgICogQnkgZGVmYXVsdCwgaXQgaXMgc2V0IHRvIG5vLW9wLjxiciAvPlxuICAgKiBBY2Nlc3MgUG9wcGVyLmpzIGluc3RhbmNlIHdpdGggYGRhdGEuaW5zdGFuY2VgLlxuICAgKiBAcHJvcCB7b25VcGRhdGV9XG4gICAqL1xuICBvblVwZGF0ZTogZnVuY3Rpb24gb25VcGRhdGUoKSB7fSxcblxuICAvKipcbiAgICogTGlzdCBvZiBtb2RpZmllcnMgdXNlZCB0byBtb2RpZnkgdGhlIG9mZnNldHMgYmVmb3JlIHRoZXkgYXJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlci5cbiAgICogVGhleSBwcm92aWRlIG1vc3Qgb2YgdGhlIGZ1bmN0aW9uYWxpdGllcyBvZiBQb3BwZXIuanMuXG4gICAqIEBwcm9wIHttb2RpZmllcnN9XG4gICAqL1xuICBtb2RpZmllcnM6IG1vZGlmaWVyc1xufTtcblxuLyoqXG4gKiBAY2FsbGJhY2sgb25DcmVhdGVcbiAqIEBwYXJhbSB7ZGF0YU9iamVjdH0gZGF0YVxuICovXG5cbi8qKlxuICogQGNhbGxiYWNrIG9uVXBkYXRlXG4gKiBAcGFyYW0ge2RhdGFPYmplY3R9IGRhdGFcbiAqL1xuXG4vLyBVdGlsc1xuLy8gTWV0aG9kc1xudmFyIFBvcHBlciA9IGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgUG9wcGVyLmpzIGluc3RhbmNlLlxuICAgKiBAY2xhc3MgUG9wcGVyXG4gICAqIEBwYXJhbSB7RWxlbWVudHxyZWZlcmVuY2VPYmplY3R9IHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgZWxlbWVudCB1c2VkIHRvIHBvc2l0aW9uIHRoZSBwb3BwZXJcbiAgICogQHBhcmFtIHtFbGVtZW50fSBwb3BwZXIgLSBUaGUgSFRNTCAvIFhNTCBlbGVtZW50IHVzZWQgYXMgdGhlIHBvcHBlclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFlvdXIgY3VzdG9tIG9wdGlvbnMgdG8gb3ZlcnJpZGUgdGhlIG9uZXMgZGVmaW5lZCBpbiBbRGVmYXVsdHNdKCNkZWZhdWx0cylcbiAgICogQHJldHVybiB7T2JqZWN0fSBpbnN0YW5jZSAtIFRoZSBnZW5lcmF0ZWQgUG9wcGVyLmpzIGluc3RhbmNlXG4gICAqL1xuICBmdW5jdGlvbiBQb3BwZXIocmVmZXJlbmNlLCBwb3BwZXIpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIFBvcHBlcik7XG5cbiAgICB0aGlzLnNjaGVkdWxlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy51cGRhdGUpO1xuICAgIH07XG5cbiAgICAvLyBtYWtlIHVwZGF0ZSgpIGRlYm91bmNlZCwgc28gdGhhdCBpdCBvbmx5IHJ1bnMgYXQgbW9zdCBvbmNlLXBlci10aWNrXG4gICAgdGhpcy51cGRhdGUgPSBkZWJvdW5jZSh0aGlzLnVwZGF0ZS5iaW5kKHRoaXMpKTtcblxuICAgIC8vIHdpdGgge30gd2UgY3JlYXRlIGEgbmV3IG9iamVjdCB3aXRoIHRoZSBvcHRpb25zIGluc2lkZSBpdFxuICAgIHRoaXMub3B0aW9ucyA9IF9leHRlbmRzKHt9LCBQb3BwZXIuRGVmYXVsdHMsIG9wdGlvbnMpO1xuXG4gICAgLy8gaW5pdCBzdGF0ZVxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBpc0Rlc3Ryb3llZDogZmFsc2UsXG4gICAgICBpc0NyZWF0ZWQ6IGZhbHNlLFxuICAgICAgc2Nyb2xsUGFyZW50czogW11cbiAgICB9O1xuXG4gICAgLy8gZ2V0IHJlZmVyZW5jZSBhbmQgcG9wcGVyIGVsZW1lbnRzIChhbGxvdyBqUXVlcnkgd3JhcHBlcnMpXG4gICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2UgJiYgcmVmZXJlbmNlLmpxdWVyeSA/IHJlZmVyZW5jZVswXSA6IHJlZmVyZW5jZTtcbiAgICB0aGlzLnBvcHBlciA9IHBvcHBlciAmJiBwb3BwZXIuanF1ZXJ5ID8gcG9wcGVyWzBdIDogcG9wcGVyO1xuXG4gICAgLy8gRGVlcCBtZXJnZSBtb2RpZmllcnMgb3B0aW9uc1xuICAgIHRoaXMub3B0aW9ucy5tb2RpZmllcnMgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhfZXh0ZW5kcyh7fSwgUG9wcGVyLkRlZmF1bHRzLm1vZGlmaWVycywgb3B0aW9ucy5tb2RpZmllcnMpKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICBfdGhpcy5vcHRpb25zLm1vZGlmaWVyc1tuYW1lXSA9IF9leHRlbmRzKHt9LCBQb3BwZXIuRGVmYXVsdHMubW9kaWZpZXJzW25hbWVdIHx8IHt9LCBvcHRpb25zLm1vZGlmaWVycyA/IG9wdGlvbnMubW9kaWZpZXJzW25hbWVdIDoge30pO1xuICAgIH0pO1xuXG4gICAgLy8gUmVmYWN0b3JpbmcgbW9kaWZpZXJzJyBsaXN0IChPYmplY3QgPT4gQXJyYXkpXG4gICAgdGhpcy5tb2RpZmllcnMgPSBPYmplY3Qua2V5cyh0aGlzLm9wdGlvbnMubW9kaWZpZXJzKS5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgICAgIG5hbWU6IG5hbWVcbiAgICAgIH0sIF90aGlzLm9wdGlvbnMubW9kaWZpZXJzW25hbWVdKTtcbiAgICB9KVxuICAgIC8vIHNvcnQgdGhlIG1vZGlmaWVycyBieSBvcmRlclxuICAgIC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYS5vcmRlciAtIGIub3JkZXI7XG4gICAgfSk7XG5cbiAgICAvLyBtb2RpZmllcnMgaGF2ZSB0aGUgYWJpbGl0eSB0byBleGVjdXRlIGFyYml0cmFyeSBjb2RlIHdoZW4gUG9wcGVyLmpzIGdldCBpbml0ZWRcbiAgICAvLyBzdWNoIGNvZGUgaXMgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgb2YgaXRzIG1vZGlmaWVyXG4gICAgLy8gdGhleSBjb3VsZCBhZGQgbmV3IHByb3BlcnRpZXMgdG8gdGhlaXIgb3B0aW9ucyBjb25maWd1cmF0aW9uXG4gICAgLy8gQkUgQVdBUkU6IGRvbid0IGFkZCBvcHRpb25zIHRvIGBvcHRpb25zLm1vZGlmaWVycy5uYW1lYCBidXQgdG8gYG1vZGlmaWVyT3B0aW9uc2AhXG4gICAgdGhpcy5tb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXJPcHRpb25zKSB7XG4gICAgICBpZiAobW9kaWZpZXJPcHRpb25zLmVuYWJsZWQgJiYgaXNGdW5jdGlvbihtb2RpZmllck9wdGlvbnMub25Mb2FkKSkge1xuICAgICAgICBtb2RpZmllck9wdGlvbnMub25Mb2FkKF90aGlzLnJlZmVyZW5jZSwgX3RoaXMucG9wcGVyLCBfdGhpcy5vcHRpb25zLCBtb2RpZmllck9wdGlvbnMsIF90aGlzLnN0YXRlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGZpcmUgdGhlIGZpcnN0IHVwZGF0ZSB0byBwb3NpdGlvbiB0aGUgcG9wcGVyIGluIHRoZSByaWdodCBwbGFjZVxuICAgIHRoaXMudXBkYXRlKCk7XG5cbiAgICB2YXIgZXZlbnRzRW5hYmxlZCA9IHRoaXMub3B0aW9ucy5ldmVudHNFbmFibGVkO1xuICAgIGlmIChldmVudHNFbmFibGVkKSB7XG4gICAgICAvLyBzZXR1cCBldmVudCBsaXN0ZW5lcnMsIHRoZXkgd2lsbCB0YWtlIGNhcmUgb2YgdXBkYXRlIHRoZSBwb3NpdGlvbiBpbiBzcGVjaWZpYyBzaXR1YXRpb25zXG4gICAgICB0aGlzLmVuYWJsZUV2ZW50TGlzdGVuZXJzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZS5ldmVudHNFbmFibGVkID0gZXZlbnRzRW5hYmxlZDtcbiAgfVxuXG4gIC8vIFdlIGNhbid0IHVzZSBjbGFzcyBwcm9wZXJ0aWVzIGJlY2F1c2UgdGhleSBkb24ndCBnZXQgbGlzdGVkIGluIHRoZVxuICAvLyBjbGFzcyBwcm90b3R5cGUgYW5kIGJyZWFrIHN0dWZmIGxpa2UgU2lub24gc3R1YnNcblxuXG4gIGNyZWF0ZUNsYXNzKFBvcHBlciwgW3tcbiAgICBrZXk6ICd1cGRhdGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGUkJDEoKSB7XG4gICAgICByZXR1cm4gdXBkYXRlLmNhbGwodGhpcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZGVzdHJveScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRlc3Ryb3kkJDEoKSB7XG4gICAgICByZXR1cm4gZGVzdHJveS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2VuYWJsZUV2ZW50TGlzdGVuZXJzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZW5hYmxlRXZlbnRMaXN0ZW5lcnMkJDEoKSB7XG4gICAgICByZXR1cm4gZW5hYmxlRXZlbnRMaXN0ZW5lcnMuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdkaXNhYmxlRXZlbnRMaXN0ZW5lcnMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBkaXNhYmxlRXZlbnRMaXN0ZW5lcnMkJDEoKSB7XG4gICAgICByZXR1cm4gZGlzYWJsZUV2ZW50TGlzdGVuZXJzLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2NoZWR1bGVzIGFuIHVwZGF0ZS4gSXQgd2lsbCBydW4gb24gdGhlIG5leHQgVUkgdXBkYXRlIGF2YWlsYWJsZS5cbiAgICAgKiBAbWV0aG9kIHNjaGVkdWxlVXBkYXRlXG4gICAgICogQG1lbWJlcm9mIFBvcHBlclxuICAgICAqL1xuXG5cbiAgICAvKipcbiAgICAgKiBDb2xsZWN0aW9uIG9mIHV0aWxpdGllcyB1c2VmdWwgd2hlbiB3cml0aW5nIGN1c3RvbSBtb2RpZmllcnMuXG4gICAgICogU3RhcnRpbmcgZnJvbSB2ZXJzaW9uIDEuNywgdGhpcyBtZXRob2QgaXMgYXZhaWxhYmxlIG9ubHkgaWYgeW91XG4gICAgICogaW5jbHVkZSBgcG9wcGVyLXV0aWxzLmpzYCBiZWZvcmUgYHBvcHBlci5qc2AuXG4gICAgICpcbiAgICAgKiAqKkRFUFJFQ0FUSU9OKio6IFRoaXMgd2F5IHRvIGFjY2VzcyBQb3BwZXJVdGlscyBpcyBkZXByZWNhdGVkXG4gICAgICogYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB2MiEgVXNlIHRoZSBQb3BwZXJVdGlscyBtb2R1bGUgZGlyZWN0bHkgaW5zdGVhZC5cbiAgICAgKiBEdWUgdG8gdGhlIGhpZ2ggaW5zdGFiaWxpdHkgb2YgdGhlIG1ldGhvZHMgY29udGFpbmVkIGluIFV0aWxzLCB3ZSBjYW4ndFxuICAgICAqIGd1YXJhbnRlZSB0aGVtIHRvIGZvbGxvdyBzZW12ZXIuIFVzZSB0aGVtIGF0IHlvdXIgb3duIHJpc2shXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDEuOFxuICAgICAqIEBtZW1iZXIgVXRpbHNcbiAgICAgKiBAbWVtYmVyb2YgUG9wcGVyXG4gICAgICovXG5cbiAgfV0pO1xuICByZXR1cm4gUG9wcGVyO1xufSgpO1xuXG4vKipcbiAqIFRoZSBgcmVmZXJlbmNlT2JqZWN0YCBpcyBhbiBvYmplY3QgdGhhdCBwcm92aWRlcyBhbiBpbnRlcmZhY2UgY29tcGF0aWJsZSB3aXRoIFBvcHBlci5qc1xuICogYW5kIGxldHMgeW91IHVzZSBpdCBhcyByZXBsYWNlbWVudCBvZiBhIHJlYWwgRE9NIG5vZGUuPGJyIC8+XG4gKiBZb3UgY2FuIHVzZSB0aGlzIG1ldGhvZCB0byBwb3NpdGlvbiBhIHBvcHBlciByZWxhdGl2ZWx5IHRvIGEgc2V0IG9mIGNvb3JkaW5hdGVzXG4gKiBpbiBjYXNlIHlvdSBkb24ndCBoYXZlIGEgRE9NIG5vZGUgdG8gdXNlIGFzIHJlZmVyZW5jZS5cbiAqXG4gKiBgYGBcbiAqIG5ldyBQb3BwZXIocmVmZXJlbmNlT2JqZWN0LCBwb3BwZXJOb2RlKTtcbiAqIGBgYFxuICpcbiAqIE5COiBUaGlzIGZlYXR1cmUgaXNuJ3Qgc3VwcG9ydGVkIGluIEludGVybmV0IEV4cGxvcmVyIDEwLlxuICogQG5hbWUgcmVmZXJlbmNlT2JqZWN0XG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBkYXRhLmdldEJvdW5kaW5nQ2xpZW50UmVjdFxuICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBzZXQgb2YgY29vcmRpbmF0ZXMgY29tcGF0aWJsZSB3aXRoIHRoZSBuYXRpdmUgYGdldEJvdW5kaW5nQ2xpZW50UmVjdGAgbWV0aG9kLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGRhdGEuY2xpZW50V2lkdGhcbiAqIEFuIEVTNiBnZXR0ZXIgdGhhdCB3aWxsIHJldHVybiB0aGUgd2lkdGggb2YgdGhlIHZpcnR1YWwgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gZGF0YS5jbGllbnRIZWlnaHRcbiAqIEFuIEVTNiBnZXR0ZXIgdGhhdCB3aWxsIHJldHVybiB0aGUgaGVpZ2h0IG9mIHRoZSB2aXJ0dWFsIHJlZmVyZW5jZSBlbGVtZW50LlxuICovXG5cblxuUG9wcGVyLlV0aWxzID0gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsKS5Qb3BwZXJVdGlscztcblBvcHBlci5wbGFjZW1lbnRzID0gcGxhY2VtZW50cztcblBvcHBlci5EZWZhdWx0cyA9IERlZmF1bHRzO1xuXG5leHBvcnQgZGVmYXVsdCBQb3BwZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wb3BwZXIuanMubWFwXG4iLCJ2YXIgcHVnID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvcHVnLXJ1bnRpbWUvaW5kZXguanNcIik7XG5cbmZ1bmN0aW9uIHRlbXBsYXRlKGxvY2Fscykge3ZhciBwdWdfaHRtbCA9IFwiXCIsIHB1Z19taXhpbnMgPSB7fSwgcHVnX2ludGVycDtwdWdfaHRtbCA9IHB1Z19odG1sICsgXCJcXHUwMDNDYm9keVxcdTAwM0VcXHUwMDNDbmF2IGNsYXNzPVxcXCJuYXZiYXIgbmF2YmFyLWV4cGFuZC1sZyBwLTEgbmF2YmFyLWxpZ2h0IGJnLWxpZ2h0IGZpeGVkLXRvcFxcXCJcXHUwMDNFXFx1MDAzQ2EgY2xhc3M9XFxcIm5hdmJhci1icmFuZFxcXCIgaHJlZj1cXFwiXFx1MDAyRmh1YlxcdTAwMkZzcGF3blxcXCJcXHUwMDNFXFx1MDAzQ2ltZyBzdHlsZT1cXFwiaGVpZ2h0OiAzOHB4O21hcmdpbi1sZWZ0OiAtMS4yZW07XFxcIiBzcmM9XFxcInN0YXRpY1xcdTAwMkZzdG9jaHNzLWxvZ28ucG5nXFxcIlxcdTAwM0VcXHUwMDNDXFx1MDAyRmFcXHUwMDNFXFx1MDAzQ2RpdiBjbGFzcz1cXFwiY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlIGp1c3RpZnktY29udGVudC1lbmRcXFwiIGlkPVxcXCJuYXZiYXJcXFwiXFx1MDAzRVxcdTAwM0N1bCBjbGFzcz1cXFwibmF2YmFyLW5hdiBmbG9hdC1yaWdodFxcXCJcXHUwMDNFXFx1MDAzQ2xpIGNsYXNzPVxcXCJuYXYtaXRlbVxcXCJcXHUwMDNFXFx1MDAzQ2EgY2xhc3M9XFxcIm5hdi1saW5rXFxcIiBocmVmPVxcXCJodHRwOlxcdTAwMkZcXHUwMDJGd3d3LnN0b2Noc3Mub3JnXFxcIiB0YXJnZXQ9XFxcIl9ibGFua1xcXCJcXHUwMDNFQWJvdXRcXHUwMDNDXFx1MDAyRmFcXHUwMDNFXFx1MDAzQ1xcdTAwMkZsaVxcdTAwM0VcXHUwMDNDbGkgY2xhc3M9XFxcIm5hdi1pdGVtXFxcIlxcdTAwM0VcXHUwMDNDYSBjbGFzcz1cXFwibmF2LWxpbmtcXFwiIGhyZWY9XFxcImh0dHA6XFx1MDAyRlxcdTAwMkZ3d3cuc3RvY2hzcy5vcmdcXHUwMDJGP3BhZ2VfaWQ9NDc2XFxcIiB0YXJnZXQ9XFxcIl9ibGFua1xcXCJcXHUwMDNFRG9jdW1lbnRhdGlvblxcdTAwM0NcXHUwMDJGYVxcdTAwM0VcXHUwMDNDXFx1MDAyRmxpXFx1MDAzRVxcdTAwM0NsaSBjbGFzcz1cXFwibmF2LWl0ZW1cXFwiXFx1MDAzRVxcdTAwM0NhIGNsYXNzPVxcXCJuYXYtbGlua1xcXCIgaHJlZj1cXFwibWFpbHRvOnN0b2Noc3MtdXNlcnNAZ29vZ2xlZ3JvdXBzLmNvbVxcXCJcXHUwMDNFQ29udGFjdFxcdTAwM0NcXHUwMDJGYVxcdTAwM0VcXHUwMDNDXFx1MDAyRmxpXFx1MDAzRVxcdTAwM0NsaSBjbGFzcz1cXFwibmF2LWl0ZW1cXFwiXFx1MDAzRVxcdTAwM0NhIGNsYXNzPVxcXCJuYXYtbGlua1xcXCIgaHJlZj1cXFwiaHR0cHM6XFx1MDAyRlxcdTAwMkZnaXRodWIuY29tXFx1MDAyRlN0b2NoU1NcXHUwMDJGc3RvY2hzc1xcdTAwMkZpc3N1ZXNcXHUwMDJGbmV3XFxcIiB0YXJnZXQ9XFxcIl9ibGFua1xcXCJcXHUwMDNFUmVwb3J0IElzc3VlXFx1MDAzQ1xcdTAwMkZhXFx1MDAzRVxcdTAwM0NcXHUwMDJGbGlcXHUwMDNFXFx1MDAzQ2xpIGNsYXNzPVxcXCJuYXYtaXRlbVxcXCJcXHUwMDNFXFx1MDAzQ2EgY2xhc3M9XFxcIm5hdi1saW5rXFxcIiBocmVmPVxcXCJcXHUwMDJGbG9nb3V0XFxcIlxcdTAwM0VTaWduIE91dFxcdTAwM0NcXHUwMDJGYVxcdTAwM0VcXHUwMDNDXFx1MDAyRmxpXFx1MDAzRVxcdTAwM0NcXHUwMDJGdWxcXHUwMDNFXFx1MDAzQ1xcdTAwMkZkaXZcXHUwMDNFXFx1MDAzQ1xcdTAwMkZuYXZcXHUwMDNFXFx1MDAzQ2RpdiBjbGFzcz1cXFwiY29udGFpbmVyLWZsdWlkXFxcIlxcdTAwM0VcXHUwMDNDZGl2IGNsYXNzPVxcXCJyb3cgZmxleC1ub3dyYXBcXFwiXFx1MDAzRVxcdTAwM0NkaXYgY2xhc3M9XFxcImNvbC1tZC0yXFxcIlxcdTAwM0VcXHUwMDNDbmF2IGNsYXNzPVxcXCJzaWRlYmFyIGQtbWQtYmxvY2tcXFwiXFx1MDAzRVxcdTAwM0NkaXYgY2xhc3M9XFxcInNpZGViYXItc3RpY2t5IHRvb2xzXFxcIlxcdTAwM0VcXHUwMDNDdWwgY2xhc3M9XFxcIm5hdiBmbGV4LWNvbHVtblxcXCJcXHUwMDNFXFx1MDAzQ2xpIGNsYXNzPVxcXCJuYXYtaXRlbVxcXCJcXHUwMDNFXFx1MDAzQ2g1IGNsYXNzPVxcXCJpY29uLWZsYXNrXFxcIlxcdTAwM0VUb29sc1xcdTAwM0NcXHUwMDJGaDVcXHUwMDNFXFx1MDAzQ1xcdTAwMkZsaVxcdTAwM0VcXHUwMDNDbGkgY2xhc3M9XFxcIm5hdi1pdGVtXFxcIlxcdTAwM0VcXHUwMDNDYSBjbGFzcz1cXFwibmF2LWxpbmtcXFwiIGhyZWY9XFxcInN0b2Noc3NcXHUwMDJGbW9kZWxzXFxcIiB0aXRsZT1cXFwiRXhwbG9yZSB5b3VyIFN0b2NoU1MgbW9kZWxzXFxcIlxcdTAwM0VCcm93c2VyXFx1MDAzQ1xcdTAwMkZhXFx1MDAzRVxcdTAwM0NcXHUwMDJGbGlcXHUwMDNFXFx1MDAzQ2xpIGNsYXNzPVxcXCJuYXYtaXRlbVxcXCJcXHUwMDNFXFx1MDAzQ2EgY2xhc3M9XFxcIm5hdi1saW5rXFxcIiB0YXJnZXQ9XFxcIl9ibGFua1xcXCIgaHJlZj1cXFwidHJlZVxcXCIgdGl0bGU9XFxcIkJyb3dzZSB5b3VyIGZpbGVzIGluIGEgSnVweXRlciBpbnRlcmZhY2VcXFwiXFx1MDAzRUp1cHl0ZXJcXHUwMDNDXFx1MDAyRmFcXHUwMDNFXFx1MDAzQ1xcdTAwMkZsaVxcdTAwM0VcXHUwMDNDIS0tbGkubmF2LWl0ZW06IGEubmF2LWxpbmsoZGF0YS1ob29rPVxcXCJnZW5lcmFsLWhlbHAtbGlua1xcXCIsIHRhcmdldD1cXFwiX2JsYW5rXFxcIiwgaHJlZj1cXFwiI1xcXCIsIHRpdGxlPVxcXCJIZWxwXFxcIilcXHUwMDJGXFx1MDAyRiB8IEhlbHBcXG4tLVxcdTAwM0VcXHUwMDNDXFx1MDAyRnVsXFx1MDAzRVxcdTAwM0NcXHUwMDJGZGl2XFx1MDAzRVxcdTAwM0NcXHUwMDJGbmF2XFx1MDAzRVxcdTAwM0NcXHUwMDJGZGl2XFx1MDAzRVxcdTAwM0NtYWluIGNsYXNzPVxcXCJjb2wtbWQtMTAgYm9keVxcXCIgcm9sZT1cXFwibWFpblxcXCJcXHUwMDNFXFx1MDAzQ2RpdiBjbGFzcz1cXFwiY29udGFpbmVyLWZsdWlkXFxcIiBkYXRhLWhvb2s9XFxcInBhZ2UtY29udGFpbmVyXFxcIlxcdTAwM0VcXHUwMDNDXFx1MDAyRmRpdlxcdTAwM0VcXHUwMDNDXFx1MDAyRm1haW5cXHUwMDNFXFx1MDAzQ1xcdTAwMkZkaXZcXHUwMDNFXFx1MDAzQ1xcdTAwMkZkaXZcXHUwMDNFXFx1MDAzQ1xcdTAwMkZib2R5XFx1MDAzRVwiOztyZXR1cm4gcHVnX2h0bWw7fTtcbm1vZHVsZS5leHBvcnRzID0gdGVtcGxhdGU7IiwidmFyIHB1ZyA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3B1Zy1ydW50aW1lL2luZGV4LmpzXCIpO1xuXG5mdW5jdGlvbiB0ZW1wbGF0ZShsb2NhbHMpIHt2YXIgcHVnX2h0bWwgPSBcIlwiLCBwdWdfbWl4aW5zID0ge30sIHB1Z19pbnRlcnA7cHVnX2h0bWwgPSBwdWdfaHRtbCArIFwiXFx1MDAzQ2hlYWRcXHUwMDNFXFx1MDAzQ21ldGEgY2hhcnNldD1cXFwidXRmLThcXFwiXFx1MDAzRVxcdTAwM0N0aXRsZVxcdTAwM0VTdG9jaFNTOiBTdG9jaGFzdGljIFNpbWxhdGlvbiBTZXJ2aWNlXFx1MDAzQ1xcdTAwMkZ0aXRsZVxcdTAwM0VcXHUwMDNDbWV0YSBuYW1lPVxcXCJ2aWV3cG9ydFxcXCIgY29udGVudD1cXFwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMFxcXCJcXHUwMDNFXFx1MDAzQ21ldGEgbmFtZT1cXFwiZGVzY3JpcHRpb25cXFwiIGNvbnRlbnQ9XFxcIlxcXCJcXHUwMDNFXFx1MDAzQ21ldGEgbmFtZT1cXFwiYXV0aG9yXFxcIiBjb250ZW50PVxcXCJcXFwiXFx1MDAzRVxcdTAwM0NcXHUwMDJGaGVhZFxcdTAwM0VcIjs7cmV0dXJuIHB1Z19odG1sO307XG5tb2R1bGUuZXhwb3J0cyA9IHRlbXBsYXRlOyIsIid1c2Ugc3RyaWN0JztcblxudmFyIHB1Z19oYXNfb3duX3Byb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBNZXJnZSB0d28gYXR0cmlidXRlIG9iamVjdHMgZ2l2aW5nIHByZWNlZGVuY2VcbiAqIHRvIHZhbHVlcyBpbiBvYmplY3QgYGJgLiBDbGFzc2VzIGFyZSBzcGVjaWFsLWNhc2VkXG4gKiBhbGxvd2luZyBmb3IgYXJyYXlzIGFuZCBtZXJnaW5nL2pvaW5pbmcgYXBwcm9wcmlhdGVseVxuICogcmVzdWx0aW5nIGluIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhXG4gKiBAcGFyYW0ge09iamVjdH0gYlxuICogQHJldHVybiB7T2JqZWN0fSBhXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLm1lcmdlID0gcHVnX21lcmdlO1xuZnVuY3Rpb24gcHVnX21lcmdlKGEsIGIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICB2YXIgYXR0cnMgPSBhWzBdO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgYXR0cnMgPSBwdWdfbWVyZ2UoYXR0cnMsIGFbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gYXR0cnM7XG4gIH1cblxuICBmb3IgKHZhciBrZXkgaW4gYikge1xuICAgIGlmIChrZXkgPT09ICdjbGFzcycpIHtcbiAgICAgIHZhciB2YWxBID0gYVtrZXldIHx8IFtdO1xuICAgICAgYVtrZXldID0gKEFycmF5LmlzQXJyYXkodmFsQSkgPyB2YWxBIDogW3ZhbEFdKS5jb25jYXQoYltrZXldIHx8IFtdKTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3N0eWxlJykge1xuICAgICAgdmFyIHZhbEEgPSBwdWdfc3R5bGUoYVtrZXldKTtcbiAgICAgIHZhbEEgPSB2YWxBICYmIHZhbEFbdmFsQS5sZW5ndGggLSAxXSAhPT0gJzsnID8gdmFsQSArICc7JyA6IHZhbEE7XG4gICAgICB2YXIgdmFsQiA9IHB1Z19zdHlsZShiW2tleV0pO1xuICAgICAgdmFsQiA9IHZhbEIgJiYgdmFsQlt2YWxCLmxlbmd0aCAtIDFdICE9PSAnOycgPyB2YWxCICsgJzsnIDogdmFsQjtcbiAgICAgIGFba2V5XSA9IHZhbEEgKyB2YWxCO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSBiW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGE7XG59O1xuXG4vKipcbiAqIFByb2Nlc3MgYXJyYXksIG9iamVjdCwgb3Igc3RyaW5nIGFzIGEgc3RyaW5nIG9mIGNsYXNzZXMgZGVsaW1pdGVkIGJ5IGEgc3BhY2UuXG4gKlxuICogSWYgYHZhbGAgaXMgYW4gYXJyYXksIGFsbCBtZW1iZXJzIG9mIGl0IGFuZCBpdHMgc3ViYXJyYXlzIGFyZSBjb3VudGVkIGFzXG4gKiBjbGFzc2VzLiBJZiBgZXNjYXBpbmdgIGlzIGFuIGFycmF5LCB0aGVuIHdoZXRoZXIgb3Igbm90IHRoZSBpdGVtIGluIGB2YWxgIGlzXG4gKiBlc2NhcGVkIGRlcGVuZHMgb24gdGhlIGNvcnJlc3BvbmRpbmcgaXRlbSBpbiBgZXNjYXBpbmdgLiBJZiBgZXNjYXBpbmdgIGlzXG4gKiBub3QgYW4gYXJyYXksIG5vIGVzY2FwaW5nIGlzIGRvbmUuXG4gKlxuICogSWYgYHZhbGAgaXMgYW4gb2JqZWN0LCBhbGwgdGhlIGtleXMgd2hvc2UgdmFsdWUgaXMgdHJ1dGh5IGFyZSBjb3VudGVkIGFzXG4gKiBjbGFzc2VzLiBObyBlc2NhcGluZyBpcyBkb25lLlxuICpcbiAqIElmIGB2YWxgIGlzIGEgc3RyaW5nLCBpdCBpcyBjb3VudGVkIGFzIGEgY2xhc3MuIE5vIGVzY2FwaW5nIGlzIGRvbmUuXG4gKlxuICogQHBhcmFtIHsoQXJyYXkuPHN0cmluZz58T2JqZWN0LjxzdHJpbmcsIGJvb2xlYW4+fHN0cmluZyl9IHZhbFxuICogQHBhcmFtIHs/QXJyYXkuPHN0cmluZz59IGVzY2FwaW5nXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmV4cG9ydHMuY2xhc3NlcyA9IHB1Z19jbGFzc2VzO1xuZnVuY3Rpb24gcHVnX2NsYXNzZXNfYXJyYXkodmFsLCBlc2NhcGluZykge1xuICB2YXIgY2xhc3NTdHJpbmcgPSAnJywgY2xhc3NOYW1lLCBwYWRkaW5nID0gJycsIGVzY2FwZUVuYWJsZWQgPSBBcnJheS5pc0FycmF5KGVzY2FwaW5nKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICBjbGFzc05hbWUgPSBwdWdfY2xhc3Nlcyh2YWxbaV0pO1xuICAgIGlmICghY2xhc3NOYW1lKSBjb250aW51ZTtcbiAgICBlc2NhcGVFbmFibGVkICYmIGVzY2FwaW5nW2ldICYmIChjbGFzc05hbWUgPSBwdWdfZXNjYXBlKGNsYXNzTmFtZSkpO1xuICAgIGNsYXNzU3RyaW5nID0gY2xhc3NTdHJpbmcgKyBwYWRkaW5nICsgY2xhc3NOYW1lO1xuICAgIHBhZGRpbmcgPSAnICc7XG4gIH1cbiAgcmV0dXJuIGNsYXNzU3RyaW5nO1xufVxuZnVuY3Rpb24gcHVnX2NsYXNzZXNfb2JqZWN0KHZhbCkge1xuICB2YXIgY2xhc3NTdHJpbmcgPSAnJywgcGFkZGluZyA9ICcnO1xuICBmb3IgKHZhciBrZXkgaW4gdmFsKSB7XG4gICAgaWYgKGtleSAmJiB2YWxba2V5XSAmJiBwdWdfaGFzX293bl9wcm9wZXJ0eS5jYWxsKHZhbCwga2V5KSkge1xuICAgICAgY2xhc3NTdHJpbmcgPSBjbGFzc1N0cmluZyArIHBhZGRpbmcgKyBrZXk7XG4gICAgICBwYWRkaW5nID0gJyAnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2xhc3NTdHJpbmc7XG59XG5mdW5jdGlvbiBwdWdfY2xhc3Nlcyh2YWwsIGVzY2FwaW5nKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICByZXR1cm4gcHVnX2NsYXNzZXNfYXJyYXkodmFsLCBlc2NhcGluZyk7XG4gIH0gZWxzZSBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHB1Z19jbGFzc2VzX29iamVjdCh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWwgfHwgJyc7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0IG9iamVjdCBvciBzdHJpbmcgdG8gYSBzdHJpbmcgb2YgQ1NTIHN0eWxlcyBkZWxpbWl0ZWQgYnkgYSBzZW1pY29sb24uXG4gKlxuICogQHBhcmFtIHsoT2JqZWN0LjxzdHJpbmcsIHN0cmluZz58c3RyaW5nKX0gdmFsXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cblxuZXhwb3J0cy5zdHlsZSA9IHB1Z19zdHlsZTtcbmZ1bmN0aW9uIHB1Z19zdHlsZSh2YWwpIHtcbiAgaWYgKCF2YWwpIHJldHVybiAnJztcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgdmFyIG91dCA9ICcnO1xuICAgIGZvciAodmFyIHN0eWxlIGluIHZhbCkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChwdWdfaGFzX293bl9wcm9wZXJ0eS5jYWxsKHZhbCwgc3R5bGUpKSB7XG4gICAgICAgIG91dCA9IG91dCArIHN0eWxlICsgJzonICsgdmFsW3N0eWxlXSArICc7JztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsICsgJyc7XG4gIH1cbn07XG5cbi8qKlxuICogUmVuZGVyIHRoZSBnaXZlbiBhdHRyaWJ1dGUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGtleVxuICogQHBhcmFtIHtTdHJpbmd9IHZhbFxuICogQHBhcmFtIHtCb29sZWFufSBlc2NhcGVkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHRlcnNlXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmV4cG9ydHMuYXR0ciA9IHB1Z19hdHRyO1xuZnVuY3Rpb24gcHVnX2F0dHIoa2V5LCB2YWwsIGVzY2FwZWQsIHRlcnNlKSB7XG4gIGlmICh2YWwgPT09IGZhbHNlIHx8IHZhbCA9PSBudWxsIHx8ICF2YWwgJiYgKGtleSA9PT0gJ2NsYXNzJyB8fCBrZXkgPT09ICdzdHlsZScpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGlmICh2YWwgPT09IHRydWUpIHtcbiAgICByZXR1cm4gJyAnICsgKHRlcnNlID8ga2V5IDoga2V5ICsgJz1cIicgKyBrZXkgKyAnXCInKTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbC50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YWwgPSB2YWwudG9KU09OKCk7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWwgIT09ICdzdHJpbmcnKSB7XG4gICAgdmFsID0gSlNPTi5zdHJpbmdpZnkodmFsKTtcbiAgICBpZiAoIWVzY2FwZWQgJiYgdmFsLmluZGV4T2YoJ1wiJykgIT09IC0xKSB7XG4gICAgICByZXR1cm4gJyAnICsga2V5ICsgJz1cXCcnICsgdmFsLnJlcGxhY2UoLycvZywgJyYjMzk7JykgKyAnXFwnJztcbiAgICB9XG4gIH1cbiAgaWYgKGVzY2FwZWQpIHZhbCA9IHB1Z19lc2NhcGUodmFsKTtcbiAgcmV0dXJuICcgJyArIGtleSArICc9XCInICsgdmFsICsgJ1wiJztcbn07XG5cbi8qKlxuICogUmVuZGVyIHRoZSBnaXZlbiBhdHRyaWJ1dGVzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge09iamVjdH0gdGVyc2Ugd2hldGhlciB0byB1c2UgSFRNTDUgdGVyc2UgYm9vbGVhbiBhdHRyaWJ1dGVzXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmV4cG9ydHMuYXR0cnMgPSBwdWdfYXR0cnM7XG5mdW5jdGlvbiBwdWdfYXR0cnMob2JqLCB0ZXJzZSl7XG4gIHZhciBhdHRycyA9ICcnO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBpZiAocHVnX2hhc19vd25fcHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgIHZhciB2YWwgPSBvYmpba2V5XTtcblxuICAgICAgaWYgKCdjbGFzcycgPT09IGtleSkge1xuICAgICAgICB2YWwgPSBwdWdfY2xhc3Nlcyh2YWwpO1xuICAgICAgICBhdHRycyA9IHB1Z19hdHRyKGtleSwgdmFsLCBmYWxzZSwgdGVyc2UpICsgYXR0cnM7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCdzdHlsZScgPT09IGtleSkge1xuICAgICAgICB2YWwgPSBwdWdfc3R5bGUodmFsKTtcbiAgICAgIH1cbiAgICAgIGF0dHJzICs9IHB1Z19hdHRyKGtleSwgdmFsLCBmYWxzZSwgdGVyc2UpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhdHRycztcbn07XG5cbi8qKlxuICogRXNjYXBlIHRoZSBnaXZlbiBzdHJpbmcgb2YgYGh0bWxgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBodG1sXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG52YXIgcHVnX21hdGNoX2h0bWwgPSAvW1wiJjw+XS87XG5leHBvcnRzLmVzY2FwZSA9IHB1Z19lc2NhcGU7XG5mdW5jdGlvbiBwdWdfZXNjYXBlKF9odG1sKXtcbiAgdmFyIGh0bWwgPSAnJyArIF9odG1sO1xuICB2YXIgcmVnZXhSZXN1bHQgPSBwdWdfbWF0Y2hfaHRtbC5leGVjKGh0bWwpO1xuICBpZiAoIXJlZ2V4UmVzdWx0KSByZXR1cm4gX2h0bWw7XG5cbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgaSwgbGFzdEluZGV4LCBlc2NhcGU7XG4gIGZvciAoaSA9IHJlZ2V4UmVzdWx0LmluZGV4LCBsYXN0SW5kZXggPSAwOyBpIDwgaHRtbC5sZW5ndGg7IGkrKykge1xuICAgIHN3aXRjaCAoaHRtbC5jaGFyQ29kZUF0KGkpKSB7XG4gICAgICBjYXNlIDM0OiBlc2NhcGUgPSAnJnF1b3Q7JzsgYnJlYWs7XG4gICAgICBjYXNlIDM4OiBlc2NhcGUgPSAnJmFtcDsnOyBicmVhaztcbiAgICAgIGNhc2UgNjA6IGVzY2FwZSA9ICcmbHQ7JzsgYnJlYWs7XG4gICAgICBjYXNlIDYyOiBlc2NhcGUgPSAnJmd0Oyc7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogY29udGludWU7XG4gICAgfVxuICAgIGlmIChsYXN0SW5kZXggIT09IGkpIHJlc3VsdCArPSBodG1sLnN1YnN0cmluZyhsYXN0SW5kZXgsIGkpO1xuICAgIGxhc3RJbmRleCA9IGkgKyAxO1xuICAgIHJlc3VsdCArPSBlc2NhcGU7XG4gIH1cbiAgaWYgKGxhc3RJbmRleCAhPT0gaSkgcmV0dXJuIHJlc3VsdCArIGh0bWwuc3Vic3RyaW5nKGxhc3RJbmRleCwgaSk7XG4gIGVsc2UgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogUmUtdGhyb3cgdGhlIGdpdmVuIGBlcnJgIGluIGNvbnRleHQgdG8gdGhlXG4gKiB0aGUgcHVnIGluIGBmaWxlbmFtZWAgYXQgdGhlIGdpdmVuIGBsaW5lbm9gLlxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IGVyclxuICogQHBhcmFtIHtTdHJpbmd9IGZpbGVuYW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gbGluZW5vXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIG9yaWdpbmFsIHNvdXJjZVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5yZXRocm93ID0gcHVnX3JldGhyb3c7XG5mdW5jdGlvbiBwdWdfcmV0aHJvdyhlcnIsIGZpbGVuYW1lLCBsaW5lbm8sIHN0cil7XG4gIGlmICghKGVyciBpbnN0YW5jZW9mIEVycm9yKSkgdGhyb3cgZXJyO1xuICBpZiAoKHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgfHwgIWZpbGVuYW1lKSAmJiAhc3RyKSB7XG4gICAgZXJyLm1lc3NhZ2UgKz0gJyBvbiBsaW5lICcgKyBsaW5lbm87XG4gICAgdGhyb3cgZXJyO1xuICB9XG4gIHRyeSB7XG4gICAgc3RyID0gc3RyIHx8IHJlcXVpcmUoJ2ZzJykucmVhZEZpbGVTeW5jKGZpbGVuYW1lLCAndXRmOCcpXG4gIH0gY2F0Y2ggKGV4KSB7XG4gICAgcHVnX3JldGhyb3coZXJyLCBudWxsLCBsaW5lbm8pXG4gIH1cbiAgdmFyIGNvbnRleHQgPSAzXG4gICAgLCBsaW5lcyA9IHN0ci5zcGxpdCgnXFxuJylcbiAgICAsIHN0YXJ0ID0gTWF0aC5tYXgobGluZW5vIC0gY29udGV4dCwgMClcbiAgICAsIGVuZCA9IE1hdGgubWluKGxpbmVzLmxlbmd0aCwgbGluZW5vICsgY29udGV4dCk7XG5cbiAgLy8gRXJyb3IgY29udGV4dFxuICB2YXIgY29udGV4dCA9IGxpbmVzLnNsaWNlKHN0YXJ0LCBlbmQpLm1hcChmdW5jdGlvbihsaW5lLCBpKXtcbiAgICB2YXIgY3VyciA9IGkgKyBzdGFydCArIDE7XG4gICAgcmV0dXJuIChjdXJyID09IGxpbmVubyA/ICcgID4gJyA6ICcgICAgJylcbiAgICAgICsgY3VyclxuICAgICAgKyAnfCAnXG4gICAgICArIGxpbmU7XG4gIH0pLmpvaW4oJ1xcbicpO1xuXG4gIC8vIEFsdGVyIGV4Y2VwdGlvbiBtZXNzYWdlXG4gIGVyci5wYXRoID0gZmlsZW5hbWU7XG4gIGVyci5tZXNzYWdlID0gKGZpbGVuYW1lIHx8ICdQdWcnKSArICc6JyArIGxpbmVub1xuICAgICsgJ1xcbicgKyBjb250ZXh0ICsgJ1xcblxcbicgKyBlcnIubWVzc2FnZTtcbiAgdGhyb3cgZXJyO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG52YXIgcGVyY2VudFR3ZW50aWVzID0gLyUyMC9nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAnZGVmYXVsdCc6ICdSRkMzOTg2JyxcbiAgICBmb3JtYXR0ZXJzOiB7XG4gICAgICAgIFJGQzE3Mzg6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2UuY2FsbCh2YWx1ZSwgcGVyY2VudFR3ZW50aWVzLCAnKycpO1xuICAgICAgICB9LFxuICAgICAgICBSRkMzOTg2OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgUkZDMTczODogJ1JGQzE3MzgnLFxuICAgIFJGQzM5ODY6ICdSRkMzOTg2J1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vc3RyaW5naWZ5Jyk7XG52YXIgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJyk7XG52YXIgZm9ybWF0cyA9IHJlcXVpcmUoJy4vZm9ybWF0cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBmb3JtYXRzOiBmb3JtYXRzLFxuICAgIHBhcnNlOiBwYXJzZSxcbiAgICBzdHJpbmdpZnk6IHN0cmluZ2lmeVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIGRlZmF1bHRzID0ge1xuICAgIGFsbG93RG90czogZmFsc2UsXG4gICAgYWxsb3dQcm90b3R5cGVzOiBmYWxzZSxcbiAgICBhcnJheUxpbWl0OiAyMCxcbiAgICBjaGFyc2V0OiAndXRmLTgnLFxuICAgIGNoYXJzZXRTZW50aW5lbDogZmFsc2UsXG4gICAgY29tbWE6IGZhbHNlLFxuICAgIGRlY29kZXI6IHV0aWxzLmRlY29kZSxcbiAgICBkZWxpbWl0ZXI6ICcmJyxcbiAgICBkZXB0aDogNSxcbiAgICBpZ25vcmVRdWVyeVByZWZpeDogZmFsc2UsXG4gICAgaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzOiBmYWxzZSxcbiAgICBwYXJhbWV0ZXJMaW1pdDogMTAwMCxcbiAgICBwYXJzZUFycmF5czogdHJ1ZSxcbiAgICBwbGFpbk9iamVjdHM6IGZhbHNlLFxuICAgIHN0cmljdE51bGxIYW5kbGluZzogZmFsc2Vcbn07XG5cbnZhciBpbnRlcnByZXROdW1lcmljRW50aXRpZXMgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8mIyhcXGQrKTsvZywgZnVuY3Rpb24gKCQwLCBudW1iZXJTdHIpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQobnVtYmVyU3RyLCAxMCkpO1xuICAgIH0pO1xufTtcblxuLy8gVGhpcyBpcyB3aGF0IGJyb3dzZXJzIHdpbGwgc3VibWl0IHdoZW4gdGhlIOKckyBjaGFyYWN0ZXIgb2NjdXJzIGluIGFuXG4vLyBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgYm9keSBhbmQgdGhlIGVuY29kaW5nIG9mIHRoZSBwYWdlIGNvbnRhaW5pbmdcbi8vIHRoZSBmb3JtIGlzIGlzby04ODU5LTEsIG9yIHdoZW4gdGhlIHN1Ym1pdHRlZCBmb3JtIGhhcyBhbiBhY2NlcHQtY2hhcnNldFxuLy8gYXR0cmlidXRlIG9mIGlzby04ODU5LTEuIFByZXN1bWFibHkgYWxzbyB3aXRoIG90aGVyIGNoYXJzZXRzIHRoYXQgZG8gbm90IGNvbnRhaW5cbi8vIHRoZSDinJMgY2hhcmFjdGVyLCBzdWNoIGFzIHVzLWFzY2lpLlxudmFyIGlzb1NlbnRpbmVsID0gJ3V0Zjg9JTI2JTIzMTAwMDMlM0InOyAvLyBlbmNvZGVVUklDb21wb25lbnQoJyYjMTAwMDM7JylcblxuLy8gVGhlc2UgYXJlIHRoZSBwZXJjZW50LWVuY29kZWQgdXRmLTggb2N0ZXRzIHJlcHJlc2VudGluZyBhIGNoZWNrbWFyaywgaW5kaWNhdGluZyB0aGF0IHRoZSByZXF1ZXN0IGFjdHVhbGx5IGlzIHV0Zi04IGVuY29kZWQuXG52YXIgY2hhcnNldFNlbnRpbmVsID0gJ3V0Zjg9JUUyJTlDJTkzJzsgLy8gZW5jb2RlVVJJQ29tcG9uZW50KCfinJMnKVxuXG52YXIgcGFyc2VWYWx1ZXMgPSBmdW5jdGlvbiBwYXJzZVF1ZXJ5U3RyaW5nVmFsdWVzKHN0ciwgb3B0aW9ucykge1xuICAgIHZhciBvYmogPSB7fTtcbiAgICB2YXIgY2xlYW5TdHIgPSBvcHRpb25zLmlnbm9yZVF1ZXJ5UHJlZml4ID8gc3RyLnJlcGxhY2UoL15cXD8vLCAnJykgOiBzdHI7XG4gICAgdmFyIGxpbWl0ID0gb3B0aW9ucy5wYXJhbWV0ZXJMaW1pdCA9PT0gSW5maW5pdHkgPyB1bmRlZmluZWQgOiBvcHRpb25zLnBhcmFtZXRlckxpbWl0O1xuICAgIHZhciBwYXJ0cyA9IGNsZWFuU3RyLnNwbGl0KG9wdGlvbnMuZGVsaW1pdGVyLCBsaW1pdCk7XG4gICAgdmFyIHNraXBJbmRleCA9IC0xOyAvLyBLZWVwIHRyYWNrIG9mIHdoZXJlIHRoZSB1dGY4IHNlbnRpbmVsIHdhcyBmb3VuZFxuICAgIHZhciBpO1xuXG4gICAgdmFyIGNoYXJzZXQgPSBvcHRpb25zLmNoYXJzZXQ7XG4gICAgaWYgKG9wdGlvbnMuY2hhcnNldFNlbnRpbmVsKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKHBhcnRzW2ldLmluZGV4T2YoJ3V0Zjg9JykgPT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAocGFydHNbaV0gPT09IGNoYXJzZXRTZW50aW5lbCkge1xuICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gJ3V0Zi04JztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcnRzW2ldID09PSBpc29TZW50aW5lbCkge1xuICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gJ2lzby04ODU5LTEnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBza2lwSW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIGkgPSBwYXJ0cy5sZW5ndGg7IC8vIFRoZSBlc2xpbnQgc2V0dGluZ3MgZG8gbm90IGFsbG93IGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChpID09PSBza2lwSW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwYXJ0ID0gcGFydHNbaV07XG5cbiAgICAgICAgdmFyIGJyYWNrZXRFcXVhbHNQb3MgPSBwYXJ0LmluZGV4T2YoJ109Jyk7XG4gICAgICAgIHZhciBwb3MgPSBicmFja2V0RXF1YWxzUG9zID09PSAtMSA/IHBhcnQuaW5kZXhPZignPScpIDogYnJhY2tldEVxdWFsc1BvcyArIDE7XG5cbiAgICAgICAgdmFyIGtleSwgdmFsO1xuICAgICAgICBpZiAocG9zID09PSAtMSkge1xuICAgICAgICAgICAga2V5ID0gb3B0aW9ucy5kZWNvZGVyKHBhcnQsIGRlZmF1bHRzLmRlY29kZXIsIGNoYXJzZXQpO1xuICAgICAgICAgICAgdmFsID0gb3B0aW9ucy5zdHJpY3ROdWxsSGFuZGxpbmcgPyBudWxsIDogJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXkgPSBvcHRpb25zLmRlY29kZXIocGFydC5zbGljZSgwLCBwb3MpLCBkZWZhdWx0cy5kZWNvZGVyLCBjaGFyc2V0KTtcbiAgICAgICAgICAgIHZhbCA9IG9wdGlvbnMuZGVjb2RlcihwYXJ0LnNsaWNlKHBvcyArIDEpLCBkZWZhdWx0cy5kZWNvZGVyLCBjaGFyc2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWwgJiYgb3B0aW9ucy5pbnRlcnByZXROdW1lcmljRW50aXRpZXMgJiYgY2hhcnNldCA9PT0gJ2lzby04ODU5LTEnKSB7XG4gICAgICAgICAgICB2YWwgPSBpbnRlcnByZXROdW1lcmljRW50aXRpZXModmFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWwgJiYgb3B0aW9ucy5jb21tYSAmJiB2YWwuaW5kZXhPZignLCcpID4gLTEpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5zcGxpdCgnLCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhcy5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgICAgb2JqW2tleV0gPSB1dGlscy5jb21iaW5lKG9ialtrZXldLCB2YWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JqW2tleV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xufTtcblxudmFyIHBhcnNlT2JqZWN0ID0gZnVuY3Rpb24gKGNoYWluLCB2YWwsIG9wdGlvbnMpIHtcbiAgICB2YXIgbGVhZiA9IHZhbDtcblxuICAgIGZvciAodmFyIGkgPSBjaGFpbi5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgb2JqO1xuICAgICAgICB2YXIgcm9vdCA9IGNoYWluW2ldO1xuXG4gICAgICAgIGlmIChyb290ID09PSAnW10nICYmIG9wdGlvbnMucGFyc2VBcnJheXMpIHtcbiAgICAgICAgICAgIG9iaiA9IFtdLmNvbmNhdChsZWFmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9iaiA9IG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuICAgICAgICAgICAgdmFyIGNsZWFuUm9vdCA9IHJvb3QuY2hhckF0KDApID09PSAnWycgJiYgcm9vdC5jaGFyQXQocm9vdC5sZW5ndGggLSAxKSA9PT0gJ10nID8gcm9vdC5zbGljZSgxLCAtMSkgOiByb290O1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gcGFyc2VJbnQoY2xlYW5Sb290LCAxMCk7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMucGFyc2VBcnJheXMgJiYgY2xlYW5Sb290ID09PSAnJykge1xuICAgICAgICAgICAgICAgIG9iaiA9IHsgMDogbGVhZiB9O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAhaXNOYU4oaW5kZXgpXG4gICAgICAgICAgICAgICAgJiYgcm9vdCAhPT0gY2xlYW5Sb290XG4gICAgICAgICAgICAgICAgJiYgU3RyaW5nKGluZGV4KSA9PT0gY2xlYW5Sb290XG4gICAgICAgICAgICAgICAgJiYgaW5kZXggPj0gMFxuICAgICAgICAgICAgICAgICYmIChvcHRpb25zLnBhcnNlQXJyYXlzICYmIGluZGV4IDw9IG9wdGlvbnMuYXJyYXlMaW1pdClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG9iaiA9IFtdO1xuICAgICAgICAgICAgICAgIG9ialtpbmRleF0gPSBsZWFmO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvYmpbY2xlYW5Sb290XSA9IGxlYWY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZWFmID0gb2JqO1xuICAgIH1cblxuICAgIHJldHVybiBsZWFmO1xufTtcblxudmFyIHBhcnNlS2V5cyA9IGZ1bmN0aW9uIHBhcnNlUXVlcnlTdHJpbmdLZXlzKGdpdmVuS2V5LCB2YWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWdpdmVuS2V5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUcmFuc2Zvcm0gZG90IG5vdGF0aW9uIHRvIGJyYWNrZXQgbm90YXRpb25cbiAgICB2YXIga2V5ID0gb3B0aW9ucy5hbGxvd0RvdHMgPyBnaXZlbktleS5yZXBsYWNlKC9cXC4oW14uW10rKS9nLCAnWyQxXScpIDogZ2l2ZW5LZXk7XG5cbiAgICAvLyBUaGUgcmVnZXggY2h1bmtzXG5cbiAgICB2YXIgYnJhY2tldHMgPSAvKFxcW1teW1xcXV0qXSkvO1xuICAgIHZhciBjaGlsZCA9IC8oXFxbW15bXFxdXSpdKS9nO1xuXG4gICAgLy8gR2V0IHRoZSBwYXJlbnRcblxuICAgIHZhciBzZWdtZW50ID0gYnJhY2tldHMuZXhlYyhrZXkpO1xuICAgIHZhciBwYXJlbnQgPSBzZWdtZW50ID8ga2V5LnNsaWNlKDAsIHNlZ21lbnQuaW5kZXgpIDoga2V5O1xuXG4gICAgLy8gU3Rhc2ggdGhlIHBhcmVudCBpZiBpdCBleGlzdHNcblxuICAgIHZhciBrZXlzID0gW107XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgICAvLyBJZiB3ZSBhcmVuJ3QgdXNpbmcgcGxhaW4gb2JqZWN0cywgb3B0aW9uYWxseSBwcmVmaXgga2V5cyB0aGF0IHdvdWxkIG92ZXJ3cml0ZSBvYmplY3QgcHJvdG90eXBlIHByb3BlcnRpZXNcbiAgICAgICAgaWYgKCFvcHRpb25zLnBsYWluT2JqZWN0cyAmJiBoYXMuY2FsbChPYmplY3QucHJvdG90eXBlLCBwYXJlbnQpKSB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuYWxsb3dQcm90b3R5cGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAga2V5cy5wdXNoKHBhcmVudCk7XG4gICAgfVxuXG4gICAgLy8gTG9vcCB0aHJvdWdoIGNoaWxkcmVuIGFwcGVuZGluZyB0byB0aGUgYXJyYXkgdW50aWwgd2UgaGl0IGRlcHRoXG5cbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKChzZWdtZW50ID0gY2hpbGQuZXhlYyhrZXkpKSAhPT0gbnVsbCAmJiBpIDwgb3B0aW9ucy5kZXB0aCkge1xuICAgICAgICBpICs9IDE7XG4gICAgICAgIGlmICghb3B0aW9ucy5wbGFpbk9iamVjdHMgJiYgaGFzLmNhbGwoT2JqZWN0LnByb3RvdHlwZSwgc2VnbWVudFsxXS5zbGljZSgxLCAtMSkpKSB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuYWxsb3dQcm90b3R5cGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGtleXMucHVzaChzZWdtZW50WzFdKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSdzIGEgcmVtYWluZGVyLCBqdXN0IGFkZCB3aGF0ZXZlciBpcyBsZWZ0XG5cbiAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICBrZXlzLnB1c2goJ1snICsga2V5LnNsaWNlKHNlZ21lbnQuaW5kZXgpICsgJ10nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VPYmplY3Qoa2V5cywgdmFsLCBvcHRpb25zKTtcbn07XG5cbnZhciBub3JtYWxpemVQYXJzZU9wdGlvbnMgPSBmdW5jdGlvbiBub3JtYWxpemVQYXJzZU9wdGlvbnMob3B0cykge1xuICAgIGlmICghb3B0cykge1xuICAgICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuZGVjb2RlciAhPT0gbnVsbCAmJiBvcHRzLmRlY29kZXIgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0cy5kZWNvZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0RlY29kZXIgaGFzIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRzLmNoYXJzZXQgIT09ICd1bmRlZmluZWQnICYmIG9wdHMuY2hhcnNldCAhPT0gJ3V0Zi04JyAmJiBvcHRzLmNoYXJzZXQgIT09ICdpc28tODg1OS0xJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBjaGFyc2V0IG9wdGlvbiBtdXN0IGJlIGVpdGhlciB1dGYtOCwgaXNvLTg4NTktMSwgb3IgdW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIHZhciBjaGFyc2V0ID0gdHlwZW9mIG9wdHMuY2hhcnNldCA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0cy5jaGFyc2V0IDogb3B0cy5jaGFyc2V0O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWxsb3dEb3RzOiB0eXBlb2Ygb3B0cy5hbGxvd0RvdHMgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdHMuYWxsb3dEb3RzIDogISFvcHRzLmFsbG93RG90cyxcbiAgICAgICAgYWxsb3dQcm90b3R5cGVzOiB0eXBlb2Ygb3B0cy5hbGxvd1Byb3RvdHlwZXMgPT09ICdib29sZWFuJyA/IG9wdHMuYWxsb3dQcm90b3R5cGVzIDogZGVmYXVsdHMuYWxsb3dQcm90b3R5cGVzLFxuICAgICAgICBhcnJheUxpbWl0OiB0eXBlb2Ygb3B0cy5hcnJheUxpbWl0ID09PSAnbnVtYmVyJyA/IG9wdHMuYXJyYXlMaW1pdCA6IGRlZmF1bHRzLmFycmF5TGltaXQsXG4gICAgICAgIGNoYXJzZXQ6IGNoYXJzZXQsXG4gICAgICAgIGNoYXJzZXRTZW50aW5lbDogdHlwZW9mIG9wdHMuY2hhcnNldFNlbnRpbmVsID09PSAnYm9vbGVhbicgPyBvcHRzLmNoYXJzZXRTZW50aW5lbCA6IGRlZmF1bHRzLmNoYXJzZXRTZW50aW5lbCxcbiAgICAgICAgY29tbWE6IHR5cGVvZiBvcHRzLmNvbW1hID09PSAnYm9vbGVhbicgPyBvcHRzLmNvbW1hIDogZGVmYXVsdHMuY29tbWEsXG4gICAgICAgIGRlY29kZXI6IHR5cGVvZiBvcHRzLmRlY29kZXIgPT09ICdmdW5jdGlvbicgPyBvcHRzLmRlY29kZXIgOiBkZWZhdWx0cy5kZWNvZGVyLFxuICAgICAgICBkZWxpbWl0ZXI6IHR5cGVvZiBvcHRzLmRlbGltaXRlciA9PT0gJ3N0cmluZycgfHwgdXRpbHMuaXNSZWdFeHAob3B0cy5kZWxpbWl0ZXIpID8gb3B0cy5kZWxpbWl0ZXIgOiBkZWZhdWx0cy5kZWxpbWl0ZXIsXG4gICAgICAgIGRlcHRoOiB0eXBlb2Ygb3B0cy5kZXB0aCA9PT0gJ251bWJlcicgPyBvcHRzLmRlcHRoIDogZGVmYXVsdHMuZGVwdGgsXG4gICAgICAgIGlnbm9yZVF1ZXJ5UHJlZml4OiBvcHRzLmlnbm9yZVF1ZXJ5UHJlZml4ID09PSB0cnVlLFxuICAgICAgICBpbnRlcnByZXROdW1lcmljRW50aXRpZXM6IHR5cGVvZiBvcHRzLmludGVycHJldE51bWVyaWNFbnRpdGllcyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5pbnRlcnByZXROdW1lcmljRW50aXRpZXMgOiBkZWZhdWx0cy5pbnRlcnByZXROdW1lcmljRW50aXRpZXMsXG4gICAgICAgIHBhcmFtZXRlckxpbWl0OiB0eXBlb2Ygb3B0cy5wYXJhbWV0ZXJMaW1pdCA9PT0gJ251bWJlcicgPyBvcHRzLnBhcmFtZXRlckxpbWl0IDogZGVmYXVsdHMucGFyYW1ldGVyTGltaXQsXG4gICAgICAgIHBhcnNlQXJyYXlzOiBvcHRzLnBhcnNlQXJyYXlzICE9PSBmYWxzZSxcbiAgICAgICAgcGxhaW5PYmplY3RzOiB0eXBlb2Ygb3B0cy5wbGFpbk9iamVjdHMgPT09ICdib29sZWFuJyA/IG9wdHMucGxhaW5PYmplY3RzIDogZGVmYXVsdHMucGxhaW5PYmplY3RzLFxuICAgICAgICBzdHJpY3ROdWxsSGFuZGxpbmc6IHR5cGVvZiBvcHRzLnN0cmljdE51bGxIYW5kbGluZyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5zdHJpY3ROdWxsSGFuZGxpbmcgOiBkZWZhdWx0cy5zdHJpY3ROdWxsSGFuZGxpbmdcbiAgICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RyLCBvcHRzKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBub3JtYWxpemVQYXJzZU9wdGlvbnMob3B0cyk7XG5cbiAgICBpZiAoc3RyID09PSAnJyB8fCBzdHIgPT09IG51bGwgfHwgdHlwZW9mIHN0ciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuICAgIH1cblxuICAgIHZhciB0ZW1wT2JqID0gdHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgPyBwYXJzZVZhbHVlcyhzdHIsIG9wdGlvbnMpIDogc3RyO1xuICAgIHZhciBvYmogPSBvcHRpb25zLnBsYWluT2JqZWN0cyA/IE9iamVjdC5jcmVhdGUobnVsbCkgOiB7fTtcblxuICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUga2V5cyBhbmQgc2V0dXAgdGhlIG5ldyBvYmplY3RcblxuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModGVtcE9iaik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICB2YXIgbmV3T2JqID0gcGFyc2VLZXlzKGtleSwgdGVtcE9ialtrZXldLCBvcHRpb25zKTtcbiAgICAgICAgb2JqID0gdXRpbHMubWVyZ2Uob2JqLCBuZXdPYmosIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiB1dGlscy5jb21wYWN0KG9iaik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgZm9ybWF0cyA9IHJlcXVpcmUoJy4vZm9ybWF0cycpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBhcnJheVByZWZpeEdlbmVyYXRvcnMgPSB7XG4gICAgYnJhY2tldHM6IGZ1bmN0aW9uIGJyYWNrZXRzKHByZWZpeCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZ1bmMtbmFtZS1tYXRjaGluZ1xuICAgICAgICByZXR1cm4gcHJlZml4ICsgJ1tdJztcbiAgICB9LFxuICAgIGNvbW1hOiAnY29tbWEnLFxuICAgIGluZGljZXM6IGZ1bmN0aW9uIGluZGljZXMocHJlZml4LCBrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBmdW5jLW5hbWUtbWF0Y2hpbmdcbiAgICAgICAgcmV0dXJuIHByZWZpeCArICdbJyArIGtleSArICddJztcbiAgICB9LFxuICAgIHJlcGVhdDogZnVuY3Rpb24gcmVwZWF0KHByZWZpeCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZ1bmMtbmFtZS1tYXRjaGluZ1xuICAgICAgICByZXR1cm4gcHJlZml4O1xuICAgIH1cbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbnZhciBwdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2g7XG52YXIgcHVzaFRvQXJyYXkgPSBmdW5jdGlvbiAoYXJyLCB2YWx1ZU9yQXJyYXkpIHtcbiAgICBwdXNoLmFwcGx5KGFyciwgaXNBcnJheSh2YWx1ZU9yQXJyYXkpID8gdmFsdWVPckFycmF5IDogW3ZhbHVlT3JBcnJheV0pO1xufTtcblxudmFyIHRvSVNPID0gRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc7XG5cbnZhciBkZWZhdWx0cyA9IHtcbiAgICBhZGRRdWVyeVByZWZpeDogZmFsc2UsXG4gICAgYWxsb3dEb3RzOiBmYWxzZSxcbiAgICBjaGFyc2V0OiAndXRmLTgnLFxuICAgIGNoYXJzZXRTZW50aW5lbDogZmFsc2UsXG4gICAgZGVsaW1pdGVyOiAnJicsXG4gICAgZW5jb2RlOiB0cnVlLFxuICAgIGVuY29kZXI6IHV0aWxzLmVuY29kZSxcbiAgICBlbmNvZGVWYWx1ZXNPbmx5OiBmYWxzZSxcbiAgICBmb3JtYXR0ZXI6IGZvcm1hdHMuZm9ybWF0dGVyc1tmb3JtYXRzWydkZWZhdWx0J11dLFxuICAgIC8vIGRlcHJlY2F0ZWRcbiAgICBpbmRpY2VzOiBmYWxzZSxcbiAgICBzZXJpYWxpemVEYXRlOiBmdW5jdGlvbiBzZXJpYWxpemVEYXRlKGRhdGUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBmdW5jLW5hbWUtbWF0Y2hpbmdcbiAgICAgICAgcmV0dXJuIHRvSVNPLmNhbGwoZGF0ZSk7XG4gICAgfSxcbiAgICBza2lwTnVsbHM6IGZhbHNlLFxuICAgIHN0cmljdE51bGxIYW5kbGluZzogZmFsc2Vcbn07XG5cbnZhciBzdHJpbmdpZnkgPSBmdW5jdGlvbiBzdHJpbmdpZnkoIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG4gICAgb2JqZWN0LFxuICAgIHByZWZpeCxcbiAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgIHN0cmljdE51bGxIYW5kbGluZyxcbiAgICBza2lwTnVsbHMsXG4gICAgZW5jb2RlcixcbiAgICBmaWx0ZXIsXG4gICAgc29ydCxcbiAgICBhbGxvd0RvdHMsXG4gICAgc2VyaWFsaXplRGF0ZSxcbiAgICBmb3JtYXR0ZXIsXG4gICAgZW5jb2RlVmFsdWVzT25seSxcbiAgICBjaGFyc2V0XG4pIHtcbiAgICB2YXIgb2JqID0gb2JqZWN0O1xuICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG9iaiA9IGZpbHRlcihwcmVmaXgsIG9iaik7XG4gICAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIG9iaiA9IHNlcmlhbGl6ZURhdGUob2JqKTtcbiAgICB9IGVsc2UgaWYgKGdlbmVyYXRlQXJyYXlQcmVmaXggPT09ICdjb21tYScgJiYgaXNBcnJheShvYmopKSB7XG4gICAgICAgIG9iaiA9IG9iai5qb2luKCcsJyk7XG4gICAgfVxuXG4gICAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgICAgICBpZiAoc3RyaWN0TnVsbEhhbmRsaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gZW5jb2RlciAmJiAhZW5jb2RlVmFsdWVzT25seSA/IGVuY29kZXIocHJlZml4LCBkZWZhdWx0cy5lbmNvZGVyLCBjaGFyc2V0KSA6IHByZWZpeDtcbiAgICAgICAgfVxuXG4gICAgICAgIG9iaiA9ICcnO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJyB8fCB0eXBlb2Ygb2JqID09PSAnbnVtYmVyJyB8fCB0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicgfHwgdXRpbHMuaXNCdWZmZXIob2JqKSkge1xuICAgICAgICBpZiAoZW5jb2Rlcikge1xuICAgICAgICAgICAgdmFyIGtleVZhbHVlID0gZW5jb2RlVmFsdWVzT25seSA/IHByZWZpeCA6IGVuY29kZXIocHJlZml4LCBkZWZhdWx0cy5lbmNvZGVyLCBjaGFyc2V0KTtcbiAgICAgICAgICAgIHJldHVybiBbZm9ybWF0dGVyKGtleVZhbHVlKSArICc9JyArIGZvcm1hdHRlcihlbmNvZGVyKG9iaiwgZGVmYXVsdHMuZW5jb2RlciwgY2hhcnNldCkpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2Zvcm1hdHRlcihwcmVmaXgpICsgJz0nICsgZm9ybWF0dGVyKFN0cmluZyhvYmopKV07XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfVxuXG4gICAgdmFyIG9iaktleXM7XG4gICAgaWYgKGlzQXJyYXkoZmlsdGVyKSkge1xuICAgICAgICBvYmpLZXlzID0gZmlsdGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICAgICAgb2JqS2V5cyA9IHNvcnQgPyBrZXlzLnNvcnQoc29ydCkgOiBrZXlzO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqS2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIga2V5ID0gb2JqS2V5c1tpXTtcblxuICAgICAgICBpZiAoc2tpcE51bGxzICYmIG9ialtrZXldID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgIHB1c2hUb0FycmF5KHZhbHVlcywgc3RyaW5naWZ5KFxuICAgICAgICAgICAgICAgIG9ialtrZXldLFxuICAgICAgICAgICAgICAgIHR5cGVvZiBnZW5lcmF0ZUFycmF5UHJlZml4ID09PSAnZnVuY3Rpb24nID8gZ2VuZXJhdGVBcnJheVByZWZpeChwcmVmaXgsIGtleSkgOiBwcmVmaXgsXG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVBcnJheVByZWZpeCxcbiAgICAgICAgICAgICAgICBzdHJpY3ROdWxsSGFuZGxpbmcsXG4gICAgICAgICAgICAgICAgc2tpcE51bGxzLFxuICAgICAgICAgICAgICAgIGVuY29kZXIsXG4gICAgICAgICAgICAgICAgZmlsdGVyLFxuICAgICAgICAgICAgICAgIHNvcnQsXG4gICAgICAgICAgICAgICAgYWxsb3dEb3RzLFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZURhdGUsXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyLFxuICAgICAgICAgICAgICAgIGVuY29kZVZhbHVlc09ubHksXG4gICAgICAgICAgICAgICAgY2hhcnNldFxuICAgICAgICAgICAgKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwdXNoVG9BcnJheSh2YWx1ZXMsIHN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICBvYmpba2V5XSxcbiAgICAgICAgICAgICAgICBwcmVmaXggKyAoYWxsb3dEb3RzID8gJy4nICsga2V5IDogJ1snICsga2V5ICsgJ10nKSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgICAgICAgICAgICAgIHN0cmljdE51bGxIYW5kbGluZyxcbiAgICAgICAgICAgICAgICBza2lwTnVsbHMsXG4gICAgICAgICAgICAgICAgZW5jb2RlcixcbiAgICAgICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICAgICAgc29ydCxcbiAgICAgICAgICAgICAgICBhbGxvd0RvdHMsXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgZW5jb2RlVmFsdWVzT25seSxcbiAgICAgICAgICAgICAgICBjaGFyc2V0XG4gICAgICAgICAgICApKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZXM7XG59O1xuXG52YXIgbm9ybWFsaXplU3RyaW5naWZ5T3B0aW9ucyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZVN0cmluZ2lmeU9wdGlvbnMob3B0cykge1xuICAgIGlmICghb3B0cykge1xuICAgICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuZW5jb2RlciAhPT0gbnVsbCAmJiBvcHRzLmVuY29kZXIgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0cy5lbmNvZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0VuY29kZXIgaGFzIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgdmFyIGNoYXJzZXQgPSBvcHRzLmNoYXJzZXQgfHwgZGVmYXVsdHMuY2hhcnNldDtcbiAgICBpZiAodHlwZW9mIG9wdHMuY2hhcnNldCAhPT0gJ3VuZGVmaW5lZCcgJiYgb3B0cy5jaGFyc2V0ICE9PSAndXRmLTgnICYmIG9wdHMuY2hhcnNldCAhPT0gJ2lzby04ODU5LTEnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBjaGFyc2V0IG9wdGlvbiBtdXN0IGJlIGVpdGhlciB1dGYtOCwgaXNvLTg4NTktMSwgb3IgdW5kZWZpbmVkJyk7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdCA9IGZvcm1hdHNbJ2RlZmF1bHQnXTtcbiAgICBpZiAodHlwZW9mIG9wdHMuZm9ybWF0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpZiAoIWhhcy5jYWxsKGZvcm1hdHMuZm9ybWF0dGVycywgb3B0cy5mb3JtYXQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGZvcm1hdCBvcHRpb24gcHJvdmlkZWQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgZm9ybWF0ID0gb3B0cy5mb3JtYXQ7XG4gICAgfVxuICAgIHZhciBmb3JtYXR0ZXIgPSBmb3JtYXRzLmZvcm1hdHRlcnNbZm9ybWF0XTtcblxuICAgIHZhciBmaWx0ZXIgPSBkZWZhdWx0cy5maWx0ZXI7XG4gICAgaWYgKHR5cGVvZiBvcHRzLmZpbHRlciA9PT0gJ2Z1bmN0aW9uJyB8fCBpc0FycmF5KG9wdHMuZmlsdGVyKSkge1xuICAgICAgICBmaWx0ZXIgPSBvcHRzLmZpbHRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBhZGRRdWVyeVByZWZpeDogdHlwZW9mIG9wdHMuYWRkUXVlcnlQcmVmaXggPT09ICdib29sZWFuJyA/IG9wdHMuYWRkUXVlcnlQcmVmaXggOiBkZWZhdWx0cy5hZGRRdWVyeVByZWZpeCxcbiAgICAgICAgYWxsb3dEb3RzOiB0eXBlb2Ygb3B0cy5hbGxvd0RvdHMgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdHMuYWxsb3dEb3RzIDogISFvcHRzLmFsbG93RG90cyxcbiAgICAgICAgY2hhcnNldDogY2hhcnNldCxcbiAgICAgICAgY2hhcnNldFNlbnRpbmVsOiB0eXBlb2Ygb3B0cy5jaGFyc2V0U2VudGluZWwgPT09ICdib29sZWFuJyA/IG9wdHMuY2hhcnNldFNlbnRpbmVsIDogZGVmYXVsdHMuY2hhcnNldFNlbnRpbmVsLFxuICAgICAgICBkZWxpbWl0ZXI6IHR5cGVvZiBvcHRzLmRlbGltaXRlciA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0cy5kZWxpbWl0ZXIgOiBvcHRzLmRlbGltaXRlcixcbiAgICAgICAgZW5jb2RlOiB0eXBlb2Ygb3B0cy5lbmNvZGUgPT09ICdib29sZWFuJyA/IG9wdHMuZW5jb2RlIDogZGVmYXVsdHMuZW5jb2RlLFxuICAgICAgICBlbmNvZGVyOiB0eXBlb2Ygb3B0cy5lbmNvZGVyID09PSAnZnVuY3Rpb24nID8gb3B0cy5lbmNvZGVyIDogZGVmYXVsdHMuZW5jb2RlcixcbiAgICAgICAgZW5jb2RlVmFsdWVzT25seTogdHlwZW9mIG9wdHMuZW5jb2RlVmFsdWVzT25seSA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5lbmNvZGVWYWx1ZXNPbmx5IDogZGVmYXVsdHMuZW5jb2RlVmFsdWVzT25seSxcbiAgICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICAgIGZvcm1hdHRlcjogZm9ybWF0dGVyLFxuICAgICAgICBzZXJpYWxpemVEYXRlOiB0eXBlb2Ygb3B0cy5zZXJpYWxpemVEYXRlID09PSAnZnVuY3Rpb24nID8gb3B0cy5zZXJpYWxpemVEYXRlIDogZGVmYXVsdHMuc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgc2tpcE51bGxzOiB0eXBlb2Ygb3B0cy5za2lwTnVsbHMgPT09ICdib29sZWFuJyA/IG9wdHMuc2tpcE51bGxzIDogZGVmYXVsdHMuc2tpcE51bGxzLFxuICAgICAgICBzb3J0OiB0eXBlb2Ygb3B0cy5zb3J0ID09PSAnZnVuY3Rpb24nID8gb3B0cy5zb3J0IDogbnVsbCxcbiAgICAgICAgc3RyaWN0TnVsbEhhbmRsaW5nOiB0eXBlb2Ygb3B0cy5zdHJpY3ROdWxsSGFuZGxpbmcgPT09ICdib29sZWFuJyA/IG9wdHMuc3RyaWN0TnVsbEhhbmRsaW5nIDogZGVmYXVsdHMuc3RyaWN0TnVsbEhhbmRsaW5nXG4gICAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgb3B0cykge1xuICAgIHZhciBvYmogPSBvYmplY3Q7XG4gICAgdmFyIG9wdGlvbnMgPSBub3JtYWxpemVTdHJpbmdpZnlPcHRpb25zKG9wdHMpO1xuXG4gICAgdmFyIG9iaktleXM7XG4gICAgdmFyIGZpbHRlcjtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5maWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgICAgIG9iaiA9IGZpbHRlcignJywgb2JqKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob3B0aW9ucy5maWx0ZXIpKSB7XG4gICAgICAgIGZpbHRlciA9IG9wdGlvbnMuZmlsdGVyO1xuICAgICAgICBvYmpLZXlzID0gZmlsdGVyO1xuICAgIH1cblxuICAgIHZhciBrZXlzID0gW107XG5cbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICB2YXIgYXJyYXlGb3JtYXQ7XG4gICAgaWYgKG9wdHMgJiYgb3B0cy5hcnJheUZvcm1hdCBpbiBhcnJheVByZWZpeEdlbmVyYXRvcnMpIHtcbiAgICAgICAgYXJyYXlGb3JtYXQgPSBvcHRzLmFycmF5Rm9ybWF0O1xuICAgIH0gZWxzZSBpZiAob3B0cyAmJiAnaW5kaWNlcycgaW4gb3B0cykge1xuICAgICAgICBhcnJheUZvcm1hdCA9IG9wdHMuaW5kaWNlcyA/ICdpbmRpY2VzJyA6ICdyZXBlYXQnO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5Rm9ybWF0ID0gJ2luZGljZXMnO1xuICAgIH1cblxuICAgIHZhciBnZW5lcmF0ZUFycmF5UHJlZml4ID0gYXJyYXlQcmVmaXhHZW5lcmF0b3JzW2FycmF5Rm9ybWF0XTtcblxuICAgIGlmICghb2JqS2V5cykge1xuICAgICAgICBvYmpLZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zb3J0KSB7XG4gICAgICAgIG9iaktleXMuc29ydChvcHRpb25zLnNvcnQpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqS2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIga2V5ID0gb2JqS2V5c1tpXTtcblxuICAgICAgICBpZiAob3B0aW9ucy5za2lwTnVsbHMgJiYgb2JqW2tleV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHB1c2hUb0FycmF5KGtleXMsIHN0cmluZ2lmeShcbiAgICAgICAgICAgIG9ialtrZXldLFxuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgZ2VuZXJhdGVBcnJheVByZWZpeCxcbiAgICAgICAgICAgIG9wdGlvbnMuc3RyaWN0TnVsbEhhbmRsaW5nLFxuICAgICAgICAgICAgb3B0aW9ucy5za2lwTnVsbHMsXG4gICAgICAgICAgICBvcHRpb25zLmVuY29kZSA/IG9wdGlvbnMuZW5jb2RlciA6IG51bGwsXG4gICAgICAgICAgICBvcHRpb25zLmZpbHRlcixcbiAgICAgICAgICAgIG9wdGlvbnMuc29ydCxcbiAgICAgICAgICAgIG9wdGlvbnMuYWxsb3dEb3RzLFxuICAgICAgICAgICAgb3B0aW9ucy5zZXJpYWxpemVEYXRlLFxuICAgICAgICAgICAgb3B0aW9ucy5mb3JtYXR0ZXIsXG4gICAgICAgICAgICBvcHRpb25zLmVuY29kZVZhbHVlc09ubHksXG4gICAgICAgICAgICBvcHRpb25zLmNoYXJzZXRcbiAgICAgICAgKSk7XG4gICAgfVxuXG4gICAgdmFyIGpvaW5lZCA9IGtleXMuam9pbihvcHRpb25zLmRlbGltaXRlcik7XG4gICAgdmFyIHByZWZpeCA9IG9wdGlvbnMuYWRkUXVlcnlQcmVmaXggPT09IHRydWUgPyAnPycgOiAnJztcblxuICAgIGlmIChvcHRpb25zLmNoYXJzZXRTZW50aW5lbCkge1xuICAgICAgICBpZiAob3B0aW9ucy5jaGFyc2V0ID09PSAnaXNvLTg4NTktMScpIHtcbiAgICAgICAgICAgIC8vIGVuY29kZVVSSUNvbXBvbmVudCgnJiMxMDAwMzsnKSwgdGhlIFwibnVtZXJpYyBlbnRpdHlcIiByZXByZXNlbnRhdGlvbiBvZiBhIGNoZWNrbWFya1xuICAgICAgICAgICAgcHJlZml4ICs9ICd1dGY4PSUyNiUyMzEwMDAzJTNCJic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBlbmNvZGVVUklDb21wb25lbnQoJ+KckycpXG4gICAgICAgICAgICBwcmVmaXggKz0gJ3V0Zjg9JUUyJTlDJTkzJic7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gam9pbmVkLmxlbmd0aCA+IDAgPyBwcmVmaXggKyBqb2luZWQgOiAnJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG52YXIgaGV4VGFibGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgICAgICAgYXJyYXkucHVzaCgnJScgKyAoKGkgPCAxNiA/ICcwJyA6ICcnKSArIGkudG9TdHJpbmcoMTYpKS50b1VwcGVyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG59KCkpO1xuXG52YXIgY29tcGFjdFF1ZXVlID0gZnVuY3Rpb24gY29tcGFjdFF1ZXVlKHF1ZXVlKSB7XG4gICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdmFyIGl0ZW0gPSBxdWV1ZS5wb3AoKTtcbiAgICAgICAgdmFyIG9iaiA9IGl0ZW0ub2JqW2l0ZW0ucHJvcF07XG5cbiAgICAgICAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgICAgICAgICAgdmFyIGNvbXBhY3RlZCA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG9iai5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqW2pdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wYWN0ZWQucHVzaChvYmpbal0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXRlbS5vYmpbaXRlbS5wcm9wXSA9IGNvbXBhY3RlZDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbnZhciBhcnJheVRvT2JqZWN0ID0gZnVuY3Rpb24gYXJyYXlUb09iamVjdChzb3VyY2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqID0gb3B0aW9ucyAmJiBvcHRpb25zLnBsYWluT2JqZWN0cyA/IE9iamVjdC5jcmVhdGUobnVsbCkgOiB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAodHlwZW9mIHNvdXJjZVtpXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIG9ialtpXSA9IHNvdXJjZVtpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG59O1xuXG52YXIgbWVyZ2UgPSBmdW5jdGlvbiBtZXJnZSh0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucykge1xuICAgIGlmICghc291cmNlKSB7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHRhcmdldCkpIHtcbiAgICAgICAgICAgIHRhcmdldC5wdXNoKHNvdXJjZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ICYmIHR5cGVvZiB0YXJnZXQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAoKG9wdGlvbnMgJiYgKG9wdGlvbnMucGxhaW5PYmplY3RzIHx8IG9wdGlvbnMuYWxsb3dQcm90b3R5cGVzKSkgfHwgIWhhcy5jYWxsKE9iamVjdC5wcm90b3R5cGUsIHNvdXJjZSkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbc291cmNlXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW3RhcmdldCwgc291cmNlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXQgfHwgdHlwZW9mIHRhcmdldCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIFt0YXJnZXRdLmNvbmNhdChzb3VyY2UpO1xuICAgIH1cblxuICAgIHZhciBtZXJnZVRhcmdldCA9IHRhcmdldDtcbiAgICBpZiAoaXNBcnJheSh0YXJnZXQpICYmICFpc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgbWVyZ2VUYXJnZXQgPSBhcnJheVRvT2JqZWN0KHRhcmdldCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKGlzQXJyYXkodGFyZ2V0KSAmJiBpc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgc291cmNlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGkpIHtcbiAgICAgICAgICAgIGlmIChoYXMuY2FsbCh0YXJnZXQsIGkpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRhcmdldEl0ZW0gPSB0YXJnZXRbaV07XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldEl0ZW0gJiYgdHlwZW9mIHRhcmdldEl0ZW0gPT09ICdvYmplY3QnICYmIGl0ZW0gJiYgdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtpXSA9IG1lcmdlKHRhcmdldEl0ZW0sIGl0ZW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W2ldID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHNvdXJjZSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBzb3VyY2Vba2V5XTtcblxuICAgICAgICBpZiAoaGFzLmNhbGwoYWNjLCBrZXkpKSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IG1lcmdlKGFjY1trZXldLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbWVyZ2VUYXJnZXQpO1xufTtcblxudmFyIGFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnblNpbmdsZVNvdXJjZSh0YXJnZXQsIHNvdXJjZSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhzb3VyY2UpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBrZXkpIHtcbiAgICAgICAgYWNjW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB0YXJnZXQpO1xufTtcblxudmFyIGRlY29kZSA9IGZ1bmN0aW9uIChzdHIsIGRlY29kZXIsIGNoYXJzZXQpIHtcbiAgICB2YXIgc3RyV2l0aG91dFBsdXMgPSBzdHIucmVwbGFjZSgvXFwrL2csICcgJyk7XG4gICAgaWYgKGNoYXJzZXQgPT09ICdpc28tODg1OS0xJykge1xuICAgICAgICAvLyB1bmVzY2FwZSBuZXZlciB0aHJvd3MsIG5vIHRyeS4uLmNhdGNoIG5lZWRlZDpcbiAgICAgICAgcmV0dXJuIHN0cldpdGhvdXRQbHVzLnJlcGxhY2UoLyVbMC05YS1mXXsyfS9naSwgdW5lc2NhcGUpO1xuICAgIH1cbiAgICAvLyB1dGYtOFxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoc3RyV2l0aG91dFBsdXMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHN0cldpdGhvdXRQbHVzO1xuICAgIH1cbn07XG5cbnZhciBlbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoc3RyLCBkZWZhdWx0RW5jb2RlciwgY2hhcnNldCkge1xuICAgIC8vIFRoaXMgY29kZSB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5IEJyaWFuIFdoaXRlIChtc2NkZXgpIGZvciB0aGUgaW8uanMgY29yZSBxdWVyeXN0cmluZyBsaWJyYXJ5LlxuICAgIC8vIEl0IGhhcyBiZWVuIGFkYXB0ZWQgaGVyZSBmb3Igc3RyaWN0ZXIgYWRoZXJlbmNlIHRvIFJGQyAzOTg2XG4gICAgaWYgKHN0ci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG5cbiAgICB2YXIgc3RyaW5nID0gdHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgPyBzdHIgOiBTdHJpbmcoc3RyKTtcblxuICAgIGlmIChjaGFyc2V0ID09PSAnaXNvLTg4NTktMScpIHtcbiAgICAgICAgcmV0dXJuIGVzY2FwZShzdHJpbmcpLnJlcGxhY2UoLyV1WzAtOWEtZl17NH0vZ2ksIGZ1bmN0aW9uICgkMCkge1xuICAgICAgICAgICAgcmV0dXJuICclMjYlMjMnICsgcGFyc2VJbnQoJDAuc2xpY2UoMiksIDE2KSArICclM0InO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgb3V0ID0gJyc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGMgPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjID09PSAweDJEIC8vIC1cbiAgICAgICAgICAgIHx8IGMgPT09IDB4MkUgLy8gLlxuICAgICAgICAgICAgfHwgYyA9PT0gMHg1RiAvLyBfXG4gICAgICAgICAgICB8fCBjID09PSAweDdFIC8vIH5cbiAgICAgICAgICAgIHx8IChjID49IDB4MzAgJiYgYyA8PSAweDM5KSAvLyAwLTlcbiAgICAgICAgICAgIHx8IChjID49IDB4NDEgJiYgYyA8PSAweDVBKSAvLyBhLXpcbiAgICAgICAgICAgIHx8IChjID49IDB4NjEgJiYgYyA8PSAweDdBKSAvLyBBLVpcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBvdXQgKz0gc3RyaW5nLmNoYXJBdChpKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgPCAweDgwKSB7XG4gICAgICAgICAgICBvdXQgPSBvdXQgKyBoZXhUYWJsZVtjXTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgPCAweDgwMCkge1xuICAgICAgICAgICAgb3V0ID0gb3V0ICsgKGhleFRhYmxlWzB4QzAgfCAoYyA+PiA2KV0gKyBoZXhUYWJsZVsweDgwIHwgKGMgJiAweDNGKV0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYyA8IDB4RDgwMCB8fCBjID49IDB4RTAwMCkge1xuICAgICAgICAgICAgb3V0ID0gb3V0ICsgKGhleFRhYmxlWzB4RTAgfCAoYyA+PiAxMildICsgaGV4VGFibGVbMHg4MCB8ICgoYyA+PiA2KSAmIDB4M0YpXSArIGhleFRhYmxlWzB4ODAgfCAoYyAmIDB4M0YpXSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGkgKz0gMTtcbiAgICAgICAgYyA9IDB4MTAwMDAgKyAoKChjICYgMHgzRkYpIDw8IDEwKSB8IChzdHJpbmcuY2hhckNvZGVBdChpKSAmIDB4M0ZGKSk7XG4gICAgICAgIG91dCArPSBoZXhUYWJsZVsweEYwIHwgKGMgPj4gMTgpXVxuICAgICAgICAgICAgKyBoZXhUYWJsZVsweDgwIHwgKChjID4+IDEyKSAmIDB4M0YpXVxuICAgICAgICAgICAgKyBoZXhUYWJsZVsweDgwIHwgKChjID4+IDYpICYgMHgzRildXG4gICAgICAgICAgICArIGhleFRhYmxlWzB4ODAgfCAoYyAmIDB4M0YpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxudmFyIGNvbXBhY3QgPSBmdW5jdGlvbiBjb21wYWN0KHZhbHVlKSB7XG4gICAgdmFyIHF1ZXVlID0gW3sgb2JqOiB7IG86IHZhbHVlIH0sIHByb3A6ICdvJyB9XTtcbiAgICB2YXIgcmVmcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgaXRlbSA9IHF1ZXVlW2ldO1xuICAgICAgICB2YXIgb2JqID0gaXRlbS5vYmpbaXRlbS5wcm9wXTtcblxuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwga2V5cy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbal07XG4gICAgICAgICAgICB2YXIgdmFsID0gb2JqW2tleV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsICE9PSBudWxsICYmIHJlZnMuaW5kZXhPZih2YWwpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHF1ZXVlLnB1c2goeyBvYmo6IG9iaiwgcHJvcDoga2V5IH0pO1xuICAgICAgICAgICAgICAgIHJlZnMucHVzaCh2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29tcGFjdFF1ZXVlKHF1ZXVlKTtcblxuICAgIHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBpc1JlZ0V4cCA9IGZ1bmN0aW9uIGlzUmVnRXhwKG9iaikge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59O1xuXG52YXIgaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlcihvYmopIHtcbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICEhKG9iai5jb25zdHJ1Y3RvciAmJiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iaikpO1xufTtcblxudmFyIGNvbWJpbmUgPSBmdW5jdGlvbiBjb21iaW5lKGEsIGIpIHtcbiAgICByZXR1cm4gW10uY29uY2F0KGEsIGIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYXJyYXlUb09iamVjdDogYXJyYXlUb09iamVjdCxcbiAgICBhc3NpZ246IGFzc2lnbixcbiAgICBjb21iaW5lOiBjb21iaW5lLFxuICAgIGNvbXBhY3Q6IGNvbXBhY3QsXG4gICAgZGVjb2RlOiBkZWNvZGUsXG4gICAgZW5jb2RlOiBlbmNvZGUsXG4gICAgaXNCdWZmZXI6IGlzQnVmZmVyLFxuICAgIGlzUmVnRXhwOiBpc1JlZ0V4cCxcbiAgICBtZXJnZTogbWVyZ2Vcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xudmFyIEVTID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvZXM1Jyk7XG52YXIgcmVwbGFjZSA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpO1xuXG52YXIgbGVmdFdoaXRlc3BhY2UgPSAvXltcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkZdKy87XG52YXIgcmlnaHRXaGl0ZXNwYWNlID0gL1tcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkZdKyQvO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRyaW0oKSB7XG5cdHZhciBTID0gRVMuVG9TdHJpbmcoRVMuQ2hlY2tPYmplY3RDb2VyY2libGUodGhpcykpO1xuXHRyZXR1cm4gcmVwbGFjZShyZXBsYWNlKFMsIGxlZnRXaGl0ZXNwYWNlLCAnJyksIHJpZ2h0V2hpdGVzcGFjZSwgJycpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCdmdW5jdGlvbi1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kVHJpbSA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBnZXRQb2x5ZmlsbCgpKTtcblxuZGVmaW5lKGJvdW5kVHJpbSwge1xuXHRnZXRQb2x5ZmlsbDogZ2V0UG9seWZpbGwsXG5cdGltcGxlbWVudGF0aW9uOiBpbXBsZW1lbnRhdGlvbixcblx0c2hpbTogc2hpbVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gYm91bmRUcmltO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciB6ZXJvV2lkdGhTcGFjZSA9ICdcXHUyMDBiJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKFN0cmluZy5wcm90b3R5cGUudHJpbSAmJiB6ZXJvV2lkdGhTcGFjZS50cmltKCkgPT09IHplcm9XaWR0aFNwYWNlKSB7XG5cdFx0cmV0dXJuIFN0cmluZy5wcm90b3R5cGUudHJpbTtcblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaGltU3RyaW5nVHJpbSgpIHtcblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0ZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIHsgdHJpbTogcG9seWZpbGwgfSwgeyB0cmltOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTdHJpbmcucHJvdG90eXBlLnRyaW0gIT09IHBvbHlmaWxsOyB9IH0pO1xuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIiwiLypcblx0TUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcblx0QXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cblxudmFyIHN0eWxlc0luRG9tID0ge307XG5cbnZhclx0bWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuXHR2YXIgbWVtbztcblxuXHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdGlmICh0eXBlb2YgbWVtbyA9PT0gXCJ1bmRlZmluZWRcIikgbWVtbyA9IGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0cmV0dXJuIG1lbW87XG5cdH07XG59O1xuXG52YXIgaXNPbGRJRSA9IG1lbW9pemUoZnVuY3Rpb24gKCkge1xuXHQvLyBUZXN0IGZvciBJRSA8PSA5IGFzIHByb3Bvc2VkIGJ5IEJyb3dzZXJoYWNrc1xuXHQvLyBAc2VlIGh0dHA6Ly9icm93c2VyaGFja3MuY29tLyNoYWNrLWU3MWQ4NjkyZjY1MzM0MTczZmVlNzE1YzIyMmNiODA1XG5cdC8vIFRlc3RzIGZvciBleGlzdGVuY2Ugb2Ygc3RhbmRhcmQgZ2xvYmFscyBpcyB0byBhbGxvdyBzdHlsZS1sb2FkZXJcblx0Ly8gdG8gb3BlcmF0ZSBjb3JyZWN0bHkgaW50byBub24tc3RhbmRhcmQgZW52aXJvbm1lbnRzXG5cdC8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2stY29udHJpYi9zdHlsZS1sb2FkZXIvaXNzdWVzLzE3N1xuXHRyZXR1cm4gd2luZG93ICYmIGRvY3VtZW50ICYmIGRvY3VtZW50LmFsbCAmJiAhd2luZG93LmF0b2I7XG59KTtcblxudmFyIGdldFRhcmdldCA9IGZ1bmN0aW9uICh0YXJnZXQsIHBhcmVudCkge1xuICBpZiAocGFyZW50KXtcbiAgICByZXR1cm4gcGFyZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTtcbiAgfVxuICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXQpO1xufTtcblxudmFyIGdldEVsZW1lbnQgPSAoZnVuY3Rpb24gKGZuKSB7XG5cdHZhciBtZW1vID0ge307XG5cblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldCwgcGFyZW50KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgcGFzc2luZyBmdW5jdGlvbiBpbiBvcHRpb25zLCB0aGVuIHVzZSBpdCBmb3IgcmVzb2x2ZSBcImhlYWRcIiBlbGVtZW50LlxuICAgICAgICAgICAgICAgIC8vIFVzZWZ1bCBmb3IgU2hhZG93IFJvb3Qgc3R5bGUgaS5lXG4gICAgICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgICAgIC8vICAgaW5zZXJ0SW50bzogZnVuY3Rpb24gKCkgeyByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNmb29cIikuc2hhZG93Um9vdCB9XG4gICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVtb1t0YXJnZXRdID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR2YXIgc3R5bGVUYXJnZXQgPSBnZXRUYXJnZXQuY2FsbCh0aGlzLCB0YXJnZXQsIHBhcmVudCk7XG5cdFx0XHQvLyBTcGVjaWFsIGNhc2UgdG8gcmV0dXJuIGhlYWQgb2YgaWZyYW1lIGluc3RlYWQgb2YgaWZyYW1lIGl0c2VsZlxuXHRcdFx0aWYgKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCAmJiBzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG5cdFx0XHRcdFx0Ly8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcblx0XHRcdFx0XHRzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuXHRcdFx0XHR9IGNhdGNoKGUpIHtcblx0XHRcdFx0XHRzdHlsZVRhcmdldCA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuXHRcdH1cblx0XHRyZXR1cm4gbWVtb1t0YXJnZXRdXG5cdH07XG59KSgpO1xuXG52YXIgc2luZ2xldG9uID0gbnVsbDtcbnZhclx0c2luZ2xldG9uQ291bnRlciA9IDA7XG52YXJcdHN0eWxlc0luc2VydGVkQXRUb3AgPSBbXTtcblxudmFyXHRmaXhVcmxzID0gcmVxdWlyZShcIi4vdXJsc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihsaXN0LCBvcHRpb25zKSB7XG5cdGlmICh0eXBlb2YgREVCVUcgIT09IFwidW5kZWZpbmVkXCIgJiYgREVCVUcpIHtcblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgc3R5bGUtbG9hZGVyIGNhbm5vdCBiZSB1c2VkIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnRcIik7XG5cdH1cblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRvcHRpb25zLmF0dHJzID0gdHlwZW9mIG9wdGlvbnMuYXR0cnMgPT09IFwib2JqZWN0XCIgPyBvcHRpb25zLmF0dHJzIDoge307XG5cblx0Ly8gRm9yY2Ugc2luZ2xlLXRhZyBzb2x1dGlvbiBvbiBJRTYtOSwgd2hpY2ggaGFzIGEgaGFyZCBsaW1pdCBvbiB0aGUgIyBvZiA8c3R5bGU+XG5cdC8vIHRhZ3MgaXQgd2lsbCBhbGxvdyBvbiBhIHBhZ2Vcblx0aWYgKCFvcHRpb25zLnNpbmdsZXRvbiAmJiB0eXBlb2Ygb3B0aW9ucy5zaW5nbGV0b24gIT09IFwiYm9vbGVhblwiKSBvcHRpb25zLnNpbmdsZXRvbiA9IGlzT2xkSUUoKTtcblxuXHQvLyBCeSBkZWZhdWx0LCBhZGQgPHN0eWxlPiB0YWdzIHRvIHRoZSA8aGVhZD4gZWxlbWVudFxuICAgICAgICBpZiAoIW9wdGlvbnMuaW5zZXJ0SW50bykgb3B0aW9ucy5pbnNlcnRJbnRvID0gXCJoZWFkXCI7XG5cblx0Ly8gQnkgZGVmYXVsdCwgYWRkIDxzdHlsZT4gdGFncyB0byB0aGUgYm90dG9tIG9mIHRoZSB0YXJnZXRcblx0aWYgKCFvcHRpb25zLmluc2VydEF0KSBvcHRpb25zLmluc2VydEF0ID0gXCJib3R0b21cIjtcblxuXHR2YXIgc3R5bGVzID0gbGlzdFRvU3R5bGVzKGxpc3QsIG9wdGlvbnMpO1xuXG5cdGFkZFN0eWxlc1RvRG9tKHN0eWxlcywgb3B0aW9ucyk7XG5cblx0cmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZSAobmV3TGlzdCkge1xuXHRcdHZhciBtYXlSZW1vdmUgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaXRlbSA9IHN0eWxlc1tpXTtcblx0XHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuXG5cdFx0XHRkb21TdHlsZS5yZWZzLS07XG5cdFx0XHRtYXlSZW1vdmUucHVzaChkb21TdHlsZSk7XG5cdFx0fVxuXG5cdFx0aWYobmV3TGlzdCkge1xuXHRcdFx0dmFyIG5ld1N0eWxlcyA9IGxpc3RUb1N0eWxlcyhuZXdMaXN0LCBvcHRpb25zKTtcblx0XHRcdGFkZFN0eWxlc1RvRG9tKG5ld1N0eWxlcywgb3B0aW9ucyk7XG5cdFx0fVxuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtYXlSZW1vdmUubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBkb21TdHlsZSA9IG1heVJlbW92ZVtpXTtcblxuXHRcdFx0aWYoZG9tU3R5bGUucmVmcyA9PT0gMCkge1xuXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSBkb21TdHlsZS5wYXJ0c1tqXSgpO1xuXG5cdFx0XHRcdGRlbGV0ZSBzdHlsZXNJbkRvbVtkb21TdHlsZS5pZF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufTtcblxuZnVuY3Rpb24gYWRkU3R5bGVzVG9Eb20gKHN0eWxlcywgb3B0aW9ucykge1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBpdGVtID0gc3R5bGVzW2ldO1xuXHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuXG5cdFx0aWYoZG9tU3R5bGUpIHtcblx0XHRcdGRvbVN0eWxlLnJlZnMrKztcblxuXHRcdFx0Zm9yKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGRvbVN0eWxlLnBhcnRzW2pdKGl0ZW0ucGFydHNbal0pO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IoOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRkb21TdHlsZS5wYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0sIG9wdGlvbnMpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIHBhcnRzID0gW107XG5cblx0XHRcdGZvcih2YXIgaiA9IDA7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdHBhcnRzLnB1c2goYWRkU3R5bGUoaXRlbS5wYXJ0c1tqXSwgb3B0aW9ucykpO1xuXHRcdFx0fVxuXG5cdFx0XHRzdHlsZXNJbkRvbVtpdGVtLmlkXSA9IHtpZDogaXRlbS5pZCwgcmVmczogMSwgcGFydHM6IHBhcnRzfTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gbGlzdFRvU3R5bGVzIChsaXN0LCBvcHRpb25zKSB7XG5cdHZhciBzdHlsZXMgPSBbXTtcblx0dmFyIG5ld1N0eWxlcyA9IHt9O1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBpdGVtID0gbGlzdFtpXTtcblx0XHR2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcblx0XHR2YXIgY3NzID0gaXRlbVsxXTtcblx0XHR2YXIgbWVkaWEgPSBpdGVtWzJdO1xuXHRcdHZhciBzb3VyY2VNYXAgPSBpdGVtWzNdO1xuXHRcdHZhciBwYXJ0ID0ge2NzczogY3NzLCBtZWRpYTogbWVkaWEsIHNvdXJjZU1hcDogc291cmNlTWFwfTtcblxuXHRcdGlmKCFuZXdTdHlsZXNbaWRdKSBzdHlsZXMucHVzaChuZXdTdHlsZXNbaWRdID0ge2lkOiBpZCwgcGFydHM6IFtwYXJ0XX0pO1xuXHRcdGVsc2UgbmV3U3R5bGVzW2lkXS5wYXJ0cy5wdXNoKHBhcnQpO1xuXHR9XG5cblx0cmV0dXJuIHN0eWxlcztcbn1cblxuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50IChvcHRpb25zLCBzdHlsZSkge1xuXHR2YXIgdGFyZ2V0ID0gZ2V0RWxlbWVudChvcHRpb25zLmluc2VydEludG8pXG5cblx0aWYgKCF0YXJnZXQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydEludG8nIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcblx0fVxuXG5cdHZhciBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcCA9IHN0eWxlc0luc2VydGVkQXRUb3Bbc3R5bGVzSW5zZXJ0ZWRBdFRvcC5sZW5ndGggLSAxXTtcblxuXHRpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJ0b3BcIikge1xuXHRcdGlmICghbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3ApIHtcblx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIHRhcmdldC5maXJzdENoaWxkKTtcblx0XHR9IGVsc2UgaWYgKGxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wLm5leHRTaWJsaW5nKSB7XG5cdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcC5uZXh0U2libGluZyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdFx0fVxuXHRcdHN0eWxlc0luc2VydGVkQXRUb3AucHVzaChzdHlsZSk7XG5cdH0gZWxzZSBpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJib3R0b21cIikge1xuXHRcdHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwib2JqZWN0XCIgJiYgb3B0aW9ucy5pbnNlcnRBdC5iZWZvcmUpIHtcblx0XHR2YXIgbmV4dFNpYmxpbmcgPSBnZXRFbGVtZW50KG9wdGlvbnMuaW5zZXJ0QXQuYmVmb3JlLCB0YXJnZXQpO1xuXHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIG5leHRTaWJsaW5nKTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJbU3R5bGUgTG9hZGVyXVxcblxcbiBJbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgJ2luc2VydEF0JyAoJ29wdGlvbnMuaW5zZXJ0QXQnKSBmb3VuZC5cXG4gTXVzdCBiZSAndG9wJywgJ2JvdHRvbScsIG9yIE9iamVjdC5cXG4gKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrLWNvbnRyaWIvc3R5bGUtbG9hZGVyI2luc2VydGF0KVxcblwiKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQgKHN0eWxlKSB7XG5cdGlmIChzdHlsZS5wYXJlbnROb2RlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cdHN0eWxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGUpO1xuXG5cdHZhciBpZHggPSBzdHlsZXNJbnNlcnRlZEF0VG9wLmluZGV4T2Yoc3R5bGUpO1xuXHRpZihpZHggPj0gMCkge1xuXHRcdHN0eWxlc0luc2VydGVkQXRUb3Auc3BsaWNlKGlkeCwgMSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50IChvcHRpb25zKSB7XG5cdHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcblxuXHRpZihvcHRpb25zLmF0dHJzLnR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdG9wdGlvbnMuYXR0cnMudHlwZSA9IFwidGV4dC9jc3NcIjtcblx0fVxuXG5cdGlmKG9wdGlvbnMuYXR0cnMubm9uY2UgPT09IHVuZGVmaW5lZCkge1xuXHRcdHZhciBub25jZSA9IGdldE5vbmNlKCk7XG5cdFx0aWYgKG5vbmNlKSB7XG5cdFx0XHRvcHRpb25zLmF0dHJzLm5vbmNlID0gbm9uY2U7XG5cdFx0fVxuXHR9XG5cblx0YWRkQXR0cnMoc3R5bGUsIG9wdGlvbnMuYXR0cnMpO1xuXHRpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucywgc3R5bGUpO1xuXG5cdHJldHVybiBzdHlsZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTGlua0VsZW1lbnQgKG9wdGlvbnMpIHtcblx0dmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcblxuXHRpZihvcHRpb25zLmF0dHJzLnR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdG9wdGlvbnMuYXR0cnMudHlwZSA9IFwidGV4dC9jc3NcIjtcblx0fVxuXHRvcHRpb25zLmF0dHJzLnJlbCA9IFwic3R5bGVzaGVldFwiO1xuXG5cdGFkZEF0dHJzKGxpbmssIG9wdGlvbnMuYXR0cnMpO1xuXHRpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucywgbGluayk7XG5cblx0cmV0dXJuIGxpbms7XG59XG5cbmZ1bmN0aW9uIGFkZEF0dHJzIChlbCwgYXR0cnMpIHtcblx0T2JqZWN0LmtleXMoYXR0cnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXHRcdGVsLnNldEF0dHJpYnV0ZShrZXksIGF0dHJzW2tleV0pO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0Tm9uY2UoKSB7XG5cdGlmICh0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRyZXR1cm4gX193ZWJwYWNrX25vbmNlX187XG59XG5cbmZ1bmN0aW9uIGFkZFN0eWxlIChvYmosIG9wdGlvbnMpIHtcblx0dmFyIHN0eWxlLCB1cGRhdGUsIHJlbW92ZSwgcmVzdWx0O1xuXG5cdC8vIElmIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHdhcyBkZWZpbmVkLCBydW4gaXQgb24gdGhlIGNzc1xuXHRpZiAob3B0aW9ucy50cmFuc2Zvcm0gJiYgb2JqLmNzcykge1xuXHQgICAgcmVzdWx0ID0gdHlwZW9mIG9wdGlvbnMudHJhbnNmb3JtID09PSAnZnVuY3Rpb24nXG5cdFx0ID8gb3B0aW9ucy50cmFuc2Zvcm0ob2JqLmNzcykgXG5cdFx0IDogb3B0aW9ucy50cmFuc2Zvcm0uZGVmYXVsdChvYmouY3NzKTtcblxuXHQgICAgaWYgKHJlc3VsdCkge1xuXHQgICAgXHQvLyBJZiB0cmFuc2Zvcm0gcmV0dXJucyBhIHZhbHVlLCB1c2UgdGhhdCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBjc3MuXG5cdCAgICBcdC8vIFRoaXMgYWxsb3dzIHJ1bm5pbmcgcnVudGltZSB0cmFuc2Zvcm1hdGlvbnMgb24gdGhlIGNzcy5cblx0ICAgIFx0b2JqLmNzcyA9IHJlc3VsdDtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdC8vIElmIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gcmV0dXJucyBhIGZhbHN5IHZhbHVlLCBkb24ndCBhZGQgdGhpcyBjc3MuXG5cdCAgICBcdC8vIFRoaXMgYWxsb3dzIGNvbmRpdGlvbmFsIGxvYWRpbmcgb2YgY3NzXG5cdCAgICBcdHJldHVybiBmdW5jdGlvbigpIHtcblx0ICAgIFx0XHQvLyBub29wXG5cdCAgICBcdH07XG5cdCAgICB9XG5cdH1cblxuXHRpZiAob3B0aW9ucy5zaW5nbGV0b24pIHtcblx0XHR2YXIgc3R5bGVJbmRleCA9IHNpbmdsZXRvbkNvdW50ZXIrKztcblxuXHRcdHN0eWxlID0gc2luZ2xldG9uIHx8IChzaW5nbGV0b24gPSBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykpO1xuXG5cdFx0dXBkYXRlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCBmYWxzZSk7XG5cdFx0cmVtb3ZlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCB0cnVlKTtcblxuXHR9IGVsc2UgaWYgKFxuXHRcdG9iai5zb3VyY2VNYXAgJiZcblx0XHR0eXBlb2YgVVJMID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgVVJMLmNyZWF0ZU9iamVjdFVSTCA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIFVSTC5yZXZva2VPYmplY3RVUkwgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBCbG9iID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiXG5cdCkge1xuXHRcdHN0eWxlID0gY3JlYXRlTGlua0VsZW1lbnQob3B0aW9ucyk7XG5cdFx0dXBkYXRlID0gdXBkYXRlTGluay5iaW5kKG51bGwsIHN0eWxlLCBvcHRpb25zKTtcblx0XHRyZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuXG5cdFx0XHRpZihzdHlsZS5ocmVmKSBVUkwucmV2b2tlT2JqZWN0VVJMKHN0eWxlLmhyZWYpO1xuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0c3R5bGUgPSBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG5cdFx0dXBkYXRlID0gYXBwbHlUb1RhZy5iaW5kKG51bGwsIHN0eWxlKTtcblx0XHRyZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuXHRcdH07XG5cdH1cblxuXHR1cGRhdGUob2JqKTtcblxuXHRyZXR1cm4gZnVuY3Rpb24gdXBkYXRlU3R5bGUgKG5ld09iaikge1xuXHRcdGlmIChuZXdPYmopIHtcblx0XHRcdGlmIChcblx0XHRcdFx0bmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJlxuXHRcdFx0XHRuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJlxuXHRcdFx0XHRuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR1cGRhdGUob2JqID0gbmV3T2JqKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVtb3ZlKCk7XG5cdFx0fVxuXHR9O1xufVxuXG52YXIgcmVwbGFjZVRleHQgPSAoZnVuY3Rpb24gKCkge1xuXHR2YXIgdGV4dFN0b3JlID0gW107XG5cblx0cmV0dXJuIGZ1bmN0aW9uIChpbmRleCwgcmVwbGFjZW1lbnQpIHtcblx0XHR0ZXh0U3RvcmVbaW5kZXhdID0gcmVwbGFjZW1lbnQ7XG5cblx0XHRyZXR1cm4gdGV4dFN0b3JlLmZpbHRlcihCb29sZWFuKS5qb2luKCdcXG4nKTtcblx0fTtcbn0pKCk7XG5cbmZ1bmN0aW9uIGFwcGx5VG9TaW5nbGV0b25UYWcgKHN0eWxlLCBpbmRleCwgcmVtb3ZlLCBvYmopIHtcblx0dmFyIGNzcyA9IHJlbW92ZSA/IFwiXCIgOiBvYmouY3NzO1xuXG5cdGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG5cdFx0c3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gcmVwbGFjZVRleHQoaW5kZXgsIGNzcyk7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIGNzc05vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpO1xuXHRcdHZhciBjaGlsZE5vZGVzID0gc3R5bGUuY2hpbGROb2RlcztcblxuXHRcdGlmIChjaGlsZE5vZGVzW2luZGV4XSkgc3R5bGUucmVtb3ZlQ2hpbGQoY2hpbGROb2Rlc1tpbmRleF0pO1xuXG5cdFx0aWYgKGNoaWxkTm9kZXMubGVuZ3RoKSB7XG5cdFx0XHRzdHlsZS5pbnNlcnRCZWZvcmUoY3NzTm9kZSwgY2hpbGROb2Rlc1tpbmRleF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdHlsZS5hcHBlbmRDaGlsZChjc3NOb2RlKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gYXBwbHlUb1RhZyAoc3R5bGUsIG9iaikge1xuXHR2YXIgY3NzID0gb2JqLmNzcztcblx0dmFyIG1lZGlhID0gb2JqLm1lZGlhO1xuXG5cdGlmKG1lZGlhKSB7XG5cdFx0c3R5bGUuc2V0QXR0cmlidXRlKFwibWVkaWFcIiwgbWVkaWEpXG5cdH1cblxuXHRpZihzdHlsZS5zdHlsZVNoZWV0KSB7XG5cdFx0c3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuXHR9IGVsc2Uge1xuXHRcdHdoaWxlKHN0eWxlLmZpcnN0Q2hpbGQpIHtcblx0XHRcdHN0eWxlLnJlbW92ZUNoaWxkKHN0eWxlLmZpcnN0Q2hpbGQpO1xuXHRcdH1cblxuXHRcdHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxpbmsgKGxpbmssIG9wdGlvbnMsIG9iaikge1xuXHR2YXIgY3NzID0gb2JqLmNzcztcblx0dmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG5cblx0Lypcblx0XHRJZiBjb252ZXJ0VG9BYnNvbHV0ZVVybHMgaXNuJ3QgZGVmaW5lZCwgYnV0IHNvdXJjZW1hcHMgYXJlIGVuYWJsZWRcblx0XHRhbmQgdGhlcmUgaXMgbm8gcHVibGljUGF0aCBkZWZpbmVkIHRoZW4gbGV0cyB0dXJuIGNvbnZlcnRUb0Fic29sdXRlVXJsc1xuXHRcdG9uIGJ5IGRlZmF1bHQuICBPdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgY29udmVydFRvQWJzb2x1dGVVcmxzIG9wdGlvblxuXHRcdGRpcmVjdGx5XG5cdCovXG5cdHZhciBhdXRvRml4VXJscyA9IG9wdGlvbnMuY29udmVydFRvQWJzb2x1dGVVcmxzID09PSB1bmRlZmluZWQgJiYgc291cmNlTWFwO1xuXG5cdGlmIChvcHRpb25zLmNvbnZlcnRUb0Fic29sdXRlVXJscyB8fCBhdXRvRml4VXJscykge1xuXHRcdGNzcyA9IGZpeFVybHMoY3NzKTtcblx0fVxuXG5cdGlmIChzb3VyY2VNYXApIHtcblx0XHQvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNjYwMzg3NVxuXHRcdGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIgKyBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpICsgXCIgKi9cIjtcblx0fVxuXG5cdHZhciBibG9iID0gbmV3IEJsb2IoW2Nzc10sIHsgdHlwZTogXCJ0ZXh0L2Nzc1wiIH0pO1xuXG5cdHZhciBvbGRTcmMgPSBsaW5rLmhyZWY7XG5cblx0bGluay5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblxuXHRpZihvbGRTcmMpIFVSTC5yZXZva2VPYmplY3RVUkwob2xkU3JjKTtcbn1cbiIsIlxuLyoqXG4gKiBXaGVuIHNvdXJjZSBtYXBzIGFyZSBlbmFibGVkLCBgc3R5bGUtbG9hZGVyYCB1c2VzIGEgbGluayBlbGVtZW50IHdpdGggYSBkYXRhLXVyaSB0b1xuICogZW1iZWQgdGhlIGNzcyBvbiB0aGUgcGFnZS4gVGhpcyBicmVha3MgYWxsIHJlbGF0aXZlIHVybHMgYmVjYXVzZSBub3cgdGhleSBhcmUgcmVsYXRpdmUgdG8gYVxuICogYnVuZGxlIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQgcGFnZS5cbiAqXG4gKiBPbmUgc29sdXRpb24gaXMgdG8gb25seSB1c2UgZnVsbCB1cmxzLCBidXQgdGhhdCBtYXkgYmUgaW1wb3NzaWJsZS5cbiAqXG4gKiBJbnN0ZWFkLCB0aGlzIGZ1bmN0aW9uIFwiZml4ZXNcIiB0aGUgcmVsYXRpdmUgdXJscyB0byBiZSBhYnNvbHV0ZSBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgcGFnZSBsb2NhdGlvbi5cbiAqXG4gKiBBIHJ1ZGltZW50YXJ5IHRlc3Qgc3VpdGUgaXMgbG9jYXRlZCBhdCBgdGVzdC9maXhVcmxzLmpzYCBhbmQgY2FuIGJlIHJ1biB2aWEgdGhlIGBucG0gdGVzdGAgY29tbWFuZC5cbiAqXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzKSB7XG4gIC8vIGdldCBjdXJyZW50IGxvY2F0aW9uXG4gIHZhciBsb2NhdGlvbiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LmxvY2F0aW9uO1xuXG4gIGlmICghbG9jYXRpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJmaXhVcmxzIHJlcXVpcmVzIHdpbmRvdy5sb2NhdGlvblwiKTtcbiAgfVxuXG5cdC8vIGJsYW5rIG9yIG51bGw/XG5cdGlmICghY3NzIHx8IHR5cGVvZiBjc3MgIT09IFwic3RyaW5nXCIpIHtcblx0ICByZXR1cm4gY3NzO1xuICB9XG5cbiAgdmFyIGJhc2VVcmwgPSBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIGxvY2F0aW9uLmhvc3Q7XG4gIHZhciBjdXJyZW50RGlyID0gYmFzZVVybCArIGxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1xcL1teXFwvXSokLywgXCIvXCIpO1xuXG5cdC8vIGNvbnZlcnQgZWFjaCB1cmwoLi4uKVxuXHQvKlxuXHRUaGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBqdXN0IGEgd2F5IHRvIHJlY3Vyc2l2ZWx5IG1hdGNoIGJyYWNrZXRzIHdpdGhpblxuXHRhIHN0cmluZy5cblxuXHQgL3VybFxccypcXCggID0gTWF0Y2ggb24gdGhlIHdvcmQgXCJ1cmxcIiB3aXRoIGFueSB3aGl0ZXNwYWNlIGFmdGVyIGl0IGFuZCB0aGVuIGEgcGFyZW5zXG5cdCAgICggID0gU3RhcnQgYSBjYXB0dXJpbmcgZ3JvdXBcblx0ICAgICAoPzogID0gU3RhcnQgYSBub24tY2FwdHVyaW5nIGdyb3VwXG5cdCAgICAgICAgIFteKShdICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICB8ICA9IE9SXG5cdCAgICAgICAgIFxcKCAgPSBNYXRjaCBhIHN0YXJ0IHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAoPzogID0gU3RhcnQgYW5vdGhlciBub24tY2FwdHVyaW5nIGdyb3Vwc1xuXHQgICAgICAgICAgICAgICAgIFteKShdKyAgPSBNYXRjaCBhbnl0aGluZyB0aGF0IGlzbid0IGEgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICAgICB8ICA9IE9SXG5cdCAgICAgICAgICAgICAgICAgXFwoICA9IE1hdGNoIGEgc3RhcnQgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICAgICAgICAgW14pKF0qICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgIFxcKSAgPSBNYXRjaCBhIGVuZCBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgKSAgPSBFbmQgR3JvdXBcbiAgICAgICAgICAgICAgKlxcKSA9IE1hdGNoIGFueXRoaW5nIGFuZCB0aGVuIGEgY2xvc2UgcGFyZW5zXG4gICAgICAgICAgKSAgPSBDbG9zZSBub24tY2FwdHVyaW5nIGdyb3VwXG4gICAgICAgICAgKiAgPSBNYXRjaCBhbnl0aGluZ1xuICAgICAgICkgID0gQ2xvc2UgY2FwdHVyaW5nIGdyb3VwXG5cdCBcXCkgID0gTWF0Y2ggYSBjbG9zZSBwYXJlbnNcblxuXHQgL2dpICA9IEdldCBhbGwgbWF0Y2hlcywgbm90IHRoZSBmaXJzdC4gIEJlIGNhc2UgaW5zZW5zaXRpdmUuXG5cdCAqL1xuXHR2YXIgZml4ZWRDc3MgPSBjc3MucmVwbGFjZSgvdXJsXFxzKlxcKCgoPzpbXikoXXxcXCgoPzpbXikoXSt8XFwoW14pKF0qXFwpKSpcXCkpKilcXCkvZ2ksIGZ1bmN0aW9uKGZ1bGxNYXRjaCwgb3JpZ1VybCkge1xuXHRcdC8vIHN0cmlwIHF1b3RlcyAoaWYgdGhleSBleGlzdClcblx0XHR2YXIgdW5xdW90ZWRPcmlnVXJsID0gb3JpZ1VybFxuXHRcdFx0LnRyaW0oKVxuXHRcdFx0LnJlcGxhY2UoL15cIiguKilcIiQvLCBmdW5jdGlvbihvLCAkMSl7IHJldHVybiAkMTsgfSlcblx0XHRcdC5yZXBsYWNlKC9eJyguKiknJC8sIGZ1bmN0aW9uKG8sICQxKXsgcmV0dXJuICQxOyB9KTtcblxuXHRcdC8vIGFscmVhZHkgYSBmdWxsIHVybD8gbm8gY2hhbmdlXG5cdFx0aWYgKC9eKCN8ZGF0YTp8aHR0cDpcXC9cXC98aHR0cHM6XFwvXFwvfGZpbGU6XFwvXFwvXFwvfFxccyokKS9pLnRlc3QodW5xdW90ZWRPcmlnVXJsKSkge1xuXHRcdCAgcmV0dXJuIGZ1bGxNYXRjaDtcblx0XHR9XG5cblx0XHQvLyBjb252ZXJ0IHRoZSB1cmwgdG8gYSBmdWxsIHVybFxuXHRcdHZhciBuZXdVcmw7XG5cblx0XHRpZiAodW5xdW90ZWRPcmlnVXJsLmluZGV4T2YoXCIvL1wiKSA9PT0gMCkge1xuXHRcdCAgXHQvL1RPRE86IHNob3VsZCB3ZSBhZGQgcHJvdG9jb2w/XG5cdFx0XHRuZXdVcmwgPSB1bnF1b3RlZE9yaWdVcmw7XG5cdFx0fSBlbHNlIGlmICh1bnF1b3RlZE9yaWdVcmwuaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdC8vIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBiYXNlIHVybFxuXHRcdFx0bmV3VXJsID0gYmFzZVVybCArIHVucXVvdGVkT3JpZ1VybDsgLy8gYWxyZWFkeSBzdGFydHMgd2l0aCAnLydcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gcGF0aCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gY3VycmVudCBkaXJlY3Rvcnlcblx0XHRcdG5ld1VybCA9IGN1cnJlbnREaXIgKyB1bnF1b3RlZE9yaWdVcmwucmVwbGFjZSgvXlxcLlxcLy8sIFwiXCIpOyAvLyBTdHJpcCBsZWFkaW5nICcuLydcblx0XHR9XG5cblx0XHQvLyBzZW5kIGJhY2sgdGhlIGZpeGVkIHVybCguLi4pXG5cdFx0cmV0dXJuIFwidXJsKFwiICsgSlNPTi5zdHJpbmdpZnkobmV3VXJsKSArIFwiKVwiO1xuXHR9KTtcblxuXHQvLyBzZW5kIGJhY2sgdGhlIGZpeGVkIGNzc1xuXHRyZXR1cm4gZml4ZWRDc3M7XG59O1xuIiwiLy8gICAgIFVuZGVyc2NvcmUuanMgMS45LjFcbi8vICAgICBodHRwOi8vdW5kZXJzY29yZWpzLm9yZ1xuLy8gICAgIChjKSAyMDA5LTIwMTggSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbi8vICAgICBVbmRlcnNjb3JlIG1heSBiZSBmcmVlbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuXG4oZnVuY3Rpb24oKSB7XG5cbiAgLy8gQmFzZWxpbmUgc2V0dXBcbiAgLy8gLS0tLS0tLS0tLS0tLS1cblxuICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgLy8gb24gdGhlIHNlcnZlciwgb3IgYHRoaXNgIGluIHNvbWUgdmlydHVhbCBtYWNoaW5lcy4gV2UgdXNlIGBzZWxmYFxuICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICB2YXIgcm9vdCA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmIHx8XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbC5nbG9iYWwgPT09IGdsb2JhbCAmJiBnbG9iYWwgfHxcbiAgICAgICAgICAgIHRoaXMgfHxcbiAgICAgICAgICAgIHt9O1xuXG4gIC8vIFNhdmUgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBgX2AgdmFyaWFibGUuXG4gIHZhciBwcmV2aW91c1VuZGVyc2NvcmUgPSByb290Ll87XG5cbiAgLy8gU2F2ZSBieXRlcyBpbiB0aGUgbWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBlZCkgdmVyc2lvbjpcbiAgdmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsIE9ialByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIFN5bWJvbFByb3RvID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wucHJvdG90eXBlIDogbnVsbDtcblxuICAvLyBDcmVhdGUgcXVpY2sgcmVmZXJlbmNlIHZhcmlhYmxlcyBmb3Igc3BlZWQgYWNjZXNzIHRvIGNvcmUgcHJvdG90eXBlcy5cbiAgdmFyIHB1c2ggPSBBcnJheVByb3RvLnB1c2gsXG4gICAgICBzbGljZSA9IEFycmF5UHJvdG8uc2xpY2UsXG4gICAgICB0b1N0cmluZyA9IE9ialByb3RvLnRvU3RyaW5nLFxuICAgICAgaGFzT3duUHJvcGVydHkgPSBPYmpQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuICAvLyBBbGwgKipFQ01BU2NyaXB0IDUqKiBuYXRpdmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2UgaG9wZSB0byB1c2VcbiAgLy8gYXJlIGRlY2xhcmVkIGhlcmUuXG4gIHZhciBuYXRpdmVJc0FycmF5ID0gQXJyYXkuaXNBcnJheSxcbiAgICAgIG5hdGl2ZUtleXMgPSBPYmplY3Qua2V5cyxcbiAgICAgIG5hdGl2ZUNyZWF0ZSA9IE9iamVjdC5jcmVhdGU7XG5cbiAgLy8gTmFrZWQgZnVuY3Rpb24gcmVmZXJlbmNlIGZvciBzdXJyb2dhdGUtcHJvdG90eXBlLXN3YXBwaW5nLlxuICB2YXIgQ3RvciA9IGZ1bmN0aW9uKCl7fTtcblxuICAvLyBDcmVhdGUgYSBzYWZlIHJlZmVyZW5jZSB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QgZm9yIHVzZSBiZWxvdy5cbiAgdmFyIF8gPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgXykgcmV0dXJuIG9iajtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgXykpIHJldHVybiBuZXcgXyhvYmopO1xuICAgIHRoaXMuX3dyYXBwZWQgPSBvYmo7XG4gIH07XG5cbiAgLy8gRXhwb3J0IHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3IgKipOb2RlLmpzKiosIHdpdGhcbiAgLy8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZm9yIHRoZWlyIG9sZCBtb2R1bGUgQVBJLiBJZiB3ZSdyZSBpblxuICAvLyB0aGUgYnJvd3NlciwgYWRkIGBfYCBhcyBhIGdsb2JhbCBvYmplY3QuXG4gIC8vIChgbm9kZVR5cGVgIGlzIGNoZWNrZWQgdG8gZW5zdXJlIHRoYXQgYG1vZHVsZWBcbiAgLy8gYW5kIGBleHBvcnRzYCBhcmUgbm90IEhUTUwgZWxlbWVudHMuKVxuICBpZiAodHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVmaW5lZCcgJiYgIWV4cG9ydHMubm9kZVR5cGUpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZpbmVkJyAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBfO1xuICAgIH1cbiAgICBleHBvcnRzLl8gPSBfO1xuICB9IGVsc2Uge1xuICAgIHJvb3QuXyA9IF87XG4gIH1cblxuICAvLyBDdXJyZW50IHZlcnNpb24uXG4gIF8uVkVSU0lPTiA9ICcxLjkuMSc7XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGVmZmljaWVudCAoZm9yIGN1cnJlbnQgZW5naW5lcykgdmVyc2lvblxuICAvLyBvZiB0aGUgcGFzc2VkLWluIGNhbGxiYWNrLCB0byBiZSByZXBlYXRlZGx5IGFwcGxpZWQgaW4gb3RoZXIgVW5kZXJzY29yZVxuICAvLyBmdW5jdGlvbnMuXG4gIHZhciBvcHRpbWl6ZUNiID0gZnVuY3Rpb24oZnVuYywgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgICBpZiAoY29udGV4dCA9PT0gdm9pZCAwKSByZXR1cm4gZnVuYztcbiAgICBzd2l0Y2ggKGFyZ0NvdW50ID09IG51bGwgPyAzIDogYXJnQ291bnQpIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUpO1xuICAgICAgfTtcbiAgICAgIC8vIFRoZSAyLWFyZ3VtZW50IGNhc2UgaXMgb21pdHRlZCBiZWNhdXNlIHdl4oCZcmUgbm90IHVzaW5nIGl0LlxuICAgICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH07XG4gICAgICBjYXNlIDQ6IHJldHVybiBmdW5jdGlvbihhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH07XG5cbiAgdmFyIGJ1aWx0aW5JdGVyYXRlZTtcblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBjYWxsYmFja3MgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBlYWNoXG4gIC8vIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uLCByZXR1cm5pbmcgdGhlIGRlc2lyZWQgcmVzdWx0IOKAlCBlaXRoZXIgYGlkZW50aXR5YCxcbiAgLy8gYW4gYXJiaXRyYXJ5IGNhbGxiYWNrLCBhIHByb3BlcnR5IG1hdGNoZXIsIG9yIGEgcHJvcGVydHkgYWNjZXNzb3IuXG4gIHZhciBjYiA9IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICAgIGlmIChfLml0ZXJhdGVlICE9PSBidWlsdGluSXRlcmF0ZWUpIHJldHVybiBfLml0ZXJhdGVlKHZhbHVlLCBjb250ZXh0KTtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIF8uaWRlbnRpdHk7XG4gICAgaWYgKF8uaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybiBvcHRpbWl6ZUNiKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCk7XG4gICAgaWYgKF8uaXNPYmplY3QodmFsdWUpICYmICFfLmlzQXJyYXkodmFsdWUpKSByZXR1cm4gXy5tYXRjaGVyKHZhbHVlKTtcbiAgICByZXR1cm4gXy5wcm9wZXJ0eSh2YWx1ZSk7XG4gIH07XG5cbiAgLy8gRXh0ZXJuYWwgd3JhcHBlciBmb3Igb3VyIGNhbGxiYWNrIGdlbmVyYXRvci4gVXNlcnMgbWF5IGN1c3RvbWl6ZVxuICAvLyBgXy5pdGVyYXRlZWAgaWYgdGhleSB3YW50IGFkZGl0aW9uYWwgcHJlZGljYXRlL2l0ZXJhdGVlIHNob3J0aGFuZCBzdHlsZXMuXG4gIC8vIFRoaXMgYWJzdHJhY3Rpb24gaGlkZXMgdGhlIGludGVybmFsLW9ubHkgYXJnQ291bnQgYXJndW1lbnQuXG4gIF8uaXRlcmF0ZWUgPSBidWlsdGluSXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBjYih2YWx1ZSwgY29udGV4dCwgSW5maW5pdHkpO1xuICB9O1xuXG4gIC8vIFNvbWUgZnVuY3Rpb25zIHRha2UgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLCBvciBhIGZldyBleHBlY3RlZFxuICAvLyBhcmd1bWVudHMgYXQgdGhlIGJlZ2lubmluZyBhbmQgdGhlbiBhIHZhcmlhYmxlIG51bWJlciBvZiB2YWx1ZXMgdG8gb3BlcmF0ZVxuICAvLyBvbi4gVGhpcyBoZWxwZXIgYWNjdW11bGF0ZXMgYWxsIHJlbWFpbmluZyBhcmd1bWVudHMgcGFzdCB0aGUgZnVuY3Rpb27igJlzXG4gIC8vIGFyZ3VtZW50IGxlbmd0aCAob3IgYW4gZXhwbGljaXQgYHN0YXJ0SW5kZXhgKSwgaW50byBhbiBhcnJheSB0aGF0IGJlY29tZXNcbiAgLy8gdGhlIGxhc3QgYXJndW1lbnQuIFNpbWlsYXIgdG8gRVM24oCZcyBcInJlc3QgcGFyYW1ldGVyXCIuXG4gIHZhciByZXN0QXJndW1lbnRzID0gZnVuY3Rpb24oZnVuYywgc3RhcnRJbmRleCkge1xuICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoYXJndW1lbnRzLmxlbmd0aCAtIHN0YXJ0SW5kZXgsIDApLFxuICAgICAgICAgIHJlc3QgPSBBcnJheShsZW5ndGgpLFxuICAgICAgICAgIGluZGV4ID0gMDtcbiAgICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIGFyZ3VtZW50c1swXSwgcmVzdCk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXSwgcmVzdCk7XG4gICAgICB9XG4gICAgICB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgfVxuICAgICAgYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIG5ldyBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIGFub3RoZXIuXG4gIHZhciBiYXNlQ3JlYXRlID0gZnVuY3Rpb24ocHJvdG90eXBlKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KHByb3RvdHlwZSkpIHJldHVybiB7fTtcbiAgICBpZiAobmF0aXZlQ3JlYXRlKSByZXR1cm4gbmF0aXZlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgQ3Rvci5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBDdG9yO1xuICAgIEN0b3IucHJvdG90eXBlID0gbnVsbDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciBzaGFsbG93UHJvcGVydHkgPSBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpba2V5XTtcbiAgICB9O1xuICB9O1xuXG4gIHZhciBoYXMgPSBmdW5jdGlvbihvYmosIHBhdGgpIHtcbiAgICByZXR1cm4gb2JqICE9IG51bGwgJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHBhdGgpO1xuICB9XG5cbiAgdmFyIGRlZXBHZXQgPSBmdW5jdGlvbihvYmosIHBhdGgpIHtcbiAgICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgICAgb2JqID0gb2JqW3BhdGhbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gbGVuZ3RoID8gb2JqIDogdm9pZCAwO1xuICB9O1xuXG4gIC8vIEhlbHBlciBmb3IgY29sbGVjdGlvbiBtZXRob2RzIHRvIGRldGVybWluZSB3aGV0aGVyIGEgY29sbGVjdGlvblxuICAvLyBzaG91bGQgYmUgaXRlcmF0ZWQgYXMgYW4gYXJyYXkgb3IgYXMgYW4gb2JqZWN0LlxuICAvLyBSZWxhdGVkOiBodHRwOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy10b2xlbmd0aFxuICAvLyBBdm9pZHMgYSB2ZXJ5IG5hc3R5IGlPUyA4IEpJVCBidWcgb24gQVJNLTY0LiAjMjA5NFxuICB2YXIgTUFYX0FSUkFZX0lOREVYID0gTWF0aC5wb3coMiwgNTMpIC0gMTtcbiAgdmFyIGdldExlbmd0aCA9IHNoYWxsb3dQcm9wZXJ0eSgnbGVuZ3RoJyk7XG4gIHZhciBpc0FycmF5TGlrZSA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24pIHtcbiAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKGNvbGxlY3Rpb24pO1xuICAgIHJldHVybiB0eXBlb2YgbGVuZ3RoID09ICdudW1iZXInICYmIGxlbmd0aCA+PSAwICYmIGxlbmd0aCA8PSBNQVhfQVJSQVlfSU5ERVg7XG4gIH07XG5cbiAgLy8gQ29sbGVjdGlvbiBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBUaGUgY29ybmVyc3RvbmUsIGFuIGBlYWNoYCBpbXBsZW1lbnRhdGlvbiwgYWthIGBmb3JFYWNoYC5cbiAgLy8gSGFuZGxlcyByYXcgb2JqZWN0cyBpbiBhZGRpdGlvbiB0byBhcnJheS1saWtlcy4gVHJlYXRzIGFsbFxuICAvLyBzcGFyc2UgYXJyYXktbGlrZXMgYXMgaWYgdGhleSB3ZXJlIGRlbnNlLlxuICBfLmVhY2ggPSBfLmZvckVhY2ggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIgaSwgbGVuZ3RoO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSB7XG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaXRlcmF0ZWUob2JqW2ldLCBpLCBvYmopO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVyYXRlZShvYmpba2V5c1tpXV0sIGtleXNbaV0sIG9iaik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQuXG4gIF8ubWFwID0gXy5jb2xsZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAgICByZXN1bHRzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgcmVzdWx0c1tpbmRleF0gPSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIHJlZHVjaW5nIGZ1bmN0aW9uIGl0ZXJhdGluZyBsZWZ0IG9yIHJpZ2h0LlxuICB2YXIgY3JlYXRlUmVkdWNlID0gZnVuY3Rpb24oZGlyKSB7XG4gICAgLy8gV3JhcCBjb2RlIHRoYXQgcmVhc3NpZ25zIGFyZ3VtZW50IHZhcmlhYmxlcyBpbiBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRoYW5cbiAgICAvLyB0aGUgb25lIHRoYXQgYWNjZXNzZXMgYGFyZ3VtZW50cy5sZW5ndGhgIHRvIGF2b2lkIGEgcGVyZiBoaXQuICgjMTk5MSlcbiAgICB2YXIgcmVkdWNlciA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGluaXRpYWwpIHtcbiAgICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICAgICAgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4gICAgICBpZiAoIWluaXRpYWwpIHtcbiAgICAgICAgbWVtbyA9IG9ialtrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGRpcjtcbiAgICAgIH1cbiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgICAgbWVtbyA9IGl0ZXJhdGVlKG1lbW8sIG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgbWVtbywgY29udGV4dCkge1xuICAgICAgdmFyIGluaXRpYWwgPSBhcmd1bWVudHMubGVuZ3RoID49IDM7XG4gICAgICByZXR1cm4gcmVkdWNlcihvYmosIG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDQpLCBtZW1vLCBpbml0aWFsKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vICoqUmVkdWNlKiogYnVpbGRzIHVwIGEgc2luZ2xlIHJlc3VsdCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFrYSBgaW5qZWN0YCxcbiAgLy8gb3IgYGZvbGRsYC5cbiAgXy5yZWR1Y2UgPSBfLmZvbGRsID0gXy5pbmplY3QgPSBjcmVhdGVSZWR1Y2UoMSk7XG5cbiAgLy8gVGhlIHJpZ2h0LWFzc29jaWF0aXZlIHZlcnNpb24gb2YgcmVkdWNlLCBhbHNvIGtub3duIGFzIGBmb2xkcmAuXG4gIF8ucmVkdWNlUmlnaHQgPSBfLmZvbGRyID0gY3JlYXRlUmVkdWNlKC0xKTtcblxuICAvLyBSZXR1cm4gdGhlIGZpcnN0IHZhbHVlIHdoaWNoIHBhc3NlcyBhIHRydXRoIHRlc3QuIEFsaWFzZWQgYXMgYGRldGVjdGAuXG4gIF8uZmluZCA9IF8uZGV0ZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIga2V5RmluZGVyID0gaXNBcnJheUxpa2Uob2JqKSA/IF8uZmluZEluZGV4IDogXy5maW5kS2V5O1xuICAgIHZhciBrZXkgPSBrZXlGaW5kZXIob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIGlmIChrZXkgIT09IHZvaWQgMCAmJiBrZXkgIT09IC0xKSByZXR1cm4gb2JqW2tleV07XG4gIH07XG5cbiAgLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBwYXNzIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNlZCBhcyBgc2VsZWN0YC5cbiAgXy5maWx0ZXIgPSBfLnNlbGVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGxpc3QpKSByZXN1bHRzLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBhIHRydXRoIHRlc3QgZmFpbHMuXG4gIF8ucmVqZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIob2JqLCBfLm5lZ2F0ZShjYihwcmVkaWNhdGUpKSwgY29udGV4dCk7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgYWxsIG9mIHRoZSBlbGVtZW50cyBtYXRjaCBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYGFsbGAuXG4gIF8uZXZlcnkgPSBfLmFsbCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKCFwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIERldGVybWluZSBpZiBhdCBsZWFzdCBvbmUgZWxlbWVudCBpbiB0aGUgb2JqZWN0IG1hdGNoZXMgYSB0cnV0aCB0ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBhbnlgLlxuICBfLnNvbWUgPSBfLmFueSA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBhcnJheSBvciBvYmplY3QgY29udGFpbnMgYSBnaXZlbiBpdGVtICh1c2luZyBgPT09YCkuXG4gIC8vIEFsaWFzZWQgYXMgYGluY2x1ZGVzYCBhbmQgYGluY2x1ZGVgLlxuICBfLmNvbnRhaW5zID0gXy5pbmNsdWRlcyA9IF8uaW5jbHVkZSA9IGZ1bmN0aW9uKG9iaiwgaXRlbSwgZnJvbUluZGV4LCBndWFyZCkge1xuICAgIGlmICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gXy52YWx1ZXMob2JqKTtcbiAgICBpZiAodHlwZW9mIGZyb21JbmRleCAhPSAnbnVtYmVyJyB8fCBndWFyZCkgZnJvbUluZGV4ID0gMDtcbiAgICByZXR1cm4gXy5pbmRleE9mKG9iaiwgaXRlbSwgZnJvbUluZGV4KSA+PSAwO1xuICB9O1xuXG4gIC8vIEludm9rZSBhIG1ldGhvZCAod2l0aCBhcmd1bWVudHMpIG9uIGV2ZXJ5IGl0ZW0gaW4gYSBjb2xsZWN0aW9uLlxuICBfLmludm9rZSA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24ob2JqLCBwYXRoLCBhcmdzKSB7XG4gICAgdmFyIGNvbnRleHRQYXRoLCBmdW5jO1xuICAgIGlmIChfLmlzRnVuY3Rpb24ocGF0aCkpIHtcbiAgICAgIGZ1bmMgPSBwYXRoO1xuICAgIH0gZWxzZSBpZiAoXy5pc0FycmF5KHBhdGgpKSB7XG4gICAgICBjb250ZXh0UGF0aCA9IHBhdGguc2xpY2UoMCwgLTEpO1xuICAgICAgcGF0aCA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcbiAgICB9XG4gICAgcmV0dXJuIF8ubWFwKG9iaiwgZnVuY3Rpb24oY29udGV4dCkge1xuICAgICAgdmFyIG1ldGhvZCA9IGZ1bmM7XG4gICAgICBpZiAoIW1ldGhvZCkge1xuICAgICAgICBpZiAoY29udGV4dFBhdGggJiYgY29udGV4dFBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgY29udGV4dCA9IGRlZXBHZXQoY29udGV4dCwgY29udGV4dFBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZXh0ID09IG51bGwpIHJldHVybiB2b2lkIDA7XG4gICAgICAgIG1ldGhvZCA9IGNvbnRleHRbcGF0aF07XG4gICAgICB9XG4gICAgICByZXR1cm4gbWV0aG9kID09IG51bGwgPyBtZXRob2QgOiBtZXRob2QuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYG1hcGA6IGZldGNoaW5nIGEgcHJvcGVydHkuXG4gIF8ucGx1Y2sgPSBmdW5jdGlvbihvYmosIGtleSkge1xuICAgIHJldHVybiBfLm1hcChvYmosIF8ucHJvcGVydHkoa2V5KSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgZmlsdGVyYDogc2VsZWN0aW5nIG9ubHkgb2JqZWN0c1xuICAvLyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLndoZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykge1xuICAgIHJldHVybiBfLmZpbHRlcihvYmosIF8ubWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbmRgOiBnZXR0aW5nIHRoZSBmaXJzdCBvYmplY3RcbiAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5maW5kV2hlcmUgPSBmdW5jdGlvbihvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIF8uZmluZChvYmosIF8ubWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWF4aW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5tYXggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IC1JbmZpbml0eSwgbGFzdENvbXB1dGVkID0gLUluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwgfHwgdHlwZW9mIGl0ZXJhdGVlID09ICdudW1iZXInICYmIHR5cGVvZiBvYmpbMF0gIT0gJ29iamVjdCcgJiYgb2JqICE9IG51bGwpIHtcbiAgICAgIG9iaiA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgPiByZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHYsIGluZGV4LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodiwgaW5kZXgsIGxpc3QpO1xuICAgICAgICBpZiAoY29tcHV0ZWQgPiBsYXN0Q29tcHV0ZWQgfHwgY29tcHV0ZWQgPT09IC1JbmZpbml0eSAmJiByZXN1bHQgPT09IC1JbmZpbml0eSkge1xuICAgICAgICAgIHJlc3VsdCA9IHY7XG4gICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWluaW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5taW4gPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IEluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSBJbmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICAgIGlmIChpdGVyYXRlZSA9PSBudWxsIHx8IHR5cGVvZiBpdGVyYXRlZSA9PSAnbnVtYmVyJyAmJiB0eXBlb2Ygb2JqWzBdICE9ICdvYmplY3QnICYmIG9iaiAhPSBudWxsKSB7XG4gICAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlIDwgcmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2LCBpbmRleCwgbGlzdCkge1xuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHYsIGluZGV4LCBsaXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVkIDwgbGFzdENvbXB1dGVkIHx8IGNvbXB1dGVkID09PSBJbmZpbml0eSAmJiByZXN1bHQgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdjtcbiAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gU2h1ZmZsZSBhIGNvbGxlY3Rpb24uXG4gIF8uc2h1ZmZsZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBfLnNhbXBsZShvYmosIEluZmluaXR5KTtcbiAgfTtcblxuICAvLyBTYW1wbGUgKipuKiogcmFuZG9tIHZhbHVlcyBmcm9tIGEgY29sbGVjdGlvbiB1c2luZyB0aGUgbW9kZXJuIHZlcnNpb24gb2YgdGhlXG4gIC8vIFtGaXNoZXItWWF0ZXMgc2h1ZmZsZV0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXLigJNZYXRlc19zaHVmZmxlKS5cbiAgLy8gSWYgKipuKiogaXMgbm90IHNwZWNpZmllZCwgcmV0dXJucyBhIHNpbmdsZSByYW5kb20gZWxlbWVudC5cbiAgLy8gVGhlIGludGVybmFsIGBndWFyZGAgYXJndW1lbnQgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgbWFwYC5cbiAgXy5zYW1wbGUgPSBmdW5jdGlvbihvYmosIG4sIGd1YXJkKSB7XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkge1xuICAgICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSBfLnZhbHVlcyhvYmopO1xuICAgICAgcmV0dXJuIG9ialtfLnJhbmRvbShvYmoubGVuZ3RoIC0gMSldO1xuICAgIH1cbiAgICB2YXIgc2FtcGxlID0gaXNBcnJheUxpa2Uob2JqKSA/IF8uY2xvbmUob2JqKSA6IF8udmFsdWVzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChzYW1wbGUpO1xuICAgIG4gPSBNYXRoLm1heChNYXRoLm1pbihuLCBsZW5ndGgpLCAwKTtcbiAgICB2YXIgbGFzdCA9IGxlbmd0aCAtIDE7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG47IGluZGV4KyspIHtcbiAgICAgIHZhciByYW5kID0gXy5yYW5kb20oaW5kZXgsIGxhc3QpO1xuICAgICAgdmFyIHRlbXAgPSBzYW1wbGVbaW5kZXhdO1xuICAgICAgc2FtcGxlW2luZGV4XSA9IHNhbXBsZVtyYW5kXTtcbiAgICAgIHNhbXBsZVtyYW5kXSA9IHRlbXA7XG4gICAgfVxuICAgIHJldHVybiBzYW1wbGUuc2xpY2UoMCwgbik7XG4gIH07XG5cbiAgLy8gU29ydCB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uIHByb2R1Y2VkIGJ5IGFuIGl0ZXJhdGVlLlxuICBfLnNvcnRCeSA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHJldHVybiBfLnBsdWNrKF8ubWFwKG9iaiwgZnVuY3Rpb24odmFsdWUsIGtleSwgbGlzdCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBpbmRleDogaW5kZXgrKyxcbiAgICAgICAgY3JpdGVyaWE6IGl0ZXJhdGVlKHZhbHVlLCBrZXksIGxpc3QpXG4gICAgICB9O1xuICAgIH0pLnNvcnQoZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYTtcbiAgICAgIHZhciBiID0gcmlnaHQuY3JpdGVyaWE7XG4gICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICBpZiAoYSA+IGIgfHwgYSA9PT0gdm9pZCAwKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgPCBiIHx8IGIgPT09IHZvaWQgMCkgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxlZnQuaW5kZXggLSByaWdodC5pbmRleDtcbiAgICB9KSwgJ3ZhbHVlJyk7XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBmb3IgYWdncmVnYXRlIFwiZ3JvdXAgYnlcIiBvcGVyYXRpb25zLlxuICB2YXIgZ3JvdXAgPSBmdW5jdGlvbihiZWhhdmlvciwgcGFydGl0aW9uKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICAgIHZhciByZXN1bHQgPSBwYXJ0aXRpb24gPyBbW10sIFtdXSA6IHt9O1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGtleSA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgb2JqKTtcbiAgICAgICAgYmVoYXZpb3IocmVzdWx0LCB2YWx1ZSwga2V5KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEdyb3VwcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLiBQYXNzIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGVcbiAgLy8gdG8gZ3JvdXAgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjcml0ZXJpb24uXG4gIF8uZ3JvdXBCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChoYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XS5wdXNoKHZhbHVlKTsgZWxzZSByZXN1bHRba2V5XSA9IFt2YWx1ZV07XG4gIH0pO1xuXG4gIC8vIEluZGV4ZXMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiwgc2ltaWxhciB0byBgZ3JvdXBCeWAsIGJ1dCBmb3JcbiAgLy8gd2hlbiB5b3Uga25vdyB0aGF0IHlvdXIgaW5kZXggdmFsdWVzIHdpbGwgYmUgdW5pcXVlLlxuICBfLmluZGV4QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICB9KTtcblxuICAvLyBDb3VudHMgaW5zdGFuY2VzIG9mIGFuIG9iamVjdCB0aGF0IGdyb3VwIGJ5IGEgY2VydGFpbiBjcml0ZXJpb24uIFBhc3NcbiAgLy8gZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZSB0byBjb3VudCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gIC8vIGNyaXRlcmlvbi5cbiAgXy5jb3VudEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgaWYgKGhhcyhyZXN1bHQsIGtleSkpIHJlc3VsdFtrZXldKys7IGVsc2UgcmVzdWx0W2tleV0gPSAxO1xuICB9KTtcblxuICB2YXIgcmVTdHJTeW1ib2wgPSAvW15cXHVkODAwLVxcdWRmZmZdfFtcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl18W1xcdWQ4MDAtXFx1ZGZmZl0vZztcbiAgLy8gU2FmZWx5IGNyZWF0ZSBhIHJlYWwsIGxpdmUgYXJyYXkgZnJvbSBhbnl0aGluZyBpdGVyYWJsZS5cbiAgXy50b0FycmF5ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFvYmopIHJldHVybiBbXTtcbiAgICBpZiAoXy5pc0FycmF5KG9iaikpIHJldHVybiBzbGljZS5jYWxsKG9iaik7XG4gICAgaWYgKF8uaXNTdHJpbmcob2JqKSkge1xuICAgICAgLy8gS2VlcCBzdXJyb2dhdGUgcGFpciBjaGFyYWN0ZXJzIHRvZ2V0aGVyXG4gICAgICByZXR1cm4gb2JqLm1hdGNoKHJlU3RyU3ltYm9sKTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHJldHVybiBfLm1hcChvYmosIF8uaWRlbnRpdHkpO1xuICAgIHJldHVybiBfLnZhbHVlcyhvYmopO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFuIG9iamVjdC5cbiAgXy5zaXplID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gMDtcbiAgICByZXR1cm4gaXNBcnJheUxpa2Uob2JqKSA/IG9iai5sZW5ndGggOiBfLmtleXMob2JqKS5sZW5ndGg7XG4gIH07XG5cbiAgLy8gU3BsaXQgYSBjb2xsZWN0aW9uIGludG8gdHdvIGFycmF5czogb25lIHdob3NlIGVsZW1lbnRzIGFsbCBzYXRpc2Z5IHRoZSBnaXZlblxuICAvLyBwcmVkaWNhdGUsIGFuZCBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIGRvIG5vdCBzYXRpc2Z5IHRoZSBwcmVkaWNhdGUuXG4gIF8ucGFydGl0aW9uID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwgcGFzcykge1xuICAgIHJlc3VsdFtwYXNzID8gMCA6IDFdLnB1c2godmFsdWUpO1xuICB9LCB0cnVlKTtcblxuICAvLyBBcnJheSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gR2V0IHRoZSBmaXJzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuIEFsaWFzZWQgYXMgYGhlYWRgIGFuZCBgdGFrZWAuIFRoZSAqKmd1YXJkKiogY2hlY2tcbiAgLy8gYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgXy5tYXBgLlxuICBfLmZpcnN0ID0gXy5oZWFkID0gXy50YWtlID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgaWYgKGFycmF5ID09IG51bGwgfHwgYXJyYXkubGVuZ3RoIDwgMSkgcmV0dXJuIG4gPT0gbnVsbCA/IHZvaWQgMCA6IFtdO1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVswXTtcbiAgICByZXR1cm4gXy5pbml0aWFsKGFycmF5LCBhcnJheS5sZW5ndGggLSBuKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBsYXN0IGVudHJ5IG9mIHRoZSBhcnJheS4gRXNwZWNpYWxseSB1c2VmdWwgb25cbiAgLy8gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gYWxsIHRoZSB2YWx1ZXMgaW5cbiAgLy8gdGhlIGFycmF5LCBleGNsdWRpbmcgdGhlIGxhc3QgTi5cbiAgXy5pbml0aWFsID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIDAsIE1hdGgubWF4KDAsIGFycmF5Lmxlbmd0aCAtIChuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbikpKTtcbiAgfTtcblxuICAvLyBHZXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgbGFzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuXG4gIF8ubGFzdCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsIHx8IGFycmF5Lmxlbmd0aCA8IDEpIHJldHVybiBuID09IG51bGwgPyB2b2lkIDAgOiBbXTtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIF8ucmVzdChhcnJheSwgTWF0aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gbikpO1xuICB9O1xuXG4gIC8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBhcnJheS4gQWxpYXNlZCBhcyBgdGFpbGAgYW5kIGBkcm9wYC5cbiAgLy8gRXNwZWNpYWxseSB1c2VmdWwgb24gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgYW4gKipuKiogd2lsbCByZXR1cm5cbiAgLy8gdGhlIHJlc3QgTiB2YWx1ZXMgaW4gdGhlIGFycmF5LlxuICBfLnJlc3QgPSBfLnRhaWwgPSBfLmRyb3AgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgbiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pO1xuICB9O1xuXG4gIC8vIFRyaW0gb3V0IGFsbCBmYWxzeSB2YWx1ZXMgZnJvbSBhbiBhcnJheS5cbiAgXy5jb21wYWN0ID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIoYXJyYXksIEJvb2xlYW4pO1xuICB9O1xuXG4gIC8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIGEgcmVjdXJzaXZlIGBmbGF0dGVuYCBmdW5jdGlvbi5cbiAgdmFyIGZsYXR0ZW4gPSBmdW5jdGlvbihpbnB1dCwgc2hhbGxvdywgc3RyaWN0LCBvdXRwdXQpIHtcbiAgICBvdXRwdXQgPSBvdXRwdXQgfHwgW107XG4gICAgdmFyIGlkeCA9IG91dHB1dC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChpbnB1dCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gaW5wdXRbaV07XG4gICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYmIChfLmlzQXJyYXkodmFsdWUpIHx8IF8uaXNBcmd1bWVudHModmFsdWUpKSkge1xuICAgICAgICAvLyBGbGF0dGVuIGN1cnJlbnQgbGV2ZWwgb2YgYXJyYXkgb3IgYXJndW1lbnRzIG9iamVjdC5cbiAgICAgICAgaWYgKHNoYWxsb3cpIHtcbiAgICAgICAgICB2YXIgaiA9IDAsIGxlbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoaiA8IGxlbikgb3V0cHV0W2lkeCsrXSA9IHZhbHVlW2orK107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmxhdHRlbih2YWx1ZSwgc2hhbGxvdywgc3RyaWN0LCBvdXRwdXQpO1xuICAgICAgICAgIGlkeCA9IG91dHB1dC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCkge1xuICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG5cbiAgLy8gRmxhdHRlbiBvdXQgYW4gYXJyYXksIGVpdGhlciByZWN1cnNpdmVseSAoYnkgZGVmYXVsdCksIG9yIGp1c3Qgb25lIGxldmVsLlxuICBfLmZsYXR0ZW4gPSBmdW5jdGlvbihhcnJheSwgc2hhbGxvdykge1xuICAgIHJldHVybiBmbGF0dGVuKGFycmF5LCBzaGFsbG93LCBmYWxzZSk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgdmVyc2lvbiBvZiB0aGUgYXJyYXkgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBzcGVjaWZpZWQgdmFsdWUocykuXG4gIF8ud2l0aG91dCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oYXJyYXksIG90aGVyQXJyYXlzKSB7XG4gICAgcmV0dXJuIF8uZGlmZmVyZW5jZShhcnJheSwgb3RoZXJBcnJheXMpO1xuICB9KTtcblxuICAvLyBQcm9kdWNlIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiB0aGUgYXJyYXkuIElmIHRoZSBhcnJheSBoYXMgYWxyZWFkeVxuICAvLyBiZWVuIHNvcnRlZCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiB1c2luZyBhIGZhc3RlciBhbGdvcml0aG0uXG4gIC8vIFRoZSBmYXN0ZXIgYWxnb3JpdGhtIHdpbGwgbm90IHdvcmsgd2l0aCBhbiBpdGVyYXRlZSBpZiB0aGUgaXRlcmF0ZWVcbiAgLy8gaXMgbm90IGEgb25lLXRvLW9uZSBmdW5jdGlvbiwgc28gcHJvdmlkaW5nIGFuIGl0ZXJhdGVlIHdpbGwgZGlzYWJsZVxuICAvLyB0aGUgZmFzdGVyIGFsZ29yaXRobS5cbiAgLy8gQWxpYXNlZCBhcyBgdW5pcXVlYC5cbiAgXy51bmlxID0gXy51bmlxdWUgPSBmdW5jdGlvbihhcnJheSwgaXNTb3J0ZWQsIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaWYgKCFfLmlzQm9vbGVhbihpc1NvcnRlZCkpIHtcbiAgICAgIGNvbnRleHQgPSBpdGVyYXRlZTtcbiAgICAgIGl0ZXJhdGVlID0gaXNTb3J0ZWQ7XG4gICAgICBpc1NvcnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaXRlcmF0ZWUgIT0gbnVsbCkgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBzZWVuID0gW107XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaV0sXG4gICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlLCBpLCBhcnJheSkgOiB2YWx1ZTtcbiAgICAgIGlmIChpc1NvcnRlZCAmJiAhaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKCFpIHx8IHNlZW4gIT09IGNvbXB1dGVkKSByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIHNlZW4gPSBjb21wdXRlZDtcbiAgICAgIH0gZWxzZSBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKHNlZW4sIGNvbXB1dGVkKSkge1xuICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFfLmNvbnRhaW5zKHJlc3VsdCwgdmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgdGhlIHVuaW9uOiBlYWNoIGRpc3RpbmN0IGVsZW1lbnQgZnJvbSBhbGwgb2ZcbiAgLy8gdGhlIHBhc3NlZC1pbiBhcnJheXMuXG4gIF8udW5pb24gPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGFycmF5cykge1xuICAgIHJldHVybiBfLnVuaXEoZmxhdHRlbihhcnJheXMsIHRydWUsIHRydWUpKTtcbiAgfSk7XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGl0ZW0gc2hhcmVkIGJldHdlZW4gYWxsIHRoZVxuICAvLyBwYXNzZWQtaW4gYXJyYXlzLlxuICBfLmludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGFycmF5W2ldO1xuICAgICAgaWYgKF8uY29udGFpbnMocmVzdWx0LCBpdGVtKSkgY29udGludWU7XG4gICAgICB2YXIgajtcbiAgICAgIGZvciAoaiA9IDE7IGogPCBhcmdzTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKGFyZ3VtZW50c1tqXSwgaXRlbSkpIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGogPT09IGFyZ3NMZW5ndGgpIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFRha2UgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBvbmUgYXJyYXkgYW5kIGEgbnVtYmVyIG9mIG90aGVyIGFycmF5cy5cbiAgLy8gT25seSB0aGUgZWxlbWVudHMgcHJlc2VudCBpbiBqdXN0IHRoZSBmaXJzdCBhcnJheSB3aWxsIHJlbWFpbi5cbiAgXy5kaWZmZXJlbmNlID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihhcnJheSwgcmVzdCkge1xuICAgIHJlc3QgPSBmbGF0dGVuKHJlc3QsIHRydWUsIHRydWUpO1xuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgZnVuY3Rpb24odmFsdWUpe1xuICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKHJlc3QsIHZhbHVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gQ29tcGxlbWVudCBvZiBfLnppcC4gVW56aXAgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgYW5kIGdyb3Vwc1xuICAvLyBlYWNoIGFycmF5J3MgZWxlbWVudHMgb24gc2hhcmVkIGluZGljZXMuXG4gIF8udW56aXAgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHZhciBsZW5ndGggPSBhcnJheSAmJiBfLm1heChhcnJheSwgZ2V0TGVuZ3RoKS5sZW5ndGggfHwgMDtcbiAgICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHJlc3VsdFtpbmRleF0gPSBfLnBsdWNrKGFycmF5LCBpbmRleCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gWmlwIHRvZ2V0aGVyIG11bHRpcGxlIGxpc3RzIGludG8gYSBzaW5nbGUgYXJyYXkgLS0gZWxlbWVudHMgdGhhdCBzaGFyZVxuICAvLyBhbiBpbmRleCBnbyB0b2dldGhlci5cbiAgXy56aXAgPSByZXN0QXJndW1lbnRzKF8udW56aXApO1xuXG4gIC8vIENvbnZlcnRzIGxpc3RzIGludG8gb2JqZWN0cy4gUGFzcyBlaXRoZXIgYSBzaW5nbGUgYXJyYXkgb2YgYFtrZXksIHZhbHVlXWBcbiAgLy8gcGFpcnMsIG9yIHR3byBwYXJhbGxlbCBhcnJheXMgb2YgdGhlIHNhbWUgbGVuZ3RoIC0tIG9uZSBvZiBrZXlzLCBhbmQgb25lIG9mXG4gIC8vIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy4gUGFzc2luZyBieSBwYWlycyBpcyB0aGUgcmV2ZXJzZSBvZiBfLnBhaXJzLlxuICBfLm9iamVjdCA9IGZ1bmN0aW9uKGxpc3QsIHZhbHVlcykge1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGxpc3QpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1dID0gdmFsdWVzW2ldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1bMF1dID0gbGlzdFtpXVsxXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBHZW5lcmF0b3IgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBmaW5kSW5kZXggYW5kIGZpbmRMYXN0SW5kZXggZnVuY3Rpb25zLlxuICB2YXIgY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIgPSBmdW5jdGlvbihkaXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgICAgdmFyIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkgcmV0dXJuIGluZGV4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3QgaW5kZXggb24gYW4gYXJyYXktbGlrZSB0aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0LlxuICBfLmZpbmRJbmRleCA9IGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKDEpO1xuICBfLmZpbmRMYXN0SW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigtMSk7XG5cbiAgLy8gVXNlIGEgY29tcGFyYXRvciBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IHRoZSBzbWFsbGVzdCBpbmRleCBhdCB3aGljaFxuICAvLyBhbiBvYmplY3Qgc2hvdWxkIGJlIGluc2VydGVkIHNvIGFzIHRvIG1haW50YWluIG9yZGVyLiBVc2VzIGJpbmFyeSBzZWFyY2guXG4gIF8uc29ydGVkSW5kZXggPSBmdW5jdGlvbihhcnJheSwgb2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpO1xuICAgIHZhciB2YWx1ZSA9IGl0ZXJhdGVlKG9iaik7XG4gICAgdmFyIGxvdyA9IDAsIGhpZ2ggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgICB2YXIgbWlkID0gTWF0aC5mbG9vcigobG93ICsgaGlnaCkgLyAyKTtcbiAgICAgIGlmIChpdGVyYXRlZShhcnJheVttaWRdKSA8IHZhbHVlKSBsb3cgPSBtaWQgKyAxOyBlbHNlIGhpZ2ggPSBtaWQ7XG4gICAgfVxuICAgIHJldHVybiBsb3c7XG4gIH07XG5cbiAgLy8gR2VuZXJhdG9yIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgaW5kZXhPZiBhbmQgbGFzdEluZGV4T2YgZnVuY3Rpb25zLlxuICB2YXIgY3JlYXRlSW5kZXhGaW5kZXIgPSBmdW5jdGlvbihkaXIsIHByZWRpY2F0ZUZpbmQsIHNvcnRlZEluZGV4KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBpZHgpIHtcbiAgICAgIHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICAgIGlmICh0eXBlb2YgaWR4ID09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChkaXIgPiAwKSB7XG4gICAgICAgICAgaSA9IGlkeCA+PSAwID8gaWR4IDogTWF0aC5tYXgoaWR4ICsgbGVuZ3RoLCBpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZW5ndGggPSBpZHggPj0gMCA/IE1hdGgubWluKGlkeCArIDEsIGxlbmd0aCkgOiBpZHggKyBsZW5ndGggKyAxO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNvcnRlZEluZGV4ICYmIGlkeCAmJiBsZW5ndGgpIHtcbiAgICAgICAgaWR4ID0gc29ydGVkSW5kZXgoYXJyYXksIGl0ZW0pO1xuICAgICAgICByZXR1cm4gYXJyYXlbaWR4XSA9PT0gaXRlbSA/IGlkeCA6IC0xO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW0gIT09IGl0ZW0pIHtcbiAgICAgICAgaWR4ID0gcHJlZGljYXRlRmluZChzbGljZS5jYWxsKGFycmF5LCBpLCBsZW5ndGgpLCBfLmlzTmFOKTtcbiAgICAgICAgcmV0dXJuIGlkeCA+PSAwID8gaWR4ICsgaSA6IC0xO1xuICAgICAgfVxuICAgICAgZm9yIChpZHggPSBkaXIgPiAwID8gaSA6IGxlbmd0aCAtIDE7IGlkeCA+PSAwICYmIGlkeCA8IGxlbmd0aDsgaWR4ICs9IGRpcikge1xuICAgICAgICBpZiAoYXJyYXlbaWR4XSA9PT0gaXRlbSkgcmV0dXJuIGlkeDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYW4gaXRlbSBpbiBhbiBhcnJheSxcbiAgLy8gb3IgLTEgaWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1ZGVkIGluIHRoZSBhcnJheS5cbiAgLy8gSWYgdGhlIGFycmF5IGlzIGxhcmdlIGFuZCBhbHJlYWR5IGluIHNvcnQgb3JkZXIsIHBhc3MgYHRydWVgXG4gIC8vIGZvciAqKmlzU29ydGVkKiogdG8gdXNlIGJpbmFyeSBzZWFyY2guXG4gIF8uaW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKDEsIF8uZmluZEluZGV4LCBfLnNvcnRlZEluZGV4KTtcbiAgXy5sYXN0SW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKC0xLCBfLmZpbmRMYXN0SW5kZXgpO1xuXG4gIC8vIEdlbmVyYXRlIGFuIGludGVnZXIgQXJyYXkgY29udGFpbmluZyBhbiBhcml0aG1ldGljIHByb2dyZXNzaW9uLiBBIHBvcnQgb2ZcbiAgLy8gdGhlIG5hdGl2ZSBQeXRob24gYHJhbmdlKClgIGZ1bmN0aW9uLiBTZWVcbiAgLy8gW3RoZSBQeXRob24gZG9jdW1lbnRhdGlvbl0oaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3JhbmdlKS5cbiAgXy5yYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gICAgaWYgKHN0b3AgPT0gbnVsbCkge1xuICAgICAgc3RvcCA9IHN0YXJ0IHx8IDA7XG4gICAgICBzdGFydCA9IDA7XG4gICAgfVxuICAgIGlmICghc3RlcCkge1xuICAgICAgc3RlcCA9IHN0b3AgPCBzdGFydCA/IC0xIDogMTtcbiAgICB9XG5cbiAgICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCksIDApO1xuICAgIHZhciByYW5nZSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBsZW5ndGg7IGlkeCsrLCBzdGFydCArPSBzdGVwKSB7XG4gICAgICByYW5nZVtpZHhdID0gc3RhcnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhbmdlO1xuICB9O1xuXG4gIC8vIENodW5rIGEgc2luZ2xlIGFycmF5IGludG8gbXVsdGlwbGUgYXJyYXlzLCBlYWNoIGNvbnRhaW5pbmcgYGNvdW50YCBvciBmZXdlclxuICAvLyBpdGVtcy5cbiAgXy5jaHVuayA9IGZ1bmN0aW9uKGFycmF5LCBjb3VudCkge1xuICAgIGlmIChjb3VudCA9PSBudWxsIHx8IGNvdW50IDwgMSkgcmV0dXJuIFtdO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgaSA9IDAsIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgICAgcmVzdWx0LnB1c2goc2xpY2UuY2FsbChhcnJheSwgaSwgaSArPSBjb3VudCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIEZ1bmN0aW9uIChhaGVtKSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGV4ZWN1dGUgYSBmdW5jdGlvbiBhcyBhIGNvbnN0cnVjdG9yXG4gIC8vIG9yIGEgbm9ybWFsIGZ1bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgdmFyIGV4ZWN1dGVCb3VuZCA9IGZ1bmN0aW9uKHNvdXJjZUZ1bmMsIGJvdW5kRnVuYywgY29udGV4dCwgY2FsbGluZ0NvbnRleHQsIGFyZ3MpIHtcbiAgICBpZiAoIShjYWxsaW5nQ29udGV4dCBpbnN0YW5jZW9mIGJvdW5kRnVuYykpIHJldHVybiBzb3VyY2VGdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgIHZhciBzZWxmID0gYmFzZUNyZWF0ZShzb3VyY2VGdW5jLnByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IHNvdXJjZUZ1bmMuYXBwbHkoc2VsZiwgYXJncyk7XG4gICAgaWYgKF8uaXNPYmplY3QocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICByZXR1cm4gc2VsZjtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSBmdW5jdGlvbiBib3VuZCB0byBhIGdpdmVuIG9iamVjdCAoYXNzaWduaW5nIGB0aGlzYCwgYW5kIGFyZ3VtZW50cyxcbiAgLy8gb3B0aW9uYWxseSkuIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBGdW5jdGlvbi5iaW5kYCBpZlxuICAvLyBhdmFpbGFibGUuXG4gIF8uYmluZCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oZnVuYywgY29udGV4dCwgYXJncykge1xuICAgIGlmICghXy5pc0Z1bmN0aW9uKGZ1bmMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdCaW5kIG11c3QgYmUgY2FsbGVkIG9uIGEgZnVuY3Rpb24nKTtcbiAgICB2YXIgYm91bmQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGNhbGxBcmdzKSB7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCBjb250ZXh0LCB0aGlzLCBhcmdzLmNvbmNhdChjYWxsQXJncykpO1xuICAgIH0pO1xuICAgIHJldHVybiBib3VuZDtcbiAgfSk7XG5cbiAgLy8gUGFydGlhbGx5IGFwcGx5IGEgZnVuY3Rpb24gYnkgY3JlYXRpbmcgYSB2ZXJzaW9uIHRoYXQgaGFzIGhhZCBzb21lIG9mIGl0c1xuICAvLyBhcmd1bWVudHMgcHJlLWZpbGxlZCwgd2l0aG91dCBjaGFuZ2luZyBpdHMgZHluYW1pYyBgdGhpc2AgY29udGV4dC4gXyBhY3RzXG4gIC8vIGFzIGEgcGxhY2Vob2xkZXIgYnkgZGVmYXVsdCwgYWxsb3dpbmcgYW55IGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyB0byBiZVxuICAvLyBwcmUtZmlsbGVkLiBTZXQgYF8ucGFydGlhbC5wbGFjZWhvbGRlcmAgZm9yIGEgY3VzdG9tIHBsYWNlaG9sZGVyIGFyZ3VtZW50LlxuICBfLnBhcnRpYWwgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGZ1bmMsIGJvdW5kQXJncykge1xuICAgIHZhciBwbGFjZWhvbGRlciA9IF8ucGFydGlhbC5wbGFjZWhvbGRlcjtcbiAgICB2YXIgYm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBwb3NpdGlvbiA9IDAsIGxlbmd0aCA9IGJvdW5kQXJncy5sZW5ndGg7XG4gICAgICB2YXIgYXJncyA9IEFycmF5KGxlbmd0aCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFyZ3NbaV0gPSBib3VuZEFyZ3NbaV0gPT09IHBsYWNlaG9sZGVyID8gYXJndW1lbnRzW3Bvc2l0aW9uKytdIDogYm91bmRBcmdzW2ldO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgYXJndW1lbnRzLmxlbmd0aCkgYXJncy5wdXNoKGFyZ3VtZW50c1twb3NpdGlvbisrXSk7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCB0aGlzLCB0aGlzLCBhcmdzKTtcbiAgICB9O1xuICAgIHJldHVybiBib3VuZDtcbiAgfSk7XG5cbiAgXy5wYXJ0aWFsLnBsYWNlaG9sZGVyID0gXztcblxuICAvLyBCaW5kIGEgbnVtYmVyIG9mIGFuIG9iamVjdCdzIG1ldGhvZHMgdG8gdGhhdCBvYmplY3QuIFJlbWFpbmluZyBhcmd1bWVudHNcbiAgLy8gYXJlIHRoZSBtZXRob2QgbmFtZXMgdG8gYmUgYm91bmQuIFVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhhdCBhbGwgY2FsbGJhY2tzXG4gIC8vIGRlZmluZWQgb24gYW4gb2JqZWN0IGJlbG9uZyB0byBpdC5cbiAgXy5iaW5kQWxsID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihvYmosIGtleXMpIHtcbiAgICBrZXlzID0gZmxhdHRlbihrZXlzLCBmYWxzZSwgZmFsc2UpO1xuICAgIHZhciBpbmRleCA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChpbmRleCA8IDEpIHRocm93IG5ldyBFcnJvcignYmluZEFsbCBtdXN0IGJlIHBhc3NlZCBmdW5jdGlvbiBuYW1lcycpO1xuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpbmRleF07XG4gICAgICBvYmpba2V5XSA9IF8uYmluZChvYmpba2V5XSwgb2JqKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIE1lbW9pemUgYW4gZXhwZW5zaXZlIGZ1bmN0aW9uIGJ5IHN0b3JpbmcgaXRzIHJlc3VsdHMuXG4gIF8ubWVtb2l6ZSA9IGZ1bmN0aW9uKGZ1bmMsIGhhc2hlcikge1xuICAgIHZhciBtZW1vaXplID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgICB2YXIgY2FjaGUgPSBtZW1vaXplLmNhY2hlO1xuICAgICAgdmFyIGFkZHJlc3MgPSAnJyArIChoYXNoZXIgPyBoYXNoZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGtleSk7XG4gICAgICBpZiAoIWhhcyhjYWNoZSwgYWRkcmVzcykpIGNhY2hlW2FkZHJlc3NdID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgcmV0dXJuIGNhY2hlW2FkZHJlc3NdO1xuICAgIH07XG4gICAgbWVtb2l6ZS5jYWNoZSA9IHt9O1xuICAgIHJldHVybiBtZW1vaXplO1xuICB9O1xuXG4gIC8vIERlbGF5cyBhIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgYW5kIHRoZW4gY2FsbHNcbiAgLy8gaXQgd2l0aCB0aGUgYXJndW1lbnRzIHN1cHBsaWVkLlxuICBfLmRlbGF5ID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihmdW5jLCB3YWl0LCBhcmdzKSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9LCB3YWl0KTtcbiAgfSk7XG5cbiAgLy8gRGVmZXJzIGEgZnVuY3Rpb24sIHNjaGVkdWxpbmcgaXQgdG8gcnVuIGFmdGVyIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzXG4gIC8vIGNsZWFyZWQuXG4gIF8uZGVmZXIgPSBfLnBhcnRpYWwoXy5kZWxheSwgXywgMSk7XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCB3aGVuIGludm9rZWQsIHdpbGwgb25seSBiZSB0cmlnZ2VyZWQgYXQgbW9zdCBvbmNlXG4gIC8vIGR1cmluZyBhIGdpdmVuIHdpbmRvdyBvZiB0aW1lLiBOb3JtYWxseSwgdGhlIHRocm90dGxlZCBmdW5jdGlvbiB3aWxsIHJ1blxuICAvLyBhcyBtdWNoIGFzIGl0IGNhbiwgd2l0aG91dCBldmVyIGdvaW5nIG1vcmUgdGhhbiBvbmNlIHBlciBgd2FpdGAgZHVyYXRpb247XG4gIC8vIGJ1dCBpZiB5b3UnZCBsaWtlIHRvIGRpc2FibGUgdGhlIGV4ZWN1dGlvbiBvbiB0aGUgbGVhZGluZyBlZGdlLCBwYXNzXG4gIC8vIGB7bGVhZGluZzogZmFsc2V9YC4gVG8gZGlzYWJsZSBleGVjdXRpb24gb24gdGhlIHRyYWlsaW5nIGVkZ2UsIGRpdHRvLlxuICBfLnRocm90dGxlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICAgIHZhciB0aW1lb3V0LCBjb250ZXh0LCBhcmdzLCByZXN1bHQ7XG4gICAgdmFyIHByZXZpb3VzID0gMDtcbiAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcblxuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcHJldmlvdXMgPSBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlID8gMCA6IF8ubm93KCk7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICB9O1xuXG4gICAgdmFyIHRocm90dGxlZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG5vdyA9IF8ubm93KCk7XG4gICAgICBpZiAoIXByZXZpb3VzICYmIG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UpIHByZXZpb3VzID0gbm93O1xuICAgICAgdmFyIHJlbWFpbmluZyA9IHdhaXQgLSAobm93IC0gcHJldmlvdXMpO1xuICAgICAgY29udGV4dCA9IHRoaXM7XG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQpIHtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXMgPSBub3c7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxzZSkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgcmVtYWluaW5nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHRocm90dGxlZC5jYW5jZWwgPSBmdW5jdGlvbigpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIHByZXZpb3VzID0gMDtcbiAgICAgIHRpbWVvdXQgPSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgfTtcblxuICAgIHJldHVybiB0aHJvdHRsZWQ7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCBhcyBsb25nIGFzIGl0IGNvbnRpbnVlcyB0byBiZSBpbnZva2VkLCB3aWxsIG5vdFxuICAvLyBiZSB0cmlnZ2VyZWQuIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciBpdCBzdG9wcyBiZWluZyBjYWxsZWQgZm9yXG4gIC8vIE4gbWlsbGlzZWNvbmRzLiBJZiBgaW1tZWRpYXRlYCBpcyBwYXNzZWQsIHRyaWdnZXIgdGhlIGZ1bmN0aW9uIG9uIHRoZVxuICAvLyBsZWFkaW5nIGVkZ2UsIGluc3RlYWQgb2YgdGhlIHRyYWlsaW5nLlxuICBfLmRlYm91bmNlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XG4gICAgdmFyIHRpbWVvdXQsIHJlc3VsdDtcblxuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKGNvbnRleHQsIGFyZ3MpIHtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgaWYgKGFyZ3MpIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfTtcblxuICAgIHZhciBkZWJvdW5jZWQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgIGlmICh0aW1lb3V0KSBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBpZiAoaW1tZWRpYXRlKSB7XG4gICAgICAgIHZhciBjYWxsTm93ID0gIXRpbWVvdXQ7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgICAgICAgaWYgKGNhbGxOb3cpIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aW1lb3V0ID0gXy5kZWxheShsYXRlciwgd2FpdCwgdGhpcywgYXJncyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG5cbiAgICBkZWJvdW5jZWQuY2FuY2VsID0gZnVuY3Rpb24oKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGRlYm91bmNlZDtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBmdW5jdGlvbiBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIHNlY29uZCxcbiAgLy8gYWxsb3dpbmcgeW91IHRvIGFkanVzdCBhcmd1bWVudHMsIHJ1biBjb2RlIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZFxuICAvLyBjb25kaXRpb25hbGx5IGV4ZWN1dGUgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxuICBfLndyYXAgPSBmdW5jdGlvbihmdW5jLCB3cmFwcGVyKSB7XG4gICAgcmV0dXJuIF8ucGFydGlhbCh3cmFwcGVyLCBmdW5jKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgbmVnYXRlZCB2ZXJzaW9uIG9mIHRoZSBwYXNzZWQtaW4gcHJlZGljYXRlLlxuICBfLm5lZ2F0ZSA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBpcyB0aGUgY29tcG9zaXRpb24gb2YgYSBsaXN0IG9mIGZ1bmN0aW9ucywgZWFjaFxuICAvLyBjb25zdW1pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCBmb2xsb3dzLlxuICBfLmNvbXBvc2UgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2YXIgc3RhcnQgPSBhcmdzLmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGkgPSBzdGFydDtcbiAgICAgIHZhciByZXN1bHQgPSBhcmdzW3N0YXJ0XS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgd2hpbGUgKGktLSkgcmVzdWx0ID0gYXJnc1tpXS5jYWxsKHRoaXMsIHJlc3VsdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIG9uIGFuZCBhZnRlciB0aGUgTnRoIGNhbGwuXG4gIF8uYWZ0ZXIgPSBmdW5jdGlvbih0aW1lcywgZnVuYykge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgtLXRpbWVzIDwgMSkge1xuICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIHVwIHRvIChidXQgbm90IGluY2x1ZGluZykgdGhlIE50aCBjYWxsLlxuICBfLmJlZm9yZSA9IGZ1bmN0aW9uKHRpbWVzLCBmdW5jKSB7XG4gICAgdmFyIG1lbW87XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKC0tdGltZXMgPiAwKSB7XG4gICAgICAgIG1lbW8gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgICBpZiAodGltZXMgPD0gMSkgZnVuYyA9IG51bGw7XG4gICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgYXQgbW9zdCBvbmUgdGltZSwgbm8gbWF0dGVyIGhvd1xuICAvLyBvZnRlbiB5b3UgY2FsbCBpdC4gVXNlZnVsIGZvciBsYXp5IGluaXRpYWxpemF0aW9uLlxuICBfLm9uY2UgPSBfLnBhcnRpYWwoXy5iZWZvcmUsIDIpO1xuXG4gIF8ucmVzdEFyZ3VtZW50cyA9IHJlc3RBcmd1bWVudHM7XG5cbiAgLy8gT2JqZWN0IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gS2V5cyBpbiBJRSA8IDkgdGhhdCB3b24ndCBiZSBpdGVyYXRlZCBieSBgZm9yIGtleSBpbiAuLi5gIGFuZCB0aHVzIG1pc3NlZC5cbiAgdmFyIGhhc0VudW1CdWcgPSAhe3RvU3RyaW5nOiBudWxsfS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgndG9TdHJpbmcnKTtcbiAgdmFyIG5vbkVudW1lcmFibGVQcm9wcyA9IFsndmFsdWVPZicsICdpc1Byb3RvdHlwZU9mJywgJ3RvU3RyaW5nJyxcbiAgICAncHJvcGVydHlJc0VudW1lcmFibGUnLCAnaGFzT3duUHJvcGVydHknLCAndG9Mb2NhbGVTdHJpbmcnXTtcblxuICB2YXIgY29sbGVjdE5vbkVudW1Qcm9wcyA9IGZ1bmN0aW9uKG9iaiwga2V5cykge1xuICAgIHZhciBub25FbnVtSWR4ID0gbm9uRW51bWVyYWJsZVByb3BzLmxlbmd0aDtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBvYmouY29uc3RydWN0b3I7XG4gICAgdmFyIHByb3RvID0gXy5pc0Z1bmN0aW9uKGNvbnN0cnVjdG9yKSAmJiBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgfHwgT2JqUHJvdG87XG5cbiAgICAvLyBDb25zdHJ1Y3RvciBpcyBhIHNwZWNpYWwgY2FzZS5cbiAgICB2YXIgcHJvcCA9ICdjb25zdHJ1Y3Rvcic7XG4gICAgaWYgKGhhcyhvYmosIHByb3ApICYmICFfLmNvbnRhaW5zKGtleXMsIHByb3ApKSBrZXlzLnB1c2gocHJvcCk7XG5cbiAgICB3aGlsZSAobm9uRW51bUlkeC0tKSB7XG4gICAgICBwcm9wID0gbm9uRW51bWVyYWJsZVByb3BzW25vbkVudW1JZHhdO1xuICAgICAgaWYgKHByb3AgaW4gb2JqICYmIG9ialtwcm9wXSAhPT0gcHJvdG9bcHJvcF0gJiYgIV8uY29udGFpbnMoa2V5cywgcHJvcCkpIHtcbiAgICAgICAga2V5cy5wdXNoKHByb3ApO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3Mgb3duIHByb3BlcnRpZXMuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBPYmplY3Qua2V5c2AuXG4gIF8ua2V5cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gW107XG4gICAgaWYgKG5hdGl2ZUtleXMpIHJldHVybiBuYXRpdmVLZXlzKG9iaik7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBpZiAoaGFzKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gICAgLy8gQWhlbSwgSUUgPCA5LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgYWxsIHRoZSBwcm9wZXJ0eSBuYW1lcyBvZiBhbiBvYmplY3QuXG4gIF8uYWxsS2V5cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gW107XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBrZXlzLnB1c2goa2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5cztcbiAgfTtcblxuICAvLyBSZXRyaWV2ZSB0aGUgdmFsdWVzIG9mIGFuIG9iamVjdCdzIHByb3BlcnRpZXMuXG4gIF8udmFsdWVzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIHZhbHVlcyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWVzW2ldID0gb2JqW2tleXNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9O1xuXG4gIC8vIFJldHVybnMgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxlbWVudCBvZiB0aGUgb2JqZWN0LlxuICAvLyBJbiBjb250cmFzdCB0byBfLm1hcCBpdCByZXR1cm5zIGFuIG9iamVjdC5cbiAgXy5tYXBPYmplY3QgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0ga2V5cy5sZW5ndGgsXG4gICAgICAgIHJlc3VsdHMgPSB7fTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgcmVzdWx0c1tjdXJyZW50S2V5XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gQ29udmVydCBhbiBvYmplY3QgaW50byBhIGxpc3Qgb2YgYFtrZXksIHZhbHVlXWAgcGFpcnMuXG4gIC8vIFRoZSBvcHBvc2l0ZSBvZiBfLm9iamVjdC5cbiAgXy5wYWlycyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBwYWlycyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcGFpcnNbaV0gPSBba2V5c1tpXSwgb2JqW2tleXNbaV1dXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhaXJzO1xuICB9O1xuXG4gIC8vIEludmVydCB0aGUga2V5cyBhbmQgdmFsdWVzIG9mIGFuIG9iamVjdC4gVGhlIHZhbHVlcyBtdXN0IGJlIHNlcmlhbGl6YWJsZS5cbiAgXy5pbnZlcnQgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W29ialtrZXlzW2ldXV0gPSBrZXlzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHNvcnRlZCBsaXN0IG9mIHRoZSBmdW5jdGlvbiBuYW1lcyBhdmFpbGFibGUgb24gdGhlIG9iamVjdC5cbiAgLy8gQWxpYXNlZCBhcyBgbWV0aG9kc2AuXG4gIF8uZnVuY3Rpb25zID0gXy5tZXRob2RzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIG5hbWVzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihvYmpba2V5XSkpIG5hbWVzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWVzLnNvcnQoKTtcbiAgfTtcblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYXNzaWduZXIgZnVuY3Rpb25zLlxuICB2YXIgY3JlYXRlQXNzaWduZXIgPSBmdW5jdGlvbihrZXlzRnVuYywgZGVmYXVsdHMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIGlmIChkZWZhdWx0cykgb2JqID0gT2JqZWN0KG9iaik7XG4gICAgICBpZiAobGVuZ3RoIDwgMiB8fCBvYmogPT0gbnVsbCkgcmV0dXJuIG9iajtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF0sXG4gICAgICAgICAgICBrZXlzID0ga2V5c0Z1bmMoc291cmNlKSxcbiAgICAgICAgICAgIGwgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAoIWRlZmF1bHRzIHx8IG9ialtrZXldID09PSB2b2lkIDApIG9ialtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfTtcbiAgfTtcblxuICAvLyBFeHRlbmQgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIHByb3BlcnRpZXMgaW4gcGFzc2VkLWluIG9iamVjdChzKS5cbiAgXy5leHRlbmQgPSBjcmVhdGVBc3NpZ25lcihfLmFsbEtleXMpO1xuXG4gIC8vIEFzc2lnbnMgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIG93biBwcm9wZXJ0aWVzIGluIHRoZSBwYXNzZWQtaW4gb2JqZWN0KHMpLlxuICAvLyAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnbilcbiAgXy5leHRlbmRPd24gPSBfLmFzc2lnbiA9IGNyZWF0ZUFzc2lnbmVyKF8ua2V5cyk7XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3Qga2V5IG9uIGFuIG9iamVjdCB0aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0LlxuICBfLmZpbmRLZXkgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKSwga2V5O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpba2V5XSwga2V5LCBvYmopKSByZXR1cm4ga2V5O1xuICAgIH1cbiAgfTtcblxuICAvLyBJbnRlcm5hbCBwaWNrIGhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgYG9iamAgaGFzIGtleSBga2V5YC5cbiAgdmFyIGtleUluT2JqID0gZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqKSB7XG4gICAgcmV0dXJuIGtleSBpbiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IG9ubHkgY29udGFpbmluZyB0aGUgd2hpdGVsaXN0ZWQgcHJvcGVydGllcy5cbiAgXy5waWNrID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihvYmosIGtleXMpIHtcbiAgICB2YXIgcmVzdWx0ID0ge30sIGl0ZXJhdGVlID0ga2V5c1swXTtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiByZXN1bHQ7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihpdGVyYXRlZSkpIHtcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwga2V5c1sxXSk7XG4gICAgICBrZXlzID0gXy5hbGxLZXlzKG9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVlID0ga2V5SW5PYmo7XG4gICAgICBrZXlzID0gZmxhdHRlbihrZXlzLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgb2JqID0gT2JqZWN0KG9iaik7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgaWYgKGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9iaikpIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuXG4gIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCB3aXRob3V0IHRoZSBibGFja2xpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLm9taXQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwga2V5cykge1xuICAgIHZhciBpdGVyYXRlZSA9IGtleXNbMF0sIGNvbnRleHQ7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihpdGVyYXRlZSkpIHtcbiAgICAgIGl0ZXJhdGVlID0gXy5uZWdhdGUoaXRlcmF0ZWUpO1xuICAgICAgaWYgKGtleXMubGVuZ3RoID4gMSkgY29udGV4dCA9IGtleXNbMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleXMgPSBfLm1hcChmbGF0dGVuKGtleXMsIGZhbHNlLCBmYWxzZSksIFN0cmluZyk7XG4gICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKGtleXMsIGtleSk7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gXy5waWNrKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpO1xuICB9KTtcblxuICAvLyBGaWxsIGluIGEgZ2l2ZW4gb2JqZWN0IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzLlxuICBfLmRlZmF1bHRzID0gY3JlYXRlQXNzaWduZXIoXy5hbGxLZXlzLCB0cnVlKTtcblxuICAvLyBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIGdpdmVuIHByb3RvdHlwZSBvYmplY3QuXG4gIC8vIElmIGFkZGl0aW9uYWwgcHJvcGVydGllcyBhcmUgcHJvdmlkZWQgdGhlbiB0aGV5IHdpbGwgYmUgYWRkZWQgdG8gdGhlXG4gIC8vIGNyZWF0ZWQgb2JqZWN0LlxuICBfLmNyZWF0ZSA9IGZ1bmN0aW9uKHByb3RvdHlwZSwgcHJvcHMpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUNyZWF0ZShwcm90b3R5cGUpO1xuICAgIGlmIChwcm9wcykgXy5leHRlbmRPd24ocmVzdWx0LCBwcm9wcyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSAoc2hhbGxvdy1jbG9uZWQpIGR1cGxpY2F0ZSBvZiBhbiBvYmplY3QuXG4gIF8uY2xvbmUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajtcbiAgICByZXR1cm4gXy5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF8uZXh0ZW5kKHt9LCBvYmopO1xuICB9O1xuXG4gIC8vIEludm9rZXMgaW50ZXJjZXB0b3Igd2l0aCB0aGUgb2JqLCBhbmQgdGhlbiByZXR1cm5zIG9iai5cbiAgLy8gVGhlIHByaW1hcnkgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBcInRhcCBpbnRvXCIgYSBtZXRob2QgY2hhaW4sIGluXG4gIC8vIG9yZGVyIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBpbnRlcm1lZGlhdGUgcmVzdWx0cyB3aXRoaW4gdGhlIGNoYWluLlxuICBfLnRhcCA9IGZ1bmN0aW9uKG9iaiwgaW50ZXJjZXB0b3IpIHtcbiAgICBpbnRlcmNlcHRvcihvYmopO1xuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2YgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8uaXNNYXRjaCA9IGZ1bmN0aW9uKG9iamVjdCwgYXR0cnMpIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhhdHRycyksIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuICFsZW5ndGg7XG4gICAgdmFyIG9iaiA9IE9iamVjdChvYmplY3QpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKGF0dHJzW2tleV0gIT09IG9ialtrZXldIHx8ICEoa2V5IGluIG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cblxuICAvLyBJbnRlcm5hbCByZWN1cnNpdmUgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgYGlzRXF1YWxgLlxuICB2YXIgZXEsIGRlZXBFcTtcbiAgZXEgPSBmdW5jdGlvbihhLCBiLCBhU3RhY2ssIGJTdGFjaykge1xuICAgIC8vIElkZW50aWNhbCBvYmplY3RzIGFyZSBlcXVhbC4gYDAgPT09IC0wYCwgYnV0IHRoZXkgYXJlbid0IGlkZW50aWNhbC5cbiAgICAvLyBTZWUgdGhlIFtIYXJtb255IGBlZ2FsYCBwcm9wb3NhbF0oaHR0cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTplZ2FsKS5cbiAgICBpZiAoYSA9PT0gYikgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT09IDEgLyBiO1xuICAgIC8vIGBudWxsYCBvciBgdW5kZWZpbmVkYCBvbmx5IGVxdWFsIHRvIGl0c2VsZiAoc3RyaWN0IGNvbXBhcmlzb24pLlxuICAgIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2ZS5cbiAgICBpZiAoYSAhPT0gYSkgcmV0dXJuIGIgIT09IGI7XG4gICAgLy8gRXhoYXVzdCBwcmltaXRpdmUgY2hlY2tzXG4gICAgdmFyIHR5cGUgPSB0eXBlb2YgYTtcbiAgICBpZiAodHlwZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBkZWVwRXEoYSwgYiwgYVN0YWNrLCBiU3RhY2spO1xuICB9O1xuXG4gIC8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBgaXNFcXVhbGAuXG4gIGRlZXBFcSA9IGZ1bmN0aW9uKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7XG4gICAgLy8gVW53cmFwIGFueSB3cmFwcGVkIG9iamVjdHMuXG4gICAgaWYgKGEgaW5zdGFuY2VvZiBfKSBhID0gYS5fd3JhcHBlZDtcbiAgICBpZiAoYiBpbnN0YW5jZW9mIF8pIGIgPSBiLl93cmFwcGVkO1xuICAgIC8vIENvbXBhcmUgYFtbQ2xhc3NdXWAgbmFtZXMuXG4gICAgdmFyIGNsYXNzTmFtZSA9IHRvU3RyaW5nLmNhbGwoYSk7XG4gICAgaWYgKGNsYXNzTmFtZSAhPT0gdG9TdHJpbmcuY2FsbChiKSkgcmV0dXJuIGZhbHNlO1xuICAgIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4gICAgICAvLyBTdHJpbmdzLCBudW1iZXJzLCByZWd1bGFyIGV4cHJlc3Npb25zLCBkYXRlcywgYW5kIGJvb2xlYW5zIGFyZSBjb21wYXJlZCBieSB2YWx1ZS5cbiAgICAgIGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XG4gICAgICAvLyBSZWdFeHBzIGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MgZm9yIGNvbXBhcmlzb24gKE5vdGU6ICcnICsgL2EvaSA9PT0gJy9hL2knKVxuICAgICAgY2FzZSAnW29iamVjdCBTdHJpbmddJzpcbiAgICAgICAgLy8gUHJpbWl0aXZlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBvYmplY3Qgd3JhcHBlcnMgYXJlIGVxdWl2YWxlbnQ7IHRodXMsIGBcIjVcImAgaXNcbiAgICAgICAgLy8gZXF1aXZhbGVudCB0byBgbmV3IFN0cmluZyhcIjVcIilgLlxuICAgICAgICByZXR1cm4gJycgKyBhID09PSAnJyArIGI7XG4gICAgICBjYXNlICdbb2JqZWN0IE51bWJlcl0nOlxuICAgICAgICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICAgICAgICAvLyBPYmplY3QoTmFOKSBpcyBlcXVpdmFsZW50IHRvIE5hTi5cbiAgICAgICAgaWYgKCthICE9PSArYSkgcmV0dXJuICtiICE9PSArYjtcbiAgICAgICAgLy8gQW4gYGVnYWxgIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkIGZvciBvdGhlciBudW1lcmljIHZhbHVlcy5cbiAgICAgICAgcmV0dXJuICthID09PSAwID8gMSAvICthID09PSAxIC8gYiA6ICthID09PSArYjtcbiAgICAgIGNhc2UgJ1tvYmplY3QgRGF0ZV0nOlxuICAgICAgY2FzZSAnW29iamVjdCBCb29sZWFuXSc6XG4gICAgICAgIC8vIENvZXJjZSBkYXRlcyBhbmQgYm9vbGVhbnMgdG8gbnVtZXJpYyBwcmltaXRpdmUgdmFsdWVzLiBEYXRlcyBhcmUgY29tcGFyZWQgYnkgdGhlaXJcbiAgICAgICAgLy8gbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zLiBOb3RlIHRoYXQgaW52YWxpZCBkYXRlcyB3aXRoIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9uc1xuICAgICAgICAvLyBvZiBgTmFOYCBhcmUgbm90IGVxdWl2YWxlbnQuXG4gICAgICAgIHJldHVybiArYSA9PT0gK2I7XG4gICAgICBjYXNlICdbb2JqZWN0IFN5bWJvbF0nOlxuICAgICAgICByZXR1cm4gU3ltYm9sUHJvdG8udmFsdWVPZi5jYWxsKGEpID09PSBTeW1ib2xQcm90by52YWx1ZU9mLmNhbGwoYik7XG4gICAgfVxuXG4gICAgdmFyIGFyZUFycmF5cyA9IGNsYXNzTmFtZSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICBpZiAoIWFyZUFycmF5cykge1xuICAgICAgaWYgKHR5cGVvZiBhICE9ICdvYmplY3QnIHx8IHR5cGVvZiBiICE9ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIE9iamVjdHMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1aXZhbGVudCwgYnV0IGBPYmplY3RgcyBvciBgQXJyYXlgc1xuICAgICAgLy8gZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFyZS5cbiAgICAgIHZhciBhQ3RvciA9IGEuY29uc3RydWN0b3IsIGJDdG9yID0gYi5jb25zdHJ1Y3RvcjtcbiAgICAgIGlmIChhQ3RvciAhPT0gYkN0b3IgJiYgIShfLmlzRnVuY3Rpb24oYUN0b3IpICYmIGFDdG9yIGluc3RhbmNlb2YgYUN0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmlzRnVuY3Rpb24oYkN0b3IpICYmIGJDdG9yIGluc3RhbmNlb2YgYkN0b3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICYmICgnY29uc3RydWN0b3InIGluIGEgJiYgJ2NvbnN0cnVjdG9yJyBpbiBiKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFzc3VtZSBlcXVhbGl0eSBmb3IgY3ljbGljIHN0cnVjdHVyZXMuIFRoZSBhbGdvcml0aG0gZm9yIGRldGVjdGluZyBjeWNsaWNcbiAgICAvLyBzdHJ1Y3R1cmVzIGlzIGFkYXB0ZWQgZnJvbSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLCBhYnN0cmFjdCBvcGVyYXRpb24gYEpPYC5cblxuICAgIC8vIEluaXRpYWxpemluZyBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAvLyBJdCdzIGRvbmUgaGVyZSBzaW5jZSB3ZSBvbmx5IG5lZWQgdGhlbSBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzIGNvbXBhcmlzb24uXG4gICAgYVN0YWNrID0gYVN0YWNrIHx8IFtdO1xuICAgIGJTdGFjayA9IGJTdGFjayB8fCBbXTtcbiAgICB2YXIgbGVuZ3RoID0gYVN0YWNrLmxlbmd0aDtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIC8vIExpbmVhciBzZWFyY2guIFBlcmZvcm1hbmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZlxuICAgICAgLy8gdW5pcXVlIG5lc3RlZCBzdHJ1Y3R1cmVzLlxuICAgICAgaWYgKGFTdGFja1tsZW5ndGhdID09PSBhKSByZXR1cm4gYlN0YWNrW2xlbmd0aF0gPT09IGI7XG4gICAgfVxuXG4gICAgLy8gQWRkIHRoZSBmaXJzdCBvYmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIGFTdGFjay5wdXNoKGEpO1xuICAgIGJTdGFjay5wdXNoKGIpO1xuXG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgaWYgKGFyZUFycmF5cykge1xuICAgICAgLy8gQ29tcGFyZSBhcnJheSBsZW5ndGhzIHRvIGRldGVybWluZSBpZiBhIGRlZXAgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkuXG4gICAgICBsZW5ndGggPSBhLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgdGhlIGNvbnRlbnRzLCBpZ25vcmluZyBub24tbnVtZXJpYyBwcm9wZXJ0aWVzLlxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIGlmICghZXEoYVtsZW5ndGhdLCBiW2xlbmd0aF0sIGFTdGFjaywgYlN0YWNrKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgb2JqZWN0cy5cbiAgICAgIHZhciBrZXlzID0gXy5rZXlzKGEpLCBrZXk7XG4gICAgICBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICAgIC8vIEVuc3VyZSB0aGF0IGJvdGggb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIG51bWJlciBvZiBwcm9wZXJ0aWVzIGJlZm9yZSBjb21wYXJpbmcgZGVlcCBlcXVhbGl0eS5cbiAgICAgIGlmIChfLmtleXMoYikubGVuZ3RoICE9PSBsZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICAvLyBEZWVwIGNvbXBhcmUgZWFjaCBtZW1iZXJcbiAgICAgICAga2V5ID0ga2V5c1tsZW5ndGhdO1xuICAgICAgICBpZiAoIShoYXMoYiwga2V5KSAmJiBlcShhW2tleV0sIGJba2V5XSwgYVN0YWNrLCBiU3RhY2spKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBSZW1vdmUgdGhlIGZpcnN0IG9iamVjdCBmcm9tIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3RhY2sucG9wKCk7XG4gICAgYlN0YWNrLnBvcCgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIFBlcmZvcm0gYSBkZWVwIGNvbXBhcmlzb24gdG8gY2hlY2sgaWYgdHdvIG9iamVjdHMgYXJlIGVxdWFsLlxuICBfLmlzRXF1YWwgPSBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGVxKGEsIGIpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gYXJyYXksIHN0cmluZywgb3Igb2JqZWN0IGVtcHR5P1xuICAvLyBBbiBcImVtcHR5XCIgb2JqZWN0IGhhcyBubyBlbnVtZXJhYmxlIG93bi1wcm9wZXJ0aWVzLlxuICBfLmlzRW1wdHkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopICYmIChfLmlzQXJyYXkob2JqKSB8fCBfLmlzU3RyaW5nKG9iaikgfHwgXy5pc0FyZ3VtZW50cyhvYmopKSkgcmV0dXJuIG9iai5sZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIF8ua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgRE9NIGVsZW1lbnQ/XG4gIF8uaXNFbGVtZW50ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgPT09IDEpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYW4gYXJyYXk/XG4gIC8vIERlbGVnYXRlcyB0byBFQ01BNSdzIG5hdGl2ZSBBcnJheS5pc0FycmF5XG4gIF8uaXNBcnJheSA9IG5hdGl2ZUlzQXJyYXkgfHwgZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIGFuIG9iamVjdD9cbiAgXy5pc09iamVjdCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgfTtcblxuICAvLyBBZGQgc29tZSBpc1R5cGUgbWV0aG9kczogaXNBcmd1bWVudHMsIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBpc051bWJlciwgaXNEYXRlLCBpc1JlZ0V4cCwgaXNFcnJvciwgaXNNYXAsIGlzV2Vha01hcCwgaXNTZXQsIGlzV2Vha1NldC5cbiAgXy5lYWNoKFsnQXJndW1lbnRzJywgJ0Z1bmN0aW9uJywgJ1N0cmluZycsICdOdW1iZXInLCAnRGF0ZScsICdSZWdFeHAnLCAnRXJyb3InLCAnU3ltYm9sJywgJ01hcCcsICdXZWFrTWFwJywgJ1NldCcsICdXZWFrU2V0J10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBfWydpcycgKyBuYW1lXSA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgJyArIG5hbWUgKyAnXSc7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRGVmaW5lIGEgZmFsbGJhY2sgdmVyc2lvbiBvZiB0aGUgbWV0aG9kIGluIGJyb3dzZXJzIChhaGVtLCBJRSA8IDkpLCB3aGVyZVxuICAvLyB0aGVyZSBpc24ndCBhbnkgaW5zcGVjdGFibGUgXCJBcmd1bWVudHNcIiB0eXBlLlxuICBpZiAoIV8uaXNBcmd1bWVudHMoYXJndW1lbnRzKSkge1xuICAgIF8uaXNBcmd1bWVudHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBoYXMob2JqLCAnY2FsbGVlJyk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIE9wdGltaXplIGBpc0Z1bmN0aW9uYCBpZiBhcHByb3ByaWF0ZS4gV29yayBhcm91bmQgc29tZSB0eXBlb2YgYnVncyBpbiBvbGQgdjgsXG4gIC8vIElFIDExICgjMTYyMSksIFNhZmFyaSA4ICgjMTkyOSksIGFuZCBQaGFudG9tSlMgKCMyMjM2KS5cbiAgdmFyIG5vZGVsaXN0ID0gcm9vdC5kb2N1bWVudCAmJiByb290LmRvY3VtZW50LmNoaWxkTm9kZXM7XG4gIGlmICh0eXBlb2YgLy4vICE9ICdmdW5jdGlvbicgJiYgdHlwZW9mIEludDhBcnJheSAhPSAnb2JqZWN0JyAmJiB0eXBlb2Ygbm9kZWxpc3QgIT0gJ2Z1bmN0aW9uJykge1xuICAgIF8uaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT0gJ2Z1bmN0aW9uJyB8fCBmYWxzZTtcbiAgICB9O1xuICB9XG5cbiAgLy8gSXMgYSBnaXZlbiBvYmplY3QgYSBmaW5pdGUgbnVtYmVyP1xuICBfLmlzRmluaXRlID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuICFfLmlzU3ltYm9sKG9iaikgJiYgaXNGaW5pdGUob2JqKSAmJiAhaXNOYU4ocGFyc2VGbG9hdChvYmopKTtcbiAgfTtcblxuICAvLyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYE5hTmA/XG4gIF8uaXNOYU4gPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gXy5pc051bWJlcihvYmopICYmIGlzTmFOKG9iaik7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIGJvb2xlYW4/XG4gIF8uaXNCb29sZWFuID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdHJ1ZSB8fCBvYmogPT09IGZhbHNlIHx8IHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQm9vbGVhbl0nO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgZXF1YWwgdG8gbnVsbD9cbiAgXy5pc051bGwgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSBudWxsO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgdW5kZWZpbmVkP1xuICBfLmlzVW5kZWZpbmVkID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdm9pZCAwO1xuICB9O1xuXG4gIC8vIFNob3J0Y3V0IGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gcHJvcGVydHkgZGlyZWN0bHlcbiAgLy8gb24gaXRzZWxmIChpbiBvdGhlciB3b3Jkcywgbm90IG9uIGEgcHJvdG90eXBlKS5cbiAgXy5oYXMgPSBmdW5jdGlvbihvYmosIHBhdGgpIHtcbiAgICBpZiAoIV8uaXNBcnJheShwYXRoKSkge1xuICAgICAgcmV0dXJuIGhhcyhvYmosIHBhdGgpO1xuICAgIH1cbiAgICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHBhdGhbaV07XG4gICAgICBpZiAob2JqID09IG51bGwgfHwgIWhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIG9iaiA9IG9ialtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gISFsZW5ndGg7XG4gIH07XG5cbiAgLy8gVXRpbGl0eSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBSdW4gVW5kZXJzY29yZS5qcyBpbiAqbm9Db25mbGljdCogbW9kZSwgcmV0dXJuaW5nIHRoZSBgX2AgdmFyaWFibGUgdG8gaXRzXG4gIC8vIHByZXZpb3VzIG93bmVyLiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdC5cbiAgXy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgcm9vdC5fID0gcHJldmlvdXNVbmRlcnNjb3JlO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIEtlZXAgdGhlIGlkZW50aXR5IGZ1bmN0aW9uIGFyb3VuZCBmb3IgZGVmYXVsdCBpdGVyYXRlZXMuXG4gIF8uaWRlbnRpdHkgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcblxuICAvLyBQcmVkaWNhdGUtZ2VuZXJhdGluZyBmdW5jdGlvbnMuIE9mdGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuXG4gIF8uY29uc3RhbnQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICB9O1xuXG4gIF8ubm9vcCA9IGZ1bmN0aW9uKCl7fTtcblxuICAvLyBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBwYXNzZWQgYW4gb2JqZWN0LCB3aWxsIHRyYXZlcnNlIHRoYXQgb2JqZWN04oCZc1xuICAvLyBwcm9wZXJ0aWVzIGRvd24gdGhlIGdpdmVuIGBwYXRoYCwgc3BlY2lmaWVkIGFzIGFuIGFycmF5IG9mIGtleXMgb3IgaW5kZXhlcy5cbiAgXy5wcm9wZXJ0eSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICBpZiAoIV8uaXNBcnJheShwYXRoKSkge1xuICAgICAgcmV0dXJuIHNoYWxsb3dQcm9wZXJ0eShwYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIGRlZXBHZXQob2JqLCBwYXRoKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEdlbmVyYXRlcyBhIGZ1bmN0aW9uIGZvciBhIGdpdmVuIG9iamVjdCB0aGF0IHJldHVybnMgYSBnaXZlbiBwcm9wZXJ0eS5cbiAgXy5wcm9wZXJ0eU9mID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKXt9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24ocGF0aCkge1xuICAgICAgcmV0dXJuICFfLmlzQXJyYXkocGF0aCkgPyBvYmpbcGF0aF0gOiBkZWVwR2V0KG9iaiwgcGF0aCk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgcHJlZGljYXRlIGZvciBjaGVja2luZyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2ZcbiAgLy8gYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8ubWF0Y2hlciA9IF8ubWF0Y2hlcyA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gICAgYXR0cnMgPSBfLmV4dGVuZE93bih7fSwgYXR0cnMpO1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBfLmlzTWF0Y2gob2JqLCBhdHRycyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSdW4gYSBmdW5jdGlvbiAqKm4qKiB0aW1lcy5cbiAgXy50aW1lcyA9IGZ1bmN0aW9uKG4sIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIGFjY3VtID0gQXJyYXkoTWF0aC5tYXgoMCwgbikpO1xuICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgMSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIGFjY3VtW2ldID0gaXRlcmF0ZWUoaSk7XG4gICAgcmV0dXJuIGFjY3VtO1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXggKGluY2x1c2l2ZSkuXG4gIF8ucmFuZG9tID0gZnVuY3Rpb24obWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID09IG51bGwpIHtcbiAgICAgIG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuICAgIHJldHVybiBtaW4gKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpO1xuICB9O1xuXG4gIC8vIEEgKHBvc3NpYmx5IGZhc3Rlcikgd2F5IHRvIGdldCB0aGUgY3VycmVudCB0aW1lc3RhbXAgYXMgYW4gaW50ZWdlci5cbiAgXy5ub3cgPSBEYXRlLm5vdyB8fCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH07XG5cbiAgLy8gTGlzdCBvZiBIVE1MIGVudGl0aWVzIGZvciBlc2NhcGluZy5cbiAgdmFyIGVzY2FwZU1hcCA9IHtcbiAgICAnJic6ICcmYW1wOycsXG4gICAgJzwnOiAnJmx0OycsXG4gICAgJz4nOiAnJmd0OycsXG4gICAgJ1wiJzogJyZxdW90OycsXG4gICAgXCInXCI6ICcmI3gyNzsnLFxuICAgICdgJzogJyYjeDYwOydcbiAgfTtcbiAgdmFyIHVuZXNjYXBlTWFwID0gXy5pbnZlcnQoZXNjYXBlTWFwKTtcblxuICAvLyBGdW5jdGlvbnMgZm9yIGVzY2FwaW5nIGFuZCB1bmVzY2FwaW5nIHN0cmluZ3MgdG8vZnJvbSBIVE1MIGludGVycG9sYXRpb24uXG4gIHZhciBjcmVhdGVFc2NhcGVyID0gZnVuY3Rpb24obWFwKSB7XG4gICAgdmFyIGVzY2FwZXIgPSBmdW5jdGlvbihtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hcFttYXRjaF07XG4gICAgfTtcbiAgICAvLyBSZWdleGVzIGZvciBpZGVudGlmeWluZyBhIGtleSB0aGF0IG5lZWRzIHRvIGJlIGVzY2FwZWQuXG4gICAgdmFyIHNvdXJjZSA9ICcoPzonICsgXy5rZXlzKG1hcCkuam9pbignfCcpICsgJyknO1xuICAgIHZhciB0ZXN0UmVnZXhwID0gUmVnRXhwKHNvdXJjZSk7XG4gICAgdmFyIHJlcGxhY2VSZWdleHAgPSBSZWdFeHAoc291cmNlLCAnZycpO1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHN0cmluZyA9PSBudWxsID8gJycgOiAnJyArIHN0cmluZztcbiAgICAgIHJldHVybiB0ZXN0UmVnZXhwLnRlc3Qoc3RyaW5nKSA/IHN0cmluZy5yZXBsYWNlKHJlcGxhY2VSZWdleHAsIGVzY2FwZXIpIDogc3RyaW5nO1xuICAgIH07XG4gIH07XG4gIF8uZXNjYXBlID0gY3JlYXRlRXNjYXBlcihlc2NhcGVNYXApO1xuICBfLnVuZXNjYXBlID0gY3JlYXRlRXNjYXBlcih1bmVzY2FwZU1hcCk7XG5cbiAgLy8gVHJhdmVyc2VzIHRoZSBjaGlsZHJlbiBvZiBgb2JqYCBhbG9uZyBgcGF0aGAuIElmIGEgY2hpbGQgaXMgYSBmdW5jdGlvbiwgaXRcbiAgLy8gaXMgaW52b2tlZCB3aXRoIGl0cyBwYXJlbnQgYXMgY29udGV4dC4gUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpbmFsXG4gIC8vIGNoaWxkLCBvciBgZmFsbGJhY2tgIGlmIGFueSBjaGlsZCBpcyB1bmRlZmluZWQuXG4gIF8ucmVzdWx0ID0gZnVuY3Rpb24ob2JqLCBwYXRoLCBmYWxsYmFjaykge1xuICAgIGlmICghXy5pc0FycmF5KHBhdGgpKSBwYXRoID0gW3BhdGhdO1xuICAgIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDtcbiAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgcmV0dXJuIF8uaXNGdW5jdGlvbihmYWxsYmFjaykgPyBmYWxsYmFjay5jYWxsKG9iaikgOiBmYWxsYmFjaztcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3AgPSBvYmogPT0gbnVsbCA/IHZvaWQgMCA6IG9ialtwYXRoW2ldXTtcbiAgICAgIGlmIChwcm9wID09PSB2b2lkIDApIHtcbiAgICAgICAgcHJvcCA9IGZhbGxiYWNrO1xuICAgICAgICBpID0gbGVuZ3RoOyAvLyBFbnN1cmUgd2UgZG9uJ3QgY29udGludWUgaXRlcmF0aW5nLlxuICAgICAgfVxuICAgICAgb2JqID0gXy5pc0Z1bmN0aW9uKHByb3ApID8gcHJvcC5jYWxsKG9iaikgOiBwcm9wO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGludGVnZXIgaWQgKHVuaXF1ZSB3aXRoaW4gdGhlIGVudGlyZSBjbGllbnQgc2Vzc2lvbikuXG4gIC8vIFVzZWZ1bCBmb3IgdGVtcG9yYXJ5IERPTSBpZHMuXG4gIHZhciBpZENvdW50ZXIgPSAwO1xuICBfLnVuaXF1ZUlkID0gZnVuY3Rpb24ocHJlZml4KSB7XG4gICAgdmFyIGlkID0gKytpZENvdW50ZXIgKyAnJztcbiAgICByZXR1cm4gcHJlZml4ID8gcHJlZml4ICsgaWQgOiBpZDtcbiAgfTtcblxuICAvLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRlbGltaXRlcnMsIGNoYW5nZSB0aGVcbiAgLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICBfLnRlbXBsYXRlU2V0dGluZ3MgPSB7XG4gICAgZXZhbHVhdGU6IC88JShbXFxzXFxTXSs/KSU+L2csXG4gICAgaW50ZXJwb2xhdGU6IC88JT0oW1xcc1xcU10rPyklPi9nLFxuICAgIGVzY2FwZTogLzwlLShbXFxzXFxTXSs/KSU+L2dcbiAgfTtcblxuICAvLyBXaGVuIGN1c3RvbWl6aW5nIGB0ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuXG4gIC8vIGludGVycG9sYXRpb24sIGV2YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25lIHRoYXQgaXNcbiAgLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2guXG4gIHZhciBub01hdGNoID0gLyguKV4vO1xuXG4gIC8vIENlcnRhaW4gY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28gdGhhdCB0aGV5IGNhbiBiZSBwdXQgaW50byBhXG4gIC8vIHN0cmluZyBsaXRlcmFsLlxuICB2YXIgZXNjYXBlcyA9IHtcbiAgICBcIidcIjogXCInXCIsXG4gICAgJ1xcXFwnOiAnXFxcXCcsXG4gICAgJ1xccic6ICdyJyxcbiAgICAnXFxuJzogJ24nLFxuICAgICdcXHUyMDI4JzogJ3UyMDI4JyxcbiAgICAnXFx1MjAyOSc6ICd1MjAyOSdcbiAgfTtcblxuICB2YXIgZXNjYXBlUmVnRXhwID0gL1xcXFx8J3xcXHJ8XFxufFxcdTIwMjh8XFx1MjAyOS9nO1xuXG4gIHZhciBlc2NhcGVDaGFyID0gZnVuY3Rpb24obWF0Y2gpIHtcbiAgICByZXR1cm4gJ1xcXFwnICsgZXNjYXBlc1ttYXRjaF07XG4gIH07XG5cbiAgLy8gSmF2YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi5cbiAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLFxuICAvLyBhbmQgY29ycmVjdGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS5cbiAgLy8gTkI6IGBvbGRTZXR0aW5nc2Agb25seSBleGlzdHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICBfLnRlbXBsYXRlID0gZnVuY3Rpb24odGV4dCwgc2V0dGluZ3MsIG9sZFNldHRpbmdzKSB7XG4gICAgaWYgKCFzZXR0aW5ncyAmJiBvbGRTZXR0aW5ncykgc2V0dGluZ3MgPSBvbGRTZXR0aW5ncztcbiAgICBzZXR0aW5ncyA9IF8uZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfLnRlbXBsYXRlU2V0dGluZ3MpO1xuXG4gICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uXG4gICAgdmFyIG1hdGNoZXIgPSBSZWdFeHAoW1xuICAgICAgKHNldHRpbmdzLmVzY2FwZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmV2YWx1YXRlIHx8IG5vTWF0Y2gpLnNvdXJjZVxuICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTtcblxuICAgIC8vIENvbXBpbGUgdGhlIHRlbXBsYXRlIHNvdXJjZSwgZXNjYXBpbmcgc3RyaW5nIGxpdGVyYWxzIGFwcHJvcHJpYXRlbHkuXG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgc291cmNlID0gXCJfX3ArPSdcIjtcbiAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHtcbiAgICAgIHNvdXJjZSArPSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UoZXNjYXBlUmVnRXhwLCBlc2NhcGVDaGFyKTtcbiAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4gICAgICBpZiAoZXNjYXBlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgZXNjYXBlICsgXCIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcXG4nXCI7XG4gICAgICB9IGVsc2UgaWYgKGludGVycG9sYXRlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgaW50ZXJwb2xhdGUgKyBcIikpPT1udWxsPycnOl9fdCkrXFxuJ1wiO1xuICAgICAgfSBlbHNlIGlmIChldmFsdWF0ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInO1xcblwiICsgZXZhbHVhdGUgKyBcIlxcbl9fcCs9J1wiO1xuICAgICAgfVxuXG4gICAgICAvLyBBZG9iZSBWTXMgbmVlZCB0aGUgbWF0Y2ggcmV0dXJuZWQgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBvZmZzZXQuXG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfSk7XG4gICAgc291cmNlICs9IFwiJztcXG5cIjtcblxuICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuXG4gICAgaWYgKCFzZXR0aW5ncy52YXJpYWJsZSkgc291cmNlID0gJ3dpdGgob2JqfHx7fSl7XFxuJyArIHNvdXJjZSArICd9XFxuJztcblxuICAgIHNvdXJjZSA9IFwidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLFwiICtcbiAgICAgIFwicHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcXG5cIiArXG4gICAgICBzb3VyY2UgKyAncmV0dXJuIF9fcDtcXG4nO1xuXG4gICAgdmFyIHJlbmRlcjtcbiAgICB0cnkge1xuICAgICAgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBfKTtcbiAgICB9O1xuXG4gICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLlxuICAgIHZhciBhcmd1bWVudCA9IHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonO1xuICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsgYXJndW1lbnQgKyAnKXtcXG4nICsgc291cmNlICsgJ30nO1xuXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9O1xuXG4gIC8vIEFkZCBhIFwiY2hhaW5cIiBmdW5jdGlvbi4gU3RhcnQgY2hhaW5pbmcgYSB3cmFwcGVkIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLmNoYWluID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGluc3RhbmNlID0gXyhvYmopO1xuICAgIGluc3RhbmNlLl9jaGFpbiA9IHRydWU7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xuXG4gIC8vIE9PUFxuICAvLyAtLS0tLS0tLS0tLS0tLS1cbiAgLy8gSWYgVW5kZXJzY29yZSBpcyBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgaXQgcmV0dXJucyBhIHdyYXBwZWQgb2JqZWN0IHRoYXRcbiAgLy8gY2FuIGJlIHVzZWQgT08tc3R5bGUuIFRoaXMgd3JhcHBlciBob2xkcyBhbHRlcmVkIHZlcnNpb25zIG9mIGFsbCB0aGVcbiAgLy8gdW5kZXJzY29yZSBmdW5jdGlvbnMuIFdyYXBwZWQgb2JqZWN0cyBtYXkgYmUgY2hhaW5lZC5cblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29udGludWUgY2hhaW5pbmcgaW50ZXJtZWRpYXRlIHJlc3VsdHMuXG4gIHZhciBjaGFpblJlc3VsdCA9IGZ1bmN0aW9uKGluc3RhbmNlLCBvYmopIHtcbiAgICByZXR1cm4gaW5zdGFuY2UuX2NoYWluID8gXyhvYmopLmNoYWluKCkgOiBvYmo7XG4gIH07XG5cbiAgLy8gQWRkIHlvdXIgb3duIGN1c3RvbSBmdW5jdGlvbnMgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLm1peGluID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgXy5lYWNoKF8uZnVuY3Rpb25zKG9iaiksIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHZhciBmdW5jID0gX1tuYW1lXSA9IG9ialtuYW1lXTtcbiAgICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gW3RoaXMuX3dyYXBwZWRdO1xuICAgICAgICBwdXNoLmFwcGx5KGFyZ3MsIGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBmdW5jLmFwcGx5KF8sIGFyZ3MpKTtcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIF87XG4gIH07XG5cbiAgLy8gQWRkIGFsbCBvZiB0aGUgVW5kZXJzY29yZSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIgb2JqZWN0LlxuICBfLm1peGluKF8pO1xuXG4gIC8vIEFkZCBhbGwgbXV0YXRvciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIF8uZWFjaChbJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvYmogPSB0aGlzLl93cmFwcGVkO1xuICAgICAgbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRzKTtcbiAgICAgIGlmICgobmFtZSA9PT0gJ3NoaWZ0JyB8fCBuYW1lID09PSAnc3BsaWNlJykgJiYgb2JqLmxlbmd0aCA9PT0gMCkgZGVsZXRlIG9ialswXTtcbiAgICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBvYmopO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIEFkZCBhbGwgYWNjZXNzb3IgQXJyYXkgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLlxuICBfLmVhY2goWydjb25jYXQnLCAnam9pbicsICdzbGljZSddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBtZXRob2QuYXBwbHkodGhpcy5fd3JhcHBlZCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRXh0cmFjdHMgdGhlIHJlc3VsdCBmcm9tIGEgd3JhcHBlZCBhbmQgY2hhaW5lZCBvYmplY3QuXG4gIF8ucHJvdG90eXBlLnZhbHVlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyYXBwZWQ7XG4gIH07XG5cbiAgLy8gUHJvdmlkZSB1bndyYXBwaW5nIHByb3h5IGZvciBzb21lIG1ldGhvZHMgdXNlZCBpbiBlbmdpbmUgb3BlcmF0aW9uc1xuICAvLyBzdWNoIGFzIGFyaXRobWV0aWMgYW5kIEpTT04gc3RyaW5naWZpY2F0aW9uLlxuICBfLnByb3RvdHlwZS52YWx1ZU9mID0gXy5wcm90b3R5cGUudG9KU09OID0gXy5wcm90b3R5cGUudmFsdWU7XG5cbiAgXy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuX3dyYXBwZWQpO1xuICB9O1xuXG4gIC8vIEFNRCByZWdpc3RyYXRpb24gaGFwcGVucyBhdCB0aGUgZW5kIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQU1EIGxvYWRlcnNcbiAgLy8gdGhhdCBtYXkgbm90IGVuZm9yY2UgbmV4dC10dXJuIHNlbWFudGljcyBvbiBtb2R1bGVzLiBFdmVuIHRob3VnaCBnZW5lcmFsXG4gIC8vIHByYWN0aWNlIGZvciBBTUQgcmVnaXN0cmF0aW9uIGlzIHRvIGJlIGFub255bW91cywgdW5kZXJzY29yZSByZWdpc3RlcnNcbiAgLy8gYXMgYSBuYW1lZCBtb2R1bGUgYmVjYXVzZSwgbGlrZSBqUXVlcnksIGl0IGlzIGEgYmFzZSBsaWJyYXJ5IHRoYXQgaXNcbiAgLy8gcG9wdWxhciBlbm91Z2ggdG8gYmUgYnVuZGxlZCBpbiBhIHRoaXJkIHBhcnR5IGxpYiwgYnV0IG5vdCBiZSBwYXJ0IG9mXG4gIC8vIGFuIEFNRCBsb2FkIHJlcXVlc3QuIFRob3NlIGNhc2VzIGNvdWxkIGdlbmVyYXRlIGFuIGVycm9yIHdoZW4gYW5cbiAgLy8gYW5vbnltb3VzIGRlZmluZSgpIGlzIGNhbGxlZCBvdXRzaWRlIG9mIGEgbG9hZGVyIHJlcXVlc3QuXG4gIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZSgndW5kZXJzY29yZScsIFtdLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBfO1xuICAgIH0pO1xuICB9XG59KCkpO1xuIiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihtb2R1bGUpIHtcblx0aWYgKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XG5cdFx0bW9kdWxlLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKCkge307XG5cdFx0bW9kdWxlLnBhdGhzID0gW107XG5cdFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XG5cdFx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwibG9hZGVkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmw7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJpZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xuXHR9XG5cdHJldHVybiBtb2R1bGU7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgd2luZG93ID0gcmVxdWlyZShcImdsb2JhbC93aW5kb3dcIilcbnZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZShcImlzLWZ1bmN0aW9uXCIpXG52YXIgcGFyc2VIZWFkZXJzID0gcmVxdWlyZShcInBhcnNlLWhlYWRlcnNcIilcbnZhciB4dGVuZCA9IHJlcXVpcmUoXCJ4dGVuZFwiKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVhIUlxuLy8gQWxsb3cgdXNlIG9mIGRlZmF1bHQgaW1wb3J0IHN5bnRheCBpbiBUeXBlU2NyaXB0XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gY3JlYXRlWEhSO1xuY3JlYXRlWEhSLlhNTEh0dHBSZXF1ZXN0ID0gd2luZG93LlhNTEh0dHBSZXF1ZXN0IHx8IG5vb3BcbmNyZWF0ZVhIUi5YRG9tYWluUmVxdWVzdCA9IFwid2l0aENyZWRlbnRpYWxzXCIgaW4gKG5ldyBjcmVhdGVYSFIuWE1MSHR0cFJlcXVlc3QoKSkgPyBjcmVhdGVYSFIuWE1MSHR0cFJlcXVlc3QgOiB3aW5kb3cuWERvbWFpblJlcXVlc3RcblxuZm9yRWFjaEFycmF5KFtcImdldFwiLCBcInB1dFwiLCBcInBvc3RcIiwgXCJwYXRjaFwiLCBcImhlYWRcIiwgXCJkZWxldGVcIl0sIGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgIGNyZWF0ZVhIUlttZXRob2QgPT09IFwiZGVsZXRlXCIgPyBcImRlbFwiIDogbWV0aG9kXSA9IGZ1bmN0aW9uKHVyaSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRQYXJhbXModXJpLCBvcHRpb25zLCBjYWxsYmFjaylcbiAgICAgICAgb3B0aW9ucy5tZXRob2QgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuICAgICAgICByZXR1cm4gX2NyZWF0ZVhIUihvcHRpb25zKVxuICAgIH1cbn0pXG5cbmZ1bmN0aW9uIGZvckVhY2hBcnJheShhcnJheSwgaXRlcmF0b3IpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGFycmF5W2ldKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNFbXB0eShvYmope1xuICAgIGZvcih2YXIgaSBpbiBvYmope1xuICAgICAgICBpZihvYmouaGFzT3duUHJvcGVydHkoaSkpIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBpbml0UGFyYW1zKHVyaSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICB2YXIgcGFyYW1zID0gdXJpXG5cbiAgICBpZiAoaXNGdW5jdGlvbihvcHRpb25zKSkge1xuICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnNcbiAgICAgICAgaWYgKHR5cGVvZiB1cmkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IHt1cmk6dXJpfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW1zID0geHRlbmQob3B0aW9ucywge3VyaTogdXJpfSlcbiAgICB9XG5cbiAgICBwYXJhbXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHJldHVybiBwYXJhbXNcbn1cblxuZnVuY3Rpb24gY3JlYXRlWEhSKHVyaSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICBvcHRpb25zID0gaW5pdFBhcmFtcyh1cmksIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAgIHJldHVybiBfY3JlYXRlWEhSKG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVYSFIob3B0aW9ucykge1xuICAgIGlmKHR5cGVvZiBvcHRpb25zLmNhbGxiYWNrID09PSBcInVuZGVmaW5lZFwiKXtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2FsbGJhY2sgYXJndW1lbnQgbWlzc2luZ1wiKVxuICAgIH1cblxuICAgIHZhciBjYWxsZWQgPSBmYWxzZVxuICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uIGNiT25jZShlcnIsIHJlc3BvbnNlLCBib2R5KXtcbiAgICAgICAgaWYoIWNhbGxlZCl7XG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlXG4gICAgICAgICAgICBvcHRpb25zLmNhbGxiYWNrKGVyciwgcmVzcG9uc2UsIGJvZHkpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkeXN0YXRlY2hhbmdlKCkge1xuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQobG9hZEZ1bmMsIDApXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRCb2R5KCkge1xuICAgICAgICAvLyBDaHJvbWUgd2l0aCByZXF1ZXN0VHlwZT1ibG9iIHRocm93cyBlcnJvcnMgYXJyb3VuZCB3aGVuIGV2ZW4gdGVzdGluZyBhY2Nlc3MgdG8gcmVzcG9uc2VUZXh0XG4gICAgICAgIHZhciBib2R5ID0gdW5kZWZpbmVkXG5cbiAgICAgICAgaWYgKHhoci5yZXNwb25zZSkge1xuICAgICAgICAgICAgYm9keSA9IHhoci5yZXNwb25zZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYm9keSA9IHhoci5yZXNwb25zZVRleHQgfHwgZ2V0WG1sKHhocilcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0pzb24pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYm9keSA9IEpTT04ucGFyc2UoYm9keSlcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYm9keVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVycm9yRnVuYyhldnQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRUaW1lcilcbiAgICAgICAgaWYoIShldnQgaW5zdGFuY2VvZiBFcnJvcikpe1xuICAgICAgICAgICAgZXZ0ID0gbmV3IEVycm9yKFwiXCIgKyAoZXZ0IHx8IFwiVW5rbm93biBYTUxIdHRwUmVxdWVzdCBFcnJvclwiKSApXG4gICAgICAgIH1cbiAgICAgICAgZXZ0LnN0YXR1c0NvZGUgPSAwXG4gICAgICAgIHJldHVybiBjYWxsYmFjayhldnQsIGZhaWx1cmVSZXNwb25zZSlcbiAgICB9XG5cbiAgICAvLyB3aWxsIGxvYWQgdGhlIGRhdGEgJiBwcm9jZXNzIHRoZSByZXNwb25zZSBpbiBhIHNwZWNpYWwgcmVzcG9uc2Ugb2JqZWN0XG4gICAgZnVuY3Rpb24gbG9hZEZ1bmMoKSB7XG4gICAgICAgIGlmIChhYm9ydGVkKSByZXR1cm5cbiAgICAgICAgdmFyIHN0YXR1c1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dFRpbWVyKVxuICAgICAgICBpZihvcHRpb25zLnVzZVhEUiAmJiB4aHIuc3RhdHVzPT09dW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvL0lFOCBDT1JTIEdFVCBzdWNjZXNzZnVsIHJlc3BvbnNlIGRvZXNuJ3QgaGF2ZSBhIHN0YXR1cyBmaWVsZCwgYnV0IGJvZHkgaXMgZmluZVxuICAgICAgICAgICAgc3RhdHVzID0gMjAwXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0dXMgPSAoeGhyLnN0YXR1cyA9PT0gMTIyMyA/IDIwNCA6IHhoci5zdGF0dXMpXG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlc3BvbnNlID0gZmFpbHVyZVJlc3BvbnNlXG4gICAgICAgIHZhciBlcnIgPSBudWxsXG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gMCl7XG4gICAgICAgICAgICByZXNwb25zZSA9IHtcbiAgICAgICAgICAgICAgICBib2R5OiBnZXRCb2R5KCksXG4gICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogc3RhdHVzLFxuICAgICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgICAgICAgIHVybDogdXJpLFxuICAgICAgICAgICAgICAgIHJhd1JlcXVlc3Q6IHhoclxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycyl7IC8vcmVtZW1iZXIgeGhyIGNhbiBpbiBmYWN0IGJlIFhEUiBmb3IgQ09SUyBpbiBJRVxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBwYXJzZUhlYWRlcnMoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyID0gbmV3IEVycm9yKFwiSW50ZXJuYWwgWE1MSHR0cFJlcXVlc3QgRXJyb3JcIilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyLCByZXNwb25zZSwgcmVzcG9uc2UuYm9keSlcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gb3B0aW9ucy54aHIgfHwgbnVsbFxuXG4gICAgaWYgKCF4aHIpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuY29ycyB8fCBvcHRpb25zLnVzZVhEUikge1xuICAgICAgICAgICAgeGhyID0gbmV3IGNyZWF0ZVhIUi5YRG9tYWluUmVxdWVzdCgpXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgeGhyID0gbmV3IGNyZWF0ZVhIUi5YTUxIdHRwUmVxdWVzdCgpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5XG4gICAgdmFyIGFib3J0ZWRcbiAgICB2YXIgdXJpID0geGhyLnVybCA9IG9wdGlvbnMudXJpIHx8IG9wdGlvbnMudXJsXG4gICAgdmFyIG1ldGhvZCA9IHhoci5tZXRob2QgPSBvcHRpb25zLm1ldGhvZCB8fCBcIkdFVFwiXG4gICAgdmFyIGJvZHkgPSBvcHRpb25zLmJvZHkgfHwgb3B0aW9ucy5kYXRhXG4gICAgdmFyIGhlYWRlcnMgPSB4aHIuaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyB8fCB7fVxuICAgIHZhciBzeW5jID0gISFvcHRpb25zLnN5bmNcbiAgICB2YXIgaXNKc29uID0gZmFsc2VcbiAgICB2YXIgdGltZW91dFRpbWVyXG4gICAgdmFyIGZhaWx1cmVSZXNwb25zZSA9IHtcbiAgICAgICAgYm9keTogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgc3RhdHVzQ29kZTogMCxcbiAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgIHVybDogdXJpLFxuICAgICAgICByYXdSZXF1ZXN0OiB4aHJcbiAgICB9XG5cbiAgICBpZiAoXCJqc29uXCIgaW4gb3B0aW9ucyAmJiBvcHRpb25zLmpzb24gIT09IGZhbHNlKSB7XG4gICAgICAgIGlzSnNvbiA9IHRydWVcbiAgICAgICAgaGVhZGVyc1tcImFjY2VwdFwiXSB8fCBoZWFkZXJzW1wiQWNjZXB0XCJdIHx8IChoZWFkZXJzW1wiQWNjZXB0XCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCIpIC8vRG9uJ3Qgb3ZlcnJpZGUgZXhpc3RpbmcgYWNjZXB0IGhlYWRlciBkZWNsYXJlZCBieSB1c2VyXG4gICAgICAgIGlmIChtZXRob2QgIT09IFwiR0VUXCIgJiYgbWV0aG9kICE9PSBcIkhFQURcIikge1xuICAgICAgICAgICAgaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSB8fCBoZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdIHx8IChoZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCIpIC8vRG9uJ3Qgb3ZlcnJpZGUgZXhpc3RpbmcgYWNjZXB0IGhlYWRlciBkZWNsYXJlZCBieSB1c2VyXG4gICAgICAgICAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5qc29uID09PSB0cnVlID8gYm9keSA6IG9wdGlvbnMuanNvbilcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSByZWFkeXN0YXRlY2hhbmdlXG4gICAgeGhyLm9ubG9hZCA9IGxvYWRGdW5jXG4gICAgeGhyLm9uZXJyb3IgPSBlcnJvckZ1bmNcbiAgICAvLyBJRTkgbXVzdCBoYXZlIG9ucHJvZ3Jlc3MgYmUgc2V0IHRvIGEgdW5pcXVlIGZ1bmN0aW9uLlxuICAgIHhoci5vbnByb2dyZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBJRSBtdXN0IGRpZVxuICAgIH1cbiAgICB4aHIub25hYm9ydCA9IGZ1bmN0aW9uKCl7XG4gICAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICB4aHIub250aW1lb3V0ID0gZXJyb3JGdW5jXG4gICAgeGhyLm9wZW4obWV0aG9kLCB1cmksICFzeW5jLCBvcHRpb25zLnVzZXJuYW1lLCBvcHRpb25zLnBhc3N3b3JkKVxuICAgIC8vaGFzIHRvIGJlIGFmdGVyIG9wZW5cbiAgICBpZighc3luYykge1xuICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gISFvcHRpb25zLndpdGhDcmVkZW50aWFsc1xuICAgIH1cbiAgICAvLyBDYW5ub3Qgc2V0IHRpbWVvdXQgd2l0aCBzeW5jIHJlcXVlc3RcbiAgICAvLyBub3Qgc2V0dGluZyB0aW1lb3V0IG9uIHRoZSB4aHIgb2JqZWN0LCBiZWNhdXNlIG9mIG9sZCB3ZWJraXRzIGV0Yy4gbm90IGhhbmRsaW5nIHRoYXQgY29ycmVjdGx5XG4gICAgLy8gYm90aCBucG0ncyByZXF1ZXN0IGFuZCBqcXVlcnkgMS54IHVzZSB0aGlzIGtpbmQgb2YgdGltZW91dCwgc28gdGhpcyBpcyBiZWluZyBjb25zaXN0ZW50XG4gICAgaWYgKCFzeW5jICYmIG9wdGlvbnMudGltZW91dCA+IDAgKSB7XG4gICAgICAgIHRpbWVvdXRUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGlmIChhYm9ydGVkKSByZXR1cm5cbiAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlLy9JRTkgbWF5IHN0aWxsIGNhbGwgcmVhZHlzdGF0ZWNoYW5nZVxuICAgICAgICAgICAgeGhyLmFib3J0KFwidGltZW91dFwiKVxuICAgICAgICAgICAgdmFyIGUgPSBuZXcgRXJyb3IoXCJYTUxIdHRwUmVxdWVzdCB0aW1lb3V0XCIpXG4gICAgICAgICAgICBlLmNvZGUgPSBcIkVUSU1FRE9VVFwiXG4gICAgICAgICAgICBlcnJvckZ1bmMoZSlcbiAgICAgICAgfSwgb3B0aW9ucy50aW1lb3V0IClcbiAgICB9XG5cbiAgICBpZiAoeGhyLnNldFJlcXVlc3RIZWFkZXIpIHtcbiAgICAgICAgZm9yKGtleSBpbiBoZWFkZXJzKXtcbiAgICAgICAgICAgIGlmKGhlYWRlcnMuaGFzT3duUHJvcGVydHkoa2V5KSl7XG4gICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoa2V5LCBoZWFkZXJzW2tleV0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaGVhZGVycyAmJiAhaXNFbXB0eShvcHRpb25zLmhlYWRlcnMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkhlYWRlcnMgY2Fubm90IGJlIHNldCBvbiBhbiBYRG9tYWluUmVxdWVzdCBvYmplY3RcIilcbiAgICB9XG5cbiAgICBpZiAoXCJyZXNwb25zZVR5cGVcIiBpbiBvcHRpb25zKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBvcHRpb25zLnJlc3BvbnNlVHlwZVxuICAgIH1cblxuICAgIGlmIChcImJlZm9yZVNlbmRcIiBpbiBvcHRpb25zICYmXG4gICAgICAgIHR5cGVvZiBvcHRpb25zLmJlZm9yZVNlbmQgPT09IFwiZnVuY3Rpb25cIlxuICAgICkge1xuICAgICAgICBvcHRpb25zLmJlZm9yZVNlbmQoeGhyKVxuICAgIH1cblxuICAgIC8vIE1pY3Jvc29mdCBFZGdlIGJyb3dzZXIgc2VuZHMgXCJ1bmRlZmluZWRcIiB3aGVuIHNlbmQgaXMgY2FsbGVkIHdpdGggdW5kZWZpbmVkIHZhbHVlLlxuICAgIC8vIFhNTEh0dHBSZXF1ZXN0IHNwZWMgc2F5cyB0byBwYXNzIG51bGwgYXMgYm9keSB0byBpbmRpY2F0ZSBubyBib2R5XG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9uYXVndHVyL3hoci9pc3N1ZXMvMTAwLlxuICAgIHhoci5zZW5kKGJvZHkgfHwgbnVsbClcblxuICAgIHJldHVybiB4aHJcblxuXG59XG5cbmZ1bmN0aW9uIGdldFhtbCh4aHIpIHtcbiAgICAvLyB4aHIucmVzcG9uc2VYTUwgd2lsbCB0aHJvdyBFeGNlcHRpb24gXCJJbnZhbGlkU3RhdGVFcnJvclwiIG9yIFwiRE9NRXhjZXB0aW9uXCJcbiAgICAvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1hNTEh0dHBSZXF1ZXN0L3Jlc3BvbnNlWE1MLlxuICAgIHRyeSB7XG4gICAgICAgIGlmICh4aHIucmVzcG9uc2VUeXBlID09PSBcImRvY3VtZW50XCIpIHtcbiAgICAgICAgICAgIHJldHVybiB4aHIucmVzcG9uc2VYTUxcbiAgICAgICAgfVxuICAgICAgICB2YXIgZmlyZWZveEJ1Z1Rha2VuRWZmZWN0ID0geGhyLnJlc3BvbnNlWE1MICYmIHhoci5yZXNwb25zZVhNTC5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWUgPT09IFwicGFyc2VyZXJyb3JcIlxuICAgICAgICBpZiAoeGhyLnJlc3BvbnNlVHlwZSA9PT0gXCJcIiAmJiAhZmlyZWZveEJ1Z1Rha2VuRWZmZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4geGhyLnJlc3BvbnNlWE1MXG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7fVxuXG4gICAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gbm9vcCgpIHt9XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGV4dGVuZFxuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5mdW5jdGlvbiBleHRlbmQoKSB7XG4gICAgdmFyIHRhcmdldCA9IHt9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldXG5cbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldFxufVxuIiwiLyogKGlnbm9yZWQpICovIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvYXBwLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9saWIvcGxvdGx5LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RhbHMuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9ldmVudC1hc3NpZ25tZW50LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvZXZlbnQtYXNzaWdubWVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9ldmVudC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbW9kZWxzL2V2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbW9kZWxzL2Z1bmN0aW9uLWRlZmluaXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9mdW5jdGlvbi1kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbW9kZWxzL2luaXRpYWwtY29uZGl0aW9uLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvaW5pdGlhbC1jb25kaXRpb25zLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvbWVzaC1zZXR0aW5ncy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbW9kZWxzL21vZGVsLXNldHRpbmdzLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvbW9kZWwuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9wYXJhbWV0ZXItc3dlZXAtc2V0dGluZ3MuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9wYXJhbWV0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9wYXJhbWV0ZXJzLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvcmVhY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9yZWFjdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9ydWxlLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvcnVsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9zaW11bGF0aW9uLXNldHRpbmdzLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvc3BlY2llLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvc3BlY2llcy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbW9kZWxzL3N0b2ljaC1zcGVjaWUuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9zdG9pY2gtc3BlY2llcy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbW9kZWxzL3N1YmRvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbW9kZWxzL3N1YmRvbWFpbnMuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3BhZ2UtaGVscC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvcGFnZXMvYmFzZS5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvcGFnZXMvcGFnZS5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc3R5bGVzL2Jvb3RzdHJhcC5jc3M/MmM5OSIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc3R5bGVzL3N0eWxlcy5jc3M/OGU4OCIsIndlYnBhY2s6Ly8vLi9jbGllbnQvdGVtcGxhdGVzL3BhZ2VzL2hvbWUucHVnIiwid2VicGFjazovLy8uL2NsaWVudC90b29sdGlwcy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvdmlld3MvaW5wdXQuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3ZpZXdzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3ZpZXdzL3Rlc3RzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtZnJlZS9jc3Mvc3ZnLXdpdGgtanMubWluLmNzcz82NWJiIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hbXBlcnNhbmQtYXBwL2FtcGVyc2FuZC1hcHAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FtcGVyc2FuZC1jbGFzcy1leHRlbmQvYW1wZXJzYW5kLWNsYXNzLWV4dGVuZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLWNvbGxlY3Rpb24tdmlldy9hbXBlcnNhbmQtY29sbGVjdGlvbi12aWV3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hbXBlcnNhbmQtY29sbGVjdGlvbi9hbXBlcnNhbmQtY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLWRvbS1iaW5kaW5ncy9hbXBlcnNhbmQtZG9tLWJpbmRpbmdzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hbXBlcnNhbmQtZG9tL2FtcGVyc2FuZC1kb20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FtcGVyc2FuZC1ldmVudHMvYW1wZXJzYW5kLWV2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLWV2ZW50cy9saWJzL3V0aWxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hbXBlcnNhbmQtaW5wdXQtdmlldy9hbXBlcnNhbmQtaW5wdXQtdmlldy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLW1vZGVsL2FtcGVyc2FuZC1tb2RlbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLXNlbGVjdC12aWV3L2FtcGVyc2FuZC1zZWxlY3Qtdmlldy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLXN0YXRlL2FtcGVyc2FuZC1zdGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLXN5bmMvYW1wZXJzYW5kLXN5bmMtYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLXN5bmMvY29yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLXZpZXctc3dpdGNoZXIvYW1wZXJzYW5kLXZpZXctc3dpdGNoZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FtcGVyc2FuZC12aWV3L2FtcGVyc2FuZC12aWV3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hcnJheS1uZXh0L2FycmF5LW5leHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9kaXN0L2pzL2Jvb3RzdHJhcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xvc2VzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xvc2VzdC9ub2RlX21vZHVsZXMvbWF0Y2hlcy1zZWxlY3Rvci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29tcG9uZW50LWV2ZW50L2luZGV4LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9zdHlsZXMvYm9vdHN0cmFwLmNzcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc3R5bGVzL3N0eWxlcy5jc3MiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1mcmVlL2Nzcy9zdmctd2l0aC1qcy5taW4uY3NzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RlZmluZS1wcm9wZXJ0aWVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZWxlZ2F0ZS1ldmVudHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RvbWlmeS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZG9tcmVhZHkvcmVhZHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvZXM1LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL2Fzc2VydFJlY29yZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc05hTi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9tb2QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtdG8tcHJpbWl0aXZlL2VzNS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtdG8tcHJpbWl0aXZlL2hlbHBlcnMvaXNQcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2V2ZW50cy1taXhpbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZm9yLWVhY2gvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW1wbGVtZW50YXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2dsb2JhbC93aW5kb3cuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2lzLWNhbGxhYmxlL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pcy1mdW5jdGlvbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvanF1ZXJ5L2Rpc3QvanF1ZXJ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9rYXRleC9kaXN0L2thdGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9rZXktdHJlZS1zdG9yZS9rZXktdHJlZS1zdG9yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9jYWwtbGlua3MvbG9jYWwtbGlua3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fRGF0YVZpZXcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fSGFzaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MYXp5V3JhcHBlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MaXN0Q2FjaGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTG9kYXNoV3JhcHBlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwQ2FjaGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fUHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0Q2FjaGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3RhY2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1VpbnQ4QXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fV2Vha01hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlGaWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlJbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUluY2x1ZGVzV2l0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUxpa2VLZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5UHVzaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVNvbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNjaWlUb0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc2lnblZhbHVlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc29jSW5kZXhPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25Jbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduVmFsdWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUNsb25lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZURpZmZlcmVuY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZpbmRJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRmxhdHRlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRm9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGb3JPd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0QWxsS2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VIYXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUhhc0luLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJbmRleE9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJbnZva2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzQXJndW1lbnRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0RhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzRXF1YWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzRXF1YWxEZWVwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc01hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNNYXRjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYU4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1NldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJdGVyYXRlZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VMb2Rhc2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1hdGNoZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1hdGNoZXNQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUGljay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUGlja0J5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUHJvcGVydHlEZWVwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VQcm9wZXJ0eU9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VSZXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldERhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTbGljZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVGltZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5pcS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5zZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYWNoZUhhcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYXN0RnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FzdFBhdGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVBcnJheUJ1ZmZlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUJ1ZmZlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZURhdGFWaWV3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lUmVnRXhwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lU3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lVHlwZWRBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb21wb3NlQXJncy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb21wb3NlQXJnc1JpZ2h0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcHlBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5T2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcHlTeW1ib2xzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcHlTeW1ib2xzSW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29yZUpzRGF0YS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3VudEhvbGRlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQXNzaWduZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQmFzZUVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQmFzZUZvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQ3VycnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlRmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVIeWJyaWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlUGFydGlhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVSZWN1cnJ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZVNldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVXcmFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2N1c3RvbU9taXRDbG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbEFycmF5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbEJ5VGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2VxdWFsT2JqZWN0cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lc2NhcGVIdG1sQ2hhci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mbGF0UmVzdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0QWxsS2V5c0luLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldERhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0RnVuY05hbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0SG9sZGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hcERhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWF0Y2hEYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE5hdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRQcm90b3R5cGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0U3ltYm9sc0luLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFRhZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRWYWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRXcmFwRGV0YWlscy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNQYXRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc1VuaWNvZGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaENsZWFyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hEZWxldGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEdldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoSGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hTZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lQnlUYWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2luc2VydFdyYXBEZXRhaWxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzRmxhdHRlbmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0l0ZXJhdGVlQ2FsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNMYXppYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc01hc2tlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1Byb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1N0cmljdENvbXBhcmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXRlcmF0b3JUb0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUNsZWFyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlRGVsZXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlR2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlSGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlU2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWVtb2l6ZUNhcHBlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tZXJnZURhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWV0YU1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVDcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlS2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzSW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbm9kZVV0aWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb2JqZWN0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyUmVzdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19wYXJlbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcmVhbE5hbWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jlb3JkZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcmVwbGFjZUhvbGRlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcm9vdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUFkZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUhhcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXREYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0V3JhcFRvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Nob3J0T3V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrQ2xlYXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tEZWxldGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tHZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tIYXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tTZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RyaWN0SW5kZXhPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdHJpbmdUb0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1RvUGF0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b1NvdXJjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL191bmljb2RlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL191cGRhdGVXcmFwRGV0YWlscy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL193cmFwcGVyQ2xvbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9iZWZvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvY2xvbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9jb25zdGFudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2RlZmF1bHRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZGlmZmVyZW5jZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VxLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXNjYXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2ZpbmRJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2ZsYXR0ZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9mb3JFYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZm9yT3duLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZ2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaGFzSW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2luY2x1ZGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaW52b2tlTWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZU9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQnVmZmVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNEYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNFbXB0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRXF1YWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc01hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNQbGFpbk9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzVHlwZWRBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzSW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9sYXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbWVtb2l6ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL25vb3AuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9vbWl0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvb25jZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL3BhcnRpYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9waWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9yZXN1bHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViRmFsc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9GaW5pdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b0ludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b051bWJlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdW5pb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC91bmlxdWVJZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL3ZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL3dyYXBwZXJMb2Rhc2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21hdGNoZXMtc2VsZWN0b3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21lZGlhLXR5cGUvbGliL21lZGlhVHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbm9kZS1saWJzLWJyb3dzZXIvbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL29iamVjdC1rZXlzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGFyc2UtaGVhZGVycy9wYXJzZS1oZWFkZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3BvcHBlci5qcy9kaXN0L2VzbS9wb3BwZXIuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3RlbXBsYXRlcy9ib2R5LnB1ZyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvdGVtcGxhdGVzL2hlYWQucHVnIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wdWctcnVudGltZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcXMvbGliL2Zvcm1hdHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3FzL2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcXMvbGliL3BhcnNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9xcy9saWIvc3RyaW5naWZ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9xcy9saWIvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUudHJpbS9pbXBsZW1lbnRhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS50cmltL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zdHJpbmcucHJvdG90eXBlLnRyaW0vcG9seWZpbGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUudHJpbS9zaGltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi91cmxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL3VuZGVyc2NvcmUuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vbW9kdWxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy94aHIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3h0ZW5kL2ltbXV0YWJsZS5qcyIsIndlYnBhY2s6Ly8vZnMgKGlnbm9yZWQpIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0EsV0FBVyxtQkFBTyxDQUFDLHFEQUFNOztBQUV6QjtBQUNB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QixFQUFFLDZCQUE2QixFQUFFLDRCQUE0QixFQUFFLDZCQUE2QixFQUFFLDBCQUEwQixXQUFXLHNCQUFzQixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDZCQUE2QixFQUFFLDRCQUE0QixFQUFFLDZCQUE2QixFQUFFLDBCQUEwQixXQUFXLHVCQUF1QixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixFQUFFLDZCQUE2QixFQUFFLDBCQUEwQixZQUFZLHNCQUFzQixFQUFFLHNCQUFzQixTQUFTLHVCQUF1QixFQUFFLDRCQUE0QixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLHdCQUF3QixXQUFXLHNCQUFzQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLHNCQUFzQixZQUFZLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLHNCQUFzQixhQUFhLHdCQUF3QixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLHdCQUF3QixjQUFjLG9CQUFvQixFQUFFLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixVQUFVLHNCQUFzQixFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixhQUFhLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixVQUFVLDRCQUE0QixFQUFFLDRCQUE0QixZQUFZLHNCQUFzQixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLHlCQUF5QixZQUFZLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixVQUFVLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDRCQUE0QixFQUFFLDBCQUEwQixXQUFXLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLHlCQUF5QixTQUFTLHdCQUF3QixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLHdCQUF3QixTQUFTLHdCQUF3QixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixFQUFFLHdCQUF3QixtQkFBbUIsd0JBQXdCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUsd0JBQXdCLEVBQUUseUJBQXlCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUsd0JBQXdCLGVBQWUsdUJBQXVCLEVBQUUseUJBQXlCLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsMEJBQTBCLFNBQVMsdUJBQXVCLEVBQUUseUJBQXlCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsMkJBQTJCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsMEJBQTBCLGdCQUFnQix1QkFBdUIsRUFBRSx5QkFBeUIsRUFBRSx5QkFBeUIsRUFBRSwwQkFBMEIsRUFBRSx5QkFBeUIsRUFBRSwwQkFBMEIsRUFBRSw0QkFBNEIsRUFBRSw0QkFBNEIsRUFBRSwwQkFBMEIsWUFBWSx1QkFBdUIsRUFBRSx5QkFBeUIsRUFBRSwyQkFBMkIsRUFBRSwyQkFBMkIsRUFBRSwyQkFBMkIsRUFBRSw0QkFBNEIsRUFBRSw0QkFBNEIsRUFBRSw0QkFBNEIsRUFBRSwwQkFBMEIsdUJBQXVCLHVCQUF1QixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixFQUFFLDBCQUEwQixzQkFBc0Isc0JBQXNCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsMEJBQTBCLFdBQVcscUJBQXFCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLFFBQVEsdUJBQXVCLEVBQUUseUJBQXlCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUseUJBQXlCLFVBQVUseUJBQXlCLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLGFBQWEsd0JBQXdCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVB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QTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7O0FDalJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztB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QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNB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Q0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSw4QkFBOEIsWUFBWTtBQUMxQztBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLFNBQVMsNkJBQTZCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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O0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLE9BQU87OztBQUdQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCOztBQUU5QiwrQkFBK0I7O0FBRS9CLG1DQUFtQzs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7OztBQUdMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbURBQW1EOztBQUVuRDtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0M7O0FBRXRDO0FBQ0Esb0NBQW9DO0FBQ3BDOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUNBQW1DOztBQUVuQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBLDJDQUEyQyxTQUFTO0FBQ3BEOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4Q0FBOEMsU0FBUztBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1QkFBdUIsd0JBQXdCO0FBQy9DO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLCtCQUErQjtBQUMvQiw2Q0FBNkM7O0FBRTdDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNDQUFzQyw2RUFBNkU7O0FBRW5IO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjs7QUFFMUIseUJBQXlCOztBQUV6QixzQkFBc0I7O0FBRXRCLDRCQUE0Qjs7QUFFNUIsOEJBQThCOztBQUU5QixtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7O0FBR0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9EQUFvRDs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQ0FBMkM7O0FBRTNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EseUNBQXlDLDBFQUEwRTtBQUNuSDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsMkNBQTJDLFNBQVM7QUFDcEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCOztBQUU1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87O0FBRVA7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0dBQWdHOztBQUVoRztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsRUFBRTs7QUFFWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsRUFBRTs7QUFFWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxFQUFFOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLEVBQUU7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsc0NBQXNDLCtFQUErRTs7QUFFckg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHlFQUF5RTs7QUFFekU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSzs7QUFFTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVJQUF1STs7QUFFdkk7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLLEVBQUU7O0FBRVAsc0NBQXNDLE9BQU87QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQSwwQ0FBMEMsU0FBUztBQUNuRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7O0FBR0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwyQ0FBMkM7QUFDM0M7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHlDQUF5Qyx3RUFBd0U7QUFDakg7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxXQUFXO0FBQ1g7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLCtCQUErQiw4RkFBOEY7O0FBRTdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCxzQ0FBc0M7QUFDdEM7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUNBQXlDOztBQUV6Qzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQSxLQUFLOzs7QUFHTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsK0JBQStCLCtEQUErRDs7QUFFOUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxnQ0FBZ0MsS0FBSztBQUNyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE9BQU87O0FBRVA7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsMkNBQTJDO0FBQzNDOztBQUVBLHdJQUF3STs7QUFFeEk7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBLGtDQUFrQyxLQUFLO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOzs7QUFHTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVB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QUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEsWUFBWTs7QUFFcEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGLG9CQUFvQjs7QUFFcEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLGtCQUFrQixrQ0FBa0M7QUFDcEQsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVLFlBQVk7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsU0FBUztBQUNsQjtBQUNBOztBQUVBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVMsWUFBWTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsWUFBWTtBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLFNBQVM7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLElBQUk7O0FBRXBCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHdDQUF3QyxJQUFJO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWEseUJBQXlCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsU0FBUztBQUNwQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFFBQVEsNkJBQTZCO0FBQ2hEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0IsYUFBYSx1QkFBdUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLGVBQWU7QUFDMUIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsZ0NBQWdDLE1BQU07QUFDdEM7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsZUFBZTs7QUFFZixTQUFTOztBQUVUO0FBQ0EsUUFBUSxpQ0FBaUM7QUFDekMsUUFBUSxvQkFBb0I7QUFDNUIsUUFBUSxzQ0FBc0M7QUFDOUMsUUFBUTtBQUNSLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixhQUFhLEVBQUU7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDREQUE0RDs7QUFFNUQ7QUFDQTtBQUNBO0FBQ0EseUNBQXlDOztBQUV6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7O0FBRTdEO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQzs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnRUFBZ0U7O0FBRWhFO0FBQ0E7QUFDQTtBQUNBLDZDQUE2Qzs7QUFFN0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxpRUFBaUUsVUFBVTtBQUMzRSxzQ0FBc0MsMkJBQTJCO0FBQ2pFO0FBQ0EsZ0NBQWdDLE1BQU07QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsVUFBVSxZQUFZO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLFVBQVUsWUFBWTtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsVUFBVTtBQUNwQjtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxVQUFVLGNBQWM7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxZQUFZLHVFQUF1RTtBQUNuRjtBQUNBO0FBQ0EsWUFBWSw0QkFBNEI7QUFDeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxTQUFTO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsMkRBQTJEOztBQUUzRDtBQUNBO0FBQ0Esb0ZBQW9GOztBQUVwRjtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLFNBQVM7QUFDakI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEsU0FBUztBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCxRQUFRLFNBQVM7QUFDakI7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLGlEQUFpRDtBQUN4RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlEQUFpRDtBQUNqRCxVQUFVLHdDQUF3QztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLE1BQU07QUFDakIsV0FBVyxNQUFNO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBOztBQUVBLENBQUM7Ozs7QUFJRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQSxRQUFRLEdBQUc7QUFDWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTs7OztBQUlBOztBQUVBOztBQUVBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnQkFBZ0IsU0FBUztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTs7QUFFQSxjQUFjLFNBQVM7QUFDdkI7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSztBQUNMOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVLE9BQU87QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsT0FBTztBQUNqQiwwQkFBMEIsd0JBQXdCOztBQUVsRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSwwQ0FBMEM7QUFDMUMsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENB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QUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVOztBQUVWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7QUFFUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTixLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0NBQW9DO0FBQ3BDLHFDQUFxQztBQUNyQyxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7Ozs7QUFLQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVLFNBQVM7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixhQUFhO0FBQ3BDLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLFNBQVM7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSixHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEdBQUc7QUFDSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7OztBQUdBOztBQUVBOzs7O0FBSUE7QUFDQTtBQUNBLEdBQUc7QUFDSCxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLGdCQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsZ0JBQWdCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7O0FBRUE7Ozs7QUFJQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEVBQUU7QUFDRjs7QUFFQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsUUFBUSxPQUFPO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLHNCQUFzQjs7QUFFdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEsT0FBTztBQUNmOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLGdCQUFnQjtBQUNsQjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsV0FBVzs7QUFFWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDJDQUEyQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7O0FBRUE7QUFDQTs7QUFFQSxjQUFjLHNCQUFzQjtBQUNwQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwrREFBK0Q7QUFDL0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLGNBQWM7O0FBRXhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsbUJBQW1CO0FBQ3BDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsdUNBQXVDO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qix1REFBdUQ7QUFDOUU7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssK0NBQStDO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNDQUFzQztBQUN0QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFDQUFxQyxjQUFjO0FBQ25EO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxjQUFjLHFDQUFxQztBQUNuRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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O0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0YsQ0FBQzs7O0FBR0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLCtEQUErRDtBQUMzRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLE9BQU87O0FBRWY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixnQkFBZ0I7QUFDbEM7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7O0FBRUEsVUFBVSxPQUFPO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsV0FBVyxTQUFTO0FBQ3BCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7O0FBRVg7QUFDQTtBQUNBO0FBQ0EsUUFBUSxPQUFPO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLGdCQUFnQjtBQUN4Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaURBQWlELDBCQUEwQjtBQUMzRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFVBQVUsZ0JBQWdCO0FBQzFCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQSxxQkFBcUI7QUFDckI7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7O0FBRUEsNkNBQTZDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQSxRQUFRLGdCQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFNBQVMsZ0JBQWdCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLGlFQUFpRTtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGNBQWM7QUFDbEMsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaURBQWlEOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtCQUErQixTQUFTO0FBQ3hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLCtCQUErQixTQUFTO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsZ0JBQWdCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxrQkFBa0I7QUFDNUIsV0FBVyxrQkFBa0I7QUFDN0IsY0FBYztBQUNkLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsUUFBUSxtQkFBbUI7QUFDM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7QUFLRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7QUFLRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7Ozs7O0FBS0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQSxpQ0FBaUM7QUFDakM7QUFDQTs7QUFFQSxJQUFJO0FBQ0o7O0FBRUEsSUFBSTtBQUNKO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7OztBQUtEOzs7QUFHQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQ0FBMkM7QUFDM0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLEtBQUs7QUFDZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlEQUFpRDtBQUNqRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHFDQUFxQzs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTs7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVILEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsS0FBSztBQUNMOztBQUVBLFdBQVc7QUFDWCxHQUFHO0FBQ0g7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEIsZ0RBQWdEO0FBQ2hEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdEQUF3RDtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUI7QUFDakIsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkI7O0FBRTNCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQ0FBa0M7O0FBRWxDO0FBQ0Esc0JBQXNCO0FBQ3RCLDJCQUEyQjs7QUFFM0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3REO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFROztBQUVSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUEsbURBQW1EO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx1QkFBdUI7QUFDbEMsV0FBVyx5QkFBeUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7O0FBS0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0IsYUFBYSx1Q0FBdUM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7QUFLRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7O0FBS0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxJQUFJO0FBQ0osR0FBRztBQUNIOztBQUVBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7QUFLRDtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxxREFBcUQ7QUFDckQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1COztBQUVuQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLGNBQWMsc0RBQXNEO0FBQ3BFOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0EsY0FBYyxtQ0FBbUM7QUFDakQsZUFBZSw2REFBNkQ7QUFDNUU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLEVBQUU7QUFDRixDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7QUFLRDs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNB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QUNBLEVBQUU7OztBQUdGOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGFBQWE7QUFDYixZQUFZO0FBQ1osWUFBWTtBQUNaLGVBQWU7QUFDZixjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLG9DQUFvQzs7QUFFcEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0VBQWdFO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQyxHQUFHO0FBQ0o7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaLHNOQUFzTjs7QUFFdE47QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5Qzs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1EO0FBQ25EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1RUFBdUU7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QUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCOztBQUU1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHdFQUF3RTs7QUFFeEU7O0FBRUE7QUFDQTtBQUNBLHVFQUF1RTtBQUN2RTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNEQUFzRDs7QUFFdEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLG9EQUFvRDtBQUNwRDs7QUFFQTtBQUNBO0FBQ0EsdUVBQXVFO0FBQ3ZFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0Esc0RBQXNEOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQiwwQkFBMEI7QUFDN0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCOztBQUV4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLG1CQUFtQiwwQkFBMEI7QUFDN0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHVEQUF1RDs7QUFFdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixRQUFRLFlBQVksUUFBUSxPQUFPLFNBQVM7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUVBQXFFO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsTUFBTTtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQjs7QUFFMUI7QUFDQSxnQkFBZ0I7O0FBRWhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQ7O0FBRTFEO0FBQ0EsNkRBQTZEOztBQUU3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1RUFBdUU7O0FBRXZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrRUFBK0U7O0FBRS9FO0FBQ0E7QUFDQTtBQUNBLDJFQUEyRTs7QUFFM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZFQUE2RTs7QUFFN0UsZ0VBQWdFOztBQUVoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdFQUFnRTs7QUFFaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0U7O0FBRWhFO0FBQ0E7QUFDQSxzRUFBc0U7O0FBRXRFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBEOztBQUUxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEVBQTBFOztBQUUxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlGQUFpRjs7QUFFakY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdFQUF3RTs7QUFFeEU7QUFDQTtBQUNBO0FBQ0EsMEVBQTBFOztBQUUxRTtBQUNBO0FBQ0EsNEVBQTRFOztBQUU1RTtBQUNBLHlFQUF5RTs7QUFFekU7QUFDQTtBQUNBO0FBQ0EsNkVBQTZFOztBQUU3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNFQUFzRTtBQUN0RTs7QUFFQTtBQUNBO0FBQ0EsdUVBQXVFO0FBQ3ZFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0VBQWdFOztBQUVoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUVBQW1FO0FBQ25FO0FBQ0E7O0FBRUEseUVBQXlFOztBQUV6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUVBQXlFOztBQUV6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwRUFBMEU7O0FBRTFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUVBQXFFLGdEQUFnRCxlQUFlOztBQUVwSTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLEtBQUs7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsT0FBTztBQUN4RCxvREFBb0QsT0FBTztBQUMzRCxvREFBb0Q7QUFDcEQsa0RBQWtELE9BQU87QUFDekQsb0RBQW9ELE9BQU87QUFDM0Qsb0RB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QTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDOztBQUVqQyxpQ0FBaUM7O0FBRWpDO0FBQ0Esa0NBQWtDOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCOztBQUV6QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSxxQkFBcUIsaUJBQWlCO0FBQ3RDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FB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QUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxjQUFjO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILFVBQVU7QUFDVixVQUFVO0FBQ1YsV0FBVztBQUNYO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLCtDQUErQztBQUMvQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsMEJBQTBCO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxtQkFBbUIsMEJBQTBCO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7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OztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7O0FBRTlCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQSxxQkFBcUIsb0JBQW9CO0FBQ3pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztB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Q0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RDtBQUM3RDtBQUNBO0FBQ0E7O0FBRUEsdURBQXVEOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4SUFBOEk7QUFDOUk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7O0FBRWhCLDZCQUE2QjtBQUM3QjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLHdCQUF3QjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyx3QkFBd0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLEdBQUc7QUFDSDs7O0FBR0EseUVBQXlFOztBQUV6RSwyR0FBMkc7O0FBRTNHLG1GQUFtRjtBQUNuRjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7OztBQUdILCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMEVBQTBFO0FBQzFFOztBQUVBLGtCQUFrQjs7QUFFbEI7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQixpQkFBaUI7QUFDcEMsdUJBQXVCOztBQUV2QjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxvQkFBb0Isa0JBQWtCO0FBQ3RDO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxxQkFBcUI7O0FBRXJCOztBQUVBLHFCQUFxQixtQkFBbUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7O0FBRW5CLG9EQUFvRDs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEVBQUU7QUFDRjs7O0FBR0EsZUFBZTs7QUFFZixpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7O0FBRTlDO0FBQ0EsaURBQWlEO0FBQ2pEO0FBQ0E7O0FBRUEsdUdBQXVHOztBQUV2RztBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQixLQUFLO0FBQ0wsMkJBQTJCO0FBQzNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEMsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOzs7QUFHQSxvR0FBb0csbUJBQW1CLCtHQUErRzs7QUFFdE8sbVNBQW1TOztBQUVuUyxrR0FBa0c7QUFDbEc7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDLEVBQUU7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUMsRUFBRTtBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIscUJBQXFCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscURBQXFEO0FBQ3JEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7OztBQUdILHFFQUFxRTtBQUNyRTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsNkVBQTZFOztBQUU3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRyxZQUFZLE9BQU8sT0FBTztBQUN4QztBQUNBLGtGQUFrRjtBQUNsRjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7Ozs7Ozs7Ozs7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7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QTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtEOztBQUVsRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7O0FBRTNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBLDRCQUE0Qjs7QUFFNUI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSCwyQkFBMkI7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTtBQUNBLHdDQUF3Qzs7QUFFeEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSx3Q0FBd0M7QUFDeEMsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7O0FBRUE7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUUsYUFBYSxHQUFHLEVBQUU7QUFDcEIsa0NBQWtDLEVBQUUsVUFBVSxFQUFFOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFFOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxzQkFBc0I7QUFDdEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFFOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7Ozs7Ozs7Ozs7OztBQVlBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBLG1FQUFtRTs7QUFFbkU7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0EsMENBQTBDO0FBQzFDLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdCQUF3QjtBQUN4Qix5QkFBeUI7QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDLEVBQUU7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7O0FBRXhCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQyxFQUFFOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7QUFDRDs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUNBLDRCQUE0Qjs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRzs7O0FBR0gsMEZBQTBGOztBQUUxRixtREFBbUQ7QUFDbkQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLLFdBQVc7O0FBRWhCO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSyxXQUFXOztBQUVoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7QUFDRDs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQSxtQkFBbUIsaUJBQWlCO0FBQ3BDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsd0RBQXdELEVBQUU7O0FBRTFEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrRUFBa0U7O0FBRWxFOztBQUVBLHFCQUFxQix1QkFBdUI7QUFDNUM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7Ozs7QUFLQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZDQUE2Qzs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhEQUE4RDtBQUM5RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7Ozs7Ozs7Ozs7Ozs7OztBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUU7QUFDRjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDOztBQUV4QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQ7O0FBRW5EOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7O0FBSUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDOztBQUV0Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpREFBaUQ7O0FBRWpELDRGQUE0RjtBQUM1RixPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7OztBQUdMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1R0FBdUc7QUFDdkc7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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bEM7QUFDQTtBQUNBLEtBQUs7QUFDTDs7O0FBR0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1Q0FBdUM7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUI7O0FBRXZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNa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OztBQUVBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7QUFFVjtBQUNBLHVCQUF1Qjs7QUFFdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7OztBQUdBO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtGQUErRixLQUFLO0FBQ3BHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsZUFBZTtBQUNsQztBQUNBLG9EQUFvRDtBQUNwRCw0Q0FBNEMsSUFBSTtBQUNoRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVELG1DQUFtQztBQUNuQztBQUNBO0FBQ0EsSUFBSSxLQUFLO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9EQUFvRDs7QUFFcEQ7QUFDQSw0QkFBNEI7QUFDNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OztBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQSxDQUFDLEU7Ozs7Ozs7Ozs7O0FDemdpQkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBOzs7Ozs7Ozs7Ozs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFD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Q0EsMkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQzFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHNCQUFzQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUFDekM7QUFDQSxLQUFLO0FBQ0w7QUFDQSw0Q0FBNEM7QUFDNUM7QUFDQSxLQUFLO0FBQ0wscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRDtBQUNqRDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsb0JBQW9CO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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LEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1REFBdUQ7QUFDdkQ7O0FBRUEsNkJBQTZCLG1CQUFtQjs7QUFFaEQ7O0FBRUE7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7OztBQzlZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsV0FBVyxFQUFFO0FBQ3JELHdDQUF3QyxXQUFXLEVBQUU7O0FBRXJEO0FBQ0E7QUFDQTtB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLFlBQVk7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLFlBQVk7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsV0FBVztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEMsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsWUFBWTtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsWUFBWTtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsWUFBWTtBQUMxRDtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsZ0JBQWdCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsWUFBWTtBQUN6RDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSw4QkFBOEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRDtBQUN0RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQywwQkFBMEI7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHFCQUFxQixjQUFjO0FBQ25DO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsWUFBWTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sZUFBZTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHFCQUFxQixlQUFlO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsWUFBWTtBQUMvQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsWUFBWTtBQUMvQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxZQUFZO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsZ0JBQWdCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixPQUFPO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLFlBQVk7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxZQUFZO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQ7QUFDckQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixZQUFZO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZFQUE2RTtBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sS0FBd0I7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsWUFB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QUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTs7Ozs7Ozs7Ozs7O0FDdFBBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLHNCQUFzQjtBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7O0FDbEJBLGUiLCJmaWxlIjoic3RvY2hzcy1jb21tb24uYnVuZGxlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy92YXIgY29uZmlnID0gcmVxdWlyZSgnLi9jb25maWcuanMnKShwcm9jZXNzLmVudi5OT0RFX0VOVik7XG5sZXQgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcblxubGV0IHJvdXRlUHJlZml4ID0gJ3N0b2Noc3MnO1xubGV0IGFwaVByZWZpeCA9ICBwYXRoLmpvaW4ocm91dGVQcmVmaXgsICdhcGknKTtcbmxldCBnZXRCYXNlUGF0aCA9ICgpID0+IHtcbiAgdHJ5IHtcbiAgICBsZXQgYmFzZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Jhc2UnKVxuICAgIGxldCBocmVmID0gYmFzZS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKVxuICAgIHJldHVybiBocmVmXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICcvJ1xuICB9XG59O1xubGV0IGdldEFwaVBhdGggPSAoKSA9PiBwYXRoLmpvaW4oZ2V0QmFzZVBhdGgoKSwgYXBpUHJlZml4KTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgcm91dGVQcmVmaXg6IHJvdXRlUHJlZml4LFxuICAgIGdldEFwaVBhdGg6IGdldEFwaVBhdGgsXG4gICAgZ2V0QmFzZVBhdGg6IGdldEJhc2VQYXRoXG59O1xuIiwiLyoqXG4qIHBsb3RseS5qcyB2MS40Ny4xXG4qIENvcHlyaWdodCAyMDEyLTIwMTksIFBsb3RseSwgSW5jLlxuKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiovXG4hZnVuY3Rpb24odCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9dCgpO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSx0KTtlbHNleyhcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMpLlBsb3RseT10KCl9fShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUscixuKXtmdW5jdGlvbiBpKG8scyl7aWYoIXJbb10pe2lmKCFlW29dKXt2YXIgbD1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFzJiZsKXJldHVybiBsKG8sITApO2lmKGEpcmV0dXJuIGEobywhMCk7dmFyIGM9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBjLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsY312YXIgdT1yW29dPXtleHBvcnRzOnt9fTtlW29dWzBdLmNhbGwodS5leHBvcnRzLGZ1bmN0aW9uKHQpe3JldHVybiBpKGVbb11bMV1bdF18fHQpfSx1LHUuZXhwb3J0cyx0LGUscixuKX1yZXR1cm4gcltvXS5leHBvcnRzfWZvcih2YXIgYT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLG89MDtvPG4ubGVuZ3RoO28rKylpKG5bb10pO3JldHVybiBpfX0oKSh7MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9zcmMvbGliXCIpLGk9e1wiWCxYIGRpdlwiOlwiZGlyZWN0aW9uOmx0cjtmb250LWZhbWlseTonT3BlbiBTYW5zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7bWFyZ2luOjA7cGFkZGluZzowO1wiLFwiWCBpbnB1dCxYIGJ1dHRvblwiOlwiZm9udC1mYW1pbHk6J09wZW4gU2FucycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO1wiLFwiWCBpbnB1dDpmb2N1cyxYIGJ1dHRvbjpmb2N1c1wiOlwib3V0bGluZTpub25lO1wiLFwiWCBhXCI6XCJ0ZXh0LWRlY29yYXRpb246bm9uZTtcIixcIlggYTpob3ZlclwiOlwidGV4dC1kZWNvcmF0aW9uOm5vbmU7XCIsXCJYIC5jcmlzcFwiOlwic2hhcGUtcmVuZGVyaW5nOmNyaXNwRWRnZXM7XCIsXCJYIC51c2VyLXNlbGVjdC1ub25lXCI6XCItd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lOy1vLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtcIixcIlggc3ZnXCI6XCJvdmVyZmxvdzpoaWRkZW47XCIsXCJYIHN2ZyBhXCI6XCJmaWxsOiM0NDdhZGI7XCIsXCJYIHN2ZyBhOmhvdmVyXCI6XCJmaWxsOiMzYzZkYzU7XCIsXCJYIC5tYWluLXN2Z1wiOlwicG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3BvaW50ZXItZXZlbnRzOm5vbmU7XCIsXCJYIC5tYWluLXN2ZyAuZHJhZ2xheWVyXCI6XCJwb2ludGVyLWV2ZW50czphbGw7XCIsXCJYIC5jdXJzb3ItZGVmYXVsdFwiOlwiY3Vyc29yOmRlZmF1bHQ7XCIsXCJYIC5jdXJzb3ItcG9pbnRlclwiOlwiY3Vyc29yOnBvaW50ZXI7XCIsXCJYIC5jdXJzb3ItY3Jvc3NoYWlyXCI6XCJjdXJzb3I6Y3Jvc3NoYWlyO1wiLFwiWCAuY3Vyc29yLW1vdmVcIjpcImN1cnNvcjptb3ZlO1wiLFwiWCAuY3Vyc29yLWNvbC1yZXNpemVcIjpcImN1cnNvcjpjb2wtcmVzaXplO1wiLFwiWCAuY3Vyc29yLXJvdy1yZXNpemVcIjpcImN1cnNvcjpyb3ctcmVzaXplO1wiLFwiWCAuY3Vyc29yLW5zLXJlc2l6ZVwiOlwiY3Vyc29yOm5zLXJlc2l6ZTtcIixcIlggLmN1cnNvci1ldy1yZXNpemVcIjpcImN1cnNvcjpldy1yZXNpemU7XCIsXCJYIC5jdXJzb3Itc3ctcmVzaXplXCI6XCJjdXJzb3I6c3ctcmVzaXplO1wiLFwiWCAuY3Vyc29yLXMtcmVzaXplXCI6XCJjdXJzb3I6cy1yZXNpemU7XCIsXCJYIC5jdXJzb3Itc2UtcmVzaXplXCI6XCJjdXJzb3I6c2UtcmVzaXplO1wiLFwiWCAuY3Vyc29yLXctcmVzaXplXCI6XCJjdXJzb3I6dy1yZXNpemU7XCIsXCJYIC5jdXJzb3ItZS1yZXNpemVcIjpcImN1cnNvcjplLXJlc2l6ZTtcIixcIlggLmN1cnNvci1udy1yZXNpemVcIjpcImN1cnNvcjpudy1yZXNpemU7XCIsXCJYIC5jdXJzb3Itbi1yZXNpemVcIjpcImN1cnNvcjpuLXJlc2l6ZTtcIixcIlggLmN1cnNvci1uZS1yZXNpemVcIjpcImN1cnNvcjpuZS1yZXNpemU7XCIsXCJYIC5jdXJzb3ItZ3JhYlwiOlwiY3Vyc29yOi13ZWJraXQtZ3JhYjtjdXJzb3I6Z3JhYjtcIixcIlggLm1vZGViYXJcIjpcInBvc2l0aW9uOmFic29sdXRlO3RvcDoycHg7cmlnaHQ6MnB4O1wiLFwiWCAuZWFzZS1iZ1wiOlwiLXdlYmtpdC10cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMC4zcyBlYXNlIDBzOy1tb3otdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZSAwczstbXMtdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZSAwczstby10cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMC4zcyBlYXNlIDBzO3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAwLjNzIGVhc2UgMHM7XCIsXCJYIC5tb2RlYmFyLS1ob3Zlcj46bm90KC53YXRlcm1hcmspXCI6XCJvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgMC4zcyBlYXNlIDBzOy1tb3otdHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZSAwczstbXMtdHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZSAwczstby10cmFuc2l0aW9uOm9wYWNpdHkgMC4zcyBlYXNlIDBzO3RyYW5zaXRpb246b3BhY2l0eSAwLjNzIGVhc2UgMHM7XCIsXCJYOmhvdmVyIC5tb2RlYmFyLS1ob3ZlciAubW9kZWJhci1ncm91cFwiOlwib3BhY2l0eToxO1wiLFwiWCAubW9kZWJhci1ncm91cFwiOlwiZmxvYXQ6bGVmdDtkaXNwbGF5OmlubGluZS1ibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZy1sZWZ0OjhweDtwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2hpdGUtc3BhY2U6bm93cmFwO1wiLFwiWCAubW9kZWJhci1idG5cIjpcInBvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZToxNnB4O3BhZGRpbmc6M3B4IDRweDtoZWlnaHQ6MjJweDtjdXJzb3I6cG9pbnRlcjtsaW5lLWhlaWdodDpub3JtYWw7Ym94LXNpemluZzpib3JkZXItYm94O1wiLFwiWCAubW9kZWJhci1idG4gc3ZnXCI6XCJwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6MnB4O1wiLFwiWCAubW9kZWJhci52ZXJ0aWNhbFwiOlwiZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LXdyYXA6d3JhcDthbGlnbi1jb250ZW50OmZsZXgtZW5kO21heC1oZWlnaHQ6MTAwJTtcIixcIlggLm1vZGViYXIudmVydGljYWwgc3ZnXCI6XCJ0b3A6LTFweDtcIixcIlggLm1vZGViYXIudmVydGljYWwgLm1vZGViYXItZ3JvdXBcIjpcImRpc3BsYXk6YmxvY2s7ZmxvYXQ6bm9uZTtwYWRkaW5nLWxlZnQ6MHB4O3BhZGRpbmctYm90dG9tOjhweDtcIixcIlggLm1vZGViYXIudmVydGljYWwgLm1vZGViYXItZ3JvdXAgLm1vZGViYXItYnRuXCI6XCJkaXNwbGF5OmJsb2NrO3RleHQtYWxpZ246Y2VudGVyO1wiLFwiWCBbZGF0YS10aXRsZV06YmVmb3JlLFggW2RhdGEtdGl0bGVdOmFmdGVyXCI6XCJwb3NpdGlvbjphYnNvbHV0ZTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApOy1vLXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7ZGlzcGxheTpub25lO29wYWNpdHk6MDt6LWluZGV4OjEwMDE7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MTEwJTtyaWdodDo1MCU7XCIsXCJYIFtkYXRhLXRpdGxlXTpob3ZlcjpiZWZvcmUsWCBbZGF0YS10aXRsZV06aG92ZXI6YWZ0ZXJcIjpcImRpc3BsYXk6YmxvY2s7b3BhY2l0eToxO1wiLFwiWCBbZGF0YS10aXRsZV06YmVmb3JlXCI6XCJjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOjZweCBzb2xpZCB0cmFuc3BhcmVudDt6LWluZGV4OjEwMDI7bWFyZ2luLXRvcDotMTJweDtib3JkZXItYm90dG9tLWNvbG9yOiM2OTczOGE7bWFyZ2luLXJpZ2h0Oi02cHg7XCIsXCJYIFtkYXRhLXRpdGxlXTphZnRlclwiOlwiY29udGVudDphdHRyKGRhdGEtdGl0bGUpO2JhY2tncm91bmQ6IzY5NzM4YTtjb2xvcjp3aGl0ZTtwYWRkaW5nOjhweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEycHg7d2hpdGUtc3BhY2U6bm93cmFwO21hcmdpbi1yaWdodDotMThweDtib3JkZXItcmFkaXVzOjJweDtcIixcIlggLnZlcnRpY2FsIFtkYXRhLXRpdGxlXTpiZWZvcmUsWCAudmVydGljYWwgW2RhdGEtdGl0bGVdOmFmdGVyXCI6XCJ0b3A6MCU7cmlnaHQ6MjAwJTtcIixcIlggLnZlcnRpY2FsIFtkYXRhLXRpdGxlXTpiZWZvcmVcIjpcImJvcmRlcjo2cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQtY29sb3I6IzY5NzM4YTttYXJnaW4tdG9wOjhweDttYXJnaW4tcmlnaHQ6LTMwcHg7XCIsXCJYIC5zZWxlY3Qtb3V0bGluZVwiOlwiZmlsbDpub25lO3N0cm9rZS13aWR0aDoxO3NoYXBlLXJlbmRlcmluZzpjcmlzcEVkZ2VzO1wiLFwiWCAuc2VsZWN0LW91dGxpbmUtMVwiOlwic3Ryb2tlOndoaXRlO1wiLFwiWCAuc2VsZWN0LW91dGxpbmUtMlwiOlwic3Ryb2tlOmJsYWNrO3N0cm9rZS1kYXNoYXJyYXk6MnB4IDJweDtcIixZOlwiZm9udC1mYW1pbHk6J09wZW4gU2Fucyc7cG9zaXRpb246Zml4ZWQ7dG9wOjUwcHg7cmlnaHQ6MjBweDt6LWluZGV4OjEwMDAwO2ZvbnQtc2l6ZToxMHB0O21heC13aWR0aDoxODBweDtcIixcIlkgcFwiOlwibWFyZ2luOjA7XCIsXCJZIC5ub3RpZmllci1ub3RlXCI6XCJtaW4td2lkdGg6MTgwcHg7bWF4LXdpZHRoOjI1MHB4O2JvcmRlcjoxcHggc29saWQgI2ZmZjt6LWluZGV4OjMwMDA7bWFyZ2luOjA7YmFja2dyb3VuZC1jb2xvcjojOGM5N2FmO2JhY2tncm91bmQtY29sb3I6cmdiYSgxNDAsMTUxLDE3NSwwLjkpO2NvbG9yOiNmZmY7cGFkZGluZzoxMHB4O292ZXJmbG93LXdyYXA6YnJlYWstd29yZDt3b3JkLXdyYXA6YnJlYWstd29yZDstbXMtaHlwaGVuczphdXRvOy13ZWJraXQtaHlwaGVuczphdXRvO2h5cGhlbnM6YXV0bztcIixcIlkgLm5vdGlmaWVyLWNsb3NlXCI6XCJjb2xvcjojZmZmO29wYWNpdHk6MC44O2Zsb2F0OnJpZ2h0O3BhZGRpbmc6MCA1cHg7YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2ZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OmJvbGQ7bGluZS1oZWlnaHQ6MjBweDtcIixcIlkgLm5vdGlmaWVyLWNsb3NlOmhvdmVyXCI6XCJjb2xvcjojNDQ0O3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpwb2ludGVyO1wifTtmb3IodmFyIGEgaW4gaSl7dmFyIG89YS5yZXBsYWNlKC9eLC8sXCIgLFwiKS5yZXBsYWNlKC9YL2csXCIuanMtcGxvdGx5LXBsb3QgLnBsb3RseVwiKS5yZXBsYWNlKC9ZL2csXCIucGxvdGx5LW5vdGlmaWVyXCIpO24uYWRkU3R5bGVSdWxlKG8saVthXSl9fSx7XCIuLi9zcmMvbGliXCI6NzAxfV0sMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17dW5kbzp7d2lkdGg6ODU3LjEsaGVpZ2h0OjFlMyxwYXRoOlwibTg1NyAzNTBxMC04Ny0zNC0xNjZ0LTkxLTEzNy0xMzctOTItMTY2LTM0cS05NiAwLTE4MyA0MXQtMTQ3IDExNHEtNCA2LTQgMTN0NSAxMWw3NiA3N3E2IDUgMTQgNSA5LTEgMTMtNyA0MS01MyAxMDAtODJ0MTI2LTI5cTU4IDAgMTEwIDIzdDkyIDYxIDYxIDkxIDIyIDExMS0yMiAxMTEtNjEgOTEtOTIgNjEtMTEwIDIzcS01NSAwLTEwNS0yMHQtOTAtNTdsNzctNzdxMTctMTYgOC0zOC0xMC0yMy0zMy0yM2gtMjUwcS0xNSAwLTI1IDExdC0xMSAyNXYyNTBxMCAyNCAyMiAzMyAyMiAxMCAzOS04bDcyLTcycTYwIDU3IDEzNyA4OHQxNTkgMzFxODcgMCAxNjYtMzR0MTM3LTkyIDkxLTEzNyAzNC0xNjZ6XCIsdHJhbnNmb3JtOlwibWF0cml4KDEgMCAwIC0xIDAgODUwKVwifSxob21lOnt3aWR0aDo5MjguNixoZWlnaHQ6MWUzLHBhdGg6XCJtNzg2IDI5NnYtMjY3cTAtMTUtMTEtMjZ0LTI1LTEwaC0yMTR2MjE0aC0xNDN2LTIxNGgtMjE0cS0xNSAwLTI1IDEwdC0xMSAyNnYyNjdxMCAxIDAgMnQwIDJsMzIxIDI2NCAzMjEtMjY0cTEtMSAxLTR6IG0xMjQgMzlsLTM0LTQxcS01LTUtMTItNmgtMnEtNyAwLTEyIDNsLTM4NiAzMjItMzg2LTMyMnEtNy00LTEzLTQtNyAyLTEyIDdsLTM1IDQxcS00IDUtMyAxM3Q2IDEybDQwMSAzMzRxMTggMTUgNDIgMTV0NDMtMTVsMTM2LTExNHYxMDlxMCA4IDUgMTN0MTMgNWgxMDdxOCAwIDEzLTV0NS0xM3YtMjI3bDEyMi0xMDJxNS01IDYtMTJ0LTQtMTN6XCIsdHJhbnNmb3JtOlwibWF0cml4KDEgMCAwIC0xIDAgODUwKVwifSxcImNhbWVyYS1yZXRyb1wiOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOlwibTUxOCAzODZxMCA4LTUgMTN0LTEzIDVxLTM3IDAtNjMtMjd0LTI2LTYzcTAtOCA1LTEzdDEzLTUgMTIgNSA1IDEzcTAgMjMgMTYgMzh0MzggMTZxOCAwIDEzIDV0NSAxM3ogbTEyNS03M3EwLTU5LTQyLTEwMXQtMTAxLTQyLTEwMSA0Mi00MiAxMDEgNDIgMTAxIDEwMSA0MiAxMDEtNDIgNDItMTAxeiBtLTU3Mi0zMjBoODU4djcxaC04NTh2LTcxeiBtNjQzIDMyMHEwIDg5LTYyIDE1MnQtMTUyIDYyLTE1MS02Mi02My0xNTIgNjMtMTUxIDE1MS02MyAxNTIgNjMgNjIgMTUxeiBtLTU3MSAzNThoMjE0djcyaC0yMTR2LTcyeiBtLTcyLTEwN2g4NTh2MTQzaC00NjJsLTM2LTcxaC0zNjB2LTcyeiBtOTI5IDE0M3YtNzE0cTAtMzAtMjEtNTF0LTUwLTIxaC04NThxLTI5IDAtNTAgMjF0LTIxIDUxdjcxNHEwIDMwIDIxIDUxdDUwIDIxaDg1OHEyOSAwIDUwLTIxdDIxLTUxelwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0sem9vbWJveDp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDpcIm0xMDAwLTI1bC0yNTAgMjUxYzQwIDYzIDYzIDEzOCA2MyAyMTggMCAyMjQtMTgyIDQwNi00MDcgNDA2LTIyNCAwLTQwNi0xODItNDA2LTQwNnMxODMtNDA2IDQwNy00MDZjODAgMCAxNTUgMjIgMjE4IDYybDI1MC0yNTAgMTI1IDEyNXogbS04MTIgMjUwbDAgNDM4IDQzNyAwIDAtNDM4LTQzNyAweiBtNjIgMzc1bDMxMyAwIDAtMzEyLTMxMyAwIDAgMzEyelwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0scGFuOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOlwibTEwMDAgMzUwbC0xODcgMTg4IDAtMTI1LTI1MCAwIDAgMjUwIDEyNSAwLTE4OCAxODctMTg3LTE4NyAxMjUgMCAwLTI1MC0yNTAgMCAwIDEyNS0xODgtMTg4IDE4Ni0xODcgMCAxMjUgMjUyIDAgMC0yNTAtMTI1IDAgMTg3LTE4OCAxODggMTg4LTEyNSAwIDAgMjUwIDI1MCAwIDAtMTI2IDE4NyAxODh6XCIsdHJhbnNmb3JtOlwibWF0cml4KDEgMCAwIC0xIDAgODUwKVwifSx6b29tX3BsdXM6e3dpZHRoOjg3NSxoZWlnaHQ6MWUzLHBhdGg6XCJtMSA3ODdsMC04NzUgODc1IDAgMCA4NzUtODc1IDB6IG02ODctNTAwbC0xODcgMCAwLTE4Ny0xMjUgMCAwIDE4Ny0xODggMCAwIDEyNSAxODggMCAwIDE4NyAxMjUgMCAwLTE4NyAxODcgMCAwLTEyNXpcIix0cmFuc2Zvcm06XCJtYXRyaXgoMSAwIDAgLTEgMCA4NTApXCJ9LHpvb21fbWludXM6e3dpZHRoOjg3NSxoZWlnaHQ6MWUzLHBhdGg6XCJtMCA3ODhsMC04NzYgODc1IDAgMCA4NzYtODc1IDB6IG02ODgtNTAwbC01MDAgMCAwIDEyNSA1MDAgMCAwLTEyNXpcIix0cmFuc2Zvcm06XCJtYXRyaXgoMSAwIDAgLTEgMCA4NTApXCJ9LGF1dG9zY2FsZTp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDpcIm0yNTAgODUwbC0xODcgMC02MyAwIDAtNjIgMC0xODggNjMgMCAwIDE4OCAxODcgMCAwIDYyeiBtNjg4IDBsLTE4OCAwIDAtNjIgMTg4IDAgMC0xODggNjIgMCAwIDE4OCAwIDYyLTYyIDB6IG0tODc1LTkzOGwwIDE4OC02MyAwIDAtMTg4IDAtNjIgNjMgMCAxODcgMCAwIDYyLTE4NyAweiBtODc1IDE4OGwwLTE4OC0xODggMCAwLTYyIDE4OCAwIDYyIDAgMCA2MiAwIDE4OC02MiAweiBtLTEyNSAxODhsLTEgMC05My05NC0xNTYgMTU2IDE1NiAxNTYgOTItOTMgMiAwIDAgMjUwLTI1MCAwIDAtMiA5My05Mi0xNTYtMTU2LTE1NiAxNTYgOTQgOTIgMCAyLTI1MCAwIDAtMjUwIDAgMCA5MyA5MyAxNTctMTU2LTE1Ny0xNTYtOTMgOTQgMCAwIDAtMjUwIDI1MCAwIDAgMC05NCA5MyAxNTYgMTU3IDE1Ni0xNTctOTMtOTMgMCAwIDI1MCAwIDAgMjUwelwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0sdG9vbHRpcF9iYXNpYzp7d2lkdGg6MTUwMCxoZWlnaHQ6MWUzLHBhdGg6XCJtMzc1IDcyNWwwIDAtMzc1LTM3NSAzNzUtMzc0IDAtMSAxMTI1IDAgMCA3NTAtMTEyNSAwelwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0sdG9vbHRpcF9jb21wYXJlOnt3aWR0aDoxMTI1LGhlaWdodDoxZTMscGF0aDpcIm0xODcgNzg2bDAgMi0xODctMTg4IDE4OC0xODcgMCAwIDkzNyAwIDAgMzczLTkzOCAweiBtMC00OTlsMCAxLTE4Ny0xODggMTg4LTE4OCAwIDAgOTM3IDAgMCAzNzYtOTM4LTF6XCIsdHJhbnNmb3JtOlwibWF0cml4KDEgMCAwIC0xIDAgODUwKVwifSxwbG90bHlsb2dvOnt3aWR0aDoxNTQyLGhlaWdodDoxZTMscGF0aDpcIm0wLTEwaDE4MnYtMTQwaC0xODJ2MTQweiBtMjI4IDE0NmgxODN2LTI4NmgtMTgzdjI4NnogbTIyNSA3MTRoMTgydi0xMDAwaC0xODJ2MTAwMHogbTIyNS0yODVoMTgydi03MTVoLTE4MnY3MTV6IG0yMjUgMTQyaDE4M3YtODU3aC0xODN2ODU3eiBtMjMxLTQyOGgxODJ2LTQyOWgtMTgydjQyOXogbTIyNS0yOTFoMTgzdi0xMzhoLTE4M3YxMzh6XCIsdHJhbnNmb3JtOlwibWF0cml4KDEgMCAwIC0xIDAgODUwKVwifSxcInotYXhpc1wiOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOlwibTgzMyA1bC0xNyAxMDh2NDFsLTEzMC02NSAxMzAtNjZjMCAwIDAgMzggMCAzOSAwLTEgMzYtMTQgMzktMjUgNC0xNS02LTIyLTE2LTMwLTE1LTEyLTM5LTE2LTU2LTIwLTkwLTIyLTE4Ny0yMy0yNzktMjMtMjYxIDAtMzQxIDM0LTM1MyA1OSAzIDYwIDIyOCAxMTAgMjI4IDExMC0xNDAtOC0zNTEtMzUtMzUxLTExNiAwLTEyMCAyOTMtMTQyIDQ3NC0xNDIgMTU1IDAgNDc3IDIyIDQ3NyAxNDIgMCA1MC03NCA3OS0xNjMgOTZ6IG0tMzc0IDk0Yy01OC01LTk5LTIxLTk5LTQwIDAtMjQgNjUtNDMgMTQ0LTQzIDc5IDAgMTQzIDE5IDE0MyA0MyAwIDE5LTQyIDM0LTk4IDQwdjIxNmg4N2wtMTMyIDEzNS0xMzMtMTM1aDg4di0yMTZ6IG0xNjcgNTE1aC0xMzZ2MWMxNiAxNiAzMSAzNCA0NiA1Mmw4NCAxMDl2NTRoLTIzMHYtNzFoMTI0di0xYy0xNi0xNy0yOC0zMi00NC01MWwtODktMTE0di01MWgyNDV2NzJ6XCIsdHJhbnNmb3JtOlwibWF0cml4KDEgMCAwIC0xIDAgODUwKVwifSxcIjNkX3JvdGF0ZVwiOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOlwibTkyMiA2NjBjLTUgNC05IDctMTQgMTEtMzU5IDI2My01ODAtMzEtNTgwLTMxbC0xMDIgMjggNTgtNDAwYzAgMSAxIDEgMiAyIDExOCAxMDggMzUxIDI0OSAzNTEgMjQ5cy02MiAyNy0xMDAgNDJjODggODMgMjIyIDE4MyAzNDcgMTIyIDE2LTggMzAtMTcgNDQtMjctMiAxLTQgMi02IDR6IG0zNi0zMjljMCAwIDY0IDIyOS04OCAyOTYtNjIgMjctMTI0IDE0LTE3NS0xMSAxNTctNzggMjI1LTIwOCAyNDktMjY2IDgtMTkgMTEtMzEgMTEtMzEgMiA1IDYgMTUgMTEgMzItNS0xMy04LTIwLTgtMjB6IG0tNzc1LTIzOWM3MC0zMSAxMTctNTAgMTk4LTMyLTEyMSA4MC0xOTkgMzQ2LTE5OSAzNDZsLTk2LTE1LTU4LTEyYzAgMCA1NS0yMjYgMTU1LTI4N3ogbTYwMyAxMzNsLTMxNy0xMzljMCAwIDQtNCAxOS0xNCA3LTUgMjQtMTUgMjQtMTVzLTE3Ny0xNDctMzg5IDRjMjM1LTI4NyA1MzYtMTEyIDUzNi0xMTJsMzEtMjIgMTAwIDI5OS00LTF6IG0tMjk4LTE1M2M2LTQgMTQtOSAyNC0xNSAwIDAtMTcgMTAtMjQgMTV6XCIsdHJhbnNmb3JtOlwibWF0cml4KDEgMCAwIC0xIDAgODUwKVwifSxjYW1lcmE6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6XCJtNTAwIDQ1MGMtODMgMC0xNTAtNjctMTUwLTE1MCAwLTgzIDY3LTE1MCAxNTAtMTUwIDgzIDAgMTUwIDY3IDE1MCAxNTAgMCA4My02NyAxNTAtMTUwIDE1MHogbTQwMCAxNTBoLTEyMGMtMTYgMC0zNCAxMy0zOSAyOWwtMzEgOTNjLTYgMTUtMjMgMjgtNDAgMjhoLTM0MGMtMTYgMC0zNC0xMy0zOS0yOGwtMzEtOTRjLTYtMTUtMjMtMjgtNDAtMjhoLTEyMGMtNTUgMC0xMDAtNDUtMTAwLTEwMHYtNDUwYzAtNTUgNDUtMTAwIDEwMC0xMDBoODAwYzU1IDAgMTAwIDQ1IDEwMCAxMDB2NDUwYzAgNTUtNDUgMTAwLTEwMCAxMDB6IG0tNDAwLTU1MGMtMTM4IDAtMjUwIDExMi0yNTAgMjUwIDAgMTM4IDExMiAyNTAgMjUwIDI1MCAxMzggMCAyNTAtMTEyIDI1MC0yNTAgMC0xMzgtMTEyLTI1MC0yNTAtMjUweiBtMzY1IDM4MGMtMTkgMC0zNSAxNi0zNSAzNSAwIDE5IDE2IDM1IDM1IDM1IDE5IDAgMzUtMTYgMzUtMzUgMC0xOS0xNi0zNS0zNS0zNXpcIix0cmFuc2Zvcm06XCJtYXRyaXgoMSAwIDAgLTEgMCA4NTApXCJ9LG1vdmllOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOlwibTkzOCA0MTNsLTE4OC0xMjVjMCAzNy0xNyA3MS00NCA5NCA2NCAzOCAxMDcgMTA3IDEwNyAxODcgMCAxMjEtOTggMjE5LTIxOSAyMTktMTIxIDAtMjE5LTk4LTIxOS0yMTkgMC02MSAyNS0xMTcgNjYtMTU2aC0xMTVjMzAgMzMgNDkgNzYgNDkgMTI1IDAgMTAzLTg0IDE4Ny0xODcgMTg3cy0xODgtODQtMTg4LTE4N2MwLTU3IDI2LTEwNyA2NS0xNDEtMzgtMjItNjUtNjItNjUtMTA5di0yNTBjMC03MCA1Ni0xMjYgMTI1LTEyNmg1MDBjNjkgMCAxMjUgNTYgMTI1IDEyNmwxODgtMTI2YzM0IDAgNjIgMjggNjIgNjN2Mzc1YzAgMzUtMjggNjMtNjIgNjN6IG0tNzUwIDBjLTY5IDAtMTI1IDU2LTEyNSAxMjVzNTYgMTI1IDEyNSAxMjUgMTI1LTU2IDEyNS0xMjUtNTYtMTI1LTEyNS0xMjV6IG00MDYtMWMtODcgMC0xNTcgNzAtMTU3IDE1NyAwIDg2IDcwIDE1NiAxNTcgMTU2czE1Ni03MCAxNTYtMTU2LTcwLTE1Ny0xNTYtMTU3elwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0scXVlc3Rpb246e3dpZHRoOjg1Ny4xLGhlaWdodDoxZTMscGF0aDpcIm01MDAgODJ2MTA3cTAgOC01IDEzdC0xMyA1aC0xMDdxLTggMC0xMy01dC01LTEzdi0xMDdxMC04IDUtMTN0MTMtNWgxMDdxOCAwIDEzIDV0NSAxM3ogbTE0MyAzNzVxMCA0OS0zMSA5MXQtNzcgNjUtOTUgMjNxLTEzNiAwLTIwNy0xMTktOS0xNCA0LTI0bDc0LTU1cTQtNCAxMC00IDkgMCAxNCA3IDMwIDM4IDQ4IDUxIDE5IDE0IDQ4IDE0IDI3IDAgNDgtMTV0MjEtMzNxMC0yMS0xMS0zNHQtMzgtMjVxLTM1LTE2LTY1LTQ4dC0yOS03MHYtMjBxMC04IDUtMTN0MTMtNWgxMDdxOCAwIDEzIDV0NSAxM3EwIDEwIDEyIDI3dDMwIDI4cTE4IDEwIDI4IDE2dDI1IDE5IDI1IDI3IDE2IDM0IDcgNDV6IG0yMTQtMTA3cTAtMTE3LTU3LTIxNXQtMTU2LTE1Ni0yMTUtNTgtMjE2IDU4LTE1NSAxNTYtNTggMjE1IDU4IDIxNSAxNTUgMTU2IDIxNiA1OCAyMTUtNTggMTU2LTE1NiA1Ny0yMTV6XCIsdHJhbnNmb3JtOlwibWF0cml4KDEgMCAwIC0xIDAgODUwKVwifSxkaXNrOnt3aWR0aDo4NTcuMSxoZWlnaHQ6MWUzLHBhdGg6XCJtMjE0LTdoNDI5djIxNGgtNDI5di0yMTR6IG01MDAgMGg3MnY1MDBxMCA4LTYgMjF0LTExIDIwbC0xNTcgMTU2cS01IDYtMTkgMTJ0LTIyIDV2LTIzMnEwLTIyLTE1LTM4dC0zOC0xNmgtMzIycS0yMiAwLTM3IDE2dC0xNiAzOHYyMzJoLTcydi03MTRoNzJ2MjMycTAgMjIgMTYgMzh0MzcgMTZoNDY1cTIyIDAgMzgtMTZ0MTUtMzh2LTIzMnogbS0yMTQgNTE4djE3OHEwIDgtNSAxM3QtMTMgNWgtMTA3cS03IDAtMTMtNXQtNS0xM3YtMTc4cTAtOCA1LTEzdDEzLTVoMTA3cTcgMCAxMyA1dDUgMTN6IG0zNTctMTh2LTUxOHEwLTIyLTE1LTM4dC0zOC0xNmgtNzUwcS0yMyAwLTM4IDE2dC0xNiAzOHY3NTBxMCAyMiAxNiAzOHQzOCAxNmg1MTdxMjMgMCA1MC0xMnQ0Mi0yNmwxNTYtMTU3cTE2LTE1IDI3LTQydDExLTQ5elwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0sbGFzc286e3dpZHRoOjEwMzEsaGVpZ2h0OjFlMyxwYXRoOlwibTEwMTggNTM4Yy0zNiAyMDctMjkwIDMzNi01NjggMjg2LTI3Ny00OC00NzMtMjU2LTQzNi00NjMgMTAtNTcgMzYtMTA4IDc2LTE1MS0xMy02NiAxMS0xMzcgNjgtMTgzIDM0LTI4IDc1LTQxIDExNC00MmwtNTUtNzAgMCAwYy0yLTEtMy0yLTQtMy0xMC0xNC04LTM0IDUtNDUgMTQtMTEgMzQtOCA0NSA0IDEgMSAyIDMgMiA1bDAgMCAxMTMgMTQwYzE2IDExIDMxIDI0IDQ1IDQwIDQgMyA2IDcgOCAxMSA0OC0zIDEwMCAwIDE1MSA5IDI3OCA0OCA0NzMgMjU1IDQzNiA0NjJ6IG0tNjI0LTM3OWMtODAgMTQtMTQ5IDQ4LTE5NyA5NiA0MiA0MiAxMDkgNDcgMTU2IDkgMzMtMjYgNDctNjYgNDEtMTA1eiBtLTE4Ny03NGMtMTkgMTYtMzMgMzctMzkgNjAgNTAtMzIgMTA5LTU1IDE3NC02OC00Mi0yNS05NS0yNC0xMzUgOHogbTM2MCA3NWMtMzQtNy02OS05LTEwMi04IDggNjItMTYgMTI4LTY4IDE3MC03MyA1OS0xNzUgNTQtMjQ0LTUtOSAyMC0xNiA0MC0yMCA2MS0yOCAxNTkgMTIxIDMxNyAzMzMgMzU0czQwNy02MCA0MzQtMjE3YzI4LTE1OS0xMjEtMzE4LTMzMy0zNTV6XCIsdHJhbnNmb3JtOlwibWF0cml4KDEgMCAwIC0xIDAgODUwKVwifSxzZWxlY3Rib3g6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6XCJtMCA4NTBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODYgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NSAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg2IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0tODU3LTI4NmwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTg1NyAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtLTg1Ny0yODVsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG04NTcgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbS04NTctMjg2bDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg2IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODUgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAwelwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0sc3Bpa2VsaW5lOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOlwiTTUxMiA0MDljMC01Ny00Ni0xMDQtMTAzLTEwNC01NyAwLTEwNCA0Ny0xMDQgMTA0IDAgNTcgNDcgMTAzIDEwNCAxMDMgNTcgMCAxMDMtNDYgMTAzLTEwM3ogbS0zMjctMzlsOTIgMCAwIDkyLTkyIDB6IG0tMTg1IDBsOTIgMCAwIDkyLTkyIDB6IG0zNzAtMTg2bDkyIDAgMCA5My05MiAweiBtMC0xODRsOTIgMCAwIDkyLTkyIDB6XCIsdHJhbnNmb3JtOlwibWF0cml4KDEuNSAwIDAgLTEuNSAwIDg1MClcIn0sbmV3cGxvdGx5bG9nbzp7bmFtZTpcIm5ld3Bsb3RseWxvZ29cIixzdmc6XCI8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDEzMiAxMzInPjxkZWZzPjxzdHlsZT4uY2xzLTEge2ZpbGw6ICMxMTlkZmY7fSAuY2xzLTIge2ZpbGw6ICMyNWZlZmQ7fSAuY2xzLTMge2ZpbGw6ICNmZmY7fTwvc3R5bGU+PC9kZWZzPjx0aXRsZT5wbG90bHktbG9nb21hcms8L3RpdGxlPjxnIGlkPSdzeW1ib2wnPjxyZWN0IGNsYXNzPSdjbHMtMScgd2lkdGg9JzEzMicgaGVpZ2h0PScxMzInIHJ4PSc2JyByeT0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nNzgnIGN5PSc1NCcgcj0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nMTAyJyBjeT0nMzAnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9Jzc4JyBjeT0nMzAnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9JzU0JyBjeT0nMzAnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9JzMwJyBjeT0nMzAnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9JzMwJyBjeT0nNTQnIHI9JzYnLz48cGF0aCBjbGFzcz0nY2xzLTMnIGQ9J00zMCw3MmE2LDYsMCwwLDAtNiw2djI0YTYsNiwwLDAsMCwxMiwwVjc4QTYsNiwwLDAsMCwzMCw3MlonLz48cGF0aCBjbGFzcz0nY2xzLTMnIGQ9J003OCw3MmE2LDYsMCwwLDAtNiw2djI0YTYsNiwwLDAsMCwxMiwwVjc4QTYsNiwwLDAsMCw3OCw3MlonLz48cGF0aCBjbGFzcz0nY2xzLTMnIGQ9J001NCw0OGE2LDYsMCwwLDAtNiw2djQ4YTYsNiwwLDAsMCwxMiwwVjU0QTYsNiwwLDAsMCw1NCw0OFonLz48cGF0aCBjbGFzcz0nY2xzLTMnIGQ9J00xMDIsNDhhNiw2LDAsMCwwLTYsNnY0OGE2LDYsMCwwLDAsMTIsMFY1NEE2LDYsMCwwLDAsMTAyLDQ4WicvPjwvZz48L3N2Zz5cIn19fSx7fV0sMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYW5zZm9ybXMvYWdncmVnYXRlXCIpfSx7XCIuLi9zcmMvdHJhbnNmb3Jtcy9hZ2dyZWdhdGVcIjoxMTg4fV0sNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9iYXJcIil9LHtcIi4uL3NyYy90cmFjZXMvYmFyXCI6ODQ2fV0sNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9iYXJwb2xhclwiKX0se1wiLi4vc3JjL3RyYWNlcy9iYXJwb2xhclwiOjg1OH1dLDY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvYm94XCIpfSx7XCIuLi9zcmMvdHJhY2VzL2JveFwiOjg2OH1dLDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy9jb21wb25lbnRzL2NhbGVuZGFyc1wiKX0se1wiLi4vc3JjL2NvbXBvbmVudHMvY2FsZW5kYXJzXCI6NTc2fV0sODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9jYW5kbGVzdGlja1wiKX0se1wiLi4vc3JjL3RyYWNlcy9jYW5kbGVzdGlja1wiOjg3N31dLDk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvY2FycGV0XCIpfSx7XCIuLi9zcmMvdHJhY2VzL2NhcnBldFwiOjg5Nn1dLDEwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL2Nob3JvcGxldGhcIil9LHtcIi4uL3NyYy90cmFjZXMvY2hvcm9wbGV0aFwiOjkxMH1dLDExOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL2NvbmVcIil9LHtcIi4uL3NyYy90cmFjZXMvY29uZVwiOjkxOH1dLDEyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL2NvbnRvdXJcIil9LHtcIi4uL3NyYy90cmFjZXMvY29udG91clwiOjkzM31dLDEzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL2NvbnRvdXJjYXJwZXRcIil9LHtcIi4uL3NyYy90cmFjZXMvY29udG91cmNhcnBldFwiOjk0NH1dLDE0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvY29yZVwiKX0se1wiLi4vc3JjL2NvcmVcIjo2ODB9XSwxNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYW5zZm9ybXMvZmlsdGVyXCIpfSx7XCIuLi9zcmMvdHJhbnNmb3Jtcy9maWx0ZXJcIjoxMTg5fV0sMTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFuc2Zvcm1zL2dyb3VwYnlcIil9LHtcIi4uL3NyYy90cmFuc2Zvcm1zL2dyb3VwYnlcIjoxMTkwfV0sMTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvaGVhdG1hcFwiKX0se1wiLi4vc3JjL3RyYWNlcy9oZWF0bWFwXCI6OTU2fV0sMTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvaGVhdG1hcGdsXCIpfSx7XCIuLi9zcmMvdHJhY2VzL2hlYXRtYXBnbFwiOjk2NX1dLDE5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL2hpc3RvZ3JhbVwiKX0se1wiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW1cIjo5Nzd9XSwyMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZFwiKX0se1wiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZFwiOjk4NH1dLDIxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL2hpc3RvZ3JhbTJkY29udG91clwiKX0se1wiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZGNvbnRvdXJcIjo5ODh9XSwyMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2NvcmVcIik7bi5yZWdpc3RlcihbdChcIi4vYmFyXCIpLHQoXCIuL2JveFwiKSx0KFwiLi9oZWF0bWFwXCIpLHQoXCIuL2hpc3RvZ3JhbVwiKSx0KFwiLi9oaXN0b2dyYW0yZFwiKSx0KFwiLi9oaXN0b2dyYW0yZGNvbnRvdXJcIiksdChcIi4vY29udG91clwiKSx0KFwiLi9zY2F0dGVydGVybmFyeVwiKSx0KFwiLi92aW9saW5cIiksdChcIi4vd2F0ZXJmYWxsXCIpLHQoXCIuL3BpZVwiKSx0KFwiLi9zdW5idXJzdFwiKSx0KFwiLi9zY2F0dGVyM2RcIiksdChcIi4vc3VyZmFjZVwiKSx0KFwiLi9pc29zdXJmYWNlXCIpLHQoXCIuL3ZvbHVtZVwiKSx0KFwiLi9tZXNoM2RcIiksdChcIi4vY29uZVwiKSx0KFwiLi9zdHJlYW10dWJlXCIpLHQoXCIuL3NjYXR0ZXJnZW9cIiksdChcIi4vY2hvcm9wbGV0aFwiKSx0KFwiLi9zY2F0dGVyZ2xcIiksdChcIi4vc3Bsb21cIiksdChcIi4vcG9pbnRjbG91ZFwiKSx0KFwiLi9oZWF0bWFwZ2xcIiksdChcIi4vcGFyY29vcmRzXCIpLHQoXCIuL3BhcmNhdHNcIiksdChcIi4vc2NhdHRlcm1hcGJveFwiKSx0KFwiLi9zYW5rZXlcIiksdChcIi4vdGFibGVcIiksdChcIi4vY2FycGV0XCIpLHQoXCIuL3NjYXR0ZXJjYXJwZXRcIiksdChcIi4vY29udG91cmNhcnBldFwiKSx0KFwiLi9vaGxjXCIpLHQoXCIuL2NhbmRsZXN0aWNrXCIpLHQoXCIuL3NjYXR0ZXJwb2xhclwiKSx0KFwiLi9zY2F0dGVycG9sYXJnbFwiKSx0KFwiLi9iYXJwb2xhclwiKV0pLG4ucmVnaXN0ZXIoW3QoXCIuL2FnZ3JlZ2F0ZVwiKSx0KFwiLi9maWx0ZXJcIiksdChcIi4vZ3JvdXBieVwiKSx0KFwiLi9zb3J0XCIpXSksbi5yZWdpc3RlcihbdChcIi4vY2FsZW5kYXJzXCIpXSksZS5leHBvcnRzPW59LHtcIi4vYWdncmVnYXRlXCI6MyxcIi4vYmFyXCI6NCxcIi4vYmFycG9sYXJcIjo1LFwiLi9ib3hcIjo2LFwiLi9jYWxlbmRhcnNcIjo3LFwiLi9jYW5kbGVzdGlja1wiOjgsXCIuL2NhcnBldFwiOjksXCIuL2Nob3JvcGxldGhcIjoxMCxcIi4vY29uZVwiOjExLFwiLi9jb250b3VyXCI6MTIsXCIuL2NvbnRvdXJjYXJwZXRcIjoxMyxcIi4vY29yZVwiOjE0LFwiLi9maWx0ZXJcIjoxNSxcIi4vZ3JvdXBieVwiOjE2LFwiLi9oZWF0bWFwXCI6MTcsXCIuL2hlYXRtYXBnbFwiOjE4LFwiLi9oaXN0b2dyYW1cIjoxOSxcIi4vaGlzdG9ncmFtMmRcIjoyMCxcIi4vaGlzdG9ncmFtMmRjb250b3VyXCI6MjEsXCIuL2lzb3N1cmZhY2VcIjoyMyxcIi4vbWVzaDNkXCI6MjQsXCIuL29obGNcIjoyNSxcIi4vcGFyY2F0c1wiOjI2LFwiLi9wYXJjb29yZHNcIjoyNyxcIi4vcGllXCI6MjgsXCIuL3BvaW50Y2xvdWRcIjoyOSxcIi4vc2Fua2V5XCI6MzAsXCIuL3NjYXR0ZXIzZFwiOjMxLFwiLi9zY2F0dGVyY2FycGV0XCI6MzIsXCIuL3NjYXR0ZXJnZW9cIjozMyxcIi4vc2NhdHRlcmdsXCI6MzQsXCIuL3NjYXR0ZXJtYXBib3hcIjozNSxcIi4vc2NhdHRlcnBvbGFyXCI6MzYsXCIuL3NjYXR0ZXJwb2xhcmdsXCI6MzcsXCIuL3NjYXR0ZXJ0ZXJuYXJ5XCI6MzgsXCIuL3NvcnRcIjozOSxcIi4vc3Bsb21cIjo0MCxcIi4vc3RyZWFtdHViZVwiOjQxLFwiLi9zdW5idXJzdFwiOjQyLFwiLi9zdXJmYWNlXCI6NDMsXCIuL3RhYmxlXCI6NDQsXCIuL3Zpb2xpblwiOjQ1LFwiLi92b2x1bWVcIjo0NixcIi4vd2F0ZXJmYWxsXCI6NDd9XSwyMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9pc29zdXJmYWNlXCIpfSx7XCIuLi9zcmMvdHJhY2VzL2lzb3N1cmZhY2VcIjo5OTN9XSwyNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9tZXNoM2RcIil9LHtcIi4uL3NyYy90cmFjZXMvbWVzaDNkXCI6OTk4fV0sMjU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvb2hsY1wiKX0se1wiLi4vc3JjL3RyYWNlcy9vaGxjXCI6MTAwM31dLDI2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3BhcmNhdHNcIil9LHtcIi4uL3NyYy90cmFjZXMvcGFyY2F0c1wiOjEwMTJ9XSwyNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9wYXJjb29yZHNcIil9LHtcIi4uL3NyYy90cmFjZXMvcGFyY29vcmRzXCI6MTAyMX1dLDI4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3BpZVwiKX0se1wiLi4vc3JjL3RyYWNlcy9waWVcIjoxMDMyfV0sMjk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvcG9pbnRjbG91ZFwiKX0se1wiLi4vc3JjL3RyYWNlcy9wb2ludGNsb3VkXCI6MTA0MX1dLDMwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3NhbmtleVwiKX0se1wiLi4vc3JjL3RyYWNlcy9zYW5rZXlcIjoxMDQ3fV0sMzE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvc2NhdHRlcjNkXCIpfSx7XCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXIzZFwiOjEwODR9XSwzMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9zY2F0dGVyY2FycGV0XCIpfSx7XCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJjYXJwZXRcIjoxMDkwfV0sMzM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvc2NhdHRlcmdlb1wiKX0se1wiLi4vc3JjL3RyYWNlcy9zY2F0dGVyZ2VvXCI6MTA5N31dLDM0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJnbFwiKX0se1wiLi4vc3JjL3RyYWNlcy9zY2F0dGVyZ2xcIjoxMTA1fV0sMzU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvc2NhdHRlcm1hcGJveFwiKX0se1wiLi4vc3JjL3RyYWNlcy9zY2F0dGVybWFwYm94XCI6MTExMX1dLDM2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJwb2xhclwiKX0se1wiLi4vc3JjL3RyYWNlcy9zY2F0dGVycG9sYXJcIjoxMTE4fV0sMzc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvc2NhdHRlcnBvbGFyZ2xcIil9LHtcIi4uL3NyYy90cmFjZXMvc2NhdHRlcnBvbGFyZ2xcIjoxMTIyfV0sMzg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvc2NhdHRlcnRlcm5hcnlcIil9LHtcIi4uL3NyYy90cmFjZXMvc2NhdHRlcnRlcm5hcnlcIjoxMTI4fV0sMzk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFuc2Zvcm1zL3NvcnRcIil9LHtcIi4uL3NyYy90cmFuc2Zvcm1zL3NvcnRcIjoxMTkyfV0sNDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvc3Bsb21cIil9LHtcIi4uL3NyYy90cmFjZXMvc3Bsb21cIjoxMTMzfV0sNDE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvc3RyZWFtdHViZVwiKX0se1wiLi4vc3JjL3RyYWNlcy9zdHJlYW10dWJlXCI6MTEzOH1dLDQyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3N1bmJ1cnN0XCIpfSx7XCIuLi9zcmMvdHJhY2VzL3N1bmJ1cnN0XCI6MTE0NH1dLDQzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3N1cmZhY2VcIil9LHtcIi4uL3NyYy90cmFjZXMvc3VyZmFjZVwiOjExNTN9XSw0NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy90YWJsZVwiKX0se1wiLi4vc3JjL3RyYWNlcy90YWJsZVwiOjExNjF9XSw0NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy92aW9saW5cIil9LHtcIi4uL3NyYy90cmFjZXMvdmlvbGluXCI6MTE2OX1dLDQ2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3ZvbHVtZVwiKX0se1wiLi4vc3JjL3RyYWNlcy92b2x1bWVcIjoxMTc3fV0sNDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvd2F0ZXJmYWxsXCIpfSx7XCIuLi9zcmMvdHJhY2VzL3dhdGVyZmFsbFwiOjExODN9XSw0ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuZXllfHxbMCwwLDFdLHI9dC5jZW50ZXJ8fFswLDAsMF0scz10LnVwfHxbMCwxLDBdLGw9dC5kaXN0YW5jZUxpbWl0c3x8WzAsMS8wXSxjPXQubW9kZXx8XCJ0dXJudGFibGVcIix1PW4oKSxoPWkoKSxmPWEoKTtyZXR1cm4gdS5zZXREaXN0YW5jZUxpbWl0cyhsWzBdLGxbMV0pLHUubG9va0F0KDAsZSxyLHMpLGguc2V0RGlzdGFuY2VMaW1pdHMobFswXSxsWzFdKSxoLmxvb2tBdCgwLGUscixzKSxmLnNldERpc3RhbmNlTGltaXRzKGxbMF0sbFsxXSksZi5sb29rQXQoMCxlLHIscyksbmV3IG8oe3R1cm50YWJsZTp1LG9yYml0OmgsbWF0cml4OmZ9LGMpfTt2YXIgbj10KFwidHVybnRhYmxlLWNhbWVyYS1jb250cm9sbGVyXCIpLGk9dChcIm9yYml0LWNhbWVyYS1jb250cm9sbGVyXCIpLGE9dChcIm1hdHJpeC1jYW1lcmEtY29udHJvbGxlclwiKTtmdW5jdGlvbiBvKHQsZSl7dGhpcy5fY29udHJvbGxlck5hbWVzPU9iamVjdC5rZXlzKHQpLHRoaXMuX2NvbnRyb2xsZXJMaXN0PXRoaXMuX2NvbnRyb2xsZXJOYW1lcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSx0aGlzLl9tb2RlPWUsdGhpcy5fYWN0aXZlPXRbZV0sdGhpcy5fYWN0aXZlfHwodGhpcy5fbW9kZT1cInR1cm50YWJsZVwiLHRoaXMuX2FjdGl2ZT10LnR1cm50YWJsZSksdGhpcy5tb2Rlcz10aGlzLl9jb250cm9sbGVyTmFtZXMsdGhpcy5jb21wdXRlZE1hdHJpeD10aGlzLl9hY3RpdmUuY29tcHV0ZWRNYXRyaXgsdGhpcy5jb21wdXRlZEV5ZT10aGlzLl9hY3RpdmUuY29tcHV0ZWRFeWUsdGhpcy5jb21wdXRlZFVwPXRoaXMuX2FjdGl2ZS5jb21wdXRlZFVwLHRoaXMuY29tcHV0ZWRDZW50ZXI9dGhpcy5fYWN0aXZlLmNvbXB1dGVkQ2VudGVyLHRoaXMuY29tcHV0ZWRSYWRpdXM9dGhpcy5fYWN0aXZlLmNvbXB1dGVkUmFkaXVzfXZhciBzPW8ucHJvdG90eXBlO1tbXCJmbHVzaFwiLDFdLFtcImlkbGVcIiwxXSxbXCJsb29rQXRcIiw0XSxbXCJyb3RhdGVcIiw0XSxbXCJwYW5cIiw0XSxbXCJ0cmFuc2xhdGVcIiw0XSxbXCJzZXRNYXRyaXhcIiwyXSxbXCJzZXREaXN0YW5jZUxpbWl0c1wiLDJdLFtcInNldERpc3RhbmNlXCIsMl1dLmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF0scj1bXSxuPTA7bjx0WzFdOysrbilyLnB1c2goXCJhXCIrbik7dmFyIGk9XCJ2YXIgY2M9dGhpcy5fY29udHJvbGxlckxpc3Q7Zm9yKHZhciBpPTA7aTxjYy5sZW5ndGg7KytpKXtjY1tpXS5cIit0WzBdK1wiKFwiK3Iuam9pbigpK1wiKX1cIjtzW2VdPUZ1bmN0aW9uLmFwcGx5KG51bGwsci5jb25jYXQoaSkpfSkscy5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dGhpcy5fYWN0aXZlLnJlY2FsY01hdHJpeCh0KX0scy5nZXREaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYWN0aXZlLmdldERpc3RhbmNlKHQpfSxzLmdldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hY3RpdmUuZ2V0RGlzdGFuY2VMaW1pdHModCl9LHMubGFzdFQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlLmxhc3RUKCl9LHMuc2V0TW9kZT1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5fbW9kZSl7dmFyIGU9dGhpcy5fY29udHJvbGxlck5hbWVzLmluZGV4T2YodCk7aWYoIShlPDApKXt2YXIgcj10aGlzLl9hY3RpdmUsbj10aGlzLl9jb250cm9sbGVyTGlzdFtlXSxpPU1hdGgubWF4KHIubGFzdFQoKSxuLmxhc3RUKCkpO3IucmVjYWxjTWF0cml4KGkpLG4uc2V0TWF0cml4KGksci5jb21wdXRlZE1hdHJpeCksdGhpcy5fYWN0aXZlPW4sdGhpcy5fbW9kZT10LHRoaXMuY29tcHV0ZWRNYXRyaXg9dGhpcy5fYWN0aXZlLmNvbXB1dGVkTWF0cml4LHRoaXMuY29tcHV0ZWRFeWU9dGhpcy5fYWN0aXZlLmNvbXB1dGVkRXllLHRoaXMuY29tcHV0ZWRVcD10aGlzLl9hY3RpdmUuY29tcHV0ZWRVcCx0aGlzLmNvbXB1dGVkQ2VudGVyPXRoaXMuX2FjdGl2ZS5jb21wdXRlZENlbnRlcix0aGlzLmNvbXB1dGVkUmFkaXVzPXRoaXMuX2FjdGl2ZS5jb21wdXRlZFJhZGl1c319fSxzLmdldE1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9kZX19LHtcIm1hdHJpeC1jYW1lcmEtY29udHJvbGxlclwiOjQyNixcIm9yYml0LWNhbWVyYS1jb250cm9sbGVyXCI6NDQ5LFwidHVybnRhYmxlLWNhbWVyYS1jb250cm9sbGVyXCI6NTI3fV0sNDk6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbixpO249dGhpcyxpPWZ1bmN0aW9uKHQsZSxyLG4pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQudGFyZ2V0LmRlcHRofWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gdC5zb3VyY2VMaW5rcy5sZW5ndGg/dC5kZXB0aDplLTF9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBjKHQuc291cmNlLGUuc291cmNlKXx8dC5pbmRleC1lLmluZGV4fWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gYyh0LnRhcmdldCxlLnRhcmdldCl8fHQuaW5kZXgtZS5pbmRleH1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHQueTAtZS55MH1mdW5jdGlvbiB1KHQpe3JldHVybiB0LnZhbHVlfWZ1bmN0aW9uIGgodCl7cmV0dXJuKHQueTArdC55MSkvMn1mdW5jdGlvbiBmKHQpe3JldHVybiBoKHQuc291cmNlKSp0LnZhbHVlfWZ1bmN0aW9uIHAodCl7cmV0dXJuIGgodC50YXJnZXQpKnQudmFsdWV9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiBnKHQpe3JldHVybiB0Lm5vZGVzfWZ1bmN0aW9uIHYodCl7cmV0dXJuIHQubGlua3N9ZnVuY3Rpb24gbSh0LGUpe3ZhciByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcihcIm1pc3Npbmc6IFwiK2UpO3JldHVybiByfWZ1bmN0aW9uIHkodCl7cmV0dXJuW3Quc291cmNlLngxLHQueTBdfWZ1bmN0aW9uIHgodCl7cmV0dXJuW3QudGFyZ2V0LngwLHQueTFdfXQuc2Fua2V5PWZ1bmN0aW9uKCl7dmFyIHQ9MCxuPTAsaT0xLHk9MSx4PTI0LGI9OCxfPWQsdz1hLGs9ZyxBPXYsVD0zMixNPTIvMztmdW5jdGlvbiBTKCl7dmFyIGE9e25vZGVzOmsuYXBwbHkobnVsbCxhcmd1bWVudHMpLGxpbmtzOkEuYXBwbHkobnVsbCxhcmd1bWVudHMpfTtyZXR1cm4gZnVuY3Rpb24odCl7dC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dC5pbmRleD1lLHQuc291cmNlTGlua3M9W10sdC50YXJnZXRMaW5rcz1bXX0pO3ZhciBlPXIubWFwKHQubm9kZXMsXyk7dC5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQscil7dC5pbmRleD1yO3ZhciBuPXQuc291cmNlLGk9dC50YXJnZXQ7XCJvYmplY3RcIiE9dHlwZW9mIG4mJihuPXQuc291cmNlPW0oZSxuKSksXCJvYmplY3RcIiE9dHlwZW9mIGkmJihpPXQudGFyZ2V0PW0oZSxpKSksbi5zb3VyY2VMaW5rcy5wdXNoKHQpLGkudGFyZ2V0TGlua3MucHVzaCh0KX0pfShhKSxmdW5jdGlvbih0KXt0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dC52YWx1ZT1NYXRoLm1heChlLnN1bSh0LnNvdXJjZUxpbmtzLHUpLGUuc3VtKHQudGFyZ2V0TGlua3MsdSkpfSl9KGEpLGZ1bmN0aW9uKGUpe3ZhciByLG4sYTtmb3Iocj1lLm5vZGVzLG49W10sYT0wO3IubGVuZ3RoOysrYSxyPW4sbj1bXSlyLmZvckVhY2goZnVuY3Rpb24odCl7dC5kZXB0aD1hLHQuc291cmNlTGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXtuLmluZGV4T2YodC50YXJnZXQpPDAmJm4ucHVzaCh0LnRhcmdldCl9KX0pO2ZvcihyPWUubm9kZXMsbj1bXSxhPTA7ci5sZW5ndGg7KythLHI9bixuPVtdKXIuZm9yRWFjaChmdW5jdGlvbih0KXt0LmhlaWdodD1hLHQudGFyZ2V0TGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXtuLmluZGV4T2YodC5zb3VyY2UpPDAmJm4ucHVzaCh0LnNvdXJjZSl9KX0pO3ZhciBvPShpLXQteCkvKGEtMSk7ZS5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UueDE9KGUueDA9dCtNYXRoLm1heCgwLE1hdGgubWluKGEtMSxNYXRoLmZsb29yKHcuY2FsbChudWxsLGUsYSkpKSkqbykreH0pfShhKSxmdW5jdGlvbih0KXt2YXIgaT1yLm5lc3QoKS5rZXkoZnVuY3Rpb24odCl7cmV0dXJuIHQueDB9KS5zb3J0S2V5cyhlLmFzY2VuZGluZykuZW50cmllcyh0Lm5vZGVzKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWVzfSk7KGZ1bmN0aW9uKCl7dmFyIHI9ZS5tYXgoaSxmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGh9KSxhPU0qKHktbikvKHItMSk7Yj5hJiYoYj1hKTt2YXIgbz1lLm1pbihpLGZ1bmN0aW9uKHQpe3JldHVybih5LW4tKHQubGVuZ3RoLTEpKmIpL2Uuc3VtKHQsdSl9KTtpLmZvckVhY2goZnVuY3Rpb24odCl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dC55MT0odC55MD1lKSt0LnZhbHVlKm99KX0pLHQubGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LndpZHRoPXQudmFsdWUqb30pfSkoKSxkKCk7Zm9yKHZhciBhPTEsbz1UO28+MDstLW8pbChhKj0uOTkpLGQoKSxzKGEpLGQoKTtmdW5jdGlvbiBzKHQpe2kuZm9yRWFjaChmdW5jdGlvbihyKXtyLmZvckVhY2goZnVuY3Rpb24ocil7aWYoci50YXJnZXRMaW5rcy5sZW5ndGgpe3ZhciBuPShlLnN1bShyLnRhcmdldExpbmtzLGYpL2Uuc3VtKHIudGFyZ2V0TGlua3MsdSktaChyKSkqdDtyLnkwKz1uLHIueTErPW59fSl9KX1mdW5jdGlvbiBsKHQpe2kuc2xpY2UoKS5yZXZlcnNlKCkuZm9yRWFjaChmdW5jdGlvbihyKXtyLmZvckVhY2goZnVuY3Rpb24ocil7aWYoci5zb3VyY2VMaW5rcy5sZW5ndGgpe3ZhciBuPShlLnN1bShyLnNvdXJjZUxpbmtzLHApL2Uuc3VtKHIuc291cmNlTGlua3MsdSktaChyKSkqdDtyLnkwKz1uLHIueTErPW59fSl9KX1mdW5jdGlvbiBkKCl7aS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxhPW4sbz10Lmxlbmd0aDtmb3IodC5zb3J0KGMpLGk9MDtpPG87KytpKWU9dFtpXSwocj1hLWUueTApPjAmJihlLnkwKz1yLGUueTErPXIpLGE9ZS55MStiO2lmKChyPWEtYi15KT4wKWZvcihhPWUueTAtPXIsZS55MS09cixpPW8tMjtpPj0wOy0taSllPXRbaV0sKHI9ZS55MStiLWEpPjAmJihlLnkwLT1yLGUueTEtPXIpLGE9ZS55MH0pfX0oYSksRShhKSxhfWZ1bmN0aW9uIEUodCl7dC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc291cmNlTGlua3Muc29ydChsKSx0LnRhcmdldExpbmtzLnNvcnQocyl9KSx0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC55MCxyPWU7dC5zb3VyY2VMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QueTA9ZSt0LndpZHRoLzIsZSs9dC53aWR0aH0pLHQudGFyZ2V0TGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LnkxPXIrdC53aWR0aC8yLHIrPXQud2lkdGh9KX0pfXJldHVybiBTLnVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gRSh0KSx0fSxTLm5vZGVJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6byh0KSxTKTpffSxTLm5vZGVBbGlnbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6byh0KSxTKTp3fSxTLm5vZGVXaWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD0rdCxTKTp4fSxTLm5vZGVQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPSt0LFMpOmJ9LFMubm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8odCksUyk6a30sUy5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6byh0KSxTKTpBfSxTLnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bj0wLGk9K2VbMF0seT0rZVsxXSxTKTpbaS10LHktbl19LFMuZXh0ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStlWzBdWzBdLGk9K2VbMV1bMF0sbj0rZVswXVsxXSx5PStlWzFdWzFdLFMpOltbdCxuXSxbaSx5XV19LFMuaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD0rdCxTKTpUfSxTfSx0LnNhbmtleUNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdC50YXJnZXRMaW5rcy5sZW5ndGg/dC5kZXB0aDp0LnNvdXJjZUxpbmtzLmxlbmd0aD9lLm1pbih0LnNvdXJjZUxpbmtzLGkpLTE6MH0sdC5zYW5rZXlMZWZ0PWZ1bmN0aW9uKHQpe3JldHVybiB0LmRlcHRofSx0LnNhbmtleVJpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtMS10LmhlaWdodH0sdC5zYW5rZXlKdXN0aWZ5PWEsdC5zYW5rZXlMaW5rSG9yaXpvbnRhbD1mdW5jdGlvbigpe3JldHVybiBuLmxpbmtIb3Jpem9udGFsKCkuc291cmNlKHkpLnRhcmdldCh4KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LFwib2JqZWN0XCI9PXR5cGVvZiByJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZT9pKHIsdChcImQzLWFycmF5XCIpLHQoXCJkMy1jb2xsZWN0aW9uXCIpLHQoXCJkMy1zaGFwZVwiKSk6aShuLmQzPW4uZDN8fHt9LG4uZDMsbi5kMyxuLmQzKX0se1wiZDMtYXJyYXlcIjoxNDMsXCJkMy1jb2xsZWN0aW9uXCI6MTQ0LFwiZDMtc2hhcGVcIjoxNTN9XSw1MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPVwidW5kZWZpbmVkXCI9PXR5cGVvZiBXZWFrTWFwP3QoXCJ3ZWFrLW1hcFwiKTpXZWFrTWFwLGk9dChcImdsLWJ1ZmZlclwiKSxhPXQoXCJnbC12YW9cIiksbz1uZXcgbjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9by5nZXQodCkscj1lJiYoZS5fdHJpYW5nbGVCdWZmZXIuaGFuZGxlfHxlLl90cmlhbmdsZUJ1ZmZlci5idWZmZXIpO2lmKCFyfHwhdC5pc0J1ZmZlcihyKSl7dmFyIG49aSh0LG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC0xLDQsNCwtMV0pKTsoZT1hKHQsW3tidWZmZXI6bix0eXBlOnQuRkxPQVQsc2l6ZToyfV0pKS5fdHJpYW5nbGVCdWZmZXI9bixvLnNldCh0LGUpfWUuYmluZCgpLHQuZHJhd0FycmF5cyh0LlRSSUFOR0xFUywwLDMpLGUudW5iaW5kKCl9fSx7XCJnbC1idWZmZXJcIjoyMzgsXCJnbC12YW9cIjozMjAsXCJ3ZWFrLW1hcFwiOjUzN31dLDUxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPTAscj0wLG49MCxpPTA7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3ZhciBhPSh0PXQuc2xpY2UoKSlbMF0sbz1hLnRvVXBwZXJDYXNlKCk7aWYoYSE9bylzd2l0Y2godFswXT1vLGEpe2Nhc2VcImFcIjp0WzZdKz1uLHRbN10rPWk7YnJlYWs7Y2FzZVwidlwiOnRbMV0rPWk7YnJlYWs7Y2FzZVwiaFwiOnRbMV0rPW47YnJlYWs7ZGVmYXVsdDpmb3IodmFyIHM9MTtzPHQubGVuZ3RoOyl0W3MrK10rPW4sdFtzKytdKz1pfXN3aXRjaChvKXtjYXNlXCJaXCI6bj1lLGk9cjticmVhaztjYXNlXCJIXCI6bj10WzFdO2JyZWFrO2Nhc2VcIlZcIjppPXRbMV07YnJlYWs7Y2FzZVwiTVwiOm49ZT10WzFdLGk9cj10WzJdO2JyZWFrO2RlZmF1bHQ6bj10W3QubGVuZ3RoLTJdLGk9dFt0Lmxlbmd0aC0xXX1yZXR1cm4gdH0pfX0se31dLDUyOltmdW5jdGlvbih0LGUscil7dmFyIG49dChcInBhZC1sZWZ0XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZT1cIm51bWJlclwiPT10eXBlb2YgZT9lOjEscj1yfHxcIjogXCI7dmFyIGk9dC5zcGxpdCgvXFxyP1xcbi8pLGE9U3RyaW5nKGkubGVuZ3RoK2UtMSkubGVuZ3RoO3JldHVybiBpLm1hcChmdW5jdGlvbih0LGkpe3ZhciBvPWkrZSxzPVN0cmluZyhvKS5sZW5ndGgsbD1uKG8sYS1zKTtyZXR1cm4gbCtyK3R9KS5qb2luKFwiXFxuXCIpfX0se1wicGFkLWxlZnRcIjo0NTB9XSw1MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtpZigwPT09ZSlyZXR1cm5bXTtpZigxPT09ZSlyZXR1cm5bMF07Zm9yKHZhciByPXRbMF0ubGVuZ3RoLG49W3RbMF1dLGE9WzBdLG89MTtvPGU7KytvKWlmKG4ucHVzaCh0W29dKSxpKG4scikpe2lmKGEucHVzaChvKSxhLmxlbmd0aD09PXIrMSlyZXR1cm4gYX1lbHNlIG4ucG9wKCk7cmV0dXJuIGF9O3ZhciBuPXQoXCJyb2J1c3Qtb3JpZW50YXRpb25cIik7ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZSsxKSxpPTA7aTx0Lmxlbmd0aDsrK2kpcltpXT10W2ldO2ZvcihpPTA7aTw9dC5sZW5ndGg7KytpKXtmb3IodmFyIGE9dC5sZW5ndGg7YTw9ZTsrK2Epe2Zvcih2YXIgbz1uZXcgQXJyYXkoZSkscz0wO3M8ZTsrK3Mpb1tzXT1NYXRoLnBvdyhhKzEtaSxzKTtyW2FdPW99aWYobi5hcHBseSh2b2lkIDAscikpcmV0dXJuITB9cmV0dXJuITF9fSx7XCJyb2J1c3Qtb3JpZW50YXRpb25cIjo0OTV9XSw1NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKGUpLmZpbHRlcihmdW5jdGlvbihyKXtmb3IodmFyIG49bmV3IEFycmF5KHIubGVuZ3RoKSxhPTA7YTxyLmxlbmd0aDsrK2EpblthXT1lW3JbYV1dO3JldHVybiBpKG4pKnQ8MX0pfTt2YXIgbj10KFwiZGVsYXVuYXktdHJpYW5ndWxhdGVcIiksaT10KFwiY2lyY3VtcmFkaXVzXCIpfSx7Y2lyY3VtcmFkaXVzOjEwNSxcImRlbGF1bmF5LXRyaWFuZ3VsYXRlXCI6MTU3fV0sNTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaShuKHQsZSkpfTt2YXIgbj10KFwiYWxwaGEtY29tcGxleFwiKSxpPXQoXCJzaW1wbGljaWFsLWNvbXBsZXgtYm91bmRhcnlcIil9LHtcImFscGhhLWNvbXBsZXhcIjo1NCxcInNpbXBsaWNpYWwtY29tcGxleC1ib3VuZGFyeVwiOjUwMn1dLDU2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIXR8fG51bGw9PXQubGVuZ3RoKXRocm93IEVycm9yKFwiQXJndW1lbnQgc2hvdWxkIGJlIGFuIGFycmF5XCIpO2U9bnVsbD09ZT8xOk1hdGguZmxvb3IoZSk7Zm9yKHZhciByPUFycmF5KDIqZSksbj0wO248ZTtuKyspe2Zvcih2YXIgaT0tMS8wLGE9MS8wLG89bixzPXQubGVuZ3RoO288cztvKz1lKXRbb10+aSYmKGk9dFtvXSksdFtvXTxhJiYoYT10W29dKTtyW25dPWEscltlK25dPWl9cmV0dXJuIHJ9fSx7fV0sNTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiYXJyYXktYm91bmRzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoIXR8fG51bGw9PXQubGVuZ3RoKXRocm93IEVycm9yKFwiQXJndW1lbnQgc2hvdWxkIGJlIGFuIGFycmF5XCIpO251bGw9PWUmJihlPTEpO251bGw9PXImJihyPW4odCxlKSk7Zm9yKHZhciBpPTA7aTxlO2krKyl7dmFyIGE9cltlK2ldLG89cltpXSxzPWksbD10Lmxlbmd0aDtpZihhPT09MS8wJiZvPT09LTEvMClmb3Iocz1pO3M8bDtzKz1lKXRbc109dFtzXT09PWE/MTp0W3NdPT09bz8wOi41O2Vsc2UgaWYoYT09PTEvMClmb3Iocz1pO3M8bDtzKz1lKXRbc109dFtzXT09PWE/MTowO2Vsc2UgaWYobz09PS0xLzApZm9yKHM9aTtzPGw7cys9ZSl0W3NdPXRbc109PT1vPzA6MTtlbHNle3ZhciBjPWEtbztmb3Iocz1pO3M8bDtzKz1lKXRbc109MD09PWM/LjU6KHRbc10tbykvY319cmV0dXJuIHR9fSx7XCJhcnJheS1ib3VuZHNcIjo1Nn1dLDU4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9XCJudW1iZXJcIj09dHlwZW9mIHQsbj1cIm51bWJlclwiPT10eXBlb2YgZTtyJiYhbj8oZT10LHQ9MCk6cnx8bnx8KHQ9MCxlPTApO3ZhciBpPShlfD0wKS0odHw9MCk7aWYoaTwwKXRocm93IG5ldyBFcnJvcihcImFycmF5IGxlbmd0aCBtdXN0IGJlIHBvc2l0aXZlXCIpO2Zvcih2YXIgYT1uZXcgQXJyYXkoaSksbz0wLHM9dDtvPGk7bysrLHMrKylhW29dPXM7cmV0dXJuIGF9fSx7fV0sNTk6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKHQ9PT1lKXJldHVybiAwO2Zvcih2YXIgcj10Lmxlbmd0aCxuPWUubGVuZ3RoLGk9MCxhPU1hdGgubWluKHIsbik7aTxhOysraSlpZih0W2ldIT09ZVtpXSl7cj10W2ldLG49ZVtpXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gci5CdWZmZXImJlwiZnVuY3Rpb25cIj09dHlwZW9mIHIuQnVmZmVyLmlzQnVmZmVyP3IuQnVmZmVyLmlzQnVmZmVyKHQpOiEobnVsbD09dHx8IXQuX2lzQnVmZmVyKX12YXIgYT10KFwidXRpbC9cIiksbz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHM9QXJyYXkucHJvdG90eXBlLnNsaWNlLGw9XCJmb29cIj09PWZ1bmN0aW9uKCl7fS5uYW1lO2Z1bmN0aW9uIGModCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiB1KHQpe3JldHVybiFpKHQpJiYoXCJmdW5jdGlvblwiPT10eXBlb2Ygci5BcnJheUJ1ZmZlciYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcodCk6ISF0JiYodCBpbnN0YW5jZW9mIERhdGFWaWV3fHwhISh0LmJ1ZmZlciYmdC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpKSl9dmFyIGg9ZS5leHBvcnRzPW0sZj0vXFxzKmZ1bmN0aW9uXFxzKyhbXlxcKFxcc10qKVxccyovO2Z1bmN0aW9uIHAodCl7aWYoYS5pc0Z1bmN0aW9uKHQpKXtpZihsKXJldHVybiB0Lm5hbWU7dmFyIGU9dC50b1N0cmluZygpLm1hdGNoKGYpO3JldHVybiBlJiZlWzFdfX1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQ/dC5sZW5ndGg8ZT90OnQuc2xpY2UoMCxlKTp0fWZ1bmN0aW9uIGcodCl7aWYobHx8IWEuaXNGdW5jdGlvbih0KSlyZXR1cm4gYS5pbnNwZWN0KHQpO3ZhciBlPXAodCk7cmV0dXJuXCJbRnVuY3Rpb25cIisoZT9cIjogXCIrZTpcIlwiKStcIl1cIn1mdW5jdGlvbiB2KHQsZSxyLG4saSl7dGhyb3cgbmV3IGguQXNzZXJ0aW9uRXJyb3Ioe21lc3NhZ2U6cixhY3R1YWw6dCxleHBlY3RlZDplLG9wZXJhdG9yOm4sc3RhY2tTdGFydEZ1bmN0aW9uOml9KX1mdW5jdGlvbiBtKHQsZSl7dHx8dih0LCEwLGUsXCI9PVwiLGgub2spfWZ1bmN0aW9uIHkodCxlLHIsbyl7aWYodD09PWUpcmV0dXJuITA7aWYoaSh0KSYmaShlKSlyZXR1cm4gMD09PW4odCxlKTtpZihhLmlzRGF0ZSh0KSYmYS5pc0RhdGUoZSkpcmV0dXJuIHQuZ2V0VGltZSgpPT09ZS5nZXRUaW1lKCk7aWYoYS5pc1JlZ0V4cCh0KSYmYS5pc1JlZ0V4cChlKSlyZXR1cm4gdC5zb3VyY2U9PT1lLnNvdXJjZSYmdC5nbG9iYWw9PT1lLmdsb2JhbCYmdC5tdWx0aWxpbmU9PT1lLm11bHRpbGluZSYmdC5sYXN0SW5kZXg9PT1lLmxhc3RJbmRleCYmdC5pZ25vcmVDYXNlPT09ZS5pZ25vcmVDYXNlO2lmKG51bGwhPT10JiZcIm9iamVjdFwiPT10eXBlb2YgdHx8bnVsbCE9PWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlKXtpZih1KHQpJiZ1KGUpJiZjKHQpPT09YyhlKSYmISh0IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5fHx0IGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5KSlyZXR1cm4gMD09PW4obmV3IFVpbnQ4QXJyYXkodC5idWZmZXIpLG5ldyBVaW50OEFycmF5KGUuYnVmZmVyKSk7aWYoaSh0KSE9PWkoZSkpcmV0dXJuITE7dmFyIGw9KG89b3x8e2FjdHVhbDpbXSxleHBlY3RlZDpbXX0pLmFjdHVhbC5pbmRleE9mKHQpO3JldHVybi0xIT09bCYmbD09PW8uZXhwZWN0ZWQuaW5kZXhPZihlKXx8KG8uYWN0dWFsLnB1c2godCksby5leHBlY3RlZC5wdXNoKGUpLGZ1bmN0aW9uKHQsZSxyLG4pe2lmKG51bGw9PXR8fG51bGw9PWUpcmV0dXJuITE7aWYoYS5pc1ByaW1pdGl2ZSh0KXx8YS5pc1ByaW1pdGl2ZShlKSlyZXR1cm4gdD09PWU7aWYociYmT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKXJldHVybiExO3ZhciBpPXgodCksbz14KGUpO2lmKGkmJiFvfHwhaSYmbylyZXR1cm4hMTtpZihpKXJldHVybiB0PXMuY2FsbCh0KSxlPXMuY2FsbChlKSx5KHQsZSxyKTt2YXIgbCxjLHU9dyh0KSxoPXcoZSk7aWYodS5sZW5ndGghPT1oLmxlbmd0aClyZXR1cm4hMTtmb3IodS5zb3J0KCksaC5zb3J0KCksYz11Lmxlbmd0aC0xO2M+PTA7Yy0tKWlmKHVbY10hPT1oW2NdKXJldHVybiExO2ZvcihjPXUubGVuZ3RoLTE7Yz49MDtjLS0paWYobD11W2NdLCF5KHRbbF0sZVtsXSxyLG4pKXJldHVybiExO3JldHVybiEwfSh0LGUscixvKSl9cmV0dXJuIHI/dD09PWU6dD09ZX1mdW5jdGlvbiB4KHQpe3JldHVyblwiW29iamVjdCBBcmd1bWVudHNdXCI9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBiKHQsZSl7aWYoIXR8fCFlKXJldHVybiExO2lmKFwiW29iamVjdCBSZWdFeHBdXCI9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSlyZXR1cm4gZS50ZXN0KHQpO3RyeXtpZih0IGluc3RhbmNlb2YgZSlyZXR1cm4hMH1jYXRjaCh0KXt9cmV0dXJuIUVycm9yLmlzUHJvdG90eXBlT2YoZSkmJiEwPT09ZS5jYWxsKHt9LHQpfWZ1bmN0aW9uIF8odCxlLHIsbil7dmFyIGk7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJsb2NrXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XCJzdHJpbmdcIj09dHlwZW9mIHImJihuPXIscj1udWxsKSxpPWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXt0KCl9Y2F0Y2godCl7ZT10fXJldHVybiBlfShlKSxuPShyJiZyLm5hbWU/XCIgKFwiK3IubmFtZStcIikuXCI6XCIuXCIpKyhuP1wiIFwiK246XCIuXCIpLHQmJiFpJiZ2KGkscixcIk1pc3NpbmcgZXhwZWN0ZWQgZXhjZXB0aW9uXCIrbik7dmFyIG89XCJzdHJpbmdcIj09dHlwZW9mIG4scz0hdCYmaSYmIXI7aWYoKCF0JiZhLmlzRXJyb3IoaSkmJm8mJmIoaSxyKXx8cykmJnYoaSxyLFwiR290IHVud2FudGVkIGV4Y2VwdGlvblwiK24pLHQmJmkmJnImJiFiKGkscil8fCF0JiZpKXRocm93IGl9aC5Bc3NlcnRpb25FcnJvcj1mdW5jdGlvbih0KXt2YXIgZTt0aGlzLm5hbWU9XCJBc3NlcnRpb25FcnJvclwiLHRoaXMuYWN0dWFsPXQuYWN0dWFsLHRoaXMuZXhwZWN0ZWQ9dC5leHBlY3RlZCx0aGlzLm9wZXJhdG9yPXQub3BlcmF0b3IsdC5tZXNzYWdlPyh0aGlzLm1lc3NhZ2U9dC5tZXNzYWdlLHRoaXMuZ2VuZXJhdGVkTWVzc2FnZT0hMSk6KHRoaXMubWVzc2FnZT1kKGcoKGU9dGhpcykuYWN0dWFsKSwxMjgpK1wiIFwiK2Uub3BlcmF0b3IrXCIgXCIrZChnKGUuZXhwZWN0ZWQpLDEyOCksdGhpcy5nZW5lcmF0ZWRNZXNzYWdlPSEwKTt2YXIgcj10LnN0YWNrU3RhcnRGdW5jdGlvbnx8djtpZihFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHIpO2Vsc2V7dmFyIG49bmV3IEVycm9yO2lmKG4uc3RhY2spe3ZhciBpPW4uc3RhY2ssYT1wKHIpLG89aS5pbmRleE9mKFwiXFxuXCIrYSk7aWYobz49MCl7dmFyIHM9aS5pbmRleE9mKFwiXFxuXCIsbysxKTtpPWkuc3Vic3RyaW5nKHMrMSl9dGhpcy5zdGFjaz1pfX19LGEuaW5oZXJpdHMoaC5Bc3NlcnRpb25FcnJvcixFcnJvciksaC5mYWlsPXYsaC5vaz1tLGguZXF1YWw9ZnVuY3Rpb24odCxlLHIpe3QhPWUmJnYodCxlLHIsXCI9PVwiLGguZXF1YWwpfSxoLm5vdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0PT1lJiZ2KHQsZSxyLFwiIT1cIixoLm5vdEVxdWFsKX0saC5kZWVwRXF1YWw9ZnVuY3Rpb24odCxlLHIpe3kodCxlLCExKXx8dih0LGUscixcImRlZXBFcXVhbFwiLGguZGVlcEVxdWFsKX0saC5kZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3kodCxlLCEwKXx8dih0LGUscixcImRlZXBTdHJpY3RFcXVhbFwiLGguZGVlcFN0cmljdEVxdWFsKX0saC5ub3REZWVwRXF1YWw9ZnVuY3Rpb24odCxlLHIpe3kodCxlLCExKSYmdih0LGUscixcIm5vdERlZXBFcXVhbFwiLGgubm90RGVlcEVxdWFsKX0saC5ub3REZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24gdChlLHIsbil7eShlLHIsITApJiZ2KGUscixuLFwibm90RGVlcFN0cmljdEVxdWFsXCIsdCl9LGguc3RyaWN0RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3QhPT1lJiZ2KHQsZSxyLFwiPT09XCIsaC5zdHJpY3RFcXVhbCl9LGgubm90U3RyaWN0RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3Q9PT1lJiZ2KHQsZSxyLFwiIT09XCIsaC5ub3RTdHJpY3RFcXVhbCl9LGgudGhyb3dzPWZ1bmN0aW9uKHQsZSxyKXtfKCEwLHQsZSxyKX0saC5kb2VzTm90VGhyb3c9ZnVuY3Rpb24odCxlLHIpe18oITEsdCxlLHIpfSxoLmlmRXJyb3I9ZnVuY3Rpb24odCl7aWYodCl0aHJvdyB0fTt2YXIgdz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpby5jYWxsKHQscikmJmUucHVzaChyKTtyZXR1cm4gZX19KS5jYWxsKHRoaXMsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHtcInV0aWwvXCI6NjJ9XSw2MDpbZnVuY3Rpb24odCxlLHIpe1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5zdXBlcl89ZSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KX06ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH19LHt9XSw2MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmXCJvYmplY3RcIj09dHlwZW9mIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQuY29weSYmXCJmdW5jdGlvblwiPT10eXBlb2YgdC5maWxsJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnJlYWRVSW50OH19LHt9XSw2MjpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlLG4pe3ZhciBpPS8lW3NkaiVdL2c7ci5mb3JtYXQ9ZnVuY3Rpb24odCl7aWYoIW0odCkpe2Zvcih2YXIgZT1bXSxyPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyllLnB1c2gocyhhcmd1bWVudHNbcl0pKTtyZXR1cm4gZS5qb2luKFwiIFwiKX1yPTE7Zm9yKHZhciBuPWFyZ3VtZW50cyxhPW4ubGVuZ3RoLG89U3RyaW5nKHQpLnJlcGxhY2UoaSxmdW5jdGlvbih0KXtpZihcIiUlXCI9PT10KXJldHVyblwiJVwiO2lmKHI+PWEpcmV0dXJuIHQ7c3dpdGNoKHQpe2Nhc2VcIiVzXCI6cmV0dXJuIFN0cmluZyhuW3IrK10pO2Nhc2VcIiVkXCI6cmV0dXJuIE51bWJlcihuW3IrK10pO2Nhc2VcIiVqXCI6dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShuW3IrK10pfWNhdGNoKHQpe3JldHVyblwiW0NpcmN1bGFyXVwifWRlZmF1bHQ6cmV0dXJuIHR9fSksbD1uW3JdO3I8YTtsPW5bKytyXSlnKGwpfHwhYihsKT9vKz1cIiBcIitsOm8rPVwiIFwiK3MobCk7cmV0dXJuIG99LHIuZGVwcmVjYXRlPWZ1bmN0aW9uKHQsaSl7aWYoeShuLnByb2Nlc3MpKXJldHVybiBmdW5jdGlvbigpe3JldHVybiByLmRlcHJlY2F0ZSh0LGkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07aWYoITA9PT1lLm5vRGVwcmVjYXRpb24pcmV0dXJuIHQ7dmFyIGE9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIWEpe2lmKGUudGhyb3dEZXByZWNhdGlvbil0aHJvdyBuZXcgRXJyb3IoaSk7ZS50cmFjZURlcHJlY2F0aW9uP2NvbnNvbGUudHJhY2UoaSk6Y29uc29sZS5lcnJvcihpKSxhPSEwfXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O3ZhciBhLG89e307ZnVuY3Rpb24gcyh0LGUpe3ZhciBuPXtzZWVuOltdLHN0eWxpemU6Y307cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTMmJihuLmRlcHRoPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD49NCYmKG4uY29sb3JzPWFyZ3VtZW50c1szXSksZChlKT9uLnNob3dIaWRkZW49ZTplJiZyLl9leHRlbmQobixlKSx5KG4uc2hvd0hpZGRlbikmJihuLnNob3dIaWRkZW49ITEpLHkobi5kZXB0aCkmJihuLmRlcHRoPTIpLHkobi5jb2xvcnMpJiYobi5jb2xvcnM9ITEpLHkobi5jdXN0b21JbnNwZWN0KSYmKG4uY3VzdG9tSW5zcGVjdD0hMCksbi5jb2xvcnMmJihuLnN0eWxpemU9bCksdShuLHQsbi5kZXB0aCl9ZnVuY3Rpb24gbCh0LGUpe3ZhciByPXMuc3R5bGVzW2VdO3JldHVybiByP1wiXFx4MWJbXCIrcy5jb2xvcnNbcl1bMF0rXCJtXCIrdCtcIlxceDFiW1wiK3MuY29sb3JzW3JdWzFdK1wibVwiOnR9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiB0fWZ1bmN0aW9uIHUodCxlLG4pe2lmKHQuY3VzdG9tSW5zcGVjdCYmZSYmayhlLmluc3BlY3QpJiZlLmluc3BlY3QhPT1yLmluc3BlY3QmJighZS5jb25zdHJ1Y3Rvcnx8ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUhPT1lKSl7dmFyIGk9ZS5pbnNwZWN0KG4sdCk7cmV0dXJuIG0oaSl8fChpPXUodCxpLG4pKSxpfXZhciBhPWZ1bmN0aW9uKHQsZSl7aWYoeShlKSlyZXR1cm4gdC5zdHlsaXplKFwidW5kZWZpbmVkXCIsXCJ1bmRlZmluZWRcIik7aWYobShlKSl7dmFyIHI9XCInXCIrSlNPTi5zdHJpbmdpZnkoZSkucmVwbGFjZSgvXlwifFwiJC9nLFwiXCIpLnJlcGxhY2UoLycvZyxcIlxcXFwnXCIpLnJlcGxhY2UoL1xcXFxcIi9nLCdcIicpK1wiJ1wiO3JldHVybiB0LnN0eWxpemUocixcInN0cmluZ1wiKX1pZih2KGUpKXJldHVybiB0LnN0eWxpemUoXCJcIitlLFwibnVtYmVyXCIpO2lmKGQoZSkpcmV0dXJuIHQuc3R5bGl6ZShcIlwiK2UsXCJib29sZWFuXCIpO2lmKGcoZSkpcmV0dXJuIHQuc3R5bGl6ZShcIm51bGxcIixcIm51bGxcIil9KHQsZSk7aWYoYSlyZXR1cm4gYTt2YXIgbz1PYmplY3Qua2V5cyhlKSxzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCxyKXtlW3RdPSEwfSksZX0obyk7aWYodC5zaG93SGlkZGVuJiYobz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKSksdyhlKSYmKG8uaW5kZXhPZihcIm1lc3NhZ2VcIik+PTB8fG8uaW5kZXhPZihcImRlc2NyaXB0aW9uXCIpPj0wKSlyZXR1cm4gaChlKTtpZigwPT09by5sZW5ndGgpe2lmKGsoZSkpe3ZhciBsPWUubmFtZT9cIjogXCIrZS5uYW1lOlwiXCI7cmV0dXJuIHQuc3R5bGl6ZShcIltGdW5jdGlvblwiK2wrXCJdXCIsXCJzcGVjaWFsXCIpfWlmKHgoZSkpcmV0dXJuIHQuc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSksXCJyZWdleHBcIik7aWYoXyhlKSlyZXR1cm4gdC5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSksXCJkYXRlXCIpO2lmKHcoZSkpcmV0dXJuIGgoZSl9dmFyIGMsYj1cIlwiLEE9ITEsVD1bXCJ7XCIsXCJ9XCJdOyhwKGUpJiYoQT0hMCxUPVtcIltcIixcIl1cIl0pLGsoZSkpJiYoYj1cIiBbRnVuY3Rpb25cIisoZS5uYW1lP1wiOiBcIitlLm5hbWU6XCJcIikrXCJdXCIpO3JldHVybiB4KGUpJiYoYj1cIiBcIitSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpLF8oZSkmJihiPVwiIFwiK0RhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwoZSkpLHcoZSkmJihiPVwiIFwiK2goZSkpLDAhPT1vLmxlbmd0aHx8QSYmMCE9ZS5sZW5ndGg/bjwwP3goZSk/dC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSxcInJlZ2V4cFwiKTp0LnN0eWxpemUoXCJbT2JqZWN0XVwiLFwic3BlY2lhbFwiKToodC5zZWVuLnB1c2goZSksYz1BP2Z1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBhPVtdLG89MCxzPWUubGVuZ3RoO288czsrK28pUyhlLFN0cmluZyhvKSk/YS5wdXNoKGYodCxlLHIsbixTdHJpbmcobyksITApKTphLnB1c2goXCJcIik7cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbihpKXtpLm1hdGNoKC9eXFxkKyQvKXx8YS5wdXNoKGYodCxlLHIsbixpLCEwKSl9KSxhfSh0LGUsbixzLG8pOm8ubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBmKHQsZSxuLHMscixBKX0pLHQuc2Vlbi5wb3AoKSxmdW5jdGlvbih0LGUscil7aWYodC5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gMCxlLmluZGV4T2YoXCJcXG5cIik+PTAmJjAsdCtlLnJlcGxhY2UoL1xcdTAwMWJcXFtcXGRcXGQ/bS9nLFwiXCIpLmxlbmd0aCsxfSwwKT42MClyZXR1cm4gclswXSsoXCJcIj09PWU/XCJcIjplK1wiXFxuIFwiKStcIiBcIit0LmpvaW4oXCIsXFxuICBcIikrXCIgXCIrclsxXTtyZXR1cm4gclswXStlK1wiIFwiK3Quam9pbihcIiwgXCIpK1wiIFwiK3JbMV19KGMsYixUKSk6VFswXStiK1RbMV19ZnVuY3Rpb24gaCh0KXtyZXR1cm5cIltcIitFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KStcIl1cIn1mdW5jdGlvbiBmKHQsZSxyLG4saSxhKXt2YXIgbyxzLGw7aWYoKGw9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLGkpfHx7dmFsdWU6ZVtpXX0pLmdldD9zPWwuc2V0P3Quc3R5bGl6ZShcIltHZXR0ZXIvU2V0dGVyXVwiLFwic3BlY2lhbFwiKTp0LnN0eWxpemUoXCJbR2V0dGVyXVwiLFwic3BlY2lhbFwiKTpsLnNldCYmKHM9dC5zdHlsaXplKFwiW1NldHRlcl1cIixcInNwZWNpYWxcIikpLFMobixpKXx8KG89XCJbXCIraStcIl1cIiksc3x8KHQuc2Vlbi5pbmRleE9mKGwudmFsdWUpPDA/KHM9ZyhyKT91KHQsbC52YWx1ZSxudWxsKTp1KHQsbC52YWx1ZSxyLTEpKS5pbmRleE9mKFwiXFxuXCIpPi0xJiYocz1hP3Muc3BsaXQoXCJcXG5cIikubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiICBcIit0fSkuam9pbihcIlxcblwiKS5zdWJzdHIoMik6XCJcXG5cIitzLnNwbGl0KFwiXFxuXCIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cIiAgIFwiK3R9KS5qb2luKFwiXFxuXCIpKTpzPXQuc3R5bGl6ZShcIltDaXJjdWxhcl1cIixcInNwZWNpYWxcIikpLHkobykpe2lmKGEmJmkubWF0Y2goL15cXGQrJC8pKXJldHVybiBzOyhvPUpTT04uc3RyaW5naWZ5KFwiXCIraSkpLm1hdGNoKC9eXCIoW2EtekEtWl9dW2EtekEtWl8wLTldKilcIiQvKT8obz1vLnN1YnN0cigxLG8ubGVuZ3RoLTIpLG89dC5zdHlsaXplKG8sXCJuYW1lXCIpKToobz1vLnJlcGxhY2UoLycvZyxcIlxcXFwnXCIpLnJlcGxhY2UoL1xcXFxcIi9nLCdcIicpLnJlcGxhY2UoLyheXCJ8XCIkKS9nLFwiJ1wiKSxvPXQuc3R5bGl6ZShvLFwic3RyaW5nXCIpKX1yZXR1cm4gbytcIjogXCIrc31mdW5jdGlvbiBwKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfWZ1bmN0aW9uIGQodCl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIGcodCl7cmV0dXJuIG51bGw9PT10fWZ1bmN0aW9uIHYodCl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIHR9ZnVuY3Rpb24gbSh0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdH1mdW5jdGlvbiB5KHQpe3JldHVybiB2b2lkIDA9PT10fWZ1bmN0aW9uIHgodCl7cmV0dXJuIGIodCkmJlwiW29iamVjdCBSZWdFeHBdXCI9PT1BKHQpfWZ1bmN0aW9uIGIodCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHQmJm51bGwhPT10fWZ1bmN0aW9uIF8odCl7cmV0dXJuIGIodCkmJlwiW29iamVjdCBEYXRlXVwiPT09QSh0KX1mdW5jdGlvbiB3KHQpe3JldHVybiBiKHQpJiYoXCJbb2JqZWN0IEVycm9yXVwiPT09QSh0KXx8dCBpbnN0YW5jZW9mIEVycm9yKX1mdW5jdGlvbiBrKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHR9ZnVuY3Rpb24gQSh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIFQodCl7cmV0dXJuIHQ8MTA/XCIwXCIrdC50b1N0cmluZygxMCk6dC50b1N0cmluZygxMCl9ci5kZWJ1Z2xvZz1mdW5jdGlvbih0KXtpZih5KGEpJiYoYT1lLmVudi5OT0RFX0RFQlVHfHxcIlwiKSx0PXQudG9VcHBlckNhc2UoKSwhb1t0XSlpZihuZXcgUmVnRXhwKFwiXFxcXGJcIit0K1wiXFxcXGJcIixcImlcIikudGVzdChhKSl7dmFyIG49ZS5waWQ7b1t0XT1mdW5jdGlvbigpe3ZhciBlPXIuZm9ybWF0LmFwcGx5KHIsYXJndW1lbnRzKTtjb25zb2xlLmVycm9yKFwiJXMgJWQ6ICVzXCIsdCxuLGUpfX1lbHNlIG9bdF09ZnVuY3Rpb24oKXt9O3JldHVybiBvW3RdfSxyLmluc3BlY3Q9cyxzLmNvbG9ycz17Ym9sZDpbMSwyMl0saXRhbGljOlszLDIzXSx1bmRlcmxpbmU6WzQsMjRdLGludmVyc2U6WzcsMjddLHdoaXRlOlszNywzOV0sZ3JleTpbOTAsMzldLGJsYWNrOlszMCwzOV0sYmx1ZTpbMzQsMzldLGN5YW46WzM2LDM5XSxncmVlbjpbMzIsMzldLG1hZ2VudGE6WzM1LDM5XSxyZWQ6WzMxLDM5XSx5ZWxsb3c6WzMzLDM5XX0scy5zdHlsZXM9e3NwZWNpYWw6XCJjeWFuXCIsbnVtYmVyOlwieWVsbG93XCIsYm9vbGVhbjpcInllbGxvd1wiLHVuZGVmaW5lZDpcImdyZXlcIixudWxsOlwiYm9sZFwiLHN0cmluZzpcImdyZWVuXCIsZGF0ZTpcIm1hZ2VudGFcIixyZWdleHA6XCJyZWRcIn0sci5pc0FycmF5PXAsci5pc0Jvb2xlYW49ZCxyLmlzTnVsbD1nLHIuaXNOdWxsT3JVbmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXR9LHIuaXNOdW1iZXI9dixyLmlzU3RyaW5nPW0sci5pc1N5bWJvbD1mdW5jdGlvbih0KXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgdH0sci5pc1VuZGVmaW5lZD15LHIuaXNSZWdFeHA9eCxyLmlzT2JqZWN0PWIsci5pc0RhdGU9XyxyLmlzRXJyb3I9dyxyLmlzRnVuY3Rpb249ayxyLmlzUHJpbWl0aXZlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dHx8XCJib29sZWFuXCI9PXR5cGVvZiB0fHxcIm51bWJlclwiPT10eXBlb2YgdHx8XCJzdHJpbmdcIj09dHlwZW9mIHR8fFwic3ltYm9sXCI9PXR5cGVvZiB0fHxcInVuZGVmaW5lZFwiPT10eXBlb2YgdH0sci5pc0J1ZmZlcj10KFwiLi9zdXBwb3J0L2lzQnVmZmVyXCIpO3ZhciBNPVtcIkphblwiLFwiRmViXCIsXCJNYXJcIixcIkFwclwiLFwiTWF5XCIsXCJKdW5cIixcIkp1bFwiLFwiQXVnXCIsXCJTZXBcIixcIk9jdFwiLFwiTm92XCIsXCJEZWNcIl07ZnVuY3Rpb24gUyh0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX1yLmxvZz1mdW5jdGlvbigpe3ZhciB0LGU7Y29uc29sZS5sb2coXCIlcyAtICVzXCIsKHQ9bmV3IERhdGUsZT1bVCh0LmdldEhvdXJzKCkpLFQodC5nZXRNaW51dGVzKCkpLFQodC5nZXRTZWNvbmRzKCkpXS5qb2luKFwiOlwiKSxbdC5nZXREYXRlKCksTVt0LmdldE1vbnRoKCldLGVdLmpvaW4oXCIgXCIpKSxyLmZvcm1hdC5hcHBseShyLGFyZ3VtZW50cykpfSxyLmluaGVyaXRzPXQoXCJpbmhlcml0c1wiKSxyLl9leHRlbmQ9ZnVuY3Rpb24odCxlKXtpZighZXx8IWIoZSkpcmV0dXJuIHQ7Zm9yKHZhciByPU9iamVjdC5rZXlzKGUpLG49ci5sZW5ndGg7bi0tOyl0W3Jbbl1dPWVbcltuXV07cmV0dXJuIHR9fSkuY2FsbCh0aGlzLHQoXCJfcHJvY2Vzc1wiKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se1wiLi9zdXBwb3J0L2lzQnVmZmVyXCI6NjEsX3Byb2Nlc3M6NDc1LGluaGVyaXRzOjYwfV0sNjM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGF0b2IodCl9fSx7fV0sNjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5sZW5ndGgsYT1uZXcgQXJyYXkocisxKSxvPTA7bzxyOysrbyl7Zm9yKHZhciBzPW5ldyBBcnJheShyKzEpLGw9MDtsPD1yOysrbClzW2xdPXRbbF1bb107YVtvXT1zfWFbcl09bmV3IEFycmF5KHIrMSk7Zm9yKHZhciBvPTA7bzw9cjsrK28pYVtyXVtvXT0xO2Zvcih2YXIgYz1uZXcgQXJyYXkocisxKSxvPTA7bzxyOysrbyljW29dPWVbb107Y1tyXT0xO3ZhciB1PW4oYSxjKSxoPWkodVtyKzFdKTswPT09aCYmKGg9MSk7Zm9yKHZhciBmPW5ldyBBcnJheShyKzEpLG89MDtvPD1yOysrbylmW29dPWkodVtvXSkvaDtyZXR1cm4gZn07dmFyIG49dChcInJvYnVzdC1saW5lYXItc29sdmVcIik7ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDsrK3IpZSs9dFtyXTtyZXR1cm4gZX19LHtcInJvYnVzdC1saW5lYXItc29sdmVcIjo0OTR9XSw2NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IuYnl0ZUxlbmd0aD1mdW5jdGlvbih0KXt2YXIgZT1jKHQpLHI9ZVswXSxuPWVbMV07cmV0dXJuIDMqKHIrbikvNC1ufSxyLnRvQnl0ZUFycmF5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPWModCksbj1yWzBdLG89clsxXSxzPW5ldyBhKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMyooZStyKS80LXJ9KDAsbixvKSksbD0wLHU9bz4wP24tNDpuLGg9MDtoPHU7aCs9NCllPWlbdC5jaGFyQ29kZUF0KGgpXTw8MTh8aVt0LmNoYXJDb2RlQXQoaCsxKV08PDEyfGlbdC5jaGFyQ29kZUF0KGgrMildPDw2fGlbdC5jaGFyQ29kZUF0KGgrMyldLHNbbCsrXT1lPj4xNiYyNTUsc1tsKytdPWU+PjgmMjU1LHNbbCsrXT0yNTUmZTsyPT09byYmKGU9aVt0LmNoYXJDb2RlQXQoaCldPDwyfGlbdC5jaGFyQ29kZUF0KGgrMSldPj40LHNbbCsrXT0yNTUmZSk7MT09PW8mJihlPWlbdC5jaGFyQ29kZUF0KGgpXTw8MTB8aVt0LmNoYXJDb2RlQXQoaCsxKV08PDR8aVt0LmNoYXJDb2RlQXQoaCsyKV0+PjIsc1tsKytdPWU+PjgmMjU1LHNbbCsrXT0yNTUmZSk7cmV0dXJuIHN9LHIuZnJvbUJ5dGVBcnJheT1mdW5jdGlvbih0KXtmb3IodmFyIGUscj10Lmxlbmd0aCxpPXIlMyxhPVtdLG89MCxzPXItaTtvPHM7bys9MTYzODMpYS5wdXNoKHUodCxvLG8rMTYzODM+cz9zOm8rMTYzODMpKTsxPT09aT8oZT10W3ItMV0sYS5wdXNoKG5bZT4+Ml0rbltlPDw0JjYzXStcIj09XCIpKToyPT09aSYmKGU9KHRbci0yXTw8OCkrdFtyLTFdLGEucHVzaChuW2U+PjEwXStuW2U+PjQmNjNdK25bZTw8MiY2M10rXCI9XCIpKTtyZXR1cm4gYS5qb2luKFwiXCIpfTtmb3IodmFyIG49W10saT1bXSxhPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksbz1cIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky9cIixzPTAsbD1vLmxlbmd0aDtzPGw7KytzKW5bc109b1tzXSxpW28uY2hhckNvZGVBdChzKV09cztmdW5jdGlvbiBjKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGUlND4wKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDRcIik7dmFyIHI9dC5pbmRleE9mKFwiPVwiKTtyZXR1cm4tMT09PXImJihyPWUpLFtyLHI9PT1lPzA6NC1yJTRdfWZ1bmN0aW9uIHUodCxlLHIpe2Zvcih2YXIgaSxhLG89W10scz1lO3M8cjtzKz0zKWk9KHRbc108PDE2JjE2NzExNjgwKSsodFtzKzFdPDw4JjY1MjgwKSsoMjU1JnRbcysyXSksby5wdXNoKG5bKGE9aSk+PjE4JjYzXStuW2E+PjEyJjYzXStuW2E+PjYmNjNdK25bNjMmYV0pO3JldHVybiBvLmpvaW4oXCJcIil9aVtcIi1cIi5jaGFyQ29kZUF0KDApXT02MixpW1wiX1wiLmNoYXJDb2RlQXQoMCldPTYzfSx7fV0sNjY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9saWIvcmF0aW9uYWxpemVcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odFswXS5tdWwoZVsxXSkuYWRkKGVbMF0ubXVsKHRbMV0pKSx0WzFdLm11bChlWzFdKSl9fSx7XCIuL2xpYi9yYXRpb25hbGl6ZVwiOjc2fV0sNjc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXS5tdWwoZVsxXSkuY21wKGVbMF0ubXVsKHRbMV0pKX19LHt9XSw2ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2xpYi9yYXRpb25hbGl6ZVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0WzBdLm11bChlWzFdKSx0WzFdLm11bChlWzBdKSl9fSx7XCIuL2xpYi9yYXRpb25hbGl6ZVwiOjc2fV0sNjk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9pcy1yYXRcIiksaT10KFwiLi9saWIvaXMtYm5cIiksYT10KFwiLi9saWIvbnVtLXRvLWJuXCIpLG89dChcIi4vbGliL3N0ci10by1iblwiKSxzPXQoXCIuL2xpYi9yYXRpb25hbGl6ZVwiKSxsPXQoXCIuL2RpdlwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24gdChlLHIpe2lmKG4oZSkpcmV0dXJuIHI/bChlLHQocikpOltlWzBdLmNsb25lKCksZVsxXS5jbG9uZSgpXTt2YXIgYz0wO3ZhciB1LGg7aWYoaShlKSl1PWUuY2xvbmUoKTtlbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXU9byhlKTtlbHNle2lmKDA9PT1lKXJldHVyblthKDApLGEoMSldO2lmKGU9PT1NYXRoLmZsb29yKGUpKXU9YShlKTtlbHNle2Zvcig7ZSE9PU1hdGguZmxvb3IoZSk7KWUqPU1hdGgucG93KDIsMjU2KSxjLT0yNTY7dT1hKGUpfX1pZihuKHIpKXUubXVsKHJbMV0pLGg9clswXS5jbG9uZSgpO2Vsc2UgaWYoaShyKSloPXIuY2xvbmUoKTtlbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiByKWg9byhyKTtlbHNlIGlmKHIpaWYocj09PU1hdGguZmxvb3IocikpaD1hKHIpO2Vsc2V7Zm9yKDtyIT09TWF0aC5mbG9vcihyKTspcio9TWF0aC5wb3coMiwyNTYpLGMrPTI1NjtoPWEocil9ZWxzZSBoPWEoMSk7Yz4wP3U9dS51c2hsbihjKTpjPDAmJihoPWgudXNobG4oLWMpKTtyZXR1cm4gcyh1LGgpfX0se1wiLi9kaXZcIjo2OCxcIi4vaXMtcmF0XCI6NzAsXCIuL2xpYi9pcy1iblwiOjc0LFwiLi9saWIvbnVtLXRvLWJuXCI6NzUsXCIuL2xpYi9yYXRpb25hbGl6ZVwiOjc2LFwiLi9saWIvc3RyLXRvLWJuXCI6Nzd9XSw3MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2xpYi9pcy1iblwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJjI9PT10Lmxlbmd0aCYmbih0WzBdKSYmbih0WzFdKX19LHtcIi4vbGliL2lzLWJuXCI6NzR9XSw3MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJibi5qc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY21wKG5ldyBuKDApKX19LHtcImJuLmpzXCI6ODV9XSw3MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2JuLXNpZ25cIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLHI9dC53b3JkcyxpPTA7aWYoMT09PWUpaT1yWzBdO2Vsc2UgaWYoMj09PWUpaT1yWzBdKzY3MTA4ODY0KnJbMV07ZWxzZSBmb3IodmFyIGE9MDthPGU7YSsrKXt2YXIgbz1yW2FdO2krPW8qTWF0aC5wb3coNjcxMDg4NjQsYSl9cmV0dXJuIG4odCkqaX19LHtcIi4vYm4tc2lnblwiOjcxfV0sNzM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZG91YmxlLWJpdHNcIiksaT10KFwiYml0LXR3aWRkbGVcIikuY291bnRUcmFpbGluZ1plcm9zO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1pKG4ubG8odCkpO2lmKGU8MzIpcmV0dXJuIGU7dmFyIHI9aShuLmhpKHQpKTtpZihyPjIwKXJldHVybiA1MjtyZXR1cm4gciszMn19LHtcImJpdC10d2lkZGxlXCI6ODMsXCJkb3VibGUtYml0c1wiOjE1OX1dLDc0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dChcImJuLmpzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmXCJvYmplY3RcIj09dHlwZW9mIHQmJkJvb2xlYW4odC53b3Jkcyl9fSx7XCJibi5qc1wiOjg1fV0sNzU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiYm4uanNcIiksaT10KFwiZG91YmxlLWJpdHNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWkuZXhwb25lbnQodCk7cmV0dXJuIGU8NTI/bmV3IG4odCk6bmV3IG4odCpNYXRoLnBvdygyLDUyLWUpKS51c2hsbihlLTUyKX19LHtcImJuLmpzXCI6ODUsXCJkb3VibGUtYml0c1wiOjE1OX1dLDc2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vbnVtLXRvLWJuXCIpLGk9dChcIi4vYm4tc2lnblwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1pKHQpLGE9aShlKTtpZigwPT09cilyZXR1cm5bbigwKSxuKDEpXTtpZigwPT09YSlyZXR1cm5bbigwKSxuKDApXTthPDAmJih0PXQubmVnKCksZT1lLm5lZygpKTt2YXIgbz10LmdjZChlKTtpZihvLmNtcG4oMSkpcmV0dXJuW3QuZGl2KG8pLGUuZGl2KG8pXTtyZXR1cm5bdCxlXX19LHtcIi4vYm4tc2lnblwiOjcxLFwiLi9udW0tdG8tYm5cIjo3NX1dLDc3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImJuLmpzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG4odCl9fSx7XCJibi5qc1wiOjg1fV0sNzg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9saWIvcmF0aW9uYWxpemVcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odFswXS5tdWwoZVswXSksdFsxXS5tdWwoZVsxXSkpfX0se1wiLi9saWIvcmF0aW9uYWxpemVcIjo3Nn1dLDc5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vbGliL2JuLXNpZ25cIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRbMF0pKm4odFsxXSl9fSx7XCIuL2xpYi9ibi1zaWduXCI6NzF9XSw4MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2xpYi9yYXRpb25hbGl6ZVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0WzBdLm11bChlWzFdKS5zdWIodFsxXS5tdWwoZVswXSkpLHRbMV0ubXVsKGVbMV0pKX19LHtcIi4vbGliL3JhdGlvbmFsaXplXCI6NzZ9XSw4MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2xpYi9ibi10by1udW1cIiksaT10KFwiLi9saWIvY3R6XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXTtpZigwPT09ZS5jbXBuKDApKXJldHVybiAwO3ZhciBhPWUuYWJzKCkuZGl2bW9kKHIuYWJzKCkpLG89YS5kaXYscz1uKG8pLGw9YS5tb2QsYz1lLm5lZ2F0aXZlIT09ci5uZWdhdGl2ZT8tMToxO2lmKDA9PT1sLmNtcG4oMCkpcmV0dXJuIGMqcztpZihzKXt2YXIgdT1pKHMpKzQsaD1uKGwudXNobG4odSkuZGl2Um91bmQocikpO3JldHVybiBjKihzK2gqTWF0aC5wb3coMiwtdSkpfXZhciBmPXIuYml0TGVuZ3RoKCktbC5iaXRMZW5ndGgoKSs1MyxoPW4obC51c2hsbihmKS5kaXZSb3VuZChyKSk7cmV0dXJuIGY8MTAyMz9jKmgqTWF0aC5wb3coMiwtZik6KGgqPU1hdGgucG93KDIsLTEwMjMpLGMqaCpNYXRoLnBvdygyLDEwMjMtZikpfX0se1wiLi9saWIvYm4tdG8tbnVtXCI6NzIsXCIuL2xpYi9jdHpcIjo3M31dLDgyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUscixuLGksYSl7dmFyIG89W1wiZnVuY3Rpb24gXCIsdCxcIihhLGwsaCxcIixuLmpvaW4oXCIsXCIpLFwiKXtcIixhP1wiXCI6XCJ2YXIgaT1cIixyP1wibC0xXCI6XCJoKzFcIixcIjt3aGlsZShsPD1oKXt2YXIgbT0obCtoKT4+PjEseD1hXCIsaT9cIi5nZXQobSlcIjpcIlttXVwiXTtyZXR1cm4gYT9lLmluZGV4T2YoXCJjXCIpPDA/by5wdXNoKFwiO2lmKHg9PT15KXtyZXR1cm4gbX1lbHNlIGlmKHg8PXkpe1wiKTpvLnB1c2goXCI7dmFyIHA9Yyh4LHkpO2lmKHA9PT0wKXtyZXR1cm4gbX1lbHNlIGlmKHA8PTApe1wiKTpvLnB1c2goXCI7aWYoXCIsZSxcIil7aT1tO1wiKSxyP28ucHVzaChcImw9bSsxfWVsc2V7aD1tLTF9XCIpOm8ucHVzaChcImg9bS0xfWVsc2V7bD1tKzF9XCIpLG8ucHVzaChcIn1cIiksYT9vLnB1c2goXCJyZXR1cm4gLTF9O1wiKTpvLnB1c2goXCJyZXR1cm4gaX07XCIpLG8uam9pbihcIlwiKX1mdW5jdGlvbiBpKHQsZSxyLGkpe3JldHVybiBuZXcgRnVuY3Rpb24oW24oXCJBXCIsXCJ4XCIrdCtcInlcIixlLFtcInlcIl0sITEsaSksbihcIkJcIixcInhcIit0K1wieVwiLGUsW1wieVwiXSwhMCxpKSxuKFwiUFwiLFwiYyh4LHkpXCIrdCtcIjBcIixlLFtcInlcIixcImNcIl0sITEsaSksbihcIlFcIixcImMoeCx5KVwiK3QrXCIwXCIsZSxbXCJ5XCIsXCJjXCJdLCEwLGkpLFwiZnVuY3Rpb24gZGlzcGF0Y2hCc2VhcmNoXCIscixcIihhLHksYyxsLGgpe2lmKGEuc2hhcGUpe2lmKHR5cGVvZihjKT09PSdmdW5jdGlvbicpe3JldHVybiBRKGEsKGw9PT11bmRlZmluZWQpPzA6bHwwLChoPT09dW5kZWZpbmVkKT9hLnNoYXBlWzBdLTE6aHwwLHksYyl9ZWxzZXtyZXR1cm4gQihhLChjPT09dW5kZWZpbmVkKT8wOmN8MCwobD09PXVuZGVmaW5lZCk/YS5zaGFwZVswXS0xOmx8MCx5KX19ZWxzZXtpZih0eXBlb2YoYyk9PT0nZnVuY3Rpb24nKXtyZXR1cm4gUChhLChsPT09dW5kZWZpbmVkKT8wOmx8MCwoaD09PXVuZGVmaW5lZCk/YS5sZW5ndGgtMTpofDAseSxjKX1lbHNle3JldHVybiBBKGEsKGM9PT11bmRlZmluZWQpPzA6Y3wwLChsPT09dW5kZWZpbmVkKT9hLmxlbmd0aC0xOmx8MCx5KX19fXJldHVybiBkaXNwYXRjaEJzZWFyY2hcIixyXS5qb2luKFwiXCIpKSgpfWUuZXhwb3J0cz17Z2U6aShcIj49XCIsITEsXCJHRVwiKSxndDppKFwiPlwiLCExLFwiR1RcIiksbHQ6aShcIjxcIiwhMCxcIkxUXCIpLGxlOmkoXCI8PVwiLCEwLFwiTEVcIiksZXE6aShcIi1cIiwhMCxcIkVRXCIsITApfX0se31dLDgzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXt2YXIgZT0zMjtyZXR1cm4odCY9LXQpJiZlLS0sNjU1MzUmdCYmKGUtPTE2KSwxNjcxMTkzNSZ0JiYoZS09OCksMjUyNjQ1MTM1JnQmJihlLT00KSw4NTg5OTM0NTkmdCYmKGUtPTIpLDE0MzE2NTU3NjUmdCYmKGUtPTEpLGV9ci5JTlRfQklUUz0zMixyLklOVF9NQVg9MjE0NzQ4MzY0NyxyLklOVF9NSU49LTE8PDMxLHIuc2lnbj1mdW5jdGlvbih0KXtyZXR1cm4odD4wKS0odDwwKX0sci5hYnM9ZnVuY3Rpb24odCl7dmFyIGU9dD4+MzE7cmV0dXJuKHReZSktZX0sci5taW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gZV4odF5lKSYtKHQ8ZSl9LHIubWF4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHReKHReZSkmLSh0PGUpfSxyLmlzUG93Mj1mdW5jdGlvbih0KXtyZXR1cm4hKHQmdC0xfHwhdCl9LHIubG9nMj1mdW5jdGlvbih0KXt2YXIgZSxyO3JldHVybiBlPSh0PjY1NTM1KTw8NCxlfD1yPSgodD4+Pj1lKT4yNTUpPDwzLGV8PXI9KCh0Pj4+PXIpPjE1KTw8MiwoZXw9cj0oKHQ+Pj49cik+Myk8PDEpfCh0Pj4+PXIpPj4xfSxyLmxvZzEwPWZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xZTk/OTp0Pj0xZTg/ODp0Pj0xZTc/Nzp0Pj0xZTY/Njp0Pj0xZTU/NTp0Pj0xZTQ/NDp0Pj0xZTM/Mzp0Pj0xMDA/Mjp0Pj0xMD8xOjB9LHIucG9wQ291bnQ9ZnVuY3Rpb24odCl7cmV0dXJuIDE2ODQzMDA5KigodD0oODU4OTkzNDU5Jih0LT10Pj4+MSYxNDMxNjU1NzY1KSkrKHQ+Pj4yJjg1ODk5MzQ1OSkpKyh0Pj4+NCkmMjUyNjQ1MTM1KT4+PjI0fSxyLmNvdW50VHJhaWxpbmdaZXJvcz1uLHIubmV4dFBvdzI9ZnVuY3Rpb24odCl7cmV0dXJuIHQrPTA9PT10LC0tdCx0fD10Pj4+MSx0fD10Pj4+Mix0fD10Pj4+NCx0fD10Pj4+OCwodHw9dD4+PjE2KSsxfSxyLnByZXZQb3cyPWZ1bmN0aW9uKHQpe3JldHVybiB0fD10Pj4+MSx0fD10Pj4+Mix0fD10Pj4+NCx0fD10Pj4+OCwodHw9dD4+PjE2KS0odD4+PjEpfSxyLnBhcml0eT1mdW5jdGlvbih0KXtyZXR1cm4gdF49dD4+PjE2LHRePXQ+Pj44LHRePXQ+Pj40LDI3MDMwPj4+KHQmPTE1KSYxfTt2YXIgaT1uZXcgQXJyYXkoMjU2KTshZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTwyNTY7KytlKXt2YXIgcj1lLG49ZSxpPTc7Zm9yKHI+Pj49MTtyO3I+Pj49MSluPDw9MSxufD0xJnIsLS1pO3RbZV09bjw8aSYyNTV9fShpKSxyLnJldmVyc2U9ZnVuY3Rpb24odCl7cmV0dXJuIGlbMjU1JnRdPDwyNHxpW3Q+Pj44JjI1NV08PDE2fGlbdD4+PjE2JjI1NV08PDh8aVt0Pj4+MjQmMjU1XX0sci5pbnRlcmxlYXZlMj1mdW5jdGlvbih0LGUpe3JldHVybih0PTE0MzE2NTU3NjUmKCh0PTg1ODk5MzQ1OSYoKHQ9MjUyNjQ1MTM1JigodD0xNjcxMTkzNSYoKHQmPTY1NTM1KXx0PDw4KSl8dDw8NCkpfHQ8PDIpKXx0PDwxKSl8KGU9MTQzMTY1NTc2NSYoKGU9ODU4OTkzNDU5JigoZT0yNTI2NDUxMzUmKChlPTE2NzExOTM1JigoZSY9NjU1MzUpfGU8PDgpKXxlPDw0KSl8ZTw8MikpfGU8PDEpKTw8MX0sci5kZWludGVybGVhdmUyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQ9NjU1MzUmKCh0PTE2NzExOTM1JigodD0yNTI2NDUxMzUmKCh0PTg1ODk5MzQ1OSYoKHQ9dD4+PmUmMTQzMTY1NTc2NSl8dD4+PjEpKXx0Pj4+MikpfHQ+Pj40KSl8dD4+PjE2KSk8PDE2Pj4xNn0sci5pbnRlcmxlYXZlMz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9MTIyNzEzMzUxMyYoKHQ9MzI3MjM1NjAzNSYoKHQ9MjUxNzE5Njk1JigodD00Mjc4MTkwMzM1JigodCY9MTAyMyl8dDw8MTYpKXx0PDw4KSl8dDw8NCkpfHQ8PDIpLCh0fD0oZT0xMjI3MTMzNTEzJigoZT0zMjcyMzU2MDM1JigoZT0yNTE3MTk2OTUmKChlPTQyNzgxOTAzMzUmKChlJj0xMDIzKXxlPDwxNikpfGU8PDgpKXxlPDw0KSl8ZTw8MikpPDwxKXwocj0xMjI3MTMzNTEzJigocj0zMjcyMzU2MDM1Jigocj0yNTE3MTk2OTUmKChyPTQyNzgxOTAzMzUmKChyJj0xMDIzKXxyPDwxNikpfHI8PDgpKXxyPDw0KSl8cjw8MikpPDwyfSxyLmRlaW50ZXJsZWF2ZTM9ZnVuY3Rpb24odCxlKXtyZXR1cm4odD0xMDIzJigodD00Mjc4MTkwMzM1JigodD0yNTE3MTk2OTUmKCh0PTMyNzIzNTYwMzUmKCh0PXQ+Pj5lJjEyMjcxMzM1MTMpfHQ+Pj4yKSl8dD4+PjQpKXx0Pj4+OCkpfHQ+Pj4xNikpPDwyMj4+MjJ9LHIubmV4dENvbWJpbmF0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXR8dC0xO3JldHVybiBlKzF8KH5lJi1+ZSktMT4+Pm4odCkrMX19LHt9XSw4NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJjbGFtcFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlfHwoZT17fSk7dmFyIHIsbyxzLGwsYyx1LGgsZixwLGQsZyx2PW51bGw9PWUuY3V0b2ZmPy4yNTplLmN1dG9mZixtPW51bGw9PWUucmFkaXVzPzg6ZS5yYWRpdXMseT1lLmNoYW5uZWx8fDA7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHQpfHxBcnJheS5pc0FycmF5KHQpKXtpZighZS53aWR0aHx8IWUuaGVpZ2h0KXRocm93IEVycm9yKFwiRm9yIHJhdyBkYXRhIHdpZHRoIGFuZCBoZWlnaHQgc2hvdWxkIGJlIHByb3ZpZGVkIGJ5IG9wdGlvbnNcIik7cj1lLndpZHRoLG89ZS5oZWlnaHQsbD10LHU9ZS5zdHJpZGU/ZS5zdHJpZGU6TWF0aC5mbG9vcih0Lmxlbmd0aC9yL28pfWVsc2Ugd2luZG93LkhUTUxDYW52YXNFbGVtZW50JiZ0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxDYW52YXNFbGVtZW50PyhoPShmPXQpLmdldENvbnRleHQoXCIyZFwiKSxyPWYud2lkdGgsbz1mLmhlaWdodCxwPWguZ2V0SW1hZ2VEYXRhKDAsMCxyLG8pLGw9cC5kYXRhLHU9NCk6d2luZG93LkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCYmdCBpbnN0YW5jZW9mIHdpbmRvdy5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ/KGY9dC5jYW52YXMsaD10LHI9Zi53aWR0aCxvPWYuaGVpZ2h0LHA9aC5nZXRJbWFnZURhdGEoMCwwLHIsbyksbD1wLmRhdGEsdT00KTp3aW5kb3cuSW1hZ2VEYXRhJiZ0IGluc3RhbmNlb2Ygd2luZG93LkltYWdlRGF0YSYmKHA9dCxyPXQud2lkdGgsbz10LmhlaWdodCxsPXAuZGF0YSx1PTQpO2lmKHM9TWF0aC5tYXgocixvKSx3aW5kb3cuVWludDhDbGFtcGVkQXJyYXkmJmwgaW5zdGFuY2VvZiB3aW5kb3cuVWludDhDbGFtcGVkQXJyYXl8fHdpbmRvdy5VaW50OEFycmF5JiZsIGluc3RhbmNlb2Ygd2luZG93LlVpbnQ4QXJyYXkpZm9yKGM9bCxsPUFycmF5KHIqbyksZD0wLGc9Yy5sZW5ndGg7ZDxnO2QrKylsW2RdPWNbZCp1K3ldLzI1NTtlbHNlIGlmKDEhPT11KXRocm93IEVycm9yKFwiUmF3IGRhdGEgY2FuIGhhdmUgb25seSAxIHZhbHVlIHBlciBwaXhlbFwiKTt2YXIgeD1BcnJheShyKm8pLGI9QXJyYXkocipvKSxfPUFycmF5KHMpLHc9QXJyYXkocyksaz1BcnJheShzKzEpLEE9QXJyYXkocyk7Zm9yKGQ9MCxnPXIqbztkPGc7ZCsrKXt2YXIgVD1sW2RdO3hbZF09MT09PVQ/MDowPT09VD9pOk1hdGgucG93KE1hdGgubWF4KDAsLjUtVCksMiksYltkXT0xPT09VD9pOjA9PT1UPzA6TWF0aC5wb3coTWF0aC5tYXgoMCxULS41KSwyKX1hKHgscixvLF8sdyxBLGspLGEoYixyLG8sXyx3LEEsayk7dmFyIE09d2luZG93LkZsb2F0MzJBcnJheT9uZXcgRmxvYXQzMkFycmF5KHIqbyk6bmV3IEFycmF5KHIqbyk7Zm9yKGQ9MCxnPXIqbztkPGc7ZCsrKU1bZF09bigxLSgoeFtkXS1iW2RdKS9tK3YpLDAsMSk7cmV0dXJuIE19O3ZhciBpPTFlMjA7ZnVuY3Rpb24gYSh0LGUscixuLGksYSxzKXtmb3IodmFyIGw9MDtsPGU7bCsrKXtmb3IodmFyIGM9MDtjPHI7YysrKW5bY109dFtjKmUrbF07Zm9yKG8obixpLGEscyxyKSxjPTA7YzxyO2MrKyl0W2MqZStsXT1pW2NdfWZvcihjPTA7YzxyO2MrKyl7Zm9yKGw9MDtsPGU7bCsrKW5bbF09dFtjKmUrbF07Zm9yKG8obixpLGEscyxlKSxsPTA7bDxlO2wrKyl0W2MqZStsXT1NYXRoLnNxcnQoaVtsXSl9fWZ1bmN0aW9uIG8odCxlLHIsbixhKXtyWzBdPTAsblswXT0taSxuWzFdPStpO2Zvcih2YXIgbz0xLHM9MDtvPGE7bysrKXtmb3IodmFyIGw9KHRbb10rbypvLSh0W3Jbc11dK3Jbc10qcltzXSkpLygyKm8tMipyW3NdKTtsPD1uW3NdOylzLS0sbD0odFtvXStvKm8tKHRbcltzXV0rcltzXSpyW3NdKSkvKDIqby0yKnJbc10pO3JbKytzXT1vLG5bc109bCxuW3MrMV09K2l9Zm9yKG89MCxzPTA7bzxhO28rKyl7Zm9yKDtuW3MrMV08bzspcysrO2Vbb109KG8tcltzXSkqKG8tcltzXSkrdFtyW3NdXX19fSx7Y2xhbXA6MTA2fV0sODU6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24oZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fFwiQXNzZXJ0aW9uIGZhaWxlZFwiKX1mdW5jdGlvbiBpKHQsZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH1mdW5jdGlvbiBhKHQsZSxyKXtpZihhLmlzQk4odCkpcmV0dXJuIHQ7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PXQmJihcImxlXCIhPT1lJiZcImJlXCIhPT1lfHwocj1lLGU9MTApLHRoaXMuX2luaXQodHx8MCxlfHwxMCxyfHxcImJlXCIpKX12YXIgbztcIm9iamVjdFwiPT10eXBlb2YgZT9lLmV4cG9ydHM9YTpyLkJOPWEsYS5CTj1hLGEud29yZFNpemU9MjY7dHJ5e289dChcImJ1ZmZlclwiKS5CdWZmZXJ9Y2F0Y2godCl7fWZ1bmN0aW9uIHModCxlLHIpe2Zvcih2YXIgbj0wLGk9TWF0aC5taW4odC5sZW5ndGgsciksYT1lO2E8aTthKyspe3ZhciBvPXQuY2hhckNvZGVBdChhKS00ODtuPDw9NCxufD1vPj00OSYmbzw9NTQ/by00OSsxMDpvPj0xNyYmbzw9MjI/by0xNysxMDoxNSZvfXJldHVybiBufWZ1bmN0aW9uIGwodCxlLHIsbil7Zm9yKHZhciBpPTAsYT1NYXRoLm1pbih0Lmxlbmd0aCxyKSxvPWU7bzxhO28rKyl7dmFyIHM9dC5jaGFyQ29kZUF0KG8pLTQ4O2kqPW4saSs9cz49NDk/cy00OSsxMDpzPj0xNz9zLTE3KzEwOnN9cmV0dXJuIGl9YS5pc0JOPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgYXx8bnVsbCE9PXQmJlwib2JqZWN0XCI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yLndvcmRTaXplPT09YS53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheSh0LndvcmRzKX0sYS5tYXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jbXAoZSk+MD90OmV9LGEubWluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY21wKGUpPDA/dDplfSxhLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0LGUscil7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIodCxlLHIpO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0QXJyYXkodCxlLHIpO1wiaGV4XCI9PT1lJiYoZT0xNiksbihlPT09KDB8ZSkmJmU+PTImJmU8PTM2KTt2YXIgaT0wO1wiLVwiPT09KHQ9dC50b1N0cmluZygpLnJlcGxhY2UoL1xccysvZyxcIlwiKSlbMF0mJmkrKywxNj09PWU/dGhpcy5fcGFyc2VIZXgodCxpKTp0aGlzLl9wYXJzZUJhc2UodCxlLGkpLFwiLVwiPT09dFswXSYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpLFwibGVcIj09PXImJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxlLHIpfSxhLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbih0LGUscil7dDwwJiYodGhpcy5uZWdhdGl2ZT0xLHQ9LXQpLHQ8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnRdLHRoaXMubGVuZ3RoPTEpOnQ8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdCx0LzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToobih0PDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnQsdC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSxcImxlXCI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKX0sYS5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbih0LGUscil7aWYobihcIm51bWJlclwiPT10eXBlb2YgdC5sZW5ndGgpLHQubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHQubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPTA7dmFyIGEsbyxzPTA7aWYoXCJiZVwiPT09cilmb3IoaT10Lmxlbmd0aC0xLGE9MDtpPj0wO2ktPTMpbz10W2ldfHRbaS0xXTw8OHx0W2ktMl08PDE2LHRoaXMud29yZHNbYV18PW88PHMmNjcxMDg4NjMsdGhpcy53b3Jkc1thKzFdPW8+Pj4yNi1zJjY3MTA4ODYzLChzKz0yNCk+PTI2JiYocy09MjYsYSsrKTtlbHNlIGlmKFwibGVcIj09PXIpZm9yKGk9MCxhPTA7aTx0Lmxlbmd0aDtpKz0zKW89dFtpXXx0W2krMV08PDh8dFtpKzJdPDwxNix0aGlzLndvcmRzW2FdfD1vPDxzJjY3MTA4ODYzLHRoaXMud29yZHNbYSsxXT1vPj4+MjYtcyY2NzEwODg2Mywocys9MjQpPj0yNiYmKHMtPTI2LGErKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHQsZSl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKCh0Lmxlbmd0aC1lKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciByPTA7cjx0aGlzLmxlbmd0aDtyKyspdGhpcy53b3Jkc1tyXT0wO3ZhciBuLGksYT0wO2ZvcihyPXQubGVuZ3RoLTYsbj0wO3I+PWU7ci09NilpPXModCxyLHIrNiksdGhpcy53b3Jkc1tuXXw9aTw8YSY2NzEwODg2Myx0aGlzLndvcmRzW24rMV18PWk+Pj4yNi1hJjQxOTQzMDMsKGErPTI0KT49MjYmJihhLT0yNixuKyspO3IrNiE9PWUmJihpPXModCxlLHIrNiksdGhpcy53b3Jkc1tuXXw9aTw8YSY2NzEwODg2Myx0aGlzLndvcmRzW24rMV18PWk+Pj4yNi1hJjQxOTQzMDMpLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbih0LGUscil7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIG49MCxpPTE7aTw9NjcxMDg4NjM7aSo9ZSluKys7bi0tLGk9aS9lfDA7Zm9yKHZhciBhPXQubGVuZ3RoLXIsbz1hJW4scz1NYXRoLm1pbihhLGEtbykrcixjPTAsdT1yO3U8czt1Kz1uKWM9bCh0LHUsdStuLGUpLHRoaXMuaW11bG4oaSksdGhpcy53b3Jkc1swXStjPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWM6dGhpcy5faWFkZG4oYyk7aWYoMCE9PW8pe3ZhciBoPTE7Zm9yKGM9bCh0LHUsdC5sZW5ndGgsZSksdT0wO3U8bzt1KyspaCo9ZTt0aGlzLmltdWxuKGgpLHRoaXMud29yZHNbMF0rYzw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1jOnRoaXMuX2lhZGRuKGMpfX0sYS5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXt0LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aDtlKyspdC53b3Jkc1tlXT10aGlzLndvcmRzW2VdO3QubGVuZ3RoPXRoaXMubGVuZ3RoLHQubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSx0LnJlZD10aGlzLnJlZH0sYS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgYShudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHQpLHR9LGEucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24odCl7Zm9yKDt0aGlzLmxlbmd0aDx0Oyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LGEucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sYS5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LGEucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/XCI8Qk4tUjogXCI6XCI8Qk46IFwiKSt0aGlzLnRvU3RyaW5nKDE2KStcIj5cIn07dmFyIGM9W1wiXCIsXCIwXCIsXCIwMFwiLFwiMDAwXCIsXCIwMDAwXCIsXCIwMDAwMFwiLFwiMDAwMDAwXCIsXCIwMDAwMDAwXCIsXCIwMDAwMDAwMFwiLFwiMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCJdLHU9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0saD1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBmKHQsZSxyKXtyLm5lZ2F0aXZlPWUubmVnYXRpdmVedC5uZWdhdGl2ZTt2YXIgbj10Lmxlbmd0aCtlLmxlbmd0aHwwO3IubGVuZ3RoPW4sbj1uLTF8MDt2YXIgaT0wfHQud29yZHNbMF0sYT0wfGUud29yZHNbMF0sbz1pKmEscz02NzEwODg2MyZvLGw9by82NzEwODg2NHwwO3Iud29yZHNbMF09cztmb3IodmFyIGM9MTtjPG47YysrKXtmb3IodmFyIHU9bD4+PjI2LGg9NjcxMDg4NjMmbCxmPU1hdGgubWluKGMsZS5sZW5ndGgtMSkscD1NYXRoLm1heCgwLGMtdC5sZW5ndGgrMSk7cDw9ZjtwKyspe3ZhciBkPWMtcHwwO3UrPShvPShpPTB8dC53b3Jkc1tkXSkqKGE9MHxlLndvcmRzW3BdKStoKS82NzEwODg2NHwwLGg9NjcxMDg4NjMmb31yLndvcmRzW2NdPTB8aCxsPTB8dX1yZXR1cm4gMCE9PWw/ci53b3Jkc1tjXT0wfGw6ci5sZW5ndGgtLSxyLnN0cmlwKCl9YS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24odCxlKXt2YXIgcjtpZihlPTB8ZXx8MSwxNj09PSh0PXR8fDEwKXx8XCJoZXhcIj09PXQpe3I9XCJcIjtmb3IodmFyIGk9MCxhPTAsbz0wO288dGhpcy5sZW5ndGg7bysrKXt2YXIgcz10aGlzLndvcmRzW29dLGw9KDE2Nzc3MjE1JihzPDxpfGEpKS50b1N0cmluZygxNik7cj0wIT09KGE9cz4+PjI0LWkmMTY3NzcyMTUpfHxvIT09dGhpcy5sZW5ndGgtMT9jWzYtbC5sZW5ndGhdK2wrcjpsK3IsKGkrPTIpPj0yNiYmKGktPTI2LG8tLSl9Zm9yKDAhPT1hJiYocj1hLnRvU3RyaW5nKDE2KStyKTtyLmxlbmd0aCVlIT0wOylyPVwiMFwiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj1cIi1cIityKSxyfWlmKHQ9PT0oMHx0KSYmdD49MiYmdDw9MzYpe3ZhciBmPXVbdF0scD1oW3RdO3I9XCJcIjt2YXIgZD10aGlzLmNsb25lKCk7Zm9yKGQubmVnYXRpdmU9MDshZC5pc1plcm8oKTspe3ZhciBnPWQubW9kbihwKS50b1N0cmluZyh0KTtyPShkPWQuaWRpdm4ocCkpLmlzWmVybygpP2crcjpjW2YtZy5sZW5ndGhdK2crcn1mb3IodGhpcy5pc1plcm8oKSYmKHI9XCIwXCIrcik7ci5sZW5ndGglZSE9MDspcj1cIjBcIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9XCItXCIrcikscn1uKCExLFwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNlwiKX0sYS5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/dCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3QrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZuKCExLFwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzXCIpLDAhPT10aGlzLm5lZ2F0aXZlPy10OnR9LGEucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sYS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihcInVuZGVmaW5lZFwiIT10eXBlb2YgbyksdGhpcy50b0FycmF5TGlrZShvLHQsZSl9LGEucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSx0LGUpfSxhLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5ieXRlTGVuZ3RoKCksYT1yfHxNYXRoLm1heCgxLGkpO24oaTw9YSxcImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGhcIiksbihhPjAsXCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDBcIiksdGhpcy5zdHJpcCgpO3ZhciBvLHMsbD1cImxlXCI9PT1lLGM9bmV3IHQoYSksdT10aGlzLmNsb25lKCk7aWYobCl7Zm9yKHM9MDshdS5pc1plcm8oKTtzKyspbz11LmFuZGxuKDI1NSksdS5pdXNocm4oOCksY1tzXT1vO2Zvcig7czxhO3MrKyljW3NdPTB9ZWxzZXtmb3Iocz0wO3M8YS1pO3MrKyljW3NdPTA7Zm9yKHM9MDshdS5pc1plcm8oKTtzKyspbz11LmFuZGxuKDI1NSksdS5pdXNocm4oOCksY1thLXMtMV09b31yZXR1cm4gY30sTWF0aC5jbHozMj9hLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uKHQpe3JldHVybiAzMi1NYXRoLmNsejMyKHQpfTphLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQscj0wO3JldHVybiBlPj00MDk2JiYocis9MTMsZT4+Pj0xMyksZT49NjQmJihyKz03LGU+Pj49NyksZT49OCYmKHIrPTQsZT4+Pj00KSxlPj0yJiYocis9MixlPj4+PTIpLHIrZX0sYS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHQpe2lmKDA9PT10KXJldHVybiAyNjt2YXIgZT10LHI9MDtyZXR1cm4gMD09KDgxOTEmZSkmJihyKz0xMyxlPj4+PTEzKSwwPT0oMTI3JmUpJiYocis9NyxlPj4+PTcpLDA9PSgxNSZlKSYmKHIrPTQsZT4+Pj00KSwwPT0oMyZlKSYmKHIrPTIsZT4+Pj0yKSwwPT0oMSZlKSYmcisrLHJ9LGEucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciB0PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0sZT10aGlzLl9jb3VudEJpdHModCk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStlfSxhLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciB0PTAsZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2VdKTtpZih0Kz1yLDI2IT09cilicmVha31yZXR1cm4gdH0sYS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sYS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHQpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHQpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sYS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGVzdG4odC0xKT90aGlzLm5vdG4odCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sYS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LGEucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxhLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxhLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHQpe2Zvcig7dGhpcy5sZW5ndGg8dC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLndvcmRzW2VdPXRoaXMud29yZHNbZV18dC53b3Jkc1tlXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXVvcih0KX0sYS5wcm90b3R5cGUub3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IodCk6dC5jbG9uZSgpLmlvcih0aGlzKX0sYS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcih0KTp0LmNsb25lKCkuaXVvcih0aGlzKX0sYS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24odCl7dmFyIGU7ZT10aGlzLmxlbmd0aD50Lmxlbmd0aD90OnRoaXM7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdGhpcy53b3Jkc1tyXT10aGlzLndvcmRzW3JdJnQud29yZHNbcl07cmV0dXJuIHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdWFuZCh0KX0sYS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZCh0KTp0LmNsb25lKCkuaWFuZCh0aGlzKX0sYS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHQpOnQuY2xvbmUoKS5pdWFuZCh0aGlzKX0sYS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24odCl7dmFyIGUscjt0aGlzLmxlbmd0aD50Lmxlbmd0aD8oZT10aGlzLHI9dCk6KGU9dCxyPXRoaXMpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09ZS53b3Jkc1tuXV5yLndvcmRzW25dO2lmKHRoaXMhPT1lKWZvcig7bjxlLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT1lLndvcmRzW25dO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IodCl9LGEucHJvdG90eXBlLnhvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IodCk6dC5jbG9uZSgpLml4b3IodGhpcyl9LGEucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcih0KTp0LmNsb25lKCkuaXV4b3IodGhpcyl9LGEucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPTB8TWF0aC5jZWlsKHQvMjYpLHI9dCUyNjt0aGlzLl9leHBhbmQoZSkscj4wJiZlLS07Zm9yKHZhciBpPTA7aTxlO2krKyl0aGlzLndvcmRzW2ldPTY3MTA4ODYzJn50aGlzLndvcmRzW2ldO3JldHVybiByPjAmJih0aGlzLndvcmRzW2ldPX50aGlzLndvcmRzW2ldJjY3MTA4ODYzPj4yNi1yKSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bih0KX0sYS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbih0LGUpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciByPXQvMjZ8MCxpPXQlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLHRoaXMud29yZHNbcl09ZT90aGlzLndvcmRzW3JdfDE8PGk6dGhpcy53b3Jkc1tyXSZ+KDE8PGkpLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0KXt2YXIgZSxyLG47aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsZT10aGlzLmlzdWIodCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZSlyZXR1cm4gdC5uZWdhdGl2ZT0wLGU9dGhpcy5pc3ViKHQpLHQubmVnYXRpdmU9MSxlLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnQubGVuZ3RoPyhyPXRoaXMsbj10KToocj10LG49dGhpcyk7Zm9yKHZhciBpPTAsYT0wO2E8bi5sZW5ndGg7YSsrKWU9KDB8ci53b3Jkc1thXSkrKDB8bi53b3Jkc1thXSkraSx0aGlzLndvcmRzW2FdPTY3MTA4ODYzJmUsaT1lPj4+MjY7Zm9yKDswIT09aSYmYTxyLmxlbmd0aDthKyspZT0oMHxyLndvcmRzW2FdKStpLHRoaXMud29yZHNbYV09NjcxMDg4NjMmZSxpPWU+Pj4yNjtpZih0aGlzLmxlbmd0aD1yLmxlbmd0aCwwIT09aSl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1pLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihyIT09dGhpcylmb3IoO2E8ci5sZW5ndGg7YSsrKXRoaXMud29yZHNbYV09ci53b3Jkc1thXTtyZXR1cm4gdGhpc30sYS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiAwIT09dC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHQubmVnYXRpdmU9MCxlPXRoaXMuc3ViKHQpLHQubmVnYXRpdmVePTEsZSk6MD09PXQubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsZT10LnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsZSk6dGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQodCk6dC5jbG9uZSgpLmlhZGQodGhpcyl9LGEucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24odCl7aWYoMCE9PXQubmVnYXRpdmUpe3QubmVnYXRpdmU9MDt2YXIgZT10aGlzLmlhZGQodCk7cmV0dXJuIHQubmVnYXRpdmU9MSxlLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciByLG4saT10aGlzLmNtcCh0KTtpZigwPT09aSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7aT4wPyhyPXRoaXMsbj10KToocj10LG49dGhpcyk7Zm9yKHZhciBhPTAsbz0wO288bi5sZW5ndGg7bysrKWE9KGU9KDB8ci53b3Jkc1tvXSktKDB8bi53b3Jkc1tvXSkrYSk+PjI2LHRoaXMud29yZHNbb109NjcxMDg4NjMmZTtmb3IoOzAhPT1hJiZvPHIubGVuZ3RoO28rKylhPShlPSgwfHIud29yZHNbb10pK2EpPj4yNix0aGlzLndvcmRzW29dPTY3MTA4ODYzJmU7aWYoMD09PWEmJm88ci5sZW5ndGgmJnIhPT10aGlzKWZvcig7bzxyLmxlbmd0aDtvKyspdGhpcy53b3Jkc1tvXT1yLndvcmRzW29dO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxvKSxyIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHQpfTt2YXIgcD1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG89dC53b3JkcyxzPWUud29yZHMsbD1yLndvcmRzLGM9MCx1PTB8b1swXSxoPTgxOTEmdSxmPXU+Pj4xMyxwPTB8b1sxXSxkPTgxOTEmcCxnPXA+Pj4xMyx2PTB8b1syXSxtPTgxOTEmdix5PXY+Pj4xMyx4PTB8b1szXSxiPTgxOTEmeCxfPXg+Pj4xMyx3PTB8b1s0XSxrPTgxOTEmdyxBPXc+Pj4xMyxUPTB8b1s1XSxNPTgxOTEmVCxTPVQ+Pj4xMyxFPTB8b1s2XSxDPTgxOTEmRSxMPUU+Pj4xMyx6PTB8b1s3XSxPPTgxOTEmeixJPXo+Pj4xMyxEPTB8b1s4XSxQPTgxOTEmRCxSPUQ+Pj4xMyxGPTB8b1s5XSxCPTgxOTEmRixOPUY+Pj4xMyxqPTB8c1swXSxWPTgxOTEmaixVPWo+Pj4xMyxxPTB8c1sxXSxIPTgxOTEmcSxHPXE+Pj4xMyxZPTB8c1syXSxXPTgxOTEmWSxYPVk+Pj4xMyxaPTB8c1szXSwkPTgxOTEmWixKPVo+Pj4xMyxLPTB8c1s0XSxRPTgxOTEmSyx0dD1LPj4+MTMsZXQ9MHxzWzVdLHJ0PTgxOTEmZXQsbnQ9ZXQ+Pj4xMyxpdD0wfHNbNl0sYXQ9ODE5MSZpdCxvdD1pdD4+PjEzLHN0PTB8c1s3XSxsdD04MTkxJnN0LGN0PXN0Pj4+MTMsdXQ9MHxzWzhdLGh0PTgxOTEmdXQsZnQ9dXQ+Pj4xMyxwdD0wfHNbOV0sZHQ9ODE5MSZwdCxndD1wdD4+PjEzO3IubmVnYXRpdmU9dC5uZWdhdGl2ZV5lLm5lZ2F0aXZlLHIubGVuZ3RoPTE5O3ZhciB2dD0oYysobj1NYXRoLmltdWwoaCxWKSl8MCkrKCg4MTkxJihpPShpPU1hdGguaW11bChoLFUpKStNYXRoLmltdWwoZixWKXwwKSk8PDEzKXwwO2M9KChhPU1hdGguaW11bChmLFUpKSsoaT4+PjEzKXwwKSsodnQ+Pj4yNil8MCx2dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoZCxWKSxpPShpPU1hdGguaW11bChkLFUpKStNYXRoLmltdWwoZyxWKXwwLGE9TWF0aC5pbXVsKGcsVSk7dmFyIG10PShjKyhuPW4rTWF0aC5pbXVsKGgsSCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGgsRyl8MCkrTWF0aC5pbXVsKGYsSCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChmLEcpfDApKyhpPj4+MTMpfDApKyhtdD4+PjI2KXwwLG10Jj02NzEwODg2MyxuPU1hdGguaW11bChtLFYpLGk9KGk9TWF0aC5pbXVsKG0sVSkpK01hdGguaW11bCh5LFYpfDAsYT1NYXRoLmltdWwoeSxVKSxuPW4rTWF0aC5pbXVsKGQsSCl8MCxpPShpPWkrTWF0aC5pbXVsKGQsRyl8MCkrTWF0aC5pbXVsKGcsSCl8MCxhPWErTWF0aC5pbXVsKGcsRyl8MDt2YXIgeXQ9KGMrKG49bitNYXRoLmltdWwoaCxXKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxYKXwwKStNYXRoLmltdWwoZixXKXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGYsWCl8MCkrKGk+Pj4xMyl8MCkrKHl0Pj4+MjYpfDAseXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGIsViksaT0oaT1NYXRoLmltdWwoYixVKSkrTWF0aC5pbXVsKF8sVil8MCxhPU1hdGguaW11bChfLFUpLG49bitNYXRoLmltdWwobSxIKXwwLGk9KGk9aStNYXRoLmltdWwobSxHKXwwKStNYXRoLmltdWwoeSxIKXwwLGE9YStNYXRoLmltdWwoeSxHKXwwLG49bitNYXRoLmltdWwoZCxXKXwwLGk9KGk9aStNYXRoLmltdWwoZCxYKXwwKStNYXRoLmltdWwoZyxXKXwwLGE9YStNYXRoLmltdWwoZyxYKXwwO3ZhciB4dD0oYysobj1uK01hdGguaW11bChoLCQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChoLEopfDApK01hdGguaW11bChmLCQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZixKKXwwKSsoaT4+PjEzKXwwKSsoeHQ+Pj4yNil8MCx4dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoayxWKSxpPShpPU1hdGguaW11bChrLFUpKStNYXRoLmltdWwoQSxWKXwwLGE9TWF0aC5pbXVsKEEsVSksbj1uK01hdGguaW11bChiLEgpfDAsaT0oaT1pK01hdGguaW11bChiLEcpfDApK01hdGguaW11bChfLEgpfDAsYT1hK01hdGguaW11bChfLEcpfDAsbj1uK01hdGguaW11bChtLFcpfDAsaT0oaT1pK01hdGguaW11bChtLFgpfDApK01hdGguaW11bCh5LFcpfDAsYT1hK01hdGguaW11bCh5LFgpfDAsbj1uK01hdGguaW11bChkLCQpfDAsaT0oaT1pK01hdGguaW11bChkLEopfDApK01hdGguaW11bChnLCQpfDAsYT1hK01hdGguaW11bChnLEopfDA7dmFyIGJ0PShjKyhuPW4rTWF0aC5pbXVsKGgsUSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGgsdHQpfDApK01hdGguaW11bChmLFEpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZix0dCl8MCkrKGk+Pj4xMyl8MCkrKGJ0Pj4+MjYpfDAsYnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKE0sViksaT0oaT1NYXRoLmltdWwoTSxVKSkrTWF0aC5pbXVsKFMsVil8MCxhPU1hdGguaW11bChTLFUpLG49bitNYXRoLmltdWwoayxIKXwwLGk9KGk9aStNYXRoLmltdWwoayxHKXwwKStNYXRoLmltdWwoQSxIKXwwLGE9YStNYXRoLmltdWwoQSxHKXwwLG49bitNYXRoLmltdWwoYixXKXwwLGk9KGk9aStNYXRoLmltdWwoYixYKXwwKStNYXRoLmltdWwoXyxXKXwwLGE9YStNYXRoLmltdWwoXyxYKXwwLG49bitNYXRoLmltdWwobSwkKXwwLGk9KGk9aStNYXRoLmltdWwobSxKKXwwKStNYXRoLmltdWwoeSwkKXwwLGE9YStNYXRoLmltdWwoeSxKKXwwLG49bitNYXRoLmltdWwoZCxRKXwwLGk9KGk9aStNYXRoLmltdWwoZCx0dCl8MCkrTWF0aC5pbXVsKGcsUSl8MCxhPWErTWF0aC5pbXVsKGcsdHQpfDA7dmFyIF90PShjKyhuPW4rTWF0aC5pbXVsKGgscnQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChoLG50KXwwKStNYXRoLmltdWwoZixydCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChmLG50KXwwKSsoaT4+PjEzKXwwKSsoX3Q+Pj4yNil8MCxfdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQyxWKSxpPShpPU1hdGguaW11bChDLFUpKStNYXRoLmltdWwoTCxWKXwwLGE9TWF0aC5pbXVsKEwsVSksbj1uK01hdGguaW11bChNLEgpfDAsaT0oaT1pK01hdGguaW11bChNLEcpfDApK01hdGguaW11bChTLEgpfDAsYT1hK01hdGguaW11bChTLEcpfDAsbj1uK01hdGguaW11bChrLFcpfDAsaT0oaT1pK01hdGguaW11bChrLFgpfDApK01hdGguaW11bChBLFcpfDAsYT1hK01hdGguaW11bChBLFgpfDAsbj1uK01hdGguaW11bChiLCQpfDAsaT0oaT1pK01hdGguaW11bChiLEopfDApK01hdGguaW11bChfLCQpfDAsYT1hK01hdGguaW11bChfLEopfDAsbj1uK01hdGguaW11bChtLFEpfDAsaT0oaT1pK01hdGguaW11bChtLHR0KXwwKStNYXRoLmltdWwoeSxRKXwwLGE9YStNYXRoLmltdWwoeSx0dCl8MCxuPW4rTWF0aC5pbXVsKGQscnQpfDAsaT0oaT1pK01hdGguaW11bChkLG50KXwwKStNYXRoLmltdWwoZyxydCl8MCxhPWErTWF0aC5pbXVsKGcsbnQpfDA7dmFyIHd0PShjKyhuPW4rTWF0aC5pbXVsKGgsYXQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChoLG90KXwwKStNYXRoLmltdWwoZixhdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChmLG90KXwwKSsoaT4+PjEzKXwwKSsod3Q+Pj4yNil8MCx3dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoTyxWKSxpPShpPU1hdGguaW11bChPLFUpKStNYXRoLmltdWwoSSxWKXwwLGE9TWF0aC5pbXVsKEksVSksbj1uK01hdGguaW11bChDLEgpfDAsaT0oaT1pK01hdGguaW11bChDLEcpfDApK01hdGguaW11bChMLEgpfDAsYT1hK01hdGguaW11bChMLEcpfDAsbj1uK01hdGguaW11bChNLFcpfDAsaT0oaT1pK01hdGguaW11bChNLFgpfDApK01hdGguaW11bChTLFcpfDAsYT1hK01hdGguaW11bChTLFgpfDAsbj1uK01hdGguaW11bChrLCQpfDAsaT0oaT1pK01hdGguaW11bChrLEopfDApK01hdGguaW11bChBLCQpfDAsYT1hK01hdGguaW11bChBLEopfDAsbj1uK01hdGguaW11bChiLFEpfDAsaT0oaT1pK01hdGguaW11bChiLHR0KXwwKStNYXRoLmltdWwoXyxRKXwwLGE9YStNYXRoLmltdWwoXyx0dCl8MCxuPW4rTWF0aC5pbXVsKG0scnQpfDAsaT0oaT1pK01hdGguaW11bChtLG50KXwwKStNYXRoLmltdWwoeSxydCl8MCxhPWErTWF0aC5pbXVsKHksbnQpfDAsbj1uK01hdGguaW11bChkLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoZCxvdCl8MCkrTWF0aC5pbXVsKGcsYXQpfDAsYT1hK01hdGguaW11bChnLG90KXwwO3ZhciBrdD0oYysobj1uK01hdGguaW11bChoLGx0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxjdCl8MCkrTWF0aC5pbXVsKGYsbHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZixjdCl8MCkrKGk+Pj4xMyl8MCkrKGt0Pj4+MjYpfDAsa3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFAsViksaT0oaT1NYXRoLmltdWwoUCxVKSkrTWF0aC5pbXVsKFIsVil8MCxhPU1hdGguaW11bChSLFUpLG49bitNYXRoLmltdWwoTyxIKXwwLGk9KGk9aStNYXRoLmltdWwoTyxHKXwwKStNYXRoLmltdWwoSSxIKXwwLGE9YStNYXRoLmltdWwoSSxHKXwwLG49bitNYXRoLmltdWwoQyxXKXwwLGk9KGk9aStNYXRoLmltdWwoQyxYKXwwKStNYXRoLmltdWwoTCxXKXwwLGE9YStNYXRoLmltdWwoTCxYKXwwLG49bitNYXRoLmltdWwoTSwkKXwwLGk9KGk9aStNYXRoLmltdWwoTSxKKXwwKStNYXRoLmltdWwoUywkKXwwLGE9YStNYXRoLmltdWwoUyxKKXwwLG49bitNYXRoLmltdWwoayxRKXwwLGk9KGk9aStNYXRoLmltdWwoayx0dCl8MCkrTWF0aC5pbXVsKEEsUSl8MCxhPWErTWF0aC5pbXVsKEEsdHQpfDAsbj1uK01hdGguaW11bChiLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoYixudCl8MCkrTWF0aC5pbXVsKF8scnQpfDAsYT1hK01hdGguaW11bChfLG50KXwwLG49bitNYXRoLmltdWwobSxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKG0sb3QpfDApK01hdGguaW11bCh5LGF0KXwwLGE9YStNYXRoLmltdWwoeSxvdCl8MCxuPW4rTWF0aC5pbXVsKGQsbHQpfDAsaT0oaT1pK01hdGguaW11bChkLGN0KXwwKStNYXRoLmltdWwoZyxsdCl8MCxhPWErTWF0aC5pbXVsKGcsY3QpfDA7dmFyIEF0PShjKyhuPW4rTWF0aC5pbXVsKGgsaHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChoLGZ0KXwwKStNYXRoLmltdWwoZixodCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChmLGZ0KXwwKSsoaT4+PjEzKXwwKSsoQXQ+Pj4yNil8MCxBdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixWKSxpPShpPU1hdGguaW11bChCLFUpKStNYXRoLmltdWwoTixWKXwwLGE9TWF0aC5pbXVsKE4sVSksbj1uK01hdGguaW11bChQLEgpfDAsaT0oaT1pK01hdGguaW11bChQLEcpfDApK01hdGguaW11bChSLEgpfDAsYT1hK01hdGguaW11bChSLEcpfDAsbj1uK01hdGguaW11bChPLFcpfDAsaT0oaT1pK01hdGguaW11bChPLFgpfDApK01hdGguaW11bChJLFcpfDAsYT1hK01hdGguaW11bChJLFgpfDAsbj1uK01hdGguaW11bChDLCQpfDAsaT0oaT1pK01hdGguaW11bChDLEopfDApK01hdGguaW11bChMLCQpfDAsYT1hK01hdGguaW11bChMLEopfDAsbj1uK01hdGguaW11bChNLFEpfDAsaT0oaT1pK01hdGguaW11bChNLHR0KXwwKStNYXRoLmltdWwoUyxRKXwwLGE9YStNYXRoLmltdWwoUyx0dCl8MCxuPW4rTWF0aC5pbXVsKGsscnQpfDAsaT0oaT1pK01hdGguaW11bChrLG50KXwwKStNYXRoLmltdWwoQSxydCl8MCxhPWErTWF0aC5pbXVsKEEsbnQpfDAsbj1uK01hdGguaW11bChiLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoYixvdCl8MCkrTWF0aC5pbXVsKF8sYXQpfDAsYT1hK01hdGguaW11bChfLG90KXwwLG49bitNYXRoLmltdWwobSxsdCl8MCxpPShpPWkrTWF0aC5pbXVsKG0sY3QpfDApK01hdGguaW11bCh5LGx0KXwwLGE9YStNYXRoLmltdWwoeSxjdCl8MCxuPW4rTWF0aC5pbXVsKGQsaHQpfDAsaT0oaT1pK01hdGguaW11bChkLGZ0KXwwKStNYXRoLmltdWwoZyxodCl8MCxhPWErTWF0aC5pbXVsKGcsZnQpfDA7dmFyIFR0PShjKyhuPW4rTWF0aC5pbXVsKGgsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChoLGd0KXwwKStNYXRoLmltdWwoZixkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChmLGd0KXwwKSsoaT4+PjEzKXwwKSsoVHQ+Pj4yNil8MCxUdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixIKSxpPShpPU1hdGguaW11bChCLEcpKStNYXRoLmltdWwoTixIKXwwLGE9TWF0aC5pbXVsKE4sRyksbj1uK01hdGguaW11bChQLFcpfDAsaT0oaT1pK01hdGguaW11bChQLFgpfDApK01hdGguaW11bChSLFcpfDAsYT1hK01hdGguaW11bChSLFgpfDAsbj1uK01hdGguaW11bChPLCQpfDAsaT0oaT1pK01hdGguaW11bChPLEopfDApK01hdGguaW11bChJLCQpfDAsYT1hK01hdGguaW11bChJLEopfDAsbj1uK01hdGguaW11bChDLFEpfDAsaT0oaT1pK01hdGguaW11bChDLHR0KXwwKStNYXRoLmltdWwoTCxRKXwwLGE9YStNYXRoLmltdWwoTCx0dCl8MCxuPW4rTWF0aC5pbXVsKE0scnQpfDAsaT0oaT1pK01hdGguaW11bChNLG50KXwwKStNYXRoLmltdWwoUyxydCl8MCxhPWErTWF0aC5pbXVsKFMsbnQpfDAsbj1uK01hdGguaW11bChrLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoayxvdCl8MCkrTWF0aC5pbXVsKEEsYXQpfDAsYT1hK01hdGguaW11bChBLG90KXwwLG49bitNYXRoLmltdWwoYixsdCl8MCxpPShpPWkrTWF0aC5pbXVsKGIsY3QpfDApK01hdGguaW11bChfLGx0KXwwLGE9YStNYXRoLmltdWwoXyxjdCl8MCxuPW4rTWF0aC5pbXVsKG0saHQpfDAsaT0oaT1pK01hdGguaW11bChtLGZ0KXwwKStNYXRoLmltdWwoeSxodCl8MCxhPWErTWF0aC5pbXVsKHksZnQpfDA7dmFyIE10PShjKyhuPW4rTWF0aC5pbXVsKGQsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChkLGd0KXwwKStNYXRoLmltdWwoZyxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChnLGd0KXwwKSsoaT4+PjEzKXwwKSsoTXQ+Pj4yNil8MCxNdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixXKSxpPShpPU1hdGguaW11bChCLFgpKStNYXRoLmltdWwoTixXKXwwLGE9TWF0aC5pbXVsKE4sWCksbj1uK01hdGguaW11bChQLCQpfDAsaT0oaT1pK01hdGguaW11bChQLEopfDApK01hdGguaW11bChSLCQpfDAsYT1hK01hdGguaW11bChSLEopfDAsbj1uK01hdGguaW11bChPLFEpfDAsaT0oaT1pK01hdGguaW11bChPLHR0KXwwKStNYXRoLmltdWwoSSxRKXwwLGE9YStNYXRoLmltdWwoSSx0dCl8MCxuPW4rTWF0aC5pbXVsKEMscnQpfDAsaT0oaT1pK01hdGguaW11bChDLG50KXwwKStNYXRoLmltdWwoTCxydCl8MCxhPWErTWF0aC5pbXVsKEwsbnQpfDAsbj1uK01hdGguaW11bChNLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoTSxvdCl8MCkrTWF0aC5pbXVsKFMsYXQpfDAsYT1hK01hdGguaW11bChTLG90KXwwLG49bitNYXRoLmltdWwoayxsdCl8MCxpPShpPWkrTWF0aC5pbXVsKGssY3QpfDApK01hdGguaW11bChBLGx0KXwwLGE9YStNYXRoLmltdWwoQSxjdCl8MCxuPW4rTWF0aC5pbXVsKGIsaHQpfDAsaT0oaT1pK01hdGguaW11bChiLGZ0KXwwKStNYXRoLmltdWwoXyxodCl8MCxhPWErTWF0aC5pbXVsKF8sZnQpfDA7dmFyIFN0PShjKyhuPW4rTWF0aC5pbXVsKG0sZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChtLGd0KXwwKStNYXRoLmltdWwoeSxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bCh5LGd0KXwwKSsoaT4+PjEzKXwwKSsoU3Q+Pj4yNil8MCxTdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQiwkKSxpPShpPU1hdGguaW11bChCLEopKStNYXRoLmltdWwoTiwkKXwwLGE9TWF0aC5pbXVsKE4sSiksbj1uK01hdGguaW11bChQLFEpfDAsaT0oaT1pK01hdGguaW11bChQLHR0KXwwKStNYXRoLmltdWwoUixRKXwwLGE9YStNYXRoLmltdWwoUix0dCl8MCxuPW4rTWF0aC5pbXVsKE8scnQpfDAsaT0oaT1pK01hdGguaW11bChPLG50KXwwKStNYXRoLmltdWwoSSxydCl8MCxhPWErTWF0aC5pbXVsKEksbnQpfDAsbj1uK01hdGguaW11bChDLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoQyxvdCl8MCkrTWF0aC5pbXVsKEwsYXQpfDAsYT1hK01hdGguaW11bChMLG90KXwwLG49bitNYXRoLmltdWwoTSxsdCl8MCxpPShpPWkrTWF0aC5pbXVsKE0sY3QpfDApK01hdGguaW11bChTLGx0KXwwLGE9YStNYXRoLmltdWwoUyxjdCl8MCxuPW4rTWF0aC5pbXVsKGssaHQpfDAsaT0oaT1pK01hdGguaW11bChrLGZ0KXwwKStNYXRoLmltdWwoQSxodCl8MCxhPWErTWF0aC5pbXVsKEEsZnQpfDA7dmFyIEV0PShjKyhuPW4rTWF0aC5pbXVsKGIsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChiLGd0KXwwKStNYXRoLmltdWwoXyxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChfLGd0KXwwKSsoaT4+PjEzKXwwKSsoRXQ+Pj4yNil8MCxFdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixRKSxpPShpPU1hdGguaW11bChCLHR0KSkrTWF0aC5pbXVsKE4sUSl8MCxhPU1hdGguaW11bChOLHR0KSxuPW4rTWF0aC5pbXVsKFAscnQpfDAsaT0oaT1pK01hdGguaW11bChQLG50KXwwKStNYXRoLmltdWwoUixydCl8MCxhPWErTWF0aC5pbXVsKFIsbnQpfDAsbj1uK01hdGguaW11bChPLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoTyxvdCl8MCkrTWF0aC5pbXVsKEksYXQpfDAsYT1hK01hdGguaW11bChJLG90KXwwLG49bitNYXRoLmltdWwoQyxsdCl8MCxpPShpPWkrTWF0aC5pbXVsKEMsY3QpfDApK01hdGguaW11bChMLGx0KXwwLGE9YStNYXRoLmltdWwoTCxjdCl8MCxuPW4rTWF0aC5pbXVsKE0saHQpfDAsaT0oaT1pK01hdGguaW11bChNLGZ0KXwwKStNYXRoLmltdWwoUyxodCl8MCxhPWErTWF0aC5pbXVsKFMsZnQpfDA7dmFyIEN0PShjKyhuPW4rTWF0aC5pbXVsKGssZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChrLGd0KXwwKStNYXRoLmltdWwoQSxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChBLGd0KXwwKSsoaT4+PjEzKXwwKSsoQ3Q+Pj4yNil8MCxDdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixydCksaT0oaT1NYXRoLmltdWwoQixudCkpK01hdGguaW11bChOLHJ0KXwwLGE9TWF0aC5pbXVsKE4sbnQpLG49bitNYXRoLmltdWwoUCxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKFAsb3QpfDApK01hdGguaW11bChSLGF0KXwwLGE9YStNYXRoLmltdWwoUixvdCl8MCxuPW4rTWF0aC5pbXVsKE8sbHQpfDAsaT0oaT1pK01hdGguaW11bChPLGN0KXwwKStNYXRoLmltdWwoSSxsdCl8MCxhPWErTWF0aC5pbXVsKEksY3QpfDAsbj1uK01hdGguaW11bChDLGh0KXwwLGk9KGk9aStNYXRoLmltdWwoQyxmdCl8MCkrTWF0aC5pbXVsKEwsaHQpfDAsYT1hK01hdGguaW11bChMLGZ0KXwwO3ZhciBMdD0oYysobj1uK01hdGguaW11bChNLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoTSxndCl8MCkrTWF0aC5pbXVsKFMsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoUyxndCl8MCkrKGk+Pj4xMyl8MCkrKEx0Pj4+MjYpfDAsTHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsYXQpLGk9KGk9TWF0aC5pbXVsKEIsb3QpKStNYXRoLmltdWwoTixhdCl8MCxhPU1hdGguaW11bChOLG90KSxuPW4rTWF0aC5pbXVsKFAsbHQpfDAsaT0oaT1pK01hdGguaW11bChQLGN0KXwwKStNYXRoLmltdWwoUixsdCl8MCxhPWErTWF0aC5pbXVsKFIsY3QpfDAsbj1uK01hdGguaW11bChPLGh0KXwwLGk9KGk9aStNYXRoLmltdWwoTyxmdCl8MCkrTWF0aC5pbXVsKEksaHQpfDAsYT1hK01hdGguaW11bChJLGZ0KXwwO3ZhciB6dD0oYysobj1uK01hdGguaW11bChDLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoQyxndCl8MCkrTWF0aC5pbXVsKEwsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoTCxndCl8MCkrKGk+Pj4xMyl8MCkrKHp0Pj4+MjYpfDAsenQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsbHQpLGk9KGk9TWF0aC5pbXVsKEIsY3QpKStNYXRoLmltdWwoTixsdCl8MCxhPU1hdGguaW11bChOLGN0KSxuPW4rTWF0aC5pbXVsKFAsaHQpfDAsaT0oaT1pK01hdGguaW11bChQLGZ0KXwwKStNYXRoLmltdWwoUixodCl8MCxhPWErTWF0aC5pbXVsKFIsZnQpfDA7dmFyIE90PShjKyhuPW4rTWF0aC5pbXVsKE8sZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChPLGd0KXwwKStNYXRoLmltdWwoSSxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChJLGd0KXwwKSsoaT4+PjEzKXwwKSsoT3Q+Pj4yNil8MCxPdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixodCksaT0oaT1NYXRoLmltdWwoQixmdCkpK01hdGguaW11bChOLGh0KXwwLGE9TWF0aC5pbXVsKE4sZnQpO3ZhciBJdD0oYysobj1uK01hdGguaW11bChQLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoUCxndCl8MCkrTWF0aC5pbXVsKFIsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoUixndCl8MCkrKGk+Pj4xMyl8MCkrKEl0Pj4+MjYpfDAsSXQmPTY3MTA4ODYzO3ZhciBEdD0oYysobj1NYXRoLmltdWwoQixkdCkpfDApKygoODE5MSYoaT0oaT1NYXRoLmltdWwoQixndCkpK01hdGguaW11bChOLGR0KXwwKSk8PDEzKXwwO3JldHVybiBjPSgoYT1NYXRoLmltdWwoTixndCkpKyhpPj4+MTMpfDApKyhEdD4+PjI2KXwwLER0Jj02NzEwODg2MyxsWzBdPXZ0LGxbMV09bXQsbFsyXT15dCxsWzNdPXh0LGxbNF09YnQsbFs1XT1fdCxsWzZdPXd0LGxbN109a3QsbFs4XT1BdCxsWzldPVR0LGxbMTBdPU10LGxbMTFdPVN0LGxbMTJdPUV0LGxbMTNdPUN0LGxbMTRdPUx0LGxbMTVdPXp0LGxbMTZdPU90LGxbMTddPUl0LGxbMThdPUR0LDAhPT1jJiYobFsxOV09YyxyLmxlbmd0aCsrKSxyfTtmdW5jdGlvbiBkKHQsZSxyKXtyZXR1cm4obmV3IGcpLm11bHAodCxlLHIpfWZ1bmN0aW9uIGcodCxlKXt0aGlzLng9dCx0aGlzLnk9ZX1NYXRoLmltdWx8fChwPWYpLGEucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGgrdC5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09dC5sZW5ndGg/cCh0aGlzLHQsZSk6cjw2Mz9mKHRoaXMsdCxlKTpyPDEwMjQ/ZnVuY3Rpb24odCxlLHIpe3IubmVnYXRpdmU9ZS5uZWdhdGl2ZV50Lm5lZ2F0aXZlLHIubGVuZ3RoPXQubGVuZ3RoK2UubGVuZ3RoO2Zvcih2YXIgbj0wLGk9MCxhPTA7YTxyLmxlbmd0aC0xO2ErKyl7dmFyIG89aTtpPTA7Zm9yKHZhciBzPTY3MTA4ODYzJm4sbD1NYXRoLm1pbihhLGUubGVuZ3RoLTEpLGM9TWF0aC5tYXgoMCxhLXQubGVuZ3RoKzEpO2M8PWw7YysrKXt2YXIgdT1hLWMsaD0oMHx0LndvcmRzW3VdKSooMHxlLndvcmRzW2NdKSxmPTY3MTA4ODYzJmg7cz02NzEwODg2MyYoZj1mK3N8MCksaSs9KG89KG89bysoaC82NzEwODg2NHwwKXwwKSsoZj4+PjI2KXwwKT4+PjI2LG8mPTY3MTA4ODYzfXIud29yZHNbYV09cyxuPW8sbz1pfXJldHVybiAwIT09bj9yLndvcmRzW2FdPW46ci5sZW5ndGgtLSxyLnN0cmlwKCl9KHRoaXMsdCxlKTpkKHRoaXMsdCxlKX0sZy5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9YS5wcm90b3R5cGUuX2NvdW50Qml0cyh0KS0xLG49MDtuPHQ7bisrKWVbbl09dGhpcy5yZXZCaW4obixyLHQpO3JldHVybiBlfSxnLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24odCxlLHIpe2lmKDA9PT10fHx0PT09ci0xKXJldHVybiB0O2Zvcih2YXIgbj0wLGk9MDtpPGU7aSsrKW58PSgxJnQpPDxlLWktMSx0Pj49MTtyZXR1cm4gbn0sZy5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvPTA7bzxhO28rKyluW29dPWVbdFtvXV0saVtvXT1yW3Rbb11dfSxnLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMucGVybXV0ZShhLHQsZSxyLG4saSk7Zm9yKHZhciBvPTE7bzxpO288PD0xKWZvcih2YXIgcz1vPDwxLGw9TWF0aC5jb3MoMipNYXRoLlBJL3MpLGM9TWF0aC5zaW4oMipNYXRoLlBJL3MpLHU9MDt1PGk7dSs9cylmb3IodmFyIGg9bCxmPWMscD0wO3A8bztwKyspe3ZhciBkPXJbdStwXSxnPW5bdStwXSx2PXJbdStwK29dLG09blt1K3Arb10seT1oKnYtZiptO209aCptK2Yqdix2PXksclt1K3BdPWQrdixuW3UrcF09ZyttLHJbdStwK29dPWQtdixuW3UrcCtvXT1nLW0scCE9PXMmJih5PWwqaC1jKmYsZj1sKmYrYypoLGg9eSl9fSxnLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbih0LGUpe3ZhciByPTF8TWF0aC5tYXgoZSx0KSxuPTEmcixpPTA7Zm9yKHI9ci8yfDA7cjtyPj4+PTEpaSsrO3JldHVybiAxPDxpKzErbn0sZy5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZighKHI8PTEpKWZvcih2YXIgbj0wO248ci8yO24rKyl7dmFyIGk9dFtuXTt0W25dPXRbci1uLTFdLHRbci1uLTFdPWksaT1lW25dLGVbbl09LWVbci1uLTFdLGVbci1uLTFdPS1pfX0sZy5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wO248ZS8yO24rKyl7dmFyIGk9ODE5MipNYXRoLnJvdW5kKHRbMipuKzFdL2UpK01hdGgucm91bmQodFsyKm5dL2UpK3I7dFtuXT02NzEwODg2MyZpLHI9aTw2NzEwODg2ND8wOmkvNjcxMDg4NjR8MH1yZXR1cm4gdH0sZy5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbih0LGUscixpKXtmb3IodmFyIGE9MCxvPTA7bzxlO28rKylhKz0wfHRbb10sclsyKm9dPTgxOTEmYSxhPj4+PTEzLHJbMipvKzFdPTgxOTEmYSxhPj4+PTEzO2ZvcihvPTIqZTtvPGk7KytvKXJbb109MDtuKDA9PT1hKSxuKDA9PSgtODE5MiZhKSl9LGcucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPTA7cmV0dXJuIGV9LGcucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTIqdGhpcy5ndWVzc0xlbjEzYih0Lmxlbmd0aCxlLmxlbmd0aCksaT10aGlzLm1ha2VSQlQobiksYT10aGlzLnN0dWIobiksbz1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobiksbD1uZXcgQXJyYXkobiksYz1uZXcgQXJyYXkobiksdT1uZXcgQXJyYXkobiksaD1uZXcgQXJyYXkobiksZj1yLndvcmRzO2YubGVuZ3RoPW4sdGhpcy5jb252ZXJ0MTNiKHQud29yZHMsdC5sZW5ndGgsbyxuKSx0aGlzLmNvbnZlcnQxM2IoZS53b3JkcyxlLmxlbmd0aCxjLG4pLHRoaXMudHJhbnNmb3JtKG8sYSxzLGwsbixpKSx0aGlzLnRyYW5zZm9ybShjLGEsdSxoLG4saSk7Zm9yKHZhciBwPTA7cDxuO3ArKyl7dmFyIGQ9c1twXSp1W3BdLWxbcF0qaFtwXTtsW3BdPXNbcF0qaFtwXStsW3BdKnVbcF0sc1twXT1kfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShzLGwsbiksdGhpcy50cmFuc2Zvcm0ocyxsLGYsYSxuLGkpLHRoaXMuY29uanVnYXRlKGYsYSxuKSx0aGlzLm5vcm1hbGl6ZTEzYihmLG4pLHIubmVnYXRpdmU9dC5uZWdhdGl2ZV5lLm5lZ2F0aXZlLHIubGVuZ3RoPXQubGVuZ3RoK2UubGVuZ3RoLHIuc3RyaXAoKX0sYS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBhKG51bGwpO3JldHVybiBlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt0Lmxlbmd0aCksdGhpcy5tdWxUbyh0LGUpfSxhLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBhKG51bGwpO3JldHVybiBlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt0Lmxlbmd0aCksZCh0aGlzLHQsZSl9LGEucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyh0LHRoaXMpfSxhLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpO2Zvcih2YXIgZT0wLHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl7dmFyIGk9KDB8dGhpcy53b3Jkc1tyXSkqdCxhPSg2NzEwODg2MyZpKSsoNjcxMDg4NjMmZSk7ZT4+PTI2LGUrPWkvNjcxMDg4NjR8MCxlKz1hPj4+MjYsdGhpcy53b3Jkc1tyXT02NzEwODg2MyZhfXJldHVybiAwIT09ZSYmKHRoaXMud29yZHNbcl09ZSx0aGlzLmxlbmd0aCsrKSx0aGlzfSxhLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4odCl9LGEucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sYS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sYS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5iaXRMZW5ndGgoKSkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1yLzI2fDAsaT1yJTI2O2Vbcl09KHQud29yZHNbbl0mMTw8aSk+Pj5pfXJldHVybiBlfSh0KTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIG5ldyBhKDEpO2Zvcih2YXIgcj10aGlzLG49MDtuPGUubGVuZ3RoJiYwPT09ZVtuXTtuKysscj1yLnNxcigpKTtpZigrK248ZS5sZW5ndGgpZm9yKHZhciBpPXIuc3FyKCk7bjxlLmxlbmd0aDtuKyssaT1pLnNxcigpKTAhPT1lW25dJiYocj1yLm11bChpKSk7cmV0dXJuIHJ9LGEucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZSxyPXQlMjYsaT0odC1yKS8yNixhPTY3MTA4ODYzPj4+MjYtcjw8MjYtcjtpZigwIT09cil7dmFyIG89MDtmb3IoZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgcz10aGlzLndvcmRzW2VdJmEsbD0oMHx0aGlzLndvcmRzW2VdKS1zPDxyO3RoaXMud29yZHNbZV09bHxvLG89cz4+PjI2LXJ9byYmKHRoaXMud29yZHNbZV09byx0aGlzLmxlbmd0aCsrKX1pZigwIT09aSl7Zm9yKGU9dGhpcy5sZW5ndGgtMTtlPj0wO2UtLSl0aGlzLndvcmRzW2UraV09dGhpcy53b3Jkc1tlXTtmb3IoZT0wO2U8aTtlKyspdGhpcy53b3Jkc1tlXT0wO3RoaXMubGVuZ3RoKz1pfXJldHVybiB0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbih0KX0sYS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaTtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKSxpPWU/KGUtZSUyNikvMjY6MDt2YXIgYT10JTI2LG89TWF0aC5taW4oKHQtYSkvMjYsdGhpcy5sZW5ndGgpLHM9NjcxMDg4NjNeNjcxMDg4NjM+Pj5hPDxhLGw9cjtpZihpLT1vLGk9TWF0aC5tYXgoMCxpKSxsKXtmb3IodmFyIGM9MDtjPG87YysrKWwud29yZHNbY109dGhpcy53b3Jkc1tjXTtsLmxlbmd0aD1vfWlmKDA9PT1vKTtlbHNlIGlmKHRoaXMubGVuZ3RoPm8pZm9yKHRoaXMubGVuZ3RoLT1vLGM9MDtjPHRoaXMubGVuZ3RoO2MrKyl0aGlzLndvcmRzW2NdPXRoaXMud29yZHNbYytvXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciB1PTA7Zm9yKGM9dGhpcy5sZW5ndGgtMTtjPj0wJiYoMCE9PXV8fGM+PWkpO2MtLSl7dmFyIGg9MHx0aGlzLndvcmRzW2NdO3RoaXMud29yZHNbY109dTw8MjYtYXxoPj4+YSx1PWgmc31yZXR1cm4gbCYmMCE9PXUmJihsLndvcmRzW2wubGVuZ3RoKytdPXUpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4odCxlLHIpfSxhLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4odCl9LGEucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHQpfSxhLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4odCl9LGEucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHQpfSxhLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT10JTI2LHI9KHQtZSkvMjYsaT0xPDxlO3JldHVybiEodGhpcy5sZW5ndGg8PXIpJiYhISh0aGlzLndvcmRzW3JdJmkpfSxhLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2O2lmKG4oMD09PXRoaXMubmVnYXRpdmUsXCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnNcIiksdGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXM7aWYoMCE9PWUmJnIrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihyLHRoaXMubGVuZ3RoKSwwIT09ZSl7dmFyIGk9NjcxMDg4NjNeNjcxMDg4NjM+Pj5lPDxlO3RoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24odCl9LGEucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHQpe3JldHVybiBuKFwibnVtYmVyXCI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpLHQ8MD90aGlzLmlzdWJuKC10KTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHQ/KHRoaXMud29yZHNbMF09dC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbih0KX0sYS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHQpe3RoaXMud29yZHNbMF0rPXQ7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tlXT49NjcxMDg4NjQ7ZSsrKXRoaXMud29yZHNbZV0tPTY3MTA4ODY0LGU9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbZSsxXT0xOnRoaXMud29yZHNbZSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxlKzEpLHRoaXN9LGEucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHQpe2lmKG4oXCJudW1iZXJcIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCksdDwwKXJldHVybiB0aGlzLmlhZGRuKC10KTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4odCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09dCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZV08MDtlKyspdGhpcy53b3Jkc1tlXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tlKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbih0KX0sYS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHQpfSxhLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxhLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sYS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLG89dC5sZW5ndGgrcjt0aGlzLl9leHBhbmQobyk7dmFyIHM9MDtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKXthPSgwfHRoaXMud29yZHNbaStyXSkrczt2YXIgbD0oMHx0LndvcmRzW2ldKSplO3M9KChhLT02NzEwODg2MyZsKT4+MjYpLShsLzY3MTA4ODY0fDApLHRoaXMud29yZHNbaStyXT02NzEwODg2MyZhfWZvcig7aTx0aGlzLmxlbmd0aC1yO2krKylzPShhPSgwfHRoaXMud29yZHNbaStyXSkrcyk+PjI2LHRoaXMud29yZHNbaStyXT02NzEwODg2MyZhO2lmKDA9PT1zKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKG4oLTE9PT1zKSxzPTAsaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXM9KGE9LSgwfHRoaXMud29yZHNbaV0pK3MpPj4yNix0aGlzLndvcmRzW2ldPTY3MTA4ODYzJmE7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHRoaXMubGVuZ3RoLHQubGVuZ3RoKSxuPXRoaXMuY2xvbmUoKSxpPXQsbz0wfGkud29yZHNbaS5sZW5ndGgtMV07MCE9PShyPTI2LXRoaXMuX2NvdW50Qml0cyhvKSkmJihpPWkudXNobG4ociksbi5pdXNobG4ociksbz0wfGkud29yZHNbaS5sZW5ndGgtMV0pO3ZhciBzLGw9bi5sZW5ndGgtaS5sZW5ndGg7aWYoXCJtb2RcIiE9PWUpeyhzPW5ldyBhKG51bGwpKS5sZW5ndGg9bCsxLHMud29yZHM9bmV3IEFycmF5KHMubGVuZ3RoKTtmb3IodmFyIGM9MDtjPHMubGVuZ3RoO2MrKylzLndvcmRzW2NdPTB9dmFyIHU9bi5jbG9uZSgpLl9pc2hsbnN1Ym11bChpLDEsbCk7MD09PXUubmVnYXRpdmUmJihuPXUscyYmKHMud29yZHNbbF09MSkpO2Zvcih2YXIgaD1sLTE7aD49MDtoLS0pe3ZhciBmPTY3MTA4ODY0KigwfG4ud29yZHNbaS5sZW5ndGgraF0pKygwfG4ud29yZHNbaS5sZW5ndGgraC0xXSk7Zm9yKGY9TWF0aC5taW4oZi9vfDAsNjcxMDg4NjMpLG4uX2lzaGxuc3VibXVsKGksZixoKTswIT09bi5uZWdhdGl2ZTspZi0tLG4ubmVnYXRpdmU9MCxuLl9pc2hsbnN1Ym11bChpLDEsaCksbi5pc1plcm8oKXx8KG4ubmVnYXRpdmVePTEpO3MmJihzLndvcmRzW2hdPWYpfXJldHVybiBzJiZzLnN0cmlwKCksbi5zdHJpcCgpLFwiZGl2XCIhPT1lJiYwIT09ciYmbi5pdXNocm4ocikse2RpdjpzfHxudWxsLG1vZDpufX0sYS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbighdC5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBhKDApLG1vZDpuZXcgYSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlPyhzPXRoaXMubmVnKCkuZGl2bW9kKHQsZSksXCJtb2RcIiE9PWUmJihpPXMuZGl2Lm5lZygpKSxcImRpdlwiIT09ZSYmKG89cy5tb2QubmVnKCksciYmMCE9PW8ubmVnYXRpdmUmJm8uaWFkZCh0KSkse2RpdjppLG1vZDpvfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlPyhzPXRoaXMuZGl2bW9kKHQubmVnKCksZSksXCJtb2RcIiE9PWUmJihpPXMuZGl2Lm5lZygpKSx7ZGl2OmksbW9kOnMubW9kfSk6MCE9KHRoaXMubmVnYXRpdmUmdC5uZWdhdGl2ZSk/KHM9dGhpcy5uZWcoKS5kaXZtb2QodC5uZWcoKSxlKSxcImRpdlwiIT09ZSYmKG89cy5tb2QubmVnKCksciYmMCE9PW8ubmVnYXRpdmUmJm8uaXN1Yih0KSkse2RpdjpzLmRpdixtb2Q6b30pOnQubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcCh0KTwwP3tkaXY6bmV3IGEoMCksbW9kOnRoaXN9OjE9PT10Lmxlbmd0aD9cImRpdlwiPT09ZT97ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bnVsbH06XCJtb2RcIj09PWU/e2RpdjpudWxsLG1vZDpuZXcgYSh0aGlzLm1vZG4odC53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bmV3IGEodGhpcy5tb2RuKHQud29yZHNbMF0pKX06dGhpcy5fd29yZERpdih0LGUpO3ZhciBpLG8sc30sYS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LFwiZGl2XCIsITEpLmRpdn0sYS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LFwibW9kXCIsITEpLm1vZH0sYS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCxcIm1vZFwiLCEwKS5tb2R9LGEucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGl2bW9kKHQpO2lmKGUubW9kLmlzWmVybygpKXJldHVybiBlLmRpdjt2YXIgcj0wIT09ZS5kaXYubmVnYXRpdmU/ZS5tb2QuaXN1Yih0KTplLm1vZCxuPXQudXNocm4oMSksaT10LmFuZGxuKDEpLGE9ci5jbXAobik7cmV0dXJuIGE8MHx8MT09PWkmJjA9PT1hP2UuZGl2OjAhPT1lLmRpdi5uZWdhdGl2ZT9lLmRpdi5pc3VibigxKTplLmRpdi5pYWRkbigxKX0sYS5wcm90b3R5cGUubW9kbj1mdW5jdGlvbih0KXtuKHQ8PTY3MTA4ODYzKTtmb3IodmFyIGU9KDE8PDI2KSV0LHI9MCxpPXRoaXMubGVuZ3RoLTE7aT49MDtpLS0pcj0oZSpyKygwfHRoaXMud29yZHNbaV0pKSV0O3JldHVybiByfSxhLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbih0KXtuKHQ8PTY3MTA4ODYzKTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBpPSgwfHRoaXMud29yZHNbcl0pKzY3MTA4ODY0KmU7dGhpcy53b3Jkc1tyXT1pL3R8MCxlPWkldH1yZXR1cm4gdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4odCl9LGEucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSksbighdC5pc1plcm8oKSk7dmFyIGU9dGhpcyxyPXQuY2xvbmUoKTtlPTAhPT1lLm5lZ2F0aXZlP2UudW1vZCh0KTplLmNsb25lKCk7Zm9yKHZhciBpPW5ldyBhKDEpLG89bmV3IGEoMCkscz1uZXcgYSgwKSxsPW5ldyBhKDEpLGM9MDtlLmlzRXZlbigpJiZyLmlzRXZlbigpOyllLml1c2hybigxKSxyLml1c2hybigxKSwrK2M7Zm9yKHZhciB1PXIuY2xvbmUoKSxoPWUuY2xvbmUoKTshZS5pc1plcm8oKTspe2Zvcih2YXIgZj0wLHA9MTswPT0oZS53b3Jkc1swXSZwKSYmZjwyNjsrK2YscDw8PTEpO2lmKGY+MClmb3IoZS5pdXNocm4oZik7Zi0tID4wOykoaS5pc09kZCgpfHxvLmlzT2RkKCkpJiYoaS5pYWRkKHUpLG8uaXN1YihoKSksaS5pdXNocm4oMSksby5pdXNocm4oMSk7Zm9yKHZhciBkPTAsZz0xOzA9PShyLndvcmRzWzBdJmcpJiZkPDI2OysrZCxnPDw9MSk7aWYoZD4wKWZvcihyLml1c2hybihkKTtkLS0gPjA7KShzLmlzT2RkKCl8fGwuaXNPZGQoKSkmJihzLmlhZGQodSksbC5pc3ViKGgpKSxzLml1c2hybigxKSxsLml1c2hybigxKTtlLmNtcChyKT49MD8oZS5pc3ViKHIpLGkuaXN1YihzKSxvLmlzdWIobCkpOihyLmlzdWIoZSkscy5pc3ViKGkpLGwuaXN1YihvKSl9cmV0dXJue2E6cyxiOmwsZ2NkOnIuaXVzaGxuKGMpfX0sYS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUpLG4oIXQuaXNaZXJvKCkpO3ZhciBlPXRoaXMscj10LmNsb25lKCk7ZT0wIT09ZS5uZWdhdGl2ZT9lLnVtb2QodCk6ZS5jbG9uZSgpO2Zvcih2YXIgaSxvPW5ldyBhKDEpLHM9bmV3IGEoMCksbD1yLmNsb25lKCk7ZS5jbXBuKDEpPjAmJnIuY21wbigxKT4wOyl7Zm9yKHZhciBjPTAsdT0xOzA9PShlLndvcmRzWzBdJnUpJiZjPDI2OysrYyx1PDw9MSk7aWYoYz4wKWZvcihlLml1c2hybihjKTtjLS0gPjA7KW8uaXNPZGQoKSYmby5pYWRkKGwpLG8uaXVzaHJuKDEpO2Zvcih2YXIgaD0wLGY9MTswPT0oci53b3Jkc1swXSZmKSYmaDwyNjsrK2gsZjw8PTEpO2lmKGg+MClmb3Ioci5pdXNocm4oaCk7aC0tID4wOylzLmlzT2RkKCkmJnMuaWFkZChsKSxzLml1c2hybigxKTtlLmNtcChyKT49MD8oZS5pc3ViKHIpLG8uaXN1YihzKSk6KHIuaXN1YihlKSxzLmlzdWIobykpfXJldHVybihpPTA9PT1lLmNtcG4oMSk/bzpzKS5jbXBuKDApPDAmJmkuaWFkZCh0KSxpfSxhLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24odCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gdC5hYnMoKTtpZih0LmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBlPXRoaXMuY2xvbmUoKSxyPXQuY2xvbmUoKTtlLm5lZ2F0aXZlPTAsci5uZWdhdGl2ZT0wO2Zvcih2YXIgbj0wO2UuaXNFdmVuKCkmJnIuaXNFdmVuKCk7bisrKWUuaXVzaHJuKDEpLHIuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtlLmlzRXZlbigpOyllLml1c2hybigxKTtmb3IoO3IuaXNFdmVuKCk7KXIuaXVzaHJuKDEpO3ZhciBpPWUuY21wKHIpO2lmKGk8MCl7dmFyIGE9ZTtlPXIscj1hfWVsc2UgaWYoMD09PWl8fDA9PT1yLmNtcG4oMSkpYnJlYWs7ZS5pc3ViKHIpfXJldHVybiByLml1c2hsbihuKX0sYS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lZ2NkKHQpLmEudW1vZCh0KX0sYS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxhLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sYS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMud29yZHNbMF0mdH0sYS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2LGk9MTw8ZTtpZih0aGlzLmxlbmd0aDw9cilyZXR1cm4gdGhpcy5fZXhwYW5kKHIrMSksdGhpcy53b3Jkc1tyXXw9aSx0aGlzO2Zvcih2YXIgYT1pLG89cjswIT09YSYmbzx0aGlzLmxlbmd0aDtvKyspe3ZhciBzPTB8dGhpcy53b3Jkc1tvXTthPShzKz1hKT4+PjI2LHMmPTY3MTA4ODYzLHRoaXMud29yZHNbb109c31yZXR1cm4gMCE9PWEmJih0aGlzLndvcmRzW29dPWEsdGhpcy5sZW5ndGgrKyksdGhpc30sYS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LGEucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24odCl7dmFyIGUscj10PDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFyKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZyKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKWU9MTtlbHNle3ImJih0PS10KSxuKHQ8PTY3MTA4ODYzLFwiTnVtYmVyIGlzIHRvbyBiaWdcIik7dmFyIGk9MHx0aGlzLndvcmRzWzBdO2U9aT09PXQ/MDppPHQ/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtZTplfSxhLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24odCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgZT10aGlzLnVjbXAodCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWU6ZX0sYS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbih0KXtpZih0aGlzLmxlbmd0aD50Lmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDx0Lmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBuPTB8dGhpcy53b3Jkc1tyXSxpPTB8dC53b3Jkc1tyXTtpZihuIT09aSl7bjxpP2U9LTE6bj5pJiYoZT0xKTticmVha319cmV0dXJuIGV9LGEucHJvdG90eXBlLmd0bj1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXRoaXMuY21wbih0KX0sYS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10aGlzLmNtcCh0KX0sYS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPj0wfSxhLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPj0wfSxhLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24odCl7cmV0dXJuLTE9PT10aGlzLmNtcG4odCl9LGEucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHQpe3JldHVybi0xPT09dGhpcy5jbXAodCl9LGEucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KTw9MH0sYS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KTw9MH0sYS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5jbXBuKHQpfSxhLnByb3RvdHlwZS5lcT1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuY21wKHQpfSxhLnJlZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHcodCl9LGEucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuKCF0aGlzLnJlZCxcIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHRcIiksbigwPT09dGhpcy5uZWdhdGl2ZSxcInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzXCIpLHQuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZCh0KX0sYS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dFwiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sYS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlZD10LHRoaXN9LGEucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuKCF0aGlzLnJlZCxcIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHRcIiksdGhpcy5fZm9yY2VSZWQodCl9LGEucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuYWRkKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5pYWRkKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuc3ViKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5pc3ViKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuc2hsKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyx0KSx0aGlzLnJlZC5tdWwodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyx0KSx0aGlzLnJlZC5pbXVsKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LGEucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LGEucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LGEucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LGEucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LGEucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCYmIXQucmVkLFwicmVkUG93KG5vcm1hbE51bSlcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsdCl9O3ZhciB2PXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gbSh0LGUpe3RoaXMubmFtZT10LHRoaXMucD1uZXcgYShlLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgYSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24geSgpe20uY2FsbCh0aGlzLFwiazI1NlwiLFwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmZcIil9ZnVuY3Rpb24geCgpe20uY2FsbCh0aGlzLFwicDIyNFwiLFwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDFcIil9ZnVuY3Rpb24gYigpe20uY2FsbCh0aGlzLFwicDE5MlwiLFwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmZcIil9ZnVuY3Rpb24gXygpe20uY2FsbCh0aGlzLFwiMjU1MTlcIixcIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWRcIil9ZnVuY3Rpb24gdyh0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7dmFyIGU9YS5fcHJpbWUodCk7dGhpcy5tPWUucCx0aGlzLnByaW1lPWV9ZWxzZSBuKHQuZ3RuKDEpLFwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxXCIpLHRoaXMubT10LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBrKHQpe3cuY2FsbCh0aGlzLHQpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IGEoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9bS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciB0PW5ldyBhKG51bGwpO3JldHVybiB0LndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksdH0sbS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbih0KXt2YXIgZSxyPXQ7ZG97dGhpcy5zcGxpdChyLHRoaXMudG1wKSxlPShyPShyPXRoaXMuaW11bEsocikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShlPnRoaXMubik7dmFyIG49ZTx0aGlzLm4/LTE6ci51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1uPyhyLndvcmRzWzBdPTAsci5sZW5ndGg9MSk6bj4wP3IuaXN1Yih0aGlzLnApOnIuc3RyaXAoKSxyfSxtLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LGUpe3QuaXVzaHJuKHRoaXMubiwwLGUpfSxtLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXtyZXR1cm4gdC5pbXVsKHRoaXMuayl9LGkoeSxtKSx5LnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1NYXRoLm1pbih0Lmxlbmd0aCw5KSxuPTA7bjxyO24rKyllLndvcmRzW25dPXQud29yZHNbbl07aWYoZS5sZW5ndGg9cix0Lmxlbmd0aDw9OSlyZXR1cm4gdC53b3Jkc1swXT0wLHZvaWQodC5sZW5ndGg9MSk7dmFyIGk9dC53b3Jkc1s5XTtmb3IoZS53b3Jkc1tlLmxlbmd0aCsrXT00MTk0MzAzJmksbj0xMDtuPHQubGVuZ3RoO24rKyl7dmFyIGE9MHx0LndvcmRzW25dO3Qud29yZHNbbi0xMF09KDQxOTQzMDMmYSk8PDR8aT4+PjIyLGk9YX1pPj4+PTIyLHQud29yZHNbbi0xMF09aSwwPT09aSYmdC5sZW5ndGg+MTA/dC5sZW5ndGgtPTEwOnQubGVuZ3RoLT05fSx5LnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXt0LndvcmRzW3QubGVuZ3RoXT0wLHQud29yZHNbdC5sZW5ndGgrMV09MCx0Lmxlbmd0aCs9Mjtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPTB8dC53b3Jkc1tyXTtlKz05Nzcqbix0LndvcmRzW3JdPTY3MTA4ODYzJmUsZT02NCpuKyhlLzY3MTA4ODY0fDApfXJldHVybiAwPT09dC53b3Jkc1t0Lmxlbmd0aC0xXSYmKHQubGVuZ3RoLS0sMD09PXQud29yZHNbdC5sZW5ndGgtMV0mJnQubGVuZ3RoLS0pLHR9LGkoeCxtKSxpKGIsbSksaShfLG0pLF8ucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49MTkqKDB8dC53b3Jkc1tyXSkrZSxpPTY3MTA4ODYzJm47bj4+Pj0yNix0LndvcmRzW3JdPWksZT1ufXJldHVybiAwIT09ZSYmKHQud29yZHNbdC5sZW5ndGgrK109ZSksdH0sYS5fcHJpbWU9ZnVuY3Rpb24odCl7aWYodlt0XSlyZXR1cm4gdlt0XTt2YXIgZTtpZihcImsyNTZcIj09PXQpZT1uZXcgeTtlbHNlIGlmKFwicDIyNFwiPT09dCllPW5ldyB4O2Vsc2UgaWYoXCJwMTkyXCI9PT10KWU9bmV3IGI7ZWxzZXtpZihcInAyNTUxOVwiIT09dCl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHByaW1lIFwiK3QpO2U9bmV3IF99cmV0dXJuIHZbdF09ZSxlfSx3LnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlLFwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXNcIiksbih0LnJlZCxcInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIil9LHcucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHQsZSl7bigwPT0odC5uZWdhdGl2ZXxlLm5lZ2F0aXZlKSxcInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzXCIpLG4odC5yZWQmJnQucmVkPT09ZS5yZWQsXCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpfSx3LnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZSh0KS5fZm9yY2VSZWQodGhpcyk6dC51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNaZXJvKCk/dC5jbG9uZSgpOnRoaXMubS5zdWIodCkuX2ZvcmNlUmVkKHRoaXMpfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5hZGQoZSk7cmV0dXJuIHIuY21wKHRoaXMubSk+PTAmJnIuaXN1Yih0aGlzLm0pLHIuX2ZvcmNlUmVkKHRoaXMpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuaWFkZChlKTtyZXR1cm4gci5jbXAodGhpcy5tKT49MCYmci5pc3ViKHRoaXMubSkscn0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuc3ViKGUpO3JldHVybiByLmNtcG4oMCk8MCYmci5pYWRkKHRoaXMubSksci5fZm9yY2VSZWQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5pc3ViKGUpO3JldHVybiByLmNtcG4oMCk8MCYmci5pYWRkKHRoaXMubSkscn0sdy5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEodCksdGhpcy5pbW9kKHQudXNobG4oZSkpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIodCxlKSx0aGlzLmltb2QodC5pbXVsKGUpKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIodCxlKSx0aGlzLmltb2QodC5tdWwoZSkpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltdWwodCx0LmNsb25lKCkpfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubXVsKHQsdCl9LHcucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24odCl7aWYodC5pc1plcm8oKSlyZXR1cm4gdC5jbG9uZSgpO3ZhciBlPXRoaXMubS5hbmRsbigzKTtpZihuKGUlMj09MSksMz09PWUpe3ZhciByPXRoaXMubS5hZGQobmV3IGEoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3codCxyKX1mb3IodmFyIGk9dGhpcy5tLnN1Ym4oMSksbz0wOyFpLmlzWmVybygpJiYwPT09aS5hbmRsbigxKTspbysrLGkuaXVzaHJuKDEpO24oIWkuaXNaZXJvKCkpO3ZhciBzPW5ldyBhKDEpLnRvUmVkKHRoaXMpLGw9cy5yZWROZWcoKSxjPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSx1PXRoaXMubS5iaXRMZW5ndGgoKTtmb3IodT1uZXcgYSgyKnUqdSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHUsYykuY21wKGwpOyl1LnJlZElBZGQobCk7Zm9yKHZhciBoPXRoaXMucG93KHUsaSksZj10aGlzLnBvdyh0LGkuYWRkbigxKS5pdXNocm4oMSkpLHA9dGhpcy5wb3codCxpKSxkPW87MCE9PXAuY21wKHMpOyl7Zm9yKHZhciBnPXAsdj0wOzAhPT1nLmNtcChzKTt2KyspZz1nLnJlZFNxcigpO24odjxkKTt2YXIgbT10aGlzLnBvdyhoLG5ldyBhKDEpLml1c2hsbihkLXYtMSkpO2Y9Zi5yZWRNdWwobSksaD1tLnJlZFNxcigpLHA9cC5yZWRNdWwoaCksZD12fXJldHVybiBmfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1lLm5lZ2F0aXZlPyhlLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGUpLnJlZE5lZygpKTp0aGlzLmltb2QoZSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbih0LGUpe2lmKGUuaXNaZXJvKCkpcmV0dXJuIG5ldyBhKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1lLmNtcG4oMSkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgcj1uZXcgQXJyYXkoMTYpO3JbMF09bmV3IGEoMSkudG9SZWQodGhpcyksclsxXT10O2Zvcih2YXIgbj0yO248ci5sZW5ndGg7bisrKXJbbl09dGhpcy5tdWwocltuLTFdLHQpO3ZhciBpPXJbMF0sbz0wLHM9MCxsPWUuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1sJiYobD0yNiksbj1lLmxlbmd0aC0xO24+PTA7bi0tKXtmb3IodmFyIGM9ZS53b3Jkc1tuXSx1PWwtMTt1Pj0wO3UtLSl7dmFyIGg9Yz4+dSYxO2khPT1yWzBdJiYoaT10aGlzLnNxcihpKSksMCE9PWh8fDAhPT1vPyhvPDw9MSxvfD1oLCg0PT09KytzfHwwPT09biYmMD09PXUpJiYoaT10aGlzLm11bChpLHJbb10pLHM9MCxvPTApKTpzPTB9bD0yNn1yZXR1cm4gaX0sdy5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHQpe3ZhciBlPXQudW1vZCh0aGlzLm0pO3JldHVybiBlPT09dD9lLmNsb25lKCk6ZX0sdy5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24odCl7dmFyIGU9dC5jbG9uZSgpO3JldHVybiBlLnJlZD1udWxsLGV9LGEubW9udD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGsodCl9LGkoayx3KSxrLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW1vZCh0LnVzaGxuKHRoaXMuc2hpZnQpKX0say5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbW9kKHQubXVsKHRoaXMucmludikpO3JldHVybiBlLnJlZD1udWxsLGV9LGsucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCxlKXtpZih0LmlzWmVybygpfHxlLmlzWmVybygpKXJldHVybiB0LndvcmRzWzBdPTAsdC5sZW5ndGg9MSx0O3ZhciByPXQuaW11bChlKSxuPXIubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGk9ci5pc3ViKG4pLml1c2hybih0aGlzLnNoaWZ0KSxhPWk7cmV0dXJuIGkuY21wKHRoaXMubSk+PTA/YT1pLmlzdWIodGhpcy5tKTppLmNtcG4oMCk8MCYmKGE9aS5pYWRkKHRoaXMubSkpLGEuX2ZvcmNlUmVkKHRoaXMpfSxrLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCxlKXtpZih0LmlzWmVybygpfHxlLmlzWmVybygpKXJldHVybiBuZXcgYSgwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHI9dC5tdWwoZSksbj1yLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxpPXIuaXN1YihuKS5pdXNocm4odGhpcy5zaGlmdCksbz1pO3JldHVybiBpLmNtcCh0aGlzLm0pPj0wP289aS5pc3ViKHRoaXMubSk6aS5jbXBuKDApPDAmJihvPWkuaWFkZCh0aGlzLm0pKSxvLl9mb3JjZVJlZCh0aGlzKX0say5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbW9kKHQuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShcInVuZGVmaW5lZFwiPT10eXBlb2YgZXx8ZSx0aGlzKX0se2J1ZmZlcjo5NH1dLDg2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXQubGVuZ3RoLGE9MDtmb3IoZT0wO2U8aTsrK2UpYSs9dFtlXS5sZW5ndGg7dmFyIG89bmV3IEFycmF5KGEpLHM9MDtmb3IoZT0wO2U8aTsrK2Upe3ZhciBsPXRbZV0sYz1sLmxlbmd0aDtmb3Iocj0wO3I8YzsrK3Ipe3ZhciB1PW9bcysrXT1uZXcgQXJyYXkoYy0xKSxoPTA7Zm9yKG49MDtuPGM7KytuKW4hPT1yJiYodVtoKytdPWxbbl0pO2lmKDEmcil7dmFyIGY9dVsxXTt1WzFdPXVbMF0sdVswXT1mfX19cmV0dXJuIG99fSx7fV0sODc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDE6cmV0dXJuIG49W10sYyhpPXQsaSx1LCEwKSxuO2Nhc2UgMjpyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2ModCx0LGUsITApOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG49W10sYyh0LGUsdSwhMSksbn0odCxlKTtjYXNlIDM6cmV0dXJuIGModCxlLHIsITEpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiYm94LWludGVyc2VjdDogSW52YWxpZCBhcmd1bWVudHNcIil9dmFyIGl9O3ZhciBuLGk9dChcInR5cGVkYXJyYXktcG9vbFwiKSxhPXQoXCIuL2xpYi9zd2VlcFwiKSxvPXQoXCIuL2xpYi9pbnRlcnNlY3RcIik7ZnVuY3Rpb24gcyh0LGUpe2Zvcih2YXIgcj0wO3I8dDsrK3IpaWYoIShlW3JdPD1lW3IrdF0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGwodCxlLHIsbil7Zm9yKHZhciBpPTAsYT0wLG89MCxsPXQubGVuZ3RoO288bDsrK28pe3ZhciBjPXRbb107aWYoIXMoZSxjKSl7Zm9yKHZhciB1PTA7dTwyKmU7Kyt1KXJbaSsrXT1jW3VdO25bYSsrXT1vfX1yZXR1cm4gYX1mdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBzPXQubGVuZ3RoLGM9ZS5sZW5ndGg7aWYoIShzPD0wfHxjPD0wKSl7dmFyIHU9dFswXS5sZW5ndGg+Pj4xO2lmKCEodTw9MCkpe3ZhciBoLGY9aS5tYWxsb2NEb3VibGUoMip1KnMpLHA9aS5tYWxsb2NJbnQzMihzKTtpZigocz1sKHQsdSxmLHApKT4wKXtpZigxPT09dSYmbilhLmluaXQocyksaD1hLnN3ZWVwQ29tcGxldGUodSxyLDAscyxmLHAsMCxzLGYscCk7ZWxzZXt2YXIgZD1pLm1hbGxvY0RvdWJsZSgyKnUqYyksZz1pLm1hbGxvY0ludDMyKGMpOyhjPWwoZSx1LGQsZykpPjAmJihhLmluaXQocytjKSxoPTE9PT11P2Euc3dlZXBCaXBhcnRpdGUodSxyLDAscyxmLHAsMCxjLGQsZyk6byh1LHIsbixzLGYscCxjLGQsZyksaS5mcmVlKGQpLGkuZnJlZShnKSl9aS5mcmVlKGYpLGkuZnJlZShwKX1yZXR1cm4gaH19fWZ1bmN0aW9uIHUodCxlKXtuLnB1c2goW3QsZV0pfX0se1wiLi9saWIvaW50ZXJzZWN0XCI6ODksXCIuL2xpYi9zd2VlcFwiOjkzLFwidHlwZWRhcnJheS1wb29sXCI6NTMwfV0sODg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1cImRcIixpPVwiYXhcIixhPVwidnZcIixvPVwiZnBcIixzPVwiZXNcIixsPVwicnNcIixjPVwicmVcIix1PVwicmJcIixoPVwicmlcIixmPVwicnBcIixwPVwiYnNcIixkPVwiYmVcIixnPVwiYmJcIix2PVwiYmlcIixtPVwiYnBcIix5PVwicnZcIix4PVwiUVwiLGI9W24saSxhLGwsYyx1LGgscCxkLGcsdl07ZnVuY3Rpb24gXyh0KXt2YXIgZT1cImJydXRlRm9yY2VcIisodD9cIkZ1bGxcIjpcIlBhcnRpYWxcIikscj1bXSxfPWIuc2xpY2UoKTt0fHxfLnNwbGljZSgzLDAsbyk7dmFyIHc9W1wiZnVuY3Rpb24gXCIrZStcIihcIitfLmpvaW4oKStcIil7XCJdO2Z1bmN0aW9uIGsoZSxvKXt2YXIgXz1mdW5jdGlvbih0LGUscil7dmFyIG89XCJicnV0ZUZvcmNlXCIrKHQ/XCJSZWRcIjpcIkJsdWVcIikrKGU/XCJGbGlwXCI6XCJcIikrKHI/XCJGdWxsXCI6XCJcIiksXz1bXCJmdW5jdGlvbiBcIixvLFwiKFwiLGIuam9pbigpLFwiKXtcIixcInZhciBcIixzLFwiPTIqXCIsbixcIjtcIl0sdz1cImZvcih2YXIgaT1cIitsK1wiLFwiK2YrXCI9XCIrcytcIipcIitsK1wiO2k8XCIrYytcIjsrK2ksXCIrZitcIis9XCIrcytcIil7dmFyIHgwPVwiK3UrXCJbXCIraStcIitcIitmK1wiXSx4MT1cIit1K1wiW1wiK2krXCIrXCIrZitcIitcIituK1wiXSx4aT1cIitoK1wiW2ldO1wiLGs9XCJmb3IodmFyIGo9XCIrcCtcIixcIittK1wiPVwiK3MrXCIqXCIrcCtcIjtqPFwiK2QrXCI7KytqLFwiK20rXCIrPVwiK3MrXCIpe3ZhciB5MD1cIitnK1wiW1wiK2krXCIrXCIrbStcIl0sXCIrKHI/XCJ5MT1cIitnK1wiW1wiK2krXCIrXCIrbStcIitcIituK1wiXSxcIjpcIlwiKStcInlpPVwiK3YrXCJbal07XCI7cmV0dXJuIHQ/Xy5wdXNoKHcseCxcIjpcIixrKTpfLnB1c2goayx4LFwiOlwiLHcpLHI/Xy5wdXNoKFwiaWYoeTE8eDB8fHgxPHkwKWNvbnRpbnVlO1wiKTplP18ucHVzaChcImlmKHkwPD14MHx8eDE8eTApY29udGludWU7XCIpOl8ucHVzaChcImlmKHkwPHgwfHx4MTx5MCljb250aW51ZTtcIiksXy5wdXNoKFwiZm9yKHZhciBrPVwiK2krXCIrMTtrPFwiK24rXCI7KytrKXt2YXIgcjA9XCIrdStcIltrK1wiK2YrXCJdLHIxPVwiK3UrXCJbaytcIituK1wiK1wiK2YrXCJdLGIwPVwiK2crXCJbaytcIittK1wiXSxiMT1cIitnK1wiW2srXCIrbitcIitcIittK1wiXTtpZihyMTxiMHx8YjE8cjApY29udGludWUgXCIreCtcIjt9dmFyIFwiK3krXCI9XCIrYStcIihcIiksZT9fLnB1c2goXCJ5aSx4aVwiKTpfLnB1c2goXCJ4aSx5aVwiKSxfLnB1c2goXCIpO2lmKFwiK3krXCIhPT12b2lkIDApcmV0dXJuIFwiK3krXCI7fX19XCIpLHtuYW1lOm8sY29kZTpfLmpvaW4oXCJcIil9fShlLG8sdCk7ci5wdXNoKF8uY29kZSksdy5wdXNoKFwicmV0dXJuIFwiK18ubmFtZStcIihcIitiLmpvaW4oKStcIik7XCIpfXcucHVzaChcImlmKFwiK2MrXCItXCIrbCtcIj5cIitkK1wiLVwiK3ArXCIpe1wiKSx0PyhrKCEwLCExKSx3LnB1c2goXCJ9ZWxzZXtcIiksayghMSwhMSkpOih3LnB1c2goXCJpZihcIitvK1wiKXtcIiksayghMCwhMCksdy5wdXNoKFwifWVsc2V7XCIpLGsoITAsITEpLHcucHVzaChcIn19ZWxzZXtpZihcIitvK1wiKXtcIiksayghMSwhMCksdy5wdXNoKFwifWVsc2V7XCIpLGsoITEsITEpLHcucHVzaChcIn1cIikpLHcucHVzaChcIn19cmV0dXJuIFwiK2UpO3ZhciBBPXIuam9pbihcIlwiKSt3LmpvaW4oXCJcIik7cmV0dXJuIG5ldyBGdW5jdGlvbihBKSgpfXIucGFydGlhbD1fKCExKSxyLmZ1bGw9XyghMCl9LHt9XSw4OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLHUsUyxFLEMsTCl7IWZ1bmN0aW9uKHQsZSl7dmFyIHI9OCppLmxvZzIoZSsxKSoodCsxKXwwLGE9aS5uZXh0UG93MihiKnIpO3cubGVuZ3RoPGEmJihuLmZyZWUodyksdz1uLm1hbGxvY0ludDMyKGEpKTt2YXIgbz1pLm5leHRQb3cyKF8qcik7azxvJiYobi5mcmVlKGspLGs9bi5tYWxsb2NEb3VibGUobykpfSh0LGErRSk7dmFyIHosTz0wLEk9Mip0O0EoTysrLDAsMCxhLDAsRSxyPzE2OjAsLTEvMCwxLzApLHJ8fEEoTysrLDAsMCxFLDAsYSwxLC0xLzAsMS8wKTtmb3IoO08+MDspe3ZhciBEPShPLT0xKSpiLFA9d1tEXSxSPXdbRCsxXSxGPXdbRCsyXSxCPXdbRCszXSxOPXdbRCs0XSxqPXdbRCs1XSxWPU8qXyxVPWtbVl0scT1rW1YrMV0sSD0xJmosRz0hISgxNiZqKSxZPXUsVz1TLFg9QyxaPUw7aWYoSCYmKFk9QyxXPUwsWD11LFo9UyksISgyJmomJihGPXYodCxQLFIsRixZLFcscSksUj49Ril8fDQmaiYmKFI9bSh0LFAsUixGLFksVyxVKSk+PUYpKXt2YXIgJD1GLVIsSj1OLUI7aWYoRyl7aWYodCokKigkK0opPHApe2lmKHZvaWQgMCE9PSh6PWwuc2NhbkNvbXBsZXRlKHQsUCxlLFIsRixZLFcsQixOLFgsWikpKXJldHVybiB6O2NvbnRpbnVlfX1lbHNle2lmKHQqTWF0aC5taW4oJCxKKTxoKXtpZih2b2lkIDAhPT0oej1vKHQsUCxlLEgsUixGLFksVyxCLE4sWCxaKSkpcmV0dXJuIHo7Y29udGludWV9aWYodCokKko8Zil7aWYodm9pZCAwIT09KHo9bC5zY2FuQmlwYXJ0aXRlKHQsUCxlLEgsUixGLFksVyxCLE4sWCxaKSkpcmV0dXJuIHo7Y29udGludWV9fXZhciBLPWQodCxQLFIsRixZLFcsVSxxKTtpZihSPEspaWYodCooSy1SKTxoKXtpZih2b2lkIDAhPT0oej1zKHQsUCsxLGUsUixLLFksVyxCLE4sWCxaKSkpcmV0dXJuIHp9ZWxzZSBpZihQPT09dC0yKXtpZih2b2lkIDAhPT0oej1IP2wuc3dlZXBCaXBhcnRpdGUodCxlLEIsTixYLFosUixLLFksVyk6bC5zd2VlcEJpcGFydGl0ZSh0LGUsUixLLFksVyxCLE4sWCxaKSkpcmV0dXJuIHp9ZWxzZSBBKE8rKyxQKzEsUixLLEIsTixILC0xLzAsMS8wKSxBKE8rKyxQKzEsQixOLFIsSywxXkgsLTEvMCwxLzApO2lmKEs8Ril7dmFyIFE9Yyh0LFAsQixOLFgsWiksdHQ9WFtJKlErUF0sZXQ9Zyh0LFAsUSxOLFgsWix0dCk7aWYoZXQ8TiYmQShPKyssUCxLLEYsZXQsTiwoNHxIKSsoRz8xNjowKSx0dCxxKSxCPFEmJkEoTysrLFAsSyxGLEIsUSwoMnxIKSsoRz8xNjowKSxVLHR0KSxRKzE9PT1ldCl7aWYodm9pZCAwIT09KHo9Rz9NKHQsUCxlLEssRixZLFcsUSxYLFpbUV0pOlQodCxQLGUsSCxLLEYsWSxXLFEsWCxaW1FdKSkpcmV0dXJuIHp9ZWxzZSBpZihRPGV0KXt2YXIgcnQ7aWYoRyl7aWYocnQ9eSh0LFAsSyxGLFksVyx0dCksSzxydCl7dmFyIG50PWcodCxQLEsscnQsWSxXLHR0KTtpZihQPT09dC0yKXtpZihLPG50JiZ2b2lkIDAhPT0oej1sLnN3ZWVwQ29tcGxldGUodCxlLEssbnQsWSxXLFEsZXQsWCxaKSkpcmV0dXJuIHo7aWYobnQ8cnQmJnZvaWQgMCE9PSh6PWwuc3dlZXBCaXBhcnRpdGUodCxlLG50LHJ0LFksVyxRLGV0LFgsWikpKXJldHVybiB6fWVsc2UgSzxudCYmQShPKyssUCsxLEssbnQsUSxldCwxNiwtMS8wLDEvMCksbnQ8cnQmJihBKE8rKyxQKzEsbnQscnQsUSxldCwwLC0xLzAsMS8wKSxBKE8rKyxQKzEsUSxldCxudCxydCwxLC0xLzAsMS8wKSl9fWVsc2UgcnQ9SD94KHQsUCxLLEYsWSxXLHR0KTp5KHQsUCxLLEYsWSxXLHR0KSxLPHJ0JiYoUD09PXQtMj96PUg/bC5zd2VlcEJpcGFydGl0ZSh0LGUsUSxldCxYLFosSyxydCxZLFcpOmwuc3dlZXBCaXBhcnRpdGUodCxlLEsscnQsWSxXLFEsZXQsWCxaKTooQShPKyssUCsxLEsscnQsUSxldCxILC0xLzAsMS8wKSxBKE8rKyxQKzEsUSxldCxLLHJ0LDFeSCwtMS8wLDEvMCkpKX19fX19O3ZhciBuPXQoXCJ0eXBlZGFycmF5LXBvb2xcIiksaT10KFwiYml0LXR3aWRkbGVcIiksYT10KFwiLi9icnV0ZVwiKSxvPWEucGFydGlhbCxzPWEuZnVsbCxsPXQoXCIuL3N3ZWVwXCIpLGM9dChcIi4vbWVkaWFuXCIpLHU9dChcIi4vcGFydGl0aW9uXCIpLGg9MTI4LGY9MTw8MjIscD0xPDwyMixkPXUoXCIhKGxvPj1wMCkmJiEocDE+PWhpKVwiLFtcInAwXCIsXCJwMVwiXSksZz11KFwibG89PT1wMFwiLFtcInAwXCJdKSx2PXUoXCJsbzxwMFwiLFtcInAwXCJdKSxtPXUoXCJoaTw9cDBcIixbXCJwMFwiXSkseT11KFwibG88PXAwJiZwMDw9aGlcIixbXCJwMFwiXSkseD11KFwibG88cDAmJnAwPD1oaVwiLFtcInAwXCJdKSxiPTYsXz0yLHc9bi5tYWxsb2NJbnQzMigxMDI0KSxrPW4ubWFsbG9jRG91YmxlKDEwMjQpO2Z1bmN0aW9uIEEodCxlLHIsbixpLGEsbyxzLGwpe3ZhciBjPWIqdDt3W2NdPWUsd1tjKzFdPXIsd1tjKzJdPW4sd1tjKzNdPWksd1tjKzRdPWEsd1tjKzVdPW87dmFyIHU9Xyp0O2tbdV09cyxrW3UrMV09bH1mdW5jdGlvbiBUKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7dmFyIGg9Mip0LGY9bCpoLHA9Y1tmK2VdO3Q6Zm9yKHZhciBkPWksZz1pKmg7ZDxhOysrZCxnKz1oKXt2YXIgdj1vW2crZV0sbT1vW2crZSt0XTtpZighKHA8dnx8bTxwKSYmKCFufHxwIT09dikpe2Zvcih2YXIgeSx4PXNbZF0sYj1lKzE7Yjx0OysrYil7dj1vW2crYl0sbT1vW2crYit0XTt2YXIgXz1jW2YrYl0sdz1jW2YrYit0XTtpZihtPF98fHc8diljb250aW51ZSB0fWlmKHZvaWQgMCE9PSh5PW4/cih1LHgpOnIoeCx1KSkpcmV0dXJuIHl9fX1mdW5jdGlvbiBNKHQsZSxyLG4saSxhLG8scyxsLGMpe3ZhciB1PTIqdCxoPXMqdSxmPWxbaCtlXTt0OmZvcih2YXIgcD1uLGQ9bip1O3A8aTsrK3AsZCs9dSl7dmFyIGc9b1twXTtpZihnIT09Yyl7dmFyIHY9YVtkK2VdLG09YVtkK2UrdF07aWYoIShmPHZ8fG08Zikpe2Zvcih2YXIgeT1lKzE7eTx0OysreSl7dj1hW2QreV0sbT1hW2QreSt0XTt2YXIgeD1sW2greV0sYj1sW2greSt0XTtpZihtPHh8fGI8diljb250aW51ZSB0fXZhciBfPXIoZyxjKTtpZih2b2lkIDAhPT1fKXJldHVybiBffX19fX0se1wiLi9icnV0ZVwiOjg4LFwiLi9tZWRpYW5cIjo5MCxcIi4vcGFydGl0aW9uXCI6OTEsXCIuL3N3ZWVwXCI6OTMsXCJiaXQtdHdpZGRsZVwiOjgzLFwidHlwZWRhcnJheS1wb29sXCI6NTMwfV0sOTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzLGwpe2lmKG88PXIrMSlyZXR1cm4gcjt2YXIgYz1yLHU9byxoPW8rcj4+PjEsZj0yKnQscD1oLGQ9c1tmKmgrZV07Zm9yKDtjPHU7KXtpZih1LWM8aSl7YSh0LGUsYyx1LHMsbCksZD1zW2YqaCtlXTticmVha312YXIgZz11LWMsdj1NYXRoLnJhbmRvbSgpKmcrY3wwLG09c1tmKnYrZV0seT1NYXRoLnJhbmRvbSgpKmcrY3wwLHg9c1tmKnkrZV0sYj1NYXRoLnJhbmRvbSgpKmcrY3wwLF89c1tmKmIrZV07bTw9eD9fPj14PyhwPXksZD14KTptPj1fPyhwPXYsZD1tKToocD1iLGQ9Xyk6eD49Xz8ocD15LGQ9eCk6Xz49bT8ocD12LGQ9bSk6KHA9YixkPV8pO2Zvcih2YXIgdz1mKih1LTEpLGs9ZipwLEE9MDtBPGY7KytBLCsrdywrK2spe3ZhciBUPXNbd107c1t3XT1zW2tdLHNba109VH12YXIgTT1sW3UtMV07bFt1LTFdPWxbcF0sbFtwXT1NLHA9bih0LGUsYyx1LTEscyxsLGQpO2Zvcih2YXIgdz1mKih1LTEpLGs9ZipwLEE9MDtBPGY7KytBLCsrdywrK2spe3ZhciBUPXNbd107c1t3XT1zW2tdLHNba109VH12YXIgTT1sW3UtMV07aWYobFt1LTFdPWxbcF0sbFtwXT1NLGg8cCl7Zm9yKHU9cC0xO2M8dSYmc1tmKih1LTEpK2VdPT09ZDspdS09MTt1Kz0xfWVsc2V7aWYoIShwPGgpKWJyZWFrO2ZvcihjPXArMTtjPHUmJnNbZipjK2VdPT09ZDspYys9MX19cmV0dXJuIG4odCxlLHIsaCxzLGwsc1tmKmgrZV0pfTt2YXIgbj10KFwiLi9wYXJ0aXRpb25cIikoXCJsbzxwMFwiLFtcInAwXCJdKSxpPTg7ZnVuY3Rpb24gYSh0LGUscixuLGksYSl7Zm9yKHZhciBvPTIqdCxzPW8qKHIrMSkrZSxsPXIrMTtsPG47KytsLHMrPW8pZm9yKHZhciBjPWlbc10sdT1sLGg9byoobC0xKTt1PnImJmlbaCtlXT5jOy0tdSxoLT1vKXtmb3IodmFyIGY9aCxwPWgrbyxkPTA7ZDxvOysrZCwrK2YsKytwKXt2YXIgZz1pW2ZdO2lbZl09aVtwXSxpW3BdPWd9dmFyIHY9YVt1XTthW3VdPWFbdS0xXSxhW3UtMV09dn19fSx7XCIuL3BhcnRpdGlvblwiOjkxfV0sOTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1cImFiY2RlZlwiLnNwbGl0KFwiXCIpLmNvbmNhdChlKSxpPVtdO3QuaW5kZXhPZihcImxvXCIpPj0wJiZpLnB1c2goXCJsbz1lW2srbl1cIik7dC5pbmRleE9mKFwiaGlcIik+PTAmJmkucHVzaChcImhpPWVbaytvXVwiKTtyZXR1cm4gci5wdXNoKG4ucmVwbGFjZShcIl9cIixpLmpvaW4oKSkucmVwbGFjZShcIiRcIix0KSksRnVuY3Rpb24uYXBwbHkodm9pZCAwLHIpfTt2YXIgbj1cImZvcih2YXIgaj0yKmEsaz1qKmMsbD1rLG09YyxuPWIsbz1hK2IscD1jO2Q+cDsrK3Asays9ail7dmFyIF87aWYoJClpZihtPT09cCltKz0xLGwrPWo7ZWxzZXtmb3IodmFyIHM9MDtqPnM7KytzKXt2YXIgdD1lW2src107ZVtrK3NdPWVbbF0sZVtsKytdPXR9dmFyIHU9ZltwXTtmW3BdPWZbbV0sZlttKytdPXV9fXJldHVybiBtXCJ9LHt9XSw5MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2U8PTQqbj9pKDAsZS0xLHQpOmZ1bmN0aW9uIHQoZSxyLGgpe3ZhciBmPShyLWUrMSkvNnwwLHA9ZStmLGQ9ci1mLGc9ZStyPj4xLHY9Zy1mLG09ZytmLHk9cCx4PXYsYj1nLF89bSx3PWQsaz1lKzEsQT1yLTEsVD0wO2MoeSx4LGgpJiYoVD15LHk9eCx4PVQpO2MoXyx3LGgpJiYoVD1fLF89dyx3PVQpO2MoeSxiLGgpJiYoVD15LHk9YixiPVQpO2MoeCxiLGgpJiYoVD14LHg9YixiPVQpO2MoeSxfLGgpJiYoVD15LHk9XyxfPVQpO2MoYixfLGgpJiYoVD1iLGI9XyxfPVQpO2MoeCx3LGgpJiYoVD14LHg9dyx3PVQpO2MoeCxiLGgpJiYoVD14LHg9YixiPVQpO2MoXyx3LGgpJiYoVD1fLF89dyx3PVQpO3ZhciBNPWhbMip4XTt2YXIgUz1oWzIqeCsxXTt2YXIgRT1oWzIqX107dmFyIEM9aFsyKl8rMV07dmFyIEw9Mip5O3ZhciB6PTIqYjt2YXIgTz0yKnc7dmFyIEk9MipwO3ZhciBEPTIqZzt2YXIgUD0yKmQ7Zm9yKHZhciBSPTA7UjwyOysrUil7dmFyIEY9aFtMK1JdLEI9aFt6K1JdLE49aFtPK1JdO2hbSStSXT1GLGhbRCtSXT1CLGhbUCtSXT1OfW8odixlLGgpO28obSxyLGgpO2Zvcih2YXIgaj1rO2o8PUE7KytqKWlmKHUoaixNLFMsaCkpaiE9PWsmJmEoaixrLGgpLCsraztlbHNlIGlmKCF1KGosRSxDLGgpKWZvcig7Oyl7aWYodShBLEUsQyxoKSl7dShBLE0sUyxoKT8ocyhqLGssQSxoKSwrK2ssLS1BKTooYShqLEEsaCksLS1BKTticmVha31pZigtLUE8ailicmVha31sKGUsay0xLE0sUyxoKTtsKHIsQSsxLEUsQyxoKTtrLTItZTw9bj9pKGUsay0yLGgpOnQoZSxrLTIsaCk7ci0oQSsyKTw9bj9pKEErMixyLGgpOnQoQSsyLHIsaCk7QS1rPD1uP2koayxBLGgpOnQoayxBLGgpfSgwLGUtMSx0KX07dmFyIG49MzI7ZnVuY3Rpb24gaSh0LGUscil7Zm9yKHZhciBuPTIqKHQrMSksaT10KzE7aTw9ZTsrK2kpe2Zvcih2YXIgYT1yW24rK10sbz1yW24rK10scz1pLGw9bi0yO3MtLSA+dDspe3ZhciBjPXJbbC0yXSx1PXJbbC0xXTtpZihjPGEpYnJlYWs7aWYoYz09PWEmJnU8bylicmVhaztyW2xdPWMscltsKzFdPXUsbC09Mn1yW2xdPWEscltsKzFdPW99fWZ1bmN0aW9uIGEodCxlLHIpe2UqPTI7dmFyIG49clt0Kj0yXSxpPXJbdCsxXTtyW3RdPXJbZV0sclt0KzFdPXJbZSsxXSxyW2VdPW4scltlKzFdPWl9ZnVuY3Rpb24gbyh0LGUscil7ZSo9MixyW3QqPTJdPXJbZV0sclt0KzFdPXJbZSsxXX1mdW5jdGlvbiBzKHQsZSxyLG4pe2UqPTIscio9Mjt2YXIgaT1uW3QqPTJdLGE9blt0KzFdO25bdF09bltlXSxuW3QrMV09bltlKzFdLG5bZV09bltyXSxuW2UrMV09bltyKzFdLG5bcl09aSxuW3IrMV09YX1mdW5jdGlvbiBsKHQsZSxyLG4saSl7ZSo9MixpW3QqPTJdPWlbZV0saVtlXT1yLGlbdCsxXT1pW2UrMV0saVtlKzFdPW59ZnVuY3Rpb24gYyh0LGUscil7ZSo9Mjt2YXIgbj1yW3QqPTJdLGk9cltlXTtyZXR1cm4hKG48aSkmJihuIT09aXx8clt0KzFdPnJbZSsxXSl9ZnVuY3Rpb24gdSh0LGUscixuKXt2YXIgaT1uW3QqPTJdO3JldHVybiBpPGV8fGk9PT1lJiZuW3QrMV08cn19LHt9XSw5MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17aW5pdDpmdW5jdGlvbih0KXt2YXIgZT1pLm5leHRQb3cyKHQpO3MubGVuZ3RoPGUmJihuLmZyZWUocykscz1uLm1hbGxvY0ludDMyKGUpKTtsLmxlbmd0aDxlJiYobi5mcmVlKGwpLGw9bi5tYWxsb2NJbnQzMihlKSk7Yy5sZW5ndGg8ZSYmKG4uZnJlZShjKSxjPW4ubWFsbG9jSW50MzIoZSkpO3UubGVuZ3RoPGUmJihuLmZyZWUodSksdT1uLm1hbGxvY0ludDMyKGUpKTtoLmxlbmd0aDxlJiYobi5mcmVlKGgpLGg9bi5tYWxsb2NJbnQzMihlKSk7Zi5sZW5ndGg8ZSYmKG4uZnJlZShmKSxmPW4ubWFsbG9jSW50MzIoZSkpO3ZhciByPTgqZTtwLmxlbmd0aDxyJiYobi5mcmVlKHApLHA9bi5tYWxsb2NEb3VibGUocikpfSxzd2VlcEJpcGFydGl0ZTpmdW5jdGlvbih0LGUscixuLGksaCxmLHYsbSx5KXtmb3IodmFyIHg9MCxiPTIqdCxfPXQtMSx3PWItMSxrPXI7azxuOysrayl7dmFyIEE9aFtrXSxUPWIqaztwW3grK109aVtUK19dLHBbeCsrXT0tKEErMSkscFt4KytdPWlbVCt3XSxwW3grK109QX1mb3IodmFyIGs9ZjtrPHY7KytrKXt2YXIgQT15W2tdK28sTT1iKms7cFt4KytdPW1bTStfXSxwW3grK109LUEscFt4KytdPW1bTSt3XSxwW3grK109QX12YXIgUz14Pj4+MTthKHAsUyk7Zm9yKHZhciBFPTAsQz0wLGs9MDtrPFM7KytrKXt2YXIgTD0wfHBbMiprKzFdO2lmKEw+PW8pZChjLHUsQy0tLEw9TC1vfDApO2Vsc2UgaWYoTD49MClkKHMsbCxFLS0sTCk7ZWxzZSBpZihMPD0tbyl7TD0tTC1vfDA7Zm9yKHZhciB6PTA7ejxFOysreil7dmFyIE89ZShzW3pdLEwpO2lmKHZvaWQgMCE9PU8pcmV0dXJuIE99ZyhjLHUsQysrLEwpfWVsc2V7TD0tTC0xfDA7Zm9yKHZhciB6PTA7ejxDOysreil7dmFyIE89ZShMLGNbel0pO2lmKHZvaWQgMCE9PU8pcmV0dXJuIE99ZyhzLGwsRSsrLEwpfX19LHN3ZWVwQ29tcGxldGU6ZnVuY3Rpb24odCxlLHIsbixpLG8sdixtLHkseCl7Zm9yKHZhciBiPTAsXz0yKnQsdz10LTEsaz1fLTEsQT1yO0E8bjsrK0Epe3ZhciBUPW9bQV0rMTw8MSxNPV8qQTtwW2IrK109aVtNK3ddLHBbYisrXT0tVCxwW2IrK109aVtNK2tdLHBbYisrXT1UfWZvcih2YXIgQT12O0E8bTsrK0Epe3ZhciBUPXhbQV0rMTw8MSxTPV8qQTtwW2IrK109eVtTK3ddLHBbYisrXT0xfC1ULHBbYisrXT15W1Mra10scFtiKytdPTF8VH12YXIgRT1iPj4+MTthKHAsRSk7Zm9yKHZhciBDPTAsTD0wLHo9MCxBPTA7QTxFOysrQSl7dmFyIE89MHxwWzIqQSsxXSxJPTEmTztpZihBPEUtMSYmTz4+MT09cFsyKkErM10+PjEmJihJPTIsQSs9MSksTzwwKXtmb3IodmFyIEQ9LShPPj4xKS0xLFA9MDtQPHo7KytQKXt2YXIgUj1lKGhbUF0sRCk7aWYodm9pZCAwIT09UilyZXR1cm4gUn1pZigwIT09SSlmb3IodmFyIFA9MDtQPEM7KytQKXt2YXIgUj1lKHNbUF0sRCk7aWYodm9pZCAwIT09UilyZXR1cm4gUn1pZigxIT09SSlmb3IodmFyIFA9MDtQPEw7KytQKXt2YXIgUj1lKGNbUF0sRCk7aWYodm9pZCAwIT09UilyZXR1cm4gUn0wPT09ST9nKHMsbCxDKyssRCk6MT09PUk/ZyhjLHUsTCsrLEQpOjI9PT1JJiZnKGgsZix6KyssRCl9ZWxzZXt2YXIgRD0oTz4+MSktMTswPT09ST9kKHMsbCxDLS0sRCk6MT09PUk/ZChjLHUsTC0tLEQpOjI9PT1JJiZkKGgsZix6LS0sRCl9fX0sc2NhbkJpcGFydGl0ZTpmdW5jdGlvbih0LGUscixuLGksYyx1LGgsZix2LG0seSl7dmFyIHg9MCxiPTIqdCxfPWUsdz1lK3Qsaz0xLEE9MTtuP0E9bzprPW87Zm9yKHZhciBUPWk7VDxjOysrVCl7dmFyIE09VCtrLFM9YipUO3BbeCsrXT11W1MrX10scFt4KytdPS1NLHBbeCsrXT11W1Mrd10scFt4KytdPU19Zm9yKHZhciBUPWY7VDx2OysrVCl7dmFyIE09VCtBLEU9YipUO3BbeCsrXT1tW0UrX10scFt4KytdPS1NfXZhciBDPXg+Pj4xO2EocCxDKTtmb3IodmFyIEw9MCxUPTA7VDxDOysrVCl7dmFyIHo9MHxwWzIqVCsxXTtpZih6PDApe3ZhciBNPS16LE89ITE7aWYoTT49bz8oTz0hbixNLT1vKTooTz0hIW4sTS09MSksTylnKHMsbCxMKyssTSk7ZWxzZXt2YXIgST15W01dLEQ9YipNLFA9bVtEK2UrMV0sUj1tW0QrZSsxK3RdO3Q6Zm9yKHZhciBGPTA7RjxMOysrRil7dmFyIEI9c1tGXSxOPWIqQjtpZighKFI8dVtOK2UrMV18fHVbTitlKzErdF08UCkpe2Zvcih2YXIgaj1lKzI7ajx0OysrailpZihtW0Qrait0XTx1W04ral18fHVbTitqK3RdPG1bRCtqXSljb250aW51ZSB0O3ZhciBWLFU9aFtCXTtpZih2b2lkIDAhPT0oVj1uP3IoSSxVKTpyKFUsSSkpKXJldHVybiBWfX19fWVsc2UgZChzLGwsTC0tLHotayl9fSxzY2FuQ29tcGxldGU6ZnVuY3Rpb24odCxlLHIsbixpLGwsYyx1LGgsZixkKXtmb3IodmFyIGc9MCx2PTIqdCxtPWUseT1lK3QseD1uO3g8aTsrK3gpe3ZhciBiPXgrbyxfPXYqeDtwW2crK109bFtfK21dLHBbZysrXT0tYixwW2crK109bFtfK3ldLHBbZysrXT1ifWZvcih2YXIgeD11O3g8aDsrK3gpe3ZhciBiPXgrMSx3PXYqeDtwW2crK109Zlt3K21dLHBbZysrXT0tYn12YXIgaz1nPj4+MTthKHAsayk7Zm9yKHZhciBBPTAseD0wO3g8azsrK3gpe3ZhciBUPTB8cFsyKngrMV07aWYoVDwwKXt2YXIgYj0tVDtpZihiPj1vKXNbQSsrXT1iLW87ZWxzZXt2YXIgTT1kW2ItPTFdLFM9dipiLEU9ZltTK2UrMV0sQz1mW1MrZSsxK3RdO3Q6Zm9yKHZhciBMPTA7TDxBOysrTCl7dmFyIHo9c1tMXSxPPWNbel07aWYoTz09PU0pYnJlYWs7dmFyIEk9dip6O2lmKCEoQzxsW0krZSsxXXx8bFtJK2UrMSt0XTxFKSl7Zm9yKHZhciBEPWUrMjtEPHQ7KytEKWlmKGZbUytEK3RdPGxbSStEXXx8bFtJK0QrdF08ZltTK0RdKWNvbnRpbnVlIHQ7dmFyIFA9cihPLE0pO2lmKHZvaWQgMCE9PVApcmV0dXJuIFB9fX19ZWxzZXtmb3IodmFyIGI9VC1vLEw9QS0xO0w+PTA7LS1MKWlmKHNbTF09PT1iKXtmb3IodmFyIEQ9TCsxO0Q8QTsrK0Qpc1tELTFdPXNbRF07YnJlYWt9LS1BfX19fTt2YXIgbj10KFwidHlwZWRhcnJheS1wb29sXCIpLGk9dChcImJpdC10d2lkZGxlXCIpLGE9dChcIi4vc29ydFwiKSxvPTE8PDI4LHM9bi5tYWxsb2NJbnQzMigxMDI0KSxsPW4ubWFsbG9jSW50MzIoMTAyNCksYz1uLm1hbGxvY0ludDMyKDEwMjQpLHU9bi5tYWxsb2NJbnQzMigxMDI0KSxoPW4ubWFsbG9jSW50MzIoMTAyNCksZj1uLm1hbGxvY0ludDMyKDEwMjQpLHA9bi5tYWxsb2NEb3VibGUoODE5Mik7ZnVuY3Rpb24gZCh0LGUscixuKXt2YXIgaT1lW25dLGE9dFtyLTFdO3RbaV09YSxlW2FdPWl9ZnVuY3Rpb24gZyh0LGUscixuKXt0W3JdPW4sZVtuXT1yfX0se1wiLi9zb3J0XCI6OTIsXCJiaXQtdHdpZGRsZVwiOjgzLFwidHlwZWRhcnJheS1wb29sXCI6NTMwfV0sOTQ6W2Z1bmN0aW9uKHQsZSxyKXt9LHt9XSw5NTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKCl7fTtyZXR1cm4gZS5wcm90b3R5cGU9dCxuZXcgZX0saT1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikmJmUucHVzaChyKTtyZXR1cm4gcn0sYT1GdW5jdGlvbi5wcm90b3R5cGUuYmluZHx8ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0LGFyZ3VtZW50cyl9fTtmdW5jdGlvbiBvKCl7dGhpcy5fZXZlbnRzJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcyxcIl9ldmVudHNcIil8fCh0aGlzLl9ldmVudHM9bihudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKSx0aGlzLl9tYXhMaXN0ZW5lcnM9dGhpcy5fbWF4TGlzdGVuZXJzfHx2b2lkIDB9ZS5leHBvcnRzPW8sby5FdmVudEVtaXR0ZXI9byxvLnByb3RvdHlwZS5fZXZlbnRzPXZvaWQgMCxvLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQgMDt2YXIgcyxsPTEwO3RyeXt2YXIgYz17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLFwieFwiLHt2YWx1ZTowfSkscz0wPT09Yy54fWNhdGNoKHQpe3M9ITF9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdm9pZCAwPT09dC5fbWF4TGlzdGVuZXJzP28uZGVmYXVsdE1heExpc3RlbmVyczp0Ll9tYXhMaXN0ZW5lcnN9ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYSxvLHM7aWYoXCJmdW5jdGlvblwiIT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RlbmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7aWYoKG89dC5fZXZlbnRzKT8oby5uZXdMaXN0ZW5lciYmKHQuZW1pdChcIm5ld0xpc3RlbmVyXCIsZSxyLmxpc3RlbmVyP3IubGlzdGVuZXI6ciksbz10Ll9ldmVudHMpLHM9b1tlXSk6KG89dC5fZXZlbnRzPW4obnVsbCksdC5fZXZlbnRzQ291bnQ9MCkscyl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygcz9zPW9bZV09aT9bcixzXTpbcyxyXTppP3MudW5zaGlmdChyKTpzLnB1c2gociksIXMud2FybmVkJiYoYT11KHQpKSYmYT4wJiZzLmxlbmd0aD5hKXtzLndhcm5lZD0hMDt2YXIgbD1uZXcgRXJyb3IoXCJQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuIFwiK3MubGVuZ3RoKycgXCInK1N0cmluZyhlKSsnXCIgbGlzdGVuZXJzIGFkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdC4nKTtsLm5hbWU9XCJNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmdcIixsLmVtaXR0ZXI9dCxsLnR5cGU9ZSxsLmNvdW50PXMubGVuZ3RoLFwib2JqZWN0XCI9PXR5cGVvZiBjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybihcIiVzOiAlc1wiLGwubmFtZSxsLm1lc3NhZ2UpfX1lbHNlIHM9b1tlXT1yLCsrdC5fZXZlbnRzQ291bnQ7cmV0dXJuIHR9ZnVuY3Rpb24gZigpe2lmKCF0aGlzLmZpcmVkKXN3aXRjaCh0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsdGhpcy53cmFwRm4pLHRoaXMuZmlyZWQ9ITAsYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOnJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpO2Nhc2UgMTpyZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0LGFyZ3VtZW50c1swXSk7Y2FzZSAyOnJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQsYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSk7Y2FzZSAzOnJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQsYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0pO2RlZmF1bHQ6Zm9yKHZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxlPTA7ZTx0Lmxlbmd0aDsrK2UpdFtlXT1hcmd1bWVudHNbZV07dGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCx0KX19ZnVuY3Rpb24gcCh0LGUscil7dmFyIG49e2ZpcmVkOiExLHdyYXBGbjp2b2lkIDAsdGFyZ2V0OnQsdHlwZTplLGxpc3RlbmVyOnJ9LGk9YS5jYWxsKGYsbik7cmV0dXJuIGkubGlzdGVuZXI9cixuLndyYXBGbj1pLGl9ZnVuY3Rpb24gZCh0LGUscil7dmFyIG49dC5fZXZlbnRzO2lmKCFuKXJldHVybltdO3ZhciBpPW5bZV07cmV0dXJuIGk/XCJmdW5jdGlvblwiPT10eXBlb2YgaT9yP1tpLmxpc3RlbmVyfHxpXTpbaV06cj9mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjxlLmxlbmd0aDsrK3IpZVtyXT10W3JdLmxpc3RlbmVyfHx0W3JdO3JldHVybiBlfShpKTp2KGksaS5sZW5ndGgpOltdfWZ1bmN0aW9uIGcodCl7dmFyIGU9dGhpcy5fZXZlbnRzO2lmKGUpe3ZhciByPWVbdF07aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgcilyZXR1cm4gMTtpZihyKXJldHVybiByLmxlbmd0aH1yZXR1cm4gMH1mdW5jdGlvbiB2KHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPXRbbl07cmV0dXJuIHJ9cz9PYmplY3QuZGVmaW5lUHJvcGVydHkobyxcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbH0sc2V0OmZ1bmN0aW9uKHQpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0fHx0PDB8fHQhPXQpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJkZWZhdWx0TWF4TGlzdGVuZXJzXCIgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO2w9dH19KTpvLmRlZmF1bHRNYXhMaXN0ZW5lcnM9bCxvLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24odCl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHR8fHQ8MHx8aXNOYU4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJuXCIgYXJndW1lbnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9dCx0aGlzfSxvLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzKX0sby5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scz1cImVycm9yXCI9PT10O2lmKG89dGhpcy5fZXZlbnRzKXM9cyYmbnVsbD09by5lcnJvcjtlbHNlIGlmKCFzKXJldHVybiExO2lmKHMpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSYmKGU9YXJndW1lbnRzWzFdKSxlIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgZTt2YXIgbD1uZXcgRXJyb3IoJ1VuaGFuZGxlZCBcImVycm9yXCIgZXZlbnQuICgnK2UrXCIpXCIpO3Rocm93IGwuY29udGV4dD1lLGx9aWYoIShyPW9bdF0pKXJldHVybiExO3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHI7c3dpdGNoKG49YXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAxOiFmdW5jdGlvbih0LGUscil7aWYoZSl0LmNhbGwocik7ZWxzZSBmb3IodmFyIG49dC5sZW5ndGgsaT12KHQsbiksYT0wO2E8bjsrK2EpaVthXS5jYWxsKHIpfShyLGMsdGhpcyk7YnJlYWs7Y2FzZSAyOiFmdW5jdGlvbih0LGUscixuKXtpZihlKXQuY2FsbChyLG4pO2Vsc2UgZm9yKHZhciBpPXQubGVuZ3RoLGE9dih0LGkpLG89MDtvPGk7KytvKWFbb10uY2FsbChyLG4pfShyLGMsdGhpcyxhcmd1bWVudHNbMV0pO2JyZWFrO2Nhc2UgMzohZnVuY3Rpb24odCxlLHIsbixpKXtpZihlKXQuY2FsbChyLG4saSk7ZWxzZSBmb3IodmFyIGE9dC5sZW5ndGgsbz12KHQsYSkscz0wO3M8YTsrK3Mpb1tzXS5jYWxsKHIsbixpKX0ocixjLHRoaXMsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSk7YnJlYWs7Y2FzZSA0OiFmdW5jdGlvbih0LGUscixuLGksYSl7aWYoZSl0LmNhbGwocixuLGksYSk7ZWxzZSBmb3IodmFyIG89dC5sZW5ndGgscz12KHQsbyksbD0wO2w8bzsrK2wpc1tsXS5jYWxsKHIsbixpLGEpfShyLGMsdGhpcyxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXSk7YnJlYWs7ZGVmYXVsdDpmb3IoaT1uZXcgQXJyYXkobi0xKSxhPTE7YTxuO2ErKylpW2EtMV09YXJndW1lbnRzW2FdOyFmdW5jdGlvbih0LGUscixuKXtpZihlKXQuYXBwbHkocixuKTtlbHNlIGZvcih2YXIgaT10Lmxlbmd0aCxhPXYodCxpKSxvPTA7bzxpOysrbylhW29dLmFwcGx5KHIsbil9KHIsYyx0aGlzLGkpfXJldHVybiEwfSxvLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3JldHVybiBoKHRoaXMsdCxlLCExKX0sby5wcm90b3R5cGUub249by5wcm90b3R5cGUuYWRkTGlzdGVuZXIsby5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgodGhpcyx0LGUsITApfSxvLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKHQsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RlbmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIHRoaXMub24odCxwKHRoaXMsdCxlKSksdGhpc30sby5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO3JldHVybiB0aGlzLnByZXBlbmRMaXN0ZW5lcih0LHAodGhpcyx0LGUpKSx0aGlzfSxvLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3ZhciByLGksYSxvLHM7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RlbmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7aWYoIShpPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYoIShyPWlbdF0pKXJldHVybiB0aGlzO2lmKHI9PT1lfHxyLmxpc3RlbmVyPT09ZSkwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1uKG51bGwpOihkZWxldGUgaVt0XSxpLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoXCJyZW1vdmVMaXN0ZW5lclwiLHQsci5saXN0ZW5lcnx8ZSkpO2Vsc2UgaWYoXCJmdW5jdGlvblwiIT10eXBlb2Ygcil7Zm9yKGE9LTEsbz1yLmxlbmd0aC0xO28+PTA7by0tKWlmKHJbb109PT1lfHxyW29dLmxpc3RlbmVyPT09ZSl7cz1yW29dLmxpc3RlbmVyLGE9bzticmVha31pZihhPDApcmV0dXJuIHRoaXM7MD09PWE/ci5zaGlmdCgpOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUsbj1yKzEsaT10Lmxlbmd0aDtuPGk7cis9MSxuKz0xKXRbcl09dFtuXTt0LnBvcCgpfShyLGEpLDE9PT1yLmxlbmd0aCYmKGlbdF09clswXSksaS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KFwicmVtb3ZlTGlzdGVuZXJcIix0LHN8fGUpfXJldHVybiB0aGlzfSxvLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24odCl7dmFyIGUscixhO2lmKCEocj10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKCFyLnJlbW92ZUxpc3RlbmVyKXJldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD8odGhpcy5fZXZlbnRzPW4obnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCk6clt0XSYmKDA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPW4obnVsbCk6ZGVsZXRlIHJbdF0pLHRoaXM7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBvLHM9aShyKTtmb3IoYT0wO2E8cy5sZW5ndGg7KythKVwicmVtb3ZlTGlzdGVuZXJcIiE9PShvPXNbYV0pJiZ0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhvKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoXCJyZW1vdmVMaXN0ZW5lclwiKSx0aGlzLl9ldmVudHM9bihudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wLHRoaXN9aWYoXCJmdW5jdGlvblwiPT10eXBlb2YoZT1yW3RdKSl0aGlzLnJlbW92ZUxpc3RlbmVyKHQsZSk7ZWxzZSBpZihlKWZvcihhPWUubGVuZ3RoLTE7YT49MDthLS0pdGhpcy5yZW1vdmVMaXN0ZW5lcih0LGVbYV0pO3JldHVybiB0aGlzfSxvLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24odCl7cmV0dXJuIGQodGhpcyx0LCEwKX0sby5wcm90b3R5cGUucmF3TGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBkKHRoaXMsdCwhMSl9LG8ubGlzdGVuZXJDb3VudD1mdW5jdGlvbih0LGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQubGlzdGVuZXJDb3VudD90Lmxpc3RlbmVyQ291bnQoZSk6Zy5jYWxsKHQsZSl9LG8ucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9ZyxvLnByb3RvdHlwZS5ldmVudE5hbWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50PjA/UmVmbGVjdC5vd25LZXlzKHRoaXMuX2V2ZW50cyk6W119fSx7fV0sOTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiYmFzZTY0LWpzXCIpLGk9dChcImllZWU3NTRcIik7ci5CdWZmZXI9cyxyLlNsb3dCdWZmZXI9ZnVuY3Rpb24odCl7K3QhPXQmJih0PTApO3JldHVybiBzLmFsbG9jKCt0KX0sci5JTlNQRUNUX01BWF9CWVRFUz01MDt2YXIgYT0yMTQ3NDgzNjQ3O2Z1bmN0aW9uIG8odCl7aWYodD5hKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgXCInK3QrJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpO3ZhciBlPW5ldyBVaW50OEFycmF5KHQpO3JldHVybiBlLl9fcHJvdG9fXz1zLnByb3RvdHlwZSxlfWZ1bmN0aW9uIHModCxlLHIpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3JldHVybiB1KHQpfXJldHVybiBsKHQsZSxyKX1mdW5jdGlvbiBsKHQsZSxyKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdClyZXR1cm4gZnVuY3Rpb24odCxlKXtcInN0cmluZ1wiPT10eXBlb2YgZSYmXCJcIiE9PWV8fChlPVwidXRmOFwiKTtpZighcy5pc0VuY29kaW5nKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIitlKTt2YXIgcj0wfHAodCxlKSxuPW8ociksaT1uLndyaXRlKHQsZSk7aSE9PXImJihuPW4uc2xpY2UoMCxpKSk7cmV0dXJuIG59KHQsZSk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHQpKXJldHVybiBoKHQpO2lmKG51bGw9PXQpdGhyb3cgVHlwZUVycm9yKFwiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgXCIrdHlwZW9mIHQpO2lmKGoodCxBcnJheUJ1ZmZlcil8fHQmJmoodC5idWZmZXIsQXJyYXlCdWZmZXIpKXJldHVybiBmdW5jdGlvbih0LGUscil7aWYoZTwwfHx0LmJ5dGVMZW5ndGg8ZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJvZmZzZXRcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtpZih0LmJ5dGVMZW5ndGg8ZSsocnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wibGVuZ3RoXCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7dmFyIG47bj12b2lkIDA9PT1lJiZ2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQpOnZvaWQgMD09PXI/bmV3IFVpbnQ4QXJyYXkodCxlKTpuZXcgVWludDhBcnJheSh0LGUscik7cmV0dXJuIG4uX19wcm90b19fPXMucHJvdG90eXBlLG59KHQsZSxyKTtpZihcIm51bWJlclwiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3ZhciBuPXQudmFsdWVPZiYmdC52YWx1ZU9mKCk7aWYobnVsbCE9biYmbiE9PXQpcmV0dXJuIHMuZnJvbShuLGUscik7dmFyIGk9ZnVuY3Rpb24odCl7aWYocy5pc0J1ZmZlcih0KSl7dmFyIGU9MHxmKHQubGVuZ3RoKSxyPW8oZSk7cmV0dXJuIDA9PT1yLmxlbmd0aD9yOih0LmNvcHkociwwLDAsZSkscil9aWYodm9pZCAwIT09dC5sZW5ndGgpcmV0dXJuXCJudW1iZXJcIiE9dHlwZW9mIHQubGVuZ3RofHxWKHQubGVuZ3RoKT9vKDApOmgodCk7aWYoXCJCdWZmZXJcIj09PXQudHlwZSYmQXJyYXkuaXNBcnJheSh0LmRhdGEpKXJldHVybiBoKHQuZGF0YSl9KHQpO2lmKGkpcmV0dXJuIGk7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9U3ltYm9sLnRvUHJpbWl0aXZlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0W1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIHMuZnJvbSh0W1N5bWJvbC50b1ByaW1pdGl2ZV0oXCJzdHJpbmdcIiksZSxyKTt0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgXCIrdHlwZW9mIHQpfWZ1bmN0aW9uIGModCl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpO2lmKHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJyt0KydcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKX1mdW5jdGlvbiB1KHQpe3JldHVybiBjKHQpLG8odDwwPzA6MHxmKHQpKX1mdW5jdGlvbiBoKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDwwPzA6MHxmKHQubGVuZ3RoKSxyPW8oZSksbj0wO248ZTtuKz0xKXJbbl09MjU1JnRbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gZih0KXtpZih0Pj1hKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweFwiK2EudG9TdHJpbmcoMTYpK1wiIGJ5dGVzXCIpO3JldHVybiAwfHR9ZnVuY3Rpb24gcCh0LGUpe2lmKHMuaXNCdWZmZXIodCkpcmV0dXJuIHQubGVuZ3RoO2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KXx8aih0LEFycmF5QnVmZmVyKSlyZXR1cm4gdC5ieXRlTGVuZ3RoO2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInN0cmluZ1wiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHQpO3ZhciByPXQubGVuZ3RoLG49YXJndW1lbnRzLmxlbmd0aD4yJiYhMD09PWFyZ3VtZW50c1syXTtpZighbiYmMD09PXIpcmV0dXJuIDA7Zm9yKHZhciBpPSExOzspc3dpdGNoKGUpe2Nhc2VcImFzY2lpXCI6Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIHI7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIEYodCkubGVuZ3RoO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiAyKnI7Y2FzZVwiaGV4XCI6cmV0dXJuIHI+Pj4xO2Nhc2VcImJhc2U2NFwiOnJldHVybiBCKHQpLmxlbmd0aDtkZWZhdWx0OmlmKGkpcmV0dXJuIG4/LTE6Rih0KS5sZW5ndGg7ZT0oXCJcIitlKS50b0xvd2VyQ2FzZSgpLGk9ITB9fWZ1bmN0aW9uIGQodCxlLHIpe3ZhciBuPXRbZV07dFtlXT10W3JdLHRbcl09bn1mdW5jdGlvbiBnKHQsZSxyLG4saSl7aWYoMD09PXQubGVuZ3RoKXJldHVybi0xO2lmKFwic3RyaW5nXCI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxWKHI9K3IpJiYocj1pPzA6dC5sZW5ndGgtMSkscjwwJiYocj10Lmxlbmd0aCtyKSxyPj10Lmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtyPXQubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFpKXJldHVybi0xO3I9MH1pZihcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9cy5mcm9tKGUsbikpLHMuaXNCdWZmZXIoZSkpcmV0dXJuIDA9PT1lLmxlbmd0aD8tMTp2KHQsZSxyLG4saSk7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIGUmPTI1NSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2k/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHQsZSxyKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKHQsZSxyKTp2KHQsW2VdLHIsbixpKTt0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyXCIpfWZ1bmN0aW9uIHYodCxlLHIsbixpKXt2YXIgYSxvPTEscz10Lmxlbmd0aCxsPWUubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJihcInVjczJcIj09PShuPVN0cmluZyhuKS50b0xvd2VyQ2FzZSgpKXx8XCJ1Y3MtMlwiPT09bnx8XCJ1dGYxNmxlXCI9PT1ufHxcInV0Zi0xNmxlXCI9PT1uKSl7aWYodC5sZW5ndGg8Mnx8ZS5sZW5ndGg8MilyZXR1cm4tMTtvPTIscy89MixsLz0yLHIvPTJ9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiAxPT09bz90W2VdOnQucmVhZFVJbnQxNkJFKGUqbyl9aWYoaSl7dmFyIHU9LTE7Zm9yKGE9cjthPHM7YSsrKWlmKGModCxhKT09PWMoZSwtMT09PXU/MDphLXUpKXtpZigtMT09PXUmJih1PWEpLGEtdSsxPT09bClyZXR1cm4gdSpvfWVsc2UtMSE9PXUmJihhLT1hLXUpLHU9LTF9ZWxzZSBmb3IocitsPnMmJihyPXMtbCksYT1yO2E+PTA7YS0tKXtmb3IodmFyIGg9ITAsZj0wO2Y8bDtmKyspaWYoYyh0LGErZikhPT1jKGUsZikpe2g9ITE7YnJlYWt9aWYoaClyZXR1cm4gYX1yZXR1cm4tMX1mdW5jdGlvbiBtKHQsZSxyLG4pe3I9TnVtYmVyKHIpfHwwO3ZhciBpPXQubGVuZ3RoLXI7bj8obj1OdW1iZXIobikpPmkmJihuPWkpOm49aTt2YXIgYT1lLmxlbmd0aDtuPmEvMiYmKG49YS8yKTtmb3IodmFyIG89MDtvPG47KytvKXt2YXIgcz1wYXJzZUludChlLnN1YnN0cigyKm8sMiksMTYpO2lmKFYocykpcmV0dXJuIG87dFtyK29dPXN9cmV0dXJuIG99ZnVuY3Rpb24geSh0LGUscixuKXtyZXR1cm4gTihGKGUsdC5sZW5ndGgtciksdCxyLG4pfWZ1bmN0aW9uIHgodCxlLHIsbil7cmV0dXJuIE4oZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2goMjU1JnQuY2hhckNvZGVBdChyKSk7cmV0dXJuIGV9KGUpLHQscixuKX1mdW5jdGlvbiBiKHQsZSxyLG4pe3JldHVybiB4KHQsZSxyLG4pfWZ1bmN0aW9uIF8odCxlLHIsbil7cmV0dXJuIE4oQihlKSx0LHIsbil9ZnVuY3Rpb24gdyh0LGUscixuKXtyZXR1cm4gTihmdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLGksYT1bXSxvPTA7bzx0Lmxlbmd0aCYmISgoZS09Mik8MCk7KytvKXI9dC5jaGFyQ29kZUF0KG8pLG49cj4+OCxpPXIlMjU2LGEucHVzaChpKSxhLnB1c2gobik7cmV0dXJuIGF9KGUsdC5sZW5ndGgtciksdCxyLG4pfWZ1bmN0aW9uIGsodCxlLHIpe3JldHVybiAwPT09ZSYmcj09PXQubGVuZ3RoP24uZnJvbUJ5dGVBcnJheSh0KTpuLmZyb21CeXRlQXJyYXkodC5zbGljZShlLHIpKX1mdW5jdGlvbiBBKHQsZSxyKXtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgbj1bXSxpPWU7aTxyOyl7dmFyIGEsbyxzLGwsYz10W2ldLHU9bnVsbCxoPWM+MjM5PzQ6Yz4yMjM/MzpjPjE5MT8yOjE7aWYoaStoPD1yKXN3aXRjaChoKXtjYXNlIDE6YzwxMjgmJih1PWMpO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKGE9dFtpKzFdKSkmJihsPSgzMSZjKTw8Nnw2MyZhKT4xMjcmJih1PWwpO2JyZWFrO2Nhc2UgMzphPXRbaSsxXSxvPXRbaSsyXSwxMjg9PSgxOTImYSkmJjEyOD09KDE5MiZvKSYmKGw9KDE1JmMpPDwxMnwoNjMmYSk8PDZ8NjMmbyk+MjA0NyYmKGw8NTUyOTZ8fGw+NTczNDMpJiYodT1sKTticmVhaztjYXNlIDQ6YT10W2krMV0sbz10W2krMl0scz10W2krM10sMTI4PT0oMTkyJmEpJiYxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmKGw9KDE1JmMpPDwxOHwoNjMmYSk8PDEyfCg2MyZvKTw8Nnw2MyZzKT42NTUzNSYmbDwxMTE0MTEyJiYodT1sKX1udWxsPT09dT8odT02NTUzMyxoPTEpOnU+NjU1MzUmJih1LT02NTUzNixuLnB1c2godT4+PjEwJjEwMjN8NTUyOTYpLHU9NTYzMjB8MTAyMyZ1KSxuLnB1c2godSksaSs9aH1yZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoZTw9VClyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsdCk7dmFyIHI9XCJcIixuPTA7Zm9yKDtuPGU7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLHQuc2xpY2UobixuKz1UKSk7cmV0dXJuIHJ9KG4pfXIua01heExlbmd0aD1hLHMuVFlQRURfQVJSQVlfU1VQUE9SVD1mdW5jdGlvbigpe3RyeXt2YXIgdD1uZXcgVWludDhBcnJheSgxKTtyZXR1cm4gdC5fX3Byb3RvX189e19fcHJvdG9fXzpVaW50OEFycmF5LnByb3RvdHlwZSxmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fSw0Mj09PXQuZm9vKCl9Y2F0Y2godCl7cmV0dXJuITF9fSgpLHMuVFlQRURfQVJSQVlfU1VQUE9SVHx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIGNvbnNvbGV8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGNvbnNvbGUuZXJyb3J8fGNvbnNvbGUuZXJyb3IoXCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC5cIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMucHJvdG90eXBlLFwicGFyZW50XCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYocy5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMucHJvdG90eXBlLFwib2Zmc2V0XCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYocy5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5ieXRlT2Zmc2V0fX0pLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPVN5bWJvbC5zcGVjaWVzJiZzW1N5bWJvbC5zcGVjaWVzXT09PXMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLFN5bWJvbC5zcGVjaWVzLHt2YWx1ZTpudWxsLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExfSkscy5wb29sU2l6ZT04MTkyLHMuZnJvbT1mdW5jdGlvbih0LGUscil7cmV0dXJuIGwodCxlLHIpfSxzLnByb3RvdHlwZS5fX3Byb3RvX189VWludDhBcnJheS5wcm90b3R5cGUscy5fX3Byb3RvX189VWludDhBcnJheSxzLmFsbG9jPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3JldHVybiBjKHQpLHQ8PTA/byh0KTp2b2lkIDAhPT1lP1wic3RyaW5nXCI9PXR5cGVvZiByP28odCkuZmlsbChlLHIpOm8odCkuZmlsbChlKTpvKHQpfSh0LGUscil9LHMuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odCl7cmV0dXJuIHUodCl9LHMuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHQpe3JldHVybiB1KHQpfSxzLmlzQnVmZmVyPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10JiYhMD09PXQuX2lzQnVmZmVyJiZ0IT09cy5wcm90b3R5cGV9LHMuY29tcGFyZT1mdW5jdGlvbih0LGUpe2lmKGoodCxVaW50OEFycmF5KSYmKHQ9cy5mcm9tKHQsdC5vZmZzZXQsdC5ieXRlTGVuZ3RoKSksaihlLFVpbnQ4QXJyYXkpJiYoZT1zLmZyb20oZSxlLm9mZnNldCxlLmJ5dGVMZW5ndGgpKSwhcy5pc0J1ZmZlcih0KXx8IXMuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiYnVmMVwiLCBcImJ1ZjJcIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKHQ9PT1lKXJldHVybiAwO2Zvcih2YXIgcj10Lmxlbmd0aCxuPWUubGVuZ3RoLGk9MCxhPU1hdGgubWluKHIsbik7aTxhOysraSlpZih0W2ldIT09ZVtpXSl7cj10W2ldLG49ZVtpXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9LHMuaXNFbmNvZGluZz1mdW5jdGlvbih0KXtzd2l0Y2goU3RyaW5nKHQpLnRvTG93ZXJDYXNlKCkpe2Nhc2VcImhleFwiOmNhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOmNhc2VcImFzY2lpXCI6Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6Y2FzZVwiYmFzZTY0XCI6Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LHMuY29uY2F0PWZ1bmN0aW9uKHQsZSl7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PXQubGVuZ3RoKXJldHVybiBzLmFsbG9jKDApO3ZhciByO2lmKHZvaWQgMD09PWUpZm9yKGU9MCxyPTA7cjx0Lmxlbmd0aDsrK3IpZSs9dFtyXS5sZW5ndGg7dmFyIG49cy5hbGxvY1Vuc2FmZShlKSxpPTA7Zm9yKHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIGE9dFtyXTtpZihqKGEsVWludDhBcnJheSkmJihhPXMuZnJvbShhKSksIXMuaXNCdWZmZXIoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7YS5jb3B5KG4saSksaSs9YS5sZW5ndGh9cmV0dXJuIG59LHMuYnl0ZUxlbmd0aD1wLHMucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxzLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtpZih0JTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0c1wiKTtmb3IodmFyIGU9MDtlPHQ7ZSs9MilkKHRoaXMsZSxlKzEpO3JldHVybiB0aGlzfSxzLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtpZih0JTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0c1wiKTtmb3IodmFyIGU9MDtlPHQ7ZSs9NClkKHRoaXMsZSxlKzMpLGQodGhpcyxlKzEsZSsyKTtyZXR1cm4gdGhpc30scy5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHNcIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTgpZCh0aGlzLGUsZSs3KSxkKHRoaXMsZSsxLGUrNiksZCh0aGlzLGUrMixlKzUpLGQodGhpcyxlKzMsZSs0KTtyZXR1cm4gdGhpc30scy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtyZXR1cm4gMD09PXQ/XCJcIjowPT09YXJndW1lbnRzLmxlbmd0aD9BKHRoaXMsMCx0KTpmdW5jdGlvbih0LGUscil7dmFyIG49ITE7aWYoKHZvaWQgMD09PWV8fGU8MCkmJihlPTApLGU+dGhpcy5sZW5ndGgpcmV0dXJuXCJcIjtpZigodm9pZCAwPT09cnx8cj50aGlzLmxlbmd0aCkmJihyPXRoaXMubGVuZ3RoKSxyPD0wKXJldHVyblwiXCI7aWYoKHI+Pj49MCk8PShlPj4+PTApKXJldHVyblwiXCI7Zm9yKHR8fCh0PVwidXRmOFwiKTs7KXN3aXRjaCh0KXtjYXNlXCJoZXhcIjpyZXR1cm4gRSh0aGlzLGUscik7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIEEodGhpcyxlLHIpO2Nhc2VcImFzY2lpXCI6cmV0dXJuIE0odGhpcyxlLHIpO2Nhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOnJldHVybiBTKHRoaXMsZSxyKTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gayh0aGlzLGUscik7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuIEModGhpcyxlLHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrdCk7dD0odCtcIlwiKS50b0xvd2VyQ2FzZSgpLG49ITB9fS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHMucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nPXMucHJvdG90eXBlLnRvU3RyaW5nLHMucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtpZighcy5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlclwiKTtyZXR1cm4gdGhpcz09PXR8fDA9PT1zLmNvbXBhcmUodGhpcyx0KX0scy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciB0PVwiXCIsZT1yLklOU1BFQ1RfTUFYX0JZVEVTO3JldHVybiB0PXRoaXMudG9TdHJpbmcoXCJoZXhcIiwwLGUpLnJlcGxhY2UoLyguezJ9KS9nLFwiJDEgXCIpLnRyaW0oKSx0aGlzLmxlbmd0aD5lJiYodCs9XCIgLi4uIFwiKSxcIjxCdWZmZXIgXCIrdCtcIj5cIn0scy5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbih0LGUscixuLGkpe2lmKGoodCxVaW50OEFycmF5KSYmKHQ9cy5mcm9tKHQsdC5vZmZzZXQsdC5ieXRlTGVuZ3RoKSksIXMuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwidGFyZ2V0XCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiB0KTtpZih2b2lkIDA9PT1lJiYoZT0wKSx2b2lkIDA9PT1yJiYocj10P3QubGVuZ3RoOjApLHZvaWQgMD09PW4mJihuPTApLHZvaWQgMD09PWkmJihpPXRoaXMubGVuZ3RoKSxlPDB8fHI+dC5sZW5ndGh8fG48MHx8aT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIm91dCBvZiByYW5nZSBpbmRleFwiKTtpZihuPj1pJiZlPj1yKXJldHVybiAwO2lmKG4+PWkpcmV0dXJuLTE7aWYoZT49cilyZXR1cm4gMTtpZih0aGlzPT09dClyZXR1cm4gMDtmb3IodmFyIGE9KGk+Pj49MCktKG4+Pj49MCksbz0ocj4+Pj0wKS0oZT4+Pj0wKSxsPU1hdGgubWluKGEsbyksYz10aGlzLnNsaWNlKG4saSksdT10LnNsaWNlKGUsciksaD0wO2g8bDsrK2gpaWYoY1toXSE9PXVbaF0pe2E9Y1toXSxvPXVbaF07YnJlYWt9cmV0dXJuIGE8bz8tMTpvPGE/MTowfSxzLnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbih0LGUscil7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YodCxlLHIpfSxzLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZyh0aGlzLHQsZSxyLCEwKX0scy5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBnKHRoaXMsdCxlLHIsITEpfSxzLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0LGUscixuKXtpZih2b2lkIDA9PT1lKW49XCJ1dGY4XCIscj10aGlzLmxlbmd0aCxlPTA7ZWxzZSBpZih2b2lkIDA9PT1yJiZcInN0cmluZ1wiPT10eXBlb2YgZSluPWUscj10aGlzLmxlbmd0aCxlPTA7ZWxzZXtpZighaXNGaW5pdGUoZSkpdGhyb3cgbmV3IEVycm9yKFwiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWRcIik7ZT4+Pj0wLGlzRmluaXRlKHIpPyhyPj4+PTAsdm9pZCAwPT09biYmKG49XCJ1dGY4XCIpKToobj1yLHI9dm9pZCAwKX12YXIgaT10aGlzLmxlbmd0aC1lO2lmKCh2b2lkIDA9PT1yfHxyPmkpJiYocj1pKSx0Lmxlbmd0aD4wJiYocjwwfHxlPDApfHxlPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHNcIik7bnx8KG49XCJ1dGY4XCIpO2Zvcih2YXIgYT0hMTs7KXN3aXRjaChuKXtjYXNlXCJoZXhcIjpyZXR1cm4gbSh0aGlzLHQsZSxyKTtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4geSh0aGlzLHQsZSxyKTtjYXNlXCJhc2NpaVwiOnJldHVybiB4KHRoaXMsdCxlLHIpO2Nhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOnJldHVybiBiKHRoaXMsdCxlLHIpO2Nhc2VcImJhc2U2NFwiOnJldHVybiBfKHRoaXMsdCxlLHIpO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiB3KHRoaXMsdCxlLHIpO2RlZmF1bHQ6aWYoYSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrbik7bj0oXCJcIituKS50b0xvd2VyQ2FzZSgpLGE9ITB9fSxzLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpcIkJ1ZmZlclwiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIFQ9NDA5NjtmdW5jdGlvbiBNKHQsZSxyKXt2YXIgbj1cIlwiO3I9TWF0aC5taW4odC5sZW5ndGgscik7Zm9yKHZhciBpPWU7aTxyOysraSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZ0W2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBTKHQsZSxyKXt2YXIgbj1cIlwiO3I9TWF0aC5taW4odC5sZW5ndGgscik7Zm9yKHZhciBpPWU7aTxyOysraSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbaV0pO3JldHVybiBufWZ1bmN0aW9uIEUodCxlLHIpe3ZhciBuPXQubGVuZ3RoOyghZXx8ZTwwKSYmKGU9MCksKCFyfHxyPDB8fHI+bikmJihyPW4pO2Zvcih2YXIgaT1cIlwiLGE9ZTthPHI7KythKWkrPVIodFthXSk7cmV0dXJuIGl9ZnVuY3Rpb24gQyh0LGUscil7Zm9yKHZhciBuPXQuc2xpY2UoZSxyKSxpPVwiXCIsYT0wO2E8bi5sZW5ndGg7YSs9MilpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG5bYV0rMjU2Km5bYSsxXSk7cmV0dXJuIGl9ZnVuY3Rpb24gTCh0LGUscil7aWYodCUxIT0wfHx0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvZmZzZXQgaXMgbm90IHVpbnRcIik7aWYodCtlPnIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoXCIpfWZ1bmN0aW9uIHoodCxlLHIsbixpLGEpe2lmKCFzLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKGU+aXx8ZTxhKXRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKHIrbj50Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiBPKHQsZSxyLG4saSxhKXtpZihyK24+dC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW5kZXggb3V0IG9mIHJhbmdlXCIpfWZ1bmN0aW9uIEkodCxlLHIsbixhKXtyZXR1cm4gZT0rZSxyPj4+PTAsYXx8Tyh0LDAsciw0KSxpLndyaXRlKHQsZSxyLG4sMjMsNCkscis0fWZ1bmN0aW9uIEQodCxlLHIsbixhKXtyZXR1cm4gZT0rZSxyPj4+PTAsYXx8Tyh0LDAsciw4KSxpLndyaXRlKHQsZSxyLG4sNTIsOCkscis4fXMucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGg7KHQ9fn50KTwwPyh0Kz1yKTwwJiYodD0wKTp0PnImJih0PXIpLChlPXZvaWQgMD09PWU/cjp+fmUpPDA/KGUrPXIpPDAmJihlPTApOmU+ciYmKGU9ciksZTx0JiYoZT10KTt2YXIgbj10aGlzLnN1YmFycmF5KHQsZSk7cmV0dXJuIG4uX19wcm90b19fPXMucHJvdG90eXBlLG59LHMucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8TCh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3RdLGk9MSxhPTA7KythPGUmJihpKj0yNTYpOyluKz10aGlzW3QrYV0qaTtyZXR1cm4gbn0scy5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbih0LGUscil7dD4+Pj0wLGU+Pj49MCxyfHxMKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdCstLWVdLGk9MTtlPjAmJihpKj0yNTYpOyluKz10aGlzW3QrLS1lXSppO3JldHVybiBufSxzLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCwxLHRoaXMubGVuZ3RoKSx0aGlzW3RdfSxzLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCwyLHRoaXMubGVuZ3RoKSx0aGlzW3RdfHRoaXNbdCsxXTw8OH0scy5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxMKHQsMix0aGlzLmxlbmd0aCksdGhpc1t0XTw8OHx0aGlzW3QrMV19LHMucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8TCh0LDQsdGhpcy5sZW5ndGgpLCh0aGlzW3RdfHRoaXNbdCsxXTw8OHx0aGlzW3QrMl08PDE2KSsxNjc3NzIxNip0aGlzW3QrM119LHMucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8TCh0LDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbdF0rKHRoaXNbdCsxXTw8MTZ8dGhpc1t0KzJdPDw4fHRoaXNbdCszXSl9LHMucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbih0LGUscil7dD4+Pj0wLGU+Pj49MCxyfHxMKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdF0saT0xLGE9MDsrK2E8ZSYmKGkqPTI1Nik7KW4rPXRoaXNbdCthXSppO3JldHVybiBuPj0oaSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCplKSksbn0scy5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKHQsZSxyKXt0Pj4+PTAsZT4+Pj0wLHJ8fEwodCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49ZSxpPTEsYT10aGlzW3QrLS1uXTtuPjAmJihpKj0yNTYpOylhKz10aGlzW3QrLS1uXSppO3JldHVybiBhPj0oaSo9MTI4KSYmKGEtPU1hdGgucG93KDIsOCplKSksYX0scy5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1t0XT8tMSooMjU1LXRoaXNbdF0rMSk6dGhpc1t0XX0scy5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24odCxlKXt0Pj4+PTAsZXx8TCh0LDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbdF18dGhpc1t0KzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxzLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbih0LGUpe3Q+Pj49MCxlfHxMKHQsMix0aGlzLmxlbmd0aCk7dmFyIHI9dGhpc1t0KzFdfHRoaXNbdF08PDg7cmV0dXJuIDMyNzY4JnI/NDI5NDkwMTc2MHxyOnJ9LHMucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxMKHQsNCx0aGlzLmxlbmd0aCksdGhpc1t0XXx0aGlzW3QrMV08PDh8dGhpc1t0KzJdPDwxNnx0aGlzW3QrM108PDI0fSxzLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8TCh0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdF08PDI0fHRoaXNbdCsxXTw8MTZ8dGhpc1t0KzJdPDw4fHRoaXNbdCszXX0scy5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCw0LHRoaXMubGVuZ3RoKSxpLnJlYWQodGhpcyx0LCEwLDIzLDQpfSxzLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8TCh0LDQsdGhpcy5sZW5ndGgpLGkucmVhZCh0aGlzLHQsITEsMjMsNCl9LHMucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8TCh0LDgsdGhpcy5sZW5ndGgpLGkucmVhZCh0aGlzLHQsITAsNTIsOCl9LHMucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8TCh0LDgsdGhpcy5sZW5ndGgpLGkucmVhZCh0aGlzLHQsITEsNTIsOCl9LHMucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKHQsZSxyLG4peyh0PSt0LGU+Pj49MCxyPj4+PTAsbil8fHoodGhpcyx0LGUscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgaT0xLGE9MDtmb3IodGhpc1tlXT0yNTUmdDsrK2E8ciYmKGkqPTI1Nik7KXRoaXNbZSthXT10L2kmMjU1O3JldHVybiBlK3J9LHMucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKHQsZSxyLG4peyh0PSt0LGU+Pj49MCxyPj4+PTAsbil8fHoodGhpcyx0LGUscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgaT1yLTEsYT0xO2Zvcih0aGlzW2UraV09MjU1JnQ7LS1pPj0wJiYoYSo9MjU2KTspdGhpc1tlK2ldPXQvYSYyNTU7cmV0dXJuIGUrcn0scy5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fHoodGhpcyx0LGUsMSwyNTUsMCksdGhpc1tlXT0yNTUmdCxlKzF9LHMucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDIsNjU1MzUsMCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsZSsyfSxzLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8eih0aGlzLHQsZSwyLDY1NTM1LDApLHRoaXNbZV09dD4+PjgsdGhpc1tlKzFdPTI1NSZ0LGUrMn0scy5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fHoodGhpcyx0LGUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbZSszXT10Pj4+MjQsdGhpc1tlKzJdPXQ+Pj4xNix0aGlzW2UrMV09dD4+PjgsdGhpc1tlXT0yNTUmdCxlKzR9LHMucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW2VdPXQ+Pj4yNCx0aGlzW2UrMV09dD4+PjE2LHRoaXNbZSsyXT10Pj4+OCx0aGlzW2UrM109MjU1JnQsZSs0fSxzLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZT4+Pj0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTt6KHRoaXMsdCxlLHIsaS0xLC1pKX12YXIgYT0wLG89MSxzPTA7Zm9yKHRoaXNbZV09MjU1JnQ7KythPHImJihvKj0yNTYpOyl0PDAmJjA9PT1zJiYwIT09dGhpc1tlK2EtMV0mJihzPTEpLHRoaXNbZSthXT0odC9vPj4wKS1zJjI1NTtyZXR1cm4gZStyfSxzLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZT4+Pj0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTt6KHRoaXMsdCxlLHIsaS0xLC1pKX12YXIgYT1yLTEsbz0xLHM9MDtmb3IodGhpc1tlK2FdPTI1NSZ0Oy0tYT49MCYmKG8qPTI1Nik7KXQ8MCYmMD09PXMmJjAhPT10aGlzW2UrYSsxXSYmKHM9MSksdGhpc1tlK2FdPSh0L28+PjApLXMmMjU1O3JldHVybiBlK3J9LHMucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fHoodGhpcyx0LGUsMSwxMjcsLTEyOCksdDwwJiYodD0yNTUrdCsxKSx0aGlzW2VdPTI1NSZ0LGUrMX0scy5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8eih0aGlzLHQsZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsZSsyfSxzLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW2VdPXQ+Pj44LHRoaXNbZSsxXT0yNTUmdCxlKzJ9LHMucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fHoodGhpcyx0LGUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW2VdPTI1NSZ0LHRoaXNbZSsxXT10Pj4+OCx0aGlzW2UrMl09dD4+PjE2LHRoaXNbZSszXT10Pj4+MjQsZSs0fSxzLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdDwwJiYodD00Mjk0OTY3Mjk1K3QrMSksdGhpc1tlXT10Pj4+MjQsdGhpc1tlKzFdPXQ+Pj4xNix0aGlzW2UrMl09dD4+PjgsdGhpc1tlKzNdPTI1NSZ0LGUrNH0scy5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gSSh0aGlzLHQsZSwhMCxyKX0scy5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gSSh0aGlzLHQsZSwhMSxyKX0scy5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIEQodGhpcyx0LGUsITAscil9LHMucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBEKHRoaXMsdCxlLCExLHIpfSxzLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQsZSxyLG4pe2lmKCFzLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBzaG91bGQgYmUgYSBCdWZmZXJcIik7aWYocnx8KHI9MCksbnx8MD09PW58fChuPXRoaXMubGVuZ3RoKSxlPj10Lmxlbmd0aCYmKGU9dC5sZW5ndGgpLGV8fChlPTApLG4+MCYmbjxyJiYobj1yKSxuPT09cilyZXR1cm4gMDtpZigwPT09dC5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZihlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzXCIpO2lmKHI8MHx8cj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwic291cmNlRW5kIG91dCBvZiBib3VuZHNcIik7bj50aGlzLmxlbmd0aCYmKG49dGhpcy5sZW5ndGgpLHQubGVuZ3RoLWU8bi1yJiYobj10Lmxlbmd0aC1lK3IpO3ZhciBpPW4tcjtpZih0aGlzPT09dCYmXCJmdW5jdGlvblwiPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbil0aGlzLmNvcHlXaXRoaW4oZSxyLG4pO2Vsc2UgaWYodGhpcz09PXQmJnI8ZSYmZTxuKWZvcih2YXIgYT1pLTE7YT49MDstLWEpdFthK2VdPXRoaXNbYStyXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKHQsdGhpcy5zdWJhcnJheShyLG4pLGUpO3JldHVybiBpfSxzLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgZT8obj1lLGU9MCxyPXRoaXMubGVuZ3RoKTpcInN0cmluZ1wiPT10eXBlb2YgciYmKG49cixyPXRoaXMubGVuZ3RoKSx2b2lkIDAhPT1uJiZcInN0cmluZ1wiIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKFwiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZ1wiKTtpZihcInN0cmluZ1wiPT10eXBlb2YgbiYmIXMuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrbik7aWYoMT09PXQubGVuZ3RoKXt2YXIgaT10LmNoYXJDb2RlQXQoMCk7KFwidXRmOFwiPT09biYmaTwxMjh8fFwibGF0aW4xXCI9PT1uKSYmKHQ9aSl9fWVsc2VcIm51bWJlclwiPT10eXBlb2YgdCYmKHQmPTI1NSk7aWYoZTwwfHx0aGlzLmxlbmd0aDxlfHx0aGlzLmxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKFwiT3V0IG9mIHJhbmdlIGluZGV4XCIpO2lmKHI8PWUpcmV0dXJuIHRoaXM7dmFyIGE7aWYoZT4+Pj0wLHI9dm9pZCAwPT09cj90aGlzLmxlbmd0aDpyPj4+MCx0fHwodD0wKSxcIm51bWJlclwiPT10eXBlb2YgdClmb3IoYT1lO2E8cjsrK2EpdGhpc1thXT10O2Vsc2V7dmFyIG89cy5pc0J1ZmZlcih0KT90OnMuZnJvbSh0LG4pLGw9by5sZW5ndGg7aWYoMD09PWwpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlIFwiJyt0KydcIiBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCBcInZhbHVlXCInKTtmb3IoYT0wO2E8ci1lOysrYSl0aGlzW2ErZV09b1thJWxdfXJldHVybiB0aGlzfTt2YXIgUD0vW14rXFwvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gUih0KXtyZXR1cm4gdDwxNj9cIjBcIit0LnRvU3RyaW5nKDE2KTp0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBGKHQsZSl7dmFyIHI7ZT1lfHwxLzA7Zm9yKHZhciBuPXQubGVuZ3RoLGk9bnVsbCxhPVtdLG89MDtvPG47KytvKXtpZigocj10LmNoYXJDb2RlQXQobykpPjU1Mjk1JiZyPDU3MzQ0KXtpZighaSl7aWYocj41NjMxOSl7KGUtPTMpPi0xJiZhLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKG8rMT09PW4peyhlLT0zKT4tMSYmYS5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pPXI7Y29udGludWV9aWYocjw1NjMyMCl7KGUtPTMpPi0xJiZhLnB1c2goMjM5LDE5MSwxODkpLGk9cjtjb250aW51ZX1yPTY1NTM2KyhpLTU1Mjk2PDwxMHxyLTU2MzIwKX1lbHNlIGkmJihlLT0zKT4tMSYmYS5wdXNoKDIzOSwxOTEsMTg5KTtpZihpPW51bGwscjwxMjgpe2lmKChlLT0xKTwwKWJyZWFrO2EucHVzaChyKX1lbHNlIGlmKHI8MjA0OCl7aWYoKGUtPTIpPDApYnJlYWs7YS5wdXNoKHI+PjZ8MTkyLDYzJnJ8MTI4KX1lbHNlIGlmKHI8NjU1MzYpe2lmKChlLT0zKTwwKWJyZWFrO2EucHVzaChyPj4xMnwyMjQscj4+NiY2M3wxMjgsNjMmcnwxMjgpfWVsc2V7aWYoIShyPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY29kZSBwb2ludFwiKTtpZigoZS09NCk8MClicmVhazthLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBhfWZ1bmN0aW9uIEIodCl7cmV0dXJuIG4udG9CeXRlQXJyYXkoZnVuY3Rpb24odCl7aWYoKHQ9KHQ9dC5zcGxpdChcIj1cIilbMF0pLnRyaW0oKS5yZXBsYWNlKFAsXCJcIikpLmxlbmd0aDwyKXJldHVyblwiXCI7Zm9yKDt0Lmxlbmd0aCU0IT0wOyl0Kz1cIj1cIjtyZXR1cm4gdH0odCkpfWZ1bmN0aW9uIE4odCxlLHIsbil7Zm9yKHZhciBpPTA7aTxuJiYhKGkrcj49ZS5sZW5ndGh8fGk+PXQubGVuZ3RoKTsrK2kpZVtpK3JdPXRbaV07cmV0dXJuIGl9ZnVuY3Rpb24gaih0LGUpe3JldHVybiB0IGluc3RhbmNlb2YgZXx8bnVsbCE9dCYmbnVsbCE9dC5jb25zdHJ1Y3RvciYmbnVsbCE9dC5jb25zdHJ1Y3Rvci5uYW1lJiZ0LmNvbnN0cnVjdG9yLm5hbWU9PT1lLm5hbWV9ZnVuY3Rpb24gVih0KXtyZXR1cm4gdCE9dH19LHtcImJhc2U2NC1qc1wiOjY1LGllZWU3NTQ6NDA1fV0sOTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9saWIvbW9ub3RvbmVcIiksaT10KFwiLi9saWIvdHJpYW5ndWxhdGlvblwiKSxhPXQoXCIuL2xpYi9kZWxhdW5heVwiKSxvPXQoXCIuL2xpYi9maWx0ZXJcIik7ZnVuY3Rpb24gcyh0KXtyZXR1cm5bTWF0aC5taW4odFswXSx0WzFdKSxNYXRoLm1heCh0WzBdLHRbMV0pXX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIGModCxlLHIpe3JldHVybiBlIGluIHQ/dFtlXTpyfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7QXJyYXkuaXNBcnJheShlKT8ocj1yfHx7fSxlPWV8fFtdKToocj1lfHx7fSxlPVtdKTt2YXIgdT0hIWMocixcImRlbGF1bmF5XCIsITApLGg9ISFjKHIsXCJpbnRlcmlvclwiLCEwKSxmPSEhYyhyLFwiZXh0ZXJpb3JcIiwhMCkscD0hIWMocixcImluZmluaXR5XCIsITEpO2lmKCFoJiYhZnx8MD09PXQubGVuZ3RoKXJldHVybltdO3ZhciBkPW4odCxlKTtpZih1fHxoIT09Znx8cCl7Zm9yKHZhciBnPWkodC5sZW5ndGgsZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKHMpLnNvcnQobCl9KGUpKSx2PTA7djxkLmxlbmd0aDsrK3Ype3ZhciBtPWRbdl07Zy5hZGRUcmlhbmdsZShtWzBdLG1bMV0sbVsyXSl9cmV0dXJuIHUmJmEodCxnKSxmP2g/cD9vKGcsMCxwKTpnLmNlbGxzKCk6byhnLDEscCk6byhnLC0xKX1yZXR1cm4gZH19LHtcIi4vbGliL2RlbGF1bmF5XCI6OTgsXCIuL2xpYi9maWx0ZXJcIjo5OSxcIi4vbGliL21vbm90b25lXCI6MTAwLFwiLi9saWIvdHJpYW5ndWxhdGlvblwiOjEwMX1dLDk4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInJvYnVzdC1pbi1zcGhlcmVcIilbNF07dChcImJpbmFyeS1zZWFyY2gtYm91bmRzXCIpO2Z1bmN0aW9uIGkodCxlLHIsaSxhLG8pe3ZhciBzPWUub3Bwb3NpdGUoaSxhKTtpZighKHM8MCkpe2lmKGE8aSl7dmFyIGw9aTtpPWEsYT1sLGw9byxvPXMscz1sfWUuaXNDb25zdHJhaW50KGksYSl8fG4odFtpXSx0W2FdLHRbb10sdFtzXSk8MCYmci5wdXNoKGksYSl9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxhPXQubGVuZ3RoLG89ZS5zdGFycyxzPTA7czxhOysrcylmb3IodmFyIGw9b1tzXSxjPTE7YzxsLmxlbmd0aDtjKz0yKXt2YXIgdT1sW2NdO2lmKCEodTxzKSYmIWUuaXNDb25zdHJhaW50KHMsdSkpe2Zvcih2YXIgaD1sW2MtMV0sZj0tMSxwPTE7cDxsLmxlbmd0aDtwKz0yKWlmKGxbcC0xXT09PXUpe2Y9bFtwXTticmVha31mPDB8fG4odFtzXSx0W3VdLHRbaF0sdFtmXSk8MCYmci5wdXNoKHMsdSl9fWZvcig7ci5sZW5ndGg+MDspe2Zvcih2YXIgdT1yLnBvcCgpLHM9ci5wb3AoKSxoPS0xLGY9LTEsbD1vW3NdLGQ9MTtkPGwubGVuZ3RoO2QrPTIpe3ZhciBnPWxbZC0xXSx2PWxbZF07Zz09PXU/Zj12OnY9PT11JiYoaD1nKX1oPDB8fGY8MHx8KG4odFtzXSx0W3VdLHRbaF0sdFtmXSk+PTB8fChlLmZsaXAocyx1KSxpKHQsZSxyLGgscyxmKSxpKHQsZSxyLHMsZixoKSxpKHQsZSxyLGYsdSxoKSxpKHQsZSxyLHUsaCxmKSkpfX19LHtcImJpbmFyeS1zZWFyY2gtYm91bmRzXCI6MTAyLFwicm9idXN0LWluLXNwaGVyZVwiOjQ5M31dLDk5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saT10KFwiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIik7ZnVuY3Rpb24gYSh0LGUscixuLGksYSxvKXt0aGlzLmNlbGxzPXQsdGhpcy5uZWlnaGJvcj1lLHRoaXMuZmxhZ3M9bix0aGlzLmNvbnN0cmFpbnQ9cix0aGlzLmFjdGl2ZT1pLHRoaXMubmV4dD1hLHRoaXMuYm91bmRhcnk9b31mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfHx0WzJdLWVbMl19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNlbGxzKCksbj1yLmxlbmd0aCxpPTA7aTxuOysraSl7dmFyIHM9cltpXSxsPXNbMF0sYz1zWzFdLHU9c1syXTtjPHU/YzxsJiYoc1swXT1jLHNbMV09dSxzWzJdPWwpOnU8bCYmKHNbMF09dSxzWzFdPWwsc1syXT1jKX1yLnNvcnQobyk7Zm9yKHZhciBoPW5ldyBBcnJheShuKSxpPTA7aTxoLmxlbmd0aDsrK2kpaFtpXT0wO3ZhciBmPVtdLHA9W10sZD1uZXcgQXJyYXkoMypuKSxnPW5ldyBBcnJheSgzKm4pLHY9bnVsbDtlJiYodj1bXSk7Zm9yKHZhciBtPW5ldyBhKHIsZCxnLGgsZixwLHYpLGk9MDtpPG47KytpKWZvcih2YXIgcz1yW2ldLHk9MDt5PDM7Kyt5KXt2YXIgbD1zW3ldLGM9c1soeSsxKSUzXSx4PWRbMyppK3ldPW0ubG9jYXRlKGMsbCx0Lm9wcG9zaXRlKGMsbCkpLGI9Z1szKmkreV09dC5pc0NvbnN0cmFpbnQobCxjKTt4PDAmJihiP3AucHVzaChpKTooZi5wdXNoKGkpLGhbaV09MSksZSYmdi5wdXNoKFtjLGwsLTFdKSl9cmV0dXJuIG19KHQscik7aWYoMD09PWUpcmV0dXJuIHI/bi5jZWxscy5jb25jYXQobi5ib3VuZGFyeSk6bi5jZWxsczt2YXIgaT0xLHM9bi5hY3RpdmUsbD1uLm5leHQsYz1uLmZsYWdzLHU9bi5jZWxscyxoPW4uY29uc3RyYWludCxmPW4ubmVpZ2hib3I7Zm9yKDtzLmxlbmd0aD4wfHxsLmxlbmd0aD4wOyl7Zm9yKDtzLmxlbmd0aD4wOyl7dmFyIHA9cy5wb3AoKTtpZihjW3BdIT09LWkpe2NbcF09aTt1W3BdO2Zvcih2YXIgZD0wO2Q8MzsrK2Qpe3ZhciBnPWZbMypwK2RdO2c+PTAmJjA9PT1jW2ddJiYoaFszKnArZF0/bC5wdXNoKGcpOihzLnB1c2goZyksY1tnXT1pKSl9fX12YXIgdj1sO2w9cyxzPXYsbC5sZW5ndGg9MCxpPS1pfXZhciBtPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MCxpPTA7aTx0Lmxlbmd0aDsrK2kpZVtpXT09PXImJih0W24rK109dFtpXSk7cmV0dXJuIHQubGVuZ3RoPW4sdH0odSxjLGUpO2lmKHIpcmV0dXJuIG0uY29uY2F0KG4uYm91bmRhcnkpO3JldHVybiBtfSxhLnByb3RvdHlwZS5sb2NhdGU9KG49WzAsMCwwXSxmdW5jdGlvbih0LGUscil7dmFyIGE9dCxzPWUsbD1yO3JldHVybiBlPHI/ZTx0JiYoYT1lLHM9cixsPXQpOnI8dCYmKGE9cixzPXQsbD1lKSxhPDA/LTE6KG5bMF09YSxuWzFdPXMsblsyXT1sLGkuZXEodGhpcy5jZWxscyxuLG8pKX0pfSx7XCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiOjEwMn1dLDEwMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiKSxpPXQoXCJyb2J1c3Qtb3JpZW50YXRpb25cIilbM10sYT0wLG89MSxzPTI7ZnVuY3Rpb24gbCh0LGUscixuLGkpe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuaWR4PXIsdGhpcy5sb3dlcklkcz1uLHRoaXMudXBwZXJJZHM9aX1mdW5jdGlvbiBjKHQsZSxyLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMudHlwZT1yLHRoaXMuaWR4PW59ZnVuY3Rpb24gdSh0LGUpe3ZhciByPXQuYVswXS1lLmFbMF18fHQuYVsxXS1lLmFbMV18fHQudHlwZS1lLnR5cGU7cmV0dXJuIHJ8fCh0LnR5cGUhPT1hJiYocj1pKHQuYSx0LmIsZS5iKSk/cjp0LmlkeC1lLmlkeCl9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBpKHQuYSx0LmIsZSl9ZnVuY3Rpb24gZih0LGUscixhLG8pe2Zvcih2YXIgcz1uLmx0KGUsYSxoKSxsPW4uZ3QoZSxhLGgpLGM9cztjPGw7KytjKXtmb3IodmFyIHU9ZVtjXSxmPXUubG93ZXJJZHMscD1mLmxlbmd0aDtwPjEmJmkocltmW3AtMl1dLHJbZltwLTFdXSxhKT4wOyl0LnB1c2goW2ZbcC0xXSxmW3AtMl0sb10pLHAtPTE7Zi5sZW5ndGg9cCxmLnB1c2gobyk7dmFyIGQ9dS51cHBlcklkcztmb3IocD1kLmxlbmd0aDtwPjEmJmkocltkW3AtMl1dLHJbZFtwLTFdXSxhKTwwOyl0LnB1c2goW2RbcC0yXSxkW3AtMV0sb10pLHAtPTE7ZC5sZW5ndGg9cCxkLnB1c2gobyl9fWZ1bmN0aW9uIHAodCxlKXt2YXIgcjtyZXR1cm4ocj10LmFbMF08ZS5hWzBdP2kodC5hLHQuYixlLmEpOmkoZS5iLGUuYSx0LmEpKT9yOihyPWUuYlswXTx0LmJbMF0/aSh0LmEsdC5iLGUuYik6aShlLmIsZS5hLHQuYikpfHx0LmlkeC1lLmlkeH1mdW5jdGlvbiBkKHQsZSxyKXt2YXIgaT1uLmxlKHQscixwKSxhPXRbaV0sbz1hLnVwcGVySWRzLHM9b1tvLmxlbmd0aC0xXTthLnVwcGVySWRzPVtzXSx0LnNwbGljZShpKzEsMCxuZXcgbChyLmEsci5iLHIuaWR4LFtzXSxvKSl9ZnVuY3Rpb24gZyh0LGUscil7dmFyIGk9ci5hO3IuYT1yLmIsci5iPWk7dmFyIGE9bi5lcSh0LHIscCksbz10W2FdO3RbYS0xXS51cHBlcklkcz1vLnVwcGVySWRzLHQuc3BsaWNlKGEsMSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49ZS5sZW5ndGgsaT1bXSxoPTA7aDxyOysraClpLnB1c2gobmV3IGModFtoXSxudWxsLGEsaCkpO2Zvcih2YXIgaD0wO2g8bjsrK2gpe3ZhciBwPWVbaF0sdj10W3BbMF1dLG09dFtwWzFdXTt2WzBdPG1bMF0/aS5wdXNoKG5ldyBjKHYsbSxzLGgpLG5ldyBjKG0sdixvLGgpKTp2WzBdPm1bMF0mJmkucHVzaChuZXcgYyhtLHYscyxoKSxuZXcgYyh2LG0sbyxoKSl9aS5zb3J0KHUpO2Zvcih2YXIgeT1pWzBdLmFbMF0tKDErTWF0aC5hYnMoaVswXS5hWzBdKSkqTWF0aC5wb3coMiwtNTIpLHg9W25ldyBsKFt5LDFdLFt5LDBdLC0xLFtdLFtdLFtdLFtdKV0sYj1bXSxoPTAsXz1pLmxlbmd0aDtoPF87KytoKXt2YXIgdz1pW2hdLGs9dy50eXBlO2s9PT1hP2YoYix4LHQsdy5hLHcuaWR4KTprPT09cz9kKHgsdCx3KTpnKHgsdCx3KX1yZXR1cm4gYn19LHtcImJpbmFyeS1zZWFyY2gtYm91bmRzXCI6MTAyLFwicm9idXN0LW9yaWVudGF0aW9uXCI6NDk1fV0sMTAxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImJpbmFyeS1zZWFyY2gtYm91bmRzXCIpO2Z1bmN0aW9uIGkodCxlKXt0aGlzLnN0YXJzPXQsdGhpcy5lZGdlcz1lfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodCksbj0wO248dDsrK24pcltuXT1bXTtyZXR1cm4gbmV3IGkocixlKX07dmFyIGE9aS5wcm90b3R5cGU7ZnVuY3Rpb24gbyh0LGUscil7Zm9yKHZhciBuPTEsaT10Lmxlbmd0aDtuPGk7bis9MilpZih0W24tMV09PT1lJiZ0W25dPT09cilyZXR1cm4gdFtuLTFdPXRbaS0yXSx0W25dPXRbaS0xXSx2b2lkKHQubGVuZ3RoPWktMil9YS5pc0NvbnN0cmFpbnQ9ZnVuY3Rpb24oKXt2YXIgdD1bMCwwXTtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfXJldHVybiBmdW5jdGlvbihyLGkpe3JldHVybiB0WzBdPU1hdGgubWluKHIsaSksdFsxXT1NYXRoLm1heChyLGkpLG4uZXEodGhpcy5lZGdlcyx0LGUpPj0wfX0oKSxhLnJlbW92ZVRyaWFuZ2xlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnN0YXJzO28oblt0XSxlLHIpLG8obltlXSxyLHQpLG8obltyXSx0LGUpfSxhLmFkZFRyaWFuZ2xlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnN0YXJzO25bdF0ucHVzaChlLHIpLG5bZV0ucHVzaChyLHQpLG5bcl0ucHVzaCh0LGUpfSxhLm9wcG9zaXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuc3RhcnNbZV0sbj0xLGk9ci5sZW5ndGg7bjxpO24rPTIpaWYocltuXT09PXQpcmV0dXJuIHJbbi0xXTtyZXR1cm4tMX0sYS5mbGlwPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5vcHBvc2l0ZSh0LGUpLG49dGhpcy5vcHBvc2l0ZShlLHQpO3RoaXMucmVtb3ZlVHJpYW5nbGUodCxlLHIpLHRoaXMucmVtb3ZlVHJpYW5nbGUoZSx0LG4pLHRoaXMuYWRkVHJpYW5nbGUodCxuLHIpLHRoaXMuYWRkVHJpYW5nbGUoZSxyLG4pfSxhLmVkZ2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuc3RhcnMsZT1bXSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWZvcih2YXIgaT10W3JdLGE9MCxvPWkubGVuZ3RoO2E8bzthKz0yKWUucHVzaChbaVthXSxpW2ErMV1dKTtyZXR1cm4gZX0sYS5jZWxscz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN0YXJzLGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxhPTAsbz1pLmxlbmd0aDthPG87YSs9Mil7dmFyIHM9aVthXSxsPWlbYSsxXTtyPE1hdGgubWluKHMsbCkmJmUucHVzaChbcixzLGxdKX1yZXR1cm4gZX19LHtcImJpbmFyeS1zZWFyY2gtYm91bmRzXCI6MTAyfV0sMTAyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUscixuLGkpe3ZhciBhPVtcImZ1bmN0aW9uIFwiLHQsXCIoYSxsLGgsXCIsbi5qb2luKFwiLFwiKSxcIil7XCIsaT9cIlwiOlwidmFyIGk9XCIscj9cImwtMVwiOlwiaCsxXCIsXCI7d2hpbGUobDw9aCl7dmFyIG09KGwraCk+Pj4xLHg9YVttXVwiXTtyZXR1cm4gaT9lLmluZGV4T2YoXCJjXCIpPDA/YS5wdXNoKFwiO2lmKHg9PT15KXtyZXR1cm4gbX1lbHNlIGlmKHg8PXkpe1wiKTphLnB1c2goXCI7dmFyIHA9Yyh4LHkpO2lmKHA9PT0wKXtyZXR1cm4gbX1lbHNlIGlmKHA8PTApe1wiKTphLnB1c2goXCI7aWYoXCIsZSxcIil7aT1tO1wiKSxyP2EucHVzaChcImw9bSsxfWVsc2V7aD1tLTF9XCIpOmEucHVzaChcImg9bS0xfWVsc2V7bD1tKzF9XCIpLGEucHVzaChcIn1cIiksaT9hLnB1c2goXCJyZXR1cm4gLTF9O1wiKTphLnB1c2goXCJyZXR1cm4gaX07XCIpLGEuam9pbihcIlwiKX1mdW5jdGlvbiBpKHQsZSxyLGkpe3JldHVybiBuZXcgRnVuY3Rpb24oW24oXCJBXCIsXCJ4XCIrdCtcInlcIixlLFtcInlcIl0saSksbihcIlBcIixcImMoeCx5KVwiK3QrXCIwXCIsZSxbXCJ5XCIsXCJjXCJdLGkpLFwiZnVuY3Rpb24gZGlzcGF0Y2hCc2VhcmNoXCIscixcIihhLHksYyxsLGgpe2lmKHR5cGVvZihjKT09PSdmdW5jdGlvbicpe3JldHVybiBQKGEsKGw9PT12b2lkIDApPzA6bHwwLChoPT09dm9pZCAwKT9hLmxlbmd0aC0xOmh8MCx5LGMpfWVsc2V7cmV0dXJuIEEoYSwoYz09PXZvaWQgMCk/MDpjfDAsKGw9PT12b2lkIDApP2EubGVuZ3RoLTE6bHwwLHkpfX1yZXR1cm4gZGlzcGF0Y2hCc2VhcmNoXCIscl0uam9pbihcIlwiKSkoKX1lLmV4cG9ydHM9e2dlOmkoXCI+PVwiLCExLFwiR0VcIiksZ3Q6aShcIj5cIiwhMSxcIkdUXCIpLGx0OmkoXCI8XCIsITAsXCJMVFwiKSxsZTppKFwiPD1cIiwhMCxcIkxFXCIpLGVxOmkoXCItXCIsITAsXCJFUVwiLCEwKX19LHt9XSwxMDM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTEscj0xO3I8dC5sZW5ndGg7KytyKWZvcih2YXIgbj0wO248cjsrK24paWYodFtyXTx0W25dKWU9LWU7ZWxzZSBpZih0W25dPT09dFtyXSlyZXR1cm4gMDtyZXR1cm4gZX19LHt9XSwxMDQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZHVwXCIpLGk9dChcInJvYnVzdC1saW5lYXItc29sdmVcIik7ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGgsaT0wO2k8bjsrK2kpcis9dFtpXSplW2ldO3JldHVybiByfWZ1bmN0aW9uIG8odCl7dmFyIGU9dC5sZW5ndGg7aWYoMD09PWUpcmV0dXJuW107dFswXS5sZW5ndGg7dmFyIHI9bihbdC5sZW5ndGgrMSx0Lmxlbmd0aCsxXSwxKSxvPW4oW3QubGVuZ3RoKzFdLDEpO3JbZV1bZV09MDtmb3IodmFyIHM9MDtzPGU7KytzKXtmb3IodmFyIGw9MDtsPD1zOysrbClyW2xdW3NdPXJbc11bbF09MiphKHRbc10sdFtsXSk7b1tzXT1hKHRbc10sdFtzXSl9dmFyIGM9aShyLG8pLHU9MCxoPWNbZSsxXTtmb3Iocz0wO3M8aC5sZW5ndGg7KytzKXUrPWhbc107dmFyIGY9bmV3IEFycmF5KGUpO2ZvcihzPTA7czxlOysrcyl7aD1jW3NdO3ZhciBwPTA7Zm9yKGw9MDtsPGgubGVuZ3RoOysrbClwKz1oW2xdO2Zbc109cC91fXJldHVybiBmfWZ1bmN0aW9uIHModCl7aWYoMD09PXQubGVuZ3RoKXJldHVybltdO2Zvcih2YXIgZT10WzBdLmxlbmd0aCxyPW4oW2VdKSxpPW8odCksYT0wO2E8dC5sZW5ndGg7KythKWZvcih2YXIgcz0wO3M8ZTsrK3MpcltzXSs9dFthXVtzXSppW2FdO3JldHVybiByfXMuYmFyeWNlbmV0cmljPW8sZS5leHBvcnRzPXN9LHtkdXA6MTYyLFwicm9idXN0LWxpbmVhci1zb2x2ZVwiOjQ5NH1dLDEwNTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bih0KSxyPTAsaT0wO2k8dC5sZW5ndGg7KytpKWZvcih2YXIgYT10W2ldLG89MDtvPGUubGVuZ3RoOysrbylyKz1NYXRoLnBvdyhhW29dLWVbb10sMik7cmV0dXJuIE1hdGguc3FydChyL3QubGVuZ3RoKX07dmFyIG49dChcImNpcmN1bWNlbnRlclwiKX0se2NpcmN1bWNlbnRlcjoxMDR9XSwxMDY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPHI/dDxlP2U6dD5yP3I6dDp0PHI/cjp0PmU/ZTp0fX0se31dLDEwNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG47aWYocil7bj1lO2Zvcih2YXIgaT1uZXcgQXJyYXkoZS5sZW5ndGgpLGE9MDthPGUubGVuZ3RoOysrYSl7dmFyIG89ZVthXTtpW2FdPVtvWzBdLG9bMV0sclthXV19ZT1pfXZhciBzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1kKHQsW10scCh0KSk7cmV0dXJuIG0oZSxuLHIpLCEhbn0odCxlLCEhcik7Zm9yKDt5KHQsZSwhIXIpOylzPSEwO2lmKHImJnMpe24ubGVuZ3RoPTAsci5sZW5ndGg9MDtmb3IodmFyIGE9MDthPGUubGVuZ3RoOysrYSl7dmFyIG89ZVthXTtuLnB1c2goW29bMF0sb1sxXV0pLHIucHVzaChvWzJdKX19cmV0dXJuIHN9O3ZhciBuPXQoXCJ1bmlvbi1maW5kXCIpLGk9dChcImJveC1pbnRlcnNlY3RcIiksYT10KFwicm9idXN0LXNlZ21lbnQtaW50ZXJzZWN0XCIpLG89dChcImJpZy1yYXRcIikscz10KFwiYmlnLXJhdC9jbXBcIiksbD10KFwiYmlnLXJhdC90by1mbG9hdFwiKSxjPXQoXCJyYXQtdmVjXCIpLHU9dChcIm5leHRhZnRlclwiKSxoPXQoXCIuL2xpYi9yYXQtc2VnLWludGVyc2VjdFwiKTtmdW5jdGlvbiBmKHQpe3ZhciBlPWwodCk7cmV0dXJuW3UoZSwtMS8wKSx1KGUsMS8wKV19ZnVuY3Rpb24gcCh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDsrK3Ipe3ZhciBuPXRbcl07ZVtyXT1bdShuWzBdLC0xLzApLHUoblsxXSwtMS8wKSx1KG5bMF0sMS8wKSx1KG5bMV0sMS8wKV19cmV0dXJuIGV9ZnVuY3Rpb24gZCh0LGUscil7Zm9yKHZhciBhPWUubGVuZ3RoLG89bmV3IG4oYSkscz1bXSxsPTA7bDxlLmxlbmd0aDsrK2wpe3ZhciBjPWVbbF0saD1mKGNbMF0pLHA9ZihjWzFdKTtzLnB1c2goW3UoaFswXSwtMS8wKSx1KHBbMF0sLTEvMCksdShoWzFdLDEvMCksdShwWzFdLDEvMCldKX1pKHMsZnVuY3Rpb24odCxlKXtvLmxpbmsodCxlKX0pO3ZhciBkPSEwLGc9bmV3IEFycmF5KGEpO2ZvcihsPTA7bDxhOysrbCl7KG09by5maW5kKGwpKSE9PWwmJihkPSExLHRbbV09W01hdGgubWluKHRbbF1bMF0sdFttXVswXSksTWF0aC5taW4odFtsXVsxXSx0W21dWzFdKV0pfWlmKGQpcmV0dXJuIG51bGw7dmFyIHY9MDtmb3IobD0wO2w8YTsrK2wpe3ZhciBtOyhtPW8uZmluZChsKSk9PT1sPyhnW2xdPXYsdFt2KytdPXRbbF0pOmdbbF09LTF9dC5sZW5ndGg9djtmb3IobD0wO2w8YTsrK2wpZ1tsXTwwJiYoZ1tsXT1nW28uZmluZChsKV0pO3JldHVybiBnfWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gdFswXS1lWzBdfHx0WzFdLWVbMV19ZnVuY3Rpb24gdih0LGUpe3ZhciByPXRbMF0tZVswXXx8dFsxXS1lWzFdO3JldHVybiByfHwodFsyXTxlWzJdPy0xOnRbMl0+ZVsyXT8xOjApfWZ1bmN0aW9uIG0odCxlLHIpe2lmKDAhPT10Lmxlbmd0aCl7aWYoZSlmb3IodmFyIG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGk9ZVsobz10W25dKVswXV0sYT1lW29bMV1dO29bMF09TWF0aC5taW4oaSxhKSxvWzFdPU1hdGgubWF4KGksYSl9ZWxzZSBmb3Iobj0wO248dC5sZW5ndGg7KytuKXt2YXIgbztpPShvPXRbbl0pWzBdLGE9b1sxXTtvWzBdPU1hdGgubWluKGksYSksb1sxXT1NYXRoLm1heChpLGEpfXI/dC5zb3J0KHYpOnQuc29ydChnKTt2YXIgcz0xO2ZvcihuPTE7bjx0Lmxlbmd0aDsrK24pe3ZhciBsPXRbbi0xXSxjPXRbbl07KGNbMF0hPT1sWzBdfHxjWzFdIT09bFsxXXx8ciYmY1syXSE9PWxbMl0pJiYodFtzKytdPWMpfXQubGVuZ3RoPXN9fWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBuPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlLmxlbmd0aCksbj0wO248ZS5sZW5ndGg7KytuKXt2YXIgaT1lW25dLGE9dFtpWzBdXSxvPXRbaVsxXV07cltuXT1bdShNYXRoLm1pbihhWzBdLG9bMF0pLC0xLzApLHUoTWF0aC5taW4oYVsxXSxvWzFdKSwtMS8wKSx1KE1hdGgubWF4KGFbMF0sb1swXSksMS8wKSx1KE1hdGgubWF4KGFbMV0sb1sxXSksMS8wKV19cmV0dXJuIHJ9KHQsZSksZj1mdW5jdGlvbih0LGUscil7dmFyIG49W107cmV0dXJuIGkocixmdW5jdGlvbihyLGkpe3ZhciBvPWVbcl0scz1lW2ldO2lmKG9bMF0hPT1zWzBdJiZvWzBdIT09c1sxXSYmb1sxXSE9PXNbMF0mJm9bMV0hPT1zWzFdKXt2YXIgbD10W29bMF1dLGM9dFtvWzFdXSx1PXRbc1swXV0saD10W3NbMV1dO2EobCxjLHUsaCkmJm4ucHVzaChbcixpXSl9fSksbn0odCxlLG4pLGc9cCh0KSx2PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBvPVtdO3JldHVybiBpKHIsbixmdW5jdGlvbihyLG4pe3ZhciBpPWVbcl07aWYoaVswXSE9PW4mJmlbMV0hPT1uKXt2YXIgcz10W25dLGw9dFtpWzBdXSxjPXRbaVsxXV07YShsLGMscyxzKSYmby5wdXNoKFtyLG5dKX19KSxvfSh0LGUsbixnKSx5PWQodCxmdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLHUsZj10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm5bbyh0WzBdKSxvKHRbMV0pXX0pO2ZvcihhPTA7YTxyLmxlbmd0aDsrK2Epe3ZhciBwPXJbYV07dT1wWzBdO3ZhciBkPXBbMV0sZz1lW3VdLHY9ZVtkXSxtPWgoYyh0W2dbMF1dKSxjKHRbZ1sxXV0pLGModFt2WzBdXSksYyh0W3ZbMV1dKSk7aWYobSl7dmFyIHk9dC5sZW5ndGg7dC5wdXNoKFtsKG1bMF0pLGwobVsxXSldKSxmLnB1c2gobSksbi5wdXNoKFt1LHldLFtkLHldKX19Zm9yKG4uc29ydChmdW5jdGlvbih0LGUpe2lmKHRbMF0hPT1lWzBdKXJldHVybiB0WzBdLWVbMF07dmFyIHI9Zlt0WzFdXSxuPWZbZVsxXV07cmV0dXJuIHMoclswXSxuWzBdKXx8cyhyWzFdLG5bMV0pfSksYT1uLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgeD1lW3U9KFM9blthXSlbMF1dLGI9eFswXSxfPXhbMV0sdz10W2JdLGs9dFtfXTtpZigod1swXS1rWzBdfHx3WzFdLWtbMV0pPDApe3ZhciBBPWI7Yj1fLF89QX14WzBdPWI7dmFyIFQsTT14WzFdPVNbMV07Zm9yKGkmJihUPXhbMl0pO2E+MCYmblthLTFdWzBdPT09dTspe3ZhciBTLEU9KFM9blstLWFdKVsxXTtpP2UucHVzaChbTSxFLFRdKTplLnB1c2goW00sRV0pLE09RX1pP2UucHVzaChbTSxfLFRdKTplLnB1c2goW00sX10pfXJldHVybiBmfSh0LGUsZix2LHIpKTtyZXR1cm4gbShlLHksciksISF5fHwoZi5sZW5ndGg+MHx8di5sZW5ndGg+MCl9fSx7XCIuL2xpYi9yYXQtc2VnLWludGVyc2VjdFwiOjEwOCxcImJpZy1yYXRcIjo2OSxcImJpZy1yYXQvY21wXCI6NjcsXCJiaWctcmF0L3RvLWZsb2F0XCI6ODEsXCJib3gtaW50ZXJzZWN0XCI6ODcsbmV4dGFmdGVyOjQ0NCxcInJhdC12ZWNcIjo0NzksXCJyb2J1c3Qtc2VnbWVudC1pbnRlcnNlY3RcIjo0OTgsXCJ1bmlvbi1maW5kXCI6NTMxfV0sMTA4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXMoZSx0KSxoPXMobixyKSxmPXUoYSxoKTtpZigwPT09byhmKSlyZXR1cm4gbnVsbDt2YXIgcD1zKHQsciksZD11KGgscCksZz1pKGQsZiksdj1jKGEsZyk7cmV0dXJuIGwodCx2KX07dmFyIG49dChcImJpZy1yYXQvbXVsXCIpLGk9dChcImJpZy1yYXQvZGl2XCIpLGE9dChcImJpZy1yYXQvc3ViXCIpLG89dChcImJpZy1yYXQvc2lnblwiKSxzPXQoXCJyYXQtdmVjL3N1YlwiKSxsPXQoXCJyYXQtdmVjL2FkZFwiKSxjPXQoXCJyYXQtdmVjL211bHNcIik7ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBhKG4odFswXSxlWzFdKSxuKHRbMV0sZVswXSkpfX0se1wiYmlnLXJhdC9kaXZcIjo2OCxcImJpZy1yYXQvbXVsXCI6NzgsXCJiaWctcmF0L3NpZ25cIjo3OSxcImJpZy1yYXQvc3ViXCI6ODAsXCJyYXQtdmVjL2FkZFwiOjQ3OCxcInJhdC12ZWMvbXVsc1wiOjQ4MCxcInJhdC12ZWMvc3ViXCI6NDgxfV0sMTA5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImNsYW1wXCIpO2Z1bmN0aW9uIGkodCxlKXtudWxsPT1lJiYoZT0hMCk7dmFyIHI9dFswXSxpPXRbMV0sYT10WzJdLG89dFszXTtyZXR1cm4gbnVsbD09byYmKG89ZT8xOjI1NSksZSYmKHIqPTI1NSxpKj0yNTUsYSo9MjU1LG8qPTI1NSksMTY3NzcyMTYqKHI9MjU1Jm4ociwwLDI1NSkpKygoaT0yNTUmbihpLDAsMjU1KSk8PDE2KSsoKGE9MjU1Jm4oYSwwLDI1NSkpPDw4KSsobz0yNTUmbihvLDAsMjU1KSl9ZS5leHBvcnRzPWksZS5leHBvcnRzLnRvPWksZS5leHBvcnRzLmZyb209ZnVuY3Rpb24odCxlKXt2YXIgcj0odD0rdCk+Pj4yNCxuPSgxNjcxMTY4MCZ0KT4+PjE2LGk9KDY1MjgwJnQpPj4+OCxhPTI1NSZ0O3JldHVybiExPT09ZT9bcixuLGksYV06W3IvMjU1LG4vMjU1LGkvMjU1LGEvMjU1XX19LHtjbGFtcDoxMDZ9XSwxMTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e2FsaWNlYmx1ZTpbMjQwLDI0OCwyNTVdLGFudGlxdWV3aGl0ZTpbMjUwLDIzNSwyMTVdLGFxdWE6WzAsMjU1LDI1NV0sYXF1YW1hcmluZTpbMTI3LDI1NSwyMTJdLGF6dXJlOlsyNDAsMjU1LDI1NV0sYmVpZ2U6WzI0NSwyNDUsMjIwXSxiaXNxdWU6WzI1NSwyMjgsMTk2XSxibGFjazpbMCwwLDBdLGJsYW5jaGVkYWxtb25kOlsyNTUsMjM1LDIwNV0sYmx1ZTpbMCwwLDI1NV0sYmx1ZXZpb2xldDpbMTM4LDQzLDIyNl0sYnJvd246WzE2NSw0Miw0Ml0sYnVybHl3b29kOlsyMjIsMTg0LDEzNV0sY2FkZXRibHVlOls5NSwxNTgsMTYwXSxjaGFydHJldXNlOlsxMjcsMjU1LDBdLGNob2NvbGF0ZTpbMjEwLDEwNSwzMF0sY29yYWw6WzI1NSwxMjcsODBdLGNvcm5mbG93ZXJibHVlOlsxMDAsMTQ5LDIzN10sY29ybnNpbGs6WzI1NSwyNDgsMjIwXSxjcmltc29uOlsyMjAsMjAsNjBdLGN5YW46WzAsMjU1LDI1NV0sZGFya2JsdWU6WzAsMCwxMzldLGRhcmtjeWFuOlswLDEzOSwxMzldLGRhcmtnb2xkZW5yb2Q6WzE4NCwxMzQsMTFdLGRhcmtncmF5OlsxNjksMTY5LDE2OV0sZGFya2dyZWVuOlswLDEwMCwwXSxkYXJrZ3JleTpbMTY5LDE2OSwxNjldLGRhcmtraGFraTpbMTg5LDE4MywxMDddLGRhcmttYWdlbnRhOlsxMzksMCwxMzldLGRhcmtvbGl2ZWdyZWVuOls4NSwxMDcsNDddLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMF0sZGFya29yY2hpZDpbMTUzLDUwLDIwNF0sZGFya3JlZDpbMTM5LDAsMF0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjJdLGRhcmtzZWFncmVlbjpbMTQzLDE4OCwxNDNdLGRhcmtzbGF0ZWJsdWU6WzcyLDYxLDEzOV0sZGFya3NsYXRlZ3JheTpbNDcsNzksNzldLGRhcmtzbGF0ZWdyZXk6WzQ3LDc5LDc5XSxkYXJrdHVycXVvaXNlOlswLDIwNiwyMDldLGRhcmt2aW9sZXQ6WzE0OCwwLDIxMV0sZGVlcHBpbms6WzI1NSwyMCwxNDddLGRlZXBza3libHVlOlswLDE5MSwyNTVdLGRpbWdyYXk6WzEwNSwxMDUsMTA1XSxkaW1ncmV5OlsxMDUsMTA1LDEwNV0sZG9kZ2VyYmx1ZTpbMzAsMTQ0LDI1NV0sZmlyZWJyaWNrOlsxNzgsMzQsMzRdLGZsb3JhbHdoaXRlOlsyNTUsMjUwLDI0MF0sZm9yZXN0Z3JlZW46WzM0LDEzOSwzNF0sZnVjaHNpYTpbMjU1LDAsMjU1XSxnYWluc2Jvcm86WzIyMCwyMjAsMjIwXSxnaG9zdHdoaXRlOlsyNDgsMjQ4LDI1NV0sZ29sZDpbMjU1LDIxNSwwXSxnb2xkZW5yb2Q6WzIxOCwxNjUsMzJdLGdyYXk6WzEyOCwxMjgsMTI4XSxncmVlbjpbMCwxMjgsMF0sZ3JlZW55ZWxsb3c6WzE3MywyNTUsNDddLGdyZXk6WzEyOCwxMjgsMTI4XSxob25leWRldzpbMjQwLDI1NSwyNDBdLGhvdHBpbms6WzI1NSwxMDUsMTgwXSxpbmRpYW5yZWQ6WzIwNSw5Miw5Ml0saW5kaWdvOls3NSwwLDEzMF0saXZvcnk6WzI1NSwyNTUsMjQwXSxraGFraTpbMjQwLDIzMCwxNDBdLGxhdmVuZGVyOlsyMzAsMjMwLDI1MF0sbGF2ZW5kZXJibHVzaDpbMjU1LDI0MCwyNDVdLGxhd25ncmVlbjpbMTI0LDI1MiwwXSxsZW1vbmNoaWZmb246WzI1NSwyNTAsMjA1XSxsaWdodGJsdWU6WzE3MywyMTYsMjMwXSxsaWdodGNvcmFsOlsyNDAsMTI4LDEyOF0sbGlnaHRjeWFuOlsyMjQsMjU1LDI1NV0sbGlnaHRnb2xkZW5yb2R5ZWxsb3c6WzI1MCwyNTAsMjEwXSxsaWdodGdyYXk6WzIxMSwyMTEsMjExXSxsaWdodGdyZWVuOlsxNDQsMjM4LDE0NF0sbGlnaHRncmV5OlsyMTEsMjExLDIxMV0sbGlnaHRwaW5rOlsyNTUsMTgyLDE5M10sbGlnaHRzYWxtb246WzI1NSwxNjAsMTIyXSxsaWdodHNlYWdyZWVuOlszMiwxNzgsMTcwXSxsaWdodHNreWJsdWU6WzEzNSwyMDYsMjUwXSxsaWdodHNsYXRlZ3JheTpbMTE5LDEzNiwxNTNdLGxpZ2h0c2xhdGVncmV5OlsxMTksMTM2LDE1M10sbGlnaHRzdGVlbGJsdWU6WzE3NiwxOTYsMjIyXSxsaWdodHllbGxvdzpbMjU1LDI1NSwyMjRdLGxpbWU6WzAsMjU1LDBdLGxpbWVncmVlbjpbNTAsMjA1LDUwXSxsaW5lbjpbMjUwLDI0MCwyMzBdLG1hZ2VudGE6WzI1NSwwLDI1NV0sbWFyb29uOlsxMjgsMCwwXSxtZWRpdW1hcXVhbWFyaW5lOlsxMDIsMjA1LDE3MF0sbWVkaXVtYmx1ZTpbMCwwLDIwNV0sbWVkaXVtb3JjaGlkOlsxODYsODUsMjExXSxtZWRpdW1wdXJwbGU6WzE0NywxMTIsMjE5XSxtZWRpdW1zZWFncmVlbjpbNjAsMTc5LDExM10sbWVkaXVtc2xhdGVibHVlOlsxMjMsMTA0LDIzOF0sbWVkaXVtc3ByaW5nZ3JlZW46WzAsMjUwLDE1NF0sbWVkaXVtdHVycXVvaXNlOls3MiwyMDksMjA0XSxtZWRpdW12aW9sZXRyZWQ6WzE5OSwyMSwxMzNdLG1pZG5pZ2h0Ymx1ZTpbMjUsMjUsMTEyXSxtaW50Y3JlYW06WzI0NSwyNTUsMjUwXSxtaXN0eXJvc2U6WzI1NSwyMjgsMjI1XSxtb2NjYXNpbjpbMjU1LDIyOCwxODFdLG5hdmFqb3doaXRlOlsyNTUsMjIyLDE3M10sbmF2eTpbMCwwLDEyOF0sb2xkbGFjZTpbMjUzLDI0NSwyMzBdLG9saXZlOlsxMjgsMTI4LDBdLG9saXZlZHJhYjpbMTA3LDE0MiwzNV0sb3JhbmdlOlsyNTUsMTY1LDBdLG9yYW5nZXJlZDpbMjU1LDY5LDBdLG9yY2hpZDpbMjE4LDExMiwyMTRdLHBhbGVnb2xkZW5yb2Q6WzIzOCwyMzIsMTcwXSxwYWxlZ3JlZW46WzE1MiwyNTEsMTUyXSxwYWxldHVycXVvaXNlOlsxNzUsMjM4LDIzOF0scGFsZXZpb2xldHJlZDpbMjE5LDExMiwxNDddLHBhcGF5YXdoaXA6WzI1NSwyMzksMjEzXSxwZWFjaHB1ZmY6WzI1NSwyMTgsMTg1XSxwZXJ1OlsyMDUsMTMzLDYzXSxwaW5rOlsyNTUsMTkyLDIwM10scGx1bTpbMjIxLDE2MCwyMjFdLHBvd2RlcmJsdWU6WzE3NiwyMjQsMjMwXSxwdXJwbGU6WzEyOCwwLDEyOF0scmViZWNjYXB1cnBsZTpbMTAyLDUxLDE1M10scmVkOlsyNTUsMCwwXSxyb3N5YnJvd246WzE4OCwxNDMsMTQzXSxyb3lhbGJsdWU6WzY1LDEwNSwyMjVdLHNhZGRsZWJyb3duOlsxMzksNjksMTldLHNhbG1vbjpbMjUwLDEyOCwxMTRdLHNhbmR5YnJvd246WzI0NCwxNjQsOTZdLHNlYWdyZWVuOls0NiwxMzksODddLHNlYXNoZWxsOlsyNTUsMjQ1LDIzOF0sc2llbm5hOlsxNjAsODIsNDVdLHNpbHZlcjpbMTkyLDE5MiwxOTJdLHNreWJsdWU6WzEzNSwyMDYsMjM1XSxzbGF0ZWJsdWU6WzEwNiw5MCwyMDVdLHNsYXRlZ3JheTpbMTEyLDEyOCwxNDRdLHNsYXRlZ3JleTpbMTEyLDEyOCwxNDRdLHNub3c6WzI1NSwyNTAsMjUwXSxzcHJpbmdncmVlbjpbMCwyNTUsMTI3XSxzdGVlbGJsdWU6WzcwLDEzMCwxODBdLHRhbjpbMjEwLDE4MCwxNDBdLHRlYWw6WzAsMTI4LDEyOF0sdGhpc3RsZTpbMjE2LDE5MSwyMTZdLHRvbWF0bzpbMjU1LDk5LDcxXSx0dXJxdW9pc2U6WzY0LDIyNCwyMDhdLHZpb2xldDpbMjM4LDEzMCwyMzhdLHdoZWF0OlsyNDUsMjIyLDE3OV0sd2hpdGU6WzI1NSwyNTUsMjU1XSx3aGl0ZXNtb2tlOlsyNDUsMjQ1LDI0NV0seWVsbG93OlsyNTUsMjU1LDBdLHllbGxvd2dyZWVuOlsxNTQsMjA1LDUwXX19LHt9XSwxMTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiY29sb3ItcmdiYVwiKSxpPXQoXCJjbGFtcFwiKSxhPXQoXCJkdHlwZVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtcImZsb2F0XCIhPT1lJiZlfHwoZT1cImFycmF5XCIpLFwidWludFwiPT09ZSYmKGU9XCJ1aW50OFwiKSxcInVpbnRfY2xhbXBlZFwiPT09ZSYmKGU9XCJ1aW50OF9jbGFtcGVkXCIpO3ZhciByPW5ldyhhKGUpKSg0KSxvPVwidWludDhcIiE9PWUmJlwidWludDhfY2xhbXBlZFwiIT09ZTtyZXR1cm4gdC5sZW5ndGgmJlwic3RyaW5nXCIhPXR5cGVvZiB0fHwoKHQ9bih0KSlbMF0vPTI1NSx0WzFdLz0yNTUsdFsyXS89MjU1KSxmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheXx8ISEoQXJyYXkuaXNBcnJheSh0KSYmKHRbMF0+MXx8MD09PXRbMF0pJiYodFsxXT4xfHwwPT09dFsxXSkmJih0WzJdPjF8fDA9PT10WzJdKSYmKCF0WzNdfHx0WzNdPjEpKX0odCk/KHJbMF09dFswXSxyWzFdPXRbMV0sclsyXT10WzJdLHJbM109bnVsbCE9dFszXT90WzNdOjI1NSxvJiYoclswXS89MjU1LHJbMV0vPTI1NSxyWzJdLz0yNTUsclszXS89MjU1KSxyKToobz8oclswXT10WzBdLHJbMV09dFsxXSxyWzJdPXRbMl0sclszXT1udWxsIT10WzNdP3RbM106MSk6KHJbMF09aShNYXRoLmZsb29yKDI1NSp0WzBdKSwwLDI1NSksclsxXT1pKE1hdGguZmxvb3IoMjU1KnRbMV0pLDAsMjU1KSxyWzJdPWkoTWF0aC5mbG9vcigyNTUqdFsyXSksMCwyNTUpLHJbM109bnVsbD09dFszXT8yNTU6aShNYXRoLmZsb29yKDI1NSp0WzNdKSwwLDI1NSkpLHIpfX0se2NsYW1wOjEwNixcImNvbG9yLXJnYmFcIjoxMTMsZHR5cGU6MTYxfV0sMTEyOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJjb2xvci1uYW1lXCIpLGk9dChcImlzLXBsYWluLW9ialwiKSxhPXQoXCJkZWZpbmVkXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxzLGw9W10sYz0xO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KWlmKG5bdF0pbD1uW3RdLnNsaWNlKCkscz1cInJnYlwiO2Vsc2UgaWYoXCJ0cmFuc3BhcmVudFwiPT09dCljPTAscz1cInJnYlwiLGw9WzAsMCwwXTtlbHNlIGlmKC9eI1tBLUZhLWYwLTldKyQvLnRlc3QodCkpe3ZhciB1PXQuc2xpY2UoMSksaD11Lmxlbmd0aCxmPWg8PTQ7Yz0xLGY/KGw9W3BhcnNlSW50KHVbMF0rdVswXSwxNikscGFyc2VJbnQodVsxXSt1WzFdLDE2KSxwYXJzZUludCh1WzJdK3VbMl0sMTYpXSw0PT09aCYmKGM9cGFyc2VJbnQodVszXSt1WzNdLDE2KS8yNTUpKToobD1bcGFyc2VJbnQodVswXSt1WzFdLDE2KSxwYXJzZUludCh1WzJdK3VbM10sMTYpLHBhcnNlSW50KHVbNF0rdVs1XSwxNildLDg9PT1oJiYoYz1wYXJzZUludCh1WzZdK3VbN10sMTYpLzI1NSkpLGxbMF18fChsWzBdPTApLGxbMV18fChsWzFdPTApLGxbMl18fChsWzJdPTApLHM9XCJyZ2JcIn1lbHNlIGlmKGU9L14oKD86cmdifGhzW2x2Yl18aHdifGNteWs/fHh5W3p5XXxncmF5fGxhYnxsY2h1P3Y/fFtseV11dnxsbXMpYT8pXFxzKlxcKChbXlxcKV0qKVxcKS8uZXhlYyh0KSl7dmFyIHA9ZVsxXSx1PXAucmVwbGFjZSgvYSQvLFwiXCIpO3M9dTt2YXIgaD1cImNteWtcIj09PXU/NDpcImdyYXlcIj09PXU/MTozO2w9ZVsyXS50cmltKCkuc3BsaXQoL1xccyosXFxzKi8pLm1hcChmdW5jdGlvbih0LGUpe2lmKC8lJC8udGVzdCh0KSlyZXR1cm4gZT09PWg/cGFyc2VGbG9hdCh0KS8xMDA6XCJyZ2JcIj09PXU/MjU1KnBhcnNlRmxvYXQodCkvMTAwOnBhcnNlRmxvYXQodCk7aWYoXCJoXCI9PT11W2VdKXtpZigvZGVnJC8udGVzdCh0KSlyZXR1cm4gcGFyc2VGbG9hdCh0KTtpZih2b2lkIDAhPT1vW3RdKXJldHVybiBvW3RdfXJldHVybiBwYXJzZUZsb2F0KHQpfSkscD09PXUmJmwucHVzaCgxKSxjPXZvaWQgMD09PWxbaF0/MTpsW2hdLGw9bC5zbGljZSgwLGgpfWVsc2UgdC5sZW5ndGg+MTAmJi9bMC05XSg/Olxcc3xcXC8pLy50ZXN0KHQpJiYobD10Lm1hdGNoKC8oWzAtOV0rKS9nKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlRmxvYXQodCl9KSxzPXQubWF0Y2goLyhbYS16XSkvZ2kpLmpvaW4oXCJcIikudG9Mb3dlckNhc2UoKSk7ZWxzZSBpZihpc05hTih0KSlpZihpKHQpKXt2YXIgZD1hKHQucix0LnJlZCx0LlIsbnVsbCk7bnVsbCE9PWQ/KHM9XCJyZ2JcIixsPVtkLGEodC5nLHQuZ3JlZW4sdC5HKSxhKHQuYix0LmJsdWUsdC5CKV0pOihzPVwiaHNsXCIsbD1bYSh0LmgsdC5odWUsdC5IKSxhKHQucyx0LnNhdHVyYXRpb24sdC5TKSxhKHQubCx0LmxpZ2h0bmVzcyx0LkwsdC5iLHQuYnJpZ2h0bmVzcyldKSxjPWEodC5hLHQuYWxwaGEsdC5vcGFjaXR5LDEpLG51bGwhPXQub3BhY2l0eSYmKGMvPTEwMCl9ZWxzZShBcnJheS5pc0FycmF5KHQpfHxyLkFycmF5QnVmZmVyJiZBcnJheUJ1ZmZlci5pc1ZpZXcmJkFycmF5QnVmZmVyLmlzVmlldyh0KSkmJihsPVt0WzBdLHRbMV0sdFsyXV0scz1cInJnYlwiLGM9ND09PXQubGVuZ3RoP3RbM106MSk7ZWxzZSBzPVwicmdiXCIsbD1bdD4+PjE2LCg2NTI4MCZ0KT4+PjgsMjU1JnRdO3JldHVybntzcGFjZTpzLHZhbHVlczpsLGFscGhhOmN9fTt2YXIgbz17cmVkOjAsb3JhbmdlOjYwLHllbGxvdzoxMjAsZ3JlZW46MTgwLGJsdWU6MjQwLHB1cnBsZTozMDB9fSkuY2FsbCh0aGlzLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7XCJjb2xvci1uYW1lXCI6MTEwLGRlZmluZWQ6MTU2LFwiaXMtcGxhaW4tb2JqXCI6NDE1fV0sMTEzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImNvbG9yLXBhcnNlXCIpLGk9dChcImNvbG9yLXNwYWNlL2hzbFwiKSxhPXQoXCJjbGFtcFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscj1uKHQpO3JldHVybiByLnNwYWNlPygoZT1BcnJheSgzKSlbMF09YShyLnZhbHVlc1swXSwwLDI1NSksZVsxXT1hKHIudmFsdWVzWzFdLDAsMjU1KSxlWzJdPWEoci52YWx1ZXNbMl0sMCwyNTUpLFwiaFwiPT09ci5zcGFjZVswXSYmKGU9aS5yZ2IoZSkpLGUucHVzaChhKHIuYWxwaGEsMCwxKSksZSk6W119fSx7Y2xhbXA6MTA2LFwiY29sb3ItcGFyc2VcIjoxMTIsXCJjb2xvci1zcGFjZS9oc2xcIjoxMTR9XSwxMTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9yZ2JcIik7ZS5leHBvcnRzPXtuYW1lOlwiaHNsXCIsbWluOlswLDAsMF0sbWF4OlszNjAsMTAwLDEwMF0sY2hhbm5lbDpbXCJodWVcIixcInNhdHVyYXRpb25cIixcImxpZ2h0bmVzc1wiXSxhbGlhczpbXCJIU0xcIl0scmdiOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbz10WzBdLzM2MCxzPXRbMV0vMTAwLGw9dFsyXS8xMDA7aWYoMD09PXMpcmV0dXJuW2E9MjU1KmwsYSxhXTtlPTIqbC0ocj1sPC41P2wqKDErcyk6bCtzLWwqcyksaT1bMCwwLDBdO2Zvcih2YXIgYz0wO2M8MztjKyspKG49bysxLzMqLShjLTEpKTwwP24rKzpuPjEmJm4tLSxhPTYqbjwxP2UrNiooci1lKSpuOjIqbjwxP3I6MypuPDI/ZSsoci1lKSooMi8zLW4pKjY6ZSxpW2NdPTI1NSphO3JldHVybiBpfX0sbi5oc2w9ZnVuY3Rpb24odCl7dmFyIGUscixuPXRbMF0vMjU1LGk9dFsxXS8yNTUsYT10WzJdLzI1NSxvPU1hdGgubWluKG4saSxhKSxzPU1hdGgubWF4KG4saSxhKSxsPXMtbztyZXR1cm4gcz09PW8/ZT0wOm49PT1zP2U9KGktYSkvbDppPT09cz9lPTIrKGEtbikvbDphPT09cyYmKGU9NCsobi1pKS9sKSwoZT1NYXRoLm1pbig2MCplLDM2MCkpPDAmJihlKz0zNjApLHI9KG8rcykvMixbZSwxMDAqKHM9PT1vPzA6cjw9LjU/bC8ocytvKTpsLygyLXMtbykpLDEwMCpyXX19LHtcIi4vcmdiXCI6MTE1fV0sMTE1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtuYW1lOlwicmdiXCIsbWluOlswLDAsMF0sbWF4OlsyNTUsMjU1LDI1NV0sY2hhbm5lbDpbXCJyZWRcIixcImdyZWVuXCIsXCJibHVlXCJdLGFsaWFzOltcIlJHQlwiXX19LHt9XSwxMTY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e2pldDpbe2luZGV4OjAscmdiOlswLDAsMTMxXX0se2luZGV4Oi4xMjUscmdiOlswLDYwLDE3MF19LHtpbmRleDouMzc1LHJnYjpbNSwyNTUsMjU1XX0se2luZGV4Oi42MjUscmdiOlsyNTUsMjU1LDBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzI1MCwwLDBdfSx7aW5kZXg6MSxyZ2I6WzEyOCwwLDBdfV0saHN2Olt7aW5kZXg6MCxyZ2I6WzI1NSwwLDBdfSx7aW5kZXg6LjE2OSxyZ2I6WzI1MywyNTUsMl19LHtpbmRleDouMTczLHJnYjpbMjQ3LDI1NSwyXX0se2luZGV4Oi4zMzcscmdiOlswLDI1Miw0XX0se2luZGV4Oi4zNDEscmdiOlswLDI1MiwxMF19LHtpbmRleDouNTA2LHJnYjpbMSwyNDksMjU1XX0se2luZGV4Oi42NzEscmdiOlsyLDAsMjUzXX0se2luZGV4Oi42NzUscmdiOls4LDAsMjUzXX0se2luZGV4Oi44MzkscmdiOlsyNTUsMCwyNTFdfSx7aW5kZXg6Ljg0MyxyZ2I6WzI1NSwwLDI0NV19LHtpbmRleDoxLHJnYjpbMjU1LDAsNl19XSxob3Q6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjMscmdiOlsyMzAsMCwwXX0se2luZGV4Oi42LHJnYjpbMjU1LDIxMCwwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NV19XSxjb29sOlt7aW5kZXg6MCxyZ2I6WzAsMjU1LDI1NV19LHtpbmRleDoxLHJnYjpbMjU1LDAsMjU1XX1dLHNwcmluZzpbe2luZGV4OjAscmdiOlsyNTUsMCwyNTVdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMF19XSxzdW1tZXI6W3tpbmRleDowLHJnYjpbMCwxMjgsMTAyXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDEwMl19XSxhdXR1bW46W3tpbmRleDowLHJnYjpbMjU1LDAsMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwwXX1dLHdpbnRlcjpbe2luZGV4OjAscmdiOlswLDAsMjU1XX0se2luZGV4OjEscmdiOlswLDI1NSwxMjhdfV0sYm9uZTpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMzc2LHJnYjpbODQsODQsMTE2XX0se2luZGV4Oi43NTMscmdiOlsxNjksMjAwLDIwMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyNTVdfV0sY29wcGVyOlt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi44MDQscmdiOlsyNTUsMTYwLDEwMl19LHtpbmRleDoxLHJnYjpbMjU1LDE5OSwxMjddfV0sZ3JleXM6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1XX1dLHlpZ25idTpbe2luZGV4OjAscmdiOls4LDI5LDg4XX0se2luZGV4Oi4xMjUscmdiOlszNyw1MiwxNDhdfSx7aW5kZXg6LjI1LHJnYjpbMzQsOTQsMTY4XX0se2luZGV4Oi4zNzUscmdiOlsyOSwxNDUsMTkyXX0se2luZGV4Oi41LHJnYjpbNjUsMTgyLDE5Nl19LHtpbmRleDouNjI1LHJnYjpbMTI3LDIwNSwxODddfSx7aW5kZXg6Ljc1LHJnYjpbMTk5LDIzMywxODBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzIzNywyNDgsMjE3XX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDIxN119XSxncmVlbnM6W3tpbmRleDowLHJnYjpbMCw2OCwyN119LHtpbmRleDouMTI1LHJnYjpbMCwxMDksNDRdfSx7aW5kZXg6LjI1LHJnYjpbMzUsMTM5LDY5XX0se2luZGV4Oi4zNzUscmdiOls2NSwxNzEsOTNdfSx7aW5kZXg6LjUscmdiOlsxMTYsMTk2LDExOF19LHtpbmRleDouNjI1LHJnYjpbMTYxLDIxNywxNTVdfSx7aW5kZXg6Ljc1LHJnYjpbMTk5LDIzMywxOTJdfSx7aW5kZXg6Ljg3NSxyZ2I6WzIyOSwyNDUsMjI0XX0se2luZGV4OjEscmdiOlsyNDcsMjUyLDI0NV19XSx5aW9ycmQ6W3tpbmRleDowLHJnYjpbMTI4LDAsMzhdfSx7aW5kZXg6LjEyNSxyZ2I6WzE4OSwwLDM4XX0se2luZGV4Oi4yNSxyZ2I6WzIyNywyNiwyOF19LHtpbmRleDouMzc1LHJnYjpbMjUyLDc4LDQyXX0se2luZGV4Oi41LHJnYjpbMjUzLDE0MSw2MF19LHtpbmRleDouNjI1LHJnYjpbMjU0LDE3OCw3Nl19LHtpbmRleDouNzUscmdiOlsyNTQsMjE3LDExOF19LHtpbmRleDouODc1LHJnYjpbMjU1LDIzNywxNjBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjA0XX1dLGJsdWVyZWQ6W3tpbmRleDowLHJnYjpbMCwwLDI1NV19LHtpbmRleDoxLHJnYjpbMjU1LDAsMF19XSxyZGJ1Olt7aW5kZXg6MCxyZ2I6WzUsMTAsMTcyXX0se2luZGV4Oi4zNSxyZ2I6WzEwNiwxMzcsMjQ3XX0se2luZGV4Oi41LHJnYjpbMTkwLDE5MCwxOTBdfSx7aW5kZXg6LjYscmdiOlsyMjAsMTcwLDEzMl19LHtpbmRleDouNyxyZ2I6WzIzMCwxNDUsOTBdfSx7aW5kZXg6MSxyZ2I6WzE3OCwxMCwyOF19XSxwaWNuaWM6W3tpbmRleDowLHJnYjpbMCwwLDI1NV19LHtpbmRleDouMSxyZ2I6WzUxLDE1MywyNTVdfSx7aW5kZXg6LjIscmdiOlsxMDIsMjA0LDI1NV19LHtpbmRleDouMyxyZ2I6WzE1MywyMDQsMjU1XX0se2luZGV4Oi40LHJnYjpbMjA0LDIwNCwyNTVdfSx7aW5kZXg6LjUscmdiOlsyNTUsMjU1LDI1NV19LHtpbmRleDouNixyZ2I6WzI1NSwyMDQsMjU1XX0se2luZGV4Oi43LHJnYjpbMjU1LDE1MywyNTVdfSx7aW5kZXg6LjgscmdiOlsyNTUsMTAyLDIwNF19LHtpbmRleDouOSxyZ2I6WzI1NSwxMDIsMTAyXX0se2luZGV4OjEscmdiOlsyNTUsMCwwXX1dLHJhaW5ib3c6W3tpbmRleDowLHJnYjpbMTUwLDAsOTBdfSx7aW5kZXg6LjEyNSxyZ2I6WzAsMCwyMDBdfSx7aW5kZXg6LjI1LHJnYjpbMCwyNSwyNTVdfSx7aW5kZXg6LjM3NSxyZ2I6WzAsMTUyLDI1NV19LHtpbmRleDouNSxyZ2I6WzQ0LDI1NSwxNTBdfSx7aW5kZXg6LjYyNSxyZ2I6WzE1MSwyNTUsMF19LHtpbmRleDouNzUscmdiOlsyNTUsMjM0LDBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzI1NSwxMTEsMF19LHtpbmRleDoxLHJnYjpbMjU1LDAsMF19XSxwb3J0bGFuZDpbe2luZGV4OjAscmdiOlsxMiw1MSwxMzFdfSx7aW5kZXg6LjI1LHJnYjpbMTAsMTM2LDE4Nl19LHtpbmRleDouNSxyZ2I6WzI0MiwyMTEsNTZdfSx7aW5kZXg6Ljc1LHJnYjpbMjQyLDE0Myw1Nl19LHtpbmRleDoxLHJnYjpbMjE3LDMwLDMwXX1dLGJsYWNrYm9keTpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMixyZ2I6WzIzMCwwLDBdfSx7aW5kZXg6LjQscmdiOlsyMzAsMjEwLDBdfSx7aW5kZXg6LjcscmdiOlsyNTUsMjU1LDI1NV19LHtpbmRleDoxLHJnYjpbMTYwLDIwMCwyNTVdfV0sZWFydGg6W3tpbmRleDowLHJnYjpbMCwwLDEzMF19LHtpbmRleDouMSxyZ2I6WzAsMTgwLDE4MF19LHtpbmRleDouMixyZ2I6WzQwLDIxMCw0MF19LHtpbmRleDouNCxyZ2I6WzIzMCwyMzAsNTBdfSx7aW5kZXg6LjYscmdiOlsxMjAsNzAsMjBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1XX1dLGVsZWN0cmljOlt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi4xNSxyZ2I6WzMwLDAsMTAwXX0se2luZGV4Oi40LHJnYjpbMTIwLDAsMTAwXX0se2luZGV4Oi42LHJnYjpbMTYwLDkwLDBdfSx7aW5kZXg6LjgscmdiOlsyMzAsMjAwLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTAsMjIwXX1dLGFscGhhOlt7aW5kZXg6MCxyZ2I6WzI1NSwyNTUsMjU1LDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1LDFdfV0sdmlyaWRpczpbe2luZGV4OjAscmdiOls2OCwxLDg0XX0se2luZGV4Oi4xMyxyZ2I6WzcxLDQ0LDEyMl19LHtpbmRleDouMjUscmdiOls1OSw4MSwxMzldfSx7aW5kZXg6LjM4LHJnYjpbNDQsMTEzLDE0Ml19LHtpbmRleDouNSxyZ2I6WzMzLDE0NCwxNDFdfSx7aW5kZXg6LjYzLHJnYjpbMzksMTczLDEyOV19LHtpbmRleDouNzUscmdiOls5MiwyMDAsOTldfSx7aW5kZXg6Ljg4LHJnYjpbMTcwLDIyMCw1MF19LHtpbmRleDoxLHJnYjpbMjUzLDIzMSwzN119XSxpbmZlcm5vOlt7aW5kZXg6MCxyZ2I6WzAsMCw0XX0se2luZGV4Oi4xMyxyZ2I6WzMxLDEyLDcyXX0se2luZGV4Oi4yNSxyZ2I6Wzg1LDE1LDEwOV19LHtpbmRleDouMzgscmdiOlsxMzYsMzQsMTA2XX0se2luZGV4Oi41LHJnYjpbMTg2LDU0LDg1XX0se2luZGV4Oi42MyxyZ2I6WzIyNyw4OSw1MV19LHtpbmRleDouNzUscmdiOlsyNDksMTQwLDEwXX0se2luZGV4Oi44OCxyZ2I6WzI0OSwyMDEsNTBdfSx7aW5kZXg6MSxyZ2I6WzI1MiwyNTUsMTY0XX1dLG1hZ21hOlt7aW5kZXg6MCxyZ2I6WzAsMCw0XX0se2luZGV4Oi4xMyxyZ2I6WzI4LDE2LDY4XX0se2luZGV4Oi4yNSxyZ2I6Wzc5LDE4LDEyM119LHtpbmRleDouMzgscmdiOlsxMjksMzcsMTI5XX0se2luZGV4Oi41LHJnYjpbMTgxLDU0LDEyMl19LHtpbmRleDouNjMscmdiOlsyMjksODAsMTAwXX0se2luZGV4Oi43NSxyZ2I6WzI1MSwxMzUsOTddfSx7aW5kZXg6Ljg4LHJnYjpbMjU0LDE5NCwxMzVdfSx7aW5kZXg6MSxyZ2I6WzI1MiwyNTMsMTkxXX1dLHBsYXNtYTpbe2luZGV4OjAscmdiOlsxMyw4LDEzNV19LHtpbmRleDouMTMscmdiOls3NSwzLDE2MV19LHtpbmRleDouMjUscmdiOlsxMjUsMywxNjhdfSx7aW5kZXg6LjM4LHJnYjpbMTY4LDM0LDE1MF19LHtpbmRleDouNSxyZ2I6WzIwMyw3MCwxMjFdfSx7aW5kZXg6LjYzLHJnYjpbMjI5LDEwNyw5M119LHtpbmRleDouNzUscmdiOlsyNDgsMTQ4LDY1XX0se2luZGV4Oi44OCxyZ2I6WzI1MywxOTUsNDBdfSx7aW5kZXg6MSxyZ2I6WzI0MCwyNDksMzNdfV0sd2FybTpbe2luZGV4OjAscmdiOlsxMjUsMCwxNzldfSx7aW5kZXg6LjEzLHJnYjpbMTcyLDAsMTg3XX0se2luZGV4Oi4yNSxyZ2I6WzIxOSwwLDE3MF19LHtpbmRleDouMzgscmdiOlsyNTUsMCwxMzBdfSx7aW5kZXg6LjUscmdiOlsyNTUsNjMsNzRdfSx7aW5kZXg6LjYzLHJnYjpbMjU1LDEyMywwXX0se2luZGV4Oi43NSxyZ2I6WzIzNCwxNzYsMF19LHtpbmRleDouODgscmdiOlsxOTAsMjI4LDBdfSx7aW5kZXg6MSxyZ2I6WzE0NywyNTUsMF19XSxjb29sOlt7aW5kZXg6MCxyZ2I6WzEyNSwwLDE3OV19LHtpbmRleDouMTMscmdiOlsxMTYsMCwyMThdfSx7aW5kZXg6LjI1LHJnYjpbOTgsNzQsMjM3XX0se2luZGV4Oi4zOCxyZ2I6WzY4LDE0NiwyMzFdfSx7aW5kZXg6LjUscmdiOlswLDIwNCwxOTddfSx7aW5kZXg6LjYzLHJnYjpbMCwyNDcsMTQ2XX0se2luZGV4Oi43NSxyZ2I6WzAsMjU1LDg4XX0se2luZGV4Oi44OCxyZ2I6WzQwLDI1NSw4XX0se2luZGV4OjEscmdiOlsxNDcsMjU1LDBdfV0sXCJyYWluYm93LXNvZnRcIjpbe2luZGV4OjAscmdiOlsxMjUsMCwxNzldfSx7aW5kZXg6LjEscmdiOlsxOTksMCwxODBdfSx7aW5kZXg6LjIscmdiOlsyNTUsMCwxMjFdfSx7aW5kZXg6LjMscmdiOlsyNTUsMTA4LDBdfSx7aW5kZXg6LjQscmdiOlsyMjIsMTk0LDBdfSx7aW5kZXg6LjUscmdiOlsxNTAsMjU1LDBdfSx7aW5kZXg6LjYscmdiOlswLDI1NSw1NV19LHtpbmRleDouNyxyZ2I6WzAsMjQ2LDE1MF19LHtpbmRleDouOCxyZ2I6WzUwLDE2NywyMjJdfSx7aW5kZXg6LjkscmdiOlsxMDMsNTEsMjM1XX0se2luZGV4OjEscmdiOlsxMjQsMCwxODZdfV0sYmF0aHltZXRyeTpbe2luZGV4OjAscmdiOls0MCwyNiw0NF19LHtpbmRleDouMTMscmdiOls1OSw0OSw5MF19LHtpbmRleDouMjUscmdiOls2NCw3NiwxMzldfSx7aW5kZXg6LjM4LHJnYjpbNjMsMTEwLDE1MV19LHtpbmRleDouNSxyZ2I6WzcyLDE0MiwxNThdfSx7aW5kZXg6LjYzLHJnYjpbODUsMTc0LDE2M119LHtpbmRleDouNzUscmdiOlsxMjAsMjA2LDE2M119LHtpbmRleDouODgscmdiOlsxODcsMjMwLDE3Ml19LHtpbmRleDoxLHJnYjpbMjUzLDI1NCwyMDRdfV0sY2RvbTpbe2luZGV4OjAscmdiOls0NywxNSw2Ml19LHtpbmRleDouMTMscmdiOls4NywyMyw4Nl19LHtpbmRleDouMjUscmdiOlsxMzAsMjgsOTldfSx7aW5kZXg6LjM4LHJnYjpbMTcxLDQxLDk2XX0se2luZGV4Oi41LHJnYjpbMjA2LDY3LDg2XX0se2luZGV4Oi42MyxyZ2I6WzIzMCwxMDYsODRdfSx7aW5kZXg6Ljc1LHJnYjpbMjQyLDE0OSwxMDNdfSx7aW5kZXg6Ljg4LHJnYjpbMjQ5LDE5MywxMzVdfSx7aW5kZXg6MSxyZ2I6WzI1NCwyMzcsMTc2XX1dLGNobG9yb3BoeWxsOlt7aW5kZXg6MCxyZ2I6WzE4LDM2LDIwXX0se2luZGV4Oi4xMyxyZ2I6WzI1LDYzLDQxXX0se2luZGV4Oi4yNSxyZ2I6WzI0LDkxLDU5XX0se2luZGV4Oi4zOCxyZ2I6WzEzLDExOSw3Ml19LHtpbmRleDouNSxyZ2I6WzE4LDE0OCw4MF19LHtpbmRleDouNjMscmdiOls4MCwxNzMsODldfSx7aW5kZXg6Ljc1LHJnYjpbMTMyLDE5NiwxMjJdfSx7aW5kZXg6Ljg4LHJnYjpbMTc1LDIyMSwxNjJdfSx7aW5kZXg6MSxyZ2I6WzIxNSwyNDksMjA4XX1dLGRlbnNpdHk6W3tpbmRleDowLHJnYjpbNTQsMTQsMzZdfSx7aW5kZXg6LjEzLHJnYjpbODksMjMsODBdfSx7aW5kZXg6LjI1LHJnYjpbMTEwLDQ1LDEzMl19LHtpbmRleDouMzgscmdiOlsxMjAsNzcsMTc4XX0se2luZGV4Oi41LHJnYjpbMTIwLDExMywyMTNdfSx7aW5kZXg6LjYzLHJnYjpbMTE1LDE1MSwyMjhdfSx7aW5kZXg6Ljc1LHJnYjpbMTM0LDE4NSwyMjddfSx7aW5kZXg6Ljg4LHJnYjpbMTc3LDIxNCwyMjddfSx7aW5kZXg6MSxyZ2I6WzIzMCwyNDEsMjQxXX1dLFwiZnJlZXN1cmZhY2UtYmx1ZVwiOlt7aW5kZXg6MCxyZ2I6WzMwLDQsMTEwXX0se2luZGV4Oi4xMyxyZ2I6WzQ3LDE0LDE3Nl19LHtpbmRleDouMjUscmdiOls0MSw0NSwyMzZdfSx7aW5kZXg6LjM4LHJnYjpbMjUsOTksMjEyXX0se2luZGV4Oi41LHJnYjpbNjgsMTMxLDIwMF19LHtpbmRleDouNjMscmdiOlsxMTQsMTU2LDE5N119LHtpbmRleDouNzUscmdiOlsxNTcsMTgxLDIwM119LHtpbmRleDouODgscmdiOlsyMDAsMjA4LDIxNl19LHtpbmRleDoxLHJnYjpbMjQxLDIzNywyMzZdfV0sXCJmcmVlc3VyZmFjZS1yZWRcIjpbe2luZGV4OjAscmdiOls2MCw5LDE4XX0se2luZGV4Oi4xMyxyZ2I6WzEwMCwxNywyN119LHtpbmRleDouMjUscmdiOlsxNDIsMjAsMjldfSx7aW5kZXg6LjM4LHJnYjpbMTc3LDQzLDI3XX0se2luZGV4Oi41LHJnYjpbMTkyLDg3LDYzXX0se2luZGV4Oi42MyxyZ2I6WzIwNSwxMjUsMTA1XX0se2luZGV4Oi43NSxyZ2I6WzIxNiwxNjIsMTQ4XX0se2luZGV4Oi44OCxyZ2I6WzIyNywxOTksMTkzXX0se2luZGV4OjEscmdiOlsyNDEsMjM3LDIzNl19XSxveHlnZW46W3tpbmRleDowLHJnYjpbNjQsNSw1XX0se2luZGV4Oi4xMyxyZ2I6WzEwNiw2LDE1XX0se2luZGV4Oi4yNSxyZ2I6WzE0NCwyNiw3XX0se2luZGV4Oi4zOCxyZ2I6WzE2OCw2NCwzXX0se2luZGV4Oi41LHJnYjpbMTg4LDEwMCw0XX0se2luZGV4Oi42MyxyZ2I6WzIwNiwxMzYsMTFdfSx7aW5kZXg6Ljc1LHJnYjpbMjIwLDE3NCwyNV19LHtpbmRleDouODgscmdiOlsyMzEsMjE1LDQ0XX0se2luZGV4OjEscmdiOlsyNDgsMjU0LDEwNV19XSxwYXI6W3tpbmRleDowLHJnYjpbNTEsMjAsMjRdfSx7aW5kZXg6LjEzLHJnYjpbOTAsMzIsMzVdfSx7aW5kZXg6LjI1LHJnYjpbMTI5LDQ0LDM0XX0se2luZGV4Oi4zOCxyZ2I6WzE1OSw2OCwyNV19LHtpbmRleDouNSxyZ2I6WzE4Miw5OSwxOV19LHtpbmRleDouNjMscmdiOlsxOTksMTM0LDIyXX0se2luZGV4Oi43NSxyZ2I6WzIxMiwxNzEsMzVdfSx7aW5kZXg6Ljg4LHJnYjpbMjIxLDIxMCw1NF19LHtpbmRleDoxLHJnYjpbMjI1LDI1Myw3NV19XSxwaGFzZTpbe2luZGV4OjAscmdiOlsxNDUsMTA1LDE4XX0se2luZGV4Oi4xMyxyZ2I6WzE4NCw3MSwzOF19LHtpbmRleDouMjUscmdiOlsxODYsNTgsMTE1XX0se2luZGV4Oi4zOCxyZ2I6WzE2MCw3MSwxODVdfSx7aW5kZXg6LjUscmdiOlsxMTAsOTcsMjE4XX0se2luZGV4Oi42MyxyZ2I6WzUwLDEyMywxNjRdfSx7aW5kZXg6Ljc1LHJnYjpbMzEsMTMxLDExMF19LHtpbmRleDouODgscmdiOls3NywxMjksMzRdfSx7aW5kZXg6MSxyZ2I6WzE0NSwxMDUsMThdfV0sc2FsaW5pdHk6W3tpbmRleDowLHJnYjpbNDIsMjQsMTA4XX0se2luZGV4Oi4xMyxyZ2I6WzMzLDUwLDE2Ml19LHtpbmRleDouMjUscmdiOlsxNSw5MCwxNDVdfSx7aW5kZXg6LjM4LHJnYjpbNDAsMTE4LDEzN119LHtpbmRleDouNSxyZ2I6WzU5LDE0NiwxMzVdfSx7aW5kZXg6LjYzLHJnYjpbNzksMTc1LDEyNl19LHtpbmRleDouNzUscmdiOlsxMjAsMjAzLDEwNF19LHtpbmRleDouODgscmdiOlsxOTMsMjIxLDEwMF19LHtpbmRleDoxLHJnYjpbMjUzLDIzOSwxNTRdfV0sdGVtcGVyYXR1cmU6W3tpbmRleDowLHJnYjpbNCwzNSw1MV19LHtpbmRleDouMTMscmdiOlsyMyw1MSwxMjJdfSx7aW5kZXg6LjI1LHJnYjpbODUsNTksMTU3XX0se2luZGV4Oi4zOCxyZ2I6WzEyOSw3OSwxNDNdfSx7aW5kZXg6LjUscmdiOlsxNzUsOTUsMTMwXX0se2luZGV4Oi42MyxyZ2I6WzIyMiwxMTIsMTAxXX0se2luZGV4Oi43NSxyZ2I6WzI0OSwxNDYsNjZdfSx7aW5kZXg6Ljg4LHJnYjpbMjQ5LDE5Niw2NV19LHtpbmRleDoxLHJnYjpbMjMyLDI1MCw5MV19XSx0dXJiaWRpdHk6W3tpbmRleDowLHJnYjpbMzQsMzEsMjddfSx7aW5kZXg6LjEzLHJnYjpbNjUsNTAsNDFdfSx7aW5kZXg6LjI1LHJnYjpbOTgsNjksNTJdfSx7aW5kZXg6LjM4LHJnYjpbMTMxLDg5LDU3XX0se2luZGV4Oi41LHJnYjpbMTYxLDExMiw1OV19LHtpbmRleDouNjMscmdiOlsxODUsMTQwLDY2XX0se2luZGV4Oi43NSxyZ2I6WzIwMiwxNzQsODhdfSx7aW5kZXg6Ljg4LHJnYjpbMjE2LDIwOSwxMjZdfSx7aW5kZXg6MSxyZ2I6WzIzMywyNDYsMTcxXX1dLFwidmVsb2NpdHktYmx1ZVwiOlt7aW5kZXg6MCxyZ2I6WzE3LDMyLDY0XX0se2luZGV4Oi4xMyxyZ2I6WzM1LDUyLDExNl19LHtpbmRleDouMjUscmdiOlsyOSw4MSwxNTZdfSx7aW5kZXg6LjM4LHJnYjpbMzEsMTEzLDE2Ml19LHtpbmRleDouNSxyZ2I6WzUwLDE0NCwxNjldfSx7aW5kZXg6LjYzLHJnYjpbODcsMTczLDE3Nl19LHtpbmRleDouNzUscmdiOlsxNDksMTk2LDE4OV19LHtpbmRleDouODgscmdiOlsyMDMsMjIxLDIxMV19LHtpbmRleDoxLHJnYjpbMjU0LDI1MSwyMzBdfV0sXCJ2ZWxvY2l0eS1ncmVlblwiOlt7aW5kZXg6MCxyZ2I6WzIzLDM1LDE5XX0se2luZGV4Oi4xMyxyZ2I6WzI0LDY0LDM4XX0se2luZGV4Oi4yNSxyZ2I6WzExLDk1LDQ1XX0se2luZGV4Oi4zOCxyZ2I6WzM5LDEyMywzNV19LHtpbmRleDouNSxyZ2I6Wzk1LDE0NiwxMl19LHtpbmRleDouNjMscmdiOlsxNTIsMTY1LDE4XX0se2luZGV4Oi43NSxyZ2I6WzIwMSwxODYsNjldfSx7aW5kZXg6Ljg4LHJnYjpbMjMzLDIxNiwxMzddfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTMsMjA1XX1dLGN1YmVoZWxpeDpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMDcscmdiOlsyMiw1LDU5XX0se2luZGV4Oi4xMyxyZ2I6WzYwLDQsMTA1XX0se2luZGV4Oi4yLHJnYjpbMTA5LDEsMTM1XX0se2luZGV4Oi4yNyxyZ2I6WzE2MSwwLDE0N119LHtpbmRleDouMzMscmdiOlsyMTAsMiwxNDJdfSx7aW5kZXg6LjQscmdiOlsyNTEsMTEsMTIzXX0se2luZGV4Oi40NyxyZ2I6WzI1NSwyOSw5N119LHtpbmRleDouNTMscmdiOlsyNTUsNTQsNjldfSx7aW5kZXg6LjYscmdiOlsyNTUsODUsNDZdfSx7aW5kZXg6LjY3LHJnYjpbMjU1LDEyMCwzNF19LHtpbmRleDouNzMscmdiOlsyNTUsMTU3LDM3XX0se2luZGV4Oi44LHJnYjpbMjQxLDE5MSw1N119LHtpbmRleDouODcscmdiOlsyMjQsMjIwLDkzXX0se2luZGV4Oi45MyxyZ2I6WzIxOCwyNDEsMTQyXX0se2luZGV4OjEscmdiOlsyMjcsMjUzLDE5OF19XX19LHt9XSwxMTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9jb2xvclNjYWxlXCIpLGk9dChcImxlcnBcIik7ZnVuY3Rpb24gYSh0KXtyZXR1cm5bdFswXS8yNTUsdFsxXS8yNTUsdFsyXS8yNTUsdFszXV19ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGUscj1cIiNcIixuPTA7bjwzOysrbilyKz0oXCIwMFwiKyhlPShlPXRbbl0pLnRvU3RyaW5nKDE2KSkpLnN1YnN0cihlLmxlbmd0aCk7cmV0dXJuIHJ9ZnVuY3Rpb24gcyh0KXtyZXR1cm5cInJnYmEoXCIrdC5qb2luKFwiLFwiKStcIilcIn1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixsLGMsdSxoLGYscCxkLGc7dHx8KHQ9e30pO3A9KHQubnNoYWRlc3x8NzIpLTEsZj10LmZvcm1hdHx8XCJoZXhcIiwoaD10LmNvbG9ybWFwKXx8KGg9XCJqZXRcIik7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGgpe2lmKGg9aC50b0xvd2VyQ2FzZSgpLCFuW2hdKXRocm93IEVycm9yKGgrXCIgbm90IGEgc3VwcG9ydGVkIGNvbG9yc2NhbGVcIik7dT1uW2hdfWVsc2V7aWYoIUFycmF5LmlzQXJyYXkoaCkpdGhyb3cgRXJyb3IoXCJ1bnN1cHBvcnRlZCBjb2xvcm1hcCBvcHRpb25cIixoKTt1PWguc2xpY2UoKX1pZih1Lmxlbmd0aD5wKzEpdGhyb3cgbmV3IEVycm9yKGgrXCIgbWFwIHJlcXVpcmVzIG5zaGFkZXMgdG8gYmUgYXQgbGVhc3Qgc2l6ZSBcIit1Lmxlbmd0aCk7ZD1BcnJheS5pc0FycmF5KHQuYWxwaGEpPzIhPT10LmFscGhhLmxlbmd0aD9bMSwxXTp0LmFscGhhLnNsaWNlKCk6XCJudW1iZXJcIj09dHlwZW9mIHQuYWxwaGE/W3QuYWxwaGEsdC5hbHBoYV06WzEsMV07ZT11Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0LmluZGV4KnApfSksZFswXT1NYXRoLm1pbihNYXRoLm1heChkWzBdLDApLDEpLGRbMV09TWF0aC5taW4oTWF0aC5tYXgoZFsxXSwwKSwxKTt2YXIgdj11Lm1hcChmdW5jdGlvbih0LGUpe3ZhciByPXVbZV0uaW5kZXgsbj11W2VdLnJnYi5zbGljZSgpO3JldHVybiA0PT09bi5sZW5ndGgmJm5bM10+PTAmJm5bM108PTE/bjooblszXT1kWzBdKyhkWzFdLWRbMF0pKnIsbil9KSxtPVtdO2ZvcihnPTA7ZzxlLmxlbmd0aC0xOysrZyl7Yz1lW2crMV0tZVtnXSxyPXZbZ10sbD12W2crMV07Zm9yKHZhciB5PTA7eTxjO3krKyl7dmFyIHg9eS9jO20ucHVzaChbTWF0aC5yb3VuZChpKHJbMF0sbFswXSx4KSksTWF0aC5yb3VuZChpKHJbMV0sbFsxXSx4KSksTWF0aC5yb3VuZChpKHJbMl0sbFsyXSx4KSksaShyWzNdLGxbM10seCldKX19bS5wdXNoKHVbdS5sZW5ndGgtMV0ucmdiLmNvbmNhdChkWzFdKSksXCJoZXhcIj09PWY/bT1tLm1hcChvKTpcInJnYmFTdHJpbmdcIj09PWY/bT1tLm1hcChzKTpcImZsb2F0XCI9PT1mJiYobT1tLm1hcChhKSk7cmV0dXJuIG19fSx7XCIuL2NvbG9yU2NhbGVcIjoxMTYsbGVycDo0MTh9XSwxMTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89bihlLHIsYSk7aWYoMD09PW8pe3ZhciBzPWkobih0LGUscikpLGM9aShuKHQsZSxhKSk7aWYocz09PWMpe2lmKDA9PT1zKXt2YXIgdT1sKHQsZSxyKSxoPWwodCxlLGEpO3JldHVybiB1PT09aD8wOnU/MTotMX1yZXR1cm4gMH1yZXR1cm4gMD09PWM/cz4wPy0xOmwodCxlLGEpPy0xOjE6MD09PXM/Yz4wPzE6bCh0LGUscik/MTotMTppKGMtcyl9dmFyIGY9bih0LGUscik7aWYoZj4wKXJldHVybiBvPjAmJm4odCxlLGEpPjA/MTotMTtpZihmPDApcmV0dXJuIG8+MHx8bih0LGUsYSk+MD8xOi0xO3ZhciBwPW4odCxlLGEpO3JldHVybiBwPjA/MTpsKHQsZSxyKT8xOi0xfTt2YXIgbj10KFwicm9idXN0LW9yaWVudGF0aW9uXCIpLGk9dChcInNpZ251bVwiKSxhPXQoXCJ0d28tc3VtXCIpLG89dChcInJvYnVzdC1wcm9kdWN0XCIpLHM9dChcInJvYnVzdC1zdW1cIik7ZnVuY3Rpb24gbCh0LGUscil7dmFyIG49YSh0WzBdLC1lWzBdKSxpPWEodFsxXSwtZVsxXSksbD1hKHJbMF0sLWVbMF0pLGM9YShyWzFdLC1lWzFdKSx1PXMobyhuLGwpLG8oaSxjKSk7cmV0dXJuIHVbdS5sZW5ndGgtMV0+PTB9fSx7XCJyb2J1c3Qtb3JpZW50YXRpb25cIjo0OTUsXCJyb2J1c3QtcHJvZHVjdFwiOjQ5NixcInJvYnVzdC1zdW1cIjo1MDAsc2lnbnVtOjUwMSxcInR3by1zdW1cIjo1Mjl9XSwxMTk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lmxlbmd0aCxhPXQubGVuZ3RoLWUubGVuZ3RoO2lmKGEpcmV0dXJuIGE7c3dpdGNoKHIpe2Nhc2UgMDpyZXR1cm4gMDtjYXNlIDE6cmV0dXJuIHRbMF0tZVswXTtjYXNlIDI6cmV0dXJuIHRbMF0rdFsxXS1lWzBdLWVbMV18fG4odFswXSx0WzFdKS1uKGVbMF0sZVsxXSk7Y2FzZSAzOnZhciBvPXRbMF0rdFsxXSxzPWVbMF0rZVsxXTtpZihhPW8rdFsyXS0ocytlWzJdKSlyZXR1cm4gYTt2YXIgbD1uKHRbMF0sdFsxXSksYz1uKGVbMF0sZVsxXSk7cmV0dXJuIG4obCx0WzJdKS1uKGMsZVsyXSl8fG4obCt0WzJdLG8pLW4oYytlWzJdLHMpO2Nhc2UgNDp2YXIgdT10WzBdLGg9dFsxXSxmPXRbMl0scD10WzNdLGQ9ZVswXSxnPWVbMV0sdj1lWzJdLG09ZVszXTtyZXR1cm4gdStoK2YrcC0oZCtnK3YrbSl8fG4odSxoLGYscCktbihkLGcsdixtLGQpfHxuKHUraCx1K2YsdStwLGgrZixoK3AsZitwKS1uKGQrZyxkK3YsZCttLGcrdixnK20sdittKXx8bih1K2grZix1K2grcCx1K2YrcCxoK2YrcCktbihkK2crdixkK2crbSxkK3YrbSxnK3YrbSk7ZGVmYXVsdDpmb3IodmFyIHk9dC5zbGljZSgpLnNvcnQoaSkseD1lLnNsaWNlKCkuc29ydChpKSxiPTA7YjxyOysrYilpZihhPXlbYl0teFtiXSlyZXR1cm4gYTtyZXR1cm4gMH19O3ZhciBuPU1hdGgubWluO2Z1bmN0aW9uIGkodCxlKXtyZXR1cm4gdC1lfX0se31dLDEyMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJjb21wYXJlLWNlbGxcIiksaT10KFwiY2VsbC1vcmllbnRhdGlvblwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LGUpfHxpKHQpLWkoZSl9fSx7XCJjZWxsLW9yaWVudGF0aW9uXCI6MTAzLFwiY29tcGFyZS1jZWxsXCI6MTE5fV0sMTIxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vbGliL2NoMWRcIiksaT10KFwiLi9saWIvY2gyZFwiKSxhPXQoXCIuL2xpYi9jaG5kXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtpZigwPT09ZSlyZXR1cm5bXTtpZigxPT09ZSlyZXR1cm5bWzBdXTt2YXIgcj10WzBdLmxlbmd0aDtpZigwPT09cilyZXR1cm5bXTtpZigxPT09cilyZXR1cm4gbih0KTtpZigyPT09cilyZXR1cm4gaSh0KTtyZXR1cm4gYSh0LHIpfX0se1wiLi9saWIvY2gxZFwiOjEyMixcIi4vbGliL2NoMmRcIjoxMjMsXCIuL2xpYi9jaG5kXCI6MTI0fV0sMTIyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MCxuPTE7bjx0Lmxlbmd0aDsrK24pdFtuXVswXTx0W2VdWzBdJiYoZT1uKSx0W25dWzBdPnRbcl1bMF0mJihyPW4pO3JldHVybiBlPHI/W1tlXSxbcl1dOmU+cj9bW3JdLFtlXV06W1tlXV19fSx7fV0sMTIzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCkscj1lLmxlbmd0aDtpZihyPD0yKXJldHVybltdO2Zvcih2YXIgaT1uZXcgQXJyYXkociksYT1lW3ItMV0sbz0wO288cjsrK28pe3ZhciBzPWVbb107aVtvXT1bYSxzXSxhPXN9cmV0dXJuIGl9O3ZhciBuPXQoXCJtb25vdG9uZS1jb252ZXgtaHVsbC0yZFwiKX0se1wibW9ub3RvbmUtY29udmV4LWh1bGwtMmRcIjo0Mjd9XSwxMjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0cnl7cmV0dXJuIG4odCwhMCl9Y2F0Y2gocyl7dmFyIHI9aSh0KTtpZihyLmxlbmd0aDw9ZSlyZXR1cm5bXTt2YXIgYT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxlLmxlbmd0aDsrK2kpbltpXT10W2VbaV1dO2Zvcih2YXIgYT1lLmxlbmd0aCxpPTA7aTxyOysraSllLmluZGV4T2YoaSk8MCYmKG5bYSsrXT10W2ldKTtyZXR1cm4gbn0odCxyKSxvPW4oYSwhMCk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49ZS5sZW5ndGgsaT0wO2k8cjsrK2kpZm9yKHZhciBhPXRbaV0sbz0wO288YS5sZW5ndGg7KytvKXt2YXIgcz1hW29dO2lmKHM8bilhW29dPWVbc107ZWxzZXtzLT1uO2Zvcih2YXIgbD0wO2w8bjsrK2wpcz49ZVtsXSYmKHMrPTEpO2Fbb109c319cmV0dXJuIHR9KG8scil9fTt2YXIgbj10KFwiaW5jcmVtZW50YWwtY29udmV4LWh1bGxcIiksaT10KFwiYWZmaW5lLWh1bGxcIil9LHtcImFmZmluZS1odWxsXCI6NTMsXCJpbmNyZW1lbnRhbC1jb252ZXgtaHVsbFwiOjQwNn1dLDEyNTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17QUZHOlwiYWZnaGFuXCIsQUxBOlwiXFxcXGJcXFxcd2xhbmRcIixBTEI6XCJhbGJhbmlhXCIsRFpBOlwiYWxnZXJpYVwiLEFTTTpcIl4oPz0uKmFtZXJpYykuKnNhbW9hXCIsQU5EOlwiYW5kb3JyYVwiLEFHTzpcImFuZ29sYVwiLEFJQTpcImFuZ3VpbGw/YVwiLEFUQTpcImFudGFyY3RpY2FcIixBVEc6XCJhbnRpZ3VhXCIsQVJHOlwiYXJnZW50aW5cIixBUk06XCJhcm1lbmlhXCIsQUJXOlwiXig/IS4qYm9uYWlyZSkuKlxcXFxiYXJ1YmFcIixBVVM6XCJhdXN0cmFsaWFcIixBVVQ6XCJeKD8hLipodW5nYXJ5KS4qYXVzdHJpYXxcXFxcYmF1c3RyaS4qXFxcXGJlbXBcIixBWkU6XCJhemVyYmFpamFuXCIsQkhTOlwiYmFoYW1hc1wiLEJIUjpcImJhaHJhaW5cIixCR0Q6XCJiYW5nbGFkZXNofF4oPz0uKmVhc3QpLipwYWtpP3N0YW5cIixCUkI6XCJiYXJiYWRvc1wiLEJMUjpcImJlbGFydXN8YnllbG9cIixCRUw6XCJeKD8hLipsdXhlbSkuKmJlbGdpdW1cIixCTFo6XCJiZWxpemV8Xig/PS4qYnJpdGlzaCkuKmhvbmR1cmFzXCIsQkVOOlwiYmVuaW58ZGFob21lXCIsQk1VOlwiYmVybXVkYVwiLEJUTjpcImJodXRhblwiLEJPTDpcImJvbGl2aWFcIixCRVM6XCJeKD89Lipib25haXJlKS4qZXVzdGF0aXVzfF4oPz0uKmNhcmliKS4qbmV0aGVybGFuZHN8XFxcXGJiZXMuP2lzbGFuZHNcIixCSUg6XCJoZXJ6ZWdvdmluYXxib3NuaWFcIixCV0E6XCJib3Rzd2FuYXxiZWNodWFuYVwiLEJWVDpcImJvdXZldFwiLEJSQTpcImJyYXppbFwiLElPVDpcImJyaXRpc2guP2luZGlhbi4/b2NlYW5cIixCUk46XCJicnVuZWlcIixCR1I6XCJidWxnYXJpYVwiLEJGQTpcImJ1cmtpbmF8XFxcXGJmYXNvfHVwcGVyLj92b2x0YVwiLEJESTpcImJ1cnVuZGlcIixDUFY6XCJ2ZXJkZVwiLEtITTpcImNhbWJvZGlhfGthbXB1Y2hlYXxraG1lclwiLENNUjpcImNhbWVyb29uXCIsQ0FOOlwiY2FuYWRhXCIsQ1lNOlwiY2F5bWFuXCIsQ0FGOlwiXFxcXGJjZW50cmFsLmFmcmljYW4ucmVwdWJsaWNcIixUQ0Q6XCJcXFxcYmNoYWRcIixDSEw6XCJcXFxcYmNoaWxlXCIsQ0hOOlwiXig/IS4qXFxcXGJtYWMpKD8hLipcXFxcYmhvbmcpKD8hLipcXFxcYnRhaSkoPyEuKlxcXFxicmVwKS4qY2hpbmF8Xig/PS4qcGVvKSg/PS4qcmVwKS4qY2hpbmFcIixDWFI6XCJjaHJpc3RtYXNcIixDQ0s6XCJcXFxcYmNvY29zfGtlZWxpbmdcIixDT0w6XCJjb2xvbWJpYVwiLENPTTpcImNvbW9yb1wiLENPRzpcIl4oPyEuKlxcXFxiZGVtKSg/IS4qXFxcXGJkW1xcXFwuXT9yKSg/IS4qa2luc2hhc2EpKD8hLip6YWlyZSkoPyEuKmJlbGcpKD8hLipsLm9wb2xkdmlsbGUpKD8hLipmcmVlKS4qXFxcXGJjb25nb1wiLENPSzpcIlxcXFxiY29va1wiLENSSTpcImNvc3RhLj9yaWNhXCIsQ0lWOlwiaXZvaXJlfGl2b3J5XCIsSFJWOlwiY3JvYXRpYVwiLENVQjpcIlxcXFxiY3ViYVwiLENVVzpcIl4oPyEuKmJvbmFpcmUpLipcXFxcYmN1cmEoY3xcXHhlNylhb1wiLENZUDpcImN5cHJ1c1wiLENTSzpcImN6ZWNob3Nsb3Zha2lhXCIsQ1pFOlwiXig/PS4qcmVwKS4qY3plY2h8Y3plY2hpYXxib2hlbWlhXCIsQ09EOlwiXFxcXGJkZW0uKmNvbmdvfGNvbmdvLipcXFxcYmRlbXxjb25nby4qXFxcXGJkW1xcXFwuXT9yfFxcXFxiZFtcXFxcLl0/ci4qY29uZ298YmVsZ2lhbi4/Y29uZ298Y29uZ28uP2ZyZWUuP3N0YXRlfGtpbnNoYXNhfHphaXJlfGwub3BvbGR2aWxsZXxkcmN8ZHJvY3xyZGNcIixETks6XCJkZW5tYXJrXCIsREpJOlwiZGppYm91dGlcIixETUE6XCJkb21pbmljYSg/IW4pXCIsRE9NOlwiZG9taW5pY2FuLnJlcFwiLEVDVTpcImVjdWFkb3JcIixFR1k6XCJlZ3lwdFwiLFNMVjpcImVsLj9zYWx2YWRvclwiLEdOUTpcImd1aW5lLiplcXxlcS4qZ3VpbmV8Xig/PS4qc3BhbikuKmd1aW5lYVwiLEVSSTpcImVyaXRyZWFcIixFU1Q6XCJlc3RvbmlhXCIsRVRIOlwiZXRoaW9waWF8YWJ5c3NpbmlhXCIsRkxLOlwiZmFsa2xhbmR8bWFsdmluYXNcIixGUk86XCJmYXJvZXxmYWVyb2VcIixGSkk6XCJmaWppXCIsRklOOlwiZmlubGFuZFwiLEZSQTpcIl4oPyEuKlxcXFxiZGVwKSg/IS4qbWFydGluaXF1ZSkuKmZyYW5jZXxmcmVuY2guP3JlcHVibGljfFxcXFxiZ2F1bFwiLEdVRjpcIl4oPz0uKmZyZW5jaCkuKmd1aWFuYVwiLFBZRjpcImZyZW5jaC4/cG9seW5lc2lhfHRhaGl0aVwiLEFURjpcImZyZW5jaC4/c291dGhlcm5cIixHQUI6XCJnYWJvblwiLEdNQjpcImdhbWJpYVwiLEdFTzpcIl4oPyEuKnNvdXRoKS4qZ2VvcmdpYVwiLEREUjpcImdlcm1hbi4/ZGVtb2NyYXRpYy4/cmVwdWJsaWN8ZGVtb2NyYXRpYy4/cmVwdWJsaWMuKmdlcm1hbnl8ZWFzdC5nZXJtYW55XCIsREVVOlwiXig/IS4qZWFzdCkuKmdlcm1hbnl8Xig/PS4qXFxcXGJmZWQuKlxcXFxicmVwKS4qZ2VybWFuXCIsR0hBOlwiZ2hhbmF8Z29sZC4/Y29hc3RcIixHSUI6XCJnaWJyYWx0YXJcIixHUkM6XCJncmVlY2V8aGVsbGVuaWN8aGVsbGFzXCIsR1JMOlwiZ3JlZW5sYW5kXCIsR1JEOlwiZ3JlbmFkYVwiLEdMUDpcImd1YWRlbG91cGVcIixHVU06XCJcXFxcYmd1YW1cIixHVE06XCJndWF0ZW1hbGFcIixHR1k6XCJndWVybnNleVwiLEdJTjpcIl4oPyEuKmVxKSg/IS4qc3BhbikoPyEuKmJpc3NhdSkoPyEuKnBvcnR1KSg/IS4qbmV3KS4qZ3VpbmVhXCIsR05COlwiYmlzc2F1fF4oPz0uKnBvcnR1KS4qZ3VpbmVhXCIsR1VZOlwiZ3V5YW5hfGJyaXRpc2guP2d1aWFuYVwiLEhUSTpcImhhaXRpXCIsSE1EOlwiaGVhcmQuKm1jZG9uYWxkXCIsVkFUOlwiaG9seS4/c2VlfHZhdGljYW58cGFwYWwuP3N0XCIsSE5EOlwiXig/IS4qYnJpdCkuKmhvbmR1cmFzXCIsSEtHOlwiaG9uZy4/a29uZ1wiLEhVTjpcIl4oPyEuKmF1c3RyKS4qaHVuZ2FyeVwiLElTTDpcImljZWxhbmRcIixJTkQ6XCJpbmRpYSg/IS4qb2NlYSlcIixJRE46XCJpbmRvbmVzaWFcIixJUk46XCJcXFxcYmlyYW58cGVyc2lhXCIsSVJROlwiXFxcXGJpcmFxfG1lc29wb3RhbWlhXCIsSVJMOlwiKF5pcmVsYW5kKXwoXnJlcHVibGljLippcmVsYW5kKVwiLElNTjpcIl4oPz0uKmlzbGUpLipcXFxcYm1hblwiLElTUjpcImlzcmFlbFwiLElUQTpcIml0YWx5XCIsSkFNOlwiamFtYWljYVwiLEpQTjpcImphcGFuXCIsSkVZOlwiamVyc2V5XCIsSk9SOlwiam9yZGFuXCIsS0FaOlwia2F6YWtcIixLRU46XCJrZW55YXxicml0aXNoLj9lYXN0Lj9hZnJpY2F8ZWFzdC4/YWZyaWNhLj9wcm90XCIsS0lSOlwia2lyaWJhdGlcIixQUks6XCJeKD89LipkZW1vY3JhdHxwZW9wbGV8bm9ydGh8ZC4qcC4qLnIpLipcXFxcYmtvcmVhfGRwcmt8a29yZWEuKihkLipwLipyKVwiLEtXVDpcImt1d2FpdFwiLEtHWjpcImt5cmd5enxraXJnaGl6XCIsTEFPOlwiXFxcXGJsYW9zP1xcXFxiXCIsTFZBOlwibGF0dmlhXCIsTEJOOlwibGViYW5vblwiLExTTzpcImxlc290aG98YmFzdXRvXCIsTEJSOlwibGliZXJpYVwiLExCWTpcImxpYnlhXCIsTElFOlwibGllY2h0ZW5zdGVpblwiLExUVTpcImxpdGh1YW5pYVwiLExVWDpcIl4oPyEuKmJlbGcpLipsdXhlbVwiLE1BQzpcIm1hY2Eob3x1KVwiLE1ERzpcIm1hZGFnYXNjYXJ8bWFsYWdhc3lcIixNV0k6XCJtYWxhd2l8bnlhc2FcIixNWVM6XCJtYWxheXNpYVwiLE1EVjpcIm1hbGRpdmVcIixNTEk6XCJcXFxcYm1hbGlcXFxcYlwiLE1MVDpcIlxcXFxibWFsdGFcIixNSEw6XCJtYXJzaGFsbFwiLE1UUTpcIm1hcnRpbmlxdWVcIixNUlQ6XCJtYXVyaXRhbmlhXCIsTVVTOlwibWF1cml0aXVzXCIsTVlUOlwiXFxcXGJtYXlvdHRlXCIsTUVYOlwiXFxcXGJtZXhpY1wiLEZTTTpcImZlZC4qbWljcm9uZXNpYXxtaWNyb25lc2lhLipmZWRcIixNQ086XCJtb25hY29cIixNTkc6XCJtb25nb2xpYVwiLE1ORTpcIl4oPyEuKnNlcmJpYSkuKm1vbnRlbmVncm9cIixNU1I6XCJtb250c2VycmF0XCIsTUFSOlwibW9yb2Njb3xcXFxcYm1hcm9jXCIsTU9aOlwibW96YW1iaXF1ZVwiLE1NUjpcIm15YW5tYXJ8YnVybWFcIixOQU06XCJuYW1pYmlhXCIsTlJVOlwibmF1cnVcIixOUEw6XCJuZXBhbFwiLE5MRDpcIl4oPyEuKlxcXFxiYW50KSg/IS4qXFxcXGJjYXJpYikuKm5ldGhlcmxhbmRzXCIsQU5UOlwiXig/PS4qXFxcXGJhbnQpLioobmV0aGVyfGR1dGNoKVwiLE5DTDpcIm5ldy4/Y2FsZWRvbmlhXCIsTlpMOlwibmV3Lj96ZWFsYW5kXCIsTklDOlwibmljYXJhZ3VhXCIsTkVSOlwiXFxcXGJuaWdlcig/IWlhKVwiLE5HQTpcIm5pZ2VyaWFcIixOSVU6XCJuaXVlXCIsTkZLOlwibm9yZm9sa1wiLE1OUDpcIm1hcmlhbmFcIixOT1I6XCJub3J3YXlcIixPTU46XCJcXFxcYm9tYW58dHJ1Y2lhbFwiLFBBSzpcIl4oPyEuKmVhc3QpLipwYWtpP3N0YW5cIixQTFc6XCJwYWxhdVwiLFBTRTpcInBhbGVzdGlufFxcXFxiZ2F6YXx3ZXN0Lj9iYW5rXCIsUEFOOlwicGFuYW1hXCIsUE5HOlwicGFwdWF8bmV3Lj9ndWluZWFcIixQUlk6XCJwYXJhZ3VheVwiLFBFUjpcInBlcnVcIixQSEw6XCJwaGlsaXBwaW5lc1wiLFBDTjpcInBpdGNhaXJuXCIsUE9MOlwicG9sYW5kXCIsUFJUOlwicG9ydHVnYWxcIixQUkk6XCJwdWVydG8uP3JpY29cIixRQVQ6XCJxYXRhclwiLEtPUjpcIl4oPyEuKmQuKnAuKnIpKD8hLipkZW1vY3JhdCkoPyEuKnBlb3BsZSkoPyEuKm5vcnRoKS4qXFxcXGJrb3JlYSg/IS4qZC4qcC4qcilcIixNREE6XCJtb2xkb3Z8YihhfGUpc3NhcmFiaWFcIixSRVU6XCJyKGV8XFx4ZTkpdW5pb25cIixST1U6XCJyKG98dXxvdSltYW5pYVwiLFJVUzpcIlxcXFxicnVzc2lhfHNvdmlldC4/dW5pb258dVxcXFwuP3NcXFxcLj9zXFxcXC4/cnxzb2NpYWxpc3QuP3JlcHVibGljc1wiLFJXQTpcInJ3YW5kYVwiLEJMTTpcImJhcnRoKGV8XFx4ZTkpbGVteVwiLFNITjpcImhlbGVuYVwiLEtOQTpcImtpdHRzfFxcXFxibmV2aXNcIixMQ0E6XCJcXFxcYmx1Y2lhXCIsTUFGOlwiXig/PS4qY29sbGVjdGl2aXR5KS4qbWFydGlufF4oPz0uKmZyYW5jZSkuKm1hcnRpbig/IWlxdWUpfF4oPz0uKmZyZW5jaCkuKm1hcnRpbig/IWlxdWUpXCIsU1BNOlwibWlxdWVsb25cIixWQ1Q6XCJ2aW5jZW50XCIsV1NNOlwiXig/IS4qYW1lcikuKnNhbW9hXCIsU01SOlwic2FuLj9tYXJpbm9cIixTVFA6XCJcXFxcYnMoYXxcXHhlMylvLj90b20oZXxcXHhlOSlcIixTQVU6XCJcXFxcYnNhXFxcXHcqLj9hcmFiaWFcIixTRU46XCJzZW5lZ2FsXCIsU1JCOlwiXig/IS4qbW9udGUpLipzZXJiaWFcIixTWUM6XCJzZXljaGVsbFwiLFNMRTpcInNpZXJyYVwiLFNHUDpcInNpbmdhcG9yZVwiLFNYTTpcIl4oPyEuKm1hcnRpbikoPyEuKnNhYmEpLiptYWFydGVuXCIsU1ZLOlwiXig/IS4qY3plKS4qc2xvdmFrXCIsU1ZOOlwic2xvdmVuaWFcIixTTEI6XCJzb2xvbW9uXCIsU09NOlwic29tYWxpXCIsWkFGOlwic291dGguYWZyaWNhfHNcXFxcXFxcXC4uP2FmcmljYVwiLFNHUzpcInNvdXRoLj9nZW9yZ2lhfHNhbmR3aWNoXCIsU1NEOlwiXFxcXGJzXFxcXHcqLj9zdWRhblwiLEVTUDpcInNwYWluXCIsTEtBOlwic3JpLj9sYW5rYXxjZXlsb25cIixTRE46XCJeKD8hLipcXFxcYnMoPyF1KSkuKnN1ZGFuXCIsU1VSOlwic3VyaW5hbXxkdXRjaC4/Z3VpYW5hXCIsU0pNOlwic3ZhbGJhcmRcIixTV1o6XCJzd2F6aWxhbmRcIixTV0U6XCJzd2VkZW5cIixDSEU6XCJzd2l0enxzd2lzc1wiLFNZUjpcInN5cmlhXCIsVFdOOlwidGFpd2FufHRhaXBlaXxmb3Jtb3NhfF4oPyEuKnBlbykoPz0uKnJlcCkuKmNoaW5hXCIsVEpLOlwidGFqaWtcIixUSEE6XCJ0aGFpbGFuZHxcXFxcYnNpYW1cIixNS0Q6XCJtYWNlZG9uaWF8Znlyb21cIixUTFM6XCJeKD89LipsZXN0ZSkuKnRpbW9yfF4oPz0uKmVhc3QpLip0aW1vclwiLFRHTzpcInRvZ29cIixUS0w6XCJ0b2tlbGF1XCIsVE9OOlwidG9uZ2FcIixUVE86XCJ0cmluaWRhZHx0b2JhZ29cIixUVU46XCJ0dW5pc2lhXCIsVFVSOlwidHVya2V5XCIsVEtNOlwidHVya21lblwiLFRDQTpcInR1cmtzXCIsVFVWOlwidHV2YWx1XCIsVUdBOlwidWdhbmRhXCIsVUtSOlwidWtyYWluXCIsQVJFOlwiZW1pcmF0ZXN8XnVcXFxcLj9hXFxcXC4/ZVxcXFwuPyR8dW5pdGVkLj9hcmFiLj9lbVwiLEdCUjpcInVuaXRlZC4/a2luZ2RvbXxicml0YWlufF51XFxcXC4/a1xcXFwuPyRcIixUWkE6XCJ0YW56YW5pYVwiLFVTQTpcInVuaXRlZC4/c3RhdGVzXFxcXGIoPyEuKmlzbGFuZHMpfFxcXFxidVxcXFwuP3NcXFxcLj9hXFxcXC4/XFxcXGJ8XlxcXFxzKnVcXFxcLj9zXFxcXC4/XFxcXGIoPyEuKmlzbGFuZHMpXCIsVU1JOlwibWlub3IuP291dGx5aW5nLj9pc1wiLFVSWTpcInVydWd1YXlcIixVWkI6XCJ1emJla1wiLFZVVDpcInZhbnVhdHV8bmV3Lj9oZWJyaWRlc1wiLFZFTjpcInZlbmV6dWVsYVwiLFZOTTpcIl4oPyEuKnJlcHVibGljKS4qdmlldC4/bmFtfF4oPz0uKnNvY2lhbGlzdCkuKnZpZXQuP25hbVwiLFZHQjpcIl4oPz0uKlxcXFxidVxcXFwuP1xcXFxzP2spLip2aXJnaW58Xig/PS4qYnJpdCkuKnZpcmdpbnxeKD89LipraW5nZG9tKS4qdmlyZ2luXCIsVklSOlwiXig/PS4qXFxcXGJ1XFxcXC4/XFxcXHM/cykuKnZpcmdpbnxeKD89LipzdGF0ZXMpLip2aXJnaW5cIixXTEY6XCJmdXR1bmF8d2FsbGlzXCIsRVNIOlwid2VzdGVybi5zYWhhcmFcIixZRU06XCJeKD8hLiphcmFiKSg/IS4qbm9ydGgpKD8hLipzYW5hKSg/IS4qcGVvKSg/IS4qZGVtKSg/IS4qc291dGgpKD8hLiphZGVuKSg/IS4qXFxcXGJwXFxcXC4/ZFxcXFwuP3IpLip5ZW1lblwiLFlNRDpcIl4oPz0uKnBlbykuKnllbWVufF4oPyEuKnJlcCkoPz0uKmRlbSkuKnllbWVufF4oPz0uKnNvdXRoKS4qeWVtZW58Xig/PS4qYWRlbikuKnllbWVufF4oPz0uKlxcXFxicFxcXFwuP2RcXFxcLj9yKS4qeWVtZW5cIixZVUc6XCJ5dWdvc2xhdmlhXCIsWk1COlwiemFtYmlhfG5vcnRoZXJuLj9yaG9kZXNpYVwiLEVBWjpcInphbnppYmFyXCIsWldFOlwiemltYmFid2V8Xig/IS4qbm9ydGhlcm4pLipyaG9kZXNpYVwifX0se31dLDEyNjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bXCJ4eC1zbWFsbFwiLFwieC1zbWFsbFwiLFwic21hbGxcIixcIm1lZGl1bVwiLFwibGFyZ2VcIixcIngtbGFyZ2VcIixcInh4LWxhcmdlXCIsXCJsYXJnZXJcIixcInNtYWxsZXJcIl19LHt9XSwxMjc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9W1wibm9ybWFsXCIsXCJjb25kZW5zZWRcIixcInNlbWktY29uZGVuc2VkXCIsXCJleHRyYS1jb25kZW5zZWRcIixcInVsdHJhLWNvbmRlbnNlZFwiLFwiZXhwYW5kZWRcIixcInNlbWktZXhwYW5kZWRcIixcImV4dHJhLWV4cGFuZGVkXCIsXCJ1bHRyYS1leHBhbmRlZFwiXX0se31dLDEyODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bXCJub3JtYWxcIixcIml0YWxpY1wiLFwib2JsaXF1ZVwiXX0se31dLDEyOTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bXCJub3JtYWxcIixcImJvbGRcIixcImJvbGRlclwiLFwibGlnaHRlclwiLFwiMTAwXCIsXCIyMDBcIixcIjMwMFwiLFwiNDAwXCIsXCI1MDBcIixcIjYwMFwiLFwiNzAwXCIsXCI4MDBcIixcIjkwMFwiXX0se31dLDEzMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17cGFyc2U6dChcIi4vcGFyc2VcIiksc3RyaW5naWZ5OnQoXCIuL3N0cmluZ2lmeVwiKX19LHtcIi4vcGFyc2VcIjoxMzIsXCIuL3N0cmluZ2lmeVwiOjEzM31dLDEzMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJjc3MtZm9udC1zaXplLWtleXdvcmRzXCIpO2UuZXhwb3J0cz17aXNTaXplOmZ1bmN0aW9uKHQpe3JldHVybi9eW1xcZFxcLl0vLnRlc3QodCl8fC0xIT09dC5pbmRleE9mKFwiL1wiKXx8LTEhPT1uLmluZGV4T2YodCl9fX0se1wiY3NzLWZvbnQtc2l6ZS1rZXl3b3Jkc1wiOjEyNn1dLDEzMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJ1bnF1b3RlXCIpLGk9dChcImNzcy1nbG9iYWwta2V5d29yZHNcIiksYT10KFwiY3NzLXN5c3RlbS1mb250LWtleXdvcmRzXCIpLG89dChcImNzcy1mb250LXdlaWdodC1rZXl3b3Jkc1wiKSxzPXQoXCJjc3MtZm9udC1zdHlsZS1rZXl3b3Jkc1wiKSxsPXQoXCJjc3MtZm9udC1zdHJldGNoLWtleXdvcmRzXCIpLGM9dChcInN0cmluZy1zcGxpdC1ieVwiKSx1PXQoXCIuL2xpYi91dGlsXCIpLmlzU2l6ZTtlLmV4cG9ydHM9Zjt2YXIgaD1mLmNhY2hlPXt9O2Z1bmN0aW9uIGYodCl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKFwiRm9udCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLlwiKTtpZihoW3RdKXJldHVybiBoW3RdO2lmKFwiXCI9PT10KXRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBwYXJzZSBhbiBlbXB0eSBzdHJpbmcuXCIpO2lmKC0xIT09YS5pbmRleE9mKHQpKXJldHVybiBoW3RdPXtzeXN0ZW06dH07Zm9yKHZhciBlLHI9e3N0eWxlOlwibm9ybWFsXCIsdmFyaWFudDpcIm5vcm1hbFwiLHdlaWdodDpcIm5vcm1hbFwiLHN0cmV0Y2g6XCJub3JtYWxcIixsaW5lSGVpZ2h0Olwibm9ybWFsXCIsc2l6ZTpcIjFyZW1cIixmYW1pbHk6W1wic2VyaWZcIl19LGY9Yyh0LC9cXHMrLyk7ZT1mLnNoaWZ0KCk7KXtpZigtMSE9PWkuaW5kZXhPZihlKSlyZXR1cm5bXCJzdHlsZVwiLFwidmFyaWFudFwiLFwid2VpZ2h0XCIsXCJzdHJldGNoXCJdLmZvckVhY2goZnVuY3Rpb24odCl7clt0XT1lfSksaFt0XT1yO2lmKC0xPT09cy5pbmRleE9mKGUpKWlmKFwibm9ybWFsXCIhPT1lJiZcInNtYWxsLWNhcHNcIiE9PWUpaWYoLTE9PT1sLmluZGV4T2YoZSkpe2lmKC0xPT09by5pbmRleE9mKGUpKXtpZih1KGUpKXt2YXIgZD1jKGUsXCIvXCIpO2lmKHIuc2l6ZT1kWzBdLG51bGwhPWRbMV0/ci5saW5lSGVpZ2h0PXAoZFsxXSk6XCIvXCI9PT1mWzBdJiYoZi5zaGlmdCgpLHIubGluZUhlaWdodD1wKGYuc2hpZnQoKSkpLCFmLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIHJlcXVpcmVkIGZvbnQtZmFtaWx5LlwiKTtyZXR1cm4gci5mYW1pbHk9YyhmLmpvaW4oXCIgXCIpLC9cXHMqLFxccyovKS5tYXAobiksaFt0XT1yfXRocm93IG5ldyBFcnJvcihcIlVua25vd24gb3IgdW5zdXBwb3J0ZWQgZm9udCB0b2tlbjogXCIrZSl9ci53ZWlnaHQ9ZX1lbHNlIHIuc3RyZXRjaD1lO2Vsc2Ugci52YXJpYW50PWU7ZWxzZSByLnN0eWxlPWV9dGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyByZXF1aXJlZCBmb250LXNpemUuXCIpfWZ1bmN0aW9uIHAodCl7dmFyIGU9cGFyc2VGbG9hdCh0KTtyZXR1cm4gZS50b1N0cmluZygpPT09dD9lOnR9fSx7XCIuL2xpYi91dGlsXCI6MTMxLFwiY3NzLWZvbnQtc3RyZXRjaC1rZXl3b3Jkc1wiOjEyNyxcImNzcy1mb250LXN0eWxlLWtleXdvcmRzXCI6MTI4LFwiY3NzLWZvbnQtd2VpZ2h0LWtleXdvcmRzXCI6MTI5LFwiY3NzLWdsb2JhbC1rZXl3b3Jkc1wiOjEzNCxcImNzcy1zeXN0ZW0tZm9udC1rZXl3b3Jkc1wiOjEzNSxcInN0cmluZy1zcGxpdC1ieVwiOjUxNCx1bnF1b3RlOjUzM31dLDEzMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJwaWNrLWJ5LWFsaWFzXCIpLGk9dChcIi4vbGliL3V0aWxcIikuaXNTaXplLGE9Zyh0KFwiY3NzLWdsb2JhbC1rZXl3b3Jkc1wiKSksbz1nKHQoXCJjc3Mtc3lzdGVtLWZvbnQta2V5d29yZHNcIikpLHM9Zyh0KFwiY3NzLWZvbnQtd2VpZ2h0LWtleXdvcmRzXCIpKSxsPWcodChcImNzcy1mb250LXN0eWxlLWtleXdvcmRzXCIpKSxjPWcodChcImNzcy1mb250LXN0cmV0Y2gta2V5d29yZHNcIikpLHU9e25vcm1hbDoxLFwic21hbGwtY2Fwc1wiOjF9LGg9e3NlcmlmOjEsXCJzYW5zLXNlcmlmXCI6MSxtb25vc3BhY2U6MSxjdXJzaXZlOjEsZmFudGFzeToxLFwic3lzdGVtLXVpXCI6MX0sZj1cIjFyZW1cIixwPVwic2VyaWZcIjtmdW5jdGlvbiBkKHQsZSl7aWYodCYmIWVbdF0mJiFhW3RdKXRocm93IEVycm9yKFwiVW5rbm93biBrZXl3b3JkIGBcIit0K1wiYFwiKTtyZXR1cm4gdH1mdW5jdGlvbiBnKHQpe2Zvcih2YXIgZT17fSxyPTA7cjx0Lmxlbmd0aDtyKyspZVt0W3JdXT0xO3JldHVybiBlfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigodD1uKHQse3N0eWxlOlwic3R5bGUgZm9udHN0eWxlIGZvbnRTdHlsZSBmb250LXN0eWxlIHNsb3BlIGRpc3RpbmN0aW9uXCIsdmFyaWFudDpcInZhcmlhbnQgZm9udC12YXJpYW50IGZvbnRWYXJpYW50IGZvbnR2YXJpYW50IHZhciBjYXBpdGFsaXphdGlvblwiLHdlaWdodDpcIndlaWdodCB3IGZvbnQtd2VpZ2h0IGZvbnRXZWlnaHQgZm9udHdlaWdodFwiLHN0cmV0Y2g6XCJzdHJldGNoIGZvbnQtc3RyZXRjaCBmb250U3RyZXRjaCBmb250c3RyZXRjaCB3aWR0aFwiLHNpemU6XCJzaXplIHMgZm9udC1zaXplIGZvbnRTaXplIGZvbnRzaXplIGhlaWdodCBlbSBlbVNpemVcIixsaW5lSGVpZ2h0OlwibGggbGluZS1oZWlnaHQgbGluZUhlaWdodCBsaW5laGVpZ2h0IGxlYWRpbmdcIixmYW1pbHk6XCJmb250IGZhbWlseSBmb250RmFtaWx5IGZvbnQtZmFtaWx5IGZvbnRmYW1pbHkgdHlwZSB0eXBlZmFjZSBmYWNlXCIsc3lzdGVtOlwic3lzdGVtIHJlc2VydmVkIGRlZmF1bHQgZ2xvYmFsXCJ9KSkuc3lzdGVtKXJldHVybiB0LnN5c3RlbSYmZCh0LnN5c3RlbSxvKSx0LnN5c3RlbTtpZihkKHQuc3R5bGUsbCksZCh0LnZhcmlhbnQsdSksZCh0LndlaWdodCxzKSxkKHQuc3RyZXRjaCxjKSxudWxsPT10LnNpemUmJih0LnNpemU9ZiksXCJudW1iZXJcIj09dHlwZW9mIHQuc2l6ZSYmKHQuc2l6ZSs9XCJweFwiKSwhaSl0aHJvdyBFcnJvcihcIkJhZCBzaXplIHZhbHVlIGBcIit0LnNpemUrXCJgXCIpO3QuZmFtaWx5fHwodC5mYW1pbHk9cCksQXJyYXkuaXNBcnJheSh0LmZhbWlseSkmJih0LmZhbWlseS5sZW5ndGh8fCh0LmZhbWlseT1bcF0pLHQuZmFtaWx5PXQuZmFtaWx5Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gaFt0XT90OidcIicrdCsnXCInfSkuam9pbihcIiwgXCIpKTt2YXIgZT1bXTtyZXR1cm4gZS5wdXNoKHQuc3R5bGUpLHQudmFyaWFudCE9PXQuc3R5bGUmJmUucHVzaCh0LnZhcmlhbnQpLHQud2VpZ2h0IT09dC52YXJpYW50JiZ0LndlaWdodCE9PXQuc3R5bGUmJmUucHVzaCh0LndlaWdodCksdC5zdHJldGNoIT09dC53ZWlnaHQmJnQuc3RyZXRjaCE9PXQudmFyaWFudCYmdC5zdHJldGNoIT09dC5zdHlsZSYmZS5wdXNoKHQuc3RyZXRjaCksZS5wdXNoKHQuc2l6ZSsobnVsbD09dC5saW5lSGVpZ2h0fHxcIm5vcm1hbFwiPT09dC5saW5lSGVpZ2h0fHx0LmxpbmVIZWlnaHQrXCJcIj09XCIxXCI/XCJcIjpcIi9cIit0LmxpbmVIZWlnaHQpKSxlLnB1c2godC5mYW1pbHkpLGUuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfX0se1wiLi9saWIvdXRpbFwiOjEzMSxcImNzcy1mb250LXN0cmV0Y2gta2V5d29yZHNcIjoxMjcsXCJjc3MtZm9udC1zdHlsZS1rZXl3b3Jkc1wiOjEyOCxcImNzcy1mb250LXdlaWdodC1rZXl3b3Jkc1wiOjEyOSxcImNzcy1nbG9iYWwta2V5d29yZHNcIjoxMzQsXCJjc3Mtc3lzdGVtLWZvbnQta2V5d29yZHNcIjoxMzUsXCJwaWNrLWJ5LWFsaWFzXCI6NDU4fV0sMTM0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVtcImluaGVyaXRcIixcImluaXRpYWxcIixcInVuc2V0XCJdfSx7fV0sMTM1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVtcImNhcHRpb25cIixcImljb25cIixcIm1lbnVcIixcIm1lc3NhZ2UtYm94XCIsXCJzbWFsbC1jYXB0aW9uXCIsXCJzdGF0dXMtYmFyXCJdfSx7fV0sMTM2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1pLTEscz1pKmksbD1vKm8sYz0oMSsyKmkpKmwsdT1pKmwsaD1zKigzLTIqaSksZj1zKm87aWYodC5sZW5ndGgpe2F8fChhPW5ldyBBcnJheSh0Lmxlbmd0aCkpO2Zvcih2YXIgcD10Lmxlbmd0aC0xO3A+PTA7LS1wKWFbcF09Yyp0W3BdK3UqZVtwXStoKnJbcF0rZipuW3BdO3JldHVybiBhfXJldHVybiBjKnQrdSplK2gqcitmKm59LGUuZXhwb3J0cy5kZXJpdmF0aXZlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz02KmkqaS02Kmkscz0zKmkqaS00KmkrMSxsPS02KmkqaSs2KmksYz0zKmkqaS0yKmk7aWYodC5sZW5ndGgpe2F8fChhPW5ldyBBcnJheSh0Lmxlbmd0aCkpO2Zvcih2YXIgdT10Lmxlbmd0aC0xO3U+PTA7LS11KWFbdV09byp0W3VdK3MqZVt1XStsKnJbdV0rYypuW3VdO3JldHVybiBhfXJldHVybiBvKnQrcyplK2wqclt1XStjKm59fSx7fV0sMTM3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vbGliL3RodW5rLmpzXCIpO2Z1bmN0aW9uIGkoKXt0aGlzLmFyZ1R5cGVzPVtdLHRoaXMuc2hpbUFyZ3M9W10sdGhpcy5hcnJheUFyZ3M9W10sdGhpcy5hcnJheUJsb2NrSW5kaWNlcz1bXSx0aGlzLnNjYWxhckFyZ3M9W10sdGhpcy5vZmZzZXRBcmdzPVtdLHRoaXMub2Zmc2V0QXJnSW5kZXg9W10sdGhpcy5pbmRleEFyZ3M9W10sdGhpcy5zaGFwZUFyZ3M9W10sdGhpcy5mdW5jTmFtZT1cIlwiLHRoaXMucHJlPW51bGwsdGhpcy5ib2R5PW51bGwsdGhpcy5wb3N0PW51bGwsdGhpcy5kZWJ1Zz0hMX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGk7ZS5wcmU9dC5wcmUsZS5ib2R5PXQuYm9keSxlLnBvc3Q9dC5wb3N0O3ZhciByPXQuYXJncy5zbGljZSgwKTtlLmFyZ1R5cGVzPXI7Zm9yKHZhciBhPTA7YTxyLmxlbmd0aDsrK2Epe3ZhciBvPXJbYV07aWYoXCJhcnJheVwiPT09b3x8XCJvYmplY3RcIj09dHlwZW9mIG8mJm8uYmxvY2tJbmRpY2VzKXtpZihlLmFyZ1R5cGVzW2FdPVwiYXJyYXlcIixlLmFycmF5QXJncy5wdXNoKGEpLGUuYXJyYXlCbG9ja0luZGljZXMucHVzaChvLmJsb2NrSW5kaWNlcz9vLmJsb2NrSW5kaWNlczowKSxlLnNoaW1BcmdzLnB1c2goXCJhcnJheVwiK2EpLGE8ZS5wcmUuYXJncy5sZW5ndGgmJmUucHJlLmFyZ3NbYV0uY291bnQ+MCl0aHJvdyBuZXcgRXJyb3IoXCJjd2lzZTogcHJlKCkgYmxvY2sgbWF5IG5vdCByZWZlcmVuY2UgYXJyYXkgYXJnc1wiKTtpZihhPGUucG9zdC5hcmdzLmxlbmd0aCYmZS5wb3N0LmFyZ3NbYV0uY291bnQ+MCl0aHJvdyBuZXcgRXJyb3IoXCJjd2lzZTogcG9zdCgpIGJsb2NrIG1heSBub3QgcmVmZXJlbmNlIGFycmF5IGFyZ3NcIil9ZWxzZSBpZihcInNjYWxhclwiPT09byllLnNjYWxhckFyZ3MucHVzaChhKSxlLnNoaW1BcmdzLnB1c2goXCJzY2FsYXJcIithKTtlbHNlIGlmKFwiaW5kZXhcIj09PW8pe2lmKGUuaW5kZXhBcmdzLnB1c2goYSksYTxlLnByZS5hcmdzLmxlbmd0aCYmZS5wcmUuYXJnc1thXS5jb3VudD4wKXRocm93IG5ldyBFcnJvcihcImN3aXNlOiBwcmUoKSBibG9jayBtYXkgbm90IHJlZmVyZW5jZSBhcnJheSBpbmRleFwiKTtpZihhPGUuYm9keS5hcmdzLmxlbmd0aCYmZS5ib2R5LmFyZ3NbYV0ubHZhbHVlKXRocm93IG5ldyBFcnJvcihcImN3aXNlOiBib2R5KCkgYmxvY2sgbWF5IG5vdCB3cml0ZSB0byBhcnJheSBpbmRleFwiKTtpZihhPGUucG9zdC5hcmdzLmxlbmd0aCYmZS5wb3N0LmFyZ3NbYV0uY291bnQ+MCl0aHJvdyBuZXcgRXJyb3IoXCJjd2lzZTogcG9zdCgpIGJsb2NrIG1heSBub3QgcmVmZXJlbmNlIGFycmF5IGluZGV4XCIpfWVsc2UgaWYoXCJzaGFwZVwiPT09byl7aWYoZS5zaGFwZUFyZ3MucHVzaChhKSxhPGUucHJlLmFyZ3MubGVuZ3RoJiZlLnByZS5hcmdzW2FdLmx2YWx1ZSl0aHJvdyBuZXcgRXJyb3IoXCJjd2lzZTogcHJlKCkgYmxvY2sgbWF5IG5vdCB3cml0ZSB0byBhcnJheSBzaGFwZVwiKTtpZihhPGUuYm9keS5hcmdzLmxlbmd0aCYmZS5ib2R5LmFyZ3NbYV0ubHZhbHVlKXRocm93IG5ldyBFcnJvcihcImN3aXNlOiBib2R5KCkgYmxvY2sgbWF5IG5vdCB3cml0ZSB0byBhcnJheSBzaGFwZVwiKTtpZihhPGUucG9zdC5hcmdzLmxlbmd0aCYmZS5wb3N0LmFyZ3NbYV0ubHZhbHVlKXRocm93IG5ldyBFcnJvcihcImN3aXNlOiBwb3N0KCkgYmxvY2sgbWF5IG5vdCB3cml0ZSB0byBhcnJheSBzaGFwZVwiKX1lbHNle2lmKFwib2JqZWN0XCIhPXR5cGVvZiBvfHwhby5vZmZzZXQpdGhyb3cgbmV3IEVycm9yKFwiY3dpc2U6IFVua25vd24gYXJndW1lbnQgdHlwZSBcIityW2FdKTtlLmFyZ1R5cGVzW2FdPVwib2Zmc2V0XCIsZS5vZmZzZXRBcmdzLnB1c2goe2FycmF5Om8uYXJyYXksb2Zmc2V0Om8ub2Zmc2V0fSksZS5vZmZzZXRBcmdJbmRleC5wdXNoKGEpfX1pZihlLmFycmF5QXJncy5sZW5ndGg8PTApdGhyb3cgbmV3IEVycm9yKFwiY3dpc2U6IE5vIGFycmF5IGFyZ3VtZW50cyBzcGVjaWZpZWRcIik7aWYoZS5wcmUuYXJncy5sZW5ndGg+ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiY3dpc2U6IFRvbyBtYW55IGFyZ3VtZW50cyBpbiBwcmUoKSBibG9ja1wiKTtpZihlLmJvZHkuYXJncy5sZW5ndGg+ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiY3dpc2U6IFRvbyBtYW55IGFyZ3VtZW50cyBpbiBib2R5KCkgYmxvY2tcIik7aWYoZS5wb3N0LmFyZ3MubGVuZ3RoPnIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImN3aXNlOiBUb28gbWFueSBhcmd1bWVudHMgaW4gcG9zdCgpIGJsb2NrXCIpO3JldHVybiBlLmRlYnVnPSEhdC5wcmludENvZGV8fCEhdC5kZWJ1ZyxlLmZ1bmNOYW1lPXQuZnVuY05hbWV8fFwiY3dpc2VcIixlLmJsb2NrU2l6ZT10LmJsb2NrU2l6ZXx8NjQsbihlKX19LHtcIi4vbGliL3RodW5rLmpzXCI6MTM5fV0sMTM4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInVuaXFcIik7ZnVuY3Rpb24gaSh0LGUscil7dmFyIG4saSxhPXQubGVuZ3RoLG89ZS5hcnJheUFyZ3MubGVuZ3RoLHM9ZS5pbmRleEFyZ3MubGVuZ3RoPjAsbD1bXSxjPVtdLHU9MCxoPTA7Zm9yKG49MDtuPGE7KytuKWMucHVzaChbXCJpXCIsbixcIj0wXCJdLmpvaW4oXCJcIikpO2ZvcihpPTA7aTxvOysraSlmb3Iobj0wO248YTsrK24paD11LHU9dFtuXSwwPT09bj9jLnB1c2goW1wiZFwiLGksXCJzXCIsbixcIj10XCIsaSxcInBcIix1XS5qb2luKFwiXCIpKTpjLnB1c2goW1wiZFwiLGksXCJzXCIsbixcIj0odFwiLGksXCJwXCIsdSxcIi1zXCIsaCxcIip0XCIsaSxcInBcIixoLFwiKVwiXS5qb2luKFwiXCIpKTtmb3IoYy5sZW5ndGg+MCYmbC5wdXNoKFwidmFyIFwiK2Muam9pbihcIixcIikpLG49YS0xO24+PTA7LS1uKXU9dFtuXSxsLnB1c2goW1wiZm9yKGlcIixuLFwiPTA7aVwiLG4sXCI8c1wiLHUsXCI7KytpXCIsbixcIil7XCJdLmpvaW4oXCJcIikpO2ZvcihsLnB1c2gociksbj0wO248YTsrK24pe2ZvcihoPXUsdT10W25dLGk9MDtpPG87KytpKWwucHVzaChbXCJwXCIsaSxcIis9ZFwiLGksXCJzXCIsbl0uam9pbihcIlwiKSk7cyYmKG4+MCYmbC5wdXNoKFtcImluZGV4W1wiLGgsXCJdLT1zXCIsaF0uam9pbihcIlwiKSksbC5wdXNoKFtcIisraW5kZXhbXCIsdSxcIl1cIl0uam9pbihcIlwiKSkpLGwucHVzaChcIn1cIil9cmV0dXJuIGwuam9pbihcIlxcblwiKX1mdW5jdGlvbiBhKHQsZSxyKXtmb3IodmFyIG49dC5ib2R5LGk9W10sYT1bXSxvPTA7bzx0LmFyZ3MubGVuZ3RoOysrbyl7dmFyIHM9dC5hcmdzW29dO2lmKCEocy5jb3VudDw9MCkpe3ZhciBsPW5ldyBSZWdFeHAocy5uYW1lLFwiZ1wiKSxjPVwiXCIsdT1lLmFycmF5QXJncy5pbmRleE9mKG8pO3N3aXRjaChlLmFyZ1R5cGVzW29dKXtjYXNlXCJvZmZzZXRcIjp2YXIgaD1lLm9mZnNldEFyZ0luZGV4LmluZGV4T2Yobyk7dT1lLm9mZnNldEFyZ3NbaF0uYXJyYXksYz1cIitxXCIraDtjYXNlXCJhcnJheVwiOmM9XCJwXCIrdStjO3ZhciBmPVwibFwiK28scD1cImFcIit1O2lmKDA9PT1lLmFycmF5QmxvY2tJbmRpY2VzW3VdKTE9PT1zLmNvdW50P1wiZ2VuZXJpY1wiPT09clt1XT9zLmx2YWx1ZT8oaS5wdXNoKFtcInZhciBcIixmLFwiPVwiLHAsXCIuZ2V0KFwiLGMsXCIpXCJdLmpvaW4oXCJcIikpLG49bi5yZXBsYWNlKGwsZiksYS5wdXNoKFtwLFwiLnNldChcIixjLFwiLFwiLGYsXCIpXCJdLmpvaW4oXCJcIikpKTpuPW4ucmVwbGFjZShsLFtwLFwiLmdldChcIixjLFwiKVwiXS5qb2luKFwiXCIpKTpuPW4ucmVwbGFjZShsLFtwLFwiW1wiLGMsXCJdXCJdLmpvaW4oXCJcIikpOlwiZ2VuZXJpY1wiPT09clt1XT8oaS5wdXNoKFtcInZhciBcIixmLFwiPVwiLHAsXCIuZ2V0KFwiLGMsXCIpXCJdLmpvaW4oXCJcIikpLG49bi5yZXBsYWNlKGwsZikscy5sdmFsdWUmJmEucHVzaChbcCxcIi5zZXQoXCIsYyxcIixcIixmLFwiKVwiXS5qb2luKFwiXCIpKSk6KGkucHVzaChbXCJ2YXIgXCIsZixcIj1cIixwLFwiW1wiLGMsXCJdXCJdLmpvaW4oXCJcIikpLG49bi5yZXBsYWNlKGwsZikscy5sdmFsdWUmJmEucHVzaChbcCxcIltcIixjLFwiXT1cIixmXS5qb2luKFwiXCIpKSk7ZWxzZXtmb3IodmFyIGQ9W3MubmFtZV0sZz1bY10sdj0wO3Y8TWF0aC5hYnMoZS5hcnJheUJsb2NrSW5kaWNlc1t1XSk7disrKWQucHVzaChcIlxcXFxzKlxcXFxbKFteXFxcXF1dKylcXFxcXVwiKSxnLnB1c2goXCIkXCIrKHYrMSkrXCIqdFwiK3UrXCJiXCIrdik7aWYobD1uZXcgUmVnRXhwKGQuam9pbihcIlwiKSxcImdcIiksYz1nLmpvaW4oXCIrXCIpLFwiZ2VuZXJpY1wiPT09clt1XSl0aHJvdyBuZXcgRXJyb3IoXCJjd2lzZTogR2VuZXJpYyBhcnJheXMgbm90IHN1cHBvcnRlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGJsb2NrcyFcIik7bj1uLnJlcGxhY2UobCxbcCxcIltcIixjLFwiXVwiXS5qb2luKFwiXCIpKX1icmVhaztjYXNlXCJzY2FsYXJcIjpuPW4ucmVwbGFjZShsLFwiWVwiK2Uuc2NhbGFyQXJncy5pbmRleE9mKG8pKTticmVhaztjYXNlXCJpbmRleFwiOm49bi5yZXBsYWNlKGwsXCJpbmRleFwiKTticmVhaztjYXNlXCJzaGFwZVwiOm49bi5yZXBsYWNlKGwsXCJzaGFwZVwiKX19fXJldHVybltpLmpvaW4oXCJcXG5cIiksbixhLmpvaW4oXCJcXG5cIildLmpvaW4oXCJcXG5cIikudHJpbSgpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lWzFdLmxlbmd0aC1NYXRoLmFicyh0LmFycmF5QmxvY2tJbmRpY2VzWzBdKXwwLG89bmV3IEFycmF5KHQuYXJyYXlBcmdzLmxlbmd0aCkscz1uZXcgQXJyYXkodC5hcnJheUFyZ3MubGVuZ3RoKSxsPTA7bDx0LmFycmF5QXJncy5sZW5ndGg7KytsKXNbbF09ZVsyKmxdLG9bbF09ZVsyKmwrMV07dmFyIGM9W10sdT1bXSxoPVtdLGY9W10scD1bXTtmb3IobD0wO2w8dC5hcnJheUFyZ3MubGVuZ3RoOysrbCl7dC5hcnJheUJsb2NrSW5kaWNlc1tsXTwwPyhoLnB1c2goMCksZi5wdXNoKHIpLGMucHVzaChyKSx1LnB1c2gocit0LmFycmF5QmxvY2tJbmRpY2VzW2xdKSk6KGgucHVzaCh0LmFycmF5QmxvY2tJbmRpY2VzW2xdKSxmLnB1c2godC5hcnJheUJsb2NrSW5kaWNlc1tsXStyKSxjLnB1c2goMCksdS5wdXNoKHQuYXJyYXlCbG9ja0luZGljZXNbbF0pKTtmb3IodmFyIGQ9W10sZz0wO2c8b1tsXS5sZW5ndGg7ZysrKWhbbF08PW9bbF1bZ10mJm9bbF1bZ108ZltsXSYmZC5wdXNoKG9bbF1bZ10taFtsXSk7cC5wdXNoKGQpfXZhciB2PVtcIlNTXCJdLG09W1wiJ3VzZSBzdHJpY3QnXCJdLHk9W107Zm9yKGc9MDtnPHI7KytnKXkucHVzaChbXCJzXCIsZyxcIj1TU1tcIixnLFwiXVwiXS5qb2luKFwiXCIpKTtmb3IobD0wO2w8dC5hcnJheUFyZ3MubGVuZ3RoOysrbCl7Zm9yKHYucHVzaChcImFcIitsKSx2LnB1c2goXCJ0XCIrbCksdi5wdXNoKFwicFwiK2wpLGc9MDtnPHI7KytnKXkucHVzaChbXCJ0XCIsbCxcInBcIixnLFwiPXRcIixsLFwiW1wiLGhbbF0rZyxcIl1cIl0uam9pbihcIlwiKSk7Zm9yKGc9MDtnPE1hdGguYWJzKHQuYXJyYXlCbG9ja0luZGljZXNbbF0pOysrZyl5LnB1c2goW1widFwiLGwsXCJiXCIsZyxcIj10XCIsbCxcIltcIixjW2xdK2csXCJdXCJdLmpvaW4oXCJcIikpfWZvcihsPTA7bDx0LnNjYWxhckFyZ3MubGVuZ3RoOysrbCl2LnB1c2goXCJZXCIrbCk7aWYodC5zaGFwZUFyZ3MubGVuZ3RoPjAmJnkucHVzaChcInNoYXBlPVNTLnNsaWNlKDApXCIpLHQuaW5kZXhBcmdzLmxlbmd0aD4wKXt2YXIgeD1uZXcgQXJyYXkocik7Zm9yKGw9MDtsPHI7KytsKXhbbF09XCIwXCI7eS5wdXNoKFtcImluZGV4PVtcIix4LmpvaW4oXCIsXCIpLFwiXVwiXS5qb2luKFwiXCIpKX1mb3IobD0wO2w8dC5vZmZzZXRBcmdzLmxlbmd0aDsrK2wpe3ZhciBiPXQub2Zmc2V0QXJnc1tsXSxfPVtdO2ZvcihnPTA7ZzxiLm9mZnNldC5sZW5ndGg7KytnKTAhPT1iLm9mZnNldFtnXSYmKDE9PT1iLm9mZnNldFtnXT9fLnB1c2goW1widFwiLGIuYXJyYXksXCJwXCIsZ10uam9pbihcIlwiKSk6Xy5wdXNoKFtiLm9mZnNldFtnXSxcIip0XCIsYi5hcnJheSxcInBcIixnXS5qb2luKFwiXCIpKSk7MD09PV8ubGVuZ3RoP3kucHVzaChcInFcIitsK1wiPTBcIik6eS5wdXNoKFtcInFcIixsLFwiPVwiLF8uam9pbihcIitcIildLmpvaW4oXCJcIikpfXZhciB3PW4oW10uY29uY2F0KHQucHJlLnRoaXNWYXJzKS5jb25jYXQodC5ib2R5LnRoaXNWYXJzKS5jb25jYXQodC5wb3N0LnRoaXNWYXJzKSk7Zm9yKCh5PXkuY29uY2F0KHcpKS5sZW5ndGg+MCYmbS5wdXNoKFwidmFyIFwiK3kuam9pbihcIixcIikpLGw9MDtsPHQuYXJyYXlBcmdzLmxlbmd0aDsrK2wpbS5wdXNoKFwicFwiK2wrXCJ8PTBcIik7dC5wcmUuYm9keS5sZW5ndGg+MyYmbS5wdXNoKGEodC5wcmUsdCxzKSk7dmFyIGs9YSh0LmJvZHksdCxzKSxBPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dFswXS5sZW5ndGg7ZTxyOyl7Zm9yKHZhciBuPTE7bjx0Lmxlbmd0aDsrK24paWYodFtuXVtlXSE9PXRbMF1bZV0pcmV0dXJuIGU7KytlfXJldHVybiBlfShwKTtBPHI/bS5wdXNoKGZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgYT1lLmxlbmd0aCxvPXIuYXJyYXlBcmdzLmxlbmd0aCxzPXIuYmxvY2tTaXplLGw9ci5pbmRleEFyZ3MubGVuZ3RoPjAsYz1bXSx1PTA7dTxvOysrdSljLnB1c2goW1widmFyIG9mZnNldFwiLHUsXCI9cFwiLHVdLmpvaW4oXCJcIikpO2Zvcih1PXQ7dTxhOysrdSljLnB1c2goW1wiZm9yKHZhciBqXCIrdStcIj1TU1tcIixlW3VdLFwiXXwwO2pcIix1LFwiPjA7KXtcIl0uam9pbihcIlwiKSksYy5wdXNoKFtcImlmKGpcIix1LFwiPFwiLHMsXCIpe1wiXS5qb2luKFwiXCIpKSxjLnB1c2goW1wic1wiLGVbdV0sXCI9alwiLHVdLmpvaW4oXCJcIikpLGMucHVzaChbXCJqXCIsdSxcIj0wXCJdLmpvaW4oXCJcIikpLGMucHVzaChbXCJ9ZWxzZXtzXCIsZVt1XSxcIj1cIixzXS5qb2luKFwiXCIpKSxjLnB1c2goW1wialwiLHUsXCItPVwiLHMsXCJ9XCJdLmpvaW4oXCJcIikpLGwmJmMucHVzaChbXCJpbmRleFtcIixlW3VdLFwiXT1qXCIsdV0uam9pbihcIlwiKSk7Zm9yKHU9MDt1PG87Kyt1KXtmb3IodmFyIGg9W1wib2Zmc2V0XCIrdV0sZj10O2Y8YTsrK2YpaC5wdXNoKFtcImpcIixmLFwiKnRcIix1LFwicFwiLGVbZl1dLmpvaW4oXCJcIikpO2MucHVzaChbXCJwXCIsdSxcIj0oXCIsaC5qb2luKFwiK1wiKSxcIilcIl0uam9pbihcIlwiKSl9Zm9yKGMucHVzaChpKGUscixuKSksdT10O3U8YTsrK3UpYy5wdXNoKFwifVwiKTtyZXR1cm4gYy5qb2luKFwiXFxuXCIpfShBLHBbMF0sdCxrKSk6bS5wdXNoKGkocFswXSx0LGspKSx0LnBvc3QuYm9keS5sZW5ndGg+MyYmbS5wdXNoKGEodC5wb3N0LHQscykpLHQuZGVidWcmJmNvbnNvbGUubG9nKFwiLS0tLS1HZW5lcmF0ZWQgY3dpc2Ugcm91dGluZSBmb3IgXCIsZSxcIjpcXG5cIittLmpvaW4oXCJcXG5cIikrXCJcXG4tLS0tLS0tLS0tXCIpO3ZhciBUPVt0LmZ1bmNOYW1lfHxcInVubmFtZWRcIixcIl9jd2lzZV9sb29wX1wiLG9bMF0uam9pbihcInNcIiksXCJtXCIsQSxmdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPSEwLG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGk9dFtuXSxhPWkubWF0Y2goL1xcZCsvKTthPWE/YVswXTpcIlwiLDA9PT1pLmNoYXJBdCgwKT9lW25dPVwidVwiK2kuY2hhckF0KDEpK2E6ZVtuXT1pLmNoYXJBdCgwKSthLG4+MCYmKHI9ciYmZVtuXT09PWVbbi0xXSl9cmV0dXJuIHI/ZVswXTplLmpvaW4oXCJcIil9KHMpXS5qb2luKFwiXCIpO3JldHVybiBuZXcgRnVuY3Rpb24oW1wiZnVuY3Rpb24gXCIsVCxcIihcIix2LmpvaW4oXCIsXCIpLFwiKXtcIixtLmpvaW4oXCJcXG5cIiksXCJ9IHJldHVybiBcIixUXS5qb2luKFwiXCIpKSgpfX0se3VuaXE6NTMyfV0sMTM5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vY29tcGlsZS5qc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9W1wiJ3VzZSBzdHJpY3QnXCIsXCJ2YXIgQ0FDSEVEPXt9XCJdLHI9W10saT10LmZ1bmNOYW1lK1wiX2N3aXNlX3RodW5rXCI7ZS5wdXNoKFtcInJldHVybiBmdW5jdGlvbiBcIixpLFwiKFwiLHQuc2hpbUFyZ3Muam9pbihcIixcIiksXCIpe1wiXS5qb2luKFwiXCIpKTtmb3IodmFyIGE9W10sbz1bXSxzPVtbXCJhcnJheVwiLHQuYXJyYXlBcmdzWzBdLFwiLnNoYXBlLnNsaWNlKFwiLE1hdGgubWF4KDAsdC5hcnJheUJsb2NrSW5kaWNlc1swXSksdC5hcnJheUJsb2NrSW5kaWNlc1swXTwwP1wiLFwiK3QuYXJyYXlCbG9ja0luZGljZXNbMF0rXCIpXCI6XCIpXCJdLmpvaW4oXCJcIildLGw9W10sYz1bXSx1PTA7dTx0LmFycmF5QXJncy5sZW5ndGg7Kyt1KXt2YXIgaD10LmFycmF5QXJnc1t1XTtyLnB1c2goW1widFwiLGgsXCI9YXJyYXlcIixoLFwiLmR0eXBlLFwiLFwiclwiLGgsXCI9YXJyYXlcIixoLFwiLm9yZGVyXCJdLmpvaW4oXCJcIikpLGEucHVzaChcInRcIitoKSxhLnB1c2goXCJyXCIraCksby5wdXNoKFwidFwiK2gpLG8ucHVzaChcInJcIitoK1wiLmpvaW4oKVwiKSxzLnB1c2goXCJhcnJheVwiK2grXCIuZGF0YVwiKSxzLnB1c2goXCJhcnJheVwiK2grXCIuc3RyaWRlXCIpLHMucHVzaChcImFycmF5XCIraCtcIi5vZmZzZXR8MFwiKSx1PjAmJihsLnB1c2goXCJhcnJheVwiK3QuYXJyYXlBcmdzWzBdK1wiLnNoYXBlLmxlbmd0aD09PWFycmF5XCIraCtcIi5zaGFwZS5sZW5ndGgrXCIrKE1hdGguYWJzKHQuYXJyYXlCbG9ja0luZGljZXNbMF0pLU1hdGguYWJzKHQuYXJyYXlCbG9ja0luZGljZXNbdV0pKSksYy5wdXNoKFwiYXJyYXlcIit0LmFycmF5QXJnc1swXStcIi5zaGFwZVtzaGFwZUluZGV4K1wiK01hdGgubWF4KDAsdC5hcnJheUJsb2NrSW5kaWNlc1swXSkrXCJdPT09YXJyYXlcIitoK1wiLnNoYXBlW3NoYXBlSW5kZXgrXCIrTWF0aC5tYXgoMCx0LmFycmF5QmxvY2tJbmRpY2VzW3VdKStcIl1cIikpfWZvcih0LmFycmF5QXJncy5sZW5ndGg+MSYmKGUucHVzaChcImlmICghKFwiK2wuam9pbihcIiAmJiBcIikrXCIpKSB0aHJvdyBuZXcgRXJyb3IoJ2N3aXNlOiBBcnJheXMgZG8gbm90IGFsbCBoYXZlIHRoZSBzYW1lIGRpbWVuc2lvbmFsaXR5IScpXCIpLGUucHVzaChcImZvcih2YXIgc2hhcGVJbmRleD1hcnJheVwiK3QuYXJyYXlBcmdzWzBdK1wiLnNoYXBlLmxlbmd0aC1cIitNYXRoLmFicyh0LmFycmF5QmxvY2tJbmRpY2VzWzBdKStcIjsgc2hhcGVJbmRleC0tXFx4M2UwOykge1wiKSxlLnB1c2goXCJpZiAoIShcIitjLmpvaW4oXCIgJiYgXCIpK1wiKSkgdGhyb3cgbmV3IEVycm9yKCdjd2lzZTogQXJyYXlzIGRvIG5vdCBhbGwgaGF2ZSB0aGUgc2FtZSBzaGFwZSEnKVwiKSxlLnB1c2goXCJ9XCIpKSx1PTA7dTx0LnNjYWxhckFyZ3MubGVuZ3RoOysrdSlzLnB1c2goXCJzY2FsYXJcIit0LnNjYWxhckFyZ3NbdV0pO3JldHVybiByLnB1c2goW1widHlwZT1bXCIsby5qb2luKFwiLFwiKSxcIl0uam9pbigpXCJdLmpvaW4oXCJcIikpLHIucHVzaChcInByb2M9Q0FDSEVEW3R5cGVdXCIpLGUucHVzaChcInZhciBcIityLmpvaW4oXCIsXCIpKSxlLnB1c2goW1wiaWYoIXByb2Mpe1wiLFwiQ0FDSEVEW3R5cGVdPXByb2M9Y29tcGlsZShbXCIsYS5qb2luKFwiLFwiKSxcIl0pfVwiLFwicmV0dXJuIHByb2MoXCIscy5qb2luKFwiLFwiKSxcIil9XCJdLmpvaW4oXCJcIikpLHQuZGVidWcmJmNvbnNvbGUubG9nKFwiLS0tLS1HZW5lcmF0ZWQgdGh1bms6XFxuXCIrZS5qb2luKFwiXFxuXCIpK1wiXFxuLS0tLS0tLS0tLVwiKSxuZXcgRnVuY3Rpb24oXCJjb21waWxlXCIsZS5qb2luKFwiXFxuXCIpKShuLmJpbmQodm9pZCAwLHQpKX19LHtcIi4vY29tcGlsZS5qc1wiOjEzOH1dLDE0MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KFwiY3dpc2UtY29tcGlsZXJcIil9LHtcImN3aXNlLWNvbXBpbGVyXCI6MTM3fV0sMTQxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saT10KFwiZXM1LWV4dC9vYmplY3QvY29weVwiKSxhPXQoXCJlczUtZXh0L29iamVjdC9ub3JtYWxpemUtb3B0aW9uc1wiKSxvPXQoXCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZVwiKSxzPXQoXCJlczUtZXh0L29iamVjdC9tYXBcIiksbD10KFwiZXM1LWV4dC9vYmplY3QvdmFsaWQtY2FsbGFibGVcIiksYz10KFwiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWVcIiksdT1GdW5jdGlvbi5wcm90b3R5cGUuYmluZCxoPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxmPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7bj1mdW5jdGlvbih0LGUscil7dmFyIG4sYT1jKGUpJiZsKGUudmFsdWUpO3JldHVybiBkZWxldGUobj1pKGUpKS53cml0YWJsZSxkZWxldGUgbi52YWx1ZSxuLmdldD1mdW5jdGlvbigpe3JldHVybiFyLm92ZXJ3cml0ZURlZmluaXRpb24mJmYuY2FsbCh0aGlzLHQpP2E6KGUudmFsdWU9dS5jYWxsKGEsci5yZXNvbHZlQ29udGV4dD9yLnJlc29sdmVDb250ZXh0KHRoaXMpOnRoaXMpLGgodGhpcyx0LGUpLHRoaXNbdF0pfSxufSxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9YShhcmd1bWVudHNbMV0pO3JldHVybiBudWxsIT1lLnJlc29sdmVDb250ZXh0JiZvKGUucmVzb2x2ZUNvbnRleHQpLHModCxmdW5jdGlvbih0LHIpe3JldHVybiBuKHIsdCxlKX0pfX0se1wiZXM1LWV4dC9vYmplY3QvY29weVwiOjE4MixcImVzNS1leHQvb2JqZWN0L21hcFwiOjE5MSxcImVzNS1leHQvb2JqZWN0L25vcm1hbGl6ZS1vcHRpb25zXCI6MTkyLFwiZXM1LWV4dC9vYmplY3QvdmFsaWQtY2FsbGFibGVcIjoxOTYsXCJlczUtZXh0L29iamVjdC92YWxpZC12YWx1ZVwiOjE5OH1dLDE0MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJlczUtZXh0L29iamVjdC9hc3NpZ25cIiksaT10KFwiZXM1LWV4dC9vYmplY3Qvbm9ybWFsaXplLW9wdGlvbnNcIiksYT10KFwiZXM1LWV4dC9vYmplY3QvaXMtY2FsbGFibGVcIiksbz10KFwiZXM1LWV4dC9zdHJpbmcvIy9jb250YWluc1wiKTsoZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxzLGwsYztyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyfHxcInN0cmluZ1wiIT10eXBlb2YgdD8obD1lLGU9dCx0PW51bGwpOmw9YXJndW1lbnRzWzJdLG51bGw9PXQ/KHI9cz0hMCxhPSExKToocj1vLmNhbGwodCxcImNcIiksYT1vLmNhbGwodCxcImVcIikscz1vLmNhbGwodCxcIndcIikpLGM9e3ZhbHVlOmUsY29uZmlndXJhYmxlOnIsZW51bWVyYWJsZTphLHdyaXRhYmxlOnN9LGw/bihpKGwpLGMpOmN9KS5ncz1mdW5jdGlvbih0LGUscil7dmFyIHMsbCxjLHU7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIHQ/KGM9cixyPWUsZT10LHQ9bnVsbCk6Yz1hcmd1bWVudHNbM10sbnVsbD09ZT9lPXZvaWQgMDphKGUpP251bGw9PXI/cj12b2lkIDA6YShyKXx8KGM9cixyPXZvaWQgMCk6KGM9ZSxlPXI9dm9pZCAwKSxudWxsPT10PyhzPSEwLGw9ITEpOihzPW8uY2FsbCh0LFwiY1wiKSxsPW8uY2FsbCh0LFwiZVwiKSksdT17Z2V0OmUsc2V0OnIsY29uZmlndXJhYmxlOnMsZW51bWVyYWJsZTpsfSxjP24oaShjKSx1KTp1fX0se1wiZXM1LWV4dC9vYmplY3QvYXNzaWduXCI6MTc5LFwiZXM1LWV4dC9vYmplY3QvaXMtY2FsbGFibGVcIjoxODUsXCJlczUtZXh0L29iamVjdC9ub3JtYWxpemUtb3B0aW9uc1wiOjE5MixcImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnNcIjoxOTl9XSwxNDM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbjtuPXRoaXMsZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiByKHQpe3ZhciByO3JldHVybiAxPT09dC5sZW5ndGgmJihyPXQsdD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHIodCksbil9KSx7bGVmdDpmdW5jdGlvbihlLHIsbixpKXtmb3IobnVsbD09biYmKG49MCksbnVsbD09aSYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPDA/bj1hKzE6aT1hfXJldHVybiBufSxyaWdodDpmdW5jdGlvbihlLHIsbixpKXtmb3IobnVsbD09biYmKG49MCksbnVsbD09aSYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPjA/aT1hOm49YSsxfXJldHVybiBufX19dmFyIG49cihlKSxpPW4ucmlnaHQsYT1uLmxlZnQ7ZnVuY3Rpb24gbyh0LGUpe3JldHVyblt0LGVdfWZ1bmN0aW9uIHModCl7cmV0dXJuIG51bGw9PT10P05hTjordH1mdW5jdGlvbiBsKHQsZSl7dmFyIHIsbixpPXQubGVuZ3RoLGE9MCxvPS0xLGw9MCxjPTA7aWYobnVsbD09ZSlmb3IoOysrbzxpOylpc05hTihyPXModFtvXSkpfHwoYys9KG49ci1sKSooci0obCs9bi8rK2EpKSk7ZWxzZSBmb3IoOysrbzxpOylpc05hTihyPXMoZSh0W29dLG8sdCkpKXx8KGMrPShuPXItbCkqKHItKGwrPW4vKythKSkpO2lmKGE+MSlyZXR1cm4gYy8oYS0xKX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9bCh0LGUpO3JldHVybiByP01hdGguc3FydChyKTpyfWZ1bmN0aW9uIHUodCxlKXt2YXIgcixuLGksYT10Lmxlbmd0aCxvPS0xO2lmKG51bGw9PWUpe2Zvcig7KytvPGE7KWlmKG51bGwhPShyPXRbb10pJiZyPj1yKWZvcihuPWk9cjsrK288YTspbnVsbCE9KHI9dFtvXSkmJihuPnImJihuPXIpLGk8ciYmKGk9cikpfWVsc2UgZm9yKDsrK288YTspaWYobnVsbCE9KHI9ZSh0W29dLG8sdCkpJiZyPj1yKWZvcihuPWk9cjsrK288YTspbnVsbCE9KHI9ZSh0W29dLG8sdCkpJiYobj5yJiYobj1yKSxpPHImJihpPXIpKTtyZXR1cm5bbixpXX12YXIgaD1BcnJheS5wcm90b3R5cGUsZj1oLnNsaWNlLHA9aC5tYXA7ZnVuY3Rpb24gZCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdH1mdW5jdGlvbiB2KHQsZSxyKXt0PSt0LGU9K2Uscj0oaT1hcmd1bWVudHMubGVuZ3RoKTwyPyhlPXQsdD0wLDEpOmk8Mz8xOityO2Zvcih2YXIgbj0tMSxpPTB8TWF0aC5tYXgoMCxNYXRoLmNlaWwoKGUtdCkvcikpLGE9bmV3IEFycmF5KGkpOysrbjxpOylhW25dPXQrbipyO3JldHVybiBhfXZhciBtPU1hdGguc3FydCg1MCkseT1NYXRoLnNxcnQoMTApLHg9TWF0aC5zcXJ0KDIpO2Z1bmN0aW9uIGIodCxlLHIpe3ZhciBuPShlLXQpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksYT1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhhPj1tPzEwOmE+PXk/NTphPj14PzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8oYT49bT8xMDphPj15PzU6YT49eD8yOjEpfWZ1bmN0aW9uIF8odCxlLHIpe3ZhciBuPU1hdGguYWJzKGUtdCkvTWF0aC5tYXgoMCxyKSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSksYT1uL2k7cmV0dXJuIGE+PW0/aSo9MTA6YT49eT9pKj01OmE+PXgmJihpKj0yKSxlPHQ/LWk6aX1mdW5jdGlvbiB3KHQpe3JldHVybiBNYXRoLmNlaWwoTWF0aC5sb2codC5sZW5ndGgpL01hdGguTE4yKSsxfWZ1bmN0aW9uIGsodCxlLHIpe2lmKG51bGw9PXImJihyPXMpLG49dC5sZW5ndGgpe2lmKChlPStlKTw9MHx8bjwyKXJldHVybityKHRbMF0sMCx0KTtpZihlPj0xKXJldHVybityKHRbbi0xXSxuLTEsdCk7dmFyIG4saT0obi0xKSplLGE9TWF0aC5mbG9vcihpKSxvPStyKHRbYV0sYSx0KTtyZXR1cm4gbysoK3IodFthKzFdLGErMSx0KS1vKSooaS1hKX19ZnVuY3Rpb24gQSh0LGUpe3ZhciByLG4saT10Lmxlbmd0aCxhPS0xO2lmKG51bGw9PWUpe2Zvcig7KythPGk7KWlmKG51bGwhPShyPXRbYV0pJiZyPj1yKWZvcihuPXI7KythPGk7KW51bGwhPShyPXRbYV0pJiZuPnImJihuPXIpfWVsc2UgZm9yKDsrK2E8aTspaWYobnVsbCE9KHI9ZSh0W2FdLGEsdCkpJiZyPj1yKWZvcihuPXI7KythPGk7KW51bGwhPShyPWUodFthXSxhLHQpKSYmbj5yJiYobj1yKTtyZXR1cm4gbn1mdW5jdGlvbiBUKHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBlPS0xLHI9QSh0LE0pLG49bmV3IEFycmF5KHIpOysrZTxyOylmb3IodmFyIGksYT0tMSxvPW5bZV09bmV3IEFycmF5KGkpOysrYTxpOylvW2FdPXRbYV1bZV07cmV0dXJuIG59ZnVuY3Rpb24gTSh0KXtyZXR1cm4gdC5sZW5ndGh9dC5iaXNlY3Q9aSx0LmJpc2VjdFJpZ2h0PWksdC5iaXNlY3RMZWZ0PWEsdC5hc2NlbmRpbmc9ZSx0LmJpc2VjdG9yPXIsdC5jcm9zcz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLHMsbD10Lmxlbmd0aCxjPWUubGVuZ3RoLHU9bmV3IEFycmF5KGwqYyk7Zm9yKG51bGw9PXImJihyPW8pLG49YT0wO248bDsrK24pZm9yKHM9dFtuXSxpPTA7aTxjOysraSwrK2EpdVthXT1yKHMsZVtpXSk7cmV0dXJuIHV9LHQuZGVzY2VuZGluZz1mdW5jdGlvbih0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn0sdC5kZXZpYXRpb249Yyx0LmV4dGVudD11LHQuaGlzdG9ncmFtPWZ1bmN0aW9uKCl7dmFyIHQ9ZyxlPXUscj13O2Z1bmN0aW9uIG4obil7dmFyIGEsbyxzPW4ubGVuZ3RoLGw9bmV3IEFycmF5KHMpO2ZvcihhPTA7YTxzOysrYSlsW2FdPXQoblthXSxhLG4pO3ZhciBjPWUobCksdT1jWzBdLGg9Y1sxXSxmPXIobCx1LGgpO0FycmF5LmlzQXJyYXkoZil8fChmPV8odSxoLGYpLGY9dihNYXRoLmNlaWwodS9mKSpmLGgsZikpO2Zvcih2YXIgcD1mLmxlbmd0aDtmWzBdPD11OylmLnNoaWZ0KCksLS1wO2Zvcig7ZltwLTFdPmg7KWYucG9wKCksLS1wO3ZhciBkLGc9bmV3IEFycmF5KHArMSk7Zm9yKGE9MDthPD1wOysrYSkoZD1nW2FdPVtdKS54MD1hPjA/ZlthLTFdOnUsZC54MT1hPHA/ZlthXTpoO2ZvcihhPTA7YTxzOysrYSl1PD0obz1sW2FdKSYmbzw9aCYmZ1tpKGYsbywwLHApXS5wdXNoKG5bYV0pO3JldHVybiBnfXJldHVybiBuLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTpkKGUpLG4pOnR9LG4uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpkKFt0WzBdLHRbMV1dKSxuKTplfSxuLnRocmVzaG9sZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/ZChmLmNhbGwodCkpOmQodCksbik6cn0sbn0sdC50aHJlc2hvbGRGcmVlZG1hbkRpYWNvbmlzPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gdD1wLmNhbGwodCxzKS5zb3J0KGUpLE1hdGguY2VpbCgobi1yKS8oMiooayh0LC43NSktayh0LC4yNSkpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LHQudGhyZXNob2xkU2NvdHQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBNYXRoLmNlaWwoKHItZSkvKDMuNSpjKHQpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LHQudGhyZXNob2xkU3R1cmdlcz13LHQubWF4PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXQubGVuZ3RoLGE9LTE7aWYobnVsbD09ZSl7Zm9yKDsrK2E8aTspaWYobnVsbCE9KHI9dFthXSkmJnI+PXIpZm9yKG49cjsrK2E8aTspbnVsbCE9KHI9dFthXSkmJnI+biYmKG49cil9ZWxzZSBmb3IoOysrYTxpOylpZihudWxsIT0ocj1lKHRbYV0sYSx0KSkmJnI+PXIpZm9yKG49cjsrK2E8aTspbnVsbCE9KHI9ZSh0W2FdLGEsdCkpJiZyPm4mJihuPXIpO3JldHVybiBufSx0Lm1lYW49ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQubGVuZ3RoLGk9bixhPS0xLG89MDtpZihudWxsPT1lKWZvcig7KythPG47KWlzTmFOKHI9cyh0W2FdKSk/LS1pOm8rPXI7ZWxzZSBmb3IoOysrYTxuOylpc05hTihyPXMoZSh0W2FdLGEsdCkpKT8tLWk6bys9cjtpZihpKXJldHVybiBvL2l9LHQubWVkaWFuPWZ1bmN0aW9uKHQscil7dmFyIG4saT10Lmxlbmd0aCxhPS0xLG89W107aWYobnVsbD09cilmb3IoOysrYTxpOylpc05hTihuPXModFthXSkpfHxvLnB1c2gobik7ZWxzZSBmb3IoOysrYTxpOylpc05hTihuPXMocih0W2FdLGEsdCkpKXx8by5wdXNoKG4pO3JldHVybiBrKG8uc29ydChlKSwuNSl9LHQubWVyZ2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpPXQubGVuZ3RoLGE9LTEsbz0wOysrYTxpOylvKz10W2FdLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobyk7LS1pPj0wOylmb3IoZT0obj10W2ldKS5sZW5ndGg7LS1lPj0wOylyWy0tb109bltlXTtyZXR1cm4gcn0sdC5taW49QSx0LnBhaXJzPWZ1bmN0aW9uKHQsZSl7bnVsbD09ZSYmKGU9byk7Zm9yKHZhciByPTAsbj10Lmxlbmd0aC0xLGk9dFswXSxhPW5ldyBBcnJheShuPDA/MDpuKTtyPG47KWFbcl09ZShpLGk9dFsrK3JdKTtyZXR1cm4gYX0sdC5wZXJtdXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUubGVuZ3RoLG49bmV3IEFycmF5KHIpO3ItLTspbltyXT10W2Vbcl1dO3JldHVybiBufSx0LnF1YW50aWxlPWssdC5yYW5nZT12LHQuc2Nhbj1mdW5jdGlvbih0LHIpe2lmKG49dC5sZW5ndGgpe3ZhciBuLGksYT0wLG89MCxzPXRbb107Zm9yKG51bGw9PXImJihyPWUpOysrYTxuOykocihpPXRbYV0scyk8MHx8MCE9PXIocyxzKSkmJihzPWksbz1hKTtyZXR1cm4gMD09PXIocyxzKT9vOnZvaWQgMH19LHQuc2h1ZmZsZT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGksYT0obnVsbD09cj90Lmxlbmd0aDpyKS0oZT1udWxsPT1lPzA6K2UpO2E7KWk9TWF0aC5yYW5kb20oKSphLS18MCxuPXRbYStlXSx0W2ErZV09dFtpK2VdLHRbaStlXT1uO3JldHVybiB0fSx0LnN1bT1mdW5jdGlvbih0LGUpe3ZhciByLG49dC5sZW5ndGgsaT0tMSxhPTA7aWYobnVsbD09ZSlmb3IoOysraTxuOykocj0rdFtpXSkmJihhKz1yKTtlbHNlIGZvcig7KytpPG47KShyPStlKHRbaV0saSx0KSkmJihhKz1yKTtyZXR1cm4gYX0sdC50aWNrcz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scz0tMTtpZihyPStyLCh0PSt0KT09KGU9K2UpJiZyPjApcmV0dXJuW3RdO2lmKChuPWU8dCkmJihpPXQsdD1lLGU9aSksMD09PShvPWIodCxlLHIpKXx8IWlzRmluaXRlKG8pKXJldHVybltdO2lmKG8+MClmb3IodD1NYXRoLmNlaWwodC9vKSxlPU1hdGguZmxvb3IoZS9vKSxhPW5ldyBBcnJheShpPU1hdGguY2VpbChlLXQrMSkpOysrczxpOylhW3NdPSh0K3MpKm87ZWxzZSBmb3IodD1NYXRoLmZsb29yKHQqbyksZT1NYXRoLmNlaWwoZSpvKSxhPW5ldyBBcnJheShpPU1hdGguY2VpbCh0LWUrMSkpOysrczxpOylhW3NdPSh0LXMpL287cmV0dXJuIG4mJmEucmV2ZXJzZSgpLGF9LHQudGlja0luY3JlbWVudD1iLHQudGlja1N0ZXA9Xyx0LnRyYW5zcG9zZT1ULHQudmFyaWFuY2U9bCx0LnppcD1mdW5jdGlvbigpe3JldHVybiBUKGFyZ3VtZW50cyl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfShcIm9iamVjdFwiPT10eXBlb2YgciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGU/cjpuLmQzPW4uZDN8fHt9KX0se31dLDE0NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuO249dGhpcyxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKCl7fWZ1bmN0aW9uIHIodCxyKXt2YXIgbj1uZXcgZTtpZih0IGluc3RhbmNlb2YgZSl0LmVhY2goZnVuY3Rpb24odCxlKXtuLnNldChlLHQpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgaSxhPS0xLG89dC5sZW5ndGg7aWYobnVsbD09cilmb3IoOysrYTxvOyluLnNldChhLHRbYV0pO2Vsc2UgZm9yKDsrK2E8bzspbi5zZXQocihpPXRbYV0sYSx0KSxpKX1lbHNlIGlmKHQpZm9yKHZhciBzIGluIHQpbi5zZXQocyx0W3NdKTtyZXR1cm4gbn1lLnByb3RvdHlwZT1yLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZSxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuXCIkXCIrdCBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbXCIkXCIrdF19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzW1wiJFwiK3RdPWUsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPVwiJFwiK3Q7cmV0dXJuIGUgaW4gdGhpcyYmZGVsZXRlIHRoaXNbZV19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpXCIkXCI9PT10WzBdJiZkZWxldGUgdGhpc1t0XX0sa2V5czpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKVwiJFwiPT09ZVswXSYmdC5wdXNoKGUuc2xpY2UoMSkpO3JldHVybiB0fSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcylcIiRcIj09PWVbMF0mJnQucHVzaCh0aGlzW2VdKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKVwiJFwiPT09ZVswXSYmdC5wdXNoKHtrZXk6ZS5zbGljZSgxKSx2YWx1ZTp0aGlzW2VdfSk7cmV0dXJuIHR9LHNpemU6ZnVuY3Rpb24oKXt2YXIgdD0wO2Zvcih2YXIgZSBpbiB0aGlzKVwiJFwiPT09ZVswXSYmKyt0O3JldHVybiB0fSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKWlmKFwiJFwiPT09dFswXSlyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcylcIiRcIj09PWVbMF0mJnQodGhpc1tlXSxlLnNsaWNlKDEpLHRoaXMpfX07ZnVuY3Rpb24gbigpe3JldHVybnt9fWZ1bmN0aW9uIGkodCxlLHIpe3RbZV09cn1mdW5jdGlvbiBhKCl7cmV0dXJuIHIoKX1mdW5jdGlvbiBvKHQsZSxyKXt0LnNldChlLHIpfWZ1bmN0aW9uIHMoKXt9dmFyIGw9ci5wcm90b3R5cGU7ZnVuY3Rpb24gYyh0LGUpe3ZhciByPW5ldyBzO2lmKHQgaW5zdGFuY2VvZiBzKXQuZWFjaChmdW5jdGlvbih0KXtyLmFkZCh0KX0pO2Vsc2UgaWYodCl7dmFyIG49LTEsaT10Lmxlbmd0aDtpZihudWxsPT1lKWZvcig7KytuPGk7KXIuYWRkKHRbbl0pO2Vsc2UgZm9yKDsrK248aTspci5hZGQoZSh0W25dLG4sdCkpfXJldHVybiByfXMucHJvdG90eXBlPWMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzLGhhczpsLmhhcyxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbXCIkXCIrKHQrPVwiXCIpXT10LHRoaXN9LHJlbW92ZTpsLnJlbW92ZSxjbGVhcjpsLmNsZWFyLHZhbHVlczpsLmtleXMsc2l6ZTpsLnNpemUsZW1wdHk6bC5lbXB0eSxlYWNoOmwuZWFjaH07dC5uZXN0PWZ1bmN0aW9uKCl7dmFyIHQsZSxzLGw9W10sYz1bXTtmdW5jdGlvbiB1KG4saSxhLG8pe2lmKGk+PWwubGVuZ3RoKXJldHVybiBudWxsIT10JiZuLnNvcnQodCksbnVsbCE9ZT9lKG4pOm47Zm9yKHZhciBzLGMsaCxmPS0xLHA9bi5sZW5ndGgsZD1sW2krK10sZz1yKCksdj1hKCk7KytmPHA7KShoPWcuZ2V0KHM9ZChjPW5bZl0pK1wiXCIpKT9oLnB1c2goYyk6Zy5zZXQocyxbY10pO3JldHVybiBnLmVhY2goZnVuY3Rpb24odCxlKXtvKHYsZSx1KHQsaSxhLG8pKX0pLHZ9cmV0dXJuIHM9e29iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdSh0LDAsbixpKX0sbWFwOmZ1bmN0aW9uKHQpe3JldHVybiB1KHQsMCxhLG8pfSxlbnRyaWVzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbiB0KHIsbil7aWYoKytuPmwubGVuZ3RoKXJldHVybiByO3ZhciBpLGE9Y1tuLTFdO3JldHVybiBudWxsIT1lJiZuPj1sLmxlbmd0aD9pPXIuZW50cmllcygpOihpPVtdLHIuZWFjaChmdW5jdGlvbihlLHIpe2kucHVzaCh7a2V5OnIsdmFsdWVzOnQoZSxuKX0pfSkpLG51bGwhPWE/aS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEodC5rZXksZS5rZXkpfSk6aX0odSh0LDAsYSxvKSwwKX0sa2V5OmZ1bmN0aW9uKHQpe3JldHVybiBsLnB1c2godCksc30sc29ydEtleXM6ZnVuY3Rpb24odCl7cmV0dXJuIGNbbC5sZW5ndGgtMV09dCxzfSxzb3J0VmFsdWVzOmZ1bmN0aW9uKGUpe3JldHVybiB0PWUsc30scm9sbHVwOmZ1bmN0aW9uKHQpe3JldHVybiBlPXQsc319fSx0LnNldD1jLHQubWFwPXIsdC5rZXlzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaChyKTtyZXR1cm4gZX0sdC52YWx1ZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHRbcl0pO3JldHVybiBlfSx0LmVudHJpZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHtrZXk6cix2YWx1ZTp0W3JdfSk7cmV0dXJuIGV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfShcIm9iamVjdFwiPT10eXBlb2YgciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGU/cjpuLmQzPW4uZDN8fHt9KX0se31dLDE0NTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuO249dGhpcyxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKHQsZSxyKXt0LnByb3RvdHlwZT1lLnByb3RvdHlwZT1yLHIuY29uc3RydWN0b3I9dH1mdW5jdGlvbiByKHQsZSl7dmFyIHI9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciBuIGluIGUpcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIG4oKXt9dmFyIGk9XCJcXFxccyooWystXT9cXFxcZCspXFxcXHMqXCIsYT1cIlxcXFxzKihbKy1dP1xcXFxkKlxcXFwuP1xcXFxkKyg/OltlRV1bKy1dP1xcXFxkKyk/KVxcXFxzKlwiLG89XCJcXFxccyooWystXT9cXFxcZCpcXFxcLj9cXFxcZCsoPzpbZUVdWystXT9cXFxcZCspPyklXFxcXHMqXCIscz0vXiMoWzAtOWEtZl17M30pJC8sbD0vXiMoWzAtOWEtZl17Nn0pJC8sYz1uZXcgUmVnRXhwKFwiXnJnYlxcXFwoXCIrW2ksaSxpXStcIlxcXFwpJFwiKSx1PW5ldyBSZWdFeHAoXCJecmdiXFxcXChcIitbbyxvLG9dK1wiXFxcXCkkXCIpLGg9bmV3IFJlZ0V4cChcIl5yZ2JhXFxcXChcIitbaSxpLGksYV0rXCJcXFxcKSRcIiksZj1uZXcgUmVnRXhwKFwiXnJnYmFcXFxcKFwiK1tvLG8sbyxhXStcIlxcXFwpJFwiKSxwPW5ldyBSZWdFeHAoXCJeaHNsXFxcXChcIitbYSxvLG9dK1wiXFxcXCkkXCIpLGQ9bmV3IFJlZ0V4cChcIl5oc2xhXFxcXChcIitbYSxvLG8sYV0rXCJcXFxcKSRcIiksZz17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiB2KHQpe3ZhciBlO3JldHVybiB0PSh0K1wiXCIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPXMuZXhlYyh0KSk/bmV3IF8oKGU9cGFyc2VJbnQoZVsxXSwxNikpPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKDE1JmUpPDw0fDE1JmUsMSk6KGU9bC5leGVjKHQpKT9tKHBhcnNlSW50KGVbMV0sMTYpKTooZT1jLmV4ZWModCkpP25ldyBfKGVbMV0sZVsyXSxlWzNdLDEpOihlPXUuZXhlYyh0KSk/bmV3IF8oMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9aC5leGVjKHQpKT95KGVbMV0sZVsyXSxlWzNdLGVbNF0pOihlPWYuZXhlYyh0KSk/eSgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT1wLmV4ZWModCkpP2soZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1kLmV4ZWModCkpP2soZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCxlWzRdKTpnLmhhc093blByb3BlcnR5KHQpP20oZ1t0XSk6XCJ0cmFuc3BhcmVudFwiPT09dD9uZXcgXyhOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIG0odCl7cmV0dXJuIG5ldyBfKHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiB5KHQsZSxyLG4pe3JldHVybiBuPD0wJiYodD1lPXI9TmFOKSxuZXcgXyh0LGUscixuKX1mdW5jdGlvbiB4KHQpe3JldHVybiB0IGluc3RhbmNlb2Ygbnx8KHQ9dih0KSksdD9uZXcgXygodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgX31mdW5jdGlvbiBiKHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD94KHQpOm5ldyBfKHQsZSxyLG51bGw9PW4/MTpuKX1mdW5jdGlvbiBfKHQsZSxyLG4pe3RoaXMucj0rdCx0aGlzLmc9K2UsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiB3KHQpe3JldHVybigodD1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHQpfHwwKSkpPDE2P1wiMFwiOlwiXCIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIGsodCxlLHIsbil7cmV0dXJuIG48PTA/dD1lPXI9TmFOOnI8PTB8fHI+PTE/dD1lPU5hTjplPD0wJiYodD1OYU4pLG5ldyBUKHQsZSxyLG4pfWZ1bmN0aW9uIEEodCxlLHIsaSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2Z1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBUKXJldHVybiBuZXcgVCh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBufHwodD12KHQpKSwhdClyZXR1cm4gbmV3IFQ7aWYodCBpbnN0YW5jZW9mIFQpcmV0dXJuIHQ7dmFyIGU9KHQ9dC5yZ2IoKSkuci8yNTUscj10LmcvMjU1LGk9dC5iLzI1NSxhPU1hdGgubWluKGUscixpKSxvPU1hdGgubWF4KGUscixpKSxzPU5hTixsPW8tYSxjPShvK2EpLzI7cmV0dXJuIGw/KHM9ZT09PW8/KHItaSkvbCs2KihyPGkpOnI9PT1vPyhpLWUpL2wrMjooZS1yKS9sKzQsbC89YzwuNT9vK2E6Mi1vLWEscyo9NjApOmw9Yz4wJiZjPDE/MDpzLG5ldyBUKHMsbCxjLHQub3BhY2l0eSl9KHQpOm5ldyBUKHQsZSxyLG51bGw9PWk/MTppKX1mdW5jdGlvbiBUKHQsZSxyLG4pe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBNKHQsZSxyKXtyZXR1cm4gMjU1Kih0PDYwP2UrKHItZSkqdC82MDp0PDE4MD9yOnQ8MjQwP2UrKHItZSkqKDI0MC10KS82MDplKX1lKG4sdix7ZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5oZXgoKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKStcIlwifX0pLGUoXyxiLHIobix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IF8odGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IF8odGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PXRoaXMuciYmdGhpcy5yPD0yNTUmJjA8PXRoaXMuZyYmdGhpcy5nPD0yNTUmJjA8PXRoaXMuYiYmdGhpcy5iPD0yNTUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6ZnVuY3Rpb24oKXtyZXR1cm5cIiNcIit3KHRoaXMucikrdyh0aGlzLmcpK3codGhpcy5iKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpP1wicmdiKFwiOlwicmdiYShcIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrXCIsIFwiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpK1wiLCBcIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoMT09PXQ/XCIpXCI6XCIsIFwiK3QrXCIpXCIpfX0pKSxlKFQsQSxyKG4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBUKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IFQodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGU9aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSplLGk9MipyLW47cmV0dXJuIG5ldyBfKE0odD49MjQwP3QtMjQwOnQrMTIwLGksbiksTSh0LGksbiksTSh0PDEyMD90KzI0MDp0LTEyMCxpLG4pLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfX0pKTt2YXIgUz1NYXRoLlBJLzE4MCxFPTE4MC9NYXRoLlBJLEM9Ljk2NDIyLEw9MSx6PS44MjUyMSxPPTQvMjksST02LzI5LEQ9MypJKkksUD1JKkkqSTtmdW5jdGlvbiBSKHQpe2lmKHQgaW5zdGFuY2VvZiBCKXJldHVybiBuZXcgQih0LmwsdC5hLHQuYix0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBHKXtpZihpc05hTih0LmgpKXJldHVybiBuZXcgQih0LmwsMCwwLHQub3BhY2l0eSk7dmFyIGU9dC5oKlM7cmV0dXJuIG5ldyBCKHQubCxNYXRoLmNvcyhlKSp0LmMsTWF0aC5zaW4oZSkqdC5jLHQub3BhY2l0eSl9dCBpbnN0YW5jZW9mIF98fCh0PXgodCkpO3ZhciByLG4saT1VKHQuciksYT1VKHQuZyksbz1VKHQuYikscz1OKCguMjIyNTA0NSppKy43MTY4Nzg2KmErLjA2MDYxNjkqbykvTCk7cmV0dXJuIGk9PT1hJiZhPT09bz9yPW49czoocj1OKCguNDM2MDc0NyppKy4zODUwNjQ5KmErLjE0MzA4MDQqbykvQyksbj1OKCguMDEzOTMyMippKy4wOTcxMDQ1KmErLjcxNDE3MzMqbykveikpLG5ldyBCKDExNipzLTE2LDUwMCooci1zKSwyMDAqKHMtbiksdC5vcGFjaXR5KX1mdW5jdGlvbiBGKHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9SKHQpOm5ldyBCKHQsZSxyLG51bGw9PW4/MTpuKX1mdW5jdGlvbiBCKHQsZSxyLG4pe3RoaXMubD0rdCx0aGlzLmE9K2UsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBOKHQpe3JldHVybiB0PlA/TWF0aC5wb3codCwxLzMpOnQvRCtPfWZ1bmN0aW9uIGoodCl7cmV0dXJuIHQ+ST90KnQqdDpEKih0LU8pfWZ1bmN0aW9uIFYodCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiBVKHQpe3JldHVybih0Lz0yNTUpPD0uMDQwNDU/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIHEodCl7aWYodCBpbnN0YW5jZW9mIEcpcmV0dXJuIG5ldyBHKHQuaCx0LmMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIEJ8fCh0PVIodCkpLDA9PT10LmEmJjA9PT10LmIpcmV0dXJuIG5ldyBHKE5hTiwwLHQubCx0Lm9wYWNpdHkpO3ZhciBlPU1hdGguYXRhbjIodC5iLHQuYSkqRTtyZXR1cm4gbmV3IEcoZTwwP2UrMzYwOmUsTWF0aC5zcXJ0KHQuYSp0LmErdC5iKnQuYiksdC5sLHQub3BhY2l0eSl9ZnVuY3Rpb24gSCh0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/cSh0KTpuZXcgRyh0LGUscixudWxsPT1uPzE6bil9ZnVuY3Rpb24gRyh0LGUscixuKXt0aGlzLmg9K3QsdGhpcy5jPStlLHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZShCLEYscihuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEIodGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBCKHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9KHRoaXMubCsxNikvMTE2LGU9aXNOYU4odGhpcy5hKT90OnQrdGhpcy5hLzUwMCxyPWlzTmFOKHRoaXMuYik/dDp0LXRoaXMuYi8yMDA7cmV0dXJuIG5ldyBfKFYoMy4xMzM4NTYxKihlPUMqaihlKSktMS42MTY4NjY3Kih0PUwqaih0KSktLjQ5MDYxNDYqKHI9eipqKHIpKSksVigtLjk3ODc2ODQqZSsxLjkxNjE0MTUqdCsuMDMzNDU0KnIpLFYoLjA3MTk0NTMqZS0uMjI4OTkxNCp0KzEuNDA1MjQyNypyKSx0aGlzLm9wYWNpdHkpfX0pKSxlKEcsSCxyKG4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRyh0aGlzLmgsdGhpcy5jLHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEcodGhpcy5oLHRoaXMuYyx0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gUih0aGlzKS5yZ2IoKX19KSk7dmFyIFk9LS4xNDg2MSxXPTEuNzgyNzcsWD0tLjI5MjI3LFo9LS45MDY0OSwkPTEuOTcyOTQsSj0kKlosSz0kKlcsUT1XKlgtWipZO2Z1bmN0aW9uIHR0KHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgZXQpcmV0dXJuIG5ldyBldCh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO3QgaW5zdGFuY2VvZiBffHwodD14KHQpKTt2YXIgZT10LnIvMjU1LHI9dC5nLzI1NSxuPXQuYi8yNTUsaT0oUSpuK0oqZS1LKnIpLyhRK0otSyksYT1uLWksbz0oJCooci1pKS1YKmEpL1oscz1NYXRoLnNxcnQobypvK2EqYSkvKCQqaSooMS1pKSksbD1zP01hdGguYXRhbjIobyxhKSpFLTEyMDpOYU47cmV0dXJuIG5ldyBldChsPDA/bCszNjA6bCxzLGksdC5vcGFjaXR5KX0odCk6bmV3IGV0KHQsZSxyLG51bGw9PW4/MTpuKX1mdW5jdGlvbiBldCh0LGUscixuKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZShldCx0dCxyKG4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBldCh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBldCh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqUyxlPSt0aGlzLmwscj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKmUqKDEtZSksbj1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiBuZXcgXygyNTUqKGUrciooWSpuK1cqaSkpLDI1NSooZStyKihYKm4rWippKSksMjU1KihlK3IqKCQqbikpLHRoaXMub3BhY2l0eSl9fSkpLHQuY29sb3I9dix0LnJnYj1iLHQuaHNsPUEsdC5sYWI9Rix0LmhjbD1ILHQubGNoPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9xKHQpOm5ldyBHKHIsZSx0LG51bGw9PW4/MTpuKX0sdC5ncmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBCKHQsMCwwLG51bGw9PWU/MTplKX0sdC5jdWJlaGVsaXg9dHQsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9KFwib2JqZWN0XCI9PXR5cGVvZiByJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZT9yOm4uZDM9bi5kM3x8e30pfSx7fV0sMTQ2OltmdW5jdGlvbih0LGUscil7dmFyIG47bj10aGlzLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO3ZhciBlPXt2YWx1ZTpmdW5jdGlvbigpe319O2Z1bmN0aW9uIHIoKXtmb3IodmFyIHQsZT0wLHI9YXJndW1lbnRzLmxlbmd0aCxpPXt9O2U8cjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rXCJcIil8fHQgaW4gaSl0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIHR5cGU6IFwiK3QpO2lbdF09W119cmV0dXJuIG5ldyBuKGkpfWZ1bmN0aW9uIG4odCl7dGhpcy5fPXR9ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgcixuPTAsaT10Lmxlbmd0aDtuPGk7KytuKWlmKChyPXRbbl0pLm5hbWU9PT1lKXJldHVybiByLnZhbHVlfWZ1bmN0aW9uIGEodCxyLG4pe2Zvcih2YXIgaT0wLGE9dC5sZW5ndGg7aTxhOysraSlpZih0W2ldLm5hbWU9PT1yKXt0W2ldPWUsdD10LnNsaWNlKDAsaSkuY29uY2F0KHQuc2xpY2UoaSsxKSk7YnJlYWt9cmV0dXJuIG51bGwhPW4mJnQucHVzaCh7bmFtZTpyLHZhbHVlOm59KSx0fW4ucHJvdG90eXBlPXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpuLG9uOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbixvPXRoaXMuXyxzPShuPW8sKHQrXCJcIikudHJpbSgpLnNwbGl0KC9efFxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIGU9XCJcIixyPXQuaW5kZXhPZihcIi5cIik7aWYocj49MCYmKGU9dC5zbGljZShyKzEpLHQ9dC5zbGljZSgwLHIpKSx0JiYhbi5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiK3QpO3JldHVybnt0eXBlOnQsbmFtZTplfX0pKSxsPS0xLGM9cy5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgY2FsbGJhY2s6IFwiK2UpO2Zvcig7KytsPGM7KWlmKHI9KHQ9c1tsXSkudHlwZSlvW3JdPWEob1tyXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihyIGluIG8pb1tyXT1hKG9bcl0sdC5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KytsPGM7KWlmKChyPSh0PXNbbF0pLnR5cGUpJiYocj1pKG9bcl0sdC5uYW1lKSkpcmV0dXJuIHJ9LGNvcHk6ZnVuY3Rpb24oKXt2YXIgdD17fSxlPXRoaXMuXztmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl0uc2xpY2UoKTtyZXR1cm4gbmV3IG4odCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigocj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByLG4saT1uZXcgQXJyYXkociksYT0wO2E8cjsrK2EpaVthXT1hcmd1bWVudHNbYSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIrdCk7Zm9yKGE9MCxyPShuPXRoaXMuX1t0XSkubGVuZ3RoO2E8cjsrK2EpblthXS52YWx1ZS5hcHBseShlLGkpfSxhcHBseTpmdW5jdGlvbih0LGUscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiK3QpO2Zvcih2YXIgbj10aGlzLl9bdF0saT0wLGE9bi5sZW5ndGg7aTxhOysraSluW2ldLnZhbHVlLmFwcGx5KGUscil9fSx0LmRpc3BhdGNoPXIsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9KFwib2JqZWN0XCI9PXR5cGVvZiByJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZT9yOm4uZDM9bi5kM3x8e30pfSx7fV0sMTQ3OltmdW5jdGlvbih0LGUscil7dmFyIG4saTtuPXRoaXMsaT1mdW5jdGlvbih0LGUscixuLGkpe1widXNlIHN0cmljdFwiO3ZhciBhPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sbz1mdW5jdGlvbigpe3JldHVybiAxZS02KihNYXRoLnJhbmRvbSgpLS41KX07ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdC54K3Qudnh9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdC55K3Qudnl9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9dC5nZXQoZSk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKFwibWlzc2luZzogXCIrZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQueX12YXIgcD0xMCxkPU1hdGguUEkqKDMtTWF0aC5zcXJ0KDUpKTt0LmZvcmNlQ2VudGVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI7ZnVuY3Rpb24gbigpe3ZhciBuLGksYT1yLmxlbmd0aCxvPTAscz0wO2ZvcihuPTA7bjxhOysrbilvKz0oaT1yW25dKS54LHMrPWkueTtmb3Iobz1vL2EtdCxzPXMvYS1lLG49MDtuPGE7KytuKShpPXJbbl0pLngtPW8saS55LT1zfXJldHVybiBudWxsPT10JiYodD0wKSxudWxsPT1lJiYoZT0wKSxuLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7cj10fSxuLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2Usbik6dH0sbi55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LG4pOmV9LG59LHQuZm9yY2VDb2xsaWRlPWZ1bmN0aW9uKHQpe3ZhciByLG4saT0xLGM9MTtmdW5jdGlvbiB1KCl7Zm9yKHZhciB0LGEsdSxmLHAsZCxnLHY9ci5sZW5ndGgsbT0wO208YzsrK20pZm9yKGE9ZS5xdWFkdHJlZShyLHMsbCkudmlzaXRBZnRlcihoKSx0PTA7dDx2OysrdCl1PXJbdF0sZD1uW3UuaW5kZXhdLGc9ZCpkLGY9dS54K3UudngscD11LnkrdS52eSxhLnZpc2l0KHkpO2Z1bmN0aW9uIHkodCxlLHIsbixhKXt2YXIgcz10LmRhdGEsbD10LnIsYz1kK2w7aWYoIXMpcmV0dXJuIGU+ZitjfHxuPGYtY3x8cj5wK2N8fGE8cC1jO2lmKHMuaW5kZXg+dS5pbmRleCl7dmFyIGg9Zi1zLngtcy52eCx2PXAtcy55LXMudnksbT1oKmgrdip2O208YypjJiYoMD09PWgmJihtKz0oaD1vKCkpKmgpLDA9PT12JiYobSs9KHY9bygpKSp2KSxtPShjLShtPU1hdGguc3FydChtKSkpL20qaSx1LnZ4Kz0oaCo9bSkqKGM9KGwqPWwpLyhnK2wpKSx1LnZ5Kz0odio9bSkqYyxzLnZ4LT1oKihjPTEtYykscy52eS09dipjKX19fWZ1bmN0aW9uIGgodCl7aWYodC5kYXRhKXJldHVybiB0LnI9blt0LmRhdGEuaW5kZXhdO2Zvcih2YXIgZT10LnI9MDtlPDQ7KytlKXRbZV0mJnRbZV0ucj50LnImJih0LnI9dFtlXS5yKX1mdW5jdGlvbiBmKCl7aWYocil7dmFyIGUsaSxhPXIubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShhKSxlPTA7ZTxhOysrZSlpPXJbZV0sbltpLmluZGV4XT0rdChpLGUscil9fXJldHVyblwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJih0PWEobnVsbD09dD8xOit0KSksdS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe3I9dCxmKCl9LHUuaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdCx1KTpjfSx1LnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LHUpOml9LHUucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTphKCtlKSxmKCksdSk6dH0sdX0sdC5mb3JjZUxpbms9ZnVuY3Rpb24odCl7dmFyIGUsbixpLHMsbCxoPWMsZj1mdW5jdGlvbih0KXtyZXR1cm4gMS9NYXRoLm1pbihzW3Quc291cmNlLmluZGV4XSxzW3QudGFyZ2V0LmluZGV4XSl9LHA9YSgzMCksZD0xO2Z1bmN0aW9uIGcocil7Zm9yKHZhciBpPTAsYT10Lmxlbmd0aDtpPGQ7KytpKWZvcih2YXIgcyxjLHUsaCxmLHAsZyx2PTA7djxhOysrdiljPShzPXRbdl0pLnNvdXJjZSxoPSh1PXMudGFyZ2V0KS54K3UudngtYy54LWMudnh8fG8oKSxmPXUueSt1LnZ5LWMueS1jLnZ5fHxvKCksaCo9cD0oKHA9TWF0aC5zcXJ0KGgqaCtmKmYpKS1uW3ZdKS9wKnIqZVt2XSxmKj1wLHUudngtPWgqKGc9bFt2XSksdS52eS09ZipnLGMudngrPWgqKGc9MS1nKSxjLnZ5Kz1mKmd9ZnVuY3Rpb24gdigpe2lmKGkpe3ZhciBhLG8sYz1pLmxlbmd0aCxmPXQubGVuZ3RoLHA9ci5tYXAoaSxoKTtmb3IoYT0wLHM9bmV3IEFycmF5KGMpO2E8ZjsrK2EpKG89dFthXSkuaW5kZXg9YSxcIm9iamVjdFwiIT10eXBlb2Ygby5zb3VyY2UmJihvLnNvdXJjZT11KHAsby5zb3VyY2UpKSxcIm9iamVjdFwiIT10eXBlb2Ygby50YXJnZXQmJihvLnRhcmdldD11KHAsby50YXJnZXQpKSxzW28uc291cmNlLmluZGV4XT0oc1tvLnNvdXJjZS5pbmRleF18fDApKzEsc1tvLnRhcmdldC5pbmRleF09KHNbby50YXJnZXQuaW5kZXhdfHwwKSsxO2ZvcihhPTAsbD1uZXcgQXJyYXkoZik7YTxmOysrYSlvPXRbYV0sbFthXT1zW28uc291cmNlLmluZGV4XS8oc1tvLnNvdXJjZS5pbmRleF0rc1tvLnRhcmdldC5pbmRleF0pO2U9bmV3IEFycmF5KGYpLG0oKSxuPW5ldyBBcnJheShmKSx5KCl9fWZ1bmN0aW9uIG0oKXtpZihpKWZvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuOysrcillW3JdPStmKHRbcl0scix0KX1mdW5jdGlvbiB5KCl7aWYoaSlmb3IodmFyIGU9MCxyPXQubGVuZ3RoO2U8cjsrK2UpbltlXT0rcCh0W2VdLGUsdCl9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxnLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7aT10LHYoKX0sZy5saW5rcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLHYoKSxnKTp0fSxnLmlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXQsZyk6aH0sZy5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSt0LGcpOmR9LGcuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OmEoK3QpLG0oKSxnKTpmfSxnLmRpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDphKCt0KSx5KCksZyk6cH0sZ30sdC5mb3JjZU1hbnlCb2R5PWZ1bmN0aW9uKCl7dmFyIHQscixuLGkscz1hKC0zMCksbD0xLGM9MS8wLHU9LjgxO2Z1bmN0aW9uIHAoaSl7dmFyIGEsbz10Lmxlbmd0aCxzPWUucXVhZHRyZWUodCxoLGYpLnZpc2l0QWZ0ZXIoZyk7Zm9yKG49aSxhPTA7YTxvOysrYSlyPXRbYV0scy52aXNpdCh2KX1mdW5jdGlvbiBkKCl7aWYodCl7dmFyIGUscixuPXQubGVuZ3RoO2ZvcihpPW5ldyBBcnJheShuKSxlPTA7ZTxuOysrZSlyPXRbZV0saVtyLmluZGV4XT0rcyhyLGUsdCl9fWZ1bmN0aW9uIGcodCl7dmFyIGUscixuLGEsbyxzPTAsbD0wO2lmKHQubGVuZ3RoKXtmb3Iobj1hPW89MDtvPDQ7KytvKShlPXRbb10pJiYocj1NYXRoLmFicyhlLnZhbHVlKSkmJihzKz1lLnZhbHVlLGwrPXIsbis9ciplLngsYSs9ciplLnkpO3QueD1uL2wsdC55PWEvbH1lbHNleyhlPXQpLng9ZS5kYXRhLngsZS55PWUuZGF0YS55O2Rve3MrPWlbZS5kYXRhLmluZGV4XX13aGlsZShlPWUubmV4dCl9dC52YWx1ZT1zfWZ1bmN0aW9uIHYodCxlLGEscyl7aWYoIXQudmFsdWUpcmV0dXJuITA7dmFyIGg9dC54LXIueCxmPXQueS1yLnkscD1zLWUsZD1oKmgrZipmO2lmKHAqcC91PGQpcmV0dXJuIGQ8YyYmKDA9PT1oJiYoZCs9KGg9bygpKSpoKSwwPT09ZiYmKGQrPShmPW8oKSkqZiksZDxsJiYoZD1NYXRoLnNxcnQobCpkKSksci52eCs9aCp0LnZhbHVlKm4vZCxyLnZ5Kz1mKnQudmFsdWUqbi9kKSwhMDtpZighKHQubGVuZ3RofHxkPj1jKSl7KHQuZGF0YSE9PXJ8fHQubmV4dCkmJigwPT09aCYmKGQrPShoPW8oKSkqaCksMD09PWYmJihkKz0oZj1vKCkpKmYpLGQ8bCYmKGQ9TWF0aC5zcXJ0KGwqZCkpKTtkb3t0LmRhdGEhPT1yJiYocD1pW3QuZGF0YS5pbmRleF0qbi9kLHIudngrPWgqcCxyLnZ5Kz1mKnApfXdoaWxlKHQ9dC5uZXh0KX19cmV0dXJuIHAuaW5pdGlhbGl6ZT1mdW5jdGlvbihlKXt0PWUsZCgpfSxwLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDphKCt0KSxkKCkscCk6c30scC5kaXN0YW5jZU1pbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10KnQscCk6TWF0aC5zcXJ0KGwpfSxwLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQqdCxwKTpNYXRoLnNxcnQoYyl9LHAudGhldGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCp0LHApOk1hdGguc3FydCh1KX0scH0sdC5mb3JjZVJhZGlhbD1mdW5jdGlvbih0LGUscil7dmFyIG4saSxvLHM9YSguMSk7ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2Epe3ZhciBsPW5bYV0sYz1sLngtZXx8MWUtNix1PWwueS1yfHwxZS02LGg9TWF0aC5zcXJ0KGMqYyt1KnUpLGY9KG9bYV0taCkqaVthXSp0L2g7bC52eCs9YypmLGwudnkrPXUqZn19ZnVuY3Rpb24gYygpe2lmKG4pe3ZhciBlLHI9bi5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLGU9MDtlPHI7KytlKW9bZV09K3QobltlXSxlLG4pLGlbZV09aXNOYU4ob1tlXSk/MDorcyhuW2VdLGUsbil9fXJldHVyblwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJih0PWEoK3QpKSxudWxsPT1lJiYoZT0wKSxudWxsPT1yJiYocj0wKSxsLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7bj10LGMoKX0sbC5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6YSgrdCksYygpLGwpOnN9LGwucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTphKCtlKSxjKCksbCk6dH0sbC54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LGwpOmV9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxsKTpyfSxsfSx0LmZvcmNlU2ltdWxhdGlvbj1mdW5jdGlvbih0KXt2YXIgZSxhPTEsbz0uMDAxLHM9MS1NYXRoLnBvdyhvLDEvMzAwKSxsPTAsYz0uNix1PXIubWFwKCksaD1pLnRpbWVyKGcpLGY9bi5kaXNwYXRjaChcInRpY2tcIixcImVuZFwiKTtmdW5jdGlvbiBnKCl7digpLGYuY2FsbChcInRpY2tcIixlKSxhPG8mJihoLnN0b3AoKSxmLmNhbGwoXCJlbmRcIixlKSl9ZnVuY3Rpb24gdigpe3ZhciBlLHIsbj10Lmxlbmd0aDtmb3IoYSs9KGwtYSkqcyx1LmVhY2goZnVuY3Rpb24odCl7dChhKX0pLGU9MDtlPG47KytlKW51bGw9PShyPXRbZV0pLmZ4P3IueCs9ci52eCo9Yzooci54PXIuZngsci52eD0wKSxudWxsPT1yLmZ5P3IueSs9ci52eSo9Yzooci55PXIuZnksci52eT0wKX1mdW5jdGlvbiBtKCl7Zm9yKHZhciBlLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3Ipe2lmKChlPXRbcl0pLmluZGV4PXIsaXNOYU4oZS54KXx8aXNOYU4oZS55KSl7dmFyIGk9cCpNYXRoLnNxcnQociksYT1yKmQ7ZS54PWkqTWF0aC5jb3MoYSksZS55PWkqTWF0aC5zaW4oYSl9KGlzTmFOKGUudngpfHxpc05hTihlLnZ5KSkmJihlLnZ4PWUudnk9MCl9fWZ1bmN0aW9uIHkoZSl7cmV0dXJuIGUuaW5pdGlhbGl6ZSYmZS5pbml0aWFsaXplKHQpLGV9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxtKCksZT17dGljazp2LHJlc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gaC5yZXN0YXJ0KGcpLGV9LHN0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gaC5zdG9wKCksZX0sbm9kZXM6ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9cixtKCksdS5lYWNoKHkpLGUpOnR9LGFscGhhOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LGUpOmF9LGFscGhhTWluOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LGUpOm99LGFscGhhRGVjYXk6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsZSk6K3N9LGFscGhhVGFyZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSt0LGUpOmx9LHZlbG9jaXR5RGVjYXk6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9MS10LGUpOjEtY30sZm9yY2U6ZnVuY3Rpb24odCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhudWxsPT1yP3UucmVtb3ZlKHQpOnUuc2V0KHQseShyKSksZSk6dS5nZXQodCl9LGZpbmQ6ZnVuY3Rpb24oZSxyLG4pe3ZhciBpLGEsbyxzLGwsYz0wLHU9dC5sZW5ndGg7Zm9yKG51bGw9PW4/bj0xLzA6bio9bixjPTA7Yzx1OysrYykobz0oaT1lLShzPXRbY10pLngpKmkrKGE9ci1zLnkpKmEpPG4mJihsPXMsbj1vKTtyZXR1cm4gbH0sb246ZnVuY3Rpb24odCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhmLm9uKHQsciksZSk6Zi5vbih0KX19fSx0LmZvcmNlWD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT1hKC4xKTtmdW5jdGlvbiBvKHQpe2Zvcih2YXIgaSxhPTAsbz1lLmxlbmd0aDthPG87KythKShpPWVbYV0pLnZ4Kz0oblthXS1pLngpKnJbYV0qdH1mdW5jdGlvbiBzKCl7aWYoZSl7dmFyIGEsbz1lLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobyksbj1uZXcgQXJyYXkobyksYT0wO2E8bzsrK2EpclthXT1pc05hTihuW2FdPSt0KGVbYV0sYSxlKSk/MDoraShlW2FdLGEsZSl9fXJldHVyblwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJih0PWEobnVsbD09dD8wOit0KSksby5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2U9dCxzKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OmEoK3QpLHMoKSxvKTppfSxvLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOmEoK2UpLHMoKSxvKTp0fSxvfSx0LmZvcmNlWT1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT1hKC4xKTtmdW5jdGlvbiBvKHQpe2Zvcih2YXIgaSxhPTAsbz1lLmxlbmd0aDthPG87KythKShpPWVbYV0pLnZ5Kz0oblthXS1pLnkpKnJbYV0qdH1mdW5jdGlvbiBzKCl7aWYoZSl7dmFyIGEsbz1lLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobyksbj1uZXcgQXJyYXkobyksYT0wO2E8bzsrK2EpclthXT1pc05hTihuW2FdPSt0KGVbYV0sYSxlKSk/MDoraShlW2FdLGEsZSl9fXJldHVyblwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJih0PWEobnVsbD09dD8wOit0KSksby5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2U9dCxzKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OmEoK3QpLHMoKSxvKTppfSxvLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOmEoK2UpLHMoKSxvKTp0fSxvfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sXCJvYmplY3RcIj09dHlwZW9mIHImJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBlP2kocix0KFwiZDMtcXVhZHRyZWVcIiksdChcImQzLWNvbGxlY3Rpb25cIiksdChcImQzLWRpc3BhdGNoXCIpLHQoXCJkMy10aW1lclwiKSk6aShuLmQzPW4uZDN8fHt9LG4uZDMsbi5kMyxuLmQzLG4uZDMpfSx7XCJkMy1jb2xsZWN0aW9uXCI6MTQ0LFwiZDMtZGlzcGF0Y2hcIjoxNDYsXCJkMy1xdWFkdHJlZVwiOjE1MSxcImQzLXRpbWVyXCI6MTU0fV0sMTQ4OltmdW5jdGlvbih0LGUscil7dmFyIG47bj10aGlzLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUodCxlKXtyZXR1cm4gdC5wYXJlbnQ9PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gcih0LGUpe3JldHVybiB0K2UueH1mdW5jdGlvbiBuKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsZS55KX1mdW5jdGlvbiBpKHQpe3ZhciBlPTAscj10LmNoaWxkcmVuLG49ciYmci5sZW5ndGg7aWYobilmb3IoOy0tbj49MDspZSs9cltuXS52YWx1ZTtlbHNlIGU9MTt0LnZhbHVlPWV9ZnVuY3Rpb24gYSh0LGUpe3ZhciByLG4saSxhLHMsdT1uZXcgYyh0KSxoPSt0LnZhbHVlJiYodS52YWx1ZT10LnZhbHVlKSxmPVt1XTtmb3IobnVsbD09ZSYmKGU9byk7cj1mLnBvcCgpOylpZihoJiYoci52YWx1ZT0rci5kYXRhLnZhbHVlKSwoaT1lKHIuZGF0YSkpJiYocz1pLmxlbmd0aCkpZm9yKHIuY2hpbGRyZW49bmV3IEFycmF5KHMpLGE9cy0xO2E+PTA7LS1hKWYucHVzaChuPXIuY2hpbGRyZW5bYV09bmV3IGMoaVthXSkpLG4ucGFyZW50PXIsbi5kZXB0aD1yLmRlcHRoKzE7cmV0dXJuIHUuZWFjaEJlZm9yZShsKX1mdW5jdGlvbiBvKHQpe3JldHVybiB0LmNoaWxkcmVufWZ1bmN0aW9uIHModCl7dC5kYXRhPXQuZGF0YS5kYXRhfWZ1bmN0aW9uIGwodCl7dmFyIGU9MDtkb3t0LmhlaWdodD1lfXdoaWxlKCh0PXQucGFyZW50KSYmdC5oZWlnaHQ8KytlKX1mdW5jdGlvbiBjKHQpe3RoaXMuZGF0YT10LHRoaXMuZGVwdGg9dGhpcy5oZWlnaHQ9MCx0aGlzLnBhcmVudD1udWxsfWMucHJvdG90eXBlPWEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjLGNvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKGkpfSxlYWNoOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9dGhpcyxvPVthXTtkb3tmb3IoZT1vLnJldmVyc2UoKSxvPVtdO2E9ZS5wb3AoKTspaWYodChhKSxyPWEuY2hpbGRyZW4pZm9yKG49MCxpPXIubGVuZ3RoO248aTsrK24pby5wdXNoKHJbbl0pfXdoaWxlKG8ubGVuZ3RoKTtyZXR1cm4gdGhpc30sZWFjaEFmdGVyOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saT10aGlzLGE9W2ldLG89W107aT1hLnBvcCgpOylpZihvLnB1c2goaSksZT1pLmNoaWxkcmVuKWZvcihyPTAsbj1lLmxlbmd0aDtyPG47KytyKWEucHVzaChlW3JdKTtmb3IoO2k9by5wb3AoKTspdChpKTtyZXR1cm4gdGhpc30sZWFjaEJlZm9yZTpmdW5jdGlvbih0KXtmb3IodmFyIGUscixuPXRoaXMsaT1bbl07bj1pLnBvcCgpOylpZih0KG4pLGU9bi5jaGlsZHJlbilmb3Iocj1lLmxlbmd0aC0xO3I+PTA7LS1yKWkucHVzaChlW3JdKTtyZXR1cm4gdGhpc30sc3VtOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hBZnRlcihmdW5jdGlvbihlKXtmb3IodmFyIHI9K3QoZS5kYXRhKXx8MCxuPWUuY2hpbGRyZW4saT1uJiZuLmxlbmd0aDstLWk+PTA7KXIrPW5baV0udmFsdWU7ZS52YWx1ZT1yfSl9LHNvcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaEJlZm9yZShmdW5jdGlvbihlKXtlLmNoaWxkcmVuJiZlLmNoaWxkcmVuLnNvcnQodCl9KX0scGF0aDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxyPWZ1bmN0aW9uKHQsZSl7aWYodD09PWUpcmV0dXJuIHQ7dmFyIHI9dC5hbmNlc3RvcnMoKSxuPWUuYW5jZXN0b3JzKCksaT1udWxsO2Zvcih0PXIucG9wKCksZT1uLnBvcCgpO3Q9PT1lOylpPXQsdD1yLnBvcCgpLGU9bi5wb3AoKTtyZXR1cm4gaX0oZSx0KSxuPVtlXTtlIT09cjspZT1lLnBhcmVudCxuLnB1c2goZSk7Zm9yKHZhciBpPW4ubGVuZ3RoO3QhPT1yOyluLnNwbGljZShpLDAsdCksdD10LnBhcmVudDtyZXR1cm4gbn0sYW5jZXN0b3JzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1bdF07dD10LnBhcmVudDspZS5wdXNoKHQpO3JldHVybiBlfSxkZXNjZW5kYW50czpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZSl7dC5wdXNoKGUpfSksdH0sbGVhdmVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaEJlZm9yZShmdW5jdGlvbihlKXtlLmNoaWxkcmVufHx0LnB1c2goZSl9KSx0fSxsaW5rczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1bXTtyZXR1cm4gdC5lYWNoKGZ1bmN0aW9uKHIpe3IhPT10JiZlLnB1c2goe3NvdXJjZTpyLnBhcmVudCx0YXJnZXQ6cn0pfSksZX0sY29weTpmdW5jdGlvbigpe3JldHVybiBhKHRoaXMpLmVhY2hCZWZvcmUocyl9fTt2YXIgdT1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gaCh0KXtmb3IodmFyIGUscixuPTAsaT0odD1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuPXQubGVuZ3RoO247KXI9TWF0aC5yYW5kb20oKSpuLS18MCxlPXRbbl0sdFtuXT10W3JdLHRbcl09ZTtyZXR1cm4gdH0odS5jYWxsKHQpKSkubGVuZ3RoLGE9W107bjxpOyllPXRbbl0sciYmZChyLGUpPysrbjoocj12KGE9ZihhLGUpKSxuPTApO3JldHVybiByfWZ1bmN0aW9uIGYodCxlKXt2YXIgcixuO2lmKGcoZSx0KSlyZXR1cm5bZV07Zm9yKHI9MDtyPHQubGVuZ3RoOysrcilpZihwKGUsdFtyXSkmJmcobSh0W3JdLGUpLHQpKXJldHVyblt0W3JdLGVdO2ZvcihyPTA7cjx0Lmxlbmd0aC0xOysrcilmb3Iobj1yKzE7bjx0Lmxlbmd0aDsrK24paWYocChtKHRbcl0sdFtuXSksZSkmJnAobSh0W3JdLGUpLHRbbl0pJiZwKG0odFtuXSxlKSx0W3JdKSYmZyh5KHRbcl0sdFtuXSxlKSx0KSlyZXR1cm5bdFtyXSx0W25dLGVdO3Rocm93IG5ldyBFcnJvcn1mdW5jdGlvbiBwKHQsZSl7dmFyIHI9dC5yLWUucixuPWUueC10LngsaT1lLnktdC55O3JldHVybiByPDB8fHIqcjxuKm4raSppfWZ1bmN0aW9uIGQodCxlKXt2YXIgcj10LnItZS5yKzFlLTYsbj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gcj4wJiZyKnI+bipuK2kqaX1mdW5jdGlvbiBnKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpaWYoIWQodCxlW3JdKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiB2KHQpe3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOnJldHVybnt4OihlPXRbMF0pLngseTplLnkscjplLnJ9O2Nhc2UgMjpyZXR1cm4gbSh0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4geSh0WzBdLHRbMV0sdFsyXSl9dmFyIGV9ZnVuY3Rpb24gbSh0LGUpe3ZhciByPXQueCxuPXQueSxpPXQucixhPWUueCxvPWUueSxzPWUucixsPWEtcixjPW8tbix1PXMtaSxoPU1hdGguc3FydChsKmwrYypjKTtyZXR1cm57eDoocithK2wvaCp1KS8yLHk6KG4rbytjL2gqdSkvMixyOihoK2krcykvMn19ZnVuY3Rpb24geSh0LGUscil7dmFyIG49dC54LGk9dC55LGE9dC5yLG89ZS54LHM9ZS55LGw9ZS5yLGM9ci54LHU9ci55LGg9ci5yLGY9bi1vLHA9bi1jLGQ9aS1zLGc9aS11LHY9bC1hLG09aC1hLHk9bipuK2kqaS1hKmEseD15LW8qby1zKnMrbCpsLGI9eS1jKmMtdSp1K2gqaCxfPXAqZC1mKmcsdz0oZCpiLWcqeCkvKDIqXyktbixrPShnKnYtZCptKS9fLEE9KHAqeC1mKmIpLygyKl8pLWksVD0oZiptLXAqdikvXyxNPWsqaytUKlQtMSxTPTIqKGErdyprK0EqVCksRT13KncrQSpBLWEqYSxDPS0oTT8oUytNYXRoLnNxcnQoUypTLTQqTSpFKSkvKDIqTSk6RS9TKTtyZXR1cm57eDpuK3craypDLHk6aStBK1QqQyxyOkN9fWZ1bmN0aW9uIHgodCxlLHIpe3ZhciBuLGksYSxvLHM9dC54LWUueCxsPXQueS1lLnksYz1zKnMrbCpsO2M/KGk9ZS5yK3IucixpKj1pLG89dC5yK3IucixpPihvKj1vKT8obj0oYytvLWkpLygyKmMpLGE9TWF0aC5zcXJ0KE1hdGgubWF4KDAsby9jLW4qbikpLHIueD10LngtbipzLWEqbCxyLnk9dC55LW4qbCthKnMpOihuPShjK2ktbykvKDIqYyksYT1NYXRoLnNxcnQoTWF0aC5tYXgoMCxpL2MtbipuKSksci54PWUueCtuKnMtYSpsLHIueT1lLnkrbipsK2EqcykpOihyLng9ZS54K3IucixyLnk9ZS55KX1mdW5jdGlvbiBiKHQsZSl7dmFyIHI9dC5yK2Uuci0xZS02LG49ZS54LXQueCxpPWUueS10Lnk7cmV0dXJuIHI+MCYmcipyPm4qbitpKml9ZnVuY3Rpb24gXyh0KXt2YXIgZT10Ll8scj10Lm5leHQuXyxuPWUucityLnIsaT0oZS54KnIucityLngqZS5yKS9uLGE9KGUueSpyLnIrci55KmUucikvbjtyZXR1cm4gaSppK2EqYX1mdW5jdGlvbiB3KHQpe3RoaXMuXz10LHRoaXMubmV4dD1udWxsLHRoaXMucHJldmlvdXM9bnVsbH1mdW5jdGlvbiBrKHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuIDA7dmFyIGUscixuLGksYSxvLHMsbCxjLHUsZjtpZigoZT10WzBdKS54PTAsZS55PTAsIShpPjEpKXJldHVybiBlLnI7aWYocj10WzFdLGUueD0tci5yLHIueD1lLnIsci55PTAsIShpPjIpKXJldHVybiBlLnIrci5yO3gocixlLG49dFsyXSksZT1uZXcgdyhlKSxyPW5ldyB3KHIpLG49bmV3IHcobiksZS5uZXh0PW4ucHJldmlvdXM9cixyLm5leHQ9ZS5wcmV2aW91cz1uLG4ubmV4dD1yLnByZXZpb3VzPWU7dDpmb3Iocz0zO3M8aTsrK3Mpe3goZS5fLHIuXyxuPXRbc10pLG49bmV3IHcobiksbD1yLm5leHQsYz1lLnByZXZpb3VzLHU9ci5fLnIsZj1lLl8ucjtkb3tpZih1PD1mKXtpZihiKGwuXyxuLl8pKXtyPWwsZS5uZXh0PXIsci5wcmV2aW91cz1lLC0tcztjb250aW51ZSB0fXUrPWwuXy5yLGw9bC5uZXh0fWVsc2V7aWYoYihjLl8sbi5fKSl7KGU9YykubmV4dD1yLHIucHJldmlvdXM9ZSwtLXM7Y29udGludWUgdH1mKz1jLl8ucixjPWMucHJldmlvdXN9fXdoaWxlKGwhPT1jLm5leHQpO2ZvcihuLnByZXZpb3VzPWUsbi5uZXh0PXIsZS5uZXh0PXIucHJldmlvdXM9cj1uLGE9XyhlKTsobj1uLm5leHQpIT09cjspKG89XyhuKSk8YSYmKGU9bixhPW8pO3I9ZS5uZXh0fWZvcihlPVtyLl9dLG49cjsobj1uLm5leHQpIT09cjspZS5wdXNoKG4uXyk7Zm9yKG49aChlKSxzPTA7czxpOysrcykoZT10W3NdKS54LT1uLngsZS55LT1uLnk7cmV0dXJuIG4ucn1mdW5jdGlvbiBBKHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0fWZ1bmN0aW9uIFQoKXtyZXR1cm4gMH1mdW5jdGlvbiBNKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBTKHQpe3JldHVybiBNYXRoLnNxcnQodC52YWx1ZSl9ZnVuY3Rpb24gRSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8KGUucj1NYXRoLm1heCgwLCt0KGUpfHwwKSl9fWZ1bmN0aW9uIEModCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7aWYobj1yLmNoaWxkcmVuKXt2YXIgbixpLGEsbz1uLmxlbmd0aCxzPXQocikqZXx8MDtpZihzKWZvcihpPTA7aTxvOysraSluW2ldLnIrPXM7aWYoYT1rKG4pLHMpZm9yKGk9MDtpPG87KytpKW5baV0uci09cztyLnI9YStzfX19ZnVuY3Rpb24gTCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9ZS5wYXJlbnQ7ZS5yKj10LHImJihlLng9ci54K3QqZS54LGUueT1yLnkrdCplLnkpfX1mdW5jdGlvbiB6KHQpe3QueDA9TWF0aC5yb3VuZCh0LngwKSx0LnkwPU1hdGgucm91bmQodC55MCksdC54MT1NYXRoLnJvdW5kKHQueDEpLHQueTE9TWF0aC5yb3VuZCh0LnkxKX1mdW5jdGlvbiBPKHQsZSxyLG4saSl7Zm9yKHZhciBhLG89dC5jaGlsZHJlbixzPS0xLGw9by5sZW5ndGgsYz10LnZhbHVlJiYobi1lKS90LnZhbHVlOysrczxsOykoYT1vW3NdKS55MD1yLGEueTE9aSxhLngwPWUsYS54MT1lKz1hLnZhbHVlKmN9dmFyIEk9XCIkXCIsRD17ZGVwdGg6LTF9LFA9e307ZnVuY3Rpb24gUih0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBGKHQpe3JldHVybiB0LnBhcmVudElkfWZ1bmN0aW9uIEIodCxlKXtyZXR1cm4gdC5wYXJlbnQ9PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gTih0KXt2YXIgZT10LmNoaWxkcmVuO3JldHVybiBlP2VbMF06dC50fWZ1bmN0aW9uIGoodCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZT9lW2UubGVuZ3RoLTFdOnQudH1mdW5jdGlvbiBWKHQsZSxyKXt2YXIgbj1yLyhlLmktdC5pKTtlLmMtPW4sZS5zKz1yLHQuYys9bixlLnorPXIsZS5tKz1yfWZ1bmN0aW9uIFUodCxlLHIpe3JldHVybiB0LmEucGFyZW50PT09ZS5wYXJlbnQ/dC5hOnJ9ZnVuY3Rpb24gcSh0LGUpe3RoaXMuXz10LHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1udWxsLHRoaXMuQT1udWxsLHRoaXMuYT10aGlzLHRoaXMuej0wLHRoaXMubT0wLHRoaXMuYz0wLHRoaXMucz0wLHRoaXMudD1udWxsLHRoaXMuaT1lfWZ1bmN0aW9uIEgodCxlLHIsbixpKXtmb3IodmFyIGEsbz10LmNoaWxkcmVuLHM9LTEsbD1vLmxlbmd0aCxjPXQudmFsdWUmJihpLXIpL3QudmFsdWU7KytzPGw7KShhPW9bc10pLngwPWUsYS54MT1uLGEueTA9cixhLnkxPXIrPWEudmFsdWUqY31xLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMucHJvdG90eXBlKTt2YXIgRz0oMStNYXRoLnNxcnQoNSkpLzI7ZnVuY3Rpb24gWSh0LGUscixuLGksYSl7Zm9yKHZhciBvLHMsbCxjLHUsaCxmLHAsZCxnLHYsbT1bXSx5PWUuY2hpbGRyZW4seD0wLGI9MCxfPXkubGVuZ3RoLHc9ZS52YWx1ZTt4PF87KXtsPWktcixjPWEtbjtkb3t1PXlbYisrXS52YWx1ZX13aGlsZSghdSYmYjxfKTtmb3IoaD1mPXUsdj11KnUqKGc9TWF0aC5tYXgoYy9sLGwvYykvKHcqdCkpLGQ9TWF0aC5tYXgoZi92LHYvaCk7YjxfOysrYil7aWYodSs9cz15W2JdLnZhbHVlLHM8aCYmKGg9cykscz5mJiYoZj1zKSx2PXUqdSpnLChwPU1hdGgubWF4KGYvdix2L2gpKT5kKXt1LT1zO2JyZWFrfWQ9cH1tLnB1c2gobz17dmFsdWU6dSxkaWNlOmw8YyxjaGlsZHJlbjp5LnNsaWNlKHgsYil9KSxvLmRpY2U/TyhvLHIsbixpLHc/bis9Yyp1L3c6YSk6SChvLHIsbix3P3IrPWwqdS93OmksYSksdy09dSx4PWJ9cmV0dXJuIG19dmFyIFc9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQscixuLGksYSl7WShlLHQscixuLGksYSl9cmV0dXJuIHIucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIHQoKGU9K2UpPjE/ZToxKX0scn0oRyk7dmFyIFg9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQscixuLGksYSl7aWYoKG89dC5fc3F1YXJpZnkpJiZvLnJhdGlvPT09ZSlmb3IodmFyIG8scyxsLGMsdSxoPS0xLGY9by5sZW5ndGgscD10LnZhbHVlOysraDxmOyl7Zm9yKGw9KHM9b1toXSkuY2hpbGRyZW4sYz1zLnZhbHVlPTAsdT1sLmxlbmd0aDtjPHU7KytjKXMudmFsdWUrPWxbY10udmFsdWU7cy5kaWNlP08ocyxyLG4saSxuKz0oYS1uKSpzLnZhbHVlL3ApOkgocyxyLG4scis9KGktcikqcy52YWx1ZS9wLGEpLHAtPXMudmFsdWV9ZWxzZSB0Ll9zcXVhcmlmeT1vPVkoZSx0LHIsbixpLGEpLG8ucmF0aW89ZX1yZXR1cm4gci5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gdCgoZT0rZSk+MT9lOjEpfSxyfShHKTt0LmNsdXN0ZXI9ZnVuY3Rpb24oKXt2YXIgdD1lLGk9MSxhPTEsbz0hMTtmdW5jdGlvbiBzKGUpe3ZhciBzLGw9MDtlLmVhY2hBZnRlcihmdW5jdGlvbihlKXt2YXIgaT1lLmNoaWxkcmVuO2k/KGUueD1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UociwwKS90Lmxlbmd0aH0oaSksZS55PWZ1bmN0aW9uKHQpe3JldHVybiAxK3QucmVkdWNlKG4sMCl9KGkpKTooZS54PXM/bCs9dChlLHMpOjAsZS55PTAscz1lKX0pO3ZhciBjPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZTtlPXQuY2hpbGRyZW47KXQ9ZVswXTtyZXR1cm4gdH0oZSksdT1mdW5jdGlvbih0KXtmb3IodmFyIGU7ZT10LmNoaWxkcmVuOyl0PWVbZS5sZW5ndGgtMV07cmV0dXJuIHR9KGUpLGg9Yy54LXQoYyx1KS8yLGY9dS54K3QodSxjKS8yO3JldHVybiBlLmVhY2hBZnRlcihvP2Z1bmN0aW9uKHQpe3QueD0odC54LWUueCkqaSx0Lnk9KGUueS10LnkpKmF9OmZ1bmN0aW9uKHQpe3QueD0odC54LWgpLyhmLWgpKmksdC55PSgxLShlLnk/dC55L2UueToxKSkqYX0pfXJldHVybiBzLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxzKTp0fSxzLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ITEsaT0rdFswXSxhPSt0WzFdLHMpOm8/bnVsbDpbaSxhXX0scy5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0hMCxpPSt0WzBdLGE9K3RbMV0scyk6bz9baSxhXTpudWxsfSxzfSx0LmhpZXJhcmNoeT1hLHQucGFjaz1mdW5jdGlvbigpe3ZhciB0PW51bGwsZT0xLHI9MSxuPVQ7ZnVuY3Rpb24gaShpKXtyZXR1cm4gaS54PWUvMixpLnk9ci8yLHQ/aS5lYWNoQmVmb3JlKEUodCkpLmVhY2hBZnRlcihDKG4sLjUpKS5lYWNoQmVmb3JlKEwoMSkpOmkuZWFjaEJlZm9yZShFKFMpKS5lYWNoQWZ0ZXIoQyhULDEpKS5lYWNoQWZ0ZXIoQyhuLGkuci9NYXRoLm1pbihlLHIpKSkuZWFjaEJlZm9yZShMKE1hdGgubWluKGUscikvKDIqaS5yKSkpLGl9cmV0dXJuIGkucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW51bGw9PShyPWUpP251bGw6QShyKSxpKTp0O3ZhciByfSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3RbMF0scj0rdFsxXSxpKTpbZSxyXX0saS5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpNKCt0KSxpKTpufSxpfSx0LnBhY2tTaWJsaW5ncz1mdW5jdGlvbih0KXtyZXR1cm4gayh0KSx0fSx0LnBhY2tFbmNsb3NlPWgsdC5wYXJ0aXRpb249ZnVuY3Rpb24oKXt2YXIgdD0xLGU9MSxyPTAsbj0hMTtmdW5jdGlvbiBpKGkpe3ZhciBhPWkuaGVpZ2h0KzE7cmV0dXJuIGkueDA9aS55MD1yLGkueDE9dCxpLnkxPWUvYSxpLmVhY2hCZWZvcmUoZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24obil7bi5jaGlsZHJlbiYmTyhuLG4ueDAsdCoobi5kZXB0aCsxKS9lLG4ueDEsdCoobi5kZXB0aCsyKS9lKTt2YXIgaT1uLngwLGE9bi55MCxvPW4ueDEtcixzPW4ueTEtcjtvPGkmJihpPW89KGkrbykvMiksczxhJiYoYT1zPShhK3MpLzIpLG4ueDA9aSxuLnkwPWEsbi54MT1vLG4ueTE9c319KGUsYSkpLG4mJmkuZWFjaEJlZm9yZSh6KSxpfXJldHVybiBpLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhdCxpKTpufSxpLnNpemU9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K3JbMF0sZT0rclsxXSxpKTpbdCxlXX0saS5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0LGkpOnJ9LGl9LHQuc3RyYXRpZnk9ZnVuY3Rpb24oKXt2YXIgdD1SLGU9RjtmdW5jdGlvbiByKHIpe3ZhciBuLGksYSxvLHMsdSxoLGY9ci5sZW5ndGgscD1uZXcgQXJyYXkoZiksZD17fTtmb3IoaT0wO2k8ZjsrK2kpbj1yW2ldLHM9cFtpXT1uZXcgYyhuKSxudWxsIT0odT10KG4saSxyKSkmJih1Kz1cIlwiKSYmKGRbaD1JKyhzLmlkPXUpXT1oIGluIGQ/UDpzKTtmb3IoaT0wO2k8ZjsrK2kpaWYocz1wW2ldLG51bGwhPSh1PWUocltpXSxpLHIpKSYmKHUrPVwiXCIpKXtpZighKG89ZFtJK3VdKSl0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nOiBcIit1KTtpZihvPT09UCl0aHJvdyBuZXcgRXJyb3IoXCJhbWJpZ3VvdXM6IFwiK3UpO28uY2hpbGRyZW4/by5jaGlsZHJlbi5wdXNoKHMpOm8uY2hpbGRyZW49W3NdLHMucGFyZW50PW99ZWxzZXtpZihhKXRocm93IG5ldyBFcnJvcihcIm11bHRpcGxlIHJvb3RzXCIpO2E9c31pZighYSl0aHJvdyBuZXcgRXJyb3IoXCJubyByb290XCIpO2lmKGEucGFyZW50PUQsYS5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QuZGVwdGg9dC5wYXJlbnQuZGVwdGgrMSwtLWZ9KS5lYWNoQmVmb3JlKGwpLGEucGFyZW50PW51bGwsZj4wKXRocm93IG5ldyBFcnJvcihcImN5Y2xlXCIpO3JldHVybiBhfXJldHVybiByLmlkPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PUEoZSkscik6dH0sci5wYXJlbnRJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1BKHQpLHIpOmV9LHJ9LHQudHJlZT1mdW5jdGlvbigpe3ZhciB0PUIsZT0xLHI9MSxuPW51bGw7ZnVuY3Rpb24gaShpKXt2YXIgbD1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksYSxvPW5ldyBxKHQsMCkscz1bb107ZT1zLnBvcCgpOylpZihuPWUuXy5jaGlsZHJlbilmb3IoZS5jaGlsZHJlbj1uZXcgQXJyYXkoYT1uLmxlbmd0aCksaT1hLTE7aT49MDstLWkpcy5wdXNoKHI9ZS5jaGlsZHJlbltpXT1uZXcgcShuW2ldLGkpKSxyLnBhcmVudD1lO3JldHVybihvLnBhcmVudD1uZXcgcShudWxsLDApKS5jaGlsZHJlbj1bb10sb30oaSk7aWYobC5lYWNoQWZ0ZXIoYSksbC5wYXJlbnQubT0tbC56LGwuZWFjaEJlZm9yZShvKSxuKWkuZWFjaEJlZm9yZShzKTtlbHNle3ZhciBjPWksdT1pLGg9aTtpLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC54PGMueCYmKGM9dCksdC54PnUueCYmKHU9dCksdC5kZXB0aD5oLmRlcHRoJiYoaD10KX0pO3ZhciBmPWM9PT11PzE6dChjLHUpLzIscD1mLWMueCxkPWUvKHUueCtmK3ApLGc9ci8oaC5kZXB0aHx8MSk7aS5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QueD0odC54K3ApKmQsdC55PXQuZGVwdGgqZ30pfXJldHVybiBpfWZ1bmN0aW9uIGEoZSl7dmFyIHI9ZS5jaGlsZHJlbixuPWUucGFyZW50LmNoaWxkcmVuLGk9ZS5pP25bZS5pLTFdOm51bGw7aWYocil7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPTAsbj0wLGk9dC5jaGlsZHJlbixhPWkubGVuZ3RoOy0tYT49MDspKGU9aVthXSkueis9cixlLm0rPXIscis9ZS5zKyhuKz1lLmMpfShlKTt2YXIgYT0oclswXS56K3Jbci5sZW5ndGgtMV0ueikvMjtpPyhlLno9aS56K3QoZS5fLGkuXyksZS5tPWUuei1hKTplLno9YX1lbHNlIGkmJihlLno9aS56K3QoZS5fLGkuXykpO2UucGFyZW50LkE9ZnVuY3Rpb24oZSxyLG4pe2lmKHIpe2Zvcih2YXIgaSxhPWUsbz1lLHM9cixsPWEucGFyZW50LmNoaWxkcmVuWzBdLGM9YS5tLHU9by5tLGg9cy5tLGY9bC5tO3M9aihzKSxhPU4oYSkscyYmYTspbD1OKGwpLChvPWoobykpLmE9ZSwoaT1zLnoraC1hLnotYyt0KHMuXyxhLl8pKT4wJiYoVihVKHMsZSxuKSxlLGkpLGMrPWksdSs9aSksaCs9cy5tLGMrPWEubSxmKz1sLm0sdSs9by5tO3MmJiFqKG8pJiYoby50PXMsby5tKz1oLXUpLGEmJiFOKGwpJiYobC50PWEsbC5tKz1jLWYsbj1lKX1yZXR1cm4gbn0oZSxpLGUucGFyZW50LkF8fG5bMF0pfWZ1bmN0aW9uIG8odCl7dC5fLng9dC56K3QucGFyZW50Lm0sdC5tKz10LnBhcmVudC5tfWZ1bmN0aW9uIHModCl7dC54Kj1lLHQueT10LmRlcHRoKnJ9cmV0dXJuIGkuc2VwYXJhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGkpOnR9LGkuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMSxlPSt0WzBdLHI9K3RbMV0saSk6bj9udWxsOltlLHJdfSxpLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEwLGU9K3RbMF0scj0rdFsxXSxpKTpuP1tlLHJdOm51bGx9LGl9LHQudHJlZW1hcD1mdW5jdGlvbigpe3ZhciB0PVcsZT0hMSxyPTEsbj0xLGk9WzBdLGE9VCxvPVQscz1ULGw9VCxjPVQ7ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC54MD10LnkwPTAsdC54MT1yLHQueTE9bix0LmVhY2hCZWZvcmUoaCksaT1bMF0sZSYmdC5lYWNoQmVmb3JlKHopLHR9ZnVuY3Rpb24gaChlKXt2YXIgcj1pW2UuZGVwdGhdLG49ZS54MCtyLHU9ZS55MCtyLGg9ZS54MS1yLGY9ZS55MS1yO2g8biYmKG49aD0obitoKS8yKSxmPHUmJih1PWY9KHUrZikvMiksZS54MD1uLGUueTA9dSxlLngxPWgsZS55MT1mLGUuY2hpbGRyZW4mJihyPWlbZS5kZXB0aCsxXT1hKGUpLzIsbis9YyhlKS1yLHUrPW8oZSktciwoaC09cyhlKS1yKTxuJiYobj1oPShuK2gpLzIpLChmLT1sKGUpLXIpPHUmJih1PWY9KHUrZikvMiksdChlLG4sdSxoLGYpKX1yZXR1cm4gdS5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0hIXQsdSk6ZX0sdS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0WzBdLG49K3RbMV0sdSk6W3Isbl19LHUudGlsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1BKGUpLHUpOnR9LHUucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdJbm5lcih0KS5wYWRkaW5nT3V0ZXIodCk6dS5wYWRkaW5nSW5uZXIoKX0sdS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Ok0oK3QpLHUpOmF9LHUucGFkZGluZ091dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3UucGFkZGluZ1RvcCh0KS5wYWRkaW5nUmlnaHQodCkucGFkZGluZ0JvdHRvbSh0KS5wYWRkaW5nTGVmdCh0KTp1LnBhZGRpbmdUb3AoKX0sdS5wYWRkaW5nVG9wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpNKCt0KSx1KTpvfSx1LnBhZGRpbmdSaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6TSgrdCksdSk6c30sdS5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpNKCt0KSx1KTpsfSx1LnBhZGRpbmdMZWZ0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpNKCt0KSx1KTpjfSx1fSx0LnRyZWVtYXBCaW5hcnk9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxvLHM9dC5jaGlsZHJlbixsPXMubGVuZ3RoLGM9bmV3IEFycmF5KGwrMSk7Zm9yKGNbMF09bz1hPTA7YTxsOysrYSljW2ErMV09bys9c1thXS52YWx1ZTshZnVuY3Rpb24gdChlLHIsbixpLGEsbyxsKXtpZihlPj1yLTEpe3ZhciB1PXNbZV07cmV0dXJuIHUueDA9aSx1LnkwPWEsdS54MT1vLHZvaWQodS55MT1sKX1mb3IodmFyIGg9Y1tlXSxmPW4vMitoLHA9ZSsxLGQ9ci0xO3A8ZDspe3ZhciBnPXArZD4+PjE7Y1tnXTxmP3A9ZysxOmQ9Z31mLWNbcC0xXTxjW3BdLWYmJmUrMTxwJiYtLXA7dmFyIHY9Y1twXS1oLG09bi12O2lmKG8taT5sLWEpe3ZhciB5PShpKm0rbyp2KS9uO3QoZSxwLHYsaSxhLHksbCksdChwLHIsbSx5LGEsbyxsKX1lbHNle3ZhciB4PShhKm0rbCp2KS9uO3QoZSxwLHYsaSxhLG8seCksdChwLHIsbSxpLHgsbyxsKX19KDAsbCx0LnZhbHVlLGUscixuLGkpfSx0LnRyZWVtYXBEaWNlPU8sdC50cmVlbWFwU2xpY2U9SCx0LnRyZWVtYXBTbGljZURpY2U9ZnVuY3Rpb24odCxlLHIsbixpKXsoMSZ0LmRlcHRoP0g6TykodCxlLHIsbixpKX0sdC50cmVlbWFwU3F1YXJpZnk9Vyx0LnRyZWVtYXBSZXNxdWFyaWZ5PVgsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9KFwib2JqZWN0XCI9PXR5cGVvZiByJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZT9yOm4uZDM9bi5kM3x8e30pfSx7fV0sMTQ5OltmdW5jdGlvbih0LGUscil7dmFyIG4saTtuPXRoaXMsaT1mdW5jdGlvbih0LGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHIodCxlLHIsbixpKXt2YXIgYT10KnQsbz1hKnQ7cmV0dXJuKCgxLTMqdCszKmEtbykqZSsoNC02KmErMypvKSpyKygxKzMqdCszKmEtMypvKSpuK28qaSkvNn1mdW5jdGlvbiBuKHQpe3ZhciBlPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPW48PTA/bj0wOm4+PTE/KG49MSxlLTEpOk1hdGguZmxvb3IobiplKSxhPXRbaV0sbz10W2krMV0scz1pPjA/dFtpLTFdOjIqYS1vLGw9aTxlLTE/dFtpKzJdOjIqby1hO3JldHVybiByKChuLWkvZSkqZSxzLGEsbyxsKX19ZnVuY3Rpb24gaSh0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9TWF0aC5mbG9vcigoKG4lPTEpPDA/KytuOm4pKmUpLGE9dFsoaStlLTEpJWVdLG89dFtpJWVdLHM9dFsoaSsxKSVlXSxsPXRbKGkrMiklZV07cmV0dXJuIHIoKG4taS9lKSplLGEsbyxzLGwpfX1mdW5jdGlvbiBhKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0K3IqZX19ZnVuY3Rpb24gcyh0LGUpe3ZhciByPWUtdDtyZXR1cm4gcj9vKHQscj4xODB8fHI8LTE4MD9yLTM2MCpNYXRoLnJvdW5kKHIvMzYwKTpyKTphKGlzTmFOKHQpP2U6dCl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gMT09KHQ9K3QpP2M6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gci1lP2Z1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD1NYXRoLnBvdyh0LHIpLGU9TWF0aC5wb3coZSxyKS10LHI9MS9yLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnBvdyh0K24qZSxyKX19KGUscix0KTphKGlzTmFOKGUpP3I6ZSl9fWZ1bmN0aW9uIGModCxlKXt2YXIgcj1lLXQ7cmV0dXJuIHI/byh0LHIpOmEoaXNOYU4odCk/ZTp0KX12YXIgdT1mdW5jdGlvbiB0KHIpe3ZhciBuPWwocik7ZnVuY3Rpb24gaSh0LHIpe3ZhciBpPW4oKHQ9ZS5yZ2IodCkpLnIsKHI9ZS5yZ2IocikpLnIpLGE9bih0Lmcsci5nKSxvPW4odC5iLHIuYikscz1jKHQub3BhY2l0eSxyLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5yPWkoZSksdC5nPWEoZSksdC5iPW8oZSksdC5vcGFjaXR5PXMoZSksdCtcIlwifX1yZXR1cm4gaS5nYW1tYT10LGl9KDEpO2Z1bmN0aW9uIGgodCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuLGksYT1yLmxlbmd0aCxvPW5ldyBBcnJheShhKSxzPW5ldyBBcnJheShhKSxsPW5ldyBBcnJheShhKTtmb3Iobj0wO248YTsrK24paT1lLnJnYihyW25dKSxvW25dPWkucnx8MCxzW25dPWkuZ3x8MCxsW25dPWkuYnx8MDtyZXR1cm4gbz10KG8pLHM9dChzKSxsPXQobCksaS5vcGFjaXR5PTEsZnVuY3Rpb24odCl7cmV0dXJuIGkucj1vKHQpLGkuZz1zKHQpLGkuYj1sKHQpLGkrXCJcIn19fXZhciBmPWgobikscD1oKGkpO2Z1bmN0aW9uIGQodCxlKXt2YXIgcixuPWU/ZS5sZW5ndGg6MCxpPXQ/TWF0aC5taW4obix0Lmxlbmd0aCk6MCxhPW5ldyBBcnJheShpKSxvPW5ldyBBcnJheShuKTtmb3Iocj0wO3I8aTsrK3IpYVtyXT1fKHRbcl0sZVtyXSk7Zm9yKDtyPG47KytyKW9bcl09ZVtyXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHI9MDtyPGk7KytyKW9bcl09YVtyXSh0KTtyZXR1cm4gb319ZnVuY3Rpb24gZyh0LGUpe3ZhciByPW5ldyBEYXRlO3JldHVybiBlLT10PSt0LGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUodCtlKm4pLHJ9fWZ1bmN0aW9uIHYodCxlKXtyZXR1cm4gZS09dD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gdCtlKnJ9fWZ1bmN0aW9uIG0odCxlKXt2YXIgcixuPXt9LGk9e307Zm9yKHIgaW4gbnVsbCE9PXQmJlwib2JqZWN0XCI9PXR5cGVvZiB0fHwodD17fSksbnVsbCE9PWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlfHwoZT17fSksZSlyIGluIHQ/bltyXT1fKHRbcl0sZVtyXSk6aVtyXT1lW3JdO3JldHVybiBmdW5jdGlvbih0KXtmb3IociBpbiBuKWlbcl09bltyXSh0KTtyZXR1cm4gaX19dmFyIHk9L1stK10/KD86XFxkK1xcLj9cXGQqfFxcLj9cXGQrKSg/OltlRV1bLStdP1xcZCspPy9nLHg9bmV3IFJlZ0V4cCh5LnNvdXJjZSxcImdcIik7ZnVuY3Rpb24gYih0LGUpe3ZhciByLG4saSxhPXkubGFzdEluZGV4PXgubGFzdEluZGV4PTAsbz0tMSxzPVtdLGw9W107Zm9yKHQrPVwiXCIsZSs9XCJcIjsocj15LmV4ZWModCkpJiYobj14LmV4ZWMoZSkpOykoaT1uLmluZGV4KT5hJiYoaT1lLnNsaWNlKGEsaSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSwocj1yWzBdKT09PShuPW5bMF0pP3Nbb10/c1tvXSs9bjpzWysrb109bjooc1srK29dPW51bGwsbC5wdXNoKHtpOm8seDp2KHIsbil9KSksYT14Lmxhc3RJbmRleDtyZXR1cm4gYTxlLmxlbmd0aCYmKGk9ZS5zbGljZShhKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLHMubGVuZ3RoPDI/bFswXT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrXCJcIn19KGxbMF0ueCk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fShlKTooZT1sLmxlbmd0aCxmdW5jdGlvbih0KXtmb3IodmFyIHIsbj0wO248ZTsrK24pc1socj1sW25dKS5pXT1yLngodCk7cmV0dXJuIHMuam9pbihcIlwiKX0pfWZ1bmN0aW9uIF8odCxyKXt2YXIgbixpPXR5cGVvZiByO3JldHVybiBudWxsPT1yfHxcImJvb2xlYW5cIj09PWk/YShyKTooXCJudW1iZXJcIj09PWk/djpcInN0cmluZ1wiPT09aT8obj1lLmNvbG9yKHIpKT8ocj1uLHUpOmI6ciBpbnN0YW5jZW9mIGUuY29sb3I/dTpyIGluc3RhbmNlb2YgRGF0ZT9nOkFycmF5LmlzQXJyYXkocik/ZDpcImZ1bmN0aW9uXCIhPXR5cGVvZiByLnZhbHVlT2YmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHIudG9TdHJpbmd8fGlzTmFOKHIpP206dikodCxyKX12YXIgdyxrLEEsVCxNPTE4MC9NYXRoLlBJLFM9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24gRSh0LGUscixuLGksYSl7dmFyIG8scyxsO3JldHVybihvPU1hdGguc3FydCh0KnQrZSplKSkmJih0Lz1vLGUvPW8pLChsPXQqcitlKm4pJiYoci09dCpsLG4tPWUqbCksKHM9TWF0aC5zcXJ0KHIqcituKm4pKSYmKHIvPXMsbi89cyxsLz1zKSx0Km48ZSpyJiYodD0tdCxlPS1lLGw9LWwsbz0tbykse3RyYW5zbGF0ZVg6aSx0cmFuc2xhdGVZOmEscm90YXRlOk1hdGguYXRhbjIoZSx0KSpNLHNrZXdYOk1hdGguYXRhbihsKSpNLHNjYWxlWDpvLHNjYWxlWTpzfX1mdW5jdGlvbiBDKHQsZSxyLG4pe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrXCIgXCI6XCJcIn1yZXR1cm4gZnVuY3Rpb24oYSxvKXt2YXIgcz1bXSxsPVtdO3JldHVybiBhPXQoYSksbz10KG8pLGZ1bmN0aW9uKHQsbixpLGEsbyxzKXtpZih0IT09aXx8biE9PWEpe3ZhciBsPW8ucHVzaChcInRyYW5zbGF0ZShcIixudWxsLGUsbnVsbCxyKTtzLnB1c2goe2k6bC00LHg6dih0LGkpfSx7aTpsLTIseDp2KG4sYSl9KX1lbHNlKGl8fGEpJiZvLnB1c2goXCJ0cmFuc2xhdGUoXCIraStlK2Ercil9KGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVksby50cmFuc2xhdGVYLG8udHJhbnNsYXRlWSxzLGwpLGZ1bmN0aW9uKHQsZSxyLGEpe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxhLnB1c2goe2k6ci5wdXNoKGkocikrXCJyb3RhdGUoXCIsbnVsbCxuKS0yLHg6dih0LGUpfSkpOmUmJnIucHVzaChpKHIpK1wicm90YXRlKFwiK2Urbil9KGEucm90YXRlLG8ucm90YXRlLHMsbCksZnVuY3Rpb24odCxlLHIsYSl7dCE9PWU/YS5wdXNoKHtpOnIucHVzaChpKHIpK1wic2tld1goXCIsbnVsbCxuKS0yLHg6dih0LGUpfSk6ZSYmci5wdXNoKGkocikrXCJza2V3WChcIitlK24pfShhLnNrZXdYLG8uc2tld1gscyxsKSxmdW5jdGlvbih0LGUscixuLGEsbyl7aWYodCE9PXJ8fGUhPT1uKXt2YXIgcz1hLnB1c2goaShhKStcInNjYWxlKFwiLG51bGwsXCIsXCIsbnVsbCxcIilcIik7by5wdXNoKHtpOnMtNCx4OnYodCxyKX0se2k6cy0yLHg6dihlLG4pfSl9ZWxzZSAxPT09ciYmMT09PW58fGEucHVzaChpKGEpK1wic2NhbGUoXCIrcitcIixcIituK1wiKVwiKX0oYS5zY2FsZVgsYS5zY2FsZVksby5zY2FsZVgsby5zY2FsZVkscyxsKSxhPW89bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGUscj0tMSxuPWwubGVuZ3RoOysrcjxuOylzWyhlPWxbcl0pLmldPWUueCh0KTtyZXR1cm4gcy5qb2luKFwiXCIpfX19dmFyIEw9QyhmdW5jdGlvbih0KXtyZXR1cm5cIm5vbmVcIj09PXQ/Uzood3x8KHc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIkRJVlwiKSxrPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxBPWRvY3VtZW50LmRlZmF1bHRWaWV3KSx3LnN0eWxlLnRyYW5zZm9ybT10LHQ9QS5nZXRDb21wdXRlZFN0eWxlKGsuYXBwZW5kQ2hpbGQodyksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShcInRyYW5zZm9ybVwiKSxrLnJlbW92ZUNoaWxkKHcpLEUoKyh0PXQuc2xpY2UoNywtMSkuc3BsaXQoXCIsXCIpKVswXSwrdFsxXSwrdFsyXSwrdFszXSwrdFs0XSwrdFs1XSkpfSxcInB4LCBcIixcInB4KVwiLFwiZGVnKVwiKSx6PUMoZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/UzooVHx8KFQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcImdcIikpLFQuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsdCksKHQ9VC50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT9FKCh0PXQubWF0cml4KS5hLHQuYix0LmMsdC5kLHQuZSx0LmYpOlMpfSxcIiwgXCIsXCIpXCIsXCIpXCIpLE89TWF0aC5TUVJUMixJPTIsRD00LFA9MWUtMTI7ZnVuY3Rpb24gUih0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn1mdW5jdGlvbiBGKHQpe3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBpPXQoKHI9ZS5oc2wocikpLmgsKG49ZS5oc2wobikpLmgpLGE9YyhyLnMsbi5zKSxvPWMoci5sLG4ubCkscz1jKHIub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5oPWkodCksci5zPWEodCksci5sPW8odCksci5vcGFjaXR5PXModCkscitcIlwifX19dmFyIEI9RihzKSxOPUYoYyk7ZnVuY3Rpb24gaih0KXtyZXR1cm4gZnVuY3Rpb24ocixuKXt2YXIgaT10KChyPWUuaGNsKHIpKS5oLChuPWUuaGNsKG4pKS5oKSxhPWMoci5jLG4uYyksbz1jKHIubCxuLmwpLHM9YyhyLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIuaD1pKHQpLHIuYz1hKHQpLHIubD1vKHQpLHIub3BhY2l0eT1zKHQpLHIrXCJcIn19fXZhciBWPWoocyksVT1qKGMpO2Z1bmN0aW9uIHEodCl7cmV0dXJuIGZ1bmN0aW9uIHIobil7ZnVuY3Rpb24gaShyLGkpe3ZhciBhPXQoKHI9ZS5jdWJlaGVsaXgocikpLmgsKGk9ZS5jdWJlaGVsaXgoaSkpLmgpLG89YyhyLnMsaS5zKSxzPWMoci5sLGkubCksbD1jKHIub3BhY2l0eSxpLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5oPWEodCksci5zPW8odCksci5sPXMoTWF0aC5wb3codCxuKSksci5vcGFjaXR5PWwodCkscitcIlwifX1yZXR1cm4gbj0rbixpLmdhbW1hPXIsaX0oMSl9dmFyIEg9cShzKSxHPXEoYyk7dC5pbnRlcnBvbGF0ZT1fLHQuaW50ZXJwb2xhdGVBcnJheT1kLHQuaW50ZXJwb2xhdGVCYXNpcz1uLHQuaW50ZXJwb2xhdGVCYXNpc0Nsb3NlZD1pLHQuaW50ZXJwb2xhdGVEYXRlPWcsdC5pbnRlcnBvbGF0ZURpc2NyZXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdFtNYXRoLm1heCgwLE1hdGgubWluKGUtMSxNYXRoLmZsb29yKHIqZSkpKV19fSx0LmludGVycG9sYXRlSHVlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9cygrdCwrZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXIodCk7cmV0dXJuIGUtMzYwKk1hdGguZmxvb3IoZS8zNjApfX0sdC5pbnRlcnBvbGF0ZU51bWJlcj12LHQuaW50ZXJwb2xhdGVPYmplY3Q9bSx0LmludGVycG9sYXRlUm91bmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS09dD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZCh0K2Uqcil9fSx0LmludGVycG9sYXRlU3RyaW5nPWIsdC5pbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcz1MLHQuaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc9eix0LmludGVycG9sYXRlWm9vbT1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10WzBdLGE9dFsxXSxvPXRbMl0scz1lWzBdLGw9ZVsxXSxjPWVbMl0sdT1zLWksaD1sLWEsZj11KnUraCpoO2lmKGY8UCluPU1hdGgubG9nKGMvbykvTyxyPWZ1bmN0aW9uKHQpe3JldHVybltpK3QqdSxhK3QqaCxvKk1hdGguZXhwKE8qdCpuKV19O2Vsc2V7dmFyIHA9TWF0aC5zcXJ0KGYpLGQ9KGMqYy1vKm8rRCpmKS8oMipvKkkqcCksZz0oYypjLW8qby1EKmYpLygyKmMqSSpwKSx2PU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCksbT1NYXRoLmxvZyhNYXRoLnNxcnQoZypnKzEpLWcpO249KG0tdikvTyxyPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dCpuLHM9Uih2KSxsPW8vKEkqcCkqKHMqKGU9TypyK3YsKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpKS1mdW5jdGlvbih0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpLTEvdCkvMn0odikpO3JldHVybltpK2wqdSxhK2wqaCxvKnMvUihPKnIrdildfX1yZXR1cm4gci5kdXJhdGlvbj0xZTMqbixyfSx0LmludGVycG9sYXRlUmdiPXUsdC5pbnRlcnBvbGF0ZVJnYkJhc2lzPWYsdC5pbnRlcnBvbGF0ZVJnYkJhc2lzQ2xvc2VkPXAsdC5pbnRlcnBvbGF0ZUhzbD1CLHQuaW50ZXJwb2xhdGVIc2xMb25nPU4sdC5pbnRlcnBvbGF0ZUxhYj1mdW5jdGlvbih0LHIpe3ZhciBuPWMoKHQ9ZS5sYWIodCkpLmwsKHI9ZS5sYWIocikpLmwpLGk9Yyh0LmEsci5hKSxhPWModC5iLHIuYiksbz1jKHQub3BhY2l0eSxyLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5sPW4oZSksdC5hPWkoZSksdC5iPWEoZSksdC5vcGFjaXR5PW8oZSksdCtcIlwifX0sdC5pbnRlcnBvbGF0ZUhjbD1WLHQuaW50ZXJwb2xhdGVIY2xMb25nPVUsdC5pbnRlcnBvbGF0ZUN1YmVoZWxpeD1ILHQuaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nPUcsdC5waWVjZXdpc2U9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLTEsaT1lWzBdLGE9bmV3IEFycmF5KG48MD8wOm4pO3I8bjspYVtyXT10KGksaT1lWysrcl0pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKG4tMSxNYXRoLmZsb29yKHQqPW4pKSk7cmV0dXJuIGFbZV0odC1lKX19LHQucXVhbnRpemU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09dChuLyhlLTEpKTtyZXR1cm4gcn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LFwib2JqZWN0XCI9PXR5cGVvZiByJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZT9pKHIsdChcImQzLWNvbG9yXCIpKTppKG4uZDM9bi5kM3x8e30sbi5kMyl9LHtcImQzLWNvbG9yXCI6MTQ1fV0sMTUwOltmdW5jdGlvbih0LGUscil7dmFyIG47bj10aGlzLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO3ZhciBlPU1hdGguUEkscj0yKmUsbj1yLTFlLTY7ZnVuY3Rpb24gaSgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPVwiXCJ9ZnVuY3Rpb24gYSgpe3JldHVybiBuZXcgaX1pLnByb3RvdHlwZT1hLnByb3RvdHlwZT17Y29uc3RydWN0b3I6aSxtb3ZlVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPVwiTVwiKyh0aGlzLl94MD10aGlzLl94MT0rdCkrXCIsXCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz1cIlpcIil9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9XCJMXCIrKHRoaXMuX3gxPSt0KStcIixcIisodGhpcy5feTE9K2UpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuXys9XCJRXCIrICt0K1wiLFwiKyArZStcIixcIisodGhpcy5feDE9K3IpK1wiLFwiKyh0aGlzLl95MT0rbil9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuXys9XCJDXCIrICt0K1wiLFwiKyArZStcIixcIisgK3IrXCIsXCIrICtuK1wiLFwiKyh0aGlzLl94MT0raSkrXCIsXCIrKHRoaXMuX3kxPSthKX0sYXJjVG86ZnVuY3Rpb24odCxyLG4saSxhKXt0PSt0LHI9K3Isbj0rbixpPStpLGE9K2E7dmFyIG89dGhpcy5feDEscz10aGlzLl95MSxsPW4tdCxjPWktcix1PW8tdCxoPXMtcixmPXUqdStoKmg7aWYoYTwwKXRocm93IG5ldyBFcnJvcihcIm5lZ2F0aXZlIHJhZGl1czogXCIrYSk7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuXys9XCJNXCIrKHRoaXMuX3gxPXQpK1wiLFwiKyh0aGlzLl95MT1yKTtlbHNlIGlmKGY+MWUtNilpZihNYXRoLmFicyhoKmwtYyp1KT4xZS02JiZhKXt2YXIgcD1uLW8sZD1pLXMsZz1sKmwrYypjLHY9cCpwK2QqZCxtPU1hdGguc3FydChnKSx5PU1hdGguc3FydChmKSx4PWEqTWF0aC50YW4oKGUtTWF0aC5hY29zKChnK2YtdikvKDIqbSp5KSkpLzIpLGI9eC95LF89eC9tO01hdGguYWJzKGItMSk+MWUtNiYmKHRoaXMuXys9XCJMXCIrKHQrYip1KStcIixcIisocitiKmgpKSx0aGlzLl8rPVwiQVwiK2ErXCIsXCIrYStcIiwwLDAsXCIrICsoaCpwPnUqZCkrXCIsXCIrKHRoaXMuX3gxPXQrXypsKStcIixcIisodGhpcy5feTE9citfKmMpfWVsc2UgdGhpcy5fKz1cIkxcIisodGhpcy5feDE9dCkrXCIsXCIrKHRoaXMuX3kxPXIpO2Vsc2U7fSxhcmM6ZnVuY3Rpb24odCxpLGEsbyxzLGwpe3Q9K3QsaT0raTt2YXIgYz0oYT0rYSkqTWF0aC5jb3MobyksdT1hKk1hdGguc2luKG8pLGg9dCtjLGY9aSt1LHA9MV5sLGQ9bD9vLXM6cy1vO2lmKGE8MCl0aHJvdyBuZXcgRXJyb3IoXCJuZWdhdGl2ZSByYWRpdXM6IFwiK2EpO251bGw9PT10aGlzLl94MT90aGlzLl8rPVwiTVwiK2grXCIsXCIrZjooTWF0aC5hYnModGhpcy5feDEtaCk+MWUtNnx8TWF0aC5hYnModGhpcy5feTEtZik+MWUtNikmJih0aGlzLl8rPVwiTFwiK2grXCIsXCIrZiksYSYmKGQ8MCYmKGQ9ZCVyK3IpLGQ+bj90aGlzLl8rPVwiQVwiK2ErXCIsXCIrYStcIiwwLDEsXCIrcCtcIixcIisodC1jKStcIixcIisoaS11KStcIkFcIithK1wiLFwiK2ErXCIsMCwxLFwiK3ArXCIsXCIrKHRoaXMuX3gxPWgpK1wiLFwiKyh0aGlzLl95MT1mKTpkPjFlLTYmJih0aGlzLl8rPVwiQVwiK2ErXCIsXCIrYStcIiwwLFwiKyArKGQ+PWUpK1wiLFwiK3ArXCIsXCIrKHRoaXMuX3gxPXQrYSpNYXRoLmNvcyhzKSkrXCIsXCIrKHRoaXMuX3kxPWkrYSpNYXRoLnNpbihzKSkpKX0scmVjdDpmdW5jdGlvbih0LGUscixuKXt0aGlzLl8rPVwiTVwiKyh0aGlzLl94MD10aGlzLl94MT0rdCkrXCIsXCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKStcImhcIisgK3IrXCJ2XCIrICtuK1wiaFwiKy1yK1wiWlwifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fSx0LnBhdGg9YSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0oXCJvYmplY3RcIj09dHlwZW9mIHImJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBlP3I6bi5kMz1uLmQzfHx7fSl9LHt9XSwxNTE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbjtuPXRoaXMsZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZSh0LGUscixuKXtpZihpc05hTihlKXx8aXNOYU4ocikpcmV0dXJuIHQ7dmFyIGksYSxvLHMsbCxjLHUsaCxmLHA9dC5fcm9vdCxkPXtkYXRhOm59LGc9dC5feDAsdj10Ll95MCxtPXQuX3gxLHk9dC5feTE7aWYoIXApcmV0dXJuIHQuX3Jvb3Q9ZCx0O2Zvcig7cC5sZW5ndGg7KWlmKChjPWU+PShhPShnK20pLzIpKT9nPWE6bT1hLCh1PXI+PShvPSh2K3kpLzIpKT92PW86eT1vLGk9cCwhKHA9cFtoPXU8PDF8Y10pKXJldHVybiBpW2hdPWQsdDtpZihzPSt0Ll94LmNhbGwobnVsbCxwLmRhdGEpLGw9K3QuX3kuY2FsbChudWxsLHAuZGF0YSksZT09PXMmJnI9PT1sKXJldHVybiBkLm5leHQ9cCxpP2lbaF09ZDp0Ll9yb290PWQsdDtkb3tpPWk/aVtoXT1uZXcgQXJyYXkoNCk6dC5fcm9vdD1uZXcgQXJyYXkoNCksKGM9ZT49KGE9KGcrbSkvMikpP2c9YTptPWEsKHU9cj49KG89KHYreSkvMikpP3Y9bzp5PW99d2hpbGUoKGg9dTw8MXxjKT09KGY9KGw+PW8pPDwxfHM+PWEpKTtyZXR1cm4gaVtmXT1wLGlbaF09ZCx0fXZhciByPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5ub2RlPXQsdGhpcy54MD1lLHRoaXMueTA9cix0aGlzLngxPW4sdGhpcy55MT1pfTtmdW5jdGlvbiBuKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gYSh0LGUscil7dmFyIGE9bmV3IG8obnVsbD09ZT9uOmUsbnVsbD09cj9pOnIsTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gbnVsbD09dD9hOmEuYWRkQWxsKHQpfWZ1bmN0aW9uIG8odCxlLHIsbixpLGEpe3RoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9YSx0aGlzLl9yb290PXZvaWQgMH1mdW5jdGlvbiBzKHQpe2Zvcih2YXIgZT17ZGF0YTp0LmRhdGF9LHI9ZTt0PXQubmV4dDspcj1yLm5leHQ9e2RhdGE6dC5kYXRhfTtyZXR1cm4gZX12YXIgbD1hLnByb3RvdHlwZT1vLnByb3RvdHlwZTtsLmNvcHk9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9bmV3IG8odGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSxuPXRoaXMuX3Jvb3Q7aWYoIW4pcmV0dXJuIHI7aWYoIW4ubGVuZ3RoKXJldHVybiByLl9yb290PXMobikscjtmb3IodD1be3NvdXJjZTpuLHRhcmdldDpyLl9yb290PW5ldyBBcnJheSg0KX1dO249dC5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkoZT1uLnNvdXJjZVtpXSkmJihlLmxlbmd0aD90LnB1c2goe3NvdXJjZTplLHRhcmdldDpuLnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTpuLnRhcmdldFtpXT1zKGUpKTtyZXR1cm4gcn0sbC5hZGQ9ZnVuY3Rpb24odCl7dmFyIHI9K3RoaXMuX3guY2FsbChudWxsLHQpLG49K3RoaXMuX3kuY2FsbChudWxsLHQpO3JldHVybiBlKHRoaXMuY292ZXIocixuKSxyLG4sdCl9LGwuYWRkQWxsPWZ1bmN0aW9uKHQpe3ZhciByLG4saSxhLG89dC5sZW5ndGgscz1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0xLzAsdT0xLzAsaD0tMS8wLGY9LTEvMDtmb3Iobj0wO248bzsrK24paXNOYU4oaT0rdGhpcy5feC5jYWxsKG51bGwscj10W25dKSl8fGlzTmFOKGE9K3RoaXMuX3kuY2FsbChudWxsLHIpKXx8KHNbbl09aSxsW25dPWEsaTxjJiYoYz1pKSxpPmgmJihoPWkpLGE8dSYmKHU9YSksYT5mJiYoZj1hKSk7Zm9yKGg8YyYmKGM9dGhpcy5feDAsaD10aGlzLl94MSksZjx1JiYodT10aGlzLl95MCxmPXRoaXMuX3kxKSx0aGlzLmNvdmVyKGMsdSkuY292ZXIoaCxmKSxuPTA7bjxvOysrbillKHRoaXMsc1tuXSxsW25dLHRbbl0pO3JldHVybiB0aGlzfSxsLmNvdmVyPWZ1bmN0aW9uKHQsZSl7aWYoaXNOYU4odD0rdCl8fGlzTmFOKGU9K2UpKXJldHVybiB0aGlzO3ZhciByPXRoaXMuX3gwLG49dGhpcy5feTAsaT10aGlzLl94MSxhPXRoaXMuX3kxO2lmKGlzTmFOKHIpKWk9KHI9TWF0aC5mbG9vcih0KSkrMSxhPShuPU1hdGguZmxvb3IoZSkpKzE7ZWxzZXtpZighKHI+dHx8dD5pfHxuPmV8fGU+YSkpcmV0dXJuIHRoaXM7dmFyIG8scyxsPWktcixjPXRoaXMuX3Jvb3Q7c3dpdGNoKHM9KGU8KG4rYSkvMik8PDF8dDwocitpKS8yKXtjYXNlIDA6ZG97KG89bmV3IEFycmF5KDQpKVtzXT1jLGM9b313aGlsZShhPW4rKGwqPTIpLHQ+KGk9citsKXx8ZT5hKTticmVhaztjYXNlIDE6ZG97KG89bmV3IEFycmF5KDQpKVtzXT1jLGM9b313aGlsZShhPW4rKGwqPTIpLChyPWktbCk+dHx8ZT5hKTticmVhaztjYXNlIDI6ZG97KG89bmV3IEFycmF5KDQpKVtzXT1jLGM9b313aGlsZShuPWEtKGwqPTIpLHQ+KGk9citsKXx8bj5lKTticmVhaztjYXNlIDM6ZG97KG89bmV3IEFycmF5KDQpKVtzXT1jLGM9b313aGlsZShuPWEtKGwqPTIpLChyPWktbCk+dHx8bj5lKX10aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9Yyl9cmV0dXJuIHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPWEsdGhpc30sbC5kYXRhPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24oZSl7aWYoIWUubGVuZ3RoKWRve3QucHVzaChlLmRhdGEpfXdoaWxlKGU9ZS5uZXh0KX0pLHR9LGwuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuY292ZXIoK3RbMF1bMF0sK3RbMF1bMV0pLmNvdmVyKCt0WzFdWzBdLCt0WzFdWzFdKTppc05hTih0aGlzLl94MCk/dm9pZCAwOltbdGhpcy5feDAsdGhpcy5feTBdLFt0aGlzLl94MSx0aGlzLl95MV1dfSxsLmZpbmQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGEsbyxzLGwsYyx1LGg9dGhpcy5feDAsZj10aGlzLl95MCxwPXRoaXMuX3gxLGQ9dGhpcy5feTEsZz1bXSx2PXRoaXMuX3Jvb3Q7Zm9yKHYmJmcucHVzaChuZXcgcih2LGgsZixwLGQpKSxudWxsPT1uP249MS8wOihoPXQtbixmPWUtbixwPXQrbixkPWUrbixuKj1uKTtjPWcucG9wKCk7KWlmKCEoISh2PWMubm9kZSl8fChhPWMueDApPnB8fChvPWMueTApPmR8fChzPWMueDEpPGh8fChsPWMueTEpPGYpKWlmKHYubGVuZ3RoKXt2YXIgbT0oYStzKS8yLHk9KG8rbCkvMjtnLnB1c2gobmV3IHIodlszXSxtLHkscyxsKSxuZXcgcih2WzJdLGEseSxtLGwpLG5ldyByKHZbMV0sbSxvLHMseSksbmV3IHIodlswXSxhLG8sbSx5KSksKHU9KGU+PXkpPDwxfHQ+PW0pJiYoYz1nW2cubGVuZ3RoLTFdLGdbZy5sZW5ndGgtMV09Z1tnLmxlbmd0aC0xLXVdLGdbZy5sZW5ndGgtMS11XT1jKX1lbHNle3ZhciB4PXQtK3RoaXMuX3guY2FsbChudWxsLHYuZGF0YSksYj1lLSt0aGlzLl95LmNhbGwobnVsbCx2LmRhdGEpLF89eCp4K2IqYjtpZihfPG4pe3ZhciB3PU1hdGguc3FydChuPV8pO2g9dC13LGY9ZS13LHA9dCt3LGQ9ZSt3LGk9di5kYXRhfX1yZXR1cm4gaX0sbC5yZW1vdmU9ZnVuY3Rpb24odCl7aWYoaXNOYU4oYT0rdGhpcy5feC5jYWxsKG51bGwsdCkpfHxpc05hTihvPSt0aGlzLl95LmNhbGwobnVsbCx0KSkpcmV0dXJuIHRoaXM7dmFyIGUscixuLGksYSxvLHMsbCxjLHUsaCxmLHA9dGhpcy5fcm9vdCxkPXRoaXMuX3gwLGc9dGhpcy5feTAsdj10aGlzLl94MSxtPXRoaXMuX3kxO2lmKCFwKXJldHVybiB0aGlzO2lmKHAubGVuZ3RoKWZvcig7Oyl7aWYoKGM9YT49KHM9KGQrdikvMikpP2Q9czp2PXMsKHU9bz49KGw9KGcrbSkvMikpP2c9bDptPWwsZT1wLCEocD1wW2g9dTw8MXxjXSkpcmV0dXJuIHRoaXM7aWYoIXAubGVuZ3RoKWJyZWFrOyhlW2grMSYzXXx8ZVtoKzImM118fGVbaCszJjNdKSYmKHI9ZSxmPWgpfWZvcig7cC5kYXRhIT09dDspaWYobj1wLCEocD1wLm5leHQpKXJldHVybiB0aGlzO3JldHVybihpPXAubmV4dCkmJmRlbGV0ZSBwLm5leHQsbj8oaT9uLm5leHQ9aTpkZWxldGUgbi5uZXh0LHRoaXMpOmU/KGk/ZVtoXT1pOmRlbGV0ZSBlW2hdLChwPWVbMF18fGVbMV18fGVbMl18fGVbM10pJiZwPT09KGVbM118fGVbMl18fGVbMV18fGVbMF0pJiYhcC5sZW5ndGgmJihyP3JbZl09cDp0aGlzLl9yb290PXApLHRoaXMpOih0aGlzLl9yb290PWksdGhpcyl9LGwucmVtb3ZlQWxsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGg7ZTxyOysrZSl0aGlzLnJlbW92ZSh0W2VdKTtyZXR1cm4gdGhpc30sbC5yb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3R9LGwuc2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24oZSl7aWYoIWUubGVuZ3RoKWRveysrdH13aGlsZShlPWUubmV4dCl9KSx0fSxsLnZpc2l0PWZ1bmN0aW9uKHQpe3ZhciBlLG4saSxhLG8scyxsPVtdLGM9dGhpcy5fcm9vdDtmb3IoYyYmbC5wdXNoKG5ldyByKGMsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtlPWwucG9wKCk7KWlmKCF0KGM9ZS5ub2RlLGk9ZS54MCxhPWUueTAsbz1lLngxLHM9ZS55MSkmJmMubGVuZ3RoKXt2YXIgdT0oaStvKS8yLGg9KGErcykvMjsobj1jWzNdKSYmbC5wdXNoKG5ldyByKG4sdSxoLG8scykpLChuPWNbMl0pJiZsLnB1c2gobmV3IHIobixpLGgsdSxzKSksKG49Y1sxXSkmJmwucHVzaChuZXcgcihuLHUsYSxvLGgpKSwobj1jWzBdKSYmbC5wdXNoKG5ldyByKG4saSxhLHUsaCkpfXJldHVybiB0aGlzfSxsLnZpc2l0QWZ0ZXI9ZnVuY3Rpb24odCl7dmFyIGUsbj1bXSxpPVtdO2Zvcih0aGlzLl9yb290JiZuLnB1c2gobmV3IHIodGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9bi5wb3AoKTspe3ZhciBhPWUubm9kZTtpZihhLmxlbmd0aCl7dmFyIG8scz1lLngwLGw9ZS55MCxjPWUueDEsdT1lLnkxLGg9KHMrYykvMixmPShsK3UpLzI7KG89YVswXSkmJm4ucHVzaChuZXcgcihvLHMsbCxoLGYpKSwobz1hWzFdKSYmbi5wdXNoKG5ldyByKG8saCxsLGMsZikpLChvPWFbMl0pJiZuLnB1c2gobmV3IHIobyxzLGYsaCx1KSksKG89YVszXSkmJm4ucHVzaChuZXcgcihvLGgsZixjLHUpKX1pLnB1c2goZSl9Zm9yKDtlPWkucG9wKCk7KXQoZS5ub2RlLGUueDAsZS55MCxlLngxLGUueTEpO3JldHVybiB0aGlzfSxsLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3g9dCx0aGlzKTp0aGlzLl94fSxsLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3k9dCx0aGlzKTp0aGlzLl95fSx0LnF1YWR0cmVlPWEsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9KFwib2JqZWN0XCI9PXR5cGVvZiByJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZT9yOm4uZDM9bi5kM3x8e30pfSx7fV0sMTUyOltmdW5jdGlvbih0LGUscil7dmFyIG4saTtuPXRoaXMsaT1mdW5jdGlvbih0LGUscixuLGkpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGEodCl7cmV0dXJuIHQudGFyZ2V0LmRlcHRofWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gdC5zb3VyY2VMaW5rcy5sZW5ndGg/dC5kZXB0aDplLTF9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19aT1pJiZpLmhhc093blByb3BlcnR5KFwiZGVmYXVsdFwiKT9pLmRlZmF1bHQ6aTt2YXIgbD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOnR5cGVvZiB0fTtmdW5jdGlvbiBjKHQsZSl7cmV0dXJuIGgodC5zb3VyY2UsZS5zb3VyY2UpfHx0LmluZGV4LWUuaW5kZXh9ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBoKHQudGFyZ2V0LGUudGFyZ2V0KXx8dC5pbmRleC1lLmluZGV4fWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdC5wYXJ0T2ZDeWNsZT09PWUucGFydE9mQ3ljbGU/dC55MC1lLnkwOlwidG9wXCI9PT10LmNpcmN1bGFyTGlua1R5cGV8fFwiYm90dG9tXCI9PT1lLmNpcmN1bGFyTGlua1R5cGU/LTE6MX1mdW5jdGlvbiBmKHQpe3JldHVybiB0LnZhbHVlfWZ1bmN0aW9uIHAodCl7cmV0dXJuKHQueTArdC55MSkvMn1mdW5jdGlvbiBkKHQpe3JldHVybiBwKHQuc291cmNlKX1mdW5jdGlvbiBnKHQpe3JldHVybiBwKHQudGFyZ2V0KX1mdW5jdGlvbiB2KHQpe3JldHVybiB0LmluZGV4fWZ1bmN0aW9uIG0odCl7cmV0dXJuIHQubm9kZXN9ZnVuY3Rpb24geSh0KXtyZXR1cm4gdC5saW5rc31mdW5jdGlvbiB4KHQsZSl7dmFyIHI9dC5nZXQoZSk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKFwibWlzc2luZzogXCIrZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gYih0LGUpe3JldHVybiBlKHQpfXZhciBfPTI1LHc9MTAsaz0uMztmdW5jdGlvbiBBKHQsZSl7dmFyIHI9MCxuPTA7dC5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kuY2lyY3VsYXImJihpLnNvdXJjZS5jaXJjdWxhckxpbmtUeXBlfHxpLnRhcmdldC5jaXJjdWxhckxpbmtUeXBlP2kuY2lyY3VsYXJMaW5rVHlwZT1pLnNvdXJjZS5jaXJjdWxhckxpbmtUeXBlP2kuc291cmNlLmNpcmN1bGFyTGlua1R5cGU6aS50YXJnZXQuY2lyY3VsYXJMaW5rVHlwZTppLmNpcmN1bGFyTGlua1R5cGU9cjxuP1widG9wXCI6XCJib3R0b21cIixcInRvcFwiPT1pLmNpcmN1bGFyTGlua1R5cGU/cis9MTpuKz0xLHQubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXtiKHQsZSkhPWIoaS5zb3VyY2UsZSkmJmIodCxlKSE9YihpLnRhcmdldCxlKXx8KHQuY2lyY3VsYXJMaW5rVHlwZT1pLmNpcmN1bGFyTGlua1R5cGUpfSkpfSksdC5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY2lyY3VsYXImJih0LnNvdXJjZS5jaXJjdWxhckxpbmtUeXBlPT10LnRhcmdldC5jaXJjdWxhckxpbmtUeXBlJiYodC5jaXJjdWxhckxpbmtUeXBlPXQuc291cmNlLmNpcmN1bGFyTGlua1R5cGUpLFkodCxlKSYmKHQuY2lyY3VsYXJMaW5rVHlwZT10LnNvdXJjZS5jaXJjdWxhckxpbmtUeXBlKSl9KX1mdW5jdGlvbiBUKHQpe3ZhciBlPU1hdGguYWJzKHQueTEtdC55MCkscj1NYXRoLmFicyh0LnRhcmdldC54MC10LnNvdXJjZS54MSk7cmV0dXJuIE1hdGguYXRhbihyL2UpfWZ1bmN0aW9uIE0odCxlKXt2YXIgcj0wO3Quc291cmNlTGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXtyPXQuY2lyY3VsYXImJiFZKHQsZSk/cisxOnJ9KTt2YXIgbj0wO3JldHVybiB0LnRhcmdldExpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7bj10LmNpcmN1bGFyJiYhWSh0LGUpP24rMTpufSkscitufWZ1bmN0aW9uIFModCl7dmFyIGU9dC5zb3VyY2Uuc291cmNlTGlua3Mscj0wO2UuZm9yRWFjaChmdW5jdGlvbih0KXtyPXQuY2lyY3VsYXI/cisxOnJ9KTt2YXIgbj10LnRhcmdldC50YXJnZXRMaW5rcyxpPTA7cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbih0KXtpPXQuY2lyY3VsYXI/aSsxOml9KSwhKHI+MXx8aT4xKX1mdW5jdGlvbiBFKHQsZSxyKXtyZXR1cm4gdC5zb3J0KEwpLHQuZm9yRWFjaChmdW5jdGlvbihuLGkpe3ZhciBhLG8scz0wO2lmKFkobixyKSYmUyhuKSluLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxCdWZmZXI9cytuLndpZHRoLzI7ZWxzZXtmb3IodmFyIGw9MDtsPGk7bCsrKWlmKGE9dFtpXSxvPXRbbF0sIShhLnNvdXJjZS5jb2x1bW48by50YXJnZXQuY29sdW1ufHxhLnRhcmdldC5jb2x1bW4+by5zb3VyY2UuY29sdW1uKSl7dmFyIGM9dFtsXS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyK3RbbF0ud2lkdGgvMitlO3M9Yz5zP2M6c31uLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxCdWZmZXI9cytuLndpZHRoLzJ9fSksdH1mdW5jdGlvbiBDKHQscixpLGEpe3ZhciBvPWUubWluKHQubGlua3MsZnVuY3Rpb24odCl7cmV0dXJuIHQuc291cmNlLnkwfSk7dC5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY2lyY3VsYXImJih0LmNpcmN1bGFyUGF0aERhdGE9e30pfSksRSh0LmxpbmtzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm5cInRvcFwiPT10LmNpcmN1bGFyTGlua1R5cGV9KSxyLGEpLEUodC5saW5rcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuXCJib3R0b21cIj09dC5jaXJjdWxhckxpbmtUeXBlfSkscixhKSx0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoZS5jaXJjdWxhcil7aWYoZS5jaXJjdWxhclBhdGhEYXRhLmFyY1JhZGl1cz1lLndpZHRoK3csZS5jaXJjdWxhclBhdGhEYXRhLmxlZnROb2RlQnVmZmVyPTUsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0Tm9kZUJ1ZmZlcj01LGUuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VXaWR0aD1lLnNvdXJjZS54MS1lLnNvdXJjZS54MCxlLmNpcmN1bGFyUGF0aERhdGEuc291cmNlWD1lLnNvdXJjZS54MCtlLmNpcmN1bGFyUGF0aERhdGEuc291cmNlV2lkdGgsZS5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFg9ZS50YXJnZXQueDAsZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVk9ZS55MCxlLmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WT1lLnkxLFkoZSxhKSYmUyhlKSllLmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzPXcrZS53aWR0aC8yLGUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXM9dytlLndpZHRoLzIsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXM9dytlLndpZHRoLzIsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXM9dytlLndpZHRoLzIsXCJib3R0b21cIj09ZS5jaXJjdWxhckxpbmtUeXBlPyhlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50PWUuc291cmNlLnkxK18rZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50LWUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50LWUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKTooZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudD1lLnNvdXJjZS55MC1fLWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCtlLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCtlLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cyk7ZWxzZXt2YXIgcz1lLnNvdXJjZS5jb2x1bW4sbD1lLmNpcmN1bGFyTGlua1R5cGUsYz10LmxpbmtzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5zb3VyY2UuY29sdW1uPT1zJiZ0LmNpcmN1bGFyTGlua1R5cGU9PWx9KTtcImJvdHRvbVwiPT1lLmNpcmN1bGFyTGlua1R5cGU/Yy5zb3J0KE8pOmMuc29ydCh6KTt2YXIgdT0wO2MuZm9yRWFjaChmdW5jdGlvbih0LG4pe3QuY2lyY3VsYXJMaW5rSUQ9PWUuY2lyY3VsYXJMaW5rSUQmJihlLmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzPXcrZS53aWR0aC8yK3UsZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cz13K2Uud2lkdGgvMituKnIrdSksdSs9dC53aWR0aH0pLHM9ZS50YXJnZXQuY29sdW1uLGM9dC5saW5rcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQudGFyZ2V0LmNvbHVtbj09cyYmdC5jaXJjdWxhckxpbmtUeXBlPT1sfSksXCJib3R0b21cIj09ZS5jaXJjdWxhckxpbmtUeXBlP2Muc29ydChEKTpjLnNvcnQoSSksdT0wLGMuZm9yRWFjaChmdW5jdGlvbih0LG4pe3QuY2lyY3VsYXJMaW5rSUQ9PWUuY2lyY3VsYXJMaW5rSUQmJihlLmNpcmN1bGFyUGF0aERhdGEucmlnaHRTbWFsbEFyY1JhZGl1cz13K2Uud2lkdGgvMit1LGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzPXcrZS53aWR0aC8yK24qcit1KSx1Kz10LndpZHRofSksXCJib3R0b21cIj09ZS5jaXJjdWxhckxpbmtUeXBlPyhlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50PU1hdGgubWF4KGksZS5zb3VyY2UueTEsZS50YXJnZXQueTEpK18rZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50LWUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50LWUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKTooZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudD1vLV8tZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K2UuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K2UuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKX1lLmNpcmN1bGFyUGF0aERhdGEubGVmdElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VYK2UuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0Tm9kZUJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEucmlnaHRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WC1lLmNpcmN1bGFyUGF0aERhdGEucmlnaHROb2RlQnVmZmVyLGUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0RnVsbEV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEuc291cmNlWCtlLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzK2UuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0Tm9kZUJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEucmlnaHRGdWxsRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRYLWUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzLWUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodE5vZGVCdWZmZXJ9aWYoZS5jaXJjdWxhcillLnBhdGg9ZnVuY3Rpb24odCl7dmFyIGU9XCJcIjtlPVwidG9wXCI9PXQuY2lyY3VsYXJMaW5rVHlwZT9cIk1cIit0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWCtcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWStcIiBMXCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudCtcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWStcIiBBXCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cytcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzK1wiIDAgMCAwIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0RnVsbEV4dGVudCtcIiBcIisodC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVktdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRTbWFsbEFyY1JhZGl1cykrXCIgTFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0RnVsbEV4dGVudCtcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQrXCIgQVwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cytcIiAwIDAgMCBcIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdElubmVyRXh0ZW50K1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQrXCIgTFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodElubmVyRXh0ZW50K1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQrXCIgQVwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzK1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzK1wiIDAgMCAwIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodEZ1bGxFeHRlbnQrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudCtcIiBMXCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0RnVsbEV4dGVudCtcIiBcIisodC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFktdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXMpK1wiIEFcIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cytcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRTbWFsbEFyY1JhZGl1cytcIiAwIDAgMCBcIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRJbm5lckV4dGVudCtcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WStcIiBMXCIrdC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFgrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFk6XCJNXCIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVgrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVkrXCIgTFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0SW5uZXJFeHRlbnQrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVkrXCIgQVwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRTbWFsbEFyY1JhZGl1cytcIiAwIDAgMSBcIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdEZ1bGxFeHRlbnQrXCIgXCIrKHQuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0U21hbGxBcmNSYWRpdXMpK1wiIExcIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdEZ1bGxFeHRlbnQrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50K1wiIEFcIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzK1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMrXCIgMCAwIDEgXCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudCtcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K1wiIExcIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRJbm5lckV4dGVudCtcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K1wiIEFcIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cytcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cytcIiAwIDAgMSBcIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRGdWxsRXh0ZW50K1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQrXCIgTFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodEZ1bGxFeHRlbnQrXCIgXCIrKHQuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodFNtYWxsQXJjUmFkaXVzKStcIiBBXCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXMrXCIgMCAwIDEgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFkrXCIgTFwiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRYK1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZO3JldHVybiBlfShlKTtlbHNle3ZhciBoPW4ubGlua0hvcml6b250YWwoKS5zb3VyY2UoZnVuY3Rpb24odCl7cmV0dXJuW3Quc291cmNlLngwKyh0LnNvdXJjZS54MS10LnNvdXJjZS54MCksdC55MF19KS50YXJnZXQoZnVuY3Rpb24odCl7cmV0dXJuW3QudGFyZ2V0LngwLHQueTFdfSk7ZS5wYXRoPWgoZSl9fSl9ZnVuY3Rpb24gTCh0LGUpe3JldHVybiBQKHQpPT1QKGUpP1wiYm90dG9tXCI9PXQuY2lyY3VsYXJMaW5rVHlwZT9PKHQsZSk6eih0LGUpOlAoZSktUCh0KX1mdW5jdGlvbiB6KHQsZSl7cmV0dXJuIHQueTAtZS55MH1mdW5jdGlvbiBPKHQsZSl7cmV0dXJuIGUueTAtdC55MH1mdW5jdGlvbiBJKHQsZSl7cmV0dXJuIHQueTEtZS55MX1mdW5jdGlvbiBEKHQsZSl7cmV0dXJuIGUueTEtdC55MX1mdW5jdGlvbiBQKHQpe3JldHVybiB0LnRhcmdldC5jb2x1bW4tdC5zb3VyY2UuY29sdW1ufWZ1bmN0aW9uIFIodCl7cmV0dXJuIHQudGFyZ2V0LngwLXQuc291cmNlLngxfWZ1bmN0aW9uIEYodCxlKXt2YXIgcj1UKHQpLG49UihlKS9NYXRoLnRhbihyKTtyZXR1cm5cInVwXCI9PUcodCk/dC55MStuOnQueTEtbn1mdW5jdGlvbiBCKHQsZSl7dmFyIHI9VCh0KSxuPVIoZSkvTWF0aC50YW4ocik7cmV0dXJuXCJ1cFwiPT1HKHQpP3QueTEtbjp0LnkxK259ZnVuY3Rpb24gTih0LGUscixuKXt0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24oaSl7aWYoIWkuY2lyY3VsYXImJmkudGFyZ2V0LmNvbHVtbi1pLnNvdXJjZS5jb2x1bW4+MSl7dmFyIGE9aS5zb3VyY2UuY29sdW1uKzEsbz1pLnRhcmdldC5jb2x1bW4tMSxzPTEsbD1vLWErMTtmb3Iocz0xO2E8PW87YSsrLHMrKyl0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24obyl7aWYoby5jb2x1bW49PWEpe3ZhciBjLHU9cy8obCsxKSxoPU1hdGgucG93KDEtdSwzKSxmPTMqdSpNYXRoLnBvdygxLXUsMikscD0zKk1hdGgucG93KHUsMikqKDEtdSksZD1NYXRoLnBvdyh1LDMpLGc9aCppLnkwK2YqaS55MCtwKmkueTErZCppLnkxLHY9Zy1pLndpZHRoLzIsbT1nK2kud2lkdGgvMjt2Pm8ueTAmJnY8by55MT8oYz1vLnkxLXYrMTAsYz1cImJvdHRvbVwiPT1vLmNpcmN1bGFyTGlua1R5cGU/YzotYyxvPVYobyxjLGUsciksdC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2IodCxuKSE9YihvLG4pJiZ0LmNvbHVtbj09by5jb2x1bW4mJmoobyx0KSYmVih0LGMsZSxyKX0pKTptPm8ueTAmJm08by55MT8oYz1tLW8ueTArMTAsbz1WKG8sYyxlLHIpLHQubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXtiKHQsbikhPWIobyxuKSYmdC5jb2x1bW49PW8uY29sdW1uJiZ0LnkwPG8ueTEmJnQueTE+by55MSYmVih0LGMsZSxyKX0pKTp2PG8ueTAmJm0+by55MSYmKGM9bS1vLnkwKzEwLG89VihvLGMsZSxyKSx0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7Yih0LG4pIT1iKG8sbikmJnQuY29sdW1uPT1vLmNvbHVtbiYmdC55MDxvLnkxJiZ0LnkxPm8ueTEmJlYodCxjLGUscil9KSl9fSl9fSl9ZnVuY3Rpb24gaih0LGUpe3JldHVybiB0LnkwPmUueTAmJnQueTA8ZS55MXx8KHQueTE+ZS55MCYmdC55MTxlLnkxfHx0LnkwPGUueTAmJnQueTE+ZS55MSl9ZnVuY3Rpb24gVih0LGUscixuKXtyZXR1cm4gdC55MCtlPj1yJiZ0LnkxK2U8PW4mJih0LnkwPXQueTArZSx0LnkxPXQueTErZSx0LnRhcmdldExpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC55MT10LnkxK2V9KSx0LnNvdXJjZUxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC55MD10LnkwK2V9KSksdH1mdW5jdGlvbiBVKHQsZSxyLG4pe3Qubm9kZXMuZm9yRWFjaChmdW5jdGlvbihpKXtuJiZpLnkrKGkueTEtaS55MCk+ZSYmKGkueT1pLnktKGkueSsoaS55MS1pLnkwKS1lKSk7dmFyIGE9dC5saW5rcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGIodC5zb3VyY2Uscik9PWIoaSxyKX0pLG89YS5sZW5ndGg7bz4xJiZhLnNvcnQoZnVuY3Rpb24odCxlKXtpZighdC5jaXJjdWxhciYmIWUuY2lyY3VsYXIpe2lmKHQudGFyZ2V0LmNvbHVtbj09ZS50YXJnZXQuY29sdW1uKXJldHVybiB0LnkxLWUueTE7aWYoIUgodCxlKSlyZXR1cm4gdC55MS1lLnkxO2lmKHQudGFyZ2V0LmNvbHVtbj5lLnRhcmdldC5jb2x1bW4pe3ZhciByPUIoZSx0KTtyZXR1cm4gdC55MS1yfWlmKGUudGFyZ2V0LmNvbHVtbj50LnRhcmdldC5jb2x1bW4pcmV0dXJuIEIodCxlKS1lLnkxfXJldHVybiB0LmNpcmN1bGFyJiYhZS5jaXJjdWxhcj9cInRvcFwiPT10LmNpcmN1bGFyTGlua1R5cGU/LTE6MTplLmNpcmN1bGFyJiYhdC5jaXJjdWxhcj9cInRvcFwiPT1lLmNpcmN1bGFyTGlua1R5cGU/MTotMTp0LmNpcmN1bGFyJiZlLmNpcmN1bGFyP3QuY2lyY3VsYXJMaW5rVHlwZT09PWUuY2lyY3VsYXJMaW5rVHlwZSYmXCJ0b3BcIj09dC5jaXJjdWxhckxpbmtUeXBlP3QudGFyZ2V0LmNvbHVtbj09PWUudGFyZ2V0LmNvbHVtbj90LnRhcmdldC55MS1lLnRhcmdldC55MTplLnRhcmdldC5jb2x1bW4tdC50YXJnZXQuY29sdW1uOnQuY2lyY3VsYXJMaW5rVHlwZT09PWUuY2lyY3VsYXJMaW5rVHlwZSYmXCJib3R0b21cIj09dC5jaXJjdWxhckxpbmtUeXBlP3QudGFyZ2V0LmNvbHVtbj09PWUudGFyZ2V0LmNvbHVtbj9lLnRhcmdldC55MS10LnRhcmdldC55MTp0LnRhcmdldC5jb2x1bW4tZS50YXJnZXQuY29sdW1uOlwidG9wXCI9PXQuY2lyY3VsYXJMaW5rVHlwZT8tMToxOnZvaWQgMH0pO3ZhciBzPWkueTA7YS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QueTA9cyt0LndpZHRoLzIscys9dC53aWR0aH0pLGEuZm9yRWFjaChmdW5jdGlvbih0LGUpe2lmKFwiYm90dG9tXCI9PXQuY2lyY3VsYXJMaW5rVHlwZSl7Zm9yKHZhciByPWUrMSxuPTA7cjxvO3IrKyluKz1hW3JdLndpZHRoO3QueTA9aS55MS1uLXQud2lkdGgvMn19KX0pfWZ1bmN0aW9uIHEodCxlLHIpe3Qubm9kZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj10LmxpbmtzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gYih0LnRhcmdldCxyKT09YihlLHIpfSksaT1uLmxlbmd0aDtpPjEmJm4uc29ydChmdW5jdGlvbih0LGUpe2lmKCF0LmNpcmN1bGFyJiYhZS5jaXJjdWxhcil7aWYodC5zb3VyY2UuY29sdW1uPT1lLnNvdXJjZS5jb2x1bW4pcmV0dXJuIHQueTAtZS55MDtpZighSCh0LGUpKXJldHVybiB0LnkwLWUueTA7aWYoZS5zb3VyY2UuY29sdW1uPHQuc291cmNlLmNvbHVtbil7dmFyIHI9RihlLHQpO3JldHVybiB0LnkwLXJ9aWYodC5zb3VyY2UuY29sdW1uPGUuc291cmNlLmNvbHVtbilyZXR1cm4gRih0LGUpLWUueTB9cmV0dXJuIHQuY2lyY3VsYXImJiFlLmNpcmN1bGFyP1widG9wXCI9PXQuY2lyY3VsYXJMaW5rVHlwZT8tMToxOmUuY2lyY3VsYXImJiF0LmNpcmN1bGFyP1widG9wXCI9PWUuY2lyY3VsYXJMaW5rVHlwZT8xOi0xOnQuY2lyY3VsYXImJmUuY2lyY3VsYXI/dC5jaXJjdWxhckxpbmtUeXBlPT09ZS5jaXJjdWxhckxpbmtUeXBlJiZcInRvcFwiPT10LmNpcmN1bGFyTGlua1R5cGU/dC5zb3VyY2UuY29sdW1uPT09ZS5zb3VyY2UuY29sdW1uP3Quc291cmNlLnkxLWUuc291cmNlLnkxOnQuc291cmNlLmNvbHVtbi1lLnNvdXJjZS5jb2x1bW46dC5jaXJjdWxhckxpbmtUeXBlPT09ZS5jaXJjdWxhckxpbmtUeXBlJiZcImJvdHRvbVwiPT10LmNpcmN1bGFyTGlua1R5cGU/dC5zb3VyY2UuY29sdW1uPT09ZS5zb3VyY2UuY29sdW1uP3Quc291cmNlLnkxLWUuc291cmNlLnkxOmUuc291cmNlLmNvbHVtbi10LnNvdXJjZS5jb2x1bW46XCJ0b3BcIj09dC5jaXJjdWxhckxpbmtUeXBlPy0xOjE6dm9pZCAwfSk7dmFyIGE9ZS55MDtuLmZvckVhY2goZnVuY3Rpb24odCl7dC55MT1hK3Qud2lkdGgvMixhKz10LndpZHRofSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQscil7aWYoXCJib3R0b21cIj09dC5jaXJjdWxhckxpbmtUeXBlKXtmb3IodmFyIGE9cisxLG89MDthPGk7YSsrKW8rPW5bYV0ud2lkdGg7dC55MT1lLnkxLW8tdC53aWR0aC8yfX0pfSl9ZnVuY3Rpb24gSCh0LGUpe3JldHVybiBHKHQpPT1HKGUpfWZ1bmN0aW9uIEcodCl7cmV0dXJuIHQueTAtdC55MT4wP1widXBcIjpcImRvd25cIn1mdW5jdGlvbiBZKHQsZSl7cmV0dXJuIGIodC5zb3VyY2UsZSk9PWIodC50YXJnZXQsZSl9dC5zYW5rZXlDaXJjdWxhcj1mdW5jdGlvbigpe3ZhciB0LG4sYT0wLGI9MCxUPTEsUz0xLEU9MjQsTD12LHo9byxPPW0sST15LEQ9MzIsUD0yLFI9bnVsbDtmdW5jdGlvbiBGKCl7dmFyIG89e25vZGVzOk8uYXBwbHkobnVsbCxhcmd1bWVudHMpLGxpbmtzOkkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTshZnVuY3Rpb24odCl7dC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dC5pbmRleD1lLHQuc291cmNlTGlua3M9W10sdC50YXJnZXRMaW5rcz1bXX0pO3ZhciBlPXIubWFwKHQubm9kZXMsTCk7dC5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQscil7dC5pbmRleD1yO3ZhciBuPXQuc291cmNlLGk9dC50YXJnZXQ7XCJvYmplY3RcIiE9PShcInVuZGVmaW5lZFwiPT10eXBlb2Ygbj9cInVuZGVmaW5lZFwiOmwobikpJiYobj10LnNvdXJjZT14KGUsbikpLFwib2JqZWN0XCIhPT0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIGk/XCJ1bmRlZmluZWRcIjpsKGkpKSYmKGk9dC50YXJnZXQ9eChlLGkpKSxuLnNvdXJjZUxpbmtzLnB1c2godCksaS50YXJnZXRMaW5rcy5wdXNoKHQpfSl9KG8pLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0wO2lmKG51bGw9PT1yKXtmb3IodmFyIGE9W10sbz0wO288dC5saW5rcy5sZW5ndGg7bysrKXt2YXIgcz10LmxpbmtzW29dLGw9cy5zb3VyY2UuaW5kZXgsYz1zLnRhcmdldC5pbmRleDthW2xdfHwoYVtsXT1bXSksYVtjXXx8KGFbY109W10pLC0xPT09YVtsXS5pbmRleE9mKGMpJiZhW2xdLnB1c2goYyl9dmFyIHU9aShhKTt1LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGgtZS5sZW5ndGh9KTt2YXIgaD17fTtmb3Iobz0wO288dS5sZW5ndGg7bysrKXtmb3IodmFyIGY9dVtvXSxwPSExLGQ9MDtkPGYubGVuZ3RoLTE7ZCsrKWlmKGhbZltkXV18fChoW2ZbZF1dPXt9KSxoW2ZbZF1dJiZoW2ZbZF1dW2ZbZCsxXV0pe3A9ITA7YnJlYWt9aWYoIXApe3ZhciBnPWYuc2xpY2UoLTIpO2hbZ1swXV1bZ1sxXV09ITB9fXQubGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LnRhcmdldC5pbmRleCxyPXQuc291cmNlLmluZGV4O2U9PT1yfHxoW3JdJiZoW3JdW2VdPyh0LmNpcmN1bGFyPSEwLHQuY2lyY3VsYXJMaW5rSUQ9bixuKz0xKTp0LmNpcmN1bGFyPSExfSl9ZWxzZSB0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC5zb3VyY2Vbcl08dC50YXJnZXRbcl0/dC5jaXJjdWxhcj0hMToodC5jaXJjdWxhcj0hMCx0LmNpcmN1bGFyTGlua0lEPW4sbis9MSl9KX0obywwLFIpLGZ1bmN0aW9uKHQpe3Qubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnBhcnRPZkN5Y2xlPSExLHQudmFsdWU9TWF0aC5tYXgoZS5zdW0odC5zb3VyY2VMaW5rcyxmKSxlLnN1bSh0LnRhcmdldExpbmtzLGYpKSx0LnNvdXJjZUxpbmtzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5jaXJjdWxhciYmKHQucGFydE9mQ3ljbGU9ITAsdC5jaXJjdWxhckxpbmtUeXBlPWUuY2lyY3VsYXJMaW5rVHlwZSl9KSx0LnRhcmdldExpbmtzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5jaXJjdWxhciYmKHQucGFydE9mQ3ljbGU9ITAsdC5jaXJjdWxhckxpbmtUeXBlPWUuY2lyY3VsYXJMaW5rVHlwZSl9KX0pfShvKSxmdW5jdGlvbih0KXt2YXIgZSxyLG47Zm9yKGU9dC5ub2RlcyxyPVtdLG49MDtlLmxlbmd0aDsrK24sZT1yLHI9W10pZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZGVwdGg9bix0LnNvdXJjZUxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7ci5pbmRleE9mKHQudGFyZ2V0KTwwJiYhdC5jaXJjdWxhciYmci5wdXNoKHQudGFyZ2V0KX0pfSk7Zm9yKGU9dC5ub2RlcyxyPVtdLG49MDtlLmxlbmd0aDsrK24sZT1yLHI9W10pZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuaGVpZ2h0PW4sdC50YXJnZXRMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3IuaW5kZXhPZih0LnNvdXJjZSk8MCYmIXQuY2lyY3VsYXImJnIucHVzaCh0LnNvdXJjZSl9KX0pO3Qubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNvbHVtbj1NYXRoLmZsb29yKHouY2FsbChudWxsLHQsbikpfSl9KG8pLEEobyxMKSxmdW5jdGlvbihpLG8scyl7dmFyIGw9ci5uZXN0KCkua2V5KGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbn0pLnNvcnRLZXlzKGUuYXNjZW5kaW5nKS5lbnRyaWVzKGkubm9kZXMpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZXN9KTsoZnVuY3Rpb24ocil7aWYobil7dmFyIG89MS8wO2wuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1TKm4vKHQubGVuZ3RoKzEpO289ZTxvP2U6b30pLHQ9b312YXIgcz1lLm1pbihsLGZ1bmN0aW9uKHIpe3JldHVybihTLWItKHIubGVuZ3RoLTEpKnQpL2Uuc3VtKHIsZil9KTtzKj1rLGkubGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LndpZHRoPXQudmFsdWUqc30pO3ZhciBjPWZ1bmN0aW9uKHQpe3ZhciByPTAsbj0wLGk9MCxhPTAsbz1lLm1heCh0Lm5vZGVzLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbn0pO3JldHVybiB0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC5jaXJjdWxhciYmKFwidG9wXCI9PXQuY2lyY3VsYXJMaW5rVHlwZT9yKz10LndpZHRoOm4rPXQud2lkdGgsMD09dC50YXJnZXQuY29sdW1uJiYoYSs9dC53aWR0aCksdC5zb3VyY2UuY29sdW1uPT1vJiYoaSs9dC53aWR0aCkpfSkse3RvcDpyPXI+MD9yK18rdzpyLGJvdHRvbTpuPW4+MD9uK18rdzpuLGxlZnQ6YT1hPjA/YStfK3c6YSxyaWdodDppPWk+MD9pK18rdzppfX0oaSksdT1mdW5jdGlvbih0LHIpe3ZhciBuPWUubWF4KHQubm9kZXMsZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sdW1ufSksaT1ULWEsbz1TLWIscz1pK3IucmlnaHQrci5sZWZ0LGw9bytyLnRvcCtyLmJvdHRvbSxjPWkvcyx1PW8vbDtyZXR1cm4gYT1hKmMrci5sZWZ0LFQ9MD09ci5yaWdodD9UOlQqYyxiPWIqdStyLnRvcCxTKj11LHQubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LngwPWErdC5jb2x1bW4qKChULWEtRSkvbiksdC54MT10LngwK0V9KSx1fShpLGMpO3MqPXUsaS5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Qud2lkdGg9dC52YWx1ZSpzfSksbC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3QuZm9yRWFjaChmdW5jdGlvbih0LG4pe3QuZGVwdGg9PWwubGVuZ3RoLTEmJjE9PWU/KHQueTA9Uy8yLXQudmFsdWUqcyx0LnkxPXQueTArdC52YWx1ZSpzKTowPT10LmRlcHRoJiYxPT1lPyh0LnkwPVMvMi10LnZhbHVlKnMsdC55MT10LnkwK3QudmFsdWUqcyk6dC5wYXJ0T2ZDeWNsZT8wPT1NKHQscik/KHQueTA9Uy8yK24sdC55MT10LnkwK3QudmFsdWUqcyk6XCJ0b3BcIj09dC5jaXJjdWxhckxpbmtUeXBlPyh0LnkwPWIrbix0LnkxPXQueTArdC52YWx1ZSpzKToodC55MD1TLXQudmFsdWUqcy1uLHQueTE9dC55MCt0LnZhbHVlKnMpOjA9PWMudG9wfHwwPT1jLmJvdHRvbT8odC55MD0oUy1iKS9lKm4sdC55MT10LnkwK3QudmFsdWUqcyk6KHQueTA9KFMtYikvMi1lLzIrbix0LnkxPXQueTArdC52YWx1ZSpzKX0pfSl9KShzKSxtKCk7Zm9yKHZhciBjPTEsdT1vO3U+MDstLXUpdihjKj0uOTkscyksbSgpO2Z1bmN0aW9uIHYodCxyKXt2YXIgbj1sLmxlbmd0aDtsLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIGE9aS5sZW5ndGgsbz1pWzBdLmRlcHRoO2kuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgcztpZihpLnNvdXJjZUxpbmtzLmxlbmd0aHx8aS50YXJnZXRMaW5rcy5sZW5ndGgpaWYoaS5wYXJ0T2ZDeWNsZSYmTShpLHIpPjApO2Vsc2UgaWYoMD09byYmMT09YSlzPWkueTEtaS55MCxpLnkwPVMvMi1zLzIsaS55MT1TLzIrcy8yO2Vsc2UgaWYobz09bi0xJiYxPT1hKXM9aS55MS1pLnkwLGkueTA9Uy8yLXMvMixpLnkxPVMvMitzLzI7ZWxzZXt2YXIgbD1lLm1lYW4oaS5zb3VyY2VMaW5rcyxnKSxjPWUubWVhbihpLnRhcmdldExpbmtzLGQpLHU9KChsJiZjPyhsK2MpLzI6bHx8YyktcChpKSkqdDtpLnkwKz11LGkueTErPXV9fSl9KX1mdW5jdGlvbiBtKCl7bC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByLG4saSxhPWIsbz1lLmxlbmd0aDtmb3IoZS5zb3J0KGgpLGk9MDtpPG87KytpKXI9ZVtpXSwobj1hLXIueTApPjAmJihyLnkwKz1uLHIueTErPW4pLGE9ci55MSt0O2lmKChuPWEtdC1TKT4wKWZvcihhPXIueTAtPW4sci55MS09bixpPW8tMjtpPj0wOy0taSlyPWVbaV0sKG49ci55MSt0LWEpPjAmJihyLnkwLT1uLHIueTEtPW4pLGE9ci55MH0pfX0obyxELEwpLEIobyk7Zm9yKHZhciBzPTA7czw0O3MrKylVKG8sUyxMKSxxKG8sMCxMKSxOKG8sYixTLEwpLFUobyxTLEwpLHEobywwLEwpO3JldHVybiBmdW5jdGlvbih0LHIsbil7dmFyIGk9dC5ub2RlcyxhPXQubGlua3Msbz0hMSxzPSExO2lmKGEuZm9yRWFjaChmdW5jdGlvbih0KXtcInRvcFwiPT10LmNpcmN1bGFyTGlua1R5cGU/bz0hMDpcImJvdHRvbVwiPT10LmNpcmN1bGFyTGlua1R5cGUmJihzPSEwKX0pLDA9PW98fDA9PXMpe3ZhciBsPWUubWluKGksZnVuY3Rpb24odCl7cmV0dXJuIHQueTB9KSxjPWUubWF4KGksZnVuY3Rpb24odCl7cmV0dXJuIHQueTF9KSx1PWMtbCxoPW4tcixmPWgvdTtpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9KHQueTEtdC55MCkqZjt0LnkwPSh0LnkwLWwpKmYsdC55MT10LnkwK2V9KSxhLmZvckVhY2goZnVuY3Rpb24odCl7dC55MD0odC55MC1sKSpmLHQueTE9KHQueTEtbCkqZix0LndpZHRoPXQud2lkdGgqZn0pfX0obyxiLFMpLEMobyxQLFMsTCksb31mdW5jdGlvbiBCKHQpe3Qubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnNvdXJjZUxpbmtzLnNvcnQodSksdC50YXJnZXRMaW5rcy5zb3J0KGMpfSksdC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQueTAscj1lLG49dC55MSxpPW47dC5zb3VyY2VMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY2lyY3VsYXI/KHQueTA9bi10LndpZHRoLzIsbi09dC53aWR0aCk6KHQueTA9ZSt0LndpZHRoLzIsZSs9dC53aWR0aCl9KSx0LnRhcmdldExpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC5jaXJjdWxhcj8odC55MT1pLXQud2lkdGgvMixpLT10LndpZHRoKToodC55MT1yK3Qud2lkdGgvMixyKz10LndpZHRoKX0pfSl9cmV0dXJuIEYubm9kZUlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhMPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpzKHQpLEYpOkx9LEYubm9kZUFsaWduPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh6PVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpzKHQpLEYpOnp9LEYubm9kZVdpZHRoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPSt0LEYpOkV9LEYubm9kZVBhZGRpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2UsRik6dH0sRi5ub2Rlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cyh0KSxGKTpPfSxGLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhJPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpzKHQpLEYpOkl9LEYuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1iPTAsVD0rdFswXSxTPSt0WzFdLEYpOltULWEsUy1iXX0sRi5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3RbMF1bMF0sVD0rdFsxXVswXSxiPSt0WzBdWzFdLFM9K3RbMV1bMV0sRik6W1thLGJdLFtULFNdXX0sRi5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhEPSt0LEYpOkR9LEYuY2lyY3VsYXJMaW5rR2FwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhQPSt0LEYpOlB9LEYubm9kZVBhZGRpbmdSYXRpbz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxGKTpufSxGLnNvcnROb2Rlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUj10LEYpOlJ9LEYudXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBBKHQsTCksQih0KSx0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC5jaXJjdWxhciYmKHQuY2lyY3VsYXJMaW5rVHlwZT10LnkwK3QueTE8Uz9cInRvcFwiOlwiYm90dG9tXCIsdC5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZT10LmNpcmN1bGFyTGlua1R5cGUsdC50YXJnZXQuY2lyY3VsYXJMaW5rVHlwZT10LmNpcmN1bGFyTGlua1R5cGUpfSksVSh0LFMsTCwhMSkscSh0LDAsTCksQyh0LFAsUyxMKSx0fSxGfSx0LnNhbmtleUNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdC50YXJnZXRMaW5rcy5sZW5ndGg/dC5kZXB0aDp0LnNvdXJjZUxpbmtzLmxlbmd0aD9lLm1pbih0LnNvdXJjZUxpbmtzLGEpLTE6MH0sdC5zYW5rZXlMZWZ0PWZ1bmN0aW9uKHQpe3JldHVybiB0LmRlcHRofSx0LnNhbmtleVJpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtMS10LmhlaWdodH0sdC5zYW5rZXlKdXN0aWZ5PW8sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LFwib2JqZWN0XCI9PXR5cGVvZiByJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZT9pKHIsdChcImQzLWFycmF5XCIpLHQoXCJkMy1jb2xsZWN0aW9uXCIpLHQoXCJkMy1zaGFwZVwiKSx0KFwiZWxlbWVudGFyeS1jaXJjdWl0cy1kaXJlY3RlZC1ncmFwaFwiKSk6aShuLmQzPW4uZDN8fHt9LG4uZDMsbi5kMyxuLmQzLG51bGwpfSx7XCJkMy1hcnJheVwiOjE0MyxcImQzLWNvbGxlY3Rpb25cIjoxNDQsXCJkMy1zaGFwZVwiOjE1MyxcImVsZW1lbnRhcnktY2lyY3VpdHMtZGlyZWN0ZWQtZ3JhcGhcIjoxNjV9XSwxNTM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbixpO249dGhpcyxpPWZ1bmN0aW9uKHQsZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19dmFyIG49TWF0aC5hYnMsaT1NYXRoLmF0YW4yLGE9TWF0aC5jb3Msbz1NYXRoLm1heCxzPU1hdGgubWluLGw9TWF0aC5zaW4sYz1NYXRoLnNxcnQsdT0xZS0xMixoPU1hdGguUEksZj1oLzIscD0yKmg7ZnVuY3Rpb24gZCh0KXtyZXR1cm4gdD49MT9mOnQ8PS0xPy1mOk1hdGguYXNpbih0KX1mdW5jdGlvbiBnKHQpe3JldHVybiB0LmlubmVyUmFkaXVzfWZ1bmN0aW9uIHYodCl7cmV0dXJuIHQub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIHkodCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24geCh0KXtyZXR1cm4gdCYmdC5wYWRBbmdsZX1mdW5jdGlvbiBiKHQsZSxyLG4saSxhLHMpe3ZhciBsPXQtcix1PWUtbixoPShzP2E6LWEpL2MobCpsK3UqdSksZj1oKnUscD0taCpsLGQ9dCtmLGc9ZStwLHY9citmLG09bitwLHk9KGQrdikvMix4PShnK20pLzIsYj12LWQsXz1tLWcsdz1iKmIrXypfLGs9aS1hLEE9ZCptLXYqZyxUPShfPDA/LTE6MSkqYyhvKDAsayprKnctQSpBKSksTT0oQSpfLWIqVCkvdyxTPSgtQSpiLV8qVCkvdyxFPShBKl8rYipUKS93LEM9KC1BKmIrXypUKS93LEw9TS15LHo9Uy14LE89RS15LEk9Qy14O3JldHVybiBMKkwreip6Pk8qTytJKkkmJihNPUUsUz1DKSx7Y3g6TSxjeTpTLHgwMTotZix5MDE6LXAseDExOk0qKGkvay0xKSx5MTE6UyooaS9rLTEpfX1mdW5jdGlvbiBfKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiB3KHQpe3JldHVybiBuZXcgXyh0KX1mdW5jdGlvbiBrKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIEEodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gVCgpe3ZhciB0PWssbj1BLGk9cighMCksYT1udWxsLG89dyxzPW51bGw7ZnVuY3Rpb24gbChyKXt2YXIgbCxjLHUsaD1yLmxlbmd0aCxmPSExO2ZvcihudWxsPT1hJiYocz1vKHU9ZS5wYXRoKCkpKSxsPTA7bDw9aDsrK2wpIShsPGgmJmkoYz1yW2xdLGwscikpPT09ZiYmKChmPSFmKT9zLmxpbmVTdGFydCgpOnMubGluZUVuZCgpKSxmJiZzLnBvaW50KCt0KGMsbCxyKSwrbihjLGwscikpO2lmKHUpcmV0dXJuIHM9bnVsbCx1K1wiXCJ8fG51bGx9cmV0dXJuIGwueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6cigrZSksbCk6dH0sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCt0KSxsKTpufSxsLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoISF0KSxsKTppfSxsLmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsbnVsbCE9YSYmKHM9byhhKSksbCk6b30sbC5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2E9cz1udWxsOnM9byhhPXQpLGwpOmF9LGx9ZnVuY3Rpb24gTSgpe3ZhciB0PWssbj1udWxsLGk9cigwKSxhPUEsbz1yKCEwKSxzPW51bGwsbD13LGM9bnVsbDtmdW5jdGlvbiB1KHIpe3ZhciB1LGgsZixwLGQsZz1yLmxlbmd0aCx2PSExLG09bmV3IEFycmF5KGcpLHk9bmV3IEFycmF5KGcpO2ZvcihudWxsPT1zJiYoYz1sKGQ9ZS5wYXRoKCkpKSx1PTA7dTw9ZzsrK3Upe2lmKCEodTxnJiZvKHA9clt1XSx1LHIpKT09PXYpaWYodj0hdiloPXUsYy5hcmVhU3RhcnQoKSxjLmxpbmVTdGFydCgpO2Vsc2V7Zm9yKGMubGluZUVuZCgpLGMubGluZVN0YXJ0KCksZj11LTE7Zj49aDstLWYpYy5wb2ludChtW2ZdLHlbZl0pO2MubGluZUVuZCgpLGMuYXJlYUVuZCgpfXYmJihtW3VdPSt0KHAsdSxyKSx5W3VdPStpKHAsdSxyKSxjLnBvaW50KG4/K24ocCx1LHIpOm1bdV0sYT8rYShwLHUscik6eVt1XSkpfWlmKGQpcmV0dXJuIGM9bnVsbCxkK1wiXCJ8fG51bGx9ZnVuY3Rpb24gaCgpe3JldHVybiBUKCkuZGVmaW5lZChvKS5jdXJ2ZShsKS5jb250ZXh0KHMpfXJldHVybiB1Lng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOnIoK2UpLG49bnVsbCx1KTp0fSx1LngwPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTpyKCtlKSx1KTp0fSx1LngxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/bnVsbDpcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cigrdCksdSk6bn0sdS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCt0KSxhPW51bGwsdSk6aX0sdS55MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cigrdCksdSk6aX0sdS55MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1udWxsPT10P251bGw6XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoK3QpLHUpOmF9LHUubGluZVgwPXUubGluZVkwPWZ1bmN0aW9uKCl7cmV0dXJuIGgoKS54KHQpLnkoaSl9LHUubGluZVkxPWZ1bmN0aW9uKCl7cmV0dXJuIGgoKS54KHQpLnkoYSl9LHUubGluZVgxPWZ1bmN0aW9uKCl7cmV0dXJuIGgoKS54KG4pLnkoaSl9LHUuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cighIXQpLHUpOm99LHUuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCxudWxsIT1zJiYoYz1sKHMpKSx1KTpsfSx1LmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/cz1jPW51bGw6Yz1sKHM9dCksdSk6c30sdX1mdW5jdGlvbiBTKHQsZSl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfWZ1bmN0aW9uIEUodCl7cmV0dXJuIHR9Xy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5saW5lVG8odCxlKX19fTt2YXIgQz16KHcpO2Z1bmN0aW9uIEwodCl7dGhpcy5fY3VydmU9dH1mdW5jdGlvbiB6KHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIG5ldyBMKHQoZSkpfXJldHVybiBlLl9jdXJ2ZT10LGV9ZnVuY3Rpb24gTyh0KXt2YXIgZT10LmN1cnZlO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZSh6KHQpKTplKCkuX2N1cnZlfSx0fWZ1bmN0aW9uIEkoKXtyZXR1cm4gTyhUKCkuY3VydmUoQykpfWZ1bmN0aW9uIEQoKXt2YXIgdD1NKCkuY3VydmUoQyksZT10LmN1cnZlLHI9dC5saW5lWDAsbj10LmxpbmVYMSxpPXQubGluZVkwLGE9dC5saW5lWTE7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5zdGFydEFuZ2xlPXQueDAsZGVsZXRlIHQueDAsdC5lbmRBbmdsZT10LngxLGRlbGV0ZSB0LngxLHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuaW5uZXJSYWRpdXM9dC55MCxkZWxldGUgdC55MCx0Lm91dGVyUmFkaXVzPXQueTEsZGVsZXRlIHQueTEsdC5saW5lU3RhcnRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBPKHIoKSl9LGRlbGV0ZSB0LmxpbmVYMCx0LmxpbmVFbmRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBPKG4oKSl9LGRlbGV0ZSB0LmxpbmVYMSx0LmxpbmVJbm5lclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBPKGkoKSl9LGRlbGV0ZSB0LmxpbmVZMCx0LmxpbmVPdXRlclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBPKGEoKSl9LGRlbGV0ZSB0LmxpbmVZMSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2Uoeih0KSk6ZSgpLl9jdXJ2ZX0sdH1mdW5jdGlvbiBQKHQsZSl7cmV0dXJuWyhlPStlKSpNYXRoLmNvcyh0LT1NYXRoLlBJLzIpLGUqTWF0aC5zaW4odCldfUwucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhU3RhcnQoKX0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFFbmQoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5fY3VydmUucG9pbnQoZSpNYXRoLnNpbih0KSxlKi1NYXRoLmNvcyh0KSl9fTt2YXIgUj1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gRih0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gQih0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gTih0KXt2YXIgbj1GLGk9QixhPWssbz1BLHM9bnVsbDtmdW5jdGlvbiBsKCl7dmFyIHIsbD1SLmNhbGwoYXJndW1lbnRzKSxjPW4uYXBwbHkodGhpcyxsKSx1PWkuYXBwbHkodGhpcyxsKTtpZihzfHwocz1yPWUucGF0aCgpKSx0KHMsK2EuYXBwbHkodGhpcywobFswXT1jLGwpKSwrby5hcHBseSh0aGlzLGwpLCthLmFwcGx5KHRoaXMsKGxbMF09dSxsKSksK28uYXBwbHkodGhpcyxsKSkscilyZXR1cm4gcz1udWxsLHIrXCJcInx8bnVsbH1yZXR1cm4gbC5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxsKTpufSxsLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGwpOml9LGwueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cigrdCksbCk6YX0sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCt0KSxsKTpvfSxsLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bnVsbD09dD9udWxsOnQsbCk6c30sbH1mdW5jdGlvbiBqKHQsZSxyLG4saSl7dC5tb3ZlVG8oZSxyKSx0LmJlemllckN1cnZlVG8oZT0oZStuKS8yLHIsZSxpLG4saSl9ZnVuY3Rpb24gVih0LGUscixuLGkpe3QubW92ZVRvKGUsciksdC5iZXppZXJDdXJ2ZVRvKGUscj0ocitpKS8yLG4scixuLGkpfWZ1bmN0aW9uIFUodCxlLHIsbixpKXt2YXIgYT1QKGUsciksbz1QKGUscj0ocitpKS8yKSxzPVAobixyKSxsPVAobixpKTt0Lm1vdmVUbyhhWzBdLGFbMV0pLHQuYmV6aWVyQ3VydmVUbyhvWzBdLG9bMV0sc1swXSxzWzFdLGxbMF0sbFsxXSl9dmFyIHE9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNxcnQoZS9oKTt0Lm1vdmVUbyhyLDApLHQuYXJjKDAsMCxyLDAscCl9fSxIPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KGUvNSkvMjt0Lm1vdmVUbygtMypyLC1yKSx0LmxpbmVUbygtciwtciksdC5saW5lVG8oLXIsLTMqciksdC5saW5lVG8ociwtMypyKSx0LmxpbmVUbyhyLC1yKSx0LmxpbmVUbygzKnIsLXIpLHQubGluZVRvKDMqcixyKSx0LmxpbmVUbyhyLHIpLHQubGluZVRvKHIsMypyKSx0LmxpbmVUbygtciwzKnIpLHQubGluZVRvKC1yLHIpLHQubGluZVRvKC0zKnIsciksdC5jbG9zZVBhdGgoKX19LEc9TWF0aC5zcXJ0KDEvMyksWT0yKkcsVz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc3FydChlL1kpLG49cipHO3QubW92ZVRvKDAsLXIpLHQubGluZVRvKG4sMCksdC5saW5lVG8oMCxyKSx0LmxpbmVUbygtbiwwKSx0LmNsb3NlUGF0aCgpfX0sWD1NYXRoLnNpbihoLzEwKS9NYXRoLnNpbig3KmgvMTApLFo9TWF0aC5zaW4ocC8xMCkqWCwkPS1NYXRoLmNvcyhwLzEwKSpYLEo9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNxcnQoLjg5MDgxMzA5MTUyOTI4NTIqZSksbj1aKnIsaT0kKnI7dC5tb3ZlVG8oMCwtciksdC5saW5lVG8obixpKTtmb3IodmFyIGE9MTthPDU7KythKXt2YXIgbz1wKmEvNSxzPU1hdGguY29zKG8pLGw9TWF0aC5zaW4obyk7dC5saW5lVG8obCpyLC1zKnIpLHQubGluZVRvKHMqbi1sKmksbCpuK3MqaSl9dC5jbG9zZVBhdGgoKX19LEs9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNxcnQoZSksbj0tci8yO3QucmVjdChuLG4scixyKX19LFE9TWF0aC5zcXJ0KDMpLHR0PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9LU1hdGguc3FydChlLygzKlEpKTt0Lm1vdmVUbygwLDIqciksdC5saW5lVG8oLVEqciwtciksdC5saW5lVG8oUSpyLC1yKSx0LmNsb3NlUGF0aCgpfX0sZXQ9LS41LHJ0PU1hdGguc3FydCgzKS8yLG50PTEvTWF0aC5zcXJ0KDEyKSxpdD0zKihudC8yKzEpLGF0PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KGUvaXQpLG49ci8yLGk9cipudCxhPW4sbz1yKm50K3Iscz0tYSxsPW87dC5tb3ZlVG8obixpKSx0LmxpbmVUbyhhLG8pLHQubGluZVRvKHMsbCksdC5saW5lVG8oZXQqbi1ydCppLHJ0Km4rZXQqaSksdC5saW5lVG8oZXQqYS1ydCpvLHJ0KmErZXQqbyksdC5saW5lVG8oZXQqcy1ydCpsLHJ0KnMrZXQqbCksdC5saW5lVG8oZXQqbitydCppLGV0KmktcnQqbiksdC5saW5lVG8oZXQqYStydCpvLGV0Km8tcnQqYSksdC5saW5lVG8oZXQqcytydCpsLGV0KmwtcnQqcyksdC5jbG9zZVBhdGgoKX19LG90PVtxLEgsVyxLLEosdHQsYXRdO2Z1bmN0aW9uIHN0KCl7fWZ1bmN0aW9uIGx0KHQsZSxyKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oKDIqdC5feDArdC5feDEpLzMsKDIqdC5feTArdC5feTEpLzMsKHQuX3gwKzIqdC5feDEpLzMsKHQuX3kwKzIqdC5feTEpLzMsKHQuX3gwKzQqdC5feDErZSkvNiwodC5feTArNCp0Ll95MStyKS82KX1mdW5jdGlvbiBjdCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gdXQodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIGh0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBmdCh0LGUpe3RoaXMuX2Jhc2lzPW5ldyBjdCh0KSx0aGlzLl9iZXRhPWV9Y3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMzpsdCh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKTtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9jb250ZXh0LmxpbmVUbygoNSp0aGlzLl94MCt0aGlzLl94MSkvNiwoNSp0aGlzLl95MCt0aGlzLl95MSkvNik7ZGVmYXVsdDpsdCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX0sdXQucHJvdG90eXBlPXthcmVhU3RhcnQ6c3QsYXJlYUVuZDpzdCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDIrMip0aGlzLl94MykvMywodGhpcy5feTIrMip0aGlzLl95MykvMyksdGhpcy5fY29udGV4dC5saW5lVG8oKHRoaXMuX3gzKzIqdGhpcy5feDIpLzMsKHRoaXMuX3kzKzIqdGhpcy5feTIpLzMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mj10LHRoaXMuX3kyPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSx0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDArNCp0aGlzLl94MSt0KS82LCh0aGlzLl95MCs0KnRoaXMuX3kxK2UpLzYpO2JyZWFrO2RlZmF1bHQ6bHQodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19LGh0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO3ZhciByPSh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYsbj0odGhpcy5feTArNCp0aGlzLl95MStlKS82O3RoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8ocixuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhyLG4pO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6bHQodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19LGZ0LnByb3RvdHlwZT17bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdLHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxlPXRoaXMuX3kscj10Lmxlbmd0aC0xO2lmKHI+MClmb3IodmFyIG4saT10WzBdLGE9ZVswXSxvPXRbcl0taSxzPWVbcl0tYSxsPS0xOysrbDw9cjspbj1sL3IsdGhpcy5fYmFzaXMucG9pbnQodGhpcy5fYmV0YSp0W2xdKygxLXRoaXMuX2JldGEpKihpK24qbyksdGhpcy5fYmV0YSplW2xdKygxLXRoaXMuX2JldGEpKihhK24qcykpO3RoaXMuX3g9dGhpcy5feT1udWxsLHRoaXMuX2Jhc2lzLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrZSl9fTt2YXIgcHQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiAxPT09ZT9uZXcgY3QodCk6bmV3IGZ0KHQsZSl9cmV0dXJuIHIuYmV0YT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KC44NSk7ZnVuY3Rpb24gZHQodCxlLHIpe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0Ll94MSt0Ll9rKih0Ll94Mi10Ll94MCksdC5feTErdC5fayoodC5feTItdC5feTApLHQuX3gyK3QuX2sqKHQuX3gxLWUpLHQuX3kyK3QuX2sqKHQuX3kxLXIpLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiBndCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9Z3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOmR0KHRoaXMsdGhpcy5feDEsdGhpcy5feTEpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94MT10LHRoaXMuX3kxPWU7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpkdCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIHZ0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gbmV3IGd0KHQsZSl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KDApO2Z1bmN0aW9uIG10KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1tdC5wcm90b3R5cGU9e2FyZWFTdGFydDpzdCxhcmVhRW5kOnN0LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6ZHQodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciB5dD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIG5ldyBtdCh0LGUpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxyfSgwKTtmdW5jdGlvbiB4dCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9eHQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6ZHQodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBidD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIG5ldyB4dCh0LGUpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxyfSgwKTtmdW5jdGlvbiBfdCh0LGUscil7dmFyIG49dC5feDEsaT10Ll95MSxhPXQuX3gyLG89dC5feTI7aWYodC5fbDAxX2E+dSl7dmFyIHM9Mip0Ll9sMDFfMmErMyp0Ll9sMDFfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsbD0zKnQuX2wwMV9hKih0Ll9sMDFfYSt0Ll9sMTJfYSk7bj0obipzLXQuX3gwKnQuX2wxMl8yYSt0Ll94Mip0Ll9sMDFfMmEpL2wsaT0oaSpzLXQuX3kwKnQuX2wxMl8yYSt0Ll95Mip0Ll9sMDFfMmEpL2x9aWYodC5fbDIzX2E+dSl7dmFyIGM9Mip0Ll9sMjNfMmErMyp0Ll9sMjNfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsaD0zKnQuX2wyM19hKih0Ll9sMjNfYSt0Ll9sMTJfYSk7YT0oYSpjK3QuX3gxKnQuX2wyM18yYS1lKnQuX2wxMl8yYSkvaCxvPShvKmMrdC5feTEqdC5fbDIzXzJhLXIqdC5fbDEyXzJhKS9ofXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuLGksYSxvLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiB3dCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfXd0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi10LG49dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6X3QodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIga3Q9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlP25ldyB3dCh0LGUpOm5ldyBndCh0LDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oLjUpO2Z1bmN0aW9uIEF0KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9QXQucHJvdG90eXBlPXthcmVhU3RhcnQ6c3QsYXJlYUVuZDpzdCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItdCxuPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDpfdCh0aGlzLHQsZSl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBUdD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGU/bmV3IEF0KHQsZSk6bmV3IG10KHQsMCl9cmV0dXJuIHIuYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxyfSguNSk7ZnVuY3Rpb24gTXQodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1NdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLXQsbj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6X3QodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgU3Q9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlP25ldyBNdCh0LGUpOm5ldyB4dCh0LDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oLjUpO2Z1bmN0aW9uIEV0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBDdCh0KXtyZXR1cm4gdDwwPy0xOjF9ZnVuY3Rpb24gTHQodCxlLHIpe3ZhciBuPXQuX3gxLXQuX3gwLGk9ZS10Ll94MSxhPSh0Ll95MS10Ll95MCkvKG58fGk8MCYmLTApLG89KHItdC5feTEpLyhpfHxuPDAmJi0wKSxzPShhKmkrbypuKS8obitpKTtyZXR1cm4oQ3QoYSkrQ3QobykpKk1hdGgubWluKE1hdGguYWJzKGEpLE1hdGguYWJzKG8pLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiB6dCh0LGUpe3ZhciByPXQuX3gxLXQuX3gwO3JldHVybiByPygzKih0Ll95MS10Ll95MCkvci1lKS8yOmV9ZnVuY3Rpb24gT3QodCxlLHIpe3ZhciBuPXQuX3gwLGk9dC5feTAsYT10Ll94MSxvPXQuX3kxLHM9KGEtbikvMzt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8obitzLGkrcyplLGEtcyxvLXMqcixhLG8pfWZ1bmN0aW9uIEl0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBEdCh0KXt0aGlzLl9jb250ZXh0PW5ldyBQdCh0KX1mdW5jdGlvbiBQdCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gUnQodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEZ0KHQpe3ZhciBlLHIsbj10Lmxlbmd0aC0xLGk9bmV3IEFycmF5KG4pLGE9bmV3IEFycmF5KG4pLG89bmV3IEFycmF5KG4pO2ZvcihpWzBdPTAsYVswXT0yLG9bMF09dFswXSsyKnRbMV0sZT0xO2U8bi0xOysrZSlpW2VdPTEsYVtlXT00LG9bZV09NCp0W2VdKzIqdFtlKzFdO2ZvcihpW24tMV09MixhW24tMV09NyxvW24tMV09OCp0W24tMV0rdFtuXSxlPTE7ZTxuOysrZSlyPWlbZV0vYVtlLTFdLGFbZV0tPXIsb1tlXS09cipvW2UtMV07Zm9yKGlbbi0xXT1vW24tMV0vYVtuLTFdLGU9bi0yO2U+PTA7LS1lKWlbZV09KG9bZV0taVtlKzFdKS9hW2VdO2ZvcihhW24tMV09KHRbbl0raVtuLTFdKS8yLGU9MDtlPG4tMTsrK2UpYVtlXT0yKnRbZSsxXS1pW2UrMV07cmV0dXJuW2ksYV19ZnVuY3Rpb24gQnQodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fdD1lfWZ1bmN0aW9uIE50KHQsZSl7aWYoKGk9dC5sZW5ndGgpPjEpZm9yKHZhciByLG4saSxhPTEsbz10W2VbMF1dLHM9by5sZW5ndGg7YTxpOysrYSlmb3Iobj1vLG89dFtlW2FdXSxyPTA7cjxzOysrcilvW3JdWzFdKz1vW3JdWzBdPWlzTmFOKG5bcl1bMV0pP25bcl1bMF06bltyXVsxXX1mdW5jdGlvbiBqdCh0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSk7LS1lPj0wOylyW2VdPWU7cmV0dXJuIHJ9ZnVuY3Rpb24gVnQodCxlKXtyZXR1cm4gdFtlXX1mdW5jdGlvbiBVdCh0KXt2YXIgZT10Lm1hcChxdCk7cmV0dXJuIGp0KHQpLnNvcnQoZnVuY3Rpb24odCxyKXtyZXR1cm4gZVt0XS1lW3JdfSl9ZnVuY3Rpb24gcXQodCl7Zm9yKHZhciBlLHI9LTEsbj0wLGk9dC5sZW5ndGgsYT0tMS8wOysrcjxpOykoZT0rdFtyXVsxXSk+YSYmKGE9ZSxuPXIpO3JldHVybiBufWZ1bmN0aW9uIEh0KHQpe3ZhciBlPXQubWFwKEd0KTtyZXR1cm4ganQodCkuc29ydChmdW5jdGlvbih0LHIpe3JldHVybiBlW3RdLWVbcl19KX1mdW5jdGlvbiBHdCh0KXtmb3IodmFyIGUscj0wLG49LTEsaT10Lmxlbmd0aDsrK248aTspKGU9K3Rbbl1bMV0pJiYocis9ZSk7cmV0dXJuIHJ9RXQucHJvdG90eXBlPXthcmVhU3RhcnQ6c3QsYXJlYUVuZDpzdCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dD0rdCxlPStlLHRoaXMuX3BvaW50P3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6KHRoaXMuX3BvaW50PTEsdGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKSl9fSxJdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT10aGlzLl90MD1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVhaztjYXNlIDM6T3QodGhpcyx0aGlzLl90MCx6dCh0aGlzLHRoaXMuX3QwKSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3ZhciByPU5hTjtpZihlPStlLCh0PSt0KSE9PXRoaXMuX3gxfHxlIT09dGhpcy5feTEpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsT3QodGhpcyx6dCh0aGlzLHI9THQodGhpcyx0LGUpKSxyKTticmVhaztkZWZhdWx0Ok90KHRoaXMsdGhpcy5fdDAscj1MdCh0aGlzLHQsZSkpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZSx0aGlzLl90MD1yfX19LChEdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJdC5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbih0LGUpe0l0LnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsZSx0KX0sUHQucHJvdG90eXBlPXttb3ZlVG86ZnVuY3Rpb24odCxlKXt0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oZSx0LG4scixhLGkpfX0sUnQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxlPXRoaXMuX3kscj10Lmxlbmd0aDtpZihyKWlmKHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odFswXSxlWzBdKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0WzBdLGVbMF0pLDI9PT1yKXRoaXMuX2NvbnRleHQubGluZVRvKHRbMV0sZVsxXSk7ZWxzZSBmb3IodmFyIG49RnQodCksaT1GdChlKSxhPTAsbz0xO288cjsrK2EsKytvKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuWzBdW2FdLGlbMF1bYV0sblsxXVthXSxpWzFdW2FdLHRbb10sZVtvXSk7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09cikmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfX0sQnQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD10aGlzLl95PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MDx0aGlzLl90JiZ0aGlzLl90PDEmJjI9PT10aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCx0aGlzLl95KSwodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT49MCYmKHRoaXMuX3Q9MS10aGlzLl90LHRoaXMuX2xpbmU9MS10aGlzLl9saW5lKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OmlmKHRoaXMuX3Q8PTApdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCxlKSx0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpO2Vsc2V7dmFyIHI9dGhpcy5feCooMS10aGlzLl90KSt0KnRoaXMuX3Q7dGhpcy5fY29udGV4dC5saW5lVG8ocix0aGlzLl95KSx0aGlzLl9jb250ZXh0LmxpbmVUbyhyLGUpfX10aGlzLl94PXQsdGhpcy5feT1lfX0sdC5hcmM9ZnVuY3Rpb24oKXt2YXIgdD1nLG89dixfPXIoMCksdz1udWxsLGs9bSxBPXksVD14LE09bnVsbDtmdW5jdGlvbiBTKCl7dmFyIHIsZyx2LG09K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLHk9K28uYXBwbHkodGhpcyxhcmd1bWVudHMpLHg9ay5hcHBseSh0aGlzLGFyZ3VtZW50cyktZixTPUEuYXBwbHkodGhpcyxhcmd1bWVudHMpLWYsRT1uKFMteCksQz1TPng7aWYoTXx8KE09cj1lLnBhdGgoKSkseTxtJiYoZz15LHk9bSxtPWcpLHk+dSlpZihFPnAtdSlNLm1vdmVUbyh5KmEoeCkseSpsKHgpKSxNLmFyYygwLDAseSx4LFMsIUMpLG0+dSYmKE0ubW92ZVRvKG0qYShTKSxtKmwoUykpLE0uYXJjKDAsMCxtLFMseCxDKSk7ZWxzZXt2YXIgTCx6LE89eCxJPVMsRD14LFA9UyxSPUUsRj1FLEI9VC5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixOPUI+dSYmKHc/K3cuYXBwbHkodGhpcyxhcmd1bWVudHMpOmMobSptK3kqeSkpLGo9cyhuKHktbSkvMiwrXy5hcHBseSh0aGlzLGFyZ3VtZW50cykpLFY9aixVPWo7aWYoTj51KXt2YXIgcT1kKE4vbSpsKEIpKSxIPWQoTi95KmwoQikpOyhSLT0yKnEpPnU/KEQrPXEqPUM/MTotMSxQLT1xKTooUj0wLEQ9UD0oeCtTKS8yKSwoRi09MipIKT51PyhPKz1IKj1DPzE6LTEsSS09SCk6KEY9MCxPPUk9KHgrUykvMil9dmFyIEc9eSphKE8pLFk9eSpsKE8pLFc9bSphKFApLFg9bSpsKFApO2lmKGo+dSl7dmFyIFosJD15KmEoSSksSj15KmwoSSksSz1tKmEoRCksUT1tKmwoRCk7aWYoRTxoJiYoWj1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3ZhciBsPXItdCxjPW4tZSxoPW8taSxmPXMtYSxwPWYqbC1oKmM7aWYoIShwKnA8dSkpcmV0dXJuW3QrKHA9KGgqKGUtYSktZioodC1pKSkvcCkqbCxlK3AqY119KEcsWSxLLFEsJCxKLFcsWCkpKXt2YXIgdHQ9Ry1aWzBdLGV0PVktWlsxXSxydD0kLVpbMF0sbnQ9Si1aWzFdLGl0PTEvbCgoKHY9KHR0KnJ0K2V0Km50KS8oYyh0dCp0dCtldCpldCkqYyhydCpydCtudCpudCkpKT4xPzA6djwtMT9oOk1hdGguYWNvcyh2KSkvMiksYXQ9YyhaWzBdKlpbMF0rWlsxXSpaWzFdKTtWPXMoaiwobS1hdCkvKGl0LTEpKSxVPXMoaiwoeS1hdCkvKGl0KzEpKX19Rj51P1U+dT8oTD1iKEssUSxHLFkseSxVLEMpLHo9YigkLEosVyxYLHksVSxDKSxNLm1vdmVUbyhMLmN4K0wueDAxLEwuY3krTC55MDEpLFU8aj9NLmFyYyhMLmN4LEwuY3ksVSxpKEwueTAxLEwueDAxKSxpKHoueTAxLHoueDAxKSwhQyk6KE0uYXJjKEwuY3gsTC5jeSxVLGkoTC55MDEsTC54MDEpLGkoTC55MTEsTC54MTEpLCFDKSxNLmFyYygwLDAseSxpKEwuY3krTC55MTEsTC5jeCtMLngxMSksaSh6LmN5K3oueTExLHouY3grei54MTEpLCFDKSxNLmFyYyh6LmN4LHouY3ksVSxpKHoueTExLHoueDExKSxpKHoueTAxLHoueDAxKSwhQykpKTooTS5tb3ZlVG8oRyxZKSxNLmFyYygwLDAseSxPLEksIUMpKTpNLm1vdmVUbyhHLFkpLG0+dSYmUj51P1Y+dT8oTD1iKFcsWCwkLEosbSwtVixDKSx6PWIoRyxZLEssUSxtLC1WLEMpLE0ubGluZVRvKEwuY3grTC54MDEsTC5jeStMLnkwMSksVjxqP00uYXJjKEwuY3gsTC5jeSxWLGkoTC55MDEsTC54MDEpLGkoei55MDEsei54MDEpLCFDKTooTS5hcmMoTC5jeCxMLmN5LFYsaShMLnkwMSxMLngwMSksaShMLnkxMSxMLngxMSksIUMpLE0uYXJjKDAsMCxtLGkoTC5jeStMLnkxMSxMLmN4K0wueDExKSxpKHouY3krei55MTEsei5jeCt6LngxMSksQyksTS5hcmMoei5jeCx6LmN5LFYsaSh6LnkxMSx6LngxMSksaSh6LnkwMSx6LngwMSksIUMpKSk6TS5hcmMoMCwwLG0sUCxELEMpOk0ubGluZVRvKFcsWCl9ZWxzZSBNLm1vdmVUbygwLDApO2lmKE0uY2xvc2VQYXRoKCkscilyZXR1cm4gTT1udWxsLHIrXCJcInx8bnVsbH1yZXR1cm4gUy5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciBlPSgrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMixyPSgray5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtBLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi1oLzI7cmV0dXJuW2EocikqZSxsKHIpKmVdfSxTLmlubmVyUmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTpyKCtlKSxTKTp0fSxTLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCt0KSxTKTpvfSxTLmNvcm5lclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cigrdCksUyk6X30sUy5wYWRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9bnVsbD09dD9udWxsOlwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCt0KSxTKTp3fSxTLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoK3QpLFMpOmt9LFMuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEE9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoK3QpLFMpOkF9LFMucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoK3QpLFMpOlR9LFMuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT1udWxsPT10P251bGw6dCxTKTpNfSxTfSx0LmFyZWE9TSx0LmxpbmU9VCx0LnBpZT1mdW5jdGlvbigpe3ZhciB0PUUsZT1TLG49bnVsbCxpPXIoMCksYT1yKHApLG89cigwKTtmdW5jdGlvbiBzKHIpe3ZhciBzLGwsYyx1LGgsZj1yLmxlbmd0aCxkPTAsZz1uZXcgQXJyYXkoZiksdj1uZXcgQXJyYXkoZiksbT0raS5hcHBseSh0aGlzLGFyZ3VtZW50cykseT1NYXRoLm1pbihwLE1hdGgubWF4KC1wLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpLW0pKSx4PU1hdGgubWluKE1hdGguYWJzKHkpL2Ysby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGI9eCooeTwwPy0xOjEpO2ZvcihzPTA7czxmOysrcykoaD12W2dbc109c109K3QocltzXSxzLHIpKT4wJiYoZCs9aCk7Zm9yKG51bGwhPWU/Zy5zb3J0KGZ1bmN0aW9uKHQscil7cmV0dXJuIGUodlt0XSx2W3JdKX0pOm51bGwhPW4mJmcuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBuKHJbdF0scltlXSl9KSxzPTAsYz1kPyh5LWYqYikvZDowO3M8ZjsrK3MsbT11KWw9Z1tzXSx1PW0rKChoPXZbbF0pPjA/aCpjOjApK2IsdltsXT17ZGF0YTpyW2xdLGluZGV4OnMsdmFsdWU6aCxzdGFydEFuZ2xlOm0sZW5kQW5nbGU6dSxwYWRBbmdsZTp4fTtyZXR1cm4gdn1yZXR1cm4gcy52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6cigrZSkscyk6dH0scy5zb3J0VmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbj1udWxsLHMpOmV9LHMuc29ydD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGU9bnVsbCxzKTpufSxzLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoK3QpLHMpOml9LHMuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoK3QpLHMpOmF9LHMucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoK3QpLHMpOm99LHN9LHQuYXJlYVJhZGlhbD1ELHQucmFkaWFsQXJlYT1ELHQubGluZVJhZGlhbD1JLHQucmFkaWFsTGluZT1JLHQucG9pbnRSYWRpYWw9UCx0LmxpbmtIb3Jpem9udGFsPWZ1bmN0aW9uKCl7cmV0dXJuIE4oail9LHQubGlua1ZlcnRpY2FsPWZ1bmN0aW9uKCl7cmV0dXJuIE4oVil9LHQubGlua1JhZGlhbD1mdW5jdGlvbigpe3ZhciB0PU4oVSk7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5yYWRpdXM9dC55LGRlbGV0ZSB0LnksdH0sdC5zeW1ib2w9ZnVuY3Rpb24oKXt2YXIgdD1yKHEpLG49cig2NCksaT1udWxsO2Z1bmN0aW9uIGEoKXt2YXIgcjtpZihpfHwoaT1yPWUucGF0aCgpKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKS5kcmF3KGksK24uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxyKXJldHVybiBpPW51bGwscitcIlwifHxudWxsfXJldHVybiBhLnR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOnIoZSksYSk6dH0sYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCt0KSxhKTpufSxhLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09dD9udWxsOnQsYSk6aX0sYX0sdC5zeW1ib2xzPW90LHQuc3ltYm9sQ2lyY2xlPXEsdC5zeW1ib2xDcm9zcz1ILHQuc3ltYm9sRGlhbW9uZD1XLHQuc3ltYm9sU3F1YXJlPUssdC5zeW1ib2xTdGFyPUosdC5zeW1ib2xUcmlhbmdsZT10dCx0LnN5bWJvbFd5ZT1hdCx0LmN1cnZlQmFzaXNDbG9zZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB1dCh0KX0sdC5jdXJ2ZUJhc2lzT3Blbj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGh0KHQpfSx0LmN1cnZlQmFzaXM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBjdCh0KX0sdC5jdXJ2ZUJ1bmRsZT1wdCx0LmN1cnZlQ2FyZGluYWxDbG9zZWQ9eXQsdC5jdXJ2ZUNhcmRpbmFsT3Blbj1idCx0LmN1cnZlQ2FyZGluYWw9dnQsdC5jdXJ2ZUNhdG11bGxSb21DbG9zZWQ9VHQsdC5jdXJ2ZUNhdG11bGxSb21PcGVuPVN0LHQuY3VydmVDYXRtdWxsUm9tPWt0LHQuY3VydmVMaW5lYXJDbG9zZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBFdCh0KX0sdC5jdXJ2ZUxpbmVhcj13LHQuY3VydmVNb25vdG9uZVg9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBJdCh0KX0sdC5jdXJ2ZU1vbm90b25lWT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IER0KHQpfSx0LmN1cnZlTmF0dXJhbD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFJ0KHQpfSx0LmN1cnZlU3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEJ0KHQsLjUpfSx0LmN1cnZlU3RlcEFmdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQnQodCwxKX0sdC5jdXJ2ZVN0ZXBCZWZvcmU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBCdCh0LDApfSx0LnN0YWNrPWZ1bmN0aW9uKCl7dmFyIHQ9cihbXSksZT1qdCxuPU50LGk9VnQ7ZnVuY3Rpb24gYShyKXt2YXIgYSxvLHM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbD1yLmxlbmd0aCxjPXMubGVuZ3RoLHU9bmV3IEFycmF5KGMpO2ZvcihhPTA7YTxjOysrYSl7Zm9yKHZhciBoLGY9c1thXSxwPXVbYV09bmV3IEFycmF5KGwpLGQ9MDtkPGw7KytkKXBbZF09aD1bMCwraShyW2RdLGYsZCxyKV0saC5kYXRhPXJbZF07cC5rZXk9Zn1mb3IoYT0wLG89ZSh1KTthPGM7KythKXVbb1thXV0uaW5kZXg9YTtyZXR1cm4gbih1LG8pLHV9cmV0dXJuIGEua2V5cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6cihSLmNhbGwoZSkpLGEpOnR9LGEudmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoK3QpLGEpOml9LGEub3JkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9qdDpcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cihSLmNhbGwodCkpLGEpOmV9LGEub2Zmc2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/TnQ6dCxhKTpufSxhfSx0LnN0YWNrT2Zmc2V0RXhwYW5kPWZ1bmN0aW9uKHQsZSl7aWYoKG49dC5sZW5ndGgpPjApe2Zvcih2YXIgcixuLGksYT0wLG89dFswXS5sZW5ndGg7YTxvOysrYSl7Zm9yKGk9cj0wO3I8bjsrK3IpaSs9dFtyXVthXVsxXXx8MDtpZihpKWZvcihyPTA7cjxuOysrcil0W3JdW2FdWzFdLz1pfU50KHQsZSl9fSx0LnN0YWNrT2Zmc2V0RGl2ZXJnaW5nPWZ1bmN0aW9uKHQsZSl7aWYoKHM9dC5sZW5ndGgpPjEpZm9yKHZhciByLG4saSxhLG8scyxsPTAsYz10W2VbMF1dLmxlbmd0aDtsPGM7KytsKWZvcihhPW89MCxyPTA7cjxzOysrcikoaT0obj10W2Vbcl1dW2xdKVsxXS1uWzBdKT49MD8oblswXT1hLG5bMV09YSs9aSk6aTwwPyhuWzFdPW8sblswXT1vKz1pKTpuWzBdPWF9LHQuc3RhY2tPZmZzZXROb25lPU50LHQuc3RhY2tPZmZzZXRTaWxob3VldHRlPWZ1bmN0aW9uKHQsZSl7aWYoKHI9dC5sZW5ndGgpPjApe2Zvcih2YXIgcixuPTAsaT10W2VbMF1dLGE9aS5sZW5ndGg7bjxhOysrbil7Zm9yKHZhciBvPTAscz0wO288cjsrK28pcys9dFtvXVtuXVsxXXx8MDtpW25dWzFdKz1pW25dWzBdPS1zLzJ9TnQodCxlKX19LHQuc3RhY2tPZmZzZXRXaWdnbGU9ZnVuY3Rpb24odCxlKXtpZigoaT10Lmxlbmd0aCk+MCYmKG49KHI9dFtlWzBdXSkubGVuZ3RoKT4wKXtmb3IodmFyIHIsbixpLGE9MCxvPTE7bzxuOysrbyl7Zm9yKHZhciBzPTAsbD0wLGM9MDtzPGk7KytzKXtmb3IodmFyIHU9dFtlW3NdXSxoPXVbb11bMV18fDAsZj0oaC0odVtvLTFdWzFdfHwwKSkvMixwPTA7cDxzOysrcCl7dmFyIGQ9dFtlW3BdXTtmKz0oZFtvXVsxXXx8MCktKGRbby0xXVsxXXx8MCl9bCs9aCxjKz1mKmh9cltvLTFdWzFdKz1yW28tMV1bMF09YSxsJiYoYS09Yy9sKX1yW28tMV1bMV0rPXJbby0xXVswXT1hLE50KHQsZSl9fSx0LnN0YWNrT3JkZXJBcHBlYXJhbmNlPVV0LHQuc3RhY2tPcmRlckFzY2VuZGluZz1IdCx0LnN0YWNrT3JkZXJEZXNjZW5kaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBIdCh0KS5yZXZlcnNlKCl9LHQuc3RhY2tPcmRlckluc2lkZU91dD1mdW5jdGlvbih0KXt2YXIgZSxyLG49dC5sZW5ndGgsaT10Lm1hcChHdCksYT1VdCh0KSxvPTAscz0wLGw9W10sYz1bXTtmb3IoZT0wO2U8bjsrK2Upcj1hW2VdLG88cz8obys9aVtyXSxsLnB1c2gocikpOihzKz1pW3JdLGMucHVzaChyKSk7cmV0dXJuIGMucmV2ZXJzZSgpLmNvbmNhdChsKX0sdC5zdGFja09yZGVyTm9uZT1qdCx0LnN0YWNrT3JkZXJSZXZlcnNlPWZ1bmN0aW9uKHQpe3JldHVybiBqdCh0KS5yZXZlcnNlKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSxcIm9iamVjdFwiPT10eXBlb2YgciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGU/aShyLHQoXCJkMy1wYXRoXCIpKTppKG4uZDM9bi5kM3x8e30sbi5kMyl9LHtcImQzLXBhdGhcIjoxNTB9XSwxNTQ6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbjtuPXRoaXMsZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGUscixuPTAsaT0wLGE9MCxvPTFlMyxzPTAsbD0wLGM9MCx1PVwib2JqZWN0XCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsaD1cIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O2Z1bmN0aW9uIGYoKXtyZXR1cm4gbHx8KGgocCksbD11Lm5vdygpK2MpfWZ1bmN0aW9uIHAoKXtsPTB9ZnVuY3Rpb24gZCgpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gZyh0LGUscil7dmFyIG49bmV3IGQ7cmV0dXJuIG4ucmVzdGFydCh0LGUsciksbn1mdW5jdGlvbiB2KCl7ZigpLCsrbjtmb3IodmFyIHQscj1lO3I7KSh0PWwtci5fdGltZSk+PTAmJnIuX2NhbGwuY2FsbChudWxsLHQpLHI9ci5fbmV4dDstLW59ZnVuY3Rpb24gbSgpe2w9KHM9dS5ub3coKSkrYyxuPWk9MDt0cnl7digpfWZpbmFsbHl7bj0wLGZ1bmN0aW9uKCl7dmFyIHQsbixpPWUsYT0xLzA7Zm9yKDtpOylpLl9jYWxsPyhhPmkuX3RpbWUmJihhPWkuX3RpbWUpLHQ9aSxpPWkuX25leHQpOihuPWkuX25leHQsaS5fbmV4dD1udWxsLGk9dD90Ll9uZXh0PW46ZT1uKTtyPXQseChhKX0oKSxsPTB9fWZ1bmN0aW9uIHkoKXt2YXIgdD11Lm5vdygpLGU9dC1zO2U+byYmKGMtPWUscz10KX1mdW5jdGlvbiB4KHQpe258fChpJiYoaT1jbGVhclRpbWVvdXQoaSkpLHQtbD4yND8odDwxLzAmJihpPXNldFRpbWVvdXQobSx0LXUubm93KCktYykpLGEmJihhPWNsZWFySW50ZXJ2YWwoYSkpKTooYXx8KHM9dS5ub3coKSxhPXNldEludGVydmFsKHksbykpLG49MSxoKG0pKSl9ZC5wcm90b3R5cGU9Zy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmQscmVzdGFydDpmdW5jdGlvbih0LG4saSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb25cIik7aT0obnVsbD09aT9mKCk6K2kpKyhudWxsPT1uPzA6K24pLHRoaXMuX25leHR8fHI9PT10aGlzfHwocj9yLl9uZXh0PXRoaXM6ZT10aGlzLHI9dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9aSx4KCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLHgoKSl9fTt0Lm5vdz1mLHQudGltZXI9Zyx0LnRpbWVyRmx1c2g9dix0LnRpbWVvdXQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW5ldyBkO3JldHVybiBlPW51bGw9PWU/MDorZSxuLnJlc3RhcnQoZnVuY3Rpb24ocil7bi5zdG9wKCksdChyK2UpfSxlLHIpLG59LHQuaW50ZXJ2YWw9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW5ldyBkLGk9ZTtyZXR1cm4gbnVsbD09ZT8obi5yZXN0YXJ0KHQsZSxyKSxuKTooZT0rZSxyPW51bGw9PXI/ZigpOityLG4ucmVzdGFydChmdW5jdGlvbiBhKG8pe28rPWksbi5yZXN0YXJ0KGEsaSs9ZSxyKSx0KG8pfSxlLHIpLG4pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0oXCJvYmplY3RcIj09dHlwZW9mIHImJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBlP3I6bi5kMz1uLmQzfHx7fSl9LHt9XSwxNTU6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24oKXt2YXIgdD17dmVyc2lvbjpcIjMuNS4xN1wifSxyPVtdLnNsaWNlLG49ZnVuY3Rpb24odCl7cmV0dXJuIHIuY2FsbCh0KX0saT10aGlzLmRvY3VtZW50O2Z1bmN0aW9uIGEodCl7cmV0dXJuIHQmJih0Lm93bmVyRG9jdW1lbnR8fHQuZG9jdW1lbnR8fHQpLmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiBvKHQpe3JldHVybiB0JiYodC5vd25lckRvY3VtZW50JiZ0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHQuZG9jdW1lbnQmJnR8fHQuZGVmYXVsdFZpZXcpfWlmKGkpdHJ5e24oaS5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2RlcylbMF0ubm9kZVR5cGV9Y2F0Y2godCl7bj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSk7ZS0tOylyW2VdPXRbZV07cmV0dXJuIHJ9fWlmKERhdGUubm93fHwoRGF0ZS5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9KSxpKXRyeXtpLmNyZWF0ZUVsZW1lbnQoXCJESVZcIikuc3R5bGUuc2V0UHJvcGVydHkoXCJvcGFjaXR5XCIsMCxcIlwiKX1jYXRjaCh0KXt2YXIgcz10aGlzLkVsZW1lbnQucHJvdG90eXBlLGw9cy5zZXRBdHRyaWJ1dGUsYz1zLnNldEF0dHJpYnV0ZU5TLHU9dGhpcy5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZSxoPXUuc2V0UHJvcGVydHk7cy5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlKXtsLmNhbGwodGhpcyx0LGUrXCJcIil9LHMuc2V0QXR0cmlidXRlTlM9ZnVuY3Rpb24odCxlLHIpe2MuY2FsbCh0aGlzLHQsZSxyK1wiXCIpfSx1LnNldFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxyKXtoLmNhbGwodGhpcyx0LGUrXCJcIixyKX19ZnVuY3Rpb24gZih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiBwKHQpe3JldHVybiBudWxsPT09dD9OYU46K3R9ZnVuY3Rpb24gZCh0KXtyZXR1cm4haXNOYU4odCl9ZnVuY3Rpb24gZyh0KXtyZXR1cm57bGVmdDpmdW5jdGlvbihlLHIsbixpKXtmb3IoYXJndW1lbnRzLmxlbmd0aDwzJiYobj0wKSxhcmd1bWVudHMubGVuZ3RoPDQmJihpPWUubGVuZ3RoKTtuPGk7KXt2YXIgYT1uK2k+Pj4xO3QoZVthXSxyKTwwP249YSsxOmk9YX1yZXR1cm4gbn0scmlnaHQ6ZnVuY3Rpb24oZSxyLG4saSl7Zm9yKGFyZ3VtZW50cy5sZW5ndGg8MyYmKG49MCksYXJndW1lbnRzLmxlbmd0aDw0JiYoaT1lLmxlbmd0aCk7bjxpOyl7dmFyIGE9bitpPj4+MTt0KGVbYV0scik+MD9pPWE6bj1hKzF9cmV0dXJuIG59fX10LmFzY2VuZGluZz1mLHQuZGVzY2VuZGluZz1mdW5jdGlvbih0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn0sdC5taW49ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9LTEsYT10Lmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK2k8YTspaWYobnVsbCE9KG49dFtpXSkmJm4+PW4pe3I9bjticmVha31mb3IoOysraTxhOyludWxsIT0obj10W2ldKSYmcj5uJiYocj1uKX1lbHNle2Zvcig7KytpPGE7KWlmKG51bGwhPShuPWUuY2FsbCh0LHRbaV0saSkpJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2k8YTspbnVsbCE9KG49ZS5jYWxsKHQsdFtpXSxpKSkmJnI+biYmKHI9bil9cmV0dXJuIHJ9LHQubWF4PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPS0xLGE9dC5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KytpPGE7KWlmKG51bGwhPShuPXRbaV0pJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2k8YTspbnVsbCE9KG49dFtpXSkmJm4+ciYmKHI9bil9ZWxzZXtmb3IoOysraTxhOylpZihudWxsIT0obj1lLmNhbGwodCx0W2ldLGkpKSYmbj49bil7cj1uO2JyZWFrfWZvcig7KytpPGE7KW51bGwhPShuPWUuY2FsbCh0LHRbaV0saSkpJiZuPnImJihyPW4pfXJldHVybiByfSx0LmV4dGVudD1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPS0xLG89dC5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KythPG87KWlmKG51bGwhPShuPXRbYV0pJiZuPj1uKXtyPWk9bjticmVha31mb3IoOysrYTxvOyludWxsIT0obj10W2FdKSYmKHI+biYmKHI9biksaTxuJiYoaT1uKSl9ZWxzZXtmb3IoOysrYTxvOylpZihudWxsIT0obj1lLmNhbGwodCx0W2FdLGEpKSYmbj49bil7cj1pPW47YnJlYWt9Zm9yKDsrK2E8bzspbnVsbCE9KG49ZS5jYWxsKHQsdFthXSxhKSkmJihyPm4mJihyPW4pLGk8biYmKGk9bikpfXJldHVybltyLGldfSx0LnN1bT1mdW5jdGlvbih0LGUpe3ZhciByLG49MCxpPXQubGVuZ3RoLGE9LTE7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2E8aTspZChyPSt0W2FdKSYmKG4rPXIpO2Vsc2UgZm9yKDsrK2E8aTspZChyPStlLmNhbGwodCx0W2FdLGEpKSYmKG4rPXIpO3JldHVybiBufSx0Lm1lYW49ZnVuY3Rpb24odCxlKXt2YXIgcixuPTAsaT10Lmxlbmd0aCxhPS0xLG89aTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrYTxpOylkKHI9cCh0W2FdKSk/bis9cjotLW87ZWxzZSBmb3IoOysrYTxpOylkKHI9cChlLmNhbGwodCx0W2FdLGEpKSk/bis9cjotLW87aWYobylyZXR1cm4gbi9vfSx0LnF1YW50aWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHQubGVuZ3RoLTEpKmUrMSxuPU1hdGguZmxvb3IociksaT0rdFtuLTFdLGE9ci1uO3JldHVybiBhP2krYSoodFtuXS1pKTppfSx0Lm1lZGlhbj1mdW5jdGlvbihlLHIpe3ZhciBuLGk9W10sYT1lLmxlbmd0aCxvPS0xO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KytvPGE7KWQobj1wKGVbb10pKSYmaS5wdXNoKG4pO2Vsc2UgZm9yKDsrK288YTspZChuPXAoci5jYWxsKGUsZVtvXSxvKSkpJiZpLnB1c2gobik7aWYoaS5sZW5ndGgpcmV0dXJuIHQucXVhbnRpbGUoaS5zb3J0KGYpLC41KX0sdC52YXJpYW5jZT1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10Lmxlbmd0aCxhPTAsbz0wLHM9LTEsbD0wO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KytzPGk7KWQocj1wKHRbc10pKSYmKG8rPShuPXItYSkqKHItKGErPW4vKytsKSkpO2Vsc2UgZm9yKDsrK3M8aTspZChyPXAoZS5jYWxsKHQsdFtzXSxzKSkpJiYobys9KG49ci1hKSooci0oYSs9bi8rK2wpKSk7aWYobD4xKXJldHVybiBvLyhsLTEpfSx0LmRldmlhdGlvbj1mdW5jdGlvbigpe3ZhciBlPXQudmFyaWFuY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBlP01hdGguc3FydChlKTplfTt2YXIgdj1nKGYpO2Z1bmN0aW9uIG0odCl7cmV0dXJuIHQubGVuZ3RofXQuYmlzZWN0TGVmdD12LmxlZnQsdC5iaXNlY3Q9dC5iaXNlY3RSaWdodD12LnJpZ2h0LHQuYmlzZWN0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIGcoMT09PXQubGVuZ3RoP2Z1bmN0aW9uKGUscil7cmV0dXJuIGYodChlKSxyKX06dCl9LHQuc2h1ZmZsZT1mdW5jdGlvbih0LGUscil7KGE9YXJndW1lbnRzLmxlbmd0aCk8MyYmKHI9dC5sZW5ndGgsYTwyJiYoZT0wKSk7Zm9yKHZhciBuLGksYT1yLWU7YTspaT1NYXRoLnJhbmRvbSgpKmEtLXwwLG49dFthK2VdLHRbYStlXT10W2krZV0sdFtpK2VdPW47cmV0dXJuIHR9LHQucGVybXV0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09dFtlW3JdXTtyZXR1cm4gbn0sdC5wYWlycz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLTEsbj10WzBdLGk9bmV3IEFycmF5KHI8MD8wOnIpO2U8cjspaVtlXT1bbixuPXRbKytlXV07cmV0dXJuIGl9LHQudHJhbnNwb3NlPWZ1bmN0aW9uKGUpe2lmKCEoYT1lLmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciByPS0xLG49dC5taW4oZSxtKSxpPW5ldyBBcnJheShuKTsrK3I8bjspZm9yKHZhciBhLG89LTEscz1pW3JdPW5ldyBBcnJheShhKTsrK288YTspc1tvXT1lW29dW3JdO3JldHVybiBpfSx0LnppcD1mdW5jdGlvbigpe3JldHVybiB0LnRyYW5zcG9zZShhcmd1bWVudHMpfSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHIpO3JldHVybiBlfSx0LnZhbHVlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2godFtyXSk7cmV0dXJuIGV9LHQuZW50cmllcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2goe2tleTpyLHZhbHVlOnRbcl19KTtyZXR1cm4gZX0sdC5tZXJnZT1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGk9dC5sZW5ndGgsYT0tMSxvPTA7KythPGk7KW8rPXRbYV0ubGVuZ3RoO2ZvcihyPW5ldyBBcnJheShvKTstLWk+PTA7KWZvcihlPShuPXRbaV0pLmxlbmd0aDstLWU+PTA7KXJbLS1vXT1uW2VdO3JldHVybiByfTt2YXIgeT1NYXRoLmFicztmdW5jdGlvbiB4KHQsZSl7Zm9yKHZhciByIGluIGUpT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLHIse3ZhbHVlOmVbcl0sZW51bWVyYWJsZTohMX0pfWZ1bmN0aW9uIGIoKXt0aGlzLl89T2JqZWN0LmNyZWF0ZShudWxsKX10LnJhbmdlPWZ1bmN0aW9uKHQsZSxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDMmJihyPTEsYXJndW1lbnRzLmxlbmd0aDwyJiYoZT10LHQ9MCkpLChlLXQpL3I9PTEvMCl0aHJvdyBuZXcgRXJyb3IoXCJpbmZpbml0ZSByYW5nZVwiKTt2YXIgbixpPVtdLGE9ZnVuY3Rpb24odCl7dmFyIGU9MTtmb3IoO3QqZSUxOyllKj0xMDtyZXR1cm4gZX0oeShyKSksbz0tMTtpZih0Kj1hLGUqPWEsKHIqPWEpPDApZm9yKDsobj10K3IqKytvKT5lOylpLnB1c2gobi9hKTtlbHNlIGZvcig7KG49dCtyKisrbyk8ZTspaS5wdXNoKG4vYSk7cmV0dXJuIGl9LHQubWFwPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IGI7aWYodCBpbnN0YW5jZW9mIGIpdC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7ci5zZXQodCxlKX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIG4saT0tMSxhPXQubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KytpPGE7KXIuc2V0KGksdFtpXSk7ZWxzZSBmb3IoOysraTxhOylyLnNldChlLmNhbGwodCxuPXRbaV0saSksbil9ZWxzZSBmb3IodmFyIG8gaW4gdClyLnNldChvLHRbb10pO3JldHVybiByfTt2YXIgXz1cIl9fcHJvdG9fX1wiLHc9XCJcXDBcIjtmdW5jdGlvbiBrKHQpe3JldHVybih0Kz1cIlwiKT09PV98fHRbMF09PT13P3crdDp0fWZ1bmN0aW9uIEEodCl7cmV0dXJuKHQrPVwiXCIpWzBdPT09dz90LnNsaWNlKDEpOnR9ZnVuY3Rpb24gVCh0KXtyZXR1cm4gayh0KWluIHRoaXMuX31mdW5jdGlvbiBNKHQpe3JldHVybih0PWsodCkpaW4gdGhpcy5fJiZkZWxldGUgdGhpcy5fW3RdfWZ1bmN0aW9uIFMoKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcy5fKXQucHVzaChBKGUpKTtyZXR1cm4gdH1mdW5jdGlvbiBFKCl7dmFyIHQ9MDtmb3IodmFyIGUgaW4gdGhpcy5fKSsrdDtyZXR1cm4gdH1mdW5jdGlvbiBDKCl7Zm9yKHZhciB0IGluIHRoaXMuXylyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBMKCl7dGhpcy5fPU9iamVjdC5jcmVhdGUobnVsbCl9ZnVuY3Rpb24geih0KXtyZXR1cm4gdH1mdW5jdGlvbiBPKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1yLmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm4gbj09PWU/dDpufX1mdW5jdGlvbiBJKHQsZSl7aWYoZSBpbiB0KXJldHVybiBlO2U9ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnNsaWNlKDEpO2Zvcih2YXIgcj0wLG49RC5sZW5ndGg7cjxuOysrcil7dmFyIGk9RFtyXStlO2lmKGkgaW4gdClyZXR1cm4gaX19eChiLHtoYXM6VCxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX1trKHQpXX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX1trKHQpXT1lfSxyZW1vdmU6TSxrZXlzOlMsdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuXyl0LnB1c2godGhpcy5fW2VdKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl8pdC5wdXNoKHtrZXk6QShlKSx2YWx1ZTp0aGlzLl9bZV19KTtyZXR1cm4gdH0sc2l6ZTpFLGVtcHR5OkMsZm9yRWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fKXQuY2FsbCh0aGlzLEEoZSksdGhpcy5fW2VdKX19KSx0Lm5lc3Q9ZnVuY3Rpb24oKXt2YXIgZSxyLG49e30saT1bXSxhPVtdO2Z1bmN0aW9uIG8odCxhLHMpe2lmKHM+PWkubGVuZ3RoKXJldHVybiByP3IuY2FsbChuLGEpOmU/YS5zb3J0KGUpOmE7Zm9yKHZhciBsLGMsdSxoLGY9LTEscD1hLmxlbmd0aCxkPWlbcysrXSxnPW5ldyBiOysrZjxwOykoaD1nLmdldChsPWQoYz1hW2ZdKSkpP2gucHVzaChjKTpnLnNldChsLFtjXSk7cmV0dXJuIHQ/KGM9dCgpLHU9ZnVuY3Rpb24oZSxyKXtjLnNldChlLG8odCxyLHMpKX0pOihjPXt9LHU9ZnVuY3Rpb24oZSxyKXtjW2VdPW8odCxyLHMpfSksZy5mb3JFYWNoKHUpLGN9cmV0dXJuIG4ubWFwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8oZSx0LDApfSxuLmVudHJpZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyKXtpZihyPj1pLmxlbmd0aClyZXR1cm4gZTt2YXIgbj1bXSxvPWFbcisrXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUsaSl7bi5wdXNoKHtrZXk6ZSx2YWx1ZXM6dChpLHIpfSl9KSxvP24uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBvKHQua2V5LGUua2V5KX0pOm59KG8odC5tYXAsZSwwKSwwKX0sbi5rZXk9ZnVuY3Rpb24odCl7cmV0dXJuIGkucHVzaCh0KSxufSxuLnNvcnRLZXlzPWZ1bmN0aW9uKHQpe3JldHVybiBhW2kubGVuZ3RoLTFdPXQsbn0sbi5zb3J0VmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBlPXQsbn0sbi5yb2xsdXA9ZnVuY3Rpb24odCl7cmV0dXJuIHI9dCxufSxufSx0LnNldD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgTDtpZih0KWZvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuOysrcillLmFkZCh0W3JdKTtyZXR1cm4gZX0seChMLHtoYXM6VCxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX1trKHQrPVwiXCIpXT0hMCx0fSxyZW1vdmU6TSx2YWx1ZXM6UyxzaXplOkUsZW1wdHk6Qyxmb3JFYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLl8pdC5jYWxsKHRoaXMsQShlKSl9fSksdC5iZWhhdmlvcj17fSx0LnJlYmluZD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuPTEsaT1hcmd1bWVudHMubGVuZ3RoOysrbjxpOyl0W3I9YXJndW1lbnRzW25dXT1PKHQsZSxlW3JdKTtyZXR1cm4gdH07dmFyIEQ9W1wid2Via2l0XCIsXCJtc1wiLFwibW96XCIsXCJNb3pcIixcIm9cIixcIk9cIl07ZnVuY3Rpb24gUCgpe31mdW5jdGlvbiBSKCl7fWZ1bmN0aW9uIEYodCl7dmFyIGU9W10scj1uZXcgYjtmdW5jdGlvbiBuKCl7Zm9yKHZhciByLG49ZSxpPS0xLGE9bi5sZW5ndGg7KytpPGE7KShyPW5baV0ub24pJiZyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdH1yZXR1cm4gbi5vbj1mdW5jdGlvbihuLGkpe3ZhciBhLG89ci5nZXQobik7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9vJiZvLm9uOihvJiYoby5vbj1udWxsLGU9ZS5zbGljZSgwLGE9ZS5pbmRleE9mKG8pKS5jb25jYXQoZS5zbGljZShhKzEpKSxyLnJlbW92ZShuKSksaSYmZS5wdXNoKHIuc2V0KG4se29uOml9KSksdCl9LG59ZnVuY3Rpb24gQigpe3QuZXZlbnQucHJldmVudERlZmF1bHQoKX1mdW5jdGlvbiBOKCl7Zm9yKHZhciBlLHI9dC5ldmVudDtlPXIuc291cmNlRXZlbnQ7KXI9ZTtyZXR1cm4gcn1mdW5jdGlvbiBqKGUpe2Zvcih2YXIgcj1uZXcgUixuPTAsaT1hcmd1bWVudHMubGVuZ3RoOysrbjxpOylyW2FyZ3VtZW50c1tuXV09RihyKTtyZXR1cm4gci5vZj1mdW5jdGlvbihuLGkpe3JldHVybiBmdW5jdGlvbihhKXt0cnl7dmFyIG89YS5zb3VyY2VFdmVudD10LmV2ZW50O2EudGFyZ2V0PWUsdC5ldmVudD1hLHJbYS50eXBlXS5hcHBseShuLGkpfWZpbmFsbHl7dC5ldmVudD1vfX19LHJ9dC5kaXNwYXRjaD1mdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgUixlPS0xLHI9YXJndW1lbnRzLmxlbmd0aDsrK2U8cjspdFthcmd1bWVudHNbZV1dPUYodCk7cmV0dXJuIHR9LFIucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pbmRleE9mKFwiLlwiKSxuPVwiXCI7aWYocj49MCYmKG49dC5zbGljZShyKzEpLHQ9dC5zbGljZSgwLHIpKSx0KXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/dGhpc1t0XS5vbihuKTp0aGlzW3RdLm9uKG4sZSk7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgpe2lmKG51bGw9PWUpZm9yKHQgaW4gdGhpcyl0aGlzLmhhc093blByb3BlcnR5KHQpJiZ0aGlzW3RdLm9uKG4sbnVsbCk7cmV0dXJuIHRoaXN9fSx0LmV2ZW50PW51bGwsdC5yZXF1b3RlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoVixcIlxcXFwkJlwiKX07dmFyIFY9L1tcXFxcXFxeXFwkXFwqXFwrXFw/XFx8XFxbXFxdXFwoXFwpXFwuXFx7XFx9XS9nLFU9e30uX19wcm90b19fP2Z1bmN0aW9uKHQsZSl7dC5fX3Byb3RvX189ZX06ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl19O2Z1bmN0aW9uIHEodCl7cmV0dXJuIFUodCxXKSx0fXZhciBIPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUucXVlcnlTZWxlY3Rvcih0KX0sRz1mdW5jdGlvbih0LGUpe3JldHVybiBlLnF1ZXJ5U2VsZWN0b3JBbGwodCl9LFk9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lm1hdGNoZXN8fHRbSSh0LFwibWF0Y2hlc1NlbGVjdG9yXCIpXTtyZXR1cm4oWT1mdW5jdGlvbih0LGUpe3JldHVybiByLmNhbGwodCxlKX0pKHQsZSl9O1wiZnVuY3Rpb25cIj09dHlwZW9mIFNpenpsZSYmKEg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gU2l6emxlKHQsZSlbMF18fG51bGx9LEc9U2l6emxlLFk9U2l6emxlLm1hdGNoZXNTZWxlY3RvciksdC5zZWxlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdC5zZWxlY3QoaS5kb2N1bWVudEVsZW1lbnQpfTt2YXIgVz10LnNlbGVjdGlvbi5wcm90b3R5cGU9W107ZnVuY3Rpb24gWCh0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oKXtyZXR1cm4gSCh0LHRoaXMpfX1mdW5jdGlvbiBaKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpmdW5jdGlvbigpe3JldHVybiBHKHQsdGhpcyl9fVcuc2VsZWN0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9W107dD1YKHQpO2Zvcih2YXIgbz0tMSxzPXRoaXMubGVuZ3RoOysrbzxzOyl7YS5wdXNoKGU9W10pLGUucGFyZW50Tm9kZT0obj10aGlzW29dKS5wYXJlbnROb2RlO2Zvcih2YXIgbD0tMSxjPW4ubGVuZ3RoOysrbDxjOykoaT1uW2xdKT8oZS5wdXNoKHI9dC5jYWxsKGksaS5fX2RhdGFfXyxsLG8pKSxyJiZcIl9fZGF0YV9fXCJpbiBpJiYoci5fX2RhdGFfXz1pLl9fZGF0YV9fKSk6ZS5wdXNoKG51bGwpfXJldHVybiBxKGEpfSxXLnNlbGVjdEFsbD1mdW5jdGlvbih0KXt2YXIgZSxyLGk9W107dD1aKHQpO2Zvcih2YXIgYT0tMSxvPXRoaXMubGVuZ3RoOysrYTxvOylmb3IodmFyIHM9dGhpc1thXSxsPS0xLGM9cy5sZW5ndGg7KytsPGM7KShyPXNbbF0pJiYoaS5wdXNoKGU9bih0LmNhbGwocixyLl9fZGF0YV9fLGwsYSkpKSxlLnBhcmVudE5vZGU9cik7cmV0dXJuIHEoaSl9O3ZhciAkPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLEo9e3N2ZzpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIseGh0bWw6JCx4bGluazpcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIix4bWw6XCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvXCJ9O2Z1bmN0aW9uIEsoZSxyKXtyZXR1cm4gZT10Lm5zLnF1YWxpZnkoZSksbnVsbD09cj9lLmxvY2FsP2Z1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfTpmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfTpcImZ1bmN0aW9uXCI9PXR5cGVvZiByP2UubG9jYWw/ZnVuY3Rpb24oKXt2YXIgdD1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT10P3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0KX06ZnVuY3Rpb24oKXt2YXIgdD1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT10P3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUsdCl9OmUubG9jYWw/ZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxyKX06ZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHIpfX1mdW5jdGlvbiBRKHQpe3JldHVybiB0LnRyaW0oKS5yZXBsYWNlKC9cXHMrL2csXCIgXCIpfWZ1bmN0aW9uIHR0KGUpe3JldHVybiBuZXcgUmVnRXhwKFwiKD86XnxcXFxccyspXCIrdC5yZXF1b3RlKGUpK1wiKD86XFxcXHMrfCQpXCIsXCJnXCIpfWZ1bmN0aW9uIGV0KHQpe3JldHVybih0K1wiXCIpLnRyaW0oKS5zcGxpdCgvXnxcXHMrLyl9ZnVuY3Rpb24gcnQodCxlKXt2YXIgcj0odD1ldCh0KS5tYXAobnQpKS5sZW5ndGg7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9mdW5jdGlvbigpe2Zvcih2YXIgbj0tMSxpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOysrbjxyOyl0W25dKHRoaXMsaSl9OmZ1bmN0aW9uKCl7Zm9yKHZhciBuPS0xOysrbjxyOyl0W25dKHRoaXMsZSl9fWZ1bmN0aW9uIG50KHQpe3ZhciBlPXR0KHQpO3JldHVybiBmdW5jdGlvbihyLG4pe2lmKGk9ci5jbGFzc0xpc3QpcmV0dXJuIG4/aS5hZGQodCk6aS5yZW1vdmUodCk7dmFyIGk9ci5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIjtuPyhlLmxhc3RJbmRleD0wLGUudGVzdChpKXx8ci5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLFEoaStcIiBcIit0KSkpOnIuc2V0QXR0cmlidXRlKFwiY2xhc3NcIixRKGkucmVwbGFjZShlLFwiIFwiKSkpfX1mdW5jdGlvbiBpdCh0LGUscil7cmV0dXJuIG51bGw9PWU/ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2Z1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxuLHIpfTpmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLHIpfX1mdW5jdGlvbiBhdCh0LGUpe3JldHVybiBudWxsPT1lP2Z1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19OlwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZnVuY3Rpb24oKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP2RlbGV0ZSB0aGlzW3RdOnRoaXNbdF09cn06ZnVuY3Rpb24oKXt0aGlzW3RdPWV9fWZ1bmN0aW9uIG90KGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTooZT10Lm5zLnF1YWxpZnkoZSkpLmxvY2FsP2Z1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZS5zcGFjZSxlLmxvY2FsKX06ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQscj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gcj09PSQmJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PSQ/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIHN0KCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gbHQodCl7cmV0dXJue19fZGF0YV9fOnR9fWZ1bmN0aW9uIGN0KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBZKHRoaXMsdCl9fWZ1bmN0aW9uIHV0KHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aDtyPG47cisrKWZvcih2YXIgaSxhPXRbcl0sbz0wLHM9YS5sZW5ndGg7bzxzO28rKykoaT1hW29dKSYmZShpLG8scik7cmV0dXJuIHR9ZnVuY3Rpb24gaHQodCl7cmV0dXJuIFUodCxmdCksdH10Lm5zPXtwcmVmaXg6SixxdWFsaWZ5OmZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZihcIjpcIikscj10O3JldHVybiBlPj0wJiZcInhtbG5zXCIhPT0ocj10LnNsaWNlKDAsZSkpJiYodD10LnNsaWNlKGUrMSkpLEouaGFzT3duUHJvcGVydHkocik/e3NwYWNlOkpbcl0sbG9jYWw6dH06dH19LFcuYXR0cj1mdW5jdGlvbihlLHIpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybihlPXQubnMucXVhbGlmeShlKSkubG9jYWw/bi5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOm4uZ2V0QXR0cmlidXRlKGUpfWZvcihyIGluIGUpdGhpcy5lYWNoKEsocixlW3JdKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaChLKGUscikpfSxXLmNsYXNzZWQ9ZnVuY3Rpb24odCxlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXt2YXIgcj10aGlzLm5vZGUoKSxuPSh0PWV0KHQpKS5sZW5ndGgsaT0tMTtpZihlPXIuY2xhc3NMaXN0KXtmb3IoOysraTxuOylpZighZS5jb250YWlucyh0W2ldKSlyZXR1cm4hMX1lbHNlIGZvcihlPXIuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIik7KytpPG47KWlmKCF0dCh0W2ldKS50ZXN0KGUpKXJldHVybiExO3JldHVybiEwfWZvcihlIGluIHQpdGhpcy5lYWNoKHJ0KGUsdFtlXSkpO3JldHVybiB0aGlzfXJldHVybiB0aGlzLmVhY2gocnQodCxlKSl9LFcuc3R5bGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7aWYobjwzKXtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl7Zm9yKHIgaW4gbjwyJiYoZT1cIlwiKSx0KXRoaXMuZWFjaChpdChyLHRbcl0sZSkpO3JldHVybiB0aGlzfWlmKG48Mil7dmFyIGk9dGhpcy5ub2RlKCk7cmV0dXJuIG8oaSkuZ2V0Q29tcHV0ZWRTdHlsZShpLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCl9cj1cIlwifXJldHVybiB0aGlzLmVhY2goaXQodCxlLHIpKX0sVy5wcm9wZXJ0eT1mdW5jdGlvbih0LGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpcmV0dXJuIHRoaXMubm9kZSgpW3RdO2ZvcihlIGluIHQpdGhpcy5lYWNoKGF0KGUsdFtlXSkpO3JldHVybiB0aGlzfXJldHVybiB0aGlzLmVhY2goYXQodCxlKSl9LFcudGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goXCJmdW5jdGlvblwiPT10eXBlb2YgdD9mdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT9cIlwiOmV9Om51bGw9PXQ/ZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PVwiXCJ9OmZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LFcuaHRtbD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goXCJmdW5jdGlvblwiPT10eXBlb2YgdD9mdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PWU/XCJcIjplfTpudWxsPT10P2Z1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9XCJcIn06ZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxXLmFwcGVuZD1mdW5jdGlvbih0KXtyZXR1cm4gdD1vdCh0KSx0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfSxXLmluc2VydD1mdW5jdGlvbih0LGUpe3JldHVybiB0PW90KHQpLGU9WChlKSx0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZSh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX0sVy5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKHN0KX0sVy5kYXRhPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPS0xLGE9dGhpcy5sZW5ndGg7aWYoIWFyZ3VtZW50cy5sZW5ndGgpe2Zvcih0PW5ldyBBcnJheShhPShyPXRoaXNbMF0pLmxlbmd0aCk7KytpPGE7KShuPXJbaV0pJiYodFtpXT1uLl9fZGF0YV9fKTtyZXR1cm4gdH1mdW5jdGlvbiBvKHQscil7dmFyIG4saSxhLG89dC5sZW5ndGgsdT1yLmxlbmd0aCxoPU1hdGgubWluKG8sdSksZj1uZXcgQXJyYXkodSkscD1uZXcgQXJyYXkodSksZD1uZXcgQXJyYXkobyk7aWYoZSl7dmFyIGcsdj1uZXcgYixtPW5ldyBBcnJheShvKTtmb3Iobj0tMTsrK248bzspKGk9dFtuXSkmJih2LmhhcyhnPWUuY2FsbChpLGkuX19kYXRhX18sbikpP2Rbbl09aTp2LnNldChnLGkpLG1bbl09Zyk7Zm9yKG49LTE7KytuPHU7KShpPXYuZ2V0KGc9ZS5jYWxsKHIsYT1yW25dLG4pKSk/ITAhPT1pJiYoZltuXT1pLGkuX19kYXRhX189YSk6cFtuXT1sdChhKSx2LnNldChnLCEwKTtmb3Iobj0tMTsrK248bzspbiBpbiBtJiYhMCE9PXYuZ2V0KG1bbl0pJiYoZFtuXT10W25dKX1lbHNle2ZvcihuPS0xOysrbjxoOylpPXRbbl0sYT1yW25dLGk/KGkuX19kYXRhX189YSxmW25dPWkpOnBbbl09bHQoYSk7Zm9yKDtuPHU7KytuKXBbbl09bHQocltuXSk7Zm9yKDtuPG87KytuKWRbbl09dFtuXX1wLnVwZGF0ZT1mLHAucGFyZW50Tm9kZT1mLnBhcmVudE5vZGU9ZC5wYXJlbnROb2RlPXQucGFyZW50Tm9kZSxzLnB1c2gocCksbC5wdXNoKGYpLGMucHVzaChkKX12YXIgcz1odChbXSksbD1xKFtdKSxjPXEoW10pO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpZm9yKDsrK2k8YTspbyhyPXRoaXNbaV0sdC5jYWxsKHIsci5wYXJlbnROb2RlLl9fZGF0YV9fLGkpKTtlbHNlIGZvcig7KytpPGE7KW8ocj10aGlzW2ldLHQpO3JldHVybiBsLmVudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHN9LGwuZXhpdD1mdW5jdGlvbigpe3JldHVybiBjfSxsfSxXLmRhdHVtPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoXCJfX2RhdGFfX1wiLHQpOnRoaXMucHJvcGVydHkoXCJfX2RhdGFfX1wiKX0sVy5maWx0ZXI9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9W107XCJmdW5jdGlvblwiIT10eXBlb2YgdCYmKHQ9Y3QodCkpO2Zvcih2YXIgYT0wLG89dGhpcy5sZW5ndGg7YTxvO2ErKyl7aS5wdXNoKGU9W10pLGUucGFyZW50Tm9kZT0ocj10aGlzW2FdKS5wYXJlbnROb2RlO2Zvcih2YXIgcz0wLGw9ci5sZW5ndGg7czxsO3MrKykobj1yW3NdKSYmdC5jYWxsKG4sbi5fX2RhdGFfXyxzLGEpJiZlLnB1c2gobil9cmV0dXJuIHEoaSl9LFcub3JkZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTEsZT10aGlzLmxlbmd0aDsrK3Q8ZTspZm9yKHZhciByLG49dGhpc1t0XSxpPW4ubGVuZ3RoLTEsYT1uW2ldOy0taT49MDspKHI9bltpXSkmJihhJiZhIT09ci5uZXh0U2libGluZyYmYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLGEpLGE9cik7cmV0dXJuIHRoaXN9LFcuc29ydD1mdW5jdGlvbih0KXt0PWZ1bmN0aW9uKHQpe2FyZ3VtZW50cy5sZW5ndGh8fCh0PWYpO3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVybiBlJiZyP3QoZS5fX2RhdGFfXyxyLl9fZGF0YV9fKTohZS0hcn19LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtmb3IodmFyIGU9LTEscj10aGlzLmxlbmd0aDsrK2U8cjspdGhpc1tlXS5zb3J0KHQpO3JldHVybiB0aGlzLm9yZGVyKCl9LFcuZWFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdXQodGhpcyxmdW5jdGlvbihlLHIsbil7dC5jYWxsKGUsZS5fX2RhdGFfXyxyLG4pfSl9LFcuY2FsbD1mdW5jdGlvbih0KXt2YXIgZT1uKGFyZ3VtZW50cyk7cmV0dXJuIHQuYXBwbHkoZVswXT10aGlzLGUpLHRoaXN9LFcuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LFcubm9kZT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9dGhpcy5sZW5ndGg7dDxlO3QrKylmb3IodmFyIHI9dGhpc1t0XSxuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXt2YXIgYT1yW25dO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9LFcuc2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHV0KHRoaXMsZnVuY3Rpb24oKXsrK3R9KSx0fTt2YXIgZnQ9W107ZnVuY3Rpb24gcHQoZSxyLGkpe3ZhciBhPVwiX19vblwiK2Usbz1lLmluZGV4T2YoXCIuXCIpLHM9Z3Q7bz4wJiYoZT1lLnNsaWNlKDAsbykpO3ZhciBsPWR0LmdldChlKTtmdW5jdGlvbiBjKCl7dmFyIHQ9dGhpc1thXTt0JiYodGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGUsdCx0LiQpLGRlbGV0ZSB0aGlzW2FdKX1yZXR1cm4gbCYmKGU9bCxzPXZ0KSxvP3I/ZnVuY3Rpb24oKXt2YXIgdD1zKHIsbihhcmd1bWVudHMpKTtjLmNhbGwodGhpcyksdGhpcy5hZGRFdmVudExpc3RlbmVyKGUsdGhpc1thXT10LHQuJD1pKSx0Ll89cn06YzpyP1A6ZnVuY3Rpb24oKXt2YXIgcixuPW5ldyBSZWdFeHAoXCJeX19vbihbXi5dKylcIit0LnJlcXVvdGUoZSkrXCIkXCIpO2Zvcih2YXIgaSBpbiB0aGlzKWlmKHI9aS5tYXRjaChuKSl7dmFyIGE9dGhpc1tpXTt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoclsxXSxhLGEuJCksZGVsZXRlIHRoaXNbaV19fX10LnNlbGVjdGlvbi5lbnRlcj1odCx0LnNlbGVjdGlvbi5lbnRlci5wcm90b3R5cGU9ZnQsZnQuYXBwZW5kPVcuYXBwZW5kLGZ0LmVtcHR5PVcuZW1wdHksZnQubm9kZT1XLm5vZGUsZnQuY2FsbD1XLmNhbGwsZnQuc2l6ZT1XLnNpemUsZnQuc2VsZWN0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxhLG89W10scz0tMSxsPXRoaXMubGVuZ3RoOysrczxsOyl7bj0oaT10aGlzW3NdKS51cGRhdGUsby5wdXNoKGU9W10pLGUucGFyZW50Tm9kZT1pLnBhcmVudE5vZGU7Zm9yKHZhciBjPS0xLHU9aS5sZW5ndGg7KytjPHU7KShhPWlbY10pPyhlLnB1c2gobltjXT1yPXQuY2FsbChpLnBhcmVudE5vZGUsYS5fX2RhdGFfXyxjLHMpKSxyLl9fZGF0YV9fPWEuX19kYXRhX18pOmUucHVzaChudWxsKX1yZXR1cm4gcShvKX0sZnQuaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDImJihyPXRoaXMsZT1mdW5jdGlvbih0LGUsYSl7dmFyIG8scz1yW2FdLnVwZGF0ZSxsPXMubGVuZ3RoO2ZvcihhIT1pJiYoaT1hLG49MCksZT49biYmKG49ZSsxKTshKG89c1tuXSkmJisrbjxsOyk7cmV0dXJuIG99KSxXLmluc2VydC5jYWxsKHRoaXMsdCxlKX0sdC5zZWxlY3Q9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQ/KGU9W0godCxpKV0pLnBhcmVudE5vZGU9aS5kb2N1bWVudEVsZW1lbnQ6KGU9W3RdKS5wYXJlbnROb2RlPWEodCkscShbZV0pfSx0LnNlbGVjdEFsbD1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdD8oZT1uKEcodCxpKSkpLnBhcmVudE5vZGU9aS5kb2N1bWVudEVsZW1lbnQ6KGU9bih0KSkucGFyZW50Tm9kZT1udWxsLHEoW2VdKX0sVy5vbj1mdW5jdGlvbih0LGUscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtpZihuPDMpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXtmb3IociBpbiBuPDImJihlPSExKSx0KXRoaXMuZWFjaChwdChyLHRbcl0sZSkpO3JldHVybiB0aGlzfWlmKG48MilyZXR1cm4obj10aGlzLm5vZGUoKVtcIl9fb25cIit0XSkmJm4uXztyPSExfXJldHVybiB0aGlzLmVhY2gocHQodCxlLHIpKX07dmFyIGR0PXQubWFwKHttb3VzZWVudGVyOlwibW91c2VvdmVyXCIsbW91c2VsZWF2ZTpcIm1vdXNlb3V0XCJ9KTtmdW5jdGlvbiBndChlLHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT10LmV2ZW50O3QuZXZlbnQ9bixyWzBdPXRoaXMuX19kYXRhX187dHJ5e2UuYXBwbHkodGhpcyxyKX1maW5hbGx5e3QuZXZlbnQ9aX19fWZ1bmN0aW9uIHZ0KHQsZSl7dmFyIHI9Z3QodCxlKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5yZWxhdGVkVGFyZ2V0O2UmJihlPT09dGhpc3x8OCZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8ci5jYWxsKHRoaXMsdCl9fWkmJmR0LmZvckVhY2goZnVuY3Rpb24odCl7XCJvblwiK3QgaW4gaSYmZHQucmVtb3ZlKHQpfSk7dmFyIG10LHl0PTA7ZnVuY3Rpb24geHQoZSl7dmFyIHI9XCIuZHJhZ3N1cHByZXNzLVwiKyArK3l0LG49XCJjbGlja1wiK3IsaT10LnNlbGVjdChvKGUpKS5vbihcInRvdWNobW92ZVwiK3IsQikub24oXCJkcmFnc3RhcnRcIityLEIpLm9uKFwic2VsZWN0c3RhcnRcIityLEIpO2lmKG51bGw9PW10JiYobXQ9IShcIm9uc2VsZWN0c3RhcnRcImluIGUpJiZJKGUuc3R5bGUsXCJ1c2VyU2VsZWN0XCIpKSxtdCl7dmFyIHM9YShlKS5zdHlsZSxsPXNbbXRdO3NbbXRdPVwibm9uZVwifXJldHVybiBmdW5jdGlvbih0KXtpZihpLm9uKHIsbnVsbCksbXQmJihzW210XT1sKSx0KXt2YXIgZT1mdW5jdGlvbigpe2kub24obixudWxsKX07aS5vbihuLGZ1bmN0aW9uKCl7QigpLGUoKX0sITApLHNldFRpbWVvdXQoZSwwKX19fXQubW91c2U9ZnVuY3Rpb24odCl7cmV0dXJuIF90KHQsTigpKX07dmFyIGJ0PXRoaXMubmF2aWdhdG9yJiYvV2ViS2l0Ly50ZXN0KHRoaXMubmF2aWdhdG9yLnVzZXJBZ2VudCk/LTE6MDtmdW5jdGlvbiBfdChlLHIpe3IuY2hhbmdlZFRvdWNoZXMmJihyPXIuY2hhbmdlZFRvdWNoZXNbMF0pO3ZhciBuPWUub3duZXJTVkdFbGVtZW50fHxlO2lmKG4uY3JlYXRlU1ZHUG9pbnQpe3ZhciBpPW4uY3JlYXRlU1ZHUG9pbnQoKTtpZihidDwwKXt2YXIgYT1vKGUpO2lmKGEuc2Nyb2xsWHx8YS5zY3JvbGxZKXt2YXIgcz0obj10LnNlbGVjdChcImJvZHlcIikuYXBwZW5kKFwic3ZnXCIpLnN0eWxlKHtwb3NpdGlvbjpcImFic29sdXRlXCIsdG9wOjAsbGVmdDowLG1hcmdpbjowLHBhZGRpbmc6MCxib3JkZXI6XCJub25lXCJ9LFwiaW1wb3J0YW50XCIpKVswXVswXS5nZXRTY3JlZW5DVE0oKTtidD0hKHMuZnx8cy5lKSxuLnJlbW92ZSgpfX1yZXR1cm4gYnQ/KGkueD1yLnBhZ2VYLGkueT1yLnBhZ2VZKTooaS54PXIuY2xpZW50WCxpLnk9ci5jbGllbnRZKSxbKGk9aS5tYXRyaXhUcmFuc2Zvcm0oZS5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpKS54LGkueV19dmFyIGw9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bci5jbGllbnRYLWwubGVmdC1lLmNsaWVudExlZnQsci5jbGllbnRZLWwudG9wLWUuY2xpZW50VG9wXX1mdW5jdGlvbiB3dCgpe3JldHVybiB0LmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXJ9dC50b3VjaD1mdW5jdGlvbih0LGUscil7aWYoYXJndW1lbnRzLmxlbmd0aDwzJiYocj1lLGU9TigpLmNoYW5nZWRUb3VjaGVzKSxlKWZvcih2YXIgbixpPTAsYT1lLmxlbmd0aDtpPGE7KytpKWlmKChuPWVbaV0pLmlkZW50aWZpZXI9PT1yKXJldHVybiBfdCh0LG4pfSx0LmJlaGF2aW9yLmRyYWc9ZnVuY3Rpb24oKXt2YXIgZT1qKGEsXCJkcmFnXCIsXCJkcmFnc3RhcnRcIixcImRyYWdlbmRcIikscj1udWxsLG49cyhQLHQubW91c2UsbyxcIm1vdXNlbW92ZVwiLFwibW91c2V1cFwiKSxpPXMod3QsdC50b3VjaCx6LFwidG91Y2htb3ZlXCIsXCJ0b3VjaGVuZFwiKTtmdW5jdGlvbiBhKCl7dGhpcy5vbihcIm1vdXNlZG93bi5kcmFnXCIsbikub24oXCJ0b3VjaHN0YXJ0LmRyYWdcIixpKX1mdW5jdGlvbiBzKG4saSxhLG8scyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGwsYz10LmV2ZW50LnRhcmdldC5jb3JyZXNwb25kaW5nRWxlbWVudHx8dC5ldmVudC50YXJnZXQsdT10aGlzLnBhcmVudE5vZGUsaD1lLm9mKHRoaXMsYXJndW1lbnRzKSxmPTAscD1uKCksZD1cIi5kcmFnXCIrKG51bGw9PXA/XCJcIjpcIi1cIitwKSxnPXQuc2VsZWN0KGEoYykpLm9uKG8rZCxmdW5jdGlvbigpe3ZhciB0LGUscj1pKHUscCk7aWYoIXIpcmV0dXJuO3Q9clswXS1tWzBdLGU9clsxXS1tWzFdLGZ8PXR8ZSxtPXIsaCh7dHlwZTpcImRyYWdcIix4OnJbMF0rbFswXSx5OnJbMV0rbFsxXSxkeDp0LGR5OmV9KX0pLm9uKHMrZCxmdW5jdGlvbigpe2lmKCFpKHUscCkpcmV0dXJuO2cub24obytkLG51bGwpLm9uKHMrZCxudWxsKSx2KGYpLGgoe3R5cGU6XCJkcmFnZW5kXCJ9KX0pLHY9eHQoYyksbT1pKHUscCk7bD1yP1sobD1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkueC1tWzBdLGwueS1tWzFdXTpbMCwwXSxoKHt0eXBlOlwiZHJhZ3N0YXJ0XCJ9KX19cmV0dXJuIGEub3JpZ2luPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sdC5yZWJpbmQoYSxlLFwib25cIil9LHQudG91Y2hlcz1mdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDImJihlPU4oKS50b3VjaGVzKSxlP24oZSkubWFwKGZ1bmN0aW9uKGUpe3ZhciByPV90KHQsZSk7cmV0dXJuIHIuaWRlbnRpZmllcj1lLmlkZW50aWZpZXIscn0pOltdfTt2YXIga3Q9MWUtNixBdD1rdCprdCxUdD1NYXRoLlBJLE10PTIqVHQsU3Q9TXQta3QsRXQ9VHQvMixDdD1UdC8xODAsTHQ9MTgwL1R0O2Z1bmN0aW9uIHp0KHQpe3JldHVybiB0PjA/MTp0PDA/LTE6MH1mdW5jdGlvbiBPdCh0LGUscil7cmV0dXJuKGVbMF0tdFswXSkqKHJbMV0tdFsxXSktKGVbMV0tdFsxXSkqKHJbMF0tdFswXSl9ZnVuY3Rpb24gSXQodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/VHQ6TWF0aC5hY29zKHQpfWZ1bmN0aW9uIER0KHQpe3JldHVybiB0PjE/RXQ6dDwtMT8tRXQ6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIFB0KHQpe3JldHVybigodD1NYXRoLmV4cCh0KSkrMS90KS8yfWZ1bmN0aW9uIFJ0KHQpe3JldHVybih0PU1hdGguc2luKHQvMikpKnR9dmFyIEZ0PU1hdGguU1FSVDI7dC5pbnRlcnBvbGF0ZVpvb209ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dFswXSxhPXRbMV0sbz10WzJdLHM9ZVswXSxsPWVbMV0sYz1lWzJdLHU9cy1pLGg9bC1hLGY9dSp1K2gqaDtpZihmPEF0KW49TWF0aC5sb2coYy9vKS9GdCxyPWZ1bmN0aW9uKHQpe3JldHVybltpK3QqdSxhK3QqaCxvKk1hdGguZXhwKEZ0KnQqbildfTtlbHNle3ZhciBwPU1hdGguc3FydChmKSxkPShjKmMtbypvKzQqZikvKDIqbyoyKnApLGc9KGMqYy1vKm8tNCpmKS8oMipjKjIqcCksdj1NYXRoLmxvZyhNYXRoLnNxcnQoZCpkKzEpLWQpLG09TWF0aC5sb2coTWF0aC5zcXJ0KGcqZysxKS1nKTtuPShtLXYpL0Z0LHI9ZnVuY3Rpb24odCl7dmFyIGUscj10Km4scz1QdCh2KSxsPW8vKDIqcCkqKHMqKGU9RnQqcit2LCgoZT1NYXRoLmV4cCgyKmUpKS0xKS8oZSsxKSktZnVuY3Rpb24odCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKS0xL3QpLzJ9KHYpKTtyZXR1cm5baStsKnUsYStsKmgsbypzL1B0KEZ0KnIrdildfX1yZXR1cm4gci5kdXJhdGlvbj0xZTMqbixyfSx0LmJlaGF2aW9yLnpvb209ZnVuY3Rpb24oKXt2YXIgZSxyLG4sYSxzLGwsYyx1LGgsZj17eDowLHk6MCxrOjF9LHA9Wzk2MCw1MDBdLGQ9anQsZz0yNTAsdj0wLG09XCJtb3VzZWRvd24uem9vbVwiLHk9XCJtb3VzZW1vdmUuem9vbVwiLHg9XCJtb3VzZXVwLnpvb21cIixiPVwidG91Y2hzdGFydC56b29tXCIsXz1qKHcsXCJ6b29tc3RhcnRcIixcInpvb21cIixcInpvb21lbmRcIik7ZnVuY3Rpb24gdyh0KXt0Lm9uKG0seikub24oTnQrXCIuem9vbVwiLEkpLm9uKFwiZGJsY2xpY2suem9vbVwiLEQpLm9uKGIsTyl9ZnVuY3Rpb24gayh0KXtyZXR1cm5bKHRbMF0tZi54KS9mLmssKHRbMV0tZi55KS9mLmtdfWZ1bmN0aW9uIEEodCl7Zi5rPU1hdGgubWF4KGRbMF0sTWF0aC5taW4oZFsxXSx0KSl9ZnVuY3Rpb24gVCh0LGUpe2U9ZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0qZi5rK2YueCx0WzFdKmYuaytmLnldfShlKSxmLngrPXRbMF0tZVswXSxmLnkrPXRbMV0tZVsxXX1mdW5jdGlvbiBNKGUsbixpLGEpe2UuX19jaGFydF9fPXt4OmYueCx5OmYueSxrOmYua30sQShNYXRoLnBvdygyLGEpKSxUKHI9bixpKSxlPXQuc2VsZWN0KGUpLGc+MCYmKGU9ZS50cmFuc2l0aW9uKCkuZHVyYXRpb24oZykpLGUuY2FsbCh3LmV2ZW50KX1mdW5jdGlvbiBTKCl7YyYmYy5kb21haW4obC5yYW5nZSgpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4odC1mLngpL2Yua30pLm1hcChsLmludmVydCkpLGgmJmguZG9tYWluKHUucmFuZ2UoKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuKHQtZi55KS9mLmt9KS5tYXAodS5pbnZlcnQpKX1mdW5jdGlvbiBFKHQpe3YrK3x8dCh7dHlwZTpcInpvb21zdGFydFwifSl9ZnVuY3Rpb24gQyh0KXtTKCksdCh7dHlwZTpcInpvb21cIixzY2FsZTpmLmssdHJhbnNsYXRlOltmLngsZi55XX0pfWZ1bmN0aW9uIEwodCl7LS12fHwodCh7dHlwZTpcInpvb21lbmRcIn0pLHI9bnVsbCl9ZnVuY3Rpb24geigpe3ZhciBlPXRoaXMscj1fLm9mKGUsYXJndW1lbnRzKSxuPTAsaT10LnNlbGVjdChvKGUpKS5vbih5LGZ1bmN0aW9uKCl7bj0xLFQodC5tb3VzZShlKSxhKSxDKHIpfSkub24oeCxmdW5jdGlvbigpe2kub24oeSxudWxsKS5vbih4LG51bGwpLHMobiksTChyKX0pLGE9ayh0Lm1vdXNlKGUpKSxzPXh0KGUpO2hzLmNhbGwoZSksRShyKX1mdW5jdGlvbiBPKCl7dmFyIGUscj10aGlzLG49Xy5vZihyLGFyZ3VtZW50cyksaT17fSxhPTAsbz1cIi56b29tLVwiK3QuZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uaWRlbnRpZmllcixsPVwidG91Y2htb3ZlXCIrbyxjPVwidG91Y2hlbmRcIitvLHU9W10saD10LnNlbGVjdChyKSxwPXh0KHIpO2Z1bmN0aW9uIGQoKXt2YXIgbj10LnRvdWNoZXMocik7cmV0dXJuIGU9Zi5rLG4uZm9yRWFjaChmdW5jdGlvbih0KXt0LmlkZW50aWZpZXIgaW4gaSYmKGlbdC5pZGVudGlmaWVyXT1rKHQpKX0pLG59ZnVuY3Rpb24gZygpe3ZhciBlPXQuZXZlbnQudGFyZ2V0O3Quc2VsZWN0KGUpLm9uKGwsdikub24oYyx5KSx1LnB1c2goZSk7Zm9yKHZhciBuPXQuZXZlbnQuY2hhbmdlZFRvdWNoZXMsbz0wLGg9bi5sZW5ndGg7bzxoOysrbylpW25bb10uaWRlbnRpZmllcl09bnVsbDt2YXIgcD1kKCksZz1EYXRlLm5vdygpO2lmKDE9PT1wLmxlbmd0aCl7aWYoZy1zPDUwMCl7dmFyIG09cFswXTtNKHIsbSxpW20uaWRlbnRpZmllcl0sTWF0aC5mbG9vcihNYXRoLmxvZyhmLmspL01hdGguTE4yKSsxKSxCKCl9cz1nfWVsc2UgaWYocC5sZW5ndGg+MSl7bT1wWzBdO3ZhciB4PXBbMV0sYj1tWzBdLXhbMF0sXz1tWzFdLXhbMV07YT1iKmIrXypffX1mdW5jdGlvbiB2KCl7dmFyIG8sbCxjLHUsaD10LnRvdWNoZXMocik7aHMuY2FsbChyKTtmb3IodmFyIGY9MCxwPWgubGVuZ3RoO2Y8cDsrK2YsdT1udWxsKWlmKGM9aFtmXSx1PWlbYy5pZGVudGlmaWVyXSl7aWYobClicmVhaztvPWMsbD11fWlmKHUpe3ZhciBkPShkPWNbMF0tb1swXSkqZCsoZD1jWzFdLW9bMV0pKmQsZz1hJiZNYXRoLnNxcnQoZC9hKTtvPVsob1swXStjWzBdKS8yLChvWzFdK2NbMV0pLzJdLGw9WyhsWzBdK3VbMF0pLzIsKGxbMV0rdVsxXSkvMl0sQShnKmUpfXM9bnVsbCxUKG8sbCksQyhuKX1mdW5jdGlvbiB5KCl7aWYodC5ldmVudC50b3VjaGVzLmxlbmd0aCl7Zm9yKHZhciBlPXQuZXZlbnQuY2hhbmdlZFRvdWNoZXMscj0wLGE9ZS5sZW5ndGg7cjxhOysrcilkZWxldGUgaVtlW3JdLmlkZW50aWZpZXJdO2Zvcih2YXIgcyBpbiBpKXJldHVybiB2b2lkIGQoKX10LnNlbGVjdEFsbCh1KS5vbihvLG51bGwpLGgub24obSx6KS5vbihiLE8pLHAoKSxMKG4pfWcoKSxFKG4pLGgub24obSxudWxsKS5vbihiLGcpfWZ1bmN0aW9uIEkoKXt2YXIgaT1fLm9mKHRoaXMsYXJndW1lbnRzKTthP2NsZWFyVGltZW91dChhKTooaHMuY2FsbCh0aGlzKSxlPWsocj1ufHx0Lm1vdXNlKHRoaXMpKSxFKGkpKSxhPXNldFRpbWVvdXQoZnVuY3Rpb24oKXthPW51bGwsTChpKX0sNTApLEIoKSxBKE1hdGgucG93KDIsLjAwMipCdCgpKSpmLmspLFQocixlKSxDKGkpfWZ1bmN0aW9uIEQoKXt2YXIgZT10Lm1vdXNlKHRoaXMpLHI9TWF0aC5sb2coZi5rKS9NYXRoLkxOMjtNKHRoaXMsZSxrKGUpLHQuZXZlbnQuc2hpZnRLZXk/TWF0aC5jZWlsKHIpLTE6TWF0aC5mbG9vcihyKSsxKX1yZXR1cm4gTnR8fChOdD1cIm9ud2hlZWxcImluIGk/KEJ0PWZ1bmN0aW9uKCl7cmV0dXJuLXQuZXZlbnQuZGVsdGFZKih0LmV2ZW50LmRlbHRhTW9kZT8xMjA6MSl9LFwid2hlZWxcIik6XCJvbm1vdXNld2hlZWxcImluIGk/KEJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuZXZlbnQud2hlZWxEZWx0YX0sXCJtb3VzZXdoZWVsXCIpOihCdD1mdW5jdGlvbigpe3JldHVybi10LmV2ZW50LmRldGFpbH0sXCJNb3pNb3VzZVBpeGVsU2Nyb2xsXCIpKSx3LmV2ZW50PWZ1bmN0aW9uKGUpe2UuZWFjaChmdW5jdGlvbigpe3ZhciBlPV8ub2YodGhpcyxhcmd1bWVudHMpLG49Zjtkcz90LnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZWFjaChcInN0YXJ0Lnpvb21cIixmdW5jdGlvbigpe2Y9dGhpcy5fX2NoYXJ0X198fHt4OjAseTowLGs6MX0sRShlKX0pLnR3ZWVuKFwiem9vbTp6b29tXCIsZnVuY3Rpb24oKXt2YXIgaT1wWzBdLGE9cFsxXSxvPXI/clswXTppLzIscz1yP3JbMV06YS8yLGw9dC5pbnRlcnBvbGF0ZVpvb20oWyhvLWYueCkvZi5rLChzLWYueSkvZi5rLGkvZi5rXSxbKG8tbi54KS9uLmssKHMtbi55KS9uLmssaS9uLmtdKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9bCh0KSxuPWkvclsyXTt0aGlzLl9fY2hhcnRfXz1mPXt4Om8tclswXSpuLHk6cy1yWzFdKm4sazpufSxDKGUpfX0pLmVhY2goXCJpbnRlcnJ1cHQuem9vbVwiLGZ1bmN0aW9uKCl7TChlKX0pLmVhY2goXCJlbmQuem9vbVwiLGZ1bmN0aW9uKCl7TChlKX0pOih0aGlzLl9fY2hhcnRfXz1mLEUoZSksQyhlKSxMKGUpKX0pfSx3LnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj17eDordFswXSx5Oit0WzFdLGs6Zi5rfSxTKCksdyk6W2YueCxmLnldfSx3LnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPXt4OmYueCx5OmYueSxrOm51bGx9LEEoK3QpLFMoKSx3KTpmLmt9LHcuc2NhbGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9bnVsbD09dD9qdDpbK3RbMF0sK3RbMV1dLHcpOmR9LHcuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQmJlsrdFswXSwrdFsxXV0sdyk6bn0sdy5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPXQmJlsrdFswXSwrdFsxXV0sdyk6cH0sdy5kdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0rdCx3KTpnfSx3Lng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCxsPXQuY29weSgpLGY9e3g6MCx5OjAsazoxfSx3KTpjfSx3Lnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9dCx1PXQuY29weSgpLGY9e3g6MCx5OjAsazoxfSx3KTpofSx0LnJlYmluZCh3LF8sXCJvblwiKX07dmFyIEJ0LE50LGp0PVswLDEvMF07ZnVuY3Rpb24gVnQoKXt9ZnVuY3Rpb24gVXQodCxlLHIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgVXQ/KHRoaXMuaD0rdCx0aGlzLnM9K2Usdm9pZCh0aGlzLmw9K3IpKTphcmd1bWVudHMubGVuZ3RoPDI/dCBpbnN0YW5jZW9mIFV0P25ldyBVdCh0LmgsdC5zLHQubCk6dWUoXCJcIit0LGhlLFV0KTpuZXcgVXQodCxlLHIpfXQuY29sb3I9VnQsVnQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrXCJcIn0sdC5oc2w9VXQ7dmFyIHF0PVV0LnByb3RvdHlwZT1uZXcgVnQ7ZnVuY3Rpb24gSHQodCxlLHIpe3ZhciBuLGk7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gTWF0aC5yb3VuZCgyNTUqZnVuY3Rpb24odCl7cmV0dXJuIHQ+MzYwP3QtPTM2MDp0PDAmJih0Kz0zNjApLHQ8NjA/bisoaS1uKSp0LzYwOnQ8MTgwP2k6dDwyNDA/bisoaS1uKSooMjQwLXQpLzYwOm59KHQpKX1yZXR1cm4gdD1pc05hTih0KT8wOih0JT0zNjApPDA/dCszNjA6dCxlPWlzTmFOKGUpPzA6ZTwwPzA6ZT4xPzE6ZSxuPTIqKHI9cjwwPzA6cj4xPzE6ciktKGk9cjw9LjU/ciooMStlKTpyK2UtciplKSxuZXcgYWUoYSh0KzEyMCksYSh0KSxhKHQtMTIwKSl9ZnVuY3Rpb24gR3QoZSxyLG4pe3JldHVybiB0aGlzIGluc3RhbmNlb2YgR3Q/KHRoaXMuaD0rZSx0aGlzLmM9K3Isdm9pZCh0aGlzLmw9K24pKTphcmd1bWVudHMubGVuZ3RoPDI/ZSBpbnN0YW5jZW9mIEd0P25ldyBHdChlLmgsZS5jLGUubCk6ZWUoZSBpbnN0YW5jZW9mIFh0P2UubDooZT1mZSgoZT10LnJnYihlKSkucixlLmcsZS5iKSkubCxlLmEsZS5iKTpuZXcgR3QoZSxyLG4pfXF0LmJyaWdodGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/dDoxKSxuZXcgVXQodGhpcy5oLHRoaXMucyx0aGlzLmwvdCl9LHF0LmRhcmtlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP3Q6MSksbmV3IFV0KHRoaXMuaCx0aGlzLnMsdCp0aGlzLmwpfSxxdC5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4gSHQodGhpcy5oLHRoaXMucyx0aGlzLmwpfSx0LmhjbD1HdDt2YXIgWXQ9R3QucHJvdG90eXBlPW5ldyBWdDtmdW5jdGlvbiBXdCh0LGUscil7cmV0dXJuIGlzTmFOKHQpJiYodD0wKSxpc05hTihlKSYmKGU9MCksbmV3IFh0KHIsTWF0aC5jb3ModCo9Q3QpKmUsTWF0aC5zaW4odCkqZSl9ZnVuY3Rpb24gWHQodCxlLHIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgWHQ/KHRoaXMubD0rdCx0aGlzLmE9K2Usdm9pZCh0aGlzLmI9K3IpKTphcmd1bWVudHMubGVuZ3RoPDI/dCBpbnN0YW5jZW9mIFh0P25ldyBYdCh0LmwsdC5hLHQuYik6dCBpbnN0YW5jZW9mIEd0P1d0KHQuaCx0LmMsdC5sKTpmZSgodD1hZSh0KSkucix0LmcsdC5iKTpuZXcgWHQodCxlLHIpfVl0LmJyaWdodGVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgR3QodGhpcy5oLHRoaXMuYyxNYXRoLm1pbigxMDAsdGhpcy5sK1p0Kihhcmd1bWVudHMubGVuZ3RoP3Q6MSkpKX0sWXQuZGFya2VyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgR3QodGhpcy5oLHRoaXMuYyxNYXRoLm1heCgwLHRoaXMubC1adCooYXJndW1lbnRzLmxlbmd0aD90OjEpKSl9LFl0LnJnYj1mdW5jdGlvbigpe3JldHVybiBXdCh0aGlzLmgsdGhpcy5jLHRoaXMubCkucmdiKCl9LHQubGFiPVh0O3ZhciBadD0xOCwkdD0uOTUwNDcsSnQ9MSxLdD0xLjA4ODgzLFF0PVh0LnByb3RvdHlwZT1uZXcgVnQ7ZnVuY3Rpb24gdGUodCxlLHIpe3ZhciBuPSh0KzE2KS8xMTYsaT1uK2UvNTAwLGE9bi1yLzIwMDtyZXR1cm4gbmV3IGFlKGllKDMuMjQwNDU0MiooaT1yZShpKSokdCktMS41MzcxMzg1KihuPXJlKG4pKkp0KS0uNDk4NTMxNCooYT1yZShhKSpLdCkpLGllKC0uOTY5MjY2KmkrMS44NzYwMTA4Km4rLjA0MTU1NiphKSxpZSguMDU1NjQzNCppLS4yMDQwMjU5Km4rMS4wNTcyMjUyKmEpKX1mdW5jdGlvbiBlZSh0LGUscil7cmV0dXJuIHQ+MD9uZXcgR3QoTWF0aC5hdGFuMihyLGUpKkx0LE1hdGguc3FydChlKmUrcipyKSx0KTpuZXcgR3QoTmFOLE5hTix0KX1mdW5jdGlvbiByZSh0KXtyZXR1cm4gdD4uMjA2ODkzMDM0P3QqdCp0Oih0LTQvMjkpLzcuNzg3MDM3fWZ1bmN0aW9uIG5lKHQpe3JldHVybiB0Pi4wMDg4NTY/TWF0aC5wb3codCwxLzMpOjcuNzg3MDM3KnQrNC8yOX1mdW5jdGlvbiBpZSh0KXtyZXR1cm4gTWF0aC5yb3VuZCgyNTUqKHQ8PS4wMDMwND8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsMS8yLjQpLS4wNTUpKX1mdW5jdGlvbiBhZSh0LGUscil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBhZT8odGhpcy5yPX5+dCx0aGlzLmc9fn5lLHZvaWQodGhpcy5iPX5+cikpOmFyZ3VtZW50cy5sZW5ndGg8Mj90IGluc3RhbmNlb2YgYWU/bmV3IGFlKHQucix0LmcsdC5iKTp1ZShcIlwiK3QsYWUsSHQpOm5ldyBhZSh0LGUscil9ZnVuY3Rpb24gb2UodCl7cmV0dXJuIG5ldyBhZSh0Pj4xNix0Pj44JjI1NSwyNTUmdCl9ZnVuY3Rpb24gc2UodCl7cmV0dXJuIG9lKHQpK1wiXCJ9UXQuYnJpZ2h0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBYdChNYXRoLm1pbigxMDAsdGhpcy5sK1p0Kihhcmd1bWVudHMubGVuZ3RoP3Q6MSkpLHRoaXMuYSx0aGlzLmIpfSxRdC5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBYdChNYXRoLm1heCgwLHRoaXMubC1adCooYXJndW1lbnRzLmxlbmd0aD90OjEpKSx0aGlzLmEsdGhpcy5iKX0sUXQucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIHRlKHRoaXMubCx0aGlzLmEsdGhpcy5iKX0sdC5yZ2I9YWU7dmFyIGxlPWFlLnByb3RvdHlwZT1uZXcgVnQ7ZnVuY3Rpb24gY2UodCl7cmV0dXJuIHQ8MTY/XCIwXCIrTWF0aC5tYXgoMCx0KS50b1N0cmluZygxNik6TWF0aC5taW4oMjU1LHQpLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiB1ZSh0LGUscil7dmFyIG4saSxhLG89MCxzPTAsbD0wO2lmKG49LyhbYS16XSspXFwoKC4qKVxcKS8uZXhlYyh0PXQudG9Mb3dlckNhc2UoKSkpc3dpdGNoKGk9blsyXS5zcGxpdChcIixcIiksblsxXSl7Y2FzZVwiaHNsXCI6cmV0dXJuIHIocGFyc2VGbG9hdChpWzBdKSxwYXJzZUZsb2F0KGlbMV0pLzEwMCxwYXJzZUZsb2F0KGlbMl0pLzEwMCk7Y2FzZVwicmdiXCI6cmV0dXJuIGUoZGUoaVswXSksZGUoaVsxXSksZGUoaVsyXSkpfXJldHVybihhPWdlLmdldCh0KSk/ZShhLnIsYS5nLGEuYik6KG51bGw9PXR8fFwiI1wiIT09dC5jaGFyQXQoMCl8fGlzTmFOKGE9cGFyc2VJbnQodC5zbGljZSgxKSwxNikpfHwoND09PXQubGVuZ3RoPyhvPSgzODQwJmEpPj40LG98PW8+PjQscz0yNDAmYSxzfD1zPj40LGw9MTUmYSxsfD1sPDw0KTo3PT09dC5sZW5ndGgmJihvPSgxNjcxMTY4MCZhKT4+MTYscz0oNjUyODAmYSk+PjgsbD0yNTUmYSkpLGUobyxzLGwpKX1mdW5jdGlvbiBoZSh0LGUscil7dmFyIG4saSxhPU1hdGgubWluKHQvPTI1NSxlLz0yNTUsci89MjU1KSxvPU1hdGgubWF4KHQsZSxyKSxzPW8tYSxsPShvK2EpLzI7cmV0dXJuIHM/KGk9bDwuNT9zLyhvK2EpOnMvKDItby1hKSxuPXQ9PW8/KGUtcikvcysoZTxyPzY6MCk6ZT09bz8oci10KS9zKzI6KHQtZSkvcys0LG4qPTYwKToobj1OYU4saT1sPjAmJmw8MT8wOm4pLG5ldyBVdChuLGksbCl9ZnVuY3Rpb24gZmUodCxlLHIpe3ZhciBuPW5lKCguNDEyNDU2NCoodD1wZSh0KSkrLjM1NzU3NjEqKGU9cGUoZSkpKy4xODA0Mzc1KihyPXBlKHIpKSkvJHQpLGk9bmUoKC4yMTI2NzI5KnQrLjcxNTE1MjIqZSsuMDcyMTc1KnIpL0p0KTtyZXR1cm4gWHQoMTE2KmktMTYsNTAwKihuLWkpLDIwMCooaS1uZSgoLjAxOTMzMzkqdCsuMTE5MTkyKmUrLjk1MDMwNDEqcikvS3QpKSl9ZnVuY3Rpb24gcGUodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gZGUodCl7dmFyIGU9cGFyc2VGbG9hdCh0KTtyZXR1cm5cIiVcIj09PXQuY2hhckF0KHQubGVuZ3RoLTEpP01hdGgucm91bmQoMi41NSplKTplfWxlLmJyaWdodGVyPWZ1bmN0aW9uKHQpe3Q9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD90OjEpO3ZhciBlPXRoaXMucixyPXRoaXMuZyxuPXRoaXMuYixpPTMwO3JldHVybiBlfHxyfHxuPyhlJiZlPGkmJihlPWkpLHImJnI8aSYmKHI9aSksbiYmbjxpJiYobj1pKSxuZXcgYWUoTWF0aC5taW4oMjU1LGUvdCksTWF0aC5taW4oMjU1LHIvdCksTWF0aC5taW4oMjU1LG4vdCkpKTpuZXcgYWUoaSxpLGkpfSxsZS5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhZSgodD1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP3Q6MSkpKnRoaXMucix0KnRoaXMuZyx0KnRoaXMuYil9LGxlLmhzbD1mdW5jdGlvbigpe3JldHVybiBoZSh0aGlzLnIsdGhpcy5nLHRoaXMuYil9LGxlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCIjXCIrY2UodGhpcy5yKStjZSh0aGlzLmcpK2NlKHRoaXMuYil9O3ZhciBnZT10Lm1hcCh7YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSk7ZnVuY3Rpb24gdmUodCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdD90OmZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIG1lKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiByJiYobj1yLHI9bnVsbCkseWUoZSxyLHQsbil9fWZ1bmN0aW9uIHllKGUscixpLGEpe3ZhciBvPXt9LHM9dC5kaXNwYXRjaChcImJlZm9yZXNlbmRcIixcInByb2dyZXNzXCIsXCJsb2FkXCIsXCJlcnJvclwiKSxsPXt9LGM9bmV3IFhNTEh0dHBSZXF1ZXN0LHU9bnVsbDtmdW5jdGlvbiBoKCl7dmFyIHQsZT1jLnN0YXR1cztpZighZSYmZnVuY3Rpb24odCl7dmFyIGU9dC5yZXNwb25zZVR5cGU7cmV0dXJuIGUmJlwidGV4dFwiIT09ZT90LnJlc3BvbnNlOnQucmVzcG9uc2VUZXh0fShjKXx8ZT49MjAwJiZlPDMwMHx8MzA0PT09ZSl7dHJ5e3Q9aS5jYWxsKG8sYyl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcy5lcnJvci5jYWxsKG8sdCl9cy5sb2FkLmNhbGwobyx0KX1lbHNlIHMuZXJyb3IuY2FsbChvLGMpfXJldHVybiF0aGlzLlhEb21haW5SZXF1ZXN0fHxcIndpdGhDcmVkZW50aWFsc1wiaW4gY3x8IS9eKGh0dHAocyk/Oik/XFwvXFwvLy50ZXN0KGUpfHwoYz1uZXcgWERvbWFpblJlcXVlc3QpLFwib25sb2FkXCJpbiBjP2Mub25sb2FkPWMub25lcnJvcj1oOmMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7Yy5yZWFkeVN0YXRlPjMmJmgoKX0sYy5vbnByb2dyZXNzPWZ1bmN0aW9uKGUpe3ZhciByPXQuZXZlbnQ7dC5ldmVudD1lO3RyeXtzLnByb2dyZXNzLmNhbGwobyxjKX1maW5hbGx5e3QuZXZlbnQ9cn19LG8uaGVhZGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9KHQrXCJcIikudG9Mb3dlckNhc2UoKSxhcmd1bWVudHMubGVuZ3RoPDI/bFt0XToobnVsbD09ZT9kZWxldGUgbFt0XTpsW3RdPWUrXCJcIixvKX0sby5taW1lVHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10P251bGw6dCtcIlwiLG8pOnJ9LG8ucmVzcG9uc2VUeXBlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsbyk6dX0sby5yZXNwb25zZT1mdW5jdGlvbih0KXtyZXR1cm4gaT10LG99LFtcImdldFwiLFwicG9zdFwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe29bdF09ZnVuY3Rpb24oKXtyZXR1cm4gby5zZW5kLmFwcGx5KG8sW3RdLmNvbmNhdChuKGFyZ3VtZW50cykpKX19KSxvLnNlbmQ9ZnVuY3Rpb24odCxuLGkpe2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBuJiYoaT1uLG49bnVsbCksYy5vcGVuKHQsZSwhMCksbnVsbD09cnx8XCJhY2NlcHRcImluIGx8fChsLmFjY2VwdD1yK1wiLCovKlwiKSxjLnNldFJlcXVlc3RIZWFkZXIpZm9yKHZhciBhIGluIGwpYy5zZXRSZXF1ZXN0SGVhZGVyKGEsbFthXSk7cmV0dXJuIG51bGwhPXImJmMub3ZlcnJpZGVNaW1lVHlwZSYmYy5vdmVycmlkZU1pbWVUeXBlKHIpLG51bGwhPXUmJihjLnJlc3BvbnNlVHlwZT11KSxudWxsIT1pJiZvLm9uKFwiZXJyb3JcIixpKS5vbihcImxvYWRcIixmdW5jdGlvbih0KXtpKG51bGwsdCl9KSxzLmJlZm9yZXNlbmQuY2FsbChvLGMpLGMuc2VuZChudWxsPT1uP251bGw6biksb30sby5hYm9ydD1mdW5jdGlvbigpe3JldHVybiBjLmFib3J0KCksb30sdC5yZWJpbmQobyxzLFwib25cIiksbnVsbD09YT9vOm8uZ2V0KGZ1bmN0aW9uKHQpe3JldHVybiAxPT09dC5sZW5ndGg/ZnVuY3Rpb24oZSxyKXt0KG51bGw9PWU/cjpudWxsKX06dH0oYSkpfWdlLmZvckVhY2goZnVuY3Rpb24odCxlKXtnZS5zZXQodCxvZShlKSl9KSx0LmZ1bmN0b3I9dmUsdC54aHI9bWUoeiksdC5kc3Y9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgUmVnRXhwKCdbXCInK3QrXCJcXG5dXCIpLG49dC5jaGFyQ29kZUF0KDApO2Z1bmN0aW9uIGkodCxyLG4pe2FyZ3VtZW50cy5sZW5ndGg8MyYmKG49cixyPW51bGwpO3ZhciBpPXllKHQsZSxudWxsPT1yP2E6byhyKSxuKTtyZXR1cm4gaS5yb3c9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aS5yZXNwb25zZShudWxsPT0ocj10KT9hOm8odCkpOnJ9LGl9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gaS5wYXJzZSh0LnJlc3BvbnNlVGV4dCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGkucGFyc2UoZS5yZXNwb25zZVRleHQsdCl9fWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGUubWFwKGwpLmpvaW4odCl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gci50ZXN0KHQpPydcIicrdC5yZXBsYWNlKC9cXFwiL2csJ1wiXCInKSsnXCInOnR9cmV0dXJuIGkucGFyc2U9ZnVuY3Rpb24odCxlKXt2YXIgcjtyZXR1cm4gaS5wYXJzZVJvd3ModCxmdW5jdGlvbih0LG4pe2lmKHIpcmV0dXJuIHIodCxuLTEpO3ZhciBpPW5ldyBGdW5jdGlvbihcImRcIixcInJldHVybiB7XCIrdC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrXCI6IGRbXCIrZStcIl1cIn0pLmpvaW4oXCIsXCIpK1wifVwiKTtyPWU/ZnVuY3Rpb24odCxyKXtyZXR1cm4gZShpKHQpLHIpfTppfSl9LGkucGFyc2VSb3dzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhPXt9LG89e30scz1bXSxsPXQubGVuZ3RoLGM9MCx1PTA7ZnVuY3Rpb24gaCgpe2lmKGM+PWwpcmV0dXJuIG87aWYoaSlyZXR1cm4gaT0hMSxhO3ZhciBlPWM7aWYoMzQ9PT10LmNoYXJDb2RlQXQoZSkpe2Zvcih2YXIgcj1lO3IrKzxsOylpZigzND09PXQuY2hhckNvZGVBdChyKSl7aWYoMzQhPT10LmNoYXJDb2RlQXQocisxKSlicmVhazsrK3J9cmV0dXJuIGM9cisyLDEzPT09KHM9dC5jaGFyQ29kZUF0KHIrMSkpPyhpPSEwLDEwPT09dC5jaGFyQ29kZUF0KHIrMikmJisrYyk6MTA9PT1zJiYoaT0hMCksdC5zbGljZShlKzEscikucmVwbGFjZSgvXCJcIi9nLCdcIicpfWZvcig7YzxsOyl7dmFyIHMsdT0xO2lmKDEwPT09KHM9dC5jaGFyQ29kZUF0KGMrKykpKWk9ITA7ZWxzZSBpZigxMz09PXMpaT0hMCwxMD09PXQuY2hhckNvZGVBdChjKSYmKCsrYywrK3UpO2Vsc2UgaWYocyE9PW4pY29udGludWU7cmV0dXJuIHQuc2xpY2UoZSxjLXUpfXJldHVybiB0LnNsaWNlKGUpfWZvcig7KHI9aCgpKSE9PW87KXtmb3IodmFyIGY9W107ciE9PWEmJnIhPT1vOylmLnB1c2gocikscj1oKCk7ZSYmbnVsbD09KGY9ZShmLHUrKykpfHxzLnB1c2goZil9cmV0dXJuIHN9LGkuZm9ybWF0PWZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZVswXSkpcmV0dXJuIGkuZm9ybWF0Um93cyhlKTt2YXIgcj1uZXcgTCxuPVtdO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHQpci5oYXMoZSl8fG4ucHVzaChyLmFkZChlKSl9KSxbbi5tYXAobCkuam9pbih0KV0uY29uY2F0KGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbChlW3RdKX0pLmpvaW4odCl9KSkuam9pbihcIlxcblwiKX0saS5mb3JtYXRSb3dzPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChzKS5qb2luKFwiXFxuXCIpfSxpfSx0LmNzdj10LmRzdihcIixcIixcInRleHQvY3N2XCIpLHQudHN2PXQuZHN2KFwiXFx0XCIsXCJ0ZXh0L3RhYi1zZXBhcmF0ZWQtdmFsdWVzXCIpO3ZhciB4ZSxiZSxfZSx3ZSxrZT10aGlzW0kodGhpcyxcInJlcXVlc3RBbmltYXRpb25GcmFtZVwiKV18fGZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O2Z1bmN0aW9uIEFlKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoO248MiYmKGU9MCksbjwzJiYocj1EYXRlLm5vdygpKTt2YXIgaT17Yzp0LHQ6citlLG46bnVsbH07cmV0dXJuIGJlP2JlLm49aTp4ZT1pLGJlPWksX2V8fCh3ZT1jbGVhclRpbWVvdXQod2UpLF9lPTEsa2UoVGUpKSxpfWZ1bmN0aW9uIFRlKCl7dmFyIHQ9TWUoKSxlPVNlKCktdDtlPjI0Pyhpc0Zpbml0ZShlKSYmKGNsZWFyVGltZW91dCh3ZSksd2U9c2V0VGltZW91dChUZSxlKSksX2U9MCk6KF9lPTEsa2UoVGUpKX1mdW5jdGlvbiBNZSgpe2Zvcih2YXIgdD1EYXRlLm5vdygpLGU9eGU7ZTspdD49ZS50JiZlLmModC1lLnQpJiYoZS5jPW51bGwpLGU9ZS5uO3JldHVybiB0fWZ1bmN0aW9uIFNlKCl7Zm9yKHZhciB0LGU9eGUscj0xLzA7ZTspZS5jPyhlLnQ8ciYmKHI9ZS50KSxlPSh0PWUpLm4pOmU9dD90Lm49ZS5uOnhlPWUubjtyZXR1cm4gYmU9dCxyfWZ1bmN0aW9uIEVlKHQsZSl7cmV0dXJuIGUtKHQ/TWF0aC5jZWlsKE1hdGgubG9nKHQpL01hdGguTE4xMCk6MSl9dC50aW1lcj1mdW5jdGlvbigpe0FlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdC50aW1lci5mbHVzaD1mdW5jdGlvbigpe01lKCksU2UoKX0sdC5yb3VuZD1mdW5jdGlvbih0LGUpe3JldHVybiBlP01hdGgucm91bmQodCooZT1NYXRoLnBvdygxMCxlKSkpL2U6TWF0aC5yb3VuZCh0KX07dmFyIENlPVtcInlcIixcInpcIixcImFcIixcImZcIixcInBcIixcIm5cIixcIlxceGI1XCIsXCJtXCIsXCJcIixcImtcIixcIk1cIixcIkdcIixcIlRcIixcIlBcIixcIkVcIixcIlpcIixcIllcIl0ubWFwKGZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5wb3coMTAsMyp5KDgtZSkpO3JldHVybntzY2FsZTplPjg/ZnVuY3Rpb24odCl7cmV0dXJuIHQvcn06ZnVuY3Rpb24odCl7cmV0dXJuIHQqcn0sc3ltYm9sOnR9fSk7dC5mb3JtYXRQcmVmaXg9ZnVuY3Rpb24oZSxyKXt2YXIgbj0wO3JldHVybihlPStlKSYmKGU8MCYmKGUqPS0xKSxyJiYoZT10LnJvdW5kKGUsRWUoZSxyKSkpLG49MStNYXRoLmZsb29yKDFlLTEyK01hdGgubG9nKGUpL01hdGguTE4xMCksbj1NYXRoLm1heCgtMjQsTWF0aC5taW4oMjQsMypNYXRoLmZsb29yKChuLTEpLzMpKSkpLENlWzgrbi8zXX07dmFyIExlPS8oPzooW157XSk/KFs8Pj1eXSkpPyhbK1xcLSBdKT8oWyQjXSk/KDApPyhcXGQrKT8oLCk/KFxcLi0/XFxkKyk/KFthLXolXSk/L2ksemU9dC5tYXAoe2I6ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodCl9LG86ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoOCl9LHg6ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoMTYpfSxYOmZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSxnOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9QcmVjaXNpb24oZSl9LGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0V4cG9uZW50aWFsKGUpfSxmOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9GaXhlZChlKX0scjpmdW5jdGlvbihlLHIpe3JldHVybihlPXQucm91bmQoZSxFZShlLHIpKSkudG9GaXhlZChNYXRoLm1heCgwLE1hdGgubWluKDIwLEVlKGUqKDErMWUtMTUpLHIpKSkpfX0pO2Z1bmN0aW9uIE9lKHQpe3JldHVybiB0K1wiXCJ9dmFyIEllPXQudGltZT17fSxEZT1EYXRlO2Z1bmN0aW9uIFBlKCl7dGhpcy5fPW5ldyBEYXRlKGFyZ3VtZW50cy5sZW5ndGg+MT9EYXRlLlVUQy5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YXJndW1lbnRzWzBdKX1QZS5wcm90b3R5cGU9e2dldERhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0RhdGUoKX0sZ2V0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENEYXkoKX0sZ2V0RnVsbFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0Z1bGxZZWFyKCl9LGdldEhvdXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENIb3VycygpfSxnZXRNaWxsaXNlY29uZHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ01pbGxpc2Vjb25kcygpfSxnZXRNaW51dGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNaW51dGVzKCl9LGdldE1vbnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNb250aCgpfSxnZXRTZWNvbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENTZWNvbmRzKCl9LGdldFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFRpbWUoKX0sZ2V0VGltZXpvbmVPZmZzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8udmFsdWVPZigpfSxzZXREYXRlOmZ1bmN0aW9uKCl7UmUuc2V0VVRDRGF0ZS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0RGF5OmZ1bmN0aW9uKCl7UmUuc2V0VVRDRGF5LmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRGdWxsWWVhcjpmdW5jdGlvbigpe1JlLnNldFVUQ0Z1bGxZZWFyLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRIb3VyczpmdW5jdGlvbigpe1JlLnNldFVUQ0hvdXJzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNaWxsaXNlY29uZHM6ZnVuY3Rpb24oKXtSZS5zZXRVVENNaWxsaXNlY29uZHMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldE1pbnV0ZXM6ZnVuY3Rpb24oKXtSZS5zZXRVVENNaW51dGVzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNb250aDpmdW5jdGlvbigpe1JlLnNldFVUQ01vbnRoLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRTZWNvbmRzOmZ1bmN0aW9uKCl7UmUuc2V0VVRDU2Vjb25kcy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0VGltZTpmdW5jdGlvbigpe1JlLnNldFRpbWUuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9fTt2YXIgUmU9RGF0ZS5wcm90b3R5cGU7ZnVuY3Rpb24gRmUodCxlLHIpe2Z1bmN0aW9uIG4oZSl7dmFyIHI9dChlKSxuPWEociwxKTtyZXR1cm4gZS1yPG4tZT9yOm59ZnVuY3Rpb24gaShyKXtyZXR1cm4gZShyPXQobmV3IERlKHItMSkpLDEpLHJ9ZnVuY3Rpb24gYSh0LHIpe3JldHVybiBlKHQ9bmV3IERlKCt0KSxyKSx0fWZ1bmN0aW9uIG8odCxuLGEpe3ZhciBvPWkodCkscz1bXTtpZihhPjEpZm9yKDtvPG47KXIobyklYXx8cy5wdXNoKG5ldyBEYXRlKCtvKSksZShvLDEpO2Vsc2UgZm9yKDtvPG47KXMucHVzaChuZXcgRGF0ZSgrbykpLGUobywxKTtyZXR1cm4gc310LmZsb29yPXQsdC5yb3VuZD1uLHQuY2VpbD1pLHQub2Zmc2V0PWEsdC5yYW5nZT1vO3ZhciBzPXQudXRjPUJlKHQpO3JldHVybiBzLmZsb29yPXMscy5yb3VuZD1CZShuKSxzLmNlaWw9QmUoaSkscy5vZmZzZXQ9QmUoYSkscy5yYW5nZT1mdW5jdGlvbih0LGUscil7dHJ5e0RlPVBlO3ZhciBuPW5ldyBQZTtyZXR1cm4gbi5fPXQsbyhuLGUscil9ZmluYWxseXtEZT1EYXRlfX0sdH1mdW5jdGlvbiBCZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt0cnl7RGU9UGU7dmFyIG49bmV3IFBlO3JldHVybiBuLl89ZSx0KG4scikuX31maW5hbGx5e0RlPURhdGV9fX1JZS55ZWFyPUZlKGZ1bmN0aW9uKHQpe3JldHVybih0PUllLmRheSh0KSkuc2V0TW9udGgoMCwxKSx0fSxmdW5jdGlvbih0LGUpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK2UpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSksSWUueWVhcnM9SWUueWVhci5yYW5nZSxJZS55ZWFycy51dGM9SWUueWVhci51dGMucmFuZ2UsSWUuZGF5PUZlKGZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBEZSgyZTMsMCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSx0LmdldERhdGUoKSksZX0sZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrZSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKS0xfSksSWUuZGF5cz1JZS5kYXkucmFuZ2UsSWUuZGF5cy51dGM9SWUuZGF5LnV0Yy5yYW5nZSxJZS5kYXlPZlllYXI9ZnVuY3Rpb24odCl7dmFyIGU9SWUueWVhcih0KTtyZXR1cm4gTWF0aC5mbG9vcigodC1lLTZlNCoodC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkpLzg2NGU1KX0sW1wic3VuZGF5XCIsXCJtb25kYXlcIixcInR1ZXNkYXlcIixcIndlZG5lc2RheVwiLFwidGh1cnNkYXlcIixcImZyaWRheVwiLFwic2F0dXJkYXlcIl0uZm9yRWFjaChmdW5jdGlvbih0LGUpe2U9Ny1lO3ZhciByPUllW3RdPUZlKGZ1bmN0aW9uKHQpe3JldHVybih0PUllLmRheSh0KSkuc2V0RGF0ZSh0LmdldERhdGUoKS0odC5nZXREYXkoKStlKSU3KSx0fSxmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKSs3Kk1hdGguZmxvb3IoZSkpfSxmdW5jdGlvbih0KXt2YXIgcj1JZS55ZWFyKHQpLmdldERheSgpO3JldHVybiBNYXRoLmZsb29yKChJZS5kYXlPZlllYXIodCkrKHIrZSklNykvNyktKHIhPT1lKX0pO0llW3QrXCJzXCJdPXIucmFuZ2UsSWVbdCtcInNcIl0udXRjPXIudXRjLnJhbmdlLEllW3QrXCJPZlllYXJcIl09ZnVuY3Rpb24odCl7dmFyIHI9SWUueWVhcih0KS5nZXREYXkoKTtyZXR1cm4gTWF0aC5mbG9vcigoSWUuZGF5T2ZZZWFyKHQpKyhyK2UpJTcpLzcpfX0pLEllLndlZWs9SWUuc3VuZGF5LEllLndlZWtzPUllLnN1bmRheS5yYW5nZSxJZS53ZWVrcy51dGM9SWUuc3VuZGF5LnV0Yy5yYW5nZSxJZS53ZWVrT2ZZZWFyPUllLnN1bmRheU9mWWVhcjt2YXIgTmU9e1wiLVwiOlwiXCIsXzpcIiBcIiwwOlwiMFwifSxqZT0vXlxccypcXGQrLyxWZT0vXiUvO2Z1bmN0aW9uIFVlKHQsZSxyKXt2YXIgbj10PDA/XCItXCI6XCJcIixpPShuPy10OnQpK1wiXCIsYT1pLmxlbmd0aDtyZXR1cm4gbisoYTxyP25ldyBBcnJheShyLWErMSkuam9pbihlKStpOmkpfWZ1bmN0aW9uIHFlKGUpe3JldHVybiBuZXcgUmVnRXhwKFwiXig/OlwiK2UubWFwKHQucmVxdW90ZSkuam9pbihcInxcIikrXCIpXCIsXCJpXCIpfWZ1bmN0aW9uIEhlKHQpe2Zvcih2YXIgZT1uZXcgYixyPS0xLG49dC5sZW5ndGg7KytyPG47KWUuc2V0KHRbcl0udG9Mb3dlckNhc2UoKSxyKTtyZXR1cm4gZX1mdW5jdGlvbiBHZSh0LGUscil7amUubGFzdEluZGV4PTA7dmFyIG49amUuZXhlYyhlLnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KHQudz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZZSh0LGUscil7amUubGFzdEluZGV4PTA7dmFyIG49amUuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5VPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFdlKHQsZSxyKXtqZS5sYXN0SW5kZXg9MDt2YXIgbj1qZS5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Llc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWGUodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrNCkpO3JldHVybiBuPyh0Lnk9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWmUodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuLGk9amUuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIGk/KHQueT0obj0raVswXSkrKG4+Njg/MTkwMDoyZTMpLHIraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uICRlKHQsZSxyKXtyZXR1cm4vXlsrLV1cXGR7NH0kLy50ZXN0KGU9ZS5zbGljZShyLHIrNSkpPyh0Llo9LWUscis1KTotMX1mdW5jdGlvbiBKZSh0LGUscil7amUubGFzdEluZGV4PTA7dmFyIG49amUuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQubT1uWzBdLTEscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gS2UodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0LmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUWUodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMykpO3JldHVybiBuPyh0Lmo9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdHIodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lkg9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZXIodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lk09K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcnIodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0LlM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbnIodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMykpO3JldHVybiBuPyh0Lkw9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaXIodCl7dmFyIGU9dC5nZXRUaW1lem9uZU9mZnNldCgpLHI9ZT4wP1wiLVwiOlwiK1wiLG49eShlKS82MHwwLGk9eShlKSU2MDtyZXR1cm4gcitVZShuLFwiMFwiLDIpK1VlKGksXCIwXCIsMil9ZnVuY3Rpb24gYXIodCxlLHIpe1ZlLmxhc3RJbmRleD0wO3ZhciBuPVZlLmV4ZWMoZS5zbGljZShyLHIrMSkpO3JldHVybiBuP3IrblswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gb3IodCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9LTE7KytyPGU7KXRbcl1bMF09dGhpcyh0W3JdWzBdKTtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciByPTAsbj10W3JdOyFuWzFdKGUpOyluPXRbKytyXTtyZXR1cm4gblswXShlKX19dC5sb2NhbGU9ZnVuY3Rpb24oZSl7cmV0dXJue251bWJlckZvcm1hdDpmdW5jdGlvbihlKXt2YXIgcj1lLmRlY2ltYWwsbj1lLnRob3VzYW5kcyxpPWUuZ3JvdXBpbmcsYT1lLmN1cnJlbmN5LG89aSYmbj9mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxhPVtdLG89MCxzPWlbMF0sbD0wO3I+MCYmcz4wJiYobCtzKzE+ZSYmKHM9TWF0aC5tYXgoMSxlLWwpKSxhLnB1c2godC5zdWJzdHJpbmcoci09cyxyK3MpKSwhKChsKz1zKzEpPmUpKTspcz1pW289KG8rMSklaS5sZW5ndGhdO3JldHVybiBhLnJldmVyc2UoKS5qb2luKG4pfTp6O3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1MZS5leGVjKGUpLGk9blsxXXx8XCIgXCIscz1uWzJdfHxcIj5cIixsPW5bM118fFwiLVwiLGM9bls0XXx8XCJcIix1PW5bNV0saD0rbls2XSxmPW5bN10scD1uWzhdLGQ9bls5XSxnPTEsdj1cIlwiLG09XCJcIix5PSExLHg9ITA7c3dpdGNoKHAmJihwPStwLnN1YnN0cmluZygxKSksKHV8fFwiMFwiPT09aSYmXCI9XCI9PT1zKSYmKHU9aT1cIjBcIixzPVwiPVwiKSxkKXtjYXNlXCJuXCI6Zj0hMCxkPVwiZ1wiO2JyZWFrO2Nhc2VcIiVcIjpnPTEwMCxtPVwiJVwiLGQ9XCJmXCI7YnJlYWs7Y2FzZVwicFwiOmc9MTAwLG09XCIlXCIsZD1cInJcIjticmVhaztjYXNlXCJiXCI6Y2FzZVwib1wiOmNhc2VcInhcIjpjYXNlXCJYXCI6XCIjXCI9PT1jJiYodj1cIjBcIitkLnRvTG93ZXJDYXNlKCkpO2Nhc2VcImNcIjp4PSExO2Nhc2VcImRcIjp5PSEwLHA9MDticmVhaztjYXNlXCJzXCI6Zz0tMSxkPVwiclwifVwiJFwiPT09YyYmKHY9YVswXSxtPWFbMV0pLFwiclwiIT1kfHxwfHwoZD1cImdcIiksbnVsbCE9cCYmKFwiZ1wiPT1kP3A9TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxwKSk6XCJlXCIhPWQmJlwiZlwiIT1kfHwocD1NYXRoLm1heCgwLE1hdGgubWluKDIwLHApKSkpLGQ9emUuZ2V0KGQpfHxPZTt2YXIgYj11JiZmO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1tO2lmKHkmJmUlMSlyZXR1cm5cIlwiO3ZhciBhPWU8MHx8MD09PWUmJjEvZTwwPyhlPS1lLFwiLVwiKTpcIi1cIj09PWw/XCJcIjpsO2lmKGc8MCl7dmFyIGM9dC5mb3JtYXRQcmVmaXgoZSxwKTtlPWMuc2NhbGUoZSksbj1jLnN5bWJvbCttfWVsc2UgZSo9Zzt2YXIgXyx3LGs9KGU9ZChlLHApKS5sYXN0SW5kZXhPZihcIi5cIik7aWYoazwwKXt2YXIgQT14P2UubGFzdEluZGV4T2YoXCJlXCIpOi0xO0E8MD8oXz1lLHc9XCJcIik6KF89ZS5zdWJzdHJpbmcoMCxBKSx3PWUuc3Vic3RyaW5nKEEpKX1lbHNlIF89ZS5zdWJzdHJpbmcoMCxrKSx3PXIrZS5zdWJzdHJpbmcoaysxKTshdSYmZiYmKF89byhfLDEvMCkpO3ZhciBUPXYubGVuZ3RoK18ubGVuZ3RoK3cubGVuZ3RoKyhiPzA6YS5sZW5ndGgpLE09VDxoP25ldyBBcnJheShUPWgtVCsxKS5qb2luKGkpOlwiXCI7cmV0dXJuIGImJihfPW8oTStfLE0ubGVuZ3RoP2gtdy5sZW5ndGg6MS8wKSksYSs9dixlPV8rdywoXCI8XCI9PT1zP2ErZStNOlwiPlwiPT09cz9NK2ErZTpcIl5cIj09PXM/TS5zdWJzdHJpbmcoMCxUPj49MSkrYStlK00uc3Vic3RyaW5nKFQpOmErKGI/ZTpNK2UpKStufX19KGUpLHRpbWVGb3JtYXQ6ZnVuY3Rpb24oZSl7dmFyIHI9ZS5kYXRlVGltZSxuPWUuZGF0ZSxpPWUudGltZSxhPWUucGVyaW9kcyxvPWUuZGF5cyxzPWUuc2hvcnREYXlzLGw9ZS5tb250aHMsYz1lLnNob3J0TW9udGhzO2Z1bmN0aW9uIHUodCl7dmFyIGU9dC5sZW5ndGg7ZnVuY3Rpb24gcihyKXtmb3IodmFyIG4saSxhLG89W10scz0tMSxsPTA7KytzPGU7KTM3PT09dC5jaGFyQ29kZUF0KHMpJiYoby5wdXNoKHQuc2xpY2UobCxzKSksbnVsbCE9KGk9TmVbbj10LmNoYXJBdCgrK3MpXSkmJihuPXQuY2hhckF0KCsrcykpLChhPV9bbl0pJiYobj1hKHIsbnVsbD09aT9cImVcIj09PW4/XCIgXCI6XCIwXCI6aSkpLG8ucHVzaChuKSxsPXMrMSk7cmV0dXJuIG8ucHVzaCh0LnNsaWNlKGwscykpLG8uam9pbihcIlwiKX1yZXR1cm4gci5wYXJzZT1mdW5jdGlvbihlKXt2YXIgcj17eToxOTAwLG06MCxkOjEsSDowLE06MCxTOjAsTDowLFo6bnVsbH07aWYoaChyLHQsZSwwKSE9ZS5sZW5ndGgpcmV0dXJuIG51bGw7XCJwXCJpbiByJiYoci5IPXIuSCUxMisxMipyLnApO3ZhciBuPW51bGwhPXIuWiYmRGUhPT1QZSxpPW5ldyhuP1BlOkRlKTtyZXR1cm5cImpcImluIHI/aS5zZXRGdWxsWWVhcihyLnksMCxyLmopOlwiV1wiaW4gcnx8XCJVXCJpbiByPyhcIndcImluIHJ8fChyLnc9XCJXXCJpbiByPzE6MCksaS5zZXRGdWxsWWVhcihyLnksMCwxKSxpLnNldEZ1bGxZZWFyKHIueSwwLFwiV1wiaW4gcj8oci53KzYpJTcrNypyLlctKGkuZ2V0RGF5KCkrNSklNzpyLncrNypyLlUtKGkuZ2V0RGF5KCkrNiklNykpOmkuc2V0RnVsbFllYXIoci55LHIubSxyLmQpLGkuc2V0SG91cnMoci5IKyhyLlovMTAwfDApLHIuTStyLlolMTAwLHIuUyxyLkwpLG4/aS5fOml9LHIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0scn1mdW5jdGlvbiBoKHQsZSxyLG4pe2Zvcih2YXIgaSxhLG8scz0wLGw9ZS5sZW5ndGgsYz1yLmxlbmd0aDtzPGw7KXtpZihuPj1jKXJldHVybi0xO2lmKDM3PT09KGk9ZS5jaGFyQ29kZUF0KHMrKykpKXtpZihvPWUuY2hhckF0KHMrKyksIShhPXdbbyBpbiBOZT9lLmNoYXJBdChzKyspOm9dKXx8KG49YSh0LHIsbikpPDApcmV0dXJuLTF9ZWxzZSBpZihpIT1yLmNoYXJDb2RlQXQobisrKSlyZXR1cm4tMX1yZXR1cm4gbn11LnV0Yz1mdW5jdGlvbih0KXt2YXIgZT11KHQpO2Z1bmN0aW9uIHIodCl7dHJ5e3ZhciByPW5ldyhEZT1QZSk7cmV0dXJuIHIuXz10LGUocil9ZmluYWxseXtEZT1EYXRlfX1yZXR1cm4gci5wYXJzZT1mdW5jdGlvbih0KXt0cnl7RGU9UGU7dmFyIHI9ZS5wYXJzZSh0KTtyZXR1cm4gciYmci5ffWZpbmFsbHl7RGU9RGF0ZX19LHIudG9TdHJpbmc9ZS50b1N0cmluZyxyfSx1Lm11bHRpPXUudXRjLm11bHRpPW9yO3ZhciBmPXQubWFwKCkscD1xZShvKSxkPUhlKG8pLGc9cWUocyksdj1IZShzKSxtPXFlKGwpLHk9SGUobCkseD1xZShjKSxiPUhlKGMpO2EuZm9yRWFjaChmdW5jdGlvbih0LGUpe2Yuc2V0KHQudG9Mb3dlckNhc2UoKSxlKX0pO3ZhciBfPXthOmZ1bmN0aW9uKHQpe3JldHVybiBzW3QuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiBvW3QuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBjW3QuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIGxbdC5nZXRNb250aCgpXX0sYzp1KHIpLGQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVWUodC5nZXREYXRlKCksZSwyKX0sZTpmdW5jdGlvbih0LGUpe3JldHVybiBVZSh0LmdldERhdGUoKSxlLDIpfSxIOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0SG91cnMoKSxlLDIpfSxJOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0SG91cnMoKSUxMnx8MTIsZSwyKX0sajpmdW5jdGlvbih0LGUpe3JldHVybiBVZSgxK0llLmRheU9mWWVhcih0KSxlLDMpfSxMOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0TWlsbGlzZWNvbmRzKCksZSwzKX0sbTpmdW5jdGlvbih0LGUpe3JldHVybiBVZSh0LmdldE1vbnRoKCkrMSxlLDIpfSxNOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0TWludXRlcygpLGUsMil9LHA6ZnVuY3Rpb24odCl7cmV0dXJuIGFbKyh0LmdldEhvdXJzKCk+PTEyKV19LFM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVWUodC5nZXRTZWNvbmRzKCksZSwyKX0sVTpmdW5jdGlvbih0LGUpe3JldHVybiBVZShJZS5zdW5kYXlPZlllYXIodCksZSwyKX0sdzpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKX0sVzpmdW5jdGlvbih0LGUpe3JldHVybiBVZShJZS5tb25kYXlPZlllYXIodCksZSwyKX0seDp1KG4pLFg6dShpKSx5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX0sWTpmdW5jdGlvbih0LGUpe3JldHVybiBVZSh0LmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9LFo6aXIsXCIlXCI6ZnVuY3Rpb24oKXtyZXR1cm5cIiVcIn19LHc9e2E6ZnVuY3Rpb24odCxlLHIpe2cubGFzdEluZGV4PTA7dmFyIG49Zy5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Lnc9di5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSxyK25bMF0ubGVuZ3RoKTotMX0sQTpmdW5jdGlvbih0LGUscil7cC5sYXN0SW5kZXg9MDt2YXIgbj1wLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQudz1kLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLHIrblswXS5sZW5ndGgpOi0xfSxiOmZ1bmN0aW9uKHQsZSxyKXt4Lmxhc3RJbmRleD0wO3ZhciBuPXguZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5tPWIuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSkscituWzBdLmxlbmd0aCk6LTF9LEI6ZnVuY3Rpb24odCxlLHIpe20ubGFzdEluZGV4PTA7dmFyIG49bS5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Lm09eS5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSxyK25bMF0ubGVuZ3RoKTotMX0sYzpmdW5jdGlvbih0LGUscil7cmV0dXJuIGgodCxfLmMudG9TdHJpbmcoKSxlLHIpfSxkOktlLGU6S2UsSDp0cixJOnRyLGo6UWUsTDpucixtOkplLE06ZXIscDpmdW5jdGlvbih0LGUscil7dmFyIG49Zi5nZXQoZS5zbGljZShyLHIrPTIpLnRvTG93ZXJDYXNlKCkpO3JldHVybiBudWxsPT1uPy0xOih0LnA9bixyKX0sUzpycixVOlllLHc6R2UsVzpXZSx4OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gaCh0LF8ueC50b1N0cmluZygpLGUscil9LFg6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBoKHQsXy5YLnRvU3RyaW5nKCksZSxyKX0seTpaZSxZOlhlLFo6JGUsXCIlXCI6YXJ9O3JldHVybiB1fShlKX19O3ZhciBzcj10LmxvY2FsZSh7ZGVjaW1hbDpcIi5cIix0aG91c2FuZHM6XCIsXCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OltcIiRcIixcIlwiXSxkYXRlVGltZTpcIiVhICViICVlICVYICVZXCIsZGF0ZTpcIiVtLyVkLyVZXCIsdGltZTpcIiVIOiVNOiVTXCIscGVyaW9kczpbXCJBTVwiLFwiUE1cIl0sZGF5czpbXCJTdW5kYXlcIixcIk1vbmRheVwiLFwiVHVlc2RheVwiLFwiV2VkbmVzZGF5XCIsXCJUaHVyc2RheVwiLFwiRnJpZGF5XCIsXCJTYXR1cmRheVwiXSxzaG9ydERheXM6W1wiU3VuXCIsXCJNb25cIixcIlR1ZVwiLFwiV2VkXCIsXCJUaHVcIixcIkZyaVwiLFwiU2F0XCJdLG1vbnRoczpbXCJKYW51YXJ5XCIsXCJGZWJydWFyeVwiLFwiTWFyY2hcIixcIkFwcmlsXCIsXCJNYXlcIixcIkp1bmVcIixcIkp1bHlcIixcIkF1Z3VzdFwiLFwiU2VwdGVtYmVyXCIsXCJPY3RvYmVyXCIsXCJOb3ZlbWJlclwiLFwiRGVjZW1iZXJcIl0sc2hvcnRNb250aHM6W1wiSmFuXCIsXCJGZWJcIixcIk1hclwiLFwiQXByXCIsXCJNYXlcIixcIkp1blwiLFwiSnVsXCIsXCJBdWdcIixcIlNlcFwiLFwiT2N0XCIsXCJOb3ZcIixcIkRlY1wiXX0pO2Z1bmN0aW9uIGxyKCl7fXQuZm9ybWF0PXNyLm51bWJlckZvcm1hdCx0Lmdlbz17fSxsci5wcm90b3R5cGU9e3M6MCx0OjAsYWRkOmZ1bmN0aW9uKHQpe3VyKHQsdGhpcy50LGNyKSx1cihjci5zLHRoaXMucyx0aGlzKSx0aGlzLnM/dGhpcy50Kz1jci50OnRoaXMucz1jci50fSxyZXNldDpmdW5jdGlvbigpe3RoaXMucz10aGlzLnQ9MH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgY3I9bmV3IGxyO2Z1bmN0aW9uIHVyKHQsZSxyKXt2YXIgbj1yLnM9dCtlLGk9bi10LGE9bi1pO3IudD10LWErKGUtaSl9ZnVuY3Rpb24gaHIodCxlKXt0JiZwci5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpJiZwclt0LnR5cGVdKHQsZSl9dC5nZW8uc3RyZWFtPWZ1bmN0aW9uKHQsZSl7dCYmZnIuaGFzT3duUHJvcGVydHkodC50eXBlKT9mclt0LnR5cGVdKHQsZSk6aHIodCxlKX07dmFyIGZyPXtGZWF0dXJlOmZ1bmN0aW9uKHQsZSl7aHIodC5nZW9tZXRyeSxlKX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5mZWF0dXJlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWhyKHJbbl0uZ2VvbWV0cnksZSl9fSxwcj17U3BoZXJlOmZ1bmN0aW9uKHQsZSl7ZS5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24odCxlKXt0PXQuY29vcmRpbmF0ZXMsZS5wb2ludCh0WzBdLHRbMV0sdFsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KXQ9cltuXSxlLnBvaW50KHRbMF0sdFsxXSx0WzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe2RyKHQuY29vcmRpbmF0ZXMsZSwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylkcihyW25dLGUsMCl9LFBvbHlnb246ZnVuY3Rpb24odCxlKXtncih0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWdyKHJbbl0sZSl9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmdlb21ldHJpZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylocihyW25dLGUpfX07ZnVuY3Rpb24gZHIodCxlLHIpe3ZhciBuLGk9LTEsYT10Lmxlbmd0aC1yO2ZvcihlLmxpbmVTdGFydCgpOysraTxhOyluPXRbaV0sZS5wb2ludChuWzBdLG5bMV0sblsyXSk7ZS5saW5lRW5kKCl9ZnVuY3Rpb24gZ3IodCxlKXt2YXIgcj0tMSxuPXQubGVuZ3RoO2ZvcihlLnBvbHlnb25TdGFydCgpOysrcjxuOylkcih0W3JdLGUsMSk7ZS5wb2x5Z29uRW5kKCl9dC5nZW8uYXJlYT1mdW5jdGlvbihlKXtyZXR1cm4gdnI9MCx0Lmdlby5zdHJlYW0oZSxDciksdnJ9O3ZhciB2cixtcix5cix4cixicixfcix3cixrcixBcixUcixNcixTcixFcj1uZXcgbHIsQ3I9e3NwaGVyZTpmdW5jdGlvbigpe3ZyKz00KlR0fSxwb2ludDpQLGxpbmVTdGFydDpQLGxpbmVFbmQ6UCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtFci5yZXNldCgpLENyLmxpbmVTdGFydD1Mcn0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciB0PTIqRXI7dnIrPXQ8MD80KlR0K3Q6dCxDci5saW5lU3RhcnQ9Q3IubGluZUVuZD1Dci5wb2ludD1QfX07ZnVuY3Rpb24gTHIoKXt2YXIgdCxlLHIsbixpO2Z1bmN0aW9uIGEodCxlKXtlPWUqQ3QvMitUdC80O3ZhciBhPSh0Kj1DdCktcixvPWE+PTA/MTotMSxzPW8qYSxsPU1hdGguY29zKGUpLGM9TWF0aC5zaW4oZSksdT1pKmMsaD1uKmwrdSpNYXRoLmNvcyhzKSxmPXUqbypNYXRoLnNpbihzKTtFci5hZGQoTWF0aC5hdGFuMihmLGgpKSxyPXQsbj1sLGk9Y31Dci5wb2ludD1mdW5jdGlvbihvLHMpe0NyLnBvaW50PWEscj0odD1vKSpDdCxuPU1hdGguY29zKHM9KGU9cykqQ3QvMitUdC80KSxpPU1hdGguc2luKHMpfSxDci5saW5lRW5kPWZ1bmN0aW9uKCl7YSh0LGUpfX1mdW5jdGlvbiB6cih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPU1hdGguY29zKHIpO3JldHVybltuKk1hdGguY29zKGUpLG4qTWF0aC5zaW4oZSksTWF0aC5zaW4ocildfWZ1bmN0aW9uIE9yKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdfWZ1bmN0aW9uIElyKHQsZSl7cmV0dXJuW3RbMV0qZVsyXS10WzJdKmVbMV0sdFsyXSplWzBdLXRbMF0qZVsyXSx0WzBdKmVbMV0tdFsxXSplWzBdXX1mdW5jdGlvbiBEcih0LGUpe3RbMF0rPWVbMF0sdFsxXSs9ZVsxXSx0WzJdKz1lWzJdfWZ1bmN0aW9uIFByKHQsZSl7cmV0dXJuW3RbMF0qZSx0WzFdKmUsdFsyXSplXX1mdW5jdGlvbiBScih0KXt2YXIgZT1NYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSt0WzJdKnRbMl0pO3RbMF0vPWUsdFsxXS89ZSx0WzJdLz1lfWZ1bmN0aW9uIEZyKHQpe3JldHVybltNYXRoLmF0YW4yKHRbMV0sdFswXSksRHQodFsyXSldfWZ1bmN0aW9uIEJyKHQsZSl7cmV0dXJuIHkodFswXS1lWzBdKTxrdCYmeSh0WzFdLWVbMV0pPGt0fXQuZ2VvLmJvdW5kcz1mdW5jdGlvbigpe3ZhciBlLHIsbixpLGEsbyxzLGwsYyx1LGgsZj17cG9pbnQ6cCxsaW5lU3RhcnQ6ZyxsaW5lRW5kOnYscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Zi5wb2ludD1tLGYubGluZVN0YXJ0PXgsZi5saW5lRW5kPWIsYz0wLENyLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7Q3IucG9seWdvbkVuZCgpLGYucG9pbnQ9cCxmLmxpbmVTdGFydD1nLGYubGluZUVuZD12LEVyPDA/KGU9LShuPTE4MCkscj0tKGk9OTApKTpjPmt0P2k9OTA6Yzwta3QmJihyPS05MCksaFswXT1lLGhbMV09bn19O2Z1bmN0aW9uIHAodCxhKXt1LnB1c2goaD1bZT10LG49dF0pLGE8ciYmKHI9YSksYT5pJiYoaT1hKX1mdW5jdGlvbiBkKHQsbyl7dmFyIHM9enIoW3QqQ3QsbypDdF0pO2lmKGwpe3ZhciBjPUlyKGwscyksdT1JcihbY1sxXSwtY1swXSwwXSxjKTtScih1KSx1PUZyKHUpO3ZhciBoPXQtYSxmPWg+MD8xOi0xLGQ9dVswXSpMdCpmLGc9eShoKT4xODA7aWYoZ14oZiphPGQmJmQ8Zip0KSkodj11WzFdKkx0KT5pJiYoaT12KTtlbHNlIGlmKGdeKGYqYTwoZD0oZCszNjApJTM2MC0xODApJiZkPGYqdCkpe3ZhciB2Oyh2PS11WzFdKkx0KTxyJiYocj12KX1lbHNlIG88ciYmKHI9byksbz5pJiYoaT1vKTtnP3Q8YT9fKGUsdCk+XyhlLG4pJiYobj10KTpfKHQsbik+XyhlLG4pJiYoZT10KTpuPj1lPyh0PGUmJihlPXQpLHQ+biYmKG49dCkpOnQ+YT9fKGUsdCk+XyhlLG4pJiYobj10KTpfKHQsbik+XyhlLG4pJiYoZT10KX1lbHNlIHAodCxvKTtsPXMsYT10fWZ1bmN0aW9uIGcoKXtmLnBvaW50PWR9ZnVuY3Rpb24gdigpe2hbMF09ZSxoWzFdPW4sZi5wb2ludD1wLGw9bnVsbH1mdW5jdGlvbiBtKHQsZSl7aWYobCl7dmFyIHI9dC1hO2MrPXkocik+MTgwP3IrKHI+MD8zNjA6LTM2MCk6cn1lbHNlIG89dCxzPWU7Q3IucG9pbnQodCxlKSxkKHQsZSl9ZnVuY3Rpb24geCgpe0NyLmxpbmVTdGFydCgpfWZ1bmN0aW9uIGIoKXttKG8scyksQ3IubGluZUVuZCgpLHkoYyk+a3QmJihlPS0obj0xODApKSxoWzBdPWUsaFsxXT1uLGw9bnVsbH1mdW5jdGlvbiBfKHQsZSl7cmV0dXJuKGUtPXQpPDA/ZSszNjA6ZX1mdW5jdGlvbiB3KHQsZSl7cmV0dXJuIHRbMF0tZVswXX1mdW5jdGlvbiBrKHQsZSl7cmV0dXJuIGVbMF08PWVbMV0/ZVswXTw9dCYmdDw9ZVsxXTp0PGVbMF18fGVbMV08dH1yZXR1cm4gZnVuY3Rpb24oYSl7aWYoaT1uPS0oZT1yPTEvMCksdT1bXSx0Lmdlby5zdHJlYW0oYSxmKSxjPXUubGVuZ3RoKXt1LnNvcnQodyk7Zm9yKHZhciBvPTEscz1bZz11WzBdXTtvPGM7KytvKWsoKHA9dVtvXSlbMF0sZyl8fGsocFsxXSxnKT8oXyhnWzBdLHBbMV0pPl8oZ1swXSxnWzFdKSYmKGdbMV09cFsxXSksXyhwWzBdLGdbMV0pPl8oZ1swXSxnWzFdKSYmKGdbMF09cFswXSkpOnMucHVzaChnPXApO2Zvcih2YXIgbCxjLHAsZD0tMS8wLGc9KG89MCxzW2M9cy5sZW5ndGgtMV0pO288PWM7Zz1wLCsrbylwPXNbb10sKGw9XyhnWzFdLHBbMF0pKT5kJiYoZD1sLGU9cFswXSxuPWdbMV0pfXJldHVybiB1PWg9bnVsbCxlPT09MS8wfHxyPT09MS8wP1tbTmFOLE5hTl0sW05hTixOYU5dXTpbW2Uscl0sW24saV1dfX0oKSx0Lmdlby5jZW50cm9pZD1mdW5jdGlvbihlKXttcj15cj14cj1icj1fcj13cj1rcj1Bcj1Ucj1Ncj1Tcj0wLHQuZ2VvLnN0cmVhbShlLE5yKTt2YXIgcj1UcixuPU1yLGk9U3IsYT1yKnIrbipuK2kqaTtyZXR1cm4gYTxBdCYmKHI9d3Isbj1rcixpPUFyLHlyPGt0JiYocj14cixuPWJyLGk9X3IpLChhPXIqcituKm4raSppKTxBdCk/W05hTixOYU5dOltNYXRoLmF0YW4yKG4scikqTHQsRHQoaS9NYXRoLnNxcnQoYSkpKkx0XX07dmFyIE5yPXtzcGhlcmU6UCxwb2ludDpqcixsaW5lU3RhcnQ6VXIsbGluZUVuZDpxcixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtOci5saW5lU3RhcnQ9SHJ9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtOci5saW5lU3RhcnQ9VXJ9fTtmdW5jdGlvbiBqcih0LGUpe3QqPUN0O3ZhciByPU1hdGguY29zKGUqPUN0KTtWcihyKk1hdGguY29zKHQpLHIqTWF0aC5zaW4odCksTWF0aC5zaW4oZSkpfWZ1bmN0aW9uIFZyKHQsZSxyKXt4cis9KHQteHIpLysrbXIsYnIrPShlLWJyKS9tcixfcis9KHItX3IpL21yfWZ1bmN0aW9uIFVyKCl7dmFyIHQsZSxyO2Z1bmN0aW9uIG4obixpKXtuKj1DdDt2YXIgYT1NYXRoLmNvcyhpKj1DdCksbz1hKk1hdGguY29zKG4pLHM9YSpNYXRoLnNpbihuKSxsPU1hdGguc2luKGkpLGM9TWF0aC5hdGFuMihNYXRoLnNxcnQoKGM9ZSpsLXIqcykqYysoYz1yKm8tdCpsKSpjKyhjPXQqcy1lKm8pKmMpLHQqbytlKnMrcipsKTt5cis9Yyx3cis9YyoodCsodD1vKSksa3IrPWMqKGUrKGU9cykpLEFyKz1jKihyKyhyPWwpKSxWcih0LGUscil9TnIucG9pbnQ9ZnVuY3Rpb24oaSxhKXtpKj1DdDt2YXIgbz1NYXRoLmNvcyhhKj1DdCk7dD1vKk1hdGguY29zKGkpLGU9bypNYXRoLnNpbihpKSxyPU1hdGguc2luKGEpLE5yLnBvaW50PW4sVnIodCxlLHIpfX1mdW5jdGlvbiBxcigpe05yLnBvaW50PWpyfWZ1bmN0aW9uIEhyKCl7dmFyIHQsZSxyLG4saTtmdW5jdGlvbiBhKHQsZSl7dCo9Q3Q7dmFyIGE9TWF0aC5jb3MoZSo9Q3QpLG89YSpNYXRoLmNvcyh0KSxzPWEqTWF0aC5zaW4odCksbD1NYXRoLnNpbihlKSxjPW4qbC1pKnMsdT1pKm8tcipsLGg9cipzLW4qbyxmPU1hdGguc3FydChjKmMrdSp1K2gqaCkscD1yKm8rbipzK2kqbCxkPWYmJi1JdChwKS9mLGc9TWF0aC5hdGFuMihmLHApO1RyKz1kKmMsTXIrPWQqdSxTcis9ZCpoLHlyKz1nLHdyKz1nKihyKyhyPW8pKSxrcis9Zyoobisobj1zKSksQXIrPWcqKGkrKGk9bCkpLFZyKHIsbixpKX1Oci5wb2ludD1mdW5jdGlvbihvLHMpe3Q9byxlPXMsTnIucG9pbnQ9YSxvKj1DdDt2YXIgbD1NYXRoLmNvcyhzKj1DdCk7cj1sKk1hdGguY29zKG8pLG49bCpNYXRoLnNpbihvKSxpPU1hdGguc2luKHMpLFZyKHIsbixpKX0sTnIubGluZUVuZD1mdW5jdGlvbigpe2EodCxlKSxOci5saW5lRW5kPXFyLE5yLnBvaW50PWpyfX1mdW5jdGlvbiBHcih0LGUpe2Z1bmN0aW9uIHIocixuKXtyZXR1cm4gcj10KHIsbiksZShyWzBdLHJbMV0pfXJldHVybiB0LmludmVydCYmZS5pbnZlcnQmJihyLmludmVydD1mdW5jdGlvbihyLG4pe3JldHVybihyPWUuaW52ZXJ0KHIsbikpJiZ0LmludmVydChyWzBdLHJbMV0pfSkscn1mdW5jdGlvbiBZcigpe3JldHVybiEwfWZ1bmN0aW9uIFdyKHQsZSxyLG4saSl7dmFyIGE9W10sbz1bXTtpZih0LmZvckVhY2goZnVuY3Rpb24odCl7aWYoISgoZT10Lmxlbmd0aC0xKTw9MCkpe3ZhciBlLHI9dFswXSxuPXRbZV07aWYoQnIocixuKSl7aS5saW5lU3RhcnQoKTtmb3IodmFyIHM9MDtzPGU7KytzKWkucG9pbnQoKHI9dFtzXSlbMF0sclsxXSk7aS5saW5lRW5kKCl9ZWxzZXt2YXIgbD1uZXcgWnIocix0LG51bGwsITApLGM9bmV3IFpyKHIsbnVsbCxsLCExKTtsLm89YyxhLnB1c2gobCksby5wdXNoKGMpLGw9bmV3IFpyKG4sdCxudWxsLCExKSxjPW5ldyBacihuLG51bGwsbCwhMCksbC5vPWMsYS5wdXNoKGwpLG8ucHVzaChjKX19fSksby5zb3J0KGUpLFhyKGEpLFhyKG8pLGEubGVuZ3RoKXtmb3IodmFyIHM9MCxsPXIsYz1vLmxlbmd0aDtzPGM7KytzKW9bc10uZT1sPSFsO2Zvcih2YXIgdSxoLGY9YVswXTs7KXtmb3IodmFyIHA9ZixkPSEwO3AudjspaWYoKHA9cC5uKT09PWYpcmV0dXJuO3U9cC56LGkubGluZVN0YXJ0KCk7ZG97aWYocC52PXAuby52PSEwLHAuZSl7aWYoZClmb3Iocz0wLGM9dS5sZW5ndGg7czxjOysrcylpLnBvaW50KChoPXVbc10pWzBdLGhbMV0pO2Vsc2UgbihwLngscC5uLngsMSxpKTtwPXAubn1lbHNle2lmKGQpZm9yKHM9KHU9cC5wLnopLmxlbmd0aC0xO3M+PTA7LS1zKWkucG9pbnQoKGg9dVtzXSlbMF0saFsxXSk7ZWxzZSBuKHAueCxwLnAueCwtMSxpKTtwPXAucH11PShwPXAubykueixkPSFkfXdoaWxlKCFwLnYpO2kubGluZUVuZCgpfX19ZnVuY3Rpb24gWHIodCl7aWYoZT10Lmxlbmd0aCl7Zm9yKHZhciBlLHIsbj0wLGk9dFswXTsrK248ZTspaS5uPXI9dFtuXSxyLnA9aSxpPXI7aS5uPXI9dFswXSxyLnA9aX19ZnVuY3Rpb24gWnIodCxlLHIsbil7dGhpcy54PXQsdGhpcy56PWUsdGhpcy5vPXIsdGhpcy5lPW4sdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH1mdW5jdGlvbiAkcihlLHIsbixpKXtyZXR1cm4gZnVuY3Rpb24oYSxvKXt2YXIgcyxsPXIobyksYz1hLmludmVydChpWzBdLGlbMV0pLHU9e3BvaW50OmgsbGluZVN0YXJ0OnAsbGluZUVuZDpkLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3UucG9pbnQ9Yix1LmxpbmVTdGFydD1fLHUubGluZUVuZD13LHM9W10sZz1bXX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3UucG9pbnQ9aCx1LmxpbmVTdGFydD1wLHUubGluZUVuZD1kLHM9dC5tZXJnZShzKTt2YXIgZT1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0sbj10WzFdLGk9W01hdGguc2luKHIpLC1NYXRoLmNvcyhyKSwwXSxhPTAsbz0wO0VyLnJlc2V0KCk7Zm9yKHZhciBzPTAsbD1lLmxlbmd0aDtzPGw7KytzKXt2YXIgYz1lW3NdLHU9Yy5sZW5ndGg7aWYodSlmb3IodmFyIGg9Y1swXSxmPWhbMF0scD1oWzFdLzIrVHQvNCxkPU1hdGguc2luKHApLGc9TWF0aC5jb3MocCksdj0xOzspe3Y9PT11JiYodj0wKTt2YXIgbT0odD1jW3ZdKVswXSx5PXRbMV0vMitUdC80LHg9TWF0aC5zaW4oeSksYj1NYXRoLmNvcyh5KSxfPW0tZix3PV8+PTA/MTotMSxrPXcqXyxBPWs+VHQsVD1kKng7aWYoRXIuYWRkKE1hdGguYXRhbjIoVCp3Kk1hdGguc2luKGspLGcqYitUKk1hdGguY29zKGspKSksYSs9QT9fK3cqTXQ6XyxBXmY+PXJebT49cil7dmFyIE09SXIoenIoaCksenIodCkpO1JyKE0pO3ZhciBTPUlyKGksTSk7UnIoUyk7dmFyIEU9KEFeXz49MD8tMToxKSpEdChTWzJdKTsobj5FfHxuPT09RSYmKE1bMF18fE1bMV0pKSYmKG8rPUFeXz49MD8xOi0xKX1pZighdisrKWJyZWFrO2Y9bSxkPXgsZz1iLGg9dH19cmV0dXJuKGE8LWt0fHxhPGt0JiZFcjwta3QpXjEmb30oYyxnKTtzLmxlbmd0aD8oeHx8KG8ucG9seWdvblN0YXJ0KCkseD0hMCksV3IocyxRcixlLG4sbykpOmUmJih4fHwoby5wb2x5Z29uU3RhcnQoKSx4PSEwKSxvLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsbyksby5saW5lRW5kKCkpLHgmJihvLnBvbHlnb25FbmQoKSx4PSExKSxzPWc9bnVsbH0sc3BoZXJlOmZ1bmN0aW9uKCl7by5wb2x5Z29uU3RhcnQoKSxvLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsbyksby5saW5lRW5kKCksby5wb2x5Z29uRW5kKCl9fTtmdW5jdGlvbiBoKHQscil7dmFyIG49YSh0LHIpO2UodD1uWzBdLHI9blsxXSkmJm8ucG9pbnQodCxyKX1mdW5jdGlvbiBmKHQsZSl7dmFyIHI9YSh0LGUpO2wucG9pbnQoclswXSxyWzFdKX1mdW5jdGlvbiBwKCl7dS5wb2ludD1mLGwubGluZVN0YXJ0KCl9ZnVuY3Rpb24gZCgpe3UucG9pbnQ9aCxsLmxpbmVFbmQoKX12YXIgZyx2LG09S3IoKSx5PXIobSkseD0hMTtmdW5jdGlvbiBiKHQsZSl7di5wdXNoKFt0LGVdKTt2YXIgcj1hKHQsZSk7eS5wb2ludChyWzBdLHJbMV0pfWZ1bmN0aW9uIF8oKXt5LmxpbmVTdGFydCgpLHY9W119ZnVuY3Rpb24gdygpe2IodlswXVswXSx2WzBdWzFdKSx5LmxpbmVFbmQoKTt2YXIgdCxlPXkuY2xlYW4oKSxyPW0uYnVmZmVyKCksbj1yLmxlbmd0aDtpZih2LnBvcCgpLGcucHVzaCh2KSx2PW51bGwsbilpZigxJmUpe3ZhciBpLGE9LTE7aWYoKG49KHQ9clswXSkubGVuZ3RoLTEpPjApe2Zvcih4fHwoby5wb2x5Z29uU3RhcnQoKSx4PSEwKSxvLmxpbmVTdGFydCgpOysrYTxuOylvLnBvaW50KChpPXRbYV0pWzBdLGlbMV0pO28ubGluZUVuZCgpfX1lbHNlIG4+MSYmMiZlJiZyLnB1c2goci5wb3AoKS5jb25jYXQoci5zaGlmdCgpKSkscy5wdXNoKHIuZmlsdGVyKEpyKSl9cmV0dXJuIHV9fWZ1bmN0aW9uIEpyKHQpe3JldHVybiB0Lmxlbmd0aD4xfWZ1bmN0aW9uIEtyKCl7dmFyIHQsZT1bXTtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5wdXNoKHQ9W10pfSxwb2ludDpmdW5jdGlvbihlLHIpe3QucHVzaChbZSxyXSl9LGxpbmVFbmQ6UCxidWZmZXI6ZnVuY3Rpb24oKXt2YXIgcj1lO3JldHVybiBlPVtdLHQ9bnVsbCxyfSxyZWpvaW46ZnVuY3Rpb24oKXtlLmxlbmd0aD4xJiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5zaGlmdCgpKSl9fX1mdW5jdGlvbiBRcih0LGUpe3JldHVybigodD10LngpWzBdPDA/dFsxXS1FdC1rdDpFdC10WzFdKS0oKGU9ZS54KVswXTwwP2VbMV0tRXQta3Q6RXQtZVsxXSl9dmFyIHRuPSRyKFlyLGZ1bmN0aW9uKHQpe3ZhciBlLHI9TmFOLG49TmFOLGk9TmFOO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpLGU9MX0scG9pbnQ6ZnVuY3Rpb24oYSxvKXt2YXIgcz1hPjA/VHQ6LVR0LGw9eShhLXIpO3kobC1UdCk8a3Q/KHQucG9pbnQocixuPShuK28pLzI+MD9FdDotRXQpLHQucG9pbnQoaSxuKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQocyxuKSx0LnBvaW50KGEsbiksZT0wKTppIT09cyYmbD49VHQmJih5KHItaSk8a3QmJihyLT1pKmt0KSx5KGEtcyk8a3QmJihhLT1zKmt0KSxuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbz1NYXRoLnNpbih0LXIpO3JldHVybiB5KG8pPmt0P01hdGguYXRhbigoTWF0aC5zaW4oZSkqKGE9TWF0aC5jb3MobikpKk1hdGguc2luKHIpLU1hdGguc2luKG4pKihpPU1hdGguY29zKGUpKSpNYXRoLnNpbih0KSkvKGkqYSpvKSk6KGUrbikvMn0ocixuLGEsbyksdC5wb2ludChpLG4pLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludChzLG4pLGU9MCksdC5wb2ludChyPWEsbj1vKSxpPXN9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0LmxpbmVFbmQoKSxyPW49TmFOfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiAyLWV9fX0sZnVuY3Rpb24odCxlLHIsbil7dmFyIGk7aWYobnVsbD09dClpPXIqRXQsbi5wb2ludCgtVHQsaSksbi5wb2ludCgwLGkpLG4ucG9pbnQoVHQsaSksbi5wb2ludChUdCwwKSxuLnBvaW50KFR0LC1pKSxuLnBvaW50KDAsLWkpLG4ucG9pbnQoLVR0LC1pKSxuLnBvaW50KC1UdCwwKSxuLnBvaW50KC1UdCxpKTtlbHNlIGlmKHkodFswXS1lWzBdKT5rdCl7dmFyIGE9dFswXTxlWzBdP1R0Oi1UdDtpPXIqYS8yLG4ucG9pbnQoLWEsaSksbi5wb2ludCgwLGkpLG4ucG9pbnQoYSxpKX1lbHNlIG4ucG9pbnQoZVswXSxlWzFdKX0sWy1UdCwtVHQvMl0pO2Z1bmN0aW9uIGVuKHQsZSxyLG4pe3JldHVybiBmdW5jdGlvbihpKXt2YXIgYSxvPWkuYSxzPWkuYixsPW8ueCxjPW8ueSx1PTAsaD0xLGY9cy54LWwscD1zLnktYztpZihhPXQtbCxmfHwhKGE+MCkpe2lmKGEvPWYsZjwwKXtpZihhPHUpcmV0dXJuO2E8aCYmKGg9YSl9ZWxzZSBpZihmPjApe2lmKGE+aClyZXR1cm47YT51JiYodT1hKX1pZihhPXItbCxmfHwhKGE8MCkpe2lmKGEvPWYsZjwwKXtpZihhPmgpcmV0dXJuO2E+dSYmKHU9YSl9ZWxzZSBpZihmPjApe2lmKGE8dSlyZXR1cm47YTxoJiYoaD1hKX1pZihhPWUtYyxwfHwhKGE+MCkpe2lmKGEvPXAscDwwKXtpZihhPHUpcmV0dXJuO2E8aCYmKGg9YSl9ZWxzZSBpZihwPjApe2lmKGE+aClyZXR1cm47YT51JiYodT1hKX1pZihhPW4tYyxwfHwhKGE8MCkpe2lmKGEvPXAscDwwKXtpZihhPmgpcmV0dXJuO2E+dSYmKHU9YSl9ZWxzZSBpZihwPjApe2lmKGE8dSlyZXR1cm47YTxoJiYoaD1hKX1yZXR1cm4gdT4wJiYoaS5hPXt4OmwrdSpmLHk6Yyt1KnB9KSxoPDEmJihpLmI9e3g6bCtoKmYseTpjK2gqcH0pLGl9fX19fX12YXIgcm49MWU5O2Z1bmN0aW9uIG5uKGUscixuLGkpe3JldHVybiBmdW5jdGlvbihsKXt2YXIgYyx1LGgsZixwLGQsZyx2LG0seSx4LGI9bCxfPUtyKCksdz1lbihlLHIsbixpKSxrPXtwb2ludDpNLGxpbmVTdGFydDpmdW5jdGlvbigpe2sucG9pbnQ9Uyx1JiZ1LnB1c2goaD1bXSk7eT0hMCxtPSExLGc9dj1OYU59LGxpbmVFbmQ6ZnVuY3Rpb24oKXtjJiYoUyhmLHApLGQmJm0mJl8ucmVqb2luKCksYy5wdXNoKF8uYnVmZmVyKCkpKTtrLnBvaW50PU0sbSYmbC5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2w9XyxjPVtdLHU9W10seD0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe2w9YixjPXQubWVyZ2UoYyk7dmFyIHI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj11Lmxlbmd0aCxuPXRbMV0saT0wO2k8cjsrK2kpZm9yKHZhciBhLG89MSxzPXVbaV0sbD1zLmxlbmd0aCxjPXNbMF07bzxsOysrbylhPXNbb10sY1sxXTw9bj9hWzFdPm4mJk90KGMsYSx0KT4wJiYrK2U6YVsxXTw9biYmT3QoYyxhLHQpPDAmJi0tZSxjPWE7cmV0dXJuIDAhPT1lfShbZSxpXSksbj14JiZyLGE9Yy5sZW5ndGg7KG58fGEpJiYobC5wb2x5Z29uU3RhcnQoKSxuJiYobC5saW5lU3RhcnQoKSxBKG51bGwsbnVsbCwxLGwpLGwubGluZUVuZCgpKSxhJiZXcihjLG8scixBLGwpLGwucG9seWdvbkVuZCgpKSxjPXU9aD1udWxsfX07ZnVuY3Rpb24gQSh0LG8sbCxjKXt2YXIgdT0wLGg9MDtpZihudWxsPT10fHwodT1hKHQsbCkpIT09KGg9YShvLGwpKXx8cyh0LG8pPDBebD4wKWRve2MucG9pbnQoMD09PXV8fDM9PT11P2U6bix1PjE/aTpyKX13aGlsZSgodT0odStsKzQpJTQpIT09aCk7ZWxzZSBjLnBvaW50KG9bMF0sb1sxXSl9ZnVuY3Rpb24gVCh0LGEpe3JldHVybiBlPD10JiZ0PD1uJiZyPD1hJiZhPD1pfWZ1bmN0aW9uIE0odCxlKXtUKHQsZSkmJmwucG9pbnQodCxlKX1mdW5jdGlvbiBTKHQsZSl7dmFyIHI9VCh0PU1hdGgubWF4KC1ybixNYXRoLm1pbihybix0KSksZT1NYXRoLm1heCgtcm4sTWF0aC5taW4ocm4sZSkpKTtpZih1JiZoLnB1c2goW3QsZV0pLHkpZj10LHA9ZSxkPXIseT0hMSxyJiYobC5saW5lU3RhcnQoKSxsLnBvaW50KHQsZSkpO2Vsc2UgaWYociYmbSlsLnBvaW50KHQsZSk7ZWxzZXt2YXIgbj17YTp7eDpnLHk6dn0sYjp7eDp0LHk6ZX19O3cobik/KG18fChsLmxpbmVTdGFydCgpLGwucG9pbnQobi5hLngsbi5hLnkpKSxsLnBvaW50KG4uYi54LG4uYi55KSxyfHxsLmxpbmVFbmQoKSx4PSExKTpyJiYobC5saW5lU3RhcnQoKSxsLnBvaW50KHQsZSkseD0hMSl9Zz10LHY9ZSxtPXJ9cmV0dXJuIGt9O2Z1bmN0aW9uIGEodCxpKXtyZXR1cm4geSh0WzBdLWUpPGt0P2k+MD8wOjM6eSh0WzBdLW4pPGt0P2k+MD8yOjE6eSh0WzFdLXIpPGt0P2k+MD8xOjA6aT4wPzM6Mn1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHModC54LGUueCl9ZnVuY3Rpb24gcyh0LGUpe3ZhciByPWEodCwxKSxuPWEoZSwxKTtyZXR1cm4gciE9PW4/ci1uOjA9PT1yP2VbMV0tdFsxXToxPT09cj90WzBdLWVbMF06Mj09PXI/dFsxXS1lWzFdOmVbMF0tdFswXX19ZnVuY3Rpb24gYW4odCl7dmFyIGU9MCxyPVR0LzMsbj1Dbih0KSxpPW4oZSxyKTtyZXR1cm4gaS5wYXJhbGxlbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bihlPXRbMF0qVHQvMTgwLHI9dFsxXSpUdC8xODApOltlL1R0KjE4MCxyL1R0KjE4MF19LGl9ZnVuY3Rpb24gb24odCxlKXt2YXIgcj1NYXRoLnNpbih0KSxuPShyK01hdGguc2luKGUpKS8yLGk9MStyKigyKm4tciksYT1NYXRoLnNxcnQoaSkvbjtmdW5jdGlvbiBvKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KGktMipuKk1hdGguc2luKGUpKS9uO3JldHVybltyKk1hdGguc2luKHQqPW4pLGEtcipNYXRoLmNvcyh0KV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9YS1lO3JldHVybltNYXRoLmF0YW4yKHQscikvbixEdCgoaS0odCp0K3IqcikqbipuKS8oMipuKSldfSxvfXQuZ2VvLmNsaXBFeHRlbnQ9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbixpLGEsbz17c3RyZWFtOmZ1bmN0aW9uKHQpe3JldHVybiBpJiYoaS52YWxpZD0hMSksKGk9YSh0KSkudmFsaWQ9ITAsaX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW5uKHQ9K3NbMF1bMF0sZT0rc1swXVsxXSxyPStzWzFdWzBdLG49K3NbMV1bMV0pLGkmJihpLnZhbGlkPSExLGk9bnVsbCksbyk6W1t0LGVdLFtyLG5dXX19O3JldHVybiBvLmV4dGVudChbWzAsMF0sWzk2MCw1MDBdXSl9LCh0Lmdlby5jb25pY0VxdWFsQXJlYT1mdW5jdGlvbigpe3JldHVybiBhbihvbil9KS5yYXc9b24sdC5nZW8uYWxiZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFs5NiwwXSkuY2VudGVyKFstLjYsMzguN10pLnBhcmFsbGVscyhbMjkuNSw0NS41XSkuc2NhbGUoMTA3MCl9LHQuZ2VvLmFsYmVyc1VzYT1mdW5jdGlvbigpe3ZhciBlLHIsbixpLGE9dC5nZW8uYWxiZXJzKCksbz10Lmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbMTU0LDBdKS5jZW50ZXIoWy0yLDU4LjVdKS5wYXJhbGxlbHMoWzU1LDY1XSkscz10Lmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxsPXtwb2ludDpmdW5jdGlvbih0LHIpe2U9W3Qscl19fTtmdW5jdGlvbiBjKHQpe3ZhciBhPXRbMF0sbz10WzFdO3JldHVybiBlPW51bGwscihhLG8pLGV8fChuKGEsbyksZSl8fGkoYSxvKSxlfXJldHVybiBjLmludmVydD1mdW5jdGlvbih0KXt2YXIgZT1hLnNjYWxlKCkscj1hLnRyYW5zbGF0ZSgpLG49KHRbMF0tclswXSkvZSxpPSh0WzFdLXJbMV0pL2U7cmV0dXJuKGk+PS4xMiYmaTwuMjM0JiZuPj0tLjQyNSYmbjwtLjIxND9vOmk+PS4xNjYmJmk8LjIzNCYmbj49LS4yMTQmJm48LS4xMTU/czphKS5pbnZlcnQodCl9LGMuc3RyZWFtPWZ1bmN0aW9uKHQpe3ZhciBlPWEuc3RyZWFtKHQpLHI9by5zdHJlYW0odCksbj1zLnN0cmVhbSh0KTtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24odCxpKXtlLnBvaW50KHQsaSksci5wb2ludCh0LGkpLG4ucG9pbnQodCxpKX0sc3BoZXJlOmZ1bmN0aW9uKCl7ZS5zcGhlcmUoKSxyLnNwaGVyZSgpLG4uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2UubGluZVN0YXJ0KCksci5saW5lU3RhcnQoKSxuLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7ZS5saW5lRW5kKCksci5saW5lRW5kKCksbi5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2UucG9seWdvblN0YXJ0KCksci5wb2x5Z29uU3RhcnQoKSxuLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZS5wb2x5Z29uRW5kKCksci5wb2x5Z29uRW5kKCksbi5wb2x5Z29uRW5kKCl9fX0sYy5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEucHJlY2lzaW9uKHQpLG8ucHJlY2lzaW9uKHQpLHMucHJlY2lzaW9uKHQpLGMpOmEucHJlY2lzaW9uKCl9LGMuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEuc2NhbGUodCksby5zY2FsZSguMzUqdCkscy5zY2FsZSh0KSxjLnRyYW5zbGF0ZShhLnRyYW5zbGF0ZSgpKSk6YS5zY2FsZSgpfSxjLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYS50cmFuc2xhdGUoKTt2YXIgZT1hLnNjYWxlKCksdT0rdFswXSxoPSt0WzFdO3JldHVybiByPWEudHJhbnNsYXRlKHQpLmNsaXBFeHRlbnQoW1t1LS40NTUqZSxoLS4yMzgqZV0sW3UrLjQ1NSplLGgrLjIzOCplXV0pLnN0cmVhbShsKS5wb2ludCxuPW8udHJhbnNsYXRlKFt1LS4zMDcqZSxoKy4yMDEqZV0pLmNsaXBFeHRlbnQoW1t1LS40MjUqZStrdCxoKy4xMiplK2t0XSxbdS0uMjE0KmUta3QsaCsuMjM0KmUta3RdXSkuc3RyZWFtKGwpLnBvaW50LGk9cy50cmFuc2xhdGUoW3UtLjIwNSplLGgrLjIxMiplXSkuY2xpcEV4dGVudChbW3UtLjIxNCplK2t0LGgrLjE2NiplK2t0XSxbdS0uMTE1KmUta3QsaCsuMjM0KmUta3RdXSkuc3RyZWFtKGwpLnBvaW50LGN9LGMuc2NhbGUoMTA3MCl9O3ZhciBzbixsbixjbix1bixobixmbixwbj17cG9pbnQ6UCxsaW5lU3RhcnQ6UCxsaW5lRW5kOlAscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bG49MCxwbi5saW5lU3RhcnQ9ZG59LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtwbi5saW5lU3RhcnQ9cG4ubGluZUVuZD1wbi5wb2ludD1QLHNuKz15KGxuLzIpfX07ZnVuY3Rpb24gZG4oKXt2YXIgdCxlLHIsbjtmdW5jdGlvbiBpKHQsZSl7bG4rPW4qdC1yKmUscj10LG49ZX1wbi5wb2ludD1mdW5jdGlvbihhLG8pe3BuLnBvaW50PWksdD1yPWEsZT1uPW99LHBuLmxpbmVFbmQ9ZnVuY3Rpb24oKXtpKHQsZSl9fXZhciBnbj17cG9pbnQ6ZnVuY3Rpb24odCxlKXt0PGNuJiYoY249dCk7dD5obiYmKGhuPXQpO2U8dW4mJih1bj1lKTtlPmZuJiYoZm49ZSl9LGxpbmVTdGFydDpQLGxpbmVFbmQ6UCxwb2x5Z29uU3RhcnQ6UCxwb2x5Z29uRW5kOlB9O2Z1bmN0aW9uIHZuKCl7dmFyIHQ9bW4oNC41KSxlPVtdLHI9e3BvaW50Om4sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ci5wb2ludD1pfSxsaW5lRW5kOm8scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7ci5saW5lRW5kPXN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtyLmxpbmVFbmQ9byxyLnBvaW50PW59LHBvaW50UmFkaXVzOmZ1bmN0aW9uKGUpe3JldHVybiB0PW1uKGUpLHJ9LHJlc3VsdDpmdW5jdGlvbigpe2lmKGUubGVuZ3RoKXt2YXIgdD1lLmpvaW4oXCJcIik7cmV0dXJuIGU9W10sdH19fTtmdW5jdGlvbiBuKHIsbil7ZS5wdXNoKFwiTVwiLHIsXCIsXCIsbix0KX1mdW5jdGlvbiBpKHQsbil7ZS5wdXNoKFwiTVwiLHQsXCIsXCIsbiksci5wb2ludD1hfWZ1bmN0aW9uIGEodCxyKXtlLnB1c2goXCJMXCIsdCxcIixcIixyKX1mdW5jdGlvbiBvKCl7ci5wb2ludD1ufWZ1bmN0aW9uIHMoKXtlLnB1c2goXCJaXCIpfXJldHVybiByfWZ1bmN0aW9uIG1uKHQpe3JldHVyblwibTAsXCIrdCtcImFcIit0K1wiLFwiK3QrXCIgMCAxLDEgMCxcIistMip0K1wiYVwiK3QrXCIsXCIrdCtcIiAwIDEsMSAwLFwiKzIqdCtcInpcIn12YXIgeW4seG49e3BvaW50OmJuLGxpbmVTdGFydDpfbixsaW5lRW5kOnduLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3huLmxpbmVTdGFydD1rbn0scG9seWdvbkVuZDpmdW5jdGlvbigpe3huLnBvaW50PWJuLHhuLmxpbmVTdGFydD1fbix4bi5saW5lRW5kPXdufX07ZnVuY3Rpb24gYm4odCxlKXt4cis9dCxicis9ZSwrK19yfWZ1bmN0aW9uIF9uKCl7dmFyIHQsZTtmdW5jdGlvbiByKHIsbil7dmFyIGk9ci10LGE9bi1lLG89TWF0aC5zcXJ0KGkqaSthKmEpO3dyKz1vKih0K3IpLzIsa3IrPW8qKGUrbikvMixBcis9byxibih0PXIsZT1uKX14bi5wb2ludD1mdW5jdGlvbihuLGkpe3huLnBvaW50PXIsYm4odD1uLGU9aSl9fWZ1bmN0aW9uIHduKCl7eG4ucG9pbnQ9Ym59ZnVuY3Rpb24ga24oKXt2YXIgdCxlLHIsbjtmdW5jdGlvbiBpKHQsZSl7dmFyIGk9dC1yLGE9ZS1uLG89TWF0aC5zcXJ0KGkqaSthKmEpO3dyKz1vKihyK3QpLzIsa3IrPW8qKG4rZSkvMixBcis9byxUcis9KG89bip0LXIqZSkqKHIrdCksTXIrPW8qKG4rZSksU3IrPTMqbyxibihyPXQsbj1lKX14bi5wb2ludD1mdW5jdGlvbihhLG8pe3huLnBvaW50PWksYm4odD1yPWEsZT1uPW8pfSx4bi5saW5lRW5kPWZ1bmN0aW9uKCl7aSh0LGUpfX1mdW5jdGlvbiBBbih0KXt2YXIgZT00LjUscj17cG9pbnQ6bixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtyLnBvaW50PWl9LGxpbmVFbmQ6byxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtyLmxpbmVFbmQ9c30scG9seWdvbkVuZDpmdW5jdGlvbigpe3IubGluZUVuZD1vLHIucG9pbnQ9bn0scG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIGU9dCxyfSxyZXN1bHQ6UH07ZnVuY3Rpb24gbihyLG4pe3QubW92ZVRvKHIrZSxuKSx0LmFyYyhyLG4sZSwwLE10KX1mdW5jdGlvbiBpKGUsbil7dC5tb3ZlVG8oZSxuKSxyLnBvaW50PWF9ZnVuY3Rpb24gYShlLHIpe3QubGluZVRvKGUscil9ZnVuY3Rpb24gbygpe3IucG9pbnQ9bn1mdW5jdGlvbiBzKCl7dC5jbG9zZVBhdGgoKX1yZXR1cm4gcn1mdW5jdGlvbiBUbih0KXt2YXIgZT0uNSxyPU1hdGguY29zKDMwKkN0KSxuPTE2O2Z1bmN0aW9uIGkoZSl7cmV0dXJuKG4/ZnVuY3Rpb24oZSl7dmFyIHIsaSxvLHMsbCxjLHUsaCxmLHAsZCxnLHY9e3BvaW50Om0sbGluZVN0YXJ0OnksbGluZUVuZDpiLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2UucG9seWdvblN0YXJ0KCksdi5saW5lU3RhcnQ9X30scG9seWdvbkVuZDpmdW5jdGlvbigpe2UucG9seWdvbkVuZCgpLHYubGluZVN0YXJ0PXl9fTtmdW5jdGlvbiBtKHIsbil7cj10KHIsbiksZS5wb2ludChyWzBdLHJbMV0pfWZ1bmN0aW9uIHkoKXtoPU5hTix2LnBvaW50PXgsZS5saW5lU3RhcnQoKX1mdW5jdGlvbiB4KHIsaSl7dmFyIG89enIoW3IsaV0pLHM9dChyLGkpO2EoaCxmLHUscCxkLGcsaD1zWzBdLGY9c1sxXSx1PXIscD1vWzBdLGQ9b1sxXSxnPW9bMl0sbixlKSxlLnBvaW50KGgsZil9ZnVuY3Rpb24gYigpe3YucG9pbnQ9bSxlLmxpbmVFbmQoKX1mdW5jdGlvbiBfKCl7eSgpLHYucG9pbnQ9dyx2LmxpbmVFbmQ9a31mdW5jdGlvbiB3KHQsZSl7eChyPXQsZSksaT1oLG89ZixzPXAsbD1kLGM9Zyx2LnBvaW50PXh9ZnVuY3Rpb24gaygpe2EoaCxmLHUscCxkLGcsaSxvLHIscyxsLGMsbixlKSx2LmxpbmVFbmQ9YixiKCl9cmV0dXJuIHZ9OmZ1bmN0aW9uKGUpe3JldHVybiBTbihlLGZ1bmN0aW9uKHIsbil7cj10KHIsbiksZS5wb2ludChyWzBdLHJbMV0pfSl9KShlKX1mdW5jdGlvbiBhKG4saSxvLHMsbCxjLHUsaCxmLHAsZCxnLHYsbSl7dmFyIHg9dS1uLGI9aC1pLF89eCp4K2IqYjtpZihfPjQqZSYmdi0tKXt2YXIgdz1zK3Asaz1sK2QsQT1jK2csVD1NYXRoLnNxcnQodyp3K2sqaytBKkEpLE09TWF0aC5hc2luKEEvPVQpLFM9eSh5KEEpLTEpPGt0fHx5KG8tZik8a3Q/KG8rZikvMjpNYXRoLmF0YW4yKGssdyksRT10KFMsTSksQz1FWzBdLEw9RVsxXSx6PUMtbixPPUwtaSxJPWIqei14Kk87KEkqSS9fPmV8fHkoKHgqeitiKk8pL18tLjUpPi4zfHxzKnArbCpkK2MqZzxyKSYmKGEobixpLG8scyxsLGMsQyxMLFMsdy89VCxrLz1ULEEsdixtKSxtLnBvaW50KEMsTCksYShDLEwsUyx3LGssQSx1LGgsZixwLGQsZyx2LG0pKX19cmV0dXJuIGkucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPShlPXQqdCk+MCYmMTYsaSk6TWF0aC5zcXJ0KGUpfSxpfWZ1bmN0aW9uIE1uKHQpe3RoaXMuc3RyZWFtPXR9ZnVuY3Rpb24gU24odCxlKXtyZXR1cm57cG9pbnQ6ZSxzcGhlcmU6ZnVuY3Rpb24oKXt0LnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3QucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25FbmQoKX19fWZ1bmN0aW9uIEVuKHQpe3JldHVybiBDbihmdW5jdGlvbigpe3JldHVybiB0fSkoKX1mdW5jdGlvbiBDbihlKXt2YXIgcixuLGksYSxvLHMsbD1UbihmdW5jdGlvbih0LGUpe3JldHVyblsodD1yKHQsZSkpWzBdKmMrYSxvLXRbMV0qY119KSxjPTE1MCx1PTQ4MCxoPTI1MCxmPTAscD0wLGQ9MCxnPTAsdj0wLG09dG4seD16LGI9bnVsbCxfPW51bGw7ZnVuY3Rpb24gdyh0KXtyZXR1cm5bKHQ9aSh0WzBdKkN0LHRbMV0qQ3QpKVswXSpjK2Esby10WzFdKmNdfWZ1bmN0aW9uIGsodCl7cmV0dXJuKHQ9aS5pbnZlcnQoKHRbMF0tYSkvYywoby10WzFdKS9jKSkmJlt0WzBdKkx0LHRbMV0qTHRdfWZ1bmN0aW9uIEEoKXtpPUdyKG49SW4oZCxnLHYpLHIpO3ZhciB0PXIoZixwKTtyZXR1cm4gYT11LXRbMF0qYyxvPWgrdFsxXSpjLFQoKX1mdW5jdGlvbiBUKCl7cmV0dXJuIHMmJihzLnZhbGlkPSExLHM9bnVsbCksd31yZXR1cm4gdy5zdHJlYW09ZnVuY3Rpb24odCl7cmV0dXJuIHMmJihzLnZhbGlkPSExKSwocz1MbihtKG4sbCh4KHQpKSkpKS52YWxpZD0hMCxzfSx3LmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1udWxsPT10PyhiPXQsdG4pOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguY29zKHQpLHI9ZT4wLG49eShlKT5rdDtyZXR1cm4gJHIoaSxmdW5jdGlvbih0KXt2YXIgZSxzLGwsYyx1O3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtjPWw9ITEsdT0xfSxwb2ludDpmdW5jdGlvbihoLGYpe3ZhciBwLGQ9W2gsZl0sZz1pKGgsZiksdj1yP2c/MDpvKGgsZik6Zz9vKGgrKGg8MD9UdDotVHQpLGYpOjA7aWYoIWUmJihjPWw9ZykmJnQubGluZVN0YXJ0KCksZyE9PWwmJihwPWEoZSxkKSwoQnIoZSxwKXx8QnIoZCxwKSkmJihkWzBdKz1rdCxkWzFdKz1rdCxnPWkoZFswXSxkWzFdKSkpLGchPT1sKXU9MCxnPyh0LmxpbmVTdGFydCgpLHA9YShkLGUpLHQucG9pbnQocFswXSxwWzFdKSk6KHA9YShlLGQpLHQucG9pbnQocFswXSxwWzFdKSx0LmxpbmVFbmQoKSksZT1wO2Vsc2UgaWYobiYmZSYmcl5nKXt2YXIgbTt2JnN8fCEobT1hKGQsZSwhMCkpfHwodT0wLHI/KHQubGluZVN0YXJ0KCksdC5wb2ludChtWzBdWzBdLG1bMF1bMV0pLHQucG9pbnQobVsxXVswXSxtWzFdWzFdKSx0LmxpbmVFbmQoKSk6KHQucG9pbnQobVsxXVswXSxtWzFdWzFdKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQobVswXVswXSxtWzBdWzFdKSkpfSFnfHxlJiZCcihlLGQpfHx0LnBvaW50KGRbMF0sZFsxXSksZT1kLGw9ZyxzPXZ9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtsJiZ0LmxpbmVFbmQoKSxlPW51bGx9LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIHV8KGMmJmwpPDwxfX19LEZuKHQsNipDdCkscj9bMCwtdF06Wy1UdCx0LVR0XSk7ZnVuY3Rpb24gaSh0LHIpe3JldHVybiBNYXRoLmNvcyh0KSpNYXRoLmNvcyhyKT5lfWZ1bmN0aW9uIGEodCxyLG4pe3ZhciBpPVsxLDAsMF0sYT1Jcih6cih0KSx6cihyKSksbz1PcihhLGEpLHM9YVswXSxsPW8tcypzO2lmKCFsKXJldHVybiFuJiZ0O3ZhciBjPWUqby9sLHU9LWUqcy9sLGg9SXIoaSxhKSxmPVByKGksYyk7RHIoZixQcihhLHUpKTt2YXIgcD1oLGQ9T3IoZixwKSxnPU9yKHAscCksdj1kKmQtZyooT3IoZixmKS0xKTtpZighKHY8MCkpe3ZhciBtPU1hdGguc3FydCh2KSx4PVByKHAsKC1kLW0pL2cpO2lmKERyKHgsZikseD1Gcih4KSwhbilyZXR1cm4geDt2YXIgYixfPXRbMF0sdz1yWzBdLGs9dFsxXSxBPXJbMV07dzxfJiYoYj1fLF89dyx3PWIpO3ZhciBUPXctXyxNPXkoVC1UdCk8a3Q7aWYoIU0mJkE8ayYmKGI9ayxrPUEsQT1iKSxNfHxUPGt0P00/aytBPjBeeFsxXTwoeSh4WzBdLV8pPGt0P2s6QSk6azw9eFsxXSYmeFsxXTw9QTpUPlR0XihfPD14WzBdJiZ4WzBdPD13KSl7dmFyIFM9UHIocCwoLWQrbSkvZyk7cmV0dXJuIERyKFMsZiksW3gsRnIoUyldfX19ZnVuY3Rpb24gbyhlLG4pe3ZhciBpPXI/dDpUdC10LGE9MDtyZXR1cm4gZTwtaT9hfD0xOmU+aSYmKGF8PTIpLG48LWk/YXw9NDpuPmkmJihhfD04KSxhfX0oKGI9K3QpKkN0KSxUKCkpOmJ9LHcuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz10LHg9dD9ubih0WzBdWzBdLHRbMF1bMV0sdFsxXVswXSx0WzFdWzFdKTp6LFQoKSk6X30sdy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdCxBKCkpOmN9LHcudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0WzBdLGg9K3RbMV0sQSgpKTpbdSxoXX0sdy5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9dFswXSUzNjAqQ3QscD10WzFdJTM2MCpDdCxBKCkpOltmKkx0LHAqTHRdfSx3LnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD10WzBdJTM2MCpDdCxnPXRbMV0lMzYwKkN0LHY9dC5sZW5ndGg+Mj90WzJdJTM2MCpDdDowLEEoKSk6W2QqTHQsZypMdCx2Kkx0XX0sdC5yZWJpbmQodyxsLFwicHJlY2lzaW9uXCIpLGZ1bmN0aW9uKCl7cmV0dXJuIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdy5pbnZlcnQ9ci5pbnZlcnQmJmssQSgpfX1mdW5jdGlvbiBMbih0KXtyZXR1cm4gU24odCxmdW5jdGlvbihlLHIpe3QucG9pbnQoZSpDdCxyKkN0KX0pfWZ1bmN0aW9uIHpuKHQsZSl7cmV0dXJuW3QsZV19ZnVuY3Rpb24gT24odCxlKXtyZXR1cm5bdD5UdD90LU10OnQ8LVR0P3QrTXQ6dCxlXX1mdW5jdGlvbiBJbih0LGUscil7cmV0dXJuIHQ/ZXx8cj9HcihQbih0KSxSbihlLHIpKTpQbih0KTplfHxyP1JuKGUscik6T259ZnVuY3Rpb24gRG4odCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7cmV0dXJuWyhlKz10KT5UdD9lLU10OmU8LVR0P2UrTXQ6ZSxyXX19ZnVuY3Rpb24gUG4odCl7dmFyIGU9RG4odCk7cmV0dXJuIGUuaW52ZXJ0PURuKC10KSxlfWZ1bmN0aW9uIFJuKHQsZSl7dmFyIHI9TWF0aC5jb3ModCksbj1NYXRoLnNpbih0KSxpPU1hdGguY29zKGUpLGE9TWF0aC5zaW4oZSk7ZnVuY3Rpb24gbyh0LGUpe3ZhciBvPU1hdGguY29zKGUpLHM9TWF0aC5jb3ModCkqbyxsPU1hdGguc2luKHQpKm8sYz1NYXRoLnNpbihlKSx1PWMqcitzKm47cmV0dXJuW01hdGguYXRhbjIobCppLXUqYSxzKnItYypuKSxEdCh1KmkrbCphKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIG89TWF0aC5jb3MoZSkscz1NYXRoLmNvcyh0KSpvLGw9TWF0aC5zaW4odCkqbyxjPU1hdGguc2luKGUpLHU9YyppLWwqYTtyZXR1cm5bTWF0aC5hdGFuMihsKmkrYyphLHMqcit1Km4pLER0KHUqci1zKm4pXX0sb31mdW5jdGlvbiBGbih0LGUpe3ZhciByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCk7cmV0dXJuIGZ1bmN0aW9uKGksYSxvLHMpe3ZhciBsPW8qZTtudWxsIT1pPyhpPUJuKHIsaSksYT1CbihyLGEpLChvPjA/aTxhOmk+YSkmJihpKz1vKk10KSk6KGk9dCtvKk10LGE9dC0uNSpsKTtmb3IodmFyIGMsdT1pO28+MD91PmE6dTxhO3UtPWwpcy5wb2ludCgoYz1GcihbciwtbipNYXRoLmNvcyh1KSwtbipNYXRoLnNpbih1KV0pKVswXSxjWzFdKX19ZnVuY3Rpb24gQm4odCxlKXt2YXIgcj16cihlKTtyWzBdLT10LFJyKHIpO3ZhciBuPUl0KC1yWzFdKTtyZXR1cm4oKC1yWzJdPDA/LW46bikrMipNYXRoLlBJLWt0KSUoMipNYXRoLlBJKX1mdW5jdGlvbiBObihlLHIsbil7dmFyIGk9dC5yYW5nZShlLHIta3QsbikuY29uY2F0KHIpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuW3QsZV19KX19ZnVuY3Rpb24gam4oZSxyLG4pe3ZhciBpPXQucmFuZ2UoZSxyLWt0LG4pLmNvbmNhdChyKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkubWFwKGZ1bmN0aW9uKGUpe3JldHVybltlLHRdfSl9fWZ1bmN0aW9uIFZuKHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiBVbih0KXtyZXR1cm4gdC50YXJnZXR9dC5nZW8ucGF0aD1mdW5jdGlvbigpe3ZhciBlLHIsbixpLGEsbz00LjU7ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZSYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG8mJmkucG9pbnRSYWRpdXMoK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxhJiZhLnZhbGlkfHwoYT1uKGkpKSx0Lmdlby5zdHJlYW0oZSxhKSksaS5yZXN1bHQoKX1mdW5jdGlvbiBsKCl7cmV0dXJuIGE9bnVsbCxzfXJldHVybiBzLmFyZWE9ZnVuY3Rpb24oZSl7cmV0dXJuIHNuPTAsdC5nZW8uc3RyZWFtKGUsbihwbikpLHNufSxzLmNlbnRyb2lkPWZ1bmN0aW9uKGUpe3JldHVybiB4cj1icj1fcj13cj1rcj1Bcj1Ucj1Ncj1Tcj0wLHQuZ2VvLnN0cmVhbShlLG4oeG4pKSxTcj9bVHIvU3IsTXIvU3JdOkFyP1t3ci9Bcixrci9Bcl06X3I/W3hyL19yLGJyL19yXTpbTmFOLE5hTl19LHMuYm91bmRzPWZ1bmN0aW9uKGUpe3JldHVybiBobj1mbj0tKGNuPXVuPTEvMCksdC5nZW8uc3RyZWFtKGUsbihnbikpLFtbY24sdW5dLFtobixmbl1dfSxzLnByb2plY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49KGU9dCk/dC5zdHJlYW18fChyPXQsaT1UbihmdW5jdGlvbih0LGUpe3JldHVybiByKFt0Kkx0LGUqTHRdKX0pLGZ1bmN0aW9uKHQpe3JldHVybiBMbihpKHQpKX0pOnosbCgpKTplO3ZhciByLGl9LHMuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT0ocj10KT9uZXcgdm46bmV3IEFuKHQpLFwiZnVuY3Rpb25cIiE9dHlwZW9mIG8mJmkucG9pbnRSYWRpdXMobyksbCgpKTpyfSxzLnBvaW50UmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDooaS5wb2ludFJhZGl1cygrdCksK3QpLHMpOm99LHMucHJvamVjdGlvbih0Lmdlby5hbGJlcnNVc2EoKSkuY29udGV4dChudWxsKX0sdC5nZW8udHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3JldHVybntzdHJlYW06ZnVuY3Rpb24oZSl7dmFyIHI9bmV3IE1uKGUpO2Zvcih2YXIgbiBpbiB0KXJbbl09dFtuXTtyZXR1cm4gcn19fSxNbi5wcm90b3R5cGU9e3BvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5zdHJlYW0ucG9pbnQodCxlKX0sc3BoZXJlOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19LHQuZ2VvLnByb2plY3Rpb249RW4sdC5nZW8ucHJvamVjdGlvbk11dGF0b3I9Q24sKHQuZ2VvLmVxdWlyZWN0YW5ndWxhcj1mdW5jdGlvbigpe3JldHVybiBFbih6bil9KS5yYXc9em4uaW52ZXJ0PXpuLHQuZ2VvLnJvdGF0aW9uPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuKGU9dChlWzBdKkN0LGVbMV0qQ3QpKVswXSo9THQsZVsxXSo9THQsZX1yZXR1cm4gdD1Jbih0WzBdJTM2MCpDdCx0WzFdKkN0LHQubGVuZ3RoPjI/dFsyXSpDdDowKSxlLmludmVydD1mdW5jdGlvbihlKXtyZXR1cm4oZT10LmludmVydChlWzBdKkN0LGVbMV0qQ3QpKVswXSo9THQsZVsxXSo9THQsZX0sZX0sT24uaW52ZXJ0PXpuLHQuZ2VvLmNpcmNsZT1mdW5jdGlvbigpe3ZhciB0LGUscj1bMCwwXSxuPTY7ZnVuY3Rpb24gaSgpe3ZhciB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHI/ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6cixuPUluKC10WzBdKkN0LC10WzFdKkN0LDApLmludmVydCxpPVtdO3JldHVybiBlKG51bGwsbnVsbCwxLHtwb2ludDpmdW5jdGlvbih0LGUpe2kucHVzaCh0PW4odCxlKSksdFswXSo9THQsdFsxXSo9THR9fSkse3R5cGU6XCJQb2x5Z29uXCIsY29vcmRpbmF0ZXM6W2ldfX1yZXR1cm4gaS5vcmlnaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxpKTpyfSxpLmFuZ2xlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPUZuKCh0PStyKSpDdCxuKkN0KSxpKTp0fSxpLnByZWNpc2lvbj1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1Gbih0KkN0LChuPStyKSpDdCksaSk6bn0saS5hbmdsZSg5MCl9LHQuZ2VvLmRpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj0oZVswXS10WzBdKSpDdCxpPXRbMV0qQ3QsYT1lWzFdKkN0LG89TWF0aC5zaW4obikscz1NYXRoLmNvcyhuKSxsPU1hdGguc2luKGkpLGM9TWF0aC5jb3MoaSksdT1NYXRoLnNpbihhKSxoPU1hdGguY29zKGEpO3JldHVybiBNYXRoLmF0YW4yKE1hdGguc3FydCgocj1oKm8pKnIrKHI9Yyp1LWwqaCpzKSpyKSxsKnUrYypoKnMpfSx0Lmdlby5ncmF0aWN1bGU9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saSxhLG8scyxsLGMsdSxoLGYscD0xMCxkPXAsZz05MCx2PTM2MCxtPTIuNTtmdW5jdGlvbiB4KCl7cmV0dXJue3R5cGU6XCJNdWx0aUxpbmVTdHJpbmdcIixjb29yZGluYXRlczpiKCl9fWZ1bmN0aW9uIGIoKXtyZXR1cm4gdC5yYW5nZShNYXRoLmNlaWwoaS9nKSpnLG4sZykubWFwKGgpLmNvbmNhdCh0LnJhbmdlKE1hdGguY2VpbChsL3YpKnYscyx2KS5tYXAoZikpLmNvbmNhdCh0LnJhbmdlKE1hdGguY2VpbChyL3ApKnAsZSxwKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHkodCVnKT5rdH0pLm1hcChjKSkuY29uY2F0KHQucmFuZ2UoTWF0aC5jZWlsKG8vZCkqZCxhLGQpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4geSh0JXYpPmt0fSkubWFwKHUpKX1yZXR1cm4geC5saW5lcz1mdW5jdGlvbigpe3JldHVybiBiKCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybnt0eXBlOlwiTGluZVN0cmluZ1wiLGNvb3JkaW5hdGVzOnR9fSl9LHgub3V0bGluZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOlwiUG9seWdvblwiLGNvb3JkaW5hdGVzOltoKGkpLmNvbmNhdChmKHMpLnNsaWNlKDEpLGgobikucmV2ZXJzZSgpLnNsaWNlKDEpLGYobCkucmV2ZXJzZSgpLnNsaWNlKDEpKV19fSx4LmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD94Lm1ham9yRXh0ZW50KHQpLm1pbm9yRXh0ZW50KHQpOngubWlub3JFeHRlbnQoKX0seC5tYWpvckV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdFswXVswXSxuPSt0WzFdWzBdLGw9K3RbMF1bMV0scz0rdFsxXVsxXSxpPm4mJih0PWksaT1uLG49dCksbD5zJiYodD1sLGw9cyxzPXQpLHgucHJlY2lzaW9uKG0pKTpbW2ksbF0sW24sc11dfSx4Lm1pbm9yRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0WzBdWzBdLGU9K3RbMV1bMF0sbz0rdFswXVsxXSxhPSt0WzFdWzFdLHI+ZSYmKHQ9cixyPWUsZT10KSxvPmEmJih0PW8sbz1hLGE9dCkseC5wcmVjaXNpb24obSkpOltbcixvXSxbZSxhXV19LHguc3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD94Lm1ham9yU3RlcCh0KS5taW5vclN0ZXAodCk6eC5taW5vclN0ZXAoKX0seC5tYWpvclN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9K3RbMF0sdj0rdFsxXSx4KTpbZyx2XX0seC5taW5vclN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9K3RbMF0sZD0rdFsxXSx4KTpbcCxkXX0seC5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09K3QsYz1ObihvLGEsOTApLHU9am4ocixlLG0pLGg9Tm4obCxzLDkwKSxmPWpuKGksbixtKSx4KTptfSx4Lm1ham9yRXh0ZW50KFtbLTE4MCwtOTAra3RdLFsxODAsOTAta3RdXSkubWlub3JFeHRlbnQoW1stMTgwLC04MC1rdF0sWzE4MCw4MCtrdF1dKX0sdC5nZW8uZ3JlYXRBcmM9ZnVuY3Rpb24oKXt2YXIgZSxyLG49Vm4saT1VbjtmdW5jdGlvbiBhKCl7cmV0dXJue3R5cGU6XCJMaW5lU3RyaW5nXCIsY29vcmRpbmF0ZXM6W2V8fG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHJ8fGkuYXBwbHkodGhpcyxhcmd1bWVudHMpXX19cmV0dXJuIGEuZGlzdGFuY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdC5nZW8uZGlzdGFuY2UoZXx8bi5hcHBseSh0aGlzLGFyZ3VtZW50cykscnx8aS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxhLnNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGU9XCJmdW5jdGlvblwiPT10eXBlb2YgdD9udWxsOnQsYSk6bn0sYS50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxyPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/bnVsbDp0LGEpOml9LGEucHJlY2lzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/YTowfSxhfSx0Lmdlby5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiByPXRbMF0qQ3Qsbj10WzFdKkN0LGk9ZVswXSpDdCxhPWVbMV0qQ3Qsbz1NYXRoLmNvcyhuKSxzPU1hdGguc2luKG4pLGw9TWF0aC5jb3MoYSksYz1NYXRoLnNpbihhKSx1PW8qTWF0aC5jb3MociksaD1vKk1hdGguc2luKHIpLGY9bCpNYXRoLmNvcyhpKSxwPWwqTWF0aC5zaW4oaSksZD0yKk1hdGguYXNpbihNYXRoLnNxcnQoUnQoYS1uKStvKmwqUnQoaS1yKSkpLGc9MS9NYXRoLnNpbihkKSwodj1kP2Z1bmN0aW9uKHQpe3ZhciBlPU1hdGguc2luKHQqPWQpKmcscj1NYXRoLnNpbihkLXQpKmcsbj1yKnUrZSpmLGk9cipoK2UqcCxhPXIqcytlKmM7cmV0dXJuW01hdGguYXRhbjIoaSxuKSpMdCxNYXRoLmF0YW4yKGEsTWF0aC5zcXJ0KG4qbitpKmkpKSpMdF19OmZ1bmN0aW9uKCl7cmV0dXJuW3IqTHQsbipMdF19KS5kaXN0YW5jZT1kLHY7dmFyIHIsbixpLGEsbyxzLGwsYyx1LGgsZixwLGQsZyx2fSx0Lmdlby5sZW5ndGg9ZnVuY3Rpb24oZSl7cmV0dXJuIHluPTAsdC5nZW8uc3RyZWFtKGUscW4pLHlufTt2YXIgcW49e3NwaGVyZTpQLHBvaW50OlAsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dmFyIHQsZSxyO2Z1bmN0aW9uIG4obixpKXt2YXIgYT1NYXRoLnNpbihpKj1DdCksbz1NYXRoLmNvcyhpKSxzPXkoKG4qPUN0KS10KSxsPU1hdGguY29zKHMpO3luKz1NYXRoLmF0YW4yKE1hdGguc3FydCgocz1vKk1hdGguc2luKHMpKSpzKyhzPXIqYS1lKm8qbCkqcyksZSphK3IqbypsKSx0PW4sZT1hLHI9b31xbi5wb2ludD1mdW5jdGlvbihpLGEpe3Q9aSpDdCxlPU1hdGguc2luKGEqPUN0KSxyPU1hdGguY29zKGEpLHFuLnBvaW50PW59LHFuLmxpbmVFbmQ9ZnVuY3Rpb24oKXtxbi5wb2ludD1xbi5saW5lRW5kPVB9fSxsaW5lRW5kOlAscG9seWdvblN0YXJ0OlAscG9seWdvbkVuZDpQfTtmdW5jdGlvbiBIbih0LGUpe2Z1bmN0aW9uIHIoZSxyKXt2YXIgbj1NYXRoLmNvcyhlKSxpPU1hdGguY29zKHIpLGE9dChuKmkpO3JldHVyblthKmkqTWF0aC5zaW4oZSksYSpNYXRoLnNpbihyKV19cmV0dXJuIHIuaW52ZXJ0PWZ1bmN0aW9uKHQscil7dmFyIG49TWF0aC5zcXJ0KHQqdCtyKnIpLGk9ZShuKSxhPU1hdGguc2luKGkpLG89TWF0aC5jb3MoaSk7cmV0dXJuW01hdGguYXRhbjIodCphLG4qbyksTWF0aC5hc2luKG4mJnIqYS9uKV19LHJ9dmFyIEduPUhuKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoMi8oMSt0KSl9LGZ1bmN0aW9uKHQpe3JldHVybiAyKk1hdGguYXNpbih0LzIpfSk7KHQuZ2VvLmF6aW11dGhhbEVxdWFsQXJlYT1mdW5jdGlvbigpe3JldHVybiBFbihHbil9KS5yYXc9R247dmFyIFluPUhuKGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguYWNvcyh0KTtyZXR1cm4gZSYmZS9NYXRoLnNpbihlKX0seik7ZnVuY3Rpb24gV24odCxlKXt2YXIgcj1NYXRoLmNvcyh0KSxuPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnRhbihUdC80K3QvMil9LGk9dD09PWU/TWF0aC5zaW4odCk6TWF0aC5sb2coci9NYXRoLmNvcyhlKSkvTWF0aC5sb2cobihlKS9uKHQpKSxhPXIqTWF0aC5wb3cobih0KSxpKS9pO2lmKCFpKXJldHVybiAkbjtmdW5jdGlvbiBvKHQsZSl7YT4wP2U8LUV0K2t0JiYoZT0tRXQra3QpOmU+RXQta3QmJihlPUV0LWt0KTt2YXIgcj1hL01hdGgucG93KG4oZSksaSk7cmV0dXJuW3IqTWF0aC5zaW4oaSp0KSxhLXIqTWF0aC5jb3MoaSp0KV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9YS1lLG49enQoaSkqTWF0aC5zcXJ0KHQqdCtyKnIpO3JldHVybltNYXRoLmF0YW4yKHQscikvaSwyKk1hdGguYXRhbihNYXRoLnBvdyhhL24sMS9pKSktRXRdfSxvfWZ1bmN0aW9uIFhuKHQsZSl7dmFyIHI9TWF0aC5jb3ModCksbj10PT09ZT9NYXRoLnNpbih0KTooci1NYXRoLmNvcyhlKSkvKGUtdCksaT1yL24rdDtpZih5KG4pPGt0KXJldHVybiB6bjtmdW5jdGlvbiBhKHQsZSl7dmFyIHI9aS1lO3JldHVybltyKk1hdGguc2luKG4qdCksaS1yKk1hdGguY29zKG4qdCldfXJldHVybiBhLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWktZTtyZXR1cm5bTWF0aC5hdGFuMih0LHIpL24saS16dChuKSpNYXRoLnNxcnQodCp0K3IqcildfSxhfSh0Lmdlby5hemltdXRoYWxFcXVpZGlzdGFudD1mdW5jdGlvbigpe3JldHVybiBFbihZbil9KS5yYXc9WW4sKHQuZ2VvLmNvbmljQ29uZm9ybWFsPWZ1bmN0aW9uKCl7cmV0dXJuIGFuKFduKX0pLnJhdz1XbiwodC5nZW8uY29uaWNFcXVpZGlzdGFudD1mdW5jdGlvbigpe3JldHVybiBhbihYbil9KS5yYXc9WG47dmFyIFpuPUhuKGZ1bmN0aW9uKHQpe3JldHVybiAxL3R9LE1hdGguYXRhbik7ZnVuY3Rpb24gJG4odCxlKXtyZXR1cm5bdCxNYXRoLmxvZyhNYXRoLnRhbihUdC80K2UvMikpXX1mdW5jdGlvbiBKbih0KXt2YXIgZSxyPUVuKHQpLG49ci5zY2FsZSxpPXIudHJhbnNsYXRlLGE9ci5jbGlwRXh0ZW50O3JldHVybiByLnNjYWxlPWZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseShyLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1yP2U/ci5jbGlwRXh0ZW50KG51bGwpOnI6dH0sci50cmFuc2xhdGU9ZnVuY3Rpb24oKXt2YXIgdD1pLmFwcGx5KHIsYXJndW1lbnRzKTtyZXR1cm4gdD09PXI/ZT9yLmNsaXBFeHRlbnQobnVsbCk6cjp0fSxyLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIG89YS5hcHBseShyLGFyZ3VtZW50cyk7aWYobz09PXIpe2lmKGU9bnVsbD09dCl7dmFyIHM9VHQqbigpLGw9aSgpO2EoW1tsWzBdLXMsbFsxXS1zXSxbbFswXStzLGxbMV0rc11dKX19ZWxzZSBlJiYobz1udWxsKTtyZXR1cm4gb30sci5jbGlwRXh0ZW50KG51bGwpfSh0Lmdlby5nbm9tb25pYz1mdW5jdGlvbigpe3JldHVybiBFbihabil9KS5yYXc9Wm4sJG4uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QsMipNYXRoLmF0YW4oTWF0aC5leHAoZSkpLUV0XX0sKHQuZ2VvLm1lcmNhdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIEpuKCRuKX0pLnJhdz0kbjt2YXIgS249SG4oZnVuY3Rpb24oKXtyZXR1cm4gMX0sTWF0aC5hc2luKTsodC5nZW8ub3J0aG9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIEVuKEtuKX0pLnJhdz1Lbjt2YXIgUW49SG4oZnVuY3Rpb24odCl7cmV0dXJuIDEvKDErdCl9LGZ1bmN0aW9uKHQpe3JldHVybiAyKk1hdGguYXRhbih0KX0pO2Z1bmN0aW9uIHRpKHQsZSl7cmV0dXJuW01hdGgubG9nKE1hdGgudGFuKFR0LzQrZS8yKSksLXRdfWZ1bmN0aW9uIGVpKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIHJpKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIG5pKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPVswLDFdLG49MixpPTI7aTxlO2krKyl7Zm9yKDtuPjEmJk90KHRbcltuLTJdXSx0W3Jbbi0xXV0sdFtpXSk8PTA7KS0tbjtyW24rK109aX1yZXR1cm4gci5zbGljZSgwLG4pfWZ1bmN0aW9uIGlpKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfSh0Lmdlby5zdGVyZW9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIEVuKFFuKX0pLnJhdz1Rbix0aS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bLWUsMipNYXRoLmF0YW4oTWF0aC5leHAodCkpLUV0XX0sKHQuZ2VvLnRyYW5zdmVyc2VNZXJjYXRvcj1mdW5jdGlvbigpe3ZhciB0PUpuKHRpKSxlPXQuY2VudGVyLHI9dC5yb3RhdGU7cmV0dXJuIHQuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0P2UoWy10WzFdLHRbMF1dKTpbKHQ9ZSgpKVsxXSwtdFswXV19LHQucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0P3IoW3RbMF0sdFsxXSx0Lmxlbmd0aD4yP3RbMl0rOTA6OTBdKTpbKHQ9cigpKVswXSx0WzFdLHRbMl0tOTBdfSxyKFswLDAsOTBdKX0pLnJhdz10aSx0Lmdlb209e30sdC5nZW9tLmh1bGw9ZnVuY3Rpb24odCl7dmFyIGU9ZWkscj1yaTtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBuKHQpO2Z1bmN0aW9uIG4odCl7aWYodC5sZW5ndGg8MylyZXR1cm5bXTt2YXIgbixpPXZlKGUpLGE9dmUociksbz10Lmxlbmd0aCxzPVtdLGw9W107Zm9yKG49MDtuPG87bisrKXMucHVzaChbK2kuY2FsbCh0aGlzLHRbbl0sbiksK2EuY2FsbCh0aGlzLHRbbl0sbiksbl0pO2ZvcihzLnNvcnQoaWkpLG49MDtuPG87bisrKWwucHVzaChbc1tuXVswXSwtc1tuXVsxXV0pO3ZhciBjPW5pKHMpLHU9bmkobCksaD11WzBdPT09Y1swXSxmPXVbdS5sZW5ndGgtMV09PT1jW2MubGVuZ3RoLTFdLHA9W107Zm9yKG49Yy5sZW5ndGgtMTtuPj0wOy0tbilwLnB1c2godFtzW2Nbbl1dWzJdXSk7Zm9yKG49K2g7bjx1Lmxlbmd0aC1mOysrbilwLnB1c2godFtzW3Vbbl1dWzJdXSk7cmV0dXJuIHB9cmV0dXJuIG4ueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG59LHQuZ2VvbS5wb2x5Z29uPWZ1bmN0aW9uKHQpe3JldHVybiBVKHQsYWkpLHR9O3ZhciBhaT10Lmdlb20ucG9seWdvbi5wcm90b3R5cGU9W107ZnVuY3Rpb24gb2kodCxlLHIpe3JldHVybihyWzBdLWVbMF0pKih0WzFdLWVbMV0pPChyWzFdLWVbMV0pKih0WzBdLWVbMF0pfWZ1bmN0aW9uIHNpKHQsZSxyLG4pe3ZhciBpPXRbMF0sYT1yWzBdLG89ZVswXS1pLHM9blswXS1hLGw9dFsxXSxjPXJbMV0sdT1lWzFdLWwsaD1uWzFdLWMsZj0ocyoobC1jKS1oKihpLWEpKS8oaCpvLXMqdSk7cmV0dXJuW2krZipvLGwrZip1XX1mdW5jdGlvbiBsaSh0KXt2YXIgZT10WzBdLHI9dFt0Lmxlbmd0aC0xXTtyZXR1cm4hKGVbMF0tclswXXx8ZVsxXS1yWzFdKX1haS5hcmVhPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9LTEscj10aGlzLmxlbmd0aCxuPXRoaXNbci0xXSxpPTA7KytlPHI7KXQ9bixuPXRoaXNbZV0saSs9dFsxXSpuWzBdLXRbMF0qblsxXTtyZXR1cm4uNSppfSxhaS5jZW50cm9pZD1mdW5jdGlvbih0KXt2YXIgZSxyLG49LTEsaT10aGlzLmxlbmd0aCxhPTAsbz0wLHM9dGhpc1tpLTFdO2Zvcihhcmd1bWVudHMubGVuZ3RofHwodD0tMS8oNip0aGlzLmFyZWEoKSkpOysrbjxpOyllPXMscz10aGlzW25dLHI9ZVswXSpzWzFdLXNbMF0qZVsxXSxhKz0oZVswXStzWzBdKSpyLG8rPShlWzFdK3NbMV0pKnI7cmV0dXJuW2EqdCxvKnRdfSxhaS5jbGlwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxhLG8scz1saSh0KSxsPS0xLGM9dGhpcy5sZW5ndGgtbGkodGhpcyksdT10aGlzW2MtMV07KytsPGM7KXtmb3IoZT10LnNsaWNlKCksdC5sZW5ndGg9MCxpPXRoaXNbbF0sYT1lWyhuPWUubGVuZ3RoLXMpLTFdLHI9LTE7KytyPG47KW9pKG89ZVtyXSx1LGkpPyhvaShhLHUsaSl8fHQucHVzaChzaShhLG8sdSxpKSksdC5wdXNoKG8pKTpvaShhLHUsaSkmJnQucHVzaChzaShhLG8sdSxpKSksYT1vO3MmJnQucHVzaCh0WzBdKSx1PWl9cmV0dXJuIHR9O3ZhciBjaSx1aSxoaSxmaSxwaSxkaT1bXSxnaT1bXTtmdW5jdGlvbiB2aSgpe0RpKHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBtaSh0KXt2YXIgZT1kaS5wb3AoKXx8bmV3IHZpO3JldHVybiBlLnNpdGU9dCxlfWZ1bmN0aW9uIHlpKHQpe1NpKHQpLGhpLnJlbW92ZSh0KSxkaS5wdXNoKHQpLERpKHQpfWZ1bmN0aW9uIHhpKHQpe3ZhciBlPXQuY2lyY2xlLHI9ZS54LG49ZS5jeSxpPXt4OnIseTpufSxhPXQuUCxvPXQuTixzPVt0XTt5aSh0KTtmb3IodmFyIGw9YTtsLmNpcmNsZSYmeShyLWwuY2lyY2xlLngpPGt0JiZ5KG4tbC5jaXJjbGUuY3kpPGt0OylhPWwuUCxzLnVuc2hpZnQobCkseWkobCksbD1hO3MudW5zaGlmdChsKSxTaShsKTtmb3IodmFyIGM9bztjLmNpcmNsZSYmeShyLWMuY2lyY2xlLngpPGt0JiZ5KG4tYy5jaXJjbGUuY3kpPGt0OylvPWMuTixzLnB1c2goYykseWkoYyksYz1vO3MucHVzaChjKSxTaShjKTt2YXIgdSxoPXMubGVuZ3RoO2Zvcih1PTE7dTxoOysrdSljPXNbdV0sbD1zW3UtMV0semkoYy5lZGdlLGwuc2l0ZSxjLnNpdGUsaSk7bD1zWzBdLChjPXNbaC0xXSkuZWRnZT1MaShsLnNpdGUsYy5zaXRlLG51bGwsaSksTWkobCksTWkoYyl9ZnVuY3Rpb24gYmkodCl7Zm9yKHZhciBlLHIsbixpLGE9dC54LG89dC55LHM9aGkuXztzOylpZigobj1faShzLG8pLWEpPmt0KXM9cy5MO2Vsc2V7aWYoISgoaT1hLXdpKHMsbykpPmt0KSl7bj4ta3Q/KGU9cy5QLHI9cyk6aT4ta3Q/KGU9cyxyPXMuTik6ZT1yPXM7YnJlYWt9aWYoIXMuUil7ZT1zO2JyZWFrfXM9cy5SfXZhciBsPW1pKHQpO2lmKGhpLmluc2VydChlLGwpLGV8fHIpe2lmKGU9PT1yKXJldHVybiBTaShlKSxyPW1pKGUuc2l0ZSksaGkuaW5zZXJ0KGwsciksbC5lZGdlPXIuZWRnZT1MaShlLnNpdGUsbC5zaXRlKSxNaShlKSx2b2lkIE1pKHIpO2lmKHIpe1NpKGUpLFNpKHIpO3ZhciBjPWUuc2l0ZSx1PWMueCxoPWMueSxmPXQueC11LHA9dC55LWgsZD1yLnNpdGUsZz1kLngtdSx2PWQueS1oLG09MiooZip2LXAqZykseT1mKmYrcCpwLHg9ZypnK3YqdixiPXt4Oih2KnktcCp4KS9tK3UseTooZip4LWcqeSkvbStofTt6aShyLmVkZ2UsYyxkLGIpLGwuZWRnZT1MaShjLHQsbnVsbCxiKSxyLmVkZ2U9TGkodCxkLG51bGwsYiksTWkoZSksTWkocil9ZWxzZSBsLmVkZ2U9TGkoZS5zaXRlLGwuc2l0ZSl9fWZ1bmN0aW9uIF9pKHQsZSl7dmFyIHI9dC5zaXRlLG49ci54LGk9ci55LGE9aS1lO2lmKCFhKXJldHVybiBuO3ZhciBvPXQuUDtpZighbylyZXR1cm4tMS8wO3ZhciBzPShyPW8uc2l0ZSkueCxsPXIueSxjPWwtZTtpZighYylyZXR1cm4gczt2YXIgdT1zLW4saD0xL2EtMS9jLGY9dS9jO3JldHVybiBoPygtZitNYXRoLnNxcnQoZipmLTIqaCoodSp1LygtMipjKS1sK2MvMitpLWEvMikpKS9oK246KG4rcykvMn1mdW5jdGlvbiB3aSh0LGUpe3ZhciByPXQuTjtpZihyKXJldHVybiBfaShyLGUpO3ZhciBuPXQuc2l0ZTtyZXR1cm4gbi55PT09ZT9uLng6MS8wfWZ1bmN0aW9uIGtpKHQpe3RoaXMuc2l0ZT10LHRoaXMuZWRnZXM9W119ZnVuY3Rpb24gQWkodCxlKXtyZXR1cm4gZS5hbmdsZS10LmFuZ2xlfWZ1bmN0aW9uIFRpKCl7RGkodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIE1pKHQpe3ZhciBlPXQuUCxyPXQuTjtpZihlJiZyKXt2YXIgbj1lLnNpdGUsaT10LnNpdGUsYT1yLnNpdGU7aWYobiE9PWEpe3ZhciBvPWkueCxzPWkueSxsPW4ueC1vLGM9bi55LXMsdT1hLngtbyxoPTIqKGwqKHY9YS55LXMpLWMqdSk7aWYoIShoPj0tQXQpKXt2YXIgZj1sKmwrYypjLHA9dSp1K3YqdixkPSh2KmYtYypwKS9oLGc9KGwqcC11KmYpL2gsdj1nK3MsbT1naS5wb3AoKXx8bmV3IFRpO20uYXJjPXQsbS5zaXRlPWksbS54PWQrbyxtLnk9ditNYXRoLnNxcnQoZCpkK2cqZyksbS5jeT12LHQuY2lyY2xlPW07Zm9yKHZhciB5PW51bGwseD1waS5fO3g7KWlmKG0ueTx4Lnl8fG0ueT09PXgueSYmbS54PD14Lngpe2lmKCF4Lkwpe3k9eC5QO2JyZWFrfXg9eC5MfWVsc2V7aWYoIXguUil7eT14O2JyZWFrfXg9eC5SfXBpLmluc2VydCh5LG0pLHl8fChmaT1tKX19fX1mdW5jdGlvbiBTaSh0KXt2YXIgZT10LmNpcmNsZTtlJiYoZS5QfHwoZmk9ZS5OKSxwaS5yZW1vdmUoZSksZ2kucHVzaChlKSxEaShlKSx0LmNpcmNsZT1udWxsKX1mdW5jdGlvbiBFaSh0LGUpe3ZhciByPXQuYjtpZihyKXJldHVybiEwO3ZhciBuLGksYT10LmEsbz1lWzBdWzBdLHM9ZVsxXVswXSxsPWVbMF1bMV0sYz1lWzFdWzFdLHU9dC5sLGg9dC5yLGY9dS54LHA9dS55LGQ9aC54LGc9aC55LHY9KGYrZCkvMixtPShwK2cpLzI7aWYoZz09PXApe2lmKHY8b3x8dj49cylyZXR1cm47aWYoZj5kKXtpZihhKXtpZihhLnk+PWMpcmV0dXJufWVsc2UgYT17eDp2LHk6bH07cj17eDp2LHk6Y319ZWxzZXtpZihhKXtpZihhLnk8bClyZXR1cm59ZWxzZSBhPXt4OnYseTpjfTtyPXt4OnYseTpsfX19ZWxzZSBpZihpPW0tKG49KGYtZCkvKGctcCkpKnYsbjwtMXx8bj4xKWlmKGY+ZCl7aWYoYSl7aWYoYS55Pj1jKXJldHVybn1lbHNlIGE9e3g6KGwtaSkvbix5Omx9O3I9e3g6KGMtaSkvbix5OmN9fWVsc2V7aWYoYSl7aWYoYS55PGwpcmV0dXJufWVsc2UgYT17eDooYy1pKS9uLHk6Y307cj17eDoobC1pKS9uLHk6bH19ZWxzZSBpZihwPGcpe2lmKGEpe2lmKGEueD49cylyZXR1cm59ZWxzZSBhPXt4Om8seTpuKm8raX07cj17eDpzLHk6bipzK2l9fWVsc2V7aWYoYSl7aWYoYS54PG8pcmV0dXJufWVsc2UgYT17eDpzLHk6bipzK2l9O3I9e3g6byx5Om4qbytpfX1yZXR1cm4gdC5hPWEsdC5iPXIsITB9ZnVuY3Rpb24gQ2kodCxlKXt0aGlzLmw9dCx0aGlzLnI9ZSx0aGlzLmE9dGhpcy5iPW51bGx9ZnVuY3Rpb24gTGkodCxlLHIsbil7dmFyIGk9bmV3IENpKHQsZSk7cmV0dXJuIGNpLnB1c2goaSksciYmemkoaSx0LGUsciksbiYmemkoaSxlLHQsbiksdWlbdC5pXS5lZGdlcy5wdXNoKG5ldyBPaShpLHQsZSkpLHVpW2UuaV0uZWRnZXMucHVzaChuZXcgT2koaSxlLHQpKSxpfWZ1bmN0aW9uIHppKHQsZSxyLG4pe3QuYXx8dC5iP3QubD09PXI/dC5iPW46dC5hPW46KHQuYT1uLHQubD1lLHQucj1yKX1mdW5jdGlvbiBPaSh0LGUscil7dmFyIG49dC5hLGk9dC5iO3RoaXMuZWRnZT10LHRoaXMuc2l0ZT1lLHRoaXMuYW5nbGU9cj9NYXRoLmF0YW4yKHIueS1lLnksci54LWUueCk6dC5sPT09ZT9NYXRoLmF0YW4yKGkueC1uLngsbi55LWkueSk6TWF0aC5hdGFuMihuLngtaS54LGkueS1uLnkpfWZ1bmN0aW9uIElpKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gRGkodCl7dC5VPXQuQz10Lkw9dC5SPXQuUD10Lk49bnVsbH1mdW5jdGlvbiBQaSh0LGUpe3ZhciByPWUsbj1lLlIsaT1yLlU7aT9pLkw9PT1yP2kuTD1uOmkuUj1uOnQuXz1uLG4uVT1pLHIuVT1uLHIuUj1uLkwsci5SJiYoci5SLlU9ciksbi5MPXJ9ZnVuY3Rpb24gUmkodCxlKXt2YXIgcj1lLG49ZS5MLGk9ci5VO2k/aS5MPT09cj9pLkw9bjppLlI9bjp0Ll89bixuLlU9aSxyLlU9bixyLkw9bi5SLHIuTCYmKHIuTC5VPXIpLG4uUj1yfWZ1bmN0aW9uIEZpKHQpe2Zvcig7dC5MOyl0PXQuTDtyZXR1cm4gdH1mdW5jdGlvbiBCaSh0LGUpe3ZhciByLG4saSxhPXQuc29ydChOaSkucG9wKCk7Zm9yKGNpPVtdLHVpPW5ldyBBcnJheSh0Lmxlbmd0aCksaGk9bmV3IElpLHBpPW5ldyBJaTs7KWlmKGk9ZmksYSYmKCFpfHxhLnk8aS55fHxhLnk9PT1pLnkmJmEueDxpLngpKWEueD09PXImJmEueT09PW58fCh1aVthLmldPW5ldyBraShhKSxiaShhKSxyPWEueCxuPWEueSksYT10LnBvcCgpO2Vsc2V7aWYoIWkpYnJlYWs7eGkoaS5hcmMpfWUmJihmdW5jdGlvbih0KXtmb3IodmFyIGUscj1jaSxuPWVuKHRbMF1bMF0sdFswXVsxXSx0WzFdWzBdLHRbMV1bMV0pLGk9ci5sZW5ndGg7aS0tOykoIUVpKGU9cltpXSx0KXx8IW4oZSl8fHkoZS5hLngtZS5iLngpPGt0JiZ5KGUuYS55LWUuYi55KTxrdCkmJihlLmE9ZS5iPW51bGwsci5zcGxpY2UoaSwxKSl9KGUpLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxhLG8scyxsLGMsdSxoPXRbMF1bMF0sZj10WzFdWzBdLHA9dFswXVsxXSxkPXRbMV1bMV0sZz11aSx2PWcubGVuZ3RoO3YtLTspaWYoKGE9Z1t2XSkmJmEucHJlcGFyZSgpKWZvcihsPShzPWEuZWRnZXMpLmxlbmd0aCxvPTA7bzxsOyluPSh1PXNbb10uZW5kKCkpLngsaT11LnksZT0oYz1zWysrbyVsXS5zdGFydCgpKS54LHI9Yy55LCh5KG4tZSk+a3R8fHkoaS1yKT5rdCkmJihzLnNwbGljZShvLDAsbmV3IE9pKChtPWEuc2l0ZSx4PXUsYj15KG4taCk8a3QmJmQtaT5rdD97eDpoLHk6eShlLWgpPGt0P3I6ZH06eShpLWQpPGt0JiZmLW4+a3Q/e3g6eShyLWQpPGt0P2U6Zix5OmR9Onkobi1mKTxrdCYmaS1wPmt0P3t4OmYseTp5KGUtZik8a3Q/cjpwfTp5KGktcCk8a3QmJm4taD5rdD97eDp5KHItcCk8a3Q/ZTpoLHk6cH06bnVsbCxfPXZvaWQgMCxfPW5ldyBDaShtLG51bGwpLF8uYT14LF8uYj1iLGNpLnB1c2goXyksXyksYS5zaXRlLG51bGwpKSwrK2wpO3ZhciBtLHgsYixffShlKSk7dmFyIG89e2NlbGxzOnVpLGVkZ2VzOmNpfTtyZXR1cm4gaGk9cGk9Y2k9dWk9bnVsbCxvfWZ1bmN0aW9uIE5pKHQsZSl7cmV0dXJuIGUueS10Lnl8fGUueC10Lnh9a2kucHJvdG90eXBlLnByZXBhcmU9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT10aGlzLmVkZ2VzLHI9ZS5sZW5ndGg7ci0tOykodD1lW3JdLmVkZ2UpLmImJnQuYXx8ZS5zcGxpY2UociwxKTtyZXR1cm4gZS5zb3J0KEFpKSxlLmxlbmd0aH0sT2kucHJvdG90eXBlPXtzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2UubD09PXRoaXMuc2l0ZT90aGlzLmVkZ2UuYTp0aGlzLmVkZ2UuYn0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZS5sPT09dGhpcy5zaXRlP3RoaXMuZWRnZS5iOnRoaXMuZWRnZS5hfX0sSWkucHJvdG90eXBlPXtpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk7aWYodCl7aWYoZS5QPXQsZS5OPXQuTix0Lk4mJih0Lk4uUD1lKSx0Lk49ZSx0LlIpe2Zvcih0PXQuUjt0Lkw7KXQ9dC5MO3QuTD1lfWVsc2UgdC5SPWU7cj10fWVsc2UgdGhpcy5fPyh0PUZpKHRoaXMuXyksZS5QPW51bGwsZS5OPXQsdC5QPXQuTD1lLHI9dCk6KGUuUD1lLk49bnVsbCx0aGlzLl89ZSxyPW51bGwpO2ZvcihlLkw9ZS5SPW51bGwsZS5VPXIsZS5DPSEwLHQ9ZTtyJiZyLkM7KXI9PT0obj1yLlUpLkw/KGk9bi5SKSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCx0PW4pOih0PT09ci5SJiYoUGkodGhpcyxyKSxyPSh0PXIpLlUpLHIuQz0hMSxuLkM9ITAsUmkodGhpcyxuKSk6KGk9bi5MKSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCx0PW4pOih0PT09ci5MJiYoUmkodGhpcyxyKSxyPSh0PXIpLlUpLHIuQz0hMSxuLkM9ITAsUGkodGhpcyxuKSkscj10LlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbih0KXt0Lk4mJih0Lk4uUD10LlApLHQuUCYmKHQuUC5OPXQuTiksdC5OPXQuUD1udWxsO3ZhciBlLHIsbixpPXQuVSxhPXQuTCxvPXQuUjtpZihyPWE/bz9GaShvKTphOm8saT9pLkw9PT10P2kuTD1yOmkuUj1yOnRoaXMuXz1yLGEmJm8/KG49ci5DLHIuQz10LkMsci5MPWEsYS5VPXIsciE9PW8/KGk9ci5VLHIuVT10LlUsdD1yLlIsaS5MPXQsci5SPW8sby5VPXIpOihyLlU9aSxpPXIsdD1yLlIpKToobj10LkMsdD1yKSx0JiYodC5VPWkpLCFuKWlmKHQmJnQuQyl0LkM9ITE7ZWxzZXtkb3tpZih0PT09dGhpcy5fKWJyZWFrO2lmKHQ9PT1pLkwpe2lmKChlPWkuUikuQyYmKGUuQz0hMSxpLkM9ITAsUGkodGhpcyxpKSxlPWkuUiksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5SJiZlLlIuQ3x8KGUuTC5DPSExLGUuQz0hMCxSaSh0aGlzLGUpLGU9aS5SKSxlLkM9aS5DLGkuQz1lLlIuQz0hMSxQaSh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfX1lbHNlIGlmKChlPWkuTCkuQyYmKGUuQz0hMSxpLkM9ITAsUmkodGhpcyxpKSxlPWkuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5MJiZlLkwuQ3x8KGUuUi5DPSExLGUuQz0hMCxQaSh0aGlzLGUpLGU9aS5MKSxlLkM9aS5DLGkuQz1lLkwuQz0hMSxSaSh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfWUuQz0hMCx0PWksaT1pLlV9d2hpbGUoIXQuQyk7dCYmKHQuQz0hMSl9fX0sdC5nZW9tLnZvcm9ub2k9ZnVuY3Rpb24odCl7dmFyIGU9ZWkscj1yaSxuPWUsaT1yLGE9amk7aWYodClyZXR1cm4gbyh0KTtmdW5jdGlvbiBvKHQpe3ZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj1hWzBdWzBdLG49YVswXVsxXSxpPWFbMV1bMF0sbz1hWzFdWzFdO3JldHVybiBCaShzKHQpLGEpLmNlbGxzLmZvckVhY2goZnVuY3Rpb24oYSxzKXt2YXIgbD1hLmVkZ2VzLGM9YS5zaXRlOyhlW3NdPWwubGVuZ3RoP2wubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPXQuc3RhcnQoKTtyZXR1cm5bZS54LGUueV19KTpjLng+PXImJmMueDw9aSYmYy55Pj1uJiZjLnk8PW8/W1tyLG9dLFtpLG9dLFtpLG5dLFtyLG5dXTpbXSkucG9pbnQ9dFtzXX0pLGV9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm57eDpNYXRoLnJvdW5kKG4odCxlKS9rdCkqa3QseTpNYXRoLnJvdW5kKGkodCxlKS9rdCkqa3QsaTplfX0pfXJldHVybiBvLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBCaShzKHQpKS5lZGdlcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQubCYmdC5yfSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6dFtlLmwuaV0sdGFyZ2V0OnRbZS5yLmldfX0pfSxvLnRyaWFuZ2xlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gQmkocyh0KSkuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihyLG4pe2Zvcih2YXIgaSxhLG8scyxsPXIuc2l0ZSxjPXIuZWRnZXMuc29ydChBaSksdT0tMSxoPWMubGVuZ3RoLGY9Y1toLTFdLmVkZ2UscD1mLmw9PT1sP2YucjpmLmw7Kyt1PGg7KWYsaT1wLHA9KGY9Y1t1XS5lZGdlKS5sPT09bD9mLnI6Zi5sLG48aS5pJiZuPHAuaSYmKG89aSxzPXAsKChhPWwpLngtcy54KSooby55LWEueSktKGEueC1vLngpKihzLnktYS55KTwwKSYmZS5wdXNoKFt0W25dLHRbaS5pXSx0W3AuaV1dKX0pLGV9LG8ueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj12ZShlPXQpLG8pOmV9LG8ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT12ZShyPXQpLG8pOnJ9LG8uY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1udWxsPT10P2ppOnQsbyk6YT09PWppP251bGw6YX0sby5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP28uY2xpcEV4dGVudCh0JiZbWzAsMF0sdF0pOmE9PT1qaT9udWxsOmEmJmFbMV19LG99O3ZhciBqaT1bWy0xZTYsLTFlNl0sWzFlNiwxZTZdXTtmdW5jdGlvbiBWaSh0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIFVpKHQpe3JldHVybiB0Lnl9ZnVuY3Rpb24gcWkoZSxyKXtlPXQucmdiKGUpLHI9dC5yZ2Iocik7dmFyIG49ZS5yLGk9ZS5nLGE9ZS5iLG89ci5yLW4scz1yLmctaSxsPXIuYi1hO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm5cIiNcIitjZShNYXRoLnJvdW5kKG4rbyp0KSkrY2UoTWF0aC5yb3VuZChpK3MqdCkpK2NlKE1hdGgucm91bmQoYStsKnQpKX19ZnVuY3Rpb24gSGkodCxlKXt2YXIgcixuPXt9LGk9e307Zm9yKHIgaW4gdClyIGluIGU/bltyXT1aaSh0W3JdLGVbcl0pOmlbcl09dFtyXTtmb3IociBpbiBlKXIgaW4gdHx8KGlbcl09ZVtyXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihyIGluIG4paVtyXT1uW3JdKHQpO3JldHVybiBpfX1mdW5jdGlvbiBHaSh0LGUpe3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24ocil7cmV0dXJuIHQqKDEtcikrZSpyfX1mdW5jdGlvbiBZaSh0LGUpe3ZhciByLG4saSxhPVdpLmxhc3RJbmRleD1YaS5sYXN0SW5kZXg9MCxvPS0xLHM9W10sbD1bXTtmb3IodCs9XCJcIixlKz1cIlwiOyhyPVdpLmV4ZWModCkpJiYobj1YaS5leGVjKGUpKTspKGk9bi5pbmRleCk+YSYmKGk9ZS5zbGljZShhLGkpLHNbb10/c1tvXSs9aTpzWysrb109aSksKHI9clswXSk9PT0obj1uWzBdKT9zW29dP3Nbb10rPW46c1srK29dPW46KHNbKytvXT1udWxsLGwucHVzaCh7aTpvLHg6R2kocixuKX0pKSxhPVhpLmxhc3RJbmRleDtyZXR1cm4gYTxlLmxlbmd0aCYmKGk9ZS5zbGljZShhKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLHMubGVuZ3RoPDI/bFswXT8oZT1sWzBdLngsZnVuY3Rpb24odCl7cmV0dXJuIGUodCkrXCJcIn0pOmZ1bmN0aW9uKCl7cmV0dXJuIGV9OihlPWwubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgcixuPTA7bjxlOysrbilzWyhyPWxbbl0pLmldPXIueCh0KTtyZXR1cm4gcy5qb2luKFwiXCIpfSl9dC5nZW9tLmRlbGF1bmF5PWZ1bmN0aW9uKGUpe3JldHVybiB0Lmdlb20udm9yb25vaSgpLnRyaWFuZ2xlcyhlKX0sdC5nZW9tLnF1YWR0cmVlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbz1laSxzPXJpO2lmKGE9YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbz1WaSxzPVVpLDM9PT1hJiYoaT1yLG49ZSxyPWU9MCksbCh0KTtmdW5jdGlvbiBsKHQpe3ZhciBsLGMsdSxoLGYscCxkLGcsdixtPXZlKG8pLHg9dmUocyk7aWYobnVsbCE9ZSlwPWUsZD1yLGc9bix2PWk7ZWxzZSBpZihnPXY9LShwPWQ9MS8wKSxjPVtdLHU9W10sZj10Lmxlbmd0aCxhKWZvcihoPTA7aDxmOysraCkobD10W2hdKS54PHAmJihwPWwueCksbC55PGQmJihkPWwueSksbC54PmcmJihnPWwueCksbC55PnYmJih2PWwueSksYy5wdXNoKGwueCksdS5wdXNoKGwueSk7ZWxzZSBmb3IoaD0wO2g8ZjsrK2gpe3ZhciBiPSttKGw9dFtoXSxoKSxfPSt4KGwsaCk7YjxwJiYocD1iKSxfPGQmJihkPV8pLGI+ZyYmKGc9YiksXz52JiYodj1fKSxjLnB1c2goYiksdS5wdXNoKF8pfXZhciB3PWctcCxrPXYtZDtmdW5jdGlvbiBBKHQsZSxyLG4saSxhLG8scyl7aWYoIWlzTmFOKHIpJiYhaXNOYU4obikpaWYodC5sZWFmKXt2YXIgbD10LngsYz10Lnk7aWYobnVsbCE9bClpZih5KGwtcikreShjLW4pPC4wMSlUKHQsZSxyLG4saSxhLG8scyk7ZWxzZXt2YXIgdT10LnBvaW50O3QueD10Lnk9dC5wb2ludD1udWxsLFQodCx1LGwsYyxpLGEsbyxzKSxUKHQsZSxyLG4saSxhLG8scyl9ZWxzZSB0Lng9cix0Lnk9bix0LnBvaW50PWV9ZWxzZSBUKHQsZSxyLG4saSxhLG8scyl9ZnVuY3Rpb24gVCh0LGUscixuLGksYSxvLHMpe3ZhciBsPS41KihpK28pLGM9LjUqKGErcyksdT1yPj1sLGg9bj49YyxmPWg8PDF8dTt0LmxlYWY9ITEsdT9pPWw6bz1sLGg/YT1jOnM9YyxBKHQ9dC5ub2Rlc1tmXXx8KHQubm9kZXNbZl09e2xlYWY6ITAsbm9kZXM6W10scG9pbnQ6bnVsbCx4Om51bGwseTpudWxsLGFkZDpmdW5jdGlvbih0KXtBKE0sdCwrbSh0LCsraCksK3godCxoKSxwLGQsZyx2KX19KSxlLHIsbixpLGEsbyxzKX13Pms/dj1kK3c6Zz1wK2s7dmFyIE09e2xlYWY6ITAsbm9kZXM6W10scG9pbnQ6bnVsbCx4Om51bGwseTpudWxsLGFkZDpmdW5jdGlvbih0KXtBKE0sdCwrbSh0LCsraCksK3godCxoKSxwLGQsZyx2KX19O2lmKE0udmlzaXQ9ZnVuY3Rpb24odCl7IWZ1bmN0aW9uIHQoZSxyLG4saSxhLG8pe2lmKCFlKHIsbixpLGEsbykpe3ZhciBzPS41KihuK2EpLGw9LjUqKGkrbyksYz1yLm5vZGVzO2NbMF0mJnQoZSxjWzBdLG4saSxzLGwpLGNbMV0mJnQoZSxjWzFdLHMsaSxhLGwpLGNbMl0mJnQoZSxjWzJdLG4sbCxzLG8pLGNbM10mJnQoZSxjWzNdLHMsbCxhLG8pfX0odCxNLHAsZCxnLHYpfSxNLmZpbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzLGw9MS8wO3JldHVybiBmdW5jdGlvbiB0KGMsdSxoLGYscCl7aWYoISh1PmF8fGg+b3x8ZjxufHxwPGkpKXtpZihkPWMucG9pbnQpe3ZhciBkLGc9ZS1jLngsdj1yLWMueSxtPWcqZyt2KnY7aWYobTxsKXt2YXIgeT1NYXRoLnNxcnQobD1tKTtuPWUteSxpPXIteSxhPWUreSxvPXIreSxzPWR9fWZvcih2YXIgeD1jLm5vZGVzLGI9LjUqKHUrZiksXz0uNSooaCtwKSx3PShyPj1fKTw8MXxlPj1iLGs9dys0O3c8azsrK3cpaWYoYz14WzMmd10pc3dpdGNoKDMmdyl7Y2FzZSAwOnQoYyx1LGgsYixfKTticmVhaztjYXNlIDE6dChjLGIsaCxmLF8pO2JyZWFrO2Nhc2UgMjp0KGMsdSxfLGIscCk7YnJlYWs7Y2FzZSAzOnQoYyxiLF8sZixwKX19fSh0LG4saSxhLG8pLHN9KE0sdFswXSx0WzFdLHAsZCxnLHYpfSxoPS0xLG51bGw9PWUpe2Zvcig7KytoPGY7KUEoTSx0W2hdLGNbaF0sdVtoXSxwLGQsZyx2KTstLWh9ZWxzZSB0LmZvckVhY2goTS5hZGQpO3JldHVybiBjPXU9dD1sPW51bGwsTX1yZXR1cm4gbC54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsbCk6b30sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsbCk6c30sbC5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/ZT1yPW49aT1udWxsOihlPSt0WzBdWzBdLHI9K3RbMF1bMV0sbj0rdFsxXVswXSxpPSt0WzFdWzFdKSxsKTpudWxsPT1lP251bGw6W1tlLHJdLFtuLGldXX0sbC5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2U9cj1uPWk9bnVsbDooZT1yPTAsbj0rdFswXSxpPSt0WzFdKSxsKTpudWxsPT1lP251bGw6W24tZSxpLXJdfSxsfSx0LmludGVycG9sYXRlUmdiPXFpLHQuaW50ZXJwb2xhdGVPYmplY3Q9SGksdC5pbnRlcnBvbGF0ZU51bWJlcj1HaSx0LmludGVycG9sYXRlU3RyaW5nPVlpO3ZhciBXaT0vWy0rXT8oPzpcXGQrXFwuP1xcZCp8XFwuP1xcZCspKD86W2VFXVstK10/XFxkKyk/L2csWGk9bmV3IFJlZ0V4cChXaS5zb3VyY2UsXCJnXCIpO2Z1bmN0aW9uIFppKGUscil7Zm9yKHZhciBuLGk9dC5pbnRlcnBvbGF0b3JzLmxlbmd0aDstLWk+PTAmJiEobj10LmludGVycG9sYXRvcnNbaV0oZSxyKSk7KTtyZXR1cm4gbn1mdW5jdGlvbiAkaSh0LGUpe3ZhciByLG49W10saT1bXSxhPXQubGVuZ3RoLG89ZS5sZW5ndGgscz1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCk7Zm9yKHI9MDtyPHM7KytyKW4ucHVzaChaaSh0W3JdLGVbcl0pKTtmb3IoO3I8YTsrK3IpaVtyXT10W3JdO2Zvcig7cjxvOysrcilpW3JdPWVbcl07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihyPTA7cjxzOysrcilpW3JdPW5bcl0odCk7cmV0dXJuIGl9fXQuaW50ZXJwb2xhdGU9WmksdC5pbnRlcnBvbGF0b3JzPVtmdW5jdGlvbih0LGUpe3ZhciByPXR5cGVvZiBlO3JldHVybihcInN0cmluZ1wiPT09cj9nZS5oYXMoZS50b0xvd2VyQ2FzZSgpKXx8L14oI3xyZ2JcXCh8aHNsXFwoKS9pLnRlc3QoZSk/cWk6WWk6ZSBpbnN0YW5jZW9mIFZ0P3FpOkFycmF5LmlzQXJyYXkoZSk/JGk6XCJvYmplY3RcIj09PXImJmlzTmFOKGUpP0hpOkdpKSh0LGUpfV0sdC5pbnRlcnBvbGF0ZUFycmF5PSRpO3ZhciBKaT1mdW5jdGlvbigpe3JldHVybiB6fSxLaT10Lm1hcCh7bGluZWFyOkppLHBvbHk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnBvdyhlLHQpfX0scXVhZDpmdW5jdGlvbigpe3JldHVybiByYX0sY3ViaWM6ZnVuY3Rpb24oKXtyZXR1cm4gbmF9LHNpbjpmdW5jdGlvbigpe3JldHVybiBhYX0sZXhwOmZ1bmN0aW9uKCl7cmV0dXJuIG9hfSxjaXJjbGU6ZnVuY3Rpb24oKXtyZXR1cm4gc2F9LGVsYXN0aWM6ZnVuY3Rpb24odCxlKXt2YXIgcjthcmd1bWVudHMubGVuZ3RoPDImJihlPS40NSk7YXJndW1lbnRzLmxlbmd0aD9yPWUvTXQqTWF0aC5hc2luKDEvdCk6KHQ9MSxyPWUvNCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiAxK3QqTWF0aC5wb3coMiwtMTAqbikqTWF0aC5zaW4oKG4tcikqTXQvZSl9fSxiYWNrOmZ1bmN0aW9uKHQpe3R8fCh0PTEuNzAxNTgpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZSplKigodCsxKSplLXQpfX0sYm91bmNlOmZ1bmN0aW9uKCl7cmV0dXJuIGxhfX0pLFFpPXQubWFwKHtpbjp6LG91dDp0YSxcImluLW91dFwiOmVhLFwib3V0LWluXCI6ZnVuY3Rpb24odCl7cmV0dXJuIGVhKHRhKHQpKX19KTtmdW5jdGlvbiB0YSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIDEtdCgxLWUpfX1mdW5jdGlvbiBlYSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuLjUqKGU8LjU/dCgyKmUpOjItdCgyLTIqZSkpfX1mdW5jdGlvbiByYSh0KXtyZXR1cm4gdCp0fWZ1bmN0aW9uIG5hKHQpe3JldHVybiB0KnQqdH1mdW5jdGlvbiBpYSh0KXtpZih0PD0wKXJldHVybiAwO2lmKHQ+PTEpcmV0dXJuIDE7dmFyIGU9dCp0LHI9ZSp0O3JldHVybiA0Kih0PC41P3I6MyoodC1lKStyLS43NSl9ZnVuY3Rpb24gYWEodCl7cmV0dXJuIDEtTWF0aC5jb3ModCpFdCl9ZnVuY3Rpb24gb2EodCl7cmV0dXJuIE1hdGgucG93KDIsMTAqKHQtMSkpfWZ1bmN0aW9uIHNhKHQpe3JldHVybiAxLU1hdGguc3FydCgxLXQqdCl9ZnVuY3Rpb24gbGEodCl7cmV0dXJuIHQ8MS8yLjc1PzcuNTYyNSp0KnQ6dDwyLzIuNzU/Ny41NjI1Kih0LT0xLjUvMi43NSkqdCsuNzU6dDwyLjUvMi43NT83LjU2MjUqKHQtPTIuMjUvMi43NSkqdCsuOTM3NTo3LjU2MjUqKHQtPTIuNjI1LzIuNzUpKnQrLjk4NDM3NX1mdW5jdGlvbiBjYSh0LGUpe3JldHVybiBlLT10LGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnJvdW5kKHQrZSpyKX19ZnVuY3Rpb24gdWEodCl7dmFyIGUscixuLGk9W3QuYSx0LmJdLGE9W3QuYyx0LmRdLG89ZmEoaSkscz1oYShpLGEpLGw9ZmEoKChlPWEpWzBdKz0obj0tcykqKHI9aSlbMF0sZVsxXSs9bipyWzFdLGUpKXx8MDtpWzBdKmFbMV08YVswXSppWzFdJiYoaVswXSo9LTEsaVsxXSo9LTEsbyo9LTEscyo9LTEpLHRoaXMucm90YXRlPShvP01hdGguYXRhbjIoaVsxXSxpWzBdKTpNYXRoLmF0YW4yKC1hWzBdLGFbMV0pKSpMdCx0aGlzLnRyYW5zbGF0ZT1bdC5lLHQuZl0sdGhpcy5zY2FsZT1bbyxsXSx0aGlzLnNrZXc9bD9NYXRoLmF0YW4yKHMsbCkqTHQ6MH1mdW5jdGlvbiBoYSh0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdfWZ1bmN0aW9uIGZhKHQpe3ZhciBlPU1hdGguc3FydChoYSh0LHQpKTtyZXR1cm4gZSYmKHRbMF0vPWUsdFsxXS89ZSksZX10LmVhc2U9ZnVuY3Rpb24odCl7dmFyIGUsbj10LmluZGV4T2YoXCItXCIpLGk9bj49MD90LnNsaWNlKDAsbik6dCxhPW4+PTA/dC5zbGljZShuKzEpOlwiaW5cIjtyZXR1cm4gaT1LaS5nZXQoaSl8fEppLGE9UWkuZ2V0KGEpfHx6LGU9YShpLmFwcGx5KG51bGwsci5jYWxsKGFyZ3VtZW50cywxKSkpLGZ1bmN0aW9uKHQpe3JldHVybiB0PD0wPzA6dD49MT8xOmUodCl9fSx0LmludGVycG9sYXRlSGNsPWZ1bmN0aW9uKGUscil7ZT10LmhjbChlKSxyPXQuaGNsKHIpO3ZhciBuPWUuaCxpPWUuYyxhPWUubCxvPXIuaC1uLHM9ci5jLWksbD1yLmwtYTtpc05hTihzKSYmKHM9MCxpPWlzTmFOKGkpP3IuYzppKTtpc05hTihvKT8obz0wLG49aXNOYU4obik/ci5oOm4pOm8+MTgwP28tPTM2MDpvPC0xODAmJihvKz0zNjApO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gV3QobitvKnQsaStzKnQsYStsKnQpK1wiXCJ9fSx0LmludGVycG9sYXRlSHNsPWZ1bmN0aW9uKGUscil7ZT10LmhzbChlKSxyPXQuaHNsKHIpO3ZhciBuPWUuaCxpPWUucyxhPWUubCxvPXIuaC1uLHM9ci5zLWksbD1yLmwtYTtpc05hTihzKSYmKHM9MCxpPWlzTmFOKGkpP3IuczppKTtpc05hTihvKT8obz0wLG49aXNOYU4obik/ci5oOm4pOm8+MTgwP28tPTM2MDpvPC0xODAmJihvKz0zNjApO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gSHQobitvKnQsaStzKnQsYStsKnQpK1wiXCJ9fSx0LmludGVycG9sYXRlTGFiPWZ1bmN0aW9uKGUscil7ZT10LmxhYihlKSxyPXQubGFiKHIpO3ZhciBuPWUubCxpPWUuYSxhPWUuYixvPXIubC1uLHM9ci5hLWksbD1yLmItYTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHRlKG4rbyp0LGkrcyp0LGErbCp0KStcIlwifX0sdC5pbnRlcnBvbGF0ZVJvdW5kPWNhLHQudHJhbnNmb3JtPWZ1bmN0aW9uKGUpe3ZhciByPWkuY3JlYXRlRWxlbWVudE5TKHQubnMucHJlZml4LnN2ZyxcImdcIik7cmV0dXJuKHQudHJhbnNmb3JtPWZ1bmN0aW9uKHQpe2lmKG51bGwhPXQpe3Iuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsdCk7dmFyIGU9ci50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpfXJldHVybiBuZXcgdWEoZT9lLm1hdHJpeDpwYSl9KShlKX0sdWEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrdGhpcy50cmFuc2xhdGUrXCIpcm90YXRlKFwiK3RoaXMucm90YXRlK1wiKXNrZXdYKFwiK3RoaXMuc2tldytcIilzY2FsZShcIit0aGlzLnNjYWxlK1wiKVwifTt2YXIgcGE9e2E6MSxiOjAsYzowLGQ6MSxlOjAsZjowfTtmdW5jdGlvbiBkYSh0KXtyZXR1cm4gdC5sZW5ndGg/dC5wb3AoKStcIixcIjpcIlwifWZ1bmN0aW9uIGdhKGUscil7dmFyIG49W10saT1bXTtyZXR1cm4gZT10LnRyYW5zZm9ybShlKSxyPXQudHJhbnNmb3JtKHIpLGZ1bmN0aW9uKHQsZSxyLG4pe2lmKHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXSl7dmFyIGk9ci5wdXNoKFwidHJhbnNsYXRlKFwiLG51bGwsXCIsXCIsbnVsbCxcIilcIik7bi5wdXNoKHtpOmktNCx4OkdpKHRbMF0sZVswXSl9LHtpOmktMix4OkdpKHRbMV0sZVsxXSl9KX1lbHNlKGVbMF18fGVbMV0pJiZyLnB1c2goXCJ0cmFuc2xhdGUoXCIrZStcIilcIil9KGUudHJhbnNsYXRlLHIudHJhbnNsYXRlLG4saSksZnVuY3Rpb24odCxlLHIsbil7dCE9PWU/KHQtZT4xODA/ZSs9MzYwOmUtdD4xODAmJih0Kz0zNjApLG4ucHVzaCh7aTpyLnB1c2goZGEocikrXCJyb3RhdGUoXCIsbnVsbCxcIilcIiktMix4OkdpKHQsZSl9KSk6ZSYmci5wdXNoKGRhKHIpK1wicm90YXRlKFwiK2UrXCIpXCIpfShlLnJvdGF0ZSxyLnJvdGF0ZSxuLGkpLGZ1bmN0aW9uKHQsZSxyLG4pe3QhPT1lP24ucHVzaCh7aTpyLnB1c2goZGEocikrXCJza2V3WChcIixudWxsLFwiKVwiKS0yLHg6R2kodCxlKX0pOmUmJnIucHVzaChkYShyKStcInNrZXdYKFwiK2UrXCIpXCIpfShlLnNrZXcsci5za2V3LG4saSksZnVuY3Rpb24odCxlLHIsbil7aWYodFswXSE9PWVbMF18fHRbMV0hPT1lWzFdKXt2YXIgaT1yLnB1c2goZGEocikrXCJzY2FsZShcIixudWxsLFwiLFwiLG51bGwsXCIpXCIpO24ucHVzaCh7aTppLTQseDpHaSh0WzBdLGVbMF0pfSx7aTppLTIseDpHaSh0WzFdLGVbMV0pfSl9ZWxzZSAxPT09ZVswXSYmMT09PWVbMV18fHIucHVzaChkYShyKStcInNjYWxlKFwiK2UrXCIpXCIpfShlLnNjYWxlLHIuc2NhbGUsbixpKSxlPXI9bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGUscj0tMSxhPWkubGVuZ3RoOysrcjxhOyluWyhlPWlbcl0pLmldPWUueCh0KTtyZXR1cm4gbi5qb2luKFwiXCIpfX1mdW5jdGlvbiB2YSh0LGUpe3JldHVybiBlPShlLT10PSt0KXx8MS9lLGZ1bmN0aW9uKHIpe3JldHVybihyLXQpL2V9fWZ1bmN0aW9uIG1hKHQsZSl7cmV0dXJuIGU9KGUtPXQ9K3QpfHwxL2UsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMSwoci10KS9lKSl9fWZ1bmN0aW9uIHlhKHQpe2Zvcih2YXIgZT10LnNvdXJjZSxyPXQudGFyZ2V0LG49ZnVuY3Rpb24odCxlKXtpZih0PT09ZSlyZXR1cm4gdDt2YXIgcj14YSh0KSxuPXhhKGUpLGk9ci5wb3AoKSxhPW4ucG9wKCksbz1udWxsO2Zvcig7aT09PWE7KW89aSxpPXIucG9wKCksYT1uLnBvcCgpO3JldHVybiBvfShlLHIpLGk9W2VdO2UhPT1uOyllPWUucGFyZW50LGkucHVzaChlKTtmb3IodmFyIGE9aS5sZW5ndGg7ciE9PW47KWkuc3BsaWNlKGEsMCxyKSxyPXIucGFyZW50O3JldHVybiBpfWZ1bmN0aW9uIHhhKHQpe2Zvcih2YXIgZT1bXSxyPXQucGFyZW50O251bGwhPXI7KWUucHVzaCh0KSx0PXIscj1yLnBhcmVudDtyZXR1cm4gZS5wdXNoKHQpLGV9ZnVuY3Rpb24gYmEodCl7dC5maXhlZHw9Mn1mdW5jdGlvbiBfYSh0KXt0LmZpeGVkJj0tN31mdW5jdGlvbiB3YSh0KXt0LmZpeGVkfD00LHQucHg9dC54LHQucHk9dC55fWZ1bmN0aW9uIGthKHQpe3QuZml4ZWQmPS01fXQuaW50ZXJwb2xhdGVUcmFuc2Zvcm09Z2EsdC5sYXlvdXQ9e30sdC5sYXlvdXQuYnVuZGxlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPS0xLG49dC5sZW5ndGg7KytyPG47KWUucHVzaCh5YSh0W3JdKSk7cmV0dXJuIGV9fSx0LmxheW91dC5jaG9yZD1mdW5jdGlvbigpe3ZhciBlLHIsbixpLGEsbyxzLGw9e30sYz0wO2Z1bmN0aW9uIHUoKXt2YXIgbCx1LGYscCxkLGc9e30sdj1bXSxtPXQucmFuZ2UoaSkseT1bXTtmb3IoZT1bXSxyPVtdLGw9MCxwPS0xOysrcDxpOyl7Zm9yKHU9MCxkPS0xOysrZDxpOyl1Kz1uW3BdW2RdO3YucHVzaCh1KSx5LnB1c2godC5yYW5nZShpKSksbCs9dX1mb3IoYSYmbS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEodlt0XSx2W2VdKX0pLG8mJnkuZm9yRWFjaChmdW5jdGlvbih0LGUpe3Quc29ydChmdW5jdGlvbih0LHIpe3JldHVybiBvKG5bZV1bdF0sbltlXVtyXSl9KX0pLGw9KE10LWMqaSkvbCx1PTAscD0tMTsrK3A8aTspe2ZvcihmPXUsZD0tMTsrK2Q8aTspe3ZhciB4PW1bcF0sYj15W3hdW2RdLF89blt4XVtiXSx3PXUsaz11Kz1fKmw7Z1t4K1wiLVwiK2JdPXtpbmRleDp4LHN1YmluZGV4OmIsc3RhcnRBbmdsZTp3LGVuZEFuZ2xlOmssdmFsdWU6X319clt4XT17aW5kZXg6eCxzdGFydEFuZ2xlOmYsZW5kQW5nbGU6dSx2YWx1ZTp2W3hdfSx1Kz1jfWZvcihwPS0xOysrcDxpOylmb3IoZD1wLTE7KytkPGk7KXt2YXIgQT1nW3ArXCItXCIrZF0sVD1nW2QrXCItXCIrcF07KEEudmFsdWV8fFQudmFsdWUpJiZlLnB1c2goQS52YWx1ZTxULnZhbHVlP3tzb3VyY2U6VCx0YXJnZXQ6QX06e3NvdXJjZTpBLHRhcmdldDpUfSl9cyYmaCgpfWZ1bmN0aW9uIGgoKXtlLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gcygodC5zb3VyY2UudmFsdWUrdC50YXJnZXQudmFsdWUpLzIsKGUuc291cmNlLnZhbHVlK2UudGFyZ2V0LnZhbHVlKS8yKX0pfXJldHVybiBsLm1hdHJpeD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0obj10KSYmbi5sZW5ndGgsZT1yPW51bGwsbCk6bn0sbC5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsZT1yPW51bGwsbCk6Y30sbC5zb3J0R3JvdXBzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsZT1yPW51bGwsbCk6YX0sbC5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsZT1udWxsLGwpOm99LGwuc29ydENob3Jkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGUmJmgoKSxsKTpzfSxsLmNob3Jkcz1mdW5jdGlvbigpe3JldHVybiBlfHx1KCksZX0sbC5ncm91cHM9ZnVuY3Rpb24oKXtyZXR1cm4gcnx8dSgpLHJ9LGx9LHQubGF5b3V0LmZvcmNlPWZ1bmN0aW9uKCl7dmFyIGUscixuLGksYSxvLHM9e30sbD10LmRpc3BhdGNoKFwic3RhcnRcIixcInRpY2tcIixcImVuZFwiKSxjPVsxLDFdLHU9LjksaD1BYSxmPVRhLHA9LTMwLGQ9TWEsZz0uMSx2PS42NCxtPVtdLHk9W107ZnVuY3Rpb24geCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4saSl7aWYoZS5wb2ludCE9PXQpe3ZhciBhPWUuY3gtdC54LG89ZS5jeS10Lnkscz1pLXIsbD1hKmErbypvO2lmKHMqcy92PGwpe2lmKGw8ZCl7dmFyIGM9ZS5jaGFyZ2UvbDt0LnB4LT1hKmMsdC5weS09bypjfXJldHVybiEwfWlmKGUucG9pbnQmJmwmJmw8ZCl7Yz1lLnBvaW50Q2hhcmdlL2w7dC5weC09YSpjLHQucHktPW8qY319cmV0dXJuIWUuY2hhcmdlfX1mdW5jdGlvbiBiKGUpe2UucHg9dC5ldmVudC54LGUucHk9dC5ldmVudC55LHMucmVzdW1lKCl9cmV0dXJuIHMudGljaz1mdW5jdGlvbigpe2lmKChuKj0uOTkpPC4wMDUpcmV0dXJuIGU9bnVsbCxsLmVuZCh7dHlwZTpcImVuZFwiLGFscGhhOm49MH0pLCEwO3ZhciByLHMsaCxmLGQsdixiLF8sdyxrPW0ubGVuZ3RoLEE9eS5sZW5ndGg7Zm9yKHM9MDtzPEE7KytzKWY9KGg9eVtzXSkuc291cmNlLCh2PShfPShkPWgudGFyZ2V0KS54LWYueCkqXysodz1kLnktZi55KSp3KSYmKF8qPXY9biphW3NdKigodj1NYXRoLnNxcnQodikpLWlbc10pL3Ysdyo9dixkLngtPV8qKGI9Zi53ZWlnaHQrZC53ZWlnaHQ/Zi53ZWlnaHQvKGYud2VpZ2h0K2Qud2VpZ2h0KTouNSksZC55LT13KmIsZi54Kz1fKihiPTEtYiksZi55Kz13KmIpO2lmKChiPW4qZykmJihfPWNbMF0vMix3PWNbMV0vMixzPS0xLGIpKWZvcig7KytzPGs7KShoPW1bc10pLngrPShfLWgueCkqYixoLnkrPSh3LWgueSkqYjtpZihwKWZvcighZnVuY3Rpb24gdChlLHIsbil7dmFyIGk9MCxhPTA7ZS5jaGFyZ2U9MDtpZighZS5sZWFmKWZvcih2YXIgbyxzPWUubm9kZXMsbD1zLmxlbmd0aCxjPS0xOysrYzxsOyludWxsIT0obz1zW2NdKSYmKHQobyxyLG4pLGUuY2hhcmdlKz1vLmNoYXJnZSxpKz1vLmNoYXJnZSpvLmN4LGErPW8uY2hhcmdlKm8uY3kpO2lmKGUucG9pbnQpe2UubGVhZnx8KGUucG9pbnQueCs9TWF0aC5yYW5kb20oKS0uNSxlLnBvaW50LnkrPU1hdGgucmFuZG9tKCktLjUpO3ZhciB1PXIqbltlLnBvaW50LmluZGV4XTtlLmNoYXJnZSs9ZS5wb2ludENoYXJnZT11LGkrPXUqZS5wb2ludC54LGErPXUqZS5wb2ludC55fWUuY3g9aS9lLmNoYXJnZTtlLmN5PWEvZS5jaGFyZ2V9KHI9dC5nZW9tLnF1YWR0cmVlKG0pLG4sbykscz0tMTsrK3M8azspKGg9bVtzXSkuZml4ZWR8fHIudmlzaXQoeChoKSk7Zm9yKHM9LTE7KytzPGs7KShoPW1bc10pLmZpeGVkPyhoLng9aC5weCxoLnk9aC5weSk6KGgueC09KGgucHgtKGgucHg9aC54KSkqdSxoLnktPShoLnB5LShoLnB5PWgueSkpKnUpO2wudGljayh7dHlwZTpcInRpY2tcIixhbHBoYTpufSl9LHMubm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09dCxzKTptfSxzLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PXQscyk6eX0scy5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQscyk6Y30scy5saW5rRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Oit0LHMpOmh9LHMuZGlzdGFuY2U9cy5saW5rRGlzdGFuY2Uscy5saW5rU3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Oit0LHMpOmZ9LHMuZnJpY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K3Qscyk6dX0scy5jaGFyZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Oit0LHMpOnB9LHMuY2hhcmdlRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9dCp0LHMpOk1hdGguc3FydChkKX0scy5ncmF2aXR5PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSt0LHMpOmd9LHMudGhldGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9dCp0LHMpOk1hdGguc3FydCh2KX0scy5hbHBoYT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rdCxuP3Q+MD9uPXQ6KGUuYz1udWxsLGUudD1OYU4sZT1udWxsLGwuZW5kKHt0eXBlOlwiZW5kXCIsYWxwaGE6bj0wfSkpOnQ+MCYmKGwuc3RhcnQoe3R5cGU6XCJzdGFydFwiLGFscGhhOm49dH0pLGU9QWUocy50aWNrKSkscyk6bn0scy5zdGFydD1mdW5jdGlvbigpe3ZhciB0LGUscixuPW0ubGVuZ3RoLGw9eS5sZW5ndGgsdT1jWzBdLGQ9Y1sxXTtmb3IodD0wO3Q8bjsrK3QpKHI9bVt0XSkuaW5kZXg9dCxyLndlaWdodD0wO2Zvcih0PTA7dDxsOysrdClcIm51bWJlclwiPT10eXBlb2Yocj15W3RdKS5zb3VyY2UmJihyLnNvdXJjZT1tW3Iuc291cmNlXSksXCJudW1iZXJcIj09dHlwZW9mIHIudGFyZ2V0JiYoci50YXJnZXQ9bVtyLnRhcmdldF0pLCsrci5zb3VyY2Uud2VpZ2h0LCsrci50YXJnZXQud2VpZ2h0O2Zvcih0PTA7dDxuOysrdClyPW1bdF0saXNOYU4oci54KSYmKHIueD1nKFwieFwiLHUpKSxpc05hTihyLnkpJiYoci55PWcoXCJ5XCIsZCkpLGlzTmFOKHIucHgpJiYoci5weD1yLngpLGlzTmFOKHIucHkpJiYoci5weT1yLnkpO2lmKGk9W10sXCJmdW5jdGlvblwiPT10eXBlb2YgaClmb3IodD0wO3Q8bDsrK3QpaVt0XT0raC5jYWxsKHRoaXMseVt0XSx0KTtlbHNlIGZvcih0PTA7dDxsOysrdClpW3RdPWg7aWYoYT1bXSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBmKWZvcih0PTA7dDxsOysrdClhW3RdPStmLmNhbGwodGhpcyx5W3RdLHQpO2Vsc2UgZm9yKHQ9MDt0PGw7Kyt0KWFbdF09ZjtpZihvPVtdLFwiZnVuY3Rpb25cIj09dHlwZW9mIHApZm9yKHQ9MDt0PG47Kyt0KW9bdF09K3AuY2FsbCh0aGlzLG1bdF0sdCk7ZWxzZSBmb3IodD0wO3Q8bjsrK3Qpb1t0XT1wO2Z1bmN0aW9uIGcocixpKXtpZighZSl7Zm9yKGU9bmV3IEFycmF5KG4pLGM9MDtjPG47KytjKWVbY109W107Zm9yKGM9MDtjPGw7KytjKXt2YXIgYT15W2NdO2VbYS5zb3VyY2UuaW5kZXhdLnB1c2goYS50YXJnZXQpLGVbYS50YXJnZXQuaW5kZXhdLnB1c2goYS5zb3VyY2UpfX1mb3IodmFyIG8scz1lW3RdLGM9LTEsdT1zLmxlbmd0aDsrK2M8dTspaWYoIWlzTmFOKG89c1tjXVtyXSkpcmV0dXJuIG87cmV0dXJuIE1hdGgucmFuZG9tKCkqaX1yZXR1cm4gcy5yZXN1bWUoKX0scy5yZXN1bWU9ZnVuY3Rpb24oKXtyZXR1cm4gcy5hbHBoYSguMSl9LHMuc3RvcD1mdW5jdGlvbigpe3JldHVybiBzLmFscGhhKDApfSxzLmRyYWc9ZnVuY3Rpb24oKXtpZihyfHwocj10LmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oeikub24oXCJkcmFnc3RhcnQuZm9yY2VcIixiYSkub24oXCJkcmFnLmZvcmNlXCIsYikub24oXCJkcmFnZW5kLmZvcmNlXCIsX2EpKSwhYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcjt0aGlzLm9uKFwibW91c2VvdmVyLmZvcmNlXCIsd2EpLm9uKFwibW91c2VvdXQuZm9yY2VcIixrYSkuY2FsbChyKX0sdC5yZWJpbmQocyxsLFwib25cIil9O3ZhciBBYT0yMCxUYT0xLE1hPTEvMDtmdW5jdGlvbiBTYShlLHIpe3JldHVybiB0LnJlYmluZChlLHIsXCJzb3J0XCIsXCJjaGlsZHJlblwiLFwidmFsdWVcIiksZS5ub2Rlcz1lLGUubGlua3M9SWEsZX1mdW5jdGlvbiBFYSh0LGUpe2Zvcih2YXIgcj1bdF07bnVsbCE9KHQ9ci5wb3AoKSk7KWlmKGUodCksKGk9dC5jaGlsZHJlbikmJihuPWkubGVuZ3RoKSlmb3IodmFyIG4saTstLW4+PTA7KXIucHVzaChpW25dKX1mdW5jdGlvbiBDYSh0LGUpe2Zvcih2YXIgcj1bdF0sbj1bXTtudWxsIT0odD1yLnBvcCgpKTspaWYobi5wdXNoKHQpLChhPXQuY2hpbGRyZW4pJiYoaT1hLmxlbmd0aCkpZm9yKHZhciBpLGEsbz0tMTsrK288aTspci5wdXNoKGFbb10pO2Zvcig7bnVsbCE9KHQ9bi5wb3AoKSk7KWUodCl9ZnVuY3Rpb24gTGEodCl7cmV0dXJuIHQuY2hpbGRyZW59ZnVuY3Rpb24gemEodCl7cmV0dXJuIHQudmFsdWV9ZnVuY3Rpb24gT2EodCxlKXtyZXR1cm4gZS52YWx1ZS10LnZhbHVlfWZ1bmN0aW9uIElhKGUpe3JldHVybiB0Lm1lcmdlKGUubWFwKGZ1bmN0aW9uKHQpe3JldHVybih0LmNoaWxkcmVufHxbXSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6dCx0YXJnZXQ6ZX19KX0pKX10LmxheW91dC5oaWVyYXJjaHk9ZnVuY3Rpb24oKXt2YXIgdD1PYSxlPUxhLHI9emE7ZnVuY3Rpb24gbihpKXt2YXIgYSxvPVtpXSxzPVtdO2ZvcihpLmRlcHRoPTA7bnVsbCE9KGE9by5wb3AoKSk7KWlmKHMucHVzaChhKSwoYz1lLmNhbGwobixhLGEuZGVwdGgpKSYmKGw9Yy5sZW5ndGgpKXtmb3IodmFyIGwsYyx1Oy0tbD49MDspby5wdXNoKHU9Y1tsXSksdS5wYXJlbnQ9YSx1LmRlcHRoPWEuZGVwdGgrMTtyJiYoYS52YWx1ZT0wKSxhLmNoaWxkcmVuPWN9ZWxzZSByJiYoYS52YWx1ZT0rci5jYWxsKG4sYSxhLmRlcHRoKXx8MCksZGVsZXRlIGEuY2hpbGRyZW47cmV0dXJuIENhKGksZnVuY3Rpb24oZSl7dmFyIG4saTt0JiYobj1lLmNoaWxkcmVuKSYmbi5zb3J0KHQpLHImJihpPWUucGFyZW50KSYmKGkudmFsdWUrPWUudmFsdWUpfSksc31yZXR1cm4gbi5zb3J0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbik6dH0sbi5jaGlsZHJlbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4udmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxuLnJldmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHImJihFYSh0LGZ1bmN0aW9uKHQpe3QuY2hpbGRyZW4mJih0LnZhbHVlPTApfSksQ2EodCxmdW5jdGlvbih0KXt2YXIgZTt0LmNoaWxkcmVufHwodC52YWx1ZT0rci5jYWxsKG4sdCx0LmRlcHRoKXx8MCksKGU9dC5wYXJlbnQpJiYoZS52YWx1ZSs9dC52YWx1ZSl9KSksdH0sbn0sdC5sYXlvdXQucGFydGl0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dC5sYXlvdXQuaGllcmFyY2h5KCkscj1bMSwxXTtmdW5jdGlvbiBuKHQsbil7dmFyIGk9ZS5jYWxsKHRoaXMsdCxuKTtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgYT1lLmNoaWxkcmVuO2lmKGUueD1yLGUueT1lLmRlcHRoKmksZS5keD1uLGUuZHk9aSxhJiYobz1hLmxlbmd0aCkpe3ZhciBvLHMsbCxjPS0xO2ZvcihuPWUudmFsdWU/bi9lLnZhbHVlOjA7KytjPG87KXQocz1hW2NdLHIsbD1zLnZhbHVlKm4saSkscis9bH19KGlbMF0sMCxyWzBdLHJbMV0vZnVuY3Rpb24gdChlKXt2YXIgcj1lLmNoaWxkcmVuLG49MDtpZihyJiYoaT1yLmxlbmd0aCkpZm9yKHZhciBpLGE9LTE7KythPGk7KW49TWF0aC5tYXgobix0KHJbYV0pKTtyZXR1cm4gMStufShpWzBdKSksaX1yZXR1cm4gbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sU2EobixlKX0sdC5sYXlvdXQucGllPWZ1bmN0aW9uKCl7dmFyIGU9TnVtYmVyLHI9RGEsbj0wLGk9TXQsYT0wO2Z1bmN0aW9uIG8ocyl7dmFyIGwsYz1zLmxlbmd0aCx1PXMubWFwKGZ1bmN0aW9uKHQscil7cmV0dXJuK2UuY2FsbChvLHQscil9KSxoPSsoXCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuKSxmPShcImZ1bmN0aW9uXCI9PXR5cGVvZiBpP2kuYXBwbHkodGhpcyxhcmd1bWVudHMpOmkpLWgscD1NYXRoLm1pbihNYXRoLmFicyhmKS9jLCsoXCJmdW5jdGlvblwiPT10eXBlb2YgYT9hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTphKSksZD1wKihmPDA/LTE6MSksZz10LnN1bSh1KSx2PWc/KGYtYypkKS9nOjAsbT10LnJhbmdlKGMpLHk9W107cmV0dXJuIG51bGwhPXImJm0uc29ydChyPT09RGE/ZnVuY3Rpb24odCxlKXtyZXR1cm4gdVtlXS11W3RdfTpmdW5jdGlvbih0LGUpe3JldHVybiByKHNbdF0sc1tlXSl9KSxtLmZvckVhY2goZnVuY3Rpb24odCl7eVt0XT17ZGF0YTpzW3RdLHZhbHVlOmw9dVt0XSxzdGFydEFuZ2xlOmgsZW5kQW5nbGU6aCs9bCp2K2QscGFkQW5nbGU6cH19KSx5fXJldHVybiBvLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbyk6ZX0sby5zb3J0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbyk6cn0sby5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsbyk6bn0sby5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LG8pOml9LG8ucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxvKTphfSxvfTt2YXIgRGE9e307ZnVuY3Rpb24gUGEodCl7cmV0dXJuIHQueH1mdW5jdGlvbiBSYSh0KXtyZXR1cm4gdC55fWZ1bmN0aW9uIEZhKHQsZSxyKXt0LnkwPWUsdC55PXJ9dC5sYXlvdXQuc3RhY2s9ZnVuY3Rpb24oKXt2YXIgZT16LHI9amEsbj1WYSxpPUZhLGE9UGEsbz1SYTtmdW5jdGlvbiBzKGwsYyl7aWYoIShwPWwubGVuZ3RoKSlyZXR1cm4gbDt2YXIgdT1sLm1hcChmdW5jdGlvbih0LHIpe3JldHVybiBlLmNhbGwocyx0LHIpfSksaD11Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm5bYS5jYWxsKHMsdCxlKSxvLmNhbGwocyx0LGUpXX0pfSksZj1yLmNhbGwocyxoLGMpO3U9dC5wZXJtdXRlKHUsZiksaD10LnBlcm11dGUoaCxmKTt2YXIgcCxkLGcsdixtPW4uY2FsbChzLGgsYykseT11WzBdLmxlbmd0aDtmb3IoZz0wO2c8eTsrK2cpZm9yKGkuY2FsbChzLHVbMF1bZ10sdj1tW2ddLGhbMF1bZ11bMV0pLGQ9MTtkPHA7KytkKWkuY2FsbChzLHVbZF1bZ10sdis9aFtkLTFdW2ddWzFdLGhbZF1bZ11bMV0pO3JldHVybiBsfXJldHVybiBzLnZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LHMpOmV9LHMub3JkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OkJhLmdldCh0KXx8amEscyk6cn0scy5vZmZzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Ok5hLmdldCh0KXx8VmEscyk6bn0scy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQscyk6YX0scy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQscyk6b30scy5vdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxzKTppfSxzfTt2YXIgQmE9dC5tYXAoe1wiaW5zaWRlLW91dFwiOmZ1bmN0aW9uKGUpe3ZhciByLG4saT1lLmxlbmd0aCxhPWUubWFwKFVhKSxvPWUubWFwKHFhKSxzPXQucmFuZ2UoaSkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBhW3RdLWFbZV19KSxsPTAsYz0wLHU9W10saD1bXTtmb3Iocj0wO3I8aTsrK3Ipbj1zW3JdLGw8Yz8obCs9b1tuXSx1LnB1c2gobikpOihjKz1vW25dLGgucHVzaChuKSk7cmV0dXJuIGgucmV2ZXJzZSgpLmNvbmNhdCh1KX0scmV2ZXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gdC5yYW5nZShlLmxlbmd0aCkucmV2ZXJzZSgpfSxkZWZhdWx0OmphfSksTmE9dC5tYXAoe3NpbGhvdWV0dGU6ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9dC5sZW5ndGgsYT10WzBdLmxlbmd0aCxvPVtdLHM9MCxsPVtdO2ZvcihyPTA7cjxhOysrcil7Zm9yKGU9MCxuPTA7ZTxpO2UrKyluKz10W2VdW3JdWzFdO24+cyYmKHM9biksby5wdXNoKG4pfWZvcihyPTA7cjxhOysrcilsW3JdPShzLW9bcl0pLzI7cmV0dXJuIGx9LHdpZ2dsZTpmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scyxsLGMsdT10Lmxlbmd0aCxoPXRbMF0sZj1oLmxlbmd0aCxwPVtdO2ZvcihwWzBdPWw9Yz0wLHI9MTtyPGY7KytyKXtmb3IoZT0wLGk9MDtlPHU7KytlKWkrPXRbZV1bcl1bMV07Zm9yKGU9MCxhPTAscz1oW3JdWzBdLWhbci0xXVswXTtlPHU7KytlKXtmb3Iobj0wLG89KHRbZV1bcl1bMV0tdFtlXVtyLTFdWzFdKS8oMipzKTtuPGU7KytuKW8rPSh0W25dW3JdWzFdLXRbbl1bci0xXVsxXSkvczthKz1vKnRbZV1bcl1bMV19cFtyXT1sLT1pP2EvaSpzOjAsbDxjJiYoYz1sKX1mb3Iocj0wO3I8ZjsrK3IpcFtyXS09YztyZXR1cm4gcH0sZXhwYW5kOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXQubGVuZ3RoLGE9dFswXS5sZW5ndGgsbz0xL2kscz1bXTtmb3Iocj0wO3I8YTsrK3Ipe2ZvcihlPTAsbj0wO2U8aTtlKyspbis9dFtlXVtyXVsxXTtpZihuKWZvcihlPTA7ZTxpO2UrKyl0W2VdW3JdWzFdLz1uO2Vsc2UgZm9yKGU9MDtlPGk7ZSsrKXRbZV1bcl1bMV09b31mb3Iocj0wO3I8YTsrK3Ipc1tyXT0wO3JldHVybiBzfSx6ZXJvOlZhfSk7ZnVuY3Rpb24gamEoZSl7cmV0dXJuIHQucmFuZ2UoZS5sZW5ndGgpfWZ1bmN0aW9uIFZhKHQpe2Zvcih2YXIgZT0tMSxyPXRbMF0ubGVuZ3RoLG49W107KytlPHI7KW5bZV09MDtyZXR1cm4gbn1mdW5jdGlvbiBVYSh0KXtmb3IodmFyIGUscj0xLG49MCxpPXRbMF1bMV0sYT10Lmxlbmd0aDtyPGE7KytyKShlPXRbcl1bMV0pPmkmJihuPXIsaT1lKTtyZXR1cm4gbn1mdW5jdGlvbiBxYSh0KXtyZXR1cm4gdC5yZWR1Y2UoSGEsMCl9ZnVuY3Rpb24gSGEodCxlKXtyZXR1cm4gdCtlWzFdfWZ1bmN0aW9uIEdhKHQsZSl7cmV0dXJuIFlhKHQsTWF0aC5jZWlsKE1hdGgubG9nKGUubGVuZ3RoKS9NYXRoLkxOMisxKSl9ZnVuY3Rpb24gWWEodCxlKXtmb3IodmFyIHI9LTEsbj0rdFswXSxpPSh0WzFdLW4pL2UsYT1bXTsrK3I8PWU7KWFbcl09aSpyK247cmV0dXJuIGF9ZnVuY3Rpb24gV2EoZSl7cmV0dXJuW3QubWluKGUpLHQubWF4KGUpXX1mdW5jdGlvbiBYYSh0LGUpe3JldHVybiB0LnZhbHVlLWUudmFsdWV9ZnVuY3Rpb24gWmEodCxlKXt2YXIgcj10Ll9wYWNrX25leHQ7dC5fcGFja19uZXh0PWUsZS5fcGFja19wcmV2PXQsZS5fcGFja19uZXh0PXIsci5fcGFja19wcmV2PWV9ZnVuY3Rpb24gJGEodCxlKXt0Ll9wYWNrX25leHQ9ZSxlLl9wYWNrX3ByZXY9dH1mdW5jdGlvbiBKYSh0LGUpe3ZhciByPWUueC10Lngsbj1lLnktdC55LGk9dC5yK2UucjtyZXR1cm4uOTk5KmkqaT5yKnIrbipufWZ1bmN0aW9uIEthKHQpe2lmKChlPXQuY2hpbGRyZW4pJiYobD1lLmxlbmd0aCkpe3ZhciBlLHIsbixpLGEsbyxzLGwsYz0xLzAsdT0tMS8wLGg9MS8wLGY9LTEvMDtpZihlLmZvckVhY2goUWEpLChyPWVbMF0pLng9LXIucixyLnk9MCx4KHIpLGw+MSYmKChuPWVbMV0pLng9bi5yLG4ueT0wLHgobiksbD4yKSlmb3IoZW8ocixuLGk9ZVsyXSkseChpKSxaYShyLGkpLHIuX3BhY2tfcHJldj1pLFphKGksbiksbj1yLl9wYWNrX25leHQsYT0zO2E8bDthKyspe2VvKHIsbixpPWVbYV0pO3ZhciBwPTAsZD0xLGc9MTtmb3Iobz1uLl9wYWNrX25leHQ7byE9PW47bz1vLl9wYWNrX25leHQsZCsrKWlmKEphKG8saSkpe3A9MTticmVha31pZigxPT1wKWZvcihzPXIuX3BhY2tfcHJldjtzIT09by5fcGFja19wcmV2JiYhSmEocyxpKTtzPXMuX3BhY2tfcHJldixnKyspO3A/KGQ8Z3x8ZD09ZyYmbi5yPHIucj8kYShyLG49byk6JGEocj1zLG4pLGEtLSk6KFphKHIsaSksbj1pLHgoaSkpfXZhciB2PShjK3UpLzIsbT0oaCtmKS8yLHk9MDtmb3IoYT0wO2E8bDthKyspKGk9ZVthXSkueC09dixpLnktPW0seT1NYXRoLm1heCh5LGkucitNYXRoLnNxcnQoaS54KmkueCtpLnkqaS55KSk7dC5yPXksZS5mb3JFYWNoKHRvKX1mdW5jdGlvbiB4KHQpe2M9TWF0aC5taW4odC54LXQucixjKSx1PU1hdGgubWF4KHQueCt0LnIsdSksaD1NYXRoLm1pbih0LnktdC5yLGgpLGY9TWF0aC5tYXgodC55K3QucixmKX19ZnVuY3Rpb24gUWEodCl7dC5fcGFja19uZXh0PXQuX3BhY2tfcHJldj10fWZ1bmN0aW9uIHRvKHQpe2RlbGV0ZSB0Ll9wYWNrX25leHQsZGVsZXRlIHQuX3BhY2tfcHJldn1mdW5jdGlvbiBlbyh0LGUscil7dmFyIG49dC5yK3IucixpPWUueC10LngsYT1lLnktdC55O2lmKG4mJihpfHxhKSl7dmFyIG89ZS5yK3IucixzPWkqaSthKmEsbD0uNSsoKG4qPW4pLShvKj1vKSkvKDIqcyksYz1NYXRoLnNxcnQoTWF0aC5tYXgoMCwyKm8qKG4rcyktKG4tPXMpKm4tbypvKSkvKDIqcyk7ci54PXQueCtsKmkrYyphLHIueT10LnkrbCphLWMqaX1lbHNlIHIueD10LngrbixyLnk9dC55fWZ1bmN0aW9uIHJvKHQsZSl7cmV0dXJuIHQucGFyZW50PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gbm8odCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZS5sZW5ndGg/ZVswXTp0LnR9ZnVuY3Rpb24gaW8odCl7dmFyIGUscj10LmNoaWxkcmVuO3JldHVybihlPXIubGVuZ3RoKT9yW2UtMV06dC50fWZ1bmN0aW9uIGFvKHQsZSxyKXt2YXIgbj1yLyhlLmktdC5pKTtlLmMtPW4sZS5zKz1yLHQuYys9bixlLnorPXIsZS5tKz1yfWZ1bmN0aW9uIG9vKHQsZSxyKXtyZXR1cm4gdC5hLnBhcmVudD09PWUucGFyZW50P3QuYTpyfWZ1bmN0aW9uIHNvKHQpe3JldHVybnt4OnQueCx5OnQueSxkeDp0LmR4LGR5OnQuZHl9fWZ1bmN0aW9uIGxvKHQsZSl7dmFyIHI9dC54K2VbM10sbj10LnkrZVswXSxpPXQuZHgtZVsxXS1lWzNdLGE9dC5keS1lWzBdLWVbMl07cmV0dXJuIGk8MCYmKHIrPWkvMixpPTApLGE8MCYmKG4rPWEvMixhPTApLHt4OnIseTpuLGR4OmksZHk6YX19ZnVuY3Rpb24gY28odCl7dmFyIGU9dFswXSxyPXRbdC5sZW5ndGgtMV07cmV0dXJuIGU8cj9bZSxyXTpbcixlXX1mdW5jdGlvbiB1byh0KXtyZXR1cm4gdC5yYW5nZUV4dGVudD90LnJhbmdlRXh0ZW50KCk6Y28odC5yYW5nZSgpKX1mdW5jdGlvbiBobyh0LGUscixuKXt2YXIgaT1yKHRbMF0sdFsxXSksYT1uKGVbMF0sZVsxXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBhKGkodCkpfX1mdW5jdGlvbiBmbyh0LGUpe3ZhciByLG49MCxpPXQubGVuZ3RoLTEsYT10W25dLG89dFtpXTtyZXR1cm4gbzxhJiYocj1uLG49aSxpPXIscj1hLGE9byxvPXIpLHRbbl09ZS5mbG9vcihhKSx0W2ldPWUuY2VpbChvKSx0fWZ1bmN0aW9uIHBvKHQpe3JldHVybiB0P3tmbG9vcjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5mbG9vcihlL3QpKnR9LGNlaWw6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguY2VpbChlL3QpKnR9fTpnb310LmxheW91dC5oaXN0b2dyYW09ZnVuY3Rpb24oKXt2YXIgZT0hMCxyPU51bWJlcixuPVdhLGk9R2E7ZnVuY3Rpb24gYShhLG8pe2Zvcih2YXIgcyxsLGM9W10sdT1hLm1hcChyLHRoaXMpLGg9bi5jYWxsKHRoaXMsdSxvKSxmPWkuY2FsbCh0aGlzLGgsdSxvKSxwPShvPS0xLHUubGVuZ3RoKSxkPWYubGVuZ3RoLTEsZz1lPzE6MS9wOysrbzxkOykocz1jW29dPVtdKS5keD1mW28rMV0tKHMueD1mW29dKSxzLnk9MDtpZihkPjApZm9yKG89LTE7KytvPHA7KShsPXVbb10pPj1oWzBdJiZsPD1oWzFdJiYoKHM9Y1t0LmJpc2VjdChmLGwsMSxkKS0xXSkueSs9ZyxzLnB1c2goYVtvXSkpO3JldHVybiBjfXJldHVybiBhLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sYS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj12ZSh0KSxhKTpufSxhLmJpbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9XCJudW1iZXJcIj09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7cmV0dXJuIFlhKGUsdCl9OnZlKHQpLGEpOml9LGEuZnJlcXVlbmN5PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSEhdCxhKTplfSxhfSx0LmxheW91dC5wYWNrPWZ1bmN0aW9uKCl7dmFyIGUscj10LmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KFhhKSxuPTAsaT1bMSwxXTtmdW5jdGlvbiBhKHQsYSl7dmFyIG89ci5jYWxsKHRoaXMsdCxhKSxzPW9bMF0sbD1pWzBdLGM9aVsxXSx1PW51bGw9PWU/TWF0aC5zcXJ0OlwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTpmdW5jdGlvbigpe3JldHVybiBlfTtpZihzLng9cy55PTAsQ2EocyxmdW5jdGlvbih0KXt0LnI9K3UodC52YWx1ZSl9KSxDYShzLEthKSxuKXt2YXIgaD1uKihlPzE6TWF0aC5tYXgoMipzLnIvbCwyKnMuci9jKSkvMjtDYShzLGZ1bmN0aW9uKHQpe3Qucis9aH0pLENhKHMsS2EpLENhKHMsZnVuY3Rpb24odCl7dC5yLT1ofSl9cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4saSl7dmFyIGE9ZS5jaGlsZHJlbjtlLng9cis9aSplLng7ZS55PW4rPWkqZS55O2Uucio9aTtpZihhKWZvcih2YXIgbz0tMSxzPWEubGVuZ3RoOysrbzxzOyl0KGFbb10scixuLGkpfShzLGwvMixjLzIsZT8xOjEvTWF0aC5tYXgoMipzLnIvbCwyKnMuci9jKSksb31yZXR1cm4gYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsYSk6aX0sYS5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dHx8XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Oit0LGEpOmV9LGEucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxhKTpufSxTYShhLHIpfSx0LmxheW91dC50cmVlPWZ1bmN0aW9uKCl7dmFyIGU9dC5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChudWxsKS52YWx1ZShudWxsKSxyPXJvLG49WzEsMV0saT1udWxsO2Z1bmN0aW9uIGEodCxhKXt2YXIgYz1lLmNhbGwodGhpcyx0LGEpLHU9Y1swXSxoPWZ1bmN0aW9uKHQpe3ZhciBlLHI9e0E6bnVsbCxjaGlsZHJlbjpbdF19LG49W3JdO2Zvcig7bnVsbCE9KGU9bi5wb3AoKSk7KWZvcih2YXIgaSxhPWUuY2hpbGRyZW4sbz0wLHM9YS5sZW5ndGg7bzxzOysrbyluLnB1c2goKGFbb109aT17XzphW29dLHBhcmVudDplLGNoaWxkcmVuOihpPWFbb10uY2hpbGRyZW4pJiZpLnNsaWNlKCl8fFtdLEE6bnVsbCxhOm51bGwsejowLG06MCxjOjAsczowLHQ6bnVsbCxpOm99KS5hPWkpO3JldHVybiByLmNoaWxkcmVuWzBdfSh1KTtpZihDYShoLG8pLGgucGFyZW50Lm09LWgueixFYShoLHMpLGkpRWEodSxsKTtlbHNle3ZhciBmPXUscD11LGQ9dTtFYSh1LGZ1bmN0aW9uKHQpe3QueDxmLngmJihmPXQpLHQueD5wLngmJihwPXQpLHQuZGVwdGg+ZC5kZXB0aCYmKGQ9dCl9KTt2YXIgZz1yKGYscCkvMi1mLngsdj1uWzBdLyhwLngrcihwLGYpLzIrZyksbT1uWzFdLyhkLmRlcHRofHwxKTtFYSh1LGZ1bmN0aW9uKHQpe3QueD0odC54K2cpKnYsdC55PXQuZGVwdGgqbX0pfXJldHVybiBjfWZ1bmN0aW9uIG8odCl7dmFyIGU9dC5jaGlsZHJlbixuPXQucGFyZW50LmNoaWxkcmVuLGk9dC5pP25bdC5pLTFdOm51bGw7aWYoZS5sZW5ndGgpeyFmdW5jdGlvbih0KXt2YXIgZSxyPTAsbj0wLGk9dC5jaGlsZHJlbixhPWkubGVuZ3RoO2Zvcig7LS1hPj0wOykoZT1pW2FdKS56Kz1yLGUubSs9cixyKz1lLnMrKG4rPWUuYyl9KHQpO3ZhciBhPShlWzBdLnorZVtlLmxlbmd0aC0xXS56KS8yO2k/KHQuej1pLnorcih0Ll8saS5fKSx0Lm09dC56LWEpOnQuej1hfWVsc2UgaSYmKHQuej1pLnorcih0Ll8saS5fKSk7dC5wYXJlbnQuQT1mdW5jdGlvbih0LGUsbil7aWYoZSl7Zm9yKHZhciBpLGE9dCxvPXQscz1lLGw9YS5wYXJlbnQuY2hpbGRyZW5bMF0sYz1hLm0sdT1vLm0saD1zLm0sZj1sLm07cz1pbyhzKSxhPW5vKGEpLHMmJmE7KWw9bm8obCksKG89aW8obykpLmE9dCwoaT1zLnoraC1hLnotYytyKHMuXyxhLl8pKT4wJiYoYW8ob28ocyx0LG4pLHQsaSksYys9aSx1Kz1pKSxoKz1zLm0sYys9YS5tLGYrPWwubSx1Kz1vLm07cyYmIWlvKG8pJiYoby50PXMsby5tKz1oLXUpLGEmJiFubyhsKSYmKGwudD1hLGwubSs9Yy1mLG49dCl9cmV0dXJuIG59KHQsaSx0LnBhcmVudC5BfHxuWzBdKX1mdW5jdGlvbiBzKHQpe3QuXy54PXQueit0LnBhcmVudC5tLHQubSs9dC5wYXJlbnQubX1mdW5jdGlvbiBsKHQpe3QueCo9blswXSx0Lnk9dC5kZXB0aCpuWzFdfXJldHVybiBhLnNlcGFyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxhKTpyfSxhLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09KG49dCk/bDpudWxsLGEpOmk/bnVsbDpufSxhLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PShuPXQpP251bGw6bCxhKTppP246bnVsbH0sU2EoYSxlKX0sdC5sYXlvdXQuY2x1c3Rlcj1mdW5jdGlvbigpe3ZhciBlPXQubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQobnVsbCkudmFsdWUobnVsbCkscj1ybyxuPVsxLDFdLGk9ITE7ZnVuY3Rpb24gYShhLG8pe3ZhciBzLGw9ZS5jYWxsKHRoaXMsYSxvKSxjPWxbMF0sdT0wO0NhKGMsZnVuY3Rpb24oZSl7dmFyIG49ZS5jaGlsZHJlbjtuJiZuLmxlbmd0aD8oZS54PWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0K2UueH0sMCkvdC5sZW5ndGh9KG4pLGUueT1mdW5jdGlvbihlKXtyZXR1cm4gMSt0Lm1heChlLGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KX0obikpOihlLng9cz91Kz1yKGUscyk6MCxlLnk9MCxzPWUpfSk7dmFyIGg9ZnVuY3Rpb24gdChlKXt2YXIgcj1lLmNoaWxkcmVuO3JldHVybiByJiZyLmxlbmd0aD90KHJbMF0pOmV9KGMpLGY9ZnVuY3Rpb24gdChlKXt2YXIgcixuPWUuY2hpbGRyZW47cmV0dXJuIG4mJihyPW4ubGVuZ3RoKT90KG5bci0xXSk6ZX0oYykscD1oLngtcihoLGYpLzIsZD1mLngrcihmLGgpLzI7cmV0dXJuIENhKGMsaT9mdW5jdGlvbih0KXt0Lng9KHQueC1jLngpKm5bMF0sdC55PShjLnktdC55KSpuWzFdfTpmdW5jdGlvbih0KXt0Lng9KHQueC1wKS8oZC1wKSpuWzBdLHQueT0oMS0oYy55P3QueS9jLnk6MSkpKm5bMV19KSxsfXJldHVybiBhLnNlcGFyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxhKTpyfSxhLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09KG49dCksYSk6aT9udWxsOm59LGEubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbCE9KG49dCksYSk6aT9uOm51bGx9LFNhKGEsZSl9LHQubGF5b3V0LnRyZWVtYXA9ZnVuY3Rpb24oKXt2YXIgZSxyPXQubGF5b3V0LmhpZXJhcmNoeSgpLG49TWF0aC5yb3VuZCxpPVsxLDFdLGE9bnVsbCxvPXNvLHM9ITEsbD1cInNxdWFyaWZ5XCIsYz0uNSooMStNYXRoLnNxcnQoNSkpO2Z1bmN0aW9uIHUodCxlKXtmb3IodmFyIHIsbixpPS0xLGE9dC5sZW5ndGg7KytpPGE7KW49KHI9dFtpXSkudmFsdWUqKGU8MD8wOmUpLHIuYXJlYT1pc05hTihuKXx8bjw9MD8wOm59ZnVuY3Rpb24gaCh0KXt2YXIgZT10LmNoaWxkcmVuO2lmKGUmJmUubGVuZ3RoKXt2YXIgcixuLGksYT1vKHQpLHM9W10sYz1lLnNsaWNlKCksZj0xLzAsZz1cInNsaWNlXCI9PT1sP2EuZHg6XCJkaWNlXCI9PT1sP2EuZHk6XCJzbGljZS1kaWNlXCI9PT1sPzEmdC5kZXB0aD9hLmR5OmEuZHg6TWF0aC5taW4oYS5keCxhLmR5KTtmb3IodShjLGEuZHgqYS5keS90LnZhbHVlKSxzLmFyZWE9MDsoaT1jLmxlbmd0aCk+MDspcy5wdXNoKHI9Y1tpLTFdKSxzLmFyZWErPXIuYXJlYSxcInNxdWFyaWZ5XCIhPT1sfHwobj1wKHMsZykpPD1mPyhjLnBvcCgpLGY9bik6KHMuYXJlYS09cy5wb3AoKS5hcmVhLGQocyxnLGEsITEpLGc9TWF0aC5taW4oYS5keCxhLmR5KSxzLmxlbmd0aD1zLmFyZWE9MCxmPTEvMCk7cy5sZW5ndGgmJihkKHMsZyxhLCEwKSxzLmxlbmd0aD1zLmFyZWE9MCksZS5mb3JFYWNoKGgpfX1mdW5jdGlvbiBmKHQpe3ZhciBlPXQuY2hpbGRyZW47aWYoZSYmZS5sZW5ndGgpe3ZhciByLG49byh0KSxpPWUuc2xpY2UoKSxhPVtdO2Zvcih1KGksbi5keCpuLmR5L3QudmFsdWUpLGEuYXJlYT0wO3I9aS5wb3AoKTspYS5wdXNoKHIpLGEuYXJlYSs9ci5hcmVhLG51bGwhPXIueiYmKGQoYSxyLno/bi5keDpuLmR5LG4sIWkubGVuZ3RoKSxhLmxlbmd0aD1hLmFyZWE9MCk7ZS5mb3JFYWNoKGYpfX1mdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByLG49dC5hcmVhLGk9MCxhPTEvMCxvPS0xLHM9dC5sZW5ndGg7KytvPHM7KShyPXRbb10uYXJlYSkmJihyPGEmJihhPXIpLHI+aSYmKGk9cikpO3JldHVybiBlKj1lLChuKj1uKT9NYXRoLm1heChlKmkqYy9uLG4vKGUqYSpjKSk6MS8wfWZ1bmN0aW9uIGQodCxlLHIsaSl7dmFyIGEsbz0tMSxzPXQubGVuZ3RoLGw9ci54LGM9ci55LHU9ZT9uKHQuYXJlYS9lKTowO2lmKGU9PXIuZHgpe2ZvcigoaXx8dT5yLmR5KSYmKHU9ci5keSk7KytvPHM7KShhPXRbb10pLng9bCxhLnk9YyxhLmR5PXUsbCs9YS5keD1NYXRoLm1pbihyLngrci5keC1sLHU/bihhLmFyZWEvdSk6MCk7YS56PSEwLGEuZHgrPXIueCtyLmR4LWwsci55Kz11LHIuZHktPXV9ZWxzZXtmb3IoKGl8fHU+ci5keCkmJih1PXIuZHgpOysrbzxzOykoYT10W29dKS54PWwsYS55PWMsYS5keD11LGMrPWEuZHk9TWF0aC5taW4oci55K3IuZHktYyx1P24oYS5hcmVhL3UpOjApO2Euej0hMSxhLmR5Kz1yLnkrci5keS1jLHIueCs9dSxyLmR4LT11fX1mdW5jdGlvbiBnKHQpe3ZhciBuPWV8fHIodCksYT1uWzBdO3JldHVybiBhLng9YS55PTAsYS52YWx1ZT8oYS5keD1pWzBdLGEuZHk9aVsxXSk6YS5keD1hLmR5PTAsZSYmci5yZXZhbHVlKGEpLHUoW2FdLGEuZHgqYS5keS9hLnZhbHVlKSwoZT9mOmgpKGEpLHMmJihlPW4pLG59cmV0dXJuIGcuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGcpOml9LGcucGFkZGluZz1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYTtmdW5jdGlvbiBlKGUpe3JldHVybiBsbyhlLHQpfXZhciByO3JldHVybiBvPW51bGw9PShhPXQpP3NvOlwiZnVuY3Rpb25cIj09KHI9dHlwZW9mIHQpP2Z1bmN0aW9uKGUpe3ZhciByPXQuY2FsbChnLGUsZS5kZXB0aCk7cmV0dXJuIG51bGw9PXI/c28oZSk6bG8oZSxcIm51bWJlclwiPT10eXBlb2Ygcj9bcixyLHIscl06cil9OlwibnVtYmVyXCI9PT1yPyh0PVt0LHQsdCx0XSxlKTplLGd9LGcucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dD9NYXRoLnJvdW5kOk51bWJlcixnKTpuIT1OdW1iZXJ9LGcuc3RpY2t5PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsZT1udWxsLGcpOnN9LGcucmF0aW89ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCxnKTpjfSxnLm1vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCtcIlwiLGcpOmx9LFNhKGcscil9LHQucmFuZG9tPXtub3JtYWw6ZnVuY3Rpb24odCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoO3JldHVybiByPDImJihlPTEpLHI8MSYmKHQ9MCksZnVuY3Rpb24oKXt2YXIgcixuLGk7ZG97aT0ocj0yKk1hdGgucmFuZG9tKCktMSkqcisobj0yKk1hdGgucmFuZG9tKCktMSkqbn13aGlsZSghaXx8aT4xKTtyZXR1cm4gdCtlKnIqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGkpL2kpfX0sbG9nTm9ybWFsOmZ1bmN0aW9uKCl7dmFyIGU9dC5yYW5kb20ubm9ybWFsLmFwcGx5KHQsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAoZSgpKX19LGJhdGVzOmZ1bmN0aW9uKGUpe3ZhciByPXQucmFuZG9tLmlyd2luSGFsbChlKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcigpL2V9fSxpcndpbkhhbGw6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAscj0wO3I8dDtyKyspZSs9TWF0aC5yYW5kb20oKTtyZXR1cm4gZX19fSx0LnNjYWxlPXt9O3ZhciBnbz17Zmxvb3I6eixjZWlsOnp9O2Z1bmN0aW9uIHZvKGUscixuLGkpe3ZhciBhPVtdLG89W10scz0wLGw9TWF0aC5taW4oZS5sZW5ndGgsci5sZW5ndGgpLTE7Zm9yKGVbbF08ZVswXSYmKGU9ZS5zbGljZSgpLnJldmVyc2UoKSxyPXIuc2xpY2UoKS5yZXZlcnNlKCkpOysrczw9bDspYS5wdXNoKG4oZVtzLTFdLGVbc10pKSxvLnB1c2goaShyW3MtMV0scltzXSkpO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj10LmJpc2VjdChlLHIsMSxsKS0xO3JldHVybiBvW25dKGFbbl0ocikpfX1mdW5jdGlvbiBtbyhlLHIpe3JldHVybiB0LnJlYmluZChlLHIsXCJyYW5nZVwiLFwicmFuZ2VSb3VuZFwiLFwiaW50ZXJwb2xhdGVcIixcImNsYW1wXCIpfWZ1bmN0aW9uIHlvKHQsZSl7cmV0dXJuIGZvKHQscG8oeG8odCxlKVsyXSkpLGZvKHQscG8oeG8odCxlKVsyXSkpLHR9ZnVuY3Rpb24geG8odCxlKXtudWxsPT1lJiYoZT0xMCk7dmFyIHI9Y28odCksbj1yWzFdLXJbMF0saT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKG4vZSkvTWF0aC5MTjEwKSksYT1lL24qaTtyZXR1cm4gYTw9LjE1P2kqPTEwOmE8PS4zNT9pKj01OmE8PS43NSYmKGkqPTIpLHJbMF09TWF0aC5jZWlsKHJbMF0vaSkqaSxyWzFdPU1hdGguZmxvb3IoclsxXS9pKSppKy41KmksclsyXT1pLHJ9ZnVuY3Rpb24gYm8oZSxyKXtyZXR1cm4gdC5yYW5nZS5hcHBseSh0LHhvKGUscikpfWZ1bmN0aW9uIF9vKGUscixuKXt2YXIgaT14byhlLHIpO2lmKG4pe3ZhciBhPUxlLmV4ZWMobik7aWYoYS5zaGlmdCgpLFwic1wiPT09YVs4XSl7dmFyIG89dC5mb3JtYXRQcmVmaXgoTWF0aC5tYXgoeShpWzBdKSx5KGlbMV0pKSk7cmV0dXJuIGFbN118fChhWzddPVwiLlwiK2tvKG8uc2NhbGUoaVsyXSkpKSxhWzhdPVwiZlwiLG49dC5mb3JtYXQoYS5qb2luKFwiXCIpKSxmdW5jdGlvbih0KXtyZXR1cm4gbihvLnNjYWxlKHQpKStvLnN5bWJvbH19YVs3XXx8KGFbN109XCIuXCIrZnVuY3Rpb24odCxlKXt2YXIgcj1rbyhlWzJdKTtyZXR1cm4gdCBpbiB3bz9NYXRoLmFicyhyLWtvKE1hdGgubWF4KHkoZVswXSkseShlWzFdKSkpKSsgKyhcImVcIiE9PXQpOnItMiooXCIlXCI9PT10KX0oYVs4XSxpKSksbj1hLmpvaW4oXCJcIil9ZWxzZSBuPVwiLC5cIitrbyhpWzJdKStcImZcIjtyZXR1cm4gdC5mb3JtYXQobil9dC5zY2FsZS5saW5lYXI9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgYSxvO2Z1bmN0aW9uIHMoKXt2YXIgdD1NYXRoLm1pbihlLmxlbmd0aCxyLmxlbmd0aCk+Mj92bzpobyxzPWk/bWE6dmE7cmV0dXJuIGE9dChlLHIscyxuKSxvPXQocixlLHMsWmkpLGx9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gYSh0KX1sLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gbyh0KX07bC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dC5tYXAoTnVtYmVyKSxzKCkpOmV9O2wucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxzKCkpOnJ9O2wucmFuZ2VSb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gbC5yYW5nZSh0KS5pbnRlcnBvbGF0ZShjYSl9O2wuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxzKCkpOml9O2wuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxzKCkpOm59O2wudGlja3M9ZnVuY3Rpb24odCl7cmV0dXJuIGJvKGUsdCl9O2wudGlja0Zvcm1hdD1mdW5jdGlvbih0LHIpe3JldHVybiBfbyhlLHQscil9O2wubmljZT1mdW5jdGlvbih0KXtyZXR1cm4geW8oZSx0KSxzKCl9O2wuY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUscixuLGkpfTtyZXR1cm4gcygpfShbMCwxXSxbMCwxXSxaaSwhMSl9O3ZhciB3bz17czoxLGc6MSxwOjEscjoxLGU6MX07ZnVuY3Rpb24ga28odCl7cmV0dXJuLU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjEwKy4wMSl9dC5zY2FsZS5sb2c9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZShyLG4saSxhKXtmdW5jdGlvbiBvKHQpe3JldHVybihpP01hdGgubG9nKHQ8MD8wOnQpOi1NYXRoLmxvZyh0PjA/MDotdCkpL01hdGgubG9nKG4pfWZ1bmN0aW9uIHModCl7cmV0dXJuIGk/TWF0aC5wb3cobix0KTotTWF0aC5wb3cobiwtdCl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gcihvKHQpKX1sLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gcyhyLmludmVydCh0KSl9O2wuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXRbMF0+PTAsci5kb21haW4oKGE9dC5tYXAoTnVtYmVyKSkubWFwKG8pKSxsKTphfTtsLmJhc2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3Qsci5kb21haW4oYS5tYXAobykpLGwpOm59O2wubmljZT1mdW5jdGlvbigpe3ZhciB0PWZvKGEubWFwKG8pLGk/TWF0aDpUbyk7cmV0dXJuIHIuZG9tYWluKHQpLGE9dC5tYXAocyksbH07bC50aWNrcz1mdW5jdGlvbigpe3ZhciB0PWNvKGEpLGU9W10scj10WzBdLGw9dFsxXSxjPU1hdGguZmxvb3IobyhyKSksdT1NYXRoLmNlaWwobyhsKSksaD1uJTE/MjpuO2lmKGlzRmluaXRlKHUtYykpe2lmKGkpe2Zvcig7Yzx1O2MrKylmb3IodmFyIGY9MTtmPGg7ZisrKWUucHVzaChzKGMpKmYpO2UucHVzaChzKGMpKX1lbHNlIGZvcihlLnB1c2gocyhjKSk7YysrPHU7KWZvcih2YXIgZj1oLTE7Zj4wO2YtLSllLnB1c2gocyhjKSpmKTtmb3IoYz0wO2VbY108cjtjKyspO2Zvcih1PWUubGVuZ3RoO2VbdS0xXT5sO3UtLSk7ZT1lLnNsaWNlKGMsdSl9cmV0dXJuIGV9O2wudGlja0Zvcm1hdD1mdW5jdGlvbihlLHIpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBBbzthcmd1bWVudHMubGVuZ3RoPDI/cj1BbzpcImZ1bmN0aW9uXCIhPXR5cGVvZiByJiYocj10LmZvcm1hdChyKSk7dmFyIGk9TWF0aC5tYXgoMSxuKmUvbC50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQvcyhNYXRoLnJvdW5kKG8odCkpKTtyZXR1cm4gZSpuPG4tLjUmJihlKj1uKSxlPD1pP3IodCk6XCJcIn19O2wuY29weT1mdW5jdGlvbigpe3JldHVybiBlKHIuY29weSgpLG4saSxhKX07cmV0dXJuIG1vKGwscil9KHQuc2NhbGUubGluZWFyKCkuZG9tYWluKFswLDFdKSwxMCwhMCxbMSwxMF0pfTt2YXIgQW89dC5mb3JtYXQoXCIuMGVcIiksVG89e2Zsb29yOmZ1bmN0aW9uKHQpe3JldHVybi1NYXRoLmNlaWwoLXQpfSxjZWlsOmZ1bmN0aW9uKHQpe3JldHVybi1NYXRoLmZsb29yKC10KX19O2Z1bmN0aW9uIE1vKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZTwwPy1NYXRoLnBvdygtZSx0KTpNYXRoLnBvdyhlLHQpfX10LnNjYWxlLnBvdz1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUscixuKXt2YXIgaT1NbyhyKSxhPU1vKDEvcik7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZShpKHQpKX1vLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gYShlLmludmVydCh0KSl9O28uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlLmRvbWFpbigobj10Lm1hcChOdW1iZXIpKS5tYXAoaSkpLG8pOm59O28udGlja3M9ZnVuY3Rpb24odCl7cmV0dXJuIGJvKG4sdCl9O28udGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVybiBfbyhuLHQsZSl9O28ubmljZT1mdW5jdGlvbih0KXtyZXR1cm4gby5kb21haW4oeW8obix0KSl9O28uZXhwb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9TW8ocj10KSxhPU1vKDEvciksZS5kb21haW4obi5tYXAoaSkpLG8pOnJ9O28uY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUuY29weSgpLHIsbil9O3JldHVybiBtbyhvLGUpfSh0LnNjYWxlLmxpbmVhcigpLDEsWzAsMV0pfSx0LnNjYWxlLnNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zY2FsZS5wb3coKS5leHBvbmVudCguNSl9LHQuc2NhbGUub3JkaW5hbD1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHIsbil7dmFyIGksYSxvO2Z1bmN0aW9uIHModCl7cmV0dXJuIGFbKChpLmdldCh0KXx8KFwicmFuZ2VcIj09PW4udD9pLnNldCh0LHIucHVzaCh0KSk6TmFOKSktMSklYS5sZW5ndGhdfWZ1bmN0aW9uIGwoZSxuKXtyZXR1cm4gdC5yYW5nZShyLmxlbmd0aCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlK24qdH0pfXMuZG9tYWluPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByO3I9W10saT1uZXcgYjtmb3IodmFyIGUsYT0tMSxvPXQubGVuZ3RoOysrYTxvOylpLmhhcyhlPXRbYV0pfHxpLnNldChlLHIucHVzaChlKSk7cmV0dXJuIHNbbi50XS5hcHBseShzLG4uYSl9O3MucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxvPTAsbj17dDpcInJhbmdlXCIsYTphcmd1bWVudHN9LHMpOmF9O3MucmFuZ2VQb2ludHM9ZnVuY3Rpb24odCxlKXthcmd1bWVudHMubGVuZ3RoPDImJihlPTApO3ZhciBpPXRbMF0sYz10WzFdLHU9ci5sZW5ndGg8Mj8oaT0oaStjKS8yLDApOihjLWkpLyhyLmxlbmd0aC0xK2UpO3JldHVybiBhPWwoaSt1KmUvMix1KSxvPTAsbj17dDpcInJhbmdlUG9pbnRzXCIsYTphcmd1bWVudHN9LHN9O3MucmFuZ2VSb3VuZFBvaW50cz1mdW5jdGlvbih0LGUpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9MCk7dmFyIGk9dFswXSxjPXRbMV0sdT1yLmxlbmd0aDwyPyhpPWM9TWF0aC5yb3VuZCgoaStjKS8yKSwwKTooYy1pKS8oci5sZW5ndGgtMStlKXwwO3JldHVybiBhPWwoaStNYXRoLnJvdW5kKHUqZS8yKyhjLWktKHIubGVuZ3RoLTErZSkqdSkvMiksdSksbz0wLG49e3Q6XCJyYW5nZVJvdW5kUG9pbnRzXCIsYTphcmd1bWVudHN9LHN9O3MucmFuZ2VCYW5kcz1mdW5jdGlvbih0LGUsaSl7YXJndW1lbnRzLmxlbmd0aDwyJiYoZT0wKSxhcmd1bWVudHMubGVuZ3RoPDMmJihpPWUpO3ZhciBjPXRbMV08dFswXSx1PXRbYy0wXSxoPXRbMS1jXSxmPShoLXUpLyhyLmxlbmd0aC1lKzIqaSk7cmV0dXJuIGE9bCh1K2YqaSxmKSxjJiZhLnJldmVyc2UoKSxvPWYqKDEtZSksbj17dDpcInJhbmdlQmFuZHNcIixhOmFyZ3VtZW50c30sc307cy5yYW5nZVJvdW5kQmFuZHM9ZnVuY3Rpb24odCxlLGkpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9MCksYXJndW1lbnRzLmxlbmd0aDwzJiYoaT1lKTt2YXIgYz10WzFdPHRbMF0sdT10W2MtMF0saD10WzEtY10sZj1NYXRoLmZsb29yKChoLXUpLyhyLmxlbmd0aC1lKzIqaSkpO3JldHVybiBhPWwodStNYXRoLnJvdW5kKChoLXUtKHIubGVuZ3RoLWUpKmYpLzIpLGYpLGMmJmEucmV2ZXJzZSgpLG89TWF0aC5yb3VuZChmKigxLWUpKSxuPXt0OlwicmFuZ2VSb3VuZEJhbmRzXCIsYTphcmd1bWVudHN9LHN9O3MucmFuZ2VCYW5kPWZ1bmN0aW9uKCl7cmV0dXJuIG99O3MucmFuZ2VFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gY28obi5hWzBdKX07cy5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGUocixuKX07cmV0dXJuIHMuZG9tYWluKHIpfShbXSx7dDpcInJhbmdlXCIsYTpbW11dfSl9LHQuc2NhbGUuY2F0ZWdvcnkxMD1mdW5jdGlvbigpe3JldHVybiB0LnNjYWxlLm9yZGluYWwoKS5yYW5nZShTbyl9LHQuc2NhbGUuY2F0ZWdvcnkyMD1mdW5jdGlvbigpe3JldHVybiB0LnNjYWxlLm9yZGluYWwoKS5yYW5nZShFbyl9LHQuc2NhbGUuY2F0ZWdvcnkyMGI9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoQ28pfSx0LnNjYWxlLmNhdGVnb3J5MjBjPWZ1bmN0aW9uKCl7cmV0dXJuIHQuc2NhbGUub3JkaW5hbCgpLnJhbmdlKExvKX07dmFyIFNvPVsyMDYyMjYwLDE2NzQ0MjA2LDI5MjQ1ODgsMTQwMzQ3MjgsOTcyNTg4NSw5MTk3MTMxLDE0OTA3MzMwLDgzNTU3MTEsMTIzNjkxODYsMTU1NjE3NV0ubWFwKHNlKSxFbz1bMjA2MjI2MCwxMTQ1NDQ0MCwxNjc0NDIwNiwxNjc1OTY3MiwyOTI0NTg4LDEwMDE4Njk4LDE0MDM0NzI4LDE2NzUwNzQyLDk3MjU4ODUsMTI5NTU4NjEsOTE5NzEzMSwxMjg4NTE0MCwxNDkwNzMzMCwxNjIzNDE5NCw4MzU1NzExLDEzMDkyODA3LDEyMzY5MTg2LDE0NDA4NTg5LDE1NTYxNzUsMTA0MTA3MjVdLm1hcChzZSksQ289WzM3NTA3NzcsNTM5NTYxOSw3MDQwNzE5LDEwMjY0Mjg2LDY1MTkwOTcsOTIxNjU5NCwxMTkxNTExNSwxMzU1NjYzNiw5MjAyOTkzLDEyNDI2ODA5LDE1MTg2NTE0LDE1MTkwOTMyLDg2NjYxNjksMTEzNTY0OTAsMTQwNDk2NDMsMTUxNzczNzIsODA3NzY4MywxMDgzNDMyNCwxMzUyODUwOSwxNDU4OTY1NF0ubWFwKHNlKSxMbz1bMzI0NDczMyw3MDU3MTEwLDEwNDA2NjI1LDEzMDMyNDMxLDE1MDk1MDUzLDE2NjE2NzY0LDE2NjI1MjU5LDE2NjM0MDE4LDMyNTMwNzYsNzY1MjQ3MCwxMDYwNzAwMywxMzEwMTUwNCw3Njk1MjgxLDEwMzk0MzEyLDEyMzY5MzcyLDE0MzQyODkxLDY1MTM1MDcsOTg2ODk1MCwxMjQzNDg3NywxNDI3NzA4MV0ubWFwKHNlKTtmdW5jdGlvbiB6bygpe3JldHVybiAwfXQuc2NhbGUucXVhbnRpbGU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZShyLG4pe3ZhciBpO2Z1bmN0aW9uIGEoKXt2YXIgZT0wLGE9bi5sZW5ndGg7Zm9yKGk9W107KytlPGE7KWlbZS0xXT10LnF1YW50aWxlKHIsZS9hKTtyZXR1cm4gb31mdW5jdGlvbiBvKGUpe2lmKCFpc05hTihlPStlKSlyZXR1cm4gblt0LmJpc2VjdChpLGUpXX1vLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10Lm1hcChwKS5maWx0ZXIoZCkuc29ydChmKSxhKCkpOnJ9O28ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxhKCkpOm59O28ucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGl9O28uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybih0PW4uaW5kZXhPZih0KSk8MD9bTmFOLE5hTl06W3Q+MD9pW3QtMV06clswXSx0PGkubGVuZ3RoP2lbdF06cltyLmxlbmd0aC0xXV19O28uY29weT1mdW5jdGlvbigpe3JldHVybiBlKHIsbil9O3JldHVybiBhKCl9KFtdLFtdKX0sdC5zY2FsZS5xdWFudGl6ZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUscixuKXt2YXIgaSxhO2Z1bmN0aW9uIG8odCl7cmV0dXJuIG5bTWF0aC5tYXgoMCxNYXRoLm1pbihhLE1hdGguZmxvb3IoaSoodC1lKSkpKV19ZnVuY3Rpb24gcygpe3JldHVybiBpPW4ubGVuZ3RoLyhyLWUpLGE9bi5sZW5ndGgtMSxvfW8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLHI9K3RbdC5sZW5ndGgtMV0scygpKTpbZSxyXX07by5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LHMoKSk6bn07by5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuW3Q9KHQ9bi5pbmRleE9mKHQpKTwwP05hTjp0L2krZSx0KzEvaV19O28uY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUscixuKX07cmV0dXJuIHMoKX0oMCwxLFswLDFdKX0sdC5zY2FsZS50aHJlc2hvbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZShyLG4pe2Z1bmN0aW9uIGkoZSl7aWYoZTw9ZSlyZXR1cm4gblt0LmJpc2VjdChyLGUpXX1pLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGkpOnJ9O2kucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxpKTpufTtpLmludmVydEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gdD1uLmluZGV4T2YodCksW3JbdC0xXSxyW3RdXX07aS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGUocixuKX07cmV0dXJuIGl9KFsuNV0sWzAsMV0pfSx0LnNjYWxlLmlkZW50aXR5PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4rdH1yLmludmVydD1yO3IuZG9tYWluPXIucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dC5tYXAocikscik6ZX07ci50aWNrcz1mdW5jdGlvbih0KXtyZXR1cm4gYm8oZSx0KX07ci50aWNrRm9ybWF0PWZ1bmN0aW9uKHQscil7cmV0dXJuIF9vKGUsdCxyKX07ci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoZSl9O3JldHVybiByfShbMCwxXSl9LHQuc3ZnPXt9LHQuc3ZnLmFyYz1mdW5jdGlvbigpe3ZhciB0PUlvLGU9RG8scj16byxuPU9vLGk9UG8sYT1SbyxvPUZvO2Z1bmN0aW9uIHMoKXt2YXIgcz1NYXRoLm1heCgwLCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYz1NYXRoLm1heCgwLCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksdT1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1FdCxoPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLUV0LGY9TWF0aC5hYnMoaC11KSxwPXU+aD8wOjE7aWYoYzxzJiYoZD1jLGM9cyxzPWQpLGY+PVN0KXJldHVybiBsKGMscCkrKHM/bChzLDEtcCk6XCJcIikrXCJaXCI7dmFyIGQsZyx2LG0seSx4LGIsXyx3LGssQSxULE09MCxTPTAsRT1bXTtpZigobT0oK28uYXBwbHkodGhpcyxhcmd1bWVudHMpfHwwKS8yKSYmKHY9bj09PU9vP01hdGguc3FydChzKnMrYypjKTorbi5hcHBseSh0aGlzLGFyZ3VtZW50cykscHx8KFMqPS0xKSxjJiYoUz1EdCh2L2MqTWF0aC5zaW4obSkpKSxzJiYoTT1EdCh2L3MqTWF0aC5zaW4obSkpKSksYyl7eT1jKk1hdGguY29zKHUrUykseD1jKk1hdGguc2luKHUrUyksYj1jKk1hdGguY29zKGgtUyksXz1jKk1hdGguc2luKGgtUyk7dmFyIEM9TWF0aC5hYnMoaC11LTIqUyk8PVR0PzA6MTtpZihTJiZCbyh5LHgsYixfKT09PXBeQyl7dmFyIEw9KHUraCkvMjt5PWMqTWF0aC5jb3MoTCkseD1jKk1hdGguc2luKEwpLGI9Xz1udWxsfX1lbHNlIHk9eD0wO2lmKHMpe3c9cypNYXRoLmNvcyhoLU0pLGs9cypNYXRoLnNpbihoLU0pLEE9cypNYXRoLmNvcyh1K00pLFQ9cypNYXRoLnNpbih1K00pO3ZhciB6PU1hdGguYWJzKHUtaCsyKk0pPD1UdD8wOjE7aWYoTSYmQm8odyxrLEEsVCk9PT0xLXBeeil7dmFyIE89KHUraCkvMjt3PXMqTWF0aC5jb3MoTyksaz1zKk1hdGguc2luKE8pLEE9VD1udWxsfX1lbHNlIHc9az0wO2lmKGY+a3QmJihkPU1hdGgubWluKE1hdGguYWJzKGMtcykvMiwrci5hcHBseSh0aGlzLGFyZ3VtZW50cykpKT4uMDAxKXtnPXM8Y15wPzA6MTt2YXIgST1kLEQ9ZDtpZihmPFR0KXt2YXIgUD1udWxsPT1BP1t3LGtdOm51bGw9PWI/W3kseF06c2koW3kseF0sW0EsVF0sW2IsX10sW3csa10pLFI9eS1QWzBdLEY9eC1QWzFdLEI9Yi1QWzBdLE49Xy1QWzFdLGo9MS9NYXRoLnNpbihNYXRoLmFjb3MoKFIqQitGKk4pLyhNYXRoLnNxcnQoUipSK0YqRikqTWF0aC5zcXJ0KEIqQitOKk4pKSkvMiksVj1NYXRoLnNxcnQoUFswXSpQWzBdK1BbMV0qUFsxXSk7RD1NYXRoLm1pbihkLChzLVYpLyhqLTEpKSxJPU1hdGgubWluKGQsKGMtVikvKGorMSkpfWlmKG51bGwhPWIpe3ZhciBVPU5vKG51bGw9PUE/W3csa106W0EsVF0sW3kseF0sYyxJLHApLHE9Tm8oW2IsX10sW3csa10sYyxJLHApO2Q9PT1JP0UucHVzaChcIk1cIixVWzBdLFwiQVwiLEksXCIsXCIsSSxcIiAwIDAsXCIsZyxcIiBcIixVWzFdLFwiQVwiLGMsXCIsXCIsYyxcIiAwIFwiLDEtcF5CbyhVWzFdWzBdLFVbMV1bMV0scVsxXVswXSxxWzFdWzFdKSxcIixcIixwLFwiIFwiLHFbMV0sXCJBXCIsSSxcIixcIixJLFwiIDAgMCxcIixnLFwiIFwiLHFbMF0pOkUucHVzaChcIk1cIixVWzBdLFwiQVwiLEksXCIsXCIsSSxcIiAwIDEsXCIsZyxcIiBcIixxWzBdKX1lbHNlIEUucHVzaChcIk1cIix5LFwiLFwiLHgpO2lmKG51bGwhPUEpe3ZhciBIPU5vKFt5LHhdLFtBLFRdLHMsLUQscCksRz1ObyhbdyxrXSxudWxsPT1iP1t5LHhdOltiLF9dLHMsLUQscCk7ZD09PUQ/RS5wdXNoKFwiTFwiLEdbMF0sXCJBXCIsRCxcIixcIixELFwiIDAgMCxcIixnLFwiIFwiLEdbMV0sXCJBXCIscyxcIixcIixzLFwiIDAgXCIscF5CbyhHWzFdWzBdLEdbMV1bMV0sSFsxXVswXSxIWzFdWzFdKSxcIixcIiwxLXAsXCIgXCIsSFsxXSxcIkFcIixELFwiLFwiLEQsXCIgMCAwLFwiLGcsXCIgXCIsSFswXSk6RS5wdXNoKFwiTFwiLEdbMF0sXCJBXCIsRCxcIixcIixELFwiIDAgMCxcIixnLFwiIFwiLEhbMF0pfWVsc2UgRS5wdXNoKFwiTFwiLHcsXCIsXCIsayl9ZWxzZSBFLnB1c2goXCJNXCIseSxcIixcIix4KSxudWxsIT1iJiZFLnB1c2goXCJBXCIsYyxcIixcIixjLFwiIDAgXCIsQyxcIixcIixwLFwiIFwiLGIsXCIsXCIsXyksRS5wdXNoKFwiTFwiLHcsXCIsXCIsayksbnVsbCE9QSYmRS5wdXNoKFwiQVwiLHMsXCIsXCIscyxcIiAwIFwiLHosXCIsXCIsMS1wLFwiIFwiLEEsXCIsXCIsVCk7cmV0dXJuIEUucHVzaChcIlpcIiksRS5qb2luKFwiXCIpfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm5cIk0wLFwiK3QrXCJBXCIrdCtcIixcIit0K1wiIDAgMSxcIitlK1wiIDAsXCIrLXQrXCJBXCIrdCtcIixcIit0K1wiIDAgMSxcIitlK1wiIDAsXCIrdH1yZXR1cm4gcy5pbm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD12ZShlKSxzKTp0fSxzLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXZlKHQpLHMpOmV9LHMuY29ybmVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXZlKHQpLHMpOnJ9LHMucGFkUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQ9PU9vP09vOnZlKHQpLHMpOm59LHMuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT12ZSh0KSxzKTppfSxzLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXZlKHQpLHMpOmF9LHMucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dmUodCkscyk6b30scy5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciByPSgrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMixuPSgraS5hcHBseSh0aGlzLGFyZ3VtZW50cykrICthLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi1FdDtyZXR1cm5bTWF0aC5jb3MobikqcixNYXRoLnNpbihuKSpyXX0sc307dmFyIE9vPVwiYXV0b1wiO2Z1bmN0aW9uIElvKHQpe3JldHVybiB0LmlubmVyUmFkaXVzfWZ1bmN0aW9uIERvKHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uIFBvKHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gUm8odCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24gRm8odCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gQm8odCxlLHIsbil7cmV0dXJuKHQtcikqZS0oZS1uKSp0PjA/MDoxfWZ1bmN0aW9uIE5vKHQsZSxyLG4saSl7dmFyIGE9dFswXS1lWzBdLG89dFsxXS1lWzFdLHM9KGk/bjotbikvTWF0aC5zcXJ0KGEqYStvKm8pLGw9cypvLGM9LXMqYSx1PXRbMF0rbCxoPXRbMV0rYyxmPWVbMF0rbCxwPWVbMV0rYyxkPSh1K2YpLzIsZz0oaCtwKS8yLHY9Zi11LG09cC1oLHk9dip2K20qbSx4PXItbixiPXUqcC1mKmgsXz0obTwwPy0xOjEpKk1hdGguc3FydChNYXRoLm1heCgwLHgqeCp5LWIqYikpLHc9KGIqbS12Kl8pL3ksaz0oLWIqdi1tKl8pL3ksQT0oYiptK3YqXykveSxUPSgtYip2K20qXykveSxNPXctZCxTPWstZyxFPUEtZCxDPVQtZztyZXR1cm4gTSpNK1MqUz5FKkUrQypDJiYodz1BLGs9VCksW1t3LWwsay1jXSxbdypyL3gsaypyL3hdXX1mdW5jdGlvbiBqbyh0KXt2YXIgZT1laSxyPXJpLG49WXIsaT1VbyxhPWkua2V5LG89Ljc7ZnVuY3Rpb24gcyhhKXt2YXIgcyxsPVtdLGM9W10sdT0tMSxoPWEubGVuZ3RoLGY9dmUoZSkscD12ZShyKTtmdW5jdGlvbiBkKCl7bC5wdXNoKFwiTVwiLGkodChjKSxvKSl9Zm9yKDsrK3U8aDspbi5jYWxsKHRoaXMscz1hW3VdLHUpP2MucHVzaChbK2YuY2FsbCh0aGlzLHMsdSksK3AuY2FsbCh0aGlzLHMsdSldKTpjLmxlbmd0aCYmKGQoKSxjPVtdKTtyZXR1cm4gYy5sZW5ndGgmJmQoKSxsLmxlbmd0aD9sLmpvaW4oXCJcIik6bnVsbH1yZXR1cm4gcy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQscyk6ZX0scy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQscyk6cn0scy5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQscyk6bn0scy5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2k9dDooaT1Wby5nZXQodCl8fFVvKS5rZXkscyk6YX0scy50ZW5zaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQscyk6b30sc310LnN2Zy5saW5lPWZ1bmN0aW9uKCl7cmV0dXJuIGpvKHopfTt2YXIgVm89dC5tYXAoe2xpbmVhcjpVbyxcImxpbmVhci1jbG9zZWRcIjpxbyxzdGVwOmZ1bmN0aW9uKHQpe3ZhciBlPTAscj10Lmxlbmd0aCxuPXRbMF0saT1bblswXSxcIixcIixuWzFdXTtmb3IoOysrZTxyOylpLnB1c2goXCJIXCIsKG5bMF0rKG49dFtlXSlbMF0pLzIsXCJWXCIsblsxXSk7cj4xJiZpLnB1c2goXCJIXCIsblswXSk7cmV0dXJuIGkuam9pbihcIlwiKX0sXCJzdGVwLWJlZm9yZVwiOkhvLFwic3RlcC1hZnRlclwiOkdvLGJhc2lzOlhvLFwiYmFzaXMtb3BlblwiOmZ1bmN0aW9uKHQpe2lmKHQubGVuZ3RoPDQpcmV0dXJuIFVvKHQpO3ZhciBlLHI9W10sbj0tMSxpPXQubGVuZ3RoLGE9WzBdLG89WzBdO2Zvcig7KytuPDM7KWU9dFtuXSxhLnB1c2goZVswXSksby5wdXNoKGVbMV0pO3IucHVzaChabyhLbyxhKStcIixcIitabyhLbyxvKSksLS1uO2Zvcig7KytuPGk7KWU9dFtuXSxhLnNoaWZ0KCksYS5wdXNoKGVbMF0pLG8uc2hpZnQoKSxvLnB1c2goZVsxXSksUW8ocixhLG8pO3JldHVybiByLmpvaW4oXCJcIil9LFwiYmFzaXMtY2xvc2VkXCI6ZnVuY3Rpb24odCl7dmFyIGUscixuPS0xLGk9dC5sZW5ndGgsYT1pKzQsbz1bXSxzPVtdO2Zvcig7KytuPDQ7KXI9dFtuJWldLG8ucHVzaChyWzBdKSxzLnB1c2goclsxXSk7ZT1bWm8oS28sbyksXCIsXCIsWm8oS28scyldLC0tbjtmb3IoOysrbjxhOylyPXRbbiVpXSxvLnNoaWZ0KCksby5wdXNoKHJbMF0pLHMuc2hpZnQoKSxzLnB1c2goclsxXSksUW8oZSxvLHMpO3JldHVybiBlLmpvaW4oXCJcIil9LGJ1bmRsZTpmdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoLTE7aWYocilmb3IodmFyIG4saSxhPXRbMF1bMF0sbz10WzBdWzFdLHM9dFtyXVswXS1hLGw9dFtyXVsxXS1vLGM9LTE7KytjPD1yOyluPXRbY10saT1jL3IsblswXT1lKm5bMF0rKDEtZSkqKGEraSpzKSxuWzFdPWUqblsxXSsoMS1lKSoobytpKmwpO3JldHVybiBYbyh0KX0sY2FyZGluYWw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGg8Mz9Vbyh0KTp0WzBdK1lvKHQsV28odCxlKSl9LFwiY2FyZGluYWwtb3BlblwiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoPDQ/VW8odCk6dFsxXStZbyh0LnNsaWNlKDEsLTEpLFdvKHQsZSkpfSxcImNhcmRpbmFsLWNsb3NlZFwiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoPDM/cW8odCk6dFswXStZbygodC5wdXNoKHRbMF0pLHQpLFdvKFt0W3QubGVuZ3RoLTJdXS5jb25jYXQodCxbdFsxXV0pLGUpKX0sbW9ub3RvbmU6ZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RoPDM/VW8odCk6dFswXStZbyh0LGZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9W10sbz1mdW5jdGlvbih0KXt2YXIgZT0wLHI9dC5sZW5ndGgtMSxuPVtdLGk9dFswXSxhPXRbMV0sbz1uWzBdPXRzKGksYSk7Zm9yKDsrK2U8cjspbltlXT0obysobz10cyhpPWEsYT10W2UrMV0pKSkvMjtyZXR1cm4gbltlXT1vLG59KHQpLHM9LTEsbD10Lmxlbmd0aC0xO2Zvcig7KytzPGw7KWU9dHModFtzXSx0W3MrMV0pLHkoZSk8a3Q/b1tzXT1vW3MrMV09MDoocj1vW3NdL2Usbj1vW3MrMV0vZSwoaT1yKnIrbipuKT45JiYoaT0zKmUvTWF0aC5zcXJ0KGkpLG9bc109aSpyLG9bcysxXT1pKm4pKTtzPS0xO2Zvcig7KytzPD1sOylpPSh0W01hdGgubWluKGwscysxKV1bMF0tdFtNYXRoLm1heCgwLHMtMSldWzBdKS8oNiooMStvW3NdKm9bc10pKSxhLnB1c2goW2l8fDAsb1tzXSppfHwwXSk7cmV0dXJuIGF9KHQpKX19KTtmdW5jdGlvbiBVbyh0KXtyZXR1cm4gdC5sZW5ndGg+MT90LmpvaW4oXCJMXCIpOnQrXCJaXCJ9ZnVuY3Rpb24gcW8odCl7cmV0dXJuIHQuam9pbihcIkxcIikrXCJaXCJ9ZnVuY3Rpb24gSG8odCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aCxuPXRbMF0saT1bblswXSxcIixcIixuWzFdXTsrK2U8cjspaS5wdXNoKFwiVlwiLChuPXRbZV0pWzFdLFwiSFwiLG5bMF0pO3JldHVybiBpLmpvaW4oXCJcIil9ZnVuY3Rpb24gR28odCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aCxuPXRbMF0saT1bblswXSxcIixcIixuWzFdXTsrK2U8cjspaS5wdXNoKFwiSFwiLChuPXRbZV0pWzBdLFwiVlwiLG5bMV0pO3JldHVybiBpLmpvaW4oXCJcIil9ZnVuY3Rpb24gWW8odCxlKXtpZihlLmxlbmd0aDwxfHx0Lmxlbmd0aCE9ZS5sZW5ndGgmJnQubGVuZ3RoIT1lLmxlbmd0aCsyKXJldHVybiBVbyh0KTt2YXIgcj10Lmxlbmd0aCE9ZS5sZW5ndGgsbj1cIlwiLGk9dFswXSxhPXRbMV0sbz1lWzBdLHM9byxsPTE7aWYociYmKG4rPVwiUVwiKyhhWzBdLTIqb1swXS8zKStcIixcIisoYVsxXS0yKm9bMV0vMykrXCIsXCIrYVswXStcIixcIithWzFdLGk9dFsxXSxsPTIpLGUubGVuZ3RoPjEpe3M9ZVsxXSxhPXRbbF0sbCsrLG4rPVwiQ1wiKyhpWzBdK29bMF0pK1wiLFwiKyhpWzFdK29bMV0pK1wiLFwiKyhhWzBdLXNbMF0pK1wiLFwiKyhhWzFdLXNbMV0pK1wiLFwiK2FbMF0rXCIsXCIrYVsxXTtmb3IodmFyIGM9MjtjPGUubGVuZ3RoO2MrKyxsKyspYT10W2xdLHM9ZVtjXSxuKz1cIlNcIisoYVswXS1zWzBdKStcIixcIisoYVsxXS1zWzFdKStcIixcIithWzBdK1wiLFwiK2FbMV19aWYocil7dmFyIHU9dFtsXTtuKz1cIlFcIisoYVswXSsyKnNbMF0vMykrXCIsXCIrKGFbMV0rMipzWzFdLzMpK1wiLFwiK3VbMF0rXCIsXCIrdVsxXX1yZXR1cm4gbn1mdW5jdGlvbiBXbyh0LGUpe2Zvcih2YXIgcixuPVtdLGk9KDEtZSkvMixhPXRbMF0sbz10WzFdLHM9MSxsPXQubGVuZ3RoOysrczxsOylyPWEsYT1vLG89dFtzXSxuLnB1c2goW2kqKG9bMF0tclswXSksaSoob1sxXS1yWzFdKV0pO3JldHVybiBufWZ1bmN0aW9uIFhvKHQpe2lmKHQubGVuZ3RoPDMpcmV0dXJuIFVvKHQpO3ZhciBlPTEscj10Lmxlbmd0aCxuPXRbMF0saT1uWzBdLGE9blsxXSxvPVtpLGksaSwobj10WzFdKVswXV0scz1bYSxhLGEsblsxXV0sbD1baSxcIixcIixhLFwiTFwiLFpvKEtvLG8pLFwiLFwiLFpvKEtvLHMpXTtmb3IodC5wdXNoKHRbci0xXSk7KytlPD1yOyluPXRbZV0sby5zaGlmdCgpLG8ucHVzaChuWzBdKSxzLnNoaWZ0KCkscy5wdXNoKG5bMV0pLFFvKGwsbyxzKTtyZXR1cm4gdC5wb3AoKSxsLnB1c2goXCJMXCIsbiksbC5qb2luKFwiXCIpfWZ1bmN0aW9uIFpvKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdK3RbM10qZVszXX1Wby5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7ZS5rZXk9dCxlLmNsb3NlZD0vLWNsb3NlZCQvLnRlc3QodCl9KTt2YXIgJG89WzAsMi8zLDEvMywwXSxKbz1bMCwxLzMsMi8zLDBdLEtvPVswLDEvNiwyLzMsMS82XTtmdW5jdGlvbiBRbyh0LGUscil7dC5wdXNoKFwiQ1wiLFpvKCRvLGUpLFwiLFwiLFpvKCRvLHIpLFwiLFwiLFpvKEpvLGUpLFwiLFwiLFpvKEpvLHIpLFwiLFwiLFpvKEtvLGUpLFwiLFwiLFpvKEtvLHIpKX1mdW5jdGlvbiB0cyh0LGUpe3JldHVybihlWzFdLXRbMV0pLyhlWzBdLXRbMF0pfWZ1bmN0aW9uIGVzKHQpe2Zvcih2YXIgZSxyLG4saT0tMSxhPXQubGVuZ3RoOysraTxhOylyPShlPXRbaV0pWzBdLG49ZVsxXS1FdCxlWzBdPXIqTWF0aC5jb3MobiksZVsxXT1yKk1hdGguc2luKG4pO3JldHVybiB0fWZ1bmN0aW9uIHJzKHQpe3ZhciBlPWVpLHI9ZWksbj0wLGk9cmksYT1ZcixvPVVvLHM9by5rZXksbD1vLGM9XCJMXCIsdT0uNztmdW5jdGlvbiBoKHMpe3ZhciBoLGYscCxkPVtdLGc9W10sdj1bXSxtPS0xLHk9cy5sZW5ndGgseD12ZShlKSxiPXZlKG4pLF89ZT09PXI/ZnVuY3Rpb24oKXtyZXR1cm4gZn06dmUociksdz1uPT09aT9mdW5jdGlvbigpe3JldHVybiBwfTp2ZShpKTtmdW5jdGlvbiBrKCl7ZC5wdXNoKFwiTVwiLG8odCh2KSx1KSxjLGwodChnLnJldmVyc2UoKSksdSksXCJaXCIpfWZvcig7KyttPHk7KWEuY2FsbCh0aGlzLGg9c1ttXSxtKT8oZy5wdXNoKFtmPSt4LmNhbGwodGhpcyxoLG0pLHA9K2IuY2FsbCh0aGlzLGgsbSldKSx2LnB1c2goWytfLmNhbGwodGhpcyxoLG0pLCt3LmNhbGwodGhpcyxoLG0pXSkpOmcubGVuZ3RoJiYoaygpLGc9W10sdj1bXSk7cmV0dXJuIGcubGVuZ3RoJiZrKCksZC5sZW5ndGg/ZC5qb2luKFwiXCIpOm51bGx9cmV0dXJuIGgueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1yPXQsaCk6cn0saC54MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LGgpOmV9LGgueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxoKTpyfSxoLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49aT10LGgpOml9LGgueTA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxoKTpufSxoLnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsaCk6aX0saC5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsaCk6YX0saC5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P289dDoobz1Wby5nZXQodCl8fFVvKS5rZXksbD1vLnJldmVyc2V8fG8sYz1vLmNsb3NlZD9cIk1cIjpcIkxcIixoKTpzfSxoLnRlbnNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxoKTp1fSxofWZ1bmN0aW9uIG5zKHQpe3JldHVybiB0LnJhZGl1c31mdW5jdGlvbiBpcyh0KXtyZXR1cm5bdC54LHQueV19ZnVuY3Rpb24gYXMoKXtyZXR1cm4gNjR9ZnVuY3Rpb24gb3MoKXtyZXR1cm5cImNpcmNsZVwifWZ1bmN0aW9uIHNzKHQpe3ZhciBlPU1hdGguc3FydCh0L1R0KTtyZXR1cm5cIk0wLFwiK2UrXCJBXCIrZStcIixcIitlK1wiIDAgMSwxIDAsXCIrLWUrXCJBXCIrZStcIixcIitlK1wiIDAgMSwxIDAsXCIrZStcIlpcIn10LnN2Zy5saW5lLnJhZGlhbD1mdW5jdGlvbigpe3ZhciB0PWpvKGVzKTtyZXR1cm4gdC5yYWRpdXM9dC54LGRlbGV0ZSB0LngsdC5hbmdsZT10LnksZGVsZXRlIHQueSx0fSxIby5yZXZlcnNlPUdvLEdvLnJldmVyc2U9SG8sdC5zdmcuYXJlYT1mdW5jdGlvbigpe3JldHVybiBycyh6KX0sdC5zdmcuYXJlYS5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgdD1ycyhlcyk7cmV0dXJuIHQucmFkaXVzPXQueCxkZWxldGUgdC54LHQuaW5uZXJSYWRpdXM9dC54MCxkZWxldGUgdC54MCx0Lm91dGVyUmFkaXVzPXQueDEsZGVsZXRlIHQueDEsdC5hbmdsZT10LnksZGVsZXRlIHQueSx0LnN0YXJ0QW5nbGU9dC55MCxkZWxldGUgdC55MCx0LmVuZEFuZ2xlPXQueTEsZGVsZXRlIHQueTEsdH0sdC5zdmcuY2hvcmQ9ZnVuY3Rpb24oKXt2YXIgdD1WbixlPVVuLHI9bnMsbj1QbyxpPVJvO2Z1bmN0aW9uIGEocixuKXt2YXIgaSxhLGM9byh0aGlzLHQscixuKSx1PW8odGhpcyxlLHIsbik7cmV0dXJuXCJNXCIrYy5wMCtzKGMucixjLnAxLGMuYTEtYy5hMCkrKGE9dSwoaT1jKS5hMD09YS5hMCYmaS5hMT09YS5hMT9sKGMucixjLnAxLGMucixjLnAwKTpsKGMucixjLnAxLHUucix1LnAwKStzKHUucix1LnAxLHUuYTEtdS5hMCkrbCh1LnIsdS5wMSxjLnIsYy5wMCkpK1wiWlwifWZ1bmN0aW9uIG8odCxlLGEsbyl7dmFyIHM9ZS5jYWxsKHQsYSxvKSxsPXIuY2FsbCh0LHMsbyksYz1uLmNhbGwodCxzLG8pLUV0LHU9aS5jYWxsKHQscyxvKS1FdDtyZXR1cm57cjpsLGEwOmMsYTE6dSxwMDpbbCpNYXRoLmNvcyhjKSxsKk1hdGguc2luKGMpXSxwMTpbbCpNYXRoLmNvcyh1KSxsKk1hdGguc2luKHUpXX19ZnVuY3Rpb24gcyh0LGUscil7cmV0dXJuXCJBXCIrdCtcIixcIit0K1wiIDAgXCIrICsocj5UdCkrXCIsMSBcIitlfWZ1bmN0aW9uIGwodCxlLHIsbil7cmV0dXJuXCJRIDAsMCBcIitufXJldHVybiBhLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj12ZSh0KSxhKTpyfSxhLnNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD12ZShlKSxhKTp0fSxhLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT12ZSh0KSxhKTplfSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dmUodCksYSk6bn0sYS5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT12ZSh0KSxhKTppfSxhfSx0LnN2Zy5kaWFnb25hbD1mdW5jdGlvbigpe3ZhciB0PVZuLGU9VW4scj1pcztmdW5jdGlvbiBuKG4saSl7dmFyIGE9dC5jYWxsKHRoaXMsbixpKSxvPWUuY2FsbCh0aGlzLG4saSkscz0oYS55K28ueSkvMixsPVthLHt4OmEueCx5OnN9LHt4Om8ueCx5OnN9LG9dO3JldHVyblwiTVwiKyhsPWwubWFwKHIpKVswXStcIkNcIitsWzFdK1wiIFwiK2xbMl0rXCIgXCIrbFszXX1yZXR1cm4gbi5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dmUoZSksbik6dH0sbi50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dmUodCksbik6ZX0sbi5wcm9qZWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sbn0sdC5zdmcuZGlhZ29uYWwucmFkaWFsPWZ1bmN0aW9uKCl7dmFyIGU9dC5zdmcuZGlhZ29uYWwoKSxyPWlzLG49ZS5wcm9qZWN0aW9uO3JldHVybiBlLnByb2plY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bihmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyPWVbMF0sbj1lWzFdLUV0O3JldHVybltyKk1hdGguY29zKG4pLHIqTWF0aC5zaW4obildfX0ocj10KSk6cn0sZX0sdC5zdmcuc3ltYm9sPWZ1bmN0aW9uKCl7dmFyIHQ9b3MsZT1hcztmdW5jdGlvbiByKHIsbil7cmV0dXJuKGxzLmdldCh0LmNhbGwodGhpcyxyLG4pKXx8c3MpKGUuY2FsbCh0aGlzLHIsbikpfXJldHVybiByLnR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dmUoZSkscik6dH0sci5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXZlKHQpLHIpOmV9LHJ9O3ZhciBscz10Lm1hcCh7Y2lyY2xlOnNzLGNyb3NzOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0LzUpLzI7cmV0dXJuXCJNXCIrLTMqZStcIixcIistZStcIkhcIistZStcIlZcIistMyplK1wiSFwiK2UrXCJWXCIrLWUrXCJIXCIrMyplK1wiVlwiK2UrXCJIXCIrZStcIlZcIiszKmUrXCJIXCIrLWUrXCJWXCIrZStcIkhcIistMyplK1wiWlwifSxkaWFtb25kOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0LygyKnVzKSkscj1lKnVzO3JldHVyblwiTTAsXCIrLWUrXCJMXCIrcitcIiwwIDAsXCIrZStcIiBcIistcitcIiwwWlwifSxzcXVhcmU6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQpLzI7cmV0dXJuXCJNXCIrLWUrXCIsXCIrLWUrXCJMXCIrZStcIixcIistZStcIiBcIitlK1wiLFwiK2UrXCIgXCIrLWUrXCIsXCIrZStcIlpcIn0sXCJ0cmlhbmdsZS1kb3duXCI6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQvY3MpLHI9ZSpjcy8yO3JldHVyblwiTTAsXCIrcitcIkxcIitlK1wiLFwiKy1yK1wiIFwiKy1lK1wiLFwiKy1yK1wiWlwifSxcInRyaWFuZ2xlLXVwXCI6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQvY3MpLHI9ZSpjcy8yO3JldHVyblwiTTAsXCIrLXIrXCJMXCIrZStcIixcIityK1wiIFwiKy1lK1wiLFwiK3IrXCJaXCJ9fSk7dC5zdmcuc3ltYm9sVHlwZXM9bHMua2V5cygpO3ZhciBjcz1NYXRoLnNxcnQoMyksdXM9TWF0aC50YW4oMzAqQ3QpO1cudHJhbnNpdGlvbj1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuPWRzfHwrK21zLGk9YnModCksYT1bXSxvPWdzfHx7dGltZTpEYXRlLm5vdygpLGVhc2U6aWEsZGVsYXk6MCxkdXJhdGlvbjoyNTB9LHM9LTEsbD10aGlzLmxlbmd0aDsrK3M8bDspe2EucHVzaChlPVtdKTtmb3IodmFyIGM9dGhpc1tzXSx1PS0xLGg9Yy5sZW5ndGg7Kyt1PGg7KShyPWNbdV0pJiZfcyhyLHUsaSxuLG8pLGUucHVzaChyKX1yZXR1cm4gcHMoYSxpLG4pfSxXLmludGVycnVwdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKG51bGw9PXQ/aHM6ZnMoYnModCkpKX07dmFyIGhzPWZzKGJzKCkpO2Z1bmN0aW9uIGZzKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlLHIsbjsoZT10aGlzW3RdKSYmKG49ZVtyPWUuYWN0aXZlXSkmJihuLnRpbWVyLmM9bnVsbCxuLnRpbWVyLnQ9TmFOLC0tZS5jb3VudD9kZWxldGUgZVtyXTpkZWxldGUgdGhpc1t0XSxlLmFjdGl2ZSs9LjUsbi5ldmVudCYmbi5ldmVudC5pbnRlcnJ1cHQuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sbi5pbmRleCkpfX1mdW5jdGlvbiBwcyh0LGUscil7cmV0dXJuIFUodCx2cyksdC5uYW1lc3BhY2U9ZSx0LmlkPXIsdH12YXIgZHMsZ3MsdnM9W10sbXM9MDtmdW5jdGlvbiB5cyh0LGUscixuKXt2YXIgaT10LmlkLGE9dC5uYW1lc3BhY2U7cmV0dXJuIHV0KHQsXCJmdW5jdGlvblwiPT10eXBlb2Ygcj9mdW5jdGlvbih0LG8scyl7dFthXVtpXS50d2Vlbi5zZXQoZSxuKHIuY2FsbCh0LHQuX19kYXRhX18sbyxzKSkpfToocj1uKHIpLGZ1bmN0aW9uKHQpe3RbYV1baV0udHdlZW4uc2V0KGUscil9KSl9ZnVuY3Rpb24geHModCl7cmV0dXJuIG51bGw9PXQmJih0PVwiXCIpLGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBicyh0KXtyZXR1cm4gbnVsbD09dD9cIl9fdHJhbnNpdGlvbl9fXCI6XCJfX3RyYW5zaXRpb25fXCIrdCtcIl9fXCJ9ZnVuY3Rpb24gX3ModCxlLHIsbixpKXt2YXIgYSxvLHMsbCxjLHU9dFtyXXx8KHRbcl09e2FjdGl2ZTowLGNvdW50OjB9KSxoPXVbbl07ZnVuY3Rpb24gZihyKXt2YXIgaT11LmFjdGl2ZSxmPXVbaV07Zm9yKHZhciBkIGluIGYmJihmLnRpbWVyLmM9bnVsbCxmLnRpbWVyLnQ9TmFOLC0tdS5jb3VudCxkZWxldGUgdVtpXSxmLmV2ZW50JiZmLmV2ZW50LmludGVycnVwdC5jYWxsKHQsdC5fX2RhdGFfXyxmLmluZGV4KSksdSlpZigrZDxuKXt2YXIgZz11W2RdO2cudGltZXIuYz1udWxsLGcudGltZXIudD1OYU4sLS11LmNvdW50LGRlbGV0ZSB1W2RdfW8uYz1wLEFlKGZ1bmN0aW9uKCl7cmV0dXJuIG8uYyYmcChyfHwxKSYmKG8uYz1udWxsLG8udD1OYU4pLDF9LDAsYSksdS5hY3RpdmU9bixoLmV2ZW50JiZoLmV2ZW50LnN0YXJ0LmNhbGwodCx0Ll9fZGF0YV9fLGUpLGM9W10saC50d2Vlbi5mb3JFYWNoKGZ1bmN0aW9uKHIsbil7KG49bi5jYWxsKHQsdC5fX2RhdGFfXyxlKSkmJmMucHVzaChuKX0pLGw9aC5lYXNlLHM9aC5kdXJhdGlvbn1mdW5jdGlvbiBwKGkpe2Zvcih2YXIgYT1pL3Msbz1sKGEpLGY9Yy5sZW5ndGg7Zj4wOyljWy0tZl0uY2FsbCh0LG8pO2lmKGE+PTEpcmV0dXJuIGguZXZlbnQmJmguZXZlbnQuZW5kLmNhbGwodCx0Ll9fZGF0YV9fLGUpLC0tdS5jb3VudD9kZWxldGUgdVtuXTpkZWxldGUgdFtyXSwxfWh8fChhPWkudGltZSxvPUFlKGZ1bmN0aW9uKHQpe3ZhciBlPWguZGVsYXk7aWYoby50PWUrYSxlPD10KXJldHVybiBmKHQtZSk7by5jPWZ9LDAsYSksaD11W25dPXt0d2VlbjpuZXcgYix0aW1lOmEsdGltZXI6byxkZWxheTppLmRlbGF5LGR1cmF0aW9uOmkuZHVyYXRpb24sZWFzZTppLmVhc2UsaW5kZXg6ZX0saT1udWxsLCsrdS5jb3VudCl9dnMuY2FsbD1XLmNhbGwsdnMuZW1wdHk9Vy5lbXB0eSx2cy5ub2RlPVcubm9kZSx2cy5zaXplPVcuc2l6ZSx0LnRyYW5zaXRpb249ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZSYmZS50cmFuc2l0aW9uP2RzP2UudHJhbnNpdGlvbihyKTplOnQuc2VsZWN0aW9uKCkudHJhbnNpdGlvbihlKX0sdC50cmFuc2l0aW9uLnByb3RvdHlwZT12cyx2cy5zZWxlY3Q9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9dGhpcy5pZCxhPXRoaXMubmFtZXNwYWNlLG89W107dD1YKHQpO2Zvcih2YXIgcz0tMSxsPXRoaXMubGVuZ3RoOysrczxsOyl7by5wdXNoKGU9W10pO2Zvcih2YXIgYz10aGlzW3NdLHU9LTEsaD1jLmxlbmd0aDsrK3U8aDspKG49Y1t1XSkmJihyPXQuY2FsbChuLG4uX19kYXRhX18sdSxzKSk/KFwiX19kYXRhX19cImluIG4mJihyLl9fZGF0YV9fPW4uX19kYXRhX18pLF9zKHIsdSxhLGksblthXVtpXSksZS5wdXNoKHIpKTplLnB1c2gobnVsbCl9cmV0dXJuIHBzKG8sYSxpKX0sdnMuc2VsZWN0QWxsPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbz10aGlzLmlkLHM9dGhpcy5uYW1lc3BhY2UsbD1bXTt0PVoodCk7Zm9yKHZhciBjPS0xLHU9dGhpcy5sZW5ndGg7KytjPHU7KWZvcih2YXIgaD10aGlzW2NdLGY9LTEscD1oLmxlbmd0aDsrK2Y8cDspaWYobj1oW2ZdKXthPW5bc11bb10scj10LmNhbGwobixuLl9fZGF0YV9fLGYsYyksbC5wdXNoKGU9W10pO2Zvcih2YXIgZD0tMSxnPXIubGVuZ3RoOysrZDxnOykoaT1yW2RdKSYmX3MoaSxkLHMsbyxhKSxlLnB1c2goaSl9cmV0dXJuIHBzKGwscyxvKX0sdnMuZmlsdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj1bXTtcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiYodD1jdCh0KSk7Zm9yKHZhciBpPTAsYT10aGlzLmxlbmd0aDtpPGE7aSsrKXtuLnB1c2goZT1bXSk7Zm9yKHZhciBvLHM9MCxsPShvPXRoaXNbaV0pLmxlbmd0aDtzPGw7cysrKShyPW9bc10pJiZ0LmNhbGwocixyLl9fZGF0YV9fLHMsaSkmJmUucHVzaChyKX1yZXR1cm4gcHMobix0aGlzLm5hbWVzcGFjZSx0aGlzLmlkKX0sdnMudHdlZW49ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmlkLG49dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj90aGlzLm5vZGUoKVtuXVtyXS50d2Vlbi5nZXQodCk6dXQodGhpcyxudWxsPT1lP2Z1bmN0aW9uKGUpe2Vbbl1bcl0udHdlZW4ucmVtb3ZlKHQpfTpmdW5jdGlvbihpKXtpW25dW3JdLnR3ZWVuLnNldCh0LGUpfSl9LHZzLmF0dHI9ZnVuY3Rpb24oZSxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2ZvcihyIGluIGUpdGhpcy5hdHRyKHIsZVtyXSk7cmV0dXJuIHRoaXN9dmFyIG49XCJ0cmFuc2Zvcm1cIj09ZT9nYTpaaSxpPXQubnMucXVhbGlmeShlKTtmdW5jdGlvbiBhKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoaSl9ZnVuY3Rpb24gbygpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsKX1yZXR1cm4geXModGhpcyxcImF0dHIuXCIrZSxyLGkubG9jYWw/ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/bzoodCs9XCJcIixmdW5jdGlvbigpe3ZhciBlLHI9dGhpcy5nZXRBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwpO3JldHVybiByIT09dCYmKGU9bihyLHQpLGZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsLGUodCkpfSl9KX06ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/YToodCs9XCJcIixmdW5jdGlvbigpe3ZhciBlLHI9dGhpcy5nZXRBdHRyaWJ1dGUoaSk7cmV0dXJuIHIhPT10JiYoZT1uKHIsdCksZnVuY3Rpb24odCl7dGhpcy5zZXRBdHRyaWJ1dGUoaSxlKHQpKX0pfSl9KX0sdnMuYXR0clR3ZWVuPWZ1bmN0aW9uKGUscil7dmFyIG49dC5ucy5xdWFsaWZ5KGUpO3JldHVybiB0aGlzLnR3ZWVuKFwiYXR0ci5cIitlLG4ubG9jYWw/ZnVuY3Rpb24odCxlKXt2YXIgaT1yLmNhbGwodGhpcyx0LGUsdGhpcy5nZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpKTtyZXR1cm4gaSYmZnVuY3Rpb24odCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwsaSh0KSl9fTpmdW5jdGlvbih0LGUpe3ZhciBpPXIuY2FsbCh0aGlzLHQsZSx0aGlzLmdldEF0dHJpYnV0ZShuKSk7cmV0dXJuIGkmJmZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlKG4saSh0KSl9fSl9LHZzLnN0eWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoO2lmKG48Myl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpe2ZvcihyIGluIG48MiYmKGU9XCJcIiksdCl0aGlzLnN0eWxlKHIsdFtyXSxlKTtyZXR1cm4gdGhpc31yPVwiXCJ9ZnVuY3Rpb24gaSgpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9cmV0dXJuIHlzKHRoaXMsXCJzdHlsZS5cIit0LGUsZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/aTooZSs9XCJcIixmdW5jdGlvbigpe3ZhciBuLGk9byh0aGlzKS5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KTtyZXR1cm4gaSE9PWUmJihuPVppKGksZSksZnVuY3Rpb24oZSl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4oZSkscil9KX0pfSl9LHZzLnN0eWxlVHdlZW49ZnVuY3Rpb24odCxlLHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDMmJihyPVwiXCIpLHRoaXMudHdlZW4oXCJzdHlsZS5cIit0LGZ1bmN0aW9uKG4saSl7dmFyIGE9ZS5jYWxsKHRoaXMsbixpLG8odGhpcykuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCkpO3JldHVybiBhJiZmdW5jdGlvbihlKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsYShlKSxyKX19KX0sdnMudGV4dD1mdW5jdGlvbih0KXtyZXR1cm4geXModGhpcyxcInRleHRcIix0LHhzKX0sdnMucmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIHRoaXMuZWFjaChcImVuZC50cmFuc2l0aW9uXCIsZnVuY3Rpb24oKXt2YXIgZTt0aGlzW3RdLmNvdW50PDImJihlPXRoaXMucGFyZW50Tm9kZSkmJmUucmVtb3ZlQ2hpbGQodGhpcyl9KX0sdnMuZWFzZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzLmlkLG49dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtuXVtyXS5lYXNlOihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiYoZT10LmVhc2UuYXBwbHkodCxhcmd1bWVudHMpKSx1dCh0aGlzLGZ1bmN0aW9uKHQpe3Rbbl1bcl0uZWFzZT1lfSkpfSx2cy5kZWxheT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlkLHI9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtyXVtlXS5kZWxheTp1dCh0aGlzLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZnVuY3Rpb24obixpLGEpe25bcl1bZV0uZGVsYXk9K3QuY2FsbChuLG4uX19kYXRhX18saSxhKX06KHQ9K3QsZnVuY3Rpb24obil7bltyXVtlXS5kZWxheT10fSkpfSx2cy5kdXJhdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlkLHI9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtyXVtlXS5kdXJhdGlvbjp1dCh0aGlzLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZnVuY3Rpb24obixpLGEpe25bcl1bZV0uZHVyYXRpb249TWF0aC5tYXgoMSx0LmNhbGwobixuLl9fZGF0YV9fLGksYSkpfToodD1NYXRoLm1heCgxLHQpLGZ1bmN0aW9uKG4pe25bcl1bZV0uZHVyYXRpb249dH0pKX0sdnMuZWFjaD1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMuaWQsaT10aGlzLm5hbWVzcGFjZTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBhPWdzLG89ZHM7dHJ5e2RzPW4sdXQodGhpcyxmdW5jdGlvbih0LHIsYSl7Z3M9dFtpXVtuXSxlLmNhbGwodCx0Ll9fZGF0YV9fLHIsYSl9KX1maW5hbGx5e2dzPWEsZHM9b319ZWxzZSB1dCh0aGlzLGZ1bmN0aW9uKGEpe3ZhciBvPWFbaV1bbl07KG8uZXZlbnR8fChvLmV2ZW50PXQuZGlzcGF0Y2goXCJzdGFydFwiLFwiZW5kXCIsXCJpbnRlcnJ1cHRcIikpKS5vbihlLHIpfSk7cmV0dXJuIHRoaXN9LHZzLnRyYW5zaXRpb249ZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxyLG49dGhpcy5pZCxpPSsrbXMsYT10aGlzLm5hbWVzcGFjZSxvPVtdLHM9MCxsPXRoaXMubGVuZ3RoO3M8bDtzKyspe28ucHVzaCh0PVtdKTtmb3IodmFyIGMsdT0wLGg9KGM9dGhpc1tzXSkubGVuZ3RoO3U8aDt1KyspKGU9Y1t1XSkmJl9zKGUsdSxhLGkse3RpbWU6KHI9ZVthXVtuXSkudGltZSxlYXNlOnIuZWFzZSxkZWxheTpyLmRlbGF5K3IuZHVyYXRpb24sZHVyYXRpb246ci5kdXJhdGlvbn0pLHQucHVzaChlKX1yZXR1cm4gcHMobyxhLGkpfSx0LnN2Zy5heGlzPWZ1bmN0aW9uKCl7dmFyIGUscj10LnNjYWxlLmxpbmVhcigpLGk9d3MsYT02LG89NixzPTMsbD1bMTBdLGM9bnVsbDtmdW5jdGlvbiB1KG4pe24uZWFjaChmdW5jdGlvbigpe3ZhciBuLHU9dC5zZWxlY3QodGhpcyksaD10aGlzLl9fY2hhcnRfX3x8cixmPXRoaXMuX19jaGFydF9fPXIuY29weSgpLHA9bnVsbD09Yz9mLnRpY2tzP2YudGlja3MuYXBwbHkoZixsKTpmLmRvbWFpbigpOmMsZD1udWxsPT1lP2YudGlja0Zvcm1hdD9mLnRpY2tGb3JtYXQuYXBwbHkoZixsKTp6OmUsZz11LnNlbGVjdEFsbChcIi50aWNrXCIpLmRhdGEocCxmKSx2PWcuZW50ZXIoKS5pbnNlcnQoXCJnXCIsXCIuZG9tYWluXCIpLmF0dHIoXCJjbGFzc1wiLFwidGlja1wiKS5zdHlsZShcIm9wYWNpdHlcIixrdCksbT10LnRyYW5zaXRpb24oZy5leGl0KCkpLnN0eWxlKFwib3BhY2l0eVwiLGt0KS5yZW1vdmUoKSx5PXQudHJhbnNpdGlvbihnLm9yZGVyKCkpLnN0eWxlKFwib3BhY2l0eVwiLDEpLHg9TWF0aC5tYXgoYSwwKStzLGI9dW8oZiksXz11LnNlbGVjdEFsbChcIi5kb21haW5cIikuZGF0YShbMF0pLHc9KF8uZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJjbGFzc1wiLFwiZG9tYWluXCIpLHQudHJhbnNpdGlvbihfKSk7di5hcHBlbmQoXCJsaW5lXCIpLHYuYXBwZW5kKFwidGV4dFwiKTt2YXIgayxBLFQsTSxTPXYuc2VsZWN0KFwibGluZVwiKSxFPXkuc2VsZWN0KFwibGluZVwiKSxDPWcuc2VsZWN0KFwidGV4dFwiKS50ZXh0KGQpLEw9di5zZWxlY3QoXCJ0ZXh0XCIpLE89eS5zZWxlY3QoXCJ0ZXh0XCIpLEk9XCJ0b3BcIj09PWl8fFwibGVmdFwiPT09aT8tMToxO2lmKFwiYm90dG9tXCI9PT1pfHxcInRvcFwiPT09aT8obj1BcyxrPVwieFwiLFQ9XCJ5XCIsQT1cIngyXCIsTT1cInkyXCIsQy5hdHRyKFwiZHlcIixJPDA/XCIwZW1cIjpcIi43MWVtXCIpLnN0eWxlKFwidGV4dC1hbmNob3JcIixcIm1pZGRsZVwiKSx3LmF0dHIoXCJkXCIsXCJNXCIrYlswXStcIixcIitJKm8rXCJWMEhcIitiWzFdK1wiVlwiK0kqbykpOihuPVRzLGs9XCJ5XCIsVD1cInhcIixBPVwieTJcIixNPVwieDJcIixDLmF0dHIoXCJkeVwiLFwiLjMyZW1cIikuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLEk8MD9cImVuZFwiOlwic3RhcnRcIiksdy5hdHRyKFwiZFwiLFwiTVwiK0kqbytcIixcIitiWzBdK1wiSDBWXCIrYlsxXStcIkhcIitJKm8pKSxTLmF0dHIoTSxJKmEpLEwuYXR0cihULEkqeCksRS5hdHRyKEEsMCkuYXR0cihNLEkqYSksTy5hdHRyKGssMCkuYXR0cihULEkqeCksZi5yYW5nZUJhbmQpe3ZhciBEPWYsUD1ELnJhbmdlQmFuZCgpLzI7aD1mPWZ1bmN0aW9uKHQpe3JldHVybiBEKHQpK1B9fWVsc2UgaC5yYW5nZUJhbmQ/aD1mOm0uY2FsbChuLGYsaCk7di5jYWxsKG4saCxmKSx5LmNhbGwobixmLGYpfSl9cmV0dXJuIHUuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCx1KTpyfSx1Lm9yaWVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10IGluIGtzP3QrXCJcIjp3cyx1KTppfSx1LnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9bihhcmd1bWVudHMpLHUpOmx9LHUudGlja1ZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LHUpOmN9LHUudGlja0Zvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LHUpOmV9LHUudGlja1NpemU9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gZT8oYT0rdCxvPSthcmd1bWVudHNbZS0xXSx1KTphfSx1LmlubmVyVGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3QsdSk6YX0sdS5vdXRlclRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LHUpOm99LHUudGlja1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsdSk6c30sdS50aWNrU3ViZGl2aWRlPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJnV9LHV9O3ZhciB3cz1cImJvdHRvbVwiLGtzPXt0b3A6MSxyaWdodDoxLGJvdHRvbToxLGxlZnQ6MX07ZnVuY3Rpb24gQXModCxlLHIpe3QuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3ZhciBuPWUodCk7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrKGlzRmluaXRlKG4pP246cih0KSkrXCIsMClcIn0pfWZ1bmN0aW9uIFRzKHQsZSxyKXt0LmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXt2YXIgbj1lKHQpO3JldHVyblwidHJhbnNsYXRlKDAsXCIrKGlzRmluaXRlKG4pP246cih0KSkrXCIpXCJ9KX10LnN2Zy5icnVzaD1mdW5jdGlvbigpe3ZhciBlLHIsbj1qKGYsXCJicnVzaHN0YXJ0XCIsXCJicnVzaFwiLFwiYnJ1c2hlbmRcIiksaT1udWxsLGE9bnVsbCxzPVswLDBdLGw9WzAsMF0sYz0hMCx1PSEwLGg9U3NbMF07ZnVuY3Rpb24gZihlKXtlLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10LnNlbGVjdCh0aGlzKS5zdHlsZShcInBvaW50ZXItZXZlbnRzXCIsXCJhbGxcIikuc3R5bGUoXCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3JcIixcInJnYmEoMCwwLDAsMClcIikub24oXCJtb3VzZWRvd24uYnJ1c2hcIix2KS5vbihcInRvdWNoc3RhcnQuYnJ1c2hcIix2KSxyPWUuc2VsZWN0QWxsKFwiLmJhY2tncm91bmRcIikuZGF0YShbMF0pO3IuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoXCJjbGFzc1wiLFwiYmFja2dyb3VuZFwiKS5zdHlsZShcInZpc2liaWxpdHlcIixcImhpZGRlblwiKS5zdHlsZShcImN1cnNvclwiLFwiY3Jvc3NoYWlyXCIpLGUuc2VsZWN0QWxsKFwiLmV4dGVudFwiKS5kYXRhKFswXSkuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoXCJjbGFzc1wiLFwiZXh0ZW50XCIpLnN0eWxlKFwiY3Vyc29yXCIsXCJtb3ZlXCIpO3ZhciBuPWUuc2VsZWN0QWxsKFwiLnJlc2l6ZVwiKS5kYXRhKGgseik7bi5leGl0KCkucmVtb3ZlKCksbi5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJyZXNpemUgXCIrdH0pLnN0eWxlKFwiY3Vyc29yXCIsZnVuY3Rpb24odCl7cmV0dXJuIE1zW3RdfSkuYXBwZW5kKFwicmVjdFwiKS5hdHRyKFwieFwiLGZ1bmN0aW9uKHQpe3JldHVybi9bZXddJC8udGVzdCh0KT8tMzpudWxsfSkuYXR0cihcInlcIixmdW5jdGlvbih0KXtyZXR1cm4vXltuc10vLnRlc3QodCk/LTM6bnVsbH0pLmF0dHIoXCJ3aWR0aFwiLDYpLmF0dHIoXCJoZWlnaHRcIiw2KS5zdHlsZShcInZpc2liaWxpdHlcIixcImhpZGRlblwiKSxuLnN0eWxlKFwiZGlzcGxheVwiLGYuZW1wdHkoKT9cIm5vbmVcIjpudWxsKTt2YXIgbyxzPXQudHJhbnNpdGlvbihlKSxsPXQudHJhbnNpdGlvbihyKTtpJiYobz11byhpKSxsLmF0dHIoXCJ4XCIsb1swXSkuYXR0cihcIndpZHRoXCIsb1sxXS1vWzBdKSxkKHMpKSxhJiYobz11byhhKSxsLmF0dHIoXCJ5XCIsb1swXSkuYXR0cihcImhlaWdodFwiLG9bMV0tb1swXSksZyhzKSkscChzKX0pfWZ1bmN0aW9uIHAodCl7dC5zZWxlY3RBbGwoXCIucmVzaXplXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXtyZXR1cm5cInRyYW5zbGF0ZShcIitzWysvZSQvLnRlc3QodCldK1wiLFwiK2xbKy9ecy8udGVzdCh0KV0rXCIpXCJ9KX1mdW5jdGlvbiBkKHQpe3Quc2VsZWN0KFwiLmV4dGVudFwiKS5hdHRyKFwieFwiLHNbMF0pLHQuc2VsZWN0QWxsKFwiLmV4dGVudCwubj5yZWN0LC5zPnJlY3RcIikuYXR0cihcIndpZHRoXCIsc1sxXS1zWzBdKX1mdW5jdGlvbiBnKHQpe3Quc2VsZWN0KFwiLmV4dGVudFwiKS5hdHRyKFwieVwiLGxbMF0pLHQuc2VsZWN0QWxsKFwiLmV4dGVudCwuZT5yZWN0LC53PnJlY3RcIikuYXR0cihcImhlaWdodFwiLGxbMV0tbFswXSl9ZnVuY3Rpb24gdigpe3ZhciBoLHYsbT10aGlzLHk9dC5zZWxlY3QodC5ldmVudC50YXJnZXQpLHg9bi5vZihtLGFyZ3VtZW50cyksYj10LnNlbGVjdChtKSxfPXkuZGF0dW0oKSx3PSEvXihufHMpJC8udGVzdChfKSYmaSxrPSEvXihlfHcpJC8udGVzdChfKSYmYSxBPXkuY2xhc3NlZChcImV4dGVudFwiKSxUPXh0KG0pLE09dC5tb3VzZShtKSxTPXQuc2VsZWN0KG8obSkpLm9uKFwia2V5ZG93bi5icnVzaFwiLGZ1bmN0aW9uKCl7MzI9PXQuZXZlbnQua2V5Q29kZSYmKEF8fChoPW51bGwsTVswXS09c1sxXSxNWzFdLT1sWzFdLEE9MiksQigpKX0pLm9uKFwia2V5dXAuYnJ1c2hcIixmdW5jdGlvbigpezMyPT10LmV2ZW50LmtleUNvZGUmJjI9PUEmJihNWzBdKz1zWzFdLE1bMV0rPWxbMV0sQT0wLEIoKSl9KTtpZih0LmV2ZW50LmNoYW5nZWRUb3VjaGVzP1Mub24oXCJ0b3VjaG1vdmUuYnJ1c2hcIixMKS5vbihcInRvdWNoZW5kLmJydXNoXCIsTyk6Uy5vbihcIm1vdXNlbW92ZS5icnVzaFwiLEwpLm9uKFwibW91c2V1cC5icnVzaFwiLE8pLGIuaW50ZXJydXB0KCkuc2VsZWN0QWxsKFwiKlwiKS5pbnRlcnJ1cHQoKSxBKU1bMF09c1swXS1NWzBdLE1bMV09bFswXS1NWzFdO2Vsc2UgaWYoXyl7dmFyIEU9Ky93JC8udGVzdChfKSxDPSsvXm4vLnRlc3QoXyk7dj1bc1sxLUVdLU1bMF0sbFsxLUNdLU1bMV1dLE1bMF09c1tFXSxNWzFdPWxbQ119ZWxzZSB0LmV2ZW50LmFsdEtleSYmKGg9TS5zbGljZSgpKTtmdW5jdGlvbiBMKCl7dmFyIGU9dC5tb3VzZShtKSxyPSExO3YmJihlWzBdKz12WzBdLGVbMV0rPXZbMV0pLEF8fCh0LmV2ZW50LmFsdEtleT8oaHx8KGg9WyhzWzBdK3NbMV0pLzIsKGxbMF0rbFsxXSkvMl0pLE1bMF09c1srKGVbMF08aFswXSldLE1bMV09bFsrKGVbMV08aFsxXSldKTpoPW51bGwpLHcmJnooZSxpLDApJiYoZChiKSxyPSEwKSxrJiZ6KGUsYSwxKSYmKGcoYikscj0hMCksciYmKHAoYikseCh7dHlwZTpcImJydXNoXCIsbW9kZTpBP1wibW92ZVwiOlwicmVzaXplXCJ9KSl9ZnVuY3Rpb24geih0LG4saSl7dmFyIGEsbyxmPXVvKG4pLHA9ZlswXSxkPWZbMV0sZz1NW2ldLHY9aT9sOnMsbT12WzFdLXZbMF07aWYoQSYmKHAtPWcsZC09bStnKSxhPShpP3U6Yyk/TWF0aC5tYXgocCxNYXRoLm1pbihkLHRbaV0pKTp0W2ldLEE/bz0oYSs9ZykrbTooaCYmKGc9TWF0aC5tYXgocCxNYXRoLm1pbihkLDIqaFtpXS1hKSkpLGc8YT8obz1hLGE9Zyk6bz1nKSx2WzBdIT1hfHx2WzFdIT1vKXJldHVybiBpP3I9bnVsbDplPW51bGwsdlswXT1hLHZbMV09bywhMH1mdW5jdGlvbiBPKCl7TCgpLGIuc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpLnNlbGVjdEFsbChcIi5yZXNpemVcIikuc3R5bGUoXCJkaXNwbGF5XCIsZi5lbXB0eSgpP1wibm9uZVwiOm51bGwpLHQuc2VsZWN0KFwiYm9keVwiKS5zdHlsZShcImN1cnNvclwiLG51bGwpLFMub24oXCJtb3VzZW1vdmUuYnJ1c2hcIixudWxsKS5vbihcIm1vdXNldXAuYnJ1c2hcIixudWxsKS5vbihcInRvdWNobW92ZS5icnVzaFwiLG51bGwpLm9uKFwidG91Y2hlbmQuYnJ1c2hcIixudWxsKS5vbihcImtleWRvd24uYnJ1c2hcIixudWxsKS5vbihcImtleXVwLmJydXNoXCIsbnVsbCksVCgpLHgoe3R5cGU6XCJicnVzaGVuZFwifSl9Yi5zdHlsZShcInBvaW50ZXItZXZlbnRzXCIsXCJub25lXCIpLnNlbGVjdEFsbChcIi5yZXNpemVcIikuc3R5bGUoXCJkaXNwbGF5XCIsbnVsbCksdC5zZWxlY3QoXCJib2R5XCIpLnN0eWxlKFwiY3Vyc29yXCIseS5zdHlsZShcImN1cnNvclwiKSkseCh7dHlwZTpcImJydXNoc3RhcnRcIn0pLEwoKX1yZXR1cm4gZi5ldmVudD1mdW5jdGlvbihpKXtpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1uLm9mKHRoaXMsYXJndW1lbnRzKSxhPXt4OnMseTpsLGk6ZSxqOnJ9LG89dGhpcy5fX2NoYXJ0X198fGE7dGhpcy5fX2NoYXJ0X189YSxkcz90LnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZWFjaChcInN0YXJ0LmJydXNoXCIsZnVuY3Rpb24oKXtlPW8uaSxyPW8uaixzPW8ueCxsPW8ueSxpKHt0eXBlOlwiYnJ1c2hzdGFydFwifSl9KS50d2VlbihcImJydXNoOmJydXNoXCIsZnVuY3Rpb24oKXt2YXIgdD0kaShzLGEueCksbj0kaShsLGEueSk7cmV0dXJuIGU9cj1udWxsLGZ1bmN0aW9uKGUpe3M9YS54PXQoZSksbD1hLnk9bihlKSxpKHt0eXBlOlwiYnJ1c2hcIixtb2RlOlwicmVzaXplXCJ9KX19KS5lYWNoKFwiZW5kLmJydXNoXCIsZnVuY3Rpb24oKXtlPWEuaSxyPWEuaixpKHt0eXBlOlwiYnJ1c2hcIixtb2RlOlwicmVzaXplXCJ9KSxpKHt0eXBlOlwiYnJ1c2hlbmRcIn0pfSk6KGkoe3R5cGU6XCJicnVzaHN0YXJ0XCJ9KSxpKHt0eXBlOlwiYnJ1c2hcIixtb2RlOlwicmVzaXplXCJ9KSxpKHt0eXBlOlwiYnJ1c2hlbmRcIn0pKX0pfSxmLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9U3NbIShpPXQpPDwxfCFhXSxmKTppfSxmLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9U3NbIWk8PDF8IShhPXQpXSxmKTphfSxmLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpJiZhPyhjPSEhdFswXSx1PSEhdFsxXSk6aT9jPSEhdDphJiYodT0hIXQpLGYpOmkmJmE/W2MsdV06aT9jOmE/dTpudWxsfSxmLmV4dGVudD1mdW5jdGlvbih0KXt2YXIgbixvLGMsdSxoO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpJiYobj10WzBdLG89dFsxXSxhJiYobj1uWzBdLG89b1swXSksZT1bbixvXSxpLmludmVydCYmKG49aShuKSxvPWkobykpLG88biYmKGg9bixuPW8sbz1oKSxuPT1zWzBdJiZvPT1zWzFdfHwocz1bbixvXSkpLGEmJihjPXRbMF0sdT10WzFdLGkmJihjPWNbMV0sdT11WzFdKSxyPVtjLHVdLGEuaW52ZXJ0JiYoYz1hKGMpLHU9YSh1KSksdTxjJiYoaD1jLGM9dSx1PWgpLGM9PWxbMF0mJnU9PWxbMV18fChsPVtjLHVdKSksZik6KGkmJihlPyhuPWVbMF0sbz1lWzFdKToobj1zWzBdLG89c1sxXSxpLmludmVydCYmKG49aS5pbnZlcnQobiksbz1pLmludmVydChvKSksbzxuJiYoaD1uLG49byxvPWgpKSksYSYmKHI/KGM9clswXSx1PXJbMV0pOihjPWxbMF0sdT1sWzFdLGEuaW52ZXJ0JiYoYz1hLmludmVydChjKSx1PWEuaW52ZXJ0KHUpKSx1PGMmJihoPWMsYz11LHU9aCkpKSxpJiZhP1tbbixjXSxbbyx1XV06aT9bbixvXTphJiZbYyx1XSl9LGYuY2xlYXI9ZnVuY3Rpb24oKXtyZXR1cm4gZi5lbXB0eSgpfHwocz1bMCwwXSxsPVswLDBdLGU9cj1udWxsKSxmfSxmLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuISFpJiZzWzBdPT1zWzFdfHwhIWEmJmxbMF09PWxbMV19LHQucmViaW5kKGYsbixcIm9uXCIpfTt2YXIgTXM9e246XCJucy1yZXNpemVcIixlOlwiZXctcmVzaXplXCIsczpcIm5zLXJlc2l6ZVwiLHc6XCJldy1yZXNpemVcIixudzpcIm53c2UtcmVzaXplXCIsbmU6XCJuZXN3LXJlc2l6ZVwiLHNlOlwibndzZS1yZXNpemVcIixzdzpcIm5lc3ctcmVzaXplXCJ9LFNzPVtbXCJuXCIsXCJlXCIsXCJzXCIsXCJ3XCIsXCJud1wiLFwibmVcIixcInNlXCIsXCJzd1wiXSxbXCJlXCIsXCJ3XCJdLFtcIm5cIixcInNcIl0sW11dLEVzPUllLmZvcm1hdD1zci50aW1lRm9ybWF0LENzPUVzLnV0YyxMcz1DcyhcIiVZLSVtLSVkVCVIOiVNOiVTLiVMWlwiKTtmdW5jdGlvbiB6cyh0KXtyZXR1cm4gdC50b0lTT1N0cmluZygpfWZ1bmN0aW9uIE9zKGUscixuKXtmdW5jdGlvbiBpKHQpe3JldHVybiBlKHQpfWZ1bmN0aW9uIGEoZSxuKXt2YXIgaT0oZVsxXS1lWzBdKS9uLGE9dC5iaXNlY3QoRHMsaSk7cmV0dXJuIGE9PURzLmxlbmd0aD9bci55ZWFyLHhvKGUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LzMxNTM2ZTZ9KSxuKVsyXV06YT9yW2kvRHNbYS0xXTxEc1thXS9pP2EtMTphXTpbRnMseG8oZSxuKVsyXV19cmV0dXJuIGkuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBJcyhlLmludmVydCh0KSl9LGkuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlLmRvbWFpbih0KSxpKTplLmRvbWFpbigpLm1hcChJcyl9LGkubmljZT1mdW5jdGlvbih0LGUpe3ZhciByPWkuZG9tYWluKCksbj1jbyhyKSxvPW51bGw9PXQ/YShuLDEwKTpcIm51bWJlclwiPT10eXBlb2YgdCYmYShuLHQpO2Z1bmN0aW9uIHMocil7cmV0dXJuIWlzTmFOKHIpJiYhdC5yYW5nZShyLElzKCtyKzEpLGUpLmxlbmd0aH1yZXR1cm4gbyYmKHQ9b1swXSxlPW9bMV0pLGkuZG9tYWluKGZvKHIsZT4xP3tmbG9vcjpmdW5jdGlvbihlKXtmb3IoO3MoZT10LmZsb29yKGUpKTspZT1JcyhlLTEpO3JldHVybiBlfSxjZWlsOmZ1bmN0aW9uKGUpe2Zvcig7cyhlPXQuY2VpbChlKSk7KWU9SXMoK2UrMSk7cmV0dXJuIGV9fTp0KSl9LGkudGlja3M9ZnVuY3Rpb24odCxlKXt2YXIgcj1jbyhpLmRvbWFpbigpKSxuPW51bGw9PXQ/YShyLDEwKTpcIm51bWJlclwiPT10eXBlb2YgdD9hKHIsdCk6IXQucmFuZ2UmJlt7cmFuZ2U6dH0sZV07cmV0dXJuIG4mJih0PW5bMF0sZT1uWzFdKSx0LnJhbmdlKHJbMF0sSXMoK3JbMV0rMSksZTwxPzE6ZSl9LGkudGlja0Zvcm1hdD1mdW5jdGlvbigpe3JldHVybiBufSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gT3MoZS5jb3B5KCkscixuKX0sbW8oaSxlKX1mdW5jdGlvbiBJcyh0KXtyZXR1cm4gbmV3IERhdGUodCl9RXMuaXNvPURhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nJiYrbmV3IERhdGUoXCIyMDAwLTAxLTAxVDAwOjAwOjAwLjAwMFpcIik/enM6THMsenMucGFyc2U9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IERhdGUodCk7cmV0dXJuIGlzTmFOKGUpP251bGw6ZX0senMudG9TdHJpbmc9THMudG9TdHJpbmcsSWUuc2Vjb25kPUZlKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRGUoMWUzKk1hdGguZmxvb3IodC8xZTMpKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUodC5nZXRUaW1lKCkrMWUzKk1hdGguZmxvb3IoZSkpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRTZWNvbmRzKCl9KSxJZS5zZWNvbmRzPUllLnNlY29uZC5yYW5nZSxJZS5zZWNvbmRzLnV0Yz1JZS5zZWNvbmQudXRjLnJhbmdlLEllLm1pbnV0ZT1GZShmdW5jdGlvbih0KXtyZXR1cm4gbmV3IERlKDZlNCpNYXRoLmZsb29yKHQvNmU0KSl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKHQuZ2V0VGltZSgpKzZlNCpNYXRoLmZsb29yKGUpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TWludXRlcygpfSksSWUubWludXRlcz1JZS5taW51dGUucmFuZ2UsSWUubWludXRlcy51dGM9SWUubWludXRlLnV0Yy5yYW5nZSxJZS5ob3VyPUZlKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKS82MDtyZXR1cm4gbmV3IERlKDM2ZTUqKE1hdGguZmxvb3IodC8zNmU1LWUpK2UpKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUodC5nZXRUaW1lKCkrMzZlNSpNYXRoLmZsb29yKGUpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0pLEllLmhvdXJzPUllLmhvdXIucmFuZ2UsSWUuaG91cnMudXRjPUllLmhvdXIudXRjLnJhbmdlLEllLm1vbnRoPUZlKGZ1bmN0aW9uKHQpe3JldHVybih0PUllLmRheSh0KSkuc2V0RGF0ZSgxKSx0fSxmdW5jdGlvbih0LGUpe3Quc2V0TW9udGgodC5nZXRNb250aCgpK2UpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSksSWUubW9udGhzPUllLm1vbnRoLnJhbmdlLEllLm1vbnRocy51dGM9SWUubW9udGgudXRjLnJhbmdlO3ZhciBEcz1bMWUzLDVlMywxNWUzLDNlNCw2ZTQsM2U1LDllNSwxOGU1LDM2ZTUsMTA4ZTUsMjE2ZTUsNDMyZTUsODY0ZTUsMTcyOGU1LDYwNDhlNSwyNTkyZTYsNzc3NmU2LDMxNTM2ZTZdLFBzPVtbSWUuc2Vjb25kLDFdLFtJZS5zZWNvbmQsNV0sW0llLnNlY29uZCwxNV0sW0llLnNlY29uZCwzMF0sW0llLm1pbnV0ZSwxXSxbSWUubWludXRlLDVdLFtJZS5taW51dGUsMTVdLFtJZS5taW51dGUsMzBdLFtJZS5ob3VyLDFdLFtJZS5ob3VyLDNdLFtJZS5ob3VyLDZdLFtJZS5ob3VyLDEyXSxbSWUuZGF5LDFdLFtJZS5kYXksMl0sW0llLndlZWssMV0sW0llLm1vbnRoLDFdLFtJZS5tb250aCwzXSxbSWUueWVhciwxXV0sUnM9RXMubXVsdGkoW1tcIi4lTFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbGxpc2Vjb25kcygpfV0sW1wiOiVTXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0U2Vjb25kcygpfV0sW1wiJUk6JU1cIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaW51dGVzKCl9XSxbXCIlSSAlcFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9XSxbXCIlYSAlZFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERheSgpJiYxIT10LmdldERhdGUoKX1dLFtcIiViICVkXCIsZnVuY3Rpb24odCl7cmV0dXJuIDEhPXQuZ2V0RGF0ZSgpfV0sW1wiJUJcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfV0sW1wiJVlcIixZcl1dKSxGcz17cmFuZ2U6ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LnJhbmdlKE1hdGguY2VpbChlL24pKm4sK3IsbikubWFwKElzKX0sZmxvb3I6eixjZWlsOnp9O1BzLnllYXI9SWUueWVhcixJZS5zY2FsZT1mdW5jdGlvbigpe3JldHVybiBPcyh0LnNjYWxlLmxpbmVhcigpLFBzLFJzKX07dmFyIEJzPVBzLm1hcChmdW5jdGlvbih0KXtyZXR1cm5bdFswXS51dGMsdFsxXV19KSxOcz1Dcy5tdWx0aShbW1wiLiVMXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCl9XSxbXCI6JVNcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENTZWNvbmRzKCl9XSxbXCIlSTolTVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX1dLFtcIiVJICVwXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDSG91cnMoKX1dLFtcIiVhICVkXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRGF5KCkmJjEhPXQuZ2V0VVRDRGF0ZSgpfV0sW1wiJWIgJWRcIixmdW5jdGlvbih0KXtyZXR1cm4gMSE9dC5nZXRVVENEYXRlKCl9XSxbXCIlQlwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCl9XSxbXCIlWVwiLFlyXV0pO2Z1bmN0aW9uIGpzKHQpe3JldHVybiBKU09OLnBhcnNlKHQucmVzcG9uc2VUZXh0KX1mdW5jdGlvbiBWcyh0KXt2YXIgZT1pLmNyZWF0ZVJhbmdlKCk7cmV0dXJuIGUuc2VsZWN0Tm9kZShpLmJvZHkpLGUuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHQucmVzcG9uc2VUZXh0KX1Ccy55ZWFyPUllLnllYXIudXRjLEllLnNjYWxlLnV0Yz1mdW5jdGlvbigpe3JldHVybiBPcyh0LnNjYWxlLmxpbmVhcigpLEJzLE5zKX0sdC50ZXh0PW1lKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc3BvbnNlVGV4dH0pLHQuanNvbj1mdW5jdGlvbih0LGUpe3JldHVybiB5ZSh0LFwiYXBwbGljYXRpb24vanNvblwiLGpzLGUpfSx0Lmh0bWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4geWUodCxcInRleHQvaHRtbFwiLFZzLGUpfSx0LnhtbD1tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXNwb25zZVhNTH0pLFwib2JqZWN0XCI9PXR5cGVvZiBlJiZlLmV4cG9ydHM/ZS5leHBvcnRzPXQ6dGhpcy5kMz10fSgpfSx7fV0sMTU2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKylpZih2b2lkIDAhPT1hcmd1bWVudHNbdF0pcmV0dXJuIGFyZ3VtZW50c1t0XX19LHt9XSwxNTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiaW5jcmVtZW50YWwtY29udmV4LWh1bGxcIiksaT10KFwidW5pcVwiKTtmdW5jdGlvbiBhKHQsZSl7dGhpcy5wb2ludD10LHRoaXMuaW5kZXg9ZX1mdW5jdGlvbiBvKHQsZSl7Zm9yKHZhciByPXQucG9pbnQsbj1lLnBvaW50LGk9ci5sZW5ndGgsYT0wO2E8aTsrK2Epe3ZhciBvPW5bYV0tclthXTtpZihvKXJldHVybiBvfXJldHVybiAwfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoO2lmKDA9PT1yKXJldHVybltdO3ZhciBzPXRbMF0ubGVuZ3RoO2lmKHM8MSlyZXR1cm5bXTtpZigxPT09cylyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKDE9PT10KXJldHVybiByP1tbLTEsMF1dOltdO3ZhciBuPWUubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RbMF0sZV19KTtuLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXS1lWzBdfSk7Zm9yKHZhciBpPW5ldyBBcnJheSh0LTEpLGE9MTthPHQ7KythKXt2YXIgbz1uW2EtMV0scz1uW2FdO2lbYS0xXT1bb1sxXSxzWzFdXX1yJiZpLnB1c2goWy0xLGlbMF1bMV1dLFtpW3QtMV1bMV0sLTFdKTtyZXR1cm4gaX0ocix0LGUpO2Zvcih2YXIgbD1uZXcgQXJyYXkociksYz0xLHU9MDt1PHI7Kyt1KXtmb3IodmFyIGg9dFt1XSxmPW5ldyBBcnJheShzKzEpLHA9MCxkPTA7ZDxzOysrZCl7dmFyIGc9aFtkXTtmW2RdPWcscCs9ZypnfWZbc109cCxsW3VdPW5ldyBhKGYsdSksYz1NYXRoLm1heChwLGMpfWkobCxvKSxyPWwubGVuZ3RoO2Zvcih2YXIgdj1uZXcgQXJyYXkocitzKzEpLG09bmV3IEFycmF5KHIrcysxKSx5PShzKzEpKihzKzEpKmMseD1uZXcgQXJyYXkocysxKSx1PTA7dTw9czsrK3UpeFt1XT0wO3hbc109eSx2WzBdPXguc2xpY2UoKSxtWzBdPS0xO2Zvcih2YXIgdT0wO3U8PXM7Kyt1KXt2YXIgZj14LnNsaWNlKCk7Zlt1XT0xLHZbdSsxXT1mLG1bdSsxXT0tMX1mb3IodmFyIHU9MDt1PHI7Kyt1KXt2YXIgYj1sW3VdO3ZbdStzKzFdPWIucG9pbnQsbVt1K3MrMV09Yi5pbmRleH12YXIgXz1uKHYsITEpO189ZT9fLmZpbHRlcihmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTA7cjw9czsrK3Ipe3ZhciBuPW1bdFtyXV07aWYobjwwJiYrK2U+PTIpcmV0dXJuITE7dFtyXT1ufXJldHVybiEwfSk6Xy5maWx0ZXIoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTw9czsrK2Upe3ZhciByPW1bdFtlXV07aWYocjwwKXJldHVybiExO3RbZV09cn1yZXR1cm4hMH0pO2lmKDEmcylmb3IodmFyIHU9MDt1PF8ubGVuZ3RoOysrdSl7dmFyIGI9X1t1XSxmPWJbMF07YlswXT1iWzFdLGJbMV09Zn1yZXR1cm4gX319LHtcImluY3JlbWVudGFsLWNvbnZleC1odWxsXCI6NDA2LHVuaXE6NTMyfV0sMTU4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWE7dmFyIG49KGEuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIikpLmdldENvbnRleHQoXCIyZFwiKSxpPW8oWzMyLDEyNl0pO2Z1bmN0aW9uIGEodCxlKXtBcnJheS5pc0FycmF5KHQpJiYodD10LmpvaW4oXCIsIFwiKSk7dmFyIHIsYT17fSxzPTE2LGw9LjA1O2UmJigyPT09ZS5sZW5ndGgmJlwibnVtYmVyXCI9PXR5cGVvZiBlWzBdP3I9byhlKTpBcnJheS5pc0FycmF5KGUpP3I9ZTooZS5vP3I9byhlLm8pOmUucGFpcnMmJihyPWUucGFpcnMpLGUuZm9udFNpemUmJihzPWUuZm9udFNpemUpLG51bGwhPWUudGhyZXNob2xkJiYobD1lLnRocmVzaG9sZCkpKSxyfHwocj1pKSxuLmZvbnQ9cytcInB4IFwiK3Q7Zm9yKHZhciBjPTA7YzxyLmxlbmd0aDtjKyspe3ZhciB1PXJbY10saD1uLm1lYXN1cmVUZXh0KHVbMF0pLndpZHRoK24ubWVhc3VyZVRleHQodVsxXSkud2lkdGgsZj1uLm1lYXN1cmVUZXh0KHUpLndpZHRoO2lmKE1hdGguYWJzKGgtZik+cypsKXt2YXIgcD0oZi1oKS9zO2FbdV09MWUzKnB9fXJldHVybiBhfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPVtdLHI9dFswXTtyPD10WzFdO3IrKylmb3IodmFyIG49U3RyaW5nLmZyb21DaGFyQ29kZShyKSxpPXRbMF07aTx0WzFdO2krKyl7dmFyIGE9bitTdHJpbmcuZnJvbUNoYXJDb2RlKGkpO2UucHVzaChhKX1yZXR1cm4gZX1hLmNyZWF0ZVBhaXJzPW8sYS5hc2NpaT1pfSx7fV0sMTU5OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe3ZhciByPSExO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBGbG9hdDY0QXJyYXkpe3ZhciBuPW5ldyBGbG9hdDY0QXJyYXkoMSksaT1uZXcgVWludDMyQXJyYXkobi5idWZmZXIpO2lmKG5bMF09MSxyPSEwLDEwNzI2OTMyNDg9PT1pWzFdKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxbaVswXSxpWzFdXX0sZS5leHBvcnRzLnBhY2s9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaVswXT10LGlbMV09ZSxuWzBdfSxlLmV4cG9ydHMubG89ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxpWzBdfSxlLmV4cG9ydHMuaGk9ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxpWzFdfX1lbHNlIGlmKDEwNzI2OTMyNDg9PT1pWzBdKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxbaVsxXSxpWzBdXX0sZS5leHBvcnRzLnBhY2s9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaVsxXT10LGlbMF09ZSxuWzBdfSxlLmV4cG9ydHMubG89ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxpWzFdfSxlLmV4cG9ydHMuaGk9ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxpWzBdfX1lbHNlIHI9ITF9aWYoIXIpe3ZhciBhPW5ldyB0KDgpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYS53cml0ZURvdWJsZUxFKHQsMCwhMCksW2EucmVhZFVJbnQzMkxFKDAsITApLGEucmVhZFVJbnQzMkxFKDQsITApXX0sZS5leHBvcnRzLnBhY2s9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYS53cml0ZVVJbnQzMkxFKHQsMCwhMCksYS53cml0ZVVJbnQzMkxFKGUsNCwhMCksYS5yZWFkRG91YmxlTEUoMCwhMCl9LGUuZXhwb3J0cy5sbz1mdW5jdGlvbih0KXtyZXR1cm4gYS53cml0ZURvdWJsZUxFKHQsMCwhMCksYS5yZWFkVUludDMyTEUoMCwhMCl9LGUuZXhwb3J0cy5oaT1mdW5jdGlvbih0KXtyZXR1cm4gYS53cml0ZURvdWJsZUxFKHQsMCwhMCksYS5yZWFkVUludDMyTEUoNCwhMCl9fWUuZXhwb3J0cy5zaWduPWZ1bmN0aW9uKHQpe3JldHVybiBlLmV4cG9ydHMuaGkodCk+Pj4zMX0sZS5leHBvcnRzLmV4cG9uZW50PWZ1bmN0aW9uKHQpe3JldHVybihlLmV4cG9ydHMuaGkodCk8PDE+Pj4yMSktMTAyM30sZS5leHBvcnRzLmZyYWN0aW9uPWZ1bmN0aW9uKHQpe3ZhciByPWUuZXhwb3J0cy5sbyh0KSxuPWUuZXhwb3J0cy5oaSh0KSxpPTEwNDg1NzUmbjtyZXR1cm4gMjE0NjQzNTA3MiZuJiYoaSs9MTw8MjApLFtyLGldfSxlLmV4cG9ydHMuZGVub3JtYWxpemVkPWZ1bmN0aW9uKHQpe3JldHVybiEoMjE0NjQzNTA3MiZlLmV4cG9ydHMuaGkodCkpfX0pLmNhbGwodGhpcyx0KFwiYnVmZmVyXCIpLkJ1ZmZlcil9LHtidWZmZXI6OTZ9XSwxNjA6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiYWJzLXN2Zy1wYXRoXCIpLGk9dChcIm5vcm1hbGl6ZS1zdmctcGF0aFwiKSxhPXtNOlwibW92ZVRvXCIsQzpcImJlemllckN1cnZlVG9cIn07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5iZWdpblBhdGgoKSxpKG4oZSkpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHI9ZVswXSxuPWUuc2xpY2UoMSk7dFthW3JdXS5hcHBseSh0LG4pfSksdC5jbG9zZVBhdGgoKX19LHtcImFicy1zdmctcGF0aFwiOjUxLFwibm9ybWFsaXplLXN2Zy1wYXRoXCI6NDQ1fV0sMTYxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlXCJpbnQ4XCI6cmV0dXJuIEludDhBcnJheTtjYXNlXCJpbnQxNlwiOnJldHVybiBJbnQxNkFycmF5O2Nhc2VcImludDMyXCI6cmV0dXJuIEludDMyQXJyYXk7Y2FzZVwidWludDhcIjpyZXR1cm4gVWludDhBcnJheTtjYXNlXCJ1aW50MTZcIjpyZXR1cm4gVWludDE2QXJyYXk7Y2FzZVwidWludDMyXCI6cmV0dXJuIFVpbnQzMkFycmF5O2Nhc2VcImZsb2F0MzJcIjpyZXR1cm4gRmxvYXQzMkFycmF5O2Nhc2VcImZsb2F0NjRcIjpyZXR1cm4gRmxvYXQ2NEFycmF5O2Nhc2VcImFycmF5XCI6cmV0dXJuIEFycmF5O2Nhc2VcInVpbnQ4X2NsYW1wZWRcIjpyZXR1cm4gVWludDhDbGFtcGVkQXJyYXl9fX0se31dLDE2MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3N3aXRjaChcInVuZGVmaW5lZFwiPT10eXBlb2YgZSYmKGU9MCksdHlwZW9mIHQpe2Nhc2VcIm51bWJlclwiOmlmKHQ+MClyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcixuO2ZvcihyPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWU7cmV0dXJuIHJ9KDB8dCxlKTticmVhaztjYXNlXCJvYmplY3RcIjppZihcIm51bWJlclwiPT10eXBlb2YgdC5sZW5ndGgpcmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4pe3ZhciBpPTB8ZVtuXTtpZihpPD0wKXJldHVybltdO3ZhciBhLG89bmV3IEFycmF5KGkpO2lmKG49PT1lLmxlbmd0aC0xKWZvcihhPTA7YTxpOysrYSlvW2FdPXI7ZWxzZSBmb3IoYT0wO2E8aTsrK2Epb1thXT10KGUscixuKzEpO3JldHVybiBvfSh0LGUsMCl9cmV0dXJuW119fSx7fV0sMTYzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUscil7cj1yfHwyO3ZhciBuLHMsbCxjLHUscCxnLHY9ZSYmZS5sZW5ndGgsbT12P2VbMF0qcjp0Lmxlbmd0aCx5PWkodCwwLG0sciwhMCkseD1bXTtpZigheSlyZXR1cm4geDtpZih2JiYoeT1mdW5jdGlvbih0LGUscixuKXt2YXIgbyxzLGwsYyx1LHA9W107Zm9yKG89MCxzPWUubGVuZ3RoO288cztvKyspbD1lW29dKm4sYz1vPHMtMT9lW28rMV0qbjp0Lmxlbmd0aCwodT1pKHQsbCxjLG4sITEpKT09PXUubmV4dCYmKHUuc3RlaW5lcj0hMCkscC5wdXNoKGQodSkpO2ZvcihwLnNvcnQoaCksbz0wO288cC5sZW5ndGg7bysrKWYocFtvXSxyKSxyPWEocixyLm5leHQpO3JldHVybiByfSh0LGUseSxyKSksdC5sZW5ndGg+ODAqcil7bj1sPXRbMF0scz1jPXRbMV07Zm9yKHZhciBiPXI7YjxtO2IrPXIpKHU9dFtiXSk8biYmKG49dSksKHA9dFtiKzFdKTxzJiYocz1wKSx1PmwmJihsPXUpLHA+YyYmKGM9cCk7Zz0wIT09KGc9TWF0aC5tYXgobC1uLGMtcykpPzEvZzowfXJldHVybiBvKHkseCxyLG4scyxnKSx4fWZ1bmN0aW9uIGkodCxlLHIsbixpKXt2YXIgYSxvO2lmKGk9PT1UKHQsZSxyLG4pPjApZm9yKGE9ZTthPHI7YSs9bilvPXcoYSx0W2FdLHRbYSsxXSxvKTtlbHNlIGZvcihhPXItbjthPj1lO2EtPW4pbz13KGEsdFthXSx0W2ErMV0sbyk7cmV0dXJuIG8mJnkobyxvLm5leHQpJiYoayhvKSxvPW8ubmV4dCksb31mdW5jdGlvbiBhKHQsZSl7aWYoIXQpcmV0dXJuIHQ7ZXx8KGU9dCk7dmFyIHIsbj10O2Rve2lmKHI9ITEsbi5zdGVpbmVyfHwheShuLG4ubmV4dCkmJjAhPT1tKG4ucHJldixuLG4ubmV4dCkpbj1uLm5leHQ7ZWxzZXtpZihrKG4pLChuPWU9bi5wcmV2KT09PW4ubmV4dClicmVhaztyPSEwfX13aGlsZShyfHxuIT09ZSk7cmV0dXJuIGV9ZnVuY3Rpb24gbyh0LGUscixuLGksaCxmKXtpZih0KXshZiYmaCYmZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dDtkb3tudWxsPT09aS56JiYoaS56PXAoaS54LGkueSxlLHIsbikpLGkucHJldlo9aS5wcmV2LGkubmV4dFo9aS5uZXh0LGk9aS5uZXh0fXdoaWxlKGkhPT10KTtpLnByZXZaLm5leHRaPW51bGwsaS5wcmV2Wj1udWxsLGZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbyxzLGwsYz0xO2Rve2ZvcihyPXQsdD1udWxsLGE9bnVsbCxvPTA7cjspe2ZvcihvKyssbj1yLHM9MCxlPTA7ZTxjJiYocysrLG49bi5uZXh0Wik7ZSsrKTtmb3IobD1jO3M+MHx8bD4wJiZuOykwIT09cyYmKDA9PT1sfHwhbnx8ci56PD1uLnopPyhpPXIscj1yLm5leHRaLHMtLSk6KGk9bixuPW4ubmV4dFosbC0tKSxhP2EubmV4dFo9aTp0PWksaS5wcmV2Wj1hLGE9aTtyPW59YS5uZXh0Wj1udWxsLGMqPTJ9d2hpbGUobz4xKX0oaSl9KHQsbixpLGgpO2Zvcih2YXIgZCxnLHY9dDt0LnByZXYhPT10Lm5leHQ7KWlmKGQ9dC5wcmV2LGc9dC5uZXh0LGg/bCh0LG4saSxoKTpzKHQpKWUucHVzaChkLmkvciksZS5wdXNoKHQuaS9yKSxlLnB1c2goZy5pL3IpLGsodCksdD1nLm5leHQsdj1nLm5leHQ7ZWxzZSBpZigodD1nKT09PXYpe2Y/MT09PWY/byh0PWModCxlLHIpLGUscixuLGksaCwyKToyPT09ZiYmdSh0LGUscixuLGksaCk6byhhKHQpLGUscixuLGksaCwxKTticmVha319fWZ1bmN0aW9uIHModCl7dmFyIGU9dC5wcmV2LHI9dCxuPXQubmV4dDtpZihtKGUscixuKT49MClyZXR1cm4hMTtmb3IodmFyIGk9dC5uZXh0Lm5leHQ7aSE9PXQucHJldjspe2lmKGcoZS54LGUueSxyLngsci55LG4ueCxuLnksaS54LGkueSkmJm0oaS5wcmV2LGksaS5uZXh0KT49MClyZXR1cm4hMTtpPWkubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBsKHQsZSxyLG4pe3ZhciBpPXQucHJldixhPXQsbz10Lm5leHQ7aWYobShpLGEsbyk+PTApcmV0dXJuITE7Zm9yKHZhciBzPWkueDxhLng/aS54PG8ueD9pLng6by54OmEueDxvLng/YS54Om8ueCxsPWkueTxhLnk/aS55PG8ueT9pLnk6by55OmEueTxvLnk/YS55Om8ueSxjPWkueD5hLng/aS54Pm8ueD9pLng6by54OmEueD5vLng/YS54Om8ueCx1PWkueT5hLnk/aS55Pm8ueT9pLnk6by55OmEueT5vLnk/YS55Om8ueSxoPXAocyxsLGUscixuKSxmPXAoYyx1LGUscixuKSxkPXQucHJldlosdj10Lm5leHRaO2QmJmQuej49aCYmdiYmdi56PD1mOyl7aWYoZCE9PXQucHJldiYmZCE9PXQubmV4dCYmZyhpLngsaS55LGEueCxhLnksby54LG8ueSxkLngsZC55KSYmbShkLnByZXYsZCxkLm5leHQpPj0wKXJldHVybiExO2lmKGQ9ZC5wcmV2Wix2IT09dC5wcmV2JiZ2IT09dC5uZXh0JiZnKGkueCxpLnksYS54LGEueSxvLngsby55LHYueCx2LnkpJiZtKHYucHJldix2LHYubmV4dCk+PTApcmV0dXJuITE7dj12Lm5leHRafWZvcig7ZCYmZC56Pj1oOyl7aWYoZCE9PXQucHJldiYmZCE9PXQubmV4dCYmZyhpLngsaS55LGEueCxhLnksby54LG8ueSxkLngsZC55KSYmbShkLnByZXYsZCxkLm5leHQpPj0wKXJldHVybiExO2Q9ZC5wcmV2Wn1mb3IoO3YmJnYuejw9Zjspe2lmKHYhPT10LnByZXYmJnYhPT10Lm5leHQmJmcoaS54LGkueSxhLngsYS55LG8ueCxvLnksdi54LHYueSkmJm0odi5wcmV2LHYsdi5uZXh0KT49MClyZXR1cm4hMTt2PXYubmV4dFp9cmV0dXJuITB9ZnVuY3Rpb24gYyh0LGUscil7dmFyIG49dDtkb3t2YXIgaT1uLnByZXYsYT1uLm5leHQubmV4dDsheShpLGEpJiZ4KGksbixuLm5leHQsYSkmJmIoaSxhKSYmYihhLGkpJiYoZS5wdXNoKGkuaS9yKSxlLnB1c2gobi5pL3IpLGUucHVzaChhLmkvciksayhuKSxrKG4ubmV4dCksbj10PWEpLG49bi5uZXh0fXdoaWxlKG4hPT10KTtyZXR1cm4gbn1mdW5jdGlvbiB1KHQsZSxyLG4saSxzKXt2YXIgbD10O2Rve2Zvcih2YXIgYz1sLm5leHQubmV4dDtjIT09bC5wcmV2Oyl7aWYobC5pIT09Yy5pJiZ2KGwsYykpe3ZhciB1PV8obCxjKTtyZXR1cm4gbD1hKGwsbC5uZXh0KSx1PWEodSx1Lm5leHQpLG8obCxlLHIsbixpLHMpLHZvaWQgbyh1LGUscixuLGkscyl9Yz1jLm5leHR9bD1sLm5leHR9d2hpbGUobCE9PXQpfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdC54LWUueH1mdW5jdGlvbiBmKHQsZSl7aWYoZT1mdW5jdGlvbih0LGUpe3ZhciByLG49ZSxpPXQueCxhPXQueSxvPS0xLzA7ZG97aWYoYTw9bi55JiZhPj1uLm5leHQueSYmbi5uZXh0LnkhPT1uLnkpe3ZhciBzPW4ueCsoYS1uLnkpKihuLm5leHQueC1uLngpLyhuLm5leHQueS1uLnkpO2lmKHM8PWkmJnM+byl7aWYobz1zLHM9PT1pKXtpZihhPT09bi55KXJldHVybiBuO2lmKGE9PT1uLm5leHQueSlyZXR1cm4gbi5uZXh0fXI9bi54PG4ubmV4dC54P246bi5uZXh0fX1uPW4ubmV4dH13aGlsZShuIT09ZSk7aWYoIXIpcmV0dXJuIG51bGw7aWYoaT09PW8pcmV0dXJuIHIucHJldjt2YXIgbCxjPXIsdT1yLngsaD1yLnksZj0xLzA7bj1yLm5leHQ7Zm9yKDtuIT09YzspaT49bi54JiZuLng+PXUmJmkhPT1uLngmJmcoYTxoP2k6byxhLHUsaCxhPGg/bzppLGEsbi54LG4ueSkmJigobD1NYXRoLmFicyhhLW4ueSkvKGktbi54KSk8Znx8bD09PWYmJm4ueD5yLngpJiZiKG4sdCkmJihyPW4sZj1sKSxuPW4ubmV4dDtyZXR1cm4gcn0odCxlKSl7dmFyIHI9XyhlLHQpO2EocixyLm5leHQpfX1mdW5jdGlvbiBwKHQsZSxyLG4saSl7cmV0dXJuKHQ9MTQzMTY1NTc2NSYoKHQ9ODU4OTkzNDU5JigodD0yNTI2NDUxMzUmKCh0PTE2NzExOTM1JigodD0zMjc2NyoodC1yKSppKXx0PDw4KSl8dDw8NCkpfHQ8PDIpKXx0PDwxKSl8KGU9MTQzMTY1NTc2NSYoKGU9ODU4OTkzNDU5JigoZT0yNTI2NDUxMzUmKChlPTE2NzExOTM1JigoZT0zMjc2NyooZS1uKSppKXxlPDw4KSl8ZTw8NCkpfGU8PDIpKXxlPDwxKSk8PDF9ZnVuY3Rpb24gZCh0KXt2YXIgZT10LHI9dDtkb3tlLng8ci54JiYocj1lKSxlPWUubmV4dH13aGlsZShlIT09dCk7cmV0dXJuIHJ9ZnVuY3Rpb24gZyh0LGUscixuLGksYSxvLHMpe3JldHVybihpLW8pKihlLXMpLSh0LW8pKihhLXMpPj0wJiYodC1vKSoobi1zKS0oci1vKSooZS1zKT49MCYmKHItbykqKGEtcyktKGktbykqKG4tcyk+PTB9ZnVuY3Rpb24gdih0LGUpe3JldHVybiB0Lm5leHQuaSE9PWUuaSYmdC5wcmV2LmkhPT1lLmkmJiFmdW5jdGlvbih0LGUpe3ZhciByPXQ7ZG97aWYoci5pIT09dC5pJiZyLm5leHQuaSE9PXQuaSYmci5pIT09ZS5pJiZyLm5leHQuaSE9PWUuaSYmeChyLHIubmV4dCx0LGUpKXJldHVybiEwO3I9ci5uZXh0fXdoaWxlKHIhPT10KTtyZXR1cm4hMX0odCxlKSYmYih0LGUpJiZiKGUsdCkmJmZ1bmN0aW9uKHQsZSl7dmFyIHI9dCxuPSExLGk9KHQueCtlLngpLzIsYT0odC55K2UueSkvMjtkb3tyLnk+YSE9ci5uZXh0Lnk+YSYmci5uZXh0LnkhPT1yLnkmJmk8KHIubmV4dC54LXIueCkqKGEtci55KS8oci5uZXh0Lnktci55KStyLngmJihuPSFuKSxyPXIubmV4dH13aGlsZShyIT09dCk7cmV0dXJuIG59KHQsZSl9ZnVuY3Rpb24gbSh0LGUscil7cmV0dXJuKGUueS10LnkpKihyLngtZS54KS0oZS54LXQueCkqKHIueS1lLnkpfWZ1bmN0aW9uIHkodCxlKXtyZXR1cm4gdC54PT09ZS54JiZ0Lnk9PT1lLnl9ZnVuY3Rpb24geCh0LGUscixuKXtyZXR1cm4hISh5KHQsZSkmJnkocixuKXx8eSh0LG4pJiZ5KHIsZSkpfHxtKHQsZSxyKT4wIT1tKHQsZSxuKT4wJiZtKHIsbix0KT4wIT1tKHIsbixlKT4wfWZ1bmN0aW9uIGIodCxlKXtyZXR1cm4gbSh0LnByZXYsdCx0Lm5leHQpPDA/bSh0LGUsdC5uZXh0KT49MCYmbSh0LHQucHJldixlKT49MDptKHQsZSx0LnByZXYpPDB8fG0odCx0Lm5leHQsZSk8MH1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9bmV3IEEodC5pLHQueCx0LnkpLG49bmV3IEEoZS5pLGUueCxlLnkpLGk9dC5uZXh0LGE9ZS5wcmV2O3JldHVybiB0Lm5leHQ9ZSxlLnByZXY9dCxyLm5leHQ9aSxpLnByZXY9cixuLm5leHQ9cixyLnByZXY9bixhLm5leHQ9bixuLnByZXY9YSxufWZ1bmN0aW9uIHcodCxlLHIsbil7dmFyIGk9bmV3IEEodCxlLHIpO3JldHVybiBuPyhpLm5leHQ9bi5uZXh0LGkucHJldj1uLG4ubmV4dC5wcmV2PWksbi5uZXh0PWkpOihpLnByZXY9aSxpLm5leHQ9aSksaX1mdW5jdGlvbiBrKHQpe3QubmV4dC5wcmV2PXQucHJldix0LnByZXYubmV4dD10Lm5leHQsdC5wcmV2WiYmKHQucHJldloubmV4dFo9dC5uZXh0WiksdC5uZXh0WiYmKHQubmV4dFoucHJldlo9dC5wcmV2Wil9ZnVuY3Rpb24gQSh0LGUscil7dGhpcy5pPXQsdGhpcy54PWUsdGhpcy55PXIsdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy56PW51bGwsdGhpcy5wcmV2Wj1udWxsLHRoaXMubmV4dFo9bnVsbCx0aGlzLnN0ZWluZXI9ITF9ZnVuY3Rpb24gVCh0LGUscixuKXtmb3IodmFyIGk9MCxhPWUsbz1yLW47YTxyO2ErPW4paSs9KHRbb10tdFthXSkqKHRbYSsxXSt0W28rMV0pLG89YTtyZXR1cm4gaX1lLmV4cG9ydHM9bixlLmV4cG9ydHMuZGVmYXVsdD1uLG4uZGV2aWF0aW9uPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWUmJmUubGVuZ3RoLGE9aT9lWzBdKnI6dC5sZW5ndGgsbz1NYXRoLmFicyhUKHQsMCxhLHIpKTtpZihpKWZvcih2YXIgcz0wLGw9ZS5sZW5ndGg7czxsO3MrKyl7dmFyIGM9ZVtzXSpyLHU9czxsLTE/ZVtzKzFdKnI6dC5sZW5ndGg7by09TWF0aC5hYnMoVCh0LGMsdSxyKSl9dmFyIGg9MDtmb3Iocz0wO3M8bi5sZW5ndGg7cys9Myl7dmFyIGY9bltzXSpyLHA9bltzKzFdKnIsZD1uW3MrMl0qcjtoKz1NYXRoLmFicygodFtmXS10W2RdKSoodFtwKzFdLXRbZisxXSktKHRbZl0tdFtwXSkqKHRbZCsxXS10W2YrMV0pKX1yZXR1cm4gMD09PW8mJjA9PT1oPzA6TWF0aC5hYnMoKGgtbykvbyl9LG4uZmxhdHRlbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dFswXVswXS5sZW5ndGgscj17dmVydGljZXM6W10saG9sZXM6W10sZGltZW5zaW9uczplfSxuPTAsaT0wO2k8dC5sZW5ndGg7aSsrKXtmb3IodmFyIGE9MDthPHRbaV0ubGVuZ3RoO2ErKylmb3IodmFyIG89MDtvPGU7bysrKXIudmVydGljZXMucHVzaCh0W2ldW2FdW29dKTtpPjAmJihuKz10W2ktMV0ubGVuZ3RoLHIuaG9sZXMucHVzaChuKSl9cmV0dXJuIHJ9fSx7fV0sMTY0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUpe2U9MDtmb3IodmFyIGk9MDtpPHI7KytpKXt2YXIgYT10W2ldO2U9TWF0aC5tYXgoZSxhWzBdLGFbMV0pfWU9MSsoMHxlKX1lfD0wO2Zvcih2YXIgbz1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpb1tpXT1bXTtmb3IodmFyIGk9MDtpPHI7KytpKXt2YXIgYT10W2ldO29bYVswXV0ucHVzaChhWzFdKSxvW2FbMV1dLnB1c2goYVswXSl9Zm9yKHZhciBzPTA7czxlOysrcyluKG9bc10sZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSk7cmV0dXJuIG99O3ZhciBuPXQoXCJ1bmlxXCIpfSx7dW5pcTo1MzJ9XSwxNjU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwic3Ryb25nbHktY29ubmVjdGVkLWNvbXBvbmVudHNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHI9W10saT1bXSxhPVtdLG89e30scz1bXTtmdW5jdGlvbiBsKHQpe3ZhciByLG4sdT0hMTtmb3IoaS5wdXNoKHQpLGFbdF09ITAscj0wO3I8c1t0XS5sZW5ndGg7cisrKShuPXNbdF1bcl0pPT09ZT8oYyhlLGkpLHU9ITApOmFbbl18fCh1PWwobikpO2lmKHUpIWZ1bmN0aW9uIHQoZSl7YVtlXT0hMSxvLmhhc093blByb3BlcnR5KGUpJiZPYmplY3Qua2V5cyhvW2VdKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2RlbGV0ZSBvW2VdW3JdLGFbcl0mJnQocil9KX0odCk7ZWxzZSBmb3Iocj0wO3I8c1t0XS5sZW5ndGg7cisrKXtuPXNbdF1bcl07dmFyIGg9b1tuXTtofHwoaD17fSxvW25dPWgpLGhbbl09ITB9cmV0dXJuIGkucG9wKCksdX1mdW5jdGlvbiBjKHQsZSl7dmFyIG49W10uY29uY2F0KGUpLmNvbmNhdCh0KTtyLnB1c2gobil9ZnVuY3Rpb24gdShlKXshZnVuY3Rpb24oZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspcjxlJiYodFtyXT1bXSksdFtyXT10W3JdLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdD49ZX0pfShlKTtmb3IodmFyIHIsaT1uKHQpLmNvbXBvbmVudHMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aD4xfSksYT0xLzAsbz0wO288aS5sZW5ndGg7bysrKWZvcih2YXIgcz0wO3M8aVtvXS5sZW5ndGg7cysrKWlbb11bc108YSYmKGE9aVtvXVtzXSxyPW8pO3ZhciBsPWlbcl07cmV0dXJuISFsJiZ7bGVhc3RWZXJ0ZXg6YSxhZGpMaXN0OnQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuLTE9PT1sLmluZGV4T2YoZSk/W106dC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1sLmluZGV4T2YodCl9KX0pfX1lPTA7Zm9yKHZhciBoPXQubGVuZ3RoO2U8aDspe3ZhciBmPXUoZSk7aWYoZT1mLmxlYXN0VmVydGV4LHM9Zi5hZGpMaXN0KXtmb3IodmFyIHA9MDtwPHMubGVuZ3RoO3ArKylmb3IodmFyIGQ9MDtkPHNbcF0ubGVuZ3RoO2QrKyl7dmFyIGc9c1twXVtkXTthWytnXT0hMSxvW2ddPXt9fWwoZSksZSs9MX1lbHNlIGU9aH1yZXR1cm4gcn19LHtcInN0cm9uZ2x5LWNvbm5lY3RlZC1jb21wb25lbnRzXCI6NTE1fV0sMTY2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL29iamVjdC92YWxpZC12YWx1ZVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzKS5sZW5ndGg9MCx0aGlzfX0se1wiLi4vLi4vb2JqZWN0L3ZhbGlkLXZhbHVlXCI6MTk4fV0sMTY3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuL2lzLWltcGxlbWVudGVkXCIpKCk/QXJyYXkuZnJvbTp0KFwiLi9zaGltXCIpfSx7XCIuL2lzLWltcGxlbWVudGVkXCI6MTY4LFwiLi9zaGltXCI6MTY5fV0sMTY4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQsZSxyPUFycmF5LmZyb207cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgciYmKGU9cih0PVtcInJhelwiLFwiZHdhXCJdKSxCb29sZWFuKGUmJmUhPT10JiZcImR3YVwiPT09ZVsxXSkpfX0se31dLDE2OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJlczYtc3ltYm9sXCIpLml0ZXJhdG9yLGk9dChcIi4uLy4uL2Z1bmN0aW9uL2lzLWFyZ3VtZW50c1wiKSxhPXQoXCIuLi8uLi9mdW5jdGlvbi9pcy1mdW5jdGlvblwiKSxvPXQoXCIuLi8uLi9udW1iZXIvdG8tcG9zLWludGVnZXJcIikscz10KFwiLi4vLi4vb2JqZWN0L3ZhbGlkLWNhbGxhYmxlXCIpLGw9dChcIi4uLy4uL29iamVjdC92YWxpZC12YWx1ZVwiKSxjPXQoXCIuLi8uLi9vYmplY3QvaXMtdmFsdWVcIiksdT10KFwiLi4vLi4vc3RyaW5nL2lzLXN0cmluZ1wiKSxoPUFycmF5LmlzQXJyYXksZj1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxwPXtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpudWxsfSxkPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixnLHYsbSx5LHgsYixfLHcsaz1hcmd1bWVudHNbMV0sQT1hcmd1bWVudHNbMl07aWYodD1PYmplY3QobCh0KSksYyhrKSYmcyhrKSx0aGlzJiZ0aGlzIT09QXJyYXkmJmEodGhpcykpZT10aGlzO2Vsc2V7aWYoIWspe2lmKGkodCkpcmV0dXJuIDEhPT0obT10Lmxlbmd0aCk/QXJyYXkuYXBwbHkobnVsbCx0KTooKHY9bmV3IEFycmF5KDEpKVswXT10WzBdLHYpO2lmKGgodCkpe2Zvcih2PW5ldyBBcnJheShtPXQubGVuZ3RoKSxyPTA7cjxtOysrcil2W3JdPXRbcl07cmV0dXJuIHZ9fXY9W119aWYoIWgodCkpaWYodm9pZCAwIT09KF89dFtuXSkpe2Zvcih4PXMoXykuY2FsbCh0KSxlJiYodj1uZXcgZSksYj14Lm5leHQoKSxyPTA7IWIuZG9uZTspdz1rP2YuY2FsbChrLEEsYi52YWx1ZSxyKTpiLnZhbHVlLGU/KHAudmFsdWU9dyxkKHYscixwKSk6dltyXT13LGI9eC5uZXh0KCksKytyO209cn1lbHNlIGlmKHUodCkpe2ZvcihtPXQubGVuZ3RoLGUmJih2PW5ldyBlKSxyPTAsZz0wO3I8bTsrK3Ipdz10W3JdLHIrMTxtJiYoeT13LmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmeTw9NTYzMTkmJih3Kz10Wysrcl0pLHc9az9mLmNhbGwoayxBLHcsZyk6dyxlPyhwLnZhbHVlPXcsZCh2LGcscCkpOnZbZ109dywrK2c7bT1nfWlmKHZvaWQgMD09PW0pZm9yKG09byh0Lmxlbmd0aCksZSYmKHY9bmV3IGUobSkpLHI9MDtyPG07KytyKXc9az9mLmNhbGwoayxBLHRbcl0scik6dFtyXSxlPyhwLnZhbHVlPXcsZCh2LHIscCkpOnZbcl09dztyZXR1cm4gZSYmKHAudmFsdWU9bnVsbCx2Lmxlbmd0aD1tKSx2fX0se1wiLi4vLi4vZnVuY3Rpb24vaXMtYXJndW1lbnRzXCI6MTcwLFwiLi4vLi4vZnVuY3Rpb24vaXMtZnVuY3Rpb25cIjoxNzEsXCIuLi8uLi9udW1iZXIvdG8tcG9zLWludGVnZXJcIjoxNzcsXCIuLi8uLi9vYmplY3QvaXMtdmFsdWVcIjoxODcsXCIuLi8uLi9vYmplY3QvdmFsaWQtY2FsbGFibGVcIjoxOTYsXCIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWVcIjoxOTgsXCIuLi8uLi9zdHJpbmcvaXMtc3RyaW5nXCI6MjAyLFwiZXM2LXN5bWJvbFwiOjIxMn1dLDE3MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaT1uLmNhbGwoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4uY2FsbCh0KT09PWl9fSx7fV0sMTcxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxpPW4uY2FsbCh0KFwiLi9ub29wXCIpKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmbi5jYWxsKHQpPT09aX19LHtcIi4vbm9vcFwiOjE3Mn1dLDE3MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbigpe319LHt9XSwxNzM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4vaXMtaW1wbGVtZW50ZWRcIikoKT9NYXRoLnNpZ246dChcIi4vc2hpbVwiKX0se1wiLi9pcy1pbXBsZW1lbnRlZFwiOjE3NCxcIi4vc2hpbVwiOjE3NX1dLDE3NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PU1hdGguc2lnbjtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiYoMT09PXQoMTApJiYtMT09PXQoLTIwKSl9fSx7fV0sMTc1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PU51bWJlcih0KSxpc05hTih0KXx8MD09PXQ/dDp0PjA/MTotMX19LHt9XSwxNzY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vbWF0aC9zaWduXCIpLGk9TWF0aC5hYnMsYT1NYXRoLmZsb29yO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaXNOYU4odCk/MDowIT09KHQ9TnVtYmVyKHQpKSYmaXNGaW5pdGUodCk/bih0KSphKGkodCkpOnR9fSx7XCIuLi9tYXRoL3NpZ25cIjoxNzN9XSwxNzc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi90by1pbnRlZ2VyXCIpLGk9TWF0aC5tYXg7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKDAsbih0KSl9fSx7XCIuL3RvLWludGVnZXJcIjoxNzZ9XSwxNzg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi92YWxpZC1jYWxsYWJsZVwiKSxpPXQoXCIuL3ZhbGlkLXZhbHVlXCIpLGE9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsbz1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxzPU9iamVjdC5rZXlzLGw9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocixjKXt2YXIgdSxoPWFyZ3VtZW50c1syXSxmPWFyZ3VtZW50c1szXTtyZXR1cm4gcj1PYmplY3QoaShyKSksbihjKSx1PXMociksZiYmdS5zb3J0KFwiZnVuY3Rpb25cIj09dHlwZW9mIGY/YS5jYWxsKGYscik6dm9pZCAwKSxcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiYodD11W3RdKSxvLmNhbGwodCx1LGZ1bmN0aW9uKHQsbil7cmV0dXJuIGwuY2FsbChyLHQpP28uY2FsbChjLGgsclt0XSx0LHIsbik6ZX0pfX19LHtcIi4vdmFsaWQtY2FsbGFibGVcIjoxOTYsXCIuL3ZhbGlkLXZhbHVlXCI6MTk4fV0sMTc5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuL2lzLWltcGxlbWVudGVkXCIpKCk/T2JqZWN0LmFzc2lnbjp0KFwiLi9zaGltXCIpfSx7XCIuL2lzLWltcGxlbWVudGVkXCI6MTgwLFwiLi9zaGltXCI6MTgxfV0sMTgwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQsZT1PYmplY3QuYXNzaWduO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihlKHQ9e2ZvbzpcInJhelwifSx7YmFyOlwiZHdhXCJ9LHt0cnp5OlwidHJ6eVwifSksdC5mb28rdC5iYXIrdC50cnp5PT09XCJyYXpkd2F0cnp5XCIpfX0se31dLDE4MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9rZXlzXCIpLGk9dChcIi4uL3ZhbGlkLXZhbHVlXCIpLGE9TWF0aC5tYXg7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbyxzLGw9YShhcmd1bWVudHMubGVuZ3RoLDIpO2Zvcih0PU9iamVjdChpKHQpKSxzPWZ1bmN0aW9uKG4pe3RyeXt0W25dPWVbbl19Y2F0Y2godCl7cnx8KHI9dCl9fSxvPTE7bzxsOysrbyllPWFyZ3VtZW50c1tvXSxuKGUpLmZvckVhY2gocyk7aWYodm9pZCAwIT09cil0aHJvdyByO3JldHVybiB0fX0se1wiLi4va2V5c1wiOjE4OCxcIi4uL3ZhbGlkLXZhbHVlXCI6MTk4fV0sMTgyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2FycmF5L2Zyb21cIiksaT10KFwiLi9hc3NpZ25cIiksYT10KFwiLi92YWxpZC12YWx1ZVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KGEodCkpLHI9YXJndW1lbnRzWzFdLG89T2JqZWN0KGFyZ3VtZW50c1syXSk7aWYoZSE9PXQmJiFyKXJldHVybiBlO3ZhciBzPXt9O3JldHVybiByP24ocixmdW5jdGlvbihlKXsoby5lbnN1cmV8fGUgaW4gdCkmJihzW2VdPXRbZV0pfSk6aShzLHQpLHN9fSx7XCIuLi9hcnJheS9mcm9tXCI6MTY3LFwiLi9hc3NpZ25cIjoxNzksXCIuL3ZhbGlkLXZhbHVlXCI6MTk4fV0sMTgzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saSxhLG8scz1PYmplY3QuY3JlYXRlO3QoXCIuL3NldC1wcm90b3R5cGUtb2YvaXMtaW1wbGVtZW50ZWRcIikoKXx8KG49dChcIi4vc2V0LXByb3RvdHlwZS1vZi9zaGltXCIpKSxlLmV4cG9ydHM9bj8xIT09bi5sZXZlbD9zOihpPXt9LGE9e30sbz17Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSxPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPYmplY3QucHJvdG90eXBlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2FbdF09XCJfX3Byb3RvX19cIiE9PXQ/bzp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGksYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sXCJudWxsUG9seWZpbGxcIix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITEsdmFsdWU6aX0pLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHMobnVsbD09PXQ/aTp0LGUpfSk6c30se1wiLi9zZXQtcHJvdG90eXBlLW9mL2lzLWltcGxlbWVudGVkXCI6MTk0LFwiLi9zZXQtcHJvdG90eXBlLW9mL3NoaW1cIjoxOTV9XSwxODQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4vX2l0ZXJhdGVcIikoXCJmb3JFYWNoXCIpfSx7XCIuL19pdGVyYXRlXCI6MTc4fV0sMTg1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHR9fSx7fV0sMTg2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vaXMtdmFsdWVcIiksaT17ZnVuY3Rpb246ITAsb2JqZWN0OiEwfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4odCkmJmlbdHlwZW9mIHRdfHwhMX19LHtcIi4vaXMtdmFsdWVcIjoxODd9XSwxODc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vZnVuY3Rpb24vbm9vcFwiKSgpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCE9PW4mJm51bGwhPT10fX0se1wiLi4vZnVuY3Rpb24vbm9vcFwiOjE3Mn1dLDE4ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi9pcy1pbXBsZW1lbnRlZFwiKSgpP09iamVjdC5rZXlzOnQoXCIuL3NoaW1cIil9LHtcIi4vaXMtaW1wbGVtZW50ZWRcIjoxODksXCIuL3NoaW1cIjoxOTB9XSwxODk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIE9iamVjdC5rZXlzKFwicHJpbWl0aXZlXCIpLCEwfWNhdGNoKHQpe3JldHVybiExfX19LHt9XSwxOTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vaXMtdmFsdWVcIiksaT1PYmplY3Qua2V5cztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkobih0KT9PYmplY3QodCk6dCl9fSx7XCIuLi9pcy12YWx1ZVwiOjE4N31dLDE5MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL3ZhbGlkLWNhbGxhYmxlXCIpLGk9dChcIi4vZm9yLWVhY2hcIiksYT1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17fSxvPWFyZ3VtZW50c1syXTtyZXR1cm4gbihlKSxpKHQsZnVuY3Rpb24odCxuLGkscyl7cltuXT1hLmNhbGwoZSxvLHQsbixpLHMpfSkscn19LHtcIi4vZm9yLWVhY2hcIjoxODQsXCIuL3ZhbGlkLWNhbGxhYmxlXCI6MTk2fV0sMTkyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vaXMtdmFsdWVcIiksaT1BcnJheS5wcm90b3R5cGUuZm9yRWFjaCxhPU9iamVjdC5jcmVhdGU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWEobnVsbCk7cmV0dXJuIGkuY2FsbChhcmd1bWVudHMsZnVuY3Rpb24odCl7bih0KSYmZnVuY3Rpb24odCxlKXt2YXIgcjtmb3IociBpbiB0KWVbcl09dFtyXX0oT2JqZWN0KHQpLGUpfSksZX19LHtcIi4vaXMtdmFsdWVcIjoxODd9XSwxOTM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4vaXMtaW1wbGVtZW50ZWRcIikoKT9PYmplY3Quc2V0UHJvdG90eXBlT2Y6dChcIi4vc2hpbVwiKX0se1wiLi9pcy1pbXBsZW1lbnRlZFwiOjE5NCxcIi4vc2hpbVwiOjE5NX1dLDE5NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPU9iamVjdC5jcmVhdGUsaT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYT17fTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1PYmplY3Quc2V0UHJvdG90eXBlT2YsZT1hcmd1bWVudHNbMF18fG47cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmaSh0KGUobnVsbCksYSkpPT09YX19LHt9XSwxOTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbixpLGEsbyxzPXQoXCIuLi9pcy1vYmplY3RcIiksbD10KFwiLi4vdmFsaWQtdmFsdWVcIiksYz1PYmplY3QucHJvdG90eXBlLmlzUHJvdG90eXBlT2YsdT1PYmplY3QuZGVmaW5lUHJvcGVydHksaD17Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfTtuPWZ1bmN0aW9uKHQsZSl7aWYobCh0KSxudWxsPT09ZXx8cyhlKSlyZXR1cm4gdDt0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJvdG90eXBlIG11c3QgYmUgbnVsbCBvciBhbiBvYmplY3RcIil9LGUuZXhwb3J0cz0oaT1mdW5jdGlvbigpe3ZhciB0LGU9T2JqZWN0LmNyZWF0ZShudWxsKSxyPXt9LG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLFwiX19wcm90b19fXCIpO2lmKG4pe3RyeXsodD1uLnNldCkuY2FsbChlLHIpfWNhdGNoKHQpe31pZihPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1yKXJldHVybntzZXQ6dCxsZXZlbDoyfX1yZXR1cm4gZS5fX3Byb3RvX189cixPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1yP3tsZXZlbDoyfTooKGU9e30pLl9fcHJvdG9fXz1yLE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PXImJntsZXZlbDoxfSl9KCkpPygyPT09aS5sZXZlbD9pLnNldD8obz1pLnNldCxhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8uY2FsbChuKHQsZSksZSksdH0pOmE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LGUpLl9fcHJvdG9fXz1lLHR9OmE9ZnVuY3Rpb24gdChlLHIpe3ZhciBpO3JldHVybiBuKGUsciksKGk9Yy5jYWxsKHQubnVsbFBvbHlmaWxsLGUpKSYmZGVsZXRlIHQubnVsbFBvbHlmaWxsLl9fcHJvdG9fXyxudWxsPT09ciYmKHI9dC5udWxsUG9seWZpbGwpLGUuX19wcm90b19fPXIsaSYmdSh0Lm51bGxQb2x5ZmlsbCxcIl9fcHJvdG9fX1wiLGgpLGV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLFwibGV2ZWxcIix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITEsdmFsdWU6aS5sZXZlbH0pKTpudWxsLHQoXCIuLi9jcmVhdGVcIil9LHtcIi4uL2NyZWF0ZVwiOjE4MyxcIi4uL2lzLW9iamVjdFwiOjE4NixcIi4uL3ZhbGlkLXZhbHVlXCI6MTk4fV0sMTk2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO3JldHVybiB0fX0se31dLDE5NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2lzLW9iamVjdFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhbiBPYmplY3RcIik7cmV0dXJuIHR9fSx7XCIuL2lzLW9iamVjdFwiOjE4Nn1dLDE5ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2lzLXZhbHVlXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSBudWxsIG9yIHVuZGVmaW5lZFwiKTtyZXR1cm4gdH19LHtcIi4vaXMtdmFsdWVcIjoxODd9XSwxOTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4vaXMtaW1wbGVtZW50ZWRcIikoKT9TdHJpbmcucHJvdG90eXBlLmNvbnRhaW5zOnQoXCIuL3NoaW1cIil9LHtcIi4vaXMtaW1wbGVtZW50ZWRcIjoyMDAsXCIuL3NoaW1cIjoyMDF9XSwyMDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1cInJhemR3YXRyenlcIjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBuLmNvbnRhaW5zJiYoITA9PT1uLmNvbnRhaW5zKFwiZHdhXCIpJiYhMT09PW4uY29udGFpbnMoXCJmb29cIikpfX0se31dLDIwMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPVN0cmluZy5wcm90b3R5cGUuaW5kZXhPZjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4uY2FsbCh0aGlzLHQsYXJndW1lbnRzWzFdKT4tMX19LHt9XSwyMDI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGk9bi5jYWxsKFwiXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdHx8dCYmXCJvYmplY3RcIj09dHlwZW9mIHQmJih0IGluc3RhbmNlb2YgU3RyaW5nfHxuLmNhbGwodCk9PT1pKXx8ITF9fSx7fV0sMjAzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxpPU1hdGgucmFuZG9tO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0O2Rve3Q9aSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKX13aGlsZShuW3RdKTtyZXR1cm4gdH19LHt9XSwyMDQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbixpPXQoXCJlczUtZXh0L29iamVjdC9zZXQtcHJvdG90eXBlLW9mXCIpLGE9dChcImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnNcIiksbz10KFwiZFwiKSxzPXQoXCJlczYtc3ltYm9sXCIpLGw9dChcIi4vXCIpLGM9T2JqZWN0LmRlZmluZVByb3BlcnR5O249ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgbikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnXCIpO2wuY2FsbCh0aGlzLHQpLGU9ZT9hLmNhbGwoZSxcImtleSt2YWx1ZVwiKT9cImtleSt2YWx1ZVwiOmEuY2FsbChlLFwia2V5XCIpP1wia2V5XCI6XCJ2YWx1ZVwiOlwidmFsdWVcIixjKHRoaXMsXCJfX2tpbmRfX1wiLG8oXCJcIixlKSl9LGkmJmkobixsKSxkZWxldGUgbi5wcm90b3R5cGUuY29uc3RydWN0b3Isbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShsLnByb3RvdHlwZSx7X3Jlc29sdmU6byhmdW5jdGlvbih0KXtyZXR1cm5cInZhbHVlXCI9PT10aGlzLl9fa2luZF9fP3RoaXMuX19saXN0X19bdF06XCJrZXkrdmFsdWVcIj09PXRoaXMuX19raW5kX18/W3QsdGhpcy5fX2xpc3RfX1t0XV06dH0pfSksYyhuLnByb3RvdHlwZSxzLnRvU3RyaW5nVGFnLG8oXCJjXCIsXCJBcnJheSBJdGVyYXRvclwiKSl9LHtcIi4vXCI6MjA3LGQ6MTQyLFwiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZlwiOjE5MyxcImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnNcIjoxOTksXCJlczYtc3ltYm9sXCI6MjEyfV0sMjA1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzXCIpLGk9dChcImVzNS1leHQvb2JqZWN0L3ZhbGlkLWNhbGxhYmxlXCIpLGE9dChcImVzNS1leHQvc3RyaW5nL2lzLXN0cmluZ1wiKSxvPXQoXCIuL2dldFwiKSxzPUFycmF5LmlzQXJyYXksbD1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxjPUFycmF5LnByb3RvdHlwZS5zb21lO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLHUsaCxmLHAsZCxnLHYsbT1hcmd1bWVudHNbMl07aWYocyh0KXx8bih0KT9yPVwiYXJyYXlcIjphKHQpP3I9XCJzdHJpbmdcIjp0PW8odCksaShlKSxoPWZ1bmN0aW9uKCl7Zj0hMH0sXCJhcnJheVwiIT09cilpZihcInN0cmluZ1wiIT09cilmb3IodT10Lm5leHQoKTshdS5kb25lOyl7aWYobC5jYWxsKGUsbSx1LnZhbHVlLGgpLGYpcmV0dXJuO3U9dC5uZXh0KCl9ZWxzZSBmb3IoZD10Lmxlbmd0aCxwPTA7cDxkJiYoZz10W3BdLHArMTxkJiYodj1nLmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmdjw9NTYzMTkmJihnKz10WysrcF0pLGwuY2FsbChlLG0sZyxoKSwhZik7KytwKTtlbHNlIGMuY2FsbCh0LGZ1bmN0aW9uKHQpe3JldHVybiBsLmNhbGwoZSxtLHQsaCksZn0pfX0se1wiLi9nZXRcIjoyMDYsXCJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50c1wiOjE3MCxcImVzNS1leHQvb2JqZWN0L3ZhbGlkLWNhbGxhYmxlXCI6MTk2LFwiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nXCI6MjAyfV0sMjA2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzXCIpLGk9dChcImVzNS1leHQvc3RyaW5nL2lzLXN0cmluZ1wiKSxhPXQoXCIuL2FycmF5XCIpLG89dChcIi4vc3RyaW5nXCIpLHM9dChcIi4vdmFsaWQtaXRlcmFibGVcIiksbD10KFwiZXM2LXN5bWJvbFwiKS5pdGVyYXRvcjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2Ygcyh0KVtsXT90W2xdKCk6bih0KT9uZXcgYSh0KTppKHQpP25ldyBvKHQpOm5ldyBhKHQpfX0se1wiLi9hcnJheVwiOjIwNCxcIi4vc3RyaW5nXCI6MjA5LFwiLi92YWxpZC1pdGVyYWJsZVwiOjIxMCxcImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzXCI6MTcwLFwiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nXCI6MjAyLFwiZXM2LXN5bWJvbFwiOjIxMn1dLDIwNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuLGk9dChcImVzNS1leHQvYXJyYXkvIy9jbGVhclwiKSxhPXQoXCJlczUtZXh0L29iamVjdC9hc3NpZ25cIiksbz10KFwiZXM1LWV4dC9vYmplY3QvdmFsaWQtY2FsbGFibGVcIikscz10KFwiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWVcIiksbD10KFwiZFwiKSxjPXQoXCJkL2F1dG8tYmluZFwiKSx1PXQoXCJlczYtc3ltYm9sXCIpLGg9T2JqZWN0LmRlZmluZVByb3BlcnR5LGY9T2JqZWN0LmRlZmluZVByb3BlcnRpZXM7ZS5leHBvcnRzPW49ZnVuY3Rpb24odCxlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ29uc3RydWN0b3IgcmVxdWlyZXMgJ25ldydcIik7Zih0aGlzLHtfX2xpc3RfXzpsKFwid1wiLHModCkpLF9fY29udGV4dF9fOmwoXCJ3XCIsZSksX19uZXh0SW5kZXhfXzpsKFwid1wiLDApfSksZSYmKG8oZS5vbiksZS5vbihcIl9hZGRcIix0aGlzLl9vbkFkZCksZS5vbihcIl9kZWxldGVcIix0aGlzLl9vbkRlbGV0ZSksZS5vbihcIl9jbGVhclwiLHRoaXMuX29uQ2xlYXIpKX0sZGVsZXRlIG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yLGYobi5wcm90b3R5cGUsYSh7X25leHQ6bChmdW5jdGlvbigpe3ZhciB0O2lmKHRoaXMuX19saXN0X18pcmV0dXJuIHRoaXMuX19yZWRvX18mJnZvaWQgMCE9PSh0PXRoaXMuX19yZWRvX18uc2hpZnQoKSk/dDp0aGlzLl9fbmV4dEluZGV4X188dGhpcy5fX2xpc3RfXy5sZW5ndGg/dGhpcy5fX25leHRJbmRleF9fKys6dm9pZCB0aGlzLl91bkJpbmQoKX0pLG5leHQ6bChmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVhdGVSZXN1bHQodGhpcy5fbmV4dCgpKX0pLF9jcmVhdGVSZXN1bHQ6bChmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD97ZG9uZTohMCx2YWx1ZTp2b2lkIDB9Ontkb25lOiExLHZhbHVlOnRoaXMuX3Jlc29sdmUodCl9fSksX3Jlc29sdmU6bChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2xpc3RfX1t0XX0pLF91bkJpbmQ6bChmdW5jdGlvbigpe3RoaXMuX19saXN0X189bnVsbCxkZWxldGUgdGhpcy5fX3JlZG9fXyx0aGlzLl9fY29udGV4dF9fJiYodGhpcy5fX2NvbnRleHRfXy5vZmYoXCJfYWRkXCIsdGhpcy5fb25BZGQpLHRoaXMuX19jb250ZXh0X18ub2ZmKFwiX2RlbGV0ZVwiLHRoaXMuX29uRGVsZXRlKSx0aGlzLl9fY29udGV4dF9fLm9mZihcIl9jbGVhclwiLHRoaXMuX29uQ2xlYXIpLHRoaXMuX19jb250ZXh0X189bnVsbCl9KSx0b1N0cmluZzpsKGZ1bmN0aW9uKCl7cmV0dXJuXCJbb2JqZWN0IFwiKyh0aGlzW3UudG9TdHJpbmdUYWddfHxcIk9iamVjdFwiKStcIl1cIn0pfSxjKHtfb25BZGQ6bChmdW5jdGlvbih0KXt0Pj10aGlzLl9fbmV4dEluZGV4X198fCgrK3RoaXMuX19uZXh0SW5kZXhfXyx0aGlzLl9fcmVkb19fPyh0aGlzLl9fcmVkb19fLmZvckVhY2goZnVuY3Rpb24oZSxyKXtlPj10JiYodGhpcy5fX3JlZG9fX1tyXT0rK2UpfSx0aGlzKSx0aGlzLl9fcmVkb19fLnB1c2godCkpOmgodGhpcyxcIl9fcmVkb19fXCIsbChcImNcIixbdF0pKSl9KSxfb25EZWxldGU6bChmdW5jdGlvbih0KXt2YXIgZTt0Pj10aGlzLl9fbmV4dEluZGV4X198fCgtLXRoaXMuX19uZXh0SW5kZXhfXyx0aGlzLl9fcmVkb19fJiYoLTEhPT0oZT10aGlzLl9fcmVkb19fLmluZGV4T2YodCkpJiZ0aGlzLl9fcmVkb19fLnNwbGljZShlLDEpLHRoaXMuX19yZWRvX18uZm9yRWFjaChmdW5jdGlvbihlLHIpe2U+dCYmKHRoaXMuX19yZWRvX19bcl09LS1lKX0sdGhpcykpKX0pLF9vbkNsZWFyOmwoZnVuY3Rpb24oKXt0aGlzLl9fcmVkb19fJiZpLmNhbGwodGhpcy5fX3JlZG9fXyksdGhpcy5fX25leHRJbmRleF9fPTB9KX0pKSksaChuLnByb3RvdHlwZSx1Lml0ZXJhdG9yLGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKX0se2Q6MTQyLFwiZC9hdXRvLWJpbmRcIjoxNDEsXCJlczUtZXh0L2FycmF5LyMvY2xlYXJcIjoxNjYsXCJlczUtZXh0L29iamVjdC9hc3NpZ25cIjoxNzksXCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZVwiOjE5NixcImVzNS1leHQvb2JqZWN0L3ZhbGlkLXZhbHVlXCI6MTk4LFwiZXM2LXN5bWJvbFwiOjIxMn1dLDIwODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50c1wiKSxpPXQoXCJlczUtZXh0L29iamVjdC9pcy12YWx1ZVwiKSxhPXQoXCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmdcIiksbz10KFwiZXM2LXN5bWJvbFwiKS5pdGVyYXRvcixzPUFycmF5LmlzQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEhaSh0KSYmKCEhcyh0KXx8KCEhYSh0KXx8KCEhbih0KXx8XCJmdW5jdGlvblwiPT10eXBlb2YgdFtvXSkpKX19LHtcImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzXCI6MTcwLFwiZXM1LWV4dC9vYmplY3QvaXMtdmFsdWVcIjoxODcsXCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmdcIjoyMDIsXCJlczYtc3ltYm9sXCI6MjEyfV0sMjA5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saT10KFwiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZlwiKSxhPXQoXCJkXCIpLG89dChcImVzNi1zeW1ib2xcIikscz10KFwiLi9cIiksbD1PYmplY3QuZGVmaW5lUHJvcGVydHk7bj1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoISh0aGlzIGluc3RhbmNlb2YgbikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnXCIpO3Q9U3RyaW5nKHQpLHMuY2FsbCh0aGlzLHQpLGwodGhpcyxcIl9fbGVuZ3RoX19cIixhKFwiXCIsdC5sZW5ndGgpKX0saSYmaShuLHMpLGRlbGV0ZSBuLnByb3RvdHlwZS5jb25zdHJ1Y3RvcixuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHMucHJvdG90eXBlLHtfbmV4dDphKGZ1bmN0aW9uKCl7aWYodGhpcy5fX2xpc3RfXylyZXR1cm4gdGhpcy5fX25leHRJbmRleF9fPHRoaXMuX19sZW5ndGhfXz90aGlzLl9fbmV4dEluZGV4X18rKzp2b2lkIHRoaXMuX3VuQmluZCgpfSksX3Jlc29sdmU6YShmdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuX19saXN0X19bdF07cmV0dXJuIHRoaXMuX19uZXh0SW5kZXhfXz09PXRoaXMuX19sZW5ndGhfXz9yOihlPXIuY2hhckNvZGVBdCgwKSk+PTU1Mjk2JiZlPD01NjMxOT9yK3RoaXMuX19saXN0X19bdGhpcy5fX25leHRJbmRleF9fKytdOnJ9KX0pLGwobi5wcm90b3R5cGUsby50b1N0cmluZ1RhZyxhKFwiY1wiLFwiU3RyaW5nIEl0ZXJhdG9yXCIpKX0se1wiLi9cIjoyMDcsZDoxNDIsXCJlczUtZXh0L29iamVjdC9zZXQtcHJvdG90eXBlLW9mXCI6MTkzLFwiZXM2LXN5bWJvbFwiOjIxMn1dLDIxMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2lzLWl0ZXJhYmxlXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKHQrXCIgaXMgbm90IGl0ZXJhYmxlXCIpO3JldHVybiB0fX0se1wiLi9pcy1pdGVyYWJsZVwiOjIwOH1dLDIxMTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihuLGkpeyFmdW5jdGlvbih0LG4pe1wib2JqZWN0XCI9PXR5cGVvZiByJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZT9lLmV4cG9ydHM9bigpOnQuRVM2UHJvbWlzZT1uKCl9KHRoaXMsZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHR9dmFyIHI9QXJyYXkuaXNBcnJheT9BcnJheS5pc0FycmF5OmZ1bmN0aW9uKHQpe3JldHVyblwiW29iamVjdCBBcnJheV1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0sYT0wLG89dm9pZCAwLHM9dm9pZCAwLGw9ZnVuY3Rpb24odCxlKXtnW2FdPXQsZ1thKzFdPWUsMj09PShhKz0yKSYmKHM/cyh2KTpfKCkpfTt2YXIgYz1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp2b2lkIDAsdT1jfHx7fSxoPXUuTXV0YXRpb25PYnNlcnZlcnx8dS5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLGY9XCJ1bmRlZmluZWRcIj09dHlwZW9mIHNlbGYmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBuJiZcIltvYmplY3QgcHJvY2Vzc11cIj09PXt9LnRvU3RyaW5nLmNhbGwobikscD1cInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDhDbGFtcGVkQXJyYXkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBpbXBvcnRTY3JpcHRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgTWVzc2FnZUNoYW5uZWw7ZnVuY3Rpb24gZCgpe3ZhciB0PXNldFRpbWVvdXQ7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodiwxKX19dmFyIGc9bmV3IEFycmF5KDFlMyk7ZnVuY3Rpb24gdigpe2Zvcih2YXIgdD0wO3Q8YTt0Kz0yKXsoMCxnW3RdKShnW3QrMV0pLGdbdF09dm9pZCAwLGdbdCsxXT12b2lkIDB9YT0wfXZhciBtLHkseCxiLF89dm9pZCAwO2Z1bmN0aW9uIHcodCxlKXt2YXIgcj1hcmd1bWVudHMsbj10aGlzLGk9bmV3IHRoaXMuY29uc3RydWN0b3IoVCk7dm9pZCAwPT09aVtBXSYmVShpKTt2YXIgYSxvPW4uX3N0YXRlO3JldHVybiBvPyhhPXJbby0xXSxsKGZ1bmN0aW9uKCl7cmV0dXJuIGoobyxpLGEsbi5fcmVzdWx0KX0pKTpSKG4saSx0LGUpLGl9ZnVuY3Rpb24gayh0KXtpZih0JiZcIm9iamVjdFwiPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3Rvcj09PXRoaXMpcmV0dXJuIHQ7dmFyIGU9bmV3IHRoaXMoVCk7cmV0dXJuIE8oZSx0KSxlfWY/Xz1mdW5jdGlvbigpe3JldHVybiBuLm5leHRUaWNrKHYpfTpoPyh5PTAseD1uZXcgaCh2KSxiPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpLHgub2JzZXJ2ZShiLHtjaGFyYWN0ZXJEYXRhOiEwfSksXz1mdW5jdGlvbigpe2IuZGF0YT15PSsreSUyfSk6cD8oKG09bmV3IE1lc3NhZ2VDaGFubmVsKS5wb3J0MS5vbm1lc3NhZ2U9dixfPWZ1bmN0aW9uKCl7cmV0dXJuIG0ucG9ydDIucG9zdE1lc3NhZ2UoMCl9KTpfPXZvaWQgMD09PWMmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZnVuY3Rpb24oKXt0cnl7dmFyIGU9dChcInZlcnR4XCIpO3JldHVybiBvPWUucnVuT25Mb29wfHxlLnJ1bk9uQ29udGV4dCxmdW5jdGlvbigpe28odil9fWNhdGNoKHQpe3JldHVybiBkKCl9fSgpOmQoKTt2YXIgQT1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMTYpO2Z1bmN0aW9uIFQoKXt9dmFyIE09dm9pZCAwLFM9MSxFPTIsQz1uZXcgQjtmdW5jdGlvbiBMKHQpe3RyeXtyZXR1cm4gdC50aGVufWNhdGNoKHQpe3JldHVybiBDLmVycm9yPXQsQ319ZnVuY3Rpb24geih0LHIsbil7ci5jb25zdHJ1Y3Rvcj09PXQuY29uc3RydWN0b3ImJm49PT13JiZyLmNvbnN0cnVjdG9yLnJlc29sdmU9PT1rP2Z1bmN0aW9uKHQsZSl7ZS5fc3RhdGU9PT1TP0QodCxlLl9yZXN1bHQpOmUuX3N0YXRlPT09RT9QKHQsZS5fcmVzdWx0KTpSKGUsdm9pZCAwLGZ1bmN0aW9uKGUpe3JldHVybiBPKHQsZSl9LGZ1bmN0aW9uKGUpe3JldHVybiBQKHQsZSl9KX0odCxyKTpuPT09Qz9QKHQsQy5lcnJvcik6dm9pZCAwPT09bj9EKHQscik6ZShuKT9mdW5jdGlvbih0LGUscil7bChmdW5jdGlvbih0KXt2YXIgbj0hMSxpPWZ1bmN0aW9uKHQsZSxyLG4pe3RyeXt0LmNhbGwoZSxyLG4pfWNhdGNoKHQpe3JldHVybiB0fX0ocixlLGZ1bmN0aW9uKHIpe258fChuPSEwLGUhPT1yP08odCxyKTpEKHQscikpfSxmdW5jdGlvbihlKXtufHwobj0hMCxQKHQsZSkpfSx0Ll9sYWJlbCk7IW4mJmkmJihuPSEwLFAodCxpKSl9LHQpfSh0LHIsbik6RCh0LHIpfWZ1bmN0aW9uIE8odCxlKXt2YXIgcjt0PT09ZT9QKHQsbmV3IFR5cGVFcnJvcihcIllvdSBjYW5ub3QgcmVzb2x2ZSBhIHByb21pc2Ugd2l0aCBpdHNlbGZcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mKHI9ZSl8fFwib2JqZWN0XCI9PXR5cGVvZiByJiZudWxsIT09cj96KHQsZSxMKGUpKTpEKHQsZSl9ZnVuY3Rpb24gSSh0KXt0Ll9vbmVycm9yJiZ0Ll9vbmVycm9yKHQuX3Jlc3VsdCksRih0KX1mdW5jdGlvbiBEKHQsZSl7dC5fc3RhdGU9PT1NJiYodC5fcmVzdWx0PWUsdC5fc3RhdGU9UywwIT09dC5fc3Vic2NyaWJlcnMubGVuZ3RoJiZsKEYsdCkpfWZ1bmN0aW9uIFAodCxlKXt0Ll9zdGF0ZT09PU0mJih0Ll9zdGF0ZT1FLHQuX3Jlc3VsdD1lLGwoSSx0KSl9ZnVuY3Rpb24gUih0LGUscixuKXt2YXIgaT10Ll9zdWJzY3JpYmVycyxhPWkubGVuZ3RoO3QuX29uZXJyb3I9bnVsbCxpW2FdPWUsaVthK1NdPXIsaVthK0VdPW4sMD09PWEmJnQuX3N0YXRlJiZsKEYsdCl9ZnVuY3Rpb24gRih0KXt2YXIgZT10Ll9zdWJzY3JpYmVycyxyPXQuX3N0YXRlO2lmKDAhPT1lLmxlbmd0aCl7Zm9yKHZhciBuPXZvaWQgMCxpPXZvaWQgMCxhPXQuX3Jlc3VsdCxvPTA7bzxlLmxlbmd0aDtvKz0zKW49ZVtvXSxpPWVbbytyXSxuP2oocixuLGksYSk6aShhKTt0Ll9zdWJzY3JpYmVycy5sZW5ndGg9MH19ZnVuY3Rpb24gQigpe3RoaXMuZXJyb3I9bnVsbH12YXIgTj1uZXcgQjtmdW5jdGlvbiBqKHQscixuLGkpe3ZhciBhPWUobiksbz12b2lkIDAscz12b2lkIDAsbD12b2lkIDAsYz12b2lkIDA7aWYoYSl7aWYoKG89ZnVuY3Rpb24odCxlKXt0cnl7cmV0dXJuIHQoZSl9Y2F0Y2godCl7cmV0dXJuIE4uZXJyb3I9dCxOfX0obixpKSk9PT1OPyhjPSEwLHM9by5lcnJvcixvPW51bGwpOmw9ITAscj09PW8pcmV0dXJuIHZvaWQgUChyLG5ldyBUeXBlRXJyb3IoXCJBIHByb21pc2VzIGNhbGxiYWNrIGNhbm5vdCByZXR1cm4gdGhhdCBzYW1lIHByb21pc2UuXCIpKX1lbHNlIG89aSxsPSEwO3IuX3N0YXRlIT09TXx8KGEmJmw/TyhyLG8pOmM/UChyLHMpOnQ9PT1TP0QocixvKTp0PT09RSYmUChyLG8pKX12YXIgVj0wO2Z1bmN0aW9uIFUodCl7dFtBXT1WKyssdC5fc3RhdGU9dm9pZCAwLHQuX3Jlc3VsdD12b2lkIDAsdC5fc3Vic2NyaWJlcnM9W119ZnVuY3Rpb24gcSh0LGUpe3RoaXMuX2luc3RhbmNlQ29uc3RydWN0b3I9dCx0aGlzLnByb21pc2U9bmV3IHQoVCksdGhpcy5wcm9taXNlW0FdfHxVKHRoaXMucHJvbWlzZSkscihlKT8odGhpcy5faW5wdXQ9ZSx0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLl9yZW1haW5pbmc9ZS5sZW5ndGgsdGhpcy5fcmVzdWx0PW5ldyBBcnJheSh0aGlzLmxlbmd0aCksMD09PXRoaXMubGVuZ3RoP0QodGhpcy5wcm9taXNlLHRoaXMuX3Jlc3VsdCk6KHRoaXMubGVuZ3RoPXRoaXMubGVuZ3RofHwwLHRoaXMuX2VudW1lcmF0ZSgpLDA9PT10aGlzLl9yZW1haW5pbmcmJkQodGhpcy5wcm9taXNlLHRoaXMuX3Jlc3VsdCkpKTpQKHRoaXMucHJvbWlzZSxuZXcgRXJyb3IoXCJBcnJheSBNZXRob2RzIG11c3QgYmUgcHJvdmlkZWQgYW4gQXJyYXlcIikpfWZ1bmN0aW9uIEgodCl7dGhpc1tBXT1WKyssdGhpcy5fcmVzdWx0PXRoaXMuX3N0YXRlPXZvaWQgMCx0aGlzLl9zdWJzY3JpYmVycz1bXSxUIT09dCYmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJmZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIllvdSBtdXN0IHBhc3MgYSByZXNvbHZlciBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIHByb21pc2UgY29uc3RydWN0b3JcIil9KCksdGhpcyBpbnN0YW5jZW9mIEg/ZnVuY3Rpb24odCxlKXt0cnl7ZShmdW5jdGlvbihlKXtPKHQsZSl9LGZ1bmN0aW9uKGUpe1AodCxlKX0pfWNhdGNoKGUpe1AodCxlKX19KHRoaXMsdCk6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUHJvbWlzZSc6IFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yLCB0aGlzIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpfSgpKX1mdW5jdGlvbiBHKCl7dmFyIHQ9dm9pZCAwO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBpKXQ9aTtlbHNlIGlmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmKXQ9c2VsZjtlbHNlIHRyeXt0PUZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKX1jYXRjaCh0KXt0aHJvdyBuZXcgRXJyb3IoXCJwb2x5ZmlsbCBmYWlsZWQgYmVjYXVzZSBnbG9iYWwgb2JqZWN0IGlzIHVuYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnRcIil9dmFyIGU9dC5Qcm9taXNlO2lmKGUpe3ZhciByPW51bGw7dHJ5e3I9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUucmVzb2x2ZSgpKX1jYXRjaCh0KXt9aWYoXCJbb2JqZWN0IFByb21pc2VdXCI9PT1yJiYhZS5jYXN0KXJldHVybn10LlByb21pc2U9SH1yZXR1cm4gcS5wcm90b3R5cGUuX2VudW1lcmF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmxlbmd0aCxlPXRoaXMuX2lucHV0LHI9MDt0aGlzLl9zdGF0ZT09PU0mJnI8dDtyKyspdGhpcy5fZWFjaEVudHJ5KGVbcl0scil9LHEucHJvdG90eXBlLl9lYWNoRW50cnk9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yLG49ci5yZXNvbHZlO2lmKG49PT1rKXt2YXIgaT1MKHQpO2lmKGk9PT13JiZ0Ll9zdGF0ZSE9PU0pdGhpcy5fc2V0dGxlZEF0KHQuX3N0YXRlLGUsdC5fcmVzdWx0KTtlbHNlIGlmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGkpdGhpcy5fcmVtYWluaW5nLS0sdGhpcy5fcmVzdWx0W2VdPXQ7ZWxzZSBpZihyPT09SCl7dmFyIGE9bmV3IHIoVCk7eihhLHQsaSksdGhpcy5fd2lsbFNldHRsZUF0KGEsZSl9ZWxzZSB0aGlzLl93aWxsU2V0dGxlQXQobmV3IHIoZnVuY3Rpb24oZSl7cmV0dXJuIGUodCl9KSxlKX1lbHNlIHRoaXMuX3dpbGxTZXR0bGVBdChuKHQpLGUpfSxxLnByb3RvdHlwZS5fc2V0dGxlZEF0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnByb21pc2U7bi5fc3RhdGU9PT1NJiYodGhpcy5fcmVtYWluaW5nLS0sdD09PUU/UChuLHIpOnRoaXMuX3Jlc3VsdFtlXT1yKSwwPT09dGhpcy5fcmVtYWluaW5nJiZEKG4sdGhpcy5fcmVzdWx0KX0scS5wcm90b3R5cGUuX3dpbGxTZXR0bGVBdD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7Uih0LHZvaWQgMCxmdW5jdGlvbih0KXtyZXR1cm4gci5fc2V0dGxlZEF0KFMsZSx0KX0sZnVuY3Rpb24odCl7cmV0dXJuIHIuX3NldHRsZWRBdChFLGUsdCl9KX0sSC5hbGw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBxKHRoaXMsdCkucHJvbWlzZX0sSC5yYWNlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHIodCk/bmV3IGUoZnVuY3Rpb24ocixuKXtmb3IodmFyIGk9dC5sZW5ndGgsYT0wO2E8aTthKyspZS5yZXNvbHZlKHRbYV0pLnRoZW4ocixuKX0pOm5ldyBlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUobmV3IFR5cGVFcnJvcihcIllvdSBtdXN0IHBhc3MgYW4gYXJyYXkgdG8gcmFjZS5cIikpfSl9LEgucmVzb2x2ZT1rLEgucmVqZWN0PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB0aGlzKFQpO3JldHVybiBQKGUsdCksZX0sSC5fc2V0U2NoZWR1bGVyPWZ1bmN0aW9uKHQpe3M9dH0sSC5fc2V0QXNhcD1mdW5jdGlvbih0KXtsPXR9LEguX2FzYXA9bCxILnByb3RvdHlwZT17Y29uc3RydWN0b3I6SCx0aGVuOncsY2F0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGhlbihudWxsLHQpfX0sRygpLEgucG9seWZpbGw9RyxILlByb21pc2U9SCxIfSl9KS5jYWxsKHRoaXMsdChcIl9wcm9jZXNzXCIpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7X3Byb2Nlc3M6NDc1fV0sMjEyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuL2lzLWltcGxlbWVudGVkXCIpKCk/U3ltYm9sOnQoXCIuL3BvbHlmaWxsXCIpfSx7XCIuL2lzLWltcGxlbWVudGVkXCI6MjEzLFwiLi9wb2x5ZmlsbFwiOjIxNX1dLDIxMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXtvYmplY3Q6ITAsc3ltYm9sOiEwfTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdDtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBTeW1ib2wpcmV0dXJuITE7dD1TeW1ib2woXCJ0ZXN0IHN5bWJvbFwiKTt0cnl7U3RyaW5nKHQpfWNhdGNoKHQpe3JldHVybiExfXJldHVybiEhblt0eXBlb2YgU3ltYm9sLml0ZXJhdG9yXSYmKCEhblt0eXBlb2YgU3ltYm9sLnRvUHJpbWl0aXZlXSYmISFuW3R5cGVvZiBTeW1ib2wudG9TdHJpbmdUYWddKX19LHt9XSwyMTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuISF0JiYoXCJzeW1ib2xcIj09dHlwZW9mIHR8fCEhdC5jb25zdHJ1Y3RvciYmKFwiU3ltYm9sXCI9PT10LmNvbnN0cnVjdG9yLm5hbWUmJlwiU3ltYm9sXCI9PT10W3QuY29uc3RydWN0b3IudG9TdHJpbmdUYWddKSl9fSx7fV0sMjE1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saSxhLG8scz10KFwiZFwiKSxsPXQoXCIuL3ZhbGlkYXRlLXN5bWJvbFwiKSxjPU9iamVjdC5jcmVhdGUsdT1PYmplY3QuZGVmaW5lUHJvcGVydGllcyxoPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxmPU9iamVjdC5wcm90b3R5cGUscD1jKG51bGwpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCl7bj1TeW1ib2w7dHJ5e1N0cmluZyhuKCkpLG89ITB9Y2F0Y2godCl7fX12YXIgZCxnPShkPWMobnVsbCksZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbj0wO2RbdCsobnx8XCJcIildOykrK247cmV0dXJuIGRbdCs9bnx8XCJcIl09ITAsaChmLGU9XCJAQFwiK3Qscy5ncyhudWxsLGZ1bmN0aW9uKHQpe3J8fChyPSEwLGgodGhpcyxlLHModCkpLHI9ITEpfSkpLGV9KTthPWZ1bmN0aW9uKHQpe2lmKHRoaXMgaW5zdGFuY2VvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3JcIik7cmV0dXJuIGkodCl9LGUuZXhwb3J0cz1pPWZ1bmN0aW9uIHQoZSl7dmFyIHI7aWYodGhpcyBpbnN0YW5jZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvclwiKTtyZXR1cm4gbz9uKGUpOihyPWMoYS5wcm90b3R5cGUpLGU9dm9pZCAwPT09ZT9cIlwiOlN0cmluZyhlKSx1KHIse19fZGVzY3JpcHRpb25fXzpzKFwiXCIsZSksX19uYW1lX186cyhcIlwiLGcoZSkpfSkpfSx1KGkse2ZvcjpzKGZ1bmN0aW9uKHQpe3JldHVybiBwW3RdP3BbdF06cFt0XT1pKFN0cmluZyh0KSl9KSxrZXlGb3I6cyhmdW5jdGlvbih0KXt2YXIgZTtmb3IoZSBpbiBsKHQpLHApaWYocFtlXT09PXQpcmV0dXJuIGV9KSxoYXNJbnN0YW5jZTpzKFwiXCIsbiYmbi5oYXNJbnN0YW5jZXx8aShcImhhc0luc3RhbmNlXCIpKSxpc0NvbmNhdFNwcmVhZGFibGU6cyhcIlwiLG4mJm4uaXNDb25jYXRTcHJlYWRhYmxlfHxpKFwiaXNDb25jYXRTcHJlYWRhYmxlXCIpKSxpdGVyYXRvcjpzKFwiXCIsbiYmbi5pdGVyYXRvcnx8aShcIml0ZXJhdG9yXCIpKSxtYXRjaDpzKFwiXCIsbiYmbi5tYXRjaHx8aShcIm1hdGNoXCIpKSxyZXBsYWNlOnMoXCJcIixuJiZuLnJlcGxhY2V8fGkoXCJyZXBsYWNlXCIpKSxzZWFyY2g6cyhcIlwiLG4mJm4uc2VhcmNofHxpKFwic2VhcmNoXCIpKSxzcGVjaWVzOnMoXCJcIixuJiZuLnNwZWNpZXN8fGkoXCJzcGVjaWVzXCIpKSxzcGxpdDpzKFwiXCIsbiYmbi5zcGxpdHx8aShcInNwbGl0XCIpKSx0b1ByaW1pdGl2ZTpzKFwiXCIsbiYmbi50b1ByaW1pdGl2ZXx8aShcInRvUHJpbWl0aXZlXCIpKSx0b1N0cmluZ1RhZzpzKFwiXCIsbiYmbi50b1N0cmluZ1RhZ3x8aShcInRvU3RyaW5nVGFnXCIpKSx1bnNjb3BhYmxlczpzKFwiXCIsbiYmbi51bnNjb3BhYmxlc3x8aShcInVuc2NvcGFibGVzXCIpKX0pLHUoYS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnMoaSksdG9TdHJpbmc6cyhcIlwiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19uYW1lX199KX0pLHUoaS5wcm90b3R5cGUse3RvU3RyaW5nOnMoZnVuY3Rpb24oKXtyZXR1cm5cIlN5bWJvbCAoXCIrbCh0aGlzKS5fX2Rlc2NyaXB0aW9uX18rXCIpXCJ9KSx2YWx1ZU9mOnMoZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzKX0pfSksaChpLnByb3RvdHlwZSxpLnRvUHJpbWl0aXZlLHMoXCJcIixmdW5jdGlvbigpe3ZhciB0PWwodGhpcyk7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIHQ/dDp0LnRvU3RyaW5nKCl9KSksaChpLnByb3RvdHlwZSxpLnRvU3RyaW5nVGFnLHMoXCJjXCIsXCJTeW1ib2xcIikpLGgoYS5wcm90b3R5cGUsaS50b1N0cmluZ1RhZyxzKFwiY1wiLGkucHJvdG90eXBlW2kudG9TdHJpbmdUYWddKSksaChhLnByb3RvdHlwZSxpLnRvUHJpbWl0aXZlLHMoXCJjXCIsaS5wcm90b3R5cGVbaS50b1ByaW1pdGl2ZV0pKX0se1wiLi92YWxpZGF0ZS1zeW1ib2xcIjoyMTYsZDoxNDJ9XSwyMTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9pcy1zeW1ib2xcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFuKHQpKXRocm93IG5ldyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYSBzeW1ib2xcIik7cmV0dXJuIHR9fSx7XCIuL2lzLXN5bWJvbFwiOjIxNH1dLDIxNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi9pcy1pbXBsZW1lbnRlZFwiKSgpP1dlYWtNYXA6dChcIi4vcG9seWZpbGxcIil9LHtcIi4vaXMtaW1wbGVtZW50ZWRcIjoyMTgsXCIuL3BvbHlmaWxsXCI6MjIwfV0sMjE4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQsZTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBXZWFrTWFwKXJldHVybiExO3RyeXt0PW5ldyBXZWFrTWFwKFtbZT17fSxcIm9uZVwiXSxbe30sXCJ0d29cIl0sW3t9LFwidGhyZWVcIl1dKX1jYXRjaCh0KXtyZXR1cm4hMX1yZXR1cm5cIltvYmplY3QgV2Vha01hcF1cIj09PVN0cmluZyh0KSYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQuc2V0JiYodC5zZXQoe30sMSk9PT10JiYoXCJmdW5jdGlvblwiPT10eXBlb2YgdC5kZWxldGUmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmhhcyYmXCJvbmVcIj09PXQuZ2V0KGUpKSkpKX19LHt9XSwyMTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9XCJmdW5jdGlvblwiPT10eXBlb2YgV2Vha01hcCYmXCJbb2JqZWN0IFdlYWtNYXBdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3IFdlYWtNYXApfSx7fV0sMjIwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saT10KFwiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZlwiKSxhPXQoXCJlczUtZXh0L29iamVjdC92YWxpZC1vYmplY3RcIiksbz10KFwiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWVcIikscz10KFwiZXM1LWV4dC9zdHJpbmcvcmFuZG9tLXVuaXFcIiksbD10KFwiZFwiKSxjPXQoXCJlczYtaXRlcmF0b3IvZ2V0XCIpLHU9dChcImVzNi1pdGVyYXRvci9mb3Itb2ZcIiksaD10KFwiZXM2LXN5bWJvbFwiKS50b1N0cmluZ1RhZyxmPXQoXCIuL2lzLW5hdGl2ZS1pbXBsZW1lbnRlZFwiKSxwPUFycmF5LmlzQXJyYXksZD1PYmplY3QuZGVmaW5lUHJvcGVydHksZz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHY9T2JqZWN0LmdldFByb3RvdHlwZU9mO2UuZXhwb3J0cz1uPWZ1bmN0aW9uKCl7dmFyIHQsZT1hcmd1bWVudHNbMF07aWYoISh0aGlzIGluc3RhbmNlb2YgbikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnXCIpO3JldHVybiB0PWYmJmkmJldlYWtNYXAhPT1uP2kobmV3IFdlYWtNYXAsdih0aGlzKSk6dGhpcyxudWxsIT1lJiYocChlKXx8KGU9YyhlKSkpLGQodCxcIl9fd2Vha01hcERhdGFfX1wiLGwoXCJjXCIsXCIkd2Vha01hcCRcIitzKCkpKSxlPyh1KGUsZnVuY3Rpb24oZSl7byhlKSx0LnNldChlWzBdLGVbMV0pfSksdCk6dH0sZiYmKGkmJmkobixXZWFrTWFwKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFdlYWtNYXAucHJvdG90eXBlLHtjb25zdHJ1Y3RvcjpsKG4pfSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4ucHJvdG90eXBlLHtkZWxldGU6bChmdW5jdGlvbih0KXtyZXR1cm4hIWcuY2FsbChhKHQpLHRoaXMuX193ZWFrTWFwRGF0YV9fKSYmKGRlbGV0ZSB0W3RoaXMuX193ZWFrTWFwRGF0YV9fXSwhMCl9KSxnZXQ6bChmdW5jdGlvbih0KXtpZihnLmNhbGwoYSh0KSx0aGlzLl9fd2Vha01hcERhdGFfXykpcmV0dXJuIHRbdGhpcy5fX3dlYWtNYXBEYXRhX19dfSksaGFzOmwoZnVuY3Rpb24odCl7cmV0dXJuIGcuY2FsbChhKHQpLHRoaXMuX193ZWFrTWFwRGF0YV9fKX0pLHNldDpsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQoYSh0KSx0aGlzLl9fd2Vha01hcERhdGFfXyxsKFwiY1wiLGUpKSx0aGlzfSksdG9TdHJpbmc6bChmdW5jdGlvbigpe3JldHVyblwiW29iamVjdCBXZWFrTWFwXVwifSl9KSxkKG4ucHJvdG90eXBlLGgsbChcImNcIixcIldlYWtNYXBcIikpfSx7XCIuL2lzLW5hdGl2ZS1pbXBsZW1lbnRlZFwiOjIxOSxkOjE0MixcImVzNS1leHQvb2JqZWN0L3NldC1wcm90b3R5cGUtb2ZcIjoxOTMsXCJlczUtZXh0L29iamVjdC92YWxpZC1vYmplY3RcIjoxOTcsXCJlczUtZXh0L29iamVjdC92YWxpZC12YWx1ZVwiOjE5OCxcImVzNS1leHQvc3RyaW5nL3JhbmRvbS11bmlxXCI6MjAzLFwiZXM2LWl0ZXJhdG9yL2Zvci1vZlwiOjIwNSxcImVzNi1pdGVyYXRvci9nZXRcIjoyMDYsXCJlczYtc3ltYm9sXCI6MjEyfV0sMjIxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lfHwwLGk9cnx8MTtyZXR1cm5bW3RbMTJdK3RbMF0sdFsxM10rdFsxXSx0WzE0XSt0WzJdLHRbMTVdK3RbM11dLFt0WzEyXS10WzBdLHRbMTNdLXRbMV0sdFsxNF0tdFsyXSx0WzE1XS10WzNdXSxbdFsxMl0rdFs0XSx0WzEzXSt0WzVdLHRbMTRdK3RbNl0sdFsxNV0rdFs3XV0sW3RbMTJdLXRbNF0sdFsxM10tdFs1XSx0WzE0XS10WzZdLHRbMTVdLXRbN11dLFtuKnRbMTJdK3RbOF0sbip0WzEzXSt0WzldLG4qdFsxNF0rdFsxMF0sbip0WzE1XSt0WzExXV0sW2kqdFsxMl0tdFs4XSxpKnRbMTNdLXRbOV0saSp0WzE0XS10WzEwXSxpKnRbMTVdLXRbMTFdXV19fSx7fV0sMjIyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImlzLXN0cmluZy1ibGFua1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dHlwZW9mIHQ7aWYoXCJzdHJpbmdcIj09PWUpe3ZhciByPXQ7aWYoMD09PSh0PSt0KSYmbihyKSlyZXR1cm4hMX1lbHNlIGlmKFwibnVtYmVyXCIhPT1lKXJldHVybiExO3JldHVybiB0LXQ8MX19LHtcImlzLXN0cmluZy1ibGFua1wiOjQxNn1dLDIyMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IG8oWzBdLFswXSwwKTtjYXNlIDE6aWYoXCJudW1iZXJcIj09dHlwZW9mIHQpe3ZhciBuPWwodCk7cmV0dXJuIG5ldyBvKG4sbiwwKX1yZXR1cm4gbmV3IG8odCxsKHQubGVuZ3RoKSwwKTtjYXNlIDI6aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpe3ZhciBuPWwodC5sZW5ndGgpO3JldHVybiBuZXcgbyh0LG4sK2UpfXI9MDtjYXNlIDM6aWYodC5sZW5ndGghPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJzdGF0ZSBhbmQgdmVsb2NpdHkgbGVuZ3RocyBtdXN0IG1hdGNoXCIpO3JldHVybiBuZXcgbyh0LGUscil9fTt2YXIgbj10KFwiY3ViaWMtaGVybWl0ZVwiKSxpPXQoXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiKTtmdW5jdGlvbiBhKHQsZSxyKXtyZXR1cm4gTWF0aC5taW4oZSxNYXRoLm1heCh0LHIpKX1mdW5jdGlvbiBvKHQsZSxyKXt0aGlzLmRpbWVuc2lvbj10Lmxlbmd0aCx0aGlzLmJvdW5kcz1bbmV3IEFycmF5KHRoaXMuZGltZW5zaW9uKSxuZXcgQXJyYXkodGhpcy5kaW1lbnNpb24pXTtmb3IodmFyIG49MDtuPHRoaXMuZGltZW5zaW9uOysrbil0aGlzLmJvdW5kc1swXVtuXT0tMS8wLHRoaXMuYm91bmRzWzFdW25dPTEvMDt0aGlzLl9zdGF0ZT10LnNsaWNlKCkucmV2ZXJzZSgpLHRoaXMuX3ZlbG9jaXR5PWUuc2xpY2UoKS5yZXZlcnNlKCksdGhpcy5fdGltZT1bcl0sdGhpcy5fc2NyYXRjaD1bdC5zbGljZSgpLHQuc2xpY2UoKSx0LnNsaWNlKCksdC5zbGljZSgpLHQuc2xpY2UoKV19dmFyIHM9by5wcm90b3R5cGU7ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKWVbcl09MDtyZXR1cm4gZX1zLmZsdXNoPWZ1bmN0aW9uKHQpe3ZhciBlPWkuZ3QodGhpcy5fdGltZSx0KS0xO2U8PTB8fCh0aGlzLl90aW1lLnNwbGljZSgwLGUpLHRoaXMuX3N0YXRlLnNwbGljZSgwLGUqdGhpcy5kaW1lbnNpb24pLHRoaXMuX3ZlbG9jaXR5LnNwbGljZSgwLGUqdGhpcy5kaW1lbnNpb24pKX0scy5jdXJ2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aW1lLHI9ZS5sZW5ndGgsbz1pLmxlKGUsdCkscz10aGlzLl9zY3JhdGNoWzBdLGw9dGhpcy5fc3RhdGUsYz10aGlzLl92ZWxvY2l0eSx1PXRoaXMuZGltZW5zaW9uLGg9dGhpcy5ib3VuZHM7aWYobzwwKWZvcih2YXIgZj11LTEscD0wO3A8dTsrK3AsLS1mKXNbcF09bFtmXTtlbHNlIGlmKG8+PXItMSl7Zj1sLmxlbmd0aC0xO3ZhciBkPXQtZVtyLTFdO2ZvcihwPTA7cDx1OysrcCwtLWYpc1twXT1sW2ZdK2QqY1tmXX1lbHNle2Y9dSoobysxKS0xO3ZhciBnPWVbb10sdj1lW28rMV0tZ3x8MSxtPXRoaXMuX3NjcmF0Y2hbMV0seT10aGlzLl9zY3JhdGNoWzJdLHg9dGhpcy5fc2NyYXRjaFszXSxiPXRoaXMuX3NjcmF0Y2hbNF0sXz0hMDtmb3IocD0wO3A8dTsrK3AsLS1mKW1bcF09bFtmXSx4W3BdPWNbZl0qdix5W3BdPWxbZit1XSxiW3BdPWNbZit1XSp2LF89XyYmbVtwXT09PXlbcF0mJnhbcF09PT1iW3BdJiYwPT09eFtwXTtpZihfKWZvcihwPTA7cDx1OysrcClzW3BdPW1bcF07ZWxzZSBuKG0seCx5LGIsKHQtZykvdixzKX12YXIgdz1oWzBdLGs9aFsxXTtmb3IocD0wO3A8dTsrK3Apc1twXT1hKHdbcF0sa1twXSxzW3BdKTtyZXR1cm4gc30scy5kY3VydmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGltZSxyPWUubGVuZ3RoLGE9aS5sZShlLHQpLG89dGhpcy5fc2NyYXRjaFswXSxzPXRoaXMuX3N0YXRlLGw9dGhpcy5fdmVsb2NpdHksYz10aGlzLmRpbWVuc2lvbjtpZihhPj1yLTEpZm9yKHZhciB1PXMubGVuZ3RoLTEsaD0oZVtyLTFdLDApO2g8YzsrK2gsLS11KW9baF09bFt1XTtlbHNle3U9YyooYSsxKS0xO3ZhciBmPWVbYV0scD1lW2ErMV0tZnx8MSxkPXRoaXMuX3NjcmF0Y2hbMV0sZz10aGlzLl9zY3JhdGNoWzJdLHY9dGhpcy5fc2NyYXRjaFszXSxtPXRoaXMuX3NjcmF0Y2hbNF0seT0hMDtmb3IoaD0wO2g8YzsrK2gsLS11KWRbaF09c1t1XSx2W2hdPWxbdV0qcCxnW2hdPXNbdStjXSxtW2hdPWxbdStjXSpwLHk9eSYmZFtoXT09PWdbaF0mJnZbaF09PT1tW2hdJiYwPT09dltoXTtpZih5KWZvcihoPTA7aDxjOysraClvW2hdPTA7ZWxzZXtuLmRlcml2YXRpdmUoZCx2LGcsbSwodC1mKS9wLG8pO2ZvcihoPTA7aDxjOysraClvW2hdLz1wfX1yZXR1cm4gb30scy5sYXN0VD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RpbWU7cmV0dXJuIHRbdC5sZW5ndGgtMV19LHMuc3RhYmxlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX3ZlbG9jaXR5LGU9dC5sZW5ndGgscj10aGlzLmRpbWVuc2lvbi0xO3I+PTA7LS1yKWlmKHRbLS1lXSlyZXR1cm4hMTtyZXR1cm4hMH0scy5qdW1wPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXRoaXMuZGltZW5zaW9uO2lmKCEodDxlfHxhcmd1bWVudHMubGVuZ3RoIT09cisxKSl7dmFyIG49dGhpcy5fc3RhdGUsaT10aGlzLl92ZWxvY2l0eSxvPW4ubGVuZ3RoLXRoaXMuZGltZW5zaW9uLHM9dGhpcy5ib3VuZHMsbD1zWzBdLGM9c1sxXTt0aGlzLl90aW1lLnB1c2goZSx0KTtmb3IodmFyIHU9MDt1PDI7Kyt1KWZvcih2YXIgaD0wO2g8cjsrK2gpbi5wdXNoKG5bbysrXSksaS5wdXNoKDApO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IoaD1yO2g+MDstLWgpbi5wdXNoKGEobFtoLTFdLGNbaC0xXSxhcmd1bWVudHNbaF0pKSxpLnB1c2goMCl9fSxzLnB1c2g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXN0VCgpLHI9dGhpcy5kaW1lbnNpb247aWYoISh0PGV8fGFyZ3VtZW50cy5sZW5ndGghPT1yKzEpKXt2YXIgbj10aGlzLl9zdGF0ZSxpPXRoaXMuX3ZlbG9jaXR5LG89bi5sZW5ndGgtdGhpcy5kaW1lbnNpb24scz10LWUsbD10aGlzLmJvdW5kcyxjPWxbMF0sdT1sWzFdLGg9cz4xZS02PzEvczowO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGY9cjtmPjA7LS1mKXt2YXIgcD1hKGNbZi0xXSx1W2YtMV0sYXJndW1lbnRzW2ZdKTtuLnB1c2gocCksaS5wdXNoKChwLW5bbysrXSkqaCl9fX0scy5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kaW1lbnNpb247aWYoISh0PHRoaXMubGFzdFQoKXx8YXJndW1lbnRzLmxlbmd0aCE9PWUrMSkpe3ZhciByPXRoaXMuX3N0YXRlLG49dGhpcy5fdmVsb2NpdHksaT10aGlzLmJvdW5kcyxvPWlbMF0scz1pWzFdO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGw9ZTtsPjA7LS1sKXIucHVzaChhKG9bbC0xXSxzW2wtMV0sYXJndW1lbnRzW2xdKSksbi5wdXNoKDApfX0scy5tb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXRoaXMuZGltZW5zaW9uO2lmKCEodDw9ZXx8YXJndW1lbnRzLmxlbmd0aCE9PXIrMSkpe3ZhciBuPXRoaXMuX3N0YXRlLGk9dGhpcy5fdmVsb2NpdHksbz1uLmxlbmd0aC10aGlzLmRpbWVuc2lvbixzPXRoaXMuYm91bmRzLGw9c1swXSxjPXNbMV0sdT10LWUsaD11PjFlLTY/MS91OjA7dGhpcy5fdGltZS5wdXNoKHQpO2Zvcih2YXIgZj1yO2Y+MDstLWYpe3ZhciBwPWFyZ3VtZW50c1tmXTtuLnB1c2goYShsW2YtMV0sY1tmLTFdLG5bbysrXStwKSksaS5wdXNoKHAqaCl9fX0scy5pZGxlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKTtpZighKHQ8ZSkpe3ZhciByPXRoaXMuZGltZW5zaW9uLG49dGhpcy5fc3RhdGUsaT10aGlzLl92ZWxvY2l0eSxvPW4ubGVuZ3RoLXIscz10aGlzLmJvdW5kcyxsPXNbMF0sYz1zWzFdLHU9dC1lO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGg9ci0xO2g+PTA7LS1oKW4ucHVzaChhKGxbaF0sY1toXSxuW29dK3UqaVtvXSkpLGkucHVzaCgwKSxvKz0xfX19LHtcImJpbmFyeS1zZWFyY2gtYm91bmRzXCI6ODIsXCJjdWJpYy1oZXJtaXRlXCI6MTM2fV0sMjI0OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcImR0eXBlXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIm11c3Qgc3BlY2lmeSBkYXRhIGFzIGZpcnN0IHBhcmFtZXRlclwiKTtpZihyPTB8KyhyfHwwKSxBcnJheS5pc0FycmF5KHQpJiZ0WzBdJiZcIm51bWJlclwiPT10eXBlb2YgdFswXVswXSl7dmFyIGksYSxvLHMsbD10WzBdLmxlbmd0aCxjPXQubGVuZ3RoKmw7ZSYmXCJzdHJpbmdcIiE9dHlwZW9mIGV8fChlPW5ldyhuKGV8fFwiZmxvYXQzMlwiKSkoYytyKSk7dmFyIHU9ZS5sZW5ndGgtcjtpZihjIT09dSl0aHJvdyBuZXcgRXJyb3IoXCJzb3VyY2UgbGVuZ3RoIFwiK2MrXCIgKFwiK2wrXCJ4XCIrdC5sZW5ndGgrXCIpIGRvZXMgbm90IG1hdGNoIGRlc3RpbmF0aW9uIGxlbmd0aCBcIit1KTtmb3IoaT0wLG89cjtpPHQubGVuZ3RoO2krKylmb3IoYT0wO2E8bDthKyspZVtvKytdPW51bGw9PT10W2ldW2FdP05hTjp0W2ldW2FdfWVsc2UgaWYoZSYmXCJzdHJpbmdcIiE9dHlwZW9mIGUpZS5zZXQodCxyKTtlbHNle3ZhciBoPW4oZXx8XCJmbG9hdDMyXCIpO2lmKEFycmF5LmlzQXJyYXkodCl8fFwiYXJyYXlcIj09PWUpZm9yKGU9bmV3IGgodC5sZW5ndGgrciksaT0wLG89cixzPWUubGVuZ3RoO288cztvKyssaSsrKWVbb109bnVsbD09PXRbaV0/TmFOOnRbaV07ZWxzZSAwPT09cj9lPW5ldyBoKHQpOihlPW5ldyBoKHQubGVuZ3RoK3IpKS5zZXQodCxyKX1yZXR1cm4gZX19LHtkdHlwZToxNjF9XSwyMjU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiY3NzLWZvbnQvc3RyaW5naWZ5XCIpLGk9WzMyLDEyNl07ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PXR8fHt9KS5zaGFwZT90LnNoYXBlOnQuY2FudmFzP1t0LmNhbnZhcy53aWR0aCx0LmNhbnZhcy5oZWlnaHRdOls1MTIsNTEyXSxyPXQuY2FudmFzfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLGE9dC5mb250LG89XCJudW1iZXJcIj09dHlwZW9mIHQuc3RlcD9bdC5zdGVwLHQuc3RlcF06dC5zdGVwfHxbMzIsMzJdLHM9dC5jaGFyc3x8aTthJiZcInN0cmluZ1wiIT10eXBlb2YgYSYmKGE9bihhKSk7aWYoQXJyYXkuaXNBcnJheShzKSl7aWYoMj09PXMubGVuZ3RoJiZcIm51bWJlclwiPT10eXBlb2Ygc1swXSYmXCJudW1iZXJcIj09dHlwZW9mIHNbMV0pe2Zvcih2YXIgbD1bXSxjPXNbMF0sdT0wO2M8PXNbMV07YysrKWxbdSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGMpO3M9bH19ZWxzZSBzPVN0cmluZyhzKS5zcGxpdChcIlwiKTtlPWUuc2xpY2UoKSxyLndpZHRoPWVbMF0sci5oZWlnaHQ9ZVsxXTt2YXIgaD1yLmdldENvbnRleHQoXCIyZFwiKTtoLmZpbGxTdHlsZT1cIiMwMDBcIixoLmZpbGxSZWN0KDAsMCxyLndpZHRoLHIuaGVpZ2h0KSxoLmZvbnQ9YSxoLnRleHRBbGlnbj1cImNlbnRlclwiLGgudGV4dEJhc2VsaW5lPVwibWlkZGxlXCIsaC5maWxsU3R5bGU9XCIjZmZmXCI7Zm9yKHZhciBmPW9bMF0vMixwPW9bMV0vMixjPTA7YzxzLmxlbmd0aDtjKyspaC5maWxsVGV4dChzW2NdLGYscCksKGYrPW9bMF0pPmVbMF0tb1swXS8yJiYoZj1vWzBdLzIscCs9b1sxXSk7cmV0dXJuIHJ9fSx7XCJjc3MtZm9udC9zdHJpbmdpZnlcIjoxMzN9XSwyMjY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7ZXx8KGU9e30pLChcInN0cmluZ1wiPT10eXBlb2YgdHx8QXJyYXkuaXNBcnJheSh0KSkmJihlLmZhbWlseT10KTt2YXIgcj1BcnJheS5pc0FycmF5KGUuZmFtaWx5KT9lLmZhbWlseS5qb2luKFwiLCBcIik6ZS5mYW1pbHk7aWYoIXIpdGhyb3cgRXJyb3IoXCJgZmFtaWx5YCBtdXN0IGJlIGRlZmluZWRcIik7dmFyIHM9ZS5zaXplfHxlLmZvbnRTaXplfHxlLmVtfHw0OCxsPWUud2VpZ2h0fHxlLmZvbnRXZWlnaHR8fFwiXCIsYz0odD1bZS5zdHlsZXx8ZS5mb250U3R5bGV8fFwiXCIsbCxzXS5qb2luKFwiIFwiKStcInB4IFwiK3IsZS5vcmlnaW58fFwidG9wXCIpO2lmKG4uY2FjaGVbcl0mJnM8PW4uY2FjaGVbcl0uZW0pcmV0dXJuIGkobi5jYWNoZVtyXSxjKTt2YXIgdT1lLmNhbnZhc3x8bi5jYW52YXMsaD11LmdldENvbnRleHQoXCIyZFwiKSxmPXt1cHBlcjp2b2lkIDAhPT1lLnVwcGVyP2UudXBwZXI6XCJIXCIsbG93ZXI6dm9pZCAwIT09ZS5sb3dlcj9lLmxvd2VyOlwieFwiLGRlc2NlbnQ6dm9pZCAwIT09ZS5kZXNjZW50P2UuZGVzY2VudDpcInBcIixhc2NlbnQ6dm9pZCAwIT09ZS5hc2NlbnQ/ZS5hc2NlbnQ6XCJoXCIsdGl0dGxlOnZvaWQgMCE9PWUudGl0dGxlP2UudGl0dGxlOlwiaVwiLG92ZXJzaG9vdDp2b2lkIDAhPT1lLm92ZXJzaG9vdD9lLm92ZXJzaG9vdDpcIk9cIn0scD1NYXRoLmNlaWwoMS41KnMpO3UuaGVpZ2h0PXAsdS53aWR0aD0uNSpwLGguZm9udD10O3ZhciBkPXt0b3A6MH07aC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9XCJ0b3BcIixoLmZpbGxTdHlsZT1cImJsYWNrXCIsaC5maWxsVGV4dChcIkhcIiwwLDApO3ZhciBnPWEoaC5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2guY2xlYXJSZWN0KDAsMCxwLHApLGgudGV4dEJhc2VsaW5lPVwiYm90dG9tXCIsaC5maWxsVGV4dChcIkhcIiwwLHApO3ZhciB2PWEoaC5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2QubGluZUhlaWdodD1kLmJvdHRvbT1wLXYrZyxoLmNsZWFyUmVjdCgwLDAscCxwKSxoLnRleHRCYXNlbGluZT1cImFscGhhYmV0aWNcIixoLmZpbGxUZXh0KFwiSFwiLDAscCk7dmFyIG09cC1hKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKS0xK2c7ZC5iYXNlbGluZT1kLmFscGhhYmV0aWM9bSxoLmNsZWFyUmVjdCgwLDAscCxwKSxoLnRleHRCYXNlbGluZT1cIm1pZGRsZVwiLGguZmlsbFRleHQoXCJIXCIsMCwuNSpwKTt2YXIgeT1hKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtkLm1lZGlhbj1kLm1pZGRsZT1wLXktMStnLS41KnAsaC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9XCJoYW5naW5nXCIsaC5maWxsVGV4dChcIkhcIiwwLC41KnApO3ZhciB4PWEoaC5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2QuaGFuZ2luZz1wLXgtMStnLS41KnAsaC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9XCJpZGVvZ3JhcGhpY1wiLGguZmlsbFRleHQoXCJIXCIsMCxwKTt2YXIgYj1hKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtpZihkLmlkZW9ncmFwaGljPXAtYi0xK2csZi51cHBlciYmKGguY2xlYXJSZWN0KDAsMCxwLHApLGgudGV4dEJhc2VsaW5lPVwidG9wXCIsaC5maWxsVGV4dChmLnVwcGVyLDAsMCksZC51cHBlcj1hKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKSxkLmNhcEhlaWdodD1kLmJhc2VsaW5lLWQudXBwZXIpLGYubG93ZXImJihoLmNsZWFyUmVjdCgwLDAscCxwKSxoLnRleHRCYXNlbGluZT1cInRvcFwiLGguZmlsbFRleHQoZi5sb3dlciwwLDApLGQubG93ZXI9YShoLmdldEltYWdlRGF0YSgwLDAscCxwKSksZC54SGVpZ2h0PWQuYmFzZWxpbmUtZC5sb3dlciksZi50aXR0bGUmJihoLmNsZWFyUmVjdCgwLDAscCxwKSxoLnRleHRCYXNlbGluZT1cInRvcFwiLGguZmlsbFRleHQoZi50aXR0bGUsMCwwKSxkLnRpdHRsZT1hKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKSksZi5hc2NlbnQmJihoLmNsZWFyUmVjdCgwLDAscCxwKSxoLnRleHRCYXNlbGluZT1cInRvcFwiLGguZmlsbFRleHQoZi5hc2NlbnQsMCwwKSxkLmFzY2VudD1hKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKSksZi5kZXNjZW50JiYoaC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9XCJ0b3BcIixoLmZpbGxUZXh0KGYuZGVzY2VudCwwLDApLGQuZGVzY2VudD1vKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKSksZi5vdmVyc2hvb3Qpe2guY2xlYXJSZWN0KDAsMCxwLHApLGgudGV4dEJhc2VsaW5lPVwidG9wXCIsaC5maWxsVGV4dChmLm92ZXJzaG9vdCwwLDApO3ZhciBfPW8oaC5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2Qub3ZlcnNob290PV8tbX1mb3IodmFyIHcgaW4gZClkW3ddLz1zO3JldHVybiBkLmVtPXMsbi5jYWNoZVtyXT1kLGkoZCxjKX1mdW5jdGlvbiBpKHQsZSl7dmFyIHI9e307Zm9yKHZhciBuIGluXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPXRbZV0pLHQpXCJlbVwiIT09biYmKHJbbl09dFtuXS1lKTtyZXR1cm4gcn1mdW5jdGlvbiBhKHQpe2Zvcih2YXIgZT10LmhlaWdodCxyPXQuZGF0YSxuPTM7bjxyLmxlbmd0aDtuKz00KWlmKDAhPT1yW25dKXJldHVybiBNYXRoLmZsb29yKC4yNSoobi0zKS9lKX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT10LmhlaWdodCxyPXQuZGF0YSxuPXIubGVuZ3RoLTE7bj4wO24tPTQpaWYoMCE9PXJbbl0pcmV0dXJuIE1hdGguZmxvb3IoLjI1KihuLTMpL2UpfWUuZXhwb3J0cz1uLG4uY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksbi5jYWNoZT17fX0se31dLDIyNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGModHx8ZCxudWxsKX07dmFyIG49MCxpPTE7ZnVuY3Rpb24gYSh0LGUscixuLGksYSl7dGhpcy5fY29sb3I9dCx0aGlzLmtleT1lLHRoaXMudmFsdWU9cix0aGlzLmxlZnQ9bix0aGlzLnJpZ2h0PWksdGhpcy5fY291bnQ9YX1mdW5jdGlvbiBvKHQpe3JldHVybiBuZXcgYSh0Ll9jb2xvcix0LmtleSx0LnZhbHVlLHQubGVmdCx0LnJpZ2h0LHQuX2NvdW50KX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIG5ldyBhKHQsZS5rZXksZS52YWx1ZSxlLmxlZnQsZS5yaWdodCxlLl9jb3VudCl9ZnVuY3Rpb24gbCh0KXt0Ll9jb3VudD0xKyh0LmxlZnQ/dC5sZWZ0Ll9jb3VudDowKSsodC5yaWdodD90LnJpZ2h0Ll9jb3VudDowKX1mdW5jdGlvbiBjKHQsZSl7dGhpcy5fY29tcGFyZT10LHRoaXMucm9vdD1lfXZhciB1PWMucHJvdG90eXBlO2Z1bmN0aW9uIGgodCxlKXt0aGlzLnRyZWU9dCx0aGlzLl9zdGFjaz1lfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LFwia2V5c1wiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGUscil7dC5wdXNoKGUpfSksdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodSxcInZhbHVlc1wiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGUscil7dC5wdXNoKHIpfSksdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodSxcImxlbmd0aFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290P3RoaXMucm9vdC5fY291bnQ6MH19KSx1Lmluc2VydD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLl9jb21wYXJlLG89dGhpcy5yb290LHU9W10saD1bXTtvOyl7dmFyIGY9cih0LG8ua2V5KTt1LnB1c2gobyksaC5wdXNoKGYpLG89Zjw9MD9vLmxlZnQ6by5yaWdodH11LnB1c2gobmV3IGEobix0LGUsbnVsbCxudWxsLDEpKTtmb3IodmFyIHA9dS5sZW5ndGgtMjtwPj0wOy0tcCl7bz11W3BdO2hbcF08PTA/dVtwXT1uZXcgYShvLl9jb2xvcixvLmtleSxvLnZhbHVlLHVbcCsxXSxvLnJpZ2h0LG8uX2NvdW50KzEpOnVbcF09bmV3IGEoby5fY29sb3Isby5rZXksby52YWx1ZSxvLmxlZnQsdVtwKzFdLG8uX2NvdW50KzEpfWZvcihwPXUubGVuZ3RoLTE7cD4xOy0tcCl7dmFyIGQ9dVtwLTFdO289dVtwXTtpZihkLl9jb2xvcj09PWl8fG8uX2NvbG9yPT09aSlicmVhazt2YXIgZz11W3AtMl07aWYoZy5sZWZ0PT09ZClpZihkLmxlZnQ9PT1vKXtpZighKHY9Zy5yaWdodCl8fHYuX2NvbG9yIT09bil7aWYoZy5fY29sb3I9bixnLmxlZnQ9ZC5yaWdodCxkLl9jb2xvcj1pLGQucmlnaHQ9Zyx1W3AtMl09ZCx1W3AtMV09byxsKGcpLGwoZCkscD49MykobT11W3AtM10pLmxlZnQ9PT1nP20ubGVmdD1kOm0ucmlnaHQ9ZDticmVha31kLl9jb2xvcj1pLGcucmlnaHQ9cyhpLHYpLGcuX2NvbG9yPW4scC09MX1lbHNle2lmKCEodj1nLnJpZ2h0KXx8di5fY29sb3IhPT1uKXtpZihkLnJpZ2h0PW8ubGVmdCxnLl9jb2xvcj1uLGcubGVmdD1vLnJpZ2h0LG8uX2NvbG9yPWksby5sZWZ0PWQsby5yaWdodD1nLHVbcC0yXT1vLHVbcC0xXT1kLGwoZyksbChkKSxsKG8pLHA+PTMpKG09dVtwLTNdKS5sZWZ0PT09Zz9tLmxlZnQ9bzptLnJpZ2h0PW87YnJlYWt9ZC5fY29sb3I9aSxnLnJpZ2h0PXMoaSx2KSxnLl9jb2xvcj1uLHAtPTF9ZWxzZSBpZihkLnJpZ2h0PT09byl7aWYoISh2PWcubGVmdCl8fHYuX2NvbG9yIT09bil7aWYoZy5fY29sb3I9bixnLnJpZ2h0PWQubGVmdCxkLl9jb2xvcj1pLGQubGVmdD1nLHVbcC0yXT1kLHVbcC0xXT1vLGwoZyksbChkKSxwPj0zKShtPXVbcC0zXSkucmlnaHQ9PT1nP20ucmlnaHQ9ZDptLmxlZnQ9ZDticmVha31kLl9jb2xvcj1pLGcubGVmdD1zKGksdiksZy5fY29sb3I9bixwLT0xfWVsc2V7dmFyIHY7aWYoISh2PWcubGVmdCl8fHYuX2NvbG9yIT09bil7dmFyIG07aWYoZC5sZWZ0PW8ucmlnaHQsZy5fY29sb3I9bixnLnJpZ2h0PW8ubGVmdCxvLl9jb2xvcj1pLG8ucmlnaHQ9ZCxvLmxlZnQ9Zyx1W3AtMl09byx1W3AtMV09ZCxsKGcpLGwoZCksbChvKSxwPj0zKShtPXVbcC0zXSkucmlnaHQ9PT1nP20ucmlnaHQ9bzptLmxlZnQ9bzticmVha31kLl9jb2xvcj1pLGcubGVmdD1zKGksdiksZy5fY29sb3I9bixwLT0xfX1yZXR1cm4gdVswXS5fY29sb3I9aSxuZXcgYyhyLHVbMF0pfSx1LmZvckVhY2g9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMucm9vdClzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbiB0KGUscil7dmFyIG47aWYoci5sZWZ0JiYobj10KGUsci5sZWZ0KSkpcmV0dXJuIG47cmV0dXJuKG49ZShyLmtleSxyLnZhbHVlKSl8fChyLnJpZ2h0P3QoZSxyLnJpZ2h0KTp2b2lkIDApfSh0LHRoaXMucm9vdCk7Y2FzZSAyOnJldHVybiBmdW5jdGlvbiB0KGUscixuLGkpe2lmKHIoZSxpLmtleSk8PTApe3ZhciBhO2lmKGkubGVmdCYmKGE9dChlLHIsbixpLmxlZnQpKSlyZXR1cm4gYTtpZihhPW4oaS5rZXksaS52YWx1ZSkpcmV0dXJuIGF9aWYoaS5yaWdodClyZXR1cm4gdChlLHIsbixpLnJpZ2h0KX0oZSx0aGlzLl9jb21wYXJlLHQsdGhpcy5yb290KTtjYXNlIDM6aWYodGhpcy5fY29tcGFyZShlLHIpPj0wKXJldHVybjtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbixpLGEpe3ZhciBvLHM9bihlLGEua2V5KSxsPW4ocixhLmtleSk7aWYoczw9MCl7aWYoYS5sZWZ0JiYobz10KGUscixuLGksYS5sZWZ0KSkpcmV0dXJuIG87aWYobD4wJiYobz1pKGEua2V5LGEudmFsdWUpKSlyZXR1cm4gb31pZihsPjAmJmEucmlnaHQpcmV0dXJuIHQoZSxyLG4saSxhLnJpZ2h0KX0oZSxyLHRoaXMuX2NvbXBhcmUsdCx0aGlzLnJvb3QpfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsXCJiZWdpblwiLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT10aGlzLnJvb3Q7ZTspdC5wdXNoKGUpLGU9ZS5sZWZ0O3JldHVybiBuZXcgaCh0aGlzLHQpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LFwiZW5kXCIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPXRoaXMucm9vdDtlOyl0LnB1c2goZSksZT1lLnJpZ2h0O3JldHVybiBuZXcgaCh0aGlzLHQpfX0pLHUuYXQ9ZnVuY3Rpb24odCl7aWYodDwwKXJldHVybiBuZXcgaCh0aGlzLFtdKTtmb3IodmFyIGU9dGhpcy5yb290LHI9W107Oyl7aWYoci5wdXNoKGUpLGUubGVmdCl7aWYodDxlLmxlZnQuX2NvdW50KXtlPWUubGVmdDtjb250aW51ZX10LT1lLmxlZnQuX2NvdW50fWlmKCF0KXJldHVybiBuZXcgaCh0aGlzLHIpO2lmKHQtPTEsIWUucmlnaHQpYnJlYWs7aWYodD49ZS5yaWdodC5fY291bnQpYnJlYWs7ZT1lLnJpZ2h0fXJldHVybiBuZXcgaCh0aGlzLFtdKX0sdS5nZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYTw9MCYmKGk9bi5sZW5ndGgpLHI9YTw9MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbi5sZW5ndGg9aSxuZXcgaCh0aGlzLG4pfSx1Lmd0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290LG49W10saT0wO3I7KXt2YXIgYT1lKHQsci5rZXkpO24ucHVzaChyKSxhPDAmJihpPW4ubGVuZ3RoKSxyPWE8MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbi5sZW5ndGg9aSxuZXcgaCh0aGlzLG4pfSx1Lmx0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290LG49W10saT0wO3I7KXt2YXIgYT1lKHQsci5rZXkpO24ucHVzaChyKSxhPjAmJihpPW4ubGVuZ3RoKSxyPWE8PTA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG4ubGVuZ3RoPWksbmV3IGgodGhpcyxuKX0sdS5sZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYT49MCYmKGk9bi5sZW5ndGgpLHI9YTwwP3IubGVmdDpyLnJpZ2h0fXJldHVybiBuLmxlbmd0aD1pLG5ldyBoKHRoaXMsbil9LHUuZmluZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdO3I7KXt2YXIgaT1lKHQsci5rZXkpO2lmKG4ucHVzaChyKSwwPT09aSlyZXR1cm4gbmV3IGgodGhpcyxuKTtyPWk8PTA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG5ldyBoKHRoaXMsW10pfSx1LnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZpbmQodCk7cmV0dXJuIGU/ZS5yZW1vdmUoKTp0aGlzfSx1LmdldD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdDtyOyl7dmFyIG49ZSh0LHIua2V5KTtpZigwPT09bilyZXR1cm4gci52YWx1ZTtyPW48PTA/ci5sZWZ0OnIucmlnaHR9fTt2YXIgZj1oLnByb3RvdHlwZTtmdW5jdGlvbiBwKHQsZSl7dC5rZXk9ZS5rZXksdC52YWx1ZT1lLnZhbHVlLHQubGVmdD1lLmxlZnQsdC5yaWdodD1lLnJpZ2h0LHQuX2NvbG9yPWUuX2NvbG9yLHQuX2NvdW50PWUuX2NvdW50fWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9T2JqZWN0LmRlZmluZVByb3BlcnR5KGYsXCJ2YWxpZFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhY2subGVuZ3RoPjB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsXCJub2RlXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGFjay5sZW5ndGg+MD90aGlzLl9zdGFja1t0aGlzLl9zdGFjay5sZW5ndGgtMV06bnVsbH0sZW51bWVyYWJsZTohMH0pLGYuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGgodGhpcy50cmVlLHRoaXMuX3N0YWNrLnNsaWNlKCkpfSxmLnJlbW92ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N0YWNrO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gdGhpcy50cmVlO3ZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj10W3QubGVuZ3RoLTFdO2VbZS5sZW5ndGgtMV09bmV3IGEoci5fY29sb3Isci5rZXksci52YWx1ZSxyLmxlZnQsci5yaWdodCxyLl9jb3VudCk7Zm9yKHZhciB1PXQubGVuZ3RoLTI7dT49MDstLXUpeyhyPXRbdV0pLmxlZnQ9PT10W3UrMV0/ZVt1XT1uZXcgYShyLl9jb2xvcixyLmtleSxyLnZhbHVlLGVbdSsxXSxyLnJpZ2h0LHIuX2NvdW50KTplW3VdPW5ldyBhKHIuX2NvbG9yLHIua2V5LHIudmFsdWUsci5sZWZ0LGVbdSsxXSxyLl9jb3VudCl9aWYoKHI9ZVtlLmxlbmd0aC0xXSkubGVmdCYmci5yaWdodCl7dmFyIGg9ZS5sZW5ndGg7Zm9yKHI9ci5sZWZ0O3IucmlnaHQ7KWUucHVzaChyKSxyPXIucmlnaHQ7dmFyIGY9ZVtoLTFdO2UucHVzaChuZXcgYShyLl9jb2xvcixmLmtleSxmLnZhbHVlLHIubGVmdCxyLnJpZ2h0LHIuX2NvdW50KSksZVtoLTFdLmtleT1yLmtleSxlW2gtMV0udmFsdWU9ci52YWx1ZTtmb3IodT1lLmxlbmd0aC0yO3U+PWg7LS11KXI9ZVt1XSxlW3VdPW5ldyBhKHIuX2NvbG9yLHIua2V5LHIudmFsdWUsci5sZWZ0LGVbdSsxXSxyLl9jb3VudCk7ZVtoLTFdLmxlZnQ9ZVtoXX1pZigocj1lW2UubGVuZ3RoLTFdKS5fY29sb3I9PT1uKXt2YXIgZD1lW2UubGVuZ3RoLTJdO2QubGVmdD09PXI/ZC5sZWZ0PW51bGw6ZC5yaWdodD09PXImJihkLnJpZ2h0PW51bGwpLGUucG9wKCk7Zm9yKHU9MDt1PGUubGVuZ3RoOysrdSllW3VdLl9jb3VudC0tO3JldHVybiBuZXcgYyh0aGlzLnRyZWUuX2NvbXBhcmUsZVswXSl9aWYoci5sZWZ0fHxyLnJpZ2h0KXtyLmxlZnQ/cChyLHIubGVmdCk6ci5yaWdodCYmcChyLHIucmlnaHQpLHIuX2NvbG9yPWk7Zm9yKHU9MDt1PGUubGVuZ3RoLTE7Kyt1KWVbdV0uX2NvdW50LS07cmV0dXJuIG5ldyBjKHRoaXMudHJlZS5fY29tcGFyZSxlWzBdKX1pZigxPT09ZS5sZW5ndGgpcmV0dXJuIG5ldyBjKHRoaXMudHJlZS5fY29tcGFyZSxudWxsKTtmb3IodT0wO3U8ZS5sZW5ndGg7Kyt1KWVbdV0uX2NvdW50LS07dmFyIGc9ZVtlLmxlbmd0aC0yXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsYSxjLHU9dC5sZW5ndGgtMTt1Pj0wOy0tdSl7aWYoZT10W3VdLDA9PT11KXJldHVybiB2b2lkKGUuX2NvbG9yPWkpO2lmKChyPXRbdS0xXSkubGVmdD09PWUpe2lmKChhPXIucmlnaHQpLnJpZ2h0JiZhLnJpZ2h0Ll9jb2xvcj09PW4pcmV0dXJuIGM9KGE9ci5yaWdodD1vKGEpKS5yaWdodD1vKGEucmlnaHQpLHIucmlnaHQ9YS5sZWZ0LGEubGVmdD1yLGEucmlnaHQ9YyxhLl9jb2xvcj1yLl9jb2xvcixlLl9jb2xvcj1pLHIuX2NvbG9yPWksYy5fY29sb3I9aSxsKHIpLGwoYSksdT4xJiYoKGg9dFt1LTJdKS5sZWZ0PT09cj9oLmxlZnQ9YTpoLnJpZ2h0PWEpLHZvaWQodFt1LTFdPWEpO2lmKGEubGVmdCYmYS5sZWZ0Ll9jb2xvcj09PW4pcmV0dXJuIGM9KGE9ci5yaWdodD1vKGEpKS5sZWZ0PW8oYS5sZWZ0KSxyLnJpZ2h0PWMubGVmdCxhLmxlZnQ9Yy5yaWdodCxjLmxlZnQ9cixjLnJpZ2h0PWEsYy5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9aSxhLl9jb2xvcj1pLGUuX2NvbG9yPWksbChyKSxsKGEpLGwoYyksdT4xJiYoKGg9dFt1LTJdKS5sZWZ0PT09cj9oLmxlZnQ9YzpoLnJpZ2h0PWMpLHZvaWQodFt1LTFdPWMpO2lmKGEuX2NvbG9yPT09aSl7aWYoci5fY29sb3I9PT1uKXJldHVybiByLl9jb2xvcj1pLHZvaWQoci5yaWdodD1zKG4sYSkpO3IucmlnaHQ9cyhuLGEpO2NvbnRpbnVlfWE9byhhKSxyLnJpZ2h0PWEubGVmdCxhLmxlZnQ9cixhLl9jb2xvcj1yLl9jb2xvcixyLl9jb2xvcj1uLGwociksbChhKSx1PjEmJigoaD10W3UtMl0pLmxlZnQ9PT1yP2gubGVmdD1hOmgucmlnaHQ9YSksdFt1LTFdPWEsdFt1XT1yLHUrMTx0Lmxlbmd0aD90W3UrMV09ZTp0LnB1c2goZSksdSs9Mn1lbHNle2lmKChhPXIubGVmdCkubGVmdCYmYS5sZWZ0Ll9jb2xvcj09PW4pcmV0dXJuIGM9KGE9ci5sZWZ0PW8oYSkpLmxlZnQ9byhhLmxlZnQpLHIubGVmdD1hLnJpZ2h0LGEucmlnaHQ9cixhLmxlZnQ9YyxhLl9jb2xvcj1yLl9jb2xvcixlLl9jb2xvcj1pLHIuX2NvbG9yPWksYy5fY29sb3I9aSxsKHIpLGwoYSksdT4xJiYoKGg9dFt1LTJdKS5yaWdodD09PXI/aC5yaWdodD1hOmgubGVmdD1hKSx2b2lkKHRbdS0xXT1hKTtpZihhLnJpZ2h0JiZhLnJpZ2h0Ll9jb2xvcj09PW4pcmV0dXJuIGM9KGE9ci5sZWZ0PW8oYSkpLnJpZ2h0PW8oYS5yaWdodCksci5sZWZ0PWMucmlnaHQsYS5yaWdodD1jLmxlZnQsYy5yaWdodD1yLGMubGVmdD1hLGMuX2NvbG9yPXIuX2NvbG9yLHIuX2NvbG9yPWksYS5fY29sb3I9aSxlLl9jb2xvcj1pLGwociksbChhKSxsKGMpLHU+MSYmKChoPXRbdS0yXSkucmlnaHQ9PT1yP2gucmlnaHQ9YzpoLmxlZnQ9Yyksdm9pZCh0W3UtMV09Yyk7aWYoYS5fY29sb3I9PT1pKXtpZihyLl9jb2xvcj09PW4pcmV0dXJuIHIuX2NvbG9yPWksdm9pZChyLmxlZnQ9cyhuLGEpKTtyLmxlZnQ9cyhuLGEpO2NvbnRpbnVlfXZhciBoO2E9byhhKSxyLmxlZnQ9YS5yaWdodCxhLnJpZ2h0PXIsYS5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9bixsKHIpLGwoYSksdT4xJiYoKGg9dFt1LTJdKS5yaWdodD09PXI/aC5yaWdodD1hOmgubGVmdD1hKSx0W3UtMV09YSx0W3VdPXIsdSsxPHQubGVuZ3RoP3RbdSsxXT1lOnQucHVzaChlKSx1Kz0yfX19KGUpLGcubGVmdD09PXI/Zy5sZWZ0PW51bGw6Zy5yaWdodD1udWxsLG5ldyBjKHRoaXMudHJlZS5fY29tcGFyZSxlWzBdKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsXCJrZXlcIix7Z2V0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RhY2subGVuZ3RoPjApcmV0dXJuIHRoaXMuX3N0YWNrW3RoaXMuX3N0YWNrLmxlbmd0aC0xXS5rZXl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZixcInZhbHVlXCIse2dldDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0YWNrLmxlbmd0aD4wKXJldHVybiB0aGlzLl9zdGFja1t0aGlzLl9zdGFjay5sZW5ndGgtMV0udmFsdWV9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZixcImluZGV4XCIse2dldDpmdW5jdGlvbigpe3ZhciB0PTAsZT10aGlzLl9zdGFjaztpZigwPT09ZS5sZW5ndGgpe3ZhciByPXRoaXMudHJlZS5yb290O3JldHVybiByP3IuX2NvdW50OjB9ZVtlLmxlbmd0aC0xXS5sZWZ0JiYodD1lW2UubGVuZ3RoLTFdLmxlZnQuX2NvdW50KTtmb3IodmFyIG49ZS5sZW5ndGgtMjtuPj0wOy0tbillW24rMV09PT1lW25dLnJpZ2h0JiYoKyt0LGVbbl0ubGVmdCYmKHQrPWVbbl0ubGVmdC5fY291bnQpKTtyZXR1cm4gdH0sZW51bWVyYWJsZTohMH0pLGYubmV4dD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N0YWNrO2lmKDAhPT10Lmxlbmd0aCl7dmFyIGU9dFt0Lmxlbmd0aC0xXTtpZihlLnJpZ2h0KWZvcihlPWUucmlnaHQ7ZTspdC5wdXNoKGUpLGU9ZS5sZWZ0O2Vsc2UgZm9yKHQucG9wKCk7dC5sZW5ndGg+MCYmdFt0Lmxlbmd0aC0xXS5yaWdodD09PWU7KWU9dFt0Lmxlbmd0aC0xXSx0LnBvcCgpfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsXCJoYXNOZXh0XCIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N0YWNrO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4hMTtpZih0W3QubGVuZ3RoLTFdLnJpZ2h0KXJldHVybiEwO2Zvcih2YXIgZT10Lmxlbmd0aC0xO2U+MDstLWUpaWYodFtlLTFdLmxlZnQ9PT10W2VdKXJldHVybiEwO3JldHVybiExfX0pLGYudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3N0YWNrO2lmKDA9PT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCB1cGRhdGUgZW1wdHkgbm9kZSFcIik7dmFyIHI9bmV3IEFycmF5KGUubGVuZ3RoKSxuPWVbZS5sZW5ndGgtMV07cltyLmxlbmd0aC0xXT1uZXcgYShuLl9jb2xvcixuLmtleSx0LG4ubGVmdCxuLnJpZ2h0LG4uX2NvdW50KTtmb3IodmFyIGk9ZS5sZW5ndGgtMjtpPj0wOy0taSkobj1lW2ldKS5sZWZ0PT09ZVtpKzFdP3JbaV09bmV3IGEobi5fY29sb3Isbi5rZXksbi52YWx1ZSxyW2krMV0sbi5yaWdodCxuLl9jb3VudCk6cltpXT1uZXcgYShuLl9jb2xvcixuLmtleSxuLnZhbHVlLG4ubGVmdCxyW2krMV0sbi5fY291bnQpO3JldHVybiBuZXcgYyh0aGlzLnRyZWUuX2NvbXBhcmUsclswXSl9LGYucHJldj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N0YWNrO2lmKDAhPT10Lmxlbmd0aCl7dmFyIGU9dFt0Lmxlbmd0aC0xXTtpZihlLmxlZnQpZm9yKGU9ZS5sZWZ0O2U7KXQucHVzaChlKSxlPWUucmlnaHQ7ZWxzZSBmb3IodC5wb3AoKTt0Lmxlbmd0aD4wJiZ0W3QubGVuZ3RoLTFdLmxlZnQ9PT1lOyllPXRbdC5sZW5ndGgtMV0sdC5wb3AoKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLFwiaGFzUHJldlwiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwPT09dC5sZW5ndGgpcmV0dXJuITE7aWYodFt0Lmxlbmd0aC0xXS5sZWZ0KXJldHVybiEwO2Zvcih2YXIgZT10Lmxlbmd0aC0xO2U+MDstLWUpaWYodFtlLTFdLnJpZ2h0PT09dFtlXSlyZXR1cm4hMDtyZXR1cm4hMX19KX0se31dLDIyODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPVsuOTk5OTk5OTk5OTk5ODA5OSw2NzYuNTIwMzY4MTIxODg1MSwtMTI1OS4xMzkyMTY3MjI0MDI4LDc3MS4zMjM0Mjg3Nzc2NTMxLC0xNzYuNjE1MDI5MTYyMTQwNiwxMi41MDczNDMyNzg2ODY5MDUsLS4xMzg1NzEwOTUyNjU3MjAxMiw5OTg0MzY5NTc4MDE5NTcyZS0yMSwxLjUwNTYzMjczNTE0OTMxMTZlLTddLGk9NjA3LzEyOCxhPVsuOTk5OTk5OTk5OTk5OTk3MSw1Ny4xNTYyMzU2NjU4NjI5MiwtNTkuNTk3OTYwMzU1NDc1NDksMTQuMTM2MDk3OTc0NzQxNzQ2LC0uNDkxOTEzODE2MDk3NjIwMiwzMzk5NDY0OTk4NDgxMTg5ZS0yMCw0NjUyMzYyODkyNzA0ODU4ZS0yMCwtOTgzNzQ0NzUzMDQ4Nzk1NmUtMjAsLjAwMDE1ODA4ODcwMzIyNDkxMjUsLS4wMDAyMTAyNjQ0NDE3MjQxMDQ4OCwuMDAwMjE3NDM5NjE4MTE1MjEyNjUsLS4wMDAxNjQzMTgxMDY1MzY3NjM5LDg0NDE4MjIzOTgzODUyNzVlLTIwLC0yNjE5MDgzODQwMTU4MTQwOGUtMjEsMzY4OTkxODI2NTk1MzE2MjVlLTIyXTtmdW5jdGlvbiBvKHQpe2lmKHQ8MClyZXR1cm4gTnVtYmVyKFwiMC8wXCIpO2Zvcih2YXIgZT1hWzBdLHI9YS5sZW5ndGgtMTtyPjA7LS1yKWUrPWFbcl0vKHQrcik7dmFyIG49dCtpKy41O3JldHVybi41Kk1hdGgubG9nKDIqTWF0aC5QSSkrKHQrLjUpKk1hdGgubG9nKG4pLW4rTWF0aC5sb2coZSktTWF0aC5sb2codCl9ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSl7aWYoZTwuNSlyZXR1cm4gTWF0aC5QSS8oTWF0aC5zaW4oTWF0aC5QSSplKSp0KDEtZSkpO2lmKGU+MTAwKXJldHVybiBNYXRoLmV4cChvKGUpKTtlLT0xO2Zvcih2YXIgcj1uWzBdLGk9MTtpPDk7aSsrKXIrPW5baV0vKGUraSk7dmFyIGE9ZSs3Ky41O3JldHVybiBNYXRoLnNxcnQoMipNYXRoLlBJKSpNYXRoLnBvdyhhLGUrLjUpKk1hdGguZXhwKC1hKSpyfSxlLmV4cG9ydHMubG9nPW99LHt9XSwyMjk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwibXVzdCBzcGVjaWZ5IHR5cGUgc3RyaW5nXCIpO2lmKGU9ZXx8e30sXCJ1bmRlZmluZWRcIj09dHlwZW9mIGRvY3VtZW50JiYhZS5jYW52YXMpcmV0dXJuIG51bGw7dmFyIHI9ZS5jYW52YXN8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XCJudW1iZXJcIj09dHlwZW9mIGUud2lkdGgmJihyLndpZHRoPWUud2lkdGgpO1wibnVtYmVyXCI9PXR5cGVvZiBlLmhlaWdodCYmKHIuaGVpZ2h0PWUuaGVpZ2h0KTt2YXIgbixpPWU7dHJ5e3ZhciBhPVt0XTswPT09dC5pbmRleE9mKFwid2ViZ2xcIikmJmEucHVzaChcImV4cGVyaW1lbnRhbC1cIit0KTtmb3IodmFyIG89MDtvPGEubGVuZ3RoO28rKylpZihuPXIuZ2V0Q29udGV4dChhW29dLGkpKXJldHVybiBufWNhdGNoKHQpe249bnVsbH1yZXR1cm4gbnx8bnVsbH19LHt9XSwyMzA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgdSh0KTtyZXR1cm4gci51cGRhdGUoZSkscn07dmFyIG49dChcIi4vbGliL3RleHQuanNcIiksaT10KFwiLi9saWIvbGluZXMuanNcIiksYT10KFwiLi9saWIvYmFja2dyb3VuZC5qc1wiKSxvPXQoXCIuL2xpYi9jdWJlLmpzXCIpLHM9dChcIi4vbGliL3RpY2tzLmpzXCIpLGw9bmV3IEZsb2F0MzJBcnJheShbMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0pO2Z1bmN0aW9uIGModCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdH1mdW5jdGlvbiB1KHQpe3RoaXMuZ2w9dCx0aGlzLnBpeGVsUmF0aW89MSx0aGlzLmJvdW5kcz1bWy0xMCwtMTAsLTEwXSxbMTAsMTAsMTBdXSx0aGlzLnRpY2tzPVtbXSxbXSxbXV0sdGhpcy5hdXRvVGlja3M9ITAsdGhpcy50aWNrU3BhY2luZz1bMSwxLDFdLHRoaXMudGlja0VuYWJsZT1bITAsITAsITBdLHRoaXMudGlja0ZvbnQ9W1wic2Fucy1zZXJpZlwiLFwic2Fucy1zZXJpZlwiLFwic2Fucy1zZXJpZlwiXSx0aGlzLnRpY2tTaXplPVsxMiwxMiwxMl0sdGhpcy50aWNrQW5nbGU9WzAsMCwwXSx0aGlzLnRpY2tBbGlnbj1bXCJhdXRvXCIsXCJhdXRvXCIsXCJhdXRvXCJdLHRoaXMudGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aWNrUGFkPVsxMCwxMCwxMF0sdGhpcy5sYXN0Q3ViZVByb3BzPXtjdWJlRWRnZXM6WzAsMCwwXSxheGlzOlswLDAsMF19LHRoaXMubGFiZWxzPVtcInhcIixcInlcIixcInpcIl0sdGhpcy5sYWJlbEVuYWJsZT1bITAsITAsITBdLHRoaXMubGFiZWxGb250PVwic2Fucy1zZXJpZlwiLHRoaXMubGFiZWxTaXplPVsyMCwyMCwyMF0sdGhpcy5sYWJlbEFuZ2xlPVswLDAsMF0sdGhpcy5sYWJlbEFsaWduPVtcImF1dG9cIixcImF1dG9cIixcImF1dG9cIl0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5sYWJlbFBhZD1bMTAsMTAsMTBdLHRoaXMubGluZUVuYWJsZT1bITAsITAsITBdLHRoaXMubGluZU1pcnJvcj1bITEsITEsITFdLHRoaXMubGluZVdpZHRoPVsxLDEsMV0sdGhpcy5saW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxpbmVUaWNrRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5saW5lVGlja01pcnJvcj1bITEsITEsITFdLHRoaXMubGluZVRpY2tMZW5ndGg9WzAsMCwwXSx0aGlzLmxpbmVUaWNrV2lkdGg9WzEsMSwxXSx0aGlzLmxpbmVUaWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmdyaWRFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmdyaWRXaWR0aD1bMSwxLDFdLHRoaXMuZ3JpZENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy56ZXJvRW5hYmxlPVshMCwhMCwhMF0sdGhpcy56ZXJvTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy56ZXJvTGluZVdpZHRoPVsyLDIsMl0sdGhpcy5iYWNrZ3JvdW5kRW5hYmxlPVshMSwhMSwhMV0sdGhpcy5iYWNrZ3JvdW5kQ29sb3I9W1suOCwuOCwuOCwuNV0sWy44LC44LC44LC41XSxbLjgsLjgsLjgsLjVdXSx0aGlzLl9maXJzdEluaXQ9ITAsdGhpcy5fdGV4dD1udWxsLHRoaXMuX2xpbmVzPW51bGwsdGhpcy5fYmFja2dyb3VuZD1hKHQpfXZhciBoPXUucHJvdG90eXBlO2Z1bmN0aW9uIGYoKXt0aGlzLnByaW1hbE9mZnNldD1bMCwwLDBdLHRoaXMucHJpbWFsTWlub3I9WzAsMCwwXSx0aGlzLm1pcnJvck9mZnNldD1bMCwwLDBdLHRoaXMubWlycm9yTWlub3I9WzAsMCwwXX1oLnVwZGF0ZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscixuKXtpZihuIGluIHQpe3ZhciBpLGE9dFtuXSxvPXRoaXNbbl07KGU/QXJyYXkuaXNBcnJheShhKSYmQXJyYXkuaXNBcnJheShhWzBdKTpBcnJheS5pc0FycmF5KGEpKT90aGlzW25dPWk9W3IoYVswXSkscihhWzFdKSxyKGFbMl0pXTp0aGlzW25dPWk9W3IoYSkscihhKSxyKGEpXTtmb3IodmFyIHM9MDtzPDM7KytzKWlmKGlbc10hPT1vW3NdKXJldHVybiEwfXJldHVybiExfXQ9dHx8e307dmFyIHIsYT1lLmJpbmQodGhpcywhMSxOdW1iZXIpLG89ZS5iaW5kKHRoaXMsITEsQm9vbGVhbiksbD1lLmJpbmQodGhpcywhMSxTdHJpbmcpLGM9ZS5iaW5kKHRoaXMsITAsZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYoMz09PXQubGVuZ3RoKXJldHVyblsrdFswXSwrdFsxXSwrdFsyXSwxXTtpZig0PT09dC5sZW5ndGgpcmV0dXJuWyt0WzBdLCt0WzFdLCt0WzJdLCt0WzNdXX1yZXR1cm5bMCwwLDAsMV19KSx1PSExLGg9ITE7aWYoXCJib3VuZHNcImluIHQpZm9yKHZhciBmPXQuYm91bmRzLHA9MDtwPDI7KytwKWZvcih2YXIgZD0wO2Q8MzsrK2QpZltwXVtkXSE9PXRoaXMuYm91bmRzW3BdW2RdJiYoaD0hMCksdGhpcy5ib3VuZHNbcF1bZF09ZltwXVtkXTtpZihcInRpY2tzXCJpbiB0KXtyPXQudGlja3MsdT0hMCx0aGlzLmF1dG9UaWNrcz0hMTtmb3IocD0wO3A8MzsrK3ApdGhpcy50aWNrU3BhY2luZ1twXT0wfWVsc2UgYShcInRpY2tTcGFjaW5nXCIpJiYodGhpcy5hdXRvVGlja3M9ITAsaD0hMCk7aWYodGhpcy5fZmlyc3RJbml0JiYoXCJ0aWNrc1wiaW4gdHx8XCJ0aWNrU3BhY2luZ1wiaW4gdHx8KHRoaXMuYXV0b1RpY2tzPSEwKSxoPSEwLHU9ITAsdGhpcy5fZmlyc3RJbml0PSExKSxoJiZ0aGlzLmF1dG9UaWNrcyYmKHI9cy5jcmVhdGUodGhpcy5ib3VuZHMsdGhpcy50aWNrU3BhY2luZyksdT0hMCksdSl7Zm9yKHA9MDtwPDM7KytwKXJbcF0uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LngtZS54fSk7cy5lcXVhbChyLHRoaXMudGlja3MpP3U9ITE6dGhpcy50aWNrcz1yfW8oXCJ0aWNrRW5hYmxlXCIpLGwoXCJ0aWNrRm9udFwiKSYmKHU9ITApLGEoXCJ0aWNrU2l6ZVwiKSxhKFwidGlja0FuZ2xlXCIpLGEoXCJ0aWNrUGFkXCIpLGMoXCJ0aWNrQ29sb3JcIik7dmFyIGc9bChcImxhYmVsc1wiKTtsKFwibGFiZWxGb250XCIpJiYoZz0hMCksbyhcImxhYmVsRW5hYmxlXCIpLGEoXCJsYWJlbFNpemVcIiksYShcImxhYmVsUGFkXCIpLGMoXCJsYWJlbENvbG9yXCIpLG8oXCJsaW5lRW5hYmxlXCIpLG8oXCJsaW5lTWlycm9yXCIpLGEoXCJsaW5lV2lkdGhcIiksYyhcImxpbmVDb2xvclwiKSxvKFwibGluZVRpY2tFbmFibGVcIiksbyhcImxpbmVUaWNrTWlycm9yXCIpLGEoXCJsaW5lVGlja0xlbmd0aFwiKSxhKFwibGluZVRpY2tXaWR0aFwiKSxjKFwibGluZVRpY2tDb2xvclwiKSxvKFwiZ3JpZEVuYWJsZVwiKSxhKFwiZ3JpZFdpZHRoXCIpLGMoXCJncmlkQ29sb3JcIiksbyhcInplcm9FbmFibGVcIiksYyhcInplcm9MaW5lQ29sb3JcIiksYShcInplcm9MaW5lV2lkdGhcIiksbyhcImJhY2tncm91bmRFbmFibGVcIiksYyhcImJhY2tncm91bmRDb2xvclwiKSx0aGlzLl90ZXh0P3RoaXMuX3RleHQmJihnfHx1KSYmdGhpcy5fdGV4dC51cGRhdGUodGhpcy5ib3VuZHMsdGhpcy5sYWJlbHMsdGhpcy5sYWJlbEZvbnQsdGhpcy50aWNrcyx0aGlzLnRpY2tGb250KTp0aGlzLl90ZXh0PW4odGhpcy5nbCx0aGlzLmJvdW5kcyx0aGlzLmxhYmVscyx0aGlzLmxhYmVsRm9udCx0aGlzLnRpY2tzLHRoaXMudGlja0ZvbnQpLHRoaXMuX2xpbmVzJiZ1JiYodGhpcy5fbGluZXMuZGlzcG9zZSgpLHRoaXMuX2xpbmVzPW51bGwpLHRoaXMuX2xpbmVzfHwodGhpcy5fbGluZXM9aSh0aGlzLmdsLHRoaXMuYm91bmRzLHRoaXMudGlja3MpKX07dmFyIHA9W25ldyBmLG5ldyBmLG5ldyBmXTtmdW5jdGlvbiBkKHQsZSxyLG4saSl7Zm9yKHZhciBhPXQucHJpbWFsT2Zmc2V0LG89dC5wcmltYWxNaW5vcixzPXQubWlycm9yT2Zmc2V0LGw9dC5taXJyb3JNaW5vcixjPW5bZV0sdT0wO3U8MzsrK3UpaWYoZSE9PXUpe3ZhciBoPWEsZj1zLHA9byxkPWw7YyYxPDx1JiYoaD1zLGY9YSxwPWwsZD1vKSxoW3VdPXJbMF1bdV0sZlt1XT1yWzFdW3VdLGlbdV0+MD8ocFt1XT0tMSxkW3VdPTApOihwW3VdPTAsZFt1XT0xKX19dmFyIGc9WzAsMCwwXSx2PXttb2RlbDpsLHZpZXc6bCxwcm9qZWN0aW9uOmwsX29ydGhvOiExfTtoLmlzT3BhcXVlPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiExfSxoLmRyYXdUcmFuc3BhcmVudD1mdW5jdGlvbih0KXt9O3ZhciBtPVswLDAsMF0seT1bMCwwLDBdLHg9WzAsMCwwXTtoLmRyYXc9ZnVuY3Rpb24odCl7dD10fHx2O2Zvcih2YXIgZT10aGlzLmdsLHI9dC5tb2RlbHx8bCxuPXQudmlld3x8bCxpPXQucHJvamVjdGlvbnx8bCxhPXRoaXMuYm91bmRzLHM9dC5fb3J0aG98fCExLHU9byhyLG4saSxhLHMpLGg9dS5jdWJlRWRnZXMsZj11LmF4aXMsYj1uWzEyXSxfPW5bMTNdLHc9blsxNF0saz1uWzE1XSxBPShzPzI6MSkqdGhpcy5waXhlbFJhdGlvKihpWzNdKmIraVs3XSpfK2lbMTFdKncraVsxNV0qaykvZS5kcmF3aW5nQnVmZmVySGVpZ2h0LFQ9MDtUPDM7KytUKXRoaXMubGFzdEN1YmVQcm9wcy5jdWJlRWRnZXNbVF09aFtUXSx0aGlzLmxhc3RDdWJlUHJvcHMuYXhpc1tUXT1mW1RdO3ZhciBNPXA7Zm9yKFQ9MDtUPDM7KytUKWQocFtUXSxULHRoaXMuYm91bmRzLGgsZik7ZT10aGlzLmdsO3ZhciBTLEU9Zztmb3IoVD0wO1Q8MzsrK1QpdGhpcy5iYWNrZ3JvdW5kRW5hYmxlW1RdP0VbVF09ZltUXTpFW1RdPTA7dGhpcy5fYmFja2dyb3VuZC5kcmF3KHIsbixpLGEsRSx0aGlzLmJhY2tncm91bmRDb2xvciksdGhpcy5fbGluZXMuYmluZChyLG4saSx0aGlzKTtmb3IoVD0wO1Q8MzsrK1Qpe3ZhciBDPVswLDAsMF07ZltUXT4wP0NbVF09YVsxXVtUXTpDW1RdPWFbMF1bVF07Zm9yKHZhciBMPTA7TDwyOysrTCl7dmFyIHo9KFQrMStMKSUzLE89KFQrMSsoMV5MKSklMzt0aGlzLmdyaWRFbmFibGVbel0mJnRoaXMuX2xpbmVzLmRyYXdHcmlkKHosTyx0aGlzLmJvdW5kcyxDLHRoaXMuZ3JpZENvbG9yW3pdLHRoaXMuZ3JpZFdpZHRoW3pdKnRoaXMucGl4ZWxSYXRpbyl9Zm9yKEw9MDtMPDI7KytMKXt6PShUKzErTCklMyxPPShUKzErKDFeTCkpJTM7dGhpcy56ZXJvRW5hYmxlW09dJiZNYXRoLm1pbihhWzBdW09dLGFbMV1bT10pPD0wJiZNYXRoLm1heChhWzBdW09dLGFbMV1bT10pPj0wJiZ0aGlzLl9saW5lcy5kcmF3WmVybyh6LE8sdGhpcy5ib3VuZHMsQyx0aGlzLnplcm9MaW5lQ29sb3JbT10sdGhpcy56ZXJvTGluZVdpZHRoW09dKnRoaXMucGl4ZWxSYXRpbyl9fWZvcihUPTA7VDwzOysrVCl7dGhpcy5saW5lRW5hYmxlW1RdJiZ0aGlzLl9saW5lcy5kcmF3QXhpc0xpbmUoVCx0aGlzLmJvdW5kcyxNW1RdLnByaW1hbE9mZnNldCx0aGlzLmxpbmVDb2xvcltUXSx0aGlzLmxpbmVXaWR0aFtUXSp0aGlzLnBpeGVsUmF0aW8pLHRoaXMubGluZU1pcnJvcltUXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNMaW5lKFQsdGhpcy5ib3VuZHMsTVtUXS5taXJyb3JPZmZzZXQsdGhpcy5saW5lQ29sb3JbVF0sdGhpcy5saW5lV2lkdGhbVF0qdGhpcy5waXhlbFJhdGlvKTt2YXIgST1jKG0sTVtUXS5wcmltYWxNaW5vciksRD1jKHksTVtUXS5taXJyb3JNaW5vciksUD10aGlzLmxpbmVUaWNrTGVuZ3RoO2ZvcihMPTA7TDwzOysrTCl7dmFyIFI9QS9yWzUqTF07SVtMXSo9UFtMXSpSLERbTF0qPVBbTF0qUn10aGlzLmxpbmVUaWNrRW5hYmxlW1RdJiZ0aGlzLl9saW5lcy5kcmF3QXhpc1RpY2tzKFQsTVtUXS5wcmltYWxPZmZzZXQsSSx0aGlzLmxpbmVUaWNrQ29sb3JbVF0sdGhpcy5saW5lVGlja1dpZHRoW1RdKnRoaXMucGl4ZWxSYXRpbyksdGhpcy5saW5lVGlja01pcnJvcltUXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNUaWNrcyhULE1bVF0ubWlycm9yT2Zmc2V0LEQsdGhpcy5saW5lVGlja0NvbG9yW1RdLHRoaXMubGluZVRpY2tXaWR0aFtUXSp0aGlzLnBpeGVsUmF0aW8pfXRoaXMuX2xpbmVzLnVuYmluZCgpLHRoaXMuX3RleHQuYmluZChyLG4saSx0aGlzLnBpeGVsUmF0aW8pO3ZhciBGLEI7ZnVuY3Rpb24gTih0KXsoQj1bMCwwLDBdKVt0XT0xfWZ1bmN0aW9uIGoodCxlLHIpe3ZhciBuPSh0KzEpJTMsaT0odCsyKSUzLGE9ZVtuXSxvPWVbaV0scz1yW25dLGw9cltpXTthPjAmJmw+MD9OKG4pOmE+MCYmbDwwP04obik6YTwwJiZsPjA/TihuKTphPDAmJmw8MD9OKG4pOm8+MCYmcz4wP04oaSk6bz4wJiZzPDA/TihpKTpvPDAmJnM+MD9OKGkpOm88MCYmczwwJiZOKGkpfWZvcihUPTA7VDwzOysrVCl7dmFyIFY9TVtUXS5wcmltYWxNaW5vcixVPU1bVF0ubWlycm9yTWlub3IscT1jKHgsTVtUXS5wcmltYWxPZmZzZXQpO2ZvcihMPTA7TDwzOysrTCl0aGlzLmxpbmVUaWNrRW5hYmxlW1RdJiYocVtMXSs9QSpWW0xdKk1hdGgubWF4KHRoaXMubGluZVRpY2tMZW5ndGhbTF0sMCkvcls1KkxdKTt2YXIgSD1bMCwwLDBdO2lmKEhbVF09MSx0aGlzLnRpY2tFbmFibGVbVF0pey0zNjAwPT09dGhpcy50aWNrQW5nbGVbVF0/KHRoaXMudGlja0FuZ2xlW1RdPTAsdGhpcy50aWNrQWxpZ25bVF09XCJhdXRvXCIpOnRoaXMudGlja0FsaWduW1RdPS0xLEY9MSxcImF1dG9cIj09PShTPVt0aGlzLnRpY2tBbGlnbltUXSwuNSxGXSlbMF0/U1swXT0wOlNbMF09cGFyc2VJbnQoXCJcIitTWzBdKSxCPVswLDAsMF0saihULFYsVSk7Zm9yKEw9MDtMPDM7KytMKXFbTF0rPUEqVltMXSp0aGlzLnRpY2tQYWRbTF0vcls1KkxdO3RoaXMuX3RleHQuZHJhd1RpY2tzKFQsdGhpcy50aWNrU2l6ZVtUXSx0aGlzLnRpY2tBbmdsZVtUXSxxLHRoaXMudGlja0NvbG9yW1RdLEgsQixTKX1pZih0aGlzLmxhYmVsRW5hYmxlW1RdKXtGPTAsQj1bMCwwLDBdLHRoaXMubGFiZWxzW1RdLmxlbmd0aD40JiYoTihUKSxGPTEpLFwiYXV0b1wiPT09KFM9W3RoaXMubGFiZWxBbGlnbltUXSwuNSxGXSlbMF0/U1swXT0wOlNbMF09cGFyc2VJbnQoXCJcIitTWzBdKTtmb3IoTD0wO0w8MzsrK0wpcVtMXSs9QSpWW0xdKnRoaXMubGFiZWxQYWRbTF0vcls1KkxdO3FbVF0rPS41KihhWzBdW1RdK2FbMV1bVF0pLHRoaXMuX3RleHQuZHJhd0xhYmVsKFQsdGhpcy5sYWJlbFNpemVbVF0sdGhpcy5sYWJlbEFuZ2xlW1RdLHEsdGhpcy5sYWJlbENvbG9yW1RdLFswLDAsMF0sQixTKX19dGhpcy5fdGV4dC51bmJpbmQoKX0saC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fdGV4dC5kaXNwb3NlKCksdGhpcy5fbGluZXMuZGlzcG9zZSgpLHRoaXMuX2JhY2tncm91bmQuZGlzcG9zZSgpLHRoaXMuX2xpbmVzPW51bGwsdGhpcy5fdGV4dD1udWxsLHRoaXMuX2JhY2tncm91bmQ9bnVsbCx0aGlzLmdsPW51bGx9fSx7XCIuL2xpYi9iYWNrZ3JvdW5kLmpzXCI6MjMxLFwiLi9saWIvY3ViZS5qc1wiOjIzMixcIi4vbGliL2xpbmVzLmpzXCI6MjMzLFwiLi9saWIvdGV4dC5qc1wiOjIzNSxcIi4vbGliL3RpY2tzLmpzXCI6MjM2fV0sMjMxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPVtdLHM9MCxsPTA7bDwzOysrbClmb3IodmFyIGM9KGwrMSklMyx1PShsKzIpJTMsaD1bMCwwLDBdLGY9WzAsMCwwXSxwPS0xO3A8PTE7cCs9Mil7ci5wdXNoKHMscysyLHMrMSxzKzEscysyLHMrMyksaFtsXT1wLGZbbF09cDtmb3IodmFyIGQ9LTE7ZDw9MTtkKz0yKXtoW2NdPWQ7Zm9yKHZhciBnPS0xO2c8PTE7Zys9MiloW3VdPWcsZS5wdXNoKGhbMF0saFsxXSxoWzJdLGZbMF0sZlsxXSxmWzJdKSxzKz0xfXZhciB2PWM7Yz11LHU9dn12YXIgbT1uKHQsbmV3IEZsb2F0MzJBcnJheShlKSkseT1uKHQsbmV3IFVpbnQxNkFycmF5KHIpLHQuRUxFTUVOVF9BUlJBWV9CVUZGRVIpLHg9aSh0LFt7YnVmZmVyOm0sdHlwZTp0LkZMT0FULHNpemU6MyxvZmZzZXQ6MCxzdHJpZGU6MjR9LHtidWZmZXI6bSx0eXBlOnQuRkxPQVQsc2l6ZTozLG9mZnNldDoxMixzdHJpZGU6MjR9XSx5KSxiPWEodCk7cmV0dXJuIGIuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGIuYXR0cmlidXRlcy5ub3JtYWwubG9jYXRpb249MSxuZXcgbyh0LG0seCxiKX07dmFyIG49dChcImdsLWJ1ZmZlclwiKSxpPXQoXCJnbC12YW9cIiksYT10KFwiLi9zaGFkZXJzXCIpLmJnO2Z1bmN0aW9uIG8odCxlLHIsbil7dGhpcy5nbD10LHRoaXMuYnVmZmVyPWUsdGhpcy52YW89cix0aGlzLnNoYWRlcj1ufXZhciBzPW8ucHJvdG90eXBlO3MuZHJhdz1mdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvPSExLHM9MDtzPDM7KytzKW89b3x8aVtzXTtpZihvKXt2YXIgbD10aGlzLmdsO2wuZW5hYmxlKGwuUE9MWUdPTl9PRkZTRVRfRklMTCksbC5wb2x5Z29uT2Zmc2V0KDEsMiksdGhpcy5zaGFkZXIuYmluZCgpLHRoaXMuc2hhZGVyLnVuaWZvcm1zPXttb2RlbDp0LHZpZXc6ZSxwcm9qZWN0aW9uOnIsYm91bmRzOm4sZW5hYmxlOmksY29sb3JzOmF9LHRoaXMudmFvLmJpbmQoKSx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLDM2KSx0aGlzLnZhby51bmJpbmQoKSxsLmRpc2FibGUobC5QT0xZR09OX09GRlNFVF9GSUxMKX19LHMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlci5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0se1wiLi9zaGFkZXJzXCI6MjM0LFwiZ2wtYnVmZmVyXCI6MjM4LFwiZ2wtdmFvXCI6MzIwfV0sMjMyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEscCl7aShzLGUsdCksaShzLHIscyk7Zm9yKHZhciB5PTAseD0wO3g8MjsrK3gpe3VbMl09YVt4XVsyXTtmb3IodmFyIGI9MDtiPDI7KytiKXt1WzFdPWFbYl1bMV07Zm9yKHZhciBfPTA7XzwyOysrXyl1WzBdPWFbX11bMF0sZihsW3ldLHUscykseSs9MX19Zm9yKHZhciB3PS0xLHg9MDt4PDg7Kyt4KXtmb3IodmFyIGs9bFt4XVszXSxBPTA7QTwzOysrQSljW3hdW0FdPWxbeF1bQV0vaztwJiYoY1t4XVsyXSo9LTEpLGs8MCYmKHc8MD93PXg6Y1t4XVsyXTxjW3ddWzJdJiYodz14KSl9aWYodzwwKXt3PTA7Zm9yKHZhciBUPTA7VDwzOysrVCl7Zm9yKHZhciBNPShUKzIpJTMsUz0oVCsxKSUzLEU9LTEsQz0tMSxMPTA7TDwyOysrTCl7dmFyIHo9TDw8VCxPPXorKEw8PE0pKygxLUw8PFMpLEk9eisoMS1MPDxNKSsoTDw8Uyk7byhjW3pdLGNbT10sY1tJXSxoKTwwfHwoTD9FPTE6Qz0xKX1pZihFPDB8fEM8MClDPkUmJih3fD0xPDxUKTtlbHNle2Zvcih2YXIgTD0wO0w8MjsrK0wpe3ZhciB6PUw8PFQsTz16KyhMPDxNKSsoMS1MPDxTKSxJPXorKDEtTDw8TSkrKEw8PFMpLEQ9ZChbbFt6XSxsW09dLGxbSV0sbFt6KygxPDxNKSsoMTw8UyldXSk7TD9FPUQ6Qz1EfUM+RSYmKHd8PTE8PFQpfX19Zm9yKHZhciBQPTdedyxSPS0xLHg9MDt4PDg7Kyt4KXghPT13JiZ4IT09UCYmKFI8MD9SPXg6Y1tSXVsxXT5jW3hdWzFdJiYoUj14KSk7Zm9yKHZhciBGPS0xLHg9MDt4PDM7Kyt4KXt2YXIgQj1SXjE8PHg7aWYoQiE9PXcmJkIhPT1QKXtGPDAmJihGPUIpO3ZhciBTPWNbQl07U1swXTxjW0ZdWzBdJiYoRj1CKX19Zm9yKHZhciBOPS0xLHg9MDt4PDM7Kyt4KXt2YXIgQj1SXjE8PHg7aWYoQiE9PXcmJkIhPT1QJiZCIT09Ril7TjwwJiYoTj1CKTt2YXIgUz1jW0JdO1NbMF0+Y1tOXVswXSYmKE49Qil9fXZhciBqPWc7alswXT1qWzFdPWpbMl09MCxqW24ubG9nMihGXlIpXT1SJkYsaltuLmxvZzIoUl5OKV09UiZOO3ZhciBWPTdeTjtWPT09d3x8Vj09PVA/KFY9N15GLGpbbi5sb2cyKE5eVildPVYmTik6altuLmxvZzIoRl5WKV09ViZGO2Zvcih2YXIgVT12LHE9dyxUPTA7VDwzOysrVClVW1RdPXEmMTw8VD8tMToxO3JldHVybiBtfTt2YXIgbj10KFwiYml0LXR3aWRkbGVcIiksaT10KFwiZ2wtbWF0NC9tdWx0aXBseVwiKSxhPXQoXCJzcGxpdC1wb2x5Z29uXCIpLG89dChcInJvYnVzdC1vcmllbnRhdGlvblwiKSxzPW5ldyBBcnJheSgxNiksbD1uZXcgQXJyYXkoOCksYz1uZXcgQXJyYXkoOCksdT1uZXcgQXJyYXkoMyksaD1bMCwwLDBdO2Z1bmN0aW9uIGYodCxlLHIpe2Zvcih2YXIgbj0wO248NDsrK24pe3Rbbl09clsxMituXTtmb3IodmFyIGk9MDtpPDM7KytpKXRbbl0rPWVbaV0qcls0Kmkrbl19fSFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8ODsrK3QpbFt0XT1bMSwxLDEsMV0sY1t0XT1bMSwxLDFdfSgpO3ZhciBwPVtbMCwwLDEsMCwwXSxbMCwwLC0xLDEsMF0sWzAsLTEsMCwxLDBdLFswLDEsMCwxLDBdLFstMSwwLDAsMSwwXSxbMSwwLDAsMSwwXV07ZnVuY3Rpb24gZCh0KXtmb3IodmFyIGU9MDtlPHAubGVuZ3RoOysrZSlpZigodD1hLnBvc2l0aXZlKHQscFtlXSkpLmxlbmd0aDwzKXJldHVybiAwO3ZhciByPXRbMF0sbj1yWzBdL3JbM10saT1yWzFdL3JbM10sbz0wO2ZvcihlPTE7ZSsxPHQubGVuZ3RoOysrZSl7dmFyIHM9dFtlXSxsPXRbZSsxXSxjPXNbMF0vc1szXS1uLHU9c1sxXS9zWzNdLWksaD1sWzBdL2xbM10tbixmPWxbMV0vbFszXS1pO28rPU1hdGguYWJzKGMqZi11KmgpfXJldHVybiBvfXZhciBnPVsxLDEsMV0sdj1bMCwwLDBdLG09e2N1YmVFZGdlczpnLGF4aXM6dn19LHtcImJpdC10d2lkZGxlXCI6ODMsXCJnbC1tYXQ0L211bHRpcGx5XCI6MjY0LFwicm9idXN0LW9yaWVudGF0aW9uXCI6NDk1LFwic3BsaXQtcG9seWdvblwiOjUxMn1dLDIzMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG89W10scz1bMCwwLDBdLGw9WzAsMCwwXSxjPVswLDAsMF0sdT1bMCwwLDBdO28ucHVzaCgwLDAsMSwwLDEsMSwwLDAsLTEsMCwwLC0xLDAsMSwxLDAsMSwtMSk7Zm9yKHZhciBoPTA7aDwzOysraCl7Zm9yKHZhciBmPW8ubGVuZ3RoLzN8MCxkPTA7ZDxyW2hdLmxlbmd0aDsrK2Qpe3ZhciBnPStyW2hdW2RdLng7by5wdXNoKGcsMCwxLGcsMSwxLGcsMCwtMSxnLDAsLTEsZywxLDEsZywxLC0xKX12YXIgdj1vLmxlbmd0aC8zfDA7c1toXT1mLGxbaF09di1mO2Zvcih2YXIgZj1vLmxlbmd0aC8zfDAsbT0wO208cltoXS5sZW5ndGg7KyttKXt2YXIgZz0rcltoXVttXS54O28ucHVzaChnLDAsMSxnLDEsMSxnLDAsLTEsZywwLC0xLGcsMSwxLGcsMSwtMSl9dmFyIHY9by5sZW5ndGgvM3wwO2NbaF09Zix1W2hdPXYtZn12YXIgeT1uKHQsbmV3IEZsb2F0MzJBcnJheShvKSkseD1pKHQsW3tidWZmZXI6eSx0eXBlOnQuRkxPQVQsc2l6ZTozLHN0cmlkZTowLG9mZnNldDowfV0pLGI9YSh0KTtyZXR1cm4gYi5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsbmV3IHAodCx5LHgsYixsLHMsdSxjKX07dmFyIG49dChcImdsLWJ1ZmZlclwiKSxpPXQoXCJnbC12YW9cIiksYT10KFwiLi9zaGFkZXJzXCIpLmxpbmUsbz1bMCwwLDBdLHM9WzAsMCwwXSxsPVswLDAsMF0sYz1bMCwwLDBdLHU9WzEsMV07ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdFswXT10WzFdPXRbMl09MCx0fWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdH1mdW5jdGlvbiBwKHQsZSxyLG4saSxhLG8scyl7dGhpcy5nbD10LHRoaXMudmVydEJ1ZmZlcj1lLHRoaXMudmFvPXIsdGhpcy5zaGFkZXI9bix0aGlzLnRpY2tDb3VudD1pLHRoaXMudGlja09mZnNldD1hLHRoaXMuZ3JpZENvdW50PW8sdGhpcy5ncmlkT2Zmc2V0PXN9dmFyIGQ9cC5wcm90b3R5cGU7ZC5iaW5kPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnNoYWRlci5iaW5kKCksdGhpcy5zaGFkZXIudW5pZm9ybXMubW9kZWw9dCx0aGlzLnNoYWRlci51bmlmb3Jtcy52aWV3PWUsdGhpcy5zaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbj1yLHVbMF09dGhpcy5nbC5kcmF3aW5nQnVmZmVyV2lkdGgsdVsxXT10aGlzLmdsLmRyYXdpbmdCdWZmZXJIZWlnaHQsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuU2hhcGU9dSx0aGlzLnZhby5iaW5kKCl9LGQudW5iaW5kPWZ1bmN0aW9uKCl7dGhpcy52YW8udW5iaW5kKCl9LGQuZHJhd0F4aXNMaW5lPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9aChzKTt0aGlzLnNoYWRlci51bmlmb3Jtcy5tYWpvckF4aXM9cyxhW3RdPWVbMV1bdF0tZVswXVt0XSx0aGlzLnNoYWRlci51bmlmb3Jtcy5taW5vckF4aXM9YTt2YXIgbyx1PWYoYyxyKTt1W3RdKz1lWzBdW3RdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD11LHRoaXMuc2hhZGVyLnVuaWZvcm1zLmxpbmVXaWR0aD1pLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPW4sKG89aChsKSlbKHQrMiklM109MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5BeGlzPW8sdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyw2KSwobz1oKGwpKVsodCsxKSUzXT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlbkF4aXM9byx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLDYpfSxkLmRyYXdBeGlzVGlja3M9ZnVuY3Rpb24odCxlLHIsbixpKXtpZih0aGlzLnRpY2tDb3VudFt0XSl7dmFyIGE9aChvKTthW3RdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMubWFqb3JBeGlzPWEsdGhpcy5zaGFkZXIudW5pZm9ybXMub2Zmc2V0PWUsdGhpcy5zaGFkZXIudW5pZm9ybXMubWlub3JBeGlzPXIsdGhpcy5zaGFkZXIudW5pZm9ybXMuY29sb3I9bix0aGlzLnNoYWRlci51bmlmb3Jtcy5saW5lV2lkdGg9aTt2YXIgcz1oKGwpO3NbdF09MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5BeGlzPXMsdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyx0aGlzLnRpY2tDb3VudFt0XSx0aGlzLnRpY2tPZmZzZXRbdF0pfX0sZC5kcmF3R3JpZD1mdW5jdGlvbih0LGUscixuLGksYSl7aWYodGhpcy5ncmlkQ291bnRbdF0pe3ZhciB1PWgocyk7dVtlXT1yWzFdW2VdLXJbMF1bZV0sdGhpcy5zaGFkZXIudW5pZm9ybXMubWlub3JBeGlzPXU7dmFyIHA9ZihjLG4pO3BbZV0rPXJbMF1bZV0sdGhpcy5zaGFkZXIudW5pZm9ybXMub2Zmc2V0PXA7dmFyIGQ9aChvKTtkW3RdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMubWFqb3JBeGlzPWQ7dmFyIGc9aChsKTtnW3RdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1nLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmxpbmVXaWR0aD1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPWksdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyx0aGlzLmdyaWRDb3VudFt0XSx0aGlzLmdyaWRPZmZzZXRbdF0pfX0sZC5kcmF3WmVybz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89aChzKTt0aGlzLnNoYWRlci51bmlmb3Jtcy5tYWpvckF4aXM9byxvW3RdPXJbMV1bdF0tclswXVt0XSx0aGlzLnNoYWRlci51bmlmb3Jtcy5taW5vckF4aXM9bzt2YXIgdT1mKGMsbik7dVt0XSs9clswXVt0XSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9dTt2YXIgcD1oKGwpO3BbZV09MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5BeGlzPXAsdGhpcy5zaGFkZXIudW5pZm9ybXMubGluZVdpZHRoPWEsdGhpcy5zaGFkZXIudW5pZm9ybXMuY29sb3I9aSx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLDYpfSxkLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZhby5kaXNwb3NlKCksdGhpcy52ZXJ0QnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7XCIuL3NoYWRlcnNcIjoyMzQsXCJnbC1idWZmZXJcIjoyMzgsXCJnbC12YW9cIjozMjB9XSwyMzQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2xzbGlmeVwiKSxpPXQoXCJnbC1zaGFkZXJcIiksYT1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xcblxcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcXG51bmlmb3JtIHZlYzMgb2Zmc2V0LCBtYWpvckF4aXMsIG1pbm9yQXhpcywgc2NyZWVuQXhpcztcXG51bmlmb3JtIGZsb2F0IGxpbmVXaWR0aDtcXG51bmlmb3JtIHZlYzIgc2NyZWVuU2hhcGU7XFxuXFxudmVjMyBwcm9qZWN0KHZlYzMgcCkge1xcbiAgdmVjNCBwcCA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHAsIDEuMCk7XFxuICByZXR1cm4gcHAueHl6IC8gbWF4KHBwLncsIDAuMDAwMSk7XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzMgbWFqb3IgPSBwb3NpdGlvbi54ICogbWFqb3JBeGlzO1xcbiAgdmVjMyBtaW5vciA9IHBvc2l0aW9uLnkgKiBtaW5vckF4aXM7XFxuXFxuICB2ZWMzIHZQb3NpdGlvbiA9IG1ham9yICsgbWlub3IgKyBvZmZzZXQ7XFxuICB2ZWMzIHBQb3NpdGlvbiA9IHByb2plY3QodlBvc2l0aW9uKTtcXG4gIHZlYzMgb2Zmc2V0ID0gcHJvamVjdCh2UG9zaXRpb24gKyBzY3JlZW5BeGlzICogcG9zaXRpb24ueik7XFxuXFxuICB2ZWMyIHNjcmVlbiA9IG5vcm1hbGl6ZSgob2Zmc2V0IC0gcFBvc2l0aW9uKS54eSAqIHNjcmVlblNoYXBlKSAvIHNjcmVlblNoYXBlO1xcblxcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBQb3NpdGlvbiArIHZlYzMoMC41ICogc2NyZWVuICogbGluZVdpZHRoLCAwKSwgMS4wKTtcXG59XFxuXCJdKSxvPW4oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxudW5pZm9ybSB2ZWM0IGNvbG9yO1xcbnZvaWQgbWFpbigpIHtcXG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cIl0pO3IubGluZT1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZTpcInBvc2l0aW9uXCIsdHlwZTpcInZlYzNcIn1dKX07dmFyIHM9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcXG5cXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XFxudW5pZm9ybSB2ZWMzIG9mZnNldCwgYXhpcywgYWxpZ25EaXIsIGFsaWduT3B0O1xcbnVuaWZvcm0gZmxvYXQgc2NhbGUsIGFuZ2xlLCBwaXhlbFNjYWxlO1xcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xcblxcbnZlYzMgcHJvamVjdCh2ZWMzIHApIHtcXG4gIHZlYzQgcHAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwLCAxLjApO1xcbiAgcmV0dXJuIHBwLnh5eiAvIG1heChwcC53LCAwLjAwMDEpO1xcbn1cXG5cXG5mbG9hdCBjb21wdXRlVmlld0FuZ2xlKHZlYzMgYSwgdmVjMyBiKSB7XFxuICB2ZWMzIEEgPSBwcm9qZWN0KGEpO1xcbiAgdmVjMyBCID0gcHJvamVjdChiKTtcXG5cXG4gIHJldHVybiBhdGFuKFxcbiAgICAoQi55IC0gQS55KSAqIHJlc29sdXRpb24ueSxcXG4gICAgKEIueCAtIEEueCkgKiByZXNvbHV0aW9uLnhcXG4gICk7XFxufVxcblxcbmNvbnN0IGZsb2F0IFBJID0gMy4xNDE1OTI7XFxuY29uc3QgZmxvYXQgVFdPX1BJID0gMi4wICogUEk7XFxuY29uc3QgZmxvYXQgSEFMRl9QSSA9IDAuNSAqIFBJO1xcbmNvbnN0IGZsb2F0IE9ORV9BTkRfSEFMRl9QSSA9IDEuNSAqIFBJO1xcblxcbmludCBvcHRpb24gPSBpbnQoZmxvb3IoYWxpZ25PcHQueCArIDAuMDAxKSk7XFxuZmxvYXQgaHZfcmF0aW8gPSAgICAgICBhbGlnbk9wdC55O1xcbmJvb2wgZW5hYmxlQWxpZ24gPSAgICAoYWxpZ25PcHQueiAhPSAwLjApO1xcblxcbmZsb2F0IG1vZF9hbmdsZShmbG9hdCBhKSB7XFxuICByZXR1cm4gbW9kKGEsIFBJKTtcXG59XFxuXFxuZmxvYXQgcG9zaXRpdmVfYW5nbGUoZmxvYXQgYSkge1xcbiAgcmV0dXJuIG1vZF9hbmdsZSgoYSA8IDAuMCkgP1xcbiAgICBhICsgVFdPX1BJIDpcXG4gICAgYVxcbiAgKTtcXG59XFxuXFxuZmxvYXQgbG9va191cHdhcmRzKGZsb2F0IGEpIHtcXG4gIGZsb2F0IGIgPSBwb3NpdGl2ZV9hbmdsZShhKTtcXG4gIHJldHVybiAoKGIgPiBIQUxGX1BJKSAmJiAoYiA8PSBPTkVfQU5EX0hBTEZfUEkpKSA/XFxuICAgIGIgLSBQSSA6XFxuICAgIGI7XFxufVxcblxcbmZsb2F0IGxvb2tfaG9yaXpvbnRhbF9vcl92ZXJ0aWNhbChmbG9hdCBhLCBmbG9hdCByYXRpbykge1xcbiAgLy8gcmF0aW8gY29udHJvbHMgdGhlIHJhdGlvIGJldHdlZW4gYmVpbmcgaG9yaXpvbnRhbCB0byAodmVydGljYWwgKyBob3Jpem9udGFsKVxcbiAgLy8gaWYgcmF0aW8gaXMgc2V0IHRvIDAuNSB0aGVuIGl0IGlzIDUwJSwgNTAlLlxcbiAgLy8gd2hlbiB1c2luZyBhIGhpZ2hlciByYXRpbyBlLmcuIDAuNzUgdGhlIHJlc3VsdCB3b3VsZFxcbiAgLy8gbGlrZWx5IGJlIG1vcmUgaG9yaXpvbnRhbCB0aGFuIHZlcnRpY2FsLlxcblxcbiAgZmxvYXQgYiA9IHBvc2l0aXZlX2FuZ2xlKGEpO1xcblxcbiAgcmV0dXJuXFxuICAgIChiIDwgKCAgICAgIHJhdGlvKSAqIEhBTEZfUEkpID8gMC4wIDpcXG4gICAgKGIgPCAoMi4wIC0gcmF0aW8pICogSEFMRl9QSSkgPyAtSEFMRl9QSSA6XFxuICAgIChiIDwgKDIuMCArIHJhdGlvKSAqIEhBTEZfUEkpID8gMC4wIDpcXG4gICAgKGIgPCAoNC4wIC0gcmF0aW8pICogSEFMRl9QSSkgPyBIQUxGX1BJIDpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjA7XFxufVxcblxcbmZsb2F0IHJvdW5kVG8oZmxvYXQgYSwgZmxvYXQgYikge1xcbiAgcmV0dXJuIGZsb2F0KGIgKiBmbG9vcigoYSArIDAuNSAqIGIpIC8gYikpO1xcbn1cXG5cXG5mbG9hdCBsb29rX3JvdW5kX25fZGlyZWN0aW9ucyhmbG9hdCBhLCBpbnQgbikge1xcbiAgZmxvYXQgYiA9IHBvc2l0aXZlX2FuZ2xlKGEpO1xcbiAgZmxvYXQgZGl2ID0gVFdPX1BJIC8gZmxvYXQobik7XFxuICBmbG9hdCBjID0gcm91bmRUbyhiLCBkaXYpO1xcbiAgcmV0dXJuIGxvb2tfdXB3YXJkcyhjKTtcXG59XFxuXFxuZmxvYXQgYXBwbHlBbGlnbk9wdGlvbihmbG9hdCByYXdBbmdsZSwgZmxvYXQgZGVsdGEpIHtcXG4gIHJldHVyblxcbiAgICAob3B0aW9uID4gIDIpID8gbG9va19yb3VuZF9uX2RpcmVjdGlvbnMocmF3QW5nbGUgKyBkZWx0YSwgb3B0aW9uKSA6ICAgICAgIC8vIG9wdGlvbiAzLW46IHJvdW5kIHRvIG4gZGlyZWN0aW9uc1xcbiAgICAob3B0aW9uID09IDIpID8gbG9va19ob3Jpem9udGFsX29yX3ZlcnRpY2FsKHJhd0FuZ2xlICsgZGVsdGEsIGh2X3JhdGlvKSA6IC8vIGhvcml6b250YWwgb3IgdmVydGljYWxcXG4gICAgKG9wdGlvbiA9PSAxKSA/IHJhd0FuZ2xlICsgZGVsdGEgOiAgICAgICAvLyB1c2UgZnJlZSBhbmdsZSwgYW5kIGZsaXAgdG8gYWxpZ24gd2l0aCBvbmUgZGlyZWN0aW9uIG9mIHRoZSBheGlzXFxuICAgIChvcHRpb24gPT0gMCkgPyBsb29rX3Vwd2FyZHMocmF3QW5nbGUpIDogLy8gdXNlIGZyZWUgYW5nbGUsIGFuZCBzdGF5IHVwd2FyZHNcXG4gICAgKG9wdGlvbiA9PS0xKSA/IDAuMCA6ICAgICAgICAgICAgICAgICAgICAvLyB1c2VmdWwgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGFsbCB0ZXh0cyByZW1haW5zIGhvcml6b250YWxcXG4gICAgICAgICAgICAgICAgICAgIHJhd0FuZ2xlOyAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgcmV0dXJuIGJhY2sgcmF3IGlucHV0IGFuZ2xlXFxufVxcblxcbmJvb2wgaXNBeGlzVGl0bGUgPSAoYXhpcy54ID09IDAuMCkgJiZcXG4gICAgICAgICAgICAgICAgICAgKGF4aXMueSA9PSAwLjApICYmXFxuICAgICAgICAgICAgICAgICAgIChheGlzLnogPT0gMC4wKTtcXG5cXG52b2lkIG1haW4oKSB7XFxuICAvL0NvbXB1dGUgd29ybGQgb2Zmc2V0XFxuICBmbG9hdCBheGlzRGlzdGFuY2UgPSBwb3NpdGlvbi56O1xcbiAgdmVjMyBkYXRhUG9zaXRpb24gPSBheGlzRGlzdGFuY2UgKiBheGlzICsgb2Zmc2V0O1xcblxcbiAgZmxvYXQgYmV0YSA9IGFuZ2xlOyAvLyBpLmUuIHVzZXIgZGVmaW5lZCBhdHRyaWJ1dGVzIGZvciBlYWNoIHRpY2tcXG5cXG4gIGZsb2F0IGF4aXNBbmdsZTtcXG4gIGZsb2F0IGNsaXBBbmdsZTtcXG4gIGZsb2F0IGZsaXA7XFxuXFxuICBpZiAoZW5hYmxlQWxpZ24pIHtcXG4gICAgYXhpc0FuZ2xlID0gKGlzQXhpc1RpdGxlKSA/IEhBTEZfUEkgOlxcbiAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlVmlld0FuZ2xlKGRhdGFQb3NpdGlvbiwgZGF0YVBvc2l0aW9uICsgYXhpcyk7XFxuICAgIGNsaXBBbmdsZSA9IGNvbXB1dGVWaWV3QW5nbGUoZGF0YVBvc2l0aW9uLCBkYXRhUG9zaXRpb24gKyBhbGlnbkRpcik7XFxuXFxuICAgIGF4aXNBbmdsZSArPSAoc2luKGF4aXNBbmdsZSkgPCAwLjApID8gUEkgOiAwLjA7XFxuICAgIGNsaXBBbmdsZSArPSAoc2luKGNsaXBBbmdsZSkgPCAwLjApID8gUEkgOiAwLjA7XFxuXFxuICAgIGZsaXAgPSAoZG90KHZlYzIoY29zKGF4aXNBbmdsZSksIHNpbihheGlzQW5nbGUpKSxcXG4gICAgICAgICAgICAgICAgdmVjMihzaW4oY2xpcEFuZ2xlKSwtY29zKGNsaXBBbmdsZSkpKSA+IDAuMCkgPyAxLjAgOiAwLjA7XFxuXFxuICAgIGJldGEgKz0gYXBwbHlBbGlnbk9wdGlvbihjbGlwQW5nbGUsIGZsaXAgKiBQSSk7XFxuICB9XFxuXFxuICAvL0NvbXB1dGUgcGxhbmUgb2Zmc2V0XFxuICB2ZWMyIHBsYW5lQ29vcmQgPSBwb3NpdGlvbi54eSAqIHBpeGVsU2NhbGU7XFxuXFxuICBtYXQyIHBsYW5lWGZvcm0gPSBzY2FsZSAqIG1hdDIoXFxuICAgICBjb3MoYmV0YSksIHNpbihiZXRhKSxcXG4gICAgLXNpbihiZXRhKSwgY29zKGJldGEpXFxuICApO1xcblxcbiAgdmVjMiB2aWV3T2Zmc2V0ID0gMi4wICogcGxhbmVYZm9ybSAqIHBsYW5lQ29vcmQgLyByZXNvbHV0aW9uO1xcblxcbiAgLy9Db21wdXRlIGNsaXAgcG9zaXRpb25cXG4gIHZlYzMgY2xpcFBvc2l0aW9uID0gcHJvamVjdChkYXRhUG9zaXRpb24pO1xcblxcbiAgLy9BcHBseSB0ZXh0IG9mZnNldCBpbiBjbGlwIGNvb3JkaW5hdGVzXFxuICBjbGlwUG9zaXRpb24gKz0gdmVjMyh2aWV3T2Zmc2V0LCAwLjApO1xcblxcbiAgLy9Eb25lXFxuICBnbF9Qb3NpdGlvbiA9IHZlYzQoY2xpcFBvc2l0aW9uLCAxLjApO1xcbn1cIl0pLGw9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG51bmlmb3JtIHZlYzQgY29sb3I7XFxudm9pZCBtYWluKCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVwiXSk7ci50ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBpKHQscyxsLG51bGwsW3tuYW1lOlwicG9zaXRpb25cIix0eXBlOlwidmVjM1wifV0pfTt2YXIgYz1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDtcXG5cXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XFxudW5pZm9ybSB2ZWMzIGVuYWJsZTtcXG51bmlmb3JtIHZlYzMgYm91bmRzWzJdO1xcblxcbnZhcnlpbmcgdmVjMyBjb2xvckNoYW5uZWw7XFxuXFxudm9pZCBtYWluKCkge1xcblxcbiAgdmVjMyBzaWduQXhpcyA9IHNpZ24oYm91bmRzWzFdIC0gYm91bmRzWzBdKTtcXG5cXG4gIHZlYzMgcmVhbE5vcm1hbCA9IHNpZ25BeGlzICogbm9ybWFsO1xcblxcbiAgaWYoZG90KHJlYWxOb3JtYWwsIGVuYWJsZSkgPiAwLjApIHtcXG4gICAgdmVjMyBtaW5SYW5nZSA9IG1pbihib3VuZHNbMF0sIGJvdW5kc1sxXSk7XFxuICAgIHZlYzMgbWF4UmFuZ2UgPSBtYXgoYm91bmRzWzBdLCBib3VuZHNbMV0pO1xcbiAgICB2ZWMzIG5Qb3NpdGlvbiA9IG1peChtaW5SYW5nZSwgbWF4UmFuZ2UsIDAuNSAqIChwb3NpdGlvbiArIDEuMCkpO1xcbiAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KG5Qb3NpdGlvbiwgMS4wKTtcXG4gIH0gZWxzZSB7XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLDAsMCwwKTtcXG4gIH1cXG5cXG4gIGNvbG9yQ2hhbm5lbCA9IGFicyhyZWFsTm9ybWFsKTtcXG59XCJdKSx1PW4oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxudW5pZm9ybSB2ZWM0IGNvbG9yc1szXTtcXG5cXG52YXJ5aW5nIHZlYzMgY29sb3JDaGFubmVsO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yQ2hhbm5lbC54ICogY29sb3JzWzBdICtcXG4gICAgICAgICAgICAgICAgIGNvbG9yQ2hhbm5lbC55ICogY29sb3JzWzFdICtcXG4gICAgICAgICAgICAgICAgIGNvbG9yQ2hhbm5lbC56ICogY29sb3JzWzJdO1xcbn1cIl0pO3IuYmc9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxjLHUsbnVsbCxbe25hbWU6XCJwb3NpdGlvblwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwibm9ybWFsXCIsdHlwZTpcInZlYzNcIn1dKX19LHtcImdsLXNoYWRlclwiOjI5OCxnbHNsaWZ5OjQwMn1dLDIzNTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxzLGwpe3ZhciB1PW4odCksaD1pKHQsW3tidWZmZXI6dSxzaXplOjN9XSksZj1vKHQpO2YuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wO3ZhciBwPW5ldyBjKHQsZix1LGgpO3JldHVybiBwLnVwZGF0ZShlLHIsYSxzLGwpLHB9O3ZhciBuPXQoXCJnbC1idWZmZXJcIiksaT10KFwiZ2wtdmFvXCIpLGE9dChcInZlY3Rvcml6ZS10ZXh0XCIpLG89dChcIi4vc2hhZGVyc1wiKS50ZXh0LHM9d2luZG93fHxyLmdsb2JhbHx8e30sbD1zLl9fVEVYVF9DQUNIRXx8e307cy5fX1RFWFRfQ0FDSEU9e307ZnVuY3Rpb24gYyh0LGUscixuKXt0aGlzLmdsPXQsdGhpcy5zaGFkZXI9ZSx0aGlzLmJ1ZmZlcj1yLHRoaXMudmFvPW4sdGhpcy50aWNrT2Zmc2V0PXRoaXMudGlja0NvdW50PXRoaXMubGFiZWxPZmZzZXQ9dGhpcy5sYWJlbENvdW50PW51bGx9dmFyIHU9Yy5wcm90b3R5cGUsaD1bMCwwXTt1LmJpbmQ9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy52YW8uYmluZCgpLHRoaXMuc2hhZGVyLmJpbmQoKTt2YXIgaT10aGlzLnNoYWRlci51bmlmb3JtcztpLm1vZGVsPXQsaS52aWV3PWUsaS5wcm9qZWN0aW9uPXIsaS5waXhlbFNjYWxlPW4saFswXT10aGlzLmdsLmRyYXdpbmdCdWZmZXJXaWR0aCxoWzFdPXRoaXMuZ2wuZHJhd2luZ0J1ZmZlckhlaWdodCx0aGlzLnNoYWRlci51bmlmb3Jtcy5yZXNvbHV0aW9uPWh9LHUudW5iaW5kPWZ1bmN0aW9uKCl7dGhpcy52YW8udW5iaW5kKCl9LHUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG89W107ZnVuY3Rpb24gcyh0LGUscixuLGkscyl7dmFyIGM9bFtyXTtjfHwoYz1sW3JdPXt9KTt2YXIgdT1jW2VdO3V8fCh1PWNbZV09ZnVuY3Rpb24odCxlKXt0cnl7cmV0dXJuIGEodCxlKX1jYXRjaChlKXtyZXR1cm4gY29uc29sZS53YXJuKCdlcnJvciB2ZWN0b3JpemluZyB0ZXh0OlwiJyt0KydcIiBlcnJvcjonLGUpLHtjZWxsczpbXSxwb3NpdGlvbnM6W119fX0oZSx7dHJpYW5nbGVzOiEwLGZvbnQ6cix0ZXh0QWxpZ246XCJjZW50ZXJcIix0ZXh0QmFzZWxpbmU6XCJtaWRkbGVcIixsaW5lU3BhY2luZzppLHN0eWxldGFnczpzfSkpO2Zvcih2YXIgaD0obnx8MTIpLzEyLGY9dS5wb3NpdGlvbnMscD11LmNlbGxzLGQ9MCxnPXAubGVuZ3RoO2Q8ZzsrK2QpZm9yKHZhciB2PXBbZF0sbT0yO20+PTA7LS1tKXt2YXIgeT1mW3ZbbV1dO28ucHVzaChoKnlbMF0sLWgqeVsxXSx0KX19Zm9yKHZhciBjPVswLDAsMF0sdT1bMCwwLDBdLGg9WzAsMCwwXSxmPVswLDAsMF0scD17YnJlYWtsaW5lczohMCxib2xkczohMCxpdGFsaWNzOiEwLHN1YnNjcmlwdHM6ITAsc3VwZXJzY3JpcHRzOiEwfSxkPTA7ZDwzOysrZCl7aFtkXT1vLmxlbmd0aC8zfDAscyguNSoodFswXVtkXSt0WzFdW2RdKSxlW2RdLHJbZF0sMTIsMS4yNSxwKSxmW2RdPShvLmxlbmd0aC8zfDApLWhbZF0sY1tkXT1vLmxlbmd0aC8zfDA7Zm9yKHZhciBnPTA7ZzxuW2RdLmxlbmd0aDsrK2cpbltkXVtnXS50ZXh0JiZzKG5bZF1bZ10ueCxuW2RdW2ddLnRleHQsbltkXVtnXS5mb250fHxpLG5bZF1bZ10uZm9udFNpemV8fDEyLDEuMjUscCk7dVtkXT0oby5sZW5ndGgvM3wwKS1jW2RdfXRoaXMuYnVmZmVyLnVwZGF0ZShvKSx0aGlzLnRpY2tPZmZzZXQ9Yyx0aGlzLnRpY2tDb3VudD11LHRoaXMubGFiZWxPZmZzZXQ9aCx0aGlzLmxhYmVsQ291bnQ9Zn0sdS5kcmF3VGlja3M9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt0aGlzLnRpY2tDb3VudFt0XSYmKHRoaXMuc2hhZGVyLnVuaWZvcm1zLmF4aXM9YSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1pLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFuZ2xlPXIsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NhbGU9ZSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9bix0aGlzLnNoYWRlci51bmlmb3Jtcy5hbGlnbkRpcj1vLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFsaWduT3B0PXMsdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyx0aGlzLnRpY2tDb3VudFt0XSx0aGlzLnRpY2tPZmZzZXRbdF0pKX0sdS5kcmF3TGFiZWw9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt0aGlzLmxhYmVsQ291bnRbdF0mJih0aGlzLnNoYWRlci51bmlmb3Jtcy5heGlzPWEsdGhpcy5zaGFkZXIudW5pZm9ybXMuY29sb3I9aSx0aGlzLnNoYWRlci51bmlmb3Jtcy5hbmdsZT1yLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjYWxlPWUsdGhpcy5zaGFkZXIudW5pZm9ybXMub2Zmc2V0PW4sdGhpcy5zaGFkZXIudW5pZm9ybXMuYWxpZ25EaXI9byx0aGlzLnNoYWRlci51bmlmb3Jtcy5hbGlnbk9wdD1zLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy5sYWJlbENvdW50W3RdLHRoaXMubGFiZWxPZmZzZXRbdF0pKX0sdS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlci5kaXNwb3NlKCl9fSkuY2FsbCh0aGlzLHQoXCJfcHJvY2Vzc1wiKSl9LHtcIi4vc2hhZGVyc1wiOjIzNCxfcHJvY2Vzczo0NzUsXCJnbC1idWZmZXJcIjoyMzgsXCJnbC12YW9cIjozMjAsXCJ2ZWN0b3JpemUtdGV4dFwiOjUzNX1dLDIzNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj10K1wiXCIsbj1yLmluZGV4T2YoXCIuXCIpLGk9MDtuPj0wJiYoaT1yLmxlbmd0aC1uLTEpO3ZhciBhPU1hdGgucG93KDEwLGkpLG89TWF0aC5yb3VuZCh0KmUqYSkscz1vK1wiXCI7aWYocy5pbmRleE9mKFwiZVwiKT49MClyZXR1cm4gczt2YXIgbD1vL2EsYz1vJWE7bzwwPyhsPTB8LU1hdGguY2VpbChsKSxjPTB8LWMpOihsPTB8TWF0aC5mbG9vcihsKSxjfD0wKTt2YXIgdT1cIlwiK2w7aWYobzwwJiYodT1cIi1cIit1KSxpKXtmb3IodmFyIGg9XCJcIitjO2gubGVuZ3RoPGk7KWg9XCIwXCIraDtyZXR1cm4gdStcIi5cIitofXJldHVybiB1fXIuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLGk9MDtpPDM7KytpKXtmb3IodmFyIGE9W10sbz0odFswXVtpXSx0WzFdW2ldLDApO28qZVtpXTw9dFsxXVtpXTsrK28pYS5wdXNoKHt4Om8qZVtpXSx0ZXh0Om4oZVtpXSxvKX0pO2Zvcih2YXIgbz0tMTtvKmVbaV0+PXRbMF1baV07LS1vKWEucHVzaCh7eDpvKmVbaV0sdGV4dDpuKGVbaV0sbyl9KTtyLnB1c2goYSl9cmV0dXJuIHJ9LHIuZXF1YWw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPDM7KytyKXtpZih0W3JdLmxlbmd0aCE9PWVbcl0ubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dFtyXS5sZW5ndGg7KytuKXt2YXIgaT10W3JdW25dLGE9ZVtyXVtuXTtpZihpLnghPT1hLnh8fGkudGV4dCE9PWEudGV4dHx8aS5mb250IT09YS5mb250fHxpLmZvbnRDb2xvciE9PWEuZm9udENvbG9yfHxpLmZvbnRTaXplIT09YS5mb250U2l6ZXx8aS5keCE9PWEuZHh8fGkuZHkhPT1hLmR5KXJldHVybiExfX1yZXR1cm4hMH19LHt9XSwyMzc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCxoKXt2YXIgZj1lLm1vZGVsfHxjLHA9ZS52aWV3fHxjLG09ZS5wcm9qZWN0aW9ufHxjLHk9ZS5fb3J0aG98fCExLHg9dC5ib3VuZHMsYj0oaD1ofHxhKGYscCxtLHgseSkpLmF4aXM7byh1LHAsZiksbyh1LG0sdSk7Zm9yKHZhciBfPWcsdz0wO3c8MzsrK3cpX1t3XS5sbz0xLzAsX1t3XS5oaT0tMS8wLF9bd10ucGl4ZWxzUGVyRGF0YVVuaXQ9MS8wO3ZhciBrPW4ocyh1LHUpKTtzKHUsdSk7Zm9yKHZhciBBPTA7QTwzOysrQSl7dmFyIFQ9KEErMSklMyxNPShBKzIpJTMsUz12O3Q6Zm9yKHZhciB3PTA7dzwyOysrdyl7dmFyIEU9W107aWYoYltBXTwwIT0hIXcpe1NbQV09eFt3XVtBXTtmb3IodmFyIEM9MDtDPDI7KytDKXtTW1RdPXhbQ153XVtUXTtmb3IodmFyIEw9MDtMPDI7KytMKVNbTV09eFtMXkNed11bTV0sRS5wdXNoKFMuc2xpY2UoKSl9Zm9yKHZhciB6PXk/NTo0LEM9ejtDPT09ejsrK0Mpe2lmKDA9PT1FLmxlbmd0aCljb250aW51ZSB0O0U9aS5wb3NpdGl2ZShFLGtbQ10pfWZvcih2YXIgQz0wO0M8RS5sZW5ndGg7KytDKWZvcih2YXIgTT1FW0NdLE89ZCh2LHUsTSxyLGwpLEw9MDtMPDM7KytMKV9bTF0ubG89TWF0aC5taW4oX1tMXS5sbyxNW0xdKSxfW0xdLmhpPU1hdGgubWF4KF9bTF0uaGksTVtMXSksTCE9PUEmJihfW0xdLnBpeGVsc1BlckRhdGFVbml0PU1hdGgubWluKF9bTF0ucGl4ZWxzUGVyRGF0YVVuaXQsTWF0aC5hYnMoT1tMXSkpKX19fXJldHVybiBffTt2YXIgbj10KFwiZXh0cmFjdC1mcnVzdHVtLXBsYW5lc1wiKSxpPXQoXCJzcGxpdC1wb2x5Z29uXCIpLGE9dChcIi4vbGliL2N1YmUuanNcIiksbz10KFwiZ2wtbWF0NC9tdWx0aXBseVwiKSxzPXQoXCJnbC1tYXQ0L3RyYW5zcG9zZVwiKSxsPXQoXCJnbC12ZWM0L3RyYW5zZm9ybU1hdDRcIiksYz1uZXcgRmxvYXQzMkFycmF5KFsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSksdT1uZXcgRmxvYXQzMkFycmF5KDE2KTtmdW5jdGlvbiBoKHQsZSxyKXt0aGlzLmxvPXQsdGhpcy5oaT1lLHRoaXMucGl4ZWxzUGVyRGF0YVVuaXQ9cn12YXIgZj1bMCwwLDAsMV0scD1bMCwwLDAsMV07ZnVuY3Rpb24gZCh0LGUscixuLGkpe2Zvcih2YXIgYT0wO2E8MzsrK2Epe2Zvcih2YXIgbz1mLHM9cCxjPTA7YzwzOysrYylzW2NdPW9bY109cltjXTtzWzNdPW9bM109MSxzW2FdKz0xLGwocyxzLGUpLHNbM108MCYmKHRbYV09MS8wKSxvW2FdLT0xLGwobyxvLGUpLG9bM108MCYmKHRbYV09MS8wKTt2YXIgdT0ob1swXS9vWzNdLXNbMF0vc1szXSkqbixoPShvWzFdL29bM10tc1sxXS9zWzNdKSppO3RbYV09LjI1Kk1hdGguc3FydCh1KnUraCpoKX1yZXR1cm4gdH12YXIgZz1bbmV3IGgoMS8wLC0xLzAsMS8wKSxuZXcgaCgxLzAsLTEvMCwxLzApLG5ldyBoKDEvMCwtMS8wLDEvMCldLHY9WzAsMCwwXX0se1wiLi9saWIvY3ViZS5qc1wiOjIzMixcImV4dHJhY3QtZnJ1c3R1bS1wbGFuZXNcIjoyMjEsXCJnbC1tYXQ0L211bHRpcGx5XCI6MjY0LFwiZ2wtbWF0NC90cmFuc3Bvc2VcIjoyNzMsXCJnbC12ZWM0L3RyYW5zZm9ybU1hdDRcIjozOTEsXCJzcGxpdC1wb2x5Z29uXCI6NTEyfV0sMjM4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInR5cGVkYXJyYXktcG9vbFwiKSxpPXQoXCJuZGFycmF5LW9wc1wiKSxhPXQoXCJuZGFycmF5XCIpLG89W1widWludDhcIixcInVpbnQ4X2NsYW1wZWRcIixcInVpbnQxNlwiLFwidWludDMyXCIsXCJpbnQ4XCIsXCJpbnQxNlwiLFwiaW50MzJcIixcImZsb2F0MzJcIl07ZnVuY3Rpb24gcyh0LGUscixuLGkpe3RoaXMuZ2w9dCx0aGlzLnR5cGU9ZSx0aGlzLmhhbmRsZT1yLHRoaXMubGVuZ3RoPW4sdGhpcy51c2FnZT1pfXZhciBsPXMucHJvdG90eXBlO2Z1bmN0aW9uIGModCxlLHIsbixpLGEpe3ZhciBvPWkubGVuZ3RoKmkuQllURVNfUEVSX0VMRU1FTlQ7aWYoYTwwKXJldHVybiB0LmJ1ZmZlckRhdGEoZSxpLG4pLG87aWYobythPnIpdGhyb3cgbmV3IEVycm9yKFwiZ2wtYnVmZmVyOiBJZiByZXNpemluZyBidWZmZXIsIG11c3Qgbm90IHNwZWNpZnkgb2Zmc2V0XCIpO3JldHVybiB0LmJ1ZmZlclN1YkRhdGEoZSxhLGkpLHJ9ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcj1uLm1hbGxvYyh0Lmxlbmd0aCxlKSxpPXQubGVuZ3RoLGE9MDthPGk7KythKXJbYV09dFthXTtyZXR1cm4gcn1sLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmdsLmJpbmRCdWZmZXIodGhpcy50eXBlLHRoaXMuaGFuZGxlKX0sbC51bmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmdsLmJpbmRCdWZmZXIodGhpcy50eXBlLG51bGwpfSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmhhbmRsZSl9LGwudXBkYXRlPWZ1bmN0aW9uKHQsZSl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUmJihlPS0xKSx0aGlzLmJpbmQoKSxcIm9iamVjdFwiPT10eXBlb2YgdCYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHQuc2hhcGUpe3ZhciByPXQuZHR5cGU7aWYoby5pbmRleE9mKHIpPDAmJihyPVwiZmxvYXQzMlwiKSx0aGlzLnR5cGU9PT10aGlzLmdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSKXI9Z2wuZ2V0RXh0ZW5zaW9uKFwiT0VTX2VsZW1lbnRfaW5kZXhfdWludFwiKSYmXCJ1aW50MTZcIiE9PXI/XCJ1aW50MzJcIjpcInVpbnQxNlwiO2lmKHI9PT10LmR0eXBlJiZmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xLG49ZS5sZW5ndGgtMTtuPj0wOy0tbil7aWYoZVtuXSE9PXIpcmV0dXJuITE7cio9dFtuXX1yZXR1cm4hMH0odC5zaGFwZSx0LnN0cmlkZSkpMD09PXQub2Zmc2V0JiZ0LmRhdGEubGVuZ3RoPT09dC5zaGFwZVswXT90aGlzLmxlbmd0aD1jKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsdC5kYXRhLGUpOnRoaXMubGVuZ3RoPWModGhpcy5nbCx0aGlzLnR5cGUsdGhpcy5sZW5ndGgsdGhpcy51c2FnZSx0LmRhdGEuc3ViYXJyYXkodC5vZmZzZXQsdC5zaGFwZVswXSksZSk7ZWxzZXt2YXIgcz1uLm1hbGxvYyh0LnNpemUsciksbD1hKHMsdC5zaGFwZSk7aS5hc3NpZ24obCx0KSx0aGlzLmxlbmd0aD1jKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsZTwwP3M6cy5zdWJhcnJheSgwLHQuc2l6ZSksZSksbi5mcmVlKHMpfX1lbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBoO2g9dGhpcy50eXBlPT09dGhpcy5nbC5FTEVNRU5UX0FSUkFZX0JVRkZFUj91KHQsXCJ1aW50MTZcIik6dSh0LFwiZmxvYXQzMlwiKSx0aGlzLmxlbmd0aD1jKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsZTwwP2g6aC5zdWJhcnJheSgwLHQubGVuZ3RoKSxlKSxuLmZyZWUoaCl9ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgdCYmXCJudW1iZXJcIj09dHlwZW9mIHQubGVuZ3RoKXRoaXMubGVuZ3RoPWModGhpcy5nbCx0aGlzLnR5cGUsdGhpcy5sZW5ndGgsdGhpcy51c2FnZSx0LGUpO2Vsc2V7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHQmJnZvaWQgMCE9PXQpdGhyb3cgbmV3IEVycm9yKFwiZ2wtYnVmZmVyOiBJbnZhbGlkIGRhdGEgdHlwZVwiKTtpZihlPj0wKXRocm93IG5ldyBFcnJvcihcImdsLWJ1ZmZlcjogQ2Fubm90IHNwZWNpZnkgb2Zmc2V0IHdoZW4gcmVzaXppbmcgYnVmZmVyXCIpOyh0fD0wKTw9MCYmKHQ9MSksdGhpcy5nbC5idWZmZXJEYXRhKHRoaXMudHlwZSwwfHQsdGhpcy51c2FnZSksdGhpcy5sZW5ndGg9dH19LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtpZihyPXJ8fHQuQVJSQVlfQlVGRkVSLG49bnx8dC5EWU5BTUlDX0RSQVcsciE9PXQuQVJSQVlfQlVGRkVSJiZyIT09dC5FTEVNRU5UX0FSUkFZX0JVRkZFUil0aHJvdyBuZXcgRXJyb3IoXCJnbC1idWZmZXI6IEludmFsaWQgdHlwZSBmb3Igd2ViZ2wgYnVmZmVyLCBtdXN0IGJlIGVpdGhlciBnbC5BUlJBWV9CVUZGRVIgb3IgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVJcIik7aWYobiE9PXQuRFlOQU1JQ19EUkFXJiZuIT09dC5TVEFUSUNfRFJBVyYmbiE9PXQuU1RSRUFNX0RSQVcpdGhyb3cgbmV3IEVycm9yKFwiZ2wtYnVmZmVyOiBJbnZhbGlkIHVzYWdlIGZvciBidWZmZXIsIG11c3QgYmUgZWl0aGVyIGdsLkRZTkFNSUNfRFJBVywgZ2wuU1RBVElDX0RSQVcgb3IgZ2wuU1RSRUFNX0RSQVdcIik7dmFyIGk9dC5jcmVhdGVCdWZmZXIoKSxhPW5ldyBzKHQscixpLDAsbik7cmV0dXJuIGEudXBkYXRlKGUpLGF9fSx7bmRhcnJheTo0NDMsXCJuZGFycmF5LW9wc1wiOjQzNyxcInR5cGVkYXJyYXktcG9vbFwiOjUzMH1dLDIzOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbC12ZWMzXCIpLGk9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZih0W3JdPj1lKXJldHVybiByLTE7cmV0dXJuIHJ9LGE9bi5jcmVhdGUoKSxvPW4uY3JlYXRlKCkscz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ8ZT9lOnQ+cj9yOnR9LGw9ZnVuY3Rpb24odCxlLHIsbCl7dmFyIGM9dFswXSx1PXRbMV0saD10WzJdLGY9clswXS5sZW5ndGgscD1yWzFdLmxlbmd0aCxkPXJbMl0ubGVuZ3RoLGc9aShyWzBdLGMpLHY9aShyWzFdLHUpLG09aShyWzJdLGgpLHk9ZysxLHg9disxLGI9bSsxO2lmKGwmJihnPXMoZywwLGYtMSkseT1zKHksMCxmLTEpLHY9cyh2LDAscC0xKSx4PXMoeCwwLHAtMSksbT1zKG0sMCxkLTEpLGI9cyhiLDAsZC0xKSksZzwwfHx2PDB8fG08MHx8eT49Znx8eD49cHx8Yj49ZClyZXR1cm4gbi5jcmVhdGUoKTt2YXIgXz0oYy1yWzBdW2ddKS8oclswXVt5XS1yWzBdW2ddKSx3PSh1LXJbMV1bdl0pLyhyWzFdW3hdLXJbMV1bdl0pLGs9KGgtclsyXVttXSkvKHJbMl1bYl0tclsyXVttXSk7KF88MHx8Xz4xfHxpc05hTihfKSkmJihfPTApLCh3PDB8fHc+MXx8aXNOYU4odykpJiYodz0wKSwoazwwfHxrPjF8fGlzTmFOKGspKSYmKGs9MCk7dmFyIEE9bSpmKnAsVD1iKmYqcCxNPXYqZixTPXgqZixFPWcsQz15LEw9ZVtNK0ErRV0sej1lW00rQStDXSxPPWVbUytBK0VdLEk9ZVtTK0ErQ10sRD1lW00rVCtFXSxQPWVbTStUK0NdLFI9ZVtTK1QrRV0sRj1lW1MrVCtDXSxCPW4uY3JlYXRlKCk7cmV0dXJuIG4ubGVycChCLEwseixfKSxuLmxlcnAoYSxPLEksXyksbi5sZXJwKEIsQixhLHcpLG4ubGVycChhLEQsUCxfKSxuLmxlcnAobyxSLEYsXyksbi5sZXJwKGEsYSxvLHcpLG4ubGVycChCLEIsYSxrKSxCfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcjtyPXQucG9zaXRpb25zP3QucG9zaXRpb25zOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl0saT1bXSxhPTA7YTxuLmxlbmd0aDthKyspZm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspZm9yKHZhciBzPTA7czxlLmxlbmd0aDtzKyspaS5wdXNoKFtuW2FdLHJbb10sZVtzXV0pO3JldHVybiBpfSh0Lm1lc2hncmlkKTt2YXIgaT10Lm1lc2hncmlkLGE9dC52ZWN0b3JzLG89e3Bvc2l0aW9uczpbXSx2ZXJ0ZXhJbnRlbnNpdHk6W10sdmVydGV4SW50ZW5zaXR5Qm91bmRzOnQudmVydGV4SW50ZW5zaXR5Qm91bmRzLHZlcnRleE5vcm1hbHM6W10sdmVjdG9yczpbXSxjZWxsczpbXSxjb25lT2Zmc2V0OnQuY29uZU9mZnNldCxjb2xvcm1hcDp0LmNvbG9ybWFwfTtpZigwPT09dC5wb3NpdGlvbnMubGVuZ3RoKXJldHVybiBlJiYoZVswXT1bMCwwLDBdLGVbMV09WzAsMCwwXSksbztmb3IodmFyIHM9MCxjPTEvMCx1PS0xLzAsaD0xLzAsZj0tMS8wLHA9MS8wLGQ9LTEvMCxnPW51bGwsdj1udWxsLG09W10seT0xLzAseD0wO3g8ci5sZW5ndGg7eCsrKXt2YXIgYixfPXJbeF07Yz1NYXRoLm1pbihfWzBdLGMpLHU9TWF0aC5tYXgoX1swXSx1KSxoPU1hdGgubWluKF9bMV0saCksZj1NYXRoLm1heChfWzFdLGYpLHA9TWF0aC5taW4oX1syXSxwKSxkPU1hdGgubWF4KF9bMl0sZCksYj1pP2woXyxhLGksITApOmFbeF0sbi5sZW5ndGgoYik+cyYmKHM9bi5sZW5ndGgoYikpLHgmJih5PU1hdGgubWluKHksMipuLmRpc3RhbmNlKGcsXykvKG4ubGVuZ3RoKHYpK24ubGVuZ3RoKGIpKSkpLGc9Xyx2PWIsbS5wdXNoKGIpfXZhciB3PVtjLGgscF0saz1bdSxmLGRdO2UmJihlWzBdPXcsZVsxXT1rKSwwPT09cyYmKHM9MSk7dmFyIEE9MS9zO2lzRmluaXRlKHkpJiYhaXNOYU4oeSl8fCh5PTEpLG8udmVjdG9yU2NhbGU9eTt2YXIgVD1mdW5jdGlvbih0LGUscil7dmFyIGk9bi5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09dCYmbi5zZXQoaSx0LGUsciksaX0oMCwxLDApLE09dC5jb25lU2l6ZXx8LjU7dC5hYnNvbHV0ZUNvbmVTaXplJiYoTT10LmFic29sdXRlQ29uZVNpemUqQSksby5jb25lU2NhbGU9TTt4PTA7Zm9yKHZhciBTPTA7eDxyLmxlbmd0aDt4KyspZm9yKHZhciBFPShfPXJbeF0pWzBdLEM9X1sxXSxMPV9bMl0sej1tW3hdLE89bi5sZW5ndGgoeikqQSxJPTA7STw4O0krKyl7by5wb3NpdGlvbnMucHVzaChbRSxDLEwsUysrXSksby5wb3NpdGlvbnMucHVzaChbRSxDLEwsUysrXSksby5wb3NpdGlvbnMucHVzaChbRSxDLEwsUysrXSksby5wb3NpdGlvbnMucHVzaChbRSxDLEwsUysrXSksby5wb3NpdGlvbnMucHVzaChbRSxDLEwsUysrXSksby5wb3NpdGlvbnMucHVzaChbRSxDLEwsUysrXSksby52ZWN0b3JzLnB1c2goeiksby52ZWN0b3JzLnB1c2goeiksby52ZWN0b3JzLnB1c2goeiksby52ZWN0b3JzLnB1c2goeiksby52ZWN0b3JzLnB1c2goeiksby52ZWN0b3JzLnB1c2goeiksby52ZXJ0ZXhJbnRlbnNpdHkucHVzaChPLE8sTyksby52ZXJ0ZXhJbnRlbnNpdHkucHVzaChPLE8sTyksby52ZXJ0ZXhOb3JtYWxzLnB1c2goVCxULFQpLG8udmVydGV4Tm9ybWFscy5wdXNoKFQsVCxUKTt2YXIgRD1vLnBvc2l0aW9ucy5sZW5ndGg7by5jZWxscy5wdXNoKFtELTYsRC01LEQtNF0sW0QtMyxELTIsRC0xXSl9cmV0dXJuIG99LGUuZXhwb3J0cy5jcmVhdGVDb25lTWVzaD10KFwiLi9saWIvY29uZW1lc2hcIil9LHtcIi4vbGliL2NvbmVtZXNoXCI6MjQwLFwiZ2wtdmVjM1wiOjMzOX1dLDI0MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbC1zaGFkZXJcIiksaT10KFwiZ2wtYnVmZmVyXCIpLGE9dChcImdsLXZhb1wiKSxvPXQoXCJnbC10ZXh0dXJlMmRcIikscz10KFwibm9ybWFsc1wiKSxsPXQoXCJnbC1tYXQ0L211bHRpcGx5XCIpLGM9dChcImdsLW1hdDQvaW52ZXJ0XCIpLHU9dChcIm5kYXJyYXlcIiksaD10KFwiY29sb3JtYXBcIiksZj10KFwic2ltcGxpY2lhbC1jb21wbGV4LWNvbnRvdXJcIikscD10KFwidHlwZWRhcnJheS1wb29sXCIpLGQ9dChcIi4vc2hhZGVyc1wiKSxnPWQubWVzaFNoYWRlcix2PWQucGlja1NoYWRlcixtPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiB5KHQsZSxyLG4saSxhLG8scyxsLGMsdSxoLGYscCxkLGcsdix5LHgsYixfLHcsayxBKXt0aGlzLmdsPXQsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5jZWxscz1bXSx0aGlzLnBvc2l0aW9ucz1bXSx0aGlzLmludGVuc2l0eT1bXSx0aGlzLnRleHR1cmU9ZSx0aGlzLmRpcnR5PSEwLHRoaXMudHJpU2hhZGVyPXIsdGhpcy5waWNrU2hhZGVyPW4sdGhpcy50cmlhbmdsZVBvc2l0aW9ucz1pLHRoaXMudHJpYW5nbGVWZWN0b3JzPWEsdGhpcy50cmlhbmdsZUNvbG9ycz1zLHRoaXMudHJpYW5nbGVOb3JtYWxzPWMsdGhpcy50cmlhbmdsZVVWcz1sLHRoaXMudHJpYW5nbGVJZHM9byx0aGlzLnRyaWFuZ2xlVkFPPXUsdGhpcy50cmlhbmdsZUNvdW50PTAsdGhpcy5saW5lV2lkdGg9MSx0aGlzLmVkZ2VQb3NpdGlvbnM9aCx0aGlzLmVkZ2VDb2xvcnM9cCx0aGlzLmVkZ2VVVnM9ZCx0aGlzLmVkZ2VJZHM9Zix0aGlzLmVkZ2VWQU89Zyx0aGlzLmVkZ2VDb3VudD0wLHRoaXMucG9pbnRQb3NpdGlvbnM9dix0aGlzLnBvaW50Q29sb3JzPXgsdGhpcy5wb2ludFVWcz1iLHRoaXMucG9pbnRTaXplcz1fLHRoaXMucG9pbnRJZHM9eSx0aGlzLnBvaW50VkFPPXcsdGhpcy5wb2ludENvdW50PTAsdGhpcy5jb250b3VyTGluZVdpZHRoPTEsdGhpcy5jb250b3VyUG9zaXRpb25zPWssdGhpcy5jb250b3VyVkFPPUEsdGhpcy5jb250b3VyQ291bnQ9MCx0aGlzLmNvbnRvdXJDb2xvcj1bMCwwLDBdLHRoaXMuY29udG91ckVuYWJsZT0hMCx0aGlzLnBpY2tJZD0xLHRoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmxpZ2h0UG9zaXRpb249WzFlNSwxZTUsMF0sdGhpcy5hbWJpZW50TGlnaHQ9LjgsdGhpcy5kaWZmdXNlTGlnaHQ9LjgsdGhpcy5zcGVjdWxhckxpZ2h0PTIsdGhpcy5yb3VnaG5lc3M9LjUsdGhpcy5mcmVzbmVsPTEuNSx0aGlzLm9wYWNpdHk9MSx0aGlzLmNvbmVTY2FsZT0yLHRoaXMudmVjdG9yU2NhbGU9MSx0aGlzLmNvbmVPZmZzZXQ9LjI1LHRoaXMuX21vZGVsPW0sdGhpcy5fdmlldz1tLHRoaXMuX3Byb2plY3Rpb249bSx0aGlzLl9yZXNvbHV0aW9uPVsxLDFdfXZhciB4PXkucHJvdG90eXBlO2Z1bmN0aW9uIGIodCl7dmFyIGU9bih0LHYudmVydGV4LHYuZnJhZ21lbnQsbnVsbCx2LmF0dHJpYnV0ZXMpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuaWQubG9jYXRpb249MSxlLmF0dHJpYnV0ZXMudmVjdG9yLmxvY2F0aW9uPTUsZX14LmlzT3BhcXVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BhY2l0eT49MX0seC5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BhY2l0eTwxfSx4LnBpY2tTbG90cz0xLHguc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH0seC5oaWdobGlnaHQ9ZnVuY3Rpb24odCl7aWYodCYmdGhpcy5jb250b3VyRW5hYmxlKXtmb3IodmFyIGU9Zih0aGlzLmNlbGxzLHRoaXMuaW50ZW5zaXR5LHQuaW50ZW5zaXR5KSxyPWUuY2VsbHMsbj1lLnZlcnRleElkcyxpPWUudmVydGV4V2VpZ2h0cyxhPXIubGVuZ3RoLG89cC5tYWxsb2NGbG9hdDMyKDYqYSkscz0wLGw9MDtsPGE7KytsKWZvcih2YXIgYz1yW2xdLHU9MDt1PDI7Kyt1KXt2YXIgaD1jWzBdOzI9PT1jLmxlbmd0aCYmKGg9Y1t1XSk7Zm9yKHZhciBkPW5baF1bMF0sZz1uW2hdWzFdLHY9aVtoXSxtPTEtdix5PXRoaXMucG9zaXRpb25zW2RdLHg9dGhpcy5wb3NpdGlvbnNbZ10sYj0wO2I8MzsrK2Ipb1tzKytdPXYqeVtiXSttKnhbYl19dGhpcy5jb250b3VyQ291bnQ9cy8zfDAsdGhpcy5jb250b3VyUG9zaXRpb25zLnVwZGF0ZShvLnN1YmFycmF5KDAscykpLHAuZnJlZShvKX1lbHNlIHRoaXMuY29udG91ckNvdW50PTB9LHgudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e307dmFyIGU9dGhpcy5nbDt0aGlzLmRpcnR5PSEwLFwiY29udG91ckVuYWJsZVwiaW4gdCYmKHRoaXMuY29udG91ckVuYWJsZT10LmNvbnRvdXJFbmFibGUpLFwiY29udG91ckNvbG9yXCJpbiB0JiYodGhpcy5jb250b3VyQ29sb3I9dC5jb250b3VyQ29sb3IpLFwibGluZVdpZHRoXCJpbiB0JiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgpLFwibGlnaHRQb3NpdGlvblwiaW4gdCYmKHRoaXMubGlnaHRQb3NpdGlvbj10LmxpZ2h0UG9zaXRpb24pLFwib3BhY2l0eVwiaW4gdCYmKHRoaXMub3BhY2l0eT10Lm9wYWNpdHkpLFwiYW1iaWVudFwiaW4gdCYmKHRoaXMuYW1iaWVudExpZ2h0PXQuYW1iaWVudCksXCJkaWZmdXNlXCJpbiB0JiYodGhpcy5kaWZmdXNlTGlnaHQ9dC5kaWZmdXNlKSxcInNwZWN1bGFyXCJpbiB0JiYodGhpcy5zcGVjdWxhckxpZ2h0PXQuc3BlY3VsYXIpLFwicm91Z2huZXNzXCJpbiB0JiYodGhpcy5yb3VnaG5lc3M9dC5yb3VnaG5lc3MpLFwiZnJlc25lbFwiaW4gdCYmKHRoaXMuZnJlc25lbD10LmZyZXNuZWwpLHZvaWQgMCE9PXQudmVjdG9yU2NhbGUmJih0aGlzLnZlY3RvclNjYWxlPXQudmVjdG9yU2NhbGUpLHZvaWQgMCE9PXQuY29uZVNjYWxlJiYodGhpcy5jb25lU2NhbGU9dC5jb25lU2NhbGUpLHZvaWQgMCE9PXQuY29uZU9mZnNldCYmKHRoaXMuY29uZU9mZnNldD10LmNvbmVPZmZzZXQpLHQudGV4dHVyZT8odGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRleHR1cmU9byhlLHQudGV4dHVyZSkpOnQuY29sb3JtYXAmJih0aGlzLnRleHR1cmUuc2hhcGU9WzI1NiwyNTZdLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZS5MSU5FQVJfTUlQTUFQX0xJTkVBUix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUuTElORUFSLHRoaXMudGV4dHVyZS5zZXRQaXhlbHMoZnVuY3Rpb24odCl7Zm9yKHZhciBlPWgoe2NvbG9ybWFwOnQsbnNoYWRlczoyNTYsZm9ybWF0OlwicmdiYVwifSkscj1uZXcgVWludDhBcnJheSgxMDI0KSxuPTA7bjwyNTY7KytuKXtmb3IodmFyIGk9ZVtuXSxhPTA7YTwzOysrYSlyWzQqbithXT1pW2FdO3JbNCpuKzNdPTI1NSppWzNdfXJldHVybiB1KHIsWzI1NiwyNTYsNF0sWzQsMCwxXSl9KHQuY29sb3JtYXApKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXAoKSk7dmFyIHI9dC5jZWxscyxuPXQucG9zaXRpb25zLGk9dC52ZWN0b3JzO2lmKG4mJnImJmkpe3ZhciBhPVtdLGw9W10sYz1bXSxmPVtdLHA9W10sZD1bXSxnPVtdLHY9W10sbT1bXSx5PVtdLHg9W10sYj1bXSxfPVtdLHc9W10saz1bXTt0aGlzLmNlbGxzPXIsdGhpcy5wb3NpdGlvbnM9bjt2YXIgQT10LnZlcnRleE5vcm1hbHMsVD10LmNlbGxOb3JtYWxzLE09dm9pZCAwPT09dC52ZXJ0ZXhOb3JtYWxzRXBzaWxvbj8xZS02OnQudmVydGV4Tm9ybWFsc0Vwc2lsb24sUz12b2lkIDA9PT10LmZhY2VOb3JtYWxzRXBzaWxvbj8xZS02OnQuZmFjZU5vcm1hbHNFcHNpbG9uO3QudXNlRmFjZXROb3JtYWxzJiYhVCYmKFQ9cy5mYWNlTm9ybWFscyhyLG4sUykpLFR8fEF8fChBPXMudmVydGV4Tm9ybWFscyhyLG4sTSkpO3ZhciBFPXQudmVydGV4Q29sb3JzLEM9dC5jZWxsQ29sb3JzLEw9dC5tZXNoQ29sb3J8fFsxLDEsMSwxXSx6PXQudmVydGV4VVZzLE89dC52ZXJ0ZXhJbnRlbnNpdHksST10LmNlbGxVVnMsRD10LmNlbGxJbnRlbnNpdHksUD0xLzAsUj0tMS8wO2lmKCF6JiYhSSlpZihPKWlmKHQudmVydGV4SW50ZW5zaXR5Qm91bmRzKVA9K3QudmVydGV4SW50ZW5zaXR5Qm91bmRzWzBdLFI9K3QudmVydGV4SW50ZW5zaXR5Qm91bmRzWzFdO2Vsc2UgZm9yKHZhciBGPTA7RjxPLmxlbmd0aDsrK0Ype3ZhciBCPU9bRl07UD1NYXRoLm1pbihQLEIpLFI9TWF0aC5tYXgoUixCKX1lbHNlIGlmKEQpZm9yKEY9MDtGPEQubGVuZ3RoOysrRil7Qj1EW0ZdO1A9TWF0aC5taW4oUCxCKSxSPU1hdGgubWF4KFIsQil9ZWxzZSBmb3IoRj0wO0Y8bi5sZW5ndGg7KytGKXtCPW5bRl1bMl07UD1NYXRoLm1pbihQLEIpLFI9TWF0aC5tYXgoUixCKX10aGlzLmludGVuc2l0eT1PfHwoRD9mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSluW2ldPTA7dmFyIGE9dC5sZW5ndGg7Zm9yKGk9MDtpPGE7KytpKWZvcih2YXIgbz10W2ldLHM9MDtzPG8ubGVuZ3RoOysrcyluW29bc11dPXJbaV07cmV0dXJuIG59KHIsbi5sZW5ndGgsRCk6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09dFtuXVsyXTtyZXR1cm4gcn0obikpO3ZhciBOPXQucG9pbnRTaXplcyxqPXQucG9pbnRTaXplfHwxO3RoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dO2ZvcihGPTA7RjxuLmxlbmd0aDsrK0YpZm9yKHZhciBWPW5bRl0sVT0wO1U8MzsrK1UpIWlzTmFOKFZbVV0pJiZpc0Zpbml0ZShWW1VdKSYmKHRoaXMuYm91bmRzWzBdW1VdPU1hdGgubWluKHRoaXMuYm91bmRzWzBdW1VdLFZbVV0pLHRoaXMuYm91bmRzWzFdW1VdPU1hdGgubWF4KHRoaXMuYm91bmRzWzFdW1VdLFZbVV0pKTt2YXIgcT0wLEg9MCxHPTA7dDpmb3IoRj0wO0Y8ci5sZW5ndGg7KytGKXt2YXIgWT1yW0ZdO3N3aXRjaChZLmxlbmd0aCl7Y2FzZSAxOmZvcihWPW5bWD1ZWzBdXSxVPTA7VTwzOysrVSlpZihpc05hTihWW1VdKXx8IWlzRmluaXRlKFZbVV0pKWNvbnRpbnVlIHQ7eC5wdXNoKFZbMF0sVlsxXSxWWzJdLFZbM10pLDM9PT0oWj1FP0VbWF06Qz9DW0ZdOkwpLmxlbmd0aD9iLnB1c2goWlswXSxaWzFdLFpbMl0sMSk6Yi5wdXNoKFpbMF0sWlsxXSxaWzJdLFpbM10pLCQ9ej96W1hdOk8/WyhPW1hdLVApLyhSLVApLDBdOkk/SVtGXTpEP1soRFtGXS1QKS8oUi1QKSwwXTpbKFZbMl0tUCkvKFItUCksMF0sXy5wdXNoKCRbMF0sJFsxXSksTj93LnB1c2goTltYXSk6dy5wdXNoKGopLGsucHVzaChGKSxHKz0xO2JyZWFrO2Nhc2UgMjpmb3IoVT0wO1U8MjsrK1Upe1Y9bltYPVlbVV1dO2Zvcih2YXIgVz0wO1c8MzsrK1cpaWYoaXNOYU4oVltXXSl8fCFpc0Zpbml0ZShWW1ddKSljb250aW51ZSB0fWZvcihVPTA7VTwyOysrVSl7Vj1uW1g9WVtVXV07Zy5wdXNoKFZbMF0sVlsxXSxWWzJdKSwzPT09KFo9RT9FW1hdOkM/Q1tGXTpMKS5sZW5ndGg/di5wdXNoKFpbMF0sWlsxXSxaWzJdLDEpOnYucHVzaChaWzBdLFpbMV0sWlsyXSxaWzNdKSwkPXo/eltYXTpPP1soT1tYXS1QKS8oUi1QKSwwXTpJP0lbRl06RD9bKERbRl0tUCkvKFItUCksMF06WyhWWzJdLVApLyhSLVApLDBdLG0ucHVzaCgkWzBdLCRbMV0pLHkucHVzaChGKX1IKz0xO2JyZWFrO2Nhc2UgMzpmb3IoVT0wO1U8MzsrK1UpZm9yKFY9bltYPVlbVV1dLFc9MDtXPDM7KytXKWlmKGlzTmFOKFZbV10pfHwhaXNGaW5pdGUoVltXXSkpY29udGludWUgdDtmb3IoVT0wO1U8MzsrK1Upe3ZhciBYO1Y9bltYPVlbMi1VXV07YS5wdXNoKFZbMF0sVlsxXSxWWzJdLFZbM10pO3ZhciBaLCQsSixLPWlbWF07bC5wdXNoKEtbMF0sS1sxXSxLWzJdKSwzPT09KFo9RT9FW1hdOkM/Q1tGXTpMKS5sZW5ndGg/Yy5wdXNoKFpbMF0sWlsxXSxaWzJdLDEpOmMucHVzaChaWzBdLFpbMV0sWlsyXSxaWzNdKSwkPXo/eltYXTpPP1soT1tYXS1QKS8oUi1QKSwwXTpJP0lbRl06RD9bKERbRl0tUCkvKFItUCksMF06WyhWWzJdLVApLyhSLVApLDBdLHAucHVzaCgkWzBdLCRbMV0pLEo9QT9BW1hdOlRbRl0sZi5wdXNoKEpbMF0sSlsxXSxKWzJdKSxkLnB1c2goRil9cSs9MX19dGhpcy5wb2ludENvdW50PUcsdGhpcy5lZGdlQ291bnQ9SCx0aGlzLnRyaWFuZ2xlQ291bnQ9cSx0aGlzLnBvaW50UG9zaXRpb25zLnVwZGF0ZSh4KSx0aGlzLnBvaW50Q29sb3JzLnVwZGF0ZShiKSx0aGlzLnBvaW50VVZzLnVwZGF0ZShfKSx0aGlzLnBvaW50U2l6ZXMudXBkYXRlKHcpLHRoaXMucG9pbnRJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheShrKSksdGhpcy5lZGdlUG9zaXRpb25zLnVwZGF0ZShnKSx0aGlzLmVkZ2VDb2xvcnMudXBkYXRlKHYpLHRoaXMuZWRnZVVWcy51cGRhdGUobSksdGhpcy5lZGdlSWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoeSkpLHRoaXMudHJpYW5nbGVQb3NpdGlvbnMudXBkYXRlKGEpLHRoaXMudHJpYW5nbGVWZWN0b3JzLnVwZGF0ZShsKSx0aGlzLnRyaWFuZ2xlQ29sb3JzLnVwZGF0ZShjKSx0aGlzLnRyaWFuZ2xlVVZzLnVwZGF0ZShwKSx0aGlzLnRyaWFuZ2xlTm9ybWFscy51cGRhdGUoZiksdGhpcy50cmlhbmdsZUlkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KGQpKX19LHguZHJhd1RyYW5zcGFyZW50PXguZHJhdz1mdW5jdGlvbih0KXt0PXR8fHt9O2Zvcih2YXIgZT10aGlzLmdsLHI9dC5tb2RlbHx8bSxuPXQudmlld3x8bSxpPXQucHJvamVjdGlvbnx8bSxhPVtbLTFlNiwtMWU2LC0xZTZdLFsxZTYsMWU2LDFlNl1dLG89MDtvPDM7KytvKWFbMF1bb109TWF0aC5tYXgoYVswXVtvXSx0aGlzLmNsaXBCb3VuZHNbMF1bb10pLGFbMV1bb109TWF0aC5taW4oYVsxXVtvXSx0aGlzLmNsaXBCb3VuZHNbMV1bb10pO3ZhciBzPXttb2RlbDpyLHZpZXc6bixwcm9qZWN0aW9uOmksaW52ZXJzZU1vZGVsOm0uc2xpY2UoKSxjbGlwQm91bmRzOmEsa2FtYmllbnQ6dGhpcy5hbWJpZW50TGlnaHQsa2RpZmZ1c2U6dGhpcy5kaWZmdXNlTGlnaHQsa3NwZWN1bGFyOnRoaXMuc3BlY3VsYXJMaWdodCxyb3VnaG5lc3M6dGhpcy5yb3VnaG5lc3MsZnJlc25lbDp0aGlzLmZyZXNuZWwsZXllUG9zaXRpb246WzAsMCwwXSxsaWdodFBvc2l0aW9uOlswLDAsMF0sb3BhY2l0eTp0aGlzLm9wYWNpdHksdmVjdG9yU2NhbGU6dGhpcy52ZWN0b3JTY2FsZSxjb25lU2NhbGU6dGhpcy5jb25lU2NhbGUsY29uZU9mZnNldDp0aGlzLmNvbmVPZmZzZXQsY29udG91ckNvbG9yOnRoaXMuY29udG91ckNvbG9yLHRleHR1cmU6MH07cy5pbnZlcnNlTW9kZWw9YyhzLmludmVyc2VNb2RlbCxzLm1vZGVsKSxlLmRpc2FibGUoZS5DVUxMX0ZBQ0UpLHRoaXMudGV4dHVyZS5iaW5kKDApO3ZhciB1PW5ldyBBcnJheSgxNik7bCh1LHMudmlldyxzLm1vZGVsKSxsKHUscy5wcm9qZWN0aW9uLHUpLGModSx1KTtmb3Iobz0wO288MzsrK28pcy5leWVQb3NpdGlvbltvXT11WzEyK29dL3VbMTVdO3ZhciBoPXVbMTVdO2ZvcihvPTA7bzwzOysrbyloKz10aGlzLmxpZ2h0UG9zaXRpb25bb10qdVs0Km8rM107Zm9yKG89MDtvPDM7KytvKXtmb3IodmFyIGY9dVsxMitvXSxwPTA7cDwzOysrcClmKz11WzQqcCtvXSp0aGlzLmxpZ2h0UG9zaXRpb25bcF07cy5saWdodFBvc2l0aW9uW29dPWYvaH1pZih0aGlzLnRyaWFuZ2xlQ291bnQ+MCl7dmFyIGQ9dGhpcy50cmlTaGFkZXI7ZC5iaW5kKCksZC51bmlmb3Jtcz1zLHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpfX0seC5kcmF3UGljaz1mdW5jdGlvbih0KXt0PXR8fHt9O2Zvcih2YXIgZT10aGlzLmdsLHI9dC5tb2RlbHx8bSxuPXQudmlld3x8bSxpPXQucHJvamVjdGlvbnx8bSxhPVtbLTFlNiwtMWU2LC0xZTZdLFsxZTYsMWU2LDFlNl1dLG89MDtvPDM7KytvKWFbMF1bb109TWF0aC5tYXgoYVswXVtvXSx0aGlzLmNsaXBCb3VuZHNbMF1bb10pLGFbMV1bb109TWF0aC5taW4oYVsxXVtvXSx0aGlzLmNsaXBCb3VuZHNbMV1bb10pO3RoaXMuX21vZGVsPVtdLnNsaWNlLmNhbGwociksdGhpcy5fdmlldz1bXS5zbGljZS5jYWxsKG4pLHRoaXMuX3Byb2plY3Rpb249W10uc2xpY2UuY2FsbChpKSx0aGlzLl9yZXNvbHV0aW9uPVtlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdO3ZhciBzPXttb2RlbDpyLHZpZXc6bixwcm9qZWN0aW9uOmksY2xpcEJvdW5kczphLHZlY3RvclNjYWxlOnRoaXMudmVjdG9yU2NhbGUsY29uZVNjYWxlOnRoaXMuY29uZVNjYWxlLGNvbmVPZmZzZXQ6dGhpcy5jb25lT2Zmc2V0LHBpY2tJZDp0aGlzLnBpY2tJZC8yNTV9LGw9dGhpcy5waWNrU2hhZGVyO2wuYmluZCgpLGwudW5pZm9ybXM9cyx0aGlzLnRyaWFuZ2xlQ291bnQ+MCYmKHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpKSx0aGlzLmVkZ2VDb3VudD4wJiYodGhpcy5lZGdlVkFPLmJpbmQoKSxlLmxpbmVXaWR0aCh0aGlzLmxpbmVXaWR0aCp0aGlzLnBpeGVsUmF0aW8pLGUuZHJhd0FycmF5cyhlLkxJTkVTLDAsMip0aGlzLmVkZ2VDb3VudCksdGhpcy5lZGdlVkFPLnVuYmluZCgpKX0seC5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDt2YXIgZT10LnZhbHVlWzBdKzI1Nip0LnZhbHVlWzFdKzY1NTM2KnQudmFsdWVbMl0scj10aGlzLmNlbGxzW2VdLG49dGhpcy5wb3NpdGlvbnNbclsxXV0uc2xpY2UoMCwzKTtyZXR1cm57aW5kZXg6TWF0aC5mbG9vcihyWzFdLzQ4KSxwb3NpdGlvbjpuLGRhdGFDb29yZGluYXRlOm59fSx4LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnRleHR1cmUuZGlzcG9zZSgpLHRoaXMudHJpU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVWQU8uZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVWZWN0b3JzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlQ29sb3JzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVVZzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlTm9ybWFscy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZUlkcy5kaXNwb3NlKCksdGhpcy5lZGdlVkFPLmRpc3Bvc2UoKSx0aGlzLmVkZ2VQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMuZWRnZUNvbG9ycy5kaXNwb3NlKCksdGhpcy5lZGdlVVZzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VJZHMuZGlzcG9zZSgpLHRoaXMucG9pbnRWQU8uZGlzcG9zZSgpLHRoaXMucG9pbnRQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMucG9pbnRDb2xvcnMuZGlzcG9zZSgpLHRoaXMucG9pbnRVVnMuZGlzcG9zZSgpLHRoaXMucG9pbnRTaXplcy5kaXNwb3NlKCksdGhpcy5wb2ludElkcy5kaXNwb3NlKCksdGhpcy5jb250b3VyVkFPLmRpc3Bvc2UoKSx0aGlzLmNvbnRvdXJQb3NpdGlvbnMuZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXsxPT09YXJndW1lbnRzLmxlbmd0aCYmKHQ9KGU9dCkuZ2wpO3ZhciByPWUudHJpU2hhZGVyfHxmdW5jdGlvbih0KXt2YXIgZT1uKHQsZy52ZXJ0ZXgsZy5mcmFnbWVudCxudWxsLGcuYXR0cmlidXRlcyk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0yLGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0zLGUuYXR0cmlidXRlcy52ZWN0b3IubG9jYXRpb249NSxlfSh0KSxzPWIodCksbD1vKHQsdShuZXcgVWludDhBcnJheShbMjU1LDI1NSwyNTUsMjU1XSksWzEsMSw0XSkpO2wuZ2VuZXJhdGVNaXBtYXAoKSxsLm1pbkZpbHRlcj10LkxJTkVBUl9NSVBNQVBfTElORUFSLGwubWFnRmlsdGVyPXQuTElORUFSO3ZhciBjPWkodCksaD1pKHQpLGY9aSh0KSxwPWkodCksZD1pKHQpLHY9aSh0KSxtPWEodCxbe2J1ZmZlcjpjLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6dix0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjpmLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6cCx0eXBlOnQuRkxPQVQsc2l6ZToyfSx7YnVmZmVyOmQsdHlwZTp0LkZMT0FULHNpemU6M30se2J1ZmZlcjpoLHR5cGU6dC5GTE9BVCxzaXplOjN9XSkseD1pKHQpLF89aSh0KSx3PWkodCksaz1pKHQpLEE9YSh0LFt7YnVmZmVyOngsdHlwZTp0LkZMT0FULHNpemU6M30se2J1ZmZlcjprLHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOl8sdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjp3LHR5cGU6dC5GTE9BVCxzaXplOjJ9XSksVD1pKHQpLE09aSh0KSxTPWkodCksRT1pKHQpLEM9aSh0KSxMPWEodCxbe2J1ZmZlcjpULHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6Qyx0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjpNLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6Uyx0eXBlOnQuRkxPQVQsc2l6ZToyfSx7YnVmZmVyOkUsdHlwZTp0LkZMT0FULHNpemU6MX1dKSx6PWkodCksTz1uZXcgeSh0LGwscixzLGMsaCx2LGYscCxkLG0seCxrLF8sdyxBLFQsQyxNLFMsRSxMLHosYSh0LFt7YnVmZmVyOnosdHlwZTp0LkZMT0FULHNpemU6M31dKSk7cmV0dXJuIE8udXBkYXRlKGUpLE99fSx7XCIuL3NoYWRlcnNcIjoyNDEsY29sb3JtYXA6MTE3LFwiZ2wtYnVmZmVyXCI6MjM4LFwiZ2wtbWF0NC9pbnZlcnRcIjoyNjIsXCJnbC1tYXQ0L211bHRpcGx5XCI6MjY0LFwiZ2wtc2hhZGVyXCI6Mjk4LFwiZ2wtdGV4dHVyZTJkXCI6MzE1LFwiZ2wtdmFvXCI6MzIwLG5kYXJyYXk6NDQzLG5vcm1hbHM6NDQ2LFwic2ltcGxpY2lhbC1jb21wbGV4LWNvbnRvdXJcIjo1MDMsXCJ0eXBlZGFycmF5LXBvb2xcIjo1MzB9XSwyNDE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiZ2xzbGlmeVwiKSxpPW4oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcblxcbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnZlYzMgZ2V0T3J0aG9nb25hbFZlY3Rvcih2ZWMzIHYpIHtcXG4gIC8vIFJldHVybiB1cC12ZWN0b3IgZm9yIG9ubHkteiB2ZWN0b3IuXFxuICAvLyBSZXR1cm4gYXggKyBieSArIGN6ID0gMCwgYSBwb2ludCB0aGF0IGxpZXMgb24gdGhlIHBsYW5lIHRoYXQgaGFzIHYgYXMgYSBub3JtYWwgYW5kIHRoYXQgaXNuJ3QgKDAsMCwwKS5cXG4gIC8vIEZyb20gdGhlIGFib3ZlIGlmLXN0YXRlbWVudCB3ZSBoYXZlIHx8YXx8ID4gMCAgVSAgfHxifHwgPiAwLlxcbiAgLy8gQXNzaWduIHogPSAwLCB4ID0gLWIsIHkgPSBhOlxcbiAgLy8gYSotYiArIGIqYSArIGMqMCA9IC1iYSArIGJhICsgMCA9IDBcXG4gIGlmICh2Lngqdi54ID4gdi56KnYueiB8fCB2Lnkqdi55ID4gdi56KnYueikge1xcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoLXYueSwgdi54LCAwLjApKTtcXG4gIH0gZWxzZSB7XFxuICAgIHJldHVybiBub3JtYWxpemUodmVjMygwLjAsIHYueiwgLXYueSkpO1xcbiAgfVxcbn1cXG5cXG4vLyBDYWxjdWxhdGUgdGhlIGNvbmUgdmVydGV4IGFuZCBub3JtYWwgYXQgdGhlIGdpdmVuIGluZGV4Llxcbi8vXFxuLy8gVGhlIHJldHVybmVkIHZlcnRleCBpcyBmb3IgYSBjb25lIHdpdGggaXRzIHRvcCBhdCBvcmlnaW4gYW5kIGhlaWdodCBvZiAxLjAsXFxuLy8gcG9pbnRpbmcgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgdmVjdG9yIGF0dHJpYnV0ZS5cXG4vL1xcbi8vIEVhY2ggY29uZSBpcyBtYWRlIHVwIG9mIGEgdG9wIHZlcnRleCwgYSBjZW50ZXIgYmFzZSB2ZXJ0ZXggYW5kIGJhc2UgcGVyaW1ldGVyIHZlcnRpY2VzLlxcbi8vIFRoZXNlIHZlcnRpY2VzIGFyZSB1c2VkIHRvIG1ha2UgdXAgdGhlIHRyaWFuZ2xlcyBvZiB0aGUgY29uZSBieSB0aGUgZm9sbG93aW5nOlxcbi8vICAgc2VnbWVudCArIDAgdG9wIHZlcnRleFxcbi8vICAgc2VnbWVudCArIDEgcGVyaW1ldGVyIHZlcnRleCBhKzFcXG4vLyAgIHNlZ21lbnQgKyAyIHBlcmltZXRlciB2ZXJ0ZXggYVxcbi8vICAgc2VnbWVudCArIDMgY2VudGVyIGJhc2UgdmVydGV4XFxuLy8gICBzZWdtZW50ICsgNCBwZXJpbWV0ZXIgdmVydGV4IGFcXG4vLyAgIHNlZ21lbnQgKyA1IHBlcmltZXRlciB2ZXJ0ZXggYSsxXFxuLy8gV2hlcmUgc2VnbWVudCBpcyB0aGUgbnVtYmVyIG9mIHRoZSByYWRpYWwgc2VnbWVudCAqIDYgYW5kIGEgaXMgdGhlIGFuZ2xlIGF0IHRoYXQgcmFkaWFsIHNlZ21lbnQuXFxuLy8gVG8gZ28gZnJvbSBpbmRleCB0byBzZWdtZW50LCBmbG9vcihpbmRleCAvIDYpXFxuLy8gVG8gZ28gZnJvbSBzZWdtZW50IHRvIGFuZ2xlLCAyKnBpICogKHNlZ21lbnQvc2VnbWVudENvdW50KVxcbi8vIFRvIGdvIGZyb20gaW5kZXggdG8gc2VnbWVudCBpbmRleCwgaW5kZXggLSAoc2VnbWVudCo2KVxcbi8vXFxudmVjMyBnZXRDb25lUG9zaXRpb24odmVjMyBkLCBmbG9hdCByYXdJbmRleCwgZmxvYXQgY29uZU9mZnNldCwgb3V0IHZlYzMgbm9ybWFsKSB7XFxuXFxuICBjb25zdCBmbG9hdCBzZWdtZW50Q291bnQgPSA4LjA7XFxuXFxuICBmbG9hdCBpbmRleCA9IHJhd0luZGV4IC0gZmxvb3IocmF3SW5kZXggL1xcbiAgICAoc2VnbWVudENvdW50ICogNi4wKSkgKlxcbiAgICAoc2VnbWVudENvdW50ICogNi4wKTtcXG5cXG4gIGZsb2F0IHNlZ21lbnQgPSBmbG9vcigwLjAwMSArIGluZGV4LzYuMCk7XFxuICBmbG9hdCBzZWdtZW50SW5kZXggPSBpbmRleCAtIChzZWdtZW50KjYuMCk7XFxuXFxuICBub3JtYWwgPSAtbm9ybWFsaXplKGQpO1xcblxcbiAgaWYgKHNlZ21lbnRJbmRleCA+IDIuOTkgJiYgc2VnbWVudEluZGV4IDwgMy4wMSkge1xcbiAgICByZXR1cm4gbWl4KHZlYzMoMC4wKSwgLWQsIGNvbmVPZmZzZXQpO1xcbiAgfVxcblxcbiAgZmxvYXQgbmV4dEFuZ2xlID0gKFxcbiAgICAoc2VnbWVudEluZGV4ID4gMC45OSAmJiAgc2VnbWVudEluZGV4IDwgMS4wMSkgfHxcXG4gICAgKHNlZ21lbnRJbmRleCA+IDQuOTkgJiYgIHNlZ21lbnRJbmRleCA8IDUuMDEpXFxuICApID8gMS4wIDogMC4wO1xcbiAgZmxvYXQgYW5nbGUgPSAyLjAgKiAzLjE0MTU5ICogKChzZWdtZW50ICsgbmV4dEFuZ2xlKSAvIHNlZ21lbnRDb3VudCk7XFxuXFxuICB2ZWMzIHYxID0gbWl4KGQsIHZlYzMoMC4wKSwgY29uZU9mZnNldCk7XFxuICB2ZWMzIHYyID0gdjEgLSBkO1xcblxcbiAgdmVjMyB1ID0gZ2V0T3J0aG9nb25hbFZlY3RvcihkKTtcXG4gIHZlYzMgdiA9IG5vcm1hbGl6ZShjcm9zcyh1LCBkKSk7XFxuXFxuICB2ZWMzIHggPSB1ICogY29zKGFuZ2xlKSAqIGxlbmd0aChkKSowLjI1O1xcbiAgdmVjMyB5ID0gdiAqIHNpbihhbmdsZSkgKiBsZW5ndGgoZCkqMC4yNTtcXG4gIHZlYzMgdjMgPSB2MiArIHggKyB5O1xcbiAgaWYgKHNlZ21lbnRJbmRleCA8IDMuMCkge1xcbiAgICB2ZWMzIHR4ID0gdSAqIHNpbihhbmdsZSk7XFxuICAgIHZlYzMgdHkgPSB2ICogLWNvcyhhbmdsZSk7XFxuICAgIHZlYzMgdGFuZ2VudCA9IHR4ICsgdHk7XFxuICAgIG5vcm1hbCA9IG5vcm1hbGl6ZShjcm9zcyh2MyAtIHYxLCB0YW5nZW50KSk7XFxuICB9XFxuXFxuICBpZiAoc2VnbWVudEluZGV4ID09IDAuMCkge1xcbiAgICByZXR1cm4gbWl4KGQsIHZlYzMoMC4wKSwgY29uZU9mZnNldCk7XFxuICB9XFxuICByZXR1cm4gdjM7XFxufVxcblxcbmF0dHJpYnV0ZSB2ZWMzIHZlY3RvcjtcXG5hdHRyaWJ1dGUgdmVjNCBjb2xvciwgcG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgdXY7XFxudW5pZm9ybSBmbG9hdCB2ZWN0b3JTY2FsZTtcXG51bmlmb3JtIGZsb2F0IGNvbmVTY2FsZTtcXG5cXG51bmlmb3JtIGZsb2F0IGNvbmVPZmZzZXQ7XFxuXFxudW5pZm9ybSBtYXQ0IG1vZGVsXFxuICAgICAgICAgICAsIHZpZXdcXG4gICAgICAgICAgICwgcHJvamVjdGlvblxcbiAgICAgICAgICAgLCBpbnZlcnNlTW9kZWw7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uXFxuICAgICAgICAgICAsIGxpZ2h0UG9zaXRpb247XFxuXFxudmFyeWluZyB2ZWMzIGZfbm9ybWFsXFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cXG4gICAgICAgICAgICwgZl9leWVEaXJlY3Rpb25cXG4gICAgICAgICAgICwgZl9kYXRhXFxuICAgICAgICAgICAsIGZfcG9zaXRpb247XFxudmFyeWluZyB2ZWM0IGZfY29sb3I7XFxudmFyeWluZyB2ZWMyIGZfdXY7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgLy8gU2NhbGUgdGhlIHZlY3RvciBtYWduaXR1ZGUgdG8gc3RheSBjb25zdGFudCB3aXRoXFxuICAvLyBtb2RlbCAmIHZpZXcgY2hhbmdlcy5cXG4gIHZlYzMgbm9ybWFsO1xcbiAgdmVjMyBYWVogPSBnZXRDb25lUG9zaXRpb24obWF0Myhtb2RlbCkgKiAoKHZlY3RvclNjYWxlICogY29uZVNjYWxlKSAqIHZlY3RvciksIHBvc2l0aW9uLncsIGNvbmVPZmZzZXQsIG5vcm1hbCk7XFxuICB2ZWM0IGNvbmVQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbi54eXosIDEuMCkgKyB2ZWM0KFhZWiwgMC4wKTtcXG5cXG4gIC8vTGlnaHRpbmcgZ2VvbWV0cnkgcGFyYW1ldGVyc1xcbiAgdmVjNCBjYW1lcmFDb29yZGluYXRlID0gdmlldyAqIGNvbmVQb3NpdGlvbjtcXG4gIGNhbWVyYUNvb3JkaW5hdGUueHl6IC89IGNhbWVyYUNvb3JkaW5hdGUudztcXG4gIGZfbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XFxuICBmX2V5ZURpcmVjdGlvbiAgID0gZXllUG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcXG4gIGZfbm9ybWFsID0gbm9ybWFsaXplKCh2ZWM0KG5vcm1hbCwwLjApICogaW52ZXJzZU1vZGVsKS54eXopO1xcblxcbiAgLy8gdmVjNCBtX3Bvc2l0aW9uICA9IG1vZGVsICogdmVjNChjb25lUG9zaXRpb24sIDEuMCk7XFxuICB2ZWM0IHRfcG9zaXRpb24gID0gdmlldyAqIGNvbmVQb3NpdGlvbjtcXG4gIGdsX1Bvc2l0aW9uICAgICAgPSBwcm9qZWN0aW9uICogdF9wb3NpdGlvbjtcXG5cXG4gIGZfY29sb3IgICAgICAgICAgPSBjb2xvcjtcXG4gIGZfZGF0YSAgICAgICAgICAgPSBjb25lUG9zaXRpb24ueHl6O1xcbiAgZl9wb3NpdGlvbiAgICAgICA9IHBvc2l0aW9uLnh5ejtcXG4gIGZfdXYgICAgICAgICAgICAgPSB1djtcXG59XFxuXCJdKSxhPW4oW1wiI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGVcXG5cXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5mbG9hdCBiZWNrbWFubkRpc3RyaWJ1dGlvbihmbG9hdCB4LCBmbG9hdCByb3VnaG5lc3MpIHtcXG4gIGZsb2F0IE5kb3RIID0gbWF4KHgsIDAuMDAwMSk7XFxuICBmbG9hdCBjb3MyQWxwaGEgPSBOZG90SCAqIE5kb3RIO1xcbiAgZmxvYXQgdGFuMkFscGhhID0gKGNvczJBbHBoYSAtIDEuMCkgLyBjb3MyQWxwaGE7XFxuICBmbG9hdCByb3VnaG5lc3MyID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xcbiAgZmxvYXQgZGVub20gPSAzLjE0MTU5MjY1MzU4OTc5MyAqIHJvdWdobmVzczIgKiBjb3MyQWxwaGEgKiBjb3MyQWxwaGE7XFxuICByZXR1cm4gZXhwKHRhbjJBbHBoYSAvIHJvdWdobmVzczIpIC8gZGVub207XFxufVxcblxcbmZsb2F0IGNvb2tUb3JyYW5jZVNwZWN1bGFyKFxcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcXG4gIHZlYzMgdmlld0RpcmVjdGlvbixcXG4gIHZlYzMgc3VyZmFjZU5vcm1hbCxcXG4gIGZsb2F0IHJvdWdobmVzcyxcXG4gIGZsb2F0IGZyZXNuZWwpIHtcXG5cXG4gIGZsb2F0IFZkb3ROID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSwgMC4wKTtcXG4gIGZsb2F0IExkb3ROID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XFxuXFxuICAvL0hhbGYgYW5nbGUgdmVjdG9yXFxuICB2ZWMzIEggPSBub3JtYWxpemUobGlnaHREaXJlY3Rpb24gKyB2aWV3RGlyZWN0aW9uKTtcXG5cXG4gIC8vR2VvbWV0cmljIHRlcm1cXG4gIGZsb2F0IE5kb3RIID0gbWF4KGRvdChzdXJmYWNlTm9ybWFsLCBIKSwgMC4wKTtcXG4gIGZsb2F0IFZkb3RIID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xcbiAgZmxvYXQgTGRvdEggPSBtYXgoZG90KGxpZ2h0RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xcbiAgZmxvYXQgRzEgPSAoMi4wICogTmRvdEggKiBWZG90TikgLyBWZG90SDtcXG4gIGZsb2F0IEcyID0gKDIuMCAqIE5kb3RIICogTGRvdE4pIC8gTGRvdEg7XFxuICBmbG9hdCBHID0gbWluKDEuMCwgbWluKEcxLCBHMikpO1xcbiAgXFxuICAvL0Rpc3RyaWJ1dGlvbiB0ZXJtXFxuICBmbG9hdCBEID0gYmVja21hbm5EaXN0cmlidXRpb24oTmRvdEgsIHJvdWdobmVzcyk7XFxuXFxuICAvL0ZyZXNuZWwgdGVybVxcbiAgZmxvYXQgRiA9IHBvdygxLjAgLSBWZG90TiwgZnJlc25lbCk7XFxuXFxuICAvL011bHRpcGx5IHRlcm1zIGFuZCBkb25lXFxuICByZXR1cm4gIEcgKiBGICogRCAvIG1heCgzLjE0MTU5MjY1ICogVmRvdE4sIDAuMDAwMDAxKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcXG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XFxuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcXG59XFxuXFxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XFxudW5pZm9ybSBmbG9hdCByb3VnaG5lc3NcXG4gICAgICAgICAgICAsIGZyZXNuZWxcXG4gICAgICAgICAgICAsIGthbWJpZW50XFxuICAgICAgICAgICAgLCBrZGlmZnVzZVxcbiAgICAgICAgICAgICwga3NwZWN1bGFyXFxuICAgICAgICAgICAgLCBvcGFjaXR5O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxuXFxudmFyeWluZyB2ZWMzIGZfbm9ybWFsXFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cXG4gICAgICAgICAgICwgZl9leWVEaXJlY3Rpb25cXG4gICAgICAgICAgICwgZl9kYXRhXFxuICAgICAgICAgICAsIGZfcG9zaXRpb247XFxudmFyeWluZyB2ZWM0IGZfY29sb3I7XFxudmFyeWluZyB2ZWMyIGZfdXY7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9wb3NpdGlvbikpIGRpc2NhcmQ7XFxuICB2ZWMzIE4gPSBub3JtYWxpemUoZl9ub3JtYWwpO1xcbiAgdmVjMyBMID0gbm9ybWFsaXplKGZfbGlnaHREaXJlY3Rpb24pO1xcbiAgdmVjMyBWID0gbm9ybWFsaXplKGZfZXllRGlyZWN0aW9uKTtcXG5cXG4gIGlmKGdsX0Zyb250RmFjaW5nKSB7XFxuICAgIE4gPSAtTjtcXG4gIH1cXG5cXG4gIGZsb2F0IHNwZWN1bGFyID0gbWluKDEuMCwgbWF4KDAuMCwgY29va1RvcnJhbmNlU3BlY3VsYXIoTCwgViwgTiwgcm91Z2huZXNzLCBmcmVzbmVsKSkpO1xcbiAgZmxvYXQgZGlmZnVzZSAgPSBtaW4oa2FtYmllbnQgKyBrZGlmZnVzZSAqIG1heChkb3QoTiwgTCksIDAuMCksIDEuMCk7XFxuXFxuICB2ZWM0IHN1cmZhY2VDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dik7XFxuICB2ZWM0IGxpdENvbG9yID0gc3VyZmFjZUNvbG9yLmEgKiB2ZWM0KGRpZmZ1c2UgKiBzdXJmYWNlQ29sb3IucmdiICsga3NwZWN1bGFyICogdmVjMygxLDEsMSkgKiBzcGVjdWxhciwgIDEuMCk7XFxuXFxuICBnbF9GcmFnQ29sb3IgPSBsaXRDb2xvciAqIG9wYWNpdHk7XFxufVxcblwiXSksbz1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG52ZWMzIGdldE9ydGhvZ29uYWxWZWN0b3IodmVjMyB2KSB7XFxuICAvLyBSZXR1cm4gdXAtdmVjdG9yIGZvciBvbmx5LXogdmVjdG9yLlxcbiAgLy8gUmV0dXJuIGF4ICsgYnkgKyBjeiA9IDAsIGEgcG9pbnQgdGhhdCBsaWVzIG9uIHRoZSBwbGFuZSB0aGF0IGhhcyB2IGFzIGEgbm9ybWFsIGFuZCB0aGF0IGlzbid0ICgwLDAsMCkuXFxuICAvLyBGcm9tIHRoZSBhYm92ZSBpZi1zdGF0ZW1lbnQgd2UgaGF2ZSB8fGF8fCA+IDAgIFUgIHx8Ynx8ID4gMC5cXG4gIC8vIEFzc2lnbiB6ID0gMCwgeCA9IC1iLCB5ID0gYTpcXG4gIC8vIGEqLWIgKyBiKmEgKyBjKjAgPSAtYmEgKyBiYSArIDAgPSAwXFxuICBpZiAodi54KnYueCA+IHYueip2LnogfHwgdi55KnYueSA+IHYueip2LnopIHtcXG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKC12LnksIHYueCwgMC4wKSk7XFxuICB9IGVsc2Uge1xcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoMC4wLCB2LnosIC12LnkpKTtcXG4gIH1cXG59XFxuXFxuLy8gQ2FsY3VsYXRlIHRoZSBjb25lIHZlcnRleCBhbmQgbm9ybWFsIGF0IHRoZSBnaXZlbiBpbmRleC5cXG4vL1xcbi8vIFRoZSByZXR1cm5lZCB2ZXJ0ZXggaXMgZm9yIGEgY29uZSB3aXRoIGl0cyB0b3AgYXQgb3JpZ2luIGFuZCBoZWlnaHQgb2YgMS4wLFxcbi8vIHBvaW50aW5nIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHZlY3RvciBhdHRyaWJ1dGUuXFxuLy9cXG4vLyBFYWNoIGNvbmUgaXMgbWFkZSB1cCBvZiBhIHRvcCB2ZXJ0ZXgsIGEgY2VudGVyIGJhc2UgdmVydGV4IGFuZCBiYXNlIHBlcmltZXRlciB2ZXJ0aWNlcy5cXG4vLyBUaGVzZSB2ZXJ0aWNlcyBhcmUgdXNlZCB0byBtYWtlIHVwIHRoZSB0cmlhbmdsZXMgb2YgdGhlIGNvbmUgYnkgdGhlIGZvbGxvd2luZzpcXG4vLyAgIHNlZ21lbnQgKyAwIHRvcCB2ZXJ0ZXhcXG4vLyAgIHNlZ21lbnQgKyAxIHBlcmltZXRlciB2ZXJ0ZXggYSsxXFxuLy8gICBzZWdtZW50ICsgMiBwZXJpbWV0ZXIgdmVydGV4IGFcXG4vLyAgIHNlZ21lbnQgKyAzIGNlbnRlciBiYXNlIHZlcnRleFxcbi8vICAgc2VnbWVudCArIDQgcGVyaW1ldGVyIHZlcnRleCBhXFxuLy8gICBzZWdtZW50ICsgNSBwZXJpbWV0ZXIgdmVydGV4IGErMVxcbi8vIFdoZXJlIHNlZ21lbnQgaXMgdGhlIG51bWJlciBvZiB0aGUgcmFkaWFsIHNlZ21lbnQgKiA2IGFuZCBhIGlzIHRoZSBhbmdsZSBhdCB0aGF0IHJhZGlhbCBzZWdtZW50Llxcbi8vIFRvIGdvIGZyb20gaW5kZXggdG8gc2VnbWVudCwgZmxvb3IoaW5kZXggLyA2KVxcbi8vIFRvIGdvIGZyb20gc2VnbWVudCB0byBhbmdsZSwgMipwaSAqIChzZWdtZW50L3NlZ21lbnRDb3VudClcXG4vLyBUbyBnbyBmcm9tIGluZGV4IHRvIHNlZ21lbnQgaW5kZXgsIGluZGV4IC0gKHNlZ21lbnQqNilcXG4vL1xcbnZlYzMgZ2V0Q29uZVBvc2l0aW9uKHZlYzMgZCwgZmxvYXQgcmF3SW5kZXgsIGZsb2F0IGNvbmVPZmZzZXQsIG91dCB2ZWMzIG5vcm1hbCkge1xcblxcbiAgY29uc3QgZmxvYXQgc2VnbWVudENvdW50ID0gOC4wO1xcblxcbiAgZmxvYXQgaW5kZXggPSByYXdJbmRleCAtIGZsb29yKHJhd0luZGV4IC9cXG4gICAgKHNlZ21lbnRDb3VudCAqIDYuMCkpICpcXG4gICAgKHNlZ21lbnRDb3VudCAqIDYuMCk7XFxuXFxuICBmbG9hdCBzZWdtZW50ID0gZmxvb3IoMC4wMDEgKyBpbmRleC82LjApO1xcbiAgZmxvYXQgc2VnbWVudEluZGV4ID0gaW5kZXggLSAoc2VnbWVudCo2LjApO1xcblxcbiAgbm9ybWFsID0gLW5vcm1hbGl6ZShkKTtcXG5cXG4gIGlmIChzZWdtZW50SW5kZXggPiAyLjk5ICYmIHNlZ21lbnRJbmRleCA8IDMuMDEpIHtcXG4gICAgcmV0dXJuIG1peCh2ZWMzKDAuMCksIC1kLCBjb25lT2Zmc2V0KTtcXG4gIH1cXG5cXG4gIGZsb2F0IG5leHRBbmdsZSA9IChcXG4gICAgKHNlZ21lbnRJbmRleCA+IDAuOTkgJiYgIHNlZ21lbnRJbmRleCA8IDEuMDEpIHx8XFxuICAgIChzZWdtZW50SW5kZXggPiA0Ljk5ICYmICBzZWdtZW50SW5kZXggPCA1LjAxKVxcbiAgKSA/IDEuMCA6IDAuMDtcXG4gIGZsb2F0IGFuZ2xlID0gMi4wICogMy4xNDE1OSAqICgoc2VnbWVudCArIG5leHRBbmdsZSkgLyBzZWdtZW50Q291bnQpO1xcblxcbiAgdmVjMyB2MSA9IG1peChkLCB2ZWMzKDAuMCksIGNvbmVPZmZzZXQpO1xcbiAgdmVjMyB2MiA9IHYxIC0gZDtcXG5cXG4gIHZlYzMgdSA9IGdldE9ydGhvZ29uYWxWZWN0b3IoZCk7XFxuICB2ZWMzIHYgPSBub3JtYWxpemUoY3Jvc3ModSwgZCkpO1xcblxcbiAgdmVjMyB4ID0gdSAqIGNvcyhhbmdsZSkgKiBsZW5ndGgoZCkqMC4yNTtcXG4gIHZlYzMgeSA9IHYgKiBzaW4oYW5nbGUpICogbGVuZ3RoKGQpKjAuMjU7XFxuICB2ZWMzIHYzID0gdjIgKyB4ICsgeTtcXG4gIGlmIChzZWdtZW50SW5kZXggPCAzLjApIHtcXG4gICAgdmVjMyB0eCA9IHUgKiBzaW4oYW5nbGUpO1xcbiAgICB2ZWMzIHR5ID0gdiAqIC1jb3MoYW5nbGUpO1xcbiAgICB2ZWMzIHRhbmdlbnQgPSB0eCArIHR5O1xcbiAgICBub3JtYWwgPSBub3JtYWxpemUoY3Jvc3ModjMgLSB2MSwgdGFuZ2VudCkpO1xcbiAgfVxcblxcbiAgaWYgKHNlZ21lbnRJbmRleCA9PSAwLjApIHtcXG4gICAgcmV0dXJuIG1peChkLCB2ZWMzKDAuMCksIGNvbmVPZmZzZXQpO1xcbiAgfVxcbiAgcmV0dXJuIHYzO1xcbn1cXG5cXG5hdHRyaWJ1dGUgdmVjMyB2ZWN0b3I7XFxuYXR0cmlidXRlIHZlYzQgcG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzQgaWQ7XFxuXFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcblxcbnVuaWZvcm0gZmxvYXQgdmVjdG9yU2NhbGU7XFxudW5pZm9ybSBmbG9hdCBjb25lU2NhbGU7XFxudW5pZm9ybSBmbG9hdCBjb25lT2Zmc2V0O1xcblxcbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjNCBmX2lkO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzMgbm9ybWFsO1xcbiAgdmVjMyBYWVogPSBnZXRDb25lUG9zaXRpb24obWF0Myhtb2RlbCkgKiAoKHZlY3RvclNjYWxlICogY29uZVNjYWxlKSAqIHZlY3RvciksIHBvc2l0aW9uLncsIGNvbmVPZmZzZXQsIG5vcm1hbCk7XFxuICB2ZWM0IGNvbmVQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbi54eXosIDEuMCkgKyB2ZWM0KFhZWiwgMC4wKTtcXG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBjb25lUG9zaXRpb247XFxuICBmX2lkICAgICAgICA9IGlkO1xcbiAgZl9wb3NpdGlvbiAgPSBwb3NpdGlvbi54eXo7XFxufVxcblwiXSkscz1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XFxuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XFxufVxcblxcbnVuaWZvcm0gdmVjMyAgY2xpcEJvdW5kc1syXTtcXG51bmlmb3JtIGZsb2F0IHBpY2tJZDtcXG5cXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzQgZl9pZDtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBmX3Bvc2l0aW9uKSkgZGlzY2FyZDtcXG5cXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLCBmX2lkLnh5eik7XFxufVwiXSk7ci5tZXNoU2hhZGVyPXt2ZXJ0ZXg6aSxmcmFnbWVudDphLGF0dHJpYnV0ZXM6W3tuYW1lOlwicG9zaXRpb25cIix0eXBlOlwidmVjNFwifSx7bmFtZTpcIm5vcm1hbFwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwiY29sb3JcIix0eXBlOlwidmVjNFwifSx7bmFtZTpcInV2XCIsdHlwZTpcInZlYzJcIn0se25hbWU6XCJ2ZWN0b3JcIix0eXBlOlwidmVjM1wifV19LHIucGlja1NoYWRlcj17dmVydGV4Om8sZnJhZ21lbnQ6cyxhdHRyaWJ1dGVzOlt7bmFtZTpcInBvc2l0aW9uXCIsdHlwZTpcInZlYzRcIn0se25hbWU6XCJpZFwiLHR5cGU6XCJ2ZWM0XCJ9LHtuYW1lOlwidmVjdG9yXCIsdHlwZTpcInZlYzNcIn1dfX0se2dsc2xpZnk6NDAyfV0sMjQyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXswOlwiTk9ORVwiLDE6XCJPTkVcIiwyOlwiTElORV9MT09QXCIsMzpcIkxJTkVfU1RSSVBcIiw0OlwiVFJJQU5HTEVTXCIsNTpcIlRSSUFOR0xFX1NUUklQXCIsNjpcIlRSSUFOR0xFX0ZBTlwiLDI1NjpcIkRFUFRIX0JVRkZFUl9CSVRcIiw1MTI6XCJORVZFUlwiLDUxMzpcIkxFU1NcIiw1MTQ6XCJFUVVBTFwiLDUxNTpcIkxFUVVBTFwiLDUxNjpcIkdSRUFURVJcIiw1MTc6XCJOT1RFUVVBTFwiLDUxODpcIkdFUVVBTFwiLDUxOTpcIkFMV0FZU1wiLDc2ODpcIlNSQ19DT0xPUlwiLDc2OTpcIk9ORV9NSU5VU19TUkNfQ09MT1JcIiw3NzA6XCJTUkNfQUxQSEFcIiw3NzE6XCJPTkVfTUlOVVNfU1JDX0FMUEhBXCIsNzcyOlwiRFNUX0FMUEhBXCIsNzczOlwiT05FX01JTlVTX0RTVF9BTFBIQVwiLDc3NDpcIkRTVF9DT0xPUlwiLDc3NTpcIk9ORV9NSU5VU19EU1RfQ09MT1JcIiw3NzY6XCJTUkNfQUxQSEFfU0FUVVJBVEVcIiwxMDI0OlwiU1RFTkNJTF9CVUZGRVJfQklUXCIsMTAyODpcIkZST05UXCIsMTAyOTpcIkJBQ0tcIiwxMDMyOlwiRlJPTlRfQU5EX0JBQ0tcIiwxMjgwOlwiSU5WQUxJRF9FTlVNXCIsMTI4MTpcIklOVkFMSURfVkFMVUVcIiwxMjgyOlwiSU5WQUxJRF9PUEVSQVRJT05cIiwxMjg1OlwiT1VUX09GX01FTU9SWVwiLDEyODY6XCJJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTlwiLDIzMDQ6XCJDV1wiLDIzMDU6XCJDQ1dcIiwyODQ5OlwiTElORV9XSURUSFwiLDI4ODQ6XCJDVUxMX0ZBQ0VcIiwyODg1OlwiQ1VMTF9GQUNFX01PREVcIiwyODg2OlwiRlJPTlRfRkFDRVwiLDI5Mjg6XCJERVBUSF9SQU5HRVwiLDI5Mjk6XCJERVBUSF9URVNUXCIsMjkzMDpcIkRFUFRIX1dSSVRFTUFTS1wiLDI5MzE6XCJERVBUSF9DTEVBUl9WQUxVRVwiLDI5MzI6XCJERVBUSF9GVU5DXCIsMjk2MDpcIlNURU5DSUxfVEVTVFwiLDI5NjE6XCJTVEVOQ0lMX0NMRUFSX1ZBTFVFXCIsMjk2MjpcIlNURU5DSUxfRlVOQ1wiLDI5NjM6XCJTVEVOQ0lMX1ZBTFVFX01BU0tcIiwyOTY0OlwiU1RFTkNJTF9GQUlMXCIsMjk2NTpcIlNURU5DSUxfUEFTU19ERVBUSF9GQUlMXCIsMjk2NjpcIlNURU5DSUxfUEFTU19ERVBUSF9QQVNTXCIsMjk2NzpcIlNURU5DSUxfUkVGXCIsMjk2ODpcIlNURU5DSUxfV1JJVEVNQVNLXCIsMjk3ODpcIlZJRVdQT1JUXCIsMzAyNDpcIkRJVEhFUlwiLDMwNDI6XCJCTEVORFwiLDMwODg6XCJTQ0lTU09SX0JPWFwiLDMwODk6XCJTQ0lTU09SX1RFU1RcIiwzMTA2OlwiQ09MT1JfQ0xFQVJfVkFMVUVcIiwzMTA3OlwiQ09MT1JfV1JJVEVNQVNLXCIsMzMxNzpcIlVOUEFDS19BTElHTk1FTlRcIiwzMzMzOlwiUEFDS19BTElHTk1FTlRcIiwzMzc5OlwiTUFYX1RFWFRVUkVfU0laRVwiLDMzODY6XCJNQVhfVklFV1BPUlRfRElNU1wiLDM0MDg6XCJTVUJQSVhFTF9CSVRTXCIsMzQxMDpcIlJFRF9CSVRTXCIsMzQxMTpcIkdSRUVOX0JJVFNcIiwzNDEyOlwiQkxVRV9CSVRTXCIsMzQxMzpcIkFMUEhBX0JJVFNcIiwzNDE0OlwiREVQVEhfQklUU1wiLDM0MTU6XCJTVEVOQ0lMX0JJVFNcIiwzNTUzOlwiVEVYVFVSRV8yRFwiLDQzNTI6XCJET05UX0NBUkVcIiw0MzUzOlwiRkFTVEVTVFwiLDQzNTQ6XCJOSUNFU1RcIiw1MTIwOlwiQllURVwiLDUxMjE6XCJVTlNJR05FRF9CWVRFXCIsNTEyMjpcIlNIT1JUXCIsNTEyMzpcIlVOU0lHTkVEX1NIT1JUXCIsNTEyNDpcIklOVFwiLDUxMjU6XCJVTlNJR05FRF9JTlRcIiw1MTI2OlwiRkxPQVRcIiw1Mzg2OlwiSU5WRVJUXCIsNTg5MDpcIlRFWFRVUkVcIiw2NDAxOlwiU1RFTkNJTF9JTkRFWFwiLDY0MDI6XCJERVBUSF9DT01QT05FTlRcIiw2NDA2OlwiQUxQSEFcIiw2NDA3OlwiUkdCXCIsNjQwODpcIlJHQkFcIiw2NDA5OlwiTFVNSU5BTkNFXCIsNjQxMDpcIkxVTUlOQU5DRV9BTFBIQVwiLDc2ODA6XCJLRUVQXCIsNzY4MTpcIlJFUExBQ0VcIiw3NjgyOlwiSU5DUlwiLDc2ODM6XCJERUNSXCIsNzkzNjpcIlZFTkRPUlwiLDc5Mzc6XCJSRU5ERVJFUlwiLDc5Mzg6XCJWRVJTSU9OXCIsOTcyODpcIk5FQVJFU1RcIiw5NzI5OlwiTElORUFSXCIsOTk4NDpcIk5FQVJFU1RfTUlQTUFQX05FQVJFU1RcIiw5OTg1OlwiTElORUFSX01JUE1BUF9ORUFSRVNUXCIsOTk4NjpcIk5FQVJFU1RfTUlQTUFQX0xJTkVBUlwiLDk5ODc6XCJMSU5FQVJfTUlQTUFQX0xJTkVBUlwiLDEwMjQwOlwiVEVYVFVSRV9NQUdfRklMVEVSXCIsMTAyNDE6XCJURVhUVVJFX01JTl9GSUxURVJcIiwxMDI0MjpcIlRFWFRVUkVfV1JBUF9TXCIsMTAyNDM6XCJURVhUVVJFX1dSQVBfVFwiLDEwNDk3OlwiUkVQRUFUXCIsMTA3NTI6XCJQT0xZR09OX09GRlNFVF9VTklUU1wiLDE2Mzg0OlwiQ09MT1JfQlVGRkVSX0JJVFwiLDMyNzY5OlwiQ09OU1RBTlRfQ09MT1JcIiwzMjc3MDpcIk9ORV9NSU5VU19DT05TVEFOVF9DT0xPUlwiLDMyNzcxOlwiQ09OU1RBTlRfQUxQSEFcIiwzMjc3MjpcIk9ORV9NSU5VU19DT05TVEFOVF9BTFBIQVwiLDMyNzczOlwiQkxFTkRfQ09MT1JcIiwzMjc3NDpcIkZVTkNfQUREXCIsMzI3Nzc6XCJCTEVORF9FUVVBVElPTl9SR0JcIiwzMjc3ODpcIkZVTkNfU1VCVFJBQ1RcIiwzMjc3OTpcIkZVTkNfUkVWRVJTRV9TVUJUUkFDVFwiLDMyODE5OlwiVU5TSUdORURfU0hPUlRfNF80XzRfNFwiLDMyODIwOlwiVU5TSUdORURfU0hPUlRfNV81XzVfMVwiLDMyODIzOlwiUE9MWUdPTl9PRkZTRVRfRklMTFwiLDMyODI0OlwiUE9MWUdPTl9PRkZTRVRfRkFDVE9SXCIsMzI4NTQ6XCJSR0JBNFwiLDMyODU1OlwiUkdCNV9BMVwiLDMyODczOlwiVEVYVFVSRV9CSU5ESU5HXzJEXCIsMzI5MjY6XCJTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0VcIiwzMjkyODpcIlNBTVBMRV9DT1ZFUkFHRVwiLDMyOTM2OlwiU0FNUExFX0JVRkZFUlNcIiwzMjkzNzpcIlNBTVBMRVNcIiwzMjkzODpcIlNBTVBMRV9DT1ZFUkFHRV9WQUxVRVwiLDMyOTM5OlwiU0FNUExFX0NPVkVSQUdFX0lOVkVSVFwiLDMyOTY4OlwiQkxFTkRfRFNUX1JHQlwiLDMyOTY5OlwiQkxFTkRfU1JDX1JHQlwiLDMyOTcwOlwiQkxFTkRfRFNUX0FMUEhBXCIsMzI5NzE6XCJCTEVORF9TUkNfQUxQSEFcIiwzMzA3MTpcIkNMQU1QX1RPX0VER0VcIiwzMzE3MDpcIkdFTkVSQVRFX01JUE1BUF9ISU5UXCIsMzMxODk6XCJERVBUSF9DT01QT05FTlQxNlwiLDMzMzA2OlwiREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UXCIsMzM2MzU6XCJVTlNJR05FRF9TSE9SVF81XzZfNVwiLDMzNjQ4OlwiTUlSUk9SRURfUkVQRUFUXCIsMzM5MDE6XCJBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VcIiwzMzkwMjpcIkFMSUFTRURfTElORV9XSURUSF9SQU5HRVwiLDMzOTg0OlwiVEVYVFVSRTBcIiwzMzk4NTpcIlRFWFRVUkUxXCIsMzM5ODY6XCJURVhUVVJFMlwiLDMzOTg3OlwiVEVYVFVSRTNcIiwzMzk4ODpcIlRFWFRVUkU0XCIsMzM5ODk6XCJURVhUVVJFNVwiLDMzOTkwOlwiVEVYVFVSRTZcIiwzMzk5MTpcIlRFWFRVUkU3XCIsMzM5OTI6XCJURVhUVVJFOFwiLDMzOTkzOlwiVEVYVFVSRTlcIiwzMzk5NDpcIlRFWFRVUkUxMFwiLDMzOTk1OlwiVEVYVFVSRTExXCIsMzM5OTY6XCJURVhUVVJFMTJcIiwzMzk5NzpcIlRFWFRVUkUxM1wiLDMzOTk4OlwiVEVYVFVSRTE0XCIsMzM5OTk6XCJURVhUVVJFMTVcIiwzNDAwMDpcIlRFWFRVUkUxNlwiLDM0MDAxOlwiVEVYVFVSRTE3XCIsMzQwMDI6XCJURVhUVVJFMThcIiwzNDAwMzpcIlRFWFRVUkUxOVwiLDM0MDA0OlwiVEVYVFVSRTIwXCIsMzQwMDU6XCJURVhUVVJFMjFcIiwzNDAwNjpcIlRFWFRVUkUyMlwiLDM0MDA3OlwiVEVYVFVSRTIzXCIsMzQwMDg6XCJURVhUVVJFMjRcIiwzNDAwOTpcIlRFWFRVUkUyNVwiLDM0MDEwOlwiVEVYVFVSRTI2XCIsMzQwMTE6XCJURVhUVVJFMjdcIiwzNDAxMjpcIlRFWFRVUkUyOFwiLDM0MDEzOlwiVEVYVFVSRTI5XCIsMzQwMTQ6XCJURVhUVVJFMzBcIiwzNDAxNTpcIlRFWFRVUkUzMVwiLDM0MDE2OlwiQUNUSVZFX1RFWFRVUkVcIiwzNDAyNDpcIk1BWF9SRU5ERVJCVUZGRVJfU0laRVwiLDM0MDQxOlwiREVQVEhfU1RFTkNJTFwiLDM0MDU1OlwiSU5DUl9XUkFQXCIsMzQwNTY6XCJERUNSX1dSQVBcIiwzNDA2NzpcIlRFWFRVUkVfQ1VCRV9NQVBcIiwzNDA2ODpcIlRFWFRVUkVfQklORElOR19DVUJFX01BUFwiLDM0MDY5OlwiVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YXCIsMzQwNzA6XCJURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1hcIiwzNDA3MTpcIlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWVwiLDM0MDcyOlwiVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZXCIsMzQwNzM6XCJURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1pcIiwzNDA3NDpcIlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWlwiLDM0MDc2OlwiTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRVwiLDM0MzM4OlwiVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEXCIsMzQzMzk6XCJWRVJURVhfQVRUUklCX0FSUkFZX1NJWkVcIiwzNDM0MDpcIlZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFXCIsMzQzNDE6XCJWRVJURVhfQVRUUklCX0FSUkFZX1RZUEVcIiwzNDM0MjpcIkNVUlJFTlRfVkVSVEVYX0FUVFJJQlwiLDM0MzczOlwiVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSXCIsMzQ0NjY6XCJOVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFNcIiwzNDQ2NzpcIkNPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTXCIsMzQ2NjA6XCJCVUZGRVJfU0laRVwiLDM0NjYxOlwiQlVGRkVSX1VTQUdFXCIsMzQ4MTY6XCJTVEVOQ0lMX0JBQ0tfRlVOQ1wiLDM0ODE3OlwiU1RFTkNJTF9CQUNLX0ZBSUxcIiwzNDgxODpcIlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUxcIiwzNDgxOTpcIlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1NcIiwzNDg3NzpcIkJMRU5EX0VRVUFUSU9OX0FMUEhBXCIsMzQ5MjE6XCJNQVhfVkVSVEVYX0FUVFJJQlNcIiwzNDkyMjpcIlZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRFwiLDM0OTMwOlwiTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNcIiwzNDk2MjpcIkFSUkFZX0JVRkZFUlwiLDM0OTYzOlwiRUxFTUVOVF9BUlJBWV9CVUZGRVJcIiwzNDk2NDpcIkFSUkFZX0JVRkZFUl9CSU5ESU5HXCIsMzQ5NjU6XCJFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HXCIsMzQ5NzU6XCJWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HXCIsMzUwNDA6XCJTVFJFQU1fRFJBV1wiLDM1MDQ0OlwiU1RBVElDX0RSQVdcIiwzNTA0ODpcIkRZTkFNSUNfRFJBV1wiLDM1NjMyOlwiRlJBR01FTlRfU0hBREVSXCIsMzU2MzM6XCJWRVJURVhfU0hBREVSXCIsMzU2NjA6XCJNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNcIiwzNTY2MTpcIk1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTXCIsMzU2NjM6XCJTSEFERVJfVFlQRVwiLDM1NjY0OlwiRkxPQVRfVkVDMlwiLDM1NjY1OlwiRkxPQVRfVkVDM1wiLDM1NjY2OlwiRkxPQVRfVkVDNFwiLDM1NjY3OlwiSU5UX1ZFQzJcIiwzNTY2ODpcIklOVF9WRUMzXCIsMzU2Njk6XCJJTlRfVkVDNFwiLDM1NjcwOlwiQk9PTFwiLDM1NjcxOlwiQk9PTF9WRUMyXCIsMzU2NzI6XCJCT09MX1ZFQzNcIiwzNTY3MzpcIkJPT0xfVkVDNFwiLDM1Njc0OlwiRkxPQVRfTUFUMlwiLDM1Njc1OlwiRkxPQVRfTUFUM1wiLDM1Njc2OlwiRkxPQVRfTUFUNFwiLDM1Njc4OlwiU0FNUExFUl8yRFwiLDM1NjgwOlwiU0FNUExFUl9DVUJFXCIsMzU3MTI6XCJERUxFVEVfU1RBVFVTXCIsMzU3MTM6XCJDT01QSUxFX1NUQVRVU1wiLDM1NzE0OlwiTElOS19TVEFUVVNcIiwzNTcxNTpcIlZBTElEQVRFX1NUQVRVU1wiLDM1NzE2OlwiSU5GT19MT0dfTEVOR1RIXCIsMzU3MTc6XCJBVFRBQ0hFRF9TSEFERVJTXCIsMzU3MTg6XCJBQ1RJVkVfVU5JRk9STVNcIiwzNTcxOTpcIkFDVElWRV9VTklGT1JNX01BWF9MRU5HVEhcIiwzNTcyMDpcIlNIQURFUl9TT1VSQ0VfTEVOR1RIXCIsMzU3MjE6XCJBQ1RJVkVfQVRUUklCVVRFU1wiLDM1NzIyOlwiQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIXCIsMzU3MjQ6XCJTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT05cIiwzNTcyNTpcIkNVUlJFTlRfUFJPR1JBTVwiLDM2MDAzOlwiU1RFTkNJTF9CQUNLX1JFRlwiLDM2MDA0OlwiU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0tcIiwzNjAwNTpcIlNURU5DSUxfQkFDS19XUklURU1BU0tcIiwzNjAwNjpcIkZSQU1FQlVGRkVSX0JJTkRJTkdcIiwzNjAwNzpcIlJFTkRFUkJVRkZFUl9CSU5ESU5HXCIsMzYwNDg6XCJGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFXCIsMzYwNDk6XCJGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FXCIsMzYwNTA6XCJGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUxcIiwzNjA1MTpcIkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFXCIsMzYwNTM6XCJGUkFNRUJVRkZFUl9DT01QTEVURVwiLDM2MDU0OlwiRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UXCIsMzYwNTU6XCJGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVFwiLDM2MDU3OlwiRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TXCIsMzYwNjE6XCJGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRFwiLDM2MDY0OlwiQ09MT1JfQVRUQUNITUVOVDBcIiwzNjA5NjpcIkRFUFRIX0FUVEFDSE1FTlRcIiwzNjEyODpcIlNURU5DSUxfQVRUQUNITUVOVFwiLDM2MTYwOlwiRlJBTUVCVUZGRVJcIiwzNjE2MTpcIlJFTkRFUkJVRkZFUlwiLDM2MTYyOlwiUkVOREVSQlVGRkVSX1dJRFRIXCIsMzYxNjM6XCJSRU5ERVJCVUZGRVJfSEVJR0hUXCIsMzYxNjQ6XCJSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUXCIsMzYxNjg6XCJTVEVOQ0lMX0lOREVYOFwiLDM2MTc2OlwiUkVOREVSQlVGRkVSX1JFRF9TSVpFXCIsMzYxNzc6XCJSRU5ERVJCVUZGRVJfR1JFRU5fU0laRVwiLDM2MTc4OlwiUkVOREVSQlVGRkVSX0JMVUVfU0laRVwiLDM2MTc5OlwiUkVOREVSQlVGRkVSX0FMUEhBX1NJWkVcIiwzNjE4MDpcIlJFTkRFUkJVRkZFUl9ERVBUSF9TSVpFXCIsMzYxODE6XCJSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFXCIsMzYxOTQ6XCJSR0I1NjVcIiwzNjMzNjpcIkxPV19GTE9BVFwiLDM2MzM3OlwiTUVESVVNX0ZMT0FUXCIsMzYzMzg6XCJISUdIX0ZMT0FUXCIsMzYzMzk6XCJMT1dfSU5UXCIsMzYzNDA6XCJNRURJVU1fSU5UXCIsMzYzNDE6XCJISUdIX0lOVFwiLDM2MzQ2OlwiU0hBREVSX0NPTVBJTEVSXCIsMzYzNDc6XCJNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SU1wiLDM2MzQ4OlwiTUFYX1ZBUllJTkdfVkVDVE9SU1wiLDM2MzQ5OlwiTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SU1wiLDM3NDQwOlwiVU5QQUNLX0ZMSVBfWV9XRUJHTFwiLDM3NDQxOlwiVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMXCIsMzc0NDI6XCJDT05URVhUX0xPU1RfV0VCR0xcIiwzNzQ0MzpcIlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0xcIiwzNzQ0NDpcIkJST1dTRVJfREVGQVVMVF9XRUJHTFwifX0se31dLDI0MzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuLzEuMC9udW1iZXJzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gblt0XX19LHtcIi4vMS4wL251bWJlcnNcIjoyNDJ9XSwyNDQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPW4oZSksbz1pKGUsW3tidWZmZXI6cix0eXBlOmUuRkxPQVQsc2l6ZTozLG9mZnNldDowLHN0cmlkZTo0MH0se2J1ZmZlcjpyLHR5cGU6ZS5GTE9BVCxzaXplOjQsb2Zmc2V0OjEyLHN0cmlkZTo0MH0se2J1ZmZlcjpyLHR5cGU6ZS5GTE9BVCxzaXplOjMsb2Zmc2V0OjI4LHN0cmlkZTo0MH1dKSxsPWEoZSk7bC5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsbC5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTEsbC5hdHRyaWJ1dGVzLm9mZnNldC5sb2NhdGlvbj0yO3ZhciBjPW5ldyBzKGUscixvLGwpO3JldHVybiBjLnVwZGF0ZSh0KSxjfTt2YXIgbj10KFwiZ2wtYnVmZmVyXCIpLGk9dChcImdsLXZhb1wiKSxhPXQoXCIuL3NoYWRlcnMvaW5kZXhcIiksbz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24gcyh0LGUscixuKXt0aGlzLmdsPXQsdGhpcy5zaGFkZXI9bix0aGlzLmJ1ZmZlcj1lLHRoaXMudmFvPXIsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5jbGlwQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMubGluZVdpZHRoPVsxLDEsMV0sdGhpcy5jYXBTaXplPVsxMCwxMCwxMF0sdGhpcy5saW5lQ291bnQ9WzAsMCwwXSx0aGlzLmxpbmVPZmZzZXQ9WzAsMCwwXSx0aGlzLm9wYWNpdHk9MSx0aGlzLmhhc0FscGhhPSExfXZhciBsPXMucHJvdG90eXBlO2Z1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9MDtyPDM7KytyKXRbMF1bcl09TWF0aC5taW4odFswXVtyXSxlW3JdKSx0WzFdW3JdPU1hdGgubWF4KHRbMV1bcl0sZVtyXSl9bC5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLmhhc0FscGhhfSxsLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBbHBoYX0sbC5kcmF3VHJhbnNwYXJlbnQ9bC5kcmF3PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2wscj10aGlzLnNoYWRlci51bmlmb3Jtczt0aGlzLnNoYWRlci5iaW5kKCk7dmFyIG49ci52aWV3PXQudmlld3x8byxpPXIucHJvamVjdGlvbj10LnByb2plY3Rpb258fG87ci5tb2RlbD10Lm1vZGVsfHxvLHIuY2xpcEJvdW5kcz10aGlzLmNsaXBCb3VuZHMsci5vcGFjaXR5PXRoaXMub3BhY2l0eTt2YXIgYT1uWzEyXSxzPW5bMTNdLGw9blsxNF0sYz1uWzE1XSx1PSh0Ll9vcnRob3x8ITE/MjoxKSp0aGlzLnBpeGVsUmF0aW8qKGlbM10qYStpWzddKnMraVsxMV0qbCtpWzE1XSpjKS9lLmRyYXdpbmdCdWZmZXJIZWlnaHQ7dGhpcy52YW8uYmluZCgpO2Zvcih2YXIgaD0wO2g8MzsrK2gpZS5saW5lV2lkdGgodGhpcy5saW5lV2lkdGhbaF0qdGhpcy5waXhlbFJhdGlvKSxyLmNhcFNpemU9dGhpcy5jYXBTaXplW2hdKnUsdGhpcy5saW5lQ291bnRbaF0mJmUuZHJhd0FycmF5cyhlLkxJTkVTLHRoaXMubGluZU9mZnNldFtoXSx0aGlzLmxpbmVDb3VudFtoXSk7dGhpcy52YW8udW5iaW5kKCl9O3ZhciB1PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBBcnJheSgzKSxlPTA7ZTwzOysrZSl7Zm9yKHZhciByPVtdLG49MTtuPD0yOysrbilmb3IodmFyIGk9LTE7aTw9MTtpKz0yKXt2YXIgYT1bMCwwLDBdO2FbKG4rZSklM109aSxyLnB1c2goYSl9dFtlXT1yfXJldHVybiB0fSgpO2Z1bmN0aW9uIGgodCxlLHIsbil7Zm9yKHZhciBpPXVbbl0sYT0wO2E8aS5sZW5ndGg7KythKXt2YXIgbz1pW2FdO3QucHVzaChlWzBdLGVbMV0sZVsyXSxyWzBdLHJbMV0sclsyXSxyWzNdLG9bMF0sb1sxXSxvWzJdKX1yZXR1cm4gaS5sZW5ndGh9bC51cGRhdGU9ZnVuY3Rpb24odCl7XCJsaW5lV2lkdGhcImluKHQ9dHx8e30pJiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgsQXJyYXkuaXNBcnJheSh0aGlzLmxpbmVXaWR0aCl8fCh0aGlzLmxpbmVXaWR0aD1bdGhpcy5saW5lV2lkdGgsdGhpcy5saW5lV2lkdGgsdGhpcy5saW5lV2lkdGhdKSksXCJjYXBTaXplXCJpbiB0JiYodGhpcy5jYXBTaXplPXQuY2FwU2l6ZSxBcnJheS5pc0FycmF5KHRoaXMuY2FwU2l6ZSl8fCh0aGlzLmNhcFNpemU9W3RoaXMuY2FwU2l6ZSx0aGlzLmNhcFNpemUsdGhpcy5jYXBTaXplXSkpLHRoaXMuaGFzQWxwaGE9ITEsXCJvcGFjaXR5XCJpbiB0JiYodGhpcy5vcGFjaXR5PSt0Lm9wYWNpdHksdGhpcy5vcGFjaXR5PDEmJih0aGlzLmhhc0FscGhhPSEwKSk7dmFyIGU9dC5jb2xvcnx8W1swLDAsMF0sWzAsMCwwXSxbMCwwLDBdXSxyPXQucG9zaXRpb24sbj10LmVycm9yO2lmKEFycmF5LmlzQXJyYXkoZVswXSl8fChlPVtlLGUsZV0pLHImJm4pe3ZhciBpPVtdLGE9ci5sZW5ndGgsbz0wO3RoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMubGluZUNvdW50PVswLDAsMF07Zm9yKHZhciBzPTA7czwzOysrcyl7dGhpcy5saW5lT2Zmc2V0W3NdPW87dDpmb3IodmFyIGw9MDtsPGE7KytsKXtmb3IodmFyIHU9cltsXSxmPTA7ZjwzOysrZilpZihpc05hTih1W2ZdKXx8IWlzRmluaXRlKHVbZl0pKWNvbnRpbnVlIHQ7dmFyIHA9bltsXSxkPWVbc107aWYoQXJyYXkuaXNBcnJheShkWzBdKSYmKGQ9ZVtsXSksMz09PWQubGVuZ3RoP2Q9W2RbMF0sZFsxXSxkWzJdLDFdOjQ9PT1kLmxlbmd0aCYmKGQ9W2RbMF0sZFsxXSxkWzJdLGRbM11dLCF0aGlzLmhhc0FscGhhJiZkWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKSksIWlzTmFOKHBbMF1bc10pJiYhaXNOYU4ocFsxXVtzXSkpe3ZhciBnO2lmKHBbMF1bc108MCkoZz11LnNsaWNlKCkpW3NdKz1wWzBdW3NdLGkucHVzaCh1WzBdLHVbMV0sdVsyXSxkWzBdLGRbMV0sZFsyXSxkWzNdLDAsMCwwLGdbMF0sZ1sxXSxnWzJdLGRbMF0sZFsxXSxkWzJdLGRbM10sMCwwLDApLGModGhpcy5ib3VuZHMsZyksbys9MitoKGksZyxkLHMpO2lmKHBbMV1bc10+MCkoZz11LnNsaWNlKCkpW3NdKz1wWzFdW3NdLGkucHVzaCh1WzBdLHVbMV0sdVsyXSxkWzBdLGRbMV0sZFsyXSxkWzNdLDAsMCwwLGdbMF0sZ1sxXSxnWzJdLGRbMF0sZFsxXSxkWzJdLGRbM10sMCwwLDApLGModGhpcy5ib3VuZHMsZyksbys9MitoKGksZyxkLHMpfX10aGlzLmxpbmVDb3VudFtzXT1vLXRoaXMubGluZU9mZnNldFtzXX10aGlzLmJ1ZmZlci51cGRhdGUoaSl9fSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpLHRoaXMudmFvLmRpc3Bvc2UoKX19LHtcIi4vc2hhZGVycy9pbmRleFwiOjI0NSxcImdsLWJ1ZmZlclwiOjIzOCxcImdsLXZhb1wiOjMyMH1dLDI0NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbHNsaWZ5XCIpLGk9dChcImdsLXNoYWRlclwiKSxhPW4oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24sIG9mZnNldDtcXG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XFxudW5pZm9ybSBmbG9hdCBjYXBTaXplO1xcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxudmFyeWluZyB2ZWMzIGZyYWdQb3NpdGlvbjtcXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWM0IHdvcmxkUG9zaXRpb24gID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xcbiAgd29ybGRQb3NpdGlvbiAgICAgICA9ICh3b3JsZFBvc2l0aW9uIC8gd29ybGRQb3NpdGlvbi53KSArIHZlYzQoY2FwU2l6ZSAqIG9mZnNldCwgMC4wKTtcXG4gIGdsX1Bvc2l0aW9uICAgICAgICAgPSBwcm9qZWN0aW9uICogdmlldyAqIHdvcmxkUG9zaXRpb247XFxuICBmcmFnQ29sb3IgICAgICAgICAgID0gY29sb3I7XFxuICBmcmFnUG9zaXRpb24gICAgICAgID0gcG9zaXRpb247XFxufVwiXSksbz1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XFxuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XFxufVxcblxcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcXG52YXJ5aW5nIHZlYzMgZnJhZ1Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgaWYgKFxcbiAgICBvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZyYWdQb3NpdGlvbikgfHxcXG4gICAgZnJhZ0NvbG9yLmEgKiBvcGFjaXR5ID09IDAuXFxuICApIGRpc2NhcmQ7XFxuXFxuICBnbF9GcmFnQ29sb3IgPSBvcGFjaXR5ICogZnJhZ0NvbG9yO1xcbn1cIl0pO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZTpcInBvc2l0aW9uXCIsdHlwZTpcInZlYzNcIn0se25hbWU6XCJjb2xvclwiLHR5cGU6XCJ2ZWM0XCJ9LHtuYW1lOlwib2Zmc2V0XCIsdHlwZTpcInZlYzNcIn1dKX19LHtcImdsLXNoYWRlclwiOjI5OCxnbHNsaWZ5OjQwMn1dLDI0NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbC10ZXh0dXJlMmRcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe2l8fChpPXQuRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQsYT10LkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCxvPXQuRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TLHM9dC5GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCk7dmFyIGM9dC5nZXRFeHRlbnNpb24oXCJXRUJHTF9kcmF3X2J1ZmZlcnNcIik7IWwmJmMmJmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nZXRQYXJhbWV0ZXIoZS5NQVhfQ09MT1JfQVRUQUNITUVOVFNfV0VCR0wpO2w9bmV3IEFycmF5KHIrMSk7Zm9yKHZhciBuPTA7bjw9cjsrK24pe2Zvcih2YXIgaT1uZXcgQXJyYXkociksYT0wO2E8bjsrK2EpaVthXT10LkNPTE9SX0FUVEFDSE1FTlQwK2E7Zm9yKHZhciBhPW47YTxyOysrYSlpW2FdPXQuTk9ORTtsW25dPWl9fSh0LGMpO0FycmF5LmlzQXJyYXkoZSkmJihuPXIscj0wfGVbMV0sZT0wfGVbMF0pO2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcihcImdsLWZibzogTWlzc2luZyBzaGFwZSBwYXJhbWV0ZXJcIik7dmFyIHU9dC5nZXRQYXJhbWV0ZXIodC5NQVhfUkVOREVSQlVGRkVSX1NJWkUpO2lmKGU8MHx8ZT51fHxyPDB8fHI+dSl0aHJvdyBuZXcgRXJyb3IoXCJnbC1mYm86IFBhcmFtZXRlcnMgYXJlIHRvbyBsYXJnZSBmb3IgRkJPXCIpO3ZhciBoPTE7aWYoXCJjb2xvclwiaW4obj1ufHx7fSkpe2lmKChoPU1hdGgubWF4KDB8bi5jb2xvciwwKSk8MCl0aHJvdyBuZXcgRXJyb3IoXCJnbC1mYm86IE11c3Qgc3BlY2lmeSBhIG5vbm5lZ2F0aXZlIG51bWJlciBvZiBjb2xvcnNcIik7aWYoaD4xKXtpZighYyl0aHJvdyBuZXcgRXJyb3IoXCJnbC1mYm86IE11bHRpcGxlIGRyYXcgYnVmZmVyIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkXCIpO2lmKGg+dC5nZXRQYXJhbWV0ZXIoYy5NQVhfQ09MT1JfQVRUQUNITUVOVFNfV0VCR0wpKXRocm93IG5ldyBFcnJvcihcImdsLWZibzogQ29udGV4dCBkb2VzIG5vdCBzdXBwb3J0IFwiK2grXCIgZHJhdyBidWZmZXJzXCIpfX12YXIgZj10LlVOU0lHTkVEX0JZVEUscD10LmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0XCIpO2lmKG4uZmxvYXQmJmg+MCl7aWYoIXApdGhyb3cgbmV3IEVycm9yKFwiZ2wtZmJvOiBDb250ZXh0IGRvZXMgbm90IHN1cHBvcnQgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXNcIik7Zj10LkZMT0FUfWVsc2Ugbi5wcmVmZXJGbG9hdCYmaD4wJiZwJiYoZj10LkZMT0FUKTt2YXIgZz0hMDtcImRlcHRoXCJpbiBuJiYoZz0hIW4uZGVwdGgpO3ZhciB2PSExO1wic3RlbmNpbFwiaW4gbiYmKHY9ISFuLnN0ZW5jaWwpO3JldHVybiBuZXcgZCh0LGUscixmLGgsZyx2LGMpfTt2YXIgaSxhLG8scyxsPW51bGw7ZnVuY3Rpb24gYyh0KXtyZXR1cm5bdC5nZXRQYXJhbWV0ZXIodC5GUkFNRUJVRkZFUl9CSU5ESU5HKSx0LmdldFBhcmFtZXRlcih0LlJFTkRFUkJVRkZFUl9CSU5ESU5HKSx0LmdldFBhcmFtZXRlcih0LlRFWFRVUkVfQklORElOR18yRCldfWZ1bmN0aW9uIHUodCxlKXt0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLGVbMF0pLHQuYmluZFJlbmRlcmJ1ZmZlcih0LlJFTkRFUkJVRkZFUixlWzFdKSx0LmJpbmRUZXh0dXJlKHQuVEVYVFVSRV8yRCxlWzJdKX1mdW5jdGlvbiBoKHQpe3N3aXRjaCh0KXtjYXNlIGk6dGhyb3cgbmV3IEVycm9yKFwiZ2wtZmJvOiBGcmFtZWJ1ZmZlciB1bnN1cHBvcnRlZFwiKTtjYXNlIGE6dGhyb3cgbmV3IEVycm9yKFwiZ2wtZmJvOiBGcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIGF0dGFjaG1lbnRcIik7Y2FzZSBvOnRocm93IG5ldyBFcnJvcihcImdsLWZibzogRnJhbWVidWZmZXIgaW5jb21wbGV0ZSBkaW1lbnNpb25zXCIpO2Nhc2Ugczp0aHJvdyBuZXcgRXJyb3IoXCJnbC1mYm86IEZyYW1lYnVmZmVyIGluY29tcGxldGUgbWlzc2luZyBhdHRhY2htZW50XCIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiZ2wtZmJvOiBGcmFtZWJ1ZmZlciBmYWlsZWQgZm9yIHVuc3BlY2lmaWVkIHJlYXNvblwiKX19ZnVuY3Rpb24gZih0LGUscixpLGEsbyl7aWYoIWkpcmV0dXJuIG51bGw7dmFyIHM9bih0LGUscixhLGkpO3JldHVybiBzLm1hZ0ZpbHRlcj10Lk5FQVJFU1Qscy5taW5GaWx0ZXI9dC5ORUFSRVNULHMubWlwU2FtcGxlcz0xLHMuYmluZCgpLHQuZnJhbWVidWZmZXJUZXh0dXJlMkQodC5GUkFNRUJVRkZFUixvLHQuVEVYVFVSRV8yRCxzLmhhbmRsZSwwKSxzfWZ1bmN0aW9uIHAodCxlLHIsbixpKXt2YXIgYT10LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO3JldHVybiB0LmJpbmRSZW5kZXJidWZmZXIodC5SRU5ERVJCVUZGRVIsYSksdC5yZW5kZXJidWZmZXJTdG9yYWdlKHQuUkVOREVSQlVGRkVSLG4sZSxyKSx0LmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHQuRlJBTUVCVUZGRVIsaSx0LlJFTkRFUkJVRkZFUixhKSxhfWZ1bmN0aW9uIGQodCxlLHIsbixpLGEsbyxzKXt0aGlzLmdsPXQsdGhpcy5fc2hhcGU9WzB8ZSwwfHJdLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9leHQ9cyx0aGlzLmNvbG9yPW5ldyBBcnJheShpKTtmb3IodmFyIGQ9MDtkPGk7KytkKXRoaXMuY29sb3JbZF09bnVsbDt0aGlzLl9jb2xvcl9yYj1udWxsLHRoaXMuZGVwdGg9bnVsbCx0aGlzLl9kZXB0aF9yYj1udWxsLHRoaXMuX2NvbG9yVHlwZT1uLHRoaXMuX3VzZURlcHRoPWEsdGhpcy5fdXNlU3RlbmNpbD1vO3ZhciBnPXRoaXMsdj1bMHxlLDB8cl07T2JqZWN0LmRlZmluZVByb3BlcnRpZXModix7MDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuX3NoYXBlWzBdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGcud2lkdGg9dH19LDE6e2dldDpmdW5jdGlvbigpe3JldHVybiBnLl9zaGFwZVsxXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBnLmhlaWdodD10fX19KSx0aGlzLl9zaGFwZVZlY3Rvcj12LGZ1bmN0aW9uKHQpe3ZhciBlPWModC5nbCkscj10LmdsLG49dC5oYW5kbGU9ci5jcmVhdGVGcmFtZWJ1ZmZlcigpLGk9dC5fc2hhcGVbMF0sYT10Ll9zaGFwZVsxXSxvPXQuY29sb3IubGVuZ3RoLHM9dC5fZXh0LGQ9dC5fdXNlU3RlbmNpbCxnPXQuX3VzZURlcHRoLHY9dC5fY29sb3JUeXBlO3IuYmluZEZyYW1lYnVmZmVyKHIuRlJBTUVCVUZGRVIsbik7Zm9yKHZhciBtPTA7bTxvOysrbSl0LmNvbG9yW21dPWYocixpLGEsdixyLlJHQkEsci5DT0xPUl9BVFRBQ0hNRU5UMCttKTswPT09bz8odC5fY29sb3JfcmI9cChyLGksYSxyLlJHQkE0LHIuQ09MT1JfQVRUQUNITUVOVDApLHMmJnMuZHJhd0J1ZmZlcnNXRUJHTChsWzBdKSk6bz4xJiZzLmRyYXdCdWZmZXJzV0VCR0wobFtvXSk7dmFyIHk9ci5nZXRFeHRlbnNpb24oXCJXRUJHTF9kZXB0aF90ZXh0dXJlXCIpO3k/ZD90LmRlcHRoPWYocixpLGEseS5VTlNJR05FRF9JTlRfMjRfOF9XRUJHTCxyLkRFUFRIX1NURU5DSUwsci5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpOmcmJih0LmRlcHRoPWYocixpLGEsci5VTlNJR05FRF9TSE9SVCxyLkRFUFRIX0NPTVBPTkVOVCxyLkRFUFRIX0FUVEFDSE1FTlQpKTpnJiZkP3QuX2RlcHRoX3JiPXAocixpLGEsci5ERVBUSF9TVEVOQ0lMLHIuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKTpnP3QuX2RlcHRoX3JiPXAocixpLGEsci5ERVBUSF9DT01QT05FTlQxNixyLkRFUFRIX0FUVEFDSE1FTlQpOmQmJih0Ll9kZXB0aF9yYj1wKHIsaSxhLHIuU1RFTkNJTF9JTkRFWCxyLlNURU5DSUxfQVRUQUNITUVOVCkpO3ZhciB4PXIuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhyLkZSQU1FQlVGRkVSKTtpZih4IT09ci5GUkFNRUJVRkZFUl9DT01QTEVURSl7Zm9yKHQuX2Rlc3Ryb3llZD0hMCxyLmJpbmRGcmFtZWJ1ZmZlcihyLkZSQU1FQlVGRkVSLG51bGwpLHIuZGVsZXRlRnJhbWVidWZmZXIodC5oYW5kbGUpLHQuaGFuZGxlPW51bGwsdC5kZXB0aCYmKHQuZGVwdGguZGlzcG9zZSgpLHQuZGVwdGg9bnVsbCksdC5fZGVwdGhfcmImJihyLmRlbGV0ZVJlbmRlcmJ1ZmZlcih0Ll9kZXB0aF9yYiksdC5fZGVwdGhfcmI9bnVsbCksbT0wO208dC5jb2xvci5sZW5ndGg7KyttKXQuY29sb3JbbV0uZGlzcG9zZSgpLHQuY29sb3JbbV09bnVsbDt0Ll9jb2xvcl9yYiYmKHIuZGVsZXRlUmVuZGVyYnVmZmVyKHQuX2NvbG9yX3JiKSx0Ll9jb2xvcl9yYj1udWxsKSx1KHIsZSksaCh4KX11KHIsZSl9KHRoaXMpfXZhciBnPWQucHJvdG90eXBlO2Z1bmN0aW9uIHYodCxlLHIpe2lmKHQuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoXCJnbC1mYm86IENhbid0IHJlc2l6ZSBkZXN0cm95ZWQgRkJPXCIpO2lmKHQuX3NoYXBlWzBdIT09ZXx8dC5fc2hhcGVbMV0hPT1yKXt2YXIgbj10LmdsLGk9bi5nZXRQYXJhbWV0ZXIobi5NQVhfUkVOREVSQlVGRkVSX1NJWkUpO2lmKGU8MHx8ZT5pfHxyPDB8fHI+aSl0aHJvdyBuZXcgRXJyb3IoXCJnbC1mYm86IENhbid0IHJlc2l6ZSBGQk8sIGludmFsaWQgZGltZW5zaW9uc1wiKTt0Ll9zaGFwZVswXT1lLHQuX3NoYXBlWzFdPXI7Zm9yKHZhciBhPWMobiksbz0wO288dC5jb2xvci5sZW5ndGg7KytvKXQuY29sb3Jbb10uc2hhcGU9dC5fc2hhcGU7dC5fY29sb3JfcmImJihuLmJpbmRSZW5kZXJidWZmZXIobi5SRU5ERVJCVUZGRVIsdC5fY29sb3JfcmIpLG4ucmVuZGVyYnVmZmVyU3RvcmFnZShuLlJFTkRFUkJVRkZFUixuLlJHQkE0LHQuX3NoYXBlWzBdLHQuX3NoYXBlWzFdKSksdC5kZXB0aCYmKHQuZGVwdGguc2hhcGU9dC5fc2hhcGUpLHQuX2RlcHRoX3JiJiYobi5iaW5kUmVuZGVyYnVmZmVyKG4uUkVOREVSQlVGRkVSLHQuX2RlcHRoX3JiKSx0Ll91c2VEZXB0aCYmdC5fdXNlU3RlbmNpbD9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2Uobi5SRU5ERVJCVUZGRVIsbi5ERVBUSF9TVEVOQ0lMLHQuX3NoYXBlWzBdLHQuX3NoYXBlWzFdKTp0Ll91c2VEZXB0aD9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2Uobi5SRU5ERVJCVUZGRVIsbi5ERVBUSF9DT01QT05FTlQxNix0Ll9zaGFwZVswXSx0Ll9zaGFwZVsxXSk6dC5fdXNlU3RlbmNpbCYmbi5yZW5kZXJidWZmZXJTdG9yYWdlKG4uUkVOREVSQlVGRkVSLG4uU1RFTkNJTF9JTkRFWCx0Ll9zaGFwZVswXSx0Ll9zaGFwZVsxXSkpLG4uYmluZEZyYW1lYnVmZmVyKG4uRlJBTUVCVUZGRVIsdC5oYW5kbGUpO3ZhciBzPW4uY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhuLkZSQU1FQlVGRkVSKTtzIT09bi5GUkFNRUJVRkZFUl9DT01QTEVURSYmKHQuZGlzcG9zZSgpLHUobixhKSxoKHMpKSx1KG4sYSl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGcse3NoYXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkP1swLDBdOnRoaXMuX3NoYXBlVmVjdG9yfSxzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHQ9WzB8dCwwfHRdKSwyIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiZ2wtZmJvOiBTaGFwZSB2ZWN0b3IgbXVzdCBiZSBsZW5ndGggMlwiKTt2YXIgZT0wfHRbMF0scj0wfHRbMV07cmV0dXJuIHYodGhpcyxlLHIpLFtlLHJdfSxlbnVtZXJhYmxlOiExfSx3aWR0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZD8wOnRoaXMuX3NoYXBlWzBdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHYodGhpcyx0fD0wLHRoaXMuX3NoYXBlWzFdKSx0fSxlbnVtZXJhYmxlOiExfSxoZWlnaHQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZXN0cm95ZWQ/MDp0aGlzLl9zaGFwZVsxXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0fD0wLHYodGhpcyx0aGlzLl9zaGFwZVswXSx0KSx0fSxlbnVtZXJhYmxlOiExfX0pLGcuYmluZD1mdW5jdGlvbigpe2lmKCF0aGlzLl9kZXN0cm95ZWQpe3ZhciB0PXRoaXMuZ2w7dC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUix0aGlzLmhhbmRsZSksdC52aWV3cG9ydCgwLDAsdGhpcy5fc2hhcGVbMF0sdGhpcy5fc2hhcGVbMV0pfX0sZy5kaXNwb3NlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2Rlc3Ryb3llZCl7dGhpcy5fZGVzdHJveWVkPSEwO3ZhciB0PXRoaXMuZ2w7dC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmhhbmRsZSksdGhpcy5oYW5kbGU9bnVsbCx0aGlzLmRlcHRoJiYodGhpcy5kZXB0aC5kaXNwb3NlKCksdGhpcy5kZXB0aD1udWxsKSx0aGlzLl9kZXB0aF9yYiYmKHQuZGVsZXRlUmVuZGVyYnVmZmVyKHRoaXMuX2RlcHRoX3JiKSx0aGlzLl9kZXB0aF9yYj1udWxsKTtmb3IodmFyIGU9MDtlPHRoaXMuY29sb3IubGVuZ3RoOysrZSl0aGlzLmNvbG9yW2VdLmRpc3Bvc2UoKSx0aGlzLmNvbG9yW2VdPW51bGw7dGhpcy5fY29sb3JfcmImJih0LmRlbGV0ZVJlbmRlcmJ1ZmZlcih0aGlzLl9jb2xvcl9yYiksdGhpcy5fY29sb3JfcmI9bnVsbCl9fX0se1wiZ2wtdGV4dHVyZTJkXCI6MzE1fV0sMjQ3OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcInNwcmludGYtanNcIikuc3ByaW50ZixpPXQoXCJnbC1jb25zdGFudHMvbG9va3VwXCIpLGE9dChcImdsc2wtc2hhZGVyLW5hbWVcIiksbz10KFwiYWRkLWxpbmUtbnVtYmVyc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBzPWEoZSl8fFwib2YgdW5rbm93biBuYW1lIChzZWUgbnBtIGdsc2wtc2hhZGVyLW5hbWUpXCIsbD1cInVua25vd24gdHlwZVwiO3ZvaWQgMCE9PXImJihsPXI9PT1pLkZSQUdNRU5UX1NIQURFUj9cImZyYWdtZW50XCI6XCJ2ZXJ0ZXhcIik7Zm9yKHZhciBjPW4oXCJFcnJvciBjb21waWxpbmcgJXMgc2hhZGVyICVzOlxcblwiLGwscyksdT1uKFwiJXMlc1wiLGMsdCksaD10LnNwbGl0KFwiXFxuXCIpLGY9e30scD0wO3A8aC5sZW5ndGg7cCsrKXt2YXIgZD1oW3BdO2lmKFwiXCIhPT1kJiZcIlxcMFwiIT09ZCl7dmFyIGc9cGFyc2VJbnQoZC5zcGxpdChcIjpcIilbMl0pO2lmKGlzTmFOKGcpKXRocm93IG5ldyBFcnJvcihuKFwiQ291bGQgbm90IHBhcnNlIGVycm9yOiAlc1wiLGQpKTtmW2ddPWR9fWZvcih2YXIgdj1vKGUpLnNwbGl0KFwiXFxuXCIpLHA9MDtwPHYubGVuZ3RoO3ArKylpZihmW3ArM118fGZbcCsyXXx8ZltwKzFdKXt2YXIgbT12W3BdO2lmKGMrPW0rXCJcXG5cIixmW3ArMV0pe3ZhciB5PWZbcCsxXTt5PXkuc3Vic3RyKHkuc3BsaXQoXCI6XCIsMykuam9pbihcIjpcIikubGVuZ3RoKzEpLnRyaW0oKSxjKz1uKFwiXl5eICVzXFxuXFxuXCIseSl9fXJldHVybntsb25nOmMudHJpbSgpLHNob3J0OnUudHJpbSgpfX19LHtcImFkZC1saW5lLW51bWJlcnNcIjo1MixcImdsLWNvbnN0YW50cy9sb29rdXBcIjoyNDMsXCJnbHNsLXNoYWRlci1uYW1lXCI6Mzk0LFwic3ByaW50Zi1qc1wiOjUxM31dLDI0ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2wsbj1vKHIsbC52ZXJ0ZXgsbC5mcmFnbWVudCksaT1vKHIsbC5waWNrVmVydGV4LGwucGlja0ZyYWdtZW50KSxhPXMociksdT1zKHIpLGg9cyhyKSxmPXMocikscD1uZXcgYyh0LG4saSxhLHUsaCxmKTtyZXR1cm4gcC51cGRhdGUoZSksdC5hZGRPYmplY3QocCkscH07dmFyIG49dChcImJpbmFyeS1zZWFyY2gtYm91bmRzXCIpLGk9dChcImlvdGEtYXJyYXlcIiksYT10KFwidHlwZWRhcnJheS1wb29sXCIpLG89dChcImdsLXNoYWRlclwiKSxzPXQoXCJnbC1idWZmZXJcIiksbD10KFwiLi9saWIvc2hhZGVyc1wiKTtmdW5jdGlvbiBjKHQsZSxyLG4saSxhLG8pe3RoaXMucGxvdD10LHRoaXMuc2hhZGVyPWUsdGhpcy5waWNrU2hhZGVyPXIsdGhpcy5wb3NpdGlvbkJ1ZmZlcj1uLHRoaXMud2VpZ2h0QnVmZmVyPWksdGhpcy5jb2xvckJ1ZmZlcj1hLHRoaXMuaWRCdWZmZXI9byx0aGlzLnhEYXRhPVtdLHRoaXMueURhdGE9W10sdGhpcy5zaGFwZT1bMCwwXSx0aGlzLmJvdW5kcz1bMS8wLDEvMCwtMS8wLC0xLzBdLHRoaXMucGlja09mZnNldD0wfXZhciB1LGg9Yy5wcm90b3R5cGUsZj1bMCwwLDEsMCwwLDEsMSwwLDEsMSwwLDFdO2guZHJhdz0odT1bMSwwLDAsMCwxLDAsMCwwLDFdLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wbG90LGU9dGhpcy5zaGFkZXIscj10aGlzLmJvdW5kcyxuPXRoaXMubnVtVmVydGljZXM7aWYoIShuPD0wKSl7dmFyIGk9dC5nbCxhPXQuZGF0YUJveCxvPXJbMl0tclswXSxzPXJbM10tclsxXSxsPWFbMl0tYVswXSxjPWFbM10tYVsxXTt1WzBdPTIqby9sLHVbNF09MipzL2MsdVs2XT0yKihyWzBdLWFbMF0pL2wtMSx1WzddPTIqKHJbMV0tYVsxXSkvYy0xLGUuYmluZCgpO3ZhciBoPWUudW5pZm9ybXM7aC52aWV3VHJhbnNmb3JtPXUsaC5zaGFwZT10aGlzLnNoYXBlO3ZhciBmPWUuYXR0cmlidXRlczt0aGlzLnBvc2l0aW9uQnVmZmVyLmJpbmQoKSxmLnBvc2l0aW9uLnBvaW50ZXIoKSx0aGlzLndlaWdodEJ1ZmZlci5iaW5kKCksZi53ZWlnaHQucG9pbnRlcihpLlVOU0lHTkVEX0JZVEUsITEpLHRoaXMuY29sb3JCdWZmZXIuYmluZCgpLGYuY29sb3IucG9pbnRlcihpLlVOU0lHTkVEX0JZVEUsITApLGkuZHJhd0FycmF5cyhpLlRSSUFOR0xFUywwLG4pfX0pLGguZHJhd1BpY2s9ZnVuY3Rpb24oKXt2YXIgdD1bMSwwLDAsMCwxLDAsMCwwLDFdLGU9WzAsMCwwLDBdO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj10aGlzLnBsb3QsaT10aGlzLnBpY2tTaGFkZXIsYT10aGlzLmJvdW5kcyxvPXRoaXMubnVtVmVydGljZXM7aWYoIShvPD0wKSl7dmFyIHM9bi5nbCxsPW4uZGF0YUJveCxjPWFbMl0tYVswXSx1PWFbM10tYVsxXSxoPWxbMl0tbFswXSxmPWxbM10tbFsxXTt0WzBdPTIqYy9oLHRbNF09Mip1L2YsdFs2XT0yKihhWzBdLWxbMF0pL2gtMSx0WzddPTIqKGFbMV0tbFsxXSkvZi0xO2Zvcih2YXIgcD0wO3A8NDsrK3ApZVtwXT1yPj44KnAmMjU1O3RoaXMucGlja09mZnNldD1yLGkuYmluZCgpO3ZhciBkPWkudW5pZm9ybXM7ZC52aWV3VHJhbnNmb3JtPXQsZC5waWNrT2Zmc2V0PWUsZC5zaGFwZT10aGlzLnNoYXBlO3ZhciBnPWkuYXR0cmlidXRlcztyZXR1cm4gdGhpcy5wb3NpdGlvbkJ1ZmZlci5iaW5kKCksZy5wb3NpdGlvbi5wb2ludGVyKCksdGhpcy53ZWlnaHRCdWZmZXIuYmluZCgpLGcud2VpZ2h0LnBvaW50ZXIocy5VTlNJR05FRF9CWVRFLCExKSx0aGlzLmlkQnVmZmVyLmJpbmQoKSxnLnBpY2tJZC5wb2ludGVyKHMuVU5TSUdORURfQllURSwhMSkscy5kcmF3QXJyYXlzKHMuVFJJQU5HTEVTLDAsbykscit0aGlzLnNoYXBlWzBdKnRoaXMuc2hhcGVbMV19fX0oKSxoLnBpY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMucGlja09mZnNldCxpPXRoaXMuc2hhcGVbMF0qdGhpcy5zaGFwZVsxXTtpZihyPG58fHI+PW4raSlyZXR1cm4gbnVsbDt2YXIgYT1yLW4sbz10aGlzLnhEYXRhLHM9dGhpcy55RGF0YTtyZXR1cm57b2JqZWN0OnRoaXMscG9pbnRJZDphLGRhdGFDb29yZDpbb1thJXRoaXMuc2hhcGVbMF1dLHNbYS90aGlzLnNoYXBlWzBdfDBdXX19LGgudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PXR8fHt9KS5zaGFwZXx8WzAsMF0scj10Lnh8fGkoZVswXSksbz10Lnl8fGkoZVsxXSkscz10Lnp8fG5ldyBGbG9hdDMyQXJyYXkoZVswXSplWzFdKTt0aGlzLnhEYXRhPXIsdGhpcy55RGF0YT1vO3ZhciBsPXQuY29sb3JMZXZlbHN8fFswXSxjPXQuY29sb3JWYWx1ZXN8fFswLDAsMCwxXSx1PWwubGVuZ3RoLGg9dGhpcy5ib3VuZHMscD1oWzBdPXJbMF0sZD1oWzFdPW9bMF0sZz0xLygoaFsyXT1yW3IubGVuZ3RoLTFdKS1wKSx2PTEvKChoWzNdPW9bby5sZW5ndGgtMV0pLWQpLG09ZVswXSx5PWVbMV07dGhpcy5zaGFwZT1bbSx5XTt2YXIgeD0obS0xKSooeS0xKSooZi5sZW5ndGg+Pj4xKTt0aGlzLm51bVZlcnRpY2VzPXg7Zm9yKHZhciBiPWEubWFsbG9jVWludDgoNCp4KSxfPWEubWFsbG9jRmxvYXQzMigyKngpLHc9YS5tYWxsb2NVaW50OCgyKngpLGs9YS5tYWxsb2NVaW50MzIoeCksQT0wLFQ9MDtUPHktMTsrK1QpZm9yKHZhciBNPXYqKG9bVF0tZCksUz12KihvW1QrMV0tZCksRT0wO0U8bS0xOysrRSlmb3IodmFyIEM9ZyoocltFXS1wKSxMPWcqKHJbRSsxXS1wKSx6PTA7ejxmLmxlbmd0aDt6Kz0yKXt2YXIgTyxJLEQsUCxSPWZbel0sRj1mW3orMV0sQj1zWyhUK0YpKm0rKEUrUildLE49bi5sZShsLEIpO2lmKE48MClPPWNbMF0sST1jWzFdLEQ9Y1syXSxQPWNbM107ZWxzZSBpZihOPT09dS0xKU89Y1s0KnUtNF0sST1jWzQqdS0zXSxEPWNbNCp1LTJdLFA9Y1s0KnUtMV07ZWxzZXt2YXIgaj0oQi1sW05dKS8obFtOKzFdLWxbTl0pLFY9MS1qLFU9NCpOLHE9NCooTisxKTtPPVYqY1tVXStqKmNbcV0sST1WKmNbVSsxXStqKmNbcSsxXSxEPVYqY1tVKzJdK2oqY1txKzJdLFA9VipjW1UrM10raipjW3ErM119Yls0KkFdPTI1NSpPLGJbNCpBKzFdPTI1NSpJLGJbNCpBKzJdPTI1NSpELGJbNCpBKzNdPTI1NSpQLF9bMipBXT0uNSpDKy41KkwsX1syKkErMV09LjUqTSsuNSpTLHdbMipBXT1SLHdbMipBKzFdPUYsa1tBXT1UKm0rRSxBKz0xfXRoaXMucG9zaXRpb25CdWZmZXIudXBkYXRlKF8pLHRoaXMud2VpZ2h0QnVmZmVyLnVwZGF0ZSh3KSx0aGlzLmNvbG9yQnVmZmVyLnVwZGF0ZShiKSx0aGlzLmlkQnVmZmVyLnVwZGF0ZShrKSxhLmZyZWUoXyksYS5mcmVlKGIpLGEuZnJlZSh3KSxhLmZyZWUoayl9LGguZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMucG9zaXRpb25CdWZmZXIuZGlzcG9zZSgpLHRoaXMud2VpZ2h0QnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmNvbG9yQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmlkQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnBsb3QucmVtb3ZlT2JqZWN0KHRoaXMpfX0se1wiLi9saWIvc2hhZGVyc1wiOjI0OSxcImJpbmFyeS1zZWFyY2gtYm91bmRzXCI6MjUwLFwiZ2wtYnVmZmVyXCI6MjM4LFwiZ2wtc2hhZGVyXCI6Mjk4LFwiaW90YS1hcnJheVwiOjQwOSxcInR5cGVkYXJyYXktcG9vbFwiOjUzMH1dLDI0OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbHNsaWZ5XCIpO2UuZXhwb3J0cz17ZnJhZ21lbnQ6bihbXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxudm9pZCBtYWluKCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChmcmFnQ29sb3IucmdiICogZnJhZ0NvbG9yLmEsIGZyYWdDb2xvci5hKTtcXG59XFxuXCJdKSx2ZXJ0ZXg6bihbXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xcbmF0dHJpYnV0ZSB2ZWMyIHdlaWdodDtcXG5cXG51bmlmb3JtIHZlYzIgc2hhcGU7XFxudW5pZm9ybSBtYXQzIHZpZXdUcmFuc2Zvcm07XFxuXFxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWMzIHZQb3NpdGlvbiA9IHZpZXdUcmFuc2Zvcm0gKiB2ZWMzKCBwb3NpdGlvbiArICh3ZWlnaHQtLjUpLyhzaGFwZS0xLikgLCAxLjApO1xcbiAgZnJhZ0NvbG9yID0gY29sb3I7XFxuICBnbF9Qb3NpdGlvbiA9IHZlYzQodlBvc2l0aW9uLnh5LCAwLCB2UG9zaXRpb24ueik7XFxufVxcblwiXSkscGlja0ZyYWdtZW50Om4oW1wicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0lkO1xcbnZhcnlpbmcgdmVjMiB2V2VpZ2h0O1xcblxcbnVuaWZvcm0gdmVjMiBzaGFwZTtcXG51bmlmb3JtIHZlYzQgcGlja09mZnNldDtcXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWMyIGQgPSBzdGVwKC41LCB2V2VpZ2h0KTtcXG4gIHZlYzQgaWQgPSBmcmFnSWQgKyBwaWNrT2Zmc2V0O1xcbiAgaWQueCArPSBkLnggKyBkLnkqc2hhcGUueDtcXG5cXG4gIGlkLnkgKz0gZmxvb3IoaWQueCAvIDI1Ni4wKTtcXG4gIGlkLnggLT0gZmxvb3IoaWQueCAvIDI1Ni4wKSAqIDI1Ni4wO1xcblxcbiAgaWQueiArPSBmbG9vcihpZC55IC8gMjU2LjApO1xcbiAgaWQueSAtPSBmbG9vcihpZC55IC8gMjU2LjApICogMjU2LjA7XFxuXFxuICBpZC53ICs9IGZsb29yKGlkLnogLyAyNTYuMCk7XFxuICBpZC56IC09IGZsb29yKGlkLnogLyAyNTYuMCkgKiAyNTYuMDtcXG5cXG4gIGdsX0ZyYWdDb2xvciA9IGlkLzI1NS47XFxufVxcblwiXSkscGlja1ZlcnRleDpuKFtcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzQgcGlja0lkO1xcbmF0dHJpYnV0ZSB2ZWMyIHdlaWdodDtcXG5cXG51bmlmb3JtIHZlYzIgc2hhcGU7XFxudW5pZm9ybSBtYXQzIHZpZXdUcmFuc2Zvcm07XFxuXFxudmFyeWluZyB2ZWM0IGZyYWdJZDtcXG52YXJ5aW5nIHZlYzIgdldlaWdodDtcXG5cXG52b2lkIG1haW4oKSB7XFxuICB2V2VpZ2h0ID0gd2VpZ2h0O1xcblxcbiAgZnJhZ0lkID0gcGlja0lkO1xcblxcbiAgdmVjMyB2UG9zaXRpb24gPSB2aWV3VHJhbnNmb3JtICogdmVjMyggcG9zaXRpb24gKyAod2VpZ2h0LS41KS8oc2hhcGUtMS4pICwgMS4wKTtcXG4gIGdsX1Bvc2l0aW9uID0gdmVjNCh2UG9zaXRpb24ueHksIDAsIHZQb3NpdGlvbi56KTtcXG59XFxuXCJdKX19LHtnbHNsaWZ5OjQwMn1dLDI1MDpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsxMDJdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoxMDJ9XSwyNTE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiZ2xzbGlmeVwiKSxpPXQoXCJnbC1zaGFkZXJcIiksYT1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uLCBuZXh0UG9zaXRpb247XFxuYXR0cmlidXRlIGZsb2F0IGFyY0xlbmd0aCwgbGluZVdpZHRoO1xcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xcblxcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaGFwZTtcXG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW87XFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxudmFyeWluZyB2ZWMzIHdvcmxkUG9zaXRpb247XFxudmFyeWluZyBmbG9hdCBwaXhlbEFyY0xlbmd0aDtcXG5cXG52ZWM0IHByb2plY3QodmVjMyBwKSB7XFxuICByZXR1cm4gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocCwgMS4wKTtcXG59XFxuXFxudm9pZCBtYWluKCkge1xcbiAgdmVjNCBzdGFydFBvaW50ID0gcHJvamVjdChwb3NpdGlvbik7XFxuICB2ZWM0IGVuZFBvaW50ICAgPSBwcm9qZWN0KG5leHRQb3NpdGlvbik7XFxuXFxuICB2ZWMyIEEgPSBzdGFydFBvaW50Lnh5IC8gc3RhcnRQb2ludC53O1xcbiAgdmVjMiBCID0gICBlbmRQb2ludC54eSAvICAgZW5kUG9pbnQudztcXG5cXG4gIGZsb2F0IGNsaXBBbmdsZSA9IGF0YW4oXFxuICAgIChCLnkgLSBBLnkpICogc2NyZWVuU2hhcGUueSxcXG4gICAgKEIueCAtIEEueCkgKiBzY3JlZW5TaGFwZS54XFxuICApO1xcblxcbiAgdmVjMiBvZmZzZXQgPSAwLjUgKiBwaXhlbFJhdGlvICogbGluZVdpZHRoICogdmVjMihcXG4gICAgc2luKGNsaXBBbmdsZSksXFxuICAgIC1jb3MoY2xpcEFuZ2xlKVxcbiAgKSAvIHNjcmVlblNoYXBlO1xcblxcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHN0YXJ0UG9pbnQueHkgKyBzdGFydFBvaW50LncgKiBvZmZzZXQsIHN0YXJ0UG9pbnQuencpO1xcblxcbiAgd29ybGRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiAgcGl4ZWxBcmNMZW5ndGggPSBhcmNMZW5ndGg7XFxuICBmcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCJdKSxvPW4oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcXG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XFxuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcXG59XFxuXFxudW5pZm9ybSB2ZWMzICAgICAgY2xpcEJvdW5kc1syXTtcXG51bmlmb3JtIHNhbXBsZXIyRCBkYXNoVGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0ICAgICBkYXNoU2NhbGU7XFxudW5pZm9ybSBmbG9hdCAgICAgb3BhY2l0eTtcXG5cXG52YXJ5aW5nIHZlYzMgICAgd29ybGRQb3NpdGlvbjtcXG52YXJ5aW5nIGZsb2F0ICAgcGl4ZWxBcmNMZW5ndGg7XFxudmFyeWluZyB2ZWM0ICAgIGZyYWdDb2xvcjtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBpZiAoXFxuICAgIG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgd29ybGRQb3NpdGlvbikgfHxcXG4gICAgZnJhZ0NvbG9yLmEgKiBvcGFjaXR5ID09IDAuXFxuICApIGRpc2NhcmQ7XFxuXFxuICBmbG9hdCBkYXNoV2VpZ2h0ID0gdGV4dHVyZTJEKGRhc2hUZXh0dXJlLCB2ZWMyKGRhc2hTY2FsZSAqIHBpeGVsQXJjTGVuZ3RoLCAwKSkucjtcXG4gIGlmKGRhc2hXZWlnaHQgPCAwLjUpIHtcXG4gICAgZGlzY2FyZDtcXG4gIH1cXG4gIGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvciAqIG9wYWNpdHk7XFxufVxcblwiXSkscz1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbiNkZWZpbmUgRkxPQVRfTUFYICAxLjcwMTQxMTg0ZTM4XFxuI2RlZmluZSBGTE9BVF9NSU4gIDEuMTc1NDk0MzVlLTM4XFxuXFxubG93cCB2ZWM0IGVuY29kZV9mbG9hdF8xNjA0MTUwNTU5KGhpZ2hwIGZsb2F0IHYpIHtcXG4gIGhpZ2hwIGZsb2F0IGF2ID0gYWJzKHYpO1xcblxcbiAgLy9IYW5kbGUgc3BlY2lhbCBjYXNlc1xcbiAgaWYoYXYgPCBGTE9BVF9NSU4pIHtcXG4gICAgcmV0dXJuIHZlYzQoMC4wLCAwLjAsIDAuMCwgMC4wKTtcXG4gIH0gZWxzZSBpZih2ID4gRkxPQVRfTUFYKSB7XFxuICAgIHJldHVybiB2ZWM0KDEyNy4wLCAxMjguMCwgMC4wLCAwLjApIC8gMjU1LjA7XFxuICB9IGVsc2UgaWYodiA8IC1GTE9BVF9NQVgpIHtcXG4gICAgcmV0dXJuIHZlYzQoMjU1LjAsIDEyOC4wLCAwLjAsIDAuMCkgLyAyNTUuMDtcXG4gIH1cXG5cXG4gIGhpZ2hwIHZlYzQgYyA9IHZlYzQoMCwwLDAsMCk7XFxuXFxuICAvL0NvbXB1dGUgZXhwb25lbnQgYW5kIG1hbnRpc3NhXFxuICBoaWdocCBmbG9hdCBlID0gZmxvb3IobG9nMihhdikpO1xcbiAgaGlnaHAgZmxvYXQgbSA9IGF2ICogcG93KDIuMCwgLWUpIC0gMS4wO1xcbiAgXFxuICAvL1VucGFjayBtYW50aXNzYVxcbiAgY1sxXSA9IGZsb29yKDEyOC4wICogbSk7XFxuICBtIC09IGNbMV0gLyAxMjguMDtcXG4gIGNbMl0gPSBmbG9vcigzMjc2OC4wICogbSk7XFxuICBtIC09IGNbMl0gLyAzMjc2OC4wO1xcbiAgY1szXSA9IGZsb29yKDgzODg2MDguMCAqIG0pO1xcbiAgXFxuICAvL1VucGFjayBleHBvbmVudFxcbiAgaGlnaHAgZmxvYXQgZWJpYXMgPSBlICsgMTI3LjA7XFxuICBjWzBdID0gZmxvb3IoZWJpYXMgLyAyLjApO1xcbiAgZWJpYXMgLT0gY1swXSAqIDIuMDtcXG4gIGNbMV0gKz0gZmxvb3IoZWJpYXMpICogMTI4LjA7IFxcblxcbiAgLy9VbnBhY2sgc2lnbiBiaXRcXG4gIGNbMF0gKz0gMTI4LjAgKiBzdGVwKDAuMCwgLXYpO1xcblxcbiAgLy9TY2FsZSBiYWNrIHRvIHJhbmdlXFxuICByZXR1cm4gYyAvIDI1NS4wO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcXG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xcbn1cXG5cXG51bmlmb3JtIGZsb2F0IHBpY2tJZDtcXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcXG5cXG52YXJ5aW5nIHZlYzMgd29ybGRQb3NpdGlvbjtcXG52YXJ5aW5nIGZsb2F0IHBpeGVsQXJjTGVuZ3RoO1xcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgd29ybGRQb3NpdGlvbikpIGRpc2NhcmQ7XFxuXFxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZC8yNTUuMCwgZW5jb2RlX2Zsb2F0XzE2MDQxNTA1NTkocGl4ZWxBcmNMZW5ndGgpLnh5eik7XFxufVwiXSksbD1be25hbWU6XCJwb3NpdGlvblwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwibmV4dFBvc2l0aW9uXCIsdHlwZTpcInZlYzNcIn0se25hbWU6XCJhcmNMZW5ndGhcIix0eXBlOlwiZmxvYXRcIn0se25hbWU6XCJsaW5lV2lkdGhcIix0eXBlOlwiZmxvYXRcIn0se25hbWU6XCJjb2xvclwiLHR5cGU6XCJ2ZWM0XCJ9XTtyLmNyZWF0ZVNoYWRlcj1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLGwpfSxyLmNyZWF0ZVBpY2tTaGFkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxhLHMsbnVsbCxsKX19LHtcImdsLXNoYWRlclwiOjI5OCxnbHNsaWZ5OjQwMn1dLDI1MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsfHx0LnNjZW5lJiZ0LnNjZW5lLmdsLHI9dShlKTtyLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxyLmF0dHJpYnV0ZXMubmV4dFBvc2l0aW9uLmxvY2F0aW9uPTEsci5hdHRyaWJ1dGVzLmFyY0xlbmd0aC5sb2NhdGlvbj0yLHIuYXR0cmlidXRlcy5saW5lV2lkdGgubG9jYXRpb249MyxyLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249NDt2YXIgbz1oKGUpO28uYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLG8uYXR0cmlidXRlcy5uZXh0UG9zaXRpb24ubG9jYXRpb249MSxvLmF0dHJpYnV0ZXMuYXJjTGVuZ3RoLmxvY2F0aW9uPTIsby5hdHRyaWJ1dGVzLmxpbmVXaWR0aC5sb2NhdGlvbj0zLG8uYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj00O2Zvcih2YXIgcz1uKGUpLGM9aShlLFt7YnVmZmVyOnMsc2l6ZTozLG9mZnNldDowLHN0cmlkZTo0OH0se2J1ZmZlcjpzLHNpemU6MyxvZmZzZXQ6MTIsc3RyaWRlOjQ4fSx7YnVmZmVyOnMsc2l6ZToxLG9mZnNldDoyNCxzdHJpZGU6NDh9LHtidWZmZXI6cyxzaXplOjEsb2Zmc2V0OjI4LHN0cmlkZTo0OH0se2J1ZmZlcjpzLHNpemU6NCxvZmZzZXQ6MzIsc3RyaWRlOjQ4fV0pLGY9bChuZXcgQXJyYXkoMTAyNCksWzI1NiwxLDRdKSxwPTA7cDwxMDI0OysrcClmLmRhdGFbcF09MjU1O3ZhciBkPWEoZSxmKTtkLndyYXA9ZS5SRVBFQVQ7dmFyIGc9bmV3IHYoZSxyLG8scyxjLGQpO3JldHVybiBnLnVwZGF0ZSh0KSxnfTt2YXIgbj10KFwiZ2wtYnVmZmVyXCIpLGk9dChcImdsLXZhb1wiKSxhPXQoXCJnbC10ZXh0dXJlMmRcIiksbz10KFwiZ2xzbC1yZWFkLWZsb2F0XCIpLHM9dChcImJpbmFyeS1zZWFyY2gtYm91bmRzXCIpLGw9dChcIm5kYXJyYXlcIiksYz10KFwiLi9saWIvc2hhZGVyc1wiKSx1PWMuY3JlYXRlU2hhZGVyLGg9Yy5jcmVhdGVQaWNrU2hhZGVyLGY9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIHAodCxlKXtmb3IodmFyIHI9MCxuPTA7bjwzOysrbil7dmFyIGk9dFtuXS1lW25dO3IrPWkqaX1yZXR1cm4gTWF0aC5zcXJ0KHIpfWZ1bmN0aW9uIGQodCl7Zm9yKHZhciBlPVtbLTFlNiwtMWU2LC0xZTZdLFsxZTYsMWU2LDFlNl1dLHI9MDtyPDM7KytyKWVbMF1bcl09TWF0aC5tYXgodFswXVtyXSxlWzBdW3JdKSxlWzFdW3JdPU1hdGgubWluKHRbMV1bcl0sZVsxXVtyXSk7cmV0dXJuIGV9ZnVuY3Rpb24gZyh0LGUscixuKXt0aGlzLmFyY0xlbmd0aD10LHRoaXMucG9zaXRpb249ZSx0aGlzLmluZGV4PXIsdGhpcy5kYXRhQ29vcmRpbmF0ZT1ufWZ1bmN0aW9uIHYodCxlLHIsbixpLGEpe3RoaXMuZ2w9dCx0aGlzLnNoYWRlcj1lLHRoaXMucGlja1NoYWRlcj1yLHRoaXMuYnVmZmVyPW4sdGhpcy52YW89aSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5wb2ludHM9W10sdGhpcy5hcmNMZW5ndGg9W10sdGhpcy52ZXJ0ZXhDb3VudD0wLHRoaXMuYm91bmRzPVtbMCwwLDBdLFswLDAsMF1dLHRoaXMucGlja0lkPTAsdGhpcy5saW5lV2lkdGg9MSx0aGlzLnRleHR1cmU9YSx0aGlzLmRhc2hTY2FsZT0xLHRoaXMub3BhY2l0eT0xLHRoaXMuaGFzQWxwaGE9ITEsdGhpcy5kaXJ0eT0hMCx0aGlzLnBpeGVsUmF0aW89MX12YXIgbT12LnByb3RvdHlwZTttLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBbHBoYX0sbS5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLmhhc0FscGhhfSxtLnBpY2tTbG90cz0xLG0uc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH0sbS5kcmF3VHJhbnNwYXJlbnQ9bS5kcmF3PWZ1bmN0aW9uKHQpe2lmKHRoaXMudmVydGV4Q291bnQpe3ZhciBlPXRoaXMuZ2wscj10aGlzLnNoYWRlcixuPXRoaXMudmFvO3IuYmluZCgpLHIudW5pZm9ybXM9e21vZGVsOnQubW9kZWx8fGYsdmlldzp0LnZpZXd8fGYscHJvamVjdGlvbjp0LnByb2plY3Rpb258fGYsY2xpcEJvdW5kczpkKHRoaXMuY2xpcEJvdW5kcyksZGFzaFRleHR1cmU6dGhpcy50ZXh0dXJlLmJpbmQoKSxkYXNoU2NhbGU6dGhpcy5kYXNoU2NhbGUvdGhpcy5hcmNMZW5ndGhbdGhpcy5hcmNMZW5ndGgubGVuZ3RoLTFdLG9wYWNpdHk6dGhpcy5vcGFjaXR5LHNjcmVlblNoYXBlOltlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdLHBpeGVsUmF0aW86dGhpcy5waXhlbFJhdGlvfSxuLmJpbmQoKSxuLmRyYXcoZS5UUklBTkdMRV9TVFJJUCx0aGlzLnZlcnRleENvdW50KSxuLnVuYmluZCgpfX0sbS5kcmF3UGljaz1mdW5jdGlvbih0KXtpZih0aGlzLnZlcnRleENvdW50KXt2YXIgZT10aGlzLmdsLHI9dGhpcy5waWNrU2hhZGVyLG49dGhpcy52YW87ci5iaW5kKCksci51bmlmb3Jtcz17bW9kZWw6dC5tb2RlbHx8Zix2aWV3OnQudmlld3x8Zixwcm9qZWN0aW9uOnQucHJvamVjdGlvbnx8ZixwaWNrSWQ6dGhpcy5waWNrSWQsY2xpcEJvdW5kczpkKHRoaXMuY2xpcEJvdW5kcyksc2NyZWVuU2hhcGU6W2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF0scGl4ZWxSYXRpbzp0aGlzLnBpeGVsUmF0aW99LG4uYmluZCgpLG4uZHJhdyhlLlRSSUFOR0xFX1NUUklQLHRoaXMudmVydGV4Q291bnQpLG4udW5iaW5kKCl9fSxtLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyO3RoaXMuZGlydHk9ITA7dmFyIG49ISF0LmNvbm5lY3RHYXBzO1wiZGFzaFNjYWxlXCJpbiB0JiYodGhpcy5kYXNoU2NhbGU9dC5kYXNoU2NhbGUpLHRoaXMuaGFzQWxwaGE9ITEsXCJvcGFjaXR5XCJpbiB0JiYodGhpcy5vcGFjaXR5PSt0Lm9wYWNpdHksdGhpcy5vcGFjaXR5PDEmJih0aGlzLmhhc0FscGhhPSEwKSk7dmFyIGk9W10sYT1bXSxvPVtdLGM9MCx1PTAsaD1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSxmPXQucG9zaXRpb258fHQucG9zaXRpb25zO2lmKGYpe3ZhciBkPXQuY29sb3J8fHQuY29sb3JzfHxbMCwwLDAsMV0sZz10LmxpbmVXaWR0aHx8MSx2PSExO3Q6Zm9yKGU9MTtlPGYubGVuZ3RoOysrZSl7dmFyIG0seSx4LGI9ZltlLTFdLF89ZltlXTtmb3IoYS5wdXNoKGMpLG8ucHVzaChiLnNsaWNlKCkpLHI9MDtyPDM7KytyKXtpZihpc05hTihiW3JdKXx8aXNOYU4oX1tyXSl8fCFpc0Zpbml0ZShiW3JdKXx8IWlzRmluaXRlKF9bcl0pKXtpZighbiYmaS5sZW5ndGg+MCl7Zm9yKHZhciB3PTA7dzwyNDsrK3cpaS5wdXNoKGlbaS5sZW5ndGgtMTJdKTt1Kz0yLHY9ITB9Y29udGludWUgdH1oWzBdW3JdPU1hdGgubWluKGhbMF1bcl0sYltyXSxfW3JdKSxoWzFdW3JdPU1hdGgubWF4KGhbMV1bcl0sYltyXSxfW3JdKX1BcnJheS5pc0FycmF5KGRbMF0pPyhtPWQubGVuZ3RoPmUtMT9kW2UtMV06ZC5sZW5ndGg+MD9kW2QubGVuZ3RoLTFdOlswLDAsMCwxXSx5PWQubGVuZ3RoPmU/ZFtlXTpkLmxlbmd0aD4wP2RbZC5sZW5ndGgtMV06WzAsMCwwLDFdKTptPXk9ZCwzPT09bS5sZW5ndGgmJihtPVttWzBdLG1bMV0sbVsyXSwxXSksMz09PXkubGVuZ3RoJiYoeT1beVswXSx5WzFdLHlbMl0sMV0pLCF0aGlzLmhhc0FscGhhJiZtWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKSx4PUFycmF5LmlzQXJyYXkoZyk/Zy5sZW5ndGg+ZS0xP2dbZS0xXTpnLmxlbmd0aD4wP2dbZy5sZW5ndGgtMV06WzAsMCwwLDFdOmc7dmFyIGs9YztpZihjKz1wKGIsXyksdil7Zm9yKHI9MDtyPDI7KytyKWkucHVzaChiWzBdLGJbMV0sYlsyXSxfWzBdLF9bMV0sX1syXSxrLHgsbVswXSxtWzFdLG1bMl0sbVszXSk7dSs9Mix2PSExfWkucHVzaChiWzBdLGJbMV0sYlsyXSxfWzBdLF9bMV0sX1syXSxrLHgsbVswXSxtWzFdLG1bMl0sbVszXSxiWzBdLGJbMV0sYlsyXSxfWzBdLF9bMV0sX1syXSxrLC14LG1bMF0sbVsxXSxtWzJdLG1bM10sX1swXSxfWzFdLF9bMl0sYlswXSxiWzFdLGJbMl0sYywteCx5WzBdLHlbMV0seVsyXSx5WzNdLF9bMF0sX1sxXSxfWzJdLGJbMF0sYlsxXSxiWzJdLGMseCx5WzBdLHlbMV0seVsyXSx5WzNdKSx1Kz00fX1pZih0aGlzLmJ1ZmZlci51cGRhdGUoaSksYS5wdXNoKGMpLG8ucHVzaChmW2YubGVuZ3RoLTFdLnNsaWNlKCkpLHRoaXMuYm91bmRzPWgsdGhpcy52ZXJ0ZXhDb3VudD11LHRoaXMucG9pbnRzPW8sdGhpcy5hcmNMZW5ndGg9YSxcImRhc2hlc1wiaW4gdCl7dmFyIEE9dC5kYXNoZXMuc2xpY2UoKTtmb3IoQS51bnNoaWZ0KDApLGU9MTtlPEEubGVuZ3RoOysrZSlBW2VdPUFbZS0xXStBW2VdO3ZhciBUPWwobmV3IEFycmF5KDEwMjQpLFsyNTYsMSw0XSk7Zm9yKGU9MDtlPDI1NjsrK2Upe2ZvcihyPTA7cjw0OysrcilULnNldChlLDAsciwwKTsxJnMubGUoQSxBW0EubGVuZ3RoLTFdKmUvMjU1KT9ULnNldChlLDAsMCwwKTpULnNldChlLDAsMCwyNTUpfXRoaXMudGV4dHVyZS5zZXRQaXhlbHMoVCl9fSxtLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy52YW8uZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKX0sbS5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDt2YXIgZT1vKHQudmFsdWVbMF0sdC52YWx1ZVsxXSx0LnZhbHVlWzJdLDApLHI9cy5sZSh0aGlzLmFyY0xlbmd0aCxlKTtpZihyPDApcmV0dXJuIG51bGw7aWYocj09PXRoaXMuYXJjTGVuZ3RoLmxlbmd0aC0xKXJldHVybiBuZXcgZyh0aGlzLmFyY0xlbmd0aFt0aGlzLmFyY0xlbmd0aC5sZW5ndGgtMV0sdGhpcy5wb2ludHNbdGhpcy5wb2ludHMubGVuZ3RoLTFdLnNsaWNlKCkscik7Zm9yKHZhciBuPXRoaXMucG9pbnRzW3JdLGk9dGhpcy5wb2ludHNbTWF0aC5taW4ocisxLHRoaXMucG9pbnRzLmxlbmd0aC0xKV0sYT0oZS10aGlzLmFyY0xlbmd0aFtyXSkvKHRoaXMuYXJjTGVuZ3RoW3IrMV0tdGhpcy5hcmNMZW5ndGhbcl0pLGw9MS1hLGM9WzAsMCwwXSx1PTA7dTwzOysrdSljW3VdPWwqblt1XSthKmlbdV07dmFyIGg9TWF0aC5taW4oYTwuNT9yOnIrMSx0aGlzLnBvaW50cy5sZW5ndGgtMSk7cmV0dXJuIG5ldyBnKGUsYyxoLHRoaXMucG9pbnRzW2hdKX19LHtcIi4vbGliL3NoYWRlcnNcIjoyNTEsXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiOjI1MyxcImdsLWJ1ZmZlclwiOjIzOCxcImdsLXRleHR1cmUyZFwiOjMxNSxcImdsLXZhb1wiOjMyMCxcImdsc2wtcmVhZC1mbG9hdFwiOjM5MyxuZGFycmF5OjQ0M31dLDI1MzpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsxMDJdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoxMDJ9XSwyNTQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89ciphLWkqbjtyZXR1cm4gbz8obz0xL28sdFswXT1hKm8sdFsxXT0tbipvLHRbMl09LWkqbyx0WzNdPXIqbyx0KTpudWxsfX0se31dLDI1NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1lWzRdLHM9ZVs1XSxsPWVbNl0sYz1lWzddLHU9ZVs4XSxoPXUqby1zKmMsZj0tdSphK3MqbCxwPWMqYS1vKmwsZD1yKmgrbipmK2kqcDtyZXR1cm4gZD8oZD0xL2QsdFswXT1oKmQsdFsxXT0oLXUqbitpKmMpKmQsdFsyXT0ocypuLWkqbykqZCx0WzNdPWYqZCx0WzRdPSh1KnItaSpsKSpkLHRbNV09KC1zKnIraSphKSpkLHRbNl09cCpkLHRbN109KC1jKnIrbipsKSpkLHRbOF09KG8qci1uKmEpKmQsdCk6bnVsbH19LHt9XSwyNTY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEZsb2F0MzJBcnJheSgxNik7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlWzRdPXRbNF0sZVs1XT10WzVdLGVbNl09dFs2XSxlWzddPXRbN10sZVs4XT10WzhdLGVbOV09dFs5XSxlWzEwXT10WzEwXSxlWzExXT10WzExXSxlWzEyXT10WzEyXSxlWzEzXT10WzEzXSxlWzE0XT10WzE0XSxlWzE1XT10WzE1XSxlfX0se31dLDI1NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PW5ldyBGbG9hdDMyQXJyYXkoMTYpO3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSwyNTg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdLGk9dFszXSxhPXRbNF0sbz10WzVdLHM9dFs2XSxsPXRbN10sYz10WzhdLHU9dFs5XSxoPXRbMTBdLGY9dFsxMV0scD10WzEyXSxkPXRbMTNdLGc9dFsxNF0sdj10WzE1XTtyZXR1cm4oZSpvLXIqYSkqKGgqdi1mKmcpLShlKnMtbiphKSoodSp2LWYqZCkrKGUqbC1pKmEpKih1KmctaCpkKSsocipzLW4qbykqKGMqdi1mKnApLShyKmwtaSpvKSooYypnLWgqcCkrKG4qbC1pKnMpKihjKmQtdSpwKX19LHt9XSwyNTk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89cityLHM9bituLGw9aStpLGM9cipvLHU9bipvLGg9bipzLGY9aSpvLHA9aSpzLGQ9aSpsLGc9YSpvLHY9YSpzLG09YSpsO3JldHVybiB0WzBdPTEtaC1kLHRbMV09dSttLHRbMl09Zi12LHRbM109MCx0WzRdPXUtbSx0WzVdPTEtYy1kLHRbNl09cCtnLHRbN109MCx0WzhdPWYrdix0WzldPXAtZyx0WzEwXT0xLWMtaCx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSwyNjA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1uK24sbD1pK2ksYz1hK2EsdT1uKnMsaD1uKmwsZj1uKmMscD1pKmwsZD1pKmMsZz1hKmMsdj1vKnMsbT1vKmwseT1vKmM7cmV0dXJuIHRbMF09MS0ocCtnKSx0WzFdPWgreSx0WzJdPWYtbSx0WzNdPTAsdFs0XT1oLXksdFs1XT0xLSh1K2cpLHRbNl09ZCt2LHRbN109MCx0WzhdPWYrbSx0WzldPWQtdix0WzEwXT0xLSh1K3ApLHRbMTFdPTAsdFsxMl09clswXSx0WzEzXT1yWzFdLHRbMTRdPXJbMl0sdFsxNV09MSx0fX0se31dLDI2MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9fSx7fV0sMjYyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPWVbNF0scz1lWzVdLGw9ZVs2XSxjPWVbN10sdT1lWzhdLGg9ZVs5XSxmPWVbMTBdLHA9ZVsxMV0sZD1lWzEyXSxnPWVbMTNdLHY9ZVsxNF0sbT1lWzE1XSx5PXIqcy1uKm8seD1yKmwtaSpvLGI9cipjLWEqbyxfPW4qbC1pKnMsdz1uKmMtYSpzLGs9aSpjLWEqbCxBPXUqZy1oKmQsVD11KnYtZipkLE09dSptLXAqZCxTPWgqdi1mKmcsRT1oKm0tcCpnLEM9ZiptLXAqdixMPXkqQy14KkUrYipTK18qTS13KlQraypBO2lmKCFMKXJldHVybiBudWxsO3JldHVybiBMPTEvTCx0WzBdPShzKkMtbCpFK2MqUykqTCx0WzFdPShpKkUtbipDLWEqUykqTCx0WzJdPShnKmstdip3K20qXykqTCx0WzNdPShmKnctaCprLXAqXykqTCx0WzRdPShsKk0tbypDLWMqVCkqTCx0WzVdPShyKkMtaSpNK2EqVCkqTCx0WzZdPSh2KmItZCprLW0qeCkqTCx0WzddPSh1KmstZipiK3AqeCkqTCx0WzhdPShvKkUtcypNK2MqQSkqTCx0WzldPShuKk0tcipFLWEqQSkqTCx0WzEwXT0oZCp3LWcqYittKnkpKkwsdFsxMV09KGgqYi11KnctcCp5KSpMLHRbMTJdPShzKlQtbypTLWwqQSkqTCx0WzEzXT0ocipTLW4qVCtpKkEpKkwsdFsxNF09KGcqeC1kKl8tdip5KSpMLHRbMTVdPSh1Kl8taCp4K2YqeSkqTCx0fX0se31dLDI2MzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuL2lkZW50aXR5XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYSxvLHMsbCxjLHUsaCxmLHAsZCxnPWVbMF0sdj1lWzFdLG09ZVsyXSx5PWlbMF0seD1pWzFdLGI9aVsyXSxfPXJbMF0sdz1yWzFdLGs9clsyXTtpZihNYXRoLmFicyhnLV8pPDFlLTYmJk1hdGguYWJzKHYtdyk8MWUtNiYmTWF0aC5hYnMobS1rKTwxZS02KXJldHVybiBuKHQpO2g9Zy1fLGY9di13LHA9bS1rLGQ9MS9NYXRoLnNxcnQoaCpoK2YqZitwKnApLGE9eCoocCo9ZCktYiooZio9ZCksbz1iKihoKj1kKS15KnAscz15KmYteCpoLChkPU1hdGguc3FydChhKmErbypvK3MqcykpPyhhKj1kPTEvZCxvKj1kLHMqPWQpOihhPTAsbz0wLHM9MCk7bD1mKnMtcCpvLGM9cCphLWgqcyx1PWgqby1mKmEsKGQ9TWF0aC5zcXJ0KGwqbCtjKmMrdSp1KSk/KGwqPWQ9MS9kLGMqPWQsdSo9ZCk6KGw9MCxjPTAsdT0wKTtyZXR1cm4gdFswXT1hLHRbMV09bCx0WzJdPWgsdFszXT0wLHRbNF09byx0WzVdPWMsdFs2XT1mLHRbN109MCx0WzhdPXMsdFs5XT11LHRbMTBdPXAsdFsxMV09MCx0WzEyXT0tKGEqZytvKnYrcyptKSx0WzEzXT0tKGwqZytjKnYrdSptKSx0WzE0XT0tKGgqZytmKnYrcCptKSx0WzE1XT0xLHR9fSx7XCIuL2lkZW50aXR5XCI6MjYxfV0sMjY0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sYz1lWzZdLHU9ZVs3XSxoPWVbOF0sZj1lWzldLHA9ZVsxMF0sZD1lWzExXSxnPWVbMTJdLHY9ZVsxM10sbT1lWzE0XSx5PWVbMTVdLHg9clswXSxiPXJbMV0sXz1yWzJdLHc9clszXTtyZXR1cm4gdFswXT14Km4rYipzK18qaCt3KmcsdFsxXT14KmkrYipsK18qZit3KnYsdFsyXT14KmErYipjK18qcCt3Km0sdFszXT14Km8rYip1K18qZCt3KnkseD1yWzRdLGI9cls1XSxfPXJbNl0sdz1yWzddLHRbNF09eCpuK2IqcytfKmgrdypnLHRbNV09eCppK2IqbCtfKmYrdyp2LHRbNl09eCphK2IqYytfKnArdyptLHRbN109eCpvK2IqdStfKmQrdyp5LHg9cls4XSxiPXJbOV0sXz1yWzEwXSx3PXJbMTFdLHRbOF09eCpuK2IqcytfKmgrdypnLHRbOV09eCppK2IqbCtfKmYrdyp2LHRbMTBdPXgqYStiKmMrXypwK3cqbSx0WzExXT14Km8rYip1K18qZCt3KnkseD1yWzEyXSxiPXJbMTNdLF89clsxNF0sdz1yWzE1XSx0WzEyXT14Km4rYipzK18qaCt3KmcsdFsxM109eCppK2IqbCtfKmYrdyp2LHRbMTRdPXgqYStiKmMrXypwK3cqbSx0WzE1XT14Km8rYip1K18qZCt3KnksdH19LHt9XSwyNjU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9MS8oZS1yKSxsPTEvKG4taSksYz0xLyhhLW8pO3JldHVybiB0WzBdPS0yKnMsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09LTIqbCx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MipjLHRbMTFdPTAsdFsxMl09KGUrcikqcyx0WzEzXT0oaStuKSpsLHRbMTRdPShvK2EpKmMsdFsxNV09MSx0fX0se31dLDI2NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPTEvTWF0aC50YW4oZS8yKSxvPTEvKG4taSk7cmV0dXJuIHRbMF09YS9yLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPWEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPShpK24pKm8sdFsxMV09LTEsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTIqaSpuKm8sdFsxNV09MCx0fX0se31dLDI2NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scyxsLGMsdSxoLGYscCxkLGcsdixtLHkseCxiLF8sdyxrLEEsVCxNLFMsRT1uWzBdLEM9blsxXSxMPW5bMl0sej1NYXRoLnNxcnQoRSpFK0MqQytMKkwpO2lmKE1hdGguYWJzKHopPDFlLTYpcmV0dXJuIG51bGw7RSo9ej0xL3osQyo9eixMKj16LGk9TWF0aC5zaW4ociksYT1NYXRoLmNvcyhyKSxvPTEtYSxzPWVbMF0sbD1lWzFdLGM9ZVsyXSx1PWVbM10saD1lWzRdLGY9ZVs1XSxwPWVbNl0sZD1lWzddLGc9ZVs4XSx2PWVbOV0sbT1lWzEwXSx5PWVbMTFdLHg9RSpFKm8rYSxiPUMqRSpvK0wqaSxfPUwqRSpvLUMqaSx3PUUqQypvLUwqaSxrPUMqQypvK2EsQT1MKkMqbytFKmksVD1FKkwqbytDKmksTT1DKkwqby1FKmksUz1MKkwqbythLHRbMF09cyp4K2gqYitnKl8sdFsxXT1sKngrZipiK3YqXyx0WzJdPWMqeCtwKmIrbSpfLHRbM109dSp4K2QqYit5Kl8sdFs0XT1zKncraCprK2cqQSx0WzVdPWwqdytmKmsrdipBLHRbNl09Yyp3K3AqayttKkEsdFs3XT11KncrZCprK3kqQSx0WzhdPXMqVCtoKk0rZypTLHRbOV09bCpUK2YqTSt2KlMsdFsxMF09YypUK3AqTSttKlMsdFsxMV09dSpUK2QqTSt5KlMsZSE9PXQmJih0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSk7cmV0dXJuIHR9fSx7fV0sMjY4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVs0XSxvPWVbNV0scz1lWzZdLGw9ZVs3XSxjPWVbOF0sdT1lWzldLGg9ZVsxMF0sZj1lWzExXTtlIT09dCYmKHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSk7cmV0dXJuIHRbNF09YSppK2Mqbix0WzVdPW8qaSt1Km4sdFs2XT1zKmkraCpuLHRbN109bCppK2Yqbix0WzhdPWMqaS1hKm4sdFs5XT11KmktbypuLHRbMTBdPWgqaS1zKm4sdFsxMV09ZippLWwqbix0fX0se31dLDI2OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbMF0sbz1lWzFdLHM9ZVsyXSxsPWVbM10sYz1lWzhdLHU9ZVs5XSxoPWVbMTBdLGY9ZVsxMV07ZSE9PXQmJih0WzRdPWVbNF0sdFs1XT1lWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pO3JldHVybiB0WzBdPWEqaS1jKm4sdFsxXT1vKmktdSpuLHRbMl09cyppLWgqbix0WzNdPWwqaS1mKm4sdFs4XT1hKm4rYyppLHRbOV09bypuK3UqaSx0WzEwXT1zKm4raCppLHRbMTFdPWwqbitmKmksdH19LHt9XSwyNzA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzBdLG89ZVsxXSxzPWVbMl0sbD1lWzNdLGM9ZVs0XSx1PWVbNV0saD1lWzZdLGY9ZVs3XTtlIT09dCYmKHRbOF09ZVs4XSx0WzldPWVbOV0sdFsxMF09ZVsxMF0sdFsxMV09ZVsxMV0sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pO3JldHVybiB0WzBdPWEqaStjKm4sdFsxXT1vKmkrdSpuLHRbMl09cyppK2gqbix0WzNdPWwqaStmKm4sdFs0XT1jKmktYSpuLHRbNV09dSppLW8qbix0WzZdPWgqaS1zKm4sdFs3XT1mKmktbCpuLHR9fSx7fV0sMjcxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yWzBdLGk9clsxXSxhPXJbMl07cmV0dXJuIHRbMF09ZVswXSpuLHRbMV09ZVsxXSpuLHRbMl09ZVsyXSpuLHRbM109ZVszXSpuLHRbNF09ZVs0XSppLHRbNV09ZVs1XSppLHRbNl09ZVs2XSppLHRbN109ZVs3XSppLHRbOF09ZVs4XSphLHRbOV09ZVs5XSphLHRbMTBdPWVbMTBdKmEsdFsxMV09ZVsxMV0qYSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSx0fX0se31dLDI3MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scyxsLGMsdSxoLGYscCxkLGc9clswXSx2PXJbMV0sbT1yWzJdO2U9PT10Pyh0WzEyXT1lWzBdKmcrZVs0XSp2K2VbOF0qbStlWzEyXSx0WzEzXT1lWzFdKmcrZVs1XSp2K2VbOV0qbStlWzEzXSx0WzE0XT1lWzJdKmcrZVs2XSp2K2VbMTBdKm0rZVsxNF0sdFsxNV09ZVszXSpnK2VbN10qditlWzExXSptK2VbMTVdKToobj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sYz1lWzZdLHU9ZVs3XSxoPWVbOF0sZj1lWzldLHA9ZVsxMF0sZD1lWzExXSx0WzBdPW4sdFsxXT1pLHRbMl09YSx0WzNdPW8sdFs0XT1zLHRbNV09bCx0WzZdPWMsdFs3XT11LHRbOF09aCx0WzldPWYsdFsxMF09cCx0WzExXT1kLHRbMTJdPW4qZytzKnYraCptK2VbMTJdLHRbMTNdPWkqZytsKnYrZiptK2VbMTNdLHRbMTRdPWEqZytjKnYrcCptK2VbMTRdLHRbMTVdPW8qZyt1KnYrZCptK2VbMTVdKTtyZXR1cm4gdH19LHt9XSwyNzM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZih0PT09ZSl7dmFyIHI9ZVsxXSxuPWVbMl0saT1lWzNdLGE9ZVs2XSxvPWVbN10scz1lWzExXTt0WzFdPWVbNF0sdFsyXT1lWzhdLHRbM109ZVsxMl0sdFs0XT1yLHRbNl09ZVs5XSx0WzddPWVbMTNdLHRbOF09bix0WzldPWEsdFsxMV09ZVsxNF0sdFsxMl09aSx0WzEzXT1vLHRbMTRdPXN9ZWxzZSB0WzBdPWVbMF0sdFsxXT1lWzRdLHRbMl09ZVs4XSx0WzNdPWVbMTJdLHRbNF09ZVsxXSx0WzVdPWVbNV0sdFs2XT1lWzldLHRbN109ZVsxM10sdFs4XT1lWzJdLHRbOV09ZVs2XSx0WzEwXT1lWzEwXSx0WzExXT1lWzE0XSx0WzEyXT1lWzNdLHRbMTNdPWVbN10sdFsxNF09ZVsxMV0sdFsxNV09ZVsxNV07cmV0dXJuIHR9fSx7fV0sMjc0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRbMF09MS9lWzBdO2JyZWFrO2Nhc2UgNDpuKHQsZSk7YnJlYWs7Y2FzZSA5OmkodCxlKTticmVhaztjYXNlIDE2OmEodCxlKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImN1cnJlbnRseSBzdXBwb3J0cyBtYXRyaWNlcyB1cCB0byA0eDRcIil9cmV0dXJuIHR9O3ZhciBuPXQoXCJnbC1tYXQyL2ludmVydFwiKSxpPXQoXCJnbC1tYXQzL2ludmVydFwiKSxhPXQoXCJnbC1tYXQ0L2ludmVydFwiKX0se1wiZ2wtbWF0Mi9pbnZlcnRcIjoyNTQsXCJnbC1tYXQzL2ludmVydFwiOjI1NSxcImdsLW1hdDQvaW52ZXJ0XCI6MjYyfV0sMjc1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImJhcnljZW50cmljXCIpLGk9dChcInBvbHl0b3BlLWNsb3Nlc3QtcG9pbnQvbGliL2Nsb3Nlc3RfcG9pbnRfMmQuanNcIik7ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj1bMCwwLDAsMF0sbj0wO248NDsrK24pZm9yKHZhciBpPTA7aTw0OysraSlyW2ldKz10WzQqbitpXSplW25dO3JldHVybiByfWZ1bmN0aW9uIG8odCxlLHIsbixpKXtmb3IodmFyIG89YShuLGEocixhKGUsW3RbMF0sdFsxXSx0WzJdLDFdKSkpLHM9MDtzPDM7KytzKW9bc10vPW9bM107cmV0dXJuWy41KmlbMF0qKDErb1swXSksLjUqaVsxXSooMS1vWzFdKV19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEscyxsKXtpZigxPT09dC5sZW5ndGgpcmV0dXJuWzAsdFswXS5zbGljZSgpXTtmb3IodmFyIGM9bmV3IEFycmF5KHQubGVuZ3RoKSx1PTA7dTx0Lmxlbmd0aDsrK3UpY1t1XT1vKHRbdV0scixhLHMsbCk7Zm9yKHZhciBoPTAsZj0xLzAsdT0wO3U8Yy5sZW5ndGg7Kyt1KXtmb3IodmFyIHA9MCxkPTA7ZDwyOysrZClwKz1NYXRoLnBvdyhjW3VdW2RdLWVbZF0sMik7cDxmJiYoZj1wLGg9dSl9Zm9yKHZhciBnPWZ1bmN0aW9uKHQsZSl7aWYoMj09PXQubGVuZ3RoKXtmb3IodmFyIHI9MCxhPTAsbz0wO288MjsrK28pcis9TWF0aC5wb3coZVtvXS10WzBdW29dLDIpLGErPU1hdGgucG93KGVbb10tdFsxXVtvXSwyKTtyZXR1cm4gcj1NYXRoLnNxcnQociksYT1NYXRoLnNxcnQoYSkscithPDFlLTY/WzEsMF06W2EvKHIrYSksci8oYStyKV19aWYoMz09PXQubGVuZ3RoKXt2YXIgcz1bMCwwXTtyZXR1cm4gaSh0WzBdLHRbMV0sdFsyXSxlLHMpLG4odCxzKX1yZXR1cm5bXX0oYyxlKSx2PTAsdT0wO3U8MzsrK3Upe2lmKGdbdV08LS4wMDF8fGdbdV0+MS4wMDAxKXJldHVybiBudWxsO3YrPWdbdV19aWYoTWF0aC5hYnModi0xKT4uMDAxKXJldHVybiBudWxsO3JldHVybltoLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVswLDAsMF0sbj0wO248dC5sZW5ndGg7KytuKWZvcih2YXIgaT10W25dLGE9ZVtuXSxvPTA7bzwzOysrbylyW29dKz1hKmlbb107cmV0dXJuIHJ9KHQsZyksZ119fSx7YmFyeWNlbnRyaWM6NjQsXCJwb2x5dG9wZS1jbG9zZXN0LXBvaW50L2xpYi9jbG9zZXN0X3BvaW50XzJkLmpzXCI6NDc0fV0sMjc2OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcImdsc2xpZnlcIiksaT1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uLCBub3JtYWw7XFxuYXR0cmlidXRlIHZlYzQgY29sb3I7XFxuYXR0cmlidXRlIHZlYzIgdXY7XFxuXFxudW5pZm9ybSBtYXQ0IG1vZGVsXFxuICAgICAgICAgICAsIHZpZXdcXG4gICAgICAgICAgICwgcHJvamVjdGlvblxcbiAgICAgICAgICAgLCBpbnZlcnNlTW9kZWw7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uXFxuICAgICAgICAgICAsIGxpZ2h0UG9zaXRpb247XFxuXFxudmFyeWluZyB2ZWMzIGZfbm9ybWFsXFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cXG4gICAgICAgICAgICwgZl9leWVEaXJlY3Rpb25cXG4gICAgICAgICAgICwgZl9kYXRhO1xcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xcbnZhcnlpbmcgdmVjMiBmX3V2O1xcblxcbnZlYzQgcHJvamVjdCh2ZWMzIHApIHtcXG4gIHJldHVybiBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwLCAxLjApO1xcbn1cXG5cXG52b2lkIG1haW4oKSB7XFxuICBnbF9Qb3NpdGlvbiAgICAgID0gcHJvamVjdChwb3NpdGlvbik7XFxuXFxuICAvL0xpZ2h0aW5nIGdlb21ldHJ5IHBhcmFtZXRlcnNcXG4gIHZlYzQgY2FtZXJhQ29vcmRpbmF0ZSA9IHZpZXcgKiB2ZWM0KHBvc2l0aW9uICwgMS4wKTtcXG4gIGNhbWVyYUNvb3JkaW5hdGUueHl6IC89IGNhbWVyYUNvb3JkaW5hdGUudztcXG4gIGZfbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XFxuICBmX2V5ZURpcmVjdGlvbiAgID0gZXllUG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcXG4gIGZfbm9ybWFsICA9IG5vcm1hbGl6ZSgodmVjNChub3JtYWwsIDAuMCkgKiBpbnZlcnNlTW9kZWwpLnh5eik7XFxuXFxuICBmX2NvbG9yICAgICAgICAgID0gY29sb3I7XFxuICBmX2RhdGEgICAgICAgICAgID0gcG9zaXRpb247XFxuICBmX3V2ICAgICAgICAgICAgID0gdXY7XFxufVxcblwiXSksYT1uKFtcIiNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlXFxuXFxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuZmxvYXQgYmVja21hbm5EaXN0cmlidXRpb24oZmxvYXQgeCwgZmxvYXQgcm91Z2huZXNzKSB7XFxuICBmbG9hdCBOZG90SCA9IG1heCh4LCAwLjAwMDEpO1xcbiAgZmxvYXQgY29zMkFscGhhID0gTmRvdEggKiBOZG90SDtcXG4gIGZsb2F0IHRhbjJBbHBoYSA9IChjb3MyQWxwaGEgLSAxLjApIC8gY29zMkFscGhhO1xcbiAgZmxvYXQgcm91Z2huZXNzMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcXG4gIGZsb2F0IGRlbm9tID0gMy4xNDE1OTI2NTM1ODk3OTMgKiByb3VnaG5lc3MyICogY29zMkFscGhhICogY29zMkFscGhhO1xcbiAgcmV0dXJuIGV4cCh0YW4yQWxwaGEgLyByb3VnaG5lc3MyKSAvIGRlbm9tO1xcbn1cXG5cXG5mbG9hdCBjb29rVG9ycmFuY2VTcGVjdWxhcihcXG4gIHZlYzMgbGlnaHREaXJlY3Rpb24sXFxuICB2ZWMzIHZpZXdEaXJlY3Rpb24sXFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwsXFxuICBmbG9hdCByb3VnaG5lc3MsXFxuICBmbG9hdCBmcmVzbmVsKSB7XFxuXFxuICBmbG9hdCBWZG90TiA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XFxuICBmbG9hdCBMZG90TiA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xcblxcbiAgLy9IYWxmIGFuZ2xlIHZlY3RvclxcbiAgdmVjMyBIID0gbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uICsgdmlld0RpcmVjdGlvbik7XFxuXFxuICAvL0dlb21ldHJpYyB0ZXJtXFxuICBmbG9hdCBOZG90SCA9IG1heChkb3Qoc3VyZmFjZU5vcm1hbCwgSCksIDAuMCk7XFxuICBmbG9hdCBWZG90SCA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcXG4gIGZsb2F0IExkb3RIID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcXG4gIGZsb2F0IEcxID0gKDIuMCAqIE5kb3RIICogVmRvdE4pIC8gVmRvdEg7XFxuICBmbG9hdCBHMiA9ICgyLjAgKiBOZG90SCAqIExkb3ROKSAvIExkb3RIO1xcbiAgZmxvYXQgRyA9IG1pbigxLjAsIG1pbihHMSwgRzIpKTtcXG4gIFxcbiAgLy9EaXN0cmlidXRpb24gdGVybVxcbiAgZmxvYXQgRCA9IGJlY2ttYW5uRGlzdHJpYnV0aW9uKE5kb3RILCByb3VnaG5lc3MpO1xcblxcbiAgLy9GcmVzbmVsIHRlcm1cXG4gIGZsb2F0IEYgPSBwb3coMS4wIC0gVmRvdE4sIGZyZXNuZWwpO1xcblxcbiAgLy9NdWx0aXBseSB0ZXJtcyBhbmQgZG9uZVxcbiAgcmV0dXJuICBHICogRiAqIEQgLyBtYXgoMy4xNDE1OTI2NSAqIFZkb3ROLCAwLjAwMDAwMSk7XFxufVxcblxcbi8vI3ByYWdtYSBnbHNsaWZ5OiBiZWNrbWFubiA9IHJlcXVpcmUoZ2xzbC1zcGVjdWxhci1iZWNrbWFubikgLy8gdXNlZCBpbiBnbC1zdXJmYWNlM2RcXG5cXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcXG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xcbn1cXG5cXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcXG51bmlmb3JtIGZsb2F0IHJvdWdobmVzc1xcbiAgICAgICAgICAgICwgZnJlc25lbFxcbiAgICAgICAgICAgICwga2FtYmllbnRcXG4gICAgICAgICAgICAsIGtkaWZmdXNlXFxuICAgICAgICAgICAgLCBrc3BlY3VsYXI7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG5cXG52YXJ5aW5nIHZlYzMgZl9ub3JtYWxcXG4gICAgICAgICAgICwgZl9saWdodERpcmVjdGlvblxcbiAgICAgICAgICAgLCBmX2V5ZURpcmVjdGlvblxcbiAgICAgICAgICAgLCBmX2RhdGE7XFxudmFyeWluZyB2ZWM0IGZfY29sb3I7XFxudmFyeWluZyB2ZWMyIGZfdXY7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgaWYgKGZfY29sb3IuYSA9PSAwLjAgfHxcXG4gICAgb3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBmX2RhdGEpXFxuICApIGRpc2NhcmQ7XFxuXFxuICB2ZWMzIE4gPSBub3JtYWxpemUoZl9ub3JtYWwpO1xcbiAgdmVjMyBMID0gbm9ybWFsaXplKGZfbGlnaHREaXJlY3Rpb24pO1xcbiAgdmVjMyBWID0gbm9ybWFsaXplKGZfZXllRGlyZWN0aW9uKTtcXG5cXG4gIGlmKGdsX0Zyb250RmFjaW5nKSB7XFxuICAgIE4gPSAtTjtcXG4gIH1cXG5cXG4gIGZsb2F0IHNwZWN1bGFyID0gbWluKDEuMCwgbWF4KDAuMCwgY29va1RvcnJhbmNlU3BlY3VsYXIoTCwgViwgTiwgcm91Z2huZXNzLCBmcmVzbmVsKSkpO1xcbiAgLy9mbG9hdCBzcGVjdWxhciA9IG1heCgwLjAsIGJlY2ttYW5uKEwsIFYsIE4sIHJvdWdobmVzcykpOyAvLyB1c2VkIGluIGdsLXN1cmZhY2UzZFxcblxcbiAgZmxvYXQgZGlmZnVzZSAgPSBtaW4oa2FtYmllbnQgKyBrZGlmZnVzZSAqIG1heChkb3QoTiwgTCksIDAuMCksIDEuMCk7XFxuXFxuICB2ZWM0IHN1cmZhY2VDb2xvciA9IHZlYzQoZl9jb2xvci5yZ2IsIDEuMCkgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dik7XFxuICB2ZWM0IGxpdENvbG9yID0gc3VyZmFjZUNvbG9yLmEgKiB2ZWM0KGRpZmZ1c2UgKiBzdXJmYWNlQ29sb3IucmdiICsga3NwZWN1bGFyICogdmVjMygxLDEsMSkgKiBzcGVjdWxhciwgIDEuMCk7XFxuXFxuICBnbF9GcmFnQ29sb3IgPSBsaXRDb2xvciAqIGZfY29sb3IuYTtcXG59XFxuXCJdKSxvPW4oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzQgY29sb3I7XFxuYXR0cmlidXRlIHZlYzIgdXY7XFxuXFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcblxcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xcbnZhcnlpbmcgdmVjMyBmX2RhdGE7XFxudmFyeWluZyB2ZWMyIGZfdXY7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG4gIGZfY29sb3IgPSBjb2xvcjtcXG4gIGZfZGF0YSAgPSBwb3NpdGlvbjtcXG4gIGZfdXYgICAgPSB1djtcXG59XCJdKSxzPW4oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcXG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XFxuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcXG59XFxuXFxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxuXFxudmFyeWluZyB2ZWM0IGZfY29sb3I7XFxudmFyeWluZyB2ZWMzIGZfZGF0YTtcXG52YXJ5aW5nIHZlYzIgZl91djtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBmX2RhdGEpKSBkaXNjYXJkO1xcblxcbiAgZ2xfRnJhZ0NvbG9yID0gZl9jb2xvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBmX3V2KSAqIG9wYWNpdHk7XFxufVwiXSksbD1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XFxuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XFxufVxcblxcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xcbmF0dHJpYnV0ZSBmbG9hdCBwb2ludFNpemU7XFxuXFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xcblxcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xcbnZhcnlpbmcgdmVjMiBmX3V2O1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHBvc2l0aW9uKSkge1xcblxcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMC4wLCAwLjAgLDAuMCAsMC4wKTtcXG4gIH0gZWxzZSB7XFxuICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxuICB9XFxuICBnbF9Qb2ludFNpemUgPSBwb2ludFNpemU7XFxuICBmX2NvbG9yID0gY29sb3I7XFxuICBmX3V2ID0gdXY7XFxufVwiXSksYz1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xcblxcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xcbnZhcnlpbmcgdmVjMiBmX3V2O1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzIgcG9pbnRSID0gZ2xfUG9pbnRDb29yZC54eSAtIHZlYzIoMC41LCAwLjUpO1xcbiAgaWYoZG90KHBvaW50UiwgcG9pbnRSKSA+IDAuMjUpIHtcXG4gICAgZGlzY2FyZDtcXG4gIH1cXG4gIGdsX0ZyYWdDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dikgKiBvcGFjaXR5O1xcbn1cIl0pLHU9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjNCBpZDtcXG5cXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XFxuXFxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XFxudmFyeWluZyB2ZWM0IGZfaWQ7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG4gIGZfaWQgICAgICAgID0gaWQ7XFxuICBmX3Bvc2l0aW9uICA9IHBvc2l0aW9uO1xcbn1cIl0pLGg9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcXG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xcbn1cXG5cXG51bmlmb3JtIHZlYzMgIGNsaXBCb3VuZHNbMl07XFxudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XFxuXFxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XFxudmFyeWluZyB2ZWM0IGZfaWQ7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9wb3NpdGlvbikpIGRpc2NhcmQ7XFxuXFxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZCwgZl9pZC54eXopO1xcbn1cIl0pLGY9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcXG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xcbn1cXG5cXG5hdHRyaWJ1dGUgdmVjMyAgcG9zaXRpb247XFxuYXR0cmlidXRlIGZsb2F0IHBvaW50U2l6ZTtcXG5hdHRyaWJ1dGUgdmVjNCAgaWQ7XFxuXFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xcblxcbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjNCBmX2lkO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHBvc2l0aW9uKSkge1xcblxcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMC4wKTtcXG4gIH0gZWxzZSB7XFxuICAgIGdsX1Bvc2l0aW9uICA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xcbiAgICBnbF9Qb2ludFNpemUgPSBwb2ludFNpemU7XFxuICB9XFxuICBmX2lkICAgICAgICAgPSBpZDtcXG4gIGZfcG9zaXRpb24gICA9IHBvc2l0aW9uO1xcbn1cIl0pLHA9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcXG5cXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XFxuXFxudm9pZCBtYWluKCkge1xcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG59XCJdKSxkPW4oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxudW5pZm9ybSB2ZWMzIGNvbnRvdXJDb2xvcjtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbnRvdXJDb2xvciwgMS4wKTtcXG59XFxuXCJdKTtyLm1lc2hTaGFkZXI9e3ZlcnRleDppLGZyYWdtZW50OmEsYXR0cmlidXRlczpbe25hbWU6XCJwb3NpdGlvblwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwibm9ybWFsXCIsdHlwZTpcInZlYzNcIn0se25hbWU6XCJjb2xvclwiLHR5cGU6XCJ2ZWM0XCJ9LHtuYW1lOlwidXZcIix0eXBlOlwidmVjMlwifV19LHIud2lyZVNoYWRlcj17dmVydGV4Om8sZnJhZ21lbnQ6cyxhdHRyaWJ1dGVzOlt7bmFtZTpcInBvc2l0aW9uXCIsdHlwZTpcInZlYzNcIn0se25hbWU6XCJjb2xvclwiLHR5cGU6XCJ2ZWM0XCJ9LHtuYW1lOlwidXZcIix0eXBlOlwidmVjMlwifV19LHIucG9pbnRTaGFkZXI9e3ZlcnRleDpsLGZyYWdtZW50OmMsYXR0cmlidXRlczpbe25hbWU6XCJwb3NpdGlvblwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwiY29sb3JcIix0eXBlOlwidmVjNFwifSx7bmFtZTpcInV2XCIsdHlwZTpcInZlYzJcIn0se25hbWU6XCJwb2ludFNpemVcIix0eXBlOlwiZmxvYXRcIn1dfSxyLnBpY2tTaGFkZXI9e3ZlcnRleDp1LGZyYWdtZW50OmgsYXR0cmlidXRlczpbe25hbWU6XCJwb3NpdGlvblwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwiaWRcIix0eXBlOlwidmVjNFwifV19LHIucG9pbnRQaWNrU2hhZGVyPXt2ZXJ0ZXg6ZixmcmFnbWVudDpoLGF0dHJpYnV0ZXM6W3tuYW1lOlwicG9zaXRpb25cIix0eXBlOlwidmVjM1wifSx7bmFtZTpcInBvaW50U2l6ZVwiLHR5cGU6XCJmbG9hdFwifSx7bmFtZTpcImlkXCIsdHlwZTpcInZlYzRcIn1dfSxyLmNvbnRvdXJTaGFkZXI9e3ZlcnRleDpwLGZyYWdtZW50OmQsYXR0cmlidXRlczpbe25hbWU6XCJwb3NpdGlvblwiLHR5cGU6XCJ2ZWMzXCJ9XX19LHtnbHNsaWZ5OjQwMn1dLDI3NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbC1zaGFkZXJcIiksaT10KFwiZ2wtYnVmZmVyXCIpLGE9dChcImdsLXZhb1wiKSxvPXQoXCJnbC10ZXh0dXJlMmRcIikscz10KFwibm9ybWFsc1wiKSxsPXQoXCJnbC1tYXQ0L211bHRpcGx5XCIpLGM9dChcImdsLW1hdDQvaW52ZXJ0XCIpLHU9dChcIm5kYXJyYXlcIiksaD10KFwiY29sb3JtYXBcIiksZj10KFwic2ltcGxpY2lhbC1jb21wbGV4LWNvbnRvdXJcIikscD10KFwidHlwZWRhcnJheS1wb29sXCIpLGQ9dChcIi4vbGliL3NoYWRlcnNcIiksZz10KFwiLi9saWIvY2xvc2VzdC1wb2ludFwiKSx2PWQubWVzaFNoYWRlcixtPWQud2lyZVNoYWRlcix5PWQucG9pbnRTaGFkZXIseD1kLnBpY2tTaGFkZXIsYj1kLnBvaW50UGlja1NoYWRlcixfPWQuY29udG91clNoYWRlcix3PVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiBrKHQsZSxyLG4saSxhLG8scyxsLGMsdSxoLGYscCxkLGcsdixtLHkseCxiLF8sayxBLFQsTSxTKXt0aGlzLmdsPXQsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5jZWxscz1bXSx0aGlzLnBvc2l0aW9ucz1bXSx0aGlzLmludGVuc2l0eT1bXSx0aGlzLnRleHR1cmU9ZSx0aGlzLmRpcnR5PSEwLHRoaXMudHJpU2hhZGVyPXIsdGhpcy5saW5lU2hhZGVyPW4sdGhpcy5wb2ludFNoYWRlcj1pLHRoaXMucGlja1NoYWRlcj1hLHRoaXMucG9pbnRQaWNrU2hhZGVyPW8sdGhpcy5jb250b3VyU2hhZGVyPXMsdGhpcy50cmlhbmdsZVBvc2l0aW9ucz1sLHRoaXMudHJpYW5nbGVDb2xvcnM9dSx0aGlzLnRyaWFuZ2xlTm9ybWFscz1mLHRoaXMudHJpYW5nbGVVVnM9aCx0aGlzLnRyaWFuZ2xlSWRzPWMsdGhpcy50cmlhbmdsZVZBTz1wLHRoaXMudHJpYW5nbGVDb3VudD0wLHRoaXMubGluZVdpZHRoPTEsdGhpcy5lZGdlUG9zaXRpb25zPWQsdGhpcy5lZGdlQ29sb3JzPXYsdGhpcy5lZGdlVVZzPW0sdGhpcy5lZGdlSWRzPWcsdGhpcy5lZGdlVkFPPXksdGhpcy5lZGdlQ291bnQ9MCx0aGlzLnBvaW50UG9zaXRpb25zPXgsdGhpcy5wb2ludENvbG9ycz1fLHRoaXMucG9pbnRVVnM9ayx0aGlzLnBvaW50U2l6ZXM9QSx0aGlzLnBvaW50SWRzPWIsdGhpcy5wb2ludFZBTz1ULHRoaXMucG9pbnRDb3VudD0wLHRoaXMuY29udG91ckxpbmVXaWR0aD0xLHRoaXMuY29udG91clBvc2l0aW9ucz1NLHRoaXMuY29udG91clZBTz1TLHRoaXMuY29udG91ckNvdW50PTAsdGhpcy5jb250b3VyQ29sb3I9WzAsMCwwXSx0aGlzLmNvbnRvdXJFbmFibGU9ITAsdGhpcy5waWNrSWQ9MSx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5saWdodFBvc2l0aW9uPVsxZTUsMWU1LDBdLHRoaXMuYW1iaWVudExpZ2h0PS44LHRoaXMuZGlmZnVzZUxpZ2h0PS44LHRoaXMuc3BlY3VsYXJMaWdodD0yLHRoaXMucm91Z2huZXNzPS41LHRoaXMuZnJlc25lbD0xLjUsdGhpcy5vcGFjaXR5PTEsdGhpcy5oYXNBbHBoYT0hMSx0aGlzLm9wYWNpdHlzY2FsZT0hMSx0aGlzLl9tb2RlbD13LHRoaXMuX3ZpZXc9dyx0aGlzLl9wcm9qZWN0aW9uPXcsdGhpcy5fcmVzb2x1dGlvbj1bMSwxXX12YXIgQT1rLnByb3RvdHlwZTtmdW5jdGlvbiBUKHQsZSl7aWYoIWUpcmV0dXJuIDE7aWYoIWUubGVuZ3RoKXJldHVybiAxO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKXtpZihlLmxlbmd0aDwyKXJldHVybiAxO2lmKGVbcl1bMF09PT10KXJldHVybiBlW3JdWzFdO2lmKGVbcl1bMF0+dCYmcj4wKXt2YXIgbj0oZVtyXVswXS10KS8oZVtyXVswXS1lW3ItMV1bMF0pO3JldHVybiBlW3JdWzFdKigxLW4pK24qZVtyLTFdWzFdfX1yZXR1cm4gMX1mdW5jdGlvbiBNKHQpe3ZhciBlPW4odCx5LnZlcnRleCx5LmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTIsZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTMsZS5hdHRyaWJ1dGVzLnBvaW50U2l6ZS5sb2NhdGlvbj00LGV9ZnVuY3Rpb24gUyh0KXt2YXIgZT1uKHQseC52ZXJ0ZXgseC5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5pZC5sb2NhdGlvbj0xLGV9ZnVuY3Rpb24gRSh0KXt2YXIgZT1uKHQsYi52ZXJ0ZXgsYi5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5pZC5sb2NhdGlvbj0xLGUuYXR0cmlidXRlcy5wb2ludFNpemUubG9jYXRpb249NCxlfWZ1bmN0aW9uIEModCl7dmFyIGU9bih0LF8udmVydGV4LF8uZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlfUEuaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5oYXNBbHBoYX0sQS5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzQWxwaGF9LEEucGlja1Nsb3RzPTEsQS5zZXRQaWNrQmFzZT1mdW5jdGlvbih0KXt0aGlzLnBpY2tJZD10fSxBLmhpZ2hsaWdodD1mdW5jdGlvbih0KXtpZih0JiZ0aGlzLmNvbnRvdXJFbmFibGUpe2Zvcih2YXIgZT1mKHRoaXMuY2VsbHMsdGhpcy5pbnRlbnNpdHksdC5pbnRlbnNpdHkpLHI9ZS5jZWxscyxuPWUudmVydGV4SWRzLGk9ZS52ZXJ0ZXhXZWlnaHRzLGE9ci5sZW5ndGgsbz1wLm1hbGxvY0Zsb2F0MzIoNiphKSxzPTAsbD0wO2w8YTsrK2wpZm9yKHZhciBjPXJbbF0sdT0wO3U8MjsrK3Upe3ZhciBoPWNbMF07Mj09PWMubGVuZ3RoJiYoaD1jW3VdKTtmb3IodmFyIGQ9bltoXVswXSxnPW5baF1bMV0sdj1pW2hdLG09MS12LHk9dGhpcy5wb3NpdGlvbnNbZF0seD10aGlzLnBvc2l0aW9uc1tnXSxiPTA7YjwzOysrYilvW3MrK109dip5W2JdK20qeFtiXX10aGlzLmNvbnRvdXJDb3VudD1zLzN8MCx0aGlzLmNvbnRvdXJQb3NpdGlvbnMudXBkYXRlKG8uc3ViYXJyYXkoMCxzKSkscC5mcmVlKG8pfWVsc2UgdGhpcy5jb250b3VyQ291bnQ9MH0sQS51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZT10aGlzLmdsO3RoaXMuZGlydHk9ITAsXCJjb250b3VyRW5hYmxlXCJpbiB0JiYodGhpcy5jb250b3VyRW5hYmxlPXQuY29udG91ckVuYWJsZSksXCJjb250b3VyQ29sb3JcImluIHQmJih0aGlzLmNvbnRvdXJDb2xvcj10LmNvbnRvdXJDb2xvciksXCJsaW5lV2lkdGhcImluIHQmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCksXCJsaWdodFBvc2l0aW9uXCJpbiB0JiYodGhpcy5saWdodFBvc2l0aW9uPXQubGlnaHRQb3NpdGlvbiksdGhpcy5oYXNBbHBoYT0hMSxcIm9wYWNpdHlcImluIHQmJih0aGlzLm9wYWNpdHk9dC5vcGFjaXR5LHRoaXMub3BhY2l0eTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpLFwib3BhY2l0eXNjYWxlXCJpbiB0JiYodGhpcy5vcGFjaXR5c2NhbGU9dC5vcGFjaXR5c2NhbGUsdGhpcy5oYXNBbHBoYT0hMCksXCJhbWJpZW50XCJpbiB0JiYodGhpcy5hbWJpZW50TGlnaHQ9dC5hbWJpZW50KSxcImRpZmZ1c2VcImluIHQmJih0aGlzLmRpZmZ1c2VMaWdodD10LmRpZmZ1c2UpLFwic3BlY3VsYXJcImluIHQmJih0aGlzLnNwZWN1bGFyTGlnaHQ9dC5zcGVjdWxhciksXCJyb3VnaG5lc3NcImluIHQmJih0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyksXCJmcmVzbmVsXCJpbiB0JiYodGhpcy5mcmVzbmVsPXQuZnJlc25lbCksdC50ZXh0dXJlPyh0aGlzLnRleHR1cmUuZGlzcG9zZSgpLHRoaXMudGV4dHVyZT1vKGUsdC50ZXh0dXJlKSk6dC5jb2xvcm1hcCYmKHRoaXMudGV4dHVyZS5zaGFwZT1bMjU2LDI1Nl0sdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLkxJTkVBUl9NSVBNQVBfTElORUFSLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ZS5MSU5FQVIsdGhpcy50ZXh0dXJlLnNldFBpeGVscyhmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1oKHtjb2xvcm1hcDp0LG5zaGFkZXM6MjU2LGZvcm1hdDpcInJnYmFcIn0pLG49bmV3IFVpbnQ4QXJyYXkoMTAyNCksaT0wO2k8MjU2OysraSl7Zm9yKHZhciBhPXJbaV0sbz0wO288MzsrK28pbls0Kmkrb109YVtvXTtuWzQqaSszXT1lPzI1NSpUKGkvMjU1LGUpOjI1NSphWzNdfXJldHVybiB1KG4sWzI1NiwyNTYsNF0sWzQsMCwxXSl9KHQuY29sb3JtYXAsdGhpcy5vcGFjaXR5c2NhbGUpKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXAoKSk7dmFyIHI9dC5jZWxscyxuPXQucG9zaXRpb25zO2lmKG4mJnIpe3ZhciBpPVtdLGE9W10sbD1bXSxjPVtdLGY9W10scD1bXSxkPVtdLGc9W10sdj1bXSxtPVtdLHk9W10seD1bXSxiPVtdLF89W107dGhpcy5jZWxscz1yLHRoaXMucG9zaXRpb25zPW47dmFyIHc9dC52ZXJ0ZXhOb3JtYWxzLGs9dC5jZWxsTm9ybWFscyxBPXZvaWQgMD09PXQudmVydGV4Tm9ybWFsc0Vwc2lsb24/MWUtNjp0LnZlcnRleE5vcm1hbHNFcHNpbG9uLE09dm9pZCAwPT09dC5mYWNlTm9ybWFsc0Vwc2lsb24/MWUtNjp0LmZhY2VOb3JtYWxzRXBzaWxvbjt0LnVzZUZhY2V0Tm9ybWFscyYmIWsmJihrPXMuZmFjZU5vcm1hbHMocixuLE0pKSxrfHx3fHwodz1zLnZlcnRleE5vcm1hbHMocixuLEEpKTt2YXIgUz10LnZlcnRleENvbG9ycyxFPXQuY2VsbENvbG9ycyxDPXQubWVzaENvbG9yfHxbMSwxLDEsMV0sTD10LnZlcnRleFVWcyx6PXQudmVydGV4SW50ZW5zaXR5LE89dC5jZWxsVVZzLEk9dC5jZWxsSW50ZW5zaXR5LEQ9MS8wLFA9LTEvMDtpZighTCYmIU8paWYoeilpZih0LnZlcnRleEludGVuc2l0eUJvdW5kcylEPSt0LnZlcnRleEludGVuc2l0eUJvdW5kc1swXSxQPSt0LnZlcnRleEludGVuc2l0eUJvdW5kc1sxXTtlbHNlIGZvcih2YXIgUj0wO1I8ei5sZW5ndGg7KytSKXt2YXIgRj16W1JdO0Q9TWF0aC5taW4oRCxGKSxQPU1hdGgubWF4KFAsRil9ZWxzZSBpZihJKWZvcihSPTA7UjxJLmxlbmd0aDsrK1Ipe0Y9SVtSXTtEPU1hdGgubWluKEQsRiksUD1NYXRoLm1heChQLEYpfWVsc2UgZm9yKFI9MDtSPG4ubGVuZ3RoOysrUil7Rj1uW1JdWzJdO0Q9TWF0aC5taW4oRCxGKSxQPU1hdGgubWF4KFAsRil9dGhpcy5pbnRlbnNpdHk9enx8KEk/ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpbltpXT0wO3ZhciBhPXQubGVuZ3RoO2ZvcihpPTA7aTxhOysraSlmb3IodmFyIG89dFtpXSxzPTA7czxvLmxlbmd0aDsrK3MpbltvW3NdXT1yW2ldO3JldHVybiBufShyLG4ubGVuZ3RoLEkpOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPXRbbl1bMl07cmV0dXJuIHJ9KG4pKTt2YXIgQj10LnBvaW50U2l6ZXMsTj10LnBvaW50U2l6ZXx8MTt0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXTtmb3IoUj0wO1I8bi5sZW5ndGg7KytSKWZvcih2YXIgaj1uW1JdLFY9MDtWPDM7KytWKSFpc05hTihqW1ZdKSYmaXNGaW5pdGUoaltWXSkmJih0aGlzLmJvdW5kc1swXVtWXT1NYXRoLm1pbih0aGlzLmJvdW5kc1swXVtWXSxqW1ZdKSx0aGlzLmJvdW5kc1sxXVtWXT1NYXRoLm1heCh0aGlzLmJvdW5kc1sxXVtWXSxqW1ZdKSk7dmFyIFU9MCxxPTAsSD0wO3Q6Zm9yKFI9MDtSPHIubGVuZ3RoOysrUil7dmFyIEc9cltSXTtzd2l0Y2goRy5sZW5ndGgpe2Nhc2UgMTpmb3Ioaj1uW1c9R1swXV0sVj0wO1Y8MzsrK1YpaWYoaXNOYU4oaltWXSl8fCFpc0Zpbml0ZShqW1ZdKSljb250aW51ZSB0O20ucHVzaChqWzBdLGpbMV0salsyXSksWD1TP1NbV106RT9FW1JdOkMsdGhpcy5vcGFjaXR5c2NhbGUmJno/YS5wdXNoKFhbMF0sWFsxXSxYWzJdLHRoaXMub3BhY2l0eSpUKCh6W1ddLUQpLyhQLUQpLHRoaXMub3BhY2l0eXNjYWxlKSk6Mz09PVgubGVuZ3RoP3kucHVzaChYWzBdLFhbMV0sWFsyXSx0aGlzLm9wYWNpdHkpOih5LnB1c2goWFswXSxYWzFdLFhbMl0sWFszXSp0aGlzLm9wYWNpdHkpLCF0aGlzLmhhc0FscGhhJiZYWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKSksWj1MP0xbV106ej9bKHpbV10tRCkvKFAtRCksMF06Tz9PW1JdOkk/WyhJW1JdLUQpLyhQLUQpLDBdOlsoalsyXS1EKS8oUC1EKSwwXSx4LnB1c2goWlswXSxaWzFdKSxCP2IucHVzaChCW1ddKTpiLnB1c2goTiksXy5wdXNoKFIpLEgrPTE7YnJlYWs7Y2FzZSAyOmZvcihWPTA7VjwyOysrVil7aj1uW1c9R1tWXV07Zm9yKHZhciBZPTA7WTwzOysrWSlpZihpc05hTihqW1ldKXx8IWlzRmluaXRlKGpbWV0pKWNvbnRpbnVlIHR9Zm9yKFY9MDtWPDI7KytWKXtqPW5bVz1HW1ZdXTtwLnB1c2goalswXSxqWzFdLGpbMl0pLFg9Uz9TW1ddOkU/RVtSXTpDLHRoaXMub3BhY2l0eXNjYWxlJiZ6P2EucHVzaChYWzBdLFhbMV0sWFsyXSx0aGlzLm9wYWNpdHkqVCgoeltXXS1EKS8oUC1EKSx0aGlzLm9wYWNpdHlzY2FsZSkpOjM9PT1YLmxlbmd0aD9kLnB1c2goWFswXSxYWzFdLFhbMl0sdGhpcy5vcGFjaXR5KTooZC5wdXNoKFhbMF0sWFsxXSxYWzJdLFhbM10qdGhpcy5vcGFjaXR5KSwhdGhpcy5oYXNBbHBoYSYmWFszXTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpLFo9TD9MW1ddOno/Wyh6W1ddLUQpLyhQLUQpLDBdOk8/T1tSXTpJP1soSVtSXS1EKS8oUC1EKSwwXTpbKGpbMl0tRCkvKFAtRCksMF0sZy5wdXNoKFpbMF0sWlsxXSksdi5wdXNoKFIpfXErPTE7YnJlYWs7Y2FzZSAzOmZvcihWPTA7VjwzOysrVilmb3Ioaj1uW1c9R1tWXV0sWT0wO1k8MzsrK1kpaWYoaXNOYU4oaltZXSl8fCFpc0Zpbml0ZShqW1ldKSljb250aW51ZSB0O2ZvcihWPTA7VjwzOysrVil7dmFyIFcsWCxaLCQ7aj1uW1c9R1syLVZdXTtpLnB1c2goalswXSxqWzFdLGpbMl0pLFg9Uz9TW1ddOkU/RVtSXTpDLHRoaXMub3BhY2l0eXNjYWxlJiZ6P2EucHVzaChYWzBdLFhbMV0sWFsyXSx0aGlzLm9wYWNpdHkqVCgoeltXXS1EKS8oUC1EKSx0aGlzLm9wYWNpdHlzY2FsZSkpOjM9PT1YLmxlbmd0aD9hLnB1c2goWFswXSxYWzFdLFhbMl0sdGhpcy5vcGFjaXR5KTooYS5wdXNoKFhbMF0sWFsxXSxYWzJdLFhbM10qdGhpcy5vcGFjaXR5KSwhdGhpcy5oYXNBbHBoYSYmWFszXTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpLFo9TD9MW1ddOno/Wyh6W1ddLUQpLyhQLUQpLDBdOk8/T1tSXTpJP1soSVtSXS1EKS8oUC1EKSwwXTpbKGpbMl0tRCkvKFAtRCksMF0sYy5wdXNoKFpbMF0sWlsxXSksJD13P3dbV106a1tSXSxsLnB1c2goJFswXSwkWzFdLCRbMl0pLGYucHVzaChSKX1VKz0xfX10aGlzLnBvaW50Q291bnQ9SCx0aGlzLmVkZ2VDb3VudD1xLHRoaXMudHJpYW5nbGVDb3VudD1VLHRoaXMucG9pbnRQb3NpdGlvbnMudXBkYXRlKG0pLHRoaXMucG9pbnRDb2xvcnMudXBkYXRlKHkpLHRoaXMucG9pbnRVVnMudXBkYXRlKHgpLHRoaXMucG9pbnRTaXplcy51cGRhdGUoYiksdGhpcy5wb2ludElkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KF8pKSx0aGlzLmVkZ2VQb3NpdGlvbnMudXBkYXRlKHApLHRoaXMuZWRnZUNvbG9ycy51cGRhdGUoZCksdGhpcy5lZGdlVVZzLnVwZGF0ZShnKSx0aGlzLmVkZ2VJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheSh2KSksdGhpcy50cmlhbmdsZVBvc2l0aW9ucy51cGRhdGUoaSksdGhpcy50cmlhbmdsZUNvbG9ycy51cGRhdGUoYSksdGhpcy50cmlhbmdsZVVWcy51cGRhdGUoYyksdGhpcy50cmlhbmdsZU5vcm1hbHMudXBkYXRlKGwpLHRoaXMudHJpYW5nbGVJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheShmKSl9fSxBLmRyYXdUcmFuc3BhcmVudD1BLmRyYXc9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fHcsbj10LnZpZXd8fHcsaT10LnByb2plY3Rpb258fHcsYT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylhWzBdW29dPU1hdGgubWF4KGFbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxhWzFdW29dPU1hdGgubWluKGFbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt2YXIgcz17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGludmVyc2VNb2RlbDp3LnNsaWNlKCksY2xpcEJvdW5kczphLGthbWJpZW50OnRoaXMuYW1iaWVudExpZ2h0LGtkaWZmdXNlOnRoaXMuZGlmZnVzZUxpZ2h0LGtzcGVjdWxhcjp0aGlzLnNwZWN1bGFyTGlnaHQscm91Z2huZXNzOnRoaXMucm91Z2huZXNzLGZyZXNuZWw6dGhpcy5mcmVzbmVsLGV5ZVBvc2l0aW9uOlswLDAsMF0sbGlnaHRQb3NpdGlvbjpbMCwwLDBdLGNvbnRvdXJDb2xvcjp0aGlzLmNvbnRvdXJDb2xvcix0ZXh0dXJlOjB9O3MuaW52ZXJzZU1vZGVsPWMocy5pbnZlcnNlTW9kZWwscy5tb2RlbCksZS5kaXNhYmxlKGUuQ1VMTF9GQUNFKSx0aGlzLnRleHR1cmUuYmluZCgwKTt2YXIgdT1uZXcgQXJyYXkoMTYpO2wodSxzLnZpZXcscy5tb2RlbCksbCh1LHMucHJvamVjdGlvbix1KSxjKHUsdSk7Zm9yKG89MDtvPDM7KytvKXMuZXllUG9zaXRpb25bb109dVsxMitvXS91WzE1XTt2YXIgaCxmPXVbMTVdO2ZvcihvPTA7bzwzOysrbylmKz10aGlzLmxpZ2h0UG9zaXRpb25bb10qdVs0Km8rM107Zm9yKG89MDtvPDM7KytvKXtmb3IodmFyIHA9dVsxMitvXSxkPTA7ZDwzOysrZClwKz11WzQqZCtvXSp0aGlzLmxpZ2h0UG9zaXRpb25bZF07cy5saWdodFBvc2l0aW9uW29dPXAvZn10aGlzLnRyaWFuZ2xlQ291bnQ+MCYmKChoPXRoaXMudHJpU2hhZGVyKS5iaW5kKCksaC51bmlmb3Jtcz1zLHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpKTt0aGlzLmVkZ2VDb3VudD4wJiZ0aGlzLmxpbmVXaWR0aD4wJiYoKGg9dGhpcy5saW5lU2hhZGVyKS5iaW5kKCksaC51bmlmb3Jtcz1zLHRoaXMuZWRnZVZBTy5iaW5kKCksZS5saW5lV2lkdGgodGhpcy5saW5lV2lkdGgqdGhpcy5waXhlbFJhdGlvKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLDIqdGhpcy5lZGdlQ291bnQpLHRoaXMuZWRnZVZBTy51bmJpbmQoKSk7dGhpcy5wb2ludENvdW50PjAmJigoaD10aGlzLnBvaW50U2hhZGVyKS5iaW5kKCksaC51bmlmb3Jtcz1zLHRoaXMucG9pbnRWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlBPSU5UUywwLHRoaXMucG9pbnRDb3VudCksdGhpcy5wb2ludFZBTy51bmJpbmQoKSk7dGhpcy5jb250b3VyRW5hYmxlJiZ0aGlzLmNvbnRvdXJDb3VudD4wJiZ0aGlzLmNvbnRvdXJMaW5lV2lkdGg+MCYmKChoPXRoaXMuY29udG91clNoYWRlcikuYmluZCgpLGgudW5pZm9ybXM9cyx0aGlzLmNvbnRvdXJWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLkxJTkVTLDAsdGhpcy5jb250b3VyQ291bnQpLHRoaXMuY29udG91clZBTy51bmJpbmQoKSl9LEEuZHJhd1BpY2s9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fHcsbj10LnZpZXd8fHcsaT10LnByb2plY3Rpb258fHcsYT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylhWzBdW29dPU1hdGgubWF4KGFbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxhWzFdW29dPU1hdGgubWluKGFbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt0aGlzLl9tb2RlbD1bXS5zbGljZS5jYWxsKHIpLHRoaXMuX3ZpZXc9W10uc2xpY2UuY2FsbChuKSx0aGlzLl9wcm9qZWN0aW9uPVtdLnNsaWNlLmNhbGwoaSksdGhpcy5fcmVzb2x1dGlvbj1bZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XTt2YXIgcyxsPXttb2RlbDpyLHZpZXc6bixwcm9qZWN0aW9uOmksY2xpcEJvdW5kczphLHBpY2tJZDp0aGlzLnBpY2tJZC8yNTV9Oygocz10aGlzLnBpY2tTaGFkZXIpLmJpbmQoKSxzLnVuaWZvcm1zPWwsdGhpcy50cmlhbmdsZUNvdW50PjAmJih0aGlzLnRyaWFuZ2xlVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRVMsMCwzKnRoaXMudHJpYW5nbGVDb3VudCksdGhpcy50cmlhbmdsZVZBTy51bmJpbmQoKSksdGhpcy5lZGdlQ291bnQ+MCYmKHRoaXMuZWRnZVZBTy5iaW5kKCksZS5saW5lV2lkdGgodGhpcy5saW5lV2lkdGgqdGhpcy5waXhlbFJhdGlvKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLDIqdGhpcy5lZGdlQ291bnQpLHRoaXMuZWRnZVZBTy51bmJpbmQoKSksdGhpcy5wb2ludENvdW50PjApJiYoKHM9dGhpcy5wb2ludFBpY2tTaGFkZXIpLmJpbmQoKSxzLnVuaWZvcm1zPWwsdGhpcy5wb2ludFZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuUE9JTlRTLDAsdGhpcy5wb2ludENvdW50KSx0aGlzLnBvaW50VkFPLnVuYmluZCgpKX0sQS5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDtmb3IodmFyIGU9dC52YWx1ZVswXSsyNTYqdC52YWx1ZVsxXSs2NTUzNip0LnZhbHVlWzJdLHI9dGhpcy5jZWxsc1tlXSxuPXRoaXMucG9zaXRpb25zLGk9bmV3IEFycmF5KHIubGVuZ3RoKSxhPTA7YTxyLmxlbmd0aDsrK2EpaVthXT1uW3JbYV1dO3ZhciBvPWcoaSxbdC5jb29yZFswXSx0aGlzLl9yZXNvbHV0aW9uWzFdLXQuY29vcmRbMV1dLHRoaXMuX21vZGVsLHRoaXMuX3ZpZXcsdGhpcy5fcHJvamVjdGlvbix0aGlzLl9yZXNvbHV0aW9uKTtpZighbylyZXR1cm4gbnVsbDt2YXIgcz1vWzJdLGw9MDtmb3IoYT0wO2E8ci5sZW5ndGg7KythKWwrPXNbYV0qdGhpcy5pbnRlbnNpdHlbclthXV07cmV0dXJue3Bvc2l0aW9uOm9bMV0saW5kZXg6cltvWzBdXSxjZWxsOnIsY2VsbElkOmUsaW50ZW5zaXR5OmwsZGF0YUNvb3JkaW5hdGU6dGhpcy5wb3NpdGlvbnNbcltvWzBdXV19fSxBLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnRleHR1cmUuZGlzcG9zZSgpLHRoaXMudHJpU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLmxpbmVTaGFkZXIuZGlzcG9zZSgpLHRoaXMucG9pbnRTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5wb2ludFBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVWQU8uZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVDb2xvcnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVVVnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVOb3JtYWxzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlSWRzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VWQU8uZGlzcG9zZSgpLHRoaXMuZWRnZVBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5lZGdlQ29sb3JzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VVVnMuZGlzcG9zZSgpLHRoaXMuZWRnZUlkcy5kaXNwb3NlKCksdGhpcy5wb2ludFZBTy5kaXNwb3NlKCksdGhpcy5wb2ludFBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5wb2ludENvbG9ycy5kaXNwb3NlKCksdGhpcy5wb2ludFVWcy5kaXNwb3NlKCksdGhpcy5wb2ludFNpemVzLmRpc3Bvc2UoKSx0aGlzLnBvaW50SWRzLmRpc3Bvc2UoKSx0aGlzLmNvbnRvdXJWQU8uZGlzcG9zZSgpLHRoaXMuY29udG91clBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5jb250b3VyU2hhZGVyLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgmJih0PShlPXQpLmdsKSwhKHQuZ2V0RXh0ZW5zaW9uKFwiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzXCIpfHx0LmdldEV4dGVuc2lvbihcIk1PWl9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXNcIil8fHQuZ2V0RXh0ZW5zaW9uKFwiV0VCS0lUX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlc1wiKSkpdGhyb3cgbmV3IEVycm9yKFwiZGVyaXZhdGl2ZXMgbm90IHN1cHBvcnRlZFwiKTt2YXIgcj1mdW5jdGlvbih0KXt2YXIgZT1uKHQsdi52ZXJ0ZXgsdi5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0yLGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0zLGUuYXR0cmlidXRlcy5ub3JtYWwubG9jYXRpb249NCxlfSh0KSxzPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxtLnZlcnRleCxtLmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTIsZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTMsZX0odCksbD1NKHQpLGM9Uyh0KSxoPUUodCksZj1DKHQpLHA9byh0LHUobmV3IFVpbnQ4QXJyYXkoWzI1NSwyNTUsMjU1LDI1NV0pLFsxLDEsNF0pKTtwLmdlbmVyYXRlTWlwbWFwKCkscC5taW5GaWx0ZXI9dC5MSU5FQVJfTUlQTUFQX0xJTkVBUixwLm1hZ0ZpbHRlcj10LkxJTkVBUjt2YXIgZD1pKHQpLGc9aSh0KSx5PWkodCkseD1pKHQpLGI9aSh0KSxfPWEodCxbe2J1ZmZlcjpkLHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6Yix0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjpnLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6eSx0eXBlOnQuRkxPQVQsc2l6ZToyfSx7YnVmZmVyOngsdHlwZTp0LkZMT0FULHNpemU6M31dKSx3PWkodCksQT1pKHQpLFQ9aSh0KSxMPWkodCksej1hKHQsW3tidWZmZXI6dyx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOkwsdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6QSx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOlQsdHlwZTp0LkZMT0FULHNpemU6Mn1dKSxPPWkodCksST1pKHQpLEQ9aSh0KSxQPWkodCksUj1pKHQpLEY9YSh0LFt7YnVmZmVyOk8sdHlwZTp0LkZMT0FULHNpemU6M30se2J1ZmZlcjpSLHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOkksdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjpELHR5cGU6dC5GTE9BVCxzaXplOjJ9LHtidWZmZXI6UCx0eXBlOnQuRkxPQVQsc2l6ZToxfV0pLEI9aSh0KSxOPW5ldyBrKHQscCxyLHMsbCxjLGgsZixkLGIsZyx5LHgsXyx3LEwsQSxULHosTyxSLEksRCxQLEYsQixhKHQsW3tidWZmZXI6Qix0eXBlOnQuRkxPQVQsc2l6ZTozfV0pKTtyZXR1cm4gTi51cGRhdGUoZSksTn19LHtcIi4vbGliL2Nsb3Nlc3QtcG9pbnRcIjoyNzUsXCIuL2xpYi9zaGFkZXJzXCI6Mjc2LGNvbG9ybWFwOjExNyxcImdsLWJ1ZmZlclwiOjIzOCxcImdsLW1hdDQvaW52ZXJ0XCI6MjYyLFwiZ2wtbWF0NC9tdWx0aXBseVwiOjI2NCxcImdsLXNoYWRlclwiOjI5OCxcImdsLXRleHR1cmUyZFwiOjMxNSxcImdsLXZhb1wiOjMyMCxuZGFycmF5OjQ0Myxub3JtYWxzOjQ0NixcInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyXCI6NTAzLFwidHlwZWRhcnJheS1wb29sXCI6NTMwfV0sMjc4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUsWzAsMCwwLDEsMSwwLDEsMV0pLHM9aShlLGEuYm94VmVydCxhLmxpbmVGcmFnKTtyZXR1cm4gbmV3IG8odCxyLHMpfTt2YXIgbj10KFwiZ2wtYnVmZmVyXCIpLGk9dChcImdsLXNoYWRlclwiKSxhPXQoXCIuL3NoYWRlcnNcIik7ZnVuY3Rpb24gbyh0LGUscil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yfXZhciBzLGwsYz1vLnByb3RvdHlwZTtjLmJpbmQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnNoYWRlcjt0aGlzLnZiby5iaW5kKCksdGhpcy5zaGFkZXIuYmluZCgpLHQuYXR0cmlidXRlcy5jb29yZC5wb2ludGVyKCksdC51bmlmb3Jtcy5zY3JlZW5Cb3g9dGhpcy5wbG90LnNjcmVlbkJveH0sYy5kcmF3Qm94PShzPVswLDBdLGw9WzAsMF0sZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10aGlzLnBsb3Qsbz10aGlzLnNoYWRlcixjPWEuZ2w7c1swXT10LHNbMV09ZSxsWzBdPXIsbFsxXT1uLG8udW5pZm9ybXMubG89cyxvLnVuaWZvcm1zLmhpPWwsby51bmlmb3Jtcy5jb2xvcj1pLGMuZHJhd0FycmF5cyhjLlRSSUFOR0xFX1NUUklQLDAsNCl9KSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZiby5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0se1wiLi9zaGFkZXJzXCI6MjgxLFwiZ2wtYnVmZmVyXCI6MjM4LFwiZ2wtc2hhZGVyXCI6Mjk4fV0sMjc5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUpLGE9aShlLG8uZ3JpZFZlcnQsby5ncmlkRnJhZyksbD1pKGUsby50aWNrVmVydCxvLmdyaWRGcmFnKTtyZXR1cm4gbmV3IHModCxyLGEsbCl9O3ZhciBuPXQoXCJnbC1idWZmZXJcIiksaT10KFwiZ2wtc2hhZGVyXCIpLGE9dChcImJpbmFyeS1zZWFyY2gtYm91bmRzXCIpLG89dChcIi4vc2hhZGVyc1wiKTtmdW5jdGlvbiBzKHQsZSxyLG4pe3RoaXMucGxvdD10LHRoaXMudmJvPWUsdGhpcy5zaGFkZXI9cix0aGlzLnRpY2tTaGFkZXI9bix0aGlzLnRpY2tzPVtbXSxbXV19ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0LWV9dmFyIGMsdSxoLGYscCxkPXMucHJvdG90eXBlO2QuZHJhdz0oYz1bMCwwXSx1PVswLDBdLGg9WzAsMF0sZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5wbG90LGU9dGhpcy52Ym8scj10aGlzLnNoYWRlcixuPXRoaXMudGlja3MsaT10LmdsLGE9dC5fdGlja0JvdW5kcyxvPXQuZGF0YUJveCxzPXQudmlld0JveCxsPXQuZ3JpZExpbmVXaWR0aCxmPXQuZ3JpZExpbmVDb2xvcixwPXQuZ3JpZExpbmVFbmFibGUsZD10LnBpeGVsUmF0aW8sZz0wO2c8MjsrK2cpe3ZhciB2PWFbZ10sbT1hW2crMl0tdix5PS41KihvW2crMl0rb1tnXSkseD1vW2crMl0tb1tnXTt1W2ddPTIqbS94LGNbZ109Mioodi15KS94fXIuYmluZCgpLGUuYmluZCgpLHIuYXR0cmlidXRlcy5kYXRhQ29vcmQucG9pbnRlcigpLHIudW5pZm9ybXMuZGF0YVNoaWZ0PWMsci51bmlmb3Jtcy5kYXRhU2NhbGU9dTt2YXIgYj0wO2ZvcihnPTA7ZzwyOysrZyl7aFswXT1oWzFdPTAsaFtnXT0xLHIudW5pZm9ybXMuZGF0YUF4aXM9aCxyLnVuaWZvcm1zLmxpbmVXaWR0aD1sW2ddLyhzW2crMl0tc1tnXSkqZCxyLnVuaWZvcm1zLmNvbG9yPWZbZ107dmFyIF89NipuW2ddLmxlbmd0aDtwW2ddJiZfJiZpLmRyYXdBcnJheXMoaS5UUklBTkdMRVMsYixfKSxiKz1ffX0pLGQuZHJhd1RpY2tNYXJrcz1mdW5jdGlvbigpe3ZhciB0PVswLDBdLGU9WzAsMF0scj1bMSwwXSxuPVswLDFdLGk9WzAsMF0sbz1bMCwwXTtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHM9dGhpcy5wbG90LGM9dGhpcy52Ym8sdT10aGlzLnRpY2tTaGFkZXIsaD10aGlzLnRpY2tzLGY9cy5nbCxwPXMuX3RpY2tCb3VuZHMsZD1zLmRhdGFCb3gsZz1zLnZpZXdCb3gsdj1zLnBpeGVsUmF0aW8sbT1zLnNjcmVlbkJveCx5PW1bMl0tbVswXSx4PW1bM10tbVsxXSxiPWdbMl0tZ1swXSxfPWdbM10tZ1sxXSx3PTA7dzwyOysrdyl7dmFyIGs9cFt3XSxBPXBbdysyXS1rLFQ9LjUqKGRbdysyXStkW3ddKSxNPWRbdysyXS1kW3ddO2Vbd109MipBL00sdFt3XT0yKihrLVQpL019ZVswXSo9Yi95LHRbMF0qPWIveSxlWzFdKj1fL3gsdFsxXSo9Xy94LHUuYmluZCgpLGMuYmluZCgpLHUuYXR0cmlidXRlcy5kYXRhQ29vcmQucG9pbnRlcigpO3ZhciBTPXUudW5pZm9ybXM7Uy5kYXRhU2hpZnQ9dCxTLmRhdGFTY2FsZT1lO3ZhciBFPXMudGlja01hcmtMZW5ndGgsQz1zLnRpY2tNYXJrV2lkdGgsTD1zLnRpY2tNYXJrQ29sb3Isej02KmhbMF0ubGVuZ3RoLE89TWF0aC5taW4oYS5nZShoWzBdLChkWzBdLXBbMF0pLyhwWzJdLXBbMF0pLGwpLGhbMF0ubGVuZ3RoKSxJPU1hdGgubWluKGEuZ3QoaFswXSwoZFsyXS1wWzBdKS8ocFsyXS1wWzBdKSxsKSxoWzBdLmxlbmd0aCksRD0wKzYqTyxQPTYqTWF0aC5tYXgoMCxJLU8pLFI9TWF0aC5taW4oYS5nZShoWzFdLChkWzFdLXBbMV0pLyhwWzNdLXBbMV0pLGwpLGhbMV0ubGVuZ3RoKSxGPU1hdGgubWluKGEuZ3QoaFsxXSwoZFszXS1wWzFdKS8ocFszXS1wWzFdKSxsKSxoWzFdLmxlbmd0aCksQj16KzYqUixOPTYqTWF0aC5tYXgoMCxGLVIpO2lbMF09MiooZ1swXS1FWzFdKS95LTEsaVsxXT0oZ1szXStnWzFdKS94LTEsb1swXT1FWzFdKnYveSxvWzFdPUNbMV0qdi94LE4mJihTLmNvbG9yPUxbMV0sUy50aWNrU2NhbGU9byxTLmRhdGFBeGlzPW4sUy5zY3JlZW5PZmZzZXQ9aSxmLmRyYXdBcnJheXMoZi5UUklBTkdMRVMsQixOKSksaVswXT0oZ1syXStnWzBdKS95LTEsaVsxXT0yKihnWzFdLUVbMF0pL3gtMSxvWzBdPUNbMF0qdi95LG9bMV09RVswXSp2L3gsUCYmKFMuY29sb3I9TFswXSxTLnRpY2tTY2FsZT1vLFMuZGF0YUF4aXM9cixTLnNjcmVlbk9mZnNldD1pLGYuZHJhd0FycmF5cyhmLlRSSUFOR0xFUyxELFApKSxpWzBdPTIqKGdbMl0rRVszXSkveS0xLGlbMV09KGdbM10rZ1sxXSkveC0xLG9bMF09RVszXSp2L3ksb1sxXT1DWzNdKnYveCxOJiYoUy5jb2xvcj1MWzNdLFMudGlja1NjYWxlPW8sUy5kYXRhQXhpcz1uLFMuc2NyZWVuT2Zmc2V0PWksZi5kcmF3QXJyYXlzKGYuVFJJQU5HTEVTLEIsTikpLGlbMF09KGdbMl0rZ1swXSkveS0xLGlbMV09MiooZ1szXStFWzJdKS94LTEsb1swXT1DWzJdKnYveSxvWzFdPUVbMl0qdi94LFAmJihTLmNvbG9yPUxbMl0sUy50aWNrU2NhbGU9byxTLmRhdGFBeGlzPXIsUy5zY3JlZW5PZmZzZXQ9aSxmLmRyYXdBcnJheXMoZi5UUklBTkdMRVMsRCxQKSl9fSgpLGQudXBkYXRlPShmPVsxLDEsLTEsLTEsMSwtMV0scD1bMSwtMSwxLDEsLTEsLTFdLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LnRpY2tzLHI9dC5ib3VuZHMsbj1uZXcgRmxvYXQzMkFycmF5KDE4KihlWzBdLmxlbmd0aCtlWzFdLmxlbmd0aCkpLGk9KHRoaXMucGxvdC56ZXJvTGluZUVuYWJsZSwwKSxhPVtbXSxbXV0sbz0wO288MjsrK28pZm9yKHZhciBzPWFbb10sbD1lW29dLGM9cltvXSx1PXJbbysyXSxoPTA7aDxsLmxlbmd0aDsrK2gpe3ZhciBkPShsW2hdLngtYykvKHUtYyk7cy5wdXNoKGQpO2Zvcih2YXIgZz0wO2c8NjsrK2cpbltpKytdPWQsbltpKytdPWZbZ10sbltpKytdPXBbZ119dGhpcy50aWNrcz1hLHRoaXMudmJvLnVwZGF0ZShuKX0pLGQuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmJvLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy50aWNrU2hhZGVyLmRpc3Bvc2UoKX19LHtcIi4vc2hhZGVyc1wiOjI4MSxcImJpbmFyeS1zZWFyY2gtYm91bmRzXCI6MjgzLFwiZ2wtYnVmZmVyXCI6MjM4LFwiZ2wtc2hhZGVyXCI6Mjk4fV0sMjgwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUsWy0xLC0xLC0xLDEsMSwtMSwxLDFdKSxzPWkoZSxhLmxpbmVWZXJ0LGEubGluZUZyYWcpO3JldHVybiBuZXcgbyh0LHIscyl9O3ZhciBuPXQoXCJnbC1idWZmZXJcIiksaT10KFwiZ2wtc2hhZGVyXCIpLGE9dChcIi4vc2hhZGVyc1wiKTtmdW5jdGlvbiBvKHQsZSxyKXt0aGlzLnBsb3Q9dCx0aGlzLnZibz1lLHRoaXMuc2hhZGVyPXJ9dmFyIHMsbCxjPW8ucHJvdG90eXBlO2MuYmluZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc2hhZGVyO3RoaXMudmJvLmJpbmQoKSx0aGlzLnNoYWRlci5iaW5kKCksdC5hdHRyaWJ1dGVzLmNvb3JkLnBvaW50ZXIoKSx0LnVuaWZvcm1zLnNjcmVlbkJveD10aGlzLnBsb3Quc2NyZWVuQm94fSxjLmRyYXdMaW5lPShzPVswLDBdLGw9WzAsMF0sZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPXRoaXMucGxvdCxjPXRoaXMuc2hhZGVyLHU9by5nbDtzWzBdPXQsc1sxXT1lLGxbMF09cixsWzFdPW4sYy51bmlmb3Jtcy5zdGFydD1zLGMudW5pZm9ybXMuZW5kPWwsYy51bmlmb3Jtcy53aWR0aD1pKm8ucGl4ZWxSYXRpbyxjLnVuaWZvcm1zLmNvbG9yPWEsdS5kcmF3QXJyYXlzKHUuVFJJQU5HTEVfU1RSSVAsMCw0KX0pLGMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmJvLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7XCIuL3NoYWRlcnNcIjoyODEsXCJnbC1idWZmZXJcIjoyMzgsXCJnbC1zaGFkZXJcIjoyOTh9XSwyODE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2xzbGlmeVwiKSxpPW4oW1wicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG51bmlmb3JtIHZlYzQgY29sb3I7XFxudm9pZCBtYWluKCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci54eXogKiBjb2xvci53LCBjb2xvci53KTtcXG59XFxuXCJdKTtlLmV4cG9ydHM9e2xpbmVWZXJ0Om4oW1wicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjMiBjb29yZDtcXG5cXG51bmlmb3JtIHZlYzQgc2NyZWVuQm94O1xcbnVuaWZvcm0gdmVjMiBzdGFydCwgZW5kO1xcbnVuaWZvcm0gZmxvYXQgd2lkdGg7XFxuXFxudmVjMiBwZXJwKHZlYzIgdikge1xcbiAgcmV0dXJuIHZlYzIodi55LCAtdi54KTtcXG59XFxuXFxudmVjMiBzY3JlZW4odmVjMiB2KSB7XFxuICByZXR1cm4gMi4wICogKHYgLSBzY3JlZW5Cb3gueHkpIC8gKHNjcmVlbkJveC56dyAtIHNjcmVlbkJveC54eSkgLSAxLjA7XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzIgZGVsdGEgPSBub3JtYWxpemUocGVycChzdGFydCAtIGVuZCkpO1xcbiAgdmVjMiBvZmZzZXQgPSBtaXgoc3RhcnQsIGVuZCwgMC41ICogKGNvb3JkLnkrMS4wKSk7XFxuICBnbF9Qb3NpdGlvbiA9IHZlYzQoc2NyZWVuKG9mZnNldCArIDAuNSAqIHdpZHRoICogZGVsdGEgKiBjb29yZC54KSwgMCwgMSk7XFxufVxcblwiXSksbGluZUZyYWc6aSx0ZXh0VmVydDpuKFtcIiNkZWZpbmUgR0xTTElGWSAxXFxuYXR0cmlidXRlIHZlYzMgdGV4dENvb3JkaW5hdGU7XFxuXFxudW5pZm9ybSB2ZWMyIGRhdGFTY2FsZSwgZGF0YVNoaWZ0LCBkYXRhQXhpcywgc2NyZWVuT2Zmc2V0LCB0ZXh0U2NhbGU7XFxudW5pZm9ybSBmbG9hdCBhbmdsZTtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBmbG9hdCBkYXRhT2Zmc2V0ICA9IHRleHRDb29yZGluYXRlLno7XFxuICB2ZWMyIGdseXBoT2Zmc2V0ICA9IHRleHRDb29yZGluYXRlLnh5O1xcbiAgbWF0MiBnbHlwaE1hdHJpeCA9IG1hdDIoY29zKGFuZ2xlKSwgc2luKGFuZ2xlKSwgLXNpbihhbmdsZSksIGNvcyhhbmdsZSkpO1xcbiAgdmVjMiBzY3JlZW5Db29yZGluYXRlID0gZGF0YUF4aXMgKiAoZGF0YVNjYWxlICogZGF0YU9mZnNldCArIGRhdGFTaGlmdCkgK1xcbiAgICBnbHlwaE1hdHJpeCAqIGdseXBoT2Zmc2V0ICogdGV4dFNjYWxlICsgc2NyZWVuT2Zmc2V0O1xcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHNjcmVlbkNvb3JkaW5hdGUsIDAsIDEpO1xcbn1cXG5cIl0pLHRleHRGcmFnOmksZ3JpZFZlcnQ6bihbXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMzIGRhdGFDb29yZDtcXG5cXG51bmlmb3JtIHZlYzIgZGF0YUF4aXMsIGRhdGFTaGlmdCwgZGF0YVNjYWxlO1xcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzIgcG9zID0gZGF0YUF4aXMgKiAoZGF0YVNjYWxlICogZGF0YUNvb3JkLnggKyBkYXRhU2hpZnQpO1xcbiAgcG9zICs9IDEwLjAgKiBkYXRhQ29vcmQueSAqIHZlYzIoZGF0YUF4aXMueSwgLWRhdGFBeGlzLngpICsgZGF0YUNvb3JkLnogKiBsaW5lV2lkdGg7XFxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zLCAwLCAxKTtcXG59XFxuXCJdKSxncmlkRnJhZzppLGJveFZlcnQ6bihbXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMyIGNvb3JkO1xcblxcbnVuaWZvcm0gdmVjNCBzY3JlZW5Cb3g7XFxudW5pZm9ybSB2ZWMyIGxvLCBoaTtcXG5cXG52ZWMyIHNjcmVlbih2ZWMyIHYpIHtcXG4gIHJldHVybiAyLjAgKiAodiAtIHNjcmVlbkJveC54eSkgLyAoc2NyZWVuQm94Lnp3IC0gc2NyZWVuQm94Lnh5KSAtIDEuMDtcXG59XFxuXFxudm9pZCBtYWluKCkge1xcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHNjcmVlbihtaXgobG8sIGhpLCBjb29yZCkpLCAwLCAxKTtcXG59XFxuXCJdKSx0aWNrVmVydDpuKFtcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzMgZGF0YUNvb3JkO1xcblxcbnVuaWZvcm0gdmVjMiBkYXRhQXhpcywgZGF0YVNoaWZ0LCBkYXRhU2NhbGUsIHNjcmVlbk9mZnNldCwgdGlja1NjYWxlO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzIgcG9zID0gZGF0YUF4aXMgKiAoZGF0YVNjYWxlICogZGF0YUNvb3JkLnggKyBkYXRhU2hpZnQpO1xcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcyArIHRpY2tTY2FsZSpkYXRhQ29vcmQueXogKyBzY3JlZW5PZmZzZXQsIDAsIDEpO1xcbn1cXG5cIl0pfX0se2dsc2xpZnk6NDAyfV0sMjgyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUpLGE9aShlLHMudGV4dFZlcnQscy50ZXh0RnJhZyk7cmV0dXJuIG5ldyBsKHQscixhKX07dmFyIG49dChcImdsLWJ1ZmZlclwiKSxpPXQoXCJnbC1zaGFkZXJcIiksYT10KFwidGV4dC1jYWNoZVwiKSxvPXQoXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiKSxzPXQoXCIuL3NoYWRlcnNcIik7ZnVuY3Rpb24gbCh0LGUscil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yLHRoaXMudGlja09mZnNldD1bW10sW11dLHRoaXMudGlja1g9W1tdLFtdXSx0aGlzLmxhYmVsT2Zmc2V0PVswLDBdLHRoaXMubGFiZWxDb3VudD1bMCwwXX12YXIgYyx1LGgsZixwLGQsZz1sLnByb3RvdHlwZTtnLmRyYXdUaWNrcz0oYz1bMCwwXSx1PVswLDBdLGg9WzAsMF0sZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wbG90LHI9dGhpcy5zaGFkZXIsbj10aGlzLnRpY2tYW3RdLGk9dGhpcy50aWNrT2Zmc2V0W3RdLGE9ZS5nbCxzPWUudmlld0JveCxsPWUuZGF0YUJveCxmPWUuc2NyZWVuQm94LHA9ZS5waXhlbFJhdGlvLGQ9ZS50aWNrRW5hYmxlLGc9ZS50aWNrUGFkLHY9ZS50aWNrQ29sb3IsbT1lLnRpY2tBbmdsZSx5PWUubGFiZWxFbmFibGUseD1lLmxhYmVsUGFkLGI9ZS5sYWJlbENvbG9yLF89ZS5sYWJlbEFuZ2xlLHc9dGhpcy5sYWJlbE9mZnNldFt0XSxrPXRoaXMubGFiZWxDb3VudFt0XSxBPW8ubHQobixsW3RdKSxUPW8ubGUobixsW3QrMl0pO2NbMF09Y1sxXT0wLGNbdF09MSx1W3RdPShzWzIrdF0rc1t0XSkvKGZbMit0XS1mW3RdKS0xO3ZhciBNPTIvZlsyKygxXnQpXS1mWzFedF07dVsxXnRdPU0qc1sxXnRdLTEsZFt0XSYmKHVbMV50XS09TSpwKmdbdF0sQTxUJiZpW1RdPmlbQV0mJihyLnVuaWZvcm1zLmRhdGFBeGlzPWMsci51bmlmb3Jtcy5zY3JlZW5PZmZzZXQ9dSxyLnVuaWZvcm1zLmNvbG9yPXZbdF0sci51bmlmb3Jtcy5hbmdsZT1tW3RdLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFUyxpW0FdLGlbVF0taVtBXSkpKSx5W3RdJiZrJiYodVsxXnRdLT1NKnAqeFt0XSxyLnVuaWZvcm1zLmRhdGFBeGlzPWgsci51bmlmb3Jtcy5zY3JlZW5PZmZzZXQ9dSxyLnVuaWZvcm1zLmNvbG9yPWJbdF0sci51bmlmb3Jtcy5hbmdsZT1fW3RdLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFUyx3LGspKSx1WzFedF09TSpzWzIrKDFedCldLTEsZFt0KzJdJiYodVsxXnRdKz1NKnAqZ1t0KzJdLEE8VCYmaVtUXT5pW0FdJiYoci51bmlmb3Jtcy5kYXRhQXhpcz1jLHIudW5pZm9ybXMuc2NyZWVuT2Zmc2V0PXUsci51bmlmb3Jtcy5jb2xvcj12W3QrMl0sci51bmlmb3Jtcy5hbmdsZT1tW3QrMl0sYS5kcmF3QXJyYXlzKGEuVFJJQU5HTEVTLGlbQV0saVtUXS1pW0FdKSkpLHlbdCsyXSYmayYmKHVbMV50XSs9TSpwKnhbdCsyXSxyLnVuaWZvcm1zLmRhdGFBeGlzPWgsci51bmlmb3Jtcy5zY3JlZW5PZmZzZXQ9dSxyLnVuaWZvcm1zLmNvbG9yPWJbdCsyXSxyLnVuaWZvcm1zLmFuZ2xlPV9bdCsyXSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRVMsdyxrKSl9KSxnLmRyYXdUaXRsZT1mdW5jdGlvbigpe3ZhciB0PVswLDBdLGU9WzAsMF07cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5wbG90LG49dGhpcy5zaGFkZXIsaT1yLmdsLGE9ci5zY3JlZW5Cb3gsbz1yLnRpdGxlQ2VudGVyLHM9ci50aXRsZUFuZ2xlLGw9ci50aXRsZUNvbG9yLGM9ci5waXhlbFJhdGlvO2lmKHRoaXMudGl0bGVDb3VudCl7Zm9yKHZhciB1PTA7dTwyOysrdSllW3VdPTIqKG9bdV0qYy1hW3VdKS8oYVsyK3VdLWFbdV0pLTE7bi5iaW5kKCksbi51bmlmb3Jtcy5kYXRhQXhpcz10LG4udW5pZm9ybXMuc2NyZWVuT2Zmc2V0PWUsbi51bmlmb3Jtcy5hbmdsZT1zLG4udW5pZm9ybXMuY29sb3I9bCxpLmRyYXdBcnJheXMoaS5UUklBTkdMRVMsdGhpcy50aXRsZU9mZnNldCx0aGlzLnRpdGxlQ291bnQpfX19KCksZy5iaW5kPShmPVswLDBdLHA9WzAsMF0sZD1bMCwwXSxmdW5jdGlvbigpe3ZhciB0PXRoaXMucGxvdCxlPXRoaXMuc2hhZGVyLHI9dC5fdGlja0JvdW5kcyxuPXQuZGF0YUJveCxpPXQuc2NyZWVuQm94LGE9dC52aWV3Qm94O2UuYmluZCgpO2Zvcih2YXIgbz0wO288MjsrK28pe3ZhciBzPXJbb10sbD1yW28rMl0tcyxjPS41KihuW28rMl0rbltvXSksdT1uW28rMl0tbltvXSxoPWFbb10sZz1hW28rMl0taCx2PWlbb10sbT1pW28rMl0tdjtwW29dPTIqbC91KmcvbSxmW29dPTIqKHMtYykvdSpnL219ZFsxXT0yKnQucGl4ZWxSYXRpby8oaVszXS1pWzFdKSxkWzBdPWRbMV0qKGlbM10taVsxXSkvKGlbMl0taVswXSksZS51bmlmb3Jtcy5kYXRhU2NhbGU9cCxlLnVuaWZvcm1zLmRhdGFTaGlmdD1mLGUudW5pZm9ybXMudGV4dFNjYWxlPWQsdGhpcy52Ym8uYmluZCgpLGUuYXR0cmlidXRlcy50ZXh0Q29vcmRpbmF0ZS5wb2ludGVyKCl9KSxnLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxvLHM9W10sbD10LnRpY2tzLGM9dC5ib3VuZHM7Zm9yKG89MDtvPDI7KytvKXt2YXIgdT1bTWF0aC5mbG9vcihzLmxlbmd0aC8zKV0saD1bLTEvMF0sZj1sW29dO2ZvcihlPTA7ZTxmLmxlbmd0aDsrK2Upe3ZhciBwPWZbZV0sZD1wLngsZz1wLnRleHQsdj1wLmZvbnR8fFwic2Fucy1zZXJpZlwiO2k9cC5mb250U2l6ZXx8MTI7Zm9yKHZhciBtPTEvKGNbbysyXS1jW29dKSx5PWNbb10seD1nLnNwbGl0KFwiXFxuXCIpLGI9MDtiPHgubGVuZ3RoO2IrKylmb3Iobj1hKHYseFtiXSkuZGF0YSxyPTA7cjxuLmxlbmd0aDtyKz0yKXMucHVzaChuW3JdKmksLW5bcisxXSppLWIqaSoxLjIsKGQteSkqbSk7dS5wdXNoKE1hdGguZmxvb3Iocy5sZW5ndGgvMykpLGgucHVzaChkKX10aGlzLnRpY2tPZmZzZXRbb109dSx0aGlzLnRpY2tYW29dPWh9Zm9yKG89MDtvPDI7KytvKXtmb3IodGhpcy5sYWJlbE9mZnNldFtvXT1NYXRoLmZsb29yKHMubGVuZ3RoLzMpLG49YSh0LmxhYmVsRm9udFtvXSx0LmxhYmVsc1tvXSx7dGV4dEFsaWduOlwiY2VudGVyXCJ9KS5kYXRhLGk9dC5sYWJlbFNpemVbb10sZT0wO2U8bi5sZW5ndGg7ZSs9MilzLnB1c2gobltlXSppLC1uW2UrMV0qaSwwKTt0aGlzLmxhYmVsQ291bnRbb109TWF0aC5mbG9vcihzLmxlbmd0aC8zKS10aGlzLmxhYmVsT2Zmc2V0W29dfWZvcih0aGlzLnRpdGxlT2Zmc2V0PU1hdGguZmxvb3Iocy5sZW5ndGgvMyksbj1hKHQudGl0bGVGb250LHQudGl0bGUpLmRhdGEsaT10LnRpdGxlU2l6ZSxlPTA7ZTxuLmxlbmd0aDtlKz0yKXMucHVzaChuW2VdKmksLW5bZSsxXSppLDApO3RoaXMudGl0bGVDb3VudD1NYXRoLmZsb29yKHMubGVuZ3RoLzMpLXRoaXMudGl0bGVPZmZzZXQsdGhpcy52Ym8udXBkYXRlKHMpfSxnLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZiby5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0se1wiLi9zaGFkZXJzXCI6MjgxLFwiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIjoyODMsXCJnbC1idWZmZXJcIjoyMzgsXCJnbC1zaGFkZXJcIjoyOTgsXCJ0ZXh0LWNhY2hlXCI6NTIxfV0sMjgzOltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzEwMl1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjEwMn1dLDI4NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlLFtlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdKSxjPW5ldyBsKGUscik7cmV0dXJuIGMuZ3JpZD1pKGMpLGMudGV4dD1hKGMpLGMubGluZT1vKGMpLGMuYm94PXMoYyksYy51cGRhdGUodCksY307dmFyIG49dChcImdsLXNlbGVjdC1zdGF0aWNcIiksaT10KFwiLi9saWIvZ3JpZFwiKSxhPXQoXCIuL2xpYi90ZXh0XCIpLG89dChcIi4vbGliL2xpbmVcIikscz10KFwiLi9saWIvYm94XCIpO2Z1bmN0aW9uIGwodCxlKXt0aGlzLmdsPXQsdGhpcy5waWNrQnVmZmVyPWUsdGhpcy5zY3JlZW5Cb3g9WzAsMCx0LmRyYXdpbmdCdWZmZXJXaWR0aCx0LmRyYXdpbmdCdWZmZXJIZWlnaHRdLHRoaXMudmlld0JveD1bMCwwLDAsMF0sdGhpcy5kYXRhQm94PVstMTAsLTEwLDEwLDEwXSx0aGlzLmdyaWRMaW5lRW5hYmxlPVshMCwhMF0sdGhpcy5ncmlkTGluZVdpZHRoPVsxLDFdLHRoaXMuZ3JpZExpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5waXhlbFJhdGlvPTEsdGhpcy50aWNrTWFya0xlbmd0aD1bMCwwLDAsMF0sdGhpcy50aWNrTWFya1dpZHRoPVswLDAsMCwwXSx0aGlzLnRpY2tNYXJrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aWNrUGFkPVsxNSwxNSwxNSwxNV0sdGhpcy50aWNrQW5nbGU9WzAsMCwwLDBdLHRoaXMudGlja0VuYWJsZT1bITAsITAsITAsITBdLHRoaXMudGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGFiZWxQYWQ9WzE1LDE1LDE1LDE1XSx0aGlzLmxhYmVsQW5nbGU9WzAsTWF0aC5QSS8yLDAsMypNYXRoLlBJLzJdLHRoaXMubGFiZWxFbmFibGU9WyEwLCEwLCEwLCEwXSx0aGlzLmxhYmVsQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aXRsZUNlbnRlcj1bMCwwXSx0aGlzLnRpdGxlRW5hYmxlPSEwLHRoaXMudGl0bGVBbmdsZT0wLHRoaXMudGl0bGVDb2xvcj1bMCwwLDAsMV0sdGhpcy5ib3JkZXJDb2xvcj1bMCwwLDAsMF0sdGhpcy5iYWNrZ3JvdW5kQ29sb3I9WzAsMCwwLDBdLHRoaXMuemVyb0xpbmVFbmFibGU9WyEwLCEwXSx0aGlzLnplcm9MaW5lV2lkdGg9WzQsNF0sdGhpcy56ZXJvTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmJvcmRlckxpbmVFbmFibGU9WyEwLCEwLCEwLCEwXSx0aGlzLmJvcmRlckxpbmVXaWR0aD1bMiwyLDIsMl0sdGhpcy5ib3JkZXJMaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ncmlkPW51bGwsdGhpcy50ZXh0PW51bGwsdGhpcy5saW5lPW51bGwsdGhpcy5ib3g9bnVsbCx0aGlzLm9iamVjdHM9W10sdGhpcy5vdmVybGF5cz1bXSx0aGlzLl90aWNrQm91bmRzPVsxLzAsMS8wLC0xLzAsLTEvMF0sdGhpcy5zdGF0aWM9ITEsdGhpcy5kaXJ0eT0hMSx0aGlzLnBpY2tEaXJ0eT0hMSx0aGlzLnBpY2tEZWxheT0xMjAsdGhpcy5waWNrUmFkaXVzPTEwLHRoaXMuX3BpY2tUaW1lb3V0PW51bGwsdGhpcy5fZHJhd1BpY2s9dGhpcy5kcmF3UGljay5iaW5kKHRoaXMpLHRoaXMuX2RlcHRoQ291bnRlcj0wfXZhciBjPWwucHJvdG90eXBlO2Z1bmN0aW9uIHUodCl7Zm9yKHZhciBlPXQuc2xpY2UoKSxyPTA7cjxlLmxlbmd0aDsrK3IpZVtyXT1lW3JdLnNsaWNlKCk7cmV0dXJuIGV9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0LngtZS54fWMuc2V0RGlydHk9ZnVuY3Rpb24oKXt0aGlzLmRpcnR5PXRoaXMucGlja0RpcnR5PSEwfSxjLnNldE92ZXJsYXlEaXJ0eT1mdW5jdGlvbigpe3RoaXMuZGlydHk9ITB9LGMubmV4dERlcHRoVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVwdGhDb3VudGVyKysvNjU1MzZ9LGMuZHJhdz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2wsZT10aGlzLnNjcmVlbkJveCxyPXRoaXMudmlld0JveCxuPXRoaXMuZGF0YUJveCxpPXRoaXMucGl4ZWxSYXRpbyxhPXRoaXMuZ3JpZCxvPXRoaXMubGluZSxzPXRoaXMudGV4dCxsPXRoaXMub2JqZWN0cztpZih0aGlzLl9kZXB0aENvdW50ZXI9MCx0aGlzLnBpY2tEaXJ0eSYmKHRoaXMuX3BpY2tUaW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy5fcGlja1RpbWVvdXQpLHRoaXMucGlja0RpcnR5PSExLHRoaXMuX3BpY2tUaW1lb3V0PXNldFRpbWVvdXQodGhpcy5fZHJhd1BpY2ssdGhpcy5waWNrRGVsYXkpKSx0aGlzLmRpcnR5KXtpZih0aGlzLmRpcnR5PSExLHQuYmluZEZyYW1lYnVmZmVyKHQuRlJBTUVCVUZGRVIsbnVsbCksdC5lbmFibGUodC5TQ0lTU09SX1RFU1QpLHQuZGlzYWJsZSh0LkRFUFRIX1RFU1QpLHQuZGVwdGhGdW5jKHQuTEVTUyksdC5kZXB0aE1hc2soITEpLHQuZW5hYmxlKHQuQkxFTkQpLHQuYmxlbmRFcXVhdGlvbih0LkZVTkNfQURELHQuRlVOQ19BREQpLHQuYmxlbmRGdW5jKHQuT05FLHQuT05FX01JTlVTX1NSQ19BTFBIQSksdGhpcy5ib3JkZXJDb2xvcil7dC5zY2lzc29yKGVbMF0sZVsxXSxlWzJdLWVbMF0sZVszXS1lWzFdKTt2YXIgYz10aGlzLmJvcmRlckNvbG9yO3QuY2xlYXJDb2xvcihjWzBdKmNbM10sY1sxXSpjWzNdLGNbMl0qY1szXSxjWzNdKSx0LmNsZWFyKHQuQ09MT1JfQlVGRkVSX0JJVHx0LkRFUFRIX0JVRkZFUl9CSVQpfXQuc2Npc3NvcihyWzBdLHJbMV0sclsyXS1yWzBdLHJbM10tclsxXSksdC52aWV3cG9ydChyWzBdLHJbMV0sclsyXS1yWzBdLHJbM10tclsxXSk7dmFyIHU9dGhpcy5iYWNrZ3JvdW5kQ29sb3I7dC5jbGVhckNvbG9yKHVbMF0qdVszXSx1WzFdKnVbM10sdVsyXSp1WzNdLHVbM10pLHQuY2xlYXIodC5DT0xPUl9CVUZGRVJfQklUKSxhLmRyYXcoKTt2YXIgaD10aGlzLnplcm9MaW5lRW5hYmxlLGY9dGhpcy56ZXJvTGluZUNvbG9yLHA9dGhpcy56ZXJvTGluZVdpZHRoO2lmKGhbMF18fGhbMV0pe28uYmluZCgpO2Zvcih2YXIgZD0wO2Q8MjsrK2QpaWYoaFtkXSYmbltkXTw9MCYmbltkKzJdPj0wKXt2YXIgZz1lW2RdLW5bZF0qKGVbZCsyXS1lW2RdKS8obltkKzJdLW5bZF0pOzA9PT1kP28uZHJhd0xpbmUoZyxlWzFdLGcsZVszXSxwW2RdLGZbZF0pOm8uZHJhd0xpbmUoZVswXSxnLGVbMl0sZyxwW2RdLGZbZF0pfX1mb3IoZD0wO2Q8bC5sZW5ndGg7KytkKWxbZF0uZHJhdygpO3Qudmlld3BvcnQoZVswXSxlWzFdLGVbMl0tZVswXSxlWzNdLWVbMV0pLHQuc2Npc3NvcihlWzBdLGVbMV0sZVsyXS1lWzBdLGVbM10tZVsxXSksdGhpcy5ncmlkLmRyYXdUaWNrTWFya3MoKSxvLmJpbmQoKTt2YXIgdj10aGlzLmJvcmRlckxpbmVFbmFibGUsbT10aGlzLmJvcmRlckxpbmVXaWR0aCx5PXRoaXMuYm9yZGVyTGluZUNvbG9yO2Zvcih2WzFdJiZvLmRyYXdMaW5lKHJbMF0sclsxXS0uNSptWzFdKmksclswXSxyWzNdKy41Km1bM10qaSxtWzFdLHlbMV0pLHZbMF0mJm8uZHJhd0xpbmUoclswXS0uNSptWzBdKmksclsxXSxyWzJdKy41Km1bMl0qaSxyWzFdLG1bMF0seVswXSksdlszXSYmby5kcmF3TGluZShyWzJdLHJbMV0tLjUqbVsxXSppLHJbMl0sclszXSsuNSptWzNdKmksbVszXSx5WzNdKSx2WzJdJiZvLmRyYXdMaW5lKHJbMF0tLjUqbVswXSppLHJbM10sclsyXSsuNSptWzJdKmksclszXSxtWzJdLHlbMl0pLHMuYmluZCgpLGQ9MDtkPDI7KytkKXMuZHJhd1RpY2tzKGQpO3RoaXMudGl0bGVFbmFibGUmJnMuZHJhd1RpdGxlKCk7dmFyIHg9dGhpcy5vdmVybGF5cztmb3IoZD0wO2Q8eC5sZW5ndGg7KytkKXhbZF0uZHJhdygpO3QuZGlzYWJsZSh0LlNDSVNTT1JfVEVTVCksdC5kaXNhYmxlKHQuQkxFTkQpLHQuZGVwdGhNYXNrKCEwKX19LGMuZHJhd1BpY2s9ZnVuY3Rpb24oKXtpZighdGhpcy5zdGF0aWMpe3ZhciB0PXRoaXMucGlja0J1ZmZlcjt0aGlzLmdsO3RoaXMuX3BpY2tUaW1lb3V0PW51bGwsdC5iZWdpbigpO2Zvcih2YXIgZT0xLHI9dGhpcy5vYmplY3RzLG49MDtuPHIubGVuZ3RoOysrbillPXJbbl0uZHJhd1BpY2soZSk7dC5lbmQoKX19LGMucGljaz1mdW5jdGlvbih0LGUpe2lmKCF0aGlzLnN0YXRpYyl7dmFyIHI9dGhpcy5waXhlbFJhdGlvLG49dGhpcy5waWNrUGl4ZWxSYXRpbyxpPXRoaXMudmlld0JveCxhPTB8TWF0aC5yb3VuZCgodC1pWzBdL3IpKm4pLG89MHxNYXRoLnJvdW5kKChlLWlbMV0vcikqbikscz10aGlzLnBpY2tCdWZmZXIucXVlcnkoYSxvLHRoaXMucGlja1JhZGl1cyk7aWYoIXMpcmV0dXJuIG51bGw7Zm9yKHZhciBsPXMuaWQrKHMudmFsdWVbMF08PDgpKyhzLnZhbHVlWzFdPDwxNikrKHMudmFsdWVbMl08PDI0KSxjPXRoaXMub2JqZWN0cyx1PTA7dTxjLmxlbmd0aDsrK3Upe3ZhciBoPWNbdV0ucGljayhhLG8sbCk7aWYoaClyZXR1cm4gaH1yZXR1cm4gbnVsbH19LGMuc2V0U2NyZWVuQm94PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NyZWVuQm94LHI9dGhpcy5waXhlbFJhdGlvO2VbMF09MHxNYXRoLnJvdW5kKHRbMF0qciksZVsxXT0wfE1hdGgucm91bmQodFsxXSpyKSxlWzJdPTB8TWF0aC5yb3VuZCh0WzJdKnIpLGVbM109MHxNYXRoLnJvdW5kKHRbM10qciksdGhpcy5zZXREaXJ0eSgpfSxjLnNldERhdGFCb3g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kYXRhQm94OyhlWzBdIT09dFswXXx8ZVsxXSE9PXRbMV18fGVbMl0hPT10WzJdfHxlWzNdIT09dFszXSkmJihlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sdGhpcy5zZXREaXJ0eSgpKX0sYy5zZXRWaWV3Qm94PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGl4ZWxSYXRpbyxyPXRoaXMudmlld0JveDtyWzBdPTB8TWF0aC5yb3VuZCh0WzBdKmUpLHJbMV09MHxNYXRoLnJvdW5kKHRbMV0qZSksclsyXT0wfE1hdGgucm91bmQodFsyXSplKSxyWzNdPTB8TWF0aC5yb3VuZCh0WzNdKmUpO3ZhciBuPXRoaXMucGlja1BpeGVsUmF0aW87dGhpcy5waWNrQnVmZmVyLnNoYXBlPVswfE1hdGgucm91bmQoKHRbMl0tdFswXSkqbiksMHxNYXRoLnJvdW5kKCh0WzNdLXRbMV0pKm4pXSx0aGlzLnNldERpcnR5KCl9LGMudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e307dmFyIGU9dGhpcy5nbDt0aGlzLnBpeGVsUmF0aW89dC5waXhlbFJhdGlvfHwxO3ZhciByPXRoaXMucGl4ZWxSYXRpbzt0aGlzLnBpY2tQaXhlbFJhdGlvPU1hdGgubWF4KHIsMSksdGhpcy5zZXRTY3JlZW5Cb3godC5zY3JlZW5Cb3h8fFswLDAsZS5kcmF3aW5nQnVmZmVyV2lkdGgvcixlLmRyYXdpbmdCdWZmZXJIZWlnaHQvcl0pO3RoaXMuc2NyZWVuQm94O3RoaXMuc2V0Vmlld0JveCh0LnZpZXdCb3h8fFsuMTI1Kih0aGlzLnNjcmVlbkJveFsyXS10aGlzLnNjcmVlbkJveFswXSkvciwuMTI1Kih0aGlzLnNjcmVlbkJveFszXS10aGlzLnNjcmVlbkJveFsxXSkvciwuODc1Kih0aGlzLnNjcmVlbkJveFsyXS10aGlzLnNjcmVlbkJveFswXSkvciwuODc1Kih0aGlzLnNjcmVlbkJveFszXS10aGlzLnNjcmVlbkJveFsxXSkvcl0pO3ZhciBuPXRoaXMudmlld0JveCxpPShuWzJdLW5bMF0pLyhuWzNdLW5bMV0pO3RoaXMuc2V0RGF0YUJveCh0LmRhdGFCb3h8fFstMTAsLTEwL2ksMTAsMTAvaV0pLHRoaXMuYm9yZGVyQ29sb3I9ITEhPT10LmJvcmRlckNvbG9yJiYodC5ib3JkZXJDb2xvcnx8WzAsMCwwLDBdKS5zbGljZSgpLHRoaXMuYmFja2dyb3VuZENvbG9yPSh0LmJhY2tncm91bmRDb2xvcnx8WzAsMCwwLDBdKS5zbGljZSgpLHRoaXMuZ3JpZExpbmVFbmFibGU9KHQuZ3JpZExpbmVFbmFibGV8fFshMCwhMF0pLnNsaWNlKCksdGhpcy5ncmlkTGluZVdpZHRoPSh0LmdyaWRMaW5lV2lkdGh8fFsxLDFdKS5zbGljZSgpLHRoaXMuZ3JpZExpbmVDb2xvcj11KHQuZ3JpZExpbmVDb2xvcnx8W1suNSwuNSwuNSwxXSxbLjUsLjUsLjUsMV1dKSx0aGlzLnplcm9MaW5lRW5hYmxlPSh0Lnplcm9MaW5lRW5hYmxlfHxbITAsITBdKS5zbGljZSgpLHRoaXMuemVyb0xpbmVXaWR0aD0odC56ZXJvTGluZVdpZHRofHxbNCw0XSkuc2xpY2UoKSx0aGlzLnplcm9MaW5lQ29sb3I9dSh0Lnplcm9MaW5lQ29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdXSksdGhpcy50aWNrTWFya0xlbmd0aD0odC50aWNrTWFya0xlbmd0aHx8WzAsMCwwLDBdKS5zbGljZSgpLHRoaXMudGlja01hcmtXaWR0aD0odC50aWNrTWFya1dpZHRofHxbMCwwLDAsMF0pLnNsaWNlKCksdGhpcy50aWNrTWFya0NvbG9yPXUodC50aWNrTWFya0NvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSksdGhpcy50aXRsZUNlbnRlcj0odC50aXRsZUNlbnRlcnx8Wy41KihuWzBdK25bMl0pL3IsKG5bM10rMTIwKS9yXSkuc2xpY2UoKSx0aGlzLnRpdGxlRW5hYmxlPSEoXCJ0aXRsZUVuYWJsZVwiaW4gdCYmIXQudGl0bGVFbmFibGUpLHRoaXMudGl0bGVBbmdsZT10LnRpdGxlQW5nbGV8fDAsdGhpcy50aXRsZUNvbG9yPSh0LnRpdGxlQ29sb3J8fFswLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmxhYmVsUGFkPSh0LmxhYmVsUGFkfHxbMTUsMTUsMTUsMTVdKS5zbGljZSgpLHRoaXMubGFiZWxBbmdsZT0odC5sYWJlbEFuZ2xlfHxbMCxNYXRoLlBJLzIsMCwzKk1hdGguUEkvMl0pLnNsaWNlKCksdGhpcy5sYWJlbEVuYWJsZT0odC5sYWJlbEVuYWJsZXx8WyEwLCEwLCEwLCEwXSkuc2xpY2UoKSx0aGlzLmxhYmVsQ29sb3I9dSh0LmxhYmVsQ29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dKSx0aGlzLnRpY2tQYWQ9KHQudGlja1BhZHx8WzE1LDE1LDE1LDE1XSkuc2xpY2UoKSx0aGlzLnRpY2tBbmdsZT0odC50aWNrQW5nbGV8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLnRpY2tFbmFibGU9KHQudGlja0VuYWJsZXx8WyEwLCEwLCEwLCEwXSkuc2xpY2UoKSx0aGlzLnRpY2tDb2xvcj11KHQudGlja0NvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSksdGhpcy5ib3JkZXJMaW5lRW5hYmxlPSh0LmJvcmRlckxpbmVFbmFibGV8fFshMCwhMCwhMCwhMF0pLnNsaWNlKCksdGhpcy5ib3JkZXJMaW5lV2lkdGg9KHQuYm9yZGVyTGluZVdpZHRofHxbMiwyLDIsMl0pLnNsaWNlKCksdGhpcy5ib3JkZXJMaW5lQ29sb3I9dSh0LmJvcmRlckxpbmVDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pO3ZhciBhPXQudGlja3N8fFtbXSxbXV0sbz10aGlzLl90aWNrQm91bmRzO29bMF09b1sxXT0xLzAsb1syXT1vWzNdPS0xLzA7Zm9yKHZhciBzPTA7czwyOysrcyl7dmFyIGw9YVtzXS5zbGljZSgwKTswIT09bC5sZW5ndGgmJihsLnNvcnQoaCksb1tzXT1NYXRoLm1pbihvW3NdLGxbMF0ueCksb1tzKzJdPU1hdGgubWF4KG9bcysyXSxsW2wubGVuZ3RoLTFdLngpKX10aGlzLmdyaWQudXBkYXRlKHtib3VuZHM6byx0aWNrczphfSksdGhpcy50ZXh0LnVwZGF0ZSh7Ym91bmRzOm8sdGlja3M6YSxsYWJlbHM6dC5sYWJlbHN8fFtcInhcIixcInlcIl0sbGFiZWxTaXplOnQubGFiZWxTaXplfHxbMTIsMTJdLGxhYmVsRm9udDp0LmxhYmVsRm9udHx8W1wic2Fucy1zZXJpZlwiLFwic2Fucy1zZXJpZlwiXSx0aXRsZTp0LnRpdGxlfHxcIlwiLHRpdGxlU2l6ZTp0LnRpdGxlU2l6ZXx8MTgsdGl0bGVGb250OnQudGl0bGVGb250fHxcInNhbnMtc2VyaWZcIn0pLHRoaXMuc3RhdGljPSEhdC5zdGF0aWMsdGhpcy5zZXREaXJ0eSgpfSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmJveC5kaXNwb3NlKCksdGhpcy5ncmlkLmRpc3Bvc2UoKSx0aGlzLnRleHQuZGlzcG9zZSgpLHRoaXMubGluZS5kaXNwb3NlKCk7Zm9yKHZhciB0PXRoaXMub2JqZWN0cy5sZW5ndGgtMTt0Pj0wOy0tdCl0aGlzLm9iamVjdHNbdF0uZGlzcG9zZSgpO3RoaXMub2JqZWN0cy5sZW5ndGg9MDtmb3IodD10aGlzLm92ZXJsYXlzLmxlbmd0aC0xO3Q+PTA7LS10KXRoaXMub3ZlcmxheXNbdF0uZGlzcG9zZSgpO3RoaXMub3ZlcmxheXMubGVuZ3RoPTAsdGhpcy5nbD1udWxsfSxjLmFkZE9iamVjdD1mdW5jdGlvbih0KXt0aGlzLm9iamVjdHMuaW5kZXhPZih0KTwwJiYodGhpcy5vYmplY3RzLnB1c2godCksdGhpcy5zZXREaXJ0eSgpKX0sYy5yZW1vdmVPYmplY3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMub2JqZWN0cyxyPTA7cjxlLmxlbmd0aDsrK3IpaWYoZVtyXT09PXQpe2Uuc3BsaWNlKHIsMSksdGhpcy5zZXREaXJ0eSgpO2JyZWFrfX0sYy5hZGRPdmVybGF5PWZ1bmN0aW9uKHQpe3RoaXMub3ZlcmxheXMuaW5kZXhPZih0KTwwJiYodGhpcy5vdmVybGF5cy5wdXNoKHQpLHRoaXMuc2V0T3ZlcmxheURpcnR5KCkpfSxjLnJlbW92ZU92ZXJsYXk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMub3ZlcmxheXMscj0wO3I8ZS5sZW5ndGg7KytyKWlmKGVbcl09PT10KXtlLnNwbGljZShyLDEpLHRoaXMuc2V0T3ZlcmxheURpcnR5KCk7YnJlYWt9fX0se1wiLi9saWIvYm94XCI6Mjc4LFwiLi9saWIvZ3JpZFwiOjI3OSxcIi4vbGliL2xpbmVcIjoyODAsXCIuL2xpYi90ZXh0XCI6MjgyLFwiZ2wtc2VsZWN0LXN0YXRpY1wiOjI5N31dLDI4NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Q9dHx8ZG9jdW1lbnQuYm9keSxlPWV8fHt9O3ZhciByPVsuMDEsMS8wXTtcImRpc3RhbmNlTGltaXRzXCJpbiBlJiYoclswXT1lLmRpc3RhbmNlTGltaXRzWzBdLHJbMV09ZS5kaXN0YW5jZUxpbWl0c1sxXSk7XCJ6b29tTWluXCJpbiBlJiYoclswXT1lLnpvb21NaW4pO1wiem9vbU1heFwiaW4gZSYmKHJbMV09ZS56b29tTWF4KTt2YXIgYz1pKHtjZW50ZXI6ZS5jZW50ZXJ8fFswLDAsMF0sdXA6ZS51cHx8WzAsMSwwXSxleWU6ZS5leWV8fFswLDAsMTBdLG1vZGU6ZS5tb2RlfHxcIm9yYml0XCIsZGlzdGFuY2VMaW1pdHM6cn0pLHU9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdLGg9MCxmPXQuY2xpZW50V2lkdGgscD10LmNsaWVudEhlaWdodCxkPXtrZXlCaW5kaW5nTW9kZTpcInJvdGF0ZVwiLGVuYWJsZVdoZWVsOiEwLHZpZXc6YyxlbGVtZW50OnQsZGVsYXk6ZS5kZWxheXx8MTYscm90YXRlU3BlZWQ6ZS5yb3RhdGVTcGVlZHx8MSx6b29tU3BlZWQ6ZS56b29tU3BlZWR8fDEsdHJhbnNsYXRlU3BlZWQ6ZS50cmFuc2xhdGVTcGVlZHx8MSxmbGlwWDohIWUuZmxpcFgsZmxpcFk6ISFlLmZsaXBZLG1vZGVzOmMubW9kZXMsX29ydGhvOmUuX29ydGhvfHxlLnByb2plY3Rpb24mJlwib3J0aG9ncmFwaGljXCI9PT1lLnByb2plY3Rpb24udHlwZXx8ITEsdGljazpmdW5jdGlvbigpe3ZhciBlPW4oKSxyPXRoaXMuZGVsYXksaT1lLTIqcjtjLmlkbGUoZS1yKSxjLnJlY2FsY01hdHJpeChpKSxjLmZsdXNoKGUtKDEwMCsyKnIpKTtmb3IodmFyIGE9ITAsbz1jLmNvbXB1dGVkTWF0cml4LHM9MDtzPDE2OysrcylhPWEmJnVbc109PT1vW3NdLHVbc109b1tzXTt2YXIgbD10LmNsaWVudFdpZHRoPT09ZiYmdC5jbGllbnRIZWlnaHQ9PT1wO3JldHVybiBmPXQuY2xpZW50V2lkdGgscD10LmNsaWVudEhlaWdodCxhPyFsOihoPU1hdGguZXhwKGMuY29tcHV0ZWRSYWRpdXNbMF0pLCEwKX0sbG9va0F0OmZ1bmN0aW9uKHQsZSxyKXtjLmxvb2tBdChjLmxhc3RUKCksdCxlLHIpfSxyb3RhdGU6ZnVuY3Rpb24odCxlLHIpe2Mucm90YXRlKGMubGFzdFQoKSx0LGUscil9LHBhbjpmdW5jdGlvbih0LGUscil7Yy5wYW4oYy5sYXN0VCgpLHQsZSxyKX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSxyKXtjLnRyYW5zbGF0ZShjLmxhc3RUKCksdCxlLHIpfX07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGQse21hdHJpeDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuY29tcHV0ZWRNYXRyaXh9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5zZXRNYXRyaXgoYy5sYXN0VCgpLHQpLGMuY29tcHV0ZWRNYXRyaXh9LGVudW1lcmFibGU6ITB9LG1vZGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmdldE1vZGUoKX0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPWMuY29tcHV0ZWRVcC5zbGljZSgpLHI9Yy5jb21wdXRlZEV5ZS5zbGljZSgpLGk9Yy5jb21wdXRlZENlbnRlci5zbGljZSgpO2lmKGMuc2V0TW9kZSh0KSxcInR1cm50YWJsZVwiPT09dCl7dmFyIGE9bigpO2MuX2FjdGl2ZS5sb29rQXQoYSxyLGksZSksYy5fYWN0aXZlLmxvb2tBdChhKzUwMCxyLGksWzAsMCwxXSksYy5fYWN0aXZlLmZsdXNoKGEpfXJldHVybiBjLmdldE1vZGUoKX0sZW51bWVyYWJsZTohMH0sY2VudGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5jb21wdXRlZENlbnRlcn0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLmxvb2tBdChjLmxhc3RUKCksbnVsbCx0KSxjLmNvbXB1dGVkQ2VudGVyfSxlbnVtZXJhYmxlOiEwfSxleWU6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmNvbXB1dGVkRXllfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGMubG9va0F0KGMubGFzdFQoKSx0KSxjLmNvbXB1dGVkRXllfSxlbnVtZXJhYmxlOiEwfSx1cDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuY29tcHV0ZWRVcH0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLmxvb2tBdChjLmxhc3RUKCksbnVsbCxudWxsLHQpLGMuY29tcHV0ZWRVcH0sZW51bWVyYWJsZTohMH0sZGlzdGFuY2U6e2dldDpmdW5jdGlvbigpe3JldHVybiBofSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGMuc2V0RGlzdGFuY2UoYy5sYXN0VCgpLHQpLHR9LGVudW1lcmFibGU6ITB9LGRpc3RhbmNlTGltaXRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5nZXREaXN0YW5jZUxpbWl0cyhyKX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLnNldERpc3RhbmNlTGltaXRzKHQpLHR9LGVudW1lcmFibGU6ITB9fSksdC5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpLCExfSksZC5fbGFzdFg9LTEsZC5fbGFzdFk9LTEsZC5fbGFzdE1vZHM9e3NoaWZ0OiExLGNvbnRyb2w6ITEsYWx0OiExLG1ldGE6ITF9LGQuZW5hYmxlTW91c2VMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUscixpLGEpe3ZhciBvPWQua2V5QmluZGluZ01vZGU7aWYoITEhPT1vKXt2YXIgcz1cInJvdGF0ZVwiPT09byxsPVwicGFuXCI9PT1vLHU9XCJ6b29tXCI9PT1vLGY9ISFhLmNvbnRyb2wscD0hIWEuYWx0LGc9ISFhLnNoaWZ0LHY9ISEoMSZlKSxtPSEhKDImZSkseT0hISg0JmUpLHg9MS90LmNsaWVudEhlaWdodCxiPXgqKHItZC5fbGFzdFgpLF89eCooaS1kLl9sYXN0WSksdz1kLmZsaXBYPzE6LTEsaz1kLmZsaXBZPzE6LTEsQT1NYXRoLlBJKmQucm90YXRlU3BlZWQsVD1uKCk7aWYoLTEhPT1kLl9sYXN0WCYmLTEhPT1kLl9sYXN0WSYmKChzJiZ2JiYhZiYmIXAmJiFnfHx2JiYhZiYmIXAmJmcpJiZjLnJvdGF0ZShULHcqQSpiLC1rKkEqXywwKSwobCYmdiYmIWYmJiFwJiYhZ3x8bXx8diYmZiYmIXAmJiFnKSYmYy5wYW4oVCwtZC50cmFuc2xhdGVTcGVlZCpiKmgsZC50cmFuc2xhdGVTcGVlZCpfKmgsMCksdSYmdiYmIWYmJiFwJiYhZ3x8eXx8diYmIWYmJnAmJiFnKSl7dmFyIE09LWQuem9vbVNwZWVkKl8vd2luZG93LmlubmVySGVpZ2h0KihULWMubGFzdFQoKSkqMTAwO2MucGFuKFQsMCwwLGgqKE1hdGguZXhwKE0pLTEpKX1yZXR1cm4gZC5fbGFzdFg9cixkLl9sYXN0WT1pLGQuX2xhc3RNb2RzPWEsITB9fWQubW91c2VMaXN0ZW5lcj1hKHQsZSksdC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLGZ1bmN0aW9uKHIpe3ZhciBuPXMoci5jaGFuZ2VkVG91Y2hlc1swXSx0KTtlKDAsblswXSxuWzFdLGQuX2xhc3RNb2RzKSxlKDEsblswXSxuWzFdLGQuX2xhc3RNb2RzKSxyLnByZXZlbnREZWZhdWx0KCl9LCEhbCYme3Bhc3NpdmU6ITF9KSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIixmdW5jdGlvbihyKXt2YXIgbj1zKHIuY2hhbmdlZFRvdWNoZXNbMF0sdCk7ZSgxLG5bMF0sblsxXSxkLl9sYXN0TW9kcyksci5wcmV2ZW50RGVmYXVsdCgpfSwhIWwmJntwYXNzaXZlOiExfSksdC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIixmdW5jdGlvbih0KXtlKDAsZC5fbGFzdFgsZC5fbGFzdFksZC5fbGFzdE1vZHMpLHQucHJldmVudERlZmF1bHQoKX0sISFsJiZ7cGFzc2l2ZTohMX0pLGQud2hlZWxMaXN0ZW5lcj1vKHQsZnVuY3Rpb24odCxlKXtpZighMSE9PWQua2V5QmluZGluZ01vZGUmJmQuZW5hYmxlV2hlZWwpe3ZhciByPWQuZmxpcFg/MTotMSxpPWQuZmxpcFk/MTotMSxhPW4oKTtpZihNYXRoLmFicyh0KT5NYXRoLmFicyhlKSljLnJvdGF0ZShhLDAsMCwtdCpyKk1hdGguUEkqZC5yb3RhdGVTcGVlZC93aW5kb3cuaW5uZXJXaWR0aCk7ZWxzZSBpZighZC5fb3J0aG8pe3ZhciBvPS1kLnpvb21TcGVlZCppKmUvd2luZG93LmlubmVySGVpZ2h0KihhLWMubGFzdFQoKSkvMjA7Yy5wYW4oYSwwLDAsaCooTWF0aC5leHAobyktMSkpfX19LCEwKX0sZC5lbmFibGVNb3VzZUxpc3RlbmVycygpLGR9O3ZhciBuPXQoXCJyaWdodC1ub3dcIiksaT10KFwiM2Qtdmlld1wiKSxhPXQoXCJtb3VzZS1jaGFuZ2VcIiksbz10KFwibW91c2Utd2hlZWxcIikscz10KFwibW91c2UtZXZlbnQtb2Zmc2V0XCIpLGw9dChcImhhcy1wYXNzaXZlLWV2ZW50c1wiKX0se1wiM2Qtdmlld1wiOjQ4LFwiaGFzLXBhc3NpdmUtZXZlbnRzXCI6NDA0LFwibW91c2UtY2hhbmdlXCI6NDI4LFwibW91c2UtZXZlbnQtb2Zmc2V0XCI6NDI5LFwibW91c2Utd2hlZWxcIjo0MzEsXCJyaWdodC1ub3dcIjo0ODl9XSwyODY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiZ2xzbGlmeVwiKSxpPXQoXCJnbC1zaGFkZXJcIiksYT1uKFtcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XFxudmFyeWluZyB2ZWMyIHV2O1xcbnZvaWQgbWFpbigpIHtcXG4gIHV2ID0gcG9zaXRpb247XFxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAsIDEpO1xcbn1cIl0pLG89bihbXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnVuaWZvcm0gc2FtcGxlcjJEIGFjY3VtQnVmZmVyO1xcbnZhcnlpbmcgdmVjMiB1djtcXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWM0IGFjY3VtID0gdGV4dHVyZTJEKGFjY3VtQnVmZmVyLCAwLjUgKiAodXYgKyAxLjApKTtcXG4gIGdsX0ZyYWdDb2xvciA9IG1pbih2ZWM0KDEsMSwxLDEpLCBhY2N1bSk7XFxufVwiXSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQsYSxvLG51bGwsW3tuYW1lOlwicG9zaXRpb25cIix0eXBlOlwidmVjMlwifV0pfX0se1wiZ2wtc2hhZGVyXCI6Mjk4LGdsc2xpZnk6NDAyfV0sMjg3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vY2FtZXJhLmpzXCIpLGk9dChcImdsLWF4ZXMzZFwiKSxhPXQoXCJnbC1heGVzM2QvcHJvcGVydGllc1wiKSxvPXQoXCJnbC1zcGlrZXMzZFwiKSxzPXQoXCJnbC1zZWxlY3Qtc3RhdGljXCIpLGw9dChcImdsLWZib1wiKSxjPXQoXCJhLWJpZy10cmlhbmdsZVwiKSx1PXQoXCJtb3VzZS1jaGFuZ2VcIiksaD10KFwibW91c2Utd2hlZWxcIiksZj10KFwiZ2wtbWF0NC9wZXJzcGVjdGl2ZVwiKSxwPXQoXCJnbC1tYXQ0L29ydGhvXCIpLGQ9dChcIi4vbGliL3NoYWRlclwiKSxnPXQoXCJpcy1tb2JpbGVcIikoe3RhYmxldDohMH0pO2Z1bmN0aW9uIHYoKXt0aGlzLm1vdXNlPVstMSwtMV0sdGhpcy5zY3JlZW49bnVsbCx0aGlzLmRpc3RhbmNlPTEvMCx0aGlzLmluZGV4PW51bGwsdGhpcy5kYXRhQ29vcmRpbmF0ZT1udWxsLHRoaXMuZGF0YVBvc2l0aW9uPW51bGwsdGhpcy5vYmplY3Q9bnVsbCx0aGlzLmRhdGE9bnVsbH1mdW5jdGlvbiBtKHQpe3ZhciBlPU1hdGgucm91bmQoTWF0aC5sb2coTWF0aC5hYnModCkpL01hdGgubG9nKDEwKSk7aWYoZTwwKXt2YXIgcj1NYXRoLnJvdW5kKE1hdGgucG93KDEwLC1lKSk7cmV0dXJuIE1hdGguY2VpbCh0KnIpL3J9aWYoZT4wKXtyPU1hdGgucm91bmQoTWF0aC5wb3coMTAsZSkpO3JldHVybiBNYXRoLmNlaWwodC9yKSpyfXJldHVybiBNYXRoLmNlaWwodCl9ZnVuY3Rpb24geSh0KXtyZXR1cm5cImJvb2xlYW5cIiE9dHlwZW9mIHR8fHR9ZS5leHBvcnRzPXtjcmVhdGVTY2VuZTpmdW5jdGlvbih0KXsodD10fHx7fSkuY2FtZXJhPXQuY2FtZXJhfHx7fTt2YXIgZT10LmNhbnZhcztpZighZSlpZihlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksdC5jb250YWluZXIpe3ZhciByPXQuY29udGFpbmVyO3IuYXBwZW5kQ2hpbGQoZSl9ZWxzZSBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpO3ZhciB4PXQuZ2w7eHx8KHg9ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsO3RyeXsocj10LmdldENvbnRleHQoXCJ3ZWJnbFwiLGUpKXx8KHI9dC5nZXRDb250ZXh0KFwiZXhwZXJpbWVudGFsLXdlYmdsXCIsZSkpfWNhdGNoKHQpe3JldHVybiBudWxsfXJldHVybiByfShlLHQuZ2xPcHRpb25zfHx7cHJlbXVsdGlwbGllZEFscGhhOiEwLGFudGlhbGlhczohMCxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6Z30pKTtpZigheCl0aHJvdyBuZXcgRXJyb3IoXCJ3ZWJnbCBub3Qgc3VwcG9ydGVkXCIpO3ZhciBiPXQuYm91bmRzfHxbWy0xMCwtMTAsLTEwXSxbMTAsMTAsMTBdXSxfPW5ldyB2LHc9bCh4LFt4LmRyYXdpbmdCdWZmZXJXaWR0aCx4LmRyYXdpbmdCdWZmZXJIZWlnaHRdLHtwcmVmZXJGbG9hdDohZ30pLGs9ZCh4KSxBPXQuY2FtZXJhT2JqZWN0JiYhMD09PXQuY2FtZXJhT2JqZWN0Ll9vcnRob3x8dC5jYW1lcmEucHJvamVjdGlvbiYmXCJvcnRob2dyYXBoaWNcIj09PXQuY2FtZXJhLnByb2plY3Rpb24udHlwZXx8ITEsVD17ZXllOnQuY2FtZXJhLmV5ZXx8WzIsMCwwXSxjZW50ZXI6dC5jYW1lcmEuY2VudGVyfHxbMCwwLDBdLHVwOnQuY2FtZXJhLnVwfHxbMCwxLDBdLHpvb21NaW46dC5jYW1lcmEuem9vbU1heHx8LjEsem9vbU1heDp0LmNhbWVyYS56b29tTWlufHwxMDAsbW9kZTp0LmNhbWVyYS5tb2RlfHxcInR1cm50YWJsZVwiLF9vcnRobzpBfSxNPXQuYXhlc3x8e30sUz1pKHgsTSk7Uy5lbmFibGU9IU0uZGlzYWJsZTt2YXIgRT10LnNwaWtlc3x8e30sQz1vKHgsRSksTD1bXSx6PVtdLE89W10sST1bXSxEPSEwLFA9ITAsUj1uZXcgQXJyYXkoMTYpLEY9bmV3IEFycmF5KDE2KSxCPXt2aWV3Om51bGwscHJvamVjdGlvbjpSLG1vZGVsOkYsX29ydGhvOiExfSxQPSEwLE49W3guZHJhd2luZ0J1ZmZlcldpZHRoLHguZHJhd2luZ0J1ZmZlckhlaWdodF0saj10LmNhbWVyYU9iamVjdHx8bihlLFQpLFY9e2dsOngsY29udGV4dExvc3Q6ITEscGl4ZWxSYXRpbzp0LnBpeGVsUmF0aW98fDEsY2FudmFzOmUsc2VsZWN0aW9uOl8sY2FtZXJhOmosYXhlczpTLGF4ZXNQaXhlbHM6bnVsbCxzcGlrZXM6Qyxib3VuZHM6YixvYmplY3RzOkwsc2hhcGU6Tixhc3BlY3Q6dC5hc3BlY3RSYXRpb3x8WzEsMSwxXSxwaWNrUmFkaXVzOnQucGlja1JhZGl1c3x8MTAsek5lYXI6dC56TmVhcnx8LjAxLHpGYXI6dC56RmFyfHwxZTMsZm92eTp0LmZvdnl8fE1hdGguUEkvNCxjbGVhckNvbG9yOnQuY2xlYXJDb2xvcnx8WzAsMCwwLDBdLGF1dG9SZXNpemU6eSh0LmF1dG9SZXNpemUpLGF1dG9Cb3VuZHM6eSh0LmF1dG9Cb3VuZHMpLGF1dG9TY2FsZTohIXQuYXV0b1NjYWxlLGF1dG9DZW50ZXI6eSh0LmF1dG9DZW50ZXIpLGNsaXBUb0JvdW5kczp5KHQuY2xpcFRvQm91bmRzKSxzbmFwVG9EYXRhOiEhdC5zbmFwVG9EYXRhLG9uc2VsZWN0OnQub25zZWxlY3R8fG51bGwsb25yZW5kZXI6dC5vbnJlbmRlcnx8bnVsbCxvbmNsaWNrOnQub25jbGlja3x8bnVsbCxjYW1lcmFQYXJhbXM6QixvbmNvbnRleHRsb3NzOm51bGwsbW91c2VMaXN0ZW5lcjpudWxsLF9zdG9wcGVkOiExfSxVPVt4LmRyYXdpbmdCdWZmZXJXaWR0aC9WLnBpeGVsUmF0aW98MCx4LmRyYXdpbmdCdWZmZXJIZWlnaHQvVi5waXhlbFJhdGlvfDBdO2Z1bmN0aW9uIHEoKXtpZighVi5fc3RvcHBlZCYmVi5hdXRvUmVzaXplKXt2YXIgdD1lLnBhcmVudE5vZGUscj0xLG49MTt0JiZ0IT09ZG9jdW1lbnQuYm9keT8ocj10LmNsaWVudFdpZHRoLG49dC5jbGllbnRIZWlnaHQpOihyPXdpbmRvdy5pbm5lcldpZHRoLG49d2luZG93LmlubmVySGVpZ2h0KTt2YXIgaT0wfE1hdGguY2VpbChyKlYucGl4ZWxSYXRpbyksYT0wfE1hdGguY2VpbChuKlYucGl4ZWxSYXRpbyk7aWYoaSE9PWUud2lkdGh8fGEhPT1lLmhlaWdodCl7ZS53aWR0aD1pLGUuaGVpZ2h0PWE7dmFyIG89ZS5zdHlsZTtvLnBvc2l0aW9uPW8ucG9zaXRpb258fFwiYWJzb2x1dGVcIixvLmxlZnQ9XCIwcHhcIixvLnRvcD1cIjBweFwiLG8ud2lkdGg9citcInB4XCIsby5oZWlnaHQ9bitcInB4XCIsRD0hMH19fVYuYXV0b1Jlc2l6ZSYmcSgpO2Z1bmN0aW9uIEgoKXtmb3IodmFyIHQ9TC5sZW5ndGgsZT1JLmxlbmd0aCxyPTA7cjxlOysrcilPW3JdPTA7dDpmb3IodmFyIHI9MDtyPHQ7KytyKXt2YXIgbj1MW3JdLGk9bi5waWNrU2xvdHM7aWYoaSl7Zm9yKHZhciBhPTA7YTxlOysrYSlpZihPW2FdK2k8MjU1KXt6W3JdPWEsbi5zZXRQaWNrQmFzZShPW2FdKzEpLE9bYV0rPWk7Y29udGludWUgdH12YXIgbz1zKHgsTik7eltyXT1lLEkucHVzaChvKSxPLnB1c2goaSksbi5zZXRQaWNrQmFzZSgxKSxlKz0xfWVsc2UgeltyXT0tMX1mb3IoO2U+MCYmMD09PU9bZS0xXTspTy5wb3AoKSxJLnBvcCgpLmRpc3Bvc2UoKX1mdW5jdGlvbiBHKCl7aWYoVi5jb250ZXh0TG9zdClyZXR1cm4hMDt4LmlzQ29udGV4dExvc3QoKSYmKFYuY29udGV4dExvc3Q9ITAsVi5tb3VzZUxpc3RlbmVyLmVuYWJsZWQ9ITEsVi5zZWxlY3Rpb24ub2JqZWN0PW51bGwsVi5vbmNvbnRleHRsb3NzJiZWLm9uY29udGV4dGxvc3MoKSl9d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIixxKSxWLnVwZGF0ZT1mdW5jdGlvbih0KXtWLl9zdG9wcGVkfHwodD10fHx7fSxEPSEwLFA9ITApfSxWLmFkZD1mdW5jdGlvbih0KXtWLl9zdG9wcGVkfHwodC5heGVzPVMsTC5wdXNoKHQpLHoucHVzaCgtMSksRD0hMCxQPSEwLEgoKSl9LFYucmVtb3ZlPWZ1bmN0aW9uKHQpe2lmKCFWLl9zdG9wcGVkKXt2YXIgZT1MLmluZGV4T2YodCk7ZTwwfHwoTC5zcGxpY2UoZSwxKSx6LnBvcCgpLEQ9ITAsUD0hMCxIKCkpfX0sVi5kaXNwb3NlPWZ1bmN0aW9uKCl7aWYoIVYuX3N0b3BwZWQmJihWLl9zdG9wcGVkPSEwLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIscSksZS5yZW1vdmVFdmVudExpc3RlbmVyKFwid2ViZ2xjb250ZXh0bG9zdFwiLEcpLFYubW91c2VMaXN0ZW5lci5lbmFibGVkPSExLCFWLmNvbnRleHRMb3N0KSl7Uy5kaXNwb3NlKCksQy5kaXNwb3NlKCk7Zm9yKHZhciB0PTA7dDxMLmxlbmd0aDsrK3QpTFt0XS5kaXNwb3NlKCk7dy5kaXNwb3NlKCk7Zm9yKHZhciB0PTA7dDxJLmxlbmd0aDsrK3QpSVt0XS5kaXNwb3NlKCk7ay5kaXNwb3NlKCkseD1udWxsLFM9bnVsbCxDPW51bGwsTD1bXX19LFYud2hlZWxMaXN0ZW5lcj1oKGUsZnVuY3Rpb24odCxlKXtpZighMSE9PWoua2V5QmluZGluZ01vZGUmJmouZW5hYmxlV2hlZWwmJmouX29ydGhvKXt2YXIgcj10PmU/MS4xOjEvMS4xO1YuYXNwZWN0WzBdKj1yLFYuYXNwZWN0WzFdKj1yLFYuYXNwZWN0WzJdKj1yLFYucmVkcmF3KCl9fSwhMCksVi5fbW91c2VSb3RhdGluZz0hMSxWLl9wcmV2QnV0dG9ucz0wLFYuZW5hYmxlTW91c2VMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtWLm1vdXNlTGlzdGVuZXI9dShlLGZ1bmN0aW9uKHQsZSxyKXtpZighVi5fc3RvcHBlZCl7dmFyIG49SS5sZW5ndGgsaT1MLmxlbmd0aCxhPV8ub2JqZWN0O18uZGlzdGFuY2U9MS8wLF8ubW91c2VbMF09ZSxfLm1vdXNlWzFdPXIsXy5vYmplY3Q9bnVsbCxfLnNjcmVlbj1udWxsLF8uZGF0YUNvb3JkaW5hdGU9Xy5kYXRhUG9zaXRpb249bnVsbDt2YXIgbz0hMTtpZih0JiZWLl9wcmV2QnV0dG9ucylWLl9tb3VzZVJvdGF0aW5nPSEwO2Vsc2V7Vi5fbW91c2VSb3RhdGluZyYmKFA9ITApLFYuX21vdXNlUm90YXRpbmc9ITE7Zm9yKHZhciBzPTA7czxuOysrcyl7dmFyIGw9SVtzXS5xdWVyeShlLFVbMV0tci0xLFYucGlja1JhZGl1cyk7aWYobCl7aWYobC5kaXN0YW5jZT5fLmRpc3RhbmNlKWNvbnRpbnVlO2Zvcih2YXIgYz0wO2M8aTsrK2Mpe3ZhciB1PUxbY107aWYoeltjXT09PXMpe3ZhciBoPXUucGljayhsKTtoJiYoXy5idXR0b25zPXQsXy5zY3JlZW49bC5jb29yZCxfLmRpc3RhbmNlPWwuZGlzdGFuY2UsXy5vYmplY3Q9dSxfLmluZGV4PWguZGlzdGFuY2UsXy5kYXRhUG9zaXRpb249aC5wb3NpdGlvbixfLmRhdGFDb29yZGluYXRlPWguZGF0YUNvb3JkaW5hdGUsXy5kYXRhPWgsbz0hMCl9fX19fWEmJmEhPT1fLm9iamVjdCYmKGEuaGlnaGxpZ2h0JiZhLmhpZ2hsaWdodChudWxsKSxEPSEwKSxfLm9iamVjdCYmKF8ub2JqZWN0LmhpZ2hsaWdodCYmXy5vYmplY3QuaGlnaGxpZ2h0KF8uZGF0YSksRD0hMCksKG89b3x8Xy5vYmplY3QhPT1hKSYmVi5vbnNlbGVjdCYmVi5vbnNlbGVjdChfKSwxJnQmJiEoMSZWLl9wcmV2QnV0dG9ucykmJlYub25jbGljayYmVi5vbmNsaWNrKF8pLFYuX3ByZXZCdXR0b25zPXR9fSl9LGUuYWRkRXZlbnRMaXN0ZW5lcihcIndlYmdsY29udGV4dGxvc3RcIixHKTt2YXIgWT1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSxXPVtZWzBdLnNsaWNlKCksWVsxXS5zbGljZSgpXTtmdW5jdGlvbiBYKCl7aWYoIUcoKSl7cSgpO3ZhciB0PVYuY2FtZXJhLnRpY2soKTtCLnZpZXc9Vi5jYW1lcmEubWF0cml4LEQ9RHx8dCxQPVB8fHQsUy5waXhlbFJhdGlvPVYucGl4ZWxSYXRpbyxDLnBpeGVsUmF0aW89Vi5waXhlbFJhdGlvO3ZhciBlPUwubGVuZ3RoLHI9WVswXSxuPVlbMV07clswXT1yWzFdPXJbMl09MS8wLG5bMF09blsxXT1uWzJdPS0xLzA7Zm9yKHZhciBpPTA7aTxlOysraSl7dmFyIG89TFtpXTtvLnBpeGVsUmF0aW89Vi5waXhlbFJhdGlvLG8uYXhlcz1WLmF4ZXMsRD1EfHwhIW8uZGlydHksUD1QfHwhIW8uZGlydHk7dmFyIHM9by5ib3VuZHM7aWYocylmb3IodmFyIGw9c1swXSx1PXNbMV0saD0wO2g8MzsrK2gpcltoXT1NYXRoLm1pbihyW2hdLGxbaF0pLG5baF09TWF0aC5tYXgobltoXSx1W2hdKX12YXIgZD1WLmJvdW5kcztpZihWLmF1dG9Cb3VuZHMpZm9yKHZhciBoPTA7aDwzOysraCl7aWYobltoXTxyW2hdKXJbaF09LTEsbltoXT0xO2Vsc2V7cltoXT09PW5baF0mJihyW2hdLT0xLG5baF0rPTEpO3ZhciBnPS4wNSoobltoXS1yW2hdKTtyW2hdPXJbaF0tZyxuW2hdPW5baF0rZ31kWzBdW2hdPXJbaF0sZFsxXVtoXT1uW2hdfWZvcih2YXIgdj0hMSxoPTA7aDwzOysraCl2PXZ8fFdbMF1baF0hPT1kWzBdW2hdfHxXWzFdW2hdIT09ZFsxXVtoXSxXWzBdW2hdPWRbMF1baF0sV1sxXVtoXT1kWzFdW2hdO2lmKFA9UHx8dixEPUR8fHYpe2lmKHYpe2Zvcih2YXIgeT1bMCwwLDBdLGk9MDtpPDM7KytpKXlbaV09bSgoZFsxXVtpXS1kWzBdW2ldKS8xMCk7Uy5hdXRvVGlja3M/Uy51cGRhdGUoe2JvdW5kczpkLHRpY2tTcGFjaW5nOnl9KTpTLnVwZGF0ZSh7Ym91bmRzOmR9KX12YXIgYj14LmRyYXdpbmdCdWZmZXJXaWR0aCxUPXguZHJhd2luZ0J1ZmZlckhlaWdodDtOWzBdPWIsTlsxXT1ULFVbMF09MHxNYXRoLm1heChiL1YucGl4ZWxSYXRpbywxKSxVWzFdPTB8TWF0aC5tYXgoVC9WLnBpeGVsUmF0aW8sMSksQT8ocChSLC1iL1QsYi9ULC0xLDEsVi56TmVhcixWLnpGYXIpLEIuX29ydGhvPSEwKTooZihSLFYuZm92eSxiL1QsVi56TmVhcixWLnpGYXIpLEIuX29ydGhvPSExKTtmb3IodmFyIGk9MDtpPDE2OysraSlGW2ldPTA7RlsxNV09MTtmb3IodmFyIE09MCxpPTA7aTwzOysraSlNPU1hdGgubWF4KE0sZFsxXVtpXS1kWzBdW2ldKTtmb3IodmFyIGk9MDtpPDM7KytpKVYuYXV0b1NjYWxlP0ZbNSppXT1WLmFzcGVjdFtpXS8oZFsxXVtpXS1kWzBdW2ldKTpGWzUqaV09MS9NLFYuYXV0b0NlbnRlciYmKEZbMTIraV09LjUqLUZbNSppXSooZFswXVtpXStkWzFdW2ldKSk7Zm9yKHZhciBpPTA7aTxlOysraSl7dmFyIG89TFtpXTtvLmF4ZXNCb3VuZHM9ZCxWLmNsaXBUb0JvdW5kcyYmKG8uY2xpcEJvdW5kcz1kKX1fLm9iamVjdCYmKFYuc25hcFRvRGF0YT9DLnBvc2l0aW9uPV8uZGF0YUNvb3JkaW5hdGU6Qy5wb3NpdGlvbj1fLmRhdGFQb3NpdGlvbixDLmJvdW5kcz1kKSxQJiYoUD0hMSxmdW5jdGlvbigpe2lmKEcoKSlyZXR1cm47eC5jb2xvck1hc2soITAsITAsITAsITApLHguZGVwdGhNYXNrKCEwKSx4LmRpc2FibGUoeC5CTEVORCkseC5lbmFibGUoeC5ERVBUSF9URVNUKTtmb3IodmFyIHQ9TC5sZW5ndGgsZT1JLmxlbmd0aCxyPTA7cjxlOysrcil7dmFyIG49SVtyXTtuLnNoYXBlPVUsbi5iZWdpbigpO2Zvcih2YXIgaT0wO2k8dDsrK2kpaWYoeltpXT09PXIpe3ZhciBhPUxbaV07YS5kcmF3UGljayYmKGEucGl4ZWxSYXRpbz0xLGEuZHJhd1BpY2soQikpfW4uZW5kKCl9fSgpKSxWLmF4ZXNQaXhlbHM9YShWLmF4ZXMsQixiLFQpLFYub25yZW5kZXImJlYub25yZW5kZXIoKSx4LmJpbmRGcmFtZWJ1ZmZlcih4LkZSQU1FQlVGRkVSLG51bGwpLHgudmlld3BvcnQoMCwwLGIsVCk7dmFyIEU9Vi5jbGVhckNvbG9yO3guY2xlYXJDb2xvcihFWzBdLEVbMV0sRVsyXSxFWzNdKSx4LmNsZWFyKHguQ09MT1JfQlVGRkVSX0JJVHx4LkRFUFRIX0JVRkZFUl9CSVQpLHguZGVwdGhNYXNrKCEwKSx4LmNvbG9yTWFzayghMCwhMCwhMCwhMCkseC5lbmFibGUoeC5ERVBUSF9URVNUKSx4LmRlcHRoRnVuYyh4LkxFUVVBTCkseC5kaXNhYmxlKHguQkxFTkQpLHguZGlzYWJsZSh4LkNVTExfRkFDRSk7dmFyIE89ITE7Uy5lbmFibGUmJihPPU98fFMuaXNUcmFuc3BhcmVudCgpLFMuZHJhdyhCKSksQy5heGVzPVMsXy5vYmplY3QmJkMuZHJhdyhCKSx4LmRpc2FibGUoeC5DVUxMX0ZBQ0UpO2Zvcih2YXIgaT0wO2k8ZTsrK2kpe3ZhciBvPUxbaV07by5heGVzPVMsby5waXhlbFJhdGlvPVYucGl4ZWxSYXRpbyxvLmlzT3BhcXVlJiZvLmlzT3BhcXVlKCkmJm8uZHJhdyhCKSxvLmlzVHJhbnNwYXJlbnQmJm8uaXNUcmFuc3BhcmVudCgpJiYoTz0hMCl9aWYoTyl7dy5zaGFwZT1OLHcuYmluZCgpLHguY2xlYXIoeC5ERVBUSF9CVUZGRVJfQklUKSx4LmNvbG9yTWFzayghMSwhMSwhMSwhMSkseC5kZXB0aE1hc2soITApLHguZGVwdGhGdW5jKHguTEVTUyksUy5lbmFibGUmJlMuaXNUcmFuc3BhcmVudCgpJiZTLmRyYXdUcmFuc3BhcmVudChCKTtmb3IodmFyIGk9MDtpPGU7KytpKXt2YXIgbz1MW2ldO28uaXNPcGFxdWUmJm8uaXNPcGFxdWUoKSYmby5kcmF3KEIpfXguZW5hYmxlKHguQkxFTkQpLHguYmxlbmRFcXVhdGlvbih4LkZVTkNfQUREKSx4LmJsZW5kRnVuYyh4Lk9ORSx4Lk9ORV9NSU5VU19TUkNfQUxQSEEpLHguY29sb3JNYXNrKCEwLCEwLCEwLCEwKSx4LmRlcHRoTWFzayghMSkseC5jbGVhckNvbG9yKDAsMCwwLDApLHguY2xlYXIoeC5DT0xPUl9CVUZGRVJfQklUKSxTLmlzVHJhbnNwYXJlbnQoKSYmUy5kcmF3VHJhbnNwYXJlbnQoQik7Zm9yKHZhciBpPTA7aTxlOysraSl7dmFyIG89TFtpXTtvLmlzVHJhbnNwYXJlbnQmJm8uaXNUcmFuc3BhcmVudCgpJiZvLmRyYXdUcmFuc3BhcmVudChCKX14LmJpbmRGcmFtZWJ1ZmZlcih4LkZSQU1FQlVGRkVSLG51bGwpLHguYmxlbmRGdW5jKHguT05FLHguT05FX01JTlVTX1NSQ19BTFBIQSkseC5kaXNhYmxlKHguREVQVEhfVEVTVCksay5iaW5kKCksdy5jb2xvclswXS5iaW5kKDApLGsudW5pZm9ybXMuYWNjdW1CdWZmZXI9MCxjKHgpLHguZGlzYWJsZSh4LkJMRU5EKX1EPSExO2Zvcih2YXIgaT0wO2k8ZTsrK2kpTFtpXS5kaXJ0eT0hMX19fXJldHVybiBWLmVuYWJsZU1vdXNlTGlzdGVuZXJzKCksZnVuY3Rpb24gdCgpe1YuX3N0b3BwZWR8fFYuY29udGV4dExvc3R8fChYKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpKX0oKSxWLnJlZHJhdz1mdW5jdGlvbigpe1YuX3N0b3BwZWR8fChEPSEwLFgoKSl9LFZ9LGNyZWF0ZUNhbWVyYTpufX0se1wiLi9jYW1lcmEuanNcIjoyODUsXCIuL2xpYi9zaGFkZXJcIjoyODYsXCJhLWJpZy10cmlhbmdsZVwiOjUwLFwiZ2wtYXhlczNkXCI6MjMwLFwiZ2wtYXhlczNkL3Byb3BlcnRpZXNcIjoyMzcsXCJnbC1mYm9cIjoyNDYsXCJnbC1tYXQ0L29ydGhvXCI6MjY1LFwiZ2wtbWF0NC9wZXJzcGVjdGl2ZVwiOjI2NixcImdsLXNlbGVjdC1zdGF0aWNcIjoyOTcsXCJnbC1zcGlrZXMzZFwiOjMwNyxcImlzLW1vYmlsZVwiOjQxMyxcIm1vdXNlLWNoYW5nZVwiOjQyOCxcIm1vdXNlLXdoZWVsXCI6NDMxfV0sMjg4OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcImdsc2xpZnlcIik7ci5wb2ludFZlcnRleD1uKFtcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XFxuXFxudW5pZm9ybSBtYXQzIG1hdHJpeDtcXG51bmlmb3JtIGZsb2F0IHBvaW50U2l6ZTtcXG51bmlmb3JtIGZsb2F0IHBvaW50Q2xvdWQ7XFxuXFxuaGlnaHAgZmxvYXQgcmFuZCh2ZWMyIGNvKSB7XFxuICBoaWdocCBmbG9hdCBhID0gMTIuOTg5ODtcXG4gIGhpZ2hwIGZsb2F0IGIgPSA3OC4yMzM7XFxuICBoaWdocCBmbG9hdCBjID0gNDM3NTguNTQ1MztcXG4gIGhpZ2hwIGZsb2F0IGQgPSBkb3QoY28ueHksIHZlYzIoYSwgYikpO1xcbiAgaGlnaHAgZmxvYXQgZSA9IG1vZChkLCAzLjE0KTtcXG4gIHJldHVybiBmcmFjdChzaW4oZSkgKiBjKTtcXG59XFxuXFxudm9pZCBtYWluKCkge1xcbiAgdmVjMyBoZ1Bvc2l0aW9uID0gbWF0cml4ICogdmVjMyhwb3NpdGlvbiwgMSk7XFxuICBnbF9Qb3NpdGlvbiAgPSB2ZWM0KGhnUG9zaXRpb24ueHksIDAsIGhnUG9zaXRpb24ueik7XFxuICAgIC8vIGlmIHdlIGRvbid0IGppdHRlciB0aGUgcG9pbnQgc2l6ZSBhIGJpdCwgb3ZlcmFsbCBwb2ludCBjbG91ZFxcbiAgICAvLyBzYXR1cmF0aW9uICdqdW1wcycgb24gem9vbWluZywgd2hpY2ggaXMgZGlzdHVyYmluZyBhbmQgY29uZnVzaW5nXFxuICBnbF9Qb2ludFNpemUgPSBwb2ludFNpemUgKiAoKDE5LjUgKyByYW5kKHBvc2l0aW9uKSkgLyAyMC4wKTtcXG4gIGlmKHBvaW50Q2xvdWQgIT0gMC4wKSB7IC8vIHBvaW50Q2xvdWQgaXMgdHJ1dGh5XFxuICAgIC8vIGdldCB0aGUgc2FtZSBzcXVhcmUgc3VyZmFjZSBhcyBjaXJjbGUgd291bGQgYmVcXG4gICAgZ2xfUG9pbnRTaXplICo9IDAuODg2O1xcbiAgfVxcbn1cIl0pLHIucG9pbnRGcmFnbWVudD1uKFtcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxudW5pZm9ybSB2ZWM0IGNvbG9yLCBib3JkZXJDb2xvcjtcXG51bmlmb3JtIGZsb2F0IGNlbnRlckZyYWN0aW9uO1xcbnVuaWZvcm0gZmxvYXQgcG9pbnRDbG91ZDtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBmbG9hdCByYWRpdXM7XFxuICB2ZWM0IGJhc2VDb2xvcjtcXG4gIGlmKHBvaW50Q2xvdWQgIT0gMC4wKSB7IC8vIHBvaW50Q2xvdWQgaXMgdHJ1dGh5XFxuICAgIGlmKGNlbnRlckZyYWN0aW9uID09IDEuMCkge1xcbiAgICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIGdsX0ZyYWdDb2xvciA9IG1peChib3JkZXJDb2xvciwgY29sb3IsIGNlbnRlckZyYWN0aW9uKTtcXG4gICAgfVxcbiAgfSBlbHNlIHtcXG4gICAgcmFkaXVzID0gbGVuZ3RoKDIuMCAqIGdsX1BvaW50Q29vcmQueHkgLSAxLjApO1xcbiAgICBpZihyYWRpdXMgPiAxLjApIHtcXG4gICAgICBkaXNjYXJkO1xcbiAgICB9XFxuICAgIGJhc2VDb2xvciA9IG1peChib3JkZXJDb2xvciwgY29sb3IsIHN0ZXAocmFkaXVzLCBjZW50ZXJGcmFjdGlvbikpO1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGJhc2VDb2xvci5yZ2IgKiBiYXNlQ29sb3IuYSwgYmFzZUNvbG9yLmEpO1xcbiAgfVxcbn1cXG5cIl0pLHIucGlja1ZlcnRleD1uKFtcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzQgcGlja0lkO1xcblxcbnVuaWZvcm0gbWF0MyBtYXRyaXg7XFxudW5pZm9ybSBmbG9hdCBwb2ludFNpemU7XFxudW5pZm9ybSB2ZWM0IHBpY2tPZmZzZXQ7XFxuXFxudmFyeWluZyB2ZWM0IGZyYWdJZDtcXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWMzIGhnUG9zaXRpb24gPSBtYXRyaXggKiB2ZWMzKHBvc2l0aW9uLCAxKTtcXG4gIGdsX1Bvc2l0aW9uICA9IHZlYzQoaGdQb3NpdGlvbi54eSwgMCwgaGdQb3NpdGlvbi56KTtcXG4gIGdsX1BvaW50U2l6ZSA9IHBvaW50U2l6ZTtcXG5cXG4gIHZlYzQgaWQgPSBwaWNrSWQgKyBwaWNrT2Zmc2V0O1xcbiAgaWQueSArPSBmbG9vcihpZC54IC8gMjU2LjApO1xcbiAgaWQueCAtPSBmbG9vcihpZC54IC8gMjU2LjApICogMjU2LjA7XFxuXFxuICBpZC56ICs9IGZsb29yKGlkLnkgLyAyNTYuMCk7XFxuICBpZC55IC09IGZsb29yKGlkLnkgLyAyNTYuMCkgKiAyNTYuMDtcXG5cXG4gIGlkLncgKz0gZmxvb3IoaWQueiAvIDI1Ni4wKTtcXG4gIGlkLnogLT0gZmxvb3IoaWQueiAvIDI1Ni4wKSAqIDI1Ni4wO1xcblxcbiAgZnJhZ0lkID0gaWQ7XFxufVxcblwiXSksci5waWNrRnJhZ21lbnQ9bihbXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgZmxvYXQgcmFkaXVzID0gbGVuZ3RoKDIuMCAqIGdsX1BvaW50Q29vcmQueHkgLSAxLjApO1xcbiAgaWYocmFkaXVzID4gMS4wKSB7XFxuICAgIGRpc2NhcmQ7XFxuICB9XFxuICBnbF9GcmFnQ29sb3IgPSBmcmFnSWQgLyAyNTUuMDtcXG59XFxuXCJdKX0se2dsc2xpZnk6NDAyfV0sMjg5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsLXNoYWRlclwiKSxpPXQoXCJnbC1idWZmZXJcIiksYT10KFwidHlwZWRhcnJheS1wb29sXCIpLG89dChcIi4vbGliL3NoYWRlclwiKTtmdW5jdGlvbiBzKHQsZSxyLG4saSl7dGhpcy5wbG90PXQsdGhpcy5vZmZzZXRCdWZmZXI9ZSx0aGlzLnBpY2tCdWZmZXI9cix0aGlzLnNoYWRlcj1uLHRoaXMucGlja1NoYWRlcj1pLHRoaXMuc2l6ZU1pbj0uNSx0aGlzLnNpemVNaW5DYXA9Mix0aGlzLnNpemVNYXg9MjAsdGhpcy5hcmVhUmF0aW89MSx0aGlzLnBvaW50Q291bnQ9MCx0aGlzLmNvbG9yPVsxLDAsMCwxXSx0aGlzLmJvcmRlckNvbG9yPVswLDAsMCwxXSx0aGlzLmJsZW5kPSExLHRoaXMucGlja09mZnNldD0wLHRoaXMucG9pbnRzPW51bGx9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbCxhPWkociksbD1pKHIpLGM9bihyLG8ucG9pbnRWZXJ0ZXgsby5wb2ludEZyYWdtZW50KSx1PW4ocixvLnBpY2tWZXJ0ZXgsby5waWNrRnJhZ21lbnQpLGg9bmV3IHModCxhLGwsYyx1KTtyZXR1cm4gaC51cGRhdGUoZSksdC5hZGRPYmplY3QoaCksaH07dmFyIGwsYyx1PXMucHJvdG90eXBlO3UuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMub2Zmc2V0QnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tCdWZmZXIuZGlzcG9zZSgpLHRoaXMucGxvdC5yZW1vdmVPYmplY3QodGhpcyl9LHUudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlO2Z1bmN0aW9uIHIoZSxyKXtyZXR1cm4gZSBpbiB0P3RbZV06cn10PXR8fHt9LHRoaXMuc2l6ZU1pbj1yKFwic2l6ZU1pblwiLC41KSx0aGlzLnNpemVNYXg9cihcInNpemVNYXhcIiwyMCksdGhpcy5jb2xvcj1yKFwiY29sb3JcIixbMSwwLDAsMV0pLnNsaWNlKCksdGhpcy5hcmVhUmF0aW89cihcImFyZWFSYXRpb1wiLDEpLHRoaXMuYm9yZGVyQ29sb3I9cihcImJvcmRlckNvbG9yXCIsWzAsMCwwLDFdKS5zbGljZSgpLHRoaXMuYmxlbmQ9cihcImJsZW5kXCIsITEpO3ZhciBuPXQucG9zaXRpb25zLmxlbmd0aD4+PjEsaT10LnBvc2l0aW9ucyBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSxvPXQuaWRUb0luZGV4IGluc3RhbmNlb2YgSW50MzJBcnJheSYmdC5pZFRvSW5kZXgubGVuZ3RoPj1uLHM9dC5wb3NpdGlvbnMsbD1pP3M6YS5tYWxsb2NGbG9hdDMyKHMubGVuZ3RoKSxjPW8/dC5pZFRvSW5kZXg6YS5tYWxsb2NJbnQzMihuKTtpZihpfHxsLnNldChzKSwhbylmb3IobC5zZXQocyksZT0wO2U8bjtlKyspY1tlXT1lO3RoaXMucG9pbnRzPXMsdGhpcy5vZmZzZXRCdWZmZXIudXBkYXRlKGwpLHRoaXMucGlja0J1ZmZlci51cGRhdGUoYyksaXx8YS5mcmVlKGwpLG98fGEuZnJlZShjKSx0aGlzLnBvaW50Q291bnQ9bix0aGlzLnBpY2tPZmZzZXQ9MH0sdS51bmlmaWVkRHJhdz0obD1bMSwwLDAsMCwxLDAsMCwwLDFdLGM9WzAsMCwwLDBdLGZ1bmN0aW9uKHQpe3ZhciBlPXZvaWQgMCE9PXQscj1lP3RoaXMucGlja1NoYWRlcjp0aGlzLnNoYWRlcixuPXRoaXMucGxvdC5nbCxpPXRoaXMucGxvdC5kYXRhQm94O2lmKDA9PT10aGlzLnBvaW50Q291bnQpcmV0dXJuIHQ7dmFyIGE9aVsyXS1pWzBdLG89aVszXS1pWzFdLHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuPTAsaT10Lmxlbmd0aD4+PjE7Zm9yKHI9MDtyPGk7cisrKXt2YXIgYT10WzIqcl0sbz10WzIqcisxXTthPj1lWzBdJiZhPD1lWzJdJiZvPj1lWzFdJiZvPD1lWzNdJiZuKyt9cmV0dXJuIG59KHRoaXMucG9pbnRzLGkpLHU9dGhpcy5wbG90LnBpY2tQaXhlbFJhdGlvKk1hdGgubWF4KE1hdGgubWluKHRoaXMuc2l6ZU1pbkNhcCx0aGlzLnNpemVNaW4pLE1hdGgubWluKHRoaXMuc2l6ZU1heCx0aGlzLnNpemVNYXgvTWF0aC5wb3cocywuMzMzMzMpKSk7bFswXT0yL2EsbFs0XT0yL28sbFs2XT0tMippWzBdL2EtMSxsWzddPS0yKmlbMV0vby0xLHRoaXMub2Zmc2V0QnVmZmVyLmJpbmQoKSxyLmJpbmQoKSxyLmF0dHJpYnV0ZXMucG9zaXRpb24ucG9pbnRlcigpLHIudW5pZm9ybXMubWF0cml4PWwsci51bmlmb3Jtcy5jb2xvcj10aGlzLmNvbG9yLHIudW5pZm9ybXMuYm9yZGVyQ29sb3I9dGhpcy5ib3JkZXJDb2xvcixyLnVuaWZvcm1zLnBvaW50Q2xvdWQ9dTw1LHIudW5pZm9ybXMucG9pbnRTaXplPXUsci51bmlmb3Jtcy5jZW50ZXJGcmFjdGlvbj1NYXRoLm1pbigxLE1hdGgubWF4KDAsTWF0aC5zcXJ0KDEtdGhpcy5hcmVhUmF0aW8pKSksZSYmKGNbMF09MjU1JnQsY1sxXT10Pj44JjI1NSxjWzJdPXQ+PjE2JjI1NSxjWzNdPXQ+PjI0JjI1NSx0aGlzLnBpY2tCdWZmZXIuYmluZCgpLHIuYXR0cmlidXRlcy5waWNrSWQucG9pbnRlcihuLlVOU0lHTkVEX0JZVEUpLHIudW5pZm9ybXMucGlja09mZnNldD1jLHRoaXMucGlja09mZnNldD10KTt2YXIgaD1uLmdldFBhcmFtZXRlcihuLkJMRU5EKSxmPW4uZ2V0UGFyYW1ldGVyKG4uRElUSEVSKTtyZXR1cm4gaCYmIXRoaXMuYmxlbmQmJm4uZGlzYWJsZShuLkJMRU5EKSxmJiZuLmRpc2FibGUobi5ESVRIRVIpLG4uZHJhd0FycmF5cyhuLlBPSU5UUywwLHRoaXMucG9pbnRDb3VudCksaCYmIXRoaXMuYmxlbmQmJm4uZW5hYmxlKG4uQkxFTkQpLGYmJm4uZW5hYmxlKG4uRElUSEVSKSx0K3RoaXMucG9pbnRDb3VudH0pLHUuZHJhdz11LnVuaWZpZWREcmF3LHUuZHJhd1BpY2s9dS51bmlmaWVkRHJhdyx1LnBpY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMucGlja09mZnNldCxpPXRoaXMucG9pbnRDb3VudDtpZihyPG58fHI+PW4raSlyZXR1cm4gbnVsbDt2YXIgYT1yLW4sbz10aGlzLnBvaW50cztyZXR1cm57b2JqZWN0OnRoaXMscG9pbnRJZDphLGRhdGFDb29yZDpbb1syKmFdLG9bMiphKzFdXX19fSx7XCIuL2xpYi9zaGFkZXJcIjoyODgsXCJnbC1idWZmZXJcIjoyMzgsXCJnbC1zaGFkZXJcIjoyOTgsXCJ0eXBlZGFycmF5LXBvb2xcIjo1MzB9XSwyOTA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHMsbCxjPWVbMF0sdT1lWzFdLGg9ZVsyXSxmPWVbM10scD1yWzBdLGQ9clsxXSxnPXJbMl0sdj1yWzNdOyhhPWMqcCt1KmQraCpnK2Yqdik8MCYmKGE9LWEscD0tcCxkPS1kLGc9LWcsdj0tdik7MS1hPjFlLTY/KGk9TWF0aC5hY29zKGEpLG89TWF0aC5zaW4oaSkscz1NYXRoLnNpbigoMS1uKSppKS9vLGw9TWF0aC5zaW4obippKS9vKToocz0xLW4sbD1uKTtyZXR1cm4gdFswXT1zKmMrbCpwLHRbMV09cyp1K2wqZCx0WzJdPXMqaCtsKmcsdFszXT1zKmYrbCp2LHR9fSx7fV0sMjkxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0fHwwPT09dD90LnRvU3RyaW5nKCk6XCJcIn19LHt9XSwyOTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwidmVjdG9yaXplLXRleHRcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1pW2VdO2F8fChhPWlbZV09e30pO2lmKHQgaW4gYSlyZXR1cm4gYVt0XTt2YXIgbz17dGV4dEFsaWduOlwiY2VudGVyXCIsdGV4dEJhc2VsaW5lOlwibWlkZGxlXCIsbGluZUhlaWdodDoxLGZvbnQ6ZSxsaW5lU3BhY2luZzoxLjI1LHN0eWxldGFnczp7YnJlYWtsaW5lczohMCxib2xkczohMCxpdGFsaWNzOiEwLHN1YnNjcmlwdHM6ITAsc3VwZXJzY3JpcHRzOiEwfSx0cmlhbmdsZXM6ITB9LHM9bih0LG8pO28udHJpYW5nbGVzPSExO3ZhciBsLGMsdT1uKHQsbyk7aWYociYmMSE9PXIpe2ZvcihsPTA7bDxzLnBvc2l0aW9ucy5sZW5ndGg7KytsKWZvcihjPTA7YzxzLnBvc2l0aW9uc1tsXS5sZW5ndGg7KytjKXMucG9zaXRpb25zW2xdW2NdLz1yO2ZvcihsPTA7bDx1LnBvc2l0aW9ucy5sZW5ndGg7KytsKWZvcihjPTA7Yzx1LnBvc2l0aW9uc1tsXS5sZW5ndGg7KytjKXUucG9zaXRpb25zW2xdW2NdLz1yfXZhciBoPVtbMS8wLDEvMF0sWy0xLzAsLTEvMF1dLGY9dS5wb3NpdGlvbnMubGVuZ3RoO2ZvcihsPTA7bDxmOysrbCl7dmFyIHA9dS5wb3NpdGlvbnNbbF07Zm9yKGM9MDtjPDI7KytjKWhbMF1bY109TWF0aC5taW4oaFswXVtjXSxwW2NdKSxoWzFdW2NdPU1hdGgubWF4KGhbMV1bY10scFtjXSl9cmV0dXJuIGFbdF09W3MsdSxoXX07dmFyIGk9e319LHtcInZlY3Rvcml6ZS10ZXh0XCI6NTM1fV0sMjkzOltmdW5jdGlvbih0LGUscil7dmFyIG49dChcImdsLXNoYWRlclwiKSxpPXQoXCJnbHNsaWZ5XCIpLGE9aShbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcXG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xcbn1cXG5cXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcXG5hdHRyaWJ1dGUgdmVjMiBnbHlwaDtcXG5hdHRyaWJ1dGUgdmVjNCBpZDtcXG5cXG51bmlmb3JtIHZlYzQgaGlnaGxpZ2h0SWQ7XFxudW5pZm9ybSBmbG9hdCBoaWdobGlnaHRTY2FsZTtcXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XFxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XFxuXFxudmFyeWluZyB2ZWM0IGludGVycENvbG9yO1xcbnZhcnlpbmcgdmVjNCBwaWNrSWQ7XFxudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHBvc2l0aW9uKSkge1xcblxcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XFxuICB9IGVsc2Uge1xcbiAgICBmbG9hdCBzY2FsZSA9IDEuMDtcXG4gICAgaWYoZGlzdGFuY2UoaGlnaGxpZ2h0SWQsIGlkKSA8IDAuMDAwMSkge1xcbiAgICAgIHNjYWxlID0gaGlnaGxpZ2h0U2NhbGU7XFxuICAgIH1cXG5cXG4gICAgdmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxKTtcXG4gICAgdmVjNCB2aWV3UG9zaXRpb24gPSB2aWV3ICogd29ybGRQb3NpdGlvbjtcXG4gICAgdmlld1Bvc2l0aW9uID0gdmlld1Bvc2l0aW9uIC8gdmlld1Bvc2l0aW9uLnc7XFxuICAgIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqICh2aWV3UG9zaXRpb24gKyBzY2FsZSAqIHZlYzQoZ2x5cGgueCwgLWdseXBoLnksIDAsIDApKTtcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XFxuICAgIGludGVycENvbG9yID0gY29sb3I7XFxuICAgIHBpY2tJZCA9IGlkO1xcbiAgICBkYXRhQ29vcmRpbmF0ZSA9IHBvc2l0aW9uO1xcbiAgfVxcbn1cIl0pLG89aShbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcXG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xcbn1cXG5cXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcXG5hdHRyaWJ1dGUgdmVjMiBnbHlwaDtcXG5hdHRyaWJ1dGUgdmVjNCBpZDtcXG5cXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XFxudW5pZm9ybSB2ZWMyIHNjcmVlblNpemU7XFxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XFxudW5pZm9ybSBmbG9hdCBoaWdobGlnaHRTY2FsZSwgcGl4ZWxSYXRpbztcXG51bmlmb3JtIHZlYzQgaGlnaGxpZ2h0SWQ7XFxuXFxudmFyeWluZyB2ZWM0IGludGVycENvbG9yO1xcbnZhcnlpbmcgdmVjNCBwaWNrSWQ7XFxudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHBvc2l0aW9uKSkge1xcblxcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XFxuICB9IGVsc2Uge1xcbiAgICBmbG9hdCBzY2FsZSA9IHBpeGVsUmF0aW87XFxuICAgIGlmKGRpc3RhbmNlKGhpZ2hsaWdodElkLmJnciwgaWQuYmdyKSA8IDAuMDAxKSB7XFxuICAgICAgc2NhbGUgKj0gaGlnaGxpZ2h0U2NhbGU7XFxuICAgIH1cXG5cXG4gICAgdmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xcbiAgICB2ZWM0IHZpZXdQb3NpdGlvbiA9IHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xcbiAgICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3UG9zaXRpb247XFxuICAgIGNsaXBQb3NpdGlvbiAvPSBjbGlwUG9zaXRpb24udztcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb24gKyB2ZWM0KHNjcmVlblNpemUgKiBzY2FsZSAqIHZlYzIoZ2x5cGgueCwgLWdseXBoLnkpLCAwLjAsIDAuMCk7XFxuICAgIGludGVycENvbG9yID0gY29sb3I7XFxuICAgIHBpY2tJZCA9IGlkO1xcbiAgICBkYXRhQ29vcmRpbmF0ZSA9IHBvc2l0aW9uO1xcbiAgfVxcbn1cIl0pLHM9aShbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcXG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xcbn1cXG5cXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcXG5hdHRyaWJ1dGUgdmVjMiBnbHlwaDtcXG5hdHRyaWJ1dGUgdmVjNCBpZDtcXG5cXG51bmlmb3JtIGZsb2F0IGhpZ2hsaWdodFNjYWxlO1xcbnVuaWZvcm0gdmVjNCBoaWdobGlnaHRJZDtcXG51bmlmb3JtIHZlYzMgYXhlc1syXTtcXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XFxudW5pZm9ybSB2ZWMyIHNjcmVlblNpemU7XFxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XFxudW5pZm9ybSBmbG9hdCBzY2FsZSwgcGl4ZWxSYXRpbztcXG5cXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XFxudmFyeWluZyB2ZWM0IHBpY2tJZDtcXG52YXJ5aW5nIHZlYzMgZGF0YUNvb3JkaW5hdGU7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgcG9zaXRpb24pKSB7XFxuXFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLDAsMCwwKTtcXG4gIH0gZWxzZSB7XFxuICAgIGZsb2F0IGxzY2FsZSA9IHBpeGVsUmF0aW8gKiBzY2FsZTtcXG4gICAgaWYoZGlzdGFuY2UoaGlnaGxpZ2h0SWQsIGlkKSA8IDAuMDAwMSkge1xcbiAgICAgIGxzY2FsZSAqPSBoaWdobGlnaHRTY2FsZTtcXG4gICAgfVxcblxcbiAgICB2ZWM0IGNsaXBDZW50ZXIgICA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxKTtcXG4gICAgdmVjMyBkYXRhUG9zaXRpb24gPSBwb3NpdGlvbiArIDAuNSpsc2NhbGUqKGF4ZXNbMF0gKiBnbHlwaC54ICsgYXhlc1sxXSAqIGdseXBoLnkpICogY2xpcENlbnRlci53ICogc2NyZWVuU2l6ZS55O1xcbiAgICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KGRhdGFQb3NpdGlvbiwgMSk7XFxuXFxuICAgIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uO1xcbiAgICBpbnRlcnBDb2xvciA9IGNvbG9yO1xcbiAgICBwaWNrSWQgPSBpZDtcXG4gICAgZGF0YUNvb3JkaW5hdGUgPSBkYXRhUG9zaXRpb247XFxuICB9XFxufVxcblwiXSksbD1pKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XFxuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XFxufVxcblxcbnVuaWZvcm0gdmVjMyBmcmFnQ2xpcEJvdW5kc1syXTtcXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxuXFxudmFyeWluZyB2ZWM0IGludGVycENvbG9yO1xcbnZhcnlpbmcgdmVjNCBwaWNrSWQ7XFxudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmIChcXG4gICAgb3V0T2ZSYW5nZShmcmFnQ2xpcEJvdW5kc1swXSwgZnJhZ0NsaXBCb3VuZHNbMV0sIGRhdGFDb29yZGluYXRlKSB8fFxcbiAgICBpbnRlcnBDb2xvci5hICogb3BhY2l0eSA9PSAwLlxcbiAgKSBkaXNjYXJkO1xcbiAgZ2xfRnJhZ0NvbG9yID0gaW50ZXJwQ29sb3IgKiBvcGFjaXR5O1xcbn1cXG5cIl0pLGM9aShbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcXG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xcbn1cXG5cXG51bmlmb3JtIHZlYzMgZnJhZ0NsaXBCb3VuZHNbMl07XFxudW5pZm9ybSBmbG9hdCBwaWNrR3JvdXA7XFxuXFxudmFyeWluZyB2ZWM0IHBpY2tJZDtcXG52YXJ5aW5nIHZlYzMgZGF0YUNvb3JkaW5hdGU7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgaWYgKG91dE9mUmFuZ2UoZnJhZ0NsaXBCb3VuZHNbMF0sIGZyYWdDbGlwQm91bmRzWzFdLCBkYXRhQ29vcmRpbmF0ZSkpIGRpc2NhcmQ7XFxuXFxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tHcm91cCwgcGlja0lkLmJncik7XFxufVwiXSksdT1be25hbWU6XCJwb3NpdGlvblwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwiY29sb3JcIix0eXBlOlwidmVjNFwifSx7bmFtZTpcImdseXBoXCIsdHlwZTpcInZlYzJcIn0se25hbWU6XCJpZFwiLHR5cGU6XCJ2ZWM0XCJ9XSxoPXt2ZXJ0ZXg6YSxmcmFnbWVudDpsLGF0dHJpYnV0ZXM6dX0sZj17dmVydGV4Om8sZnJhZ21lbnQ6bCxhdHRyaWJ1dGVzOnV9LHA9e3ZlcnRleDpzLGZyYWdtZW50OmwsYXR0cmlidXRlczp1fSxkPXt2ZXJ0ZXg6YSxmcmFnbWVudDpjLGF0dHJpYnV0ZXM6dX0sZz17dmVydGV4Om8sZnJhZ21lbnQ6YyxhdHRyaWJ1dGVzOnV9LHY9e3ZlcnRleDpzLGZyYWdtZW50OmMsYXR0cmlidXRlczp1fTtmdW5jdGlvbiBtKHQsZSl7dmFyIHI9bih0LGUpLGk9ci5hdHRyaWJ1dGVzO3JldHVybiBpLnBvc2l0aW9uLmxvY2F0aW9uPTAsaS5jb2xvci5sb2NhdGlvbj0xLGkuZ2x5cGgubG9jYXRpb249MixpLmlkLmxvY2F0aW9uPTMscn1yLmNyZWF0ZVBlcnNwZWN0aXZlPWZ1bmN0aW9uKHQpe3JldHVybiBtKHQsaCl9LHIuY3JlYXRlT3J0aG89ZnVuY3Rpb24odCl7cmV0dXJuIG0odCxmKX0sci5jcmVhdGVQcm9qZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBtKHQscCl9LHIuY3JlYXRlUGlja1BlcnNwZWN0aXZlPWZ1bmN0aW9uKHQpe3JldHVybiBtKHQsZCl9LHIuY3JlYXRlUGlja09ydGhvPWZ1bmN0aW9uKHQpe3JldHVybiBtKHQsZyl9LHIuY3JlYXRlUGlja1Byb2plY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIG0odCx2KX19LHtcImdsLXNoYWRlclwiOjI5OCxnbHNsaWZ5OjQwMn1dLDI5NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJpcy1zdHJpbmctYmxhbmtcIiksaT10KFwiZ2wtYnVmZmVyXCIpLGE9dChcImdsLXZhb1wiKSxvPXQoXCJ0eXBlZGFycmF5LXBvb2xcIikscz10KFwiZ2wtbWF0NC9tdWx0aXBseVwiKSxsPXQoXCIuL2xpYi9zaGFkZXJzXCIpLGM9dChcIi4vbGliL2dseXBoc1wiKSx1PXQoXCIuL2xpYi9nZXQtc2ltcGxlLXN0cmluZ1wiKSxoPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiBmKHQsZSl7dmFyIHI9dFswXSxuPXRbMV0saT10WzJdLGE9dFszXTtyZXR1cm4gdFswXT1lWzBdKnIrZVs0XSpuK2VbOF0qaStlWzEyXSphLHRbMV09ZVsxXSpyK2VbNV0qbitlWzldKmkrZVsxM10qYSx0WzJdPWVbMl0qcitlWzZdKm4rZVsxMF0qaStlWzE0XSphLHRbM109ZVszXSpyK2VbN10qbitlWzExXSppK2VbMTVdKmEsdH1mdW5jdGlvbiBwKHQsZSxyLG4pe3JldHVybiBmKG4sbiksZihuLG4pLGYobixuKX1mdW5jdGlvbiBkKHQsZSl7dGhpcy5pbmRleD10LHRoaXMuZGF0YUNvb3JkaW5hdGU9dGhpcy5wb3NpdGlvbj1lfWZ1bmN0aW9uIGcodCl7cmV0dXJuITA9PT10PzE6dD4xPzE6dH1mdW5jdGlvbiB2KHQsZSxyLG4saSxhLG8scyxsLGMsdSxoKXt0aGlzLmdsPXQsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5zaGFkZXI9ZSx0aGlzLm9ydGhvU2hhZGVyPXIsdGhpcy5wcm9qZWN0U2hhZGVyPW4sdGhpcy5wb2ludEJ1ZmZlcj1pLHRoaXMuY29sb3JCdWZmZXI9YSx0aGlzLmdseXBoQnVmZmVyPW8sdGhpcy5pZEJ1ZmZlcj1zLHRoaXMudmFvPWwsdGhpcy52ZXJ0ZXhDb3VudD0wLHRoaXMubGluZVZlcnRleENvdW50PTAsdGhpcy5vcGFjaXR5PTEsdGhpcy5oYXNBbHBoYT0hMSx0aGlzLmxpbmVXaWR0aD0wLHRoaXMucHJvamVjdFNjYWxlPVsyLzMsMi8zLDIvM10sdGhpcy5wcm9qZWN0T3BhY2l0eT1bMSwxLDFdLHRoaXMucHJvamVjdEhhc0FscGhhPSExLHRoaXMucGlja0lkPTAsdGhpcy5waWNrUGVyc3BlY3RpdmVTaGFkZXI9Yyx0aGlzLnBpY2tPcnRob1NoYWRlcj11LHRoaXMucGlja1Byb2plY3RTaGFkZXI9aCx0aGlzLnBvaW50cz1bXSx0aGlzLl9zZWxlY3RSZXN1bHQ9bmV3IGQoMCxbMCwwLDBdKSx0aGlzLnVzZU9ydGhvPSEwLHRoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuYXhlc1Byb2plY3Q9WyEwLCEwLCEwXSx0aGlzLmF4ZXNCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5oaWdobGlnaHRJZD1bMSwxLDEsMV0sdGhpcy5oaWdobGlnaHRTY2FsZT0yLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmRpcnR5PSEwfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bC5jcmVhdGVQZXJzcGVjdGl2ZShlKSxuPWwuY3JlYXRlT3J0aG8oZSksbz1sLmNyZWF0ZVByb2plY3QoZSkscz1sLmNyZWF0ZVBpY2tQZXJzcGVjdGl2ZShlKSxjPWwuY3JlYXRlUGlja09ydGhvKGUpLHU9bC5jcmVhdGVQaWNrUHJvamVjdChlKSxoPWkoZSksZj1pKGUpLHA9aShlKSxkPWkoZSksZz1hKGUsW3tidWZmZXI6aCxzaXplOjMsdHlwZTplLkZMT0FUfSx7YnVmZmVyOmYsc2l6ZTo0LHR5cGU6ZS5GTE9BVH0se2J1ZmZlcjpwLHNpemU6Mix0eXBlOmUuRkxPQVR9LHtidWZmZXI6ZCxzaXplOjQsdHlwZTplLlVOU0lHTkVEX0JZVEUsbm9ybWFsaXplZDohMH1dKSxtPW5ldyB2KGUscixuLG8saCxmLHAsZCxnLHMsYyx1KTtyZXR1cm4gbS51cGRhdGUodCksbX07dmFyIG09di5wcm90b3R5cGU7bS5waWNrU2xvdHM9MSxtLnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LG0uaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe2lmKHRoaXMuaGFzQWxwaGEpcmV0dXJuITA7Zm9yKHZhciB0PTA7dDwzOysrdClpZih0aGlzLmF4ZXNQcm9qZWN0W3RdJiZ0aGlzLnByb2plY3RIYXNBbHBoYSlyZXR1cm4hMDtyZXR1cm4hMX0sbS5pc09wYXF1ZT1mdW5jdGlvbigpe2lmKCF0aGlzLmhhc0FscGhhKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8MzsrK3QpaWYodGhpcy5heGVzUHJvamVjdFt0XSYmIXRoaXMucHJvamVjdEhhc0FscGhhKXJldHVybiEwO3JldHVybiExfTt2YXIgeT1bMCwwXSx4PVswLDAsMF0sYj1bMCwwLDBdLF89WzAsMCwwLDFdLHc9WzAsMCwwLDFdLGs9aC5zbGljZSgpLEE9WzAsMCwwXSxUPVtbMCwwLDBdLFswLDAsMF1dO2Z1bmN0aW9uIE0odCl7cmV0dXJuIHRbMF09dFsxXT10WzJdPTAsdH1mdW5jdGlvbiBTKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109MSx0fWZ1bmN0aW9uIEUodCxlLHIsbil7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbcl09bix0fWZ1bmN0aW9uIEModCxlLHIsbil7dmFyIGksYT1lLmF4ZXNQcm9qZWN0LG89ZS5nbCxsPXQudW5pZm9ybXMsYz1yLm1vZGVsfHxoLHU9ci52aWV3fHxoLGY9ci5wcm9qZWN0aW9ufHxoLGQ9ZS5heGVzQm91bmRzLGc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVQscj0wO3I8MjsrK3IpZm9yKHZhciBuPTA7bjwzOysrbillW3JdW25dPU1hdGgubWF4KE1hdGgubWluKHRbcl1bbl0sMWU4KSwtMWU4KTtyZXR1cm4gZX0oZS5jbGlwQm91bmRzKTtpPWUuYXhlcyYmZS5heGVzLmxhc3RDdWJlUHJvcHM/ZS5heGVzLmxhc3RDdWJlUHJvcHMuYXhpczpbMSwxLDFdLHlbMF09Mi9vLmRyYXdpbmdCdWZmZXJXaWR0aCx5WzFdPTIvby5kcmF3aW5nQnVmZmVySGVpZ2h0LHQuYmluZCgpLGwudmlldz11LGwucHJvamVjdGlvbj1mLGwuc2NyZWVuU2l6ZT15LGwuaGlnaGxpZ2h0SWQ9ZS5oaWdobGlnaHRJZCxsLmhpZ2hsaWdodFNjYWxlPWUuaGlnaGxpZ2h0U2NhbGUsbC5jbGlwQm91bmRzPWcsbC5waWNrR3JvdXA9ZS5waWNrSWQvMjU1LGwucGl4ZWxSYXRpbz1uO2Zvcih2YXIgdj0wO3Y8MzsrK3YpaWYoYVt2XSl7bC5zY2FsZT1lLnByb2plY3RTY2FsZVt2XSxsLm9wYWNpdHk9ZS5wcm9qZWN0T3BhY2l0eVt2XTtmb3IodmFyIG09ayxDPTA7QzwxNjsrK0MpbVtDXT0wO2ZvcihDPTA7Qzw0OysrQyltWzUqQ109MTttWzUqdl09MCxpW3ZdPDA/bVsxMit2XT1kWzBdW3ZdOm1bMTIrdl09ZFsxXVt2XSxzKG0sYyxtKSxsLm1vZGVsPW07dmFyIEw9KHYrMSklMyx6PSh2KzIpJTMsTz1NKHgpLEk9TShiKTtPW0xdPTEsSVt6XT0xO3ZhciBEPXAoMCwwLDAsUyhfLE8pKSxQPXAoMCwwLDAsUyh3LEkpKTtpZihNYXRoLmFicyhEWzFdKT5NYXRoLmFicyhQWzFdKSl7dmFyIFI9RDtEPVAsUD1SLFI9TyxPPUksST1SO3ZhciBGPUw7TD16LHo9Rn1EWzBdPDAmJihPW0xdPS0xKSxQWzFdPjAmJihJW3pdPS0xKTt2YXIgQj0wLE49MDtmb3IoQz0wO0M8NDsrK0MpQis9TWF0aC5wb3coY1s0KkwrQ10sMiksTis9TWF0aC5wb3coY1s0KnorQ10sMik7T1tMXS89TWF0aC5zcXJ0KEIpLElbel0vPU1hdGguc3FydChOKSxsLmF4ZXNbMF09TyxsLmF4ZXNbMV09SSxsLmZyYWdDbGlwQm91bmRzWzBdPUUoQSxnWzBdLHYsLTFlOCksbC5mcmFnQ2xpcEJvdW5kc1sxXT1FKEEsZ1sxXSx2LDFlOCksZS52YW8uYmluZCgpLGUudmFvLmRyYXcoby5UUklBTkdMRVMsZS52ZXJ0ZXhDb3VudCksZS5saW5lV2lkdGg+MCYmKG8ubGluZVdpZHRoKGUubGluZVdpZHRoKm4pLGUudmFvLmRyYXcoby5MSU5FUyxlLmxpbmVWZXJ0ZXhDb3VudCxlLnZlcnRleENvdW50KSksZS52YW8udW5iaW5kKCl9fXZhciBMPVtbLTFlOCwtMWU4LC0xZThdLFsxZTgsMWU4LDFlOF1dO2Z1bmN0aW9uIHoodCxlLHIsbixpLGEsbyl7dmFyIHM9ci5nbDtpZigoYT09PXIucHJvamVjdEhhc0FscGhhfHxvKSYmQyhlLHIsbixpKSxhPT09ci5oYXNBbHBoYXx8byl7dC5iaW5kKCk7dmFyIGw9dC51bmlmb3JtcztsLm1vZGVsPW4ubW9kZWx8fGgsbC52aWV3PW4udmlld3x8aCxsLnByb2plY3Rpb249bi5wcm9qZWN0aW9ufHxoLHlbMF09Mi9zLmRyYXdpbmdCdWZmZXJXaWR0aCx5WzFdPTIvcy5kcmF3aW5nQnVmZmVySGVpZ2h0LGwuc2NyZWVuU2l6ZT15LGwuaGlnaGxpZ2h0SWQ9ci5oaWdobGlnaHRJZCxsLmhpZ2hsaWdodFNjYWxlPXIuaGlnaGxpZ2h0U2NhbGUsbC5mcmFnQ2xpcEJvdW5kcz1MLGwuY2xpcEJvdW5kcz1yLmF4ZXMuYm91bmRzLGwub3BhY2l0eT1yLm9wYWNpdHksbC5waWNrR3JvdXA9ci5waWNrSWQvMjU1LGwucGl4ZWxSYXRpbz1pLHIudmFvLmJpbmQoKSxyLnZhby5kcmF3KHMuVFJJQU5HTEVTLHIudmVydGV4Q291bnQpLHIubGluZVdpZHRoPjAmJihzLmxpbmVXaWR0aChyLmxpbmVXaWR0aCppKSxyLnZhby5kcmF3KHMuTElORVMsci5saW5lVmVydGV4Q291bnQsci52ZXJ0ZXhDb3VudCkpLHIudmFvLnVuYmluZCgpfX1mdW5jdGlvbiBPKHQsZSxyLGkpe3ZhciBhO2E9QXJyYXkuaXNBcnJheSh0KT9lPHQubGVuZ3RoP3RbZV06dm9pZCAwOnQsYT11KGEpO3ZhciBvPSEwO24oYSkmJihhPVwiXFx1MjViY1wiLG89ITEpO3ZhciBzPWMoYSxyLGkpO3JldHVybnttZXNoOnNbMF0sbGluZXM6c1sxXSxib3VuZHM6c1syXSx2aXNpYmxlOm99fW0uZHJhdz1mdW5jdGlvbih0KXt6KHRoaXMudXNlT3J0aG8/dGhpcy5vcnRob1NoYWRlcjp0aGlzLnNoYWRlcix0aGlzLnByb2plY3RTaGFkZXIsdGhpcyx0LHRoaXMucGl4ZWxSYXRpbywhMSwhMSl9LG0uZHJhd1RyYW5zcGFyZW50PWZ1bmN0aW9uKHQpe3oodGhpcy51c2VPcnRobz90aGlzLm9ydGhvU2hhZGVyOnRoaXMuc2hhZGVyLHRoaXMucHJvamVjdFNoYWRlcix0aGlzLHQsdGhpcy5waXhlbFJhdGlvLCEwLCExKX0sbS5kcmF3UGljaz1mdW5jdGlvbih0KXt6KHRoaXMudXNlT3J0aG8/dGhpcy5waWNrT3J0aG9TaGFkZXI6dGhpcy5waWNrUGVyc3BlY3RpdmVTaGFkZXIsdGhpcy5waWNrUHJvamVjdFNoYWRlcix0aGlzLHQsMSwhMCwhMCl9LG0ucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7dmFyIGU9dC52YWx1ZVsyXSsodC52YWx1ZVsxXTw8OCkrKHQudmFsdWVbMF08PDE2KTtpZihlPj10aGlzLnBvaW50Q291bnR8fGU8MClyZXR1cm4gbnVsbDt2YXIgcj10aGlzLnBvaW50c1tlXSxuPXRoaXMuX3NlbGVjdFJlc3VsdDtuLmluZGV4PWU7Zm9yKHZhciBpPTA7aTwzOysraSluLnBvc2l0aW9uW2ldPW4uZGF0YUNvb3JkaW5hdGVbaV09cltpXTtyZXR1cm4gbn0sbS5oaWdobGlnaHQ9ZnVuY3Rpb24odCl7aWYodCl7dmFyIGU9dC5pbmRleCxyPTI1NSZlLG49ZT4+OCYyNTUsaT1lPj4xNiYyNTU7dGhpcy5oaWdobGlnaHRJZD1bci8yNTUsbi8yNTUsaS8yNTUsMF19ZWxzZSB0aGlzLmhpZ2hsaWdodElkPVsxLDEsMSwxXX0sbS51cGRhdGU9ZnVuY3Rpb24odCl7aWYoXCJwZXJzcGVjdGl2ZVwiaW4odD10fHx7fSkmJih0aGlzLnVzZU9ydGhvPSF0LnBlcnNwZWN0aXZlKSxcIm9ydGhvZ3JhcGhpY1wiaW4gdCYmKHRoaXMudXNlT3J0aG89ISF0Lm9ydGhvZ3JhcGhpYyksXCJsaW5lV2lkdGhcImluIHQmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCksXCJwcm9qZWN0XCJpbiB0KWlmKEFycmF5LmlzQXJyYXkodC5wcm9qZWN0KSl0aGlzLmF4ZXNQcm9qZWN0PXQucHJvamVjdDtlbHNle3ZhciBlPSEhdC5wcm9qZWN0O3RoaXMuYXhlc1Byb2plY3Q9W2UsZSxlXX1pZihcInByb2plY3RTY2FsZVwiaW4gdClpZihBcnJheS5pc0FycmF5KHQucHJvamVjdFNjYWxlKSl0aGlzLnByb2plY3RTY2FsZT10LnByb2plY3RTY2FsZS5zbGljZSgpO2Vsc2V7dmFyIHI9K3QucHJvamVjdFNjYWxlO3RoaXMucHJvamVjdFNjYWxlPVtyLHIscl19aWYodGhpcy5wcm9qZWN0SGFzQWxwaGE9ITEsXCJwcm9qZWN0T3BhY2l0eVwiaW4gdCl7aWYoQXJyYXkuaXNBcnJheSh0LnByb2plY3RPcGFjaXR5KSl0aGlzLnByb2plY3RPcGFjaXR5PXQucHJvamVjdE9wYWNpdHkuc2xpY2UoKTtlbHNle3I9K3QucHJvamVjdE9wYWNpdHk7dGhpcy5wcm9qZWN0T3BhY2l0eT1bcixyLHJdfWZvcih2YXIgbj0wO248MzsrK24pdGhpcy5wcm9qZWN0T3BhY2l0eVtuXT1nKHRoaXMucHJvamVjdE9wYWNpdHlbbl0pLHRoaXMucHJvamVjdE9wYWNpdHlbbl08MSYmKHRoaXMucHJvamVjdEhhc0FscGhhPSEwKX10aGlzLmhhc0FscGhhPSExLFwib3BhY2l0eVwiaW4gdCYmKHRoaXMub3BhY2l0eT1nKHQub3BhY2l0eSksdGhpcy5vcGFjaXR5PDEmJih0aGlzLmhhc0FscGhhPSEwKSksdGhpcy5kaXJ0eT0hMDt2YXIgaSxhLHM9dC5wb3NpdGlvbixsPXQuZm9udHx8XCJub3JtYWxcIixjPXQuYWxpZ25tZW50fHxbMCwwXTtpZigyPT09Yy5sZW5ndGgpaT1jWzBdLGE9Y1sxXTtlbHNle2k9W10sYT1bXTtmb3Iobj0wO248Yy5sZW5ndGg7KytuKWlbbl09Y1tuXVswXSxhW25dPWNbbl1bMV19dmFyIHU9WzEvMCwxLzAsMS8wXSxoPVstMS8wLC0xLzAsLTEvMF0sZj10LmdseXBoLHA9dC5jb2xvcixkPXQuc2l6ZSx2PXQuYW5nbGUsbT10LmxpbmVDb2xvcix5PS0xLHg9MCxiPTAsXz0wO2lmKHMubGVuZ3RoKXtfPXMubGVuZ3RoO3Q6Zm9yKG49MDtuPF87KytuKXtmb3IodmFyIHc9c1tuXSxrPTA7azwzOysraylpZihpc05hTih3W2tdKXx8IWlzRmluaXRlKHdba10pKWNvbnRpbnVlIHQ7dmFyIEE9KE49TyhmLG4sbCx0aGlzLnBpeGVsUmF0aW8pKS5tZXNoLFQ9Ti5saW5lcyxNPU4uYm91bmRzO3grPTMqQS5jZWxscy5sZW5ndGgsYis9MipULmVkZ2VzLmxlbmd0aH19dmFyIFM9eCtiLEU9by5tYWxsb2NGbG9hdCgzKlMpLEM9by5tYWxsb2NGbG9hdCg0KlMpLEw9by5tYWxsb2NGbG9hdCgyKlMpLHo9by5tYWxsb2NVaW50MzIoUyk7aWYoUz4wKXt2YXIgST0wLEQ9eCxQPVswLDAsMCwxXSxSPVswLDAsMCwxXSxGPUFycmF5LmlzQXJyYXkocCkmJkFycmF5LmlzQXJyYXkocFswXSksQj1BcnJheS5pc0FycmF5KG0pJiZBcnJheS5pc0FycmF5KG1bMF0pO3Q6Zm9yKG49MDtuPF87KytuKXt5Kz0xO2Zvcih3PXNbbl0saz0wO2s8MzsrK2spe2lmKGlzTmFOKHdba10pfHwhaXNGaW5pdGUod1trXSkpY29udGludWUgdDtoW2tdPU1hdGgubWF4KGhba10sd1trXSksdVtrXT1NYXRoLm1pbih1W2tdLHdba10pfUE9KE49TyhmLG4sbCx0aGlzLnBpeGVsUmF0aW8pKS5tZXNoLFQ9Ti5saW5lcyxNPU4uYm91bmRzO3ZhciBOLGo9Ti52aXNpYmxlO2lmKGopaWYoQXJyYXkuaXNBcnJheShwKSl7aWYoMz09PShWPUY/bjxwLmxlbmd0aD9wW25dOlswLDAsMCwwXTpwKS5sZW5ndGgpe2ZvcihrPTA7azwzOysraylQW2tdPVZba107UFszXT0xfWVsc2UgaWYoND09PVYubGVuZ3RoKXtmb3Ioaz0wO2s8NDsrK2spUFtrXT1WW2tdOyF0aGlzLmhhc0FscGhhJiZWWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKX19ZWxzZSBQWzBdPVBbMV09UFsyXT0wLFBbM109MTtlbHNlIFA9WzEsMSwxLDBdO2lmKGopaWYoQXJyYXkuaXNBcnJheShtKSl7dmFyIFY7aWYoMz09PShWPUI/bjxtLmxlbmd0aD9tW25dOlswLDAsMCwwXTptKS5sZW5ndGgpe2ZvcihrPTA7azwzOysraylSW2tdPVZba107UltrXT0xfWVsc2UgaWYoND09PVYubGVuZ3RoKXtmb3Ioaz0wO2s8NDsrK2spUltrXT1WW2tdOyF0aGlzLmhhc0FscGhhJiZWWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKX19ZWxzZSBSWzBdPVJbMV09UlsyXT0wLFJbM109MTtlbHNlIFI9WzEsMSwxLDBdO3ZhciBVPS41O2o/QXJyYXkuaXNBcnJheShkKT9VPW48ZC5sZW5ndGg/K2Rbbl06MTI6ZD9VPStkOnRoaXMudXNlT3J0aG8mJihVPTEyKTpVPTA7dmFyIHE9MDtBcnJheS5pc0FycmF5KHYpP3E9bjx2Lmxlbmd0aD8rdltuXTowOnYmJihxPSt2KTt2YXIgSD1NYXRoLmNvcyhxKSxHPU1hdGguc2luKHEpO2Zvcih3PXNbbl0saz0wO2s8MzsrK2spaFtrXT1NYXRoLm1heChoW2tdLHdba10pLHVba109TWF0aC5taW4odVtrXSx3W2tdKTt2YXIgWT1pLFc9YTtZPTA7QXJyYXkuaXNBcnJheShpKT9ZPW48aS5sZW5ndGg/aVtuXTowOmkmJihZPWkpO1c9MDtBcnJheS5pc0FycmF5KGEpP1c9bjxhLmxlbmd0aD9hW25dOjA6YSYmKFc9YSk7dmFyIFg9W1kqPVk+MD8xLU1bMF1bMF06WTwwPzErTVsxXVswXToxLFcqPVc+MD8xLU1bMF1bMV06VzwwPzErTVsxXVsxXToxXSxaPUEuY2VsbHN8fFtdLCQ9QS5wb3NpdGlvbnN8fFtdO2ZvcihrPTA7azxaLmxlbmd0aDsrK2spZm9yKHZhciBKPVpba10sSz0wO0s8MzsrK0spe2Zvcih2YXIgUT0wO1E8MzsrK1EpRVszKkkrUV09d1tRXTtmb3IoUT0wO1E8NDsrK1EpQ1s0KkkrUV09UFtRXTt6W0ldPXk7dmFyIHR0PSRbSltLXV07TFsyKkldPVUqKEgqdHRbMF0tRyp0dFsxXStYWzBdKSxMWzIqSSsxXT1VKihHKnR0WzBdK0gqdHRbMV0rWFsxXSksSSs9MX1mb3IoWj1ULmVkZ2VzLCQ9VC5wb3NpdGlvbnMsaz0wO2s8Wi5sZW5ndGg7KytrKWZvcihKPVpba10sSz0wO0s8MjsrK0spe2ZvcihRPTA7UTwzOysrUSlFWzMqRCtRXT13W1FdO2ZvcihRPTA7UTw0OysrUSlDWzQqRCtRXT1SW1FdO3pbRF09eTt0dD0kW0pbS11dO0xbMipEXT1VKihIKnR0WzBdLUcqdHRbMV0rWFswXSksTFsyKkQrMV09VSooRyp0dFswXStIKnR0WzFdK1hbMV0pLEQrPTF9fX10aGlzLmJvdW5kcz1bdSxoXSx0aGlzLnBvaW50cz1zLHRoaXMucG9pbnRDb3VudD1zLmxlbmd0aCx0aGlzLnZlcnRleENvdW50PXgsdGhpcy5saW5lVmVydGV4Q291bnQ9Yix0aGlzLnBvaW50QnVmZmVyLnVwZGF0ZShFKSx0aGlzLmNvbG9yQnVmZmVyLnVwZGF0ZShDKSx0aGlzLmdseXBoQnVmZmVyLnVwZGF0ZShMKSx0aGlzLmlkQnVmZmVyLnVwZGF0ZSh6KSxvLmZyZWUoRSksby5mcmVlKEMpLG8uZnJlZShMKSxvLmZyZWUoeil9LG0uZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLm9ydGhvU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tQZXJzcGVjdGl2ZVNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrT3J0aG9TaGFkZXIuZGlzcG9zZSgpLHRoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLnBvaW50QnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmNvbG9yQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmdseXBoQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmlkQnVmZmVyLmRpc3Bvc2UoKX19LHtcIi4vbGliL2dldC1zaW1wbGUtc3RyaW5nXCI6MjkxLFwiLi9saWIvZ2x5cGhzXCI6MjkyLFwiLi9saWIvc2hhZGVyc1wiOjI5MyxcImdsLWJ1ZmZlclwiOjIzOCxcImdsLW1hdDQvbXVsdGlwbHlcIjoyNjQsXCJnbC12YW9cIjozMjAsXCJpcy1zdHJpbmctYmxhbmtcIjo0MTYsXCJ0eXBlZGFycmF5LXBvb2xcIjo1MzB9XSwyOTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2xzbGlmeVwiKTtyLmJveFZlcnRleD1uKFtcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzIgdmVydGV4O1xcblxcbnVuaWZvcm0gdmVjMiBjb3JuZXJBLCBjb3JuZXJCO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChtaXgoY29ybmVyQSwgY29ybmVyQiwgdmVydGV4KSwgMCwgMSk7XFxufVxcblwiXSksci5ib3hGcmFnbWVudD1uKFtcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxudW5pZm9ybSB2ZWM0IGNvbG9yO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIl0pfSx7Z2xzbGlmeTo0MDJ9XSwyOTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2wtc2hhZGVyXCIpLGk9dChcImdsLWJ1ZmZlclwiKSxhPXQoXCIuL2xpYi9zaGFkZXJzXCIpO2Z1bmN0aW9uIG8odCxlLHIpe3RoaXMucGxvdD10LHRoaXMuYm94QnVmZmVyPWUsdGhpcy5ib3hTaGFkZXI9cix0aGlzLmVuYWJsZWQ9ITAsdGhpcy5zZWxlY3RCb3g9WzEvMCwxLzAsLTEvMCwtMS8wXSx0aGlzLmJvcmRlckNvbG9yPVswLDAsMCwxXSx0aGlzLmlubmVyRmlsbD0hMSx0aGlzLmlubmVyQ29sb3I9WzAsMCwwLC4yNV0sdGhpcy5vdXRlckZpbGw9ITAsdGhpcy5vdXRlckNvbG9yPVswLDAsMCwuNV0sdGhpcy5ib3JkZXJXaWR0aD0xMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdsLHM9aShyLFswLDAsMCwxLDEsMCwxLDFdKSxsPW4ocixhLmJveFZlcnRleCxhLmJveEZyYWdtZW50KSxjPW5ldyBvKHQscyxsKTtyZXR1cm4gYy51cGRhdGUoZSksdC5hZGRPdmVybGF5KGMpLGN9O3ZhciBzPW8ucHJvdG90eXBlO3MuZHJhdz1mdW5jdGlvbigpe2lmKHRoaXMuZW5hYmxlZCl7dmFyIHQ9dGhpcy5wbG90LGU9dGhpcy5zZWxlY3RCb3gscj10aGlzLmJvcmRlcldpZHRoLG49KHRoaXMuaW5uZXJGaWxsLHRoaXMuaW5uZXJDb2xvciksaT0odGhpcy5vdXRlckZpbGwsdGhpcy5vdXRlckNvbG9yKSxhPXRoaXMuYm9yZGVyQ29sb3Isbz10LmJveCxzPXQuc2NyZWVuQm94LGw9dC5kYXRhQm94LGM9dC52aWV3Qm94LHU9dC5waXhlbFJhdGlvLGg9KGVbMF0tbFswXSkqKGNbMl0tY1swXSkvKGxbMl0tbFswXSkrY1swXSxmPShlWzFdLWxbMV0pKihjWzNdLWNbMV0pLyhsWzNdLWxbMV0pK2NbMV0scD0oZVsyXS1sWzBdKSooY1syXS1jWzBdKS8obFsyXS1sWzBdKStjWzBdLGQ9KGVbM10tbFsxXSkqKGNbM10tY1sxXSkvKGxbM10tbFsxXSkrY1sxXTtpZihoPU1hdGgubWF4KGgsY1swXSksZj1NYXRoLm1heChmLGNbMV0pLHA9TWF0aC5taW4ocCxjWzJdKSxkPU1hdGgubWluKGQsY1szXSksIShwPGh8fGQ8Zikpe28uYmluZCgpO3ZhciBnPXNbMl0tc1swXSx2PXNbM10tc1sxXTtpZih0aGlzLm91dGVyRmlsbCYmKG8uZHJhd0JveCgwLDAsZyxmLGkpLG8uZHJhd0JveCgwLGYsaCxkLGkpLG8uZHJhd0JveCgwLGQsZyx2LGkpLG8uZHJhd0JveChwLGYsZyxkLGkpKSx0aGlzLmlubmVyRmlsbCYmby5kcmF3Qm94KGgsZixwLGQsbikscj4wKXt2YXIgbT1yKnU7by5kcmF3Qm94KGgtbSxmLW0scCttLGYrbSxhKSxvLmRyYXdCb3goaC1tLGQtbSxwK20sZCttLGEpLG8uZHJhd0JveChoLW0sZi1tLGgrbSxkK20sYSksby5kcmF3Qm94KHAtbSxmLW0scCttLGQrbSxhKX19fX0scy51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fSx0aGlzLmlubmVyRmlsbD0hIXQuaW5uZXJGaWxsLHRoaXMub3V0ZXJGaWxsPSEhdC5vdXRlckZpbGwsdGhpcy5pbm5lckNvbG9yPSh0LmlubmVyQ29sb3J8fFswLDAsMCwuNV0pLnNsaWNlKCksdGhpcy5vdXRlckNvbG9yPSh0Lm91dGVyQ29sb3J8fFswLDAsMCwuNV0pLnNsaWNlKCksdGhpcy5ib3JkZXJDb2xvcj0odC5ib3JkZXJDb2xvcnx8WzAsMCwwLDFdKS5zbGljZSgpLHRoaXMuYm9yZGVyV2lkdGg9dC5ib3JkZXJXaWR0aHx8MCx0aGlzLnNlbGVjdEJveD0odC5zZWxlY3RCb3h8fHRoaXMuc2VsZWN0Qm94KS5zbGljZSgpfSxzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmJveEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5ib3hTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGxvdC5yZW1vdmVPdmVybGF5KHRoaXMpfX0se1wiLi9saWIvc2hhZGVyc1wiOjI5NSxcImdsLWJ1ZmZlclwiOjIzOCxcImdsLXNoYWRlclwiOjI5OH1dLDI5NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW4odCxlKSxhPWkubWFsbG9jVWludDgoZVswXSplWzFdKjQpO3JldHVybiBuZXcgYyh0LHIsYSl9O3ZhciBuPXQoXCJnbC1mYm9cIiksaT10KFwidHlwZWRhcnJheS1wb29sXCIpLGE9dChcIm5kYXJyYXlcIiksbz10KFwiYml0LXR3aWRkbGVcIikubmV4dFBvdzIscz10KFwiY3dpc2UvbGliL3dyYXBwZXJcIikoe2FyZ3M6W1wiYXJyYXlcIix7b2Zmc2V0OlswLDAsMV0sYXJyYXk6MH0se29mZnNldDpbMCwwLDJdLGFycmF5OjB9LHtvZmZzZXQ6WzAsMCwzXSxhcnJheTowfSxcInNjYWxhclwiLFwic2NhbGFyXCIsXCJpbmRleFwiXSxwcmU6e2JvZHk6XCJ7dGhpc19jbG9zZXN0RDI9MWU4LHRoaXNfY2xvc2VzdFg9LTEsdGhpc19jbG9zZXN0WT0tMX1cIixhcmdzOltdLHRoaXNWYXJzOltcInRoaXNfY2xvc2VzdEQyXCIsXCJ0aGlzX2Nsb3Nlc3RYXCIsXCJ0aGlzX2Nsb3Nlc3RZXCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keTpcIntpZihfaW5saW5lXzE2X2FyZzBfPDI1NXx8X2lubGluZV8xNl9hcmcxXzwyNTV8fF9pbmxpbmVfMTZfYXJnMl88MjU1fHxfaW5saW5lXzE2X2FyZzNfPDI1NSl7dmFyIF9pbmxpbmVfMTZfbD1faW5saW5lXzE2X2FyZzRfLV9pbmxpbmVfMTZfYXJnNl9bMF0sX2lubGluZV8xNl9hPV9pbmxpbmVfMTZfYXJnNV8tX2lubGluZV8xNl9hcmc2X1sxXSxfaW5saW5lXzE2X2Y9X2lubGluZV8xNl9sKl9pbmxpbmVfMTZfbCtfaW5saW5lXzE2X2EqX2lubGluZV8xNl9hO19pbmxpbmVfMTZfZjx0aGlzX2Nsb3Nlc3REMiYmKHRoaXNfY2xvc2VzdEQyPV9pbmxpbmVfMTZfZix0aGlzX2Nsb3Nlc3RYPV9pbmxpbmVfMTZfYXJnNl9bMF0sdGhpc19jbG9zZXN0WT1faW5saW5lXzE2X2FyZzZfWzFdKX19XCIsYXJnczpbe25hbWU6XCJfaW5saW5lXzE2X2FyZzBfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfMTZfYXJnMV9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xNl9hcmcyX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzE2X2FyZzNfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfMTZfYXJnNF9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xNl9hcmc1X1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzE2X2FyZzZfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDo0fV0sdGhpc1ZhcnM6W1widGhpc19jbG9zZXN0RDJcIixcInRoaXNfY2xvc2VzdFhcIixcInRoaXNfY2xvc2VzdFlcIl0sbG9jYWxWYXJzOltcIl9pbmxpbmVfMTZfYVwiLFwiX2lubGluZV8xNl9mXCIsXCJfaW5saW5lXzE2X2xcIl19LHBvc3Q6e2JvZHk6XCJ7cmV0dXJuW3RoaXNfY2xvc2VzdFgsdGhpc19jbG9zZXN0WSx0aGlzX2Nsb3Nlc3REMl19XCIsYXJnczpbXSx0aGlzVmFyczpbXCJ0aGlzX2Nsb3Nlc3REMlwiLFwidGhpc19jbG9zZXN0WFwiLFwidGhpc19jbG9zZXN0WVwiXSxsb2NhbFZhcnM6W119LGRlYnVnOiExLGZ1bmNOYW1lOlwiY3dpc2VcIixibG9ja1NpemU6NjR9KTtmdW5jdGlvbiBsKHQsZSxyLG4saSl7dGhpcy5jb29yZD1bdCxlXSx0aGlzLmlkPXIsdGhpcy52YWx1ZT1uLHRoaXMuZGlzdGFuY2U9aX1mdW5jdGlvbiBjKHQsZSxyKXt0aGlzLmdsPXQsdGhpcy5mYm89ZSx0aGlzLmJ1ZmZlcj1yLHRoaXMuX3JlYWRUaW1lb3V0PW51bGw7dmFyIG49dGhpczt0aGlzLl9yZWFkQ2FsbGJhY2s9ZnVuY3Rpb24oKXtuLmdsJiYoZS5iaW5kKCksdC5yZWFkUGl4ZWxzKDAsMCxlLnNoYXBlWzBdLGUuc2hhcGVbMV0sdC5SR0JBLHQuVU5TSUdORURfQllURSxuLmJ1ZmZlciksbi5fcmVhZFRpbWVvdXQ9bnVsbCl9fXZhciB1PWMucHJvdG90eXBlO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LFwic2hhcGVcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2w/dGhpcy5mYm8uc2hhcGUuc2xpY2UoKTpbMCwwXX0sc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMuZ2wpe3RoaXMuZmJvLnNoYXBlPXQ7dmFyIGU9dGhpcy5mYm8uc2hhcGVbMF0scj10aGlzLmZiby5zaGFwZVsxXTtpZihyKmUqND50aGlzLmJ1ZmZlci5sZW5ndGgpe2kuZnJlZSh0aGlzLmJ1ZmZlcik7Zm9yKHZhciBuPXRoaXMuYnVmZmVyPWkubWFsbG9jVWludDgobyhyKmUqNCkpLGE9MDthPHIqZSo0OysrYSluW2FdPTI1NX1yZXR1cm4gdH19fSksdS5iZWdpbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2w7dGhpcy5zaGFwZTt0JiYodGhpcy5mYm8uYmluZCgpLHQuY2xlYXJDb2xvcigxLDEsMSwxKSx0LmNsZWFyKHQuQ09MT1JfQlVGRkVSX0JJVHx0LkRFUFRIX0JVRkZFUl9CSVQpKX0sdS5lbmQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3QmJih0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLG51bGwpLHRoaXMuX3JlYWRUaW1lb3V0fHxjbGVhclRpbWVvdXQodGhpcy5fcmVhZFRpbWVvdXQpLHRoaXMuX3JlYWRUaW1lb3V0PXNldFRpbWVvdXQodGhpcy5fcmVhZENhbGxiYWNrLDEpKX0sdS5xdWVyeT1mdW5jdGlvbih0LGUscil7aWYoIXRoaXMuZ2wpcmV0dXJuIG51bGw7dmFyIG49dGhpcy5mYm8uc2hhcGUuc2xpY2UoKTt0fD0wLGV8PTAsXCJudW1iZXJcIiE9dHlwZW9mIHImJihyPTEpO3ZhciBpPTB8TWF0aC5taW4oTWF0aC5tYXgodC1yLDApLG5bMF0pLG89MHxNYXRoLm1pbihNYXRoLm1heCh0K3IsMCksblswXSksYz0wfE1hdGgubWluKE1hdGgubWF4KGUtciwwKSxuWzFdKSx1PTB8TWF0aC5taW4oTWF0aC5tYXgoZStyLDApLG5bMV0pO2lmKG88PWl8fHU8PWMpcmV0dXJuIG51bGw7dmFyIGg9W28taSx1LWNdLGY9YSh0aGlzLmJ1ZmZlcixbaFswXSxoWzFdLDRdLFs0LDQqblswXSwxXSw0KihpK25bMF0qYykpLHA9cyhmLmhpKGhbMF0saFsxXSwxKSxyLHIpLGQ9cFswXSxnPXBbMV07cmV0dXJuIGQ8MHx8TWF0aC5wb3codGhpcy5yYWRpdXMsMik8cFsyXT9udWxsOm5ldyBsKGQraXwwLGcrY3wwLGYuZ2V0KGQsZywwKSxbZi5nZXQoZCxnLDEpLGYuZ2V0KGQsZywyKSxmLmdldChkLGcsMyldLE1hdGguc3FydChwWzJdKSl9LHUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuZ2wmJih0aGlzLmZiby5kaXNwb3NlKCksaS5mcmVlKHRoaXMuYnVmZmVyKSx0aGlzLmdsPW51bGwsdGhpcy5fcmVhZFRpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLl9yZWFkVGltZW91dCkpfX0se1wiYml0LXR3aWRkbGVcIjo4MyxcImN3aXNlL2xpYi93cmFwcGVyXCI6MTQwLFwiZ2wtZmJvXCI6MjQ2LG5kYXJyYXk6NDQzLFwidHlwZWRhcnJheS1wb29sXCI6NTMwfV0sMjk4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vbGliL2NyZWF0ZS11bmlmb3Jtc1wiKSxpPXQoXCIuL2xpYi9jcmVhdGUtYXR0cmlidXRlc1wiKSxhPXQoXCIuL2xpYi9yZWZsZWN0XCIpLG89dChcIi4vbGliL3NoYWRlci1jYWNoZVwiKSxzPXQoXCIuL2xpYi9ydW50aW1lLXJlZmxlY3RcIiksbD10KFwiLi9saWIvR0xFcnJvclwiKTtmdW5jdGlvbiBjKHQpe3RoaXMuZ2w9dCx0aGlzLmdsLmxhc3RBdHRyaWJDb3VudD0wLHRoaXMuX3ZyZWY9dGhpcy5fZnJlZj10aGlzLl9yZWxpbms9dGhpcy52ZXJ0U2hhZGVyPXRoaXMuZnJhZ1NoYWRlcj10aGlzLnByb2dyYW09dGhpcy5hdHRyaWJ1dGVzPXRoaXMudW5pZm9ybXM9dGhpcy50eXBlcz1udWxsfXZhciB1PWMucHJvdG90eXBlO2Z1bmN0aW9uIGgodCxlKXtyZXR1cm4gdC5uYW1lPGUubmFtZT8tMToxfXUuYmluZD1mdW5jdGlvbigpe3ZhciB0O3RoaXMucHJvZ3JhbXx8dGhpcy5fcmVsaW5rKCk7dmFyIGU9dGhpcy5nbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHRoaXMucHJvZ3JhbSx0aGlzLmdsLkFDVElWRV9BVFRSSUJVVEVTKSxyPXRoaXMuZ2wubGFzdEF0dHJpYkNvdW50O2lmKGU+cilmb3IodD1yO3Q8ZTt0KyspdGhpcy5nbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh0KTtlbHNlIGlmKHI+ZSlmb3IodD1lO3Q8cjt0KyspdGhpcy5nbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodCk7dGhpcy5nbC5sYXN0QXR0cmliQ291bnQ9ZSx0aGlzLmdsLnVzZVByb2dyYW0odGhpcy5wcm9ncmFtKX0sdS5kaXNwb3NlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuZ2wubGFzdEF0dHJpYkNvdW50LGU9MDtlPHQ7ZSsrKXRoaXMuZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpO3RoaXMuZ2wubGFzdEF0dHJpYkNvdW50PTAsdGhpcy5fZnJlZiYmdGhpcy5fZnJlZi5kaXNwb3NlKCksdGhpcy5fdnJlZiYmdGhpcy5fdnJlZi5kaXNwb3NlKCksdGhpcy5hdHRyaWJ1dGVzPXRoaXMudHlwZXM9dGhpcy52ZXJ0U2hhZGVyPXRoaXMuZnJhZ1NoYWRlcj10aGlzLnByb2dyYW09dGhpcy5fcmVsaW5rPXRoaXMuX2ZyZWY9dGhpcy5fdnJlZj1udWxsfSx1LnVwZGF0ZT1mdW5jdGlvbih0LGUscixjKXtpZighZXx8MT09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciB1PXQ7dD11LnZlcnRleCxlPXUuZnJhZ21lbnQscj11LnVuaWZvcm1zLGM9dS5hdHRyaWJ1dGVzfXZhciBmPXRoaXMscD1mLmdsLGQ9Zi5fdnJlZjtmLl92cmVmPW8uc2hhZGVyKHAscC5WRVJURVhfU0hBREVSLHQpLGQmJmQuZGlzcG9zZSgpLGYudmVydFNoYWRlcj1mLl92cmVmLnNoYWRlcjt2YXIgZz10aGlzLl9mcmVmO2lmKGYuX2ZyZWY9by5zaGFkZXIocCxwLkZSQUdNRU5UX1NIQURFUixlKSxnJiZnLmRpc3Bvc2UoKSxmLmZyYWdTaGFkZXI9Zi5fZnJlZi5zaGFkZXIsIXJ8fCFjKXt2YXIgdj1wLmNyZWF0ZVByb2dyYW0oKTtpZihwLmF0dGFjaFNoYWRlcih2LGYuZnJhZ1NoYWRlcikscC5hdHRhY2hTaGFkZXIodixmLnZlcnRTaGFkZXIpLHAubGlua1Byb2dyYW0odiksIXAuZ2V0UHJvZ3JhbVBhcmFtZXRlcih2LHAuTElOS19TVEFUVVMpKXt2YXIgbT1wLmdldFByb2dyYW1JbmZvTG9nKHYpO3Rocm93IG5ldyBsKG0sXCJFcnJvciBsaW5raW5nIHByb2dyYW06XCIrbSl9cj1yfHxzLnVuaWZvcm1zKHAsdiksYz1jfHxzLmF0dHJpYnV0ZXMocCx2KSxwLmRlbGV0ZVByb2dyYW0odil9KGM9Yy5zbGljZSgpKS5zb3J0KGgpO3ZhciB5LHg9W10sYj1bXSxfPVtdO2Zvcih5PTA7eTxjLmxlbmd0aDsrK3kpe3ZhciB3PWNbeV07aWYody50eXBlLmluZGV4T2YoXCJtYXRcIik+PTApe2Zvcih2YXIgaz0wfHcudHlwZS5jaGFyQXQody50eXBlLmxlbmd0aC0xKSxBPW5ldyBBcnJheShrKSxUPTA7VDxrOysrVClBW1RdPV8ubGVuZ3RoLGIucHVzaCh3Lm5hbWUrXCJbXCIrVCtcIl1cIiksXCJudW1iZXJcIj09dHlwZW9mIHcubG9jYXRpb24/Xy5wdXNoKHcubG9jYXRpb24rVCk6QXJyYXkuaXNBcnJheSh3LmxvY2F0aW9uKSYmdy5sb2NhdGlvbi5sZW5ndGg9PT1rJiZcIm51bWJlclwiPT10eXBlb2Ygdy5sb2NhdGlvbltUXT9fLnB1c2goMHx3LmxvY2F0aW9uW1RdKTpfLnB1c2goLTEpO3gucHVzaCh7bmFtZTp3Lm5hbWUsdHlwZTp3LnR5cGUsbG9jYXRpb25zOkF9KX1lbHNlIHgucHVzaCh7bmFtZTp3Lm5hbWUsdHlwZTp3LnR5cGUsbG9jYXRpb25zOltfLmxlbmd0aF19KSxiLnB1c2gody5uYW1lKSxcIm51bWJlclwiPT10eXBlb2Ygdy5sb2NhdGlvbj9fLnB1c2goMHx3LmxvY2F0aW9uKTpfLnB1c2goLTEpfXZhciBNPTA7Zm9yKHk9MDt5PF8ubGVuZ3RoOysreSlpZihfW3ldPDApe2Zvcig7Xy5pbmRleE9mKE0pPj0wOylNKz0xO19beV09TX12YXIgUz1uZXcgQXJyYXkoci5sZW5ndGgpO2Z1bmN0aW9uIEUoKXtmLnByb2dyYW09by5wcm9ncmFtKHAsZi5fdnJlZixmLl9mcmVmLGIsXyk7Zm9yKHZhciB0PTA7dDxyLmxlbmd0aDsrK3QpU1t0XT1wLmdldFVuaWZvcm1Mb2NhdGlvbihmLnByb2dyYW0sclt0XS5uYW1lKX1FKCksZi5fcmVsaW5rPUUsZi50eXBlcz17dW5pZm9ybXM6YShyKSxhdHRyaWJ1dGVzOmEoYyl9LGYuYXR0cmlidXRlcz1pKHAsZix4LF8pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLFwidW5pZm9ybXNcIixuKHAsZixyLFMpKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9bmV3IGModCk7cmV0dXJuIGEudXBkYXRlKGUscixuLGkpLGF9fSx7XCIuL2xpYi9HTEVycm9yXCI6Mjk5LFwiLi9saWIvY3JlYXRlLWF0dHJpYnV0ZXNcIjozMDAsXCIuL2xpYi9jcmVhdGUtdW5pZm9ybXNcIjozMDEsXCIuL2xpYi9yZWZsZWN0XCI6MzAyLFwiLi9saWIvcnVudGltZS1yZWZsZWN0XCI6MzAzLFwiLi9saWIvc2hhZGVyLWNhY2hlXCI6MzA0fV0sMjk5OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscil7dGhpcy5zaG9ydE1lc3NhZ2U9ZXx8XCJcIix0aGlzLmxvbmdNZXNzYWdlPXJ8fFwiXCIsdGhpcy5yYXdFcnJvcj10fHxcIlwiLHRoaXMubWVzc2FnZT1cImdsLXNoYWRlcjogXCIrKGV8fHR8fFwiXCIpKyhyP1wiXFxuXCIrcjpcIlwiKSx0aGlzLnN0YWNrPShuZXcgRXJyb3IpLnN0YWNrfW4ucHJvdG90eXBlPW5ldyBFcnJvcixuLnByb3RvdHlwZS5uYW1lPVwiR0xFcnJvclwiLG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPW4sZS5leHBvcnRzPW59LHt9XSwzMDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7Zm9yKHZhciBhPXt9LGw9MCxjPXIubGVuZ3RoO2w8YzsrK2wpe3ZhciB1PXJbbF0saD11Lm5hbWUsZj11LnR5cGUscD11LmxvY2F0aW9ucztzd2l0Y2goZil7Y2FzZVwiYm9vbFwiOmNhc2VcImludFwiOmNhc2VcImZsb2F0XCI6byh0LGUscFswXSxpLDEsYSxoKTticmVhaztkZWZhdWx0OmlmKGYuaW5kZXhPZihcInZlY1wiKT49MCl7dmFyIGQ9Zi5jaGFyQ29kZUF0KGYubGVuZ3RoLTEpLTQ4O2lmKGQ8Mnx8ZD40KXRocm93IG5ldyBuKFwiXCIsXCJJbnZhbGlkIGRhdGEgdHlwZSBmb3IgYXR0cmlidXRlIFwiK2grXCI6IFwiK2YpO28odCxlLHBbMF0saSxkLGEsaCl9ZWxzZXtpZighKGYuaW5kZXhPZihcIm1hdFwiKT49MCkpdGhyb3cgbmV3IG4oXCJcIixcIlVua25vd24gZGF0YSB0eXBlIGZvciBhdHRyaWJ1dGUgXCIraCtcIjogXCIrZik7dmFyIGQ9Zi5jaGFyQ29kZUF0KGYubGVuZ3RoLTEpLTQ4O2lmKGQ8Mnx8ZD40KXRocm93IG5ldyBuKFwiXCIsXCJJbnZhbGlkIGRhdGEgdHlwZSBmb3IgYXR0cmlidXRlIFwiK2grXCI6IFwiK2YpO3ModCxlLHAsaSxkLGEsaCl9fX1yZXR1cm4gYX07dmFyIG49dChcIi4vR0xFcnJvclwiKTtmdW5jdGlvbiBpKHQsZSxyLG4saSxhKXt0aGlzLl9nbD10LHRoaXMuX3dyYXBwZXI9ZSx0aGlzLl9pbmRleD1yLHRoaXMuX2xvY2F0aW9ucz1uLHRoaXMuX2RpbWVuc2lvbj1pLHRoaXMuX2NvbnN0RnVuYz1hfXZhciBhPWkucHJvdG90eXBlO2Z1bmN0aW9uIG8odCxlLHIsbixhLG8scyl7Zm9yKHZhciBsPVtcImdsXCIsXCJ2XCJdLGM9W10sdT0wO3U8YTsrK3UpbC5wdXNoKFwieFwiK3UpLGMucHVzaChcInhcIit1KTtsLnB1c2goXCJpZih4MC5sZW5ndGg9PT12b2lkIDApe3JldHVybiBnbC52ZXJ0ZXhBdHRyaWJcIithK1wiZih2LFwiK2Muam9pbigpK1wiKX1lbHNle3JldHVybiBnbC52ZXJ0ZXhBdHRyaWJcIithK1wiZnYodix4MCl9XCIpO3ZhciBoPUZ1bmN0aW9uLmFwcGx5KG51bGwsbCksZj1uZXcgaSh0LGUscixuLGEsaCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG8scyx7c2V0OmZ1bmN0aW9uKGUpe3JldHVybiB0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShuW3JdKSxoKHQsbltyXSxlKSxlfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZn0sZW51bWVyYWJsZTohMH0pfWZ1bmN0aW9uIHModCxlLHIsbixpLGEscyl7Zm9yKHZhciBsPW5ldyBBcnJheShpKSxjPW5ldyBBcnJheShpKSx1PTA7dTxpOysrdSlvKHQsZSxyW3VdLG4saSxsLHUpLGNbdV09bFt1XTtPYmplY3QuZGVmaW5lUHJvcGVydHkobCxcImxvY2F0aW9uXCIse3NldDpmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgZT0wO2U8aTsrK2UpY1tlXS5sb2NhdGlvbj10W2VdO2Vsc2UgZm9yKGU9MDtlPGk7KytlKWNbZV0ubG9jYXRpb249dCtlO3JldHVybiB0fSxnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9bmV3IEFycmF5KGkpLGU9MDtlPGk7KytlKXRbZV09bltyW2VdXTtyZXR1cm4gdH0sZW51bWVyYWJsZTohMH0pLGwucG9pbnRlcj1mdW5jdGlvbihlLGEsbyxzKXtlPWV8fHQuRkxPQVQsYT0hIWEsbz1vfHxpKmkscz1zfHwwO2Zvcih2YXIgbD0wO2w8aTsrK2wpe3ZhciBjPW5bcltsXV07dC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGMsaSxlLGEsbyxzK2wqaSksdC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShjKX19O3ZhciBoPW5ldyBBcnJheShpKSxmPXRbXCJ2ZXJ0ZXhBdHRyaWJcIitpK1wiZnZcIl07T2JqZWN0LmRlZmluZVByb3BlcnR5KGEscyx7c2V0OmZ1bmN0aW9uKGUpe2Zvcih2YXIgYT0wO2E8aTsrK2Epe3ZhciBvPW5bclthXV07aWYodC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkobyksQXJyYXkuaXNBcnJheShlWzBdKSlmLmNhbGwodCxvLGVbYV0pO2Vsc2V7Zm9yKHZhciBzPTA7czxpOysrcyloW3NdPWVbaSphK3NdO2YuY2FsbCh0LG8saCl9fXJldHVybiBlfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbH0sZW51bWVyYWJsZTohMH0pfWEucG9pbnRlcj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLl9nbCxhPXRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF07aS52ZXJ0ZXhBdHRyaWJQb2ludGVyKGEsdGhpcy5fZGltZW5zaW9uLHR8fGkuRkxPQVQsISFlLHJ8fDAsbnx8MCksaS5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhKX0sYS5zZXQ9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRoaXMuX2NvbnN0RnVuYyh0aGlzLl9sb2NhdGlvbnNbdGhpcy5faW5kZXhdLHQsZSxyLG4pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxcImxvY2F0aW9uXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sb2NhdGlvbnNbdGhpcy5faW5kZXhdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQhPT10aGlzLl9sb2NhdGlvbnNbdGhpcy5faW5kZXhdJiYodGhpcy5fbG9jYXRpb25zW3RoaXMuX2luZGV4XT0wfHQsdGhpcy5fd3JhcHBlci5wcm9ncmFtPW51bGwpLDB8dH19KX0se1wiLi9HTEVycm9yXCI6Mjk5fV0sMzAxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vcmVmbGVjdFwiKSxpPXQoXCIuL0dMRXJyb3JcIik7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gbmV3IEZ1bmN0aW9uKFwieVwiLFwicmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHl9XCIpKHQpfWZ1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZTtyZXR1cm4gcn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbCh0LGUscil7c3dpdGNoKHIpe2Nhc2VcImJvb2xcIjpjYXNlXCJpbnRcIjpjYXNlXCJzYW1wbGVyMkRcIjpjYXNlXCJzYW1wbGVyQ3ViZVwiOnJldHVyblwiZ2wudW5pZm9ybTFpKGxvY2F0aW9uc1tcIitlK1wiXSxvYmpcIit0K1wiKVwiO2Nhc2VcImZsb2F0XCI6cmV0dXJuXCJnbC51bmlmb3JtMWYobG9jYXRpb25zW1wiK2UrXCJdLG9ialwiK3QrXCIpXCI7ZGVmYXVsdDp2YXIgbj1yLmluZGV4T2YoXCJ2ZWNcIik7aWYoISgwPD1uJiZuPD0xJiZyLmxlbmd0aD09PTQrbikpe2lmKDA9PT1yLmluZGV4T2YoXCJtYXRcIikmJjQ9PT1yLmxlbmd0aCl7dmFyIGE9ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTEpLTQ4O2lmKGE8Mnx8YT40KXRocm93IG5ldyBpKFwiXCIsXCJJbnZhbGlkIHVuaWZvcm0gZGltZW5zaW9uIHR5cGUgZm9yIG1hdHJpeCBcIituYW1lK1wiOiBcIityKTtyZXR1cm5cImdsLnVuaWZvcm1NYXRyaXhcIithK1wiZnYobG9jYXRpb25zW1wiK2UrXCJdLGZhbHNlLG9ialwiK3QrXCIpXCJ9dGhyb3cgbmV3IGkoXCJcIixcIlVua25vd24gdW5pZm9ybSBkYXRhIHR5cGUgZm9yIFwiK25hbWUrXCI6IFwiK3IpfXZhciBhPXIuY2hhckNvZGVBdChyLmxlbmd0aC0xKS00ODtpZihhPDJ8fGE+NCl0aHJvdyBuZXcgaShcIlwiLFwiSW52YWxpZCBkYXRhIHR5cGVcIik7c3dpdGNoKHIuY2hhckF0KDApKXtjYXNlXCJiXCI6Y2FzZVwiaVwiOnJldHVyblwiZ2wudW5pZm9ybVwiK2ErXCJpdihsb2NhdGlvbnNbXCIrZStcIl0sb2JqXCIrdCtcIilcIjtjYXNlXCJ2XCI6cmV0dXJuXCJnbC51bmlmb3JtXCIrYStcImZ2KGxvY2F0aW9uc1tcIitlK1wiXSxvYmpcIit0K1wiKVwiO2RlZmF1bHQ6dGhyb3cgbmV3IGkoXCJcIixcIlVucmVjb2duaXplZCBkYXRhIHR5cGUgZm9yIHZlY3RvciBcIituYW1lK1wiOiBcIityKX19fWZ1bmN0aW9uIGMoZSl7Zm9yKHZhciBuPVtcInJldHVybiBmdW5jdGlvbiB1cGRhdGVQcm9wZXJ0eShvYmope1wiXSxpPWZ1bmN0aW9uIHQoZSxyKXtpZihcIm9iamVjdFwiIT10eXBlb2YgcilyZXR1cm5bW2Uscl1dO3ZhciBuPVtdO2Zvcih2YXIgaSBpbiByKXt2YXIgYT1yW2ldLG89ZTtwYXJzZUludChpKStcIlwiPT09aT9vKz1cIltcIitpK1wiXVwiOm8rPVwiLlwiK2ksXCJvYmplY3RcIj09dHlwZW9mIGE/bi5wdXNoLmFwcGx5KG4sdChvLGEpKTpuLnB1c2goW28sYV0pfXJldHVybiBufShcIlwiLGUpLGE9MDthPGkubGVuZ3RoOysrYSl7dmFyIG89aVthXSxjPW9bMF0sdT1vWzFdO3NbdV0mJm4ucHVzaChsKGMsdSxyW3VdLnR5cGUpKX1uLnB1c2goXCJyZXR1cm4gb2JqfVwiKTt2YXIgaD1uZXcgRnVuY3Rpb24oXCJnbFwiLFwibG9jYXRpb25zXCIsbi5qb2luKFwiXFxuXCIpKTtyZXR1cm4gaCh0LHMpfWZ1bmN0aW9uIHUobixsLHUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB1KXt2YXIgZj1oKHUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGwse2dldDphKGYpLHNldDpjKHUpLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExfSl9ZWxzZSBzW3VdP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGwse2dldDoocD11LG5ldyBGdW5jdGlvbihcImdsXCIsXCJ3cmFwcGVyXCIsXCJsb2NhdGlvbnNcIixcInJldHVybiBmdW5jdGlvbigpe3JldHVybiBnbC5nZXRVbmlmb3JtKHdyYXBwZXIucHJvZ3JhbSxsb2NhdGlvbnNbXCIrcCtcIl0pfVwiKSh0LGUscykpLHNldDpjKHUpLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExfSk6bltsXT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZVwiYm9vbFwiOnJldHVybiExO2Nhc2VcImludFwiOmNhc2VcInNhbXBsZXIyRFwiOmNhc2VcInNhbXBsZXJDdWJlXCI6Y2FzZVwiZmxvYXRcIjpyZXR1cm4gMDtkZWZhdWx0OnZhciBlPXQuaW5kZXhPZihcInZlY1wiKTtpZigwPD1lJiZlPD0xJiZ0Lmxlbmd0aD09PTQrZSl7dmFyIHI9dC5jaGFyQ29kZUF0KHQubGVuZ3RoLTEpLTQ4O2lmKHI8Mnx8cj40KXRocm93IG5ldyBpKFwiXCIsXCJJbnZhbGlkIGRhdGEgdHlwZVwiKTtyZXR1cm5cImJcIj09PXQuY2hhckF0KDApP28ociwhMSk6byhyLDApfWlmKDA9PT10LmluZGV4T2YoXCJtYXRcIikmJjQ9PT10Lmxlbmd0aCl7dmFyIHI9dC5jaGFyQ29kZUF0KHQubGVuZ3RoLTEpLTQ4O2lmKHI8Mnx8cj40KXRocm93IG5ldyBpKFwiXCIsXCJJbnZhbGlkIHVuaWZvcm0gZGltZW5zaW9uIHR5cGUgZm9yIG1hdHJpeCBcIituYW1lK1wiOiBcIit0KTtyZXR1cm4gbyhyKnIsMCl9dGhyb3cgbmV3IGkoXCJcIixcIlVua25vd24gdW5pZm9ybSBkYXRhIHR5cGUgZm9yIFwiK25hbWUrXCI6IFwiK3QpfX0oclt1XS50eXBlKTt2YXIgcH1mdW5jdGlvbiBoKHQpe3ZhciBlO2lmKEFycmF5LmlzQXJyYXkodCkpe2U9bmV3IEFycmF5KHQubGVuZ3RoKTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil1KGUscix0W3JdKX1lbHNlIGZvcih2YXIgbiBpbiBlPXt9LHQpdShlLG4sdFtuXSk7cmV0dXJuIGV9dmFyIGY9bihyLCEwKTtyZXR1cm57Z2V0OmEoaChmKSksc2V0OmMoZiksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9fX0se1wiLi9HTEVycm9yXCI6Mjk5LFwiLi9yZWZsZWN0XCI6MzAyfV0sMzAyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LG49MDtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9dFtuXS5uYW1lLGE9aS5zcGxpdChcIi5cIiksbz1yLHM9MDtzPGEubGVuZ3RoOysrcyl7dmFyIGw9YVtzXS5zcGxpdChcIltcIik7aWYobC5sZW5ndGg+MSl7bFswXWluIG98fChvW2xbMF1dPVtdKSxvPW9bbFswXV07Zm9yKHZhciBjPTE7YzxsLmxlbmd0aDsrK2Mpe3ZhciB1PXBhcnNlSW50KGxbY10pO2M8bC5sZW5ndGgtMXx8czxhLmxlbmd0aC0xPyh1IGluIG98fChjPGwubGVuZ3RoLTE/b1t1XT1bXTpvW3VdPXt9KSxvPW9bdV0pOm9bdV09ZT9uOnRbbl0udHlwZX19ZWxzZSBzPGEubGVuZ3RoLTE/KGxbMF1pbiBvfHwob1tsWzBdXT17fSksbz1vW2xbMF1dKTpvW2xbMF1dPWU/bjp0W25dLnR5cGV9cmV0dXJuIHJ9fSx7fV0sMzAzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ci51bmlmb3Jtcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmdldFByb2dyYW1QYXJhbWV0ZXIoZSx0LkFDVElWRV9VTklGT1JNUyksbj1bXSxpPTA7aTxyOysraSl7dmFyIG89dC5nZXRBY3RpdmVVbmlmb3JtKGUsaSk7aWYobyl7dmFyIHM9YSh0LG8udHlwZSk7aWYoby5zaXplPjEpZm9yKHZhciBsPTA7bDxvLnNpemU7KytsKW4ucHVzaCh7bmFtZTpvLm5hbWUucmVwbGFjZShcIlswXVwiLFwiW1wiK2wrXCJdXCIpLHR5cGU6c30pO2Vsc2Ugbi5wdXNoKHtuYW1lOm8ubmFtZSx0eXBlOnN9KX19cmV0dXJuIG59LHIuYXR0cmlidXRlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmdldFByb2dyYW1QYXJhbWV0ZXIoZSx0LkFDVElWRV9BVFRSSUJVVEVTKSxuPVtdLGk9MDtpPHI7KytpKXt2YXIgbz10LmdldEFjdGl2ZUF0dHJpYihlLGkpO28mJm4ucHVzaCh7bmFtZTpvLm5hbWUsdHlwZTphKHQsby50eXBlKX0pfXJldHVybiBufTt2YXIgbj17RkxPQVQ6XCJmbG9hdFwiLEZMT0FUX1ZFQzI6XCJ2ZWMyXCIsRkxPQVRfVkVDMzpcInZlYzNcIixGTE9BVF9WRUM0OlwidmVjNFwiLElOVDpcImludFwiLElOVF9WRUMyOlwiaXZlYzJcIixJTlRfVkVDMzpcIml2ZWMzXCIsSU5UX1ZFQzQ6XCJpdmVjNFwiLEJPT0w6XCJib29sXCIsQk9PTF9WRUMyOlwiYnZlYzJcIixCT09MX1ZFQzM6XCJidmVjM1wiLEJPT0xfVkVDNDpcImJ2ZWM0XCIsRkxPQVRfTUFUMjpcIm1hdDJcIixGTE9BVF9NQVQzOlwibWF0M1wiLEZMT0FUX01BVDQ6XCJtYXQ0XCIsU0FNUExFUl8yRDpcInNhbXBsZXIyRFwiLFNBTVBMRVJfQ1VCRTpcInNhbXBsZXJDdWJlXCJ9LGk9bnVsbDtmdW5jdGlvbiBhKHQsZSl7aWYoIWkpe3ZhciByPU9iamVjdC5rZXlzKG4pO2k9e307Zm9yKHZhciBhPTA7YTxyLmxlbmd0aDsrK2Epe3ZhciBvPXJbYV07aVt0W29dXT1uW29dfX1yZXR1cm4gaVtlXX19LHt9XSwzMDQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLnNoYWRlcj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHUodCkuZ2V0U2hhZGVyUmVmZXJlbmNlKGUscil9LHIucHJvZ3JhbT1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybiB1KHQpLmdldFByb2dyYW0oZSxyLG4saSl9O3ZhciBuPXQoXCIuL0dMRXJyb3JcIiksaT10KFwiZ2wtZm9ybWF0LWNvbXBpbGVyLWVycm9yXCIpLGE9bmV3KFwidW5kZWZpbmVkXCI9PXR5cGVvZiBXZWFrTWFwP3QoXCJ3ZWFrbWFwLXNoaW1cIik6V2Vha01hcCksbz0wO2Z1bmN0aW9uIHModCxlLHIsbixpLGEsbyl7dGhpcy5pZD10LHRoaXMuc3JjPWUsdGhpcy50eXBlPXIsdGhpcy5zaGFkZXI9bix0aGlzLmNvdW50PWEsdGhpcy5wcm9ncmFtcz1bXSx0aGlzLmNhY2hlPW99ZnVuY3Rpb24gbCh0KXt0aGlzLmdsPXQsdGhpcy5zaGFkZXJzPVt7fSx7fV0sdGhpcy5wcm9ncmFtcz17fX1zLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7aWYoMD09LS10aGlzLmNvdW50KXtmb3IodmFyIHQ9dGhpcy5jYWNoZSxlPXQuZ2wscj10aGlzLnByb2dyYW1zLG49MCxpPXIubGVuZ3RoO248aTsrK24pe3ZhciBhPXQucHJvZ3JhbXNbcltuXV07YSYmKGRlbGV0ZSB0LnByb2dyYW1zW25dLGUuZGVsZXRlUHJvZ3JhbShhKSl9ZS5kZWxldGVTaGFkZXIodGhpcy5zaGFkZXIpLGRlbGV0ZSB0LnNoYWRlcnNbdGhpcy50eXBlPT09ZS5GUkFHTUVOVF9TSEFERVJ8MF1bdGhpcy5zcmNdfX07dmFyIGM9bC5wcm90b3R5cGU7ZnVuY3Rpb24gdSh0KXt2YXIgZT1hLmdldCh0KTtyZXR1cm4gZXx8KGU9bmV3IGwodCksYS5zZXQodCxlKSksZX1jLmdldFNoYWRlclJlZmVyZW5jZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2wsYT10aGlzLnNoYWRlcnNbdD09PXIuRlJBR01FTlRfU0hBREVSfDBdLGw9YVtlXTtpZihsJiZyLmlzU2hhZGVyKGwuc2hhZGVyKSlsLmNvdW50Kz0xO2Vsc2V7dmFyIGM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPXQuY3JlYXRlU2hhZGVyKGUpO2lmKHQuc2hhZGVyU291cmNlKGEsciksdC5jb21waWxlU2hhZGVyKGEpLCF0LmdldFNoYWRlclBhcmFtZXRlcihhLHQuQ09NUElMRV9TVEFUVVMpKXt2YXIgbz10LmdldFNoYWRlckluZm9Mb2coYSk7dHJ5e3ZhciBzPWkobyxyLGUpfWNhdGNoKHQpe3Rocm93IGNvbnNvbGUud2FybihcIkZhaWxlZCB0byBmb3JtYXQgY29tcGlsZXIgZXJyb3I6IFwiK3QpLG5ldyBuKG8sXCJFcnJvciBjb21waWxpbmcgc2hhZGVyOlxcblwiK28pfXRocm93IG5ldyBuKG8scy5zaG9ydCxzLmxvbmcpfXJldHVybiBhfShyLHQsZSk7bD1hW2VdPW5ldyBzKG8rKyxlLHQsYyxbXSwxLHRoaXMpfXJldHVybiBsfSxjLmdldFByb2dyYW09ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9W3QuaWQsZS5pZCxyLmpvaW4oXCI6XCIpLGkuam9pbihcIjpcIildLmpvaW4oXCJAXCIpLG89dGhpcy5wcm9ncmFtc1thXTtyZXR1cm4gbyYmdGhpcy5nbC5pc1Byb2dyYW0obyl8fCh0aGlzLnByb2dyYW1zW2FdPW89ZnVuY3Rpb24odCxlLHIsaSxhKXt2YXIgbz10LmNyZWF0ZVByb2dyYW0oKTt0LmF0dGFjaFNoYWRlcihvLGUpLHQuYXR0YWNoU2hhZGVyKG8scik7Zm9yKHZhciBzPTA7czxpLmxlbmd0aDsrK3MpdC5iaW5kQXR0cmliTG9jYXRpb24obyxhW3NdLGlbc10pO2lmKHQubGlua1Byb2dyYW0obyksIXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihvLHQuTElOS19TVEFUVVMpKXt2YXIgbD10LmdldFByb2dyYW1JbmZvTG9nKG8pO3Rocm93IG5ldyBuKGwsXCJFcnJvciBsaW5raW5nIHByb2dyYW06IFwiK2wpfXJldHVybiBvfSh0aGlzLmdsLHQuc2hhZGVyLGUuc2hhZGVyLHIsaSksdC5wcm9ncmFtcy5wdXNoKGEpLGUucHJvZ3JhbXMucHVzaChhKSksb319LHtcIi4vR0xFcnJvclwiOjI5OSxcImdsLWZvcm1hdC1jb21waWxlci1lcnJvclwiOjI0NyxcIndlYWttYXAtc2hpbVwiOjU0MH1dLDMwNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7dGhpcy5wbG90PXQsdGhpcy5lbmFibGU9WyEwLCEwLCExLCExXSx0aGlzLndpZHRoPVsxLDEsMSwxXSx0aGlzLmNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuY2VudGVyPVsxLzAsMS8wXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgbih0KTtyZXR1cm4gci51cGRhdGUoZSksdC5hZGRPdmVybGF5KHIpLHJ9O3ZhciBpPW4ucHJvdG90eXBlO2kudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e30sdGhpcy5lbmFibGU9KHQuZW5hYmxlfHxbITAsITAsITEsITFdKS5zbGljZSgpLHRoaXMud2lkdGg9KHQud2lkdGh8fFsxLDEsMSwxXSkuc2xpY2UoKSx0aGlzLmNvbG9yPSh0LmNvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKCl9KSx0aGlzLmNlbnRlcj0odC5jZW50ZXJ8fFsxLzAsMS8wXSkuc2xpY2UoKSx0aGlzLnBsb3Quc2V0T3ZlcmxheURpcnR5KCl9LGkuZHJhdz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZW5hYmxlLGU9dGhpcy53aWR0aCxyPXRoaXMuY29sb3Isbj10aGlzLmNlbnRlcixpPXRoaXMucGxvdCxhPWkubGluZSxvPWkuZGF0YUJveCxzPWkudmlld0JveDtpZihhLmJpbmQoKSxvWzBdPD1uWzBdJiZuWzBdPD1vWzJdJiZvWzFdPD1uWzFdJiZuWzFdPD1vWzNdKXt2YXIgbD1zWzBdKyhuWzBdLW9bMF0pLyhvWzJdLW9bMF0pKihzWzJdLXNbMF0pLGM9c1sxXSsoblsxXS1vWzFdKS8ob1szXS1vWzFdKSooc1szXS1zWzFdKTt0WzBdJiZhLmRyYXdMaW5lKGwsYyxzWzBdLGMsZVswXSxyWzBdKSx0WzFdJiZhLmRyYXdMaW5lKGwsYyxsLHNbMV0sZVsxXSxyWzFdKSx0WzJdJiZhLmRyYXdMaW5lKGwsYyxzWzJdLGMsZVsyXSxyWzJdKSx0WzNdJiZhLmRyYXdMaW5lKGwsYyxsLHNbM10sZVszXSxyWzNdKX19LGkuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMucGxvdC5yZW1vdmVPdmVybGF5KHRoaXMpfX0se31dLDMwNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbHNsaWZ5XCIpLGk9dChcImdsLXNoYWRlclwiKSxhPW4oW1wicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiwgY29sb3I7XFxuYXR0cmlidXRlIGZsb2F0IHdlaWdodDtcXG5cXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XFxudW5pZm9ybSB2ZWMzIGNvb3JkaW5hdGVzWzNdO1xcbnVuaWZvcm0gdmVjNCBjb2xvcnNbM107XFxudW5pZm9ybSB2ZWMyIHNjcmVlblNoYXBlO1xcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoO1xcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgdmVjMyB2ZXJ0ZXhQb3NpdGlvbiA9IG1peChjb29yZGluYXRlc1swXSxcXG4gICAgbWl4KGNvb3JkaW5hdGVzWzJdLCBjb29yZGluYXRlc1sxXSwgMC41ICogKHBvc2l0aW9uICsgMS4wKSksIGFicyhwb3NpdGlvbikpO1xcblxcbiAgdmVjNCBjbGlwUG9zID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQodmVydGV4UG9zaXRpb24sIDEuMCk7XFxuICB2ZWMyIGNsaXBPZmZzZXQgPSAocHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQoY29sb3IsIDAuMCkpLnh5O1xcbiAgdmVjMiBkZWx0YSA9IHdlaWdodCAqIGNsaXBPZmZzZXQgKiBzY3JlZW5TaGFwZTtcXG4gIHZlYzIgbGluZU9mZnNldCA9IG5vcm1hbGl6ZSh2ZWMyKGRlbHRhLnksIC1kZWx0YS54KSkgLyBzY3JlZW5TaGFwZTtcXG5cXG4gIGdsX1Bvc2l0aW9uICAgPSB2ZWM0KGNsaXBQb3MueHkgKyBjbGlwUG9zLncgKiAwLjUgKiBsaW5lV2lkdGggKiBsaW5lT2Zmc2V0LCBjbGlwUG9zLnosIGNsaXBQb3Mudyk7XFxuICBmcmFnQ29sb3IgICAgID0gY29sb3IueCAqIGNvbG9yc1swXSArIGNvbG9yLnkgKiBjb2xvcnNbMV0gKyBjb2xvci56ICogY29sb3JzWzJdO1xcbn1cXG5cIl0pLG89bihbXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xcbn1cIl0pO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZTpcInBvc2l0aW9uXCIsdHlwZTpcInZlYzNcIn0se25hbWU6XCJjb2xvclwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwid2VpZ2h0XCIsdHlwZTpcImZsb2F0XCJ9XSl9fSx7XCJnbC1zaGFkZXJcIjoyOTgsZ2xzbGlmeTo0MDJ9XSwzMDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2wtYnVmZmVyXCIpLGk9dChcImdsLXZhb1wiKSxhPXQoXCIuL3NoYWRlcnMvaW5kZXhcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107ZnVuY3Rpb24gbyh0LGUsbixpLGEsbyl7dmFyIHM9W3QsZSxuLDAsMCwwLDFdO3NbaSszXT0xLHNbaV09YSxyLnB1c2guYXBwbHkocixzKSxzWzZdPS0xLHIucHVzaC5hcHBseShyLHMpLHNbaV09byxyLnB1c2guYXBwbHkocixzKSxyLnB1c2guYXBwbHkocixzKSxzWzZdPTEsci5wdXNoLmFwcGx5KHIscyksc1tpXT1hLHIucHVzaC5hcHBseShyLHMpfW8oMCwwLDAsMCwwLDEpLG8oMCwwLDAsMSwwLDEpLG8oMCwwLDAsMiwwLDEpLG8oMSwwLDAsMSwtMSwxKSxvKDEsMCwwLDIsLTEsMSksbygwLDEsMCwwLC0xLDEpLG8oMCwxLDAsMiwtMSwxKSxvKDAsMCwxLDAsLTEsMSksbygwLDAsMSwxLC0xLDEpO3ZhciBsPW4odCxyKSxjPWkodCxbe3R5cGU6dC5GTE9BVCxidWZmZXI6bCxzaXplOjMsb2Zmc2V0OjAsc3RyaWRlOjI4fSx7dHlwZTp0LkZMT0FULGJ1ZmZlcjpsLHNpemU6MyxvZmZzZXQ6MTIsc3RyaWRlOjI4fSx7dHlwZTp0LkZMT0FULGJ1ZmZlcjpsLHNpemU6MSxvZmZzZXQ6MjQsc3RyaWRlOjI4fV0pLHU9YSh0KTt1LmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCx1LmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MSx1LmF0dHJpYnV0ZXMud2VpZ2h0LmxvY2F0aW9uPTI7dmFyIGg9bmV3IHModCxsLGMsdSk7cmV0dXJuIGgudXBkYXRlKGUpLGh9O3ZhciBvPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiBzKHQsZSxyLG4pe3RoaXMuZ2w9dCx0aGlzLmJ1ZmZlcj1lLHRoaXMudmFvPXIsdGhpcy5zaGFkZXI9bix0aGlzLnBpeGVsUmF0aW89MSx0aGlzLmJvdW5kcz1bWy0xZTMsLTFlMywtMWUzXSxbMWUzLDFlMywxZTNdXSx0aGlzLnBvc2l0aW9uPVswLDAsMF0sdGhpcy5saW5lV2lkdGg9WzIsMiwyXSx0aGlzLmNvbG9ycz1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZW5hYmxlZD1bITAsITAsITBdLHRoaXMuZHJhd1NpZGVzPVshMCwhMCwhMF0sdGhpcy5heGVzPW51bGx9dmFyIGw9cy5wcm90b3R5cGUsYz1bMCwwLDBdLHU9WzAsMCwwXSxoPVswLDBdO2wuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiExfSxsLmRyYXdUcmFuc3BhcmVudD1mdW5jdGlvbih0KXt9LGwuZHJhdz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsLHI9dGhpcy52YW8sbj10aGlzLnNoYWRlcjtyLmJpbmQoKSxuLmJpbmQoKTt2YXIgaSxhPXQubW9kZWx8fG8scz10LnZpZXd8fG8sbD10LnByb2plY3Rpb258fG87dGhpcy5heGVzJiYoaT10aGlzLmF4ZXMubGFzdEN1YmVQcm9wcy5heGlzKTtmb3IodmFyIGY9YyxwPXUsZD0wO2Q8MzsrK2QpaSYmaVtkXTwwPyhmW2RdPXRoaXMuYm91bmRzWzBdW2RdLHBbZF09dGhpcy5ib3VuZHNbMV1bZF0pOihmW2RdPXRoaXMuYm91bmRzWzFdW2RdLHBbZF09dGhpcy5ib3VuZHNbMF1bZF0pO2hbMF09ZS5kcmF3aW5nQnVmZmVyV2lkdGgsaFsxXT1lLmRyYXdpbmdCdWZmZXJIZWlnaHQsbi51bmlmb3Jtcy5tb2RlbD1hLG4udW5pZm9ybXMudmlldz1zLG4udW5pZm9ybXMucHJvamVjdGlvbj1sLG4udW5pZm9ybXMuY29vcmRpbmF0ZXM9W3RoaXMucG9zaXRpb24sZixwXSxuLnVuaWZvcm1zLmNvbG9ycz10aGlzLmNvbG9ycyxuLnVuaWZvcm1zLnNjcmVlblNoYXBlPWg7Zm9yKGQ9MDtkPDM7KytkKW4udW5pZm9ybXMubGluZVdpZHRoPXRoaXMubGluZVdpZHRoW2RdKnRoaXMucGl4ZWxSYXRpbyx0aGlzLmVuYWJsZWRbZF0mJihyLmRyYXcoZS5UUklBTkdMRVMsNiw2KmQpLHRoaXMuZHJhd1NpZGVzW2RdJiZyLmRyYXcoZS5UUklBTkdMRVMsMTIsMTgrMTIqZCkpO3IudW5iaW5kKCl9LGwudXBkYXRlPWZ1bmN0aW9uKHQpe3QmJihcImJvdW5kc1wiaW4gdCYmKHRoaXMuYm91bmRzPXQuYm91bmRzKSxcInBvc2l0aW9uXCJpbiB0JiYodGhpcy5wb3NpdGlvbj10LnBvc2l0aW9uKSxcImxpbmVXaWR0aFwiaW4gdCYmKHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRoKSxcImNvbG9yc1wiaW4gdCYmKHRoaXMuY29sb3JzPXQuY29sb3JzKSxcImVuYWJsZWRcImluIHQmJih0aGlzLmVuYWJsZWQ9dC5lbmFibGVkKSxcImRyYXdTaWRlc1wiaW4gdCYmKHRoaXMuZHJhd1NpZGVzPXQuZHJhd1NpZGVzKSl9LGwuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlci5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0se1wiLi9zaGFkZXJzL2luZGV4XCI6MzA2LFwiZ2wtYnVmZmVyXCI6MjM4LFwiZ2wtdmFvXCI6MzIwfV0sMzA4OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcImdsc2xpZnlcIiksaT1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG52ZWMzIGdldE9ydGhvZ29uYWxWZWN0b3IodmVjMyB2KSB7XFxuICAvLyBSZXR1cm4gdXAtdmVjdG9yIGZvciBvbmx5LXogdmVjdG9yLlxcbiAgLy8gUmV0dXJuIGF4ICsgYnkgKyBjeiA9IDAsIGEgcG9pbnQgdGhhdCBsaWVzIG9uIHRoZSBwbGFuZSB0aGF0IGhhcyB2IGFzIGEgbm9ybWFsIGFuZCB0aGF0IGlzbid0ICgwLDAsMCkuXFxuICAvLyBGcm9tIHRoZSBhYm92ZSBpZi1zdGF0ZW1lbnQgd2UgaGF2ZSB8fGF8fCA+IDAgIFUgIHx8Ynx8ID4gMC5cXG4gIC8vIEFzc2lnbiB6ID0gMCwgeCA9IC1iLCB5ID0gYTpcXG4gIC8vIGEqLWIgKyBiKmEgKyBjKjAgPSAtYmEgKyBiYSArIDAgPSAwXFxuICBpZiAodi54KnYueCA+IHYueip2LnogfHwgdi55KnYueSA+IHYueip2LnopIHtcXG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKC12LnksIHYueCwgMC4wKSk7XFxuICB9IGVsc2Uge1xcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoMC4wLCB2LnosIC12LnkpKTtcXG4gIH1cXG59XFxuXFxuLy8gQ2FsY3VsYXRlIHRoZSB0dWJlIHZlcnRleCBhbmQgbm9ybWFsIGF0IHRoZSBnaXZlbiBpbmRleC5cXG4vL1xcbi8vIFRoZSByZXR1cm5lZCB2ZXJ0ZXggaXMgZm9yIGEgdHViZSByaW5nIHdpdGggaXRzIGNlbnRlciBhdCBvcmlnaW4sIHJhZGl1cyBvZiBsZW5ndGgoZCksIHBvaW50aW5nIGluIHRoZSBkaXJlY3Rpb24gb2YgZC5cXG4vL1xcbi8vIEVhY2ggdHViZSBzZWdtZW50IGlzIG1hZGUgdXAgb2YgYSByaW5nIG9mIHZlcnRpY2VzLlxcbi8vIFRoZXNlIHZlcnRpY2VzIGFyZSB1c2VkIHRvIG1ha2UgdXAgdGhlIHRyaWFuZ2xlcyBvZiB0aGUgdHViZSBieSBjb25uZWN0aW5nIHRoZW0gdG9nZXRoZXIgaW4gdGhlIHZlcnRleCBhcnJheS5cXG4vLyBUaGUgaW5kZXhlcyBvZiB0dWJlIHNlZ21lbnRzIHJ1biBmcm9tIDAgdG8gOC5cXG4vL1xcbnZlYzMgZ2V0VHViZVBvc2l0aW9uKHZlYzMgZCwgZmxvYXQgaW5kZXgsIG91dCB2ZWMzIG5vcm1hbCkge1xcbiAgZmxvYXQgc2VnbWVudENvdW50ID0gOC4wO1xcblxcbiAgZmxvYXQgYW5nbGUgPSAyLjAgKiAzLjE0MTU5ICogKGluZGV4IC8gc2VnbWVudENvdW50KTtcXG5cXG4gIHZlYzMgdSA9IGdldE9ydGhvZ29uYWxWZWN0b3IoZCk7XFxuICB2ZWMzIHYgPSBub3JtYWxpemUoY3Jvc3ModSwgZCkpO1xcblxcbiAgdmVjMyB4ID0gdSAqIGNvcyhhbmdsZSkgKiBsZW5ndGgoZCk7XFxuICB2ZWMzIHkgPSB2ICogc2luKGFuZ2xlKSAqIGxlbmd0aChkKTtcXG4gIHZlYzMgdjMgPSB4ICsgeTtcXG5cXG4gIG5vcm1hbCA9IG5vcm1hbGl6ZSh2Myk7XFxuXFxuICByZXR1cm4gdjM7XFxufVxcblxcbmF0dHJpYnV0ZSB2ZWM0IHZlY3RvcjtcXG5hdHRyaWJ1dGUgdmVjNCBjb2xvciwgcG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgdXY7XFxudW5pZm9ybSBmbG9hdCB2ZWN0b3JTY2FsZTtcXG51bmlmb3JtIGZsb2F0IHR1YmVTY2FsZTtcXG5cXG51bmlmb3JtIG1hdDQgbW9kZWxcXG4gICAgICAgICAgICwgdmlld1xcbiAgICAgICAgICAgLCBwcm9qZWN0aW9uXFxuICAgICAgICAgICAsIGludmVyc2VNb2RlbDtcXG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb25cXG4gICAgICAgICAgICwgbGlnaHRQb3NpdGlvbjtcXG5cXG52YXJ5aW5nIHZlYzMgZl9ub3JtYWxcXG4gICAgICAgICAgICwgZl9saWdodERpcmVjdGlvblxcbiAgICAgICAgICAgLCBmX2V5ZURpcmVjdGlvblxcbiAgICAgICAgICAgLCBmX2RhdGFcXG4gICAgICAgICAgICwgZl9wb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcXG52YXJ5aW5nIHZlYzIgZl91djtcXG5cXG52b2lkIG1haW4oKSB7XFxuICAvLyBTY2FsZSB0aGUgdmVjdG9yIG1hZ25pdHVkZSB0byBzdGF5IGNvbnN0YW50IHdpdGhcXG4gIC8vIG1vZGVsICYgdmlldyBjaGFuZ2VzLlxcbiAgdmVjMyBub3JtYWw7XFxuICB2ZWMzIFhZWiA9IGdldFR1YmVQb3NpdGlvbihtYXQzKG1vZGVsKSAqICh0dWJlU2NhbGUgKiB2ZWN0b3IudyAqIG5vcm1hbGl6ZSh2ZWN0b3IueHl6KSksIHBvc2l0aW9uLncsIG5vcm1hbCk7XFxuICB2ZWM0IHR1YmVQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbi54eXosIDEuMCkgKyB2ZWM0KFhZWiwgMC4wKTtcXG5cXG4gIC8vTGlnaHRpbmcgZ2VvbWV0cnkgcGFyYW1ldGVyc1xcbiAgdmVjNCBjYW1lcmFDb29yZGluYXRlID0gdmlldyAqIHR1YmVQb3NpdGlvbjtcXG4gIGNhbWVyYUNvb3JkaW5hdGUueHl6IC89IGNhbWVyYUNvb3JkaW5hdGUudztcXG4gIGZfbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XFxuICBmX2V5ZURpcmVjdGlvbiAgID0gZXllUG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcXG4gIGZfbm9ybWFsID0gbm9ybWFsaXplKCh2ZWM0KG5vcm1hbCwwLjApICogaW52ZXJzZU1vZGVsKS54eXopO1xcblxcbiAgLy8gdmVjNCBtX3Bvc2l0aW9uICA9IG1vZGVsICogdmVjNCh0dWJlUG9zaXRpb24sIDEuMCk7XFxuICB2ZWM0IHRfcG9zaXRpb24gID0gdmlldyAqIHR1YmVQb3NpdGlvbjtcXG4gIGdsX1Bvc2l0aW9uICAgICAgPSBwcm9qZWN0aW9uICogdF9wb3NpdGlvbjtcXG5cXG4gIGZfY29sb3IgICAgICAgICAgPSBjb2xvcjtcXG4gIGZfZGF0YSAgICAgICAgICAgPSB0dWJlUG9zaXRpb24ueHl6O1xcbiAgZl9wb3NpdGlvbiAgICAgICA9IHBvc2l0aW9uLnh5ejtcXG4gIGZfdXYgICAgICAgICAgICAgPSB1djtcXG59XFxuXCJdKSxhPW4oW1wiI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGVcXG5cXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5mbG9hdCBiZWNrbWFubkRpc3RyaWJ1dGlvbihmbG9hdCB4LCBmbG9hdCByb3VnaG5lc3MpIHtcXG4gIGZsb2F0IE5kb3RIID0gbWF4KHgsIDAuMDAwMSk7XFxuICBmbG9hdCBjb3MyQWxwaGEgPSBOZG90SCAqIE5kb3RIO1xcbiAgZmxvYXQgdGFuMkFscGhhID0gKGNvczJBbHBoYSAtIDEuMCkgLyBjb3MyQWxwaGE7XFxuICBmbG9hdCByb3VnaG5lc3MyID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xcbiAgZmxvYXQgZGVub20gPSAzLjE0MTU5MjY1MzU4OTc5MyAqIHJvdWdobmVzczIgKiBjb3MyQWxwaGEgKiBjb3MyQWxwaGE7XFxuICByZXR1cm4gZXhwKHRhbjJBbHBoYSAvIHJvdWdobmVzczIpIC8gZGVub207XFxufVxcblxcbmZsb2F0IGNvb2tUb3JyYW5jZVNwZWN1bGFyKFxcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcXG4gIHZlYzMgdmlld0RpcmVjdGlvbixcXG4gIHZlYzMgc3VyZmFjZU5vcm1hbCxcXG4gIGZsb2F0IHJvdWdobmVzcyxcXG4gIGZsb2F0IGZyZXNuZWwpIHtcXG5cXG4gIGZsb2F0IFZkb3ROID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSwgMC4wKTtcXG4gIGZsb2F0IExkb3ROID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XFxuXFxuICAvL0hhbGYgYW5nbGUgdmVjdG9yXFxuICB2ZWMzIEggPSBub3JtYWxpemUobGlnaHREaXJlY3Rpb24gKyB2aWV3RGlyZWN0aW9uKTtcXG5cXG4gIC8vR2VvbWV0cmljIHRlcm1cXG4gIGZsb2F0IE5kb3RIID0gbWF4KGRvdChzdXJmYWNlTm9ybWFsLCBIKSwgMC4wKTtcXG4gIGZsb2F0IFZkb3RIID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xcbiAgZmxvYXQgTGRvdEggPSBtYXgoZG90KGxpZ2h0RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xcbiAgZmxvYXQgRzEgPSAoMi4wICogTmRvdEggKiBWZG90TikgLyBWZG90SDtcXG4gIGZsb2F0IEcyID0gKDIuMCAqIE5kb3RIICogTGRvdE4pIC8gTGRvdEg7XFxuICBmbG9hdCBHID0gbWluKDEuMCwgbWluKEcxLCBHMikpO1xcbiAgXFxuICAvL0Rpc3RyaWJ1dGlvbiB0ZXJtXFxuICBmbG9hdCBEID0gYmVja21hbm5EaXN0cmlidXRpb24oTmRvdEgsIHJvdWdobmVzcyk7XFxuXFxuICAvL0ZyZXNuZWwgdGVybVxcbiAgZmxvYXQgRiA9IHBvdygxLjAgLSBWZG90TiwgZnJlc25lbCk7XFxuXFxuICAvL011bHRpcGx5IHRlcm1zIGFuZCBkb25lXFxuICByZXR1cm4gIEcgKiBGICogRCAvIG1heCgzLjE0MTU5MjY1ICogVmRvdE4sIDAuMDAwMDAxKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcXG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XFxuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcXG59XFxuXFxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XFxudW5pZm9ybSBmbG9hdCByb3VnaG5lc3NcXG4gICAgICAgICAgICAsIGZyZXNuZWxcXG4gICAgICAgICAgICAsIGthbWJpZW50XFxuICAgICAgICAgICAgLCBrZGlmZnVzZVxcbiAgICAgICAgICAgICwga3NwZWN1bGFyXFxuICAgICAgICAgICAgLCBvcGFjaXR5O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxuXFxudmFyeWluZyB2ZWMzIGZfbm9ybWFsXFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cXG4gICAgICAgICAgICwgZl9leWVEaXJlY3Rpb25cXG4gICAgICAgICAgICwgZl9kYXRhXFxuICAgICAgICAgICAsIGZfcG9zaXRpb247XFxudmFyeWluZyB2ZWM0IGZfY29sb3I7XFxudmFyeWluZyB2ZWMyIGZfdXY7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9wb3NpdGlvbikpIGRpc2NhcmQ7XFxuICB2ZWMzIE4gPSBub3JtYWxpemUoZl9ub3JtYWwpO1xcbiAgdmVjMyBMID0gbm9ybWFsaXplKGZfbGlnaHREaXJlY3Rpb24pO1xcbiAgdmVjMyBWID0gbm9ybWFsaXplKGZfZXllRGlyZWN0aW9uKTtcXG5cXG4gIGlmKGdsX0Zyb250RmFjaW5nKSB7XFxuICAgIE4gPSAtTjtcXG4gIH1cXG5cXG4gIGZsb2F0IHNwZWN1bGFyID0gbWluKDEuMCwgbWF4KDAuMCwgY29va1RvcnJhbmNlU3BlY3VsYXIoTCwgViwgTiwgcm91Z2huZXNzLCBmcmVzbmVsKSkpO1xcbiAgZmxvYXQgZGlmZnVzZSAgPSBtaW4oa2FtYmllbnQgKyBrZGlmZnVzZSAqIG1heChkb3QoTiwgTCksIDAuMCksIDEuMCk7XFxuXFxuICB2ZWM0IHN1cmZhY2VDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dik7XFxuICB2ZWM0IGxpdENvbG9yID0gc3VyZmFjZUNvbG9yLmEgKiB2ZWM0KGRpZmZ1c2UgKiBzdXJmYWNlQ29sb3IucmdiICsga3NwZWN1bGFyICogdmVjMygxLDEsMSkgKiBzcGVjdWxhciwgIDEuMCk7XFxuXFxuICBnbF9GcmFnQ29sb3IgPSBsaXRDb2xvciAqIG9wYWNpdHk7XFxufVxcblwiXSksbz1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG52ZWMzIGdldE9ydGhvZ29uYWxWZWN0b3IodmVjMyB2KSB7XFxuICAvLyBSZXR1cm4gdXAtdmVjdG9yIGZvciBvbmx5LXogdmVjdG9yLlxcbiAgLy8gUmV0dXJuIGF4ICsgYnkgKyBjeiA9IDAsIGEgcG9pbnQgdGhhdCBsaWVzIG9uIHRoZSBwbGFuZSB0aGF0IGhhcyB2IGFzIGEgbm9ybWFsIGFuZCB0aGF0IGlzbid0ICgwLDAsMCkuXFxuICAvLyBGcm9tIHRoZSBhYm92ZSBpZi1zdGF0ZW1lbnQgd2UgaGF2ZSB8fGF8fCA+IDAgIFUgIHx8Ynx8ID4gMC5cXG4gIC8vIEFzc2lnbiB6ID0gMCwgeCA9IC1iLCB5ID0gYTpcXG4gIC8vIGEqLWIgKyBiKmEgKyBjKjAgPSAtYmEgKyBiYSArIDAgPSAwXFxuICBpZiAodi54KnYueCA+IHYueip2LnogfHwgdi55KnYueSA+IHYueip2LnopIHtcXG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKC12LnksIHYueCwgMC4wKSk7XFxuICB9IGVsc2Uge1xcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoMC4wLCB2LnosIC12LnkpKTtcXG4gIH1cXG59XFxuXFxuLy8gQ2FsY3VsYXRlIHRoZSB0dWJlIHZlcnRleCBhbmQgbm9ybWFsIGF0IHRoZSBnaXZlbiBpbmRleC5cXG4vL1xcbi8vIFRoZSByZXR1cm5lZCB2ZXJ0ZXggaXMgZm9yIGEgdHViZSByaW5nIHdpdGggaXRzIGNlbnRlciBhdCBvcmlnaW4sIHJhZGl1cyBvZiBsZW5ndGgoZCksIHBvaW50aW5nIGluIHRoZSBkaXJlY3Rpb24gb2YgZC5cXG4vL1xcbi8vIEVhY2ggdHViZSBzZWdtZW50IGlzIG1hZGUgdXAgb2YgYSByaW5nIG9mIHZlcnRpY2VzLlxcbi8vIFRoZXNlIHZlcnRpY2VzIGFyZSB1c2VkIHRvIG1ha2UgdXAgdGhlIHRyaWFuZ2xlcyBvZiB0aGUgdHViZSBieSBjb25uZWN0aW5nIHRoZW0gdG9nZXRoZXIgaW4gdGhlIHZlcnRleCBhcnJheS5cXG4vLyBUaGUgaW5kZXhlcyBvZiB0dWJlIHNlZ21lbnRzIHJ1biBmcm9tIDAgdG8gOC5cXG4vL1xcbnZlYzMgZ2V0VHViZVBvc2l0aW9uKHZlYzMgZCwgZmxvYXQgaW5kZXgsIG91dCB2ZWMzIG5vcm1hbCkge1xcbiAgZmxvYXQgc2VnbWVudENvdW50ID0gOC4wO1xcblxcbiAgZmxvYXQgYW5nbGUgPSAyLjAgKiAzLjE0MTU5ICogKGluZGV4IC8gc2VnbWVudENvdW50KTtcXG5cXG4gIHZlYzMgdSA9IGdldE9ydGhvZ29uYWxWZWN0b3IoZCk7XFxuICB2ZWMzIHYgPSBub3JtYWxpemUoY3Jvc3ModSwgZCkpO1xcblxcbiAgdmVjMyB4ID0gdSAqIGNvcyhhbmdsZSkgKiBsZW5ndGgoZCk7XFxuICB2ZWMzIHkgPSB2ICogc2luKGFuZ2xlKSAqIGxlbmd0aChkKTtcXG4gIHZlYzMgdjMgPSB4ICsgeTtcXG5cXG4gIG5vcm1hbCA9IG5vcm1hbGl6ZSh2Myk7XFxuXFxuICByZXR1cm4gdjM7XFxufVxcblxcbmF0dHJpYnV0ZSB2ZWM0IHZlY3RvcjtcXG5hdHRyaWJ1dGUgdmVjNCBwb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjNCBpZDtcXG5cXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XFxudW5pZm9ybSBmbG9hdCB0dWJlU2NhbGU7XFxuXFxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XFxudmFyeWluZyB2ZWM0IGZfaWQ7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgdmVjMyBub3JtYWw7XFxuICB2ZWMzIFhZWiA9IGdldFR1YmVQb3NpdGlvbihtYXQzKG1vZGVsKSAqICh0dWJlU2NhbGUgKiB2ZWN0b3IudyAqIG5vcm1hbGl6ZSh2ZWN0b3IueHl6KSksIHBvc2l0aW9uLncsIG5vcm1hbCk7XFxuICB2ZWM0IHR1YmVQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbi54eXosIDEuMCkgKyB2ZWM0KFhZWiwgMC4wKTtcXG5cXG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiB0dWJlUG9zaXRpb247XFxuICBmX2lkICAgICAgICA9IGlkO1xcbiAgZl9wb3NpdGlvbiAgPSBwb3NpdGlvbi54eXo7XFxufVxcblwiXSkscz1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XFxuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XFxufVxcblxcbnVuaWZvcm0gdmVjMyAgY2xpcEJvdW5kc1syXTtcXG51bmlmb3JtIGZsb2F0IHBpY2tJZDtcXG5cXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzQgZl9pZDtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBmX3Bvc2l0aW9uKSkgZGlzY2FyZDtcXG5cXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLCBmX2lkLnh5eik7XFxufVwiXSk7ci5tZXNoU2hhZGVyPXt2ZXJ0ZXg6aSxmcmFnbWVudDphLGF0dHJpYnV0ZXM6W3tuYW1lOlwicG9zaXRpb25cIix0eXBlOlwidmVjNFwifSx7bmFtZTpcIm5vcm1hbFwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwiY29sb3JcIix0eXBlOlwidmVjNFwifSx7bmFtZTpcInV2XCIsdHlwZTpcInZlYzJcIn0se25hbWU6XCJ2ZWN0b3JcIix0eXBlOlwidmVjNFwifV19LHIucGlja1NoYWRlcj17dmVydGV4Om8sZnJhZ21lbnQ6cyxhdHRyaWJ1dGVzOlt7bmFtZTpcInBvc2l0aW9uXCIsdHlwZTpcInZlYzRcIn0se25hbWU6XCJpZFwiLHR5cGU6XCJ2ZWM0XCJ9LHtuYW1lOlwidmVjdG9yXCIsdHlwZTpcInZlYzRcIn1dfX0se2dsc2xpZnk6NDAyfV0sMzA5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsLXNoYWRlclwiKSxpPXQoXCJnbC1idWZmZXJcIiksYT10KFwiZ2wtdmFvXCIpLG89dChcImdsLXRleHR1cmUyZFwiKSxzPXQoXCJub3JtYWxzXCIpLGw9dChcImdsLW1hdDQvbXVsdGlwbHlcIiksYz10KFwiZ2wtbWF0NC9pbnZlcnRcIiksdT10KFwibmRhcnJheVwiKSxoPXQoXCJjb2xvcm1hcFwiKSxmPXQoXCJzaW1wbGljaWFsLWNvbXBsZXgtY29udG91clwiKSxwPXQoXCJ0eXBlZGFycmF5LXBvb2xcIiksZD10KFwiLi9zaGFkZXJzXCIpLGc9ZC5tZXNoU2hhZGVyLHY9ZC5waWNrU2hhZGVyLG09WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIHkodCxlLHIsbixpLGEsbyxzLGwsYyx1LGgsZixwLGQsZyx2LHkseCxiLF8sdyxrLEEpe3RoaXMuZ2w9dCx0aGlzLmNlbGxzPVtdLHRoaXMucG9zaXRpb25zPVtdLHRoaXMuaW50ZW5zaXR5PVtdLHRoaXMudGV4dHVyZT1lLHRoaXMuZGlydHk9ITAsdGhpcy50cmlTaGFkZXI9cix0aGlzLnBpY2tTaGFkZXI9bix0aGlzLnRyaWFuZ2xlUG9zaXRpb25zPWksdGhpcy50cmlhbmdsZVZlY3RvcnM9YSx0aGlzLnRyaWFuZ2xlQ29sb3JzPXMsdGhpcy50cmlhbmdsZU5vcm1hbHM9Yyx0aGlzLnRyaWFuZ2xlVVZzPWwsdGhpcy50cmlhbmdsZUlkcz1vLHRoaXMudHJpYW5nbGVWQU89dSx0aGlzLnRyaWFuZ2xlQ291bnQ9MCx0aGlzLmxpbmVXaWR0aD0xLHRoaXMuZWRnZVBvc2l0aW9ucz1oLHRoaXMuZWRnZUNvbG9ycz1wLHRoaXMuZWRnZVVWcz1kLHRoaXMuZWRnZUlkcz1mLHRoaXMuZWRnZVZBTz1nLHRoaXMuZWRnZUNvdW50PTAsdGhpcy5wb2ludFBvc2l0aW9ucz12LHRoaXMucG9pbnRDb2xvcnM9eCx0aGlzLnBvaW50VVZzPWIsdGhpcy5wb2ludFNpemVzPV8sdGhpcy5wb2ludElkcz15LHRoaXMucG9pbnRWQU89dyx0aGlzLnBvaW50Q291bnQ9MCx0aGlzLmNvbnRvdXJMaW5lV2lkdGg9MSx0aGlzLmNvbnRvdXJQb3NpdGlvbnM9ayx0aGlzLmNvbnRvdXJWQU89QSx0aGlzLmNvbnRvdXJDb3VudD0wLHRoaXMuY29udG91ckNvbG9yPVswLDAsMF0sdGhpcy5jb250b3VyRW5hYmxlPSExLHRoaXMucGlja0lkPTEsdGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5jbGlwQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMubGlnaHRQb3NpdGlvbj1bMWU1LDFlNSwwXSx0aGlzLmFtYmllbnRMaWdodD0uOCx0aGlzLmRpZmZ1c2VMaWdodD0uOCx0aGlzLnNwZWN1bGFyTGlnaHQ9Mix0aGlzLnJvdWdobmVzcz0uNSx0aGlzLmZyZXNuZWw9MS41LHRoaXMub3BhY2l0eT0xLHRoaXMudHViZVNjYWxlPTEsdGhpcy5fbW9kZWw9bSx0aGlzLl92aWV3PW0sdGhpcy5fcHJvamVjdGlvbj1tLHRoaXMuX3Jlc29sdXRpb249WzEsMV0sdGhpcy5waXhlbFJhdGlvPTF9dmFyIHg9eS5wcm90b3R5cGU7ZnVuY3Rpb24gYih0KXt2YXIgZT1uKHQsdi52ZXJ0ZXgsdi5mcmFnbWVudCxudWxsLHYuYXR0cmlidXRlcyk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5pZC5sb2NhdGlvbj0xLGUuYXR0cmlidXRlcy52ZWN0b3IubG9jYXRpb249NSxlfXguaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5Pj0xfSx4LmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5PDF9LHgucGlja1Nsb3RzPTEseC5zZXRQaWNrQmFzZT1mdW5jdGlvbih0KXt0aGlzLnBpY2tJZD10fSx4LmhpZ2hsaWdodD1mdW5jdGlvbih0KXtpZih0JiZ0aGlzLmNvbnRvdXJFbmFibGUpe2Zvcih2YXIgZT1mKHRoaXMuY2VsbHMsdGhpcy5pbnRlbnNpdHksdC5pbnRlbnNpdHkpLHI9ZS5jZWxscyxuPWUudmVydGV4SWRzLGk9ZS52ZXJ0ZXhXZWlnaHRzLGE9ci5sZW5ndGgsbz1wLm1hbGxvY0Zsb2F0MzIoNiphKSxzPTAsbD0wO2w8YTsrK2wpZm9yKHZhciBjPXJbbF0sdT0wO3U8MjsrK3Upe3ZhciBoPWNbMF07Mj09PWMubGVuZ3RoJiYoaD1jW3VdKTtmb3IodmFyIGQ9bltoXVswXSxnPW5baF1bMV0sdj1pW2hdLG09MS12LHk9dGhpcy5wb3NpdGlvbnNbZF0seD10aGlzLnBvc2l0aW9uc1tnXSxiPTA7YjwzOysrYilvW3MrK109dip5W2JdK20qeFtiXX10aGlzLmNvbnRvdXJDb3VudD1zLzN8MCx0aGlzLmNvbnRvdXJQb3NpdGlvbnMudXBkYXRlKG8uc3ViYXJyYXkoMCxzKSkscC5mcmVlKG8pfWVsc2UgdGhpcy5jb250b3VyQ291bnQ9MH0seC51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZT10aGlzLmdsO3RoaXMuZGlydHk9ITAsXCJjb250b3VyRW5hYmxlXCJpbiB0JiYodGhpcy5jb250b3VyRW5hYmxlPXQuY29udG91ckVuYWJsZSksXCJjb250b3VyQ29sb3JcImluIHQmJih0aGlzLmNvbnRvdXJDb2xvcj10LmNvbnRvdXJDb2xvciksXCJsaW5lV2lkdGhcImluIHQmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCksXCJsaWdodFBvc2l0aW9uXCJpbiB0JiYodGhpcy5saWdodFBvc2l0aW9uPXQubGlnaHRQb3NpdGlvbiksXCJvcGFjaXR5XCJpbiB0JiYodGhpcy5vcGFjaXR5PXQub3BhY2l0eSksXCJhbWJpZW50XCJpbiB0JiYodGhpcy5hbWJpZW50TGlnaHQ9dC5hbWJpZW50KSxcImRpZmZ1c2VcImluIHQmJih0aGlzLmRpZmZ1c2VMaWdodD10LmRpZmZ1c2UpLFwic3BlY3VsYXJcImluIHQmJih0aGlzLnNwZWN1bGFyTGlnaHQ9dC5zcGVjdWxhciksXCJyb3VnaG5lc3NcImluIHQmJih0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyksXCJmcmVzbmVsXCJpbiB0JiYodGhpcy5mcmVzbmVsPXQuZnJlc25lbCksdC50ZXh0dXJlPyh0aGlzLnRleHR1cmUuZGlzcG9zZSgpLHRoaXMudGV4dHVyZT1vKGUsdC50ZXh0dXJlKSk6dC5jb2xvcm1hcCYmKHRoaXMudGV4dHVyZS5zaGFwZT1bMjU2LDI1Nl0sdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLkxJTkVBUl9NSVBNQVBfTElORUFSLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ZS5MSU5FQVIsdGhpcy50ZXh0dXJlLnNldFBpeGVscyhmdW5jdGlvbih0KXtmb3IodmFyIGU9aCh7Y29sb3JtYXA6dCxuc2hhZGVzOjI1Nixmb3JtYXQ6XCJyZ2JhXCJ9KSxyPW5ldyBVaW50OEFycmF5KDEwMjQpLG49MDtuPDI1NjsrK24pe2Zvcih2YXIgaT1lW25dLGE9MDthPDM7KythKXJbNCpuK2FdPWlbYV07cls0Km4rM109MjU1KmlbM119cmV0dXJuIHUocixbMjU2LDI1Niw0XSxbNCwwLDFdKX0odC5jb2xvcm1hcCkpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcCgpKTt2YXIgcj10LmNlbGxzLG49dC5wb3NpdGlvbnMsaT10LnZlY3RvcnM7aWYobiYmciYmaSl7dm9pZCAwIT09dC50dWJlU2NhbGUmJih0aGlzLnR1YmVTY2FsZT10LnR1YmVTY2FsZSk7dmFyIGE9W10sbD1bXSxjPVtdLGY9W10scD1bXSxkPVtdLGc9W10sdj1bXSxtPVtdLHk9W10seD1bXSxiPVtdLF89W10sdz1bXSxrPVtdO3RoaXMuY2VsbHM9cix0aGlzLnBvc2l0aW9ucz1uLHRoaXMudmVjdG9ycz1pO3ZhciBBPXQudmVydGV4Tm9ybWFscyxUPXQuY2VsbE5vcm1hbHMsTT12b2lkIDA9PT10LnZlcnRleE5vcm1hbHNFcHNpbG9uPzFlLTY6dC52ZXJ0ZXhOb3JtYWxzRXBzaWxvbixTPXZvaWQgMD09PXQuZmFjZU5vcm1hbHNFcHNpbG9uPzFlLTY6dC5mYWNlTm9ybWFsc0Vwc2lsb247dC51c2VGYWNldE5vcm1hbHMmJiFUJiYoVD1zLmZhY2VOb3JtYWxzKHIsbixTKSksVHx8QXx8KEE9cy52ZXJ0ZXhOb3JtYWxzKHIsbixNKSk7dmFyIEU9dC52ZXJ0ZXhDb2xvcnMsQz10LmNlbGxDb2xvcnMsTD10Lm1lc2hDb2xvcnx8WzEsMSwxLDFdLHo9dC52ZXJ0ZXhVVnMsTz10LnZlcnRleEludGVuc2l0eSxJPXQuY2VsbFVWcyxEPXQuY2VsbEludGVuc2l0eSxQPTEvMCxSPS0xLzA7aWYoIXomJiFJKWlmKE8paWYodC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHMpUD0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMF0sUj0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMV07ZWxzZSBmb3IodmFyIEY9MDtGPE8ubGVuZ3RoOysrRil7dmFyIEI9T1tGXTtQPU1hdGgubWluKFAsQiksUj1NYXRoLm1heChSLEIpfWVsc2UgaWYoRClmb3IoRj0wO0Y8RC5sZW5ndGg7KytGKXtCPURbRl07UD1NYXRoLm1pbihQLEIpLFI9TWF0aC5tYXgoUixCKX1lbHNlIGZvcihGPTA7RjxuLmxlbmd0aDsrK0Ype0I9bltGXVsyXTtQPU1hdGgubWluKFAsQiksUj1NYXRoLm1heChSLEIpfXRoaXMuaW50ZW5zaXR5PU98fChEP2Z1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKW5baV09MDt2YXIgYT10Lmxlbmd0aDtmb3IoaT0wO2k8YTsrK2kpZm9yKHZhciBvPXRbaV0scz0wO3M8by5sZW5ndGg7KytzKW5bb1tzXV09cltpXTtyZXR1cm4gbn0ocixuLmxlbmd0aCxEKTpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT10W25dWzJdO3JldHVybiByfShuKSk7dmFyIE49dC5wb2ludFNpemVzLGo9dC5wb2ludFNpemV8fDE7dGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV07Zm9yKEY9MDtGPG4ubGVuZ3RoOysrRilmb3IodmFyIFY9bltGXSxVPTA7VTwzOysrVSkhaXNOYU4oVltVXSkmJmlzRmluaXRlKFZbVV0pJiYodGhpcy5ib3VuZHNbMF1bVV09TWF0aC5taW4odGhpcy5ib3VuZHNbMF1bVV0sVltVXSksdGhpcy5ib3VuZHNbMV1bVV09TWF0aC5tYXgodGhpcy5ib3VuZHNbMV1bVV0sVltVXSkpO3ZhciBxPTAsSD0wLEc9MDt0OmZvcihGPTA7RjxyLmxlbmd0aDsrK0Ype3ZhciBZPXJbRl07c3dpdGNoKFkubGVuZ3RoKXtjYXNlIDE6Zm9yKFY9bltYPVlbMF1dLFU9MDtVPDM7KytVKWlmKGlzTmFOKFZbVV0pfHwhaXNGaW5pdGUoVltVXSkpY29udGludWUgdDt4LnB1c2goVlswXSxWWzFdLFZbMl0sVlszXSksMz09PShaPUU/RVtYXTpDP0NbRl06TCkubGVuZ3RoP2IucHVzaChaWzBdLFpbMV0sWlsyXSwxKTpiLnB1c2goWlswXSxaWzFdLFpbMl0sWlszXSksJD16P3pbWF06Tz9bKE9bWF0tUCkvKFItUCksMF06ST9JW0ZdOkQ/WyhEW0ZdLVApLyhSLVApLDBdOlsoVlsyXS1QKS8oUi1QKSwwXSxfLnB1c2goJFswXSwkWzFdKSxOP3cucHVzaChOW1hdKTp3LnB1c2goaiksay5wdXNoKEYpLEcrPTE7YnJlYWs7Y2FzZSAyOmZvcihVPTA7VTwyOysrVSl7Vj1uW1g9WVtVXV07Zm9yKHZhciBXPTA7VzwzOysrVylpZihpc05hTihWW1ddKXx8IWlzRmluaXRlKFZbV10pKWNvbnRpbnVlIHR9Zm9yKFU9MDtVPDI7KytVKXtWPW5bWD1ZW1VdXTtnLnB1c2goVlswXSxWWzFdLFZbMl0pLDM9PT0oWj1FP0VbWF06Qz9DW0ZdOkwpLmxlbmd0aD92LnB1c2goWlswXSxaWzFdLFpbMl0sMSk6di5wdXNoKFpbMF0sWlsxXSxaWzJdLFpbM10pLCQ9ej96W1hdOk8/WyhPW1hdLVApLyhSLVApLDBdOkk/SVtGXTpEP1soRFtGXS1QKS8oUi1QKSwwXTpbKFZbMl0tUCkvKFItUCksMF0sbS5wdXNoKCRbMF0sJFsxXSkseS5wdXNoKEYpfUgrPTE7YnJlYWs7Y2FzZSAzOmZvcihVPTA7VTwzOysrVSlmb3IoVj1uW1g9WVtVXV0sVz0wO1c8MzsrK1cpaWYoaXNOYU4oVltXXSl8fCFpc0Zpbml0ZShWW1ddKSljb250aW51ZSB0O2ZvcihVPTA7VTwzOysrVSl7dmFyIFg7Vj1uW1g9WVsyLVVdXTthLnB1c2goVlswXSxWWzFdLFZbMl0sVlszXSk7dmFyIFosJCxKLEs9aVtYXTtsLnB1c2goS1swXSxLWzFdLEtbMl0sS1szXSksMz09PShaPUU/RVtYXTpDP0NbRl06TCkubGVuZ3RoP2MucHVzaChaWzBdLFpbMV0sWlsyXSwxKTpjLnB1c2goWlswXSxaWzFdLFpbMl0sWlszXSksJD16P3pbWF06Tz9bKE9bWF0tUCkvKFItUCksMF06ST9JW0ZdOkQ/WyhEW0ZdLVApLyhSLVApLDBdOlsoVlsyXS1QKS8oUi1QKSwwXSxwLnB1c2goJFswXSwkWzFdKSxKPUE/QVtYXTpUW0ZdLGYucHVzaChKWzBdLEpbMV0sSlsyXSksZC5wdXNoKEYpfXErPTF9fXRoaXMucG9pbnRDb3VudD1HLHRoaXMuZWRnZUNvdW50PUgsdGhpcy50cmlhbmdsZUNvdW50PXEsdGhpcy5wb2ludFBvc2l0aW9ucy51cGRhdGUoeCksdGhpcy5wb2ludENvbG9ycy51cGRhdGUoYiksdGhpcy5wb2ludFVWcy51cGRhdGUoXyksdGhpcy5wb2ludFNpemVzLnVwZGF0ZSh3KSx0aGlzLnBvaW50SWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoaykpLHRoaXMuZWRnZVBvc2l0aW9ucy51cGRhdGUoZyksdGhpcy5lZGdlQ29sb3JzLnVwZGF0ZSh2KSx0aGlzLmVkZ2VVVnMudXBkYXRlKG0pLHRoaXMuZWRnZUlkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KHkpKSx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLnVwZGF0ZShhKSx0aGlzLnRyaWFuZ2xlVmVjdG9ycy51cGRhdGUobCksdGhpcy50cmlhbmdsZUNvbG9ycy51cGRhdGUoYyksdGhpcy50cmlhbmdsZVVWcy51cGRhdGUocCksdGhpcy50cmlhbmdsZU5vcm1hbHMudXBkYXRlKGYpLHRoaXMudHJpYW5nbGVJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheShkKSl9fSx4LmRyYXdUcmFuc3BhcmVudD14LmRyYXc9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fG0sbj10LnZpZXd8fG0saT10LnByb2plY3Rpb258fG0sYT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylhWzBdW29dPU1hdGgubWF4KGFbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxhWzFdW29dPU1hdGgubWluKGFbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt2YXIgcz17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGludmVyc2VNb2RlbDptLnNsaWNlKCksY2xpcEJvdW5kczphLGthbWJpZW50OnRoaXMuYW1iaWVudExpZ2h0LGtkaWZmdXNlOnRoaXMuZGlmZnVzZUxpZ2h0LGtzcGVjdWxhcjp0aGlzLnNwZWN1bGFyTGlnaHQscm91Z2huZXNzOnRoaXMucm91Z2huZXNzLGZyZXNuZWw6dGhpcy5mcmVzbmVsLGV5ZVBvc2l0aW9uOlswLDAsMF0sbGlnaHRQb3NpdGlvbjpbMCwwLDBdLG9wYWNpdHk6dGhpcy5vcGFjaXR5LHR1YmVTY2FsZTp0aGlzLnR1YmVTY2FsZSxjb250b3VyQ29sb3I6dGhpcy5jb250b3VyQ29sb3IsdGV4dHVyZTowfTtzLmludmVyc2VNb2RlbD1jKHMuaW52ZXJzZU1vZGVsLHMubW9kZWwpLGUuZGlzYWJsZShlLkNVTExfRkFDRSksdGhpcy50ZXh0dXJlLmJpbmQoMCk7dmFyIHU9bmV3IEFycmF5KDE2KTtsKHUscy52aWV3LHMubW9kZWwpLGwodSxzLnByb2plY3Rpb24sdSksYyh1LHUpO2ZvcihvPTA7bzwzOysrbylzLmV5ZVBvc2l0aW9uW29dPXVbMTIrb10vdVsxNV07dmFyIGg9dVsxNV07Zm9yKG89MDtvPDM7KytvKWgrPXRoaXMubGlnaHRQb3NpdGlvbltvXSp1WzQqbyszXTtmb3Iobz0wO288MzsrK28pe2Zvcih2YXIgZj11WzEyK29dLHA9MDtwPDM7KytwKWYrPXVbNCpwK29dKnRoaXMubGlnaHRQb3NpdGlvbltwXTtzLmxpZ2h0UG9zaXRpb25bb109Zi9ofWlmKHRoaXMudHJpYW5nbGVDb3VudD4wKXt2YXIgZD10aGlzLnRyaVNoYWRlcjtkLmJpbmQoKSxkLnVuaWZvcm1zPXMsdGhpcy50cmlhbmdsZVZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuVFJJQU5HTEVTLDAsMyp0aGlzLnRyaWFuZ2xlQ291bnQpLHRoaXMudHJpYW5nbGVWQU8udW5iaW5kKCl9fSx4LmRyYXdQaWNrPWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHxtLG49dC52aWV3fHxtLGk9dC5wcm9qZWN0aW9ufHxtLGE9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28pYVswXVtvXT1NYXRoLm1heChhWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksYVsxXVtvXT1NYXRoLm1pbihhWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dGhpcy5fbW9kZWw9W10uc2xpY2UuY2FsbChyKSx0aGlzLl92aWV3PVtdLnNsaWNlLmNhbGwobiksdGhpcy5fcHJvamVjdGlvbj1bXS5zbGljZS5jYWxsKGkpLHRoaXMuX3Jlc29sdXRpb249W2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF07dmFyIHM9e21vZGVsOnIsdmlldzpuLHByb2plY3Rpb246aSxjbGlwQm91bmRzOmEsdHViZVNjYWxlOnRoaXMudHViZVNjYWxlLHBpY2tJZDp0aGlzLnBpY2tJZC8yNTV9LGw9dGhpcy5waWNrU2hhZGVyO2wuYmluZCgpLGwudW5pZm9ybXM9cyx0aGlzLnRyaWFuZ2xlQ291bnQ+MCYmKHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpKSx0aGlzLmVkZ2VDb3VudD4wJiYodGhpcy5lZGdlVkFPLmJpbmQoKSxlLmxpbmVXaWR0aCh0aGlzLmxpbmVXaWR0aCp0aGlzLnBpeGVsUmF0aW8pLGUuZHJhd0FycmF5cyhlLkxJTkVTLDAsMip0aGlzLmVkZ2VDb3VudCksdGhpcy5lZGdlVkFPLnVuYmluZCgpKX0seC5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDt2YXIgZT10LnZhbHVlWzBdKzI1Nip0LnZhbHVlWzFdKzY1NTM2KnQudmFsdWVbMl0scj10aGlzLmNlbGxzW2VdLG49dGhpcy5wb3NpdGlvbnNbclsxXV0uc2xpY2UoMCwzKTtyZXR1cm57aW5kZXg6ZSxwb3NpdGlvbjpuLGludGVuc2l0eTp0aGlzLmludGVuc2l0eVtyWzFdXSx2ZWxvY2l0eTp0aGlzLnZlY3RvcnNbclsxXV0uc2xpY2UoMCwzKSxkaXZlcmdlbmNlOnRoaXMudmVjdG9yc1tyWzFdXVszXSxkYXRhQ29vcmRpbmF0ZTpufX0seC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRyaVNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVkFPLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVmVjdG9ycy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZUNvbG9ycy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVVWcy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZU5vcm1hbHMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVJZHMuZGlzcG9zZSgpLHRoaXMuZWRnZVZBTy5kaXNwb3NlKCksdGhpcy5lZGdlUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLmVkZ2VDb2xvcnMuZGlzcG9zZSgpLHRoaXMuZWRnZVVWcy5kaXNwb3NlKCksdGhpcy5lZGdlSWRzLmRpc3Bvc2UoKSx0aGlzLnBvaW50VkFPLmRpc3Bvc2UoKSx0aGlzLnBvaW50UG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLnBvaW50Q29sb3JzLmRpc3Bvc2UoKSx0aGlzLnBvaW50VVZzLmRpc3Bvc2UoKSx0aGlzLnBvaW50U2l6ZXMuZGlzcG9zZSgpLHRoaXMucG9pbnRJZHMuZGlzcG9zZSgpLHRoaXMuY29udG91clZBTy5kaXNwb3NlKCksdGhpcy5jb250b3VyUG9zaXRpb25zLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7MT09PWFyZ3VtZW50cy5sZW5ndGgmJih0PShlPXQpLmdsKTt2YXIgcj1lLnRyaVNoYWRlcnx8ZnVuY3Rpb24odCl7dmFyIGU9bih0LGcudmVydGV4LGcuZnJhZ21lbnQsbnVsbCxnLmF0dHJpYnV0ZXMpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlLmF0dHJpYnV0ZXMudmVjdG9yLmxvY2F0aW9uPTUsZX0odCkscz1iKHQpLGw9byh0LHUobmV3IFVpbnQ4QXJyYXkoWzI1NSwyNTUsMjU1LDI1NV0pLFsxLDEsNF0pKTtsLmdlbmVyYXRlTWlwbWFwKCksbC5taW5GaWx0ZXI9dC5MSU5FQVJfTUlQTUFQX0xJTkVBUixsLm1hZ0ZpbHRlcj10LkxJTkVBUjt2YXIgYz1pKHQpLGg9aSh0KSxmPWkodCkscD1pKHQpLGQ9aSh0KSx2PWkodCksbT1hKHQsW3tidWZmZXI6Yyx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOnYsdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6Zix0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOnAsdHlwZTp0LkZMT0FULHNpemU6Mn0se2J1ZmZlcjpkLHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6aCx0eXBlOnQuRkxPQVQsc2l6ZTo0fV0pLHg9aSh0KSxfPWkodCksdz1pKHQpLGs9aSh0KSxBPWEodCxbe2J1ZmZlcjp4LHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6ayx0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjpfLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6dyx0eXBlOnQuRkxPQVQsc2l6ZToyfV0pLFQ9aSh0KSxNPWkodCksUz1pKHQpLEU9aSh0KSxDPWkodCksTD1hKHQsW3tidWZmZXI6VCx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOkMsdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6TSx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOlMsdHlwZTp0LkZMT0FULHNpemU6Mn0se2J1ZmZlcjpFLHR5cGU6dC5GTE9BVCxzaXplOjF9XSksej1pKHQpLE89bmV3IHkodCxsLHIscyxjLGgsdixmLHAsZCxtLHgsayxfLHcsQSxULEMsTSxTLEUsTCx6LGEodCxbe2J1ZmZlcjp6LHR5cGU6dC5GTE9BVCxzaXplOjN9XSkpO3JldHVybiBPLnVwZGF0ZShlKSxPfX0se1wiLi9zaGFkZXJzXCI6MzA4LGNvbG9ybWFwOjExNyxcImdsLWJ1ZmZlclwiOjIzOCxcImdsLW1hdDQvaW52ZXJ0XCI6MjYyLFwiZ2wtbWF0NC9tdWx0aXBseVwiOjI2NCxcImdsLXNoYWRlclwiOjI5OCxcImdsLXRleHR1cmUyZFwiOjMxNSxcImdsLXZhb1wiOjMyMCxuZGFycmF5OjQ0Myxub3JtYWxzOjQ0NixcInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyXCI6NTAzLFwidHlwZWRhcnJheS1wb29sXCI6NTMwfV0sMzEwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsLXZlYzNcIiksaT10KFwiZ2wtdmVjNFwiKSxhPWZ1bmN0aW9uKHQsZSxyLGEpe2Zvcih2YXIgbz0wLHM9MDtzPHQubGVuZ3RoO3MrKylmb3IodmFyIGw9dFtzXS52ZWxvY2l0aWVzLGM9MDtjPGwubGVuZ3RoO2MrKyl7dmFyIHU9bi5sZW5ndGgobFtjXSk7dT5vJiYobz11KX12YXIgaD10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsYSl7dmFyIG8scyxsLGM9dC5wb2ludHMsdT10LnZlbG9jaXRpZXMsaD10LmRpdmVyZ2VuY2VzO24uc2V0KG4uY3JlYXRlKCksMCwxLDApLG4uY3JlYXRlKCksbi5jcmVhdGUoKTtuLmNyZWF0ZSgpO2Zvcih2YXIgZj1bXSxwPVtdLGQ9W10sZz1bXSx2PVtdLG09W10seT0wLHg9MCxiPWkuY3JlYXRlKCksXz1pLmNyZWF0ZSgpLHc9MDt3PGMubGVuZ3RoO3crKyl7bz1jW3ddLHM9dVt3XSxsPWhbd10sMD09PWUmJihsPS4wNSpyKSx4PW4ubGVuZ3RoKHMpL2EsYj1pLmNyZWF0ZSgpLG4uY29weShiLHMpLGJbM109bDtmb3IodmFyIGs9MDtrPDg7aysrKXZba109W29bMF0sb1sxXSxvWzJdLGtdO2lmKGcubGVuZ3RoPjApZm9yKGs9MDtrPDg7aysrKXt2YXIgQT0oaysxKSU4O2YucHVzaChnW2tdLHZba10sdltBXSx2W0FdLGdbQV0sZ1trXSksZC5wdXNoKF8sYixiLGIsXyxfKSxtLnB1c2goeSx4LHgseCx5LHkpLHAucHVzaChbZi5sZW5ndGgtNixmLmxlbmd0aC01LGYubGVuZ3RoLTRdLFtmLmxlbmd0aC0zLGYubGVuZ3RoLTIsZi5sZW5ndGgtMV0pfXZhciBUPWc7Zz12LHY9VCxUPV8sXz1iLGI9VCxUPXkseT14LHg9VH1yZXR1cm57cG9zaXRpb25zOmYsY2VsbHM6cCx2ZWN0b3JzOmQsdmVydGV4SW50ZW5zaXR5Om19fSh0LHIsYSxvKX0pLGY9W10scD1bXSxkPVtdLGc9W107Zm9yKHM9MDtzPGgubGVuZ3RoO3MrKyl7dmFyIHY9aFtzXSxtPWYubGVuZ3RoO2Y9Zi5jb25jYXQodi5wb3NpdGlvbnMpLGQ9ZC5jb25jYXQodi52ZWN0b3JzKSxnPWcuY29uY2F0KHYudmVydGV4SW50ZW5zaXR5KTtmb3IoYz0wO2M8di5jZWxscy5sZW5ndGg7YysrKXt2YXIgeT12LmNlbGxzW2NdLHg9W107cC5wdXNoKHgpO2Zvcih2YXIgYj0wO2I8eS5sZW5ndGg7YisrKXgucHVzaCh5W2JdK20pfX1yZXR1cm57cG9zaXRpb25zOmYsY2VsbHM6cCx2ZWN0b3JzOmQsdmVydGV4SW50ZW5zaXR5OmcsY29sb3JtYXA6ZX19LG89ZnVuY3Rpb24odCxlKXt2YXIgcj1uLmNyZWF0ZSgpLGk9MWUtNDtuLmFkZChyLHQsW2ksMCwwXSk7dmFyIGE9dGhpcy5nZXRWZWxvY2l0eShyKTtuLnN1YnRyYWN0KGEsYSxlKSxuLnNjYWxlKGEsYSwxZTQpLG4uYWRkKHIsdCxbMCxpLDBdKTt2YXIgbz10aGlzLmdldFZlbG9jaXR5KHIpO24uc3VidHJhY3QobyxvLGUpLG4uc2NhbGUobyxvLDFlNCksbi5hZGQocix0LFswLDAsaV0pO3ZhciBzPXRoaXMuZ2V0VmVsb2NpdHkocik7cmV0dXJuIG4uc3VidHJhY3QocyxzLGUpLG4uc2NhbGUocyxzLDFlNCksbi5hZGQocixhLG8pLG4uYWRkKHIscixzKSxyfSxzPWZ1bmN0aW9uKHQpe3JldHVybiBmKHQsdGhpcy52ZWN0b3JzLHRoaXMubWVzaGdyaWQsdGhpcy5jbGFtcEJvcmRlcnMpfSxsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07aWYobj09PWUpcmV0dXJuIHI7aWYobj5lKXJldHVybiByLTF9cmV0dXJuIHJ9LGM9bi5jcmVhdGUoKSx1PW4uY3JlYXRlKCksaD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ8ZT9lOnQ+cj9yOnR9LGY9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9dFswXSxvPXRbMV0scz10WzJdLGY9clswXS5sZW5ndGgscD1yWzFdLmxlbmd0aCxkPXJbMl0ubGVuZ3RoLGc9bChyWzBdLGEpLHY9bChyWzFdLG8pLG09bChyWzJdLHMpLHk9ZysxLHg9disxLGI9bSsxO2lmKHJbMF1bZ109PT1hJiYoeT1nKSxyWzFdW3ZdPT09byYmKHg9diksclsyXVttXT09PXMmJihiPW0pLGkmJihnPWgoZywwLGYtMSkseT1oKHksMCxmLTEpLHY9aCh2LDAscC0xKSx4PWgoeCwwLHAtMSksbT1oKG0sMCxkLTEpLGI9aChiLDAsZC0xKSksZzwwfHx2PDB8fG08MHx8eT49Znx8eD49cHx8Yj49ZClyZXR1cm4gbi5jcmVhdGUoKTt2YXIgXz0oYS1yWzBdW2ddKS8oclswXVt5XS1yWzBdW2ddKSx3PShvLXJbMV1bdl0pLyhyWzFdW3hdLXJbMV1bdl0pLGs9KHMtclsyXVttXSkvKHJbMl1bYl0tclsyXVttXSk7KF88MHx8Xz4xfHxpc05hTihfKSkmJihfPTApLCh3PDB8fHc+MXx8aXNOYU4odykpJiYodz0wKSwoazwwfHxrPjF8fGlzTmFOKGspKSYmKGs9MCk7dmFyIEE9bSpmKnAsVD1iKmYqcCxNPXYqZixTPXgqZixFPWcsQz15LEw9ZVtNK0ErRV0sej1lW00rQStDXSxPPWVbUytBK0VdLEk9ZVtTK0ErQ10sRD1lW00rVCtFXSxQPWVbTStUK0NdLFI9ZVtTK1QrRV0sRj1lW1MrVCtDXSxCPW4uY3JlYXRlKCk7cmV0dXJuIG4ubGVycChCLEwseixfKSxuLmxlcnAoYyxPLEksXyksbi5sZXJwKEIsQixjLHcpLG4ubGVycChjLEQsUCxfKSxuLmxlcnAodSxSLEYsXyksbi5sZXJwKGMsYyx1LHcpLG4ubGVycChCLEIsYyxrKSxCfSxwPWZ1bmN0aW9uKHQpe3ZhciBlPTEvMDt0LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSk7Zm9yKHZhciByPTE7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPU1hdGguYWJzKHRbcl0tdFtyLTFdKTtuPGUmJihlPW4pfXJldHVybiBlfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnN0YXJ0aW5nUG9zaXRpb25zLGk9dC5tYXhMZW5ndGh8fDFlMyxsPXQudHViZVNpemV8fDEsYz10LmFic29sdXRlVHViZVNpemU7dC5nZXREaXZlcmdlbmNlfHwodC5nZXREaXZlcmdlbmNlPW8pLHQuZ2V0VmVsb2NpdHl8fCh0LmdldFZlbG9jaXR5PXMpLHZvaWQgMD09PXQuY2xhbXBCb3JkZXJzJiYodC5jbGFtcEJvcmRlcnM9ITApO3ZhciB1PVtdLGg9ZVswXVswXSxmPWVbMF1bMV0sZD1lWzBdWzJdLGc9ZVsxXVswXSx2PWVbMV1bMV0sbT1lWzFdWzJdLHk9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl07cmV0dXJuIHI+PWgmJnI8PWcmJm4+PWYmJm48PXYmJmk+PWQmJmk8PW19LHg9MTAqbi5kaXN0YW5jZShlWzBdLGVbMV0pL2ksYj14KngsXz0xLHc9MDtuLmNyZWF0ZSgpO3IubGVuZ3RoPj0yJiYoXz1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj1bXSxuPVtdLGk9e30sYT17fSxvPXt9LHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIGw9dFtzXSxjPWxbMF0sdT1sWzFdLGg9bFsyXTtpW2NdfHwoZS5wdXNoKGMpLGlbY109ITApLGFbdV18fChyLnB1c2godSksYVt1XT0hMCksb1toXXx8KG4ucHVzaChoKSxvW2hdPSEwKX12YXIgZj1wKGUpLGQ9cChyKSxnPXAobiksdj1NYXRoLm1pbihmLGQsZyk7cmV0dXJuIGlzRmluaXRlKHYpP3Y6MX0ocikpO2Zvcih2YXIgaz0wO2s8ci5sZW5ndGg7aysrKXt2YXIgQT1uLmNyZWF0ZSgpO24uY29weShBLHJba10pO3ZhciBUPVtBXSxNPVtdLFM9dC5nZXRWZWxvY2l0eShBKSxFPUE7TS5wdXNoKFMpO3ZhciBDPVtdLEw9dC5nZXREaXZlcmdlbmNlKEEsUyk7KEQ9bi5sZW5ndGgoTCkpPncmJiFpc05hTihEKSYmaXNGaW5pdGUoRCkmJih3PUQpLEMucHVzaChEKSx1LnB1c2goe3BvaW50czpULHZlbG9jaXRpZXM6TSxkaXZlcmdlbmNlczpDfSk7Zm9yKHZhciB6PTA7ejwxMDAqaSYmVC5sZW5ndGg8aSYmeSgwLEEpOyl7eisrO3ZhciBPPW4uY2xvbmUoUyksST1uLnNxdWFyZWRMZW5ndGgoTyk7aWYoMD09PUkpYnJlYWs7aWYoST5iJiZuLnNjYWxlKE8sTyx4L01hdGguc3FydChJKSksbi5hZGQoTyxPLEEpLFM9dC5nZXRWZWxvY2l0eShPKSxuLnNxdWFyZWREaXN0YW5jZShFLE8pLWI+LTFlLTQqYil7VC5wdXNoKE8pLEU9TyxNLnB1c2goUyk7TD10LmdldERpdmVyZ2VuY2UoTyxTKTsoRD1uLmxlbmd0aChMKSk+dyYmIWlzTmFOKEQpJiZpc0Zpbml0ZShEKSYmKHc9RCksQy5wdXNoKEQpfUE9T319Zm9yKGs9MDtrPEMubGVuZ3RoO2srKyl7dmFyIEQ9Q1trXTshaXNOYU4oRCkmJmlzRmluaXRlKEQpfHwoQ1trXT13KX12YXIgUD1hKHUsdC5jb2xvcm1hcCx3LF8pO3JldHVybiBjP1AudHViZVNjYWxlPWM6KDA9PT13JiYodz0xKSxQLnR1YmVTY2FsZT0uNSpsKl8vdyksUH0sZS5leHBvcnRzLmNyZWF0ZVR1YmVNZXNoPXQoXCIuL2xpYi90dWJlbWVzaFwiKX0se1wiLi9saWIvdHViZW1lc2hcIjozMDksXCJnbC12ZWMzXCI6MzM5LFwiZ2wtdmVjNFwiOjM3NX1dLDMxMTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCJnbC1zaGFkZXJcIiksaT10KFwiZ2xzbGlmeVwiKSxhPWkoW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzQgdXY7XFxuYXR0cmlidXRlIHZlYzMgZjtcXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWw7XFxuXFxudW5pZm9ybSB2ZWMzIG9iamVjdE9mZnNldDtcXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb24sIGludmVyc2VNb2RlbDtcXG51bmlmb3JtIHZlYzMgbGlnaHRQb3NpdGlvbiwgZXllUG9zaXRpb247XFxudW5pZm9ybSBzYW1wbGVyMkQgY29sb3JtYXA7XFxuXFxudmFyeWluZyBmbG9hdCB2YWx1ZSwga2lsbDtcXG52YXJ5aW5nIHZlYzMgd29ybGRDb29yZGluYXRlO1xcbnZhcnlpbmcgdmVjMiBwbGFuZUNvb3JkaW5hdGU7XFxudmFyeWluZyB2ZWMzIGxpZ2h0RGlyZWN0aW9uLCBleWVEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWw7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWMzIGxvY2FsQ29vcmRpbmF0ZSA9IHZlYzModXYuencsIGYueCk7XFxuICB3b3JsZENvb3JkaW5hdGUgPSBvYmplY3RPZmZzZXQgKyBsb2NhbENvb3JkaW5hdGU7XFxuICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQod29ybGRDb29yZGluYXRlLCAxLjApO1xcbiAgdmVjNCBjbGlwUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIHdvcmxkUG9zaXRpb247XFxuICBnbF9Qb3NpdGlvbiA9IGNsaXBQb3NpdGlvbjtcXG4gIGtpbGwgPSBmLnk7XFxuICB2YWx1ZSA9IGYuejtcXG4gIHBsYW5lQ29vcmRpbmF0ZSA9IHV2Lnh5O1xcblxcbiAgdkNvbG9yID0gdGV4dHVyZTJEKGNvbG9ybWFwLCB2ZWMyKHZhbHVlLCB2YWx1ZSkpO1xcblxcbiAgLy9MaWdodGluZyBnZW9tZXRyeSBwYXJhbWV0ZXJzXFxuICB2ZWM0IGNhbWVyYUNvb3JkaW5hdGUgPSB2aWV3ICogd29ybGRQb3NpdGlvbjtcXG4gIGNhbWVyYUNvb3JkaW5hdGUueHl6IC89IGNhbWVyYUNvb3JkaW5hdGUudztcXG4gIGxpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xcbiAgZXllRGlyZWN0aW9uICAgPSBleWVQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xcbiAgc3VyZmFjZU5vcm1hbCAgPSBub3JtYWxpemUoKHZlYzQobm9ybWFsLDApICogaW52ZXJzZU1vZGVsKS54eXopO1xcbn1cXG5cIl0pLG89aShbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5mbG9hdCBiZWNrbWFubkRpc3RyaWJ1dGlvbihmbG9hdCB4LCBmbG9hdCByb3VnaG5lc3MpIHtcXG4gIGZsb2F0IE5kb3RIID0gbWF4KHgsIDAuMDAwMSk7XFxuICBmbG9hdCBjb3MyQWxwaGEgPSBOZG90SCAqIE5kb3RIO1xcbiAgZmxvYXQgdGFuMkFscGhhID0gKGNvczJBbHBoYSAtIDEuMCkgLyBjb3MyQWxwaGE7XFxuICBmbG9hdCByb3VnaG5lc3MyID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xcbiAgZmxvYXQgZGVub20gPSAzLjE0MTU5MjY1MzU4OTc5MyAqIHJvdWdobmVzczIgKiBjb3MyQWxwaGEgKiBjb3MyQWxwaGE7XFxuICByZXR1cm4gZXhwKHRhbjJBbHBoYSAvIHJvdWdobmVzczIpIC8gZGVub207XFxufVxcblxcbmZsb2F0IGJlY2ttYW5uU3BlY3VsYXIoXFxuICB2ZWMzIGxpZ2h0RGlyZWN0aW9uLFxcbiAgdmVjMyB2aWV3RGlyZWN0aW9uLFxcbiAgdmVjMyBzdXJmYWNlTm9ybWFsLFxcbiAgZmxvYXQgcm91Z2huZXNzKSB7XFxuICByZXR1cm4gYmVja21hbm5EaXN0cmlidXRpb24oZG90KHN1cmZhY2VOb3JtYWwsIG5vcm1hbGl6ZShsaWdodERpcmVjdGlvbiArIHZpZXdEaXJlY3Rpb24pKSwgcm91Z2huZXNzKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcXG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XFxuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcXG59XFxuXFxudW5pZm9ybSB2ZWMzIGxvd2VyQm91bmQsIHVwcGVyQm91bmQ7XFxudW5pZm9ybSBmbG9hdCBjb250b3VyVGludDtcXG51bmlmb3JtIHZlYzQgY29udG91ckNvbG9yO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGNvbG9ybWFwO1xcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzLCBmcmVzbmVsLCBrYW1iaWVudCwga2RpZmZ1c2UsIGtzcGVjdWxhciwgb3BhY2l0eTtcXG51bmlmb3JtIGZsb2F0IHZlcnRleENvbG9yO1xcblxcbnZhcnlpbmcgZmxvYXQgdmFsdWUsIGtpbGw7XFxudmFyeWluZyB2ZWMzIHdvcmxkQ29vcmRpbmF0ZTtcXG52YXJ5aW5nIHZlYzMgbGlnaHREaXJlY3Rpb24sIGV5ZURpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmICgoa2lsbCA+IDAuMCkgfHxcXG4gICAgICAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCB3b3JsZENvb3JkaW5hdGUpKSkgZGlzY2FyZDtcXG5cXG4gIHZlYzMgTiA9IG5vcm1hbGl6ZShzdXJmYWNlTm9ybWFsKTtcXG4gIHZlYzMgViA9IG5vcm1hbGl6ZShleWVEaXJlY3Rpb24pO1xcbiAgdmVjMyBMID0gbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uKTtcXG5cXG4gIGlmKGdsX0Zyb250RmFjaW5nKSB7XFxuICAgIE4gPSAtTjtcXG4gIH1cXG5cXG4gIGZsb2F0IHNwZWN1bGFyID0gbWF4KGJlY2ttYW5uU3BlY3VsYXIoTCwgViwgTiwgcm91Z2huZXNzKSwgMC4pO1xcbiAgZmxvYXQgZGlmZnVzZSAgPSBtaW4oa2FtYmllbnQgKyBrZGlmZnVzZSAqIG1heChkb3QoTiwgTCksIDAuMCksIDEuMCk7XFxuXFxuICAvL2RlY2lkZSBob3cgdG8gaW50ZXJwb2xhdGUgY29sb3IgXFx1MjAxNCBpbiB2ZXJ0ZXggb3IgaW4gZnJhZ21lbnRcXG4gIHZlYzQgc3VyZmFjZUNvbG9yID1cXG4gICAgc3RlcCh2ZXJ0ZXhDb2xvciwgLjUpICogdGV4dHVyZTJEKGNvbG9ybWFwLCB2ZWMyKHZhbHVlLCB2YWx1ZSkpICtcXG4gICAgc3RlcCguNSwgdmVydGV4Q29sb3IpICogdkNvbG9yO1xcblxcbiAgdmVjNCBsaXRDb2xvciA9IHN1cmZhY2VDb2xvci5hICogdmVjNChkaWZmdXNlICogc3VyZmFjZUNvbG9yLnJnYiArIGtzcGVjdWxhciAqIHZlYzMoMSwxLDEpICogc3BlY3VsYXIsICAxLjApO1xcblxcbiAgZ2xfRnJhZ0NvbG9yID0gbWl4KGxpdENvbG9yLCBjb250b3VyQ29sb3IsIGNvbnRvdXJUaW50KSAqIG9wYWNpdHk7XFxufVxcblwiXSkscz1pKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWM0IHV2O1xcbmF0dHJpYnV0ZSBmbG9hdCBmO1xcblxcbnVuaWZvcm0gdmVjMyBvYmplY3RPZmZzZXQ7XFxudW5pZm9ybSBtYXQzIHBlcm11dGF0aW9uO1xcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcXG51bmlmb3JtIGZsb2F0IGhlaWdodCwgek9mZnNldDtcXG51bmlmb3JtIHNhbXBsZXIyRCBjb2xvcm1hcDtcXG5cXG52YXJ5aW5nIGZsb2F0IHZhbHVlLCBraWxsO1xcbnZhcnlpbmcgdmVjMyB3b3JsZENvb3JkaW5hdGU7XFxudmFyeWluZyB2ZWMyIHBsYW5lQ29vcmRpbmF0ZTtcXG52YXJ5aW5nIHZlYzMgbGlnaHREaXJlY3Rpb24sIGV5ZURpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzMgZGF0YUNvb3JkaW5hdGUgPSBwZXJtdXRhdGlvbiAqIHZlYzModXYueHksIGhlaWdodCk7XFxuICB3b3JsZENvb3JkaW5hdGUgPSBvYmplY3RPZmZzZXQgKyBkYXRhQ29vcmRpbmF0ZTtcXG4gIHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsICogdmVjNCh3b3JsZENvb3JkaW5hdGUsIDEuMCk7XFxuXFxuICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogd29ybGRQb3NpdGlvbjtcXG4gIGNsaXBQb3NpdGlvbi56ICs9IHpPZmZzZXQ7XFxuXFxuICBnbF9Qb3NpdGlvbiA9IGNsaXBQb3NpdGlvbjtcXG4gIHZhbHVlID0gZiArIG9iamVjdE9mZnNldC56O1xcbiAga2lsbCA9IC0xLjA7XFxuICBwbGFuZUNvb3JkaW5hdGUgPSB1di56dztcXG5cXG4gIHZDb2xvciA9IHRleHR1cmUyRChjb2xvcm1hcCwgdmVjMih2YWx1ZSwgdmFsdWUpKTtcXG5cXG4gIC8vRG9uJ3QgZG8gbGlnaHRpbmcgZm9yIGNvbnRvdXJzXFxuICBzdXJmYWNlTm9ybWFsICAgPSB2ZWMzKDEsMCwwKTtcXG4gIGV5ZURpcmVjdGlvbiAgICA9IHZlYzMoMCwxLDApO1xcbiAgbGlnaHREaXJlY3Rpb24gID0gdmVjMygwLDAsMSk7XFxufVxcblwiXSksbD1pKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XFxuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XFxufVxcblxcbnVuaWZvcm0gdmVjMiBzaGFwZTtcXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcXG51bmlmb3JtIGZsb2F0IHBpY2tJZDtcXG5cXG52YXJ5aW5nIGZsb2F0IHZhbHVlLCBraWxsO1xcbnZhcnlpbmcgdmVjMyB3b3JsZENvb3JkaW5hdGU7XFxudmFyeWluZyB2ZWMyIHBsYW5lQ29vcmRpbmF0ZTtcXG52YXJ5aW5nIHZlYzMgc3VyZmFjZU5vcm1hbDtcXG5cXG52ZWMyIHNwbGl0RmxvYXQoZmxvYXQgdikge1xcbiAgZmxvYXQgdmggPSAyNTUuMCAqIHY7XFxuICBmbG9hdCB1cHBlciA9IGZsb29yKHZoKTtcXG4gIGZsb2F0IGxvd2VyID0gZnJhY3QodmgpO1xcbiAgcmV0dXJuIHZlYzIodXBwZXIgLyAyNTUuMCwgZmxvb3IobG93ZXIgKiAxNi4wKSAvIDE2LjApO1xcbn1cXG5cXG52b2lkIG1haW4oKSB7XFxuICBpZiAoKGtpbGwgPiAwLjApIHx8XFxuICAgICAgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgd29ybGRDb29yZGluYXRlKSkpIGRpc2NhcmQ7XFxuXFxuICB2ZWMyIHV4ID0gc3BsaXRGbG9hdChwbGFuZUNvb3JkaW5hdGUueCAvIHNoYXBlLngpO1xcbiAgdmVjMiB1eSA9IHNwbGl0RmxvYXQocGxhbmVDb29yZGluYXRlLnkgLyBzaGFwZS55KTtcXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLCB1eC54LCB1eS54LCB1eC55ICsgKHV5LnkvMTYuMCkpO1xcbn1cXG5cIl0pO3IuY3JlYXRlU2hhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxhLG8sbnVsbCxbe25hbWU6XCJ1dlwiLHR5cGU6XCJ2ZWM0XCJ9LHtuYW1lOlwiZlwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwibm9ybWFsXCIsdHlwZTpcInZlYzNcIn1dKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmYubG9jYXRpb249MSxlLmF0dHJpYnV0ZXMubm9ybWFsLmxvY2F0aW9uPTIsZX0sci5jcmVhdGVQaWNrU2hhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxhLGwsbnVsbCxbe25hbWU6XCJ1dlwiLHR5cGU6XCJ2ZWM0XCJ9LHtuYW1lOlwiZlwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwibm9ybWFsXCIsdHlwZTpcInZlYzNcIn1dKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmYubG9jYXRpb249MSxlLmF0dHJpYnV0ZXMubm9ybWFsLmxvY2F0aW9uPTIsZX0sci5jcmVhdGVDb250b3VyU2hhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxzLG8sbnVsbCxbe25hbWU6XCJ1dlwiLHR5cGU6XCJ2ZWM0XCJ9LHtuYW1lOlwiZlwiLHR5cGU6XCJmbG9hdFwifV0pO3JldHVybiBlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuZi5sb2NhdGlvbj0xLGV9LHIuY3JlYXRlUGlja0NvbnRvdXJTaGFkZXI9ZnVuY3Rpb24odCl7dmFyIGU9bih0LHMsbCxudWxsLFt7bmFtZTpcInV2XCIsdHlwZTpcInZlYzRcIn0se25hbWU6XCJmXCIsdHlwZTpcImZsb2F0XCJ9XSk7cmV0dXJuIGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5mLmxvY2F0aW9uPTEsZX19LHtcImdsLXNoYWRlclwiOjI5OCxnbHNsaWZ5OjQwMn1dLDMxMjpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsxMDJdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoxMDJ9XSwzMTM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPXkoZSksbj1iKGUpLHM9eChlKSxsPV8oZSksYz1pKGUpLHU9YShlLFt7YnVmZmVyOmMsc2l6ZTo0LHN0cmlkZTp3LG9mZnNldDowfSx7YnVmZmVyOmMsc2l6ZTozLHN0cmlkZTp3LG9mZnNldDoxNn0se2J1ZmZlcjpjLHNpemU6MyxzdHJpZGU6dyxvZmZzZXQ6Mjh9XSksaD1pKGUpLGY9YShlLFt7YnVmZmVyOmgsc2l6ZTo0LHN0cmlkZToyMCxvZmZzZXQ6MH0se2J1ZmZlcjpoLHNpemU6MSxzdHJpZGU6MjAsb2Zmc2V0OjE2fV0pLHA9aShlKSxkPWEoZSxbe2J1ZmZlcjpwLHNpemU6Mix0eXBlOmUuRkxPQVR9XSksZz1vKGUsMSxTLGUuUkdCQSxlLlVOU0lHTkVEX0JZVEUpO2cubWluRmlsdGVyPWUuTElORUFSLGcubWFnRmlsdGVyPWUuTElORUFSO3ZhciB2PW5ldyBFKGUsWzAsMF0sW1swLDAsMF0sWzAsMCwwXV0scixuLGMsdSxnLHMsbCxoLGYscCxkLFswLDAsMF0pLG09e2xldmVsczpbW10sW10sW11dfTtmb3IodmFyIGsgaW4gdCltW2tdPXRba107cmV0dXJuIG0uY29sb3JtYXA9bS5jb2xvcm1hcHx8XCJqZXRcIix2LnVwZGF0ZShtKSx2fTt2YXIgbj10KFwiYml0LXR3aWRkbGVcIiksaT10KFwiZ2wtYnVmZmVyXCIpLGE9dChcImdsLXZhb1wiKSxvPXQoXCJnbC10ZXh0dXJlMmRcIikscz10KFwidHlwZWRhcnJheS1wb29sXCIpLGw9dChcImNvbG9ybWFwXCIpLGM9dChcIm5kYXJyYXktb3BzXCIpLHU9dChcIm5kYXJyYXktcGFja1wiKSxoPXQoXCJuZGFycmF5XCIpLGY9dChcInN1cmZhY2UtbmV0c1wiKSxwPXQoXCJnbC1tYXQ0L211bHRpcGx5XCIpLGQ9dChcImdsLW1hdDQvaW52ZXJ0XCIpLGc9dChcImJpbmFyeS1zZWFyY2gtYm91bmRzXCIpLHY9dChcIm5kYXJyYXktZ3JhZGllbnRcIiksbT10KFwiLi9saWIvc2hhZGVyc1wiKSx5PW0uY3JlYXRlU2hhZGVyLHg9bS5jcmVhdGVDb250b3VyU2hhZGVyLGI9bS5jcmVhdGVQaWNrU2hhZGVyLF89bS5jcmVhdGVQaWNrQ29udG91clNoYWRlcix3PTQwLGs9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdLEE9W1swLDBdLFswLDFdLFsxLDBdLFsxLDFdLFsxLDBdLFswLDFdXSxUPVtbMCwwLDAsMCwwLDAsMCwwLDBdLFswLDAsMCwwLDAsMCwwLDAsMF0sWzAsMCwwLDAsMCwwLDAsMCwwXV07ZnVuY3Rpb24gTSh0LGUscixuLGkpe3RoaXMucG9zaXRpb249dCx0aGlzLmluZGV4PWUsdGhpcy51dj1yLHRoaXMubGV2ZWw9bix0aGlzLmRhdGFDb29yZGluYXRlPWl9IWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDwzOysrdCl7dmFyIGU9VFt0XSxyPSh0KzIpJTM7ZVsodCsxKSUzKzBdPTEsZVtyKzNdPTEsZVt0KzZdPTF9fSgpO3ZhciBTPTI1NjtmdW5jdGlvbiBFKHQsZSxyLG4saSxhLG8sbCxjLHUsZixwLGQsZyx2KXt0aGlzLmdsPXQsdGhpcy5zaGFwZT1lLHRoaXMuYm91bmRzPXIsdGhpcy5vYmplY3RPZmZzZXQ9dix0aGlzLmludGVuc2l0eUJvdW5kcz1bXSx0aGlzLl9zaGFkZXI9bix0aGlzLl9waWNrU2hhZGVyPWksdGhpcy5fY29vcmRpbmF0ZUJ1ZmZlcj1hLHRoaXMuX3Zhbz1vLHRoaXMuX2NvbG9yTWFwPWwsdGhpcy5fY29udG91clNoYWRlcj1jLHRoaXMuX2NvbnRvdXJQaWNrU2hhZGVyPXUsdGhpcy5fY29udG91ckJ1ZmZlcj1mLHRoaXMuX2NvbnRvdXJWQU89cCx0aGlzLl9jb250b3VyT2Zmc2V0cz1bW10sW10sW11dLHRoaXMuX2NvbnRvdXJDb3VudHM9W1tdLFtdLFtdXSx0aGlzLl92ZXJ0ZXhDb3VudD0wLHRoaXMuX3BpY2tSZXN1bHQ9bmV3IE0oWzAsMCwwXSxbMCwwXSxbMCwwXSxbMCwwLDBdLFswLDAsMF0pLHRoaXMuX2R5bmFtaWNCdWZmZXI9ZCx0aGlzLl9keW5hbWljVkFPPWcsdGhpcy5fZHluYW1pY09mZnNldHM9WzAsMCwwXSx0aGlzLl9keW5hbWljQ291bnRzPVswLDAsMF0sdGhpcy5jb250b3VyV2lkdGg9WzEsMSwxXSx0aGlzLmNvbnRvdXJMZXZlbHM9W1sxXSxbMV0sWzFdXSx0aGlzLmNvbnRvdXJUaW50PVswLDAsMF0sdGhpcy5jb250b3VyQ29sb3I9W1suNSwuNSwuNSwxXSxbLjUsLjUsLjUsMV0sWy41LC41LC41LDFdXSx0aGlzLnNob3dDb250b3VyPSEwLHRoaXMuc2hvd1N1cmZhY2U9ITAsdGhpcy5lbmFibGVIaWdobGlnaHQ9WyEwLCEwLCEwXSx0aGlzLmhpZ2hsaWdodENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5oaWdobGlnaHRUaW50PVsxLDEsMV0sdGhpcy5oaWdobGlnaHRMZXZlbD1bLTEsLTEsLTFdLHRoaXMuZW5hYmxlRHluYW1pYz1bITAsITAsITBdLHRoaXMuZHluYW1pY0xldmVsPVtOYU4sTmFOLE5hTl0sdGhpcy5keW5hbWljQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmR5bmFtaWNUaW50PVsxLDEsMV0sdGhpcy5keW5hbWljV2lkdGg9WzEsMSwxXSx0aGlzLmF4ZXNCb3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5zdXJmYWNlUHJvamVjdD1bITEsITEsITFdLHRoaXMuY29udG91clByb2plY3Q9W1shMSwhMSwhMV0sWyExLCExLCExXSxbITEsITEsITFdXSx0aGlzLmNvbG9yQm91bmRzPVshMSwhMV0sdGhpcy5fZmllbGQ9W2gocy5tYWxsb2NGbG9hdCgxMDI0KSxbMCwwXSksaChzLm1hbGxvY0Zsb2F0KDEwMjQpLFswLDBdKSxoKHMubWFsbG9jRmxvYXQoMTAyNCksWzAsMF0pXSx0aGlzLnBpY2tJZD0xLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLnNuYXBUb0RhdGE9ITEsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5vcGFjaXR5PTEsdGhpcy5saWdodFBvc2l0aW9uPVsxMCwxZTQsMF0sdGhpcy5hbWJpZW50TGlnaHQ9LjgsdGhpcy5kaWZmdXNlTGlnaHQ9LjgsdGhpcy5zcGVjdWxhckxpZ2h0PTIsdGhpcy5yb3VnaG5lc3M9LjUsdGhpcy5mcmVzbmVsPTEuNSx0aGlzLnZlcnRleENvbG9yPTAsdGhpcy5kaXJ0eT0hMH12YXIgQz1FLnByb3RvdHlwZTtDLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5PDF9LEMuaXNPcGFxdWU9ZnVuY3Rpb24oKXtpZih0aGlzLm9wYWNpdHk+PTEpcmV0dXJuITA7Zm9yKHZhciB0PTA7dDwzOysrdClpZih0aGlzLl9jb250b3VyQ291bnRzW3RdLmxlbmd0aD4wfHx0aGlzLl9keW5hbWljQ291bnRzW3RdPjApcmV0dXJuITA7cmV0dXJuITF9LEMucGlja1Nsb3RzPTEsQy5zZXRQaWNrQmFzZT1mdW5jdGlvbih0KXt0aGlzLnBpY2tJZD10fTt2YXIgTD1bMCwwLDBdLHo9e3Nob3dTdXJmYWNlOiExLHNob3dDb250b3VyOiExLHByb2plY3Rpb25zOltrLnNsaWNlKCksay5zbGljZSgpLGsuc2xpY2UoKV0sY2xpcEJvdW5kczpbW1swLDAsMF0sWzAsMCwwXV0sW1swLDAsMF0sWzAsMCwwXV0sW1swLDAsMF0sWzAsMCwwXV1dfTtmdW5jdGlvbiBPKHQsZSl7dmFyIHIsbixpLGE9ZS5heGVzJiZlLmF4ZXMubGFzdEN1YmVQcm9wcy5heGlzfHxMLG89ZS5zaG93U3VyZmFjZSxzPWUuc2hvd0NvbnRvdXI7Zm9yKHI9MDtyPDM7KytyKWZvcihvPW98fGUuc3VyZmFjZVByb2plY3Rbcl0sbj0wO248MzsrK24pcz1zfHxlLmNvbnRvdXJQcm9qZWN0W3JdW25dO2ZvcihyPTA7cjwzOysrcil7dmFyIGw9ei5wcm9qZWN0aW9uc1tyXTtmb3Iobj0wO248MTY7KytuKWxbbl09MDtmb3Iobj0wO248NDsrK24pbFs1Km5dPTE7bFs1KnJdPTAsbFsxMityXT1lLmF4ZXNCb3VuZHNbKyhhW3JdPjApXVtyXSxwKGwsdC5tb2RlbCxsKTt2YXIgYz16LmNsaXBCb3VuZHNbcl07Zm9yKGk9MDtpPDI7KytpKWZvcihuPTA7bjwzOysrbiljW2ldW25dPXQuY2xpcEJvdW5kc1tpXVtuXTtjWzBdW3JdPS0xZTgsY1sxXVtyXT0xZTh9cmV0dXJuIHouc2hvd1N1cmZhY2U9byx6LnNob3dDb250b3VyPXMsen12YXIgST17bW9kZWw6ayx2aWV3OmsscHJvamVjdGlvbjprLGludmVyc2VNb2RlbDprLnNsaWNlKCksbG93ZXJCb3VuZDpbMCwwLDBdLHVwcGVyQm91bmQ6WzAsMCwwXSxjb2xvck1hcDowLGNsaXBCb3VuZHM6W1swLDAsMF0sWzAsMCwwXV0saGVpZ2h0OjAsY29udG91clRpbnQ6MCxjb250b3VyQ29sb3I6WzAsMCwwLDFdLHBlcm11dGF0aW9uOlsxLDAsMCwwLDEsMCwwLDAsMV0sek9mZnNldDotMWUtNCxvYmplY3RPZmZzZXQ6WzAsMCwwXSxrYW1iaWVudDoxLGtkaWZmdXNlOjEsa3NwZWN1bGFyOjEsbGlnaHRQb3NpdGlvbjpbMWUzLDFlMywxZTNdLGV5ZVBvc2l0aW9uOlswLDAsMF0scm91Z2huZXNzOjEsZnJlc25lbDoxLG9wYWNpdHk6MSx2ZXJ0ZXhDb2xvcjowfSxEPWsuc2xpY2UoKSxQPVsxLDAsMCwwLDEsMCwwLDAsMV07ZnVuY3Rpb24gUih0LGUpe3Q9dHx8e307dmFyIHI9dGhpcy5nbDtyLmRpc2FibGUoci5DVUxMX0ZBQ0UpLHRoaXMuX2NvbG9yTWFwLmJpbmQoMCk7dmFyIG49STtuLm1vZGVsPXQubW9kZWx8fGssbi52aWV3PXQudmlld3x8ayxuLnByb2plY3Rpb249dC5wcm9qZWN0aW9ufHxrLG4ubG93ZXJCb3VuZD1bdGhpcy5ib3VuZHNbMF1bMF0sdGhpcy5ib3VuZHNbMF1bMV0sdGhpcy5jb2xvckJvdW5kc1swXXx8dGhpcy5ib3VuZHNbMF1bMl1dLG4udXBwZXJCb3VuZD1bdGhpcy5ib3VuZHNbMV1bMF0sdGhpcy5ib3VuZHNbMV1bMV0sdGhpcy5jb2xvckJvdW5kc1sxXXx8dGhpcy5ib3VuZHNbMV1bMl1dLG4ub2JqZWN0T2Zmc2V0PXRoaXMub2JqZWN0T2Zmc2V0LG4uY29udG91ckNvbG9yPXRoaXMuY29udG91ckNvbG9yWzBdLG4uaW52ZXJzZU1vZGVsPWQobi5pbnZlcnNlTW9kZWwsbi5tb2RlbCk7Zm9yKHZhciBpPTA7aTwyOysraSlmb3IodmFyIGE9bi5jbGlwQm91bmRzW2ldLG89MDtvPDM7KytvKWFbb109TWF0aC5taW4oTWF0aC5tYXgodGhpcy5jbGlwQm91bmRzW2ldW29dLC0xZTgpLDFlOCk7bi5rYW1iaWVudD10aGlzLmFtYmllbnRMaWdodCxuLmtkaWZmdXNlPXRoaXMuZGlmZnVzZUxpZ2h0LG4ua3NwZWN1bGFyPXRoaXMuc3BlY3VsYXJMaWdodCxuLnJvdWdobmVzcz10aGlzLnJvdWdobmVzcyxuLmZyZXNuZWw9dGhpcy5mcmVzbmVsLG4ub3BhY2l0eT10aGlzLm9wYWNpdHksbi5oZWlnaHQ9MCxuLnBlcm11dGF0aW9uPVAsbi52ZXJ0ZXhDb2xvcj10aGlzLnZlcnRleENvbG9yO3ZhciBzPUQ7Zm9yKHAocyxuLnZpZXcsbi5tb2RlbCkscChzLG4ucHJvamVjdGlvbixzKSxkKHMscyksaT0wO2k8MzsrK2kpbi5leWVQb3NpdGlvbltpXT1zWzEyK2ldL3NbMTVdO3ZhciBsPXNbMTVdO2ZvcihpPTA7aTwzOysraSlsKz10aGlzLmxpZ2h0UG9zaXRpb25baV0qc1s0KmkrM107Zm9yKGk9MDtpPDM7KytpKXt2YXIgYz1zWzEyK2ldO2ZvcihvPTA7bzwzOysrbyljKz1zWzQqbytpXSp0aGlzLmxpZ2h0UG9zaXRpb25bb107bi5saWdodFBvc2l0aW9uW2ldPWMvbH12YXIgdT1PKG4sdGhpcyk7aWYodS5zaG93U3VyZmFjZSYmZT09PXRoaXMub3BhY2l0eTwxKXtmb3IodGhpcy5fc2hhZGVyLmJpbmQoKSx0aGlzLl9zaGFkZXIudW5pZm9ybXM9bix0aGlzLl92YW8uYmluZCgpLHRoaXMuc2hvd1N1cmZhY2UmJnRoaXMuX3ZlcnRleENvdW50JiZ0aGlzLl92YW8uZHJhdyhyLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCksaT0wO2k8MzsrK2kpdGhpcy5zdXJmYWNlUHJvamVjdFtpXSYmdGhpcy52ZXJ0ZXhDb3VudCYmKHRoaXMuX3NoYWRlci51bmlmb3Jtcy5tb2RlbD11LnByb2plY3Rpb25zW2ldLHRoaXMuX3NoYWRlci51bmlmb3Jtcy5jbGlwQm91bmRzPXUuY2xpcEJvdW5kc1tpXSx0aGlzLl92YW8uZHJhdyhyLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCkpO3RoaXMuX3Zhby51bmJpbmQoKX1pZih1LnNob3dDb250b3VyJiYhZSl7dmFyIGg9dGhpcy5fY29udG91clNoYWRlcjtuLmthbWJpZW50PTEsbi5rZGlmZnVzZT0wLG4ua3NwZWN1bGFyPTAsbi5vcGFjaXR5PTEsaC5iaW5kKCksaC51bmlmb3Jtcz1uO3ZhciBmPXRoaXMuX2NvbnRvdXJWQU87Zm9yKGYuYmluZCgpLGk9MDtpPDM7KytpKWZvcihoLnVuaWZvcm1zLnBlcm11dGF0aW9uPVRbaV0sci5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbaV0qdGhpcy5waXhlbFJhdGlvKSxvPTA7bzx0aGlzLmNvbnRvdXJMZXZlbHNbaV0ubGVuZ3RoOysrbylvPT09dGhpcy5oaWdobGlnaHRMZXZlbFtpXT8oaC51bmlmb3Jtcy5jb250b3VyQ29sb3I9dGhpcy5oaWdobGlnaHRDb2xvcltpXSxoLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuaGlnaGxpZ2h0VGludFtpXSk6MCE9PW8mJm8tMSE9PXRoaXMuaGlnaGxpZ2h0TGV2ZWxbaV18fChoLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmNvbnRvdXJDb2xvcltpXSxoLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuY29udG91clRpbnRbaV0pLHRoaXMuX2NvbnRvdXJDb3VudHNbaV1bb10mJihoLnVuaWZvcm1zLmhlaWdodD10aGlzLmNvbnRvdXJMZXZlbHNbaV1bb10sZi5kcmF3KHIuTElORVMsdGhpcy5fY29udG91ckNvdW50c1tpXVtvXSx0aGlzLl9jb250b3VyT2Zmc2V0c1tpXVtvXSkpO2ZvcihpPTA7aTwzOysraSlmb3IoaC51bmlmb3Jtcy5tb2RlbD11LnByb2plY3Rpb25zW2ldLGgudW5pZm9ybXMuY2xpcEJvdW5kcz11LmNsaXBCb3VuZHNbaV0sbz0wO288MzsrK28paWYodGhpcy5jb250b3VyUHJvamVjdFtpXVtvXSl7aC51bmlmb3Jtcy5wZXJtdXRhdGlvbj1UW29dLHIubGluZVdpZHRoKHRoaXMuY29udG91cldpZHRoW29dKnRoaXMucGl4ZWxSYXRpbyk7Zm9yKHZhciBnPTA7Zzx0aGlzLmNvbnRvdXJMZXZlbHNbb10ubGVuZ3RoOysrZylnPT09dGhpcy5oaWdobGlnaHRMZXZlbFtvXT8oaC51bmlmb3Jtcy5jb250b3VyQ29sb3I9dGhpcy5oaWdobGlnaHRDb2xvcltvXSxoLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuaGlnaGxpZ2h0VGludFtvXSk6MCE9PWcmJmctMSE9PXRoaXMuaGlnaGxpZ2h0TGV2ZWxbb118fChoLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmNvbnRvdXJDb2xvcltvXSxoLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuY29udG91clRpbnRbb10pLHRoaXMuX2NvbnRvdXJDb3VudHNbb11bZ10mJihoLnVuaWZvcm1zLmhlaWdodD10aGlzLmNvbnRvdXJMZXZlbHNbb11bZ10sZi5kcmF3KHIuTElORVMsdGhpcy5fY29udG91ckNvdW50c1tvXVtnXSx0aGlzLl9jb250b3VyT2Zmc2V0c1tvXVtnXSkpfWZvcihmLnVuYmluZCgpLChmPXRoaXMuX2R5bmFtaWNWQU8pLmJpbmQoKSxpPTA7aTwzOysraSlpZigwIT09dGhpcy5fZHluYW1pY0NvdW50c1tpXSlmb3IoaC51bmlmb3Jtcy5tb2RlbD1uLm1vZGVsLGgudW5pZm9ybXMuY2xpcEJvdW5kcz1uLmNsaXBCb3VuZHMsaC51bmlmb3Jtcy5wZXJtdXRhdGlvbj1UW2ldLHIubGluZVdpZHRoKHRoaXMuZHluYW1pY1dpZHRoW2ldKnRoaXMucGl4ZWxSYXRpbyksaC51bmlmb3Jtcy5jb250b3VyQ29sb3I9dGhpcy5keW5hbWljQ29sb3JbaV0saC51bmlmb3Jtcy5jb250b3VyVGludD10aGlzLmR5bmFtaWNUaW50W2ldLGgudW5pZm9ybXMuaGVpZ2h0PXRoaXMuZHluYW1pY0xldmVsW2ldLGYuZHJhdyhyLkxJTkVTLHRoaXMuX2R5bmFtaWNDb3VudHNbaV0sdGhpcy5fZHluYW1pY09mZnNldHNbaV0pLG89MDtvPDM7KytvKXRoaXMuY29udG91clByb2plY3Rbb11baV0mJihoLnVuaWZvcm1zLm1vZGVsPXUucHJvamVjdGlvbnNbb10saC51bmlmb3Jtcy5jbGlwQm91bmRzPXUuY2xpcEJvdW5kc1tvXSxmLmRyYXcoci5MSU5FUyx0aGlzLl9keW5hbWljQ291bnRzW2ldLHRoaXMuX2R5bmFtaWNPZmZzZXRzW2ldKSk7Zi51bmJpbmQoKX19Qy5kcmF3PWZ1bmN0aW9uKHQpe3JldHVybiBSLmNhbGwodGhpcyx0LCExKX0sQy5kcmF3VHJhbnNwYXJlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIFIuY2FsbCh0aGlzLHQsITApfTt2YXIgRj17bW9kZWw6ayx2aWV3OmsscHJvamVjdGlvbjprLGludmVyc2VNb2RlbDprLGNsaXBCb3VuZHM6W1swLDAsMF0sWzAsMCwwXV0saGVpZ2h0OjAsc2hhcGU6WzAsMF0scGlja0lkOjAsbG93ZXJCb3VuZDpbMCwwLDBdLHVwcGVyQm91bmQ6WzAsMCwwXSx6T2Zmc2V0OjAsb2JqZWN0T2Zmc2V0OlswLDAsMF0scGVybXV0YXRpb246WzEsMCwwLDAsMSwwLDAsMCwxXSxsaWdodFBvc2l0aW9uOlswLDAsMF0sZXllUG9zaXRpb246WzAsMCwwXX07ZnVuY3Rpb24gQih0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP1tlKHRbMF0pLGUodFsxXSksZSh0WzJdKV06W2UodCksZSh0KSxlKHQpXX1mdW5jdGlvbiBOKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpPzM9PT10Lmxlbmd0aD9bdFswXSx0WzFdLHRbMl0sMV06W3RbMF0sdFsxXSx0WzJdLHRbM11dOlswLDAsMCwxXX1mdW5jdGlvbiBqKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuW04odFswXSksTih0WzFdKSxOKHRbMl0pXTt2YXIgZT1OKHQpO3JldHVybltlLnNsaWNlKCksZS5zbGljZSgpLGUuc2xpY2UoKV19fUMuZHJhd1BpY2s9ZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZT10aGlzLmdsO2UuZGlzYWJsZShlLkNVTExfRkFDRSk7dmFyIHI9RjtyLm1vZGVsPXQubW9kZWx8fGssci52aWV3PXQudmlld3x8ayxyLnByb2plY3Rpb249dC5wcm9qZWN0aW9ufHxrLHIuc2hhcGU9dGhpcy5fZmllbGRbMl0uc2hhcGUsci5waWNrSWQ9dGhpcy5waWNrSWQvMjU1LHIubG93ZXJCb3VuZD10aGlzLmJvdW5kc1swXSxyLnVwcGVyQm91bmQ9dGhpcy5ib3VuZHNbMV0sci5vYmplY3RPZmZzZXQ9dGhpcy5vYmplY3RPZmZzZXQsci5wZXJtdXRhdGlvbj1QO2Zvcih2YXIgbj0wO248MjsrK24pZm9yKHZhciBpPXIuY2xpcEJvdW5kc1tuXSxhPTA7YTwzOysrYSlpW2FdPU1hdGgubWluKE1hdGgubWF4KHRoaXMuY2xpcEJvdW5kc1tuXVthXSwtMWU4KSwxZTgpO3ZhciBvPU8ocix0aGlzKTtpZihvLnNob3dTdXJmYWNlKXtmb3IodGhpcy5fcGlja1NoYWRlci5iaW5kKCksdGhpcy5fcGlja1NoYWRlci51bmlmb3Jtcz1yLHRoaXMuX3Zhby5iaW5kKCksdGhpcy5fdmFvLmRyYXcoZS5UUklBTkdMRVMsdGhpcy5fdmVydGV4Q291bnQpLG49MDtuPDM7KytuKXRoaXMuc3VyZmFjZVByb2plY3Rbbl0mJih0aGlzLl9waWNrU2hhZGVyLnVuaWZvcm1zLm1vZGVsPW8ucHJvamVjdGlvbnNbbl0sdGhpcy5fcGlja1NoYWRlci51bmlmb3Jtcy5jbGlwQm91bmRzPW8uY2xpcEJvdW5kc1tuXSx0aGlzLl92YW8uZHJhdyhlLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCkpO3RoaXMuX3Zhby51bmJpbmQoKX1pZihvLnNob3dDb250b3VyKXt2YXIgcz10aGlzLl9jb250b3VyUGlja1NoYWRlcjtzLmJpbmQoKSxzLnVuaWZvcm1zPXI7dmFyIGw9dGhpcy5fY29udG91clZBTztmb3IobC5iaW5kKCksYT0wO2E8MzsrK2EpZm9yKGUubGluZVdpZHRoKHRoaXMuY29udG91cldpZHRoW2FdKnRoaXMucGl4ZWxSYXRpbykscy51bmlmb3Jtcy5wZXJtdXRhdGlvbj1UW2FdLG49MDtuPHRoaXMuY29udG91ckxldmVsc1thXS5sZW5ndGg7KytuKXRoaXMuX2NvbnRvdXJDb3VudHNbYV1bbl0mJihzLnVuaWZvcm1zLmhlaWdodD10aGlzLmNvbnRvdXJMZXZlbHNbYV1bbl0sbC5kcmF3KGUuTElORVMsdGhpcy5fY29udG91ckNvdW50c1thXVtuXSx0aGlzLl9jb250b3VyT2Zmc2V0c1thXVtuXSkpO2ZvcihuPTA7bjwzOysrbilmb3Iocy51bmlmb3Jtcy5tb2RlbD1vLnByb2plY3Rpb25zW25dLHMudW5pZm9ybXMuY2xpcEJvdW5kcz1vLmNsaXBCb3VuZHNbbl0sYT0wO2E8MzsrK2EpaWYodGhpcy5jb250b3VyUHJvamVjdFtuXVthXSl7cy51bmlmb3Jtcy5wZXJtdXRhdGlvbj1UW2FdLGUubGluZVdpZHRoKHRoaXMuY29udG91cldpZHRoW2FdKnRoaXMucGl4ZWxSYXRpbyk7Zm9yKHZhciBjPTA7Yzx0aGlzLmNvbnRvdXJMZXZlbHNbYV0ubGVuZ3RoOysrYyl0aGlzLl9jb250b3VyQ291bnRzW2FdW2NdJiYocy51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5jb250b3VyTGV2ZWxzW2FdW2NdLGwuZHJhdyhlLkxJTkVTLHRoaXMuX2NvbnRvdXJDb3VudHNbYV1bY10sdGhpcy5fY29udG91ck9mZnNldHNbYV1bY10pKX1sLnVuYmluZCgpfX0sQy5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDt2YXIgZT10aGlzLl9maWVsZFsyXS5zaGFwZSxyPXRoaXMuX3BpY2tSZXN1bHQsbj1lWzBdKih0LnZhbHVlWzBdKyh0LnZhbHVlWzJdPj40KS8xNikvMjU1LGk9TWF0aC5mbG9vcihuKSxhPW4taSxvPWVbMV0qKHQudmFsdWVbMV0rKDE1JnQudmFsdWVbMl0pLzE2KS8yNTUscz1NYXRoLmZsb29yKG8pLGw9by1zO2krPTEscys9MTt2YXIgYz1yLnBvc2l0aW9uO2NbMF09Y1sxXT1jWzJdPTA7Zm9yKHZhciB1PTA7dTwyOysrdSlmb3IodmFyIGg9dT9hOjEtYSxmPTA7ZjwyOysrZilmb3IodmFyIHA9aSt1LGQ9cytmLHY9aCooZj9sOjEtbCksbT0wO208MzsrK20pY1ttXSs9dGhpcy5fZmllbGRbbV0uZ2V0KHAsZCkqdjtmb3IodmFyIHk9dGhpcy5fcGlja1Jlc3VsdC5sZXZlbCx4PTA7eDwzOysreClpZih5W3hdPWcubGUodGhpcy5jb250b3VyTGV2ZWxzW3hdLGNbeF0pLHlbeF08MCl0aGlzLmNvbnRvdXJMZXZlbHNbeF0ubGVuZ3RoPjAmJih5W3hdPTApO2Vsc2UgaWYoeVt4XTx0aGlzLmNvbnRvdXJMZXZlbHNbeF0ubGVuZ3RoLTEpe3ZhciBiPXRoaXMuY29udG91ckxldmVsc1t4XVt5W3hdXSxfPXRoaXMuY29udG91ckxldmVsc1t4XVt5W3hdKzFdO01hdGguYWJzKGItY1t4XSk+TWF0aC5hYnMoXy1jW3hdKSYmKHlbeF0rPTEpfWZvcihyLmluZGV4WzBdPWE8LjU/aTppKzEsci5pbmRleFsxXT1sPC41P3M6cysxLHIudXZbMF09bi9lWzBdLHIudXZbMV09by9lWzFdLG09MDttPDM7KyttKXIuZGF0YUNvb3JkaW5hdGVbbV09dGhpcy5fZmllbGRbbV0uZ2V0KHIuaW5kZXhbMF0sci5pbmRleFsxXSk7cmV0dXJuIHJ9LEMucGFkRmllbGQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnNoYXBlLnNsaWNlKCksbj10LnNoYXBlLnNsaWNlKCk7Yy5hc3NpZ24odC5sbygxLDEpLmhpKHJbMF0sclsxXSksZSksYy5hc3NpZ24odC5sbygxKS5oaShyWzBdLDEpLGUuaGkoclswXSwxKSksYy5hc3NpZ24odC5sbygxLG5bMV0tMSkuaGkoclswXSwxKSxlLmxvKDAsclsxXS0xKS5oaShyWzBdLDEpKSxjLmFzc2lnbih0LmxvKDAsMSkuaGkoMSxyWzFdKSxlLmhpKDEpKSxjLmFzc2lnbih0LmxvKG5bMF0tMSwxKS5oaSgxLHJbMV0pLGUubG8oclswXS0xKSksdC5zZXQoMCwwLGUuZ2V0KDAsMCkpLHQuc2V0KDAsblsxXS0xLGUuZ2V0KDAsclsxXS0xKSksdC5zZXQoblswXS0xLDAsZS5nZXQoclswXS0xLDApKSx0LnNldChuWzBdLTEsblsxXS0xLGUuZ2V0KHJbMF0tMSxyWzFdLTEpKX0sQy51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fSx0aGlzLm9iamVjdE9mZnNldD10Lm9iamVjdE9mZnNldHx8dGhpcy5vYmplY3RPZmZzZXQsdGhpcy5kaXJ0eT0hMCxcImNvbnRvdXJXaWR0aFwiaW4gdCYmKHRoaXMuY29udG91cldpZHRoPUIodC5jb250b3VyV2lkdGgsTnVtYmVyKSksXCJzaG93Q29udG91clwiaW4gdCYmKHRoaXMuc2hvd0NvbnRvdXI9Qih0LnNob3dDb250b3VyLEJvb2xlYW4pKSxcInNob3dTdXJmYWNlXCJpbiB0JiYodGhpcy5zaG93U3VyZmFjZT0hIXQuc2hvd1N1cmZhY2UpLFwiY29udG91clRpbnRcImluIHQmJih0aGlzLmNvbnRvdXJUaW50PUIodC5jb250b3VyVGludCxCb29sZWFuKSksXCJjb250b3VyQ29sb3JcImluIHQmJih0aGlzLmNvbnRvdXJDb2xvcj1qKHQuY29udG91ckNvbG9yKSksXCJjb250b3VyUHJvamVjdFwiaW4gdCYmKHRoaXMuY29udG91clByb2plY3Q9Qih0LmNvbnRvdXJQcm9qZWN0LGZ1bmN0aW9uKHQpe3JldHVybiBCKHQsQm9vbGVhbil9KSksXCJzdXJmYWNlUHJvamVjdFwiaW4gdCYmKHRoaXMuc3VyZmFjZVByb2plY3Q9dC5zdXJmYWNlUHJvamVjdCksXCJkeW5hbWljQ29sb3JcImluIHQmJih0aGlzLmR5bmFtaWNDb2xvcj1qKHQuZHluYW1pY0NvbG9yKSksXCJkeW5hbWljVGludFwiaW4gdCYmKHRoaXMuZHluYW1pY1RpbnQ9Qih0LmR5bmFtaWNUaW50LE51bWJlcikpLFwiZHluYW1pY1dpZHRoXCJpbiB0JiYodGhpcy5keW5hbWljV2lkdGg9Qih0LmR5bmFtaWNXaWR0aCxOdW1iZXIpKSxcIm9wYWNpdHlcImluIHQmJih0aGlzLm9wYWNpdHk9dC5vcGFjaXR5KSxcImNvbG9yQm91bmRzXCJpbiB0JiYodGhpcy5jb2xvckJvdW5kcz10LmNvbG9yQm91bmRzKSxcInZlcnRleENvbG9yXCJpbiB0JiYodGhpcy52ZXJ0ZXhDb2xvcj10LnZlcnRleENvbG9yPzE6MCk7dmFyIGU9dC5maWVsZHx8dC5jb29yZHMmJnQuY29vcmRzWzJdfHxudWxsLHI9ITE7aWYoZXx8KGU9dGhpcy5fZmllbGRbMl0uc2hhcGVbMF18fHRoaXMuX2ZpZWxkWzJdLnNoYXBlWzJdP3RoaXMuX2ZpZWxkWzJdLmxvKDEsMSkuaGkodGhpcy5fZmllbGRbMl0uc2hhcGVbMF0tMix0aGlzLl9maWVsZFsyXS5zaGFwZVsxXS0yKTp0aGlzLl9maWVsZFsyXS5oaSgwLDApKSxcImZpZWxkXCJpbiB0fHxcImNvb3Jkc1wiaW4gdCl7dmFyIGk9KGUuc2hhcGVbMF0rMikqKGUuc2hhcGVbMV0rMik7aT50aGlzLl9maWVsZFsyXS5kYXRhLmxlbmd0aCYmKHMuZnJlZUZsb2F0KHRoaXMuX2ZpZWxkWzJdLmRhdGEpLHRoaXMuX2ZpZWxkWzJdLmRhdGE9cy5tYWxsb2NGbG9hdChuLm5leHRQb3cyKGkpKSksdGhpcy5fZmllbGRbMl09aCh0aGlzLl9maWVsZFsyXS5kYXRhLFtlLnNoYXBlWzBdKzIsZS5zaGFwZVsxXSsyXSksdGhpcy5wYWRGaWVsZCh0aGlzLl9maWVsZFsyXSxlKSx0aGlzLnNoYXBlPWUuc2hhcGUuc2xpY2UoKTtmb3IodmFyIGE9dGhpcy5zaGFwZSxvPTA7bzwyOysrbyl0aGlzLl9maWVsZFsyXS5zaXplPnRoaXMuX2ZpZWxkW29dLmRhdGEubGVuZ3RoJiYocy5mcmVlRmxvYXQodGhpcy5fZmllbGRbb10uZGF0YSksdGhpcy5fZmllbGRbb10uZGF0YT1zLm1hbGxvY0Zsb2F0KHRoaXMuX2ZpZWxkWzJdLnNpemUpKSx0aGlzLl9maWVsZFtvXT1oKHRoaXMuX2ZpZWxkW29dLmRhdGEsW2FbMF0rMixhWzFdKzJdKTtpZih0LmNvb3Jkcyl7dmFyIHA9dC5jb29yZHM7aWYoIUFycmF5LmlzQXJyYXkocCl8fDMhPT1wLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJnbC1zdXJmYWNlOiBpbnZhbGlkIGNvb3JkaW5hdGVzIGZvciB4L3lcIik7Zm9yKG89MDtvPDI7KytvKXt2YXIgZD1wW29dO2ZvcihiPTA7YjwyOysrYilpZihkLnNoYXBlW2JdIT09YVtiXSl0aHJvdyBuZXcgRXJyb3IoXCJnbC1zdXJmYWNlOiBjb29yZHMgaGF2ZSBpbmNvcnJlY3Qgc2hhcGVcIik7dGhpcy5wYWRGaWVsZCh0aGlzLl9maWVsZFtvXSxkKX19ZWxzZSBpZih0LnRpY2tzKXt2YXIgZz10LnRpY2tzO2lmKCFBcnJheS5pc0FycmF5KGcpfHwyIT09Zy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiZ2wtc3VyZmFjZTogaW52YWxpZCB0aWNrc1wiKTtmb3Iobz0wO288MjsrK28pe3ZhciBtPWdbb107aWYoKEFycmF5LmlzQXJyYXkobSl8fG0ubGVuZ3RoKSYmKG09aChtKSksbS5zaGFwZVswXSE9PWFbb10pdGhyb3cgbmV3IEVycm9yKFwiZ2wtc3VyZmFjZTogaW52YWxpZCB0aWNrIGxlbmd0aFwiKTt2YXIgeT1oKG0uZGF0YSxhKTt5LnN0cmlkZVtvXT1tLnN0cmlkZVswXSx5LnN0cmlkZVsxXm9dPTAsdGhpcy5wYWRGaWVsZCh0aGlzLl9maWVsZFtvXSx5KX19ZWxzZXtmb3Iobz0wO288MjsrK28pe3ZhciB4PVswLDBdO3hbb109MSx0aGlzLl9maWVsZFtvXT1oKHRoaXMuX2ZpZWxkW29dLmRhdGEsW2FbMF0rMixhWzFdKzJdLHgsMCl9dGhpcy5fZmllbGRbMF0uc2V0KDAsMCwwKTtmb3IodmFyIGI9MDtiPGFbMF07KytiKXRoaXMuX2ZpZWxkWzBdLnNldChiKzEsMCxiKTtmb3IodGhpcy5fZmllbGRbMF0uc2V0KGFbMF0rMSwwLGFbMF0tMSksdGhpcy5fZmllbGRbMV0uc2V0KDAsMCwwKSxiPTA7YjxhWzFdOysrYil0aGlzLl9maWVsZFsxXS5zZXQoMCxiKzEsYik7dGhpcy5fZmllbGRbMV0uc2V0KDAsYVsxXSsxLGFbMV0tMSl9dmFyIF89dGhpcy5fZmllbGQsdz1oKHMubWFsbG9jRmxvYXQoMypfWzJdLnNpemUqMiksWzMsYVswXSsyLGFbMV0rMiwyXSk7Zm9yKG89MDtvPDM7KytvKXYody5waWNrKG8pLF9bb10sXCJtaXJyb3JcIik7dmFyIGs9aChzLm1hbGxvY0Zsb2F0KDMqX1syXS5zaXplKSxbYVswXSsyLGFbMV0rMiwzXSk7Zm9yKG89MDtvPGFbMF0rMjsrK28pZm9yKGI9MDtiPGFbMV0rMjsrK2Ipe3ZhciBUPXcuZ2V0KDAsbyxiLDApLE09dy5nZXQoMCxvLGIsMSksRT13LmdldCgxLG8sYiwwKSxDPXcuZ2V0KDEsbyxiLDEpLEw9dy5nZXQoMixvLGIsMCksej13LmdldCgyLG8sYiwxKSxPPUUqei1DKkwsST1MKk0teipULEQ9VCpDLU0qRSxQPU1hdGguc3FydChPKk8rSSpJK0QqRCk7UDwxZS04PyhQPU1hdGgubWF4KE1hdGguYWJzKE8pLE1hdGguYWJzKEkpLE1hdGguYWJzKEQpKSk8MWUtOD8oRD0xLEk9Tz0wLFA9MSk6UD0xL1A6UD0xL01hdGguc3FydChQKSxrLnNldChvLGIsMCxPKlApLGsuc2V0KG8sYiwxLEkqUCksay5zZXQobyxiLDIsRCpQKX1zLmZyZWUody5kYXRhKTt2YXIgUj1bMS8wLDEvMCwxLzBdLEY9Wy0xLzAsLTEvMCwtMS8wXSxOPTEvMCxWPS0xLzAsVT0oYVswXS0xKSooYVsxXS0xKSo2LHE9cy5tYWxsb2NGbG9hdChuLm5leHRQb3cyKDEwKlUpKSxIPTAsRz0wO2ZvcihvPTA7bzxhWzBdLTE7KytvKXQ6Zm9yKGI9MDtiPGFbMV0tMTsrK2Ipe2Zvcih2YXIgWT0wO1k8MjsrK1kpZm9yKHZhciBXPTA7VzwyOysrVylmb3IodmFyIFg9MDtYPDM7KytYKXt2YXIgWj10aGlzLl9maWVsZFtYXS5nZXQoMStvK1ksMStiK1cpO2lmKGlzTmFOKFopfHwhaXNGaW5pdGUoWikpY29udGludWUgdH1mb3IoWD0wO1g8NjsrK1gpe3ZhciAkPW8rQVtYXVswXSxKPWIrQVtYXVsxXSxLPXRoaXMuX2ZpZWxkWzBdLmdldCgkKzEsSisxKSxRPXRoaXMuX2ZpZWxkWzFdLmdldCgkKzEsSisxKTtaPXRoaXMuX2ZpZWxkWzJdLmdldCgkKzEsSisxKSxPPWsuZ2V0KCQrMSxKKzEsMCksST1rLmdldCgkKzEsSisxLDEpLEQ9ay5nZXQoJCsxLEorMSwyKSx0LmludGVuc2l0eSYmKHR0PXQuaW50ZW5zaXR5LmdldCgkLEopKTt2YXIgdHQ9dC5pbnRlbnNpdHk/dC5pbnRlbnNpdHkuZ2V0KCQsSik6Wit0aGlzLm9iamVjdE9mZnNldFsyXTtxW0grK109JCxxW0grK109SixxW0grK109SyxxW0grK109USxxW0grK109WixxW0grK109MCxxW0grK109dHQscVtIKytdPU8scVtIKytdPUkscVtIKytdPUQsUlswXT1NYXRoLm1pbihSWzBdLEsrdGhpcy5vYmplY3RPZmZzZXRbMF0pLFJbMV09TWF0aC5taW4oUlsxXSxRK3RoaXMub2JqZWN0T2Zmc2V0WzFdKSxSWzJdPU1hdGgubWluKFJbMl0sWit0aGlzLm9iamVjdE9mZnNldFsyXSksTj1NYXRoLm1pbihOLHR0KSxGWzBdPU1hdGgubWF4KEZbMF0sSyt0aGlzLm9iamVjdE9mZnNldFswXSksRlsxXT1NYXRoLm1heChGWzFdLFErdGhpcy5vYmplY3RPZmZzZXRbMV0pLEZbMl09TWF0aC5tYXgoRlsyXSxaK3RoaXMub2JqZWN0T2Zmc2V0WzJdKSxWPU1hdGgubWF4KFYsdHQpLEcrPTF9fWZvcih0LmludGVuc2l0eUJvdW5kcyYmKE49K3QuaW50ZW5zaXR5Qm91bmRzWzBdLFY9K3QuaW50ZW5zaXR5Qm91bmRzWzFdKSxvPTY7bzxIO28rPTEwKXFbb109KHFbb10tTikvKFYtTik7dGhpcy5fdmVydGV4Q291bnQ9Ryx0aGlzLl9jb29yZGluYXRlQnVmZmVyLnVwZGF0ZShxLnN1YmFycmF5KDAsSCkpLHMuZnJlZUZsb2F0KHEpLHMuZnJlZShrLmRhdGEpLHRoaXMuYm91bmRzPVtSLEZdLHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5fHx0aGlzLl9maWVsZFsyXSx0aGlzLmludGVuc2l0eUJvdW5kc1swXT09PU4mJnRoaXMuaW50ZW5zaXR5Qm91bmRzWzFdPT09Vnx8KHI9ITApLHRoaXMuaW50ZW5zaXR5Qm91bmRzPVtOLFZdfWlmKFwibGV2ZWxzXCJpbiB0KXt2YXIgZXQ9dC5sZXZlbHM7Zm9yKGV0PUFycmF5LmlzQXJyYXkoZXRbMF0pP2V0LnNsaWNlKCk6W1tdLFtdLGV0XSxvPTA7bzwzOysrbylldFtvXT1ldFtvXS5zbGljZSgpLGV0W29dLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSk7Zm9yKG89MDtvPDM7KytvKWZvcihiPTA7YjxldFtvXS5sZW5ndGg7KytiKWV0W29dW2JdLT10aGlzLm9iamVjdE9mZnNldFtvXTt0OmZvcihvPTA7bzwzOysrbyl7aWYoZXRbb10ubGVuZ3RoIT09dGhpcy5jb250b3VyTGV2ZWxzW29dLmxlbmd0aCl7cj0hMDticmVha31mb3IoYj0wO2I8ZXRbb10ubGVuZ3RoOysrYilpZihldFtvXVtiXSE9PXRoaXMuY29udG91ckxldmVsc1tvXVtiXSl7cj0hMDticmVhayB0fX10aGlzLmNvbnRvdXJMZXZlbHM9ZXR9aWYocil7Xz10aGlzLl9maWVsZCxhPXRoaXMuc2hhcGU7Zm9yKHZhciBydD1bXSxudD0wO250PDM7KytudCl7dmFyIGl0PXRoaXMuY29udG91ckxldmVsc1tudF0sYXQ9W10sb3Q9W10sc3Q9WzAsMCwwXTtmb3Iobz0wO288aXQubGVuZ3RoOysrbyl7dmFyIGx0PWYodGhpcy5fZmllbGRbbnRdLGl0W29dKTthdC5wdXNoKHJ0Lmxlbmd0aC81fDApLEc9MDt0OmZvcihiPTA7YjxsdC5jZWxscy5sZW5ndGg7KytiKXt2YXIgY3Q9bHQuY2VsbHNbYl07Zm9yKFg9MDtYPDI7KytYKXt2YXIgdXQ9bHQucG9zaXRpb25zW2N0W1hdXSxodD11dFswXSxmdD0wfE1hdGguZmxvb3IoaHQpLHB0PWh0LWZ0LGR0PXV0WzFdLGd0PTB8TWF0aC5mbG9vcihkdCksdnQ9ZHQtZ3QsbXQ9ITE7ZTpmb3IodmFyIHl0PTA7eXQ8MzsrK3l0KXtzdFt5dF09MDt2YXIgeHQ9KG50K3l0KzEpJTM7Zm9yKFk9MDtZPDI7KytZKXt2YXIgYnQ9WT9wdDoxLXB0O2ZvcigkPTB8TWF0aC5taW4oTWF0aC5tYXgoZnQrWSwwKSxhWzBdKSxXPTA7VzwyOysrVyl7dmFyIF90PVc/dnQ6MS12dDtpZihKPTB8TWF0aC5taW4oTWF0aC5tYXgoZ3QrVywwKSxhWzFdKSxaPXl0PDI/dGhpcy5fZmllbGRbeHRdLmdldCgkLEopOih0aGlzLmludGVuc2l0eS5nZXQoJCxKKS10aGlzLmludGVuc2l0eUJvdW5kc1swXSkvKHRoaXMuaW50ZW5zaXR5Qm91bmRzWzFdLXRoaXMuaW50ZW5zaXR5Qm91bmRzWzBdKSwhaXNGaW5pdGUoWil8fGlzTmFOKFopKXttdD0hMDticmVhayBlfXZhciB3dD1idCpfdDtzdFt5dF0rPXd0Klp9fX1pZihtdCl7aWYoWD4wKXtmb3IodmFyIGt0PTA7a3Q8NTsrK2t0KXJ0LnBvcCgpO0ctPTF9Y29udGludWUgdH1ydC5wdXNoKHN0WzBdLHN0WzFdLHV0WzBdLHV0WzFdLHN0WzJdKSxHKz0xfX1vdC5wdXNoKEcpfXRoaXMuX2NvbnRvdXJPZmZzZXRzW250XT1hdCx0aGlzLl9jb250b3VyQ291bnRzW250XT1vdH12YXIgQXQ9cy5tYWxsb2NGbG9hdChydC5sZW5ndGgpO2ZvcihvPTA7bzxydC5sZW5ndGg7KytvKUF0W29dPXJ0W29dO3RoaXMuX2NvbnRvdXJCdWZmZXIudXBkYXRlKEF0KSxzLmZyZWVGbG9hdChBdCl9dC5jb2xvcm1hcCYmdGhpcy5fY29sb3JNYXAuc2V0UGl4ZWxzKGZ1bmN0aW9uKHQpe3ZhciBlPXUoW2woe2NvbG9ybWFwOnQsbnNoYWRlczpTLGZvcm1hdDpcInJnYmFcIn0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm5bdFswXSx0WzFdLHRbMl0sMjU1KnRbM11dfSldKTtyZXR1cm4gYy5kaXZzZXEoZSwyNTUpLGV9KHQuY29sb3JtYXApKX0sQy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLl92YW8uZGlzcG9zZSgpLHRoaXMuX2Nvb3JkaW5hdGVCdWZmZXIuZGlzcG9zZSgpLHRoaXMuX2NvbG9yTWFwLmRpc3Bvc2UoKSx0aGlzLl9jb250b3VyQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLl9jb250b3VyVkFPLmRpc3Bvc2UoKSx0aGlzLl9jb250b3VyU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLl9jb250b3VyUGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5fZHluYW1pY0J1ZmZlci5kaXNwb3NlKCksdGhpcy5fZHluYW1pY1ZBTy5kaXNwb3NlKCk7Zm9yKHZhciB0PTA7dDwzOysrdClzLmZyZWVGbG9hdCh0aGlzLl9maWVsZFt0XS5kYXRhKX0sQy5oaWdobGlnaHQ9ZnVuY3Rpb24odCl7dmFyIGUscjtpZighdClyZXR1cm4gdGhpcy5fZHluYW1pY0NvdW50cz1bMCwwLDBdLHRoaXMuZHlhbmFtaWNMZXZlbD1bTmFOLE5hTixOYU5dLHZvaWQodGhpcy5oaWdobGlnaHRMZXZlbD1bLTEsLTEsLTFdKTtmb3IoZT0wO2U8MzsrK2UpdGhpcy5lbmFibGVIaWdobGlnaHRbZV0/dGhpcy5oaWdobGlnaHRMZXZlbFtlXT10LmxldmVsW2VdOnRoaXMuaGlnaGxpZ2h0TGV2ZWxbZV09LTE7Zm9yKHI9dGhpcy5zbmFwVG9EYXRhP3QuZGF0YUNvb3JkaW5hdGU6dC5wb3NpdGlvbixlPTA7ZTwzOysrZSlyW2VdLT10aGlzLm9iamVjdE9mZnNldFtlXTtpZih0aGlzLmVuYWJsZUR5bmFtaWNbMF0mJnJbMF0hPT10aGlzLmR5bmFtaWNMZXZlbFswXXx8dGhpcy5lbmFibGVEeW5hbWljWzFdJiZyWzFdIT09dGhpcy5keW5hbWljTGV2ZWxbMV18fHRoaXMuZW5hYmxlRHluYW1pY1syXSYmclsyXSE9PXRoaXMuZHluYW1pY0xldmVsWzJdKXtmb3IodmFyIG49MCxpPXRoaXMuc2hhcGUsYT1zLm1hbGxvY0Zsb2F0KDEyKmlbMF0qaVsxXSksbz0wO288MzsrK28paWYodGhpcy5lbmFibGVEeW5hbWljW29dKXt0aGlzLmR5bmFtaWNMZXZlbFtvXT1yW29dO3ZhciBsPShvKzEpJTMsYz0obysyKSUzLHU9dGhpcy5fZmllbGRbb10saD10aGlzLl9maWVsZFtsXSxwPXRoaXMuX2ZpZWxkW2NdLGQ9Zih1LHJbb10pLGc9ZC5jZWxscyx2PWQucG9zaXRpb25zO2Zvcih0aGlzLl9keW5hbWljT2Zmc2V0c1tvXT1uLGU9MDtlPGcubGVuZ3RoOysrZSlmb3IodmFyIG09Z1tlXSx5PTA7eTwyOysreSl7dmFyIHg9dlttW3ldXSxiPSt4WzBdLF89MHxiLHc9MHxNYXRoLm1pbihfKzEsaVswXSksaz1iLV8sQT0xLWssVD0reFsxXSxNPTB8VCxTPTB8TWF0aC5taW4oTSsxLGlbMV0pLEU9VC1NLEM9MS1FLEw9QSpDLHo9QSpFLE89aypDLEk9aypFLEQ9TCpoLmdldChfLE0pK3oqaC5nZXQoXyxTKStPKmguZ2V0KHcsTSkrSSpoLmdldCh3LFMpLFA9TCpwLmdldChfLE0pK3oqcC5nZXQoXyxTKStPKnAuZ2V0KHcsTSkrSSpwLmdldCh3LFMpO2lmKGlzTmFOKEQpfHxpc05hTihQKSl7eSYmKG4tPTEpO2JyZWFrfWFbMipuKzBdPUQsYVsyKm4rMV09UCxuKz0xfXRoaXMuX2R5bmFtaWNDb3VudHNbb109bi10aGlzLl9keW5hbWljT2Zmc2V0c1tvXX1lbHNlIHRoaXMuZHluYW1pY0xldmVsW29dPU5hTix0aGlzLl9keW5hbWljQ291bnRzW29dPTA7dGhpcy5fZHluYW1pY0J1ZmZlci51cGRhdGUoYS5zdWJhcnJheSgwLDIqbikpLHMuZnJlZUZsb2F0KGEpfX19LHtcIi4vbGliL3NoYWRlcnNcIjozMTEsXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiOjMxMixcImJpdC10d2lkZGxlXCI6ODMsY29sb3JtYXA6MTE3LFwiZ2wtYnVmZmVyXCI6MjM4LFwiZ2wtbWF0NC9pbnZlcnRcIjoyNjIsXCJnbC1tYXQ0L211bHRpcGx5XCI6MjY0LFwiZ2wtdGV4dHVyZTJkXCI6MzE1LFwiZ2wtdmFvXCI6MzIwLG5kYXJyYXk6NDQzLFwibmRhcnJheS1ncmFkaWVudFwiOjQzNCxcIm5kYXJyYXktb3BzXCI6NDM3LFwibmRhcnJheS1wYWNrXCI6NDM4LFwic3VyZmFjZS1uZXRzXCI6NTE2LFwidHlwZWRhcnJheS1wb29sXCI6NTMwfV0sMzE0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImNzcy1mb250XCIpLGk9dChcInBpY2stYnktYWxpYXNcIiksYT10KFwicmVnbFwiKSxvPXQoXCJnbC11dGlsL2NvbnRleHRcIikscz10KFwiZXM2LXdlYWstbWFwXCIpLGw9dChcImNvbG9yLW5vcm1hbGl6ZVwiKSxjPXQoXCJmb250LWF0bGFzXCIpLHU9dChcInR5cGVkYXJyYXktcG9vbFwiKSxoPXQoXCJwYXJzZS1yZWN0XCIpLGY9dChcImlzLXBsYWluLW9ialwiKSxwPXQoXCJwYXJzZS11bml0XCIpLGQ9dChcInRvLXB4XCIpLGc9dChcImRldGVjdC1rZXJuaW5nXCIpLHY9dChcIm9iamVjdC1hc3NpZ25cIiksbT10KFwiZm9udC1tZWFzdXJlXCIpLHk9dChcImZsYXR0ZW4tdmVydGV4LWRhdGFcIikseD10KFwiYml0LXR3aWRkbGVcIikubmV4dFBvdzIsYj1uZXcgcyxfPSExO2lmKGRvY3VtZW50LmJvZHkpe3ZhciB3PWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSk7dy5zdHlsZS5mb250PVwiaXRhbGljIHNtYWxsLWNhcHMgYm9sZCBjb25kZW5zZWQgMTZweC8yIGN1cnNpdmVcIixnZXRDb21wdXRlZFN0eWxlKHcpLmZvbnRTdHJldGNoJiYoXz0hMCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh3KX12YXIgaz1mdW5jdGlvbih0KXshZnVuY3Rpb24odCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmdC5fZ2wmJnQucHJvcCYmdC50ZXh0dXJlJiZ0LmJ1ZmZlcn0odCk/dGhpcy5nbD1vKHQpOih0PXtyZWdsOnR9LHRoaXMuZ2w9dC5yZWdsLl9nbCksdGhpcy5zaGFkZXI9Yi5nZXQodGhpcy5nbCksdGhpcy5zaGFkZXI/dGhpcy5yZWdsPXRoaXMuc2hhZGVyLnJlZ2w6dGhpcy5yZWdsPXQucmVnbHx8YSh7Z2w6dGhpcy5nbH0pLHRoaXMuY2hhckJ1ZmZlcj10aGlzLnJlZ2wuYnVmZmVyKHt0eXBlOlwidWludDhcIix1c2FnZTpcInN0cmVhbVwifSksdGhpcy5zaXplQnVmZmVyPXRoaXMucmVnbC5idWZmZXIoe3R5cGU6XCJmbG9hdFwiLHVzYWdlOlwic3RyZWFtXCJ9KSx0aGlzLnNoYWRlcnx8KHRoaXMuc2hhZGVyPXRoaXMuY3JlYXRlU2hhZGVyKCksYi5zZXQodGhpcy5nbCx0aGlzLnNoYWRlcikpLHRoaXMuYmF0Y2g9W10sdGhpcy5mb250U2l6ZT1bXSx0aGlzLmZvbnQ9W10sdGhpcy5mb250QXRsYXM9W10sdGhpcy5kcmF3PXRoaXMuc2hhZGVyLmRyYXcuYmluZCh0aGlzKSx0aGlzLnJlbmRlcj1mdW5jdGlvbigpe3RoaXMucmVnbC5fcmVmcmVzaCgpLHRoaXMuZHJhdyh0aGlzLmJhdGNoKX0sdGhpcy5jYW52YXM9dGhpcy5nbC5jYW52YXMsdGhpcy51cGRhdGUoZih0KT90Ont9KX07ay5wcm90b3R5cGUuY3JlYXRlU2hhZGVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZWdsLGU9dCh7YmxlbmQ6e2VuYWJsZTohMCxjb2xvcjpbMCwwLDAsMV0sZnVuYzp7c3JjUkdCOlwic3JjIGFscGhhXCIsZHN0UkdCOlwib25lIG1pbnVzIHNyYyBhbHBoYVwiLHNyY0FscGhhOlwib25lIG1pbnVzIGRzdCBhbHBoYVwiLGRzdEFscGhhOlwib25lXCJ9fSxzdGVuY2lsOntlbmFibGU6ITF9LGRlcHRoOntlbmFibGU6ITF9LGNvdW50OnQucHJvcChcImNvdW50XCIpLG9mZnNldDp0LnByb3AoXCJvZmZzZXRcIiksYXR0cmlidXRlczp7Y2hhck9mZnNldDp7b2Zmc2V0OjQsc3RyaWRlOjgsYnVmZmVyOnQudGhpcyhcInNpemVCdWZmZXJcIil9LHdpZHRoOntvZmZzZXQ6MCxzdHJpZGU6OCxidWZmZXI6dC50aGlzKFwic2l6ZUJ1ZmZlclwiKX0sY2hhcjp0LnRoaXMoXCJjaGFyQnVmZmVyXCIpLHBvc2l0aW9uOnQudGhpcyhcInBvc2l0aW9uXCIpfSx1bmlmb3Jtczp7YXRsYXNTaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuW2UuYXRsYXMud2lkdGgsZS5hdGxhcy5oZWlnaHRdfSxhdGxhc0RpbTpmdW5jdGlvbih0LGUpe3JldHVybltlLmF0bGFzLmNvbHMsZS5hdGxhcy5yb3dzXX0sYXRsYXM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5hdGxhcy50ZXh0dXJlfSxjaGFyU3RlcDpmdW5jdGlvbih0LGUpe3JldHVybiBlLmF0bGFzLnN0ZXB9LGVtOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuYXRsYXMuZW19LGNvbG9yOnQucHJvcChcImNvbG9yXCIpLG9wYWNpdHk6dC5wcm9wKFwib3BhY2l0eVwiKSx2aWV3cG9ydDp0LnRoaXMoXCJ2aWV3cG9ydEFycmF5XCIpLHNjYWxlOnQudGhpcyhcInNjYWxlXCIpLGFsaWduOnQucHJvcChcImFsaWduXCIpLGJhc2VsaW5lOnQucHJvcChcImJhc2VsaW5lXCIpLHRyYW5zbGF0ZTp0LnRoaXMoXCJ0cmFuc2xhdGVcIikscG9zaXRpb25PZmZzZXQ6dC5wcm9wKFwicG9zaXRpb25PZmZzZXRcIil9LHByaW1pdGl2ZTpcInBvaW50c1wiLHZpZXdwb3J0OnQudGhpcyhcInZpZXdwb3J0XCIpLHZlcnQ6XCJcXG5cXHRcXHRcXHRwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuXFx0XFx0XFx0YXR0cmlidXRlIGZsb2F0IHdpZHRoLCBjaGFyT2Zmc2V0LCBjaGFyO1xcblxcdFxcdFxcdGF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xcblxcdFxcdFxcdHVuaWZvcm0gZmxvYXQgZm9udFNpemUsIGNoYXJTdGVwLCBlbSwgYWxpZ24sIGJhc2VsaW5lO1xcblxcdFxcdFxcdHVuaWZvcm0gdmVjNCB2aWV3cG9ydDtcXG5cXHRcXHRcXHR1bmlmb3JtIHZlYzQgY29sb3I7XFxuXFx0XFx0XFx0dW5pZm9ybSB2ZWMyIGF0bGFzU2l6ZSwgYXRsYXNEaW0sIHNjYWxlLCB0cmFuc2xhdGUsIHBvc2l0aW9uT2Zmc2V0O1xcblxcdFxcdFxcdHZhcnlpbmcgdmVjMiBjaGFyQ29vcmQsIGNoYXJJZDtcXG5cXHRcXHRcXHR2YXJ5aW5nIGZsb2F0IGNoYXJXaWR0aDtcXG5cXHRcXHRcXHR2YXJ5aW5nIHZlYzQgZm9udENvbG9yO1xcblxcdFxcdFxcdHZvaWQgbWFpbiAoKSB7XFxuXFx0XFx0XFx0XFx0XCIrKGsubm9ybWFsVmlld3BvcnQ/XCJcIjpcInZlYzIgcG9zaXRpb25PZmZzZXQgPSB2ZWMyKHBvc2l0aW9uT2Zmc2V0LngsLSBwb3NpdGlvbk9mZnNldC55KTtcIikrXCJcXG5cXG5cXHRcXHRcXHRcXHR2ZWMyIG9mZnNldCA9IGZsb29yKGVtICogKHZlYzIoYWxpZ24gKyBjaGFyT2Zmc2V0LCBiYXNlbGluZSlcXG5cXHRcXHRcXHRcXHRcXHQrIHBvc2l0aW9uT2Zmc2V0KSlcXG5cXHRcXHRcXHRcXHRcXHQvICh2aWV3cG9ydC56dyAqIHNjYWxlLnh5KTtcXG5cXG5cXHRcXHRcXHRcXHR2ZWMyIHBvc2l0aW9uID0gKHBvc2l0aW9uICsgdHJhbnNsYXRlKSAqIHNjYWxlO1xcblxcdFxcdFxcdFxcdHBvc2l0aW9uICs9IG9mZnNldCAqIHNjYWxlO1xcblxcblxcdFxcdFxcdFxcdFwiKyhrLm5vcm1hbFZpZXdwb3J0P1wicG9zaXRpb24ueSA9IDEuIC0gcG9zaXRpb24ueTtcIjpcIlwiKStcIlxcblxcblxcdFxcdFxcdFxcdGNoYXJDb29yZCA9IHBvc2l0aW9uICogdmlld3BvcnQuencgKyB2aWV3cG9ydC54eTtcXG5cXG5cXHRcXHRcXHRcXHRnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24gKiAyLiAtIDEuLCAwLCAxKTtcXG5cXG5cXHRcXHRcXHRcXHRnbF9Qb2ludFNpemUgPSBjaGFyU3RlcDtcXG5cXG5cXHRcXHRcXHRcXHRjaGFySWQueCA9IG1vZChjaGFyLCBhdGxhc0RpbS54KTtcXG5cXHRcXHRcXHRcXHRjaGFySWQueSA9IGZsb29yKGNoYXIgLyBhdGxhc0RpbS54KTtcXG5cXG5cXHRcXHRcXHRcXHRjaGFyV2lkdGggPSB3aWR0aCAqIGVtO1xcblxcblxcdFxcdFxcdFxcdGZvbnRDb2xvciA9IGNvbG9yIC8gMjU1LjtcXG5cXHRcXHRcXHR9XCIsZnJhZzpcIlxcblxcdFxcdFxcdHByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXHRcXHRcXHR1bmlmb3JtIHNhbXBsZXIyRCBhdGxhcztcXG5cXHRcXHRcXHR1bmlmb3JtIGZsb2F0IGZvbnRTaXplLCBjaGFyU3RlcCwgb3BhY2l0eTtcXG5cXHRcXHRcXHR1bmlmb3JtIHZlYzIgYXRsYXNTaXplO1xcblxcdFxcdFxcdHVuaWZvcm0gdmVjNCB2aWV3cG9ydDtcXG5cXHRcXHRcXHR2YXJ5aW5nIHZlYzQgZm9udENvbG9yO1xcblxcdFxcdFxcdHZhcnlpbmcgdmVjMiBjaGFyQ29vcmQsIGNoYXJJZDtcXG5cXHRcXHRcXHR2YXJ5aW5nIGZsb2F0IGNoYXJXaWR0aDtcXG5cXG5cXHRcXHRcXHRmbG9hdCBsaWdodG5lc3ModmVjNCBjb2xvcikge1xcblxcdFxcdFxcdFxcdHJldHVybiBjb2xvci5yICogMC4yOTkgKyBjb2xvci5nICogMC41ODcgKyBjb2xvci5iICogMC4xMTQ7XFxuXFx0XFx0XFx0fVxcblxcblxcdFxcdFxcdHZvaWQgbWFpbiAoKSB7XFxuXFx0XFx0XFx0XFx0dmVjMiB1diA9IGdsX0ZyYWdDb29yZC54eSAtIGNoYXJDb29yZCArIGNoYXJTdGVwICogLjU7XFxuXFx0XFx0XFx0XFx0ZmxvYXQgaGFsZkNoYXJTdGVwID0gZmxvb3IoY2hhclN0ZXAgKiAuNSArIC41KTtcXG5cXG5cXHRcXHRcXHRcXHQvLyBpbnZlcnQgeSBhbmQgc2hpZnQgYnkgMXB4IChGRiBleHBlY2lhbGx5IG5lZWRzIHRoYXQpXFxuXFx0XFx0XFx0XFx0dXYueSA9IGNoYXJTdGVwIC0gdXYueTtcXG5cXG5cXHRcXHRcXHRcXHQvLyBpZ25vcmUgcG9pbnRzIG91dHNpZGUgb2YgY2hhcmFjdGVyIGJvdW5kaW5nIGJveFxcblxcdFxcdFxcdFxcdGZsb2F0IGhhbGZDaGFyV2lkdGggPSBjZWlsKGNoYXJXaWR0aCAqIC41KTtcXG5cXHRcXHRcXHRcXHRpZiAoZmxvb3IodXYueCkgPiBoYWxmQ2hhclN0ZXAgKyBoYWxmQ2hhcldpZHRoIHx8XFxuXFx0XFx0XFx0XFx0XFx0Zmxvb3IodXYueCkgPCBoYWxmQ2hhclN0ZXAgLSBoYWxmQ2hhcldpZHRoKSByZXR1cm47XFxuXFxuXFx0XFx0XFx0XFx0dXYgKz0gY2hhcklkICogY2hhclN0ZXA7XFxuXFx0XFx0XFx0XFx0dXYgPSB1diAvIGF0bGFzU2l6ZTtcXG5cXG5cXHRcXHRcXHRcXHR2ZWM0IGNvbG9yID0gZm9udENvbG9yO1xcblxcdFxcdFxcdFxcdHZlYzQgbWFzayA9IHRleHR1cmUyRChhdGxhcywgdXYpO1xcblxcblxcdFxcdFxcdFxcdGZsb2F0IG1hc2tZID0gbGlnaHRuZXNzKG1hc2spO1xcblxcdFxcdFxcdFxcdC8vIGZsb2F0IGNvbG9yWSA9IGxpZ2h0bmVzcyhjb2xvcik7XFxuXFx0XFx0XFx0XFx0Y29sb3IuYSAqPSBtYXNrWTtcXG5cXHRcXHRcXHRcXHRjb2xvci5hICo9IG9wYWNpdHk7XFxuXFxuXFx0XFx0XFx0XFx0Ly8gY29sb3IuYSArPSAuMTtcXG5cXG5cXHRcXHRcXHRcXHQvLyBhbnRpYWxpYXNpbmcsIHNlZSB5aXEgY29sb3Igc3BhY2UgeS1jaGFubmVsIGZvcm11bGFcXG5cXHRcXHRcXHRcXHQvLyBjb2xvci5yZ2IgKz0gKDEuIC0gY29sb3IucmdiKSAqICgxLiAtIG1hc2sucmdiKTtcXG5cXG5cXHRcXHRcXHRcXHRnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG5cXHRcXHRcXHR9XCJ9KTtyZXR1cm57cmVnbDp0LGRyYXc6ZSxhdGxhczp7fX19LGsucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXQ9e3RleHQ6dH07ZWxzZSBpZighdClyZXR1cm47bnVsbCE9KHQ9aSh0LHtwb3NpdGlvbjpcInBvc2l0aW9uIHBvc2l0aW9ucyBjb29yZCBjb29yZHMgY29vcmRpbmF0ZXNcIixmb250OlwiZm9udCBmb250RmFjZSBmb250ZmFjZSB0eXBlZmFjZSBjc3NGb250IGNzcy1mb250IGZhbWlseSBmb250RmFtaWx5XCIsZm9udFNpemU6XCJmb250U2l6ZSBmb250c2l6ZSBzaXplIGZvbnQtc2l6ZVwiLHRleHQ6XCJ0ZXh0IHRleHRzIGNoYXJzIGNoYXJhY3RlcnMgdmFsdWUgdmFsdWVzIHN5bWJvbHNcIixhbGlnbjpcImFsaWduIGFsaWdubWVudCB0ZXh0QWxpZ24gdGV4dGJhc2VsaW5lXCIsYmFzZWxpbmU6XCJiYXNlbGluZSB0ZXh0QmFzZWxpbmUgdGV4dGJhc2VsaW5lXCIsZGlyZWN0aW9uOlwiZGlyIGRpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uXCIsY29sb3I6XCJjb2xvciBjb2xvdXIgZmlsbCBmaWxsLWNvbG9yIGZpbGxDb2xvciB0ZXh0Q29sb3IgdGV4dGNvbG9yXCIsa2VybmluZzpcImtlcm5pbmcga2VyblwiLHJhbmdlOlwicmFuZ2UgZGF0YUJveFwiLHZpZXdwb3J0OlwidnAgdmlld3BvcnQgdmlld0JveCB2aWV3Ym94IHZpZXdQb3J0XCIsb3BhY2l0eTpcIm9wYWNpdHkgYWxwaGEgdHJhbnNwYXJlbmN5IHZpc2libGUgdmlzaWJpbGl0eSBvcGFxdWVcIixvZmZzZXQ6XCJvZmZzZXQgcG9zaXRpb25PZmZzZXQgcGFkZGluZyBzaGlmdCBpbmRlbnQgaW5kZW50YXRpb25cIn0sITApKS5vcGFjaXR5JiYoQXJyYXkuaXNBcnJheSh0Lm9wYWNpdHkpP3RoaXMub3BhY2l0eT10Lm9wYWNpdHkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUZsb2F0KHQpfSk6dGhpcy5vcGFjaXR5PXBhcnNlRmxvYXQodC5vcGFjaXR5KSksbnVsbCE9dC52aWV3cG9ydCYmKHRoaXMudmlld3BvcnQ9aCh0LnZpZXdwb3J0KSxrLm5vcm1hbFZpZXdwb3J0JiYodGhpcy52aWV3cG9ydC55PXRoaXMuY2FudmFzLmhlaWdodC10aGlzLnZpZXdwb3J0LnktdGhpcy52aWV3cG9ydC5oZWlnaHQpLHRoaXMudmlld3BvcnRBcnJheT1bdGhpcy52aWV3cG9ydC54LHRoaXMudmlld3BvcnQueSx0aGlzLnZpZXdwb3J0LndpZHRoLHRoaXMudmlld3BvcnQuaGVpZ2h0XSksbnVsbD09dGhpcy52aWV3cG9ydCYmKHRoaXMudmlld3BvcnQ9e3g6MCx5OjAsd2lkdGg6dGhpcy5nbC5kcmF3aW5nQnVmZmVyV2lkdGgsaGVpZ2h0OnRoaXMuZ2wuZHJhd2luZ0J1ZmZlckhlaWdodH0sdGhpcy52aWV3cG9ydEFycmF5PVt0aGlzLnZpZXdwb3J0LngsdGhpcy52aWV3cG9ydC55LHRoaXMudmlld3BvcnQud2lkdGgsdGhpcy52aWV3cG9ydC5oZWlnaHRdKSxudWxsIT10Lmtlcm5pbmcmJih0aGlzLmtlcm5pbmc9dC5rZXJuaW5nKSxudWxsIT10Lm9mZnNldCYmKFwibnVtYmVyXCI9PXR5cGVvZiB0Lm9mZnNldCYmKHQub2Zmc2V0PVt0Lm9mZnNldCwwXSksdGhpcy5wb3NpdGlvbk9mZnNldD15KHQub2Zmc2V0KSksdC5kaXJlY3Rpb24mJih0aGlzLmRpcmVjdGlvbj10LmRpcmVjdGlvbiksdC5yYW5nZSYmKHRoaXMucmFuZ2U9dC5yYW5nZSx0aGlzLnNjYWxlPVsxLyh0LnJhbmdlWzJdLXQucmFuZ2VbMF0pLDEvKHQucmFuZ2VbM10tdC5yYW5nZVsxXSldLHRoaXMudHJhbnNsYXRlPVstdC5yYW5nZVswXSwtdC5yYW5nZVsxXV0pLHQuc2NhbGUmJih0aGlzLnNjYWxlPXQuc2NhbGUpLHQudHJhbnNsYXRlJiYodGhpcy50cmFuc2xhdGU9dC50cmFuc2xhdGUpLHRoaXMuc2NhbGV8fCh0aGlzLnNjYWxlPVsxL3RoaXMudmlld3BvcnQud2lkdGgsMS90aGlzLnZpZXdwb3J0LmhlaWdodF0pLHRoaXMudHJhbnNsYXRlfHwodGhpcy50cmFuc2xhdGU9WzAsMF0pLHRoaXMuZm9udC5sZW5ndGh8fHQuZm9udHx8KHQuZm9udD1rLmJhc2VGb250U2l6ZStcInB4IHNhbnMtc2VyaWZcIik7dmFyIHIsYT0hMSxvPSExO2lmKHQuZm9udCYmKEFycmF5LmlzQXJyYXkodC5mb250KT90LmZvbnQ6W3QuZm9udF0pLmZvckVhY2goZnVuY3Rpb24odCxyKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl0cnl7dD1uLnBhcnNlKHQpfWNhdGNoKGUpe3Q9bi5wYXJzZShrLmJhc2VGb250U2l6ZStcInB4IFwiK3QpfWVsc2UgdD1uLnBhcnNlKG4uc3RyaW5naWZ5KHQpKTt2YXIgaT1uLnN0cmluZ2lmeSh7c2l6ZTprLmJhc2VGb250U2l6ZSxmYW1pbHk6dC5mYW1pbHksc3RyZXRjaDpfP3Quc3RyZXRjaDp2b2lkIDAsdmFyaWFudDp0LnZhcmlhbnQsd2VpZ2h0OnQud2VpZ2h0LHN0eWxlOnQuc3R5bGV9KSxzPXAodC5zaXplKSxsPU1hdGgucm91bmQoc1swXSpkKHNbMV0pKTtpZihsIT09ZS5mb250U2l6ZVtyXSYmKG89ITAsZS5mb250U2l6ZVtyXT1sKSwhKGUuZm9udFtyXSYmaT09ZS5mb250W3JdLmJhc2VTdHJpbmd8fChhPSEwLGUuZm9udFtyXT1rLmZvbnRzW2ldLGUuZm9udFtyXSkpKXt2YXIgYz10LmZhbWlseS5qb2luKFwiLCBcIiksdT1bdC5zdHlsZV07dC5zdHlsZSE9dC52YXJpYW50JiZ1LnB1c2godC52YXJpYW50KSx0LnZhcmlhbnQhPXQud2VpZ2h0JiZ1LnB1c2godC53ZWlnaHQpLF8mJnQud2VpZ2h0IT10LnN0cmV0Y2gmJnUucHVzaCh0LnN0cmV0Y2gpLGUuZm9udFtyXT17YmFzZVN0cmluZzppLGZhbWlseTpjLHdlaWdodDp0LndlaWdodCxzdHJldGNoOnQuc3RyZXRjaCxzdHlsZTp0LnN0eWxlLHZhcmlhbnQ6dC52YXJpYW50LHdpZHRoOnt9LGtlcm5pbmc6e30sbWV0cmljczptKGMse29yaWdpbjpcInRvcFwiLGZvbnRTaXplOmsuYmFzZUZvbnRTaXplLGZvbnRTdHlsZTp1LmpvaW4oXCIgXCIpfSl9LGsuZm9udHNbaV09ZS5mb250W3JdfX0pLChhfHxvKSYmdGhpcy5mb250LmZvckVhY2goZnVuY3Rpb24ocixpKXt2YXIgYT1uLnN0cmluZ2lmeSh7c2l6ZTplLmZvbnRTaXplW2ldLGZhbWlseTpyLmZhbWlseSxzdHJldGNoOl8/ci5zdHJldGNoOnZvaWQgMCx2YXJpYW50OnIudmFyaWFudCx3ZWlnaHQ6ci53ZWlnaHQsc3R5bGU6ci5zdHlsZX0pO2lmKGUuZm9udEF0bGFzW2ldPWUuc2hhZGVyLmF0bGFzW2FdLCFlLmZvbnRBdGxhc1tpXSl7dmFyIG89ci5tZXRyaWNzO2Uuc2hhZGVyLmF0bGFzW2FdPWUuZm9udEF0bGFzW2ldPXtmb250U3RyaW5nOmEsc3RlcDoyKk1hdGguY2VpbChlLmZvbnRTaXplW2ldKm8uYm90dG9tKi41KSxlbTplLmZvbnRTaXplW2ldLGNvbHM6MCxyb3dzOjAsaGVpZ2h0OjAsd2lkdGg6MCxjaGFyczpbXSxpZHM6e30sdGV4dHVyZTplLnJlZ2wudGV4dHVyZSgpfX1udWxsPT10LnRleHQmJih0LnRleHQ9ZS50ZXh0KX0pLFwic3RyaW5nXCI9PXR5cGVvZiB0LnRleHQmJnQucG9zaXRpb24mJnQucG9zaXRpb24ubGVuZ3RoPjIpe2Zvcih2YXIgcz1BcnJheSguNSp0LnBvc2l0aW9uLmxlbmd0aCksZj0wO2Y8cy5sZW5ndGg7ZisrKXNbZl09dC50ZXh0O3QudGV4dD1zfWlmKG51bGwhPXQudGV4dHx8YSl7aWYodGhpcy50ZXh0T2Zmc2V0cz1bMF0sQXJyYXkuaXNBcnJheSh0LnRleHQpKXt0aGlzLmNvdW50PXQudGV4dFswXS5sZW5ndGgsdGhpcy5jb3VudHM9W3RoaXMuY291bnRdO2Zvcih2YXIgYj0xO2I8dC50ZXh0Lmxlbmd0aDtiKyspZS50ZXh0T2Zmc2V0c1tiXT1lLnRleHRPZmZzZXRzW2ItMV0rdC50ZXh0W2ItMV0ubGVuZ3RoLGUuY291bnQrPXQudGV4dFtiXS5sZW5ndGgsZS5jb3VudHMucHVzaCh0LnRleHRbYl0ubGVuZ3RoKTt0aGlzLnRleHQ9dC50ZXh0LmpvaW4oXCJcIil9ZWxzZSB0aGlzLnRleHQ9dC50ZXh0LHRoaXMuY291bnQ9dGhpcy50ZXh0Lmxlbmd0aCx0aGlzLmNvdW50cz1bdGhpcy5jb3VudF07cj1bXSx0aGlzLmZvbnQuZm9yRWFjaChmdW5jdGlvbih0LG4pe2suYXRsYXNDb250ZXh0LmZvbnQ9dC5iYXNlU3RyaW5nO2Zvcih2YXIgaT1lLmZvbnRBdGxhc1tuXSxhPTA7YTxlLnRleHQubGVuZ3RoO2ErKyl7dmFyIG89ZS50ZXh0LmNoYXJBdChhKTtpZihudWxsPT1pLmlkc1tvXSYmKGkuaWRzW29dPWkuY2hhcnMubGVuZ3RoLGkuY2hhcnMucHVzaChvKSxyLnB1c2gobykpLG51bGw9PXQud2lkdGhbb10mJih0LndpZHRoW29dPWsuYXRsYXNDb250ZXh0Lm1lYXN1cmVUZXh0KG8pLndpZHRoL2suYmFzZUZvbnRTaXplLGUua2VybmluZykpe3ZhciBzPVtdO2Zvcih2YXIgbCBpbiB0LndpZHRoKXMucHVzaChsK28sbytsKTt2KHQua2VybmluZyxnKHQuZmFtaWx5LHtwYWlyczpzfSkpfX19KX1pZih0LnBvc2l0aW9uKWlmKHQucG9zaXRpb24ubGVuZ3RoPjIpe2Zvcih2YXIgdz0hdC5wb3NpdGlvblswXS5sZW5ndGgsQT11Lm1hbGxvY0Zsb2F0KDIqdGhpcy5jb3VudCksVD0wLE09MDtUPHRoaXMuY291bnRzLmxlbmd0aDtUKyspe3ZhciBTPWUuY291bnRzW1RdO2lmKHcpZm9yKHZhciBFPTA7RTxTO0UrKylBW00rK109dC5wb3NpdGlvblsyKlRdLEFbTSsrXT10LnBvc2l0aW9uWzIqVCsxXTtlbHNlIGZvcih2YXIgQz0wO0M8UztDKyspQVtNKytdPXQucG9zaXRpb25bVF1bMF0sQVtNKytdPXQucG9zaXRpb25bVF1bMV19dGhpcy5wb3NpdGlvbi5jYWxsP3RoaXMucG9zaXRpb24oe3R5cGU6XCJmbG9hdFwiLGRhdGE6QX0pOnRoaXMucG9zaXRpb249dGhpcy5yZWdsLmJ1ZmZlcih7dHlwZTpcImZsb2F0XCIsZGF0YTpBfSksdS5mcmVlRmxvYXQoQSl9ZWxzZSB0aGlzLnBvc2l0aW9uLmRlc3Ryb3kmJnRoaXMucG9zaXRpb24uZGVzdHJveSgpLHRoaXMucG9zaXRpb249e2NvbnN0YW50OnQucG9zaXRpb259O2lmKHQudGV4dHx8YSl7dmFyIEw9dS5tYWxsb2NVaW50OCh0aGlzLmNvdW50KSx6PXUubWFsbG9jRmxvYXQoMip0aGlzLmNvdW50KTt0aGlzLnRleHRXaWR0aD1bXTtmb3IodmFyIE89MCxJPTA7Tzx0aGlzLmNvdW50cy5sZW5ndGg7TysrKXtmb3IodmFyIEQ9ZS5jb3VudHNbT10sUD1lLmZvbnRbT118fGUuZm9udFswXSxSPWUuZm9udEF0bGFzW09dfHxlLmZvbnRBdGxhc1swXSxGPTA7RjxEO0YrKyl7dmFyIEI9ZS50ZXh0LmNoYXJBdChJKSxOPWUudGV4dC5jaGFyQXQoSS0xKTtpZihMW0ldPVIuaWRzW0JdLHpbMipJXT1QLndpZHRoW0JdLEYpe3ZhciBqPXpbMipJLTJdLFY9elsyKkldLFU9elsyKkktMV0rLjUqaisuNSpWO2lmKGUua2VybmluZyl7dmFyIHE9UC5rZXJuaW5nW04rQl07cSYmKFUrPS4wMDEqcSl9elsyKkkrMV09VX1lbHNlIHpbMipJKzFdPS41KnpbMipJXTtJKyt9ZS50ZXh0V2lkdGgucHVzaCh6Lmxlbmd0aD8uNSp6WzIqSS0yXSt6WzIqSS0xXTowKX10LmFsaWdufHwodC5hbGlnbj10aGlzLmFsaWduKSx0aGlzLmNoYXJCdWZmZXIoe2RhdGE6TCx0eXBlOlwidWludDhcIix1c2FnZTpcInN0cmVhbVwifSksdGhpcy5zaXplQnVmZmVyKHtkYXRhOnosdHlwZTpcImZsb2F0XCIsdXNhZ2U6XCJzdHJlYW1cIn0pLHUuZnJlZVVpbnQ4KEwpLHUuZnJlZUZsb2F0KHopLHIubGVuZ3RoJiZ0aGlzLmZvbnQuZm9yRWFjaChmdW5jdGlvbih0LHIpe3ZhciBuPWUuZm9udEF0bGFzW3JdLGk9bi5zdGVwLGE9TWF0aC5mbG9vcihrLm1heEF0bGFzU2l6ZS9pKSxvPU1hdGgubWluKGEsbi5jaGFycy5sZW5ndGgpLHM9TWF0aC5jZWlsKG4uY2hhcnMubGVuZ3RoL28pLGw9eChvKmkpLHU9eChzKmkpO24ud2lkdGg9bCxuLmhlaWdodD11LG4ucm93cz1zLG4uY29scz1vLG4uZW0mJm4udGV4dHVyZSh7ZGF0YTpjKHtjYW52YXM6ay5hdGxhc0NhbnZhcyxmb250Om4uZm9udFN0cmluZyxjaGFyczpuLmNoYXJzLHNoYXBlOltsLHVdLHN0ZXA6W2ksaV19KX0pfSl9aWYodC5hbGlnbiYmKHRoaXMuYWxpZ249dC5hbGlnbix0aGlzLmFsaWduT2Zmc2V0PXRoaXMudGV4dFdpZHRoLm1hcChmdW5jdGlvbih0LHIpe3ZhciBuPUFycmF5LmlzQXJyYXkoZS5hbGlnbik/ZS5hbGlnbi5sZW5ndGg+MT9lLmFsaWduW3JdOmUuYWxpZ25bMF06ZS5hbGlnbjtpZihcIm51bWJlclwiPT10eXBlb2YgbilyZXR1cm4gbjtzd2l0Y2gobil7Y2FzZVwicmlnaHRcIjpjYXNlXCJlbmRcIjpyZXR1cm4tdDtjYXNlXCJjZW50ZXJcIjpjYXNlXCJjZW50cmVcIjpjYXNlXCJtaWRkbGVcIjpyZXR1cm4uNSotdH1yZXR1cm4gMH0pKSxudWxsPT10aGlzLmJhc2VsaW5lJiZudWxsPT10LmJhc2VsaW5lJiYodC5iYXNlbGluZT0wKSxudWxsIT10LmJhc2VsaW5lJiYodGhpcy5iYXNlbGluZT10LmJhc2VsaW5lLEFycmF5LmlzQXJyYXkodGhpcy5iYXNlbGluZSl8fCh0aGlzLmJhc2VsaW5lPVt0aGlzLmJhc2VsaW5lXSksdGhpcy5iYXNlbGluZU9mZnNldD10aGlzLmJhc2VsaW5lLm1hcChmdW5jdGlvbih0LHIpe3ZhciBuPShlLmZvbnRbcl18fGUuZm9udFswXSkubWV0cmljcyxpPTA7cmV0dXJuIGkrPS41Km4uYm90dG9tLGkrPVwibnVtYmVyXCI9PXR5cGVvZiB0P3Qtbi5iYXNlbGluZTotblt0XSxrLm5vcm1hbFZpZXdwb3J0fHwoaSo9LTEpLGl9KSksbnVsbCE9dC5jb2xvcilpZih0LmNvbG9yfHwodC5jb2xvcj1cInRyYW5zcGFyZW50XCIpLFwic3RyaW5nXCIhPXR5cGVvZiB0LmNvbG9yJiZpc05hTih0LmNvbG9yKSl7dmFyIEg7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQuY29sb3JbMF0mJnQuY29sb3IubGVuZ3RoPnRoaXMuY291bnRzLmxlbmd0aCl7dmFyIEc9dC5jb2xvci5sZW5ndGg7SD11Lm1hbGxvY1VpbnQ4KEcpO2Zvcih2YXIgWT0odC5jb2xvci5zdWJhcnJheXx8dC5jb2xvci5zbGljZSkuYmluZCh0LmNvbG9yKSxXPTA7VzxHO1crPTQpSC5zZXQobChZKFcsVys0KSxcInVpbnQ4XCIpLFcpfWVsc2V7dmFyIFg9dC5jb2xvci5sZW5ndGg7SD11Lm1hbGxvY1VpbnQ4KDQqWCk7Zm9yKHZhciBaPTA7WjxYO1orKylILnNldChsKHQuY29sb3JbWl18fDAsXCJ1aW50OFwiKSw0KlopfXRoaXMuY29sb3I9SH1lbHNlIHRoaXMuY29sb3I9bCh0LmNvbG9yLFwidWludDhcIik7aWYodC5wb3NpdGlvbnx8dC50ZXh0fHx0LmNvbG9yfHx0LmJhc2VsaW5lfHx0LmFsaWdufHx0LmZvbnR8fHQub2Zmc2V0fHx0Lm9wYWNpdHkpaWYodGhpcy5jb2xvci5sZW5ndGg+NHx8dGhpcy5iYXNlbGluZU9mZnNldC5sZW5ndGg+MXx8dGhpcy5hbGlnbiYmdGhpcy5hbGlnbi5sZW5ndGg+MXx8dGhpcy5mb250QXRsYXMubGVuZ3RoPjF8fHRoaXMucG9zaXRpb25PZmZzZXQubGVuZ3RoPjIpe3ZhciAkPU1hdGgubWF4KC41KnRoaXMucG9zaXRpb24ubGVuZ3RofHwwLC4yNSp0aGlzLmNvbG9yLmxlbmd0aHx8MCx0aGlzLmJhc2VsaW5lT2Zmc2V0Lmxlbmd0aHx8MCx0aGlzLmFsaWduT2Zmc2V0Lmxlbmd0aHx8MCx0aGlzLmZvbnQubGVuZ3RofHwwLHRoaXMub3BhY2l0eS5sZW5ndGh8fDAsLjUqdGhpcy5wb3NpdGlvbk9mZnNldC5sZW5ndGh8fDApO3RoaXMuYmF0Y2g9QXJyYXkoJCk7Zm9yKHZhciBKPTA7Sjx0aGlzLmJhdGNoLmxlbmd0aDtKKyspZS5iYXRjaFtKXT17Y291bnQ6ZS5jb3VudHMubGVuZ3RoPjE/ZS5jb3VudHNbSl06ZS5jb3VudHNbMF0sb2Zmc2V0OmUudGV4dE9mZnNldHMubGVuZ3RoPjE/ZS50ZXh0T2Zmc2V0c1tKXTplLnRleHRPZmZzZXRzWzBdLGNvbG9yOmUuY29sb3I/ZS5jb2xvci5sZW5ndGg8PTQ/ZS5jb2xvcjplLmNvbG9yLnN1YmFycmF5KDQqSiw0KkorNCk6WzAsMCwwLDI1NV0sb3BhY2l0eTpBcnJheS5pc0FycmF5KGUub3BhY2l0eSk/ZS5vcGFjaXR5W0pdOmUub3BhY2l0eSxiYXNlbGluZTpudWxsIT1lLmJhc2VsaW5lT2Zmc2V0W0pdP2UuYmFzZWxpbmVPZmZzZXRbSl06ZS5iYXNlbGluZU9mZnNldFswXSxhbGlnbjplLmFsaWduP251bGwhPWUuYWxpZ25PZmZzZXRbSl0/ZS5hbGlnbk9mZnNldFtKXTplLmFsaWduT2Zmc2V0WzBdOjAsYXRsYXM6ZS5mb250QXRsYXNbSl18fGUuZm9udEF0bGFzWzBdLHBvc2l0aW9uT2Zmc2V0OmUucG9zaXRpb25PZmZzZXQubGVuZ3RoPjI/ZS5wb3NpdGlvbk9mZnNldC5zdWJhcnJheSgyKkosMipKKzIpOmUucG9zaXRpb25PZmZzZXR9fWVsc2UgdGhpcy5jb3VudD90aGlzLmJhdGNoPVt7Y291bnQ6dGhpcy5jb3VudCxvZmZzZXQ6MCxjb2xvcjp0aGlzLmNvbG9yfHxbMCwwLDAsMjU1XSxvcGFjaXR5OkFycmF5LmlzQXJyYXkodGhpcy5vcGFjaXR5KT90aGlzLm9wYWNpdHlbMF06dGhpcy5vcGFjaXR5LGJhc2VsaW5lOnRoaXMuYmFzZWxpbmVPZmZzZXRbMF0sYWxpZ246dGhpcy5hbGlnbk9mZnNldD90aGlzLmFsaWduT2Zmc2V0WzBdOjAsYXRsYXM6dGhpcy5mb250QXRsYXNbMF0scG9zaXRpb25PZmZzZXQ6dGhpcy5wb3NpdGlvbk9mZnNldH1dOnRoaXMuYmF0Y2g9W119LGsucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt9LGsucHJvdG90eXBlLmtlcm5pbmc9ITAsay5wcm90b3R5cGUucG9zaXRpb249e2NvbnN0YW50Om5ldyBGbG9hdDMyQXJyYXkoMil9LGsucHJvdG90eXBlLnRyYW5zbGF0ZT1udWxsLGsucHJvdG90eXBlLnNjYWxlPW51bGwsay5wcm90b3R5cGUuZm9udD1udWxsLGsucHJvdG90eXBlLnRleHQ9XCJcIixrLnByb3RvdHlwZS5wb3NpdGlvbk9mZnNldD1bMCwwXSxrLnByb3RvdHlwZS5vcGFjaXR5PTEsay5wcm90b3R5cGUuY29sb3I9bmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDI1NV0pLGsucHJvdG90eXBlLmFsaWduT2Zmc2V0PVswLDBdLGsubm9ybWFsVmlld3BvcnQ9ITEsay5tYXhBdGxhc1NpemU9MTAyNCxrLmF0bGFzQ2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksay5hdGxhc0NvbnRleHQ9ay5hdGxhc0NhbnZhcy5nZXRDb250ZXh0KFwiMmRcIix7YWxwaGE6ITF9KSxrLmJhc2VGb250U2l6ZT02NCxrLmZvbnRzPXt9LGUuZXhwb3J0cz1rfSx7XCJiaXQtdHdpZGRsZVwiOjgzLFwiY29sb3Itbm9ybWFsaXplXCI6MTExLFwiY3NzLWZvbnRcIjoxMzAsXCJkZXRlY3Qta2VybmluZ1wiOjE1OCxcImVzNi13ZWFrLW1hcFwiOjIxNyxcImZsYXR0ZW4tdmVydGV4LWRhdGFcIjoyMjQsXCJmb250LWF0bGFzXCI6MjI1LFwiZm9udC1tZWFzdXJlXCI6MjI2LFwiZ2wtdXRpbC9jb250ZXh0XCI6MzE2LFwiaXMtcGxhaW4tb2JqXCI6NDE1LFwib2JqZWN0LWFzc2lnblwiOjQ0NyxcInBhcnNlLXJlY3RcIjo0NTIsXCJwYXJzZS11bml0XCI6NDU0LFwicGljay1ieS1hbGlhc1wiOjQ1OCxyZWdsOjQ4NyxcInRvLXB4XCI6NTI0LFwidHlwZWRhcnJheS1wb29sXCI6NTMwfV0sMzE1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIm5kYXJyYXlcIiksaT10KFwibmRhcnJheS1vcHNcIiksYT10KFwidHlwZWRhcnJheS1wb29sXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihhcmd1bWVudHMubGVuZ3RoPD0xKXRocm93IG5ldyBFcnJvcihcImdsLXRleHR1cmUyZDogTWlzc2luZyBhcmd1bWVudHMgZm9yIHRleHR1cmUyZCBjb25zdHJ1Y3RvclwiKTtvfHxmdW5jdGlvbih0KXtvPVt0LkxJTkVBUix0Lk5FQVJFU1RfTUlQTUFQX0xJTkVBUix0LkxJTkVBUl9NSVBNQVBfTkVBUkVTVCx0LkxJTkVBUl9NSVBNQVBfTkVBUkVTVF0scz1bdC5ORUFSRVNULHQuTElORUFSLHQuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCx0Lk5FQVJFU1RfTUlQTUFQX0xJTkVBUix0LkxJTkVBUl9NSVBNQVBfTkVBUkVTVCx0LkxJTkVBUl9NSVBNQVBfTElORUFSXSxsPVt0LlJFUEVBVCx0LkNMQU1QX1RPX0VER0UsdC5NSVJST1JFRF9SRVBFQVRdfSh0KTtpZihcIm51bWJlclwiPT10eXBlb2YgYXJndW1lbnRzWzFdKXJldHVybiB2KHQsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM118fHQuUkdCQSxhcmd1bWVudHNbNF18fHQuVU5TSUdORURfQllURSk7aWYoQXJyYXkuaXNBcnJheShhcmd1bWVudHNbMV0pKXJldHVybiB2KHQsMHxhcmd1bWVudHNbMV1bMF0sMHxhcmd1bWVudHNbMV1bMV0sYXJndW1lbnRzWzJdfHx0LlJHQkEsYXJndW1lbnRzWzNdfHx0LlVOU0lHTkVEX0JZVEUpO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBhcmd1bWVudHNbMV0pe3ZhciBlPWFyZ3VtZW50c1sxXSxyPWMoZSk/ZTplLnJhdztpZihyKXJldHVybiBmdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89Zyh0KTtyZXR1cm4gdC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLGksaSxhLGUpLG5ldyBmKHQsbyxyLG4saSxhKX0odCxyLDB8ZS53aWR0aCwwfGUuaGVpZ2h0LGFyZ3VtZW50c1syXXx8dC5SR0JBLGFyZ3VtZW50c1szXXx8dC5VTlNJR05FRF9CWVRFKTtpZihlLnNoYXBlJiZlLmRhdGEmJmUuc3RyaWRlKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPWUuZHR5cGUsbz1lLnNoYXBlLnNsaWNlKCkscz10LmdldFBhcmFtZXRlcih0Lk1BWF9URVhUVVJFX1NJWkUpO2lmKG9bMF08MHx8b1swXT5zfHxvWzFdPDB8fG9bMV0+cyl0aHJvdyBuZXcgRXJyb3IoXCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgdGV4dHVyZSBzaXplXCIpO3ZhciBsPWQobyxlLnN0cmlkZS5zbGljZSgpKSxjPTA7XCJmbG9hdDMyXCI9PT1yP2M9dC5GTE9BVDpcImZsb2F0NjRcIj09PXI/KGM9dC5GTE9BVCxsPSExLHI9XCJmbG9hdDMyXCIpOlwidWludDhcIj09PXI/Yz10LlVOU0lHTkVEX0JZVEU6KGM9dC5VTlNJR05FRF9CWVRFLGw9ITEscj1cInVpbnQ4XCIpO3ZhciBoLHAsdj0wO2lmKDI9PT1vLmxlbmd0aCl2PXQuTFVNSU5BTkNFLG89W29bMF0sb1sxXSwxXSxlPW4oZS5kYXRhLG8sW2Uuc3RyaWRlWzBdLGUuc3RyaWRlWzFdLDFdLGUub2Zmc2V0KTtlbHNle2lmKDMhPT1vLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgc2hhcGUgZm9yIHRleHR1cmVcIik7aWYoMT09PW9bMl0pdj10LkFMUEhBO2Vsc2UgaWYoMj09PW9bMl0pdj10LkxVTUlOQU5DRV9BTFBIQTtlbHNlIGlmKDM9PT1vWzJdKXY9dC5SR0I7ZWxzZXtpZig0IT09b1syXSl0aHJvdyBuZXcgRXJyb3IoXCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgc2hhcGUgZm9yIHBpeGVsIGNvb3Jkc1wiKTt2PXQuUkdCQX19YyE9PXQuRkxPQVR8fHQuZ2V0RXh0ZW5zaW9uKFwiT0VTX3RleHR1cmVfZmxvYXRcIil8fChjPXQuVU5TSUdORURfQllURSxsPSExKTt2YXIgbT1lLnNpemU7aWYobCloPTA9PT1lLm9mZnNldCYmZS5kYXRhLmxlbmd0aD09PW0/ZS5kYXRhOmUuZGF0YS5zdWJhcnJheShlLm9mZnNldCxlLm9mZnNldCttKTtlbHNle3ZhciB5PVtvWzJdLG9bMl0qb1swXSwxXTtwPWEubWFsbG9jKG0scik7dmFyIHg9bihwLG8seSwwKTtcImZsb2F0MzJcIiE9PXImJlwiZmxvYXQ2NFwiIT09cnx8YyE9PXQuVU5TSUdORURfQllURT9pLmFzc2lnbih4LGUpOnUoeCxlKSxoPXAuc3ViYXJyYXkoMCxtKX12YXIgYj1nKHQpO3QudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCx2LG9bMF0sb1sxXSwwLHYsYyxoKSxsfHxhLmZyZWUocCk7cmV0dXJuIG5ldyBmKHQsYixvWzBdLG9bMV0sdixjKX0odCxlKX10aHJvdyBuZXcgRXJyb3IoXCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgYXJndW1lbnRzIGZvciB0ZXh0dXJlMmQgY29uc3RydWN0b3JcIil9O3ZhciBvPW51bGwscz1udWxsLGw9bnVsbDtmdW5jdGlvbiBjKHQpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50fHxcInVuZGVmaW5lZFwiIT10eXBlb2YgSFRNTEltYWdlRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fFwidW5kZWZpbmVkXCIhPXR5cGVvZiBIVE1MVmlkZW9FbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudHx8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIEltYWdlRGF0YSYmdCBpbnN0YW5jZW9mIEltYWdlRGF0YX12YXIgdT1mdW5jdGlvbih0LGUpe2kubXVscyh0LGUsMjU1KX07ZnVuY3Rpb24gaCh0LGUscil7dmFyIG49dC5nbCxpPW4uZ2V0UGFyYW1ldGVyKG4uTUFYX1RFWFRVUkVfU0laRSk7aWYoZTwwfHxlPml8fHI8MHx8cj5pKXRocm93IG5ldyBFcnJvcihcImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNpemVcIik7cmV0dXJuIHQuX3NoYXBlPVtlLHJdLHQuYmluZCgpLG4udGV4SW1hZ2UyRChuLlRFWFRVUkVfMkQsMCx0LmZvcm1hdCxlLHIsMCx0LmZvcm1hdCx0LnR5cGUsbnVsbCksdC5fbWlwTGV2ZWxzPVswXSx0fWZ1bmN0aW9uIGYodCxlLHIsbixpLGEpe3RoaXMuZ2w9dCx0aGlzLmhhbmRsZT1lLHRoaXMuZm9ybWF0PWksdGhpcy50eXBlPWEsdGhpcy5fc2hhcGU9W3Isbl0sdGhpcy5fbWlwTGV2ZWxzPVswXSx0aGlzLl9tYWdGaWx0ZXI9dC5ORUFSRVNULHRoaXMuX21pbkZpbHRlcj10Lk5FQVJFU1QsdGhpcy5fd3JhcFM9dC5DTEFNUF9UT19FREdFLHRoaXMuX3dyYXBUPXQuQ0xBTVBfVE9fRURHRSx0aGlzLl9hbmlzb1NhbXBsZXM9MTt2YXIgbz10aGlzLHM9W3RoaXMuX3dyYXBTLHRoaXMuX3dyYXBUXTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzLFt7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uX3dyYXBTfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8ud3JhcFM9dH19LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5fd3JhcFR9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gby53cmFwVD10fX1dKSx0aGlzLl93cmFwVmVjdG9yPXM7dmFyIGw9W3RoaXMuX3NoYXBlWzBdLHRoaXMuX3NoYXBlWzFdXTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsLFt7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uX3NoYXBlWzBdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8ud2lkdGg9dH19LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5fc2hhcGVbMV19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gby5oZWlnaHQ9dH19XSksdGhpcy5fc2hhcGVWZWN0b3I9bH12YXIgcD1mLnByb3RvdHlwZTtmdW5jdGlvbiBkKHQsZSl7cmV0dXJuIDM9PT10Lmxlbmd0aD8xPT09ZVsyXSYmZVsxXT09PXRbMF0qdFsyXSYmZVswXT09PXRbMl06MT09PWVbMF0mJmVbMV09PT10WzBdfWZ1bmN0aW9uIGcodCl7dmFyIGU9dC5jcmVhdGVUZXh0dXJlKCk7cmV0dXJuIHQuYmluZFRleHR1cmUodC5URVhUVVJFXzJELGUpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX01JTl9GSUxURVIsdC5ORUFSRVNUKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NQUdfRklMVEVSLHQuTkVBUkVTVCksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfV1JBUF9TLHQuQ0xBTVBfVE9fRURHRSksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfV1JBUF9ULHQuQ0xBTVBfVE9fRURHRSksZX1mdW5jdGlvbiB2KHQsZSxyLG4saSl7dmFyIGE9dC5nZXRQYXJhbWV0ZXIodC5NQVhfVEVYVFVSRV9TSVpFKTtpZihlPDB8fGU+YXx8cjwwfHxyPmEpdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHRleHR1cmUgc2hhcGVcIik7aWYoaT09PXQuRkxPQVQmJiF0LmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0XCIpKXRocm93IG5ldyBFcnJvcihcImdsLXRleHR1cmUyZDogRmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtXCIpO3ZhciBvPWcodCk7cmV0dXJuIHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCxuLGUsciwwLG4saSxudWxsKSxuZXcgZih0LG8sZSxyLG4saSl9T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocCx7bWluRmlsdGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWluRmlsdGVyfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5iaW5kKCk7dmFyIGU9dGhpcy5nbDtpZih0aGlzLnR5cGU9PT1lLkZMT0FUJiZvLmluZGV4T2YodCk+PTAmJihlLmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhclwiKXx8KHQ9ZS5ORUFSRVNUKSkscy5pbmRleE9mKHQpPDApdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBVbmtub3duIGZpbHRlciBtb2RlIFwiK3QpO3JldHVybiBlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NSU5fRklMVEVSLHQpLHRoaXMuX21pbkZpbHRlcj10fX0sbWFnRmlsdGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFnRmlsdGVyfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5iaW5kKCk7dmFyIGU9dGhpcy5nbDtpZih0aGlzLnR5cGU9PT1lLkZMT0FUJiZvLmluZGV4T2YodCk+PTAmJihlLmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhclwiKXx8KHQ9ZS5ORUFSRVNUKSkscy5pbmRleE9mKHQpPDApdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBVbmtub3duIGZpbHRlciBtb2RlIFwiK3QpO3JldHVybiBlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NQUdfRklMVEVSLHQpLHRoaXMuX21hZ0ZpbHRlcj10fX0sbWlwU2FtcGxlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaXNvU2FtcGxlc30sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2FuaXNvU2FtcGxlcztpZih0aGlzLl9hbmlzb1NhbXBsZXM9MHxNYXRoLm1heCh0LDEpLGUhPT10aGlzLl9hbmlzb1NhbXBsZXMpe3ZhciByPXRoaXMuZ2wuZ2V0RXh0ZW5zaW9uKFwiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljXCIpO3ImJnRoaXMuZ2wudGV4UGFyYW1ldGVyZih0aGlzLmdsLlRFWFRVUkVfMkQsci5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCx0aGlzLl9hbmlzb1NhbXBsZXMpfXJldHVybiB0aGlzLl9hbmlzb1NhbXBsZXN9fSx3cmFwUzp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyYXBTfSxzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5iaW5kKCksbC5pbmRleE9mKHQpPDApdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBVbmtub3duIHdyYXAgbW9kZSBcIit0KTtyZXR1cm4gdGhpcy5nbC50ZXhQYXJhbWV0ZXJpKHRoaXMuZ2wuVEVYVFVSRV8yRCx0aGlzLmdsLlRFWFRVUkVfV1JBUF9TLHQpLHRoaXMuX3dyYXBTPXR9fSx3cmFwVDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyYXBUfSxzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5iaW5kKCksbC5pbmRleE9mKHQpPDApdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBVbmtub3duIHdyYXAgbW9kZSBcIit0KTtyZXR1cm4gdGhpcy5nbC50ZXhQYXJhbWV0ZXJpKHRoaXMuZ2wuVEVYVFVSRV8yRCx0aGlzLmdsLlRFWFRVUkVfV1JBUF9ULHQpLHRoaXMuX3dyYXBUPXR9fSx3cmFwOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JhcFZlY3Rvcn0sc2V0OmZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCl8fCh0PVt0LHRdKSwyIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBNdXN0IHNwZWNpZnkgd3JhcCBtb2RlIGZvciByb3dzIGFuZCBjb2x1bW5zXCIpO2Zvcih2YXIgZT0wO2U8MjsrK2UpaWYobC5pbmRleE9mKHRbZV0pPDApdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBVbmtub3duIHdyYXAgbW9kZSBcIit0KTt0aGlzLl93cmFwUz10WzBdLHRoaXMuX3dyYXBUPXRbMV07dmFyIHI9dGhpcy5nbDtyZXR1cm4gdGhpcy5iaW5kKCksci50ZXhQYXJhbWV0ZXJpKHIuVEVYVFVSRV8yRCxyLlRFWFRVUkVfV1JBUF9TLHRoaXMuX3dyYXBTKSxyLnRleFBhcmFtZXRlcmkoci5URVhUVVJFXzJELHIuVEVYVFVSRV9XUkFQX1QsdGhpcy5fd3JhcFQpLHR9fSxzaGFwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NoYXBlVmVjdG9yfSxzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYoMiE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNoYXBlXCIpfWVsc2UgdD1bMHx0LDB8dF07cmV0dXJuIGgodGhpcywwfHRbMF0sMHx0WzFdKSxbMHx0WzBdLDB8dFsxXV19fSx3aWR0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NoYXBlWzBdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGgodGhpcyx0fD0wLHRoaXMuX3NoYXBlWzFdKSx0fX0saGVpZ2h0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2hhcGVbMV19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdHw9MCxoKHRoaXMsdGhpcy5fc2hhcGVbMF0sdCksdH19fSkscC5iaW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2w7cmV0dXJuIHZvaWQgMCE9PXQmJmUuYWN0aXZlVGV4dHVyZShlLlRFWFRVUkUwKygwfHQpKSxlLmJpbmRUZXh0dXJlKGUuVEVYVFVSRV8yRCx0aGlzLmhhbmRsZSksdm9pZCAwIT09dD8wfHQ6ZS5nZXRQYXJhbWV0ZXIoZS5BQ1RJVkVfVEVYVFVSRSktZS5URVhUVVJFMH0scC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5nbC5kZWxldGVUZXh0dXJlKHRoaXMuaGFuZGxlKX0scC5nZW5lcmF0ZU1pcG1hcD1mdW5jdGlvbigpe3RoaXMuYmluZCgpLHRoaXMuZ2wuZ2VuZXJhdGVNaXBtYXAodGhpcy5nbC5URVhUVVJFXzJEKTtmb3IodmFyIHQ9TWF0aC5taW4odGhpcy5fc2hhcGVbMF0sdGhpcy5fc2hhcGVbMV0pLGU9MDt0PjA7KytlLHQ+Pj49MSl0aGlzLl9taXBMZXZlbHMuaW5kZXhPZihlKTwwJiZ0aGlzLl9taXBMZXZlbHMucHVzaChlKX0scC5zZXRQaXhlbHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHM9dGhpcy5nbDt0aGlzLmJpbmQoKSxBcnJheS5pc0FycmF5KGUpPyhvPXIscj0wfGVbMV0sZT0wfGVbMF0pOihlPWV8fDAscj1yfHwwKSxvPW98fDA7dmFyIGw9Yyh0KT90OnQucmF3O2lmKGwpe3RoaXMuX21pcExldmVscy5pbmRleE9mKG8pPDA/KHMudGV4SW1hZ2UyRChzLlRFWFRVUkVfMkQsMCx0aGlzLmZvcm1hdCx0aGlzLmZvcm1hdCx0aGlzLnR5cGUsbCksdGhpcy5fbWlwTGV2ZWxzLnB1c2gobykpOnMudGV4U3ViSW1hZ2UyRChzLlRFWFRVUkVfMkQsbyxlLHIsdGhpcy5mb3JtYXQsdGhpcy50eXBlLGwpfWVsc2V7aWYoISh0LnNoYXBlJiZ0LnN0cmlkZSYmdC5kYXRhKSl0aHJvdyBuZXcgRXJyb3IoXCJnbC10ZXh0dXJlMmQ6IFVuc3VwcG9ydGVkIGRhdGEgdHlwZVwiKTtpZih0LnNoYXBlLmxlbmd0aDwyfHxlK3Quc2hhcGVbMV0+dGhpcy5fc2hhcGVbMV0+Pj5vfHxyK3Quc2hhcGVbMF0+dGhpcy5fc2hhcGVbMF0+Pj5vfHxlPDB8fHI8MCl0aHJvdyBuZXcgRXJyb3IoXCJnbC10ZXh0dXJlMmQ6IFRleHR1cmUgZGltZW5zaW9ucyBhcmUgb3V0IG9mIGJvdW5kc1wiKTshZnVuY3Rpb24odCxlLHIsbyxzLGwsYyxoKXt2YXIgZj1oLmR0eXBlLHA9aC5zaGFwZS5zbGljZSgpO2lmKHAubGVuZ3RoPDJ8fHAubGVuZ3RoPjMpdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIG5kYXJyYXksIG11c3QgYmUgMmQgb3IgM2RcIik7dmFyIGc9MCx2PTAsbT1kKHAsaC5zdHJpZGUuc2xpY2UoKSk7XCJmbG9hdDMyXCI9PT1mP2c9dC5GTE9BVDpcImZsb2F0NjRcIj09PWY/KGc9dC5GTE9BVCxtPSExLGY9XCJmbG9hdDMyXCIpOlwidWludDhcIj09PWY/Zz10LlVOU0lHTkVEX0JZVEU6KGc9dC5VTlNJR05FRF9CWVRFLG09ITEsZj1cInVpbnQ4XCIpO2lmKDI9PT1wLmxlbmd0aCl2PXQuTFVNSU5BTkNFLHA9W3BbMF0scFsxXSwxXSxoPW4oaC5kYXRhLHAsW2guc3RyaWRlWzBdLGguc3RyaWRlWzFdLDFdLGgub2Zmc2V0KTtlbHNle2lmKDMhPT1wLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgc2hhcGUgZm9yIHRleHR1cmVcIik7aWYoMT09PXBbMl0pdj10LkFMUEhBO2Vsc2UgaWYoMj09PXBbMl0pdj10LkxVTUlOQU5DRV9BTFBIQTtlbHNlIGlmKDM9PT1wWzJdKXY9dC5SR0I7ZWxzZXtpZig0IT09cFsyXSl0aHJvdyBuZXcgRXJyb3IoXCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgc2hhcGUgZm9yIHBpeGVsIGNvb3Jkc1wiKTt2PXQuUkdCQX1wWzJdfXYhPT10LkxVTUlOQU5DRSYmdiE9PXQuQUxQSEF8fHMhPT10LkxVTUlOQU5DRSYmcyE9PXQuQUxQSEF8fCh2PXMpO2lmKHYhPT1zKXRocm93IG5ldyBFcnJvcihcImdsLXRleHR1cmUyZDogSW5jb21wYXRpYmxlIHRleHR1cmUgZm9ybWF0IGZvciBzZXRQaXhlbHNcIik7dmFyIHk9aC5zaXplLHg9Yy5pbmRleE9mKG8pPDA7eCYmYy5wdXNoKG8pO2lmKGc9PT1sJiZtKTA9PT1oLm9mZnNldCYmaC5kYXRhLmxlbmd0aD09PXk/eD90LnRleEltYWdlMkQodC5URVhUVVJFXzJELG8scyxwWzBdLHBbMV0sMCxzLGwsaC5kYXRhKTp0LnRleFN1YkltYWdlMkQodC5URVhUVVJFXzJELG8sZSxyLHBbMF0scFsxXSxzLGwsaC5kYXRhKTp4P3QudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsbyxzLHBbMF0scFsxXSwwLHMsbCxoLmRhdGEuc3ViYXJyYXkoaC5vZmZzZXQsaC5vZmZzZXQreSkpOnQudGV4U3ViSW1hZ2UyRCh0LlRFWFRVUkVfMkQsbyxlLHIscFswXSxwWzFdLHMsbCxoLmRhdGEuc3ViYXJyYXkoaC5vZmZzZXQsaC5vZmZzZXQreSkpO2Vsc2V7dmFyIGI7Yj1sPT09dC5GTE9BVD9hLm1hbGxvY0Zsb2F0MzIoeSk6YS5tYWxsb2NVaW50OCh5KTt2YXIgXz1uKGIscCxbcFsyXSxwWzJdKnBbMF0sMV0pO2c9PT10LkZMT0FUJiZsPT09dC5VTlNJR05FRF9CWVRFP3UoXyxoKTppLmFzc2lnbihfLGgpLHg/dC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCxvLHMscFswXSxwWzFdLDAscyxsLGIuc3ViYXJyYXkoMCx5KSk6dC50ZXhTdWJJbWFnZTJEKHQuVEVYVFVSRV8yRCxvLGUscixwWzBdLHBbMV0scyxsLGIuc3ViYXJyYXkoMCx5KSksbD09PXQuRkxPQVQ/YS5mcmVlRmxvYXQzMihiKTphLmZyZWVVaW50OChiKX19KHMsZSxyLG8sdGhpcy5mb3JtYXQsdGhpcy50eXBlLHRoaXMuX21pcExldmVscyx0KX19fSx7bmRhcnJheTo0NDMsXCJuZGFycmF5LW9wc1wiOjQzNyxcInR5cGVkYXJyYXktcG9vbFwiOjUzMH1dLDMxNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJwaWNrLWJ5LWFsaWFzXCIpO2Z1bmN0aW9uIGkodCl7aWYodC5jb250YWluZXIpaWYodC5jb250YWluZXI9PWRvY3VtZW50LmJvZHkpZG9jdW1lbnQuYm9keS5zdHlsZS53aWR0aHx8KHQuY2FudmFzLndpZHRoPXQud2lkdGh8fHQucGl4ZWxSYXRpbyp3aW5kb3cuaW5uZXJXaWR0aCksZG9jdW1lbnQuYm9keS5zdHlsZS5oZWlnaHR8fCh0LmNhbnZhcy5oZWlnaHQ9dC5oZWlnaHR8fHQucGl4ZWxSYXRpbyp3aW5kb3cuaW5uZXJIZWlnaHQpO2Vsc2V7dmFyIGU9dC5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dC5jYW52YXMud2lkdGg9dC53aWR0aHx8ZS5yaWdodC1lLmxlZnQsdC5jYW52YXMuaGVpZ2h0PXQuaGVpZ2h0fHxlLmJvdHRvbS1lLnRvcH19ZnVuY3Rpb24gYSh0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmdldENvbnRleHQmJlwid2lkdGhcImluIHQmJlwiaGVpZ2h0XCJpbiB0fWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZTtpZih0P1wic3RyaW5nXCI9PXR5cGVvZiB0JiYodD17Y29udGFpbmVyOnR9KTp0PXt9LGEodCk/dD17Y29udGFpbmVyOnR9OnQ9XCJzdHJpbmdcIj09dHlwZW9mKGU9dCkubm9kZU5hbWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuYXBwZW5kQ2hpbGQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0P3tjb250YWluZXI6dH06ZnVuY3Rpb24odCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdC5kcmF3QXJyYXlzfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmRyYXdFbGVtZW50c30odCk/e2dsOnR9Om4odCx7Y29udGFpbmVyOlwiY29udGFpbmVyIHRhcmdldCBlbGVtZW50IGVsIGNhbnZhcyBob2xkZXIgcGFyZW50IHBhcmVudE5vZGUgd3JhcHBlciB1c2UgcmVmIHJvb3Qgbm9kZVwiLGdsOlwiZ2wgY29udGV4dCB3ZWJnbCBnbENvbnRleHRcIixhdHRyczpcImF0dHJpYnV0ZXMgYXR0cnMgY29udGV4dEF0dHJpYnV0ZXNcIixwaXhlbFJhdGlvOlwicGl4ZWxSYXRpbyBweFJhdGlvIHB4IHJhdGlvIHB4cmF0aW8gcGl4ZWxyYXRpb1wifSwhMCksdC5waXhlbFJhdGlvfHwodC5waXhlbFJhdGlvPXdpbmRvdy5waXhlbFJhdGlvfHwxKSx0LmdsKXJldHVybiB0LmdsO2lmKHQuY2FudmFzJiYodC5jb250YWluZXI9dC5jYW52YXMucGFyZW50Tm9kZSksdC5jb250YWluZXIpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0LmNvbnRhaW5lcil7dmFyIHI9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0LmNvbnRhaW5lcik7aWYoIXIpdGhyb3cgRXJyb3IoXCJFbGVtZW50IFwiK3QuY29udGFpbmVyK1wiIGlzIG5vdCBmb3VuZFwiKTt0LmNvbnRhaW5lcj1yfWEodC5jb250YWluZXIpPyh0LmNhbnZhcz10LmNvbnRhaW5lcix0LmNvbnRhaW5lcj10LmNhbnZhcy5wYXJlbnROb2RlKTp0LmNhbnZhc3x8KHQuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksdC5jb250YWluZXIuYXBwZW5kQ2hpbGQodC5jYW52YXMpLGkodCkpfWVsc2UgdC5jYW52YXN8fCh0LmNvbnRhaW5lcj1kb2N1bWVudC5ib2R5fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsdC5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSx0LmNhbnZhcy5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsdC5jYW52YXMuc3R5bGUudG9wPTAsdC5jYW52YXMuc3R5bGUubGVmdD0wLHQuY29udGFpbmVyLmFwcGVuZENoaWxkKHQuY2FudmFzKSxpKHQpKTtpZighdC5nbCl0cnl7dC5nbD10LmNhbnZhcy5nZXRDb250ZXh0KFwid2ViZ2xcIix0LmF0dHJzKX1jYXRjaChlKXt0cnl7dC5nbD10LmNhbnZhcy5nZXRDb250ZXh0KFwiZXhwZXJpbWVudGFsLXdlYmdsXCIsdC5hdHRycyl9Y2F0Y2goZSl7dC5nbD10LmNhbnZhcy5nZXRDb250ZXh0KFwid2ViZ2wtZXhwZXJpbWVudGFsXCIsdC5hdHRycyl9fXJldHVybiB0LmdsfX0se1wicGljay1ieS1hbGlhc1wiOjQ1OH1dLDMxNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZT9lLmJpbmQoKTp0LmJpbmRCdWZmZXIodC5FTEVNRU5UX0FSUkFZX0JVRkZFUixudWxsKTt2YXIgbj0wfHQuZ2V0UGFyYW1ldGVyKHQuTUFYX1ZFUlRFWF9BVFRSSUJTKTtpZihyKXtpZihyLmxlbmd0aD5uKXRocm93IG5ldyBFcnJvcihcImdsLXZhbzogVG9vIG1hbnkgdmVydGV4IGF0dHJpYnV0ZXNcIik7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDsrK2kpe3ZhciBhPXJbaV07aWYoYS5idWZmZXIpe3ZhciBvPWEuYnVmZmVyLHM9YS5zaXplfHw0LGw9YS50eXBlfHx0LkZMT0FULGM9ISFhLm5vcm1hbGl6ZWQsdT1hLnN0cmlkZXx8MCxoPWEub2Zmc2V0fHwwO28uYmluZCgpLHQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSksdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGkscyxsLGMsdSxoKX1lbHNle2lmKFwibnVtYmVyXCI9PXR5cGVvZiBhKXQudmVydGV4QXR0cmliMWYoaSxhKTtlbHNlIGlmKDE9PT1hLmxlbmd0aCl0LnZlcnRleEF0dHJpYjFmKGksYVswXSk7ZWxzZSBpZigyPT09YS5sZW5ndGgpdC52ZXJ0ZXhBdHRyaWIyZihpLGFbMF0sYVsxXSk7ZWxzZSBpZigzPT09YS5sZW5ndGgpdC52ZXJ0ZXhBdHRyaWIzZihpLGFbMF0sYVsxXSxhWzJdKTtlbHNle2lmKDQhPT1hLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJnbC12YW86IEludmFsaWQgdmVydGV4IGF0dHJpYnV0ZVwiKTt0LnZlcnRleEF0dHJpYjRmKGksYVswXSxhWzFdLGFbMl0sYVszXSl9dC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSl9fWZvcig7aTxuOysraSl0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKX1lbHNlIGZvcih0LmJpbmRCdWZmZXIodC5BUlJBWV9CVUZGRVIsbnVsbCksaT0wO2k8bjsrK2kpdC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSl9fSx7fV0sMzE4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vZG8tYmluZC5qc1wiKTtmdW5jdGlvbiBpKHQpe3RoaXMuZ2w9dCx0aGlzLl9lbGVtZW50cz1udWxsLHRoaXMuX2F0dHJpYnV0ZXM9bnVsbCx0aGlzLl9lbGVtZW50c1R5cGU9dC5VTlNJR05FRF9TSE9SVH1pLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7bih0aGlzLmdsLHRoaXMuX2VsZW1lbnRzLHRoaXMuX2F0dHJpYnV0ZXMpfSxpLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX2VsZW1lbnRzPWUsdGhpcy5fYXR0cmlidXRlcz10LHRoaXMuX2VsZW1lbnRzVHlwZT1yfHx0aGlzLmdsLlVOU0lHTkVEX1NIT1JUfSxpLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7fSxpLnByb3RvdHlwZS51bmJpbmQ9ZnVuY3Rpb24oKXt9LGkucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxlLHIpe3I9cnx8MDt2YXIgbj10aGlzLmdsO3RoaXMuX2VsZW1lbnRzP24uZHJhd0VsZW1lbnRzKHQsZSx0aGlzLl9lbGVtZW50c1R5cGUscik6bi5kcmF3QXJyYXlzKHQscixlKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaSh0KX19LHtcIi4vZG8tYmluZC5qc1wiOjMxN31dLDMxOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2RvLWJpbmQuanNcIik7ZnVuY3Rpb24gaSh0LGUscixuLGksYSl7dGhpcy5sb2NhdGlvbj10LHRoaXMuZGltZW5zaW9uPWUsdGhpcy5hPXIsdGhpcy5iPW4sdGhpcy5jPWksdGhpcy5kPWF9ZnVuY3Rpb24gYSh0LGUscil7dGhpcy5nbD10LHRoaXMuX2V4dD1lLHRoaXMuaGFuZGxlPXIsdGhpcy5fYXR0cmlicz1bXSx0aGlzLl91c2VFbGVtZW50cz0hMSx0aGlzLl9lbGVtZW50c1R5cGU9dC5VTlNJR05FRF9TSE9SVH1pLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQpe3N3aXRjaCh0aGlzLmRpbWVuc2lvbil7Y2FzZSAxOnQudmVydGV4QXR0cmliMWYodGhpcy5sb2NhdGlvbix0aGlzLmEpO2JyZWFrO2Nhc2UgMjp0LnZlcnRleEF0dHJpYjJmKHRoaXMubG9jYXRpb24sdGhpcy5hLHRoaXMuYik7YnJlYWs7Y2FzZSAzOnQudmVydGV4QXR0cmliM2YodGhpcy5sb2NhdGlvbix0aGlzLmEsdGhpcy5iLHRoaXMuYyk7YnJlYWs7Y2FzZSA0OnQudmVydGV4QXR0cmliNGYodGhpcy5sb2NhdGlvbix0aGlzLmEsdGhpcy5iLHRoaXMuYyx0aGlzLmQpfX0sYS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe3RoaXMuX2V4dC5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5oYW5kbGUpO2Zvcih2YXIgdD0wO3Q8dGhpcy5fYXR0cmlicy5sZW5ndGg7Kyt0KXRoaXMuX2F0dHJpYnNbdF0uYmluZCh0aGlzLmdsKX0sYS5wcm90b3R5cGUudW5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5fZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKX0sYS5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX2V4dC5kZWxldGVWZXJ0ZXhBcnJheU9FUyh0aGlzLmhhbmRsZSl9LGEucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7aWYodGhpcy5iaW5kKCksbih0aGlzLmdsLGUsdCksdGhpcy51bmJpbmQoKSx0aGlzLl9hdHRyaWJzLmxlbmd0aD0wLHQpZm9yKHZhciBhPTA7YTx0Lmxlbmd0aDsrK2Epe3ZhciBvPXRbYV07XCJudW1iZXJcIj09dHlwZW9mIG8/dGhpcy5fYXR0cmlicy5wdXNoKG5ldyBpKGEsMSxvKSk6QXJyYXkuaXNBcnJheShvKSYmdGhpcy5fYXR0cmlicy5wdXNoKG5ldyBpKGEsby5sZW5ndGgsb1swXSxvWzFdLG9bMl0sb1szXSkpfXRoaXMuX3VzZUVsZW1lbnRzPSEhZSx0aGlzLl9lbGVtZW50c1R5cGU9cnx8dGhpcy5nbC5VTlNJR05FRF9TSE9SVH0sYS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0LGUscil7cj1yfHwwO3ZhciBuPXRoaXMuZ2w7dGhpcy5fdXNlRWxlbWVudHM/bi5kcmF3RWxlbWVudHModCxlLHRoaXMuX2VsZW1lbnRzVHlwZSxyKTpuLmRyYXdBcnJheXModCxyLGUpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGEodCxlLGUuY3JlYXRlVmVydGV4QXJyYXlPRVMoKSl9fSx7XCIuL2RvLWJpbmQuanNcIjozMTd9XSwzMjA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9saWIvdmFvLW5hdGl2ZS5qc1wiKSxpPXQoXCIuL2xpYi92YW8tZW11bGF0ZWQuanNcIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmJpbmRWZXJ0ZXhBcnJheU9FUz10LmJpbmRWZXJ0ZXhBcnJheS5iaW5kKHQpLHRoaXMuY3JlYXRlVmVydGV4QXJyYXlPRVM9dC5jcmVhdGVWZXJ0ZXhBcnJheS5iaW5kKHQpLHRoaXMuZGVsZXRlVmVydGV4QXJyYXlPRVM9dC5kZWxldGVWZXJ0ZXhBcnJheS5iaW5kKHQpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcyxsPXQuY3JlYXRlVmVydGV4QXJyYXk/bmV3IGEodCk6dC5nZXRFeHRlbnNpb24oXCJPRVNfdmVydGV4X2FycmF5X29iamVjdFwiKTtyZXR1cm4ocz1sP24odCxsKTppKHQpKS51cGRhdGUoZSxyLG8pLHN9fSx7XCIuL2xpYi92YW8tZW11bGF0ZWQuanNcIjozMTgsXCIuL2xpYi92YW8tbmF0aXZlLmpzXCI6MzE5fV0sMzIxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdK3JbMF0sdFsxXT1lWzFdK3JbMV0sdFsyXT1lWzJdK3JbMl0sdH19LHt9XSwzMjI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKHRbMF0sdFsxXSx0WzJdKSxvPW4oZVswXSxlWzFdLGVbMl0pO2kocixyKSxpKG8sbyk7dmFyIHM9YShyLG8pO3JldHVybiBzPjE/MDpNYXRoLmFjb3Mocyl9O3ZhciBuPXQoXCIuL2Zyb21WYWx1ZXNcIiksaT10KFwiLi9ub3JtYWxpemVcIiksYT10KFwiLi9kb3RcIil9LHtcIi4vZG90XCI6MzMyLFwiLi9mcm9tVmFsdWVzXCI6MzM4LFwiLi9ub3JtYWxpemVcIjozNDl9XSwzMjM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1NYXRoLmNlaWwoZVswXSksdFsxXT1NYXRoLmNlaWwoZVsxXSksdFsyXT1NYXRoLmNlaWwoZVsyXSksdH19LHt9XSwzMjQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEZsb2F0MzJBcnJheSgzKTtyZXR1cm4gZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZX19LHt9XSwzMjU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdH19LHt9XSwzMjY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgRmxvYXQzMkFycmF5KDMpO3JldHVybiB0WzBdPTAsdFsxXT0wLHRbMl09MCx0fX0se31dLDMyNzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89clswXSxzPXJbMV0sbD1yWzJdO3JldHVybiB0WzBdPWkqbC1hKnMsdFsxXT1hKm8tbipsLHRbMl09bipzLWkqbyx0fX0se31dLDMyODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KFwiLi9kaXN0YW5jZVwiKX0se1wiLi9kaXN0YW5jZVwiOjMyOX1dLDMyOTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0tdFswXSxuPWVbMV0tdFsxXSxpPWVbMl0tdFsyXTtyZXR1cm4gTWF0aC5zcXJ0KHIqcituKm4raSppKX19LHt9XSwzMzA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dChcIi4vZGl2aWRlXCIpfSx7XCIuL2RpdmlkZVwiOjMzMX1dLDMzMTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXS9yWzBdLHRbMV09ZVsxXS9yWzFdLHRbMl09ZVsyXS9yWzJdLHR9fSx7fV0sMzMyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdfX0se31dLDMzMzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz0xZS02fSx7fV0sMzM0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxpPXRbMV0sYT10WzJdLG89ZVswXSxzPWVbMV0sbD1lWzJdO3JldHVybiBNYXRoLmFicyhyLW8pPD1uKk1hdGgubWF4KDEsTWF0aC5hYnMociksTWF0aC5hYnMobykpJiZNYXRoLmFicyhpLXMpPD1uKk1hdGgubWF4KDEsTWF0aC5hYnMoaSksTWF0aC5hYnMocykpJiZNYXRoLmFicyhhLWwpPD1uKk1hdGgubWF4KDEsTWF0aC5hYnMoYSksTWF0aC5hYnMobCkpfTt2YXIgbj10KFwiLi9lcHNpbG9uXCIpfSx7XCIuL2Vwc2lsb25cIjozMzN9XSwzMzU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT09PWVbMF0mJnRbMV09PT1lWzFdJiZ0WzJdPT09ZVsyXX19LHt9XSwzMzY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1NYXRoLmZsb29yKGVbMF0pLHRbMV09TWF0aC5mbG9vcihlWzFdKSx0WzJdPU1hdGguZmxvb3IoZVsyXSksdH19LHt9XSwzMzc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSxhLG8pe3ZhciBzLGw7ZXx8KGU9Myk7cnx8KHI9MCk7bD1pP01hdGgubWluKGkqZStyLHQubGVuZ3RoKTp0Lmxlbmd0aDtmb3Iocz1yO3M8bDtzKz1lKW5bMF09dFtzXSxuWzFdPXRbcysxXSxuWzJdPXRbcysyXSxhKG4sbixvKSx0W3NdPW5bMF0sdFtzKzFdPW5bMV0sdFtzKzJdPW5bMl07cmV0dXJuIHR9O3ZhciBuPXQoXCIuL2NyZWF0ZVwiKSgpfSx7XCIuL2NyZWF0ZVwiOjMyNn1dLDMzODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IEZsb2F0MzJBcnJheSgzKTtyZXR1cm4gblswXT10LG5bMV09ZSxuWzJdPXIsbn19LHt9XSwzMzk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e0VQU0lMT046dChcIi4vZXBzaWxvblwiKSxjcmVhdGU6dChcIi4vY3JlYXRlXCIpLGNsb25lOnQoXCIuL2Nsb25lXCIpLGFuZ2xlOnQoXCIuL2FuZ2xlXCIpLGZyb21WYWx1ZXM6dChcIi4vZnJvbVZhbHVlc1wiKSxjb3B5OnQoXCIuL2NvcHlcIiksc2V0OnQoXCIuL3NldFwiKSxlcXVhbHM6dChcIi4vZXF1YWxzXCIpLGV4YWN0RXF1YWxzOnQoXCIuL2V4YWN0RXF1YWxzXCIpLGFkZDp0KFwiLi9hZGRcIiksc3VidHJhY3Q6dChcIi4vc3VidHJhY3RcIiksc3ViOnQoXCIuL3N1YlwiKSxtdWx0aXBseTp0KFwiLi9tdWx0aXBseVwiKSxtdWw6dChcIi4vbXVsXCIpLGRpdmlkZTp0KFwiLi9kaXZpZGVcIiksZGl2OnQoXCIuL2RpdlwiKSxtaW46dChcIi4vbWluXCIpLG1heDp0KFwiLi9tYXhcIiksZmxvb3I6dChcIi4vZmxvb3JcIiksY2VpbDp0KFwiLi9jZWlsXCIpLHJvdW5kOnQoXCIuL3JvdW5kXCIpLHNjYWxlOnQoXCIuL3NjYWxlXCIpLHNjYWxlQW5kQWRkOnQoXCIuL3NjYWxlQW5kQWRkXCIpLGRpc3RhbmNlOnQoXCIuL2Rpc3RhbmNlXCIpLGRpc3Q6dChcIi4vZGlzdFwiKSxzcXVhcmVkRGlzdGFuY2U6dChcIi4vc3F1YXJlZERpc3RhbmNlXCIpLHNxckRpc3Q6dChcIi4vc3FyRGlzdFwiKSxsZW5ndGg6dChcIi4vbGVuZ3RoXCIpLGxlbjp0KFwiLi9sZW5cIiksc3F1YXJlZExlbmd0aDp0KFwiLi9zcXVhcmVkTGVuZ3RoXCIpLHNxckxlbjp0KFwiLi9zcXJMZW5cIiksbmVnYXRlOnQoXCIuL25lZ2F0ZVwiKSxpbnZlcnNlOnQoXCIuL2ludmVyc2VcIiksbm9ybWFsaXplOnQoXCIuL25vcm1hbGl6ZVwiKSxkb3Q6dChcIi4vZG90XCIpLGNyb3NzOnQoXCIuL2Nyb3NzXCIpLGxlcnA6dChcIi4vbGVycFwiKSxyYW5kb206dChcIi4vcmFuZG9tXCIpLHRyYW5zZm9ybU1hdDQ6dChcIi4vdHJhbnNmb3JtTWF0NFwiKSx0cmFuc2Zvcm1NYXQzOnQoXCIuL3RyYW5zZm9ybU1hdDNcIiksdHJhbnNmb3JtUXVhdDp0KFwiLi90cmFuc2Zvcm1RdWF0XCIpLHJvdGF0ZVg6dChcIi4vcm90YXRlWFwiKSxyb3RhdGVZOnQoXCIuL3JvdGF0ZVlcIikscm90YXRlWjp0KFwiLi9yb3RhdGVaXCIpLGZvckVhY2g6dChcIi4vZm9yRWFjaFwiKX19LHtcIi4vYWRkXCI6MzIxLFwiLi9hbmdsZVwiOjMyMixcIi4vY2VpbFwiOjMyMyxcIi4vY2xvbmVcIjozMjQsXCIuL2NvcHlcIjozMjUsXCIuL2NyZWF0ZVwiOjMyNixcIi4vY3Jvc3NcIjozMjcsXCIuL2Rpc3RcIjozMjgsXCIuL2Rpc3RhbmNlXCI6MzI5LFwiLi9kaXZcIjozMzAsXCIuL2RpdmlkZVwiOjMzMSxcIi4vZG90XCI6MzMyLFwiLi9lcHNpbG9uXCI6MzMzLFwiLi9lcXVhbHNcIjozMzQsXCIuL2V4YWN0RXF1YWxzXCI6MzM1LFwiLi9mbG9vclwiOjMzNixcIi4vZm9yRWFjaFwiOjMzNyxcIi4vZnJvbVZhbHVlc1wiOjMzOCxcIi4vaW52ZXJzZVwiOjM0MCxcIi4vbGVuXCI6MzQxLFwiLi9sZW5ndGhcIjozNDIsXCIuL2xlcnBcIjozNDMsXCIuL21heFwiOjM0NCxcIi4vbWluXCI6MzQ1LFwiLi9tdWxcIjozNDYsXCIuL211bHRpcGx5XCI6MzQ3LFwiLi9uZWdhdGVcIjozNDgsXCIuL25vcm1hbGl6ZVwiOjM0OSxcIi4vcmFuZG9tXCI6MzUwLFwiLi9yb3RhdGVYXCI6MzUxLFwiLi9yb3RhdGVZXCI6MzUyLFwiLi9yb3RhdGVaXCI6MzUzLFwiLi9yb3VuZFwiOjM1NCxcIi4vc2NhbGVcIjozNTUsXCIuL3NjYWxlQW5kQWRkXCI6MzU2LFwiLi9zZXRcIjozNTcsXCIuL3NxckRpc3RcIjozNTgsXCIuL3NxckxlblwiOjM1OSxcIi4vc3F1YXJlZERpc3RhbmNlXCI6MzYwLFwiLi9zcXVhcmVkTGVuZ3RoXCI6MzYxLFwiLi9zdWJcIjozNjIsXCIuL3N1YnRyYWN0XCI6MzYzLFwiLi90cmFuc2Zvcm1NYXQzXCI6MzY0LFwiLi90cmFuc2Zvcm1NYXQ0XCI6MzY1LFwiLi90cmFuc2Zvcm1RdWF0XCI6MzY2fV0sMzQwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09MS9lWzBdLHRbMV09MS9lWzFdLHRbMl09MS9lWzJdLHR9fSx7fV0sMzQxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoXCIuL2xlbmd0aFwiKX0se1wiLi9sZW5ndGhcIjozNDJ9XSwzNDI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdO3JldHVybiBNYXRoLnNxcnQoZSplK3IqcituKm4pfX0se31dLDM0MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lWzBdLGE9ZVsxXSxvPWVbMl07cmV0dXJuIHRbMF09aStuKihyWzBdLWkpLHRbMV09YStuKihyWzFdLWEpLHRbMl09bytuKihyWzJdLW8pLHR9fSx7fV0sMzQ0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1heChlWzBdLHJbMF0pLHRbMV09TWF0aC5tYXgoZVsxXSxyWzFdKSx0WzJdPU1hdGgubWF4KGVbMl0sclsyXSksdH19LHt9XSwzNDU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPU1hdGgubWluKGVbMF0sclswXSksdFsxXT1NYXRoLm1pbihlWzFdLHJbMV0pLHRbMl09TWF0aC5taW4oZVsyXSxyWzJdKSx0fX0se31dLDM0NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KFwiLi9tdWx0aXBseVwiKX0se1wiLi9tdWx0aXBseVwiOjM0N31dLDM0NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXSpyWzBdLHRbMV09ZVsxXSpyWzFdLHRbMl09ZVsyXSpyWzJdLHR9fSx7fV0sMzQ4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09LWVbMF0sdFsxXT0tZVsxXSx0WzJdPS1lWzJdLHR9fSx7fV0sMzQ5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9cipyK24qbitpKmk7YT4wJiYoYT0xL01hdGguc3FydChhKSx0WzBdPWVbMF0qYSx0WzFdPWVbMV0qYSx0WzJdPWVbMl0qYSk7cmV0dXJuIHR9fSx7fV0sMzUwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHwxO3ZhciByPTIqTWF0aC5yYW5kb20oKSpNYXRoLlBJLG49MipNYXRoLnJhbmRvbSgpLTEsaT1NYXRoLnNxcnQoMS1uKm4pKmU7cmV0dXJuIHRbMF09TWF0aC5jb3MocikqaSx0WzFdPU1hdGguc2luKHIpKmksdFsyXT1uKmUsdH19LHt9XSwzNTE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9clsxXSxhPXJbMl0sbz1lWzFdLWkscz1lWzJdLWEsbD1NYXRoLnNpbihuKSxjPU1hdGguY29zKG4pO3JldHVybiB0WzBdPWVbMF0sdFsxXT1pK28qYy1zKmwsdFsyXT1hK28qbCtzKmMsdH19LHt9XSwzNTI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9clswXSxhPXJbMl0sbz1lWzBdLWkscz1lWzJdLWEsbD1NYXRoLnNpbihuKSxjPU1hdGguY29zKG4pO3JldHVybiB0WzBdPWkrcypsK28qYyx0WzFdPWVbMV0sdFsyXT1hK3MqYy1vKmwsdH19LHt9XSwzNTM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9clswXSxhPXJbMV0sbz1lWzBdLWkscz1lWzFdLWEsbD1NYXRoLnNpbihuKSxjPU1hdGguY29zKG4pO3JldHVybiB0WzBdPWkrbypjLXMqbCx0WzFdPWErbypsK3MqYyx0WzJdPWVbMl0sdH19LHt9XSwzNTQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1NYXRoLnJvdW5kKGVbMF0pLHRbMV09TWF0aC5yb3VuZChlWzFdKSx0WzJdPU1hdGgucm91bmQoZVsyXSksdH19LHt9XSwzNTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qcix0WzFdPWVbMV0qcix0WzJdPWVbMl0qcix0fX0se31dLDM1NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdFswXT1lWzBdK3JbMF0qbix0WzFdPWVbMV0rclsxXSpuLHRbMl09ZVsyXStyWzJdKm4sdH19LHt9XSwzNTc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRbMF09ZSx0WzFdPXIsdFsyXT1uLHR9fSx7fV0sMzU4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoXCIuL3NxdWFyZWREaXN0YW5jZVwiKX0se1wiLi9zcXVhcmVkRGlzdGFuY2VcIjozNjB9XSwzNTk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dChcIi4vc3F1YXJlZExlbmd0aFwiKX0se1wiLi9zcXVhcmVkTGVuZ3RoXCI6MzYxfV0sMzYwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdLGk9ZVsyXS10WzJdO3JldHVybiByKnIrbipuK2kqaX19LHt9XSwzNjE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdO3JldHVybiBlKmUrcipyK24qbn19LHt9XSwzNjI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dChcIi4vc3VidHJhY3RcIil9LHtcIi4vc3VidHJhY3RcIjozNjN9XSwzNjM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0tclswXSx0WzFdPWVbMV0tclsxXSx0WzJdPWVbMl0tclsyXSx0fX0se31dLDM2NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdO3JldHVybiB0WzBdPW4qclswXStpKnJbM10rYSpyWzZdLHRbMV09bipyWzFdK2kqcls0XSthKnJbN10sdFsyXT1uKnJbMl0raSpyWzVdK2Eqcls4XSx0fX0se31dLDM2NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89clszXSpuK3JbN10qaStyWzExXSphK3JbMTVdO3JldHVybiBvPW98fDEsdFswXT0oclswXSpuK3JbNF0qaStyWzhdKmErclsxMl0pL28sdFsxXT0oclsxXSpuK3JbNV0qaStyWzldKmErclsxM10pL28sdFsyXT0oclsyXSpuK3JbNl0qaStyWzEwXSphK3JbMTRdKS9vLHR9fSx7fV0sMzY2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1yWzBdLHM9clsxXSxsPXJbMl0sYz1yWzNdLHU9YypuK3MqYS1sKmksaD1jKmkrbCpuLW8qYSxmPWMqYStvKmktcypuLHA9LW8qbi1zKmktbCphO3JldHVybiB0WzBdPXUqYytwKi1vK2gqLWwtZiotcyx0WzFdPWgqYytwKi1zK2YqLW8tdSotbCx0WzJdPWYqYytwKi1sK3UqLXMtaCotbyx0fX0se31dLDM2NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXStyWzBdLHRbMV09ZVsxXStyWzFdLHRbMl09ZVsyXStyWzJdLHRbM109ZVszXStyWzNdLHR9fSx7fV0sMzY4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBGbG9hdDMyQXJyYXkoNCk7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlfX0se31dLDM2OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdH19LHt9XSwzNzA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgRmxvYXQzMkFycmF5KDQpO3JldHVybiB0WzBdPTAsdFsxXT0wLHRbMl09MCx0WzNdPTAsdH19LHt9XSwzNzE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLXRbMF0sbj1lWzFdLXRbMV0saT1lWzJdLXRbMl0sYT1lWzNdLXRbM107cmV0dXJuIE1hdGguc3FydChyKnIrbipuK2kqaSthKmEpfX0se31dLDM3MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXS9yWzBdLHRbMV09ZVsxXS9yWzFdLHRbMl09ZVsyXS9yWzJdLHRbM109ZVszXS9yWzNdLHR9fSx7fV0sMzczOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdK3RbM10qZVszXX19LHt9XSwzNzQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bmV3IEZsb2F0MzJBcnJheSg0KTtyZXR1cm4gaVswXT10LGlbMV09ZSxpWzJdPXIsaVszXT1uLGl9fSx7fV0sMzc1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXtjcmVhdGU6dChcIi4vY3JlYXRlXCIpLGNsb25lOnQoXCIuL2Nsb25lXCIpLGZyb21WYWx1ZXM6dChcIi4vZnJvbVZhbHVlc1wiKSxjb3B5OnQoXCIuL2NvcHlcIiksc2V0OnQoXCIuL3NldFwiKSxhZGQ6dChcIi4vYWRkXCIpLHN1YnRyYWN0OnQoXCIuL3N1YnRyYWN0XCIpLG11bHRpcGx5OnQoXCIuL211bHRpcGx5XCIpLGRpdmlkZTp0KFwiLi9kaXZpZGVcIiksbWluOnQoXCIuL21pblwiKSxtYXg6dChcIi4vbWF4XCIpLHNjYWxlOnQoXCIuL3NjYWxlXCIpLHNjYWxlQW5kQWRkOnQoXCIuL3NjYWxlQW5kQWRkXCIpLGRpc3RhbmNlOnQoXCIuL2Rpc3RhbmNlXCIpLHNxdWFyZWREaXN0YW5jZTp0KFwiLi9zcXVhcmVkRGlzdGFuY2VcIiksbGVuZ3RoOnQoXCIuL2xlbmd0aFwiKSxzcXVhcmVkTGVuZ3RoOnQoXCIuL3NxdWFyZWRMZW5ndGhcIiksbmVnYXRlOnQoXCIuL25lZ2F0ZVwiKSxpbnZlcnNlOnQoXCIuL2ludmVyc2VcIiksbm9ybWFsaXplOnQoXCIuL25vcm1hbGl6ZVwiKSxkb3Q6dChcIi4vZG90XCIpLGxlcnA6dChcIi4vbGVycFwiKSxyYW5kb206dChcIi4vcmFuZG9tXCIpLHRyYW5zZm9ybU1hdDQ6dChcIi4vdHJhbnNmb3JtTWF0NFwiKSx0cmFuc2Zvcm1RdWF0OnQoXCIuL3RyYW5zZm9ybVF1YXRcIil9fSx7XCIuL2FkZFwiOjM2NyxcIi4vY2xvbmVcIjozNjgsXCIuL2NvcHlcIjozNjksXCIuL2NyZWF0ZVwiOjM3MCxcIi4vZGlzdGFuY2VcIjozNzEsXCIuL2RpdmlkZVwiOjM3MixcIi4vZG90XCI6MzczLFwiLi9mcm9tVmFsdWVzXCI6Mzc0LFwiLi9pbnZlcnNlXCI6Mzc2LFwiLi9sZW5ndGhcIjozNzcsXCIuL2xlcnBcIjozNzgsXCIuL21heFwiOjM3OSxcIi4vbWluXCI6MzgwLFwiLi9tdWx0aXBseVwiOjM4MSxcIi4vbmVnYXRlXCI6MzgyLFwiLi9ub3JtYWxpemVcIjozODMsXCIuL3JhbmRvbVwiOjM4NCxcIi4vc2NhbGVcIjozODUsXCIuL3NjYWxlQW5kQWRkXCI6Mzg2LFwiLi9zZXRcIjozODcsXCIuL3NxdWFyZWREaXN0YW5jZVwiOjM4OCxcIi4vc3F1YXJlZExlbmd0aFwiOjM4OSxcIi4vc3VidHJhY3RcIjozOTAsXCIuL3RyYW5zZm9ybU1hdDRcIjozOTEsXCIuL3RyYW5zZm9ybVF1YXRcIjozOTJ9XSwzNzY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0xL2VbMF0sdFsxXT0xL2VbMV0sdFsyXT0xL2VbMl0sdFszXT0xL2VbM10sdH19LHt9XSwzNzc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdLGk9dFszXTtyZXR1cm4gTWF0aC5zcXJ0KGUqZStyKnIrbipuK2kqaSl9fSx7fV0sMzc4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWVbMF0sYT1lWzFdLG89ZVsyXSxzPWVbM107cmV0dXJuIHRbMF09aStuKihyWzBdLWkpLHRbMV09YStuKihyWzFdLWEpLHRbMl09bytuKihyWzJdLW8pLHRbM109cytuKihyWzNdLXMpLHR9fSx7fV0sMzc5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1heChlWzBdLHJbMF0pLHRbMV09TWF0aC5tYXgoZVsxXSxyWzFdKSx0WzJdPU1hdGgubWF4KGVbMl0sclsyXSksdFszXT1NYXRoLm1heChlWzNdLHJbM10pLHR9fSx7fV0sMzgwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1pbihlWzBdLHJbMF0pLHRbMV09TWF0aC5taW4oZVsxXSxyWzFdKSx0WzJdPU1hdGgubWluKGVbMl0sclsyXSksdFszXT1NYXRoLm1pbihlWzNdLHJbM10pLHR9fSx7fV0sMzgxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnJbMF0sdFsxXT1lWzFdKnJbMV0sdFsyXT1lWzJdKnJbMl0sdFszXT1lWzNdKnJbM10sdH19LHt9XSwzODI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0tZVswXSx0WzFdPS1lWzFdLHRbMl09LWVbMl0sdFszXT0tZVszXSx0fX0se31dLDM4MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1yKnIrbipuK2kqaSthKmE7bz4wJiYobz0xL01hdGguc3FydChvKSx0WzBdPXIqbyx0WzFdPW4qbyx0WzJdPWkqbyx0WzNdPWEqbyk7cmV0dXJuIHR9fSx7fV0sMzg0OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcIi4vbm9ybWFsaXplXCIpLGk9dChcIi4vc2NhbGVcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9ZXx8MSx0WzBdPU1hdGgucmFuZG9tKCksdFsxXT1NYXRoLnJhbmRvbSgpLHRbMl09TWF0aC5yYW5kb20oKSx0WzNdPU1hdGgucmFuZG9tKCksbih0LHQpLGkodCx0LGUpLHR9fSx7XCIuL25vcm1hbGl6ZVwiOjM4MyxcIi4vc2NhbGVcIjozODV9XSwzODU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qcix0WzFdPWVbMV0qcix0WzJdPWVbMl0qcix0WzNdPWVbM10qcix0fX0se31dLDM4NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdFswXT1lWzBdK3JbMF0qbix0WzFdPWVbMV0rclsxXSpuLHRbMl09ZVsyXStyWzJdKm4sdFszXT1lWzNdK3JbM10qbix0fX0se31dLDM4NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybiB0WzBdPWUsdFsxXT1yLHRbMl09bix0WzNdPWksdH19LHt9XSwzODg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLXRbMF0sbj1lWzFdLXRbMV0saT1lWzJdLXRbMl0sYT1lWzNdLXRbM107cmV0dXJuIHIqcituKm4raSppK2EqYX19LHt9XSwzODk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdLGk9dFszXTtyZXR1cm4gZSplK3IqcituKm4raSppfX0se31dLDM5MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXS1yWzBdLHRbMV09ZVsxXS1yWzFdLHRbMl09ZVsyXS1yWzJdLHRbM109ZVszXS1yWzNdLHR9fSx7fV0sMzkxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdO3JldHVybiB0WzBdPXJbMF0qbityWzRdKmkrcls4XSphK3JbMTJdKm8sdFsxXT1yWzFdKm4rcls1XSppK3JbOV0qYStyWzEzXSpvLHRbMl09clsyXSpuK3JbNl0qaStyWzEwXSphK3JbMTRdKm8sdFszXT1yWzNdKm4rcls3XSppK3JbMTFdKmErclsxNV0qbyx0fX0se31dLDM5MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89clswXSxzPXJbMV0sbD1yWzJdLGM9clszXSx1PWMqbitzKmEtbCppLGg9YyppK2wqbi1vKmEsZj1jKmErbyppLXMqbixwPS1vKm4tcyppLWwqYTtyZXR1cm4gdFswXT11KmMrcCotbytoKi1sLWYqLXMsdFsxXT1oKmMrcCotcytmKi1vLXUqLWwsdFsyXT1mKmMrcCotbCt1Ki1zLWgqLW8sdFszXT1lWzNdLHR9fSx7fV0sMzkzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3JldHVybiBuWzBdPWEsblsxXT1yLG5bMl09ZSxuWzNdPXQsaVswXX07dmFyIG49bmV3IFVpbnQ4QXJyYXkoNCksaT1uZXcgRmxvYXQzMkFycmF5KG4uYnVmZmVyKX0se31dLDM5NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCJnbHNsLXRva2VuaXplclwiKSxpPXQoXCJhdG9iLWxpdGVcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1BcnJheS5pc0FycmF5KHQpP3Q6bih0KSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBhPWVbcl07aWYoXCJwcmVwcm9jZXNzb3JcIj09PWEudHlwZSl7dmFyIG89YS5kYXRhLm1hdGNoKC9cXCNkZWZpbmVcXHMrU0hBREVSX05BTUUoX0I2NCk/XFxzKyguKykkLyk7aWYobyYmb1syXSl7dmFyIHM9b1sxXSxsPW9bMl07cmV0dXJuKHM/aShsKTpsKS50cmltKCl9fX19fSx7XCJhdG9iLWxpdGVcIjo2MyxcImdsc2wtdG9rZW5pemVyXCI6NDAxfV0sMzk1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsayxBPTAsVD0wLE09bCxTPVtdLEU9W10sQz0xLEw9MCx6PTAsTz0hMSxJPSExLEQ9XCJcIixQPWEsUj1uO1wiMzAwIGVzXCI9PT0odD10fHx7fSkudmVyc2lvbiYmKFA9cyxSPW8pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gRT1bXSxudWxsIT09dD9mdW5jdGlvbih0KXt2YXIgcjtBPTAsaz0oRCs9dCkubGVuZ3RoO2Zvcig7ZT1EW0FdLEE8azspe3N3aXRjaChyPUEsTSl7Y2FzZSB1OkE9VigpO2JyZWFrO2Nhc2UgaDpjYXNlIGY6QT1qKCk7YnJlYWs7Y2FzZSBwOkE9VSgpO2JyZWFrO2Nhc2UgZDpBPUcoKTticmVhaztjYXNlIF86QT1IKCk7YnJlYWs7Y2FzZSBnOkE9WSgpO2JyZWFrO2Nhc2UgYzpBPVcoKTticmVhaztjYXNlIHg6QT1OKCk7YnJlYWs7Y2FzZSBsOkE9QigpfWlmKHIhPT1BKXN3aXRjaChEW3JdKXtjYXNlXCJcXG5cIjpMPTAsKytDO2JyZWFrO2RlZmF1bHQ6KytMfX1yZXR1cm4gVCs9QSxEPUQuc2xpY2UoQSksRX0odC5yZXBsYWNlP3QucmVwbGFjZSgvXFxyXFxuL2csXCJcXG5cIik6dCk6ZnVuY3Rpb24odCl7Uy5sZW5ndGgmJkYoUy5qb2luKFwiXCIpKTtyZXR1cm4gTT1iLEYoXCIoZW9mKVwiKSxFfSgpfTtmdW5jdGlvbiBGKHQpe3QubGVuZ3RoJiZFLnB1c2goe3R5cGU6d1tNXSxkYXRhOnQscG9zaXRpb246eixsaW5lOkMsY29sdW1uOkx9KX1mdW5jdGlvbiBCKCl7cmV0dXJuIFM9Uy5sZW5ndGg/W106UyxcIi9cIj09PXImJlwiKlwiPT09ZT8oej1UK0EtMSxNPXUscj1lLEErMSk6XCIvXCI9PT1yJiZcIi9cIj09PWU/KHo9VCtBLTEsTT1oLHI9ZSxBKzEpOlwiI1wiPT09ZT8oTT1mLHo9VCtBLEEpOi9cXHMvLnRlc3QoZSk/KE09eCx6PVQrQSxBKTooTz0vXFxkLy50ZXN0KGUpLEk9L1teXFx3X10vLnRlc3QoZSksej1UK0EsTT1PP2Q6ST9wOmMsQSl9ZnVuY3Rpb24gTigpe3JldHVybi9bXlxcc10vZy50ZXN0KGUpPyhGKFMuam9pbihcIlwiKSksTT1sLEEpOihTLnB1c2goZSkscj1lLEErMSl9ZnVuY3Rpb24gaigpe3JldHVyblwiXFxyXCIhPT1lJiZcIlxcblwiIT09ZXx8XCJcXFxcXCI9PT1yPyhTLnB1c2goZSkscj1lLEErMSk6KEYoUy5qb2luKFwiXCIpKSxNPWwsQSl9ZnVuY3Rpb24gVigpe3JldHVyblwiL1wiPT09ZSYmXCIqXCI9PT1yPyhTLnB1c2goZSksRihTLmpvaW4oXCJcIikpLE09bCxBKzEpOihTLnB1c2goZSkscj1lLEErMSl9ZnVuY3Rpb24gVSgpe2lmKFwiLlwiPT09ciYmL1xcZC8udGVzdChlKSlyZXR1cm4gTT1nLEE7aWYoXCIvXCI9PT1yJiZcIipcIj09PWUpcmV0dXJuIE09dSxBO2lmKFwiL1wiPT09ciYmXCIvXCI9PT1lKXJldHVybiBNPWgsQTtpZihcIi5cIj09PWUmJlMubGVuZ3RoKXtmb3IoO3EoUyk7KTtyZXR1cm4gTT1nLEF9aWYoXCI7XCI9PT1lfHxcIilcIj09PWV8fFwiKFwiPT09ZSl7aWYoUy5sZW5ndGgpZm9yKDtxKFMpOyk7cmV0dXJuIEYoZSksTT1sLEErMX12YXIgdD0yPT09Uy5sZW5ndGgmJlwiPVwiIT09ZTtpZigvW1xcd19cXGRcXHNdLy50ZXN0KGUpfHx0KXtmb3IoO3EoUyk7KTtyZXR1cm4gTT1sLEF9cmV0dXJuIFMucHVzaChlKSxyPWUsQSsxfWZ1bmN0aW9uIHEodCl7Zm9yKHZhciBlLHIsbj0wOzspe2lmKGU9aS5pbmRleE9mKHQuc2xpY2UoMCx0Lmxlbmd0aCtuKS5qb2luKFwiXCIpKSxyPWlbZV0sLTE9PT1lKXtpZihuLS0rdC5sZW5ndGg+MCljb250aW51ZTtyPXQuc2xpY2UoMCwxKS5qb2luKFwiXCIpfXJldHVybiBGKHIpLHorPXIubGVuZ3RoLChTPVMuc2xpY2Uoci5sZW5ndGgpKS5sZW5ndGh9fWZ1bmN0aW9uIEgoKXtyZXR1cm4vW15hLWZBLUYwLTldLy50ZXN0KGUpPyhGKFMuam9pbihcIlwiKSksTT1sLEEpOihTLnB1c2goZSkscj1lLEErMSl9ZnVuY3Rpb24gRygpe3JldHVyblwiLlwiPT09ZT8oUy5wdXNoKGUpLE09ZyxyPWUsQSsxKTovW2VFXS8udGVzdChlKT8oUy5wdXNoKGUpLE09ZyxyPWUsQSsxKTpcInhcIj09PWUmJjE9PT1TLmxlbmd0aCYmXCIwXCI9PT1TWzBdPyhNPV8sUy5wdXNoKGUpLHI9ZSxBKzEpOi9bXlxcZF0vLnRlc3QoZSk/KEYoUy5qb2luKFwiXCIpKSxNPWwsQSk6KFMucHVzaChlKSxyPWUsQSsxKX1mdW5jdGlvbiBZKCl7cmV0dXJuXCJmXCI9PT1lJiYoUy5wdXNoKGUpLHI9ZSxBKz0xKSwvW2VFXS8udGVzdChlKT8oUy5wdXNoKGUpLHI9ZSxBKzEpOlwiLVwiPT09ZSYmL1tlRV0vLnRlc3Qocik/KFMucHVzaChlKSxyPWUsQSsxKTovW15cXGRdLy50ZXN0KGUpPyhGKFMuam9pbihcIlwiKSksTT1sLEEpOihTLnB1c2goZSkscj1lLEErMSl9ZnVuY3Rpb24gVygpe2lmKC9bXlxcZFxcd19dLy50ZXN0KGUpKXt2YXIgdD1TLmpvaW4oXCJcIik7cmV0dXJuIE09Ui5pbmRleE9mKHQpPi0xP3k6UC5pbmRleE9mKHQpPi0xP206dixGKFMuam9pbihcIlwiKSksTT1sLEF9cmV0dXJuIFMucHVzaChlKSxyPWUsQSsxfX07dmFyIG49dChcIi4vbGliL2xpdGVyYWxzXCIpLGk9dChcIi4vbGliL29wZXJhdG9yc1wiKSxhPXQoXCIuL2xpYi9idWlsdGluc1wiKSxvPXQoXCIuL2xpYi9saXRlcmFscy0zMDBlc1wiKSxzPXQoXCIuL2xpYi9idWlsdGlucy0zMDBlc1wiKSxsPTk5OSxjPTk5OTksdT0wLGg9MSxmPTIscD0zLGQ9NCxnPTUsdj02LG09Nyx5PTgseD05LGI9MTAsXz0xMSx3PVtcImJsb2NrLWNvbW1lbnRcIixcImxpbmUtY29tbWVudFwiLFwicHJlcHJvY2Vzc29yXCIsXCJvcGVyYXRvclwiLFwiaW50ZWdlclwiLFwiZmxvYXRcIixcImlkZW50XCIsXCJidWlsdGluXCIsXCJrZXl3b3JkXCIsXCJ3aGl0ZXNwYWNlXCIsXCJlb2ZcIixcImludGVnZXJcIl19LHtcIi4vbGliL2J1aWx0aW5zXCI6Mzk3LFwiLi9saWIvYnVpbHRpbnMtMzAwZXNcIjozOTYsXCIuL2xpYi9saXRlcmFsc1wiOjM5OSxcIi4vbGliL2xpdGVyYWxzLTMwMGVzXCI6Mzk4LFwiLi9saWIvb3BlcmF0b3JzXCI6NDAwfV0sMzk2OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcIi4vYnVpbHRpbnNcIik7bj1uLnNsaWNlKCkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEvXihnbFxcX3x0ZXh0dXJlKS8udGVzdCh0KX0pLGUuZXhwb3J0cz1uLmNvbmNhdChbXCJnbF9WZXJ0ZXhJRFwiLFwiZ2xfSW5zdGFuY2VJRFwiLFwiZ2xfUG9zaXRpb25cIixcImdsX1BvaW50U2l6ZVwiLFwiZ2xfRnJhZ0Nvb3JkXCIsXCJnbF9Gcm9udEZhY2luZ1wiLFwiZ2xfRnJhZ0RlcHRoXCIsXCJnbF9Qb2ludENvb3JkXCIsXCJnbF9NYXhWZXJ0ZXhBdHRyaWJzXCIsXCJnbF9NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9yc1wiLFwiZ2xfTWF4VmVydGV4T3V0cHV0VmVjdG9yc1wiLFwiZ2xfTWF4RnJhZ21lbnRJbnB1dFZlY3RvcnNcIixcImdsX01heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzXCIsXCJnbF9NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzXCIsXCJnbF9NYXhUZXh0dXJlSW1hZ2VVbml0c1wiLFwiZ2xfTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9yc1wiLFwiZ2xfTWF4RHJhd0J1ZmZlcnNcIixcImdsX01pblByb2dyYW1UZXhlbE9mZnNldFwiLFwiZ2xfTWF4UHJvZ3JhbVRleGVsT2Zmc2V0XCIsXCJnbF9EZXB0aFJhbmdlUGFyYW1ldGVyc1wiLFwiZ2xfRGVwdGhSYW5nZVwiLFwidHJ1bmNcIixcInJvdW5kXCIsXCJyb3VuZEV2ZW5cIixcImlzbmFuXCIsXCJpc2luZlwiLFwiZmxvYXRCaXRzVG9JbnRcIixcImZsb2F0Qml0c1RvVWludFwiLFwiaW50Qml0c1RvRmxvYXRcIixcInVpbnRCaXRzVG9GbG9hdFwiLFwicGFja1Nub3JtMngxNlwiLFwidW5wYWNrU25vcm0yeDE2XCIsXCJwYWNrVW5vcm0yeDE2XCIsXCJ1bnBhY2tVbm9ybTJ4MTZcIixcInBhY2tIYWxmMngxNlwiLFwidW5wYWNrSGFsZjJ4MTZcIixcIm91dGVyUHJvZHVjdFwiLFwidHJhbnNwb3NlXCIsXCJkZXRlcm1pbmFudFwiLFwiaW52ZXJzZVwiLFwidGV4dHVyZVwiLFwidGV4dHVyZVNpemVcIixcInRleHR1cmVQcm9qXCIsXCJ0ZXh0dXJlTG9kXCIsXCJ0ZXh0dXJlT2Zmc2V0XCIsXCJ0ZXhlbEZldGNoXCIsXCJ0ZXhlbEZldGNoT2Zmc2V0XCIsXCJ0ZXh0dXJlUHJvak9mZnNldFwiLFwidGV4dHVyZUxvZE9mZnNldFwiLFwidGV4dHVyZVByb2pMb2RcIixcInRleHR1cmVQcm9qTG9kT2Zmc2V0XCIsXCJ0ZXh0dXJlR3JhZFwiLFwidGV4dHVyZUdyYWRPZmZzZXRcIixcInRleHR1cmVQcm9qR3JhZFwiLFwidGV4dHVyZVByb2pHcmFkT2Zmc2V0XCJdKX0se1wiLi9idWlsdGluc1wiOjM5N31dLDM5NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bXCJhYnNcIixcImFjb3NcIixcImFsbFwiLFwiYW55XCIsXCJhc2luXCIsXCJhdGFuXCIsXCJjZWlsXCIsXCJjbGFtcFwiLFwiY29zXCIsXCJjcm9zc1wiLFwiZEZkeFwiLFwiZEZkeVwiLFwiZGVncmVlc1wiLFwiZGlzdGFuY2VcIixcImRvdFwiLFwiZXF1YWxcIixcImV4cFwiLFwiZXhwMlwiLFwiZmFjZWZvcndhcmRcIixcImZsb29yXCIsXCJmcmFjdFwiLFwiZ2xfQmFja0NvbG9yXCIsXCJnbF9CYWNrTGlnaHRNb2RlbFByb2R1Y3RcIixcImdsX0JhY2tMaWdodFByb2R1Y3RcIixcImdsX0JhY2tNYXRlcmlhbFwiLFwiZ2xfQmFja1NlY29uZGFyeUNvbG9yXCIsXCJnbF9DbGlwUGxhbmVcIixcImdsX0NsaXBWZXJ0ZXhcIixcImdsX0NvbG9yXCIsXCJnbF9EZXB0aFJhbmdlXCIsXCJnbF9EZXB0aFJhbmdlUGFyYW1ldGVyc1wiLFwiZ2xfRXllUGxhbmVRXCIsXCJnbF9FeWVQbGFuZVJcIixcImdsX0V5ZVBsYW5lU1wiLFwiZ2xfRXllUGxhbmVUXCIsXCJnbF9Gb2dcIixcImdsX0ZvZ0Nvb3JkXCIsXCJnbF9Gb2dGcmFnQ29vcmRcIixcImdsX0ZvZ1BhcmFtZXRlcnNcIixcImdsX0ZyYWdDb2xvclwiLFwiZ2xfRnJhZ0Nvb3JkXCIsXCJnbF9GcmFnRGF0YVwiLFwiZ2xfRnJhZ0RlcHRoXCIsXCJnbF9GcmFnRGVwdGhFWFRcIixcImdsX0Zyb250Q29sb3JcIixcImdsX0Zyb250RmFjaW5nXCIsXCJnbF9Gcm9udExpZ2h0TW9kZWxQcm9kdWN0XCIsXCJnbF9Gcm9udExpZ2h0UHJvZHVjdFwiLFwiZ2xfRnJvbnRNYXRlcmlhbFwiLFwiZ2xfRnJvbnRTZWNvbmRhcnlDb2xvclwiLFwiZ2xfTGlnaHRNb2RlbFwiLFwiZ2xfTGlnaHRNb2RlbFBhcmFtZXRlcnNcIixcImdsX0xpZ2h0TW9kZWxQcm9kdWN0c1wiLFwiZ2xfTGlnaHRQcm9kdWN0c1wiLFwiZ2xfTGlnaHRTb3VyY2VcIixcImdsX0xpZ2h0U291cmNlUGFyYW1ldGVyc1wiLFwiZ2xfTWF0ZXJpYWxQYXJhbWV0ZXJzXCIsXCJnbF9NYXhDbGlwUGxhbmVzXCIsXCJnbF9NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzXCIsXCJnbF9NYXhEcmF3QnVmZmVyc1wiLFwiZ2xfTWF4RnJhZ21lbnRVbmlmb3JtQ29tcG9uZW50c1wiLFwiZ2xfTWF4TGlnaHRzXCIsXCJnbF9NYXhUZXh0dXJlQ29vcmRzXCIsXCJnbF9NYXhUZXh0dXJlSW1hZ2VVbml0c1wiLFwiZ2xfTWF4VGV4dHVyZVVuaXRzXCIsXCJnbF9NYXhWYXJ5aW5nRmxvYXRzXCIsXCJnbF9NYXhWZXJ0ZXhBdHRyaWJzXCIsXCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0c1wiLFwiZ2xfTWF4VmVydGV4VW5pZm9ybUNvbXBvbmVudHNcIixcImdsX01vZGVsVmlld01hdHJpeFwiLFwiZ2xfTW9kZWxWaWV3TWF0cml4SW52ZXJzZVwiLFwiZ2xfTW9kZWxWaWV3TWF0cml4SW52ZXJzZVRyYW5zcG9zZVwiLFwiZ2xfTW9kZWxWaWV3TWF0cml4VHJhbnNwb3NlXCIsXCJnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4XCIsXCJnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4SW52ZXJzZVwiLFwiZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeEludmVyc2VUcmFuc3Bvc2VcIixcImdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXhUcmFuc3Bvc2VcIixcImdsX011bHRpVGV4Q29vcmQwXCIsXCJnbF9NdWx0aVRleENvb3JkMVwiLFwiZ2xfTXVsdGlUZXhDb29yZDJcIixcImdsX011bHRpVGV4Q29vcmQzXCIsXCJnbF9NdWx0aVRleENvb3JkNFwiLFwiZ2xfTXVsdGlUZXhDb29yZDVcIixcImdsX011bHRpVGV4Q29vcmQ2XCIsXCJnbF9NdWx0aVRleENvb3JkN1wiLFwiZ2xfTm9ybWFsXCIsXCJnbF9Ob3JtYWxNYXRyaXhcIixcImdsX05vcm1hbFNjYWxlXCIsXCJnbF9PYmplY3RQbGFuZVFcIixcImdsX09iamVjdFBsYW5lUlwiLFwiZ2xfT2JqZWN0UGxhbmVTXCIsXCJnbF9PYmplY3RQbGFuZVRcIixcImdsX1BvaW50XCIsXCJnbF9Qb2ludENvb3JkXCIsXCJnbF9Qb2ludFBhcmFtZXRlcnNcIixcImdsX1BvaW50U2l6ZVwiLFwiZ2xfUG9zaXRpb25cIixcImdsX1Byb2plY3Rpb25NYXRyaXhcIixcImdsX1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlXCIsXCJnbF9Qcm9qZWN0aW9uTWF0cml4SW52ZXJzZVRyYW5zcG9zZVwiLFwiZ2xfUHJvamVjdGlvbk1hdHJpeFRyYW5zcG9zZVwiLFwiZ2xfU2Vjb25kYXJ5Q29sb3JcIixcImdsX1RleENvb3JkXCIsXCJnbF9UZXh0dXJlRW52Q29sb3JcIixcImdsX1RleHR1cmVNYXRyaXhcIixcImdsX1RleHR1cmVNYXRyaXhJbnZlcnNlXCIsXCJnbF9UZXh0dXJlTWF0cml4SW52ZXJzZVRyYW5zcG9zZVwiLFwiZ2xfVGV4dHVyZU1hdHJpeFRyYW5zcG9zZVwiLFwiZ2xfVmVydGV4XCIsXCJncmVhdGVyVGhhblwiLFwiZ3JlYXRlclRoYW5FcXVhbFwiLFwiaW52ZXJzZXNxcnRcIixcImxlbmd0aFwiLFwibGVzc1RoYW5cIixcImxlc3NUaGFuRXF1YWxcIixcImxvZ1wiLFwibG9nMlwiLFwibWF0cml4Q29tcE11bHRcIixcIm1heFwiLFwibWluXCIsXCJtaXhcIixcIm1vZFwiLFwibm9ybWFsaXplXCIsXCJub3RcIixcIm5vdEVxdWFsXCIsXCJwb3dcIixcInJhZGlhbnNcIixcInJlZmxlY3RcIixcInJlZnJhY3RcIixcInNpZ25cIixcInNpblwiLFwic21vb3Roc3RlcFwiLFwic3FydFwiLFwic3RlcFwiLFwidGFuXCIsXCJ0ZXh0dXJlMkRcIixcInRleHR1cmUyRExvZFwiLFwidGV4dHVyZTJEUHJvalwiLFwidGV4dHVyZTJEUHJvakxvZFwiLFwidGV4dHVyZUN1YmVcIixcInRleHR1cmVDdWJlTG9kXCIsXCJ0ZXh0dXJlMkRMb2RFWFRcIixcInRleHR1cmUyRFByb2pMb2RFWFRcIixcInRleHR1cmVDdWJlTG9kRVhUXCIsXCJ0ZXh0dXJlMkRHcmFkRVhUXCIsXCJ0ZXh0dXJlMkRQcm9qR3JhZEVYVFwiLFwidGV4dHVyZUN1YmVHcmFkRVhUXCJdfSx7fV0sMzk4OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcIi4vbGl0ZXJhbHNcIik7ZS5leHBvcnRzPW4uc2xpY2UoKS5jb25jYXQoW1wibGF5b3V0XCIsXCJjZW50cm9pZFwiLFwic21vb3RoXCIsXCJjYXNlXCIsXCJtYXQyeDJcIixcIm1hdDJ4M1wiLFwibWF0Mng0XCIsXCJtYXQzeDJcIixcIm1hdDN4M1wiLFwibWF0M3g0XCIsXCJtYXQ0eDJcIixcIm1hdDR4M1wiLFwibWF0NHg0XCIsXCJ1aW50XCIsXCJ1dmVjMlwiLFwidXZlYzNcIixcInV2ZWM0XCIsXCJzYW1wbGVyQ3ViZVNoYWRvd1wiLFwic2FtcGxlcjJEQXJyYXlcIixcInNhbXBsZXIyREFycmF5U2hhZG93XCIsXCJpc2FtcGxlcjJEXCIsXCJpc2FtcGxlcjNEXCIsXCJpc2FtcGxlckN1YmVcIixcImlzYW1wbGVyMkRBcnJheVwiLFwidXNhbXBsZXIyRFwiLFwidXNhbXBsZXIzRFwiLFwidXNhbXBsZXJDdWJlXCIsXCJ1c2FtcGxlcjJEQXJyYXlcIixcImNvaGVyZW50XCIsXCJyZXN0cmljdFwiLFwicmVhZG9ubHlcIixcIndyaXRlb25seVwiLFwicmVzb3VyY2VcIixcImF0b21pY191aW50XCIsXCJub3BlcnNwZWN0aXZlXCIsXCJwYXRjaFwiLFwic2FtcGxlXCIsXCJzdWJyb3V0aW5lXCIsXCJjb21tb25cIixcInBhcnRpdGlvblwiLFwiYWN0aXZlXCIsXCJmaWx0ZXJcIixcImltYWdlMURcIixcImltYWdlMkRcIixcImltYWdlM0RcIixcImltYWdlQ3ViZVwiLFwiaWltYWdlMURcIixcImlpbWFnZTJEXCIsXCJpaW1hZ2UzRFwiLFwiaWltYWdlQ3ViZVwiLFwidWltYWdlMURcIixcInVpbWFnZTJEXCIsXCJ1aW1hZ2UzRFwiLFwidWltYWdlQ3ViZVwiLFwiaW1hZ2UxREFycmF5XCIsXCJpbWFnZTJEQXJyYXlcIixcImlpbWFnZTFEQXJyYXlcIixcImlpbWFnZTJEQXJyYXlcIixcInVpbWFnZTFEQXJyYXlcIixcInVpbWFnZTJEQXJyYXlcIixcImltYWdlMURTaGFkb3dcIixcImltYWdlMkRTaGFkb3dcIixcImltYWdlMURBcnJheVNoYWRvd1wiLFwiaW1hZ2UyREFycmF5U2hhZG93XCIsXCJpbWFnZUJ1ZmZlclwiLFwiaWltYWdlQnVmZmVyXCIsXCJ1aW1hZ2VCdWZmZXJcIixcInNhbXBsZXIxREFycmF5XCIsXCJzYW1wbGVyMURBcnJheVNoYWRvd1wiLFwiaXNhbXBsZXIxRFwiLFwiaXNhbXBsZXIxREFycmF5XCIsXCJ1c2FtcGxlcjFEXCIsXCJ1c2FtcGxlcjFEQXJyYXlcIixcImlzYW1wbGVyMkRSZWN0XCIsXCJ1c2FtcGxlcjJEUmVjdFwiLFwic2FtcGxlckJ1ZmZlclwiLFwiaXNhbXBsZXJCdWZmZXJcIixcInVzYW1wbGVyQnVmZmVyXCIsXCJzYW1wbGVyMkRNU1wiLFwiaXNhbXBsZXIyRE1TXCIsXCJ1c2FtcGxlcjJETVNcIixcInNhbXBsZXIyRE1TQXJyYXlcIixcImlzYW1wbGVyMkRNU0FycmF5XCIsXCJ1c2FtcGxlcjJETVNBcnJheVwiXSl9LHtcIi4vbGl0ZXJhbHNcIjozOTl9XSwzOTk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9W1wicHJlY2lzaW9uXCIsXCJoaWdocFwiLFwibWVkaXVtcFwiLFwibG93cFwiLFwiYXR0cmlidXRlXCIsXCJjb25zdFwiLFwidW5pZm9ybVwiLFwidmFyeWluZ1wiLFwiYnJlYWtcIixcImNvbnRpbnVlXCIsXCJkb1wiLFwiZm9yXCIsXCJ3aGlsZVwiLFwiaWZcIixcImVsc2VcIixcImluXCIsXCJvdXRcIixcImlub3V0XCIsXCJmbG9hdFwiLFwiaW50XCIsXCJ2b2lkXCIsXCJib29sXCIsXCJ0cnVlXCIsXCJmYWxzZVwiLFwiZGlzY2FyZFwiLFwicmV0dXJuXCIsXCJtYXQyXCIsXCJtYXQzXCIsXCJtYXQ0XCIsXCJ2ZWMyXCIsXCJ2ZWMzXCIsXCJ2ZWM0XCIsXCJpdmVjMlwiLFwiaXZlYzNcIixcIml2ZWM0XCIsXCJidmVjMlwiLFwiYnZlYzNcIixcImJ2ZWM0XCIsXCJzYW1wbGVyMURcIixcInNhbXBsZXIyRFwiLFwic2FtcGxlcjNEXCIsXCJzYW1wbGVyQ3ViZVwiLFwic2FtcGxlcjFEU2hhZG93XCIsXCJzYW1wbGVyMkRTaGFkb3dcIixcInN0cnVjdFwiLFwiYXNtXCIsXCJjbGFzc1wiLFwidW5pb25cIixcImVudW1cIixcInR5cGVkZWZcIixcInRlbXBsYXRlXCIsXCJ0aGlzXCIsXCJwYWNrZWRcIixcImdvdG9cIixcInN3aXRjaFwiLFwiZGVmYXVsdFwiLFwiaW5saW5lXCIsXCJub2lubGluZVwiLFwidm9sYXRpbGVcIixcInB1YmxpY1wiLFwic3RhdGljXCIsXCJleHRlcm5cIixcImV4dGVybmFsXCIsXCJpbnRlcmZhY2VcIixcImxvbmdcIixcInNob3J0XCIsXCJkb3VibGVcIixcImhhbGZcIixcImZpeGVkXCIsXCJ1bnNpZ25lZFwiLFwiaW5wdXRcIixcIm91dHB1dFwiLFwiaHZlYzJcIixcImh2ZWMzXCIsXCJodmVjNFwiLFwiZHZlYzJcIixcImR2ZWMzXCIsXCJkdmVjNFwiLFwiZnZlYzJcIixcImZ2ZWMzXCIsXCJmdmVjNFwiLFwic2FtcGxlcjJEUmVjdFwiLFwic2FtcGxlcjNEUmVjdFwiLFwic2FtcGxlcjJEUmVjdFNoYWRvd1wiLFwic2l6ZW9mXCIsXCJjYXN0XCIsXCJuYW1lc3BhY2VcIixcInVzaW5nXCJdfSx7fV0sNDAwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVtcIjw8PVwiLFwiPj49XCIsXCIrK1wiLFwiLS1cIixcIjw8XCIsXCI+PlwiLFwiPD1cIixcIj49XCIsXCI9PVwiLFwiIT1cIixcIiYmXCIsXCJ8fFwiLFwiKz1cIixcIi09XCIsXCIqPVwiLFwiLz1cIixcIiU9XCIsXCImPVwiLFwiXl5cIixcIl49XCIsXCJ8PVwiLFwiKFwiLFwiKVwiLFwiW1wiLFwiXVwiLFwiLlwiLFwiIVwiLFwiflwiLFwiKlwiLFwiL1wiLFwiJVwiLFwiK1wiLFwiLVwiLFwiPFwiLFwiPlwiLFwiJlwiLFwiXlwiLFwifFwiLFwiP1wiLFwiOlwiLFwiPVwiLFwiLFwiLFwiO1wiLFwie1wiLFwifVwiXX0se31dLDQwMTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuL2luZGV4XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW4oZSksaT1bXTtyZXR1cm4gaT0oaT1pLmNvbmNhdChyKHQpKSkuY29uY2F0KHIobnVsbCkpfX0se1wiLi9pbmRleFwiOjM5NX1dLDQwMjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9W3RdKTtmb3IodmFyIGU9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscj1bXSxuPTA7bjx0Lmxlbmd0aC0xO24rKylyLnB1c2godFtuXSxlW25dfHxcIlwiKTtyZXR1cm4gci5wdXNoKHRbbl0pLHIuam9pbihcIlwiKX19LHt9XSw0MDM6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saT10KFwiaXMtYnJvd3NlclwiKTtuPVwiZnVuY3Rpb25cIj09dHlwZW9mIHIubWF0Y2hNZWRpYT8hci5tYXRjaE1lZGlhKFwiKGhvdmVyOiBub25lKVwiKS5tYXRjaGVzOmksZS5leHBvcnRzPW59KS5jYWxsKHRoaXMsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHtcImlzLWJyb3dzZXJcIjo0MTB9XSw0MDQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiaXMtYnJvd3NlclwiKTtlLmV4cG9ydHM9biYmZnVuY3Rpb24oKXt2YXIgdD0hMTt0cnl7dmFyIGU9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwicGFzc2l2ZVwiLHtnZXQ6ZnVuY3Rpb24oKXt0PSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidGVzdFwiLG51bGwsZSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0ZXN0XCIsbnVsbCxlKX1jYXRjaChlKXt0PSExfXJldHVybiB0fSgpfSx7XCJpcy1icm93c2VyXCI6NDEwfV0sNDA1OltmdW5jdGlvbih0LGUscil7ci5yZWFkPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbyxzPTgqaS1uLTEsbD0oMTw8cyktMSxjPWw+PjEsdT0tNyxoPXI/aS0xOjAsZj1yPy0xOjEscD10W2UraF07Zm9yKGgrPWYsYT1wJigxPDwtdSktMSxwPj49LXUsdSs9czt1PjA7YT0yNTYqYSt0W2UraF0saCs9Zix1LT04KTtmb3Iobz1hJigxPDwtdSktMSxhPj49LXUsdSs9bjt1PjA7bz0yNTYqbyt0W2UraF0saCs9Zix1LT04KTtpZigwPT09YSlhPTEtYztlbHNle2lmKGE9PT1sKXJldHVybiBvP05hTjoxLzAqKHA/LTE6MSk7bys9TWF0aC5wb3coMixuKSxhLT1jfXJldHVybihwPy0xOjEpKm8qTWF0aC5wb3coMixhLW4pfSxyLndyaXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbyxzLGwsYz04KmEtaS0xLHU9KDE8PGMpLTEsaD11Pj4xLGY9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxwPW4/MDphLTEsZD1uPzE6LTEsZz1lPDB8fDA9PT1lJiYxL2U8MD8xOjA7Zm9yKGU9TWF0aC5hYnMoZSksaXNOYU4oZSl8fGU9PT0xLzA/KHM9aXNOYU4oZSk/MTowLG89dSk6KG89TWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMiksZSoobD1NYXRoLnBvdygyLC1vKSk8MSYmKG8tLSxsKj0yKSwoZSs9bytoPj0xP2YvbDpmKk1hdGgucG93KDIsMS1oKSkqbD49MiYmKG8rKyxsLz0yKSxvK2g+PXU/KHM9MCxvPXUpOm8raD49MT8ocz0oZSpsLTEpKk1hdGgucG93KDIsaSksbys9aCk6KHM9ZSpNYXRoLnBvdygyLGgtMSkqTWF0aC5wb3coMixpKSxvPTApKTtpPj04O3RbcitwXT0yNTUmcyxwKz1kLHMvPTI1NixpLT04KTtmb3Iobz1vPDxpfHMsYys9aTtjPjA7dFtyK3BdPTI1NSZvLHArPWQsby89MjU2LGMtPTgpO3RbcitwLWRdfD0xMjgqZ319LHt9XSw0MDY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lmxlbmd0aDtpZigwPT09cil0aHJvdyBuZXcgRXJyb3IoXCJNdXN0IGhhdmUgYXQgbGVhc3QgZCsxIHBvaW50c1wiKTt2YXIgaT10WzBdLmxlbmd0aDtpZihyPD1pKXRocm93IG5ldyBFcnJvcihcIk11c3QgaW5wdXQgYXQgbGVhc3QgZCsxIHBvaW50c1wiKTt2YXIgbz10LnNsaWNlKDAsaSsxKSxzPW4uYXBwbHkodm9pZCAwLG8pO2lmKDA9PT1zKXRocm93IG5ldyBFcnJvcihcIklucHV0IG5vdCBpbiBnZW5lcmFsIHBvc2l0aW9uXCIpO2Zvcih2YXIgbD1uZXcgQXJyYXkoaSsxKSx1PTA7dTw9aTsrK3UpbFt1XT11O3M8MCYmKGxbMF09MSxsWzFdPTApO2Zvcih2YXIgaD1uZXcgYShsLG5ldyBBcnJheShpKzEpLCExKSxmPWguYWRqYWNlbnQscD1uZXcgQXJyYXkoaSsyKSx1PTA7dTw9aTsrK3Upe2Zvcih2YXIgZD1sLnNsaWNlKCksZz0wO2c8PWk7KytnKWc9PT11JiYoZFtnXT0tMSk7dmFyIHY9ZFswXTtkWzBdPWRbMV0sZFsxXT12O3ZhciBtPW5ldyBhKGQsbmV3IEFycmF5KGkrMSksITApO2ZbdV09bSxwW3VdPW19cFtpKzFdPWg7Zm9yKHZhciB1PTA7dTw9aTsrK3UpZm9yKHZhciBkPWZbdV0udmVydGljZXMseT1mW3VdLmFkamFjZW50LGc9MDtnPD1pOysrZyl7dmFyIHg9ZFtnXTtpZih4PDApeVtnXT1oO2Vsc2UgZm9yKHZhciBiPTA7Yjw9aTsrK2IpZltiXS52ZXJ0aWNlcy5pbmRleE9mKHgpPDAmJih5W2ddPWZbYl0pfWZvcih2YXIgXz1uZXcgYyhpLG8scCksdz0hIWUsdT1pKzE7dTxyOysrdSlfLmluc2VydCh0W3VdLHcpO3JldHVybiBfLmJvdW5kYXJ5KCl9O3ZhciBuPXQoXCJyb2J1c3Qtb3JpZW50YXRpb25cIiksaT10KFwic2ltcGxpY2lhbC1jb21wbGV4XCIpLmNvbXBhcmVDZWxscztmdW5jdGlvbiBhKHQsZSxyKXt0aGlzLnZlcnRpY2VzPXQsdGhpcy5hZGphY2VudD1lLHRoaXMuYm91bmRhcnk9cix0aGlzLmxhc3RWaXNpdGVkPS0xfWZ1bmN0aW9uIG8odCxlLHIpe3RoaXMudmVydGljZXM9dCx0aGlzLmNlbGw9ZSx0aGlzLmluZGV4PXJ9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBpKHQudmVydGljZXMsZS52ZXJ0aWNlcyl9YS5wcm90b3R5cGUuZmxpcD1mdW5jdGlvbigpe3ZhciB0PXRoaXMudmVydGljZXNbMF07dGhpcy52ZXJ0aWNlc1swXT10aGlzLnZlcnRpY2VzWzFdLHRoaXMudmVydGljZXNbMV09dDt2YXIgZT10aGlzLmFkamFjZW50WzBdO3RoaXMuYWRqYWNlbnRbMF09dGhpcy5hZGphY2VudFsxXSx0aGlzLmFkamFjZW50WzFdPWV9O3ZhciBsPVtdO2Z1bmN0aW9uIGModCxlLHIpe3RoaXMuZGltZW5zaW9uPXQsdGhpcy52ZXJ0aWNlcz1lLHRoaXMuc2ltcGxpY2VzPXIsdGhpcy5pbnRlcmlvcj1yLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hdC5ib3VuZGFyeX0pLHRoaXMudHVwbGU9bmV3IEFycmF5KHQrMSk7Zm9yKHZhciBpPTA7aTw9dDsrK2kpdGhpcy50dXBsZVtpXT10aGlzLnZlcnRpY2VzW2ldO3ZhciBhPWxbdF07YXx8KGE9bFt0XT1mdW5jdGlvbih0KXtmb3IodmFyIGU9W1wiZnVuY3Rpb24gb3JpZW50KCl7dmFyIHR1cGxlPXRoaXMudHVwbGU7cmV0dXJuIHRlc3QoXCJdLHI9MDtyPD10OysrcilyPjAmJmUucHVzaChcIixcIiksZS5wdXNoKFwidHVwbGVbXCIscixcIl1cIik7ZS5wdXNoKFwiKX1yZXR1cm4gb3JpZW50XCIpO3ZhciBpPW5ldyBGdW5jdGlvbihcInRlc3RcIixlLmpvaW4oXCJcIikpLGE9blt0KzFdO3JldHVybiBhfHwoYT1uKSxpKGEpfSh0KSksdGhpcy5vcmllbnQ9YX12YXIgdT1jLnByb3RvdHlwZTt1LmhhbmRsZUJvdW5kYXJ5RGVnZW5lcmFjeT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZGltZW5zaW9uLG49dGhpcy52ZXJ0aWNlcy5sZW5ndGgtMSxpPXRoaXMudHVwbGUsYT10aGlzLnZlcnRpY2VzLG89W3RdO2Zvcih0Lmxhc3RWaXNpdGVkPS1uO28ubGVuZ3RoPjA7KXsodD1vLnBvcCgpKS52ZXJ0aWNlcztmb3IodmFyIHM9dC5hZGphY2VudCxsPTA7bDw9cjsrK2wpe3ZhciBjPXNbbF07aWYoYy5ib3VuZGFyeSYmIShjLmxhc3RWaXNpdGVkPD0tbikpe2Zvcih2YXIgdT1jLnZlcnRpY2VzLGg9MDtoPD1yOysraCl7dmFyIGY9dVtoXTtpW2hdPWY8MD9lOmFbZl19dmFyIHA9dGhpcy5vcmllbnQoKTtpZihwPjApcmV0dXJuIGM7Yy5sYXN0VmlzaXRlZD0tbiwwPT09cCYmby5wdXNoKGMpfX19cmV0dXJuIG51bGx9LHUud2Fsaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMudmVydGljZXMubGVuZ3RoLTEsbj10aGlzLmRpbWVuc2lvbixpPXRoaXMudmVydGljZXMsYT10aGlzLnR1cGxlLG89ZT90aGlzLmludGVyaW9yLmxlbmd0aCpNYXRoLnJhbmRvbSgpfDA6dGhpcy5pbnRlcmlvci5sZW5ndGgtMSxzPXRoaXMuaW50ZXJpb3Jbb107dDpmb3IoOyFzLmJvdW5kYXJ5Oyl7Zm9yKHZhciBsPXMudmVydGljZXMsYz1zLmFkamFjZW50LHU9MDt1PD1uOysrdSlhW3VdPWlbbFt1XV07cy5sYXN0VmlzaXRlZD1yO2Zvcih1PTA7dTw9bjsrK3Upe3ZhciBoPWNbdV07aWYoIShoLmxhc3RWaXNpdGVkPj1yKSl7dmFyIGY9YVt1XTthW3VdPXQ7dmFyIHA9dGhpcy5vcmllbnQoKTtpZihhW3VdPWYscDwwKXtzPWg7Y29udGludWUgdH1oLmJvdW5kYXJ5P2gubGFzdFZpc2l0ZWQ9LXI6aC5sYXN0VmlzaXRlZD1yfX1yZXR1cm59cmV0dXJuIHN9LHUuYWRkUGVha3M9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnZlcnRpY2VzLmxlbmd0aC0xLG49dGhpcy5kaW1lbnNpb24saT10aGlzLnZlcnRpY2VzLGw9dGhpcy50dXBsZSxjPXRoaXMuaW50ZXJpb3IsdT10aGlzLnNpbXBsaWNlcyxoPVtlXTtlLmxhc3RWaXNpdGVkPXIsZS52ZXJ0aWNlc1tlLnZlcnRpY2VzLmluZGV4T2YoLTEpXT1yLGUuYm91bmRhcnk9ITEsYy5wdXNoKGUpO2Zvcih2YXIgZj1bXTtoLmxlbmd0aD4wOyl7dmFyIHA9KGU9aC5wb3AoKSkudmVydGljZXMsZD1lLmFkamFjZW50LGc9cC5pbmRleE9mKHIpO2lmKCEoZzwwKSlmb3IodmFyIHY9MDt2PD1uOysrdilpZih2IT09Zyl7dmFyIG09ZFt2XTtpZihtLmJvdW5kYXJ5JiYhKG0ubGFzdFZpc2l0ZWQ+PXIpKXt2YXIgeT1tLnZlcnRpY2VzO2lmKG0ubGFzdFZpc2l0ZWQhPT0tcil7Zm9yKHZhciB4PTAsYj0wO2I8PW47KytiKXlbYl08MD8oeD1iLGxbYl09dCk6bFtiXT1pW3lbYl1dO2lmKHRoaXMub3JpZW50KCk+MCl7eVt4XT1yLG0uYm91bmRhcnk9ITEsYy5wdXNoKG0pLGgucHVzaChtKSxtLmxhc3RWaXNpdGVkPXI7Y29udGludWV9bS5sYXN0VmlzaXRlZD0tcn12YXIgXz1tLmFkamFjZW50LHc9cC5zbGljZSgpLGs9ZC5zbGljZSgpLEE9bmV3IGEodyxrLCEwKTt1LnB1c2goQSk7dmFyIFQ9Xy5pbmRleE9mKGUpO2lmKCEoVDwwKSl7X1tUXT1BLGtbZ109bSx3W3ZdPS0xLGtbdl09ZSxkW3ZdPUEsQS5mbGlwKCk7Zm9yKGI9MDtiPD1uOysrYil7dmFyIE09d1tiXTtpZighKE08MHx8TT09PXIpKXtmb3IodmFyIFM9bmV3IEFycmF5KG4tMSksRT0wLEM9MDtDPD1uOysrQyl7dmFyIEw9d1tDXTtMPDB8fEM9PT1ifHwoU1tFKytdPUwpfWYucHVzaChuZXcgbyhTLEEsYikpfX19fX19Zi5zb3J0KHMpO2Zvcih2PTA7disxPGYubGVuZ3RoO3YrPTIpe3ZhciB6PWZbdl0sTz1mW3YrMV0sST16LmluZGV4LEQ9Ty5pbmRleDtJPDB8fEQ8MHx8KHouY2VsbC5hZGphY2VudFt6LmluZGV4XT1PLmNlbGwsTy5jZWxsLmFkamFjZW50W08uaW5kZXhdPXouY2VsbCl9fSx1Lmluc2VydD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMudmVydGljZXM7ci5wdXNoKHQpO3ZhciBuPXRoaXMud2Fsayh0LGUpO2lmKG4pe2Zvcih2YXIgaT10aGlzLmRpbWVuc2lvbixhPXRoaXMudHVwbGUsbz0wO288PWk7KytvKXt2YXIgcz1uLnZlcnRpY2VzW29dO2Fbb109czwwP3Q6cltzXX12YXIgbD10aGlzLm9yaWVudChhKTtsPDB8fCgwIT09bHx8KG49dGhpcy5oYW5kbGVCb3VuZGFyeURlZ2VuZXJhY3kobix0KSkpJiZ0aGlzLmFkZFBlYWtzKHQsbil9fSx1LmJvdW5kYXJ5PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuZGltZW5zaW9uLGU9W10scj10aGlzLnNpbXBsaWNlcyxuPXIubGVuZ3RoLGk9MDtpPG47KytpKXt2YXIgYT1yW2ldO2lmKGEuYm91bmRhcnkpe2Zvcih2YXIgbz1uZXcgQXJyYXkodCkscz1hLnZlcnRpY2VzLGw9MCxjPTAsdT0wO3U8PXQ7Kyt1KXNbdV0+PTA/b1tsKytdPXNbdV06Yz0xJnU7aWYoYz09PSgxJnQpKXt2YXIgaD1vWzBdO29bMF09b1sxXSxvWzFdPWh9ZS5wdXNoKG8pfX1yZXR1cm4gZX19LHtcInJvYnVzdC1vcmllbnRhdGlvblwiOjQ5NSxcInNpbXBsaWNpYWwtY29tcGxleFwiOjUwNX1dLDQwNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiKSxpPTAsYT0xO2Z1bmN0aW9uIG8odCxlLHIsbixpKXt0aGlzLm1pZD10LHRoaXMubGVmdD1lLHRoaXMucmlnaHQ9cix0aGlzLmxlZnRQb2ludHM9bix0aGlzLnJpZ2h0UG9pbnRzPWksdGhpcy5jb3VudD0oZT9lLmNvdW50OjApKyhyP3IuY291bnQ6MCkrbi5sZW5ndGh9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCF0fHwwPT09dC5sZW5ndGgpcmV0dXJuIG5ldyB4KG51bGwpO3JldHVybiBuZXcgeCh5KHQpKX07dmFyIHM9by5wcm90b3R5cGU7ZnVuY3Rpb24gbCh0LGUpe3QubWlkPWUubWlkLHQubGVmdD1lLmxlZnQsdC5yaWdodD1lLnJpZ2h0LHQubGVmdFBvaW50cz1lLmxlZnRQb2ludHMsdC5yaWdodFBvaW50cz1lLnJpZ2h0UG9pbnRzLHQuY291bnQ9ZS5jb3VudH1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9eShlKTt0Lm1pZD1yLm1pZCx0LmxlZnQ9ci5sZWZ0LHQucmlnaHQ9ci5yaWdodCx0LmxlZnRQb2ludHM9ci5sZWZ0UG9pbnRzLHQucmlnaHRQb2ludHM9ci5yaWdodFBvaW50cyx0LmNvdW50PXIuY291bnR9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPXQuaW50ZXJ2YWxzKFtdKTtyLnB1c2goZSksYyh0LHIpfWZ1bmN0aW9uIGgodCxlKXt2YXIgcj10LmludGVydmFscyhbXSksbj1yLmluZGV4T2YoZSk7cmV0dXJuIG48MD9pOihyLnNwbGljZShuLDEpLGModCxyKSxhKX1mdW5jdGlvbiBmKHQsZSxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoJiZ0W25dWzBdPD1lOysrbil7dmFyIGk9cih0W25dKTtpZihpKXJldHVybiBpfX1mdW5jdGlvbiBwKHQsZSxyKXtmb3IodmFyIG49dC5sZW5ndGgtMTtuPj0wJiZ0W25dWzFdPj1lOy0tbil7dmFyIGk9cih0W25dKTtpZihpKXJldHVybiBpfX1mdW5jdGlvbiBkKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3Ipe3ZhciBuPWUodFtyXSk7aWYobilyZXR1cm4gbn19ZnVuY3Rpb24gZyh0LGUpe3JldHVybiB0LWV9ZnVuY3Rpb24gdih0LGUpe3ZhciByPXRbMF0tZVswXTtyZXR1cm4gcnx8dFsxXS1lWzFdfWZ1bmN0aW9uIG0odCxlKXt2YXIgcj10WzFdLWVbMV07cmV0dXJuIHJ8fHRbMF0tZVswXX1mdW5jdGlvbiB5KHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaCh0W3JdWzBdLHRbcl1bMV0pO2Uuc29ydChnKTt2YXIgbj1lW2UubGVuZ3RoPj4xXSxpPVtdLGE9W10scz1bXTtmb3Iocj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbD10W3JdO2xbMV08bj9pLnB1c2gobCk6bjxsWzBdP2EucHVzaChsKTpzLnB1c2gobCl9dmFyIGM9cyx1PXMuc2xpY2UoKTtyZXR1cm4gYy5zb3J0KHYpLHUuc29ydChtKSxuZXcgbyhuLHkoaSkseShhKSxjLHUpfWZ1bmN0aW9uIHgodCl7dGhpcy5yb290PXR9cy5pbnRlcnZhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQucHVzaC5hcHBseSh0LHRoaXMubGVmdFBvaW50cyksdGhpcy5sZWZ0JiZ0aGlzLmxlZnQuaW50ZXJ2YWxzKHQpLHRoaXMucmlnaHQmJnRoaXMucmlnaHQuaW50ZXJ2YWxzKHQpLHR9LHMuaW5zZXJ0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY291bnQtdGhpcy5sZWZ0UG9pbnRzLmxlbmd0aDtpZih0aGlzLmNvdW50Kz0xLHRbMV08dGhpcy5taWQpdGhpcy5sZWZ0PzQqKHRoaXMubGVmdC5jb3VudCsxKT4zKihlKzEpP3UodGhpcyx0KTp0aGlzLmxlZnQuaW5zZXJ0KHQpOnRoaXMubGVmdD15KFt0XSk7ZWxzZSBpZih0WzBdPnRoaXMubWlkKXRoaXMucmlnaHQ/NCoodGhpcy5yaWdodC5jb3VudCsxKT4zKihlKzEpP3UodGhpcyx0KTp0aGlzLnJpZ2h0Lmluc2VydCh0KTp0aGlzLnJpZ2h0PXkoW3RdKTtlbHNle3ZhciByPW4uZ2UodGhpcy5sZWZ0UG9pbnRzLHQsdiksaT1uLmdlKHRoaXMucmlnaHRQb2ludHMsdCxtKTt0aGlzLmxlZnRQb2ludHMuc3BsaWNlKHIsMCx0KSx0aGlzLnJpZ2h0UG9pbnRzLnNwbGljZShpLDAsdCl9fSxzLnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvdW50LXRoaXMubGVmdFBvaW50cztpZih0WzFdPHRoaXMubWlkKXJldHVybiB0aGlzLmxlZnQ/NCoodGhpcy5yaWdodD90aGlzLnJpZ2h0LmNvdW50OjApPjMqKGUtMSk/aCh0aGlzLHQpOjI9PT0oYz10aGlzLmxlZnQucmVtb3ZlKHQpKT8odGhpcy5sZWZ0PW51bGwsdGhpcy5jb3VudC09MSxhKTooYz09PWEmJih0aGlzLmNvdW50LT0xKSxjKTppO2lmKHRbMF0+dGhpcy5taWQpcmV0dXJuIHRoaXMucmlnaHQ/NCoodGhpcy5sZWZ0P3RoaXMubGVmdC5jb3VudDowKT4zKihlLTEpP2godGhpcyx0KToyPT09KGM9dGhpcy5yaWdodC5yZW1vdmUodCkpPyh0aGlzLnJpZ2h0PW51bGwsdGhpcy5jb3VudC09MSxhKTooYz09PWEmJih0aGlzLmNvdW50LT0xKSxjKTppO2lmKDE9PT10aGlzLmNvdW50KXJldHVybiB0aGlzLmxlZnRQb2ludHNbMF09PT10PzI6aTtpZigxPT09dGhpcy5sZWZ0UG9pbnRzLmxlbmd0aCYmdGhpcy5sZWZ0UG9pbnRzWzBdPT09dCl7aWYodGhpcy5sZWZ0JiZ0aGlzLnJpZ2h0KXtmb3IodmFyIHI9dGhpcyxvPXRoaXMubGVmdDtvLnJpZ2h0OylyPW8sbz1vLnJpZ2h0O2lmKHI9PT10aGlzKW8ucmlnaHQ9dGhpcy5yaWdodDtlbHNle3ZhciBzPXRoaXMubGVmdCxjPXRoaXMucmlnaHQ7ci5jb3VudC09by5jb3VudCxyLnJpZ2h0PW8ubGVmdCxvLmxlZnQ9cyxvLnJpZ2h0PWN9bCh0aGlzLG8pLHRoaXMuY291bnQ9KHRoaXMubGVmdD90aGlzLmxlZnQuY291bnQ6MCkrKHRoaXMucmlnaHQ/dGhpcy5yaWdodC5jb3VudDowKSt0aGlzLmxlZnRQb2ludHMubGVuZ3RofWVsc2UgdGhpcy5sZWZ0P2wodGhpcyx0aGlzLmxlZnQpOmwodGhpcyx0aGlzLnJpZ2h0KTtyZXR1cm4gYX1mb3Iocz1uLmdlKHRoaXMubGVmdFBvaW50cyx0LHYpO3M8dGhpcy5sZWZ0UG9pbnRzLmxlbmd0aCYmdGhpcy5sZWZ0UG9pbnRzW3NdWzBdPT09dFswXTsrK3MpaWYodGhpcy5sZWZ0UG9pbnRzW3NdPT09dCl7dGhpcy5jb3VudC09MSx0aGlzLmxlZnRQb2ludHMuc3BsaWNlKHMsMSk7Zm9yKGM9bi5nZSh0aGlzLnJpZ2h0UG9pbnRzLHQsbSk7Yzx0aGlzLnJpZ2h0UG9pbnRzLmxlbmd0aCYmdGhpcy5yaWdodFBvaW50c1tjXVsxXT09PXRbMV07KytjKWlmKHRoaXMucmlnaHRQb2ludHNbY109PT10KXJldHVybiB0aGlzLnJpZ2h0UG9pbnRzLnNwbGljZShjLDEpLGF9cmV0dXJuIGl9LHMucXVlcnlQb2ludD1mdW5jdGlvbih0LGUpe2lmKHQ8dGhpcy5taWQpe2lmKHRoaXMubGVmdClpZihyPXRoaXMubGVmdC5xdWVyeVBvaW50KHQsZSkpcmV0dXJuIHI7cmV0dXJuIGYodGhpcy5sZWZ0UG9pbnRzLHQsZSl9aWYodD50aGlzLm1pZCl7dmFyIHI7aWYodGhpcy5yaWdodClpZihyPXRoaXMucmlnaHQucXVlcnlQb2ludCh0LGUpKXJldHVybiByO3JldHVybiBwKHRoaXMucmlnaHRQb2ludHMsdCxlKX1yZXR1cm4gZCh0aGlzLmxlZnRQb2ludHMsZSl9LHMucXVlcnlJbnRlcnZhbD1mdW5jdGlvbih0LGUscil7dmFyIG47aWYodDx0aGlzLm1pZCYmdGhpcy5sZWZ0JiYobj10aGlzLmxlZnQucXVlcnlJbnRlcnZhbCh0LGUscikpKXJldHVybiBuO2lmKGU+dGhpcy5taWQmJnRoaXMucmlnaHQmJihuPXRoaXMucmlnaHQucXVlcnlJbnRlcnZhbCh0LGUscikpKXJldHVybiBuO3JldHVybiBlPHRoaXMubWlkP2YodGhpcy5sZWZ0UG9pbnRzLGUscik6dD50aGlzLm1pZD9wKHRoaXMucmlnaHRQb2ludHMsdCxyKTpkKHRoaXMubGVmdFBvaW50cyxyKX07dmFyIGI9eC5wcm90b3R5cGU7Yi5pbnNlcnQ9ZnVuY3Rpb24odCl7dGhpcy5yb290P3RoaXMucm9vdC5pbnNlcnQodCk6dGhpcy5yb290PW5ldyBvKHRbMF0sbnVsbCxudWxsLFt0XSxbdF0pfSxiLnJlbW92ZT1mdW5jdGlvbih0KXtpZih0aGlzLnJvb3Qpe3ZhciBlPXRoaXMucm9vdC5yZW1vdmUodCk7cmV0dXJuIDI9PT1lJiYodGhpcy5yb290PW51bGwpLGUhPT1pfXJldHVybiExfSxiLnF1ZXJ5UG9pbnQ9ZnVuY3Rpb24odCxlKXtpZih0aGlzLnJvb3QpcmV0dXJuIHRoaXMucm9vdC5xdWVyeVBvaW50KHQsZSl9LGIucXVlcnlJbnRlcnZhbD1mdW5jdGlvbih0LGUscil7aWYodDw9ZSYmdGhpcy5yb290KXJldHVybiB0aGlzLnJvb3QucXVlcnlJbnRlcnZhbCh0LGUscil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLFwiY291bnRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdD90aGlzLnJvb3QuY291bnQ6MH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYixcImludGVydmFsc1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290P3RoaXMucm9vdC5pbnRlcnZhbHMoW10pOltdfX0pfSx7XCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiOjgyfV0sNDA4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHxuZXcgQXJyYXkodC5sZW5ndGgpO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKWVbdFtyXV09cjtyZXR1cm4gZX19LHt9XSw0MDk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0OysrcillW3JdPXI7cmV0dXJuIGV9fSx7fV0sNDEwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPSEwfSx7fV0sNDExOltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXtyZXR1cm4hIXQuY29uc3RydWN0b3ImJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQuY29uc3RydWN0b3IuaXNCdWZmZXImJnQuY29uc3RydWN0b3IuaXNCdWZmZXIodCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10JiYobih0KXx8ZnVuY3Rpb24odCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdC5yZWFkRmxvYXRMRSYmXCJmdW5jdGlvblwiPT10eXBlb2YgdC5zbGljZSYmbih0LnNsaWNlKDAsMCkpfSh0KXx8ISF0Ll9pc0J1ZmZlcil9fSx7fV0sNDEyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBuYXZpZ2F0b3ImJigvTVNJRS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KXx8L1RyaWRlbnRcXC8vLnRlc3QobmF2aWdhdG9yLmFwcFZlcnNpb24pKX0se31dLDQxMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1hLGUuZXhwb3J0cy5pc01vYmlsZT1hO3ZhciBuPS8oYW5kcm9pZHxiYlxcZCt8bWVlZ28pLittb2JpbGV8YXZhbnRnb3xiYWRhXFwvfGJsYWNrYmVycnl8YmxhemVyfGNvbXBhbHxlbGFpbmV8ZmVubmVjfGhpcHRvcHxpZW1vYmlsZXxpcChob25lfG9kKXxpcmlzfGtpbmRsZXxsZ2UgfG1hZW1vfG1pZHB8bW1wfG1vYmlsZS4rZmlyZWZveHxuZXRmcm9udHxvcGVyYSBtKG9ifGluKWl8cGFsbSggb3MpP3xwaG9uZXxwKGl4aXxyZSlcXC98cGx1Y2tlcnxwb2NrZXR8cHNwfHNlcmllcyg0fDYpMHxzeW1iaWFufHRyZW98dXBcXC4oYnJvd3NlcnxsaW5rKXx2b2RhZm9uZXx3YXB8d2luZG93cyAoY2V8cGhvbmUpfHhkYXx4aWluby9pLGk9LyhhbmRyb2lkfGJiXFxkK3xtZWVnbykuK21vYmlsZXxhdmFudGdvfGJhZGFcXC98YmxhY2tiZXJyeXxibGF6ZXJ8Y29tcGFsfGVsYWluZXxmZW5uZWN8aGlwdG9wfGllbW9iaWxlfGlwKGhvbmV8b2QpfGlyaXN8a2luZGxlfGxnZSB8bWFlbW98bWlkcHxtbXB8bW9iaWxlLitmaXJlZm94fG5ldGZyb250fG9wZXJhIG0ob2J8aW4paXxwYWxtKCBvcyk/fHBob25lfHAoaXhpfHJlKVxcL3xwbHVja2VyfHBvY2tldHxwc3B8c2VyaWVzKDR8NikwfHN5bWJpYW58dHJlb3x1cFxcLihicm93c2VyfGxpbmspfHZvZGFmb25lfHdhcHx3aW5kb3dzIChjZXxwaG9uZSl8eGRhfHhpaW5vfGFuZHJvaWR8aXBhZHxwbGF5Ym9va3xzaWxrL2k7ZnVuY3Rpb24gYSh0KXt0fHwodD17fSk7dmFyIGU9dC51YTtyZXR1cm4gZXx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIG5hdmlnYXRvcnx8KGU9bmF2aWdhdG9yLnVzZXJBZ2VudCksZSYmZS5oZWFkZXJzJiZcInN0cmluZ1wiPT10eXBlb2YgZS5oZWFkZXJzW1widXNlci1hZ2VudFwiXSYmKGU9ZS5oZWFkZXJzW1widXNlci1hZ2VudFwiXSksXCJzdHJpbmdcIj09dHlwZW9mIGUmJih0LnRhYmxldD9pLnRlc3QoZSk6bi50ZXN0KGUpKX19LHt9XSw0MTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIG51bGwhPT10JiYoXCJvYmplY3RcIj09PWV8fFwiZnVuY3Rpb25cIj09PWUpfX0se31dLDQxNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVyblwiW29iamVjdCBPYmplY3RdXCI9PT1uLmNhbGwodCkmJihudWxsPT09KGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKXx8ZT09PU9iamVjdC5nZXRQcm90b3R5cGVPZih7fSkpfX0se31dLDQxNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscj10Lmxlbmd0aCxuPTA7bjxyO24rKylpZigoKGU9dC5jaGFyQ29kZUF0KG4pKTw5fHxlPjEzKSYmMzIhPT1lJiYxMzMhPT1lJiYxNjAhPT1lJiY1NzYwIT09ZSYmNjE1OCE9PWUmJihlPDgxOTJ8fGU+ODIwNSkmJjgyMzIhPT1lJiY4MjMzIT09ZSYmODIzOSE9PWUmJjgyODchPT1lJiY4Mjg4IT09ZSYmMTIyODghPT1lJiY2NTI3OSE9PWUpcmV0dXJuITE7cmV0dXJuITB9fSx7fV0sNDE3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD10LnRyaW0oKSwhISgvXlttemxodmNzcXRhXVxccypbLSsuMC05XVtebWxodnpjc3F0YV0rL2kudGVzdCh0KSYmL1tcXGR6XSQvaS50ZXN0KHQpJiZ0Lmxlbmd0aD40KSl9fSx7fV0sNDE4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdCooMS1yKStlKnJ9fSx7fV0sNDE5OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LG4pe1wib2JqZWN0XCI9PXR5cGVvZiByJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZT9lLmV4cG9ydHM9bigpOnQubWFwYm94Z2w9bigpfSh0aGlzLGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGUscixuO2Z1bmN0aW9uIGkodCxpKXtpZihlKWlmKHIpe3ZhciBhPVwidmFyIHNoYXJlZENodW5rID0ge307IChcIitlK1wiKShzaGFyZWRDaHVuayk7IChcIityK1wiKShzaGFyZWRDaHVuayk7XCIsbz17fTtlKG8pLChuPWkobykpLndvcmtlclVybD13aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbYV0se3R5cGU6XCJ0ZXh0L2phdmFzY3JpcHRcIn0pKX1lbHNlIHI9aTtlbHNlIGU9aX1yZXR1cm4gaSgwLGZ1bmN0aW9uKGUpe3ZhciByPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiB0P3Q6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTtmdW5jdGlvbiBuKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LFwiZGVmYXVsdFwiKT90LmRlZmF1bHQ6dH1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQoZT17ZXhwb3J0czp7fX0sZS5leHBvcnRzKSxlLmV4cG9ydHN9dmFyIGE9bztmdW5jdGlvbiBvKHQsZSxyLG4pe3RoaXMuY3g9Myp0LHRoaXMuYng9Myooci10KS10aGlzLmN4LHRoaXMuYXg9MS10aGlzLmN4LXRoaXMuYngsdGhpcy5jeT0zKmUsdGhpcy5ieT0zKihuLWUpLXRoaXMuY3ksdGhpcy5heT0xLXRoaXMuY3ktdGhpcy5ieSx0aGlzLnAxeD10LHRoaXMucDF5PW4sdGhpcy5wMng9cix0aGlzLnAyeT1ufW8ucHJvdG90eXBlLnNhbXBsZUN1cnZlWD1mdW5jdGlvbih0KXtyZXR1cm4oKHRoaXMuYXgqdCt0aGlzLmJ4KSp0K3RoaXMuY3gpKnR9LG8ucHJvdG90eXBlLnNhbXBsZUN1cnZlWT1mdW5jdGlvbih0KXtyZXR1cm4oKHRoaXMuYXkqdCt0aGlzLmJ5KSp0K3RoaXMuY3kpKnR9LG8ucHJvdG90eXBlLnNhbXBsZUN1cnZlRGVyaXZhdGl2ZVg9ZnVuY3Rpb24odCl7cmV0dXJuKDMqdGhpcy5heCp0KzIqdGhpcy5ieCkqdCt0aGlzLmN4fSxvLnByb3RvdHlwZS5zb2x2ZUN1cnZlWD1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG87Zm9yKHZvaWQgMD09PWUmJihlPTFlLTYpLGk9dCxvPTA7bzw4O28rKyl7aWYoYT10aGlzLnNhbXBsZUN1cnZlWChpKS10LE1hdGguYWJzKGEpPGUpcmV0dXJuIGk7dmFyIHM9dGhpcy5zYW1wbGVDdXJ2ZURlcml2YXRpdmVYKGkpO2lmKE1hdGguYWJzKHMpPDFlLTYpYnJlYWs7aS09YS9zfWlmKChpPXQpPChyPTApKXJldHVybiByO2lmKGk+KG49MSkpcmV0dXJuIG47Zm9yKDtyPG47KXtpZihhPXRoaXMuc2FtcGxlQ3VydmVYKGkpLE1hdGguYWJzKGEtdCk8ZSlyZXR1cm4gaTt0PmE/cj1pOm49aSxpPS41KihuLXIpK3J9cmV0dXJuIGl9LG8ucHJvdG90eXBlLnNvbHZlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc2FtcGxlQ3VydmVZKHRoaXMuc29sdmVDdXJ2ZVgodCxlKSl9O3ZhciBzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmNvbHVtbj10LHRoaXMucm93PWUsdGhpcy56b29tPXJ9O3MucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBzKHRoaXMuY29sdW1uLHRoaXMucm93LHRoaXMuem9vbSl9LHMucHJvdG90eXBlLnpvb21Ubz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl96b29tVG8odCl9LHMucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9zdWIodCl9LHMucHJvdG90eXBlLl96b29tVG89ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5wb3coMix0LXRoaXMuem9vbSk7cmV0dXJuIHRoaXMuY29sdW1uKj1lLHRoaXMucm93Kj1lLHRoaXMuem9vbT10LHRoaXN9LHMucHJvdG90eXBlLl9zdWI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9dC56b29tVG8odGhpcy56b29tKSx0aGlzLmNvbHVtbi09dC5jb2x1bW4sdGhpcy5yb3ctPXQucm93LHRoaXN9O3ZhciBsPWM7ZnVuY3Rpb24gYyh0LGUpe3RoaXMueD10LHRoaXMueT1lfWZ1bmN0aW9uIHUodCxlLHIsbil7dmFyIGk9bmV3IGEodCxlLHIsbik7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLnNvbHZlKHQpfX1jLnByb3RvdHlwZT17Y2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGModGhpcy54LHRoaXMueSl9LGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9hZGQodCl9LHN1YjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9zdWIodCl9LG11bHRCeVBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX211bHRCeVBvaW50KHQpfSxkaXZCeVBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2RpdkJ5UG9pbnQodCl9LG11bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fbXVsdCh0KX0sZGl2OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2Rpdih0KX0scm90YXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX3JvdGF0ZSh0KX0scm90YXRlQXJvdW5kOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fcm90YXRlQXJvdW5kKHQsZSl9LG1hdE11bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fbWF0TXVsdCh0KX0sdW5pdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX3VuaXQoKX0scGVycDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX3BlcnAoKX0scm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3VuZCgpfSxtYWc6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSl9LGVxdWFsczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54PT09dC54JiZ0aGlzLnk9PT10Lnl9LGRpc3Q6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RTcXIodCkpfSxkaXN0U3FyOmZ1bmN0aW9uKHQpe3ZhciBlPXQueC10aGlzLngscj10LnktdGhpcy55O3JldHVybiBlKmUrcipyfSxhbmdsZTpmdW5jdGlvbigpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueSx0aGlzLngpfSxhbmdsZVRvOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueS10LnksdGhpcy54LXQueCl9LGFuZ2xlV2l0aDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hbmdsZVdpdGhTZXAodC54LHQueSl9LGFuZ2xlV2l0aFNlcDpmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueCplLXRoaXMueSp0LHRoaXMueCp0K3RoaXMueSplKX0sX21hdE11bHQ6ZnVuY3Rpb24odCl7dmFyIGU9dFswXSp0aGlzLngrdFsxXSp0aGlzLnkscj10WzJdKnRoaXMueCt0WzNdKnRoaXMueTtyZXR1cm4gdGhpcy54PWUsdGhpcy55PXIsdGhpc30sX2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpc30sX3N1YjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54LT10LngsdGhpcy55LT10LnksdGhpc30sX211bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpc30sX2RpdjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Lz10LHRoaXMueS89dCx0aGlzfSxfbXVsdEJ5UG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXN9LF9kaXZCeVBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngvPXQueCx0aGlzLnkvPXQueSx0aGlzfSxfdW5pdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXYodGhpcy5tYWcoKSksdGhpc30sX3BlcnA6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnk7cmV0dXJuIHRoaXMueT10aGlzLngsdGhpcy54PS10LHRoaXN9LF9yb3RhdGU6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5jb3ModCkscj1NYXRoLnNpbih0KSxuPWUqdGhpcy54LXIqdGhpcy55LGk9cip0aGlzLngrZSp0aGlzLnk7cmV0dXJuIHRoaXMueD1uLHRoaXMueT1pLHRoaXN9LF9yb3RhdGVBcm91bmQ6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpLGk9ZS54K3IqKHRoaXMueC1lLngpLW4qKHRoaXMueS1lLnkpLGE9ZS55K24qKHRoaXMueC1lLngpK3IqKHRoaXMueS1lLnkpO3JldHVybiB0aGlzLng9aSx0aGlzLnk9YSx0aGlzfSxfcm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXN9fSxjLmNvbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBjP3Q6QXJyYXkuaXNBcnJheSh0KT9uZXcgYyh0WzBdLHRbMV0pOnR9O3ZhciBoPXUoLjI1LC4xLC4yNSwxKTtmdW5jdGlvbiBmKHQsZSxyKXtyZXR1cm4gTWF0aC5taW4ocixNYXRoLm1heChlLHQpKX1mdW5jdGlvbiBwKHQpe2Zvcih2YXIgZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGgtMTtyLS0gPjA7KWVbcl09YXJndW1lbnRzW3IrMV07Zm9yKHZhciBuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtmb3IodmFyIG8gaW4gYSl0W29dPWFbb119cmV0dXJuIHR9dmFyIGQ9MTtmdW5jdGlvbiBnKHQsZSl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF0mJihlW3RdPWVbdF0uYmluZChlKSl9KX1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuLTEhPT10LmluZGV4T2YoZSx0Lmxlbmd0aC1lLmxlbmd0aCl9ZnVuY3Rpb24gbSh0LGUscil7dmFyIG49e307Zm9yKHZhciBpIGluIHQpbltpXT1lLmNhbGwocnx8dGhpcyx0W2ldLGksdCk7cmV0dXJuIG59ZnVuY3Rpb24geSh0LGUscil7dmFyIG49e307Zm9yKHZhciBpIGluIHQpZS5jYWxsKHJ8fHRoaXMsdFtpXSxpLHQpJiYobltpXT10W2ldKTtyZXR1cm4gbn1mdW5jdGlvbiB4KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3QubWFwKHgpOlwib2JqZWN0XCI9PXR5cGVvZiB0JiZ0P20odCx4KTp0fXZhciBiPXt9O2Z1bmN0aW9uIF8odCl7Ylt0XXx8KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBjb25zb2xlJiZjb25zb2xlLndhcm4odCksYlt0XT0hMCl9ZnVuY3Rpb24gdyh0LGUscil7cmV0dXJuKHIueS10LnkpKihlLngtdC54KT4oZS55LXQueSkqKHIueC10LngpfWZ1bmN0aW9uIGsodCl7Zm9yKHZhciBlPTAscj0wLG49dC5sZW5ndGgsaT1uLTEsYT12b2lkIDAsbz12b2lkIDA7cjxuO2k9cisrKWE9dFtyXSxlKz0oKG89dFtpXSkueC1hLngpKihhLnkrby55KTtyZXR1cm4gZX12YXIgQT17VW5rbm93bjpcIlVua25vd25cIixTdHlsZTpcIlN0eWxlXCIsU291cmNlOlwiU291cmNlXCIsVGlsZTpcIlRpbGVcIixHbHlwaHM6XCJHbHlwaHNcIixTcHJpdGVJbWFnZTpcIlNwcml0ZUltYWdlXCIsU3ByaXRlSlNPTjpcIlNwcml0ZUpTT05cIixJbWFnZTpcIkltYWdlXCJ9O1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5mcmVlemUmJk9iamVjdC5mcmVlemUoQSk7dmFyIFQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIsbil7dC5jYWxsKHRoaXMsZSksdGhpcy5zdGF0dXM9cix0aGlzLnVybD1uLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsdGhpcy5tZXNzYWdlPWV9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZStcIjogXCIrdGhpcy5tZXNzYWdlK1wiIChcIit0aGlzLnN0YXR1cytcIik6IFwiK3RoaXMudXJsfSxlfShFcnJvcik7ZnVuY3Rpb24gTSh0KXt2YXIgZT1uZXcgc2VsZi5YTUxIdHRwUmVxdWVzdDtmb3IodmFyIHIgaW4gZS5vcGVuKFwiR0VUXCIsdC51cmwsITApLHQuaGVhZGVycyllLnNldFJlcXVlc3RIZWFkZXIocix0LmhlYWRlcnNbcl0pO3JldHVybiBlLndpdGhDcmVkZW50aWFscz1cImluY2x1ZGVcIj09PXQuY3JlZGVudGlhbHMsZX12YXIgUz1mdW5jdGlvbih0LGUpe3ZhciByPU0odCk7cmV0dXJuIHIucmVzcG9uc2VUeXBlPVwiYXJyYXlidWZmZXJcIixyLm9uZXJyb3I9ZnVuY3Rpb24oKXtlKG5ldyBFcnJvcihyLnN0YXR1c1RleHQpKX0sci5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgbj1yLnJlc3BvbnNlO2lmKDA9PT1uLmJ5dGVMZW5ndGgmJjIwMD09PXIuc3RhdHVzKXJldHVybiBlKG5ldyBFcnJvcihcImh0dHAgc3RhdHVzIDIwMCByZXR1cm5lZCB3aXRob3V0IGNvbnRlbnQuXCIpKTtyLnN0YXR1cz49MjAwJiZyLnN0YXR1czwzMDAmJnIucmVzcG9uc2U/ZShudWxsLHtkYXRhOm4sY2FjaGVDb250cm9sOnIuZ2V0UmVzcG9uc2VIZWFkZXIoXCJDYWNoZS1Db250cm9sXCIpLGV4cGlyZXM6ci5nZXRSZXNwb25zZUhlYWRlcihcIkV4cGlyZXNcIil9KTplKG5ldyBUKHIuc3RhdHVzVGV4dCxyLnN0YXR1cyx0LnVybCkpfSxyLnNlbmQoKSxyfTtmdW5jdGlvbiBFKHQsZSxyKXtyW3RdPXJbdF18fFtdLHJbdF0ucHVzaChlKX1mdW5jdGlvbiBDKHQsZSxyKXtpZihyJiZyW3RdKXt2YXIgbj1yW3RdLmluZGV4T2YoZSk7LTEhPT1uJiZyW3RdLnNwbGljZShuLDEpfX12YXIgTD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXt9KSxwKHRoaXMsZSksdGhpcy50eXBlPXR9LHo9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3ZvaWQgMD09PXImJihyPXt9KSx0LmNhbGwodGhpcyxcImVycm9yXCIscCh7ZXJyb3I6ZX0scikpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlfShMKSxPPWZ1bmN0aW9uKCl7fTtPLnByb3RvdHlwZS5vbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9saXN0ZW5lcnM9dGhpcy5fbGlzdGVuZXJzfHx7fSxFKHQsZSx0aGlzLl9saXN0ZW5lcnMpLHRoaXN9LE8ucHJvdG90eXBlLm9mZj1mdW5jdGlvbih0LGUpe3JldHVybiBDKHQsZSx0aGlzLl9saXN0ZW5lcnMpLEModCxlLHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMpLHRoaXN9LE8ucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fb25lVGltZUxpc3RlbmVycz10aGlzLl9vbmVUaW1lTGlzdGVuZXJzfHx7fSxFKHQsZSx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzKSx0aGlzfSxPLnByb3RvdHlwZS5maXJlPWZ1bmN0aW9uKHQpe1wic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1uZXcgTCh0LGFyZ3VtZW50c1sxXXx8e30pKTt2YXIgZT10LnR5cGU7aWYodGhpcy5saXN0ZW5zKGUpKXt0LnRhcmdldD10aGlzO2Zvcih2YXIgcj0wLG49dGhpcy5fbGlzdGVuZXJzJiZ0aGlzLl9saXN0ZW5lcnNbZV0/dGhpcy5fbGlzdGVuZXJzW2VdLnNsaWNlKCk6W107cjxuLmxlbmd0aDtyKz0xKW5bcl0uY2FsbCh0aGlzLHQpO2Zvcih2YXIgaT0wLGE9dGhpcy5fb25lVGltZUxpc3RlbmVycyYmdGhpcy5fb25lVGltZUxpc3RlbmVyc1tlXT90aGlzLl9vbmVUaW1lTGlzdGVuZXJzW2VdLnNsaWNlKCk6W107aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO0MoZSxvLHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMpLG8uY2FsbCh0aGlzLHQpfXZhciBzPXRoaXMuX2V2ZW50ZWRQYXJlbnQ7cyYmKHAodCxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLl9ldmVudGVkUGFyZW50RGF0YT90aGlzLl9ldmVudGVkUGFyZW50RGF0YSgpOnRoaXMuX2V2ZW50ZWRQYXJlbnREYXRhKSxzLmZpcmUodCkpfWVsc2UgdihlLFwiZXJyb3JcIik/Y29uc29sZS5lcnJvcih0JiZ0LmVycm9yfHx0fHxcIkVtcHR5IGVycm9yIGV2ZW50XCIpOnYoZSxcIndhcm5pbmdcIikmJmNvbnNvbGUud2Fybih0JiZ0Lndhcm5pbmd8fHR8fFwiRW1wdHkgd2FybmluZyBldmVudFwiKTtyZXR1cm4gdGhpc30sTy5wcm90b3R5cGUubGlzdGVucz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGlzdGVuZXJzJiZ0aGlzLl9saXN0ZW5lcnNbdF0mJnRoaXMuX2xpc3RlbmVyc1t0XS5sZW5ndGg+MHx8dGhpcy5fb25lVGltZUxpc3RlbmVycyYmdGhpcy5fb25lVGltZUxpc3RlbmVyc1t0XSYmdGhpcy5fb25lVGltZUxpc3RlbmVyc1t0XS5sZW5ndGg+MHx8dGhpcy5fZXZlbnRlZFBhcmVudCYmdGhpcy5fZXZlbnRlZFBhcmVudC5saXN0ZW5zKHQpfSxPLnByb3RvdHlwZS5zZXRFdmVudGVkUGFyZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2V2ZW50ZWRQYXJlbnQ9dCx0aGlzLl9ldmVudGVkUGFyZW50RGF0YT1lLHRoaXN9O3ZhciBJPXskdmVyc2lvbjo4LCRyb290Ont2ZXJzaW9uOntyZXF1aXJlZDohMCx0eXBlOlwiZW51bVwiLHZhbHVlczpbOF19LG5hbWU6e3R5cGU6XCJzdHJpbmdcIn0sbWV0YWRhdGE6e3R5cGU6XCIqXCJ9LGNlbnRlcjp7dHlwZTpcImFycmF5XCIsdmFsdWU6XCJudW1iZXJcIn0sem9vbTp7dHlwZTpcIm51bWJlclwifSxiZWFyaW5nOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLHBlcmlvZDozNjAsdW5pdHM6XCJkZWdyZWVzXCJ9LHBpdGNoOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLHVuaXRzOlwiZGVncmVlc1wifSxsaWdodDp7dHlwZTpcImxpZ2h0XCJ9LHNvdXJjZXM6e3JlcXVpcmVkOiEwLHR5cGU6XCJzb3VyY2VzXCJ9LHNwcml0ZTp7dHlwZTpcInN0cmluZ1wifSxnbHlwaHM6e3R5cGU6XCJzdHJpbmdcIn0sdHJhbnNpdGlvbjp7dHlwZTpcInRyYW5zaXRpb25cIn0sbGF5ZXJzOntyZXF1aXJlZDohMCx0eXBlOlwiYXJyYXlcIix2YWx1ZTpcImxheWVyXCJ9fSxzb3VyY2VzOntcIipcIjp7dHlwZTpcInNvdXJjZVwifX0sc291cmNlOltcInNvdXJjZV92ZWN0b3JcIixcInNvdXJjZV9yYXN0ZXJcIixcInNvdXJjZV9yYXN0ZXJfZGVtXCIsXCJzb3VyY2VfZ2VvanNvblwiLFwic291cmNlX3ZpZGVvXCIsXCJzb3VyY2VfaW1hZ2VcIl0sc291cmNlX3ZlY3Rvcjp7dHlwZTp7cmVxdWlyZWQ6ITAsdHlwZTpcImVudW1cIix2YWx1ZXM6e3ZlY3Rvcjp7fX19LHVybDp7dHlwZTpcInN0cmluZ1wifSx0aWxlczp7dHlwZTpcImFycmF5XCIsdmFsdWU6XCJzdHJpbmdcIn0sYm91bmRzOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcIm51bWJlclwiLGxlbmd0aDo0LGRlZmF1bHQ6Wy0xODAsLTg1LjA1MTEsMTgwLDg1LjA1MTFdfSxtaW56b29tOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowfSxtYXh6b29tOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoyMn0sYXR0cmlidXRpb246e3R5cGU6XCJzdHJpbmdcIn0sXCIqXCI6e3R5cGU6XCIqXCJ9fSxzb3VyY2VfcmFzdGVyOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOlwiZW51bVwiLHZhbHVlczp7cmFzdGVyOnt9fX0sdXJsOnt0eXBlOlwic3RyaW5nXCJ9LHRpbGVzOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcInN0cmluZ1wifSxib3VuZHM6e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwibnVtYmVyXCIsbGVuZ3RoOjQsZGVmYXVsdDpbLTE4MCwtODUuMDUxMSwxODAsODUuMDUxMV19LG1pbnpvb206e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjB9LG1heHpvb206e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjIyfSx0aWxlU2l6ZTp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6NTEyLHVuaXRzOlwicGl4ZWxzXCJ9LHNjaGVtZTp7dHlwZTpcImVudW1cIix2YWx1ZXM6e3h5ejp7fSx0bXM6e319LGRlZmF1bHQ6XCJ4eXpcIn0sYXR0cmlidXRpb246e3R5cGU6XCJzdHJpbmdcIn0sXCIqXCI6e3R5cGU6XCIqXCJ9fSxzb3VyY2VfcmFzdGVyX2RlbTp7dHlwZTp7cmVxdWlyZWQ6ITAsdHlwZTpcImVudW1cIix2YWx1ZXM6e1wicmFzdGVyLWRlbVwiOnt9fX0sdXJsOnt0eXBlOlwic3RyaW5nXCJ9LHRpbGVzOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcInN0cmluZ1wifSxib3VuZHM6e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwibnVtYmVyXCIsbGVuZ3RoOjQsZGVmYXVsdDpbLTE4MCwtODUuMDUxMSwxODAsODUuMDUxMV19LG1pbnpvb206e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjB9LG1heHpvb206e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjIyfSx0aWxlU2l6ZTp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6NTEyLHVuaXRzOlwicGl4ZWxzXCJ9LGF0dHJpYnV0aW9uOnt0eXBlOlwic3RyaW5nXCJ9LGVuY29kaW5nOnt0eXBlOlwiZW51bVwiLHZhbHVlczp7dGVycmFyaXVtOnt9LG1hcGJveDp7fX0sZGVmYXVsdDpcIm1hcGJveFwifSxcIipcIjp7dHlwZTpcIipcIn19LHNvdXJjZV9nZW9qc29uOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOlwiZW51bVwiLHZhbHVlczp7Z2VvanNvbjp7fX19LGRhdGE6e3R5cGU6XCIqXCJ9LG1heHpvb206e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjE4fSxidWZmZXI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjEyOCxtYXhpbXVtOjUxMixtaW5pbXVtOjB9LHRvbGVyYW5jZTp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6LjM3NX0sY2x1c3Rlcjp7dHlwZTpcImJvb2xlYW5cIixkZWZhdWx0OiExfSxjbHVzdGVyUmFkaXVzOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDo1MCxtaW5pbXVtOjB9LGNsdXN0ZXJNYXhab29tOnt0eXBlOlwibnVtYmVyXCJ9LGxpbmVNZXRyaWNzOnt0eXBlOlwiYm9vbGVhblwiLGRlZmF1bHQ6ITF9fSxzb3VyY2VfdmlkZW86e3R5cGU6e3JlcXVpcmVkOiEwLHR5cGU6XCJlbnVtXCIsdmFsdWVzOnt2aWRlbzp7fX19LHVybHM6e3JlcXVpcmVkOiEwLHR5cGU6XCJhcnJheVwiLHZhbHVlOlwic3RyaW5nXCJ9LGNvb3JkaW5hdGVzOntyZXF1aXJlZDohMCx0eXBlOlwiYXJyYXlcIixsZW5ndGg6NCx2YWx1ZTp7dHlwZTpcImFycmF5XCIsbGVuZ3RoOjIsdmFsdWU6XCJudW1iZXJcIn19fSxzb3VyY2VfaW1hZ2U6e3R5cGU6e3JlcXVpcmVkOiEwLHR5cGU6XCJlbnVtXCIsdmFsdWVzOntpbWFnZTp7fX19LHVybDp7cmVxdWlyZWQ6ITAsdHlwZTpcInN0cmluZ1wifSxjb29yZGluYXRlczp7cmVxdWlyZWQ6ITAsdHlwZTpcImFycmF5XCIsbGVuZ3RoOjQsdmFsdWU6e3R5cGU6XCJhcnJheVwiLGxlbmd0aDoyLHZhbHVlOlwibnVtYmVyXCJ9fX0sbGF5ZXI6e2lkOnt0eXBlOlwic3RyaW5nXCIscmVxdWlyZWQ6ITB9LHR5cGU6e3R5cGU6XCJlbnVtXCIsdmFsdWVzOntmaWxsOnt9LGxpbmU6e30sc3ltYm9sOnt9LGNpcmNsZTp7fSxoZWF0bWFwOnt9LFwiZmlsbC1leHRydXNpb25cIjp7fSxyYXN0ZXI6e30saGlsbHNoYWRlOnt9LGJhY2tncm91bmQ6e319LHJlcXVpcmVkOiEwfSxtZXRhZGF0YTp7dHlwZTpcIipcIn0sc291cmNlOnt0eXBlOlwic3RyaW5nXCJ9LFwic291cmNlLWxheWVyXCI6e3R5cGU6XCJzdHJpbmdcIn0sbWluem9vbTp7dHlwZTpcIm51bWJlclwiLG1pbmltdW06MCxtYXhpbXVtOjI0fSxtYXh6b29tOnt0eXBlOlwibnVtYmVyXCIsbWluaW11bTowLG1heGltdW06MjR9LGZpbHRlcjp7dHlwZTpcImZpbHRlclwifSxsYXlvdXQ6e3R5cGU6XCJsYXlvdXRcIn0scGFpbnQ6e3R5cGU6XCJwYWludFwifX0sbGF5b3V0OltcImxheW91dF9maWxsXCIsXCJsYXlvdXRfbGluZVwiLFwibGF5b3V0X2NpcmNsZVwiLFwibGF5b3V0X2hlYXRtYXBcIixcImxheW91dF9maWxsLWV4dHJ1c2lvblwiLFwibGF5b3V0X3N5bWJvbFwiLFwibGF5b3V0X3Jhc3RlclwiLFwibGF5b3V0X2hpbGxzaGFkZVwiLFwibGF5b3V0X2JhY2tncm91bmRcIl0sbGF5b3V0X2JhY2tncm91bmQ6e3Zpc2liaWxpdHk6e3R5cGU6XCJlbnVtXCIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6XCJ2aXNpYmxlXCJ9fSxsYXlvdXRfZmlsbDp7dmlzaWJpbGl0eTp7dHlwZTpcImVudW1cIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDpcInZpc2libGVcIn19LGxheW91dF9jaXJjbGU6e3Zpc2liaWxpdHk6e3R5cGU6XCJlbnVtXCIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6XCJ2aXNpYmxlXCJ9fSxsYXlvdXRfaGVhdG1hcDp7dmlzaWJpbGl0eTp7dHlwZTpcImVudW1cIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDpcInZpc2libGVcIn19LGxheW91dF9saW5lOntcImxpbmUtY2FwXCI6e3R5cGU6XCJlbnVtXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCx2YWx1ZXM6e2J1dHQ6e30scm91bmQ6e30sc3F1YXJlOnt9fSxkZWZhdWx0OlwiYnV0dFwifSxcImxpbmUtam9pblwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHZhbHVlczp7YmV2ZWw6e30scm91bmQ6e30sbWl0ZXI6e319LGRlZmF1bHQ6XCJtaXRlclwifSxcImxpbmUtbWl0ZXItbGltaXRcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHJlcXVpcmVzOlt7XCJsaW5lLWpvaW5cIjpcIm1pdGVyXCJ9XX0sXCJsaW5lLXJvdW5kLWxpbWl0XCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjEuMDUsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxyZXF1aXJlczpbe1wibGluZS1qb2luXCI6XCJyb3VuZFwifV19LHZpc2liaWxpdHk6e3R5cGU6XCJlbnVtXCIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6XCJ2aXNpYmxlXCJ9fSxsYXlvdXRfc3ltYm9sOntcInN5bWJvbC1wbGFjZW1lbnRcIjp7dHlwZTpcImVudW1cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHZhbHVlczp7cG9pbnQ6e30sbGluZTp7fX0sZGVmYXVsdDpcInBvaW50XCJ9LFwic3ltYm9sLXNwYWNpbmdcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MjUwLG1pbmltdW06MSxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHVuaXRzOlwicGl4ZWxzXCIscmVxdWlyZXM6W3tcInN5bWJvbC1wbGFjZW1lbnRcIjpcImxpbmVcIn1dfSxcInN5bWJvbC1hdm9pZC1lZGdlc1wiOnt0eXBlOlwiYm9vbGVhblwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsZGVmYXVsdDohMX0sXCJpY29uLWFsbG93LW92ZXJsYXBcIjp7dHlwZTpcImJvb2xlYW5cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLGRlZmF1bHQ6ITEscmVxdWlyZXM6W1wiaWNvbi1pbWFnZVwiXX0sXCJpY29uLWlnbm9yZS1wbGFjZW1lbnRcIjp7dHlwZTpcImJvb2xlYW5cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLGRlZmF1bHQ6ITEscmVxdWlyZXM6W1wiaWNvbi1pbWFnZVwiXX0sXCJpY29uLW9wdGlvbmFsXCI6e3R5cGU6XCJib29sZWFuXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOltcImljb24taW1hZ2VcIixcInRleHQtZmllbGRcIl19LFwiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnRcIjp7dHlwZTpcImVudW1cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9LGF1dG86e319LGRlZmF1bHQ6XCJhdXRvXCIscmVxdWlyZXM6W1wiaWNvbi1pbWFnZVwiXX0sXCJpY29uLXNpemVcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdW5pdHM6XCJmYWN0b3Igb2YgdGhlIG9yaWdpbmFsIGljb24gc2l6ZVwiLHJlcXVpcmVzOltcImljb24taW1hZ2VcIl19LFwiaWNvbi10ZXh0LWZpdFwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdmFsdWVzOntub25lOnt9LHdpZHRoOnt9LGhlaWdodDp7fSxib3RoOnt9fSxkZWZhdWx0Olwibm9uZVwiLHJlcXVpcmVzOltcImljb24taW1hZ2VcIixcInRleHQtZmllbGRcIl19LFwiaWNvbi10ZXh0LWZpdC1wYWRkaW5nXCI6e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwibnVtYmVyXCIsbGVuZ3RoOjQsZGVmYXVsdDpbMCwwLDAsMF0sdW5pdHM6XCJwaXhlbHNcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHJlcXVpcmVzOltcImljb24taW1hZ2VcIixcInRleHQtZmllbGRcIix7XCJpY29uLXRleHQtZml0XCI6W1wiYm90aFwiLFwid2lkdGhcIixcImhlaWdodFwiXX1dfSxcImljb24taW1hZ2VcIjp7dHlwZTpcInN0cmluZ1wiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRva2VuczohMH0sXCJpY29uLXJvdGF0ZVwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLHBlcmlvZDozNjAsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdW5pdHM6XCJkZWdyZWVzXCIscmVxdWlyZXM6W1wiaWNvbi1pbWFnZVwiXX0sXCJpY29uLXBhZGRpbmdcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MixtaW5pbXVtOjAsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCx1bml0czpcInBpeGVsc1wiLHJlcXVpcmVzOltcImljb24taW1hZ2VcIl19LFwiaWNvbi1rZWVwLXVwcmlnaHRcIjp7dHlwZTpcImJvb2xlYW5cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLGRlZmF1bHQ6ITEscmVxdWlyZXM6W1wiaWNvbi1pbWFnZVwiLHtcImljb24tcm90YXRpb24tYWxpZ25tZW50XCI6XCJtYXBcIn0se1wic3ltYm9sLXBsYWNlbWVudFwiOlwibGluZVwifV19LFwiaWNvbi1vZmZzZXRcIjp7dHlwZTpcImFycmF5XCIsdmFsdWU6XCJudW1iZXJcIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHJlcXVpcmVzOltcImljb24taW1hZ2VcIl19LFwiaWNvbi1hbmNob3JcIjp7dHlwZTpcImVudW1cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx2YWx1ZXM6e2NlbnRlcjp7fSxsZWZ0Ont9LHJpZ2h0Ont9LHRvcDp7fSxib3R0b206e30sXCJ0b3AtbGVmdFwiOnt9LFwidG9wLXJpZ2h0XCI6e30sXCJib3R0b20tbGVmdFwiOnt9LFwiYm90dG9tLXJpZ2h0XCI6e319LGRlZmF1bHQ6XCJjZW50ZXJcIixyZXF1aXJlczpbXCJpY29uLWltYWdlXCJdfSxcImljb24tcGl0Y2gtYWxpZ25tZW50XCI6e3R5cGU6XCJlbnVtXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fSxhdXRvOnt9fSxkZWZhdWx0OlwiYXV0b1wiLHJlcXVpcmVzOltcImljb24taW1hZ2VcIl19LFwidGV4dC1waXRjaC1hbGlnbm1lbnRcIjp7dHlwZTpcImVudW1cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9LGF1dG86e319LGRlZmF1bHQ6XCJhdXRvXCIscmVxdWlyZXM6W1widGV4dC1maWVsZFwiXX0sXCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudFwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e30sYXV0bzp7fX0sZGVmYXVsdDpcImF1dG9cIixyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCJdfSxcInRleHQtZmllbGRcIjp7dHlwZTpcInN0cmluZ1wiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLGRlZmF1bHQ6XCJcIix0b2tlbnM6ITB9LFwidGV4dC1mb250XCI6e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwic3RyaW5nXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsZGVmYXVsdDpbXCJPcGVuIFNhbnMgUmVndWxhclwiLFwiQXJpYWwgVW5pY29kZSBNUyBSZWd1bGFyXCJdLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC1zaXplXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjE2LG1pbmltdW06MCx1bml0czpcInBpeGVsc1wiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC1tYXgtd2lkdGhcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MTAsbWluaW11bTowLHVuaXRzOlwiZW1zXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAscmVxdWlyZXM6W1widGV4dC1maWVsZFwiXX0sXCJ0ZXh0LWxpbmUtaGVpZ2h0XCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjEuMix1bml0czpcImVtc1wiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAscmVxdWlyZXM6W1widGV4dC1maWVsZFwiXX0sXCJ0ZXh0LWxldHRlci1zcGFjaW5nXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjAsdW5pdHM6XCJlbXNcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCxyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCJdfSxcInRleHQtanVzdGlmeVwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHZhbHVlczp7bGVmdDp7fSxjZW50ZXI6e30scmlnaHQ6e319LGRlZmF1bHQ6XCJjZW50ZXJcIixyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCJdfSxcInRleHQtYW5jaG9yXCI6e3R5cGU6XCJlbnVtXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdmFsdWVzOntjZW50ZXI6e30sbGVmdDp7fSxyaWdodDp7fSx0b3A6e30sYm90dG9tOnt9LFwidG9wLWxlZnRcIjp7fSxcInRvcC1yaWdodFwiOnt9LFwiYm90dG9tLWxlZnRcIjp7fSxcImJvdHRvbS1yaWdodFwiOnt9fSxkZWZhdWx0OlwiY2VudGVyXCIscmVxdWlyZXM6W1widGV4dC1maWVsZFwiXX0sXCJ0ZXh0LW1heC1hbmdsZVwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDo0NSx1bml0czpcImRlZ3JlZXNcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHJlcXVpcmVzOltcInRleHQtZmllbGRcIix7XCJzeW1ib2wtcGxhY2VtZW50XCI6XCJsaW5lXCJ9XX0sXCJ0ZXh0LXJvdGF0ZVwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLHBlcmlvZDozNjAsdW5pdHM6XCJkZWdyZWVzXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAscmVxdWlyZXM6W1widGV4dC1maWVsZFwiXX0sXCJ0ZXh0LXBhZGRpbmdcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MixtaW5pbXVtOjAsdW5pdHM6XCJwaXhlbHNcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC1rZWVwLXVwcmlnaHRcIjp7dHlwZTpcImJvb2xlYW5cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLGRlZmF1bHQ6ITAscmVxdWlyZXM6W1widGV4dC1maWVsZFwiLHtcInRleHQtcm90YXRpb24tYWxpZ25tZW50XCI6XCJtYXBcIn0se1wic3ltYm9sLXBsYWNlbWVudFwiOlwibGluZVwifV19LFwidGV4dC10cmFuc2Zvcm1cIjp7dHlwZTpcImVudW1cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx2YWx1ZXM6e25vbmU6e30sdXBwZXJjYXNlOnt9LGxvd2VyY2FzZTp7fX0sZGVmYXVsdDpcIm5vbmVcIixyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCJdfSxcInRleHQtb2Zmc2V0XCI6e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwibnVtYmVyXCIsdW5pdHM6XCJlbXNcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCxsZW5ndGg6MixkZWZhdWx0OlswLDBdLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC1hbGxvdy1vdmVybGFwXCI6e3R5cGU6XCJib29sZWFuXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC1pZ25vcmUtcGxhY2VtZW50XCI6e3R5cGU6XCJib29sZWFuXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC1vcHRpb25hbFwiOnt0eXBlOlwiYm9vbGVhblwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsZGVmYXVsdDohMSxyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCIsXCJpY29uLWltYWdlXCJdfSx2aXNpYmlsaXR5Ont0eXBlOlwiZW51bVwiLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OlwidmlzaWJsZVwifX0sbGF5b3V0X3Jhc3Rlcjp7dmlzaWJpbGl0eTp7dHlwZTpcImVudW1cIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDpcInZpc2libGVcIn19LGxheW91dF9oaWxsc2hhZGU6e3Zpc2liaWxpdHk6e3R5cGU6XCJlbnVtXCIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6XCJ2aXNpYmxlXCJ9fSxmaWx0ZXI6e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwiKlwifSxmaWx0ZXJfb3BlcmF0b3I6e3R5cGU6XCJlbnVtXCIsdmFsdWVzOntcIj09XCI6e30sXCIhPVwiOnt9LFwiPlwiOnt9LFwiPj1cIjp7fSxcIjxcIjp7fSxcIjw9XCI6e30saW46e30sXCIhaW5cIjp7fSxhbGw6e30sYW55Ont9LG5vbmU6e30saGFzOnt9LFwiIWhhc1wiOnt9fX0sZ2VvbWV0cnlfdHlwZTp7dHlwZTpcImVudW1cIix2YWx1ZXM6e1BvaW50Ont9LExpbmVTdHJpbmc6e30sUG9seWdvbjp7fX19LGZ1bmN0aW9uX3N0b3A6e3R5cGU6XCJhcnJheVwiLG1pbmltdW06MCxtYXhpbXVtOjIyLHZhbHVlOltcIm51bWJlclwiLFwiY29sb3JcIl0sbGVuZ3RoOjJ9LGV4cHJlc3Npb246e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwiKlwiLG1pbmltdW06MX0sZXhwcmVzc2lvbl9uYW1lOnt0eXBlOlwiZW51bVwiLHZhbHVlczp7bGV0Ontncm91cDpcIlZhcmlhYmxlIGJpbmRpbmdcIn0sdmFyOntncm91cDpcIlZhcmlhYmxlIGJpbmRpbmdcIn0sbGl0ZXJhbDp7Z3JvdXA6XCJUeXBlc1wifSxhcnJheTp7Z3JvdXA6XCJUeXBlc1wifSxhdDp7Z3JvdXA6XCJMb29rdXBcIn0sY2FzZTp7Z3JvdXA6XCJEZWNpc2lvblwifSxtYXRjaDp7Z3JvdXA6XCJEZWNpc2lvblwifSxjb2FsZXNjZTp7Z3JvdXA6XCJEZWNpc2lvblwifSxzdGVwOntncm91cDpcIlJhbXBzLCBzY2FsZXMsIGN1cnZlc1wifSxpbnRlcnBvbGF0ZTp7Z3JvdXA6XCJSYW1wcywgc2NhbGVzLCBjdXJ2ZXNcIn0sbG4yOntncm91cDpcIk1hdGhcIn0scGk6e2dyb3VwOlwiTWF0aFwifSxlOntncm91cDpcIk1hdGhcIn0sdHlwZW9mOntncm91cDpcIlR5cGVzXCJ9LHN0cmluZzp7Z3JvdXA6XCJUeXBlc1wifSxudW1iZXI6e2dyb3VwOlwiVHlwZXNcIn0sYm9vbGVhbjp7Z3JvdXA6XCJUeXBlc1wifSxvYmplY3Q6e2dyb3VwOlwiVHlwZXNcIn0sY29sbGF0b3I6e2dyb3VwOlwiVHlwZXNcIn0sXCJ0by1zdHJpbmdcIjp7Z3JvdXA6XCJUeXBlc1wifSxcInRvLW51bWJlclwiOntncm91cDpcIlR5cGVzXCJ9LFwidG8tYm9vbGVhblwiOntncm91cDpcIlR5cGVzXCJ9LFwidG8tcmdiYVwiOntncm91cDpcIkNvbG9yXCJ9LFwidG8tY29sb3JcIjp7Z3JvdXA6XCJUeXBlc1wifSxyZ2I6e2dyb3VwOlwiQ29sb3JcIn0scmdiYTp7Z3JvdXA6XCJDb2xvclwifSxnZXQ6e2dyb3VwOlwiTG9va3VwXCJ9LGhhczp7Z3JvdXA6XCJMb29rdXBcIn0sbGVuZ3RoOntncm91cDpcIkxvb2t1cFwifSxwcm9wZXJ0aWVzOntncm91cDpcIkZlYXR1cmUgZGF0YVwifSxcImdlb21ldHJ5LXR5cGVcIjp7Z3JvdXA6XCJGZWF0dXJlIGRhdGFcIn0saWQ6e2dyb3VwOlwiRmVhdHVyZSBkYXRhXCJ9LHpvb206e2dyb3VwOlwiWm9vbVwifSxcImhlYXRtYXAtZGVuc2l0eVwiOntncm91cDpcIkhlYXRtYXBcIn0sXCJsaW5lLXByb2dyZXNzXCI6e2dyb3VwOlwiSGVhdG1hcFwifSxcIitcIjp7Z3JvdXA6XCJNYXRoXCJ9LFwiKlwiOntncm91cDpcIk1hdGhcIn0sXCItXCI6e2dyb3VwOlwiTWF0aFwifSxcIi9cIjp7Z3JvdXA6XCJNYXRoXCJ9LFwiJVwiOntncm91cDpcIk1hdGhcIn0sXCJeXCI6e2dyb3VwOlwiTWF0aFwifSxzcXJ0Ontncm91cDpcIk1hdGhcIn0sbG9nMTA6e2dyb3VwOlwiTWF0aFwifSxsbjp7Z3JvdXA6XCJNYXRoXCJ9LGxvZzI6e2dyb3VwOlwiTWF0aFwifSxzaW46e2dyb3VwOlwiTWF0aFwifSxjb3M6e2dyb3VwOlwiTWF0aFwifSx0YW46e2dyb3VwOlwiTWF0aFwifSxhc2luOntncm91cDpcIk1hdGhcIn0sYWNvczp7Z3JvdXA6XCJNYXRoXCJ9LGF0YW46e2dyb3VwOlwiTWF0aFwifSxtaW46e2dyb3VwOlwiTWF0aFwifSxtYXg6e2dyb3VwOlwiTWF0aFwifSxyb3VuZDp7Z3JvdXA6XCJNYXRoXCJ9LGFiczp7Z3JvdXA6XCJNYXRoXCJ9LGNlaWw6e2dyb3VwOlwiTWF0aFwifSxmbG9vcjp7Z3JvdXA6XCJNYXRoXCJ9LFwiPT1cIjp7Z3JvdXA6XCJEZWNpc2lvblwifSxcIiE9XCI6e2dyb3VwOlwiRGVjaXNpb25cIn0sXCI+XCI6e2dyb3VwOlwiRGVjaXNpb25cIn0sXCI8XCI6e2dyb3VwOlwiRGVjaXNpb25cIn0sXCI+PVwiOntncm91cDpcIkRlY2lzaW9uXCJ9LFwiPD1cIjp7Z3JvdXA6XCJEZWNpc2lvblwifSxhbGw6e2dyb3VwOlwiRGVjaXNpb25cIn0sYW55Ontncm91cDpcIkRlY2lzaW9uXCJ9LFwiIVwiOntncm91cDpcIkRlY2lzaW9uXCJ9LFwiaXMtc3VwcG9ydGVkLXNjcmlwdFwiOntncm91cDpcIlN0cmluZ1wifSx1cGNhc2U6e2dyb3VwOlwiU3RyaW5nXCJ9LGRvd25jYXNlOntncm91cDpcIlN0cmluZ1wifSxjb25jYXQ6e2dyb3VwOlwiU3RyaW5nXCJ9LFwicmVzb2x2ZWQtbG9jYWxlXCI6e2dyb3VwOlwiU3RyaW5nXCJ9fX0sbGlnaHQ6e2FuY2hvcjp7dHlwZTpcImVudW1cIixkZWZhdWx0Olwidmlld3BvcnRcIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sdHJhbnNpdGlvbjohMSxcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITEsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIn0scG9zaXRpb246e3R5cGU6XCJhcnJheVwiLGRlZmF1bHQ6WzEuMTUsMjEwLDMwXSxsZW5ndGg6Myx2YWx1ZTpcIm51bWJlclwiLHRyYW5zaXRpb246ITAsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITF9LGNvbG9yOnt0eXBlOlwiY29sb3JcIixkZWZhdWx0OlwiI2ZmZmZmZlwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiExLHRyYW5zaXRpb246ITB9LGludGVuc2l0eTp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6LjUsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMSx0cmFuc2l0aW9uOiEwfX0scGFpbnQ6W1wicGFpbnRfZmlsbFwiLFwicGFpbnRfbGluZVwiLFwicGFpbnRfY2lyY2xlXCIsXCJwYWludF9oZWF0bWFwXCIsXCJwYWludF9maWxsLWV4dHJ1c2lvblwiLFwicGFpbnRfc3ltYm9sXCIsXCJwYWludF9yYXN0ZXJcIixcInBhaW50X2hpbGxzaGFkZVwiLFwicGFpbnRfYmFja2dyb3VuZFwiXSxwYWludF9maWxsOntcImZpbGwtYW50aWFsaWFzXCI6e3R5cGU6XCJib29sZWFuXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCxkZWZhdWx0OiEwfSxcImZpbGwtb3BhY2l0eVwiOnt0eXBlOlwibnVtYmVyXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMH0sXCJmaWxsLWNvbG9yXCI6e3R5cGU6XCJjb2xvclwiLGRlZmF1bHQ6XCIjMDAwMDAwXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbe1wiIVwiOlwiZmlsbC1wYXR0ZXJuXCJ9XX0sXCJmaWxsLW91dGxpbmUtY29sb3JcIjp7dHlwZTpcImNvbG9yXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbe1wiIVwiOlwiZmlsbC1wYXR0ZXJuXCJ9LHtcImZpbGwtYW50aWFsaWFzXCI6ITB9XX0sXCJmaWxsLXRyYW5zbGF0ZVwiOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcIm51bWJlclwiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOlwicGl4ZWxzXCJ9LFwiZmlsbC10cmFuc2xhdGUtYW5jaG9yXCI6e3R5cGU6XCJlbnVtXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDpcIm1hcFwiLHJlcXVpcmVzOltcImZpbGwtdHJhbnNsYXRlXCJdfSxcImZpbGwtcGF0dGVyblwiOnt0eXBlOlwic3RyaW5nXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwfX0scGFpbnRfbGluZTp7XCJsaW5lLW9wYWNpdHlcIjp7dHlwZTpcIm51bWJlclwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITB9LFwibGluZS1jb2xvclwiOnt0eXBlOlwiY29sb3JcIixkZWZhdWx0OlwiIzAwMDAwMFwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3tcIiFcIjpcImxpbmUtcGF0dGVyblwifV19LFwibGluZS10cmFuc2xhdGVcIjp7dHlwZTpcImFycmF5XCIsdmFsdWU6XCJudW1iZXJcIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCx1bml0czpcInBpeGVsc1wifSxcImxpbmUtdHJhbnNsYXRlLWFuY2hvclwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6XCJtYXBcIixyZXF1aXJlczpbXCJsaW5lLXRyYW5zbGF0ZVwiXX0sXCJsaW5lLXdpZHRoXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjEsbWluaW11bTowLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6XCJwaXhlbHNcIn0sXCJsaW5lLWdhcC13aWR0aFwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLG1pbmltdW06MCxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOlwicGl4ZWxzXCJ9LFwibGluZS1vZmZzZXRcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MCxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOlwicGl4ZWxzXCJ9LFwibGluZS1ibHVyXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjAsbWluaW11bTowLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6XCJwaXhlbHNcIn0sXCJsaW5lLWRhc2hhcnJheVwiOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcIm51bWJlclwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsbWluaW11bTowLHRyYW5zaXRpb246ITAsdW5pdHM6XCJsaW5lIHdpZHRoc1wiLHJlcXVpcmVzOlt7XCIhXCI6XCJsaW5lLXBhdHRlcm5cIn1dfSxcImxpbmUtcGF0dGVyblwiOnt0eXBlOlwic3RyaW5nXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwfSxcImxpbmUtZ3JhZGllbnRcIjp7dHlwZTpcImNvbG9yXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMSxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITEsdHJhbnNpdGlvbjohMSxyZXF1aXJlczpbe1wiIVwiOlwibGluZS1kYXNoYXJyYXlcIn0se1wiIVwiOlwibGluZS1wYXR0ZXJuXCJ9LHtzb3VyY2U6XCJnZW9qc29uXCIsaGFzOntsaW5lTWV0cmljczohMH19XX19LHBhaW50X2NpcmNsZTp7XCJjaXJjbGUtcmFkaXVzXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjUsbWluaW11bTowLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6XCJwaXhlbHNcIn0sXCJjaXJjbGUtY29sb3JcIjp7dHlwZTpcImNvbG9yXCIsZGVmYXVsdDpcIiMwMDAwMDBcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwfSxcImNpcmNsZS1ibHVyXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjAsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMH0sXCJjaXJjbGUtb3BhY2l0eVwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMH0sXCJjaXJjbGUtdHJhbnNsYXRlXCI6e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwibnVtYmVyXCIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6XCJwaXhlbHNcIn0sXCJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvclwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6XCJtYXBcIixyZXF1aXJlczpbXCJjaXJjbGUtdHJhbnNsYXRlXCJdfSxcImNpcmNsZS1waXRjaC1zY2FsZVwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6XCJtYXBcIn0sXCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50XCI6e3R5cGU6XCJlbnVtXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDpcInZpZXdwb3J0XCJ9LFwiY2lyY2xlLXN0cm9rZS13aWR0aFwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLG1pbmltdW06MCxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOlwicGl4ZWxzXCJ9LFwiY2lyY2xlLXN0cm9rZS1jb2xvclwiOnt0eXBlOlwiY29sb3JcIixkZWZhdWx0OlwiIzAwMDAwMFwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITB9LFwiY2lyY2xlLXN0cm9rZS1vcGFjaXR5XCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwfX0scGFpbnRfaGVhdG1hcDp7XCJoZWF0bWFwLXJhZGl1c1wiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDozMCxtaW5pbXVtOjEsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCx1bml0czpcInBpeGVsc1wifSxcImhlYXRtYXAtd2VpZ2h0XCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjEsbWluaW11bTowLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITF9LFwiaGVhdG1hcC1pbnRlbnNpdHlcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITEsdHJhbnNpdGlvbjohMH0sXCJoZWF0bWFwLWNvbG9yXCI6e3R5cGU6XCJjb2xvclwiLGRlZmF1bHQ6W1wiaW50ZXJwb2xhdGVcIixbXCJsaW5lYXJcIl0sW1wiaGVhdG1hcC1kZW5zaXR5XCJdLDAsXCJyZ2JhKDAsIDAsIDI1NSwgMClcIiwuMSxcInJveWFsYmx1ZVwiLC4zLFwiY3lhblwiLC41LFwibGltZVwiLC43LFwieWVsbG93XCIsMSxcInJlZFwiXSxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiExLFwicHJvcGVydHktZnVuY3Rpb25cIjohMSx0cmFuc2l0aW9uOiExfSxcImhlYXRtYXAtb3BhY2l0eVwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITEsdHJhbnNpdGlvbjohMH19LHBhaW50X3N5bWJvbDp7XCJpY29uLW9wYWNpdHlcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W1wiaWNvbi1pbWFnZVwiXX0sXCJpY29uLWNvbG9yXCI6e3R5cGU6XCJjb2xvclwiLGRlZmF1bHQ6XCIjMDAwMDAwXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbXCJpY29uLWltYWdlXCJdfSxcImljb24taGFsby1jb2xvclwiOnt0eXBlOlwiY29sb3JcIixkZWZhdWx0OlwicmdiYSgwLCAwLCAwLCAwKVwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W1wiaWNvbi1pbWFnZVwiXX0sXCJpY29uLWhhbG8td2lkdGhcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCx1bml0czpcInBpeGVsc1wiLHJlcXVpcmVzOltcImljb24taW1hZ2VcIl19LFwiaWNvbi1oYWxvLWJsdXJcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCx1bml0czpcInBpeGVsc1wiLHJlcXVpcmVzOltcImljb24taW1hZ2VcIl19LFwiaWNvbi10cmFuc2xhdGVcIjp7dHlwZTpcImFycmF5XCIsdmFsdWU6XCJudW1iZXJcIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCx1bml0czpcInBpeGVsc1wiLHJlcXVpcmVzOltcImljb24taW1hZ2VcIl19LFwiaWNvbi10cmFuc2xhdGUtYW5jaG9yXCI6e3R5cGU6XCJlbnVtXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDpcIm1hcFwiLHJlcXVpcmVzOltcImljb24taW1hZ2VcIixcImljb24tdHJhbnNsYXRlXCJdfSxcInRleHQtb3BhY2l0eVwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCJdfSxcInRleHQtY29sb3JcIjp7dHlwZTpcImNvbG9yXCIsZGVmYXVsdDpcIiMwMDAwMDBcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC1oYWxvLWNvbG9yXCI6e3R5cGU6XCJjb2xvclwiLGRlZmF1bHQ6XCJyZ2JhKDAsIDAsIDAsIDApXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCJdfSxcInRleHQtaGFsby13aWR0aFwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLG1pbmltdW06MCxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOlwicGl4ZWxzXCIscmVxdWlyZXM6W1widGV4dC1maWVsZFwiXX0sXCJ0ZXh0LWhhbG8tYmx1clwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLG1pbmltdW06MCxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOlwicGl4ZWxzXCIscmVxdWlyZXM6W1widGV4dC1maWVsZFwiXX0sXCJ0ZXh0LXRyYW5zbGF0ZVwiOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcIm51bWJlclwiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOlwicGl4ZWxzXCIscmVxdWlyZXM6W1widGV4dC1maWVsZFwiXX0sXCJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3JcIjp7dHlwZTpcImVudW1cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OlwibWFwXCIscmVxdWlyZXM6W1widGV4dC1maWVsZFwiLFwidGV4dC10cmFuc2xhdGVcIl19fSxwYWludF9yYXN0ZXI6e1wicmFzdGVyLW9wYWNpdHlcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMH0sXCJyYXN0ZXItaHVlLXJvdGF0ZVwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLHBlcmlvZDozNjAsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOlwiZGVncmVlc1wifSxcInJhc3Rlci1icmlnaHRuZXNzLW1pblwiOnt0eXBlOlwibnVtYmVyXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxkZWZhdWx0OjAsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwfSxcInJhc3Rlci1icmlnaHRuZXNzLW1heFwiOnt0eXBlOlwibnVtYmVyXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwfSxcInJhc3Rlci1zYXR1cmF0aW9uXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjAsbWluaW11bTotMSxtYXhpbXVtOjEsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwfSxcInJhc3Rlci1jb250cmFzdFwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLG1pbmltdW06LTEsbWF4aW11bToxLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMH0sXCJyYXN0ZXItZmFkZS1kdXJhdGlvblwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDozMDAsbWluaW11bTowLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMSx1bml0czpcIm1pbGxpc2Vjb25kc1wifX0scGFpbnRfaGlsbHNoYWRlOntcImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjMzNSxtaW5pbXVtOjAsbWF4aW11bTozNTksZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiExfSxcImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yXCI6e3R5cGU6XCJlbnVtXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDpcInZpZXdwb3J0XCJ9LFwiaGlsbHNoYWRlLWV4YWdnZXJhdGlvblwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDouNSxtaW5pbXVtOjAsbWF4aW11bToxLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMH0sXCJoaWxsc2hhZGUtc2hhZG93LWNvbG9yXCI6e3R5cGU6XCJjb2xvclwiLGRlZmF1bHQ6XCIjMDAwMDAwXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwfSxcImhpbGxzaGFkZS1oaWdobGlnaHQtY29sb3JcIjp7dHlwZTpcImNvbG9yXCIsZGVmYXVsdDpcIiNGRkZGRkZcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITB9LFwiaGlsbHNoYWRlLWFjY2VudC1jb2xvclwiOnt0eXBlOlwiY29sb3JcIixkZWZhdWx0OlwiIzAwMDAwMFwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMH19LHBhaW50X2JhY2tncm91bmQ6e1wiYmFja2dyb3VuZC1jb2xvclwiOnt0eXBlOlwiY29sb3JcIixkZWZhdWx0OlwiIzAwMDAwMFwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbe1wiIVwiOlwiYmFja2dyb3VuZC1wYXR0ZXJuXCJ9XX0sXCJiYWNrZ3JvdW5kLXBhdHRlcm5cIjp7dHlwZTpcInN0cmluZ1wiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMH0sXCJiYWNrZ3JvdW5kLW9wYWNpdHlcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMH19LHRyYW5zaXRpb246e2R1cmF0aW9uOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDozMDAsbWluaW11bTowLHVuaXRzOlwibWlsbGlzZWNvbmRzXCJ9LGRlbGF5Ont0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLG1pbmltdW06MCx1bml0czpcIm1pbGxpc2Vjb25kc1wifX0sXCJsYXlvdXRfZmlsbC1leHRydXNpb25cIjp7dmlzaWJpbGl0eTp7dHlwZTpcImVudW1cIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDpcInZpc2libGVcIn19LGZ1bmN0aW9uOntleHByZXNzaW9uOnt0eXBlOlwiZXhwcmVzc2lvblwifSxzdG9wczp7dHlwZTpcImFycmF5XCIsdmFsdWU6XCJmdW5jdGlvbl9zdG9wXCJ9LGJhc2U6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjEsbWluaW11bTowfSxwcm9wZXJ0eTp7dHlwZTpcInN0cmluZ1wiLGRlZmF1bHQ6XCIkem9vbVwifSx0eXBlOnt0eXBlOlwiZW51bVwiLHZhbHVlczp7aWRlbnRpdHk6e30sZXhwb25lbnRpYWw6e30saW50ZXJ2YWw6e30sY2F0ZWdvcmljYWw6e319LGRlZmF1bHQ6XCJleHBvbmVudGlhbFwifSxjb2xvclNwYWNlOnt0eXBlOlwiZW51bVwiLHZhbHVlczp7cmdiOnt9LGxhYjp7fSxoY2w6e319LGRlZmF1bHQ6XCJyZ2JcIn0sZGVmYXVsdDp7dHlwZTpcIipcIixyZXF1aXJlZDohMX19LFwicGFpbnRfZmlsbC1leHRydXNpb25cIjp7XCJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5XCI6e3R5cGU6XCJudW1iZXJcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMSxkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwfSxcImZpbGwtZXh0cnVzaW9uLWNvbG9yXCI6e3R5cGU6XCJjb2xvclwiLGRlZmF1bHQ6XCIjMDAwMDAwXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbe1wiIVwiOlwiZmlsbC1leHRydXNpb24tcGF0dGVyblwifV19LFwiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlXCI6e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwibnVtYmVyXCIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6XCJwaXhlbHNcIn0sXCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yXCI6e3R5cGU6XCJlbnVtXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDpcIm1hcFwiLHJlcXVpcmVzOltcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZVwiXX0sXCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuXCI6e3R5cGU6XCJzdHJpbmdcIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITB9LFwiZmlsbC1leHRydXNpb24taGVpZ2h0XCI6e3R5cGU6XCJudW1iZXJcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCxkZWZhdWx0OjAsbWluaW11bTowLHVuaXRzOlwibWV0ZXJzXCIsdHJhbnNpdGlvbjohMH0sXCJmaWxsLWV4dHJ1c2lvbi1iYXNlXCI6e3R5cGU6XCJudW1iZXJcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCxkZWZhdWx0OjAsbWluaW11bTowLHVuaXRzOlwibWV0ZXJzXCIsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbXCJmaWxsLWV4dHJ1c2lvbi1oZWlnaHRcIl19fX0sRD1mdW5jdGlvbih0LGUscixuKXt0aGlzLm1lc3NhZ2U9KHQ/dCtcIjogXCI6XCJcIikrcixuJiYodGhpcy5pZGVudGlmaWVyPW4pLG51bGwhPWUmJmUuX19saW5lX18mJih0aGlzLmxpbmU9ZS5fX2xpbmVfXyl9O2Z1bmN0aW9uIFAodCl7dmFyIGU9dC5rZXkscj10LnZhbHVlO3JldHVybiByP1tuZXcgRChlLHIsXCJjb25zdGFudHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgYXMgb2YgdjhcIildOltdfWZ1bmN0aW9uIFIodCl7Zm9yKHZhciBlPVtdLHI9YXJndW1lbnRzLmxlbmd0aC0xO3ItLSA+MDspZVtyXT1hcmd1bWVudHNbcisxXTtmb3IodmFyIG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO2Zvcih2YXIgbyBpbiBhKXRbb109YVtvXX1yZXR1cm4gdH1mdW5jdGlvbiBGKHQpe3JldHVybiB0IGluc3RhbmNlb2YgTnVtYmVyfHx0IGluc3RhbmNlb2YgU3RyaW5nfHx0IGluc3RhbmNlb2YgQm9vbGVhbj90LnZhbHVlT2YoKTp0fWZ1bmN0aW9uIEIodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5tYXAoQik6Rih0KX12YXIgTj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dC5jYWxsKHRoaXMsciksdGhpcy5tZXNzYWdlPXIsdGhpcy5rZXk9ZX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZX0oRXJyb3IpLGo9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT1bXSksdGhpcy5wYXJlbnQ9dCx0aGlzLmJpbmRpbmdzPXt9O2Zvcih2YXIgcj0wLG49ZTtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl0sYT1pWzBdLG89aVsxXTt0aGlzLmJpbmRpbmdzW2FdPW99fTtqLnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBqKHRoaXMsdCl9LGoucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtpZih0aGlzLmJpbmRpbmdzW3RdKXJldHVybiB0aGlzLmJpbmRpbmdzW3RdO2lmKHRoaXMucGFyZW50KXJldHVybiB0aGlzLnBhcmVudC5nZXQodCk7dGhyb3cgbmV3IEVycm9yKHQrXCIgbm90IGZvdW5kIGluIHNjb3BlLlwiKX0sai5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiEhdGhpcy5iaW5kaW5nc1t0XXx8ISF0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuaGFzKHQpfTt2YXIgVj17a2luZDpcIm51bGxcIn0sVT17a2luZDpcIm51bWJlclwifSxxPXtraW5kOlwic3RyaW5nXCJ9LEg9e2tpbmQ6XCJib29sZWFuXCJ9LEc9e2tpbmQ6XCJjb2xvclwifSxZPXtraW5kOlwib2JqZWN0XCJ9LFc9e2tpbmQ6XCJ2YWx1ZVwifSxYPXtraW5kOlwiY29sbGF0b3JcIn07ZnVuY3Rpb24gWih0LGUpe3JldHVybntraW5kOlwiYXJyYXlcIixpdGVtVHlwZTp0LE46ZX19ZnVuY3Rpb24gJCh0KXtpZihcImFycmF5XCI9PT10LmtpbmQpe3ZhciBlPSQodC5pdGVtVHlwZSk7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIHQuTj9cImFycmF5PFwiK2UrXCIsIFwiK3QuTitcIj5cIjpcInZhbHVlXCI9PT10Lml0ZW1UeXBlLmtpbmQ/XCJhcnJheVwiOlwiYXJyYXk8XCIrZStcIj5cIn1yZXR1cm4gdC5raW5kfXZhciBKPVtWLFUscSxILEcsWSxaKFcpXTtmdW5jdGlvbiBLKHQsZSl7aWYoXCJlcnJvclwiPT09ZS5raW5kKXJldHVybiBudWxsO2lmKFwiYXJyYXlcIj09PXQua2luZCl7aWYoXCJhcnJheVwiPT09ZS5raW5kJiYhSyh0Lml0ZW1UeXBlLGUuaXRlbVR5cGUpJiYoXCJudW1iZXJcIiE9dHlwZW9mIHQuTnx8dC5OPT09ZS5OKSlyZXR1cm4gbnVsbH1lbHNle2lmKHQua2luZD09PWUua2luZClyZXR1cm4gbnVsbDtpZihcInZhbHVlXCI9PT10LmtpbmQpZm9yKHZhciByPTAsbj1KO3I8bi5sZW5ndGg7cis9MSlpZighSyhuW3JdLGUpKXJldHVybiBudWxsfXJldHVyblwiRXhwZWN0ZWQgXCIrJCh0KStcIiBidXQgZm91bmQgXCIrJChlKStcIiBpbnN0ZWFkLlwifXZhciBRPWkoZnVuY3Rpb24odCxlKXt2YXIgcj17dHJhbnNwYXJlbnQ6WzAsMCwwLDBdLGFsaWNlYmx1ZTpbMjQwLDI0OCwyNTUsMV0sYW50aXF1ZXdoaXRlOlsyNTAsMjM1LDIxNSwxXSxhcXVhOlswLDI1NSwyNTUsMV0sYXF1YW1hcmluZTpbMTI3LDI1NSwyMTIsMV0sYXp1cmU6WzI0MCwyNTUsMjU1LDFdLGJlaWdlOlsyNDUsMjQ1LDIyMCwxXSxiaXNxdWU6WzI1NSwyMjgsMTk2LDFdLGJsYWNrOlswLDAsMCwxXSxibGFuY2hlZGFsbW9uZDpbMjU1LDIzNSwyMDUsMV0sYmx1ZTpbMCwwLDI1NSwxXSxibHVldmlvbGV0OlsxMzgsNDMsMjI2LDFdLGJyb3duOlsxNjUsNDIsNDIsMV0sYnVybHl3b29kOlsyMjIsMTg0LDEzNSwxXSxjYWRldGJsdWU6Wzk1LDE1OCwxNjAsMV0sY2hhcnRyZXVzZTpbMTI3LDI1NSwwLDFdLGNob2NvbGF0ZTpbMjEwLDEwNSwzMCwxXSxjb3JhbDpbMjU1LDEyNyw4MCwxXSxjb3JuZmxvd2VyYmx1ZTpbMTAwLDE0OSwyMzcsMV0sY29ybnNpbGs6WzI1NSwyNDgsMjIwLDFdLGNyaW1zb246WzIyMCwyMCw2MCwxXSxjeWFuOlswLDI1NSwyNTUsMV0sZGFya2JsdWU6WzAsMCwxMzksMV0sZGFya2N5YW46WzAsMTM5LDEzOSwxXSxkYXJrZ29sZGVucm9kOlsxODQsMTM0LDExLDFdLGRhcmtncmF5OlsxNjksMTY5LDE2OSwxXSxkYXJrZ3JlZW46WzAsMTAwLDAsMV0sZGFya2dyZXk6WzE2OSwxNjksMTY5LDFdLGRhcmtraGFraTpbMTg5LDE4MywxMDcsMV0sZGFya21hZ2VudGE6WzEzOSwwLDEzOSwxXSxkYXJrb2xpdmVncmVlbjpbODUsMTA3LDQ3LDFdLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMCwxXSxkYXJrb3JjaGlkOlsxNTMsNTAsMjA0LDFdLGRhcmtyZWQ6WzEzOSwwLDAsMV0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjIsMV0sZGFya3NlYWdyZWVuOlsxNDMsMTg4LDE0MywxXSxkYXJrc2xhdGVibHVlOls3Miw2MSwxMzksMV0sZGFya3NsYXRlZ3JheTpbNDcsNzksNzksMV0sZGFya3NsYXRlZ3JleTpbNDcsNzksNzksMV0sZGFya3R1cnF1b2lzZTpbMCwyMDYsMjA5LDFdLGRhcmt2aW9sZXQ6WzE0OCwwLDIxMSwxXSxkZWVwcGluazpbMjU1LDIwLDE0NywxXSxkZWVwc2t5Ymx1ZTpbMCwxOTEsMjU1LDFdLGRpbWdyYXk6WzEwNSwxMDUsMTA1LDFdLGRpbWdyZXk6WzEwNSwxMDUsMTA1LDFdLGRvZGdlcmJsdWU6WzMwLDE0NCwyNTUsMV0sZmlyZWJyaWNrOlsxNzgsMzQsMzQsMV0sZmxvcmFsd2hpdGU6WzI1NSwyNTAsMjQwLDFdLGZvcmVzdGdyZWVuOlszNCwxMzksMzQsMV0sZnVjaHNpYTpbMjU1LDAsMjU1LDFdLGdhaW5zYm9ybzpbMjIwLDIyMCwyMjAsMV0sZ2hvc3R3aGl0ZTpbMjQ4LDI0OCwyNTUsMV0sZ29sZDpbMjU1LDIxNSwwLDFdLGdvbGRlbnJvZDpbMjE4LDE2NSwzMiwxXSxncmF5OlsxMjgsMTI4LDEyOCwxXSxncmVlbjpbMCwxMjgsMCwxXSxncmVlbnllbGxvdzpbMTczLDI1NSw0NywxXSxncmV5OlsxMjgsMTI4LDEyOCwxXSxob25leWRldzpbMjQwLDI1NSwyNDAsMV0saG90cGluazpbMjU1LDEwNSwxODAsMV0saW5kaWFucmVkOlsyMDUsOTIsOTIsMV0saW5kaWdvOls3NSwwLDEzMCwxXSxpdm9yeTpbMjU1LDI1NSwyNDAsMV0sa2hha2k6WzI0MCwyMzAsMTQwLDFdLGxhdmVuZGVyOlsyMzAsMjMwLDI1MCwxXSxsYXZlbmRlcmJsdXNoOlsyNTUsMjQwLDI0NSwxXSxsYXduZ3JlZW46WzEyNCwyNTIsMCwxXSxsZW1vbmNoaWZmb246WzI1NSwyNTAsMjA1LDFdLGxpZ2h0Ymx1ZTpbMTczLDIxNiwyMzAsMV0sbGlnaHRjb3JhbDpbMjQwLDEyOCwxMjgsMV0sbGlnaHRjeWFuOlsyMjQsMjU1LDI1NSwxXSxsaWdodGdvbGRlbnJvZHllbGxvdzpbMjUwLDI1MCwyMTAsMV0sbGlnaHRncmF5OlsyMTEsMjExLDIxMSwxXSxsaWdodGdyZWVuOlsxNDQsMjM4LDE0NCwxXSxsaWdodGdyZXk6WzIxMSwyMTEsMjExLDFdLGxpZ2h0cGluazpbMjU1LDE4MiwxOTMsMV0sbGlnaHRzYWxtb246WzI1NSwxNjAsMTIyLDFdLGxpZ2h0c2VhZ3JlZW46WzMyLDE3OCwxNzAsMV0sbGlnaHRza3libHVlOlsxMzUsMjA2LDI1MCwxXSxsaWdodHNsYXRlZ3JheTpbMTE5LDEzNiwxNTMsMV0sbGlnaHRzbGF0ZWdyZXk6WzExOSwxMzYsMTUzLDFdLGxpZ2h0c3RlZWxibHVlOlsxNzYsMTk2LDIyMiwxXSxsaWdodHllbGxvdzpbMjU1LDI1NSwyMjQsMV0sbGltZTpbMCwyNTUsMCwxXSxsaW1lZ3JlZW46WzUwLDIwNSw1MCwxXSxsaW5lbjpbMjUwLDI0MCwyMzAsMV0sbWFnZW50YTpbMjU1LDAsMjU1LDFdLG1hcm9vbjpbMTI4LDAsMCwxXSxtZWRpdW1hcXVhbWFyaW5lOlsxMDIsMjA1LDE3MCwxXSxtZWRpdW1ibHVlOlswLDAsMjA1LDFdLG1lZGl1bW9yY2hpZDpbMTg2LDg1LDIxMSwxXSxtZWRpdW1wdXJwbGU6WzE0NywxMTIsMjE5LDFdLG1lZGl1bXNlYWdyZWVuOls2MCwxNzksMTEzLDFdLG1lZGl1bXNsYXRlYmx1ZTpbMTIzLDEwNCwyMzgsMV0sbWVkaXVtc3ByaW5nZ3JlZW46WzAsMjUwLDE1NCwxXSxtZWRpdW10dXJxdW9pc2U6WzcyLDIwOSwyMDQsMV0sbWVkaXVtdmlvbGV0cmVkOlsxOTksMjEsMTMzLDFdLG1pZG5pZ2h0Ymx1ZTpbMjUsMjUsMTEyLDFdLG1pbnRjcmVhbTpbMjQ1LDI1NSwyNTAsMV0sbWlzdHlyb3NlOlsyNTUsMjI4LDIyNSwxXSxtb2NjYXNpbjpbMjU1LDIyOCwxODEsMV0sbmF2YWpvd2hpdGU6WzI1NSwyMjIsMTczLDFdLG5hdnk6WzAsMCwxMjgsMV0sb2xkbGFjZTpbMjUzLDI0NSwyMzAsMV0sb2xpdmU6WzEyOCwxMjgsMCwxXSxvbGl2ZWRyYWI6WzEwNywxNDIsMzUsMV0sb3JhbmdlOlsyNTUsMTY1LDAsMV0sb3JhbmdlcmVkOlsyNTUsNjksMCwxXSxvcmNoaWQ6WzIxOCwxMTIsMjE0LDFdLHBhbGVnb2xkZW5yb2Q6WzIzOCwyMzIsMTcwLDFdLHBhbGVncmVlbjpbMTUyLDI1MSwxNTIsMV0scGFsZXR1cnF1b2lzZTpbMTc1LDIzOCwyMzgsMV0scGFsZXZpb2xldHJlZDpbMjE5LDExMiwxNDcsMV0scGFwYXlhd2hpcDpbMjU1LDIzOSwyMTMsMV0scGVhY2hwdWZmOlsyNTUsMjE4LDE4NSwxXSxwZXJ1OlsyMDUsMTMzLDYzLDFdLHBpbms6WzI1NSwxOTIsMjAzLDFdLHBsdW06WzIyMSwxNjAsMjIxLDFdLHBvd2RlcmJsdWU6WzE3NiwyMjQsMjMwLDFdLHB1cnBsZTpbMTI4LDAsMTI4LDFdLHJlYmVjY2FwdXJwbGU6WzEwMiw1MSwxNTMsMV0scmVkOlsyNTUsMCwwLDFdLHJvc3licm93bjpbMTg4LDE0MywxNDMsMV0scm95YWxibHVlOls2NSwxMDUsMjI1LDFdLHNhZGRsZWJyb3duOlsxMzksNjksMTksMV0sc2FsbW9uOlsyNTAsMTI4LDExNCwxXSxzYW5keWJyb3duOlsyNDQsMTY0LDk2LDFdLHNlYWdyZWVuOls0NiwxMzksODcsMV0sc2Vhc2hlbGw6WzI1NSwyNDUsMjM4LDFdLHNpZW5uYTpbMTYwLDgyLDQ1LDFdLHNpbHZlcjpbMTkyLDE5MiwxOTIsMV0sc2t5Ymx1ZTpbMTM1LDIwNiwyMzUsMV0sc2xhdGVibHVlOlsxMDYsOTAsMjA1LDFdLHNsYXRlZ3JheTpbMTEyLDEyOCwxNDQsMV0sc2xhdGVncmV5OlsxMTIsMTI4LDE0NCwxXSxzbm93OlsyNTUsMjUwLDI1MCwxXSxzcHJpbmdncmVlbjpbMCwyNTUsMTI3LDFdLHN0ZWVsYmx1ZTpbNzAsMTMwLDE4MCwxXSx0YW46WzIxMCwxODAsMTQwLDFdLHRlYWw6WzAsMTI4LDEyOCwxXSx0aGlzdGxlOlsyMTYsMTkxLDIxNiwxXSx0b21hdG86WzI1NSw5OSw3MSwxXSx0dXJxdW9pc2U6WzY0LDIyNCwyMDgsMV0sdmlvbGV0OlsyMzgsMTMwLDIzOCwxXSx3aGVhdDpbMjQ1LDIyMiwxNzksMV0sd2hpdGU6WzI1NSwyNTUsMjU1LDFdLHdoaXRlc21va2U6WzI0NSwyNDUsMjQ1LDFdLHllbGxvdzpbMjU1LDI1NSwwLDFdLHllbGxvd2dyZWVuOlsxNTQsMjA1LDUwLDFdfTtmdW5jdGlvbiBuKHQpe3JldHVybih0PU1hdGgucm91bmQodCkpPDA/MDp0PjI1NT8yNTU6dH1mdW5jdGlvbiBpKHQpe3JldHVybiB0PDA/MDp0PjE/MTp0fWZ1bmN0aW9uIGEodCl7cmV0dXJuXCIlXCI9PT10W3QubGVuZ3RoLTFdP24ocGFyc2VGbG9hdCh0KS8xMDAqMjU1KTpuKHBhcnNlSW50KHQpKX1mdW5jdGlvbiBvKHQpe3JldHVyblwiJVwiPT09dFt0Lmxlbmd0aC0xXT9pKHBhcnNlRmxvYXQodCkvMTAwKTppKHBhcnNlRmxvYXQodCkpfWZ1bmN0aW9uIHModCxlLHIpe3JldHVybiByPDA/cis9MTpyPjEmJihyLT0xKSw2KnI8MT90KyhlLXQpKnIqNjoyKnI8MT9lOjMqcjwyP3QrKGUtdCkqKDIvMy1yKSo2OnR9dHJ5e2UucGFyc2VDU1NDb2xvcj1mdW5jdGlvbih0KXt2YXIgZSxpPXQucmVwbGFjZSgvIC9nLFwiXCIpLnRvTG93ZXJDYXNlKCk7aWYoaSBpbiByKXJldHVybiByW2ldLnNsaWNlKCk7aWYoXCIjXCI9PT1pWzBdKXJldHVybiA0PT09aS5sZW5ndGg/KGU9cGFyc2VJbnQoaS5zdWJzdHIoMSksMTYpKT49MCYmZTw9NDA5NT9bKDM4NDAmZSk+PjR8KDM4NDAmZSk+PjgsMjQwJmV8KDI0MCZlKT4+NCwxNSZlfCgxNSZlKTw8NCwxXTpudWxsOjc9PT1pLmxlbmd0aCYmKGU9cGFyc2VJbnQoaS5zdWJzdHIoMSksMTYpKT49MCYmZTw9MTY3NzcyMTU/WygxNjcxMTY4MCZlKT4+MTYsKDY1MjgwJmUpPj44LDI1NSZlLDFdOm51bGw7dmFyIGw9aS5pbmRleE9mKFwiKFwiKSxjPWkuaW5kZXhPZihcIilcIik7aWYoLTEhPT1sJiZjKzE9PT1pLmxlbmd0aCl7dmFyIHU9aS5zdWJzdHIoMCxsKSxoPWkuc3Vic3RyKGwrMSxjLShsKzEpKS5zcGxpdChcIixcIiksZj0xO3N3aXRjaCh1KXtjYXNlXCJyZ2JhXCI6aWYoNCE9PWgubGVuZ3RoKXJldHVybiBudWxsO2Y9byhoLnBvcCgpKTtjYXNlXCJyZ2JcIjpyZXR1cm4gMyE9PWgubGVuZ3RoP251bGw6W2EoaFswXSksYShoWzFdKSxhKGhbMl0pLGZdO2Nhc2VcImhzbGFcIjppZig0IT09aC5sZW5ndGgpcmV0dXJuIG51bGw7Zj1vKGgucG9wKCkpO2Nhc2VcImhzbFwiOmlmKDMhPT1oLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgcD0ocGFyc2VGbG9hdChoWzBdKSUzNjArMzYwKSUzNjAvMzYwLGQ9byhoWzFdKSxnPW8oaFsyXSksdj1nPD0uNT9nKihkKzEpOmcrZC1nKmQsbT0yKmctdjtyZXR1cm5bbigyNTUqcyhtLHYscCsxLzMpKSxuKDI1NSpzKG0sdixwKSksbigyNTUqcyhtLHYscC0xLzMpKSxmXTtkZWZhdWx0OnJldHVybiBudWxsfX1yZXR1cm4gbnVsbH19Y2F0Y2godCl7fX0pLnBhcnNlQ1NTQ29sb3IsdHQ9ZnVuY3Rpb24odCxlLHIsbil7dm9pZCAwPT09biYmKG49MSksdGhpcy5yPXQsdGhpcy5nPWUsdGhpcy5iPXIsdGhpcy5hPW59O3R0LnBhcnNlPWZ1bmN0aW9uKHQpe2lmKHQpe2lmKHQgaW5zdGFuY2VvZiB0dClyZXR1cm4gdDtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7dmFyIGU9USh0KTtpZihlKXJldHVybiBuZXcgdHQoZVswXS8yNTUqZVszXSxlWzFdLzI1NSplWzNdLGVbMl0vMjU1KmVbM10sZVszXSl9fX0sdHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50b0FycmF5KCksZT10WzBdLHI9dFsxXSxuPXRbMl0saT10WzNdO3JldHVyblwicmdiYShcIitNYXRoLnJvdW5kKGUpK1wiLFwiK01hdGgucm91bmQocikrXCIsXCIrTWF0aC5yb3VuZChuKStcIixcIitpK1wiKVwifSx0dC5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3ZhciB0PXRoaXMucixlPXRoaXMuZyxyPXRoaXMuYixuPXRoaXMuYTtyZXR1cm4gMD09PW4/WzAsMCwwLDBdOlsyNTUqdC9uLDI1NSplL24sMjU1KnIvbixuXX0sdHQuYmxhY2s9bmV3IHR0KDAsMCwwLDEpLHR0LndoaXRlPW5ldyB0dCgxLDEsMSwxKSx0dC50cmFuc3BhcmVudD1uZXcgdHQoMCwwLDAsMCk7dmFyIGV0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnNlbnNpdGl2aXR5PXQ/ZT9cInZhcmlhbnRcIjpcImNhc2VcIjplP1wiYWNjZW50XCI6XCJiYXNlXCIsdGhpcy5sb2NhbGU9cix0aGlzLmNvbGxhdG9yPW5ldyBJbnRsLkNvbGxhdG9yKHRoaXMubG9jYWxlP3RoaXMubG9jYWxlOltdLHtzZW5zaXRpdml0eTp0aGlzLnNlbnNpdGl2aXR5LHVzYWdlOlwic2VhcmNoXCJ9KX07ZXQucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jb2xsYXRvci5jb21wYXJlKHQsZSl9LGV0LnByb3RvdHlwZS5yZXNvbHZlZExvY2FsZT1mdW5jdGlvbigpe3JldHVybiBuZXcgSW50bC5Db2xsYXRvcih0aGlzLmxvY2FsZT90aGlzLmxvY2FsZTpbXSkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlfTt2YXIgcnQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMudHlwZT1YLHRoaXMubG9jYWxlPXIsdGhpcy5jYXNlU2Vuc2l0aXZlPXQsdGhpcy5kaWFjcml0aWNTZW5zaXRpdmU9ZX07ZnVuY3Rpb24gbnQodCxlLHIsbil7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTAmJnQ8PTI1NSYmXCJudW1iZXJcIj09dHlwZW9mIGUmJmU+PTAmJmU8PTI1NSYmXCJudW1iZXJcIj09dHlwZW9mIHImJnI+PTAmJnI8PTI1NT92b2lkIDA9PT1ufHxcIm51bWJlclwiPT10eXBlb2YgbiYmbj49MCYmbjw9MT9udWxsOlwiSW52YWxpZCByZ2JhIHZhbHVlIFtcIitbdCxlLHIsbl0uam9pbihcIiwgXCIpK1wiXTogJ2EnIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLlwiOlwiSW52YWxpZCByZ2JhIHZhbHVlIFtcIisoXCJudW1iZXJcIj09dHlwZW9mIG4/W3QsZSxyLG5dOlt0LGUscl0pLmpvaW4oXCIsIFwiKStcIl06ICdyJywgJ2cnLCBhbmQgJ2InIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyNTUuXCJ9ZnVuY3Rpb24gaXQodCl7aWYobnVsbD09PXQpcmV0dXJuIFY7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpcmV0dXJuIHE7aWYoXCJib29sZWFuXCI9PXR5cGVvZiB0KXJldHVybiBIO2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXJldHVybiBVO2lmKHQgaW5zdGFuY2VvZiB0dClyZXR1cm4gRztpZih0IGluc3RhbmNlb2YgZXQpcmV0dXJuIFg7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBlLHI9dC5sZW5ndGgsbj0wLGk9dDtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWl0KGlbbl0pO2lmKGUpe2lmKGU9PT1hKWNvbnRpbnVlO2U9VzticmVha31lPWF9cmV0dXJuIFooZXx8VyxyKX1yZXR1cm4gWX1ydC5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDIhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIG9uZSBhcmd1bWVudC5cIik7dmFyIHI9dFsxXTtpZihcIm9iamVjdFwiIT10eXBlb2Ygcnx8QXJyYXkuaXNBcnJheShyKSlyZXR1cm4gZS5lcnJvcihcIkNvbGxhdG9yIG9wdGlvbnMgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3QuXCIpO3ZhciBuPWUucGFyc2Uodm9pZCAwIT09cltcImNhc2Utc2Vuc2l0aXZlXCJdJiZyW1wiY2FzZS1zZW5zaXRpdmVcIl0sMSxIKTtpZighbilyZXR1cm4gbnVsbDt2YXIgaT1lLnBhcnNlKHZvaWQgMCE9PXJbXCJkaWFjcml0aWMtc2Vuc2l0aXZlXCJdJiZyW1wiZGlhY3JpdGljLXNlbnNpdGl2ZVwiXSwxLEgpO2lmKCFpKXJldHVybiBudWxsO3ZhciBhPW51bGw7cmV0dXJuIHIubG9jYWxlJiYhKGE9ZS5wYXJzZShyLmxvY2FsZSwxLHEpKT9udWxsOm5ldyBydChuLGksYSl9LHJ0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGV0KHRoaXMuY2FzZVNlbnNpdGl2ZS5ldmFsdWF0ZSh0KSx0aGlzLmRpYWNyaXRpY1NlbnNpdGl2ZS5ldmFsdWF0ZSh0KSx0aGlzLmxvY2FsZT90aGlzLmxvY2FsZS5ldmFsdWF0ZSh0KTpudWxsKX0scnQucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuY2FzZVNlbnNpdGl2ZSksdCh0aGlzLmRpYWNyaXRpY1NlbnNpdGl2ZSksdGhpcy5sb2NhbGUmJnQodGhpcy5sb2NhbGUpfSxydC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuW3ZvaWQgMF19LHJ0LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdFtcImNhc2Utc2Vuc2l0aXZlXCJdPXRoaXMuY2FzZVNlbnNpdGl2ZS5zZXJpYWxpemUoKSx0W1wiZGlhY3JpdGljLXNlbnNpdGl2ZVwiXT10aGlzLmRpYWNyaXRpY1NlbnNpdGl2ZS5zZXJpYWxpemUoKSx0aGlzLmxvY2FsZSYmKHQubG9jYWxlPXRoaXMubG9jYWxlLnNlcmlhbGl6ZSgpKSxbXCJjb2xsYXRvclwiLHRdfTt2YXIgYXQ9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9dCx0aGlzLnZhbHVlPWV9O2F0LnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYoMiE9PXQubGVuZ3RoKXJldHVybiBlLmVycm9yKFwiJ2xpdGVyYWwnIGV4cHJlc3Npb24gcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIGJ1dCBmb3VuZCBcIisodC5sZW5ndGgtMSkrXCIgaW5zdGVhZC5cIik7aWYoIWZ1bmN0aW9uIHQoZSl7aWYobnVsbD09PWUpcmV0dXJuITA7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuITA7aWYoXCJib29sZWFuXCI9PXR5cGVvZiBlKXJldHVybiEwO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXJldHVybiEwO2lmKGUgaW5zdGFuY2VvZiB0dClyZXR1cm4hMDtpZihlIGluc3RhbmNlb2YgZXQpcmV0dXJuITA7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciByPTAsbj1lO3I8bi5sZW5ndGg7cis9MSlpZighdChuW3JdKSlyZXR1cm4hMTtyZXR1cm4hMH1pZihcIm9iamVjdFwiPT10eXBlb2YgZSl7Zm9yKHZhciBpIGluIGUpaWYoIXQoZVtpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9KHRbMV0pKXJldHVybiBlLmVycm9yKFwiaW52YWxpZCB2YWx1ZVwiKTt2YXIgcj10WzFdLG49aXQociksaT1lLmV4cGVjdGVkVHlwZTtyZXR1cm5cImFycmF5XCIhPT1uLmtpbmR8fDAhPT1uLk58fCFpfHxcImFycmF5XCIhPT1pLmtpbmR8fFwibnVtYmVyXCI9PXR5cGVvZiBpLk4mJjAhPT1pLk58fChuPWkpLG5ldyBhdChuLHIpfSxhdC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZX0sYXQucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbigpe30sYXQucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVyblt0aGlzLnZhbHVlXX0sYXQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblwiYXJyYXlcIj09PXRoaXMudHlwZS5raW5kfHxcIm9iamVjdFwiPT09dGhpcy50eXBlLmtpbmQ/W1wibGl0ZXJhbFwiLHRoaXMudmFsdWVdOnRoaXMudmFsdWUgaW5zdGFuY2VvZiB0dD9bXCJyZ2JhXCJdLmNvbmNhdCh0aGlzLnZhbHVlLnRvQXJyYXkoKSk6dGhpcy52YWx1ZX07dmFyIG90PWZ1bmN0aW9uKHQpe3RoaXMubmFtZT1cIkV4cHJlc3Npb25FdmFsdWF0aW9uRXJyb3JcIix0aGlzLm1lc3NhZ2U9dH07b3QucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2V9O3ZhciBzdD17c3RyaW5nOnEsbnVtYmVyOlUsYm9vbGVhbjpILG9iamVjdDpZfSxsdD1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT10LHRoaXMuYXJncz1lfTtsdC5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDIpcmV0dXJuIGUuZXJyb3IoXCJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuXCIpO2Zvcih2YXIgcj10WzBdLG49c3Rbcl0saT1bXSxhPTE7YTx0Lmxlbmd0aDthKyspe3ZhciBvPWUucGFyc2UodFthXSxhLFcpO2lmKCFvKXJldHVybiBudWxsO2kucHVzaChvKX1yZXR1cm4gbmV3IGx0KG4saSl9LGx0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHRoaXMuYXJncy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLmFyZ3NbZV0uZXZhbHVhdGUodCk7aWYoIUsodGhpcy50eXBlLGl0KHIpKSlyZXR1cm4gcjtpZihlPT09dGhpcy5hcmdzLmxlbmd0aC0xKXRocm93IG5ldyBvdChcIkV4cGVjdGVkIHZhbHVlIHRvIGJlIG9mIHR5cGUgXCIrJCh0aGlzLnR5cGUpK1wiLCBidXQgZm91bmQgXCIrJChpdChyKSkrXCIgaW5zdGVhZC5cIil9cmV0dXJuIG51bGx9LGx0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dGhpcy5hcmdzLmZvckVhY2godCl9LGx0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm4odD1bXSkuY29uY2F0LmFwcGx5KHQsdGhpcy5hcmdzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5wb3NzaWJsZU91dHB1dHMoKX0pKTt2YXIgdH0sbHQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblt0aGlzLnR5cGUua2luZF0uY29uY2F0KHRoaXMuYXJncy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VyaWFsaXplKCl9KSl9O3ZhciBjdD17c3RyaW5nOnEsbnVtYmVyOlUsYm9vbGVhbjpIfSx1dD1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT10LHRoaXMuaW5wdXQ9ZX07dXQucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwyfHx0Lmxlbmd0aD40KXJldHVybiBlLmVycm9yKFwiRXhwZWN0ZWQgMSwgMiwgb3IgMyBhcmd1bWVudHMsIGJ1dCBmb3VuZCBcIisodC5sZW5ndGgtMSkrXCIgaW5zdGVhZC5cIik7dmFyIHIsbjtpZih0Lmxlbmd0aD4yKXt2YXIgaT10WzFdO2lmKFwic3RyaW5nXCIhPXR5cGVvZiBpfHwhKGkgaW4gY3QpKXJldHVybiBlLmVycm9yKCdUaGUgaXRlbSB0eXBlIGFyZ3VtZW50IG9mIFwiYXJyYXlcIiBtdXN0IGJlIG9uZSBvZiBzdHJpbmcsIG51bWJlciwgYm9vbGVhbicsMSk7cj1jdFtpXX1lbHNlIHI9VztpZih0Lmxlbmd0aD4zKXtpZihcIm51bWJlclwiIT10eXBlb2YgdFsyXXx8dFsyXTwwfHx0WzJdIT09TWF0aC5mbG9vcih0WzJdKSlyZXR1cm4gZS5lcnJvcignVGhlIGxlbmd0aCBhcmd1bWVudCB0byBcImFycmF5XCIgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgbGl0ZXJhbCcsMik7bj10WzJdfXZhciBhPVoocixuKSxvPWUucGFyc2UodFt0Lmxlbmd0aC0xXSx0Lmxlbmd0aC0xLFcpO3JldHVybiBvP25ldyB1dChhLG8pOm51bGx9LHV0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlucHV0LmV2YWx1YXRlKHQpO2lmKEsodGhpcy50eXBlLGl0KGUpKSl0aHJvdyBuZXcgb3QoXCJFeHBlY3RlZCB2YWx1ZSB0byBiZSBvZiB0eXBlIFwiKyQodGhpcy50eXBlKStcIiwgYnV0IGZvdW5kIFwiKyQoaXQoZSkpK1wiIGluc3RlYWQuXCIpO3JldHVybiBlfSx1dC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbnB1dCl9LHV0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnB1dC5wb3NzaWJsZU91dHB1dHMoKX0sdXQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PVtcImFycmF5XCJdLGU9dGhpcy50eXBlLml0ZW1UeXBlO2lmKFwic3RyaW5nXCI9PT1lLmtpbmR8fFwibnVtYmVyXCI9PT1lLmtpbmR8fFwiYm9vbGVhblwiPT09ZS5raW5kKXt0LnB1c2goZS5raW5kKTt2YXIgcj10aGlzLnR5cGUuTjtcIm51bWJlclwiPT10eXBlb2YgciYmdC5wdXNoKHIpfXJldHVybiB0LnB1c2godGhpcy5pbnB1dC5zZXJpYWxpemUoKSksdH07dmFyIGh0PXtcInRvLW51bWJlclwiOlUsXCJ0by1jb2xvclwiOkd9LGZ0PWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPXQsdGhpcy5hcmdzPWV9O2Z0LnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MilyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC5cIik7Zm9yKHZhciByPXRbMF0sbj1odFtyXSxpPVtdLGE9MTthPHQubGVuZ3RoO2ErKyl7dmFyIG89ZS5wYXJzZSh0W2FdLGEsVyk7aWYoIW8pcmV0dXJuIG51bGw7aS5wdXNoKG8pfXJldHVybiBuZXcgZnQobixpKX0sZnQucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe2lmKFwiY29sb3JcIj09PXRoaXMudHlwZS5raW5kKXtmb3IodmFyIGUscixuPTAsaT10aGlzLmFyZ3M7bjxpLmxlbmd0aDtuKz0xKWlmKHI9bnVsbCxcInN0cmluZ1wiPT10eXBlb2YoZT1pW25dLmV2YWx1YXRlKHQpKSl7dmFyIGE9dC5wYXJzZUNvbG9yKGUpO2lmKGEpcmV0dXJuIGF9ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpJiYhKHI9ZS5sZW5ndGg8M3x8ZS5sZW5ndGg+ND9cIkludmFsaWQgcmJnYSB2YWx1ZSBcIitKU09OLnN0cmluZ2lmeShlKStcIjogZXhwZWN0ZWQgYW4gYXJyYXkgY29udGFpbmluZyBlaXRoZXIgdGhyZWUgb3IgZm91ciBudW1lcmljIHZhbHVlcy5cIjpudChlWzBdLGVbMV0sZVsyXSxlWzNdKSkpcmV0dXJuIG5ldyB0dChlWzBdLzI1NSxlWzFdLzI1NSxlWzJdLzI1NSxlWzNdKTt0aHJvdyBuZXcgb3Qocnx8XCJDb3VsZCBub3QgcGFyc2UgY29sb3IgZnJvbSB2YWx1ZSAnXCIrKFwic3RyaW5nXCI9PXR5cGVvZiBlP2U6SlNPTi5zdHJpbmdpZnkoZSkpK1wiJ1wiKX1mb3IodmFyIG89bnVsbCxzPTAsbD10aGlzLmFyZ3M7czxsLmxlbmd0aDtzKz0xKWlmKG51bGwhPT0obz1sW3NdLmV2YWx1YXRlKHQpKSl7dmFyIGM9TnVtYmVyKG8pO2lmKCFpc05hTihjKSlyZXR1cm4gY310aHJvdyBuZXcgb3QoXCJDb3VsZCBub3QgY29udmVydCBcIitKU09OLnN0cmluZ2lmeShvKStcIiB0byBudW1iZXIuXCIpfSxmdC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3RoaXMuYXJncy5mb3JFYWNoKHQpfSxmdC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuKHQ9W10pLmNvbmNhdC5hcHBseSh0LHRoaXMuYXJncy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucG9zc2libGVPdXRwdXRzKCl9KSk7dmFyIHR9LGZ0LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD1bXCJ0by1cIit0aGlzLnR5cGUua2luZF07cmV0dXJuIHRoaXMuZWFjaENoaWxkKGZ1bmN0aW9uKGUpe3QucHVzaChlLnNlcmlhbGl6ZSgpKX0pLHR9O3ZhciBwdD1bXCJVbmtub3duXCIsXCJQb2ludFwiLFwiTGluZVN0cmluZ1wiLFwiUG9seWdvblwiXSxkdD1mdW5jdGlvbigpe3RoaXMuX3BhcnNlQ29sb3JDYWNoZT17fX07ZHQucHJvdG90eXBlLmlkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmVhdHVyZSYmXCJpZFwiaW4gdGhpcy5mZWF0dXJlP3RoaXMuZmVhdHVyZS5pZDpudWxsfSxkdC5wcm90b3R5cGUuZ2VvbWV0cnlUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmVhdHVyZT9cIm51bWJlclwiPT10eXBlb2YgdGhpcy5mZWF0dXJlLnR5cGU/cHRbdGhpcy5mZWF0dXJlLnR5cGVdOnRoaXMuZmVhdHVyZS50eXBlOm51bGx9LGR0LnByb3RvdHlwZS5wcm9wZXJ0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmVhdHVyZSYmdGhpcy5mZWF0dXJlLnByb3BlcnRpZXN8fHt9fSxkdC5wcm90b3R5cGUucGFyc2VDb2xvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wYXJzZUNvbG9yQ2FjaGVbdF07cmV0dXJuIGV8fChlPXRoaXMuX3BhcnNlQ29sb3JDYWNoZVt0XT10dC5wYXJzZSh0KSksZX07dmFyIGd0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMubmFtZT10LHRoaXMudHlwZT1lLHRoaXMuX2V2YWx1YXRlPXIsdGhpcy5hcmdzPW59O2Z1bmN0aW9uIHZ0KHQpe2lmKHQgaW5zdGFuY2VvZiBndCl7aWYoXCJnZXRcIj09PXQubmFtZSYmMT09PXQuYXJncy5sZW5ndGgpcmV0dXJuITE7aWYoXCJoYXNcIj09PXQubmFtZSYmMT09PXQuYXJncy5sZW5ndGgpcmV0dXJuITE7aWYoXCJwcm9wZXJ0aWVzXCI9PT10Lm5hbWV8fFwiZ2VvbWV0cnktdHlwZVwiPT09dC5uYW1lfHxcImlkXCI9PT10Lm5hbWUpcmV0dXJuITE7aWYoL15maWx0ZXItLy50ZXN0KHQubmFtZSkpcmV0dXJuITF9dmFyIGU9ITA7cmV0dXJuIHQuZWFjaENoaWxkKGZ1bmN0aW9uKHQpe2UmJiF2dCh0KSYmKGU9ITEpfSksZX1mdW5jdGlvbiBtdCh0LGUpe2lmKHQgaW5zdGFuY2VvZiBndCYmZS5pbmRleE9mKHQubmFtZSk+PTApcmV0dXJuITE7dmFyIHI9ITA7cmV0dXJuIHQuZWFjaENoaWxkKGZ1bmN0aW9uKHQpe3ImJiFtdCh0LGUpJiYocj0hMSl9KSxyfWd0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXZhbHVhdGUodCx0aGlzLmFyZ3MpfSxndC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3RoaXMuYXJncy5mb3JFYWNoKHQpfSxndC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuW3ZvaWQgMF19LGd0LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5uYW1lXS5jb25jYXQodGhpcy5hcmdzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zZXJpYWxpemUoKX0pKX0sZ3QucGFyc2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLG49Z3QuZGVmaW5pdGlvbnNbcl07aWYoIW4pcmV0dXJuIGUuZXJyb3IoJ1Vua25vd24gZXhwcmVzc2lvbiBcIicrcisnXCIuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgW1wibGl0ZXJhbFwiLCBbLi4uXV0uJywwKTtmb3IodmFyIGk9QXJyYXkuaXNBcnJheShuKT9uWzBdOm4udHlwZSxhPUFycmF5LmlzQXJyYXkobik/W1tuWzFdLG5bMl1dXTpuLm92ZXJsb2FkcyxvPWEuZmlsdGVyKGZ1bmN0aW9uKGUpe3ZhciByPWVbMF07cmV0dXJuIUFycmF5LmlzQXJyYXkocil8fHIubGVuZ3RoPT09dC5sZW5ndGgtMX0pLHM9W10sbD0xO2w8dC5sZW5ndGg7bCsrKXt2YXIgYz10W2xdLHU9dm9pZCAwO2lmKDE9PT1vLmxlbmd0aCl7dmFyIGg9b1swXVswXTt1PUFycmF5LmlzQXJyYXkoaCk/aFtsLTFdOmgudHlwZX12YXIgZj1lLnBhcnNlKGMsMStzLmxlbmd0aCx1KTtpZighZilyZXR1cm4gbnVsbDtzLnB1c2goZil9Zm9yKHZhciBwPW51bGwsZD0wLGc9bztkPGcubGVuZ3RoO2QrPTEpe3ZhciB2PWdbZF0sbT12WzBdLHk9dlsxXTtpZihwPW5ldyB4dChlLnJlZ2lzdHJ5LGUucGF0aCxudWxsLGUuc2NvcGUpLEFycmF5LmlzQXJyYXkobSkmJm0ubGVuZ3RoIT09cy5sZW5ndGgpcC5lcnJvcihcIkV4cGVjdGVkIFwiK20ubGVuZ3RoK1wiIGFyZ3VtZW50cywgYnV0IGZvdW5kIFwiK3MubGVuZ3RoK1wiIGluc3RlYWQuXCIpO2Vsc2V7Zm9yKHZhciB4PTA7eDxzLmxlbmd0aDt4Kyspe3ZhciBiPUFycmF5LmlzQXJyYXkobSk/bVt4XTptLnR5cGUsXz1zW3hdO3AuY29uY2F0KHgrMSkuY2hlY2tTdWJ0eXBlKGIsXy50eXBlKX1pZigwPT09cC5lcnJvcnMubGVuZ3RoKXJldHVybiBuZXcgZ3QocixpLHkscyl9fWlmKDE9PT1vLmxlbmd0aCllLmVycm9ycy5wdXNoLmFwcGx5KGUuZXJyb3JzLHAuZXJyb3JzKTtlbHNle3ZhciB3PShvLmxlbmd0aD9vOmEpLm1hcChmdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gZT10WzBdLEFycmF5LmlzQXJyYXkoZSk/XCIoXCIrZS5tYXAoJCkuam9pbihcIiwgXCIpK1wiKVwiOlwiKFwiKyQoZS50eXBlKStcIi4uLilcIn0pLmpvaW4oXCIgfCBcIiksaz1zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gJCh0LnR5cGUpfSkuam9pbihcIiwgXCIpO2UuZXJyb3IoXCJFeHBlY3RlZCBhcmd1bWVudHMgb2YgdHlwZSBcIit3K1wiLCBidXQgZm91bmQgKFwiK2srXCIpIGluc3RlYWQuXCIpfXJldHVybiBudWxsfSxndC5yZWdpc3Rlcj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiBndC5kZWZpbml0aW9ucz1lLGUpdFtyXT1ndH07dmFyIHl0PWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPWUudHlwZSx0aGlzLm5hbWU9dCx0aGlzLmJvdW5kRXhwcmVzc2lvbj1lfTt5dC5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDIhPT10Lmxlbmd0aHx8XCJzdHJpbmdcIiE9dHlwZW9mIHRbMV0pcmV0dXJuIGUuZXJyb3IoXCIndmFyJyBleHByZXNzaW9uIHJlcXVpcmVzIGV4YWN0bHkgb25lIHN0cmluZyBsaXRlcmFsIGFyZ3VtZW50LlwiKTt2YXIgcj10WzFdO3JldHVybiBlLnNjb3BlLmhhcyhyKT9uZXcgeXQocixlLnNjb3BlLmdldChyKSk6ZS5lcnJvcignVW5rbm93biB2YXJpYWJsZSBcIicrcisnXCIuIE1ha2Ugc3VyZSBcIicrcisnXCIgaGFzIGJlZW4gYm91bmQgaW4gYW4gZW5jbG9zaW5nIFwibGV0XCIgZXhwcmVzc2lvbiBiZWZvcmUgdXNpbmcgaXQuJywxKX0seXQucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJvdW5kRXhwcmVzc2lvbi5ldmFsdWF0ZSh0KX0seXQucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbigpe30seXQucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVyblt2b2lkIDBdfSx5dC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuW1widmFyXCIsdGhpcy5uYW1lXX07dmFyIHh0PWZ1bmN0aW9uKHQsZSxyLG4saSl7dm9pZCAwPT09ZSYmKGU9W10pLHZvaWQgMD09PW4mJihuPW5ldyBqKSx2b2lkIDA9PT1pJiYoaT1bXSksdGhpcy5yZWdpc3RyeT10LHRoaXMucGF0aD1lLHRoaXMua2V5PWUubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiW1wiK3QrXCJdXCJ9KS5qb2luKFwiXCIpLHRoaXMuc2NvcGU9bix0aGlzLmVycm9ycz1pLHRoaXMuZXhwZWN0ZWRUeXBlPXJ9O2Z1bmN0aW9uIGJ0KHQsZSl7Zm9yKHZhciByLG4saT0wLGE9dC5sZW5ndGgtMSxvPTA7aTw9YTspe2lmKHI9dFtvPU1hdGguZmxvb3IoKGkrYSkvMildLG49dFtvKzFdLGU9PT1yfHxlPnImJmU8bilyZXR1cm4gbztpZihyPGUpaT1vKzE7ZWxzZXtpZighKHI+ZSkpdGhyb3cgbmV3IG90KFwiSW5wdXQgaXMgbm90IGEgbnVtYmVyLlwiKTthPW8tMX19cmV0dXJuIE1hdGgubWF4KG8tMSwwKX14dC5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdm9pZCAwPT09aSYmKGk9e30pLGU/dGhpcy5jb25jYXQoZSxyLG4pLl9wYXJzZSh0LGkpOnRoaXMuX3BhcnNlKHQsaSl9LHh0LnByb3RvdHlwZS5fcGFyc2U9ZnVuY3Rpb24odCxlKXtpZihudWxsIT09dCYmXCJzdHJpbmdcIiE9dHlwZW9mIHQmJlwiYm9vbGVhblwiIT10eXBlb2YgdCYmXCJudW1iZXJcIiE9dHlwZW9mIHR8fCh0PVtcImxpdGVyYWxcIix0XSksQXJyYXkuaXNBcnJheSh0KSl7aWYoMD09PXQubGVuZ3RoKXJldHVybiB0aGlzLmVycm9yKCdFeHBlY3RlZCBhbiBhcnJheSB3aXRoIGF0IGxlYXN0IG9uZSBlbGVtZW50LiBJZiB5b3Ugd2FudGVkIGEgbGl0ZXJhbCBhcnJheSwgdXNlIFtcImxpdGVyYWxcIiwgW11dLicpO3ZhciByPXRbMF07aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHIpcmV0dXJuIHRoaXMuZXJyb3IoXCJFeHByZXNzaW9uIG5hbWUgbXVzdCBiZSBhIHN0cmluZywgYnV0IGZvdW5kIFwiK3R5cGVvZiByKycgaW5zdGVhZC4gSWYgeW91IHdhbnRlZCBhIGxpdGVyYWwgYXJyYXksIHVzZSBbXCJsaXRlcmFsXCIsIFsuLi5dXS4nLDApLG51bGw7dmFyIG49dGhpcy5yZWdpc3RyeVtyXTtpZihuKXt2YXIgaT1uLnBhcnNlKHQsdGhpcyk7aWYoIWkpcmV0dXJuIG51bGw7aWYodGhpcy5leHBlY3RlZFR5cGUpe3ZhciBhPXRoaXMuZXhwZWN0ZWRUeXBlLG89aS50eXBlO2lmKFwic3RyaW5nXCIhPT1hLmtpbmQmJlwibnVtYmVyXCIhPT1hLmtpbmQmJlwiYm9vbGVhblwiIT09YS5raW5kJiZcIm9iamVjdFwiIT09YS5raW5kfHxcInZhbHVlXCIhPT1vLmtpbmQpaWYoXCJhcnJheVwiPT09YS5raW5kJiZcInZhbHVlXCI9PT1vLmtpbmQpZS5vbWl0VHlwZUFubm90YXRpb25zfHwoaT1uZXcgdXQoYSxpKSk7ZWxzZSBpZihcImNvbG9yXCIhPT1hLmtpbmR8fFwidmFsdWVcIiE9PW8ua2luZCYmXCJzdHJpbmdcIiE9PW8ua2luZCl7aWYodGhpcy5jaGVja1N1YnR5cGUodGhpcy5leHBlY3RlZFR5cGUsaS50eXBlKSlyZXR1cm4gbnVsbH1lbHNlIGUub21pdFR5cGVBbm5vdGF0aW9uc3x8KGk9bmV3IGZ0KGEsW2ldKSk7ZWxzZSBlLm9taXRUeXBlQW5ub3RhdGlvbnN8fChpPW5ldyBsdChhLFtpXSkpfWlmKCEoaSBpbnN0YW5jZW9mIGF0KSYmZnVuY3Rpb24gdChlKXtpZihlIGluc3RhbmNlb2YgeXQpcmV0dXJuIHQoZS5ib3VuZEV4cHJlc3Npb24pO2lmKGUgaW5zdGFuY2VvZiBndCYmXCJlcnJvclwiPT09ZS5uYW1lKXJldHVybiExO2lmKGUgaW5zdGFuY2VvZiBydClyZXR1cm4hMTt2YXIgcj1lIGluc3RhbmNlb2YgZnR8fGUgaW5zdGFuY2VvZiBsdHx8ZSBpbnN0YW5jZW9mIHV0LG49ITA7cmV0dXJuIGUuZWFjaENoaWxkKGZ1bmN0aW9uKGUpe249cj9uJiZ0KGUpOm4mJmUgaW5zdGFuY2VvZiBhdH0pLCEhbiYmKHZ0KGUpJiZtdChlLFtcInpvb21cIixcImhlYXRtYXAtZGVuc2l0eVwiLFwibGluZS1wcm9ncmVzc1wiLFwiaXMtc3VwcG9ydGVkLXNjcmlwdFwiXSkpfShpKSl7dmFyIHM9bmV3IGR0O3RyeXtpPW5ldyBhdChpLnR5cGUsaS5ldmFsdWF0ZShzKSl9Y2F0Y2godCl7cmV0dXJuIHRoaXMuZXJyb3IodC5tZXNzYWdlKSxudWxsfX1yZXR1cm4gaX1yZXR1cm4gdGhpcy5lcnJvcignVW5rbm93biBleHByZXNzaW9uIFwiJytyKydcIi4gSWYgeW91IHdhbnRlZCBhIGxpdGVyYWwgYXJyYXksIHVzZSBbXCJsaXRlcmFsXCIsIFsuLi5dXS4nLDApfXJldHVybiB2b2lkIDA9PT10P3RoaXMuZXJyb3IoXCIndW5kZWZpbmVkJyB2YWx1ZSBpbnZhbGlkLiBVc2UgbnVsbCBpbnN0ZWFkLlwiKTpcIm9iamVjdFwiPT10eXBlb2YgdD90aGlzLmVycm9yKCdCYXJlIG9iamVjdHMgaW52YWxpZC4gVXNlIFtcImxpdGVyYWxcIiwgey4uLn1dIGluc3RlYWQuJyk6dGhpcy5lcnJvcihcIkV4cGVjdGVkIGFuIGFycmF5LCBidXQgZm91bmQgXCIrdHlwZW9mIHQrXCIgaW5zdGVhZC5cIil9LHh0LnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVwibnVtYmVyXCI9PXR5cGVvZiB0P3RoaXMucGF0aC5jb25jYXQodCk6dGhpcy5wYXRoLGk9cj90aGlzLnNjb3BlLmNvbmNhdChyKTp0aGlzLnNjb3BlO3JldHVybiBuZXcgeHQodGhpcy5yZWdpc3RyeSxuLGV8fG51bGwsaSx0aGlzLmVycm9ycyl9LHh0LnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj1hcmd1bWVudHMubGVuZ3RoLTE7ci0tID4wOyllW3JdPWFyZ3VtZW50c1tyKzFdO3ZhciBuPVwiXCIrdGhpcy5rZXkrZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJbXCIrdCtcIl1cIn0pLmpvaW4oXCJcIik7dGhpcy5lcnJvcnMucHVzaChuZXcgTihuLHQpKX0seHQucHJvdG90eXBlLmNoZWNrU3VidHlwZT1mdW5jdGlvbih0LGUpe3ZhciByPUsodCxlKTtyZXR1cm4gciYmdGhpcy5lcnJvcihyKSxyfTt2YXIgX3Q9ZnVuY3Rpb24odCxlLHIpe3RoaXMudHlwZT10LHRoaXMuaW5wdXQ9ZSx0aGlzLmxhYmVscz1bXSx0aGlzLm91dHB1dHM9W107Zm9yKHZhciBuPTAsaT1yO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXSxvPWFbMF0scz1hWzFdO3RoaXMubGFiZWxzLnB1c2gobyksdGhpcy5vdXRwdXRzLnB1c2gocyl9fTtmdW5jdGlvbiB3dCh0LGUscil7cmV0dXJuIHQqKDEtcikrZSpyfV90LnBhcnNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFsxXSxuPXQuc2xpY2UoMik7aWYodC5sZW5ndGgtMTw0KXJldHVybiBlLmVycm9yKFwiRXhwZWN0ZWQgYXQgbGVhc3QgNCBhcmd1bWVudHMsIGJ1dCBmb3VuZCBvbmx5IFwiKyh0Lmxlbmd0aC0xKStcIi5cIik7aWYoKHQubGVuZ3RoLTEpJTIhPTApcmV0dXJuIGUuZXJyb3IoXCJFeHBlY3RlZCBhbiBldmVuIG51bWJlciBvZiBhcmd1bWVudHMuXCIpO2lmKCEocj1lLnBhcnNlKHIsMSxVKSkpcmV0dXJuIG51bGw7dmFyIGk9W10sYT1udWxsO2UuZXhwZWN0ZWRUeXBlJiZcInZhbHVlXCIhPT1lLmV4cGVjdGVkVHlwZS5raW5kJiYoYT1lLmV4cGVjdGVkVHlwZSksbi51bnNoaWZ0KC0xLzApO2Zvcih2YXIgbz0wO288bi5sZW5ndGg7bys9Mil7dmFyIHM9bltvXSxsPW5bbysxXSxjPW8rMSx1PW8rMjtpZihcIm51bWJlclwiIT10eXBlb2YgcylyZXR1cm4gZS5lcnJvcignSW5wdXQvb3V0cHV0IHBhaXJzIGZvciBcInN0ZXBcIiBleHByZXNzaW9ucyBtdXN0IGJlIGRlZmluZWQgdXNpbmcgbGl0ZXJhbCBudW1lcmljIHZhbHVlcyAobm90IGNvbXB1dGVkIGV4cHJlc3Npb25zKSBmb3IgdGhlIGlucHV0IHZhbHVlcy4nLGMpO2lmKGkubGVuZ3RoJiZpW2kubGVuZ3RoLTFdWzBdPj1zKXJldHVybiBlLmVycm9yKCdJbnB1dC9vdXRwdXQgcGFpcnMgZm9yIFwic3RlcFwiIGV4cHJlc3Npb25zIG11c3QgYmUgYXJyYW5nZWQgd2l0aCBpbnB1dCB2YWx1ZXMgaW4gc3RyaWN0bHkgYXNjZW5kaW5nIG9yZGVyLicsYyk7dmFyIGg9ZS5wYXJzZShsLHUsYSk7aWYoIWgpcmV0dXJuIG51bGw7YT1hfHxoLnR5cGUsaS5wdXNoKFtzLGhdKX1yZXR1cm4gbmV3IF90KGEscixpKX0sX3QucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFiZWxzLHI9dGhpcy5vdXRwdXRzO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gclswXS5ldmFsdWF0ZSh0KTt2YXIgbj10aGlzLmlucHV0LmV2YWx1YXRlKHQpO2lmKG48PWVbMF0pcmV0dXJuIHJbMF0uZXZhbHVhdGUodCk7dmFyIGk9ZS5sZW5ndGg7cmV0dXJuIG4+PWVbaS0xXT9yW2ktMV0uZXZhbHVhdGUodCk6cltidChlLG4pXS5ldmFsdWF0ZSh0KX0sX3QucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5wdXQpO2Zvcih2YXIgZT0wLHI9dGhpcy5vdXRwdXRzO2U8ci5sZW5ndGg7ZSs9MSl0KHJbZV0pfSxfdC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuKHQ9W10pLmNvbmNhdC5hcHBseSh0LHRoaXMub3V0cHV0cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucG9zc2libGVPdXRwdXRzKCl9KSk7dmFyIHR9LF90LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W1wic3RlcFwiLHRoaXMuaW5wdXQuc2VyaWFsaXplKCldLGU9MDtlPHRoaXMubGFiZWxzLmxlbmd0aDtlKyspZT4wJiZ0LnB1c2godGhpcy5sYWJlbHNbZV0pLHQucHVzaCh0aGlzLm91dHB1dHNbZV0uc2VyaWFsaXplKCkpO3JldHVybiB0fTt2YXIga3Q9T2JqZWN0LmZyZWV6ZSh7bnVtYmVyOnd0LGNvbG9yOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbmV3IHR0KHd0KHQucixlLnIsciksd3QodC5nLGUuZyxyKSx3dCh0LmIsZS5iLHIpLHd0KHQuYSxlLmEscikpfSxhcnJheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHd0KHQsZVtuXSxyKX0pfX0pLEF0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMudHlwZT10LHRoaXMuaW50ZXJwb2xhdGlvbj1lLHRoaXMuaW5wdXQ9cix0aGlzLmxhYmVscz1bXSx0aGlzLm91dHB1dHM9W107Zm9yKHZhciBpPTAsYT1uO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXSxzPW9bMF0sbD1vWzFdO3RoaXMubGFiZWxzLnB1c2gocyksdGhpcy5vdXRwdXRzLnB1c2gobCl9fTtmdW5jdGlvbiBUdCh0LGUscixuKXt2YXIgaT1uLXIsYT10LXI7cmV0dXJuIDA9PT1pPzA6MT09PWU/YS9pOihNYXRoLnBvdyhlLGEpLTEpLyhNYXRoLnBvdyhlLGkpLTEpfUF0LmludGVycG9sYXRpb25GYWN0b3I9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9MDtpZihcImV4cG9uZW50aWFsXCI9PT10Lm5hbWUpaT1UdChlLHQuYmFzZSxyLG4pO2Vsc2UgaWYoXCJsaW5lYXJcIj09PXQubmFtZSlpPVR0KGUsMSxyLG4pO2Vsc2UgaWYoXCJjdWJpYy1iZXppZXJcIj09PXQubmFtZSl7dmFyIG89dC5jb250cm9sUG9pbnRzO2k9bmV3IGEob1swXSxvWzFdLG9bMl0sb1szXSkuc29sdmUoVHQoZSwxLHIsbikpfXJldHVybiBpfSxBdC5wYXJzZT1mdW5jdGlvbih0LGUpe3ZhciByPXRbMV0sbj10WzJdLGk9dC5zbGljZSgzKTtpZighQXJyYXkuaXNBcnJheShyKXx8MD09PXIubGVuZ3RoKXJldHVybiBlLmVycm9yKFwiRXhwZWN0ZWQgYW4gaW50ZXJwb2xhdGlvbiB0eXBlIGV4cHJlc3Npb24uXCIsMSk7aWYoXCJsaW5lYXJcIj09PXJbMF0pcj17bmFtZTpcImxpbmVhclwifTtlbHNlIGlmKFwiZXhwb25lbnRpYWxcIj09PXJbMF0pe3ZhciBhPXJbMV07aWYoXCJudW1iZXJcIiE9dHlwZW9mIGEpcmV0dXJuIGUuZXJyb3IoXCJFeHBvbmVudGlhbCBpbnRlcnBvbGF0aW9uIHJlcXVpcmVzIGEgbnVtZXJpYyBiYXNlLlwiLDEsMSk7cj17bmFtZTpcImV4cG9uZW50aWFsXCIsYmFzZTphfX1lbHNle2lmKFwiY3ViaWMtYmV6aWVyXCIhPT1yWzBdKXJldHVybiBlLmVycm9yKFwiVW5rbm93biBpbnRlcnBvbGF0aW9uIHR5cGUgXCIrU3RyaW5nKHJbMF0pLDEsMCk7dmFyIG89ci5zbGljZSgxKTtpZig0IT09by5sZW5ndGh8fG8uc29tZShmdW5jdGlvbih0KXtyZXR1cm5cIm51bWJlclwiIT10eXBlb2YgdHx8dDwwfHx0PjF9KSlyZXR1cm4gZS5lcnJvcihcIkN1YmljIGJlemllciBpbnRlcnBvbGF0aW9uIHJlcXVpcmVzIGZvdXIgbnVtZXJpYyBhcmd1bWVudHMgd2l0aCB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAxLlwiLDEpO3I9e25hbWU6XCJjdWJpYy1iZXppZXJcIixjb250cm9sUG9pbnRzOm99fWlmKHQubGVuZ3RoLTE8NClyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIGF0IGxlYXN0IDQgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSBcIisodC5sZW5ndGgtMSkrXCIuXCIpO2lmKCh0Lmxlbmd0aC0xKSUyIT0wKXJldHVybiBlLmVycm9yKFwiRXhwZWN0ZWQgYW4gZXZlbiBudW1iZXIgb2YgYXJndW1lbnRzLlwiKTtpZighKG49ZS5wYXJzZShuLDIsVSkpKXJldHVybiBudWxsO3ZhciBzPVtdLGw9bnVsbDtlLmV4cGVjdGVkVHlwZSYmXCJ2YWx1ZVwiIT09ZS5leHBlY3RlZFR5cGUua2luZCYmKGw9ZS5leHBlY3RlZFR5cGUpO2Zvcih2YXIgYz0wO2M8aS5sZW5ndGg7Yys9Mil7dmFyIHU9aVtjXSxoPWlbYysxXSxmPWMrMyxwPWMrNDtpZihcIm51bWJlclwiIT10eXBlb2YgdSlyZXR1cm4gZS5lcnJvcignSW5wdXQvb3V0cHV0IHBhaXJzIGZvciBcImludGVycG9sYXRlXCIgZXhwcmVzc2lvbnMgbXVzdCBiZSBkZWZpbmVkIHVzaW5nIGxpdGVyYWwgbnVtZXJpYyB2YWx1ZXMgKG5vdCBjb21wdXRlZCBleHByZXNzaW9ucykgZm9yIHRoZSBpbnB1dCB2YWx1ZXMuJyxmKTtpZihzLmxlbmd0aCYmc1tzLmxlbmd0aC0xXVswXT49dSlyZXR1cm4gZS5lcnJvcignSW5wdXQvb3V0cHV0IHBhaXJzIGZvciBcImludGVycG9sYXRlXCIgZXhwcmVzc2lvbnMgbXVzdCBiZSBhcnJhbmdlZCB3aXRoIGlucHV0IHZhbHVlcyBpbiBzdHJpY3RseSBhc2NlbmRpbmcgb3JkZXIuJyxmKTt2YXIgZD1lLnBhcnNlKGgscCxsKTtpZighZClyZXR1cm4gbnVsbDtsPWx8fGQudHlwZSxzLnB1c2goW3UsZF0pfXJldHVyblwibnVtYmVyXCI9PT1sLmtpbmR8fFwiY29sb3JcIj09PWwua2luZHx8XCJhcnJheVwiPT09bC5raW5kJiZcIm51bWJlclwiPT09bC5pdGVtVHlwZS5raW5kJiZcIm51bWJlclwiPT10eXBlb2YgbC5OP25ldyBBdChsLHIsbixzKTplLmVycm9yKFwiVHlwZSBcIiskKGwpK1wiIGlzIG5vdCBpbnRlcnBvbGF0YWJsZS5cIil9LEF0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhYmVscyxyPXRoaXMub3V0cHV0cztpZigxPT09ZS5sZW5ndGgpcmV0dXJuIHJbMF0uZXZhbHVhdGUodCk7dmFyIG49dGhpcy5pbnB1dC5ldmFsdWF0ZSh0KTtpZihuPD1lWzBdKXJldHVybiByWzBdLmV2YWx1YXRlKHQpO3ZhciBpPWUubGVuZ3RoO2lmKG4+PWVbaS0xXSlyZXR1cm4gcltpLTFdLmV2YWx1YXRlKHQpO3ZhciBhPWJ0KGUsbiksbz1lW2FdLHM9ZVthKzFdLGw9QXQuaW50ZXJwb2xhdGlvbkZhY3Rvcih0aGlzLmludGVycG9sYXRpb24sbixvLHMpLGM9clthXS5ldmFsdWF0ZSh0KSx1PXJbYSsxXS5ldmFsdWF0ZSh0KTtyZXR1cm4ga3RbdGhpcy50eXBlLmtpbmQudG9Mb3dlckNhc2UoKV0oYyx1LGwpfSxBdC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbnB1dCk7Zm9yKHZhciBlPTAscj10aGlzLm91dHB1dHM7ZTxyLmxlbmd0aDtlKz0xKXQocltlXSl9LEF0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm4odD1bXSkuY29uY2F0LmFwcGx5KHQsdGhpcy5vdXRwdXRzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5wb3NzaWJsZU91dHB1dHMoKX0pKTt2YXIgdH0sQXQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD1bXCJpbnRlcnBvbGF0ZVwiLFwibGluZWFyXCI9PT10aGlzLmludGVycG9sYXRpb24ubmFtZT9bXCJsaW5lYXJcIl06XCJleHBvbmVudGlhbFwiPT09dGhpcy5pbnRlcnBvbGF0aW9uLm5hbWU/MT09PXRoaXMuaW50ZXJwb2xhdGlvbi5iYXNlP1tcImxpbmVhclwiXTpbXCJleHBvbmVudGlhbFwiLHRoaXMuaW50ZXJwb2xhdGlvbi5iYXNlXTpbXCJjdWJpYy1iZXppZXJcIl0uY29uY2F0KHRoaXMuaW50ZXJwb2xhdGlvbi5jb250cm9sUG9pbnRzKSx0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXSxlPTA7ZTx0aGlzLmxhYmVscy5sZW5ndGg7ZSsrKXQucHVzaCh0aGlzLmxhYmVsc1tlXSx0aGlzLm91dHB1dHNbZV0uc2VyaWFsaXplKCkpO3JldHVybiB0fTt2YXIgTXQ9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9dCx0aGlzLmFyZ3M9ZX07TXQucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwyKXJldHVybiBlLmVycm9yKFwiRXhwZWN0ZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LlwiKTt2YXIgcj1udWxsLG49ZS5leHBlY3RlZFR5cGU7biYmXCJ2YWx1ZVwiIT09bi5raW5kJiYocj1uKTtmb3IodmFyIGk9W10sYT0wLG89dC5zbGljZSgxKTthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV0sbD1lLnBhcnNlKHMsMStpLmxlbmd0aCxyLHZvaWQgMCx7b21pdFR5cGVBbm5vdGF0aW9uczohMH0pO2lmKCFsKXJldHVybiBudWxsO3I9cnx8bC50eXBlLGkucHVzaChsKX12YXIgYz1uJiZpLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIEsobix0LnR5cGUpfSk7cmV0dXJuIG5ldyBNdChjP1c6cixpKX0sTXQucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1udWxsLHI9MCxuPXRoaXMuYXJncztyPG4ubGVuZ3RoJiZudWxsPT09KGU9bltyXS5ldmFsdWF0ZSh0KSk7cis9MSk7cmV0dXJuIGV9LE10LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dGhpcy5hcmdzLmZvckVhY2godCl9LE10LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm4odD1bXSkuY29uY2F0LmFwcGx5KHQsdGhpcy5hcmdzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5wb3NzaWJsZU91dHB1dHMoKX0pKTt2YXIgdH0sTXQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PVtcImNvYWxlc2NlXCJdO3JldHVybiB0aGlzLmVhY2hDaGlsZChmdW5jdGlvbihlKXt0LnB1c2goZS5zZXJpYWxpemUoKSl9KSx0fTt2YXIgU3Q9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9ZS50eXBlLHRoaXMuYmluZGluZ3M9W10uY29uY2F0KHQpLHRoaXMucmVzdWx0PWV9O1N0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZXN1bHQuZXZhbHVhdGUodCl9LFN0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10aGlzLmJpbmRpbmdzO2U8ci5sZW5ndGg7ZSs9MSl0KHJbZV1bMV0pO3QodGhpcy5yZXN1bHQpfSxTdC5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDQpcmV0dXJuIGUuZXJyb3IoXCJFeHBlY3RlZCBhdCBsZWFzdCAzIGFyZ3VtZW50cywgYnV0IGZvdW5kIFwiKyh0Lmxlbmd0aC0xKStcIiBpbnN0ZWFkLlwiKTtmb3IodmFyIHI9W10sbj0xO248dC5sZW5ndGgtMTtuKz0yKXt2YXIgaT10W25dO2lmKFwic3RyaW5nXCIhPXR5cGVvZiBpKXJldHVybiBlLmVycm9yKFwiRXhwZWN0ZWQgc3RyaW5nLCBidXQgZm91bmQgXCIrdHlwZW9mIGkrXCIgaW5zdGVhZC5cIixuKTtpZigvW15hLXpBLVowLTlfXS8udGVzdChpKSlyZXR1cm4gZS5lcnJvcihcIlZhcmlhYmxlIG5hbWVzIG11c3QgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIG9yICdfJy5cIixuKTt2YXIgYT1lLnBhcnNlKHRbbisxXSxuKzEpO2lmKCFhKXJldHVybiBudWxsO3IucHVzaChbaSxhXSl9dmFyIG89ZS5wYXJzZSh0W3QubGVuZ3RoLTFdLHQubGVuZ3RoLTEsdm9pZCAwLHIpO3JldHVybiBvP25ldyBTdChyLG8pOm51bGx9LFN0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXN1bHQucG9zc2libGVPdXRwdXRzKCl9LFN0LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W1wibGV0XCJdLGU9MCxyPXRoaXMuYmluZGluZ3M7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9blswXSxhPW5bMV07dC5wdXNoKGksYS5zZXJpYWxpemUoKSl9cmV0dXJuIHQucHVzaCh0aGlzLnJlc3VsdC5zZXJpYWxpemUoKSksdH07dmFyIEV0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnR5cGU9dCx0aGlzLmluZGV4PWUsdGhpcy5pbnB1dD1yfTtFdC5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDMhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIDIgYXJndW1lbnRzLCBidXQgZm91bmQgXCIrKHQubGVuZ3RoLTEpK1wiIGluc3RlYWQuXCIpO3ZhciByPWUucGFyc2UodFsxXSwxLFUpLG49ZS5wYXJzZSh0WzJdLDIsWihlLmV4cGVjdGVkVHlwZXx8VykpO2lmKCFyfHwhbilyZXR1cm4gbnVsbDt2YXIgaT1uLnR5cGU7cmV0dXJuIG5ldyBFdChpLml0ZW1UeXBlLHIsbil9LEV0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmluZGV4LmV2YWx1YXRlKHQpLHI9dGhpcy5pbnB1dC5ldmFsdWF0ZSh0KTtpZihlPDApdGhyb3cgbmV3IG90KFwiQXJyYXkgaW5kZXggb3V0IG9mIGJvdW5kczogXCIrZStcIiA8IDAuXCIpO2lmKGU+PXIubGVuZ3RoKXRocm93IG5ldyBvdChcIkFycmF5IGluZGV4IG91dCBvZiBib3VuZHM6IFwiK2UrXCIgPiBcIisoci5sZW5ndGgtMSkrXCIuXCIpO2lmKGUhPT1NYXRoLmZsb29yKGUpKXRocm93IG5ldyBvdChcIkFycmF5IGluZGV4IG11c3QgYmUgYW4gaW50ZWdlciwgYnV0IGZvdW5kIFwiK2UrXCIgaW5zdGVhZC5cIik7cmV0dXJuIHJbZV19LEV0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmluZGV4KSx0KHRoaXMuaW5wdXQpfSxFdC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuW3ZvaWQgMF19LEV0LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm5bXCJhdFwiLHRoaXMuaW5kZXguc2VyaWFsaXplKCksdGhpcy5pbnB1dC5zZXJpYWxpemUoKV19O3ZhciBDdD1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5pbnB1dFR5cGU9dCx0aGlzLnR5cGU9ZSx0aGlzLmlucHV0PXIsdGhpcy5jYXNlcz1uLHRoaXMub3V0cHV0cz1pLHRoaXMub3RoZXJ3aXNlPWF9O0N0LnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8NSlyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIGF0IGxlYXN0IDQgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSBcIisodC5sZW5ndGgtMSkrXCIuXCIpO2lmKHQubGVuZ3RoJTIhPTEpcmV0dXJuIGUuZXJyb3IoXCJFeHBlY3RlZCBhbiBldmVuIG51bWJlciBvZiBhcmd1bWVudHMuXCIpO3ZhciByLG47ZS5leHBlY3RlZFR5cGUmJlwidmFsdWVcIiE9PWUuZXhwZWN0ZWRUeXBlLmtpbmQmJihuPWUuZXhwZWN0ZWRUeXBlKTtmb3IodmFyIGk9e30sYT1bXSxvPTI7bzx0Lmxlbmd0aC0xO28rPTIpe3ZhciBzPXRbb10sbD10W28rMV07QXJyYXkuaXNBcnJheShzKXx8KHM9W3NdKTt2YXIgYz1lLmNvbmNhdChvKTtpZigwPT09cy5sZW5ndGgpcmV0dXJuIGMuZXJyb3IoXCJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYnJhbmNoIGxhYmVsLlwiKTtmb3IodmFyIHU9MCxoPXM7dTxoLmxlbmd0aDt1Kz0xKXt2YXIgZj1oW3VdO2lmKFwibnVtYmVyXCIhPXR5cGVvZiBmJiZcInN0cmluZ1wiIT10eXBlb2YgZilyZXR1cm4gYy5lcnJvcihcIkJyYW5jaCBsYWJlbHMgbXVzdCBiZSBudW1iZXJzIG9yIHN0cmluZ3MuXCIpO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBmJiZNYXRoLmFicyhmKT5OdW1iZXIuTUFYX1NBRkVfSU5URUdFUilyZXR1cm4gYy5lcnJvcihcIkJyYW5jaCBsYWJlbHMgbXVzdCBiZSBpbnRlZ2VycyBubyBsYXJnZXIgdGhhbiBcIitOdW1iZXIuTUFYX1NBRkVfSU5URUdFUitcIi5cIik7aWYoXCJudW1iZXJcIj09dHlwZW9mIGYmJk1hdGguZmxvb3IoZikhPT1mKXJldHVybiBjLmVycm9yKFwiTnVtZXJpYyBicmFuY2ggbGFiZWxzIG11c3QgYmUgaW50ZWdlciB2YWx1ZXMuXCIpO2lmKHIpe2lmKGMuY2hlY2tTdWJ0eXBlKHIsaXQoZikpKXJldHVybiBudWxsfWVsc2Ugcj1pdChmKTtpZih2b2lkIDAhPT1pW1N0cmluZyhmKV0pcmV0dXJuIGMuZXJyb3IoXCJCcmFuY2ggbGFiZWxzIG11c3QgYmUgdW5pcXVlLlwiKTtpW1N0cmluZyhmKV09YS5sZW5ndGh9dmFyIHA9ZS5wYXJzZShsLG8sbik7aWYoIXApcmV0dXJuIG51bGw7bj1ufHxwLnR5cGUsYS5wdXNoKHApfXZhciBkPWUucGFyc2UodFsxXSwxLHIpO2lmKCFkKXJldHVybiBudWxsO3ZhciBnPWUucGFyc2UodFt0Lmxlbmd0aC0xXSx0Lmxlbmd0aC0xLG4pO3JldHVybiBnP25ldyBDdChyLG4sZCxpLGEsZyk6bnVsbH0sQ3QucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5wdXQuZXZhbHVhdGUodCk7cmV0dXJuKHRoaXMub3V0cHV0c1t0aGlzLmNhc2VzW2VdXXx8dGhpcy5vdGhlcndpc2UpLmV2YWx1YXRlKHQpfSxDdC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbnB1dCksdGhpcy5vdXRwdXRzLmZvckVhY2godCksdCh0aGlzLm90aGVyd2lzZSl9LEN0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm4odD1bXSkuY29uY2F0LmFwcGx5KHQsdGhpcy5vdXRwdXRzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5wb3NzaWJsZU91dHB1dHMoKX0pKS5jb25jYXQodGhpcy5vdGhlcndpc2UucG9zc2libGVPdXRwdXRzKCkpO3ZhciB0fSxDdC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1bXCJtYXRjaFwiLHRoaXMuaW5wdXQuc2VyaWFsaXplKCldLHI9W10sbj17fSxpPTAsYT1PYmplY3Qua2V5cyh0aGlzLmNhc2VzKS5zb3J0KCk7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldLHM9blt0LmNhc2VzW29dXTt2b2lkIDA9PT1zPyhuW3QuY2FzZXNbb11dPXIubGVuZ3RoLHIucHVzaChbdC5jYXNlc1tvXSxbb11dKSk6cltzXVsxXS5wdXNoKG8pfWZvcih2YXIgbD1mdW5jdGlvbihlKXtyZXR1cm5cIm51bWJlclwiPT09dC5pbnB1dC50eXBlLmtpbmQ/TnVtYmVyKGUpOmV9LGM9MCx1PXI7Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgaD11W2NdLGY9aFswXSxwPWhbMV07MT09PXAubGVuZ3RoP2UucHVzaChsKHBbMF0pKTplLnB1c2gocC5tYXAobCkpLGUucHVzaCh0Lm91dHB1dHNbZl0uc2VyaWFsaXplKCkpfXJldHVybiBlLnB1c2godGhpcy5vdGhlcndpc2Uuc2VyaWFsaXplKCkpLGV9O3ZhciBMdD1mdW5jdGlvbih0LGUscil7dGhpcy50eXBlPXQsdGhpcy5icmFuY2hlcz1lLHRoaXMub3RoZXJ3aXNlPXJ9O2Z1bmN0aW9uIHp0KHQpe3JldHVyblwic3RyaW5nXCI9PT10LmtpbmR8fFwibnVtYmVyXCI9PT10LmtpbmR8fFwiYm9vbGVhblwiPT09dC5raW5kfHxcIm51bGxcIj09PXQua2luZH1mdW5jdGlvbiBPdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe2Z1bmN0aW9uIHIodCxlLHIpe3RoaXMudHlwZT1ILHRoaXMubGhzPXQsdGhpcy5yaHM9ZSx0aGlzLmNvbGxhdG9yPXJ9cmV0dXJuIHIucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigzIT09dC5sZW5ndGgmJjQhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIHR3byBvciB0aHJlZSBhcmd1bWVudHMuXCIpO3ZhciBuPWUucGFyc2UodFsxXSwxLFcpO2lmKCFuKXJldHVybiBudWxsO3ZhciBpPWUucGFyc2UodFsyXSwyLFcpO2lmKCFpKXJldHVybiBudWxsO2lmKCF6dChuLnR5cGUpJiYhenQoaS50eXBlKSlyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudCB0byBiZSBhIHN0cmluZywgbnVtYmVyLCBib29sZWFuLCBvciBudWxsLCBidXQgZm91bmQgKFwiKyQobi50eXBlKStcIiwgXCIrJChpLnR5cGUpK1wiKSBpbnN0ZWFkLlwiKTtpZihuLnR5cGUua2luZCE9PWkudHlwZS5raW5kJiZcInZhbHVlXCIhPT1uLnR5cGUua2luZCYmXCJ2YWx1ZVwiIT09aS50eXBlLmtpbmQpcmV0dXJuIGUuZXJyb3IoXCJDYW5ub3QgY29tcGFyZSBcIiskKG4udHlwZSkrXCIgYW5kIFwiKyQoaS50eXBlKStcIi5cIik7dmFyIGE9bnVsbDtpZig0PT09dC5sZW5ndGgpe2lmKFwic3RyaW5nXCIhPT1uLnR5cGUua2luZCYmXCJzdHJpbmdcIiE9PWkudHlwZS5raW5kKXJldHVybiBlLmVycm9yKFwiQ2Fubm90IHVzZSBjb2xsYXRvciB0byBjb21wYXJlIG5vbi1zdHJpbmcgdHlwZXMuXCIpO2lmKCEoYT1lLnBhcnNlKHRbM10sMyxYKSkpcmV0dXJuIG51bGx9cmV0dXJuIG5ldyByKG4saSxhKX0sci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5jb2xsYXRvcj8wPT09dGhpcy5jb2xsYXRvci5ldmFsdWF0ZSh0KS5jb21wYXJlKHRoaXMubGhzLmV2YWx1YXRlKHQpLHRoaXMucmhzLmV2YWx1YXRlKHQpKTp0aGlzLmxocy5ldmFsdWF0ZSh0KT09PXRoaXMucmhzLmV2YWx1YXRlKHQpO3JldHVybiBlPyFyOnJ9LHIucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMubGhzKSx0KHRoaXMucmhzKSx0aGlzLmNvbGxhdG9yJiZ0KHRoaXMuY29sbGF0b3IpfSxyLnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm5bITAsITFdfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgZT1bdF07cmV0dXJuIHRoaXMuZWFjaENoaWxkKGZ1bmN0aW9uKHQpe2UucHVzaCh0LnNlcmlhbGl6ZSgpKX0pLGV9LHJ9KCl9THQucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDw0KXJldHVybiBlLmVycm9yKFwiRXhwZWN0ZWQgYXQgbGVhc3QgMyBhcmd1bWVudHMsIGJ1dCBmb3VuZCBvbmx5IFwiKyh0Lmxlbmd0aC0xKStcIi5cIik7aWYodC5sZW5ndGglMiE9MClyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIGFuIG9kZCBudW1iZXIgb2YgYXJndW1lbnRzLlwiKTt2YXIgcjtlLmV4cGVjdGVkVHlwZSYmXCJ2YWx1ZVwiIT09ZS5leHBlY3RlZFR5cGUua2luZCYmKHI9ZS5leHBlY3RlZFR5cGUpO2Zvcih2YXIgbj1bXSxpPTE7aTx0Lmxlbmd0aC0xO2krPTIpe3ZhciBhPWUucGFyc2UodFtpXSxpLEgpO2lmKCFhKXJldHVybiBudWxsO3ZhciBvPWUucGFyc2UodFtpKzFdLGkrMSxyKTtpZighbylyZXR1cm4gbnVsbDtuLnB1c2goW2Esb10pLHI9cnx8by50eXBlfXZhciBzPWUucGFyc2UodFt0Lmxlbmd0aC0xXSx0Lmxlbmd0aC0xLHIpO3JldHVybiBzP25ldyBMdChyLG4scyk6bnVsbH0sTHQucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dGhpcy5icmFuY2hlcztlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0saT1uWzBdLGE9blsxXTtpZihpLmV2YWx1YXRlKHQpKXJldHVybiBhLmV2YWx1YXRlKHQpfXJldHVybiB0aGlzLm90aGVyd2lzZS5ldmFsdWF0ZSh0KX0sTHQucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRoaXMuYnJhbmNoZXM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9blswXSxhPW5bMV07dChpKSx0KGEpfXQodGhpcy5vdGhlcndpc2UpfSxMdC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuKHQ9W10pLmNvbmNhdC5hcHBseSh0LHRoaXMuYnJhbmNoZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLHRbMV0ucG9zc2libGVPdXRwdXRzKCl9KSkuY29uY2F0KHRoaXMub3RoZXJ3aXNlLnBvc3NpYmxlT3V0cHV0cygpKTt2YXIgdH0sTHQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PVtcImNhc2VcIl07cmV0dXJuIHRoaXMuZWFjaENoaWxkKGZ1bmN0aW9uKGUpe3QucHVzaChlLnNlcmlhbGl6ZSgpKX0pLHR9O3ZhciBJdD1PdChcIj09XCIsITEpLER0PU90KFwiIT1cIiwhMCksUHQ9ZnVuY3Rpb24odCl7dGhpcy50eXBlPVUsdGhpcy5pbnB1dD10fTtQdC5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDIhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIDEgYXJndW1lbnQsIGJ1dCBmb3VuZCBcIisodC5sZW5ndGgtMSkrXCIgaW5zdGVhZC5cIik7dmFyIHI9ZS5wYXJzZSh0WzFdLDEpO3JldHVybiByP1wiYXJyYXlcIiE9PXIudHlwZS5raW5kJiZcInN0cmluZ1wiIT09ci50eXBlLmtpbmQmJlwidmFsdWVcIiE9PXIudHlwZS5raW5kP2UuZXJyb3IoXCJFeHBlY3RlZCBhcmd1bWVudCBvZiB0eXBlIHN0cmluZyBvciBhcnJheSwgYnV0IGZvdW5kIFwiKyQoci50eXBlKStcIiBpbnN0ZWFkLlwiKTpuZXcgUHQocik6bnVsbH0sUHQucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5wdXQuZXZhbHVhdGUodCk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIGUubGVuZ3RoO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGUubGVuZ3RoO3Rocm93IG5ldyBvdChcIkV4cGVjdGVkIHZhbHVlIHRvIGJlIG9mIHR5cGUgc3RyaW5nIG9yIGFycmF5LCBidXQgZm91bmQgXCIrJChpdChlKSkrXCIgaW5zdGVhZC5cIil9LFB0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmlucHV0KX0sUHQucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVyblt2b2lkIDBdfSxQdC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9W1wibGVuZ3RoXCJdO3JldHVybiB0aGlzLmVhY2hDaGlsZChmdW5jdGlvbihlKXt0LnB1c2goZS5zZXJpYWxpemUoKSl9KSx0fTt2YXIgUnQ9e1wiPT1cIjpJdCxcIiE9XCI6RHQsYXJyYXk6dXQsYXQ6RXQsYm9vbGVhbjpsdCxjYXNlOkx0LGNvYWxlc2NlOk10LGNvbGxhdG9yOnJ0LGludGVycG9sYXRlOkF0LGxlbmd0aDpQdCxsZXQ6U3QsbGl0ZXJhbDphdCxtYXRjaDpDdCxudW1iZXI6bHQsb2JqZWN0Omx0LHN0ZXA6X3Qsc3RyaW5nOmx0LFwidG8tY29sb3JcIjpmdCxcInRvLW51bWJlclwiOmZ0LHZhcjp5dH07ZnVuY3Rpb24gRnQodCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdO3I9ci5ldmFsdWF0ZSh0KSxuPW4uZXZhbHVhdGUodCksaT1pLmV2YWx1YXRlKHQpO3ZhciBvPWE/YS5ldmFsdWF0ZSh0KToxLHM9bnQocixuLGksbyk7aWYocyl0aHJvdyBuZXcgb3Qocyk7cmV0dXJuIG5ldyB0dChyLzI1NSpvLG4vMjU1Km8saS8yNTUqbyxvKX1mdW5jdGlvbiBCdCh0LGUpe3JldHVybiB0IGluIGV9ZnVuY3Rpb24gTnQodCxlKXt2YXIgcj1lW3RdO3JldHVybiB2b2lkIDA9PT1yP251bGw6cn1mdW5jdGlvbiBqdCh0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiByLmV2YWx1YXRlKHQpPG4uZXZhbHVhdGUodCl9ZnVuY3Rpb24gVnQodCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KT5uLmV2YWx1YXRlKHQpfWZ1bmN0aW9uIFV0KHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCk8PW4uZXZhbHVhdGUodCl9ZnVuY3Rpb24gcXQodCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KT49bi5ldmFsdWF0ZSh0KX1mdW5jdGlvbiBIdCh0KXtyZXR1cm57dHlwZTp0fX1mdW5jdGlvbiBHdCh0KXtyZXR1cm57cmVzdWx0Olwic3VjY2Vzc1wiLHZhbHVlOnR9fWZ1bmN0aW9uIFl0KHQpe3JldHVybntyZXN1bHQ6XCJlcnJvclwiLHZhbHVlOnR9fWd0LnJlZ2lzdGVyKFJ0LHtlcnJvcjpbe2tpbmQ6XCJlcnJvclwifSxbcV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3Rocm93IG5ldyBvdChyLmV2YWx1YXRlKHQpKX1dLHR5cGVvZjpbcSxbV10sZnVuY3Rpb24odCxlKXtyZXR1cm4gJChpdChlWzBdLmV2YWx1YXRlKHQpKSl9XSxcInRvLXN0cmluZ1wiOltxLFtXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj10eXBlb2Yocj1yLmV2YWx1YXRlKHQpKTtyZXR1cm4gbnVsbD09PXI/XCJcIjpcInN0cmluZ1wiPT09bnx8XCJudW1iZXJcIj09PW58fFwiYm9vbGVhblwiPT09bj9TdHJpbmcocik6ciBpbnN0YW5jZW9mIHR0P3IudG9TdHJpbmcoKTpKU09OLnN0cmluZ2lmeShyKX1dLFwidG8tYm9vbGVhblwiOltILFtXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIEJvb2xlYW4oci5ldmFsdWF0ZSh0KSl9XSxcInRvLXJnYmFcIjpbWihVLDQpLFtHXSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLmV2YWx1YXRlKHQpLnRvQXJyYXkoKX1dLHJnYjpbRyxbVSxVLFVdLEZ0XSxyZ2JhOltHLFtVLFUsVSxVXSxGdF0saGFzOnt0eXBlOkgsb3ZlcmxvYWRzOltbW3FdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEJ0KGVbMF0uZXZhbHVhdGUodCksdC5wcm9wZXJ0aWVzKCkpfV0sW1txLFldLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIEJ0KHIuZXZhbHVhdGUodCksbi5ldmFsdWF0ZSh0KSl9XV19LGdldDp7dHlwZTpXLG92ZXJsb2FkczpbW1txXSxmdW5jdGlvbih0LGUpe3JldHVybiBOdChlWzBdLmV2YWx1YXRlKHQpLHQucHJvcGVydGllcygpKX1dLFtbcSxZXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiBOdChyLmV2YWx1YXRlKHQpLG4uZXZhbHVhdGUodCkpfV1dfSxwcm9wZXJ0aWVzOltZLFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0LnByb3BlcnRpZXMoKX1dLFwiZ2VvbWV0cnktdHlwZVwiOltxLFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdlb21ldHJ5VHlwZSgpfV0saWQ6W1csW10sZnVuY3Rpb24odCl7cmV0dXJuIHQuaWQoKX1dLHpvb206W1UsW10sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2xvYmFscy56b29tfV0sXCJoZWF0bWFwLWRlbnNpdHlcIjpbVSxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nbG9iYWxzLmhlYXRtYXBEZW5zaXR5fHwwfV0sXCJsaW5lLXByb2dyZXNzXCI6W1UsW10sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2xvYmFscy5saW5lUHJvZ3Jlc3N8fDB9XSxcIitcIjpbVSxIdChVKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXIrPWlbbl0uZXZhbHVhdGUodCk7cmV0dXJuIHJ9XSxcIipcIjpbVSxIdChVKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xLG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXIqPWlbbl0uZXZhbHVhdGUodCk7cmV0dXJuIHJ9XSxcIi1cIjp7dHlwZTpVLG92ZXJsb2FkczpbW1tVLFVdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCktbi5ldmFsdWF0ZSh0KX1dLFtbVV0sZnVuY3Rpb24odCxlKXtyZXR1cm4tZVswXS5ldmFsdWF0ZSh0KX1dXX0sXCIvXCI6W1UsW1UsVV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KS9uLmV2YWx1YXRlKHQpfV0sXCIlXCI6W1UsW1UsVV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KSVuLmV2YWx1YXRlKHQpfV0sbG4yOltVLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguTE4yfV0scGk6W1UsW10sZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5QSX1dLGU6W1UsW10sZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5FfV0sXCJeXCI6W1UsW1UsVV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gTWF0aC5wb3coci5ldmFsdWF0ZSh0KSxuLmV2YWx1YXRlKHQpKX1dLHNxcnQ6W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5zcXJ0KHIuZXZhbHVhdGUodCkpfV0sbG9nMTA6W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5sb2cxMChyLmV2YWx1YXRlKHQpKX1dLGxuOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGgubG9nKHIuZXZhbHVhdGUodCkpfV0sbG9nMjpbVSxbVV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmxvZzIoci5ldmFsdWF0ZSh0KSl9XSxzaW46W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5zaW4oci5ldmFsdWF0ZSh0KSl9XSxjb3M6W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5jb3Moci5ldmFsdWF0ZSh0KSl9XSx0YW46W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC50YW4oci5ldmFsdWF0ZSh0KSl9XSxhc2luOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguYXNpbihyLmV2YWx1YXRlKHQpKX1dLGFjb3M6W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5hY29zKHIuZXZhbHVhdGUodCkpfV0sYXRhbjpbVSxbVV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmF0YW4oci5ldmFsdWF0ZSh0KSl9XSxtaW46W1UsSHQoVSksZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5taW4uYXBwbHkoTWF0aCxlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5ldmFsdWF0ZSh0KX0pKX1dLG1heDpbVSxIdChVKSxmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heC5hcHBseShNYXRoLGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmV2YWx1YXRlKHQpfSkpfV0sYWJzOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguYWJzKHIuZXZhbHVhdGUodCkpfV0scm91bmQ6W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS5ldmFsdWF0ZSh0KTtyZXR1cm4gcjwwPy1NYXRoLnJvdW5kKC1yKTpNYXRoLnJvdW5kKHIpfV0sZmxvb3I6W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5mbG9vcihyLmV2YWx1YXRlKHQpKX1dLGNlaWw6W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5jZWlsKHIuZXZhbHVhdGUodCkpfV0sXCJmaWx0ZXItPT1cIjpbSCxbcSxXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiB0LnByb3BlcnRpZXMoKVtyLnZhbHVlXT09PW4udmFsdWV9XSxcImZpbHRlci1pZC09PVwiOltILFtXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIHQuaWQoKT09PXIudmFsdWV9XSxcImZpbHRlci10eXBlLT09XCI6W0gsW3FdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gdC5nZW9tZXRyeVR5cGUoKT09PXIudmFsdWV9XSxcImZpbHRlci08XCI6W0gsW3EsV10sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPXQucHJvcGVydGllcygpW3IudmFsdWVdLGE9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIGk9PXR5cGVvZiBhJiZpPGF9XSxcImZpbHRlci1pZC08XCI6W0gsW1ddLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPXQuaWQoKSxpPXIudmFsdWU7cmV0dXJuIHR5cGVvZiBuPT10eXBlb2YgaSYmbjxpfV0sXCJmaWx0ZXItPlwiOltILFtxLFddLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT10LnByb3BlcnRpZXMoKVtyLnZhbHVlXSxhPW4udmFsdWU7cmV0dXJuIHR5cGVvZiBpPT10eXBlb2YgYSYmaT5hfV0sXCJmaWx0ZXItaWQtPlwiOltILFtXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj10LmlkKCksaT1yLnZhbHVlO3JldHVybiB0eXBlb2Ygbj09dHlwZW9mIGkmJm4+aX1dLFwiZmlsdGVyLTw9XCI6W0gsW3EsV10sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPXQucHJvcGVydGllcygpW3IudmFsdWVdLGE9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIGk9PXR5cGVvZiBhJiZpPD1hfV0sXCJmaWx0ZXItaWQtPD1cIjpbSCxbV10sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49dC5pZCgpLGk9ci52YWx1ZTtyZXR1cm4gdHlwZW9mIG49PXR5cGVvZiBpJiZuPD1pfV0sXCJmaWx0ZXItPj1cIjpbSCxbcSxXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9dC5wcm9wZXJ0aWVzKClbci52YWx1ZV0sYT1uLnZhbHVlO3JldHVybiB0eXBlb2YgaT09dHlwZW9mIGEmJmk+PWF9XSxcImZpbHRlci1pZC0+PVwiOltILFtXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj10LmlkKCksaT1yLnZhbHVlO3JldHVybiB0eXBlb2Ygbj09dHlwZW9mIGkmJm4+PWl9XSxcImZpbHRlci1oYXNcIjpbSCxbV10sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS52YWx1ZSBpbiB0LnByb3BlcnRpZXMoKX1dLFwiZmlsdGVyLWhhcy1pZFwiOltILFtdLGZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT09dC5pZCgpfV0sXCJmaWx0ZXItdHlwZS1pblwiOltILFtaKHEpXSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLnZhbHVlLmluZGV4T2YodC5nZW9tZXRyeVR5cGUoKSk+PTB9XSxcImZpbHRlci1pZC1pblwiOltILFtaKFcpXSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLnZhbHVlLmluZGV4T2YodC5pZCgpKT49MH1dLFwiZmlsdGVyLWluLXNtYWxsXCI6W0gsW3EsWihXKV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBlWzFdLnZhbHVlLmluZGV4T2YodC5wcm9wZXJ0aWVzKClbci52YWx1ZV0pPj0wfV0sXCJmaWx0ZXItaW4tbGFyZ2VcIjpbSCxbcSxaKFcpXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiBmdW5jdGlvbih0LGUscixuKXtmb3IoO3I8PW47KXt2YXIgaT1yK24+PjE7aWYoZVtpXT09PXQpcmV0dXJuITA7ZVtpXT50P249aS0xOnI9aSsxfXJldHVybiExfSh0LnByb3BlcnRpZXMoKVtyLnZhbHVlXSxuLnZhbHVlLDAsbi52YWx1ZS5sZW5ndGgtMSl9XSxcIj5cIjp7dHlwZTpILG92ZXJsb2FkczpbW1tVLFVdLFZ0XSxbW3EscV0sVnRdLFtbcSxxLFhdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIGVbMl0uZXZhbHVhdGUodCkuY29tcGFyZShyLmV2YWx1YXRlKHQpLG4uZXZhbHVhdGUodCkpPjB9XV19LFwiPFwiOnt0eXBlOkgsb3ZlcmxvYWRzOltbW1UsVV0sanRdLFtbcSxxXSxqdF0sW1txLHEsWF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gZVsyXS5ldmFsdWF0ZSh0KS5jb21wYXJlKHIuZXZhbHVhdGUodCksbi5ldmFsdWF0ZSh0KSk8MH1dXX0sXCI+PVwiOnt0eXBlOkgsb3ZlcmxvYWRzOltbW1UsVV0scXRdLFtbcSxxXSxxdF0sW1txLHEsWF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gZVsyXS5ldmFsdWF0ZSh0KS5jb21wYXJlKHIuZXZhbHVhdGUodCksbi5ldmFsdWF0ZSh0KSk+PTB9XV19LFwiPD1cIjp7dHlwZTpILG92ZXJsb2FkczpbW1tVLFVdLFV0XSxbW3EscV0sVXRdLFtbcSxxLFhdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIGVbMl0uZXZhbHVhdGUodCkuY29tcGFyZShyLmV2YWx1YXRlKHQpLG4uZXZhbHVhdGUodCkpPD0wfV1dfSxhbGw6e3R5cGU6SCxvdmVybG9hZHM6W1tbSCxIXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiByLmV2YWx1YXRlKHQpJiZuLmV2YWx1YXRlKHQpfV0sW0h0KEgpLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj1lO3I8bi5sZW5ndGg7cis9MSlpZighbltyXS5ldmFsdWF0ZSh0KSlyZXR1cm4hMTtyZXR1cm4hMH1dXX0sYW55Ont0eXBlOkgsb3ZlcmxvYWRzOltbW0gsSF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KXx8bi5ldmFsdWF0ZSh0KX1dLFtIdChIKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49ZTtyPG4ubGVuZ3RoO3IrPTEpaWYobltyXS5ldmFsdWF0ZSh0KSlyZXR1cm4hMDtyZXR1cm4hMX1dXX0sXCIhXCI6W0gsW0hdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIWVbMF0uZXZhbHVhdGUodCl9XSxcImlzLXN1cHBvcnRlZC1zY3JpcHRcIjpbSCxbcV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49dC5nbG9iYWxzJiZ0Lmdsb2JhbHMuaXNTdXBwb3J0ZWRTY3JpcHQ7cmV0dXJuIW58fG4oci5ldmFsdWF0ZSh0KSl9XSx1cGNhc2U6W3EsW3FdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0uZXZhbHVhdGUodCkudG9VcHBlckNhc2UoKX1dLGRvd25jYXNlOltxLFtxXSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLmV2YWx1YXRlKHQpLnRvTG93ZXJDYXNlKCl9XSxjb25jYXQ6W3EsSHQocSksZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXZhbHVhdGUodCl9KS5qb2luKFwiXCIpfV0sXCJyZXNvbHZlZC1sb2NhbGVcIjpbcSxbWF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS5ldmFsdWF0ZSh0KS5yZXNvbHZlZExvY2FsZSgpfV19KTt2YXIgV3Q9Ljk1MDQ3LFh0PTEsWnQ9MS4wODg4MywkdD00LzI5LEp0PTYvMjksS3Q9MypKdCpKdCxRdD1KdCpKdCpKdCx0ZT1NYXRoLlBJLzE4MCxlZT0xODAvTWF0aC5QSTtmdW5jdGlvbiByZSh0KXtyZXR1cm4gdD5RdD9NYXRoLnBvdyh0LDEvMyk6dC9LdCskdH1mdW5jdGlvbiBuZSh0KXtyZXR1cm4gdD5KdD90KnQqdDpLdCoodC0kdCl9ZnVuY3Rpb24gaWUodCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiBhZSh0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBvZSh0KXt2YXIgZT1hZSh0LnIpLHI9YWUodC5nKSxuPWFlKHQuYiksaT1yZSgoLjQxMjQ1NjQqZSsuMzU3NTc2MSpyKy4xODA0Mzc1Km4pL1d0KSxhPXJlKCguMjEyNjcyOSplKy43MTUxNTIyKnIrLjA3MjE3NSpuKS9YdCk7cmV0dXJue2w6MTE2KmEtMTYsYTo1MDAqKGktYSksYjoyMDAqKGEtcmUoKC4wMTkzMzM5KmUrLjExOTE5MipyKy45NTAzMDQxKm4pL1p0KSksYWxwaGE6dC5hfX1mdW5jdGlvbiBzZSh0KXt2YXIgZT0odC5sKzE2KS8xMTYscj1pc05hTih0LmEpP2U6ZSt0LmEvNTAwLG49aXNOYU4odC5iKT9lOmUtdC5iLzIwMDtyZXR1cm4gZT1YdCpuZShlKSxyPVd0Km5lKHIpLG49WnQqbmUobiksbmV3IHR0KGllKDMuMjQwNDU0MipyLTEuNTM3MTM4NSplLS40OTg1MzE0Km4pLGllKC0uOTY5MjY2KnIrMS44NzYwMTA4KmUrLjA0MTU1NipuKSxpZSguMDU1NjQzNCpyLS4yMDQwMjU5KmUrMS4wNTcyMjUyKm4pLHQuYWxwaGEpfXZhciBsZT17Zm9yd2FyZDpvZSxyZXZlcnNlOnNlLGludGVycG9sYXRlOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm57bDp3dCh0LmwsZS5sLHIpLGE6d3QodC5hLGUuYSxyKSxiOnd0KHQuYixlLmIsciksYWxwaGE6d3QodC5hbHBoYSxlLmFscGhhLHIpfX19LGNlPXtmb3J3YXJkOmZ1bmN0aW9uKHQpe3ZhciBlPW9lKHQpLHI9ZS5sLG49ZS5hLGk9ZS5iLGE9TWF0aC5hdGFuMihpLG4pKmVlO3JldHVybntoOmE8MD9hKzM2MDphLGM6TWF0aC5zcXJ0KG4qbitpKmkpLGw6cixhbHBoYTp0LmF9fSxyZXZlcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuaCp0ZSxyPXQuYztyZXR1cm4gc2Uoe2w6dC5sLGE6TWF0aC5jb3MoZSkqcixiOk1hdGguc2luKGUpKnIsYWxwaGE6dC5hbHBoYX0pfSxpbnRlcnBvbGF0ZTpmdW5jdGlvbih0LGUscil7cmV0dXJue2g6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUtdDtyZXR1cm4gdCtyKihuPjE4MHx8bjwtMTgwP24tMzYwKk1hdGgucm91bmQobi8zNjApOm4pfSh0LmgsZS5oLHIpLGM6d3QodC5jLGUuYyxyKSxsOnd0KHQubCxlLmwsciksYWxwaGE6d3QodC5hbHBoYSxlLmFscGhhLHIpfX19LHVlPU9iamVjdC5mcmVlemUoe2xhYjpsZSxoY2w6Y2V9KTtmdW5jdGlvbiBoZSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE51bWJlcj9cIm51bWJlclwiOnQgaW5zdGFuY2VvZiBTdHJpbmc/XCJzdHJpbmdcIjp0IGluc3RhbmNlb2YgQm9vbGVhbj9cImJvb2xlYW5cIjpBcnJheS5pc0FycmF5KHQpP1wiYXJyYXlcIjpudWxsPT09dD9cIm51bGxcIjp0eXBlb2YgdH1mdW5jdGlvbiBmZSh0KXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgdCYmbnVsbCE9PXQmJiFBcnJheS5pc0FycmF5KHQpfWZ1bmN0aW9uIHBlKHQpe3JldHVybiB0fWZ1bmN0aW9uIGRlKHQsZSxyKXtyZXR1cm4gdm9pZCAwIT09dD90OnZvaWQgMCE9PWU/ZTp2b2lkIDAhPT1yP3I6dm9pZCAwfWZ1bmN0aW9uIGdlKHQsZSxyLG4saSl7cmV0dXJuIGRlKHR5cGVvZiByPT09aT9uW3JdOnZvaWQgMCx0LmRlZmF1bHQsZS5kZWZhdWx0KX1mdW5jdGlvbiB2ZSh0LGUscil7aWYoXCJudW1iZXJcIiE9PWhlKHIpKXJldHVybiBkZSh0LmRlZmF1bHQsZS5kZWZhdWx0KTt2YXIgbj10LnN0b3BzLmxlbmd0aDtpZigxPT09bilyZXR1cm4gdC5zdG9wc1swXVsxXTtpZihyPD10LnN0b3BzWzBdWzBdKXJldHVybiB0LnN0b3BzWzBdWzFdO2lmKHI+PXQuc3RvcHNbbi0xXVswXSlyZXR1cm4gdC5zdG9wc1tuLTFdWzFdO3ZhciBpPXhlKHQuc3RvcHMscik7cmV0dXJuIHQuc3RvcHNbaV1bMV19ZnVuY3Rpb24gbWUodCxlLHIpe3ZhciBuPXZvaWQgMCE9PXQuYmFzZT90LmJhc2U6MTtpZihcIm51bWJlclwiIT09aGUocikpcmV0dXJuIGRlKHQuZGVmYXVsdCxlLmRlZmF1bHQpO3ZhciBpPXQuc3RvcHMubGVuZ3RoO2lmKDE9PT1pKXJldHVybiB0LnN0b3BzWzBdWzFdO2lmKHI8PXQuc3RvcHNbMF1bMF0pcmV0dXJuIHQuc3RvcHNbMF1bMV07aWYocj49dC5zdG9wc1tpLTFdWzBdKXJldHVybiB0LnN0b3BzW2ktMV1bMV07dmFyIGE9eGUodC5zdG9wcyxyKSxvPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4tcixhPXQtcjtyZXR1cm4gMD09PWk/MDoxPT09ZT9hL2k6KE1hdGgucG93KGUsYSktMSkvKE1hdGgucG93KGUsaSktMSl9KHIsbix0LnN0b3BzW2FdWzBdLHQuc3RvcHNbYSsxXVswXSkscz10LnN0b3BzW2FdWzFdLGw9dC5zdG9wc1thKzFdWzFdLGM9a3RbZS50eXBlXXx8cGU7aWYodC5jb2xvclNwYWNlJiZcInJnYlwiIT09dC5jb2xvclNwYWNlKXt2YXIgdT11ZVt0LmNvbG9yU3BhY2VdO2M9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdS5yZXZlcnNlKHUuaW50ZXJwb2xhdGUodS5mb3J3YXJkKHQpLHUuZm9yd2FyZChlKSxvKSl9fXJldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHMuZXZhbHVhdGU/e2V2YWx1YXRlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9YXJndW1lbnRzLmxlbmd0aDtlLS07KXRbZV09YXJndW1lbnRzW2VdO3ZhciByPXMuZXZhbHVhdGUuYXBwbHkodm9pZCAwLHQpLG49bC5ldmFsdWF0ZS5hcHBseSh2b2lkIDAsdCk7aWYodm9pZCAwIT09ciYmdm9pZCAwIT09bilyZXR1cm4gYyhyLG4sbyl9fTpjKHMsbCxvKX1mdW5jdGlvbiB5ZSh0LGUscil7cmV0dXJuXCJjb2xvclwiPT09ZS50eXBlP3I9dHQucGFyc2Uocik6aGUocik9PT1lLnR5cGV8fFwiZW51bVwiPT09ZS50eXBlJiZlLnZhbHVlc1tyXXx8KHI9dm9pZCAwKSxkZShyLHQuZGVmYXVsdCxlLmRlZmF1bHQpfWZ1bmN0aW9uIHhlKHQsZSl7Zm9yKHZhciByLG4saT0wLGE9dC5sZW5ndGgtMSxvPTA7aTw9YTspe2lmKHI9dFtvPU1hdGguZmxvb3IoKGkrYSkvMildWzBdLG49dFtvKzFdWzBdLGU9PT1yfHxlPnImJmU8bilyZXR1cm4gbztyPGU/aT1vKzE6cj5lJiYoYT1vLTEpfXJldHVybiBNYXRoLm1heChvLTEsMCl9dmFyIGJlPWZ1bmN0aW9uKHQsZSl7dmFyIHI7dGhpcy5leHByZXNzaW9uPXQsdGhpcy5fd2FybmluZ0hpc3Rvcnk9e30sdGhpcy5fZGVmYXVsdFZhbHVlPVwiY29sb3JcIj09PShyPWUpLnR5cGUmJmZlKHIuZGVmYXVsdCk/bmV3IHR0KDAsMCwwLDApOlwiY29sb3JcIj09PXIudHlwZT90dC5wYXJzZShyLmRlZmF1bHQpfHxudWxsOnZvaWQgMD09PXIuZGVmYXVsdD9udWxsOnIuZGVmYXVsdCxcImVudW1cIj09PWUudHlwZSYmKHRoaXMuX2VudW1WYWx1ZXM9ZS52YWx1ZXMpfTtmdW5jdGlvbiBfZSh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGg+MCYmXCJzdHJpbmdcIj09dHlwZW9mIHRbMF0mJnRbMF1pbiBSdH1mdW5jdGlvbiB3ZSh0LGUpe3ZhciByPW5ldyB4dChSdCxbXSxmdW5jdGlvbih0KXt2YXIgZT17Y29sb3I6RyxzdHJpbmc6cSxudW1iZXI6VSxlbnVtOnEsYm9vbGVhbjpIfTtyZXR1cm5cImFycmF5XCI9PT10LnR5cGU/WihlW3QudmFsdWVdfHxXLHQubGVuZ3RoKTplW3QudHlwZV18fG51bGx9KGUpKSxuPXIucGFyc2UodCk7cmV0dXJuIG4/R3QobmV3IGJlKG4sZSkpOll0KHIuZXJyb3JzKX1iZS5wcm90b3R5cGUuZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9ldmFsdWF0b3J8fCh0aGlzLl9ldmFsdWF0b3I9bmV3IGR0KSx0aGlzLl9ldmFsdWF0b3IuZ2xvYmFscz10LHRoaXMuX2V2YWx1YXRvci5mZWF0dXJlPWUsdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHRoaXMuX2V2YWx1YXRvcil9LGJlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0LGUpe3RoaXMuX2V2YWx1YXRvcnx8KHRoaXMuX2V2YWx1YXRvcj1uZXcgZHQpLHRoaXMuX2V2YWx1YXRvci5nbG9iYWxzPXQsdGhpcy5fZXZhbHVhdG9yLmZlYXR1cmU9ZTt0cnl7dmFyIHI9dGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHRoaXMuX2V2YWx1YXRvcik7aWYobnVsbD09cilyZXR1cm4gdGhpcy5fZGVmYXVsdFZhbHVlO2lmKHRoaXMuX2VudW1WYWx1ZXMmJiEociBpbiB0aGlzLl9lbnVtVmFsdWVzKSl0aHJvdyBuZXcgb3QoXCJFeHBlY3RlZCB2YWx1ZSB0byBiZSBvbmUgb2YgXCIrT2JqZWN0LmtleXModGhpcy5fZW51bVZhbHVlcykubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0KX0pLmpvaW4oXCIsIFwiKStcIiwgYnV0IGZvdW5kIFwiK0pTT04uc3RyaW5naWZ5KHIpK1wiIGluc3RlYWQuXCIpO3JldHVybiByfWNhdGNoKHQpe3JldHVybiB0aGlzLl93YXJuaW5nSGlzdG9yeVt0Lm1lc3NhZ2VdfHwodGhpcy5fd2FybmluZ0hpc3RvcnlbdC5tZXNzYWdlXT0hMCxcInVuZGVmaW5lZFwiIT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuKHQubWVzc2FnZSkpLHRoaXMuX2RlZmF1bHRWYWx1ZX19O3ZhciBrZT1mdW5jdGlvbih0LGUpe3RoaXMua2luZD10LHRoaXMuX3N0eWxlRXhwcmVzc2lvbj1lfTtrZS5wcm90b3R5cGUuZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9zdHlsZUV4cHJlc3Npb24uZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZyh0LGUpfSxrZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlKHQsZSl9O3ZhciBBZT1mdW5jdGlvbih0LGUscil7dGhpcy5raW5kPXQsdGhpcy56b29tU3RvcHM9ci5sYWJlbHMsdGhpcy5fc3R5bGVFeHByZXNzaW9uPWUsciBpbnN0YW5jZW9mIEF0JiYodGhpcy5faW50ZXJwb2xhdGlvblR5cGU9ci5pbnRlcnBvbGF0aW9uKX07ZnVuY3Rpb24gVGUodCxlKXtpZihcImVycm9yXCI9PT0odD13ZSh0LGUpKS5yZXN1bHQpcmV0dXJuIHQ7dmFyIHI9dC52YWx1ZS5leHByZXNzaW9uLG49dnQocik7aWYoIW4mJiFlW1wicHJvcGVydHktZnVuY3Rpb25cIl0pcmV0dXJuIFl0KFtuZXcgTihcIlwiLFwicHJvcGVydHkgZXhwcmVzc2lvbnMgbm90IHN1cHBvcnRlZFwiKV0pO3ZhciBpPW10KHIsW1wiem9vbVwiXSk7aWYoIWkmJiExPT09ZVtcInpvb20tZnVuY3Rpb25cIl0pcmV0dXJuIFl0KFtuZXcgTihcIlwiLFwiem9vbSBleHByZXNzaW9ucyBub3Qgc3VwcG9ydGVkXCIpXSk7dmFyIGE9ZnVuY3Rpb24gdChlKXt2YXIgcj1udWxsO2lmKGUgaW5zdGFuY2VvZiBTdClyPXQoZS5yZXN1bHQpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIE10KWZvcih2YXIgbj0wLGk9ZS5hcmdzO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtpZihyPXQoYSkpYnJlYWt9ZWxzZShlIGluc3RhbmNlb2YgX3R8fGUgaW5zdGFuY2VvZiBBdCkmJmUuaW5wdXQgaW5zdGFuY2VvZiBndCYmXCJ6b29tXCI9PT1lLmlucHV0Lm5hbWUmJihyPWUpO3JldHVybiByIGluc3RhbmNlb2YgTj9yOihlLmVhY2hDaGlsZChmdW5jdGlvbihlKXt2YXIgbj10KGUpO24gaW5zdGFuY2VvZiBOP3I9bjohciYmbj9yPW5ldyBOKFwiXCIsJ1wiem9vbVwiIGV4cHJlc3Npb24gbWF5IG9ubHkgYmUgdXNlZCBhcyBpbnB1dCB0byBhIHRvcC1sZXZlbCBcInN0ZXBcIiBvciBcImludGVycG9sYXRlXCIgZXhwcmVzc2lvbi4nKTpyJiZuJiZyIT09biYmKHI9bmV3IE4oXCJcIiwnT25seSBvbmUgem9vbS1iYXNlZCBcInN0ZXBcIiBvciBcImludGVycG9sYXRlXCIgc3ViZXhwcmVzc2lvbiBtYXkgYmUgdXNlZCBpbiBhbiBleHByZXNzaW9uLicpKX0pLHIpfShyKTtyZXR1cm4gYXx8aT9hIGluc3RhbmNlb2YgTj9ZdChbYV0pOmEgaW5zdGFuY2VvZiBBdCYmXCJwaWVjZXdpc2UtY29uc3RhbnRcIj09PWUuZnVuY3Rpb24/WXQoW25ldyBOKFwiXCIsJ1wiaW50ZXJwb2xhdGVcIiBleHByZXNzaW9ucyBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoaXMgcHJvcGVydHknKV0pOkd0KGE/bmV3IEFlKG4/XCJjYW1lcmFcIjpcImNvbXBvc2l0ZVwiLHQudmFsdWUsYSk6bmV3IGtlKG4/XCJjb25zdGFudFwiOlwic291cmNlXCIsdC52YWx1ZSkpOll0KFtuZXcgTihcIlwiLCdcInpvb21cIiBleHByZXNzaW9uIG1heSBvbmx5IGJlIHVzZWQgYXMgaW5wdXQgdG8gYSB0b3AtbGV2ZWwgXCJzdGVwXCIgb3IgXCJpbnRlcnBvbGF0ZVwiIGV4cHJlc3Npb24uJyldKX1BZS5wcm90b3R5cGUuZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9zdHlsZUV4cHJlc3Npb24uZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZyh0LGUpfSxBZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlKHQsZSl9LEFlLnByb3RvdHlwZS5pbnRlcnBvbGF0aW9uRmFjdG9yPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5faW50ZXJwb2xhdGlvblR5cGU/QXQuaW50ZXJwb2xhdGlvbkZhY3Rvcih0aGlzLl9pbnRlcnBvbGF0aW9uVHlwZSx0LGUscik6MH07dmFyIE1lPWZ1bmN0aW9uKHQsZSl7dGhpcy5fcGFyYW1ldGVycz10LHRoaXMuX3NwZWNpZmljYXRpb249ZSxSKHRoaXMsZnVuY3Rpb24gdChlLHIpe3ZhciBuLGksYSxvPVwiY29sb3JcIj09PXIudHlwZSxzPWUuc3RvcHMmJlwib2JqZWN0XCI9PXR5cGVvZiBlLnN0b3BzWzBdWzBdLGw9c3x8dm9pZCAwIT09ZS5wcm9wZXJ0eSxjPXN8fCFsLHU9ZS50eXBlfHwoXCJpbnRlcnBvbGF0ZWRcIj09PXIuZnVuY3Rpb24/XCJleHBvbmVudGlhbFwiOlwiaW50ZXJ2YWxcIik7aWYobyYmKChlPVIoe30sZSkpLnN0b3BzJiYoZS5zdG9wcz1lLnN0b3BzLm1hcChmdW5jdGlvbih0KXtyZXR1cm5bdFswXSx0dC5wYXJzZSh0WzFdKV19KSksZS5kZWZhdWx0P2UuZGVmYXVsdD10dC5wYXJzZShlLmRlZmF1bHQpOmUuZGVmYXVsdD10dC5wYXJzZShyLmRlZmF1bHQpKSxlLmNvbG9yU3BhY2UmJlwicmdiXCIhPT1lLmNvbG9yU3BhY2UmJiF1ZVtlLmNvbG9yU3BhY2VdKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gY29sb3Igc3BhY2U6IFwiK2UuY29sb3JTcGFjZSk7aWYoXCJleHBvbmVudGlhbFwiPT09dSluPW1lO2Vsc2UgaWYoXCJpbnRlcnZhbFwiPT09dSluPXZlO2Vsc2UgaWYoXCJjYXRlZ29yaWNhbFwiPT09dSl7bj1nZSxpPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKHZhciBoPTAsZj1lLnN0b3BzO2g8Zi5sZW5ndGg7aCs9MSl7dmFyIHA9ZltoXTtpW3BbMF1dPXBbMV19YT10eXBlb2YgZS5zdG9wc1swXVswXX1lbHNle2lmKFwiaWRlbnRpdHlcIiE9PXUpdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGZ1bmN0aW9uIHR5cGUgXCInK3UrJ1wiJyk7bj15ZX1pZihzKXtmb3IodmFyIGQ9e30sZz1bXSx2PTA7djxlLnN0b3BzLmxlbmd0aDt2Kyspe3ZhciBtPWUuc3RvcHNbdl0seT1tWzBdLnpvb207dm9pZCAwPT09ZFt5XSYmKGRbeV09e3pvb206eSx0eXBlOmUudHlwZSxwcm9wZXJ0eTplLnByb3BlcnR5LGRlZmF1bHQ6ZS5kZWZhdWx0LHN0b3BzOltdfSxnLnB1c2goeSkpLGRbeV0uc3RvcHMucHVzaChbbVswXS52YWx1ZSxtWzFdXSl9Zm9yKHZhciB4PVtdLGI9MCxfPWc7YjxfLmxlbmd0aDtiKz0xKXt2YXIgdz1fW2JdO3gucHVzaChbZFt3XS56b29tLHQoZFt3XSxyKV0pfXJldHVybntraW5kOlwiY29tcG9zaXRlXCIsaW50ZXJwb2xhdGlvbkZhY3RvcjpBdC5pbnRlcnBvbGF0aW9uRmFjdG9yLmJpbmQodm9pZCAwLHtuYW1lOlwibGluZWFyXCJ9KSx6b29tU3RvcHM6eC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSxldmFsdWF0ZTpmdW5jdGlvbih0LG4pe3ZhciBpPXQuem9vbTtyZXR1cm4gbWUoe3N0b3BzOngsYmFzZTplLmJhc2V9LHIsaSkuZXZhbHVhdGUoaSxuKX19fXJldHVybiBjP3traW5kOlwiY2FtZXJhXCIsaW50ZXJwb2xhdGlvbkZhY3RvcjpcImV4cG9uZW50aWFsXCI9PT11P0F0LmludGVycG9sYXRpb25GYWN0b3IuYmluZCh2b2lkIDAse25hbWU6XCJleHBvbmVudGlhbFwiLGJhc2U6dm9pZCAwIT09ZS5iYXNlP2UuYmFzZToxfSk6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sem9vbVN0b3BzOmUuc3RvcHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSksZXZhbHVhdGU6ZnVuY3Rpb24odCl7dmFyIG89dC56b29tO3JldHVybiBuKGUscixvLGksYSl9fTp7a2luZDpcInNvdXJjZVwiLGV2YWx1YXRlOmZ1bmN0aW9uKHQsbyl7dmFyIHM9byYmby5wcm9wZXJ0aWVzP28ucHJvcGVydGllc1tlLnByb3BlcnR5XTp2b2lkIDA7cmV0dXJuIHZvaWQgMD09PXM/ZGUoZS5kZWZhdWx0LHIuZGVmYXVsdCk6bihlLHIscyxpLGEpfX19KHRoaXMuX3BhcmFtZXRlcnMsdGhpcy5fc3BlY2lmaWNhdGlvbikpfTtmdW5jdGlvbiBTZSh0LGUpe2lmKGZlKHQpKXJldHVybiBuZXcgTWUodCxlKTtpZihfZSh0KSl7dmFyIHI9VGUodCxlKTtpZihcImVycm9yXCI9PT1yLnJlc3VsdCl0aHJvdyBuZXcgRXJyb3Ioci52YWx1ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5K1wiOiBcIit0Lm1lc3NhZ2V9KS5qb2luKFwiLCBcIikpO3JldHVybiByLnZhbHVlfXZhciBuPXQ7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQmJlwiY29sb3JcIj09PWUudHlwZSYmKG49dHQucGFyc2UodCkpLHtraW5kOlwiY29uc3RhbnRcIixldmFsdWF0ZTpmdW5jdGlvbigpe3JldHVybiBufX19ZnVuY3Rpb24gRWUodCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG49dC52YWx1ZVNwZWN8fHt9LGk9dC5vYmplY3RFbGVtZW50VmFsaWRhdG9yc3x8e30sYT10LnN0eWxlLG89dC5zdHlsZVNwZWMscz1bXSxsPWhlKHIpO2lmKFwib2JqZWN0XCIhPT1sKXJldHVybltuZXcgRChlLHIsXCJvYmplY3QgZXhwZWN0ZWQsIFwiK2wrXCIgZm91bmRcIildO2Zvcih2YXIgYyBpbiByKXt2YXIgdT1jLnNwbGl0KFwiLlwiKVswXSxoPW5bdV18fG5bXCIqXCJdLGY9dm9pZCAwO2lmKGlbdV0pZj1pW3VdO2Vsc2UgaWYoblt1XSlmPUtlO2Vsc2UgaWYoaVtcIipcIl0pZj1pW1wiKlwiXTtlbHNle2lmKCFuW1wiKlwiXSl7cy5wdXNoKG5ldyBEKGUscltjXSwndW5rbm93biBwcm9wZXJ0eSBcIicrYysnXCInKSk7Y29udGludWV9Zj1LZX1zPXMuY29uY2F0KGYoe2tleTooZT9lK1wiLlwiOmUpK2MsdmFsdWU6cltjXSx2YWx1ZVNwZWM6aCxzdHlsZTphLHN0eWxlU3BlYzpvLG9iamVjdDpyLG9iamVjdEtleTpjfSxyKSl9Zm9yKHZhciBwIGluIG4paVtwXXx8bltwXS5yZXF1aXJlZCYmdm9pZCAwPT09bltwXS5kZWZhdWx0JiZ2b2lkIDA9PT1yW3BdJiZzLnB1c2gobmV3IEQoZSxyLCdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5IFwiJytwKydcIicpKTtyZXR1cm4gc31mdW5jdGlvbiBDZSh0KXt2YXIgZT10LnZhbHVlLHI9dC52YWx1ZVNwZWMsbj10LnN0eWxlLGk9dC5zdHlsZVNwZWMsYT10LmtleSxvPXQuYXJyYXlFbGVtZW50VmFsaWRhdG9yfHxLZTtpZihcImFycmF5XCIhPT1oZShlKSlyZXR1cm5bbmV3IEQoYSxlLFwiYXJyYXkgZXhwZWN0ZWQsIFwiK2hlKGUpK1wiIGZvdW5kXCIpXTtpZihyLmxlbmd0aCYmZS5sZW5ndGghPT1yLmxlbmd0aClyZXR1cm5bbmV3IEQoYSxlLFwiYXJyYXkgbGVuZ3RoIFwiK3IubGVuZ3RoK1wiIGV4cGVjdGVkLCBsZW5ndGggXCIrZS5sZW5ndGgrXCIgZm91bmRcIildO2lmKHJbXCJtaW4tbGVuZ3RoXCJdJiZlLmxlbmd0aDxyW1wibWluLWxlbmd0aFwiXSlyZXR1cm5bbmV3IEQoYSxlLFwiYXJyYXkgbGVuZ3RoIGF0IGxlYXN0IFwiK3JbXCJtaW4tbGVuZ3RoXCJdK1wiIGV4cGVjdGVkLCBsZW5ndGggXCIrZS5sZW5ndGgrXCIgZm91bmRcIildO3ZhciBzPXt0eXBlOnIudmFsdWV9O2kuJHZlcnNpb248NyYmKHMuZnVuY3Rpb249ci5mdW5jdGlvbiksXCJvYmplY3RcIj09PWhlKHIudmFsdWUpJiYocz1yLnZhbHVlKTtmb3IodmFyIGw9W10sYz0wO2M8ZS5sZW5ndGg7YysrKWw9bC5jb25jYXQobyh7YXJyYXk6ZSxhcnJheUluZGV4OmMsdmFsdWU6ZVtjXSx2YWx1ZVNwZWM6cyxzdHlsZTpuLHN0eWxlU3BlYzppLGtleTphK1wiW1wiK2MrXCJdXCJ9KSk7cmV0dXJuIGx9ZnVuY3Rpb24gTGUodCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG49dC52YWx1ZVNwZWMsaT1oZShyKTtyZXR1cm5cIm51bWJlclwiIT09aT9bbmV3IEQoZSxyLFwibnVtYmVyIGV4cGVjdGVkLCBcIitpK1wiIGZvdW5kXCIpXTpcIm1pbmltdW1cImluIG4mJnI8bi5taW5pbXVtP1tuZXcgRChlLHIscitcIiBpcyBsZXNzIHRoYW4gdGhlIG1pbmltdW0gdmFsdWUgXCIrbi5taW5pbXVtKV06XCJtYXhpbXVtXCJpbiBuJiZyPm4ubWF4aW11bT9bbmV3IEQoZSxyLHIrXCIgaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIHZhbHVlIFwiK24ubWF4aW11bSldOltdfWZ1bmN0aW9uIHplKHQpe3ZhciBlLHIsbixpPXQudmFsdWVTcGVjLGE9Rih0LnZhbHVlLnR5cGUpLG89e30scz1cImNhdGVnb3JpY2FsXCIhPT1hJiZ2b2lkIDA9PT10LnZhbHVlLnByb3BlcnR5LGw9IXMsYz1cImFycmF5XCI9PT1oZSh0LnZhbHVlLnN0b3BzKSYmXCJhcnJheVwiPT09aGUodC52YWx1ZS5zdG9wc1swXSkmJlwib2JqZWN0XCI9PT1oZSh0LnZhbHVlLnN0b3BzWzBdWzBdKSx1PUVlKHtrZXk6dC5rZXksdmFsdWU6dC52YWx1ZSx2YWx1ZVNwZWM6dC5zdHlsZVNwZWMuZnVuY3Rpb24sc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6e3N0b3BzOmZ1bmN0aW9uKHQpe2lmKFwiaWRlbnRpdHlcIj09PWEpcmV0dXJuW25ldyBEKHQua2V5LHQudmFsdWUsJ2lkZW50aXR5IGZ1bmN0aW9uIG1heSBub3QgaGF2ZSBhIFwic3RvcHNcIiBwcm9wZXJ0eScpXTt2YXIgZT1bXSxyPXQudmFsdWU7cmV0dXJuIGU9ZS5jb25jYXQoQ2Uoe2tleTp0LmtleSx2YWx1ZTpyLHZhbHVlU3BlYzp0LnZhbHVlU3BlYyxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxhcnJheUVsZW1lbnRWYWxpZGF0b3I6aH0pKSxcImFycmF5XCI9PT1oZShyKSYmMD09PXIubGVuZ3RoJiZlLnB1c2gobmV3IEQodC5rZXkscixcImFycmF5IG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgc3RvcFwiKSksZX0sZGVmYXVsdDpmdW5jdGlvbih0KXtyZXR1cm4gS2Uoe2tleTp0LmtleSx2YWx1ZTp0LnZhbHVlLHZhbHVlU3BlYzppLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjfSl9fX0pO3JldHVyblwiaWRlbnRpdHlcIj09PWEmJnMmJnUucHVzaChuZXcgRCh0LmtleSx0LnZhbHVlLCdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5IFwicHJvcGVydHlcIicpKSxcImlkZW50aXR5XCI9PT1hfHx0LnZhbHVlLnN0b3BzfHx1LnB1c2gobmV3IEQodC5rZXksdC52YWx1ZSwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSBcInN0b3BzXCInKSksXCJleHBvbmVudGlhbFwiPT09YSYmXCJwaWVjZXdpc2UtY29uc3RhbnRcIj09PXQudmFsdWVTcGVjLmZ1bmN0aW9uJiZ1LnB1c2gobmV3IEQodC5rZXksdC52YWx1ZSxcImV4cG9uZW50aWFsIGZ1bmN0aW9ucyBub3Qgc3VwcG9ydGVkXCIpKSx0LnN0eWxlU3BlYy4kdmVyc2lvbj49OCYmKGwmJiF0LnZhbHVlU3BlY1tcInByb3BlcnR5LWZ1bmN0aW9uXCJdP3UucHVzaChuZXcgRCh0LmtleSx0LnZhbHVlLFwicHJvcGVydHkgZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWRcIikpOnMmJiF0LnZhbHVlU3BlY1tcInpvb20tZnVuY3Rpb25cIl0mJlwiaGVhdG1hcC1jb2xvclwiIT09dC5vYmplY3RLZXkmJlwibGluZS1ncmFkaWVudFwiIT09dC5vYmplY3RLZXkmJnUucHVzaChuZXcgRCh0LmtleSx0LnZhbHVlLFwiem9vbSBmdW5jdGlvbnMgbm90IHN1cHBvcnRlZFwiKSkpLFwiY2F0ZWdvcmljYWxcIiE9PWEmJiFjfHx2b2lkIDAhPT10LnZhbHVlLnByb3BlcnR5fHx1LnB1c2gobmV3IEQodC5rZXksdC52YWx1ZSwnXCJwcm9wZXJ0eVwiIHByb3BlcnR5IGlzIHJlcXVpcmVkJykpLHU7ZnVuY3Rpb24gaCh0KXt2YXIgZT1bXSxhPXQudmFsdWUscz10LmtleTtpZihcImFycmF5XCIhPT1oZShhKSlyZXR1cm5bbmV3IEQocyxhLFwiYXJyYXkgZXhwZWN0ZWQsIFwiK2hlKGEpK1wiIGZvdW5kXCIpXTtpZigyIT09YS5sZW5ndGgpcmV0dXJuW25ldyBEKHMsYSxcImFycmF5IGxlbmd0aCAyIGV4cGVjdGVkLCBsZW5ndGggXCIrYS5sZW5ndGgrXCIgZm91bmRcIildO2lmKGMpe2lmKFwib2JqZWN0XCIhPT1oZShhWzBdKSlyZXR1cm5bbmV3IEQocyxhLFwib2JqZWN0IGV4cGVjdGVkLCBcIitoZShhWzBdKStcIiBmb3VuZFwiKV07aWYodm9pZCAwPT09YVswXS56b29tKXJldHVybltuZXcgRChzLGEsXCJvYmplY3Qgc3RvcCBrZXkgbXVzdCBoYXZlIHpvb21cIildO2lmKHZvaWQgMD09PWFbMF0udmFsdWUpcmV0dXJuW25ldyBEKHMsYSxcIm9iamVjdCBzdG9wIGtleSBtdXN0IGhhdmUgdmFsdWVcIildO2lmKG4mJm4+RihhWzBdLnpvb20pKXJldHVybltuZXcgRChzLGFbMF0uem9vbSxcInN0b3Agem9vbSB2YWx1ZXMgbXVzdCBhcHBlYXIgaW4gYXNjZW5kaW5nIG9yZGVyXCIpXTtGKGFbMF0uem9vbSkhPT1uJiYobj1GKGFbMF0uem9vbSkscj12b2lkIDAsbz17fSksZT1lLmNvbmNhdChFZSh7a2V5OnMrXCJbMF1cIix2YWx1ZTphWzBdLHZhbHVlU3BlYzp7em9vbTp7fX0sc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6e3pvb206TGUsdmFsdWU6Zn19KSl9ZWxzZSBlPWUuY29uY2F0KGYoe2tleTpzK1wiWzBdXCIsdmFsdWU6YVswXSx2YWx1ZVNwZWM6e30sc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWN9LGEpKTtyZXR1cm4gZS5jb25jYXQoS2Uoe2tleTpzK1wiWzFdXCIsdmFsdWU6YVsxXSx2YWx1ZVNwZWM6aSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlY30pKX1mdW5jdGlvbiBmKHQsbil7dmFyIHM9aGUodC52YWx1ZSksbD1GKHQudmFsdWUpLGM9bnVsbCE9PXQudmFsdWU/dC52YWx1ZTpuO2lmKGUpe2lmKHMhPT1lKXJldHVybltuZXcgRCh0LmtleSxjLHMrXCIgc3RvcCBkb21haW4gdHlwZSBtdXN0IG1hdGNoIHByZXZpb3VzIHN0b3AgZG9tYWluIHR5cGUgXCIrZSldfWVsc2UgZT1zO2lmKFwibnVtYmVyXCIhPT1zJiZcInN0cmluZ1wiIT09cyYmXCJib29sZWFuXCIhPT1zKXJldHVybltuZXcgRCh0LmtleSxjLFwic3RvcCBkb21haW4gdmFsdWUgbXVzdCBiZSBhIG51bWJlciwgc3RyaW5nLCBvciBib29sZWFuXCIpXTtpZihcIm51bWJlclwiIT09cyYmXCJjYXRlZ29yaWNhbFwiIT09YSl7dmFyIHU9XCJudW1iZXIgZXhwZWN0ZWQsIFwiK3MrXCIgZm91bmRcIjtyZXR1cm4gaVtcInByb3BlcnR5LWZ1bmN0aW9uXCJdJiZ2b2lkIDA9PT1hJiYodSs9J1xcbklmIHlvdSBpbnRlbmRlZCB0byB1c2UgYSBjYXRlZ29yaWNhbCBmdW5jdGlvbiwgc3BlY2lmeSBgXCJ0eXBlXCI6IFwiY2F0ZWdvcmljYWxcImAuJyksW25ldyBEKHQua2V5LGMsdSldfXJldHVyblwiY2F0ZWdvcmljYWxcIiE9PWF8fFwibnVtYmVyXCIhPT1zfHxpc0Zpbml0ZShsKSYmTWF0aC5mbG9vcihsKT09PWw/XCJjYXRlZ29yaWNhbFwiIT09YSYmXCJudW1iZXJcIj09PXMmJnZvaWQgMCE9PXImJmw8cj9bbmV3IEQodC5rZXksYyxcInN0b3AgZG9tYWluIHZhbHVlcyBtdXN0IGFwcGVhciBpbiBhc2NlbmRpbmcgb3JkZXJcIildOihyPWwsXCJjYXRlZ29yaWNhbFwiPT09YSYmbCBpbiBvP1tuZXcgRCh0LmtleSxjLFwic3RvcCBkb21haW4gdmFsdWVzIG11c3QgYmUgdW5pcXVlXCIpXToob1tsXT0hMCxbXSkpOltuZXcgRCh0LmtleSxjLFwiaW50ZWdlciBleHBlY3RlZCwgZm91bmQgXCIrbCldfX1mdW5jdGlvbiBPZSh0KXt2YXIgZT0oXCJwcm9wZXJ0eVwiPT09dC5leHByZXNzaW9uQ29udGV4dD9UZTp3ZSkoQih0LnZhbHVlKSx0LnZhbHVlU3BlYyk7cmV0dXJuXCJlcnJvclwiPT09ZS5yZXN1bHQ/ZS52YWx1ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBEKFwiXCIrdC5rZXkrZS5rZXksdC52YWx1ZSxlLm1lc3NhZ2UpfSk6XCJwcm9wZXJ0eVwiPT09dC5leHByZXNzaW9uQ29udGV4dCYmXCJ0ZXh0LWZvbnRcIj09PXQucHJvcGVydHlLZXkmJi0xIT09ZS52YWx1ZS5fc3R5bGVFeHByZXNzaW9uLmV4cHJlc3Npb24ucG9zc2libGVPdXRwdXRzKCkuaW5kZXhPZih2b2lkIDApP1tuZXcgRCh0LmtleSx0LnZhbHVlLCdJbnZhbGlkIGRhdGEgZXhwcmVzc2lvbiBmb3IgXCJ0ZXh0LWZvbnRcIi4gT3V0cHV0IHZhbHVlcyBtdXN0IGJlIGNvbnRhaW5lZCBhcyBsaXRlcmFscyB3aXRoaW4gdGhlIGV4cHJlc3Npb24uJyldOltdfWZ1bmN0aW9uIEllKHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZSxuPXQudmFsdWVTcGVjLGk9W107cmV0dXJuIEFycmF5LmlzQXJyYXkobi52YWx1ZXMpPy0xPT09bi52YWx1ZXMuaW5kZXhPZihGKHIpKSYmaS5wdXNoKG5ldyBEKGUscixcImV4cGVjdGVkIG9uZSBvZiBbXCIrbi52YWx1ZXMuam9pbihcIiwgXCIpK1wiXSwgXCIrSlNPTi5zdHJpbmdpZnkocikrXCIgZm91bmRcIikpOi0xPT09T2JqZWN0LmtleXMobi52YWx1ZXMpLmluZGV4T2YoRihyKSkmJmkucHVzaChuZXcgRChlLHIsXCJleHBlY3RlZCBvbmUgb2YgW1wiK09iamVjdC5rZXlzKG4udmFsdWVzKS5qb2luKFwiLCBcIikrXCJdLCBcIitKU09OLnN0cmluZ2lmeShyKStcIiBmb3VuZFwiKSksaX1mdW5jdGlvbiBEZSh0KXtpZighQXJyYXkuaXNBcnJheSh0KXx8MD09PXQubGVuZ3RoKXJldHVybiExO3N3aXRjaCh0WzBdKXtjYXNlXCJoYXNcIjpyZXR1cm4gdC5sZW5ndGg+PTImJlwiJGlkXCIhPT10WzFdJiZcIiR0eXBlXCIhPT10WzFdO2Nhc2VcImluXCI6Y2FzZVwiIWluXCI6Y2FzZVwiIWhhc1wiOmNhc2VcIm5vbmVcIjpyZXR1cm4hMTtjYXNlXCI9PVwiOmNhc2VcIiE9XCI6Y2FzZVwiPlwiOmNhc2VcIj49XCI6Y2FzZVwiPFwiOmNhc2VcIjw9XCI6cmV0dXJuIDM9PT10Lmxlbmd0aCYmKEFycmF5LmlzQXJyYXkodFsxXSl8fEFycmF5LmlzQXJyYXkodFsyXSkpO2Nhc2VcImFueVwiOmNhc2VcImFsbFwiOmZvcih2YXIgZT0wLHI9dC5zbGljZSgxKTtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV07aWYoIURlKG4pJiZcImJvb2xlYW5cIiE9dHlwZW9mIG4pcmV0dXJuITF9cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMH19TWUuZGVzZXJpYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBNZSh0Ll9wYXJhbWV0ZXJzLHQuX3NwZWNpZmljYXRpb24pfSxNZS5zZXJpYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJue19wYXJhbWV0ZXJzOnQuX3BhcmFtZXRlcnMsX3NwZWNpZmljYXRpb246dC5fc3BlY2lmaWNhdGlvbn19O3ZhciBQZT17dHlwZTpcImJvb2xlYW5cIixkZWZhdWx0OiExLGZ1bmN0aW9uOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCxcInpvb20tZnVuY3Rpb25cIjohMH07ZnVuY3Rpb24gUmUodCl7aWYoIXQpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9O0RlKHQpfHwodD1CZSh0KSk7dmFyIGU9d2UodCxQZSk7aWYoXCJlcnJvclwiPT09ZS5yZXN1bHQpdGhyb3cgbmV3IEVycm9yKGUudmFsdWUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleStcIjogXCIrdC5tZXNzYWdlfSkuam9pbihcIiwgXCIpKTtyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gZS52YWx1ZS5ldmFsdWF0ZSh0LHIpfX1mdW5jdGlvbiBGZSh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6MH1mdW5jdGlvbiBCZSh0KXtpZighdClyZXR1cm4hMDt2YXIgZSxyPXRbMF07cmV0dXJuIHQubGVuZ3RoPD0xP1wiYW55XCIhPT1yOlwiPT1cIj09PXI/TmUodFsxXSx0WzJdLFwiPT1cIik6XCIhPVwiPT09cj9VZShOZSh0WzFdLHRbMl0sXCI9PVwiKSk6XCI8XCI9PT1yfHxcIj5cIj09PXJ8fFwiPD1cIj09PXJ8fFwiPj1cIj09PXI/TmUodFsxXSx0WzJdLHIpOlwiYW55XCI9PT1yPyhlPXQuc2xpY2UoMSksW1wiYW55XCJdLmNvbmNhdChlLm1hcChCZSkpKTpcImFsbFwiPT09cj9bXCJhbGxcIl0uY29uY2F0KHQuc2xpY2UoMSkubWFwKEJlKSk6XCJub25lXCI9PT1yP1tcImFsbFwiXS5jb25jYXQodC5zbGljZSgxKS5tYXAoQmUpLm1hcChVZSkpOlwiaW5cIj09PXI/amUodFsxXSx0LnNsaWNlKDIpKTpcIiFpblwiPT09cj9VZShqZSh0WzFdLHQuc2xpY2UoMikpKTpcImhhc1wiPT09cj9WZSh0WzFdKTpcIiFoYXNcIiE9PXJ8fFVlKFZlKHRbMV0pKX1mdW5jdGlvbiBOZSh0LGUscil7c3dpdGNoKHQpe2Nhc2VcIiR0eXBlXCI6cmV0dXJuW1wiZmlsdGVyLXR5cGUtXCIrcixlXTtjYXNlXCIkaWRcIjpyZXR1cm5bXCJmaWx0ZXItaWQtXCIrcixlXTtkZWZhdWx0OnJldHVybltcImZpbHRlci1cIityLHQsZV19fWZ1bmN0aW9uIGplKHQsZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybiExO3N3aXRjaCh0KXtjYXNlXCIkdHlwZVwiOnJldHVybltcImZpbHRlci10eXBlLWluXCIsW1wibGl0ZXJhbFwiLGVdXTtjYXNlXCIkaWRcIjpyZXR1cm5bXCJmaWx0ZXItaWQtaW5cIixbXCJsaXRlcmFsXCIsZV1dO2RlZmF1bHQ6cmV0dXJuIGUubGVuZ3RoPjIwMCYmIWUuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHQhPXR5cGVvZiBlWzBdfSk/W1wiZmlsdGVyLWluLWxhcmdlXCIsdCxbXCJsaXRlcmFsXCIsZS5zb3J0KEZlKV1dOltcImZpbHRlci1pbi1zbWFsbFwiLHQsW1wibGl0ZXJhbFwiLGVdXX19ZnVuY3Rpb24gVmUodCl7c3dpdGNoKHQpe2Nhc2VcIiR0eXBlXCI6cmV0dXJuITA7Y2FzZVwiJGlkXCI6cmV0dXJuW1wiZmlsdGVyLWhhcy1pZFwiXTtkZWZhdWx0OnJldHVybltcImZpbHRlci1oYXNcIix0XX19ZnVuY3Rpb24gVWUodCl7cmV0dXJuW1wiIVwiLHRdfWZ1bmN0aW9uIHFlKHQpe3JldHVybiBEZShCKHQudmFsdWUpKT9PZShSKHt9LHQse2V4cHJlc3Npb25Db250ZXh0OlwiZmlsdGVyXCIsdmFsdWVTcGVjOnt2YWx1ZTpcImJvb2xlYW5cIn19KSk6ZnVuY3Rpb24gdChlKXt2YXIgcj1lLnZhbHVlLG49ZS5rZXk7aWYoXCJhcnJheVwiIT09aGUocikpcmV0dXJuW25ldyBEKG4scixcImFycmF5IGV4cGVjdGVkLCBcIitoZShyKStcIiBmb3VuZFwiKV07dmFyIGksYT1lLnN0eWxlU3BlYyxvPVtdO2lmKHIubGVuZ3RoPDEpcmV0dXJuW25ldyBEKG4scixcImZpbHRlciBhcnJheSBtdXN0IGhhdmUgYXQgbGVhc3QgMSBlbGVtZW50XCIpXTtzd2l0Y2gobz1vLmNvbmNhdChJZSh7a2V5Om4rXCJbMF1cIix2YWx1ZTpyWzBdLHZhbHVlU3BlYzphLmZpbHRlcl9vcGVyYXRvcixzdHlsZTplLnN0eWxlLHN0eWxlU3BlYzplLnN0eWxlU3BlY30pKSxGKHJbMF0pKXtjYXNlXCI8XCI6Y2FzZVwiPD1cIjpjYXNlXCI+XCI6Y2FzZVwiPj1cIjpyLmxlbmd0aD49MiYmXCIkdHlwZVwiPT09RihyWzFdKSYmby5wdXNoKG5ldyBEKG4sciwnXCIkdHlwZVwiIGNhbm5vdCBiZSB1c2Ugd2l0aCBvcGVyYXRvciBcIicrclswXSsnXCInKSk7Y2FzZVwiPT1cIjpjYXNlXCIhPVwiOjMhPT1yLmxlbmd0aCYmby5wdXNoKG5ldyBEKG4sciwnZmlsdGVyIGFycmF5IGZvciBvcGVyYXRvciBcIicrclswXSsnXCIgbXVzdCBoYXZlIDMgZWxlbWVudHMnKSk7Y2FzZVwiaW5cIjpjYXNlXCIhaW5cIjpyLmxlbmd0aD49MiYmXCJzdHJpbmdcIiE9PShpPWhlKHJbMV0pKSYmby5wdXNoKG5ldyBEKG4rXCJbMV1cIixyWzFdLFwic3RyaW5nIGV4cGVjdGVkLCBcIitpK1wiIGZvdW5kXCIpKTtmb3IodmFyIHM9MjtzPHIubGVuZ3RoO3MrKylpPWhlKHJbc10pLFwiJHR5cGVcIj09PUYoclsxXSk/bz1vLmNvbmNhdChJZSh7a2V5Om4rXCJbXCIrcytcIl1cIix2YWx1ZTpyW3NdLHZhbHVlU3BlYzphLmdlb21ldHJ5X3R5cGUsc3R5bGU6ZS5zdHlsZSxzdHlsZVNwZWM6ZS5zdHlsZVNwZWN9KSk6XCJzdHJpbmdcIiE9PWkmJlwibnVtYmVyXCIhPT1pJiZcImJvb2xlYW5cIiE9PWkmJm8ucHVzaChuZXcgRChuK1wiW1wiK3MrXCJdXCIscltzXSxcInN0cmluZywgbnVtYmVyLCBvciBib29sZWFuIGV4cGVjdGVkLCBcIitpK1wiIGZvdW5kXCIpKTticmVhaztjYXNlXCJhbnlcIjpjYXNlXCJhbGxcIjpjYXNlXCJub25lXCI6Zm9yKHZhciBsPTE7bDxyLmxlbmd0aDtsKyspbz1vLmNvbmNhdCh0KHtrZXk6bitcIltcIitsK1wiXVwiLHZhbHVlOnJbbF0sc3R5bGU6ZS5zdHlsZSxzdHlsZVNwZWM6ZS5zdHlsZVNwZWN9KSk7YnJlYWs7Y2FzZVwiaGFzXCI6Y2FzZVwiIWhhc1wiOmk9aGUoclsxXSksMiE9PXIubGVuZ3RoP28ucHVzaChuZXcgRChuLHIsJ2ZpbHRlciBhcnJheSBmb3IgXCInK3JbMF0rJ1wiIG9wZXJhdG9yIG11c3QgaGF2ZSAyIGVsZW1lbnRzJykpOlwic3RyaW5nXCIhPT1pJiZvLnB1c2gobmV3IEQobitcIlsxXVwiLHJbMV0sXCJzdHJpbmcgZXhwZWN0ZWQsIFwiK2krXCIgZm91bmRcIikpfXJldHVybiBvfSh0KX1mdW5jdGlvbiBIZSh0LGUpe3ZhciByPXQua2V5LG49dC5zdHlsZSxpPXQuc3R5bGVTcGVjLGE9dC52YWx1ZSxvPXQub2JqZWN0S2V5LHM9aVtlK1wiX1wiK3QubGF5ZXJUeXBlXTtpZighcylyZXR1cm5bXTt2YXIgbD1vLm1hdGNoKC9eKC4qKS10cmFuc2l0aW9uJC8pO2lmKFwicGFpbnRcIj09PWUmJmwmJnNbbFsxXV0mJnNbbFsxXV0udHJhbnNpdGlvbilyZXR1cm4gS2Uoe2tleTpyLHZhbHVlOmEsdmFsdWVTcGVjOmkudHJhbnNpdGlvbixzdHlsZTpuLHN0eWxlU3BlYzppfSk7dmFyIGMsdT10LnZhbHVlU3BlY3x8c1tvXTtpZighdSlyZXR1cm5bbmV3IEQocixhLCd1bmtub3duIHByb3BlcnR5IFwiJytvKydcIicpXTtpZihcInN0cmluZ1wiPT09aGUoYSkmJnVbXCJwcm9wZXJ0eS1mdW5jdGlvblwiXSYmIXUudG9rZW5zJiYoYz0vXnsoW159XSspfSQvLmV4ZWMoYSkpKXJldHVybltuZXcgRChyLGEsJ1wiJytvKydcIiBkb2VzIG5vdCBzdXBwb3J0IGludGVycG9sYXRpb24gc3ludGF4XFxuVXNlIGFuIGlkZW50aXR5IHByb3BlcnR5IGZ1bmN0aW9uIGluc3RlYWQ6IGB7IFwidHlwZVwiOiBcImlkZW50aXR5XCIsIFwicHJvcGVydHlcIjogJytKU09OLnN0cmluZ2lmeShjWzFdKStcIiB9YC5cIildO3ZhciBoPVtdO3JldHVyblwic3ltYm9sXCI9PT10LmxheWVyVHlwZSYmKFwidGV4dC1maWVsZFwiPT09byYmbiYmIW4uZ2x5cGhzJiZoLnB1c2gobmV3IEQocixhLCd1c2Ugb2YgXCJ0ZXh0LWZpZWxkXCIgcmVxdWlyZXMgYSBzdHlsZSBcImdseXBoc1wiIHByb3BlcnR5JykpLFwidGV4dC1mb250XCI9PT1vJiZmZShCKGEpKSYmXCJpZGVudGl0eVwiPT09RihhLnR5cGUpJiZoLnB1c2gobmV3IEQocixhLCdcInRleHQtZm9udFwiIGRvZXMgbm90IHN1cHBvcnQgaWRlbnRpdHkgZnVuY3Rpb25zJykpKSxoLmNvbmNhdChLZSh7a2V5OnQua2V5LHZhbHVlOmEsdmFsdWVTcGVjOnUsc3R5bGU6bixzdHlsZVNwZWM6aSxleHByZXNzaW9uQ29udGV4dDpcInByb3BlcnR5XCIscHJvcGVydHlLZXk6b30pKX1mdW5jdGlvbiBHZSh0KXtyZXR1cm4gSGUodCxcInBhaW50XCIpfWZ1bmN0aW9uIFllKHQpe3JldHVybiBIZSh0LFwibGF5b3V0XCIpfWZ1bmN0aW9uIFdlKHQpe3ZhciBlPVtdLHI9dC52YWx1ZSxuPXQua2V5LGk9dC5zdHlsZSxhPXQuc3R5bGVTcGVjO3IudHlwZXx8ci5yZWZ8fGUucHVzaChuZXcgRChuLHIsJ2VpdGhlciBcInR5cGVcIiBvciBcInJlZlwiIGlzIHJlcXVpcmVkJykpO3ZhciBvLHM9RihyLnR5cGUpLGw9RihyLnJlZik7aWYoci5pZClmb3IodmFyIGM9RihyLmlkKSx1PTA7dTx0LmFycmF5SW5kZXg7dSsrKXt2YXIgaD1pLmxheWVyc1t1XTtGKGguaWQpPT09YyYmZS5wdXNoKG5ldyBEKG4sci5pZCwnZHVwbGljYXRlIGxheWVyIGlkIFwiJytyLmlkKydcIiwgcHJldmlvdXNseSB1c2VkIGF0IGxpbmUgJytoLmlkLl9fbGluZV9fKSl9aWYoXCJyZWZcImluIHIpW1widHlwZVwiLFwic291cmNlXCIsXCJzb3VyY2UtbGF5ZXJcIixcImZpbHRlclwiLFwibGF5b3V0XCJdLmZvckVhY2goZnVuY3Rpb24odCl7dCBpbiByJiZlLnB1c2gobmV3IEQobixyW3RdLCdcIicrdCsnXCIgaXMgcHJvaGliaXRlZCBmb3IgcmVmIGxheWVycycpKX0pLGkubGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7Rih0LmlkKT09PWwmJihvPXQpfSksbz9vLnJlZj9lLnB1c2gobmV3IEQobixyLnJlZixcInJlZiBjYW5ub3QgcmVmZXJlbmNlIGFub3RoZXIgcmVmIGxheWVyXCIpKTpzPUYoby50eXBlKTplLnB1c2gobmV3IEQobixyLnJlZiwncmVmIGxheWVyIFwiJytsKydcIiBub3QgZm91bmQnKSk7ZWxzZSBpZihcImJhY2tncm91bmRcIiE9PXMpaWYoci5zb3VyY2Upe3ZhciBmPWkuc291cmNlcyYmaS5zb3VyY2VzW3Iuc291cmNlXSxwPWYmJkYoZi50eXBlKTtmP1widmVjdG9yXCI9PT1wJiZcInJhc3RlclwiPT09cz9lLnB1c2gobmV3IEQobixyLnNvdXJjZSwnbGF5ZXIgXCInK3IuaWQrJ1wiIHJlcXVpcmVzIGEgcmFzdGVyIHNvdXJjZScpKTpcInJhc3RlclwiPT09cCYmXCJyYXN0ZXJcIiE9PXM/ZS5wdXNoKG5ldyBEKG4sci5zb3VyY2UsJ2xheWVyIFwiJytyLmlkKydcIiByZXF1aXJlcyBhIHZlY3RvciBzb3VyY2UnKSk6XCJ2ZWN0b3JcIiE9PXB8fHJbXCJzb3VyY2UtbGF5ZXJcIl0/XCJyYXN0ZXItZGVtXCI9PT1wJiZcImhpbGxzaGFkZVwiIT09cz9lLnB1c2gobmV3IEQobixyLnNvdXJjZSxcInJhc3Rlci1kZW0gc291cmNlIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBsYXllciB0eXBlICdoaWxsc2hhZGUnLlwiKSk6XCJsaW5lXCIhPT1zfHwhci5wYWludHx8IXIucGFpbnRbXCJsaW5lLWdyYWRpZW50XCJdfHxcImdlb2pzb25cIj09PXAmJmYubGluZU1ldHJpY3N8fGUucHVzaChuZXcgRChuLHIsJ2xheWVyIFwiJytyLmlkKydcIiBzcGVjaWZpZXMgYSBsaW5lLWdyYWRpZW50LCB3aGljaCByZXF1aXJlcyBhIEdlb0pTT04gc291cmNlIHdpdGggYGxpbmVNZXRyaWNzYCBlbmFibGVkLicpKTplLnB1c2gobmV3IEQobixyLCdsYXllciBcIicrci5pZCsnXCIgbXVzdCBzcGVjaWZ5IGEgXCJzb3VyY2UtbGF5ZXJcIicpKTplLnB1c2gobmV3IEQobixyLnNvdXJjZSwnc291cmNlIFwiJytyLnNvdXJjZSsnXCIgbm90IGZvdW5kJykpfWVsc2UgZS5wdXNoKG5ldyBEKG4sciwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSBcInNvdXJjZVwiJykpO3JldHVybiBlPWUuY29uY2F0KEVlKHtrZXk6bix2YWx1ZTpyLHZhbHVlU3BlYzphLmxheWVyLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOntcIipcIjpmdW5jdGlvbigpe3JldHVybltdfSx0eXBlOmZ1bmN0aW9uKCl7cmV0dXJuIEtlKHtrZXk6bitcIi50eXBlXCIsdmFsdWU6ci50eXBlLHZhbHVlU3BlYzphLmxheWVyLnR5cGUsc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0OnIsb2JqZWN0S2V5OlwidHlwZVwifSl9LGZpbHRlcjpxZSxsYXlvdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIEVlKHtsYXllcjpyLGtleTp0LmtleSx2YWx1ZTp0LnZhbHVlLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOntcIipcIjpmdW5jdGlvbih0KXtyZXR1cm4gWWUoUih7bGF5ZXJUeXBlOnN9LHQpKX19fSl9LHBhaW50OmZ1bmN0aW9uKHQpe3JldHVybiBFZSh7bGF5ZXI6cixrZXk6dC5rZXksdmFsdWU6dC52YWx1ZSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7XCIqXCI6ZnVuY3Rpb24odCl7cmV0dXJuIEdlKFIoe2xheWVyVHlwZTpzfSx0KSl9fX0pfX19KSl9ZnVuY3Rpb24gWGUodCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LG49dC5zdHlsZVNwZWMsaT10LnN0eWxlO2lmKCFlLnR5cGUpcmV0dXJuW25ldyBEKHIsZSwnXCJ0eXBlXCIgaXMgcmVxdWlyZWQnKV07dmFyIGE9RihlLnR5cGUpLG89W107c3dpdGNoKGEpe2Nhc2VcInZlY3RvclwiOmNhc2VcInJhc3RlclwiOmNhc2VcInJhc3Rlci1kZW1cIjppZihvPW8uY29uY2F0KEVlKHtrZXk6cix2YWx1ZTplLHZhbHVlU3BlYzpuW1wic291cmNlX1wiK2EucmVwbGFjZShcIi1cIixcIl9cIildLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOm59KSksXCJ1cmxcImluIGUpZm9yKHZhciBzIGluIGUpW1widHlwZVwiLFwidXJsXCIsXCJ0aWxlU2l6ZVwiXS5pbmRleE9mKHMpPDAmJm8ucHVzaChuZXcgRChyK1wiLlwiK3MsZVtzXSwnYSBzb3VyY2Ugd2l0aCBhIFwidXJsXCIgcHJvcGVydHkgbWF5IG5vdCBpbmNsdWRlIGEgXCInK3MrJ1wiIHByb3BlcnR5JykpO3JldHVybiBvO2Nhc2VcImdlb2pzb25cIjpyZXR1cm4gRWUoe2tleTpyLHZhbHVlOmUsdmFsdWVTcGVjOm4uc291cmNlX2dlb2pzb24sc3R5bGU6aSxzdHlsZVNwZWM6bn0pO2Nhc2VcInZpZGVvXCI6cmV0dXJuIEVlKHtrZXk6cix2YWx1ZTplLHZhbHVlU3BlYzpuLnNvdXJjZV92aWRlbyxzdHlsZTppLHN0eWxlU3BlYzpufSk7Y2FzZVwiaW1hZ2VcIjpyZXR1cm4gRWUoe2tleTpyLHZhbHVlOmUsdmFsdWVTcGVjOm4uc291cmNlX2ltYWdlLHN0eWxlOmksc3R5bGVTcGVjOm59KTtjYXNlXCJjYW52YXNcIjpyZXR1cm4gby5wdXNoKG5ldyBEKHIsbnVsbCxcIlBsZWFzZSB1c2UgcnVudGltZSBBUElzIHRvIGFkZCBjYW52YXMgc291cmNlcywgcmF0aGVyIHRoYW4gaW5jbHVkaW5nIHRoZW0gaW4gc3R5bGVzaGVldHMuXCIsXCJzb3VyY2UuY2FudmFzXCIpKSxvO2RlZmF1bHQ6cmV0dXJuIEllKHtrZXk6citcIi50eXBlXCIsdmFsdWU6ZS50eXBlLHZhbHVlU3BlYzp7dmFsdWVzOltcInZlY3RvclwiLFwicmFzdGVyXCIsXCJyYXN0ZXItZGVtXCIsXCJnZW9qc29uXCIsXCJ2aWRlb1wiLFwiaW1hZ2VcIl19LHN0eWxlOmksc3R5bGVTcGVjOm59KX19ZnVuY3Rpb24gWmUodCl7dmFyIGU9dC52YWx1ZSxyPXQuc3R5bGVTcGVjLG49ci5saWdodCxpPXQuc3R5bGUsYT1bXSxvPWhlKGUpO2lmKHZvaWQgMD09PWUpcmV0dXJuIGE7aWYoXCJvYmplY3RcIiE9PW8pcmV0dXJuIGEuY29uY2F0KFtuZXcgRChcImxpZ2h0XCIsZSxcIm9iamVjdCBleHBlY3RlZCwgXCIrbytcIiBmb3VuZFwiKV0pO2Zvcih2YXIgcyBpbiBlKXt2YXIgbD1zLm1hdGNoKC9eKC4qKS10cmFuc2l0aW9uJC8pO2E9bCYmbltsWzFdXSYmbltsWzFdXS50cmFuc2l0aW9uP2EuY29uY2F0KEtlKHtrZXk6cyx2YWx1ZTplW3NdLHZhbHVlU3BlYzpyLnRyYW5zaXRpb24sc3R5bGU6aSxzdHlsZVNwZWM6cn0pKTpuW3NdP2EuY29uY2F0KEtlKHtrZXk6cyx2YWx1ZTplW3NdLHZhbHVlU3BlYzpuW3NdLHN0eWxlOmksc3R5bGVTcGVjOnJ9KSk6YS5jb25jYXQoW25ldyBEKHMsZVtzXSwndW5rbm93biBwcm9wZXJ0eSBcIicrcysnXCInKV0pfXJldHVybiBhfWZ1bmN0aW9uICRlKHQpe3ZhciBlPXQudmFsdWUscj10LmtleSxuPWhlKGUpO3JldHVyblwic3RyaW5nXCIhPT1uP1tuZXcgRChyLGUsXCJzdHJpbmcgZXhwZWN0ZWQsIFwiK24rXCIgZm91bmRcIildOltdfXZhciBKZT17XCIqXCI6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sYXJyYXk6Q2UsYm9vbGVhbjpmdW5jdGlvbih0KXt2YXIgZT10LnZhbHVlLHI9dC5rZXksbj1oZShlKTtyZXR1cm5cImJvb2xlYW5cIiE9PW4/W25ldyBEKHIsZSxcImJvb2xlYW4gZXhwZWN0ZWQsIFwiK24rXCIgZm91bmRcIildOltdfSxudW1iZXI6TGUsY29sb3I6ZnVuY3Rpb24odCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG49aGUocik7cmV0dXJuXCJzdHJpbmdcIiE9PW4/W25ldyBEKGUscixcImNvbG9yIGV4cGVjdGVkLCBcIituK1wiIGZvdW5kXCIpXTpudWxsPT09UShyKT9bbmV3IEQoZSxyLCdjb2xvciBleHBlY3RlZCwgXCInK3IrJ1wiIGZvdW5kJyldOltdfSxjb25zdGFudHM6UCxlbnVtOkllLGZpbHRlcjpxZSxmdW5jdGlvbjp6ZSxsYXllcjpXZSxvYmplY3Q6RWUsc291cmNlOlhlLGxpZ2h0OlplLHN0cmluZzokZX07ZnVuY3Rpb24gS2UodCl7dmFyIGU9dC52YWx1ZSxyPXQudmFsdWVTcGVjLG49dC5zdHlsZVNwZWM7cmV0dXJuIHIuZnVuY3Rpb24mJmZlKEYoZSkpP3plKHQpOnIuZnVuY3Rpb24mJl9lKEIoZSkpP09lKHQpOnIudHlwZSYmSmVbci50eXBlXT9KZVtyLnR5cGVdKHQpOkVlKFIoe30sdCx7dmFsdWVTcGVjOnIudHlwZT9uW3IudHlwZV06cn0pKX1mdW5jdGlvbiBRZSh0KXt2YXIgZT10LnZhbHVlLHI9dC5rZXksbj0kZSh0KTtyZXR1cm4gbi5sZW5ndGg/bjooLTE9PT1lLmluZGV4T2YoXCJ7Zm9udHN0YWNrfVwiKSYmbi5wdXNoKG5ldyBEKHIsZSwnXCJnbHlwaHNcIiB1cmwgbXVzdCBpbmNsdWRlIGEgXCJ7Zm9udHN0YWNrfVwiIHRva2VuJykpLC0xPT09ZS5pbmRleE9mKFwie3JhbmdlfVwiKSYmbi5wdXNoKG5ldyBEKHIsZSwnXCJnbHlwaHNcIiB1cmwgbXVzdCBpbmNsdWRlIGEgXCJ7cmFuZ2V9XCIgdG9rZW4nKSksbil9ZnVuY3Rpb24gdHIodCxlKXtlPWV8fEk7dmFyIHI9W107cmV0dXJuIHI9ci5jb25jYXQoS2Uoe2tleTpcIlwiLHZhbHVlOnQsdmFsdWVTcGVjOmUuJHJvb3Qsc3R5bGVTcGVjOmUsc3R5bGU6dCxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7Z2x5cGhzOlFlLFwiKlwiOmZ1bmN0aW9uKCl7cmV0dXJuW119fX0pKSx0LmNvbnN0YW50cyYmKHI9ci5jb25jYXQoUCh7a2V5OlwiY29uc3RhbnRzXCIsdmFsdWU6dC5jb25zdGFudHMsc3R5bGU6dCxzdHlsZVNwZWM6ZX0pKSksZXIocil9ZnVuY3Rpb24gZXIodCl7cmV0dXJuW10uY29uY2F0KHQpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5saW5lLWUubGluZX0pfWZ1bmN0aW9uIHJyKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlcih0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fXRyLnNvdXJjZT1ycihYZSksdHIubGlnaHQ9cnIoWmUpLHRyLmxheWVyPXJyKFdlKSx0ci5maWx0ZXI9cnIocWUpLHRyLnBhaW50UHJvcGVydHk9cnIoR2UpLHRyLmxheW91dFByb3BlcnR5PXJyKFllKTt2YXIgbnI9dHIsaXI9dHIubGlnaHQsYXI9dHIucGFpbnRQcm9wZXJ0eSxvcj10ci5sYXlvdXRQcm9wZXJ0eTtmdW5jdGlvbiBzcih0LGUpe3ZhciByPSExO2lmKGUmJmUubGVuZ3RoKWZvcih2YXIgbj0wLGk9ZTtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07dC5maXJlKG5ldyB6KG5ldyBFcnJvcihhLm1lc3NhZ2UpKSkscj0hMH1yZXR1cm4gcn12YXIgbHI9dXIsY3I9MztmdW5jdGlvbiB1cih0LGUscil7dmFyIG49dGhpcy5jZWxscz1bXTtpZih0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpe3RoaXMuYXJyYXlCdWZmZXI9dDt2YXIgaT1uZXcgSW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTt0PWlbMF0sZT1pWzFdLHI9aVsyXSx0aGlzLmQ9ZSsyKnI7Zm9yKHZhciBhPTA7YTx0aGlzLmQqdGhpcy5kO2ErKyl7dmFyIG89aVtjcithXSxzPWlbY3IrYSsxXTtuLnB1c2gobz09PXM/bnVsbDppLnN1YmFycmF5KG8scykpfXZhciBsPWlbY3Irbi5sZW5ndGhdLGM9aVtjcituLmxlbmd0aCsxXTt0aGlzLmtleXM9aS5zdWJhcnJheShsLGMpLHRoaXMuYmJveGVzPWkuc3ViYXJyYXkoYyksdGhpcy5pbnNlcnQ9dGhpcy5faW5zZXJ0UmVhZG9ubHl9ZWxzZXt0aGlzLmQ9ZSsyKnI7Zm9yKHZhciB1PTA7dTx0aGlzLmQqdGhpcy5kO3UrKyluLnB1c2goW10pO3RoaXMua2V5cz1bXSx0aGlzLmJib3hlcz1bXX10aGlzLm49ZSx0aGlzLmV4dGVudD10LHRoaXMucGFkZGluZz1yLHRoaXMuc2NhbGU9ZS90LHRoaXMudWlkPTA7dmFyIGg9ci9lKnQ7dGhpcy5taW49LWgsdGhpcy5tYXg9dCtofXVyLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLl9mb3JFYWNoQ2VsbChlLHIsbixpLHRoaXMuX2luc2VydENlbGwsdGhpcy51aWQrKyksdGhpcy5rZXlzLnB1c2godCksdGhpcy5iYm94ZXMucHVzaChlKSx0aGlzLmJib3hlcy5wdXNoKHIpLHRoaXMuYmJveGVzLnB1c2gobiksdGhpcy5iYm94ZXMucHVzaChpKX0sdXIucHJvdG90eXBlLl9pbnNlcnRSZWFkb25seT1mdW5jdGlvbigpe3Rocm93XCJDYW5ub3QgaW5zZXJ0IGludG8gYSBHcmlkSW5kZXggY3JlYXRlZCBmcm9tIGFuIEFycmF5QnVmZmVyLlwifSx1ci5wcm90b3R5cGUuX2luc2VydENlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuY2VsbHNbaV0ucHVzaChhKX0sdXIucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMubWluLGE9dGhpcy5tYXg7aWYodDw9aSYmZTw9aSYmYTw9ciYmYTw9bilyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5rZXlzKTt2YXIgbz1bXTtyZXR1cm4gdGhpcy5fZm9yRWFjaENlbGwodCxlLHIsbix0aGlzLl9xdWVyeUNlbGwsbyx7fSksb30sdXIucHJvdG90eXBlLl9xdWVyeUNlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9dGhpcy5jZWxsc1tpXTtpZihudWxsIT09cylmb3IodmFyIGw9dGhpcy5rZXlzLGM9dGhpcy5iYm94ZXMsdT0wO3U8cy5sZW5ndGg7dSsrKXt2YXIgaD1zW3VdO2lmKHZvaWQgMD09PW9baF0pe3ZhciBmPTQqaDt0PD1jW2YrMl0mJmU8PWNbZiszXSYmcj49Y1tmKzBdJiZuPj1jW2YrMV0/KG9baF09ITAsYS5wdXNoKGxbaF0pKTpvW2hdPSExfX19LHVyLnByb3RvdHlwZS5fZm9yRWFjaENlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZCh0KSxsPXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZChlKSxjPXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZChyKSx1PXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZChuKSxoPXM7aDw9YztoKyspZm9yKHZhciBmPWw7Zjw9dTtmKyspe3ZhciBwPXRoaXMuZCpmK2g7aWYoaS5jYWxsKHRoaXMsdCxlLHIsbixwLGEsbykpcmV0dXJufX0sdXIucHJvdG90eXBlLl9jb252ZXJ0VG9DZWxsQ29vcmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5kLTEsTWF0aC5mbG9vcih0KnRoaXMuc2NhbGUpK3RoaXMucGFkZGluZykpfSx1ci5wcm90b3R5cGUudG9BcnJheUJ1ZmZlcj1mdW5jdGlvbigpe2lmKHRoaXMuYXJyYXlCdWZmZXIpcmV0dXJuIHRoaXMuYXJyYXlCdWZmZXI7Zm9yKHZhciB0PXRoaXMuY2VsbHMsZT1jcit0aGlzLmNlbGxzLmxlbmd0aCsxKzEscj0wLG49MDtuPHRoaXMuY2VsbHMubGVuZ3RoO24rKylyKz10aGlzLmNlbGxzW25dLmxlbmd0aDt2YXIgaT1uZXcgSW50MzJBcnJheShlK3IrdGhpcy5rZXlzLmxlbmd0aCt0aGlzLmJib3hlcy5sZW5ndGgpO2lbMF09dGhpcy5leHRlbnQsaVsxXT10aGlzLm4saVsyXT10aGlzLnBhZGRpbmc7Zm9yKHZhciBhPWUsbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dO2lbY3Irb109YSxpLnNldChzLGEpLGErPXMubGVuZ3RofXJldHVybiBpW2NyK3QubGVuZ3RoXT1hLGkuc2V0KHRoaXMua2V5cyxhKSxhKz10aGlzLmtleXMubGVuZ3RoLGlbY3IrdC5sZW5ndGgrMV09YSxpLnNldCh0aGlzLmJib3hlcyxhKSxhKz10aGlzLmJib3hlcy5sZW5ndGgsaS5idWZmZXJ9O3ZhciBocj1zZWxmLkltYWdlRGF0YSxmcj17fTtmdW5jdGlvbiBwcih0LGUscil7dm9pZCAwPT09ciYmKHI9e30pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiX2NsYXNzUmVnaXN0cnlLZXlcIix7dmFsdWU6dCx3cml0ZWFibGU6ITF9KSxmclt0XT17a2xhc3M6ZSxvbWl0OnIub21pdHx8W10sc2hhbGxvdzpyLnNoYWxsb3d8fFtdfX1mb3IodmFyIGRyIGluIHByKFwiT2JqZWN0XCIsT2JqZWN0KSxsci5zZXJpYWxpemU9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnRvQXJyYXlCdWZmZXIoKTtyZXR1cm4gZSYmZS5wdXNoKHIpLHJ9LGxyLmRlc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbHIodCl9LHByKFwiR3JpZFwiLGxyKSxwcihcIkNvbG9yXCIsdHQpLHByKFwiRXJyb3JcIixFcnJvcikscHIoXCJTdHlsZVByb3BlcnR5RnVuY3Rpb25cIixNZSkscHIoXCJTdHlsZUV4cHJlc3Npb25cIixiZSx7b21pdDpbXCJfZXZhbHVhdG9yXCJdfSkscHIoXCJab29tRGVwZW5kZW50RXhwcmVzc2lvblwiLEFlKSxwcihcIlpvb21Db25zdGFudEV4cHJlc3Npb25cIixrZSkscHIoXCJDb21wb3VuZEV4cHJlc3Npb25cIixndCx7b21pdDpbXCJfZXZhbHVhdGVcIl19KSxSdClSdFtkcl0uX2NsYXNzUmVnaXN0cnlLZXl8fHByKFwiRXhwcmVzc2lvbl9cIitkcixSdFtkcl0pO2Z1bmN0aW9uIGdyKHQsZSl7aWYobnVsbD09dHx8XCJib29sZWFuXCI9PXR5cGVvZiB0fHxcIm51bWJlclwiPT10eXBlb2YgdHx8XCJzdHJpbmdcIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBCb29sZWFufHx0IGluc3RhbmNlb2YgTnVtYmVyfHx0IGluc3RhbmNlb2YgU3RyaW5nfHx0IGluc3RhbmNlb2YgRGF0ZXx8dCBpbnN0YW5jZW9mIFJlZ0V4cClyZXR1cm4gdDtpZih0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIGUmJmUucHVzaCh0KSx0O2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KSl7dmFyIHI9dDtyZXR1cm4gZSYmZS5wdXNoKHIuYnVmZmVyKSxyfWlmKHQgaW5zdGFuY2VvZiBocilyZXR1cm4gZSYmZS5wdXNoKHQuZGF0YS5idWZmZXIpLHQ7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBuPVtdLGk9MCxhPXQ7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO24ucHVzaChncihvLGUpKX1yZXR1cm4gbn1pZihcIm9iamVjdFwiPT10eXBlb2YgdCl7dmFyIHM9dC5jb25zdHJ1Y3RvcixsPXMuX2NsYXNzUmVnaXN0cnlLZXk7aWYoIWwpdGhyb3cgbmV3IEVycm9yKFwiY2FuJ3Qgc2VyaWFsaXplIG9iamVjdCBvZiB1bnJlZ2lzdGVyZWQgY2xhc3NcIik7dmFyIGM9e307aWYocy5zZXJpYWxpemUpYy5fc2VyaWFsaXplZD1zLnNlcmlhbGl6ZSh0LGUpO2Vsc2V7Zm9yKHZhciB1IGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eSh1KSYmIShmcltsXS5vbWl0LmluZGV4T2YodSk+PTApKXt2YXIgaD10W3VdO2NbdV09ZnJbbF0uc2hhbGxvdy5pbmRleE9mKHUpPj0wP2g6Z3IoaCxlKX10IGluc3RhbmNlb2YgRXJyb3ImJihjLm1lc3NhZ2U9dC5tZXNzYWdlKX1yZXR1cm57bmFtZTpsLHByb3BlcnRpZXM6Y319dGhyb3cgbmV3IEVycm9yKFwiY2FuJ3Qgc2VyaWFsaXplIG9iamVjdCBvZiB0eXBlIFwiK3R5cGVvZiB0KX1mdW5jdGlvbiB2cih0KXtpZihudWxsPT10fHxcImJvb2xlYW5cIj09dHlwZW9mIHR8fFwibnVtYmVyXCI9PXR5cGVvZiB0fHxcInN0cmluZ1wiPT10eXBlb2YgdHx8dCBpbnN0YW5jZW9mIEJvb2xlYW58fHQgaW5zdGFuY2VvZiBOdW1iZXJ8fHQgaW5zdGFuY2VvZiBTdHJpbmd8fHQgaW5zdGFuY2VvZiBEYXRlfHx0IGluc3RhbmNlb2YgUmVnRXhwfHx0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fEFycmF5QnVmZmVyLmlzVmlldyh0KXx8dCBpbnN0YW5jZW9mIGhyKXJldHVybiB0O2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB2cih0KX0pO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KXt2YXIgZT10LHI9ZS5uYW1lLG49ZS5wcm9wZXJ0aWVzO2lmKCFyKXRocm93IG5ldyBFcnJvcihcImNhbid0IGRlc2VyaWFsaXplIG9iamVjdCBvZiBhbm9ueW1vdXMgY2xhc3NcIik7dmFyIGk9ZnJbcl0ua2xhc3M7aWYoIWkpdGhyb3cgbmV3IEVycm9yKFwiY2FuJ3QgZGVzZXJpYWxpemUgdW5yZWdpc3RlcmVkIGNsYXNzIFwiK3IpO2lmKGkuZGVzZXJpYWxpemUpcmV0dXJuIGkuZGVzZXJpYWxpemUobi5fc2VyaWFsaXplZCk7Zm9yKHZhciBhPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLG89MCxzPU9iamVjdC5rZXlzKG4pO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXTthW2xdPWZyW3JdLnNoYWxsb3cuaW5kZXhPZihsKT49MD9uW2xdOnZyKG5bbF0pfXJldHVybiBhfXRocm93IG5ldyBFcnJvcihcImNhbid0IGRlc2VyaWFsaXplIG9iamVjdCBvZiB0eXBlIFwiK3R5cGVvZiB0KX12YXIgbXI9ZnVuY3Rpb24oKXt0aGlzLmZpcnN0PSEwfTttci5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5mbG9vcih0KTtyZXR1cm4gdGhpcy5maXJzdD8odGhpcy5maXJzdD0hMSx0aGlzLmxhc3RJbnRlZ2VyWm9vbT1yLHRoaXMubGFzdEludGVnZXJab29tVGltZT0wLHRoaXMubGFzdFpvb209dCx0aGlzLmxhc3RGbG9vclpvb209ciwhMCk6KHRoaXMubGFzdEZsb29yWm9vbT5yPyh0aGlzLmxhc3RJbnRlZ2VyWm9vbT1yKzEsdGhpcy5sYXN0SW50ZWdlclpvb21UaW1lPWUpOnRoaXMubGFzdEZsb29yWm9vbTxyJiYodGhpcy5sYXN0SW50ZWdlclpvb209cix0aGlzLmxhc3RJbnRlZ2VyWm9vbVRpbWU9ZSksdCE9PXRoaXMubGFzdFpvb20mJih0aGlzLmxhc3Rab29tPXQsdGhpcy5sYXN0Rmxvb3Jab29tPXIsITApKX07dmFyIHlyPXtcIkxhdGluLTEgU3VwcGxlbWVudFwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjgmJnQ8PTI1NX0sQXJhYmljOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xNTM2JiZ0PD0xNzkxfSxcIkFyYWJpYyBTdXBwbGVtZW50XCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTE4NzImJnQ8PTE5MTl9LFwiQXJhYmljIEV4dGVuZGVkLUFcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MjIwOCYmdDw9MjMwM30sXCJIYW5ndWwgSmFtb1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj00MzUyJiZ0PD00NjA3fSxcIlVuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3NcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NTEyMCYmdDw9NTc1OX0sS2htZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTYwMTYmJnQ8PTYxNDN9LFwiVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyBFeHRlbmRlZFwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02MzIwJiZ0PD02Mzk5fSxcIkdlbmVyYWwgUHVuY3R1YXRpb25cIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49ODE5MiYmdDw9ODMwM30sXCJMZXR0ZXJsaWtlIFN5bWJvbHNcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49ODQ0OCYmdDw9ODUyN30sXCJOdW1iZXIgRm9ybXNcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49ODUyOCYmdDw9ODU5MX0sXCJNaXNjZWxsYW5lb3VzIFRlY2huaWNhbFwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj04OTYwJiZ0PD05MjE1fSxcIkNvbnRyb2wgUGljdHVyZXNcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49OTIxNiYmdDw9OTI3OX0sXCJPcHRpY2FsIENoYXJhY3RlciBSZWNvZ25pdGlvblwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj05MjgwJiZ0PD05MzExfSxcIkVuY2xvc2VkIEFscGhhbnVtZXJpY3NcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49OTMxMiYmdDw9OTQ3MX0sXCJHZW9tZXRyaWMgU2hhcGVzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTk2MzImJnQ8PTk3Mjd9LFwiTWlzY2VsbGFuZW91cyBTeW1ib2xzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTk3MjgmJnQ8PTk5ODN9LFwiTWlzY2VsbGFuZW91cyBTeW1ib2xzIGFuZCBBcnJvd3NcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTEwMDgmJnQ8PTExMjYzfSxcIkNKSyBSYWRpY2FscyBTdXBwbGVtZW50XCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTExOTA0JiZ0PD0xMjAzMX0sXCJLYW5neGkgUmFkaWNhbHNcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTIwMzImJnQ8PTEyMjU1fSxcIklkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnNcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTIyNzImJnQ8PTEyMjg3fSxcIkNKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvblwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjI4OCYmdDw9MTIzNTF9LEhpcmFnYW5hOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjM1MiYmdDw9MTI0NDd9LEthdGFrYW5hOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjQ0OCYmdDw9MTI1NDN9LEJvcG9tb2ZvOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjU0NCYmdDw9MTI1OTF9LFwiSGFuZ3VsIENvbXBhdGliaWxpdHkgSmFtb1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjU5MiYmdDw9MTI2ODd9LEthbmJ1bjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI2ODgmJnQ8PTEyNzAzfSxcIkJvcG9tb2ZvIEV4dGVuZGVkXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyNzA0JiZ0PD0xMjczNX0sXCJDSksgU3Ryb2tlc1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjczNiYmdDw9MTI3ODN9LFwiS2F0YWthbmEgUGhvbmV0aWMgRXh0ZW5zaW9uc1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjc4NCYmdDw9MTI3OTl9LFwiRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRoc1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjgwMCYmdDw9MTMwNTV9LFwiQ0pLIENvbXBhdGliaWxpdHlcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTMwNTYmJnQ8PTEzMzExfSxcIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEFcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTMzMTImJnQ8PTE5OTAzfSxcIllpamluZyBIZXhhZ3JhbSBTeW1ib2xzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTE5OTA0JiZ0PD0xOTk2N30sXCJDSksgVW5pZmllZCBJZGVvZ3JhcGhzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTE5OTY4JiZ0PD00MDk1OX0sXCJZaSBTeWxsYWJsZXNcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NDA5NjAmJnQ8PTQyMTI3fSxcIllpIFJhZGljYWxzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTQyMTI4JiZ0PD00MjE5MX0sXCJIYW5ndWwgSmFtbyBFeHRlbmRlZC1BXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTQzMzYwJiZ0PD00MzM5MX0sXCJIYW5ndWwgU3lsbGFibGVzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTQ0MDMyJiZ0PD01NTIxNX0sXCJIYW5ndWwgSmFtbyBFeHRlbmRlZC1CXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTU1MjE2JiZ0PD01NTI5NX0sXCJQcml2YXRlIFVzZSBBcmVhXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTU3MzQ0JiZ0PD02Mzc0M30sXCJDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTYzNzQ0JiZ0PD02NDI1NX0sXCJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUFcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjQzMzYmJnQ8PTY1MDIzfSxcIlZlcnRpY2FsIEZvcm1zXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY1MDQwJiZ0PD02NTA1NX0sXCJDSksgQ29tcGF0aWJpbGl0eSBGb3Jtc1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NTA3MiYmdDw9NjUxMDN9LFwiU21hbGwgRm9ybSBWYXJpYW50c1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NTEwNCYmdDw9NjUxMzV9LFwiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY1MTM2JiZ0PD02NTI3OX0sXCJIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3Jtc1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NTI4MCYmdDw9NjU1MTl9fTtmdW5jdGlvbiB4cih0KXtmb3IodmFyIGU9MCxyPXQ7ZTxyLmxlbmd0aDtlKz0xKWlmKF9yKHJbZV0uY2hhckNvZGVBdCgwKSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gYnIodCl7cmV0dXJuISh5ci5BcmFiaWModCl8fHlyW1wiQXJhYmljIFN1cHBsZW1lbnRcIl0odCl8fHlyW1wiQXJhYmljIEV4dGVuZGVkLUFcIl0odCl8fHlyW1wiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BXCJdKHQpfHx5cltcIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQlwiXSh0KSl9ZnVuY3Rpb24gX3IodCl7cmV0dXJuISEoNzQ2PT09dHx8NzQ3PT09dHx8ISh0PDQzNTIpJiYoeXJbXCJCb3BvbW9mbyBFeHRlbmRlZFwiXSh0KXx8eXIuQm9wb21vZm8odCl8fHlyW1wiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXNcIl0odCkmJiEodD49NjUwOTcmJnQ8PTY1MTAzKXx8eXJbXCJDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzXCJdKHQpfHx5cltcIkNKSyBDb21wYXRpYmlsaXR5XCJdKHQpfHx5cltcIkNKSyBSYWRpY2FscyBTdXBwbGVtZW50XCJdKHQpfHx5cltcIkNKSyBTdHJva2VzXCJdKHQpfHwhKCF5cltcIkNKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvblwiXSh0KXx8dD49MTIyOTYmJnQ8PTEyMzA1fHx0Pj0xMjMwOCYmdDw9MTIzMTl8fDEyMzM2PT09dCl8fHlyW1wiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQVwiXSh0KXx8eXJbXCJDSksgVW5pZmllZCBJZGVvZ3JhcGhzXCJdKHQpfHx5cltcIkVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHNcIl0odCl8fHlyW1wiSGFuZ3VsIENvbXBhdGliaWxpdHkgSmFtb1wiXSh0KXx8eXJbXCJIYW5ndWwgSmFtbyBFeHRlbmRlZC1BXCJdKHQpfHx5cltcIkhhbmd1bCBKYW1vIEV4dGVuZGVkLUJcIl0odCl8fHlyW1wiSGFuZ3VsIEphbW9cIl0odCl8fHlyW1wiSGFuZ3VsIFN5bGxhYmxlc1wiXSh0KXx8eXIuSGlyYWdhbmEodCl8fHlyW1wiSWRlb2dyYXBoaWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVyc1wiXSh0KXx8eXIuS2FuYnVuKHQpfHx5cltcIkthbmd4aSBSYWRpY2Fsc1wiXSh0KXx8eXJbXCJLYXRha2FuYSBQaG9uZXRpYyBFeHRlbnNpb25zXCJdKHQpfHx5ci5LYXRha2FuYSh0KSYmMTI1NDAhPT10fHwhKCF5cltcIkhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zXCJdKHQpfHw2NTI4OD09PXR8fDY1Mjg5PT09dHx8NjUyOTM9PT10fHx0Pj02NTMwNiYmdDw9NjUzMTB8fDY1MzM5PT09dHx8NjUzNDE9PT10fHw2NTM0Mz09PXR8fHQ+PTY1MzcxJiZ0PD02NTUwM3x8NjU1MDc9PT10fHx0Pj02NTUxMiYmdDw9NjU1MTkpfHwhKCF5cltcIlNtYWxsIEZvcm0gVmFyaWFudHNcIl0odCl8fHQ+PTY1MTEyJiZ0PD02NTExOHx8dD49NjUxMjMmJnQ8PTY1MTI2KXx8eXJbXCJVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzXCJdKHQpfHx5cltcIlVuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3MgRXh0ZW5kZWRcIl0odCl8fHlyW1wiVmVydGljYWwgRm9ybXNcIl0odCl8fHlyW1wiWWlqaW5nIEhleGFncmFtIFN5bWJvbHNcIl0odCl8fHlyW1wiWWkgU3lsbGFibGVzXCJdKHQpfHx5cltcIllpIFJhZGljYWxzXCJdKHQpKSl9ZnVuY3Rpb24gd3IodCl7cmV0dXJuIShfcih0KXx8ZnVuY3Rpb24odCl7cmV0dXJuISEoeXJbXCJMYXRpbi0xIFN1cHBsZW1lbnRcIl0odCkmJigxNjc9PT10fHwxNjk9PT10fHwxNzQ9PT10fHwxNzc9PT10fHwxODg9PT10fHwxODk9PT10fHwxOTA9PT10fHwyMTU9PT10fHwyNDc9PT10KXx8eXJbXCJHZW5lcmFsIFB1bmN0dWF0aW9uXCJdKHQpJiYoODIxND09PXR8fDgyMjQ9PT10fHw4MjI1PT09dHx8ODI0MD09PXR8fDgyNDE9PT10fHw4MjUxPT09dHx8ODI1Mj09PXR8fDgyNTg9PT10fHw4MjYzPT09dHx8ODI2ND09PXR8fDgyNjU9PT10fHw4MjczPT09dCl8fHlyW1wiTGV0dGVybGlrZSBTeW1ib2xzXCJdKHQpfHx5cltcIk51bWJlciBGb3Jtc1wiXSh0KXx8eXJbXCJNaXNjZWxsYW5lb3VzIFRlY2huaWNhbFwiXSh0KSYmKHQ+PTg5NjAmJnQ8PTg5Njd8fHQ+PTg5NzImJnQ8PTg5OTF8fHQ+PTg5OTYmJnQ8PTllM3x8OTAwMz09PXR8fHQ+PTkwODUmJnQ8PTkxMTR8fHQ+PTkxNTAmJnQ8PTkxNjV8fDkxNjc9PT10fHx0Pj05MTY5JiZ0PD05MTc5fHx0Pj05MTg2JiZ0PD05MjE1KXx8eXJbXCJDb250cm9sIFBpY3R1cmVzXCJdKHQpJiY5MjUxIT09dHx8eXJbXCJPcHRpY2FsIENoYXJhY3RlciBSZWNvZ25pdGlvblwiXSh0KXx8eXJbXCJFbmNsb3NlZCBBbHBoYW51bWVyaWNzXCJdKHQpfHx5cltcIkdlb21ldHJpYyBTaGFwZXNcIl0odCl8fHlyW1wiTWlzY2VsbGFuZW91cyBTeW1ib2xzXCJdKHQpJiYhKHQ+PTk3NTQmJnQ8PTk3NTkpfHx5cltcIk1pc2NlbGxhbmVvdXMgU3ltYm9scyBhbmQgQXJyb3dzXCJdKHQpJiYodD49MTEwMjYmJnQ8PTExMDU1fHx0Pj0xMTA4OCYmdDw9MTEwOTd8fHQ+PTExMTkyJiZ0PD0xMTI0Myl8fHlyW1wiQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uXCJdKHQpfHx5ci5LYXRha2FuYSh0KXx8eXJbXCJQcml2YXRlIFVzZSBBcmVhXCJdKHQpfHx5cltcIkNKSyBDb21wYXRpYmlsaXR5IEZvcm1zXCJdKHQpfHx5cltcIlNtYWxsIEZvcm0gVmFyaWFudHNcIl0odCl8fHlyW1wiSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXNcIl0odCl8fDg3MzQ9PT10fHw4NzU2PT09dHx8ODc1Nz09PXR8fHQ+PTk5ODQmJnQ8PTEwMDg3fHx0Pj0xMDEwMiYmdDw9MTAxMzF8fDY1NTMyPT09dHx8NjU1MzM9PT10KX0odCkpfWZ1bmN0aW9uIGtyKHQsZSl7cmV0dXJuISghZSYmKHQ+PTE0MjQmJnQ8PTIzMDN8fHlyW1wiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BXCJdKHQpfHx5cltcIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQlwiXSh0KSl8fHQ+PTIzMDQmJnQ8PTM1ODN8fHQ+PTM4NDAmJnQ8PTQyNTV8fHlyLktobWVyKHQpKX12YXIgQXIsVHI9ITEsTXI9bnVsbCxTcj0hMSxFcj1uZXcgTyxDcj17YXBwbHlBcmFiaWNTaGFwaW5nOm51bGwscHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0Om51bGwsaXNMb2FkZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gU3J8fG51bGwhPUNyLmFwcGx5QXJhYmljU2hhcGluZ319LExyPWZ1bmN0aW9uKHQsZSl7dGhpcy56b29tPXQsZT8odGhpcy5ub3c9ZS5ub3csdGhpcy5mYWRlRHVyYXRpb249ZS5mYWRlRHVyYXRpb24sdGhpcy56b29tSGlzdG9yeT1lLnpvb21IaXN0b3J5LHRoaXMudHJhbnNpdGlvbj1lLnRyYW5zaXRpb24pOih0aGlzLm5vdz0wLHRoaXMuZmFkZUR1cmF0aW9uPTAsdGhpcy56b29tSGlzdG9yeT1uZXcgbXIsdGhpcy50cmFuc2l0aW9uPXt9KX07THIucHJvdG90eXBlLmlzU3VwcG9ydGVkU2NyaXB0PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49dDtyPG4ubGVuZ3RoO3IrPTEpaWYoIWtyKG5bcl0uY2hhckNvZGVBdCgwKSxlKSlyZXR1cm4hMTtyZXR1cm4hMH0odCxDci5pc0xvYWRlZCgpKX0sTHIucHJvdG90eXBlLmNyb3NzRmFkaW5nRmFjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmZhZGVEdXJhdGlvbj8xOk1hdGgubWluKCh0aGlzLm5vdy10aGlzLnpvb21IaXN0b3J5Lmxhc3RJbnRlZ2VyWm9vbVRpbWUpL3RoaXMuZmFkZUR1cmF0aW9uLDEpfTt2YXIgenI9ZnVuY3Rpb24odCxlKXt0aGlzLnByb3BlcnR5PXQsdGhpcy52YWx1ZT1lLHRoaXMuZXhwcmVzc2lvbj1TZSh2b2lkIDA9PT1lP3Quc3BlY2lmaWNhdGlvbi5kZWZhdWx0OmUsdC5zcGVjaWZpY2F0aW9uKX07enIucHJvdG90eXBlLmlzRGF0YURyaXZlbj1mdW5jdGlvbigpe3JldHVyblwic291cmNlXCI9PT10aGlzLmV4cHJlc3Npb24ua2luZHx8XCJjb21wb3NpdGVcIj09PXRoaXMuZXhwcmVzc2lvbi5raW5kfSx6ci5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9wZXJ0eS5wb3NzaWJseUV2YWx1YXRlKHRoaXMsdCl9O3ZhciBPcj1mdW5jdGlvbih0KXt0aGlzLnByb3BlcnR5PXQsdGhpcy52YWx1ZT1uZXcgenIodCx2b2lkIDApfTtPci5wcm90b3R5cGUudHJhbnNpdGlvbmVkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBEcih0aGlzLnByb3BlcnR5LHRoaXMudmFsdWUsZSxwKHt9LHQudHJhbnNpdGlvbix0aGlzLnRyYW5zaXRpb24pLHQubm93KX0sT3IucHJvdG90eXBlLnVudHJhbnNpdGlvbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEcih0aGlzLnByb3BlcnR5LHRoaXMudmFsdWUsbnVsbCx7fSwwKX07dmFyIElyPWZ1bmN0aW9uKHQpe3RoaXMuX3Byb3BlcnRpZXM9dCx0aGlzLl92YWx1ZXM9T2JqZWN0LmNyZWF0ZSh0LmRlZmF1bHRUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVzKX07SXIucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB4KHRoaXMuX3ZhbHVlc1t0XS52YWx1ZS52YWx1ZSl9LElyLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3RoaXMuX3ZhbHVlcy5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuX3ZhbHVlc1t0XT1uZXcgT3IodGhpcy5fdmFsdWVzW3RdLnByb3BlcnR5KSksdGhpcy5fdmFsdWVzW3RdLnZhbHVlPW5ldyB6cih0aGlzLl92YWx1ZXNbdF0ucHJvcGVydHksbnVsbD09PWU/dm9pZCAwOngoZSkpfSxJci5wcm90b3R5cGUuZ2V0VHJhbnNpdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4geCh0aGlzLl92YWx1ZXNbdF0udHJhbnNpdGlvbil9LElyLnByb3RvdHlwZS5zZXRUcmFuc2l0aW9uPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmFsdWVzLmhhc093blByb3BlcnR5KHQpfHwodGhpcy5fdmFsdWVzW3RdPW5ldyBPcih0aGlzLl92YWx1ZXNbdF0ucHJvcGVydHkpKSx0aGlzLl92YWx1ZXNbdF0udHJhbnNpdGlvbj14KGUpfHx2b2lkIDB9LElyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sZT0wLHI9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0saT10aGlzLmdldFZhbHVlKG4pO3ZvaWQgMCE9PWkmJih0W25dPWkpO3ZhciBhPXRoaXMuZ2V0VHJhbnNpdGlvbihuKTt2b2lkIDAhPT1hJiYodFtuK1wiLXRyYW5zaXRpb25cIl09YSl9cmV0dXJuIHR9LElyLnByb3RvdHlwZS50cmFuc2l0aW9uZWQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IFByKHRoaXMuX3Byb3BlcnRpZXMpLG49MCxpPU9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcyk7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO3IuX3ZhbHVlc1thXT10aGlzLl92YWx1ZXNbYV0udHJhbnNpdGlvbmVkKHQsZS5fdmFsdWVzW2FdKX1yZXR1cm4gcn0sSXIucHJvdG90eXBlLnVudHJhbnNpdGlvbmVkPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBQcih0aGlzLl9wcm9wZXJ0aWVzKSxlPTAscj1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXTt0Ll92YWx1ZXNbbl09dGhpcy5fdmFsdWVzW25dLnVudHJhbnNpdGlvbmVkKCl9cmV0dXJuIHR9O3ZhciBEcj1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMucHJvcGVydHk9dCx0aGlzLnZhbHVlPWUsdGhpcy5iZWdpbj1pK24uZGVsYXl8fDAsdGhpcy5lbmQ9dGhpcy5iZWdpbituLmR1cmF0aW9ufHwwLHQuc3BlY2lmaWNhdGlvbi50cmFuc2l0aW9uJiYobi5kZWxheXx8bi5kdXJhdGlvbikmJih0aGlzLnByaW9yPXIpfTtEci5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10Lm5vd3x8MCxyPXRoaXMudmFsdWUucG9zc2libHlFdmFsdWF0ZSh0KSxuPXRoaXMucHJpb3I7aWYobil7aWYoZT50aGlzLmVuZClyZXR1cm4gdGhpcy5wcmlvcj1udWxsLHI7aWYodGhpcy52YWx1ZS5pc0RhdGFEcml2ZW4oKSlyZXR1cm4gdGhpcy5wcmlvcj1udWxsLHI7aWYoZTx0aGlzLmJlZ2luKXJldHVybiBuLnBvc3NpYmx5RXZhbHVhdGUodCk7dmFyIGk9KGUtdGhpcy5iZWdpbikvKHRoaXMuZW5kLXRoaXMuYmVnaW4pO3JldHVybiB0aGlzLnByb3BlcnR5LmludGVycG9sYXRlKG4ucG9zc2libHlFdmFsdWF0ZSh0KSxyLGZ1bmN0aW9uKHQpe2lmKGk8PTApcmV0dXJuIDA7aWYoaT49MSlyZXR1cm4gMTt2YXIgZT1pKmkscj1lKmk7cmV0dXJuIDQqKGk8LjU/cjozKihpLWUpK3ItLjc1KX0oKSl9cmV0dXJuIHJ9O3ZhciBQcj1mdW5jdGlvbih0KXt0aGlzLl9wcm9wZXJ0aWVzPXQsdGhpcy5fdmFsdWVzPU9iamVjdC5jcmVhdGUodC5kZWZhdWx0VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzKX07UHIucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBCcih0aGlzLl9wcm9wZXJ0aWVzKSxyPTAsbj1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXTtlLl92YWx1ZXNbaV09dGhpcy5fdmFsdWVzW2ldLnBvc3NpYmx5RXZhbHVhdGUodCl9cmV0dXJuIGV9LFByLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO3Q8ZS5sZW5ndGg7dCs9MSl7dmFyIHI9ZVt0XTtpZih0aGlzLl92YWx1ZXNbcl0ucHJpb3IpcmV0dXJuITB9cmV0dXJuITF9O3ZhciBScj1mdW5jdGlvbih0KXt0aGlzLl9wcm9wZXJ0aWVzPXQsdGhpcy5fdmFsdWVzPU9iamVjdC5jcmVhdGUodC5kZWZhdWx0UHJvcGVydHlWYWx1ZXMpfTtSci5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHgodGhpcy5fdmFsdWVzW3RdLnZhbHVlKX0sUnIucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmFsdWVzW3RdPW5ldyB6cih0aGlzLl92YWx1ZXNbdF0ucHJvcGVydHksbnVsbD09PWU/dm9pZCAwOngoZSkpfSxSci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXt9LGU9MCxyPU9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcyk7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9dGhpcy5nZXRWYWx1ZShuKTt2b2lkIDAhPT1pJiYodFtuXT1pKX1yZXR1cm4gdH0sUnIucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBCcih0aGlzLl9wcm9wZXJ0aWVzKSxyPTAsbj1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXTtlLl92YWx1ZXNbaV09dGhpcy5fdmFsdWVzW2ldLnBvc3NpYmx5RXZhbHVhdGUodCl9cmV0dXJuIGV9O3ZhciBGcj1mdW5jdGlvbih0LGUscil7dGhpcy5wcm9wZXJ0eT10LHRoaXMudmFsdWU9ZSx0aGlzLmdsb2JhbHM9cn07RnIucHJvdG90eXBlLmlzQ29uc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm5cImNvbnN0YW50XCI9PT10aGlzLnZhbHVlLmtpbmR9LEZyLnByb3RvdHlwZS5jb25zdGFudE9yPWZ1bmN0aW9uKHQpe3JldHVyblwiY29uc3RhbnRcIj09PXRoaXMudmFsdWUua2luZD90aGlzLnZhbHVlLnZhbHVlOnR9LEZyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9wZXJ0eS5ldmFsdWF0ZSh0aGlzLnZhbHVlLHRoaXMuZ2xvYmFscyx0KX07dmFyIEJyPWZ1bmN0aW9uKHQpe3RoaXMuX3Byb3BlcnRpZXM9dCx0aGlzLl92YWx1ZXM9T2JqZWN0LmNyZWF0ZSh0LmRlZmF1bHRQb3NzaWJseUV2YWx1YXRlZFZhbHVlcyl9O0JyLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbHVlc1t0XX07dmFyIE5yPWZ1bmN0aW9uKHQpe3RoaXMuc3BlY2lmaWNhdGlvbj10fTtOci5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmV4cHJlc3Npb24uZXZhbHVhdGUoZSl9LE5yLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49a3RbdGhpcy5zcGVjaWZpY2F0aW9uLnR5cGVdO3JldHVybiBuP24odCxlLHIpOnR9O3ZhciBqcj1mdW5jdGlvbih0KXt0aGlzLnNwZWNpZmljYXRpb249dH07anIucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm5cImNvbnN0YW50XCI9PT10LmV4cHJlc3Npb24ua2luZHx8XCJjYW1lcmFcIj09PXQuZXhwcmVzc2lvbi5raW5kP25ldyBGcih0aGlzLHtraW5kOlwiY29uc3RhbnRcIix2YWx1ZTp0LmV4cHJlc3Npb24uZXZhbHVhdGUoZSl9LGUpOm5ldyBGcih0aGlzLHQuZXhwcmVzc2lvbixlKX0sanIucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZihcImNvbnN0YW50XCIhPT10LnZhbHVlLmtpbmR8fFwiY29uc3RhbnRcIiE9PWUudmFsdWUua2luZClyZXR1cm4gdDtpZih2b2lkIDA9PT10LnZhbHVlLnZhbHVlfHx2b2lkIDA9PT1lLnZhbHVlLnZhbHVlKXJldHVybiBuZXcgRnIodGhpcyx7a2luZDpcImNvbnN0YW50XCIsdmFsdWU6dm9pZCAwfSx0Lmdsb2JhbHMpO3ZhciBuPWt0W3RoaXMuc3BlY2lmaWNhdGlvbi50eXBlXTtyZXR1cm4gbj9uZXcgRnIodGhpcyx7a2luZDpcImNvbnN0YW50XCIsdmFsdWU6bih0LnZhbHVlLnZhbHVlLGUudmFsdWUudmFsdWUscil9LHQuZ2xvYmFscyk6dH0sanIucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5cImNvbnN0YW50XCI9PT10LmtpbmQ/dC52YWx1ZTp0LmV2YWx1YXRlKGUscil9O3ZhciBWcj1mdW5jdGlvbih0KXt0aGlzLnNwZWNpZmljYXRpb249dH07VnIucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDAhPT10LnZhbHVlKXtpZihcImNvbnN0YW50XCI9PT10LmV4cHJlc3Npb24ua2luZCl7dmFyIHI9dC5leHByZXNzaW9uLmV2YWx1YXRlKGUpO3JldHVybiB0aGlzLl9jYWxjdWxhdGUocixyLHIsZSl9cmV0dXJuIHRoaXMuX2NhbGN1bGF0ZSh0LmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IExyKE1hdGguZmxvb3IoZS56b29tLTEpLGUpKSx0LmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IExyKE1hdGguZmxvb3IoZS56b29tKSxlKSksdC5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBMcihNYXRoLmZsb29yKGUuem9vbSsxKSxlKSksZSl9fSxWci5wcm90b3R5cGUuX2NhbGN1bGF0ZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLnpvb20sYT1pLU1hdGguZmxvb3IoaSksbz1uLmNyb3NzRmFkaW5nRmFjdG9yKCk7cmV0dXJuIGk+bi56b29tSGlzdG9yeS5sYXN0SW50ZWdlclpvb20/e2Zyb206dCx0bzplLGZyb21TY2FsZToyLHRvU2NhbGU6MSx0OmErKDEtYSkqb306e2Zyb206cix0bzplLGZyb21TY2FsZTouNSx0b1NjYWxlOjEsdDoxLSgxLW8pKmF9fSxWci5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHR9O3ZhciBVcj1mdW5jdGlvbih0KXt0aGlzLnNwZWNpZmljYXRpb249dH07VXIucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4hIXQuZXhwcmVzc2lvbi5ldmFsdWF0ZShlKX0sVXIucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKCl7cmV0dXJuITF9O3ZhciBxcj1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5wcm9wZXJ0aWVzPXQsdGhpcy5kZWZhdWx0UHJvcGVydHlWYWx1ZXM9e30sdGhpcy5kZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlcz17fSx0aGlzLmRlZmF1bHRUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXM9e30sdGhpcy5kZWZhdWx0UG9zc2libHlFdmFsdWF0ZWRWYWx1ZXM9e30sdCl7dmFyIHI9dFtlXSxuPXRoaXMuZGVmYXVsdFByb3BlcnR5VmFsdWVzW2VdPW5ldyB6cihyLHZvaWQgMCksaT10aGlzLmRlZmF1bHRUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVzW2VdPW5ldyBPcihyKTt0aGlzLmRlZmF1bHRUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXNbZV09aS51bnRyYW5zaXRpb25lZCgpLHRoaXMuZGVmYXVsdFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVzW2VdPW4ucG9zc2libHlFdmFsdWF0ZSh7fSl9fTtwcihcIkRhdGFEcml2ZW5Qcm9wZXJ0eVwiLGpyKSxwcihcIkRhdGFDb25zdGFudFByb3BlcnR5XCIsTnIpLHByKFwiQ3Jvc3NGYWRlZFByb3BlcnR5XCIsVnIpLHByKFwiQ29sb3JSYW1wUHJvcGVydHlcIixVcik7dmFyIEhyPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXtmb3IodmFyIG4gaW4gdC5jYWxsKHRoaXMpLHRoaXMuaWQ9ZS5pZCx0aGlzLm1ldGFkYXRhPWUubWV0YWRhdGEsdGhpcy50eXBlPWUudHlwZSx0aGlzLm1pbnpvb209ZS5taW56b29tLHRoaXMubWF4em9vbT1lLm1heHpvb20sdGhpcy52aXNpYmlsaXR5PVwidmlzaWJsZVwiLFwiYmFja2dyb3VuZFwiIT09ZS50eXBlJiYodGhpcy5zb3VyY2U9ZS5zb3VyY2UsdGhpcy5zb3VyY2VMYXllcj1lW1wic291cmNlLWxheWVyXCJdLHRoaXMuZmlsdGVyPWUuZmlsdGVyKSx0aGlzLl9mZWF0dXJlRmlsdGVyPWZ1bmN0aW9uKCl7cmV0dXJuITB9LHIubGF5b3V0JiYodGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQ9bmV3IFJyKHIubGF5b3V0KSksdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludD1uZXcgSXIoci5wYWludCksZS5wYWludCl0aGlzLnNldFBhaW50UHJvcGVydHkobixlLnBhaW50W25dLHt2YWxpZGF0ZTohMX0pO2Zvcih2YXIgaSBpbiBlLmxheW91dCl0aGlzLnNldExheW91dFByb3BlcnR5KGksZS5sYXlvdXRbaV0se3ZhbGlkYXRlOiExfSk7dGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50PXRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQudW50cmFuc2l0aW9uZWQoKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24odCl7cmV0dXJuXCJ2aXNpYmlsaXR5XCI9PT10P3RoaXMudmlzaWJpbGl0eTp0aGlzLl91bmV2YWx1YXRlZExheW91dC5nZXRWYWx1ZSh0KX0sZS5wcm90b3R5cGUuc2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe2lmKG51bGwhPWUpe3ZhciBuPVwibGF5ZXJzLlwiK3RoaXMuaWQrXCIubGF5b3V0LlwiK3Q7aWYodGhpcy5fdmFsaWRhdGUob3Isbix0LGUscikpcmV0dXJufVwidmlzaWJpbGl0eVwiIT09dD90aGlzLl91bmV2YWx1YXRlZExheW91dC5zZXRWYWx1ZSh0LGUpOnRoaXMudmlzaWJpbGl0eT1cIm5vbmVcIj09PWU/ZTpcInZpc2libGVcIn0sZS5wcm90b3R5cGUuZ2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbih0KXtyZXR1cm4gdih0LFwiLXRyYW5zaXRpb25cIik/dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5nZXRUcmFuc2l0aW9uKHQuc2xpY2UoMCwtXCItdHJhbnNpdGlvblwiLmxlbmd0aCkpOnRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuZ2V0VmFsdWUodCl9LGUucHJvdG90eXBlLnNldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe2lmKG51bGwhPWUpe3ZhciBuPVwibGF5ZXJzLlwiK3RoaXMuaWQrXCIucGFpbnQuXCIrdDtpZih0aGlzLl92YWxpZGF0ZShhcixuLHQsZSxyKSlyZXR1cm59dih0LFwiLXRyYW5zaXRpb25cIik/dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5zZXRUcmFuc2l0aW9uKHQuc2xpY2UoMCwtXCItdHJhbnNpdGlvblwiLmxlbmd0aCksZXx8dm9pZCAwKTp0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LnNldFZhbHVlKHQsZSl9LGUucHJvdG90eXBlLmlzSGlkZGVuPWZ1bmN0aW9uKHQpe3JldHVybiEhKHRoaXMubWluem9vbSYmdDx0aGlzLm1pbnpvb20pfHwhISh0aGlzLm1heHpvb20mJnQ+PXRoaXMubWF4em9vbSl8fFwibm9uZVwiPT09dGhpcy52aXNpYmlsaXR5fSxlLnByb3RvdHlwZS51cGRhdGVUcmFuc2l0aW9ucz1mdW5jdGlvbih0KXt0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQ9dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC50cmFuc2l0aW9uZWQodCx0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQpfSxlLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25pbmdQYWludC5oYXNUcmFuc2l0aW9uKCl9LGUucHJvdG90eXBlLnJlY2FsY3VsYXRlPWZ1bmN0aW9uKHQpe3RoaXMuX3VuZXZhbHVhdGVkTGF5b3V0JiYodGhpcy5sYXlvdXQ9dGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQucG9zc2libHlFdmFsdWF0ZSh0KSksdGhpcy5wYWludD10aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQucG9zc2libHlFdmFsdWF0ZSh0KX0sZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9e2lkOnRoaXMuaWQsdHlwZTp0aGlzLnR5cGUsc291cmNlOnRoaXMuc291cmNlLFwic291cmNlLWxheWVyXCI6dGhpcy5zb3VyY2VMYXllcixtZXRhZGF0YTp0aGlzLm1ldGFkYXRhLG1pbnpvb206dGhpcy5taW56b29tLG1heHpvb206dGhpcy5tYXh6b29tLGZpbHRlcjp0aGlzLmZpbHRlcixsYXlvdXQ6dGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQmJnRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0LnNlcmlhbGl6ZSgpLHBhaW50OnRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQmJnRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuc2VyaWFsaXplKCl9O3JldHVyblwibm9uZVwiPT09dGhpcy52aXNpYmlsaXR5JiYodC5sYXlvdXQ9dC5sYXlvdXR8fHt9LHQubGF5b3V0LnZpc2liaWxpdHk9XCJub25lXCIpLHkodCxmdW5jdGlvbih0LGUpe3JldHVybiEodm9pZCAwPT09dHx8XCJsYXlvdXRcIj09PWUmJiFPYmplY3Qua2V5cyh0KS5sZW5ndGh8fFwicGFpbnRcIj09PWUmJiFPYmplY3Qua2V5cyh0KS5sZW5ndGgpfSl9LGUucHJvdG90eXBlLl92YWxpZGF0ZT1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybighaXx8ITEhPT1pLnZhbGlkYXRlKSYmc3IodGhpcyx0LmNhbGwobnIse2tleTplLGxheWVyVHlwZTp0aGlzLnR5cGUsb2JqZWN0S2V5OnIsdmFsdWU6bixzdHlsZVNwZWM6SSxzdHlsZTp7Z2x5cGhzOiEwLHNwcml0ZTohMH19KSl9LGUucHJvdG90eXBlLmhhc09mZnNjcmVlblBhc3M9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKCl7fSxlfShPKSxHcj17SW50ODpJbnQ4QXJyYXksVWludDg6VWludDhBcnJheSxJbnQxNjpJbnQxNkFycmF5LFVpbnQxNjpVaW50MTZBcnJheSxJbnQzMjpJbnQzMkFycmF5LFVpbnQzMjpVaW50MzJBcnJheSxGbG9hdDMyOkZsb2F0MzJBcnJheX0sWXI9ZnVuY3Rpb24odCxlKXt0aGlzLl9zdHJ1Y3RBcnJheT10LHRoaXMuX3BvczE9ZSp0aGlzLnNpemUsdGhpcy5fcG9zMj10aGlzLl9wb3MxLzIsdGhpcy5fcG9zND10aGlzLl9wb3MxLzQsdGhpcy5fcG9zOD10aGlzLl9wb3MxLzh9LFdyPWZ1bmN0aW9uKCl7dGhpcy5pc1RyYW5zZmVycmVkPSExLHRoaXMuY2FwYWNpdHk9LTEsdGhpcy5yZXNpemUoMCl9O2Z1bmN0aW9uIFhyKHQsZSl7dm9pZCAwPT09ZSYmKGU9MSk7dmFyIHI9MCxuPTA7cmV0dXJue21lbWJlcnM6dC5tYXAoZnVuY3Rpb24odCl7dmFyIGksYT0oaT10LnR5cGUsR3JbaV0uQllURVNfUEVSX0VMRU1FTlQpLG89cj1acihyLE1hdGgubWF4KGUsYSkpLHM9dC5jb21wb25lbnRzfHwxO3JldHVybiBuPU1hdGgubWF4KG4sYSkscis9YSpzLHtuYW1lOnQubmFtZSx0eXBlOnQudHlwZSxjb21wb25lbnRzOnMsb2Zmc2V0Om99fSksc2l6ZTpacihyLE1hdGgubWF4KG4sZSkpLGFsaWdubWVudDplfX1mdW5jdGlvbiBacih0LGUpe3JldHVybiBNYXRoLmNlaWwodC9lKSplfVdyLnNlcmlhbGl6ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0Ll90cmltKCksZSYmKHQuaXNUcmFuc2ZlcnJlZD0hMCxlLnB1c2godC5hcnJheUJ1ZmZlcikpLHtsZW5ndGg6dC5sZW5ndGgsYXJyYXlCdWZmZXI6dC5hcnJheUJ1ZmZlcn19LFdyLmRlc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdC5jcmVhdGUodGhpcy5wcm90b3R5cGUpO3JldHVybiBlLmFycmF5QnVmZmVyPXQuYXJyYXlCdWZmZXIsZS5sZW5ndGg9dC5sZW5ndGgsZS5jYXBhY2l0eT10LmFycmF5QnVmZmVyLmJ5dGVMZW5ndGgvZS5ieXRlc1BlckVsZW1lbnQsZS5fcmVmcmVzaFZpZXdzKCksZX0sV3IucHJvdG90eXBlLl90cmltPWZ1bmN0aW9uKCl7dGhpcy5sZW5ndGghPT10aGlzLmNhcGFjaXR5JiYodGhpcy5jYXBhY2l0eT10aGlzLmxlbmd0aCx0aGlzLmFycmF5QnVmZmVyPXRoaXMuYXJyYXlCdWZmZXIuc2xpY2UoMCx0aGlzLmxlbmd0aCp0aGlzLmJ5dGVzUGVyRWxlbWVudCksdGhpcy5fcmVmcmVzaFZpZXdzKCkpfSxXci5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmxlbmd0aD0wfSxXci5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQpe3RoaXMucmVzZXJ2ZSh0KSx0aGlzLmxlbmd0aD10fSxXci5wcm90b3R5cGUucmVzZXJ2ZT1mdW5jdGlvbih0KXtpZih0PnRoaXMuY2FwYWNpdHkpe3RoaXMuY2FwYWNpdHk9TWF0aC5tYXgodCxNYXRoLmZsb29yKDUqdGhpcy5jYXBhY2l0eSksMTI4KSx0aGlzLmFycmF5QnVmZmVyPW5ldyBBcnJheUJ1ZmZlcih0aGlzLmNhcGFjaXR5KnRoaXMuYnl0ZXNQZXJFbGVtZW50KTt2YXIgZT10aGlzLnVpbnQ4O3RoaXMuX3JlZnJlc2hWaWV3cygpLGUmJnRoaXMudWludDguc2V0KGUpfX0sV3IucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJfcmVmcmVzaFZpZXdzKCkgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIGNvbmNyZXRlIFN0cnVjdEFycmF5IGxheW91dFwiKX07dmFyICRyPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShyKzEpO3ZhciBuPTIqcjtyZXR1cm4gdGhpcy5pbnQxNltuKzBdPXQsdGhpcy5pbnQxNltuKzFdPWUscn0sZX0oV3IpOyRyLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NCxwcihcIlN0cnVjdEFycmF5TGF5b3V0Mmk0XCIsJHIpO3ZhciBKcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKGkrMSk7dmFyIGE9NCppO3JldHVybiB0aGlzLmludDE2W2ErMF09dCx0aGlzLmludDE2W2ErMV09ZSx0aGlzLmludDE2W2ErMl09cix0aGlzLmludDE2W2ErM109bixpfSxlfShXcik7SnIucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD04LHByKFwiU3RydWN0QXJyYXlMYXlvdXQ0aThcIixKcik7dmFyIEtyPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKG8rMSk7dmFyIHM9NipvO3JldHVybiB0aGlzLmludDE2W3MrMF09dCx0aGlzLmludDE2W3MrMV09ZSx0aGlzLmludDE2W3MrMl09cix0aGlzLmludDE2W3MrM109bix0aGlzLmludDE2W3MrNF09aSx0aGlzLmludDE2W3MrNV09YSxvfSxlfShXcik7S3IucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0xMixwcihcIlN0cnVjdEFycmF5TGF5b3V0Mmk0aTEyXCIsS3IpO3ZhciBRcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUobCsxKTt2YXIgYz02KmwsdT0xMipsO3JldHVybiB0aGlzLmludDE2W2MrMF09dCx0aGlzLmludDE2W2MrMV09ZSx0aGlzLmludDE2W2MrMl09cix0aGlzLmludDE2W2MrM109bix0aGlzLnVpbnQ4W3UrOF09aSx0aGlzLnVpbnQ4W3UrOV09YSx0aGlzLnVpbnQ4W3UrMTBdPW8sdGhpcy51aW50OFt1KzExXT1zLGx9LGV9KFdyKTtRci5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTEyLHByKFwiU3RydWN0QXJyYXlMYXlvdXQ0aTR1YjEyXCIsUXIpO3ZhciB0bj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3ZhciBsPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKGwrMSk7dmFyIGM9OCpsO3JldHVybiB0aGlzLmludDE2W2MrMF09dCx0aGlzLmludDE2W2MrMV09ZSx0aGlzLmludDE2W2MrMl09cix0aGlzLmludDE2W2MrM109bix0aGlzLnVpbnQxNltjKzRdPWksdGhpcy51aW50MTZbYys1XT1hLHRoaXMudWludDE2W2MrNl09byx0aGlzLnVpbnQxNltjKzddPXMsbH0sZX0oV3IpO3RuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTYscHIoXCJTdHJ1Y3RBcnJheUxheW91dDRpNHVpMTZcIix0bik7dmFyIGVuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShuKzEpO3ZhciBpPTMqbjtyZXR1cm4gdGhpcy5mbG9hdDMyW2krMF09dCx0aGlzLmZsb2F0MzJbaSsxXT1lLHRoaXMuZmxvYXQzMltpKzJdPXIsbn0sZX0oV3IpO2VuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTIscHIoXCJTdHJ1Y3RBcnJheUxheW91dDNmMTJcIixlbik7dmFyIHJuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MzI9bmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShlKzEpO3ZhciByPTEqZTtyZXR1cm4gdGhpcy51aW50MzJbciswXT10LGV9LGV9KFdyKTtybi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTQscHIoXCJTdHJ1Y3RBcnJheUxheW91dDF1bDRcIixybik7dmFyIG5uPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQzMj1uZXcgVWludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUpe3ZhciBoPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKGgrMSk7dmFyIGY9MTIqaCxwPTYqaDtyZXR1cm4gdGhpcy5pbnQxNltmKzBdPXQsdGhpcy5pbnQxNltmKzFdPWUsdGhpcy5pbnQxNltmKzJdPXIsdGhpcy5pbnQxNltmKzNdPW4sdGhpcy5pbnQxNltmKzRdPWksdGhpcy5pbnQxNltmKzVdPWEsdGhpcy51aW50MzJbcCszXT1vLHRoaXMudWludDE2W2YrOF09cyx0aGlzLnVpbnQxNltmKzldPWwsdGhpcy5pbnQxNltmKzEwXT1jLHRoaXMuaW50MTZbZisxMV09dSxofSxlfShXcik7bm4ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0yNCxwcihcIlN0cnVjdEFycmF5TGF5b3V0NmkxdWwydWkyaTI0XCIsbm4pO3ZhciBhbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShvKzEpO3ZhciBzPTYqbztyZXR1cm4gdGhpcy5pbnQxNltzKzBdPXQsdGhpcy5pbnQxNltzKzFdPWUsdGhpcy5pbnQxNltzKzJdPXIsdGhpcy5pbnQxNltzKzNdPW4sdGhpcy5pbnQxNltzKzRdPWksdGhpcy5pbnQxNltzKzVdPWEsb30sZX0oV3IpO2FuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTIscHIoXCJTdHJ1Y3RBcnJheUxheW91dDJpMmkyaTEyXCIsYW4pO3ZhciBvbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKHIrMSk7dmFyIG49NCpyO3JldHVybiB0aGlzLnVpbnQ4W24rMF09dCx0aGlzLnVpbnQ4W24rMV09ZSxyfSxlfShXcik7b24ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD00LHByKFwiU3RydWN0QXJyYXlMYXlvdXQydWI0XCIsb24pO3ZhciBzbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDMyPW5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGgsZixwKXt2YXIgZD10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShkKzEpO3ZhciBnPTIwKmQsdj0xMCpkLG09NDAqZDtyZXR1cm4gdGhpcy5pbnQxNltnKzBdPXQsdGhpcy5pbnQxNltnKzFdPWUsdGhpcy51aW50MTZbZysyXT1yLHRoaXMudWludDE2W2crM109bix0aGlzLnVpbnQzMlt2KzJdPWksdGhpcy51aW50MzJbdiszXT1hLHRoaXMudWludDMyW3YrNF09byx0aGlzLnVpbnQxNltnKzEwXT1zLHRoaXMudWludDE2W2crMTFdPWwsdGhpcy51aW50MTZbZysxMl09Yyx0aGlzLmZsb2F0MzJbdis3XT11LHRoaXMuZmxvYXQzMlt2KzhdPWgsdGhpcy51aW50OFttKzM2XT1mLHRoaXMudWludDhbbSszN109cCxkfSxlfShXcik7c24ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD00MCxwcihcIlN0cnVjdEFycmF5TGF5b3V0MmkydWkzdWwzdWkyZjJ1YjQwXCIsc24pO3ZhciBsbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShlKzEpO3ZhciByPTEqZTtyZXR1cm4gdGhpcy5mbG9hdDMyW3IrMF09dCxlfSxlfShXcik7bG4ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD00LHByKFwiU3RydWN0QXJyYXlMYXlvdXQxZjRcIixsbik7dmFyIGNuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKG4rMSk7dmFyIGk9MypuO3JldHVybiB0aGlzLmludDE2W2krMF09dCx0aGlzLmludDE2W2krMV09ZSx0aGlzLmludDE2W2krMl09cixufSxlfShXcik7Y24ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD02LHByKFwiU3RydWN0QXJyYXlMYXlvdXQzaTZcIixjbik7dmFyIHVuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MzI9bmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKG4rMSk7dmFyIGk9MipuLGE9NCpuO3JldHVybiB0aGlzLnVpbnQzMltpKzBdPXQsdGhpcy51aW50MTZbYSsyXT1lLHRoaXMudWludDE2W2ErM109cixufSxlfShXcik7dW4ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD04LHByKFwiU3RydWN0QXJyYXlMYXlvdXQxdWwydWk4XCIsdW4pO3ZhciBobj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKG4rMSk7dmFyIGk9MypuO3JldHVybiB0aGlzLnVpbnQxNltpKzBdPXQsdGhpcy51aW50MTZbaSsxXT1lLHRoaXMudWludDE2W2krMl09cixufSxlfShXcik7aG4ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD02LHByKFwiU3RydWN0QXJyYXlMYXlvdXQzdWk2XCIsaG4pO3ZhciBmbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShyKzEpO3ZhciBuPTIqcjtyZXR1cm4gdGhpcy51aW50MTZbbiswXT10LHRoaXMudWludDE2W24rMV09ZSxyfSxlfShXcik7Zm4ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD00LHByKFwiU3RydWN0QXJyYXlMYXlvdXQydWk0XCIsZm4pO3ZhciBwbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKHIrMSk7dmFyIG49MipyO3JldHVybiB0aGlzLmZsb2F0MzJbbiswXT10LHRoaXMuZmxvYXQzMltuKzFdPWUscn0sZX0oV3IpO3BuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9OCxwcihcIlN0cnVjdEFycmF5TGF5b3V0MmY4XCIscG4pO3ZhciBkbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShpKzEpO3ZhciBhPTQqaTtyZXR1cm4gdGhpcy5mbG9hdDMyW2ErMF09dCx0aGlzLmZsb2F0MzJbYSsxXT1lLHRoaXMuZmxvYXQzMlthKzJdPXIsdGhpcy5mbG9hdDMyW2ErM109bixpfSxlfShXcik7ZG4ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0xNixwcihcIlN0cnVjdEFycmF5TGF5b3V0NGYxNlwiLGRuKTt2YXIgZ249ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lO3ZhciByPXthbmNob3JQb2ludFg6e2NvbmZpZ3VyYWJsZTohMH0sYW5jaG9yUG9pbnRZOntjb25maWd1cmFibGU6ITB9LHgxOntjb25maWd1cmFibGU6ITB9LHkxOntjb25maWd1cmFibGU6ITB9LHgyOntjb25maWd1cmFibGU6ITB9LHkyOntjb25maWd1cmFibGU6ITB9LGZlYXR1cmVJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxzb3VyY2VMYXllckluZGV4Ontjb25maWd1cmFibGU6ITB9LGJ1Y2tldEluZGV4Ontjb25maWd1cmFibGU6ITB9LHJhZGl1czp7Y29uZmlndXJhYmxlOiEwfSxzaWduZWREaXN0YW5jZUZyb21BbmNob3I6e2NvbmZpZ3VyYWJsZTohMH0sYW5jaG9yUG9pbnQ6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiByLmFuY2hvclBvaW50WC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiswXX0sci5hbmNob3JQb2ludFguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMF09dH0sci5hbmNob3JQb2ludFkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV19LHIuYW5jaG9yUG9pbnRZLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzFdPXR9LHIueDEuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMl19LHIueDEuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMl09dH0sci55MS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiszXX0sci55MS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiszXT10fSxyLngyLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzRdfSxyLngyLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzRdPXR9LHIueTIuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrNV19LHIueTIuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrNV09dH0sci5mZWF0dXJlSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzNdfSxyLmZlYXR1cmVJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrM109dH0sci5zb3VyY2VMYXllckluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMis4XX0sci5zb3VyY2VMYXllckluZGV4LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMis4XT10fSxyLmJ1Y2tldEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMis5XX0sci5idWNrZXRJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrOV09dH0sci5yYWRpdXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMTBdfSxyLnJhZGl1cy5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisxMF09dH0sci5zaWduZWREaXN0YW5jZUZyb21BbmNob3IuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMTFdfSxyLnNpZ25lZERpc3RhbmNlRnJvbUFuY2hvci5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisxMV09dH0sci5hbmNob3JQb2ludC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGwodGhpcy5hbmNob3JQb2ludFgsdGhpcy5hbmNob3JQb2ludFkpfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfShZcik7Z24ucHJvdG90eXBlLnNpemU9MjQ7dmFyIHZuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZ24odGhpcyx0KX0sZX0obm4pO3ByKFwiQ29sbGlzaW9uQm94QXJyYXlcIix2bik7dmFyIG1uPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZTt2YXIgcj17YW5jaG9yWDp7Y29uZmlndXJhYmxlOiEwfSxhbmNob3JZOntjb25maWd1cmFibGU6ITB9LGdseXBoU3RhcnRJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxudW1HbHlwaHM6e2NvbmZpZ3VyYWJsZTohMH0sdmVydGV4U3RhcnRJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxsaW5lU3RhcnRJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxsaW5lTGVuZ3RoOntjb25maWd1cmFibGU6ITB9LHNlZ21lbnQ6e2NvbmZpZ3VyYWJsZTohMH0sbG93ZXJTaXplOntjb25maWd1cmFibGU6ITB9LHVwcGVyU2l6ZTp7Y29uZmlndXJhYmxlOiEwfSxsaW5lT2Zmc2V0WDp7Y29uZmlndXJhYmxlOiEwfSxsaW5lT2Zmc2V0WTp7Y29uZmlndXJhYmxlOiEwfSx3cml0aW5nTW9kZTp7Y29uZmlndXJhYmxlOiEwfSxoaWRkZW46e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiByLmFuY2hvclguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMF19LHIuYW5jaG9yWC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiswXT10fSxyLmFuY2hvclkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV19LHIuYW5jaG9yWS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisxXT10fSxyLmdseXBoU3RhcnRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMl19LHIuZ2x5cGhTdGFydEluZGV4LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisyXT10fSxyLm51bUdseXBocy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrM119LHIubnVtR2x5cGhzLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiszXT10fSxyLnZlcnRleFN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzJdfSxyLnZlcnRleFN0YXJ0SW5kZXguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzJdPXR9LHIubGluZVN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzNdfSxyLmxpbmVTdGFydEluZGV4LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCszXT10fSxyLmxpbmVMZW5ndGguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzRdfSxyLmxpbmVMZW5ndGguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzRdPXR9LHIuc2VnbWVudC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTBdfSxyLnNlZ21lbnQuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzEwXT10fSxyLmxvd2VyU2l6ZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTFdfSxyLmxvd2VyU2l6ZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTFdPXR9LHIudXBwZXJTaXplLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxMl19LHIudXBwZXJTaXplLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxMl09dH0sci5saW5lT2Zmc2V0WC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzddfSxyLmxpbmVPZmZzZXRYLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrN109dH0sci5saW5lT2Zmc2V0WS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzhdfSxyLmxpbmVPZmZzZXRZLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrOF09dH0sci53cml0aW5nTW9kZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSszNl19LHIud3JpdGluZ01vZGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczErMzZdPXR9LHIuaGlkZGVuLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50OFt0aGlzLl9wb3MxKzM3XX0sci5oaWRkZW4uc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczErMzddPXR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHIpLGV9KFlyKTttbi5wcm90b3R5cGUuc2l6ZT00MDt2YXIgeW49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBtbih0aGlzLHQpfSxlfShzbik7cHIoXCJQbGFjZWRTeW1ib2xBcnJheVwiLHluKTt2YXIgeG49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lO3ZhciByPXtvZmZzZXRYOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5vZmZzZXRYLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrMF19LHIub2Zmc2V0WC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzBdPXR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHIpLGV9KFlyKTt4bi5wcm90b3R5cGUuc2l6ZT00O3ZhciBibj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldG9mZnNldFg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZmxvYXQzMlsxKnQrMF19LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHhuKHRoaXMsdCl9LGV9KGxuKTtwcihcIkdseXBoT2Zmc2V0QXJyYXlcIixibik7dmFyIF9uPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZTt2YXIgcj17eDp7Y29uZmlndXJhYmxlOiEwfSx5Ontjb25maWd1cmFibGU6ITB9LHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci54LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzBdfSxyLnguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMF09dH0sci55LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzFdfSxyLnkuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV09dH0sci50aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvci5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisyXX0sci50aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvci5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisyXT10fSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfShZcik7X24ucHJvdG90eXBlLnNpemU9Njt2YXIgd249ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXR4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludDE2WzMqdCswXX0sZS5wcm90b3R5cGUuZ2V0eT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnQxNlszKnQrMV19LGUucHJvdG90eXBlLmdldHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludDE2WzMqdCsyXX0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgX24odGhpcyx0KX0sZX0oY24pO3ByKFwiU3ltYm9sTGluZVZlcnRleEFycmF5XCIsd24pO3ZhciBrbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWU7dmFyIHI9e2ZlYXR1cmVJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxzb3VyY2VMYXllckluZGV4Ontjb25maWd1cmFibGU6ITB9LGJ1Y2tldEluZGV4Ontjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5mZWF0dXJlSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzBdfSxyLmZlYXR1cmVJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrMF09dH0sci5zb3VyY2VMYXllckluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisyXX0sci5zb3VyY2VMYXllckluZGV4LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisyXT10fSxyLmJ1Y2tldEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiszXX0sci5idWNrZXRJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrM109dH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsciksZX0oWXIpO2tuLnByb3RvdHlwZS5zaXplPTg7dmFyIEFuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcga24odGhpcyx0KX0sZX0odW4pO3ByKFwiRmVhdHVyZUluZGV4QXJyYXlcIixBbik7dmFyIFRuPVhyKFt7bmFtZTpcImFfcG9zXCIsY29tcG9uZW50czoyLHR5cGU6XCJJbnQxNlwifV0sNCkubWVtYmVycyxNbj1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD1bXSksdGhpcy5zZWdtZW50cz10fTtNbi5wcm90b3R5cGUucHJlcGFyZVNlZ21lbnQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuc2VnbWVudHNbdGhpcy5zZWdtZW50cy5sZW5ndGgtMV07cmV0dXJuIHQ+TW4uTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEgmJl8oXCJNYXggdmVydGljZXMgcGVyIHNlZ21lbnQgaXMgXCIrTW4uTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEgrXCI6IGJ1Y2tldCByZXF1ZXN0ZWQgXCIrdCksKCFufHxuLnZlcnRleExlbmd0aCt0Pk1uLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIKSYmKG49e3ZlcnRleE9mZnNldDplLmxlbmd0aCxwcmltaXRpdmVPZmZzZXQ6ci5sZW5ndGgsdmVydGV4TGVuZ3RoOjAscHJpbWl0aXZlTGVuZ3RoOjB9LHRoaXMuc2VnbWVudHMucHVzaChuKSksbn0sTW4ucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlZ21lbnRzfSxNbi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9dGhpcy5zZWdtZW50czt0PGUubGVuZ3RoO3QrPTEpe3ZhciByPWVbdF07Zm9yKHZhciBuIGluIHIudmFvcylyLnZhb3Nbbl0uZGVzdHJveSgpfX0sTW4uTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEg9TWF0aC5wb3coMiwxNiktMSxwcihcIlNlZ21lbnRWZWN0b3JcIixNbik7dmFyIFNuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIDI1NioodD1mKE1hdGguZmxvb3IodCksMCwyNTUpKStmKE1hdGguZmxvb3IoZSksMCwyNTUpfTtmdW5jdGlvbiBFbih0KXtyZXR1cm5bU24oMjU1KnQuciwyNTUqdC5nKSxTbigyNTUqdC5iLDI1NSp0LmEpXX12YXIgQ249ZnVuY3Rpb24odCxlLHIpe3RoaXMudmFsdWU9dCx0aGlzLm5hbWU9ZSx0aGlzLnR5cGU9cix0aGlzLnN0YXRpc3RpY3M9e21heDotMS8wfX07Q24ucHJvdG90eXBlLmRlZmluZXM9ZnVuY3Rpb24oKXtyZXR1cm5bXCIjZGVmaW5lIEhBU19VTklGT1JNX3VfXCIrdGhpcy5uYW1lXX0sQ24ucHJvdG90eXBlLnBvcHVsYXRlUGFpbnRBcnJheT1mdW5jdGlvbigpe30sQ24ucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbigpe30sQ24ucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt9LENuLnByb3RvdHlwZS5zZXRVbmlmb3Jtcz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLmNvbnN0YW50T3IodGhpcy52YWx1ZSksYT10LmdsO1wiY29sb3JcIj09PXRoaXMudHlwZT9hLnVuaWZvcm00ZihlLnVuaWZvcm1zW1widV9cIit0aGlzLm5hbWVdLGkucixpLmcsaS5iLGkuYSk6YS51bmlmb3JtMWYoZS51bmlmb3Jtc1tcInVfXCIrdGhpcy5uYW1lXSxpKX07dmFyIExuPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmV4cHJlc3Npb249dCx0aGlzLm5hbWU9ZSx0aGlzLnR5cGU9cix0aGlzLnN0YXRpc3RpY3M9e21heDotMS8wfTt2YXIgbj1cImNvbG9yXCI9PT1yP3BuOmxuO3RoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzPVt7bmFtZTpcImFfXCIrZSx0eXBlOlwiRmxvYXQzMlwiLGNvbXBvbmVudHM6XCJjb2xvclwiPT09cj8yOjEsb2Zmc2V0OjB9XSx0aGlzLnBhaW50VmVydGV4QXJyYXk9bmV3IG59O0xuLnByb3RvdHlwZS5kZWZpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuW119LExuLnByb3RvdHlwZS5wb3B1bGF0ZVBhaW50QXJyYXk9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnBhaW50VmVydGV4QXJyYXksbj1yLmxlbmd0aDtyLnJlc2VydmUodCk7dmFyIGk9dGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBMcigwKSxlKTtpZihcImNvbG9yXCI9PT10aGlzLnR5cGUpZm9yKHZhciBhPUVuKGkpLG89bjtvPHQ7bysrKXIuZW1wbGFjZUJhY2soYVswXSxhWzFdKTtlbHNle2Zvcih2YXIgcz1uO3M8dDtzKyspci5lbXBsYWNlQmFjayhpKTt0aGlzLnN0YXRpc3RpY3MubWF4PU1hdGgubWF4KHRoaXMuc3RhdGlzdGljcy5tYXgsaSl9fSxMbi5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMucGFpbnRWZXJ0ZXhBcnJheSYmKHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5wYWludFZlcnRleEFycmF5LHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzKSl9LExuLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5wYWludFZlcnRleEJ1ZmZlciYmdGhpcy5wYWludFZlcnRleEJ1ZmZlci5kZXN0cm95KCl9LExuLnByb3RvdHlwZS5zZXRVbmlmb3Jtcz1mdW5jdGlvbih0LGUpe3QuZ2wudW5pZm9ybTFmKGUudW5pZm9ybXNbXCJhX1wiK3RoaXMubmFtZStcIl90XCJdLDApfTt2YXIgem49ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLmV4cHJlc3Npb249dCx0aGlzLm5hbWU9ZSx0aGlzLnR5cGU9cix0aGlzLnVzZUludGVnZXJab29tPW4sdGhpcy56b29tPWksdGhpcy5zdGF0aXN0aWNzPXttYXg6LTEvMH07dmFyIGE9XCJjb2xvclwiPT09cj9kbjpwbjt0aGlzLnBhaW50VmVydGV4QXR0cmlidXRlcz1be25hbWU6XCJhX1wiK2UsdHlwZTpcIkZsb2F0MzJcIixjb21wb25lbnRzOlwiY29sb3JcIj09PXI/NDoyLG9mZnNldDowfV0sdGhpcy5wYWludFZlcnRleEFycmF5PW5ldyBhfTt6bi5wcm90b3R5cGUuZGVmaW5lcz1mdW5jdGlvbigpe3JldHVybltdfSx6bi5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5wYWludFZlcnRleEFycmF5LG49ci5sZW5ndGg7ci5yZXNlcnZlKHQpO3ZhciBpPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgTHIodGhpcy56b29tKSxlKSxhPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgTHIodGhpcy56b29tKzEpLGUpO2lmKFwiY29sb3JcIj09PXRoaXMudHlwZSlmb3IodmFyIG89RW4oaSkscz1FbihhKSxsPW47bDx0O2wrKylyLmVtcGxhY2VCYWNrKG9bMF0sb1sxXSxzWzBdLHNbMV0pO2Vsc2V7Zm9yKHZhciBjPW47Yzx0O2MrKylyLmVtcGxhY2VCYWNrKGksYSk7dGhpcy5zdGF0aXN0aWNzLm1heD1NYXRoLm1heCh0aGlzLnN0YXRpc3RpY3MubWF4LGksYSl9fSx6bi5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMucGFpbnRWZXJ0ZXhBcnJheSYmKHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5wYWludFZlcnRleEFycmF5LHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzKSl9LHpuLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5wYWludFZlcnRleEJ1ZmZlciYmdGhpcy5wYWludFZlcnRleEJ1ZmZlci5kZXN0cm95KCl9LHpuLnByb3RvdHlwZS5pbnRlcnBvbGF0aW9uRmFjdG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnVzZUludGVnZXJab29tP3RoaXMuZXhwcmVzc2lvbi5pbnRlcnBvbGF0aW9uRmFjdG9yKE1hdGguZmxvb3IodCksdGhpcy56b29tLHRoaXMuem9vbSsxKTp0aGlzLmV4cHJlc3Npb24uaW50ZXJwb2xhdGlvbkZhY3Rvcih0LHRoaXMuem9vbSx0aGlzLnpvb20rMSl9LHpuLnByb3RvdHlwZS5zZXRVbmlmb3Jtcz1mdW5jdGlvbih0LGUscil7dC5nbC51bmlmb3JtMWYoZS51bmlmb3Jtc1tcImFfXCIrdGhpcy5uYW1lK1wiX3RcIl0sdGhpcy5pbnRlcnBvbGF0aW9uRmFjdG9yKHIuem9vbSkpfTt2YXIgT249ZnVuY3Rpb24oKXt0aGlzLmJpbmRlcnM9e30sdGhpcy5jYWNoZUtleT1cIlwiLHRoaXMuX2J1ZmZlcnM9W119O09uLmNyZWF0ZUR5bmFtaWM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW5ldyBPbixpPVtdO2Zvcih2YXIgYSBpbiB0LnBhaW50Ll92YWx1ZXMpaWYocihhKSl7dmFyIG89dC5wYWludC5nZXQoYSk7aWYobyBpbnN0YW5jZW9mIEZyJiZvLnByb3BlcnR5LnNwZWNpZmljYXRpb25bXCJwcm9wZXJ0eS1mdW5jdGlvblwiXSl7dmFyIHM9RG4oYSx0LnR5cGUpLGw9by5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uLnR5cGUsYz1vLnByb3BlcnR5LnVzZUludGVnZXJab29tO1wiY29uc3RhbnRcIj09PW8udmFsdWUua2luZD8obi5iaW5kZXJzW2FdPW5ldyBDbihvLnZhbHVlLHMsbCksaS5wdXNoKFwiL3VfXCIrcykpOlwic291cmNlXCI9PT1vLnZhbHVlLmtpbmQ/KG4uYmluZGVyc1thXT1uZXcgTG4oby52YWx1ZSxzLGwpLGkucHVzaChcIi9hX1wiK3MpKToobi5iaW5kZXJzW2FdPW5ldyB6bihvLnZhbHVlLHMsbCxjLGUpLGkucHVzaChcIi96X1wiK3MpKX19cmV0dXJuIG4uY2FjaGVLZXk9aS5zb3J0KCkuam9pbihcIlwiKSxufSxPbi5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiB0aGlzLmJpbmRlcnMpdGhpcy5iaW5kZXJzW3JdLnBvcHVsYXRlUGFpbnRBcnJheSh0LGUpfSxPbi5wcm90b3R5cGUuZGVmaW5lcz1mdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLmJpbmRlcnMpdC5wdXNoLmFwcGx5KHQsdGhpcy5iaW5kZXJzW2VdLmRlZmluZXMoKSk7cmV0dXJuIHR9LE9uLnByb3RvdHlwZS5zZXRVbmlmb3Jtcz1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGkgaW4gdGhpcy5iaW5kZXJzKXRoaXMuYmluZGVyc1tpXS5zZXRVbmlmb3Jtcyh0LGUsbixyLmdldChpKSl9LE9uLnByb3RvdHlwZS5nZXRQYWludFZlcnRleEJ1ZmZlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYnVmZmVyc30sT24ucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5iaW5kZXJzKXRoaXMuYmluZGVyc1tlXS51cGxvYWQodCk7dmFyIHI9W107Zm9yKHZhciBuIGluIHRoaXMuYmluZGVycyl7dmFyIGk9dGhpcy5iaW5kZXJzW25dOyhpIGluc3RhbmNlb2YgTG58fGkgaW5zdGFuY2VvZiB6bikmJmkucGFpbnRWZXJ0ZXhCdWZmZXImJnIucHVzaChpLnBhaW50VmVydGV4QnVmZmVyKX10aGlzLl9idWZmZXJzPXJ9LE9uLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuYmluZGVycyl0aGlzLmJpbmRlcnNbdF0uZGVzdHJveSgpfTt2YXIgSW49ZnVuY3Rpb24odCxlLHIsbil7dm9pZCAwPT09biYmKG49ZnVuY3Rpb24oKXtyZXR1cm4hMH0pLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zPXt9O2Zvcih2YXIgaT0wLGE9ZTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbby5pZF09T24uY3JlYXRlRHluYW1pYyhvLHIsbiksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbby5pZF0ubGF5b3V0QXR0cmlidXRlcz10fX07ZnVuY3Rpb24gRG4odCxlKXtyZXR1cm57XCJ0ZXh0LW9wYWNpdHlcIjpcIm9wYWNpdHlcIixcImljb24tb3BhY2l0eVwiOlwib3BhY2l0eVwiLFwidGV4dC1jb2xvclwiOlwiZmlsbF9jb2xvclwiLFwiaWNvbi1jb2xvclwiOlwiZmlsbF9jb2xvclwiLFwidGV4dC1oYWxvLWNvbG9yXCI6XCJoYWxvX2NvbG9yXCIsXCJpY29uLWhhbG8tY29sb3JcIjpcImhhbG9fY29sb3JcIixcInRleHQtaGFsby1ibHVyXCI6XCJoYWxvX2JsdXJcIixcImljb24taGFsby1ibHVyXCI6XCJoYWxvX2JsdXJcIixcInRleHQtaGFsby13aWR0aFwiOlwiaGFsb193aWR0aFwiLFwiaWNvbi1oYWxvLXdpZHRoXCI6XCJoYWxvX3dpZHRoXCIsXCJsaW5lLWdhcC13aWR0aFwiOlwiZ2Fwd2lkdGhcIn1bdF18fHQucmVwbGFjZShlK1wiLVwiLFwiXCIpLnJlcGxhY2UoLy0vZyxcIl9cIil9SW4ucHJvdG90eXBlLnBvcHVsYXRlUGFpbnRBcnJheXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMpdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbcl0ucG9wdWxhdGVQYWludEFycmF5cyh0LGUpfSxJbi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1t0XX0sSW4ucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMpdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbZV0udXBsb2FkKHQpfSxJbi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucyl0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1t0XS5kZXN0cm95KCl9LHByKFwiQ29uc3RhbnRCaW5kZXJcIixDbikscHIoXCJTb3VyY2VFeHByZXNzaW9uQmluZGVyXCIsTG4pLHByKFwiQ29tcG9zaXRlRXhwcmVzc2lvbkJpbmRlclwiLHpuKSxwcihcIlByb2dyYW1Db25maWd1cmF0aW9uXCIsT24se29taXQ6W1wiX2J1ZmZlcnNcIl19KSxwcihcIlByb2dyYW1Db25maWd1cmF0aW9uU2V0XCIsSW4pO3ZhciBQbj04MTkyLFJuPSgxNix7bWluOi0xKk1hdGgucG93KDIsMTUpLG1heDpNYXRoLnBvdygyLDE1KS0xfSk7ZnVuY3Rpb24gRm4odCl7Zm9yKHZhciBlPVBuL3QuZXh0ZW50LHI9dC5sb2FkR2VvbWV0cnkoKSxuPTA7bjxyLmxlbmd0aDtuKyspZm9yKHZhciBpPXJbbl0sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdO28ueD1NYXRoLnJvdW5kKG8ueCplKSxvLnk9TWF0aC5yb3VuZChvLnkqZSksKG8ueDxSbi5taW58fG8ueD5Sbi5tYXh8fG8ueTxSbi5taW58fG8ueT5Sbi5tYXgpJiZfKFwiR2VvbWV0cnkgZXhjZWVkcyBhbGxvd2VkIGV4dGVudCwgcmVkdWNlIHlvdXIgdmVjdG9yIHRpbGUgYnVmZmVyIHNpemVcIil9cmV0dXJuIHJ9ZnVuY3Rpb24gQm4odCxlLHIsbixpKXt0LmVtcGxhY2VCYWNrKDIqZSsobisxKS8yLDIqcisoaSsxKS8yKX12YXIgTm49ZnVuY3Rpb24odCl7dGhpcy56b29tPXQuem9vbSx0aGlzLm92ZXJzY2FsaW5nPXQub3ZlcnNjYWxpbmcsdGhpcy5sYXllcnM9dC5sYXllcnMsdGhpcy5sYXllcklkcz10aGlzLmxheWVycy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheT1uZXcgJHIsdGhpcy5pbmRleEFycmF5PW5ldyBobix0aGlzLnNlZ21lbnRzPW5ldyBNbix0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucz1uZXcgSW4oVG4sdC5sYXllcnMsdC56b29tKX07ZnVuY3Rpb24gam4odCxlLHIpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO2lmKFpuKGksZSkpcmV0dXJuITA7aWYoWW4oZSxpLHIpKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIFZuKHQsZSl7aWYoMT09PXQubGVuZ3RoJiYxPT09dFswXS5sZW5ndGgpcmV0dXJuIFhuKGUsdFswXVswXSk7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspZm9yKHZhciBuPWVbcl0saT0wO2k8bi5sZW5ndGg7aSsrKWlmKFhuKHQsbltpXSkpcmV0dXJuITA7Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspe2Zvcih2YXIgbz10W2FdLHM9MDtzPG8ubGVuZ3RoO3MrKylpZihYbihlLG9bc10pKXJldHVybiEwO2Zvcih2YXIgbD0wO2w8ZS5sZW5ndGg7bCsrKWlmKEhuKG8sZVtsXSkpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gVW4odCxlLHIpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWZvcih2YXIgaT1lW25dLGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89dFthXTtpZihvLmxlbmd0aD49Mylmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKylpZihabihvLGlbc10pKXJldHVybiEwO2lmKHFuKG8saSxyKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBxbih0LGUscil7aWYodC5sZW5ndGg+MSl7aWYoSG4odCxlKSlyZXR1cm4hMDtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihZbihlW25dLHQscikpcmV0dXJuITB9Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspaWYoWW4odFtpXSxlLHIpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEhuKHQsZSl7aWYoMD09PXQubGVuZ3RofHwwPT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aC0xO3IrKylmb3IodmFyIG49dFtyXSxpPXRbcisxXSxhPTA7YTxlLmxlbmd0aC0xO2ErKylpZihHbihuLGksZVthXSxlW2ErMV0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEduKHQsZSxyLG4pe3JldHVybiB3KHQscixuKSE9PXcoZSxyLG4pJiZ3KHQsZSxyKSE9PXcodCxlLG4pfWZ1bmN0aW9uIFluKHQsZSxyKXt2YXIgbj1yKnI7aWYoMT09PWUubGVuZ3RoKXJldHVybiB0LmRpc3RTcXIoZVswXSk8bjtmb3IodmFyIGk9MTtpPGUubGVuZ3RoO2krKylpZihXbih0LGVbaS0xXSxlW2ldKTxuKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFduKHQsZSxyKXt2YXIgbj1lLmRpc3RTcXIocik7aWYoMD09PW4pcmV0dXJuIHQuZGlzdFNxcihlKTt2YXIgaT0oKHQueC1lLngpKihyLngtZS54KSsodC55LWUueSkqKHIueS1lLnkpKS9uO3JldHVybiBpPDA/dC5kaXN0U3FyKGUpOmk+MT90LmRpc3RTcXIocik6dC5kaXN0U3FyKHIuc3ViKGUpLl9tdWx0KGkpLl9hZGQoZSkpfWZ1bmN0aW9uIFhuKHQsZSl7Zm9yKHZhciByLG4saSxhPSExLG89MDtvPHQubGVuZ3RoO28rKylmb3IodmFyIHM9MCxsPShyPXRbb10pLmxlbmd0aC0xO3M8ci5sZW5ndGg7bD1zKyspbj1yW3NdLGk9cltsXSxuLnk+ZS55IT1pLnk+ZS55JiZlLng8KGkueC1uLngpKihlLnktbi55KS8oaS55LW4ueSkrbi54JiYoYT0hYSk7cmV0dXJuIGF9ZnVuY3Rpb24gWm4odCxlKXtmb3IodmFyIHI9ITEsbj0wLGk9dC5sZW5ndGgtMTtuPHQubGVuZ3RoO2k9bisrKXt2YXIgYT10W25dLG89dFtpXTthLnk+ZS55IT1vLnk+ZS55JiZlLng8KG8ueC1hLngpKihlLnktYS55KS8oby55LWEueSkrYS54JiYocj0hcil9cmV0dXJuIHJ9ZnVuY3Rpb24gJG4odCxlLHIpe3ZhciBuPWUucGFpbnQuZ2V0KHQpLnZhbHVlO3JldHVyblwiY29uc3RhbnRcIj09PW4ua2luZD9uLnZhbHVlOnIucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChlLmlkKS5iaW5kZXJzW3RdLnN0YXRpc3RpY3MubWF4fWZ1bmN0aW9uIEpuKHQpe3JldHVybiBNYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSl9ZnVuY3Rpb24gS24odCxlLHIsbixpKXtpZighZVswXSYmIWVbMV0pcmV0dXJuIHQ7dmFyIGE9bC5jb252ZXJ0KGUpO1widmlld3BvcnRcIj09PXImJmEuX3JvdGF0ZSgtbik7Zm9yKHZhciBvPVtdLHM9MDtzPHQubGVuZ3RoO3MrKyl7Zm9yKHZhciBjPXRbc10sdT1bXSxoPTA7aDxjLmxlbmd0aDtoKyspdS5wdXNoKGNbaF0uc3ViKGEuX211bHQoaSkpKTtvLnB1c2godSl9cmV0dXJuIG99Tm4ucHJvdG90eXBlLnBvcHVsYXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj10O3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXSxhPWkuZmVhdHVyZSxvPWkuaW5kZXgscz1pLnNvdXJjZUxheWVySW5kZXg7aWYodGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIobmV3IExyKHRoaXMuem9vbSksYSkpe3ZhciBsPUZuKGEpO3RoaXMuYWRkRmVhdHVyZShhLGwpLGUuZmVhdHVyZUluZGV4Lmluc2VydChhLGwsbyxzLHRoaXMuaW5kZXgpfX19LE5uLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aH0sTm4ucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LFRuKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQodCl9LE5uLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpKX0sTm4ucHJvdG90eXBlLmFkZEZlYXR1cmU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKz0xKWZvcih2YXIgaT0wLGE9bltyXTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV0scz1vLngsbD1vLnk7aWYoIShzPDB8fHM+PVBufHxsPDB8fGw+PVBuKSl7dmFyIGM9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5KSx1PWMudmVydGV4TGVuZ3RoO0JuKHRoaXMubGF5b3V0VmVydGV4QXJyYXkscyxsLC0xLC0xKSxCbih0aGlzLmxheW91dFZlcnRleEFycmF5LHMsbCwxLC0xKSxCbih0aGlzLmxheW91dFZlcnRleEFycmF5LHMsbCwxLDEpLEJuKHRoaXMubGF5b3V0VmVydGV4QXJyYXkscyxsLC0xLDEpLHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayh1LHUrMSx1KzIpLHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayh1LHUrMyx1KzIpLGMudmVydGV4TGVuZ3RoKz00LGMucHJpbWl0aXZlTGVuZ3RoKz0yfX10aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLHQpfSxwcihcIkNpcmNsZUJ1Y2tldFwiLE5uLHtvbWl0OltcImxheWVyc1wiXX0pO3ZhciBRbj17cGFpbnQ6bmV3IHFyKHtcImNpcmNsZS1yYWRpdXNcIjpuZXcganIoSS5wYWludF9jaXJjbGVbXCJjaXJjbGUtcmFkaXVzXCJdKSxcImNpcmNsZS1jb2xvclwiOm5ldyBqcihJLnBhaW50X2NpcmNsZVtcImNpcmNsZS1jb2xvclwiXSksXCJjaXJjbGUtYmx1clwiOm5ldyBqcihJLnBhaW50X2NpcmNsZVtcImNpcmNsZS1ibHVyXCJdKSxcImNpcmNsZS1vcGFjaXR5XCI6bmV3IGpyKEkucGFpbnRfY2lyY2xlW1wiY2lyY2xlLW9wYWNpdHlcIl0pLFwiY2lyY2xlLXRyYW5zbGF0ZVwiOm5ldyBOcihJLnBhaW50X2NpcmNsZVtcImNpcmNsZS10cmFuc2xhdGVcIl0pLFwiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3JcIjpuZXcgTnIoSS5wYWludF9jaXJjbGVbXCJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvclwiXSksXCJjaXJjbGUtcGl0Y2gtc2NhbGVcIjpuZXcgTnIoSS5wYWludF9jaXJjbGVbXCJjaXJjbGUtcGl0Y2gtc2NhbGVcIl0pLFwiY2lyY2xlLXBpdGNoLWFsaWdubWVudFwiOm5ldyBOcihJLnBhaW50X2NpcmNsZVtcImNpcmNsZS1waXRjaC1hbGlnbm1lbnRcIl0pLFwiY2lyY2xlLXN0cm9rZS13aWR0aFwiOm5ldyBqcihJLnBhaW50X2NpcmNsZVtcImNpcmNsZS1zdHJva2Utd2lkdGhcIl0pLFwiY2lyY2xlLXN0cm9rZS1jb2xvclwiOm5ldyBqcihJLnBhaW50X2NpcmNsZVtcImNpcmNsZS1zdHJva2UtY29sb3JcIl0pLFwiY2lyY2xlLXN0cm9rZS1vcGFjaXR5XCI6bmV3IGpyKEkucGFpbnRfY2lyY2xlW1wiY2lyY2xlLXN0cm9rZS1vcGFjaXR5XCJdKX0pfSx0aT1pKGZ1bmN0aW9uKHQsZSl7dmFyIHI7dC5leHBvcnRzPSgocj1uZXcgRmxvYXQzMkFycmF5KDMpKVswXT0wLHJbMV09MCxyWzJdPTAsZnVuY3Rpb24oKXt2YXIgdD1uZXcgRmxvYXQzMkFycmF5KDQpO3RbMF09MCx0WzFdPTAsdFsyXT0wLHRbM109MH0oKSx7dmVjMzp7dHJhbnNmb3JtTWF0MzpmdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdO3JldHVybiB0WzBdPW4qclswXStpKnJbM10rYSpyWzZdLHRbMV09bipyWzFdK2kqcls0XSthKnJbN10sdFsyXT1uKnJbMl0raSpyWzVdK2Eqcls4XSx0fX0sdmVjNDp7dHJhbnNmb3JtTWF0NDpmdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXTtyZXR1cm4gdFswXT1yWzBdKm4rcls0XSppK3JbOF0qYStyWzEyXSpvLHRbMV09clsxXSpuK3JbNV0qaStyWzldKmErclsxM10qbyx0WzJdPXJbMl0qbityWzZdKmkrclsxMF0qYStyWzE0XSpvLHRbM109clszXSpuK3JbN10qaStyWzExXSphK3JbMTVdKm8sdH19LG1hdDI6e2NyZWF0ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBGbG9hdDMyQXJyYXkoNCk7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MSx0fSxyb3RhdGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1NYXRoLnNpbihyKSxsPU1hdGguY29zKHIpO3JldHVybiB0WzBdPW4qbCthKnMsdFsxXT1pKmwrbypzLHRbMl09biotcythKmwsdFszXT1pKi1zK28qbCx0fSxzY2FsZTpmdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPXJbMF0sbD1yWzFdO3JldHVybiB0WzBdPW4qcyx0WzFdPWkqcyx0WzJdPWEqbCx0WzNdPW8qbCx0fX0sbWF0Mzp7Y3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSg5KTtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MSx0WzVdPTAsdFs2XT0wLHRbN109MCx0WzhdPTEsdH0sZnJvbVJvdGF0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zaW4oZSksbj1NYXRoLmNvcyhlKTtyZXR1cm4gdFswXT1uLHRbMV09cix0WzJdPTAsdFszXT0tcix0WzRdPW4sdFs1XT0wLHRbNl09MCx0WzddPTAsdFs4XT0xLHR9fSxtYXQ0OntjcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgRmxvYXQzMkFycmF5KDE2KTtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9LGlkZW50aXR5OmZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzLGwsYyx1LGgsZixwLGQsZz1yWzBdLHY9clsxXSxtPXJbMl07cmV0dXJuIGU9PT10Pyh0WzEyXT1lWzBdKmcrZVs0XSp2K2VbOF0qbStlWzEyXSx0WzEzXT1lWzFdKmcrZVs1XSp2K2VbOV0qbStlWzEzXSx0WzE0XT1lWzJdKmcrZVs2XSp2K2VbMTBdKm0rZVsxNF0sdFsxNV09ZVszXSpnK2VbN10qditlWzExXSptK2VbMTVdKToobj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sYz1lWzZdLHU9ZVs3XSxoPWVbOF0sZj1lWzldLHA9ZVsxMF0sZD1lWzExXSx0WzBdPW4sdFsxXT1pLHRbMl09YSx0WzNdPW8sdFs0XT1zLHRbNV09bCx0WzZdPWMsdFs3XT11LHRbOF09aCx0WzldPWYsdFsxMF09cCx0WzExXT1kLHRbMTJdPW4qZytzKnYraCptK2VbMTJdLHRbMTNdPWkqZytsKnYrZiptK2VbMTNdLHRbMTRdPWEqZytjKnYrcCptK2VbMTRdLHRbMTVdPW8qZyt1KnYrZCptK2VbMTVdKSx0fSxzY2FsZTpmdW5jdGlvbih0LGUscil7dmFyIG49clswXSxpPXJbMV0sYT1yWzJdO3JldHVybiB0WzBdPWVbMF0qbix0WzFdPWVbMV0qbix0WzJdPWVbMl0qbix0WzNdPWVbM10qbix0WzRdPWVbNF0qaSx0WzVdPWVbNV0qaSx0WzZdPWVbNl0qaSx0WzddPWVbN10qaSx0WzhdPWVbOF0qYSx0WzldPWVbOV0qYSx0WzEwXT1lWzEwXSphLHRbMTFdPWVbMTFdKmEsdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0sdH0sbXVsdGlwbHk6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSxjPWVbNl0sdT1lWzddLGg9ZVs4XSxmPWVbOV0scD1lWzEwXSxkPWVbMTFdLGc9ZVsxMl0sdj1lWzEzXSxtPWVbMTRdLHk9ZVsxNV0seD1yWzBdLGI9clsxXSxfPXJbMl0sdz1yWzNdO3JldHVybiB0WzBdPXgqbitiKnMrXypoK3cqZyx0WzFdPXgqaStiKmwrXypmK3cqdix0WzJdPXgqYStiKmMrXypwK3cqbSx0WzNdPXgqbytiKnUrXypkK3cqeSx4PXJbNF0sYj1yWzVdLF89cls2XSx3PXJbN10sdFs0XT14Km4rYipzK18qaCt3KmcsdFs1XT14KmkrYipsK18qZit3KnYsdFs2XT14KmErYipjK18qcCt3Km0sdFs3XT14Km8rYip1K18qZCt3KnkseD1yWzhdLGI9cls5XSxfPXJbMTBdLHc9clsxMV0sdFs4XT14Km4rYipzK18qaCt3KmcsdFs5XT14KmkrYipsK18qZit3KnYsdFsxMF09eCphK2IqYytfKnArdyptLHRbMTFdPXgqbytiKnUrXypkK3cqeSx4PXJbMTJdLGI9clsxM10sXz1yWzE0XSx3PXJbMTVdLHRbMTJdPXgqbitiKnMrXypoK3cqZyx0WzEzXT14KmkrYipsK18qZit3KnYsdFsxNF09eCphK2IqYytfKnArdyptLHRbMTVdPXgqbytiKnUrXypkK3cqeSx0fSxwZXJzcGVjdGl2ZTpmdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPTEvTWF0aC50YW4oZS8yKSxvPTEvKG4taSk7cmV0dXJuIHRbMF09YS9yLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPWEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPShpK24pKm8sdFsxMV09LTEsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTIqaSpuKm8sdFsxNV09MCx0fSxyb3RhdGVYOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVs0XSxvPWVbNV0scz1lWzZdLGw9ZVs3XSxjPWVbOF0sdT1lWzldLGg9ZVsxMF0sZj1lWzExXTtyZXR1cm4gZSE9PXQmJih0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pLHRbNF09YSppK2Mqbix0WzVdPW8qaSt1Km4sdFs2XT1zKmkraCpuLHRbN109bCppK2Yqbix0WzhdPWMqaS1hKm4sdFs5XT11KmktbypuLHRbMTBdPWgqaS1zKm4sdFsxMV09ZippLWwqbix0fSxyb3RhdGVaOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVswXSxvPWVbMV0scz1lWzJdLGw9ZVszXSxjPWVbNF0sdT1lWzVdLGg9ZVs2XSxmPWVbN107cmV0dXJuIGUhPT10JiYodFs4XT1lWzhdLHRbOV09ZVs5XSx0WzEwXT1lWzEwXSx0WzExXT1lWzExXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSksdFswXT1hKmkrYypuLHRbMV09byppK3Uqbix0WzJdPXMqaStoKm4sdFszXT1sKmkrZipuLHRbNF09YyppLWEqbix0WzVdPXUqaS1vKm4sdFs2XT1oKmktcypuLHRbN109ZippLWwqbix0fSxpbnZlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89ZVs0XSxzPWVbNV0sbD1lWzZdLGM9ZVs3XSx1PWVbOF0saD1lWzldLGY9ZVsxMF0scD1lWzExXSxkPWVbMTJdLGc9ZVsxM10sdj1lWzE0XSxtPWVbMTVdLHk9cipzLW4qbyx4PXIqbC1pKm8sYj1yKmMtYSpvLF89bipsLWkqcyx3PW4qYy1hKnMsaz1pKmMtYSpsLEE9dSpnLWgqZCxUPXUqdi1mKmQsTT11Km0tcCpkLFM9aCp2LWYqZyxFPWgqbS1wKmcsQz1mKm0tcCp2LEw9eSpDLXgqRStiKlMrXypNLXcqVCtrKkE7cmV0dXJuIEw/KEw9MS9MLHRbMF09KHMqQy1sKkUrYypTKSpMLHRbMV09KGkqRS1uKkMtYSpTKSpMLHRbMl09KGcqay12KncrbSpfKSpMLHRbM109KGYqdy1oKmstcCpfKSpMLHRbNF09KGwqTS1vKkMtYypUKSpMLHRbNV09KHIqQy1pKk0rYSpUKSpMLHRbNl09KHYqYi1kKmstbSp4KSpMLHRbN109KHUqay1mKmIrcCp4KSpMLHRbOF09KG8qRS1zKk0rYypBKSpMLHRbOV09KG4qTS1yKkUtYSpBKSpMLHRbMTBdPShkKnctZypiK20qeSkqTCx0WzExXT0oaCpiLXUqdy1wKnkpKkwsdFsxMl09KHMqVC1vKlMtbCpBKSpMLHRbMTNdPShyKlMtbipUK2kqQSkqTCx0WzE0XT0oZyp4LWQqXy12KnkpKkwsdFsxNV09KHUqXy1oKngrZip5KSpMLHQpOm51bGx9LG9ydGhvOmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPTEvKGUtciksbD0xLyhuLWkpLGM9MS8oYS1vKTtyZXR1cm4gdFswXT0tMipzLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPS0yKmwsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTIqYyx0WzExXT0wLHRbMTJdPShlK3IpKnMsdFsxM109KGkrbikqbCx0WzE0XT0obythKSpjLHRbMTVdPTEsdH19fSl9KSxlaT0odGkudmVjMyx0aS52ZWM0KSxyaT0odGkubWF0Mix0aS5tYXQzLHRpLm1hdDQpLG5pPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxRbil9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IE5uKHQpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbih0KXt2YXIgZT10O3JldHVybiAkbihcImNpcmNsZS1yYWRpdXNcIix0aGlzLGUpKyRuKFwiY2lyY2xlLXN0cm9rZS13aWR0aFwiLHRoaXMsZSkrSm4odGhpcy5wYWludC5nZXQoXCJjaXJjbGUtdHJhbnNsYXRlXCIpKX0sZS5wcm90b3R5cGUucXVlcnlJbnRlcnNlY3RzRmVhdHVyZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9S24odCx0aGlzLnBhaW50LmdldChcImNpcmNsZS10cmFuc2xhdGVcIiksdGhpcy5wYWludC5nZXQoXCJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvclwiKSxpLmFuZ2xlLGEpLGw9dGhpcy5wYWludC5nZXQoXCJjaXJjbGUtcmFkaXVzXCIpLmV2YWx1YXRlKGUpK3RoaXMucGFpbnQuZ2V0KFwiY2lyY2xlLXN0cm9rZS13aWR0aFwiKS5ldmFsdWF0ZShlKSxjPVwibWFwXCI9PT10aGlzLnBhaW50LmdldChcImNpcmNsZS1waXRjaC1hbGlnbm1lbnRcIiksdT1jP3M6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGlpKHQsZSxyKX0pfSl9KDAsbyxpKSxoPWM/bCphOmwsZj0wLHA9cjtmPHAubGVuZ3RoO2YrPTEpZm9yKHZhciBkPTAsZz1wW2ZdO2Q8Zy5sZW5ndGg7ZCs9MSl7dmFyIHY9Z1tkXSxtPWM/djppaSh2LG8saSkseT1oLHg9ZWkudHJhbnNmb3JtTWF0NChbXSxbdi54LHYueSwwLDFdLG8pO2lmKFwidmlld3BvcnRcIj09PXRoaXMucGFpbnQuZ2V0KFwiY2lyY2xlLXBpdGNoLXNjYWxlXCIpJiZcIm1hcFwiPT09dGhpcy5wYWludC5nZXQoXCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50XCIpP3kqPXhbM10vaS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlOlwibWFwXCI9PT10aGlzLnBhaW50LmdldChcImNpcmNsZS1waXRjaC1zY2FsZVwiKSYmXCJ2aWV3cG9ydFwiPT09dGhpcy5wYWludC5nZXQoXCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50XCIpJiYoeSo9aS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlL3hbM10pLGpuKHUsbSx5KSlyZXR1cm4hMH1yZXR1cm4hMX0sZX0oSHIpO2Z1bmN0aW9uIGlpKHQsZSxyKXt2YXIgbj1laS50cmFuc2Zvcm1NYXQ0KFtdLFt0LngsdC55LDAsMV0sZSk7cmV0dXJuIG5ldyBsKChuWzBdL25bM10rMSkqci53aWR0aCouNSwoblsxXS9uWzNdKzEpKnIuaGVpZ2h0Ki41KX12YXIgYWk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlfShObik7ZnVuY3Rpb24gb2kodCxlLHIsbil7dmFyIGk9ZS53aWR0aCxhPWUuaGVpZ2h0O2lmKG4pe2lmKG4ubGVuZ3RoIT09aSphKnIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJtaXNtYXRjaGVkIGltYWdlIHNpemVcIil9ZWxzZSBuPW5ldyBVaW50OEFycmF5KGkqYSpyKTtyZXR1cm4gdC53aWR0aD1pLHQuaGVpZ2h0PWEsdC5kYXRhPW4sdH1mdW5jdGlvbiBzaSh0LGUscil7dmFyIG49ZS53aWR0aCxpPWUuaGVpZ2h0O2lmKG4hPT10LndpZHRofHxpIT09dC5oZWlnaHQpe3ZhciBhPW9pKHt9LHt3aWR0aDpuLGhlaWdodDppfSxyKTtsaSh0LGEse3g6MCx5OjB9LHt4OjAseTowfSx7d2lkdGg6TWF0aC5taW4odC53aWR0aCxuKSxoZWlnaHQ6TWF0aC5taW4odC5oZWlnaHQsaSl9LHIpLHQud2lkdGg9bix0LmhlaWdodD1pLHQuZGF0YT1hLmRhdGF9fWZ1bmN0aW9uIGxpKHQsZSxyLG4saSxhKXtpZigwPT09aS53aWR0aHx8MD09PWkuaGVpZ2h0KXJldHVybiBlO2lmKGkud2lkdGg+dC53aWR0aHx8aS5oZWlnaHQ+dC5oZWlnaHR8fHIueD50LndpZHRoLWkud2lkdGh8fHIueT50LmhlaWdodC1pLmhlaWdodCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIm91dCBvZiByYW5nZSBzb3VyY2UgY29vcmRpbmF0ZXMgZm9yIGltYWdlIGNvcHlcIik7aWYoaS53aWR0aD5lLndpZHRofHxpLmhlaWdodD5lLmhlaWdodHx8bi54PmUud2lkdGgtaS53aWR0aHx8bi55PmUuaGVpZ2h0LWkuaGVpZ2h0KXRocm93IG5ldyBSYW5nZUVycm9yKFwib3V0IG9mIHJhbmdlIGRlc3RpbmF0aW9uIGNvb3JkaW5hdGVzIGZvciBpbWFnZSBjb3B5XCIpO2Zvcih2YXIgbz10LmRhdGEscz1lLmRhdGEsbD0wO2w8aS5oZWlnaHQ7bCsrKWZvcih2YXIgYz0oKHIueStsKSp0LndpZHRoK3IueCkqYSx1PSgobi55K2wpKmUud2lkdGgrbi54KSphLGg9MDtoPGkud2lkdGgqYTtoKyspc1t1K2hdPW9bYytoXTtyZXR1cm4gZX1wcihcIkhlYXRtYXBCdWNrZXRcIixhaSx7b21pdDpbXCJsYXllcnNcIl19KTt2YXIgY2k9ZnVuY3Rpb24odCxlKXtvaSh0aGlzLHQsMSxlKX07Y2kucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0KXtzaSh0aGlzLHQsMSl9LGNpLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgY2koe3dpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0fSxuZXcgVWludDhBcnJheSh0aGlzLmRhdGEpKX0sY2kuY29weT1mdW5jdGlvbih0LGUscixuLGkpe2xpKHQsZSxyLG4saSwxKX07dmFyIHVpPWZ1bmN0aW9uKHQsZSl7b2kodGhpcyx0LDQsZSl9O3VpLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCl7c2kodGhpcyx0LDQpfSx1aS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHVpKHt3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodH0sbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhKSl9LHVpLmNvcHk9ZnVuY3Rpb24odCxlLHIsbixpKXtsaSh0LGUscixuLGksNCl9LHByKFwiQWxwaGFJbWFnZVwiLGNpKSxwcihcIlJHQkFJbWFnZVwiLHVpKTt2YXIgaGk9e3BhaW50Om5ldyBxcih7XCJoZWF0bWFwLXJhZGl1c1wiOm5ldyBqcihJLnBhaW50X2hlYXRtYXBbXCJoZWF0bWFwLXJhZGl1c1wiXSksXCJoZWF0bWFwLXdlaWdodFwiOm5ldyBqcihJLnBhaW50X2hlYXRtYXBbXCJoZWF0bWFwLXdlaWdodFwiXSksXCJoZWF0bWFwLWludGVuc2l0eVwiOm5ldyBOcihJLnBhaW50X2hlYXRtYXBbXCJoZWF0bWFwLWludGVuc2l0eVwiXSksXCJoZWF0bWFwLWNvbG9yXCI6bmV3IFVyKEkucGFpbnRfaGVhdG1hcFtcImhlYXRtYXAtY29sb3JcIl0pLFwiaGVhdG1hcC1vcGFjaXR5XCI6bmV3IE5yKEkucGFpbnRfaGVhdG1hcFtcImhlYXRtYXAtb3BhY2l0eVwiXSl9KX07ZnVuY3Rpb24gZmkodCxlKXtmb3IodmFyIHI9bmV3IFVpbnQ4QXJyYXkoMTAyNCksbj17fSxpPTAsYT0wO2k8MjU2O2krKyxhKz00KXtuW2VdPWkvMjU1O3ZhciBvPXQuZXZhbHVhdGUobik7clthKzBdPU1hdGguZmxvb3IoMjU1Km8uci9vLmEpLHJbYSsxXT1NYXRoLmZsb29yKDI1NSpvLmcvby5hKSxyW2ErMl09TWF0aC5mbG9vcigyNTUqby5iL28uYSksclthKzNdPU1hdGguZmxvb3IoMjU1Km8uYSl9cmV0dXJuIG5ldyB1aSh7d2lkdGg6MjU2LGhlaWdodDoxfSxyKX12YXIgcGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLGhpKSx0aGlzLl91cGRhdGVDb2xvclJhbXAoKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuY3JlYXRlQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYWkodCl9LGUucHJvdG90eXBlLnNldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24oZSxyLG4pe3QucHJvdG90eXBlLnNldFBhaW50UHJvcGVydHkuY2FsbCh0aGlzLGUscixuKSxcImhlYXRtYXAtY29sb3JcIj09PWUmJnRoaXMuX3VwZGF0ZUNvbG9yUmFtcCgpfSxlLnByb3RvdHlwZS5fdXBkYXRlQ29sb3JSYW1wPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5fdmFsdWVzW1wiaGVhdG1hcC1jb2xvclwiXS52YWx1ZS5leHByZXNzaW9uO3RoaXMuY29sb3JSYW1wPWZpKHQsXCJoZWF0bWFwRGVuc2l0eVwiKSx0aGlzLmNvbG9yUmFtcFRleHR1cmU9bnVsbH0sZS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKCl7dGhpcy5oZWF0bWFwRmJvJiYodGhpcy5oZWF0bWFwRmJvLmRlc3Ryb3koKSx0aGlzLmhlYXRtYXBGYm89bnVsbCl9LGUucHJvdG90eXBlLnF1ZXJ5UmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuaGFzT2Zmc2NyZWVuUGFzcz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5wYWludC5nZXQoXCJoZWF0bWFwLW9wYWNpdHlcIikmJlwibm9uZVwiIT09dGhpcy52aXNpYmlsaXR5fSxlfShIciksZGk9e3BhaW50Om5ldyBxcih7XCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWRpcmVjdGlvblwiOm5ldyBOcihJLnBhaW50X2hpbGxzaGFkZVtcImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uXCJdKSxcImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yXCI6bmV3IE5yKEkucGFpbnRfaGlsbHNoYWRlW1wiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1hbmNob3JcIl0pLFwiaGlsbHNoYWRlLWV4YWdnZXJhdGlvblwiOm5ldyBOcihJLnBhaW50X2hpbGxzaGFkZVtcImhpbGxzaGFkZS1leGFnZ2VyYXRpb25cIl0pLFwiaGlsbHNoYWRlLXNoYWRvdy1jb2xvclwiOm5ldyBOcihJLnBhaW50X2hpbGxzaGFkZVtcImhpbGxzaGFkZS1zaGFkb3ctY29sb3JcIl0pLFwiaGlsbHNoYWRlLWhpZ2hsaWdodC1jb2xvclwiOm5ldyBOcihJLnBhaW50X2hpbGxzaGFkZVtcImhpbGxzaGFkZS1oaWdobGlnaHQtY29sb3JcIl0pLFwiaGlsbHNoYWRlLWFjY2VudC1jb2xvclwiOm5ldyBOcihJLnBhaW50X2hpbGxzaGFkZVtcImhpbGxzaGFkZS1hY2NlbnQtY29sb3JcIl0pfSl9LGdpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxkaSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmhhc09mZnNjcmVlblBhc3M9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMucGFpbnQuZ2V0KFwiaGlsbHNoYWRlLWV4YWdnZXJhdGlvblwiKSYmXCJub25lXCIhPT10aGlzLnZpc2liaWxpdHl9LGV9KEhyKSx2aT1Ycihbe25hbWU6XCJhX3Bvc1wiLGNvbXBvbmVudHM6Mix0eXBlOlwiSW50MTZcIn1dLDQpLm1lbWJlcnMsbWk9eGkseWk9eGk7ZnVuY3Rpb24geGkodCxlLHIpe3I9cnx8Mjt2YXIgbixpLGEsbyxzLGwsYyx1PWUmJmUubGVuZ3RoLGg9dT9lWzBdKnI6dC5sZW5ndGgsZj1iaSh0LDAsaCxyLCEwKSxwPVtdO2lmKCFmKXJldHVybiBwO2lmKHUmJihmPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzPVtdO2ZvcihpPTAsYT1lLmxlbmd0aDtpPGE7aSsrKShvPWJpKHQsZVtpXSpuLGk8YS0xP2VbaSsxXSpuOnQubGVuZ3RoLG4sITEpKT09PW8ubmV4dCYmKG8uc3RlaW5lcj0hMCkscy5wdXNoKExpKG8pKTtmb3Iocy5zb3J0KFNpKSxpPTA7aTxzLmxlbmd0aDtpKyspRWkoc1tpXSxyKSxyPV9pKHIsci5uZXh0KTtyZXR1cm4gcn0odCxlLGYscikpLHQubGVuZ3RoPjgwKnIpe249YT10WzBdLGk9bz10WzFdO2Zvcih2YXIgZD1yO2Q8aDtkKz1yKShzPXRbZF0pPG4mJihuPXMpLChsPXRbZCsxXSk8aSYmKGk9bCkscz5hJiYoYT1zKSxsPm8mJihvPWwpO2M9MCE9PShjPU1hdGgubWF4KGEtbixvLWkpKT8xL2M6MH1yZXR1cm4gd2koZixwLHIsbixpLGMpLHB9ZnVuY3Rpb24gYmkodCxlLHIsbixpKXt2YXIgYSxvO2lmKGk9PT1WaSh0LGUscixuKT4wKWZvcihhPWU7YTxyO2ErPW4pbz1CaShhLHRbYV0sdFthKzFdLG8pO2Vsc2UgZm9yKGE9ci1uO2E+PWU7YS09bilvPUJpKGEsdFthXSx0W2ErMV0sbyk7cmV0dXJuIG8mJkRpKG8sby5uZXh0KSYmKE5pKG8pLG89by5uZXh0KSxvfWZ1bmN0aW9uIF9pKHQsZSl7aWYoIXQpcmV0dXJuIHQ7ZXx8KGU9dCk7dmFyIHIsbj10O2Rve2lmKHI9ITEsbi5zdGVpbmVyfHwhRGkobixuLm5leHQpJiYwIT09SWkobi5wcmV2LG4sbi5uZXh0KSluPW4ubmV4dDtlbHNle2lmKE5pKG4pLChuPWU9bi5wcmV2KT09PW4ubmV4dClicmVhaztyPSEwfX13aGlsZShyfHxuIT09ZSk7cmV0dXJuIGV9ZnVuY3Rpb24gd2kodCxlLHIsbixpLGEsbyl7aWYodCl7IW8mJmEmJmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQ7ZG97bnVsbD09PWkueiYmKGkuej1DaShpLngsaS55LGUscixuKSksaS5wcmV2Wj1pLnByZXYsaS5uZXh0Wj1pLm5leHQsaT1pLm5leHR9d2hpbGUoaSE9PXQpO2kucHJldloubmV4dFo9bnVsbCxpLnByZXZaPW51bGwsZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHMsbCxjPTE7ZG97Zm9yKHI9dCx0PW51bGwsYT1udWxsLG89MDtyOyl7Zm9yKG8rKyxuPXIscz0wLGU9MDtlPGMmJihzKyssbj1uLm5leHRaKTtlKyspO2ZvcihsPWM7cz4wfHxsPjAmJm47KTAhPT1zJiYoMD09PWx8fCFufHxyLno8PW4ueik/KGk9cixyPXIubmV4dFoscy0tKTooaT1uLG49bi5uZXh0WixsLS0pLGE/YS5uZXh0Wj1pOnQ9aSxpLnByZXZaPWEsYT1pO3I9bn1hLm5leHRaPW51bGwsYyo9Mn13aGlsZShvPjEpfShpKX0odCxuLGksYSk7Zm9yKHZhciBzLGwsYz10O3QucHJldiE9PXQubmV4dDspaWYocz10LnByZXYsbD10Lm5leHQsYT9BaSh0LG4saSxhKTpraSh0KSllLnB1c2gocy5pL3IpLGUucHVzaCh0LmkvciksZS5wdXNoKGwuaS9yKSxOaSh0KSx0PWwubmV4dCxjPWwubmV4dDtlbHNlIGlmKCh0PWwpPT09Yyl7bz8xPT09bz93aSh0PVRpKHQsZSxyKSxlLHIsbixpLGEsMik6Mj09PW8mJk1pKHQsZSxyLG4saSxhKTp3aShfaSh0KSxlLHIsbixpLGEsMSk7YnJlYWt9fX1mdW5jdGlvbiBraSh0KXt2YXIgZT10LnByZXYscj10LG49dC5uZXh0O2lmKElpKGUscixuKT49MClyZXR1cm4hMTtmb3IodmFyIGk9dC5uZXh0Lm5leHQ7aSE9PXQucHJldjspe2lmKHppKGUueCxlLnksci54LHIueSxuLngsbi55LGkueCxpLnkpJiZJaShpLnByZXYsaSxpLm5leHQpPj0wKXJldHVybiExO2k9aS5uZXh0fXJldHVybiEwfWZ1bmN0aW9uIEFpKHQsZSxyLG4pe3ZhciBpPXQucHJldixhPXQsbz10Lm5leHQ7aWYoSWkoaSxhLG8pPj0wKXJldHVybiExO2Zvcih2YXIgcz1pLng8YS54P2kueDxvLng/aS54Om8ueDphLng8by54P2EueDpvLngsbD1pLnk8YS55P2kueTxvLnk/aS55Om8ueTphLnk8by55P2EueTpvLnksYz1pLng+YS54P2kueD5vLng/aS54Om8ueDphLng+by54P2EueDpvLngsdT1pLnk+YS55P2kueT5vLnk/aS55Om8ueTphLnk+by55P2EueTpvLnksaD1DaShzLGwsZSxyLG4pLGY9Q2koYyx1LGUscixuKSxwPXQucHJldlosZD10Lm5leHRaO3AmJnAuej49aCYmZCYmZC56PD1mOyl7aWYocCE9PXQucHJldiYmcCE9PXQubmV4dCYmemkoaS54LGkueSxhLngsYS55LG8ueCxvLnkscC54LHAueSkmJklpKHAucHJldixwLHAubmV4dCk+PTApcmV0dXJuITE7aWYocD1wLnByZXZaLGQhPT10LnByZXYmJmQhPT10Lm5leHQmJnppKGkueCxpLnksYS54LGEueSxvLngsby55LGQueCxkLnkpJiZJaShkLnByZXYsZCxkLm5leHQpPj0wKXJldHVybiExO2Q9ZC5uZXh0Wn1mb3IoO3AmJnAuej49aDspe2lmKHAhPT10LnByZXYmJnAhPT10Lm5leHQmJnppKGkueCxpLnksYS54LGEueSxvLngsby55LHAueCxwLnkpJiZJaShwLnByZXYscCxwLm5leHQpPj0wKXJldHVybiExO3A9cC5wcmV2Wn1mb3IoO2QmJmQuejw9Zjspe2lmKGQhPT10LnByZXYmJmQhPT10Lm5leHQmJnppKGkueCxpLnksYS54LGEueSxvLngsby55LGQueCxkLnkpJiZJaShkLnByZXYsZCxkLm5leHQpPj0wKXJldHVybiExO2Q9ZC5uZXh0Wn1yZXR1cm4hMH1mdW5jdGlvbiBUaSh0LGUscil7dmFyIG49dDtkb3t2YXIgaT1uLnByZXYsYT1uLm5leHQubmV4dDshRGkoaSxhKSYmUGkoaSxuLG4ubmV4dCxhKSYmUmkoaSxhKSYmUmkoYSxpKSYmKGUucHVzaChpLmkvciksZS5wdXNoKG4uaS9yKSxlLnB1c2goYS5pL3IpLE5pKG4pLE5pKG4ubmV4dCksbj10PWEpLG49bi5uZXh0fXdoaWxlKG4hPT10KTtyZXR1cm4gbn1mdW5jdGlvbiBNaSh0LGUscixuLGksYSl7dmFyIG89dDtkb3tmb3IodmFyIHM9by5uZXh0Lm5leHQ7cyE9PW8ucHJldjspe2lmKG8uaSE9PXMuaSYmT2kobyxzKSl7dmFyIGw9RmkobyxzKTtyZXR1cm4gbz1faShvLG8ubmV4dCksbD1faShsLGwubmV4dCksd2kobyxlLHIsbixpLGEpLHZvaWQgd2kobCxlLHIsbixpLGEpfXM9cy5uZXh0fW89by5uZXh0fXdoaWxlKG8hPT10KX1mdW5jdGlvbiBTaSh0LGUpe3JldHVybiB0LngtZS54fWZ1bmN0aW9uIEVpKHQsZSl7aWYoZT1mdW5jdGlvbih0LGUpe3ZhciByLG49ZSxpPXQueCxhPXQueSxvPS0xLzA7ZG97aWYoYTw9bi55JiZhPj1uLm5leHQueSYmbi5uZXh0LnkhPT1uLnkpe3ZhciBzPW4ueCsoYS1uLnkpKihuLm5leHQueC1uLngpLyhuLm5leHQueS1uLnkpO2lmKHM8PWkmJnM+byl7aWYobz1zLHM9PT1pKXtpZihhPT09bi55KXJldHVybiBuO2lmKGE9PT1uLm5leHQueSlyZXR1cm4gbi5uZXh0fXI9bi54PG4ubmV4dC54P246bi5uZXh0fX1uPW4ubmV4dH13aGlsZShuIT09ZSk7aWYoIXIpcmV0dXJuIG51bGw7aWYoaT09PW8pcmV0dXJuIHIucHJldjt2YXIgbCxjPXIsdT1yLngsaD1yLnksZj0xLzA7Zm9yKG49ci5uZXh0O24hPT1jOylpPj1uLngmJm4ueD49dSYmaSE9PW4ueCYmemkoYTxoP2k6byxhLHUsaCxhPGg/bzppLGEsbi54LG4ueSkmJigobD1NYXRoLmFicyhhLW4ueSkvKGktbi54KSk8Znx8bD09PWYmJm4ueD5yLngpJiZSaShuLHQpJiYocj1uLGY9bCksbj1uLm5leHQ7cmV0dXJuIHJ9KHQsZSkpe3ZhciByPUZpKGUsdCk7X2kocixyLm5leHQpfX1mdW5jdGlvbiBDaSh0LGUscixuLGkpe3JldHVybih0PTE0MzE2NTU3NjUmKCh0PTg1ODk5MzQ1OSYoKHQ9MjUyNjQ1MTM1JigodD0xNjcxMTkzNSYoKHQ9MzI3NjcqKHQtcikqaSl8dDw8OCkpfHQ8PDQpKXx0PDwyKSl8dDw8MSkpfChlPTE0MzE2NTU3NjUmKChlPTg1ODk5MzQ1OSYoKGU9MjUyNjQ1MTM1JigoZT0xNjcxMTkzNSYoKGU9MzI3NjcqKGUtbikqaSl8ZTw8OCkpfGU8PDQpKXxlPDwyKSl8ZTw8MSkpPDwxfWZ1bmN0aW9uIExpKHQpe3ZhciBlPXQscj10O2Rve2UueDxyLngmJihyPWUpLGU9ZS5uZXh0fXdoaWxlKGUhPT10KTtyZXR1cm4gcn1mdW5jdGlvbiB6aSh0LGUscixuLGksYSxvLHMpe3JldHVybihpLW8pKihlLXMpLSh0LW8pKihhLXMpPj0wJiYodC1vKSoobi1zKS0oci1vKSooZS1zKT49MCYmKHItbykqKGEtcyktKGktbykqKG4tcyk+PTB9ZnVuY3Rpb24gT2kodCxlKXtyZXR1cm4gdC5uZXh0LmkhPT1lLmkmJnQucHJldi5pIT09ZS5pJiYhZnVuY3Rpb24odCxlKXt2YXIgcj10O2Rve2lmKHIuaSE9PXQuaSYmci5uZXh0LmkhPT10LmkmJnIuaSE9PWUuaSYmci5uZXh0LmkhPT1lLmkmJlBpKHIsci5uZXh0LHQsZSkpcmV0dXJuITA7cj1yLm5leHR9d2hpbGUociE9PXQpO3JldHVybiExfSh0LGUpJiZSaSh0LGUpJiZSaShlLHQpJiZmdW5jdGlvbih0LGUpe3ZhciByPXQsbj0hMSxpPSh0LngrZS54KS8yLGE9KHQueStlLnkpLzI7ZG97ci55PmEhPXIubmV4dC55PmEmJnIubmV4dC55IT09ci55JiZpPChyLm5leHQueC1yLngpKihhLXIueSkvKHIubmV4dC55LXIueSkrci54JiYobj0hbikscj1yLm5leHR9d2hpbGUociE9PXQpO3JldHVybiBufSh0LGUpfWZ1bmN0aW9uIElpKHQsZSxyKXtyZXR1cm4oZS55LXQueSkqKHIueC1lLngpLShlLngtdC54KSooci55LWUueSl9ZnVuY3Rpb24gRGkodCxlKXtyZXR1cm4gdC54PT09ZS54JiZ0Lnk9PT1lLnl9ZnVuY3Rpb24gUGkodCxlLHIsbil7cmV0dXJuISEoRGkodCxlKSYmRGkocixuKXx8RGkodCxuKSYmRGkocixlKSl8fElpKHQsZSxyKT4wIT1JaSh0LGUsbik+MCYmSWkocixuLHQpPjAhPUlpKHIsbixlKT4wfWZ1bmN0aW9uIFJpKHQsZSl7cmV0dXJuIElpKHQucHJldix0LHQubmV4dCk8MD9JaSh0LGUsdC5uZXh0KT49MCYmSWkodCx0LnByZXYsZSk+PTA6SWkodCxlLHQucHJldik8MHx8SWkodCx0Lm5leHQsZSk8MH1mdW5jdGlvbiBGaSh0LGUpe3ZhciByPW5ldyBqaSh0LmksdC54LHQueSksbj1uZXcgamkoZS5pLGUueCxlLnkpLGk9dC5uZXh0LGE9ZS5wcmV2O3JldHVybiB0Lm5leHQ9ZSxlLnByZXY9dCxyLm5leHQ9aSxpLnByZXY9cixuLm5leHQ9cixyLnByZXY9bixhLm5leHQ9bixuLnByZXY9YSxufWZ1bmN0aW9uIEJpKHQsZSxyLG4pe3ZhciBpPW5ldyBqaSh0LGUscik7cmV0dXJuIG4/KGkubmV4dD1uLm5leHQsaS5wcmV2PW4sbi5uZXh0LnByZXY9aSxuLm5leHQ9aSk6KGkucHJldj1pLGkubmV4dD1pKSxpfWZ1bmN0aW9uIE5pKHQpe3QubmV4dC5wcmV2PXQucHJldix0LnByZXYubmV4dD10Lm5leHQsdC5wcmV2WiYmKHQucHJldloubmV4dFo9dC5uZXh0WiksdC5uZXh0WiYmKHQubmV4dFoucHJldlo9dC5wcmV2Wil9ZnVuY3Rpb24gamkodCxlLHIpe3RoaXMuaT10LHRoaXMueD1lLHRoaXMueT1yLHRoaXMucHJldj1udWxsLHRoaXMubmV4dD1udWxsLHRoaXMuej1udWxsLHRoaXMucHJldlo9bnVsbCx0aGlzLm5leHRaPW51bGwsdGhpcy5zdGVpbmVyPSExfWZ1bmN0aW9uIFZpKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9ZSxvPXItbjthPHI7YSs9bilpKz0odFtvXS10W2FdKSoodFthKzFdK3RbbysxXSksbz1hO3JldHVybiBpfXhpLmRldmlhdGlvbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lJiZlLmxlbmd0aCxhPWk/ZVswXSpyOnQubGVuZ3RoLG89TWF0aC5hYnMoVmkodCwwLGEscikpO2lmKGkpZm9yKHZhciBzPTAsbD1lLmxlbmd0aDtzPGw7cysrKXt2YXIgYz1lW3NdKnIsdT1zPGwtMT9lW3MrMV0qcjp0Lmxlbmd0aDtvLT1NYXRoLmFicyhWaSh0LGMsdSxyKSl9dmFyIGg9MDtmb3Iocz0wO3M8bi5sZW5ndGg7cys9Myl7dmFyIGY9bltzXSpyLHA9bltzKzFdKnIsZD1uW3MrMl0qcjtoKz1NYXRoLmFicygodFtmXS10W2RdKSoodFtwKzFdLXRbZisxXSktKHRbZl0tdFtwXSkqKHRbZCsxXS10W2YrMV0pKX1yZXR1cm4gMD09PW8mJjA9PT1oPzA6TWF0aC5hYnMoKGgtbykvbyl9LHhpLmZsYXR0ZW49ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF1bMF0ubGVuZ3RoLHI9e3ZlcnRpY2VzOltdLGhvbGVzOltdLGRpbWVuc2lvbnM6ZX0sbj0wLGk9MDtpPHQubGVuZ3RoO2krKyl7Zm9yKHZhciBhPTA7YTx0W2ldLmxlbmd0aDthKyspZm9yKHZhciBvPTA7bzxlO28rKylyLnZlcnRpY2VzLnB1c2godFtpXVthXVtvXSk7aT4wJiYobis9dFtpLTFdLmxlbmd0aCxyLmhvbGVzLnB1c2gobikpfXJldHVybiByfSxtaS5kZWZhdWx0PXlpO3ZhciBVaT1IaSxxaT1IaTtmdW5jdGlvbiBIaSh0LGUscixuLGkpeyFmdW5jdGlvbiB0KGUscixuLGksYSl7Zm9yKDtpPm47KXtpZihpLW4+NjAwKXt2YXIgbz1pLW4rMSxzPXItbisxLGw9TWF0aC5sb2cobyksYz0uNSpNYXRoLmV4cCgyKmwvMyksdT0uNSpNYXRoLnNxcnQobCpjKihvLWMpL28pKihzLW8vMjwwPy0xOjEpO3QoZSxyLE1hdGgubWF4KG4sTWF0aC5mbG9vcihyLXMqYy9vK3UpKSxNYXRoLm1pbihpLE1hdGguZmxvb3Iocisoby1zKSpjL28rdSkpLGEpfXZhciBoPWVbcl0sZj1uLHA9aTtmb3IoR2koZSxuLHIpLGEoZVtpXSxoKT4wJiZHaShlLG4saSk7ZjxwOyl7Zm9yKEdpKGUsZixwKSxmKysscC0tO2EoZVtmXSxoKTwwOylmKys7Zm9yKDthKGVbcF0saCk+MDspcC0tfTA9PT1hKGVbbl0saCk/R2koZSxuLHApOkdpKGUsKytwLGkpLHA8PXImJihuPXArMSkscjw9cCYmKGk9cC0xKX19KHQsZSxyfHwwLG58fHQubGVuZ3RoLTEsaXx8WWkpfWZ1bmN0aW9uIEdpKHQsZSxyKXt2YXIgbj10W2VdO3RbZV09dFtyXSx0W3JdPW59ZnVuY3Rpb24gWWkodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9ZnVuY3Rpb24gV2kodCxlKXt2YXIgcj10Lmxlbmd0aDtpZihyPD0xKXJldHVyblt0XTtmb3IodmFyIG4saSxhPVtdLG89MDtvPHI7bysrKXt2YXIgcz1rKHRbb10pOzAhPT1zJiYodFtvXS5hcmVhPU1hdGguYWJzKHMpLHZvaWQgMD09PWkmJihpPXM8MCksaT09PXM8MD8obiYmYS5wdXNoKG4pLG49W3Rbb11dKTpuLnB1c2godFtvXSkpfWlmKG4mJmEucHVzaChuKSxlPjEpZm9yKHZhciBsPTA7bDxhLmxlbmd0aDtsKyspYVtsXS5sZW5ndGg8PWV8fChVaShhW2xdLGUsMSxhW2xdLmxlbmd0aC0xLFhpKSxhW2xdPWFbbF0uc2xpY2UoMCxlKSk7cmV0dXJuIGF9ZnVuY3Rpb24gWGkodCxlKXtyZXR1cm4gZS5hcmVhLXQuYXJlYX1VaS5kZWZhdWx0PXFpO3ZhciBaaT1mdW5jdGlvbih0KXt0aGlzLnpvb209dC56b29tLHRoaXMub3ZlcnNjYWxpbmc9dC5vdmVyc2NhbGluZyx0aGlzLmxheWVycz10LmxheWVycyx0aGlzLmxheWVySWRzPXRoaXMubGF5ZXJzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pLHRoaXMuaW5kZXg9dC5pbmRleCx0aGlzLmxheW91dFZlcnRleEFycmF5PW5ldyAkcix0aGlzLmluZGV4QXJyYXk9bmV3IGhuLHRoaXMuaW5kZXhBcnJheTI9bmV3IGZuLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zPW5ldyBJbih2aSx0LmxheWVycyx0Lnpvb20pLHRoaXMuc2VnbWVudHM9bmV3IE1uLHRoaXMuc2VnbWVudHMyPW5ldyBNbn07WmkucHJvdG90eXBlLnBvcHVsYXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj10O3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXSxhPWkuZmVhdHVyZSxvPWkuaW5kZXgscz1pLnNvdXJjZUxheWVySW5kZXg7aWYodGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIobmV3IExyKHRoaXMuem9vbSksYSkpe3ZhciBsPUZuKGEpO3RoaXMuYWRkRmVhdHVyZShhLGwpLGUuZmVhdHVyZUluZGV4Lmluc2VydChhLGwsbyxzLHRoaXMuaW5kZXgpfX19LFppLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aH0sWmkucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LHZpKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KSx0aGlzLmluZGV4QnVmZmVyMj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheTIpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZCh0KX0sWmkucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlciYmKHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyMi5kZXN0cm95KCksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMyLmRlc3Ryb3koKSl9LFppLnByb3RvdHlwZS5hZGRGZWF0dXJlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj1XaShlLDUwMCk7cjxuLmxlbmd0aDtyKz0xKXtmb3IodmFyIGk9bltyXSxhPTAsbz0wLHM9aTtvPHMubGVuZ3RoO28rPTEpYSs9c1tvXS5sZW5ndGg7Zm9yKHZhciBsPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoYSx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheSksYz1sLnZlcnRleExlbmd0aCx1PVtdLGg9W10sZj0wLHA9aTtmPHAubGVuZ3RoO2YrPTEpe3ZhciBkPXBbZl07aWYoMCE9PWQubGVuZ3RoKXtkIT09aVswXSYmaC5wdXNoKHUubGVuZ3RoLzIpO3ZhciBnPXRoaXMuc2VnbWVudHMyLnByZXBhcmVTZWdtZW50KGQubGVuZ3RoLHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5Miksdj1nLnZlcnRleExlbmd0aDt0aGlzLmxheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKGRbMF0ueCxkWzBdLnkpLHRoaXMuaW5kZXhBcnJheTIuZW1wbGFjZUJhY2soditkLmxlbmd0aC0xLHYpLHUucHVzaChkWzBdLngpLHUucHVzaChkWzBdLnkpO2Zvcih2YXIgbT0xO208ZC5sZW5ndGg7bSsrKXRoaXMubGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2soZFttXS54LGRbbV0ueSksdGhpcy5pbmRleEFycmF5Mi5lbXBsYWNlQmFjayh2K20tMSx2K20pLHUucHVzaChkW21dLngpLHUucHVzaChkW21dLnkpO2cudmVydGV4TGVuZ3RoKz1kLmxlbmd0aCxnLnByaW1pdGl2ZUxlbmd0aCs9ZC5sZW5ndGh9fWZvcih2YXIgeT1taSh1LGgpLHg9MDt4PHkubGVuZ3RoO3grPTMpdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKGMreVt4XSxjK3lbeCsxXSxjK3lbeCsyXSk7bC52ZXJ0ZXhMZW5ndGgrPWEsbC5wcmltaXRpdmVMZW5ndGgrPXkubGVuZ3RoLzN9dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCx0KX0scHIoXCJGaWxsQnVja2V0XCIsWmkse29taXQ6W1wibGF5ZXJzXCJdfSk7dmFyICRpPXtwYWludDpuZXcgcXIoe1wiZmlsbC1hbnRpYWxpYXNcIjpuZXcgTnIoSS5wYWludF9maWxsW1wiZmlsbC1hbnRpYWxpYXNcIl0pLFwiZmlsbC1vcGFjaXR5XCI6bmV3IGpyKEkucGFpbnRfZmlsbFtcImZpbGwtb3BhY2l0eVwiXSksXCJmaWxsLWNvbG9yXCI6bmV3IGpyKEkucGFpbnRfZmlsbFtcImZpbGwtY29sb3JcIl0pLFwiZmlsbC1vdXRsaW5lLWNvbG9yXCI6bmV3IGpyKEkucGFpbnRfZmlsbFtcImZpbGwtb3V0bGluZS1jb2xvclwiXSksXCJmaWxsLXRyYW5zbGF0ZVwiOm5ldyBOcihJLnBhaW50X2ZpbGxbXCJmaWxsLXRyYW5zbGF0ZVwiXSksXCJmaWxsLXRyYW5zbGF0ZS1hbmNob3JcIjpuZXcgTnIoSS5wYWludF9maWxsW1wiZmlsbC10cmFuc2xhdGUtYW5jaG9yXCJdKSxcImZpbGwtcGF0dGVyblwiOm5ldyBWcihJLnBhaW50X2ZpbGxbXCJmaWxsLXBhdHRlcm5cIl0pfSl9LEppPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSwkaSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnJlY2FsY3VsYXRlPWZ1bmN0aW9uKHQpe3RoaXMucGFpbnQ9dGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50LnBvc3NpYmx5RXZhbHVhdGUodCk7dmFyIGU9dGhpcy5wYWludC5fdmFsdWVzW1wiZmlsbC1vdXRsaW5lLWNvbG9yXCJdO1wiY29uc3RhbnRcIj09PWUudmFsdWUua2luZCYmdm9pZCAwPT09ZS52YWx1ZS52YWx1ZSYmKHRoaXMucGFpbnQuX3ZhbHVlc1tcImZpbGwtb3V0bGluZS1jb2xvclwiXT10aGlzLnBhaW50Ll92YWx1ZXNbXCJmaWxsLWNvbG9yXCJdKX0sZS5wcm90b3R5cGUuY3JlYXRlQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWmkodCl9LGUucHJvdG90eXBlLnF1ZXJ5UmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIEpuKHRoaXMucGFpbnQuZ2V0KFwiZmlsbC10cmFuc2xhdGVcIikpfSxlLnByb3RvdHlwZS5xdWVyeUludGVyc2VjdHNGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtyZXR1cm4gVm4oS24odCx0aGlzLnBhaW50LmdldChcImZpbGwtdHJhbnNsYXRlXCIpLHRoaXMucGFpbnQuZ2V0KFwiZmlsbC10cmFuc2xhdGUtYW5jaG9yXCIpLGkuYW5nbGUsYSkscil9LGV9KEhyKSxLaT1Ycihbe25hbWU6XCJhX3Bvc1wiLGNvbXBvbmVudHM6Mix0eXBlOlwiSW50MTZcIn0se25hbWU6XCJhX25vcm1hbF9lZFwiLGNvbXBvbmVudHM6NCx0eXBlOlwiSW50MTZcIn1dLDQpLm1lbWJlcnMsUWk9TWF0aC5wb3coMiwxMyk7ZnVuY3Rpb24gdGEodCxlLHIsbixpLGEsbyxzKXt0LmVtcGxhY2VCYWNrKGUsciwyKk1hdGguZmxvb3IobipRaSkrbyxpKlFpKjIsYSpRaSoyLE1hdGgucm91bmQocykpfXZhciBlYT1mdW5jdGlvbih0KXt0aGlzLnpvb209dC56b29tLHRoaXMub3ZlcnNjYWxpbmc9dC5vdmVyc2NhbGluZyx0aGlzLmxheWVycz10LmxheWVycyx0aGlzLmxheWVySWRzPXRoaXMubGF5ZXJzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pLHRoaXMuaW5kZXg9dC5pbmRleCx0aGlzLmxheW91dFZlcnRleEFycmF5PW5ldyBLcix0aGlzLmluZGV4QXJyYXk9bmV3IGhuLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zPW5ldyBJbihLaSx0LmxheWVycyx0Lnpvb20pLHRoaXMuc2VnbWVudHM9bmV3IE1ufTtmdW5jdGlvbiByYSh0LGUpe3JldHVybiB0Lng9PT1lLngmJih0Lng8MHx8dC54PlBuKXx8dC55PT09ZS55JiYodC55PDB8fHQueT5Qbil9ZnVuY3Rpb24gbmEodCl7cmV0dXJuIHQuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIHQueDwwfSl8fHQuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIHQueD5Qbn0pfHx0LmV2ZXJ5KGZ1bmN0aW9uKHQpe3JldHVybiB0Lnk8MH0pfHx0LmV2ZXJ5KGZ1bmN0aW9uKHQpe3JldHVybiB0Lnk+UG59KX1lYS5wcm90b3R5cGUucG9wdWxhdGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPXQ7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdLGE9aS5mZWF0dXJlLG89aS5pbmRleCxzPWkuc291cmNlTGF5ZXJJbmRleDtpZih0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlcihuZXcgTHIodGhpcy56b29tKSxhKSl7dmFyIGw9Rm4oYSk7dGhpcy5hZGRGZWF0dXJlKGEsbCksZS5mZWF0dXJlSW5kZXguaW5zZXJ0KGEsbCxvLHMsdGhpcy5pbmRleCl9fX0sZWEucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RofSxlYS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksS2kpLHRoaXMuaW5kZXhCdWZmZXI9dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZCh0KX0sZWEucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlciYmKHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCksdGhpcy5zZWdtZW50cy5kZXN0cm95KCkpfSxlYS5wcm90b3R5cGUuYWRkRmVhdHVyZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49V2koZSw1MDApO3I8bi5sZW5ndGg7cis9MSl7Zm9yKHZhciBpPW5bcl0sYT0wLG89MCxzPWk7bzxzLmxlbmd0aDtvKz0xKWErPXNbb10ubGVuZ3RoO2Zvcih2YXIgbD10aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXkpLGM9MCx1PWk7Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgaD11W2NdO2lmKDAhPT1oLmxlbmd0aCYmIW5hKGgpKWZvcih2YXIgZj0wLHA9MDtwPGgubGVuZ3RoO3ArKyl7dmFyIGQ9aFtwXTtpZihwPj0xKXt2YXIgZz1oW3AtMV07aWYoIXJhKGQsZykpe2wudmVydGV4TGVuZ3RoKzQ+TW4uTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEgmJihsPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheSkpO3ZhciB2PWQuc3ViKGcpLl9wZXJwKCkuX3VuaXQoKSxtPWcuZGlzdChkKTtmK20+MzI3NjgmJihmPTApLHRhKHRoaXMubGF5b3V0VmVydGV4QXJyYXksZC54LGQueSx2Lngsdi55LDAsMCxmKSx0YSh0aGlzLmxheW91dFZlcnRleEFycmF5LGQueCxkLnksdi54LHYueSwwLDEsZiksZis9bSx0YSh0aGlzLmxheW91dFZlcnRleEFycmF5LGcueCxnLnksdi54LHYueSwwLDAsZiksdGEodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxnLngsZy55LHYueCx2LnksMCwxLGYpO3ZhciB5PWwudmVydGV4TGVuZ3RoO3RoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayh5LHkrMSx5KzIpLHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayh5KzEseSsyLHkrMyksbC52ZXJ0ZXhMZW5ndGgrPTQsbC5wcmltaXRpdmVMZW5ndGgrPTJ9fX19bC52ZXJ0ZXhMZW5ndGgrYT5Nbi5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCYmKGw9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudChhLHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5KSk7Zm9yKHZhciB4PVtdLGI9W10sXz1sLnZlcnRleExlbmd0aCx3PTAsaz1pO3c8ay5sZW5ndGg7dys9MSl7dmFyIEE9a1t3XTtpZigwIT09QS5sZW5ndGgpe0EhPT1pWzBdJiZiLnB1c2goeC5sZW5ndGgvMik7Zm9yKHZhciBUPTA7VDxBLmxlbmd0aDtUKyspe3ZhciBNPUFbVF07dGEodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxNLngsTS55LDAsMCwxLDEsMCkseC5wdXNoKE0ueCkseC5wdXNoKE0ueSl9fX1mb3IodmFyIFM9bWkoeCxiKSxFPTA7RTxTLmxlbmd0aDtFKz0zKXRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhfK1NbRV0sXytTW0UrMV0sXytTW0UrMl0pO2wucHJpbWl0aXZlTGVuZ3RoKz1TLmxlbmd0aC8zLGwudmVydGV4TGVuZ3RoKz1hfXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsdCl9LHByKFwiRmlsbEV4dHJ1c2lvbkJ1Y2tldFwiLGVhLHtvbWl0OltcImxheWVyc1wiXX0pO3ZhciBpYT17cGFpbnQ6bmV3IHFyKHtcImZpbGwtZXh0cnVzaW9uLW9wYWNpdHlcIjpuZXcgTnIoSVtcInBhaW50X2ZpbGwtZXh0cnVzaW9uXCJdW1wiZmlsbC1leHRydXNpb24tb3BhY2l0eVwiXSksXCJmaWxsLWV4dHJ1c2lvbi1jb2xvclwiOm5ldyBqcihJW1wicGFpbnRfZmlsbC1leHRydXNpb25cIl1bXCJmaWxsLWV4dHJ1c2lvbi1jb2xvclwiXSksXCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGVcIjpuZXcgTnIoSVtcInBhaW50X2ZpbGwtZXh0cnVzaW9uXCJdW1wiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlXCJdKSxcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3JcIjpuZXcgTnIoSVtcInBhaW50X2ZpbGwtZXh0cnVzaW9uXCJdW1wiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvclwiXSksXCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuXCI6bmV3IFZyKElbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLXBhdHRlcm5cIl0pLFwiZmlsbC1leHRydXNpb24taGVpZ2h0XCI6bmV3IGpyKElbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLWhlaWdodFwiXSksXCJmaWxsLWV4dHJ1c2lvbi1iYXNlXCI6bmV3IGpyKElbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLWJhc2VcIl0pfSl9LGFhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxpYSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGVhKHQpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBKbih0aGlzLnBhaW50LmdldChcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZVwiKSl9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3JldHVybiBWbihLbih0LHRoaXMucGFpbnQuZ2V0KFwiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlXCIpLHRoaXMucGFpbnQuZ2V0KFwiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvclwiKSxpLmFuZ2xlLGEpLHIpfSxlLnByb3RvdHlwZS5oYXNPZmZzY3JlZW5QYXNzPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLnBhaW50LmdldChcImZpbGwtZXh0cnVzaW9uLW9wYWNpdHlcIikmJlwibm9uZVwiIT09dGhpcy52aXNpYmlsaXR5fSxlLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oKXt0aGlzLnZpZXdwb3J0RnJhbWUmJih0aGlzLnZpZXdwb3J0RnJhbWUuZGVzdHJveSgpLHRoaXMudmlld3BvcnRGcmFtZT1udWxsKX0sZX0oSHIpLG9hPVhyKFt7bmFtZTpcImFfcG9zX25vcm1hbFwiLGNvbXBvbmVudHM6NCx0eXBlOlwiSW50MTZcIn0se25hbWU6XCJhX2RhdGFcIixjb21wb25lbnRzOjQsdHlwZTpcIlVpbnQ4XCJ9XSw0KS5tZW1iZXJzLHNhPWxhO2Z1bmN0aW9uIGxhKHQsZSxyLG4saSl7dGhpcy5wcm9wZXJ0aWVzPXt9LHRoaXMuZXh0ZW50PXIsdGhpcy50eXBlPTAsdGhpcy5fcGJmPXQsdGhpcy5fZ2VvbWV0cnk9LTEsdGhpcy5fa2V5cz1uLHRoaXMuX3ZhbHVlcz1pLHQucmVhZEZpZWxkcyhjYSx0aGlzLGUpfWZ1bmN0aW9uIGNhKHQsZSxyKXsxPT10P2UuaWQ9ci5yZWFkVmFyaW50KCk6Mj09dD9mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LnJlYWRWYXJpbnQoKSt0LnBvczt0LnBvczxyOyl7dmFyIG49ZS5fa2V5c1t0LnJlYWRWYXJpbnQoKV0saT1lLl92YWx1ZXNbdC5yZWFkVmFyaW50KCldO2UucHJvcGVydGllc1tuXT1pfX0ocixlKTozPT10P2UudHlwZT1yLnJlYWRWYXJpbnQoKTo0PT10JiYoZS5fZ2VvbWV0cnk9ci5wb3MpfWZ1bmN0aW9uIHVhKHQpe2Zvcih2YXIgZSxyLG49MCxpPTAsYT10Lmxlbmd0aCxvPWEtMTtpPGE7bz1pKyspZT10W2ldLG4rPSgocj10W29dKS54LWUueCkqKGUueStyLnkpO3JldHVybiBufWxhLnR5cGVzPVtcIlVua25vd25cIixcIlBvaW50XCIsXCJMaW5lU3RyaW5nXCIsXCJQb2x5Z29uXCJdLGxhLnByb3RvdHlwZS5sb2FkR2VvbWV0cnk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYmY7dC5wb3M9dGhpcy5fZ2VvbWV0cnk7Zm9yKHZhciBlLHI9dC5yZWFkVmFyaW50KCkrdC5wb3Msbj0xLGk9MCxhPTAsbz0wLHM9W107dC5wb3M8cjspe2lmKGk8PTApe3ZhciBjPXQucmVhZFZhcmludCgpO249NyZjLGk9Yz4+M31pZihpLS0sMT09PW58fDI9PT1uKWErPXQucmVhZFNWYXJpbnQoKSxvKz10LnJlYWRTVmFyaW50KCksMT09PW4mJihlJiZzLnB1c2goZSksZT1bXSksZS5wdXNoKG5ldyBsKGEsbykpO2Vsc2V7aWYoNyE9PW4pdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBjb21tYW5kIFwiK24pO2UmJmUucHVzaChlWzBdLmNsb25lKCkpfX1yZXR1cm4gZSYmcy5wdXNoKGUpLHN9LGxhLnByb3RvdHlwZS5iYm94PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGJmO3QucG9zPXRoaXMuX2dlb21ldHJ5O2Zvcih2YXIgZT10LnJlYWRWYXJpbnQoKSt0LnBvcyxyPTEsbj0wLGk9MCxhPTAsbz0xLzAscz0tMS8wLGw9MS8wLGM9LTEvMDt0LnBvczxlOyl7aWYobjw9MCl7dmFyIHU9dC5yZWFkVmFyaW50KCk7cj03JnUsbj11Pj4zfWlmKG4tLSwxPT09cnx8Mj09PXIpKGkrPXQucmVhZFNWYXJpbnQoKSk8byYmKG89aSksaT5zJiYocz1pKSwoYSs9dC5yZWFkU1ZhcmludCgpKTxsJiYobD1hKSxhPmMmJihjPWEpO2Vsc2UgaWYoNyE9PXIpdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBjb21tYW5kIFwiK3IpfXJldHVybltvLGwscyxjXX0sbGEucHJvdG90eXBlLnRvR2VvSlNPTj1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhPXRoaXMuZXh0ZW50Kk1hdGgucG93KDIsciksbz10aGlzLmV4dGVudCp0LHM9dGhpcy5leHRlbnQqZSxsPXRoaXMubG9hZEdlb21ldHJ5KCksYz1sYS50eXBlc1t0aGlzLnR5cGVdO2Z1bmN0aW9uIHUodCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRbZV0sbj0xODAtMzYwKihyLnkrcykvYTt0W2VdPVszNjAqKHIueCtvKS9hLTE4MCwzNjAvTWF0aC5QSSpNYXRoLmF0YW4oTWF0aC5leHAobipNYXRoLlBJLzE4MCkpLTkwXX19c3dpdGNoKHRoaXMudHlwZSl7Y2FzZSAxOnZhciBoPVtdO2ZvcihuPTA7bjxsLmxlbmd0aDtuKyspaFtuXT1sW25dWzBdO3UobD1oKTticmVhaztjYXNlIDI6Zm9yKG49MDtuPGwubGVuZ3RoO24rKyl1KGxbbl0pO2JyZWFrO2Nhc2UgMzpmb3IobD1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtpZihlPD0xKXJldHVyblt0XTtmb3IodmFyIHIsbixpPVtdLGE9MDthPGU7YSsrKXt2YXIgbz11YSh0W2FdKTswIT09byYmKHZvaWQgMD09PW4mJihuPW88MCksbj09PW88MD8ociYmaS5wdXNoKHIpLHI9W3RbYV1dKTpyLnB1c2godFthXSkpfXJldHVybiByJiZpLnB1c2gociksaX0obCksbj0wO248bC5sZW5ndGg7bisrKWZvcihpPTA7aTxsW25dLmxlbmd0aDtpKyspdShsW25dW2ldKX0xPT09bC5sZW5ndGg/bD1sWzBdOmM9XCJNdWx0aVwiK2M7dmFyIGY9e3R5cGU6XCJGZWF0dXJlXCIsZ2VvbWV0cnk6e3R5cGU6Yyxjb29yZGluYXRlczpsfSxwcm9wZXJ0aWVzOnRoaXMucHJvcGVydGllc307cmV0dXJuXCJpZFwiaW4gdGhpcyYmKGYuaWQ9dGhpcy5pZCksZn07dmFyIGhhPWZhO2Z1bmN0aW9uIGZhKHQsZSl7dGhpcy52ZXJzaW9uPTEsdGhpcy5uYW1lPW51bGwsdGhpcy5leHRlbnQ9NDA5Nix0aGlzLmxlbmd0aD0wLHRoaXMuX3BiZj10LHRoaXMuX2tleXM9W10sdGhpcy5fdmFsdWVzPVtdLHRoaXMuX2ZlYXR1cmVzPVtdLHQucmVhZEZpZWxkcyhwYSx0aGlzLGUpLHRoaXMubGVuZ3RoPXRoaXMuX2ZlYXR1cmVzLmxlbmd0aH1mdW5jdGlvbiBwYSh0LGUscil7MTU9PT10P2UudmVyc2lvbj1yLnJlYWRWYXJpbnQoKToxPT09dD9lLm5hbWU9ci5yZWFkU3RyaW5nKCk6NT09PXQ/ZS5leHRlbnQ9ci5yZWFkVmFyaW50KCk6Mj09PXQ/ZS5fZmVhdHVyZXMucHVzaChyLnBvcyk6Mz09PXQ/ZS5fa2V5cy5wdXNoKHIucmVhZFN0cmluZygpKTo0PT09dCYmZS5fdmFsdWVzLnB1c2goZnVuY3Rpb24odCl7Zm9yKHZhciBlPW51bGwscj10LnJlYWRWYXJpbnQoKSt0LnBvczt0LnBvczxyOyl7dmFyIG49dC5yZWFkVmFyaW50KCk+PjM7ZT0xPT09bj90LnJlYWRTdHJpbmcoKToyPT09bj90LnJlYWRGbG9hdCgpOjM9PT1uP3QucmVhZERvdWJsZSgpOjQ9PT1uP3QucmVhZFZhcmludDY0KCk6NT09PW4/dC5yZWFkVmFyaW50KCk6Nj09PW4/dC5yZWFkU1ZhcmludCgpOjc9PT1uP3QucmVhZEJvb2xlYW4oKTpudWxsfXJldHVybiBlfShyKSl9ZnVuY3Rpb24gZGEodCxlLHIpe2lmKDM9PT10KXt2YXIgbj1uZXcgaGEocixyLnJlYWRWYXJpbnQoKStyLnBvcyk7bi5sZW5ndGgmJihlW24ubmFtZV09bil9fWZhLnByb3RvdHlwZS5mZWF0dXJlPWZ1bmN0aW9uKHQpe2lmKHQ8MHx8dD49dGhpcy5fZmVhdHVyZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImZlYXR1cmUgaW5kZXggb3V0IG9mIGJvdW5kc1wiKTt0aGlzLl9wYmYucG9zPXRoaXMuX2ZlYXR1cmVzW3RdO3ZhciBlPXRoaXMuX3BiZi5yZWFkVmFyaW50KCkrdGhpcy5fcGJmLnBvcztyZXR1cm4gbmV3IHNhKHRoaXMuX3BiZixlLHRoaXMuZXh0ZW50LHRoaXMuX2tleXMsdGhpcy5fdmFsdWVzKX07dmFyIGdhPXtWZWN0b3JUaWxlOmZ1bmN0aW9uKHQsZSl7dGhpcy5sYXllcnM9dC5yZWFkRmllbGRzKGRhLHt9LGUpfSxWZWN0b3JUaWxlRmVhdHVyZTpzYSxWZWN0b3JUaWxlTGF5ZXI6aGF9LHZhPWdhLlZlY3RvclRpbGVGZWF0dXJlLnR5cGVzLG1hPTYzLHlhPU1hdGguY29zKE1hdGguUEkvMTgwKjM3LjUpLHhhPS41LGJhPU1hdGgucG93KDIsMTQpL3hhO2Z1bmN0aW9uIF9hKHQsZSxyLG4saSxhLG8pe3QuZW1wbGFjZUJhY2soZS54LGUueSxuPzE6MCxpPzE6LTEsTWF0aC5yb3VuZChtYSpyLngpKzEyOCxNYXRoLnJvdW5kKG1hKnIueSkrMTI4LDErKDA9PT1hPzA6YTwwPy0xOjEpfChvKnhhJjYzKTw8MixvKnhhPj42KX12YXIgd2E9ZnVuY3Rpb24odCl7dGhpcy56b29tPXQuem9vbSx0aGlzLm92ZXJzY2FsaW5nPXQub3ZlcnNjYWxpbmcsdGhpcy5sYXllcnM9dC5sYXllcnMsdGhpcy5sYXllcklkcz10aGlzLmxheWVycy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheT1uZXcgUXIsdGhpcy5pbmRleEFycmF5PW5ldyBobix0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucz1uZXcgSW4ob2EsdC5sYXllcnMsdC56b29tKSx0aGlzLnNlZ21lbnRzPW5ldyBNbn07ZnVuY3Rpb24ga2EodCxlKXtyZXR1cm4odC9lLnRpbGVUb3RhbCooZS5lbmQtZS5zdGFydCkrZS5zdGFydCkqKGJhLTEpfXdhLnByb3RvdHlwZS5wb3B1bGF0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49dDtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl0sYT1pLmZlYXR1cmUsbz1pLmluZGV4LHM9aS5zb3VyY2VMYXllckluZGV4O2lmKHRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyKG5ldyBMcih0aGlzLnpvb20pLGEpKXt2YXIgbD1GbihhKTt0aGlzLmFkZEZlYXR1cmUoYSxsKSxlLmZlYXR1cmVJbmRleC5pbnNlcnQoYSxsLG8scyx0aGlzLmluZGV4KX19fSx3YS5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGh9LHdhLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxvYSksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKHQpfSx3YS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyJiYodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSl9LHdhLnByb3RvdHlwZS5hZGRGZWF0dXJlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMubGF5ZXJzWzBdLmxheW91dCxuPXIuZ2V0KFwibGluZS1qb2luXCIpLmV2YWx1YXRlKHQpLGk9ci5nZXQoXCJsaW5lLWNhcFwiKSxhPXIuZ2V0KFwibGluZS1taXRlci1saW1pdFwiKSxvPXIuZ2V0KFwibGluZS1yb3VuZC1saW1pdFwiKSxzPTAsbD1lO3M8bC5sZW5ndGg7cys9MSl7dmFyIGM9bFtzXTt0aGlzLmFkZExpbmUoYyx0LG4saSxhLG8pfX0sd2EucHJvdG90eXBlLmFkZExpbmU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPW51bGw7ZS5wcm9wZXJ0aWVzJiZlLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoXCJtYXBib3hfY2xpcF9zdGFydFwiKSYmZS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KFwibWFwYm94X2NsaXBfZW5kXCIpJiYobz17c3RhcnQ6ZS5wcm9wZXJ0aWVzLm1hcGJveF9jbGlwX3N0YXJ0LGVuZDplLnByb3BlcnRpZXMubWFwYm94X2NsaXBfZW5kLHRpbGVUb3RhbDp2b2lkIDB9KTtmb3IodmFyIHM9XCJQb2x5Z29uXCI9PT12YVtlLnR5cGVdLGw9dC5sZW5ndGg7bD49MiYmdFtsLTFdLmVxdWFscyh0W2wtMl0pOylsLS07Zm9yKHZhciBjPTA7YzxsLTEmJnRbY10uZXF1YWxzKHRbYysxXSk7KWMrKztpZighKGw8KHM/MzoyKSkpe28mJihvLnRpbGVUb3RhbD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGksYT0wLG89YztvPHItMTtvKyspbj10W29dLGk9dFtvKzFdLGErPW4uZGlzdChpKTtyZXR1cm4gYX0odCwwLGwpKSxcImJldmVsXCI9PT1yJiYoaT0xLjA1KTt2YXIgdT1Qbi8oNTEyKnRoaXMub3ZlcnNjYWxpbmcpKjE1LGg9dFtjXSxmPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoMTAqbCx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheSk7dGhpcy5kaXN0YW5jZT0wO3ZhciBwLGQsZyx2PW4sbT1zP1wiYnV0dFwiOm4seT0hMCx4PXZvaWQgMCxiPXZvaWQgMCxfPXZvaWQgMCx3PXZvaWQgMDt0aGlzLmUxPXRoaXMuZTI9dGhpcy5lMz0tMSxzJiYocD10W2wtMl0sdz1oLnN1YihwKS5fdW5pdCgpLl9wZXJwKCkpO2Zvcih2YXIgaz1jO2s8bDtrKyspaWYoIShiPXMmJms9PT1sLTE/dFtjKzFdOnRbaysxXSl8fCF0W2tdLmVxdWFscyhiKSl7dyYmKF89dykscCYmKHg9cCkscD10W2tdLHc9Yj9iLnN1YihwKS5fdW5pdCgpLl9wZXJwKCk6Xzt2YXIgQT0oXz1ffHx3KS5hZGQodyk7MD09PUEueCYmMD09PUEueXx8QS5fdW5pdCgpO3ZhciBUPUEueCp3LngrQS55KncueSxNPTAhPT1UPzEvVDoxLzAsUz1UPHlhJiZ4JiZiO2lmKFMmJms+Yyl7dmFyIEU9cC5kaXN0KHgpO2lmKEU+Mip1KXt2YXIgQz1wLnN1YihwLnN1Yih4KS5fbXVsdCh1L0UpLl9yb3VuZCgpKTt0aGlzLmRpc3RhbmNlKz1DLmRpc3QoeCksdGhpcy5hZGRDdXJyZW50VmVydGV4KEMsdGhpcy5kaXN0YW5jZSxfLm11bHQoMSksMCwwLCExLGYsbykseD1DfX12YXIgTD14JiZiLHo9TD9yOmI/djptO2lmKEwmJlwicm91bmRcIj09PXomJihNPGE/ej1cIm1pdGVyXCI6TTw9MiYmKHo9XCJmYWtlcm91bmRcIikpLFwibWl0ZXJcIj09PXomJk0+aSYmKHo9XCJiZXZlbFwiKSxcImJldmVsXCI9PT16JiYoTT4yJiYoej1cImZsaXBiZXZlbFwiKSxNPGkmJih6PVwibWl0ZXJcIikpLHgmJih0aGlzLmRpc3RhbmNlKz1wLmRpc3QoeCkpLFwibWl0ZXJcIj09PXopQS5fbXVsdChNKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLEEsMCwwLCExLGYsbyk7ZWxzZSBpZihcImZsaXBiZXZlbFwiPT09eil7aWYoTT4xMDApQT13LmNsb25lKCkubXVsdCgtMSk7ZWxzZXt2YXIgTz1fLngqdy55LV8ueSp3Lng+MD8tMToxLEk9TSpfLmFkZCh3KS5tYWcoKS9fLnN1Yih3KS5tYWcoKTtBLl9wZXJwKCkuX211bHQoSSpPKX10aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLEEsMCwwLCExLGYsbyksdGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSxBLm11bHQoLTEpLDAsMCwhMSxmLG8pfWVsc2UgaWYoXCJiZXZlbFwiPT09enx8XCJmYWtlcm91bmRcIj09PXope3ZhciBEPV8ueCp3LnktXy55KncueD4wLFA9LU1hdGguc3FydChNKk0tMSk7aWYoRD8oZz0wLGQ9UCk6KGQ9MCxnPVApLHl8fHRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsXyxkLGcsITEsZixvKSxcImZha2Vyb3VuZFwiPT09eil7Zm9yKHZhciBSPU1hdGguZmxvb3IoOCooLjUtKFQtLjUpKSksRj12b2lkIDAsQj0wO0I8UjtCKyspRj13Lm11bHQoKEIrMSkvKFIrMSkpLl9hZGQoXykuX3VuaXQoKSx0aGlzLmFkZFBpZVNsaWNlVmVydGV4KHAsdGhpcy5kaXN0YW5jZSxGLEQsZixvKTt0aGlzLmFkZFBpZVNsaWNlVmVydGV4KHAsdGhpcy5kaXN0YW5jZSxBLEQsZixvKTtmb3IodmFyIE49Ui0xO04+PTA7Ti0tKUY9Xy5tdWx0KChOKzEpLyhSKzEpKS5fYWRkKHcpLl91bml0KCksdGhpcy5hZGRQaWVTbGljZVZlcnRleChwLHRoaXMuZGlzdGFuY2UsRixELGYsbyl9YiYmdGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSx3LC1kLC1nLCExLGYsbyl9ZWxzZVwiYnV0dFwiPT09ej8oeXx8dGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSxfLDAsMCwhMSxmLG8pLGImJnRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsdywwLDAsITEsZixvKSk6XCJzcXVhcmVcIj09PXo/KHl8fCh0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLF8sMSwxLCExLGYsbyksdGhpcy5lMT10aGlzLmUyPS0xKSxiJiZ0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLHcsLTEsLTEsITEsZixvKSk6XCJyb3VuZFwiPT09eiYmKHl8fCh0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLF8sMCwwLCExLGYsbyksdGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSxfLDEsMSwhMCxmLG8pLHRoaXMuZTE9dGhpcy5lMj0tMSksYiYmKHRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsdywtMSwtMSwhMCxmLG8pLHRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsdywwLDAsITEsZixvKSkpO2lmKFMmJms8bC0xKXt2YXIgaj1wLmRpc3QoYik7aWYoaj4yKnUpe3ZhciBWPXAuYWRkKGIuc3ViKHApLl9tdWx0KHUvaikuX3JvdW5kKCkpO3RoaXMuZGlzdGFuY2UrPVYuZGlzdChwKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoVix0aGlzLmRpc3RhbmNlLHcubXVsdCgxKSwwLDAsITEsZixvKSxwPVZ9fXk9ITF9dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCxlKX19LHdhLnByb3RvdHlwZS5hZGRDdXJyZW50VmVydGV4PWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dmFyIGwsYz10aGlzLmxheW91dFZlcnRleEFycmF5LHU9dGhpcy5pbmRleEFycmF5O3MmJihlPWthKGUscykpLGw9ci5jbG9uZSgpLG4mJmwuX3N1YihyLnBlcnAoKS5fbXVsdChuKSksX2EoYyx0LGwsYSwhMSxuLGUpLHRoaXMuZTM9by52ZXJ0ZXhMZW5ndGgrKyx0aGlzLmUxPj0wJiZ0aGlzLmUyPj0wJiYodS5lbXBsYWNlQmFjayh0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyksby5wcmltaXRpdmVMZW5ndGgrKyksdGhpcy5lMT10aGlzLmUyLHRoaXMuZTI9dGhpcy5lMyxsPXIubXVsdCgtMSksaSYmbC5fc3ViKHIucGVycCgpLl9tdWx0KGkpKSxfYShjLHQsbCxhLCEwLC1pLGUpLHRoaXMuZTM9by52ZXJ0ZXhMZW5ndGgrKyx0aGlzLmUxPj0wJiZ0aGlzLmUyPj0wJiYodS5lbXBsYWNlQmFjayh0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyksby5wcmltaXRpdmVMZW5ndGgrKyksdGhpcy5lMT10aGlzLmUyLHRoaXMuZTI9dGhpcy5lMyxlPmJhLzImJiFzJiYodGhpcy5kaXN0YW5jZT0wLHRoaXMuYWRkQ3VycmVudFZlcnRleCh0LHRoaXMuZGlzdGFuY2UscixuLGksYSxvKSl9LHdhLnByb3RvdHlwZS5hZGRQaWVTbGljZVZlcnRleD1mdW5jdGlvbih0LGUscixuLGksYSl7cj1yLm11bHQobj8tMToxKTt2YXIgbz10aGlzLmxheW91dFZlcnRleEFycmF5LHM9dGhpcy5pbmRleEFycmF5O2EmJihlPWthKGUsYSkpLF9hKG8sdCxyLCExLG4sMCxlKSx0aGlzLmUzPWkudmVydGV4TGVuZ3RoKyssdGhpcy5lMT49MCYmdGhpcy5lMj49MCYmKHMuZW1wbGFjZUJhY2sodGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMpLGkucHJpbWl0aXZlTGVuZ3RoKyspLG4/dGhpcy5lMj10aGlzLmUzOnRoaXMuZTE9dGhpcy5lM30scHIoXCJMaW5lQnVja2V0XCIsd2Ese29taXQ6W1wibGF5ZXJzXCJdfSk7dmFyIEFhPW5ldyBxcih7XCJsaW5lLWNhcFwiOm5ldyBOcihJLmxheW91dF9saW5lW1wibGluZS1jYXBcIl0pLFwibGluZS1qb2luXCI6bmV3IGpyKEkubGF5b3V0X2xpbmVbXCJsaW5lLWpvaW5cIl0pLFwibGluZS1taXRlci1saW1pdFwiOm5ldyBOcihJLmxheW91dF9saW5lW1wibGluZS1taXRlci1saW1pdFwiXSksXCJsaW5lLXJvdW5kLWxpbWl0XCI6bmV3IE5yKEkubGF5b3V0X2xpbmVbXCJsaW5lLXJvdW5kLWxpbWl0XCJdKX0pLFRhPXtwYWludDpuZXcgcXIoe1wibGluZS1vcGFjaXR5XCI6bmV3IGpyKEkucGFpbnRfbGluZVtcImxpbmUtb3BhY2l0eVwiXSksXCJsaW5lLWNvbG9yXCI6bmV3IGpyKEkucGFpbnRfbGluZVtcImxpbmUtY29sb3JcIl0pLFwibGluZS10cmFuc2xhdGVcIjpuZXcgTnIoSS5wYWludF9saW5lW1wibGluZS10cmFuc2xhdGVcIl0pLFwibGluZS10cmFuc2xhdGUtYW5jaG9yXCI6bmV3IE5yKEkucGFpbnRfbGluZVtcImxpbmUtdHJhbnNsYXRlLWFuY2hvclwiXSksXCJsaW5lLXdpZHRoXCI6bmV3IGpyKEkucGFpbnRfbGluZVtcImxpbmUtd2lkdGhcIl0pLFwibGluZS1nYXAtd2lkdGhcIjpuZXcganIoSS5wYWludF9saW5lW1wibGluZS1nYXAtd2lkdGhcIl0pLFwibGluZS1vZmZzZXRcIjpuZXcganIoSS5wYWludF9saW5lW1wibGluZS1vZmZzZXRcIl0pLFwibGluZS1ibHVyXCI6bmV3IGpyKEkucGFpbnRfbGluZVtcImxpbmUtYmx1clwiXSksXCJsaW5lLWRhc2hhcnJheVwiOm5ldyBWcihJLnBhaW50X2xpbmVbXCJsaW5lLWRhc2hhcnJheVwiXSksXCJsaW5lLXBhdHRlcm5cIjpuZXcgVnIoSS5wYWludF9saW5lW1wibGluZS1wYXR0ZXJuXCJdKSxcImxpbmUtZ3JhZGllbnRcIjpuZXcgVXIoSS5wYWludF9saW5lW1wibGluZS1ncmFkaWVudFwiXSl9KSxsYXlvdXQ6QWF9LE1hPW5ldyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gcj1uZXcgTHIoTWF0aC5mbG9vcihyLnpvb20pLHtub3c6ci5ub3csZmFkZUR1cmF0aW9uOnIuZmFkZUR1cmF0aW9uLHpvb21IaXN0b3J5OnIuem9vbUhpc3RvcnksdHJhbnNpdGlvbjpyLnRyYW5zaXRpb259KSx0LnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlLmNhbGwodGhpcyxlLHIpfSxlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHI9cCh7fSxyLHt6b29tOk1hdGguZmxvb3Ioci56b29tKX0pLHQucHJvdG90eXBlLmV2YWx1YXRlLmNhbGwodGhpcyxlLHIsbil9LGV9KGpyKSkoVGEucGFpbnQucHJvcGVydGllc1tcImxpbmUtd2lkdGhcIl0uc3BlY2lmaWNhdGlvbik7TWEudXNlSW50ZWdlclpvb209ITA7dmFyIFNhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxUYSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24oZSxyLG4pe3QucHJvdG90eXBlLnNldFBhaW50UHJvcGVydHkuY2FsbCh0aGlzLGUscixuKSxcImxpbmUtZ3JhZGllbnRcIj09PWUmJnRoaXMuX3VwZGF0ZUdyYWRpZW50KCl9LGUucHJvdG90eXBlLl91cGRhdGVHcmFkaWVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuX3ZhbHVlc1tcImxpbmUtZ3JhZGllbnRcIl0udmFsdWUuZXhwcmVzc2lvbjt0aGlzLmdyYWRpZW50PWZpKHQsXCJsaW5lUHJvZ3Jlc3NcIiksdGhpcy5ncmFkaWVudFRleHR1cmU9bnVsbH0sZS5wcm90b3R5cGUucmVjYWxjdWxhdGU9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUucmVjYWxjdWxhdGUuY2FsbCh0aGlzLGUpLHRoaXMucGFpbnQuX3ZhbHVlc1tcImxpbmUtZmxvb3J3aWR0aFwiXT1NYS5wb3NzaWJseUV2YWx1YXRlKHRoaXMuX3RyYW5zaXRpb25pbmdQYWludC5fdmFsdWVzW1wibGluZS13aWR0aFwiXS52YWx1ZSxlKX0sZS5wcm90b3R5cGUuY3JlYXRlQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgd2EodCl9LGUucHJvdG90eXBlLnF1ZXJ5UmFkaXVzPWZ1bmN0aW9uKHQpe3ZhciBlPXQscj1FYSgkbihcImxpbmUtd2lkdGhcIix0aGlzLGUpLCRuKFwibGluZS1nYXAtd2lkdGhcIix0aGlzLGUpKSxuPSRuKFwibGluZS1vZmZzZXRcIix0aGlzLGUpO3JldHVybiByLzIrTWF0aC5hYnMobikrSm4odGhpcy5wYWludC5nZXQoXCJsaW5lLXRyYW5zbGF0ZVwiKSl9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPUtuKHQsdGhpcy5wYWludC5nZXQoXCJsaW5lLXRyYW5zbGF0ZVwiKSx0aGlzLnBhaW50LmdldChcImxpbmUtdHJhbnNsYXRlLWFuY2hvclwiKSxpLmFuZ2xlLGEpLHM9YS8yKkVhKHRoaXMucGFpbnQuZ2V0KFwibGluZS13aWR0aFwiKS5ldmFsdWF0ZShlKSx0aGlzLnBhaW50LmdldChcImxpbmUtZ2FwLXdpZHRoXCIpLmV2YWx1YXRlKGUpKSxjPXRoaXMucGFpbnQuZ2V0KFwibGluZS1vZmZzZXRcIikuZXZhbHVhdGUoZSk7cmV0dXJuIGMmJihyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49bmV3IGwoMCwwKSxpPTA7aTx0Lmxlbmd0aDtpKyspe2Zvcih2YXIgYT10W2ldLG89W10scz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgYz1hW3MtMV0sdT1hW3NdLGg9YVtzKzFdLGY9MD09PXM/bjp1LnN1YihjKS5fdW5pdCgpLl9wZXJwKCkscD1zPT09YS5sZW5ndGgtMT9uOmguc3ViKHUpLl91bml0KCkuX3BlcnAoKSxkPWYuX2FkZChwKS5fdW5pdCgpLGc9ZC54KnAueCtkLnkqcC55O2QuX211bHQoMS9nKSxvLnB1c2goZC5fbXVsdChlKS5fYWRkKHUpKX1yLnB1c2gobyl9cmV0dXJuIHJ9KHIsYyphKSksVW4obyxyLHMpfSxlfShIcik7ZnVuY3Rpb24gRWEodCxlKXtyZXR1cm4gZT4wP2UrMip0OnR9dmFyIENhPVhyKFt7bmFtZTpcImFfcG9zX29mZnNldFwiLGNvbXBvbmVudHM6NCx0eXBlOlwiSW50MTZcIn0se25hbWU6XCJhX2RhdGFcIixjb21wb25lbnRzOjQsdHlwZTpcIlVpbnQxNlwifV0pLExhPVhyKFt7bmFtZTpcImFfcHJvamVjdGVkX3Bvc1wiLGNvbXBvbmVudHM6Myx0eXBlOlwiRmxvYXQzMlwifV0sNCksemE9KFhyKFt7bmFtZTpcImFfZmFkZV9vcGFjaXR5XCIsY29tcG9uZW50czoxLHR5cGU6XCJVaW50MzJcIn1dLDQpLFhyKFt7bmFtZTpcImFfcGxhY2VkXCIsY29tcG9uZW50czoyLHR5cGU6XCJVaW50OFwifV0sNCkpLE9hPShYcihbe3R5cGU6XCJJbnQxNlwiLG5hbWU6XCJhbmNob3JQb2ludFhcIn0se3R5cGU6XCJJbnQxNlwiLG5hbWU6XCJhbmNob3JQb2ludFlcIn0se3R5cGU6XCJJbnQxNlwiLG5hbWU6XCJ4MVwifSx7dHlwZTpcIkludDE2XCIsbmFtZTpcInkxXCJ9LHt0eXBlOlwiSW50MTZcIixuYW1lOlwieDJcIn0se3R5cGU6XCJJbnQxNlwiLG5hbWU6XCJ5MlwifSx7dHlwZTpcIlVpbnQzMlwiLG5hbWU6XCJmZWF0dXJlSW5kZXhcIn0se3R5cGU6XCJVaW50MTZcIixuYW1lOlwic291cmNlTGF5ZXJJbmRleFwifSx7dHlwZTpcIlVpbnQxNlwiLG5hbWU6XCJidWNrZXRJbmRleFwifSx7dHlwZTpcIkludDE2XCIsbmFtZTpcInJhZGl1c1wifSx7dHlwZTpcIkludDE2XCIsbmFtZTpcInNpZ25lZERpc3RhbmNlRnJvbUFuY2hvclwifV0pLFhyKFt7bmFtZTpcImFfcG9zXCIsY29tcG9uZW50czoyLHR5cGU6XCJJbnQxNlwifSx7bmFtZTpcImFfYW5jaG9yX3Bvc1wiLGNvbXBvbmVudHM6Mix0eXBlOlwiSW50MTZcIn0se25hbWU6XCJhX2V4dHJ1ZGVcIixjb21wb25lbnRzOjIsdHlwZTpcIkludDE2XCJ9XSw0KSksSWE9WHIoW3tuYW1lOlwiYV9wb3NcIixjb21wb25lbnRzOjIsdHlwZTpcIkludDE2XCJ9LHtuYW1lOlwiYV9hbmNob3JfcG9zXCIsY29tcG9uZW50czoyLHR5cGU6XCJJbnQxNlwifSx7bmFtZTpcImFfZXh0cnVkZVwiLGNvbXBvbmVudHM6Mix0eXBlOlwiSW50MTZcIn1dLDQpO2Z1bmN0aW9uIERhKHQsZSxyKXt2YXIgbj1lLmxheW91dC5nZXQoXCJ0ZXh0LXRyYW5zZm9ybVwiKS5ldmFsdWF0ZShyKTtyZXR1cm5cInVwcGVyY2FzZVwiPT09bj90PXQudG9Mb2NhbGVVcHBlckNhc2UoKTpcImxvd2VyY2FzZVwiPT09biYmKHQ9dC50b0xvY2FsZUxvd2VyQ2FzZSgpKSxDci5hcHBseUFyYWJpY1NoYXBpbmcmJih0PUNyLmFwcGx5QXJhYmljU2hhcGluZyh0KSksdH1Ycihbe3R5cGU6XCJJbnQxNlwiLG5hbWU6XCJhbmNob3JYXCJ9LHt0eXBlOlwiSW50MTZcIixuYW1lOlwiYW5jaG9yWVwifSx7dHlwZTpcIlVpbnQxNlwiLG5hbWU6XCJnbHlwaFN0YXJ0SW5kZXhcIn0se3R5cGU6XCJVaW50MTZcIixuYW1lOlwibnVtR2x5cGhzXCJ9LHt0eXBlOlwiVWludDMyXCIsbmFtZTpcInZlcnRleFN0YXJ0SW5kZXhcIn0se3R5cGU6XCJVaW50MzJcIixuYW1lOlwibGluZVN0YXJ0SW5kZXhcIn0se3R5cGU6XCJVaW50MzJcIixuYW1lOlwibGluZUxlbmd0aFwifSx7dHlwZTpcIlVpbnQxNlwiLG5hbWU6XCJzZWdtZW50XCJ9LHt0eXBlOlwiVWludDE2XCIsbmFtZTpcImxvd2VyU2l6ZVwifSx7dHlwZTpcIlVpbnQxNlwiLG5hbWU6XCJ1cHBlclNpemVcIn0se3R5cGU6XCJGbG9hdDMyXCIsbmFtZTpcImxpbmVPZmZzZXRYXCJ9LHt0eXBlOlwiRmxvYXQzMlwiLG5hbWU6XCJsaW5lT2Zmc2V0WVwifSx7dHlwZTpcIlVpbnQ4XCIsbmFtZTpcIndyaXRpbmdNb2RlXCJ9LHt0eXBlOlwiVWludDhcIixuYW1lOlwiaGlkZGVuXCJ9XSksWHIoW3t0eXBlOlwiRmxvYXQzMlwiLG5hbWU6XCJvZmZzZXRYXCJ9XSksWHIoW3t0eXBlOlwiSW50MTZcIixuYW1lOlwieFwifSx7dHlwZTpcIkludDE2XCIsbmFtZTpcInlcIn0se3R5cGU6XCJJbnQxNlwiLG5hbWU6XCJ0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvclwifV0pO3ZhciBQYT17XCIhXCI6XCJcXHVmZTE1XCIsXCIjXCI6XCJcXHVmZjAzXCIsJDpcIlxcdWZmMDRcIixcIiVcIjpcIlxcdWZmMDVcIixcIiZcIjpcIlxcdWZmMDZcIixcIihcIjpcIlxcdWZlMzVcIixcIilcIjpcIlxcdWZlMzZcIixcIipcIjpcIlxcdWZmMGFcIixcIitcIjpcIlxcdWZmMGJcIixcIixcIjpcIlxcdWZlMTBcIixcIi1cIjpcIlxcdWZlMzJcIixcIi5cIjpcIlxcdTMwZmJcIixcIi9cIjpcIlxcdWZmMGZcIixcIjpcIjpcIlxcdWZlMTNcIixcIjtcIjpcIlxcdWZlMTRcIixcIjxcIjpcIlxcdWZlM2ZcIixcIj1cIjpcIlxcdWZmMWRcIixcIj5cIjpcIlxcdWZlNDBcIixcIj9cIjpcIlxcdWZlMTZcIixcIkBcIjpcIlxcdWZmMjBcIixcIltcIjpcIlxcdWZlNDdcIixcIlxcXFxcIjpcIlxcdWZmM2NcIixcIl1cIjpcIlxcdWZlNDhcIixcIl5cIjpcIlxcdWZmM2VcIixfOlwiXFx1ZmUzM1wiLFwiYFwiOlwiXFx1ZmY0MFwiLFwie1wiOlwiXFx1ZmUzN1wiLFwifFwiOlwiXFx1MjAxNVwiLFwifVwiOlwiXFx1ZmUzOFwiLFwiflwiOlwiXFx1ZmY1ZVwiLFwiXFx4YTJcIjpcIlxcdWZmZTBcIixcIlxceGEzXCI6XCJcXHVmZmUxXCIsXCJcXHhhNVwiOlwiXFx1ZmZlNVwiLFwiXFx4YTZcIjpcIlxcdWZmZTRcIixcIlxceGFjXCI6XCJcXHVmZmUyXCIsXCJcXHhhZlwiOlwiXFx1ZmZlM1wiLFwiXFx1MjAxM1wiOlwiXFx1ZmUzMlwiLFwiXFx1MjAxNFwiOlwiXFx1ZmUzMVwiLFwiXFx1MjAxOFwiOlwiXFx1ZmU0M1wiLFwiXFx1MjAxOVwiOlwiXFx1ZmU0NFwiLFwiXFx1MjAxY1wiOlwiXFx1ZmU0MVwiLFwiXFx1MjAxZFwiOlwiXFx1ZmU0MlwiLFwiXFx1MjAyNlwiOlwiXFx1ZmUxOVwiLFwiXFx1MjAyN1wiOlwiXFx1MzBmYlwiLFwiXFx1MjBhOVwiOlwiXFx1ZmZlNlwiLFwiXFx1MzAwMVwiOlwiXFx1ZmUxMVwiLFwiXFx1MzAwMlwiOlwiXFx1ZmUxMlwiLFwiXFx1MzAwOFwiOlwiXFx1ZmUzZlwiLFwiXFx1MzAwOVwiOlwiXFx1ZmU0MFwiLFwiXFx1MzAwYVwiOlwiXFx1ZmUzZFwiLFwiXFx1MzAwYlwiOlwiXFx1ZmUzZVwiLFwiXFx1MzAwY1wiOlwiXFx1ZmU0MVwiLFwiXFx1MzAwZFwiOlwiXFx1ZmU0MlwiLFwiXFx1MzAwZVwiOlwiXFx1ZmU0M1wiLFwiXFx1MzAwZlwiOlwiXFx1ZmU0NFwiLFwiXFx1MzAxMFwiOlwiXFx1ZmUzYlwiLFwiXFx1MzAxMVwiOlwiXFx1ZmUzY1wiLFwiXFx1MzAxNFwiOlwiXFx1ZmUzOVwiLFwiXFx1MzAxNVwiOlwiXFx1ZmUzYVwiLFwiXFx1MzAxNlwiOlwiXFx1ZmUxN1wiLFwiXFx1MzAxN1wiOlwiXFx1ZmUxOFwiLFwiXFx1ZmYwMVwiOlwiXFx1ZmUxNVwiLFwiXFx1ZmYwOFwiOlwiXFx1ZmUzNVwiLFwiXFx1ZmYwOVwiOlwiXFx1ZmUzNlwiLFwiXFx1ZmYwY1wiOlwiXFx1ZmUxMFwiLFwiXFx1ZmYwZFwiOlwiXFx1ZmUzMlwiLFwiXFx1ZmYwZVwiOlwiXFx1MzBmYlwiLFwiXFx1ZmYxYVwiOlwiXFx1ZmUxM1wiLFwiXFx1ZmYxYlwiOlwiXFx1ZmUxNFwiLFwiXFx1ZmYxY1wiOlwiXFx1ZmUzZlwiLFwiXFx1ZmYxZVwiOlwiXFx1ZmU0MFwiLFwiXFx1ZmYxZlwiOlwiXFx1ZmUxNlwiLFwiXFx1ZmYzYlwiOlwiXFx1ZmU0N1wiLFwiXFx1ZmYzZFwiOlwiXFx1ZmU0OFwiLFwiXFx1ZmYzZlwiOlwiXFx1ZmUzM1wiLFwiXFx1ZmY1YlwiOlwiXFx1ZmUzN1wiLFwiXFx1ZmY1Y1wiOlwiXFx1MjAxNVwiLFwiXFx1ZmY1ZFwiOlwiXFx1ZmUzOFwiLFwiXFx1ZmY1ZlwiOlwiXFx1ZmUzNVwiLFwiXFx1ZmY2MFwiOlwiXFx1ZmUzNlwiLFwiXFx1ZmY2MVwiOlwiXFx1ZmUxMlwiLFwiXFx1ZmY2MlwiOlwiXFx1ZmU0MVwiLFwiXFx1ZmY2M1wiOlwiXFx1ZmU0MlwifSxSYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscixuLGkpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5hbmdsZT1uLHZvaWQgMCE9PWkmJih0aGlzLnNlZ21lbnQ9aSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlKHRoaXMueCx0aGlzLnksdGhpcy5hbmdsZSx0aGlzLnNlZ21lbnQpfSxlfShsKTtmdW5jdGlvbiBGYSh0LGUpe3ZhciByPWUuZXhwcmVzc2lvbjtpZihcImNvbnN0YW50XCI9PT1yLmtpbmQpcmV0dXJue2Z1bmN0aW9uVHlwZTpcImNvbnN0YW50XCIsbGF5b3V0U2l6ZTpyLmV2YWx1YXRlKG5ldyBMcih0KzEpKX07aWYoXCJzb3VyY2VcIj09PXIua2luZClyZXR1cm57ZnVuY3Rpb25UeXBlOlwic291cmNlXCJ9O2Zvcih2YXIgbj1yLnpvb21TdG9wcyxpPTA7aTxuLmxlbmd0aCYmbltpXTw9dDspaSsrO2Zvcih2YXIgYT1pPU1hdGgubWF4KDAsaS0xKTthPG4ubGVuZ3RoJiZuW2FdPHQrMTspYSsrO2E9TWF0aC5taW4obi5sZW5ndGgtMSxhKTt2YXIgbz17bWluOm5baV0sbWF4Om5bYV19O3JldHVyblwiY29tcG9zaXRlXCI9PT1yLmtpbmQ/e2Z1bmN0aW9uVHlwZTpcImNvbXBvc2l0ZVwiLHpvb21SYW5nZTpvLHByb3BlcnR5VmFsdWU6ZS52YWx1ZX06e2Z1bmN0aW9uVHlwZTpcImNhbWVyYVwiLGxheW91dFNpemU6ci5ldmFsdWF0ZShuZXcgTHIodCsxKSksem9vbVJhbmdlOm8sc2l6ZVJhbmdlOnttaW46ci5ldmFsdWF0ZShuZXcgTHIoby5taW4pKSxtYXg6ci5ldmFsdWF0ZShuZXcgTHIoby5tYXgpKX0scHJvcGVydHlWYWx1ZTplLnZhbHVlfX1wcihcIkFuY2hvclwiLFJhKTt2YXIgQmE9Z2EuVmVjdG9yVGlsZUZlYXR1cmUudHlwZXMsTmE9W3tuYW1lOlwiYV9mYWRlX29wYWNpdHlcIixjb21wb25lbnRzOjEsdHlwZTpcIlVpbnQ4XCIsb2Zmc2V0OjB9XTtmdW5jdGlvbiBqYSh0LGUscixuLGksYSxvLHMpe3QuZW1wbGFjZUJhY2soZSxyLE1hdGgucm91bmQoMzIqbiksTWF0aC5yb3VuZCgzMippKSxhLG8scz9zWzBdOjAscz9zWzFdOjApfWZ1bmN0aW9uIFZhKHQsZSxyKXt0LmVtcGxhY2VCYWNrKGUueCxlLnksciksdC5lbXBsYWNlQmFjayhlLngsZS55LHIpLHQuZW1wbGFjZUJhY2soZS54LGUueSxyKSx0LmVtcGxhY2VCYWNrKGUueCxlLnkscil9dmFyIFVhPWZ1bmN0aW9uKHQpe3RoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IHRuLHRoaXMuaW5kZXhBcnJheT1uZXcgaG4sdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9dCx0aGlzLnNlZ21lbnRzPW5ldyBNbix0aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheT1uZXcgZW4sdGhpcy5vcGFjaXR5VmVydGV4QXJyYXk9bmV3IHJuLHRoaXMucGxhY2VkU3ltYm9sQXJyYXk9bmV3IHlufTtVYS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQsZSl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxDYS5tZW1iZXJzKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5LGUpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZCh0KSx0aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5keW5hbWljTGF5b3V0VmVydGV4QXJyYXksTGEubWVtYmVycywhMCksdGhpcy5vcGFjaXR5VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMub3BhY2l0eVZlcnRleEFycmF5LE5hLCEwKSx0aGlzLm9wYWNpdHlWZXJ0ZXhCdWZmZXIuaXRlbVNpemU9MX0sVWEucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlciYmKHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCksdGhpcy5zZWdtZW50cy5kZXN0cm95KCksdGhpcy5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLm9wYWNpdHlWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpKX0scHIoXCJTeW1ib2xCdWZmZXJzXCIsVWEpO3ZhciBxYT1mdW5jdGlvbih0LGUscil7dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheT1uZXcgdCx0aGlzLmxheW91dEF0dHJpYnV0ZXM9ZSx0aGlzLmluZGV4QXJyYXk9bmV3IHIsdGhpcy5zZWdtZW50cz1uZXcgTW4sdGhpcy5jb2xsaXNpb25WZXJ0ZXhBcnJheT1uZXcgb259O3FhLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmxheW91dEF0dHJpYnV0ZXMpLHRoaXMuaW5kZXhCdWZmZXI9dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpLHRoaXMuY29sbGlzaW9uVmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuY29sbGlzaW9uVmVydGV4QXJyYXksemEubWVtYmVycywhMCl9LHFhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5zZWdtZW50cy5kZXN0cm95KCksdGhpcy5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIuZGVzdHJveSgpKX0scHIoXCJDb2xsaXNpb25CdWZmZXJzXCIscWEpO3ZhciBIYT1mdW5jdGlvbih0KXt0aGlzLmNvbGxpc2lvbkJveEFycmF5PXQuY29sbGlzaW9uQm94QXJyYXksdGhpcy56b29tPXQuem9vbSx0aGlzLm92ZXJzY2FsaW5nPXQub3ZlcnNjYWxpbmcsdGhpcy5sYXllcnM9dC5sYXllcnMsdGhpcy5sYXllcklkcz10aGlzLmxheWVycy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5waXhlbFJhdGlvPXQucGl4ZWxSYXRpbyx0aGlzLnNvdXJjZUxheWVySW5kZXg9dC5zb3VyY2VMYXllckluZGV4O3ZhciBlPXRoaXMubGF5ZXJzWzBdLl91bmV2YWx1YXRlZExheW91dC5fdmFsdWVzO3RoaXMudGV4dFNpemVEYXRhPUZhKHRoaXMuem9vbSxlW1widGV4dC1zaXplXCJdKSx0aGlzLmljb25TaXplRGF0YT1GYSh0aGlzLnpvb20sZVtcImljb24tc2l6ZVwiXSk7dmFyIHI9dGhpcy5sYXllcnNbMF0ubGF5b3V0O3RoaXMuc29ydEZlYXR1cmVzQnlZPXIuZ2V0KFwidGV4dC1hbGxvdy1vdmVybGFwXCIpfHxyLmdldChcImljb24tYWxsb3ctb3ZlcmxhcFwiKXx8ci5nZXQoXCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnRcIil8fHIuZ2V0KFwiaWNvbi1pZ25vcmUtcGxhY2VtZW50XCIpfTtIYS5wcm90b3R5cGUuY3JlYXRlQXJyYXlzPWZ1bmN0aW9uKCl7dGhpcy50ZXh0PW5ldyBVYShuZXcgSW4oQ2EubWVtYmVycyx0aGlzLmxheWVycyx0aGlzLnpvb20sZnVuY3Rpb24odCl7cmV0dXJuL150ZXh0Ly50ZXN0KHQpfSkpLHRoaXMuaWNvbj1uZXcgVWEobmV3IEluKENhLm1lbWJlcnMsdGhpcy5sYXllcnMsdGhpcy56b29tLGZ1bmN0aW9uKHQpe3JldHVybi9eaWNvbi8udGVzdCh0KX0pKSx0aGlzLmNvbGxpc2lvbkJveD1uZXcgcWEoYW4sT2EubWVtYmVycyxmbiksdGhpcy5jb2xsaXNpb25DaXJjbGU9bmV3IHFhKGFuLElhLm1lbWJlcnMsaG4pLHRoaXMuZ2x5cGhPZmZzZXRBcnJheT1uZXcgYm4sdGhpcy5saW5lVmVydGV4QXJyYXk9bmV3IHdufSxIYS5wcm90b3R5cGUucG9wdWxhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxheWVyc1swXSxuPXIubGF5b3V0LGk9bi5nZXQoXCJ0ZXh0LWZvbnRcIiksYT1uLmdldChcInRleHQtZmllbGRcIiksbz1uLmdldChcImljb24taW1hZ2VcIikscz0oXCJjb25zdGFudFwiIT09YS52YWx1ZS5raW5kfHxhLnZhbHVlLnZhbHVlLmxlbmd0aD4wKSYmKFwiY29uc3RhbnRcIiE9PWkudmFsdWUua2luZHx8aS52YWx1ZS52YWx1ZS5sZW5ndGg+MCksbD1cImNvbnN0YW50XCIhPT1vLnZhbHVlLmtpbmR8fG8udmFsdWUudmFsdWUmJm8udmFsdWUudmFsdWUubGVuZ3RoPjA7aWYodGhpcy5mZWF0dXJlcz1bXSxzfHxsKXtmb3IodmFyIGM9ZS5pY29uRGVwZW5kZW5jaWVzLHU9ZS5nbHlwaERlcGVuZGVuY2llcyxoPW5ldyBMcih0aGlzLnpvb20pLGY9MCxwPXQ7ZjxwLmxlbmd0aDtmKz0xKXt2YXIgZD1wW2ZdLGc9ZC5mZWF0dXJlLHY9ZC5pbmRleCxtPWQuc291cmNlTGF5ZXJJbmRleDtpZihyLl9mZWF0dXJlRmlsdGVyKGgsZykpe3ZhciB5PXZvaWQgMDtzJiYoeT1EYSh5PXIuZ2V0VmFsdWVBbmRSZXNvbHZlVG9rZW5zKFwidGV4dC1maWVsZFwiLGcpLHIsZykpO3ZhciB4PXZvaWQgMDtpZihsJiYoeD1yLmdldFZhbHVlQW5kUmVzb2x2ZVRva2VucyhcImljb24taW1hZ2VcIixnKSkseXx8eCl7dmFyIGI9e3RleHQ6eSxpY29uOngsaW5kZXg6dixzb3VyY2VMYXllckluZGV4Om0sZ2VvbWV0cnk6Rm4oZykscHJvcGVydGllczpnLnByb3BlcnRpZXMsdHlwZTpCYVtnLnR5cGVdfTtpZih2b2lkIDAhPT1nLmlkJiYoYi5pZD1nLmlkKSx0aGlzLmZlYXR1cmVzLnB1c2goYikseCYmKGNbeF09ITApLHkpZm9yKHZhciBfPWkuZXZhbHVhdGUoZykuam9pbihcIixcIiksdz11W19dPXVbX118fHt9LGs9XCJtYXBcIj09PW4uZ2V0KFwidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnRcIikmJlwibGluZVwiPT09bi5nZXQoXCJzeW1ib2wtcGxhY2VtZW50XCIpLEE9eHIoeSksVD0wO1Q8eS5sZW5ndGg7VCsrKWlmKHdbeS5jaGFyQ29kZUF0KFQpXT0hMCxrJiZBKXt2YXIgTT1QYVt5LmNoYXJBdChUKV07TSYmKHdbTS5jaGFyQ29kZUF0KDApXT0hMCl9fX19XCJsaW5lXCI9PT1uLmdldChcInN5bWJvbC1wbGFjZW1lbnRcIikmJih0aGlzLmZlYXR1cmVzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LHI9e30sbj1bXSxpPTA7ZnVuY3Rpb24gYShlKXtuLnB1c2godFtlXSksaSsrfWZ1bmN0aW9uIG8odCxlLGkpe3ZhciBhPXJbdF07cmV0dXJuIGRlbGV0ZSByW3RdLHJbZV09YSxuW2FdLmdlb21ldHJ5WzBdLnBvcCgpLG5bYV0uZ2VvbWV0cnlbMF09blthXS5nZW9tZXRyeVswXS5jb25jYXQoaVswXSksYX1mdW5jdGlvbiBzKHQscixpKXt2YXIgYT1lW3JdO3JldHVybiBkZWxldGUgZVtyXSxlW3RdPWEsblthXS5nZW9tZXRyeVswXS5zaGlmdCgpLG5bYV0uZ2VvbWV0cnlbMF09aVswXS5jb25jYXQoblthXS5nZW9tZXRyeVswXSksYX1mdW5jdGlvbiBsKHQsZSxyKXt2YXIgbj1yP2VbMF1bZVswXS5sZW5ndGgtMV06ZVswXVswXTtyZXR1cm4gdCtcIjpcIituLngrXCI6XCIrbi55fWZvcih2YXIgYz0wO2M8dC5sZW5ndGg7YysrKXt2YXIgdT10W2NdLGg9dS5nZW9tZXRyeSxmPXUudGV4dDtpZihmKXt2YXIgcD1sKGYsaCksZD1sKGYsaCwhMCk7aWYocCBpbiByJiZkIGluIGUmJnJbcF0hPT1lW2RdKXt2YXIgZz1zKHAsZCxoKSx2PW8ocCxkLG5bZ10uZ2VvbWV0cnkpO2RlbGV0ZSBlW3BdLGRlbGV0ZSByW2RdLHJbbChmLG5bdl0uZ2VvbWV0cnksITApXT12LG5bZ10uZ2VvbWV0cnk9bnVsbH1lbHNlIHAgaW4gcj9vKHAsZCxoKTpkIGluIGU/cyhwLGQsaCk6KGEoYyksZVtwXT1pLTEscltkXT1pLTEpfWVsc2UgYShjKX1yZXR1cm4gbi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2VvbWV0cnl9KX0odGhpcy5mZWF0dXJlcykpfX0sSGEucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aH0sSGEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnRleHQudXBsb2FkKHQsdGhpcy5zb3J0RmVhdHVyZXNCeVkpLHRoaXMuaWNvbi51cGxvYWQodCx0aGlzLnNvcnRGZWF0dXJlc0J5WSksdGhpcy5jb2xsaXNpb25Cb3gudXBsb2FkKHQpLHRoaXMuY29sbGlzaW9uQ2lyY2xlLnVwbG9hZCh0KX0sSGEucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnRleHQuZGVzdHJveSgpLHRoaXMuaWNvbi5kZXN0cm95KCksdGhpcy5jb2xsaXNpb25Cb3guZGVzdHJveSgpLHRoaXMuY29sbGlzaW9uQ2lyY2xlLmRlc3Ryb3koKX0sSGEucHJvdG90eXBlLmFkZFRvTGluZVZlcnRleEFycmF5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5saW5lVmVydGV4QXJyYXkubGVuZ3RoO2lmKHZvaWQgMCE9PXQuc2VnbWVudCl7Zm9yKHZhciBuPXQuZGlzdChlW3Quc2VnbWVudCsxXSksaT10LmRpc3QoZVt0LnNlZ21lbnRdKSxhPXt9LG89dC5zZWdtZW50KzE7bzxlLmxlbmd0aDtvKyspYVtvXT17eDplW29dLngseTplW29dLnksdGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3I6bn0sbzxlLmxlbmd0aC0xJiYobis9ZVtvKzFdLmRpc3QoZVtvXSkpO2Zvcih2YXIgcz10LnNlZ21lbnR8fDA7cz49MDtzLS0pYVtzXT17eDplW3NdLngseTplW3NdLnksdGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3I6aX0scz4wJiYoaSs9ZVtzLTFdLmRpc3QoZVtzXSkpO2Zvcih2YXIgbD0wO2w8ZS5sZW5ndGg7bCsrKXt2YXIgYz1hW2xdO3RoaXMubGluZVZlcnRleEFycmF5LmVtcGxhY2VCYWNrKGMueCxjLnksYy50aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcil9fXJldHVybntsaW5lU3RhcnRJbmRleDpyLGxpbmVMZW5ndGg6dGhpcy5saW5lVmVydGV4QXJyYXkubGVuZ3RoLXJ9fSxIYS5wcm90b3R5cGUuYWRkU3ltYm9scz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjKXtmb3IodmFyIHU9dC5pbmRleEFycmF5LGg9dC5sYXlvdXRWZXJ0ZXhBcnJheSxmPXQuZHluYW1pY0xheW91dFZlcnRleEFycmF5LHA9dC5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0KmUubGVuZ3RoLHQubGF5b3V0VmVydGV4QXJyYXksdC5pbmRleEFycmF5KSxkPXRoaXMuZ2x5cGhPZmZzZXRBcnJheS5sZW5ndGgsZz1wLnZlcnRleExlbmd0aCx2PTAsbT1lO3Y8bS5sZW5ndGg7dis9MSl7dmFyIHk9bVt2XSx4PXkudGwsYj15LnRyLF89eS5ibCx3PXkuYnIsaz15LnRleCxBPXAudmVydGV4TGVuZ3RoLFQ9eS5nbHlwaE9mZnNldFsxXTtqYShoLHMueCxzLnkseC54LFQreC55LGsueCxrLnksciksamEoaCxzLngscy55LGIueCxUK2IueSxrLngray53LGsueSxyKSxqYShoLHMueCxzLnksXy54LFQrXy55LGsueCxrLnkray5oLHIpLGphKGgscy54LHMueSx3LngsVCt3Lnksay54K2sudyxrLnkray5oLHIpLFZhKGYscywwKSx1LmVtcGxhY2VCYWNrKEEsQSsxLEErMiksdS5lbXBsYWNlQmFjayhBKzEsQSsyLEErMykscC52ZXJ0ZXhMZW5ndGgrPTQscC5wcmltaXRpdmVMZW5ndGgrPTIsdGhpcy5nbHlwaE9mZnNldEFycmF5LmVtcGxhY2VCYWNrKHkuZ2x5cGhPZmZzZXRbMF0pfXQucGxhY2VkU3ltYm9sQXJyYXkuZW1wbGFjZUJhY2socy54LHMueSxkLHRoaXMuZ2x5cGhPZmZzZXRBcnJheS5sZW5ndGgtZCxnLGwsYyxzLnNlZ21lbnQscj9yWzBdOjAscj9yWzFdOjAsblswXSxuWzFdLG8sITEpLHQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXModC5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsYSl9LEhhLnByb3RvdHlwZS5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXg9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gZS5lbXBsYWNlQmFjaygwLDApLHQuZW1wbGFjZUJhY2soci54LHIueSxuLngsbi55LE1hdGgucm91bmQoaS54KSxNYXRoLnJvdW5kKGkueSkpfSxIYS5wcm90b3R5cGUuYWRkQ29sbGlzaW9uRGVidWdWZXJ0aWNlcz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3ZhciBjPWkuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCxpLmxheW91dFZlcnRleEFycmF5LGkuaW5kZXhBcnJheSksdT1jLnZlcnRleExlbmd0aCxoPWkubGF5b3V0VmVydGV4QXJyYXksZj1pLmNvbGxpc2lvblZlcnRleEFycmF5O2lmKHRoaXMuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4KGgsZixhLG8uYW5jaG9yLG5ldyBsKHQsZSkpLHRoaXMuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4KGgsZixhLG8uYW5jaG9yLG5ldyBsKHIsZSkpLHRoaXMuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4KGgsZixhLG8uYW5jaG9yLG5ldyBsKHIsbikpLHRoaXMuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4KGgsZixhLG8uYW5jaG9yLG5ldyBsKHQsbikpLGMudmVydGV4TGVuZ3RoKz00LHMpe3ZhciBwPWkuaW5kZXhBcnJheTtwLmVtcGxhY2VCYWNrKHUsdSsxLHUrMikscC5lbXBsYWNlQmFjayh1LHUrMix1KzMpLGMucHJpbWl0aXZlTGVuZ3RoKz0yfWVsc2V7dmFyIGQ9aS5pbmRleEFycmF5O2QuZW1wbGFjZUJhY2sodSx1KzEpLGQuZW1wbGFjZUJhY2sodSsxLHUrMiksZC5lbXBsYWNlQmFjayh1KzIsdSszKSxkLmVtcGxhY2VCYWNrKHUrMyx1KSxjLnByaW1pdGl2ZUxlbmd0aCs9NH19LEhhLnByb3RvdHlwZS5nZW5lcmF0ZUNvbGxpc2lvbkRlYnVnQnVmZmVycz1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9dGhpcy5zeW1ib2xJbnN0YW5jZXM7dDxlLmxlbmd0aDt0Kz0xKXt2YXIgcj1lW3RdO3IudGV4dENvbGxpc2lvbkZlYXR1cmU9e2JveFN0YXJ0SW5kZXg6ci50ZXh0Qm94U3RhcnRJbmRleCxib3hFbmRJbmRleDpyLnRleHRCb3hFbmRJbmRleH0sci5pY29uQ29sbGlzaW9uRmVhdHVyZT17Ym94U3RhcnRJbmRleDpyLmljb25Cb3hTdGFydEluZGV4LGJveEVuZEluZGV4OnIuaWNvbkJveEVuZEluZGV4fTtmb3IodmFyIG49MDtuPDI7bisrKXt2YXIgaT1yWzA9PT1uP1widGV4dENvbGxpc2lvbkZlYXR1cmVcIjpcImljb25Db2xsaXNpb25GZWF0dXJlXCJdO2lmKGkpZm9yKHZhciBhPWkuYm94U3RhcnRJbmRleDthPGkuYm94RW5kSW5kZXg7YSsrKXt2YXIgbz10aGlzLmNvbGxpc2lvbkJveEFycmF5LmdldChhKSxzPW8ueDEsbD1vLnkxLGM9by54Mix1PW8ueTIsaD1vLnJhZGl1cz4wO3RoaXMuYWRkQ29sbGlzaW9uRGVidWdWZXJ0aWNlcyhzLGwsYyx1LGg/dGhpcy5jb2xsaXNpb25DaXJjbGU6dGhpcy5jb2xsaXNpb25Cb3gsby5hbmNob3JQb2ludCxyLGgpfX19fSxIYS5wcm90b3R5cGUuZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlcz1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYT17fSxvPWU7bzxyO28rKyl7dmFyIHM9dC5nZXQobyk7aWYoMD09PXMucmFkaXVzKXthLnRleHRCb3g9e3gxOnMueDEseTE6cy55MSx4MjpzLngyLHkyOnMueTIsYW5jaG9yUG9pbnRYOnMuYW5jaG9yUG9pbnRYLGFuY2hvclBvaW50WTpzLmFuY2hvclBvaW50WX0sYS50ZXh0RmVhdHVyZUluZGV4PXMuZmVhdHVyZUluZGV4O2JyZWFrfWEudGV4dENpcmNsZXN8fChhLnRleHRDaXJjbGVzPVtdLGEudGV4dEZlYXR1cmVJbmRleD1zLmZlYXR1cmVJbmRleCksYS50ZXh0Q2lyY2xlcy5wdXNoKHMuYW5jaG9yUG9pbnRYLHMuYW5jaG9yUG9pbnRZLHMucmFkaXVzLHMuc2lnbmVkRGlzdGFuY2VGcm9tQW5jaG9yLDEpfWZvcih2YXIgbD1uO2w8aTtsKyspe3ZhciBjPXQuZ2V0KGwpO2lmKDA9PT1jLnJhZGl1cyl7YS5pY29uQm94PXt4MTpjLngxLHkxOmMueTEseDI6Yy54Mix5MjpjLnkyLGFuY2hvclBvaW50WDpjLmFuY2hvclBvaW50WCxhbmNob3JQb2ludFk6Yy5hbmNob3JQb2ludFl9LGEuaWNvbkZlYXR1cmVJbmRleD1jLmZlYXR1cmVJbmRleDticmVha319cmV0dXJuIGF9LEhhLnByb3RvdHlwZS5oYXNUZXh0RGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQuc2VnbWVudHMuZ2V0KCkubGVuZ3RoPjB9LEhhLnByb3RvdHlwZS5oYXNJY29uRGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmljb24uc2VnbWVudHMuZ2V0KCkubGVuZ3RoPjB9LEhhLnByb3RvdHlwZS5oYXNDb2xsaXNpb25Cb3hEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29sbGlzaW9uQm94LnNlZ21lbnRzLmdldCgpLmxlbmd0aD4wfSxIYS5wcm90b3R5cGUuaGFzQ29sbGlzaW9uQ2lyY2xlRGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbGxpc2lvbkNpcmNsZS5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MH0sSGEucHJvdG90eXBlLnNvcnRGZWF0dXJlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHRoaXMuc29ydEZlYXR1cmVzQnlZJiZ0aGlzLnNvcnRlZEFuZ2xlIT09dCYmKHRoaXMuc29ydGVkQW5nbGU9dCwhKHRoaXMudGV4dC5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MXx8dGhpcy5pY29uLnNlZ21lbnRzLmdldCgpLmxlbmd0aD4xKSkpe2Zvcih2YXIgcj1bXSxuPTA7bjx0aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7bisrKXIucHVzaChuKTt2YXIgaT1NYXRoLnNpbih0KSxhPU1hdGguY29zKHQpO3Iuc29ydChmdW5jdGlvbih0LHIpe3ZhciBuPWUuc3ltYm9sSW5zdGFuY2VzW3RdLG89ZS5zeW1ib2xJbnN0YW5jZXNbcl07cmV0dXJuKGkqbi5hbmNob3IueCthKm4uYW5jaG9yLnl8MCktKGkqby5hbmNob3IueCthKm8uYW5jaG9yLnl8MCl8fG8uZmVhdHVyZUluZGV4LW4uZmVhdHVyZUluZGV4fSksdGhpcy50ZXh0LmluZGV4QXJyYXkuY2xlYXIoKSx0aGlzLmljb24uaW5kZXhBcnJheS5jbGVhcigpLHRoaXMuZmVhdHVyZVNvcnRPcmRlcj1bXTtmb3IodmFyIG89MCxzPXI7bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dLGM9ZS5zeW1ib2xJbnN0YW5jZXNbbF07ZS5mZWF0dXJlU29ydE9yZGVyLnB1c2goYy5mZWF0dXJlSW5kZXgpO2Zvcih2YXIgdT0wLGg9Yy5wbGFjZWRUZXh0U3ltYm9sSW5kaWNlczt1PGgubGVuZ3RoO3UrPTEpZm9yKHZhciBmPWhbdV0scD1lLnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KGYpLGQ9cC52ZXJ0ZXhTdGFydEluZGV4KzQqcC5udW1HbHlwaHMsZz1wLnZlcnRleFN0YXJ0SW5kZXg7ZzxkO2crPTQpZS50ZXh0LmluZGV4QXJyYXkuZW1wbGFjZUJhY2soZyxnKzEsZysyKSxlLnRleHQuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhnKzEsZysyLGcrMyk7dmFyIHY9ZS5pY29uLnBsYWNlZFN5bWJvbEFycmF5LmdldChsKTtpZih2Lm51bUdseXBocyl7dmFyIG09di52ZXJ0ZXhTdGFydEluZGV4O2UuaWNvbi5pbmRleEFycmF5LmVtcGxhY2VCYWNrKG0sbSsxLG0rMiksZS5pY29uLmluZGV4QXJyYXkuZW1wbGFjZUJhY2sobSsxLG0rMixtKzMpfX10aGlzLnRleHQuaW5kZXhCdWZmZXImJnRoaXMudGV4dC5pbmRleEJ1ZmZlci51cGRhdGVEYXRhKHRoaXMudGV4dC5pbmRleEFycmF5KSx0aGlzLmljb24uaW5kZXhCdWZmZXImJnRoaXMuaWNvbi5pbmRleEJ1ZmZlci51cGRhdGVEYXRhKHRoaXMuaWNvbi5pbmRleEFycmF5KX19LHByKFwiU3ltYm9sQnVja2V0XCIsSGEse29taXQ6W1wibGF5ZXJzXCIsXCJjb2xsaXNpb25Cb3hBcnJheVwiLFwiZmVhdHVyZXNcIixcImNvbXBhcmVUZXh0XCJdLHNoYWxsb3c6W1wic3ltYm9sSW5zdGFuY2VzXCJdfSksSGEuTUFYX0dMWVBIUz02NTUzNSxIYS5hZGREeW5hbWljQXR0cmlidXRlcz1WYTt2YXIgR2E9bmV3IHFyKHtcInN5bWJvbC1wbGFjZW1lbnRcIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sW1wic3ltYm9sLXBsYWNlbWVudFwiXSksXCJzeW1ib2wtc3BhY2luZ1wiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJzeW1ib2wtc3BhY2luZ1wiXSksXCJzeW1ib2wtYXZvaWQtZWRnZXNcIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sW1wic3ltYm9sLWF2b2lkLWVkZ2VzXCJdKSxcImljb24tYWxsb3ctb3ZlcmxhcFwiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJpY29uLWFsbG93LW92ZXJsYXBcIl0pLFwiaWNvbi1pZ25vcmUtcGxhY2VtZW50XCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFtcImljb24taWdub3JlLXBsYWNlbWVudFwiXSksXCJpY29uLW9wdGlvbmFsXCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFtcImljb24tb3B0aW9uYWxcIl0pLFwiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnRcIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sW1wiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnRcIl0pLFwiaWNvbi1zaXplXCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFtcImljb24tc2l6ZVwiXSksXCJpY29uLXRleHQtZml0XCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFtcImljb24tdGV4dC1maXRcIl0pLFwiaWNvbi10ZXh0LWZpdC1wYWRkaW5nXCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFtcImljb24tdGV4dC1maXQtcGFkZGluZ1wiXSksXCJpY29uLWltYWdlXCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFtcImljb24taW1hZ2VcIl0pLFwiaWNvbi1yb3RhdGVcIjpuZXcganIoSS5sYXlvdXRfc3ltYm9sW1wiaWNvbi1yb3RhdGVcIl0pLFwiaWNvbi1wYWRkaW5nXCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFtcImljb24tcGFkZGluZ1wiXSksXCJpY29uLWtlZXAtdXByaWdodFwiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJpY29uLWtlZXAtdXByaWdodFwiXSksXCJpY29uLW9mZnNldFwiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbXCJpY29uLW9mZnNldFwiXSksXCJpY29uLWFuY2hvclwiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbXCJpY29uLWFuY2hvclwiXSksXCJpY29uLXBpdGNoLWFsaWdubWVudFwiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJpY29uLXBpdGNoLWFsaWdubWVudFwiXSksXCJ0ZXh0LXBpdGNoLWFsaWdubWVudFwiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LXBpdGNoLWFsaWdubWVudFwiXSksXCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudFwiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudFwiXSksXCJ0ZXh0LWZpZWxkXCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFtcInRleHQtZmllbGRcIl0pLFwidGV4dC1mb250XCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFtcInRleHQtZm9udFwiXSksXCJ0ZXh0LXNpemVcIjpuZXcganIoSS5sYXlvdXRfc3ltYm9sW1widGV4dC1zaXplXCJdKSxcInRleHQtbWF4LXdpZHRoXCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFtcInRleHQtbWF4LXdpZHRoXCJdKSxcInRleHQtbGluZS1oZWlnaHRcIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sW1widGV4dC1saW5lLWhlaWdodFwiXSksXCJ0ZXh0LWxldHRlci1zcGFjaW5nXCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFtcInRleHQtbGV0dGVyLXNwYWNpbmdcIl0pLFwidGV4dC1qdXN0aWZ5XCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFtcInRleHQtanVzdGlmeVwiXSksXCJ0ZXh0LWFuY2hvclwiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LWFuY2hvclwiXSksXCJ0ZXh0LW1heC1hbmdsZVwiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LW1heC1hbmdsZVwiXSksXCJ0ZXh0LXJvdGF0ZVwiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LXJvdGF0ZVwiXSksXCJ0ZXh0LXBhZGRpbmdcIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sW1widGV4dC1wYWRkaW5nXCJdKSxcInRleHQta2VlcC11cHJpZ2h0XCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFtcInRleHQta2VlcC11cHJpZ2h0XCJdKSxcInRleHQtdHJhbnNmb3JtXCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFtcInRleHQtdHJhbnNmb3JtXCJdKSxcInRleHQtb2Zmc2V0XCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFtcInRleHQtb2Zmc2V0XCJdKSxcInRleHQtYWxsb3ctb3ZlcmxhcFwiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LWFsbG93LW92ZXJsYXBcIl0pLFwidGV4dC1pZ25vcmUtcGxhY2VtZW50XCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFtcInRleHQtaWdub3JlLXBsYWNlbWVudFwiXSksXCJ0ZXh0LW9wdGlvbmFsXCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFtcInRleHQtb3B0aW9uYWxcIl0pfSksWWE9e3BhaW50Om5ldyBxcih7XCJpY29uLW9wYWNpdHlcIjpuZXcganIoSS5wYWludF9zeW1ib2xbXCJpY29uLW9wYWNpdHlcIl0pLFwiaWNvbi1jb2xvclwiOm5ldyBqcihJLnBhaW50X3N5bWJvbFtcImljb24tY29sb3JcIl0pLFwiaWNvbi1oYWxvLWNvbG9yXCI6bmV3IGpyKEkucGFpbnRfc3ltYm9sW1wiaWNvbi1oYWxvLWNvbG9yXCJdKSxcImljb24taGFsby13aWR0aFwiOm5ldyBqcihJLnBhaW50X3N5bWJvbFtcImljb24taGFsby13aWR0aFwiXSksXCJpY29uLWhhbG8tYmx1clwiOm5ldyBqcihJLnBhaW50X3N5bWJvbFtcImljb24taGFsby1ibHVyXCJdKSxcImljb24tdHJhbnNsYXRlXCI6bmV3IE5yKEkucGFpbnRfc3ltYm9sW1wiaWNvbi10cmFuc2xhdGVcIl0pLFwiaWNvbi10cmFuc2xhdGUtYW5jaG9yXCI6bmV3IE5yKEkucGFpbnRfc3ltYm9sW1wiaWNvbi10cmFuc2xhdGUtYW5jaG9yXCJdKSxcInRleHQtb3BhY2l0eVwiOm5ldyBqcihJLnBhaW50X3N5bWJvbFtcInRleHQtb3BhY2l0eVwiXSksXCJ0ZXh0LWNvbG9yXCI6bmV3IGpyKEkucGFpbnRfc3ltYm9sW1widGV4dC1jb2xvclwiXSksXCJ0ZXh0LWhhbG8tY29sb3JcIjpuZXcganIoSS5wYWludF9zeW1ib2xbXCJ0ZXh0LWhhbG8tY29sb3JcIl0pLFwidGV4dC1oYWxvLXdpZHRoXCI6bmV3IGpyKEkucGFpbnRfc3ltYm9sW1widGV4dC1oYWxvLXdpZHRoXCJdKSxcInRleHQtaGFsby1ibHVyXCI6bmV3IGpyKEkucGFpbnRfc3ltYm9sW1widGV4dC1oYWxvLWJsdXJcIl0pLFwidGV4dC10cmFuc2xhdGVcIjpuZXcgTnIoSS5wYWludF9zeW1ib2xbXCJ0ZXh0LXRyYW5zbGF0ZVwiXSksXCJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3JcIjpuZXcgTnIoSS5wYWludF9zeW1ib2xbXCJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3JcIl0pfSksbGF5b3V0OkdhfSxXYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsWWEpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5yZWNhbGN1bGF0ZT1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5yZWNhbGN1bGF0ZS5jYWxsKHRoaXMsZSksXCJhdXRvXCI9PT10aGlzLmxheW91dC5nZXQoXCJpY29uLXJvdGF0aW9uLWFsaWdubWVudFwiKSYmKFwibGluZVwiPT09dGhpcy5sYXlvdXQuZ2V0KFwic3ltYm9sLXBsYWNlbWVudFwiKT90aGlzLmxheW91dC5fdmFsdWVzW1wiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnRcIl09XCJtYXBcIjp0aGlzLmxheW91dC5fdmFsdWVzW1wiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnRcIl09XCJ2aWV3cG9ydFwiKSxcImF1dG9cIj09PXRoaXMubGF5b3V0LmdldChcInRleHQtcm90YXRpb24tYWxpZ25tZW50XCIpJiYoXCJsaW5lXCI9PT10aGlzLmxheW91dC5nZXQoXCJzeW1ib2wtcGxhY2VtZW50XCIpP3RoaXMubGF5b3V0Ll92YWx1ZXNbXCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudFwiXT1cIm1hcFwiOnRoaXMubGF5b3V0Ll92YWx1ZXNbXCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudFwiXT1cInZpZXdwb3J0XCIpLFwiYXV0b1wiPT09dGhpcy5sYXlvdXQuZ2V0KFwidGV4dC1waXRjaC1hbGlnbm1lbnRcIikmJih0aGlzLmxheW91dC5fdmFsdWVzW1widGV4dC1waXRjaC1hbGlnbm1lbnRcIl09dGhpcy5sYXlvdXQuZ2V0KFwidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnRcIikpLFwiYXV0b1wiPT09dGhpcy5sYXlvdXQuZ2V0KFwiaWNvbi1waXRjaC1hbGlnbm1lbnRcIikmJih0aGlzLmxheW91dC5fdmFsdWVzW1wiaWNvbi1waXRjaC1hbGlnbm1lbnRcIl09dGhpcy5sYXlvdXQuZ2V0KFwiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnRcIikpfSxlLnByb3RvdHlwZS5nZXRWYWx1ZUFuZFJlc29sdmVUb2tlbnM9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMubGF5b3V0LmdldCh0KS5ldmFsdWF0ZShlKSxpPXRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0Ll92YWx1ZXNbdF07cmV0dXJuIGkuaXNEYXRhRHJpdmVuKCl8fF9lKGkudmFsdWUpP246KHI9ZS5wcm9wZXJ0aWVzLG4ucmVwbGFjZSgveyhbXnt9XSspfS9nLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUgaW4gcj9TdHJpbmcocltlXSk6XCJcIn0pKX0sZS5wcm90b3R5cGUuY3JlYXRlQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgSGEodCl9LGUucHJvdG90eXBlLnF1ZXJ5UmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZX0oSHIpLFhhPXtwYWludDpuZXcgcXIoe1wiYmFja2dyb3VuZC1jb2xvclwiOm5ldyBOcihJLnBhaW50X2JhY2tncm91bmRbXCJiYWNrZ3JvdW5kLWNvbG9yXCJdKSxcImJhY2tncm91bmQtcGF0dGVyblwiOm5ldyBWcihJLnBhaW50X2JhY2tncm91bmRbXCJiYWNrZ3JvdW5kLXBhdHRlcm5cIl0pLFwiYmFja2dyb3VuZC1vcGFjaXR5XCI6bmV3IE5yKEkucGFpbnRfYmFja2dyb3VuZFtcImJhY2tncm91bmQtb3BhY2l0eVwiXSl9KX0sWmE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLFhhKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZX0oSHIpLCRhPXtwYWludDpuZXcgcXIoe1wicmFzdGVyLW9wYWNpdHlcIjpuZXcgTnIoSS5wYWludF9yYXN0ZXJbXCJyYXN0ZXItb3BhY2l0eVwiXSksXCJyYXN0ZXItaHVlLXJvdGF0ZVwiOm5ldyBOcihJLnBhaW50X3Jhc3RlcltcInJhc3Rlci1odWUtcm90YXRlXCJdKSxcInJhc3Rlci1icmlnaHRuZXNzLW1pblwiOm5ldyBOcihJLnBhaW50X3Jhc3RlcltcInJhc3Rlci1icmlnaHRuZXNzLW1pblwiXSksXCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXhcIjpuZXcgTnIoSS5wYWludF9yYXN0ZXJbXCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXhcIl0pLFwicmFzdGVyLXNhdHVyYXRpb25cIjpuZXcgTnIoSS5wYWludF9yYXN0ZXJbXCJyYXN0ZXItc2F0dXJhdGlvblwiXSksXCJyYXN0ZXItY29udHJhc3RcIjpuZXcgTnIoSS5wYWludF9yYXN0ZXJbXCJyYXN0ZXItY29udHJhc3RcIl0pLFwicmFzdGVyLWZhZGUtZHVyYXRpb25cIjpuZXcgTnIoSS5wYWludF9yYXN0ZXJbXCJyYXN0ZXItZmFkZS1kdXJhdGlvblwiXSl9KX0sSmE9e2NpcmNsZTpuaSxoZWF0bWFwOnBpLGhpbGxzaGFkZTpnaSxmaWxsOkppLFwiZmlsbC1leHRydXNpb25cIjphYSxsaW5lOlNhLHN5bWJvbDpXYSxiYWNrZ3JvdW5kOlphLHJhc3RlcjpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsJGEpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlfShIcil9LEthPWkoZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxyKXtyPXJ8fHt9LHRoaXMudz10fHw2NCx0aGlzLmg9ZXx8NjQsdGhpcy5hdXRvUmVzaXplPSEhci5hdXRvUmVzaXplLHRoaXMuc2hlbHZlcz1bXSx0aGlzLmZyZWViaW5zPVtdLHRoaXMuc3RhdHM9e30sdGhpcy5iaW5zPXt9LHRoaXMubWF4SWQ9MH1mdW5jdGlvbiBlKHQsZSxyKXt0aGlzLng9MCx0aGlzLnk9dCx0aGlzLnc9dGhpcy5mcmVlPWUsdGhpcy5oPXJ9cmV0dXJuIHQucHJvdG90eXBlLnBhY2s9ZnVuY3Rpb24odCxlKXt0PVtdLmNvbmNhdCh0KSxlPWV8fHt9O2Zvcih2YXIgcixuLGksYSxvPVtdLHM9MDtzPHQubGVuZ3RoO3MrKylpZihyPXRbc10ud3x8dFtzXS53aWR0aCxuPXRbc10uaHx8dFtzXS5oZWlnaHQsaT10W3NdLmlkLHImJm4pe2lmKCEoYT10aGlzLnBhY2tPbmUocixuLGkpKSljb250aW51ZTtlLmluUGxhY2UmJih0W3NdLng9YS54LHRbc10ueT1hLnksdFtzXS5pZD1hLmlkKSxvLnB1c2goYSl9cmV0dXJuIHRoaXMuc2hyaW5rKCksb30sdC5wcm90b3R5cGUucGFja09uZT1mdW5jdGlvbih0LHIsbil7dmFyIGksYSxvLHMsbCxjLHUsaCxmPXtmcmVlYmluOi0xLHNoZWxmOi0xLHdhc3RlOjEvMH0scD0wO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBufHxcIm51bWJlclwiPT10eXBlb2Ygbil7aWYoaT10aGlzLmdldEJpbihuKSlyZXR1cm4gdGhpcy5yZWYoaSksaTtcIm51bWJlclwiPT10eXBlb2YgbiYmKHRoaXMubWF4SWQ9TWF0aC5tYXgobix0aGlzLm1heElkKSl9ZWxzZSBuPSsrdGhpcy5tYXhJZDtmb3Iocz0wO3M8dGhpcy5mcmVlYmlucy5sZW5ndGg7cysrKXtpZihyPT09KGk9dGhpcy5mcmVlYmluc1tzXSkubWF4aCYmdD09PWkubWF4dylyZXR1cm4gdGhpcy5hbGxvY0ZyZWViaW4ocyx0LHIsbik7cj5pLm1heGh8fHQ+aS5tYXh3fHxyPD1pLm1heGgmJnQ8PWkubWF4dyYmKG89aS5tYXh3KmkubWF4aC10KnIpPGYud2FzdGUmJihmLndhc3RlPW8sZi5mcmVlYmluPXMpfWZvcihzPTA7czx0aGlzLnNoZWx2ZXMubGVuZ3RoO3MrKylpZihwKz0oYT10aGlzLnNoZWx2ZXNbc10pLmgsISh0PmEuZnJlZSkpe2lmKHI9PT1hLmgpcmV0dXJuIHRoaXMuYWxsb2NTaGVsZihzLHQscixuKTtyPmEuaHx8cjxhLmgmJihvPShhLmgtcikqdCk8Zi53YXN0ZSYmKGYuZnJlZWJpbj0tMSxmLndhc3RlPW8sZi5zaGVsZj1zKX1yZXR1cm4tMSE9PWYuZnJlZWJpbj90aGlzLmFsbG9jRnJlZWJpbihmLmZyZWViaW4sdCxyLG4pOi0xIT09Zi5zaGVsZj90aGlzLmFsbG9jU2hlbGYoZi5zaGVsZix0LHIsbik6cjw9dGhpcy5oLXAmJnQ8PXRoaXMudz8oYT1uZXcgZShwLHRoaXMudyxyKSx0aGlzLmFsbG9jU2hlbGYodGhpcy5zaGVsdmVzLnB1c2goYSktMSx0LHIsbikpOnRoaXMuYXV0b1Jlc2l6ZT8obD1jPXRoaXMuaCwoKHU9aD10aGlzLncpPD1sfHx0PnUpJiYoaD0yKk1hdGgubWF4KHQsdSkpLChsPHV8fHI+bCkmJihjPTIqTWF0aC5tYXgocixsKSksdGhpcy5yZXNpemUoaCxjKSx0aGlzLnBhY2tPbmUodCxyLG4pKTpudWxsfSx0LnByb3RvdHlwZS5hbGxvY0ZyZWViaW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5mcmVlYmlucy5zcGxpY2UodCwxKVswXTtyZXR1cm4gaS5pZD1uLGkudz1lLGkuaD1yLGkucmVmY291bnQ9MCx0aGlzLmJpbnNbbl09aSx0aGlzLnJlZihpKSxpfSx0LnByb3RvdHlwZS5hbGxvY1NoZWxmPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuc2hlbHZlc1t0XS5hbGxvYyhlLHIsbik7cmV0dXJuIHRoaXMuYmluc1tuXT1pLHRoaXMucmVmKGkpLGl9LHQucHJvdG90eXBlLnNocmluaz1mdW5jdGlvbigpe2lmKHRoaXMuc2hlbHZlcy5sZW5ndGg+MCl7Zm9yKHZhciB0PTAsZT0wLHI9MDtyPHRoaXMuc2hlbHZlcy5sZW5ndGg7cisrKXt2YXIgbj10aGlzLnNoZWx2ZXNbcl07ZSs9bi5oLHQ9TWF0aC5tYXgobi53LW4uZnJlZSx0KX10aGlzLnJlc2l6ZSh0LGUpfX0sdC5wcm90b3R5cGUuZ2V0QmluPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJpbnNbdF19LHQucHJvdG90eXBlLnJlZj1mdW5jdGlvbih0KXtpZigxPT0rK3QucmVmY291bnQpe3ZhciBlPXQuaDt0aGlzLnN0YXRzW2VdPTErKDB8dGhpcy5zdGF0c1tlXSl9cmV0dXJuIHQucmVmY291bnR9LHQucHJvdG90eXBlLnVucmVmPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dC5yZWZjb3VudD8wOigwPT0tLXQucmVmY291bnQmJih0aGlzLnN0YXRzW3QuaF0tLSxkZWxldGUgdGhpcy5iaW5zW3QuaWRdLHRoaXMuZnJlZWJpbnMucHVzaCh0KSksdC5yZWZjb3VudCl9LHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zaGVsdmVzPVtdLHRoaXMuZnJlZWJpbnM9W10sdGhpcy5zdGF0cz17fSx0aGlzLmJpbnM9e30sdGhpcy5tYXhJZD0wfSx0LnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCxlKXt0aGlzLnc9dCx0aGlzLmg9ZTtmb3IodmFyIHI9MDtyPHRoaXMuc2hlbHZlcy5sZW5ndGg7cisrKXRoaXMuc2hlbHZlc1tyXS5yZXNpemUodCk7cmV0dXJuITB9LGUucHJvdG90eXBlLmFsbG9jPWZ1bmN0aW9uKHQsZSxyKXtpZih0PnRoaXMuZnJlZXx8ZT50aGlzLmgpcmV0dXJuIG51bGw7dmFyIG49dGhpcy54O3JldHVybiB0aGlzLngrPXQsdGhpcy5mcmVlLT10LG5ldyBmdW5jdGlvbih0LGUscixuLGksYSxvKXt0aGlzLmlkPXQsdGhpcy54PWUsdGhpcy55PXIsdGhpcy53PW4sdGhpcy5oPWksdGhpcy5tYXh3PWF8fG4sdGhpcy5tYXhoPW98fGksdGhpcy5yZWZjb3VudD0wfShyLG4sdGhpcy55LHQsZSx0LHRoaXMuaCl9LGUucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mcmVlKz10LXRoaXMudyx0aGlzLnc9dCwhMH0sdH0oKX0pLFFhPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5waXhlbFJhdGlvO3RoaXMucGFkZGVkUmVjdD10LHRoaXMucGl4ZWxSYXRpbz1yfSx0bz17dGw6e2NvbmZpZ3VyYWJsZTohMH0sYnI6e2NvbmZpZ3VyYWJsZTohMH0sZGlzcGxheVNpemU6e2NvbmZpZ3VyYWJsZTohMH19O3RvLnRsLmdldD1mdW5jdGlvbigpe3JldHVyblt0aGlzLnBhZGRlZFJlY3QueCsxLHRoaXMucGFkZGVkUmVjdC55KzFdfSx0by5ici5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5wYWRkZWRSZWN0LngrdGhpcy5wYWRkZWRSZWN0LnctMSx0aGlzLnBhZGRlZFJlY3QueSt0aGlzLnBhZGRlZFJlY3QuaC0xXX0sdG8uZGlzcGxheVNpemUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuWyh0aGlzLnBhZGRlZFJlY3Qudy0yKS90aGlzLnBpeGVsUmF0aW8sKHRoaXMucGFkZGVkUmVjdC5oLTIpL3RoaXMucGl4ZWxSYXRpb119LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFFhLnByb3RvdHlwZSx0byk7dmFyIGVvPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB1aSh7d2lkdGg6MCxoZWlnaHQ6MH0pLHI9e30sbj1uZXcgS2EoMCwwLHthdXRvUmVzaXplOiEwfSk7Zm9yKHZhciBpIGluIHQpe3ZhciBhPXRbaV0sbz1uLnBhY2tPbmUoYS5kYXRhLndpZHRoKzIsYS5kYXRhLmhlaWdodCsyKTtlLnJlc2l6ZSh7d2lkdGg6bi53LGhlaWdodDpuLmh9KSx1aS5jb3B5KGEuZGF0YSxlLHt4OjAseTowfSx7eDpvLngrMSx5Om8ueSsxfSxhLmRhdGEpLHJbaV09bmV3IFFhKG8sYSl9bi5zaHJpbmsoKSxlLnJlc2l6ZSh7d2lkdGg6bi53LGhlaWdodDpuLmh9KSx0aGlzLmltYWdlPWUsdGhpcy5wb3NpdGlvbnM9cn07cHIoXCJJbWFnZVBvc2l0aW9uXCIsUWEpLHByKFwiSW1hZ2VBdGxhc1wiLGVvKTt2YXIgcm89ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxvLHM9OCppLW4tMSxsPSgxPDxzKS0xLGM9bD4+MSx1PS03LGg9cj9pLTE6MCxmPXI/LTE6MSxwPXRbZStoXTtmb3IoaCs9ZixhPXAmKDE8PC11KS0xLHA+Pj0tdSx1Kz1zO3U+MDthPTI1NiphK3RbZStoXSxoKz1mLHUtPTgpO2ZvcihvPWEmKDE8PC11KS0xLGE+Pj0tdSx1Kz1uO3U+MDtvPTI1NipvK3RbZStoXSxoKz1mLHUtPTgpO2lmKDA9PT1hKWE9MS1jO2Vsc2V7aWYoYT09PWwpcmV0dXJuIG8/TmFOOjEvMCoocD8tMToxKTtvKz1NYXRoLnBvdygyLG4pLGEtPWN9cmV0dXJuKHA/LTE6MSkqbypNYXRoLnBvdygyLGEtbil9LG5vPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbyxzLGwsYz04KmEtaS0xLHU9KDE8PGMpLTEsaD11Pj4xLGY9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxwPW4/MDphLTEsZD1uPzE6LTEsZz1lPDB8fDA9PT1lJiYxL2U8MD8xOjA7Zm9yKGU9TWF0aC5hYnMoZSksaXNOYU4oZSl8fGU9PT0xLzA/KHM9aXNOYU4oZSk/MTowLG89dSk6KG89TWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMiksZSoobD1NYXRoLnBvdygyLC1vKSk8MSYmKG8tLSxsKj0yKSwoZSs9bytoPj0xP2YvbDpmKk1hdGgucG93KDIsMS1oKSkqbD49MiYmKG8rKyxsLz0yKSxvK2g+PXU/KHM9MCxvPXUpOm8raD49MT8ocz0oZSpsLTEpKk1hdGgucG93KDIsaSksbys9aCk6KHM9ZSpNYXRoLnBvdygyLGgtMSkqTWF0aC5wb3coMixpKSxvPTApKTtpPj04O3RbcitwXT0yNTUmcyxwKz1kLHMvPTI1NixpLT04KTtmb3Iobz1vPDxpfHMsYys9aTtjPjA7dFtyK3BdPTI1NSZvLHArPWQsby89MjU2LGMtPTgpO3RbcitwLWRdfD0xMjgqZ30saW89YW87ZnVuY3Rpb24gYW8odCl7dGhpcy5idWY9QXJyYXlCdWZmZXIuaXNWaWV3JiZBcnJheUJ1ZmZlci5pc1ZpZXcodCk/dDpuZXcgVWludDhBcnJheSh0fHwwKSx0aGlzLnBvcz0wLHRoaXMudHlwZT0wLHRoaXMubGVuZ3RoPXRoaXMuYnVmLmxlbmd0aH1mdW5jdGlvbiBvbyh0KXtyZXR1cm4gdC50eXBlPT09YW8uQnl0ZXM/dC5yZWFkVmFyaW50KCkrdC5wb3M6dC5wb3MrMX1mdW5jdGlvbiBzbyh0LGUscil7cmV0dXJuIHI/NDI5NDk2NzI5NiplKyh0Pj4+MCk6NDI5NDk2NzI5NiooZT4+PjApKyh0Pj4+MCl9ZnVuY3Rpb24gbG8odCxlLHIpe3ZhciBuPWU8PTE2MzgzPzE6ZTw9MjA5NzE1MT8yOmU8PTI2ODQzNTQ1NT8zOk1hdGguY2VpbChNYXRoLmxvZyhlKS8oNypNYXRoLkxOMikpO3IucmVhbGxvYyhuKTtmb3IodmFyIGk9ci5wb3MtMTtpPj10O2ktLSlyLmJ1ZltpK25dPXIuYnVmW2ldfWZ1bmN0aW9uIGNvKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZVZhcmludCh0W3JdKX1mdW5jdGlvbiB1byh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVTVmFyaW50KHRbcl0pfWZ1bmN0aW9uIGhvKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZUZsb2F0KHRbcl0pfWZ1bmN0aW9uIGZvKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZURvdWJsZSh0W3JdKX1mdW5jdGlvbiBwbyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVCb29sZWFuKHRbcl0pfWZ1bmN0aW9uIGdvKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZUZpeGVkMzIodFtyXSl9ZnVuY3Rpb24gdm8odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlU0ZpeGVkMzIodFtyXSl9ZnVuY3Rpb24gbW8odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlRml4ZWQ2NCh0W3JdKX1mdW5jdGlvbiB5byh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVTRml4ZWQ2NCh0W3JdKX1mdW5jdGlvbiB4byh0LGUpe3JldHVybih0W2VdfHRbZSsxXTw8OHx0W2UrMl08PDE2KSsxNjc3NzIxNip0W2UrM119ZnVuY3Rpb24gYm8odCxlLHIpe3Rbcl09ZSx0W3IrMV09ZT4+PjgsdFtyKzJdPWU+Pj4xNix0W3IrM109ZT4+PjI0fWZ1bmN0aW9uIF9vKHQsZSl7cmV0dXJuKHRbZV18dFtlKzFdPDw4fHRbZSsyXTw8MTYpKyh0W2UrM108PDI0KX1hby5WYXJpbnQ9MCxhby5GaXhlZDY0PTEsYW8uQnl0ZXM9Mixhby5GaXhlZDMyPTUsYW8ucHJvdG90eXBlPXtkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5idWY9bnVsbH0scmVhZEZpZWxkczpmdW5jdGlvbih0LGUscil7Zm9yKHI9cnx8dGhpcy5sZW5ndGg7dGhpcy5wb3M8cjspe3ZhciBuPXRoaXMucmVhZFZhcmludCgpLGk9bj4+MyxhPXRoaXMucG9zO3RoaXMudHlwZT03Jm4sdChpLGUsdGhpcyksdGhpcy5wb3M9PT1hJiZ0aGlzLnNraXAobil9cmV0dXJuIGV9LHJlYWRNZXNzYWdlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucmVhZEZpZWxkcyh0LGUsdGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3MpfSxyZWFkRml4ZWQzMjpmdW5jdGlvbigpe3ZhciB0PXhvKHRoaXMuYnVmLHRoaXMucG9zKTtyZXR1cm4gdGhpcy5wb3MrPTQsdH0scmVhZFNGaXhlZDMyOmZ1bmN0aW9uKCl7dmFyIHQ9X28odGhpcy5idWYsdGhpcy5wb3MpO3JldHVybiB0aGlzLnBvcys9NCx0fSxyZWFkRml4ZWQ2NDpmdW5jdGlvbigpe3ZhciB0PXhvKHRoaXMuYnVmLHRoaXMucG9zKSs0Mjk0OTY3Mjk2KnhvKHRoaXMuYnVmLHRoaXMucG9zKzQpO3JldHVybiB0aGlzLnBvcys9OCx0fSxyZWFkU0ZpeGVkNjQ6ZnVuY3Rpb24oKXt2YXIgdD14byh0aGlzLmJ1Zix0aGlzLnBvcykrNDI5NDk2NzI5Nipfbyh0aGlzLmJ1Zix0aGlzLnBvcys0KTtyZXR1cm4gdGhpcy5wb3MrPTgsdH0scmVhZEZsb2F0OmZ1bmN0aW9uKCl7dmFyIHQ9cm8odGhpcy5idWYsdGhpcy5wb3MsITAsMjMsNCk7cmV0dXJuIHRoaXMucG9zKz00LHR9LHJlYWREb3VibGU6ZnVuY3Rpb24oKXt2YXIgdD1ybyh0aGlzLmJ1Zix0aGlzLnBvcywhMCw1Miw4KTtyZXR1cm4gdGhpcy5wb3MrPTgsdH0scmVhZFZhcmludDpmdW5jdGlvbih0KXt2YXIgZSxyLG49dGhpcy5idWY7cmV0dXJuIGU9MTI3JihyPW5bdGhpcy5wb3MrK10pLHI8MTI4P2U6KGV8PSgxMjcmKHI9blt0aGlzLnBvcysrXSkpPDw3LHI8MTI4P2U6KGV8PSgxMjcmKHI9blt0aGlzLnBvcysrXSkpPDwxNCxyPDEyOD9lOihlfD0oMTI3JihyPW5bdGhpcy5wb3MrK10pKTw8MjEscjwxMjg/ZTpmdW5jdGlvbih0LGUscil7dmFyIG4saSxhPXIuYnVmO2lmKG49KDExMiYoaT1hW3IucG9zKytdKSk+PjQsaTwxMjgpcmV0dXJuIHNvKHQsbixlKTtpZihufD0oMTI3JihpPWFbci5wb3MrK10pKTw8MyxpPDEyOClyZXR1cm4gc28odCxuLGUpO2lmKG58PSgxMjcmKGk9YVtyLnBvcysrXSkpPDwxMCxpPDEyOClyZXR1cm4gc28odCxuLGUpO2lmKG58PSgxMjcmKGk9YVtyLnBvcysrXSkpPDwxNyxpPDEyOClyZXR1cm4gc28odCxuLGUpO2lmKG58PSgxMjcmKGk9YVtyLnBvcysrXSkpPDwyNCxpPDEyOClyZXR1cm4gc28odCxuLGUpO2lmKG58PSgxJihpPWFbci5wb3MrK10pKTw8MzEsaTwxMjgpcmV0dXJuIHNvKHQsbixlKTt0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCB2YXJpbnQgbm90IG1vcmUgdGhhbiAxMCBieXRlc1wiKX0oZXw9KDE1JihyPW5bdGhpcy5wb3NdKSk8PDI4LHQsdGhpcykpKSl9LHJlYWRWYXJpbnQ2NDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRWYXJpbnQoITApfSxyZWFkU1ZhcmludDpmdW5jdGlvbigpe3ZhciB0PXRoaXMucmVhZFZhcmludCgpO3JldHVybiB0JTI9PTE/KHQrMSkvLTI6dC8yfSxyZWFkQm9vbGVhbjpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKHRoaXMucmVhZFZhcmludCgpKX0scmVhZFN0cmluZzpmdW5jdGlvbigpe3ZhciB0PXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zLGU9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1cIlwiLGk9ZTtpPHI7KXt2YXIgYSxvLHMsbD10W2ldLGM9bnVsbCx1PWw+MjM5PzQ6bD4yMjM/MzpsPjE5MT8yOjE7aWYoaSt1PnIpYnJlYWs7MT09PXU/bDwxMjgmJihjPWwpOjI9PT11PzEyOD09KDE5MiYoYT10W2krMV0pKSYmKGM9KDMxJmwpPDw2fDYzJmEpPD0xMjcmJihjPW51bGwpOjM9PT11PyhhPXRbaSsxXSxvPXRbaSsyXSwxMjg9PSgxOTImYSkmJjEyOD09KDE5MiZvKSYmKChjPSgxNSZsKTw8MTJ8KDYzJmEpPDw2fDYzJm8pPD0yMDQ3fHxjPj01NTI5NiYmYzw9NTczNDMpJiYoYz1udWxsKSk6ND09PXUmJihhPXRbaSsxXSxvPXRbaSsyXSxzPXRbaSszXSwxMjg9PSgxOTImYSkmJjEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYoKGM9KDE1JmwpPDwxOHwoNjMmYSk8PDEyfCg2MyZvKTw8Nnw2MyZzKTw9NjU1MzV8fGM+PTExMTQxMTIpJiYoYz1udWxsKSksbnVsbD09PWM/KGM9NjU1MzMsdT0xKTpjPjY1NTM1JiYoYy09NjU1MzYsbis9U3RyaW5nLmZyb21DaGFyQ29kZShjPj4+MTAmMTAyM3w1NTI5NiksYz01NjMyMHwxMDIzJmMpLG4rPVN0cmluZy5mcm9tQ2hhckNvZGUoYyksaSs9dX1yZXR1cm4gbn0odGhpcy5idWYsdGhpcy5wb3MsdCk7cmV0dXJuIHRoaXMucG9zPXQsZX0scmVhZEJ5dGVzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3MsZT10aGlzLmJ1Zi5zdWJhcnJheSh0aGlzLnBvcyx0KTtyZXR1cm4gdGhpcy5wb3M9dCxlfSxyZWFkUGFja2VkVmFyaW50OmZ1bmN0aW9uKHQsZSl7dmFyIHI9b28odGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8cjspdC5wdXNoKHRoaXMucmVhZFZhcmludChlKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRTVmFyaW50OmZ1bmN0aW9uKHQpe3ZhciBlPW9vKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRTVmFyaW50KCkpO3JldHVybiB0fSxyZWFkUGFja2VkQm9vbGVhbjpmdW5jdGlvbih0KXt2YXIgZT1vbyh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkQm9vbGVhbigpKTtyZXR1cm4gdH0scmVhZFBhY2tlZEZsb2F0OmZ1bmN0aW9uKHQpe3ZhciBlPW9vKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRGbG9hdCgpKTtyZXR1cm4gdH0scmVhZFBhY2tlZERvdWJsZTpmdW5jdGlvbih0KXt2YXIgZT1vbyh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkRG91YmxlKCkpO3JldHVybiB0fSxyZWFkUGFja2VkRml4ZWQzMjpmdW5jdGlvbih0KXt2YXIgZT1vbyh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkRml4ZWQzMigpKTtyZXR1cm4gdH0scmVhZFBhY2tlZFNGaXhlZDMyOmZ1bmN0aW9uKHQpe3ZhciBlPW9vKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRTRml4ZWQzMigpKTtyZXR1cm4gdH0scmVhZFBhY2tlZEZpeGVkNjQ6ZnVuY3Rpb24odCl7dmFyIGU9b28odGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEZpeGVkNjQoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRTRml4ZWQ2NDpmdW5jdGlvbih0KXt2YXIgZT1vbyh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkU0ZpeGVkNjQoKSk7cmV0dXJuIHR9LHNraXA6ZnVuY3Rpb24odCl7dmFyIGU9NyZ0O2lmKGU9PT1hby5WYXJpbnQpZm9yKDt0aGlzLmJ1Zlt0aGlzLnBvcysrXT4xMjc7KTtlbHNlIGlmKGU9PT1hby5CeXRlcyl0aGlzLnBvcz10aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcztlbHNlIGlmKGU9PT1hby5GaXhlZDMyKXRoaXMucG9zKz00O2Vsc2V7aWYoZSE9PWFvLkZpeGVkNjQpdGhyb3cgbmV3IEVycm9yKFwiVW5pbXBsZW1lbnRlZCB0eXBlOiBcIitlKTt0aGlzLnBvcys9OH19LHdyaXRlVGFnOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVZhcmludCh0PDwzfGUpfSxyZWFsbG9jOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmxlbmd0aHx8MTY7ZTx0aGlzLnBvcyt0OyllKj0yO2lmKGUhPT10aGlzLmxlbmd0aCl7dmFyIHI9bmV3IFVpbnQ4QXJyYXkoZSk7ci5zZXQodGhpcy5idWYpLHRoaXMuYnVmPXIsdGhpcy5sZW5ndGg9ZX19LGZpbmlzaDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aD10aGlzLnBvcyx0aGlzLnBvcz0wLHRoaXMuYnVmLnN1YmFycmF5KDAsdGhpcy5sZW5ndGgpfSx3cml0ZUZpeGVkMzI6ZnVuY3Rpb24odCl7dGhpcy5yZWFsbG9jKDQpLGJvKHRoaXMuYnVmLHQsdGhpcy5wb3MpLHRoaXMucG9zKz00fSx3cml0ZVNGaXhlZDMyOmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg0KSxibyh0aGlzLmJ1Zix0LHRoaXMucG9zKSx0aGlzLnBvcys9NH0sd3JpdGVGaXhlZDY0OmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg4KSxibyh0aGlzLmJ1ZiwtMSZ0LHRoaXMucG9zKSxibyh0aGlzLmJ1ZixNYXRoLmZsb29yKHQqKDEvNDI5NDk2NzI5NikpLHRoaXMucG9zKzQpLHRoaXMucG9zKz04fSx3cml0ZVNGaXhlZDY0OmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg4KSxibyh0aGlzLmJ1ZiwtMSZ0LHRoaXMucG9zKSxibyh0aGlzLmJ1ZixNYXRoLmZsb29yKHQqKDEvNDI5NDk2NzI5NikpLHRoaXMucG9zKzQpLHRoaXMucG9zKz04fSx3cml0ZVZhcmludDpmdW5jdGlvbih0KXsodD0rdHx8MCk+MjY4NDM1NDU1fHx0PDA/ZnVuY3Rpb24odCxlKXt2YXIgcixuO2lmKHQ+PTA/KHI9dCU0Mjk0OTY3Mjk2fDAsbj10LzQyOTQ5NjcyOTZ8MCk6KG49figtdC80Mjk0OTY3Mjk2KSw0Mjk0OTY3Mjk1XihyPX4oLXQlNDI5NDk2NzI5NikpP3I9cisxfDA6KHI9MCxuPW4rMXwwKSksdD49MHgxMDAwMDAwMDAwMDAwMDAwMHx8dDwtMHgxMDAwMDAwMDAwMDAwMDAwMCl0aHJvdyBuZXcgRXJyb3IoXCJHaXZlbiB2YXJpbnQgZG9lc24ndCBmaXQgaW50byAxMCBieXRlc1wiKTtlLnJlYWxsb2MoMTApLGZ1bmN0aW9uKHQsZSxyKXtyLmJ1ZltyLnBvcysrXT0xMjcmdHwxMjgsdD4+Pj03LHIuYnVmW3IucG9zKytdPTEyNyZ0fDEyOCx0Pj4+PTcsci5idWZbci5wb3MrK109MTI3JnR8MTI4LHQ+Pj49NyxyLmJ1ZltyLnBvcysrXT0xMjcmdHwxMjgsdD4+Pj03LHIuYnVmW3IucG9zXT0xMjcmdH0ociwwLGUpLGZ1bmN0aW9uKHQsZSl7dmFyIHI9KDcmdCk8PDQ7ZS5idWZbZS5wb3MrK118PXJ8KCh0Pj4+PTMpPzEyODowKSx0JiYoZS5idWZbZS5wb3MrK109MTI3JnR8KCh0Pj4+PTcpPzEyODowKSx0JiYoZS5idWZbZS5wb3MrK109MTI3JnR8KCh0Pj4+PTcpPzEyODowKSx0JiYoZS5idWZbZS5wb3MrK109MTI3JnR8KCh0Pj4+PTcpPzEyODowKSx0JiYoZS5idWZbZS5wb3MrK109MTI3JnR8KCh0Pj4+PTcpPzEyODowKSx0JiYoZS5idWZbZS5wb3MrK109MTI3JnQpKSkpKX0obixlKX0odCx0aGlzKToodGhpcy5yZWFsbG9jKDQpLHRoaXMuYnVmW3RoaXMucG9zKytdPTEyNyZ0fCh0PjEyNz8xMjg6MCksdDw9MTI3fHwodGhpcy5idWZbdGhpcy5wb3MrK109MTI3Jih0Pj4+PTcpfCh0PjEyNz8xMjg6MCksdDw9MTI3fHwodGhpcy5idWZbdGhpcy5wb3MrK109MTI3Jih0Pj4+PTcpfCh0PjEyNz8xMjg6MCksdDw9MTI3fHwodGhpcy5idWZbdGhpcy5wb3MrK109dD4+PjcmMTI3KSkpKX0sd3JpdGVTVmFyaW50OmZ1bmN0aW9uKHQpe3RoaXMud3JpdGVWYXJpbnQodDwwPzIqLXQtMToyKnQpfSx3cml0ZUJvb2xlYW46ZnVuY3Rpb24odCl7dGhpcy53cml0ZVZhcmludChCb29sZWFuKHQpKX0sd3JpdGVTdHJpbmc6ZnVuY3Rpb24odCl7dD1TdHJpbmcodCksdGhpcy5yZWFsbG9jKDQqdC5sZW5ndGgpLHRoaXMucG9zKys7dmFyIGU9dGhpcy5wb3M7dGhpcy5wb3M9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpLGE9MDthPGUubGVuZ3RoO2ErKyl7aWYoKG49ZS5jaGFyQ29kZUF0KGEpKT41NTI5NSYmbjw1NzM0NCl7aWYoIWkpe24+NTYzMTl8fGErMT09PWUubGVuZ3RoPyh0W3IrK109MjM5LHRbcisrXT0xOTEsdFtyKytdPTE4OSk6aT1uO2NvbnRpbnVlfWlmKG48NTYzMjApe3RbcisrXT0yMzksdFtyKytdPTE5MSx0W3IrK109MTg5LGk9bjtjb250aW51ZX1uPWktNTUyOTY8PDEwfG4tNTYzMjB8NjU1MzYsaT1udWxsfWVsc2UgaSYmKHRbcisrXT0yMzksdFtyKytdPTE5MSx0W3IrK109MTg5LGk9bnVsbCk7bjwxMjg/dFtyKytdPW46KG48MjA0OD90W3IrK109bj4+NnwxOTI6KG48NjU1MzY/dFtyKytdPW4+PjEyfDIyNDoodFtyKytdPW4+PjE4fDI0MCx0W3IrK109bj4+MTImNjN8MTI4KSx0W3IrK109bj4+NiY2M3wxMjgpLHRbcisrXT02MyZufDEyOCl9cmV0dXJuIHJ9KHRoaXMuYnVmLHQsdGhpcy5wb3MpO3ZhciByPXRoaXMucG9zLWU7cj49MTI4JiZsbyhlLHIsdGhpcyksdGhpcy5wb3M9ZS0xLHRoaXMud3JpdGVWYXJpbnQociksdGhpcy5wb3MrPXJ9LHdyaXRlRmxvYXQ6ZnVuY3Rpb24odCl7dGhpcy5yZWFsbG9jKDQpLG5vKHRoaXMuYnVmLHQsdGhpcy5wb3MsITAsMjMsNCksdGhpcy5wb3MrPTR9LHdyaXRlRG91YmxlOmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg4KSxubyh0aGlzLmJ1Zix0LHRoaXMucG9zLCEwLDUyLDgpLHRoaXMucG9zKz04fSx3cml0ZUJ5dGVzOmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3RoaXMud3JpdGVWYXJpbnQoZSksdGhpcy5yZWFsbG9jKGUpO2Zvcih2YXIgcj0wO3I8ZTtyKyspdGhpcy5idWZbdGhpcy5wb3MrK109dFtyXX0sd3JpdGVSYXdNZXNzYWdlOmZ1bmN0aW9uKHQsZSl7dGhpcy5wb3MrKzt2YXIgcj10aGlzLnBvczt0KGUsdGhpcyk7dmFyIG49dGhpcy5wb3MtcjtuPj0xMjgmJmxvKHIsbix0aGlzKSx0aGlzLnBvcz1yLTEsdGhpcy53cml0ZVZhcmludChuKSx0aGlzLnBvcys9bn0sd3JpdGVNZXNzYWdlOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLndyaXRlVGFnKHQsYW8uQnl0ZXMpLHRoaXMud3JpdGVSYXdNZXNzYWdlKGUscil9LHdyaXRlUGFja2VkVmFyaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCxjbyxlKX0sd3JpdGVQYWNrZWRTVmFyaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCx1byxlKX0sd3JpdGVQYWNrZWRCb29sZWFuOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCxwbyxlKX0sd3JpdGVQYWNrZWRGbG9hdDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQsaG8sZSl9LHdyaXRlUGFja2VkRG91YmxlOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCxmbyxlKX0sd3JpdGVQYWNrZWRGaXhlZDMyOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCxnbyxlKX0sd3JpdGVQYWNrZWRTRml4ZWQzMjpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQsdm8sZSl9LHdyaXRlUGFja2VkRml4ZWQ2NDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQsbW8sZSl9LHdyaXRlUGFja2VkU0ZpeGVkNjQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlTWVzc2FnZSh0LHlvLGUpfSx3cml0ZUJ5dGVzRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsYW8uQnl0ZXMpLHRoaXMud3JpdGVCeXRlcyhlKX0sd3JpdGVGaXhlZDMyRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsYW8uRml4ZWQzMiksdGhpcy53cml0ZUZpeGVkMzIoZSl9LHdyaXRlU0ZpeGVkMzJGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxhby5GaXhlZDMyKSx0aGlzLndyaXRlU0ZpeGVkMzIoZSl9LHdyaXRlRml4ZWQ2NEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LGFvLkZpeGVkNjQpLHRoaXMud3JpdGVGaXhlZDY0KGUpfSx3cml0ZVNGaXhlZDY0RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsYW8uRml4ZWQ2NCksdGhpcy53cml0ZVNGaXhlZDY0KGUpfSx3cml0ZVZhcmludEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LGFvLlZhcmludCksdGhpcy53cml0ZVZhcmludChlKX0sd3JpdGVTVmFyaW50RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsYW8uVmFyaW50KSx0aGlzLndyaXRlU1ZhcmludChlKX0sd3JpdGVTdHJpbmdGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxhby5CeXRlcyksdGhpcy53cml0ZVN0cmluZyhlKX0sd3JpdGVGbG9hdEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LGFvLkZpeGVkMzIpLHRoaXMud3JpdGVGbG9hdChlKX0sd3JpdGVEb3VibGVGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxhby5GaXhlZDY0KSx0aGlzLndyaXRlRG91YmxlKGUpfSx3cml0ZUJvb2xlYW5GaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVWYXJpbnRGaWVsZCh0LEJvb2xlYW4oZSkpfX07dmFyIHdvPTM7ZnVuY3Rpb24ga28odCxlLHIpezE9PT10JiZyLnJlYWRNZXNzYWdlKEFvLGUpfWZ1bmN0aW9uIEFvKHQsZSxyKXtpZigzPT09dCl7dmFyIG49ci5yZWFkTWVzc2FnZShUbyx7fSksaT1uLmlkLGE9bi5iaXRtYXAsbz1uLndpZHRoLHM9bi5oZWlnaHQsbD1uLmxlZnQsYz1uLnRvcCx1PW4uYWR2YW5jZTtlLnB1c2goe2lkOmksYml0bWFwOm5ldyBjaSh7d2lkdGg6bysyKndvLGhlaWdodDpzKzIqd299LGEpLG1ldHJpY3M6e3dpZHRoOm8saGVpZ2h0OnMsbGVmdDpsLHRvcDpjLGFkdmFuY2U6dX19KX19ZnVuY3Rpb24gVG8odCxlLHIpezE9PT10P2UuaWQ9ci5yZWFkVmFyaW50KCk6Mj09PXQ/ZS5iaXRtYXA9ci5yZWFkQnl0ZXMoKTozPT09dD9lLndpZHRoPXIucmVhZFZhcmludCgpOjQ9PT10P2UuaGVpZ2h0PXIucmVhZFZhcmludCgpOjU9PT10P2UubGVmdD1yLnJlYWRTVmFyaW50KCk6Nj09PXQ/ZS50b3A9ci5yZWFkU1ZhcmludCgpOjc9PT10JiYoZS5hZHZhbmNlPXIucmVhZFZhcmludCgpKX12YXIgTW89d28sU289ZnVuY3Rpb24odCxlLHIpe3RoaXMudGFyZ2V0PXQsdGhpcy5wYXJlbnQ9ZSx0aGlzLm1hcElkPXIsdGhpcy5jYWxsYmFja3M9e30sdGhpcy5jYWxsYmFja0lEPTAsZyhbXCJyZWNlaXZlXCJdLHRoaXMpLHRoaXMudGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsdGhpcy5yZWNlaXZlLCExKX07U28ucHJvdG90eXBlLnNlbmQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9cj90aGlzLm1hcElkK1wiOlwiK3RoaXMuY2FsbGJhY2tJRCsrOm51bGw7ciYmKHRoaXMuY2FsbGJhY2tzW2ldPXIpO3ZhciBhPVtdO3RoaXMudGFyZ2V0LnBvc3RNZXNzYWdlKHt0YXJnZXRNYXBJZDpuLHNvdXJjZU1hcElkOnRoaXMubWFwSWQsdHlwZTp0LGlkOlN0cmluZyhpKSxkYXRhOmdyKGUsYSl9LGEpfSxTby5wcm90b3R5cGUucmVjZWl2ZT1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMsbj10LmRhdGEsaT1uLmlkO2lmKCFuLnRhcmdldE1hcElkfHx0aGlzLm1hcElkPT09bi50YXJnZXRNYXBJZCl7dmFyIGE9ZnVuY3Rpb24odCxlKXt2YXIgbj1bXTtyLnRhcmdldC5wb3N0TWVzc2FnZSh7c291cmNlTWFwSWQ6ci5tYXBJZCx0eXBlOlwiPHJlc3BvbnNlPlwiLGlkOlN0cmluZyhpKSxlcnJvcjp0P2dyKHQpOm51bGwsZGF0YTpncihlLG4pfSxuKX07aWYoXCI8cmVzcG9uc2U+XCI9PT1uLnR5cGUpZT10aGlzLmNhbGxiYWNrc1tuLmlkXSxkZWxldGUgdGhpcy5jYWxsYmFja3Nbbi5pZF0sZSYmbi5lcnJvcj9lKHZyKG4uZXJyb3IpKTplJiZlKG51bGwsdnIobi5kYXRhKSk7ZWxzZSBpZih2b2lkIDAhPT1uLmlkJiZ0aGlzLnBhcmVudFtuLnR5cGVdKXRoaXMucGFyZW50W24udHlwZV0obi5zb3VyY2VNYXBJZCx2cihuLmRhdGEpLGEpO2Vsc2UgaWYodm9pZCAwIT09bi5pZCYmdGhpcy5wYXJlbnQuZ2V0V29ya2VyU291cmNlKXt2YXIgbz1uLnR5cGUuc3BsaXQoXCIuXCIpO3RoaXMucGFyZW50LmdldFdvcmtlclNvdXJjZShuLnNvdXJjZU1hcElkLG9bMF0sb1sxXSlbb1syXV0odnIobi5kYXRhKSxhKX1lbHNlIHRoaXMucGFyZW50W24udHlwZV0odnIobi5kYXRhKSl9fSxTby5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy50YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIix0aGlzLnJlY2VpdmUsITEpfTt2YXIgRW89bihpKGZ1bmN0aW9uKHQsZSl7IWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlLG4pe3ZhciBpPXIoMjU2KnQsMjU2KihlPU1hdGgucG93KDIsbiktZS0xKSxuKSxhPXIoMjU2Kih0KzEpLDI1NiooZSsxKSxuKTtyZXR1cm4gaVswXStcIixcIitpWzFdK1wiLFwiK2FbMF0rXCIsXCIrYVsxXX1mdW5jdGlvbiByKHQsZSxyKXt2YXIgbj0yKk1hdGguUEkqNjM3ODEzNy8yNTYvTWF0aC5wb3coMixyKTtyZXR1cm5bdCpuLTIqTWF0aC5QSSo2Mzc4MTM3LzIsZSpuLTIqTWF0aC5QSSo2Mzc4MTM3LzJdfXQuZ2V0VVJMPWZ1bmN0aW9uKHQscixuLGksYSxvKXtyZXR1cm4gbz1vfHx7fSx0K1wiP1wiK1tcImJib3g9XCIrZShuLGksYSksXCJmb3JtYXQ9XCIrKG8uZm9ybWF0fHxcImltYWdlL3BuZ1wiKSxcInNlcnZpY2U9XCIrKG8uc2VydmljZXx8XCJXTVNcIiksXCJ2ZXJzaW9uPVwiKyhvLnZlcnNpb258fFwiMS4xLjFcIiksXCJyZXF1ZXN0PVwiKyhvLnJlcXVlc3R8fFwiR2V0TWFwXCIpLFwic3JzPVwiKyhvLnNyc3x8XCJFUFNHOjM4NTdcIiksXCJ3aWR0aD1cIisoby53aWR0aHx8MjU2KSxcImhlaWdodD1cIisoby5oZWlnaHR8fDI1NiksXCJsYXllcnM9XCIrcl0uam9pbihcIiZcIil9LHQuZ2V0VGlsZUJCb3g9ZSx0LmdldE1lcmNDb29yZHM9cixPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0oZSl9KSksQ289ZnVuY3Rpb24odCxlLHIpe3RoaXMuej10LHRoaXMueD1lLHRoaXMueT1yLHRoaXMua2V5PU9vKDAsdCxlLHIpfTtDby5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLno9PT10LnomJnRoaXMueD09PXQueCYmdGhpcy55PT09dC55fSxDby5wcm90b3R5cGUudXJsPWZ1bmN0aW9uKHQsZSl7dmFyIHI9RW8uZ2V0VGlsZUJCb3godGhpcy54LHRoaXMueSx0aGlzLnopLG49ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpPVwiXCIsYT10O2E+MDthLS0paSs9KGUmKG49MTw8YS0xKT8xOjApKyhyJm4/MjowKTtyZXR1cm4gaX0odGhpcy56LHRoaXMueCx0aGlzLnkpO3JldHVybiB0Wyh0aGlzLngrdGhpcy55KSV0Lmxlbmd0aF0ucmVwbGFjZShcIntwcmVmaXh9XCIsKHRoaXMueCUxNikudG9TdHJpbmcoMTYpKyh0aGlzLnklMTYpLnRvU3RyaW5nKDE2KSkucmVwbGFjZShcInt6fVwiLFN0cmluZyh0aGlzLnopKS5yZXBsYWNlKFwie3h9XCIsU3RyaW5nKHRoaXMueCkpLnJlcGxhY2UoXCJ7eX1cIixTdHJpbmcoXCJ0bXNcIj09PWU/TWF0aC5wb3coMix0aGlzLnopLXRoaXMueS0xOnRoaXMueSkpLnJlcGxhY2UoXCJ7cXVhZGtleX1cIixuKS5yZXBsYWNlKFwie2Jib3gtZXBzZy0zODU3fVwiLHIpfTt2YXIgTG89ZnVuY3Rpb24odCxlKXt0aGlzLndyYXA9dCx0aGlzLmNhbm9uaWNhbD1lLHRoaXMua2V5PU9vKHQsZS56LGUueCxlLnkpfSx6bz1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMub3ZlcnNjYWxlZFo9dCx0aGlzLndyYXA9ZSx0aGlzLmNhbm9uaWNhbD1uZXcgQ28ociwrbiwraSksdGhpcy5rZXk9T28oZSx0LG4saSl9O2Z1bmN0aW9uIE9vKHQsZSxyLG4peyh0Kj0yKTwwJiYodD0tMSp0LTEpO3ZhciBpPTE8PGU7cmV0dXJuIDMyKihpKmkqdCtpKm4rcikrZX16by5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm92ZXJzY2FsZWRaPT09dC5vdmVyc2NhbGVkWiYmdGhpcy53cmFwPT09dC53cmFwJiZ0aGlzLmNhbm9uaWNhbC5lcXVhbHModC5jYW5vbmljYWwpfSx6by5wcm90b3R5cGUuc2NhbGVkVG89ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jYW5vbmljYWwuei10O3JldHVybiB0PnRoaXMuY2Fub25pY2FsLno/bmV3IHpvKHQsdGhpcy53cmFwLHRoaXMuY2Fub25pY2FsLnosdGhpcy5jYW5vbmljYWwueCx0aGlzLmNhbm9uaWNhbC55KTpuZXcgem8odCx0aGlzLndyYXAsdCx0aGlzLmNhbm9uaWNhbC54Pj5lLHRoaXMuY2Fub25pY2FsLnk+PmUpfSx6by5wcm90b3R5cGUuaXNDaGlsZE9mPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY2Fub25pY2FsLnotdC5jYW5vbmljYWwuejtyZXR1cm4gMD09PXQub3ZlcnNjYWxlZFp8fHQub3ZlcnNjYWxlZFo8dGhpcy5vdmVyc2NhbGVkWiYmdC5jYW5vbmljYWwueD09PXRoaXMuY2Fub25pY2FsLng+PmUmJnQuY2Fub25pY2FsLnk9PT10aGlzLmNhbm9uaWNhbC55Pj5lfSx6by5wcm90b3R5cGUuY2hpbGRyZW49ZnVuY3Rpb24odCl7aWYodGhpcy5vdmVyc2NhbGVkWj49dClyZXR1cm5bbmV3IHpvKHRoaXMub3ZlcnNjYWxlZForMSx0aGlzLndyYXAsdGhpcy5jYW5vbmljYWwueix0aGlzLmNhbm9uaWNhbC54LHRoaXMuY2Fub25pY2FsLnkpXTt2YXIgZT10aGlzLmNhbm9uaWNhbC56KzEscj0yKnRoaXMuY2Fub25pY2FsLngsbj0yKnRoaXMuY2Fub25pY2FsLnk7cmV0dXJuW25ldyB6byhlLHRoaXMud3JhcCxlLHIsbiksbmV3IHpvKGUsdGhpcy53cmFwLGUscisxLG4pLG5ldyB6byhlLHRoaXMud3JhcCxlLHIsbisxKSxuZXcgem8oZSx0aGlzLndyYXAsZSxyKzEsbisxKV19LHpvLnByb3RvdHlwZS5pc0xlc3NUaGFuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLndyYXA8dC53cmFwfHwhKHRoaXMud3JhcD50LndyYXApJiYodGhpcy5vdmVyc2NhbGVkWjx0Lm92ZXJzY2FsZWRafHwhKHRoaXMub3ZlcnNjYWxlZFo+dC5vdmVyc2NhbGVkWikmJih0aGlzLmNhbm9uaWNhbC54PHQuY2Fub25pY2FsLnh8fCEodGhpcy5jYW5vbmljYWwueD50LmNhbm9uaWNhbC54KSYmdGhpcy5jYW5vbmljYWwueTx0LmNhbm9uaWNhbC55KSl9LHpvLnByb3RvdHlwZS53cmFwcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB6byh0aGlzLm92ZXJzY2FsZWRaLDAsdGhpcy5jYW5vbmljYWwueix0aGlzLmNhbm9uaWNhbC54LHRoaXMuY2Fub25pY2FsLnkpfSx6by5wcm90b3R5cGUudW53cmFwVG89ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB6byh0aGlzLm92ZXJzY2FsZWRaLHQsdGhpcy5jYW5vbmljYWwueix0aGlzLmNhbm9uaWNhbC54LHRoaXMuY2Fub25pY2FsLnkpfSx6by5wcm90b3R5cGUub3ZlcnNjYWxlRmFjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucG93KDIsdGhpcy5vdmVyc2NhbGVkWi10aGlzLmNhbm9uaWNhbC56KX0sem8ucHJvdG90eXBlLnRvVW53cmFwcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBMbyh0aGlzLndyYXAsdGhpcy5jYW5vbmljYWwpfSx6by5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vdmVyc2NhbGVkWitcIi9cIit0aGlzLmNhbm9uaWNhbC54K1wiL1wiK3RoaXMuY2Fub25pY2FsLnl9LHpvLnByb3RvdHlwZS50b0Nvb3JkaW5hdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHModGhpcy5jYW5vbmljYWwueCtNYXRoLnBvdygyLHRoaXMud3JhcCksdGhpcy5jYW5vbmljYWwueSx0aGlzLmNhbm9uaWNhbC56KX0scHIoXCJDYW5vbmljYWxUaWxlSURcIixDbykscHIoXCJPdmVyc2NhbGVkVGlsZUlEXCIsem8se29taXQ6W1wicG9zTWF0cml4XCJdfSk7dmFyIElvPWZ1bmN0aW9uKHQsZSxyKXtpZih0PD0wKXRocm93IG5ldyBSYW5nZUVycm9yKFwiTGV2ZWwgbXVzdCBoYXZlIHBvc2l0aXZlIGRpbWVuc2lvblwiKTt0aGlzLmRpbT10LHRoaXMuYm9yZGVyPWUsdGhpcy5zdHJpZGU9dGhpcy5kaW0rMip0aGlzLmJvcmRlcix0aGlzLmRhdGE9cnx8bmV3IEludDMyQXJyYXkoKHRoaXMuZGltKzIqdGhpcy5ib3JkZXIpKih0aGlzLmRpbSsyKnRoaXMuYm9yZGVyKSl9O0lvLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZGF0YVt0aGlzLl9pZHgodCxlKV09cis2NTUzNn0sSW8ucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmRhdGFbdGhpcy5faWR4KHQsZSldLTY1NTM2fSxJby5wcm90b3R5cGUuX2lkeD1mdW5jdGlvbih0LGUpe2lmKHQ8LXRoaXMuYm9yZGVyfHx0Pj10aGlzLmRpbSt0aGlzLmJvcmRlcnx8ZTwtdGhpcy5ib3JkZXJ8fGU+PXRoaXMuZGltK3RoaXMuYm9yZGVyKXRocm93IG5ldyBSYW5nZUVycm9yKFwib3V0IG9mIHJhbmdlIHNvdXJjZSBjb29yZGluYXRlcyBmb3IgREVNIGRhdGFcIik7cmV0dXJuKGUrdGhpcy5ib3JkZXIpKnRoaXMuc3RyaWRlKyh0K3RoaXMuYm9yZGVyKX0scHIoXCJMZXZlbFwiLElvKTt2YXIgRG89ZnVuY3Rpb24odCxlLHIpe3RoaXMudWlkPXQsdGhpcy5zY2FsZT1lfHwxLHRoaXMubGV2ZWw9cnx8bmV3IElvKDI1Niw1MTIpLHRoaXMubG9hZGVkPSEhcn07RG8ucHJvdG90eXBlLmxvYWRGcm9tSW1hZ2U9ZnVuY3Rpb24odCxlKXtpZih0LmhlaWdodCE9PXQud2lkdGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJERU0gdGlsZXMgbXVzdCBiZSBzcXVhcmVcIik7aWYoZSYmXCJtYXBib3hcIiE9PWUmJlwidGVycmFyaXVtXCIhPT1lKXJldHVybiBfKCdcIicrZSsnXCIgaXMgbm90IGEgdmFsaWQgZW5jb2RpbmcgdHlwZS4gVmFsaWQgdHlwZXMgaW5jbHVkZSBcIm1hcGJveFwiIGFuZCBcInRlcnJhcml1bVwiLicpO3ZhciByPXRoaXMubGV2ZWw9bmV3IElvKHQud2lkdGgsdC53aWR0aC8yKSxuPXQuZGF0YTt0aGlzLl91bnBhY2tEYXRhKHIsbixlfHxcIm1hcGJveFwiKTtmb3IodmFyIGk9MDtpPHIuZGltO2krKylyLnNldCgtMSxpLHIuZ2V0KDAsaSkpLHIuc2V0KHIuZGltLGksci5nZXQoci5kaW0tMSxpKSksci5zZXQoaSwtMSxyLmdldChpLDApKSxyLnNldChpLHIuZGltLHIuZ2V0KGksci5kaW0tMSkpO3Iuc2V0KC0xLC0xLHIuZ2V0KDAsMCkpLHIuc2V0KHIuZGltLC0xLHIuZ2V0KHIuZGltLTEsMCkpLHIuc2V0KC0xLHIuZGltLHIuZ2V0KDAsci5kaW0tMSkpLHIuc2V0KHIuZGltLHIuZGltLHIuZ2V0KHIuZGltLTEsci5kaW0tMSkpLHRoaXMubG9hZGVkPSEwfSxEby5wcm90b3R5cGUuX3VucGFja01hcGJveD1mdW5jdGlvbih0LGUscil7cmV0dXJuKDI1Nip0KjI1NisyNTYqZStyKS8xMC0xZTR9LERvLnByb3RvdHlwZS5fdW5wYWNrVGVycmFyaXVtPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMjU2KnQrZStyLzI1Ni0zMjc2OH0sRG8ucHJvdG90eXBlLl91bnBhY2tEYXRhPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49e21hcGJveDp0aGlzLl91bnBhY2tNYXBib3gsdGVycmFyaXVtOnRoaXMuX3VucGFja1RlcnJhcml1bX1bcl0saT0wO2k8dC5kaW07aSsrKWZvcih2YXIgYT0wO2E8dC5kaW07YSsrKXt2YXIgbz00KihpKnQuZGltK2EpO3Quc2V0KGEsaSx0aGlzLnNjYWxlKm4oZVtvXSxlW28rMV0sZVtvKzJdKSl9fSxEby5wcm90b3R5cGUuZ2V0UGl4ZWxzPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB1aSh7d2lkdGg6dGhpcy5sZXZlbC5kaW0rMip0aGlzLmxldmVsLmJvcmRlcixoZWlnaHQ6dGhpcy5sZXZlbC5kaW0rMip0aGlzLmxldmVsLmJvcmRlcn0sbmV3IFVpbnQ4QXJyYXkodGhpcy5sZXZlbC5kYXRhLmJ1ZmZlcikpfSxEby5wcm90b3R5cGUuYmFja2ZpbGxCb3JkZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGV2ZWwsaT10LmxldmVsO2lmKG4uZGltIT09aS5kaW0pdGhyb3cgbmV3IEVycm9yKFwibGV2ZWwgbWlzbWF0Y2ggKGRlbSBkaW1lbnNpb24pXCIpO3ZhciBhPWUqbi5kaW0sbz1lKm4uZGltK24uZGltLHM9cipuLmRpbSxsPXIqbi5kaW0rbi5kaW07c3dpdGNoKGUpe2Nhc2UtMTphPW8tMTticmVhaztjYXNlIDE6bz1hKzF9c3dpdGNoKHIpe2Nhc2UtMTpzPWwtMTticmVhaztjYXNlIDE6bD1zKzF9Zm9yKHZhciBjPWYoYSwtbi5ib3JkZXIsbi5kaW0rbi5ib3JkZXIpLHU9ZihvLC1uLmJvcmRlcixuLmRpbStuLmJvcmRlciksaD1mKHMsLW4uYm9yZGVyLG4uZGltK24uYm9yZGVyKSxwPWYobCwtbi5ib3JkZXIsbi5kaW0rbi5ib3JkZXIpLGQ9LWUqbi5kaW0sZz0tcipuLmRpbSx2PWg7djxwO3YrKylmb3IodmFyIG09YzttPHU7bSsrKW4uc2V0KG0sdixpLmdldChtK2QsditnKSl9LHByKFwiREVNRGF0YVwiLERvKTt2YXIgUG89ZnVuY3Rpb24odCl7dGhpcy5fc3RyaW5nVG9OdW1iZXI9e30sdGhpcy5fbnVtYmVyVG9TdHJpbmc9W107Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRbZV07dGhpcy5fc3RyaW5nVG9OdW1iZXJbcl09ZSx0aGlzLl9udW1iZXJUb1N0cmluZ1tlXT1yfX07UG8ucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fc3RyaW5nVG9OdW1iZXJbdF19LFBvLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX251bWJlclRvU3RyaW5nW3RdfTt2YXIgUm89ZnVuY3Rpb24odCxlLHIsbil7dGhpcy50eXBlPVwiRmVhdHVyZVwiLHRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlPXQsdC5fej1lLHQuX3g9cix0Ll95PW4sdGhpcy5wcm9wZXJ0aWVzPXQucHJvcGVydGllcyxudWxsIT10LmlkJiYodGhpcy5pZD10LmlkKX0sRm89e2dlb21ldHJ5Ontjb25maWd1cmFibGU6ITB9fTtGby5nZW9tZXRyeS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5fZ2VvbWV0cnkmJih0aGlzLl9nZW9tZXRyeT10aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS50b0dlb0pTT04odGhpcy5fdmVjdG9yVGlsZUZlYXR1cmUuX3gsdGhpcy5fdmVjdG9yVGlsZUZlYXR1cmUuX3ksdGhpcy5fdmVjdG9yVGlsZUZlYXR1cmUuX3opLmdlb21ldHJ5KSx0aGlzLl9nZW9tZXRyeX0sRm8uZ2VvbWV0cnkuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX2dlb21ldHJ5PXR9LFJvLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgdD17Z2VvbWV0cnk6dGhpcy5nZW9tZXRyeX07Zm9yKHZhciBlIGluIHRoaXMpXCJfZ2VvbWV0cnlcIiE9PWUmJlwiX3ZlY3RvclRpbGVGZWF0dXJlXCIhPT1lJiYodFtlXT10aGlzW2VdKTtyZXR1cm4gdH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUm8ucHJvdG90eXBlLEZvKTt2YXIgQm89ZnVuY3Rpb24odCxlLHIpe3RoaXMudGlsZUlEPXQsdGhpcy54PXQuY2Fub25pY2FsLngsdGhpcy55PXQuY2Fub25pY2FsLnksdGhpcy56PXQuY2Fub25pY2FsLnosdGhpcy5ncmlkPWV8fG5ldyBscihQbiwxNiwwKSx0aGlzLmZlYXR1cmVJbmRleEFycmF5PXJ8fG5ldyBBbn07ZnVuY3Rpb24gTm8odCxlKXtyZXR1cm4gZS10fUJvLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10aGlzLmZlYXR1cmVJbmRleEFycmF5Lmxlbmd0aDt0aGlzLmZlYXR1cmVJbmRleEFycmF5LmVtcGxhY2VCYWNrKHIsbixpKTtmb3IodmFyIG89MDtvPGUubGVuZ3RoO28rKyl7Zm9yKHZhciBzPWVbb10sbD1bMS8wLDEvMCwtMS8wLC0xLzBdLGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIHU9c1tjXTtsWzBdPU1hdGgubWluKGxbMF0sdS54KSxsWzFdPU1hdGgubWluKGxbMV0sdS55KSxsWzJdPU1hdGgubWF4KGxbMl0sdS54KSxsWzNdPU1hdGgubWF4KGxbM10sdS55KX1sWzBdPFBuJiZsWzFdPFBuJiZsWzJdPj0wJiZsWzNdPj0wJiZ0aGlzLmdyaWQuaW5zZXJ0KGEsbFswXSxsWzFdLGxbMl0sbFszXSl9fSxCby5wcm90b3R5cGUubG9hZFZUTGF5ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudnRMYXllcnN8fCh0aGlzLnZ0TGF5ZXJzPW5ldyBnYS5WZWN0b3JUaWxlKG5ldyBpbyh0aGlzLnJhd1RpbGVEYXRhKSkubGF5ZXJzLHRoaXMuc291cmNlTGF5ZXJDb2Rlcj1uZXcgUG8odGhpcy52dExheWVycz9PYmplY3Qua2V5cyh0aGlzLnZ0TGF5ZXJzKS5zb3J0KCk6W1wiX2dlb2pzb25UaWxlTGF5ZXJcIl0pKSx0aGlzLnZ0TGF5ZXJzfSxCby5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzO3RoaXMubG9hZFZUTGF5ZXJzKCk7Zm9yKHZhciBuPXQucGFyYW1zfHx7fSxpPVBuL3QudGlsZVNpemUvdC5zY2FsZSxhPVJlKG4uZmlsdGVyKSxvPXQucXVlcnlHZW9tZXRyeSxzPXQucXVlcnlQYWRkaW5nKmksbD0xLzAsYz0xLzAsdT0tMS8wLGg9LTEvMCxmPTA7ZjxvLmxlbmd0aDtmKyspZm9yKHZhciBwPW9bZl0sZD0wO2Q8cC5sZW5ndGg7ZCsrKXt2YXIgZz1wW2RdO2w9TWF0aC5taW4obCxnLngpLGM9TWF0aC5taW4oYyxnLnkpLHU9TWF0aC5tYXgodSxnLngpLGg9TWF0aC5tYXgoaCxnLnkpfXZhciB2PXRoaXMuZ3JpZC5xdWVyeShsLXMsYy1zLHUrcyxoK3MpO3Yuc29ydChObyk7Zm9yKHZhciBtLHk9e30seD1mdW5jdGlvbihzKXt2YXIgbD12W3NdO2lmKGwhPT1tKXttPWw7dmFyIGM9ci5mZWF0dXJlSW5kZXhBcnJheS5nZXQobCksdT1udWxsO3IubG9hZE1hdGNoaW5nRmVhdHVyZSh5LGMuYnVja2V0SW5kZXgsYy5zb3VyY2VMYXllckluZGV4LGMuZmVhdHVyZUluZGV4LGEsbi5sYXllcnMsZSxmdW5jdGlvbihlLG4pe3JldHVybiB1fHwodT1GbihlKSksbi5xdWVyeUludGVyc2VjdHNGZWF0dXJlKG8sZSx1LHIueix0LnRyYW5zZm9ybSxpLHQucG9zTWF0cml4KX0pfX0sYj0wO2I8di5sZW5ndGg7YisrKXgoYik7cmV0dXJuIHl9LEJvLnByb3RvdHlwZS5sb2FkTWF0Y2hpbmdGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9dGhpcy5idWNrZXRMYXllcklEc1tlXTtpZighYXx8ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZihlLmluZGV4T2YodFtyXSk+PTApcmV0dXJuITA7cmV0dXJuITF9KGEsbCkpe3ZhciBjPXRoaXMuc291cmNlTGF5ZXJDb2Rlci5kZWNvZGUociksdT10aGlzLnZ0TGF5ZXJzW2NdLmZlYXR1cmUobik7aWYoaShuZXcgTHIodGhpcy50aWxlSUQub3ZlcnNjYWxlZFopLHUpKWZvcih2YXIgaD0wO2g8bC5sZW5ndGg7aCsrKXt2YXIgZj1sW2hdO2lmKCEoYSYmYS5pbmRleE9mKGYpPDApKXt2YXIgcD1vW2ZdO2lmKHAmJighc3x8cyh1LHApKSl7dmFyIGQ9bmV3IFJvKHUsdGhpcy56LHRoaXMueCx0aGlzLnkpO2QubGF5ZXI9cC5zZXJpYWxpemUoKTt2YXIgZz10W2ZdO3ZvaWQgMD09PWcmJihnPXRbZl09W10pLGcucHVzaCh7ZmVhdHVyZUluZGV4Om4sZmVhdHVyZTpkfSl9fX19fSxCby5wcm90b3R5cGUubG9va3VwU3ltYm9sRmVhdHVyZXM9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPXt9O3RoaXMubG9hZFZUTGF5ZXJzKCk7Zm9yKHZhciBzPVJlKG4pLGw9MCxjPXQ7bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdO3RoaXMubG9hZE1hdGNoaW5nRmVhdHVyZShvLGUscix1LHMsaSxhKX1yZXR1cm4gb30sQm8ucHJvdG90eXBlLmhhc0xheWVyPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dGhpcy5idWNrZXRMYXllcklEcztlPHIubGVuZ3RoO2UrPTEpZm9yKHZhciBuPTAsaT1yW2VdO248aS5sZW5ndGg7bis9MSlpZih0PT09aVtuXSlyZXR1cm4hMDtyZXR1cm4hMX0scHIoXCJGZWF0dXJlSW5kZXhcIixCbyx7b21pdDpbXCJyYXdUaWxlRGF0YVwiLFwic291cmNlTGF5ZXJDb2RlclwiXX0pO3ZhciBqbz17aG9yaXpvbnRhbDoxLHZlcnRpY2FsOjIsaG9yaXpvbnRhbE9ubHk6M30sVm89ezk6ITAsMTA6ITAsMTE6ITAsMTI6ITAsMTM6ITAsMzI6ITB9LFVvPXt9O2Z1bmN0aW9uIHFvKHQsZSxyLG4pe3ZhciBpPU1hdGgucG93KHQtZSwyKTtyZXR1cm4gbj90PGU/aS8yOjIqaTppK01hdGguYWJzKHIpKnJ9ZnVuY3Rpb24gSG8odCxlKXt2YXIgcj0wO3JldHVybiAxMD09PXQmJihyLT0xZTQpLDQwIT09dCYmNjUyODghPT10fHwocis9NTApLDQxIT09ZSYmNjUyODkhPT1lfHwocis9NTApLHJ9ZnVuY3Rpb24gR28odCxlLHIsbixpLGEpe2Zvcih2YXIgbz1udWxsLHM9cW8oZSxyLGksYSksbD0wLGM9bjtsPGMubGVuZ3RoO2wrPTEpe3ZhciB1PWNbbF0saD1xbyhlLXUueCxyLGksYSkrdS5iYWRuZXNzO2g8PXMmJihvPXUscz1oKX1yZXR1cm57aW5kZXg6dCx4OmUscHJpb3JCcmVhazpvLGJhZG5lc3M6c319ZnVuY3Rpb24gWW8odCxlLHIsbil7aWYoIXIpcmV0dXJuW107aWYoIXQpcmV0dXJuW107Zm9yKHZhciBpLGE9W10sbz1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9MCxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBvPW5bdC5jaGFyQ29kZUF0KGEpXTtvJiYoaSs9by5tZXRyaWNzLmFkdmFuY2UrZSl9cmV0dXJuIGkvTWF0aC5tYXgoMSxNYXRoLmNlaWwoaS9yKSl9KHQsZSxyLG4pLHM9MCxsPTA7bDx0Lmxlbmd0aDtsKyspe3ZhciBjPXQuY2hhckNvZGVBdChsKSx1PW5bY107dSYmIVZvW2NdJiYocys9dS5tZXRyaWNzLmFkdmFuY2UrZSksbDx0Lmxlbmd0aC0xJiYoVW9bY118fCEoKGk9Yyk8MTE5MDQpJiYoeXJbXCJCb3BvbW9mbyBFeHRlbmRlZFwiXShpKXx8eXIuQm9wb21vZm8oaSl8fHlyW1wiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXNcIl0oaSl8fHlyW1wiQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBoc1wiXShpKXx8eXJbXCJDSksgQ29tcGF0aWJpbGl0eVwiXShpKXx8eXJbXCJDSksgUmFkaWNhbHMgU3VwcGxlbWVudFwiXShpKXx8eXJbXCJDSksgU3Ryb2tlc1wiXShpKXx8eXJbXCJDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb25cIl0oaSl8fHlyW1wiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQVwiXShpKXx8eXJbXCJDSksgVW5pZmllZCBJZGVvZ3JhcGhzXCJdKGkpfHx5cltcIkVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHNcIl0oaSl8fHlyW1wiSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXNcIl0oaSl8fHlyLkhpcmFnYW5hKGkpfHx5cltcIklkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnNcIl0oaSl8fHlyW1wiS2FuZ3hpIFJhZGljYWxzXCJdKGkpfHx5cltcIkthdGFrYW5hIFBob25ldGljIEV4dGVuc2lvbnNcIl0oaSl8fHlyLkthdGFrYW5hKGkpfHx5cltcIlZlcnRpY2FsIEZvcm1zXCJdKGkpfHx5cltcIllpIFJhZGljYWxzXCJdKGkpfHx5cltcIllpIFN5bGxhYmxlc1wiXShpKSkpJiZhLnB1c2goR28obCsxLHMsbyxhLEhvKGMsdC5jaGFyQ29kZUF0KGwrMSkpLCExKSl9cmV0dXJuIGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGU/dChlLnByaW9yQnJlYWspLmNvbmNhdChlLmluZGV4KTpbXX0oR28odC5sZW5ndGgscyxvLGEsMCwhMCkpfWZ1bmN0aW9uIFdvKHQpe3ZhciBlPS41LHI9LjU7c3dpdGNoKHQpe2Nhc2VcInJpZ2h0XCI6Y2FzZVwidG9wLXJpZ2h0XCI6Y2FzZVwiYm90dG9tLXJpZ2h0XCI6ZT0xO2JyZWFrO2Nhc2VcImxlZnRcIjpjYXNlXCJ0b3AtbGVmdFwiOmNhc2VcImJvdHRvbS1sZWZ0XCI6ZT0wfXN3aXRjaCh0KXtjYXNlXCJib3R0b21cIjpjYXNlXCJib3R0b20tcmlnaHRcIjpjYXNlXCJib3R0b20tbGVmdFwiOnI9MTticmVhaztjYXNlXCJ0b3BcIjpjYXNlXCJ0b3AtcmlnaHRcIjpjYXNlXCJ0b3AtbGVmdFwiOnI9MH1yZXR1cm57aG9yaXpvbnRhbEFsaWduOmUsdmVydGljYWxBbGlnbjpyfX1mdW5jdGlvbiBYbyh0LGUscixuLGkpe2lmKGkpe3ZhciBhPWVbdFtuXS5nbHlwaF07aWYoYSlmb3IodmFyIG89YS5tZXRyaWNzLmFkdmFuY2Uscz0odFtuXS54K28pKmksbD1yO2w8PW47bCsrKXRbbF0ueC09c319VW9bMTBdPSEwLFVvWzMyXT0hMCxVb1szOF09ITAsVW9bNDBdPSEwLFVvWzQxXT0hMCxVb1s0M109ITAsVW9bNDVdPSEwLFVvWzQ3XT0hMCxVb1sxNzNdPSEwLFVvWzE4M109ITAsVW9bODIwM109ITAsVW9bODIwOF09ITAsVW9bODIxMV09ITAsVW9bODIzMV09ITAsZS5jb21tb25qc0dsb2JhbD1yLGUudW53cmFwRXhwb3J0cz1uLGUuY3JlYXRlQ29tbW9uanNNb2R1bGU9aSxlLmRlZmF1bHQ9c2VsZixlLmRlZmF1bHQkMT1sLGUuZ2V0SlNPTj1mdW5jdGlvbih0LGUpe3ZhciByPU0odCk7cmV0dXJuIHIuc2V0UmVxdWVzdEhlYWRlcihcIkFjY2VwdFwiLFwiYXBwbGljYXRpb24vanNvblwiKSxyLm9uZXJyb3I9ZnVuY3Rpb24oKXtlKG5ldyBFcnJvcihyLnN0YXR1c1RleHQpKX0sci5vbmxvYWQ9ZnVuY3Rpb24oKXtpZihyLnN0YXR1cz49MjAwJiZyLnN0YXR1czwzMDAmJnIucmVzcG9uc2Upe3ZhciBuO3RyeXtuPUpTT04ucGFyc2Uoci5yZXNwb25zZSl9Y2F0Y2godCl7cmV0dXJuIGUodCl9ZShudWxsLG4pfWVsc2UgNDAxPT09ci5zdGF0dXMmJnQudXJsLm1hdGNoKC9tYXBib3guY29tLyk/ZShuZXcgVChyLnN0YXR1c1RleHQrXCI6IHlvdSBtYXkgaGF2ZSBwcm92aWRlZCBhbiBpbnZhbGlkIE1hcGJveCBhY2Nlc3MgdG9rZW4uIFNlZSBodHRwczovL3d3dy5tYXBib3guY29tL2FwaS1kb2N1bWVudGF0aW9uLyNhY2Nlc3MtdG9rZW5zXCIsci5zdGF0dXMsdC51cmwpKTplKG5ldyBUKHIuc3RhdHVzVGV4dCxyLnN0YXR1cyx0LnVybCkpfSxyLnNlbmQoKSxyfSxlLmdldEltYWdlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFModCxmdW5jdGlvbih0LHIpe2lmKHQpZSh0KTtlbHNlIGlmKHIpe3ZhciBuPW5ldyBzZWxmLkltYWdlLGk9c2VsZi5VUkx8fHNlbGYud2Via2l0VVJMO24ub25sb2FkPWZ1bmN0aW9uKCl7ZShudWxsLG4pLGkucmV2b2tlT2JqZWN0VVJMKG4uc3JjKX07dmFyIGE9bmV3IHNlbGYuQmxvYihbbmV3IFVpbnQ4QXJyYXkoci5kYXRhKV0se3R5cGU6XCJpbWFnZS9wbmdcIn0pO24uY2FjaGVDb250cm9sPXIuY2FjaGVDb250cm9sLG4uZXhwaXJlcz1yLmV4cGlyZXMsbi5zcmM9ci5kYXRhLmJ5dGVMZW5ndGg/aS5jcmVhdGVPYmplY3RVUkwoYSk6XCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUJDQVlBQUFBZkZjU0pBQUFBQzBsRVFWUVlWMk5nQUFJQUFBVUFBYXJWeUZFQUFBQUFTVVZPUks1Q1lJST1cIn19KX0sZS5SZXNvdXJjZVR5cGU9QSxlLlJHQkFJbWFnZT11aSxlLmRlZmF1bHQkMj1LYSxlLkltYWdlUG9zaXRpb249UWEsZS5nZXRBcnJheUJ1ZmZlcj1TLGUuZGVmYXVsdCQzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaW8odCkucmVhZEZpZWxkcyhrbyxbXSl9LGUuZGVmYXVsdCQ0PXlyLGUuYXN5bmNBbGw9ZnVuY3Rpb24odCxlLHIpe2lmKCF0Lmxlbmd0aClyZXR1cm4gcihudWxsLFtdKTt2YXIgbj10Lmxlbmd0aCxpPW5ldyBBcnJheSh0Lmxlbmd0aCksYT1udWxsO3QuZm9yRWFjaChmdW5jdGlvbih0LG8pe2UodCxmdW5jdGlvbih0LGUpe3QmJihhPXQpLGlbb109ZSwwPT0tLW4mJnIoYSxpKX0pfSl9LGUuQWxwaGFJbWFnZT1jaSxlLmRlZmF1bHQkNT1JLGUuZW5kc1dpdGg9dixlLmV4dGVuZD1wLGUuc3BoZXJpY2FsVG9DYXJ0ZXNpYW49ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdO3JldHVybiByKz05MCxyKj1NYXRoLlBJLzE4MCxuKj1NYXRoLlBJLzE4MCx7eDplKk1hdGguY29zKHIpKk1hdGguc2luKG4pLHk6ZSpNYXRoLnNpbihyKSpNYXRoLnNpbihuKSx6OmUqTWF0aC5jb3Mobil9fSxlLkV2ZW50ZWQ9TyxlLnZhbGlkYXRlU3R5bGU9bnIsZS52YWxpZGF0ZUxpZ2h0PWlyLGUuZW1pdFZhbGlkYXRpb25FcnJvcnM9c3IsZS5kZWZhdWx0JDY9dHQsZS5udW1iZXI9d3QsZS5Qcm9wZXJ0aWVzPXFyLGUuVHJhbnNpdGlvbmFibGU9SXIsZS5UcmFuc2l0aW9uaW5nPVByLGUuUG9zc2libHlFdmFsdWF0ZWQ9QnIsZS5EYXRhQ29uc3RhbnRQcm9wZXJ0eT1OcixlLndhcm5PbmNlPV8sZS51bmlxdWVJZD1mdW5jdGlvbigpe3JldHVybiBkKyt9LGUuZGVmYXVsdCQ3PVNvLGUucGljaz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl07aSBpbiB0JiYocltpXT10W2ldKX1yZXR1cm4gcn0sZS53cmFwPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yLWUsaT0oKHQtZSklbituKSVuK2U7cmV0dXJuIGk9PT1lP3I6aX0sZS5jbGFtcD1mLGUuRXZlbnQ9TCxlLkVycm9yRXZlbnQ9eixlLk92ZXJzY2FsZWRUaWxlSUQ9em8sZS5kZWZhdWx0JDg9UG4sZS5jcmVhdGVMYXlvdXQ9WHIsZS5nZXRDb29yZGluYXRlc0NlbnRlcj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MS8wLHI9MS8wLG49LTEvMCxpPS0xLzAsYT0wO2E8dC5sZW5ndGg7YSsrKWU9TWF0aC5taW4oZSx0W2FdLmNvbHVtbikscj1NYXRoLm1pbihyLHRbYV0ucm93KSxuPU1hdGgubWF4KG4sdFthXS5jb2x1bW4pLGk9TWF0aC5tYXgoaSx0W2FdLnJvdyk7dmFyIG89bi1lLGw9aS1yLGM9TWF0aC5tYXgobyxsKSx1PU1hdGgubWF4KDAsTWF0aC5mbG9vcigtTWF0aC5sb2coYykvTWF0aC5MTjIpKTtyZXR1cm4gbmV3IHMoKGUrbikvMiwocitpKS8yLDApLnpvb21Ubyh1KX0sZS5DYW5vbmljYWxUaWxlSUQ9Q28sZS5SYXN0ZXJCb3VuZHNBcnJheT1KcixlLmdldFZpZGVvPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXNlbGYuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInZpZGVvXCIpO2kub25sb2Fkc3RhcnQ9ZnVuY3Rpb24oKXtlKG51bGwsaSl9O2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzb3VyY2VcIik7cj10W2FdLG49dm9pZCAwLChuPXNlbGYuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIikpLmhyZWY9ciwobi5wcm90b2NvbCE9PXNlbGYuZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2x8fG4uaG9zdCE9PXNlbGYuZG9jdW1lbnQubG9jYXRpb24uaG9zdCkmJihpLmNyb3NzT3JpZ2luPVwiQW5vbnltb3VzXCIpLG8uc3JjPXRbYV0saS5hcHBlbmRDaGlsZChvKX1yZXR1cm4gaX0sZS5kZWZhdWx0JDk9RCxlLmJpbmRBbGw9ZyxlLmRlZmF1bHQkMTA9ZnVuY3Rpb24gdChlLHIpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2lmKCFBcnJheS5pc0FycmF5KHIpfHxlLmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKCF0KGVbbl0scltuXSkpcmV0dXJuITE7cmV0dXJuITB9aWYoXCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiZudWxsIT09cil7aWYoXCJvYmplY3RcIiE9dHlwZW9mIHIpcmV0dXJuITE7aWYoT2JqZWN0LmtleXMoZSkubGVuZ3RoIT09T2JqZWN0LmtleXMocikubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgaSBpbiBlKWlmKCF0KGVbaV0scltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIGU9PT1yfSxlLnBhcnNlQ2FjaGVDb250cm9sPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2lmKHQucmVwbGFjZSgvKD86XnwoPzpcXHMqXFwsXFxzKikpKFteXFx4MDAtXFx4MjBcXChcXCk8PkBcXCw7XFw6XFxcXFwiXFwvXFxbXFxdXFw/XFw9XFx7XFx9XFx4N0ZdKykoPzpcXD0oPzooW15cXHgwMC1cXHgyMFxcKFxcKTw+QFxcLDtcXDpcXFxcXCJcXC9cXFtcXF1cXD9cXD1cXHtcXH1cXHg3Rl0rKXwoPzpcXFwiKCg/OlteXCJcXFxcXXxcXFxcLikqKVxcXCIpKSk/L2csZnVuY3Rpb24odCxyLG4saSl7dmFyIGE9bnx8aTtyZXR1cm4gZVtyXT0hYXx8YS50b0xvd2VyQ2FzZSgpLFwiXCJ9KSxlW1wibWF4LWFnZVwiXSl7dmFyIHI9cGFyc2VJbnQoZVtcIm1heC1hZ2VcIl0sMTApO2lzTmFOKHIpP2RlbGV0ZSBlW1wibWF4LWFnZVwiXTplW1wibWF4LWFnZVwiXT1yfXJldHVybiBlfSxlLmRlZmF1bHQkMTE9Qm8sZS5kZWZhdWx0JDEyPVJvLGUuZGVmYXVsdCQxMz1SZSxlLmRlZmF1bHQkMTQ9SGEsZS5Db2xsaXNpb25Cb3hBcnJheT12bixlLmRlZmF1bHQkMTU9TW4sZS5UcmlhbmdsZUluZGV4QXJyYXk9aG4sZS5kZWZhdWx0JDE2PUxyLGUuZGVmYXVsdCQxNz1zLGUua2V5c0RpZmZlcmVuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj1bXTtmb3IodmFyIG4gaW4gdCluIGluIGV8fHIucHVzaChuKTtyZXR1cm4gcn0sZS5kZWZhdWx0JDE4PVtcInR5cGVcIixcInNvdXJjZVwiLFwic291cmNlLWxheWVyXCIsXCJtaW56b29tXCIsXCJtYXh6b29tXCIsXCJmaWx0ZXJcIixcImxheW91dFwiXSxlLm1hdDQ9cmksZS52ZWM0PWVpLGUuZ2V0U2l6ZURhdGE9RmEsZS5ldmFsdWF0ZVNpemVGb3JGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lO3JldHVyblwic291cmNlXCI9PT10LmZ1bmN0aW9uVHlwZT9yLmxvd2VyU2l6ZS8xMDpcImNvbXBvc2l0ZVwiPT09dC5mdW5jdGlvblR5cGU/d3Qoci5sb3dlclNpemUvMTAsci51cHBlclNpemUvMTAsbi51U2l6ZVQpOm4udVNpemV9LGUuZXZhbHVhdGVTaXplRm9yWm9vbT1mdW5jdGlvbih0LGUscil7aWYoXCJjb25zdGFudFwiPT09dC5mdW5jdGlvblR5cGUpcmV0dXJue3VTaXplVDowLHVTaXplOnQubGF5b3V0U2l6ZX07aWYoXCJzb3VyY2VcIj09PXQuZnVuY3Rpb25UeXBlKXJldHVybnt1U2l6ZVQ6MCx1U2l6ZTowfTtpZihcImNhbWVyYVwiPT09dC5mdW5jdGlvblR5cGUpe3ZhciBuPXQucHJvcGVydHlWYWx1ZSxpPXQuem9vbVJhbmdlLGE9dC5zaXplUmFuZ2Usbz1mKFNlKG4sci5zcGVjaWZpY2F0aW9uKS5pbnRlcnBvbGF0aW9uRmFjdG9yKGUsaS5taW4saS5tYXgpLDAsMSk7cmV0dXJue3VTaXplVDowLHVTaXplOmEubWluK28qKGEubWF4LWEubWluKX19dmFyIHM9dC5wcm9wZXJ0eVZhbHVlLGw9dC56b29tUmFuZ2U7cmV0dXJue3VTaXplVDpmKFNlKHMsci5zcGVjaWZpY2F0aW9uKS5pbnRlcnBvbGF0aW9uRmFjdG9yKGUsbC5taW4sbC5tYXgpLDAsMSksdVNpemU6MH19LGUuYWRkRHluYW1pY0F0dHJpYnV0ZXM9VmEsZS5kZWZhdWx0JDE5PVlhLGUuV3JpdGluZ01vZGU9am8sZS5tdWx0aVBvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRQb2ludD1qbixlLm11bHRpUG9seWdvbkludGVyc2VjdHNNdWx0aVBvbHlnb249Vm4sZS5tdWx0aVBvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRNdWx0aUxpbmU9VW4sZS5wb2x5Z29uSW50ZXJzZWN0c1BvbHlnb249ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZihabihlLHRbcl0pKXJldHVybiEwO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKFpuKHQsZVtuXSkpcmV0dXJuITA7cmV0dXJuISFIbih0LGUpfSxlLmRpc3RUb1NlZ21lbnRTcXVhcmVkPVduLGUuZGVmYXVsdCQyMD10aSxlLmRlZmF1bHQkMjE9SHIsZS5kZWZhdWx0JDIyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgSmFbdC50eXBlXSh0KX0sZS5jbG9uZT14LGUuZmlsdGVyT2JqZWN0PXksZS5tYXBPYmplY3Q9bSxlLnJlZ2lzdGVyRm9yUGx1Z2luQXZhaWxhYmlsaXR5PWZ1bmN0aW9uKHQpe3JldHVybiBNcj90KHtwbHVnaW5VUkw6TXIsY29tcGxldGlvbkNhbGxiYWNrOkFyfSk6RXIub25jZShcInBsdWdpbkF2YWlsYWJsZVwiLHQpLHR9LGUuZXZlbnRlZD1FcixlLmRlZmF1bHQkMjM9bXIsZS5kZWZhdWx0JDI0PU9uLGUuUG9zQXJyYXk9JHIsZS5VbndyYXBwZWRUaWxlSUQ9TG8sZS5lYXNlPWgsZS5iZXppZXI9dSxlLnNldFJUTFRleHRQbHVnaW49ZnVuY3Rpb24odCxlKXtpZihUcil0aHJvdyBuZXcgRXJyb3IoXCJzZXRSVExUZXh0UGx1Z2luIGNhbm5vdCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuXCIpO1RyPSEwLE1yPXQsQXI9ZnVuY3Rpb24odCl7dD8oVHI9ITEsTXI9bnVsbCxlJiZlKHQpKTpTcj0hMH0sRXIuZmlyZShuZXcgTChcInBsdWdpbkF2YWlsYWJsZVwiLHtwbHVnaW5VUkw6TXIsY29tcGxldGlvbkNhbGxiYWNrOkFyfSkpfSxlLnZhbHVlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2godFtyXSk7cmV0dXJuIGV9LGUuZGVmYXVsdCQyNT1SYSxlLnJlZ2lzdGVyPXByLGUuR0xZUEhfUEJGX0JPUkRFUj1NbyxlLnNoYXBlVGV4dD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdT10LnRyaW0oKTtjPT09am8udmVydGljYWwmJih1PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1cIlwiLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dC5jaGFyQ29kZUF0KHIrMSl8fG51bGwsaT10LmNoYXJDb2RlQXQoci0xKXx8bnVsbDtuJiZ3cihuKSYmIVBhW3RbcisxXV18fGkmJndyKGkpJiYhUGFbdFtyLTFdXXx8IVBhW3Rbcl1dP2UrPXRbcl06ZSs9UGFbdFtyXV19cmV0dXJuIGV9KHUpKTt2YXIgaD1bXSxmPXtwb3NpdGlvbmVkR2x5cGhzOmgsdGV4dDp1LHRvcDpzWzFdLGJvdHRvbTpzWzFdLGxlZnQ6c1swXSxyaWdodDpzWzBdLHdyaXRpbmdNb2RlOmN9LHA9Q3IucHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0O3JldHVybiBmdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCl7Zm9yKHZhciBjPTAsdT0tMTcsaD0wLGY9dC5wb3NpdGlvbmVkR2x5cGhzLHA9XCJyaWdodFwiPT09YT8xOlwibGVmdFwiPT09YT8wOi41LGQ9MCxnPXI7ZDxnLmxlbmd0aDtkKz0xKXt2YXIgdj1nW2RdO2lmKCh2PXYudHJpbSgpKS5sZW5ndGgpe2Zvcih2YXIgbT1mLmxlbmd0aCx5PTA7eTx2Lmxlbmd0aDt5Kyspe3ZhciB4PXYuY2hhckNvZGVBdCh5KSxiPWVbeF07YiYmKF9yKHgpJiZvIT09am8uaG9yaXpvbnRhbD8oZi5wdXNoKHtnbHlwaDp4LHg6Yyx5OjAsdmVydGljYWw6ITB9KSxjKz1sK3MpOihmLnB1c2goe2dseXBoOngseDpjLHk6dSx2ZXJ0aWNhbDohMX0pLGMrPWIubWV0cmljcy5hZHZhbmNlK3MpKX1pZihmLmxlbmd0aCE9PW0pe3ZhciBfPWMtcztoPU1hdGgubWF4KF8saCksWG8oZixlLG0sZi5sZW5ndGgtMSxwKX1jPTAsdSs9bn1lbHNlIHUrPW59dmFyIHc9V28oaSksaz13Lmhvcml6b250YWxBbGlnbixBPXcudmVydGljYWxBbGlnbjshZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPShlLXIpKmksbD0oLW4qbysuNSkqYSxjPTA7Yzx0Lmxlbmd0aDtjKyspdFtjXS54Kz1zLHRbY10ueSs9bH0oZixwLGssQSxoLG4sci5sZW5ndGgpO3ZhciBUPXIubGVuZ3RoKm47dC50b3ArPS1BKlQsdC5ib3R0b209dC50b3ArVCx0LmxlZnQrPS1rKmgsdC5yaWdodD10LmxlZnQraH0oZixlLHA/cCh1LFlvKHUsbyxyLGUpKTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPTAsaT0wLGE9ZTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07ci5wdXNoKHQuc3Vic3RyaW5nKG4sbykpLG49b31yZXR1cm4gbjx0Lmxlbmd0aCYmci5wdXNoKHQuc3Vic3RyaW5nKG4sdC5sZW5ndGgpKSxyfSh1LFlvKHUsbyxyLGUpKSxuLGksYSxjLG8sbCksISFoLmxlbmd0aCYmZn0sZS5zaGFwZUljb249ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVdvKHIpLGk9bi5ob3Jpem9udGFsQWxpZ24sYT1uLnZlcnRpY2FsQWxpZ24sbz1lWzBdLHM9ZVsxXSxsPW8tdC5kaXNwbGF5U2l6ZVswXSppLGM9bCt0LmRpc3BsYXlTaXplWzBdLHU9cy10LmRpc3BsYXlTaXplWzFdKmE7cmV0dXJue2ltYWdlOnQsdG9wOnUsYm90dG9tOnUrdC5kaXNwbGF5U2l6ZVsxXSxsZWZ0OmwscmlnaHQ6Y319LGUuYWxsb3dzVmVydGljYWxXcml0aW5nTW9kZT14cixlLmFsbG93c0xldHRlclNwYWNpbmc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSlpZighYnIocltlXS5jaGFyQ29kZUF0KDApKSlyZXR1cm4hMTtyZXR1cm4hMH0sZS5kZWZhdWx0JDI2PVdpLGUuZGVmYXVsdCQyNz1QbyxlLmRlZmF1bHQkMjg9ZW8sZS5kZWZhdWx0JDI5PWdhLGUuZGVmYXVsdCQzMD1pbyxlLmRlZmF1bHQkMzE9RG8sZS5fX21vZHVsZUV4cG9ydHM9Z2EsZS5kZWZhdWx0JDMyPWwsZS5fX21vZHVsZUV4cG9ydHMkMT1pbyxlLnBsdWdpbj1Dcn0pLGkoMCxmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3ZhciByPXR5cGVvZiB0O2lmKFwibnVtYmVyXCI9PT1yfHxcImJvb2xlYW5cIj09PXJ8fFwic3RyaW5nXCI9PT1yfHxudWxsPT10KXJldHVybiBKU09OLnN0cmluZ2lmeSh0KTtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIG49XCJbXCIsaT0wLGE9dDtpPGEubGVuZ3RoO2krPTEpbis9ZShhW2ldKStcIixcIjtyZXR1cm4gbitcIl1cIn1mb3IodmFyIG89T2JqZWN0LmtleXModCkuc29ydCgpLHM9XCJ7XCIsbD0wO2w8by5sZW5ndGg7bCsrKXMrPUpTT04uc3RyaW5naWZ5KG9bbF0pK1wiOlwiK2UodFtvW2xdXSkrXCIsXCI7cmV0dXJuIHMrXCJ9XCJ9ZnVuY3Rpb24gcihyKXtmb3IodmFyIG49XCJcIixpPTAsYT10LmRlZmF1bHQkMTg7aTxhLmxlbmd0aDtpKz0xKW4rPVwiL1wiK2UoclthW2ldXSk7cmV0dXJuIG59dmFyIG49ZnVuY3Rpb24odCl7dCYmdGhpcy5yZXBsYWNlKHQpfTtmdW5jdGlvbiBpKHQsZSxyLG4saSl7aWYodm9pZCAwPT09ZS5zZWdtZW50KXJldHVybiEwO2Zvcih2YXIgYT1lLG89ZS5zZWdtZW50KzEscz0wO3M+LXIvMjspe2lmKC0tbzwwKXJldHVybiExO3MtPXRbb10uZGlzdChhKSxhPXRbb119cys9dFtvXS5kaXN0KHRbbysxXSksbysrO2Zvcih2YXIgbD1bXSxjPTA7czxyLzI7KXt2YXIgdT10W28tMV0saD10W29dLGY9dFtvKzFdO2lmKCFmKXJldHVybiExO3ZhciBwPXUuYW5nbGVUbyhoKS1oLmFuZ2xlVG8oZik7Zm9yKHA9TWF0aC5hYnMoKHArMypNYXRoLlBJKSUoMipNYXRoLlBJKS1NYXRoLlBJKSxsLnB1c2goe2Rpc3RhbmNlOnMsYW5nbGVEZWx0YTpwfSksYys9cDtzLWxbMF0uZGlzdGFuY2U+bjspYy09bC5zaGlmdCgpLmFuZ2xlRGVsdGE7aWYoYz5pKXJldHVybiExO28rKyxzKz1oLmRpc3QoZil9cmV0dXJuITB9ZnVuY3Rpb24gYShlLHIsbixhLG8scyxsLGMsdSl7dmFyIGg9YT8uNipzKmw6MCxmPU1hdGgubWF4KGE/YS5yaWdodC1hLmxlZnQ6MCxvP28ucmlnaHQtby5sZWZ0OjApLHA9MD09PWVbMF0ueHx8ZVswXS54PT09dXx8MD09PWVbMF0ueXx8ZVswXS55PT09dTtyZXR1cm4gci1mKmw8ci80JiYocj1mKmwrci80KSxmdW5jdGlvbiBlKHIsbixhLG8scyxsLGMsdSxoKXtmb3IodmFyIGY9bC8yLHA9MCxkPTA7ZDxyLmxlbmd0aC0xO2QrKylwKz1yW2RdLmRpc3QocltkKzFdKTtmb3IodmFyIGc9MCx2PW4tYSxtPVtdLHk9MDt5PHIubGVuZ3RoLTE7eSsrKXtmb3IodmFyIHg9clt5XSxiPXJbeSsxXSxfPXguZGlzdChiKSx3PWIuYW5nbGVUbyh4KTt2K2E8ZytfOyl7dmFyIGs9KCh2Kz1hKS1nKS9fLEE9dC5udW1iZXIoeC54LGIueCxrKSxUPXQubnVtYmVyKHgueSxiLnksayk7aWYoQT49MCYmQTxoJiZUPj0wJiZUPGgmJnYtZj49MCYmditmPD1wKXt2YXIgTT1uZXcgdC5kZWZhdWx0JDI1KEEsVCx3LHkpO00uX3JvdW5kKCksbyYmIWkocixNLGwsbyxzKXx8bS5wdXNoKE0pfX1nKz1ffXJldHVybiB1fHxtLmxlbmd0aHx8Y3x8KG09ZShyLGcvMixhLG8scyxsLGMsITAsaCkpLG19KGUscD9yLzIqYyVyOihmLzIrMipzKSpsKmMlcixyLGgsbixmKmwscCwhMSx1KX1uLnByb3RvdHlwZS5yZXBsYWNlPWZ1bmN0aW9uKHQpe3RoaXMuX2xheWVyQ29uZmlncz17fSx0aGlzLl9sYXllcnM9e30sdGhpcy51cGRhdGUodCxbXSl9LG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLG4pe2Zvcih2YXIgaT10aGlzLGE9MCxvPWU7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdO2kuX2xheWVyQ29uZmlnc1tzLmlkXT1zO3ZhciBsPWkuX2xheWVyc1tzLmlkXT10LmRlZmF1bHQkMjIocyk7bC5fZmVhdHVyZUZpbHRlcj10LmRlZmF1bHQkMTMobC5maWx0ZXIpfWZvcih2YXIgYz0wLHU9bjtjPHUubGVuZ3RoO2MrPTEpe3ZhciBoPXVbY107ZGVsZXRlIGkuX2xheWVyQ29uZmlnc1toXSxkZWxldGUgaS5fbGF5ZXJzW2hdfXRoaXMuZmFtaWxpZXNCeVNvdXJjZT17fTtmb3IodmFyIGY9MCxwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT17fSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXIodFtuXSksYT1lW2ldO2F8fChhPWVbaV09W10pLGEucHVzaCh0W25dKX12YXIgbz1bXTtmb3IodmFyIHMgaW4gZSlvLnB1c2goZVtzXSk7cmV0dXJuIG99KHQudmFsdWVzKHRoaXMuX2xheWVyQ29uZmlncykpO2Y8cC5sZW5ndGg7Zis9MSl7dmFyIGQ9cFtmXS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGkuX2xheWVyc1t0LmlkXX0pLGc9ZFswXTtpZihcIm5vbmVcIiE9PWcudmlzaWJpbGl0eSl7dmFyIHY9Zy5zb3VyY2V8fFwiXCIsbT1pLmZhbWlsaWVzQnlTb3VyY2Vbdl07bXx8KG09aS5mYW1pbGllc0J5U291cmNlW3ZdPXt9KTt2YXIgeT1nLnNvdXJjZUxheWVyfHxcIl9nZW9qc29uVGlsZUxheWVyXCIseD1tW3ldO3h8fCh4PW1beV09W10pLHgucHVzaChkKX19fTt2YXIgbz1mdW5jdGlvbigpe3RoaXMub3BhY2l0eT0wLHRoaXMudGFyZ2V0T3BhY2l0eT0wLHRoaXMudGltZT0wfTtvLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBvO3JldHVybiB0Lm9wYWNpdHk9dGhpcy5vcGFjaXR5LHQudGFyZ2V0T3BhY2l0eT10aGlzLnRhcmdldE9wYWNpdHksdC50aW1lPXRoaXMudGltZSx0fSx0LnJlZ2lzdGVyKFwiT3BhY2l0eVN0YXRlXCIsbyk7dmFyIHM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1KXt2YXIgaD1vLnRvcCpzLWwsZj1vLmJvdHRvbSpzK2wscD1vLmxlZnQqcy1sLGQ9by5yaWdodCpzK2w7aWYodGhpcy5ib3hTdGFydEluZGV4PXQubGVuZ3RoLGMpe3ZhciBnPWYtaCx2PWQtcDtnPjAmJihnPU1hdGgubWF4KDEwKnMsZyksdGhpcy5fYWRkTGluZUNvbGxpc2lvbkNpcmNsZXModCxlLHIsci5zZWdtZW50LHYsZyxuLGksYSx1KSl9ZWxzZSB0LmVtcGxhY2VCYWNrKHIueCxyLnkscCxoLGQsZixuLGksYSwwLDApO3RoaXMuYm94RW5kSW5kZXg9dC5sZW5ndGh9O3MucHJvdG90eXBlLl9hZGRMaW5lQ29sbGlzaW9uQ2lyY2xlcz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdT1hLzIsaD1NYXRoLmZsb29yKGkvdSksZj0xKy40Kk1hdGgubG9nKGMpL01hdGguTE4yLHA9TWF0aC5mbG9vcihoKmYvMiksZD0tYS8yLGc9cix2PW4rMSxtPWQseT0taS8yLHg9eS1pLzQ7ZG97aWYoLS12PDApe2lmKG0+eSlyZXR1cm47dj0wO2JyZWFrfW0tPWVbdl0uZGlzdChnKSxnPWVbdl19d2hpbGUobT54KTtmb3IodmFyIGI9ZVt2XS5kaXN0KGVbdisxXSksXz0tcDtfPGgrcDtfKyspe3ZhciB3PV8qdSxrPXkrdztpZih3PDAmJihrKz13KSx3PmkmJihrKz13LWkpLCEoazxtKSl7Zm9yKDttK2I8azspe2lmKG0rPWIsKyt2KzE+PWUubGVuZ3RoKXJldHVybjtiPWVbdl0uZGlzdChlW3YrMV0pfXZhciBBPWstbSxUPWVbdl0sTT1lW3YrMV0uc3ViKFQpLl91bml0KCkuX211bHQoQSkuX2FkZChUKS5fcm91bmQoKSxTPU1hdGguYWJzKGstZCk8dT8wOi44KihrLWQpO3QuZW1wbGFjZUJhY2soTS54LE0ueSwtYS8yLC1hLzIsYS8yLGEvMixvLHMsbCxhLzIsUyl9fX07dmFyIGw9dSxjPXU7ZnVuY3Rpb24gdSh0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHUpKXJldHVybiBuZXcgdSh0LGUpO2lmKHRoaXMuZGF0YT10fHxbXSx0aGlzLmxlbmd0aD10aGlzLmRhdGEubGVuZ3RoLHRoaXMuY29tcGFyZT1lfHxoLHRoaXMubGVuZ3RoPjApZm9yKHZhciByPSh0aGlzLmxlbmd0aD4+MSktMTtyPj0wO3ItLSl0aGlzLl9kb3duKHIpfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9ZnVuY3Rpb24gZihlLHIsbil7dm9pZCAwPT09ciYmKHI9MSksdm9pZCAwPT09biYmKG49ITEpO2Zvcih2YXIgaT0xLzAsYT0xLzAsbz0tMS8wLHM9LTEvMCxjPWVbMF0sdT0wO3U8Yy5sZW5ndGg7dSsrKXt2YXIgaD1jW3VdOyghdXx8aC54PGkpJiYoaT1oLngpLCghdXx8aC55PGEpJiYoYT1oLnkpLCghdXx8aC54Pm8pJiYobz1oLngpLCghdXx8aC55PnMpJiYocz1oLnkpfXZhciBmPW8taSxnPXMtYSx2PU1hdGgubWluKGYsZyksbT12LzIseT1uZXcgbChudWxsLHApO2lmKDA9PT12KXJldHVybiBuZXcgdC5kZWZhdWx0JDEoaSxhKTtmb3IodmFyIHg9aTt4PG87eCs9dilmb3IodmFyIGI9YTtiPHM7Yis9dil5LnB1c2gobmV3IGQoeCttLGIrbSxtLGUpKTtmb3IodmFyIF89ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wLG49MCxpPXRbMF0sYT0wLG89aS5sZW5ndGgscz1vLTE7YTxvO3M9YSsrKXt2YXIgbD1pW2FdLGM9aVtzXSx1PWwueCpjLnktYy54KmwueTtyKz0obC54K2MueCkqdSxuKz0obC55K2MueSkqdSxlKz0zKnV9cmV0dXJuIG5ldyBkKHIvZSxuL2UsMCx0KX0oZSksdz15Lmxlbmd0aDt5Lmxlbmd0aDspe3ZhciBrPXkucG9wKCk7KGsuZD5fLmR8fCFfLmQpJiYoXz1rLG4mJmNvbnNvbGUubG9nKFwiZm91bmQgYmVzdCAlZCBhZnRlciAlZCBwcm9iZXNcIixNYXRoLnJvdW5kKDFlNCprLmQpLzFlNCx3KSksay5tYXgtXy5kPD1yfHwobT1rLmgvMix5LnB1c2gobmV3IGQoay5wLngtbSxrLnAueS1tLG0sZSkpLHkucHVzaChuZXcgZChrLnAueCttLGsucC55LW0sbSxlKSkseS5wdXNoKG5ldyBkKGsucC54LW0say5wLnkrbSxtLGUpKSx5LnB1c2gobmV3IGQoay5wLngrbSxrLnAueSttLG0sZSkpLHcrPTQpfXJldHVybiBuJiYoY29uc29sZS5sb2coXCJudW0gcHJvYmVzOiBcIit3KSxjb25zb2xlLmxvZyhcImJlc3QgZGlzdGFuY2U6IFwiK18uZCkpLF8ucH1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIGUubWF4LXQubWF4fWZ1bmN0aW9uIGQoZSxyLG4saSl7dGhpcy5wPW5ldyB0LmRlZmF1bHQkMShlLHIpLHRoaXMuaD1uLHRoaXMuZD1mdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0hMSxpPTEvMCxhPTA7YTxyLmxlbmd0aDthKyspZm9yKHZhciBvPXJbYV0scz0wLGw9by5sZW5ndGgsYz1sLTE7czxsO2M9cysrKXt2YXIgdT1vW3NdLGg9b1tjXTt1Lnk+ZS55IT1oLnk+ZS55JiZlLng8KGgueC11LngpKihlLnktdS55KS8oaC55LXUueSkrdS54JiYobj0hbiksaT1NYXRoLm1pbihpLHQuZGlzdFRvU2VnbWVudFNxdWFyZWQoZSx1LGgpKX1yZXR1cm4obj8xOi0xKSpNYXRoLnNxcnQoaSl9KHRoaXMucCxpKSx0aGlzLm1heD10aGlzLmQrdGhpcy5oKk1hdGguU1FSVDJ9ZnVuY3Rpb24gZyhlLHIsbixpLGEsbyl7ZS5jcmVhdGVBcnJheXMoKSxlLnN5bWJvbEluc3RhbmNlcz1bXTt2YXIgcz01MTIqZS5vdmVyc2NhbGluZztlLnRpbGVQaXhlbFJhdGlvPXQuZGVmYXVsdCQ4L3MsZS5jb21wYXJlVGV4dD17fSxlLmljb25zTmVlZExpbmVhcj0hMTt2YXIgbD1lLmxheWVyc1swXS5sYXlvdXQsYz1lLmxheWVyc1swXS5fdW5ldmFsdWF0ZWRMYXlvdXQuX3ZhbHVlcyx1PXt9O2lmKFwiY29tcG9zaXRlXCI9PT1lLnRleHRTaXplRGF0YS5mdW5jdGlvblR5cGUpe3ZhciBoPWUudGV4dFNpemVEYXRhLnpvb21SYW5nZSxmPWgubWluLHA9aC5tYXg7dS5jb21wb3NpdGVUZXh0U2l6ZXM9W2NbXCJ0ZXh0LXNpemVcIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgdC5kZWZhdWx0JDE2KGYpKSxjW1widGV4dC1zaXplXCJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHQuZGVmYXVsdCQxNihwKSldfWlmKFwiY29tcG9zaXRlXCI9PT1lLmljb25TaXplRGF0YS5mdW5jdGlvblR5cGUpe3ZhciBkPWUuaWNvblNpemVEYXRhLnpvb21SYW5nZSxnPWQubWluLG09ZC5tYXg7dS5jb21wb3NpdGVJY29uU2l6ZXM9W2NbXCJpY29uLXNpemVcIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgdC5kZWZhdWx0JDE2KGcpKSxjW1wiaWNvbi1zaXplXCJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHQuZGVmYXVsdCQxNihtKSldfXUubGF5b3V0VGV4dFNpemU9Y1tcInRleHQtc2l6ZVwiXS5wb3NzaWJseUV2YWx1YXRlKG5ldyB0LmRlZmF1bHQkMTYoZS56b29tKzEpKSx1LmxheW91dEljb25TaXplPWNbXCJpY29uLXNpemVcIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgdC5kZWZhdWx0JDE2KGUuem9vbSsxKSksdS50ZXh0TWF4U2l6ZT1jW1widGV4dC1zaXplXCJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHQuZGVmYXVsdCQxNigxOCkpO2Zvcih2YXIgeT0yNCpsLmdldChcInRleHQtbGluZS1oZWlnaHRcIikseD1cIm1hcFwiPT09bC5nZXQoXCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudFwiKSYmXCJsaW5lXCI9PT1sLmdldChcInN5bWJvbC1wbGFjZW1lbnRcIiksYj1sLmdldChcInRleHQta2VlcC11cHJpZ2h0XCIpLF89MCx3PWUuZmVhdHVyZXM7Xzx3Lmxlbmd0aDtfKz0xKXt2YXIgaz13W19dLEE9bC5nZXQoXCJ0ZXh0LWZvbnRcIikuZXZhbHVhdGUoaykuam9pbihcIixcIiksVD1yW0FdfHx7fSxNPW5bQV18fHt9LFM9e30sRT1rLnRleHQ7aWYoRSl7dmFyIEM9bC5nZXQoXCJ0ZXh0LW9mZnNldFwiKS5ldmFsdWF0ZShrKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIDI0KnR9KSxMPTI0KmwuZ2V0KFwidGV4dC1sZXR0ZXItc3BhY2luZ1wiKS5ldmFsdWF0ZShrKSx6PXQuYWxsb3dzTGV0dGVyU3BhY2luZyhFKT9MOjAsTz1sLmdldChcInRleHQtYW5jaG9yXCIpLmV2YWx1YXRlKGspLEk9bC5nZXQoXCJ0ZXh0LWp1c3RpZnlcIikuZXZhbHVhdGUoayksRD1cImxpbmVcIiE9PWwuZ2V0KFwic3ltYm9sLXBsYWNlbWVudFwiKT8yNCpsLmdldChcInRleHQtbWF4LXdpZHRoXCIpLmV2YWx1YXRlKGspOjA7Uy5ob3Jpem9udGFsPXQuc2hhcGVUZXh0KEUsVCxELHksTyxJLHosQywyNCx0LldyaXRpbmdNb2RlLmhvcml6b250YWwpLHQuYWxsb3dzVmVydGljYWxXcml0aW5nTW9kZShFKSYmeCYmYiYmKFMudmVydGljYWw9dC5zaGFwZVRleHQoRSxULEQseSxPLEkseixDLDI0LHQuV3JpdGluZ01vZGUudmVydGljYWwpKX12YXIgUD12b2lkIDA7aWYoay5pY29uKXt2YXIgUj1pW2suaWNvbl07UiYmKFA9dC5zaGFwZUljb24oYVtrLmljb25dLGwuZ2V0KFwiaWNvbi1vZmZzZXRcIikuZXZhbHVhdGUoayksbC5nZXQoXCJpY29uLWFuY2hvclwiKS5ldmFsdWF0ZShrKSksdm9pZCAwPT09ZS5zZGZJY29ucz9lLnNkZkljb25zPVIuc2RmOmUuc2RmSWNvbnMhPT1SLnNkZiYmdC53YXJuT25jZShcIlN0eWxlIHNoZWV0IHdhcm5pbmc6IENhbm5vdCBtaXggU0RGIGFuZCBub24tU0RGIGljb25zIGluIG9uZSBidWZmZXJcIiksUi5waXhlbFJhdGlvIT09ZS5waXhlbFJhdGlvP2UuaWNvbnNOZWVkTGluZWFyPSEwOjAhPT1sLmdldChcImljb24tcm90YXRlXCIpLmNvbnN0YW50T3IoMSkmJihlLmljb25zTmVlZExpbmVhcj0hMCkpfShTLmhvcml6b250YWx8fFApJiZ2KGUsayxTLFAsTSx1KX1vJiZlLmdlbmVyYXRlQ29sbGlzaW9uRGVidWdCdWZmZXJzKCl9ZnVuY3Rpb24gdihlLHIsbixpLGwsYyl7dmFyIHU9Yy5sYXlvdXRUZXh0U2l6ZS5ldmFsdWF0ZShyKSxoPWMubGF5b3V0SWNvblNpemUuZXZhbHVhdGUocikscD1jLnRleHRNYXhTaXplLmV2YWx1YXRlKHIpO3ZvaWQgMD09PXAmJihwPXUpO3ZhciBkPWUubGF5ZXJzWzBdLmxheW91dCxnPWQuZ2V0KFwidGV4dC1vZmZzZXRcIikuZXZhbHVhdGUociksdj1kLmdldChcImljb24tb2Zmc2V0XCIpLmV2YWx1YXRlKHIpLHg9dS8yNCxiPWUudGlsZVBpeGVsUmF0aW8qeCxfPWUudGlsZVBpeGVsUmF0aW8qcC8yNCx3PWUudGlsZVBpeGVsUmF0aW8qaCxrPWUudGlsZVBpeGVsUmF0aW8qZC5nZXQoXCJzeW1ib2wtc3BhY2luZ1wiKSxBPWQuZ2V0KFwidGV4dC1wYWRkaW5nXCIpKmUudGlsZVBpeGVsUmF0aW8sVD1kLmdldChcImljb24tcGFkZGluZ1wiKSplLnRpbGVQaXhlbFJhdGlvLE09ZC5nZXQoXCJ0ZXh0LW1heC1hbmdsZVwiKS8xODAqTWF0aC5QSSxTPVwibWFwXCI9PT1kLmdldChcInRleHQtcm90YXRpb24tYWxpZ25tZW50XCIpJiZcImxpbmVcIj09PWQuZ2V0KFwic3ltYm9sLXBsYWNlbWVudFwiKSxFPVwibWFwXCI9PT1kLmdldChcImljb24tcm90YXRpb24tYWxpZ25tZW50XCIpJiZcImxpbmVcIj09PWQuZ2V0KFwic3ltYm9sLXBsYWNlbWVudFwiKSxDPWsvMixMPWZ1bmN0aW9uKGEsdSl7dS54PDB8fHUueD49dC5kZWZhdWx0JDh8fHUueTwwfHx1Lnk+PXQuZGVmYXVsdCQ4fHxlLnN5bWJvbEluc3RhbmNlcy5wdXNoKGZ1bmN0aW9uKGUscixuLGksYSxsLGMsdSxoLGYscCxkLGcsdix5LHgsYixfLHcsayxBKXt2YXIgVCxNLFM9ZS5hZGRUb0xpbmVWZXJ0ZXhBcnJheShyLG4pLEU9MCxDPTAsTD0wLHo9aS5ob3Jpem9udGFsP2kuaG9yaXpvbnRhbC50ZXh0OlwiXCIsTz1bXTtpLmhvcml6b250YWwmJihUPW5ldyBzKGMsbixyLHUsaCxmLGkuaG9yaXpvbnRhbCxwLGQsZyxlLm92ZXJzY2FsaW5nKSxDKz1tKGUscixpLmhvcml6b250YWwsbCxnLHcsdixTLGkudmVydGljYWw/dC5Xcml0aW5nTW9kZS5ob3Jpem9udGFsOnQuV3JpdGluZ01vZGUuaG9yaXpvbnRhbE9ubHksTyxrLEEpLGkudmVydGljYWwmJihMKz1tKGUscixpLnZlcnRpY2FsLGwsZyx3LHYsUyx0LldyaXRpbmdNb2RlLnZlcnRpY2FsLE8sayxBKSkpO3ZhciBJPVQ/VC5ib3hTdGFydEluZGV4OmUuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoLEQ9VD9ULmJveEVuZEluZGV4OmUuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoO2lmKGEpe3ZhciBQPWZ1bmN0aW9uKGUscixuLGksYSxvKXt2YXIgcyxsLGMsdSxoPXIuaW1hZ2UsZj1uLmxheW91dCxwPXIudG9wLTEvaC5waXhlbFJhdGlvLGQ9ci5sZWZ0LTEvaC5waXhlbFJhdGlvLGc9ci5ib3R0b20rMS9oLnBpeGVsUmF0aW8sdj1yLnJpZ2h0KzEvaC5waXhlbFJhdGlvO2lmKFwibm9uZVwiIT09Zi5nZXQoXCJpY29uLXRleHQtZml0XCIpJiZhKXt2YXIgbT12LWQseT1nLXAseD1mLmdldChcInRleHQtc2l6ZVwiKS5ldmFsdWF0ZShvKS8yNCxiPWEubGVmdCp4LF89YS5yaWdodCp4LHc9YS50b3AqeCxrPV8tYixBPWEuYm90dG9tKngtdyxUPWYuZ2V0KFwiaWNvbi10ZXh0LWZpdC1wYWRkaW5nXCIpWzBdLE09Zi5nZXQoXCJpY29uLXRleHQtZml0LXBhZGRpbmdcIilbMV0sUz1mLmdldChcImljb24tdGV4dC1maXQtcGFkZGluZ1wiKVsyXSxFPWYuZ2V0KFwiaWNvbi10ZXh0LWZpdC1wYWRkaW5nXCIpWzNdLEM9XCJ3aWR0aFwiPT09Zi5nZXQoXCJpY29uLXRleHQtZml0XCIpPy41KihBLXkpOjAsTD1cImhlaWdodFwiPT09Zi5nZXQoXCJpY29uLXRleHQtZml0XCIpPy41KihrLW0pOjAsej1cIndpZHRoXCI9PT1mLmdldChcImljb24tdGV4dC1maXRcIil8fFwiYm90aFwiPT09Zi5nZXQoXCJpY29uLXRleHQtZml0XCIpP2s6bSxPPVwiaGVpZ2h0XCI9PT1mLmdldChcImljb24tdGV4dC1maXRcIil8fFwiYm90aFwiPT09Zi5nZXQoXCJpY29uLXRleHQtZml0XCIpP0E6eTtzPW5ldyB0LmRlZmF1bHQkMShiK0wtRSx3K0MtVCksbD1uZXcgdC5kZWZhdWx0JDEoYitMK00reix3K0MtVCksYz1uZXcgdC5kZWZhdWx0JDEoYitMK00reix3K0MrUytPKSx1PW5ldyB0LmRlZmF1bHQkMShiK0wtRSx3K0MrUytPKX1lbHNlIHM9bmV3IHQuZGVmYXVsdCQxKGQscCksbD1uZXcgdC5kZWZhdWx0JDEodixwKSxjPW5ldyB0LmRlZmF1bHQkMSh2LGcpLHU9bmV3IHQuZGVmYXVsdCQxKGQsZyk7dmFyIEk9bi5sYXlvdXQuZ2V0KFwiaWNvbi1yb3RhdGVcIikuZXZhbHVhdGUobykqTWF0aC5QSS8xODA7aWYoSSl7dmFyIEQ9TWF0aC5zaW4oSSksUD1NYXRoLmNvcyhJKSxSPVtQLC1ELEQsUF07cy5fbWF0TXVsdChSKSxsLl9tYXRNdWx0KFIpLHUuX21hdE11bHQoUiksYy5fbWF0TXVsdChSKX1yZXR1cm5be3RsOnMsdHI6bCxibDp1LGJyOmMsdGV4OmgucGFkZGVkUmVjdCx3cml0aW5nTW9kZTp2b2lkIDAsZ2x5cGhPZmZzZXQ6WzAsMF19XX0oMCxhLGwsMCxpLmhvcml6b250YWwsdyk7TT1uZXcgcyhjLG4scix1LGgsZixhLHkseCwhMSxlLm92ZXJzY2FsaW5nKSxFPTQqUC5sZW5ndGg7dmFyIFI9ZS5pY29uU2l6ZURhdGEsRj1udWxsO1wic291cmNlXCI9PT1SLmZ1bmN0aW9uVHlwZT9GPVsxMCpsLmxheW91dC5nZXQoXCJpY29uLXNpemVcIikuZXZhbHVhdGUodyldOlwiY29tcG9zaXRlXCI9PT1SLmZ1bmN0aW9uVHlwZSYmKEY9WzEwKkEuY29tcG9zaXRlSWNvblNpemVzWzBdLmV2YWx1YXRlKHcpLDEwKkEuY29tcG9zaXRlSWNvblNpemVzWzFdLmV2YWx1YXRlKHcpXSksZS5hZGRTeW1ib2xzKGUuaWNvbixQLEYsXyxiLHcsITEscixTLmxpbmVTdGFydEluZGV4LFMubGluZUxlbmd0aCl9dmFyIEI9TT9NLmJveFN0YXJ0SW5kZXg6ZS5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGgsTj1NP00uYm94RW5kSW5kZXg6ZS5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7cmV0dXJuIGUuZ2x5cGhPZmZzZXRBcnJheS5sZW5ndGg+PXQuZGVmYXVsdCQxNC5NQVhfR0xZUEhTJiZ0Lndhcm5PbmNlKFwiVG9vIG1hbnkgZ2x5cGhzIGJlaW5nIHJlbmRlcmVkIGluIGEgdGlsZS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy8yOTA3XCIpLHtrZXk6eix0ZXh0Qm94U3RhcnRJbmRleDpJLHRleHRCb3hFbmRJbmRleDpELGljb25Cb3hTdGFydEluZGV4OkIsaWNvbkJveEVuZEluZGV4Ok4sdGV4dE9mZnNldDp2LGljb25PZmZzZXQ6XyxhbmNob3I6cixsaW5lOm4sZmVhdHVyZUluZGV4OnUsZmVhdHVyZTp3LG51bUdseXBoVmVydGljZXM6QyxudW1WZXJ0aWNhbEdseXBoVmVydGljZXM6TCxudW1JY29uVmVydGljZXM6RSx0ZXh0T3BhY2l0eVN0YXRlOm5ldyBvLGljb25PcGFjaXR5U3RhdGU6bmV3IG8saXNEdXBsaWNhdGU6ITEscGxhY2VkVGV4dFN5bWJvbEluZGljZXM6Tyxjcm9zc1RpbGVJRDowfX0oZSx1LGEsbixpLGUubGF5ZXJzWzBdLGUuY29sbGlzaW9uQm94QXJyYXksci5pbmRleCxyLnNvdXJjZUxheWVySW5kZXgsZS5pbmRleCxiLEEsUyxnLHcsVCxFLHYscixsLGMpKX07aWYoXCJsaW5lXCI9PT1kLmdldChcInN5bWJvbC1wbGFjZW1lbnRcIikpZm9yKHZhciB6PTAsTz1mdW5jdGlvbihlLHIsbixpLGEpe2Zvcih2YXIgbz1bXSxzPTA7czxlLmxlbmd0aDtzKyspZm9yKHZhciBsPWVbc10sYz12b2lkIDAsdT0wO3U8bC5sZW5ndGgtMTt1Kyspe3ZhciBoPWxbdV0sZj1sW3UrMV07aC54PDAmJmYueDwwfHwoaC54PDA/aD1uZXcgdC5kZWZhdWx0JDEoMCxoLnkrKGYueS1oLnkpKigoMC1oLngpLyhmLngtaC54KSkpLl9yb3VuZCgpOmYueDwwJiYoZj1uZXcgdC5kZWZhdWx0JDEoMCxoLnkrKGYueS1oLnkpKigoMC1oLngpLyhmLngtaC54KSkpLl9yb3VuZCgpKSxoLnk8MCYmZi55PDB8fChoLnk8MD9oPW5ldyB0LmRlZmF1bHQkMShoLngrKGYueC1oLngpKigoMC1oLnkpLyhmLnktaC55KSksMCkuX3JvdW5kKCk6Zi55PDAmJihmPW5ldyB0LmRlZmF1bHQkMShoLngrKGYueC1oLngpKigoMC1oLnkpLyhmLnktaC55KSksMCkuX3JvdW5kKCkpLGgueD49aSYmZi54Pj1pfHwoaC54Pj1pP2g9bmV3IHQuZGVmYXVsdCQxKGksaC55KyhmLnktaC55KSooKGktaC54KS8oZi54LWgueCkpKS5fcm91bmQoKTpmLng+PWkmJihmPW5ldyB0LmRlZmF1bHQkMShpLGgueSsoZi55LWgueSkqKChpLWgueCkvKGYueC1oLngpKSkuX3JvdW5kKCkpLGgueT49YSYmZi55Pj1hfHwoaC55Pj1hP2g9bmV3IHQuZGVmYXVsdCQxKGgueCsoZi54LWgueCkqKChhLWgueSkvKGYueS1oLnkpKSxhKS5fcm91bmQoKTpmLnk+PWEmJihmPW5ldyB0LmRlZmF1bHQkMShoLngrKGYueC1oLngpKigoYS1oLnkpLyhmLnktaC55KSksYSkuX3JvdW5kKCkpLGMmJmguZXF1YWxzKGNbYy5sZW5ndGgtMV0pfHwoYz1baF0sby5wdXNoKGMpKSxjLnB1c2goZikpKSkpfXJldHVybiBvfShyLmdlb21ldHJ5LDAsMCx0LmRlZmF1bHQkOCx0LmRlZmF1bHQkOCk7ejxPLmxlbmd0aDt6Kz0xKWZvcih2YXIgST1PW3pdLEQ9MCxQPWEoSSxrLE0sbi52ZXJ0aWNhbHx8bi5ob3Jpem9udGFsLGksMjQsXyxlLm92ZXJzY2FsaW5nLHQuZGVmYXVsdCQ4KTtEPFAubGVuZ3RoO0QrPTEpe3ZhciBSPVBbRF0sRj1uLmhvcml6b250YWw7RiYmeShlLEYudGV4dCxDLFIpfHxMKEksUil9ZWxzZSBpZihcIlBvbHlnb25cIj09PXIudHlwZSlmb3IodmFyIEI9MCxOPXQuZGVmYXVsdCQyNihyLmdlb21ldHJ5LDApO0I8Ti5sZW5ndGg7Qis9MSl7dmFyIGo9TltCXSxWPWYoaiwxNik7TChqWzBdLG5ldyB0LmRlZmF1bHQkMjUoVi54LFYueSwwKSl9ZWxzZSBpZihcIkxpbmVTdHJpbmdcIj09PXIudHlwZSlmb3IodmFyIFU9MCxxPXIuZ2VvbWV0cnk7VTxxLmxlbmd0aDtVKz0xKXt2YXIgSD1xW1VdO0woSCxuZXcgdC5kZWZhdWx0JDI1KEhbMF0ueCxIWzBdLnksMCkpfWVsc2UgaWYoXCJQb2ludFwiPT09ci50eXBlKWZvcih2YXIgRz0wLFk9ci5nZW9tZXRyeTtHPFkubGVuZ3RoO0crPTEpZm9yKHZhciBXPTAsWD1ZW0ddO1c8WC5sZW5ndGg7Vys9MSl7dmFyIFo9WFtXXTtMKFtaXSxuZXcgdC5kZWZhdWx0JDI1KFoueCxaLnksMCkpfX1mdW5jdGlvbiBtKGUscixuLGksYSxvLHMsbCxjLHUsaCxmKXt2YXIgcD1mdW5jdGlvbihlLHIsbixpLGEsbyl7Zm9yKHZhciBzPW4ubGF5b3V0LmdldChcInRleHQtcm90YXRlXCIpLmV2YWx1YXRlKGEpKk1hdGguUEkvMTgwLGw9bi5sYXlvdXQuZ2V0KFwidGV4dC1vZmZzZXRcIikuZXZhbHVhdGUoYSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiAyNCp0fSksYz1yLnBvc2l0aW9uZWRHbHlwaHMsdT1bXSxoPTA7aDxjLmxlbmd0aDtoKyspe3ZhciBmPWNbaF0scD1vW2YuZ2x5cGhdO2lmKHApe3ZhciBkPXAucmVjdDtpZihkKXt2YXIgZz10LkdMWVBIX1BCRl9CT1JERVIrMSx2PXAubWV0cmljcy5hZHZhbmNlLzIsbT1pP1tmLngrdixmLnldOlswLDBdLHk9aT9bMCwwXTpbZi54K3YrbFswXSxmLnkrbFsxXV0seD1wLm1ldHJpY3MubGVmdC1nLXYreVswXSxiPS1wLm1ldHJpY3MudG9wLWcreVsxXSxfPXgrZC53LHc9YitkLmgsaz1uZXcgdC5kZWZhdWx0JDEoeCxiKSxBPW5ldyB0LmRlZmF1bHQkMShfLGIpLFQ9bmV3IHQuZGVmYXVsdCQxKHgsdyksTT1uZXcgdC5kZWZhdWx0JDEoXyx3KTtpZihpJiZmLnZlcnRpY2FsKXt2YXIgUz1uZXcgdC5kZWZhdWx0JDEoLXYsdiksRT0tTWF0aC5QSS8yLEM9bmV3IHQuZGVmYXVsdCQxKDUsMCk7ay5fcm90YXRlQXJvdW5kKEUsUykuX2FkZChDKSxBLl9yb3RhdGVBcm91bmQoRSxTKS5fYWRkKEMpLFQuX3JvdGF0ZUFyb3VuZChFLFMpLl9hZGQoQyksTS5fcm90YXRlQXJvdW5kKEUsUykuX2FkZChDKX1pZihzKXt2YXIgTD1NYXRoLnNpbihzKSx6PU1hdGguY29zKHMpLE89W3osLUwsTCx6XTtrLl9tYXRNdWx0KE8pLEEuX21hdE11bHQoTyksVC5fbWF0TXVsdChPKSxNLl9tYXRNdWx0KE8pfXUucHVzaCh7dGw6ayx0cjpBLGJsOlQsYnI6TSx0ZXg6ZCx3cml0aW5nTW9kZTpyLndyaXRpbmdNb2RlLGdseXBoT2Zmc2V0Om19KX19fXJldHVybiB1fSgwLG4saSxhLG8saCksZD1lLnRleHRTaXplRGF0YSxnPW51bGw7cmV0dXJuXCJzb3VyY2VcIj09PWQuZnVuY3Rpb25UeXBlP2c9WzEwKmkubGF5b3V0LmdldChcInRleHQtc2l6ZVwiKS5ldmFsdWF0ZShvKV06XCJjb21wb3NpdGVcIj09PWQuZnVuY3Rpb25UeXBlJiYoZz1bMTAqZi5jb21wb3NpdGVUZXh0U2l6ZXNbMF0uZXZhbHVhdGUobyksMTAqZi5jb21wb3NpdGVUZXh0U2l6ZXNbMV0uZXZhbHVhdGUobyldKSxlLmFkZFN5bWJvbHMoZS50ZXh0LHAsZyxzLGEsbyxjLHIsbC5saW5lU3RhcnRJbmRleCxsLmxpbmVMZW5ndGgpLHUucHVzaChlLnRleHQucGxhY2VkU3ltYm9sQXJyYXkubGVuZ3RoLTEpLDQqcC5sZW5ndGh9ZnVuY3Rpb24geSh0LGUscixuKXt2YXIgaT10LmNvbXBhcmVUZXh0O2lmKGUgaW4gaSl7Zm9yKHZhciBhPWlbZV0sbz1hLmxlbmd0aC0xO28+PTA7by0tKWlmKG4uZGlzdChhW29dKTxyKXJldHVybiEwfWVsc2UgaVtlXT1bXTtyZXR1cm4gaVtlXS5wdXNoKG4pLCExfXUucHJvdG90eXBlPXtwdXNoOmZ1bmN0aW9uKHQpe3RoaXMuZGF0YS5wdXNoKHQpLHRoaXMubGVuZ3RoKyssdGhpcy5fdXAodGhpcy5sZW5ndGgtMSl9LHBvcDpmdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIHQ9dGhpcy5kYXRhWzBdO3JldHVybiB0aGlzLmxlbmd0aC0tLHRoaXMubGVuZ3RoPjAmJih0aGlzLmRhdGFbMF09dGhpcy5kYXRhW3RoaXMubGVuZ3RoXSx0aGlzLl9kb3duKDApKSx0aGlzLmRhdGEucG9wKCksdH19LHBlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhWzBdfSxfdXA6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuZGF0YSxyPXRoaXMuY29tcGFyZSxuPWVbdF07dD4wOyl7dmFyIGk9dC0xPj4xLGE9ZVtpXTtpZihyKG4sYSk+PTApYnJlYWs7ZVt0XT1hLHQ9aX1lW3RdPW59LF9kb3duOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmRhdGEscj10aGlzLmNvbXBhcmUsbj10aGlzLmxlbmd0aD4+MSxpPWVbdF07dDxuOyl7dmFyIGE9MSsodDw8MSksbz1hKzEscz1lW2FdO2lmKG88dGhpcy5sZW5ndGgmJnIoZVtvXSxzKTwwJiYoYT1vLHM9ZVtvXSkscihzLGkpPj0wKWJyZWFrO2VbdF09cyx0PWF9ZVt0XT1pfX0sbC5kZWZhdWx0PWM7dmFyIHg9ZnVuY3Rpb24oZSl7dmFyIHI9bmV3IHQuQWxwaGFJbWFnZSh7d2lkdGg6MCxoZWlnaHQ6MH0pLG49e30saT1uZXcgdC5kZWZhdWx0JDIoMCwwLHthdXRvUmVzaXplOiEwfSk7Zm9yKHZhciBhIGluIGUpe3ZhciBvPWVbYV0scz1uW2FdPXt9O2Zvcih2YXIgbCBpbiBvKXt2YXIgYz1vWytsXTtpZihjJiYwIT09Yy5iaXRtYXAud2lkdGgmJjAhPT1jLmJpdG1hcC5oZWlnaHQpe3ZhciB1PWkucGFja09uZShjLmJpdG1hcC53aWR0aCsyLGMuYml0bWFwLmhlaWdodCsyKTtyLnJlc2l6ZSh7d2lkdGg6aS53LGhlaWdodDppLmh9KSx0LkFscGhhSW1hZ2UuY29weShjLmJpdG1hcCxyLHt4OjAseTowfSx7eDp1LngrMSx5OnUueSsxfSxjLmJpdG1hcCksc1tsXT17cmVjdDp1LG1ldHJpY3M6Yy5tZXRyaWNzfX19fWkuc2hyaW5rKCksci5yZXNpemUoe3dpZHRoOmkudyxoZWlnaHQ6aS5ofSksdGhpcy5pbWFnZT1yLHRoaXMucG9zaXRpb25zPW59O3QucmVnaXN0ZXIoXCJHbHlwaEF0bGFzXCIseCk7dmFyIGI9ZnVuY3Rpb24oZSl7dGhpcy50aWxlSUQ9bmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLnRpbGVJRC5vdmVyc2NhbGVkWixlLnRpbGVJRC53cmFwLGUudGlsZUlELmNhbm9uaWNhbC56LGUudGlsZUlELmNhbm9uaWNhbC54LGUudGlsZUlELmNhbm9uaWNhbC55KSx0aGlzLnVpZD1lLnVpZCx0aGlzLnpvb209ZS56b29tLHRoaXMucGl4ZWxSYXRpbz1lLnBpeGVsUmF0aW8sdGhpcy50aWxlU2l6ZT1lLnRpbGVTaXplLHRoaXMuc291cmNlPWUuc291cmNlLHRoaXMub3ZlcnNjYWxpbmc9dGhpcy50aWxlSUQub3ZlcnNjYWxlRmFjdG9yKCksdGhpcy5zaG93Q29sbGlzaW9uQm94ZXM9ZS5zaG93Q29sbGlzaW9uQm94ZXMsdGhpcy5jb2xsZWN0UmVzb3VyY2VUaW1pbmc9ISFlLmNvbGxlY3RSZXNvdXJjZVRpbWluZ307ZnVuY3Rpb24gXyhlLHIpe2Zvcih2YXIgbj1uZXcgdC5kZWZhdWx0JDE2KHIpLGk9MCxhPWU7aTxhLmxlbmd0aDtpKz0xKWFbaV0ucmVjYWxjdWxhdGUobil9Yi5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9dGhpczt0aGlzLnN0YXR1cz1cInBhcnNpbmdcIix0aGlzLmRhdGE9ZSx0aGlzLmNvbGxpc2lvbkJveEFycmF5PW5ldyB0LkNvbGxpc2lvbkJveEFycmF5O3ZhciBvPW5ldyB0LmRlZmF1bHQkMjcoT2JqZWN0LmtleXMoZS5sYXllcnMpLnNvcnQoKSkscz1uZXcgdC5kZWZhdWx0JDExKHRoaXMudGlsZUlEKTtzLmJ1Y2tldExheWVySURzPVtdO3ZhciBsLGMsdSxoPXt9LGY9e2ZlYXR1cmVJbmRleDpzLGljb25EZXBlbmRlbmNpZXM6e30sZ2x5cGhEZXBlbmRlbmNpZXM6e319LHA9ci5mYW1pbGllc0J5U291cmNlW3RoaXMuc291cmNlXTtmb3IodmFyIGQgaW4gcCl7dmFyIHY9ZS5sYXllcnNbZF07aWYodil7MT09PXYudmVyc2lvbiYmdC53YXJuT25jZSgnVmVjdG9yIHRpbGUgc291cmNlIFwiJythLnNvdXJjZSsnXCIgbGF5ZXIgXCInK2QrJ1wiIGRvZXMgbm90IHVzZSB2ZWN0b3IgdGlsZSBzcGVjIHYyIGFuZCB0aGVyZWZvcmUgbWF5IGhhdmUgc29tZSByZW5kZXJpbmcgZXJyb3JzLicpO2Zvcih2YXIgbT1vLmVuY29kZShkKSx5PVtdLGI9MDtiPHYubGVuZ3RoO2IrKyl7dmFyIHc9di5mZWF0dXJlKGIpO3kucHVzaCh7ZmVhdHVyZTp3LGluZGV4OmIsc291cmNlTGF5ZXJJbmRleDptfSl9Zm9yKHZhciBrPTAsQT1wW2RdO2s8QS5sZW5ndGg7ays9MSl7dmFyIFQ9QVtrXSxNPVRbMF07TS5taW56b29tJiZhLnpvb208TWF0aC5mbG9vcihNLm1pbnpvb20pfHxNLm1heHpvb20mJmEuem9vbT49TS5tYXh6b29tfHxcIm5vbmVcIiE9PU0udmlzaWJpbGl0eSYmKF8oVCxhLnpvb20pLChoW00uaWRdPU0uY3JlYXRlQnVja2V0KHtpbmRleDpzLmJ1Y2tldExheWVySURzLmxlbmd0aCxsYXllcnM6VCx6b29tOmEuem9vbSxwaXhlbFJhdGlvOmEucGl4ZWxSYXRpbyxvdmVyc2NhbGluZzphLm92ZXJzY2FsaW5nLGNvbGxpc2lvbkJveEFycmF5OmEuY29sbGlzaW9uQm94QXJyYXksc291cmNlTGF5ZXJJbmRleDptfSkpLnBvcHVsYXRlKHksZikscy5idWNrZXRMYXllcklEcy5wdXNoKFQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpKX19fXZhciBTPXQubWFwT2JqZWN0KGYuZ2x5cGhEZXBlbmRlbmNpZXMsZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcChOdW1iZXIpfSk7T2JqZWN0LmtleXMoUykubGVuZ3RoP24uc2VuZChcImdldEdseXBoc1wiLHt1aWQ6dGhpcy51aWQsc3RhY2tzOlN9LGZ1bmN0aW9uKHQsZSl7bHx8KGw9dCxjPWUsQy5jYWxsKGEpKX0pOmM9e307dmFyIEU9T2JqZWN0LmtleXMoZi5pY29uRGVwZW5kZW5jaWVzKTtmdW5jdGlvbiBDKCl7aWYobClyZXR1cm4gaShsKTtpZihjJiZ1KXt2YXIgZT1uZXcgeChjKSxyPW5ldyB0LmRlZmF1bHQkMjgodSk7Zm9yKHZhciBuIGluIGgpe3ZhciBhPWhbbl07YSBpbnN0YW5jZW9mIHQuZGVmYXVsdCQxNCYmKF8oYS5sYXllcnMsdGhpcy56b29tKSxnKGEsYyxlLnBvc2l0aW9ucyx1LHIucG9zaXRpb25zLHRoaXMuc2hvd0NvbGxpc2lvbkJveGVzKSl9dGhpcy5zdGF0dXM9XCJkb25lXCIsaShudWxsLHtidWNrZXRzOnQudmFsdWVzKGgpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hdC5pc0VtcHR5KCl9KSxmZWF0dXJlSW5kZXg6cyxjb2xsaXNpb25Cb3hBcnJheTp0aGlzLmNvbGxpc2lvbkJveEFycmF5LGdseXBoQXRsYXNJbWFnZTplLmltYWdlLGljb25BdGxhc0ltYWdlOnIuaW1hZ2V9KX19RS5sZW5ndGg/bi5zZW5kKFwiZ2V0SW1hZ2VzXCIse2ljb25zOkV9LGZ1bmN0aW9uKHQsZSl7bHx8KGw9dCx1PWUsQy5jYWxsKGEpKX0pOnU9e30sQy5jYWxsKHRoaXMpfTt2YXIgdz1mdW5jdGlvbih0KXtyZXR1cm4hKCFwZXJmb3JtYW5jZXx8IXBlcmZvcm1hbmNlLmdldEVudHJpZXNCeU5hbWUpJiZwZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlOYW1lKHQpfTtmdW5jdGlvbiBrKGUscil7dmFyIG49dC5nZXRBcnJheUJ1ZmZlcihlLnJlcXVlc3QsZnVuY3Rpb24oZSxuKXtlP3IoZSk6biYmcihudWxsLHt2ZWN0b3JUaWxlOm5ldyB0LmRlZmF1bHQkMjkuVmVjdG9yVGlsZShuZXcgdC5kZWZhdWx0JDMwKG4uZGF0YSkpLHJhd0RhdGE6bi5kYXRhLGNhY2hlQ29udHJvbDpuLmNhY2hlQ29udHJvbCxleHBpcmVzOm4uZXhwaXJlc30pfSk7cmV0dXJuIGZ1bmN0aW9uKCl7bi5hYm9ydCgpLHIoKX19dmFyIEE9ZnVuY3Rpb24odCxlLHIpe3RoaXMuYWN0b3I9dCx0aGlzLmxheWVySW5kZXg9ZSx0aGlzLmxvYWRWZWN0b3JEYXRhPXJ8fGssdGhpcy5sb2FkaW5nPXt9LHRoaXMubG9hZGVkPXt9fTtBLnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMsaT1lLnVpZDt0aGlzLmxvYWRpbmd8fCh0aGlzLmxvYWRpbmc9e30pO3ZhciBhPXRoaXMubG9hZGluZ1tpXT1uZXcgYihlKTthLmFib3J0PXRoaXMubG9hZFZlY3RvckRhdGEoZSxmdW5jdGlvbihvLHMpe2lmKGRlbGV0ZSBuLmxvYWRpbmdbaV0sb3x8IXMpcmV0dXJuIHIobyk7dmFyIGw9cy5yYXdEYXRhLGM9e307cy5leHBpcmVzJiYoYy5leHBpcmVzPXMuZXhwaXJlcykscy5jYWNoZUNvbnRyb2wmJihjLmNhY2hlQ29udHJvbD1zLmNhY2hlQ29udHJvbCk7dmFyIHU9e307aWYoZS5yZXF1ZXN0JiZlLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nKXt2YXIgaD13KGUucmVxdWVzdC51cmwpO2gmJih1LnJlc291cmNlVGltaW5nPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaCkpKX1hLnZlY3RvclRpbGU9cy52ZWN0b3JUaWxlLGEucGFyc2Uocy52ZWN0b3JUaWxlLG4ubGF5ZXJJbmRleCxuLmFjdG9yLGZ1bmN0aW9uKGUsbil7aWYoZXx8IW4pcmV0dXJuIHIoZSk7cihudWxsLHQuZXh0ZW5kKHtyYXdUaWxlRGF0YTpsLnNsaWNlKDApfSxuLGMsdSkpfSksbi5sb2FkZWQ9bi5sb2FkZWR8fHt9LG4ubG9hZGVkW2ldPWF9KX0sQS5wcm90b3R5cGUucmVsb2FkVGlsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubG9hZGVkLG49dC51aWQsaT10aGlzO2lmKHImJnJbbl0pe3ZhciBhPXJbbl07YS5zaG93Q29sbGlzaW9uQm94ZXM9dC5zaG93Q29sbGlzaW9uQm94ZXM7dmFyIG89ZnVuY3Rpb24odCxyKXt2YXIgbj1hLnJlbG9hZENhbGxiYWNrO24mJihkZWxldGUgYS5yZWxvYWRDYWxsYmFjayxhLnBhcnNlKGEudmVjdG9yVGlsZSxpLmxheWVySW5kZXgsaS5hY3RvcixuKSksZSh0LHIpfTtcInBhcnNpbmdcIj09PWEuc3RhdHVzP2EucmVsb2FkQ2FsbGJhY2s9bzpcImRvbmVcIj09PWEuc3RhdHVzJiZhLnBhcnNlKGEudmVjdG9yVGlsZSx0aGlzLmxheWVySW5kZXgsdGhpcy5hY3RvcixvKX19LEEucHJvdG90eXBlLmFib3J0VGlsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubG9hZGluZyxuPXQudWlkO3ImJnJbbl0mJnJbbl0uYWJvcnQmJihyW25dLmFib3J0KCksZGVsZXRlIHJbbl0pLGUoKX0sQS5wcm90b3R5cGUucmVtb3ZlVGlsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubG9hZGVkLG49dC51aWQ7ciYmcltuXSYmZGVsZXRlIHJbbl0sZSgpfTt2YXIgVD1mdW5jdGlvbigpe3RoaXMubG9hZGluZz17fSx0aGlzLmxvYWRlZD17fX07VC5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj1lLnVpZCxpPWUuZW5jb2RpbmcsYT1uZXcgdC5kZWZhdWx0JDMxKG4pO3RoaXMubG9hZGluZ1tuXT1hLGEubG9hZEZyb21JbWFnZShlLnJhd0ltYWdlRGF0YSxpKSxkZWxldGUgdGhpcy5sb2FkaW5nW25dLHRoaXMubG9hZGVkPXRoaXMubG9hZGVkfHx7fSx0aGlzLmxvYWRlZFtuXT1hLHIobnVsbCxhKX0sVC5wcm90b3R5cGUucmVtb3ZlVGlsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxvYWRlZCxyPXQudWlkO2UmJmVbcl0mJmRlbGV0ZSBlW3JdfTt2YXIgTT17UkFESVVTOjYzNzgxMzcsRkxBVFRFTklORzoxLzI5OC4yNTcyMjM1NjMsUE9MQVJfUkFESVVTOjYzNTY3NTIuMzE0Mn07ZnVuY3Rpb24gUyh0KXt2YXIgZT0wO2lmKHQmJnQubGVuZ3RoPjApe2UrPU1hdGguYWJzKEUodFswXSkpO2Zvcih2YXIgcj0xO3I8dC5sZW5ndGg7cisrKWUtPU1hdGguYWJzKEUodFtyXSkpfXJldHVybiBlfWZ1bmN0aW9uIEUodCl7dmFyIGUscixuLGksYSxvLHM9MCxsPXQubGVuZ3RoO2lmKGw+Mil7Zm9yKG89MDtvPGw7bysrKW89PT1sLTI/KG49bC0yLGk9bC0xLGE9MCk6bz09PWwtMT8obj1sLTEsaT0wLGE9MSk6KG49byxpPW8rMSxhPW8rMiksZT10W25dLHI9dFtpXSxzKz0oQyh0W2FdWzBdKS1DKGVbMF0pKSpNYXRoLnNpbihDKHJbMV0pKTtzPXMqTS5SQURJVVMqTS5SQURJVVMvMn1yZXR1cm4gc31mdW5jdGlvbiBDKHQpe3JldHVybiB0Kk1hdGguUEkvMTgwfXZhciBMPXtnZW9tZXRyeTpmdW5jdGlvbiB0KGUpe3ZhciByLG49MDtzd2l0Y2goZS50eXBlKXtjYXNlXCJQb2x5Z29uXCI6cmV0dXJuIFMoZS5jb29yZGluYXRlcyk7Y2FzZVwiTXVsdGlQb2x5Z29uXCI6Zm9yKHI9MDtyPGUuY29vcmRpbmF0ZXMubGVuZ3RoO3IrKyluKz1TKGUuY29vcmRpbmF0ZXNbcl0pO3JldHVybiBuO2Nhc2VcIlBvaW50XCI6Y2FzZVwiTXVsdGlQb2ludFwiOmNhc2VcIkxpbmVTdHJpbmdcIjpjYXNlXCJNdWx0aUxpbmVTdHJpbmdcIjpyZXR1cm4gMDtjYXNlXCJHZW9tZXRyeUNvbGxlY3Rpb25cIjpmb3Iocj0wO3I8ZS5nZW9tZXRyaWVzLmxlbmd0aDtyKyspbis9dChlLmdlb21ldHJpZXNbcl0pO3JldHVybiBufX0scmluZzpFfTtmdW5jdGlvbiB6KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0KHIsZSl9fWZ1bmN0aW9uIE8odCxlKXtlPSEhZSx0WzBdPUkodFswXSxlKTtmb3IodmFyIHI9MTtyPHQubGVuZ3RoO3IrKyl0W3JdPUkodFtyXSwhZSk7cmV0dXJuIHR9ZnVuY3Rpb24gSSh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTC5yaW5nKHQpPj0wfSh0KT09PWU/dDp0LnJldmVyc2UoKX12YXIgRD10LmRlZmF1bHQkMjkuVmVjdG9yVGlsZUZlYXR1cmUucHJvdG90eXBlLnRvR2VvSlNPTixQPWZ1bmN0aW9uKGUpe3RoaXMuX2ZlYXR1cmU9ZSx0aGlzLmV4dGVudD10LmRlZmF1bHQkOCx0aGlzLnR5cGU9ZS50eXBlLHRoaXMucHJvcGVydGllcz1lLnRhZ3MsXCJpZFwiaW4gZSYmIWlzTmFOKGUuaWQpJiYodGhpcy5pZD1wYXJzZUludChlLmlkLDEwKSl9O1AucHJvdG90eXBlLmxvYWRHZW9tZXRyeT1mdW5jdGlvbigpe2lmKDE9PT10aGlzLl9mZWF0dXJlLnR5cGUpe2Zvcih2YXIgZT1bXSxyPTAsbj10aGlzLl9mZWF0dXJlLmdlb21ldHJ5O3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXTtlLnB1c2goW25ldyB0LmRlZmF1bHQkMShpWzBdLGlbMV0pXSl9cmV0dXJuIGV9Zm9yKHZhciBhPVtdLG89MCxzPXRoaXMuX2ZlYXR1cmUuZ2VvbWV0cnk7bzxzLmxlbmd0aDtvKz0xKXtmb3IodmFyIGw9W10sYz0wLHU9c1tvXTtjPHUubGVuZ3RoO2MrPTEpe3ZhciBoPXVbY107bC5wdXNoKG5ldyB0LmRlZmF1bHQkMShoWzBdLGhbMV0pKX1hLnB1c2gobCl9cmV0dXJuIGF9LFAucHJvdG90eXBlLnRvR2VvSlNPTj1mdW5jdGlvbih0LGUscil7cmV0dXJuIEQuY2FsbCh0aGlzLHQsZSxyKX07dmFyIFI9ZnVuY3Rpb24oZSl7dGhpcy5sYXllcnM9e19nZW9qc29uVGlsZUxheWVyOnRoaXN9LHRoaXMubmFtZT1cIl9nZW9qc29uVGlsZUxheWVyXCIsdGhpcy5leHRlbnQ9dC5kZWZhdWx0JDgsdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5fZmVhdHVyZXM9ZX07Ui5wcm90b3R5cGUuZmVhdHVyZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFAodGhpcy5fZmVhdHVyZXNbdF0pfTt2YXIgRj10Ll9fbW9kdWxlRXhwb3J0cy5WZWN0b3JUaWxlRmVhdHVyZSxCPU47ZnVuY3Rpb24gTih0LGUpe3RoaXMub3B0aW9ucz1lfHx7fSx0aGlzLmZlYXR1cmVzPXQsdGhpcy5sZW5ndGg9dC5sZW5ndGh9ZnVuY3Rpb24gaih0LGUpe3RoaXMuaWQ9XCJudW1iZXJcIj09dHlwZW9mIHQuaWQ/dC5pZDp2b2lkIDAsdGhpcy50eXBlPXQudHlwZSx0aGlzLnJhd0dlb21ldHJ5PTE9PT10LnR5cGU/W3QuZ2VvbWV0cnldOnQuZ2VvbWV0cnksdGhpcy5wcm9wZXJ0aWVzPXQudGFncyx0aGlzLmV4dGVudD1lfHw0MDk2fU4ucHJvdG90eXBlLmZlYXR1cmU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBqKHRoaXMuZmVhdHVyZXNbdF0sdGhpcy5vcHRpb25zLmV4dGVudCl9LGoucHJvdG90eXBlLmxvYWRHZW9tZXRyeT1mdW5jdGlvbigpe3ZhciBlPXRoaXMucmF3R2VvbWV0cnk7dGhpcy5nZW9tZXRyeT1bXTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7Zm9yKHZhciBuPWVbcl0saT1bXSxhPTA7YTxuLmxlbmd0aDthKyspaS5wdXNoKG5ldyB0LmRlZmF1bHQkMzIoblthXVswXSxuW2FdWzFdKSk7dGhpcy5nZW9tZXRyeS5wdXNoKGkpfXJldHVybiB0aGlzLmdlb21ldHJ5fSxqLnByb3RvdHlwZS5iYm94PWZ1bmN0aW9uKCl7dGhpcy5nZW9tZXRyeXx8dGhpcy5sb2FkR2VvbWV0cnkoKTtmb3IodmFyIHQ9dGhpcy5nZW9tZXRyeSxlPTEvMCxyPS0xLzAsbj0xLzAsaT0tMS8wLGE9MDthPHQubGVuZ3RoO2ErKylmb3IodmFyIG89dFthXSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107ZT1NYXRoLm1pbihlLGwueCkscj1NYXRoLm1heChyLGwueCksbj1NYXRoLm1pbihuLGwueSksaT1NYXRoLm1heChpLGwueSl9cmV0dXJuW2UsbixyLGldfSxqLnByb3RvdHlwZS50b0dlb0pTT049Ri5wcm90b3R5cGUudG9HZW9KU09OO3ZhciBWPUgsVT1ILHE9QjtmdW5jdGlvbiBIKGUpe3ZhciByPW5ldyB0Ll9fbW9kdWxlRXhwb3J0cyQxO3JldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiB0LmxheWVycyllLndyaXRlTWVzc2FnZSgzLEcsdC5sYXllcnNbcl0pfShlLHIpLHIuZmluaXNoKCl9ZnVuY3Rpb24gRyh0LGUpe3ZhciByO2Uud3JpdGVWYXJpbnRGaWVsZCgxNSx0LnZlcnNpb258fDEpLGUud3JpdGVTdHJpbmdGaWVsZCgxLHQubmFtZXx8XCJcIiksZS53cml0ZVZhcmludEZpZWxkKDUsdC5leHRlbnR8fDQwOTYpO3ZhciBuPXtrZXlzOltdLHZhbHVlczpbXSxrZXljYWNoZTp7fSx2YWx1ZWNhY2hlOnt9fTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKW4uZmVhdHVyZT10LmZlYXR1cmUociksZS53cml0ZU1lc3NhZ2UoMixZLG4pO3ZhciBpPW4ua2V5cztmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWUud3JpdGVTdHJpbmdGaWVsZCgzLGlbcl0pO3ZhciBhPW4udmFsdWVzO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspZS53cml0ZU1lc3NhZ2UoNCxKLGFbcl0pfWZ1bmN0aW9uIFkodCxlKXt2YXIgcj10LmZlYXR1cmU7dm9pZCAwIT09ci5pZCYmZS53cml0ZVZhcmludEZpZWxkKDEsci5pZCksZS53cml0ZU1lc3NhZ2UoMixXLHQpLGUud3JpdGVWYXJpbnRGaWVsZCgzLHIudHlwZSksZS53cml0ZU1lc3NhZ2UoNCwkLHIpfWZ1bmN0aW9uIFcodCxlKXt2YXIgcj10LmZlYXR1cmUsbj10LmtleXMsaT10LnZhbHVlcyxhPXQua2V5Y2FjaGUsbz10LnZhbHVlY2FjaGU7Zm9yKHZhciBzIGluIHIucHJvcGVydGllcyl7dmFyIGw9YVtzXTt2b2lkIDA9PT1sJiYobi5wdXNoKHMpLGw9bi5sZW5ndGgtMSxhW3NdPWwpLGUud3JpdGVWYXJpbnQobCk7dmFyIGM9ci5wcm9wZXJ0aWVzW3NdLHU9dHlwZW9mIGM7XCJzdHJpbmdcIiE9PXUmJlwiYm9vbGVhblwiIT09dSYmXCJudW1iZXJcIiE9PXUmJihjPUpTT04uc3RyaW5naWZ5KGMpKTt2YXIgaD11K1wiOlwiK2MsZj1vW2hdO3ZvaWQgMD09PWYmJihpLnB1c2goYyksZj1pLmxlbmd0aC0xLG9baF09ZiksZS53cml0ZVZhcmludChmKX19ZnVuY3Rpb24gWCh0LGUpe3JldHVybihlPDwzKSsoNyZ0KX1mdW5jdGlvbiBaKHQpe3JldHVybiB0PDwxXnQ+PjMxfWZ1bmN0aW9uICQodCxlKXtmb3IodmFyIHI9dC5sb2FkR2VvbWV0cnkoKSxuPXQudHlwZSxpPTAsYT0wLG89ci5sZW5ndGgscz0wO3M8bztzKyspe3ZhciBsPXJbc10sYz0xOzE9PT1uJiYoYz1sLmxlbmd0aCksZS53cml0ZVZhcmludChYKDEsYykpO2Zvcih2YXIgdT0zPT09bj9sLmxlbmd0aC0xOmwubGVuZ3RoLGg9MDtoPHU7aCsrKXsxPT09aCYmMSE9PW4mJmUud3JpdGVWYXJpbnQoWCgyLHUtMSkpO3ZhciBmPWxbaF0ueC1pLHA9bFtoXS55LWE7ZS53cml0ZVZhcmludChaKGYpKSxlLndyaXRlVmFyaW50KFoocCkpLGkrPWYsYSs9cH0zPT09biYmZS53cml0ZVZhcmludChYKDcsMCkpfX1mdW5jdGlvbiBKKHQsZSl7dmFyIHI9dHlwZW9mIHQ7XCJzdHJpbmdcIj09PXI/ZS53cml0ZVN0cmluZ0ZpZWxkKDEsdCk6XCJib29sZWFuXCI9PT1yP2Uud3JpdGVCb29sZWFuRmllbGQoNyx0KTpcIm51bWJlclwiPT09ciYmKHQlMSE9MD9lLndyaXRlRG91YmxlRmllbGQoMyx0KTp0PDA/ZS53cml0ZVNWYXJpbnRGaWVsZCg2LHQpOmUud3JpdGVWYXJpbnRGaWVsZCg1LHQpKX1WLmZyb21WZWN0b3JUaWxlSnM9VSxWLmZyb21HZW9qc29uVnQ9ZnVuY3Rpb24odCxlKXtlPWV8fHt9O3ZhciByPXt9O2Zvcih2YXIgbiBpbiB0KXJbbl09bmV3IEIodFtuXS5mZWF0dXJlcyxlKSxyW25dLm5hbWU9bixyW25dLnZlcnNpb249ZS52ZXJzaW9uLHJbbl0uZXh0ZW50PWUuZXh0ZW50O3JldHVybiBIKHtsYXllcnM6cn0pfSxWLkdlb0pTT05XcmFwcGVyPXE7dmFyIEs9ZnVuY3Rpb24gdChlLHIsbixpLGEsbyl7aWYoIShhLWk8PW4pKXt2YXIgcz1NYXRoLmZsb29yKChpK2EpLzIpOyFmdW5jdGlvbiB0KGUscixuLGksYSxvKXtmb3IoO2E+aTspe2lmKGEtaT42MDApe3ZhciBzPWEtaSsxLGw9bi1pKzEsYz1NYXRoLmxvZyhzKSx1PS41Kk1hdGguZXhwKDIqYy8zKSxoPS41Kk1hdGguc3FydChjKnUqKHMtdSkvcykqKGwtcy8yPDA/LTE6MSk7dChlLHIsbixNYXRoLm1heChpLE1hdGguZmxvb3Iobi1sKnUvcytoKSksTWF0aC5taW4oYSxNYXRoLmZsb29yKG4rKHMtbCkqdS9zK2gpKSxvKX12YXIgZj1yWzIqbitvXSxwPWksZD1hO2ZvcihRKGUscixpLG4pLHJbMiphK29dPmYmJlEoZSxyLGksYSk7cDxkOyl7Zm9yKFEoZSxyLHAsZCkscCsrLGQtLTtyWzIqcCtvXTxmOylwKys7Zm9yKDtyWzIqZCtvXT5mOylkLS19clsyKmkrb109PT1mP1EoZSxyLGksZCk6UShlLHIsKytkLGEpLGQ8PW4mJihpPWQrMSksbjw9ZCYmKGE9ZC0xKX19KGUscixzLGksYSxvJTIpLHQoZSxyLG4saSxzLTEsbysxKSx0KGUscixuLHMrMSxhLG8rMSl9fTtmdW5jdGlvbiBRKHQsZSxyLG4pe3R0KHQscixuKSx0dChlLDIqciwyKm4pLHR0KGUsMipyKzEsMipuKzEpfWZ1bmN0aW9uIHR0KHQsZSxyKXt2YXIgbj10W2VdO3RbZV09dFtyXSx0W3JdPW59ZnVuY3Rpb24gZXQodCxlLHIsbil7dmFyIGk9dC1yLGE9ZS1uO3JldHVybiBpKmkrYSphfXZhciBydD1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybiBuZXcgbnQodCxlLHIsbixpKX07ZnVuY3Rpb24gbnQodCxlLHIsbixpKXtlPWV8fGl0LHI9cnx8YXQsaT1pfHxBcnJheSx0aGlzLm5vZGVTaXplPW58fDY0LHRoaXMucG9pbnRzPXQsdGhpcy5pZHM9bmV3IGkodC5sZW5ndGgpLHRoaXMuY29vcmRzPW5ldyBpKDIqdC5sZW5ndGgpO2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXRoaXMuaWRzW2FdPWEsdGhpcy5jb29yZHNbMiphXT1lKHRbYV0pLHRoaXMuY29vcmRzWzIqYSsxXT1yKHRbYV0pO0sodGhpcy5pZHMsdGhpcy5jb29yZHMsdGhpcy5ub2RlU2l6ZSwwLHRoaXMuaWRzLmxlbmd0aC0xLDApfWZ1bmN0aW9uIGl0KHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIGF0KHQpe3JldHVybiB0WzFdfW50LnByb3RvdHlwZT17cmFuZ2U6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcyxsLGM9WzAsdC5sZW5ndGgtMSwwXSx1PVtdO2MubGVuZ3RoOyl7dmFyIGg9Yy5wb3AoKSxmPWMucG9wKCkscD1jLnBvcCgpO2lmKGYtcDw9bylmb3IodmFyIGQ9cDtkPD1mO2QrKylzPWVbMipkXSxsPWVbMipkKzFdLHM+PXImJnM8PWkmJmw+PW4mJmw8PWEmJnUucHVzaCh0W2RdKTtlbHNle3ZhciBnPU1hdGguZmxvb3IoKHArZikvMik7cz1lWzIqZ10sbD1lWzIqZysxXSxzPj1yJiZzPD1pJiZsPj1uJiZsPD1hJiZ1LnB1c2godFtnXSk7dmFyIHY9KGgrMSklMjsoMD09PWg/cjw9czpuPD1sKSYmKGMucHVzaChwKSxjLnB1c2goZy0xKSxjLnB1c2godikpLCgwPT09aD9pPj1zOmE+PWwpJiYoYy5wdXNoKGcrMSksYy5wdXNoKGYpLGMucHVzaCh2KSl9fXJldHVybiB1fSh0aGlzLmlkcyx0aGlzLmNvb3Jkcyx0LGUscixuLHRoaXMubm9kZVNpemUpfSx3aXRoaW46ZnVuY3Rpb24odCxlLHIpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvPVswLHQubGVuZ3RoLTEsMF0scz1bXSxsPWkqaTtvLmxlbmd0aDspe3ZhciBjPW8ucG9wKCksdT1vLnBvcCgpLGg9by5wb3AoKTtpZih1LWg8PWEpZm9yKHZhciBmPWg7Zjw9dTtmKyspZXQoZVsyKmZdLGVbMipmKzFdLHIsbik8PWwmJnMucHVzaCh0W2ZdKTtlbHNle3ZhciBwPU1hdGguZmxvb3IoKGgrdSkvMiksZD1lWzIqcF0sZz1lWzIqcCsxXTtldChkLGcscixuKTw9bCYmcy5wdXNoKHRbcF0pO3ZhciB2PShjKzEpJTI7KDA9PT1jP3ItaTw9ZDpuLWk8PWcpJiYoby5wdXNoKGgpLG8ucHVzaChwLTEpLG8ucHVzaCh2KSksKDA9PT1jP3IraT49ZDpuK2k+PWcpJiYoby5wdXNoKHArMSksby5wdXNoKHUpLG8ucHVzaCh2KSl9fXJldHVybiBzfSh0aGlzLmlkcyx0aGlzLmNvb3Jkcyx0LGUscix0aGlzLm5vZGVTaXplKX19O2Z1bmN0aW9uIG90KHQpe3RoaXMub3B0aW9ucz1wdChPYmplY3QuY3JlYXRlKHRoaXMub3B0aW9ucyksdCksdGhpcy50cmVlcz1uZXcgQXJyYXkodGhpcy5vcHRpb25zLm1heFpvb20rMSl9ZnVuY3Rpb24gc3QodCxlLHIsbixpKXtyZXR1cm57eDp0LHk6ZSx6b29tOjEvMCxpZDpuLHByb3BlcnRpZXM6aSxwYXJlbnRJZDotMSxudW1Qb2ludHM6cn19ZnVuY3Rpb24gbHQodCxlKXt2YXIgcj10Lmdlb21ldHJ5LmNvb3JkaW5hdGVzO3JldHVybnt4Omh0KHJbMF0pLHk6ZnQoclsxXSksem9vbToxLzAsaWQ6ZSxwYXJlbnRJZDotMX19ZnVuY3Rpb24gY3QodCl7cmV0dXJue3R5cGU6XCJGZWF0dXJlXCIscHJvcGVydGllczp1dCh0KSxnZW9tZXRyeTp7dHlwZTpcIlBvaW50XCIsY29vcmRpbmF0ZXM6WyhuPXQueCwzNjAqKG4tLjUpKSwoZT10Lnkscj0oMTgwLTM2MCplKSpNYXRoLlBJLzE4MCwzNjAqTWF0aC5hdGFuKE1hdGguZXhwKHIpKS9NYXRoLlBJLTkwKV19fTt2YXIgZSxyLG59ZnVuY3Rpb24gdXQodCl7dmFyIGU9dC5udW1Qb2ludHMscj1lPj0xZTQ/TWF0aC5yb3VuZChlLzFlMykrXCJrXCI6ZT49MWUzP01hdGgucm91bmQoZS8xMDApLzEwK1wia1wiOmU7cmV0dXJuIHB0KHB0KHt9LHQucHJvcGVydGllcykse2NsdXN0ZXI6ITAsY2x1c3Rlcl9pZDp0LmlkLHBvaW50X2NvdW50OmUscG9pbnRfY291bnRfYWJicmV2aWF0ZWQ6cn0pfWZ1bmN0aW9uIGh0KHQpe3JldHVybiB0LzM2MCsuNX1mdW5jdGlvbiBmdCh0KXt2YXIgZT1NYXRoLnNpbih0Kk1hdGguUEkvMTgwKSxyPS41LS4yNSpNYXRoLmxvZygoMStlKS8oMS1lKSkvTWF0aC5QSTtyZXR1cm4gcjwwPzA6cj4xPzE6cn1mdW5jdGlvbiBwdCh0LGUpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXTtyZXR1cm4gdH1mdW5jdGlvbiBkdCh0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIGd0KHQpe3JldHVybiB0Lnl9ZnVuY3Rpb24gdnQodCxlLHIsbixpLGEpe3ZhciBvPWktcixzPWEtbjtpZigwIT09b3x8MCE9PXMpe3ZhciBsPSgodC1yKSpvKyhlLW4pKnMpLyhvKm8rcypzKTtsPjE/KHI9aSxuPWEpOmw+MCYmKHIrPW8qbCxuKz1zKmwpfXJldHVybihvPXQtcikqbysocz1lLW4pKnN9ZnVuY3Rpb24gbXQodCxlLHIsbil7dmFyIGk9e2lkOnR8fG51bGwsdHlwZTplLGdlb21ldHJ5OnIsdGFnczpuLG1pblg6MS8wLG1pblk6MS8wLG1heFg6LTEvMCxtYXhZOi0xLzB9O3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10Lmdlb21ldHJ5LHI9dC50eXBlO2lmKFwiUG9pbnRcIj09PXJ8fFwiTXVsdGlQb2ludFwiPT09cnx8XCJMaW5lU3RyaW5nXCI9PT1yKXl0KHQsZSk7ZWxzZSBpZihcIlBvbHlnb25cIj09PXJ8fFwiTXVsdGlMaW5lU3RyaW5nXCI9PT1yKWZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXl0KHQsZVtuXSk7ZWxzZSBpZihcIk11bHRpUG9seWdvblwiPT09cilmb3Iobj0wO248ZS5sZW5ndGg7bisrKWZvcih2YXIgaT0wO2k8ZVtuXS5sZW5ndGg7aSsrKXl0KHQsZVtuXVtpXSl9KGkpLGl9ZnVuY3Rpb24geXQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrPTMpdC5taW5YPU1hdGgubWluKHQubWluWCxlW3JdKSx0Lm1pblk9TWF0aC5taW4odC5taW5ZLGVbcisxXSksdC5tYXhYPU1hdGgubWF4KHQubWF4WCxlW3JdKSx0Lm1heFk9TWF0aC5tYXgodC5tYXhZLGVbcisxXSl9ZnVuY3Rpb24geHQodCxlLHIpe2lmKGUuZ2VvbWV0cnkpe3ZhciBuPWUuZ2VvbWV0cnkuY29vcmRpbmF0ZXMsaT1lLmdlb21ldHJ5LnR5cGUsYT1NYXRoLnBvdyhyLnRvbGVyYW5jZS8oKDE8PHIubWF4Wm9vbSkqci5leHRlbnQpLDIpLG89W107aWYoXCJQb2ludFwiPT09aSlidChuLG8pO2Vsc2UgaWYoXCJNdWx0aVBvaW50XCI9PT1pKWZvcih2YXIgcz0wO3M8bi5sZW5ndGg7cysrKWJ0KG5bc10sbyk7ZWxzZSBpZihcIkxpbmVTdHJpbmdcIj09PWkpX3QobixvLGEsITEpO2Vsc2UgaWYoXCJNdWx0aUxpbmVTdHJpbmdcIj09PWkpaWYoci5saW5lTWV0cmljcylmb3Iocz0wO3M8bi5sZW5ndGg7cysrKXJldHVybiBvPVtdLF90KG5bc10sbyxhLCExKSx2b2lkIHQucHVzaChtdChlLmlkLFwiTGluZVN0cmluZ1wiLG8sZS5wcm9wZXJ0aWVzKSk7ZWxzZSB3dChuLG8sYSwhMSk7ZWxzZSBpZihcIlBvbHlnb25cIj09PWkpd3QobixvLGEsITApO2Vsc2V7aWYoXCJNdWx0aVBvbHlnb25cIiE9PWkpe2lmKFwiR2VvbWV0cnlDb2xsZWN0aW9uXCI9PT1pKXtmb3Iocz0wO3M8ZS5nZW9tZXRyeS5nZW9tZXRyaWVzLmxlbmd0aDtzKyspeHQodCx7aWQ6ZS5pZCxnZW9tZXRyeTplLmdlb21ldHJ5Lmdlb21ldHJpZXNbc10scHJvcGVydGllczplLnByb3BlcnRpZXN9LHIpO3JldHVybn10aHJvdyBuZXcgRXJyb3IoXCJJbnB1dCBkYXRhIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LlwiKX1mb3Iocz0wO3M8bi5sZW5ndGg7cysrKXt2YXIgbD1bXTt3dChuW3NdLGwsYSwhMCksby5wdXNoKGwpfX10LnB1c2gobXQoZS5pZCxpLG8sZS5wcm9wZXJ0aWVzKSl9fWZ1bmN0aW9uIGJ0KHQsZSl7ZS5wdXNoKGt0KHRbMF0pKSxlLnB1c2goQXQodFsxXSkpLGUucHVzaCgwKX1mdW5jdGlvbiBfdCh0LGUscixuKXtmb3IodmFyIGksYSxvPTAscz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbD1rdCh0W3NdWzBdKSxjPUF0KHRbc11bMV0pO2UucHVzaChsKSxlLnB1c2goYyksZS5wdXNoKDApLHM+MCYmKG8rPW4/KGkqYy1sKmEpLzI6TWF0aC5zcXJ0KE1hdGgucG93KGwtaSwyKStNYXRoLnBvdyhjLWEsMikpKSxpPWwsYT1jfXZhciB1PWUubGVuZ3RoLTM7ZVsyXT0xLGZ1bmN0aW9uIHQoZSxyLG4saSl7Zm9yKHZhciBhLG89aSxzPWVbcl0sbD1lW3IrMV0sYz1lW25dLHU9ZVtuKzFdLGg9ciszO2g8bjtoKz0zKXt2YXIgZj12dChlW2hdLGVbaCsxXSxzLGwsYyx1KTtmPm8mJihhPWgsbz1mKX1vPmkmJihhLXI+MyYmdChlLHIsYSxpKSxlW2ErMl09byxuLWE+MyYmdChlLGEsbixpKSl9KGUsMCx1LHIpLGVbdSsyXT0xLGUuc2l6ZT1NYXRoLmFicyhvKSxlLnN0YXJ0PTAsZS5lbmQ9ZS5zaXplfWZ1bmN0aW9uIHd0KHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT1bXTtfdCh0W2ldLGEscixuKSxlLnB1c2goYSl9fWZ1bmN0aW9uIGt0KHQpe3JldHVybiB0LzM2MCsuNX1mdW5jdGlvbiBBdCh0KXt2YXIgZT1NYXRoLnNpbih0Kk1hdGguUEkvMTgwKSxyPS41LS4yNSpNYXRoLmxvZygoMStlKS8oMS1lKSkvTWF0aC5QSTtyZXR1cm4gcjwwPzA6cj4xPzE6cn1mdW5jdGlvbiBUdCh0LGUscixuLGksYSxvLHMpe2lmKG4vPWUsYT49KHIvPWUpJiZvPD1uKXJldHVybiB0O2lmKGE+bnx8bzxyKXJldHVybiBudWxsO2Zvcih2YXIgbD1bXSxjPTA7Yzx0Lmxlbmd0aDtjKyspe3ZhciB1PXRbY10saD11Lmdlb21ldHJ5LGY9dS50eXBlLHA9MD09PWk/dS5taW5YOnUubWluWSxkPTA9PT1pP3UubWF4WDp1Lm1heFk7aWYocD49ciYmZDw9bilsLnB1c2godSk7ZWxzZSBpZighKHA+bnx8ZDxyKSl7dmFyIGc9W107aWYoXCJQb2ludFwiPT09Znx8XCJNdWx0aVBvaW50XCI9PT1mKU10KGgsZyxyLG4saSk7ZWxzZSBpZihcIkxpbmVTdHJpbmdcIj09PWYpU3QoaCxnLHIsbixpLCExLHMubGluZU1ldHJpY3MpO2Vsc2UgaWYoXCJNdWx0aUxpbmVTdHJpbmdcIj09PWYpQ3QoaCxnLHIsbixpLCExKTtlbHNlIGlmKFwiUG9seWdvblwiPT09ZilDdChoLGcscixuLGksITApO2Vsc2UgaWYoXCJNdWx0aVBvbHlnb25cIj09PWYpZm9yKHZhciB2PTA7djxoLmxlbmd0aDt2Kyspe3ZhciBtPVtdO0N0KGhbdl0sbSxyLG4saSwhMCksbS5sZW5ndGgmJmcucHVzaChtKX1pZihnLmxlbmd0aCl7aWYocy5saW5lTWV0cmljcyYmXCJMaW5lU3RyaW5nXCI9PT1mKXtmb3Iodj0wO3Y8Zy5sZW5ndGg7disrKWwucHVzaChtdCh1LmlkLGYsZ1t2XSx1LnRhZ3MpKTtjb250aW51ZX1cIkxpbmVTdHJpbmdcIiE9PWYmJlwiTXVsdGlMaW5lU3RyaW5nXCIhPT1mfHwoMT09PWcubGVuZ3RoPyhmPVwiTGluZVN0cmluZ1wiLGc9Z1swXSk6Zj1cIk11bHRpTGluZVN0cmluZ1wiKSxcIlBvaW50XCIhPT1mJiZcIk11bHRpUG9pbnRcIiE9PWZ8fChmPTM9PT1nLmxlbmd0aD9cIlBvaW50XCI6XCJNdWx0aVBvaW50XCIpLGwucHVzaChtdCh1LmlkLGYsZyx1LnRhZ3MpKX19fXJldHVybiBsLmxlbmd0aD9sOm51bGx9ZnVuY3Rpb24gTXQodCxlLHIsbixpKXtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErPTMpe3ZhciBvPXRbYStpXTtvPj1yJiZvPD1uJiYoZS5wdXNoKHRbYV0pLGUucHVzaCh0W2ErMV0pLGUucHVzaCh0W2ErMl0pKX19ZnVuY3Rpb24gU3QodCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzLGwsYz1FdCh0KSx1PTA9PT1pP3p0Ok90LGg9dC5zdGFydCxmPTA7Zjx0Lmxlbmd0aC0zO2YrPTMpe3ZhciBwPXRbZl0sZD10W2YrMV0sZz10W2YrMl0sdj10W2YrM10sbT10W2YrNF0seT0wPT09aT9wOmQseD0wPT09aT92Om0sYj0hMTtvJiYocz1NYXRoLnNxcnQoTWF0aC5wb3cocC12LDIpK01hdGgucG93KGQtbSwyKSkpLHk8cj94Pj1yJiYobD11KGMscCxkLHYsbSxyKSxvJiYoYy5zdGFydD1oK3MqbCkpOnk+bj94PD1uJiYobD11KGMscCxkLHYsbSxuKSxvJiYoYy5zdGFydD1oK3MqbCkpOkx0KGMscCxkLGcpLHg8ciYmeT49ciYmKGw9dShjLHAsZCx2LG0sciksYj0hMCkseD5uJiZ5PD1uJiYobD11KGMscCxkLHYsbSxuKSxiPSEwKSwhYSYmYiYmKG8mJihjLmVuZD1oK3MqbCksZS5wdXNoKGMpLGM9RXQodCkpLG8mJihoKz1zKX12YXIgXz10Lmxlbmd0aC0zO3A9dFtfXSxkPXRbXysxXSxnPXRbXysyXSwoeT0wPT09aT9wOmQpPj1yJiZ5PD1uJiZMdChjLHAsZCxnKSxfPWMubGVuZ3RoLTMsYSYmXz49MyYmKGNbX10hPT1jWzBdfHxjW18rMV0hPT1jWzFdKSYmTHQoYyxjWzBdLGNbMV0sY1syXSksYy5sZW5ndGgmJmUucHVzaChjKX1mdW5jdGlvbiBFdCh0KXt2YXIgZT1bXTtyZXR1cm4gZS5zaXplPXQuc2l6ZSxlLnN0YXJ0PXQuc3RhcnQsZS5lbmQ9dC5lbmQsZX1mdW5jdGlvbiBDdCh0LGUscixuLGksYSl7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspU3QodFtvXSxlLHIsbixpLGEsITEpfWZ1bmN0aW9uIEx0KHQsZSxyLG4pe3QucHVzaChlKSx0LnB1c2gociksdC5wdXNoKG4pfWZ1bmN0aW9uIHp0KHQsZSxyLG4saSxhKXt2YXIgbz0oYS1lKS8obi1lKTtyZXR1cm4gdC5wdXNoKGEpLHQucHVzaChyKyhpLXIpKm8pLHQucHVzaCgxKSxvfWZ1bmN0aW9uIE90KHQsZSxyLG4saSxhKXt2YXIgbz0oYS1yKS8oaS1yKTtyZXR1cm4gdC5wdXNoKGUrKG4tZSkqbyksdC5wdXNoKGEpLHQucHVzaCgxKSxvfWZ1bmN0aW9uIEl0KHQsZSl7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGksYT10W25dLG89YS50eXBlO2lmKFwiUG9pbnRcIj09PW98fFwiTXVsdGlQb2ludFwiPT09b3x8XCJMaW5lU3RyaW5nXCI9PT1vKWk9RHQoYS5nZW9tZXRyeSxlKTtlbHNlIGlmKFwiTXVsdGlMaW5lU3RyaW5nXCI9PT1vfHxcIlBvbHlnb25cIj09PW8pe2k9W107Zm9yKHZhciBzPTA7czxhLmdlb21ldHJ5Lmxlbmd0aDtzKyspaS5wdXNoKER0KGEuZ2VvbWV0cnlbc10sZSkpfWVsc2UgaWYoXCJNdWx0aVBvbHlnb25cIj09PW8pZm9yKGk9W10scz0wO3M8YS5nZW9tZXRyeS5sZW5ndGg7cysrKXtmb3IodmFyIGw9W10sYz0wO2M8YS5nZW9tZXRyeVtzXS5sZW5ndGg7YysrKWwucHVzaChEdChhLmdlb21ldHJ5W3NdW2NdLGUpKTtpLnB1c2gobCl9ci5wdXNoKG10KGEuaWQsbyxpLGEudGFncykpfXJldHVybiByfWZ1bmN0aW9uIER0KHQsZSl7dmFyIHI9W107ci5zaXplPXQuc2l6ZSx2b2lkIDAhPT10LnN0YXJ0JiYoci5zdGFydD10LnN0YXJ0LHIuZW5kPXQuZW5kKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rPTMpci5wdXNoKHRbbl0rZSx0W24rMV0sdFtuKzJdKTtyZXR1cm4gcn1mdW5jdGlvbiBQdCh0LGUpe2lmKHQudHJhbnNmb3JtZWQpcmV0dXJuIHQ7dmFyIHIsbixpLGE9MTw8dC56LG89dC54LHM9dC55O2ZvcihyPTA7cjx0LmZlYXR1cmVzLmxlbmd0aDtyKyspe3ZhciBsPXQuZmVhdHVyZXNbcl0sYz1sLmdlb21ldHJ5LHU9bC50eXBlO2lmKGwuZ2VvbWV0cnk9W10sMT09PXUpZm9yKG49MDtuPGMubGVuZ3RoO24rPTIpbC5nZW9tZXRyeS5wdXNoKFJ0KGNbbl0sY1tuKzFdLGUsYSxvLHMpKTtlbHNlIGZvcihuPTA7bjxjLmxlbmd0aDtuKyspe3ZhciBoPVtdO2ZvcihpPTA7aTxjW25dLmxlbmd0aDtpKz0yKWgucHVzaChSdChjW25dW2ldLGNbbl1baSsxXSxlLGEsbyxzKSk7bC5nZW9tZXRyeS5wdXNoKGgpfX1yZXR1cm4gdC50cmFuc2Zvcm1lZD0hMCx0fWZ1bmN0aW9uIFJ0KHQsZSxyLG4saSxhKXtyZXR1cm5bTWF0aC5yb3VuZChyKih0Km4taSkpLE1hdGgucm91bmQociooZSpuLWEpKV19ZnVuY3Rpb24gRnQodCxlLHIsbixpKXtmb3IodmFyIGE9ZT09PWkubWF4Wm9vbT8wOmkudG9sZXJhbmNlLygoMTw8ZSkqaS5leHRlbnQpLG89e2ZlYXR1cmVzOltdLG51bVBvaW50czowLG51bVNpbXBsaWZpZWQ6MCxudW1GZWF0dXJlczowLHNvdXJjZTpudWxsLHg6cix5Om4sejplLHRyYW5zZm9ybWVkOiExLG1pblg6MixtaW5ZOjEsbWF4WDotMSxtYXhZOjB9LHM9MDtzPHQubGVuZ3RoO3MrKyl7by5udW1GZWF0dXJlcysrLEJ0KG8sdFtzXSxhLGkpO3ZhciBsPXRbc10ubWluWCxjPXRbc10ubWluWSx1PXRbc10ubWF4WCxoPXRbc10ubWF4WTtsPG8ubWluWCYmKG8ubWluWD1sKSxjPG8ubWluWSYmKG8ubWluWT1jKSx1Pm8ubWF4WCYmKG8ubWF4WD11KSxoPm8ubWF4WSYmKG8ubWF4WT1oKX1yZXR1cm4gb31mdW5jdGlvbiBCdCh0LGUscixuKXt2YXIgaT1lLmdlb21ldHJ5LGE9ZS50eXBlLG89W107aWYoXCJQb2ludFwiPT09YXx8XCJNdWx0aVBvaW50XCI9PT1hKWZvcih2YXIgcz0wO3M8aS5sZW5ndGg7cys9MylvLnB1c2goaVtzXSksby5wdXNoKGlbcysxXSksdC5udW1Qb2ludHMrKyx0Lm51bVNpbXBsaWZpZWQrKztlbHNlIGlmKFwiTGluZVN0cmluZ1wiPT09YSlOdChvLGksdCxyLCExLCExKTtlbHNlIGlmKFwiTXVsdGlMaW5lU3RyaW5nXCI9PT1hfHxcIlBvbHlnb25cIj09PWEpZm9yKHM9MDtzPGkubGVuZ3RoO3MrKylOdChvLGlbc10sdCxyLFwiUG9seWdvblwiPT09YSwwPT09cyk7ZWxzZSBpZihcIk11bHRpUG9seWdvblwiPT09YSlmb3IodmFyIGw9MDtsPGkubGVuZ3RoO2wrKyl7dmFyIGM9aVtsXTtmb3Iocz0wO3M8Yy5sZW5ndGg7cysrKU50KG8sY1tzXSx0LHIsITAsMD09PXMpfWlmKG8ubGVuZ3RoKXt2YXIgdT1lLnRhZ3N8fG51bGw7aWYoXCJMaW5lU3RyaW5nXCI9PT1hJiZuLmxpbmVNZXRyaWNzKXtmb3IodmFyIGggaW4gdT17fSxlLnRhZ3MpdVtoXT1lLnRhZ3NbaF07dS5tYXBib3hfY2xpcF9zdGFydD1pLnN0YXJ0L2kuc2l6ZSx1Lm1hcGJveF9jbGlwX2VuZD1pLmVuZC9pLnNpemV9dmFyIGY9e2dlb21ldHJ5Om8sdHlwZTpcIlBvbHlnb25cIj09PWF8fFwiTXVsdGlQb2x5Z29uXCI9PT1hPzM6XCJMaW5lU3RyaW5nXCI9PT1hfHxcIk11bHRpTGluZVN0cmluZ1wiPT09YT8yOjEsdGFnczp1fTtudWxsIT09ZS5pZCYmKGYuaWQ9ZS5pZCksdC5mZWF0dXJlcy5wdXNoKGYpfX1mdW5jdGlvbiBOdCh0LGUscixuLGksYSl7dmFyIG89bipuO2lmKG4+MCYmZS5zaXplPChpP286bikpci5udW1Qb2ludHMrPWUubGVuZ3RoLzM7ZWxzZXtmb3IodmFyIHM9W10sbD0wO2w8ZS5sZW5ndGg7bCs9MykoMD09PW58fGVbbCsyXT5vKSYmKHIubnVtU2ltcGxpZmllZCsrLHMucHVzaChlW2xdKSxzLnB1c2goZVtsKzFdKSksci5udW1Qb2ludHMrKztpJiZmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49MCxpPXQubGVuZ3RoLGE9aS0yO248aTthPW4sbis9MilyKz0odFtuXS10W2FdKSoodFtuKzFdK3RbYSsxXSk7aWYocj4wPT09ZSlmb3Iobj0wLGk9dC5sZW5ndGg7bjxpLzI7bis9Mil7dmFyIG89dFtuXSxzPXRbbisxXTt0W25dPXRbaS0yLW5dLHRbbisxXT10W2ktMS1uXSx0W2ktMi1uXT1vLHRbaS0xLW5dPXN9fShzLGEpLHQucHVzaChzKX19ZnVuY3Rpb24ganQodCxlKXt2YXIgcj0oZT10aGlzLm9wdGlvbnM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl07cmV0dXJuIHR9KE9iamVjdC5jcmVhdGUodGhpcy5vcHRpb25zKSxlKSkuZGVidWc7aWYociYmY29uc29sZS50aW1lKFwicHJlcHJvY2VzcyBkYXRhXCIpLGUubWF4Wm9vbTwwfHxlLm1heFpvb20+MjQpdGhyb3cgbmV3IEVycm9yKFwibWF4Wm9vbSBzaG91bGQgYmUgaW4gdGhlIDAtMjQgcmFuZ2VcIik7dmFyIG49ZnVuY3Rpb24odCxlKXt2YXIgcj1bXTtpZihcIkZlYXR1cmVDb2xsZWN0aW9uXCI9PT10LnR5cGUpZm9yKHZhciBuPTA7bjx0LmZlYXR1cmVzLmxlbmd0aDtuKyspeHQocix0LmZlYXR1cmVzW25dLGUpO2Vsc2VcIkZlYXR1cmVcIj09PXQudHlwZT94dChyLHQsZSk6eHQocix7Z2VvbWV0cnk6dH0sZSk7cmV0dXJuIHJ9KHQsZSk7dGhpcy50aWxlcz17fSx0aGlzLnRpbGVDb29yZHM9W10sciYmKGNvbnNvbGUudGltZUVuZChcInByZXByb2Nlc3MgZGF0YVwiKSxjb25zb2xlLmxvZyhcImluZGV4OiBtYXhab29tOiAlZCwgbWF4UG9pbnRzOiAlZFwiLGUuaW5kZXhNYXhab29tLGUuaW5kZXhNYXhQb2ludHMpLGNvbnNvbGUudGltZShcImdlbmVyYXRlIHRpbGVzXCIpLHRoaXMuc3RhdHM9e30sdGhpcy50b3RhbD0wKSwobj1mdW5jdGlvbih0LGUpe3ZhciByPWUuYnVmZmVyL2UuZXh0ZW50LG49dCxpPVR0KHQsMSwtMS1yLHIsMCwtMSwyLGUpLGE9VHQodCwxLDEtciwyK3IsMCwtMSwyLGUpO3JldHVybihpfHxhKSYmKG49VHQodCwxLC1yLDErciwwLC0xLDIsZSl8fFtdLGkmJihuPUl0KGksMSkuY29uY2F0KG4pKSxhJiYobj1uLmNvbmNhdChJdChhLC0xKSkpKSxufShuLGUpKS5sZW5ndGgmJnRoaXMuc3BsaXRUaWxlKG4sMCwwLDApLHImJihuLmxlbmd0aCYmY29uc29sZS5sb2coXCJmZWF0dXJlczogJWQsIHBvaW50czogJWRcIix0aGlzLnRpbGVzWzBdLm51bUZlYXR1cmVzLHRoaXMudGlsZXNbMF0ubnVtUG9pbnRzKSxjb25zb2xlLnRpbWVFbmQoXCJnZW5lcmF0ZSB0aWxlc1wiKSxjb25zb2xlLmxvZyhcInRpbGVzIGdlbmVyYXRlZDpcIix0aGlzLnRvdGFsLEpTT04uc3RyaW5naWZ5KHRoaXMuc3RhdHMpKSl9ZnVuY3Rpb24gVnQodCxlLHIpe3JldHVybiAzMiooKDE8PHQpKnIrZSkrdH1mdW5jdGlvbiBVdCh0LGUpe3ZhciByPXQudGlsZUlELmNhbm9uaWNhbDtpZighdGhpcy5fZ2VvSlNPTkluZGV4KXJldHVybiBlKG51bGwsbnVsbCk7dmFyIG49dGhpcy5fZ2VvSlNPTkluZGV4LmdldFRpbGUoci56LHIueCxyLnkpO2lmKCFuKXJldHVybiBlKG51bGwsbnVsbCk7dmFyIGk9bmV3IFIobi5mZWF0dXJlcyksYT1WKGkpOzA9PT1hLmJ5dGVPZmZzZXQmJmEuYnl0ZUxlbmd0aD09PWEuYnVmZmVyLmJ5dGVMZW5ndGh8fChhPW5ldyBVaW50OEFycmF5KGEpKSxlKG51bGwse3ZlY3RvclRpbGU6aSxyYXdEYXRhOmEuYnVmZmVyfSl9b3QucHJvdG90eXBlPXtvcHRpb25zOnttaW5ab29tOjAsbWF4Wm9vbToxNixyYWRpdXM6NDAsZXh0ZW50OjUxMixub2RlU2l6ZTo2NCxsb2c6ITEscmVkdWNlOm51bGwsaW5pdGlhbDpmdW5jdGlvbigpe3JldHVybnt9fSxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSxsb2FkOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMub3B0aW9ucy5sb2c7ZSYmY29uc29sZS50aW1lKFwidG90YWwgdGltZVwiKTt2YXIgcj1cInByZXBhcmUgXCIrdC5sZW5ndGgrXCIgcG9pbnRzXCI7ZSYmY29uc29sZS50aW1lKHIpLHRoaXMucG9pbnRzPXQ7dmFyIG49dC5tYXAobHQpO2UmJmNvbnNvbGUudGltZUVuZChyKTtmb3IodmFyIGk9dGhpcy5vcHRpb25zLm1heFpvb207aT49dGhpcy5vcHRpb25zLm1pblpvb207aS0tKXt2YXIgYT0rRGF0ZS5ub3coKTt0aGlzLnRyZWVzW2krMV09cnQobixkdCxndCx0aGlzLm9wdGlvbnMubm9kZVNpemUsRmxvYXQzMkFycmF5KSxuPXRoaXMuX2NsdXN0ZXIobixpKSxlJiZjb25zb2xlLmxvZyhcInolZDogJWQgY2x1c3RlcnMgaW4gJWRtc1wiLGksbi5sZW5ndGgsK0RhdGUubm93KCktYSl9cmV0dXJuIHRoaXMudHJlZXNbdGhpcy5vcHRpb25zLm1pblpvb21dPXJ0KG4sZHQsZ3QsdGhpcy5vcHRpb25zLm5vZGVTaXplLEZsb2F0MzJBcnJheSksZSYmY29uc29sZS50aW1lRW5kKFwidG90YWwgdGltZVwiKSx0aGlzfSxnZXRDbHVzdGVyczpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLnRyZWVzW3RoaXMuX2xpbWl0Wm9vbShlKV0sbj1yLnJhbmdlKGh0KHRbMF0pLGZ0KHRbM10pLGh0KHRbMl0pLGZ0KHRbMV0pKSxpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89ci5wb2ludHNbblthXV07aS5wdXNoKG8ubnVtUG9pbnRzP2N0KG8pOnRoaXMucG9pbnRzW28uaWRdKX1yZXR1cm4gaX0sZ2V0Q2hpbGRyZW46ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy50cmVlc1tlKzFdLnBvaW50c1t0XSxuPXRoaXMub3B0aW9ucy5yYWRpdXMvKHRoaXMub3B0aW9ucy5leHRlbnQqTWF0aC5wb3coMixlKSksaT10aGlzLnRyZWVzW2UrMV0ud2l0aGluKHIueCxyLnksbiksYT1bXSxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBzPXRoaXMudHJlZXNbZSsxXS5wb2ludHNbaVtvXV07cy5wYXJlbnRJZD09PXQmJmEucHVzaChzLm51bVBvaW50cz9jdChzKTp0aGlzLnBvaW50c1tzLmlkXSl9cmV0dXJuIGF9LGdldExlYXZlczpmdW5jdGlvbih0LGUscixuKXtyPXJ8fDEwLG49bnx8MDt2YXIgaT1bXTtyZXR1cm4gdGhpcy5fYXBwZW5kTGVhdmVzKGksdCxlLHIsbiwwKSxpfSxnZXRUaWxlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnRyZWVzW3RoaXMuX2xpbWl0Wm9vbSh0KV0saT1NYXRoLnBvdygyLHQpLGE9dGhpcy5vcHRpb25zLmV4dGVudCxvPXRoaXMub3B0aW9ucy5yYWRpdXMvYSxzPShyLW8pL2ksbD0ocisxK28pL2ksYz17ZmVhdHVyZXM6W119O3JldHVybiB0aGlzLl9hZGRUaWxlRmVhdHVyZXMobi5yYW5nZSgoZS1vKS9pLHMsKGUrMStvKS9pLGwpLG4ucG9pbnRzLGUscixpLGMpLDA9PT1lJiZ0aGlzLl9hZGRUaWxlRmVhdHVyZXMobi5yYW5nZSgxLW8vaSxzLDEsbCksbi5wb2ludHMsaSxyLGksYyksZT09PWktMSYmdGhpcy5fYWRkVGlsZUZlYXR1cmVzKG4ucmFuZ2UoMCxzLG8vaSxsKSxuLnBvaW50cywtMSxyLGksYyksYy5mZWF0dXJlcy5sZW5ndGg/YzpudWxsfSxnZXRDbHVzdGVyRXhwYW5zaW9uWm9vbTpmdW5jdGlvbih0LGUpe2Zvcig7ZTx0aGlzLm9wdGlvbnMubWF4Wm9vbTspe3ZhciByPXRoaXMuZ2V0Q2hpbGRyZW4odCxlKTtpZihlKyssMSE9PXIubGVuZ3RoKWJyZWFrO3Q9clswXS5wcm9wZXJ0aWVzLmNsdXN0ZXJfaWR9cmV0dXJuIGV9LF9hcHBlbmRMZWF2ZXM6ZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbz10aGlzLmdldENoaWxkcmVuKGUscikscz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdLnByb3BlcnRpZXM7aWYobC5jbHVzdGVyP2ErbC5wb2ludF9jb3VudDw9aT9hKz1sLnBvaW50X2NvdW50OmE9dGhpcy5fYXBwZW5kTGVhdmVzKHQsbC5jbHVzdGVyX2lkLHIrMSxuLGksYSk6YTxpP2ErKzp0LnB1c2gob1tzXSksdC5sZW5ndGg9PT1uKWJyZWFrfXJldHVybiBhfSxfYWRkVGlsZUZlYXR1cmVzOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9ZVt0W29dXTthLmZlYXR1cmVzLnB1c2goe3R5cGU6MSxnZW9tZXRyeTpbW01hdGgucm91bmQodGhpcy5vcHRpb25zLmV4dGVudCoocy54KmktcikpLE1hdGgucm91bmQodGhpcy5vcHRpb25zLmV4dGVudCoocy55KmktbikpXV0sdGFnczpzLm51bVBvaW50cz91dChzKTp0aGlzLnBvaW50c1tzLmlkXS5wcm9wZXJ0aWVzfSl9fSxfbGltaXRab29tOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCh0aGlzLm9wdGlvbnMubWluWm9vbSxNYXRoLm1pbih0LHRoaXMub3B0aW9ucy5tYXhab29tKzEpKX0sX2NsdXN0ZXI6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj10aGlzLm9wdGlvbnMucmFkaXVzLyh0aGlzLm9wdGlvbnMuZXh0ZW50Kk1hdGgucG93KDIsZSkpLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dFtpXTtpZighKGEuem9vbTw9ZSkpe2Euem9vbT1lO3ZhciBvPXRoaXMudHJlZXNbZSsxXSxzPW8ud2l0aGluKGEueCxhLnksbiksbD1hLm51bVBvaW50c3x8MSxjPWEueCpsLHU9YS55KmwsaD1udWxsO3RoaXMub3B0aW9ucy5yZWR1Y2UmJihoPXRoaXMub3B0aW9ucy5pbml0aWFsKCksdGhpcy5fYWNjdW11bGF0ZShoLGEpKTtmb3IodmFyIGY9MDtmPHMubGVuZ3RoO2YrKyl7dmFyIHA9by5wb2ludHNbc1tmXV07aWYoZTxwLnpvb20pe3ZhciBkPXAubnVtUG9pbnRzfHwxO3Auem9vbT1lLGMrPXAueCpkLHUrPXAueSpkLGwrPWQscC5wYXJlbnRJZD1pLHRoaXMub3B0aW9ucy5yZWR1Y2UmJnRoaXMuX2FjY3VtdWxhdGUoaCxwKX19MT09PWw/ci5wdXNoKGEpOihhLnBhcmVudElkPWksci5wdXNoKHN0KGMvbCx1L2wsbCxpLGgpKSl9fXJldHVybiByfSxfYWNjdW11bGF0ZTpmdW5jdGlvbih0LGUpe3ZhciByPWUubnVtUG9pbnRzP2UucHJvcGVydGllczp0aGlzLm9wdGlvbnMubWFwKHRoaXMucG9pbnRzW2UuaWRdLnByb3BlcnRpZXMpO3RoaXMub3B0aW9ucy5yZWR1Y2UodCxyKX19LGp0LnByb3RvdHlwZS5vcHRpb25zPXttYXhab29tOjE0LGluZGV4TWF4Wm9vbTo1LGluZGV4TWF4UG9pbnRzOjFlNSx0b2xlcmFuY2U6MyxleHRlbnQ6NDA5NixidWZmZXI6NjQsbGluZU1ldHJpY3M6ITEsZGVidWc6MH0sanQucHJvdG90eXBlLnNwbGl0VGlsZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9W3QsZSxyLG5dLGw9dGhpcy5vcHRpb25zLGM9bC5kZWJ1ZztzLmxlbmd0aDspe249cy5wb3AoKSxyPXMucG9wKCksZT1zLnBvcCgpLHQ9cy5wb3AoKTt2YXIgdT0xPDxlLGg9VnQoZSxyLG4pLGY9dGhpcy50aWxlc1toXTtpZighZiYmKGM+MSYmY29uc29sZS50aW1lKFwiY3JlYXRpb25cIiksZj10aGlzLnRpbGVzW2hdPUZ0KHQsZSxyLG4sbCksdGhpcy50aWxlQ29vcmRzLnB1c2goe3o6ZSx4OnIseTpufSksYykpe2M+MSYmKGNvbnNvbGUubG9nKFwidGlsZSB6JWQtJWQtJWQgKGZlYXR1cmVzOiAlZCwgcG9pbnRzOiAlZCwgc2ltcGxpZmllZDogJWQpXCIsZSxyLG4sZi5udW1GZWF0dXJlcyxmLm51bVBvaW50cyxmLm51bVNpbXBsaWZpZWQpLGNvbnNvbGUudGltZUVuZChcImNyZWF0aW9uXCIpKTt2YXIgcD1cInpcIitlO3RoaXMuc3RhdHNbcF09KHRoaXMuc3RhdHNbcF18fDApKzEsdGhpcy50b3RhbCsrfWlmKGYuc291cmNlPXQsaSl7aWYoZT09PWwubWF4Wm9vbXx8ZT09PWkpY29udGludWU7dmFyIGQ9MTw8aS1lO2lmKHIhPT1NYXRoLmZsb29yKGEvZCl8fG4hPT1NYXRoLmZsb29yKG8vZCkpY29udGludWV9ZWxzZSBpZihlPT09bC5pbmRleE1heFpvb218fGYubnVtUG9pbnRzPD1sLmluZGV4TWF4UG9pbnRzKWNvbnRpbnVlO2lmKGYuc291cmNlPW51bGwsMCE9PXQubGVuZ3RoKXtjPjEmJmNvbnNvbGUudGltZShcImNsaXBwaW5nXCIpO3ZhciBnLHYsbSx5LHgsYixfPS41KmwuYnVmZmVyL2wuZXh0ZW50LHc9LjUtXyxrPS41K18sQT0xK187Zz12PW09eT1udWxsLHg9VHQodCx1LHItXyxyK2ssMCxmLm1pblgsZi5tYXhYLGwpLGI9VHQodCx1LHIrdyxyK0EsMCxmLm1pblgsZi5tYXhYLGwpLHQ9bnVsbCx4JiYoZz1UdCh4LHUsbi1fLG4raywxLGYubWluWSxmLm1heFksbCksdj1UdCh4LHUsbit3LG4rQSwxLGYubWluWSxmLm1heFksbCkseD1udWxsKSxiJiYobT1UdChiLHUsbi1fLG4raywxLGYubWluWSxmLm1heFksbCkseT1UdChiLHUsbit3LG4rQSwxLGYubWluWSxmLm1heFksbCksYj1udWxsKSxjPjEmJmNvbnNvbGUudGltZUVuZChcImNsaXBwaW5nXCIpLHMucHVzaChnfHxbXSxlKzEsMipyLDIqbikscy5wdXNoKHZ8fFtdLGUrMSwyKnIsMipuKzEpLHMucHVzaChtfHxbXSxlKzEsMipyKzEsMipuKSxzLnB1c2goeXx8W10sZSsxLDIqcisxLDIqbisxKX19fSxqdC5wcm90b3R5cGUuZ2V0VGlsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5vcHRpb25zLGk9bi5leHRlbnQsYT1uLmRlYnVnO2lmKHQ8MHx8dD4yNClyZXR1cm4gbnVsbDt2YXIgbz0xPDx0LHM9VnQodCxlPShlJW8rbyklbyxyKTtpZih0aGlzLnRpbGVzW3NdKXJldHVybiBQdCh0aGlzLnRpbGVzW3NdLGkpO2E+MSYmY29uc29sZS5sb2coXCJkcmlsbGluZyBkb3duIHRvIHolZC0lZC0lZFwiLHQsZSxyKTtmb3IodmFyIGwsYz10LHU9ZSxoPXI7IWwmJmM+MDspYy0tLHU9TWF0aC5mbG9vcih1LzIpLGg9TWF0aC5mbG9vcihoLzIpLGw9dGhpcy50aWxlc1tWdChjLHUsaCldO3JldHVybiBsJiZsLnNvdXJjZT8oYT4xJiZjb25zb2xlLmxvZyhcImZvdW5kIHBhcmVudCB0aWxlIHolZC0lZC0lZFwiLGMsdSxoKSxhPjEmJmNvbnNvbGUudGltZShcImRyaWxsaW5nIGRvd25cIiksdGhpcy5zcGxpdFRpbGUobC5zb3VyY2UsYyx1LGgsdCxlLHIpLGE+MSYmY29uc29sZS50aW1lRW5kKFwiZHJpbGxpbmcgZG93blwiKSx0aGlzLnRpbGVzW3NdP1B0KHRoaXMudGlsZXNbc10saSk6bnVsbCk6bnVsbH07dmFyIHF0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCxyLG4pe2UuY2FsbCh0aGlzLHQscixVdCksbiYmKHRoaXMubG9hZEdlb0pTT049bil9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWREYXRhPWZ1bmN0aW9uKHQsZSl7dGhpcy5fcGVuZGluZ0NhbGxiYWNrJiZ0aGlzLl9wZW5kaW5nQ2FsbGJhY2sobnVsbCx7YWJhbmRvbmVkOiEwfSksdGhpcy5fcGVuZGluZ0NhbGxiYWNrPWUsdGhpcy5fcGVuZGluZ0xvYWREYXRhUGFyYW1zPXQsdGhpcy5fc3RhdGUmJlwiSWRsZVwiIT09dGhpcy5fc3RhdGU/dGhpcy5fc3RhdGU9XCJOZWVkc0xvYWREYXRhXCI6KHRoaXMuX3N0YXRlPVwiQ29hbGVzY2luZ1wiLHRoaXMuX2xvYWREYXRhKCkpfSxyLnByb3RvdHlwZS5fbG9hZERhdGE9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMuX3BlbmRpbmdDYWxsYmFjayYmdGhpcy5fcGVuZGluZ0xvYWREYXRhUGFyYW1zKXt2YXIgZT10aGlzLl9wZW5kaW5nQ2FsbGJhY2sscj10aGlzLl9wZW5kaW5nTG9hZERhdGFQYXJhbXM7ZGVsZXRlIHRoaXMuX3BlbmRpbmdDYWxsYmFjayxkZWxldGUgdGhpcy5fcGVuZGluZ0xvYWREYXRhUGFyYW1zLHRoaXMubG9hZEdlb0pTT04ocixmdW5jdGlvbihuLGkpe2lmKG58fCFpKXJldHVybiBlKG4pO2lmKFwib2JqZWN0XCIhPXR5cGVvZiBpKXJldHVybiBlKG5ldyBFcnJvcihcIklucHV0IGRhdGEgaXMgbm90IGEgdmFsaWQgR2VvSlNPTiBvYmplY3QuXCIpKTshZnVuY3Rpb24gdChlLHIpe3N3aXRjaChlJiZlLnR5cGV8fG51bGwpe2Nhc2VcIkZlYXR1cmVDb2xsZWN0aW9uXCI6cmV0dXJuIGUuZmVhdHVyZXM9ZS5mZWF0dXJlcy5tYXAoeih0LHIpKSxlO2Nhc2VcIkZlYXR1cmVcIjpyZXR1cm4gZS5nZW9tZXRyeT10KGUuZ2VvbWV0cnksciksZTtjYXNlXCJQb2x5Z29uXCI6Y2FzZVwiTXVsdGlQb2x5Z29uXCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJQb2x5Z29uXCI9PT10LnR5cGU/dC5jb29yZGluYXRlcz1PKHQuY29vcmRpbmF0ZXMsZSk6XCJNdWx0aVBvbHlnb25cIj09PXQudHlwZSYmKHQuY29vcmRpbmF0ZXM9dC5jb29yZGluYXRlcy5tYXAoeihPLGUpKSksdH0oZSxyKTtkZWZhdWx0OnJldHVybiBlfX0oaSwhMCk7dHJ5e3QuX2dlb0pTT05JbmRleD1yLmNsdXN0ZXI/ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvdCh0KX0oci5zdXBlcmNsdXN0ZXJPcHRpb25zKS5sb2FkKGkuZmVhdHVyZXMpOm5ldyBqdChpLHIuZ2VvanNvblZ0T3B0aW9ucyl9Y2F0Y2gobil7cmV0dXJuIGUobil9dC5sb2FkZWQ9e307dmFyIGE9e307aWYoci5yZXF1ZXN0JiZyLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nKXt2YXIgbz13KHIucmVxdWVzdC51cmwpO28mJihhLnJlc291cmNlVGltaW5nPXt9LGEucmVzb3VyY2VUaW1pbmdbci5zb3VyY2VdPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobykpKX1lKG51bGwsYSl9KX19LHIucHJvdG90eXBlLmNvYWxlc2NlPWZ1bmN0aW9uKCl7XCJDb2FsZXNjaW5nXCI9PT10aGlzLl9zdGF0ZT90aGlzLl9zdGF0ZT1cIklkbGVcIjpcIk5lZWRzTG9hZERhdGFcIj09PXRoaXMuX3N0YXRlJiYodGhpcy5fc3RhdGU9XCJDb2FsZXNjaW5nXCIsdGhpcy5fbG9hZERhdGEoKSl9LHIucHJvdG90eXBlLnJlbG9hZFRpbGU9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzLmxvYWRlZCxpPXQudWlkO3JldHVybiBuJiZuW2ldP2UucHJvdG90eXBlLnJlbG9hZFRpbGUuY2FsbCh0aGlzLHQscik6dGhpcy5sb2FkVGlsZSh0LHIpfSxyLnByb3RvdHlwZS5sb2FkR2VvSlNPTj1mdW5jdGlvbihlLHIpe2lmKGUucmVxdWVzdCl0LmdldEpTT04oZS5yZXF1ZXN0LHIpO2Vsc2V7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUuZGF0YSlyZXR1cm4gcihuZXcgRXJyb3IoXCJJbnB1dCBkYXRhIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LlwiKSk7dHJ5e3JldHVybiByKG51bGwsSlNPTi5wYXJzZShlLmRhdGEpKX1jYXRjaCh0KXtyZXR1cm4gcihuZXcgRXJyb3IoXCJJbnB1dCBkYXRhIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LlwiKSl9fX0sci5wcm90b3R5cGUucmVtb3ZlU291cmNlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fcGVuZGluZ0NhbGxiYWNrJiZ0aGlzLl9wZW5kaW5nQ2FsbGJhY2sobnVsbCx7YWJhbmRvbmVkOiEwfSksZSgpfSxyfShBKSxIdD1mdW5jdGlvbihlKXt2YXIgcj10aGlzO3RoaXMuc2VsZj1lLHRoaXMuYWN0b3I9bmV3IHQuZGVmYXVsdCQ3KGUsdGhpcyksdGhpcy5sYXllckluZGV4ZXM9e30sdGhpcy53b3JrZXJTb3VyY2VUeXBlcz17dmVjdG9yOkEsZ2VvanNvbjpxdH0sdGhpcy53b3JrZXJTb3VyY2VzPXt9LHRoaXMuZGVtV29ya2VyU291cmNlcz17fSx0aGlzLnNlbGYucmVnaXN0ZXJXb3JrZXJTb3VyY2U9ZnVuY3Rpb24odCxlKXtpZihyLndvcmtlclNvdXJjZVR5cGVzW3RdKXRocm93IG5ldyBFcnJvcignV29ya2VyIHNvdXJjZSB3aXRoIG5hbWUgXCInK3QrJ1wiIGFscmVhZHkgcmVnaXN0ZXJlZC4nKTtyLndvcmtlclNvdXJjZVR5cGVzW3RdPWV9LHRoaXMuc2VsZi5yZWdpc3RlclJUTFRleHRQbHVnaW49ZnVuY3Rpb24oZSl7aWYodC5wbHVnaW4uaXNMb2FkZWQoKSl0aHJvdyBuZXcgRXJyb3IoXCJSVEwgdGV4dCBwbHVnaW4gYWxyZWFkeSByZWdpc3RlcmVkLlwiKTt0LnBsdWdpbi5hcHBseUFyYWJpY1NoYXBpbmc9ZS5hcHBseUFyYWJpY1NoYXBpbmcsdC5wbHVnaW4ucHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0PWUucHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0fX07cmV0dXJuIEh0LnByb3RvdHlwZS5zZXRMYXllcnM9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0TGF5ZXJJbmRleCh0KS5yZXBsYWNlKGUpLHIoKX0sSHQucHJvdG90eXBlLnVwZGF0ZUxheWVycz1mdW5jdGlvbih0LGUscil7dGhpcy5nZXRMYXllckluZGV4KHQpLnVwZGF0ZShlLmxheWVycyxlLnJlbW92ZWRJZHMpLHIoKX0sSHQucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldFdvcmtlclNvdXJjZSh0LGUudHlwZSxlLnNvdXJjZSkubG9hZFRpbGUoZSxyKX0sSHQucHJvdG90eXBlLmxvYWRERU1UaWxlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldERFTVdvcmtlclNvdXJjZSh0LGUuc291cmNlKS5sb2FkVGlsZShlLHIpfSxIdC5wcm90b3R5cGUucmVsb2FkVGlsZT1mdW5jdGlvbih0LGUscil7dGhpcy5nZXRXb3JrZXJTb3VyY2UodCxlLnR5cGUsZS5zb3VyY2UpLnJlbG9hZFRpbGUoZSxyKX0sSHQucHJvdG90eXBlLmFib3J0VGlsZT1mdW5jdGlvbih0LGUscil7dGhpcy5nZXRXb3JrZXJTb3VyY2UodCxlLnR5cGUsZS5zb3VyY2UpLmFib3J0VGlsZShlLHIpfSxIdC5wcm90b3R5cGUucmVtb3ZlVGlsZT1mdW5jdGlvbih0LGUscil7dGhpcy5nZXRXb3JrZXJTb3VyY2UodCxlLnR5cGUsZS5zb3VyY2UpLnJlbW92ZVRpbGUoZSxyKX0sSHQucHJvdG90eXBlLnJlbW92ZURFTVRpbGU9ZnVuY3Rpb24odCxlKXt0aGlzLmdldERFTVdvcmtlclNvdXJjZSh0LGUuc291cmNlKS5yZW1vdmVUaWxlKGUpfSxIdC5wcm90b3R5cGUucmVtb3ZlU291cmNlPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLndvcmtlclNvdXJjZXNbdF0mJnRoaXMud29ya2VyU291cmNlc1t0XVtlLnR5cGVdJiZ0aGlzLndvcmtlclNvdXJjZXNbdF1bZS50eXBlXVtlLnNvdXJjZV0pe3ZhciBuPXRoaXMud29ya2VyU291cmNlc1t0XVtlLnR5cGVdW2Uuc291cmNlXTtkZWxldGUgdGhpcy53b3JrZXJTb3VyY2VzW3RdW2UudHlwZV1bZS5zb3VyY2VdLHZvaWQgMCE9PW4ucmVtb3ZlU291cmNlP24ucmVtb3ZlU291cmNlKGUscik6cigpfX0sSHQucHJvdG90eXBlLmxvYWRXb3JrZXJTb3VyY2U9ZnVuY3Rpb24odCxlLHIpe3RyeXt0aGlzLnNlbGYuaW1wb3J0U2NyaXB0cyhlLnVybCkscigpfWNhdGNoKHQpe3IodC50b1N0cmluZygpKX19LEh0LnByb3RvdHlwZS5sb2FkUlRMVGV4dFBsdWdpbj1mdW5jdGlvbihlLHIsbil7dHJ5e3QucGx1Z2luLmlzTG9hZGVkKCl8fCh0aGlzLnNlbGYuaW1wb3J0U2NyaXB0cyhyKSxuKHQucGx1Z2luLmlzTG9hZGVkKCk/bnVsbDpuZXcgRXJyb3IoXCJSVEwgVGV4dCBQbHVnaW4gZmFpbGVkIHRvIGltcG9ydCBzY3JpcHRzIGZyb20gXCIrcikpKX1jYXRjaCh0KXtuKHQudG9TdHJpbmcoKSl9fSxIdC5wcm90b3R5cGUuZ2V0TGF5ZXJJbmRleD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxheWVySW5kZXhlc1t0XTtyZXR1cm4gZXx8KGU9dGhpcy5sYXllckluZGV4ZXNbdF09bmV3IG4pLGV9LEh0LnByb3RvdHlwZS5nZXRXb3JrZXJTb3VyY2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXM7aWYodGhpcy53b3JrZXJTb3VyY2VzW3RdfHwodGhpcy53b3JrZXJTb3VyY2VzW3RdPXt9KSx0aGlzLndvcmtlclNvdXJjZXNbdF1bZV18fCh0aGlzLndvcmtlclNvdXJjZXNbdF1bZV09e30pLCF0aGlzLndvcmtlclNvdXJjZXNbdF1bZV1bcl0pe3ZhciBpPXtzZW5kOmZ1bmN0aW9uKGUscixpKXtuLmFjdG9yLnNlbmQoZSxyLGksdCl9fTt0aGlzLndvcmtlclNvdXJjZXNbdF1bZV1bcl09bmV3IHRoaXMud29ya2VyU291cmNlVHlwZXNbZV0oaSx0aGlzLmdldExheWVySW5kZXgodCkpfXJldHVybiB0aGlzLndvcmtlclNvdXJjZXNbdF1bZV1bcl19LEh0LnByb3RvdHlwZS5nZXRERU1Xb3JrZXJTb3VyY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5kZW1Xb3JrZXJTb3VyY2VzW3RdfHwodGhpcy5kZW1Xb3JrZXJTb3VyY2VzW3RdPXt9KSx0aGlzLmRlbVdvcmtlclNvdXJjZXNbdF1bZV18fCh0aGlzLmRlbVdvcmtlclNvdXJjZXNbdF1bZV09bmV3IFQpLHRoaXMuZGVtV29ya2VyU291cmNlc1t0XVtlXX0sXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZuZXcgSHQoc2VsZiksSHR9KSxpKDAsZnVuY3Rpb24odCl7dmFyIGU9dC5jcmVhdGVDb21tb25qc01vZHVsZShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3JldHVybiEhKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudCYmQXJyYXkucHJvdG90eXBlJiZBcnJheS5wcm90b3R5cGUuZXZlcnkmJkFycmF5LnByb3RvdHlwZS5maWx0ZXImJkFycmF5LnByb3RvdHlwZS5mb3JFYWNoJiZBcnJheS5wcm90b3R5cGUuaW5kZXhPZiYmQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mJiZBcnJheS5wcm90b3R5cGUubWFwJiZBcnJheS5wcm90b3R5cGUuc29tZSYmQXJyYXkucHJvdG90eXBlLnJlZHVjZSYmQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0JiZBcnJheS5pc0FycmF5JiZGdW5jdGlvbi5wcm90b3R5cGUmJkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kJiZPYmplY3Qua2V5cyYmT2JqZWN0LmNyZWF0ZSYmT2JqZWN0LmdldFByb3RvdHlwZU9mJiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyYmT2JqZWN0LmlzU2VhbGVkJiZPYmplY3QuaXNGcm96ZW4mJk9iamVjdC5pc0V4dGVuc2libGUmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSYmT2JqZWN0LmRlZmluZVByb3BlcnRpZXMmJk9iamVjdC5zZWFsJiZPYmplY3QuZnJlZXplJiZPYmplY3QucHJldmVudEV4dGVuc2lvbnMmJlwiSlNPTlwiaW4gd2luZG93JiZcInBhcnNlXCJpbiBKU09OJiZcInN0cmluZ2lmeVwiaW4gSlNPTiYmZnVuY3Rpb24oKXtpZighKFwiV29ya2VyXCJpbiB3aW5kb3cmJlwiQmxvYlwiaW4gd2luZG93JiZcIlVSTFwiaW4gd2luZG93KSlyZXR1cm4hMTt2YXIgdCxlLHI9bmV3IEJsb2IoW1wiXCJdLHt0eXBlOlwidGV4dC9qYXZhc2NyaXB0XCJ9KSxuPVVSTC5jcmVhdGVPYmplY3RVUkwocik7dHJ5e2U9bmV3IFdvcmtlcihuKSx0PSEwfWNhdGNoKGUpe3Q9ITF9cmV0dXJuIGUmJmUudGVybWluYXRlKCksVVJMLnJldm9rZU9iamVjdFVSTChuKSx0fSgpJiZcIlVpbnQ4Q2xhbXBlZEFycmF5XCJpbiB3aW5kb3cmJmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT1yW3RdJiYoclt0XT1mdW5jdGlvbih0KXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLG49T2JqZWN0LmNyZWF0ZShlLndlYkdMQ29udGV4dEF0dHJpYnV0ZXMpO3JldHVybiBuLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ9dCxyLnByb2JhYmx5U3VwcG9ydHNDb250ZXh0P3IucHJvYmFibHlTdXBwb3J0c0NvbnRleHQoXCJ3ZWJnbFwiLG4pfHxyLnByb2JhYmx5U3VwcG9ydHNDb250ZXh0KFwiZXhwZXJpbWVudGFsLXdlYmdsXCIsbik6ci5zdXBwb3J0c0NvbnRleHQ/ci5zdXBwb3J0c0NvbnRleHQoXCJ3ZWJnbFwiLG4pfHxyLnN1cHBvcnRzQ29udGV4dChcImV4cGVyaW1lbnRhbC13ZWJnbFwiLG4pOnIuZ2V0Q29udGV4dChcIndlYmdsXCIsbil8fHIuZ2V0Q29udGV4dChcImV4cGVyaW1lbnRhbC13ZWJnbFwiLG4pfSh0KSksclt0XX0odCYmdC5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0KSl9dC5leHBvcnRzP3QuZXhwb3J0cz1lOndpbmRvdyYmKHdpbmRvdy5tYXBib3hnbD13aW5kb3cubWFwYm94Z2x8fHt9LHdpbmRvdy5tYXBib3hnbC5zdXBwb3J0ZWQ9ZSk7dmFyIHI9e307ZS53ZWJHTENvbnRleHRBdHRyaWJ1dGVzPXthbnRpYWxpYXM6ITEsYWxwaGE6ITAsc3RlbmNpbDohMCxkZXB0aDohMH19KSxyPXQuZGVmYXVsdC5wZXJmb3JtYW5jZSYmdC5kZWZhdWx0LnBlcmZvcm1hbmNlLm5vdz90LmRlZmF1bHQucGVyZm9ybWFuY2Uubm93LmJpbmQodC5kZWZhdWx0LnBlcmZvcm1hbmNlKTpEYXRlLm5vdy5iaW5kKERhdGUpLG49dC5kZWZhdWx0LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8dC5kZWZhdWx0Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZXx8dC5kZWZhdWx0LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZXx8dC5kZWZhdWx0Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lLGk9dC5kZWZhdWx0LmNhbmNlbEFuaW1hdGlvbkZyYW1lfHx0LmRlZmF1bHQubW96Q2FuY2VsQW5pbWF0aW9uRnJhbWV8fHQuZGVmYXVsdC53ZWJraXRDYW5jZWxBbmltYXRpb25GcmFtZXx8dC5kZWZhdWx0Lm1zQ2FuY2VsQW5pbWF0aW9uRnJhbWUsYT17bm93OnIsZnJhbWU6ZnVuY3Rpb24odCl7cmV0dXJuIG4odCl9LGNhbmNlbEZyYW1lOmZ1bmN0aW9uKHQpe3JldHVybiBpKHQpfSxnZXRJbWFnZURhdGE6ZnVuY3Rpb24oZSl7dmFyIHI9dC5kZWZhdWx0LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksbj1yLmdldENvbnRleHQoXCIyZFwiKTtpZighbil0aHJvdyBuZXcgRXJyb3IoXCJmYWlsZWQgdG8gY3JlYXRlIGNhbnZhcyAyZCBjb250ZXh0XCIpO3JldHVybiByLndpZHRoPWUud2lkdGgsci5oZWlnaHQ9ZS5oZWlnaHQsbi5kcmF3SW1hZ2UoZSwwLDAsZS53aWR0aCxlLmhlaWdodCksbi5nZXRJbWFnZURhdGEoMCwwLGUud2lkdGgsZS5oZWlnaHQpfSxoYXJkd2FyZUNvbmN1cnJlbmN5OnQuZGVmYXVsdC5uYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeXx8NCxnZXQgZGV2aWNlUGl4ZWxSYXRpbygpe3JldHVybiB0LmRlZmF1bHQuZGV2aWNlUGl4ZWxSYXRpb30sc3VwcG9ydHNXZWJwOiExfTtpZih0LmRlZmF1bHQuZG9jdW1lbnQpe3ZhciBvPXQuZGVmYXVsdC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO28ub25sb2FkPWZ1bmN0aW9uKCl7YS5zdXBwb3J0c1dlYnA9ITB9LG8uc3JjPVwiZGF0YTppbWFnZS93ZWJwO2Jhc2U2NCxVa2xHUmg0QUFBQlhSVUpRVmxBNFRCRUFBQUF2QVFBQUFBZlEvLzczdi8rQmlPaC9BQUE9XCJ9dmFyIHM9e2NyZWF0ZTpmdW5jdGlvbihlLHIsbil7dmFyIGk9dC5kZWZhdWx0LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSk7cmV0dXJuIHImJihpLmNsYXNzTmFtZT1yKSxuJiZuLmFwcGVuZENoaWxkKGkpLGl9LGNyZWF0ZU5TOmZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZGVmYXVsdC5kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZSxyKX19LGw9dC5kZWZhdWx0LmRvY3VtZW50P3QuZGVmYXVsdC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGU6bnVsbDtmdW5jdGlvbiBjKHQpe2lmKCFsKXJldHVybiBudWxsO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKHRbZV1pbiBsKXJldHVybiB0W2VdO3JldHVybiB0WzBdfXZhciB1LGg9YyhbXCJ1c2VyU2VsZWN0XCIsXCJNb3pVc2VyU2VsZWN0XCIsXCJXZWJraXRVc2VyU2VsZWN0XCIsXCJtc1VzZXJTZWxlY3RcIl0pO3MuZGlzYWJsZURyYWc9ZnVuY3Rpb24oKXtsJiZoJiYodT1sW2hdLGxbaF09XCJub25lXCIpfSxzLmVuYWJsZURyYWc9ZnVuY3Rpb24oKXtsJiZoJiYobFtoXT11KX07dmFyIGY9YyhbXCJ0cmFuc2Zvcm1cIixcIldlYmtpdFRyYW5zZm9ybVwiXSk7cy5zZXRUcmFuc2Zvcm09ZnVuY3Rpb24odCxlKXt0LnN0eWxlW2ZdPWV9O3ZhciBwPSExO3RyeXt2YXIgZD1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sXCJwYXNzaXZlXCIse2dldDpmdW5jdGlvbigpe3A9ITB9fSk7dC5kZWZhdWx0LmFkZEV2ZW50TGlzdGVuZXIoXCJ0ZXN0XCIsZCxkKSx0LmRlZmF1bHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRlc3RcIixkLGQpfWNhdGNoKHQpe3A9ITF9cy5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxyLG4pe3ZvaWQgMD09PW4mJihuPXt9KSxcInBhc3NpdmVcImluIG4mJnA/dC5hZGRFdmVudExpc3RlbmVyKGUscixuKTp0LmFkZEV2ZW50TGlzdGVuZXIoZSxyLG4uY2FwdHVyZSl9LHMucmVtb3ZlRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUscixuKXt2b2lkIDA9PT1uJiYobj17fSksXCJwYXNzaXZlXCJpbiBuJiZwP3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHIsbik6dC5yZW1vdmVFdmVudExpc3RlbmVyKGUscixuLmNhcHR1cmUpfTt2YXIgZz1mdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSx0LmRlZmF1bHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsZywhMCl9O3Muc3VwcHJlc3NDbGljaz1mdW5jdGlvbigpe3QuZGVmYXVsdC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIixnLCEwKSx0LmRlZmF1bHQuc2V0VGltZW91dChmdW5jdGlvbigpe3QuZGVmYXVsdC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIixnLCEwKX0sMCl9LHMubW91c2VQb3M9ZnVuY3Rpb24oZSxyKXt2YXIgbj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiByPXIudG91Y2hlcz9yLnRvdWNoZXNbMF06cixuZXcgdC5kZWZhdWx0JDEoci5jbGllbnRYLW4ubGVmdC1lLmNsaWVudExlZnQsci5jbGllbnRZLW4udG9wLWUuY2xpZW50VG9wKX0scy50b3VjaFBvcz1mdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9W10sYT1cInRvdWNoZW5kXCI9PT1yLnR5cGU/ci5jaGFuZ2VkVG91Y2hlczpyLnRvdWNoZXMsbz0wO288YS5sZW5ndGg7bysrKWkucHVzaChuZXcgdC5kZWZhdWx0JDEoYVtvXS5jbGllbnRYLW4ubGVmdC1lLmNsaWVudExlZnQsYVtvXS5jbGllbnRZLW4udG9wLWUuY2xpZW50VG9wKSk7cmV0dXJuIGl9LHMubW91c2VCdXR0b249ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXQuZGVmYXVsdC5JbnN0YWxsVHJpZ2dlciYmMj09PWUuYnV0dG9uJiZlLmN0cmxLZXkmJnQuZGVmYXVsdC5uYXZpZ2F0b3IucGxhdGZvcm0udG9VcHBlckNhc2UoKS5pbmRleE9mKFwiTUFDXCIpPj0wPzA6ZS5idXR0b259LHMucmVtb3ZlPWZ1bmN0aW9uKHQpe3QucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfTt2YXIgdj17QVBJX1VSTDpcImh0dHBzOi8vYXBpLm1hcGJveC5jb21cIixSRVFVSVJFX0FDQ0VTU19UT0tFTjohMCxBQ0NFU1NfVE9LRU46bnVsbH0sbT1cIlNlZSBodHRwczovL3d3dy5tYXBib3guY29tL2FwaS1kb2N1bWVudGF0aW9uLyNhY2Nlc3MtdG9rZW5zXCI7ZnVuY3Rpb24geSh0LGUpe3ZhciByPVQodi5BUElfVVJMKTtpZih0LnByb3RvY29sPXIucHJvdG9jb2wsdC5hdXRob3JpdHk9ci5hdXRob3JpdHksXCIvXCIhPT1yLnBhdGgmJih0LnBhdGg9XCJcIityLnBhdGgrdC5wYXRoKSwhdi5SRVFVSVJFX0FDQ0VTU19UT0tFTilyZXR1cm4gTSh0KTtpZighKGU9ZXx8di5BQ0NFU1NfVE9LRU4pKXRocm93IG5ldyBFcnJvcihcIkFuIEFQSSBhY2Nlc3MgdG9rZW4gaXMgcmVxdWlyZWQgdG8gdXNlIE1hcGJveCBHTC4gXCIrbSk7aWYoXCJzXCI9PT1lWzBdKXRocm93IG5ldyBFcnJvcihcIlVzZSBhIHB1YmxpYyBhY2Nlc3MgdG9rZW4gKHBrLiopIHdpdGggTWFwYm94IEdMLCBub3QgYSBzZWNyZXQgYWNjZXNzIHRva2VuIChzay4qKS4gXCIrbSk7cmV0dXJuIHQucGFyYW1zLnB1c2goXCJhY2Nlc3NfdG9rZW49XCIrZSksTSh0KX1mdW5jdGlvbiB4KHQpe3JldHVybiAwPT09dC5pbmRleE9mKFwibWFwYm94OlwiKX12YXIgYj1mdW5jdGlvbih0LGUpe2lmKCF4KHQpKXJldHVybiB0O3ZhciByPVQodCk7cmV0dXJuIHIucGF0aD1cIi92NC9cIityLmF1dGhvcml0eStcIi5qc29uXCIsci5wYXJhbXMucHVzaChcInNlY3VyZVwiKSx5KHIsZSl9LF89ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9VCh0KTtyZXR1cm4geCh0KT8oaS5wYXRoPVwiL3N0eWxlcy92MVwiK2kucGF0aCtcIi9zcHJpdGVcIitlK3IseShpLG4pKTooaS5wYXRoKz1cIlwiK2UrcixNKGkpKX0sdz0vKFxcLihwbmd8anBnKVxcZCopKD89JCkvLGs9ZnVuY3Rpb24odCxlLHIpe2lmKCFlfHwheChlKSlyZXR1cm4gdDt2YXIgbj1UKHQpLGk9YS5kZXZpY2VQaXhlbFJhdGlvPj0yfHw1MTI9PT1yP1wiQDJ4XCI6XCJcIixvPWEuc3VwcG9ydHNXZWJwP1wiLndlYnBcIjpcIiQxXCI7cmV0dXJuIG4ucGF0aD1uLnBhdGgucmVwbGFjZSh3LFwiXCIraStvKSxmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKykwPT09dFtlXS5pbmRleE9mKFwiYWNjZXNzX3Rva2VuPXRrLlwiKSYmKHRbZV09XCJhY2Nlc3NfdG9rZW49XCIrKHYuQUNDRVNTX1RPS0VOfHxcIlwiKSl9KG4ucGFyYW1zKSxNKG4pfSxBPS9eKFxcdyspOlxcL1xcLyhbXlxcLz9dKikoXFwvW14/XSspP1xcPz8oLispPy87ZnVuY3Rpb24gVCh0KXt2YXIgZT10Lm1hdGNoKEEpO2lmKCFlKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBwYXJzZSBVUkwgb2JqZWN0XCIpO3JldHVybntwcm90b2NvbDplWzFdLGF1dGhvcml0eTplWzJdLHBhdGg6ZVszXXx8XCIvXCIscGFyYW1zOmVbNF0/ZVs0XS5zcGxpdChcIiZcIik6W119fWZ1bmN0aW9uIE0odCl7dmFyIGU9dC5wYXJhbXMubGVuZ3RoP1wiP1wiK3QucGFyYW1zLmpvaW4oXCImXCIpOlwiXCI7cmV0dXJuIHQucHJvdG9jb2wrXCI6Ly9cIit0LmF1dGhvcml0eSt0LnBhdGgrZX12YXIgUz10LmRlZmF1bHQuSFRNTEltYWdlRWxlbWVudCxFPXQuZGVmYXVsdC5IVE1MQ2FudmFzRWxlbWVudCxDPXQuZGVmYXVsdC5IVE1MVmlkZW9FbGVtZW50LEw9dC5kZWZhdWx0LkltYWdlRGF0YSx6PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuY29udGV4dD10LHRoaXMuZm9ybWF0PXIsdGhpcy50ZXh0dXJlPXQuZ2wuY3JlYXRlVGV4dHVyZSgpLHRoaXMudXBkYXRlKGUsbil9O3oucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPXQud2lkdGgsbj10LmhlaWdodCxpPSF0aGlzLnNpemV8fHRoaXMuc2l6ZVswXSE9PXJ8fHRoaXMuc2l6ZVsxXSE9PW4sYT10aGlzLmNvbnRleHQsbz1hLmdsO3RoaXMudXNlTWlwbWFwPUJvb2xlYW4oZSYmZS51c2VNaXBtYXApLG8uYmluZFRleHR1cmUoby5URVhUVVJFXzJELHRoaXMudGV4dHVyZSksaT8odGhpcy5zaXplPVtyLG5dLGEucGl4ZWxTdG9yZVVucGFjay5zZXQoMSksdGhpcy5mb3JtYXQhPT1vLlJHQkF8fGUmJiExPT09ZS5wcmVtdWx0aXBseXx8YS5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYS5zZXQoITApLHQgaW5zdGFuY2VvZiBTfHx0IGluc3RhbmNlb2YgRXx8dCBpbnN0YW5jZW9mIEN8fHQgaW5zdGFuY2VvZiBMP28udGV4SW1hZ2UyRChvLlRFWFRVUkVfMkQsMCx0aGlzLmZvcm1hdCx0aGlzLmZvcm1hdCxvLlVOU0lHTkVEX0JZVEUsdCk6by50ZXhJbWFnZTJEKG8uVEVYVFVSRV8yRCwwLHRoaXMuZm9ybWF0LHIsbiwwLHRoaXMuZm9ybWF0LG8uVU5TSUdORURfQllURSx0LmRhdGEpKTp0IGluc3RhbmNlb2YgU3x8dCBpbnN0YW5jZW9mIEV8fHQgaW5zdGFuY2VvZiBDfHx0IGluc3RhbmNlb2YgTD9vLnRleFN1YkltYWdlMkQoby5URVhUVVJFXzJELDAsMCwwLG8uUkdCQSxvLlVOU0lHTkVEX0JZVEUsdCk6by50ZXhTdWJJbWFnZTJEKG8uVEVYVFVSRV8yRCwwLDAsMCxyLG4sby5SR0JBLG8uVU5TSUdORURfQllURSx0LmRhdGEpLHRoaXMudXNlTWlwbWFwJiZ0aGlzLmlzU2l6ZVBvd2VyT2ZUd28oKSYmby5nZW5lcmF0ZU1pcG1hcChvLlRFWFRVUkVfMkQpfSx6LnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmNvbnRleHQuZ2w7bi5iaW5kVGV4dHVyZShuLlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKSxyIT09bi5MSU5FQVJfTUlQTUFQX05FQVJFU1R8fHRoaXMuaXNTaXplUG93ZXJPZlR3bygpfHwocj1uLkxJTkVBUiksdCE9PXRoaXMuZmlsdGVyJiYobi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfTUFHX0ZJTFRFUix0KSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NSU5fRklMVEVSLHJ8fHQpLHRoaXMuZmlsdGVyPXQpLGUhPT10aGlzLndyYXAmJihuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1MsZSksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9ULGUpLHRoaXMud3JhcD1lKX0sei5wcm90b3R5cGUuaXNTaXplUG93ZXJPZlR3bz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemVbMF09PT10aGlzLnNpemVbMV0mJk1hdGgubG9nKHRoaXMuc2l6ZVswXSkvTWF0aC5MTjIlMT09MH0sei5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuY29udGV4dC5nbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSksdGhpcy50ZXh0dXJlPW51bGx9O3ZhciBPPWZ1bmN0aW9uKCl7dGhpcy5pbWFnZXM9e30sdGhpcy5sb2FkZWQ9ITEsdGhpcy5yZXF1ZXN0b3JzPVtdLHRoaXMuc2hlbGZQYWNrPW5ldyB0LmRlZmF1bHQkMig2NCw2NCx7YXV0b1Jlc2l6ZTohMH0pLHRoaXMucGF0dGVybnM9e30sdGhpcy5hdGxhc0ltYWdlPW5ldyB0LlJHQkFJbWFnZSh7d2lkdGg6NjQsaGVpZ2h0OjY0fSksdGhpcy5kaXJ0eT0hMH07Ty5wcm90b3R5cGUuaXNMb2FkZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2FkZWR9LE8ucHJvdG90eXBlLnNldExvYWRlZD1mdW5jdGlvbih0KXtpZih0aGlzLmxvYWRlZCE9PXQmJih0aGlzLmxvYWRlZD10LHQpKXtmb3IodmFyIGU9MCxyPXRoaXMucmVxdWVzdG9ycztlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0saT1uLmlkcyxhPW4uY2FsbGJhY2s7dGhpcy5fbm90aWZ5KGksYSl9dGhpcy5yZXF1ZXN0b3JzPVtdfX0sTy5wcm90b3R5cGUuZ2V0SW1hZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW1hZ2VzW3RdfSxPLnByb3RvdHlwZS5hZGRJbWFnZT1mdW5jdGlvbih0LGUpe3RoaXMuaW1hZ2VzW3RdPWV9LE8ucHJvdG90eXBlLnJlbW92ZUltYWdlPWZ1bmN0aW9uKHQpe2RlbGV0ZSB0aGlzLmltYWdlc1t0XTt2YXIgZT10aGlzLnBhdHRlcm5zW3RdO2UmJih0aGlzLnNoZWxmUGFjay51bnJlZihlLmJpbiksZGVsZXRlIHRoaXMucGF0dGVybnNbdF0pfSxPLnByb3RvdHlwZS5nZXRJbWFnZXM9ZnVuY3Rpb24odCxlKXt2YXIgcj0hMDtpZighdGhpcy5pc0xvYWRlZCgpKWZvcih2YXIgbj0wLGk9dDtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07dGhpcy5pbWFnZXNbYV18fChyPSExKX10aGlzLmlzTG9hZGVkKCl8fHI/dGhpcy5fbm90aWZ5KHQsZSk6dGhpcy5yZXF1ZXN0b3JzLnB1c2goe2lkczp0LGNhbGxiYWNrOmV9KX0sTy5wcm90b3R5cGUuX25vdGlmeT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXSxvPXRoaXMuaW1hZ2VzW2FdO28mJihyW2FdPXtkYXRhOm8uZGF0YS5jbG9uZSgpLHBpeGVsUmF0aW86by5waXhlbFJhdGlvLHNkZjpvLnNkZn0pfWUobnVsbCxyKX0sTy5wcm90b3R5cGUuZ2V0UGl4ZWxTaXplPWZ1bmN0aW9uKCl7cmV0dXJue3dpZHRoOnRoaXMuc2hlbGZQYWNrLncsaGVpZ2h0OnRoaXMuc2hlbGZQYWNrLmh9fSxPLnByb3RvdHlwZS5nZXRQYXR0ZXJuPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMucGF0dGVybnNbZV07aWYocilyZXR1cm4gci5wb3NpdGlvbjt2YXIgbj10aGlzLmdldEltYWdlKGUpO2lmKCFuKXJldHVybiBudWxsO3ZhciBpPW4uZGF0YS53aWR0aCsyLGE9bi5kYXRhLmhlaWdodCsyLG89dGhpcy5zaGVsZlBhY2sucGFja09uZShpLGEpO2lmKCFvKXJldHVybiBudWxsO3RoaXMuYXRsYXNJbWFnZS5yZXNpemUodGhpcy5nZXRQaXhlbFNpemUoKSk7dmFyIHM9bi5kYXRhLGw9dGhpcy5hdGxhc0ltYWdlLGM9by54KzEsdT1vLnkrMSxoPXMud2lkdGgsZj1zLmhlaWdodDt0LlJHQkFJbWFnZS5jb3B5KHMsbCx7eDowLHk6MH0se3g6Yyx5OnV9LHt3aWR0aDpoLGhlaWdodDpmfSksdC5SR0JBSW1hZ2UuY29weShzLGwse3g6MCx5OmYtMX0se3g6Yyx5OnUtMX0se3dpZHRoOmgsaGVpZ2h0OjF9KSx0LlJHQkFJbWFnZS5jb3B5KHMsbCx7eDowLHk6MH0se3g6Yyx5OnUrZn0se3dpZHRoOmgsaGVpZ2h0OjF9KSx0LlJHQkFJbWFnZS5jb3B5KHMsbCx7eDpoLTEseTowfSx7eDpjLTEseTp1fSx7d2lkdGg6MSxoZWlnaHQ6Zn0pLHQuUkdCQUltYWdlLmNvcHkocyxsLHt4OjAseTowfSx7eDpjK2gseTp1fSx7d2lkdGg6MSxoZWlnaHQ6Zn0pLHRoaXMuZGlydHk9ITA7dmFyIHA9bmV3IHQuSW1hZ2VQb3NpdGlvbihvLG4pO3JldHVybiB0aGlzLnBhdHRlcm5zW2VdPXtiaW46byxwb3NpdGlvbjpwfSxwfSxPLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2w7dGhpcy5hdGxhc1RleHR1cmU/dGhpcy5kaXJ0eSYmKHRoaXMuYXRsYXNUZXh0dXJlLnVwZGF0ZSh0aGlzLmF0bGFzSW1hZ2UpLHRoaXMuZGlydHk9ITEpOnRoaXMuYXRsYXNUZXh0dXJlPW5ldyB6KHQsdGhpcy5hdGxhc0ltYWdlLGUuUkdCQSksdGhpcy5hdGxhc1RleHR1cmUuYmluZChlLkxJTkVBUixlLkNMQU1QX1RPX0VER0UpfTt2YXIgST1QLEQ9MWUyMDtmdW5jdGlvbiBQKHQsZSxyLG4saSxhKXt0aGlzLmZvbnRTaXplPXR8fDI0LHRoaXMuYnVmZmVyPXZvaWQgMD09PWU/MzplLHRoaXMuY3V0b2ZmPW58fC4yNSx0aGlzLmZvbnRGYW1pbHk9aXx8XCJzYW5zLXNlcmlmXCIsdGhpcy5mb250V2VpZ2h0PWF8fFwibm9ybWFsXCIsdGhpcy5yYWRpdXM9cnx8ODt2YXIgbz10aGlzLnNpemU9dGhpcy5mb250U2l6ZSsyKnRoaXMuYnVmZmVyO3RoaXMuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksdGhpcy5jYW52YXMud2lkdGg9dGhpcy5jYW52YXMuaGVpZ2h0PW8sdGhpcy5jdHg9dGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpLHRoaXMuY3R4LmZvbnQ9dGhpcy5mb250V2VpZ2h0K1wiIFwiK3RoaXMuZm9udFNpemUrXCJweCBcIit0aGlzLmZvbnRGYW1pbHksdGhpcy5jdHgudGV4dEJhc2VsaW5lPVwibWlkZGxlXCIsdGhpcy5jdHguZmlsbFN0eWxlPVwiYmxhY2tcIix0aGlzLmdyaWRPdXRlcj1uZXcgRmxvYXQ2NEFycmF5KG8qbyksdGhpcy5ncmlkSW5uZXI9bmV3IEZsb2F0NjRBcnJheShvKm8pLHRoaXMuZj1uZXcgRmxvYXQ2NEFycmF5KG8pLHRoaXMuZD1uZXcgRmxvYXQ2NEFycmF5KG8pLHRoaXMuej1uZXcgRmxvYXQ2NEFycmF5KG8rMSksdGhpcy52PW5ldyBJbnQxNkFycmF5KG8pLHRoaXMubWlkZGxlPU1hdGgucm91bmQoby8yKihuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJHZWNrby9cIik+PTA/MS4yOjEpKX1mdW5jdGlvbiBSKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcz0wO3M8ZTtzKyspe2Zvcih2YXIgbD0wO2w8cjtsKyspbltsXT10W2wqZStzXTtmb3IoRihuLGksYSxvLHIpLGw9MDtsPHI7bCsrKXRbbCplK3NdPWlbbF19Zm9yKGw9MDtsPHI7bCsrKXtmb3Iocz0wO3M8ZTtzKyspbltzXT10W2wqZStzXTtmb3IoRihuLGksYSxvLGUpLHM9MDtzPGU7cysrKXRbbCplK3NdPU1hdGguc3FydChpW3NdKX19ZnVuY3Rpb24gRih0LGUscixuLGkpe3JbMF09MCxuWzBdPS1ELG5bMV09K0Q7Zm9yKHZhciBhPTEsbz0wO2E8aTthKyspe2Zvcih2YXIgcz0odFthXSthKmEtKHRbcltvXV0rcltvXSpyW29dKSkvKDIqYS0yKnJbb10pO3M8PW5bb107KW8tLSxzPSh0W2FdK2EqYS0odFtyW29dXStyW29dKnJbb10pKS8oMiphLTIqcltvXSk7clsrK29dPWEsbltvXT1zLG5bbysxXT0rRH1mb3IoYT0wLG89MDthPGk7YSsrKXtmb3IoO25bbysxXTxhOylvKys7ZVthXT0oYS1yW29dKSooYS1yW29dKSt0W3Jbb11dfX1QLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQpe3RoaXMuY3R4LmNsZWFyUmVjdCgwLDAsdGhpcy5zaXplLHRoaXMuc2l6ZSksdGhpcy5jdHguZmlsbFRleHQodCx0aGlzLmJ1ZmZlcix0aGlzLm1pZGRsZSk7Zm9yKHZhciBlPXRoaXMuY3R4LmdldEltYWdlRGF0YSgwLDAsdGhpcy5zaXplLHRoaXMuc2l6ZSkscj1uZXcgVWludDhDbGFtcGVkQXJyYXkodGhpcy5zaXplKnRoaXMuc2l6ZSksbj0wO248dGhpcy5zaXplKnRoaXMuc2l6ZTtuKyspe3ZhciBpPWUuZGF0YVs0Km4rM10vMjU1O3RoaXMuZ3JpZE91dGVyW25dPTE9PT1pPzA6MD09PWk/RDpNYXRoLnBvdyhNYXRoLm1heCgwLC41LWkpLDIpLHRoaXMuZ3JpZElubmVyW25dPTE9PT1pP0Q6MD09PWk/MDpNYXRoLnBvdyhNYXRoLm1heCgwLGktLjUpLDIpfWZvcihSKHRoaXMuZ3JpZE91dGVyLHRoaXMuc2l6ZSx0aGlzLnNpemUsdGhpcy5mLHRoaXMuZCx0aGlzLnYsdGhpcy56KSxSKHRoaXMuZ3JpZElubmVyLHRoaXMuc2l6ZSx0aGlzLnNpemUsdGhpcy5mLHRoaXMuZCx0aGlzLnYsdGhpcy56KSxuPTA7bjx0aGlzLnNpemUqdGhpcy5zaXplO24rKyl7dmFyIGE9dGhpcy5ncmlkT3V0ZXJbbl0tdGhpcy5ncmlkSW5uZXJbbl07cltuXT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDI1NS0yNTUqKGEvdGhpcy5yYWRpdXMrdGhpcy5jdXRvZmYpKSkpfXJldHVybiByfTt2YXIgQj1mdW5jdGlvbih0LGUpe3RoaXMucmVxdWVzdFRyYW5zZm9ybT10LHRoaXMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5PWUsdGhpcy5lbnRyaWVzPXt9fTtCLnByb3RvdHlwZS5zZXRVUkw9ZnVuY3Rpb24odCl7dGhpcy51cmw9dH0sQi5wcm90b3R5cGUuZ2V0R2x5cGhzPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcyxpPVtdO2Zvcih2YXIgYSBpbiBlKWZvcih2YXIgbz0wLHM9ZVthXTtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb107aS5wdXNoKHtzdGFjazphLGlkOmx9KX10LmFzeW5jQWxsKGksZnVuY3Rpb24odCxlKXt2YXIgcj10LnN0YWNrLGk9dC5pZCxhPW4uZW50cmllc1tyXTthfHwoYT1uLmVudHJpZXNbcl09e2dseXBoczp7fSxyZXF1ZXN0czp7fX0pO3ZhciBvPWEuZ2x5cGhzW2ldO2lmKHZvaWQgMD09PW8paWYobz1uLl90aW55U0RGKGEscixpKSllKG51bGwse3N0YWNrOnIsaWQ6aSxnbHlwaDpvfSk7ZWxzZXt2YXIgcz1NYXRoLmZsb29yKGkvMjU2KTtpZigyNTYqcz42NTUzNSllKG5ldyBFcnJvcihcImdseXBocyA+IDY1NTM1IG5vdCBzdXBwb3J0ZWRcIikpO2Vsc2V7dmFyIGw9YS5yZXF1ZXN0c1tzXTtsfHwobD1hLnJlcXVlc3RzW3NdPVtdLEIubG9hZEdseXBoUmFuZ2UocixzLG4udXJsLG4ucmVxdWVzdFRyYW5zZm9ybSxmdW5jdGlvbih0LGUpe2lmKGUpZm9yKHZhciByIGluIGUpYS5nbHlwaHNbK3JdPWVbK3JdO2Zvcih2YXIgbj0wLGk9bDtuPGkubGVuZ3RoO24rPTEpKDAsaVtuXSkodCxlKTtkZWxldGUgYS5yZXF1ZXN0c1tzXX0pKSxsLnB1c2goZnVuY3Rpb24odCxuKXt0P2UodCk6biYmZShudWxsLHtzdGFjazpyLGlkOmksZ2x5cGg6bltpXXx8bnVsbH0pfSl9fWVsc2UgZShudWxsLHtzdGFjazpyLGlkOmksZ2x5cGg6b30pfSxmdW5jdGlvbih0LGUpe2lmKHQpcih0KTtlbHNlIGlmKGUpe2Zvcih2YXIgbj17fSxpPTAsYT1lO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXSxzPW8uc3RhY2ssbD1vLmlkLGM9by5nbHlwaDsobltzXXx8KG5bc109e30pKVtsXT1jJiZ7aWQ6Yy5pZCxiaXRtYXA6Yy5iaXRtYXAuY2xvbmUoKSxtZXRyaWNzOmMubWV0cmljc319cihudWxsLG4pfX0pfSxCLnByb3RvdHlwZS5fdGlueVNERj1mdW5jdGlvbihlLHIsbil7dmFyIGk9dGhpcy5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk7aWYoaSYmKHQuZGVmYXVsdCQ0W1wiQ0pLIFVuaWZpZWQgSWRlb2dyYXBoc1wiXShuKXx8dC5kZWZhdWx0JDRbXCJIYW5ndWwgU3lsbGFibGVzXCJdKG4pKSl7dmFyIGE9ZS50aW55U0RGO2lmKCFhKXt2YXIgbz1cIjQwMFwiOy9ib2xkL2kudGVzdChyKT9vPVwiOTAwXCI6L21lZGl1bS9pLnRlc3Qocik/bz1cIjUwMFwiOi9saWdodC9pLnRlc3QocikmJihvPVwiMjAwXCIpLGE9ZS50aW55U0RGPW5ldyBCLlRpbnlTREYoMjQsMyw4LC4yNSxpLG8pfXJldHVybntpZDpuLGJpdG1hcDpuZXcgdC5BbHBoYUltYWdlKHt3aWR0aDozMCxoZWlnaHQ6MzB9LGEuZHJhdyhTdHJpbmcuZnJvbUNoYXJDb2RlKG4pKSksbWV0cmljczp7d2lkdGg6MjQsaGVpZ2h0OjI0LGxlZnQ6MCx0b3A6LTgsYWR2YW5jZToyNH19fX0sQi5sb2FkR2x5cGhSYW5nZT1mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvPTI1NipyLHM9bysyNTUsbD1pKGZ1bmN0aW9uKHQsZSl7aWYoIXgodCkpcmV0dXJuIHQ7dmFyIHI9VCh0KTtyZXR1cm4gci5wYXRoPVwiL2ZvbnRzL3YxXCIrci5wYXRoLHkocixlKX0obikucmVwbGFjZShcIntmb250c3RhY2t9XCIsZSkucmVwbGFjZShcIntyYW5nZX1cIixvK1wiLVwiK3MpLHQuUmVzb3VyY2VUeXBlLkdseXBocyk7dC5nZXRBcnJheUJ1ZmZlcihsLGZ1bmN0aW9uKGUscil7aWYoZSlhKGUpO2Vsc2UgaWYocil7Zm9yKHZhciBuPXt9LGk9MCxvPXQuZGVmYXVsdCQzKHIuZGF0YSk7aTxvLmxlbmd0aDtpKz0xKXt2YXIgcz1vW2ldO25bcy5pZF09c31hKG51bGwsbil9fSl9LEIuVGlueVNERj1JO3ZhciBOPWZ1bmN0aW9uKCl7dGhpcy5zcGVjaWZpY2F0aW9uPXQuZGVmYXVsdCQ1LmxpZ2h0LnBvc2l0aW9ufTtOLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuc3BoZXJpY2FsVG9DYXJ0ZXNpYW4oZS5leHByZXNzaW9uLmV2YWx1YXRlKHIpKX0sTi5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybnt4OnQubnVtYmVyKGUueCxyLngsbikseTp0Lm51bWJlcihlLnksci55LG4pLHo6dC5udW1iZXIoZS56LHIueixuKX19O3ZhciBqPW5ldyB0LlByb3BlcnRpZXMoe2FuY2hvcjpuZXcgdC5EYXRhQ29uc3RhbnRQcm9wZXJ0eSh0LmRlZmF1bHQkNS5saWdodC5hbmNob3IpLHBvc2l0aW9uOm5ldyBOLGNvbG9yOm5ldyB0LkRhdGFDb25zdGFudFByb3BlcnR5KHQuZGVmYXVsdCQ1LmxpZ2h0LmNvbG9yKSxpbnRlbnNpdHk6bmV3IHQuRGF0YUNvbnN0YW50UHJvcGVydHkodC5kZWZhdWx0JDUubGlnaHQuaW50ZW5zaXR5KX0pLFY9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyKXtlLmNhbGwodGhpcyksdGhpcy5fdHJhbnNpdGlvbmFibGU9bmV3IHQuVHJhbnNpdGlvbmFibGUoaiksdGhpcy5zZXRMaWdodChyKSx0aGlzLl90cmFuc2l0aW9uaW5nPXRoaXMuX3RyYW5zaXRpb25hYmxlLnVudHJhbnNpdGlvbmVkKCl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmdldExpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25hYmxlLnNlcmlhbGl6ZSgpfSxyLnByb3RvdHlwZS5zZXRMaWdodD1mdW5jdGlvbihlKXtpZighdGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZUxpZ2h0LGUpKWZvcih2YXIgciBpbiBlKXt2YXIgbj1lW3JdO3QuZW5kc1dpdGgocixcIi10cmFuc2l0aW9uXCIpP3RoaXMuX3RyYW5zaXRpb25hYmxlLnNldFRyYW5zaXRpb24oci5zbGljZSgwLC1cIi10cmFuc2l0aW9uXCIubGVuZ3RoKSxuKTp0aGlzLl90cmFuc2l0aW9uYWJsZS5zZXRWYWx1ZShyLG4pfX0sci5wcm90b3R5cGUudXBkYXRlVHJhbnNpdGlvbnM9ZnVuY3Rpb24odCl7dGhpcy5fdHJhbnNpdGlvbmluZz10aGlzLl90cmFuc2l0aW9uYWJsZS50cmFuc2l0aW9uZWQodCx0aGlzLl90cmFuc2l0aW9uaW5nKX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uaW5nLmhhc1RyYW5zaXRpb24oKX0sci5wcm90b3R5cGUucmVjYWxjdWxhdGU9ZnVuY3Rpb24odCl7dGhpcy5wcm9wZXJ0aWVzPXRoaXMuX3RyYW5zaXRpb25pbmcucG9zc2libHlFdmFsdWF0ZSh0KX0sci5wcm90b3R5cGUuX3ZhbGlkYXRlPWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZW1pdFZhbGlkYXRpb25FcnJvcnModGhpcyxlLmNhbGwodC52YWxpZGF0ZVN0eWxlLHQuZXh0ZW5kKHt2YWx1ZTpyLHN0eWxlOntnbHlwaHM6ITAsc3ByaXRlOiEwfSxzdHlsZVNwZWM6dC5kZWZhdWx0JDV9KSkpfSxyfSh0LkV2ZW50ZWQpLFU9ZnVuY3Rpb24odCxlKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9ZSx0aGlzLm5leHRSb3c9MCx0aGlzLmJ5dGVzPTQsdGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KHRoaXMud2lkdGgqdGhpcy5oZWlnaHQqdGhpcy5ieXRlcyksdGhpcy5wb3NpdGlvbnM9e319O1UucHJvdG90eXBlLmdldERhc2g9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmpvaW4oXCIsXCIpK1N0cmluZyhlKTtyZXR1cm4gdGhpcy5wb3NpdGlvbnNbcl18fCh0aGlzLnBvc2l0aW9uc1tyXT10aGlzLmFkZERhc2godCxlKSksdGhpcy5wb3NpdGlvbnNbcl19LFUucHJvdG90eXBlLmFkZERhc2g9ZnVuY3Rpb24oZSxyKXt2YXIgbj1yPzc6MCxpPTIqbisxO2lmKHRoaXMubmV4dFJvdytpPnRoaXMuaGVpZ2h0KXJldHVybiB0Lndhcm5PbmNlKFwiTGluZUF0bGFzIG91dCBvZiBzcGFjZVwiKSxudWxsO2Zvcih2YXIgYT0wLG89MDtvPGUubGVuZ3RoO28rKylhKz1lW29dO2Zvcih2YXIgcz10aGlzLndpZHRoL2EsbD1zLzIsYz1lLmxlbmd0aCUyPT0xLHU9LW47dTw9bjt1KyspZm9yKHZhciBoPXRoaXMubmV4dFJvdytuK3UsZj10aGlzLndpZHRoKmgscD1jPy1lW2UubGVuZ3RoLTFdOjAsZD1lWzBdLGc9MSx2PTA7djx0aGlzLndpZHRoO3YrKyl7Zm9yKDtkPHYvczspcD1kLGQrPWVbZ10sYyYmZz09PWUubGVuZ3RoLTEmJihkKz1lWzBdKSxnKys7dmFyIG09TWF0aC5hYnModi1wKnMpLHk9TWF0aC5hYnModi1kKnMpLHg9TWF0aC5taW4obSx5KSxiPWclMj09MSxfPXZvaWQgMDtpZihyKXt2YXIgdz1uP3UvbioobCsxKTowO2lmKGIpe3ZhciBrPWwtTWF0aC5hYnModyk7Xz1NYXRoLnNxcnQoeCp4K2sqayl9ZWxzZSBfPWwtTWF0aC5zcXJ0KHgqeCt3KncpfWVsc2UgXz0oYj8xOi0xKSp4O3RoaXMuZGF0YVszKzQqKGYrdildPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LF8rMTI4KSl9dmFyIEE9e3k6KHRoaXMubmV4dFJvdytuKy41KS90aGlzLmhlaWdodCxoZWlnaHQ6MipuL3RoaXMuaGVpZ2h0LHdpZHRoOmF9O3JldHVybiB0aGlzLm5leHRSb3crPWksdGhpcy5kaXJ0eT0hMCxBfSxVLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2w7dGhpcy50ZXh0dXJlPyhlLmJpbmRUZXh0dXJlKGUuVEVYVFVSRV8yRCx0aGlzLnRleHR1cmUpLHRoaXMuZGlydHkmJih0aGlzLmRpcnR5PSExLGUudGV4U3ViSW1hZ2UyRChlLlRFWFRVUkVfMkQsMCwwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCxlLlJHQkEsZS5VTlNJR05FRF9CWVRFLHRoaXMuZGF0YSkpKToodGhpcy50ZXh0dXJlPWUuY3JlYXRlVGV4dHVyZSgpLGUuYmluZFRleHR1cmUoZS5URVhUVVJFXzJELHRoaXMudGV4dHVyZSksZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfV1JBUF9TLGUuUkVQRUFUKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9XUkFQX1QsZS5SRVBFQVQpLGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX01JTl9GSUxURVIsZS5MSU5FQVIpLGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX01BR19GSUxURVIsZS5MSU5FQVIpLGUudGV4SW1hZ2UyRChlLlRFWFRVUkVfMkQsMCxlLlJHQkEsdGhpcy53aWR0aCx0aGlzLmhlaWdodCwwLGUuUkdCQSxlLlVOU0lHTkVEX0JZVEUsdGhpcy5kYXRhKSl9O3ZhciBxPWZ1bmN0aW9uIGUocixuKXt0aGlzLndvcmtlclBvb2w9cix0aGlzLmFjdG9ycz1bXSx0aGlzLmN1cnJlbnRBY3Rvcj0wLHRoaXMuaWQ9dC51bmlxdWVJZCgpO2Zvcih2YXIgaT10aGlzLndvcmtlclBvb2wuYWNxdWlyZSh0aGlzLmlkKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV0scz1uZXcgZS5BY3RvcihvLG4sdGhpcy5pZCk7cy5uYW1lPVwiV29ya2VyIFwiK2EsdGhpcy5hY3RvcnMucHVzaChzKX19O2Z1bmN0aW9uIEgoZSxyLG4pe3ZhciBpPWZ1bmN0aW9uKGUscil7aWYoZSlyZXR1cm4gbihlKTtpZihyKXt2YXIgaT10LnBpY2socixbXCJ0aWxlc1wiLFwibWluem9vbVwiLFwibWF4em9vbVwiLFwiYXR0cmlidXRpb25cIixcIm1hcGJveF9sb2dvXCIsXCJib3VuZHNcIl0pO3IudmVjdG9yX2xheWVycyYmKGkudmVjdG9yTGF5ZXJzPXIudmVjdG9yX2xheWVycyxpLnZlY3RvckxheWVySWRzPWkudmVjdG9yTGF5ZXJzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSxuKG51bGwsaSl9fTtlLnVybD90LmdldEpTT04ocihiKGUudXJsKSx0LlJlc291cmNlVHlwZS5Tb3VyY2UpLGkpOmEuZnJhbWUoZnVuY3Rpb24oKXtyZXR1cm4gaShudWxsLGUpfSl9cS5wcm90b3R5cGUuYnJvYWRjYXN0PWZ1bmN0aW9uKGUscixuKXtuPW58fGZ1bmN0aW9uKCl7fSx0LmFzeW5jQWxsKHRoaXMuYWN0b3JzLGZ1bmN0aW9uKHQsbil7dC5zZW5kKGUscixuKX0sbil9LHEucHJvdG90eXBlLnNlbmQ9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuKFwibnVtYmVyXCIhPXR5cGVvZiBufHxpc05hTihuKSkmJihuPXRoaXMuY3VycmVudEFjdG9yPSh0aGlzLmN1cnJlbnRBY3RvcisxKSV0aGlzLmFjdG9ycy5sZW5ndGgpLHRoaXMuYWN0b3JzW25dLnNlbmQodCxlLHIpLG59LHEucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuYWN0b3JzLmZvckVhY2goZnVuY3Rpb24odCl7dC5yZW1vdmUoKX0pLHRoaXMuYWN0b3JzPVtdLHRoaXMud29ya2VyUG9vbC5yZWxlYXNlKHRoaXMuaWQpfSxxLkFjdG9yPXQuZGVmYXVsdCQ3O3ZhciBHPWZ1bmN0aW9uKHQsZSl7aWYoaXNOYU4odCl8fGlzTmFOKGUpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgTG5nTGF0IG9iamVjdDogKFwiK3QrXCIsIFwiK2UrXCIpXCIpO2lmKHRoaXMubG5nPSt0LHRoaXMubGF0PStlLHRoaXMubGF0PjkwfHx0aGlzLmxhdDwtOTApdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBMbmdMYXQgbGF0aXR1ZGUgdmFsdWU6IG11c3QgYmUgYmV0d2VlbiAtOTAgYW5kIDkwXCIpfTtHLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBHKHQud3JhcCh0aGlzLmxuZywtMTgwLDE4MCksdGhpcy5sYXQpfSxHLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMubG5nLHRoaXMubGF0XX0sRy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIkxuZ0xhdChcIit0aGlzLmxuZytcIiwgXCIrdGhpcy5sYXQrXCIpXCJ9LEcucHJvdG90eXBlLnRvQm91bmRzPWZ1bmN0aW9uKHQpe3ZhciBlPTM2MCp0LzQwMDc1MDE3LHI9ZS9NYXRoLmNvcyhNYXRoLlBJLzE4MCp0aGlzLmxhdCk7cmV0dXJuIG5ldyBZKG5ldyBHKHRoaXMubG5nLXIsdGhpcy5sYXQtZSksbmV3IEcodGhpcy5sbmcrcix0aGlzLmxhdCtlKSl9LEcuY29udmVydD1mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgRylyZXR1cm4gdDtpZihBcnJheS5pc0FycmF5KHQpJiYoMj09PXQubGVuZ3RofHwzPT09dC5sZW5ndGgpKXJldHVybiBuZXcgRyhOdW1iZXIodFswXSksTnVtYmVyKHRbMV0pKTtpZighQXJyYXkuaXNBcnJheSh0KSYmXCJvYmplY3RcIj09dHlwZW9mIHQmJm51bGwhPT10KXJldHVybiBuZXcgRyhOdW1iZXIodC5sbmcpLE51bWJlcih0LmxhdCkpO3Rocm93IG5ldyBFcnJvcihcImBMbmdMYXRMaWtlYCBhcmd1bWVudCBtdXN0IGJlIHNwZWNpZmllZCBhcyBhIExuZ0xhdCBpbnN0YW5jZSwgYW4gb2JqZWN0IHtsbmc6IDxsbmc+LCBsYXQ6IDxsYXQ+fSwgb3IgYW4gYXJyYXkgb2YgWzxsbmc+LCA8bGF0Pl1cIil9O3ZhciBZPWZ1bmN0aW9uKHQsZSl7dCYmKGU/dGhpcy5zZXRTb3V0aFdlc3QodCkuc2V0Tm9ydGhFYXN0KGUpOjQ9PT10Lmxlbmd0aD90aGlzLnNldFNvdXRoV2VzdChbdFswXSx0WzFdXSkuc2V0Tm9ydGhFYXN0KFt0WzJdLHRbM11dKTp0aGlzLnNldFNvdXRoV2VzdCh0WzBdKS5zZXROb3J0aEVhc3QodFsxXSkpfTtZLnByb3RvdHlwZS5zZXROb3J0aEVhc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25lPXQgaW5zdGFuY2VvZiBHP25ldyBHKHQubG5nLHQubGF0KTpHLmNvbnZlcnQodCksdGhpc30sWS5wcm90b3R5cGUuc2V0U291dGhXZXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9zdz10IGluc3RhbmNlb2YgRz9uZXcgRyh0LmxuZyx0LmxhdCk6Ry5jb252ZXJ0KHQpLHRoaXN9LFkucHJvdG90eXBlLmV4dGVuZD1mdW5jdGlvbih0KXt2YXIgZSxyLG49dGhpcy5fc3csaT10aGlzLl9uZTtpZih0IGluc3RhbmNlb2YgRyllPXQscj10O2Vsc2V7aWYoISh0IGluc3RhbmNlb2YgWSkpcmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5ldmVyeShBcnJheS5pc0FycmF5KT90aGlzLmV4dGVuZChZLmNvbnZlcnQodCkpOnRoaXMuZXh0ZW5kKEcuY29udmVydCh0KSk6dGhpcztpZihlPXQuX3N3LHI9dC5fbmUsIWV8fCFyKXJldHVybiB0aGlzfXJldHVybiBufHxpPyhuLmxuZz1NYXRoLm1pbihlLmxuZyxuLmxuZyksbi5sYXQ9TWF0aC5taW4oZS5sYXQsbi5sYXQpLGkubG5nPU1hdGgubWF4KHIubG5nLGkubG5nKSxpLmxhdD1NYXRoLm1heChyLmxhdCxpLmxhdCkpOih0aGlzLl9zdz1uZXcgRyhlLmxuZyxlLmxhdCksdGhpcy5fbmU9bmV3IEcoci5sbmcsci5sYXQpKSx0aGlzfSxZLnByb3RvdHlwZS5nZXRDZW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEcoKHRoaXMuX3N3LmxuZyt0aGlzLl9uZS5sbmcpLzIsKHRoaXMuX3N3LmxhdCt0aGlzLl9uZS5sYXQpLzIpfSxZLnByb3RvdHlwZS5nZXRTb3V0aFdlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3d9LFkucHJvdG90eXBlLmdldE5vcnRoRWFzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9uZX0sWS5wcm90b3R5cGUuZ2V0Tm9ydGhXZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBHKHRoaXMuZ2V0V2VzdCgpLHRoaXMuZ2V0Tm9ydGgoKSl9LFkucHJvdG90eXBlLmdldFNvdXRoRWFzdD1mdW5jdGlvbigpe3JldHVybiBuZXcgRyh0aGlzLmdldEVhc3QoKSx0aGlzLmdldFNvdXRoKCkpfSxZLnByb3RvdHlwZS5nZXRXZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3LmxuZ30sWS5wcm90b3R5cGUuZ2V0U291dGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3cubGF0fSxZLnByb3RvdHlwZS5nZXRFYXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25lLmxuZ30sWS5wcm90b3R5cGUuZ2V0Tm9ydGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmUubGF0fSxZLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMuX3N3LnRvQXJyYXkoKSx0aGlzLl9uZS50b0FycmF5KCldfSxZLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiTG5nTGF0Qm91bmRzKFwiK3RoaXMuX3N3LnRvU3RyaW5nKCkrXCIsIFwiK3RoaXMuX25lLnRvU3RyaW5nKCkrXCIpXCJ9LFkucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hKHRoaXMuX3N3JiZ0aGlzLl9uZSl9LFkuY29udmVydD1mdW5jdGlvbih0KXtyZXR1cm4hdHx8dCBpbnN0YW5jZW9mIFk/dDpuZXcgWSh0KX07dmFyIFc9ZnVuY3Rpb24odCxlLHIpe3RoaXMuYm91bmRzPVkuY29udmVydCh0aGlzLnZhbGlkYXRlQm91bmRzKHQpKSx0aGlzLm1pbnpvb209ZXx8MCx0aGlzLm1heHpvb209cnx8MjR9O1cucHJvdG90eXBlLnZhbGlkYXRlQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiY0PT09dC5sZW5ndGg/W01hdGgubWF4KC0xODAsdFswXSksTWF0aC5tYXgoLTkwLHRbMV0pLE1hdGgubWluKDE4MCx0WzJdKSxNYXRoLm1pbig5MCx0WzNdKV06Wy0xODAsLTkwLDE4MCw5MF19LFcucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodGhpcy5sbmdYKHRoaXMuYm91bmRzLmdldFdlc3QoKSx0LnopKSxyPU1hdGguZmxvb3IodGhpcy5sYXRZKHRoaXMuYm91bmRzLmdldE5vcnRoKCksdC56KSksbj1NYXRoLmNlaWwodGhpcy5sbmdYKHRoaXMuYm91bmRzLmdldEVhc3QoKSx0LnopKSxpPU1hdGguY2VpbCh0aGlzLmxhdFkodGhpcy5ib3VuZHMuZ2V0U291dGgoKSx0LnopKTtyZXR1cm4gdC54Pj1lJiZ0Lng8biYmdC55Pj1yJiZ0Lnk8aX0sVy5wcm90b3R5cGUubG5nWD1mdW5jdGlvbih0LGUpe3JldHVybih0KzE4MCkqKE1hdGgucG93KDIsZSkvMzYwKX0sVy5wcm90b3R5cGUubGF0WT1mdW5jdGlvbihlLHIpe3ZhciBuPXQuY2xhbXAoTWF0aC5zaW4oTWF0aC5QSS8xODAqZSksLS45OTk5LC45OTk5KSxpPU1hdGgucG93KDIscikvKDIqTWF0aC5QSSk7cmV0dXJuIE1hdGgucG93KDIsci0xKSsuNSpNYXRoLmxvZygoMStuKS8oMS1uKSkqLWl9O3ZhciBYPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGksYSl7aWYoZS5jYWxsKHRoaXMpLHRoaXMuaWQ9cix0aGlzLmRpc3BhdGNoZXI9aSx0aGlzLnR5cGU9XCJ2ZWN0b3JcIix0aGlzLm1pbnpvb209MCx0aGlzLm1heHpvb209MjIsdGhpcy5zY2hlbWU9XCJ4eXpcIix0aGlzLnRpbGVTaXplPTUxMix0aGlzLnJlcGFyc2VPdmVyc2NhbGVkPSEwLHRoaXMuaXNUaWxlQ2xpcHBlZD0hMCx0LmV4dGVuZCh0aGlzLHQucGljayhuLFtcInVybFwiLFwic2NoZW1lXCIsXCJ0aWxlU2l6ZVwiXSkpLHRoaXMuX29wdGlvbnM9dC5leHRlbmQoe3R5cGU6XCJ2ZWN0b3JcIn0sbiksdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nPW4uY29sbGVjdFJlc291cmNlVGltaW5nLDUxMiE9PXRoaXMudGlsZVNpemUpdGhyb3cgbmV3IEVycm9yKFwidmVjdG9yIHRpbGUgc291cmNlcyBtdXN0IGhhdmUgYSB0aWxlU2l6ZSBvZiA1MTJcIik7dGhpcy5zZXRFdmVudGVkUGFyZW50KGEpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhbG9hZGluZ1wiLHtkYXRhVHlwZTpcInNvdXJjZVwifSkpLEgodGhpcy5fb3B0aW9ucyx0aGlzLm1hcC5fdHJhbnNmb3JtUmVxdWVzdCxmdW5jdGlvbihyLG4pe3I/ZS5maXJlKG5ldyB0LkVycm9yRXZlbnQocikpOm4mJih0LmV4dGVuZChlLG4pLG4uYm91bmRzJiYoZS50aWxlQm91bmRzPW5ldyBXKG4uYm91bmRzLGUubWluem9vbSxlLm1heHpvb20pKSxlLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhXCIse2RhdGFUeXBlOlwic291cmNlXCIsc291cmNlRGF0YVR5cGU6XCJtZXRhZGF0YVwifSkpLGUuZmlyZShuZXcgdC5FdmVudChcImRhdGFcIix7ZGF0YVR5cGU6XCJzb3VyY2VcIixzb3VyY2VEYXRhVHlwZTpcImNvbnRlbnRcIn0pKSl9KX0sci5wcm90b3R5cGUuaGFzVGlsZT1mdW5jdGlvbih0KXtyZXR1cm4hdGhpcy50aWxlQm91bmRzfHx0aGlzLnRpbGVCb3VuZHMuY29udGFpbnModC5jYW5vbmljYWwpfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMubG9hZCgpfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5leHRlbmQoe30sdGhpcy5fb3B0aW9ucyl9LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49ayhlLnRpbGVJRC5jYW5vbmljYWwudXJsKHRoaXMudGlsZXMsdGhpcy5zY2hlbWUpLHRoaXMudXJsKSxpPXtyZXF1ZXN0OnRoaXMubWFwLl90cmFuc2Zvcm1SZXF1ZXN0KG4sdC5SZXNvdXJjZVR5cGUuVGlsZSksdWlkOmUudWlkLHRpbGVJRDplLnRpbGVJRCx6b29tOmUudGlsZUlELm92ZXJzY2FsZWRaLHRpbGVTaXplOnRoaXMudGlsZVNpemUqZS50aWxlSUQub3ZlcnNjYWxlRmFjdG9yKCksdHlwZTp0aGlzLnR5cGUsc291cmNlOnRoaXMuaWQscGl4ZWxSYXRpbzphLmRldmljZVBpeGVsUmF0aW8sc2hvd0NvbGxpc2lvbkJveGVzOnRoaXMubWFwLnNob3dDb2xsaXNpb25Cb3hlc307ZnVuY3Rpb24gbyh0LG4pe3JldHVybiBlLmFib3J0ZWQ/cihudWxsKTp0P3IodCk6KG4mJm4ucmVzb3VyY2VUaW1pbmcmJihlLnJlc291cmNlVGltaW5nPW4ucmVzb3VyY2VUaW1pbmcpLHRoaXMubWFwLl9yZWZyZXNoRXhwaXJlZFRpbGVzJiZlLnNldEV4cGlyeURhdGEobiksZS5sb2FkVmVjdG9yRGF0YShuLHRoaXMubWFwLnBhaW50ZXIpLHIobnVsbCksdm9pZChlLnJlbG9hZENhbGxiYWNrJiYodGhpcy5sb2FkVGlsZShlLGUucmVsb2FkQ2FsbGJhY2spLGUucmVsb2FkQ2FsbGJhY2s9bnVsbCkpKX1pLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nPXRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZyx2b2lkIDA9PT1lLndvcmtlcklEfHxcImV4cGlyZWRcIj09PWUuc3RhdGU/ZS53b3JrZXJJRD10aGlzLmRpc3BhdGNoZXIuc2VuZChcImxvYWRUaWxlXCIsaSxvLmJpbmQodGhpcykpOlwibG9hZGluZ1wiPT09ZS5zdGF0ZT9lLnJlbG9hZENhbGxiYWNrPXI6dGhpcy5kaXNwYXRjaGVyLnNlbmQoXCJyZWxvYWRUaWxlXCIsaSxvLmJpbmQodGhpcyksZS53b3JrZXJJRCl9LHIucHJvdG90eXBlLmFib3J0VGlsZT1mdW5jdGlvbih0KXt0aGlzLmRpc3BhdGNoZXIuc2VuZChcImFib3J0VGlsZVwiLHt1aWQ6dC51aWQsdHlwZTp0aGlzLnR5cGUsc291cmNlOnRoaXMuaWR9LHZvaWQgMCx0LndvcmtlcklEKX0sci5wcm90b3R5cGUudW5sb2FkVGlsZT1mdW5jdGlvbih0KXt0LnVubG9hZFZlY3RvckRhdGEoKSx0aGlzLmRpc3BhdGNoZXIuc2VuZChcInJlbW92ZVRpbGVcIix7dWlkOnQudWlkLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkfSx2b2lkIDAsdC53b3JrZXJJRCl9LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4hMX0scn0odC5FdmVudGVkKSxaPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGksYSl7ZS5jYWxsKHRoaXMpLHRoaXMuaWQ9cix0aGlzLmRpc3BhdGNoZXI9aSx0aGlzLnNldEV2ZW50ZWRQYXJlbnQoYSksdGhpcy50eXBlPVwicmFzdGVyXCIsdGhpcy5taW56b29tPTAsdGhpcy5tYXh6b29tPTIyLHRoaXMucm91bmRab29tPSEwLHRoaXMuc2NoZW1lPVwieHl6XCIsdGhpcy50aWxlU2l6ZT01MTIsdGhpcy5fbG9hZGVkPSExLHRoaXMuX29wdGlvbnM9dC5leHRlbmQoe30sbiksdC5leHRlbmQodGhpcyx0LnBpY2sobixbXCJ1cmxcIixcInNjaGVtZVwiLFwidGlsZVNpemVcIl0pKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YWxvYWRpbmdcIix7ZGF0YVR5cGU6XCJzb3VyY2VcIn0pKSxIKHRoaXMuX29wdGlvbnMsdGhpcy5tYXAuX3RyYW5zZm9ybVJlcXVlc3QsZnVuY3Rpb24ocixuKXtyP2UuZmlyZShuZXcgdC5FcnJvckV2ZW50KHIpKTpuJiYodC5leHRlbmQoZSxuKSxuLmJvdW5kcyYmKGUudGlsZUJvdW5kcz1uZXcgVyhuLmJvdW5kcyxlLm1pbnpvb20sZS5tYXh6b29tKSksZS5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YVwiLHtkYXRhVHlwZTpcInNvdXJjZVwiLHNvdXJjZURhdGFUeXBlOlwibWV0YWRhdGFcIn0pKSxlLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhXCIse2RhdGFUeXBlOlwic291cmNlXCIsc291cmNlRGF0YVR5cGU6XCJjb250ZW50XCJ9KSkpfSl9LHIucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMubWFwPXQsdGhpcy5sb2FkKCl9LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0LmV4dGVuZCh7fSx0aGlzLl9vcHRpb25zKX0sci5wcm90b3R5cGUuaGFzVGlsZT1mdW5jdGlvbih0KXtyZXR1cm4hdGhpcy50aWxlQm91bmRzfHx0aGlzLnRpbGVCb3VuZHMuY29udGFpbnModC5jYW5vbmljYWwpfSxyLnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMsaT1rKGUudGlsZUlELmNhbm9uaWNhbC51cmwodGhpcy50aWxlcyx0aGlzLnNjaGVtZSksdGhpcy51cmwsdGhpcy50aWxlU2l6ZSk7ZS5yZXF1ZXN0PXQuZ2V0SW1hZ2UodGhpcy5tYXAuX3RyYW5zZm9ybVJlcXVlc3QoaSx0LlJlc291cmNlVHlwZS5UaWxlKSxmdW5jdGlvbih0LGkpe2lmKGRlbGV0ZSBlLnJlcXVlc3QsZS5hYm9ydGVkKWUuc3RhdGU9XCJ1bmxvYWRlZFwiLHIobnVsbCk7ZWxzZSBpZih0KWUuc3RhdGU9XCJlcnJvcmVkXCIscih0KTtlbHNlIGlmKGkpe24ubWFwLl9yZWZyZXNoRXhwaXJlZFRpbGVzJiZlLnNldEV4cGlyeURhdGEoaSksZGVsZXRlIGkuY2FjaGVDb250cm9sLGRlbGV0ZSBpLmV4cGlyZXM7dmFyIGE9bi5tYXAucGFpbnRlci5jb250ZXh0LG89YS5nbDtlLnRleHR1cmU9bi5tYXAucGFpbnRlci5nZXRUaWxlVGV4dHVyZShpLndpZHRoKSxlLnRleHR1cmU/ZS50ZXh0dXJlLnVwZGF0ZShpLHt1c2VNaXBtYXA6ITB9KTooZS50ZXh0dXJlPW5ldyB6KGEsaSxvLlJHQkEse3VzZU1pcG1hcDohMH0pLGUudGV4dHVyZS5iaW5kKG8uTElORUFSLG8uQ0xBTVBfVE9fRURHRSxvLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCksYS5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMmJm8udGV4UGFyYW1ldGVyZihvLlRFWFRVUkVfMkQsYS5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQsYS5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNNYXgpKSxlLnN0YXRlPVwibG9hZGVkXCIscihudWxsKX19KX0sci5wcm90b3R5cGUuYWJvcnRUaWxlPWZ1bmN0aW9uKHQsZSl7dC5yZXF1ZXN0JiYodC5yZXF1ZXN0LmFib3J0KCksZGVsZXRlIHQucmVxdWVzdCksZSgpfSxyLnByb3RvdHlwZS51bmxvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7dC50ZXh0dXJlJiZ0aGlzLm1hcC5wYWludGVyLnNhdmVUaWxlVGV4dHVyZSh0LnRleHR1cmUpLGUoKX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiExfSxyfSh0LkV2ZW50ZWQpLCQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4saSxhKXtlLmNhbGwodGhpcyxyLG4saSxhKSx0aGlzLnR5cGU9XCJyYXN0ZXItZGVtXCIsdGhpcy5tYXh6b29tPTIyLHRoaXMuX29wdGlvbnM9dC5leHRlbmQoe30sbiksdGhpcy5lbmNvZGluZz1uLmVuY29kaW5nfHxcIm1hcGJveFwifXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpcInJhc3Rlci1kZW1cIix1cmw6dGhpcy51cmwsdGlsZVNpemU6dGhpcy50aWxlU2l6ZSx0aWxlczp0aGlzLnRpbGVzLGJvdW5kczp0aGlzLmJvdW5kcyxlbmNvZGluZzp0aGlzLmVuY29kaW5nfX0sci5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj1rKGUudGlsZUlELmNhbm9uaWNhbC51cmwodGhpcy50aWxlcyx0aGlzLnNjaGVtZSksdGhpcy51cmwsdGhpcy50aWxlU2l6ZSk7ZS5yZXF1ZXN0PXQuZ2V0SW1hZ2UodGhpcy5tYXAuX3RyYW5zZm9ybVJlcXVlc3Qobix0LlJlc291cmNlVHlwZS5UaWxlKSxmdW5jdGlvbih0LG4pe2lmKGRlbGV0ZSBlLnJlcXVlc3QsZS5hYm9ydGVkKWUuc3RhdGU9XCJ1bmxvYWRlZFwiLHIobnVsbCk7ZWxzZSBpZih0KWUuc3RhdGU9XCJlcnJvcmVkXCIscih0KTtlbHNlIGlmKG4pe3RoaXMubWFwLl9yZWZyZXNoRXhwaXJlZFRpbGVzJiZlLnNldEV4cGlyeURhdGEobiksZGVsZXRlIG4uY2FjaGVDb250cm9sLGRlbGV0ZSBuLmV4cGlyZXM7dmFyIGk9YS5nZXRJbWFnZURhdGEobiksbz17dWlkOmUudWlkLGNvb3JkOmUudGlsZUlELHNvdXJjZTp0aGlzLmlkLHJhd0ltYWdlRGF0YTppLGVuY29kaW5nOnRoaXMuZW5jb2Rpbmd9O2Uud29ya2VySUQmJlwiZXhwaXJlZFwiIT09ZS5zdGF0ZXx8KGUud29ya2VySUQ9dGhpcy5kaXNwYXRjaGVyLnNlbmQoXCJsb2FkREVNVGlsZVwiLG8sZnVuY3Rpb24odCxuKXt0JiYoZS5zdGF0ZT1cImVycm9yZWRcIixyKHQpKSxuJiYoZS5kZW09bixlLm5lZWRzSGlsbHNoYWRlUHJlcGFyZT0hMCxlLnN0YXRlPVwibG9hZGVkXCIscihudWxsKSl9LmJpbmQodGhpcykpKX19LmJpbmQodGhpcykpLGUubmVpZ2hib3JpbmdUaWxlcz10aGlzLl9nZXROZWlnaGJvcmluZ1RpbGVzKGUudGlsZUlEKX0sci5wcm90b3R5cGUuX2dldE5laWdoYm9yaW5nVGlsZXM9ZnVuY3Rpb24oZSl7dmFyIHI9ZS5jYW5vbmljYWwsbj1NYXRoLnBvdygyLHIueiksaT0oci54LTErbiklbixhPTA9PT1yLng/ZS53cmFwLTE6ZS53cmFwLG89KHIueCsxK24pJW4scz1yLngrMT09PW4/ZS53cmFwKzE6ZS53cmFwLGw9e307cmV0dXJuIGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLGEsci56LGksci55KS5rZXldPXtiYWNrZmlsbGVkOiExfSxsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixzLHIueixvLHIueSkua2V5XT17YmFja2ZpbGxlZDohMX0sci55PjAmJihsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixhLHIueixpLHIueS0xKS5rZXldPXtiYWNrZmlsbGVkOiExfSxsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixlLndyYXAsci56LHIueCxyLnktMSkua2V5XT17YmFja2ZpbGxlZDohMX0sbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFoscyxyLnosbyxyLnktMSkua2V5XT17YmFja2ZpbGxlZDohMX0pLHIueSsxPG4mJihsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixhLHIueixpLHIueSsxKS5rZXldPXtiYWNrZmlsbGVkOiExfSxsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixlLndyYXAsci56LHIueCxyLnkrMSkua2V5XT17YmFja2ZpbGxlZDohMX0sbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFoscyxyLnosbyxyLnkrMSkua2V5XT17YmFja2ZpbGxlZDohMX0pLGx9LHIucHJvdG90eXBlLnVubG9hZFRpbGU9ZnVuY3Rpb24odCl7dC5kZW1UZXh0dXJlJiZ0aGlzLm1hcC5wYWludGVyLnNhdmVUaWxlVGV4dHVyZSh0LmRlbVRleHR1cmUpLHQuZmJvJiYodC5mYm8uZGVzdHJveSgpLGRlbGV0ZSB0LmZibyksdC5kZW0mJmRlbGV0ZSB0LmRlbSxkZWxldGUgdC5uZWlnaGJvcmluZ1RpbGVzLHQuc3RhdGU9XCJ1bmxvYWRlZFwiLHRoaXMuZGlzcGF0Y2hlci5zZW5kKFwicmVtb3ZlREVNVGlsZVwiLHt1aWQ6dC51aWQsc291cmNlOnRoaXMuaWR9LHZvaWQgMCx0LndvcmtlcklEKX0scn0oWiksSj1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpLGEpe2UuY2FsbCh0aGlzKSx0aGlzLmlkPXIsdGhpcy50eXBlPVwiZ2VvanNvblwiLHRoaXMubWluem9vbT0wLHRoaXMubWF4em9vbT0xOCx0aGlzLnRpbGVTaXplPTUxMix0aGlzLmlzVGlsZUNsaXBwZWQ9ITAsdGhpcy5yZXBhcnNlT3ZlcnNjYWxlZD0hMCx0aGlzLl9yZW1vdmVkPSExLHRoaXMuZGlzcGF0Y2hlcj1pLHRoaXMuc2V0RXZlbnRlZFBhcmVudChhKSx0aGlzLl9kYXRhPW4uZGF0YSx0aGlzLl9vcHRpb25zPXQuZXh0ZW5kKHt9LG4pLHRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZz1uLmNvbGxlY3RSZXNvdXJjZVRpbWluZyx0aGlzLl9yZXNvdXJjZVRpbWluZz1bXSx2b2lkIDAhPT1uLm1heHpvb20mJih0aGlzLm1heHpvb209bi5tYXh6b29tKSxuLnR5cGUmJih0aGlzLnR5cGU9bi50eXBlKTt2YXIgbz10LmRlZmF1bHQkOC90aGlzLnRpbGVTaXplO3RoaXMud29ya2VyT3B0aW9ucz10LmV4dGVuZCh7c291cmNlOnRoaXMuaWQsY2x1c3RlcjpuLmNsdXN0ZXJ8fCExLGdlb2pzb25WdE9wdGlvbnM6e2J1ZmZlcjoodm9pZCAwIT09bi5idWZmZXI/bi5idWZmZXI6MTI4KSpvLHRvbGVyYW5jZToodm9pZCAwIT09bi50b2xlcmFuY2U/bi50b2xlcmFuY2U6LjM3NSkqbyxleHRlbnQ6dC5kZWZhdWx0JDgsbWF4Wm9vbTp0aGlzLm1heHpvb20sbGluZU1ldHJpY3M6bi5saW5lTWV0cmljc3x8ITF9LHN1cGVyY2x1c3Rlck9wdGlvbnM6e21heFpvb206dm9pZCAwIT09bi5jbHVzdGVyTWF4Wm9vbT9NYXRoLm1pbihuLmNsdXN0ZXJNYXhab29tLHRoaXMubWF4em9vbS0xKTp0aGlzLm1heHpvb20tMSxleHRlbnQ6dC5kZWZhdWx0JDgscmFkaXVzOihuLmNsdXN0ZXJSYWRpdXN8fDUwKSpvLGxvZzohMX19LG4ud29ya2VyT3B0aW9ucyl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuZmlyZShuZXcgdC5FdmVudChcImRhdGFsb2FkaW5nXCIse2RhdGFUeXBlOlwic291cmNlXCJ9KSksdGhpcy5fdXBkYXRlV29ya2VyRGF0YShmdW5jdGlvbihyKXtpZihyKWUuZmlyZShuZXcgdC5FcnJvckV2ZW50KHIpKTtlbHNle3ZhciBuPXtkYXRhVHlwZTpcInNvdXJjZVwiLHNvdXJjZURhdGFUeXBlOlwibWV0YWRhdGFcIn07ZS5fY29sbGVjdFJlc291cmNlVGltaW5nJiZlLl9yZXNvdXJjZVRpbWluZyYmZS5fcmVzb3VyY2VUaW1pbmcubGVuZ3RoPjAmJihuLnJlc291cmNlVGltaW5nPWUuX3Jlc291cmNlVGltaW5nLGUuX3Jlc291cmNlVGltaW5nPVtdKSxlLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhXCIsbikpfX0pfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMubG9hZCgpfSxyLnByb3RvdHlwZS5zZXREYXRhPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7cmV0dXJuIHRoaXMuX2RhdGE9ZSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhbG9hZGluZ1wiLHtkYXRhVHlwZTpcInNvdXJjZVwifSkpLHRoaXMuX3VwZGF0ZVdvcmtlckRhdGEoZnVuY3Rpb24oZSl7aWYoZSlyZXR1cm4gci5maXJlKG5ldyB0LkVycm9yRXZlbnQoZSkpO3ZhciBuPXtkYXRhVHlwZTpcInNvdXJjZVwiLHNvdXJjZURhdGFUeXBlOlwiY29udGVudFwifTtyLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcmJnIuX3Jlc291cmNlVGltaW5nJiZyLl9yZXNvdXJjZVRpbWluZy5sZW5ndGg+MCYmKG4ucmVzb3VyY2VUaW1pbmc9ci5fcmVzb3VyY2VUaW1pbmcsci5fcmVzb3VyY2VUaW1pbmc9W10pLHIuZmlyZShuZXcgdC5FdmVudChcImRhdGFcIixuKSl9KSx0aGlzfSxyLnByb3RvdHlwZS5fdXBkYXRlV29ya2VyRGF0YT1mdW5jdGlvbihlKXt2YXIgcixuLGk9dGhpcyxhPXQuZXh0ZW5kKHt9LHRoaXMud29ya2VyT3B0aW9ucyksbz10aGlzLl9kYXRhO1wic3RyaW5nXCI9PXR5cGVvZiBvPyhhLnJlcXVlc3Q9dGhpcy5tYXAuX3RyYW5zZm9ybVJlcXVlc3QoKHI9bywobj10LmRlZmF1bHQuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIikpLmhyZWY9cixuLmhyZWYpLHQuUmVzb3VyY2VUeXBlLlNvdXJjZSksYS5yZXF1ZXN0LmNvbGxlY3RSZXNvdXJjZVRpbWluZz10aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcpOmEuZGF0YT1KU09OLnN0cmluZ2lmeShvKSx0aGlzLndvcmtlcklEPXRoaXMuZGlzcGF0Y2hlci5zZW5kKHRoaXMudHlwZStcIi5cIithLnNvdXJjZStcIi5sb2FkRGF0YVwiLGEsZnVuY3Rpb24odCxyKXtpLl9yZW1vdmVkfHxyJiZyLmFiYW5kb25lZHx8KGkuX2xvYWRlZD0hMCxyJiZyLnJlc291cmNlVGltaW5nJiZyLnJlc291cmNlVGltaW5nW2kuaWRdJiYoaS5fcmVzb3VyY2VUaW1pbmc9ci5yZXNvdXJjZVRpbWluZ1tpLmlkXS5zbGljZSgwKSksaS5kaXNwYXRjaGVyLnNlbmQoaS50eXBlK1wiLlwiK2Euc291cmNlK1wiLmNvYWxlc2NlXCIsbnVsbCxudWxsLGkud29ya2VySUQpLGUodCkpfSx0aGlzLndvcmtlcklEKX0sci5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49dm9pZCAwPT09dC53b3JrZXJJRD9cImxvYWRUaWxlXCI6XCJyZWxvYWRUaWxlXCIsaT17dHlwZTp0aGlzLnR5cGUsdWlkOnQudWlkLHRpbGVJRDp0LnRpbGVJRCx6b29tOnQudGlsZUlELm92ZXJzY2FsZWRaLG1heFpvb206dGhpcy5tYXh6b29tLHRpbGVTaXplOnRoaXMudGlsZVNpemUsc291cmNlOnRoaXMuaWQscGl4ZWxSYXRpbzphLmRldmljZVBpeGVsUmF0aW8sc2hvd0NvbGxpc2lvbkJveGVzOnRoaXMubWFwLnNob3dDb2xsaXNpb25Cb3hlc307dC53b3JrZXJJRD10aGlzLmRpc3BhdGNoZXIuc2VuZChuLGksZnVuY3Rpb24oaSxhKXtyZXR1cm4gdC51bmxvYWRWZWN0b3JEYXRhKCksdC5hYm9ydGVkP2UobnVsbCk6aT9lKGkpOih0LmxvYWRWZWN0b3JEYXRhKGEsci5tYXAucGFpbnRlcixcInJlbG9hZFRpbGVcIj09PW4pLGUobnVsbCkpfSx0aGlzLndvcmtlcklEKX0sci5wcm90b3R5cGUuYWJvcnRUaWxlPWZ1bmN0aW9uKHQpe3QuYWJvcnRlZD0hMH0sci5wcm90b3R5cGUudW5sb2FkVGlsZT1mdW5jdGlvbih0KXt0LnVubG9hZFZlY3RvckRhdGEoKSx0aGlzLmRpc3BhdGNoZXIuc2VuZChcInJlbW92ZVRpbGVcIix7dWlkOnQudWlkLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkfSxudWxsLHQud29ya2VySUQpfSxyLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3RoaXMuX3JlbW92ZWQ9ITAsdGhpcy5kaXNwYXRjaGVyLnNlbmQoXCJyZW1vdmVTb3VyY2VcIix7dHlwZTp0aGlzLnR5cGUsc291cmNlOnRoaXMuaWR9LG51bGwsdGhpcy53b3JrZXJJRCl9LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0LmV4dGVuZCh7fSx0aGlzLl9vcHRpb25zLHt0eXBlOnRoaXMudHlwZSxkYXRhOnRoaXMuX2RhdGF9KX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiExfSxyfSh0LkV2ZW50ZWQpLEs9dC5jcmVhdGVMYXlvdXQoW3tuYW1lOlwiYV9wb3NcIix0eXBlOlwiSW50MTZcIixjb21wb25lbnRzOjJ9LHtuYW1lOlwiYV90ZXh0dXJlX3Bvc1wiLHR5cGU6XCJJbnQxNlwiLGNvbXBvbmVudHM6Mn1dKSxRPWZ1bmN0aW9uKCl7dGhpcy5ib3VuZFByb2dyYW09bnVsbCx0aGlzLmJvdW5kTGF5b3V0VmVydGV4QnVmZmVyPW51bGwsdGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVycz1bXSx0aGlzLmJvdW5kSW5kZXhCdWZmZXI9bnVsbCx0aGlzLmJvdW5kVmVydGV4T2Zmc2V0PW51bGwsdGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXI9bnVsbCx0aGlzLnZhbz1udWxsfTtRLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dGhpcy5jb250ZXh0PXQ7Zm9yKHZhciBsPXRoaXMuYm91bmRQYWludFZlcnRleEJ1ZmZlcnMubGVuZ3RoIT09bi5sZW5ndGgsYz0wOyFsJiZjPG4ubGVuZ3RoO2MrKyl0aGlzLmJvdW5kUGFpbnRWZXJ0ZXhCdWZmZXJzW2NdIT09bltjXSYmKGw9ITApO3ZhciB1PSF0aGlzLnZhb3x8dGhpcy5ib3VuZFByb2dyYW0hPT1lfHx0aGlzLmJvdW5kTGF5b3V0VmVydGV4QnVmZmVyIT09cnx8bHx8dGhpcy5ib3VuZEluZGV4QnVmZmVyIT09aXx8dGhpcy5ib3VuZFZlcnRleE9mZnNldCE9PWF8fHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyIT09b3x8dGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXIyIT09czshdC5leHRWZXJ0ZXhBcnJheU9iamVjdHx8dT90aGlzLmZyZXNoQmluZChlLHIsbixpLGEsbyxzKToodC5iaW5kVmVydGV4QXJyYXlPRVMuc2V0KHRoaXMudmFvKSxvJiZvLmJpbmQoKSxpJiZpLmR5bmFtaWNEcmF3JiZpLmJpbmQoKSxzJiZzLmJpbmQoKSl9LFEucHJvdG90eXBlLmZyZXNoQmluZD1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcyxsPXQubnVtQXR0cmlidXRlcyxjPXRoaXMuY29udGV4dCx1PWMuZ2w7aWYoYy5leHRWZXJ0ZXhBcnJheU9iamVjdCl0aGlzLnZhbyYmdGhpcy5kZXN0cm95KCksdGhpcy52YW89Yy5leHRWZXJ0ZXhBcnJheU9iamVjdC5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpLGMuYmluZFZlcnRleEFycmF5T0VTLnNldCh0aGlzLnZhbykscz0wLHRoaXMuYm91bmRQcm9ncmFtPXQsdGhpcy5ib3VuZExheW91dFZlcnRleEJ1ZmZlcj1lLHRoaXMuYm91bmRQYWludFZlcnRleEJ1ZmZlcnM9cix0aGlzLmJvdW5kSW5kZXhCdWZmZXI9bix0aGlzLmJvdW5kVmVydGV4T2Zmc2V0PWksdGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXI9YSx0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlcjI9bztlbHNle3M9Yy5jdXJyZW50TnVtQXR0cmlidXRlc3x8MDtmb3IodmFyIGg9bDtoPHM7aCsrKXUuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGgpfWUuZW5hYmxlQXR0cmlidXRlcyh1LHQpO2Zvcih2YXIgZj0wLHA9cjtmPHAubGVuZ3RoO2YrPTEpcFtmXS5lbmFibGVBdHRyaWJ1dGVzKHUsdCk7YSYmYS5lbmFibGVBdHRyaWJ1dGVzKHUsdCksbyYmby5lbmFibGVBdHRyaWJ1dGVzKHUsdCksZS5iaW5kKCksZS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyh1LHQsaSk7Zm9yKHZhciBkPTAsZz1yO2Q8Zy5sZW5ndGg7ZCs9MSl7dmFyIHY9Z1tkXTt2LmJpbmQoKSx2LnNldFZlcnRleEF0dHJpYlBvaW50ZXJzKHUsdCxpKX1hJiYoYS5iaW5kKCksYS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyh1LHQsaSkpLG4mJm4uYmluZCgpLG8mJihvLmJpbmQoKSxvLnNldFZlcnRleEF0dHJpYlBvaW50ZXJzKHUsdCxpKSksYy5jdXJyZW50TnVtQXR0cmlidXRlcz1sfSxRLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy52YW8mJih0aGlzLmNvbnRleHQuZXh0VmVydGV4QXJyYXlPYmplY3QuZGVsZXRlVmVydGV4QXJyYXlPRVModGhpcy52YW8pLHRoaXMudmFvPW51bGwpfTt2YXIgdHQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LHIsbixpKXtlLmNhbGwodGhpcyksdGhpcy5pZD10LHRoaXMuZGlzcGF0Y2hlcj1uLHRoaXMuY29vcmRpbmF0ZXM9ci5jb29yZGluYXRlcyx0aGlzLnR5cGU9XCJpbWFnZVwiLHRoaXMubWluem9vbT0wLHRoaXMubWF4em9vbT0yMix0aGlzLnRpbGVTaXplPTUxMix0aGlzLnRpbGVzPXt9LHRoaXMuc2V0RXZlbnRlZFBhcmVudChpKSx0aGlzLm9wdGlvbnM9cn1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YWxvYWRpbmdcIix7ZGF0YVR5cGU6XCJzb3VyY2VcIn0pKSx0aGlzLnVybD10aGlzLm9wdGlvbnMudXJsLHQuZ2V0SW1hZ2UodGhpcy5tYXAuX3RyYW5zZm9ybVJlcXVlc3QodGhpcy51cmwsdC5SZXNvdXJjZVR5cGUuSW1hZ2UpLGZ1bmN0aW9uKHIsbil7cj9lLmZpcmUobmV3IHQuRXJyb3JFdmVudChyKSk6biYmKGUuaW1hZ2U9YS5nZXRJbWFnZURhdGEobiksZS5fZmluaXNoTG9hZGluZygpKX0pfSxyLnByb3RvdHlwZS5fZmluaXNoTG9hZGluZz1mdW5jdGlvbigpe3RoaXMubWFwJiYodGhpcy5zZXRDb29yZGluYXRlcyh0aGlzLmNvb3JkaW5hdGVzKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhXCIse2RhdGFUeXBlOlwic291cmNlXCIsc291cmNlRGF0YVR5cGU6XCJtZXRhZGF0YVwifSkpKX0sci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLmxvYWQoKX0sci5wcm90b3R5cGUuc2V0Q29vcmRpbmF0ZXM9ZnVuY3Rpb24oZSl7dGhpcy5jb29yZGluYXRlcz1lO3ZhciByPXRoaXMubWFwLG49ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHIudHJhbnNmb3JtLmxvY2F0aW9uQ29vcmRpbmF0ZShHLmNvbnZlcnQodCkpLnpvb21UbygwKX0pLGk9dGhpcy5jZW50ZXJDb29yZD10LmdldENvb3JkaW5hdGVzQ2VudGVyKG4pO2kuY29sdW1uPU1hdGguZmxvb3IoaS5jb2x1bW4pLGkucm93PU1hdGguZmxvb3IoaS5yb3cpLHRoaXMudGlsZUlEPW5ldyB0LkNhbm9uaWNhbFRpbGVJRChpLnpvb20saS5jb2x1bW4saS5yb3cpLHRoaXMubWluem9vbT10aGlzLm1heHpvb209aS56b29tO3ZhciBhPW4ubWFwKGZ1bmN0aW9uKGUpe3ZhciByPWUuem9vbVRvKGkuem9vbSk7cmV0dXJuIG5ldyB0LmRlZmF1bHQkMShNYXRoLnJvdW5kKChyLmNvbHVtbi1pLmNvbHVtbikqdC5kZWZhdWx0JDgpLE1hdGgucm91bmQoKHIucm93LWkucm93KSp0LmRlZmF1bHQkOCkpfSk7cmV0dXJuIHRoaXMuX2JvdW5kc0FycmF5PW5ldyB0LlJhc3RlckJvdW5kc0FycmF5LHRoaXMuX2JvdW5kc0FycmF5LmVtcGxhY2VCYWNrKGFbMF0ueCxhWzBdLnksMCwwKSx0aGlzLl9ib3VuZHNBcnJheS5lbXBsYWNlQmFjayhhWzFdLngsYVsxXS55LHQuZGVmYXVsdCQ4LDApLHRoaXMuX2JvdW5kc0FycmF5LmVtcGxhY2VCYWNrKGFbM10ueCxhWzNdLnksMCx0LmRlZmF1bHQkOCksdGhpcy5fYm91bmRzQXJyYXkuZW1wbGFjZUJhY2soYVsyXS54LGFbMl0ueSx0LmRlZmF1bHQkOCx0LmRlZmF1bHQkOCksdGhpcy5ib3VuZHNCdWZmZXImJih0aGlzLmJvdW5kc0J1ZmZlci5kZXN0cm95KCksZGVsZXRlIHRoaXMuYm91bmRzQnVmZmVyKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhXCIse2RhdGFUeXBlOlwic291cmNlXCIsc291cmNlRGF0YVR5cGU6XCJjb250ZW50XCJ9KSksdGhpc30sci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2lmKDAhPT1PYmplY3Qua2V5cyh0aGlzLnRpbGVzKS5sZW5ndGgmJnRoaXMuaW1hZ2Upe3ZhciB0PXRoaXMubWFwLnBhaW50ZXIuY29udGV4dCxlPXQuZ2w7Zm9yKHZhciByIGluIHRoaXMuYm91bmRzQnVmZmVyfHwodGhpcy5ib3VuZHNCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5fYm91bmRzQXJyYXksSy5tZW1iZXJzKSksdGhpcy5ib3VuZHNWQU98fCh0aGlzLmJvdW5kc1ZBTz1uZXcgUSksdGhpcy50ZXh0dXJlfHwodGhpcy50ZXh0dXJlPW5ldyB6KHQsdGhpcy5pbWFnZSxlLlJHQkEpLHRoaXMudGV4dHVyZS5iaW5kKGUuTElORUFSLGUuQ0xBTVBfVE9fRURHRSkpLHRoaXMudGlsZXMpe3ZhciBuPXRoaXMudGlsZXNbcl07XCJsb2FkZWRcIiE9PW4uc3RhdGUmJihuLnN0YXRlPVwibG9hZGVkXCIsbi50ZXh0dXJlPXRoaXMudGV4dHVyZSl9fX0sci5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24odCxlKXt0aGlzLnRpbGVJRCYmdGhpcy50aWxlSUQuZXF1YWxzKHQudGlsZUlELmNhbm9uaWNhbCk/KHRoaXMudGlsZXNbU3RyaW5nKHQudGlsZUlELndyYXApXT10LHQuYnVja2V0cz17fSxlKG51bGwpKToodC5zdGF0ZT1cImVycm9yZWRcIixlKG51bGwpKX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6XCJpbWFnZVwiLHVybDp0aGlzLm9wdGlvbnMudXJsLGNvb3JkaW5hdGVzOnRoaXMuY29vcmRpbmF0ZXN9fSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHJ9KHQuRXZlbnRlZCksZXQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LHIsbixpKXtlLmNhbGwodGhpcyx0LHIsbixpKSx0aGlzLnJvdW5kWm9vbT0hMCx0aGlzLnR5cGU9XCJ2aWRlb1wiLHRoaXMub3B0aW9ucz1yfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPXRoaXMub3B0aW9uczt0aGlzLnVybHM9W107Zm9yKHZhciBuPTAsaT1yLnVybHM7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO2UudXJscy5wdXNoKGUubWFwLl90cmFuc2Zvcm1SZXF1ZXN0KGEsdC5SZXNvdXJjZVR5cGUuU291cmNlKS51cmwpfXQuZ2V0VmlkZW8odGhpcy51cmxzLGZ1bmN0aW9uKHIsbil7cj9lLmZpcmUobmV3IHQuRXJyb3JFdmVudChyKSk6biYmKGUudmlkZW89bixlLnZpZGVvLmxvb3A9ITAsZS52aWRlby5hZGRFdmVudExpc3RlbmVyKFwicGxheWluZ1wiLGZ1bmN0aW9uKCl7ZS5tYXAuX3JlcmVuZGVyKCl9KSxlLm1hcCYmZS52aWRlby5wbGF5KCksZS5fZmluaXNoTG9hZGluZygpKX0pfSxyLnByb3RvdHlwZS5nZXRWaWRlbz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZGVvfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcHx8KHRoaXMubWFwPXQsdGhpcy5sb2FkKCksdGhpcy52aWRlbyYmKHRoaXMudmlkZW8ucGxheSgpLHRoaXMuc2V0Q29vcmRpbmF0ZXModGhpcy5jb29yZGluYXRlcykpKX0sci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2lmKCEoMD09PU9iamVjdC5rZXlzKHRoaXMudGlsZXMpLmxlbmd0aHx8dGhpcy52aWRlby5yZWFkeVN0YXRlPDIpKXt2YXIgdD10aGlzLm1hcC5wYWludGVyLmNvbnRleHQsZT10LmdsO2Zvcih2YXIgciBpbiB0aGlzLmJvdW5kc0J1ZmZlcnx8KHRoaXMuYm91bmRzQnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuX2JvdW5kc0FycmF5LEsubWVtYmVycykpLHRoaXMuYm91bmRzVkFPfHwodGhpcy5ib3VuZHNWQU89bmV3IFEpLHRoaXMudGV4dHVyZT90aGlzLnZpZGVvLnBhdXNlZHx8KHRoaXMudGV4dHVyZS5iaW5kKGUuTElORUFSLGUuQ0xBTVBfVE9fRURHRSksZS50ZXhTdWJJbWFnZTJEKGUuVEVYVFVSRV8yRCwwLDAsMCxlLlJHQkEsZS5VTlNJR05FRF9CWVRFLHRoaXMudmlkZW8pKToodGhpcy50ZXh0dXJlPW5ldyB6KHQsdGhpcy52aWRlbyxlLlJHQkEpLHRoaXMudGV4dHVyZS5iaW5kKGUuTElORUFSLGUuQ0xBTVBfVE9fRURHRSkpLHRoaXMudGlsZXMpe3ZhciBuPXRoaXMudGlsZXNbcl07XCJsb2FkZWRcIiE9PW4uc3RhdGUmJihuLnN0YXRlPVwibG9hZGVkXCIsbi50ZXh0dXJlPXRoaXMudGV4dHVyZSl9fX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6XCJ2aWRlb1wiLHVybHM6dGhpcy51cmxzLGNvb3JkaW5hdGVzOnRoaXMuY29vcmRpbmF0ZXN9fSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlkZW8mJiF0aGlzLnZpZGVvLnBhdXNlZH0scn0odHQpLHJ0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGksYSl7ZS5jYWxsKHRoaXMscixuLGksYSksbi5jb29yZGluYXRlcz9BcnJheS5pc0FycmF5KG4uY29vcmRpbmF0ZXMpJiY0PT09bi5jb29yZGluYXRlcy5sZW5ndGgmJiFuLmNvb3JkaW5hdGVzLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIUFycmF5LmlzQXJyYXkodCl8fDIhPT10Lmxlbmd0aHx8dC5zb21lKGZ1bmN0aW9uKHQpe3JldHVyblwibnVtYmVyXCIhPXR5cGVvZiB0fSl9KXx8dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IHQuZGVmYXVsdCQ5KFwic291cmNlcy5cIityLG51bGwsJ1wiY29vcmRpbmF0ZXNcIiBwcm9wZXJ0eSBtdXN0IGJlIGFuIGFycmF5IG9mIDQgbG9uZ2l0dWRlL2xhdGl0dWRlIGFycmF5IHBhaXJzJykpKTp0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgdC5kZWZhdWx0JDkoXCJzb3VyY2VzLlwiK3IsbnVsbCwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSBcImNvb3JkaW5hdGVzXCInKSkpLG4uYW5pbWF0ZSYmXCJib29sZWFuXCIhPXR5cGVvZiBuLmFuaW1hdGUmJnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LmRlZmF1bHQkOShcInNvdXJjZXMuXCIrcixudWxsLCdvcHRpb25hbCBcImFuaW1hdGVcIiBwcm9wZXJ0eSBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZScpKSksbi5jYW52YXM/XCJzdHJpbmdcIj09dHlwZW9mIG4uY2FudmFzfHxuLmNhbnZhcyBpbnN0YW5jZW9mIHQuZGVmYXVsdC5IVE1MQ2FudmFzRWxlbWVudHx8dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IHQuZGVmYXVsdCQ5KFwic291cmNlcy5cIityLG51bGwsJ1wiY2FudmFzXCIgbXVzdCBiZSBlaXRoZXIgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBJRCBvZiB0aGUgY2FudmFzIGVsZW1lbnQgZnJvbSB3aGljaCB0byByZWFkLCBvciBhbiBIVE1MQ2FudmFzRWxlbWVudCBpbnN0YW5jZScpKSk6dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IHQuZGVmYXVsdCQ5KFwic291cmNlcy5cIityLG51bGwsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgXCJjYW52YXNcIicpKSksdGhpcy5vcHRpb25zPW4sdGhpcy5hbmltYXRlPXZvaWQgMD09PW4uYW5pbWF0ZXx8bi5hbmltYXRlfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dGhpcy5jYW52YXN8fCh0aGlzLmNhbnZhcz10aGlzLm9wdGlvbnMuY2FudmFzIGluc3RhbmNlb2YgdC5kZWZhdWx0LkhUTUxDYW52YXNFbGVtZW50P3RoaXMub3B0aW9ucy5jYW52YXM6dC5kZWZhdWx0LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMub3B0aW9ucy5jYW52YXMpKSx0aGlzLndpZHRoPXRoaXMuY2FudmFzLndpZHRoLHRoaXMuaGVpZ2h0PXRoaXMuY2FudmFzLmhlaWdodCx0aGlzLl9oYXNJbnZhbGlkRGltZW5zaW9ucygpP3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcihcIkNhbnZhcyBkaW1lbnNpb25zIGNhbm5vdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gemVyby5cIikpKToodGhpcy5wbGF5PWZ1bmN0aW9uKCl7dGhpcy5fcGxheWluZz0hMCx0aGlzLm1hcC5fcmVyZW5kZXIoKX0sdGhpcy5wYXVzZT1mdW5jdGlvbigpe3RoaXMuX3BsYXlpbmc9ITF9LHRoaXMuX2ZpbmlzaExvYWRpbmcoKSl9LHIucHJvdG90eXBlLmdldENhbnZhcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbnZhc30sci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLmxvYWQoKSx0aGlzLmNhbnZhcyYmdGhpcy5hbmltYXRlJiZ0aGlzLnBsYXkoKX0sci5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLnBhdXNlKCl9LHIucHJvdG90eXBlLnByZXBhcmU9ZnVuY3Rpb24oKXt2YXIgdD0hMTtpZih0aGlzLmNhbnZhcy53aWR0aCE9PXRoaXMud2lkdGgmJih0aGlzLndpZHRoPXRoaXMuY2FudmFzLndpZHRoLHQ9ITApLHRoaXMuY2FudmFzLmhlaWdodCE9PXRoaXMuaGVpZ2h0JiYodGhpcy5oZWlnaHQ9dGhpcy5jYW52YXMuaGVpZ2h0LHQ9ITApLCF0aGlzLl9oYXNJbnZhbGlkRGltZW5zaW9ucygpJiYwIT09T2JqZWN0LmtleXModGhpcy50aWxlcykubGVuZ3RoKXt2YXIgZT10aGlzLm1hcC5wYWludGVyLmNvbnRleHQscj1lLmdsO2Zvcih2YXIgbiBpbiB0aGlzLmJvdW5kc0J1ZmZlcnx8KHRoaXMuYm91bmRzQnVmZmVyPWUuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuX2JvdW5kc0FycmF5LEsubWVtYmVycykpLHRoaXMuYm91bmRzVkFPfHwodGhpcy5ib3VuZHNWQU89bmV3IFEpLHRoaXMudGV4dHVyZT90P3RoaXMudGV4dHVyZS51cGRhdGUodGhpcy5jYW52YXMpOnRoaXMuX3BsYXlpbmcmJih0aGlzLnRleHR1cmUuYmluZChyLkxJTkVBUixyLkNMQU1QX1RPX0VER0UpLHIudGV4U3ViSW1hZ2UyRChyLlRFWFRVUkVfMkQsMCwwLDAsci5SR0JBLHIuVU5TSUdORURfQllURSx0aGlzLmNhbnZhcykpOih0aGlzLnRleHR1cmU9bmV3IHooZSx0aGlzLmNhbnZhcyxyLlJHQkEpLHRoaXMudGV4dHVyZS5iaW5kKHIuTElORUFSLHIuQ0xBTVBfVE9fRURHRSkpLHRoaXMudGlsZXMpe3ZhciBpPXRoaXMudGlsZXNbbl07XCJsb2FkZWRcIiE9PWkuc3RhdGUmJihpLnN0YXRlPVwibG9hZGVkXCIsaS50ZXh0dXJlPXRoaXMudGV4dHVyZSl9fX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6XCJjYW52YXNcIixjb29yZGluYXRlczp0aGlzLmNvb3JkaW5hdGVzfX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wbGF5aW5nfSxyLnByb3RvdHlwZS5faGFzSW52YWxpZERpbWVuc2lvbnM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPVt0aGlzLmNhbnZhcy53aWR0aCx0aGlzLmNhbnZhcy5oZWlnaHRdO3Q8ZS5sZW5ndGg7dCs9MSl7dmFyIHI9ZVt0XTtpZihpc05hTihyKXx8cjw9MClyZXR1cm4hMH1yZXR1cm4hMX0scn0odHQpLG50PXt2ZWN0b3I6WCxyYXN0ZXI6WixcInJhc3Rlci1kZW1cIjokLGdlb2pzb246Six2aWRlbzpldCxpbWFnZTp0dCxjYW52YXM6cnR9LGl0PWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPW5ldyBudFtyLnR5cGVdKGUscixuLGkpO2lmKGEuaWQhPT1lKXRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIFNvdXJjZSBpZCB0byBiZSBcIitlK1wiIGluc3RlYWQgb2YgXCIrYS5pZCk7cmV0dXJuIHQuYmluZEFsbChbXCJsb2FkXCIsXCJhYm9ydFwiLFwidW5sb2FkXCIsXCJzZXJpYWxpemVcIixcInByZXBhcmVcIl0sYSksYX07ZnVuY3Rpb24gYXQodCxlLHIsbixpKXt2YXIgYT1pLm1heFBpdGNoU2NhbGVGYWN0b3IoKSxvPXQudGlsZXNJbihyLGEpO28uc29ydChvdCk7Zm9yKHZhciBzPVtdLGw9MCxjPW87bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdO3MucHVzaCh7d3JhcHBlZFRpbGVJRDp1LnRpbGVJRC53cmFwcGVkKCkua2V5LHF1ZXJ5UmVzdWx0czp1LnRpbGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzKGUsdS5xdWVyeUdlb21ldHJ5LHUuc2NhbGUsbixpLGEsdC50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KHUudGlsZUlELnRvVW53cmFwcGVkKCkpKX0pfXJldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9e30scj17fSxuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXSxvPWEucXVlcnlSZXN1bHRzLHM9YS53cmFwcGVkVGlsZUlELGw9cltzXT1yW3NdfHx7fTtmb3IodmFyIGMgaW4gbylmb3IodmFyIHU9b1tjXSxoPWxbY109bFtjXXx8e30sZj1lW2NdPWVbY118fFtdLHA9MCxkPXU7cDxkLmxlbmd0aDtwKz0xKXt2YXIgZz1kW3BdO2hbZy5mZWF0dXJlSW5kZXhdfHwoaFtnLmZlYXR1cmVJbmRleF09ITAsZi5wdXNoKGcuZmVhdHVyZSkpfX1yZXR1cm4gZX0ocyl9ZnVuY3Rpb24gb3QodCxlKXt2YXIgcj10LnRpbGVJRCxuPWUudGlsZUlEO3JldHVybiByLm92ZXJzY2FsZWRaLW4ub3ZlcnNjYWxlZFp8fHIuY2Fub25pY2FsLnktbi5jYW5vbmljYWwueXx8ci53cmFwLW4ud3JhcHx8ci5jYW5vbmljYWwueC1uLmNhbm9uaWNhbC54fXZhciBzdD1mdW5jdGlvbihlLHIpe3RoaXMudGlsZUlEPWUsdGhpcy51aWQ9dC51bmlxdWVJZCgpLHRoaXMudXNlcz0wLHRoaXMudGlsZVNpemU9cix0aGlzLmJ1Y2tldHM9e30sdGhpcy5leHBpcmF0aW9uVGltZT1udWxsLHRoaXMucXVlcnlQYWRkaW5nPTAsdGhpcy5leHBpcmVkUmVxdWVzdENvdW50PTAsdGhpcy5zdGF0ZT1cImxvYWRpbmdcIn07c3QucHJvdG90eXBlLnJlZ2lzdGVyRmFkZUR1cmF0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQrdGhpcy50aW1lQWRkZWQ7ZTxhLm5vdygpfHx0aGlzLmZhZGVFbmRUaW1lJiZlPHRoaXMuZmFkZUVuZFRpbWV8fCh0aGlzLmZhZGVFbmRUaW1lPWUpfSxzdC5wcm90b3R5cGUud2FzUmVxdWVzdGVkPWZ1bmN0aW9uKCl7cmV0dXJuXCJlcnJvcmVkXCI9PT10aGlzLnN0YXRlfHxcImxvYWRlZFwiPT09dGhpcy5zdGF0ZXx8XCJyZWxvYWRpbmdcIj09PXRoaXMuc3RhdGV9LHN0LnByb3RvdHlwZS5sb2FkVmVjdG9yRGF0YT1mdW5jdGlvbihlLHIsbil7aWYodGhpcy5oYXNEYXRhKCkmJnRoaXMudW5sb2FkVmVjdG9yRGF0YSgpLHRoaXMuc3RhdGU9XCJsb2FkZWRcIixlKXtpZihlLmZlYXR1cmVJbmRleCYmKHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4PWUuZmVhdHVyZUluZGV4LGUucmF3VGlsZURhdGE/KHRoaXMubGF0ZXN0UmF3VGlsZURhdGE9ZS5yYXdUaWxlRGF0YSx0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YT1lLnJhd1RpbGVEYXRhKTp0aGlzLmxhdGVzdFJhd1RpbGVEYXRhJiYodGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGE9dGhpcy5sYXRlc3RSYXdUaWxlRGF0YSkpLHRoaXMuY29sbGlzaW9uQm94QXJyYXk9ZS5jb2xsaXNpb25Cb3hBcnJheSx0aGlzLmJ1Y2tldHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17fTtpZighZSlyZXR1cm4gcjtmb3IodmFyIG49MCxpPXQ7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dLG89YS5sYXllcklkcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGUuZ2V0TGF5ZXIodCl9KS5maWx0ZXIoQm9vbGVhbik7aWYoMCE9PW8ubGVuZ3RoKXthLmxheWVycz1vO2Zvcih2YXIgcz0wLGw9bztzPGwubGVuZ3RoO3MrPTEpcltsW3NdLmlkXT1hfX1yZXR1cm4gcn0oZS5idWNrZXRzLHIuc3R5bGUpLG4pZm9yKHZhciBpIGluIHRoaXMuYnVja2V0cyl7dmFyIGE9dGhpcy5idWNrZXRzW2ldO2EgaW5zdGFuY2VvZiB0LmRlZmF1bHQkMTQmJihhLmp1c3RSZWxvYWRlZD0hMCl9Zm9yKHZhciBvIGluIHRoaXMucXVlcnlQYWRkaW5nPTAsdGhpcy5idWNrZXRzKXt2YXIgcz10aGlzLmJ1Y2tldHNbb107dGhpcy5xdWVyeVBhZGRpbmc9TWF0aC5tYXgodGhpcy5xdWVyeVBhZGRpbmcsci5zdHlsZS5nZXRMYXllcihzLmxheWVySWRzWzBdKS5xdWVyeVJhZGl1cyhzKSl9ZS5pY29uQXRsYXNJbWFnZSYmKHRoaXMuaWNvbkF0bGFzSW1hZ2U9ZS5pY29uQXRsYXNJbWFnZSksZS5nbHlwaEF0bGFzSW1hZ2UmJih0aGlzLmdseXBoQXRsYXNJbWFnZT1lLmdseXBoQXRsYXNJbWFnZSl9ZWxzZSB0aGlzLmNvbGxpc2lvbkJveEFycmF5PW5ldyB0LkNvbGxpc2lvbkJveEFycmF5fSxzdC5wcm90b3R5cGUudW5sb2FkVmVjdG9yRGF0YT1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLmJ1Y2tldHMpdGhpcy5idWNrZXRzW3RdLmRlc3Ryb3koKTt0aGlzLmJ1Y2tldHM9e30sdGhpcy5pY29uQXRsYXNUZXh0dXJlJiZ0aGlzLmljb25BdGxhc1RleHR1cmUuZGVzdHJveSgpLHRoaXMuZ2x5cGhBdGxhc1RleHR1cmUmJnRoaXMuZ2x5cGhBdGxhc1RleHR1cmUuZGVzdHJveSgpLHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4PW51bGwsdGhpcy5zdGF0ZT1cInVubG9hZGVkXCJ9LHN0LnByb3RvdHlwZS51bmxvYWRERU1EYXRhPWZ1bmN0aW9uKCl7dGhpcy5kZW09bnVsbCx0aGlzLm5laWdoYm9yaW5nVGlsZXM9bnVsbCx0aGlzLnN0YXRlPVwidW5sb2FkZWRcIn0sc3QucHJvdG90eXBlLmdldEJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5idWNrZXRzW3QuaWRdfSxzdC5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLmJ1Y2tldHMpe3ZhciByPXRoaXMuYnVja2V0c1tlXTtyLnVwbG9hZGVkfHwoci51cGxvYWQodCksci51cGxvYWRlZD0hMCl9dmFyIG49dC5nbDt0aGlzLmljb25BdGxhc0ltYWdlJiYodGhpcy5pY29uQXRsYXNUZXh0dXJlPW5ldyB6KHQsdGhpcy5pY29uQXRsYXNJbWFnZSxuLlJHQkEpLHRoaXMuaWNvbkF0bGFzSW1hZ2U9bnVsbCksdGhpcy5nbHlwaEF0bGFzSW1hZ2UmJih0aGlzLmdseXBoQXRsYXNUZXh0dXJlPW5ldyB6KHQsdGhpcy5nbHlwaEF0bGFzSW1hZ2Usbi5BTFBIQSksdGhpcy5nbHlwaEF0bGFzSW1hZ2U9bnVsbCl9LHN0LnByb3RvdHlwZS5xdWVyeVJlbmRlcmVkRmVhdHVyZXM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7cmV0dXJuIHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4JiZ0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YT90aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5xdWVyeSh7cXVlcnlHZW9tZXRyeTplLHNjYWxlOnIsdGlsZVNpemU6dGhpcy50aWxlU2l6ZSxwb3NNYXRyaXg6byx0cmFuc2Zvcm06aSxwYXJhbXM6bixxdWVyeVBhZGRpbmc6dGhpcy5xdWVyeVBhZGRpbmcqYX0sdCk6e319LHN0LnByb3RvdHlwZS5xdWVyeVNvdXJjZUZlYXR1cmVzPWZ1bmN0aW9uKGUscil7aWYodGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgmJnRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LnJhd1RpbGVEYXRhKXt2YXIgbj10aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5sb2FkVlRMYXllcnMoKSxpPXI/ci5zb3VyY2VMYXllcjpcIlwiLGE9bi5fZ2VvanNvblRpbGVMYXllcnx8bltpXTtpZihhKWZvcih2YXIgbz10LmRlZmF1bHQkMTMociYmci5maWx0ZXIpLHM9e3o6dGhpcy50aWxlSUQub3ZlcnNjYWxlZFoseDp0aGlzLnRpbGVJRC5jYW5vbmljYWwueCx5OnRoaXMudGlsZUlELmNhbm9uaWNhbC55fSxsPTA7bDxhLmxlbmd0aDtsKyspe3ZhciBjPWEuZmVhdHVyZShsKTtpZihvKG5ldyB0LmRlZmF1bHQkMTYodGhpcy50aWxlSUQub3ZlcnNjYWxlZFopLGMpKXt2YXIgdT1uZXcgdC5kZWZhdWx0JDEyKGMscy56LHMueCxzLnkpO3UudGlsZT1zLGUucHVzaCh1KX19fX0sc3QucHJvdG90eXBlLmNsZWFyTWFzaz1mdW5jdGlvbigpe3RoaXMuc2VnbWVudHMmJih0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSxkZWxldGUgdGhpcy5zZWdtZW50cyksdGhpcy5tYXNrZWRCb3VuZHNCdWZmZXImJih0aGlzLm1hc2tlZEJvdW5kc0J1ZmZlci5kZXN0cm95KCksZGVsZXRlIHRoaXMubWFza2VkQm91bmRzQnVmZmVyKSx0aGlzLm1hc2tlZEluZGV4QnVmZmVyJiYodGhpcy5tYXNrZWRJbmRleEJ1ZmZlci5kZXN0cm95KCksZGVsZXRlIHRoaXMubWFza2VkSW5kZXhCdWZmZXIpfSxzdC5wcm90b3R5cGUuc2V0TWFzaz1mdW5jdGlvbihlLHIpe2lmKCF0LmRlZmF1bHQkMTAodGhpcy5tYXNrLGUpJiYodGhpcy5tYXNrPWUsdGhpcy5jbGVhck1hc2soKSwhdC5kZWZhdWx0JDEwKGUsezA6ITB9KSkpe3ZhciBuPW5ldyB0LlJhc3RlckJvdW5kc0FycmF5LGk9bmV3IHQuVHJpYW5nbGVJbmRleEFycmF5O3RoaXMuc2VnbWVudHM9bmV3IHQuZGVmYXVsdCQxNSx0aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDAsbixpKTtmb3IodmFyIGE9T2JqZWN0LmtleXMoZSksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1lW2Fbb11dLGw9dC5kZWZhdWx0JDg+PnMueixjPW5ldyB0LmRlZmF1bHQkMShzLngqbCxzLnkqbCksdT1uZXcgdC5kZWZhdWx0JDEoYy54K2wsYy55K2wpLGg9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LG4saSk7bi5lbXBsYWNlQmFjayhjLngsYy55LGMueCxjLnkpLG4uZW1wbGFjZUJhY2sodS54LGMueSx1LngsYy55KSxuLmVtcGxhY2VCYWNrKGMueCx1LnksYy54LHUueSksbi5lbXBsYWNlQmFjayh1LngsdS55LHUueCx1LnkpO3ZhciBmPWgudmVydGV4TGVuZ3RoO2kuZW1wbGFjZUJhY2soZixmKzEsZisyKSxpLmVtcGxhY2VCYWNrKGYrMSxmKzIsZiszKSxoLnZlcnRleExlbmd0aCs9NCxoLnByaW1pdGl2ZUxlbmd0aCs9Mn10aGlzLm1hc2tlZEJvdW5kc0J1ZmZlcj1yLmNyZWF0ZVZlcnRleEJ1ZmZlcihuLEsubWVtYmVycyksdGhpcy5tYXNrZWRJbmRleEJ1ZmZlcj1yLmNyZWF0ZUluZGV4QnVmZmVyKGkpfX0sc3QucHJvdG90eXBlLmhhc0RhdGE9ZnVuY3Rpb24oKXtyZXR1cm5cImxvYWRlZFwiPT09dGhpcy5zdGF0ZXx8XCJyZWxvYWRpbmdcIj09PXRoaXMuc3RhdGV8fFwiZXhwaXJlZFwiPT09dGhpcy5zdGF0ZX0sc3QucHJvdG90eXBlLnNldEV4cGlyeURhdGE9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5leHBpcmF0aW9uVGltZTtpZihlLmNhY2hlQ29udHJvbCl7dmFyIG49dC5wYXJzZUNhY2hlQ29udHJvbChlLmNhY2hlQ29udHJvbCk7bltcIm1heC1hZ2VcIl0mJih0aGlzLmV4cGlyYXRpb25UaW1lPURhdGUubm93KCkrMWUzKm5bXCJtYXgtYWdlXCJdKX1lbHNlIGUuZXhwaXJlcyYmKHRoaXMuZXhwaXJhdGlvblRpbWU9bmV3IERhdGUoZS5leHBpcmVzKS5nZXRUaW1lKCkpO2lmKHRoaXMuZXhwaXJhdGlvblRpbWUpe3ZhciBpPURhdGUubm93KCksYT0hMTtpZih0aGlzLmV4cGlyYXRpb25UaW1lPmkpYT0hMTtlbHNlIGlmKHIpaWYodGhpcy5leHBpcmF0aW9uVGltZTxyKWE9ITA7ZWxzZXt2YXIgbz10aGlzLmV4cGlyYXRpb25UaW1lLXI7bz90aGlzLmV4cGlyYXRpb25UaW1lPWkrTWF0aC5tYXgobywzZTQpOmE9ITB9ZWxzZSBhPSEwO2E/KHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudCsrLHRoaXMuc3RhdGU9XCJleHBpcmVkXCIpOnRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudD0wfX0sc3QucHJvdG90eXBlLmdldEV4cGlyeVRpbWVvdXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmV4cGlyYXRpb25UaW1lKXJldHVybiB0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQ/MWUzKigxPDxNYXRoLm1pbih0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQtMSwzMSkpOk1hdGgubWluKHRoaXMuZXhwaXJhdGlvblRpbWUtKG5ldyBEYXRlKS5nZXRUaW1lKCksTWF0aC5wb3coMiwzMSktMSl9O3ZhciBsdD1mdW5jdGlvbih0LGUpe3RoaXMubWF4PXQsdGhpcy5vblJlbW92ZT1lLHRoaXMucmVzZXQoKX07bHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuZGF0YSlmb3IodmFyIGU9MCxyPXRoaXMuZGF0YVt0XTtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV07bi50aW1lb3V0JiZjbGVhclRpbWVvdXQobi50aW1lb3V0KSx0aGlzLm9uUmVtb3ZlKG4udmFsdWUpfXJldHVybiB0aGlzLmRhdGE9e30sdGhpcy5vcmRlcj1bXSx0aGlzfSxsdC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLGk9dC53cmFwcGVkKCkua2V5O3ZvaWQgMD09PXRoaXMuZGF0YVtpXSYmKHRoaXMuZGF0YVtpXT1bXSk7dmFyIGE9e3ZhbHVlOmUsdGltZW91dDp2b2lkIDB9O2lmKHZvaWQgMCE9PXImJihhLnRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe24ucmVtb3ZlKHQsYSl9LHIpKSx0aGlzLmRhdGFbaV0ucHVzaChhKSx0aGlzLm9yZGVyLnB1c2goaSksdGhpcy5vcmRlci5sZW5ndGg+dGhpcy5tYXgpe3ZhciBvPXRoaXMuX2dldEFuZFJlbW92ZUJ5S2V5KHRoaXMub3JkZXJbMF0pO28mJnRoaXMub25SZW1vdmUobyl9cmV0dXJuIHRoaXN9LGx0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQud3JhcHBlZCgpLmtleSBpbiB0aGlzLmRhdGF9LGx0LnByb3RvdHlwZS5nZXRBbmRSZW1vdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGFzKHQpP3RoaXMuX2dldEFuZFJlbW92ZUJ5S2V5KHQud3JhcHBlZCgpLmtleSk6bnVsbH0sbHQucHJvdG90eXBlLl9nZXRBbmRSZW1vdmVCeUtleT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRhdGFbdF0uc2hpZnQoKTtyZXR1cm4gZS50aW1lb3V0JiZjbGVhclRpbWVvdXQoZS50aW1lb3V0KSwwPT09dGhpcy5kYXRhW3RdLmxlbmd0aCYmZGVsZXRlIHRoaXMuZGF0YVt0XSx0aGlzLm9yZGVyLnNwbGljZSh0aGlzLm9yZGVyLmluZGV4T2YodCksMSksZS52YWx1ZX0sbHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXModCk/dGhpcy5kYXRhW3Qud3JhcHBlZCgpLmtleV1bMF0udmFsdWU6bnVsbH0sbHQucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbih0LGUpe2lmKCF0aGlzLmhhcyh0KSlyZXR1cm4gdGhpczt2YXIgcj10LndyYXBwZWQoKS5rZXksbj12b2lkIDA9PT1lPzA6dGhpcy5kYXRhW3JdLmluZGV4T2YoZSksaT10aGlzLmRhdGFbcl1bbl07cmV0dXJuIHRoaXMuZGF0YVtyXS5zcGxpY2UobiwxKSxpLnRpbWVvdXQmJmNsZWFyVGltZW91dChpLnRpbWVvdXQpLDA9PT10aGlzLmRhdGFbcl0ubGVuZ3RoJiZkZWxldGUgdGhpcy5kYXRhW3JdLHRoaXMub25SZW1vdmUoaS52YWx1ZSksdGhpcy5vcmRlci5zcGxpY2UodGhpcy5vcmRlci5pbmRleE9mKHIpLDEpLHRoaXN9LGx0LnByb3RvdHlwZS5zZXRNYXhTaXplPWZ1bmN0aW9uKHQpe2Zvcih0aGlzLm1heD10O3RoaXMub3JkZXIubGVuZ3RoPnRoaXMubWF4Oyl7dmFyIGU9dGhpcy5fZ2V0QW5kUmVtb3ZlQnlLZXkodGhpcy5vcmRlclswXSk7ZSYmdGhpcy5vblJlbW92ZShlKX1yZXR1cm4gdGhpc307dmFyIGN0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmNvbnRleHQ9dDt2YXIgbj10LmdsO3RoaXMuYnVmZmVyPW4uY3JlYXRlQnVmZmVyKCksdGhpcy5keW5hbWljRHJhdz1Cb29sZWFuKHIpLHRoaXMudW5iaW5kVkFPKCksdC5iaW5kRWxlbWVudEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpLG4uYnVmZmVyRGF0YShuLkVMRU1FTlRfQVJSQVlfQlVGRkVSLGUuYXJyYXlCdWZmZXIsdGhpcy5keW5hbWljRHJhdz9uLkRZTkFNSUNfRFJBVzpuLlNUQVRJQ19EUkFXKSx0aGlzLmR5bmFtaWNEcmF3fHxkZWxldGUgZS5hcnJheUJ1ZmZlcn07Y3QucHJvdG90eXBlLnVuYmluZFZBTz1mdW5jdGlvbigpe3RoaXMuY29udGV4dC5leHRWZXJ0ZXhBcnJheU9iamVjdCYmdGhpcy5jb250ZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUy5zZXQobnVsbCl9LGN0LnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0LmJpbmRFbGVtZW50QnVmZmVyLnNldCh0aGlzLmJ1ZmZlcil9LGN0LnByb3RvdHlwZS51cGRhdGVEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDt0aGlzLnVuYmluZFZBTygpLHRoaXMuYmluZCgpLGUuYnVmZmVyU3ViRGF0YShlLkVMRU1FTlRfQVJSQVlfQlVGRkVSLDAsdC5hcnJheUJ1ZmZlcil9LGN0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb250ZXh0LmdsO3RoaXMuYnVmZmVyJiYodC5kZWxldGVCdWZmZXIodGhpcy5idWZmZXIpLGRlbGV0ZSB0aGlzLmJ1ZmZlcil9O3ZhciB1dD17SW50ODpcIkJZVEVcIixVaW50ODpcIlVOU0lHTkVEX0JZVEVcIixJbnQxNjpcIlNIT1JUXCIsVWludDE2OlwiVU5TSUdORURfU0hPUlRcIixJbnQzMjpcIklOVFwiLFVpbnQzMjpcIlVOU0lHTkVEX0lOVFwiLEZsb2F0MzI6XCJGTE9BVFwifSxodD1mdW5jdGlvbih0LGUscixuKXt0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLmF0dHJpYnV0ZXM9cix0aGlzLml0ZW1TaXplPWUuYnl0ZXNQZXJFbGVtZW50LHRoaXMuZHluYW1pY0RyYXc9bix0aGlzLmNvbnRleHQ9dDt2YXIgaT10LmdsO3RoaXMuYnVmZmVyPWkuY3JlYXRlQnVmZmVyKCksdC5iaW5kVmVydGV4QnVmZmVyLnNldCh0aGlzLmJ1ZmZlciksaS5idWZmZXJEYXRhKGkuQVJSQVlfQlVGRkVSLGUuYXJyYXlCdWZmZXIsdGhpcy5keW5hbWljRHJhdz9pLkRZTkFNSUNfRFJBVzppLlNUQVRJQ19EUkFXKSx0aGlzLmR5bmFtaWNEcmF3fHxkZWxldGUgZS5hcnJheUJ1ZmZlcn07aHQucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQuYmluZFZlcnRleEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpfSxodC5wcm90b3R5cGUudXBkYXRlRGF0YT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5iaW5kKCksZS5idWZmZXJTdWJEYXRhKGUuQVJSQVlfQlVGRkVSLDAsdC5hcnJheUJ1ZmZlcil9LGh0LnByb3RvdHlwZS5lbmFibGVBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoO3IrKyl7dmFyIG49dGhpcy5hdHRyaWJ1dGVzW3JdLGk9ZS5hdHRyaWJ1dGVzW24ubmFtZV07dm9pZCAwIT09aSYmdC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKX19LGh0LnByb3RvdHlwZS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjx0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoO24rKyl7dmFyIGk9dGhpcy5hdHRyaWJ1dGVzW25dLGE9ZS5hdHRyaWJ1dGVzW2kubmFtZV07dm9pZCAwIT09YSYmdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGEsaS5jb21wb25lbnRzLHRbdXRbaS50eXBlXV0sITEsdGhpcy5pdGVtU2l6ZSxpLm9mZnNldCt0aGlzLml0ZW1TaXplKihyfHwwKSl9fSxodC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udGV4dC5nbDt0aGlzLmJ1ZmZlciYmKHQuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKSxkZWxldGUgdGhpcy5idWZmZXIpfTt2YXIgZnQ9ZnVuY3Rpb24oZSl7dGhpcy5jb250ZXh0PWUsdGhpcy5jdXJyZW50PXQuZGVmYXVsdCQ2LnRyYW5zcGFyZW50fTtmdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sZnQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7dC5yPT09ZS5yJiZ0Lmc9PT1lLmcmJnQuYj09PWUuYiYmdC5hPT09ZS5hfHwodGhpcy5jb250ZXh0LmdsLmNsZWFyQ29sb3IodC5yLHQuZyx0LmIsdC5hKSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBwdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9MX07cHQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LHB0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50IT09dCYmKHRoaXMuY29udGV4dC5nbC5jbGVhckRlcHRoKHQpLHRoaXMuY3VycmVudD10KX07dmFyIGR0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD0wfTtkdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sZHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQhPT10JiYodGhpcy5jb250ZXh0LmdsLmNsZWFyU3RlbmNpbCh0KSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBndD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9WyEwLCEwLCEwLCEwXX07Z3QucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LGd0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50O3RbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl0mJnRbM109PT1lWzNdfHwodGhpcy5jb250ZXh0LmdsLmNvbG9yTWFzayh0WzBdLHRbMV0sdFsyXSx0WzNdKSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciB2dD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9ITB9O3Z0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSx2dC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudCE9PXQmJih0aGlzLmNvbnRleHQuZ2wuZGVwdGhNYXNrKHQpLHRoaXMuY3VycmVudD10KX07dmFyIG10PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD0yNTV9O210LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxtdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudCE9PXQmJih0aGlzLmNvbnRleHQuZ2wuc3RlbmNpbE1hc2sodCksdGhpcy5jdXJyZW50PXQpfTt2YXIgeXQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PXtmdW5jOnQuZ2wuQUxXQVlTLHJlZjowLG1hc2s6MjU1fX07eXQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LHl0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50O3QuZnVuYz09PWUuZnVuYyYmdC5yZWY9PT1lLnJlZiYmdC5tYXNrPT09ZS5tYXNrfHwodGhpcy5jb250ZXh0LmdsLnN0ZW5jaWxGdW5jKHQuZnVuYyx0LnJlZix0Lm1hc2spLHRoaXMuY3VycmVudD10KX07dmFyIHh0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10O3ZhciBlPXRoaXMuY29udGV4dC5nbDt0aGlzLmN1cnJlbnQ9W2UuS0VFUCxlLktFRVAsZS5LRUVQXX07eHQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LHh0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50O3RbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl18fCh0aGlzLmNvbnRleHQuZ2wuc3RlbmNpbE9wKHRbMF0sdFsxXSx0WzJdKSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBidD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9ITF9O2J0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxidC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuY3VycmVudCE9PXQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDt0P2UuZW5hYmxlKGUuU1RFTkNJTF9URVNUKTplLmRpc2FibGUoZS5TVEVOQ0lMX1RFU1QpLHRoaXMuY3VycmVudD10fX07dmFyIF90PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1bMCwxXX07X3QucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LF90LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50O3RbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXXx8KHRoaXMuY29udGV4dC5nbC5kZXB0aFJhbmdlKHRbMF0sdFsxXSksdGhpcy5jdXJyZW50PXQpfTt2YXIgd3Q9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PSExfTt3dC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sd3QucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dD9lLmVuYWJsZShlLkRFUFRIX1RFU1QpOmUuZGlzYWJsZShlLkRFUFRIX1RFU1QpLHRoaXMuY3VycmVudD10fX07dmFyIGt0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD10LmdsLkxFU1N9O2t0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxrdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudCE9PXQmJih0aGlzLmNvbnRleHQuZ2wuZGVwdGhGdW5jKHQpLHRoaXMuY3VycmVudD10KX07dmFyIEF0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD0hMX07QXQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LEF0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5jdXJyZW50IT09dCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO3Q/ZS5lbmFibGUoZS5CTEVORCk6ZS5kaXNhYmxlKGUuQkxFTkQpLHRoaXMuY3VycmVudD10fX07dmFyIFR0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10O3ZhciBlPXRoaXMuY29udGV4dC5nbDt0aGlzLmN1cnJlbnQ9W2UuT05FLGUuWkVST119O1R0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxUdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDt0WzBdPT09ZVswXSYmdFsxXT09PWVbMV18fCh0aGlzLmNvbnRleHQuZ2wuYmxlbmRGdW5jKHRbMF0sdFsxXSksdGhpcy5jdXJyZW50PXQpfTt2YXIgTXQ9ZnVuY3Rpb24oZSl7dGhpcy5jb250ZXh0PWUsdGhpcy5jdXJyZW50PXQuZGVmYXVsdCQ2LnRyYW5zcGFyZW50fTtNdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sTXQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7dC5yPT09ZS5yJiZ0Lmc9PT1lLmcmJnQuYj09PWUuYiYmdC5hPT09ZS5hfHwodGhpcy5jb250ZXh0LmdsLmJsZW5kQ29sb3IodC5yLHQuZyx0LmIsdC5hKSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBTdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9bnVsbH07U3QucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LFN0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50IT09dCYmKHRoaXMuY29udGV4dC5nbC51c2VQcm9ncmFtKHQpLHRoaXMuY3VycmVudD10KX07dmFyIEV0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD0xfTtFdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sRXQucHJvdG90eXBlLnNldD1mdW5jdGlvbihlKXt2YXIgcj10aGlzLmNvbnRleHQubGluZVdpZHRoUmFuZ2Usbj10LmNsYW1wKGUsclswXSxyWzFdKTt0aGlzLmN1cnJlbnQhPT1uJiYodGhpcy5jb250ZXh0LmdsLmxpbmVXaWR0aChuKSx0aGlzLmN1cnJlbnQ9ZSl9O3ZhciBDdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9dC5nbC5URVhUVVJFMH07Q3QucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LEN0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50IT09dCYmKHRoaXMuY29udGV4dC5nbC5hY3RpdmVUZXh0dXJlKHQpLHRoaXMuY3VycmVudD10KX07dmFyIEx0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10O3ZhciBlPXRoaXMuY29udGV4dC5nbDt0aGlzLmN1cnJlbnQ9WzAsMCxlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdfTtMdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sTHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7dFswXT09PWVbMF0mJnRbMV09PT1lWzFdJiZ0WzJdPT09ZVsyXSYmdFszXT09PWVbM118fCh0aGlzLmNvbnRleHQuZ2wudmlld3BvcnQodFswXSx0WzFdLHRbMl0sdFszXSksdGhpcy5jdXJyZW50PXQpfTt2YXIgenQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PW51bGx9O3p0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSx6dC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuY3VycmVudCE9PXQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDtlLmJpbmRGcmFtZWJ1ZmZlcihlLkZSQU1FQlVGRkVSLHQpLHRoaXMuY3VycmVudD10fX07dmFyIE90PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1udWxsfTtPdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sT3QucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7ZS5iaW5kUmVuZGVyYnVmZmVyKGUuUkVOREVSQlVGRkVSLHQpLHRoaXMuY3VycmVudD10fX07dmFyIEl0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1udWxsfTtJdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sSXQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7ZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsdCksdGhpcy5jdXJyZW50PXR9fTt2YXIgRHQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PW51bGx9O0R0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxEdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuY3VycmVudCE9PXQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDtlLmJpbmRCdWZmZXIoZS5BUlJBWV9CVUZGRVIsdCksdGhpcy5jdXJyZW50PXR9fTt2YXIgUHQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PW51bGx9O1B0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxQdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDtlLmJpbmRCdWZmZXIoZS5FTEVNRU5UX0FSUkFZX0JVRkZFUix0KSx0aGlzLmN1cnJlbnQ9dH07dmFyIFJ0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1udWxsfTtSdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sUnQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQhPT10JiZ0aGlzLmNvbnRleHQuZXh0VmVydGV4QXJyYXlPYmplY3QmJih0aGlzLmNvbnRleHQuZXh0VmVydGV4QXJyYXlPYmplY3QuYmluZFZlcnRleEFycmF5T0VTKHQpLHRoaXMuY3VycmVudD10KX07dmFyIEZ0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD00fTtGdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sRnQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7ZS5waXhlbFN0b3JlaShlLlVOUEFDS19BTElHTk1FTlQsdCksdGhpcy5jdXJyZW50PXR9fTt2YXIgQnQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PSExfTtCdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sQnQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7ZS5waXhlbFN0b3JlaShlLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCx0KSx0aGlzLmN1cnJlbnQ9dH19O3ZhciBOdD1mdW5jdGlvbih0LGUpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1udWxsLHRoaXMucGFyZW50PWV9O050LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fTt2YXIganQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5kaXJ0eT0hMX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuZGlydHl8fHRoaXMuY3VycmVudCE9PXQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDt0aGlzLmNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldCh0aGlzLnBhcmVudCksZS5mcmFtZWJ1ZmZlclRleHR1cmUyRChlLkZSQU1FQlVGRkVSLGUuQ09MT1JfQVRUQUNITUVOVDAsZS5URVhUVVJFXzJELHQsMCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGUucHJvdG90eXBlLnNldERpcnR5PWZ1bmN0aW9uKCl7dGhpcy5kaXJ0eT0hMH0sZX0oTnQpLFZ0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuY3VycmVudCE9PXQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDt0aGlzLmNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldCh0aGlzLnBhcmVudCksZS5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihlLkZSQU1FQlVGRkVSLGUuREVQVEhfQVRUQUNITUVOVCxlLlJFTkRFUkJVRkZFUix0KSx0aGlzLmN1cnJlbnQ9dH19LGV9KE50KSxVdD1mdW5jdGlvbih0LGUscil7dGhpcy5jb250ZXh0PXQsdGhpcy53aWR0aD1lLHRoaXMuaGVpZ2h0PXI7dmFyIG49dC5nbCxpPXRoaXMuZnJhbWVidWZmZXI9bi5jcmVhdGVGcmFtZWJ1ZmZlcigpO3RoaXMuY29sb3JBdHRhY2htZW50PW5ldyBqdCh0LGkpLHRoaXMuZGVwdGhBdHRhY2htZW50PW5ldyBWdCh0LGkpfTtVdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udGV4dC5nbCxlPXRoaXMuY29sb3JBdHRhY2htZW50LmdldCgpO2UmJnQuZGVsZXRlVGV4dHVyZShlKTt2YXIgcj10aGlzLmRlcHRoQXR0YWNobWVudC5nZXQoKTtyJiZ0LmRlbGV0ZVJlbmRlcmJ1ZmZlcihyKSx0LmRlbGV0ZUZyYW1lYnVmZmVyKHRoaXMuZnJhbWVidWZmZXIpfTt2YXIgcXQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZnVuYz10LHRoaXMubWFzaz1lLHRoaXMucmFuZ2U9cn07cXQuUmVhZE9ubHk9ITEscXQuUmVhZFdyaXRlPSEwLHF0LmRpc2FibGVkPW5ldyBxdCg1MTkscXQuUmVhZE9ubHksWzAsMV0pO3ZhciBIdD1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy50ZXN0PXQsdGhpcy5yZWY9ZSx0aGlzLm1hc2s9cix0aGlzLmZhaWw9bix0aGlzLmRlcHRoRmFpbD1pLHRoaXMucGFzcz1hfTtIdC5kaXNhYmxlZD1uZXcgSHQoe2Z1bmM6NTE5LG1hc2s6MH0sMCwwLDc2ODAsNzY4MCw3NjgwKTt2YXIgR3Q9ZnVuY3Rpb24odCxlLHIpe3RoaXMuYmxlbmRGdW5jdGlvbj10LHRoaXMuYmxlbmRDb2xvcj1lLHRoaXMubWFzaz1yfTtHdC5kaXNhYmxlZD1uZXcgR3QoR3QuUmVwbGFjZT1bMSwwXSx0LmRlZmF1bHQkNi50cmFuc3BhcmVudCxbITEsITEsITEsITFdKSxHdC51bmJsZW5kZWQ9bmV3IEd0KEd0LlJlcGxhY2UsdC5kZWZhdWx0JDYudHJhbnNwYXJlbnQsWyEwLCEwLCEwLCEwXSksR3QuYWxwaGFCbGVuZGVkPW5ldyBHdChbMSw3NzFdLHQuZGVmYXVsdCQ2LnRyYW5zcGFyZW50LFshMCwhMCwhMCwhMF0pO3ZhciBZdD1mdW5jdGlvbih0KXt0aGlzLmdsPXQsdGhpcy5leHRWZXJ0ZXhBcnJheU9iamVjdD10aGlzLmdsLmdldEV4dGVuc2lvbihcIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0XCIpLHRoaXMubGluZVdpZHRoUmFuZ2U9dC5nZXRQYXJhbWV0ZXIodC5BTElBU0VEX0xJTkVfV0lEVEhfUkFOR0UpLHRoaXMuY2xlYXJDb2xvcj1uZXcgZnQodGhpcyksdGhpcy5jbGVhckRlcHRoPW5ldyBwdCh0aGlzKSx0aGlzLmNsZWFyU3RlbmNpbD1uZXcgZHQodGhpcyksdGhpcy5jb2xvck1hc2s9bmV3IGd0KHRoaXMpLHRoaXMuZGVwdGhNYXNrPW5ldyB2dCh0aGlzKSx0aGlzLnN0ZW5jaWxNYXNrPW5ldyBtdCh0aGlzKSx0aGlzLnN0ZW5jaWxGdW5jPW5ldyB5dCh0aGlzKSx0aGlzLnN0ZW5jaWxPcD1uZXcgeHQodGhpcyksdGhpcy5zdGVuY2lsVGVzdD1uZXcgYnQodGhpcyksdGhpcy5kZXB0aFJhbmdlPW5ldyBfdCh0aGlzKSx0aGlzLmRlcHRoVGVzdD1uZXcgd3QodGhpcyksdGhpcy5kZXB0aEZ1bmM9bmV3IGt0KHRoaXMpLHRoaXMuYmxlbmQ9bmV3IEF0KHRoaXMpLHRoaXMuYmxlbmRGdW5jPW5ldyBUdCh0aGlzKSx0aGlzLmJsZW5kQ29sb3I9bmV3IE10KHRoaXMpLHRoaXMucHJvZ3JhbT1uZXcgU3QodGhpcyksdGhpcy5saW5lV2lkdGg9bmV3IEV0KHRoaXMpLHRoaXMuYWN0aXZlVGV4dHVyZT1uZXcgQ3QodGhpcyksdGhpcy52aWV3cG9ydD1uZXcgTHQodGhpcyksdGhpcy5iaW5kRnJhbWVidWZmZXI9bmV3IHp0KHRoaXMpLHRoaXMuYmluZFJlbmRlcmJ1ZmZlcj1uZXcgT3QodGhpcyksdGhpcy5iaW5kVGV4dHVyZT1uZXcgSXQodGhpcyksdGhpcy5iaW5kVmVydGV4QnVmZmVyPW5ldyBEdCh0aGlzKSx0aGlzLmJpbmRFbGVtZW50QnVmZmVyPW5ldyBQdCh0aGlzKSx0aGlzLmJpbmRWZXJ0ZXhBcnJheU9FUz10aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0JiZuZXcgUnQodGhpcyksdGhpcy5waXhlbFN0b3JlVW5wYWNrPW5ldyBGdCh0aGlzKSx0aGlzLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhPW5ldyBCdCh0aGlzKSx0aGlzLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYz10LmdldEV4dGVuc2lvbihcIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpY1wiKXx8dC5nZXRFeHRlbnNpb24oXCJNT1pfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljXCIpfHx0LmdldEV4dGVuc2lvbihcIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWNcIiksdGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMmJih0aGlzLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpY01heD10LmdldFBhcmFtZXRlcih0aGlzLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5NQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQpKSx0aGlzLmV4dFRleHR1cmVIYWxmRmxvYXQ9dC5nZXRFeHRlbnNpb24oXCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0XCIpLHRoaXMuZXh0VGV4dHVyZUhhbGZGbG9hdCYmdC5nZXRFeHRlbnNpb24oXCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhclwiKX07WXQucHJvdG90eXBlLmNyZWF0ZUluZGV4QnVmZmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBjdCh0aGlzLHQsZSl9LFl0LnByb3RvdHlwZS5jcmVhdGVWZXJ0ZXhCdWZmZXI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuZXcgaHQodGhpcyx0LGUscil9LFl0LnByb3RvdHlwZS5jcmVhdGVSZW5kZXJidWZmZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuZ2wsaT1uLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO3JldHVybiB0aGlzLmJpbmRSZW5kZXJidWZmZXIuc2V0KGkpLG4ucmVuZGVyYnVmZmVyU3RvcmFnZShuLlJFTkRFUkJVRkZFUix0LGUsciksdGhpcy5iaW5kUmVuZGVyYnVmZmVyLnNldChudWxsKSxpfSxZdC5wcm90b3R5cGUuY3JlYXRlRnJhbWVidWZmZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IFV0KHRoaXMsdCxlKX0sWXQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY29sb3Iscj10LmRlcHRoLG49dGhpcy5nbCxpPTA7ZSYmKGl8PW4uQ09MT1JfQlVGRkVSX0JJVCx0aGlzLmNsZWFyQ29sb3Iuc2V0KGUpLHRoaXMuY29sb3JNYXNrLnNldChbITAsITAsITAsITBdKSksdm9pZCAwIT09ciYmKGl8PW4uREVQVEhfQlVGRkVSX0JJVCx0aGlzLmNsZWFyRGVwdGguc2V0KHIpLHRoaXMuZGVwdGhNYXNrLnNldCghMCkpLG4uY2xlYXIoaSl9LFl0LnByb3RvdHlwZS5zZXREZXB0aE1vZGU9ZnVuY3Rpb24odCl7dC5mdW5jIT09dGhpcy5nbC5BTFdBWVN8fHQubWFzaz8odGhpcy5kZXB0aFRlc3Quc2V0KCEwKSx0aGlzLmRlcHRoRnVuYy5zZXQodC5mdW5jKSx0aGlzLmRlcHRoTWFzay5zZXQodC5tYXNrKSx0aGlzLmRlcHRoUmFuZ2Uuc2V0KHQucmFuZ2UpKTp0aGlzLmRlcHRoVGVzdC5zZXQoITEpfSxZdC5wcm90b3R5cGUuc2V0U3RlbmNpbE1vZGU9ZnVuY3Rpb24odCl7dC50ZXN0LmZ1bmMhPT10aGlzLmdsLkFMV0FZU3x8dC5tYXNrPyh0aGlzLnN0ZW5jaWxUZXN0LnNldCghMCksdGhpcy5zdGVuY2lsTWFzay5zZXQodC5tYXNrKSx0aGlzLnN0ZW5jaWxPcC5zZXQoW3QuZmFpbCx0LmRlcHRoRmFpbCx0LnBhc3NdKSx0aGlzLnN0ZW5jaWxGdW5jLnNldCh7ZnVuYzp0LnRlc3QuZnVuYyxyZWY6dC5yZWYsbWFzazp0LnRlc3QubWFza30pKTp0aGlzLnN0ZW5jaWxUZXN0LnNldCghMSl9LFl0LnByb3RvdHlwZS5zZXRDb2xvck1vZGU9ZnVuY3Rpb24oZSl7dC5kZWZhdWx0JDEwKGUuYmxlbmRGdW5jdGlvbixHdC5SZXBsYWNlKT90aGlzLmJsZW5kLnNldCghMSk6KHRoaXMuYmxlbmQuc2V0KCEwKSx0aGlzLmJsZW5kRnVuYy5zZXQoZS5ibGVuZEZ1bmN0aW9uKSx0aGlzLmJsZW5kQ29sb3Iuc2V0KGUuYmxlbmRDb2xvcikpLHRoaXMuY29sb3JNYXNrLnNldChlLm1hc2spfTt2YXIgV3Q9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LHIsbil7dmFyIGk9dGhpcztlLmNhbGwodGhpcyksdGhpcy5pZD10LHRoaXMuZGlzcGF0Y2hlcj1uLHRoaXMub24oXCJkYXRhXCIsZnVuY3Rpb24odCl7XCJzb3VyY2VcIj09PXQuZGF0YVR5cGUmJlwibWV0YWRhdGFcIj09PXQuc291cmNlRGF0YVR5cGUmJihpLl9zb3VyY2VMb2FkZWQ9ITApLGkuX3NvdXJjZUxvYWRlZCYmIWkuX3BhdXNlZCYmXCJzb3VyY2VcIj09PXQuZGF0YVR5cGUmJlwiY29udGVudFwiPT09dC5zb3VyY2VEYXRhVHlwZSYmKGkucmVsb2FkKCksaS50cmFuc2Zvcm0mJmkudXBkYXRlKGkudHJhbnNmb3JtKSl9KSx0aGlzLm9uKFwiZXJyb3JcIixmdW5jdGlvbigpe2kuX3NvdXJjZUVycm9yZWQ9ITB9KSx0aGlzLl9zb3VyY2U9aXQodCxyLG4sdGhpcyksdGhpcy5fdGlsZXM9e30sdGhpcy5fY2FjaGU9bmV3IGx0KDAsdGhpcy5fdW5sb2FkVGlsZS5iaW5kKHRoaXMpKSx0aGlzLl90aW1lcnM9e30sdGhpcy5fY2FjaGVUaW1lcnM9e30sdGhpcy5fbWF4VGlsZUNhY2hlU2l6ZT1udWxsLHRoaXMuX2lzSWRSZW5kZXJhYmxlPXRoaXMuX2lzSWRSZW5kZXJhYmxlLmJpbmQodGhpcyksdGhpcy5fY292ZXJlZFRpbGVzPXt9fXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMuX21heFRpbGVDYWNoZVNpemU9dD90Ll9tYXhUaWxlQ2FjaGVTaXplOm51bGwsdGhpcy5fc291cmNlJiZ0aGlzLl9zb3VyY2Uub25BZGQmJnRoaXMuX3NvdXJjZS5vbkFkZCh0KX0sci5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24odCl7dGhpcy5fc291cmNlJiZ0aGlzLl9zb3VyY2Uub25SZW1vdmUmJnRoaXMuX3NvdXJjZS5vblJlbW92ZSh0KX0sci5wcm90b3R5cGUubG9hZGVkPWZ1bmN0aW9uKCl7aWYodGhpcy5fc291cmNlRXJyb3JlZClyZXR1cm4hMDtpZighdGhpcy5fc291cmNlTG9hZGVkKXJldHVybiExO2Zvcih2YXIgdCBpbiB0aGlzLl90aWxlcyl7dmFyIGU9dGhpcy5fdGlsZXNbdF07aWYoXCJsb2FkZWRcIiE9PWUuc3RhdGUmJlwiZXJyb3JlZFwiIT09ZS5zdGF0ZSlyZXR1cm4hMX1yZXR1cm4hMH0sci5wcm90b3R5cGUuZ2V0U291cmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvdXJjZX0sci5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLl9wYXVzZWQ9ITB9LHIucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe2lmKHRoaXMuX3BhdXNlZCl7dmFyIHQ9dGhpcy5fc2hvdWxkUmVsb2FkT25SZXN1bWU7dGhpcy5fcGF1c2VkPSExLHRoaXMuX3Nob3VsZFJlbG9hZE9uUmVzdW1lPSExLHQmJnRoaXMucmVsb2FkKCksdGhpcy50cmFuc2Zvcm0mJnRoaXMudXBkYXRlKHRoaXMudHJhbnNmb3JtKX19LHIucHJvdG90eXBlLl9sb2FkVGlsZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9zb3VyY2UubG9hZFRpbGUodCxlKX0sci5wcm90b3R5cGUuX3VubG9hZFRpbGU9ZnVuY3Rpb24odCl7aWYodGhpcy5fc291cmNlLnVubG9hZFRpbGUpcmV0dXJuIHRoaXMuX3NvdXJjZS51bmxvYWRUaWxlKHQsZnVuY3Rpb24oKXt9KX0sci5wcm90b3R5cGUuX2Fib3J0VGlsZT1mdW5jdGlvbih0KXtpZih0aGlzLl9zb3VyY2UuYWJvcnRUaWxlKXJldHVybiB0aGlzLl9zb3VyY2UuYWJvcnRUaWxlKHQsZnVuY3Rpb24oKXt9KX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvdXJjZS5zZXJpYWxpemUoKX0sci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fc291cmNlLnByZXBhcmUmJnRoaXMuX3NvdXJjZS5wcmVwYXJlKCksdGhpcy5fdGlsZXMpdGhpcy5fdGlsZXNbZV0udXBsb2FkKHQpfSxyLnByb3RvdHlwZS5nZXRJZHM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl90aWxlcykubWFwKE51bWJlcikuc29ydChmdW5jdGlvbihyLG4pe3ZhciBpPWUuX3RpbGVzW3JdLnRpbGVJRCxhPWUuX3RpbGVzW25dLnRpbGVJRCxvPW5ldyB0LmRlZmF1bHQkMShpLmNhbm9uaWNhbC54LGkuY2Fub25pY2FsLnkpLnJvdGF0ZShlLnRyYW5zZm9ybS5hbmdsZSkscz1uZXcgdC5kZWZhdWx0JDEoYS5jYW5vbmljYWwueCxhLmNhbm9uaWNhbC55KS5yb3RhdGUoZS50cmFuc2Zvcm0uYW5nbGUpO3JldHVybiBpLm92ZXJzY2FsZWRaLWEub3ZlcnNjYWxlZFp8fHMueS1vLnl8fHMueC1vLnh9KX0sci5wcm90b3R5cGUuZ2V0UmVuZGVyYWJsZUlkcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldElkcygpLmZpbHRlcih0aGlzLl9pc0lkUmVuZGVyYWJsZSl9LHIucHJvdG90eXBlLmhhc1JlbmRlcmFibGVQYXJlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5maW5kTG9hZGVkUGFyZW50KHQsMCx7fSk7cmV0dXJuISFlJiZ0aGlzLl9pc0lkUmVuZGVyYWJsZShlLnRpbGVJRC5rZXkpfSxyLnByb3RvdHlwZS5faXNJZFJlbmRlcmFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3RpbGVzW3RdJiZ0aGlzLl90aWxlc1t0XS5oYXNEYXRhKCkmJiF0aGlzLl9jb3ZlcmVkVGlsZXNbdF19LHIucHJvdG90eXBlLnJlbG9hZD1mdW5jdGlvbigpe2lmKHRoaXMuX3BhdXNlZCl0aGlzLl9zaG91bGRSZWxvYWRPblJlc3VtZT0hMDtlbHNlIGZvcih2YXIgdCBpbiB0aGlzLl9jYWNoZS5yZXNldCgpLHRoaXMuX3RpbGVzKXRoaXMuX3JlbG9hZFRpbGUodCxcInJlbG9hZGluZ1wiKX0sci5wcm90b3R5cGUuX3JlbG9hZFRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl90aWxlc1t0XTtyJiYoXCJsb2FkaW5nXCIhPT1yLnN0YXRlJiYoci5zdGF0ZT1lKSx0aGlzLl9sb2FkVGlsZShyLHRoaXMuX3RpbGVMb2FkZWQuYmluZCh0aGlzLHIsdCxlKSkpfSxyLnByb3RvdHlwZS5fdGlsZUxvYWRlZD1mdW5jdGlvbihlLHIsbixpKXtpZihpKXJldHVybiBlLnN0YXRlPVwiZXJyb3JlZFwiLHZvaWQoNDA0IT09aS5zdGF0dXM/dGhpcy5fc291cmNlLmZpcmUobmV3IHQuRXJyb3JFdmVudChpLHt0aWxlOmV9KSk6dGhpcy51cGRhdGUodGhpcy50cmFuc2Zvcm0pKTtlLnRpbWVBZGRlZD1hLm5vdygpLFwiZXhwaXJlZFwiPT09biYmKGUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb249ITApLHRoaXMuX3NldFRpbGVSZWxvYWRUaW1lcihyLGUpLFwicmFzdGVyLWRlbVwiPT09dGhpcy5nZXRTb3VyY2UoKS50eXBlJiZlLmRlbSYmdGhpcy5fYmFja2ZpbGxERU0oZSksdGhpcy5fc291cmNlLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhXCIse2RhdGFUeXBlOlwic291cmNlXCIsdGlsZTplLGNvb3JkOmUudGlsZUlEfSkpLHRoaXMubWFwJiYodGhpcy5tYXAucGFpbnRlci50aWxlRXh0ZW50VkFPLnZhbz1udWxsKX0sci5wcm90b3R5cGUuX2JhY2tmaWxsREVNPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmdldFJlbmRlcmFibGVJZHMoKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07aWYodC5uZWlnaGJvcmluZ1RpbGVzJiZ0Lm5laWdoYm9yaW5nVGlsZXNbbl0pe3ZhciBpPXRoaXMuZ2V0VGlsZUJ5SUQobik7YSh0LGkpLGEoaSx0KX19ZnVuY3Rpb24gYSh0LGUpe3QubmVlZHNIaWxsc2hhZGVQcmVwYXJlPSEwO3ZhciByPWUudGlsZUlELmNhbm9uaWNhbC54LXQudGlsZUlELmNhbm9uaWNhbC54LG49ZS50aWxlSUQuY2Fub25pY2FsLnktdC50aWxlSUQuY2Fub25pY2FsLnksaT1NYXRoLnBvdygyLHQudGlsZUlELmNhbm9uaWNhbC56KSxhPWUudGlsZUlELmtleTswPT09ciYmMD09PW58fE1hdGguYWJzKG4pPjF8fChNYXRoLmFicyhyKT4xJiYoMT09PU1hdGguYWJzKHIraSk/cis9aToxPT09TWF0aC5hYnMoci1pKSYmKHItPWkpKSxlLmRlbSYmdC5kZW0mJih0LmRlbS5iYWNrZmlsbEJvcmRlcihlLmRlbSxyLG4pLHQubmVpZ2hib3JpbmdUaWxlcyYmdC5uZWlnaGJvcmluZ1RpbGVzW2FdJiYodC5uZWlnaGJvcmluZ1RpbGVzW2FdLmJhY2tmaWxsZWQ9ITApKSl9fSxyLnByb3RvdHlwZS5nZXRUaWxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldFRpbGVCeUlEKHQua2V5KX0sci5wcm90b3R5cGUuZ2V0VGlsZUJ5SUQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3RpbGVzW3RdfSxyLnByb3RvdHlwZS5nZXRab29tPWZ1bmN0aW9uKHQpe3JldHVybiB0Lnpvb20rdC5zY2FsZVpvb20odC50aWxlU2l6ZS90aGlzLl9zb3VyY2UudGlsZVNpemUpfSxyLnByb3RvdHlwZS5fZmluZExvYWRlZENoaWxkcmVuPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0hMTtmb3IodmFyIGkgaW4gdGhpcy5fdGlsZXMpe3ZhciBhPXRoaXMuX3RpbGVzW2ldO2lmKCEocltpXXx8IWEuaGFzRGF0YSgpfHxhLnRpbGVJRC5vdmVyc2NhbGVkWjw9dC5vdmVyc2NhbGVkWnx8YS50aWxlSUQub3ZlcnNjYWxlZFo+ZSkpe3ZhciBvPU1hdGgucG93KDIsYS50aWxlSUQuY2Fub25pY2FsLnotdC5jYW5vbmljYWwueik7aWYoTWF0aC5mbG9vcihhLnRpbGVJRC5jYW5vbmljYWwueC9vKT09PXQuY2Fub25pY2FsLngmJk1hdGguZmxvb3IoYS50aWxlSUQuY2Fub25pY2FsLnkvbyk9PT10LmNhbm9uaWNhbC55KWZvcihyW2ldPWEudGlsZUlELG49ITA7YSYmYS50aWxlSUQub3ZlcnNjYWxlZFotMT50Lm92ZXJzY2FsZWRaOyl7dmFyIHM9YS50aWxlSUQuc2NhbGVkVG8oYS50aWxlSUQub3ZlcnNjYWxlZFotMSk7aWYoIXMpYnJlYWs7KGE9dGhpcy5fdGlsZXNbcy5rZXldKSYmYS5oYXNEYXRhKCkmJihkZWxldGUgcltpXSxyW3Mua2V5XT1zKX19fXJldHVybiBufSxyLnByb3RvdHlwZS5maW5kTG9hZGVkUGFyZW50PWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC5vdmVyc2NhbGVkWi0xO24+PWU7bi0tKXt2YXIgaT10LnNjYWxlZFRvKG4pO2lmKCFpKXJldHVybjt2YXIgYT1TdHJpbmcoaS5rZXkpLG89dGhpcy5fdGlsZXNbYV07aWYobyYmby5oYXNEYXRhKCkpcmV0dXJuIHJbYV09aSxvO2lmKHRoaXMuX2NhY2hlLmhhcyhpKSlyZXR1cm4gclthXT1pLHRoaXMuX2NhY2hlLmdldChpKX19LHIucHJvdG90eXBlLnVwZGF0ZUNhY2hlU2l6ZT1mdW5jdGlvbih0KXt2YXIgZT0oTWF0aC5jZWlsKHQud2lkdGgvdGhpcy5fc291cmNlLnRpbGVTaXplKSsxKSooTWF0aC5jZWlsKHQuaGVpZ2h0L3RoaXMuX3NvdXJjZS50aWxlU2l6ZSkrMSkscj1NYXRoLmZsb29yKDUqZSksbj1cIm51bWJlclwiPT10eXBlb2YgdGhpcy5fbWF4VGlsZUNhY2hlU2l6ZT9NYXRoLm1pbih0aGlzLl9tYXhUaWxlQ2FjaGVTaXplLHIpOnI7dGhpcy5fY2FjaGUuc2V0TWF4U2l6ZShuKX0sci5wcm90b3R5cGUuaGFuZGxlV3JhcEp1bXA9ZnVuY3Rpb24odCl7dmFyIGU9KHQtKHZvaWQgMD09PXRoaXMuX3ByZXZMbmc/dDp0aGlzLl9wcmV2TG5nKSkvMzYwLHI9TWF0aC5yb3VuZChlKTtpZih0aGlzLl9wcmV2TG5nPXQscil7dmFyIG49e307Zm9yKHZhciBpIGluIHRoaXMuX3RpbGVzKXt2YXIgYT10aGlzLl90aWxlc1tpXTthLnRpbGVJRD1hLnRpbGVJRC51bndyYXBUbyhhLnRpbGVJRC53cmFwK3IpLG5bYS50aWxlSUQua2V5XT1hfWZvcih2YXIgbyBpbiB0aGlzLl90aWxlcz1uLHRoaXMuX3RpbWVycyljbGVhclRpbWVvdXQodGhpcy5fdGltZXJzW29dKSxkZWxldGUgdGhpcy5fdGltZXJzW29dO2Zvcih2YXIgcyBpbiB0aGlzLl90aWxlcyl7dmFyIGw9dGhpcy5fdGlsZXNbc107dGhpcy5fc2V0VGlsZVJlbG9hZFRpbWVyKHMsbCl9fX0sci5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7aWYodGhpcy50cmFuc2Zvcm09ZSx0aGlzLl9zb3VyY2VMb2FkZWQmJiF0aGlzLl9wYXVzZWQpe3ZhciBpO3RoaXMudXBkYXRlQ2FjaGVTaXplKGUpLHRoaXMuaGFuZGxlV3JhcEp1bXAodGhpcy50cmFuc2Zvcm0uY2VudGVyLmxuZyksdGhpcy5fY292ZXJlZFRpbGVzPXt9LHRoaXMudXNlZD90aGlzLl9zb3VyY2UudGlsZUlEP2k9ZS5nZXRWaXNpYmxlVW53cmFwcGVkQ29vcmRpbmF0ZXModGhpcy5fc291cmNlLnRpbGVJRCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUuY2Fub25pY2FsLnosZS53cmFwLGUuY2Fub25pY2FsLnosZS5jYW5vbmljYWwueCxlLmNhbm9uaWNhbC55KX0pOihpPWUuY292ZXJpbmdUaWxlcyh7dGlsZVNpemU6dGhpcy5fc291cmNlLnRpbGVTaXplLG1pbnpvb206dGhpcy5fc291cmNlLm1pbnpvb20sbWF4em9vbTp0aGlzLl9zb3VyY2UubWF4em9vbSxyb3VuZFpvb206dGhpcy5fc291cmNlLnJvdW5kWm9vbSxyZXBhcnNlT3ZlcnNjYWxlZDp0aGlzLl9zb3VyY2UucmVwYXJzZU92ZXJzY2FsZWR9KSx0aGlzLl9zb3VyY2UuaGFzVGlsZSYmKGk9aS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIG4uX3NvdXJjZS5oYXNUaWxlKHQpfSkpKTppPVtdO3ZhciBvLHM9KHRoaXMuX3NvdXJjZS5yb3VuZFpvb20/TWF0aC5yb3VuZDpNYXRoLmZsb29yKSh0aGlzLmdldFpvb20oZSkpLGw9TWF0aC5tYXgocy1yLm1heE92ZXJ6b29taW5nLHRoaXMuX3NvdXJjZS5taW56b29tKSxjPU1hdGgubWF4KHMrci5tYXhVbmRlcnpvb21pbmcsdGhpcy5fc291cmNlLm1pbnpvb20pLHU9dGhpcy5fdXBkYXRlUmV0YWluZWRUaWxlcyhpLHMpLGg9e307aWYoWnQodGhpcy5fc291cmNlLnR5cGUpKWZvcih2YXIgZj1PYmplY3Qua2V5cyh1KSxwPTA7cDxmLmxlbmd0aDtwKyspe3ZhciBkPWZbcF0sZz11W2RdLHY9bi5fdGlsZXNbZF07aWYodiYmKHZvaWQgMD09PXYuZmFkZUVuZFRpbWV8fHYuZmFkZUVuZFRpbWU+PWEubm93KCkpKXtuLl9maW5kTG9hZGVkQ2hpbGRyZW4oZyxjLHUpJiYodVtkXT1nKTt2YXIgbT1uLmZpbmRMb2FkZWRQYXJlbnQoZyxsLGgpO20mJm4uX2FkZFRpbGUobS50aWxlSUQpfX1mb3IobyBpbiBoKXVbb118fChuLl9jb3ZlcmVkVGlsZXNbb109ITApO2ZvcihvIGluIGgpdVtvXT1oW29dO2Zvcih2YXIgeT10LmtleXNEaWZmZXJlbmNlKHRoaXMuX3RpbGVzLHUpLHg9MDt4PHkubGVuZ3RoO3grKyluLl9yZW1vdmVUaWxlKHlbeF0pfX0sci5wcm90b3R5cGUuX3VwZGF0ZVJldGFpbmVkVGlsZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49e30saT17fSxhPU1hdGgubWF4KGUtci5tYXhPdmVyem9vbWluZyx0aGlzLl9zb3VyY2UubWluem9vbSksbz1NYXRoLm1heChlK3IubWF4VW5kZXJ6b29taW5nLHRoaXMuX3NvdXJjZS5taW56b29tKSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPXRbc10sYz10aGlzLl9hZGRUaWxlKGwpLHU9ITE7aWYoYy5oYXNEYXRhKCkpbltsLmtleV09bDtlbHNle3U9Yy53YXNSZXF1ZXN0ZWQoKSxuW2wua2V5XT1sO3ZhciBoPSEwO2lmKGUrMT50aGlzLl9zb3VyY2UubWF4em9vbSl7dmFyIGY9bC5jaGlsZHJlbih0aGlzLl9zb3VyY2UubWF4em9vbSlbMF0scD10aGlzLmdldFRpbGUoZik7cCYmcC5oYXNEYXRhKCk/bltmLmtleV09ZjpoPSExfWVsc2V7dGhpcy5fZmluZExvYWRlZENoaWxkcmVuKGwsbyxuKTtmb3IodmFyIGQ9bC5jaGlsZHJlbih0aGlzLl9zb3VyY2UubWF4em9vbSksZz0wO2c8ZC5sZW5ndGg7ZysrKWlmKCFuW2RbZ10ua2V5XSl7aD0hMTticmVha319aWYoIWgpZm9yKHZhciB2PWwub3ZlcnNjYWxlZFotMTt2Pj1hOy0tdil7dmFyIG09bC5zY2FsZWRUbyh2KTtpZihpW20ua2V5XSlicmVhaztpZihpW20ua2V5XT0hMCwhKGM9dGhpcy5nZXRUaWxlKG0pKSYmdSYmKGM9dGhpcy5fYWRkVGlsZShtKSksYyYmKG5bbS5rZXldPW0sdT1jLndhc1JlcXVlc3RlZCgpLGMuaGFzRGF0YSgpKSlicmVha319fXJldHVybiBufSxyLnByb3RvdHlwZS5fYWRkVGlsZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzLl90aWxlc1tlLmtleV07aWYocilyZXR1cm4gcjsocj10aGlzLl9jYWNoZS5nZXRBbmRSZW1vdmUoZSkpJiYodGhpcy5fc2V0VGlsZVJlbG9hZFRpbWVyKGUua2V5LHIpLHIudGlsZUlEPWUpO3ZhciBuPUJvb2xlYW4ocik7cmV0dXJuIG58fChyPW5ldyBzdChlLHRoaXMuX3NvdXJjZS50aWxlU2l6ZSplLm92ZXJzY2FsZUZhY3RvcigpKSx0aGlzLl9sb2FkVGlsZShyLHRoaXMuX3RpbGVMb2FkZWQuYmluZCh0aGlzLHIsZS5rZXksci5zdGF0ZSkpKSxyPyhyLnVzZXMrKyx0aGlzLl90aWxlc1tlLmtleV09cixufHx0aGlzLl9zb3VyY2UuZmlyZShuZXcgdC5FdmVudChcImRhdGFsb2FkaW5nXCIse3RpbGU6cixjb29yZDpyLnRpbGVJRCxkYXRhVHlwZTpcInNvdXJjZVwifSkpLHIpOm51bGx9LHIucHJvdG90eXBlLl9zZXRUaWxlUmVsb2FkVGltZXI9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzO3QgaW4gdGhpcy5fdGltZXJzJiYoY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyc1t0XSksZGVsZXRlIHRoaXMuX3RpbWVyc1t0XSk7dmFyIG49ZS5nZXRFeHBpcnlUaW1lb3V0KCk7biYmKHRoaXMuX3RpbWVyc1t0XT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ci5fcmVsb2FkVGlsZSh0LFwiZXhwaXJlZFwiKSxkZWxldGUgci5fdGltZXJzW3RdfSxuKSl9LHIucHJvdG90eXBlLl9yZW1vdmVUaWxlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbGVzW3RdO2UmJihlLnVzZXMtLSxkZWxldGUgdGhpcy5fdGlsZXNbdF0sdGhpcy5fdGltZXJzW3RdJiYoY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyc1t0XSksZGVsZXRlIHRoaXMuX3RpbWVyc1t0XSksZS51c2VzPjB8fChlLmhhc0RhdGEoKT90aGlzLl9jYWNoZS5hZGQoZS50aWxlSUQsZSxlLmdldEV4cGlyeVRpbWVvdXQoKSk6KGUuYWJvcnRlZD0hMCx0aGlzLl9hYm9ydFRpbGUoZSksdGhpcy5fdW5sb2FkVGlsZShlKSkpKX0sci5wcm90b3R5cGUuY2xlYXJUaWxlcz1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl9zaG91bGRSZWxvYWRPblJlc3VtZT0hMSx0aGlzLl9wYXVzZWQ9ITEsdGhpcy5fdGlsZXMpdGhpcy5fcmVtb3ZlVGlsZSh0KTt0aGlzLl9jYWNoZS5yZXNldCgpfSxyLnByb3RvdHlwZS50aWxlc0luPWZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPVtdLGk9dGhpcy5nZXRJZHMoKSxhPTEvMCxvPTEvMCxzPS0xLzAsbD0tMS8wLGM9ZVswXS56b29tLHU9MDt1PGUubGVuZ3RoO3UrKyl7dmFyIGg9ZVt1XTthPU1hdGgubWluKGEsaC5jb2x1bW4pLG89TWF0aC5taW4obyxoLnJvdykscz1NYXRoLm1heChzLGguY29sdW1uKSxsPU1hdGgubWF4KGwsaC5yb3cpfWZvcih2YXIgZj0wO2Y8aS5sZW5ndGg7ZisrKXt2YXIgcD10aGlzLl90aWxlc1tpW2ZdXSxkPXAudGlsZUlELGc9TWF0aC5wb3coMix0aGlzLnRyYW5zZm9ybS56b29tLXAudGlsZUlELm92ZXJzY2FsZWRaKSx2PXIqcC5xdWVyeVBhZGRpbmcqdC5kZWZhdWx0JDgvcC50aWxlU2l6ZS9nLG09W1h0KGQsbmV3IHQuZGVmYXVsdCQxNyhhLG8sYykpLFh0KGQsbmV3IHQuZGVmYXVsdCQxNyhzLGwsYykpXTtpZihtWzBdLngtdjx0LmRlZmF1bHQkOCYmbVswXS55LXY8dC5kZWZhdWx0JDgmJm1bMV0ueCt2Pj0wJiZtWzFdLnkrdj49MCl7Zm9yKHZhciB5PVtdLHg9MDt4PGUubGVuZ3RoO3grKyl5LnB1c2goWHQoZCxlW3hdKSk7bi5wdXNoKHt0aWxlOnAsdGlsZUlEOmQscXVlcnlHZW9tZXRyeTpbeV0sc2NhbGU6Z30pfX1yZXR1cm4gbn0sci5wcm90b3R5cGUuZ2V0VmlzaWJsZUNvb3JkaW5hdGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT10aGlzLmdldFJlbmRlcmFibGVJZHMoKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX3RpbGVzW2VdLnRpbGVJRH0pLHI9MCxuPWU7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdO2kucG9zTWF0cml4PXQudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeChpLnRvVW53cmFwcGVkKCkpfXJldHVybiBlfSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7aWYodGhpcy5fc291cmNlLmhhc1RyYW5zaXRpb24oKSlyZXR1cm4hMDtpZihadCh0aGlzLl9zb3VyY2UudHlwZSkpZm9yKHZhciB0IGluIHRoaXMuX3RpbGVzKXt2YXIgZT10aGlzLl90aWxlc1t0XTtpZih2b2lkIDAhPT1lLmZhZGVFbmRUaW1lJiZlLmZhZGVFbmRUaW1lPj1hLm5vdygpKXJldHVybiEwfXJldHVybiExfSxyfSh0LkV2ZW50ZWQpO2Z1bmN0aW9uIFh0KGUscil7dmFyIG49ci56b29tVG8oZS5jYW5vbmljYWwueik7cmV0dXJuIG5ldyB0LmRlZmF1bHQkMSgobi5jb2x1bW4tKGUuY2Fub25pY2FsLngrZS53cmFwKk1hdGgucG93KDIsZS5jYW5vbmljYWwueikpKSp0LmRlZmF1bHQkOCwobi5yb3ctZS5jYW5vbmljYWwueSkqdC5kZWZhdWx0JDgpfWZ1bmN0aW9uIFp0KHQpe3JldHVyblwicmFzdGVyXCI9PT10fHxcImltYWdlXCI9PT10fHxcInZpZGVvXCI9PT10fWZ1bmN0aW9uICR0KCl7cmV0dXJuIG5ldyB0LmRlZmF1bHQuV29ya2VyKEVuLndvcmtlclVybCl9V3QubWF4T3Zlcnpvb21pbmc9MTAsV3QubWF4VW5kZXJ6b29taW5nPTM7dmFyIEp0LEt0PWZ1bmN0aW9uKCl7dGhpcy5hY3RpdmU9e319O2Z1bmN0aW9uIFF0KGUscil7dmFyIG49e307Zm9yKHZhciBpIGluIGUpXCJyZWZcIiE9PWkmJihuW2ldPWVbaV0pO3JldHVybiB0LmRlZmF1bHQkMTguZm9yRWFjaChmdW5jdGlvbih0KXt0IGluIHImJihuW3RdPXJbdF0pfSksbn1mdW5jdGlvbiB0ZSh0KXt0PXQuc2xpY2UoKTtmb3IodmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKSxyPTA7cjx0Lmxlbmd0aDtyKyspZVt0W3JdLmlkXT10W3JdO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKVwicmVmXCJpbiB0W25dJiYodFtuXT1RdCh0W25dLGVbdFtuXS5yZWZdKSk7cmV0dXJuIHR9S3QucHJvdG90eXBlLmFjcXVpcmU9ZnVuY3Rpb24odCl7aWYoIXRoaXMud29ya2Vycyl7dmFyIGU9RW4ud29ya2VyQ291bnQ7Zm9yKHRoaXMud29ya2Vycz1bXTt0aGlzLndvcmtlcnMubGVuZ3RoPGU7KXRoaXMud29ya2Vycy5wdXNoKG5ldyAkdCl9cmV0dXJuIHRoaXMuYWN0aXZlW3RdPSEwLHRoaXMud29ya2Vycy5zbGljZSgpfSxLdC5wcm90b3R5cGUucmVsZWFzZT1mdW5jdGlvbih0KXtkZWxldGUgdGhpcy5hY3RpdmVbdF0sMD09PU9iamVjdC5rZXlzKHRoaXMuYWN0aXZlKS5sZW5ndGgmJih0aGlzLndvcmtlcnMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnRlcm1pbmF0ZSgpfSksdGhpcy53b3JrZXJzPW51bGwpfTt2YXIgZWU9e3NldFN0eWxlOlwic2V0U3R5bGVcIixhZGRMYXllcjpcImFkZExheWVyXCIscmVtb3ZlTGF5ZXI6XCJyZW1vdmVMYXllclwiLHNldFBhaW50UHJvcGVydHk6XCJzZXRQYWludFByb3BlcnR5XCIsc2V0TGF5b3V0UHJvcGVydHk6XCJzZXRMYXlvdXRQcm9wZXJ0eVwiLHNldEZpbHRlcjpcInNldEZpbHRlclwiLGFkZFNvdXJjZTpcImFkZFNvdXJjZVwiLHJlbW92ZVNvdXJjZTpcInJlbW92ZVNvdXJjZVwiLHNldEdlb0pTT05Tb3VyY2VEYXRhOlwic2V0R2VvSlNPTlNvdXJjZURhdGFcIixzZXRMYXllclpvb21SYW5nZTpcInNldExheWVyWm9vbVJhbmdlXCIsc2V0TGF5ZXJQcm9wZXJ0eTpcInNldExheWVyUHJvcGVydHlcIixzZXRDZW50ZXI6XCJzZXRDZW50ZXJcIixzZXRab29tOlwic2V0Wm9vbVwiLHNldEJlYXJpbmc6XCJzZXRCZWFyaW5nXCIsc2V0UGl0Y2g6XCJzZXRQaXRjaFwiLHNldFNwcml0ZTpcInNldFNwcml0ZVwiLHNldEdseXBoczpcInNldEdseXBoc1wiLHNldFRyYW5zaXRpb246XCJzZXRUcmFuc2l0aW9uXCIsc2V0TGlnaHQ6XCJzZXRMaWdodFwifTtmdW5jdGlvbiByZSh0LGUscil7ci5wdXNoKHtjb21tYW5kOmVlLmFkZFNvdXJjZSxhcmdzOlt0LGVbdF1dfSl9ZnVuY3Rpb24gbmUodCxlLHIpe2UucHVzaCh7Y29tbWFuZDplZS5yZW1vdmVTb3VyY2UsYXJnczpbdF19KSxyW3RdPSEwfWZ1bmN0aW9uIGllKHQsZSxyLG4pe25lKHQscixuKSxyZSh0LGUscil9ZnVuY3Rpb24gYWUoZSxyLG4pe3ZhciBpO2ZvcihpIGluIGVbbl0paWYoZVtuXS5oYXNPd25Qcm9wZXJ0eShpKSYmXCJkYXRhXCIhPT1pJiYhdC5kZWZhdWx0JDEwKGVbbl1baV0scltuXVtpXSkpcmV0dXJuITE7Zm9yKGkgaW4gcltuXSlpZihyW25dLmhhc093blByb3BlcnR5KGkpJiZcImRhdGFcIiE9PWkmJiF0LmRlZmF1bHQkMTAoZVtuXVtpXSxyW25dW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBvZShlLHIsbixpLGEsbyl7dmFyIHM7Zm9yKHMgaW4gcj1yfHx7fSxlPWV8fHt9KWUuaGFzT3duUHJvcGVydHkocykmJih0LmRlZmF1bHQkMTAoZVtzXSxyW3NdKXx8bi5wdXNoKHtjb21tYW5kOm8sYXJnczpbaSxzLHJbc10sYV19KSk7Zm9yKHMgaW4gcilyLmhhc093blByb3BlcnR5KHMpJiYhZS5oYXNPd25Qcm9wZXJ0eShzKSYmKHQuZGVmYXVsdCQxMChlW3NdLHJbc10pfHxuLnB1c2goe2NvbW1hbmQ6byxhcmdzOltpLHMscltzXSxhXX0pKX1mdW5jdGlvbiBzZSh0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBsZSh0LGUpe3JldHVybiB0W2UuaWRdPWUsdH12YXIgY2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuYm94Q2VsbHM9W10saT10aGlzLmNpcmNsZUNlbGxzPVtdO3RoaXMueENlbGxDb3VudD1NYXRoLmNlaWwodC9yKSx0aGlzLnlDZWxsQ291bnQ9TWF0aC5jZWlsKGUvcik7Zm9yKHZhciBhPTA7YTx0aGlzLnhDZWxsQ291bnQqdGhpcy55Q2VsbENvdW50O2ErKyluLnB1c2goW10pLGkucHVzaChbXSk7dGhpcy5jaXJjbGVLZXlzPVtdLHRoaXMuYm94S2V5cz1bXSx0aGlzLmJib3hlcz1bXSx0aGlzLmNpcmNsZXM9W10sdGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy54U2NhbGU9dGhpcy54Q2VsbENvdW50L3QsdGhpcy55U2NhbGU9dGhpcy55Q2VsbENvdW50L2UsdGhpcy5ib3hVaWQ9MCx0aGlzLmNpcmNsZVVpZD0wfTtjZS5wcm90b3R5cGUua2V5c0xlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJveEtleXMubGVuZ3RoK3RoaXMuY2lyY2xlS2V5cy5sZW5ndGh9LGNlLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLl9mb3JFYWNoQ2VsbChlLHIsbixpLHRoaXMuX2luc2VydEJveENlbGwsdGhpcy5ib3hVaWQrKyksdGhpcy5ib3hLZXlzLnB1c2godCksdGhpcy5iYm94ZXMucHVzaChlKSx0aGlzLmJib3hlcy5wdXNoKHIpLHRoaXMuYmJveGVzLnB1c2gobiksdGhpcy5iYm94ZXMucHVzaChpKX0sY2UucHJvdG90eXBlLmluc2VydENpcmNsZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLl9mb3JFYWNoQ2VsbChlLW4sci1uLGUrbixyK24sdGhpcy5faW5zZXJ0Q2lyY2xlQ2VsbCx0aGlzLmNpcmNsZVVpZCsrKSx0aGlzLmNpcmNsZUtleXMucHVzaCh0KSx0aGlzLmNpcmNsZXMucHVzaChlKSx0aGlzLmNpcmNsZXMucHVzaChyKSx0aGlzLmNpcmNsZXMucHVzaChuKX0sY2UucHJvdG90eXBlLl9pbnNlcnRCb3hDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLmJveENlbGxzW2ldLnB1c2goYSl9LGNlLnByb3RvdHlwZS5faW5zZXJ0Q2lyY2xlQ2VsbD1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5jaXJjbGVDZWxsc1tpXS5wdXNoKGEpfSxjZS5wcm90b3R5cGUuX3F1ZXJ5PWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYocjwwfHx0PnRoaXMud2lkdGh8fG48MHx8ZT50aGlzLmhlaWdodClyZXR1cm4haSYmW107dmFyIGE9W107aWYodDw9MCYmZTw9MCYmdGhpcy53aWR0aDw9ciYmdGhpcy5oZWlnaHQ8PW4pe2lmKGkpcmV0dXJuITA7Zm9yKHZhciBvPTA7bzx0aGlzLmJveEtleXMubGVuZ3RoO28rKylhLnB1c2goe2tleTp0aGlzLmJveEtleXNbb10seDE6dGhpcy5iYm94ZXNbNCpvXSx5MTp0aGlzLmJib3hlc1s0Km8rMV0seDI6dGhpcy5iYm94ZXNbNCpvKzJdLHkyOnRoaXMuYmJveGVzWzQqbyszXX0pO2Zvcih2YXIgcz0wO3M8dGhpcy5jaXJjbGVLZXlzLmxlbmd0aDtzKyspe3ZhciBsPXRoaXMuY2lyY2xlc1szKnNdLGM9dGhpcy5jaXJjbGVzWzMqcysxXSx1PXRoaXMuY2lyY2xlc1szKnMrMl07YS5wdXNoKHtrZXk6dGhpcy5jaXJjbGVLZXlzW3NdLHgxOmwtdSx5MTpjLXUseDI6bCt1LHkyOmMrdX0pfX1lbHNle3ZhciBoPXtoaXRUZXN0Omksc2VlblVpZHM6e2JveDp7fSxjaXJjbGU6e319fTt0aGlzLl9mb3JFYWNoQ2VsbCh0LGUscixuLHRoaXMuX3F1ZXJ5Q2VsbCxhLGgpfXJldHVybiBpP2EubGVuZ3RoPjA6YX0sY2UucHJvdG90eXBlLl9xdWVyeUNpcmNsZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10LXIsYT10K3Isbz1lLXIscz1lK3I7aWYoYTwwfHxpPnRoaXMud2lkdGh8fHM8MHx8bz50aGlzLmhlaWdodClyZXR1cm4hbiYmW107dmFyIGw9W10sYz17aGl0VGVzdDpuLGNpcmNsZTp7eDp0LHk6ZSxyYWRpdXM6cn0sc2VlblVpZHM6e2JveDp7fSxjaXJjbGU6e319fTtyZXR1cm4gdGhpcy5fZm9yRWFjaENlbGwoaSxvLGEscyx0aGlzLl9xdWVyeUNlbGxDaXJjbGUsbCxjKSxuP2wubGVuZ3RoPjA6bH0sY2UucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLl9xdWVyeSh0LGUscixuLCExKX0sY2UucHJvdG90eXBlLmhpdFRlc3Q9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRoaXMuX3F1ZXJ5KHQsZSxyLG4sITApfSxjZS5wcm90b3R5cGUuaGl0VGVzdENpcmNsZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3F1ZXJ5Q2lyY2xlKHQsZSxyLCEwKX0sY2UucHJvdG90eXBlLl9xdWVyeUNlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9by5zZWVuVWlkcyxsPXRoaXMuYm94Q2VsbHNbaV07aWYobnVsbCE9PWwpZm9yKHZhciBjPXRoaXMuYmJveGVzLHU9MCxoPWw7dTxoLmxlbmd0aDt1Kz0xKXt2YXIgZj1oW3VdO2lmKCFzLmJveFtmXSl7cy5ib3hbZl09ITA7dmFyIHA9NCpmO2lmKHQ8PWNbcCsyXSYmZTw9Y1twKzNdJiZyPj1jW3ArMF0mJm4+PWNbcCsxXSl7aWYoby5oaXRUZXN0KXJldHVybiBhLnB1c2goITApLCEwO2EucHVzaCh7a2V5OnRoaXMuYm94S2V5c1tmXSx4MTpjW3BdLHkxOmNbcCsxXSx4MjpjW3ArMl0seTI6Y1twKzNdfSl9fX12YXIgZD10aGlzLmNpcmNsZUNlbGxzW2ldO2lmKG51bGwhPT1kKWZvcih2YXIgZz10aGlzLmNpcmNsZXMsdj0wLG09ZDt2PG0ubGVuZ3RoO3YrPTEpe3ZhciB5PW1bdl07aWYoIXMuY2lyY2xlW3ldKXtzLmNpcmNsZVt5XT0hMDt2YXIgeD0zKnk7aWYodGhpcy5fY2lyY2xlQW5kUmVjdENvbGxpZGUoZ1t4XSxnW3grMV0sZ1t4KzJdLHQsZSxyLG4pKXtpZihvLmhpdFRlc3QpcmV0dXJuIGEucHVzaCghMCksITA7dmFyIGI9Z1t4XSxfPWdbeCsxXSx3PWdbeCsyXTthLnB1c2goe2tleTp0aGlzLmNpcmNsZUtleXNbeV0seDE6Yi13LHkxOl8tdyx4MjpiK3cseTI6Xyt3fSl9fX19LGNlLnByb3RvdHlwZS5fcXVlcnlDZWxsQ2lyY2xlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPW8uY2lyY2xlLGw9by5zZWVuVWlkcyxjPXRoaXMuYm94Q2VsbHNbaV07aWYobnVsbCE9PWMpZm9yKHZhciB1PXRoaXMuYmJveGVzLGg9MCxmPWM7aDxmLmxlbmd0aDtoKz0xKXt2YXIgcD1mW2hdO2lmKCFsLmJveFtwXSl7bC5ib3hbcF09ITA7dmFyIGQ9NCpwO2lmKHRoaXMuX2NpcmNsZUFuZFJlY3RDb2xsaWRlKHMueCxzLnkscy5yYWRpdXMsdVtkKzBdLHVbZCsxXSx1W2QrMl0sdVtkKzNdKSlyZXR1cm4gYS5wdXNoKCEwKSwhMH19dmFyIGc9dGhpcy5jaXJjbGVDZWxsc1tpXTtpZihudWxsIT09Zylmb3IodmFyIHY9dGhpcy5jaXJjbGVzLG09MCx5PWc7bTx5Lmxlbmd0aDttKz0xKXt2YXIgeD15W21dO2lmKCFsLmNpcmNsZVt4XSl7bC5jaXJjbGVbeF09ITA7dmFyIGI9Myp4O2lmKHRoaXMuX2NpcmNsZXNDb2xsaWRlKHZbYl0sdltiKzFdLHZbYisyXSxzLngscy55LHMucmFkaXVzKSlyZXR1cm4gYS5wdXNoKCEwKSwhMH19fSxjZS5wcm90b3R5cGUuX2ZvckVhY2hDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcz10aGlzLl9jb252ZXJ0VG9YQ2VsbENvb3JkKHQpLGw9dGhpcy5fY29udmVydFRvWUNlbGxDb29yZChlKSxjPXRoaXMuX2NvbnZlcnRUb1hDZWxsQ29vcmQociksdT10aGlzLl9jb252ZXJ0VG9ZQ2VsbENvb3JkKG4pLGg9cztoPD1jO2grKylmb3IodmFyIGY9bDtmPD11O2YrKyl7dmFyIHA9dGhpcy54Q2VsbENvdW50KmYraDtpZihpLmNhbGwodGhpcyx0LGUscixuLHAsYSxvKSlyZXR1cm59fSxjZS5wcm90b3R5cGUuX2NvbnZlcnRUb1hDZWxsQ29vcmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odGhpcy54Q2VsbENvdW50LTEsTWF0aC5mbG9vcih0KnRoaXMueFNjYWxlKSkpfSxjZS5wcm90b3R5cGUuX2NvbnZlcnRUb1lDZWxsQ29vcmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odGhpcy55Q2VsbENvdW50LTEsTWF0aC5mbG9vcih0KnRoaXMueVNjYWxlKSkpfSxjZS5wcm90b3R5cGUuX2NpcmNsZXNDb2xsaWRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1uLXQscz1pLWUsbD1yK2E7cmV0dXJuIGwqbD5vKm8rcypzfSxjZS5wcm90b3R5cGUuX2NpcmNsZUFuZFJlY3RDb2xsaWRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPShhLW4pLzIsbD1NYXRoLmFicyh0LShuK3MpKTtpZihsPnMrcilyZXR1cm4hMTt2YXIgYz0oby1pKS8yLHU9TWF0aC5hYnMoZS0oaStjKSk7aWYodT5jK3IpcmV0dXJuITE7aWYobDw9c3x8dTw9YylyZXR1cm4hMDt2YXIgaD1sLXMsZj11LWM7cmV0dXJuIGgqaCtmKmY8PXIqcn07dmFyIHVlPXQuZGVmYXVsdCQxOS5sYXlvdXQ7ZnVuY3Rpb24gaGUoZSxyLG4saSxhKXt2YXIgbz10Lm1hdDQuaWRlbnRpdHkobmV3IEZsb2F0MzJBcnJheSgxNikpO3JldHVybiByPyh0Lm1hdDQuaWRlbnRpdHkobyksdC5tYXQ0LnNjYWxlKG8sbyxbMS9hLDEvYSwxXSksbnx8dC5tYXQ0LnJvdGF0ZVoobyxvLGkuYW5nbGUpKToodC5tYXQ0LnNjYWxlKG8sbyxbaS53aWR0aC8yLC1pLmhlaWdodC8yLDFdKSx0Lm1hdDQudHJhbnNsYXRlKG8sbyxbMSwtMSwwXSksdC5tYXQ0Lm11bHRpcGx5KG8sbyxlKSksb31mdW5jdGlvbiBmZShlLHIsbixpLGEpe3ZhciBvPXQubWF0NC5pZGVudGl0eShuZXcgRmxvYXQzMkFycmF5KDE2KSk7cmV0dXJuIHI/KHQubWF0NC5tdWx0aXBseShvLG8sZSksdC5tYXQ0LnNjYWxlKG8sbyxbYSxhLDFdKSxufHx0Lm1hdDQucm90YXRlWihvLG8sLWkuYW5nbGUpKToodC5tYXQ0LnNjYWxlKG8sbyxbMSwtMSwxXSksdC5tYXQ0LnRyYW5zbGF0ZShvLG8sWy0xLC0xLDBdKSx0Lm1hdDQuc2NhbGUobyxvLFsyL2kud2lkdGgsMi9pLmhlaWdodCwxXSkpLG99ZnVuY3Rpb24gcGUoZSxyKXt2YXIgbj1bZS54LGUueSwwLDFdO2tlKG4sbixyKTt2YXIgaT1uWzNdO3JldHVybntwb2ludDpuZXcgdC5kZWZhdWx0JDEoblswXS9pLG5bMV0vaSksc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhOml9fWZ1bmN0aW9uIGRlKHQsZSl7dmFyIHI9dFswXS90WzNdLG49dFsxXS90WzNdO3JldHVybiByPj0tZVswXSYmcjw9ZVswXSYmbj49LWVbMV0mJm48PWVbMV19ZnVuY3Rpb24gZ2UoZSxyLG4saSxhLG8scyxsKXt2YXIgYz1pP2UudGV4dFNpemVEYXRhOmUuaWNvblNpemVEYXRhLHU9dC5ldmFsdWF0ZVNpemVGb3Jab29tKGMsbi50cmFuc2Zvcm0uem9vbSx1ZS5wcm9wZXJ0aWVzW2k/XCJ0ZXh0LXNpemVcIjpcImljb24tc2l6ZVwiXSksaD1bMjU2L24ud2lkdGgqMisxLDI1Ni9uLmhlaWdodCoyKzFdLGY9aT9lLnRleHQuZHluYW1pY0xheW91dFZlcnRleEFycmF5OmUuaWNvbi5keW5hbWljTGF5b3V0VmVydGV4QXJyYXk7Zi5jbGVhcigpO2Zvcih2YXIgcD1lLmxpbmVWZXJ0ZXhBcnJheSxkPWk/ZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5OmUuaWNvbi5wbGFjZWRTeW1ib2xBcnJheSxnPW4udHJhbnNmb3JtLndpZHRoL24udHJhbnNmb3JtLmhlaWdodCx2PSExLG09MDttPGQubGVuZ3RoO20rKyl7dmFyIHk9ZC5nZXQobSk7aWYoeS5oaWRkZW58fHkud3JpdGluZ01vZGU9PT10LldyaXRpbmdNb2RlLnZlcnRpY2FsJiYhdil3ZSh5Lm51bUdseXBocyxmKTtlbHNle3Y9ITE7dmFyIHg9W3kuYW5jaG9yWCx5LmFuY2hvclksMCwxXTtpZih0LnZlYzQudHJhbnNmb3JtTWF0NCh4LHgsciksZGUoeCxoKSl7dmFyIGI9LjUreFszXS9uLnRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlKi41LF89dC5ldmFsdWF0ZVNpemVGb3JGZWF0dXJlKGMsdSx5KSx3PXM/XypiOl8vYixrPW5ldyB0LmRlZmF1bHQkMSh5LmFuY2hvclgseS5hbmNob3JZKSxBPXBlKGssYSkucG9pbnQsVD17fSxNPXllKHksdywhMSxsLHIsYSxvLGUuZ2x5cGhPZmZzZXRBcnJheSxwLGYsQSxrLFQsZyk7dj1NLnVzZVZlcnRpY2FsLChNLm5vdEVub3VnaFJvb218fHZ8fE0ubmVlZHNGbGlwcGluZyYmeWUoeSx3LCEwLGwscixhLG8sZS5nbHlwaE9mZnNldEFycmF5LHAsZixBLGssVCxnKS5ub3RFbm91Z2hSb29tKSYmd2UoeS5udW1HbHlwaHMsZil9ZWxzZSB3ZSh5Lm51bUdseXBocyxmKX19aT9lLnRleHQuZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGYpOmUuaWNvbi5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoZil9ZnVuY3Rpb24gdmUodCxlLHIsbixpLGEsbyxzLGwsYyx1LGgpe3ZhciBmPXMuZ2x5cGhTdGFydEluZGV4K3MubnVtR2x5cGhzLHA9cy5saW5lU3RhcnRJbmRleCxkPXMubGluZVN0YXJ0SW5kZXgrcy5saW5lTGVuZ3RoLGc9ZS5nZXRvZmZzZXRYKHMuZ2x5cGhTdGFydEluZGV4KSx2PWUuZ2V0b2Zmc2V0WChmLTEpLG09YmUodCpnLHIsbixpLGEsbyxzLnNlZ21lbnQscCxkLGwsYyx1LGgpO2lmKCFtKXJldHVybiBudWxsO3ZhciB5PWJlKHQqdixyLG4saSxhLG8scy5zZWdtZW50LHAsZCxsLGMsdSxoKTtyZXR1cm4geT97Zmlyc3Q6bSxsYXN0Onl9Om51bGx9ZnVuY3Rpb24gbWUoZSxyLG4saSl7cmV0dXJuIGU9PT10LldyaXRpbmdNb2RlLmhvcml6b250YWwmJk1hdGguYWJzKG4ueS1yLnkpPk1hdGguYWJzKG4ueC1yLngpKmk/e3VzZVZlcnRpY2FsOiEwfTooZT09PXQuV3JpdGluZ01vZGUudmVydGljYWw/ci55PG4ueTpyLng+bi54KT97bmVlZHNGbGlwcGluZzohMH06bnVsbH1mdW5jdGlvbiB5ZShlLHIsbixpLGEsbyxzLGwsYyx1LGgsZixwLGQpe3ZhciBnLHY9ci8yNCxtPWUubGluZU9mZnNldFgqcix5PWUubGluZU9mZnNldFkqcjtpZihlLm51bUdseXBocz4xKXt2YXIgeD1lLmdseXBoU3RhcnRJbmRleCtlLm51bUdseXBocyxiPWUubGluZVN0YXJ0SW5kZXgsXz1lLmxpbmVTdGFydEluZGV4K2UubGluZUxlbmd0aCx3PXZlKHYsbCxtLHksbixoLGYsZSxjLG8scCwhMSk7aWYoIXcpcmV0dXJue25vdEVub3VnaFJvb206ITB9O3ZhciBrPXBlKHcuZmlyc3QucG9pbnQscykucG9pbnQsQT1wZSh3Lmxhc3QucG9pbnQscykucG9pbnQ7aWYoaSYmIW4pe3ZhciBUPW1lKGUud3JpdGluZ01vZGUsayxBLGQpO2lmKFQpcmV0dXJuIFR9Zz1bdy5maXJzdF07Zm9yKHZhciBNPWUuZ2x5cGhTdGFydEluZGV4KzE7TTx4LTE7TSsrKWcucHVzaChiZSh2KmwuZ2V0b2Zmc2V0WChNKSxtLHksbixoLGYsZS5zZWdtZW50LGIsXyxjLG8scCwhMSkpO2cucHVzaCh3Lmxhc3QpfWVsc2V7aWYoaSYmIW4pe3ZhciBTPXBlKGYsYSkucG9pbnQsRT1lLmxpbmVTdGFydEluZGV4K2Uuc2VnbWVudCsxLEM9bmV3IHQuZGVmYXVsdCQxKGMuZ2V0eChFKSxjLmdldHkoRSkpLEw9cGUoQyxhKSx6PUwuc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhPjA/TC5wb2ludDp4ZShmLEMsUywxLGEpLE89bWUoZS53cml0aW5nTW9kZSxTLHosZCk7aWYoTylyZXR1cm4gT312YXIgST1iZSh2KmwuZ2V0b2Zmc2V0WChlLmdseXBoU3RhcnRJbmRleCksbSx5LG4saCxmLGUuc2VnbWVudCxlLmxpbmVTdGFydEluZGV4LGUubGluZVN0YXJ0SW5kZXgrZS5saW5lTGVuZ3RoLGMsbyxwLCExKTtpZighSSlyZXR1cm57bm90RW5vdWdoUm9vbTohMH07Zz1bSV19Zm9yKHZhciBEPTAsUD1nO0Q8UC5sZW5ndGg7RCs9MSl7dmFyIFI9UFtEXTt0LmFkZER5bmFtaWNBdHRyaWJ1dGVzKHUsUi5wb2ludCxSLmFuZ2xlKX1yZXR1cm57fX1mdW5jdGlvbiB4ZSh0LGUscixuLGkpe3ZhciBhPXBlKHQuYWRkKHQuc3ViKGUpLl91bml0KCkpLGkpLnBvaW50LG89ci5zdWIoYSk7cmV0dXJuIHIuYWRkKG8uX211bHQobi9vLm1hZygpKSl9ZnVuY3Rpb24gYmUoZSxyLG4saSxhLG8scyxsLGMsdSxoLGYscCl7dmFyIGQ9aT9lLXI6ZStyLGc9ZD4wPzE6LTEsdj0wO2kmJihnKj0tMSx2PU1hdGguUEkpLGc8MCYmKHYrPU1hdGguUEkpO2Zvcih2YXIgbT1nPjA/bCtzOmwrcysxLHk9bSx4PWEsYj1hLF89MCx3PTAsaz1NYXRoLmFicyhkKTtfK3c8PWs7KXtpZigobSs9Zyk8bHx8bT49YylyZXR1cm4gbnVsbDtpZihiPXgsdm9pZCAwPT09KHg9ZlttXSkpe3ZhciBBPW5ldyB0LmRlZmF1bHQkMSh1LmdldHgobSksdS5nZXR5KG0pKSxUPXBlKEEsaCk7aWYoVC5zaWduZWREaXN0YW5jZUZyb21DYW1lcmE+MCl4PWZbbV09VC5wb2ludDtlbHNle3ZhciBNPW0tZzt4PXhlKDA9PT1fP286bmV3IHQuZGVmYXVsdCQxKHUuZ2V0eChNKSx1LmdldHkoTSkpLEEsYixrLV8rMSxoKX19Xys9dyx3PWIuZGlzdCh4KX12YXIgUz0oay1fKS93LEU9eC5zdWIoYiksQz1FLm11bHQoUykuX2FkZChiKTtyZXR1cm4gQy5fYWRkKEUuX3VuaXQoKS5fcGVycCgpLl9tdWx0KG4qZykpLHtwb2ludDpDLGFuZ2xlOnYrTWF0aC5hdGFuMih4LnktYi55LHgueC1iLngpLHRpbGVEaXN0YW5jZTpwP3twcmV2VGlsZURpc3RhbmNlOm0tZz09PXk/MDp1LmdldHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yKG0tZyksbGFzdFNlZ21lbnRWaWV3cG9ydERpc3RhbmNlOmstX306bnVsbH19dmFyIF9lPW5ldyBGbG9hdDMyQXJyYXkoWy0xLzAsLTEvMCwwLC0xLzAsLTEvMCwwLC0xLzAsLTEvMCwwLC0xLzAsLTEvMCwwXSk7ZnVuY3Rpb24gd2UodCxlKXtmb3IodmFyIHI9MDtyPHQ7cisrKXt2YXIgbj1lLmxlbmd0aDtlLnJlc2l6ZShuKzQpLGUuZmxvYXQzMi5zZXQoX2UsMypuKX19ZnVuY3Rpb24ga2UodCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdO3JldHVybiB0WzBdPXJbMF0qbityWzRdKmkrclsxMl0sdFsxXT1yWzFdKm4rcls1XSppK3JbMTNdLHRbM109clszXSpuK3JbN10qaStyWzE1XSx0fXQuZGVmYXVsdCQyMC5tYXQ0O3ZhciBBZT1mdW5jdGlvbih0LGUscil7dm9pZCAwPT09ZSYmKGU9bmV3IGNlKHQud2lkdGgrMjAwLHQuaGVpZ2h0KzIwMCwyNSkpLHZvaWQgMD09PXImJihyPW5ldyBjZSh0LndpZHRoKzIwMCx0LmhlaWdodCsyMDAsMjUpKSx0aGlzLnRyYW5zZm9ybT10LHRoaXMuZ3JpZD1lLHRoaXMuaWdub3JlZEdyaWQ9cix0aGlzLnBpdGNoZmFjdG9yPU1hdGguY29zKHQuX3BpdGNoKSp0LmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UsdGhpcy5zY3JlZW5SaWdodEJvdW5kYXJ5PXQud2lkdGgrMTAwLHRoaXMuc2NyZWVuQm90dG9tQm91bmRhcnk9dC5oZWlnaHQrMTAwfTtmdW5jdGlvbiBUZSh0LGUscil7dFtlKzRdPXI/MTowfWZ1bmN0aW9uIE1lKGUscixuKXtyZXR1cm4gcioodC5kZWZhdWx0JDgvKGUudGlsZVNpemUqTWF0aC5wb3coMixuLWUudGlsZUlELm92ZXJzY2FsZWRaKSkpfUFlLnByb3RvdHlwZS5wbGFjZUNvbGxpc2lvbkJveD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLnByb2plY3RBbmRHZXRQZXJzcGVjdGl2ZVJhdGlvKG4sdC5hbmNob3JQb2ludFgsdC5hbmNob3JQb2ludFkpLGE9cippLnBlcnNwZWN0aXZlUmF0aW8sbz10LngxKmEraS5wb2ludC54LHM9dC55MSphK2kucG9pbnQueSxsPXQueDIqYStpLnBvaW50LngsYz10LnkyKmEraS5wb2ludC55O3JldHVybiFlJiZ0aGlzLmdyaWQuaGl0VGVzdChvLHMsbCxjKT97Ym94OltdLG9mZnNjcmVlbjohMX06e2JveDpbbyxzLGwsY10sb2Zmc2NyZWVuOnRoaXMuaXNPZmZzY3JlZW4obyxzLGwsYyl9fSxBZS5wcm90b3R5cGUuYXBwcm94aW1hdGVUaWxlRGlzdGFuY2U9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1pPzE6bi90aGlzLnBpdGNoZmFjdG9yLG89dC5sYXN0U2VnbWVudFZpZXdwb3J0RGlzdGFuY2UqcjtyZXR1cm4gdC5wcmV2VGlsZURpc3RhbmNlK28rKGEtMSkqbypNYXRoLmFicyhNYXRoLnNpbihlKSl9LEFlLnByb3RvdHlwZS5wbGFjZUNvbGxpc2lvbkNpcmNsZXM9ZnVuY3Rpb24oZSxyLG4saSxhLG8scyxsLGMsdSxoLGYscCl7dmFyIGQ9W10sZz10aGlzLnByb2plY3RBbmNob3IodSxvLmFuY2hvclgsby5hbmNob3JZKSx2PWMvMjQsbT1vLmxpbmVPZmZzZXRYKmMseT1vLmxpbmVPZmZzZXRZKmMseD1uZXcgdC5kZWZhdWx0JDEoby5hbmNob3JYLG8uYW5jaG9yWSksYj12ZSh2LGwsbSx5LCExLHBlKHgsaCkucG9pbnQseCxvLHMsaCx7fSwhMCksXz0hMSx3PSEwLGs9Zy5wZXJzcGVjdGl2ZVJhdGlvKmksQT0xLyhpKm4pLFQ9MCxNPTA7YiYmKFQ9dGhpcy5hcHByb3hpbWF0ZVRpbGVEaXN0YW5jZShiLmZpcnN0LnRpbGVEaXN0YW5jZSxiLmZpcnN0LmFuZ2xlLEEsZy5jYW1lcmFEaXN0YW5jZSxwKSxNPXRoaXMuYXBwcm94aW1hdGVUaWxlRGlzdGFuY2UoYi5sYXN0LnRpbGVEaXN0YW5jZSxiLmxhc3QuYW5nbGUsQSxnLmNhbWVyYURpc3RhbmNlLHApKTtmb3IodmFyIFM9MDtTPGUubGVuZ3RoO1MrPTUpe3ZhciBFPWVbU10sQz1lW1MrMV0sTD1lW1MrMl0sej1lW1MrM107aWYoIWJ8fHo8LVR8fHo+TSlUZShlLFMsITEpO2Vsc2V7dmFyIE89dGhpcy5wcm9qZWN0UG9pbnQodSxFLEMpLEk9TCprO2lmKGQubGVuZ3RoPjApe3ZhciBEPU8ueC1kW2QubGVuZ3RoLTRdLFA9Ty55LWRbZC5sZW5ndGgtM107aWYoSSpJKjI+RCpEK1AqUCYmUys4PGUubGVuZ3RoKXt2YXIgUj1lW1MrOF07aWYoUj4tVCYmUjxNKXtUZShlLFMsITEpO2NvbnRpbnVlfX19dmFyIEY9Uy81O2lmKGQucHVzaChPLngsTy55LEksRiksVGUoZSxTLCEwKSx3PXcmJnRoaXMuaXNPZmZzY3JlZW4oTy54LUksTy55LUksTy54K0ksTy55K0kpLCFyJiZ0aGlzLmdyaWQuaGl0VGVzdENpcmNsZShPLngsTy55LEkpKXtpZighZilyZXR1cm57Y2lyY2xlczpbXSxvZmZzY3JlZW46ITF9O189ITB9fX1yZXR1cm57Y2lyY2xlczpfP1tdOmQsb2Zmc2NyZWVuOnd9fSxBZS5wcm90b3R5cGUucXVlcnlSZW5kZXJlZFN5bWJvbHM9ZnVuY3Rpb24oZSl7aWYoMD09PWUubGVuZ3RofHwwPT09dGhpcy5ncmlkLmtleXNMZW5ndGgoKSYmMD09PXRoaXMuaWdub3JlZEdyaWQua2V5c0xlbmd0aCgpKXJldHVybnt9O2Zvcih2YXIgcj1bXSxuPTEvMCxpPTEvMCxhPS0xLzAsbz0tMS8wLHM9MCxsPWU7czxsLmxlbmd0aDtzKz0xKXt2YXIgYz1sW3NdLHU9bmV3IHQuZGVmYXVsdCQxKGMueCsxMDAsYy55KzEwMCk7bj1NYXRoLm1pbihuLHUueCksaT1NYXRoLm1pbihpLHUueSksYT1NYXRoLm1heChhLHUueCksbz1NYXRoLm1heChvLHUueSksci5wdXNoKHUpfWZvcih2YXIgaD17fSxmPXt9LHA9MCxkPXRoaXMuZ3JpZC5xdWVyeShuLGksYSxvKS5jb25jYXQodGhpcy5pZ25vcmVkR3JpZC5xdWVyeShuLGksYSxvKSk7cDxkLmxlbmd0aDtwKz0xKXt2YXIgZz1kW3BdLHY9Zy5rZXk7aWYodm9pZCAwPT09aFt2LmJ1Y2tldEluc3RhbmNlSWRdJiYoaFt2LmJ1Y2tldEluc3RhbmNlSWRdPXt9KSwhaFt2LmJ1Y2tldEluc3RhbmNlSWRdW3YuZmVhdHVyZUluZGV4XSl7dmFyIG09W25ldyB0LmRlZmF1bHQkMShnLngxLGcueTEpLG5ldyB0LmRlZmF1bHQkMShnLngyLGcueTEpLG5ldyB0LmRlZmF1bHQkMShnLngyLGcueTIpLG5ldyB0LmRlZmF1bHQkMShnLngxLGcueTIpXTt0LnBvbHlnb25JbnRlcnNlY3RzUG9seWdvbihyLG0pJiYoaFt2LmJ1Y2tldEluc3RhbmNlSWRdW3YuZmVhdHVyZUluZGV4XT0hMCx2b2lkIDA9PT1mW3YuYnVja2V0SW5zdGFuY2VJZF0mJihmW3YuYnVja2V0SW5zdGFuY2VJZF09W10pLGZbdi5idWNrZXRJbnN0YW5jZUlkXS5wdXNoKHYuZmVhdHVyZUluZGV4KSl9fXJldHVybiBmfSxBZS5wcm90b3R5cGUuaW5zZXJ0Q29sbGlzaW9uQm94PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXtidWNrZXRJbnN0YW5jZUlkOnIsZmVhdHVyZUluZGV4Om59OyhlP3RoaXMuaWdub3JlZEdyaWQ6dGhpcy5ncmlkKS5pbnNlcnQoaSx0WzBdLHRbMV0sdFsyXSx0WzNdKX0sQWUucHJvdG90eXBlLmluc2VydENvbGxpc2lvbkNpcmNsZXM9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPWU/dGhpcy5pZ25vcmVkR3JpZDp0aGlzLmdyaWQsYT17YnVja2V0SW5zdGFuY2VJZDpyLGZlYXR1cmVJbmRleDpufSxvPTA7bzx0Lmxlbmd0aDtvKz00KWkuaW5zZXJ0Q2lyY2xlKGEsdFtvXSx0W28rMV0sdFtvKzJdKX0sQWUucHJvdG90eXBlLnByb2plY3RBbmNob3I9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVtlLHIsMCwxXTtyZXR1cm4ga2UobixuLHQpLHtwZXJzcGVjdGl2ZVJhdGlvOi41K3RoaXMudHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UvblszXSouNSxjYW1lcmFEaXN0YW5jZTpuWzNdfX0sQWUucHJvdG90eXBlLnByb2plY3RQb2ludD1mdW5jdGlvbihlLHIsbil7dmFyIGk9W3IsbiwwLDFdO3JldHVybiBrZShpLGksZSksbmV3IHQuZGVmYXVsdCQxKChpWzBdL2lbM10rMSkvMip0aGlzLnRyYW5zZm9ybS53aWR0aCsxMDAsKC1pWzFdL2lbM10rMSkvMip0aGlzLnRyYW5zZm9ybS5oZWlnaHQrMTAwKX0sQWUucHJvdG90eXBlLnByb2plY3RBbmRHZXRQZXJzcGVjdGl2ZVJhdGlvPWZ1bmN0aW9uKGUscixuKXt2YXIgaT1bcixuLDAsMV07cmV0dXJuIGtlKGksaSxlKSx7cG9pbnQ6bmV3IHQuZGVmYXVsdCQxKChpWzBdL2lbM10rMSkvMip0aGlzLnRyYW5zZm9ybS53aWR0aCsxMDAsKC1pWzFdL2lbM10rMSkvMip0aGlzLnRyYW5zZm9ybS5oZWlnaHQrMTAwKSxwZXJzcGVjdGl2ZVJhdGlvOi41K3RoaXMudHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UvaVszXSouNX19LEFlLnByb3RvdHlwZS5pc09mZnNjcmVlbj1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gcjwxMDB8fHQ+PXRoaXMuc2NyZWVuUmlnaHRCb3VuZGFyeXx8bjwxMDB8fGU+dGhpcy5zY3JlZW5Cb3R0b21Cb3VuZGFyeX07dmFyIFNlPXQuZGVmYXVsdCQxOS5sYXlvdXQsRWU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5vcGFjaXR5PXQ/TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQub3BhY2l0eSsodC5wbGFjZWQ/ZTotZSkpKTpuJiZyPzE6MCx0aGlzLnBsYWNlZD1yfTtFZS5wcm90b3R5cGUuaXNIaWRkZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMub3BhY2l0eSYmIXRoaXMucGxhY2VkfTt2YXIgQ2U9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLnRleHQ9bmV3IEVlKHQ/dC50ZXh0Om51bGwsZSxyLGkpLHRoaXMuaWNvbj1uZXcgRWUodD90Lmljb246bnVsbCxlLG4saSl9O0NlLnByb3RvdHlwZS5pc0hpZGRlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQuaXNIaWRkZW4oKSYmdGhpcy5pY29uLmlzSGlkZGVuKCl9O3ZhciBMZT1mdW5jdGlvbih0LGUscil7dGhpcy50ZXh0PXQsdGhpcy5pY29uPWUsdGhpcy5za2lwRmFkZT1yfSx6ZT1mdW5jdGlvbih0LGUpe3RoaXMudHJhbnNmb3JtPXQuY2xvbmUoKSx0aGlzLmNvbGxpc2lvbkluZGV4PW5ldyBBZSh0aGlzLnRyYW5zZm9ybSksdGhpcy5wbGFjZW1lbnRzPXt9LHRoaXMub3BhY2l0aWVzPXt9LHRoaXMuc3RhbGU9ITEsdGhpcy5mYWRlRHVyYXRpb249ZSx0aGlzLnJldGFpbmVkUXVlcnlEYXRhPXt9fTtmdW5jdGlvbiBPZSh0LGUscil7dC5lbXBsYWNlQmFjayhlPzE6MCxyPzE6MCksdC5lbXBsYWNlQmFjayhlPzE6MCxyPzE6MCksdC5lbXBsYWNlQmFjayhlPzE6MCxyPzE6MCksdC5lbXBsYWNlQmFjayhlPzE6MCxyPzE6MCl9emUucHJvdG90eXBlLnBsYWNlTGF5ZXJUaWxlPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXIuZ2V0QnVja2V0KGUpLG89ci5sYXRlc3RGZWF0dXJlSW5kZXg7aWYoYSYmbyYmZS5pZD09PWEubGF5ZXJJZHNbMF0pe3ZhciBzPXIuY29sbGlzaW9uQm94QXJyYXksbD1hLmxheWVyc1swXS5sYXlvdXQsYz1NYXRoLnBvdygyLHRoaXMudHJhbnNmb3JtLnpvb20tci50aWxlSUQub3ZlcnNjYWxlZFopLHU9ci50aWxlU2l6ZS90LmRlZmF1bHQkOCxoPXRoaXMudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeChyLnRpbGVJRC50b1Vud3JhcHBlZCgpKSxmPWhlKGgsXCJtYXBcIj09PWwuZ2V0KFwidGV4dC1waXRjaC1hbGlnbm1lbnRcIiksXCJtYXBcIj09PWwuZ2V0KFwidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnRcIiksdGhpcy50cmFuc2Zvcm0sTWUociwxLHRoaXMudHJhbnNmb3JtLnpvb20pKSxwPWhlKGgsXCJtYXBcIj09PWwuZ2V0KFwiaWNvbi1waXRjaC1hbGlnbm1lbnRcIiksXCJtYXBcIj09PWwuZ2V0KFwiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnRcIiksdGhpcy50cmFuc2Zvcm0sTWUociwxLHRoaXMudHJhbnNmb3JtLnpvb20pKTt0aGlzLnJldGFpbmVkUXVlcnlEYXRhW2EuYnVja2V0SW5zdGFuY2VJZF09bmV3IGZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5idWNrZXRJbnN0YW5jZUlkPXQsdGhpcy5mZWF0dXJlSW5kZXg9ZSx0aGlzLnNvdXJjZUxheWVySW5kZXg9cix0aGlzLmJ1Y2tldEluZGV4PW4sdGhpcy50aWxlSUQ9aX0oYS5idWNrZXRJbnN0YW5jZUlkLG8sYS5zb3VyY2VMYXllckluZGV4LGEuaW5kZXgsci50aWxlSUQpLHRoaXMucGxhY2VMYXllckJ1Y2tldChhLGgsZixwLGMsdSxuLGkscyl9fSx6ZS5wcm90b3R5cGUucGxhY2VMYXllckJ1Y2tldD1mdW5jdGlvbihlLHIsbixpLGEsbyxzLGwsYyl7Zm9yKHZhciB1PWUubGF5ZXJzWzBdLmxheW91dCxoPXQuZXZhbHVhdGVTaXplRm9yWm9vbShlLnRleHRTaXplRGF0YSx0aGlzLnRyYW5zZm9ybS56b29tLFNlLnByb3BlcnRpZXNbXCJ0ZXh0LXNpemVcIl0pLGY9IWUuaGFzVGV4dERhdGEoKXx8dS5nZXQoXCJ0ZXh0LW9wdGlvbmFsXCIpLHA9IWUuaGFzSWNvbkRhdGEoKXx8dS5nZXQoXCJpY29uLW9wdGlvbmFsXCIpLGQ9MCxnPWUuc3ltYm9sSW5zdGFuY2VzO2Q8Zy5sZW5ndGg7ZCs9MSl7dmFyIHY9Z1tkXTtpZighbFt2LmNyb3NzVGlsZUlEXSl7dmFyIG09dm9pZCAwIT09di5mZWF0dXJlLnRleHQseT12b2lkIDAhPT12LmZlYXR1cmUuaWNvbix4PSEwLGI9bnVsbCxfPW51bGwsdz1udWxsLGs9MCxBPTA7di5jb2xsaXNpb25BcnJheXN8fCh2LmNvbGxpc2lvbkFycmF5cz1lLmRlc2VyaWFsaXplQ29sbGlzaW9uQm94ZXMoYyx2LnRleHRCb3hTdGFydEluZGV4LHYudGV4dEJveEVuZEluZGV4LHYuaWNvbkJveFN0YXJ0SW5kZXgsdi5pY29uQm94RW5kSW5kZXgpKSx2LmNvbGxpc2lvbkFycmF5cy50ZXh0RmVhdHVyZUluZGV4JiYoaz12LmNvbGxpc2lvbkFycmF5cy50ZXh0RmVhdHVyZUluZGV4KSx2LmNvbGxpc2lvbkFycmF5cy50ZXh0Qm94JiYobT0oYj10aGlzLmNvbGxpc2lvbkluZGV4LnBsYWNlQ29sbGlzaW9uQm94KHYuY29sbGlzaW9uQXJyYXlzLnRleHRCb3gsdS5nZXQoXCJ0ZXh0LWFsbG93LW92ZXJsYXBcIiksbyxyKSkuYm94Lmxlbmd0aD4wLHg9eCYmYi5vZmZzY3JlZW4pO3ZhciBUPXYuY29sbGlzaW9uQXJyYXlzLnRleHRDaXJjbGVzO2lmKFQpe3ZhciBNPWUudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQodi5wbGFjZWRUZXh0U3ltYm9sSW5kaWNlc1swXSksUz10LmV2YWx1YXRlU2l6ZUZvckZlYXR1cmUoZS50ZXh0U2l6ZURhdGEsaCxNKTtfPXRoaXMuY29sbGlzaW9uSW5kZXgucGxhY2VDb2xsaXNpb25DaXJjbGVzKFQsdS5nZXQoXCJ0ZXh0LWFsbG93LW92ZXJsYXBcIiksYSxvLHYua2V5LE0sZS5saW5lVmVydGV4QXJyYXksZS5nbHlwaE9mZnNldEFycmF5LFMscixuLHMsXCJtYXBcIj09PXUuZ2V0KFwidGV4dC1waXRjaC1hbGlnbm1lbnRcIikpLG09dS5nZXQoXCJ0ZXh0LWFsbG93LW92ZXJsYXBcIil8fF8uY2lyY2xlcy5sZW5ndGg+MCx4PXgmJl8ub2Zmc2NyZWVufXYuY29sbGlzaW9uQXJyYXlzLmljb25GZWF0dXJlSW5kZXgmJihBPXYuY29sbGlzaW9uQXJyYXlzLmljb25GZWF0dXJlSW5kZXgpLHYuY29sbGlzaW9uQXJyYXlzLmljb25Cb3gmJih5PSh3PXRoaXMuY29sbGlzaW9uSW5kZXgucGxhY2VDb2xsaXNpb25Cb3godi5jb2xsaXNpb25BcnJheXMuaWNvbkJveCx1LmdldChcImljb24tYWxsb3ctb3ZlcmxhcFwiKSxvLHIpKS5ib3gubGVuZ3RoPjAseD14JiZ3Lm9mZnNjcmVlbiksZnx8cD9wP2Z8fCh5PXkmJm0pOm09eSYmbTp5PW09eSYmbSxtJiZiJiZ0aGlzLmNvbGxpc2lvbkluZGV4Lmluc2VydENvbGxpc2lvbkJveChiLmJveCx1LmdldChcInRleHQtaWdub3JlLXBsYWNlbWVudFwiKSxlLmJ1Y2tldEluc3RhbmNlSWQsaykseSYmdyYmdGhpcy5jb2xsaXNpb25JbmRleC5pbnNlcnRDb2xsaXNpb25Cb3gody5ib3gsdS5nZXQoXCJpY29uLWlnbm9yZS1wbGFjZW1lbnRcIiksZS5idWNrZXRJbnN0YW5jZUlkLEEpLG0mJl8mJnRoaXMuY29sbGlzaW9uSW5kZXguaW5zZXJ0Q29sbGlzaW9uQ2lyY2xlcyhfLmNpcmNsZXMsdS5nZXQoXCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnRcIiksZS5idWNrZXRJbnN0YW5jZUlkLGspLHRoaXMucGxhY2VtZW50c1t2LmNyb3NzVGlsZUlEXT1uZXcgTGUobSx5LHh8fGUuanVzdFJlbG9hZGVkKSxsW3YuY3Jvc3NUaWxlSURdPSEwfX1lLmp1c3RSZWxvYWRlZD0hMX0semUucHJvdG90eXBlLmNvbW1pdD1mdW5jdGlvbih0LGUpe3RoaXMuY29tbWl0VGltZT1lO3ZhciByPSExLG49dCYmMCE9PXRoaXMuZmFkZUR1cmF0aW9uPyh0aGlzLmNvbW1pdFRpbWUtdC5jb21taXRUaW1lKS90aGlzLmZhZGVEdXJhdGlvbjoxLGk9dD90Lm9wYWNpdGllczp7fTtmb3IodmFyIGEgaW4gdGhpcy5wbGFjZW1lbnRzKXt2YXIgbz10aGlzLnBsYWNlbWVudHNbYV0scz1pW2FdO3M/KHRoaXMub3BhY2l0aWVzW2FdPW5ldyBDZShzLG4sby50ZXh0LG8uaWNvbikscj1yfHxvLnRleHQhPT1zLnRleHQucGxhY2VkfHxvLmljb24hPT1zLmljb24ucGxhY2VkKToodGhpcy5vcGFjaXRpZXNbYV09bmV3IENlKG51bGwsbixvLnRleHQsby5pY29uLG8uc2tpcEZhZGUpLHI9cnx8by50ZXh0fHxvLmljb24pfWZvcih2YXIgbCBpbiBpKXt2YXIgYz1pW2xdO2lmKCF0aGlzLm9wYWNpdGllc1tsXSl7dmFyIHU9bmV3IENlKGMsbiwhMSwhMSk7dS5pc0hpZGRlbigpfHwodGhpcy5vcGFjaXRpZXNbbF09dSxyPXJ8fGMudGV4dC5wbGFjZWR8fGMuaWNvbi5wbGFjZWQpfX1yP3RoaXMubGFzdFBsYWNlbWVudENoYW5nZVRpbWU9ZTpcIm51bWJlclwiIT10eXBlb2YgdGhpcy5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZSYmKHRoaXMubGFzdFBsYWNlbWVudENoYW5nZVRpbWU9dD90Lmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lOmUpfSx6ZS5wcm90b3R5cGUudXBkYXRlTGF5ZXJPcGFjaXRpZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9e30sbj0wLGk9ZTtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl0sbz1hLmdldEJ1Y2tldCh0KTtvJiZhLmxhdGVzdEZlYXR1cmVJbmRleCYmdC5pZD09PW8ubGF5ZXJJZHNbMF0mJnRoaXMudXBkYXRlQnVja2V0T3BhY2l0aWVzKG8scixhLmNvbGxpc2lvbkJveEFycmF5KX19LHplLnByb3RvdHlwZS51cGRhdGVCdWNrZXRPcGFjaXRpZXM9ZnVuY3Rpb24odCxlLHIpe3QuaGFzVGV4dERhdGEoKSYmdC50ZXh0Lm9wYWNpdHlWZXJ0ZXhBcnJheS5jbGVhcigpLHQuaGFzSWNvbkRhdGEoKSYmdC5pY29uLm9wYWNpdHlWZXJ0ZXhBcnJheS5jbGVhcigpLHQuaGFzQ29sbGlzaW9uQm94RGF0YSgpJiZ0LmNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheS5jbGVhcigpLHQuaGFzQ29sbGlzaW9uQ2lyY2xlRGF0YSgpJiZ0LmNvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhBcnJheS5jbGVhcigpO2Zvcih2YXIgbj10LmxheWVyc1swXS5sYXlvdXQsaT1uZXcgQ2UobnVsbCwwLCExLCExLCEwKSxhPW5ldyBDZShudWxsLDAsbi5nZXQoXCJ0ZXh0LWFsbG93LW92ZXJsYXBcIiksbi5nZXQoXCJpY29uLWFsbG93LW92ZXJsYXBcIiksITApLG89MDtvPHQuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDtvKyspe3ZhciBzPXQuc3ltYm9sSW5zdGFuY2VzW29dLGw9ZVtzLmNyb3NzVGlsZUlEXSxjPXRoaXMub3BhY2l0aWVzW3MuY3Jvc3NUaWxlSURdO2w/Yz1pOmN8fChjPWEsdGhpcy5vcGFjaXRpZXNbcy5jcm9zc1RpbGVJRF09YyksZVtzLmNyb3NzVGlsZUlEXT0hMDt2YXIgdT1zLm51bUdseXBoVmVydGljZXM+MHx8cy5udW1WZXJ0aWNhbEdseXBoVmVydGljZXM+MCxoPXMubnVtSWNvblZlcnRpY2VzPjA7aWYodSl7Zm9yKHZhciBmPWplKGMudGV4dCkscD0ocy5udW1HbHlwaFZlcnRpY2VzK3MubnVtVmVydGljYWxHbHlwaFZlcnRpY2VzKS80LGQ9MDtkPHA7ZCsrKXQudGV4dC5vcGFjaXR5VmVydGV4QXJyYXkuZW1wbGFjZUJhY2soZik7Zm9yKHZhciBnPTAsdj1zLnBsYWNlZFRleHRTeW1ib2xJbmRpY2VzO2c8di5sZW5ndGg7Zys9MSl7dmFyIG09dltnXTt0LnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KG0pLmhpZGRlbj1jLnRleHQuaXNIaWRkZW4oKX19aWYoaCl7Zm9yKHZhciB5PWplKGMuaWNvbikseD0wO3g8cy5udW1JY29uVmVydGljZXMvNDt4KyspdC5pY29uLm9wYWNpdHlWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayh5KTt0Lmljb24ucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KG8pLmhpZGRlbj1jLmljb24uaXNIaWRkZW4oKX1zLmNvbGxpc2lvbkFycmF5c3x8KHMuY29sbGlzaW9uQXJyYXlzPXQuZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlcyhyLHMudGV4dEJveFN0YXJ0SW5kZXgscy50ZXh0Qm94RW5kSW5kZXgscy5pY29uQm94U3RhcnRJbmRleCxzLmljb25Cb3hFbmRJbmRleCkpO3ZhciBiPXMuY29sbGlzaW9uQXJyYXlzO2lmKGIpe2IudGV4dEJveCYmdC5oYXNDb2xsaXNpb25Cb3hEYXRhKCkmJk9lKHQuY29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LGMudGV4dC5wbGFjZWQsITEpLGIuaWNvbkJveCYmdC5oYXNDb2xsaXNpb25Cb3hEYXRhKCkmJk9lKHQuY29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LGMuaWNvbi5wbGFjZWQsITEpO3ZhciBfPWIudGV4dENpcmNsZXM7aWYoXyYmdC5oYXNDb2xsaXNpb25DaXJjbGVEYXRhKCkpZm9yKHZhciB3PTA7dzxfLmxlbmd0aDt3Kz01KXt2YXIgaz1sfHwwPT09X1t3KzRdO09lKHQuY29sbGlzaW9uQ2lyY2xlLmNvbGxpc2lvblZlcnRleEFycmF5LGMudGV4dC5wbGFjZWQsayl9fX10LnNvcnRGZWF0dXJlcyh0aGlzLnRyYW5zZm9ybS5hbmdsZSksdGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YVt0LmJ1Y2tldEluc3RhbmNlSWRdJiYodGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YVt0LmJ1Y2tldEluc3RhbmNlSWRdLmZlYXR1cmVTb3J0T3JkZXI9dC5mZWF0dXJlU29ydE9yZGVyKSx0Lmhhc1RleHREYXRhKCkmJnQudGV4dC5vcGFjaXR5VmVydGV4QnVmZmVyJiZ0LnRleHQub3BhY2l0eVZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKHQudGV4dC5vcGFjaXR5VmVydGV4QXJyYXkpLHQuaGFzSWNvbkRhdGEoKSYmdC5pY29uLm9wYWNpdHlWZXJ0ZXhCdWZmZXImJnQuaWNvbi5vcGFjaXR5VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEodC5pY29uLm9wYWNpdHlWZXJ0ZXhBcnJheSksdC5oYXNDb2xsaXNpb25Cb3hEYXRhKCkmJnQuY29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEJ1ZmZlciYmdC5jb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QnVmZmVyLnVwZGF0ZURhdGEodC5jb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXkpLHQuaGFzQ29sbGlzaW9uQ2lyY2xlRGF0YSgpJiZ0LmNvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhCdWZmZXImJnQuY29sbGlzaW9uQ2lyY2xlLmNvbGxpc2lvblZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKHQuY29sbGlzaW9uQ2lyY2xlLmNvbGxpc2lvblZlcnRleEFycmF5KX0semUucHJvdG90eXBlLnN5bWJvbEZhZGVDaGFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmZhZGVEdXJhdGlvbj8xOih0LXRoaXMuY29tbWl0VGltZSkvdGhpcy5mYWRlRHVyYXRpb259LHplLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdGFsZXx8dC10aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lPHRoaXMuZmFkZUR1cmF0aW9ufSx6ZS5wcm90b3R5cGUuc3RpbGxSZWNlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9PXRoaXMuY29tbWl0VGltZSYmdGhpcy5jb21taXRUaW1lK3RoaXMuZmFkZUR1cmF0aW9uPnR9LHplLnByb3RvdHlwZS5zZXRTdGFsZT1mdW5jdGlvbigpe3RoaXMuc3RhbGU9ITB9O3ZhciBJZT1NYXRoLnBvdygyLDI1KSxEZT1NYXRoLnBvdygyLDI0KSxQZT1NYXRoLnBvdygyLDE3KSxSZT1NYXRoLnBvdygyLDE2KSxGZT1NYXRoLnBvdygyLDkpLEJlPU1hdGgucG93KDIsOCksTmU9TWF0aC5wb3coMiwxKTtmdW5jdGlvbiBqZSh0KXtpZigwPT09dC5vcGFjaXR5JiYhdC5wbGFjZWQpcmV0dXJuIDA7aWYoMT09PXQub3BhY2l0eSYmdC5wbGFjZWQpcmV0dXJuIDQyOTQ5NjcyOTU7dmFyIGU9dC5wbGFjZWQ/MTowLHI9TWF0aC5mbG9vcigxMjcqdC5vcGFjaXR5KTtyZXR1cm4gcipJZStlKkRlK3IqUGUrZSpSZStyKkZlK2UqQmUrcipOZStlfXZhciBWZT1mdW5jdGlvbigpe3RoaXMuX2N1cnJlbnRUaWxlSW5kZXg9MCx0aGlzLl9zZWVuQ3Jvc3NUaWxlSURzPXt9fTtWZS5wcm90b3R5cGUuY29udGludWVQbGFjZW1lbnQ9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IoO3RoaXMuX2N1cnJlbnRUaWxlSW5kZXg8dC5sZW5ndGg7KXt2YXIgYT10W3RoaXMuX2N1cnJlbnRUaWxlSW5kZXhdO2lmKGUucGxhY2VMYXllclRpbGUobixhLHIsdGhpcy5fc2VlbkNyb3NzVGlsZUlEcyksdGhpcy5fY3VycmVudFRpbGVJbmRleCsrLGkoKSlyZXR1cm4hMH19O3ZhciBVZT1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMucGxhY2VtZW50PW5ldyB6ZSh0LGkpLHRoaXMuX2N1cnJlbnRQbGFjZW1lbnRJbmRleD1lLmxlbmd0aC0xLHRoaXMuX2ZvcmNlRnVsbFBsYWNlbWVudD1yLHRoaXMuX3Nob3dDb2xsaXNpb25Cb3hlcz1uLHRoaXMuX2RvbmU9ITF9O1VlLnByb3RvdHlwZS5pc0RvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZG9uZX0sVWUucHJvdG90eXBlLmNvbnRpbnVlUGxhY2VtZW50PWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dGhpcyxpPWEubm93KCksbz1mdW5jdGlvbigpe3ZhciB0PWEubm93KCktaTtyZXR1cm4hbi5fZm9yY2VGdWxsUGxhY2VtZW50JiZ0PjJ9O3RoaXMuX2N1cnJlbnRQbGFjZW1lbnRJbmRleD49MDspe3ZhciBzPWVbdFtuLl9jdXJyZW50UGxhY2VtZW50SW5kZXhdXSxsPW4ucGxhY2VtZW50LmNvbGxpc2lvbkluZGV4LnRyYW5zZm9ybS56b29tO2lmKFwic3ltYm9sXCI9PT1zLnR5cGUmJighcy5taW56b29tfHxzLm1pbnpvb208PWwpJiYoIXMubWF4em9vbXx8cy5tYXh6b29tPmwpKXtpZihuLl9pblByb2dyZXNzTGF5ZXJ8fChuLl9pblByb2dyZXNzTGF5ZXI9bmV3IFZlKSxuLl9pblByb2dyZXNzTGF5ZXIuY29udGludWVQbGFjZW1lbnQocltzLnNvdXJjZV0sbi5wbGFjZW1lbnQsbi5fc2hvd0NvbGxpc2lvbkJveGVzLHMsbykpcmV0dXJuO2RlbGV0ZSBuLl9pblByb2dyZXNzTGF5ZXJ9bi5fY3VycmVudFBsYWNlbWVudEluZGV4LS19dGhpcy5fZG9uZT0hMH0sVWUucHJvdG90eXBlLmNvbW1pdD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnBsYWNlbWVudC5jb21taXQodCxlKSx0aGlzLnBsYWNlbWVudH07dmFyIHFlPTUxMi90LmRlZmF1bHQkOC8yLEhlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRpbGVJRD10LHRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlcz17fSx0aGlzLmJ1Y2tldEluc3RhbmNlSWQ9cjtmb3IodmFyIG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dLG89YS5rZXk7dGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW29dfHwodGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW29dPVtdKSx0aGlzLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNbb10ucHVzaCh7Y3Jvc3NUaWxlSUQ6YS5jcm9zc1RpbGVJRCxjb29yZDp0aGlzLmdldFNjYWxlZENvb3JkaW5hdGVzKGEsdCl9KX19O0hlLnByb3RvdHlwZS5nZXRTY2FsZWRDb29yZGluYXRlcz1mdW5jdGlvbihlLHIpe3ZhciBuPXIuY2Fub25pY2FsLnotdGhpcy50aWxlSUQuY2Fub25pY2FsLnosaT1xZS9NYXRoLnBvdygyLG4pLGE9ZS5hbmNob3I7cmV0dXJue3g6TWF0aC5mbG9vcigoci5jYW5vbmljYWwueCp0LmRlZmF1bHQkOCthLngpKmkpLHk6TWF0aC5mbG9vcigoci5jYW5vbmljYWwueSp0LmRlZmF1bHQkOCthLnkpKmkpfX0sSGUucHJvdG90eXBlLmZpbmRNYXRjaGVzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dGhpcy50aWxlSUQuY2Fub25pY2FsLno8ZS5jYW5vbmljYWwuej8xOk1hdGgucG93KDIsdGhpcy50aWxlSUQuY2Fub25pY2FsLnotZS5jYW5vbmljYWwueiksaT0wLGE9dDtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07aWYoIW8uY3Jvc3NUaWxlSUQpe3ZhciBzPXRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1tvLmtleV07aWYocylmb3IodmFyIGw9dGhpcy5nZXRTY2FsZWRDb29yZGluYXRlcyhvLGUpLGM9MCx1PXM7Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgaD11W2NdO2lmKE1hdGguYWJzKGguY29vcmQueC1sLngpPD1uJiZNYXRoLmFicyhoLmNvb3JkLnktbC55KTw9biYmIXJbaC5jcm9zc1RpbGVJRF0pe3JbaC5jcm9zc1RpbGVJRF09ITAsby5jcm9zc1RpbGVJRD1oLmNyb3NzVGlsZUlEO2JyZWFrfX19fX07dmFyIEdlPWZ1bmN0aW9uKCl7dGhpcy5tYXhDcm9zc1RpbGVJRD0wfTtHZS5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24oKXtyZXR1cm4rK3RoaXMubWF4Q3Jvc3NUaWxlSUR9O3ZhciBZZT1mdW5jdGlvbigpe3RoaXMuaW5kZXhlcz17fSx0aGlzLnVzZWRDcm9zc1RpbGVJRHM9e30sdGhpcy5sbmc9MH07WWUucHJvdG90eXBlLmhhbmRsZVdyYXBKdW1wPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgucm91bmQoKHQtdGhpcy5sbmcpLzM2MCk7aWYoMCE9PWUpZm9yKHZhciByIGluIHRoaXMuaW5kZXhlcyl7dmFyIG49dGhpcy5pbmRleGVzW3JdLGk9e307Zm9yKHZhciBhIGluIG4pe3ZhciBvPW5bYV07by50aWxlSUQ9by50aWxlSUQudW53cmFwVG8oby50aWxlSUQud3JhcCtlKSxpW28udGlsZUlELmtleV09b310aGlzLmluZGV4ZXNbcl09aX10aGlzLmxuZz10fSxZZS5wcm90b3R5cGUuYWRkQnVja2V0PWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl0mJnRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV0pe2lmKHRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV0uYnVja2V0SW5zdGFuY2VJZD09PWUuYnVja2V0SW5zdGFuY2VJZClyZXR1cm4hMTt0aGlzLnJlbW92ZUJ1Y2tldENyb3NzVGlsZUlEcyh0Lm92ZXJzY2FsZWRaLHRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV0pfWZvcih2YXIgbj0wLGk9ZS5zeW1ib2xJbnN0YW5jZXM7bjxpLmxlbmd0aDtuKz0xKWlbbl0uY3Jvc3NUaWxlSUQ9MDt0aGlzLnVzZWRDcm9zc1RpbGVJRHNbdC5vdmVyc2NhbGVkWl18fCh0aGlzLnVzZWRDcm9zc1RpbGVJRHNbdC5vdmVyc2NhbGVkWl09e30pO3ZhciBhPXRoaXMudXNlZENyb3NzVGlsZUlEc1t0Lm92ZXJzY2FsZWRaXTtmb3IodmFyIG8gaW4gdGhpcy5pbmRleGVzKXt2YXIgcz10aGlzLmluZGV4ZXNbb107aWYoTnVtYmVyKG8pPnQub3ZlcnNjYWxlZFopZm9yKHZhciBsIGluIHMpe3ZhciBjPXNbbF07Yy50aWxlSUQuaXNDaGlsZE9mKHQpJiZjLmZpbmRNYXRjaGVzKGUuc3ltYm9sSW5zdGFuY2VzLHQsYSl9ZWxzZXt2YXIgdT1zW3Quc2NhbGVkVG8oTnVtYmVyKG8pKS5rZXldO3UmJnUuZmluZE1hdGNoZXMoZS5zeW1ib2xJbnN0YW5jZXMsdCxhKX19Zm9yKHZhciBoPTAsZj1lLnN5bWJvbEluc3RhbmNlcztoPGYubGVuZ3RoO2grPTEpe3ZhciBwPWZbaF07cC5jcm9zc1RpbGVJRHx8KHAuY3Jvc3NUaWxlSUQ9ci5nZW5lcmF0ZSgpLGFbcC5jcm9zc1RpbGVJRF09ITApfXJldHVybiB2b2lkIDA9PT10aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl0mJih0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl09e30pLHRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV09bmV3IEhlKHQsZS5zeW1ib2xJbnN0YW5jZXMsZS5idWNrZXRJbnN0YW5jZUlkKSwhMH0sWWUucHJvdG90eXBlLnJlbW92ZUJ1Y2tldENyb3NzVGlsZUlEcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiBlLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXMpZm9yKHZhciBuPTAsaT1lLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNbcl07bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO2RlbGV0ZSB0aGlzLnVzZWRDcm9zc1RpbGVJRHNbdF1bYS5jcm9zc1RpbGVJRF19fSxZZS5wcm90b3R5cGUucmVtb3ZlU3RhbGVCdWNrZXRzPWZ1bmN0aW9uKHQpe3ZhciBlPSExO2Zvcih2YXIgciBpbiB0aGlzLmluZGV4ZXMpe3ZhciBuPXRoaXMuaW5kZXhlc1tyXTtmb3IodmFyIGkgaW4gbil0W25baV0uYnVja2V0SW5zdGFuY2VJZF18fCh0aGlzLnJlbW92ZUJ1Y2tldENyb3NzVGlsZUlEcyhyLG5baV0pLGRlbGV0ZSBuW2ldLGU9ITApfXJldHVybiBlfTt2YXIgV2U9ZnVuY3Rpb24oKXt0aGlzLmxheWVySW5kZXhlcz17fSx0aGlzLmNyb3NzVGlsZUlEcz1uZXcgR2UsdGhpcy5tYXhCdWNrZXRJbnN0YW5jZUlkPTAsdGhpcy5idWNrZXRzSW5DdXJyZW50UGxhY2VtZW50PXt9fTtXZS5wcm90b3R5cGUuYWRkTGF5ZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGF5ZXJJbmRleGVzW3QuaWRdO3ZvaWQgMD09PW4mJihuPXRoaXMubGF5ZXJJbmRleGVzW3QuaWRdPW5ldyBZZSk7dmFyIGk9ITEsYT17fTtuLmhhbmRsZVdyYXBKdW1wKHIpO2Zvcih2YXIgbz0wLHM9ZTtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb10sYz1sLmdldEJ1Y2tldCh0KTtjJiZ0LmlkPT09Yy5sYXllcklkc1swXSYmKGMuYnVja2V0SW5zdGFuY2VJZHx8KGMuYnVja2V0SW5zdGFuY2VJZD0rK3RoaXMubWF4QnVja2V0SW5zdGFuY2VJZCksbi5hZGRCdWNrZXQobC50aWxlSUQsYyx0aGlzLmNyb3NzVGlsZUlEcykmJihpPSEwKSxhW2MuYnVja2V0SW5zdGFuY2VJZF09ITApfXJldHVybiBuLnJlbW92ZVN0YWxlQnVja2V0cyhhKSYmKGk9ITApLGl9LFdlLnByb3RvdHlwZS5wcnVuZVVudXNlZExheWVycz1mdW5jdGlvbih0KXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF09ITB9KSx0aGlzLmxheWVySW5kZXhlcyllW3JdfHxkZWxldGUgdGhpcy5sYXllckluZGV4ZXNbcl19O3ZhciBYZT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmVtaXRWYWxpZGF0aW9uRXJyb3JzKGUsciYmci5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuXCJzb3VyY2UuY2FudmFzXCIhPT10LmlkZW50aWZpZXJ9KSl9LFplPXQucGljayhlZSxbXCJhZGRMYXllclwiLFwicmVtb3ZlTGF5ZXJcIixcInNldFBhaW50UHJvcGVydHlcIixcInNldExheW91dFByb3BlcnR5XCIsXCJzZXRGaWx0ZXJcIixcImFkZFNvdXJjZVwiLFwicmVtb3ZlU291cmNlXCIsXCJzZXRMYXllclpvb21SYW5nZVwiLFwic2V0TGlnaHRcIixcInNldFRyYW5zaXRpb25cIixcInNldEdlb0pTT05Tb3VyY2VEYXRhXCJdKSwkZT10LnBpY2soZWUsW1wic2V0Q2VudGVyXCIsXCJzZXRab29tXCIsXCJzZXRCZWFyaW5nXCIsXCJzZXRQaXRjaFwiXSksSmU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihuLGkpe3ZhciBhPXRoaXM7dm9pZCAwPT09aSYmKGk9e30pLGUuY2FsbCh0aGlzKSx0aGlzLm1hcD1uLHRoaXMuZGlzcGF0Y2hlcj1uZXcgcSgoSnR8fChKdD1uZXcgS3QpLEp0KSx0aGlzKSx0aGlzLmltYWdlTWFuYWdlcj1uZXcgTyx0aGlzLmdseXBoTWFuYWdlcj1uZXcgQihuLl90cmFuc2Zvcm1SZXF1ZXN0LGkubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5KSx0aGlzLmxpbmVBdGxhcz1uZXcgVSgyNTYsNTEyKSx0aGlzLmNyb3NzVGlsZVN5bWJvbEluZGV4PW5ldyBXZSx0aGlzLl9sYXllcnM9e30sdGhpcy5fb3JkZXI9W10sdGhpcy5zb3VyY2VDYWNoZXM9e30sdGhpcy56b29tSGlzdG9yeT1uZXcgdC5kZWZhdWx0JDIzLHRoaXMuX2xvYWRlZD0hMSx0aGlzLl9yZXNldFVwZGF0ZXMoKTt2YXIgbz10aGlzO3RoaXMuX3J0bFRleHRQbHVnaW5DYWxsYmFjaz1yLnJlZ2lzdGVyRm9yUGx1Z2luQXZhaWxhYmlsaXR5KGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiBvLmRpc3BhdGNoZXIuYnJvYWRjYXN0KFwibG9hZFJUTFRleHRQbHVnaW5cIix0LnBsdWdpblVSTCx0LmNvbXBsZXRpb25DYWxsYmFjayksby5zb3VyY2VDYWNoZXMpby5zb3VyY2VDYWNoZXNbZV0ucmVsb2FkKCl9KSx0aGlzLm9uKFwiZGF0YVwiLGZ1bmN0aW9uKHQpe2lmKFwic291cmNlXCI9PT10LmRhdGFUeXBlJiZcIm1ldGFkYXRhXCI9PT10LnNvdXJjZURhdGFUeXBlKXt2YXIgZT1hLnNvdXJjZUNhY2hlc1t0LnNvdXJjZUlkXTtpZihlKXt2YXIgcj1lLmdldFNvdXJjZSgpO2lmKHImJnIudmVjdG9yTGF5ZXJJZHMpZm9yKHZhciBuIGluIGEuX2xheWVycyl7dmFyIGk9YS5fbGF5ZXJzW25dO2kuc291cmNlPT09ci5pZCYmYS5fdmFsaWRhdGVMYXllcihpKX19fX0pfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkVVJMPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpczt2b2lkIDA9PT1yJiYocj17fSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YWxvYWRpbmdcIix7ZGF0YVR5cGU6XCJzdHlsZVwifSkpO3ZhciBpPVwiYm9vbGVhblwiPT10eXBlb2Ygci52YWxpZGF0ZT9yLnZhbGlkYXRlOiF4KGUpO2U9ZnVuY3Rpb24odCxlKXtpZigheCh0KSlyZXR1cm4gdDt2YXIgcj1UKHQpO3JldHVybiByLnBhdGg9XCIvc3R5bGVzL3YxXCIrci5wYXRoLHkocixlKX0oZSxyLmFjY2Vzc1Rva2VuKTt2YXIgYT10aGlzLm1hcC5fdHJhbnNmb3JtUmVxdWVzdChlLHQuUmVzb3VyY2VUeXBlLlN0eWxlKTt0LmdldEpTT04oYSxmdW5jdGlvbihlLHIpe2U/bi5maXJlKG5ldyB0LkVycm9yRXZlbnQoZSkpOnImJm4uX2xvYWQocixpKX0pfSxyLnByb3RvdHlwZS5sb2FkSlNPTj1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7dm9pZCAwPT09ciYmKHI9e30pLHRoaXMuZmlyZShuZXcgdC5FdmVudChcImRhdGFsb2FkaW5nXCIse2RhdGFUeXBlOlwic3R5bGVcIn0pKSxhLmZyYW1lKGZ1bmN0aW9uKCl7bi5fbG9hZChlLCExIT09ci52YWxpZGF0ZSl9KX0sci5wcm90b3R5cGUuX2xvYWQ9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO2lmKCFyfHwhWGUodGhpcyx0LnZhbGlkYXRlU3R5bGUoZSkpKXtmb3IodmFyIGkgaW4gdGhpcy5fbG9hZGVkPSEwLHRoaXMuc3R5bGVzaGVldD1lLGUuc291cmNlcyluLmFkZFNvdXJjZShpLGUuc291cmNlc1tpXSx7dmFsaWRhdGU6ITF9KTtlLnNwcml0ZT9mdW5jdGlvbihlLHIsbil7dmFyIGksbyxzLGw9YS5kZXZpY2VQaXhlbFJhdGlvPjE/XCJAMnhcIjpcIlwiO2Z1bmN0aW9uIGMoKXtpZihzKW4ocyk7ZWxzZSBpZihpJiZvKXt2YXIgZT1hLmdldEltYWdlRGF0YShvKSxyPXt9O2Zvcih2YXIgbCBpbiBpKXt2YXIgYz1pW2xdLHU9Yy53aWR0aCxoPWMuaGVpZ2h0LGY9Yy54LHA9Yy55LGQ9Yy5zZGYsZz1jLnBpeGVsUmF0aW8sdj1uZXcgdC5SR0JBSW1hZ2Uoe3dpZHRoOnUsaGVpZ2h0Omh9KTt0LlJHQkFJbWFnZS5jb3B5KGUsdix7eDpmLHk6cH0se3g6MCx5OjB9LHt3aWR0aDp1LGhlaWdodDpofSkscltsXT17ZGF0YTp2LHBpeGVsUmF0aW86ZyxzZGY6ZH19bihudWxsLHIpfX10LmdldEpTT04ocihfKGUsbCxcIi5qc29uXCIpLHQuUmVzb3VyY2VUeXBlLlNwcml0ZUpTT04pLGZ1bmN0aW9uKHQsZSl7c3x8KHM9dCxpPWUsYygpKX0pLHQuZ2V0SW1hZ2UocihfKGUsbCxcIi5wbmdcIiksdC5SZXNvdXJjZVR5cGUuU3ByaXRlSW1hZ2UpLGZ1bmN0aW9uKHQsZSl7c3x8KHM9dCxvPWUsYygpKX0pfShlLnNwcml0ZSx0aGlzLm1hcC5fdHJhbnNmb3JtUmVxdWVzdCxmdW5jdGlvbihlLHIpe2lmKGUpbi5maXJlKG5ldyB0LkVycm9yRXZlbnQoZSkpO2Vsc2UgaWYocilmb3IodmFyIGkgaW4gciluLmltYWdlTWFuYWdlci5hZGRJbWFnZShpLHJbaV0pO24uaW1hZ2VNYW5hZ2VyLnNldExvYWRlZCghMCksbi5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YVwiLHtkYXRhVHlwZTpcInN0eWxlXCJ9KSl9KTp0aGlzLmltYWdlTWFuYWdlci5zZXRMb2FkZWQoITApLHRoaXMuZ2x5cGhNYW5hZ2VyLnNldFVSTChlLmdseXBocyk7dmFyIG89dGUodGhpcy5zdHlsZXNoZWV0LmxheWVycyk7dGhpcy5fb3JkZXI9by5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSx0aGlzLl9sYXllcnM9e307Zm9yKHZhciBzPTAsbD1vO3M8bC5sZW5ndGg7cys9MSl7dmFyIGM9bFtzXTsoYz10LmRlZmF1bHQkMjIoYykpLnNldEV2ZW50ZWRQYXJlbnQobix7bGF5ZXI6e2lkOmMuaWR9fSksbi5fbGF5ZXJzW2MuaWRdPWN9dGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdChcInNldExheWVyc1wiLHRoaXMuX3NlcmlhbGl6ZUxheWVycyh0aGlzLl9vcmRlcikpLHRoaXMubGlnaHQ9bmV3IFYodGhpcy5zdHlsZXNoZWV0LmxpZ2h0KSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhXCIse2RhdGFUeXBlOlwic3R5bGVcIn0pKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJzdHlsZS5sb2FkXCIpKX19LHIucHJvdG90eXBlLl92YWxpZGF0ZUxheWVyPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuc291cmNlQ2FjaGVzW2Uuc291cmNlXTtpZihyKXt2YXIgbj1lLnNvdXJjZUxheWVyO2lmKG4pe3ZhciBpPXIuZ2V0U291cmNlKCk7KFwiZ2VvanNvblwiPT09aS50eXBlfHxpLnZlY3RvckxheWVySWRzJiYtMT09PWkudmVjdG9yTGF5ZXJJZHMuaW5kZXhPZihuKSkmJnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignU291cmNlIGxheWVyIFwiJytuKydcIiBkb2VzIG5vdCBleGlzdCBvbiBzb3VyY2UgXCInK2kuaWQrJ1wiIGFzIHNwZWNpZmllZCBieSBzdHlsZSBsYXllciBcIicrZS5pZCsnXCInKSkpfX19LHIucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe2lmKCF0aGlzLl9sb2FkZWQpcmV0dXJuITE7aWYoT2JqZWN0LmtleXModGhpcy5fdXBkYXRlZFNvdXJjZXMpLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpaWYoIXRoaXMuc291cmNlQ2FjaGVzW3RdLmxvYWRlZCgpKXJldHVybiExO3JldHVybiEhdGhpcy5pbWFnZU1hbmFnZXIuaXNMb2FkZWQoKX0sci5wcm90b3R5cGUuX3NlcmlhbGl6ZUxheWVycz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5fbGF5ZXJzW3RdLnNlcmlhbGl6ZSgpfSl9LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb25zPWZ1bmN0aW9uKCl7aWYodGhpcy5saWdodCYmdGhpcy5saWdodC5oYXNUcmFuc2l0aW9uKCkpcmV0dXJuITA7Zm9yKHZhciB0IGluIHRoaXMuc291cmNlQ2FjaGVzKWlmKHRoaXMuc291cmNlQ2FjaGVzW3RdLmhhc1RyYW5zaXRpb24oKSlyZXR1cm4hMDtmb3IodmFyIGUgaW4gdGhpcy5fbGF5ZXJzKWlmKHRoaXMuX2xheWVyc1tlXS5oYXNUcmFuc2l0aW9uKCkpcmV0dXJuITA7cmV0dXJuITF9LHIucHJvdG90eXBlLl9jaGVja0xvYWRlZD1mdW5jdGlvbigpe2lmKCF0aGlzLl9sb2FkZWQpdGhyb3cgbmV3IEVycm9yKFwiU3R5bGUgaXMgbm90IGRvbmUgbG9hZGluZ1wiKX0sci5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2xvYWRlZCl7aWYodGhpcy5fY2hhbmdlZCl7dmFyIHI9T2JqZWN0LmtleXModGhpcy5fdXBkYXRlZExheWVycyksbj1PYmplY3Qua2V5cyh0aGlzLl9yZW1vdmVkTGF5ZXJzKTtmb3IodmFyIGkgaW4oci5sZW5ndGh8fG4ubGVuZ3RoKSYmdGhpcy5fdXBkYXRlV29ya2VyTGF5ZXJzKHIsbiksdGhpcy5fdXBkYXRlZFNvdXJjZXMpe3ZhciBhPXRoaXMuX3VwZGF0ZWRTb3VyY2VzW2ldO1wicmVsb2FkXCI9PT1hP3RoaXMuX3JlbG9hZFNvdXJjZShpKTpcImNsZWFyXCI9PT1hJiZ0aGlzLl9jbGVhclNvdXJjZShpKX1mb3IodmFyIG8gaW4gdGhpcy5fdXBkYXRlZFBhaW50UHJvcHMpdGhpcy5fbGF5ZXJzW29dLnVwZGF0ZVRyYW5zaXRpb25zKGUpO3RoaXMubGlnaHQudXBkYXRlVHJhbnNpdGlvbnMoZSksdGhpcy5fcmVzZXRVcGRhdGVzKCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YVwiLHtkYXRhVHlwZTpcInN0eWxlXCJ9KSl9Zm9yKHZhciBzIGluIHRoaXMuc291cmNlQ2FjaGVzKXRoaXMuc291cmNlQ2FjaGVzW3NdLnVzZWQ9ITE7Zm9yKHZhciBsPTAsYz10aGlzLl9vcmRlcjtsPGMubGVuZ3RoO2wrPTEpe3ZhciB1PWNbbF0saD10aGlzLl9sYXllcnNbdV07aC5yZWNhbGN1bGF0ZShlKSwhaC5pc0hpZGRlbihlLnpvb20pJiZoLnNvdXJjZSYmKHRoaXMuc291cmNlQ2FjaGVzW2guc291cmNlXS51c2VkPSEwKX10aGlzLmxpZ2h0LnJlY2FsY3VsYXRlKGUpLHRoaXMuej1lLnpvb219fSxyLnByb3RvdHlwZS5fdXBkYXRlV29ya2VyTGF5ZXJzPWZ1bmN0aW9uKHQsZSl7dGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdChcInVwZGF0ZUxheWVyc1wiLHtsYXllcnM6dGhpcy5fc2VyaWFsaXplTGF5ZXJzKHQpLHJlbW92ZWRJZHM6ZX0pfSxyLnByb3RvdHlwZS5fcmVzZXRVcGRhdGVzPWZ1bmN0aW9uKCl7dGhpcy5fY2hhbmdlZD0hMSx0aGlzLl91cGRhdGVkTGF5ZXJzPXt9LHRoaXMuX3JlbW92ZWRMYXllcnM9e30sdGhpcy5fdXBkYXRlZFNvdXJjZXM9e30sdGhpcy5fdXBkYXRlZFBhaW50UHJvcHM9e319LHIucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7aWYodGhpcy5fY2hlY2tMb2FkZWQoKSxYZSh0aGlzLHQudmFsaWRhdGVTdHlsZShlKSkpcmV0dXJuITE7KGU9dC5jbG9uZShlKSkubGF5ZXJzPXRlKGUubGF5ZXJzKTt2YXIgbj1mdW5jdGlvbihlLHIpe2lmKCFlKXJldHVyblt7Y29tbWFuZDplZS5zZXRTdHlsZSxhcmdzOltyXX1dO3ZhciBuPVtdO3RyeXtpZighdC5kZWZhdWx0JDEwKGUudmVyc2lvbixyLnZlcnNpb24pKXJldHVyblt7Y29tbWFuZDplZS5zZXRTdHlsZSxhcmdzOltyXX1dO3QuZGVmYXVsdCQxMChlLmNlbnRlcixyLmNlbnRlcil8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRDZW50ZXIsYXJnczpbci5jZW50ZXJdfSksdC5kZWZhdWx0JDEwKGUuem9vbSxyLnpvb20pfHxuLnB1c2goe2NvbW1hbmQ6ZWUuc2V0Wm9vbSxhcmdzOltyLnpvb21dfSksdC5kZWZhdWx0JDEwKGUuYmVhcmluZyxyLmJlYXJpbmcpfHxuLnB1c2goe2NvbW1hbmQ6ZWUuc2V0QmVhcmluZyxhcmdzOltyLmJlYXJpbmddfSksdC5kZWZhdWx0JDEwKGUucGl0Y2gsci5waXRjaCl8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRQaXRjaCxhcmdzOltyLnBpdGNoXX0pLHQuZGVmYXVsdCQxMChlLnNwcml0ZSxyLnNwcml0ZSl8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRTcHJpdGUsYXJnczpbci5zcHJpdGVdfSksdC5kZWZhdWx0JDEwKGUuZ2x5cGhzLHIuZ2x5cGhzKXx8bi5wdXNoKHtjb21tYW5kOmVlLnNldEdseXBocyxhcmdzOltyLmdseXBoc119KSx0LmRlZmF1bHQkMTAoZS50cmFuc2l0aW9uLHIudHJhbnNpdGlvbil8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRUcmFuc2l0aW9uLGFyZ3M6W3IudHJhbnNpdGlvbl19KSx0LmRlZmF1bHQkMTAoZS5saWdodCxyLmxpZ2h0KXx8bi5wdXNoKHtjb21tYW5kOmVlLnNldExpZ2h0LGFyZ3M6W3IubGlnaHRdfSk7dmFyIGk9e30sYT1bXTshZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE7Zm9yKGEgaW4gcj1yfHx7fSxlPWV8fHt9KWUuaGFzT3duUHJvcGVydHkoYSkmJihyLmhhc093blByb3BlcnR5KGEpfHxuZShhLG4saSkpO2ZvcihhIGluIHIpci5oYXNPd25Qcm9wZXJ0eShhKSYmKGUuaGFzT3duUHJvcGVydHkoYSk/dC5kZWZhdWx0JDEwKGVbYV0sclthXSl8fChcImdlb2pzb25cIj09PWVbYV0udHlwZSYmXCJnZW9qc29uXCI9PT1yW2FdLnR5cGUmJmFlKGUscixhKT9uLnB1c2goe2NvbW1hbmQ6ZWUuc2V0R2VvSlNPTlNvdXJjZURhdGEsYXJnczpbYSxyW2FdLmRhdGFdfSk6aWUoYSxyLG4saSkpOnJlKGEscixuKSl9KGUuc291cmNlcyxyLnNvdXJjZXMsYSxpKTt2YXIgbz1bXTtlLmxheWVycyYmZS5sYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXtpW3Quc291cmNlXT9uLnB1c2goe2NvbW1hbmQ6ZWUucmVtb3ZlTGF5ZXIsYXJnczpbdC5pZF19KTpvLnB1c2godCl9KSxuPW4uY29uY2F0KGEpLGZ1bmN0aW9uKGUscixuKXtyPXJ8fFtdO3ZhciBpLGEsbyxzLGwsYyx1LGg9KGU9ZXx8W10pLm1hcChzZSksZj1yLm1hcChzZSkscD1lLnJlZHVjZShsZSx7fSksZD1yLnJlZHVjZShsZSx7fSksZz1oLnNsaWNlKCksdj1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihpPTAsYT0wO2k8aC5sZW5ndGg7aSsrKW89aFtpXSxkLmhhc093blByb3BlcnR5KG8pP2ErKzoobi5wdXNoKHtjb21tYW5kOmVlLnJlbW92ZUxheWVyLGFyZ3M6W29dfSksZy5zcGxpY2UoZy5pbmRleE9mKG8sYSksMSkpO2ZvcihpPTAsYT0wO2k8Zi5sZW5ndGg7aSsrKW89ZltmLmxlbmd0aC0xLWldLGdbZy5sZW5ndGgtMS1pXSE9PW8mJihwLmhhc093blByb3BlcnR5KG8pPyhuLnB1c2goe2NvbW1hbmQ6ZWUucmVtb3ZlTGF5ZXIsYXJnczpbb119KSxnLnNwbGljZShnLmxhc3RJbmRleE9mKG8sZy5sZW5ndGgtYSksMSkpOmErKyxjPWdbZy5sZW5ndGgtaV0sbi5wdXNoKHtjb21tYW5kOmVlLmFkZExheWVyLGFyZ3M6W2Rbb10sY119KSxnLnNwbGljZShnLmxlbmd0aC1pLDAsbyksdltvXT0hMCk7Zm9yKGk9MDtpPGYubGVuZ3RoO2krKylpZihzPXBbbz1mW2ldXSxsPWRbb10sIXZbb10mJiF0LmRlZmF1bHQkMTAocyxsKSlpZih0LmRlZmF1bHQkMTAocy5zb3VyY2UsbC5zb3VyY2UpJiZ0LmRlZmF1bHQkMTAoc1tcInNvdXJjZS1sYXllclwiXSxsW1wic291cmNlLWxheWVyXCJdKSYmdC5kZWZhdWx0JDEwKHMudHlwZSxsLnR5cGUpKXtmb3IodSBpbiBvZShzLmxheW91dCxsLmxheW91dCxuLG8sbnVsbCxlZS5zZXRMYXlvdXRQcm9wZXJ0eSksb2Uocy5wYWludCxsLnBhaW50LG4sbyxudWxsLGVlLnNldFBhaW50UHJvcGVydHkpLHQuZGVmYXVsdCQxMChzLmZpbHRlcixsLmZpbHRlcil8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRGaWx0ZXIsYXJnczpbbyxsLmZpbHRlcl19KSx0LmRlZmF1bHQkMTAocy5taW56b29tLGwubWluem9vbSkmJnQuZGVmYXVsdCQxMChzLm1heHpvb20sbC5tYXh6b29tKXx8bi5wdXNoKHtjb21tYW5kOmVlLnNldExheWVyWm9vbVJhbmdlLGFyZ3M6W28sbC5taW56b29tLGwubWF4em9vbV19KSxzKXMuaGFzT3duUHJvcGVydHkodSkmJlwibGF5b3V0XCIhPT11JiZcInBhaW50XCIhPT11JiZcImZpbHRlclwiIT09dSYmXCJtZXRhZGF0YVwiIT09dSYmXCJtaW56b29tXCIhPT11JiZcIm1heHpvb21cIiE9PXUmJigwPT09dS5pbmRleE9mKFwicGFpbnQuXCIpP29lKHNbdV0sbFt1XSxuLG8sdS5zbGljZSg2KSxlZS5zZXRQYWludFByb3BlcnR5KTp0LmRlZmF1bHQkMTAoc1t1XSxsW3VdKXx8bi5wdXNoKHtjb21tYW5kOmVlLnNldExheWVyUHJvcGVydHksYXJnczpbbyx1LGxbdV1dfSkpO2Zvcih1IGluIGwpbC5oYXNPd25Qcm9wZXJ0eSh1KSYmIXMuaGFzT3duUHJvcGVydHkodSkmJlwibGF5b3V0XCIhPT11JiZcInBhaW50XCIhPT11JiZcImZpbHRlclwiIT09dSYmXCJtZXRhZGF0YVwiIT09dSYmXCJtaW56b29tXCIhPT11JiZcIm1heHpvb21cIiE9PXUmJigwPT09dS5pbmRleE9mKFwicGFpbnQuXCIpP29lKHNbdV0sbFt1XSxuLG8sdS5zbGljZSg2KSxlZS5zZXRQYWludFByb3BlcnR5KTp0LmRlZmF1bHQkMTAoc1t1XSxsW3VdKXx8bi5wdXNoKHtjb21tYW5kOmVlLnNldExheWVyUHJvcGVydHksYXJnczpbbyx1LGxbdV1dfSkpfWVsc2Ugbi5wdXNoKHtjb21tYW5kOmVlLnJlbW92ZUxheWVyLGFyZ3M6W29dfSksYz1nW2cubGFzdEluZGV4T2YobykrMV0sbi5wdXNoKHtjb21tYW5kOmVlLmFkZExheWVyLGFyZ3M6W2wsY119KX0obyxyLmxheWVycyxuKX1jYXRjaCh0KXtjb25zb2xlLndhcm4oXCJVbmFibGUgdG8gY29tcHV0ZSBzdHlsZSBkaWZmOlwiLHQpLG49W3tjb21tYW5kOmVlLnNldFN0eWxlLGFyZ3M6W3JdfV19cmV0dXJuIG59KHRoaXMuc2VyaWFsaXplKCksZSkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEodC5jb21tYW5kIGluICRlKX0pO2lmKDA9PT1uLmxlbmd0aClyZXR1cm4hMTt2YXIgaT1uLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hKHQuY29tbWFuZCBpbiBaZSl9KTtpZihpLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcihcIlVuaW1wbGVtZW50ZWQ6IFwiK2kubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbW1hbmR9KS5qb2luKFwiLCBcIikrXCIuXCIpO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24odCl7XCJzZXRUcmFuc2l0aW9uXCIhPT10LmNvbW1hbmQmJnJbdC5jb21tYW5kXS5hcHBseShyLHQuYXJncyl9KSx0aGlzLnN0eWxlc2hlZXQ9ZSwhMH0sci5wcm90b3R5cGUuYWRkSW1hZ2U9ZnVuY3Rpb24oZSxyKXtpZih0aGlzLmdldEltYWdlKGUpKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoXCJBbiBpbWFnZSB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cy5cIikpKTt0aGlzLmltYWdlTWFuYWdlci5hZGRJbWFnZShlLHIpLHRoaXMuZmlyZShuZXcgdC5FdmVudChcImRhdGFcIix7ZGF0YVR5cGU6XCJzdHlsZVwifSkpfSxyLnByb3RvdHlwZS5nZXRJbWFnZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbWFnZU1hbmFnZXIuZ2V0SW1hZ2UodCl9LHIucHJvdG90eXBlLnJlbW92ZUltYWdlPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmdldEltYWdlKGUpKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoXCJObyBpbWFnZSB3aXRoIHRoaXMgbmFtZSBleGlzdHMuXCIpKSk7dGhpcy5pbWFnZU1hbmFnZXIucmVtb3ZlSW1hZ2UoZSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YVwiLHtkYXRhVHlwZTpcInN0eWxlXCJ9KSl9LHIucHJvdG90eXBlLmFkZFNvdXJjZT1mdW5jdGlvbihlLHIsbil7dmFyIGk9dGhpcztpZih0aGlzLl9jaGVja0xvYWRlZCgpLHZvaWQgMCE9PXRoaXMuc291cmNlQ2FjaGVzW2VdKXRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIGFscmVhZHkgYSBzb3VyY2Ugd2l0aCB0aGlzIElEXCIpO2lmKCFyLnR5cGUpdGhyb3cgbmV3IEVycm9yKFwiVGhlIHR5cGUgcHJvcGVydHkgbXVzdCBiZSBkZWZpbmVkLCBidXQgdGhlIG9ubHkgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHdlcmUgZ2l2ZW46IFwiK09iamVjdC5rZXlzKHIpLmpvaW4oXCIsIFwiKStcIi5cIik7aWYoIShbXCJ2ZWN0b3JcIixcInJhc3RlclwiLFwiZ2VvanNvblwiLFwidmlkZW9cIixcImltYWdlXCJdLmluZGV4T2Yoci50eXBlKT49MCYmdGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZVN0eWxlLnNvdXJjZSxcInNvdXJjZXMuXCIrZSxyLG51bGwsbikpKXt0aGlzLm1hcCYmdGhpcy5tYXAuX2NvbGxlY3RSZXNvdXJjZVRpbWluZyYmKHIuY29sbGVjdFJlc291cmNlVGltaW5nPSEwKTt2YXIgYT10aGlzLnNvdXJjZUNhY2hlc1tlXT1uZXcgV3QoZSxyLHRoaXMuZGlzcGF0Y2hlcik7YS5zdHlsZT10aGlzLGEuc2V0RXZlbnRlZFBhcmVudCh0aGlzLGZ1bmN0aW9uKCl7cmV0dXJue2lzU291cmNlTG9hZGVkOmkubG9hZGVkKCksc291cmNlOmEuc2VyaWFsaXplKCksc291cmNlSWQ6ZX19KSxhLm9uQWRkKHRoaXMubWFwKSx0aGlzLl9jaGFuZ2VkPSEwfX0sci5wcm90b3R5cGUucmVtb3ZlU291cmNlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2NoZWNrTG9hZGVkKCksdm9pZCAwPT09dGhpcy5zb3VyY2VDYWNoZXNbZV0pdGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gc291cmNlIHdpdGggdGhpcyBJRFwiKTtmb3IodmFyIHIgaW4gdGhpcy5fbGF5ZXJzKWlmKHRoaXMuX2xheWVyc1tyXS5zb3VyY2U9PT1lKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ1NvdXJjZSBcIicrZSsnXCIgY2Fubm90IGJlIHJlbW92ZWQgd2hpbGUgbGF5ZXIgXCInK3IrJ1wiIGlzIHVzaW5nIGl0LicpKSk7dmFyIG49dGhpcy5zb3VyY2VDYWNoZXNbZV07ZGVsZXRlIHRoaXMuc291cmNlQ2FjaGVzW2VdLGRlbGV0ZSB0aGlzLl91cGRhdGVkU291cmNlc1tlXSxuLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhXCIse3NvdXJjZURhdGFUeXBlOlwibWV0YWRhdGFcIixkYXRhVHlwZTpcInNvdXJjZVwiLHNvdXJjZUlkOmV9KSksbi5zZXRFdmVudGVkUGFyZW50KG51bGwpLG4uY2xlYXJUaWxlcygpLG4ub25SZW1vdmUmJm4ub25SZW1vdmUodGhpcy5tYXApLHRoaXMuX2NoYW5nZWQ9ITB9LHIucHJvdG90eXBlLnNldEdlb0pTT05Tb3VyY2VEYXRhPWZ1bmN0aW9uKHQsZSl7dGhpcy5fY2hlY2tMb2FkZWQoKSx0aGlzLnNvdXJjZUNhY2hlc1t0XS5nZXRTb3VyY2UoKS5zZXREYXRhKGUpLHRoaXMuX2NoYW5nZWQ9ITB9LHIucHJvdG90eXBlLmdldFNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zb3VyY2VDYWNoZXNbdF0mJnRoaXMuc291cmNlQ2FjaGVzW3RdLmdldFNvdXJjZSgpfSxyLnByb3RvdHlwZS5hZGRMYXllcj1mdW5jdGlvbihlLHIsbil7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgaT1lLmlkO2lmKHRoaXMuZ2V0TGF5ZXIoaSkpdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCdMYXllciB3aXRoIGlkIFwiJytpKydcIiBhbHJlYWR5IGV4aXN0cyBvbiB0aGlzIG1hcCcpKSk7ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgZS5zb3VyY2UmJih0aGlzLmFkZFNvdXJjZShpLGUuc291cmNlKSxlPXQuY2xvbmUoZSksZT10LmV4dGVuZChlLHtzb3VyY2U6aX0pKSwhdGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZVN0eWxlLmxheWVyLFwibGF5ZXJzLlwiK2ksZSx7YXJyYXlJbmRleDotMX0sbikpe3ZhciBhPXQuZGVmYXVsdCQyMihlKTt0aGlzLl92YWxpZGF0ZUxheWVyKGEpLGEuc2V0RXZlbnRlZFBhcmVudCh0aGlzLHtsYXllcjp7aWQ6aX19KTt2YXIgbz1yP3RoaXMuX29yZGVyLmluZGV4T2Yocik6dGhpcy5fb3JkZXIubGVuZ3RoO2lmKHImJi0xPT09byl0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ0xheWVyIHdpdGggaWQgXCInK3IrJ1wiIGRvZXMgbm90IGV4aXN0IG9uIHRoaXMgbWFwLicpKSk7ZWxzZXtpZih0aGlzLl9vcmRlci5zcGxpY2UobywwLGkpLHRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkPSEwLHRoaXMuX2xheWVyc1tpXT1hLHRoaXMuX3JlbW92ZWRMYXllcnNbaV0mJmEuc291cmNlKXt2YXIgcz10aGlzLl9yZW1vdmVkTGF5ZXJzW2ldO2RlbGV0ZSB0aGlzLl9yZW1vdmVkTGF5ZXJzW2ldLHMudHlwZSE9PWEudHlwZT90aGlzLl91cGRhdGVkU291cmNlc1thLnNvdXJjZV09XCJjbGVhclwiOih0aGlzLl91cGRhdGVkU291cmNlc1thLnNvdXJjZV09XCJyZWxvYWRcIix0aGlzLnNvdXJjZUNhY2hlc1thLnNvdXJjZV0ucGF1c2UoKSl9dGhpcy5fdXBkYXRlTGF5ZXIoYSl9fX0sci5wcm90b3R5cGUubW92ZUxheWVyPWZ1bmN0aW9uKGUscil7aWYodGhpcy5fY2hlY2tMb2FkZWQoKSx0aGlzLl9jaGFuZ2VkPSEwLHRoaXMuX2xheWVyc1tlXSl7aWYoZSE9PXIpe3ZhciBuPXRoaXMuX29yZGVyLmluZGV4T2YoZSk7dGhpcy5fb3JkZXIuc3BsaWNlKG4sMSk7dmFyIGk9cj90aGlzLl9vcmRlci5pbmRleE9mKHIpOnRoaXMuX29yZGVyLmxlbmd0aDtyJiYtMT09PWk/dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCdMYXllciB3aXRoIGlkIFwiJytyKydcIiBkb2VzIG5vdCBleGlzdCBvbiB0aGlzIG1hcC4nKSkpOih0aGlzLl9vcmRlci5zcGxpY2UoaSwwLGUpLHRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkPSEwKX19ZWxzZSB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoXCJUaGUgbGF5ZXIgJ1wiK2UrXCInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIG1vdmVkLlwiKSkpfSxyLnByb3RvdHlwZS5yZW1vdmVMYXllcj1mdW5jdGlvbihlKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciByPXRoaXMuX2xheWVyc1tlXTtpZihyKXtyLnNldEV2ZW50ZWRQYXJlbnQobnVsbCk7dmFyIG49dGhpcy5fb3JkZXIuaW5kZXhPZihlKTt0aGlzLl9vcmRlci5zcGxpY2UobiwxKSx0aGlzLl9sYXllck9yZGVyQ2hhbmdlZD0hMCx0aGlzLl9jaGFuZ2VkPSEwLHRoaXMuX3JlbW92ZWRMYXllcnNbZV09cixkZWxldGUgdGhpcy5fbGF5ZXJzW2VdLGRlbGV0ZSB0aGlzLl91cGRhdGVkTGF5ZXJzW2VdLGRlbGV0ZSB0aGlzLl91cGRhdGVkUGFpbnRQcm9wc1tlXX1lbHNlIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcihcIlRoZSBsYXllciAnXCIrZStcIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgcmVtb3ZlZC5cIikpKX0sci5wcm90b3R5cGUuZ2V0TGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xheWVyc1t0XX0sci5wcm90b3R5cGUuc2V0TGF5ZXJab29tUmFuZ2U9ZnVuY3Rpb24oZSxyLG4pe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIGk9dGhpcy5nZXRMYXllcihlKTtpP2kubWluem9vbT09PXImJmkubWF4em9vbT09PW58fChudWxsIT1yJiYoaS5taW56b29tPXIpLG51bGwhPW4mJihpLm1heHpvb209biksdGhpcy5fdXBkYXRlTGF5ZXIoaSkpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcihcIlRoZSBsYXllciAnXCIrZStcIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgaGF2ZSB6b29tIGV4dGVudC5cIikpKX0sci5wcm90b3R5cGUuc2V0RmlsdGVyPWZ1bmN0aW9uKGUscil7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgbj10aGlzLmdldExheWVyKGUpO2lmKG4pe2lmKCF0LmRlZmF1bHQkMTAobi5maWx0ZXIscikpcmV0dXJuIG51bGw9PXI/KG4uZmlsdGVyPXZvaWQgMCx2b2lkIHRoaXMuX3VwZGF0ZUxheWVyKG4pKTp2b2lkKHRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVTdHlsZS5maWx0ZXIsXCJsYXllcnMuXCIrbi5pZCtcIi5maWx0ZXJcIixyKXx8KG4uZmlsdGVyPXQuY2xvbmUociksdGhpcy5fdXBkYXRlTGF5ZXIobikpKX1lbHNlIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcihcIlRoZSBsYXllciAnXCIrZStcIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgZmlsdGVyZWQuXCIpKSl9LHIucHJvdG90eXBlLmdldEZpbHRlcj1mdW5jdGlvbihlKXtyZXR1cm4gdC5jbG9uZSh0aGlzLmdldExheWVyKGUpLmZpbHRlcil9LHIucHJvdG90eXBlLnNldExheW91dFByb3BlcnR5PWZ1bmN0aW9uKGUscixuKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBpPXRoaXMuZ2V0TGF5ZXIoZSk7aT90LmRlZmF1bHQkMTAoaS5nZXRMYXlvdXRQcm9wZXJ0eShyKSxuKXx8KGkuc2V0TGF5b3V0UHJvcGVydHkocixuKSx0aGlzLl91cGRhdGVMYXllcihpKSk6dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKFwiVGhlIGxheWVyICdcIitlK1wiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBzdHlsZWQuXCIpKSl9LHIucHJvdG90eXBlLmdldExheW91dFByb3BlcnR5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZ2V0TGF5ZXIodCkuZ2V0TGF5b3V0UHJvcGVydHkoZSl9LHIucHJvdG90eXBlLnNldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24oZSxyLG4pe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIGk9dGhpcy5nZXRMYXllcihlKTtpZihpKXtpZighdC5kZWZhdWx0JDEwKGkuZ2V0UGFpbnRQcm9wZXJ0eShyKSxuKSl7dmFyIGE9aS5fdHJhbnNpdGlvbmFibGVQYWludC5fdmFsdWVzW3JdLnZhbHVlLmlzRGF0YURyaXZlbigpO2kuc2V0UGFpbnRQcm9wZXJ0eShyLG4pLChpLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbcl0udmFsdWUuaXNEYXRhRHJpdmVuKCl8fGEpJiZ0aGlzLl91cGRhdGVMYXllcihpKSx0aGlzLl9jaGFuZ2VkPSEwLHRoaXMuX3VwZGF0ZWRQYWludFByb3BzW2VdPSEwfX1lbHNlIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcihcIlRoZSBsYXllciAnXCIrZStcIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgc3R5bGVkLlwiKSkpfSxyLnByb3RvdHlwZS5nZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZ2V0TGF5ZXIodCkuZ2V0UGFpbnRQcm9wZXJ0eShlKX0sci5wcm90b3R5cGUuZ2V0VHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0LmV4dGVuZCh7ZHVyYXRpb246MzAwLGRlbGF5OjB9LHRoaXMuc3R5bGVzaGVldCYmdGhpcy5zdHlsZXNoZWV0LnRyYW5zaXRpb24pfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0LmZpbHRlck9iamVjdCh7dmVyc2lvbjp0aGlzLnN0eWxlc2hlZXQudmVyc2lvbixuYW1lOnRoaXMuc3R5bGVzaGVldC5uYW1lLG1ldGFkYXRhOnRoaXMuc3R5bGVzaGVldC5tZXRhZGF0YSxsaWdodDp0aGlzLnN0eWxlc2hlZXQubGlnaHQsY2VudGVyOnRoaXMuc3R5bGVzaGVldC5jZW50ZXIsem9vbTp0aGlzLnN0eWxlc2hlZXQuem9vbSxiZWFyaW5nOnRoaXMuc3R5bGVzaGVldC5iZWFyaW5nLHBpdGNoOnRoaXMuc3R5bGVzaGVldC5waXRjaCxzcHJpdGU6dGhpcy5zdHlsZXNoZWV0LnNwcml0ZSxnbHlwaHM6dGhpcy5zdHlsZXNoZWV0LmdseXBocyx0cmFuc2l0aW9uOnRoaXMuc3R5bGVzaGVldC50cmFuc2l0aW9uLHNvdXJjZXM6dC5tYXBPYmplY3QodGhpcy5zb3VyY2VDYWNoZXMsZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VyaWFsaXplKCl9KSxsYXllcnM6dGhpcy5fb3JkZXIubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9sYXllcnNbdF0uc2VyaWFsaXplKCl9KX0sZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXR9KX0sci5wcm90b3R5cGUuX3VwZGF0ZUxheWVyPWZ1bmN0aW9uKHQpe3RoaXMuX3VwZGF0ZWRMYXllcnNbdC5pZF09ITAsdC5zb3VyY2UmJiF0aGlzLl91cGRhdGVkU291cmNlc1t0LnNvdXJjZV0mJih0aGlzLl91cGRhdGVkU291cmNlc1t0LnNvdXJjZV09XCJyZWxvYWRcIix0aGlzLnNvdXJjZUNhY2hlc1t0LnNvdXJjZV0ucGF1c2UoKSksdGhpcy5fY2hhbmdlZD0hMH0sci5wcm90b3R5cGUuX2ZsYXR0ZW5SZW5kZXJlZEZlYXR1cmVzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPXRoaXMuX29yZGVyLmxlbmd0aC0xO3I+PTA7ci0tKWZvcih2YXIgbj10aGlzLl9vcmRlcltyXSxpPTAsYT10O2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXVtuXTtpZihvKWZvcih2YXIgcz0wLGw9bztzPGwubGVuZ3RoO3MrPTEpe3ZhciBjPWxbc107ZS5wdXNoKGMpfX1yZXR1cm4gZX0sci5wcm90b3R5cGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzPWZ1bmN0aW9uKGUscixuKXtyJiZyLmZpbHRlciYmdGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZVN0eWxlLmZpbHRlcixcInF1ZXJ5UmVuZGVyZWRGZWF0dXJlcy5maWx0ZXJcIixyLmZpbHRlcik7dmFyIGk9e307aWYociYmci5sYXllcnMpe2lmKCFBcnJheS5pc0FycmF5KHIubGF5ZXJzKSlyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKFwicGFyYW1ldGVycy5sYXllcnMgbXVzdCBiZSBhbiBBcnJheS5cIikpKSxbXTtmb3IodmFyIGE9MCxvPXIubGF5ZXJzO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXSxsPXRoaXMuX2xheWVyc1tzXTtpZighbClyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKFwiVGhlIGxheWVyICdcIitzK1wiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBxdWVyaWVkIGZvciBmZWF0dXJlcy5cIikpKSxbXTtpW2wuc291cmNlXT0hMH19dmFyIGM9W107Zm9yKHZhciB1IGluIHRoaXMuc291cmNlQ2FjaGVzKXIubGF5ZXJzJiYhaVt1XXx8Yy5wdXNoKGF0KHRoaXMuc291cmNlQ2FjaGVzW3VdLHRoaXMuX2xheWVycyxlLndvcmxkQ29vcmRpbmF0ZSxyLG4pKTtyZXR1cm4gdGhpcy5wbGFjZW1lbnQmJmMucHVzaChmdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYT17fSxvPW4ucXVlcnlSZW5kZXJlZFN5bWJvbHMoZSkscz1bXSxsPTAsYz1PYmplY3Qua2V5cyhvKS5tYXAoTnVtYmVyKTtsPGMubGVuZ3RoO2wrPTEpe3ZhciB1PWNbbF07cy5wdXNoKGlbdV0pfXMuc29ydChvdCk7Zm9yKHZhciBoPWZ1bmN0aW9uKCl7dmFyIGU9cFtmXSxuPWUuZmVhdHVyZUluZGV4Lmxvb2t1cFN5bWJvbEZlYXR1cmVzKG9bZS5idWNrZXRJbnN0YW5jZUlkXSxlLmJ1Y2tldEluZGV4LGUuc291cmNlTGF5ZXJJbmRleCxyLmZpbHRlcixyLmxheWVycyx0KTtmb3IodmFyIGkgaW4gbil7dmFyIHM9YVtpXT1hW2ldfHxbXSxsPW5baV07bC5zb3J0KGZ1bmN0aW9uKHQscil7dmFyIG49ZS5mZWF0dXJlU29ydE9yZGVyO2lmKG4pe3ZhciBpPW4uaW5kZXhPZih0LmZlYXR1cmVJbmRleCk7cmV0dXJuIG4uaW5kZXhPZihyLmZlYXR1cmVJbmRleCktaX1yZXR1cm4gci5mZWF0dXJlSW5kZXgtdC5mZWF0dXJlSW5kZXh9KTtmb3IodmFyIGM9MCx1PWw7Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgaD11W2NdO3MucHVzaChoLmZlYXR1cmUpfX19LGY9MCxwPXM7ZjxwLmxlbmd0aDtmKz0xKWgoKTtyZXR1cm4gYX0odGhpcy5fbGF5ZXJzLGUudmlld3BvcnQscix0aGlzLnBsYWNlbWVudC5jb2xsaXNpb25JbmRleCx0aGlzLnBsYWNlbWVudC5yZXRhaW5lZFF1ZXJ5RGF0YSkpLHRoaXMuX2ZsYXR0ZW5SZW5kZXJlZEZlYXR1cmVzKGMpfSxyLnByb3RvdHlwZS5xdWVyeVNvdXJjZUZlYXR1cmVzPWZ1bmN0aW9uKGUscil7ciYmci5maWx0ZXImJnRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVTdHlsZS5maWx0ZXIsXCJxdWVyeVNvdXJjZUZlYXR1cmVzLmZpbHRlclwiLHIuZmlsdGVyKTt2YXIgbj10aGlzLnNvdXJjZUNhY2hlc1tlXTtyZXR1cm4gbj9mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmdldFJlbmRlcmFibGVJZHMoKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZ2V0VGlsZUJ5SUQoZSl9KSxuPVtdLGk9e30sYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgbz1yW2FdLHM9by50aWxlSUQuY2Fub25pY2FsLmtleTtpW3NdfHwoaVtzXT0hMCxvLnF1ZXJ5U291cmNlRmVhdHVyZXMobixlKSl9cmV0dXJuIG59KG4scik6W119LHIucHJvdG90eXBlLmFkZFNvdXJjZVR5cGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiByLmdldFNvdXJjZVR5cGUodCk/bihuZXcgRXJyb3IoJ0Egc291cmNlIHR5cGUgY2FsbGVkIFwiJyt0KydcIiBhbHJlYWR5IGV4aXN0cy4nKSk6KHIuc2V0U291cmNlVHlwZSh0LGUpLGUud29ya2VyU291cmNlVVJMP3ZvaWQgdGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdChcImxvYWRXb3JrZXJTb3VyY2VcIix7bmFtZTp0LHVybDplLndvcmtlclNvdXJjZVVSTH0sbik6bihudWxsLG51bGwpKX0sci5wcm90b3R5cGUuZ2V0TGlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5saWdodC5nZXRMaWdodCgpfSxyLnByb3RvdHlwZS5zZXRMaWdodD1mdW5jdGlvbihlKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciByPXRoaXMubGlnaHQuZ2V0TGlnaHQoKSxuPSExO2Zvcih2YXIgaSBpbiBlKWlmKCF0LmRlZmF1bHQkMTAoZVtpXSxyW2ldKSl7bj0hMDticmVha31pZihuKXt2YXIgbz17bm93OmEubm93KCksdHJhbnNpdGlvbjp0LmV4dGVuZCh7ZHVyYXRpb246MzAwLGRlbGF5OjB9LHRoaXMuc3R5bGVzaGVldC50cmFuc2l0aW9uKX07dGhpcy5saWdodC5zZXRMaWdodChlKSx0aGlzLmxpZ2h0LnVwZGF0ZVRyYW5zaXRpb25zKG8pfX0sci5wcm90b3R5cGUuX3ZhbGlkYXRlPWZ1bmN0aW9uKGUscixuLGksYSl7cmV0dXJuKCFhfHwhMSE9PWEudmFsaWRhdGUpJiZYZSh0aGlzLGUuY2FsbCh0LnZhbGlkYXRlU3R5bGUsdC5leHRlbmQoe2tleTpyLHN0eWxlOnRoaXMuc2VyaWFsaXplKCksdmFsdWU6bixzdHlsZVNwZWM6dC5kZWZhdWx0JDV9LGkpKSl9LHIucHJvdG90eXBlLl9yZW1vdmU9ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdC5ldmVudGVkLm9mZihcInBsdWdpbkF2YWlsYWJsZVwiLHRoaXMuX3J0bFRleHRQbHVnaW5DYWxsYmFjayksdGhpcy5zb3VyY2VDYWNoZXMpdGhpcy5zb3VyY2VDYWNoZXNbZV0uY2xlYXJUaWxlcygpO3RoaXMuZGlzcGF0Y2hlci5yZW1vdmUoKX0sci5wcm90b3R5cGUuX2NsZWFyU291cmNlPWZ1bmN0aW9uKHQpe3RoaXMuc291cmNlQ2FjaGVzW3RdLmNsZWFyVGlsZXMoKX0sci5wcm90b3R5cGUuX3JlbG9hZFNvdXJjZT1mdW5jdGlvbih0KXt0aGlzLnNvdXJjZUNhY2hlc1t0XS5yZXN1bWUoKSx0aGlzLnNvdXJjZUNhY2hlc1t0XS5yZWxvYWQoKX0sci5wcm90b3R5cGUuX3VwZGF0ZVNvdXJjZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuc291cmNlQ2FjaGVzKXRoaXMuc291cmNlQ2FjaGVzW2VdLnVwZGF0ZSh0KX0sci5wcm90b3R5cGUuX2dlbmVyYXRlQ29sbGlzaW9uQm94ZXM9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpdGhpcy5fcmVsb2FkU291cmNlKHQpfSxyLnByb3RvdHlwZS5fdXBkYXRlUGxhY2VtZW50PWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ITEsaT0hMSxvPXt9LHM9MCxsPXRoaXMuX29yZGVyO3M8bC5sZW5ndGg7cys9MSl7dmFyIGM9bFtzXSx1PXRoaXMuX2xheWVyc1tjXTtpZihcInN5bWJvbFwiPT09dS50eXBlKXtpZighb1t1LnNvdXJjZV0pe3ZhciBoPXRoaXMuc291cmNlQ2FjaGVzW3Uuc291cmNlXTtvW3Uuc291cmNlXT1oLmdldFJlbmRlcmFibGVJZHMoKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGguZ2V0VGlsZUJ5SUQodCl9KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUudGlsZUlELm92ZXJzY2FsZWRaLXQudGlsZUlELm92ZXJzY2FsZWRafHwodC50aWxlSUQuaXNMZXNzVGhhbihlLnRpbGVJRCk/LTE6MSl9KX12YXIgZj10aGlzLmNyb3NzVGlsZVN5bWJvbEluZGV4LmFkZExheWVyKHUsb1t1LnNvdXJjZV0sdC5jZW50ZXIubG5nKTtuPW58fGZ9fXRoaXMuY3Jvc3NUaWxlU3ltYm9sSW5kZXgucHJ1bmVVbnVzZWRMYXllcnModGhpcy5fb3JkZXIpO3ZhciBwPXRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkO2lmKChwfHwhdGhpcy5wYXVzZWFibGVQbGFjZW1lbnR8fHRoaXMucGF1c2VhYmxlUGxhY2VtZW50LmlzRG9uZSgpJiYhdGhpcy5wbGFjZW1lbnQuc3RpbGxSZWNlbnQoYS5ub3coKSkpJiYodGhpcy5wYXVzZWFibGVQbGFjZW1lbnQ9bmV3IFVlKHQsdGhpcy5fb3JkZXIscCxlLHIpLHRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkPSExKSx0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKT90aGlzLnBsYWNlbWVudC5zZXRTdGFsZSgpOih0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5jb250aW51ZVBsYWNlbWVudCh0aGlzLl9vcmRlcix0aGlzLl9sYXllcnMsbyksdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuaXNEb25lKCkmJih0aGlzLnBsYWNlbWVudD10aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5jb21taXQodGhpcy5wbGFjZW1lbnQsYS5ub3coKSksaT0hMCksbiYmdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQucGxhY2VtZW50LnNldFN0YWxlKCkpLGl8fG4pZm9yKHZhciBkPTAsZz10aGlzLl9vcmRlcjtkPGcubGVuZ3RoO2QrPTEpe3ZhciB2PWdbZF0sbT10aGlzLl9sYXllcnNbdl07XCJzeW1ib2xcIj09PW0udHlwZSYmdGhpcy5wbGFjZW1lbnQudXBkYXRlTGF5ZXJPcGFjaXRpZXMobSxvW20uc291cmNlXSl9cmV0dXJuIXRoaXMucGF1c2VhYmxlUGxhY2VtZW50LmlzRG9uZSgpfHx0aGlzLnBsYWNlbWVudC5oYXNUcmFuc2l0aW9ucyhhLm5vdygpKX0sci5wcm90b3R5cGUuZ2V0SW1hZ2VzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmltYWdlTWFuYWdlci5nZXRJbWFnZXMoZS5pY29ucyxyKX0sci5wcm90b3R5cGUuZ2V0R2x5cGhzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdseXBoTWFuYWdlci5nZXRHbHlwaHMoZS5zdGFja3Mscil9LHJ9KHQuRXZlbnRlZCk7SmUuZ2V0U291cmNlVHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gbnRbdF19LEplLnNldFNvdXJjZVR5cGU9ZnVuY3Rpb24odCxlKXtudFt0XT1lfSxKZS5yZWdpc3RlckZvclBsdWdpbkF2YWlsYWJpbGl0eT10LnJlZ2lzdGVyRm9yUGx1Z2luQXZhaWxhYmlsaXR5O3ZhciBLZT10LmNyZWF0ZUxheW91dChbe25hbWU6XCJhX3Bvc1wiLHR5cGU6XCJJbnQxNlwiLGNvbXBvbmVudHM6Mn1dKSxRZT17cHJlbHVkZTp7ZnJhZ21lbnRTb3VyY2U6XCIjaWZkZWYgR0xfRVNcXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZWxzZVxcblxcbiNpZiAhZGVmaW5lZChsb3dwKVxcbiNkZWZpbmUgbG93cFxcbiNlbmRpZlxcblxcbiNpZiAhZGVmaW5lZChtZWRpdW1wKVxcbiNkZWZpbmUgbWVkaXVtcFxcbiNlbmRpZlxcblxcbiNpZiAhZGVmaW5lZChoaWdocClcXG4jZGVmaW5lIGhpZ2hwXFxuI2VuZGlmXFxuXFxuI2VuZGlmXFxuXCIsdmVydGV4U291cmNlOlwiI2lmZGVmIEdMX0VTXFxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNlbHNlXFxuXFxuI2lmICFkZWZpbmVkKGxvd3ApXFxuI2RlZmluZSBsb3dwXFxuI2VuZGlmXFxuXFxuI2lmICFkZWZpbmVkKG1lZGl1bXApXFxuI2RlZmluZSBtZWRpdW1wXFxuI2VuZGlmXFxuXFxuI2lmICFkZWZpbmVkKGhpZ2hwKVxcbiNkZWZpbmUgaGlnaHBcXG4jZW5kaWZcXG5cXG4jZW5kaWZcXG5cXG4vLyBVbnBhY2sgYSBwYWlyIG9mIHZhbHVlcyB0aGF0IGhhdmUgYmVlbiBwYWNrZWQgaW50byBhIHNpbmdsZSBmbG9hdC5cXG4vLyBUaGUgcGFja2VkIHZhbHVlcyBhcmUgYXNzdW1lZCB0byBiZSA4LWJpdCB1bnNpZ25lZCBpbnRlZ2VycywgYW5kIGFyZVxcbi8vIHBhY2tlZCBsaWtlIHNvOlxcbi8vIHBhY2tlZFZhbHVlID0gZmxvb3IoaW5wdXRbMF0pICogMjU2ICsgaW5wdXRbMV0sXFxudmVjMiB1bnBhY2tfZmxvYXQoY29uc3QgZmxvYXQgcGFja2VkVmFsdWUpIHtcXG4gICAgaW50IHBhY2tlZEludFZhbHVlID0gaW50KHBhY2tlZFZhbHVlKTtcXG4gICAgaW50IHYwID0gcGFja2VkSW50VmFsdWUgLyAyNTY7XFxuICAgIHJldHVybiB2ZWMyKHYwLCBwYWNrZWRJbnRWYWx1ZSAtIHYwICogMjU2KTtcXG59XFxuXFxudmVjMiB1bnBhY2tfb3BhY2l0eShjb25zdCBmbG9hdCBwYWNrZWRPcGFjaXR5KSB7XFxuICAgIGludCBpbnRPcGFjaXR5ID0gaW50KHBhY2tlZE9wYWNpdHkpIC8gMjtcXG4gICAgcmV0dXJuIHZlYzIoZmxvYXQoaW50T3BhY2l0eSkgLyAxMjcuMCwgbW9kKHBhY2tlZE9wYWNpdHksIDIuMCkpO1xcbn1cXG5cXG4vLyBUbyBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgbmVlZGVkLCB3ZSBlbmNvZGUgYSA0LWNvbXBvbmVudFxcbi8vIGNvbG9yIGludG8gYSBwYWlyIG9mIGZsb2F0cyAoaS5lLiBhIHZlYzIpIGFzIGZvbGxvd3M6XFxuLy8gWyBmbG9vcihjb2xvci5yICogMjU1KSAqIDI1NiArIGNvbG9yLmcgKiAyNTUsXFxuLy8gICBmbG9vcihjb2xvci5iICogMjU1KSAqIDI1NiArIGNvbG9yLmcgKiAyNTUgXVxcbnZlYzQgZGVjb2RlX2NvbG9yKGNvbnN0IHZlYzIgZW5jb2RlZENvbG9yKSB7XFxuICAgIHJldHVybiB2ZWM0KFxcbiAgICAgICAgdW5wYWNrX2Zsb2F0KGVuY29kZWRDb2xvclswXSkgLyAyNTUuMCxcXG4gICAgICAgIHVucGFja19mbG9hdChlbmNvZGVkQ29sb3JbMV0pIC8gMjU1LjBcXG4gICAgKTtcXG59XFxuXFxuLy8gVW5wYWNrIGEgcGFpciBvZiBwYWludCB2YWx1ZXMgYW5kIGludGVycG9sYXRlIGJldHdlZW4gdGhlbS5cXG5mbG9hdCB1bnBhY2tfbWl4X3ZlYzIoY29uc3QgdmVjMiBwYWNrZWRWYWx1ZSwgY29uc3QgZmxvYXQgdCkge1xcbiAgICByZXR1cm4gbWl4KHBhY2tlZFZhbHVlWzBdLCBwYWNrZWRWYWx1ZVsxXSwgdCk7XFxufVxcblxcbi8vIFVucGFjayBhIHBhaXIgb2YgcGFpbnQgdmFsdWVzIGFuZCBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHRoZW0uXFxudmVjNCB1bnBhY2tfbWl4X3ZlYzQoY29uc3QgdmVjNCBwYWNrZWRDb2xvcnMsIGNvbnN0IGZsb2F0IHQpIHtcXG4gICAgdmVjNCBtaW5Db2xvciA9IGRlY29kZV9jb2xvcih2ZWMyKHBhY2tlZENvbG9yc1swXSwgcGFja2VkQ29sb3JzWzFdKSk7XFxuICAgIHZlYzQgbWF4Q29sb3IgPSBkZWNvZGVfY29sb3IodmVjMihwYWNrZWRDb2xvcnNbMl0sIHBhY2tlZENvbG9yc1szXSkpO1xcbiAgICByZXR1cm4gbWl4KG1pbkNvbG9yLCBtYXhDb2xvciwgdCk7XFxufVxcblxcbi8vIFRoZSBvZmZzZXQgZGVwZW5kcyBvbiBob3cgbWFueSBwaXhlbHMgYXJlIGJldHdlZW4gdGhlIHdvcmxkIG9yaWdpbiBhbmQgdGhlIGVkZ2Ugb2YgdGhlIHRpbGU6XFxuLy8gdmVjMiBvZmZzZXQgPSBtb2QocGl4ZWxfY29vcmQsIHNpemUpXFxuLy9cXG4vLyBBdCBoaWdoIHpvb20gbGV2ZWxzIHRoZXJlIGFyZSBhIHRvbiBvZiBwaXhlbHMgYmV0d2VlbiB0aGUgd29ybGQgb3JpZ2luIGFuZCB0aGUgZWRnZSBvZiB0aGUgdGlsZS5cXG4vLyBUaGUgZ2xzbCBzcGVjIG9ubHkgZ3VhcmFudGVlcyAxNiBiaXRzIG9mIHByZWNpc2lvbiBmb3IgaGlnaHAgZmxvYXRzLiBXZSBuZWVkIG1vcmUgdGhhbiB0aGF0Llxcbi8vXFxuLy8gVGhlIHBpeGVsX2Nvb3JkIGlzIHBhc3NlZCBpbiBhcyB0d28gMTYgYml0IHZhbHVlczpcXG4vLyBwaXhlbF9jb29yZF91cHBlciA9IGZsb29yKHBpeGVsX2Nvb3JkIC8gMl4xNilcXG4vLyBwaXhlbF9jb29yZF9sb3dlciA9IG1vZChwaXhlbF9jb29yZCwgMl4xNilcXG4vL1xcbi8vIFRoZSBvZmZzZXQgaXMgY2FsY3VsYXRlZCBpbiBhIHNlcmllcyBvZiBzdGVwcyB0aGF0IHNob3VsZCBwcmVzZXJ2ZSB0aGlzIHByZWNpc2lvbjpcXG52ZWMyIGdldF9wYXR0ZXJuX3Bvcyhjb25zdCB2ZWMyIHBpeGVsX2Nvb3JkX3VwcGVyLCBjb25zdCB2ZWMyIHBpeGVsX2Nvb3JkX2xvd2VyLFxcbiAgICBjb25zdCB2ZWMyIHBhdHRlcm5fc2l6ZSwgY29uc3QgZmxvYXQgdGlsZV91bml0c190b19waXhlbHMsIGNvbnN0IHZlYzIgcG9zKSB7XFxuXFxuICAgIHZlYzIgb2Zmc2V0ID0gbW9kKG1vZChtb2QocGl4ZWxfY29vcmRfdXBwZXIsIHBhdHRlcm5fc2l6ZSkgKiAyNTYuMCwgcGF0dGVybl9zaXplKSAqIDI1Ni4wICsgcGl4ZWxfY29vcmRfbG93ZXIsIHBhdHRlcm5fc2l6ZSk7XFxuICAgIHJldHVybiAodGlsZV91bml0c190b19waXhlbHMgKiBwb3MgKyBvZmZzZXQpIC8gcGF0dGVybl9zaXplO1xcbn1cXG5cIn0sYmFja2dyb3VuZDp7ZnJhZ21lbnRTb3VyY2U6XCJ1bmlmb3JtIHZlYzQgdV9jb2xvcjtcXG51bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTtcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIGdsX0ZyYWdDb2xvciA9IHVfY29sb3IgKiB1X29wYWNpdHk7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xcblxcbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcXG59XFxuXCJ9LGJhY2tncm91bmRQYXR0ZXJuOntmcmFnbWVudFNvdXJjZTpcInVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYTtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2E7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl90bF9iO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYjtcXG51bmlmb3JtIHZlYzIgdV90ZXhzaXplO1xcbnVuaWZvcm0gZmxvYXQgdV9taXg7XFxudW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcXG5cXG52YXJ5aW5nIHZlYzIgdl9wb3NfYTtcXG52YXJ5aW5nIHZlYzIgdl9wb3NfYjtcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIHZlYzIgaW1hZ2Vjb29yZCA9IG1vZCh2X3Bvc19hLCAxLjApO1xcbiAgICB2ZWMyIHBvcyA9IG1peCh1X3BhdHRlcm5fdGxfYSAvIHVfdGV4c2l6ZSwgdV9wYXR0ZXJuX2JyX2EgLyB1X3RleHNpemUsIGltYWdlY29vcmQpO1xcbiAgICB2ZWM0IGNvbG9yMSA9IHRleHR1cmUyRCh1X2ltYWdlLCBwb3MpO1xcblxcbiAgICB2ZWMyIGltYWdlY29vcmRfYiA9IG1vZCh2X3Bvc19iLCAxLjApO1xcbiAgICB2ZWMyIHBvczIgPSBtaXgodV9wYXR0ZXJuX3RsX2IgLyB1X3RleHNpemUsIHVfcGF0dGVybl9icl9iIC8gdV90ZXhzaXplLCBpbWFnZWNvb3JkX2IpO1xcbiAgICB2ZWM0IGNvbG9yMiA9IHRleHR1cmUyRCh1X2ltYWdlLCBwb3MyKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gbWl4KGNvbG9yMSwgY29sb3IyLCB1X21peCkgKiB1X29wYWNpdHk7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcInVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3NpemVfYTtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3NpemVfYjtcXG51bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF91cHBlcjtcXG51bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF9sb3dlcjtcXG51bmlmb3JtIGZsb2F0IHVfc2NhbGVfYTtcXG51bmlmb3JtIGZsb2F0IHVfc2NhbGVfYjtcXG51bmlmb3JtIGZsb2F0IHVfdGlsZV91bml0c190b19waXhlbHM7XFxuXFxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XFxuXFxudmFyeWluZyB2ZWMyIHZfcG9zX2E7XFxudmFyeWluZyB2ZWMyIHZfcG9zX2I7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XFxuXFxuICAgIHZfcG9zX2EgPSBnZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlciwgdV9waXhlbF9jb29yZF9sb3dlciwgdV9zY2FsZV9hICogdV9wYXR0ZXJuX3NpemVfYSwgdV90aWxlX3VuaXRzX3RvX3BpeGVscywgYV9wb3MpO1xcbiAgICB2X3Bvc19iID0gZ2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsIHVfcGl4ZWxfY29vcmRfbG93ZXIsIHVfc2NhbGVfYiAqIHVfcGF0dGVybl9zaXplX2IsIHVfdGlsZV91bml0c190b19waXhlbHMsIGFfcG9zKTtcXG59XFxuXCJ9LGNpcmNsZTp7ZnJhZ21lbnRTb3VyY2U6XCIjcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgcmFkaXVzXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBzdHJva2VfY29sb3JcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgc3Ryb2tlX3dpZHRoXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHN0cm9rZV9vcGFjaXR5XFxuXFxudmFyeWluZyB2ZWMzIHZfZGF0YTtcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCByYWRpdXNcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IHN0cm9rZV9jb2xvclxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHN0cm9rZV93aWR0aFxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHN0cm9rZV9vcGFjaXR5XFxuXFxuICAgIHZlYzIgZXh0cnVkZSA9IHZfZGF0YS54eTtcXG4gICAgZmxvYXQgZXh0cnVkZV9sZW5ndGggPSBsZW5ndGgoZXh0cnVkZSk7XFxuXFxuICAgIGxvd3AgZmxvYXQgYW50aWFsaWFzYmx1ciA9IHZfZGF0YS56O1xcbiAgICBmbG9hdCBhbnRpYWxpYXNlZF9ibHVyID0gLW1heChibHVyLCBhbnRpYWxpYXNibHVyKTtcXG5cXG4gICAgZmxvYXQgb3BhY2l0eV90ID0gc21vb3Roc3RlcCgwLjAsIGFudGlhbGlhc2VkX2JsdXIsIGV4dHJ1ZGVfbGVuZ3RoIC0gMS4wKTtcXG5cXG4gICAgZmxvYXQgY29sb3JfdCA9IHN0cm9rZV93aWR0aCA8IDAuMDEgPyAwLjAgOiBzbW9vdGhzdGVwKFxcbiAgICAgICAgYW50aWFsaWFzZWRfYmx1cixcXG4gICAgICAgIDAuMCxcXG4gICAgICAgIGV4dHJ1ZGVfbGVuZ3RoIC0gcmFkaXVzIC8gKHJhZGl1cyArIHN0cm9rZV93aWR0aClcXG4gICAgKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gb3BhY2l0eV90ICogbWl4KGNvbG9yICogb3BhY2l0eSwgc3Ryb2tlX2NvbG9yICogc3Ryb2tlX29wYWNpdHksIGNvbG9yX3QpO1xcblxcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xcbiNlbmRpZlxcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxudW5pZm9ybSBib29sIHVfc2NhbGVfd2l0aF9tYXA7XFxudW5pZm9ybSBib29sIHVfcGl0Y2hfd2l0aF9tYXA7XFxudW5pZm9ybSB2ZWMyIHVfZXh0cnVkZV9zY2FsZTtcXG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgcmFkaXVzXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBzdHJva2VfY29sb3JcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgc3Ryb2tlX3dpZHRoXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHN0cm9rZV9vcGFjaXR5XFxuXFxudmFyeWluZyB2ZWMzIHZfZGF0YTtcXG5cXG52b2lkIG1haW4odm9pZCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgcmFkaXVzXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBzdHJva2VfY29sb3JcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBzdHJva2Vfd2lkdGhcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBzdHJva2Vfb3BhY2l0eVxcblxcbiAgICAvLyB1bmVuY29kZSB0aGUgZXh0cnVzaW9uIHZlY3RvciB0aGF0IHdlIHNudWNrIGludG8gdGhlIGFfcG9zIHZlY3RvclxcbiAgICB2ZWMyIGV4dHJ1ZGUgPSB2ZWMyKG1vZChhX3BvcywgMi4wKSAqIDIuMCAtIDEuMCk7XFxuXFxuICAgIC8vIG11bHRpcGx5IGFfcG9zIGJ5IDAuNSwgc2luY2Ugd2UgaGFkIGl0ICogMiBpbiBvcmRlciB0byBzbmVha1xcbiAgICAvLyBpbiBleHRydXNpb24gZGF0YVxcbiAgICB2ZWMyIGNpcmNsZV9jZW50ZXIgPSBmbG9vcihhX3BvcyAqIDAuNSk7XFxuICAgIGlmICh1X3BpdGNoX3dpdGhfbWFwKSB7XFxuICAgICAgICB2ZWMyIGNvcm5lcl9wb3NpdGlvbiA9IGNpcmNsZV9jZW50ZXI7XFxuICAgICAgICBpZiAodV9zY2FsZV93aXRoX21hcCkge1xcbiAgICAgICAgICAgIGNvcm5lcl9wb3NpdGlvbiArPSBleHRydWRlICogKHJhZGl1cyArIHN0cm9rZV93aWR0aCkgKiB1X2V4dHJ1ZGVfc2NhbGU7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIC8vIFBpdGNoaW5nIHRoZSBjaXJjbGUgd2l0aCB0aGUgbWFwIGVmZmVjdGl2ZWx5IHNjYWxlcyBpdCB3aXRoIHRoZSBtYXBcXG4gICAgICAgICAgICAvLyBUbyBjb3VudGVyYWN0IHRoZSBlZmZlY3QgZm9yIHBpdGNoLXNjYWxlOiB2aWV3cG9ydCwgd2UgcmVzY2FsZSB0aGVcXG4gICAgICAgICAgICAvLyB3aG9sZSBjaXJjbGUgYmFzZWQgb24gdGhlIHBpdGNoIHNjYWxpbmcgZWZmZWN0IGF0IGl0cyBjZW50cmFsIHBvaW50XFxuICAgICAgICAgICAgdmVjNCBwcm9qZWN0ZWRfY2VudGVyID0gdV9tYXRyaXggKiB2ZWM0KGNpcmNsZV9jZW50ZXIsIDAsIDEpO1xcbiAgICAgICAgICAgIGNvcm5lcl9wb3NpdGlvbiArPSBleHRydWRlICogKHJhZGl1cyArIHN0cm9rZV93aWR0aCkgKiB1X2V4dHJ1ZGVfc2NhbGUgKiAocHJvamVjdGVkX2NlbnRlci53IC8gdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlKTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGNvcm5lcl9wb3NpdGlvbiwgMCwgMSk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChjaXJjbGVfY2VudGVyLCAwLCAxKTtcXG5cXG4gICAgICAgIGlmICh1X3NjYWxlX3dpdGhfbWFwKSB7XFxuICAgICAgICAgICAgZ2xfUG9zaXRpb24ueHkgKz0gZXh0cnVkZSAqIChyYWRpdXMgKyBzdHJva2Vfd2lkdGgpICogdV9leHRydWRlX3NjYWxlICogdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBnbF9Qb3NpdGlvbi54eSArPSBleHRydWRlICogKHJhZGl1cyArIHN0cm9rZV93aWR0aCkgKiB1X2V4dHJ1ZGVfc2NhbGUgKiBnbF9Qb3NpdGlvbi53O1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIC8vIFRoaXMgaXMgYSBtaW5pbXVtIGJsdXIgZGlzdGFuY2UgdGhhdCBzZXJ2ZXMgYXMgYSBmYXV4LWFudGlhbGlhc2luZyBmb3JcXG4gICAgLy8gdGhlIGNpcmNsZS4gc2luY2UgYmx1ciBpcyBhIHJhdGlvIG9mIHRoZSBjaXJjbGUncyBzaXplIGFuZCB0aGUgaW50ZW50IGlzXFxuICAgIC8vIHRvIGtlZXAgdGhlIGJsdXIgYXQgcm91Z2hseSAxcHgsIHRoZSB0d28gYXJlIGludmVyc2VseSByZWxhdGVkLlxcbiAgICBsb3dwIGZsb2F0IGFudGlhbGlhc2JsdXIgPSAxLjAgLyBERVZJQ0VfUElYRUxfUkFUSU8gLyAocmFkaXVzICsgc3Ryb2tlX3dpZHRoKTtcXG5cXG4gICAgdl9kYXRhID0gdmVjMyhleHRydWRlLngsIGV4dHJ1ZGUueSwgYW50aWFsaWFzYmx1cik7XFxufVxcblwifSxjbGlwcGluZ01hc2s6e2ZyYWdtZW50U291cmNlOlwidm9pZCBtYWluKCkge1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxufVxcblwiLHZlcnRleFNvdXJjZTpcImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xcblxcbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcXG59XFxuXCJ9LGhlYXRtYXA6e2ZyYWdtZW50U291cmNlOlwiI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCBmbG9hdCB3ZWlnaHRcXG5cXG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfaW50ZW5zaXR5O1xcbnZhcnlpbmcgdmVjMiB2X2V4dHJ1ZGU7XFxuXFxuLy8gR2F1c3NpYW4ga2VybmVsIGNvZWZmaWNpZW50OiAxIC8gc3FydCgyICogUEkpXFxuI2RlZmluZSBHQVVTU19DT0VGIDAuMzk4OTQyMjgwNDAxNDMyN1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgZmxvYXQgd2VpZ2h0XFxuXFxuICAgIC8vIEtlcm5lbCBkZW5zaXR5IGVzdGltYXRpb24gd2l0aCBhIEdhdXNzaWFuIGtlcm5lbCBvZiBzaXplIDV4NVxcbiAgICBmbG9hdCBkID0gLTAuNSAqIDMuMCAqIDMuMCAqIGRvdCh2X2V4dHJ1ZGUsIHZfZXh0cnVkZSk7XFxuICAgIGZsb2F0IHZhbCA9IHdlaWdodCAqIHVfaW50ZW5zaXR5ICogR0FVU1NfQ09FRiAqIGV4cChkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2YWwsIDEuMCwgMS4wLCAxLjApO1xcblxcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xcbiNlbmRpZlxcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCIjcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIGZsb2F0IHdlaWdodFxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCByYWRpdXNcXG5cXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxudW5pZm9ybSBmbG9hdCB1X2V4dHJ1ZGVfc2NhbGU7XFxudW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7XFxudW5pZm9ybSBmbG9hdCB1X2ludGVuc2l0eTtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG5cXG52YXJ5aW5nIHZlYzIgdl9leHRydWRlO1xcblxcbi8vIEVmZmVjdGl2ZSBcXFwiMFxcXCIgaW4gdGhlIGtlcm5lbCBkZW5zaXR5IHRleHR1cmUgdG8gYWRqdXN0IHRoZSBrZXJuZWwgc2l6ZSB0bztcXG4vLyB0aGlzIGVtcGlyaWNhbGx5IGNob3NlbiBudW1iZXIgbWluaW1pemVzIGFydGlmYWN0cyBvbiBvdmVybGFwcGluZyBrZXJuZWxzXFxuLy8gZm9yIHR5cGljYWwgaGVhdG1hcCBjYXNlcyAoYXNzdW1pbmcgY2x1c3RlcmVkIHNvdXJjZSlcXG5jb25zdCBoaWdocCBmbG9hdCBaRVJPID0gMS4wIC8gMjU1LjAgLyAxNi4wO1xcblxcbi8vIEdhdXNzaWFuIGtlcm5lbCBjb2VmZmljaWVudDogMSAvIHNxcnQoMiAqIFBJKVxcbiNkZWZpbmUgR0FVU1NfQ09FRiAwLjM5ODk0MjI4MDQwMTQzMjdcXG5cXG52b2lkIG1haW4odm9pZCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCBmbG9hdCB3ZWlnaHRcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCByYWRpdXNcXG5cXG4gICAgLy8gdW5lbmNvZGUgdGhlIGV4dHJ1c2lvbiB2ZWN0b3IgdGhhdCB3ZSBzbnVjayBpbnRvIHRoZSBhX3BvcyB2ZWN0b3JcXG4gICAgdmVjMiB1bnNjYWxlZF9leHRydWRlID0gdmVjMihtb2QoYV9wb3MsIDIuMCkgKiAyLjAgLSAxLjApO1xcblxcbiAgICAvLyBUaGlzICdleHRydWRlJyBjb21lcyBpbiByYW5naW5nIGZyb20gWy0xLCAtMV0sIHRvIFsxLCAxXS4gIFdlJ2xsIHVzZVxcbiAgICAvLyBpdCB0byBwcm9kdWNlIHRoZSB2ZXJ0aWNlcyBvZiBhIHNxdWFyZSBtZXNoIGZyYW1pbmcgdGhlIHBvaW50IGZlYXR1cmVcXG4gICAgLy8gd2UncmUgYWRkaW5nIHRvIHRoZSBrZXJuZWwgZGVuc2l0eSB0ZXh0dXJlLiAgV2UnbGwgYWxzbyBwYXNzIGl0IGFzXFxuICAgIC8vIGEgdmFyeWluZywgc28gdGhhdCB0aGUgZnJhZ21lbnQgc2hhZGVyIGNhbiBkZXRlcm1pbmUgdGhlIGRpc3RhbmNlIG9mXFxuICAgIC8vIGVhY2ggZnJhZ21lbnQgZnJvbSB0aGUgcG9pbnQgZmVhdHVyZS5cXG4gICAgLy8gQmVmb3JlIHdlIGRvIHNvLCB3ZSBuZWVkIHRvIHNjYWxlIGl0IHVwIHN1ZmZpY2llbnRseSBzbyB0aGF0IHRoZVxcbiAgICAvLyBrZXJuZWwgZmFsbHMgZWZmZWN0aXZlbHkgdG8gemVybyBhdCB0aGUgZWRnZSBvZiB0aGUgbWVzaC5cXG4gICAgLy8gVGhhdCBpcywgd2Ugd2FudCB0byBrbm93IFMgc3VjaCB0aGF0XFxuICAgIC8vIHdlaWdodCAqIHVfaW50ZW5zaXR5ICogR0FVU1NfQ09FRiAqIGV4cCgtMC41ICogMy4wXjIgKiBTXjIpID09IFpFUk9cXG4gICAgLy8gV2hpY2ggc29sdmVzIHRvOlxcbiAgICAvLyBTID0gc3FydCgtMi4wICogbG9nKFpFUk8gLyAod2VpZ2h0ICogdV9pbnRlbnNpdHkgKiBHQVVTU19DT0VGKSkpIC8gMy4wXFxuICAgIGZsb2F0IFMgPSBzcXJ0KC0yLjAgKiBsb2coWkVSTyAvIHdlaWdodCAvIHVfaW50ZW5zaXR5IC8gR0FVU1NfQ09FRikpIC8gMy4wO1xcblxcbiAgICAvLyBQYXNzIHRoZSB2YXJ5aW5nIGluIHVuaXRzIG9mIHJhZGl1c1xcbiAgICB2X2V4dHJ1ZGUgPSBTICogdW5zY2FsZWRfZXh0cnVkZTtcXG5cXG4gICAgLy8gU2NhbGUgYnkgcmFkaXVzIGFuZCB0aGUgem9vbS1iYXNlZCBzY2FsZSBmYWN0b3IgdG8gcHJvZHVjZSBhY3R1YWxcXG4gICAgLy8gbWVzaCBwb3NpdGlvblxcbiAgICB2ZWMyIGV4dHJ1ZGUgPSB2X2V4dHJ1ZGUgKiByYWRpdXMgKiB1X2V4dHJ1ZGVfc2NhbGU7XFxuXFxuICAgIC8vIG11bHRpcGx5IGFfcG9zIGJ5IDAuNSwgc2luY2Ugd2UgaGFkIGl0ICogMiBpbiBvcmRlciB0byBzbmVha1xcbiAgICAvLyBpbiBleHRydXNpb24gZGF0YVxcbiAgICB2ZWM0IHBvcyA9IHZlYzQoZmxvb3IoYV9wb3MgKiAwLjUpICsgZXh0cnVkZSwgMCwgMSk7XFxuXFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiBwb3M7XFxufVxcblwifSxoZWF0bWFwVGV4dHVyZTp7ZnJhZ21lbnRTb3VyY2U6XCJ1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVfY29sb3JfcmFtcDtcXG51bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTtcXG52YXJ5aW5nIHZlYzIgdl9wb3M7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICBmbG9hdCB0ID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHZfcG9zKS5yO1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVfY29sb3JfcmFtcCwgdmVjMih0LCAwLjUpKTtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgKiB1X29wYWNpdHk7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcInVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG51bmlmb3JtIHZlYzIgdV93b3JsZDtcXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG52YXJ5aW5nIHZlYzIgdl9wb3M7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcyAqIHVfd29ybGQsIDAsIDEpO1xcblxcbiAgICB2X3Bvcy54ID0gYV9wb3MueDtcXG4gICAgdl9wb3MueSA9IDEuMCAtIGFfcG9zLnk7XFxufVxcblwifSxjb2xsaXNpb25Cb3g6e2ZyYWdtZW50U291cmNlOlwiXFxudmFyeWluZyBmbG9hdCB2X3BsYWNlZDtcXG52YXJ5aW5nIGZsb2F0IHZfbm90VXNlZDtcXG5cXG52b2lkIG1haW4oKSB7XFxuXFxuICAgIGZsb2F0IGFscGhhID0gMC41O1xcblxcbiAgICAvLyBSZWQgPSBjb2xsaXNpb24sIGhpZGUgbGFiZWxcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDAuMCwgMC4wLCAxLjApICogYWxwaGE7XFxuXFxuICAgIC8vIEJsdWUgPSBubyBjb2xsaXNpb24sIGxhYmVsIGlzIHNob3dpbmdcXG4gICAgaWYgKHZfcGxhY2VkID4gMC41KSB7XFxuICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAxLjAsIDAuNSkgKiBhbHBoYTtcXG4gICAgfVxcblxcbiAgICBpZiAodl9ub3RVc2VkID4gMC41KSB7XFxuICAgICAgICAvLyBUaGlzIGJveCBub3QgdXNlZCwgZmFkZSBpdCBvdXRcXG4gICAgICAgIGdsX0ZyYWdDb2xvciAqPSAuMTtcXG4gICAgfVxcbn1cIix2ZXJ0ZXhTb3VyY2U6XCJhdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG5hdHRyaWJ1dGUgdmVjMiBhX2FuY2hvcl9wb3M7XFxuYXR0cmlidXRlIHZlYzIgYV9leHRydWRlO1xcbmF0dHJpYnV0ZSB2ZWMyIGFfcGxhY2VkO1xcblxcbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG51bmlmb3JtIHZlYzIgdV9leHRydWRlX3NjYWxlO1xcbnVuaWZvcm0gZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO1xcblxcbnZhcnlpbmcgZmxvYXQgdl9wbGFjZWQ7XFxudmFyeWluZyBmbG9hdCB2X25vdFVzZWQ7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICB2ZWM0IHByb2plY3RlZFBvaW50ID0gdV9tYXRyaXggKiB2ZWM0KGFfYW5jaG9yX3BvcywgMCwgMSk7XFxuICAgIGhpZ2hwIGZsb2F0IGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2UgPSBwcm9qZWN0ZWRQb2ludC53O1xcbiAgICBoaWdocCBmbG9hdCBjb2xsaXNpb25fcGVyc3BlY3RpdmVfcmF0aW8gPSBjbGFtcChcXG4gICAgICAgIDAuNSArIDAuNSAqICh1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UgLyBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlKSxcXG4gICAgICAgIDAuMCwgLy8gUHJldmVudHMgb3ZlcnNpemVkIG5lYXItZmllbGQgYm94ZXMgaW4gcGl0Y2hlZC9vdmVyem9vbWVkIHRpbGVzXFxuICAgICAgICA0LjApO1xcblxcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMC4wLCAxLjApO1xcbiAgICBnbF9Qb3NpdGlvbi54eSArPSBhX2V4dHJ1ZGUgKiB1X2V4dHJ1ZGVfc2NhbGUgKiBnbF9Qb3NpdGlvbi53ICogY29sbGlzaW9uX3BlcnNwZWN0aXZlX3JhdGlvO1xcblxcbiAgICB2X3BsYWNlZCA9IGFfcGxhY2VkLng7XFxuICAgIHZfbm90VXNlZCA9IGFfcGxhY2VkLnk7XFxufVxcblwifSxjb2xsaXNpb25DaXJjbGU6e2ZyYWdtZW50U291cmNlOlwidW5pZm9ybSBmbG9hdCB1X292ZXJzY2FsZV9mYWN0b3I7XFxuXFxudmFyeWluZyBmbG9hdCB2X3BsYWNlZDtcXG52YXJ5aW5nIGZsb2F0IHZfbm90VXNlZDtcXG52YXJ5aW5nIGZsb2F0IHZfcmFkaXVzO1xcbnZhcnlpbmcgdmVjMiB2X2V4dHJ1ZGU7XFxudmFyeWluZyB2ZWMyIHZfZXh0cnVkZV9zY2FsZTtcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIGZsb2F0IGFscGhhID0gMC41O1xcblxcbiAgICAvLyBSZWQgPSBjb2xsaXNpb24sIGhpZGUgbGFiZWxcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMS4wLCAwLjAsIDAuMCwgMS4wKSAqIGFscGhhO1xcblxcbiAgICAvLyBCbHVlID0gbm8gY29sbGlzaW9uLCBsYWJlbCBpcyBzaG93aW5nXFxuICAgIGlmICh2X3BsYWNlZCA+IDAuNSkge1xcbiAgICAgICAgY29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAxLjAsIDAuNSkgKiBhbHBoYTtcXG4gICAgfVxcblxcbiAgICBpZiAodl9ub3RVc2VkID4gMC41KSB7XFxuICAgICAgICAvLyBUaGlzIGJveCBub3QgdXNlZCwgZmFkZSBpdCBvdXRcXG4gICAgICAgIGNvbG9yICo9IC4yO1xcbiAgICB9XFxuXFxuICAgIGZsb2F0IGV4dHJ1ZGVfc2NhbGVfbGVuZ3RoID0gbGVuZ3RoKHZfZXh0cnVkZV9zY2FsZSk7XFxuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoID0gbGVuZ3RoKHZfZXh0cnVkZSkgKiBleHRydWRlX3NjYWxlX2xlbmd0aDtcXG4gICAgZmxvYXQgc3Ryb2tlX3dpZHRoID0gMTUuMCAqIGV4dHJ1ZGVfc2NhbGVfbGVuZ3RoIC8gdV9vdmVyc2NhbGVfZmFjdG9yO1xcbiAgICBmbG9hdCByYWRpdXMgPSB2X3JhZGl1cyAqIGV4dHJ1ZGVfc2NhbGVfbGVuZ3RoO1xcblxcbiAgICBmbG9hdCBkaXN0YW5jZV90b19lZGdlID0gYWJzKGV4dHJ1ZGVfbGVuZ3RoIC0gcmFkaXVzKTtcXG4gICAgZmxvYXQgb3BhY2l0eV90ID0gc21vb3Roc3RlcCgtc3Ryb2tlX3dpZHRoLCAwLjAsIC1kaXN0YW5jZV90b19lZGdlKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gb3BhY2l0eV90ICogY29sb3I7XFxufVxcblwiLHZlcnRleFNvdXJjZTpcImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xcbmF0dHJpYnV0ZSB2ZWMyIGFfYW5jaG9yX3BvcztcXG5hdHRyaWJ1dGUgdmVjMiBhX2V4dHJ1ZGU7XFxuYXR0cmlidXRlIHZlYzIgYV9wbGFjZWQ7XFxuXFxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcbnVuaWZvcm0gdmVjMiB1X2V4dHJ1ZGVfc2NhbGU7XFxudW5pZm9ybSBmbG9hdCB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U7XFxuXFxudmFyeWluZyBmbG9hdCB2X3BsYWNlZDtcXG52YXJ5aW5nIGZsb2F0IHZfbm90VXNlZDtcXG52YXJ5aW5nIGZsb2F0IHZfcmFkaXVzO1xcblxcbnZhcnlpbmcgdmVjMiB2X2V4dHJ1ZGU7XFxudmFyeWluZyB2ZWMyIHZfZXh0cnVkZV9zY2FsZTtcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIHZlYzQgcHJvamVjdGVkUG9pbnQgPSB1X21hdHJpeCAqIHZlYzQoYV9hbmNob3JfcG9zLCAwLCAxKTtcXG4gICAgaGlnaHAgZmxvYXQgY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZSA9IHByb2plY3RlZFBvaW50Lnc7XFxuICAgIGhpZ2hwIGZsb2F0IGNvbGxpc2lvbl9wZXJzcGVjdGl2ZV9yYXRpbyA9IGNsYW1wKFxcbiAgICAgICAgMC41ICsgMC41ICogKHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSAvIGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2UpLFxcbiAgICAgICAgMC4wLCAvLyBQcmV2ZW50cyBvdmVyc2l6ZWQgbmVhci1maWVsZCBjaXJjbGVzIGluIHBpdGNoZWQvb3Zlcnpvb21lZCB0aWxlc1xcbiAgICAgICAgNC4wKTtcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAuMCwgMS4wKTtcXG5cXG4gICAgaGlnaHAgZmxvYXQgcGFkZGluZ19mYWN0b3IgPSAxLjI7IC8vIFBhZCB0aGUgdmVydGljZXMgc2xpZ2h0bHkgdG8gbWFrZSByb29tIGZvciBhbnRpLWFsaWFzIGJsdXJcXG4gICAgZ2xfUG9zaXRpb24ueHkgKz0gYV9leHRydWRlICogdV9leHRydWRlX3NjYWxlICogcGFkZGluZ19mYWN0b3IgKiBnbF9Qb3NpdGlvbi53ICogY29sbGlzaW9uX3BlcnNwZWN0aXZlX3JhdGlvO1xcblxcbiAgICB2X3BsYWNlZCA9IGFfcGxhY2VkLng7XFxuICAgIHZfbm90VXNlZCA9IGFfcGxhY2VkLnk7XFxuICAgIHZfcmFkaXVzID0gYWJzKGFfZXh0cnVkZS55KTsgLy8gV2UgZG9uJ3QgcGl0Y2ggdGhlIGNpcmNsZXMsIHNvIGJvdGggdW5pdHMgb2YgdGhlIGV4dHJ1c2lvbiB2ZWN0b3IgYXJlIGVxdWFsIGluIG1hZ25pdHVkZSB0byB0aGUgcmFkaXVzXFxuXFxuICAgIHZfZXh0cnVkZSA9IGFfZXh0cnVkZSAqIHBhZGRpbmdfZmFjdG9yO1xcbiAgICB2X2V4dHJ1ZGVfc2NhbGUgPSB1X2V4dHJ1ZGVfc2NhbGUgKiB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UgKiBjb2xsaXNpb25fcGVyc3BlY3RpdmVfcmF0aW87XFxufVxcblwifSxkZWJ1Zzp7ZnJhZ21lbnRTb3VyY2U6XCJ1bmlmb3JtIGhpZ2hwIHZlYzQgdV9jb2xvcjtcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIGdsX0ZyYWdDb2xvciA9IHVfY29sb3I7XFxufVxcblwiLHZlcnRleFNvdXJjZTpcImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xcblxcbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcXG59XFxuXCJ9LGZpbGw6e2ZyYWdtZW50U291cmNlOlwiI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yICogb3BhY2l0eTtcXG5cXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcXG4jZW5kaWZcXG59XFxuXCIsdmVydGV4U291cmNlOlwiYXR0cmlidXRlIHZlYzIgYV9wb3M7XFxuXFxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcblxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XFxufVxcblwifSxmaWxsT3V0bGluZTp7ZnJhZ21lbnRTb3VyY2U6XCIjcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgb3V0bGluZV9jb2xvclxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxudmFyeWluZyB2ZWMyIHZfcG9zO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBvdXRsaW5lX2NvbG9yXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbiAgICBmbG9hdCBkaXN0ID0gbGVuZ3RoKHZfcG9zIC0gZ2xfRnJhZ0Nvb3JkLnh5KTtcXG4gICAgZmxvYXQgYWxwaGEgPSAxLjAgLSBzbW9vdGhzdGVwKDAuMCwgMS4wLCBkaXN0KTtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gb3V0bGluZV9jb2xvciAqIChhbHBoYSAqIG9wYWNpdHkpO1xcblxcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xcbiNlbmRpZlxcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCJhdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG5cXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHVfd29ybGQ7XFxuXFxudmFyeWluZyB2ZWMyIHZfcG9zO1xcblxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBvdXRsaW5lX2NvbG9yXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgb3V0bGluZV9jb2xvclxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xcbiAgICB2X3BvcyA9IChnbF9Qb3NpdGlvbi54eSAvIGdsX1Bvc2l0aW9uLncgKyAxLjApIC8gMi4wICogdV93b3JsZDtcXG59XFxuXCJ9LGZpbGxPdXRsaW5lUGF0dGVybjp7ZnJhZ21lbnRTb3VyY2U6XCJ1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2E7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9icl9hO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYjtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2I7XFxudW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTtcXG51bmlmb3JtIGZsb2F0IHVfbWl4O1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XFxuXFxudmFyeWluZyB2ZWMyIHZfcG9zX2E7XFxudmFyeWluZyB2ZWMyIHZfcG9zX2I7XFxudmFyeWluZyB2ZWMyIHZfcG9zO1xcblxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG4gICAgdmVjMiBpbWFnZWNvb3JkID0gbW9kKHZfcG9zX2EsIDEuMCk7XFxuICAgIHZlYzIgcG9zID0gbWl4KHVfcGF0dGVybl90bF9hIC8gdV90ZXhzaXplLCB1X3BhdHRlcm5fYnJfYSAvIHVfdGV4c2l6ZSwgaW1hZ2Vjb29yZCk7XFxuICAgIHZlYzQgY29sb3IxID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHBvcyk7XFxuXFxuICAgIHZlYzIgaW1hZ2Vjb29yZF9iID0gbW9kKHZfcG9zX2IsIDEuMCk7XFxuICAgIHZlYzIgcG9zMiA9IG1peCh1X3BhdHRlcm5fdGxfYiAvIHVfdGV4c2l6ZSwgdV9wYXR0ZXJuX2JyX2IgLyB1X3RleHNpemUsIGltYWdlY29vcmRfYik7XFxuICAgIHZlYzQgY29sb3IyID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHBvczIpO1xcblxcbiAgICAvLyBmaW5kIGRpc3RhbmNlIHRvIG91dGxpbmUgZm9yIGFscGhhIGludGVycG9sYXRpb25cXG5cXG4gICAgZmxvYXQgZGlzdCA9IGxlbmd0aCh2X3BvcyAtIGdsX0ZyYWdDb29yZC54eSk7XFxuICAgIGZsb2F0IGFscGhhID0gMS4wIC0gc21vb3Roc3RlcCgwLjAsIDEuMCwgZGlzdCk7XFxuXFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IG1peChjb2xvcjEsIGNvbG9yMiwgdV9taXgpICogYWxwaGEgKiBvcGFjaXR5O1xcblxcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xcbiNlbmRpZlxcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHVfd29ybGQ7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2E7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2I7XFxudW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfdXBwZXI7XFxudW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfbG93ZXI7XFxudW5pZm9ybSBmbG9hdCB1X3NjYWxlX2E7XFxudW5pZm9ybSBmbG9hdCB1X3NjYWxlX2I7XFxudW5pZm9ybSBmbG9hdCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzO1xcblxcbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xcblxcbnZhcnlpbmcgdmVjMiB2X3Bvc19hO1xcbnZhcnlpbmcgdmVjMiB2X3Bvc19iO1xcbnZhcnlpbmcgdmVjMiB2X3BvcztcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcXG5cXG4gICAgdl9wb3NfYSA9IGdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLCB1X3BpeGVsX2Nvb3JkX2xvd2VyLCB1X3NjYWxlX2EgKiB1X3BhdHRlcm5fc2l6ZV9hLCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLCBhX3Bvcyk7XFxuICAgIHZfcG9zX2IgPSBnZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlciwgdV9waXhlbF9jb29yZF9sb3dlciwgdV9zY2FsZV9iICogdV9wYXR0ZXJuX3NpemVfYiwgdV90aWxlX3VuaXRzX3RvX3BpeGVscywgYV9wb3MpO1xcblxcbiAgICB2X3BvcyA9IChnbF9Qb3NpdGlvbi54eSAvIGdsX1Bvc2l0aW9uLncgKyAxLjApIC8gMi4wICogdV93b3JsZDtcXG59XFxuXCJ9LGZpbGxQYXR0ZXJuOntmcmFnbWVudFNvdXJjZTpcInVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYTtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2E7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl90bF9iO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYjtcXG51bmlmb3JtIHZlYzIgdV90ZXhzaXplO1xcbnVuaWZvcm0gZmxvYXQgdV9taXg7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcXG5cXG52YXJ5aW5nIHZlYzIgdl9wb3NfYTtcXG52YXJ5aW5nIHZlYzIgdl9wb3NfYjtcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxuICAgIHZlYzIgaW1hZ2Vjb29yZCA9IG1vZCh2X3Bvc19hLCAxLjApO1xcbiAgICB2ZWMyIHBvcyA9IG1peCh1X3BhdHRlcm5fdGxfYSAvIHVfdGV4c2l6ZSwgdV9wYXR0ZXJuX2JyX2EgLyB1X3RleHNpemUsIGltYWdlY29vcmQpO1xcbiAgICB2ZWM0IGNvbG9yMSA9IHRleHR1cmUyRCh1X2ltYWdlLCBwb3MpO1xcblxcbiAgICB2ZWMyIGltYWdlY29vcmRfYiA9IG1vZCh2X3Bvc19iLCAxLjApO1xcbiAgICB2ZWMyIHBvczIgPSBtaXgodV9wYXR0ZXJuX3RsX2IgLyB1X3RleHNpemUsIHVfcGF0dGVybl9icl9iIC8gdV90ZXhzaXplLCBpbWFnZWNvb3JkX2IpO1xcbiAgICB2ZWM0IGNvbG9yMiA9IHRleHR1cmUyRCh1X2ltYWdlLCBwb3MyKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gbWl4KGNvbG9yMSwgY29sb3IyLCB1X21peCkgKiBvcGFjaXR5O1xcblxcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xcbiNlbmRpZlxcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2E7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2I7XFxudW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfdXBwZXI7XFxudW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfbG93ZXI7XFxudW5pZm9ybSBmbG9hdCB1X3NjYWxlX2E7XFxudW5pZm9ybSBmbG9hdCB1X3NjYWxlX2I7XFxudW5pZm9ybSBmbG9hdCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzO1xcblxcbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xcblxcbnZhcnlpbmcgdmVjMiB2X3Bvc19hO1xcbnZhcnlpbmcgdmVjMiB2X3Bvc19iO1xcblxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xcblxcbiAgICB2X3Bvc19hID0gZ2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsIHVfcGl4ZWxfY29vcmRfbG93ZXIsIHVfc2NhbGVfYSAqIHVfcGF0dGVybl9zaXplX2EsIHVfdGlsZV91bml0c190b19waXhlbHMsIGFfcG9zKTtcXG4gICAgdl9wb3NfYiA9IGdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLCB1X3BpeGVsX2Nvb3JkX2xvd2VyLCB1X3NjYWxlX2IgKiB1X3BhdHRlcm5fc2l6ZV9iLCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLCBhX3Bvcyk7XFxufVxcblwifSxmaWxsRXh0cnVzaW9uOntmcmFnbWVudFNvdXJjZTpcInZhcnlpbmcgdmVjNCB2X2NvbG9yO1xcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBiYXNlXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhlaWdodFxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBiYXNlXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGVpZ2h0XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdl9jb2xvcjtcXG5cXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcXG4jZW5kaWZcXG59XFxuXCIsdmVydGV4U291cmNlOlwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcbnVuaWZvcm0gdmVjMyB1X2xpZ2h0Y29sb3I7XFxudW5pZm9ybSBsb3dwIHZlYzMgdV9saWdodHBvcztcXG51bmlmb3JtIGxvd3AgZmxvYXQgdV9saWdodGludGVuc2l0eTtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG5hdHRyaWJ1dGUgdmVjNCBhX25vcm1hbF9lZDtcXG5cXG52YXJ5aW5nIHZlYzQgdl9jb2xvcjtcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmFzZVxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoZWlnaHRcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmFzZVxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhlaWdodFxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXFxuXFxuICAgIHZlYzMgbm9ybWFsID0gYV9ub3JtYWxfZWQueHl6O1xcblxcbiAgICBiYXNlID0gbWF4KDAuMCwgYmFzZSk7XFxuICAgIGhlaWdodCA9IG1heCgwLjAsIGhlaWdodCk7XFxuXFxuICAgIGZsb2F0IHQgPSBtb2Qobm9ybWFsLngsIDIuMCk7XFxuXFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCB0ID4gMC4wID8gaGVpZ2h0IDogYmFzZSwgMSk7XFxuXFxuICAgIC8vIFJlbGF0aXZlIGx1bWluYW5jZSAoaG93IGRhcmsvYnJpZ2h0IGlzIHRoZSBzdXJmYWNlIGNvbG9yPylcXG4gICAgZmxvYXQgY29sb3J2YWx1ZSA9IGNvbG9yLnIgKiAwLjIxMjYgKyBjb2xvci5nICogMC43MTUyICsgY29sb3IuYiAqIDAuMDcyMjtcXG5cXG4gICAgdl9jb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG5cXG4gICAgLy8gQWRkIHNsaWdodCBhbWJpZW50IGxpZ2h0aW5nIHNvIG5vIGV4dHJ1c2lvbnMgYXJlIHRvdGFsbHkgYmxhY2tcXG4gICAgdmVjNCBhbWJpZW50bGlnaHQgPSB2ZWM0KDAuMDMsIDAuMDMsIDAuMDMsIDEuMCk7XFxuICAgIGNvbG9yICs9IGFtYmllbnRsaWdodDtcXG5cXG4gICAgLy8gQ2FsY3VsYXRlIGNvcyh0aGV0YSksIHdoZXJlIHRoZXRhIGlzIHRoZSBhbmdsZSBiZXR3ZWVuIHN1cmZhY2Ugbm9ybWFsIGFuZCBkaWZmdXNlIGxpZ2h0IHJheVxcbiAgICBmbG9hdCBkaXJlY3Rpb25hbCA9IGNsYW1wKGRvdChub3JtYWwgLyAxNjM4NC4wLCB1X2xpZ2h0cG9zKSwgMC4wLCAxLjApO1xcblxcbiAgICAvLyBBZGp1c3QgZGlyZWN0aW9uYWwgc28gdGhhdFxcbiAgICAvLyB0aGUgcmFuZ2Ugb2YgdmFsdWVzIGZvciBoaWdobGlnaHQvc2hhZGluZyBpcyBuYXJyb3dlclxcbiAgICAvLyB3aXRoIGxvd2VyIGxpZ2h0IGludGVuc2l0eVxcbiAgICAvLyBhbmQgd2l0aCBsaWdodGVyL2JyaWdodGVyIHN1cmZhY2UgY29sb3JzXFxuICAgIGRpcmVjdGlvbmFsID0gbWl4KCgxLjAgLSB1X2xpZ2h0aW50ZW5zaXR5KSwgbWF4KCgxLjAgLSBjb2xvcnZhbHVlICsgdV9saWdodGludGVuc2l0eSksIDEuMCksIGRpcmVjdGlvbmFsKTtcXG5cXG4gICAgLy8gQWRkIGdyYWRpZW50IGFsb25nIHogYXhpcyBvZiBzaWRlIHN1cmZhY2VzXFxuICAgIGlmIChub3JtYWwueSAhPSAwLjApIHtcXG4gICAgICAgIGRpcmVjdGlvbmFsICo9IGNsYW1wKCh0ICsgYmFzZSkgKiBwb3coaGVpZ2h0IC8gMTUwLjAsIDAuNSksIG1peCgwLjcsIDAuOTgsIDEuMCAtIHVfbGlnaHRpbnRlbnNpdHkpLCAxLjApO1xcbiAgICB9XFxuXFxuICAgIC8vIEFzc2lnbiBmaW5hbCBjb2xvciBiYXNlZCBvbiBzdXJmYWNlICsgYW1iaWVudCBsaWdodCBjb2xvciwgZGlmZnVzZSBsaWdodCBkaXJlY3Rpb25hbCwgYW5kIGxpZ2h0IGNvbG9yXFxuICAgIC8vIHdpdGggbG93ZXIgYm91bmRzIGFkanVzdGVkIHRvIGh1ZSBvZiBsaWdodFxcbiAgICAvLyBzbyB0aGF0IHNoYWRpbmcgaXMgdGludGVkIHdpdGggdGhlIGNvbXBsZW1lbnRhcnkgKG9wcG9zaXRlKSBjb2xvciB0byB0aGUgbGlnaHQgY29sb3JcXG4gICAgdl9jb2xvci5yICs9IGNsYW1wKGNvbG9yLnIgKiBkaXJlY3Rpb25hbCAqIHVfbGlnaHRjb2xvci5yLCBtaXgoMC4wLCAwLjMsIDEuMCAtIHVfbGlnaHRjb2xvci5yKSwgMS4wKTtcXG4gICAgdl9jb2xvci5nICs9IGNsYW1wKGNvbG9yLmcgKiBkaXJlY3Rpb25hbCAqIHVfbGlnaHRjb2xvci5nLCBtaXgoMC4wLCAwLjMsIDEuMCAtIHVfbGlnaHRjb2xvci5nKSwgMS4wKTtcXG4gICAgdl9jb2xvci5iICs9IGNsYW1wKGNvbG9yLmIgKiBkaXJlY3Rpb25hbCAqIHVfbGlnaHRjb2xvci5iLCBtaXgoMC4wLCAwLjMsIDEuMCAtIHVfbGlnaHRjb2xvci5iKSwgMS4wKTtcXG59XFxuXCJ9LGZpbGxFeHRydXNpb25QYXR0ZXJuOntmcmFnbWVudFNvdXJjZTpcInVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYTtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2E7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl90bF9iO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYjtcXG51bmlmb3JtIHZlYzIgdV90ZXhzaXplO1xcbnVuaWZvcm0gZmxvYXQgdV9taXg7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcXG5cXG52YXJ5aW5nIHZlYzIgdl9wb3NfYTtcXG52YXJ5aW5nIHZlYzIgdl9wb3NfYjtcXG52YXJ5aW5nIHZlYzQgdl9saWdodGluZztcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmFzZVxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoZWlnaHRcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmFzZVxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhlaWdodFxcblxcbiAgICB2ZWMyIGltYWdlY29vcmQgPSBtb2Qodl9wb3NfYSwgMS4wKTtcXG4gICAgdmVjMiBwb3MgPSBtaXgodV9wYXR0ZXJuX3RsX2EgLyB1X3RleHNpemUsIHVfcGF0dGVybl9icl9hIC8gdV90ZXhzaXplLCBpbWFnZWNvb3JkKTtcXG4gICAgdmVjNCBjb2xvcjEgPSB0ZXh0dXJlMkQodV9pbWFnZSwgcG9zKTtcXG5cXG4gICAgdmVjMiBpbWFnZWNvb3JkX2IgPSBtb2Qodl9wb3NfYiwgMS4wKTtcXG4gICAgdmVjMiBwb3MyID0gbWl4KHVfcGF0dGVybl90bF9iIC8gdV90ZXhzaXplLCB1X3BhdHRlcm5fYnJfYiAvIHVfdGV4c2l6ZSwgaW1hZ2Vjb29yZF9iKTtcXG4gICAgdmVjNCBjb2xvcjIgPSB0ZXh0dXJlMkQodV9pbWFnZSwgcG9zMik7XFxuXFxuICAgIHZlYzQgbWl4ZWRDb2xvciA9IG1peChjb2xvcjEsIGNvbG9yMiwgdV9taXgpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBtaXhlZENvbG9yICogdl9saWdodGluZztcXG5cXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcXG4jZW5kaWZcXG59XFxuXCIsdmVydGV4U291cmNlOlwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9hO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9iO1xcbnVuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX3VwcGVyO1xcbnVuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX2xvd2VyO1xcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZV9hO1xcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZV9iO1xcbnVuaWZvcm0gZmxvYXQgdV90aWxlX3VuaXRzX3RvX3BpeGVscztcXG51bmlmb3JtIGZsb2F0IHVfaGVpZ2h0X2ZhY3RvcjtcXG5cXG51bmlmb3JtIHZlYzMgdV9saWdodGNvbG9yO1xcbnVuaWZvcm0gbG93cCB2ZWMzIHVfbGlnaHRwb3M7XFxudW5pZm9ybSBsb3dwIGZsb2F0IHVfbGlnaHRpbnRlbnNpdHk7XFxuXFxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XFxuYXR0cmlidXRlIHZlYzQgYV9ub3JtYWxfZWQ7XFxuXFxudmFyeWluZyB2ZWMyIHZfcG9zX2E7XFxudmFyeWluZyB2ZWMyIHZfcG9zX2I7XFxudmFyeWluZyB2ZWM0IHZfbGlnaHRpbmc7XFxudmFyeWluZyBmbG9hdCB2X2RpcmVjdGlvbmFsO1xcblxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBiYXNlXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhlaWdodFxcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBiYXNlXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGVpZ2h0XFxuXFxuICAgIHZlYzMgbm9ybWFsID0gYV9ub3JtYWxfZWQueHl6O1xcbiAgICBmbG9hdCBlZGdlZGlzdGFuY2UgPSBhX25vcm1hbF9lZC53O1xcblxcbiAgICBiYXNlID0gbWF4KDAuMCwgYmFzZSk7XFxuICAgIGhlaWdodCA9IG1heCgwLjAsIGhlaWdodCk7XFxuXFxuICAgIGZsb2F0IHQgPSBtb2Qobm9ybWFsLngsIDIuMCk7XFxuICAgIGZsb2F0IHogPSB0ID4gMC4wID8gaGVpZ2h0IDogYmFzZTtcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIHosIDEpO1xcblxcbiAgICB2ZWMyIHBvcyA9IG5vcm1hbC54ID09IDEuMCAmJiBub3JtYWwueSA9PSAwLjAgJiYgbm9ybWFsLnogPT0gMTYzODQuMFxcbiAgICAgICAgPyBhX3BvcyAvLyBleHRydXNpb24gdG9wXFxuICAgICAgICA6IHZlYzIoZWRnZWRpc3RhbmNlLCB6ICogdV9oZWlnaHRfZmFjdG9yKTsgLy8gZXh0cnVzaW9uIHNpZGVcXG5cXG4gICAgdl9wb3NfYSA9IGdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLCB1X3BpeGVsX2Nvb3JkX2xvd2VyLCB1X3NjYWxlX2EgKiB1X3BhdHRlcm5fc2l6ZV9hLCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLCBwb3MpO1xcbiAgICB2X3Bvc19iID0gZ2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsIHVfcGl4ZWxfY29vcmRfbG93ZXIsIHVfc2NhbGVfYiAqIHVfcGF0dGVybl9zaXplX2IsIHVfdGlsZV91bml0c190b19waXhlbHMsIHBvcyk7XFxuXFxuICAgIHZfbGlnaHRpbmcgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgIGZsb2F0IGRpcmVjdGlvbmFsID0gY2xhbXAoZG90KG5vcm1hbCAvIDE2MzgzLjAsIHVfbGlnaHRwb3MpLCAwLjAsIDEuMCk7XFxuICAgIGRpcmVjdGlvbmFsID0gbWl4KCgxLjAgLSB1X2xpZ2h0aW50ZW5zaXR5KSwgbWF4KCgwLjUgKyB1X2xpZ2h0aW50ZW5zaXR5KSwgMS4wKSwgZGlyZWN0aW9uYWwpO1xcblxcbiAgICBpZiAobm9ybWFsLnkgIT0gMC4wKSB7XFxuICAgICAgICBkaXJlY3Rpb25hbCAqPSBjbGFtcCgodCArIGJhc2UpICogcG93KGhlaWdodCAvIDE1MC4wLCAwLjUpLCBtaXgoMC43LCAwLjk4LCAxLjAgLSB1X2xpZ2h0aW50ZW5zaXR5KSwgMS4wKTtcXG4gICAgfVxcblxcbiAgICB2X2xpZ2h0aW5nLnJnYiArPSBjbGFtcChkaXJlY3Rpb25hbCAqIHVfbGlnaHRjb2xvciwgbWl4KHZlYzMoMC4wKSwgdmVjMygwLjMpLCAxLjAgLSB1X2xpZ2h0Y29sb3IpLCB2ZWMzKDEuMCkpO1xcbn1cXG5cIn0sZXh0cnVzaW9uVGV4dHVyZTp7ZnJhZ21lbnRTb3VyY2U6XCJ1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO1xcbnVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5O1xcbnZhcnlpbmcgdmVjMiB2X3BvcztcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1X2ltYWdlLCB2X3BvcykgKiB1X29wYWNpdHk7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcInVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG51bmlmb3JtIHZlYzIgdV93b3JsZDtcXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG52YXJ5aW5nIHZlYzIgdl9wb3M7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcyAqIHVfd29ybGQsIDAsIDEpO1xcblxcbiAgICB2X3Bvcy54ID0gYV9wb3MueDtcXG4gICAgdl9wb3MueSA9IDEuMCAtIGFfcG9zLnk7XFxufVxcblwifSxoaWxsc2hhZGVQcmVwYXJlOntmcmFnbWVudFNvdXJjZTpcIiNpZmRlZiBHTF9FU1xcbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZW5kaWZcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO1xcbnZhcnlpbmcgdmVjMiB2X3BvcztcXG51bmlmb3JtIHZlYzIgdV9kaW1lbnNpb247XFxudW5pZm9ybSBmbG9hdCB1X3pvb207XFxudW5pZm9ybSBmbG9hdCB1X21heHpvb207XFxuXFxuZmxvYXQgZ2V0RWxldmF0aW9uKHZlYzIgY29vcmQsIGZsb2F0IGJpYXMpIHtcXG4gICAgLy8gQ29udmVydCBlbmNvZGVkIGVsZXZhdGlvbiB2YWx1ZSB0byBtZXRlcnNcXG4gICAgdmVjNCBkYXRhID0gdGV4dHVyZTJEKHVfaW1hZ2UsIGNvb3JkKSAqIDI1NS4wO1xcbiAgICByZXR1cm4gKGRhdGEuciArIGRhdGEuZyAqIDI1Ni4wICsgZGF0YS5iICogMjU2LjAgKiAyNTYuMCkgLyA0LjA7XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgdmVjMiBlcHNpbG9uID0gMS4wIC8gdV9kaW1lbnNpb247XFxuXFxuICAgIC8vIHF1ZXJpZWQgcGl4ZWxzOlxcbiAgICAvLyArLS0tLS0tLS0tLS0rXFxuICAgIC8vIHwgICB8ICAgfCAgIHxcXG4gICAgLy8gfCBhIHwgYiB8IGMgfFxcbiAgICAvLyB8ICAgfCAgIHwgICB8XFxuICAgIC8vICstLS0tLS0tLS0tLStcXG4gICAgLy8gfCAgIHwgICB8ICAgfFxcbiAgICAvLyB8IGQgfCBlIHwgZiB8XFxuICAgIC8vIHwgICB8ICAgfCAgIHxcXG4gICAgLy8gKy0tLS0tLS0tLS0tK1xcbiAgICAvLyB8ICAgfCAgIHwgICB8XFxuICAgIC8vIHwgZyB8IGggfCBpIHxcXG4gICAgLy8gfCAgIHwgICB8ICAgfFxcbiAgICAvLyArLS0tLS0tLS0tLS0rXFxuXFxuICAgIGZsb2F0IGEgPSBnZXRFbGV2YXRpb24odl9wb3MgKyB2ZWMyKC1lcHNpbG9uLngsIC1lcHNpbG9uLnkpLCAwLjApO1xcbiAgICBmbG9hdCBiID0gZ2V0RWxldmF0aW9uKHZfcG9zICsgdmVjMigwLCAtZXBzaWxvbi55KSwgMC4wKTtcXG4gICAgZmxvYXQgYyA9IGdldEVsZXZhdGlvbih2X3BvcyArIHZlYzIoZXBzaWxvbi54LCAtZXBzaWxvbi55KSwgMC4wKTtcXG4gICAgZmxvYXQgZCA9IGdldEVsZXZhdGlvbih2X3BvcyArIHZlYzIoLWVwc2lsb24ueCwgMCksIDAuMCk7XFxuICAgIGZsb2F0IGUgPSBnZXRFbGV2YXRpb24odl9wb3MsIDAuMCk7XFxuICAgIGZsb2F0IGYgPSBnZXRFbGV2YXRpb24odl9wb3MgKyB2ZWMyKGVwc2lsb24ueCwgMCksIDAuMCk7XFxuICAgIGZsb2F0IGcgPSBnZXRFbGV2YXRpb24odl9wb3MgKyB2ZWMyKC1lcHNpbG9uLngsIGVwc2lsb24ueSksIDAuMCk7XFxuICAgIGZsb2F0IGggPSBnZXRFbGV2YXRpb24odl9wb3MgKyB2ZWMyKDAsIGVwc2lsb24ueSksIDAuMCk7XFxuICAgIGZsb2F0IGkgPSBnZXRFbGV2YXRpb24odl9wb3MgKyB2ZWMyKGVwc2lsb24ueCwgZXBzaWxvbi55KSwgMC4wKTtcXG5cXG4gICAgLy8gaGVyZSB3ZSBkaXZpZGUgdGhlIHggYW5kIHkgc2xvcGVzIGJ5IDggKiBwaXhlbCBzaXplXFxuICAgIC8vIHdoZXJlIHBpeGVsIHNpemUgKGFrYSBtZXRlcnMvcGl4ZWwpIGlzOlxcbiAgICAvLyBjaXJjdW1mZXJlbmNlIG9mIHRoZSB3b3JsZCAvIChwaXhlbHMgcGVyIHRpbGUgKiBudW1iZXIgb2YgdGlsZXMpXFxuICAgIC8vIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG86IDggKiA0MDA3NTAxNi42ODU1Nzg1IC8gKDUxMiAqIHBvdygyLCB1X3pvb20pKVxcbiAgICAvLyB3aGljaCBjYW4gYmUgcmVkdWNlZCB0bzogcG93KDIsIDE5LjI1NjE5OTc4NTI3IC0gdV96b29tKVxcbiAgICAvLyB3ZSB3YW50IHRvIHZlcnRpY2FsbHkgZXhhZ2dlcmF0ZSB0aGUgaGlsbHNoYWRpbmcgdGhvdWdoLCBiZWNhdXNlIG90aGVyd2lzZVxcbiAgICAvLyBpdCBpcyBiYXJlbHkgbm90aWNlYWJsZSBhdCBsb3cgem9vbXMuIHRvIGRvIHRoaXMsIHdlIG11bHRpcGx5IHRoaXMgYnkgc29tZVxcbiAgICAvLyBzY2FsZSBmYWN0b3IgcG93KDIsICh1X3pvb20gLSB1X21heHpvb20pICogYSkgd2hlcmUgYSBpcyBhbiBhcmJpdHJhcnkgdmFsdWVcXG4gICAgLy8gSGVyZSB3ZSB1c2UgYT0wLjMgd2hpY2ggd29ya3Mgb3V0IHRvIHRoZSBleHByZXNzaW9uIGJlbG93LiBzZWUgXFxuICAgIC8vIG5pY2tpZGx1Z2FzaCdzIGF3ZXNvbWUgYnJlYWtkb3duIGZvciBtb3JlIGluZm9cXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvcHVsbC81Mjg2I2Rpc2N1c3Npb25fcjE0ODQxOTU1NlxcbiAgICBmbG9hdCBleGFnZ2VyYXRpb24gPSB1X3pvb20gPCAyLjAgPyAwLjQgOiB1X3pvb20gPCA0LjUgPyAwLjM1IDogMC4zO1xcblxcbiAgICB2ZWMyIGRlcml2ID0gdmVjMihcXG4gICAgICAgIChjICsgZiArIGYgKyBpKSAtIChhICsgZCArIGQgKyBnKSxcXG4gICAgICAgIChnICsgaCArIGggKyBpKSAtIChhICsgYiArIGIgKyBjKVxcbiAgICApIC8gIHBvdygyLjAsICh1X3pvb20gLSB1X21heHpvb20pICogZXhhZ2dlcmF0aW9uICsgMTkuMjU2MiAtIHVfem9vbSk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNsYW1wKHZlYzQoXFxuICAgICAgICBkZXJpdi54IC8gMi4wICsgMC41LFxcbiAgICAgICAgZGVyaXYueSAvIDIuMCArIDAuNSxcXG4gICAgICAgIDEuMCxcXG4gICAgICAgIDEuMCksIDAuMCwgMS4wKTtcXG5cXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcXG4jZW5kaWZcXG59XFxuXCIsdmVydGV4U291cmNlOlwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcblxcbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xcbmF0dHJpYnV0ZSB2ZWMyIGFfdGV4dHVyZV9wb3M7XFxuXFxudmFyeWluZyB2ZWMyIHZfcG9zO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xcbiAgICB2X3BvcyA9IChhX3RleHR1cmVfcG9zIC8gODE5Mi4wKSAvIDIuMCArIDAuMjU7XFxufVxcblwifSxoaWxsc2hhZGU6e2ZyYWdtZW50U291cmNlOlwidW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcXG52YXJ5aW5nIHZlYzIgdl9wb3M7XFxuXFxudW5pZm9ybSB2ZWMyIHVfbGF0cmFuZ2U7XFxudW5pZm9ybSB2ZWMyIHVfbGlnaHQ7XFxudW5pZm9ybSB2ZWM0IHVfc2hhZG93O1xcbnVuaWZvcm0gdmVjNCB1X2hpZ2hsaWdodDtcXG51bmlmb3JtIHZlYzQgdV9hY2NlbnQ7XFxuXFxuI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5M1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgdmVjNCBwaXhlbCA9IHRleHR1cmUyRCh1X2ltYWdlLCB2X3Bvcyk7XFxuXFxuICAgIHZlYzIgZGVyaXYgPSAoKHBpeGVsLnJnICogMi4wKSAtIDEuMCk7XFxuXFxuICAgIC8vIFdlIGRpdmlkZSB0aGUgc2xvcGUgYnkgYSBzY2FsZSBmYWN0b3IgYmFzZWQgb24gdGhlIGNvc2luIG9mIHRoZSBwaXhlbCdzIGFwcHJveGltYXRlIGxhdGl0dWRlXFxuICAgIC8vIHRvIGFjY291bnQgZm9yIG1lcmNhdG9yIHByb2plY3Rpb24gZGlzdG9ydGlvbi4gc2VlICM0ODA3IGZvciBkZXRhaWxzXFxuICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gY29zKHJhZGlhbnMoKHVfbGF0cmFuZ2VbMF0gLSB1X2xhdHJhbmdlWzFdKSAqICgxLjAgLSB2X3Bvcy55KSArIHVfbGF0cmFuZ2VbMV0pKTtcXG4gICAgLy8gV2UgYWxzbyBtdWx0aXBseSB0aGUgc2xvcGUgYnkgYW4gYXJiaXRyYXJ5IHotZmFjdG9yIG9mIDEuMjVcXG4gICAgZmxvYXQgc2xvcGUgPSBhdGFuKDEuMjUgKiBsZW5ndGgoZGVyaXYpIC8gc2NhbGVGYWN0b3IpO1xcbiAgICBmbG9hdCBhc3BlY3QgPSBkZXJpdi54ICE9IDAuMCA/IGF0YW4oZGVyaXYueSwgLWRlcml2LngpIDogUEkgLyAyLjAgKiAoZGVyaXYueSA+IDAuMCA/IDEuMCA6IC0xLjApO1xcblxcbiAgICBmbG9hdCBpbnRlbnNpdHkgPSB1X2xpZ2h0Lng7XFxuICAgIC8vIFdlIGFkZCBQSSB0byBtYWtlIHRoaXMgcHJvcGVydHkgbWF0Y2ggdGhlIGdsb2JhbCBsaWdodCBvYmplY3QsIHdoaWNoIGFkZHMgUEkvMiB0byB0aGUgbGlnaHQncyBhemltdXRoYWxcXG4gICAgLy8gcG9zaXRpb24gcHJvcGVydHkgdG8gYWNjb3VudCBmb3IgMGRlZyBjb3JyZXNwb25kaW5nIHRvIG5vcnRoL3RoZSB0b3Agb2YgdGhlIHZpZXdwb3J0IGluIHRoZSBzdHlsZSBzcGVjXFxuICAgIC8vIGFuZCB0aGUgb3JpZ2luYWwgc2hhZGVyIHdhcyB3cml0dGVuIHRvIGFjY2VwdCAoLWlsbHVtaW5hdGlvbkRpcmVjdGlvbiAtIDkwKSBhcyB0aGUgYXppbXV0aGFsLlxcbiAgICBmbG9hdCBhemltdXRoID0gdV9saWdodC55ICsgUEk7XFxuXFxuICAgIC8vIFdlIHNjYWxlIHRoZSBzbG9wZSBleHBvbmVudGlhbGx5IGJhc2VkIG9uIGludGVuc2l0eSwgdXNpbmcgYSBjYWxjdWxhdGlvbiBzaW1pbGFyIHRvXFxuICAgIC8vIHRoZSBleHBvbmVudGlhbCBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uIGluIHRoZSBzdHlsZSBzcGVjOlxcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9ibG9iL21hc3Rlci9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2ludGVycG9sYXRlLmpzI0wyMTctTDIyOFxcbiAgICAvLyBzbyB0aGF0IGhpZ2hlciBpbnRlbnNpdHkgdmFsdWVzIGNyZWF0ZSBtb3JlIG9wYXF1ZSBoaWxsc2hhZGluZy5cXG4gICAgZmxvYXQgYmFzZSA9IDEuODc1IC0gaW50ZW5zaXR5ICogMS43NTtcXG4gICAgZmxvYXQgbWF4VmFsdWUgPSAwLjUgKiBQSTtcXG4gICAgZmxvYXQgc2NhbGVkU2xvcGUgPSBpbnRlbnNpdHkgIT0gMC41ID8gKChwb3coYmFzZSwgc2xvcGUpIC0gMS4wKSAvIChwb3coYmFzZSwgbWF4VmFsdWUpIC0gMS4wKSkgKiBtYXhWYWx1ZSA6IHNsb3BlO1xcblxcbiAgICAvLyBUaGUgYWNjZW50IGNvbG9yIGlzIGNhbGN1bGF0ZWQgd2l0aCB0aGUgY29zaW5lIG9mIHRoZSBzbG9wZSB3aGlsZSB0aGUgc2hhZGUgY29sb3IgaXMgY2FsY3VsYXRlZCB3aXRoIHRoZSBzaW5lXFxuICAgIC8vIHNvIHRoYXQgdGhlIGFjY2VudCBjb2xvcidzIHJhdGUgb2YgY2hhbmdlIGVhc2VzIGluIHdoaWxlIHRoZSBzaGFkZSBjb2xvcidzIGVhc2VzIG91dC5cXG4gICAgZmxvYXQgYWNjZW50ID0gY29zKHNjYWxlZFNsb3BlKTtcXG4gICAgLy8gV2UgbXVsdGlwbHkgYm90aCB0aGUgYWNjZW50IGFuZCBzaGFkZSBjb2xvciBieSBhIGNsYW1wZWQgaW50ZW5zaXR5IHZhbHVlXFxuICAgIC8vIHNvIHRoYXQgaW50ZW5zaXRpZXMgPj0gMC41IGRvIG5vdCBhZGRpdGlvbmFsbHkgYWZmZWN0IHRoZSBjb2xvciB2YWx1ZXNcXG4gICAgLy8gd2hpbGUgaW50ZW5zaXR5IHZhbHVlcyA8IDAuNSBtYWtlIHRoZSBvdmVyYWxsIGNvbG9yIG1vcmUgdHJhbnNwYXJlbnQuXFxuICAgIHZlYzQgYWNjZW50X2NvbG9yID0gKDEuMCAtIGFjY2VudCkgKiB1X2FjY2VudCAqIGNsYW1wKGludGVuc2l0eSAqIDIuMCwgMC4wLCAxLjApO1xcbiAgICBmbG9hdCBzaGFkZSA9IGFicyhtb2QoKGFzcGVjdCArIGF6aW11dGgpIC8gUEkgKyAwLjUsIDIuMCkgLSAxLjApO1xcbiAgICB2ZWM0IHNoYWRlX2NvbG9yID0gbWl4KHVfc2hhZG93LCB1X2hpZ2hsaWdodCwgc2hhZGUpICogc2luKHNjYWxlZFNsb3BlKSAqIGNsYW1wKGludGVuc2l0eSAqIDIuMCwgMC4wLCAxLjApO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBhY2NlbnRfY29sb3IgKiAoMS4wIC0gc2hhZGVfY29sb3IuYSkgKyBzaGFkZV9jb2xvcjtcXG5cXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcXG4jZW5kaWZcXG59XFxuXCIsdmVydGV4U291cmNlOlwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcblxcbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xcbmF0dHJpYnV0ZSB2ZWMyIGFfdGV4dHVyZV9wb3M7XFxuXFxudmFyeWluZyB2ZWMyIHZfcG9zO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xcbiAgICB2X3BvcyA9IGFfdGV4dHVyZV9wb3MgLyA4MTkyLjA7XFxufVxcblwifSxsaW5lOntmcmFnbWVudFNvdXJjZTpcIiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG52YXJ5aW5nIHZlYzIgdl93aWR0aDI7XFxudmFyeWluZyB2ZWMyIHZfbm9ybWFsO1xcbnZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbiAgICAvLyBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIG9mIHRoZSBwaXhlbCBmcm9tIHRoZSBsaW5lIGluIHBpeGVscy5cXG4gICAgZmxvYXQgZGlzdCA9IGxlbmd0aCh2X25vcm1hbCkgKiB2X3dpZHRoMi5zO1xcblxcbiAgICAvLyBDYWxjdWxhdGUgdGhlIGFudGlhbGlhc2luZyBmYWRlIGZhY3Rvci4gVGhpcyBpcyBlaXRoZXIgd2hlbiBmYWRpbmcgaW5cXG4gICAgLy8gdGhlIGxpbmUgaW4gY2FzZSBvZiBhbiBvZmZzZXQgbGluZSAodl93aWR0aDIudCkgb3Igd2hlbiBmYWRpbmcgb3V0XFxuICAgIC8vICh2X3dpZHRoMi5zKVxcbiAgICBmbG9hdCBibHVyMiA9IChibHVyICsgMS4wIC8gREVWSUNFX1BJWEVMX1JBVElPKSAqIHZfZ2FtbWFfc2NhbGU7XFxuICAgIGZsb2F0IGFscGhhID0gY2xhbXAobWluKGRpc3QgLSAodl93aWR0aDIudCAtIGJsdXIyKSwgdl93aWR0aDIucyAtIGRpc3QpIC8gYmx1cjIsIDAuMCwgMS4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgKiAoYWxwaGEgKiBvcGFjaXR5KTtcXG5cXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcXG4jZW5kaWZcXG59XFxuXCIsdmVydGV4U291cmNlOlwiXFxuXFxuLy8gdGhlIGRpc3RhbmNlIG92ZXIgd2hpY2ggdGhlIGxpbmUgZWRnZSBmYWRlcyBvdXQuXFxuLy8gUmV0aW5hIGRldmljZXMgbmVlZCBhIHNtYWxsZXIgZGlzdGFuY2UgdG8gYXZvaWQgYWxpYXNpbmcuXFxuI2RlZmluZSBBTlRJQUxJQVNJTkcgMS4wIC8gREVWSUNFX1BJWEVMX1JBVElPIC8gMi4wXFxuXFxuLy8gZmxvb3IoMTI3IC8gMikgPT0gNjMuMFxcbi8vIHRoZSBtYXhpbXVtIGFsbG93ZWQgbWl0ZXIgbGltaXQgaXMgMi4wIGF0IHRoZSBtb21lbnQuIHRoZSBleHRydWRlIG5vcm1hbCBpc1xcbi8vIHN0b3JlZCBpbiBhIGJ5dGUgKC0xMjguLjEyNykuIHdlIHNjYWxlIHJlZ3VsYXIgbm9ybWFscyB1cCB0byBsZW5ndGggNjMsIGJ1dFxcbi8vIHRoZXJlIGFyZSBhbHNvIFxcXCJzcGVjaWFsXFxcIiBub3JtYWxzIHRoYXQgaGF2ZSBhIGJpZ2dlciBsZW5ndGggKG9mIHVwIHRvIDEyNiBpblxcbi8vIHRoaXMgY2FzZSkuXFxuLy8gI2RlZmluZSBzY2FsZSA2My4wXFxuI2RlZmluZSBzY2FsZSAwLjAxNTg3MzAxNlxcblxcbmF0dHJpYnV0ZSB2ZWM0IGFfcG9zX25vcm1hbDtcXG5hdHRyaWJ1dGUgdmVjNCBhX2RhdGE7XFxuXFxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcbnVuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X3JhdGlvO1xcbnVuaWZvcm0gdmVjMiB1X2dsX3VuaXRzX3RvX3BpeGVscztcXG5cXG52YXJ5aW5nIHZlYzIgdl9ub3JtYWw7XFxudmFyeWluZyB2ZWMyIHZfd2lkdGgyO1xcbnZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcXG52YXJ5aW5nIGhpZ2hwIGZsb2F0IHZfbGluZXNvZmFyO1xcblxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb2Zmc2V0XFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHdpZHRoXFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9mZnNldFxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHdpZHRoXFxuXFxuICAgIHZlYzIgYV9leHRydWRlID0gYV9kYXRhLnh5IC0gMTI4LjA7XFxuICAgIGZsb2F0IGFfZGlyZWN0aW9uID0gbW9kKGFfZGF0YS56LCA0LjApIC0gMS4wO1xcblxcbiAgICB2X2xpbmVzb2ZhciA9IChmbG9vcihhX2RhdGEueiAvIDQuMCkgKyBhX2RhdGEudyAqIDY0LjApICogMi4wO1xcblxcbiAgICB2ZWMyIHBvcyA9IGFfcG9zX25vcm1hbC54eTtcXG5cXG4gICAgLy8geCBpcyAxIGlmIGl0J3MgYSByb3VuZCBjYXAsIDAgb3RoZXJ3aXNlXFxuICAgIC8vIHkgaXMgMSBpZiB0aGUgbm9ybWFsIHBvaW50cyB1cCwgYW5kIC0xIGlmIGl0IHBvaW50cyBkb3duXFxuICAgIG1lZGl1bXAgdmVjMiBub3JtYWwgPSBhX3Bvc19ub3JtYWwuenc7XFxuICAgIHZfbm9ybWFsID0gbm9ybWFsO1xcblxcbiAgICAvLyB0aGVzZSB0cmFuc2Zvcm1hdGlvbnMgdXNlZCB0byBiZSBhcHBsaWVkIGluIHRoZSBKUyBhbmQgbmF0aXZlIGNvZGUgYmFzZXMuXFxuICAgIC8vIG1vdmVkIHRoZW0gaW50byB0aGUgc2hhZGVyIGZvciBjbGFyaXR5IGFuZCBzaW1wbGljaXR5LlxcbiAgICBnYXB3aWR0aCA9IGdhcHdpZHRoIC8gMi4wO1xcbiAgICBmbG9hdCBoYWxmd2lkdGggPSB3aWR0aCAvIDIuMDtcXG4gICAgb2Zmc2V0ID0gLTEuMCAqIG9mZnNldDtcXG5cXG4gICAgZmxvYXQgaW5zZXQgPSBnYXB3aWR0aCArIChnYXB3aWR0aCA+IDAuMCA/IEFOVElBTElBU0lORyA6IDAuMCk7XFxuICAgIGZsb2F0IG91dHNldCA9IGdhcHdpZHRoICsgaGFsZndpZHRoICogKGdhcHdpZHRoID4gMC4wID8gMi4wIDogMS4wKSArIEFOVElBTElBU0lORztcXG5cXG4gICAgLy8gU2NhbGUgdGhlIGV4dHJ1c2lvbiB2ZWN0b3IgZG93biB0byBhIG5vcm1hbCBhbmQgdGhlbiB1cCBieSB0aGUgbGluZSB3aWR0aFxcbiAgICAvLyBvZiB0aGlzIHZlcnRleC5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpc3QgPSBvdXRzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZTtcXG5cXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBvZmZzZXQgd2hlbiBkcmF3aW5nIGEgbGluZSB0aGF0IGlzIHRvIHRoZSBzaWRlIG9mIHRoZSBhY3R1YWwgbGluZS5cXG4gICAgLy8gV2UgZG8gdGhpcyBieSBjcmVhdGluZyBhIHZlY3RvciB0aGF0IHBvaW50cyB0b3dhcmRzIHRoZSBleHRydWRlLCBidXQgcm90YXRlXFxuICAgIC8vIGl0IHdoZW4gd2UncmUgZHJhd2luZyByb3VuZCBlbmQgcG9pbnRzIChhX2RpcmVjdGlvbiA9IC0xIG9yIDEpIHNpbmNlIHRoZWlyXFxuICAgIC8vIGV4dHJ1ZGUgdmVjdG9yIHBvaW50cyBpbiBhbm90aGVyIGRpcmVjdGlvbi5cXG4gICAgbWVkaXVtcCBmbG9hdCB1ID0gMC41ICogYV9kaXJlY3Rpb247XFxuICAgIG1lZGl1bXAgZmxvYXQgdCA9IDEuMCAtIGFicyh1KTtcXG4gICAgbWVkaXVtcCB2ZWMyIG9mZnNldDIgPSBvZmZzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZSAqIG5vcm1hbC55ICogbWF0Mih0LCAtdSwgdSwgdCk7XFxuXFxuICAgIHZlYzQgcHJvamVjdGVkX2V4dHJ1ZGUgPSB1X21hdHJpeCAqIHZlYzQoZGlzdCAvIHVfcmF0aW8sIDAuMCwgMC4wKTtcXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQocG9zICsgb2Zmc2V0MiAvIHVfcmF0aW8sIDAuMCwgMS4wKSArIHByb2plY3RlZF9leHRydWRlO1xcblxcbiAgICAvLyBjYWxjdWxhdGUgaG93IG11Y2ggdGhlIHBlcnNwZWN0aXZlIHZpZXcgc3F1aXNoZXMgb3Igc3RyZXRjaGVzIHRoZSBleHRydWRlXFxuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmUgPSBsZW5ndGgoZGlzdCk7XFxuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmUgPSBsZW5ndGgocHJvamVjdGVkX2V4dHJ1ZGUueHkgLyBnbF9Qb3NpdGlvbi53ICogdV9nbF91bml0c190b19waXhlbHMpO1xcbiAgICB2X2dhbW1hX3NjYWxlID0gZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZSAvIGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU7XFxuXFxuICAgIHZfd2lkdGgyID0gdmVjMihvdXRzZXQsIGluc2V0KTtcXG59XFxuXCJ9LGxpbmVHcmFkaWVudDp7ZnJhZ21lbnRTb3VyY2U6XCJcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcXG5cXG52YXJ5aW5nIHZlYzIgdl93aWR0aDI7XFxudmFyeWluZyB2ZWMyIHZfbm9ybWFsO1xcbnZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcXG52YXJ5aW5nIGhpZ2hwIGZsb2F0IHZfbGluZXByb2dyZXNzO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbiAgICAvLyBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIG9mIHRoZSBwaXhlbCBmcm9tIHRoZSBsaW5lIGluIHBpeGVscy5cXG4gICAgZmxvYXQgZGlzdCA9IGxlbmd0aCh2X25vcm1hbCkgKiB2X3dpZHRoMi5zO1xcblxcbiAgICAvLyBDYWxjdWxhdGUgdGhlIGFudGlhbGlhc2luZyBmYWRlIGZhY3Rvci4gVGhpcyBpcyBlaXRoZXIgd2hlbiBmYWRpbmcgaW5cXG4gICAgLy8gdGhlIGxpbmUgaW4gY2FzZSBvZiBhbiBvZmZzZXQgbGluZSAodl93aWR0aDIudCkgb3Igd2hlbiBmYWRpbmcgb3V0XFxuICAgIC8vICh2X3dpZHRoMi5zKVxcbiAgICBmbG9hdCBibHVyMiA9IChibHVyICsgMS4wIC8gREVWSUNFX1BJWEVMX1JBVElPKSAqIHZfZ2FtbWFfc2NhbGU7XFxuICAgIGZsb2F0IGFscGhhID0gY2xhbXAobWluKGRpc3QgLSAodl93aWR0aDIudCAtIGJsdXIyKSwgdl93aWR0aDIucyAtIGRpc3QpIC8gYmx1cjIsIDAuMCwgMS4wKTtcXG5cXG4gICAgLy8gRm9yIGdyYWRpZW50IGxpbmVzLCB2X2xpbmVwcm9ncmVzcyBpcyB0aGUgcmF0aW8gYWxvbmcgdGhlIGVudGlyZSBsaW5lLFxcbiAgICAvLyBzY2FsZWQgdG8gWzAsIDJeMTUpLCBhbmQgdGhlIGdyYWRpZW50IHJhbXAgaXMgc3RvcmVkIGluIGEgdGV4dHVyZS5cXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1X2ltYWdlLCB2ZWMyKHZfbGluZXByb2dyZXNzLCAwLjUpKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgKiAoYWxwaGEgKiBvcGFjaXR5KTtcXG5cXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcXG4jZW5kaWZcXG59XFxuXCIsdmVydGV4U291cmNlOlwiXFxuLy8gdGhlIGF0dHJpYnV0ZSBjb252ZXlpbmcgcHJvZ3Jlc3MgYWxvbmcgYSBsaW5lIGlzIHNjYWxlZCB0byBbMCwgMl4xNSlcXG4jZGVmaW5lIE1BWF9MSU5FX0RJU1RBTkNFIDMyNzY3LjBcXG5cXG4vLyB0aGUgZGlzdGFuY2Ugb3ZlciB3aGljaCB0aGUgbGluZSBlZGdlIGZhZGVzIG91dC5cXG4vLyBSZXRpbmEgZGV2aWNlcyBuZWVkIGEgc21hbGxlciBkaXN0YW5jZSB0byBhdm9pZCBhbGlhc2luZy5cXG4jZGVmaW5lIEFOVElBTElBU0lORyAxLjAgLyBERVZJQ0VfUElYRUxfUkFUSU8gLyAyLjBcXG5cXG4vLyBmbG9vcigxMjcgLyAyKSA9PSA2My4wXFxuLy8gdGhlIG1heGltdW0gYWxsb3dlZCBtaXRlciBsaW1pdCBpcyAyLjAgYXQgdGhlIG1vbWVudC4gdGhlIGV4dHJ1ZGUgbm9ybWFsIGlzXFxuLy8gc3RvcmVkIGluIGEgYnl0ZSAoLTEyOC4uMTI3KS4gd2Ugc2NhbGUgcmVndWxhciBub3JtYWxzIHVwIHRvIGxlbmd0aCA2MywgYnV0XFxuLy8gdGhlcmUgYXJlIGFsc28gXFxcInNwZWNpYWxcXFwiIG5vcm1hbHMgdGhhdCBoYXZlIGEgYmlnZ2VyIGxlbmd0aCAob2YgdXAgdG8gMTI2IGluXFxuLy8gdGhpcyBjYXNlKS5cXG4vLyAjZGVmaW5lIHNjYWxlIDYzLjBcXG4jZGVmaW5lIHNjYWxlIDAuMDE1ODczMDE2XFxuXFxuYXR0cmlidXRlIHZlYzQgYV9wb3Nfbm9ybWFsO1xcbmF0dHJpYnV0ZSB2ZWM0IGFfZGF0YTtcXG5cXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfcmF0aW87XFxudW5pZm9ybSB2ZWMyIHVfZ2xfdW5pdHNfdG9fcGl4ZWxzO1xcblxcbnZhcnlpbmcgdmVjMiB2X25vcm1hbDtcXG52YXJ5aW5nIHZlYzIgdl93aWR0aDI7XFxudmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xcbnZhcnlpbmcgaGlnaHAgZmxvYXQgdl9saW5lcHJvZ3Jlc3M7XFxuXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvZmZzZXRcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgd2lkdGhcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9mZnNldFxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHdpZHRoXFxuXFxuICAgIHZlYzIgYV9leHRydWRlID0gYV9kYXRhLnh5IC0gMTI4LjA7XFxuICAgIGZsb2F0IGFfZGlyZWN0aW9uID0gbW9kKGFfZGF0YS56LCA0LjApIC0gMS4wO1xcblxcbiAgICB2X2xpbmVwcm9ncmVzcyA9IChmbG9vcihhX2RhdGEueiAvIDQuMCkgKyBhX2RhdGEudyAqIDY0LjApICogMi4wIC8gTUFYX0xJTkVfRElTVEFOQ0U7XFxuXFxuICAgIHZlYzIgcG9zID0gYV9wb3Nfbm9ybWFsLnh5O1xcblxcbiAgICAvLyB4IGlzIDEgaWYgaXQncyBhIHJvdW5kIGNhcCwgMCBvdGhlcndpc2VcXG4gICAgLy8geSBpcyAxIGlmIHRoZSBub3JtYWwgcG9pbnRzIHVwLCBhbmQgLTEgaWYgaXQgcG9pbnRzIGRvd25cXG4gICAgbWVkaXVtcCB2ZWMyIG5vcm1hbCA9IGFfcG9zX25vcm1hbC56dztcXG4gICAgdl9ub3JtYWwgPSBub3JtYWw7XFxuXFxuICAgIC8vIHRoZXNlIHRyYW5zZm9ybWF0aW9ucyB1c2VkIHRvIGJlIGFwcGxpZWQgaW4gdGhlIEpTIGFuZCBuYXRpdmUgY29kZSBiYXNlcy5cXG4gICAgLy8gbW92ZWQgdGhlbSBpbnRvIHRoZSBzaGFkZXIgZm9yIGNsYXJpdHkgYW5kIHNpbXBsaWNpdHkuXFxuICAgIGdhcHdpZHRoID0gZ2Fwd2lkdGggLyAyLjA7XFxuICAgIGZsb2F0IGhhbGZ3aWR0aCA9IHdpZHRoIC8gMi4wO1xcbiAgICBvZmZzZXQgPSAtMS4wICogb2Zmc2V0O1xcblxcbiAgICBmbG9hdCBpbnNldCA9IGdhcHdpZHRoICsgKGdhcHdpZHRoID4gMC4wID8gQU5USUFMSUFTSU5HIDogMC4wKTtcXG4gICAgZmxvYXQgb3V0c2V0ID0gZ2Fwd2lkdGggKyBoYWxmd2lkdGggKiAoZ2Fwd2lkdGggPiAwLjAgPyAyLjAgOiAxLjApICsgQU5USUFMSUFTSU5HO1xcblxcbiAgICAvLyBTY2FsZSB0aGUgZXh0cnVzaW9uIHZlY3RvciBkb3duIHRvIGEgbm9ybWFsIGFuZCB0aGVuIHVwIGJ5IHRoZSBsaW5lIHdpZHRoXFxuICAgIC8vIG9mIHRoaXMgdmVydGV4LlxcbiAgICBtZWRpdW1wIHZlYzIgZGlzdCA9IG91dHNldCAqIGFfZXh0cnVkZSAqIHNjYWxlO1xcblxcbiAgICAvLyBDYWxjdWxhdGUgdGhlIG9mZnNldCB3aGVuIGRyYXdpbmcgYSBsaW5lIHRoYXQgaXMgdG8gdGhlIHNpZGUgb2YgdGhlIGFjdHVhbCBsaW5lLlxcbiAgICAvLyBXZSBkbyB0aGlzIGJ5IGNyZWF0aW5nIGEgdmVjdG9yIHRoYXQgcG9pbnRzIHRvd2FyZHMgdGhlIGV4dHJ1ZGUsIGJ1dCByb3RhdGVcXG4gICAgLy8gaXQgd2hlbiB3ZSdyZSBkcmF3aW5nIHJvdW5kIGVuZCBwb2ludHMgKGFfZGlyZWN0aW9uID0gLTEgb3IgMSkgc2luY2UgdGhlaXJcXG4gICAgLy8gZXh0cnVkZSB2ZWN0b3IgcG9pbnRzIGluIGFub3RoZXIgZGlyZWN0aW9uLlxcbiAgICBtZWRpdW1wIGZsb2F0IHUgPSAwLjUgKiBhX2RpcmVjdGlvbjtcXG4gICAgbWVkaXVtcCBmbG9hdCB0ID0gMS4wIC0gYWJzKHUpO1xcbiAgICBtZWRpdW1wIHZlYzIgb2Zmc2V0MiA9IG9mZnNldCAqIGFfZXh0cnVkZSAqIHNjYWxlICogbm9ybWFsLnkgKiBtYXQyKHQsIC11LCB1LCB0KTtcXG5cXG4gICAgdmVjNCBwcm9qZWN0ZWRfZXh0cnVkZSA9IHVfbWF0cml4ICogdmVjNChkaXN0IC8gdV9yYXRpbywgMC4wLCAwLjApO1xcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChwb3MgKyBvZmZzZXQyIC8gdV9yYXRpbywgMC4wLCAxLjApICsgcHJvamVjdGVkX2V4dHJ1ZGU7XFxuXFxuICAgIC8vIGNhbGN1bGF0ZSBob3cgbXVjaCB0aGUgcGVyc3BlY3RpdmUgdmlldyBzcXVpc2hlcyBvciBzdHJldGNoZXMgdGhlIGV4dHJ1ZGVcXG4gICAgZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZSA9IGxlbmd0aChkaXN0KTtcXG4gICAgZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZSA9IGxlbmd0aChwcm9qZWN0ZWRfZXh0cnVkZS54eSAvIGdsX1Bvc2l0aW9uLncgKiB1X2dsX3VuaXRzX3RvX3BpeGVscyk7XFxuICAgIHZfZ2FtbWFfc2NhbGUgPSBleHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlIC8gZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZTtcXG5cXG4gICAgdl93aWR0aDIgPSB2ZWMyKG91dHNldCwgaW5zZXQpO1xcbn1cXG5cIn0sbGluZVBhdHRlcm46e2ZyYWdtZW50U291cmNlOlwidW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2E7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2I7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl90bF9hO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYTtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2I7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9icl9iO1xcbnVuaWZvcm0gdmVjMiB1X3RleHNpemU7XFxudW5pZm9ybSBmbG9hdCB1X2ZhZGU7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcXG5cXG52YXJ5aW5nIHZlYzIgdl9ub3JtYWw7XFxudmFyeWluZyB2ZWMyIHZfd2lkdGgyO1xcbnZhcnlpbmcgZmxvYXQgdl9saW5lc29mYXI7XFxudmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xcblxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBvZiB0aGUgcGl4ZWwgZnJvbSB0aGUgbGluZSBpbiBwaXhlbHMuXFxuICAgIGZsb2F0IGRpc3QgPSBsZW5ndGgodl9ub3JtYWwpICogdl93aWR0aDIucztcXG5cXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhbnRpYWxpYXNpbmcgZmFkZSBmYWN0b3IuIFRoaXMgaXMgZWl0aGVyIHdoZW4gZmFkaW5nIGluXFxuICAgIC8vIHRoZSBsaW5lIGluIGNhc2Ugb2YgYW4gb2Zmc2V0IGxpbmUgKHZfd2lkdGgyLnQpIG9yIHdoZW4gZmFkaW5nIG91dFxcbiAgICAvLyAodl93aWR0aDIucylcXG4gICAgZmxvYXQgYmx1cjIgPSAoYmx1ciArIDEuMCAvIERFVklDRV9QSVhFTF9SQVRJTykgKiB2X2dhbW1hX3NjYWxlO1xcbiAgICBmbG9hdCBhbHBoYSA9IGNsYW1wKG1pbihkaXN0IC0gKHZfd2lkdGgyLnQgLSBibHVyMiksIHZfd2lkdGgyLnMgLSBkaXN0KSAvIGJsdXIyLCAwLjAsIDEuMCk7XFxuXFxuICAgIGZsb2F0IHhfYSA9IG1vZCh2X2xpbmVzb2ZhciAvIHVfcGF0dGVybl9zaXplX2EueCwgMS4wKTtcXG4gICAgZmxvYXQgeF9iID0gbW9kKHZfbGluZXNvZmFyIC8gdV9wYXR0ZXJuX3NpemVfYi54LCAxLjApO1xcblxcbiAgICAvLyB2X25vcm1hbC55IGlzIDAgYXQgdGhlIG1pZHBvaW50IG9mIHRoZSBsaW5lLCAtMSBhdCB0aGUgbG93ZXIgZWRnZSwgMSBhdCB0aGUgdXBwZXIgZWRnZVxcbiAgICAvLyB3ZSBjbGFtcCB0aGUgbGluZSB3aWR0aCBvdXRzZXQgdG8gYmUgYmV0d2VlbiAwIGFuZCBoYWxmIHRoZSBwYXR0ZXJuIGhlaWdodCBwbHVzIHBhZGRpbmcgKDIuMClcXG4gICAgLy8gdG8gZW5zdXJlIHdlIGRvbid0IHNhbXBsZSBvdXRzaWRlIHRoZSBkZXNpZ25hdGVkIHN5bWJvbCBvbiB0aGUgc3ByaXRlIHNoZWV0LlxcbiAgICAvLyAwLjUgaXMgYWRkZWQgdG8gc2hpZnQgdGhlIGNvbXBvbmVudCB0byBiZSBib3VuZGVkIGJldHdlZW4gMCBhbmQgMSBmb3IgaW50ZXJwb2xhdGlvbiBvZlxcbiAgICAvLyB0aGUgdGV4dHVyZSBjb29yZGluYXRlXFxuICAgIGZsb2F0IHlfYSA9IDAuNSArICh2X25vcm1hbC55ICogY2xhbXAodl93aWR0aDIucywgMC4wLCAodV9wYXR0ZXJuX3NpemVfYS55ICsgMi4wKSAvIDIuMCkgLyB1X3BhdHRlcm5fc2l6ZV9hLnkpO1xcbiAgICBmbG9hdCB5X2IgPSAwLjUgKyAodl9ub3JtYWwueSAqIGNsYW1wKHZfd2lkdGgyLnMsIDAuMCwgKHVfcGF0dGVybl9zaXplX2IueSArIDIuMCkgLyAyLjApIC8gdV9wYXR0ZXJuX3NpemVfYi55KTtcXG4gICAgdmVjMiBwb3NfYSA9IG1peCh1X3BhdHRlcm5fdGxfYSAvIHVfdGV4c2l6ZSwgdV9wYXR0ZXJuX2JyX2EgLyB1X3RleHNpemUsIHZlYzIoeF9hLCB5X2EpKTtcXG4gICAgdmVjMiBwb3NfYiA9IG1peCh1X3BhdHRlcm5fdGxfYiAvIHVfdGV4c2l6ZSwgdV9wYXR0ZXJuX2JyX2IgLyB1X3RleHNpemUsIHZlYzIoeF9iLCB5X2IpKTtcXG5cXG4gICAgdmVjNCBjb2xvciA9IG1peCh0ZXh0dXJlMkQodV9pbWFnZSwgcG9zX2EpLCB0ZXh0dXJlMkQodV9pbWFnZSwgcG9zX2IpLCB1X2ZhZGUpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAqIGFscGhhICogb3BhY2l0eTtcXG5cXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcXG4jZW5kaWZcXG59XFxuXCIsdmVydGV4U291cmNlOlwiLy8gZmxvb3IoMTI3IC8gMikgPT0gNjMuMFxcbi8vIHRoZSBtYXhpbXVtIGFsbG93ZWQgbWl0ZXIgbGltaXQgaXMgMi4wIGF0IHRoZSBtb21lbnQuIHRoZSBleHRydWRlIG5vcm1hbCBpc1xcbi8vIHN0b3JlZCBpbiBhIGJ5dGUgKC0xMjguLjEyNykuIHdlIHNjYWxlIHJlZ3VsYXIgbm9ybWFscyB1cCB0byBsZW5ndGggNjMsIGJ1dFxcbi8vIHRoZXJlIGFyZSBhbHNvIFxcXCJzcGVjaWFsXFxcIiBub3JtYWxzIHRoYXQgaGF2ZSBhIGJpZ2dlciBsZW5ndGggKG9mIHVwIHRvIDEyNiBpblxcbi8vIHRoaXMgY2FzZSkuXFxuLy8gI2RlZmluZSBzY2FsZSA2My4wXFxuI2RlZmluZSBzY2FsZSAwLjAxNTg3MzAxNlxcblxcbi8vIFdlIHNjYWxlIHRoZSBkaXN0YW5jZSBiZWZvcmUgYWRkaW5nIGl0IHRvIHRoZSBidWZmZXJzIHNvIHRoYXQgd2UgY2FuIHN0b3JlXFxuLy8gbG9uZyBkaXN0YW5jZXMgZm9yIGxvbmcgc2VnbWVudHMuIFVzZSB0aGlzIHZhbHVlIHRvIHVuc2NhbGUgdGhlIGRpc3RhbmNlLlxcbiNkZWZpbmUgTElORV9ESVNUQU5DRV9TQ0FMRSAyLjBcXG5cXG4vLyB0aGUgZGlzdGFuY2Ugb3ZlciB3aGljaCB0aGUgbGluZSBlZGdlIGZhZGVzIG91dC5cXG4vLyBSZXRpbmEgZGV2aWNlcyBuZWVkIGEgc21hbGxlciBkaXN0YW5jZSB0byBhdm9pZCBhbGlhc2luZy5cXG4jZGVmaW5lIEFOVElBTElBU0lORyAxLjAgLyBERVZJQ0VfUElYRUxfUkFUSU8gLyAyLjBcXG5cXG5hdHRyaWJ1dGUgdmVjNCBhX3Bvc19ub3JtYWw7XFxuYXR0cmlidXRlIHZlYzQgYV9kYXRhO1xcblxcbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9yYXRpbztcXG51bmlmb3JtIHZlYzIgdV9nbF91bml0c190b19waXhlbHM7XFxuXFxudmFyeWluZyB2ZWMyIHZfbm9ybWFsO1xcbnZhcnlpbmcgdmVjMiB2X3dpZHRoMjtcXG52YXJ5aW5nIGZsb2F0IHZfbGluZXNvZmFyO1xcbnZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9mZnNldFxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCB3aWR0aFxcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9mZnNldFxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgd2lkdGhcXG5cXG4gICAgdmVjMiBhX2V4dHJ1ZGUgPSBhX2RhdGEueHkgLSAxMjguMDtcXG4gICAgZmxvYXQgYV9kaXJlY3Rpb24gPSBtb2QoYV9kYXRhLnosIDQuMCkgLSAxLjA7XFxuICAgIGZsb2F0IGFfbGluZXNvZmFyID0gKGZsb29yKGFfZGF0YS56IC8gNC4wKSArIGFfZGF0YS53ICogNjQuMCkgKiBMSU5FX0RJU1RBTkNFX1NDQUxFO1xcblxcbiAgICB2ZWMyIHBvcyA9IGFfcG9zX25vcm1hbC54eTtcXG5cXG4gICAgLy8geCBpcyAxIGlmIGl0J3MgYSByb3VuZCBjYXAsIDAgb3RoZXJ3aXNlXFxuICAgIC8vIHkgaXMgMSBpZiB0aGUgbm9ybWFsIHBvaW50cyB1cCwgYW5kIC0xIGlmIGl0IHBvaW50cyBkb3duXFxuICAgIG1lZGl1bXAgdmVjMiBub3JtYWwgPSBhX3Bvc19ub3JtYWwuenc7XFxuICAgIHZfbm9ybWFsID0gbm9ybWFsO1xcblxcbiAgICAvLyB0aGVzZSB0cmFuc2Zvcm1hdGlvbnMgdXNlZCB0byBiZSBhcHBsaWVkIGluIHRoZSBKUyBhbmQgbmF0aXZlIGNvZGUgYmFzZXMuXFxuICAgIC8vIG1vdmVkIHRoZW0gaW50byB0aGUgc2hhZGVyIGZvciBjbGFyaXR5IGFuZCBzaW1wbGljaXR5LlxcbiAgICBnYXB3aWR0aCA9IGdhcHdpZHRoIC8gMi4wO1xcbiAgICBmbG9hdCBoYWxmd2lkdGggPSB3aWR0aCAvIDIuMDtcXG4gICAgb2Zmc2V0ID0gLTEuMCAqIG9mZnNldDtcXG5cXG4gICAgZmxvYXQgaW5zZXQgPSBnYXB3aWR0aCArIChnYXB3aWR0aCA+IDAuMCA/IEFOVElBTElBU0lORyA6IDAuMCk7XFxuICAgIGZsb2F0IG91dHNldCA9IGdhcHdpZHRoICsgaGFsZndpZHRoICogKGdhcHdpZHRoID4gMC4wID8gMi4wIDogMS4wKSArIEFOVElBTElBU0lORztcXG5cXG4gICAgLy8gU2NhbGUgdGhlIGV4dHJ1c2lvbiB2ZWN0b3IgZG93biB0byBhIG5vcm1hbCBhbmQgdGhlbiB1cCBieSB0aGUgbGluZSB3aWR0aFxcbiAgICAvLyBvZiB0aGlzIHZlcnRleC5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpc3QgPSBvdXRzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZTtcXG5cXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBvZmZzZXQgd2hlbiBkcmF3aW5nIGEgbGluZSB0aGF0IGlzIHRvIHRoZSBzaWRlIG9mIHRoZSBhY3R1YWwgbGluZS5cXG4gICAgLy8gV2UgZG8gdGhpcyBieSBjcmVhdGluZyBhIHZlY3RvciB0aGF0IHBvaW50cyB0b3dhcmRzIHRoZSBleHRydWRlLCBidXQgcm90YXRlXFxuICAgIC8vIGl0IHdoZW4gd2UncmUgZHJhd2luZyByb3VuZCBlbmQgcG9pbnRzIChhX2RpcmVjdGlvbiA9IC0xIG9yIDEpIHNpbmNlIHRoZWlyXFxuICAgIC8vIGV4dHJ1ZGUgdmVjdG9yIHBvaW50cyBpbiBhbm90aGVyIGRpcmVjdGlvbi5cXG4gICAgbWVkaXVtcCBmbG9hdCB1ID0gMC41ICogYV9kaXJlY3Rpb247XFxuICAgIG1lZGl1bXAgZmxvYXQgdCA9IDEuMCAtIGFicyh1KTtcXG4gICAgbWVkaXVtcCB2ZWMyIG9mZnNldDIgPSBvZmZzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZSAqIG5vcm1hbC55ICogbWF0Mih0LCAtdSwgdSwgdCk7XFxuXFxuICAgIHZlYzQgcHJvamVjdGVkX2V4dHJ1ZGUgPSB1X21hdHJpeCAqIHZlYzQoZGlzdCAvIHVfcmF0aW8sIDAuMCwgMC4wKTtcXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQocG9zICsgb2Zmc2V0MiAvIHVfcmF0aW8sIDAuMCwgMS4wKSArIHByb2plY3RlZF9leHRydWRlO1xcblxcbiAgICAvLyBjYWxjdWxhdGUgaG93IG11Y2ggdGhlIHBlcnNwZWN0aXZlIHZpZXcgc3F1aXNoZXMgb3Igc3RyZXRjaGVzIHRoZSBleHRydWRlXFxuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmUgPSBsZW5ndGgoZGlzdCk7XFxuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmUgPSBsZW5ndGgocHJvamVjdGVkX2V4dHJ1ZGUueHkgLyBnbF9Qb3NpdGlvbi53ICogdV9nbF91bml0c190b19waXhlbHMpO1xcbiAgICB2X2dhbW1hX3NjYWxlID0gZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZSAvIGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU7XFxuXFxuICAgIHZfbGluZXNvZmFyID0gYV9saW5lc29mYXI7XFxuICAgIHZfd2lkdGgyID0gdmVjMihvdXRzZXQsIGluc2V0KTtcXG59XFxuXCJ9LGxpbmVTREY6e2ZyYWdtZW50U291cmNlOlwiXFxudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcXG51bmlmb3JtIGZsb2F0IHVfc2RmZ2FtbWE7XFxudW5pZm9ybSBmbG9hdCB1X21peDtcXG5cXG52YXJ5aW5nIHZlYzIgdl9ub3JtYWw7XFxudmFyeWluZyB2ZWMyIHZfd2lkdGgyO1xcbnZhcnlpbmcgdmVjMiB2X3RleF9hO1xcbnZhcnlpbmcgdmVjMiB2X3RleF9iO1xcbnZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHdpZHRoXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGZsb29yd2lkdGhcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHdpZHRoXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgZmxvb3J3aWR0aFxcblxcbiAgICAvLyBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIG9mIHRoZSBwaXhlbCBmcm9tIHRoZSBsaW5lIGluIHBpeGVscy5cXG4gICAgZmxvYXQgZGlzdCA9IGxlbmd0aCh2X25vcm1hbCkgKiB2X3dpZHRoMi5zO1xcblxcbiAgICAvLyBDYWxjdWxhdGUgdGhlIGFudGlhbGlhc2luZyBmYWRlIGZhY3Rvci4gVGhpcyBpcyBlaXRoZXIgd2hlbiBmYWRpbmcgaW5cXG4gICAgLy8gdGhlIGxpbmUgaW4gY2FzZSBvZiBhbiBvZmZzZXQgbGluZSAodl93aWR0aDIudCkgb3Igd2hlbiBmYWRpbmcgb3V0XFxuICAgIC8vICh2X3dpZHRoMi5zKVxcbiAgICBmbG9hdCBibHVyMiA9IChibHVyICsgMS4wIC8gREVWSUNFX1BJWEVMX1JBVElPKSAqIHZfZ2FtbWFfc2NhbGU7XFxuICAgIGZsb2F0IGFscGhhID0gY2xhbXAobWluKGRpc3QgLSAodl93aWR0aDIudCAtIGJsdXIyKSwgdl93aWR0aDIucyAtIGRpc3QpIC8gYmx1cjIsIDAuMCwgMS4wKTtcXG5cXG4gICAgZmxvYXQgc2RmZGlzdF9hID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHZfdGV4X2EpLmE7XFxuICAgIGZsb2F0IHNkZmRpc3RfYiA9IHRleHR1cmUyRCh1X2ltYWdlLCB2X3RleF9iKS5hO1xcbiAgICBmbG9hdCBzZGZkaXN0ID0gbWl4KHNkZmRpc3RfYSwgc2RmZGlzdF9iLCB1X21peCk7XFxuICAgIGFscGhhICo9IHNtb290aHN0ZXAoMC41IC0gdV9zZGZnYW1tYSAvIGZsb29yd2lkdGgsIDAuNSArIHVfc2RmZ2FtbWEgLyBmbG9vcndpZHRoLCBzZGZkaXN0KTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgKiAoYWxwaGEgKiBvcGFjaXR5KTtcXG5cXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcXG4jZW5kaWZcXG59XFxuXCIsdmVydGV4U291cmNlOlwiLy8gZmxvb3IoMTI3IC8gMikgPT0gNjMuMFxcbi8vIHRoZSBtYXhpbXVtIGFsbG93ZWQgbWl0ZXIgbGltaXQgaXMgMi4wIGF0IHRoZSBtb21lbnQuIHRoZSBleHRydWRlIG5vcm1hbCBpc1xcbi8vIHN0b3JlZCBpbiBhIGJ5dGUgKC0xMjguLjEyNykuIHdlIHNjYWxlIHJlZ3VsYXIgbm9ybWFscyB1cCB0byBsZW5ndGggNjMsIGJ1dFxcbi8vIHRoZXJlIGFyZSBhbHNvIFxcXCJzcGVjaWFsXFxcIiBub3JtYWxzIHRoYXQgaGF2ZSBhIGJpZ2dlciBsZW5ndGggKG9mIHVwIHRvIDEyNiBpblxcbi8vIHRoaXMgY2FzZSkuXFxuLy8gI2RlZmluZSBzY2FsZSA2My4wXFxuI2RlZmluZSBzY2FsZSAwLjAxNTg3MzAxNlxcblxcbi8vIFdlIHNjYWxlIHRoZSBkaXN0YW5jZSBiZWZvcmUgYWRkaW5nIGl0IHRvIHRoZSBidWZmZXJzIHNvIHRoYXQgd2UgY2FuIHN0b3JlXFxuLy8gbG9uZyBkaXN0YW5jZXMgZm9yIGxvbmcgc2VnbWVudHMuIFVzZSB0aGlzIHZhbHVlIHRvIHVuc2NhbGUgdGhlIGRpc3RhbmNlLlxcbiNkZWZpbmUgTElORV9ESVNUQU5DRV9TQ0FMRSAyLjBcXG5cXG4vLyB0aGUgZGlzdGFuY2Ugb3ZlciB3aGljaCB0aGUgbGluZSBlZGdlIGZhZGVzIG91dC5cXG4vLyBSZXRpbmEgZGV2aWNlcyBuZWVkIGEgc21hbGxlciBkaXN0YW5jZSB0byBhdm9pZCBhbGlhc2luZy5cXG4jZGVmaW5lIEFOVElBTElBU0lORyAxLjAgLyBERVZJQ0VfUElYRUxfUkFUSU8gLyAyLjBcXG5cXG5hdHRyaWJ1dGUgdmVjNCBhX3Bvc19ub3JtYWw7XFxuYXR0cmlidXRlIHZlYzQgYV9kYXRhO1xcblxcbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9yYXRpbztcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuc2NhbGVfYTtcXG51bmlmb3JtIGZsb2F0IHVfdGV4X3lfYTtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuc2NhbGVfYjtcXG51bmlmb3JtIGZsb2F0IHVfdGV4X3lfYjtcXG51bmlmb3JtIHZlYzIgdV9nbF91bml0c190b19waXhlbHM7XFxuXFxudmFyeWluZyB2ZWMyIHZfbm9ybWFsO1xcbnZhcnlpbmcgdmVjMiB2X3dpZHRoMjtcXG52YXJ5aW5nIHZlYzIgdl90ZXhfYTtcXG52YXJ5aW5nIHZlYzIgdl90ZXhfYjtcXG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XFxuXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvZmZzZXRcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgd2lkdGhcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgZmxvb3J3aWR0aFxcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvZmZzZXRcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCB3aWR0aFxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGZsb29yd2lkdGhcXG5cXG4gICAgdmVjMiBhX2V4dHJ1ZGUgPSBhX2RhdGEueHkgLSAxMjguMDtcXG4gICAgZmxvYXQgYV9kaXJlY3Rpb24gPSBtb2QoYV9kYXRhLnosIDQuMCkgLSAxLjA7XFxuICAgIGZsb2F0IGFfbGluZXNvZmFyID0gKGZsb29yKGFfZGF0YS56IC8gNC4wKSArIGFfZGF0YS53ICogNjQuMCkgKiBMSU5FX0RJU1RBTkNFX1NDQUxFO1xcblxcbiAgICB2ZWMyIHBvcyA9IGFfcG9zX25vcm1hbC54eTtcXG5cXG4gICAgLy8geCBpcyAxIGlmIGl0J3MgYSByb3VuZCBjYXAsIDAgb3RoZXJ3aXNlXFxuICAgIC8vIHkgaXMgMSBpZiB0aGUgbm9ybWFsIHBvaW50cyB1cCwgYW5kIC0xIGlmIGl0IHBvaW50cyBkb3duXFxuICAgIG1lZGl1bXAgdmVjMiBub3JtYWwgPSBhX3Bvc19ub3JtYWwuenc7XFxuICAgIHZfbm9ybWFsID0gbm9ybWFsO1xcblxcbiAgICAvLyB0aGVzZSB0cmFuc2Zvcm1hdGlvbnMgdXNlZCB0byBiZSBhcHBsaWVkIGluIHRoZSBKUyBhbmQgbmF0aXZlIGNvZGUgYmFzZXMuXFxuICAgIC8vIG1vdmVkIHRoZW0gaW50byB0aGUgc2hhZGVyIGZvciBjbGFyaXR5IGFuZCBzaW1wbGljaXR5LlxcbiAgICBnYXB3aWR0aCA9IGdhcHdpZHRoIC8gMi4wO1xcbiAgICBmbG9hdCBoYWxmd2lkdGggPSB3aWR0aCAvIDIuMDtcXG4gICAgb2Zmc2V0ID0gLTEuMCAqIG9mZnNldDtcXG5cXG4gICAgZmxvYXQgaW5zZXQgPSBnYXB3aWR0aCArIChnYXB3aWR0aCA+IDAuMCA/IEFOVElBTElBU0lORyA6IDAuMCk7XFxuICAgIGZsb2F0IG91dHNldCA9IGdhcHdpZHRoICsgaGFsZndpZHRoICogKGdhcHdpZHRoID4gMC4wID8gMi4wIDogMS4wKSArIEFOVElBTElBU0lORztcXG5cXG4gICAgLy8gU2NhbGUgdGhlIGV4dHJ1c2lvbiB2ZWN0b3IgZG93biB0byBhIG5vcm1hbCBhbmQgdGhlbiB1cCBieSB0aGUgbGluZSB3aWR0aFxcbiAgICAvLyBvZiB0aGlzIHZlcnRleC5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpc3QgPW91dHNldCAqIGFfZXh0cnVkZSAqIHNjYWxlO1xcblxcbiAgICAvLyBDYWxjdWxhdGUgdGhlIG9mZnNldCB3aGVuIGRyYXdpbmcgYSBsaW5lIHRoYXQgaXMgdG8gdGhlIHNpZGUgb2YgdGhlIGFjdHVhbCBsaW5lLlxcbiAgICAvLyBXZSBkbyB0aGlzIGJ5IGNyZWF0aW5nIGEgdmVjdG9yIHRoYXQgcG9pbnRzIHRvd2FyZHMgdGhlIGV4dHJ1ZGUsIGJ1dCByb3RhdGVcXG4gICAgLy8gaXQgd2hlbiB3ZSdyZSBkcmF3aW5nIHJvdW5kIGVuZCBwb2ludHMgKGFfZGlyZWN0aW9uID0gLTEgb3IgMSkgc2luY2UgdGhlaXJcXG4gICAgLy8gZXh0cnVkZSB2ZWN0b3IgcG9pbnRzIGluIGFub3RoZXIgZGlyZWN0aW9uLlxcbiAgICBtZWRpdW1wIGZsb2F0IHUgPSAwLjUgKiBhX2RpcmVjdGlvbjtcXG4gICAgbWVkaXVtcCBmbG9hdCB0ID0gMS4wIC0gYWJzKHUpO1xcbiAgICBtZWRpdW1wIHZlYzIgb2Zmc2V0MiA9IG9mZnNldCAqIGFfZXh0cnVkZSAqIHNjYWxlICogbm9ybWFsLnkgKiBtYXQyKHQsIC11LCB1LCB0KTtcXG5cXG4gICAgdmVjNCBwcm9qZWN0ZWRfZXh0cnVkZSA9IHVfbWF0cml4ICogdmVjNChkaXN0IC8gdV9yYXRpbywgMC4wLCAwLjApO1xcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChwb3MgKyBvZmZzZXQyIC8gdV9yYXRpbywgMC4wLCAxLjApICsgcHJvamVjdGVkX2V4dHJ1ZGU7XFxuXFxuICAgIC8vIGNhbGN1bGF0ZSBob3cgbXVjaCB0aGUgcGVyc3BlY3RpdmUgdmlldyBzcXVpc2hlcyBvciBzdHJldGNoZXMgdGhlIGV4dHJ1ZGVcXG4gICAgZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZSA9IGxlbmd0aChkaXN0KTtcXG4gICAgZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZSA9IGxlbmd0aChwcm9qZWN0ZWRfZXh0cnVkZS54eSAvIGdsX1Bvc2l0aW9uLncgKiB1X2dsX3VuaXRzX3RvX3BpeGVscyk7XFxuICAgIHZfZ2FtbWFfc2NhbGUgPSBleHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlIC8gZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZTtcXG5cXG4gICAgdl90ZXhfYSA9IHZlYzIoYV9saW5lc29mYXIgKiB1X3BhdHRlcm5zY2FsZV9hLnggLyBmbG9vcndpZHRoLCBub3JtYWwueSAqIHVfcGF0dGVybnNjYWxlX2EueSArIHVfdGV4X3lfYSk7XFxuICAgIHZfdGV4X2IgPSB2ZWMyKGFfbGluZXNvZmFyICogdV9wYXR0ZXJuc2NhbGVfYi54IC8gZmxvb3J3aWR0aCwgbm9ybWFsLnkgKiB1X3BhdHRlcm5zY2FsZV9iLnkgKyB1X3RleF95X2IpO1xcblxcbiAgICB2X3dpZHRoMiA9IHZlYzIob3V0c2V0LCBpbnNldCk7XFxufVxcblwifSxyYXN0ZXI6e2ZyYWdtZW50U291cmNlOlwidW5pZm9ybSBmbG9hdCB1X2ZhZGVfdDtcXG51bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlMDtcXG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlMTtcXG52YXJ5aW5nIHZlYzIgdl9wb3MwO1xcbnZhcnlpbmcgdmVjMiB2X3BvczE7XFxuXFxudW5pZm9ybSBmbG9hdCB1X2JyaWdodG5lc3NfbG93O1xcbnVuaWZvcm0gZmxvYXQgdV9icmlnaHRuZXNzX2hpZ2g7XFxuXFxudW5pZm9ybSBmbG9hdCB1X3NhdHVyYXRpb25fZmFjdG9yO1xcbnVuaWZvcm0gZmxvYXQgdV9jb250cmFzdF9mYWN0b3I7XFxudW5pZm9ybSB2ZWMzIHVfc3Bpbl93ZWlnaHRzO1xcblxcbnZvaWQgbWFpbigpIHtcXG5cXG4gICAgLy8gcmVhZCBhbmQgY3Jvc3MtZmFkZSBjb2xvcnMgZnJvbSB0aGUgbWFpbiBhbmQgcGFyZW50IHRpbGVzXFxuICAgIHZlYzQgY29sb3IwID0gdGV4dHVyZTJEKHVfaW1hZ2UwLCB2X3BvczApO1xcbiAgICB2ZWM0IGNvbG9yMSA9IHRleHR1cmUyRCh1X2ltYWdlMSwgdl9wb3MxKTtcXG4gICAgaWYgKGNvbG9yMC5hID4gMC4wKSB7XFxuICAgICAgICBjb2xvcjAucmdiID0gY29sb3IwLnJnYiAvIGNvbG9yMC5hO1xcbiAgICB9XFxuICAgIGlmIChjb2xvcjEuYSA+IDAuMCkge1xcbiAgICAgICAgY29sb3IxLnJnYiA9IGNvbG9yMS5yZ2IgLyBjb2xvcjEuYTtcXG4gICAgfVxcbiAgICB2ZWM0IGNvbG9yID0gbWl4KGNvbG9yMCwgY29sb3IxLCB1X2ZhZGVfdCk7XFxuICAgIGNvbG9yLmEgKj0gdV9vcGFjaXR5O1xcbiAgICB2ZWMzIHJnYiA9IGNvbG9yLnJnYjtcXG5cXG4gICAgLy8gc3BpblxcbiAgICByZ2IgPSB2ZWMzKFxcbiAgICAgICAgZG90KHJnYiwgdV9zcGluX3dlaWdodHMueHl6KSxcXG4gICAgICAgIGRvdChyZ2IsIHVfc3Bpbl93ZWlnaHRzLnp4eSksXFxuICAgICAgICBkb3QocmdiLCB1X3NwaW5fd2VpZ2h0cy55engpKTtcXG5cXG4gICAgLy8gc2F0dXJhdGlvblxcbiAgICBmbG9hdCBhdmVyYWdlID0gKGNvbG9yLnIgKyBjb2xvci5nICsgY29sb3IuYikgLyAzLjA7XFxuICAgIHJnYiArPSAoYXZlcmFnZSAtIHJnYikgKiB1X3NhdHVyYXRpb25fZmFjdG9yO1xcblxcbiAgICAvLyBjb250cmFzdFxcbiAgICByZ2IgPSAocmdiIC0gMC41KSAqIHVfY29udHJhc3RfZmFjdG9yICsgMC41O1xcblxcbiAgICAvLyBicmlnaHRuZXNzXFxuICAgIHZlYzMgdV9oaWdoX3ZlYyA9IHZlYzModV9icmlnaHRuZXNzX2xvdywgdV9icmlnaHRuZXNzX2xvdywgdV9icmlnaHRuZXNzX2xvdyk7XFxuICAgIHZlYzMgdV9sb3dfdmVjID0gdmVjMyh1X2JyaWdodG5lc3NfaGlnaCwgdV9icmlnaHRuZXNzX2hpZ2gsIHVfYnJpZ2h0bmVzc19oaWdoKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChtaXgodV9oaWdoX3ZlYywgdV9sb3dfdmVjLCByZ2IpICogY29sb3IuYSwgY29sb3IuYSk7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcInVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG51bmlmb3JtIHZlYzIgdV90bF9wYXJlbnQ7XFxudW5pZm9ybSBmbG9hdCB1X3NjYWxlX3BhcmVudDtcXG51bmlmb3JtIGZsb2F0IHVfYnVmZmVyX3NjYWxlO1xcblxcbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xcbmF0dHJpYnV0ZSB2ZWMyIGFfdGV4dHVyZV9wb3M7XFxuXFxudmFyeWluZyB2ZWMyIHZfcG9zMDtcXG52YXJ5aW5nIHZlYzIgdl9wb3MxO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xcbiAgICAvLyBXZSBhcmUgdXNpbmcgSW50MTYgZm9yIHRleHR1cmUgcG9zaXRpb24gY29vcmRpbmF0ZXMgdG8gZ2l2ZSB1cyBlbm91Z2ggcHJlY2lzaW9uIGZvclxcbiAgICAvLyBmcmFjdGlvbmFsIGNvb3JkaW5hdGVzLiBXZSB1c2UgODE5MiB0byBzY2FsZSB0aGUgdGV4dHVyZSBjb29yZGluYXRlcyBpbiB0aGUgYnVmZmVyXFxuICAgIC8vIGFzIGFuIGFyYml0cmFyaWx5IGhpZ2ggbnVtYmVyIHRvIHByZXNlcnZlIGFkZXF1YXRlIHByZWNpc2lvbiB3aGVuIHJlbmRlcmluZy5cXG4gICAgLy8gVGhpcyBpcyBhbHNvIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBFWFRFTlQgd2UgYXJlIHVzaW5nIGZvciBvdXIgdGlsZSBidWZmZXIgcG9zIGNvb3JkaW5hdGVzLFxcbiAgICAvLyBzbyBtYXRoIGZvciBtb2RpZnlpbmcgZWl0aGVyIGlzIGNvbnNpc3RlbnQuXFxuICAgIHZfcG9zMCA9ICgoKGFfdGV4dHVyZV9wb3MgLyA4MTkyLjApIC0gMC41KSAvIHVfYnVmZmVyX3NjYWxlICkgKyAwLjU7XFxuICAgIHZfcG9zMSA9ICh2X3BvczAgKiB1X3NjYWxlX3BhcmVudCkgKyB1X3RsX3BhcmVudDtcXG59XFxuXCJ9LHN5bWJvbEljb246e2ZyYWdtZW50U291cmNlOlwidW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlO1xcblxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxudmFyeWluZyB2ZWMyIHZfdGV4O1xcbnZhcnlpbmcgZmxvYXQgdl9mYWRlX29wYWNpdHk7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG4gICAgbG93cCBmbG9hdCBhbHBoYSA9IG9wYWNpdHkgKiB2X2ZhZGVfb3BhY2l0eTtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVfdGV4dHVyZSwgdl90ZXgpICogYWxwaGE7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcImNvbnN0IGZsb2F0IFBJID0gMy4xNDE1OTI2NTM1ODk3OTM7XFxuXFxuYXR0cmlidXRlIHZlYzQgYV9wb3Nfb2Zmc2V0O1xcbmF0dHJpYnV0ZSB2ZWM0IGFfZGF0YTtcXG5hdHRyaWJ1dGUgdmVjMyBhX3Byb2plY3RlZF9wb3M7XFxuYXR0cmlidXRlIGZsb2F0IGFfZmFkZV9vcGFjaXR5O1xcblxcbnVuaWZvcm0gYm9vbCB1X2lzX3NpemVfem9vbV9jb25zdGFudDtcXG51bmlmb3JtIGJvb2wgdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQ7XFxudW5pZm9ybSBoaWdocCBmbG9hdCB1X3NpemVfdDsgLy8gdXNlZCB0byBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHpvb20gc3RvcHMgd2hlbiBzaXplIGlzIGEgY29tcG9zaXRlIGZ1bmN0aW9uXFxudW5pZm9ybSBoaWdocCBmbG9hdCB1X3NpemU7IC8vIHVzZWQgd2hlbiBzaXplIGlzIGJvdGggem9vbSBhbmQgZmVhdHVyZSBjb25zdGFudFxcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO1xcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9waXRjaDtcXG51bmlmb3JtIGJvb2wgdV9yb3RhdGVfc3ltYm9sO1xcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9hc3BlY3RfcmF0aW87XFxudW5pZm9ybSBmbG9hdCB1X2ZhZGVfY2hhbmdlO1xcblxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1X2xhYmVsX3BsYW5lX21hdHJpeDtcXG51bmlmb3JtIG1hdDQgdV9nbF9jb29yZF9tYXRyaXg7XFxuXFxudW5pZm9ybSBib29sIHVfaXNfdGV4dDtcXG51bmlmb3JtIGJvb2wgdV9waXRjaF93aXRoX21hcDtcXG5cXG51bmlmb3JtIHZlYzIgdV90ZXhzaXplO1xcblxcbnZhcnlpbmcgdmVjMiB2X3RleDtcXG52YXJ5aW5nIGZsb2F0IHZfZmFkZV9vcGFjaXR5O1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxuICAgIHZlYzIgYV9wb3MgPSBhX3Bvc19vZmZzZXQueHk7XFxuICAgIHZlYzIgYV9vZmZzZXQgPSBhX3Bvc19vZmZzZXQuenc7XFxuXFxuICAgIHZlYzIgYV90ZXggPSBhX2RhdGEueHk7XFxuICAgIHZlYzIgYV9zaXplID0gYV9kYXRhLnp3O1xcblxcbiAgICBoaWdocCBmbG9hdCBzZWdtZW50X2FuZ2xlID0gLWFfcHJvamVjdGVkX3Bvc1syXTtcXG5cXG4gICAgZmxvYXQgc2l6ZTtcXG4gICAgaWYgKCF1X2lzX3NpemVfem9vbV9jb25zdGFudCAmJiAhdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtcXG4gICAgICAgIHNpemUgPSBtaXgoYV9zaXplWzBdLCBhX3NpemVbMV0sIHVfc2l6ZV90KSAvIDEwLjA7XFxuICAgIH0gZWxzZSBpZiAodV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgIXVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSB7XFxuICAgICAgICBzaXplID0gYV9zaXplWzBdIC8gMTAuMDtcXG4gICAgfSBlbHNlIGlmICghdV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtcXG4gICAgICAgIHNpemUgPSB1X3NpemU7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBzaXplID0gdV9zaXplO1xcbiAgICB9XFxuXFxuICAgIHZlYzQgcHJvamVjdGVkUG9pbnQgPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xcbiAgICBoaWdocCBmbG9hdCBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlID0gcHJvamVjdGVkUG9pbnQudztcXG4gICAgLy8gU2VlIGNvbW1lbnRzIGluIHN5bWJvbF9zZGYudmVydGV4XFxuICAgIGhpZ2hwIGZsb2F0IGRpc3RhbmNlX3JhdGlvID0gdV9waXRjaF93aXRoX21hcCA/XFxuICAgICAgICBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlIC8gdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlIDpcXG4gICAgICAgIHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSAvIGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2U7XFxuICAgIGhpZ2hwIGZsb2F0IHBlcnNwZWN0aXZlX3JhdGlvID0gY2xhbXAoXFxuICAgICAgICAgICAgMC41ICsgMC41ICogZGlzdGFuY2VfcmF0aW8sXFxuICAgICAgICAgICAgMC4wLCAvLyBQcmV2ZW50cyBvdmVyc2l6ZWQgbmVhci1maWVsZCBzeW1ib2xzIGluIHBpdGNoZWQvb3Zlcnpvb21lZCB0aWxlc1xcbiAgICAgICAgICAgIDQuMCk7XFxuXFxuICAgIHNpemUgKj0gcGVyc3BlY3RpdmVfcmF0aW87XFxuXFxuICAgIGZsb2F0IGZvbnRTY2FsZSA9IHVfaXNfdGV4dCA/IHNpemUgLyAyNC4wIDogc2l6ZTtcXG5cXG4gICAgaGlnaHAgZmxvYXQgc3ltYm9sX3JvdGF0aW9uID0gMC4wO1xcbiAgICBpZiAodV9yb3RhdGVfc3ltYm9sKSB7XFxuICAgICAgICAvLyBTZWUgY29tbWVudHMgaW4gc3ltYm9sX3NkZi52ZXJ0ZXhcXG4gICAgICAgIHZlYzQgb2Zmc2V0UHJvamVjdGVkUG9pbnQgPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MgKyB2ZWMyKDEsIDApLCAwLCAxKTtcXG5cXG4gICAgICAgIHZlYzIgYSA9IHByb2plY3RlZFBvaW50Lnh5IC8gcHJvamVjdGVkUG9pbnQudztcXG4gICAgICAgIHZlYzIgYiA9IG9mZnNldFByb2plY3RlZFBvaW50Lnh5IC8gb2Zmc2V0UHJvamVjdGVkUG9pbnQudztcXG5cXG4gICAgICAgIHN5bWJvbF9yb3RhdGlvbiA9IGF0YW4oKGIueSAtIGEueSkgLyB1X2FzcGVjdF9yYXRpbywgYi54IC0gYS54KTtcXG4gICAgfVxcblxcbiAgICBoaWdocCBmbG9hdCBhbmdsZV9zaW4gPSBzaW4oc2VnbWVudF9hbmdsZSArIHN5bWJvbF9yb3RhdGlvbik7XFxuICAgIGhpZ2hwIGZsb2F0IGFuZ2xlX2NvcyA9IGNvcyhzZWdtZW50X2FuZ2xlICsgc3ltYm9sX3JvdGF0aW9uKTtcXG4gICAgbWF0MiByb3RhdGlvbl9tYXRyaXggPSBtYXQyKGFuZ2xlX2NvcywgLTEuMCAqIGFuZ2xlX3NpbiwgYW5nbGVfc2luLCBhbmdsZV9jb3MpO1xcblxcbiAgICB2ZWM0IHByb2plY3RlZF9wb3MgPSB1X2xhYmVsX3BsYW5lX21hdHJpeCAqIHZlYzQoYV9wcm9qZWN0ZWRfcG9zLnh5LCAwLjAsIDEuMCk7XFxuICAgIGdsX1Bvc2l0aW9uID0gdV9nbF9jb29yZF9tYXRyaXggKiB2ZWM0KHByb2plY3RlZF9wb3MueHkgLyBwcm9qZWN0ZWRfcG9zLncgKyByb3RhdGlvbl9tYXRyaXggKiAoYV9vZmZzZXQgLyAzMi4wICogZm9udFNjYWxlKSwgMC4wLCAxLjApO1xcblxcbiAgICB2X3RleCA9IGFfdGV4IC8gdV90ZXhzaXplO1xcbiAgICB2ZWMyIGZhZGVfb3BhY2l0eSA9IHVucGFja19vcGFjaXR5KGFfZmFkZV9vcGFjaXR5KTtcXG4gICAgZmxvYXQgZmFkZV9jaGFuZ2UgPSBmYWRlX29wYWNpdHlbMV0gPiAwLjUgPyB1X2ZhZGVfY2hhbmdlIDogLXVfZmFkZV9jaGFuZ2U7XFxuICAgIHZfZmFkZV9vcGFjaXR5ID0gbWF4KDAuMCwgbWluKDEuMCwgZmFkZV9vcGFjaXR5WzBdICsgZmFkZV9jaGFuZ2UpKTtcXG59XFxuXCJ9LHN5bWJvbFNERjp7ZnJhZ21lbnRTb3VyY2U6XCIjZGVmaW5lIFNERl9QWCA4LjBcXG4jZGVmaW5lIEVER0VfR0FNTUEgMC4xMDUvREVWSUNFX1BJWEVMX1JBVElPXFxuXFxudW5pZm9ybSBib29sIHVfaXNfaGFsbztcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgZmlsbF9jb2xvclxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb193aWR0aFxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoYWxvX2JsdXJcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7XFxudW5pZm9ybSBoaWdocCBmbG9hdCB1X2dhbW1hX3NjYWxlO1xcbnVuaWZvcm0gYm9vbCB1X2lzX3RleHQ7XFxuXFxudmFyeWluZyB2ZWMyIHZfZGF0YTA7XFxudmFyeWluZyB2ZWMzIHZfZGF0YTE7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoYWxvX2JsdXJcXG5cXG4gICAgdmVjMiB0ZXggPSB2X2RhdGEwLnh5O1xcbiAgICBmbG9hdCBnYW1tYV9zY2FsZSA9IHZfZGF0YTEueDtcXG4gICAgZmxvYXQgc2l6ZSA9IHZfZGF0YTEueTtcXG4gICAgZmxvYXQgZmFkZV9vcGFjaXR5ID0gdl9kYXRhMVsyXTtcXG5cXG4gICAgZmxvYXQgZm9udFNjYWxlID0gdV9pc190ZXh0ID8gc2l6ZSAvIDI0LjAgOiBzaXplO1xcblxcbiAgICBsb3dwIHZlYzQgY29sb3IgPSBmaWxsX2NvbG9yO1xcbiAgICBoaWdocCBmbG9hdCBnYW1tYSA9IEVER0VfR0FNTUEgLyAoZm9udFNjYWxlICogdV9nYW1tYV9zY2FsZSk7XFxuICAgIGxvd3AgZmxvYXQgYnVmZiA9ICgyNTYuMCAtIDY0LjApIC8gMjU2LjA7XFxuICAgIGlmICh1X2lzX2hhbG8pIHtcXG4gICAgICAgIGNvbG9yID0gaGFsb19jb2xvcjtcXG4gICAgICAgIGdhbW1hID0gKGhhbG9fYmx1ciAqIDEuMTkgLyBTREZfUFggKyBFREdFX0dBTU1BKSAvIChmb250U2NhbGUgKiB1X2dhbW1hX3NjYWxlKTtcXG4gICAgICAgIGJ1ZmYgPSAoNi4wIC0gaGFsb193aWR0aCAvIGZvbnRTY2FsZSkgLyBTREZfUFg7XFxuICAgIH1cXG5cXG4gICAgbG93cCBmbG9hdCBkaXN0ID0gdGV4dHVyZTJEKHVfdGV4dHVyZSwgdGV4KS5hO1xcbiAgICBoaWdocCBmbG9hdCBnYW1tYV9zY2FsZWQgPSBnYW1tYSAqIGdhbW1hX3NjYWxlO1xcbiAgICBoaWdocCBmbG9hdCBhbHBoYSA9IHNtb290aHN0ZXAoYnVmZiAtIGdhbW1hX3NjYWxlZCwgYnVmZiArIGdhbW1hX3NjYWxlZCwgZGlzdCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yICogKGFscGhhICogb3BhY2l0eSAqIGZhZGVfb3BhY2l0eSk7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcImNvbnN0IGZsb2F0IFBJID0gMy4xNDE1OTI2NTM1ODk3OTM7XFxuXFxuYXR0cmlidXRlIHZlYzQgYV9wb3Nfb2Zmc2V0O1xcbmF0dHJpYnV0ZSB2ZWM0IGFfZGF0YTtcXG5hdHRyaWJ1dGUgdmVjMyBhX3Byb2plY3RlZF9wb3M7XFxuYXR0cmlidXRlIGZsb2F0IGFfZmFkZV9vcGFjaXR5O1xcblxcbi8vIGNvbnRlbnRzIG9mIGFfc2l6ZSB2YXJ5IGJhc2VkIG9uIHRoZSB0eXBlIG9mIHByb3BlcnR5IHZhbHVlXFxuLy8gdXNlZCBmb3Ige3RleHQsaWNvbn0tc2l6ZS5cXG4vLyBGb3IgY29uc3RhbnRzLCBhX3NpemUgaXMgZGlzYWJsZWQuXFxuLy8gRm9yIHNvdXJjZSBmdW5jdGlvbnMsIHdlIGJpbmQgb25seSBvbmUgdmFsdWUgcGVyIHZlcnRleDogdGhlIHZhbHVlIG9mIHt0ZXh0LGljb259LXNpemUgZXZhbHVhdGVkIGZvciB0aGUgY3VycmVudCBmZWF0dXJlLlxcbi8vIEZvciBjb21wb3NpdGUgZnVuY3Rpb25zOlxcbi8vIFsgdGV4dC1zaXplKGxvd2VyWm9vbVN0b3AsIGZlYXR1cmUpLFxcbi8vICAgdGV4dC1zaXplKHVwcGVyWm9vbVN0b3AsIGZlYXR1cmUpIF1cXG51bmlmb3JtIGJvb2wgdV9pc19zaXplX3pvb21fY29uc3RhbnQ7XFxudW5pZm9ybSBib29sIHVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50O1xcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9zaXplX3Q7IC8vIHVzZWQgdG8gaW50ZXJwb2xhdGUgYmV0d2VlbiB6b29tIHN0b3BzIHdoZW4gc2l6ZSBpcyBhIGNvbXBvc2l0ZSBmdW5jdGlvblxcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9zaXplOyAvLyB1c2VkIHdoZW4gc2l6ZSBpcyBib3RoIHpvb20gYW5kIGZlYXR1cmUgY29uc3RhbnRcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgZmlsbF9jb2xvclxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb193aWR0aFxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoYWxvX2JsdXJcXG5cXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVfbGFiZWxfcGxhbmVfbWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1X2dsX2Nvb3JkX21hdHJpeDtcXG5cXG51bmlmb3JtIGJvb2wgdV9pc190ZXh0O1xcbnVuaWZvcm0gYm9vbCB1X3BpdGNoX3dpdGhfbWFwO1xcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9waXRjaDtcXG51bmlmb3JtIGJvb2wgdV9yb3RhdGVfc3ltYm9sO1xcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9hc3BlY3RfcmF0aW87XFxudW5pZm9ybSBoaWdocCBmbG9hdCB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U7XFxudW5pZm9ybSBmbG9hdCB1X2ZhZGVfY2hhbmdlO1xcblxcbnVuaWZvcm0gdmVjMiB1X3RleHNpemU7XFxuXFxudmFyeWluZyB2ZWMyIHZfZGF0YTA7XFxudmFyeWluZyB2ZWMzIHZfZGF0YTE7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoYWxvX2JsdXJcXG5cXG4gICAgdmVjMiBhX3BvcyA9IGFfcG9zX29mZnNldC54eTtcXG4gICAgdmVjMiBhX29mZnNldCA9IGFfcG9zX29mZnNldC56dztcXG5cXG4gICAgdmVjMiBhX3RleCA9IGFfZGF0YS54eTtcXG4gICAgdmVjMiBhX3NpemUgPSBhX2RhdGEuenc7XFxuXFxuICAgIGhpZ2hwIGZsb2F0IHNlZ21lbnRfYW5nbGUgPSAtYV9wcm9qZWN0ZWRfcG9zWzJdO1xcbiAgICBmbG9hdCBzaXplO1xcblxcbiAgICBpZiAoIXVfaXNfc2l6ZV96b29tX2NvbnN0YW50ICYmICF1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge1xcbiAgICAgICAgc2l6ZSA9IG1peChhX3NpemVbMF0sIGFfc2l6ZVsxXSwgdV9zaXplX3QpIC8gMTAuMDtcXG4gICAgfSBlbHNlIGlmICh1X2lzX3NpemVfem9vbV9jb25zdGFudCAmJiAhdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtcXG4gICAgICAgIHNpemUgPSBhX3NpemVbMF0gLyAxMC4wO1xcbiAgICB9IGVsc2UgaWYgKCF1X2lzX3NpemVfem9vbV9jb25zdGFudCAmJiB1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge1xcbiAgICAgICAgc2l6ZSA9IHVfc2l6ZTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHNpemUgPSB1X3NpemU7XFxuICAgIH1cXG5cXG4gICAgdmVjNCBwcm9qZWN0ZWRQb2ludCA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XFxuICAgIGhpZ2hwIGZsb2F0IGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2UgPSBwcm9qZWN0ZWRQb2ludC53O1xcbiAgICAvLyBJZiB0aGUgbGFiZWwgaXMgcGl0Y2hlZCB3aXRoIHRoZSBtYXAsIGxheW91dCBpcyBkb25lIGluIHBpdGNoZWQgc3BhY2UsXFxuICAgIC8vIHdoaWNoIG1ha2VzIGxhYmVscyBpbiB0aGUgZGlzdGFuY2Ugc21hbGxlciByZWxhdGl2ZSB0byB2aWV3cG9ydCBzcGFjZS5cXG4gICAgLy8gV2UgY291bnRlcmFjdCBwYXJ0IG9mIHRoYXQgZWZmZWN0IGJ5IG11bHRpcGx5aW5nIGJ5IHRoZSBwZXJzcGVjdGl2ZSByYXRpby5cXG4gICAgLy8gSWYgdGhlIGxhYmVsIGlzbid0IHBpdGNoZWQgd2l0aCB0aGUgbWFwLCB3ZSBkbyBsYXlvdXQgaW4gdmlld3BvcnQgc3BhY2UsXFxuICAgIC8vIHdoaWNoIG1ha2VzIGxhYmVscyBpbiB0aGUgZGlzdGFuY2UgbGFyZ2VyIHJlbGF0aXZlIHRvIHRoZSBmZWF0dXJlcyBhcm91bmRcXG4gICAgLy8gdGhlbS4gV2UgY291bnRlcmFjdCBwYXJ0IG9mIHRoYXQgZWZmZWN0IGJ5IGRpdmlkaW5nIGJ5IHRoZSBwZXJzcGVjdGl2ZSByYXRpby5cXG4gICAgaGlnaHAgZmxvYXQgZGlzdGFuY2VfcmF0aW8gPSB1X3BpdGNoX3dpdGhfbWFwID9cXG4gICAgICAgIGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2UgLyB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UgOlxcbiAgICAgICAgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlIC8gY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZTtcXG4gICAgaGlnaHAgZmxvYXQgcGVyc3BlY3RpdmVfcmF0aW8gPSBjbGFtcChcXG4gICAgICAgIDAuNSArIDAuNSAqIGRpc3RhbmNlX3JhdGlvLFxcbiAgICAgICAgMC4wLCAvLyBQcmV2ZW50cyBvdmVyc2l6ZWQgbmVhci1maWVsZCBzeW1ib2xzIGluIHBpdGNoZWQvb3Zlcnpvb21lZCB0aWxlc1xcbiAgICAgICAgNC4wKTtcXG5cXG4gICAgc2l6ZSAqPSBwZXJzcGVjdGl2ZV9yYXRpbztcXG5cXG4gICAgZmxvYXQgZm9udFNjYWxlID0gdV9pc190ZXh0ID8gc2l6ZSAvIDI0LjAgOiBzaXplO1xcblxcbiAgICBoaWdocCBmbG9hdCBzeW1ib2xfcm90YXRpb24gPSAwLjA7XFxuICAgIGlmICh1X3JvdGF0ZV9zeW1ib2wpIHtcXG4gICAgICAgIC8vIFBvaW50IGxhYmVscyB3aXRoICdyb3RhdGlvbi1hbGlnbm1lbnQ6IG1hcCcgYXJlIGhvcml6b250YWwgd2l0aCByZXNwZWN0IHRvIHRpbGUgdW5pdHNcXG4gICAgICAgIC8vIFRvIGZpZ3VyZSBvdXQgdGhhdCBhbmdsZSBpbiBwcm9qZWN0ZWQgc3BhY2UsIHdlIGRyYXcgYSBzaG9ydCBob3Jpem9udGFsIGxpbmUgaW4gdGlsZVxcbiAgICAgICAgLy8gc3BhY2UsIHByb2plY3QgaXQsIGFuZCBtZWFzdXJlIGl0cyBhbmdsZSBpbiBwcm9qZWN0ZWQgc3BhY2UuXFxuICAgICAgICB2ZWM0IG9mZnNldFByb2plY3RlZFBvaW50ID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zICsgdmVjMigxLCAwKSwgMCwgMSk7XFxuXFxuICAgICAgICB2ZWMyIGEgPSBwcm9qZWN0ZWRQb2ludC54eSAvIHByb2plY3RlZFBvaW50Lnc7XFxuICAgICAgICB2ZWMyIGIgPSBvZmZzZXRQcm9qZWN0ZWRQb2ludC54eSAvIG9mZnNldFByb2plY3RlZFBvaW50Lnc7XFxuXFxuICAgICAgICBzeW1ib2xfcm90YXRpb24gPSBhdGFuKChiLnkgLSBhLnkpIC8gdV9hc3BlY3RfcmF0aW8sIGIueCAtIGEueCk7XFxuICAgIH1cXG5cXG4gICAgaGlnaHAgZmxvYXQgYW5nbGVfc2luID0gc2luKHNlZ21lbnRfYW5nbGUgKyBzeW1ib2xfcm90YXRpb24pO1xcbiAgICBoaWdocCBmbG9hdCBhbmdsZV9jb3MgPSBjb3Moc2VnbWVudF9hbmdsZSArIHN5bWJvbF9yb3RhdGlvbik7XFxuICAgIG1hdDIgcm90YXRpb25fbWF0cml4ID0gbWF0MihhbmdsZV9jb3MsIC0xLjAgKiBhbmdsZV9zaW4sIGFuZ2xlX3NpbiwgYW5nbGVfY29zKTtcXG5cXG4gICAgdmVjNCBwcm9qZWN0ZWRfcG9zID0gdV9sYWJlbF9wbGFuZV9tYXRyaXggKiB2ZWM0KGFfcHJvamVjdGVkX3Bvcy54eSwgMC4wLCAxLjApO1xcbiAgICBnbF9Qb3NpdGlvbiA9IHVfZ2xfY29vcmRfbWF0cml4ICogdmVjNChwcm9qZWN0ZWRfcG9zLnh5IC8gcHJvamVjdGVkX3Bvcy53ICsgcm90YXRpb25fbWF0cml4ICogKGFfb2Zmc2V0IC8gMzIuMCAqIGZvbnRTY2FsZSksIDAuMCwgMS4wKTtcXG4gICAgZmxvYXQgZ2FtbWFfc2NhbGUgPSBnbF9Qb3NpdGlvbi53O1xcblxcbiAgICB2ZWMyIHRleCA9IGFfdGV4IC8gdV90ZXhzaXplO1xcbiAgICB2ZWMyIGZhZGVfb3BhY2l0eSA9IHVucGFja19vcGFjaXR5KGFfZmFkZV9vcGFjaXR5KTtcXG4gICAgZmxvYXQgZmFkZV9jaGFuZ2UgPSBmYWRlX29wYWNpdHlbMV0gPiAwLjUgPyB1X2ZhZGVfY2hhbmdlIDogLXVfZmFkZV9jaGFuZ2U7XFxuICAgIGZsb2F0IGludGVycG9sYXRlZF9mYWRlX29wYWNpdHkgPSBtYXgoMC4wLCBtaW4oMS4wLCBmYWRlX29wYWNpdHlbMF0gKyBmYWRlX2NoYW5nZSkpO1xcblxcbiAgICB2X2RhdGEwID0gdmVjMih0ZXgueCwgdGV4LnkpO1xcbiAgICB2X2RhdGExID0gdmVjMyhnYW1tYV9zY2FsZSwgc2l6ZSwgaW50ZXJwb2xhdGVkX2ZhZGVfb3BhY2l0eSk7XFxufVxcblwifX0sdHI9LyNwcmFnbWEgbWFwYm94OiAoW1xcd10rKSAoW1xcd10rKSAoW1xcd10rKSAoW1xcd10rKS9nLGVyPWZ1bmN0aW9uKHQpe3ZhciBlPVFlW3RdLHI9e307ZS5mcmFnbWVudFNvdXJjZT1lLmZyYWdtZW50U291cmNlLnJlcGxhY2UodHIsZnVuY3Rpb24odCxlLG4saSxhKXtyZXR1cm4gclthXT0hMCxcImRlZmluZVwiPT09ZT9cIlxcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV9cIithK1wiXFxudmFyeWluZyBcIituK1wiIFwiK2krXCIgXCIrYStcIjtcXG4jZWxzZVxcbnVuaWZvcm0gXCIrbitcIiBcIitpK1wiIHVfXCIrYStcIjtcXG4jZW5kaWZcXG5cIjpcIlxcbiNpZmRlZiBIQVNfVU5JRk9STV91X1wiK2ErXCJcXG4gICAgXCIrbitcIiBcIitpK1wiIFwiK2ErXCIgPSB1X1wiK2ErXCI7XFxuI2VuZGlmXFxuXCJ9KSxlLnZlcnRleFNvdXJjZT1lLnZlcnRleFNvdXJjZS5yZXBsYWNlKHRyLGZ1bmN0aW9uKHQsZSxuLGksYSl7dmFyIG89XCJmbG9hdFwiPT09aT9cInZlYzJcIjpcInZlYzRcIjtyZXR1cm4gclthXT9cImRlZmluZVwiPT09ZT9cIlxcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV9cIithK1wiXFxudW5pZm9ybSBsb3dwIGZsb2F0IGFfXCIrYStcIl90O1xcbmF0dHJpYnV0ZSBcIituK1wiIFwiK28rXCIgYV9cIithK1wiO1xcbnZhcnlpbmcgXCIrbitcIiBcIitpK1wiIFwiK2ErXCI7XFxuI2Vsc2VcXG51bmlmb3JtIFwiK24rXCIgXCIraStcIiB1X1wiK2ErXCI7XFxuI2VuZGlmXFxuXCI6XCJcXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfXCIrYStcIlxcbiAgICBcIithK1wiID0gdW5wYWNrX21peF9cIitvK1wiKGFfXCIrYStcIiwgYV9cIithK1wiX3QpO1xcbiNlbHNlXFxuICAgIFwiK24rXCIgXCIraStcIiBcIithK1wiID0gdV9cIithK1wiO1xcbiNlbmRpZlxcblwiOlwiZGVmaW5lXCI9PT1lP1wiXFxuI2lmbmRlZiBIQVNfVU5JRk9STV91X1wiK2ErXCJcXG51bmlmb3JtIGxvd3AgZmxvYXQgYV9cIithK1wiX3Q7XFxuYXR0cmlidXRlIFwiK24rXCIgXCIrbytcIiBhX1wiK2ErXCI7XFxuI2Vsc2VcXG51bmlmb3JtIFwiK24rXCIgXCIraStcIiB1X1wiK2ErXCI7XFxuI2VuZGlmXFxuXCI6XCJcXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfXCIrYStcIlxcbiAgICBcIituK1wiIFwiK2krXCIgXCIrYStcIiA9IHVucGFja19taXhfXCIrbytcIihhX1wiK2ErXCIsIGFfXCIrYStcIl90KTtcXG4jZWxzZVxcbiAgICBcIituK1wiIFwiK2krXCIgXCIrYStcIiA9IHVfXCIrYStcIjtcXG4jZW5kaWZcXG5cIn0pfTtmb3IodmFyIHJyIGluIFFlKWVyKHJyKTt2YXIgbnI9UWUsaXI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5nbDt0aGlzLnByb2dyYW09aS5jcmVhdGVQcm9ncmFtKCk7dmFyIG89ci5kZWZpbmVzKCkuY29uY2F0KFwiI2RlZmluZSBERVZJQ0VfUElYRUxfUkFUSU8gXCIrYS5kZXZpY2VQaXhlbFJhdGlvLnRvRml4ZWQoMSkpO24mJm8ucHVzaChcIiNkZWZpbmUgT1ZFUkRSQVdfSU5TUEVDVE9SO1wiKTt2YXIgcz1vLmNvbmNhdChuci5wcmVsdWRlLmZyYWdtZW50U291cmNlLGUuZnJhZ21lbnRTb3VyY2UpLmpvaW4oXCJcXG5cIiksbD1vLmNvbmNhdChuci5wcmVsdWRlLnZlcnRleFNvdXJjZSxlLnZlcnRleFNvdXJjZSkuam9pbihcIlxcblwiKSxjPWkuY3JlYXRlU2hhZGVyKGkuRlJBR01FTlRfU0hBREVSKTtpLnNoYWRlclNvdXJjZShjLHMpLGkuY29tcGlsZVNoYWRlcihjKSxpLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sYyk7dmFyIHU9aS5jcmVhdGVTaGFkZXIoaS5WRVJURVhfU0hBREVSKTtpLnNoYWRlclNvdXJjZSh1LGwpLGkuY29tcGlsZVNoYWRlcih1KSxpLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sdSk7Zm9yKHZhciBoPXIubGF5b3V0QXR0cmlidXRlc3x8W10sZj0wO2Y8aC5sZW5ndGg7ZisrKWkuYmluZEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSxmLGhbZl0ubmFtZSk7aS5saW5rUHJvZ3JhbSh0aGlzLnByb2dyYW0pLHRoaXMubnVtQXR0cmlidXRlcz1pLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5wcm9ncmFtLGkuQUNUSVZFX0FUVFJJQlVURVMpLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLnVuaWZvcm1zPXt9O2Zvcih2YXIgcD0wO3A8dGhpcy5udW1BdHRyaWJ1dGVzO3ArKyl7dmFyIGQ9aS5nZXRBY3RpdmVBdHRyaWIodGhpcy5wcm9ncmFtLHApO2QmJih0aGlzLmF0dHJpYnV0ZXNbZC5uYW1lXT1pLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSxkLm5hbWUpKX1mb3IodmFyIGc9aS5nZXRQcm9ncmFtUGFyYW1ldGVyKHRoaXMucHJvZ3JhbSxpLkFDVElWRV9VTklGT1JNUyksdj0wO3Y8Zzt2Kyspe3ZhciBtPWkuZ2V0QWN0aXZlVW5pZm9ybSh0aGlzLnByb2dyYW0sdik7bSYmKHRoaXMudW5pZm9ybXNbbS5uYW1lXT1pLmdldFVuaWZvcm1Mb2NhdGlvbih0aGlzLnByb2dyYW0sbS5uYW1lKSl9fTtmdW5jdGlvbiBhcihlLHIsbixpLGEpe2Zvcih2YXIgbz0wO288bi5sZW5ndGg7bysrKXt2YXIgcz1uW29dO2lmKGkuaXNMZXNzVGhhbihzLnRpbGVJRCkpYnJlYWs7aWYoci5rZXk9PT1zLnRpbGVJRC5rZXkpcmV0dXJuO2lmKHMudGlsZUlELmlzQ2hpbGRPZihyKSl7Zm9yKHZhciBsPXIuY2hpbGRyZW4oMS8wKSxjPTA7YzxsLmxlbmd0aDtjKyspYXIoZSxsW2NdLG4uc2xpY2UobyksaSxhKTtyZXR1cm59fXZhciB1PXIub3ZlcnNjYWxlZFotZS5vdmVyc2NhbGVkWixoPW5ldyB0LkNhbm9uaWNhbFRpbGVJRCh1LHIuY2Fub25pY2FsLngtKGUuY2Fub25pY2FsLng8PHUpLHIuY2Fub25pY2FsLnktKGUuY2Fub25pY2FsLnk8PHUpKTthW2gua2V5XT1hW2gua2V5XXx8aH1mdW5jdGlvbiBvcih0LGUscixuLGkpe3ZhciBhPXQuY29udGV4dCxvPWEuZ2wscz1pP3QudXNlUHJvZ3JhbShcImNvbGxpc2lvbkNpcmNsZVwiKTp0LnVzZVByb2dyYW0oXCJjb2xsaXNpb25Cb3hcIik7YS5zZXREZXB0aE1vZGUocXQuZGlzYWJsZWQpLGEuc2V0U3RlbmNpbE1vZGUoSHQuZGlzYWJsZWQpLGEuc2V0Q29sb3JNb2RlKHQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKTtmb3IodmFyIGw9MDtsPG4ubGVuZ3RoO2wrKyl7dmFyIGM9bltsXSx1PWUuZ2V0VGlsZShjKSxoPXUuZ2V0QnVja2V0KHIpO2lmKGgpe3ZhciBmPWk/aC5jb2xsaXNpb25DaXJjbGU6aC5jb2xsaXNpb25Cb3g7aWYoZil7by51bmlmb3JtTWF0cml4NGZ2KHMudW5pZm9ybXMudV9tYXRyaXgsITEsYy5wb3NNYXRyaXgpLGl8fGEubGluZVdpZHRoLnNldCgxKSxvLnVuaWZvcm0xZihzLnVuaWZvcm1zLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSx0LnRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlKTt2YXIgcD1NZSh1LDEsdC50cmFuc2Zvcm0uem9vbSksZD1NYXRoLnBvdygyLHQudHJhbnNmb3JtLnpvb20tdS50aWxlSUQub3ZlcnNjYWxlZFopO28udW5pZm9ybTFmKHMudW5pZm9ybXMudV9waXhlbHNfdG9fdGlsZV91bml0cyxwKSxvLnVuaWZvcm0yZihzLnVuaWZvcm1zLnVfZXh0cnVkZV9zY2FsZSx0LnRyYW5zZm9ybS5waXhlbHNUb0dMVW5pdHNbMF0vKHAqZCksdC50cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzWzFdLyhwKmQpKSxvLnVuaWZvcm0xZihzLnVuaWZvcm1zLnVfb3ZlcnNjYWxlX2ZhY3Rvcix1LnRpbGVJRC5vdmVyc2NhbGVGYWN0b3IoKSkscy5kcmF3KGEsaT9vLlRSSUFOR0xFUzpvLkxJTkVTLHIuaWQsZi5sYXlvdXRWZXJ0ZXhCdWZmZXIsZi5pbmRleEJ1ZmZlcixmLnNlZ21lbnRzLG51bGwsZi5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIsbnVsbCl9fX19aXIucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwpe2Zvcih2YXIgYyx1PXQuZ2wsaD0oYz17fSxjW3UuTElORVNdPTIsY1t1LlRSSUFOR0xFU109MyxjKVtlXSxmPTAscD1hLmdldCgpO2Y8cC5sZW5ndGg7Zis9MSl7dmFyIGQ9cFtmXSxnPWQudmFvc3x8KGQudmFvcz17fSk7KGdbcl18fChnW3JdPW5ldyBRKSkuYmluZCh0LHRoaXMsbixvP28uZ2V0UGFpbnRWZXJ0ZXhCdWZmZXJzKCk6W10saSxkLnZlcnRleE9mZnNldCxzLGwpLHUuZHJhd0VsZW1lbnRzKGUsZC5wcmltaXRpdmVMZW5ndGgqaCx1LlVOU0lHTkVEX1NIT1JULGQucHJpbWl0aXZlT2Zmc2V0KmgqMil9fTt2YXIgc3I9dC5tYXQ0LmlkZW50aXR5KG5ldyBGbG9hdDMyQXJyYXkoMTYpKSxscj10LmRlZmF1bHQkMTkubGF5b3V0O2Z1bmN0aW9uIGNyKHQsZSxyLG4saSxhLG8scyxsLGMpe3ZhciB1LGg9dC5jb250ZXh0LGY9aC5nbCxwPXQudHJhbnNmb3JtLGQ9XCJtYXBcIj09PXMsZz1cIm1hcFwiPT09bCx2PWQmJlwibGluZVwiPT09ci5sYXlvdXQuZ2V0KFwic3ltYm9sLXBsYWNlbWVudFwiKSxtPWQmJiFnJiYhdix5PWc7aC5zZXREZXB0aE1vZGUoeT90LmRlcHRoTW9kZUZvclN1YmxheWVyKDAscXQuUmVhZE9ubHkpOnF0LmRpc2FibGVkKTtmb3IodmFyIHg9MCxiPW47eDxiLmxlbmd0aDt4Kz0xKXt2YXIgXz1iW3hdLHc9ZS5nZXRUaWxlKF8pLGs9dy5nZXRCdWNrZXQocik7aWYoayl7dmFyIEE9aT9rLnRleHQ6ay5pY29uO2lmKEEmJkEuc2VnbWVudHMuZ2V0KCkubGVuZ3RoKXt2YXIgVD1BLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQoci5pZCksTT1pfHxrLnNkZkljb25zLFM9aT9rLnRleHRTaXplRGF0YTprLmljb25TaXplRGF0YTtpZih1fHwodT10LnVzZVByb2dyYW0oTT9cInN5bWJvbFNERlwiOlwic3ltYm9sSWNvblwiLFQpLFQuc2V0VW5pZm9ybXModC5jb250ZXh0LHUsci5wYWludCx7em9vbTp0LnRyYW5zZm9ybS56b29tfSksdXIodSx0LHIsaSxtLGcsUykpLGguYWN0aXZlVGV4dHVyZS5zZXQoZi5URVhUVVJFMCksZi51bmlmb3JtMWkodS51bmlmb3Jtcy51X3RleHR1cmUsMCksaSl3LmdseXBoQXRsYXNUZXh0dXJlLmJpbmQoZi5MSU5FQVIsZi5DTEFNUF9UT19FREdFKSxmLnVuaWZvcm0yZnYodS51bmlmb3Jtcy51X3RleHNpemUsdy5nbHlwaEF0bGFzVGV4dHVyZS5zaXplKTtlbHNle3ZhciBFPTEhPT1yLmxheW91dC5nZXQoXCJpY29uLXNpemVcIikuY29uc3RhbnRPcigwKXx8ay5pY29uc05lZWRMaW5lYXIsQz1nfHwwIT09cC5waXRjaDt3Lmljb25BdGxhc1RleHR1cmUuYmluZChNfHx0Lm9wdGlvbnMucm90YXRpbmd8fHQub3B0aW9ucy56b29taW5nfHxFfHxDP2YuTElORUFSOmYuTkVBUkVTVCxmLkNMQU1QX1RPX0VER0UpLGYudW5pZm9ybTJmdih1LnVuaWZvcm1zLnVfdGV4c2l6ZSx3Lmljb25BdGxhc1RleHR1cmUuc2l6ZSl9Zi51bmlmb3JtTWF0cml4NGZ2KHUudW5pZm9ybXMudV9tYXRyaXgsITEsdC50cmFuc2xhdGVQb3NNYXRyaXgoXy5wb3NNYXRyaXgsdyxhLG8pKTt2YXIgTD1NZSh3LDEsdC50cmFuc2Zvcm0uem9vbSksej1oZShfLnBvc01hdHJpeCxnLGQsdC50cmFuc2Zvcm0sTCksTz1mZShfLnBvc01hdHJpeCxnLGQsdC50cmFuc2Zvcm0sTCk7Zi51bmlmb3JtTWF0cml4NGZ2KHUudW5pZm9ybXMudV9nbF9jb29yZF9tYXRyaXgsITEsdC50cmFuc2xhdGVQb3NNYXRyaXgoTyx3LGEsbywhMCkpLHY/KGYudW5pZm9ybU1hdHJpeDRmdih1LnVuaWZvcm1zLnVfbGFiZWxfcGxhbmVfbWF0cml4LCExLHNyKSxnZShrLF8ucG9zTWF0cml4LHQsaSx6LE8sZyxjKSk6Zi51bmlmb3JtTWF0cml4NGZ2KHUudW5pZm9ybXMudV9sYWJlbF9wbGFuZV9tYXRyaXgsITEseiksZi51bmlmb3JtMWYodS51bmlmb3Jtcy51X2ZhZGVfY2hhbmdlLHQub3B0aW9ucy5mYWRlRHVyYXRpb24/dC5zeW1ib2xGYWRlQ2hhbmdlOjEpLGhyKHUsVCx0LHIsdyxBLGksTSxnKX19fX1mdW5jdGlvbiB1cihlLHIsbixpLGEsbyxzKXt2YXIgbD1yLmNvbnRleHQuZ2wsYz1yLnRyYW5zZm9ybTtsLnVuaWZvcm0xaShlLnVuaWZvcm1zLnVfcGl0Y2hfd2l0aF9tYXAsbz8xOjApLGwudW5pZm9ybTFmKGUudW5pZm9ybXMudV9pc190ZXh0LGk/MTowKSxsLnVuaWZvcm0xZihlLnVuaWZvcm1zLnVfcGl0Y2gsYy5waXRjaC8zNjAqMipNYXRoLlBJKTt2YXIgdT1cImNvbnN0YW50XCI9PT1zLmZ1bmN0aW9uVHlwZXx8XCJzb3VyY2VcIj09PXMuZnVuY3Rpb25UeXBlLGg9XCJjb25zdGFudFwiPT09cy5mdW5jdGlvblR5cGV8fFwiY2FtZXJhXCI9PT1zLmZ1bmN0aW9uVHlwZTtsLnVuaWZvcm0xaShlLnVuaWZvcm1zLnVfaXNfc2l6ZV96b29tX2NvbnN0YW50LHU/MTowKSxsLnVuaWZvcm0xaShlLnVuaWZvcm1zLnVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50LGg/MTowKSxsLnVuaWZvcm0xZihlLnVuaWZvcm1zLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSxjLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UpO3ZhciBmPXQuZXZhbHVhdGVTaXplRm9yWm9vbShzLGMuem9vbSxsci5wcm9wZXJ0aWVzW2k/XCJ0ZXh0LXNpemVcIjpcImljb24tc2l6ZVwiXSk7dm9pZCAwIT09Zi51U2l6ZVQmJmwudW5pZm9ybTFmKGUudW5pZm9ybXMudV9zaXplX3QsZi51U2l6ZVQpLHZvaWQgMCE9PWYudVNpemUmJmwudW5pZm9ybTFmKGUudW5pZm9ybXMudV9zaXplLGYudVNpemUpLGwudW5pZm9ybTFmKGUudW5pZm9ybXMudV9hc3BlY3RfcmF0aW8sYy53aWR0aC9jLmhlaWdodCksbC51bmlmb3JtMWkoZS51bmlmb3Jtcy51X3JvdGF0ZV9zeW1ib2wsYT8xOjApfWZ1bmN0aW9uIGhyKHQsZSxyLG4saSxhLG8scyxsKXt2YXIgYz1yLmNvbnRleHQsdT1jLmdsLGg9ci50cmFuc2Zvcm07aWYocyl7dmFyIGY9MCE9PW4ucGFpbnQuZ2V0KG8/XCJ0ZXh0LWhhbG8td2lkdGhcIjpcImljb24taGFsby13aWR0aFwiKS5jb25zdGFudE9yKDEpLHA9bD9NYXRoLmNvcyhoLl9waXRjaCkqaC5jYW1lcmFUb0NlbnRlckRpc3RhbmNlOjE7dS51bmlmb3JtMWYodC51bmlmb3Jtcy51X2dhbW1hX3NjYWxlLHApLGYmJih1LnVuaWZvcm0xZih0LnVuaWZvcm1zLnVfaXNfaGFsbywxKSxmcihhLG4sYyx0KSksdS51bmlmb3JtMWYodC51bmlmb3Jtcy51X2lzX2hhbG8sMCl9ZnIoYSxuLGMsdCl9ZnVuY3Rpb24gZnIodCxlLHIsbil7bi5kcmF3KHIsci5nbC5UUklBTkdMRVMsZS5pZCx0LmxheW91dFZlcnRleEJ1ZmZlcix0LmluZGV4QnVmZmVyLHQuc2VnbWVudHMsdC5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KGUuaWQpLHQuZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlcix0Lm9wYWNpdHlWZXJ0ZXhCdWZmZXIpfWZ1bmN0aW9uIHByKHQsZSxyLG4saSxvLHMsbCxjKXt2YXIgdSxoLGYscCxkPWUuY29udGV4dCxnPWQuZ2wsdj1pLnBhaW50LmdldChcImxpbmUtZGFzaGFycmF5XCIpLG09aS5wYWludC5nZXQoXCJsaW5lLXBhdHRlcm5cIik7aWYobHx8Yyl7dmFyIHk9MS9NZShyLDEsZS50cmFuc2Zvcm0udGlsZVpvb20pO2lmKHYpe3U9ZS5saW5lQXRsYXMuZ2V0RGFzaCh2LmZyb20sXCJyb3VuZFwiPT09aS5sYXlvdXQuZ2V0KFwibGluZS1jYXBcIikpLGg9ZS5saW5lQXRsYXMuZ2V0RGFzaCh2LnRvLFwicm91bmRcIj09PWkubGF5b3V0LmdldChcImxpbmUtY2FwXCIpKTt2YXIgeD11LndpZHRoKnYuZnJvbVNjYWxlLGI9aC53aWR0aCp2LnRvU2NhbGU7Zy51bmlmb3JtMmYodC51bmlmb3Jtcy51X3BhdHRlcm5zY2FsZV9hLHkveCwtdS5oZWlnaHQvMiksZy51bmlmb3JtMmYodC51bmlmb3Jtcy51X3BhdHRlcm5zY2FsZV9iLHkvYiwtaC5oZWlnaHQvMiksZy51bmlmb3JtMWYodC51bmlmb3Jtcy51X3NkZmdhbW1hLGUubGluZUF0bGFzLndpZHRoLygyNTYqTWF0aC5taW4oeCxiKSphLmRldmljZVBpeGVsUmF0aW8pLzIpfWVsc2UgaWYobSl7aWYoZj1lLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKG0uZnJvbSkscD1lLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKG0udG8pLCFmfHwhcClyZXR1cm47Zy51bmlmb3JtMmYodC51bmlmb3Jtcy51X3BhdHRlcm5fc2l6ZV9hLGYuZGlzcGxheVNpemVbMF0qbS5mcm9tU2NhbGUveSxmLmRpc3BsYXlTaXplWzFdKSxnLnVuaWZvcm0yZih0LnVuaWZvcm1zLnVfcGF0dGVybl9zaXplX2IscC5kaXNwbGF5U2l6ZVswXSptLnRvU2NhbGUveSxwLmRpc3BsYXlTaXplWzFdKTt2YXIgXz1lLmltYWdlTWFuYWdlci5nZXRQaXhlbFNpemUoKSx3PV8ud2lkdGgsaz1fLmhlaWdodDtnLnVuaWZvcm0yZnYodC51bmlmb3Jtcy51X3RleHNpemUsW3csa10pfWcudW5pZm9ybTJmKHQudW5pZm9ybXMudV9nbF91bml0c190b19waXhlbHMsMS9lLnRyYW5zZm9ybS5waXhlbHNUb0dMVW5pdHNbMF0sMS9lLnRyYW5zZm9ybS5waXhlbHNUb0dMVW5pdHNbMV0pfWwmJih2PyhnLnVuaWZvcm0xaSh0LnVuaWZvcm1zLnVfaW1hZ2UsMCksZC5hY3RpdmVUZXh0dXJlLnNldChnLlRFWFRVUkUwKSxlLmxpbmVBdGxhcy5iaW5kKGQpLGcudW5pZm9ybTFmKHQudW5pZm9ybXMudV90ZXhfeV9hLHUueSksZy51bmlmb3JtMWYodC51bmlmb3Jtcy51X3RleF95X2IsaC55KSxnLnVuaWZvcm0xZih0LnVuaWZvcm1zLnVfbWl4LHYudCkpOm0mJihnLnVuaWZvcm0xaSh0LnVuaWZvcm1zLnVfaW1hZ2UsMCksZC5hY3RpdmVUZXh0dXJlLnNldChnLlRFWFRVUkUwKSxlLmltYWdlTWFuYWdlci5iaW5kKGQpLGcudW5pZm9ybTJmdih0LnVuaWZvcm1zLnVfcGF0dGVybl90bF9hLGYudGwpLGcudW5pZm9ybTJmdih0LnVuaWZvcm1zLnVfcGF0dGVybl9icl9hLGYuYnIpLGcudW5pZm9ybTJmdih0LnVuaWZvcm1zLnVfcGF0dGVybl90bF9iLHAudGwpLGcudW5pZm9ybTJmdih0LnVuaWZvcm1zLnVfcGF0dGVybl9icl9iLHAuYnIpLGcudW5pZm9ybTFmKHQudW5pZm9ybXMudV9mYWRlLG0udCkpKSxkLnNldFN0ZW5jaWxNb2RlKGUuc3RlbmNpbE1vZGVGb3JDbGlwcGluZyhvKSk7dmFyIEE9ZS50cmFuc2xhdGVQb3NNYXRyaXgoby5wb3NNYXRyaXgscixpLnBhaW50LmdldChcImxpbmUtdHJhbnNsYXRlXCIpLGkucGFpbnQuZ2V0KFwibGluZS10cmFuc2xhdGUtYW5jaG9yXCIpKTtpZihnLnVuaWZvcm1NYXRyaXg0ZnYodC51bmlmb3Jtcy51X21hdHJpeCwhMSxBKSxnLnVuaWZvcm0xZih0LnVuaWZvcm1zLnVfcmF0aW8sMS9NZShyLDEsZS50cmFuc2Zvcm0uem9vbSkpLGkucGFpbnQuZ2V0KFwibGluZS1ncmFkaWVudFwiKSl7ZC5hY3RpdmVUZXh0dXJlLnNldChnLlRFWFRVUkUwKTt2YXIgVD1pLmdyYWRpZW50VGV4dHVyZTtpZighaS5ncmFkaWVudClyZXR1cm47VHx8KFQ9aS5ncmFkaWVudFRleHR1cmU9bmV3IHooZCxpLmdyYWRpZW50LGcuUkdCQSkpLFQuYmluZChnLkxJTkVBUixnLkNMQU1QX1RPX0VER0UpLGcudW5pZm9ybTFpKHQudW5pZm9ybXMudV9pbWFnZSwwKX10LmRyYXcoZCxnLlRSSUFOR0xFUyxpLmlkLG4ubGF5b3V0VmVydGV4QnVmZmVyLG4uaW5kZXhCdWZmZXIsbi5zZWdtZW50cyxzKX12YXIgZHI9ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm4hMTt2YXIgcj1lLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKHQuZnJvbSksbj1lLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKHQudG8pO3JldHVybiFyfHwhbn0sZ3I9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuY29udGV4dCxpPW4uZ2wsYT1lLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKHQuZnJvbSksbz1lLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKHQudG8pO2kudW5pZm9ybTFpKHIudW5pZm9ybXMudV9pbWFnZSwwKSxpLnVuaWZvcm0yZnYoci51bmlmb3Jtcy51X3BhdHRlcm5fdGxfYSxhLnRsKSxpLnVuaWZvcm0yZnYoci51bmlmb3Jtcy51X3BhdHRlcm5fYnJfYSxhLmJyKSxpLnVuaWZvcm0yZnYoci51bmlmb3Jtcy51X3BhdHRlcm5fdGxfYixvLnRsKSxpLnVuaWZvcm0yZnYoci51bmlmb3Jtcy51X3BhdHRlcm5fYnJfYixvLmJyKTt2YXIgcz1lLmltYWdlTWFuYWdlci5nZXRQaXhlbFNpemUoKSxsPXMud2lkdGgsYz1zLmhlaWdodDtpLnVuaWZvcm0yZnYoci51bmlmb3Jtcy51X3RleHNpemUsW2wsY10pLGkudW5pZm9ybTFmKHIudW5pZm9ybXMudV9taXgsdC50KSxpLnVuaWZvcm0yZnYoci51bmlmb3Jtcy51X3BhdHRlcm5fc2l6ZV9hLGEuZGlzcGxheVNpemUpLGkudW5pZm9ybTJmdihyLnVuaWZvcm1zLnVfcGF0dGVybl9zaXplX2Isby5kaXNwbGF5U2l6ZSksaS51bmlmb3JtMWYoci51bmlmb3Jtcy51X3NjYWxlX2EsdC5mcm9tU2NhbGUpLGkudW5pZm9ybTFmKHIudW5pZm9ybXMudV9zY2FsZV9iLHQudG9TY2FsZSksbi5hY3RpdmVUZXh0dXJlLnNldChpLlRFWFRVUkUwKSxlLmltYWdlTWFuYWdlci5iaW5kKGUuY29udGV4dCl9LHZyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLmNvbnRleHQuZ2w7bi51bmlmb3JtMWYoci51bmlmb3Jtcy51X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLDEvTWUodCwxLGUudHJhbnNmb3JtLnRpbGVab29tKSk7dmFyIGk9TWF0aC5wb3coMix0LnRpbGVJRC5vdmVyc2NhbGVkWiksYT10LnRpbGVTaXplKk1hdGgucG93KDIsZS50cmFuc2Zvcm0udGlsZVpvb20pL2ksbz1hKih0LnRpbGVJRC5jYW5vbmljYWwueCt0LnRpbGVJRC53cmFwKmkpLHM9YSp0LnRpbGVJRC5jYW5vbmljYWwueTtuLnVuaWZvcm0yZihyLnVuaWZvcm1zLnVfcGl4ZWxfY29vcmRfdXBwZXIsbz4+MTYscz4+MTYpLG4udW5pZm9ybTJmKHIudW5pZm9ybXMudV9waXhlbF9jb29yZF9sb3dlciw2NTUzNSZvLDY1NTM1JnMpfTtmdW5jdGlvbiBtcih0LGUscixuLGkpe2lmKCFkcihyLnBhaW50LmdldChcImZpbGwtcGF0dGVyblwiKSx0KSlmb3IodmFyIGE9ITAsbz0wLHM9bjtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb10sYz1lLmdldFRpbGUobCksdT1jLmdldEJ1Y2tldChyKTt1JiYodC5jb250ZXh0LnNldFN0ZW5jaWxNb2RlKHQuc3RlbmNpbE1vZGVGb3JDbGlwcGluZyhsKSksaSh0LGUscixjLGwsdSxhKSxhPSExKX19ZnVuY3Rpb24geXIodCxlLHIsbixpLGEsbyl7dmFyIHM9dC5jb250ZXh0LmdsLGw9YS5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KHIuaWQpO2JyKFwiZmlsbFwiLHIucGFpbnQuZ2V0KFwiZmlsbC1wYXR0ZXJuXCIpLHQsbCxyLG4saSxvKS5kcmF3KHQuY29udGV4dCxzLlRSSUFOR0xFUyxyLmlkLGEubGF5b3V0VmVydGV4QnVmZmVyLGEuaW5kZXhCdWZmZXIsYS5zZWdtZW50cyxsKX1mdW5jdGlvbiB4cih0LGUscixuLGksYSxvKXt2YXIgcz10LmNvbnRleHQuZ2wsbD1hLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQoci5pZCksYz1icihcImZpbGxPdXRsaW5lXCIsci5nZXRQYWludFByb3BlcnR5KFwiZmlsbC1vdXRsaW5lLWNvbG9yXCIpP251bGw6ci5wYWludC5nZXQoXCJmaWxsLXBhdHRlcm5cIiksdCxsLHIsbixpLG8pO3MudW5pZm9ybTJmKGMudW5pZm9ybXMudV93b3JsZCxzLmRyYXdpbmdCdWZmZXJXaWR0aCxzLmRyYXdpbmdCdWZmZXJIZWlnaHQpLGMuZHJhdyh0LmNvbnRleHQscy5MSU5FUyxyLmlkLGEubGF5b3V0VmVydGV4QnVmZmVyLGEuaW5kZXhCdWZmZXIyLGEuc2VnbWVudHMyLGwpfWZ1bmN0aW9uIGJyKHQsZSxyLG4saSxhLG8scyl7dmFyIGwsYz1yLmNvbnRleHQucHJvZ3JhbS5nZXQoKTtyZXR1cm4gZT8obD1yLnVzZVByb2dyYW0odCtcIlBhdHRlcm5cIixuKSwoc3x8bC5wcm9ncmFtIT09YykmJihuLnNldFVuaWZvcm1zKHIuY29udGV4dCxsLGkucGFpbnQse3pvb206ci50cmFuc2Zvcm0uem9vbX0pLGdyKGUscixsKSksdnIoYSxyLGwpKToobD1yLnVzZVByb2dyYW0odCxuKSwoc3x8bC5wcm9ncmFtIT09YykmJm4uc2V0VW5pZm9ybXMoci5jb250ZXh0LGwsaS5wYWludCx7em9vbTpyLnRyYW5zZm9ybS56b29tfSkpLHIuY29udGV4dC5nbC51bmlmb3JtTWF0cml4NGZ2KGwudW5pZm9ybXMudV9tYXRyaXgsITEsci50cmFuc2xhdGVQb3NNYXRyaXgoby5wb3NNYXRyaXgsYSxpLnBhaW50LmdldChcImZpbGwtdHJhbnNsYXRlXCIpLGkucGFpbnQuZ2V0KFwiZmlsbC10cmFuc2xhdGUtYW5jaG9yXCIpKSksbH12YXIgX3I9dC5kZWZhdWx0JDIwLm1hdDMsd3I9dC5kZWZhdWx0JDIwLm1hdDQsa3I9dC5kZWZhdWx0JDIwLnZlYzM7ZnVuY3Rpb24gQXIodCxlLHIsbixpLGEsbyl7dmFyIHM9dC5jb250ZXh0LGw9cy5nbCxjPXIucGFpbnQuZ2V0KFwiZmlsbC1leHRydXNpb24tcGF0dGVyblwiKSx1PXQuY29udGV4dC5wcm9ncmFtLmdldCgpLGg9YS5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KHIuaWQpLGY9dC51c2VQcm9ncmFtKGM/XCJmaWxsRXh0cnVzaW9uUGF0dGVyblwiOlwiZmlsbEV4dHJ1c2lvblwiLGgpO2lmKChvfHxmLnByb2dyYW0hPT11KSYmaC5zZXRVbmlmb3JtcyhzLGYsci5wYWludCx7em9vbTp0LnRyYW5zZm9ybS56b29tfSksYyl7aWYoZHIoYyx0KSlyZXR1cm47Z3IoYyx0LGYpLHZyKG4sdCxmKSxsLnVuaWZvcm0xZihmLnVuaWZvcm1zLnVfaGVpZ2h0X2ZhY3RvciwtTWF0aC5wb3coMixpLm92ZXJzY2FsZWRaKS9uLnRpbGVTaXplLzgpfXQuY29udGV4dC5nbC51bmlmb3JtTWF0cml4NGZ2KGYudW5pZm9ybXMudV9tYXRyaXgsITEsdC50cmFuc2xhdGVQb3NNYXRyaXgoaS5wb3NNYXRyaXgsbixyLnBhaW50LmdldChcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZVwiKSxyLnBhaW50LmdldChcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3JcIikpKSxmdW5jdGlvbih0LGUpe3ZhciByPWUuY29udGV4dC5nbCxuPWUuc3R5bGUubGlnaHQsaT1uLnByb3BlcnRpZXMuZ2V0KFwicG9zaXRpb25cIiksYT1baS54LGkueSxpLnpdLG89X3IuY3JlYXRlKCk7XCJ2aWV3cG9ydFwiPT09bi5wcm9wZXJ0aWVzLmdldChcImFuY2hvclwiKSYmX3IuZnJvbVJvdGF0aW9uKG8sLWUudHJhbnNmb3JtLmFuZ2xlKSxrci50cmFuc2Zvcm1NYXQzKGEsYSxvKTt2YXIgcz1uLnByb3BlcnRpZXMuZ2V0KFwiY29sb3JcIik7ci51bmlmb3JtM2Z2KHQudW5pZm9ybXMudV9saWdodHBvcyxhKSxyLnVuaWZvcm0xZih0LnVuaWZvcm1zLnVfbGlnaHRpbnRlbnNpdHksbi5wcm9wZXJ0aWVzLmdldChcImludGVuc2l0eVwiKSksci51bmlmb3JtM2YodC51bmlmb3Jtcy51X2xpZ2h0Y29sb3Iscy5yLHMuZyxzLmIpfShmLHQpLGYuZHJhdyhzLGwuVFJJQU5HTEVTLHIuaWQsYS5sYXlvdXRWZXJ0ZXhCdWZmZXIsYS5pbmRleEJ1ZmZlcixhLnNlZ21lbnRzLGgpfWZ1bmN0aW9uIFRyKGUscixuKXt2YXIgaT1lLmNvbnRleHQsYT1pLmdsLG89ci5mYm87aWYobyl7dmFyIHM9ZS51c2VQcm9ncmFtKFwiaGlsbHNoYWRlXCIpLGw9ZS50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KHIudGlsZUlELnRvVW53cmFwcGVkKCksITApOyFmdW5jdGlvbih0LGUscil7dmFyIG49ci5wYWludC5nZXQoXCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWRpcmVjdGlvblwiKSooTWF0aC5QSS8xODApO1widmlld3BvcnRcIj09PXIucGFpbnQuZ2V0KFwiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1hbmNob3JcIikmJihuLT1lLnRyYW5zZm9ybS5hbmdsZSksZS5jb250ZXh0LmdsLnVuaWZvcm0yZih0LnVuaWZvcm1zLnVfbGlnaHQsci5wYWludC5nZXQoXCJoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uXCIpLG4pfShzLGUsbik7dmFyIGM9ZnVuY3Rpb24oZSxyKXt2YXIgbj1yLnRvQ29vcmRpbmF0ZSgpLGk9bmV3IHQuZGVmYXVsdCQxNyhuLmNvbHVtbixuLnJvdysxLG4uem9vbSk7cmV0dXJuW2UudHJhbnNmb3JtLmNvb3JkaW5hdGVMb2NhdGlvbihuKS5sYXQsZS50cmFuc2Zvcm0uY29vcmRpbmF0ZUxvY2F0aW9uKGkpLmxhdF19KGUsci50aWxlSUQpO2kuYWN0aXZlVGV4dHVyZS5zZXQoYS5URVhUVVJFMCksYS5iaW5kVGV4dHVyZShhLlRFWFRVUkVfMkQsby5jb2xvckF0dGFjaG1lbnQuZ2V0KCkpLGEudW5pZm9ybU1hdHJpeDRmdihzLnVuaWZvcm1zLnVfbWF0cml4LCExLGwpLGEudW5pZm9ybTJmdihzLnVuaWZvcm1zLnVfbGF0cmFuZ2UsYyksYS51bmlmb3JtMWkocy51bmlmb3Jtcy51X2ltYWdlLDApO3ZhciB1PW4ucGFpbnQuZ2V0KFwiaGlsbHNoYWRlLXNoYWRvdy1jb2xvclwiKTthLnVuaWZvcm00ZihzLnVuaWZvcm1zLnVfc2hhZG93LHUucix1LmcsdS5iLHUuYSk7dmFyIGg9bi5wYWludC5nZXQoXCJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yXCIpO2EudW5pZm9ybTRmKHMudW5pZm9ybXMudV9oaWdobGlnaHQsaC5yLGguZyxoLmIsaC5hKTt2YXIgZj1uLnBhaW50LmdldChcImhpbGxzaGFkZS1hY2NlbnQtY29sb3JcIik7aWYoYS51bmlmb3JtNGYocy51bmlmb3Jtcy51X2FjY2VudCxmLnIsZi5nLGYuYixmLmEpLHIubWFza2VkQm91bmRzQnVmZmVyJiZyLm1hc2tlZEluZGV4QnVmZmVyJiZyLnNlZ21lbnRzKXMuZHJhdyhpLGEuVFJJQU5HTEVTLG4uaWQsci5tYXNrZWRCb3VuZHNCdWZmZXIsci5tYXNrZWRJbmRleEJ1ZmZlcixyLnNlZ21lbnRzKTtlbHNle3ZhciBwPWUucmFzdGVyQm91bmRzQnVmZmVyO2UucmFzdGVyQm91bmRzVkFPLmJpbmQoaSxzLHAsW10pLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFX1NUUklQLDAscC5sZW5ndGgpfX19ZnVuY3Rpb24gTXIoZSxyLG4pe3ZhciBpPWUuY29udGV4dCxhPWkuZ2w7aWYoci5kZW0mJnIuZGVtLmxldmVsKXt2YXIgbz1yLmRlbS5sZXZlbC5kaW0scz1yLmRlbS5nZXRQaXhlbHMoKTtpZihpLmFjdGl2ZVRleHR1cmUuc2V0KGEuVEVYVFVSRTEpLGkucGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGEuc2V0KCExKSxyLmRlbVRleHR1cmU9ci5kZW1UZXh0dXJlfHxlLmdldFRpbGVUZXh0dXJlKHIudGlsZVNpemUpLHIuZGVtVGV4dHVyZSl7dmFyIGw9ci5kZW1UZXh0dXJlO2wudXBkYXRlKHMse3ByZW11bHRpcGx5OiExfSksbC5iaW5kKGEuTkVBUkVTVCxhLkNMQU1QX1RPX0VER0UpfWVsc2Ugci5kZW1UZXh0dXJlPW5ldyB6KGkscyxhLlJHQkEse3ByZW11bHRpcGx5OiExfSksci5kZW1UZXh0dXJlLmJpbmQoYS5ORUFSRVNULGEuQ0xBTVBfVE9fRURHRSk7aS5hY3RpdmVUZXh0dXJlLnNldChhLlRFWFRVUkUwKTt2YXIgYz1yLmZibztpZighYyl7dmFyIHU9bmV3IHooaSx7d2lkdGg6byxoZWlnaHQ6byxkYXRhOm51bGx9LGEuUkdCQSk7dS5iaW5kKGEuTElORUFSLGEuQ0xBTVBfVE9fRURHRSksKGM9ci5mYm89aS5jcmVhdGVGcmFtZWJ1ZmZlcihvLG8pKS5jb2xvckF0dGFjaG1lbnQuc2V0KHUudGV4dHVyZSl9aS5iaW5kRnJhbWVidWZmZXIuc2V0KGMuZnJhbWVidWZmZXIpLGkudmlld3BvcnQuc2V0KFswLDAsbyxvXSk7dmFyIGg9dC5tYXQ0LmNyZWF0ZSgpO3QubWF0NC5vcnRobyhoLDAsdC5kZWZhdWx0JDgsLXQuZGVmYXVsdCQ4LDAsMCwxKSx0Lm1hdDQudHJhbnNsYXRlKGgsaCxbMCwtdC5kZWZhdWx0JDgsMF0pO3ZhciBmPWUudXNlUHJvZ3JhbShcImhpbGxzaGFkZVByZXBhcmVcIik7YS51bmlmb3JtTWF0cml4NGZ2KGYudW5pZm9ybXMudV9tYXRyaXgsITEsaCksYS51bmlmb3JtMWYoZi51bmlmb3Jtcy51X3pvb20sci50aWxlSUQub3ZlcnNjYWxlZFopLGEudW5pZm9ybTJmdihmLnVuaWZvcm1zLnVfZGltZW5zaW9uLFsyKm8sMipvXSksYS51bmlmb3JtMWkoZi51bmlmb3Jtcy51X2ltYWdlLDEpLGEudW5pZm9ybTFmKGYudW5pZm9ybXMudV9tYXh6b29tLG4pO3ZhciBwPWUucmFzdGVyQm91bmRzQnVmZmVyO2UucmFzdGVyQm91bmRzVkFPLmJpbmQoaSxmLHAsW10pLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFX1NUUklQLDAscC5sZW5ndGgpLHIubmVlZHNIaWxsc2hhZGVQcmVwYXJlPSExfX1mdW5jdGlvbiBTcihlLHIsbixpLG8pe3ZhciBzPWkucGFpbnQuZ2V0KFwicmFzdGVyLWZhZGUtZHVyYXRpb25cIik7aWYocz4wKXt2YXIgbD1hLm5vdygpLGM9KGwtZS50aW1lQWRkZWQpL3MsdT1yPyhsLXIudGltZUFkZGVkKS9zOi0xLGg9bi5nZXRTb3VyY2UoKSxmPW8uY292ZXJpbmdab29tTGV2ZWwoe3RpbGVTaXplOmgudGlsZVNpemUscm91bmRab29tOmgucm91bmRab29tfSkscD0hcnx8TWF0aC5hYnMoci50aWxlSUQub3ZlcnNjYWxlZFotZik+TWF0aC5hYnMoZS50aWxlSUQub3ZlcnNjYWxlZFotZiksZD1wJiZlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uPzE6dC5jbGFtcChwP2M6MS11LDAsMSk7cmV0dXJuIGUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb24mJmM+PTEmJihlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uPSExKSxyP3tvcGFjaXR5OjEsbWl4OjEtZH06e29wYWNpdHk6ZCxtaXg6MH19cmV0dXJue29wYWNpdHk6MSxtaXg6MH19ZnVuY3Rpb24gRXIoZSxyLG4pe3ZhciBpPWUuY29udGV4dCxvPWkuZ2w7aS5saW5lV2lkdGguc2V0KDEqYS5kZXZpY2VQaXhlbFJhdGlvKTt2YXIgcz1uLnBvc01hdHJpeCxsPWUudXNlUHJvZ3JhbShcImRlYnVnXCIpO2kuc2V0RGVwdGhNb2RlKHF0LmRpc2FibGVkKSxpLnNldFN0ZW5jaWxNb2RlKEh0LmRpc2FibGVkKSxpLnNldENvbG9yTW9kZShlLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSksby51bmlmb3JtTWF0cml4NGZ2KGwudW5pZm9ybXMudV9tYXRyaXgsITEscyksby51bmlmb3JtNGYobC51bmlmb3Jtcy51X2NvbG9yLDEsMCwwLDEpLGUuZGVidWdWQU8uYmluZChpLGwsZS5kZWJ1Z0J1ZmZlcixbXSksby5kcmF3QXJyYXlzKG8uTElORV9TVFJJUCwwLGUuZGVidWdCdWZmZXIubGVuZ3RoKTtmb3IodmFyIGM9ZnVuY3Rpb24odCxlLHIsbil7bj1ufHwxO3ZhciBpLGEsbyxzLGwsYyx1LGgsZj1bXTtmb3IoaT0wLGE9dC5sZW5ndGg7aTxhO2krKylpZihsPUNyW3RbaV1dKXtmb3IoaD1udWxsLG89MCxzPWxbMV0ubGVuZ3RoO288cztvKz0yKS0xPT09bFsxXVtvXSYmLTE9PT1sWzFdW28rMV0/aD1udWxsOihjPWUrbFsxXVtvXSpuLHU9MjAwLWxbMV1bbysxXSpuLGgmJmYucHVzaChoLngsaC55LGMsdSksaD17eDpjLHk6dX0pO2UrPWxbMF0qbn1yZXR1cm4gZn0obi50b1N0cmluZygpLDUwLDAsNSksdT1uZXcgdC5Qb3NBcnJheSxoPTA7aDxjLmxlbmd0aDtoKz0yKXUuZW1wbGFjZUJhY2soY1toXSxjW2grMV0pO3ZhciBmPWkuY3JlYXRlVmVydGV4QnVmZmVyKHUsS2UubWVtYmVycyk7KG5ldyBRKS5iaW5kKGksbCxmLFtdKSxvLnVuaWZvcm00ZihsLnVuaWZvcm1zLnVfY29sb3IsMSwxLDEsMSk7Zm9yKHZhciBwPXIuZ2V0VGlsZShuKS50aWxlU2l6ZSxkPXQuZGVmYXVsdCQ4LyhNYXRoLnBvdygyLGUudHJhbnNmb3JtLnpvb20tbi5vdmVyc2NhbGVkWikqcCksZz1bWy0xLC0xXSxbLTEsMV0sWzEsLTFdLFsxLDFdXSx2PTA7djxnLmxlbmd0aDt2Kyspe3ZhciBtPWdbdl07by51bmlmb3JtTWF0cml4NGZ2KGwudW5pZm9ybXMudV9tYXRyaXgsITEsdC5tYXQ0LnRyYW5zbGF0ZShbXSxzLFtkKm1bMF0sZCptWzFdLDBdKSksby5kcmF3QXJyYXlzKG8uTElORVMsMCxmLmxlbmd0aCl9by51bmlmb3JtNGYobC51bmlmb3Jtcy51X2NvbG9yLDAsMCwwLDEpLG8udW5pZm9ybU1hdHJpeDRmdihsLnVuaWZvcm1zLnVfbWF0cml4LCExLHMpLG8uZHJhd0FycmF5cyhvLkxJTkVTLDAsZi5sZW5ndGgpfXZhciBDcj17XCIgXCI6WzE2LFtdXSxcIiFcIjpbMTAsWzUsMjEsNSw3LC0xLC0xLDUsMiw0LDEsNSwwLDYsMSw1LDJdXSwnXCInOlsxNixbNCwyMSw0LDE0LC0xLC0xLDEyLDIxLDEyLDE0XV0sXCIjXCI6WzIxLFsxMSwyNSw0LC03LC0xLC0xLDE3LDI1LDEwLC03LC0xLC0xLDQsMTIsMTgsMTIsLTEsLTEsMyw2LDE3LDZdXSwkOlsyMCxbOCwyNSw4LC00LC0xLC0xLDEyLDI1LDEyLC00LC0xLC0xLDE3LDE4LDE1LDIwLDEyLDIxLDgsMjEsNSwyMCwzLDE4LDMsMTYsNCwxNCw1LDEzLDcsMTIsMTMsMTAsMTUsOSwxNiw4LDE3LDYsMTcsMywxNSwxLDEyLDAsOCwwLDUsMSwzLDNdXSxcIiVcIjpbMjQsWzIxLDIxLDMsMCwtMSwtMSw4LDIxLDEwLDE5LDEwLDE3LDksMTUsNywxNCw1LDE0LDMsMTYsMywxOCw0LDIwLDYsMjEsOCwyMSwxMCwyMCwxMywxOSwxNiwxOSwxOSwyMCwyMSwyMSwtMSwtMSwxNyw3LDE1LDYsMTQsNCwxNCwyLDE2LDAsMTgsMCwyMCwxLDIxLDMsMjEsNSwxOSw3LDE3LDddXSxcIiZcIjpbMjYsWzIzLDEyLDIzLDEzLDIyLDE0LDIxLDE0LDIwLDEzLDE5LDExLDE3LDYsMTUsMywxMywxLDExLDAsNywwLDUsMSw0LDIsMyw0LDMsNiw0LDgsNSw5LDEyLDEzLDEzLDE0LDE0LDE2LDE0LDE4LDEzLDIwLDExLDIxLDksMjAsOCwxOCw4LDE2LDksMTMsMTEsMTAsMTYsMywxOCwxLDIwLDAsMjIsMCwyMywxLDIzLDJdXSxcIidcIjpbMTAsWzUsMTksNCwyMCw1LDIxLDYsMjAsNiwxOCw1LDE2LDQsMTVdXSxcIihcIjpbMTQsWzExLDI1LDksMjMsNywyMCw1LDE2LDQsMTEsNCw3LDUsMiw3LC0yLDksLTUsMTEsLTddXSxcIilcIjpbMTQsWzMsMjUsNSwyMyw3LDIwLDksMTYsMTAsMTEsMTAsNyw5LDIsNywtMiw1LC01LDMsLTddXSxcIipcIjpbMTYsWzgsMjEsOCw5LC0xLC0xLDMsMTgsMTMsMTIsLTEsLTEsMTMsMTgsMywxMl1dLFwiK1wiOlsyNixbMTMsMTgsMTMsMCwtMSwtMSw0LDksMjIsOV1dLFwiLFwiOlsxMCxbNiwxLDUsMCw0LDEsNSwyLDYsMSw2LC0xLDUsLTMsNCwtNF1dLFwiLVwiOlsyNixbNCw5LDIyLDldXSxcIi5cIjpbMTAsWzUsMiw0LDEsNSwwLDYsMSw1LDJdXSxcIi9cIjpbMjIsWzIwLDI1LDIsLTddXSwwOlsyMCxbOSwyMSw2LDIwLDQsMTcsMywxMiwzLDksNCw0LDYsMSw5LDAsMTEsMCwxNCwxLDE2LDQsMTcsOSwxNywxMiwxNiwxNywxNCwyMCwxMSwyMSw5LDIxXV0sMTpbMjAsWzYsMTcsOCwxOCwxMSwyMSwxMSwwXV0sMjpbMjAsWzQsMTYsNCwxNyw1LDE5LDYsMjAsOCwyMSwxMiwyMSwxNCwyMCwxNSwxOSwxNiwxNywxNiwxNSwxNSwxMywxMywxMCwzLDAsMTcsMF1dLDM6WzIwLFs1LDIxLDE2LDIxLDEwLDEzLDEzLDEzLDE1LDEyLDE2LDExLDE3LDgsMTcsNiwxNiwzLDE0LDEsMTEsMCw4LDAsNSwxLDQsMiwzLDRdXSw0OlsyMCxbMTMsMjEsMyw3LDE4LDcsLTEsLTEsMTMsMjEsMTMsMF1dLDU6WzIwLFsxNSwyMSw1LDIxLDQsMTIsNSwxMyw4LDE0LDExLDE0LDE0LDEzLDE2LDExLDE3LDgsMTcsNiwxNiwzLDE0LDEsMTEsMCw4LDAsNSwxLDQsMiwzLDRdXSw2OlsyMCxbMTYsMTgsMTUsMjAsMTIsMjEsMTAsMjEsNywyMCw1LDE3LDQsMTIsNCw3LDUsMyw3LDEsMTAsMCwxMSwwLDE0LDEsMTYsMywxNyw2LDE3LDcsMTYsMTAsMTQsMTIsMTEsMTMsMTAsMTMsNywxMiw1LDEwLDQsN11dLDc6WzIwLFsxNywyMSw3LDAsLTEsLTEsMywyMSwxNywyMV1dLDg6WzIwLFs4LDIxLDUsMjAsNCwxOCw0LDE2LDUsMTQsNywxMywxMSwxMiwxNCwxMSwxNiw5LDE3LDcsMTcsNCwxNiwyLDE1LDEsMTIsMCw4LDAsNSwxLDQsMiwzLDQsMyw3LDQsOSw2LDExLDksMTIsMTMsMTMsMTUsMTQsMTYsMTYsMTYsMTgsMTUsMjAsMTIsMjEsOCwyMV1dLDk6WzIwLFsxNiwxNCwxNSwxMSwxMyw5LDEwLDgsOSw4LDYsOSw0LDExLDMsMTQsMywxNSw0LDE4LDYsMjAsOSwyMSwxMCwyMSwxMywyMCwxNSwxOCwxNiwxNCwxNiw5LDE1LDQsMTMsMSwxMCwwLDgsMCw1LDEsNCwzXV0sXCI6XCI6WzEwLFs1LDE0LDQsMTMsNSwxMiw2LDEzLDUsMTQsLTEsLTEsNSwyLDQsMSw1LDAsNiwxLDUsMl1dLFwiO1wiOlsxMCxbNSwxNCw0LDEzLDUsMTIsNiwxMyw1LDE0LC0xLC0xLDYsMSw1LDAsNCwxLDUsMiw2LDEsNiwtMSw1LC0zLDQsLTRdXSxcIjxcIjpbMjQsWzIwLDE4LDQsOSwyMCwwXV0sXCI9XCI6WzI2LFs0LDEyLDIyLDEyLC0xLC0xLDQsNiwyMiw2XV0sXCI+XCI6WzI0LFs0LDE4LDIwLDksNCwwXV0sXCI/XCI6WzE4LFszLDE2LDMsMTcsNCwxOSw1LDIwLDcsMjEsMTEsMjEsMTMsMjAsMTQsMTksMTUsMTcsMTUsMTUsMTQsMTMsMTMsMTIsOSwxMCw5LDcsLTEsLTEsOSwyLDgsMSw5LDAsMTAsMSw5LDJdXSxcIkBcIjpbMjcsWzE4LDEzLDE3LDE1LDE1LDE2LDEyLDE2LDEwLDE1LDksMTQsOCwxMSw4LDgsOSw2LDExLDUsMTQsNSwxNiw2LDE3LDgsLTEsLTEsMTIsMTYsMTAsMTQsOSwxMSw5LDgsMTAsNiwxMSw1LC0xLC0xLDE4LDE2LDE3LDgsMTcsNiwxOSw1LDIxLDUsMjMsNywyNCwxMCwyNCwxMiwyMywxNSwyMiwxNywyMCwxOSwxOCwyMCwxNSwyMSwxMiwyMSw5LDIwLDcsMTksNSwxNyw0LDE1LDMsMTIsMyw5LDQsNiw1LDQsNywyLDksMSwxMiwwLDE1LDAsMTgsMSwyMCwyLDIxLDMsLTEsLTEsMTksMTYsMTgsOCwxOCw2LDE5LDVdXSxBOlsxOCxbOSwyMSwxLDAsLTEsLTEsOSwyMSwxNywwLC0xLC0xLDQsNywxNCw3XV0sQjpbMjEsWzQsMjEsNCwwLC0xLC0xLDQsMjEsMTMsMjEsMTYsMjAsMTcsMTksMTgsMTcsMTgsMTUsMTcsMTMsMTYsMTIsMTMsMTEsLTEsLTEsNCwxMSwxMywxMSwxNiwxMCwxNyw5LDE4LDcsMTgsNCwxNywyLDE2LDEsMTMsMCw0LDBdXSxDOlsyMSxbMTgsMTYsMTcsMTgsMTUsMjAsMTMsMjEsOSwyMSw3LDIwLDUsMTgsNCwxNiwzLDEzLDMsOCw0LDUsNSwzLDcsMSw5LDAsMTMsMCwxNSwxLDE3LDMsMTgsNV1dLEQ6WzIxLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDExLDIxLDE0LDIwLDE2LDE4LDE3LDE2LDE4LDEzLDE4LDgsMTcsNSwxNiwzLDE0LDEsMTEsMCw0LDBdXSxFOlsxOSxbNCwyMSw0LDAsLTEsLTEsNCwyMSwxNywyMSwtMSwtMSw0LDExLDEyLDExLC0xLC0xLDQsMCwxNywwXV0sRjpbMTgsWzQsMjEsNCwwLC0xLC0xLDQsMjEsMTcsMjEsLTEsLTEsNCwxMSwxMiwxMV1dLEc6WzIxLFsxOCwxNiwxNywxOCwxNSwyMCwxMywyMSw5LDIxLDcsMjAsNSwxOCw0LDE2LDMsMTMsMyw4LDQsNSw1LDMsNywxLDksMCwxMywwLDE1LDEsMTcsMywxOCw1LDE4LDgsLTEsLTEsMTMsOCwxOCw4XV0sSDpbMjIsWzQsMjEsNCwwLC0xLC0xLDE4LDIxLDE4LDAsLTEsLTEsNCwxMSwxOCwxMV1dLEk6WzgsWzQsMjEsNCwwXV0sSjpbMTYsWzEyLDIxLDEyLDUsMTEsMiwxMCwxLDgsMCw2LDAsNCwxLDMsMiwyLDUsMiw3XV0sSzpbMjEsWzQsMjEsNCwwLC0xLC0xLDE4LDIxLDQsNywtMSwtMSw5LDEyLDE4LDBdXSxMOlsxNyxbNCwyMSw0LDAsLTEsLTEsNCwwLDE2LDBdXSxNOlsyNCxbNCwyMSw0LDAsLTEsLTEsNCwyMSwxMiwwLC0xLC0xLDIwLDIxLDEyLDAsLTEsLTEsMjAsMjEsMjAsMF1dLE46WzIyLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDE4LDAsLTEsLTEsMTgsMjEsMTgsMF1dLE86WzIyLFs5LDIxLDcsMjAsNSwxOCw0LDE2LDMsMTMsMyw4LDQsNSw1LDMsNywxLDksMCwxMywwLDE1LDEsMTcsMywxOCw1LDE5LDgsMTksMTMsMTgsMTYsMTcsMTgsMTUsMjAsMTMsMjEsOSwyMV1dLFA6WzIxLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDEzLDIxLDE2LDIwLDE3LDE5LDE4LDE3LDE4LDE0LDE3LDEyLDE2LDExLDEzLDEwLDQsMTBdXSxROlsyMixbOSwyMSw3LDIwLDUsMTgsNCwxNiwzLDEzLDMsOCw0LDUsNSwzLDcsMSw5LDAsMTMsMCwxNSwxLDE3LDMsMTgsNSwxOSw4LDE5LDEzLDE4LDE2LDE3LDE4LDE1LDIwLDEzLDIxLDksMjEsLTEsLTEsMTIsNCwxOCwtMl1dLFI6WzIxLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDEzLDIxLDE2LDIwLDE3LDE5LDE4LDE3LDE4LDE1LDE3LDEzLDE2LDEyLDEzLDExLDQsMTEsLTEsLTEsMTEsMTEsMTgsMF1dLFM6WzIwLFsxNywxOCwxNSwyMCwxMiwyMSw4LDIxLDUsMjAsMywxOCwzLDE2LDQsMTQsNSwxMyw3LDEyLDEzLDEwLDE1LDksMTYsOCwxNyw2LDE3LDMsMTUsMSwxMiwwLDgsMCw1LDEsMywzXV0sVDpbMTYsWzgsMjEsOCwwLC0xLC0xLDEsMjEsMTUsMjFdXSxVOlsyMixbNCwyMSw0LDYsNSwzLDcsMSwxMCwwLDEyLDAsMTUsMSwxNywzLDE4LDYsMTgsMjFdXSxWOlsxOCxbMSwyMSw5LDAsLTEsLTEsMTcsMjEsOSwwXV0sVzpbMjQsWzIsMjEsNywwLC0xLC0xLDEyLDIxLDcsMCwtMSwtMSwxMiwyMSwxNywwLC0xLC0xLDIyLDIxLDE3LDBdXSxYOlsyMCxbMywyMSwxNywwLC0xLC0xLDE3LDIxLDMsMF1dLFk6WzE4LFsxLDIxLDksMTEsOSwwLC0xLC0xLDE3LDIxLDksMTFdXSxaOlsyMCxbMTcsMjEsMywwLC0xLC0xLDMsMjEsMTcsMjEsLTEsLTEsMywwLDE3LDBdXSxcIltcIjpbMTQsWzQsMjUsNCwtNywtMSwtMSw1LDI1LDUsLTcsLTEsLTEsNCwyNSwxMSwyNSwtMSwtMSw0LC03LDExLC03XV0sXCJcXFxcXCI6WzE0LFswLDIxLDE0LC0zXV0sXCJdXCI6WzE0LFs5LDI1LDksLTcsLTEsLTEsMTAsMjUsMTAsLTcsLTEsLTEsMywyNSwxMCwyNSwtMSwtMSwzLC03LDEwLC03XV0sXCJeXCI6WzE2LFs2LDE1LDgsMTgsMTAsMTUsLTEsLTEsMywxMiw4LDE3LDEzLDEyLC0xLC0xLDgsMTcsOCwwXV0sXzpbMTYsWzAsLTIsMTYsLTJdXSxcImBcIjpbMTAsWzYsMjEsNSwyMCw0LDE4LDQsMTYsNSwxNSw2LDE2LDUsMTddXSxhOlsxOSxbMTUsMTQsMTUsMCwtMSwtMSwxNSwxMSwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0sYjpbMTksWzQsMjEsNCwwLC0xLC0xLDQsMTEsNiwxMyw4LDE0LDExLDE0LDEzLDEzLDE1LDExLDE2LDgsMTYsNiwxNSwzLDEzLDEsMTEsMCw4LDAsNiwxLDQsM11dLGM6WzE4LFsxNSwxMSwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0sZDpbMTksWzE1LDIxLDE1LDAsLTEsLTEsMTUsMTEsMTMsMTMsMTEsMTQsOCwxNCw2LDEzLDQsMTEsMyw4LDMsNiw0LDMsNiwxLDgsMCwxMSwwLDEzLDEsMTUsM11dLGU6WzE4LFszLDgsMTUsOCwxNSwxMCwxNCwxMiwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0sZjpbMTIsWzEwLDIxLDgsMjEsNiwyMCw1LDE3LDUsMCwtMSwtMSwyLDE0LDksMTRdXSxnOlsxOSxbMTUsMTQsMTUsLTIsMTQsLTUsMTMsLTYsMTEsLTcsOCwtNyw2LC02LC0xLC0xLDE1LDExLDEzLDEzLDExLDE0LDgsMTQsNiwxMyw0LDExLDMsOCwzLDYsNCwzLDYsMSw4LDAsMTEsMCwxMywxLDE1LDNdXSxoOlsxOSxbNCwyMSw0LDAsLTEsLTEsNCwxMCw3LDEzLDksMTQsMTIsMTQsMTQsMTMsMTUsMTAsMTUsMF1dLGk6WzgsWzMsMjEsNCwyMCw1LDIxLDQsMjIsMywyMSwtMSwtMSw0LDE0LDQsMF1dLGo6WzEwLFs1LDIxLDYsMjAsNywyMSw2LDIyLDUsMjEsLTEsLTEsNiwxNCw2LC0zLDUsLTYsMywtNywxLC03XV0sazpbMTcsWzQsMjEsNCwwLC0xLC0xLDE0LDE0LDQsNCwtMSwtMSw4LDgsMTUsMF1dLGw6WzgsWzQsMjEsNCwwXV0sbTpbMzAsWzQsMTQsNCwwLC0xLC0xLDQsMTAsNywxMyw5LDE0LDEyLDE0LDE0LDEzLDE1LDEwLDE1LDAsLTEsLTEsMTUsMTAsMTgsMTMsMjAsMTQsMjMsMTQsMjUsMTMsMjYsMTAsMjYsMF1dLG46WzE5LFs0LDE0LDQsMCwtMSwtMSw0LDEwLDcsMTMsOSwxNCwxMiwxNCwxNCwxMywxNSwxMCwxNSwwXV0sbzpbMTksWzgsMTQsNiwxMyw0LDExLDMsOCwzLDYsNCwzLDYsMSw4LDAsMTEsMCwxMywxLDE1LDMsMTYsNiwxNiw4LDE1LDExLDEzLDEzLDExLDE0LDgsMTRdXSxwOlsxOSxbNCwxNCw0LC03LC0xLC0xLDQsMTEsNiwxMyw4LDE0LDExLDE0LDEzLDEzLDE1LDExLDE2LDgsMTYsNiwxNSwzLDEzLDEsMTEsMCw4LDAsNiwxLDQsM11dLHE6WzE5LFsxNSwxNCwxNSwtNywtMSwtMSwxNSwxMSwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0scjpbMTMsWzQsMTQsNCwwLC0xLC0xLDQsOCw1LDExLDcsMTMsOSwxNCwxMiwxNF1dLHM6WzE3LFsxNCwxMSwxMywxMywxMCwxNCw3LDE0LDQsMTMsMywxMSw0LDksNiw4LDExLDcsMTMsNiwxNCw0LDE0LDMsMTMsMSwxMCwwLDcsMCw0LDEsMywzXV0sdDpbMTIsWzUsMjEsNSw0LDYsMSw4LDAsMTAsMCwtMSwtMSwyLDE0LDksMTRdXSx1OlsxOSxbNCwxNCw0LDQsNSwxLDcsMCwxMCwwLDEyLDEsMTUsNCwtMSwtMSwxNSwxNCwxNSwwXV0sdjpbMTYsWzIsMTQsOCwwLC0xLC0xLDE0LDE0LDgsMF1dLHc6WzIyLFszLDE0LDcsMCwtMSwtMSwxMSwxNCw3LDAsLTEsLTEsMTEsMTQsMTUsMCwtMSwtMSwxOSwxNCwxNSwwXV0seDpbMTcsWzMsMTQsMTQsMCwtMSwtMSwxNCwxNCwzLDBdXSx5OlsxNixbMiwxNCw4LDAsLTEsLTEsMTQsMTQsOCwwLDYsLTQsNCwtNiwyLC03LDEsLTddXSx6OlsxNyxbMTQsMTQsMywwLC0xLC0xLDMsMTQsMTQsMTQsLTEsLTEsMywwLDE0LDBdXSxcIntcIjpbMTQsWzksMjUsNywyNCw2LDIzLDUsMjEsNSwxOSw2LDE3LDcsMTYsOCwxNCw4LDEyLDYsMTAsLTEsLTEsNywyNCw2LDIyLDYsMjAsNywxOCw4LDE3LDksMTUsOSwxMyw4LDExLDQsOSw4LDcsOSw1LDksMyw4LDEsNywwLDYsLTIsNiwtNCw3LC02LC0xLC0xLDYsOCw4LDYsOCw0LDcsMiw2LDEsNSwtMSw1LC0zLDYsLTUsNywtNiw5LC03XV0sXCJ8XCI6WzgsWzQsMjUsNCwtN11dLFwifVwiOlsxNCxbNSwyNSw3LDI0LDgsMjMsOSwyMSw5LDE5LDgsMTcsNywxNiw2LDE0LDYsMTIsOCwxMCwtMSwtMSw3LDI0LDgsMjIsOCwyMCw3LDE4LDYsMTcsNSwxNSw1LDEzLDYsMTEsMTAsOSw2LDcsNSw1LDUsMyw2LDEsNywwLDgsLTIsOCwtNCw3LC02LC0xLC0xLDgsOCw2LDYsNiw0LDcsMiw4LDEsOSwtMSw5LC0zLDgsLTUsNywtNiw1LC03XV0sXCJ+XCI6WzI0LFszLDYsMyw4LDQsMTEsNiwxMiw4LDEyLDEwLDExLDE0LDgsMTYsNywxOCw3LDIwLDgsMjEsMTAsLTEsLTEsMyw4LDQsMTAsNiwxMSw4LDExLDEwLDEwLDE0LDcsMTYsNiwxOCw2LDIwLDcsMjEsMTAsMjEsMTJdXX0sTHI9e3N5bWJvbDpmdW5jdGlvbih0LGUscixuKXtpZihcInRyYW5zbHVjZW50XCI9PT10LnJlbmRlclBhc3Mpe3ZhciBpPXQuY29udGV4dDtpLnNldFN0ZW5jaWxNb2RlKEh0LmRpc2FibGVkKSxpLnNldENvbG9yTW9kZSh0LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSksMCE9PXIucGFpbnQuZ2V0KFwiaWNvbi1vcGFjaXR5XCIpLmNvbnN0YW50T3IoMSkmJmNyKHQsZSxyLG4sITEsci5wYWludC5nZXQoXCJpY29uLXRyYW5zbGF0ZVwiKSxyLnBhaW50LmdldChcImljb24tdHJhbnNsYXRlLWFuY2hvclwiKSxyLmxheW91dC5nZXQoXCJpY29uLXJvdGF0aW9uLWFsaWdubWVudFwiKSxyLmxheW91dC5nZXQoXCJpY29uLXBpdGNoLWFsaWdubWVudFwiKSxyLmxheW91dC5nZXQoXCJpY29uLWtlZXAtdXByaWdodFwiKSksMCE9PXIucGFpbnQuZ2V0KFwidGV4dC1vcGFjaXR5XCIpLmNvbnN0YW50T3IoMSkmJmNyKHQsZSxyLG4sITAsci5wYWludC5nZXQoXCJ0ZXh0LXRyYW5zbGF0ZVwiKSxyLnBhaW50LmdldChcInRleHQtdHJhbnNsYXRlLWFuY2hvclwiKSxyLmxheW91dC5nZXQoXCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudFwiKSxyLmxheW91dC5nZXQoXCJ0ZXh0LXBpdGNoLWFsaWdubWVudFwiKSxyLmxheW91dC5nZXQoXCJ0ZXh0LWtlZXAtdXByaWdodFwiKSksZS5tYXAuc2hvd0NvbGxpc2lvbkJveGVzJiZmdW5jdGlvbih0LGUscixuKXtvcih0LGUscixuLCExKSxvcih0LGUscixuLCEwKX0odCxlLHIsbil9fSxjaXJjbGU6ZnVuY3Rpb24odCxlLHIsbil7aWYoXCJ0cmFuc2x1Y2VudFwiPT09dC5yZW5kZXJQYXNzKXt2YXIgaT1yLnBhaW50LmdldChcImNpcmNsZS1vcGFjaXR5XCIpLGE9ci5wYWludC5nZXQoXCJjaXJjbGUtc3Ryb2tlLXdpZHRoXCIpLG89ci5wYWludC5nZXQoXCJjaXJjbGUtc3Ryb2tlLW9wYWNpdHlcIik7aWYoMCE9PWkuY29uc3RhbnRPcigxKXx8MCE9PWEuY29uc3RhbnRPcigxKSYmMCE9PW8uY29uc3RhbnRPcigxKSl7dmFyIHM9dC5jb250ZXh0LGw9cy5nbDtzLnNldERlcHRoTW9kZSh0LmRlcHRoTW9kZUZvclN1YmxheWVyKDAscXQuUmVhZE9ubHkpKSxzLnNldFN0ZW5jaWxNb2RlKEh0LmRpc2FibGVkKSxzLnNldENvbG9yTW9kZSh0LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSk7Zm9yKHZhciBjPSEwLHU9MDt1PG4ubGVuZ3RoO3UrKyl7dmFyIGg9blt1XSxmPWUuZ2V0VGlsZShoKSxwPWYuZ2V0QnVja2V0KHIpO2lmKHApe3ZhciBkPXQuY29udGV4dC5wcm9ncmFtLmdldCgpLGc9cC5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KHIuaWQpLHY9dC51c2VQcm9ncmFtKFwiY2lyY2xlXCIsZyk7aWYoKGN8fHYucHJvZ3JhbSE9PWQpJiYoZy5zZXRVbmlmb3JtcyhzLHYsci5wYWludCx7em9vbTp0LnRyYW5zZm9ybS56b29tfSksYz0hMSksbC51bmlmb3JtMWYodi51bmlmb3Jtcy51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UsdC50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSksbC51bmlmb3JtMWkodi51bmlmb3Jtcy51X3NjYWxlX3dpdGhfbWFwLFwibWFwXCI9PT1yLnBhaW50LmdldChcImNpcmNsZS1waXRjaC1zY2FsZVwiKT8xOjApLFwibWFwXCI9PT1yLnBhaW50LmdldChcImNpcmNsZS1waXRjaC1hbGlnbm1lbnRcIikpe2wudW5pZm9ybTFpKHYudW5pZm9ybXMudV9waXRjaF93aXRoX21hcCwxKTt2YXIgbT1NZShmLDEsdC50cmFuc2Zvcm0uem9vbSk7bC51bmlmb3JtMmYodi51bmlmb3Jtcy51X2V4dHJ1ZGVfc2NhbGUsbSxtKX1lbHNlIGwudW5pZm9ybTFpKHYudW5pZm9ybXMudV9waXRjaF93aXRoX21hcCwwKSxsLnVuaWZvcm0yZnYodi51bmlmb3Jtcy51X2V4dHJ1ZGVfc2NhbGUsdC50cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzKTtsLnVuaWZvcm1NYXRyaXg0ZnYodi51bmlmb3Jtcy51X21hdHJpeCwhMSx0LnRyYW5zbGF0ZVBvc01hdHJpeChoLnBvc01hdHJpeCxmLHIucGFpbnQuZ2V0KFwiY2lyY2xlLXRyYW5zbGF0ZVwiKSxyLnBhaW50LmdldChcImNpcmNsZS10cmFuc2xhdGUtYW5jaG9yXCIpKSksdi5kcmF3KHMsbC5UUklBTkdMRVMsci5pZCxwLmxheW91dFZlcnRleEJ1ZmZlcixwLmluZGV4QnVmZmVyLHAuc2VnbWVudHMsZyl9fX19fSxoZWF0bWFwOmZ1bmN0aW9uKGUscixuLGkpe2lmKDAhPT1uLnBhaW50LmdldChcImhlYXRtYXAtb3BhY2l0eVwiKSlpZihcIm9mZnNjcmVlblwiPT09ZS5yZW5kZXJQYXNzKXt2YXIgYT1lLmNvbnRleHQsbz1hLmdsO2Euc2V0RGVwdGhNb2RlKGUuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCxxdC5SZWFkT25seSkpLGEuc2V0U3RlbmNpbE1vZGUoSHQuZGlzYWJsZWQpLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmdsO3QuYWN0aXZlVGV4dHVyZS5zZXQobi5URVhUVVJFMSksdC52aWV3cG9ydC5zZXQoWzAsMCxlLndpZHRoLzQsZS5oZWlnaHQvNF0pO3ZhciBpPXIuaGVhdG1hcEZibztpZihpKW4uYmluZFRleHR1cmUobi5URVhUVVJFXzJELGkuY29sb3JBdHRhY2htZW50LmdldCgpKSx0LmJpbmRGcmFtZWJ1ZmZlci5zZXQoaS5mcmFtZWJ1ZmZlcik7ZWxzZXt2YXIgYT1uLmNyZWF0ZVRleHR1cmUoKTtuLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCxhKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1Msbi5DTEFNUF9UT19FREdFKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1Qsbi5DTEFNUF9UT19FREdFKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NSU5fRklMVEVSLG4uTElORUFSKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NQUdfRklMVEVSLG4uTElORUFSKSxpPXIuaGVhdG1hcEZibz10LmNyZWF0ZUZyYW1lYnVmZmVyKGUud2lkdGgvNCxlLmhlaWdodC80KSxmdW5jdGlvbiB0KGUscixuLGkpe3ZhciBhPWUuZ2w7YS50ZXhJbWFnZTJEKGEuVEVYVFVSRV8yRCwwLGEuUkdCQSxyLndpZHRoLzQsci5oZWlnaHQvNCwwLGEuUkdCQSxlLmV4dFRleHR1cmVIYWxmRmxvYXQ/ZS5leHRUZXh0dXJlSGFsZkZsb2F0LkhBTEZfRkxPQVRfT0VTOmEuVU5TSUdORURfQllURSxudWxsKSxpLmNvbG9yQXR0YWNobWVudC5zZXQobiksZS5leHRUZXh0dXJlSGFsZkZsb2F0JiZhLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoYS5GUkFNRUJVRkZFUikhPT1hLkZSQU1FQlVGRkVSX0NPTVBMRVRFJiYoZS5leHRUZXh0dXJlSGFsZkZsb2F0PW51bGwsaS5jb2xvckF0dGFjaG1lbnQuc2V0RGlydHkoKSx0KGUscixuLGkpKX0odCxlLGEsaSl9fShhLGUsbiksYS5jbGVhcih7Y29sb3I6dC5kZWZhdWx0JDYudHJhbnNwYXJlbnR9KSxhLnNldENvbG9yTW9kZShuZXcgR3QoW28uT05FLG8uT05FXSx0LmRlZmF1bHQkNi50cmFuc3BhcmVudCxbITAsITAsITAsITBdKSk7Zm9yKHZhciBzPSEwLGw9MDtsPGkubGVuZ3RoO2wrKyl7dmFyIGM9aVtsXTtpZighci5oYXNSZW5kZXJhYmxlUGFyZW50KGMpKXt2YXIgdT1yLmdldFRpbGUoYyksaD11LmdldEJ1Y2tldChuKTtpZihoKXt2YXIgZj1lLmNvbnRleHQucHJvZ3JhbS5nZXQoKSxwPWgucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChuLmlkKSxkPWUudXNlUHJvZ3JhbShcImhlYXRtYXBcIixwKSxnPWUudHJhbnNmb3JtLnpvb207KHN8fGQucHJvZ3JhbSE9PWYpJiYocC5zZXRVbmlmb3JtcyhlLmNvbnRleHQsZCxuLnBhaW50LHt6b29tOmd9KSxzPSExKSxvLnVuaWZvcm0xZihkLnVuaWZvcm1zLnVfZXh0cnVkZV9zY2FsZSxNZSh1LDEsZykpLG8udW5pZm9ybTFmKGQudW5pZm9ybXMudV9pbnRlbnNpdHksbi5wYWludC5nZXQoXCJoZWF0bWFwLWludGVuc2l0eVwiKSksby51bmlmb3JtTWF0cml4NGZ2KGQudW5pZm9ybXMudV9tYXRyaXgsITEsYy5wb3NNYXRyaXgpLGQuZHJhdyhhLG8uVFJJQU5HTEVTLG4uaWQsaC5sYXlvdXRWZXJ0ZXhCdWZmZXIsaC5pbmRleEJ1ZmZlcixoLnNlZ21lbnRzLHApfX19YS52aWV3cG9ydC5zZXQoWzAsMCxlLndpZHRoLGUuaGVpZ2h0XSl9ZWxzZVwidHJhbnNsdWNlbnRcIj09PWUucmVuZGVyUGFzcyYmKGUuY29udGV4dC5zZXRDb2xvck1vZGUoZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpLGZ1bmN0aW9uKGUscil7dmFyIG49ZS5jb250ZXh0LGk9bi5nbCxhPXIuaGVhdG1hcEZibztpZihhKXtuLmFjdGl2ZVRleHR1cmUuc2V0KGkuVEVYVFVSRTApLGkuYmluZFRleHR1cmUoaS5URVhUVVJFXzJELGEuY29sb3JBdHRhY2htZW50LmdldCgpKSxuLmFjdGl2ZVRleHR1cmUuc2V0KGkuVEVYVFVSRTEpO3ZhciBvPXIuY29sb3JSYW1wVGV4dHVyZTtvfHwobz1yLmNvbG9yUmFtcFRleHR1cmU9bmV3IHoobixyLmNvbG9yUmFtcCxpLlJHQkEpKSxvLmJpbmQoaS5MSU5FQVIsaS5DTEFNUF9UT19FREdFKSxuLnNldERlcHRoTW9kZShxdC5kaXNhYmxlZCk7dmFyIHM9ZS51c2VQcm9ncmFtKFwiaGVhdG1hcFRleHR1cmVcIiksbD1yLnBhaW50LmdldChcImhlYXRtYXAtb3BhY2l0eVwiKTtpLnVuaWZvcm0xZihzLnVuaWZvcm1zLnVfb3BhY2l0eSxsKSxpLnVuaWZvcm0xaShzLnVuaWZvcm1zLnVfaW1hZ2UsMCksaS51bmlmb3JtMWkocy51bmlmb3Jtcy51X2NvbG9yX3JhbXAsMSk7dmFyIGM9dC5tYXQ0LmNyZWF0ZSgpO3QubWF0NC5vcnRobyhjLDAsZS53aWR0aCxlLmhlaWdodCwwLDAsMSksaS51bmlmb3JtTWF0cml4NGZ2KHMudW5pZm9ybXMudV9tYXRyaXgsITEsYyksaS51bmlmb3JtMmYocy51bmlmb3Jtcy51X3dvcmxkLGkuZHJhd2luZ0J1ZmZlcldpZHRoLGkuZHJhd2luZ0J1ZmZlckhlaWdodCksZS52aWV3cG9ydFZBTy5iaW5kKGUuY29udGV4dCxzLGUudmlld3BvcnRCdWZmZXIsW10pLGkuZHJhd0FycmF5cyhpLlRSSUFOR0xFX1NUUklQLDAsNCl9fShlLG4pKX0sbGluZTpmdW5jdGlvbih0LGUscixuKXtpZihcInRyYW5zbHVjZW50XCI9PT10LnJlbmRlclBhc3MmJjAhPT1yLnBhaW50LmdldChcImxpbmUtb3BhY2l0eVwiKS5jb25zdGFudE9yKDEpKXt2YXIgaT10LmNvbnRleHQ7aS5zZXREZXB0aE1vZGUodC5kZXB0aE1vZGVGb3JTdWJsYXllcigwLHF0LlJlYWRPbmx5KSksaS5zZXRDb2xvck1vZGUodC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpO2Zvcih2YXIgYSxvPXIucGFpbnQuZ2V0KFwibGluZS1kYXNoYXJyYXlcIik/XCJsaW5lU0RGXCI6ci5wYWludC5nZXQoXCJsaW5lLXBhdHRlcm5cIik/XCJsaW5lUGF0dGVyblwiOnIucGFpbnQuZ2V0KFwibGluZS1ncmFkaWVudFwiKT9cImxpbmVHcmFkaWVudFwiOlwibGluZVwiLHM9ITAsbD0wLGM9bjtsPGMubGVuZ3RoO2wrPTEpe3ZhciB1PWNbbF0saD1lLmdldFRpbGUodSksZj1oLmdldEJ1Y2tldChyKTtpZihmKXt2YXIgcD1mLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQoci5pZCksZD10LmNvbnRleHQucHJvZ3JhbS5nZXQoKSxnPXQudXNlUHJvZ3JhbShvLHApLHY9c3x8Zy5wcm9ncmFtIT09ZCxtPWEhPT1oLnRpbGVJRC5vdmVyc2NhbGVkWjt2JiZwLnNldFVuaWZvcm1zKHQuY29udGV4dCxnLHIucGFpbnQse3pvb206dC50cmFuc2Zvcm0uem9vbX0pLHByKGcsdCxoLGYscix1LHAsdixtKSxhPWgudGlsZUlELm92ZXJzY2FsZWRaLHM9ITF9fX19LGZpbGw6ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9bi5wYWludC5nZXQoXCJmaWxsLWNvbG9yXCIpLG89bi5wYWludC5nZXQoXCJmaWxsLW9wYWNpdHlcIik7aWYoMCE9PW8uY29uc3RhbnRPcigxKSl7dmFyIHM9ZS5jb250ZXh0O3Muc2V0Q29sb3JNb2RlKGUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKTt2YXIgbD1uLnBhaW50LmdldChcImZpbGwtcGF0dGVyblwiKXx8MSE9PWEuY29uc3RhbnRPcih0LmRlZmF1bHQkNi50cmFuc3BhcmVudCkuYXx8MSE9PW8uY29uc3RhbnRPcigwKT9cInRyYW5zbHVjZW50XCI6XCJvcGFxdWVcIjtlLnJlbmRlclBhc3M9PT1sJiYocy5zZXREZXB0aE1vZGUoZS5kZXB0aE1vZGVGb3JTdWJsYXllcigxLFwib3BhcXVlXCI9PT1lLnJlbmRlclBhc3M/cXQuUmVhZFdyaXRlOnF0LlJlYWRPbmx5KSksbXIoZSxyLG4saSx5cikpLFwidHJhbnNsdWNlbnRcIj09PWUucmVuZGVyUGFzcyYmbi5wYWludC5nZXQoXCJmaWxsLWFudGlhbGlhc1wiKSYmKHMubGluZVdpZHRoLnNldCgyKSxzLnNldERlcHRoTW9kZShlLmRlcHRoTW9kZUZvclN1YmxheWVyKG4uZ2V0UGFpbnRQcm9wZXJ0eShcImZpbGwtb3V0bGluZS1jb2xvclwiKT8yOjAscXQuUmVhZE9ubHkpKSxtcihlLHIsbixpLHhyKSl9fSxcImZpbGwtZXh0cnVzaW9uXCI6ZnVuY3Rpb24oZSxyLG4saSl7aWYoMCE9PW4ucGFpbnQuZ2V0KFwiZmlsbC1leHRydXNpb24tb3BhY2l0eVwiKSlpZihcIm9mZnNjcmVlblwiPT09ZS5yZW5kZXJQYXNzKXshZnVuY3Rpb24oZSxyKXt2YXIgbj1lLmNvbnRleHQsaT1uLmdsLGE9ci52aWV3cG9ydEZyYW1lO2lmKGUuZGVwdGhSYm9OZWVkc0NsZWFyJiZlLnNldHVwT2Zmc2NyZWVuRGVwdGhSZW5kZXJidWZmZXIoKSwhYSl7dmFyIG89bmV3IHoobix7d2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHQsZGF0YTpudWxsfSxpLlJHQkEpO28uYmluZChpLkxJTkVBUixpLkNMQU1QX1RPX0VER0UpLChhPXIudmlld3BvcnRGcmFtZT1uLmNyZWF0ZUZyYW1lYnVmZmVyKGUud2lkdGgsZS5oZWlnaHQpKS5jb2xvckF0dGFjaG1lbnQuc2V0KG8udGV4dHVyZSl9bi5iaW5kRnJhbWVidWZmZXIuc2V0KGEuZnJhbWVidWZmZXIpLGEuZGVwdGhBdHRhY2htZW50LnNldChlLmRlcHRoUmJvKSxlLmRlcHRoUmJvTmVlZHNDbGVhciYmKG4uY2xlYXIoe2RlcHRoOjF9KSxlLmRlcHRoUmJvTmVlZHNDbGVhcj0hMSksbi5jbGVhcih7Y29sb3I6dC5kZWZhdWx0JDYudHJhbnNwYXJlbnR9KSxuLnNldFN0ZW5jaWxNb2RlKEh0LmRpc2FibGVkKSxuLnNldERlcHRoTW9kZShuZXcgcXQoaS5MRVFVQUwscXQuUmVhZFdyaXRlLFswLDFdKSksbi5zZXRDb2xvck1vZGUoZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpfShlLG4pO2Zvcih2YXIgYT0hMCxvPTAscz1pO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXSxjPXIuZ2V0VGlsZShsKSx1PWMuZ2V0QnVja2V0KG4pO3UmJihBcihlLDAsbixjLGwsdSxhKSxhPSExKX19ZWxzZVwidHJhbnNsdWNlbnRcIj09PWUucmVuZGVyUGFzcyYmZnVuY3Rpb24odCxlKXt2YXIgcj1lLnZpZXdwb3J0RnJhbWU7aWYocil7dmFyIG49dC5jb250ZXh0LGk9bi5nbCxhPXQudXNlUHJvZ3JhbShcImV4dHJ1c2lvblRleHR1cmVcIik7bi5zZXRTdGVuY2lsTW9kZShIdC5kaXNhYmxlZCksbi5zZXREZXB0aE1vZGUocXQuZGlzYWJsZWQpLG4uc2V0Q29sb3JNb2RlKHQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKSxuLmFjdGl2ZVRleHR1cmUuc2V0KGkuVEVYVFVSRTApLGkuYmluZFRleHR1cmUoaS5URVhUVVJFXzJELHIuY29sb3JBdHRhY2htZW50LmdldCgpKSxpLnVuaWZvcm0xZihhLnVuaWZvcm1zLnVfb3BhY2l0eSxlLnBhaW50LmdldChcImZpbGwtZXh0cnVzaW9uLW9wYWNpdHlcIikpLGkudW5pZm9ybTFpKGEudW5pZm9ybXMudV9pbWFnZSwwKTt2YXIgbz13ci5jcmVhdGUoKTt3ci5vcnRobyhvLDAsdC53aWR0aCx0LmhlaWdodCwwLDAsMSksaS51bmlmb3JtTWF0cml4NGZ2KGEudW5pZm9ybXMudV9tYXRyaXgsITEsbyksaS51bmlmb3JtMmYoYS51bmlmb3Jtcy51X3dvcmxkLGkuZHJhd2luZ0J1ZmZlcldpZHRoLGkuZHJhd2luZ0J1ZmZlckhlaWdodCksdC52aWV3cG9ydFZBTy5iaW5kKG4sYSx0LnZpZXdwb3J0QnVmZmVyLFtdKSxpLmRyYXdBcnJheXMoaS5UUklBTkdMRV9TVFJJUCwwLDQpfX0oZSxuKX0saGlsbHNoYWRlOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKFwib2Zmc2NyZWVuXCI9PT10LnJlbmRlclBhc3N8fFwidHJhbnNsdWNlbnRcIj09PXQucmVuZGVyUGFzcyl7dmFyIGk9dC5jb250ZXh0LGE9ZS5nZXRTb3VyY2UoKS5tYXh6b29tO2kuc2V0RGVwdGhNb2RlKHQuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCxxdC5SZWFkT25seSkpLGkuc2V0U3RlbmNpbE1vZGUoSHQuZGlzYWJsZWQpLGkuc2V0Q29sb3JNb2RlKHQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKTtmb3IodmFyIG89MCxzPW47bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dLGM9ZS5nZXRUaWxlKGwpO2MubmVlZHNIaWxsc2hhZGVQcmVwYXJlJiZcIm9mZnNjcmVlblwiPT09dC5yZW5kZXJQYXNzP01yKHQsYyxhKTpcInRyYW5zbHVjZW50XCI9PT10LnJlbmRlclBhc3MmJlRyKHQsYyxyKX1pLnZpZXdwb3J0LnNldChbMCwwLHQud2lkdGgsdC5oZWlnaHRdKX19LHJhc3RlcjpmdW5jdGlvbih0LGUscixuKXtpZihcInRyYW5zbHVjZW50XCI9PT10LnJlbmRlclBhc3MmJjAhPT1yLnBhaW50LmdldChcInJhc3Rlci1vcGFjaXR5XCIpKXt2YXIgaSxhLG89dC5jb250ZXh0LHM9by5nbCxsPWUuZ2V0U291cmNlKCksYz10LnVzZVByb2dyYW0oXCJyYXN0ZXJcIik7by5zZXRTdGVuY2lsTW9kZShIdC5kaXNhYmxlZCksby5zZXRDb2xvck1vZGUodC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpLHMudW5pZm9ybTFmKGMudW5pZm9ybXMudV9icmlnaHRuZXNzX2xvdyxyLnBhaW50LmdldChcInJhc3Rlci1icmlnaHRuZXNzLW1pblwiKSkscy51bmlmb3JtMWYoYy51bmlmb3Jtcy51X2JyaWdodG5lc3NfaGlnaCxyLnBhaW50LmdldChcInJhc3Rlci1icmlnaHRuZXNzLW1heFwiKSkscy51bmlmb3JtMWYoYy51bmlmb3Jtcy51X3NhdHVyYXRpb25fZmFjdG9yLChpPXIucGFpbnQuZ2V0KFwicmFzdGVyLXNhdHVyYXRpb25cIikpPjA/MS0xLygxLjAwMS1pKTotaSkscy51bmlmb3JtMWYoYy51bmlmb3Jtcy51X2NvbnRyYXN0X2ZhY3RvciwoYT1yLnBhaW50LmdldChcInJhc3Rlci1jb250cmFzdFwiKSk+MD8xLygxLWEpOjErYSkscy51bmlmb3JtM2Z2KGMudW5pZm9ybXMudV9zcGluX3dlaWdodHMsZnVuY3Rpb24odCl7dCo9TWF0aC5QSS8xODA7dmFyIGU9TWF0aC5zaW4odCkscj1NYXRoLmNvcyh0KTtyZXR1cm5bKDIqcisxKS8zLCgtTWF0aC5zcXJ0KDMpKmUtcisxKS8zLChNYXRoLnNxcnQoMykqZS1yKzEpLzNdfShyLnBhaW50LmdldChcInJhc3Rlci1odWUtcm90YXRlXCIpKSkscy51bmlmb3JtMWYoYy51bmlmb3Jtcy51X2J1ZmZlcl9zY2FsZSwxKSxzLnVuaWZvcm0xaShjLnVuaWZvcm1zLnVfaW1hZ2UwLDApLHMudW5pZm9ybTFpKGMudW5pZm9ybXMudV9pbWFnZTEsMSk7Zm9yKHZhciB1PW4ubGVuZ3RoJiZuWzBdLm92ZXJzY2FsZWRaLGg9MCxmPW47aDxmLmxlbmd0aDtoKz0xKXt2YXIgcD1mW2hdO28uc2V0RGVwdGhNb2RlKHQuZGVwdGhNb2RlRm9yU3VibGF5ZXIocC5vdmVyc2NhbGVkWi11LDE9PT1yLnBhaW50LmdldChcInJhc3Rlci1vcGFjaXR5XCIpP3F0LlJlYWRXcml0ZTpxdC5SZWFkT25seSxzLkxFU1MpKTt2YXIgZD1lLmdldFRpbGUocCksZz10LnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgocC50b1Vud3JhcHBlZCgpLCEwKTtkLnJlZ2lzdGVyRmFkZUR1cmF0aW9uKHIucGFpbnQuZ2V0KFwicmFzdGVyLWZhZGUtZHVyYXRpb25cIikpLHMudW5pZm9ybU1hdHJpeDRmdihjLnVuaWZvcm1zLnVfbWF0cml4LCExLGcpO3ZhciB2PWUuZmluZExvYWRlZFBhcmVudChwLDAse30pLG09U3IoZCx2LGUscix0LnRyYW5zZm9ybSkseT12b2lkIDAseD12b2lkIDA7aWYoby5hY3RpdmVUZXh0dXJlLnNldChzLlRFWFRVUkUwKSxkLnRleHR1cmUuYmluZChzLkxJTkVBUixzLkNMQU1QX1RPX0VER0Uscy5MSU5FQVJfTUlQTUFQX05FQVJFU1QpLG8uYWN0aXZlVGV4dHVyZS5zZXQocy5URVhUVVJFMSksdj8odi50ZXh0dXJlLmJpbmQocy5MSU5FQVIscy5DTEFNUF9UT19FREdFLHMuTElORUFSX01JUE1BUF9ORUFSRVNUKSx5PU1hdGgucG93KDIsdi50aWxlSUQub3ZlcnNjYWxlZFotZC50aWxlSUQub3ZlcnNjYWxlZFopLHg9W2QudGlsZUlELmNhbm9uaWNhbC54KnklMSxkLnRpbGVJRC5jYW5vbmljYWwueSp5JTFdKTpkLnRleHR1cmUuYmluZChzLkxJTkVBUixzLkNMQU1QX1RPX0VER0Uscy5MSU5FQVJfTUlQTUFQX05FQVJFU1QpLHMudW5pZm9ybTJmdihjLnVuaWZvcm1zLnVfdGxfcGFyZW50LHh8fFswLDBdKSxzLnVuaWZvcm0xZihjLnVuaWZvcm1zLnVfc2NhbGVfcGFyZW50LHl8fDEpLHMudW5pZm9ybTFmKGMudW5pZm9ybXMudV9mYWRlX3QsbS5taXgpLHMudW5pZm9ybTFmKGMudW5pZm9ybXMudV9vcGFjaXR5LG0ub3BhY2l0eSpyLnBhaW50LmdldChcInJhc3Rlci1vcGFjaXR5XCIpKSxsIGluc3RhbmNlb2YgdHQpe3ZhciBiPWwuYm91bmRzQnVmZmVyO2wuYm91bmRzVkFPLmJpbmQobyxjLGIsW10pLHMuZHJhd0FycmF5cyhzLlRSSUFOR0xFX1NUUklQLDAsYi5sZW5ndGgpfWVsc2UgaWYoZC5tYXNrZWRCb3VuZHNCdWZmZXImJmQubWFza2VkSW5kZXhCdWZmZXImJmQuc2VnbWVudHMpYy5kcmF3KG8scy5UUklBTkdMRVMsci5pZCxkLm1hc2tlZEJvdW5kc0J1ZmZlcixkLm1hc2tlZEluZGV4QnVmZmVyLGQuc2VnbWVudHMpO2Vsc2V7dmFyIF89dC5yYXN0ZXJCb3VuZHNCdWZmZXI7dC5yYXN0ZXJCb3VuZHNWQU8uYmluZChvLGMsXyxbXSkscy5kcmF3QXJyYXlzKHMuVFJJQU5HTEVfU1RSSVAsMCxfLmxlbmd0aCl9fX19LGJhY2tncm91bmQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIucGFpbnQuZ2V0KFwiYmFja2dyb3VuZC1jb2xvclwiKSxpPXIucGFpbnQuZ2V0KFwiYmFja2dyb3VuZC1vcGFjaXR5XCIpO2lmKDAhPT1pKXt2YXIgYT10LmNvbnRleHQsbz1hLmdsLHM9dC50cmFuc2Zvcm0sbD1zLnRpbGVTaXplLGM9ci5wYWludC5nZXQoXCJiYWNrZ3JvdW5kLXBhdHRlcm5cIiksdT1jfHwxIT09bi5hfHwxIT09aT9cInRyYW5zbHVjZW50XCI6XCJvcGFxdWVcIjtpZih0LnJlbmRlclBhc3M9PT11KXt2YXIgaDtpZihhLnNldFN0ZW5jaWxNb2RlKEh0LmRpc2FibGVkKSxhLnNldERlcHRoTW9kZSh0LmRlcHRoTW9kZUZvclN1YmxheWVyKDAsXCJvcGFxdWVcIj09PXU/cXQuUmVhZFdyaXRlOnF0LlJlYWRPbmx5KSksYS5zZXRDb2xvck1vZGUodC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpLGMpe2lmKGRyKGMsdCkpcmV0dXJuO2g9dC51c2VQcm9ncmFtKFwiYmFja2dyb3VuZFBhdHRlcm5cIiksZ3IoYyx0LGgpLHQudGlsZUV4dGVudFBhdHRlcm5WQU8uYmluZChhLGgsdC50aWxlRXh0ZW50QnVmZmVyLFtdKX1lbHNlIGg9dC51c2VQcm9ncmFtKFwiYmFja2dyb3VuZFwiKSxvLnVuaWZvcm00ZnYoaC51bmlmb3Jtcy51X2NvbG9yLFtuLnIsbi5nLG4uYixuLmFdKSx0LnRpbGVFeHRlbnRWQU8uYmluZChhLGgsdC50aWxlRXh0ZW50QnVmZmVyLFtdKTtvLnVuaWZvcm0xZihoLnVuaWZvcm1zLnVfb3BhY2l0eSxpKTtmb3IodmFyIGY9MCxwPXMuY292ZXJpbmdUaWxlcyh7dGlsZVNpemU6bH0pO2Y8cC5sZW5ndGg7Zis9MSl7dmFyIGQ9cFtmXTtjJiZ2cih7dGlsZUlEOmQsdGlsZVNpemU6bH0sdCxoKSxvLnVuaWZvcm1NYXRyaXg0ZnYoaC51bmlmb3Jtcy51X21hdHJpeCwhMSx0LnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgoZC50b1Vud3JhcHBlZCgpKSksby5kcmF3QXJyYXlzKG8uVFJJQU5HTEVfU1RSSVAsMCx0LnRpbGVFeHRlbnRCdWZmZXIubGVuZ3RoKX19fX0sZGVidWc6ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKUVyKHQsZSxyW25dKX19LHpyPWZ1bmN0aW9uKGUscil7dGhpcy5jb250ZXh0PW5ldyBZdChlKSx0aGlzLnRyYW5zZm9ybT1yLHRoaXMuX3RpbGVUZXh0dXJlcz17fSx0aGlzLnNldHVwKCksdGhpcy5udW1TdWJsYXllcnM9V3QubWF4VW5kZXJ6b29taW5nK1d0Lm1heE92ZXJ6b29taW5nKzEsdGhpcy5kZXB0aEVwc2lsb249MS9NYXRoLnBvdygyLDE2KSx0aGlzLmRlcHRoUmJvTmVlZHNDbGVhcj0hMCx0aGlzLmVtcHR5UHJvZ3JhbUNvbmZpZ3VyYXRpb249bmV3IHQuZGVmYXVsdCQyNCx0aGlzLmNyb3NzVGlsZVN5bWJvbEluZGV4PW5ldyBXZX07ZnVuY3Rpb24gT3IodCxlKXtpZih0LnJvdz5lLnJvdyl7dmFyIHI9dDt0PWUsZT1yfXJldHVybnt4MDp0LmNvbHVtbix5MDp0LnJvdyx4MTplLmNvbHVtbix5MTplLnJvdyxkeDplLmNvbHVtbi10LmNvbHVtbixkeTplLnJvdy10LnJvd319ZnVuY3Rpb24gSXIodCxlLHIsbixpKXt2YXIgYT1NYXRoLm1heChyLE1hdGguZmxvb3IoZS55MCkpLG89TWF0aC5taW4obixNYXRoLmNlaWwoZS55MSkpO2lmKHQueDA9PT1lLngwJiZ0LnkwPT09ZS55MD90LngwK2UuZHkvdC5keSp0LmR4PGUueDE6dC54MS1lLmR5L3QuZHkqdC5keDxlLngwKXt2YXIgcz10O3Q9ZSxlPXN9Zm9yKHZhciBsPXQuZHgvdC5keSxjPWUuZHgvZS5keSx1PXQuZHg+MCxoPWUuZHg8MCxmPWE7ZjxvO2YrKyl7dmFyIHA9bCpNYXRoLm1heCgwLE1hdGgubWluKHQuZHksZit1LXQueTApKSt0LngwLGQ9YypNYXRoLm1heCgwLE1hdGgubWluKGUuZHksZitoLWUueTApKStlLngwO2koTWF0aC5mbG9vcihkKSxNYXRoLmNlaWwocCksZil9fWZ1bmN0aW9uIERyKHQsZSxyLG4saSxhKXt2YXIgbyxzPU9yKHQsZSksbD1PcihlLHIpLGM9T3Iocix0KTtzLmR5PmwuZHkmJihvPXMscz1sLGw9bykscy5keT5jLmR5JiYobz1zLHM9YyxjPW8pLGwuZHk+Yy5keSYmKG89bCxsPWMsYz1vKSxzLmR5JiZJcihjLHMsbixpLGEpLGwuZHkmJklyKGMsbCxuLGksYSl9enIucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuY29udGV4dC5nbDtpZih0aGlzLndpZHRoPXQqYS5kZXZpY2VQaXhlbFJhdGlvLHRoaXMuaGVpZ2h0PWUqYS5kZXZpY2VQaXhlbFJhdGlvLHRoaXMuY29udGV4dC52aWV3cG9ydC5zZXQoWzAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0XSksdGhpcy5zdHlsZSlmb3IodmFyIG49MCxpPXRoaXMuc3R5bGUuX29yZGVyO248aS5sZW5ndGg7bis9MSl7dmFyIG89aVtuXTt0aGlzLnN0eWxlLl9sYXllcnNbb10ucmVzaXplKCl9dGhpcy5kZXB0aFJibyYmKHIuZGVsZXRlUmVuZGVyYnVmZmVyKHRoaXMuZGVwdGhSYm8pLHRoaXMuZGVwdGhSYm89bnVsbCl9LHpyLnByb3RvdHlwZS5zZXR1cD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGV4dCxyPW5ldyB0LlBvc0FycmF5O3IuZW1wbGFjZUJhY2soMCwwKSxyLmVtcGxhY2VCYWNrKHQuZGVmYXVsdCQ4LDApLHIuZW1wbGFjZUJhY2soMCx0LmRlZmF1bHQkOCksci5lbXBsYWNlQmFjayh0LmRlZmF1bHQkOCx0LmRlZmF1bHQkOCksdGhpcy50aWxlRXh0ZW50QnVmZmVyPWUuY3JlYXRlVmVydGV4QnVmZmVyKHIsS2UubWVtYmVycyksdGhpcy50aWxlRXh0ZW50VkFPPW5ldyBRLHRoaXMudGlsZUV4dGVudFBhdHRlcm5WQU89bmV3IFE7dmFyIG49bmV3IHQuUG9zQXJyYXk7bi5lbXBsYWNlQmFjaygwLDApLG4uZW1wbGFjZUJhY2sodC5kZWZhdWx0JDgsMCksbi5lbXBsYWNlQmFjayh0LmRlZmF1bHQkOCx0LmRlZmF1bHQkOCksbi5lbXBsYWNlQmFjaygwLHQuZGVmYXVsdCQ4KSxuLmVtcGxhY2VCYWNrKDAsMCksdGhpcy5kZWJ1Z0J1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcihuLEtlLm1lbWJlcnMpLHRoaXMuZGVidWdWQU89bmV3IFE7dmFyIGk9bmV3IHQuUmFzdGVyQm91bmRzQXJyYXk7aS5lbXBsYWNlQmFjaygwLDAsMCwwKSxpLmVtcGxhY2VCYWNrKHQuZGVmYXVsdCQ4LDAsdC5kZWZhdWx0JDgsMCksaS5lbXBsYWNlQmFjaygwLHQuZGVmYXVsdCQ4LDAsdC5kZWZhdWx0JDgpLGkuZW1wbGFjZUJhY2sodC5kZWZhdWx0JDgsdC5kZWZhdWx0JDgsdC5kZWZhdWx0JDgsdC5kZWZhdWx0JDgpLHRoaXMucmFzdGVyQm91bmRzQnVmZmVyPWUuY3JlYXRlVmVydGV4QnVmZmVyKGksSy5tZW1iZXJzKSx0aGlzLnJhc3RlckJvdW5kc1ZBTz1uZXcgUTt2YXIgYT1uZXcgdC5Qb3NBcnJheTthLmVtcGxhY2VCYWNrKDAsMCksYS5lbXBsYWNlQmFjaygxLDApLGEuZW1wbGFjZUJhY2soMCwxKSxhLmVtcGxhY2VCYWNrKDEsMSksdGhpcy52aWV3cG9ydEJ1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcihhLEtlLm1lbWJlcnMpLHRoaXMudmlld3BvcnRWQU89bmV3IFF9LHpyLnByb3RvdHlwZS5jbGVhclN0ZW5jaWw9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbnRleHQscj1lLmdsO2Uuc2V0Q29sb3JNb2RlKEd0LmRpc2FibGVkKSxlLnNldERlcHRoTW9kZShxdC5kaXNhYmxlZCksZS5zZXRTdGVuY2lsTW9kZShuZXcgSHQoe2Z1bmM6ci5BTFdBWVMsbWFzazowfSwwLDI1NSxyLlpFUk8sci5aRVJPLHIuWkVSTykpO3ZhciBuPXQubWF0NC5jcmVhdGUoKTt0Lm1hdDQub3J0aG8obiwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsMCwwLDEpLHQubWF0NC5zY2FsZShuLG4sW3IuZHJhd2luZ0J1ZmZlcldpZHRoLHIuZHJhd2luZ0J1ZmZlckhlaWdodCwwXSk7dmFyIGk9dGhpcy51c2VQcm9ncmFtKFwiY2xpcHBpbmdNYXNrXCIpO3IudW5pZm9ybU1hdHJpeDRmdihpLnVuaWZvcm1zLnVfbWF0cml4LCExLG4pLHRoaXMudmlld3BvcnRWQU8uYmluZChlLGksdGhpcy52aWV3cG9ydEJ1ZmZlcixbXSksci5kcmF3QXJyYXlzKHIuVFJJQU5HTEVfU1RSSVAsMCw0KX0senIucHJvdG90eXBlLl9yZW5kZXJUaWxlQ2xpcHBpbmdNYXNrcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvbnRleHQscj1lLmdsO2Uuc2V0Q29sb3JNb2RlKEd0LmRpc2FibGVkKSxlLnNldERlcHRoTW9kZShxdC5kaXNhYmxlZCk7dmFyIG49MTt0aGlzLl90aWxlQ2xpcHBpbmdNYXNrSURzPXt9O2Zvcih2YXIgaT0wLGE9dDtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV0scz10aGlzLl90aWxlQ2xpcHBpbmdNYXNrSURzW28ua2V5XT1uKys7ZS5zZXRTdGVuY2lsTW9kZShuZXcgSHQoe2Z1bmM6ci5BTFdBWVMsbWFzazowfSxzLDI1NSxyLktFRVAsci5LRUVQLHIuUkVQTEFDRSkpO3ZhciBsPXRoaXMudXNlUHJvZ3JhbShcImNsaXBwaW5nTWFza1wiKTtyLnVuaWZvcm1NYXRyaXg0ZnYobC51bmlmb3Jtcy51X21hdHJpeCwhMSxvLnBvc01hdHJpeCksdGhpcy50aWxlRXh0ZW50VkFPLmJpbmQodGhpcy5jb250ZXh0LGwsdGhpcy50aWxlRXh0ZW50QnVmZmVyLFtdKSxyLmRyYXdBcnJheXMoci5UUklBTkdMRV9TVFJJUCwwLHRoaXMudGlsZUV4dGVudEJ1ZmZlci5sZW5ndGgpfX0senIucHJvdG90eXBlLnN0ZW5jaWxNb2RlRm9yQ2xpcHBpbmc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO3JldHVybiBuZXcgSHQoe2Z1bmM6ZS5FUVVBTCxtYXNrOjI1NX0sdGhpcy5fdGlsZUNsaXBwaW5nTWFza0lEc1t0LmtleV0sMCxlLktFRVAsZS5LRUVQLGUuUkVQTEFDRSl9LHpyLnByb3RvdHlwZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO3JldHVybiB0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3I/bmV3IEd0KFtlLkNPTlNUQU5UX0NPTE9SLGUuT05FXSxuZXcgdC5kZWZhdWx0JDYoMS84LDEvOCwxLzgsMCksWyEwLCEwLCEwLCEwXSk6XCJvcGFxdWVcIj09PXRoaXMucmVuZGVyUGFzcz9HdC51bmJsZW5kZWQ6R3QuYWxwaGFCbGVuZGVkfSx6ci5wcm90b3R5cGUuZGVwdGhNb2RlRm9yU3VibGF5ZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTEtKCgxK3RoaXMuY3VycmVudExheWVyKSp0aGlzLm51bVN1YmxheWVycyt0KSp0aGlzLmRlcHRoRXBzaWxvbixpPW4tMSt0aGlzLmRlcHRoUmFuZ2U7cmV0dXJuIG5ldyBxdChyfHx0aGlzLmNvbnRleHQuZ2wuTEVRVUFMLGUsW2ksbl0pfSx6ci5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcztmb3IodmFyIGkgaW4gdGhpcy5zdHlsZT1lLHRoaXMub3B0aW9ucz1yLHRoaXMubGluZUF0bGFzPWUubGluZUF0bGFzLHRoaXMuaW1hZ2VNYW5hZ2VyPWUuaW1hZ2VNYW5hZ2VyLHRoaXMuZ2x5cGhNYW5hZ2VyPWUuZ2x5cGhNYW5hZ2VyLHRoaXMuc3ltYm9sRmFkZUNoYW5nZT1lLnBsYWNlbWVudC5zeW1ib2xGYWRlQ2hhbmdlKGEubm93KCkpLGUuc291cmNlQ2FjaGVzKXt2YXIgbz1uLnN0eWxlLnNvdXJjZUNhY2hlc1tpXTtvLnVzZWQmJm8ucHJlcGFyZShuLmNvbnRleHQpfXZhciBzPXRoaXMuc3R5bGUuX29yZGVyLGw9dC5maWx0ZXJPYmplY3QodGhpcy5zdHlsZS5zb3VyY2VDYWNoZXMsZnVuY3Rpb24odCl7cmV0dXJuXCJyYXN0ZXJcIj09PXQuZ2V0U291cmNlKCkudHlwZXx8XCJyYXN0ZXItZGVtXCI9PT10LmdldFNvdXJjZSgpLnR5cGV9KSxjPWZ1bmN0aW9uKGUpe3ZhciByPWxbZV07IWZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPWUuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LnRpbGVJRC5pc0xlc3NUaGFuKGUudGlsZUlEKT8tMTplLnRpbGVJRC5pc0xlc3NUaGFuKHQudGlsZUlEKT8xOjB9KSxpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPXt9LG89bltpXSxzPW4uc2xpY2UoaSsxKTthcihvLnRpbGVJRC53cmFwcGVkKCksby50aWxlSUQscyxuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKDAsby50aWxlSUQud3JhcCsxLDAsMCwwKSxhKSxvLnNldE1hc2soYSxyKX19KHIuZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiByLmdldFRpbGUodCl9KSxuLmNvbnRleHQpfTtmb3IodmFyIHUgaW4gbCljKHUpO3RoaXMucmVuZGVyUGFzcz1cIm9mZnNjcmVlblwiO3ZhciBoLGY9W107dGhpcy5kZXB0aFJib05lZWRzQ2xlYXI9ITA7Zm9yKHZhciBwPTA7cDxzLmxlbmd0aDtwKyspe3ZhciBkPW4uc3R5bGUuX2xheWVyc1tzW3BdXTtkLmhhc09mZnNjcmVlblBhc3MoKSYmIWQuaXNIaWRkZW4obi50cmFuc2Zvcm0uem9vbSkmJihkLnNvdXJjZSE9PShoJiZoLmlkKSYmKGY9W10sKGg9bi5zdHlsZS5zb3VyY2VDYWNoZXNbZC5zb3VyY2VdKSYmKGY9aC5nZXRWaXNpYmxlQ29vcmRpbmF0ZXMoKSkucmV2ZXJzZSgpKSxmLmxlbmd0aCYmbi5yZW5kZXJMYXllcihuLGgsZCxmKSl9dGhpcy5jb250ZXh0LmJpbmRGcmFtZWJ1ZmZlci5zZXQobnVsbCksdGhpcy5jb250ZXh0LmNsZWFyKHtjb2xvcjpyLnNob3dPdmVyZHJhd0luc3BlY3Rvcj90LmRlZmF1bHQkNi5ibGFjazp0LmRlZmF1bHQkNi50cmFuc3BhcmVudCxkZXB0aDoxfSksdGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yPXIuc2hvd092ZXJkcmF3SW5zcGVjdG9yLHRoaXMuZGVwdGhSYW5nZT0oZS5fb3JkZXIubGVuZ3RoKzIpKnRoaXMubnVtU3VibGF5ZXJzKnRoaXMuZGVwdGhFcHNpbG9uLHRoaXMucmVuZGVyUGFzcz1cIm9wYXF1ZVwiO3ZhciBnLHY9W107Zm9yKHRoaXMuY3VycmVudExheWVyPXMubGVuZ3RoLTEsdGhpcy5jdXJyZW50TGF5ZXI7dGhpcy5jdXJyZW50TGF5ZXI+PTA7dGhpcy5jdXJyZW50TGF5ZXItLSl7dmFyIG09bi5zdHlsZS5fbGF5ZXJzW3Nbbi5jdXJyZW50TGF5ZXJdXTttLnNvdXJjZSE9PShnJiZnLmlkKSYmKHY9W10sKGc9bi5zdHlsZS5zb3VyY2VDYWNoZXNbbS5zb3VyY2VdKSYmKG4uY2xlYXJTdGVuY2lsKCksdj1nLmdldFZpc2libGVDb29yZGluYXRlcygpLGcuZ2V0U291cmNlKCkuaXNUaWxlQ2xpcHBlZCYmbi5fcmVuZGVyVGlsZUNsaXBwaW5nTWFza3ModikpKSxuLnJlbmRlckxheWVyKG4sZyxtLHYpfXRoaXMucmVuZGVyUGFzcz1cInRyYW5zbHVjZW50XCI7dmFyIHkseD1bXTtmb3IodGhpcy5jdXJyZW50TGF5ZXI9MCx0aGlzLmN1cnJlbnRMYXllcjt0aGlzLmN1cnJlbnRMYXllcjxzLmxlbmd0aDt0aGlzLmN1cnJlbnRMYXllcisrKXt2YXIgYj1uLnN0eWxlLl9sYXllcnNbc1tuLmN1cnJlbnRMYXllcl1dO2Iuc291cmNlIT09KHkmJnkuaWQpJiYoeD1bXSwoeT1uLnN0eWxlLnNvdXJjZUNhY2hlc1tiLnNvdXJjZV0pJiYobi5jbGVhclN0ZW5jaWwoKSx4PXkuZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCkseS5nZXRTb3VyY2UoKS5pc1RpbGVDbGlwcGVkJiZuLl9yZW5kZXJUaWxlQ2xpcHBpbmdNYXNrcyh4KSkseC5yZXZlcnNlKCkpLG4ucmVuZGVyTGF5ZXIobix5LGIseCl9aWYodGhpcy5vcHRpb25zLnNob3dUaWxlQm91bmRhcmllcyl7dmFyIF89dGhpcy5zdHlsZS5zb3VyY2VDYWNoZXNbT2JqZWN0LmtleXModGhpcy5zdHlsZS5zb3VyY2VDYWNoZXMpWzBdXTtfJiZMci5kZWJ1Zyh0aGlzLF8sXy5nZXRWaXNpYmxlQ29vcmRpbmF0ZXMoKSl9fSx6ci5wcm90b3R5cGUuc2V0dXBPZmZzY3JlZW5EZXB0aFJlbmRlcmJ1ZmZlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udGV4dDt0aGlzLmRlcHRoUmJvfHwodGhpcy5kZXB0aFJibz10LmNyZWF0ZVJlbmRlcmJ1ZmZlcih0LmdsLkRFUFRIX0NPTVBPTkVOVDE2LHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpKX0senIucHJvdG90eXBlLnJlbmRlckxheWVyPWZ1bmN0aW9uKHQsZSxyLG4pe3IuaXNIaWRkZW4odGhpcy50cmFuc2Zvcm0uem9vbSl8fChcImJhY2tncm91bmRcIj09PXIudHlwZXx8bi5sZW5ndGgpJiYodGhpcy5pZD1yLmlkLExyW3IudHlwZV0odCxlLHIsbikpfSx6ci5wcm90b3R5cGUudHJhbnNsYXRlUG9zTWF0cml4PWZ1bmN0aW9uKGUscixuLGksYSl7aWYoIW5bMF0mJiFuWzFdKXJldHVybiBlO3ZhciBvPWE/XCJtYXBcIj09PWk/dGhpcy50cmFuc2Zvcm0uYW5nbGU6MDpcInZpZXdwb3J0XCI9PT1pPy10aGlzLnRyYW5zZm9ybS5hbmdsZTowO2lmKG8pe3ZhciBzPU1hdGguc2luKG8pLGw9TWF0aC5jb3Mobyk7bj1bblswXSpsLW5bMV0qcyxuWzBdKnMrblsxXSpsXX12YXIgYz1bYT9uWzBdOk1lKHIsblswXSx0aGlzLnRyYW5zZm9ybS56b29tKSxhP25bMV06TWUocixuWzFdLHRoaXMudHJhbnNmb3JtLnpvb20pLDBdLHU9bmV3IEZsb2F0MzJBcnJheSgxNik7cmV0dXJuIHQubWF0NC50cmFuc2xhdGUodSxlLGMpLHV9LHpyLnByb3RvdHlwZS5zYXZlVGlsZVRleHR1cmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlsZVRleHR1cmVzW3Quc2l6ZVswXV07ZT9lLnB1c2godCk6dGhpcy5fdGlsZVRleHR1cmVzW3Quc2l6ZVswXV09W3RdfSx6ci5wcm90b3R5cGUuZ2V0VGlsZVRleHR1cmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlsZVRleHR1cmVzW3RdO3JldHVybiBlJiZlLmxlbmd0aD4wP2UucG9wKCk6bnVsbH0senIucHJvdG90eXBlLl9jcmVhdGVQcm9ncmFtQ2FjaGVkPWZ1bmN0aW9uKHQsZSl7dGhpcy5jYWNoZT10aGlzLmNhY2hlfHx7fTt2YXIgcj1cIlwiK3QrKGUuY2FjaGVLZXl8fFwiXCIpKyh0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3I/XCIvb3ZlcmRyYXdcIjpcIlwiKTtyZXR1cm4gdGhpcy5jYWNoZVtyXXx8KHRoaXMuY2FjaGVbcl09bmV3IGlyKHRoaXMuY29udGV4dCxuclt0XSxlLHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3RvcikpLHRoaXMuY2FjaGVbcl19LHpyLnByb3RvdHlwZS51c2VQcm9ncmFtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fY3JlYXRlUHJvZ3JhbUNhY2hlZCh0LGV8fHRoaXMuZW1wdHlQcm9ncmFtQ29uZmlndXJhdGlvbik7cmV0dXJuIHRoaXMuY29udGV4dC5wcm9ncmFtLnNldChyLnByb2dyYW0pLHJ9O3ZhciBQcj10LmRlZmF1bHQkMjAudmVjNCxScj10LmRlZmF1bHQkMjAubWF0NCxGcj10LmRlZmF1bHQkMjAubWF0MixCcj1mdW5jdGlvbih0LGUscil7dGhpcy50aWxlU2l6ZT01MTIsdGhpcy5fcmVuZGVyV29ybGRDb3BpZXM9dm9pZCAwPT09cnx8cix0aGlzLl9taW5ab29tPXR8fDAsdGhpcy5fbWF4Wm9vbT1lfHwyMix0aGlzLmxhdFJhbmdlPVstODUuMDUxMTMsODUuMDUxMTNdLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLHRoaXMuX2NlbnRlcj1uZXcgRygwLDApLHRoaXMuem9vbT0wLHRoaXMuYW5nbGU9MCx0aGlzLl9mb3Y9LjY0MzUwMTEwODc5MzI4NDQsdGhpcy5fcGl0Y2g9MCx0aGlzLl91bm1vZGlmaWVkPSEwLHRoaXMuX3Bvc01hdHJpeENhY2hlPXt9LHRoaXMuX2FsaWduZWRQb3NNYXRyaXhDYWNoZT17fX0sTnI9e21pblpvb206e2NvbmZpZ3VyYWJsZTohMH0sbWF4Wm9vbTp7Y29uZmlndXJhYmxlOiEwfSxyZW5kZXJXb3JsZENvcGllczp7Y29uZmlndXJhYmxlOiEwfSx3b3JsZFNpemU6e2NvbmZpZ3VyYWJsZTohMH0sY2VudGVyUG9pbnQ6e2NvbmZpZ3VyYWJsZTohMH0sc2l6ZTp7Y29uZmlndXJhYmxlOiEwfSxiZWFyaW5nOntjb25maWd1cmFibGU6ITB9LHBpdGNoOntjb25maWd1cmFibGU6ITB9LGZvdjp7Y29uZmlndXJhYmxlOiEwfSx6b29tOntjb25maWd1cmFibGU6ITB9LGNlbnRlcjp7Y29uZmlndXJhYmxlOiEwfSx1bm1vZGlmaWVkOntjb25maWd1cmFibGU6ITB9LHg6e2NvbmZpZ3VyYWJsZTohMH0seTp7Y29uZmlndXJhYmxlOiEwfSxwb2ludDp7Y29uZmlndXJhYmxlOiEwfX07QnIucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEJyKHRoaXMuX21pblpvb20sdGhpcy5fbWF4Wm9vbSx0aGlzLl9yZW5kZXJXb3JsZENvcGllcyk7cmV0dXJuIHQudGlsZVNpemU9dGhpcy50aWxlU2l6ZSx0LmxhdFJhbmdlPXRoaXMubGF0UmFuZ2UsdC53aWR0aD10aGlzLndpZHRoLHQuaGVpZ2h0PXRoaXMuaGVpZ2h0LHQuX2NlbnRlcj10aGlzLl9jZW50ZXIsdC56b29tPXRoaXMuem9vbSx0LmFuZ2xlPXRoaXMuYW5nbGUsdC5fZm92PXRoaXMuX2Zvdix0Ll9waXRjaD10aGlzLl9waXRjaCx0Ll91bm1vZGlmaWVkPXRoaXMuX3VubW9kaWZpZWQsdC5fY2FsY01hdHJpY2VzKCksdH0sTnIubWluWm9vbS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWluWm9vbX0sTnIubWluWm9vbS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fbWluWm9vbSE9PXQmJih0aGlzLl9taW5ab29tPXQsdGhpcy56b29tPU1hdGgubWF4KHRoaXMuem9vbSx0KSl9LE5yLm1heFpvb20uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21heFpvb219LE5yLm1heFpvb20uc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX21heFpvb20hPT10JiYodGhpcy5fbWF4Wm9vbT10LHRoaXMuem9vbT1NYXRoLm1pbih0aGlzLnpvb20sdCkpfSxOci5yZW5kZXJXb3JsZENvcGllcy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyV29ybGRDb3BpZXN9LE5yLnJlbmRlcldvcmxkQ29waWVzLnNldD1mdW5jdGlvbih0KXt2b2lkIDA9PT10P3Q9ITA6bnVsbD09PXQmJih0PSExKSx0aGlzLl9yZW5kZXJXb3JsZENvcGllcz10fSxOci53b3JsZFNpemUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGlsZVNpemUqdGhpcy5zY2FsZX0sTnIuY2VudGVyUG9pbnQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZS5fZGl2KDIpfSxOci5zaXplLmdldD1mdW5jdGlvbigpe3JldHVybiBuZXcgdC5kZWZhdWx0JDEodGhpcy53aWR0aCx0aGlzLmhlaWdodCl9LE5yLmJlYXJpbmcuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuLXRoaXMuYW5nbGUvTWF0aC5QSSoxODB9LE5yLmJlYXJpbmcuc2V0PWZ1bmN0aW9uKGUpe3ZhciByPS10LndyYXAoZSwtMTgwLDE4MCkqTWF0aC5QSS8xODA7dGhpcy5hbmdsZSE9PXImJih0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuYW5nbGU9cix0aGlzLl9jYWxjTWF0cmljZXMoKSx0aGlzLnJvdGF0aW9uTWF0cml4PUZyLmNyZWF0ZSgpLEZyLnJvdGF0ZSh0aGlzLnJvdGF0aW9uTWF0cml4LHRoaXMucm90YXRpb25NYXRyaXgsdGhpcy5hbmdsZSkpfSxOci5waXRjaC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGl0Y2gvTWF0aC5QSSoxODB9LE5yLnBpdGNoLnNldD1mdW5jdGlvbihlKXt2YXIgcj10LmNsYW1wKGUsMCw2MCkvMTgwKk1hdGguUEk7dGhpcy5fcGl0Y2ghPT1yJiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLl9waXRjaD1yLHRoaXMuX2NhbGNNYXRyaWNlcygpKX0sTnIuZm92LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb3YvTWF0aC5QSSoxODB9LE5yLmZvdi5zZXQ9ZnVuY3Rpb24odCl7dD1NYXRoLm1heCguMDEsTWF0aC5taW4oNjAsdCkpLHRoaXMuX2ZvdiE9PXQmJih0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuX2Zvdj10LzE4MCpNYXRoLlBJLHRoaXMuX2NhbGNNYXRyaWNlcygpKX0sTnIuem9vbS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fem9vbX0sTnIuem9vbS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5taW4oTWF0aC5tYXgodCx0aGlzLm1pblpvb20pLHRoaXMubWF4Wm9vbSk7dGhpcy5fem9vbSE9PWUmJih0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuX3pvb209ZSx0aGlzLnNjYWxlPXRoaXMuem9vbVNjYWxlKGUpLHRoaXMudGlsZVpvb209TWF0aC5mbG9vcihlKSx0aGlzLnpvb21GcmFjdGlvbj1lLXRoaXMudGlsZVpvb20sdGhpcy5fY29uc3RyYWluKCksdGhpcy5fY2FsY01hdHJpY2VzKCkpfSxOci5jZW50ZXIuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NlbnRlcn0sTnIuY2VudGVyLnNldD1mdW5jdGlvbih0KXt0LmxhdD09PXRoaXMuX2NlbnRlci5sYXQmJnQubG5nPT09dGhpcy5fY2VudGVyLmxuZ3x8KHRoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5fY2VudGVyPXQsdGhpcy5fY29uc3RyYWluKCksdGhpcy5fY2FsY01hdHJpY2VzKCkpfSxCci5wcm90b3R5cGUuY292ZXJpbmdab29tTGV2ZWw9ZnVuY3Rpb24odCl7cmV0dXJuKHQucm91bmRab29tP01hdGgucm91bmQ6TWF0aC5mbG9vcikodGhpcy56b29tK3RoaXMuc2NhbGVab29tKHRoaXMudGlsZVNpemUvdC50aWxlU2l6ZSkpfSxCci5wcm90b3R5cGUuZ2V0VmlzaWJsZVVud3JhcHBlZENvb3JkaW5hdGVzPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LmRlZmF1bHQkMSgwLDApLDApLG49dGhpcy5wb2ludENvb3JkaW5hdGUobmV3IHQuZGVmYXVsdCQxKHRoaXMud2lkdGgsMCksMCksaT1NYXRoLmZsb29yKHIuY29sdW1uKSxhPU1hdGguZmxvb3Iobi5jb2x1bW4pLG89W25ldyB0LlVud3JhcHBlZFRpbGVJRCgwLGUpXTtpZih0aGlzLl9yZW5kZXJXb3JsZENvcGllcylmb3IodmFyIHM9aTtzPD1hO3MrKykwIT09cyYmby5wdXNoKG5ldyB0LlVud3JhcHBlZFRpbGVJRChzLGUpKTtyZXR1cm4gb30sQnIucHJvdG90eXBlLmNvdmVyaW5nVGlsZXM9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5jb3ZlcmluZ1pvb21MZXZlbChlKSxuPXI7aWYodm9pZCAwIT09ZS5taW56b29tJiZyPGUubWluem9vbSlyZXR1cm5bXTt2b2lkIDAhPT1lLm1heHpvb20mJnI+ZS5tYXh6b29tJiYocj1lLm1heHpvb20pO3ZhciBpPXRoaXMucG9pbnRDb29yZGluYXRlKHRoaXMuY2VudGVyUG9pbnQsciksYT1uZXcgdC5kZWZhdWx0JDEoaS5jb2x1bW4tLjUsaS5yb3ctLjUpO3JldHVybiBmdW5jdGlvbihlLHIsbixpKXt2b2lkIDA9PT1pJiYoaT0hMCk7dmFyIGE9MTw8ZSxvPXt9O2Z1bmN0aW9uIHMocixzLGwpe3ZhciBjLHUsaCxmO2lmKGw+PTAmJmw8PWEpZm9yKGM9cjtjPHM7YysrKXU9TWF0aC5mbG9vcihjL2EpLGg9KGMlYSthKSVhLDAhPT11JiYhMCE9PWl8fChmPW5ldyB0Lk92ZXJzY2FsZWRUaWxlSUQobix1LGUsaCxsKSxvW2Yua2V5XT1mKX1yZXR1cm4gRHIoclswXSxyWzFdLHJbMl0sMCxhLHMpLERyKHJbMl0sclszXSxyWzBdLDAsYSxzKSxPYmplY3Qua2V5cyhvKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIG9bdF19KX0ocixbdGhpcy5wb2ludENvb3JkaW5hdGUobmV3IHQuZGVmYXVsdCQxKDAsMCksciksdGhpcy5wb2ludENvb3JkaW5hdGUobmV3IHQuZGVmYXVsdCQxKHRoaXMud2lkdGgsMCksciksdGhpcy5wb2ludENvb3JkaW5hdGUobmV3IHQuZGVmYXVsdCQxKHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHIpLHRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LmRlZmF1bHQkMSgwLHRoaXMuaGVpZ2h0KSxyKV0sZS5yZXBhcnNlT3ZlcnNjYWxlZD9uOnIsdGhpcy5fcmVuZGVyV29ybGRDb3BpZXMpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gYS5kaXN0KHQuY2Fub25pY2FsKS1hLmRpc3QoZS5jYW5vbmljYWwpfSl9LEJyLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCxlKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9ZSx0aGlzLnBpeGVsc1RvR0xVbml0cz1bMi90LC0yL2VdLHRoaXMuX2NvbnN0cmFpbigpLHRoaXMuX2NhbGNNYXRyaWNlcygpfSxOci51bm1vZGlmaWVkLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91bm1vZGlmaWVkfSxCci5wcm90b3R5cGUuem9vbVNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdygyLHQpfSxCci5wcm90b3R5cGUuc2NhbGVab29tPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9NYXRoLkxOMn0sQnIucHJvdG90eXBlLnByb2plY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0LmRlZmF1bHQkMSh0aGlzLmxuZ1goZS5sbmcpLHRoaXMubGF0WShlLmxhdCkpfSxCci5wcm90b3R5cGUudW5wcm9qZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRyh0aGlzLnhMbmcodC54KSx0aGlzLnlMYXQodC55KSl9LE5yLnguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG5nWCh0aGlzLmNlbnRlci5sbmcpfSxOci55LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxhdFkodGhpcy5jZW50ZXIubGF0KX0sTnIucG9pbnQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0LmRlZmF1bHQkMSh0aGlzLngsdGhpcy55KX0sQnIucHJvdG90eXBlLmxuZ1g9ZnVuY3Rpb24odCl7cmV0dXJuKDE4MCt0KSp0aGlzLndvcmxkU2l6ZS8zNjB9LEJyLnByb3RvdHlwZS5sYXRZPWZ1bmN0aW9uKHQpe3JldHVybigxODAtMTgwL01hdGguUEkqTWF0aC5sb2coTWF0aC50YW4oTWF0aC5QSS80K3QqTWF0aC5QSS8zNjApKSkqdGhpcy53b3JsZFNpemUvMzYwfSxCci5wcm90b3R5cGUueExuZz1mdW5jdGlvbih0KXtyZXR1cm4gMzYwKnQvdGhpcy53b3JsZFNpemUtMTgwfSxCci5wcm90b3R5cGUueUxhdD1mdW5jdGlvbih0KXt2YXIgZT0xODAtMzYwKnQvdGhpcy53b3JsZFNpemU7cmV0dXJuIDM2MC9NYXRoLlBJKk1hdGguYXRhbihNYXRoLmV4cChlKk1hdGguUEkvMTgwKSktOTB9LEJyLnByb3RvdHlwZS5zZXRMb2NhdGlvbkF0UG9pbnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnBvaW50Q29vcmRpbmF0ZShlKS5fc3ViKHRoaXMucG9pbnRDb29yZGluYXRlKHRoaXMuY2VudGVyUG9pbnQpKTt0aGlzLmNlbnRlcj10aGlzLmNvb3JkaW5hdGVMb2NhdGlvbih0aGlzLmxvY2F0aW9uQ29vcmRpbmF0ZSh0KS5fc3ViKHIpKSx0aGlzLl9yZW5kZXJXb3JsZENvcGllcyYmKHRoaXMuY2VudGVyPXRoaXMuY2VudGVyLndyYXAoKSl9LEJyLnByb3RvdHlwZS5sb2NhdGlvblBvaW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvb3JkaW5hdGVQb2ludCh0aGlzLmxvY2F0aW9uQ29vcmRpbmF0ZSh0KSl9LEJyLnByb3RvdHlwZS5wb2ludExvY2F0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvb3JkaW5hdGVMb2NhdGlvbih0aGlzLnBvaW50Q29vcmRpbmF0ZSh0KSl9LEJyLnByb3RvdHlwZS5sb2NhdGlvbkNvb3JkaW5hdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0LmRlZmF1bHQkMTcodGhpcy5sbmdYKGUubG5nKS90aGlzLnRpbGVTaXplLHRoaXMubGF0WShlLmxhdCkvdGhpcy50aWxlU2l6ZSx0aGlzLnpvb20pLnpvb21Ubyh0aGlzLnRpbGVab29tKX0sQnIucHJvdG90eXBlLmNvb3JkaW5hdGVMb2NhdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10Lnpvb21Ubyh0aGlzLnpvb20pO3JldHVybiBuZXcgRyh0aGlzLnhMbmcoZS5jb2x1bW4qdGhpcy50aWxlU2l6ZSksdGhpcy55TGF0KGUucm93KnRoaXMudGlsZVNpemUpKX0sQnIucHJvdG90eXBlLnBvaW50Q29vcmRpbmF0ZT1mdW5jdGlvbihlLHIpe3ZvaWQgMD09PXImJihyPXRoaXMudGlsZVpvb20pO3ZhciBuPVtlLngsZS55LDAsMV0saT1bZS54LGUueSwxLDFdO1ByLnRyYW5zZm9ybU1hdDQobixuLHRoaXMucGl4ZWxNYXRyaXhJbnZlcnNlKSxQci50cmFuc2Zvcm1NYXQ0KGksaSx0aGlzLnBpeGVsTWF0cml4SW52ZXJzZSk7dmFyIGE9blszXSxvPWlbM10scz1uWzBdL2EsbD1pWzBdL28sYz1uWzFdL2EsdT1pWzFdL28saD1uWzJdL2EsZj1pWzJdL28scD1oPT09Zj8wOigwLWgpLyhmLWgpO3JldHVybiBuZXcgdC5kZWZhdWx0JDE3KHQubnVtYmVyKHMsbCxwKS90aGlzLnRpbGVTaXplLHQubnVtYmVyKGMsdSxwKS90aGlzLnRpbGVTaXplLHRoaXMuem9vbSkuX3pvb21UbyhyKX0sQnIucHJvdG90eXBlLmNvb3JkaW5hdGVQb2ludD1mdW5jdGlvbihlKXt2YXIgcj1lLnpvb21Ubyh0aGlzLnpvb20pLG49W3IuY29sdW1uKnRoaXMudGlsZVNpemUsci5yb3cqdGhpcy50aWxlU2l6ZSwwLDFdO3JldHVybiBQci50cmFuc2Zvcm1NYXQ0KG4sbix0aGlzLnBpeGVsTWF0cml4KSxuZXcgdC5kZWZhdWx0JDEoblswXS9uWzNdLG5bMV0vblszXSl9LEJyLnByb3RvdHlwZS5jYWxjdWxhdGVQb3NNYXRyaXg9ZnVuY3Rpb24oZSxyKXt2b2lkIDA9PT1yJiYocj0hMSk7dmFyIG49ZS5rZXksaT1yP3RoaXMuX2FsaWduZWRQb3NNYXRyaXhDYWNoZTp0aGlzLl9wb3NNYXRyaXhDYWNoZTtpZihpW25dKXJldHVybiBpW25dO3ZhciBhPWUuY2Fub25pY2FsLG89dGhpcy53b3JsZFNpemUvdGhpcy56b29tU2NhbGUoYS56KSxzPWEueCtNYXRoLnBvdygyLGEueikqZS53cmFwLGw9UnIuaWRlbnRpdHkobmV3IEZsb2F0NjRBcnJheSgxNikpO3JldHVybiBSci50cmFuc2xhdGUobCxsLFtzKm8sYS55Km8sMF0pLFJyLnNjYWxlKGwsbCxbby90LmRlZmF1bHQkOCxvL3QuZGVmYXVsdCQ4LDFdKSxSci5tdWx0aXBseShsLHI/dGhpcy5hbGlnbmVkUHJvak1hdHJpeDp0aGlzLnByb2pNYXRyaXgsbCksaVtuXT1uZXcgRmxvYXQzMkFycmF5KGwpLGlbbl19LEJyLnByb3RvdHlwZS5fY29uc3RyYWluPWZ1bmN0aW9uKCl7aWYodGhpcy5jZW50ZXImJnRoaXMud2lkdGgmJnRoaXMuaGVpZ2h0JiYhdGhpcy5fY29uc3RyYWluaW5nKXt0aGlzLl9jb25zdHJhaW5pbmc9ITA7dmFyIGUscixuLGksYT0tOTAsbz05MCxzPS0xODAsbD0xODAsYz10aGlzLnNpemUsdT10aGlzLl91bm1vZGlmaWVkO2lmKHRoaXMubGF0UmFuZ2Upe3ZhciBoPXRoaXMubGF0UmFuZ2U7YT10aGlzLmxhdFkoaFsxXSksZT0obz10aGlzLmxhdFkoaFswXSkpLWE8Yy55P2MueS8oby1hKTowfWlmKHRoaXMubG5nUmFuZ2Upe3ZhciBmPXRoaXMubG5nUmFuZ2U7cz10aGlzLmxuZ1goZlswXSkscj0obD10aGlzLmxuZ1goZlsxXSkpLXM8Yy54P2MueC8obC1zKTowfXZhciBwPU1hdGgubWF4KHJ8fDAsZXx8MCk7aWYocClyZXR1cm4gdGhpcy5jZW50ZXI9dGhpcy51bnByb2plY3QobmV3IHQuZGVmYXVsdCQxKHI/KGwrcykvMjp0aGlzLngsZT8obythKS8yOnRoaXMueSkpLHRoaXMuem9vbSs9dGhpcy5zY2FsZVpvb20ocCksdGhpcy5fdW5tb2RpZmllZD11LHZvaWQodGhpcy5fY29uc3RyYWluaW5nPSExKTtpZih0aGlzLmxhdFJhbmdlKXt2YXIgZD10aGlzLnksZz1jLnkvMjtkLWc8YSYmKGk9YStnKSxkK2c+byYmKGk9by1nKX1pZih0aGlzLmxuZ1JhbmdlKXt2YXIgdj10aGlzLngsbT1jLngvMjt2LW08cyYmKG49cyttKSx2K20+bCYmKG49bC1tKX12b2lkIDA9PT1uJiZ2b2lkIDA9PT1pfHwodGhpcy5jZW50ZXI9dGhpcy51bnByb2plY3QobmV3IHQuZGVmYXVsdCQxKHZvaWQgMCE9PW4/bjp0aGlzLngsdm9pZCAwIT09aT9pOnRoaXMueSkpKSx0aGlzLl91bm1vZGlmaWVkPXUsdGhpcy5fY29uc3RyYWluaW5nPSExfX0sQnIucHJvdG90eXBlLl9jYWxjTWF0cmljZXM9ZnVuY3Rpb24oKXtpZih0aGlzLmhlaWdodCl7dGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlPS41L01hdGgudGFuKHRoaXMuX2Zvdi8yKSp0aGlzLmhlaWdodDt2YXIgdD10aGlzLl9mb3YvMixlPU1hdGguUEkvMit0aGlzLl9waXRjaCxyPU1hdGguc2luKHQpKnRoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZS9NYXRoLnNpbihNYXRoLlBJLWUtdCksbj10aGlzLngsaT10aGlzLnksYT0xLjAxKihNYXRoLmNvcyhNYXRoLlBJLzItdGhpcy5fcGl0Y2gpKnIrdGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlKSxvPW5ldyBGbG9hdDY0QXJyYXkoMTYpO1JyLnBlcnNwZWN0aXZlKG8sdGhpcy5fZm92LHRoaXMud2lkdGgvdGhpcy5oZWlnaHQsMSxhKSxSci5zY2FsZShvLG8sWzEsLTEsMV0pLFJyLnRyYW5zbGF0ZShvLG8sWzAsMCwtdGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlXSksUnIucm90YXRlWChvLG8sdGhpcy5fcGl0Y2gpLFJyLnJvdGF0ZVoobyxvLHRoaXMuYW5nbGUpLFJyLnRyYW5zbGF0ZShvLG8sWy1uLC1pLDBdKTt2YXIgcz10aGlzLndvcmxkU2l6ZS8oMipNYXRoLlBJKjYzNzgxMzcqTWF0aC5hYnMoTWF0aC5jb3ModGhpcy5jZW50ZXIubGF0KihNYXRoLlBJLzE4MCkpKSk7UnIuc2NhbGUobyxvLFsxLDEscywxXSksdGhpcy5wcm9qTWF0cml4PW87dmFyIGw9dGhpcy53aWR0aCUyLzIsYz10aGlzLmhlaWdodCUyLzIsdT1NYXRoLmNvcyh0aGlzLmFuZ2xlKSxoPU1hdGguc2luKHRoaXMuYW5nbGUpLGY9bi1NYXRoLnJvdW5kKG4pK3UqbCtoKmMscD1pLU1hdGgucm91bmQoaSkrdSpjK2gqbCxkPW5ldyBGbG9hdDY0QXJyYXkobyk7aWYoUnIudHJhbnNsYXRlKGQsZCxbZj4uNT9mLTE6ZixwPi41P3AtMTpwLDBdKSx0aGlzLmFsaWduZWRQcm9qTWF0cml4PWQsbz1Sci5jcmVhdGUoKSxSci5zY2FsZShvLG8sW3RoaXMud2lkdGgvMiwtdGhpcy5oZWlnaHQvMiwxXSksUnIudHJhbnNsYXRlKG8sbyxbMSwtMSwwXSksdGhpcy5waXhlbE1hdHJpeD1Sci5tdWx0aXBseShuZXcgRmxvYXQ2NEFycmF5KDE2KSxvLHRoaXMucHJvak1hdHJpeCksIShvPVJyLmludmVydChuZXcgRmxvYXQ2NEFycmF5KDE2KSx0aGlzLnBpeGVsTWF0cml4KSkpdGhyb3cgbmV3IEVycm9yKFwiZmFpbGVkIHRvIGludmVydCBtYXRyaXhcIik7dGhpcy5waXhlbE1hdHJpeEludmVyc2U9byx0aGlzLl9wb3NNYXRyaXhDYWNoZT17fSx0aGlzLl9hbGlnbmVkUG9zTWF0cml4Q2FjaGU9e319fSxCci5wcm90b3R5cGUubWF4UGl0Y2hTY2FsZUZhY3Rvcj1mdW5jdGlvbigpe2lmKCF0aGlzLnBpeGVsTWF0cml4SW52ZXJzZSlyZXR1cm4gMTt2YXIgZT10aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgdC5kZWZhdWx0JDEoMCwwKSkuem9vbVRvKHRoaXMuem9vbSkscj1bZS5jb2x1bW4qdGhpcy50aWxlU2l6ZSxlLnJvdyp0aGlzLnRpbGVTaXplLDAsMV07cmV0dXJuIFByLnRyYW5zZm9ybU1hdDQocixyLHRoaXMucGl4ZWxNYXRyaXgpWzNdL3RoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQnIucHJvdG90eXBlLE5yKTt2YXIganI9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saTt0LmJpbmRBbGwoW1wiX29uSGFzaENoYW5nZVwiLFwiX3VwZGF0ZUhhc2hcIl0sdGhpcyksdGhpcy5fdXBkYXRlSGFzaD0oZT10aGlzLl91cGRhdGVIYXNoVW50aHJvdHRsZWQuYmluZCh0aGlzKSwzMDAscj0hMSxuPTAsaT1mdW5jdGlvbigpe249MCxyJiYoZSgpLG49c2V0VGltZW91dChpLDMwMCkscj0hMSl9LGZ1bmN0aW9uKCl7cmV0dXJuIHI9ITAsbnx8aSgpLG59KX07anIucHJvdG90eXBlLmFkZFRvPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXA9ZSx0LmRlZmF1bHQuYWRkRXZlbnRMaXN0ZW5lcihcImhhc2hjaGFuZ2VcIix0aGlzLl9vbkhhc2hDaGFuZ2UsITEpLHRoaXMuX21hcC5vbihcIm1vdmVlbmRcIix0aGlzLl91cGRhdGVIYXNoKSx0aGlzfSxqci5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZGVmYXVsdC5yZW1vdmVFdmVudExpc3RlbmVyKFwiaGFzaGNoYW5nZVwiLHRoaXMuX29uSGFzaENoYW5nZSwhMSksdGhpcy5fbWFwLm9mZihcIm1vdmVlbmRcIix0aGlzLl91cGRhdGVIYXNoKSxjbGVhclRpbWVvdXQodGhpcy5fdXBkYXRlSGFzaCgpKSxkZWxldGUgdGhpcy5fbWFwLHRoaXN9LGpyLnByb3RvdHlwZS5nZXRIYXNoU3RyaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcC5nZXRDZW50ZXIoKSxyPU1hdGgucm91bmQoMTAwKnRoaXMuX21hcC5nZXRab29tKCkpLzEwMCxuPU1hdGguY2VpbCgocipNYXRoLkxOMitNYXRoLmxvZyg1MTIvMzYwLy41KSkvTWF0aC5MTjEwKSxpPU1hdGgucG93KDEwLG4pLGE9TWF0aC5yb3VuZChlLmxuZyppKS9pLG89TWF0aC5yb3VuZChlLmxhdCppKS9pLHM9dGhpcy5fbWFwLmdldEJlYXJpbmcoKSxsPXRoaXMuX21hcC5nZXRQaXRjaCgpLGM9XCJcIjtyZXR1cm4gYys9dD9cIiMvXCIrYStcIi9cIitvK1wiL1wiK3I6XCIjXCIrcitcIi9cIitvK1wiL1wiK2EsKHN8fGwpJiYoYys9XCIvXCIrTWF0aC5yb3VuZCgxMCpzKS8xMCksbCYmKGMrPVwiL1wiK01hdGgucm91bmQobCkpLGN9LGpyLnByb3RvdHlwZS5fb25IYXNoQ2hhbmdlPWZ1bmN0aW9uKCl7dmFyIGU9dC5kZWZhdWx0LmxvY2F0aW9uLmhhc2gucmVwbGFjZShcIiNcIixcIlwiKS5zcGxpdChcIi9cIik7cmV0dXJuIGUubGVuZ3RoPj0zJiYodGhpcy5fbWFwLmp1bXBUbyh7Y2VudGVyOlsrZVsyXSwrZVsxXV0sem9vbTorZVswXSxiZWFyaW5nOisoZVszXXx8MCkscGl0Y2g6KyhlWzRdfHwwKX0pLCEwKX0sanIucHJvdG90eXBlLl91cGRhdGVIYXNoVW50aHJvdHRsZWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldEhhc2hTdHJpbmcoKTt0LmRlZmF1bHQuaGlzdG9yeS5yZXBsYWNlU3RhdGUodC5kZWZhdWx0Lmhpc3Rvcnkuc3RhdGUsXCJcIixlKX07dmFyIFZyPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGksYSl7dm9pZCAwPT09YSYmKGE9e30pO3ZhciBvPXMubW91c2VQb3Mobi5nZXRDYW52YXNDb250YWluZXIoKSxpKSxsPW4udW5wcm9qZWN0KG8pO2UuY2FsbCh0aGlzLHIsdC5leHRlbmQoe3BvaW50Om8sbG5nTGF0Omwsb3JpZ2luYWxFdmVudDppfSxhKSksdGhpcy5fZGVmYXVsdFByZXZlbnRlZD0hMSx0aGlzLnRhcmdldD1ufWUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yO3ZhciBuPXtkZWZhdWx0UHJldmVudGVkOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5wcm90b3R5cGUucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oKXt0aGlzLl9kZWZhdWx0UHJldmVudGVkPSEwfSxuLmRlZmF1bHRQcmV2ZW50ZWQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHIucHJvdG90eXBlLG4pLHJ9KHQuRXZlbnQpLFVyPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGkpe3ZhciBhPXMudG91Y2hQb3Mobi5nZXRDYW52YXNDb250YWluZXIoKSxpKSxvPWEubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBuLnVucHJvamVjdCh0KX0pLGw9YS5yZWR1Y2UoZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHQuYWRkKGUuZGl2KG4ubGVuZ3RoKSl9LG5ldyB0LmRlZmF1bHQkMSgwLDApKSxjPW4udW5wcm9qZWN0KGwpO2UuY2FsbCh0aGlzLHIse3BvaW50czphLHBvaW50OmwsbG5nTGF0czpvLGxuZ0xhdDpjLG9yaWdpbmFsRXZlbnQ6aX0pLHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITF9ZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXI7dmFyIG49e2RlZmF1bHRQcmV2ZW50ZWQ6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiByLnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITB9LG4uZGVmYXVsdFByZXZlbnRlZC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdFByZXZlbnRlZH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoci5wcm90b3R5cGUsbikscn0odC5FdmVudCkscXI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIsbil7dC5jYWxsKHRoaXMsZSx7b3JpZ2luYWxFdmVudDpufSksdGhpcy5fZGVmYXVsdFByZXZlbnRlZD0hMX10JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZTt2YXIgcj17ZGVmYXVsdFByZXZlbnRlZDp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIGUucHJvdG90eXBlLnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKCl7dGhpcy5fZGVmYXVsdFByZXZlbnRlZD0hMH0sci5kZWZhdWx0UHJldmVudGVkLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0UHJldmVudGVkfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfSh0LkV2ZW50KSxIcj1mdW5jdGlvbihlKXt0aGlzLl9tYXA9ZSx0aGlzLl9lbD1lLmdldENhbnZhc0NvbnRhaW5lcigpLHRoaXMuX2RlbHRhPTAsdC5iaW5kQWxsKFtcIl9vbldoZWVsXCIsXCJfb25UaW1lb3V0XCIsXCJfb25TY3JvbGxGcmFtZVwiLFwiX29uU2Nyb2xsRmluaXNoZWRcIl0sdGhpcyl9O0hyLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2VuYWJsZWR9LEhyLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fYWN0aXZlfSxIci5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKHQpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9lbmFibGVkPSEwLHRoaXMuX2Fyb3VuZENlbnRlcj10JiZcImNlbnRlclwiPT09dC5hcm91bmQpfSxIci5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCkmJih0aGlzLl9lbmFibGVkPSExKX0sSHIucHJvdG90eXBlLm9uV2hlZWw9ZnVuY3Rpb24oZSl7aWYodGhpcy5pc0VuYWJsZWQoKSl7dmFyIHI9ZS5kZWx0YU1vZGU9PT10LmRlZmF1bHQuV2hlZWxFdmVudC5ET01fREVMVEFfTElORT80MCplLmRlbHRhWTplLmRlbHRhWSxuPWEubm93KCksaT1uLSh0aGlzLl9sYXN0V2hlZWxFdmVudFRpbWV8fDApO3RoaXMuX2xhc3RXaGVlbEV2ZW50VGltZT1uLDAhPT1yJiZyJTQuMDAwMjQ0MTQwNjI1PT0wP3RoaXMuX3R5cGU9XCJ3aGVlbFwiOjAhPT1yJiZNYXRoLmFicyhyKTw0P3RoaXMuX3R5cGU9XCJ0cmFja3BhZFwiOmk+NDAwPyh0aGlzLl90eXBlPW51bGwsdGhpcy5fbGFzdFZhbHVlPXIsdGhpcy5fdGltZW91dD1zZXRUaW1lb3V0KHRoaXMuX29uVGltZW91dCw0MCxlKSk6dGhpcy5fdHlwZXx8KHRoaXMuX3R5cGU9TWF0aC5hYnMoaSpyKTwyMDA/XCJ0cmFja3BhZFwiOlwid2hlZWxcIix0aGlzLl90aW1lb3V0JiYoY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpLHRoaXMuX3RpbWVvdXQ9bnVsbCxyKz10aGlzLl9sYXN0VmFsdWUpKSxlLnNoaWZ0S2V5JiZyJiYoci89NCksdGhpcy5fdHlwZSYmKHRoaXMuX2xhc3RXaGVlbEV2ZW50PWUsdGhpcy5fZGVsdGEtPXIsdGhpcy5pc0FjdGl2ZSgpfHx0aGlzLl9zdGFydChlKSksZS5wcmV2ZW50RGVmYXVsdCgpfX0sSHIucHJvdG90eXBlLl9vblRpbWVvdXQ9ZnVuY3Rpb24odCl7dGhpcy5fdHlwZT1cIndoZWVsXCIsdGhpcy5fZGVsdGEtPXRoaXMuX2xhc3RWYWx1ZSx0aGlzLmlzQWN0aXZlKCl8fHRoaXMuX3N0YXJ0KHQpfSxIci5wcm90b3R5cGUuX3N0YXJ0PWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2RlbHRhKXt0aGlzLl9mcmFtZUlkJiYodGhpcy5fbWFwLl9jYW5jZWxSZW5kZXJGcmFtZSh0aGlzLl9mcmFtZUlkKSx0aGlzLl9mcmFtZUlkPW51bGwpLHRoaXMuX2FjdGl2ZT0hMCx0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudChcIm1vdmVzdGFydFwiLHtvcmlnaW5hbEV2ZW50OmV9KSksdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoXCJ6b29tc3RhcnRcIix7b3JpZ2luYWxFdmVudDplfSkpLHRoaXMuX2ZpbmlzaFRpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLl9maW5pc2hUaW1lb3V0KTt2YXIgcj1zLm1vdXNlUG9zKHRoaXMuX2VsLGUpO3RoaXMuX2Fyb3VuZD1HLmNvbnZlcnQodGhpcy5fYXJvdW5kQ2VudGVyP3RoaXMuX21hcC5nZXRDZW50ZXIoKTp0aGlzLl9tYXAudW5wcm9qZWN0KHIpKSx0aGlzLl9hcm91bmRQb2ludD10aGlzLl9tYXAudHJhbnNmb3JtLmxvY2F0aW9uUG9pbnQodGhpcy5fYXJvdW5kKSx0aGlzLl9mcmFtZUlkfHwodGhpcy5fZnJhbWVJZD10aGlzLl9tYXAuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9vblNjcm9sbEZyYW1lKSl9fSxIci5wcm90b3R5cGUuX29uU2Nyb2xsRnJhbWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKHRoaXMuX2ZyYW1lSWQ9bnVsbCx0aGlzLmlzQWN0aXZlKCkpe3ZhciByPXRoaXMuX21hcC50cmFuc2Zvcm07aWYoMCE9PXRoaXMuX2RlbHRhKXt2YXIgbj1cIndoZWVsXCI9PT10aGlzLl90eXBlJiZNYXRoLmFicyh0aGlzLl9kZWx0YSk+NC4wMDAyNDQxNDA2MjU/MS80NTA6LjAxLGk9Mi8oMStNYXRoLmV4cCgtTWF0aC5hYnModGhpcy5fZGVsdGEqbikpKTt0aGlzLl9kZWx0YTwwJiYwIT09aSYmKGk9MS9pKTt2YXIgbz1cIm51bWJlclwiPT10eXBlb2YgdGhpcy5fdGFyZ2V0Wm9vbT9yLnpvb21TY2FsZSh0aGlzLl90YXJnZXRab29tKTpyLnNjYWxlO3RoaXMuX3RhcmdldFpvb209TWF0aC5taW4oci5tYXhab29tLE1hdGgubWF4KHIubWluWm9vbSxyLnNjYWxlWm9vbShvKmkpKSksXCJ3aGVlbFwiPT09dGhpcy5fdHlwZSYmKHRoaXMuX3N0YXJ0Wm9vbT1yLnpvb20sdGhpcy5fZWFzaW5nPXRoaXMuX3Ntb290aE91dEVhc2luZygyMDApKSx0aGlzLl9kZWx0YT0wfXZhciBzPSExO2lmKFwid2hlZWxcIj09PXRoaXMuX3R5cGUpe3ZhciBsPU1hdGgubWluKChhLm5vdygpLXRoaXMuX2xhc3RXaGVlbEV2ZW50VGltZSkvMjAwLDEpLGM9dGhpcy5fZWFzaW5nKGwpO3Iuem9vbT10Lm51bWJlcih0aGlzLl9zdGFydFpvb20sdGhpcy5fdGFyZ2V0Wm9vbSxjKSxsPDE/dGhpcy5fZnJhbWVJZHx8KHRoaXMuX2ZyYW1lSWQ9dGhpcy5fbWFwLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fb25TY3JvbGxGcmFtZSkpOnM9ITB9ZWxzZSByLnpvb209dGhpcy5fdGFyZ2V0Wm9vbSxzPSEwO3Iuc2V0TG9jYXRpb25BdFBvaW50KHRoaXMuX2Fyb3VuZCx0aGlzLl9hcm91bmRQb2ludCksdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoXCJtb3ZlXCIse29yaWdpbmFsRXZlbnQ6dGhpcy5fbGFzdFdoZWVsRXZlbnR9KSksdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoXCJ6b29tXCIse29yaWdpbmFsRXZlbnQ6dGhpcy5fbGFzdFdoZWVsRXZlbnR9KSkscyYmKHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9maW5pc2hUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLl9tYXAuZmlyZShuZXcgdC5FdmVudChcInpvb21lbmRcIix7b3JpZ2luYWxFdmVudDplLl9sYXN0V2hlZWxFdmVudH0pKSxlLl9tYXAuZmlyZShuZXcgdC5FdmVudChcIm1vdmVlbmRcIix7b3JpZ2luYWxFdmVudDplLl9sYXN0V2hlZWxFdmVudH0pKSxkZWxldGUgZS5fdGFyZ2V0Wm9vbX0sMjAwKSl9fSxIci5wcm90b3R5cGUuX3Ntb290aE91dEVhc2luZz1mdW5jdGlvbihlKXt2YXIgcj10LmVhc2U7aWYodGhpcy5fcHJldkVhc2Upe3ZhciBuPXRoaXMuX3ByZXZFYXNlLGk9KGEubm93KCktbi5zdGFydCkvbi5kdXJhdGlvbixvPW4uZWFzaW5nKGkrLjAxKS1uLmVhc2luZyhpKSxzPS4yNy9NYXRoLnNxcnQobypvKzFlLTQpKi4wMSxsPU1hdGguc3FydCguMDcyOS1zKnMpO3I9dC5iZXppZXIocyxsLC4yNSwxKX1yZXR1cm4gdGhpcy5fcHJldkVhc2U9e3N0YXJ0OmEubm93KCksZHVyYXRpb246ZSxlYXNpbmc6cn0scn07dmFyIEdyPWZ1bmN0aW9uKGUpe3RoaXMuX21hcD1lLHRoaXMuX2VsPWUuZ2V0Q2FudmFzQ29udGFpbmVyKCksdGhpcy5fY29udGFpbmVyPWUuZ2V0Q29udGFpbmVyKCksdC5iaW5kQWxsKFtcIl9vbk1vdXNlTW92ZVwiLFwiX29uTW91c2VVcFwiLFwiX29uS2V5RG93blwiXSx0aGlzKX07R3IucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZW5hYmxlZH0sR3IucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9hY3RpdmV9LEdyLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fZW5hYmxlZD0hMCl9LEdyLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VuYWJsZWQ9ITEpfSxHci5wcm90b3R5cGUub25Nb3VzZURvd249ZnVuY3Rpb24oZSl7dGhpcy5pc0VuYWJsZWQoKSYmZS5zaGlmdEtleSYmMD09PWUuYnV0dG9uJiYodC5kZWZhdWx0LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIix0aGlzLl9vbk1vdXNlTW92ZSwhMSksdC5kZWZhdWx0LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsdGhpcy5fb25LZXlEb3duLCExKSx0LmRlZmF1bHQuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIix0aGlzLl9vbk1vdXNlVXAsITEpLHMuZGlzYWJsZURyYWcoKSx0aGlzLl9zdGFydFBvcz1zLm1vdXNlUG9zKHRoaXMuX2VsLGUpLHRoaXMuX2FjdGl2ZT0hMCl9LEdyLnByb3RvdHlwZS5fb25Nb3VzZU1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc3RhcnRQb3Mscj1zLm1vdXNlUG9zKHRoaXMuX2VsLHQpO3RoaXMuX2JveHx8KHRoaXMuX2JveD1zLmNyZWF0ZShcImRpdlwiLFwibWFwYm94Z2wtYm94em9vbVwiLHRoaXMuX2NvbnRhaW5lciksdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jcm9zc2hhaXJcIiksdGhpcy5fZmlyZUV2ZW50KFwiYm94em9vbXN0YXJ0XCIsdCkpO3ZhciBuPU1hdGgubWluKGUueCxyLngpLGk9TWF0aC5tYXgoZS54LHIueCksYT1NYXRoLm1pbihlLnksci55KSxvPU1hdGgubWF4KGUueSxyLnkpO3Muc2V0VHJhbnNmb3JtKHRoaXMuX2JveCxcInRyYW5zbGF0ZShcIituK1wicHgsXCIrYStcInB4KVwiKSx0aGlzLl9ib3guc3R5bGUud2lkdGg9aS1uK1wicHhcIix0aGlzLl9ib3guc3R5bGUuaGVpZ2h0PW8tYStcInB4XCJ9LEdyLnByb3RvdHlwZS5fb25Nb3VzZVVwPWZ1bmN0aW9uKGUpe2lmKDA9PT1lLmJ1dHRvbil7dmFyIHI9dGhpcy5fc3RhcnRQb3Msbj1zLm1vdXNlUG9zKHRoaXMuX2VsLGUpLGk9KG5ldyBZKS5leHRlbmQodGhpcy5fbWFwLnVucHJvamVjdChyKSkuZXh0ZW5kKHRoaXMuX21hcC51bnByb2plY3QobikpO3RoaXMuX2ZpbmlzaCgpLHMuc3VwcHJlc3NDbGljaygpLHIueD09PW4ueCYmci55PT09bi55P3RoaXMuX2ZpcmVFdmVudChcImJveHpvb21jYW5jZWxcIixlKTp0aGlzLl9tYXAuZml0Qm91bmRzKGkse2xpbmVhcjohMH0pLmZpcmUobmV3IHQuRXZlbnQoXCJib3h6b29tZW5kXCIse29yaWdpbmFsRXZlbnQ6ZSxib3hab29tQm91bmRzOml9KSl9fSxHci5wcm90b3R5cGUuX29uS2V5RG93bj1mdW5jdGlvbih0KXsyNz09PXQua2V5Q29kZSYmKHRoaXMuX2ZpbmlzaCgpLHRoaXMuX2ZpcmVFdmVudChcImJveHpvb21jYW5jZWxcIix0KSl9LEdyLnByb3RvdHlwZS5fZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlPSExLHQuZGVmYXVsdC5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsdGhpcy5fb25Nb3VzZU1vdmUsITEpLHQuZGVmYXVsdC5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLHRoaXMuX29uS2V5RG93biwhMSksdC5kZWZhdWx0LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsdGhpcy5fb25Nb3VzZVVwLCExKSx0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWNyb3NzaGFpclwiKSx0aGlzLl9ib3gmJihzLnJlbW92ZSh0aGlzLl9ib3gpLHRoaXMuX2JveD1udWxsKSxzLmVuYWJsZURyYWcoKX0sR3IucHJvdG90eXBlLl9maXJlRXZlbnQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoZSx7b3JpZ2luYWxFdmVudDpyfSkpfTt2YXIgWXI9dC5iZXppZXIoMCwwLC4yNSwxKSxXcj1mdW5jdGlvbihlLHIpe3RoaXMuX21hcD1lLHRoaXMuX2VsPXIuZWxlbWVudHx8ZS5nZXRDYW52YXNDb250YWluZXIoKSx0aGlzLl9zdGF0ZT1cImRpc2FibGVkXCIsdGhpcy5fYnV0dG9uPXIuYnV0dG9ufHxcInJpZ2h0XCIsdGhpcy5fYmVhcmluZ1NuYXA9ci5iZWFyaW5nU25hcHx8MCx0aGlzLl9waXRjaFdpdGhSb3RhdGU9ITEhPT1yLnBpdGNoV2l0aFJvdGF0ZSx0LmJpbmRBbGwoW1wiX29uTW91c2VNb3ZlXCIsXCJfb25Nb3VzZVVwXCIsXCJfb25CbHVyXCIsXCJfb25EcmFnRnJhbWVcIl0sdGhpcyl9O1dyLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm5cImRpc2FibGVkXCIhPT10aGlzLl9zdGF0ZX0sV3IucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuXCJhY3RpdmVcIj09PXRoaXMuX3N0YXRlfSxXci5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKXx8KHRoaXMuX3N0YXRlPVwiZW5hYmxlZFwiKX0sV3IucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXtpZih0aGlzLmlzRW5hYmxlZCgpKXN3aXRjaCh0aGlzLl9zdGF0ZSl7Y2FzZVwiYWN0aXZlXCI6dGhpcy5fc3RhdGU9XCJkaXNhYmxlZFwiLHRoaXMuX3VuYmluZCgpLHRoaXMuX2RlYWN0aXZhdGUoKSx0aGlzLl9maXJlRXZlbnQoXCJyb3RhdGVlbmRcIiksdGhpcy5fcGl0Y2hXaXRoUm90YXRlJiZ0aGlzLl9maXJlRXZlbnQoXCJwaXRjaGVuZFwiKSx0aGlzLl9maXJlRXZlbnQoXCJtb3ZlZW5kXCIpO2JyZWFrO2Nhc2VcInBlbmRpbmdcIjp0aGlzLl9zdGF0ZT1cImRpc2FibGVkXCIsdGhpcy5fdW5iaW5kKCk7YnJlYWs7ZGVmYXVsdDp0aGlzLl9zdGF0ZT1cImRpc2FibGVkXCJ9fSxXci5wcm90b3R5cGUub25Nb3VzZURvd249ZnVuY3Rpb24oZSl7aWYoXCJlbmFibGVkXCI9PT10aGlzLl9zdGF0ZSl7aWYoXCJyaWdodFwiPT09dGhpcy5fYnV0dG9uKXtpZih0aGlzLl9ldmVudEJ1dHRvbj1zLm1vdXNlQnV0dG9uKGUpLHRoaXMuX2V2ZW50QnV0dG9uIT09KGUuY3RybEtleT8wOjIpKXJldHVybn1lbHNle2lmKGUuY3RybEtleXx8MCE9PXMubW91c2VCdXR0b24oZSkpcmV0dXJuO3RoaXMuX2V2ZW50QnV0dG9uPTB9cy5kaXNhYmxlRHJhZygpLHQuZGVmYXVsdC5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsdGhpcy5fb25Nb3VzZU1vdmUse2NhcHR1cmU6ITB9KSx0LmRlZmF1bHQuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIix0aGlzLl9vbk1vdXNlVXApLHQuZGVmYXVsdC5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLHRoaXMuX29uQmx1ciksdGhpcy5fc3RhdGU9XCJwZW5kaW5nXCIsdGhpcy5faW5lcnRpYT1bW2Eubm93KCksdGhpcy5fbWFwLmdldEJlYXJpbmcoKV1dLHRoaXMuX3ByZXZpb3VzUG9zPXMubW91c2VQb3ModGhpcy5fZWwsZSksdGhpcy5fY2VudGVyPXRoaXMuX21hcC50cmFuc2Zvcm0uY2VudGVyUG9pbnQsZS5wcmV2ZW50RGVmYXVsdCgpfX0sV3IucHJvdG90eXBlLl9vbk1vdXNlTW92ZT1mdW5jdGlvbih0KXt0aGlzLl9sYXN0TW92ZUV2ZW50PXQsdGhpcy5fcG9zPXMubW91c2VQb3ModGhpcy5fZWwsdCksXCJwZW5kaW5nXCI9PT10aGlzLl9zdGF0ZSYmKHRoaXMuX3N0YXRlPVwiYWN0aXZlXCIsdGhpcy5fZmlyZUV2ZW50KFwicm90YXRlc3RhcnRcIix0KSx0aGlzLl9maXJlRXZlbnQoXCJtb3Zlc3RhcnRcIix0KSx0aGlzLl9waXRjaFdpdGhSb3RhdGUmJnRoaXMuX2ZpcmVFdmVudChcInBpdGNoc3RhcnRcIix0KSksdGhpcy5fZnJhbWVJZHx8KHRoaXMuX2ZyYW1lSWQ9dGhpcy5fbWFwLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fb25EcmFnRnJhbWUpKX0sV3IucHJvdG90eXBlLl9vbkRyYWdGcmFtZT1mdW5jdGlvbigpe3RoaXMuX2ZyYW1lSWQ9bnVsbDt2YXIgdD10aGlzLl9sYXN0TW92ZUV2ZW50O2lmKHQpe3ZhciBlPXRoaXMuX21hcC50cmFuc2Zvcm0scj10aGlzLl9wcmV2aW91c1BvcyxuPXRoaXMuX3BvcyxpPS44KihyLngtbi54KSxvPS0uNSooci55LW4ueSkscz1lLmJlYXJpbmctaSxsPWUucGl0Y2gtbyxjPXRoaXMuX2luZXJ0aWEsdT1jW2MubGVuZ3RoLTFdO3RoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpLGMucHVzaChbYS5ub3coKSx0aGlzLl9tYXAuX25vcm1hbGl6ZUJlYXJpbmcocyx1WzFdKV0pLGUuYmVhcmluZz1zLHRoaXMuX3BpdGNoV2l0aFJvdGF0ZSYmKHRoaXMuX2ZpcmVFdmVudChcInBpdGNoXCIsdCksZS5waXRjaD1sKSx0aGlzLl9maXJlRXZlbnQoXCJyb3RhdGVcIix0KSx0aGlzLl9maXJlRXZlbnQoXCJtb3ZlXCIsdCksZGVsZXRlIHRoaXMuX2xhc3RNb3ZlRXZlbnQsdGhpcy5fcHJldmlvdXNQb3M9dGhpcy5fcG9zfX0sV3IucHJvdG90eXBlLl9vbk1vdXNlVXA9ZnVuY3Rpb24odCl7aWYocy5tb3VzZUJ1dHRvbih0KT09PXRoaXMuX2V2ZW50QnV0dG9uKXN3aXRjaCh0aGlzLl9zdGF0ZSl7Y2FzZVwiYWN0aXZlXCI6dGhpcy5fc3RhdGU9XCJlbmFibGVkXCIscy5zdXBwcmVzc0NsaWNrKCksdGhpcy5fdW5iaW5kKCksdGhpcy5fZGVhY3RpdmF0ZSgpLHRoaXMuX2luZXJ0aWFsUm90YXRlKHQpO2JyZWFrO2Nhc2VcInBlbmRpbmdcIjp0aGlzLl9zdGF0ZT1cImVuYWJsZWRcIix0aGlzLl91bmJpbmQoKX19LFdyLnByb3RvdHlwZS5fb25CbHVyPWZ1bmN0aW9uKHQpe3N3aXRjaCh0aGlzLl9zdGF0ZSl7Y2FzZVwiYWN0aXZlXCI6dGhpcy5fc3RhdGU9XCJlbmFibGVkXCIsdGhpcy5fdW5iaW5kKCksdGhpcy5fZGVhY3RpdmF0ZSgpLHRoaXMuX2ZpcmVFdmVudChcInJvdGF0ZWVuZFwiLHQpLHRoaXMuX3BpdGNoV2l0aFJvdGF0ZSYmdGhpcy5fZmlyZUV2ZW50KFwicGl0Y2hlbmRcIix0KSx0aGlzLl9maXJlRXZlbnQoXCJtb3ZlZW5kXCIsdCk7YnJlYWs7Y2FzZVwicGVuZGluZ1wiOnRoaXMuX3N0YXRlPVwiZW5hYmxlZFwiLHRoaXMuX3VuYmluZCgpfX0sV3IucHJvdG90eXBlLl91bmJpbmQ9ZnVuY3Rpb24oKXt0LmRlZmF1bHQuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHRoaXMuX29uTW91c2VNb3ZlLHtjYXB0dXJlOiEwfSksdC5kZWZhdWx0LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsdGhpcy5fb25Nb3VzZVVwKSx0LmRlZmF1bHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJsdXJcIix0aGlzLl9vbkJsdXIpLHMuZW5hYmxlRHJhZygpfSxXci5wcm90b3R5cGUuX2RlYWN0aXZhdGU9ZnVuY3Rpb24oKXt0aGlzLl9mcmFtZUlkJiYodGhpcy5fbWFwLl9jYW5jZWxSZW5kZXJGcmFtZSh0aGlzLl9mcmFtZUlkKSx0aGlzLl9mcmFtZUlkPW51bGwpLGRlbGV0ZSB0aGlzLl9sYXN0TW92ZUV2ZW50LGRlbGV0ZSB0aGlzLl9wcmV2aW91c1Bvc30sV3IucHJvdG90eXBlLl9pbmVydGlhbFJvdGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2ZpcmVFdmVudChcInJvdGF0ZWVuZFwiLHQpLHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpO3ZhciByPXRoaXMuX21hcCxuPXIuZ2V0QmVhcmluZygpLGk9dGhpcy5faW5lcnRpYSxhPWZ1bmN0aW9uKCl7TWF0aC5hYnMobik8ZS5fYmVhcmluZ1NuYXA/ci5yZXNldE5vcnRoKHtub01vdmVTdGFydDohMH0se29yaWdpbmFsRXZlbnQ6dH0pOmUuX2ZpcmVFdmVudChcIm1vdmVlbmRcIix0KSxlLl9waXRjaFdpdGhSb3RhdGUmJmUuX2ZpcmVFdmVudChcInBpdGNoZW5kXCIsdCl9O2lmKGkubGVuZ3RoPDIpYSgpO2Vsc2V7dmFyIG89aVswXSxzPWlbaS5sZW5ndGgtMV0sbD1pW2kubGVuZ3RoLTJdLGM9ci5fbm9ybWFsaXplQmVhcmluZyhuLGxbMV0pLHU9c1sxXS1vWzFdLGg9dTwwPy0xOjEsZj0oc1swXS1vWzBdKS8xZTM7aWYoMCE9PXUmJjAhPT1mKXt2YXIgcD1NYXRoLmFicyh1KiguMjUvZikpO3A+MTgwJiYocD0xODApO3ZhciBkPXAvMTgwO2MrPWgqcCooZC8yKSxNYXRoLmFicyhyLl9ub3JtYWxpemVCZWFyaW5nKGMsMCkpPHRoaXMuX2JlYXJpbmdTbmFwJiYoYz1yLl9ub3JtYWxpemVCZWFyaW5nKDAsYykpLHIucm90YXRlVG8oYyx7ZHVyYXRpb246MWUzKmQsZWFzaW5nOllyLG5vTW92ZVN0YXJ0OiEwfSx7b3JpZ2luYWxFdmVudDp0fSl9ZWxzZSBhKCl9fSxXci5wcm90b3R5cGUuX2ZpcmVFdmVudD1mdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudChlLHI/e29yaWdpbmFsRXZlbnQ6cn06e30pKX0sV3IucHJvdG90eXBlLl9kcmFpbkluZXJ0aWFCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5faW5lcnRpYSxlPWEubm93KCk7dC5sZW5ndGg+MCYmZS10WzBdWzBdPjE2MDspdC5zaGlmdCgpfTt2YXIgWHI9dC5iZXppZXIoMCwwLC4zLDEpLFpyPWZ1bmN0aW9uKGUpe3RoaXMuX21hcD1lLHRoaXMuX2VsPWUuZ2V0Q2FudmFzQ29udGFpbmVyKCksdGhpcy5fc3RhdGU9XCJkaXNhYmxlZFwiLHQuYmluZEFsbChbXCJfb25Nb3ZlXCIsXCJfb25Nb3VzZVVwXCIsXCJfb25Ub3VjaEVuZFwiLFwiX29uQmx1clwiLFwiX29uRHJhZ0ZyYW1lXCJdLHRoaXMpfTtaci5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuXCJkaXNhYmxlZFwiIT09dGhpcy5fc3RhdGV9LFpyLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVyblwiYWN0aXZlXCI9PT10aGlzLl9zdGF0ZX0sWnIucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9lbC5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtdG91Y2gtZHJhZy1wYW5cIiksdGhpcy5fc3RhdGU9XCJlbmFibGVkXCIpfSxaci5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe2lmKHRoaXMuaXNFbmFibGVkKCkpc3dpdGNoKHRoaXMuX2VsLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC10b3VjaC1kcmFnLXBhblwiKSx0aGlzLl9zdGF0ZSl7Y2FzZVwiYWN0aXZlXCI6dGhpcy5fc3RhdGU9XCJkaXNhYmxlZFwiLHRoaXMuX3VuYmluZCgpLHRoaXMuX2RlYWN0aXZhdGUoKSx0aGlzLl9maXJlRXZlbnQoXCJkcmFnZW5kXCIpLHRoaXMuX2ZpcmVFdmVudChcIm1vdmVlbmRcIik7YnJlYWs7Y2FzZVwicGVuZGluZ1wiOnRoaXMuX3N0YXRlPVwiZGlzYWJsZWRcIix0aGlzLl91bmJpbmQoKTticmVhaztkZWZhdWx0OnRoaXMuX3N0YXRlPVwiZGlzYWJsZWRcIn19LFpyLnByb3RvdHlwZS5vbk1vdXNlRG93bj1mdW5jdGlvbihlKXtcImVuYWJsZWRcIj09PXRoaXMuX3N0YXRlJiYoZS5jdHJsS2V5fHwwIT09cy5tb3VzZUJ1dHRvbihlKXx8KHMuYWRkRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsXCJtb3VzZW1vdmVcIix0aGlzLl9vbk1vdmUse2NhcHR1cmU6ITB9KSxzLmFkZEV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LmRvY3VtZW50LFwibW91c2V1cFwiLHRoaXMuX29uTW91c2VVcCksdGhpcy5fc3RhcnQoZSkpKX0sWnIucHJvdG90eXBlLm9uVG91Y2hTdGFydD1mdW5jdGlvbihlKXtcImVuYWJsZWRcIj09PXRoaXMuX3N0YXRlJiYoZS50b3VjaGVzLmxlbmd0aD4xfHwocy5hZGRFdmVudExpc3RlbmVyKHQuZGVmYXVsdC5kb2N1bWVudCxcInRvdWNobW92ZVwiLHRoaXMuX29uTW92ZSx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSkscy5hZGRFdmVudExpc3RlbmVyKHQuZGVmYXVsdC5kb2N1bWVudCxcInRvdWNoZW5kXCIsdGhpcy5fb25Ub3VjaEVuZCksdGhpcy5fc3RhcnQoZSkpKX0sWnIucHJvdG90eXBlLl9zdGFydD1mdW5jdGlvbihlKXt0LmRlZmF1bHQuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIix0aGlzLl9vbkJsdXIpLHRoaXMuX3N0YXRlPVwicGVuZGluZ1wiLHRoaXMuX3ByZXZpb3VzUG9zPXMubW91c2VQb3ModGhpcy5fZWwsZSksdGhpcy5faW5lcnRpYT1bW2Eubm93KCksdGhpcy5fcHJldmlvdXNQb3NdXX0sWnIucHJvdG90eXBlLl9vbk1vdmU9ZnVuY3Rpb24odCl7dGhpcy5fbGFzdE1vdmVFdmVudD10LHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9wb3M9cy5tb3VzZVBvcyh0aGlzLl9lbCx0KSx0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKSx0aGlzLl9pbmVydGlhLnB1c2goW2Eubm93KCksdGhpcy5fcG9zXSksXCJwZW5kaW5nXCI9PT10aGlzLl9zdGF0ZSYmKHRoaXMuX3N0YXRlPVwiYWN0aXZlXCIsdGhpcy5fZmlyZUV2ZW50KFwiZHJhZ3N0YXJ0XCIsdCksdGhpcy5fZmlyZUV2ZW50KFwibW92ZXN0YXJ0XCIsdCkpLHRoaXMuX2ZyYW1lSWR8fCh0aGlzLl9mcmFtZUlkPXRoaXMuX21hcC5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX29uRHJhZ0ZyYW1lKSl9LFpyLnByb3RvdHlwZS5fb25EcmFnRnJhbWU9ZnVuY3Rpb24oKXt0aGlzLl9mcmFtZUlkPW51bGw7dmFyIHQ9dGhpcy5fbGFzdE1vdmVFdmVudDtpZih0KXt2YXIgZT10aGlzLl9tYXAudHJhbnNmb3JtO2Uuc2V0TG9jYXRpb25BdFBvaW50KGUucG9pbnRMb2NhdGlvbih0aGlzLl9wcmV2aW91c1BvcyksdGhpcy5fcG9zKSx0aGlzLl9maXJlRXZlbnQoXCJkcmFnXCIsdCksdGhpcy5fZmlyZUV2ZW50KFwibW92ZVwiLHQpLHRoaXMuX3ByZXZpb3VzUG9zPXRoaXMuX3BvcyxkZWxldGUgdGhpcy5fbGFzdE1vdmVFdmVudH19LFpyLnByb3RvdHlwZS5fb25Nb3VzZVVwPWZ1bmN0aW9uKHQpe2lmKDA9PT1zLm1vdXNlQnV0dG9uKHQpKXN3aXRjaCh0aGlzLl9zdGF0ZSl7Y2FzZVwiYWN0aXZlXCI6dGhpcy5fc3RhdGU9XCJlbmFibGVkXCIscy5zdXBwcmVzc0NsaWNrKCksdGhpcy5fdW5iaW5kKCksdGhpcy5fZGVhY3RpdmF0ZSgpLHRoaXMuX2luZXJ0aWFsUGFuKHQpO2JyZWFrO2Nhc2VcInBlbmRpbmdcIjp0aGlzLl9zdGF0ZT1cImVuYWJsZWRcIix0aGlzLl91bmJpbmQoKX19LFpyLnByb3RvdHlwZS5fb25Ub3VjaEVuZD1mdW5jdGlvbih0KXtzd2l0Y2godGhpcy5fc3RhdGUpe2Nhc2VcImFjdGl2ZVwiOnRoaXMuX3N0YXRlPVwiZW5hYmxlZFwiLHRoaXMuX3VuYmluZCgpLHRoaXMuX2RlYWN0aXZhdGUoKSx0aGlzLl9pbmVydGlhbFBhbih0KTticmVhaztjYXNlXCJwZW5kaW5nXCI6dGhpcy5fc3RhdGU9XCJlbmFibGVkXCIsdGhpcy5fdW5iaW5kKCl9fSxaci5wcm90b3R5cGUuX29uQmx1cj1mdW5jdGlvbih0KXtzd2l0Y2godGhpcy5fc3RhdGUpe2Nhc2VcImFjdGl2ZVwiOnRoaXMuX3N0YXRlPVwiZW5hYmxlZFwiLHRoaXMuX3VuYmluZCgpLHRoaXMuX2RlYWN0aXZhdGUoKSx0aGlzLl9maXJlRXZlbnQoXCJkcmFnZW5kXCIsdCksdGhpcy5fZmlyZUV2ZW50KFwibW92ZWVuZFwiLHQpO2JyZWFrO2Nhc2VcInBlbmRpbmdcIjp0aGlzLl9zdGF0ZT1cImVuYWJsZWRcIix0aGlzLl91bmJpbmQoKX19LFpyLnByb3RvdHlwZS5fdW5iaW5kPWZ1bmN0aW9uKCl7cy5yZW1vdmVFdmVudExpc3RlbmVyKHQuZGVmYXVsdC5kb2N1bWVudCxcInRvdWNobW92ZVwiLHRoaXMuX29uTW92ZSx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSkscy5yZW1vdmVFdmVudExpc3RlbmVyKHQuZGVmYXVsdC5kb2N1bWVudCxcInRvdWNoZW5kXCIsdGhpcy5fb25Ub3VjaEVuZCkscy5yZW1vdmVFdmVudExpc3RlbmVyKHQuZGVmYXVsdC5kb2N1bWVudCxcIm1vdXNlbW92ZVwiLHRoaXMuX29uTW92ZSx7Y2FwdHVyZTohMH0pLHMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsXCJtb3VzZXVwXCIsdGhpcy5fb25Nb3VzZVVwKSxzLnJlbW92ZUV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LFwiYmx1clwiLHRoaXMuX29uQmx1cil9LFpyLnByb3RvdHlwZS5fZGVhY3RpdmF0ZT1mdW5jdGlvbigpe3RoaXMuX2ZyYW1lSWQmJih0aGlzLl9tYXAuX2NhbmNlbFJlbmRlckZyYW1lKHRoaXMuX2ZyYW1lSWQpLHRoaXMuX2ZyYW1lSWQ9bnVsbCksZGVsZXRlIHRoaXMuX2xhc3RNb3ZlRXZlbnQsZGVsZXRlIHRoaXMuX3ByZXZpb3VzUG9zLGRlbGV0ZSB0aGlzLl9wb3N9LFpyLnByb3RvdHlwZS5faW5lcnRpYWxQYW49ZnVuY3Rpb24odCl7dGhpcy5fZmlyZUV2ZW50KFwiZHJhZ2VuZFwiLHQpLHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpO3ZhciBlPXRoaXMuX2luZXJ0aWE7aWYoZS5sZW5ndGg8Mil0aGlzLl9maXJlRXZlbnQoXCJtb3ZlZW5kXCIsdCk7ZWxzZXt2YXIgcj1lW2UubGVuZ3RoLTFdLG49ZVswXSxpPXJbMV0uc3ViKG5bMV0pLGE9KHJbMF0tblswXSkvMWUzO2lmKDA9PT1hfHxyWzFdLmVxdWFscyhuWzFdKSl0aGlzLl9maXJlRXZlbnQoXCJtb3ZlZW5kXCIsdCk7ZWxzZXt2YXIgbz1pLm11bHQoLjMvYSkscz1vLm1hZygpO3M+MTQwMCYmKHM9MTQwMCxvLl91bml0KCkuX211bHQocykpO3ZhciBsPXMvNzUwLGM9by5tdWx0KC1sLzIpO3RoaXMuX21hcC5wYW5CeShjLHtkdXJhdGlvbjoxZTMqbCxlYXNpbmc6WHIsbm9Nb3ZlU3RhcnQ6ITB9LHtvcmlnaW5hbEV2ZW50OnR9KX19fSxaci5wcm90b3R5cGUuX2ZpcmVFdmVudD1mdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudChlLHI/e29yaWdpbmFsRXZlbnQ6cn06e30pKX0sWnIucHJvdG90eXBlLl9kcmFpbkluZXJ0aWFCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5faW5lcnRpYSxlPWEubm93KCk7dC5sZW5ndGg+MCYmZS10WzBdWzBdPjE2MDspdC5zaGlmdCgpfTt2YXIgJHI9ZnVuY3Rpb24oZSl7dGhpcy5fbWFwPWUsdGhpcy5fZWw9ZS5nZXRDYW52YXNDb250YWluZXIoKSx0LmJpbmRBbGwoW1wiX29uS2V5RG93blwiXSx0aGlzKX07ZnVuY3Rpb24gSnIodCl7cmV0dXJuIHQqKDItdCl9JHIucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZW5hYmxlZH0sJHIucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9lbC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLHRoaXMuX29uS2V5RG93biwhMSksdGhpcy5fZW5hYmxlZD0hMCl9LCRyLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsdGhpcy5fb25LZXlEb3duKSx0aGlzLl9lbmFibGVkPSExKX0sJHIucHJvdG90eXBlLl9vbktleURvd249ZnVuY3Rpb24odCl7aWYoISh0LmFsdEtleXx8dC5jdHJsS2V5fHx0Lm1ldGFLZXkpKXt2YXIgZT0wLHI9MCxuPTAsaT0wLGE9MDtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIDYxOmNhc2UgMTA3OmNhc2UgMTcxOmNhc2UgMTg3OmU9MTticmVhaztjYXNlIDE4OTpjYXNlIDEwOTpjYXNlIDE3MzplPS0xO2JyZWFrO2Nhc2UgMzc6dC5zaGlmdEtleT9yPS0xOih0LnByZXZlbnREZWZhdWx0KCksaT0tMSk7YnJlYWs7Y2FzZSAzOTp0LnNoaWZ0S2V5P3I9MToodC5wcmV2ZW50RGVmYXVsdCgpLGk9MSk7YnJlYWs7Y2FzZSAzODp0LnNoaWZ0S2V5P249MToodC5wcmV2ZW50RGVmYXVsdCgpLGE9LTEpO2JyZWFrO2Nhc2UgNDA6dC5zaGlmdEtleT9uPS0xOihhPTEsdC5wcmV2ZW50RGVmYXVsdCgpKTticmVhaztkZWZhdWx0OnJldHVybn12YXIgbz10aGlzLl9tYXAscz1vLmdldFpvb20oKSxsPXtkdXJhdGlvbjozMDAsZGVsYXlFbmRFdmVudHM6NTAwLGVhc2luZzpKcix6b29tOmU/TWF0aC5yb3VuZChzKStlKih0LnNoaWZ0S2V5PzI6MSk6cyxiZWFyaW5nOm8uZ2V0QmVhcmluZygpKzE1KnIscGl0Y2g6by5nZXRQaXRjaCgpKzEwKm4sb2Zmc2V0OlsxMDAqLWksMTAwKi1hXSxjZW50ZXI6by5nZXRDZW50ZXIoKX07by5lYXNlVG8obCx7b3JpZ2luYWxFdmVudDp0fSl9fTt2YXIgS3I9ZnVuY3Rpb24oZSl7dGhpcy5fbWFwPWUsdC5iaW5kQWxsKFtcIl9vbkRibENsaWNrXCIsXCJfb25ab29tRW5kXCJdLHRoaXMpfTtLci5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9lbmFibGVkfSxLci5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2FjdGl2ZX0sS3IucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9lbmFibGVkPSEwKX0sS3IucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpJiYodGhpcy5fZW5hYmxlZD0hMSl9LEtyLnByb3RvdHlwZS5vblRvdWNoU3RhcnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLmlzRW5hYmxlZCgpJiYodC5wb2ludHMubGVuZ3RoPjF8fCh0aGlzLl90YXBwZWQ/KGNsZWFyVGltZW91dCh0aGlzLl90YXBwZWQpLHRoaXMuX3RhcHBlZD1udWxsLHRoaXMuX3pvb20odCkpOnRoaXMuX3RhcHBlZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5fdGFwcGVkPW51bGx9LDMwMCkpKX0sS3IucHJvdG90eXBlLm9uRGJsQ2xpY2s9ZnVuY3Rpb24odCl7dGhpcy5pc0VuYWJsZWQoKSYmKHQub3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3pvb20odCkpfSxLci5wcm90b3R5cGUuX3pvb209ZnVuY3Rpb24odCl7dGhpcy5fYWN0aXZlPSEwLHRoaXMuX21hcC5vbihcInpvb21lbmRcIix0aGlzLl9vblpvb21FbmQpLHRoaXMuX21hcC56b29tVG8odGhpcy5fbWFwLmdldFpvb20oKSsodC5vcmlnaW5hbEV2ZW50LnNoaWZ0S2V5Py0xOjEpLHthcm91bmQ6dC5sbmdMYXR9LHQpfSxLci5wcm90b3R5cGUuX29uWm9vbUVuZD1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMSx0aGlzLl9tYXAub2ZmKFwiem9vbWVuZFwiLHRoaXMuX29uWm9vbUVuZCl9O3ZhciBRcj10LmJlemllcigwLDAsLjE1LDEpLHRuPWZ1bmN0aW9uKGUpe3RoaXMuX21hcD1lLHRoaXMuX2VsPWUuZ2V0Q2FudmFzQ29udGFpbmVyKCksdC5iaW5kQWxsKFtcIl9vbk1vdmVcIixcIl9vbkVuZFwiLFwiX29uVG91Y2hGcmFtZVwiXSx0aGlzKX07dG4ucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZW5hYmxlZH0sdG4ucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbih0KXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fZWwuY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLXRvdWNoLXpvb20tcm90YXRlXCIpLHRoaXMuX2VuYWJsZWQ9ITAsdGhpcy5fYXJvdW5kQ2VudGVyPSEhdCYmXCJjZW50ZXJcIj09PXQuYXJvdW5kKX0sdG4ucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpJiYodGhpcy5fZWwuY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLXRvdWNoLXpvb20tcm90YXRlXCIpLHRoaXMuX2VuYWJsZWQ9ITEpfSx0bi5wcm90b3R5cGUuZGlzYWJsZVJvdGF0aW9uPWZ1bmN0aW9uKCl7dGhpcy5fcm90YXRpb25EaXNhYmxlZD0hMH0sdG4ucHJvdG90eXBlLmVuYWJsZVJvdGF0aW9uPWZ1bmN0aW9uKCl7dGhpcy5fcm90YXRpb25EaXNhYmxlZD0hMX0sdG4ucHJvdG90eXBlLm9uU3RhcnQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5pc0VuYWJsZWQoKSYmMj09PWUudG91Y2hlcy5sZW5ndGgpe3ZhciByPXMubW91c2VQb3ModGhpcy5fZWwsZS50b3VjaGVzWzBdKSxuPXMubW91c2VQb3ModGhpcy5fZWwsZS50b3VjaGVzWzFdKTt0aGlzLl9zdGFydFZlYz1yLnN1YihuKSx0aGlzLl9nZXN0dXJlSW50ZW50PXZvaWQgMCx0aGlzLl9pbmVydGlhPVtdLHMuYWRkRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsXCJ0b3VjaG1vdmVcIix0aGlzLl9vbk1vdmUse3Bhc3NpdmU6ITF9KSxzLmFkZEV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LmRvY3VtZW50LFwidG91Y2hlbmRcIix0aGlzLl9vbkVuZCl9fSx0bi5wcm90b3R5cGUuX2dldFRvdWNoRXZlbnREYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPXMubW91c2VQb3ModGhpcy5fZWwsdC50b3VjaGVzWzBdKSxyPXMubW91c2VQb3ModGhpcy5fZWwsdC50b3VjaGVzWzFdKSxuPWUuc3ViKHIpO3JldHVybnt2ZWM6bixjZW50ZXI6ZS5hZGQocikuZGl2KDIpLHNjYWxlOm4ubWFnKCkvdGhpcy5fc3RhcnRWZWMubWFnKCksYmVhcmluZzp0aGlzLl9yb3RhdGlvbkRpc2FibGVkPzA6MTgwKm4uYW5nbGVXaXRoKHRoaXMuX3N0YXJ0VmVjKS9NYXRoLlBJfX0sdG4ucHJvdG90eXBlLl9vbk1vdmU9ZnVuY3Rpb24oZSl7aWYoMj09PWUudG91Y2hlcy5sZW5ndGgpe3ZhciByPXRoaXMuX2dldFRvdWNoRXZlbnREYXRhKGUpLG49ci52ZWMsaT1yLnNjYWxlLGE9ci5iZWFyaW5nO2lmKCF0aGlzLl9nZXN0dXJlSW50ZW50KXt2YXIgbz1NYXRoLmFicygxLWkpPi4xNTtNYXRoLmFicyhhKT4xMD90aGlzLl9nZXN0dXJlSW50ZW50PVwicm90YXRlXCI6byYmKHRoaXMuX2dlc3R1cmVJbnRlbnQ9XCJ6b29tXCIpLHRoaXMuX2dlc3R1cmVJbnRlbnQmJih0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudCh0aGlzLl9nZXN0dXJlSW50ZW50K1wic3RhcnRcIix7b3JpZ2luYWxFdmVudDplfSkpLHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KFwibW92ZXN0YXJ0XCIse29yaWdpbmFsRXZlbnQ6ZX0pKSx0aGlzLl9zdGFydFZlYz1uKX10aGlzLl9sYXN0VG91Y2hFdmVudD1lLHRoaXMuX2ZyYW1lSWR8fCh0aGlzLl9mcmFtZUlkPXRoaXMuX21hcC5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX29uVG91Y2hGcmFtZSkpLGUucHJldmVudERlZmF1bHQoKX19LHRuLnByb3RvdHlwZS5fb25Ub3VjaEZyYW1lPWZ1bmN0aW9uKCl7dGhpcy5fZnJhbWVJZD1udWxsO3ZhciBlPXRoaXMuX2dlc3R1cmVJbnRlbnQ7aWYoZSl7dmFyIHI9dGhpcy5fbWFwLnRyYW5zZm9ybTt0aGlzLl9zdGFydFNjYWxlfHwodGhpcy5fc3RhcnRTY2FsZT1yLnNjYWxlLHRoaXMuX3N0YXJ0QmVhcmluZz1yLmJlYXJpbmcpO3ZhciBuPXRoaXMuX2dldFRvdWNoRXZlbnREYXRhKHRoaXMuX2xhc3RUb3VjaEV2ZW50KSxpPW4uY2VudGVyLG89bi5iZWFyaW5nLHM9bi5zY2FsZSxsPXIucG9pbnRMb2NhdGlvbihpKSxjPXIubG9jYXRpb25Qb2ludChsKTtcInJvdGF0ZVwiPT09ZSYmKHIuYmVhcmluZz10aGlzLl9zdGFydEJlYXJpbmcrbyksci56b29tPXIuc2NhbGVab29tKHRoaXMuX3N0YXJ0U2NhbGUqcyksci5zZXRMb2NhdGlvbkF0UG9pbnQobCxjKSx0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudChlLHtvcmlnaW5hbEV2ZW50OnRoaXMuX2xhc3RUb3VjaEV2ZW50fSkpLHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KFwibW92ZVwiLHtvcmlnaW5hbEV2ZW50OnRoaXMuX2xhc3RUb3VjaEV2ZW50fSkpLHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpLHRoaXMuX2luZXJ0aWEucHVzaChbYS5ub3coKSxzLGldKX19LHRuLnByb3RvdHlwZS5fb25FbmQ9ZnVuY3Rpb24oZSl7cy5yZW1vdmVFdmVudExpc3RlbmVyKHQuZGVmYXVsdC5kb2N1bWVudCxcInRvdWNobW92ZVwiLHRoaXMuX29uTW92ZSx7cGFzc2l2ZTohMX0pLHMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsXCJ0b3VjaGVuZFwiLHRoaXMuX29uRW5kKTt2YXIgcj10aGlzLl9nZXN0dXJlSW50ZW50LG49dGhpcy5fc3RhcnRTY2FsZTtpZih0aGlzLl9mcmFtZUlkJiYodGhpcy5fbWFwLl9jYW5jZWxSZW5kZXJGcmFtZSh0aGlzLl9mcmFtZUlkKSx0aGlzLl9mcmFtZUlkPW51bGwpLGRlbGV0ZSB0aGlzLl9nZXN0dXJlSW50ZW50LGRlbGV0ZSB0aGlzLl9zdGFydFNjYWxlLGRlbGV0ZSB0aGlzLl9zdGFydEJlYXJpbmcsZGVsZXRlIHRoaXMuX2xhc3RUb3VjaEV2ZW50LHIpe3RoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KHIrXCJlbmRcIix7b3JpZ2luYWxFdmVudDplfSkpLHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpO3ZhciBpPXRoaXMuX2luZXJ0aWEsYT10aGlzLl9tYXA7aWYoaS5sZW5ndGg8MilhLnNuYXBUb05vcnRoKHt9LHtvcmlnaW5hbEV2ZW50OmV9KTtlbHNle3ZhciBvPWlbaS5sZW5ndGgtMV0sbD1pWzBdLGM9YS50cmFuc2Zvcm0uc2NhbGVab29tKG4qb1sxXSksdT1hLnRyYW5zZm9ybS5zY2FsZVpvb20obipsWzFdKSxoPWMtdSxmPShvWzBdLWxbMF0pLzFlMyxwPW9bMl07aWYoMCE9PWYmJmMhPT11KXt2YXIgZD0uMTUqaC9mO01hdGguYWJzKGQpPjIuNSYmKGQ9ZD4wPzIuNTotMi41KTt2YXIgZz0xZTMqTWF0aC5hYnMoZC8oMTIqLjE1KSksdj1jK2QqZy8yZTM7djwwJiYodj0wKSxhLmVhc2VUbyh7em9vbTp2LGR1cmF0aW9uOmcsZWFzaW5nOlFyLGFyb3VuZDp0aGlzLl9hcm91bmRDZW50ZXI/YS5nZXRDZW50ZXIoKTphLnVucHJvamVjdChwKSxub01vdmVTdGFydDohMH0se29yaWdpbmFsRXZlbnQ6ZX0pfWVsc2UgYS5zbmFwVG9Ob3J0aCh7fSx7b3JpZ2luYWxFdmVudDplfSl9fX0sdG4ucHJvdG90eXBlLl9kcmFpbkluZXJ0aWFCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5faW5lcnRpYSxlPWEubm93KCk7dC5sZW5ndGg+MiYmZS10WzBdWzBdPjE2MDspdC5zaGlmdCgpfTt2YXIgZW49e3Njcm9sbFpvb206SHIsYm94Wm9vbTpHcixkcmFnUm90YXRlOldyLGRyYWdQYW46WnIsa2V5Ym9hcmQ6JHIsZG91YmxlQ2xpY2tab29tOktyLHRvdWNoWm9vbVJvdGF0ZTp0bn0scm49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4pe2UuY2FsbCh0aGlzKSx0aGlzLl9tb3Zpbmc9ITEsdGhpcy5fem9vbWluZz0hMSx0aGlzLnRyYW5zZm9ybT1yLHRoaXMuX2JlYXJpbmdTbmFwPW4uYmVhcmluZ1NuYXAsdC5iaW5kQWxsKFtcIl9yZW5kZXJGcmFtZUNhbGxiYWNrXCJdLHRoaXMpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5nZXRDZW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0uY2VudGVyfSxyLnByb3RvdHlwZS5zZXRDZW50ZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5qdW1wVG8oe2NlbnRlcjp0fSxlKX0sci5wcm90b3R5cGUucGFuQnk9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlPXQuZGVmYXVsdCQxLmNvbnZlcnQoZSkubXVsdCgtMSksdGhpcy5wYW5Ubyh0aGlzLnRyYW5zZm9ybS5jZW50ZXIsdC5leHRlbmQoe29mZnNldDplfSxyKSxuKX0sci5wcm90b3R5cGUucGFuVG89ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLmVhc2VUbyh0LmV4dGVuZCh7Y2VudGVyOmV9LHIpLG4pfSxyLnByb3RvdHlwZS5nZXRab29tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnpvb219LHIucHJvdG90eXBlLnNldFpvb209ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5qdW1wVG8oe3pvb206dH0sZSksdGhpc30sci5wcm90b3R5cGUuem9vbVRvPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdGhpcy5lYXNlVG8odC5leHRlbmQoe3pvb206ZX0sciksbil9LHIucHJvdG90eXBlLnpvb21Jbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnpvb21Ubyh0aGlzLmdldFpvb20oKSsxLHQsZSksdGhpc30sci5wcm90b3R5cGUuem9vbU91dD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnpvb21Ubyh0aGlzLmdldFpvb20oKS0xLHQsZSksdGhpc30sci5wcm90b3R5cGUuZ2V0QmVhcmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5iZWFyaW5nfSxyLnByb3RvdHlwZS5zZXRCZWFyaW5nPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuanVtcFRvKHtiZWFyaW5nOnR9LGUpLHRoaXN9LHIucHJvdG90eXBlLnJvdGF0ZVRvPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdGhpcy5lYXNlVG8odC5leHRlbmQoe2JlYXJpbmc6ZX0sciksbil9LHIucHJvdG90eXBlLnJlc2V0Tm9ydGg9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdGhpcy5yb3RhdGVUbygwLHQuZXh0ZW5kKHtkdXJhdGlvbjoxZTN9LGUpLHIpLHRoaXN9LHIucHJvdG90eXBlLnNuYXBUb05vcnRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguYWJzKHRoaXMuZ2V0QmVhcmluZygpKTx0aGlzLl9iZWFyaW5nU25hcD90aGlzLnJlc2V0Tm9ydGgodCxlKTp0aGlzfSxyLnByb3RvdHlwZS5nZXRQaXRjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5waXRjaH0sci5wcm90b3R5cGUuc2V0UGl0Y2g9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5qdW1wVG8oe3BpdGNoOnR9LGUpLHRoaXN9LHIucHJvdG90eXBlLmZpdEJvdW5kcz1mdW5jdGlvbihlLHIsbil7aWYoXCJudW1iZXJcIj09dHlwZW9mKHI9dC5leHRlbmQoe3BhZGRpbmc6e3RvcDowLGJvdHRvbTowLHJpZ2h0OjAsbGVmdDowfSxvZmZzZXQ6WzAsMF0sbWF4Wm9vbTp0aGlzLnRyYW5zZm9ybS5tYXhab29tfSxyKSkucGFkZGluZyl7dmFyIGk9ci5wYWRkaW5nO3IucGFkZGluZz17dG9wOmksYm90dG9tOmkscmlnaHQ6aSxsZWZ0Oml9fWlmKCF0LmRlZmF1bHQkMTAoT2JqZWN0LmtleXMoci5wYWRkaW5nKS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTowfSksW1wiYm90dG9tXCIsXCJsZWZ0XCIsXCJyaWdodFwiLFwidG9wXCJdKSlyZXR1cm4gdC53YXJuT25jZShcIm9wdGlvbnMucGFkZGluZyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLCBvciBhbiBPYmplY3Qgd2l0aCBrZXlzICdib3R0b20nLCAnbGVmdCcsICdyaWdodCcsICd0b3AnXCIpLHRoaXM7ZT1ZLmNvbnZlcnQoZSk7dmFyIGE9WyhyLnBhZGRpbmcubGVmdC1yLnBhZGRpbmcucmlnaHQpLzIsKHIucGFkZGluZy50b3Atci5wYWRkaW5nLmJvdHRvbSkvMl0sbz1NYXRoLm1pbihyLnBhZGRpbmcucmlnaHQsci5wYWRkaW5nLmxlZnQpLHM9TWF0aC5taW4oci5wYWRkaW5nLnRvcCxyLnBhZGRpbmcuYm90dG9tKTtyLm9mZnNldD1bci5vZmZzZXRbMF0rYVswXSxyLm9mZnNldFsxXSthWzFdXTt2YXIgbD10LmRlZmF1bHQkMS5jb252ZXJ0KHIub2Zmc2V0KSxjPXRoaXMudHJhbnNmb3JtLHU9Yy5wcm9qZWN0KGUuZ2V0Tm9ydGhXZXN0KCkpLGg9Yy5wcm9qZWN0KGUuZ2V0U291dGhFYXN0KCkpLGY9aC5zdWIodSkscD0oYy53aWR0aC0yKm8tMipNYXRoLmFicyhsLngpKS9mLngsZD0oYy5oZWlnaHQtMipzLTIqTWF0aC5hYnMobC55KSkvZi55O3JldHVybiBkPDB8fHA8MD8odC53YXJuT25jZShcIk1hcCBjYW5ub3QgZml0IHdpdGhpbiBjYW52YXMgd2l0aCB0aGUgZ2l2ZW4gYm91bmRzLCBwYWRkaW5nLCBhbmQvb3Igb2Zmc2V0LlwiKSx0aGlzKTooci5jZW50ZXI9Yy51bnByb2plY3QodS5hZGQoaCkuZGl2KDIpKSxyLnpvb209TWF0aC5taW4oYy5zY2FsZVpvb20oYy5zY2FsZSpNYXRoLm1pbihwLGQpKSxyLm1heFpvb20pLHIuYmVhcmluZz0wLHIubGluZWFyP3RoaXMuZWFzZVRvKHIsbik6dGhpcy5mbHlUbyhyLG4pKX0sci5wcm90b3R5cGUuanVtcFRvPWZ1bmN0aW9uKGUscil7dGhpcy5zdG9wKCk7dmFyIG49dGhpcy50cmFuc2Zvcm0saT0hMSxhPSExLG89ITE7cmV0dXJuXCJ6b29tXCJpbiBlJiZuLnpvb20hPT0rZS56b29tJiYoaT0hMCxuLnpvb209K2Uuem9vbSksdm9pZCAwIT09ZS5jZW50ZXImJihuLmNlbnRlcj1HLmNvbnZlcnQoZS5jZW50ZXIpKSxcImJlYXJpbmdcImluIGUmJm4uYmVhcmluZyE9PStlLmJlYXJpbmcmJihhPSEwLG4uYmVhcmluZz0rZS5iZWFyaW5nKSxcInBpdGNoXCJpbiBlJiZuLnBpdGNoIT09K2UucGl0Y2gmJihvPSEwLG4ucGl0Y2g9K2UucGl0Y2gpLHRoaXMuZmlyZShuZXcgdC5FdmVudChcIm1vdmVzdGFydFwiLHIpKS5maXJlKG5ldyB0LkV2ZW50KFwibW92ZVwiLHIpKSxpJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJ6b29tc3RhcnRcIixyKSkuZmlyZShuZXcgdC5FdmVudChcInpvb21cIixyKSkuZmlyZShuZXcgdC5FdmVudChcInpvb21lbmRcIixyKSksYSYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwicm90YXRlc3RhcnRcIixyKSkuZmlyZShuZXcgdC5FdmVudChcInJvdGF0ZVwiLHIpKS5maXJlKG5ldyB0LkV2ZW50KFwicm90YXRlZW5kXCIscikpLG8mJnRoaXMuZmlyZShuZXcgdC5FdmVudChcInBpdGNoc3RhcnRcIixyKSkuZmlyZShuZXcgdC5FdmVudChcInBpdGNoXCIscikpLmZpcmUobmV3IHQuRXZlbnQoXCJwaXRjaGVuZFwiLHIpKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJtb3ZlZW5kXCIscikpfSxyLnByb3RvdHlwZS5lYXNlVG89ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO3RoaXMuc3RvcCgpLCExPT09KGU9dC5leHRlbmQoe29mZnNldDpbMCwwXSxkdXJhdGlvbjo1MDAsZWFzaW5nOnQuZWFzZX0sZSkpLmFuaW1hdGUmJihlLmR1cmF0aW9uPTApO3ZhciBpPXRoaXMudHJhbnNmb3JtLGE9dGhpcy5nZXRab29tKCksbz10aGlzLmdldEJlYXJpbmcoKSxzPXRoaXMuZ2V0UGl0Y2goKSxsPVwiem9vbVwiaW4gZT8rZS56b29tOmEsYz1cImJlYXJpbmdcImluIGU/dGhpcy5fbm9ybWFsaXplQmVhcmluZyhlLmJlYXJpbmcsbyk6byx1PVwicGl0Y2hcImluIGU/K2UucGl0Y2g6cyxoPWkuY2VudGVyUG9pbnQuYWRkKHQuZGVmYXVsdCQxLmNvbnZlcnQoZS5vZmZzZXQpKSxmPWkucG9pbnRMb2NhdGlvbihoKSxwPUcuY29udmVydChlLmNlbnRlcnx8Zik7dGhpcy5fbm9ybWFsaXplQ2VudGVyKHApO3ZhciBkLGcsdj1pLnByb2plY3QoZiksbT1pLnByb2plY3QocCkuc3ViKHYpLHk9aS56b29tU2NhbGUobC1hKTtyZXR1cm4gZS5hcm91bmQmJihkPUcuY29udmVydChlLmFyb3VuZCksZz1pLmxvY2F0aW9uUG9pbnQoZCkpLHRoaXMuX3pvb21pbmc9bCE9PWEsdGhpcy5fcm90YXRpbmc9byE9PWMsdGhpcy5fcGl0Y2hpbmc9dSE9PXMsdGhpcy5fcHJlcGFyZUVhc2UocixlLm5vTW92ZVN0YXJ0KSxjbGVhclRpbWVvdXQodGhpcy5fZWFzZUVuZFRpbWVvdXRJRCksdGhpcy5fZWFzZShmdW5jdGlvbihlKXtpZihuLl96b29taW5nJiYoaS56b29tPXQubnVtYmVyKGEsbCxlKSksbi5fcm90YXRpbmcmJihpLmJlYXJpbmc9dC5udW1iZXIobyxjLGUpKSxuLl9waXRjaGluZyYmKGkucGl0Y2g9dC5udW1iZXIocyx1LGUpKSxkKWkuc2V0TG9jYXRpb25BdFBvaW50KGQsZyk7ZWxzZXt2YXIgZj1pLnpvb21TY2FsZShpLnpvb20tYSkscD1sPmE/TWF0aC5taW4oMix5KTpNYXRoLm1heCguNSx5KSx4PU1hdGgucG93KHAsMS1lKSxiPWkudW5wcm9qZWN0KHYuYWRkKG0ubXVsdChlKngpKS5tdWx0KGYpKTtpLnNldExvY2F0aW9uQXRQb2ludChpLnJlbmRlcldvcmxkQ29waWVzP2Iud3JhcCgpOmIsaCl9bi5fZmlyZU1vdmVFdmVudHMocil9LGZ1bmN0aW9uKCl7ZS5kZWxheUVuZEV2ZW50cz9uLl9lYXNlRW5kVGltZW91dElEPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fYWZ0ZXJFYXNlKHIpfSxlLmRlbGF5RW5kRXZlbnRzKTpuLl9hZnRlckVhc2Uocil9LGUpLHRoaXN9LHIucHJvdG90eXBlLl9wcmVwYXJlRWFzZT1mdW5jdGlvbihlLHIpe3RoaXMuX21vdmluZz0hMCxyfHx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJtb3Zlc3RhcnRcIixlKSksdGhpcy5fem9vbWluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiem9vbXN0YXJ0XCIsZSkpLHRoaXMuX3JvdGF0aW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJyb3RhdGVzdGFydFwiLGUpKSx0aGlzLl9waXRjaGluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwicGl0Y2hzdGFydFwiLGUpKX0sci5wcm90b3R5cGUuX2ZpcmVNb3ZlRXZlbnRzPWZ1bmN0aW9uKGUpe3RoaXMuZmlyZShuZXcgdC5FdmVudChcIm1vdmVcIixlKSksdGhpcy5fem9vbWluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiem9vbVwiLGUpKSx0aGlzLl9yb3RhdGluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwicm90YXRlXCIsZSkpLHRoaXMuX3BpdGNoaW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJwaXRjaFwiLGUpKX0sci5wcm90b3R5cGUuX2FmdGVyRWFzZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzLl96b29taW5nLG49dGhpcy5fcm90YXRpbmcsaT10aGlzLl9waXRjaGluZzt0aGlzLl9tb3Zpbmc9ITEsdGhpcy5fem9vbWluZz0hMSx0aGlzLl9yb3RhdGluZz0hMSx0aGlzLl9waXRjaGluZz0hMSxyJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJ6b29tZW5kXCIsZSkpLG4mJnRoaXMuZmlyZShuZXcgdC5FdmVudChcInJvdGF0ZWVuZFwiLGUpKSxpJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJwaXRjaGVuZFwiLGUpKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJtb3ZlZW5kXCIsZSkpfSxyLnByb3RvdHlwZS5mbHlUbz1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7dGhpcy5zdG9wKCksZT10LmV4dGVuZCh7b2Zmc2V0OlswLDBdLHNwZWVkOjEuMixjdXJ2ZToxLjQyLGVhc2luZzp0LmVhc2V9LGUpO3ZhciBpPXRoaXMudHJhbnNmb3JtLGE9dGhpcy5nZXRab29tKCksbz10aGlzLmdldEJlYXJpbmcoKSxzPXRoaXMuZ2V0UGl0Y2goKSxsPVwiem9vbVwiaW4gZT90LmNsYW1wKCtlLnpvb20saS5taW5ab29tLGkubWF4Wm9vbSk6YSxjPVwiYmVhcmluZ1wiaW4gZT90aGlzLl9ub3JtYWxpemVCZWFyaW5nKGUuYmVhcmluZyxvKTpvLHU9XCJwaXRjaFwiaW4gZT8rZS5waXRjaDpzLGg9aS56b29tU2NhbGUobC1hKSxmPWkuY2VudGVyUG9pbnQuYWRkKHQuZGVmYXVsdCQxLmNvbnZlcnQoZS5vZmZzZXQpKSxwPWkucG9pbnRMb2NhdGlvbihmKSxkPUcuY29udmVydChlLmNlbnRlcnx8cCk7dGhpcy5fbm9ybWFsaXplQ2VudGVyKGQpO3ZhciBnPWkucHJvamVjdChwKSx2PWkucHJvamVjdChkKS5zdWIoZyksbT1lLmN1cnZlLHk9TWF0aC5tYXgoaS53aWR0aCxpLmhlaWdodCkseD15L2gsYj12Lm1hZygpO2lmKFwibWluWm9vbVwiaW4gZSl7dmFyIF89dC5jbGFtcChNYXRoLm1pbihlLm1pblpvb20sYSxsKSxpLm1pblpvb20saS5tYXhab29tKSx3PXkvaS56b29tU2NhbGUoXy1hKTttPU1hdGguc3FydCh3L2IqMil9dmFyIGs9bSptO2Z1bmN0aW9uIEEodCl7dmFyIGU9KHgqeC15KnkrKHQ/LTE6MSkqayprKmIqYikvKDIqKHQ/eDp5KSprKmIpO3JldHVybiBNYXRoLmxvZyhNYXRoLnNxcnQoZSplKzEpLWUpfWZ1bmN0aW9uIFQodCl7cmV0dXJuKE1hdGguZXhwKHQpLU1hdGguZXhwKC10KSkvMn1mdW5jdGlvbiBNKHQpe3JldHVybihNYXRoLmV4cCh0KStNYXRoLmV4cCgtdCkpLzJ9dmFyIFM9QSgwKSxFPWZ1bmN0aW9uKHQpe3JldHVybiBNKFMpL00oUyttKnQpfSxDPWZ1bmN0aW9uKHQpe3JldHVybiB5KigoTShTKSooVChlPVMrbSp0KS9NKGUpKS1UKFMpKS9rKS9iO3ZhciBlfSxMPShBKDEpLVMpL207aWYoTWF0aC5hYnMoYik8MWUtNnx8IWlzRmluaXRlKEwpKXtpZihNYXRoLmFicyh5LXgpPDFlLTYpcmV0dXJuIHRoaXMuZWFzZVRvKGUscik7dmFyIHo9eDx5Py0xOjE7TD1NYXRoLmFicyhNYXRoLmxvZyh4L3kpKS9tLEM9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sRT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5leHAoeiptKnQpfX1pZihcImR1cmF0aW9uXCJpbiBlKWUuZHVyYXRpb249K2UuZHVyYXRpb247ZWxzZXt2YXIgTz1cInNjcmVlblNwZWVkXCJpbiBlPytlLnNjcmVlblNwZWVkL206K2Uuc3BlZWQ7ZS5kdXJhdGlvbj0xZTMqTC9PfXJldHVybiBlLm1heER1cmF0aW9uJiZlLmR1cmF0aW9uPmUubWF4RHVyYXRpb24mJihlLmR1cmF0aW9uPTApLHRoaXMuX3pvb21pbmc9ITAsdGhpcy5fcm90YXRpbmc9byE9PWMsdGhpcy5fcGl0Y2hpbmc9dSE9PXMsdGhpcy5fcHJlcGFyZUVhc2UociwhMSksdGhpcy5fZWFzZShmdW5jdGlvbihlKXt2YXIgbD1lKkwsaD0xL0UobCk7aS56b29tPWEraS5zY2FsZVpvb20oaCksbi5fcm90YXRpbmcmJihpLmJlYXJpbmc9dC5udW1iZXIobyxjLGUpKSxuLl9waXRjaGluZyYmKGkucGl0Y2g9dC5udW1iZXIocyx1LGUpKTt2YXIgcD1pLnVucHJvamVjdChnLmFkZCh2Lm11bHQoQyhsKSkpLm11bHQoaCkpO2kuc2V0TG9jYXRpb25BdFBvaW50KGkucmVuZGVyV29ybGRDb3BpZXM/cC53cmFwKCk6cCxmKSxuLl9maXJlTW92ZUV2ZW50cyhyKX0sZnVuY3Rpb24oKXtyZXR1cm4gbi5fYWZ0ZXJFYXNlKHIpfSxlKSx0aGlzfSxyLnByb3RvdHlwZS5pc0Vhc2luZz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZWFzZUZyYW1lSWR9LHIucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXtpZih0aGlzLl9lYXNlRnJhbWVJZCYmKHRoaXMuX2NhbmNlbFJlbmRlckZyYW1lKHRoaXMuX2Vhc2VGcmFtZUlkKSxkZWxldGUgdGhpcy5fZWFzZUZyYW1lSWQsZGVsZXRlIHRoaXMuX29uRWFzZUZyYW1lKSx0aGlzLl9vbkVhc2VFbmQpe3ZhciB0PXRoaXMuX29uRWFzZUVuZDtkZWxldGUgdGhpcy5fb25FYXNlRW5kLHQuY2FsbCh0aGlzKX1yZXR1cm4gdGhpc30sci5wcm90b3R5cGUuX2Vhc2U9ZnVuY3Rpb24odCxlLHIpeyExPT09ci5hbmltYXRlfHwwPT09ci5kdXJhdGlvbj8odCgxKSxlKCkpOih0aGlzLl9lYXNlU3RhcnQ9YS5ub3coKSx0aGlzLl9lYXNlT3B0aW9ucz1yLHRoaXMuX29uRWFzZUZyYW1lPXQsdGhpcy5fb25FYXNlRW5kPWUsdGhpcy5fZWFzZUZyYW1lSWQ9dGhpcy5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX3JlbmRlckZyYW1lQ2FsbGJhY2spKX0sci5wcm90b3R5cGUuX3JlbmRlckZyYW1lQ2FsbGJhY2s9ZnVuY3Rpb24oKXt2YXIgdD1NYXRoLm1pbigoYS5ub3coKS10aGlzLl9lYXNlU3RhcnQpL3RoaXMuX2Vhc2VPcHRpb25zLmR1cmF0aW9uLDEpO3RoaXMuX29uRWFzZUZyYW1lKHRoaXMuX2Vhc2VPcHRpb25zLmVhc2luZyh0KSksdDwxP3RoaXMuX2Vhc2VGcmFtZUlkPXRoaXMuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9yZW5kZXJGcmFtZUNhbGxiYWNrKTp0aGlzLnN0b3AoKX0sci5wcm90b3R5cGUuX25vcm1hbGl6ZUJlYXJpbmc9ZnVuY3Rpb24oZSxyKXtlPXQud3JhcChlLC0xODAsMTgwKTt2YXIgbj1NYXRoLmFicyhlLXIpO3JldHVybiBNYXRoLmFicyhlLTM2MC1yKTxuJiYoZS09MzYwKSxNYXRoLmFicyhlKzM2MC1yKTxuJiYoZSs9MzYwKSxlfSxyLnByb3RvdHlwZS5fbm9ybWFsaXplQ2VudGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudHJhbnNmb3JtO2lmKGUucmVuZGVyV29ybGRDb3BpZXMmJiFlLmxuZ1JhbmdlKXt2YXIgcj10LmxuZy1lLmNlbnRlci5sbmc7dC5sbmcrPXI+MTgwPy0zNjA6cjwtMTgwPzM2MDowfX0scn0odC5FdmVudGVkKSxubj1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5vcHRpb25zPWUsdC5iaW5kQWxsKFtcIl91cGRhdGVFZGl0TGlua1wiLFwiX3VwZGF0ZURhdGFcIixcIl91cGRhdGVDb21wYWN0XCJdLHRoaXMpfTtubi5wcm90b3R5cGUuZ2V0RGVmYXVsdFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuXCJib3R0b20tcmlnaHRcIn0sbm4ucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLmNvbXBhY3Q7cmV0dXJuIHRoaXMuX21hcD10LHRoaXMuX2NvbnRhaW5lcj1zLmNyZWF0ZShcImRpdlwiLFwibWFwYm94Z2wtY3RybCBtYXBib3hnbC1jdHJsLWF0dHJpYlwiKSxlJiZ0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLWNvbXBhY3RcIiksdGhpcy5fdXBkYXRlQXR0cmlidXRpb25zKCksdGhpcy5fdXBkYXRlRWRpdExpbmsoKSx0aGlzLl9tYXAub24oXCJzb3VyY2VkYXRhXCIsdGhpcy5fdXBkYXRlRGF0YSksdGhpcy5fbWFwLm9uKFwibW92ZWVuZFwiLHRoaXMuX3VwZGF0ZUVkaXRMaW5rKSx2b2lkIDA9PT1lJiYodGhpcy5fbWFwLm9uKFwicmVzaXplXCIsdGhpcy5fdXBkYXRlQ29tcGFjdCksdGhpcy5fdXBkYXRlQ29tcGFjdCgpKSx0aGlzLl9jb250YWluZXJ9LG5uLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3MucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwLm9mZihcInNvdXJjZWRhdGFcIix0aGlzLl91cGRhdGVEYXRhKSx0aGlzLl9tYXAub2ZmKFwibW92ZWVuZFwiLHRoaXMuX3VwZGF0ZUVkaXRMaW5rKSx0aGlzLl9tYXAub2ZmKFwicmVzaXplXCIsdGhpcy5fdXBkYXRlQ29tcGFjdCksdGhpcy5fbWFwPXZvaWQgMH0sbm4ucHJvdG90eXBlLl91cGRhdGVFZGl0TGluaz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2VkaXRMaW5rO3R8fCh0PXRoaXMuX2VkaXRMaW5rPXRoaXMuX2NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLm1hcGJveC1pbXByb3ZlLW1hcFwiKSk7dmFyIGU9W3trZXk6XCJvd25lclwiLHZhbHVlOnRoaXMuc3R5bGVPd25lcn0se2tleTpcImlkXCIsdmFsdWU6dGhpcy5zdHlsZUlkfSx7a2V5OlwiYWNjZXNzX3Rva2VuXCIsdmFsdWU6di5BQ0NFU1NfVE9LRU59XTtpZih0KXt2YXIgcj1lLnJlZHVjZShmdW5jdGlvbih0LHIsbil7cmV0dXJuIHIudmFsdWUmJih0Kz1yLmtleStcIj1cIityLnZhbHVlKyhuPGUubGVuZ3RoLTE/XCImXCI6XCJcIikpLHR9LFwiP1wiKTt0LmhyZWY9XCJodHRwczovL3d3dy5tYXBib3guY29tL2ZlZWRiYWNrL1wiK3IrKHRoaXMuX21hcC5faGFzaD90aGlzLl9tYXAuX2hhc2guZ2V0SGFzaFN0cmluZyghMCk6XCJcIil9fSxubi5wcm90b3R5cGUuX3VwZGF0ZURhdGE9ZnVuY3Rpb24odCl7dCYmXCJtZXRhZGF0YVwiPT09dC5zb3VyY2VEYXRhVHlwZSYmKHRoaXMuX3VwZGF0ZUF0dHJpYnV0aW9ucygpLHRoaXMuX3VwZGF0ZUVkaXRMaW5rKCkpfSxubi5wcm90b3R5cGUuX3VwZGF0ZUF0dHJpYnV0aW9ucz1mdW5jdGlvbigpe2lmKHRoaXMuX21hcC5zdHlsZSl7dmFyIHQ9W107aWYodGhpcy5fbWFwLnN0eWxlLnN0eWxlc2hlZXQpe3ZhciBlPXRoaXMuX21hcC5zdHlsZS5zdHlsZXNoZWV0O3RoaXMuc3R5bGVPd25lcj1lLm93bmVyLHRoaXMuc3R5bGVJZD1lLmlkfXZhciByPXRoaXMuX21hcC5zdHlsZS5zb3VyY2VDYWNoZXM7Zm9yKHZhciBuIGluIHIpe3ZhciBpPXJbbl0uZ2V0U291cmNlKCk7aS5hdHRyaWJ1dGlvbiYmdC5pbmRleE9mKGkuYXR0cmlidXRpb24pPDAmJnQucHVzaChpLmF0dHJpYnV0aW9uKX10LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGgtZS5sZW5ndGh9KSwodD10LmZpbHRlcihmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1yKzE7bjx0Lmxlbmd0aDtuKyspaWYodFtuXS5pbmRleE9mKGUpPj0wKXJldHVybiExO3JldHVybiEwfSkpLmxlbmd0aD8odGhpcy5fY29udGFpbmVyLmlubmVySFRNTD10LmpvaW4oXCIgfCBcIiksdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1hdHRyaWItZW1wdHlcIikpOnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtYXR0cmliLWVtcHR5XCIpLHRoaXMuX2VkaXRMaW5rPW51bGx9fSxubi5wcm90b3R5cGUuX3VwZGF0ZUNvbXBhY3Q9ZnVuY3Rpb24oKXt0aGlzLl9tYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCkub2Zmc2V0V2lkdGg8PTY0MD90aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLWNvbXBhY3RcIik6dGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1jb21wYWN0XCIpfTt2YXIgYW49ZnVuY3Rpb24oKXt0LmJpbmRBbGwoW1wiX3VwZGF0ZUxvZ29cIl0sdGhpcyl9O2FuLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9jb250YWluZXI9cy5jcmVhdGUoXCJkaXZcIixcIm1hcGJveGdsLWN0cmxcIik7dmFyIGU9cy5jcmVhdGUoXCJhXCIsXCJtYXBib3hnbC1jdHJsLWxvZ29cIik7cmV0dXJuIGUudGFyZ2V0PVwiX2JsYW5rXCIsZS5ocmVmPVwiaHR0cHM6Ly93d3cubWFwYm94LmNvbS9cIixlLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIixcIk1hcGJveCBsb2dvXCIpLHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZChlKSx0aGlzLl9jb250YWluZXIuc3R5bGUuZGlzcGxheT1cIm5vbmVcIix0aGlzLl9tYXAub24oXCJzb3VyY2VkYXRhXCIsdGhpcy5fdXBkYXRlTG9nbyksdGhpcy5fdXBkYXRlTG9nbygpLHRoaXMuX2NvbnRhaW5lcn0sYW4ucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7cy5yZW1vdmUodGhpcy5fY29udGFpbmVyKSx0aGlzLl9tYXAub2ZmKFwic291cmNlZGF0YVwiLHRoaXMuX3VwZGF0ZUxvZ28pfSxhbi5wcm90b3R5cGUuZ2V0RGVmYXVsdFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuXCJib3R0b20tbGVmdFwifSxhbi5wcm90b3R5cGUuX3VwZGF0ZUxvZ289ZnVuY3Rpb24odCl7dCYmXCJtZXRhZGF0YVwiIT09dC5zb3VyY2VEYXRhVHlwZXx8KHRoaXMuX2NvbnRhaW5lci5zdHlsZS5kaXNwbGF5PXRoaXMuX2xvZ29SZXF1aXJlZCgpP1wiYmxvY2tcIjpcIm5vbmVcIil9LGFuLnByb3RvdHlwZS5fbG9nb1JlcXVpcmVkPWZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwLnN0eWxlKXt2YXIgdD10aGlzLl9tYXAuc3R5bGUuc291cmNlQ2FjaGVzO2Zvcih2YXIgZSBpbiB0KWlmKHRbZV0uZ2V0U291cmNlKCkubWFwYm94X2xvZ28pcmV0dXJuITA7cmV0dXJuITF9fTt2YXIgb249ZnVuY3Rpb24oKXt0aGlzLl9xdWV1ZT1bXSx0aGlzLl9pZD0wLHRoaXMuX2NsZWFyZWQ9ITEsdGhpcy5fY3VycmVudGx5UnVubmluZz0hMX07b24ucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXt2YXIgZT0rK3RoaXMuX2lkO3JldHVybiB0aGlzLl9xdWV1ZS5wdXNoKHtjYWxsYmFjazp0LGlkOmUsY2FuY2VsbGVkOiExfSksZX0sb24ucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY3VycmVudGx5UnVubmluZyxyPTAsbj1lP3RoaXMuX3F1ZXVlLmNvbmNhdChlKTp0aGlzLl9xdWV1ZTtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl07aWYoaS5pZD09PXQpcmV0dXJuIHZvaWQoaS5jYW5jZWxsZWQ9ITApfX0sb24ucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2N1cnJlbnRseVJ1bm5pbmc9dGhpcy5fcXVldWU7dGhpcy5fcXVldWU9W107Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXTtpZighbi5jYW5jZWxsZWQmJihuLmNhbGxiYWNrKCksdGhpcy5fY2xlYXJlZCkpYnJlYWt9dGhpcy5fY2xlYXJlZD0hMSx0aGlzLl9jdXJyZW50bHlSdW5uaW5nPSExfSxvbi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9jdXJyZW50bHlSdW5uaW5nJiYodGhpcy5fY2xlYXJlZD0hMCksdGhpcy5fcXVldWU9W119O3ZhciBzbj10LmRlZmF1bHQuSFRNTEltYWdlRWxlbWVudCxsbj10LmRlZmF1bHQuSFRNTEVsZW1lbnQsY249e2NlbnRlcjpbMCwwXSx6b29tOjAsYmVhcmluZzowLHBpdGNoOjAsbWluWm9vbTowLG1heFpvb206MjIsaW50ZXJhY3RpdmU6ITAsc2Nyb2xsWm9vbTohMCxib3hab29tOiEwLGRyYWdSb3RhdGU6ITAsZHJhZ1BhbjohMCxrZXlib2FyZDohMCxkb3VibGVDbGlja1pvb206ITAsdG91Y2hab29tUm90YXRlOiEwLGJlYXJpbmdTbmFwOjcsaGFzaDohMSxhdHRyaWJ1dGlvbkNvbnRyb2w6ITAsZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDohMSxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITEsdHJhY2tSZXNpemU6ITAscmVuZGVyV29ybGRDb3BpZXM6ITAscmVmcmVzaEV4cGlyZWRUaWxlczohMCxtYXhUaWxlQ2FjaGVTaXplOm51bGwsdHJhbnNmb3JtUmVxdWVzdDpudWxsLGZhZGVEdXJhdGlvbjozMDB9LHVuPWZ1bmN0aW9uKHIpe2Z1bmN0aW9uIG4oZSl7aWYobnVsbCE9KGU9dC5leHRlbmQoe30sY24sZSkpLm1pblpvb20mJm51bGwhPWUubWF4Wm9vbSYmZS5taW5ab29tPmUubWF4Wm9vbSl0aHJvdyBuZXcgRXJyb3IoXCJtYXhab29tIG11c3QgYmUgZ3JlYXRlciB0aGFuIG1pblpvb21cIik7dmFyIG49bmV3IEJyKGUubWluWm9vbSxlLm1heFpvb20sZS5yZW5kZXJXb3JsZENvcGllcyk7ci5jYWxsKHRoaXMsbixlKSx0aGlzLl9pbnRlcmFjdGl2ZT1lLmludGVyYWN0aXZlLHRoaXMuX21heFRpbGVDYWNoZVNpemU9ZS5tYXhUaWxlQ2FjaGVTaXplLHRoaXMuX2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ9ZS5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0LHRoaXMuX3ByZXNlcnZlRHJhd2luZ0J1ZmZlcj1lLnByZXNlcnZlRHJhd2luZ0J1ZmZlcix0aGlzLl90cmFja1Jlc2l6ZT1lLnRyYWNrUmVzaXplLHRoaXMuX2JlYXJpbmdTbmFwPWUuYmVhcmluZ1NuYXAsdGhpcy5fcmVmcmVzaEV4cGlyZWRUaWxlcz1lLnJlZnJlc2hFeHBpcmVkVGlsZXMsdGhpcy5fZmFkZUR1cmF0aW9uPWUuZmFkZUR1cmF0aW9uLHRoaXMuX2Nyb3NzRmFkaW5nRmFjdG9yPTEsdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nPWUuY29sbGVjdFJlc291cmNlVGltaW5nLHRoaXMuX3JlbmRlclRhc2tRdWV1ZT1uZXcgb247dmFyIGk9ZS50cmFuc2Zvcm1SZXF1ZXN0O2lmKHRoaXMuX3RyYW5zZm9ybVJlcXVlc3Q9aT9mdW5jdGlvbih0LGUpe3JldHVybiBpKHQsZSl8fHt1cmw6dH19OmZ1bmN0aW9uKHQpe3JldHVybnt1cmw6dH19LFwic3RyaW5nXCI9PXR5cGVvZiBlLmNvbnRhaW5lcil7dmFyIGE9dC5kZWZhdWx0LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUuY29udGFpbmVyKTtpZighYSl0aHJvdyBuZXcgRXJyb3IoXCJDb250YWluZXIgJ1wiK2UuY29udGFpbmVyK1wiJyBub3QgZm91bmQuXCIpO3RoaXMuX2NvbnRhaW5lcj1hfWVsc2V7aWYoIShlLmNvbnRhaW5lciBpbnN0YW5jZW9mIGxuKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHR5cGU6ICdjb250YWluZXInIG11c3QgYmUgYSBTdHJpbmcgb3IgSFRNTEVsZW1lbnQuXCIpO3RoaXMuX2NvbnRhaW5lcj1lLmNvbnRhaW5lcn1lLm1heEJvdW5kcyYmdGhpcy5zZXRNYXhCb3VuZHMoZS5tYXhCb3VuZHMpLHQuYmluZEFsbChbXCJfb25XaW5kb3dPbmxpbmVcIixcIl9vbldpbmRvd1Jlc2l6ZVwiLFwiX2NvbnRleHRMb3N0XCIsXCJfY29udGV4dFJlc3RvcmVkXCIsXCJfdXBkYXRlXCIsXCJfcmVuZGVyXCIsXCJfb25EYXRhXCIsXCJfb25EYXRhTG9hZGluZ1wiXSx0aGlzKSx0aGlzLl9zZXR1cENvbnRhaW5lcigpLHRoaXMuX3NldHVwUGFpbnRlcigpLHRoaXMub24oXCJtb3ZlXCIsdGhpcy5fdXBkYXRlLmJpbmQodGhpcywhMSkpLHRoaXMub24oXCJ6b29tXCIsdGhpcy5fdXBkYXRlLmJpbmQodGhpcywhMCkpLHZvaWQgMCE9PXQuZGVmYXVsdCYmKHQuZGVmYXVsdC5hZGRFdmVudExpc3RlbmVyKFwib25saW5lXCIsdGhpcy5fb25XaW5kb3dPbmxpbmUsITEpLHQuZGVmYXVsdC5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdGhpcy5fb25XaW5kb3dSZXNpemUsITEpKSxmdW5jdGlvbih0LGUpe3ZhciByPXQuZ2V0Q2FudmFzQ29udGFpbmVyKCksbj1udWxsLGk9ITE7Zm9yKHZhciBhIGluIGVuKXRbYV09bmV3IGVuW2FdKHQsZSksZS5pbnRlcmFjdGl2ZSYmZVthXSYmdFthXS5lbmFibGUoZVthXSk7cy5hZGRFdmVudExpc3RlbmVyKHIsXCJtb3VzZW91dFwiLGZ1bmN0aW9uKGUpe3QuZmlyZShuZXcgVnIoXCJtb3VzZW91dFwiLHQsZSkpfSkscy5hZGRFdmVudExpc3RlbmVyKHIsXCJtb3VzZWRvd25cIixmdW5jdGlvbihyKXtpPSEwO3ZhciBuPW5ldyBWcihcIm1vdXNlZG93blwiLHQscik7dC5maXJlKG4pLG4uZGVmYXVsdFByZXZlbnRlZHx8KGUuaW50ZXJhY3RpdmUmJiF0LmRvdWJsZUNsaWNrWm9vbS5pc0FjdGl2ZSgpJiZ0LnN0b3AoKSx0LmJveFpvb20ub25Nb3VzZURvd24ociksdC5ib3hab29tLmlzQWN0aXZlKCl8fHQuZHJhZ1Bhbi5pc0FjdGl2ZSgpfHx0LmRyYWdSb3RhdGUub25Nb3VzZURvd24ociksdC5ib3hab29tLmlzQWN0aXZlKCl8fHQuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpfHx0LmRyYWdQYW4ub25Nb3VzZURvd24ocikpfSkscy5hZGRFdmVudExpc3RlbmVyKHIsXCJtb3VzZXVwXCIsZnVuY3Rpb24oZSl7dmFyIHI9dC5kcmFnUm90YXRlLmlzQWN0aXZlKCk7biYmIXImJnQuZmlyZShuZXcgVnIoXCJjb250ZXh0bWVudVwiLHQsbikpLG49bnVsbCxpPSExLHQuZmlyZShuZXcgVnIoXCJtb3VzZXVwXCIsdCxlKSl9KSxzLmFkZEV2ZW50TGlzdGVuZXIocixcIm1vdXNlbW92ZVwiLGZ1bmN0aW9uKGUpe2lmKCF0LmRyYWdQYW4uaXNBY3RpdmUoKSYmIXQuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpKXtmb3IodmFyIG49ZS50b0VsZW1lbnR8fGUudGFyZ2V0O24mJm4hPT1yOyluPW4ucGFyZW50Tm9kZTtuPT09ciYmdC5maXJlKG5ldyBWcihcIm1vdXNlbW92ZVwiLHQsZSkpfX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLFwibW91c2VvdmVyXCIsZnVuY3Rpb24oZSl7Zm9yKHZhciBuPWUudG9FbGVtZW50fHxlLnRhcmdldDtuJiZuIT09cjspbj1uLnBhcmVudE5vZGU7bj09PXImJnQuZmlyZShuZXcgVnIoXCJtb3VzZW92ZXJcIix0LGUpKX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLFwidG91Y2hzdGFydFwiLGZ1bmN0aW9uKHIpe3ZhciBuPW5ldyBVcihcInRvdWNoc3RhcnRcIix0LHIpO3QuZmlyZShuKSxuLmRlZmF1bHRQcmV2ZW50ZWR8fChlLmludGVyYWN0aXZlJiZ0LnN0b3AoKSx0LmJveFpvb20uaXNBY3RpdmUoKXx8dC5kcmFnUm90YXRlLmlzQWN0aXZlKCl8fHQuZHJhZ1Bhbi5vblRvdWNoU3RhcnQociksdC50b3VjaFpvb21Sb3RhdGUub25TdGFydChyKSx0LmRvdWJsZUNsaWNrWm9vbS5vblRvdWNoU3RhcnQobikpfSx7cGFzc2l2ZTohMX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLFwidG91Y2htb3ZlXCIsZnVuY3Rpb24oZSl7dC5maXJlKG5ldyBVcihcInRvdWNobW92ZVwiLHQsZSkpfSx7cGFzc2l2ZTohMX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLFwidG91Y2hlbmRcIixmdW5jdGlvbihlKXt0LmZpcmUobmV3IFVyKFwidG91Y2hlbmRcIix0LGUpKX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLFwidG91Y2hjYW5jZWxcIixmdW5jdGlvbihlKXt0LmZpcmUobmV3IFVyKFwidG91Y2hjYW5jZWxcIix0LGUpKX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLFwiY2xpY2tcIixmdW5jdGlvbihlKXt0LmZpcmUobmV3IFZyKFwiY2xpY2tcIix0LGUpKX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLFwiZGJsY2xpY2tcIixmdW5jdGlvbihlKXt2YXIgcj1uZXcgVnIoXCJkYmxjbGlja1wiLHQsZSk7dC5maXJlKHIpLHIuZGVmYXVsdFByZXZlbnRlZHx8dC5kb3VibGVDbGlja1pvb20ub25EYmxDbGljayhyKX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLFwiY29udGV4dG1lbnVcIixmdW5jdGlvbihlKXt2YXIgcj10LmRyYWdSb3RhdGUuaXNBY3RpdmUoKTtpfHxyP2kmJihuPWUpOnQuZmlyZShuZXcgVnIoXCJjb250ZXh0bWVudVwiLHQsZSkpLGUucHJldmVudERlZmF1bHQoKX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLFwid2hlZWxcIixmdW5jdGlvbihlKXt2YXIgcj1uZXcgcXIoXCJ3aGVlbFwiLHQsZSk7dC5maXJlKHIpLHIuZGVmYXVsdFByZXZlbnRlZHx8dC5zY3JvbGxab29tLm9uV2hlZWwoZSl9LHtwYXNzaXZlOiExfSl9KHRoaXMsZSksdGhpcy5faGFzaD1lLmhhc2gmJihuZXcganIpLmFkZFRvKHRoaXMpLHRoaXMuX2hhc2gmJnRoaXMuX2hhc2guX29uSGFzaENoYW5nZSgpfHx0aGlzLmp1bXBUbyh7Y2VudGVyOmUuY2VudGVyLHpvb206ZS56b29tLGJlYXJpbmc6ZS5iZWFyaW5nLHBpdGNoOmUucGl0Y2h9KSx0aGlzLnJlc2l6ZSgpLGUuc3R5bGUmJnRoaXMuc2V0U3R5bGUoZS5zdHlsZSx7bG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5OmUubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5fSksZS5hdHRyaWJ1dGlvbkNvbnRyb2wmJnRoaXMuYWRkQ29udHJvbChuZXcgbm4pLHRoaXMuYWRkQ29udHJvbChuZXcgYW4sZS5sb2dvUG9zaXRpb24pLHRoaXMub24oXCJzdHlsZS5sb2FkXCIsZnVuY3Rpb24oKXt0aGlzLnRyYW5zZm9ybS51bm1vZGlmaWVkJiZ0aGlzLmp1bXBUbyh0aGlzLnN0eWxlLnN0eWxlc2hlZXQpfSksdGhpcy5vbihcImRhdGFcIix0aGlzLl9vbkRhdGEpLHRoaXMub24oXCJkYXRhbG9hZGluZ1wiLHRoaXMuX29uRGF0YUxvYWRpbmcpfXImJihuLl9fcHJvdG9fXz1yKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHImJnIucHJvdG90eXBlKSxuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uO3ZhciBpPXtzaG93VGlsZUJvdW5kYXJpZXM6e2NvbmZpZ3VyYWJsZTohMH0sc2hvd0NvbGxpc2lvbkJveGVzOntjb25maWd1cmFibGU6ITB9LHNob3dPdmVyZHJhd0luc3BlY3Rvcjp7Y29uZmlndXJhYmxlOiEwfSxyZXBhaW50Ontjb25maWd1cmFibGU6ITB9LHZlcnRpY2VzOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gbi5wcm90b3R5cGUuYWRkQ29udHJvbD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJnQuZ2V0RGVmYXVsdFBvc2l0aW9uJiYoZT10LmdldERlZmF1bHRQb3NpdGlvbigpKSx2b2lkIDA9PT1lJiYoZT1cInRvcC1yaWdodFwiKTt2YXIgcj10Lm9uQWRkKHRoaXMpLG49dGhpcy5fY29udHJvbFBvc2l0aW9uc1tlXTtyZXR1cm4tMSE9PWUuaW5kZXhPZihcImJvdHRvbVwiKT9uLmluc2VydEJlZm9yZShyLG4uZmlyc3RDaGlsZCk6bi5hcHBlbmRDaGlsZChyKSx0aGlzfSxuLnByb3RvdHlwZS5yZW1vdmVDb250cm9sPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm9uUmVtb3ZlKHRoaXMpLHRoaXN9LG4ucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzLl9jb250YWluZXJEaW1lbnNpb25zKCksbj1yWzBdLGk9clsxXTtyZXR1cm4gdGhpcy5fcmVzaXplQ2FudmFzKG4saSksdGhpcy50cmFuc2Zvcm0ucmVzaXplKG4saSksdGhpcy5wYWludGVyLnJlc2l6ZShuLGkpLHRoaXMuZmlyZShuZXcgdC5FdmVudChcIm1vdmVzdGFydFwiLGUpKS5maXJlKG5ldyB0LkV2ZW50KFwibW92ZVwiLGUpKS5maXJlKG5ldyB0LkV2ZW50KFwicmVzaXplXCIsZSkpLmZpcmUobmV3IHQuRXZlbnQoXCJtb3ZlZW5kXCIsZSkpfSxuLnByb3RvdHlwZS5nZXRCb3VuZHM9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgWSh0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKG5ldyB0LmRlZmF1bHQkMSgwLHRoaXMudHJhbnNmb3JtLmhlaWdodCkpLHRoaXMudHJhbnNmb3JtLnBvaW50TG9jYXRpb24obmV3IHQuZGVmYXVsdCQxKHRoaXMudHJhbnNmb3JtLndpZHRoLDApKSk7cmV0dXJuKHRoaXMudHJhbnNmb3JtLmFuZ2xlfHx0aGlzLnRyYW5zZm9ybS5waXRjaCkmJihlLmV4dGVuZCh0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKG5ldyB0LmRlZmF1bHQkMSh0aGlzLnRyYW5zZm9ybS5zaXplLngsMCkpKSxlLmV4dGVuZCh0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKG5ldyB0LmRlZmF1bHQkMSgwLHRoaXMudHJhbnNmb3JtLnNpemUueSkpKSksZX0sbi5wcm90b3R5cGUuZ2V0TWF4Qm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLmxhdFJhbmdlJiYyPT09dGhpcy50cmFuc2Zvcm0ubGF0UmFuZ2UubGVuZ3RoJiZ0aGlzLnRyYW5zZm9ybS5sbmdSYW5nZSYmMj09PXRoaXMudHJhbnNmb3JtLmxuZ1JhbmdlLmxlbmd0aD9uZXcgWShbdGhpcy50cmFuc2Zvcm0ubG5nUmFuZ2VbMF0sdGhpcy50cmFuc2Zvcm0ubGF0UmFuZ2VbMF1dLFt0aGlzLnRyYW5zZm9ybS5sbmdSYW5nZVsxXSx0aGlzLnRyYW5zZm9ybS5sYXRSYW5nZVsxXV0pOm51bGx9LG4ucHJvdG90eXBlLnNldE1heEJvdW5kcz1mdW5jdGlvbih0KXtpZih0KXt2YXIgZT1ZLmNvbnZlcnQodCk7dGhpcy50cmFuc2Zvcm0ubG5nUmFuZ2U9W2UuZ2V0V2VzdCgpLGUuZ2V0RWFzdCgpXSx0aGlzLnRyYW5zZm9ybS5sYXRSYW5nZT1bZS5nZXRTb3V0aCgpLGUuZ2V0Tm9ydGgoKV0sdGhpcy50cmFuc2Zvcm0uX2NvbnN0cmFpbigpLHRoaXMuX3VwZGF0ZSgpfWVsc2UgbnVsbD09dCYmKHRoaXMudHJhbnNmb3JtLmxuZ1JhbmdlPW51bGwsdGhpcy50cmFuc2Zvcm0ubGF0UmFuZ2U9bnVsbCx0aGlzLl91cGRhdGUoKSk7cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLnNldE1pblpvb209ZnVuY3Rpb24odCl7aWYoKHQ9bnVsbD09dD8wOnQpPj0wJiZ0PD10aGlzLnRyYW5zZm9ybS5tYXhab29tKXJldHVybiB0aGlzLnRyYW5zZm9ybS5taW5ab29tPXQsdGhpcy5fdXBkYXRlKCksdGhpcy5nZXRab29tKCk8dCYmdGhpcy5zZXRab29tKHQpLHRoaXM7dGhyb3cgbmV3IEVycm9yKFwibWluWm9vbSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgdGhlIGN1cnJlbnQgbWF4Wm9vbSwgaW5jbHVzaXZlXCIpfSxuLnByb3RvdHlwZS5nZXRNaW5ab29tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLm1pblpvb219LG4ucHJvdG90eXBlLnNldE1heFpvb209ZnVuY3Rpb24odCl7aWYoKHQ9bnVsbD09dD8yMjp0KT49dGhpcy50cmFuc2Zvcm0ubWluWm9vbSlyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWF4Wm9vbT10LHRoaXMuX3VwZGF0ZSgpLHRoaXMuZ2V0Wm9vbSgpPnQmJnRoaXMuc2V0Wm9vbSh0KSx0aGlzO3Rocm93IG5ldyBFcnJvcihcIm1heFpvb20gbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgbWluWm9vbVwiKX0sbi5wcm90b3R5cGUuZ2V0UmVuZGVyV29ybGRDb3BpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXN9LG4ucHJvdG90eXBlLnNldFJlbmRlcldvcmxkQ29waWVzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5yZW5kZXJXb3JsZENvcGllcz10LHRoaXMuX3VwZGF0ZSgpLHRoaXN9LG4ucHJvdG90eXBlLmdldE1heFpvb209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWF4Wm9vbX0sbi5wcm90b3R5cGUucHJvamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubG9jYXRpb25Qb2ludChHLmNvbnZlcnQodCkpfSxuLnByb3RvdHlwZS51bnByb2plY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnBvaW50TG9jYXRpb24odC5kZWZhdWx0JDEuY29udmVydChlKSl9LG4ucHJvdG90eXBlLmlzTW92aW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vdmluZ3x8dGhpcy5kcmFnUGFuLmlzQWN0aXZlKCl8fHRoaXMuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpfHx0aGlzLnNjcm9sbFpvb20uaXNBY3RpdmUoKX0sbi5wcm90b3R5cGUuaXNab29taW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pvb21pbmd8fHRoaXMuc2Nyb2xsWm9vbS5pc0FjdGl2ZSgpfSxuLnByb3RvdHlwZS5pc1JvdGF0aW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdGF0aW5nfHx0aGlzLmRyYWdSb3RhdGUuaXNBY3RpdmUoKX0sbi5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGE9dGhpcztpZih2b2lkIDA9PT1uKXJldHVybiByLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsdCxlKTt2YXIgbz1mdW5jdGlvbigpe2lmKFwibW91c2VlbnRlclwiPT09dHx8XCJtb3VzZW92ZXJcIj09PXQpe3ZhciByPSExO3JldHVybntsYXllcjplLGxpc3RlbmVyOm4sZGVsZWdhdGVzOnttb3VzZW1vdmU6ZnVuY3Rpb24oaSl7dmFyIG89YS5nZXRMYXllcihlKT9hLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhpLnBvaW50LHtsYXllcnM6W2VdfSk6W107by5sZW5ndGg/cnx8KHI9ITAsbi5jYWxsKGEsbmV3IFZyKHQsYSxpLm9yaWdpbmFsRXZlbnQse2ZlYXR1cmVzOm99KSkpOnI9ITF9LG1vdXNlb3V0OmZ1bmN0aW9uKCl7cj0hMX19fX1pZihcIm1vdXNlbGVhdmVcIj09PXR8fFwibW91c2VvdXRcIj09PXQpe3ZhciBvPSExO3JldHVybntsYXllcjplLGxpc3RlbmVyOm4sZGVsZWdhdGVzOnttb3VzZW1vdmU6ZnVuY3Rpb24ocil7KGEuZ2V0TGF5ZXIoZSk/YS5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoci5wb2ludCx7bGF5ZXJzOltlXX0pOltdKS5sZW5ndGg/bz0hMDpvJiYobz0hMSxuLmNhbGwoYSxuZXcgVnIodCxhLHIub3JpZ2luYWxFdmVudCkpKX0sbW91c2VvdXQ6ZnVuY3Rpb24oZSl7byYmKG89ITEsbi5jYWxsKGEsbmV3IFZyKHQsYSxlLm9yaWdpbmFsRXZlbnQpKSl9fX19cmV0dXJue2xheWVyOmUsbGlzdGVuZXI6bixkZWxlZ2F0ZXM6KGk9e30saVt0XT1mdW5jdGlvbih0KXt2YXIgcj1hLmdldExheWVyKGUpP2EucXVlcnlSZW5kZXJlZEZlYXR1cmVzKHQucG9pbnQse2xheWVyczpbZV19KTpbXTtyLmxlbmd0aCYmKHQuZmVhdHVyZXM9cixuLmNhbGwoYSx0KSxkZWxldGUgdC5mZWF0dXJlcyl9LGkpfX0oKTtmb3IodmFyIHMgaW4gdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzPXRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc3x8e30sdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3RdPXRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0XXx8W10sdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3RdLnB1c2gobyksby5kZWxlZ2F0ZXMpYS5vbihzLG8uZGVsZWdhdGVzW3NdKTtyZXR1cm4gdGhpc30sbi5wcm90b3R5cGUub2ZmPWZ1bmN0aW9uKHQsZSxuKXtpZih2b2lkIDA9PT1uKXJldHVybiByLnByb3RvdHlwZS5vZmYuY2FsbCh0aGlzLHQsZSk7aWYodGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzJiZ0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdF0pZm9yKHZhciBpPXRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0XSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV07aWYoby5sYXllcj09PWUmJm8ubGlzdGVuZXI9PT1uKXtmb3IodmFyIHMgaW4gby5kZWxlZ2F0ZXMpdGhpcy5vZmYocyxvLmRlbGVnYXRlc1tzXSk7cmV0dXJuIGkuc3BsaWNlKGEsMSksdGhpc319cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcz1mdW5jdGlvbihlLHIpe3ZhciBuO3JldHVybiAyPT09YXJndW1lbnRzLmxlbmd0aD8oZT1hcmd1bWVudHNbMF0scj1hcmd1bWVudHNbMV0pOjE9PT1hcmd1bWVudHMubGVuZ3RoJiYoKG49YXJndW1lbnRzWzBdKWluc3RhbmNlb2YgdC5kZWZhdWx0JDF8fEFycmF5LmlzQXJyYXkobikpPyhlPWFyZ3VtZW50c1swXSxyPXt9KToxPT09YXJndW1lbnRzLmxlbmd0aD8oZT12b2lkIDAscj1hcmd1bWVudHNbMF0pOihlPXZvaWQgMCxyPXt9KSx0aGlzLnN0eWxlP3RoaXMuc3R5bGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzKHRoaXMuX21ha2VRdWVyeUdlb21ldHJ5KGUpLHIsdGhpcy50cmFuc2Zvcm0pOltdfSxuLnByb3RvdHlwZS5fbWFrZVF1ZXJ5R2VvbWV0cnk9ZnVuY3Rpb24oZSl7dmFyIHIsbj10aGlzO2lmKHZvaWQgMD09PWUmJihlPVt0LmRlZmF1bHQkMS5jb252ZXJ0KFswLDBdKSx0LmRlZmF1bHQkMS5jb252ZXJ0KFt0aGlzLnRyYW5zZm9ybS53aWR0aCx0aGlzLnRyYW5zZm9ybS5oZWlnaHRdKV0pLGUgaW5zdGFuY2VvZiB0LmRlZmF1bHQkMXx8XCJudW1iZXJcIj09dHlwZW9mIGVbMF0pcj1bdC5kZWZhdWx0JDEuY29udmVydChlKV07ZWxzZXt2YXIgaT1bdC5kZWZhdWx0JDEuY29udmVydChlWzBdKSx0LmRlZmF1bHQkMS5jb252ZXJ0KGVbMV0pXTtyPVtpWzBdLG5ldyB0LmRlZmF1bHQkMShpWzFdLngsaVswXS55KSxpWzFdLG5ldyB0LmRlZmF1bHQkMShpWzBdLngsaVsxXS55KSxpWzBdXX1yZXR1cm57dmlld3BvcnQ6cix3b3JsZENvb3JkaW5hdGU6ci5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIG4udHJhbnNmb3JtLnBvaW50Q29vcmRpbmF0ZSh0KX0pfX0sbi5wcm90b3R5cGUucXVlcnlTb3VyY2VGZWF0dXJlcz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLnF1ZXJ5U291cmNlRmVhdHVyZXModCxlKX0sbi5wcm90b3R5cGUuc2V0U3R5bGU9ZnVuY3Rpb24oZSxyKXtpZigoIXJ8fCExIT09ci5kaWZmJiYhci5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHkpJiZ0aGlzLnN0eWxlJiZlJiZcIm9iamVjdFwiPT10eXBlb2YgZSl0cnl7cmV0dXJuIHRoaXMuc3R5bGUuc2V0U3RhdGUoZSkmJnRoaXMuX3VwZGF0ZSghMCksdGhpc31jYXRjaChlKXt0Lndhcm5PbmNlKFwiVW5hYmxlIHRvIHBlcmZvcm0gc3R5bGUgZGlmZjogXCIrKGUubWVzc2FnZXx8ZS5lcnJvcnx8ZSkrXCIuICBSZWJ1aWxkaW5nIHRoZSBzdHlsZSBmcm9tIHNjcmF0Y2guXCIpfXJldHVybiB0aGlzLnN0eWxlJiYodGhpcy5zdHlsZS5zZXRFdmVudGVkUGFyZW50KG51bGwpLHRoaXMuc3R5bGUuX3JlbW92ZSgpKSxlPyh0aGlzLnN0eWxlPW5ldyBKZSh0aGlzLHJ8fHt9KSx0aGlzLnN0eWxlLnNldEV2ZW50ZWRQYXJlbnQodGhpcyx7c3R5bGU6dGhpcy5zdHlsZX0pLFwic3RyaW5nXCI9PXR5cGVvZiBlP3RoaXMuc3R5bGUubG9hZFVSTChlKTp0aGlzLnN0eWxlLmxvYWRKU09OKGUpLHRoaXMpOihkZWxldGUgdGhpcy5zdHlsZSx0aGlzKX0sbi5wcm90b3R5cGUuZ2V0U3R5bGU9ZnVuY3Rpb24oKXtpZih0aGlzLnN0eWxlKXJldHVybiB0aGlzLnN0eWxlLnNlcmlhbGl6ZSgpfSxuLnByb3RvdHlwZS5pc1N0eWxlTG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3R5bGU/dGhpcy5zdHlsZS5sb2FkZWQoKTp0Lndhcm5PbmNlKFwiVGhlcmUgaXMgbm8gc3R5bGUgYWRkZWQgdG8gdGhlIG1hcC5cIil9LG4ucHJvdG90eXBlLmFkZFNvdXJjZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLmFkZFNvdXJjZSh0LGUpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sbi5wcm90b3R5cGUuaXNTb3VyY2VMb2FkZWQ9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5zdHlsZSYmdGhpcy5zdHlsZS5zb3VyY2VDYWNoZXNbZV07aWYodm9pZCAwIT09cilyZXR1cm4gci5sb2FkZWQoKTt0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoXCJUaGVyZSBpcyBubyBzb3VyY2Ugd2l0aCBJRCAnXCIrZStcIidcIikpKX0sbi5wcm90b3R5cGUuYXJlVGlsZXNMb2FkZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnN0eWxlJiZ0aGlzLnN0eWxlLnNvdXJjZUNhY2hlcztmb3IodmFyIGUgaW4gdCl7dmFyIHI9dFtlXS5fdGlsZXM7Zm9yKHZhciBuIGluIHIpe3ZhciBpPXJbbl07aWYoXCJsb2FkZWRcIiE9PWkuc3RhdGUmJlwiZXJyb3JlZFwiIT09aS5zdGF0ZSlyZXR1cm4hMX19cmV0dXJuITB9LG4ucHJvdG90eXBlLmFkZFNvdXJjZVR5cGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLnN0eWxlLmFkZFNvdXJjZVR5cGUodCxlLHIpfSxuLnByb3RvdHlwZS5yZW1vdmVTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUucmVtb3ZlU291cmNlKHQpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sbi5wcm90b3R5cGUuZ2V0U291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLmdldFNvdXJjZSh0KX0sbi5wcm90b3R5cGUuYWRkSW1hZ2U9ZnVuY3Rpb24oZSxyLG4pe3ZvaWQgMD09PW4mJihuPXt9KTt2YXIgaT1uLnBpeGVsUmF0aW87dm9pZCAwPT09aSYmKGk9MSk7dmFyIG89bi5zZGY7aWYodm9pZCAwPT09byYmKG89ITEpLHIgaW5zdGFuY2VvZiBzbil7dmFyIHM9YS5nZXRJbWFnZURhdGEociksbD1zLndpZHRoLGM9cy5oZWlnaHQsdT1zLmRhdGE7dGhpcy5zdHlsZS5hZGRJbWFnZShlLHtkYXRhOm5ldyB0LlJHQkFJbWFnZSh7d2lkdGg6bCxoZWlnaHQ6Y30sdSkscGl4ZWxSYXRpbzppLHNkZjpvfSl9ZWxzZXtpZih2b2lkIDA9PT1yLndpZHRofHx2b2lkIDA9PT1yLmhlaWdodClyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKFwiSW52YWxpZCBhcmd1bWVudHMgdG8gbWFwLmFkZEltYWdlKCkuIFRoZSBzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBhbiBgSFRNTEltYWdlRWxlbWVudGAsIGBJbWFnZURhdGFgLCBvciBvYmplY3Qgd2l0aCBgd2lkdGhgLCBgaGVpZ2h0YCwgYW5kIGBkYXRhYCBwcm9wZXJ0aWVzIHdpdGggdGhlIHNhbWUgZm9ybWF0IGFzIGBJbWFnZURhdGFgXCIpKSk7dmFyIGg9ci53aWR0aCxmPXIuaGVpZ2h0LHA9ci5kYXRhO3RoaXMuc3R5bGUuYWRkSW1hZ2UoZSx7ZGF0YTpuZXcgdC5SR0JBSW1hZ2Uoe3dpZHRoOmgsaGVpZ2h0OmZ9LHAuc2xpY2UoMCkpLHBpeGVsUmF0aW86aSxzZGY6b30pfX0sbi5wcm90b3R5cGUuaGFzSW1hZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ISF0aGlzLnN0eWxlLmdldEltYWdlKGUpOih0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoXCJNaXNzaW5nIHJlcXVpcmVkIGltYWdlIGlkXCIpKSksITEpfSxuLnByb3RvdHlwZS5yZW1vdmVJbWFnZT1mdW5jdGlvbih0KXt0aGlzLnN0eWxlLnJlbW92ZUltYWdlKHQpfSxuLnByb3RvdHlwZS5sb2FkSW1hZ2U9ZnVuY3Rpb24oZSxyKXt0LmdldEltYWdlKHRoaXMuX3RyYW5zZm9ybVJlcXVlc3QoZSx0LlJlc291cmNlVHlwZS5JbWFnZSkscil9LG4ucHJvdG90eXBlLmFkZExheWVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUuYWRkTGF5ZXIodCxlKSx0aGlzLl91cGRhdGUoITApLHRoaXN9LG4ucHJvdG90eXBlLm1vdmVMYXllcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLm1vdmVMYXllcih0LGUpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sbi5wcm90b3R5cGUucmVtb3ZlTGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUucmVtb3ZlTGF5ZXIodCksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxuLnByb3RvdHlwZS5nZXRMYXllcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRMYXllcih0KX0sbi5wcm90b3R5cGUuc2V0RmlsdGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUuc2V0RmlsdGVyKHQsZSksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxuLnByb3RvdHlwZS5zZXRMYXllclpvb21SYW5nZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuc3R5bGUuc2V0TGF5ZXJab29tUmFuZ2UodCxlLHIpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sbi5wcm90b3R5cGUuZ2V0RmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLmdldEZpbHRlcih0KX0sbi5wcm90b3R5cGUuc2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuc3R5bGUuc2V0UGFpbnRQcm9wZXJ0eSh0LGUsciksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxuLnByb3RvdHlwZS5nZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0UGFpbnRQcm9wZXJ0eSh0LGUpfSxuLnByb3RvdHlwZS5zZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuc3R5bGUuc2V0TGF5b3V0UHJvcGVydHkodCxlLHIpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sbi5wcm90b3R5cGUuZ2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRMYXlvdXRQcm9wZXJ0eSh0LGUpfSxuLnByb3RvdHlwZS5zZXRMaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5zZXRMaWdodCh0KSx0aGlzLl91cGRhdGUoITApLHRoaXN9LG4ucHJvdG90eXBlLmdldExpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0TGlnaHQoKX0sbi5wcm90b3R5cGUuZ2V0Q29udGFpbmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sbi5wcm90b3R5cGUuZ2V0Q2FudmFzQ29udGFpbmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbnZhc0NvbnRhaW5lcn0sbi5wcm90b3R5cGUuZ2V0Q2FudmFzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbnZhc30sbi5wcm90b3R5cGUuX2NvbnRhaW5lckRpbWVuc2lvbnM9ZnVuY3Rpb24oKXt2YXIgdD0wLGU9MDtyZXR1cm4gdGhpcy5fY29udGFpbmVyJiYodD10aGlzLl9jb250YWluZXIub2Zmc2V0V2lkdGh8fDQwMCxlPXRoaXMuX2NvbnRhaW5lci5vZmZzZXRIZWlnaHR8fDMwMCksW3QsZV19LG4ucHJvdG90eXBlLl9zZXR1cENvbnRhaW5lcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRhaW5lcjt0LmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1tYXBcIiksKHRoaXMuX21pc3NpbmdDU1NDb250YWluZXI9cy5jcmVhdGUoXCJkaXZcIixcIm1hcGJveGdsLW1pc3NpbmctY3NzXCIsdCkpLmlubmVySFRNTD1cIk1pc3NpbmcgTWFwYm94IEdMIEpTIENTU1wiO3ZhciBlPXRoaXMuX2NhbnZhc0NvbnRhaW5lcj1zLmNyZWF0ZShcImRpdlwiLFwibWFwYm94Z2wtY2FudmFzLWNvbnRhaW5lclwiLHQpO3RoaXMuX2ludGVyYWN0aXZlJiZlLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1pbnRlcmFjdGl2ZVwiKSx0aGlzLl9jYW52YXM9cy5jcmVhdGUoXCJjYW52YXNcIixcIm1hcGJveGdsLWNhbnZhc1wiLGUpLHRoaXMuX2NhbnZhcy5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsdGhpcy5fY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoXCJ3ZWJnbGNvbnRleHRsb3N0XCIsdGhpcy5fY29udGV4dExvc3QsITEpLHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKFwid2ViZ2xjb250ZXh0cmVzdG9yZWRcIix0aGlzLl9jb250ZXh0UmVzdG9yZWQsITEpLHRoaXMuX2NhbnZhcy5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLFwiMFwiKSx0aGlzLl9jYW52YXMuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLFwiTWFwXCIpO3ZhciByPXRoaXMuX2NvbnRhaW5lckRpbWVuc2lvbnMoKTt0aGlzLl9yZXNpemVDYW52YXMoclswXSxyWzFdKTt2YXIgbj10aGlzLl9jb250cm9sQ29udGFpbmVyPXMuY3JlYXRlKFwiZGl2XCIsXCJtYXBib3hnbC1jb250cm9sLWNvbnRhaW5lclwiLHQpLGk9dGhpcy5fY29udHJvbFBvc2l0aW9ucz17fTtbXCJ0b3AtbGVmdFwiLFwidG9wLXJpZ2h0XCIsXCJib3R0b20tbGVmdFwiLFwiYm90dG9tLXJpZ2h0XCJdLmZvckVhY2goZnVuY3Rpb24odCl7aVt0XT1zLmNyZWF0ZShcImRpdlwiLFwibWFwYm94Z2wtY3RybC1cIit0LG4pfSl9LG4ucHJvdG90eXBlLl9yZXNpemVDYW52YXM9ZnVuY3Rpb24oZSxyKXt2YXIgbj10LmRlZmF1bHQuZGV2aWNlUGl4ZWxSYXRpb3x8MTt0aGlzLl9jYW52YXMud2lkdGg9biplLHRoaXMuX2NhbnZhcy5oZWlnaHQ9bipyLHRoaXMuX2NhbnZhcy5zdHlsZS53aWR0aD1lK1wicHhcIix0aGlzLl9jYW52YXMuc3R5bGUuaGVpZ2h0PXIrXCJweFwifSxuLnByb3RvdHlwZS5fc2V0dXBQYWludGVyPWZ1bmN0aW9uKCl7dmFyIHI9dC5leHRlbmQoe2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6dGhpcy5fZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6dGhpcy5fcHJlc2VydmVEcmF3aW5nQnVmZmVyfSxlLndlYkdMQ29udGV4dEF0dHJpYnV0ZXMpLG49dGhpcy5fY2FudmFzLmdldENvbnRleHQoXCJ3ZWJnbFwiLHIpfHx0aGlzLl9jYW52YXMuZ2V0Q29udGV4dChcImV4cGVyaW1lbnRhbC13ZWJnbFwiLHIpO24/dGhpcy5wYWludGVyPW5ldyB6cihuLHRoaXMudHJhbnNmb3JtKTp0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBXZWJHTFwiKSkpfSxuLnByb3RvdHlwZS5fY29udGV4dExvc3Q9ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZyYW1lSWQmJihhLmNhbmNlbEZyYW1lKHRoaXMuX2ZyYW1lSWQpLHRoaXMuX2ZyYW1lSWQ9bnVsbCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwid2ViZ2xjb250ZXh0bG9zdFwiLHtvcmlnaW5hbEV2ZW50OmV9KSl9LG4ucHJvdG90eXBlLl9jb250ZXh0UmVzdG9yZWQ9ZnVuY3Rpb24oZSl7dGhpcy5fc2V0dXBQYWludGVyKCksdGhpcy5yZXNpemUoKSx0aGlzLl91cGRhdGUoKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJ3ZWJnbGNvbnRleHRyZXN0b3JlZFwiLHtvcmlnaW5hbEV2ZW50OmV9KSl9LG4ucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe3JldHVybiF0aGlzLl9zdHlsZURpcnR5JiYhdGhpcy5fc291cmNlc0RpcnR5JiYhKCF0aGlzLnN0eWxlfHwhdGhpcy5zdHlsZS5sb2FkZWQoKSl9LG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7dGhpcy5zdHlsZSYmKHRoaXMuX3N0eWxlRGlydHk9dGhpcy5fc3R5bGVEaXJ0eXx8dCx0aGlzLl9zb3VyY2VzRGlydHk9ITAsdGhpcy5fcmVyZW5kZXIoKSl9LG4ucHJvdG90eXBlLl9yZXF1ZXN0UmVuZGVyRnJhbWU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3VwZGF0ZSgpLHRoaXMuX3JlbmRlclRhc2tRdWV1ZS5hZGQodCl9LG4ucHJvdG90eXBlLl9jYW5jZWxSZW5kZXJGcmFtZT1mdW5jdGlvbih0KXt0aGlzLl9yZW5kZXJUYXNrUXVldWUucmVtb3ZlKHQpfSxuLnByb3RvdHlwZS5fcmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyVGFza1F1ZXVlLnJ1bigpO3ZhciBlPSExO2lmKHRoaXMuc3R5bGUmJnRoaXMuX3N0eWxlRGlydHkpe3RoaXMuX3N0eWxlRGlydHk9ITE7dmFyIHI9dGhpcy50cmFuc2Zvcm0uem9vbSxuPWEubm93KCk7dGhpcy5zdHlsZS56b29tSGlzdG9yeS51cGRhdGUocixuKTt2YXIgaT1uZXcgdC5kZWZhdWx0JDE2KHIse25vdzpuLGZhZGVEdXJhdGlvbjp0aGlzLl9mYWRlRHVyYXRpb24sem9vbUhpc3Rvcnk6dGhpcy5zdHlsZS56b29tSGlzdG9yeSx0cmFuc2l0aW9uOnRoaXMuc3R5bGUuZ2V0VHJhbnNpdGlvbigpfSksbz1pLmNyb3NzRmFkaW5nRmFjdG9yKCk7MT09PW8mJm89PT10aGlzLl9jcm9zc0ZhZGluZ0ZhY3Rvcnx8KGU9ITAsdGhpcy5fY3Jvc3NGYWRpbmdGYWN0b3I9byksdGhpcy5zdHlsZS51cGRhdGUoaSl9cmV0dXJuIHRoaXMuc3R5bGUmJnRoaXMuX3NvdXJjZXNEaXJ0eSYmKHRoaXMuX3NvdXJjZXNEaXJ0eT0hMSx0aGlzLnN0eWxlLl91cGRhdGVTb3VyY2VzKHRoaXMudHJhbnNmb3JtKSksdGhpcy5fcGxhY2VtZW50RGlydHk9dGhpcy5zdHlsZSYmdGhpcy5zdHlsZS5fdXBkYXRlUGxhY2VtZW50KHRoaXMucGFpbnRlci50cmFuc2Zvcm0sdGhpcy5zaG93Q29sbGlzaW9uQm94ZXMsdGhpcy5fZmFkZUR1cmF0aW9uKSx0aGlzLnBhaW50ZXIucmVuZGVyKHRoaXMuc3R5bGUse3Nob3dUaWxlQm91bmRhcmllczp0aGlzLnNob3dUaWxlQm91bmRhcmllcyxzaG93T3ZlcmRyYXdJbnNwZWN0b3I6dGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yLHJvdGF0aW5nOnRoaXMuaXNSb3RhdGluZygpLHpvb21pbmc6dGhpcy5pc1pvb21pbmcoKSxmYWRlRHVyYXRpb246dGhpcy5fZmFkZUR1cmF0aW9ufSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwicmVuZGVyXCIpKSx0aGlzLmxvYWRlZCgpJiYhdGhpcy5fbG9hZGVkJiYodGhpcy5fbG9hZGVkPSEwLHRoaXMuZmlyZShuZXcgdC5FdmVudChcImxvYWRcIikpKSx0aGlzLnN0eWxlJiYodGhpcy5zdHlsZS5oYXNUcmFuc2l0aW9ucygpfHxlKSYmKHRoaXMuX3N0eWxlRGlydHk9ITApLCh0aGlzLl9zb3VyY2VzRGlydHl8fHRoaXMuX3JlcGFpbnR8fHRoaXMuX3N0eWxlRGlydHl8fHRoaXMuX3BsYWNlbWVudERpcnR5KSYmdGhpcy5fcmVyZW5kZXIoKSx0aGlzfSxuLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9oYXNoJiZ0aGlzLl9oYXNoLnJlbW92ZSgpLGEuY2FuY2VsRnJhbWUodGhpcy5fZnJhbWVJZCksdGhpcy5fcmVuZGVyVGFza1F1ZXVlLmNsZWFyKCksdGhpcy5fZnJhbWVJZD1udWxsLHRoaXMuc2V0U3R5bGUobnVsbCksdm9pZCAwIT09dC5kZWZhdWx0JiYodC5kZWZhdWx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0aGlzLl9vbldpbmRvd1Jlc2l6ZSwhMSksdC5kZWZhdWx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIix0aGlzLl9vbldpbmRvd09ubGluZSwhMSkpO3ZhciBlPXRoaXMucGFpbnRlci5jb250ZXh0LmdsLmdldEV4dGVuc2lvbihcIldFQkdMX2xvc2VfY29udGV4dFwiKTtlJiZlLmxvc2VDb250ZXh0KCksaG4odGhpcy5fY2FudmFzQ29udGFpbmVyKSxobih0aGlzLl9jb250cm9sQ29udGFpbmVyKSxobih0aGlzLl9taXNzaW5nQ1NTQ29udGFpbmVyKSx0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLW1hcFwiKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJyZW1vdmVcIikpfSxuLnByb3RvdHlwZS5fcmVyZW5kZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuc3R5bGUmJiF0aGlzLl9mcmFtZUlkJiYodGhpcy5fZnJhbWVJZD1hLmZyYW1lKGZ1bmN0aW9uKCl7dC5fZnJhbWVJZD1udWxsLHQuX3JlbmRlcigpfSkpfSxuLnByb3RvdHlwZS5fb25XaW5kb3dPbmxpbmU9ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGUoKX0sbi5wcm90b3R5cGUuX29uV2luZG93UmVzaXplPWZ1bmN0aW9uKCl7dGhpcy5fdHJhY2tSZXNpemUmJnRoaXMuc3RvcCgpLnJlc2l6ZSgpLl91cGRhdGUoKX0saS5zaG93VGlsZUJvdW5kYXJpZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9zaG93VGlsZUJvdW5kYXJpZXN9LGkuc2hvd1RpbGVCb3VuZGFyaWVzLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zaG93VGlsZUJvdW5kYXJpZXMhPT10JiYodGhpcy5fc2hvd1RpbGVCb3VuZGFyaWVzPXQsdGhpcy5fdXBkYXRlKCkpfSxpLnNob3dDb2xsaXNpb25Cb3hlcy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3Nob3dDb2xsaXNpb25Cb3hlc30saS5zaG93Q29sbGlzaW9uQm94ZXMuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3Nob3dDb2xsaXNpb25Cb3hlcyE9PXQmJih0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXM9dCx0P3RoaXMuc3R5bGUuX2dlbmVyYXRlQ29sbGlzaW9uQm94ZXMoKTp0aGlzLl91cGRhdGUoKSl9LGkuc2hvd092ZXJkcmF3SW5zcGVjdG9yLmdldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yfSxpLnNob3dPdmVyZHJhd0luc3BlY3Rvci5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yIT09dCYmKHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcj10LHRoaXMuX3VwZGF0ZSgpKX0saS5yZXBhaW50LmdldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fcmVwYWludH0saS5yZXBhaW50LnNldD1mdW5jdGlvbih0KXt0aGlzLl9yZXBhaW50PXQsdGhpcy5fdXBkYXRlKCl9LGkudmVydGljZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl92ZXJ0aWNlc30saS52ZXJ0aWNlcy5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fdmVydGljZXM9dCx0aGlzLl91cGRhdGUoKX0sbi5wcm90b3R5cGUuX29uRGF0YT1mdW5jdGlvbihlKXt0aGlzLl91cGRhdGUoXCJzdHlsZVwiPT09ZS5kYXRhVHlwZSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KGUuZGF0YVR5cGUrXCJkYXRhXCIsZSkpfSxuLnByb3RvdHlwZS5fb25EYXRhTG9hZGluZz1mdW5jdGlvbihlKXt0aGlzLmZpcmUobmV3IHQuRXZlbnQoZS5kYXRhVHlwZStcImRhdGFsb2FkaW5nXCIsZSkpfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLnByb3RvdHlwZSxpKSxufShybik7ZnVuY3Rpb24gaG4odCl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9dmFyIGZuPXtzaG93Q29tcGFzczohMCxzaG93Wm9vbTohMH0scG49ZnVuY3Rpb24oZSl7dmFyIHI9dGhpczt0aGlzLm9wdGlvbnM9dC5leHRlbmQoe30sZm4sZSksdGhpcy5fY29udGFpbmVyPXMuY3JlYXRlKFwiZGl2XCIsXCJtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtZ3JvdXBcIiksdGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnByZXZlbnREZWZhdWx0KCl9KSx0aGlzLm9wdGlvbnMuc2hvd1pvb20mJih0aGlzLl96b29tSW5CdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKFwibWFwYm94Z2wtY3RybC1pY29uIG1hcGJveGdsLWN0cmwtem9vbS1pblwiLFwiWm9vbSBJblwiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuX21hcC56b29tSW4oKX0pLHRoaXMuX3pvb21PdXRCdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKFwibWFwYm94Z2wtY3RybC1pY29uIG1hcGJveGdsLWN0cmwtem9vbS1vdXRcIixcIlpvb20gT3V0XCIsZnVuY3Rpb24oKXtyZXR1cm4gci5fbWFwLnpvb21PdXQoKX0pKSx0aGlzLm9wdGlvbnMuc2hvd0NvbXBhc3MmJih0LmJpbmRBbGwoW1wiX3JvdGF0ZUNvbXBhc3NBcnJvd1wiXSx0aGlzKSx0aGlzLl9jb21wYXNzPXRoaXMuX2NyZWF0ZUJ1dHRvbihcIm1hcGJveGdsLWN0cmwtaWNvbiBtYXBib3hnbC1jdHJsLWNvbXBhc3NcIixcIlJlc2V0IE5vcnRoXCIsZnVuY3Rpb24oKXtyZXR1cm4gci5fbWFwLnJlc2V0Tm9ydGgoKX0pLHRoaXMuX2NvbXBhc3NBcnJvdz1zLmNyZWF0ZShcInNwYW5cIixcIm1hcGJveGdsLWN0cmwtY29tcGFzcy1hcnJvd1wiLHRoaXMuX2NvbXBhc3MpKX07ZnVuY3Rpb24gZG4odCxlLHIpe2lmKHQ9bmV3IEcodC5sbmcsdC5sYXQpLGUpe3ZhciBuPW5ldyBHKHQubG5nLTM2MCx0LmxhdCksaT1uZXcgRyh0LmxuZyszNjAsdC5sYXQpLGE9ci5sb2NhdGlvblBvaW50KHQpLmRpc3RTcXIoZSk7ci5sb2NhdGlvblBvaW50KG4pLmRpc3RTcXIoZSk8YT90PW46ci5sb2NhdGlvblBvaW50KGkpLmRpc3RTcXIoZSk8YSYmKHQ9aSl9Zm9yKDtNYXRoLmFicyh0LmxuZy1yLmNlbnRlci5sbmcpPjE4MDspe3ZhciBvPXIubG9jYXRpb25Qb2ludCh0KTtpZihvLng+PTAmJm8ueT49MCYmby54PD1yLndpZHRoJiZvLnk8PXIuaGVpZ2h0KWJyZWFrO3QubG5nPnIuY2VudGVyLmxuZz90LmxuZy09MzYwOnQubG5nKz0zNjB9cmV0dXJuIHR9cG4ucHJvdG90eXBlLl9yb3RhdGVDb21wYXNzQXJyb3c9ZnVuY3Rpb24oKXt2YXIgdD1cInJvdGF0ZShcIit0aGlzLl9tYXAudHJhbnNmb3JtLmFuZ2xlKigxODAvTWF0aC5QSSkrXCJkZWcpXCI7dGhpcy5fY29tcGFzc0Fycm93LnN0eWxlLnRyYW5zZm9ybT10fSxwbi5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21hcD10LHRoaXMub3B0aW9ucy5zaG93Q29tcGFzcyYmKHRoaXMuX21hcC5vbihcInJvdGF0ZVwiLHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdyksdGhpcy5fcm90YXRlQ29tcGFzc0Fycm93KCksdGhpcy5faGFuZGxlcj1uZXcgV3IodCx7YnV0dG9uOlwibGVmdFwiLGVsZW1lbnQ6dGhpcy5fY29tcGFzc30pLHRoaXMuX2hhbmRsZXIuZW5hYmxlKCkpLHRoaXMuX2NvbnRhaW5lcn0scG4ucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7cy5yZW1vdmUodGhpcy5fY29udGFpbmVyKSx0aGlzLm9wdGlvbnMuc2hvd0NvbXBhc3MmJih0aGlzLl9tYXAub2ZmKFwicm90YXRlXCIsdGhpcy5fcm90YXRlQ29tcGFzc0Fycm93KSx0aGlzLl9oYW5kbGVyLmRpc2FibGUoKSxkZWxldGUgdGhpcy5faGFuZGxlciksZGVsZXRlIHRoaXMuX21hcH0scG4ucHJvdG90eXBlLl9jcmVhdGVCdXR0b249ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXMuY3JlYXRlKFwiYnV0dG9uXCIsdCx0aGlzLl9jb250YWluZXIpO3JldHVybiBuLnR5cGU9XCJidXR0b25cIixuLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIixlKSxuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHIpLG59O3ZhciBnbj17Y2VudGVyOlwidHJhbnNsYXRlKC01MCUsLTUwJSlcIix0b3A6XCJ0cmFuc2xhdGUoLTUwJSwwKVwiLFwidG9wLWxlZnRcIjpcInRyYW5zbGF0ZSgwLDApXCIsXCJ0b3AtcmlnaHRcIjpcInRyYW5zbGF0ZSgtMTAwJSwwKVwiLGJvdHRvbTpcInRyYW5zbGF0ZSgtNTAlLC0xMDAlKVwiLFwiYm90dG9tLWxlZnRcIjpcInRyYW5zbGF0ZSgwLC0xMDAlKVwiLFwiYm90dG9tLXJpZ2h0XCI6XCJ0cmFuc2xhdGUoLTEwMCUsLTEwMCUpXCIsbGVmdDpcInRyYW5zbGF0ZSgwLC01MCUpXCIscmlnaHQ6XCJ0cmFuc2xhdGUoLTEwMCUsLTUwJSlcIn07ZnVuY3Rpb24gdm4odCxlLHIpe3ZhciBuPXQuY2xhc3NMaXN0O2Zvcih2YXIgaSBpbiBnbiluLnJlbW92ZShcIm1hcGJveGdsLVwiK3IrXCItYW5jaG9yLVwiK2kpO24uYWRkKFwibWFwYm94Z2wtXCIrcitcIi1hbmNob3ItXCIrZSl9dmFyIG1uPWZ1bmN0aW9uKGUpe2lmKChhcmd1bWVudHNbMF1pbnN0YW5jZW9mIHQuZGVmYXVsdC5IVE1MRWxlbWVudHx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpJiYoZT10LmV4dGVuZCh7ZWxlbWVudDplfSxhcmd1bWVudHNbMV0pKSx0LmJpbmRBbGwoW1wiX3VwZGF0ZVwiLFwiX29uTWFwQ2xpY2tcIl0sdGhpcyksdGhpcy5fYW5jaG9yPWUmJmUuYW5jaG9yfHxcImNlbnRlclwiLHRoaXMuX2NvbG9yPWUmJmUuY29sb3J8fFwiIzNGQjFDRVwiLGUmJmUuZWxlbWVudCl0aGlzLl9lbGVtZW50PWUuZWxlbWVudCx0aGlzLl9vZmZzZXQ9dC5kZWZhdWx0JDEuY29udmVydChlJiZlLm9mZnNldHx8WzAsMF0pO2Vsc2V7dGhpcy5fZGVmYXVsdE1hcmtlcj0hMCx0aGlzLl9lbGVtZW50PXMuY3JlYXRlKFwiZGl2XCIpO3ZhciByPXMuY3JlYXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwic3ZnXCIpO3Iuc2V0QXR0cmlidXRlTlMobnVsbCxcImhlaWdodFwiLFwiNDFweFwiKSxyLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJ3aWR0aFwiLFwiMjdweFwiKSxyLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJ2aWV3Qm94XCIsXCIwIDAgMjcgNDFcIik7dmFyIG49cy5jcmVhdGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXCJnXCIpO24uc2V0QXR0cmlidXRlTlMobnVsbCxcInN0cm9rZVwiLFwibm9uZVwiKSxuLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJzdHJva2Utd2lkdGhcIixcIjFcIiksbi5zZXRBdHRyaWJ1dGVOUyhudWxsLFwiZmlsbFwiLFwibm9uZVwiKSxuLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJmaWxsLXJ1bGVcIixcImV2ZW5vZGRcIik7dmFyIGk9cy5jcmVhdGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXCJnXCIpO2kuc2V0QXR0cmlidXRlTlMobnVsbCxcImZpbGwtcnVsZVwiLFwibm9uemVyb1wiKTt2YXIgYT1zLmNyZWF0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcImdcIik7YS5zZXRBdHRyaWJ1dGVOUyhudWxsLFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoMy4wLCAyOS4wKVwiKSxhLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJmaWxsXCIsXCIjMDAwMDAwXCIpO2Zvcih2YXIgbz0wLGw9W3tyeDpcIjEwLjVcIixyeTpcIjUuMjUwMDIyNzNcIn0se3J4OlwiMTAuNVwiLHJ5OlwiNS4yNTAwMjI3M1wifSx7cng6XCI5LjVcIixyeTpcIjQuNzcyNzUwMDdcIn0se3J4OlwiOC41XCIscnk6XCI0LjI5NTQ5OTM2XCJ9LHtyeDpcIjcuNVwiLHJ5OlwiMy44MTgyMjMwOFwifSx7cng6XCI2LjVcIixyeTpcIjMuMzQwOTQ2NzlcIn0se3J4OlwiNS41XCIscnk6XCIyLjg2MzY3MDUxXCJ9LHtyeDpcIjQuNVwiLHJ5OlwiMi4zODYzNjg2NFwifV07bzxsLmxlbmd0aDtvKz0xKXt2YXIgYz1sW29dLHU9cy5jcmVhdGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXCJlbGxpcHNlXCIpO3Uuc2V0QXR0cmlidXRlTlMobnVsbCxcIm9wYWNpdHlcIixcIjAuMDRcIiksdS5zZXRBdHRyaWJ1dGVOUyhudWxsLFwiY3hcIixcIjEwLjVcIiksdS5zZXRBdHRyaWJ1dGVOUyhudWxsLFwiY3lcIixcIjUuODAwMjkwMDhcIiksdS5zZXRBdHRyaWJ1dGVOUyhudWxsLFwicnhcIixjLnJ4KSx1LnNldEF0dHJpYnV0ZU5TKG51bGwsXCJyeVwiLGMucnkpLGEuYXBwZW5kQ2hpbGQodSl9dmFyIGg9cy5jcmVhdGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXCJnXCIpO2guc2V0QXR0cmlidXRlTlMobnVsbCxcImZpbGxcIix0aGlzLl9jb2xvcik7dmFyIGY9cy5jcmVhdGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXCJwYXRoXCIpO2Yuc2V0QXR0cmlidXRlTlMobnVsbCxcImRcIixcIk0yNywxMy41IEMyNywxOS4wNzQ2NDQgMjAuMjUwMDAxLDI3LjAwMDAwMiAxNC43NSwzNC41MDAwMDIgQzE0LjAxNjY2NSwzNS41MDAwMDQgMTIuOTgzMzM1LDM1LjUwMDAwNCAxMi4yNSwzNC41MDAwMDIgQzYuNzQ5OTk5MywyNy4wMDAwMDIgMCwxOS4yMjI1NjIgMCwxMy41IEMwLDYuMDQ0MTU1OSA2LjA0NDE1NTksMCAxMy41LDAgQzIwLjk1NTg0NCwwIDI3LDYuMDQ0MTU1OSAyNywxMy41IFpcIiksaC5hcHBlbmRDaGlsZChmKTt2YXIgcD1zLmNyZWF0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcImdcIik7cC5zZXRBdHRyaWJ1dGVOUyhudWxsLFwib3BhY2l0eVwiLFwiMC4yNVwiKSxwLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJmaWxsXCIsXCIjMDAwMDAwXCIpO3ZhciBkPXMuY3JlYXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwicGF0aFwiKTtkLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJkXCIsXCJNMTMuNSwwIEM2LjA0NDE1NTksMCAwLDYuMDQ0MTU1OSAwLDEzLjUgQzAsMTkuMjIyNTYyIDYuNzQ5OTk5MywyNyAxMi4yNSwzNC41IEMxMywzNS41MjI3MjcgMTQuMDE2NjY0LDM1LjUwMDAwNCAxNC43NSwzNC41IEMyMC4yNTAwMDEsMjcgMjcsMTkuMDc0NjQ0IDI3LDEzLjUgQzI3LDYuMDQ0MTU1OSAyMC45NTU4NDQsMCAxMy41LDAgWiBNMTMuNSwxIEMyMC40MTU0MDQsMSAyNiw2LjU4NDU5NiAyNiwxMy41IEMyNiwxNS44OTg2NTcgMjQuNDk1NTg0LDE5LjE4MTQzMSAyMi4yMjA3MDMsMjIuNzM4MjgxIEMxOS45NDU4MjMsMjYuMjk1MTMyIDE2LjcwNTExOSwzMC4xNDIxNjcgMTMuOTQzMzU5LDMzLjkwODIwMyBDMTMuNzQzNDQ1LDM0LjE4MDgxNCAxMy42MTI3MTUsMzQuMzIyNzM4IDEzLjUsMzQuNDQxNDA2IEMxMy4zODcyODUsMzQuMzIyNzM4IDEzLjI1NjU1NSwzNC4xODA4MTQgMTMuMDU2NjQxLDMzLjkwODIwMyBDMTAuMjg0NDgxLDMwLjEyNzk4NSA3LjQxNDg2ODQsMjYuMzE0MTU5IDUuMDE1NjI1LDIyLjc3MzQzOCBDMi42MTYzODE2LDE5LjIzMjcxNSAxLDE1Ljk1MzUzOCAxLDEzLjUgQzEsNi41ODQ1OTYgNi41ODQ1OTYsMSAxMy41LDEgWlwiKSxwLmFwcGVuZENoaWxkKGQpO3ZhciBnPXMuY3JlYXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwiZ1wiKTtnLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZSg2LjAsIDcuMClcIiksZy5zZXRBdHRyaWJ1dGVOUyhudWxsLFwiZmlsbFwiLFwiI0ZGRkZGRlwiKTt2YXIgdj1zLmNyZWF0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcImdcIik7di5zZXRBdHRyaWJ1dGVOUyhudWxsLFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoOC4wLCA4LjApXCIpO3ZhciBtPXMuY3JlYXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwiY2lyY2xlXCIpO20uc2V0QXR0cmlidXRlTlMobnVsbCxcImZpbGxcIixcIiMwMDAwMDBcIiksbS5zZXRBdHRyaWJ1dGVOUyhudWxsLFwib3BhY2l0eVwiLFwiMC4yNVwiKSxtLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJjeFwiLFwiNS41XCIpLG0uc2V0QXR0cmlidXRlTlMobnVsbCxcImN5XCIsXCI1LjVcIiksbS5zZXRBdHRyaWJ1dGVOUyhudWxsLFwiclwiLFwiNS40OTk5OTYyXCIpO3ZhciB5PXMuY3JlYXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwiY2lyY2xlXCIpO3kuc2V0QXR0cmlidXRlTlMobnVsbCxcImZpbGxcIixcIiNGRkZGRkZcIikseS5zZXRBdHRyaWJ1dGVOUyhudWxsLFwiY3hcIixcIjUuNVwiKSx5LnNldEF0dHJpYnV0ZU5TKG51bGwsXCJjeVwiLFwiNS41XCIpLHkuc2V0QXR0cmlidXRlTlMobnVsbCxcInJcIixcIjUuNDk5OTk2MlwiKSx2LmFwcGVuZENoaWxkKG0pLHYuYXBwZW5kQ2hpbGQoeSksaS5hcHBlbmRDaGlsZChhKSxpLmFwcGVuZENoaWxkKGgpLGkuYXBwZW5kQ2hpbGQocCksaS5hcHBlbmRDaGlsZChnKSxpLmFwcGVuZENoaWxkKHYpLHIuYXBwZW5kQ2hpbGQoaSksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChyKSx0aGlzLl9vZmZzZXQ9dC5kZWZhdWx0JDEuY29udmVydChlJiZlLm9mZnNldHx8WzAsLTE0XSl9dGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtbWFya2VyXCIpLHRoaXMuX3BvcHVwPW51bGx9O21uLnByb3RvdHlwZS5hZGRUbz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZW1vdmUoKSx0aGlzLl9tYXA9dCx0LmdldENhbnZhc0NvbnRhaW5lcigpLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpLHQub24oXCJtb3ZlXCIsdGhpcy5fdXBkYXRlKSx0Lm9uKFwibW92ZWVuZFwiLHRoaXMuX3VwZGF0ZSksdGhpcy5fdXBkYXRlKCksdGhpcy5fbWFwLm9uKFwiY2xpY2tcIix0aGlzLl9vbk1hcENsaWNrKSx0aGlzfSxtbi5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmKHRoaXMuX21hcC5vZmYoXCJjbGlja1wiLHRoaXMuX29uTWFwQ2xpY2spLHRoaXMuX21hcC5vZmYoXCJtb3ZlXCIsdGhpcy5fdXBkYXRlKSx0aGlzLl9tYXAub2ZmKFwibW92ZWVuZFwiLHRoaXMuX3VwZGF0ZSksZGVsZXRlIHRoaXMuX21hcCkscy5yZW1vdmUodGhpcy5fZWxlbWVudCksdGhpcy5fcG9wdXAmJnRoaXMuX3BvcHVwLnJlbW92ZSgpLHRoaXN9LG1uLnByb3RvdHlwZS5nZXRMbmdMYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG5nTGF0fSxtbi5wcm90b3R5cGUuc2V0TG5nTGF0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sbmdMYXQ9Ry5jb252ZXJ0KHQpLHRoaXMuX3Bvcz1udWxsLHRoaXMuX3BvcHVwJiZ0aGlzLl9wb3B1cC5zZXRMbmdMYXQodGhpcy5fbG5nTGF0KSx0aGlzLl91cGRhdGUoKSx0aGlzfSxtbi5wcm90b3R5cGUuZ2V0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50fSxtbi5wcm90b3R5cGUuc2V0UG9wdXA9ZnVuY3Rpb24odCl7aWYodGhpcy5fcG9wdXAmJih0aGlzLl9wb3B1cC5yZW1vdmUoKSx0aGlzLl9wb3B1cD1udWxsKSx0KXtpZighKFwib2Zmc2V0XCJpbiB0Lm9wdGlvbnMpKXt2YXIgZT1NYXRoLnNxcnQoTWF0aC5wb3coMTMuNSwyKS8yKTt0Lm9wdGlvbnMub2Zmc2V0PXRoaXMuX2RlZmF1bHRNYXJrZXI/e3RvcDpbMCwwXSxcInRvcC1sZWZ0XCI6WzAsMF0sXCJ0b3AtcmlnaHRcIjpbMCwwXSxib3R0b206WzAsLTM4LjFdLFwiYm90dG9tLWxlZnRcIjpbZSwtMSooMjQuNitlKV0sXCJib3R0b20tcmlnaHRcIjpbLWUsLTEqKDI0LjYrZSldLGxlZnQ6WzEzLjUsLTI0LjZdLHJpZ2h0OlstMTMuNSwtMjQuNl19OnRoaXMuX29mZnNldH10aGlzLl9wb3B1cD10LHRoaXMuX2xuZ0xhdCYmdGhpcy5fcG9wdXAuc2V0TG5nTGF0KHRoaXMuX2xuZ0xhdCl9cmV0dXJuIHRoaXN9LG1uLnByb3RvdHlwZS5fb25NYXBDbGljaz1mdW5jdGlvbih0KXt2YXIgZT10Lm9yaWdpbmFsRXZlbnQudGFyZ2V0LHI9dGhpcy5fZWxlbWVudDt0aGlzLl9wb3B1cCYmKGU9PT1yfHxyLmNvbnRhaW5zKGUpKSYmdGhpcy50b2dnbGVQb3B1cCgpfSxtbi5wcm90b3R5cGUuZ2V0UG9wdXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9wdXB9LG1uLnByb3RvdHlwZS50b2dnbGVQb3B1cD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BvcHVwO3JldHVybiB0Pyh0LmlzT3BlbigpP3QucmVtb3ZlKCk6dC5hZGRUbyh0aGlzLl9tYXApLHRoaXMpOnRoaXN9LG1uLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuX21hcCYmKHRoaXMuX21hcC50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXMmJih0aGlzLl9sbmdMYXQ9ZG4odGhpcy5fbG5nTGF0LHRoaXMuX3Bvcyx0aGlzLl9tYXAudHJhbnNmb3JtKSksdGhpcy5fcG9zPXRoaXMuX21hcC5wcm9qZWN0KHRoaXMuX2xuZ0xhdCkuX2FkZCh0aGlzLl9vZmZzZXQpLHQmJlwibW92ZWVuZFwiIT09dC50eXBlfHwodGhpcy5fcG9zPXRoaXMuX3Bvcy5yb3VuZCgpKSxzLnNldFRyYW5zZm9ybSh0aGlzLl9lbGVtZW50LGduW3RoaXMuX2FuY2hvcl0rXCIgdHJhbnNsYXRlKFwiK3RoaXMuX3Bvcy54K1wicHgsIFwiK3RoaXMuX3Bvcy55K1wicHgpXCIpLHZuKHRoaXMuX2VsZW1lbnQsdGhpcy5fYW5jaG9yLFwibWFya2VyXCIpKX0sbW4ucHJvdG90eXBlLmdldE9mZnNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vZmZzZXR9LG1uLnByb3RvdHlwZS5zZXRPZmZzZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX29mZnNldD10LmRlZmF1bHQkMS5jb252ZXJ0KGUpLHRoaXMuX3VwZGF0ZSgpLHRoaXN9O3ZhciB5bix4bj17cG9zaXRpb25PcHRpb25zOntlbmFibGVIaWdoQWNjdXJhY3k6ITEsbWF4aW11bUFnZTowLHRpbWVvdXQ6NmUzfSxmaXRCb3VuZHNPcHRpb25zOnttYXhab29tOjE1fSx0cmFja1VzZXJMb2NhdGlvbjohMSxzaG93VXNlckxvY2F0aW9uOiEwfSxibj1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIpe2UuY2FsbCh0aGlzKSx0aGlzLm9wdGlvbnM9dC5leHRlbmQoe30seG4sciksdC5iaW5kQWxsKFtcIl9vblN1Y2Nlc3NcIixcIl9vbkVycm9yXCIsXCJfZmluaXNoXCIsXCJfc2V0dXBVSVwiLFwiX3VwZGF0ZUNhbWVyYVwiLFwiX3VwZGF0ZU1hcmtlclwiXSx0aGlzKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24oZSl7dmFyIHI7cmV0dXJuIHRoaXMuX21hcD1lLHRoaXMuX2NvbnRhaW5lcj1zLmNyZWF0ZShcImRpdlwiLFwibWFwYm94Z2wtY3RybCBtYXBib3hnbC1jdHJsLWdyb3VwXCIpLHI9dGhpcy5fc2V0dXBVSSx2b2lkIDAhPT15bj9yKHluKTp2b2lkIDAhPT10LmRlZmF1bHQubmF2aWdhdG9yLnBlcm1pc3Npb25zP3QuZGVmYXVsdC5uYXZpZ2F0b3IucGVybWlzc2lvbnMucXVlcnkoe25hbWU6XCJnZW9sb2NhdGlvblwifSkudGhlbihmdW5jdGlvbih0KXt5bj1cImRlbmllZFwiIT09dC5zdGF0ZSxyKHluKX0pOih5bj0hIXQuZGVmYXVsdC5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24scih5bikpLHRoaXMuX2NvbnRhaW5lcn0sci5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXt2b2lkIDAhPT10aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQmJih0LmRlZmF1bHQubmF2aWdhdG9yLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2godGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEKSx0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQ9dm9pZCAwKSx0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiYmdGhpcy5fdXNlckxvY2F0aW9uRG90TWFya2VyLnJlbW92ZSgpLHMucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwPXZvaWQgMH0sci5wcm90b3R5cGUuX29uU3VjY2Vzcz1mdW5jdGlvbihlKXtpZih0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24pc3dpdGNoKHRoaXMuX2xhc3RLbm93blBvc2l0aW9uPWUsdGhpcy5fd2F0Y2hTdGF0ZSl7Y2FzZVwiV0FJVElOR19BQ1RJVkVcIjpjYXNlXCJBQ1RJVkVfTE9DS1wiOmNhc2VcIkFDVElWRV9FUlJPUlwiOnRoaXMuX3dhdGNoU3RhdGU9XCJBQ1RJVkVfTE9DS1wiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZ1wiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvclwiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZVwiKTticmVhaztjYXNlXCJCQUNLR1JPVU5EXCI6Y2FzZVwiQkFDS0dST1VORF9FUlJPUlwiOnRoaXMuX3dhdGNoU3RhdGU9XCJCQUNLR1JPVU5EXCIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nXCIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvclwiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmRcIil9dGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJlwiT0ZGXCIhPT10aGlzLl93YXRjaFN0YXRlJiZ0aGlzLl91cGRhdGVNYXJrZXIoZSksdGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uJiZcIkFDVElWRV9MT0NLXCIhPT10aGlzLl93YXRjaFN0YXRlfHx0aGlzLl91cGRhdGVDYW1lcmEoZSksdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJnRoaXMuX2RvdEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLXVzZXItbG9jYXRpb24tZG90LXN0YWxlXCIpLHRoaXMuZmlyZShuZXcgdC5FdmVudChcImdlb2xvY2F0ZVwiLGUpKSx0aGlzLl9maW5pc2goKX0sci5wcm90b3R5cGUuX3VwZGF0ZUNhbWVyYT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgRyh0LmNvb3Jkcy5sb25naXR1ZGUsdC5jb29yZHMubGF0aXR1ZGUpLHI9dC5jb29yZHMuYWNjdXJhY3k7dGhpcy5fbWFwLmZpdEJvdW5kcyhlLnRvQm91bmRzKHIpLHRoaXMub3B0aW9ucy5maXRCb3VuZHNPcHRpb25zLHtnZW9sb2NhdGVTb3VyY2U6ITB9KX0sci5wcm90b3R5cGUuX3VwZGF0ZU1hcmtlcj1mdW5jdGlvbih0KXt0P3RoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlci5zZXRMbmdMYXQoW3QuY29vcmRzLmxvbmdpdHVkZSx0LmNvb3Jkcy5sYXRpdHVkZV0pLmFkZFRvKHRoaXMuX21hcCk6dGhpcy5fdXNlckxvY2F0aW9uRG90TWFya2VyLnJlbW92ZSgpfSxyLnByb3RvdHlwZS5fb25FcnJvcj1mdW5jdGlvbihlKXtpZih0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24paWYoMT09PWUuY29kZSl0aGlzLl93YXRjaFN0YXRlPVwiT0ZGXCIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nXCIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlXCIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yXCIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZFwiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3JcIiksdm9pZCAwIT09dGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEJiZ0aGlzLl9jbGVhcldhdGNoKCk7ZWxzZSBzd2l0Y2godGhpcy5fd2F0Y2hTdGF0ZSl7Y2FzZVwiV0FJVElOR19BQ1RJVkVcIjp0aGlzLl93YXRjaFN0YXRlPVwiQUNUSVZFX0VSUk9SXCIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmVcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3JcIik7YnJlYWs7Y2FzZVwiQUNUSVZFX0xPQ0tcIjp0aGlzLl93YXRjaFN0YXRlPVwiQUNUSVZFX0VSUk9SXCIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmVcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3JcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nXCIpO2JyZWFrO2Nhc2VcIkJBQ0tHUk9VTkRcIjp0aGlzLl93YXRjaFN0YXRlPVwiQkFDS0dST1VORF9FUlJPUlwiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZFwiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3JcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nXCIpfVwiT0ZGXCIhPT10aGlzLl93YXRjaFN0YXRlJiZ0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiYmdGhpcy5fZG90RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtdXNlci1sb2NhdGlvbi1kb3Qtc3RhbGVcIiksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiZXJyb3JcIixlKSksdGhpcy5fZmluaXNoKCl9LHIucHJvdG90eXBlLl9maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl90aW1lb3V0SWQmJmNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0SWQpLHRoaXMuX3RpbWVvdXRJZD12b2lkIDB9LHIucHJvdG90eXBlLl9zZXR1cFVJPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7ITEhPT1lJiYodGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnByZXZlbnREZWZhdWx0KCl9KSx0aGlzLl9nZW9sb2NhdGVCdXR0b249cy5jcmVhdGUoXCJidXR0b25cIixcIm1hcGJveGdsLWN0cmwtaWNvbiBtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZVwiLHRoaXMuX2NvbnRhaW5lciksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnR5cGU9XCJidXR0b25cIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLFwiR2VvbG9jYXRlXCIpLHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbiYmKHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoXCJhcmlhLXByZXNzZWRcIixcImZhbHNlXCIpLHRoaXMuX3dhdGNoU3RhdGU9XCJPRkZcIiksdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJih0aGlzLl9kb3RFbGVtZW50PXMuY3JlYXRlKFwiZGl2XCIsXCJtYXBib3hnbC11c2VyLWxvY2F0aW9uLWRvdFwiKSx0aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXI9bmV3IG1uKHRoaXMuX2RvdEVsZW1lbnQpLHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbiYmKHRoaXMuX3dhdGNoU3RhdGU9XCJPRkZcIikpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLnRyaWdnZXIuYmluZCh0aGlzKSksdGhpcy5fc2V0dXA9ITAsdGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uJiZ0aGlzLl9tYXAub24oXCJtb3Zlc3RhcnRcIixmdW5jdGlvbihlKXtlLmdlb2xvY2F0ZVNvdXJjZXx8XCJBQ1RJVkVfTE9DS1wiIT09ci5fd2F0Y2hTdGF0ZXx8KHIuX3dhdGNoU3RhdGU9XCJCQUNLR1JPVU5EXCIsci5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kXCIpLHIuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlXCIpLHIuZmlyZShuZXcgdC5FdmVudChcInRyYWNrdXNlcmxvY2F0aW9uZW5kXCIpKSl9KSl9LHIucHJvdG90eXBlLnRyaWdnZXI9ZnVuY3Rpb24oKXtpZighdGhpcy5fc2V0dXApcmV0dXJuIHQud2Fybk9uY2UoXCJHZW9sb2NhdGUgY29udHJvbCB0cmlnZ2VyZWQgYmVmb3JlIGFkZGVkIHRvIGEgbWFwXCIpLCExO2lmKHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbil7c3dpdGNoKHRoaXMuX3dhdGNoU3RhdGUpe2Nhc2VcIk9GRlwiOnRoaXMuX3dhdGNoU3RhdGU9XCJXQUlUSU5HX0FDVElWRVwiLHRoaXMuZmlyZShuZXcgdC5FdmVudChcInRyYWNrdXNlcmxvY2F0aW9uc3RhcnRcIikpO2JyZWFrO2Nhc2VcIldBSVRJTkdfQUNUSVZFXCI6Y2FzZVwiQUNUSVZFX0xPQ0tcIjpjYXNlXCJBQ1RJVkVfRVJST1JcIjpjYXNlXCJCQUNLR1JPVU5EX0VSUk9SXCI6dGhpcy5fd2F0Y2hTdGF0ZT1cIk9GRlwiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZ1wiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZVwiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvclwiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmRcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kLWVycm9yXCIpLHRoaXMuZmlyZShuZXcgdC5FdmVudChcInRyYWNrdXNlcmxvY2F0aW9uZW5kXCIpKTticmVhaztjYXNlXCJCQUNLR1JPVU5EXCI6dGhpcy5fd2F0Y2hTdGF0ZT1cIkFDVElWRV9MT0NLXCIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kXCIpLHRoaXMuX2xhc3RLbm93blBvc2l0aW9uJiZ0aGlzLl91cGRhdGVDYW1lcmEodGhpcy5fbGFzdEtub3duUG9zaXRpb24pLHRoaXMuZmlyZShuZXcgdC5FdmVudChcInRyYWNrdXNlcmxvY2F0aW9uc3RhcnRcIikpfXN3aXRjaCh0aGlzLl93YXRjaFN0YXRlKXtjYXNlXCJXQUlUSU5HX0FDVElWRVwiOnRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZ1wiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZVwiKTticmVhaztjYXNlXCJBQ1RJVkVfTE9DS1wiOnRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlXCIpO2JyZWFrO2Nhc2VcIkFDVElWRV9FUlJPUlwiOnRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZ1wiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvclwiKTticmVhaztjYXNlXCJCQUNLR1JPVU5EXCI6dGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kXCIpO2JyZWFrO2Nhc2VcIkJBQ0tHUk9VTkRfRVJST1JcIjp0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmdcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kLWVycm9yXCIpfVwiT0ZGXCI9PT10aGlzLl93YXRjaFN0YXRlJiZ2b2lkIDAhPT10aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQ/dGhpcy5fY2xlYXJXYXRjaCgpOnZvaWQgMD09PXRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCYmKHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZ1wiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uc2V0QXR0cmlidXRlKFwiYXJpYS1wcmVzc2VkXCIsXCJ0cnVlXCIpLHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRD10LmRlZmF1bHQubmF2aWdhdG9yLmdlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24odGhpcy5fb25TdWNjZXNzLHRoaXMuX29uRXJyb3IsdGhpcy5vcHRpb25zLnBvc2l0aW9uT3B0aW9ucykpfWVsc2UgdC5kZWZhdWx0Lm5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24odGhpcy5fb25TdWNjZXNzLHRoaXMuX29uRXJyb3IsdGhpcy5vcHRpb25zLnBvc2l0aW9uT3B0aW9ucyksdGhpcy5fdGltZW91dElkPXNldFRpbWVvdXQodGhpcy5fZmluaXNoLDFlNCk7cmV0dXJuITB9LHIucHJvdG90eXBlLl9jbGVhcldhdGNoPWZ1bmN0aW9uKCl7dC5kZWZhdWx0Lm5hdmlnYXRvci5nZW9sb2NhdGlvbi5jbGVhcldhdGNoKHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCksdGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEPXZvaWQgMCx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmdcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZShcImFyaWEtcHJlc3NlZFwiLFwiZmFsc2VcIiksdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJnRoaXMuX3VwZGF0ZU1hcmtlcihudWxsKX0scn0odC5FdmVudGVkKSxfbj17bWF4V2lkdGg6MTAwLHVuaXQ6XCJtZXRyaWNcIn0sd249ZnVuY3Rpb24oZSl7dGhpcy5vcHRpb25zPXQuZXh0ZW5kKHt9LF9uLGUpLHQuYmluZEFsbChbXCJfb25Nb3ZlXCIsXCJzZXRVbml0XCJdLHRoaXMpfTtmdW5jdGlvbiBrbih0LGUscil7dmFyIG4saSxhLG8scyxsLGM9ciYmci5tYXhXaWR0aHx8MTAwLHU9dC5fY29udGFpbmVyLmNsaWVudEhlaWdodC8yLGg9KG49dC51bnByb2plY3QoWzAsdV0pLGk9dC51bnByb2plY3QoW2MsdV0pLGE9TWF0aC5QSS8xODAsbz1uLmxhdCphLHM9aS5sYXQqYSxsPU1hdGguc2luKG8pKk1hdGguc2luKHMpK01hdGguY29zKG8pKk1hdGguY29zKHMpKk1hdGguY29zKChpLmxuZy1uLmxuZykqYSksNjM3MWUzKk1hdGguYWNvcyhNYXRoLm1pbihsLDEpKSk7aWYociYmXCJpbXBlcmlhbFwiPT09ci51bml0KXt2YXIgZj0zLjI4MDgqaDtmPjUyODA/QW4oZSxjLGYvNTI4MCxcIm1pXCIpOkFuKGUsYyxmLFwiZnRcIil9ZWxzZSByJiZcIm5hdXRpY2FsXCI9PT1yLnVuaXQ/QW4oZSxjLGgvMTg1MixcIm5tXCIpOkFuKGUsYyxoLFwibVwiKX1mdW5jdGlvbiBBbih0LGUscixuKXt2YXIgaSxhLG8scz0oaT1yLChhPU1hdGgucG93KDEwLChcIlwiK01hdGguZmxvb3IoaSkpLmxlbmd0aC0xKSkqKG89KG89aS9hKT49MTA/MTA6bz49NT81Om8+PTM/MzpvPj0yPzI6MSkpLGw9cy9yO1wibVwiPT09biYmcz49MWUzJiYocy89MWUzLG49XCJrbVwiKSx0LnN0eWxlLndpZHRoPWUqbCtcInB4XCIsdC5pbm5lckhUTUw9cytufXduLnByb3RvdHlwZS5nZXREZWZhdWx0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm5cImJvdHRvbS1sZWZ0XCJ9LHduLnByb3RvdHlwZS5fb25Nb3ZlPWZ1bmN0aW9uKCl7a24odGhpcy5fbWFwLHRoaXMuX2NvbnRhaW5lcix0aGlzLm9wdGlvbnMpfSx3bi5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21hcD10LHRoaXMuX2NvbnRhaW5lcj1zLmNyZWF0ZShcImRpdlwiLFwibWFwYm94Z2wtY3RybCBtYXBib3hnbC1jdHJsLXNjYWxlXCIsdC5nZXRDb250YWluZXIoKSksdGhpcy5fbWFwLm9uKFwibW92ZVwiLHRoaXMuX29uTW92ZSksdGhpcy5fb25Nb3ZlKCksdGhpcy5fY29udGFpbmVyfSx3bi5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXtzLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLHRoaXMuX21hcC5vZmYoXCJtb3ZlXCIsdGhpcy5fb25Nb3ZlKSx0aGlzLl9tYXA9dm9pZCAwfSx3bi5wcm90b3R5cGUuc2V0VW5pdD1mdW5jdGlvbih0KXt0aGlzLm9wdGlvbnMudW5pdD10LGtuKHRoaXMuX21hcCx0aGlzLl9jb250YWluZXIsdGhpcy5vcHRpb25zKX07dmFyIFRuPWZ1bmN0aW9uKCl7dGhpcy5fZnVsbHNjcmVlbj0hMSx0LmJpbmRBbGwoW1wiX29uQ2xpY2tGdWxsc2NyZWVuXCIsXCJfY2hhbmdlSWNvblwiXSx0aGlzKSxcIm9uZnVsbHNjcmVlbmNoYW5nZVwiaW4gdC5kZWZhdWx0LmRvY3VtZW50P3RoaXMuX2Z1bGxzY3JlZW5jaGFuZ2U9XCJmdWxsc2NyZWVuY2hhbmdlXCI6XCJvbm1vemZ1bGxzY3JlZW5jaGFuZ2VcImluIHQuZGVmYXVsdC5kb2N1bWVudD90aGlzLl9mdWxsc2NyZWVuY2hhbmdlPVwibW96ZnVsbHNjcmVlbmNoYW5nZVwiOlwib253ZWJraXRmdWxsc2NyZWVuY2hhbmdlXCJpbiB0LmRlZmF1bHQuZG9jdW1lbnQ/dGhpcy5fZnVsbHNjcmVlbmNoYW5nZT1cIndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2VcIjpcIm9ubXNmdWxsc2NyZWVuY2hhbmdlXCJpbiB0LmRlZmF1bHQuZG9jdW1lbnQmJih0aGlzLl9mdWxsc2NyZWVuY2hhbmdlPVwiTVNGdWxsc2NyZWVuQ2hhbmdlXCIpLHRoaXMuX2NsYXNzTmFtZT1cIm1hcGJveGdsLWN0cmxcIn07VG4ucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXA9ZSx0aGlzLl9tYXBDb250YWluZXI9dGhpcy5fbWFwLmdldENvbnRhaW5lcigpLHRoaXMuX2NvbnRhaW5lcj1zLmNyZWF0ZShcImRpdlwiLHRoaXMuX2NsYXNzTmFtZStcIiBtYXBib3hnbC1jdHJsLWdyb3VwXCIpLHRoaXMuX2NoZWNrRnVsbHNjcmVlblN1cHBvcnQoKT90aGlzLl9zZXR1cFVJKCk6KHRoaXMuX2NvbnRhaW5lci5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLHQud2Fybk9uY2UoXCJUaGlzIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IGZ1bGxzY3JlZW4gbW9kZS5cIikpLHRoaXMuX2NvbnRhaW5lcn0sVG4ucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7cy5yZW1vdmUodGhpcy5fY29udGFpbmVyKSx0aGlzLl9tYXA9bnVsbCx0LmRlZmF1bHQuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLl9mdWxsc2NyZWVuY2hhbmdlLHRoaXMuX2NoYW5nZUljb24pfSxUbi5wcm90b3R5cGUuX2NoZWNrRnVsbHNjcmVlblN1cHBvcnQ9ZnVuY3Rpb24oKXtyZXR1cm4hISh0LmRlZmF1bHQuZG9jdW1lbnQuZnVsbHNjcmVlbkVuYWJsZWR8fHQuZGVmYXVsdC5kb2N1bWVudC5tb3pGdWxsU2NyZWVuRW5hYmxlZHx8dC5kZWZhdWx0LmRvY3VtZW50Lm1zRnVsbHNjcmVlbkVuYWJsZWR8fHQuZGVmYXVsdC5kb2N1bWVudC53ZWJraXRGdWxsc2NyZWVuRW5hYmxlZCl9LFRuLnByb3RvdHlwZS5fc2V0dXBVST1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2Z1bGxzY3JlZW5CdXR0b249cy5jcmVhdGUoXCJidXR0b25cIix0aGlzLl9jbGFzc05hbWUrXCItaWNvbiBcIit0aGlzLl9jbGFzc05hbWUrXCItZnVsbHNjcmVlblwiLHRoaXMuX2NvbnRhaW5lcik7ZS5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsXCJUb2dnbGUgZnVsbHNjcmVlblwiKSxlLnR5cGU9XCJidXR0b25cIix0aGlzLl9mdWxsc2NyZWVuQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHRoaXMuX29uQ2xpY2tGdWxsc2NyZWVuKSx0LmRlZmF1bHQuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLl9mdWxsc2NyZWVuY2hhbmdlLHRoaXMuX2NoYW5nZUljb24pfSxUbi5wcm90b3R5cGUuX2lzRnVsbHNjcmVlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9mdWxsc2NyZWVufSxUbi5wcm90b3R5cGUuX2NoYW5nZUljb249ZnVuY3Rpb24oKXsodC5kZWZhdWx0LmRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50fHx0LmRlZmF1bHQuZG9jdW1lbnQubW96RnVsbFNjcmVlbkVsZW1lbnR8fHQuZGVmYXVsdC5kb2N1bWVudC53ZWJraXRGdWxsc2NyZWVuRWxlbWVudHx8dC5kZWZhdWx0LmRvY3VtZW50Lm1zRnVsbHNjcmVlbkVsZW1lbnQpPT09dGhpcy5fbWFwQ29udGFpbmVyIT09dGhpcy5fZnVsbHNjcmVlbiYmKHRoaXMuX2Z1bGxzY3JlZW49IXRoaXMuX2Z1bGxzY3JlZW4sdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5jbGFzc0xpc3QudG9nZ2xlKHRoaXMuX2NsYXNzTmFtZStcIi1zaHJpbmtcIiksdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5jbGFzc0xpc3QudG9nZ2xlKHRoaXMuX2NsYXNzTmFtZStcIi1mdWxsc2NyZWVuXCIpKX0sVG4ucHJvdG90eXBlLl9vbkNsaWNrRnVsbHNjcmVlbj1mdW5jdGlvbigpe3RoaXMuX2lzRnVsbHNjcmVlbigpP3QuZGVmYXVsdC5kb2N1bWVudC5leGl0RnVsbHNjcmVlbj90LmRlZmF1bHQuZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTp0LmRlZmF1bHQuZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbj90LmRlZmF1bHQuZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbigpOnQuZGVmYXVsdC5kb2N1bWVudC5tc0V4aXRGdWxsc2NyZWVuP3QuZGVmYXVsdC5kb2N1bWVudC5tc0V4aXRGdWxsc2NyZWVuKCk6dC5kZWZhdWx0LmRvY3VtZW50LndlYmtpdENhbmNlbEZ1bGxTY3JlZW4mJnQuZGVmYXVsdC5kb2N1bWVudC53ZWJraXRDYW5jZWxGdWxsU2NyZWVuKCk6dGhpcy5fbWFwQ29udGFpbmVyLnJlcXVlc3RGdWxsc2NyZWVuP3RoaXMuX21hcENvbnRhaW5lci5yZXF1ZXN0RnVsbHNjcmVlbigpOnRoaXMuX21hcENvbnRhaW5lci5tb3pSZXF1ZXN0RnVsbFNjcmVlbj90aGlzLl9tYXBDb250YWluZXIubW96UmVxdWVzdEZ1bGxTY3JlZW4oKTp0aGlzLl9tYXBDb250YWluZXIubXNSZXF1ZXN0RnVsbHNjcmVlbj90aGlzLl9tYXBDb250YWluZXIubXNSZXF1ZXN0RnVsbHNjcmVlbigpOnRoaXMuX21hcENvbnRhaW5lci53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbiYmdGhpcy5fbWFwQ29udGFpbmVyLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKCl9O3ZhciBNbj17Y2xvc2VCdXR0b246ITAsY2xvc2VPbkNsaWNrOiEwfSxTbj1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIpe2UuY2FsbCh0aGlzKSx0aGlzLm9wdGlvbnM9dC5leHRlbmQoT2JqZWN0LmNyZWF0ZShNbiksciksdC5iaW5kQWxsKFtcIl91cGRhdGVcIixcIl9vbkNsaWNrQ2xvc2VcIl0sdGhpcyl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmFkZFRvPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXA9ZSx0aGlzLl9tYXAub24oXCJtb3ZlXCIsdGhpcy5fdXBkYXRlKSx0aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrJiZ0aGlzLl9tYXAub24oXCJjbGlja1wiLHRoaXMuX29uQ2xpY2tDbG9zZSksdGhpcy5fdXBkYXRlKCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwib3BlblwiKSksdGhpc30sci5wcm90b3R5cGUuaXNPcGVuPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9tYXB9LHIucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50JiZzLnJlbW92ZSh0aGlzLl9jb250ZW50KSx0aGlzLl9jb250YWluZXImJihzLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLGRlbGV0ZSB0aGlzLl9jb250YWluZXIpLHRoaXMuX21hcCYmKHRoaXMuX21hcC5vZmYoXCJtb3ZlXCIsdGhpcy5fdXBkYXRlKSx0aGlzLl9tYXAub2ZmKFwiY2xpY2tcIix0aGlzLl9vbkNsaWNrQ2xvc2UpLGRlbGV0ZSB0aGlzLl9tYXApLHRoaXMuZmlyZShuZXcgdC5FdmVudChcImNsb3NlXCIpKSx0aGlzfSxyLnByb3RvdHlwZS5nZXRMbmdMYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG5nTGF0fSxyLnByb3RvdHlwZS5zZXRMbmdMYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xuZ0xhdD1HLmNvbnZlcnQodCksdGhpcy5fcG9zPW51bGwsdGhpcy5fdXBkYXRlKCksdGhpc30sci5wcm90b3R5cGUuc2V0VGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zZXRET01Db250ZW50KHQuZGVmYXVsdC5kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSl9LHIucHJvdG90eXBlLnNldEhUTUw9ZnVuY3Rpb24oZSl7dmFyIHIsbj10LmRlZmF1bHQuZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGk9dC5kZWZhdWx0LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJib2R5XCIpO2ZvcihpLmlubmVySFRNTD1lO3I9aS5maXJzdENoaWxkOyluLmFwcGVuZENoaWxkKHIpO3JldHVybiB0aGlzLnNldERPTUNvbnRlbnQobil9LHIucHJvdG90eXBlLnNldERPTUNvbnRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNvbnRlbnQoKSx0aGlzLl9jb250ZW50LmFwcGVuZENoaWxkKHQpLHRoaXMuX3VwZGF0ZSgpLHRoaXN9LHIucHJvdG90eXBlLl9jcmVhdGVDb250ZW50PWZ1bmN0aW9uKCl7dGhpcy5fY29udGVudCYmcy5yZW1vdmUodGhpcy5fY29udGVudCksdGhpcy5fY29udGVudD1zLmNyZWF0ZShcImRpdlwiLFwibWFwYm94Z2wtcG9wdXAtY29udGVudFwiLHRoaXMuX2NvbnRhaW5lciksdGhpcy5vcHRpb25zLmNsb3NlQnV0dG9uJiYodGhpcy5fY2xvc2VCdXR0b249cy5jcmVhdGUoXCJidXR0b25cIixcIm1hcGJveGdsLXBvcHVwLWNsb3NlLWJ1dHRvblwiLHRoaXMuX2NvbnRlbnQpLHRoaXMuX2Nsb3NlQnV0dG9uLnR5cGU9XCJidXR0b25cIix0aGlzLl9jbG9zZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsXCJDbG9zZSBwb3B1cFwiKSx0aGlzLl9jbG9zZUJ1dHRvbi5pbm5lckhUTUw9XCImIzIxNTtcIix0aGlzLl9jbG9zZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLl9vbkNsaWNrQ2xvc2UpKX0sci5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe2lmKHRoaXMuX21hcCYmdGhpcy5fbG5nTGF0JiZ0aGlzLl9jb250ZW50KXt0aGlzLl9jb250YWluZXJ8fCh0aGlzLl9jb250YWluZXI9cy5jcmVhdGUoXCJkaXZcIixcIm1hcGJveGdsLXBvcHVwXCIsdGhpcy5fbWFwLmdldENvbnRhaW5lcigpKSx0aGlzLl90aXA9cy5jcmVhdGUoXCJkaXZcIixcIm1hcGJveGdsLXBvcHVwLXRpcFwiLHRoaXMuX2NvbnRhaW5lciksdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRlbnQpKSx0aGlzLl9tYXAudHJhbnNmb3JtLnJlbmRlcldvcmxkQ29waWVzJiYodGhpcy5fbG5nTGF0PWRuKHRoaXMuX2xuZ0xhdCx0aGlzLl9wb3MsdGhpcy5fbWFwLnRyYW5zZm9ybSkpO3ZhciBlPXRoaXMuX3Bvcz10aGlzLl9tYXAucHJvamVjdCh0aGlzLl9sbmdMYXQpLHI9dGhpcy5vcHRpb25zLmFuY2hvcixuPWZ1bmN0aW9uIGUocil7aWYocil7aWYoXCJudW1iZXJcIj09dHlwZW9mIHIpe3ZhciBuPU1hdGgucm91bmQoTWF0aC5zcXJ0KC41Kk1hdGgucG93KHIsMikpKTtyZXR1cm57Y2VudGVyOm5ldyB0LmRlZmF1bHQkMSgwLDApLHRvcDpuZXcgdC5kZWZhdWx0JDEoMCxyKSxcInRvcC1sZWZ0XCI6bmV3IHQuZGVmYXVsdCQxKG4sbiksXCJ0b3AtcmlnaHRcIjpuZXcgdC5kZWZhdWx0JDEoLW4sbiksYm90dG9tOm5ldyB0LmRlZmF1bHQkMSgwLC1yKSxcImJvdHRvbS1sZWZ0XCI6bmV3IHQuZGVmYXVsdCQxKG4sLW4pLFwiYm90dG9tLXJpZ2h0XCI6bmV3IHQuZGVmYXVsdCQxKC1uLC1uKSxsZWZ0Om5ldyB0LmRlZmF1bHQkMShyLDApLHJpZ2h0Om5ldyB0LmRlZmF1bHQkMSgtciwwKX19aWYociBpbnN0YW5jZW9mIHQuZGVmYXVsdCQxfHxBcnJheS5pc0FycmF5KHIpKXt2YXIgaT10LmRlZmF1bHQkMS5jb252ZXJ0KHIpO3JldHVybntjZW50ZXI6aSx0b3A6aSxcInRvcC1sZWZ0XCI6aSxcInRvcC1yaWdodFwiOmksYm90dG9tOmksXCJib3R0b20tbGVmdFwiOmksXCJib3R0b20tcmlnaHRcIjppLGxlZnQ6aSxyaWdodDppfX1yZXR1cm57Y2VudGVyOnQuZGVmYXVsdCQxLmNvbnZlcnQoci5jZW50ZXJ8fFswLDBdKSx0b3A6dC5kZWZhdWx0JDEuY29udmVydChyLnRvcHx8WzAsMF0pLFwidG9wLWxlZnRcIjp0LmRlZmF1bHQkMS5jb252ZXJ0KHJbXCJ0b3AtbGVmdFwiXXx8WzAsMF0pLFwidG9wLXJpZ2h0XCI6dC5kZWZhdWx0JDEuY29udmVydChyW1widG9wLXJpZ2h0XCJdfHxbMCwwXSksYm90dG9tOnQuZGVmYXVsdCQxLmNvbnZlcnQoci5ib3R0b218fFswLDBdKSxcImJvdHRvbS1sZWZ0XCI6dC5kZWZhdWx0JDEuY29udmVydChyW1wiYm90dG9tLWxlZnRcIl18fFswLDBdKSxcImJvdHRvbS1yaWdodFwiOnQuZGVmYXVsdCQxLmNvbnZlcnQocltcImJvdHRvbS1yaWdodFwiXXx8WzAsMF0pLGxlZnQ6dC5kZWZhdWx0JDEuY29udmVydChyLmxlZnR8fFswLDBdKSxyaWdodDp0LmRlZmF1bHQkMS5jb252ZXJ0KHIucmlnaHR8fFswLDBdKX19cmV0dXJuIGUobmV3IHQuZGVmYXVsdCQxKDAsMCkpfSh0aGlzLm9wdGlvbnMub2Zmc2V0KTtpZighcil7dmFyIGksYT10aGlzLl9jb250YWluZXIub2Zmc2V0V2lkdGgsbz10aGlzLl9jb250YWluZXIub2Zmc2V0SGVpZ2h0O2k9ZS55K24uYm90dG9tLnk8bz9bXCJ0b3BcIl06ZS55PnRoaXMuX21hcC50cmFuc2Zvcm0uaGVpZ2h0LW8/W1wiYm90dG9tXCJdOltdLGUueDxhLzI/aS5wdXNoKFwibGVmdFwiKTplLng+dGhpcy5fbWFwLnRyYW5zZm9ybS53aWR0aC1hLzImJmkucHVzaChcInJpZ2h0XCIpLHI9MD09PWkubGVuZ3RoP1wiYm90dG9tXCI6aS5qb2luKFwiLVwiKX12YXIgbD1lLmFkZChuW3JdKS5yb3VuZCgpO3Muc2V0VHJhbnNmb3JtKHRoaXMuX2NvbnRhaW5lcixnbltyXStcIiB0cmFuc2xhdGUoXCIrbC54K1wicHgsXCIrbC55K1wicHgpXCIpLHZuKHRoaXMuX2NvbnRhaW5lcixyLFwicG9wdXBcIil9fSxyLnByb3RvdHlwZS5fb25DbGlja0Nsb3NlPWZ1bmN0aW9uKCl7dGhpcy5yZW1vdmUoKX0scn0odC5FdmVudGVkKSxFbj17dmVyc2lvbjpcIjAuNDUuMFwiLHN1cHBvcnRlZDplLHdvcmtlckNvdW50Ok1hdGgubWF4KE1hdGguZmxvb3IoYS5oYXJkd2FyZUNvbmN1cnJlbmN5LzIpLDEpLHNldFJUTFRleHRQbHVnaW46dC5zZXRSVExUZXh0UGx1Z2luLE1hcDp1bixOYXZpZ2F0aW9uQ29udHJvbDpwbixHZW9sb2NhdGVDb250cm9sOmJuLEF0dHJpYnV0aW9uQ29udHJvbDpubixTY2FsZUNvbnRyb2w6d24sRnVsbHNjcmVlbkNvbnRyb2w6VG4sUG9wdXA6U24sTWFya2VyOm1uLFN0eWxlOkplLExuZ0xhdDpHLExuZ0xhdEJvdW5kczpZLFBvaW50OnQuZGVmYXVsdCQxLEV2ZW50ZWQ6dC5FdmVudGVkLGNvbmZpZzp2LGdldCBhY2Nlc3NUb2tlbigpe3JldHVybiB2LkFDQ0VTU19UT0tFTn0sc2V0IGFjY2Vzc1Rva2VuKHQpe3YuQUNDRVNTX1RPS0VOPXR9LHdvcmtlclVybDpcIlwifTtyZXR1cm4gRW59KSxufSl9KS5jYWxsKHRoaXMsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHt9XSw0MjA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE8PHQrMSxyPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPWEodCxuKTtyZXR1cm4gcn07dmFyIG49dChcImNvbnZleC1odWxsXCIpO2Z1bmN0aW9uIGkodCxlLHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkodCksaT0wO2k8dDsrK2kpbltpXT0wLGk9PT1lJiYobltpXSs9LjUpLGk9PT1yJiYobltpXSs9LjUpO3JldHVybiBufWZ1bmN0aW9uIGEodCxlKXtpZigwPT09ZXx8ZT09PSgxPDx0KzEpLTEpcmV0dXJuW107Zm9yKHZhciByPVtdLGE9W10sbz0wO288PXQ7KytvKWlmKGUmMTw8byl7ci5wdXNoKGkodCxvLTEsby0xKSksYS5wdXNoKG51bGwpO2Zvcih2YXIgcz0wO3M8PXQ7KytzKX5lJjE8PHMmJihyLnB1c2goaSh0LG8tMSxzLTEpKSxhLnB1c2goW28sc10pKX12YXIgbD1uKHIpLGM9W107dDpmb3Iobz0wO288bC5sZW5ndGg7KytvKXt2YXIgdT1sW29dLGg9W107Zm9yKHM9MDtzPHUubGVuZ3RoOysrcyl7aWYoIWFbdVtzXV0pY29udGludWUgdDtoLnB1c2goYVt1W3NdXS5zbGljZSgpKX1jLnB1c2goaCl9cmV0dXJuIGN9fSx7XCJjb252ZXgtaHVsbFwiOjEyMX1dLDQyMTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuL25vcm1hbGl6ZVwiKSxpPXQoXCJnbC1tYXQ0L2NyZWF0ZVwiKSxhPXQoXCJnbC1tYXQ0L2Nsb25lXCIpLG89dChcImdsLW1hdDQvZGV0ZXJtaW5hbnRcIikscz10KFwiZ2wtbWF0NC9pbnZlcnRcIiksbD10KFwiZ2wtbWF0NC90cmFuc3Bvc2VcIiksYz17bGVuZ3RoOnQoXCJnbC12ZWMzL2xlbmd0aFwiKSxub3JtYWxpemU6dChcImdsLXZlYzMvbm9ybWFsaXplXCIpLGRvdDp0KFwiZ2wtdmVjMy9kb3RcIiksY3Jvc3M6dChcImdsLXZlYzMvY3Jvc3NcIil9LHU9aSgpLGg9aSgpLGY9WzAsMCwwLDBdLHA9W1swLDAsMF0sWzAsMCwwXSxbMCwwLDBdXSxkPVswLDAsMF07ZnVuY3Rpb24gZyh0LGUscixuLGkpe3RbMF09ZVswXSpuK3JbMF0qaSx0WzFdPWVbMV0qbityWzFdKmksdFsyXT1lWzJdKm4rclsyXSppfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLHYsbSl7aWYoZXx8KGU9WzAsMCwwXSkscnx8KHI9WzAsMCwwXSksaXx8KGk9WzAsMCwwXSksdnx8KHY9WzAsMCwwLDFdKSxtfHwobT1bMCwwLDAsMV0pLCFuKHUsdCkpcmV0dXJuITE7aWYoYShoLHUpLGhbM109MCxoWzddPTAsaFsxMV09MCxoWzE1XT0xLE1hdGguYWJzKG8oaCk8MWUtOCkpcmV0dXJuITE7dmFyIHkseCxiLF8sdyxrLEEsVD11WzNdLE09dVs3XSxTPXVbMTFdLEU9dVsxMl0sQz11WzEzXSxMPXVbMTRdLHo9dVsxNV07aWYoMCE9PVR8fDAhPT1NfHwwIT09Uyl7aWYoZlswXT1ULGZbMV09TSxmWzJdPVMsZlszXT16LCFzKGgsaCkpcmV0dXJuITE7bChoLGgpLHk9dixiPWgsXz0oeD1mKVswXSx3PXhbMV0saz14WzJdLEE9eFszXSx5WzBdPWJbMF0qXytiWzRdKncrYls4XSprK2JbMTJdKkEseVsxXT1iWzFdKl8rYls1XSp3K2JbOV0qaytiWzEzXSpBLHlbMl09YlsyXSpfK2JbNl0qdytiWzEwXSprK2JbMTRdKkEseVszXT1iWzNdKl8rYls3XSp3K2JbMTFdKmsrYlsxNV0qQX1lbHNlIHZbMF09dlsxXT12WzJdPTAsdlszXT0xO2lmKGVbMF09RSxlWzFdPUMsZVsyXT1MLGZ1bmN0aW9uKHQsZSl7dFswXVswXT1lWzBdLHRbMF1bMV09ZVsxXSx0WzBdWzJdPWVbMl0sdFsxXVswXT1lWzRdLHRbMV1bMV09ZVs1XSx0WzFdWzJdPWVbNl0sdFsyXVswXT1lWzhdLHRbMl1bMV09ZVs5XSx0WzJdWzJdPWVbMTBdfShwLHUpLHJbMF09Yy5sZW5ndGgocFswXSksYy5ub3JtYWxpemUocFswXSxwWzBdKSxpWzBdPWMuZG90KHBbMF0scFsxXSksZyhwWzFdLHBbMV0scFswXSwxLC1pWzBdKSxyWzFdPWMubGVuZ3RoKHBbMV0pLGMubm9ybWFsaXplKHBbMV0scFsxXSksaVswXS89clsxXSxpWzFdPWMuZG90KHBbMF0scFsyXSksZyhwWzJdLHBbMl0scFswXSwxLC1pWzFdKSxpWzJdPWMuZG90KHBbMV0scFsyXSksZyhwWzJdLHBbMl0scFsxXSwxLC1pWzJdKSxyWzJdPWMubGVuZ3RoKHBbMl0pLGMubm9ybWFsaXplKHBbMl0scFsyXSksaVsxXS89clsyXSxpWzJdLz1yWzJdLGMuY3Jvc3MoZCxwWzFdLHBbMl0pLGMuZG90KHBbMF0sZCk8MClmb3IodmFyIE89MDtPPDM7TysrKXJbT10qPS0xLHBbT11bMF0qPS0xLHBbT11bMV0qPS0xLHBbT11bMl0qPS0xO3JldHVybiBtWzBdPS41Kk1hdGguc3FydChNYXRoLm1heCgxK3BbMF1bMF0tcFsxXVsxXS1wWzJdWzJdLDApKSxtWzFdPS41Kk1hdGguc3FydChNYXRoLm1heCgxLXBbMF1bMF0rcFsxXVsxXS1wWzJdWzJdLDApKSxtWzJdPS41Kk1hdGguc3FydChNYXRoLm1heCgxLXBbMF1bMF0tcFsxXVsxXStwWzJdWzJdLDApKSxtWzNdPS41Kk1hdGguc3FydChNYXRoLm1heCgxK3BbMF1bMF0rcFsxXVsxXStwWzJdWzJdLDApKSxwWzJdWzFdPnBbMV1bMl0mJihtWzBdPS1tWzBdKSxwWzBdWzJdPnBbMl1bMF0mJihtWzFdPS1tWzFdKSxwWzFdWzBdPnBbMF1bMV0mJihtWzJdPS1tWzJdKSwhMH19LHtcIi4vbm9ybWFsaXplXCI6NDIyLFwiZ2wtbWF0NC9jbG9uZVwiOjI1NixcImdsLW1hdDQvY3JlYXRlXCI6MjU3LFwiZ2wtbWF0NC9kZXRlcm1pbmFudFwiOjI1OCxcImdsLW1hdDQvaW52ZXJ0XCI6MjYyLFwiZ2wtbWF0NC90cmFuc3Bvc2VcIjoyNzMsXCJnbC12ZWMzL2Nyb3NzXCI6MzI3LFwiZ2wtdmVjMy9kb3RcIjozMzIsXCJnbC12ZWMzL2xlbmd0aFwiOjM0MixcImdsLXZlYzMvbm9ybWFsaXplXCI6MzQ5fV0sNDIyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVsxNV07aWYoMD09PXIpcmV0dXJuITE7Zm9yKHZhciBuPTEvcixpPTA7aTwxNjtpKyspdFtpXT1lW2ldKm47cmV0dXJuITB9fSx7fV0sNDIzOltmdW5jdGlvbih0LGUscil7dmFyIG49dChcImdsLXZlYzMvbGVycFwiKSxpPXQoXCJtYXQ0LXJlY29tcG9zZVwiKSxhPXQoXCJtYXQ0LWRlY29tcG9zZVwiKSxvPXQoXCJnbC1tYXQ0L2RldGVybWluYW50XCIpLHM9dChcInF1YXQtc2xlcnBcIiksbD1oKCksYz1oKCksdT1oKCk7ZnVuY3Rpb24gaCgpe3JldHVybnt0cmFuc2xhdGU6ZigpLHNjYWxlOmYoMSksc2tldzpmKCkscGVyc3BlY3RpdmU6WzAsMCwwLDFdLHF1YXRlcm5pb246WzAsMCwwLDFdfX1mdW5jdGlvbiBmKHQpe3JldHVyblt0fHwwLHR8fDAsdHx8MF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGgpe2lmKDA9PT1vKGUpfHwwPT09byhyKSlyZXR1cm4hMTt2YXIgZj1hKGUsbC50cmFuc2xhdGUsbC5zY2FsZSxsLnNrZXcsbC5wZXJzcGVjdGl2ZSxsLnF1YXRlcm5pb24pLHA9YShyLGMudHJhbnNsYXRlLGMuc2NhbGUsYy5za2V3LGMucGVyc3BlY3RpdmUsYy5xdWF0ZXJuaW9uKTtyZXR1cm4hKCFmfHwhcHx8KG4odS50cmFuc2xhdGUsbC50cmFuc2xhdGUsYy50cmFuc2xhdGUsaCksbih1LnNrZXcsbC5za2V3LGMuc2tldyxoKSxuKHUuc2NhbGUsbC5zY2FsZSxjLnNjYWxlLGgpLG4odS5wZXJzcGVjdGl2ZSxsLnBlcnNwZWN0aXZlLGMucGVyc3BlY3RpdmUsaCkscyh1LnF1YXRlcm5pb24sbC5xdWF0ZXJuaW9uLGMucXVhdGVybmlvbixoKSxpKHQsdS50cmFuc2xhdGUsdS5zY2FsZSx1LnNrZXcsdS5wZXJzcGVjdGl2ZSx1LnF1YXRlcm5pb24pLDApKX19LHtcImdsLW1hdDQvZGV0ZXJtaW5hbnRcIjoyNTgsXCJnbC12ZWMzL2xlcnBcIjozNDMsXCJtYXQ0LWRlY29tcG9zZVwiOjQyMSxcIm1hdDQtcmVjb21wb3NlXCI6NDI0LFwicXVhdC1zbGVycFwiOjQ3Nn1dLDQyNDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXtpZGVudGl0eTp0KFwiZ2wtbWF0NC9pZGVudGl0eVwiKSx0cmFuc2xhdGU6dChcImdsLW1hdDQvdHJhbnNsYXRlXCIpLG11bHRpcGx5OnQoXCJnbC1tYXQ0L211bHRpcGx5XCIpLGNyZWF0ZTp0KFwiZ2wtbWF0NC9jcmVhdGVcIiksc2NhbGU6dChcImdsLW1hdDQvc2NhbGVcIiksZnJvbVJvdGF0aW9uVHJhbnNsYXRpb246dChcImdsLW1hdDQvZnJvbVJvdGF0aW9uVHJhbnNsYXRpb25cIil9LGk9KG4uY3JlYXRlKCksbi5jcmVhdGUoKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyxzKXtyZXR1cm4gbi5pZGVudGl0eSh0KSxuLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKHQscyxlKSx0WzNdPW9bMF0sdFs3XT1vWzFdLHRbMTFdPW9bMl0sdFsxNV09b1szXSxuLmlkZW50aXR5KGkpLDAhPT1hWzJdJiYoaVs5XT1hWzJdLG4ubXVsdGlwbHkodCx0LGkpKSwwIT09YVsxXSYmKGlbOV09MCxpWzhdPWFbMV0sbi5tdWx0aXBseSh0LHQsaSkpLDAhPT1hWzBdJiYoaVs4XT0wLGlbNF09YVswXSxuLm11bHRpcGx5KHQsdCxpKSksbi5zY2FsZSh0LHQsciksdH19LHtcImdsLW1hdDQvY3JlYXRlXCI6MjU3LFwiZ2wtbWF0NC9mcm9tUm90YXRpb25UcmFuc2xhdGlvblwiOjI2MCxcImdsLW1hdDQvaWRlbnRpdHlcIjoyNjEsXCJnbC1tYXQ0L211bHRpcGx5XCI6MjY0LFwiZ2wtbWF0NC9zY2FsZVwiOjI3MSxcImdsLW1hdDQvdHJhbnNsYXRlXCI6MjcyfV0sNDI1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPU1hdGgubG9nMnx8ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubG9nKHQpKk1hdGguTE9HMkV9fSx7fV0sNDI2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImJpbmFyeS1zZWFyY2gtYm91bmRzXCIpLGk9dChcIm1hdDQtaW50ZXJwb2xhdGVcIiksYT10KFwiZ2wtbWF0NC9pbnZlcnRcIiksbz10KFwiZ2wtbWF0NC9yb3RhdGVYXCIpLHM9dChcImdsLW1hdDQvcm90YXRlWVwiKSxsPXQoXCJnbC1tYXQ0L3JvdGF0ZVpcIiksYz10KFwiZ2wtbWF0NC9sb29rQXRcIiksdT10KFwiZ2wtbWF0NC90cmFuc2xhdGVcIiksaD0odChcImdsLW1hdDQvc2NhbGVcIiksdChcImdsLXZlYzMvbm9ybWFsaXplXCIpKSxmPVswLDAsMF07ZnVuY3Rpb24gcCh0KXt0aGlzLl9jb21wb25lbnRzPXQuc2xpY2UoKSx0aGlzLl90aW1lPVswXSx0aGlzLnByZXZNYXRyaXg9dC5zbGljZSgpLHRoaXMubmV4dE1hdHJpeD10LnNsaWNlKCksdGhpcy5jb21wdXRlZE1hdHJpeD10LnNsaWNlKCksdGhpcy5jb21wdXRlZEludmVyc2U9dC5zbGljZSgpLHRoaXMuY29tcHV0ZWRFeWU9WzAsMCwwXSx0aGlzLmNvbXB1dGVkVXA9WzAsMCwwXSx0aGlzLmNvbXB1dGVkQ2VudGVyPVswLDAsMF0sdGhpcy5jb21wdXRlZFJhZGl1cz1bMF0sdGhpcy5fbGltaXRzPVstMS8wLDEvMF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcCgodD10fHx7fSkubWF0cml4fHxbMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0pfTt2YXIgZD1wLnByb3RvdHlwZTtkLnJlY2FsY01hdHJpeD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aW1lLHI9bi5sZShlLHQpLG89dGhpcy5jb21wdXRlZE1hdHJpeDtpZighKHI8MCkpe3ZhciBzPXRoaXMuX2NvbXBvbmVudHM7aWYocj09PWUubGVuZ3RoLTEpZm9yKHZhciBsPTE2KnIsYz0wO2M8MTY7KytjKW9bY109c1tsKytdO2Vsc2V7dmFyIHU9ZVtyKzFdLWVbcl0sZj0obD0xNipyLHRoaXMucHJldk1hdHJpeCkscD0hMDtmb3IoYz0wO2M8MTY7KytjKWZbY109c1tsKytdO3ZhciBkPXRoaXMubmV4dE1hdHJpeDtmb3IoYz0wO2M8MTY7KytjKWRbY109c1tsKytdLHA9cCYmZltjXT09PWRbY107aWYodTwxZS02fHxwKWZvcihjPTA7YzwxNjsrK2Mpb1tjXT1mW2NdO2Vsc2UgaShvLGYsZCwodC1lW3JdKS91KX12YXIgZz10aGlzLmNvbXB1dGVkVXA7Z1swXT1vWzFdLGdbMV09b1s1XSxnWzJdPW9bOV0saChnLGcpO3ZhciB2PXRoaXMuY29tcHV0ZWRJbnZlcnNlO2EodixvKTt2YXIgbT10aGlzLmNvbXB1dGVkRXllLHk9dlsxNV07bVswXT12WzEyXS95LG1bMV09dlsxM10veSxtWzJdPXZbMTRdL3k7dmFyIHg9dGhpcy5jb21wdXRlZENlbnRlcixiPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO2ZvcihjPTA7YzwzOysrYyl4W2NdPW1bY10tb1syKzQqY10qYn19LGQuaWRsZT1mdW5jdGlvbih0KXtpZighKHQ8dGhpcy5sYXN0VCgpKSl7Zm9yKHZhciBlPXRoaXMuX2NvbXBvbmVudHMscj1lLmxlbmd0aC0xNixuPTA7bjwxNjsrK24pZS5wdXNoKGVbcisrXSk7dGhpcy5fdGltZS5wdXNoKHQpfX0sZC5mbHVzaD1mdW5jdGlvbih0KXt2YXIgZT1uLmd0KHRoaXMuX3RpbWUsdCktMjtlPDB8fCh0aGlzLl90aW1lLnNwbGljZSgwLGUpLHRoaXMuX2NvbXBvbmVudHMuc3BsaWNlKDAsMTYqZSkpfSxkLmxhc3RUPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RpbWVbdGhpcy5fdGltZS5sZW5ndGgtMV19LGQubG9va0F0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpLGU9ZXx8dGhpcy5jb21wdXRlZEV5ZSxyPXJ8fGYsbj1ufHx0aGlzLmNvbXB1dGVkVXAsdGhpcy5zZXRNYXRyaXgodCxjKHRoaXMuY29tcHV0ZWRNYXRyaXgsZSxyLG4pKTtmb3IodmFyIGk9MCxhPTA7YTwzOysrYSlpKz1NYXRoLnBvdyhyW2FdLWVbYV0sMik7aT1NYXRoLmxvZyhNYXRoLnNxcnQoaSkpLHRoaXMuY29tcHV0ZWRSYWRpdXNbMF09aX0sZC5yb3RhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZEludmVyc2U7ZSYmcyhpLGksZSksciYmbyhpLGksciksbiYmbChpLGksbiksdGhpcy5zZXRNYXRyaXgodCxhKHRoaXMuY29tcHV0ZWRNYXRyaXgsaSkpfTt2YXIgZz1bMCwwLDBdO2QucGFuPWZ1bmN0aW9uKHQsZSxyLG4pe2dbMF09LShlfHwwKSxnWzFdPS0ocnx8MCksZ1syXT0tKG58fDApLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRJbnZlcnNlO3UoaSxpLGcpLHRoaXMuc2V0TWF0cml4KHQsYShpLGkpKX0sZC50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIsbil7Z1swXT1lfHwwLGdbMV09cnx8MCxnWzJdPW58fDAsdGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZE1hdHJpeDt1KGksaSxnKSx0aGlzLnNldE1hdHJpeCh0LGkpfSxkLnNldE1hdHJpeD1mdW5jdGlvbih0LGUpe2lmKCEodDx0aGlzLmxhc3RUKCkpKXt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciByPTA7cjwxNjsrK3IpdGhpcy5fY29tcG9uZW50cy5wdXNoKGVbcl0pfX0sZC5zZXREaXN0YW5jZT1mdW5jdGlvbih0LGUpe3RoaXMuY29tcHV0ZWRSYWRpdXNbMF09ZX0sZC5zZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2xpbWl0cztyWzBdPXQsclsxXT1lfSxkLmdldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2xpbWl0cztyZXR1cm4gdD8odFswXT1lWzBdLHRbMV09ZVsxXSx0KTplfX0se1wiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIjo4MixcImdsLW1hdDQvaW52ZXJ0XCI6MjYyLFwiZ2wtbWF0NC9sb29rQXRcIjoyNjMsXCJnbC1tYXQ0L3JvdGF0ZVhcIjoyNjgsXCJnbC1tYXQ0L3JvdGF0ZVlcIjoyNjksXCJnbC1tYXQ0L3JvdGF0ZVpcIjoyNzAsXCJnbC1tYXQ0L3NjYWxlXCI6MjcxLFwiZ2wtbWF0NC90cmFuc2xhdGVcIjoyNzIsXCJnbC12ZWMzL25vcm1hbGl6ZVwiOjM0OSxcIm1hdDQtaW50ZXJwb2xhdGVcIjo0MjN9XSw0Mjc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoZTwzKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKXJbaV09aTtyZXR1cm4gMj09PWUmJnRbMF1bMF09PT10WzFdWzBdJiZ0WzBdWzFdPT09dFsxXVsxXT9bMF06cn1mb3IodmFyIGE9bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKWFbaV09aTthLnNvcnQoZnVuY3Rpb24oZSxyKXt2YXIgbj10W2VdWzBdLXRbcl1bMF07cmV0dXJuIG58fHRbZV1bMV0tdFtyXVsxXX0pO2Zvcih2YXIgbz1bYVswXSxhWzFdXSxzPVthWzBdLGFbMV1dLGk9MjtpPGU7KytpKXtmb3IodmFyIGw9YVtpXSxjPXRbbF0sdT1vLmxlbmd0aDt1PjEmJm4odFtvW3UtMl1dLHRbb1t1LTFdXSxjKTw9MDspdS09MSxvLnBvcCgpO2ZvcihvLnB1c2gobCksdT1zLmxlbmd0aDt1PjEmJm4odFtzW3UtMl1dLHRbc1t1LTFdXSxjKT49MDspdS09MSxzLnBvcCgpO3MucHVzaChsKX1mb3IodmFyIHI9bmV3IEFycmF5KHMubGVuZ3RoK28ubGVuZ3RoLTIpLGg9MCxpPTAsZj1vLmxlbmd0aDtpPGY7KytpKXJbaCsrXT1vW2ldO2Zvcih2YXIgcD1zLmxlbmd0aC0yO3A+MDstLXApcltoKytdPXNbcF07cmV0dXJuIHJ9O3ZhciBuPXQoXCJyb2J1c3Qtb3JpZW50YXRpb25cIilbM119LHtcInJvYnVzdC1vcmllbnRhdGlvblwiOjQ5NX1dLDQyODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2V8fChlPXQsdD13aW5kb3cpO3ZhciByPTAsaT0wLGE9MCxvPXtzaGlmdDohMSxhbHQ6ITEsY29udHJvbDohMSxtZXRhOiExfSxzPSExO2Z1bmN0aW9uIGwodCl7dmFyIGU9ITE7cmV0dXJuXCJhbHRLZXlcImluIHQmJihlPWV8fHQuYWx0S2V5IT09by5hbHQsby5hbHQ9ISF0LmFsdEtleSksXCJzaGlmdEtleVwiaW4gdCYmKGU9ZXx8dC5zaGlmdEtleSE9PW8uc2hpZnQsby5zaGlmdD0hIXQuc2hpZnRLZXkpLFwiY3RybEtleVwiaW4gdCYmKGU9ZXx8dC5jdHJsS2V5IT09by5jb250cm9sLG8uY29udHJvbD0hIXQuY3RybEtleSksXCJtZXRhS2V5XCJpbiB0JiYoZT1lfHx0Lm1ldGFLZXkhPT1vLm1ldGEsby5tZXRhPSEhdC5tZXRhS2V5KSxlfWZ1bmN0aW9uIGModCxzKXt2YXIgYz1uLngocyksdT1uLnkocyk7XCJidXR0b25zXCJpbiBzJiYodD0wfHMuYnV0dG9ucyksKHQhPT1yfHxjIT09aXx8dSE9PWF8fGwocykpJiYocj0wfHQsaT1jfHwwLGE9dXx8MCxlJiZlKHIsaSxhLG8pKX1mdW5jdGlvbiB1KHQpe2MoMCx0KX1mdW5jdGlvbiBoKCl7KHJ8fGl8fGF8fG8uc2hpZnR8fG8uYWx0fHxvLm1ldGF8fG8uY29udHJvbCkmJihpPWE9MCxyPTAsby5zaGlmdD1vLmFsdD1vLmNvbnRyb2w9by5tZXRhPSExLGUmJmUoMCwwLDAsbykpfWZ1bmN0aW9uIGYodCl7bCh0KSYmZSYmZShyLGksYSxvKX1mdW5jdGlvbiBwKHQpezA9PT1uLmJ1dHRvbnModCk/YygwLHQpOmMocix0KX1mdW5jdGlvbiBkKHQpe2MocnxuLmJ1dHRvbnModCksdCl9ZnVuY3Rpb24gZyh0KXtjKHImfm4uYnV0dG9ucyh0KSx0KX1mdW5jdGlvbiB2KCl7c3x8KHM9ITAsdC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIscCksdC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsZCksdC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLGcpLHQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIix1KSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsdSksdC5hZGRFdmVudExpc3RlbmVyKFwibW91c2VvdXRcIix1KSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIix1KSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsaCksdC5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIixmKSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsZiksdC5hZGRFdmVudExpc3RlbmVyKFwia2V5cHJlc3NcIixmKSx0IT09d2luZG93JiYod2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsaCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLGYpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGYpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5cHJlc3NcIixmKSkpfXYoKTt2YXIgbT17ZWxlbWVudDp0fTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobSx7ZW5hYmxlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHN9LHNldDpmdW5jdGlvbihlKXtlP3YoKTpzJiYocz0hMSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixwKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIixkKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsZyksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIix1KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW91dFwiLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3ZlclwiLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJsdXJcIixoKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLGYpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixmKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlwcmVzc1wiLGYpLHQhPT13aW5kb3cmJih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJsdXJcIixoKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsZiksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsZiksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlwcmVzc1wiLGYpKSl9LGVudW1lcmFibGU6ITB9LGJ1dHRvbnM6e2dldDpmdW5jdGlvbigpe3JldHVybiByfSxlbnVtZXJhYmxlOiEwfSx4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sZW51bWVyYWJsZTohMH0seTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGF9LGVudW1lcmFibGU6ITB9LG1vZHM6e2dldDpmdW5jdGlvbigpe3JldHVybiBvfSxlbnVtZXJhYmxlOiEwfX0pLG19O3ZhciBuPXQoXCJtb3VzZS1ldmVudFwiKX0se1wibW91c2UtZXZlbnRcIjo0MzB9XSw0Mjk6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj17bGVmdDowLHRvcDowfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2U9ZXx8dC5jdXJyZW50VGFyZ2V0fHx0LnNyY0VsZW1lbnQsQXJyYXkuaXNBcnJheShyKXx8KHI9WzAsMF0pO3ZhciBpPXQuY2xpZW50WHx8MCxhPXQuY2xpZW50WXx8MCxvPShzPWUscz09PXdpbmRvd3x8cz09PWRvY3VtZW50fHxzPT09ZG9jdW1lbnQuYm9keT9uOnMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO3ZhciBzO3JldHVybiByWzBdPWktby5sZWZ0LHJbMV09YS1vLnRvcCxyfX0se31dLDQzMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQudGFyZ2V0fHx0LnNyY0VsZW1lbnR8fHdpbmRvd31yLmJ1dHRvbnM9ZnVuY3Rpb24odCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHQpe2lmKFwiYnV0dG9uc1wiaW4gdClyZXR1cm4gdC5idXR0b25zO2lmKFwid2hpY2hcImluIHQpe2lmKDI9PT0oZT10LndoaWNoKSlyZXR1cm4gNDtpZigzPT09ZSlyZXR1cm4gMjtpZihlPjApcmV0dXJuIDE8PGUtMX1lbHNlIGlmKFwiYnV0dG9uXCJpbiB0KXt2YXIgZTtpZigxPT09KGU9dC5idXR0b24pKXJldHVybiA0O2lmKDI9PT1lKXJldHVybiAyO2lmKGU+PTApcmV0dXJuIDE8PGV9fXJldHVybiAwfSxyLmVsZW1lbnQ9bixyLng9ZnVuY3Rpb24odCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHQpe2lmKFwib2Zmc2V0WFwiaW4gdClyZXR1cm4gdC5vZmZzZXRYO3ZhciBlPW4odCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIHQuY2xpZW50WC1lLmxlZnR9cmV0dXJuIDB9LHIueT1mdW5jdGlvbih0KXtpZihcIm9iamVjdFwiPT10eXBlb2YgdCl7aWYoXCJvZmZzZXRZXCJpbiB0KXJldHVybiB0Lm9mZnNldFk7dmFyIGU9bih0KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gdC5jbGllbnRZLWUudG9wfXJldHVybiAwfX0se31dLDQzMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJ0by1weFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe1wiZnVuY3Rpb25cIj09dHlwZW9mIHQmJihyPSEhZSxlPXQsdD13aW5kb3cpO3ZhciBpPW4oXCJleFwiLHQpLGE9ZnVuY3Rpb24odCl7ciYmdC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBuPXQuZGVsdGFYfHwwLGE9dC5kZWx0YVl8fDAsbz10LmRlbHRhWnx8MCxzPXQuZGVsdGFNb2RlLGw9MTtzd2l0Y2gocyl7Y2FzZSAxOmw9aTticmVhaztjYXNlIDI6bD13aW5kb3cuaW5uZXJIZWlnaHR9aWYoYSo9bCxvKj1sLChuKj1sKXx8YXx8bylyZXR1cm4gZShuLGEsbyx0KX07cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsYSksYX19LHtcInRvLXB4XCI6NTI0fV0sNDMyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInR5cGVkYXJyYXktcG9vbFwiKTtmdW5jdGlvbiBpKHQpe3JldHVyblwiYVwiK3R9ZnVuY3Rpb24gYSh0KXtyZXR1cm5cImRcIit0fWZ1bmN0aW9uIG8odCxlKXtyZXR1cm5cImNcIit0K1wiX1wiK2V9ZnVuY3Rpb24gcyh0KXtyZXR1cm5cInNcIit0fWZ1bmN0aW9uIGwodCxlKXtyZXR1cm5cInRcIit0K1wiX1wiK2V9ZnVuY3Rpb24gYyh0KXtyZXR1cm5cIm9cIit0fWZ1bmN0aW9uIHUodCl7cmV0dXJuXCJ4XCIrdH1mdW5jdGlvbiBoKHQpe3JldHVyblwicFwiK3R9ZnVuY3Rpb24gZih0LGUpe3JldHVyblwiZFwiK3QrXCJfXCIrZX1mdW5jdGlvbiBwKHQpe3JldHVyblwiaVwiK3R9ZnVuY3Rpb24gZCh0LGUpe3JldHVyblwidVwiK3QrXCJfXCIrZX1mdW5jdGlvbiBnKHQpe3JldHVyblwiYlwiK3R9ZnVuY3Rpb24gdih0KXtyZXR1cm5cInlcIit0fWZ1bmN0aW9uIG0odCl7cmV0dXJuXCJlXCIrdH1mdW5jdGlvbiB5KHQpe3JldHVyblwidlwiK3R9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7dGhyb3cgbmV3IEVycm9yKFwibmRhcnJheS1leHRyYWN0LWNvbnRvdXI6IFwiK3QpfVwib2JqZWN0XCIhPXR5cGVvZiB0JiZlKFwiTXVzdCBzcGVjaWZ5IGFyZ3VtZW50c1wiKTt2YXIgcj10Lm9yZGVyO0FycmF5LmlzQXJyYXkocil8fGUoXCJNdXN0IHNwZWNpZnkgb3JkZXJcIik7dmFyIE09dC5hcnJheUFyZ3VtZW50c3x8MTtNPDEmJmUoXCJNdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGFycmF5IGFyZ3VtZW50XCIpO3ZhciBTPXQuc2NhbGFyQXJndW1lbnRzfHwwO1M8MCYmZShcIlNjYWxhciBhcmcgY291bnQgbXVzdCBiZSA+IDBcIik7XCJmdW5jdGlvblwiIT10eXBlb2YgdC52ZXJ0ZXgmJmUoXCJNdXN0IHNwZWNpZnkgdmVydGV4IGNyZWF0aW9uIGZ1bmN0aW9uXCIpO1wiZnVuY3Rpb25cIiE9dHlwZW9mIHQuY2VsbCYmZShcIk11c3Qgc3BlY2lmeSBjZWxsIGNyZWF0aW9uIGZ1bmN0aW9uXCIpO1wiZnVuY3Rpb25cIiE9dHlwZW9mIHQucGhhc2UmJmUoXCJNdXN0IHNwZWNpZnkgcGhhc2UgZnVuY3Rpb25cIik7Zm9yKHZhciBFPXQuZ2V0dGVyc3x8W10sQz1uZXcgQXJyYXkoTSksTD0wO0w8TTsrK0wpRS5pbmRleE9mKEwpPj0wP0NbTF09ITA6Q1tMXT0hMTtyZXR1cm4gZnVuY3Rpb24odCxlLHIsTSxTLEUpe3ZhciBDPUUubGVuZ3RoLEw9Uy5sZW5ndGg7aWYoTDwyKXRocm93IG5ldyBFcnJvcihcIm5kYXJyYXktZXh0cmFjdC1jb250b3VyOiBEaW1lbnNpb24gbXVzdCBiZSBhdCBsZWFzdCAyXCIpO2Zvcih2YXIgej1cImV4dHJhY3RDb250b3VyXCIrUy5qb2luKFwiX1wiKSxPPVtdLEk9W10sRD1bXSxQPTA7UDxDOysrUClELnB1c2goaShQKSk7Zm9yKHZhciBQPTA7UDxNOysrUClELnB1c2godShQKSk7Zm9yKHZhciBQPTA7UDxMOysrUClJLnB1c2gocyhQKStcIj1cIitpKDApK1wiLnNoYXBlW1wiK1ArXCJdfDBcIik7Zm9yKHZhciBQPTA7UDxDOysrUCl7SS5wdXNoKGEoUCkrXCI9XCIraShQKStcIi5kYXRhXCIsYyhQKStcIj1cIitpKFApK1wiLm9mZnNldHwwXCIpO2Zvcih2YXIgUj0wO1I8TDsrK1IpSS5wdXNoKGwoUCxSKStcIj1cIitpKFApK1wiLnN0cmlkZVtcIitSK1wiXXwwXCIpfWZvcih2YXIgUD0wO1A8QzsrK1Ape0kucHVzaChoKFApK1wiPVwiK2MoUCkpLEkucHVzaChvKFAsMCkpO2Zvcih2YXIgUj0xO1I8MTw8TDsrK1Ipe2Zvcih2YXIgRj1bXSxCPTA7QjxMOysrQilSJjE8PEImJkYucHVzaChcIi1cIitsKFAsQikpO0kucHVzaChmKFAsUikrXCI9KFwiK0Yuam9pbihcIlwiKStcIil8MFwiKSxJLnB1c2gobyhQLFIpK1wiPTBcIil9fWZvcih2YXIgUD0wO1A8QzsrK1ApZm9yKHZhciBSPTA7UjxMOysrUil7dmFyIE49W2woUCxTW1JdKV07Uj4wJiZOLnB1c2gobChQLFNbUi0xXSkrXCIqXCIrcyhTW1ItMV0pKSxJLnB1c2goZChQLFNbUl0pK1wiPShcIitOLmpvaW4oXCItXCIpK1wiKXwwXCIpfWZvcih2YXIgUD0wO1A8TDsrK1ApSS5wdXNoKHAoUCkrXCI9MFwiKTtJLnB1c2goXytcIj0wXCIpO2Zvcih2YXIgaj1bXCIyXCJdLFA9TC0yO1A+PTA7LS1QKWoucHVzaChzKFNbUF0pKTtJLnB1c2godytcIj0oXCIrai5qb2luKFwiKlwiKStcIil8MFwiLGIrXCI9bWFsbG9jVWludDMyKFwiK3crXCIpXCIseCtcIj1tYWxsb2NVaW50MzIoXCIrdytcIilcIixrK1wiPTBcIiksSS5wdXNoKGcoMCkrXCI9MFwiKTtmb3IodmFyIFI9MTtSPDE8PEw7KytSKXtmb3IodmFyIFY9W10sVT1bXSxCPTA7QjxMOysrQilSJjE8PEImJigwPT09VS5sZW5ndGg/Vi5wdXNoKFwiMVwiKTpWLnVuc2hpZnQoVS5qb2luKFwiKlwiKSkpLFUucHVzaChzKFNbQl0pKTt2YXIgcT1cIlwiO1ZbMF0uaW5kZXhPZihzKFNbTC0yXSkpPDAmJihxPVwiLVwiKTt2YXIgSD1UKEwsUixTKTtJLnB1c2gobShIKStcIj0oLVwiK1Yuam9pbihcIi1cIikrXCIpfDBcIix2KEgpK1wiPShcIitxK1Yuam9pbihcIi1cIikrXCIpfDBcIixnKEgpK1wiPTBcIil9ZnVuY3Rpb24gRyh0LGUpe08ucHVzaChcImZvcihcIixwKFNbdF0pLFwiPVwiLGUsXCI7XCIscChTW3RdKSxcIjxcIixzKFNbdF0pLFwiO1wiLFwiKytcIixwKFNbdF0pLFwiKXtcIil9ZnVuY3Rpb24gWSh0KXtmb3IodmFyIGU9MDtlPEM7KytlKU8ucHVzaChoKGUpLFwiKz1cIixkKGUsU1t0XSksXCI7XCIpO08ucHVzaChcIn1cIil9ZnVuY3Rpb24gVygpe2Zvcih2YXIgdD0xO3Q8MTw8TDsrK3QpTy5wdXNoKEEsXCI9XCIsbSh0KSxcIjtcIixtKHQpLFwiPVwiLHYodCksXCI7XCIsdih0KSxcIj1cIixBLFwiO1wiKX1JLnB1c2goeSgwKStcIj0wXCIsQStcIj0wXCIpLGZ1bmN0aW9uIHQoZSxyKXtpZihlPDApcmV0dXJuIHZvaWQgZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxDOysrZSlFW2VdP08ucHVzaChvKGUsMCksXCI9XCIsYShlKSxcIi5nZXQoXCIsaChlKSxcIik7XCIpOk8ucHVzaChvKGUsMCksXCI9XCIsYShlKSxcIltcIixoKGUpLFwiXTtcIik7Zm9yKHZhciByPVtdLGU9MDtlPEM7KytlKXIucHVzaChvKGUsMCkpO2Zvcih2YXIgZT0wO2U8TTsrK2Upci5wdXNoKHUoZSkpO08ucHVzaChnKDApLFwiPVwiLGIsXCJbXCIsayxcIl09cGhhc2UoXCIsci5qb2luKCksXCIpO1wiKTtmb3IodmFyIG49MTtuPDE8PEw7KytuKU8ucHVzaChnKG4pLFwiPVwiLGIsXCJbXCIsayxcIitcIixtKG4pLFwiXTtcIik7Zm9yKHZhciBpPVtdLG49MTtuPDE8PEw7KytuKWkucHVzaChcIihcIitnKDApK1wiIT09XCIrZyhuKStcIilcIik7Ty5wdXNoKFwiaWYoXCIsaS5qb2luKFwifHxcIiksXCIpe1wiKTtmb3IodmFyIHM9W10sZT0wO2U8TDsrK2Upcy5wdXNoKHAoZSkpO2Zvcih2YXIgZT0wO2U8QzsrK2Upe3MucHVzaChvKGUsMCkpO2Zvcih2YXIgbj0xO248MTw8TDsrK24pRVtlXT9PLnB1c2gobyhlLG4pLFwiPVwiLGEoZSksXCIuZ2V0KFwiLGgoZSksXCIrXCIsZihlLG4pLFwiKTtcIik6Ty5wdXNoKG8oZSxuKSxcIj1cIixhKGUpLFwiW1wiLGgoZSksXCIrXCIsZihlLG4pLFwiXTtcIikscy5wdXNoKG8oZSxuKSl9Zm9yKHZhciBlPTA7ZTwxPDxMOysrZSlzLnB1c2goZyhlKSk7Zm9yKHZhciBlPTA7ZTxNOysrZSlzLnB1c2godShlKSk7Ty5wdXNoKFwidmVydGV4KFwiLHMuam9pbigpLFwiKTtcIix5KDApLFwiPVwiLHgsXCJbXCIsayxcIl09XCIsXyxcIisrO1wiKTtmb3IodmFyIGw9KDE8PEwpLTEsYz1nKGwpLG49MDtuPEw7KytuKWlmKDA9PSh0Jn4oMTw8bikpKXtmb3IodmFyIGQ9bF4xPDxuLHY9ZyhkKSx3PVtdLEE9ZDtBPjA7QT1BLTEmZCl3LnB1c2goeCtcIltcIitrK1wiK1wiK20oQSkrXCJdXCIpO3cucHVzaCh5KDApKTtmb3IodmFyIEE9MDtBPEM7KytBKTEmbj93LnB1c2gobyhBLGwpLG8oQSxkKSk6dy5wdXNoKG8oQSxkKSxvKEEsbCkpOzEmbj93LnB1c2goYyx2KTp3LnB1c2godixjKTtmb3IodmFyIEE9MDtBPE07KytBKXcucHVzaCh1KEEpKTtPLnB1c2goXCJpZihcIixjLFwiIT09XCIsdixcIil7XCIsXCJmYWNlKFwiLHcuam9pbigpLFwiKX1cIil9Ty5wdXNoKFwifVwiLGssXCIrPTE7XCIpfShyKTshZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQtMTtlPj0wOy0tZSlHKGUsMCk7Zm9yKHZhciByPVtdLGU9MDtlPEM7KytlKUVbZV0/ci5wdXNoKGEoZSkrXCIuZ2V0KFwiK2goZSkrXCIpXCIpOnIucHVzaChhKGUpK1wiW1wiK2goZSkrXCJdXCIpO2Zvcih2YXIgZT0wO2U8TTsrK2Upci5wdXNoKHUoZSkpO08ucHVzaChiLFwiW1wiLGssXCIrK109cGhhc2UoXCIsci5qb2luKCksXCIpO1wiKTtmb3IodmFyIGU9MDtlPHQ7KytlKVkoZSk7Zm9yKHZhciBuPTA7bjxDOysrbilPLnB1c2goaChuKSxcIis9XCIsZChuLFNbdF0pLFwiO1wiKX0oZSk7Ty5wdXNoKFwiaWYoXCIscyhTW2VdKSxcIj4wKXtcIixwKFNbZV0pLFwiPTE7XCIpO3QoZS0xLHJ8MTw8U1tlXSk7Zm9yKHZhciBuPTA7bjxDOysrbilPLnB1c2goaChuKSxcIis9XCIsZChuLFNbZV0pLFwiO1wiKTtlPT09TC0xJiYoTy5wdXNoKGssXCI9MDtcIiksVygpKTtHKGUsMik7dChlLTEscik7ZT09PUwtMSYmKE8ucHVzaChcImlmKFwiLHAoU1tMLTFdKSxcIiYxKXtcIixrLFwiPTA7fVwiKSxXKCkpO1koZSk7Ty5wdXNoKFwifVwiKX0oTC0xLDApLE8ucHVzaChcImZyZWVVaW50MzIoXCIseCxcIik7ZnJlZVVpbnQzMihcIixiLFwiKTtcIik7dmFyIFg9W1wiJ3VzZSBzdHJpY3QnO1wiLFwiZnVuY3Rpb24gXCIseixcIihcIixELmpvaW4oKSxcIil7XCIsXCJ2YXIgXCIsSS5qb2luKCksXCI7XCIsTy5qb2luKFwiXCIpLFwifVwiLFwicmV0dXJuIFwiLHpdLmpvaW4oXCJcIik7cmV0dXJuIG5ldyBGdW5jdGlvbihcInZlcnRleFwiLFwiZmFjZVwiLFwicGhhc2VcIixcIm1hbGxvY1VpbnQzMlwiLFwiZnJlZVVpbnQzMlwiLFgpKHQsZSxyLG4ubWFsbG9jVWludDMyLG4uZnJlZVVpbnQzMil9KHQudmVydGV4LHQuY2VsbCx0LnBoYXNlLFMscixDKX07dmFyIHg9XCJWXCIsYj1cIlBcIixfPVwiTlwiLHc9XCJRXCIsaz1cIlhcIixBPVwiVFwiO2Z1bmN0aW9uIFQodCxlLHIpe2Zvcih2YXIgbj0wLGk9MDtpPHQ7KytpKWUmMTw8aSYmKG58PTE8PHJbaV0pO3JldHVybiBufX0se1widHlwZWRhcnJheS1wb29sXCI6NTMwfV0sNDMzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImN3aXNlL2xpYi93cmFwcGVyXCIpKHthcmdzOltcImluZGV4XCIsXCJhcnJheVwiLFwic2NhbGFyXCJdLHByZTp7Ym9keTpcInt9XCIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6XCJ7X2lubGluZV8xX2FyZzFfPV9pbmxpbmVfMV9hcmcyXy5hcHBseSh2b2lkIDAsX2lubGluZV8xX2FyZzBfKX1cIixhcmdzOlt7bmFtZTpcIl9pbmxpbmVfMV9hcmcwX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzFfYXJnMV9cIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xX2FyZzJfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5Olwie31cIixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZGVidWc6ITEsZnVuY05hbWU6XCJjd2lzZVwiLGJsb2NrU2l6ZTo2NH0pO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKHQsZSksdH19LHtcImN3aXNlL2xpYi93cmFwcGVyXCI6MTQwfV0sNDM0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZihBcnJheS5pc0FycmF5KHIpKXtpZihyLmxlbmd0aCE9PWUuZGltZW5zaW9uKXRocm93IG5ldyBFcnJvcihcIm5kYXJyYXktZ3JhZGllbnQ6IGludmFsaWQgYm91bmRhcnkgY29uZGl0aW9uc1wiKX1lbHNlIHI9bihlLmRpbWVuc2lvbixcInN0cmluZ1wiPT10eXBlb2Ygcj9yOlwiY2xhbXBcIik7aWYodC5kaW1lbnNpb24hPT1lLmRpbWVuc2lvbisxKXRocm93IG5ldyBFcnJvcihcIm5kYXJyYXktZ3JhZGllbnQ6IG91dHB1dCBkaW1lbnNpb24gbXVzdCBiZSArMSBpbnB1dCBkaW1lbnNpb25cIik7aWYodC5zaGFwZVtlLmRpbWVuc2lvbl0hPT1lLmRpbWVuc2lvbil0aHJvdyBuZXcgRXJyb3IoXCJuZGFycmF5LWdyYWRpZW50OiBvdXRwdXQgc2hhcGUgbXVzdCBtYXRjaCBpbnB1dCBzaGFwZVwiKTtmb3IodmFyIGk9MDtpPGUuZGltZW5zaW9uOysraSlpZih0LnNoYXBlW2ldIT09ZS5zaGFwZVtpXSl0aHJvdyBuZXcgRXJyb3IoXCJuZGFycmF5LWdyYWRpZW50OiBzaGFwZSBtaXNtYXRjaFwiKTtpZigwPT09ZS5zaXplKXJldHVybiB0O2lmKGUuZGltZW5zaW9uPD0wKXJldHVybiB0LnNldCgwKSx0O3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10LmpvaW4oKTtpZihtPW9bZV0pcmV0dXJuIG07dmFyIHI9dC5sZW5ndGgsbj1bXCJmdW5jdGlvbiBncmFkaWVudChkc3Qsc3JjKXt2YXIgcz1zcmMuc2hhcGUuc2xpY2UoKTtcIl07ZnVuY3Rpb24gaShlKXtmb3IodmFyIGk9ci1lLmxlbmd0aCxhPVtdLG89W10scz1bXSxsPTA7bDxyOysrbCllLmluZGV4T2YobCsxKT49MD9zLnB1c2goXCIwXCIpOmUuaW5kZXhPZigtKGwrMSkpPj0wP3MucHVzaChcInNbXCIrbCtcIl0tMVwiKToocy5wdXNoKFwiLTFcIiksYS5wdXNoKFwiMVwiKSxvLnB1c2goXCJzW1wiK2wrXCJdLTJcIikpO3ZhciBjPVwiLmxvKFwiK2Euam9pbigpK1wiKS5oaShcIitvLmpvaW4oKStcIilcIjtpZigwPT09YS5sZW5ndGgmJihjPVwiXCIpLGk+MCl7bi5wdXNoKFwiaWYoMVwiKTtmb3IodmFyIGw9MDtsPHI7KytsKWUuaW5kZXhPZihsKzEpPj0wfHxlLmluZGV4T2YoLShsKzEpKT49MHx8bi5wdXNoKFwiJiZzW1wiLGwsXCJdPjJcIik7bi5wdXNoKFwiKXtncmFkXCIsaSxcIihzcmMucGljayhcIixzLmpvaW4oKSxcIilcIixjKTtmb3IodmFyIGw9MDtsPHI7KytsKWUuaW5kZXhPZihsKzEpPj0wfHxlLmluZGV4T2YoLShsKzEpKT49MHx8bi5wdXNoKFwiLGRzdC5waWNrKFwiLHMuam9pbigpLFwiLFwiLGwsXCIpXCIsYyk7bi5wdXNoKFwiKTtcIil9Zm9yKHZhciBsPTA7bDxlLmxlbmd0aDsrK2wpe3ZhciB1PU1hdGguYWJzKGVbbF0pLTEsaD1cImRzdC5waWNrKFwiK3Muam9pbigpK1wiLFwiK3UrXCIpXCIrYztzd2l0Y2godFt1XSl7Y2FzZVwiY2xhbXBcIjp2YXIgZj1zLnNsaWNlKCkscD1zLnNsaWNlKCk7ZVtsXTwwP2ZbdV09XCJzW1wiK3UrXCJdLTJcIjpwW3VdPVwiMVwiLDA9PT1pP24ucHVzaChcImlmKHNbXCIsdSxcIl0+MSl7ZHN0LnNldChcIixzLmpvaW4oKSxcIixcIix1LFwiLDAuNSooc3JjLmdldChcIixmLmpvaW4oKSxcIiktc3JjLmdldChcIixwLmpvaW4oKSxcIikpKX1lbHNle2RzdC5zZXQoXCIscy5qb2luKCksXCIsXCIsdSxcIiwwKX07XCIpOm4ucHVzaChcImlmKHNbXCIsdSxcIl0+MSl7ZGlmZihcIixoLFwiLHNyYy5waWNrKFwiLGYuam9pbigpLFwiKVwiLGMsXCIsc3JjLnBpY2soXCIscC5qb2luKCksXCIpXCIsYyxcIik7fWVsc2V7emVybyhcIixoLFwiKTt9O1wiKTticmVhaztjYXNlXCJtaXJyb3JcIjowPT09aT9uLnB1c2goXCJkc3Quc2V0KFwiLHMuam9pbigpLFwiLFwiLHUsXCIsMCk7XCIpOm4ucHVzaChcInplcm8oXCIsaCxcIik7XCIpO2JyZWFrO2Nhc2VcIndyYXBcIjp2YXIgZD1zLnNsaWNlKCksZz1zLnNsaWNlKCk7ZVtsXTwwPyhkW3VdPVwic1tcIit1K1wiXS0yXCIsZ1t1XT1cIjBcIik6KGRbdV09XCJzW1wiK3UrXCJdLTFcIixnW3VdPVwiMVwiKSwwPT09aT9uLnB1c2goXCJpZihzW1wiLHUsXCJdPjIpe2RzdC5zZXQoXCIscy5qb2luKCksXCIsXCIsdSxcIiwwLjUqKHNyYy5nZXQoXCIsZC5qb2luKCksXCIpLXNyYy5nZXQoXCIsZy5qb2luKCksXCIpKSl9ZWxzZXtkc3Quc2V0KFwiLHMuam9pbigpLFwiLFwiLHUsXCIsMCl9O1wiKTpuLnB1c2goXCJpZihzW1wiLHUsXCJdPjIpe2RpZmYoXCIsaCxcIixzcmMucGljayhcIixkLmpvaW4oKSxcIilcIixjLFwiLHNyYy5waWNrKFwiLGcuam9pbigpLFwiKVwiLGMsXCIpO31lbHNle3plcm8oXCIsaCxcIik7fTtcIik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJuZGFycmF5LWdyYWRpZW50OiBJbnZhbGlkIGJvdW5kYXJ5IGNvbmRpdGlvblwiKX19aT4wJiZuLnB1c2goXCJ9O1wiKX1mb3IodmFyIHM9MDtzPDE8PHI7KytzKXtmb3IodmFyIGg9W10sZj0wO2Y8cjsrK2YpcyYxPDxmJiZoLnB1c2goZisxKTtmb3IodmFyIHA9MDtwPDE8PGgubGVuZ3RoOysrcCl7Zm9yKHZhciBkPWguc2xpY2UoKSxmPTA7ZjxoLmxlbmd0aDsrK2YpcCYxPDxmJiYoZFtmXT0tZFtmXSk7aShkKX19bi5wdXNoKFwicmV0dXJuIGRzdDt9O3JldHVybiBncmFkaWVudFwiKTtmb3IodmFyIGc9W1wiZGlmZlwiLFwiemVyb1wiXSx2PVtsLGNdLHM9MTtzPD1yOysrcylnLnB1c2goXCJncmFkXCIrcyksdi5wdXNoKHUocykpO2cucHVzaChuLmpvaW4oXCJcIikpO3ZhciBtPUZ1bmN0aW9uLmFwcGx5KHZvaWQgMCxnKS5hcHBseSh2b2lkIDAsdik7cmV0dXJuIGFbZV09bSxtfShyKSh0LGUpfTt2YXIgbj10KFwiZHVwXCIpLGk9dChcImN3aXNlLWNvbXBpbGVyXCIpLGE9e30sbz17fSxzPXtib2R5OlwiXCIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGw9aSh7YXJnczpbXCJhcnJheVwiLFwiYXJyYXlcIixcImFycmF5XCJdLHByZTpzLHBvc3Q6cyxib2R5OnthcmdzOlt7bmFtZTpcIm91dFwiLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX0se25hbWU6XCJsZWZ0XCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcInJpZ2h0XCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sYm9keTpcIm91dD0wLjUqKGxlZnQtcmlnaHQpXCIsdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxmdW5jTmFtZTpcImNkaWZmXCJ9KSxjPWkoe2FyZ3M6W1wiYXJyYXlcIl0scHJlOnMscG9zdDpzLGJvZHk6e2FyZ3M6W3tuYW1lOlwib3V0XCIsbHZhbHVlOiEwLHJ2YWx1ZTohMSxjb3VudDoxfV0sYm9keTpcIm91dD0wXCIsdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxmdW5jTmFtZTpcInplcm9cIn0pO2Z1bmN0aW9uIHUodCl7aWYodCBpbiBhKXJldHVybiBhW3RdO2Zvcih2YXIgZT1bXSxyPTA7cjx0OysrcillLnB1c2goXCJvdXRcIixyLFwicz0wLjUqKGlucFwiLHIsXCJsLWlucFwiLHIsXCJyKTtcIik7dmFyIG89W1wiYXJyYXlcIl0sbD1bXCJqdW5rXCJdO2ZvcihyPTA7cjx0Oysrcil7by5wdXNoKFwiYXJyYXlcIiksbC5wdXNoKFwib3V0XCIrcitcInNcIik7dmFyIGM9bih0KTtjW3JdPS0xLG8ucHVzaCh7YXJyYXk6MCxvZmZzZXQ6Yy5zbGljZSgpfSksY1tyXT0xLG8ucHVzaCh7YXJyYXk6MCxvZmZzZXQ6Yy5zbGljZSgpfSksbC5wdXNoKFwiaW5wXCIrcitcImxcIixcImlucFwiK3IrXCJyXCIpfXJldHVybiBhW3RdPWkoe2FyZ3M6byxwcmU6cyxwb3N0OnMsYm9keTp7Ym9keTplLmpvaW4oXCJcIiksYXJnczpsLm1hcChmdW5jdGlvbih0KXtyZXR1cm57bmFtZTp0LGx2YWx1ZTowPT09dC5pbmRleE9mKFwib3V0XCIpLHJ2YWx1ZTowPT09dC5pbmRleE9mKFwiaW5wXCIpLGNvdW50OlwianVua1wiIT09dHwwfX0pLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZnVuY05hbWU6XCJmZFRlbXBsYXRlXCIrdH0pfX0se1wiY3dpc2UtY29tcGlsZXJcIjoxMzcsZHVwOjE2Mn1dLDQzNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJuZGFycmF5LXdhcnBcIiksaT10KFwiZ2wtbWF0cml4LWludmVydFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPWUuZGltZW5zaW9uLG89aShbXSxyKTtyZXR1cm4gbih0LGUsZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPGE7KytyKXt0W3JdPW9bKGErMSkqYStyXTtmb3IodmFyIG49MDtuPGE7KytuKXRbcl0rPW9bKGErMSkqbityXSplW25dfXZhciBpPW9bKGErMSkqKGErMSktMV07Zm9yKG49MDtuPGE7KytuKWkrPW9bKGErMSkqbithXSplW25dO3ZhciBzPTEvaTtmb3Iocj0wO3I8YTsrK3IpdFtyXSo9cztyZXR1cm4gdH0pLHR9fSx7XCJnbC1tYXRyaXgtaW52ZXJ0XCI6Mjc0LFwibmRhcnJheS13YXJwXCI6NDQyfV0sNDM2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPU1hdGguZmxvb3IoZSksbj1lLXIsaT0wPD1yJiZyPHQuc2hhcGVbMF0sYT0wPD1yKzEmJnIrMTx0LnNoYXBlWzBdO3JldHVybigxLW4pKihpPyt0LmdldChyKTowKStuKihhPyt0LmdldChyKzEpOjApfWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuPU1hdGguZmxvb3IoZSksaT1lLW4sYT0wPD1uJiZuPHQuc2hhcGVbMF0sbz0wPD1uKzEmJm4rMTx0LnNoYXBlWzBdLHM9TWF0aC5mbG9vcihyKSxsPXItcyxjPTA8PXMmJnM8dC5zaGFwZVsxXSx1PTA8PXMrMSYmcysxPHQuc2hhcGVbMV0saD1hJiZjP3QuZ2V0KG4scyk6MCxmPWEmJnU/dC5nZXQobixzKzEpOjA7cmV0dXJuKDEtbCkqKCgxLWkpKmgraSoobyYmYz90LmdldChuKzEscyk6MCkpK2wqKCgxLWkpKmYraSoobyYmdT90LmdldChuKzEscysxKTowKSl9ZnVuY3Rpb24gYSh0LGUscixuKXt2YXIgaT1NYXRoLmZsb29yKGUpLGE9ZS1pLG89MDw9aSYmaTx0LnNoYXBlWzBdLHM9MDw9aSsxJiZpKzE8dC5zaGFwZVswXSxsPU1hdGguZmxvb3IociksYz1yLWwsdT0wPD1sJiZsPHQuc2hhcGVbMV0saD0wPD1sKzEmJmwrMTx0LnNoYXBlWzFdLGY9TWF0aC5mbG9vcihuKSxwPW4tZixkPTA8PWYmJmY8dC5zaGFwZVsyXSxnPTA8PWYrMSYmZisxPHQuc2hhcGVbMl0sdj1vJiZ1JiZkP3QuZ2V0KGksbCxmKTowLG09byYmaCYmZD90LmdldChpLGwrMSxmKTowLHk9cyYmdSYmZD90LmdldChpKzEsbCxmKTowLHg9cyYmaCYmZD90LmdldChpKzEsbCsxLGYpOjAsYj1vJiZ1JiZnP3QuZ2V0KGksbCxmKzEpOjAsXz1vJiZoJiZnP3QuZ2V0KGksbCsxLGYrMSk6MDtyZXR1cm4oMS1wKSooKDEtYykqKCgxLWEpKnYrYSp5KStjKigoMS1hKSptK2EqeCkpK3AqKCgxLWMpKigoMS1hKSpiK2EqKHMmJnUmJmc/dC5nZXQoaSsxLGwsZisxKTowKSkrYyooKDEtYSkqXythKihzJiZoJiZnP3QuZ2V0KGkrMSxsKzEsZisxKTowKSkpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtzd2l0Y2godC5zaGFwZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gMDtjYXNlIDE6cmV0dXJuIG4odCxlKTtjYXNlIDI6cmV0dXJuIGkodCxlLHIpO2Nhc2UgMzpyZXR1cm4gYSh0LGUscixvKTtkZWZhdWx0OnJldHVybiBmdW5jdGlvbih0KXt2YXIgZSxyLG49MHx0LnNoYXBlLmxlbmd0aCxpPW5ldyBBcnJheShuKSxhPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKSxzPW5ldyBBcnJheShuKTtmb3IoZT0wO2U8bjsrK2Upcj0rYXJndW1lbnRzW2UrMV0saVtlXT1NYXRoLmZsb29yKHIpLGFbZV09ci1pW2VdLG9bZV09MDw9aVtlXSYmaVtlXTx0LnNoYXBlW2VdLHNbZV09MDw9aVtlXSsxJiZpW2VdKzE8dC5zaGFwZVtlXTt2YXIgbCxjLHUsaD0wO3Q6Zm9yKGU9MDtlPDE8PG47KytlKXtmb3IoYz0xLHU9dC5vZmZzZXQsbD0wO2w8bjsrK2wpaWYoZSYxPDxsKXtpZighc1tsXSljb250aW51ZSB0O2MqPWFbbF0sdSs9dC5zdHJpZGVbbF0qKGlbbF0rMSl9ZWxzZXtpZighb1tsXSljb250aW51ZSB0O2MqPTEtYVtsXSx1Kz10LnN0cmlkZVtsXSppW2xdfWgrPWMqdC5kYXRhW3VdfXJldHVybiBofS5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX19LGUuZXhwb3J0cy5kMT1uLGUuZXhwb3J0cy5kMj1pLGUuZXhwb3J0cy5kMz1hfSx7fV0sNDM3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImN3aXNlLWNvbXBpbGVyXCIpLGk9e2JvZHk6XCJcIixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX07ZnVuY3Rpb24gYSh0KXtpZighdClyZXR1cm4gaTtmb3IodmFyIGU9MDtlPHQuYXJncy5sZW5ndGg7KytlKXt2YXIgcj10LmFyZ3NbZV07dC5hcmdzW2VdPTA9PT1lP3tuYW1lOnIsbHZhbHVlOiEwLHJ2YWx1ZTohIXQucnZhbHVlLGNvdW50OnQuY291bnR8fDF9OntuYW1lOnIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfX1yZXR1cm4gdC50aGlzVmFyc3x8KHQudGhpc1ZhcnM9W10pLHQubG9jYWxWYXJzfHwodC5sb2NhbFZhcnM9W10pLHR9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9W10scj0wO3I8dC5hcmdzLmxlbmd0aDsrK3IpZS5wdXNoKFwiYVwiK3IpO3JldHVybiBuZXcgRnVuY3Rpb24oXCJQXCIsW1wicmV0dXJuIGZ1bmN0aW9uIFwiLHQuZnVuY05hbWUsXCJfbmRhcnJheW9wcyhcIixlLmpvaW4oXCIsXCIpLFwiKSB7UChcIixlLmpvaW4oXCIsXCIpLFwiKTtyZXR1cm4gYTB9XCJdLmpvaW4oXCJcIikpKGZ1bmN0aW9uKHQpe3JldHVybiBuKHthcmdzOnQuYXJncyxwcmU6YSh0LnByZSksYm9keTphKHQuYm9keSkscG9zdDphKHQucHJvYyksZnVuY05hbWU6dC5mdW5jTmFtZX0pfSh0KSl9dmFyIHM9e2FkZDpcIitcIixzdWI6XCItXCIsbXVsOlwiKlwiLGRpdjpcIi9cIixtb2Q6XCIlXCIsYmFuZDpcIiZcIixib3I6XCJ8XCIsYnhvcjpcIl5cIixsc2hpZnQ6XCI8PFwiLHJzaGlmdDpcIj4+XCIscnJzaGlmdDpcIj4+PlwifTshZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gcyl7dmFyIGU9c1t0XTtyW3RdPW8oe2FyZ3M6W1wiYXJyYXlcIixcImFycmF5XCIsXCJhcnJheVwiXSxib2R5OnthcmdzOltcImFcIixcImJcIixcImNcIl0sYm9keTpcImE9YlwiK2UrXCJjXCJ9LGZ1bmNOYW1lOnR9KSxyW3QrXCJlcVwiXT1vKHthcmdzOltcImFycmF5XCIsXCJhcnJheVwiXSxib2R5OnthcmdzOltcImFcIixcImJcIl0sYm9keTpcImFcIitlK1wiPWJcIn0scnZhbHVlOiEwLGZ1bmNOYW1lOnQrXCJlcVwifSksclt0K1wic1wiXT1vKHthcmdzOltcImFycmF5XCIsXCJhcnJheVwiLFwic2NhbGFyXCJdLGJvZHk6e2FyZ3M6W1wiYVwiLFwiYlwiLFwic1wiXSxib2R5OlwiYT1iXCIrZStcInNcIn0sZnVuY05hbWU6dCtcInNcIn0pLHJbdCtcInNlcVwiXT1vKHthcmdzOltcImFycmF5XCIsXCJzY2FsYXJcIl0sYm9keTp7YXJnczpbXCJhXCIsXCJzXCJdLGJvZHk6XCJhXCIrZStcIj1zXCJ9LHJ2YWx1ZTohMCxmdW5jTmFtZTp0K1wic2VxXCJ9KX19KCk7dmFyIGw9e25vdDpcIiFcIixibm90OlwiflwiLG5lZzpcIi1cIixyZWNpcDpcIjEuMC9cIn07IWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIGwpe3ZhciBlPWxbdF07clt0XT1vKHthcmdzOltcImFycmF5XCIsXCJhcnJheVwiXSxib2R5OnthcmdzOltcImFcIixcImJcIl0sYm9keTpcImE9XCIrZStcImJcIn0sZnVuY05hbWU6dH0pLHJbdCtcImVxXCJdPW8oe2FyZ3M6W1wiYXJyYXlcIl0sYm9keTp7YXJnczpbXCJhXCJdLGJvZHk6XCJhPVwiK2UrXCJhXCJ9LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOnQrXCJlcVwifSl9fSgpO3ZhciBjPXthbmQ6XCImJlwiLG9yOlwifHxcIixlcTpcIj09PVwiLG5lcTpcIiE9PVwiLGx0OlwiPFwiLGd0OlwiPlwiLGxlcTpcIjw9XCIsZ2VxOlwiPj1cIn07IWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIGMpe3ZhciBlPWNbdF07clt0XT1vKHthcmdzOltcImFycmF5XCIsXCJhcnJheVwiLFwiYXJyYXlcIl0sYm9keTp7YXJnczpbXCJhXCIsXCJiXCIsXCJjXCJdLGJvZHk6XCJhPWJcIitlK1wiY1wifSxmdW5jTmFtZTp0fSksclt0K1wic1wiXT1vKHthcmdzOltcImFycmF5XCIsXCJhcnJheVwiLFwic2NhbGFyXCJdLGJvZHk6e2FyZ3M6W1wiYVwiLFwiYlwiLFwic1wiXSxib2R5OlwiYT1iXCIrZStcInNcIn0sZnVuY05hbWU6dCtcInNcIn0pLHJbdCtcImVxXCJdPW8oe2FyZ3M6W1wiYXJyYXlcIixcImFycmF5XCJdLGJvZHk6e2FyZ3M6W1wiYVwiLFwiYlwiXSxib2R5OlwiYT1hXCIrZStcImJcIn0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6dCtcImVxXCJ9KSxyW3QrXCJzZXFcIl09byh7YXJnczpbXCJhcnJheVwiLFwic2NhbGFyXCJdLGJvZHk6e2FyZ3M6W1wiYVwiLFwic1wiXSxib2R5OlwiYT1hXCIrZStcInNcIn0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6dCtcInNlcVwifSl9fSgpO3ZhciB1PVtcImFic1wiLFwiYWNvc1wiLFwiYXNpblwiLFwiYXRhblwiLFwiY2VpbFwiLFwiY29zXCIsXCJleHBcIixcImZsb29yXCIsXCJsb2dcIixcInJvdW5kXCIsXCJzaW5cIixcInNxcnRcIixcInRhblwiXTshZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PHUubGVuZ3RoOysrdCl7dmFyIGU9dVt0XTtyW2VdPW8oe2FyZ3M6W1wiYXJyYXlcIixcImFycmF5XCJdLHByZTp7YXJnczpbXSxib2R5OlwidGhpc19mPU1hdGguXCIrZSx0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LGJvZHk6e2FyZ3M6W1wiYVwiLFwiYlwiXSxib2R5OlwiYT10aGlzX2YoYilcIix0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LGZ1bmNOYW1lOmV9KSxyW2UrXCJlcVwiXT1vKHthcmdzOltcImFycmF5XCJdLHByZTp7YXJnczpbXSxib2R5OlwidGhpc19mPU1hdGguXCIrZSx0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LGJvZHk6e2FyZ3M6W1wiYVwiXSxib2R5OlwiYT10aGlzX2YoYSlcIix0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOmUrXCJlcVwifSl9fSgpO3ZhciBoPVtcIm1heFwiLFwibWluXCIsXCJhdGFuMlwiLFwicG93XCJdOyFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8aC5sZW5ndGg7Kyt0KXt2YXIgZT1oW3RdO3JbZV09byh7YXJnczpbXCJhcnJheVwiLFwiYXJyYXlcIixcImFycmF5XCJdLHByZTp7YXJnczpbXSxib2R5OlwidGhpc19mPU1hdGguXCIrZSx0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LGJvZHk6e2FyZ3M6W1wiYVwiLFwiYlwiLFwiY1wiXSxib2R5OlwiYT10aGlzX2YoYixjKVwiLHRoaXNWYXJzOltcInRoaXNfZlwiXX0sZnVuY05hbWU6ZX0pLHJbZStcInNcIl09byh7YXJnczpbXCJhcnJheVwiLFwiYXJyYXlcIixcInNjYWxhclwiXSxwcmU6e2FyZ3M6W10sYm9keTpcInRoaXNfZj1NYXRoLlwiK2UsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxib2R5OnthcmdzOltcImFcIixcImJcIixcImNcIl0sYm9keTpcImE9dGhpc19mKGIsYylcIix0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LGZ1bmNOYW1lOmUrXCJzXCJ9KSxyW2UrXCJlcVwiXT1vKHthcmdzOltcImFycmF5XCIsXCJhcnJheVwiXSxwcmU6e2FyZ3M6W10sYm9keTpcInRoaXNfZj1NYXRoLlwiK2UsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxib2R5OnthcmdzOltcImFcIixcImJcIl0sYm9keTpcImE9dGhpc19mKGEsYilcIix0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOmUrXCJlcVwifSkscltlK1wic2VxXCJdPW8oe2FyZ3M6W1wiYXJyYXlcIixcInNjYWxhclwiXSxwcmU6e2FyZ3M6W10sYm9keTpcInRoaXNfZj1NYXRoLlwiK2UsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxib2R5OnthcmdzOltcImFcIixcImJcIl0sYm9keTpcImE9dGhpc19mKGEsYilcIix0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOmUrXCJzZXFcIn0pfX0oKTt2YXIgZj1bXCJhdGFuMlwiLFwicG93XCJdOyFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8Zi5sZW5ndGg7Kyt0KXt2YXIgZT1mW3RdO3JbZStcIm9wXCJdPW8oe2FyZ3M6W1wiYXJyYXlcIixcImFycmF5XCIsXCJhcnJheVwiXSxwcmU6e2FyZ3M6W10sYm9keTpcInRoaXNfZj1NYXRoLlwiK2UsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxib2R5OnthcmdzOltcImFcIixcImJcIixcImNcIl0sYm9keTpcImE9dGhpc19mKGMsYilcIix0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LGZ1bmNOYW1lOmUrXCJvcFwifSkscltlK1wib3BzXCJdPW8oe2FyZ3M6W1wiYXJyYXlcIixcImFycmF5XCIsXCJzY2FsYXJcIl0scHJlOnthcmdzOltdLGJvZHk6XCJ0aGlzX2Y9TWF0aC5cIitlLHRoaXNWYXJzOltcInRoaXNfZlwiXX0sYm9keTp7YXJnczpbXCJhXCIsXCJiXCIsXCJjXCJdLGJvZHk6XCJhPXRoaXNfZihjLGIpXCIsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxmdW5jTmFtZTplK1wib3BzXCJ9KSxyW2UrXCJvcGVxXCJdPW8oe2FyZ3M6W1wiYXJyYXlcIixcImFycmF5XCJdLHByZTp7YXJnczpbXSxib2R5OlwidGhpc19mPU1hdGguXCIrZSx0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LGJvZHk6e2FyZ3M6W1wiYVwiLFwiYlwiXSxib2R5OlwiYT10aGlzX2YoYixhKVwiLHRoaXNWYXJzOltcInRoaXNfZlwiXX0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6ZStcIm9wZXFcIn0pLHJbZStcIm9wc2VxXCJdPW8oe2FyZ3M6W1wiYXJyYXlcIixcInNjYWxhclwiXSxwcmU6e2FyZ3M6W10sYm9keTpcInRoaXNfZj1NYXRoLlwiK2UsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxib2R5OnthcmdzOltcImFcIixcImJcIl0sYm9keTpcImE9dGhpc19mKGIsYSlcIix0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOmUrXCJvcHNlcVwifSl9fSgpLHIuYW55PW4oe2FyZ3M6W1wiYXJyYXlcIl0scHJlOmksYm9keTp7YXJnczpbe25hbWU6XCJhXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sYm9keTpcImlmKGEpe3JldHVybiB0cnVlfVwiLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W10sYm9keTpcInJldHVybiBmYWxzZVwifSxmdW5jTmFtZTpcImFueVwifSksci5hbGw9bih7YXJnczpbXCJhcnJheVwiXSxwcmU6aSxib2R5OnthcmdzOlt7bmFtZTpcInhcIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSxib2R5OlwiaWYoIXgpe3JldHVybiBmYWxzZX1cIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W119LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOltdLGJvZHk6XCJyZXR1cm4gdHJ1ZVwifSxmdW5jTmFtZTpcImFsbFwifSksci5zdW09bih7YXJnczpbXCJhcnJheVwiXSxwcmU6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOltcInRoaXNfc1wiXSxib2R5OlwidGhpc19zPTBcIn0sYm9keTp7YXJnczpbe25hbWU6XCJhXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sYm9keTpcInRoaXNfcys9YVwiLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXCJ0aGlzX3NcIl19LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOltcInRoaXNfc1wiXSxib2R5OlwicmV0dXJuIHRoaXNfc1wifSxmdW5jTmFtZTpcInN1bVwifSksci5wcm9kPW4oe2FyZ3M6W1wiYXJyYXlcIl0scHJlOnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXCJ0aGlzX3NcIl0sYm9keTpcInRoaXNfcz0xXCJ9LGJvZHk6e2FyZ3M6W3tuYW1lOlwiYVwiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6XCJ0aGlzX3MqPWFcIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W1widGhpc19zXCJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXCJ0aGlzX3NcIl0sYm9keTpcInJldHVybiB0aGlzX3NcIn0sZnVuY05hbWU6XCJwcm9kXCJ9KSxyLm5vcm0yc3F1YXJlZD1uKHthcmdzOltcImFycmF5XCJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W1widGhpc19zXCJdLGJvZHk6XCJ0aGlzX3M9MFwifSxib2R5OnthcmdzOlt7bmFtZTpcImFcIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9XSxib2R5OlwidGhpc19zKz1hKmFcIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W1widGhpc19zXCJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXCJ0aGlzX3NcIl0sYm9keTpcInJldHVybiB0aGlzX3NcIn0sZnVuY05hbWU6XCJub3JtMnNxdWFyZWRcIn0pLHIubm9ybTI9bih7YXJnczpbXCJhcnJheVwiXSxwcmU6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOltcInRoaXNfc1wiXSxib2R5OlwidGhpc19zPTBcIn0sYm9keTp7YXJnczpbe25hbWU6XCJhXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfV0sYm9keTpcInRoaXNfcys9YSphXCIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOltcInRoaXNfc1wiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W1widGhpc19zXCJdLGJvZHk6XCJyZXR1cm4gTWF0aC5zcXJ0KHRoaXNfcylcIn0sZnVuY05hbWU6XCJub3JtMlwifSksci5ub3JtaW5mPW4oe2FyZ3M6W1wiYXJyYXlcIl0scHJlOnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXCJ0aGlzX3NcIl0sYm9keTpcInRoaXNfcz0wXCJ9LGJvZHk6e2FyZ3M6W3tuYW1lOlwiYVwiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6NH1dLGJvZHk6XCJpZigtYT50aGlzX3Mpe3RoaXNfcz0tYX1lbHNlIGlmKGE+dGhpc19zKXt0aGlzX3M9YX1cIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W1widGhpc19zXCJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXCJ0aGlzX3NcIl0sYm9keTpcInJldHVybiB0aGlzX3NcIn0sZnVuY05hbWU6XCJub3JtaW5mXCJ9KSxyLm5vcm0xPW4oe2FyZ3M6W1wiYXJyYXlcIl0scHJlOnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXCJ0aGlzX3NcIl0sYm9keTpcInRoaXNfcz0wXCJ9LGJvZHk6e2FyZ3M6W3tuYW1lOlwiYVwiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6M31dLGJvZHk6XCJ0aGlzX3MrPWE8MD8tYTphXCIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOltcInRoaXNfc1wiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W1widGhpc19zXCJdLGJvZHk6XCJyZXR1cm4gdGhpc19zXCJ9LGZ1bmNOYW1lOlwibm9ybTFcIn0pLHIuc3VwPW4oe2FyZ3M6W1wiYXJyYXlcIl0scHJlOntib2R5OlwidGhpc19oPS1JbmZpbml0eVwiLGFyZ3M6W10sdGhpc1ZhcnM6W1widGhpc19oXCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keTpcImlmKF9pbmxpbmVfMV9hcmcwXz50aGlzX2gpdGhpc19oPV9pbmxpbmVfMV9hcmcwX1wiLGFyZ3M6W3tuYW1lOlwiX2lubGluZV8xX2FyZzBfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfV0sdGhpc1ZhcnM6W1widGhpc19oXCJdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keTpcInJldHVybiB0aGlzX2hcIixhcmdzOltdLHRoaXNWYXJzOltcInRoaXNfaFwiXSxsb2NhbFZhcnM6W119fSksci5pbmY9bih7YXJnczpbXCJhcnJheVwiXSxwcmU6e2JvZHk6XCJ0aGlzX2g9SW5maW5pdHlcIixhcmdzOltdLHRoaXNWYXJzOltcInRoaXNfaFwiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6XCJpZihfaW5saW5lXzFfYXJnMF88dGhpc19oKXRoaXNfaD1faW5saW5lXzFfYXJnMF9cIixhcmdzOlt7bmFtZTpcIl9pbmxpbmVfMV9hcmcwX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn1dLHRoaXNWYXJzOltcInRoaXNfaFwiXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6XCJyZXR1cm4gdGhpc19oXCIsYXJnczpbXSx0aGlzVmFyczpbXCJ0aGlzX2hcIl0sbG9jYWxWYXJzOltdfX0pLHIuYXJnbWluPW4oe2FyZ3M6W1wiaW5kZXhcIixcImFycmF5XCIsXCJzaGFwZVwiXSxwcmU6e2JvZHk6XCJ7dGhpc192PUluZmluaXR5O3RoaXNfaT1faW5saW5lXzBfYXJnMl8uc2xpY2UoMCl9XCIsYXJnczpbe25hbWU6XCJfaW5saW5lXzBfYXJnMF9cIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOlwiX2lubGluZV8wX2FyZzFfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZTpcIl9pbmxpbmVfMF9hcmcyX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOltcInRoaXNfaVwiLFwidGhpc192XCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keTpcIntpZihfaW5saW5lXzFfYXJnMV88dGhpc192KXt0aGlzX3Y9X2lubGluZV8xX2FyZzFfO2Zvcih2YXIgX2lubGluZV8xX2s9MDtfaW5saW5lXzFfazxfaW5saW5lXzFfYXJnMF8ubGVuZ3RoOysrX2lubGluZV8xX2spe3RoaXNfaVtfaW5saW5lXzFfa109X2lubGluZV8xX2FyZzBfW19pbmxpbmVfMV9rXX19fVwiLGFyZ3M6W3tuYW1lOlwiX2lubGluZV8xX2FyZzBfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfSx7bmFtZTpcIl9pbmxpbmVfMV9hcmcxX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn1dLHRoaXNWYXJzOltcInRoaXNfaVwiLFwidGhpc192XCJdLGxvY2FsVmFyczpbXCJfaW5saW5lXzFfa1wiXX0scG9zdDp7Ym9keTpcIntyZXR1cm4gdGhpc19pfVwiLGFyZ3M6W10sdGhpc1ZhcnM6W1widGhpc19pXCJdLGxvY2FsVmFyczpbXX19KSxyLmFyZ21heD1uKHthcmdzOltcImluZGV4XCIsXCJhcnJheVwiLFwic2hhcGVcIl0scHJlOntib2R5Olwie3RoaXNfdj0tSW5maW5pdHk7dGhpc19pPV9pbmxpbmVfMF9hcmcyXy5zbGljZSgwKX1cIixhcmdzOlt7bmFtZTpcIl9pbmxpbmVfMF9hcmcwX1wiLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6XCJfaW5saW5lXzBfYXJnMV9cIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOlwiX2lubGluZV8wX2FyZzJfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sdGhpc1ZhcnM6W1widGhpc19pXCIsXCJ0aGlzX3ZcIl0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5Olwie2lmKF9pbmxpbmVfMV9hcmcxXz50aGlzX3Ype3RoaXNfdj1faW5saW5lXzFfYXJnMV87Zm9yKHZhciBfaW5saW5lXzFfaz0wO19pbmxpbmVfMV9rPF9pbmxpbmVfMV9hcmcwXy5sZW5ndGg7KytfaW5saW5lXzFfayl7dGhpc19pW19pbmxpbmVfMV9rXT1faW5saW5lXzFfYXJnMF9bX2lubGluZV8xX2tdfX19XCIsYXJnczpbe25hbWU6XCJfaW5saW5lXzFfYXJnMF9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9LHtuYW1lOlwiX2lubGluZV8xX2FyZzFfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfV0sdGhpc1ZhcnM6W1widGhpc19pXCIsXCJ0aGlzX3ZcIl0sbG9jYWxWYXJzOltcIl9pbmxpbmVfMV9rXCJdfSxwb3N0Ontib2R5Olwie3JldHVybiB0aGlzX2l9XCIsYXJnczpbXSx0aGlzVmFyczpbXCJ0aGlzX2lcIl0sbG9jYWxWYXJzOltdfX0pLHIucmFuZG9tPW8oe2FyZ3M6W1wiYXJyYXlcIl0scHJlOnthcmdzOltdLGJvZHk6XCJ0aGlzX2Y9TWF0aC5yYW5kb21cIix0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LGJvZHk6e2FyZ3M6W1wiYVwiXSxib2R5OlwiYT10aGlzX2YoKVwiLHRoaXNWYXJzOltcInRoaXNfZlwiXX0sZnVuY05hbWU6XCJyYW5kb21cIn0pLHIuYXNzaWduPW8oe2FyZ3M6W1wiYXJyYXlcIixcImFycmF5XCJdLGJvZHk6e2FyZ3M6W1wiYVwiLFwiYlwiXSxib2R5OlwiYT1iXCJ9LGZ1bmNOYW1lOlwiYXNzaWduXCJ9KSxyLmFzc2lnbnM9byh7YXJnczpbXCJhcnJheVwiLFwic2NhbGFyXCJdLGJvZHk6e2FyZ3M6W1wiYVwiLFwiYlwiXSxib2R5OlwiYT1iXCJ9LGZ1bmNOYW1lOlwiYXNzaWduc1wifSksci5lcXVhbHM9bih7YXJnczpbXCJhcnJheVwiLFwiYXJyYXlcIl0scHJlOmksYm9keTp7YXJnczpbe25hbWU6XCJ4XCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcInlcIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSxib2R5OlwiaWYoeCE9PXkpe3JldHVybiBmYWxzZX1cIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W119LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOltdLGJvZHk6XCJyZXR1cm4gdHJ1ZVwifSxmdW5jTmFtZTpcImVxdWFsc1wifSl9LHtcImN3aXNlLWNvbXBpbGVyXCI6MTM3fV0sNDM4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIm5kYXJyYXlcIiksaT10KFwiLi9kb0NvbnZlcnQuanNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLGE9dCxvPTE7QXJyYXkuaXNBcnJheShhKTspci5wdXNoKGEubGVuZ3RoKSxvKj1hLmxlbmd0aCxhPWFbMF07cmV0dXJuIDA9PT1yLmxlbmd0aD9uKCk6KGV8fChlPW4obmV3IEZsb2F0NjRBcnJheShvKSxyKSksaShlLHQpLGUpfX0se1wiLi9kb0NvbnZlcnQuanNcIjo0MzksbmRhcnJheTo0NDN9XSw0Mzk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dChcImN3aXNlLWNvbXBpbGVyXCIpKHthcmdzOltcImFycmF5XCIsXCJzY2FsYXJcIixcImluZGV4XCJdLHByZTp7Ym9keTpcInt9XCIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6XCJ7XFxudmFyIF9pbmxpbmVfMV92PV9pbmxpbmVfMV9hcmcxXyxfaW5saW5lXzFfaVxcbmZvcihfaW5saW5lXzFfaT0wO19pbmxpbmVfMV9pPF9pbmxpbmVfMV9hcmcyXy5sZW5ndGgtMTsrK19pbmxpbmVfMV9pKSB7XFxuX2lubGluZV8xX3Y9X2lubGluZV8xX3ZbX2lubGluZV8xX2FyZzJfW19pbmxpbmVfMV9pXV1cXG59XFxuX2lubGluZV8xX2FyZzBfPV9pbmxpbmVfMV92W19pbmxpbmVfMV9hcmcyX1tfaW5saW5lXzFfYXJnMl8ubGVuZ3RoLTFdXVxcbn1cIixhcmdzOlt7bmFtZTpcIl9pbmxpbmVfMV9hcmcwX1wiLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzFfYXJnMV9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xX2FyZzJfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDo0fV0sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltcIl9pbmxpbmVfMV9pXCIsXCJfaW5saW5lXzFfdlwiXX0scG9zdDp7Ym9keTpcInt9XCIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGZ1bmNOYW1lOlwiY29udmVydFwiLGJsb2NrU2l6ZTo2NH0pfSx7XCJjd2lzZS1jb21waWxlclwiOjEzN31dLDQ0MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJ0eXBlZGFycmF5LXBvb2xcIiksaT0zMjtmdW5jdGlvbiBhKHQpe3N3aXRjaCh0KXtjYXNlXCJ1aW50OFwiOnJldHVybltuLm1hbGxvY1VpbnQ4LG4uZnJlZVVpbnQ4XTtjYXNlXCJ1aW50MTZcIjpyZXR1cm5bbi5tYWxsb2NVaW50MTYsbi5mcmVlVWludDE2XTtjYXNlXCJ1aW50MzJcIjpyZXR1cm5bbi5tYWxsb2NVaW50MzIsbi5mcmVlVWludDMyXTtjYXNlXCJpbnQ4XCI6cmV0dXJuW24ubWFsbG9jSW50OCxuLmZyZWVJbnQ4XTtjYXNlXCJpbnQxNlwiOnJldHVybltuLm1hbGxvY0ludDE2LG4uZnJlZUludDE2XTtjYXNlXCJpbnQzMlwiOnJldHVybltuLm1hbGxvY0ludDMyLG4uZnJlZUludDMyXTtjYXNlXCJmbG9hdDMyXCI6cmV0dXJuW24ubWFsbG9jRmxvYXQsbi5mcmVlRmxvYXRdO2Nhc2VcImZsb2F0NjRcIjpyZXR1cm5bbi5tYWxsb2NEb3VibGUsbi5mcmVlRG91YmxlXTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT1bXSxyPTA7cjx0OysrcillLnB1c2goXCJzXCIrcik7Zm9yKHI9MDtyPHQ7KytyKWUucHVzaChcIm5cIityKTtmb3Iocj0xO3I8dDsrK3IpZS5wdXNoKFwiZFwiK3IpO2ZvcihyPTE7cjx0OysrcillLnB1c2goXCJlXCIrcik7Zm9yKHI9MTtyPHQ7KytyKWUucHVzaChcImZcIityKTtyZXR1cm4gZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1bXCIndXNlIHN0cmljdCdcIl0sbj1bXCJuZGFycmF5U29ydFdyYXBwZXJcIix0LmpvaW4oXCJkXCIpLGVdLmpvaW4oXCJcIik7ci5wdXNoKFtcImZ1bmN0aW9uIFwiLG4sXCIoXCIsW1wiYXJyYXlcIl0uam9pbihcIixcIiksXCIpe1wiXS5qb2luKFwiXCIpKTtmb3IodmFyIHM9W1wiZGF0YT1hcnJheS5kYXRhLG9mZnNldD1hcnJheS5vZmZzZXR8MCxzaGFwZT1hcnJheS5zaGFwZSxzdHJpZGU9YXJyYXkuc3RyaWRlXCJdLGw9MDtsPHQubGVuZ3RoOysrbClzLnB1c2goW1wic1wiLGwsXCI9c3RyaWRlW1wiLGwsXCJdfDAsblwiLGwsXCI9c2hhcGVbXCIsbCxcIl18MFwiXS5qb2luKFwiXCIpKTt2YXIgYz1uZXcgQXJyYXkodC5sZW5ndGgpLHU9W107Zm9yKGw9MDtsPHQubGVuZ3RoOysrbCkwIT09KHA9dFtsXSkmJigwPT09dS5sZW5ndGg/Y1twXT1cIjFcIjpjW3BdPXUuam9pbihcIipcIiksdS5wdXNoKFwiblwiK3ApKTt2YXIgaD0tMSxmPS0xO2ZvcihsPTA7bDx0Lmxlbmd0aDsrK2wpe3ZhciBwLGQ9dFtsXTswIT09ZCYmKGg+MD9zLnB1c2goW1wiZFwiLGQsXCI9c1wiLGQsXCItZFwiLGgsXCIqblwiLGhdLmpvaW4oXCJcIikpOnMucHVzaChbXCJkXCIsZCxcIj1zXCIsZF0uam9pbihcIlwiKSksaD1kKSwwIT0ocD10Lmxlbmd0aC0xLWwpJiYoZj4wP3MucHVzaChbXCJlXCIscCxcIj1zXCIscCxcIi1lXCIsZixcIipuXCIsZixcIixmXCIscCxcIj1cIixjW3BdLFwiLWZcIixmLFwiKm5cIixmXS5qb2luKFwiXCIpKTpzLnB1c2goW1wiZVwiLHAsXCI9c1wiLHAsXCIsZlwiLHAsXCI9XCIsY1twXV0uam9pbihcIlwiKSksZj1wKX1yLnB1c2goXCJ2YXIgXCIrcy5qb2luKFwiLFwiKSk7dmFyIGc9W1wiMFwiLFwibjAtMVwiLFwiZGF0YVwiLFwib2Zmc2V0XCJdLmNvbmNhdChvKHQubGVuZ3RoKSk7ci5wdXNoKFtcImlmKG4wPD1cIixpLFwiKXtcIixcImluc2VydGlvblNvcnQoXCIsZy5qb2luKFwiLFwiKSxcIil9ZWxzZXtcIixcInF1aWNrU29ydChcIixnLmpvaW4oXCIsXCIpLFwiKX1cIl0uam9pbihcIlwiKSksci5wdXNoKFwifXJldHVybiBcIituKTt2YXIgdj1uZXcgRnVuY3Rpb24oXCJpbnNlcnRpb25Tb3J0XCIsXCJxdWlja1NvcnRcIixyLmpvaW4oXCJcXG5cIikpLG09ZnVuY3Rpb24odCxlKXt2YXIgcj1bXCIndXNlIHN0cmljdCdcIl0sbj1bXCJuZGFycmF5SW5zZXJ0aW9uU29ydFwiLHQuam9pbihcImRcIiksZV0uam9pbihcIlwiKSxpPVtcImxlZnRcIixcInJpZ2h0XCIsXCJkYXRhXCIsXCJvZmZzZXRcIl0uY29uY2F0KG8odC5sZW5ndGgpKSxzPWEoZSksbD1bXCJpLGosY3B0cixwdHI9bGVmdCpzMCtvZmZzZXRcIl07aWYodC5sZW5ndGg+MSl7Zm9yKHZhciBjPVtdLHU9MTt1PHQubGVuZ3RoOysrdSlsLnB1c2goXCJpXCIrdSksYy5wdXNoKFwiblwiK3UpO3M/bC5wdXNoKFwic2NyYXRjaD1tYWxsb2MoXCIrYy5qb2luKFwiKlwiKStcIilcIik6bC5wdXNoKFwic2NyYXRjaD1uZXcgQXJyYXkoXCIrYy5qb2luKFwiKlwiKStcIilcIiksbC5wdXNoKFwiZHB0clwiLFwic3B0clwiLFwiYVwiLFwiYlwiKX1lbHNlIGwucHVzaChcInNjcmF0Y2hcIik7ZnVuY3Rpb24gaCh0KXtyZXR1cm5cImdlbmVyaWNcIj09PWU/W1wiZGF0YS5nZXQoXCIsdCxcIilcIl0uam9pbihcIlwiKTpbXCJkYXRhW1wiLHQsXCJdXCJdLmpvaW4oXCJcIil9ZnVuY3Rpb24gZih0LHIpe3JldHVyblwiZ2VuZXJpY1wiPT09ZT9bXCJkYXRhLnNldChcIix0LFwiLFwiLHIsXCIpXCJdLmpvaW4oXCJcIik6W1wiZGF0YVtcIix0LFwiXT1cIixyXS5qb2luKFwiXCIpfWlmKHIucHVzaChbXCJmdW5jdGlvbiBcIixuLFwiKFwiLGkuam9pbihcIixcIiksXCIpe3ZhciBcIixsLmpvaW4oXCIsXCIpXS5qb2luKFwiXCIpLFwiZm9yKGk9bGVmdCsxO2k8PXJpZ2h0OysraSl7XCIsXCJqPWk7cHRyKz1zMFwiLFwiY3B0cj1wdHJcIiksdC5sZW5ndGg+MSl7Zm9yKHIucHVzaChcImRwdHI9MDtzcHRyPXB0clwiKSx1PXQubGVuZ3RoLTE7dT49MDstLXUpMCE9PShwPXRbdV0pJiZyLnB1c2goW1wiZm9yKGlcIixwLFwiPTA7aVwiLHAsXCI8blwiLHAsXCI7KytpXCIscCxcIil7XCJdLmpvaW4oXCJcIikpO2ZvcihyLnB1c2goXCJzY3JhdGNoW2RwdHIrK109XCIsaChcInNwdHJcIikpLHU9MDt1PHQubGVuZ3RoOysrdSkwIT09KHA9dFt1XSkmJnIucHVzaChcInNwdHIrPWRcIitwLFwifVwiKTtmb3Ioci5wdXNoKFwiX19nOndoaWxlKGotLVxceDNlbGVmdCl7XCIsXCJkcHRyPTBcIixcInNwdHI9Y3B0ci1zMFwiKSx1PTE7dTx0Lmxlbmd0aDsrK3UpMT09PXUmJnIucHVzaChcIl9fbDpcIiksci5wdXNoKFtcImZvcihpXCIsdSxcIj0wO2lcIix1LFwiPG5cIix1LFwiOysraVwiLHUsXCIpe1wiXS5qb2luKFwiXCIpKTtmb3Ioci5wdXNoKFtcImE9XCIsaChcInNwdHJcIiksXCJcXG5iPXNjcmF0Y2hbZHB0cl1cXG5pZihhPGIpe2JyZWFrIF9fZ31cXG5pZihhPmIpe2JyZWFrIF9fbH1cIl0uam9pbihcIlwiKSksdT10Lmxlbmd0aC0xO3U+PTE7LS11KXIucHVzaChcInNwdHIrPWVcIit1LFwiZHB0cis9ZlwiK3UsXCJ9XCIpO2ZvcihyLnB1c2goXCJkcHRyPWNwdHI7c3B0cj1jcHRyLXMwXCIpLHU9dC5sZW5ndGgtMTt1Pj0wOy0tdSkwIT09KHA9dFt1XSkmJnIucHVzaChbXCJmb3IoaVwiLHAsXCI9MDtpXCIscCxcIjxuXCIscCxcIjsrK2lcIixwLFwiKXtcIl0uam9pbihcIlwiKSk7Zm9yKHIucHVzaChmKFwiZHB0clwiLGgoXCJzcHRyXCIpKSksdT0wO3U8dC5sZW5ndGg7Kyt1KTAhPT0ocD10W3VdKSYmci5wdXNoKFtcImRwdHIrPWRcIixwLFwiO3NwdHIrPWRcIixwXS5qb2luKFwiXCIpLFwifVwiKTtmb3Ioci5wdXNoKFwiY3B0ci09czBcXG59XCIpLHIucHVzaChcImRwdHI9Y3B0cjtzcHRyPTBcIiksdT10Lmxlbmd0aC0xO3U+PTA7LS11KTAhPT0ocD10W3VdKSYmci5wdXNoKFtcImZvcihpXCIscCxcIj0wO2lcIixwLFwiPG5cIixwLFwiOysraVwiLHAsXCIpe1wiXS5qb2luKFwiXCIpKTtmb3Ioci5wdXNoKGYoXCJkcHRyXCIsXCJzY3JhdGNoW3NwdHIrK11cIikpLHU9MDt1PHQubGVuZ3RoOysrdSl7dmFyIHA7MCE9PShwPXRbdV0pJiZyLnB1c2goXCJkcHRyKz1kXCIrcCxcIn1cIil9fWVsc2Ugci5wdXNoKFwic2NyYXRjaD1cIitoKFwicHRyXCIpLFwid2hpbGUoKGotLVxceDNlbGVmdCkmJihcIitoKFwiY3B0ci1zMFwiKStcIj5zY3JhdGNoKSl7XCIsZihcImNwdHJcIixoKFwiY3B0ci1zMFwiKSksXCJjcHRyLT1zMFwiLFwifVwiLGYoXCJjcHRyXCIsXCJzY3JhdGNoXCIpKTtyZXR1cm4gci5wdXNoKFwifVwiKSx0Lmxlbmd0aD4xJiZzJiZyLnB1c2goXCJmcmVlKHNjcmF0Y2gpXCIpLHIucHVzaChcIn0gcmV0dXJuIFwiK24pLHM/bmV3IEZ1bmN0aW9uKFwibWFsbG9jXCIsXCJmcmVlXCIsci5qb2luKFwiXFxuXCIpKShzWzBdLHNbMV0pOm5ldyBGdW5jdGlvbihyLmpvaW4oXCJcXG5cIikpKCl9KHQsZSkseT1mdW5jdGlvbih0LGUscil7dmFyIG49W1wiJ3VzZSBzdHJpY3QnXCJdLHM9W1wibmRhcnJheVF1aWNrU29ydFwiLHQuam9pbihcImRcIiksZV0uam9pbihcIlwiKSxsPVtcImxlZnRcIixcInJpZ2h0XCIsXCJkYXRhXCIsXCJvZmZzZXRcIl0uY29uY2F0KG8odC5sZW5ndGgpKSxjPWEoZSksdT0wO24ucHVzaChbXCJmdW5jdGlvbiBcIixzLFwiKFwiLGwuam9pbihcIixcIiksXCIpe1wiXS5qb2luKFwiXCIpKTt2YXIgaD1bXCJzaXh0aD0oKHJpZ2h0LWxlZnQrMSkvNil8MFwiLFwiaW5kZXgxPWxlZnQrc2l4dGhcIixcImluZGV4NT1yaWdodC1zaXh0aFwiLFwiaW5kZXgzPShsZWZ0K3JpZ2h0KT4+MVwiLFwiaW5kZXgyPWluZGV4My1zaXh0aFwiLFwiaW5kZXg0PWluZGV4MytzaXh0aFwiLFwiZWwxPWluZGV4MVwiLFwiZWwyPWluZGV4MlwiLFwiZWwzPWluZGV4M1wiLFwiZWw0PWluZGV4NFwiLFwiZWw1PWluZGV4NVwiLFwibGVzcz1sZWZ0KzFcIixcImdyZWF0PXJpZ2h0LTFcIixcInBpdm90c19hcmVfZXF1YWw9dHJ1ZVwiLFwidG1wXCIsXCJ0bXAwXCIsXCJ4XCIsXCJ5XCIsXCJ6XCIsXCJrXCIsXCJwdHIwXCIsXCJwdHIxXCIsXCJwdHIyXCIsXCJjb21wX3Bpdm90MT0wXCIsXCJjb21wX3Bpdm90Mj0wXCIsXCJjb21wPTBcIl07aWYodC5sZW5ndGg+MSl7Zm9yKHZhciBmPVtdLHA9MTtwPHQubGVuZ3RoOysrcClmLnB1c2goXCJuXCIrcCksaC5wdXNoKFwiaVwiK3ApO2ZvcihwPTA7cDw4OysrcCloLnB1c2goXCJiX3B0clwiK3ApO2gucHVzaChcInB0cjNcIixcInB0cjRcIixcInB0cjVcIixcInB0cjZcIixcInB0cjdcIixcInBpdm90X3B0clwiLFwicHRyX3NoaWZ0XCIsXCJlbGVtZW50U2l6ZT1cIitmLmpvaW4oXCIqXCIpKSxjP2gucHVzaChcInBpdm90MT1tYWxsb2MoZWxlbWVudFNpemUpXCIsXCJwaXZvdDI9bWFsbG9jKGVsZW1lbnRTaXplKVwiKTpoLnB1c2goXCJwaXZvdDE9bmV3IEFycmF5KGVsZW1lbnRTaXplKSxwaXZvdDI9bmV3IEFycmF5KGVsZW1lbnRTaXplKVwiKX1lbHNlIGgucHVzaChcInBpdm90MVwiLFwicGl2b3QyXCIpO2Z1bmN0aW9uIGQodCl7cmV0dXJuW1wiKG9mZnNldCtcIix0LFwiKnMwKVwiXS5qb2luKFwiXCIpfWZ1bmN0aW9uIGcodCl7cmV0dXJuXCJnZW5lcmljXCI9PT1lP1tcImRhdGEuZ2V0KFwiLHQsXCIpXCJdLmpvaW4oXCJcIik6W1wiZGF0YVtcIix0LFwiXVwiXS5qb2luKFwiXCIpfWZ1bmN0aW9uIHYodCxyKXtyZXR1cm5cImdlbmVyaWNcIj09PWU/W1wiZGF0YS5zZXQoXCIsdCxcIixcIixyLFwiKVwiXS5qb2luKFwiXCIpOltcImRhdGFbXCIsdCxcIl09XCIscl0uam9pbihcIlwiKX1mdW5jdGlvbiBtKGUscixpKXtpZigxPT09ZS5sZW5ndGgpbi5wdXNoKFwicHRyMD1cIitkKGVbMF0pKTtlbHNlIGZvcih2YXIgYT0wO2E8ZS5sZW5ndGg7KythKW4ucHVzaChbXCJiX3B0clwiLGEsXCI9czAqXCIsZVthXV0uam9pbihcIlwiKSk7Zm9yKHImJm4ucHVzaChcInBpdm90X3B0cj0wXCIpLG4ucHVzaChcInB0cl9zaGlmdD1vZmZzZXRcIiksYT10Lmxlbmd0aC0xO2E+PTA7LS1hKTAhPT0obz10W2FdKSYmbi5wdXNoKFtcImZvcihpXCIsbyxcIj0wO2lcIixvLFwiPG5cIixvLFwiOysraVwiLG8sXCIpe1wiXS5qb2luKFwiXCIpKTtpZihlLmxlbmd0aD4xKWZvcihhPTA7YTxlLmxlbmd0aDsrK2Epbi5wdXNoKFtcInB0clwiLGEsXCI9Yl9wdHJcIixhLFwiK3B0cl9zaGlmdFwiXS5qb2luKFwiXCIpKTtmb3Iobi5wdXNoKGkpLHImJm4ucHVzaChcIisrcGl2b3RfcHRyXCIpLGE9MDthPHQubGVuZ3RoOysrYSl7dmFyIG87MCE9PShvPXRbYV0pJiYoZS5sZW5ndGg+MT9uLnB1c2goXCJwdHJfc2hpZnQrPWRcIitvKTpuLnB1c2goXCJwdHIwKz1kXCIrbyksbi5wdXNoKFwifVwiKSl9fWZ1bmN0aW9uIHkoZSxyLGksYSl7aWYoMT09PXIubGVuZ3RoKW4ucHVzaChcInB0cjA9XCIrZChyWzBdKSk7ZWxzZXtmb3IodmFyIG89MDtvPHIubGVuZ3RoOysrbyluLnB1c2goW1wiYl9wdHJcIixvLFwiPXMwKlwiLHJbb11dLmpvaW4oXCJcIikpO24ucHVzaChcInB0cl9zaGlmdD1vZmZzZXRcIil9Zm9yKGkmJm4ucHVzaChcInBpdm90X3B0cj0wXCIpLGUmJm4ucHVzaChlK1wiOlwiKSxvPTE7bzx0Lmxlbmd0aDsrK28pbi5wdXNoKFtcImZvcihpXCIsbyxcIj0wO2lcIixvLFwiPG5cIixvLFwiOysraVwiLG8sXCIpe1wiXS5qb2luKFwiXCIpKTtpZihyLmxlbmd0aD4xKWZvcihvPTA7bzxyLmxlbmd0aDsrK28pbi5wdXNoKFtcInB0clwiLG8sXCI9Yl9wdHJcIixvLFwiK3B0cl9zaGlmdFwiXS5qb2luKFwiXCIpKTtmb3Iobi5wdXNoKGEpLG89dC5sZW5ndGgtMTtvPj0xOy0tbylpJiZuLnB1c2goXCJwaXZvdF9wdHIrPWZcIitvKSxyLmxlbmd0aD4xP24ucHVzaChcInB0cl9zaGlmdCs9ZVwiK28pOm4ucHVzaChcInB0cjArPWVcIitvKSxuLnB1c2goXCJ9XCIpfWZ1bmN0aW9uIHgoKXt0Lmxlbmd0aD4xJiZjJiZuLnB1c2goXCJmcmVlKHBpdm90MSlcIixcImZyZWUocGl2b3QyKVwiKX1mdW5jdGlvbiBiKGUscil7dmFyIGk9XCJlbFwiK2UsYT1cImVsXCIrcjtpZih0Lmxlbmd0aD4xKXt2YXIgbz1cIl9fbFwiKyArK3U7eShvLFtpLGFdLCExLFtcImNvbXA9XCIsZyhcInB0cjBcIiksXCItXCIsZyhcInB0cjFcIiksXCJcXG5cIixcImlmKGNvbXA+MCl7dG1wMD1cIixpLFwiO1wiLGksXCI9XCIsYSxcIjtcIixhLFwiPXRtcDA7YnJlYWsgXCIsbyxcIn1cXG5cIixcImlmKGNvbXA8MCl7YnJlYWsgXCIsbyxcIn1cIl0uam9pbihcIlwiKSl9ZWxzZSBuLnB1c2goW1wiaWYoXCIsZyhkKGkpKSxcIj5cIixnKGQoYSkpLFwiKXt0bXAwPVwiLGksXCI7XCIsaSxcIj1cIixhLFwiO1wiLGEsXCI9dG1wMH1cIl0uam9pbihcIlwiKSl9ZnVuY3Rpb24gXyhlLHIpe3QubGVuZ3RoPjE/bShbZSxyXSwhMSx2KFwicHRyMFwiLGcoXCJwdHIxXCIpKSk6bi5wdXNoKHYoZChlKSxnKGQocikpKSl9ZnVuY3Rpb24gdyhlLHIsaSl7aWYodC5sZW5ndGg+MSl7dmFyIGE9XCJfX2xcIisgKyt1O3koYSxbcl0sITAsW2UsXCI9XCIsZyhcInB0cjBcIiksXCItcGl2b3RcIixpLFwiW3Bpdm90X3B0cl1cXG5cIixcImlmKFwiLGUsXCIhPT0wKXticmVhayBcIixhLFwifVwiXS5qb2luKFwiXCIpKX1lbHNlIG4ucHVzaChbZSxcIj1cIixnKGQocikpLFwiLXBpdm90XCIsaV0uam9pbihcIlwiKSl9ZnVuY3Rpb24gayhlLHIpe3QubGVuZ3RoPjE/bShbZSxyXSwhMSxbXCJ0bXA9XCIsZyhcInB0cjBcIiksXCJcXG5cIix2KFwicHRyMFwiLGcoXCJwdHIxXCIpKSxcIlxcblwiLHYoXCJwdHIxXCIsXCJ0bXBcIildLmpvaW4oXCJcIikpOm4ucHVzaChbXCJwdHIwPVwiLGQoZSksXCJcXG5cIixcInB0cjE9XCIsZChyKSxcIlxcblwiLFwidG1wPVwiLGcoXCJwdHIwXCIpLFwiXFxuXCIsdihcInB0cjBcIixnKFwicHRyMVwiKSksXCJcXG5cIix2KFwicHRyMVwiLFwidG1wXCIpXS5qb2luKFwiXCIpKX1mdW5jdGlvbiBBKGUscixpKXt0Lmxlbmd0aD4xPyhtKFtlLHIsaV0sITEsW1widG1wPVwiLGcoXCJwdHIwXCIpLFwiXFxuXCIsdihcInB0cjBcIixnKFwicHRyMVwiKSksXCJcXG5cIix2KFwicHRyMVwiLGcoXCJwdHIyXCIpKSxcIlxcblwiLHYoXCJwdHIyXCIsXCJ0bXBcIildLmpvaW4oXCJcIikpLG4ucHVzaChcIisrXCIrcixcIi0tXCIraSkpOm4ucHVzaChbXCJwdHIwPVwiLGQoZSksXCJcXG5cIixcInB0cjE9XCIsZChyKSxcIlxcblwiLFwicHRyMj1cIixkKGkpLFwiXFxuXCIsXCIrK1wiLHIsXCJcXG5cIixcIi0tXCIsaSxcIlxcblwiLFwidG1wPVwiLGcoXCJwdHIwXCIpLFwiXFxuXCIsdihcInB0cjBcIixnKFwicHRyMVwiKSksXCJcXG5cIix2KFwicHRyMVwiLGcoXCJwdHIyXCIpKSxcIlxcblwiLHYoXCJwdHIyXCIsXCJ0bXBcIildLmpvaW4oXCJcIikpfWZ1bmN0aW9uIFQodCxlKXtrKHQsZSksbi5wdXNoKFwiLS1cIitlKX1mdW5jdGlvbiBNKGUscixpKXt0Lmxlbmd0aD4xP20oW2Uscl0sITAsW3YoXCJwdHIwXCIsZyhcInB0cjFcIikpLFwiXFxuXCIsdihcInB0cjFcIixbXCJwaXZvdFwiLGksXCJbcGl2b3RfcHRyXVwiXS5qb2luKFwiXCIpKV0uam9pbihcIlwiKSk6bi5wdXNoKHYoZChlKSxnKGQocikpKSx2KGQociksXCJwaXZvdFwiK2kpKX1mdW5jdGlvbiBTKGUscil7bi5wdXNoKFtcImlmKChcIixyLFwiLVwiLGUsXCIpPD1cIixpLFwiKXtcXG5cIixcImluc2VydGlvblNvcnQoXCIsZSxcIixcIixyLFwiLGRhdGEsb2Zmc2V0LFwiLG8odC5sZW5ndGgpLmpvaW4oXCIsXCIpLFwiKVxcblwiLFwifWVsc2V7XFxuXCIscyxcIihcIixlLFwiLFwiLHIsXCIsZGF0YSxvZmZzZXQsXCIsbyh0Lmxlbmd0aCkuam9pbihcIixcIiksXCIpXFxuXCIsXCJ9XCJdLmpvaW4oXCJcIikpfWZ1bmN0aW9uIEUoZSxyLGkpe3QubGVuZ3RoPjE/KG4ucHVzaChbXCJfX2xcIiwrK3UsXCI6d2hpbGUodHJ1ZSl7XCJdLmpvaW4oXCJcIikpLG0oW2VdLCEwLFtcImlmKFwiLGcoXCJwdHIwXCIpLFwiIT09cGl2b3RcIixyLFwiW3Bpdm90X3B0cl0pe2JyZWFrIF9fbFwiLHUsXCJ9XCJdLmpvaW4oXCJcIikpLG4ucHVzaChpLFwifVwiKSk6bi5wdXNoKFtcIndoaWxlKFwiLGcoZChlKSksXCI9PT1waXZvdFwiLHIsXCIpe1wiLGksXCJ9XCJdLmpvaW4oXCJcIikpfXJldHVybiBuLnB1c2goXCJ2YXIgXCIraC5qb2luKFwiLFwiKSksYigxLDIpLGIoNCw1KSxiKDEsMyksYigyLDMpLGIoMSw0KSxiKDMsNCksYigyLDUpLGIoMiwzKSxiKDQsNSksdC5sZW5ndGg+MT9tKFtcImVsMVwiLFwiZWwyXCIsXCJlbDNcIixcImVsNFwiLFwiZWw1XCIsXCJpbmRleDFcIixcImluZGV4M1wiLFwiaW5kZXg1XCJdLCEwLFtcInBpdm90MVtwaXZvdF9wdHJdPVwiLGcoXCJwdHIxXCIpLFwiXFxuXCIsXCJwaXZvdDJbcGl2b3RfcHRyXT1cIixnKFwicHRyM1wiKSxcIlxcblwiLFwicGl2b3RzX2FyZV9lcXVhbD1waXZvdHNfYXJlX2VxdWFsJiYocGl2b3QxW3Bpdm90X3B0cl09PT1waXZvdDJbcGl2b3RfcHRyXSlcXG5cIixcIng9XCIsZyhcInB0cjBcIiksXCJcXG5cIixcInk9XCIsZyhcInB0cjJcIiksXCJcXG5cIixcIno9XCIsZyhcInB0cjRcIiksXCJcXG5cIix2KFwicHRyNVwiLFwieFwiKSxcIlxcblwiLHYoXCJwdHI2XCIsXCJ5XCIpLFwiXFxuXCIsdihcInB0cjdcIixcInpcIildLmpvaW4oXCJcIikpOm4ucHVzaChbXCJwaXZvdDE9XCIsZyhkKFwiZWwyXCIpKSxcIlxcblwiLFwicGl2b3QyPVwiLGcoZChcImVsNFwiKSksXCJcXG5cIixcInBpdm90c19hcmVfZXF1YWw9cGl2b3QxPT09cGl2b3QyXFxuXCIsXCJ4PVwiLGcoZChcImVsMVwiKSksXCJcXG5cIixcInk9XCIsZyhkKFwiZWwzXCIpKSxcIlxcblwiLFwiej1cIixnKGQoXCJlbDVcIikpLFwiXFxuXCIsdihkKFwiaW5kZXgxXCIpLFwieFwiKSxcIlxcblwiLHYoZChcImluZGV4M1wiKSxcInlcIiksXCJcXG5cIix2KGQoXCJpbmRleDVcIiksXCJ6XCIpXS5qb2luKFwiXCIpKSxfKFwiaW5kZXgyXCIsXCJsZWZ0XCIpLF8oXCJpbmRleDRcIixcInJpZ2h0XCIpLG4ucHVzaChcImlmKHBpdm90c19hcmVfZXF1YWwpe1wiKSxuLnB1c2goXCJmb3Ioaz1sZXNzO2s8PWdyZWF0Oysrayl7XCIpLHcoXCJjb21wXCIsXCJrXCIsMSksbi5wdXNoKFwiaWYoY29tcD09PTApe2NvbnRpbnVlfVwiKSxuLnB1c2goXCJpZihjb21wPDApe1wiKSxuLnB1c2goXCJpZihrIT09bGVzcyl7XCIpLGsoXCJrXCIsXCJsZXNzXCIpLG4ucHVzaChcIn1cIiksbi5wdXNoKFwiKytsZXNzXCIpLG4ucHVzaChcIn1lbHNle1wiKSxuLnB1c2goXCJ3aGlsZSh0cnVlKXtcIiksdyhcImNvbXBcIixcImdyZWF0XCIsMSksbi5wdXNoKFwiaWYoY29tcD4wKXtcIiksbi5wdXNoKFwiZ3JlYXQtLVwiKSxuLnB1c2goXCJ9ZWxzZSBpZihjb21wPDApe1wiKSxBKFwia1wiLFwibGVzc1wiLFwiZ3JlYXRcIiksbi5wdXNoKFwiYnJlYWtcIiksbi5wdXNoKFwifWVsc2V7XCIpLFQoXCJrXCIsXCJncmVhdFwiKSxuLnB1c2goXCJicmVha1wiKSxuLnB1c2goXCJ9XCIpLG4ucHVzaChcIn1cIiksbi5wdXNoKFwifVwiKSxuLnB1c2goXCJ9XCIpLG4ucHVzaChcIn1lbHNle1wiKSxuLnB1c2goXCJmb3Ioaz1sZXNzO2s8PWdyZWF0Oysrayl7XCIpLHcoXCJjb21wX3Bpdm90MVwiLFwia1wiLDEpLG4ucHVzaChcImlmKGNvbXBfcGl2b3QxPDApe1wiKSxuLnB1c2goXCJpZihrIT09bGVzcyl7XCIpLGsoXCJrXCIsXCJsZXNzXCIpLG4ucHVzaChcIn1cIiksbi5wdXNoKFwiKytsZXNzXCIpLG4ucHVzaChcIn1lbHNle1wiKSx3KFwiY29tcF9waXZvdDJcIixcImtcIiwyKSxuLnB1c2goXCJpZihjb21wX3Bpdm90Mj4wKXtcIiksbi5wdXNoKFwid2hpbGUodHJ1ZSl7XCIpLHcoXCJjb21wXCIsXCJncmVhdFwiLDIpLG4ucHVzaChcImlmKGNvbXA+MCl7XCIpLG4ucHVzaChcImlmKC0tZ3JlYXQ8ayl7YnJlYWt9XCIpLG4ucHVzaChcImNvbnRpbnVlXCIpLG4ucHVzaChcIn1lbHNle1wiKSx3KFwiY29tcFwiLFwiZ3JlYXRcIiwxKSxuLnB1c2goXCJpZihjb21wPDApe1wiKSxBKFwia1wiLFwibGVzc1wiLFwiZ3JlYXRcIiksbi5wdXNoKFwifWVsc2V7XCIpLFQoXCJrXCIsXCJncmVhdFwiKSxuLnB1c2goXCJ9XCIpLG4ucHVzaChcImJyZWFrXCIpLG4ucHVzaChcIn1cIiksbi5wdXNoKFwifVwiKSxuLnB1c2goXCJ9XCIpLG4ucHVzaChcIn1cIiksbi5wdXNoKFwifVwiKSxuLnB1c2goXCJ9XCIpLE0oXCJsZWZ0XCIsXCIobGVzcy0xKVwiLDEpLE0oXCJyaWdodFwiLFwiKGdyZWF0KzEpXCIsMiksUyhcImxlZnRcIixcIihsZXNzLTIpXCIpLFMoXCIoZ3JlYXQrMilcIixcInJpZ2h0XCIpLG4ucHVzaChcImlmKHBpdm90c19hcmVfZXF1YWwpe1wiKSx4KCksbi5wdXNoKFwicmV0dXJuXCIpLG4ucHVzaChcIn1cIiksbi5wdXNoKFwiaWYobGVzczxpbmRleDEmJmdyZWF0PmluZGV4NSl7XCIpLEUoXCJsZXNzXCIsMSxcIisrbGVzc1wiKSxFKFwiZ3JlYXRcIiwyLFwiLS1ncmVhdFwiKSxuLnB1c2goXCJmb3Ioaz1sZXNzO2s8PWdyZWF0Oysrayl7XCIpLHcoXCJjb21wX3Bpdm90MVwiLFwia1wiLDEpLG4ucHVzaChcImlmKGNvbXBfcGl2b3QxPT09MCl7XCIpLG4ucHVzaChcImlmKGshPT1sZXNzKXtcIiksayhcImtcIixcImxlc3NcIiksbi5wdXNoKFwifVwiKSxuLnB1c2goXCIrK2xlc3NcIiksbi5wdXNoKFwifWVsc2V7XCIpLHcoXCJjb21wX3Bpdm90MlwiLFwia1wiLDIpLG4ucHVzaChcImlmKGNvbXBfcGl2b3QyPT09MCl7XCIpLG4ucHVzaChcIndoaWxlKHRydWUpe1wiKSx3KFwiY29tcFwiLFwiZ3JlYXRcIiwyKSxuLnB1c2goXCJpZihjb21wPT09MCl7XCIpLG4ucHVzaChcImlmKC0tZ3JlYXQ8ayl7YnJlYWt9XCIpLG4ucHVzaChcImNvbnRpbnVlXCIpLG4ucHVzaChcIn1lbHNle1wiKSx3KFwiY29tcFwiLFwiZ3JlYXRcIiwxKSxuLnB1c2goXCJpZihjb21wPDApe1wiKSxBKFwia1wiLFwibGVzc1wiLFwiZ3JlYXRcIiksbi5wdXNoKFwifWVsc2V7XCIpLFQoXCJrXCIsXCJncmVhdFwiKSxuLnB1c2goXCJ9XCIpLG4ucHVzaChcImJyZWFrXCIpLG4ucHVzaChcIn1cIiksbi5wdXNoKFwifVwiKSxuLnB1c2goXCJ9XCIpLG4ucHVzaChcIn1cIiksbi5wdXNoKFwifVwiKSxuLnB1c2goXCJ9XCIpLHgoKSxTKFwibGVzc1wiLFwiZ3JlYXRcIiksbi5wdXNoKFwifXJldHVybiBcIitzKSx0Lmxlbmd0aD4xJiZjP25ldyBGdW5jdGlvbihcImluc2VydGlvblNvcnRcIixcIm1hbGxvY1wiLFwiZnJlZVwiLG4uam9pbihcIlxcblwiKSkocixjWzBdLGNbMV0pOm5ldyBGdW5jdGlvbihcImluc2VydGlvblNvcnRcIixuLmpvaW4oXCJcXG5cIikpKHIpfSh0LGUsbSk7cmV0dXJuIHYobSx5KX19LHtcInR5cGVkYXJyYXktcG9vbFwiOjUzMH1dLDQ0MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2xpYi9jb21waWxlX3NvcnQuanNcIiksaT17fTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5vcmRlcixyPXQuZHR5cGUsYT1bZSxyXS5qb2luKFwiOlwiKSxvPWlbYV07cmV0dXJuIG98fChpW2FdPW89bihlLHIpKSxvKHQpLHR9fSx7XCIuL2xpYi9jb21waWxlX3NvcnQuanNcIjo0NDB9XSw0NDI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwibmRhcnJheS1saW5lYXItaW50ZXJwb2xhdGVcIiksaT10KFwiY3dpc2UvbGliL3dyYXBwZXJcIikoe2FyZ3M6W1wiaW5kZXhcIixcImFycmF5XCIsXCJzY2FsYXJcIixcInNjYWxhclwiLFwic2NhbGFyXCJdLHByZTp7Ym9keTpcInt0aGlzX3dhcnBlZD1uZXcgQXJyYXkoX2lubGluZV8zX2FyZzRfKX1cIixhcmdzOlt7bmFtZTpcIl9pbmxpbmVfM19hcmcwX1wiLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6XCJfaW5saW5lXzNfYXJnMV9cIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOlwiX2lubGluZV8zX2FyZzJfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZTpcIl9pbmxpbmVfM19hcmczX1wiLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6XCJfaW5saW5lXzNfYXJnNF9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbXCJ0aGlzX3dhcnBlZFwiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6XCJ7X2lubGluZV80X2FyZzJfKHRoaXNfd2FycGVkLF9pbmxpbmVfNF9hcmcwXyksX2lubGluZV80X2FyZzFfPV9pbmxpbmVfNF9hcmczXy5hcHBseSh2b2lkIDAsdGhpc193YXJwZWQpfVwiLGFyZ3M6W3tuYW1lOlwiX2lubGluZV80X2FyZzBfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfNF9hcmcxX1wiLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzRfYXJnMl9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV80X2FyZzNfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfNF9hcmc0X1wiLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH1dLHRoaXNWYXJzOltcInRoaXNfd2FycGVkXCJdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keTpcInt9XCIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGRlYnVnOiExLGZ1bmNOYW1lOlwid2FycE5EXCIsYmxvY2tTaXplOjY0fSksYT10KFwiY3dpc2UvbGliL3dyYXBwZXJcIikoe2FyZ3M6W1wiaW5kZXhcIixcImFycmF5XCIsXCJzY2FsYXJcIixcInNjYWxhclwiLFwic2NhbGFyXCJdLHByZTp7Ym9keTpcInt0aGlzX3dhcnBlZD1bMF19XCIsYXJnczpbXSx0aGlzVmFyczpbXCJ0aGlzX3dhcnBlZFwiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6XCJ7X2lubGluZV83X2FyZzJfKHRoaXNfd2FycGVkLF9pbmxpbmVfN19hcmcwXyksX2lubGluZV83X2FyZzFfPV9pbmxpbmVfN19hcmczXyhfaW5saW5lXzdfYXJnNF8sdGhpc193YXJwZWRbMF0pfVwiLGFyZ3M6W3tuYW1lOlwiX2lubGluZV83X2FyZzBfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfN19hcmcxX1wiLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzdfYXJnMl9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV83X2FyZzNfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfN19hcmc0X1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOltcInRoaXNfd2FycGVkXCJdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keTpcInt9XCIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGRlYnVnOiExLGZ1bmNOYW1lOlwid2FycDFEXCIsYmxvY2tTaXplOjY0fSksbz10KFwiY3dpc2UvbGliL3dyYXBwZXJcIikoe2FyZ3M6W1wiaW5kZXhcIixcImFycmF5XCIsXCJzY2FsYXJcIixcInNjYWxhclwiLFwic2NhbGFyXCJdLHByZTp7Ym9keTpcInt0aGlzX3dhcnBlZD1bMCwwXX1cIixhcmdzOltdLHRoaXNWYXJzOltcInRoaXNfd2FycGVkXCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keTpcIntfaW5saW5lXzEwX2FyZzJfKHRoaXNfd2FycGVkLF9pbmxpbmVfMTBfYXJnMF8pLF9pbmxpbmVfMTBfYXJnMV89X2lubGluZV8xMF9hcmczXyhfaW5saW5lXzEwX2FyZzRfLHRoaXNfd2FycGVkWzBdLHRoaXNfd2FycGVkWzFdKX1cIixhcmdzOlt7bmFtZTpcIl9pbmxpbmVfMTBfYXJnMF9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xMF9hcmcxX1wiLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzEwX2FyZzJfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfMTBfYXJnM19cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xMF9hcmc0X1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOltcInRoaXNfd2FycGVkXCJdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keTpcInt9XCIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGRlYnVnOiExLGZ1bmNOYW1lOlwid2FycDJEXCIsYmxvY2tTaXplOjY0fSkscz10KFwiY3dpc2UvbGliL3dyYXBwZXJcIikoe2FyZ3M6W1wiaW5kZXhcIixcImFycmF5XCIsXCJzY2FsYXJcIixcInNjYWxhclwiLFwic2NhbGFyXCJdLHByZTp7Ym9keTpcInt0aGlzX3dhcnBlZD1bMCwwLDBdfVwiLGFyZ3M6W10sdGhpc1ZhcnM6W1widGhpc193YXJwZWRcIl0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5Olwie19pbmxpbmVfMTNfYXJnMl8odGhpc193YXJwZWQsX2lubGluZV8xM19hcmcwXyksX2lubGluZV8xM19hcmcxXz1faW5saW5lXzEzX2FyZzNfKF9pbmxpbmVfMTNfYXJnNF8sdGhpc193YXJwZWRbMF0sdGhpc193YXJwZWRbMV0sdGhpc193YXJwZWRbMl0pfVwiLGFyZ3M6W3tuYW1lOlwiX2lubGluZV8xM19hcmcwX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzEzX2FyZzFfXCIsbHZhbHVlOiEwLHJ2YWx1ZTohMSxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfMTNfYXJnMl9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xM19hcmczX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzEzX2FyZzRfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sdGhpc1ZhcnM6W1widGhpc193YXJwZWRcIl0sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5Olwie31cIixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZGVidWc6ITEsZnVuY05hbWU6XCJ3YXJwM0RcIixibG9ja1NpemU6NjR9KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3N3aXRjaChlLnNoYXBlLmxlbmd0aCl7Y2FzZSAxOmEodCxyLG4uZDEsZSk7YnJlYWs7Y2FzZSAyOm8odCxyLG4uZDIsZSk7YnJlYWs7Y2FzZSAzOnModCxyLG4uZDMsZSk7YnJlYWs7ZGVmYXVsdDppKHQscixuLmJpbmQodm9pZCAwLGUpLGUuc2hhcGUubGVuZ3RoKX1yZXR1cm4gdH19LHtcImN3aXNlL2xpYi93cmFwcGVyXCI6MTQwLFwibmRhcnJheS1saW5lYXItaW50ZXJwb2xhdGVcIjo0MzZ9XSw0NDM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiaW90YS1hcnJheVwiKSxpPXQoXCJpcy1idWZmZXJcIiksYT1cInVuZGVmaW5lZFwiIT10eXBlb2YgRmxvYXQ2NEFycmF5O2Z1bmN0aW9uIG8odCxlKXtyZXR1cm4gdFswXS1lWzBdfWZ1bmN0aW9uIHMoKXt2YXIgdCxlPXRoaXMuc3RyaWRlLHI9bmV3IEFycmF5KGUubGVuZ3RoKTtmb3IodD0wO3Q8ci5sZW5ndGg7Kyt0KXJbdF09W01hdGguYWJzKGVbdF0pLHRdO3Iuc29ydChvKTt2YXIgbj1uZXcgQXJyYXkoci5sZW5ndGgpO2Zvcih0PTA7dDxuLmxlbmd0aDsrK3Qpblt0XT1yW3RdWzFdO3JldHVybiBufWZ1bmN0aW9uIGwodCxlKXt2YXIgcj1bXCJWaWV3XCIsZSxcImRcIix0XS5qb2luKFwiXCIpO2U8MCYmKHI9XCJWaWV3X05pbFwiK3QpO3ZhciBpPVwiZ2VuZXJpY1wiPT09dDtpZigtMT09PWUpe3ZhciBhPVwiZnVuY3Rpb24gXCIrcitcIihhKXt0aGlzLmRhdGE9YTt9O3ZhciBwcm90bz1cIityK1wiLnByb3RvdHlwZTtwcm90by5kdHlwZT0nXCIrdCtcIic7cHJvdG8uaW5kZXg9ZnVuY3Rpb24oKXtyZXR1cm4gLTF9O3Byb3RvLnNpemU9MDtwcm90by5kaW1lbnNpb249LTE7cHJvdG8uc2hhcGU9cHJvdG8uc3RyaWRlPXByb3RvLm9yZGVyPVtdO3Byb3RvLmxvPXByb3RvLmhpPXByb3RvLnRyYW5zcG9zZT1wcm90by5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBcIityK1wiKHRoaXMuZGF0YSk7fTtwcm90by5nZXQ9cHJvdG8uc2V0PWZ1bmN0aW9uKCl7fTtwcm90by5waWNrPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9O3JldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RfXCIrcitcIihhKXtyZXR1cm4gbmV3IFwiK3IrXCIoYSk7fVwiO3JldHVybiBuZXcgRnVuY3Rpb24oYSkoKX1pZigwPT09ZSl7YT1cImZ1bmN0aW9uIFwiK3IrXCIoYSxkKSB7dGhpcy5kYXRhID0gYTt0aGlzLm9mZnNldCA9IGR9O3ZhciBwcm90bz1cIityK1wiLnByb3RvdHlwZTtwcm90by5kdHlwZT0nXCIrdCtcIic7cHJvdG8uaW5kZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZmZzZXR9O3Byb3RvLmRpbWVuc2lvbj0wO3Byb3RvLnNpemU9MTtwcm90by5zaGFwZT1wcm90by5zdHJpZGU9cHJvdG8ub3JkZXI9W107cHJvdG8ubG89cHJvdG8uaGk9cHJvdG8udHJhbnNwb3NlPXByb3RvLnN0ZXA9ZnVuY3Rpb24gXCIrcitcIl9jb3B5KCkge3JldHVybiBuZXcgXCIrcitcIih0aGlzLmRhdGEsdGhpcy5vZmZzZXQpfTtwcm90by5waWNrPWZ1bmN0aW9uIFwiK3IrXCJfcGljaygpe3JldHVybiBUcml2aWFsQXJyYXkodGhpcy5kYXRhKTt9O3Byb3RvLnZhbHVlT2Y9cHJvdG8uZ2V0PWZ1bmN0aW9uIFwiK3IrXCJfZ2V0KCl7cmV0dXJuIFwiKyhpP1widGhpcy5kYXRhLmdldCh0aGlzLm9mZnNldClcIjpcInRoaXMuZGF0YVt0aGlzLm9mZnNldF1cIikrXCJ9O3Byb3RvLnNldD1mdW5jdGlvbiBcIityK1wiX3NldCh2KXtyZXR1cm4gXCIrKGk/XCJ0aGlzLmRhdGEuc2V0KHRoaXMub2Zmc2V0LHYpXCI6XCJ0aGlzLmRhdGFbdGhpcy5vZmZzZXRdPXZcIikrXCJ9O3JldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RfXCIrcitcIihhLGIsYyxkKXtyZXR1cm4gbmV3IFwiK3IrXCIoYSxkKX1cIjtyZXR1cm4gbmV3IEZ1bmN0aW9uKFwiVHJpdmlhbEFycmF5XCIsYSkoY1t0XVswXSl9YT1bXCIndXNlIHN0cmljdCdcIl07dmFyIG89bihlKSxsPW8ubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiaVwiK3R9KSx1PVwidGhpcy5vZmZzZXQrXCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJ0aGlzLnN0cmlkZVtcIit0K1wiXSppXCIrdH0pLmpvaW4oXCIrXCIpLGg9by5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJiXCIrdH0pLmpvaW4oXCIsXCIpLGY9by5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJjXCIrdH0pLmpvaW4oXCIsXCIpO2EucHVzaChcImZ1bmN0aW9uIFwiK3IrXCIoYSxcIitoK1wiLFwiK2YrXCIsZCl7dGhpcy5kYXRhPWFcIixcInRoaXMuc2hhcGU9W1wiK2grXCJdXCIsXCJ0aGlzLnN0cmlkZT1bXCIrZitcIl1cIixcInRoaXMub2Zmc2V0PWR8MH1cIixcInZhciBwcm90bz1cIityK1wiLnByb3RvdHlwZVwiLFwicHJvdG8uZHR5cGU9J1wiK3QrXCInXCIsXCJwcm90by5kaW1lbnNpb249XCIrZSksYS5wdXNoKFwiT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvLCdzaXplJyx7Z2V0OmZ1bmN0aW9uIFwiK3IrXCJfc2l6ZSgpe3JldHVybiBcIitvLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cInRoaXMuc2hhcGVbXCIrdCtcIl1cIn0pLmpvaW4oXCIqXCIpLFwifX0pXCIpLDE9PT1lP2EucHVzaChcInByb3RvLm9yZGVyPVswXVwiKTooYS5wdXNoKFwiT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvLCdvcmRlcicse2dldDpcIiksZTw0PyhhLnB1c2goXCJmdW5jdGlvbiBcIityK1wiX29yZGVyKCl7XCIpLDI9PT1lP2EucHVzaChcInJldHVybiAoTWF0aC5hYnModGhpcy5zdHJpZGVbMF0pPk1hdGguYWJzKHRoaXMuc3RyaWRlWzFdKSk/WzEsMF06WzAsMV19fSlcIik6Mz09PWUmJmEucHVzaChcInZhciBzMD1NYXRoLmFicyh0aGlzLnN0cmlkZVswXSksczE9TWF0aC5hYnModGhpcy5zdHJpZGVbMV0pLHMyPU1hdGguYWJzKHRoaXMuc3RyaWRlWzJdKTtpZihzMD5zMSl7aWYoczE+czIpe3JldHVybiBbMiwxLDBdO31lbHNlIGlmKHMwPnMyKXtyZXR1cm4gWzEsMiwwXTt9ZWxzZXtyZXR1cm4gWzEsMCwyXTt9fWVsc2UgaWYoczA+czIpe3JldHVybiBbMiwwLDFdO31lbHNlIGlmKHMyPnMxKXtyZXR1cm4gWzAsMSwyXTt9ZWxzZXtyZXR1cm4gWzAsMiwxXTt9fX0pXCIpKTphLnB1c2goXCJPUkRFUn0pXCIpKSxhLnB1c2goXCJwcm90by5zZXQ9ZnVuY3Rpb24gXCIrcitcIl9zZXQoXCIrbC5qb2luKFwiLFwiKStcIix2KXtcIiksaT9hLnB1c2goXCJyZXR1cm4gdGhpcy5kYXRhLnNldChcIit1K1wiLHYpfVwiKTphLnB1c2goXCJyZXR1cm4gdGhpcy5kYXRhW1wiK3UrXCJdPXZ9XCIpLGEucHVzaChcInByb3RvLmdldD1mdW5jdGlvbiBcIityK1wiX2dldChcIitsLmpvaW4oXCIsXCIpK1wiKXtcIiksaT9hLnB1c2goXCJyZXR1cm4gdGhpcy5kYXRhLmdldChcIit1K1wiKX1cIik6YS5wdXNoKFwicmV0dXJuIHRoaXMuZGF0YVtcIit1K1wiXX1cIiksYS5wdXNoKFwicHJvdG8uaW5kZXg9ZnVuY3Rpb24gXCIrcitcIl9pbmRleChcIixsLmpvaW4oKSxcIil7cmV0dXJuIFwiK3UrXCJ9XCIpLGEucHVzaChcInByb3RvLmhpPWZ1bmN0aW9uIFwiK3IrXCJfaGkoXCIrbC5qb2luKFwiLFwiKStcIil7cmV0dXJuIG5ldyBcIityK1wiKHRoaXMuZGF0YSxcIitvLm1hcChmdW5jdGlvbih0KXtyZXR1cm5bXCIodHlwZW9mIGlcIix0LFwiIT09J251bWJlcid8fGlcIix0LFwiPDApP3RoaXMuc2hhcGVbXCIsdCxcIl06aVwiLHQsXCJ8MFwiXS5qb2luKFwiXCIpfSkuam9pbihcIixcIikrXCIsXCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJ0aGlzLnN0cmlkZVtcIit0K1wiXVwifSkuam9pbihcIixcIikrXCIsdGhpcy5vZmZzZXQpfVwiKTt2YXIgcD1vLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cImFcIit0K1wiPXRoaXMuc2hhcGVbXCIrdCtcIl1cIn0pLGQ9by5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJjXCIrdCtcIj10aGlzLnN0cmlkZVtcIit0K1wiXVwifSk7YS5wdXNoKFwicHJvdG8ubG89ZnVuY3Rpb24gXCIrcitcIl9sbyhcIitsLmpvaW4oXCIsXCIpK1wiKXt2YXIgYj10aGlzLm9mZnNldCxkPTAsXCIrcC5qb2luKFwiLFwiKStcIixcIitkLmpvaW4oXCIsXCIpKTtmb3IodmFyIGc9MDtnPGU7KytnKWEucHVzaChcImlmKHR5cGVvZiBpXCIrZytcIj09PSdudW1iZXInJiZpXCIrZytcIj49MCl7ZD1pXCIrZytcInwwO2IrPWNcIitnK1wiKmQ7YVwiK2crXCItPWR9XCIpO2EucHVzaChcInJldHVybiBuZXcgXCIrcitcIih0aGlzLmRhdGEsXCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJhXCIrdH0pLmpvaW4oXCIsXCIpK1wiLFwiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiY1wiK3R9KS5qb2luKFwiLFwiKStcIixiKX1cIiksYS5wdXNoKFwicHJvdG8uc3RlcD1mdW5jdGlvbiBcIityK1wiX3N0ZXAoXCIrbC5qb2luKFwiLFwiKStcIil7dmFyIFwiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiYVwiK3QrXCI9dGhpcy5zaGFwZVtcIit0K1wiXVwifSkuam9pbihcIixcIikrXCIsXCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJiXCIrdCtcIj10aGlzLnN0cmlkZVtcIit0K1wiXVwifSkuam9pbihcIixcIikrXCIsYz10aGlzLm9mZnNldCxkPTAsY2VpbD1NYXRoLmNlaWxcIik7Zm9yKGc9MDtnPGU7KytnKWEucHVzaChcImlmKHR5cGVvZiBpXCIrZytcIj09PSdudW1iZXInKXtkPWlcIitnK1wifDA7aWYoZDwwKXtjKz1iXCIrZytcIiooYVwiK2crXCItMSk7YVwiK2crXCI9Y2VpbCgtYVwiK2crXCIvZCl9ZWxzZXthXCIrZytcIj1jZWlsKGFcIitnK1wiL2QpfWJcIitnK1wiKj1kfVwiKTthLnB1c2goXCJyZXR1cm4gbmV3IFwiK3IrXCIodGhpcy5kYXRhLFwiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiYVwiK3R9KS5qb2luKFwiLFwiKStcIixcIitvLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cImJcIit0fSkuam9pbihcIixcIikrXCIsYyl9XCIpO3ZhciB2PW5ldyBBcnJheShlKSxtPW5ldyBBcnJheShlKTtmb3IoZz0wO2c8ZTsrK2cpdltnXT1cImFbaVwiK2crXCJdXCIsbVtnXT1cImJbaVwiK2crXCJdXCI7YS5wdXNoKFwicHJvdG8udHJhbnNwb3NlPWZ1bmN0aW9uIFwiK3IrXCJfdHJhbnNwb3NlKFwiK2wrXCIpe1wiK2wubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrXCI9KFwiK3QrXCI9PT11bmRlZmluZWQ/XCIrZStcIjpcIit0K1wifDApXCJ9KS5qb2luKFwiO1wiKSxcInZhciBhPXRoaXMuc2hhcGUsYj10aGlzLnN0cmlkZTtyZXR1cm4gbmV3IFwiK3IrXCIodGhpcy5kYXRhLFwiK3Yuam9pbihcIixcIikrXCIsXCIrbS5qb2luKFwiLFwiKStcIix0aGlzLm9mZnNldCl9XCIpLGEucHVzaChcInByb3RvLnBpY2s9ZnVuY3Rpb24gXCIrcitcIl9waWNrKFwiK2wrXCIpe3ZhciBhPVtdLGI9W10sYz10aGlzLm9mZnNldFwiKTtmb3IoZz0wO2c8ZTsrK2cpYS5wdXNoKFwiaWYodHlwZW9mIGlcIitnK1wiPT09J251bWJlcicmJmlcIitnK1wiPj0wKXtjPShjK3RoaXMuc3RyaWRlW1wiK2crXCJdKmlcIitnK1wiKXwwfWVsc2V7YS5wdXNoKHRoaXMuc2hhcGVbXCIrZytcIl0pO2IucHVzaCh0aGlzLnN0cmlkZVtcIitnK1wiXSl9XCIpO3JldHVybiBhLnB1c2goXCJ2YXIgY3Rvcj1DVE9SX0xJU1RbYS5sZW5ndGgrMV07cmV0dXJuIGN0b3IodGhpcy5kYXRhLGEsYixjKX1cIiksYS5wdXNoKFwicmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdF9cIityK1wiKGRhdGEsc2hhcGUsc3RyaWRlLG9mZnNldCl7cmV0dXJuIG5ldyBcIityK1wiKGRhdGEsXCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJzaGFwZVtcIit0K1wiXVwifSkuam9pbihcIixcIikrXCIsXCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJzdHJpZGVbXCIrdCtcIl1cIn0pLmpvaW4oXCIsXCIpK1wiLG9mZnNldCl9XCIpLG5ldyBGdW5jdGlvbihcIkNUT1JfTElTVFwiLFwiT1JERVJcIixhLmpvaW4oXCJcXG5cIikpKGNbdF0scyl9dmFyIGM9e2Zsb2F0MzI6W10sZmxvYXQ2NDpbXSxpbnQ4OltdLGludDE2OltdLGludDMyOltdLHVpbnQ4OltdLHVpbnQxNjpbXSx1aW50MzI6W10sYXJyYXk6W10sdWludDhfY2xhbXBlZDpbXSxidWZmZXI6W10sZ2VuZXJpYzpbXX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHZvaWQgMD09PXQpcmV0dXJuKDAsYy5hcnJheVswXSkoW10pO1wibnVtYmVyXCI9PXR5cGVvZiB0JiYodD1bdF0pLHZvaWQgMD09PWUmJihlPVt0Lmxlbmd0aF0pO3ZhciBvPWUubGVuZ3RoO2lmKHZvaWQgMD09PXIpe3I9bmV3IEFycmF5KG8pO2Zvcih2YXIgcz1vLTEsdT0xO3M+PTA7LS1zKXJbc109dSx1Kj1lW3NdfWlmKHZvaWQgMD09PW4pZm9yKG49MCxzPTA7czxvOysrcylyW3NdPDAmJihuLT0oZVtzXS0xKSpyW3NdKTtmb3IodmFyIGg9ZnVuY3Rpb24odCl7aWYoaSh0KSlyZXR1cm5cImJ1ZmZlclwiO2lmKGEpc3dpdGNoKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSl7Y2FzZVwiW29iamVjdCBGbG9hdDY0QXJyYXldXCI6cmV0dXJuXCJmbG9hdDY0XCI7Y2FzZVwiW29iamVjdCBGbG9hdDMyQXJyYXldXCI6cmV0dXJuXCJmbG9hdDMyXCI7Y2FzZVwiW29iamVjdCBJbnQ4QXJyYXldXCI6cmV0dXJuXCJpbnQ4XCI7Y2FzZVwiW29iamVjdCBJbnQxNkFycmF5XVwiOnJldHVyblwiaW50MTZcIjtjYXNlXCJbb2JqZWN0IEludDMyQXJyYXldXCI6cmV0dXJuXCJpbnQzMlwiO2Nhc2VcIltvYmplY3QgVWludDhBcnJheV1cIjpyZXR1cm5cInVpbnQ4XCI7Y2FzZVwiW29iamVjdCBVaW50MTZBcnJheV1cIjpyZXR1cm5cInVpbnQxNlwiO2Nhc2VcIltvYmplY3QgVWludDMyQXJyYXldXCI6cmV0dXJuXCJ1aW50MzJcIjtjYXNlXCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XVwiOnJldHVyblwidWludDhfY2xhbXBlZFwifXJldHVybiBBcnJheS5pc0FycmF5KHQpP1wiYXJyYXlcIjpcImdlbmVyaWNcIn0odCksZj1jW2hdO2YubGVuZ3RoPD1vKzE7KWYucHVzaChsKGgsZi5sZW5ndGgtMSkpO3JldHVybigwLGZbbysxXSkodCxlLHIsbil9fSx7XCJpb3RhLWFycmF5XCI6NDA5LFwiaXMtYnVmZmVyXCI6NDExfV0sNDQ0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImRvdWJsZS1iaXRzXCIpLGk9TWF0aC5wb3coMiwtMTA3NCksYT0tMT4+PjA7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoaXNOYU4odCl8fGlzTmFOKGUpKXJldHVybiBOYU47aWYodD09PWUpcmV0dXJuIHQ7aWYoMD09PXQpcmV0dXJuIGU8MD8taTppO3ZhciByPW4uaGkodCksbz1uLmxvKHQpO2U+dD09dD4wP289PT1hPyhyKz0xLG89MCk6bys9MTowPT09bz8obz1hLHItPTEpOm8tPTE7cmV0dXJuIG4ucGFjayhvLHIpfX0se1wiZG91YmxlLWJpdHNcIjoxNTl9XSw0NDU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLlBJLGk9YygxMjApO2Z1bmN0aW9uIGEodCxlLHIsbil7cmV0dXJuW1wiQ1wiLHQsZSxyLG4scixuXX1mdW5jdGlvbiBvKHQsZSxyLG4saSxhKXtyZXR1cm5bXCJDXCIsdC8zKzIvMypyLGUvMysyLzMqbixpLzMrMi8zKnIsYS8zKzIvMypuLGksYV19ZnVuY3Rpb24gcyh0LGUscixhLG8sYyx1LGgsZixwKXtpZihwKWs9cFswXSxBPXBbMV0sXz1wWzJdLHc9cFszXTtlbHNle3ZhciBkPWwodCxlLC1vKTt0PWQueCxlPWQueTt2YXIgZz0odC0oaD0oZD1sKGgsZiwtbykpLngpKS8yLHY9KGUtKGY9ZC55KSkvMixtPWcqZy8ocipyKSt2KnYvKGEqYSk7bT4xJiYocio9bT1NYXRoLnNxcnQobSksYSo9bSk7dmFyIHk9cipyLHg9YSphLGI9KGM9PXU/LTE6MSkqTWF0aC5zcXJ0KE1hdGguYWJzKCh5KngteSp2KnYteCpnKmcpLyh5KnYqdit4KmcqZykpKTtiPT0xLzAmJihiPTEpO3ZhciBfPWIqcip2L2ErKHQraCkvMix3PWIqLWEqZy9yKyhlK2YpLzIsaz1NYXRoLmFzaW4oKChlLXcpL2EpLnRvRml4ZWQoOSkpLEE9TWF0aC5hc2luKCgoZi13KS9hKS50b0ZpeGVkKDkpKTsoaz10PF8/bi1rOmspPDAmJihrPTIqbitrKSwoQT1oPF8/bi1BOkEpPDAmJihBPTIqbitBKSx1JiZrPkEmJihrLT0yKm4pLCF1JiZBPmsmJihBLT0yKm4pfWlmKE1hdGguYWJzKEEtayk+aSl7dmFyIFQ9QSxNPWgsUz1mO0E9aytpKih1JiZBPms/MTotMSk7dmFyIEU9cyhoPV8rcipNYXRoLmNvcyhBKSxmPXcrYSpNYXRoLnNpbihBKSxyLGEsbywwLHUsTSxTLFtBLFQsXyx3XSl9dmFyIEM9TWF0aC50YW4oKEEtaykvNCksTD00LzMqcipDLHo9NC8zKmEqQyxPPVsyKnQtKHQrTCpNYXRoLnNpbihrKSksMiplLShlLXoqTWF0aC5jb3MoaykpLGgrTCpNYXRoLnNpbihBKSxmLXoqTWF0aC5jb3MoQSksaCxmXTtpZihwKXJldHVybiBPO0UmJihPPU8uY29uY2F0KEUpKTtmb3IodmFyIEk9MDtJPE8ubGVuZ3RoOyl7dmFyIEQ9bChPW0ldLE9bSSsxXSxvKTtPW0krK109RC54LE9bSSsrXT1ELnl9cmV0dXJuIE99ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJue3g6dCpNYXRoLmNvcyhyKS1lKk1hdGguc2luKHIpLHk6dCpNYXRoLnNpbihyKStlKk1hdGguY29zKHIpfX1mdW5jdGlvbiBjKHQpe3JldHVybiB0KihuLzE4MCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPVtdLG49MCxpPTAsbD0wLHU9MCxoPW51bGwsZj1udWxsLHA9MCxkPTAsZz0wLHY9dC5sZW5ndGg7Zzx2O2crKyl7dmFyIG09dFtnXSx5PW1bMF07c3dpdGNoKHkpe2Nhc2VcIk1cIjpsPW1bMV0sdT1tWzJdO2JyZWFrO2Nhc2VcIkFcIjoobT1zKHAsZCxtWzFdLG1bMl0sYyhtWzNdKSxtWzRdLG1bNV0sbVs2XSxtWzddKSkudW5zaGlmdChcIkNcIiksbS5sZW5ndGg+NyYmKHIucHVzaChtLnNwbGljZSgwLDcpKSxtLnVuc2hpZnQoXCJDXCIpKTticmVhaztjYXNlXCJTXCI6dmFyIHg9cCxiPWQ7XCJDXCIhPWUmJlwiU1wiIT1lfHwoeCs9eC1uLGIrPWItaSksbT1bXCJDXCIseCxiLG1bMV0sbVsyXSxtWzNdLG1bNF1dO2JyZWFrO2Nhc2VcIlRcIjpcIlFcIj09ZXx8XCJUXCI9PWU/KGg9MipwLWgsZj0yKmQtZik6KGg9cCxmPWQpLG09byhwLGQsaCxmLG1bMV0sbVsyXSk7YnJlYWs7Y2FzZVwiUVwiOmg9bVsxXSxmPW1bMl0sbT1vKHAsZCxtWzFdLG1bMl0sbVszXSxtWzRdKTticmVhaztjYXNlXCJMXCI6bT1hKHAsZCxtWzFdLG1bMl0pO2JyZWFrO2Nhc2VcIkhcIjptPWEocCxkLG1bMV0sZCk7YnJlYWs7Y2FzZVwiVlwiOm09YShwLGQscCxtWzFdKTticmVhaztjYXNlXCJaXCI6bT1hKHAsZCxsLHUpfWU9eSxwPW1bbS5sZW5ndGgtMl0sZD1tW20ubGVuZ3RoLTFdLG0ubGVuZ3RoPjQ/KG49bVttLmxlbmd0aC00XSxpPW1bbS5sZW5ndGgtM10pOihuPXAsaT1kKSxyLnB1c2gobSl9cmV0dXJuIHJ9fSx7fV0sNDQ2OltmdW5jdGlvbih0LGUscil7ci52ZXJ0ZXhOb3JtYWxzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ZS5sZW5ndGgsaT1uZXcgQXJyYXkobiksYT12b2lkIDA9PT1yPzFlLTY6cixvPTA7bzxuOysrbylpW29dPVswLDAsMF07Zm9yKG89MDtvPHQubGVuZ3RoOysrbylmb3IodmFyIHM9dFtvXSxsPTAsYz1zW3MubGVuZ3RoLTFdLHU9c1swXSxoPTA7aDxzLmxlbmd0aDsrK2gpe2w9YyxjPXUsdT1zWyhoKzEpJXMubGVuZ3RoXTtmb3IodmFyIGY9ZVtsXSxwPWVbY10sZD1lW3VdLGc9bmV3IEFycmF5KDMpLHY9MCxtPW5ldyBBcnJheSgzKSx5PTAseD0wO3g8MzsrK3gpZ1t4XT1mW3hdLXBbeF0sdis9Z1t4XSpnW3hdLG1beF09ZFt4XS1wW3hdLHkrPW1beF0qbVt4XTtpZih2Knk+YSl7dmFyIGI9aVtjXSxfPTEvTWF0aC5zcXJ0KHYqeSk7Zm9yKHg9MDt4PDM7Kyt4KXt2YXIgdz0oeCsxKSUzLGs9KHgrMiklMztiW3hdKz1fKihtW3ddKmdba10tbVtrXSpnW3ddKX19fWZvcihvPTA7bzxuOysrbyl7Yj1pW29dO3ZhciBBPTA7Zm9yKHg9MDt4PDM7Kyt4KUErPWJbeF0qYlt4XTtpZihBPmEpZm9yKF89MS9NYXRoLnNxcnQoQSkseD0wO3g8MzsrK3gpYlt4XSo9XztlbHNlIGZvcih4PTA7eDwzOysreCliW3hdPTB9cmV0dXJuIGl9LHIuZmFjZU5vcm1hbHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj10Lmxlbmd0aCxpPW5ldyBBcnJheShuKSxhPXZvaWQgMD09PXI/MWUtNjpyLG89MDtvPG47KytvKXtmb3IodmFyIHM9dFtvXSxsPW5ldyBBcnJheSgzKSxjPTA7YzwzOysrYylsW2NdPWVbc1tjXV07dmFyIHU9bmV3IEFycmF5KDMpLGg9bmV3IEFycmF5KDMpO2ZvcihjPTA7YzwzOysrYyl1W2NdPWxbMV1bY10tbFswXVtjXSxoW2NdPWxbMl1bY10tbFswXVtjXTt2YXIgZj1uZXcgQXJyYXkoMykscD0wO2ZvcihjPTA7YzwzOysrYyl7dmFyIGQ9KGMrMSklMyxnPShjKzIpJTM7ZltjXT11W2RdKmhbZ10tdVtnXSpoW2RdLHArPWZbY10qZltjXX1wPXA+YT8xL01hdGguc3FydChwKTowO2ZvcihjPTA7YzwzOysrYylmW2NdKj1wO2lbb109Zn1yZXR1cm4gaX19LHt9XSw0NDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxhPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO3ZhciB0PW5ldyBTdHJpbmcoXCJhYmNcIik7aWYodFs1XT1cImRlXCIsXCI1XCI9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KVswXSlyZXR1cm4hMTtmb3IodmFyIGU9e30scj0wO3I8MTA7cisrKWVbXCJfXCIrU3RyaW5nLmZyb21DaGFyQ29kZShyKV09cjtpZihcIjAxMjM0NTY3ODlcIiE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pLmpvaW4oXCJcIikpcmV0dXJuITE7dmFyIG49e307cmV0dXJuXCJhYmNkZWZnaGlqa2xtbm9wcXJzdFwiLnNwbGl0KFwiXCIpLmZvckVhY2goZnVuY3Rpb24odCl7blt0XT10fSksXCJhYmNkZWZnaGlqa2xtbm9wcXJzdFwiPT09T2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxuKSkuam9pbihcIlwiKX1jYXRjaCh0KXtyZXR1cm4hMX19KCk/T2JqZWN0LmFzc2lnbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcixvLHM9ZnVuY3Rpb24odCl7aWYobnVsbD09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWRcIik7cmV0dXJuIE9iamVjdCh0KX0odCksbD0xO2w8YXJndW1lbnRzLmxlbmd0aDtsKyspe2Zvcih2YXIgYyBpbiByPU9iamVjdChhcmd1bWVudHNbbF0pKWkuY2FsbChyLGMpJiYoc1tjXT1yW2NdKTtpZihuKXtvPW4ocik7Zm9yKHZhciB1PTA7dTxvLmxlbmd0aDt1KyspYS5jYWxsKHIsb1t1XSkmJihzW29bdV1dPXJbb1t1XV0pfX1yZXR1cm4gc319LHt9XSw0NDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyl7dmFyIHU9ZSthK2M7aWYoaD4wKXt2YXIgaD1NYXRoLnNxcnQodSsxKTt0WzBdPS41KihvLWwpL2gsdFsxXT0uNSoocy1uKS9oLHRbMl09LjUqKHItYSkvaCx0WzNdPS41Kmh9ZWxzZXt2YXIgZj1NYXRoLm1heChlLGEsYyksaD1NYXRoLnNxcnQoMipmLXUrMSk7ZT49Zj8odFswXT0uNSpoLHRbMV09LjUqKGkrcikvaCx0WzJdPS41KihzK24pL2gsdFszXT0uNSooby1sKS9oKTphPj1mPyh0WzBdPS41KihyK2kpL2gsdFsxXT0uNSpoLHRbMl09LjUqKGwrbykvaCx0WzNdPS41KihzLW4pL2gpOih0WzBdPS41KihuK3MpL2gsdFsxXT0uNSoobytsKS9oLHRbMl09LjUqaCx0WzNdPS41KihyLWkpL2gpfXJldHVybiB0fX0se31dLDQ0OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuY2VudGVyfHxbMCwwLDBdLHI9dC5yb3RhdGlvbnx8WzAsMCwwLDFdLG49dC5yYWRpdXN8fDE7ZT1bXS5zbGljZS5jYWxsKGUsMCwzKSx1KHI9W10uc2xpY2UuY2FsbChyLDAsNCkscik7dmFyIGk9bmV3IGgocixlLE1hdGgubG9nKG4pKTtpLnNldERpc3RhbmNlTGltaXRzKHQuem9vbU1pbix0Lnpvb21NYXgpLChcImV5ZVwiaW4gdHx8XCJ1cFwiaW4gdCkmJmkubG9va0F0KDAsdC5leWUsdC5jZW50ZXIsdC51cCk7cmV0dXJuIGl9O3ZhciBuPXQoXCJmaWx0ZXJlZC12ZWN0b3JcIiksaT10KFwiZ2wtbWF0NC9sb29rQXRcIiksYT10KFwiZ2wtbWF0NC9mcm9tUXVhdFwiKSxvPXQoXCJnbC1tYXQ0L2ludmVydFwiKSxzPXQoXCIuL2xpYi9xdWF0RnJvbUZyYW1lXCIpO2Z1bmN0aW9uIGwodCxlLHIpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codCwyKStNYXRoLnBvdyhlLDIpK01hdGgucG93KHIsMikpfWZ1bmN0aW9uIGModCxlLHIsbil7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyh0LDIpK01hdGgucG93KGUsMikrTWF0aC5wb3cociwyKStNYXRoLnBvdyhuLDIpKX1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPWMocixuLGksYSk7bz4xZS02Pyh0WzBdPXIvbyx0WzFdPW4vbyx0WzJdPWkvbyx0WzNdPWEvbyk6KHRbMF09dFsxXT10WzJdPTAsdFszXT0xKX1mdW5jdGlvbiBoKHQsZSxyKXt0aGlzLnJhZGl1cz1uKFtyXSksdGhpcy5jZW50ZXI9bihlKSx0aGlzLnJvdGF0aW9uPW4odCksdGhpcy5jb21wdXRlZFJhZGl1cz10aGlzLnJhZGl1cy5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkQ2VudGVyPXRoaXMuY2VudGVyLmN1cnZlKDApLHRoaXMuY29tcHV0ZWRSb3RhdGlvbj10aGlzLnJvdGF0aW9uLmN1cnZlKDApLHRoaXMuY29tcHV0ZWRVcD1bLjEsMCwwXSx0aGlzLmNvbXB1dGVkRXllPVsuMSwwLDBdLHRoaXMuY29tcHV0ZWRNYXRyaXg9Wy4xLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXSx0aGlzLnJlY2FsY01hdHJpeCgwKX12YXIgZj1oLnByb3RvdHlwZTtmLmxhc3RUPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMucmFkaXVzLmxhc3RUKCksdGhpcy5jZW50ZXIubGFzdFQoKSx0aGlzLnJvdGF0aW9uLmxhc3RUKCkpfSxmLnJlY2FsY01hdHJpeD1mdW5jdGlvbih0KXt0aGlzLnJhZGl1cy5jdXJ2ZSh0KSx0aGlzLmNlbnRlci5jdXJ2ZSh0KSx0aGlzLnJvdGF0aW9uLmN1cnZlKHQpO3ZhciBlPXRoaXMuY29tcHV0ZWRSb3RhdGlvbjt1KGUsZSk7dmFyIHI9dGhpcy5jb21wdXRlZE1hdHJpeDthKHIsZSk7dmFyIG49dGhpcy5jb21wdXRlZENlbnRlcixpPXRoaXMuY29tcHV0ZWRFeWUsbz10aGlzLmNvbXB1dGVkVXAscz1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKTtpWzBdPW5bMF0rcypyWzJdLGlbMV09blsxXStzKnJbNl0saVsyXT1uWzJdK3MqclsxMF0sb1swXT1yWzFdLG9bMV09cls1XSxvWzJdPXJbOV07Zm9yKHZhciBsPTA7bDwzOysrbCl7Zm9yKHZhciBjPTAsaD0wO2g8MzsrK2gpYys9cltsKzQqaF0qaVtoXTtyWzEyK2xdPS1jfX0sZi5nZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXt0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgcj10aGlzLmNvbXB1dGVkTWF0cml4O2lmKGUpe2Zvcih2YXIgbj0wO248MTY7KytuKWVbbl09cltuXTtyZXR1cm4gZX1yZXR1cm4gcn0sZi5pZGxlPWZ1bmN0aW9uKHQpe3RoaXMuY2VudGVyLmlkbGUodCksdGhpcy5yYWRpdXMuaWRsZSh0KSx0aGlzLnJvdGF0aW9uLmlkbGUodCl9LGYuZmx1c2g9ZnVuY3Rpb24odCl7dGhpcy5jZW50ZXIuZmx1c2godCksdGhpcy5yYWRpdXMuZmx1c2godCksdGhpcy5yb3RhdGlvbi5mbHVzaCh0KX0sZi5wYW49ZnVuY3Rpb24odCxlLHIsbil7ZT1lfHwwLHI9cnx8MCxuPW58fDAsdGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZE1hdHJpeCxhPWlbMV0sbz1pWzVdLHM9aVs5XSxjPWwoYSxvLHMpO2EvPWMsby89YyxzLz1jO3ZhciB1PWlbMF0saD1pWzRdLGY9aVs4XSxwPXUqYStoKm8rZipzLGQ9bCh1LT1hKnAsaC09bypwLGYtPXMqcCk7dS89ZCxoLz1kLGYvPWQ7dmFyIGc9aVsyXSx2PWlbNl0sbT1pWzEwXSx5PWcqYSt2Km8rbSpzLHg9Zyp1K3YqaCttKmYsYj1sKGctPXkqYSt4KnUsdi09eSpvK3gqaCxtLT15KnMreCpmKTtnLz1iLHYvPWIsbS89Yjt2YXIgXz11KmUrYSpyLHc9aCplK28qcixrPWYqZStzKnI7dGhpcy5jZW50ZXIubW92ZSh0LF8sdyxrKTt2YXIgQT1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKTtBPU1hdGgubWF4KDFlLTQsQStuKSx0aGlzLnJhZGl1cy5zZXQodCxNYXRoLmxvZyhBKSl9LGYucm90YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpLGU9ZXx8MCxyPXJ8fDA7dmFyIGk9dGhpcy5jb21wdXRlZE1hdHJpeCxhPWlbMF0sbz1pWzRdLHM9aVs4XSx1PWlbMV0saD1pWzVdLGY9aVs5XSxwPWlbMl0sZD1pWzZdLGc9aVsxMF0sdj1lKmErcip1LG09ZSpvK3IqaCx5PWUqcytyKmYseD0tKGQqeS1nKm0pLGI9LShnKnYtcCp5KSxfPS0ocCptLWQqdiksdz1NYXRoLnNxcnQoTWF0aC5tYXgoMCwxLU1hdGgucG93KHgsMiktTWF0aC5wb3coYiwyKS1NYXRoLnBvdyhfLDIpKSksaz1jKHgsYixfLHcpO2s+MWUtNj8oeC89ayxiLz1rLF8vPWssdy89ayk6KHg9Yj1fPTAsdz0xKTt2YXIgQT10aGlzLmNvbXB1dGVkUm90YXRpb24sVD1BWzBdLE09QVsxXSxTPUFbMl0sRT1BWzNdLEM9VCp3K0UqeCtNKl8tUypiLEw9TSp3K0UqYitTKngtVCpfLHo9Uyp3K0UqXytUKmItTSp4LE89RSp3LVQqeC1NKmItUypfO2lmKG4pe3g9cCxiPWQsXz1nO3ZhciBJPU1hdGguc2luKG4pL2woeCxiLF8pO3gqPUksYio9SSxfKj1JLE89Tyoodz1NYXRoLmNvcyhlKSktKEM9Qyp3K08qeCtMKl8teipiKSp4LShMPUwqdytPKmIreip4LUMqXykqYi0oej16KncrTypfK0MqYi1MKngpKl99dmFyIEQ9YyhDLEwseixPKTtEPjFlLTY/KEMvPUQsTC89RCx6Lz1ELE8vPUQpOihDPUw9ej0wLE89MSksdGhpcy5yb3RhdGlvbi5zZXQodCxDLEwseixPKX0sZi5sb29rQXQ9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5yZWNhbGNNYXRyaXgodCkscj1yfHx0aGlzLmNvbXB1dGVkQ2VudGVyLGU9ZXx8dGhpcy5jb21wdXRlZEV5ZSxuPW58fHRoaXMuY29tcHV0ZWRVcDt2YXIgYT10aGlzLmNvbXB1dGVkTWF0cml4O2koYSxlLHIsbik7dmFyIG89dGhpcy5jb21wdXRlZFJvdGF0aW9uO3MobyxhWzBdLGFbMV0sYVsyXSxhWzRdLGFbNV0sYVs2XSxhWzhdLGFbOV0sYVsxMF0pLHUobyxvKSx0aGlzLnJvdGF0aW9uLnNldCh0LG9bMF0sb1sxXSxvWzJdLG9bM10pO2Zvcih2YXIgbD0wLGM9MDtjPDM7KytjKWwrPU1hdGgucG93KHJbY10tZVtjXSwyKTt0aGlzLnJhZGl1cy5zZXQodCwuNSpNYXRoLmxvZyhNYXRoLm1heChsLDFlLTYpKSksdGhpcy5jZW50ZXIuc2V0KHQsclswXSxyWzFdLHJbMl0pfSxmLnRyYW5zbGF0ZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLmNlbnRlci5tb3ZlKHQsZXx8MCxyfHwwLG58fDApfSxmLnNldE1hdHJpeD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuY29tcHV0ZWRSb3RhdGlvbjtzKHIsZVswXSxlWzFdLGVbMl0sZVs0XSxlWzVdLGVbNl0sZVs4XSxlWzldLGVbMTBdKSx1KHIsciksdGhpcy5yb3RhdGlvbi5zZXQodCxyWzBdLHJbMV0sclsyXSxyWzNdKTt2YXIgbj10aGlzLmNvbXB1dGVkTWF0cml4O28obixlKTt2YXIgaT1uWzE1XTtpZihNYXRoLmFicyhpKT4xZS02KXt2YXIgYT1uWzEyXS9pLGw9blsxM10vaSxjPW5bMTRdL2k7dGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGg9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7dGhpcy5jZW50ZXIuc2V0KHQsYS1uWzJdKmgsbC1uWzZdKmgsYy1uWzEwXSpoKSx0aGlzLnJhZGl1cy5pZGxlKHQpfWVsc2UgdGhpcy5jZW50ZXIuaWRsZSh0KSx0aGlzLnJhZGl1cy5pZGxlKHQpfSxmLnNldERpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7ZT4wJiZ0aGlzLnJhZGl1cy5zZXQodCxNYXRoLmxvZyhlKSl9LGYuc2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCxlKXt0PXQ+MD9NYXRoLmxvZyh0KTotMS8wLGU9ZT4wP01hdGgubG9nKGUpOjEvMCxlPU1hdGgubWF4KGUsdCksdGhpcy5yYWRpdXMuYm91bmRzWzBdWzBdPXQsdGhpcy5yYWRpdXMuYm91bmRzWzFdWzBdPWV9LGYuZ2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5yYWRpdXMuYm91bmRzO3JldHVybiB0Pyh0WzBdPU1hdGguZXhwKGVbMF1bMF0pLHRbMV09TWF0aC5leHAoZVsxXVswXSksdCk6W01hdGguZXhwKGVbMF1bMF0pLE1hdGguZXhwKGVbMV1bMF0pXX0sZi50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWNhbGNNYXRyaXgodGhpcy5sYXN0VCgpKSx7Y2VudGVyOnRoaXMuY29tcHV0ZWRDZW50ZXIuc2xpY2UoKSxyb3RhdGlvbjp0aGlzLmNvbXB1dGVkUm90YXRpb24uc2xpY2UoKSxkaXN0YW5jZTpNYXRoLmxvZyh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKSx6b29tTWluOnRoaXMucmFkaXVzLmJvdW5kc1swXVswXSx6b29tTWF4OnRoaXMucmFkaXVzLmJvdW5kc1sxXVswXX19LGYuZnJvbUpTT049ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXN0VCgpLHI9dC5jZW50ZXI7ciYmdGhpcy5jZW50ZXIuc2V0KGUsclswXSxyWzFdLHJbMl0pO3ZhciBuPXQucm90YXRpb247biYmdGhpcy5yb3RhdGlvbi5zZXQoZSxuWzBdLG5bMV0sblsyXSxuWzNdKTt2YXIgaT10LmRpc3RhbmNlO2kmJmk+MCYmdGhpcy5yYWRpdXMuc2V0KGUsTWF0aC5sb2coaSkpLHRoaXMuc2V0RGlzdGFuY2VMaW1pdHModC56b29tTWluLHQuem9vbU1heCl9fSx7XCIuL2xpYi9xdWF0RnJvbUZyYW1lXCI6NDQ4LFwiZmlsdGVyZWQtdmVjdG9yXCI6MjIzLFwiZ2wtbWF0NC9mcm9tUXVhdFwiOjI1OSxcImdsLW1hdDQvaW52ZXJ0XCI6MjYyLFwiZ2wtbWF0NC9sb29rQXRcIjoyNjN9XSw0NTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicmVwZWF0LXN0cmluZ1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKHI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHI/citcIlwiOlwiIFwiLGUpK3R9fSx7XCJyZXBlYXQtc3RyaW5nXCI6NDg4fV0sNDUxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXJldHVyblt0XTt2YXIgcj1bdF07XCJzdHJpbmdcIj09dHlwZW9mIGV8fEFycmF5LmlzQXJyYXkoZSk/ZT17YnJhY2tldHM6ZX06ZXx8KGU9e30pO3ZhciBuPWUuYnJhY2tldHM/QXJyYXkuaXNBcnJheShlLmJyYWNrZXRzKT9lLmJyYWNrZXRzOltlLmJyYWNrZXRzXTpbXCJ7fVwiLFwiW11cIixcIigpXCJdLGk9ZS5lc2NhcGV8fFwiX19fXCIsYT0hIWUuZmxhdDtuLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9bmV3IFJlZ0V4cChbXCJcXFxcXCIsdFswXSxcIlteXFxcXFwiLHRbMF0sXCJcXFxcXCIsdFsxXSxcIl0qXFxcXFwiLHRbMV1dLmpvaW4oXCJcIikpLG49W107ZnVuY3Rpb24gYShlLGEsbyl7dmFyIHM9ci5wdXNoKGUuc2xpY2UodFswXS5sZW5ndGgsLXRbMV0ubGVuZ3RoKSktMTtyZXR1cm4gbi5wdXNoKHMpLGkrc31yLmZvckVhY2goZnVuY3Rpb24odCxuKXtmb3IodmFyIGksbz0wO3QhPWk7KWlmKGk9dCx0PXQucmVwbGFjZShlLGEpLG8rKz4xZTQpdGhyb3cgRXJyb3IoXCJSZWZlcmVuY2VzIGhhdmUgY2lyY3VsYXIgZGVwZW5kZW5jeS4gUGxlYXNlLCBjaGVjayB0aGVtLlwiKTtyW25dPXR9KSxuPW4ucmV2ZXJzZSgpLHI9ci5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbihyKXtlPWUucmVwbGFjZShuZXcgUmVnRXhwKFwiKFxcXFxcIitpK3IrXCIoPyFbMC05XSkpXCIsXCJnXCIpLHRbMF0rXCIkMVwiK3RbMV0pfSksZX0pfSk7dmFyIG89bmV3IFJlZ0V4cChcIlxcXFxcIitpK1wiKFswLTldKylcIik7cmV0dXJuIGE/cjpmdW5jdGlvbiB0KGUscixuKXtmb3IodmFyIGksYT1bXSxzPTA7aT1vLmV4ZWMoZSk7KXtpZihzKys+MWU0KXRocm93IEVycm9yKFwiQ2lyY3VsYXIgcmVmZXJlbmNlcyBpbiBwYXJlbnRoZXNpc1wiKTthLnB1c2goZS5zbGljZSgwLGkuaW5kZXgpKSxhLnB1c2godChyW2lbMV1dLHIpKSxlPWUuc2xpY2UoaS5pbmRleCtpWzBdLmxlbmd0aCl9cmV0dXJuIGEucHVzaChlKSxhfShyWzBdLHIpfWZ1bmN0aW9uIGkodCxlKXtpZihlJiZlLmZsYXQpe3ZhciByLG49ZSYmZS5lc2NhcGV8fFwiX19fXCIsaT10WzBdO2lmKCFpKXJldHVyblwiXCI7Zm9yKHZhciBhPW5ldyBSZWdFeHAoXCJcXFxcXCIrbitcIihbMC05XSspXCIpLG89MDtpIT1yOyl7aWYobysrPjFlNCl0aHJvdyBFcnJvcihcIkNpcmN1bGFyIHJlZmVyZW5jZXMgaW4gXCIrdCk7cj1pLGk9aS5yZXBsYWNlKGEscyl9cmV0dXJuIGl9cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uIHQoZSxyKXtyZXR1cm4gQXJyYXkuaXNBcnJheShyKSYmKHI9ci5yZWR1Y2UodCxcIlwiKSksZStyfSxcIlwiKTtmdW5jdGlvbiBzKGUscil7aWYobnVsbD09dFtyXSl0aHJvdyBFcnJvcihcIlJlZmVyZW5jZSBcIityK1wiaXMgdW5kZWZpbmVkXCIpO3JldHVybiB0W3JdfX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/aSh0LGUpOm4odCxlKX1hLnBhcnNlPW4sYS5zdHJpbmdpZnk9aSxlLmV4cG9ydHM9YX0se31dLDQ1MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJwaWNrLWJ5LWFsaWFzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZTthcmd1bWVudHMubGVuZ3RoPjEmJih0PWFyZ3VtZW50cyk7XCJzdHJpbmdcIj09dHlwZW9mIHQ/dD10LnNwbGl0KC9cXHMvKS5tYXAocGFyc2VGbG9hdCk6XCJudW1iZXJcIj09dHlwZW9mIHQmJih0PVt0XSk7dC5sZW5ndGgmJlwibnVtYmVyXCI9PXR5cGVvZiB0WzBdP2U9MT09PXQubGVuZ3RoP3t3aWR0aDp0WzBdLGhlaWdodDp0WzBdLHg6MCx5OjB9OjI9PT10Lmxlbmd0aD97d2lkdGg6dFswXSxoZWlnaHQ6dFsxXSx4OjAseTowfTp7eDp0WzBdLHk6dFsxXSx3aWR0aDp0WzJdLXRbMF18fDAsaGVpZ2h0OnRbM10tdFsxXXx8MH06dCYmKHQ9bih0LHtsZWZ0OlwieCBsIGxlZnQgTGVmdFwiLHRvcDpcInkgdCB0b3AgVG9wXCIsd2lkdGg6XCJ3IHdpZHRoIFcgV2lkdGhcIixoZWlnaHQ6XCJoIGhlaWdodCBXIFdpZHRoXCIsYm90dG9tOlwiYiBib3R0b20gQm90dG9tXCIscmlnaHQ6XCJyIHJpZ2h0IFJpZ2h0XCJ9KSxlPXt4OnQubGVmdHx8MCx5OnQudG9wfHwwfSxudWxsPT10LndpZHRoP3QucmlnaHQ/ZS53aWR0aD10LnJpZ2h0LWUueDplLndpZHRoPTA6ZS53aWR0aD10LndpZHRoLG51bGw9PXQuaGVpZ2h0P3QuYm90dG9tP2UuaGVpZ2h0PXQuYm90dG9tLWUueTplLmhlaWdodD0wOmUuaGVpZ2h0PXQuaGVpZ2h0KTtyZXR1cm4gZX19LHtcInBpY2stYnktYWxpYXNcIjo0NTh9XSw0NTM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIHQucmVwbGFjZShpLGZ1bmN0aW9uKHQscixpKXt2YXIgbz1yLnRvTG93ZXJDYXNlKCk7Zm9yKGk9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaChhKTtyZXR1cm4gZT9lLm1hcChOdW1iZXIpOltdfShpKSxcIm1cIj09byYmaS5sZW5ndGg+MiYmKGUucHVzaChbcl0uY29uY2F0KGkuc3BsaWNlKDAsMikpKSxvPVwibFwiLHI9XCJtXCI9PXI/XCJsXCI6XCJMXCIpOzspe2lmKGkubGVuZ3RoPT1uW29dKXJldHVybiBpLnVuc2hpZnQociksZS5wdXNoKGkpO2lmKGkubGVuZ3RoPG5bb10pdGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIHBhdGggZGF0YVwiKTtlLnB1c2goW3JdLmNvbmNhdChpLnNwbGljZSgwLG5bb10pKSl9fSksZX07dmFyIG49e2E6NyxjOjYsaDoxLGw6MixtOjIscTo0LHM6NCx0OjIsdjoxLHo6MH0saT0vKFthc3R2enFtaGxjXSkoW15hc3R2enFtaGxjXSopL2dpO3ZhciBhPS8tP1swLTldKlxcLj9bMC05XSsoPzplWy0rXT9cXGQrKT8vZ2l9LHt9XSw0NTQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlfHwoZT1bMCxcIlwiXSksdD1TdHJpbmcodCk7dmFyIHI9cGFyc2VGbG9hdCh0LDEwKTtyZXR1cm4gZVswXT1yLGVbMV09dC5tYXRjaCgvW1xcZC5cXC1cXCtdKlxccyooLiopLylbMV18fFwiXCIsZX19LHt9XSw0NTU6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7KGZ1bmN0aW9uKCl7dmFyIHIsbixpLGEsbyxzO1widW5kZWZpbmVkXCIhPXR5cGVvZiBwZXJmb3JtYW5jZSYmbnVsbCE9PXBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTpcInVuZGVmaW5lZFwiIT10eXBlb2YgdCYmbnVsbCE9PXQmJnQuaHJ0aW1lPyhlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4ocigpLW8pLzFlNn0sbj10LmhydGltZSxhPShyPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIDFlOSoodD1uKCkpWzBdK3RbMV19KSgpLHM9MWU5KnQudXB0aW1lKCksbz1hLXMpOkRhdGUubm93PyhlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKS1pfSxpPURhdGUubm93KCkpOihlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKS1pfSxpPShuZXcgRGF0ZSkuZ2V0VGltZSgpKX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdChcIl9wcm9jZXNzXCIpKX0se19wcm9jZXNzOjQ3NX1dLDQ1NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtpZihlPG4pe2Zvcih2YXIgcj0xLGE9MDthPGU7KythKWZvcih2YXIgbz0wO288YTsrK28paWYodFthXTx0W29dKXI9LXI7ZWxzZSBpZih0W2FdPT09dFtvXSlyZXR1cm4gMDtyZXR1cm4gcn1mb3IodmFyIHM9aS5tYWxsb2NVaW50OChlKSxhPTA7YTxlOysrYSlzW2FdPTA7Zm9yKHZhciByPTEsYT0wO2E8ZTsrK2EpaWYoIXNbYV0pe3ZhciBsPTE7c1thXT0xO2Zvcih2YXIgbz10W2FdO28hPT1hO289dFtvXSl7aWYoc1tvXSlyZXR1cm4gaS5mcmVlVWludDgocyksMDtsKz0xLHNbb109MX0xJmx8fChyPS1yKX1yZXR1cm4gaS5mcmVlVWludDgocykscn07dmFyIG49MzIsaT10KFwidHlwZWRhcnJheS1wb29sXCIpfSx7XCJ0eXBlZGFycmF5LXBvb2xcIjo1MzB9XSw0NTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwidHlwZWRhcnJheS1wb29sXCIpLGk9dChcImludmVydC1wZXJtdXRhdGlvblwiKTtyLnJhbms9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7c3dpdGNoKGUpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIDA7Y2FzZSAyOnJldHVybiB0WzFdfXZhciByLGEsbyxzPW4ubWFsbG9jVWludDMyKGUpLGw9bi5tYWxsb2NVaW50MzIoZSksYz0wO2ZvcihpKHQsbCksbz0wO288ZTsrK28pc1tvXT10W29dO2ZvcihvPWUtMTtvPjA7LS1vKWE9bFtvXSxyPXNbb10sc1tvXT1zW2FdLHNbYV09cixsW29dPWxbcl0sbFtyXT1hLGM9KGMrcikqbztyZXR1cm4gbi5mcmVlVWludDMyKGwpLG4uZnJlZVVpbnQzMihzKSxjfSxyLnVucmFuaz1mdW5jdGlvbih0LGUscil7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gcnx8W107Y2FzZSAxOnJldHVybiByPyhyWzBdPTAscik6WzBdO2Nhc2UgMjpyZXR1cm4gcj8oZT8oclswXT0wLHJbMV09MSk6KHJbMF09MSxyWzFdPTApLHIpOmU/WzAsMV06WzEsMF19dmFyIG4saSxhLG89MTtmb3IoKHI9cnx8bmV3IEFycmF5KHQpKVswXT0wLGE9MTthPHQ7KythKXJbYV09YSxvPW8qYXwwO2ZvcihhPXQtMTthPjA7LS1hKWU9ZS0obj1lL298MCkqb3wwLG89by9hfDAsaT0wfHJbYV0sclthXT0wfHJbbl0scltuXT0wfGk7cmV0dXJuIHJ9fSx7XCJpbnZlcnQtcGVybXV0YXRpb25cIjo0MDgsXCJ0eXBlZGFycmF5LXBvb2xcIjo1MzB9XSw0NTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGEsbz17fTtpZihcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9aShlKSksQXJyYXkuaXNBcnJheShlKSl7dmFyIHM9e307Zm9yKGE9MDthPGUubGVuZ3RoO2ErKylzW2VbYV1dPSEwO2U9c31mb3IobiBpbiBlKWVbbl09aShlW25dKTt2YXIgbD17fTtmb3IobiBpbiBlKXt2YXIgYz1lW25dO2lmKEFycmF5LmlzQXJyYXkoYykpZm9yKGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIHU9Y1thXTtpZihyJiYobFt1XT0hMCksdSBpbiB0KXtpZihvW25dPXRbdV0scilmb3IodmFyIGg9YTtoPGMubGVuZ3RoO2grKylsW2NbaF1dPSEwO2JyZWFrfX1lbHNlIG4gaW4gdCYmKGVbbl0mJihvW25dPXRbbl0pLHImJihsW25dPSEwKSl9aWYocilmb3IobiBpbiB0KWxbbl18fChvW25dPXRbbl0pO3JldHVybiBvfTt2YXIgbj17fTtmdW5jdGlvbiBpKHQpe3JldHVybiBuW3RdP25bdF06KFwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1uW3RdPXQuc3BsaXQoL1xccyosXFxzKnxcXHMrLykpLHQpfX0se31dLDQ1OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wfGUubGVuZ3RoLGk9dC5sZW5ndGgsYT1bbmV3IEFycmF5KHIpLG5ldyBBcnJheShyKV0sbz0wO288cjsrK28pYVswXVtvXT1bXSxhWzFdW29dPVtdO2Zvcih2YXIgbz0wO288aTsrK28pe3ZhciBzPXRbb107YVswXVtzWzBdXS5wdXNoKHMpLGFbMV1bc1sxXV0ucHVzaChzKX1mb3IodmFyIGw9W10sbz0wO288cjsrK28pYVswXVtvXS5sZW5ndGgrYVsxXVtvXS5sZW5ndGg9PT0wJiZsLnB1c2goW29dKTtmdW5jdGlvbiBjKHQsZSl7dmFyIHI9YVtlXVt0W2VdXTtyLnNwbGljZShyLmluZGV4T2YodCksMSl9ZnVuY3Rpb24gdSh0LHIsaSl7Zm9yKHZhciBvLHMsbCx1PTA7dTwyOysrdSlpZihhW3VdW3JdLmxlbmd0aD4wKXtvPWFbdV1bcl1bMF0sbD11O2JyZWFrfXM9b1sxXmxdO2Zvcih2YXIgaD0wO2g8MjsrK2gpZm9yKHZhciBmPWFbaF1bcl0scD0wO3A8Zi5sZW5ndGg7KytwKXt2YXIgZD1mW3BdLGc9ZFsxXmhdLHY9bihlW3RdLGVbcl0sZVtzXSxlW2ddKTt2PjAmJihvPWQscz1nLGw9aCl9cmV0dXJuIGk/czoobyYmYyhvLGwpLHMpfWZ1bmN0aW9uIGgodCxyKXt2YXIgaT1hW3JdW3RdWzBdLG89W3RdO2MoaSxyKTtmb3IodmFyIHM9aVsxXnJdOzspe2Zvcig7cyE9PXQ7KW8ucHVzaChzKSxzPXUob1tvLmxlbmd0aC0yXSxzLCExKTtpZihhWzBdW3RdLmxlbmd0aCthWzFdW3RdLmxlbmd0aD09PTApYnJlYWs7dmFyIGw9b1tvLmxlbmd0aC0xXSxoPXQsZj1vWzFdLHA9dShsLGgsITApO2lmKG4oZVtsXSxlW2hdLGVbZl0sZVtwXSk8MClicmVhaztvLnB1c2godCkscz11KGwsaCl9cmV0dXJuIG99ZnVuY3Rpb24gZih0LGUpe3JldHVybiBlWzFdPT09ZVtlLmxlbmd0aC0xXX1mb3IodmFyIG89MDtvPHI7KytvKWZvcih2YXIgcD0wO3A8MjsrK3Ape2Zvcih2YXIgZD1bXTthW3BdW29dLmxlbmd0aD4wOyl7YVswXVtvXS5sZW5ndGg7dmFyIGc9aChvLHApO2YoZCxnKT9kLnB1c2guYXBwbHkoZCxnKTooZC5sZW5ndGg+MCYmbC5wdXNoKGQpLGQ9Zyl9ZC5sZW5ndGg+MCYmbC5wdXNoKGQpfXJldHVybiBsfTt2YXIgbj10KFwiY29tcGFyZS1hbmdsZVwiKX0se1wiY29tcGFyZS1hbmdsZVwiOjExOH1dLDQ2MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uKHQsZS5sZW5ndGgpLGk9bmV3IEFycmF5KGUubGVuZ3RoKSxhPW5ldyBBcnJheShlLmxlbmd0aCksbz1bXSxzPTA7czxlLmxlbmd0aDsrK3Mpe3ZhciBsPXJbc10ubGVuZ3RoO2Fbc109bCxpW3NdPSEwLGw8PTEmJm8ucHVzaChzKX1mb3IoO28ubGVuZ3RoPjA7KXt2YXIgYz1vLnBvcCgpO2lbY109ITE7Zm9yKHZhciB1PXJbY10scz0wO3M8dS5sZW5ndGg7KytzKXt2YXIgaD11W3NdOzA9PS0tYVtoXSYmby5wdXNoKGgpfX1mb3IodmFyIGY9bmV3IEFycmF5KGUubGVuZ3RoKSxwPVtdLHM9MDtzPGUubGVuZ3RoOysrcylpZihpW3NdKXt2YXIgYz1wLmxlbmd0aDtmW3NdPWMscC5wdXNoKGVbc10pfWVsc2UgZltzXT0tMTtmb3IodmFyIGQ9W10scz0wO3M8dC5sZW5ndGg7KytzKXt2YXIgZz10W3NdO2lbZ1swXV0mJmlbZ1sxXV0mJmQucHVzaChbZltnWzBdXSxmW2dbMV1dXSl9cmV0dXJuW2QscF19O3ZhciBuPXQoXCJlZGdlcy10by1hZGphY2VuY3ktbGlzdFwiKX0se1wiZWRnZXMtdG8tYWRqYWNlbmN5LWxpc3RcIjoxNjR9XSw0NjE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1jKHQsZSk7dD1yWzBdO2Zvcih2YXIgaD0oZT1yWzFdKS5sZW5ndGgsZj0odC5sZW5ndGgsbih0LGUubGVuZ3RoKSkscD0wO3A8aDsrK3ApaWYoZltwXS5sZW5ndGglMj09MSl0aHJvdyBuZXcgRXJyb3IoXCJwbGFuYXItZ3JhcGgtdG8tcG9seWxpbmU6IGdyYXBoIG11c3QgYmUgbWFuaWZvbGRcIik7dmFyIGQ9aSh0LGUpO2Zvcih2YXIgZz0oZD1kLmZpbHRlcihmdW5jdGlvbih0KXtmb3IodmFyIHI9dC5sZW5ndGgsbj1bMF0saT0wO2k8cjsrK2kpe3ZhciBhPWVbdFtpXV0sbD1lW3RbKGkrMSklcl1dLGM9bygtYVswXSxhWzFdKSx1PW8oLWFbMF0sbFsxXSksaD1vKGxbMF0sYVsxXSksZj1vKGxbMF0sbFsxXSk7bj1zKG4scyhzKGMsdSkscyhoLGYpKSl9cmV0dXJuIG5bbi5sZW5ndGgtMV0+MH0pKS5sZW5ndGgsdj1uZXcgQXJyYXkoZyksbT1uZXcgQXJyYXkoZykscD0wO3A8ZzsrK3Ape3ZbcF09cDt2YXIgeT1uZXcgQXJyYXkoZykseD1kW3BdLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pLGI9YShbeF0pLF89MDt0OmZvcih2YXIgdz0wO3c8ZzsrK3cpaWYoeVt3XT0wLHAhPT13KXtmb3IodmFyIGs9ZFt3XSxBPWsubGVuZ3RoLFQ9MDtUPEE7KytUKXt2YXIgTT1iKGVba1tUXV0pO2lmKDAhPT1NKXtNPDAmJih5W3ddPTEsXys9MSk7Y29udGludWUgdH19eVt3XT0xLF8rPTF9bVtwXT1bXyxwLHldfW0uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLXRbMF19KTtmb3IodmFyIHA9MDtwPGc7KytwKWZvcih2YXIgeT1tW3BdLFM9eVsxXSxFPXlbMl0sdz0wO3c8ZzsrK3cpRVt3XSYmKHZbd109Uyk7Zm9yKHZhciBDPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3IpZVtyXT1bXTtyZXR1cm4gZX0oZykscD0wO3A8ZzsrK3ApQ1twXS5wdXNoKHZbcF0pLENbdltwXV0ucHVzaChwKTtmb3IodmFyIEw9e30sej11KGgsITEpLHA9MDtwPGc7KytwKWZvcih2YXIgaz1kW3BdLEE9ay5sZW5ndGgsdz0wO3c8QTsrK3cpe3ZhciBPPWtbd10sST1rWyh3KzEpJUFdLEQ9TWF0aC5taW4oTyxJKStcIjpcIitNYXRoLm1heChPLEkpO2lmKEQgaW4gTCl7dmFyIFA9TFtEXTtDW1BdLnB1c2gocCksQ1twXS5wdXNoKFApLHpbT109eltJXT0hMH1lbHNlIExbRF09cH1mdW5jdGlvbiBSKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPTA7cjxlOysrcilpZighelt0W3JdXSlyZXR1cm4hMTtyZXR1cm4hMH1mb3IodmFyIEY9W10sQj11KGcsLTEpLHA9MDtwPGc7KytwKXZbcF0hPT1wfHxSKGRbcF0pP0JbcF09LTE6KEYucHVzaChwKSxCW3BdPTApO3ZhciByPVtdO2Zvcig7Ri5sZW5ndGg+MDspe3ZhciBOPUYucG9wKCksaj1DW05dO2woaixmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KTt2YXIgVixVPWoubGVuZ3RoLHE9QltOXTtpZigwPT09cSl7dmFyIGs9ZFtOXTtWPVtrXX1mb3IodmFyIHA9MDtwPFU7KytwKXt2YXIgSD1qW3BdO2lmKCEoQltIXT49MCkmJihCW0hdPTFecSxGLnB1c2goSCksMD09PXEpKXt2YXIgaz1kW0hdO1Ioayl8fChrLnJldmVyc2UoKSxWLnB1c2goaykpfX0wPT09cSYmci5wdXNoKFYpfXJldHVybiByfTt2YXIgbj10KFwiZWRnZXMtdG8tYWRqYWNlbmN5LWxpc3RcIiksaT10KFwicGxhbmFyLWR1YWxcIiksYT10KFwicG9pbnQtaW4tYmlnLXBvbHlnb25cIiksbz10KFwidHdvLXByb2R1Y3RcIikscz10KFwicm9idXN0LXN1bVwiKSxsPXQoXCJ1bmlxXCIpLGM9dChcIi4vbGliL3RyaW0tbGVhdmVzXCIpO2Z1bmN0aW9uIHUodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZTtyZXR1cm4gcn19LHtcIi4vbGliL3RyaW0tbGVhdmVzXCI6NDYwLFwiZWRnZXMtdG8tYWRqYWNlbmN5LWxpc3RcIjoxNjQsXCJwbGFuYXItZHVhbFwiOjQ1OSxcInBvaW50LWluLWJpZy1wb2x5Z29uXCI6NDY1LFwicm9idXN0LXN1bVwiOjUwMCxcInR3by1wcm9kdWN0XCI6NTI4LHVuaXE6NTMyfV0sNDYyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuL3F1YWRcIil9LHtcIi4vcXVhZFwiOjQ2NH1dLDQ2MzpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsxMDJdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoxMDJ9XSw0NjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIiksaT10KFwiY2xhbXBcIiksYT10KFwicGFyc2UtcmVjdFwiKSxvPXQoXCJhcnJheS1ib3VuZHNcIikscz10KFwicGljay1ieS1hbGlhc1wiKSxsPXQoXCJkZWZpbmVkXCIpLGM9dChcImZsYXR0ZW4tdmVydGV4LWRhdGFcIiksdT10KFwiaXMtb2JqXCIpLGg9dChcImR0eXBlXCIpLGY9dChcIm1hdGgtbG9nMlwiKTtmdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByPWVbMF0sbj1lWzFdLGE9MS8oZVsyXS1yKSxvPTEvKGVbM10tbikscz1uZXcgQXJyYXkodC5sZW5ndGgpLGw9MCxjPXQubGVuZ3RoLzI7bDxjO2wrKylzWzIqbF09aSgodFsyKmxdLXIpKmEsMCwxKSxzWzIqbCsxXT1pKCh0WzIqbCsxXS1uKSpvLDAsMSk7cmV0dXJuIHN9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9e30pLHQ9Yyh0LFwiZmxvYXQ2NFwiKSxlPXMoZSx7Ym91bmRzOlwicmFuZ2UgYm91bmRzIGRhdGFCb3ggZGF0YWJveFwiLG1heERlcHRoOlwiZGVwdGggbWF4RGVwdGggbWF4ZGVwdGggbGV2ZWwgbWF4TGV2ZWwgbWF4bGV2ZWwgbGV2ZWxzXCIsZHR5cGU6XCJ0eXBlIGR0eXBlIGZvcm1hdCBvdXQgZHN0IG91dHB1dCBkZXN0aW5hdGlvblwifSk7dmFyIHI9bChlLm1heERlcHRoLDI1NSksaT1sKGUuYm91bmRzLG8odCwyKSk7aVswXT09PWlbMl0mJmlbMl0rKyxpWzFdPT09aVszXSYmaVszXSsrO3ZhciBkLGc9cCh0LGkpLHY9dC5sZW5ndGg+Pj4xO2UuZHR5cGV8fChlLmR0eXBlPVwiYXJyYXlcIiksXCJzdHJpbmdcIj09dHlwZW9mIGUuZHR5cGU/ZD1uZXcoaChlLmR0eXBlKSkodik6ZS5kdHlwZSYmKGQ9ZS5kdHlwZSxBcnJheS5pc0FycmF5KGQpJiYoZC5sZW5ndGg9dikpO2Zvcih2YXIgbT0wO208djsrK20pZFttXT1tO3ZhciB5PVtdLHg9W10sYj1bXSxfPVtdOyFmdW5jdGlvbiB0KGUsbixpLGEsbyxzKXtpZighYS5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIGw9eVtvXXx8KHlbb109W10pO3ZhciBjPWJbb118fChiW29dPVtdKTt2YXIgdT14W29dfHwoeFtvXT1bXSk7dmFyIGg9bC5sZW5ndGg7bysrO2lmKG8+cil7Zm9yKHZhciBmPTA7ZjxhLmxlbmd0aDtmKyspbC5wdXNoKGFbZl0pLGMucHVzaChzKSx1LnB1c2gobnVsbCxudWxsLG51bGwsbnVsbCk7cmV0dXJuIGh9bC5wdXNoKGFbMF0pO2MucHVzaChzKTtpZihhLmxlbmd0aDw9MSlyZXR1cm4gdS5wdXNoKG51bGwsbnVsbCxudWxsLG51bGwpLGg7dmFyIHA9LjUqaTt2YXIgZD1lK3Asdj1uK3A7dmFyIG09W10sXz1bXSx3PVtdLGs9W107Zm9yKHZhciBBPTEsVD1hLmxlbmd0aDtBPFQ7QSsrKXt2YXIgTT1hW0FdLFM9Z1syKk1dLEU9Z1syKk0rMV07UzxkP0U8dj9tLnB1c2goTSk6Xy5wdXNoKE0pOkU8dj93LnB1c2goTSk6ay5wdXNoKE0pfXM8PD0yO3UucHVzaCh0KGUsbixwLG0sbyxzKSx0KGUsdixwLF8sbyxzKzEpLHQoZCxuLHAsdyxvLHMrMiksdChkLHYscCxrLG8scyszKSk7cmV0dXJuIGh9KDAsMCwxLGQsMCwxKTtmb3IodmFyIHc9MCxrPTA7azx5Lmxlbmd0aDtrKyspe3ZhciBBPXlba107aWYoZC5zZXQpZC5zZXQoQSx3KTtlbHNlIGZvcih2YXIgVD0wLE09QS5sZW5ndGg7VDxNO1QrKylkW1Qrd109QVtUXTt2YXIgUz13K3lba10ubGVuZ3RoO19ba109W3csU10sdz1TfXJldHVybiBkLnJhbmdlPWZ1bmN0aW9uKCl7dmFyIGUscj1bXSxvPWFyZ3VtZW50cy5sZW5ndGg7Zm9yKDtvLS07KXJbb109YXJndW1lbnRzW29dO2lmKHUocltyLmxlbmd0aC0xXSkpe3ZhciBjPXIucG9wKCk7ci5sZW5ndGh8fG51bGw9PWMueCYmbnVsbD09Yy5sJiZudWxsPT1jLmxlZnR8fChyPVtjXSxlPXt9KSxlPXMoYyx7bGV2ZWw6XCJsZXZlbCBtYXhMZXZlbFwiLGQ6XCJkIGRpYW0gZGlhbWV0ZXIgciByYWRpdXMgcHggcHhTaXplIHBpeGVsIHBpeGVsU2l6ZSBtYXhEIHNpemUgbWluU2l6ZVwiLGxvZDpcImxvZCBkZXRhaWxzIHJhbmdlcyBvZmZzZXRzXCJ9KX1lbHNlIGU9e307ci5sZW5ndGh8fChyPWkpO3ZhciBoPWEuYXBwbHkodm9pZCAwLHIpLGQ9W01hdGgubWluKGgueCxoLngraC53aWR0aCksTWF0aC5taW4oaC55LGgueStoLmhlaWdodCksTWF0aC5tYXgoaC54LGgueCtoLndpZHRoKSxNYXRoLm1heChoLnksaC55K2guaGVpZ2h0KV0sZz1kWzBdLHY9ZFsxXSxtPWRbMl0sdz1kWzNdLGs9cChbZyx2LG0sd10saSksQT1rWzBdLFQ9a1sxXSxNPWtbMl0sUz1rWzNdLEM9bChlLmxldmVsLHkubGVuZ3RoKTtpZihudWxsIT1lLmQpe3ZhciBMO1wibnVtYmVyXCI9PXR5cGVvZiBlLmQ/TD1bZS5kLGUuZF06ZS5kLmxlbmd0aCYmKEw9ZS5kKSxDPU1hdGgubWluKE1hdGgubWF4KE1hdGguY2VpbCgtZihNYXRoLmFicyhMWzBdKS8oaVsyXS1pWzBdKSkpLE1hdGguY2VpbCgtZihNYXRoLmFicyhMWzFdKS8oaVszXS1pWzFdKSkpKSxDKX1pZihDPU1hdGgubWluKEMseS5sZW5ndGgpLGUubG9kKXJldHVybiBmdW5jdGlvbih0LGUscixpLGEpe2Zvcih2YXIgbz1bXSxzPTA7czxhO3MrKyl7dmFyIGw9YltzXSxjPV9bc11bMF0sdT1FKHQsZSxzKSxoPUUocixpLHMpLGY9bi5nZShsLHUpLHA9bi5ndChsLGgsZixsLmxlbmd0aC0xKTtvW3NdPVtmK2MscCtjXX1yZXR1cm4gb30oQSxULE0sUyxDKTt2YXIgej1bXTtyZXR1cm4gZnVuY3Rpb24gZShyLG4saSxhLG8scyl7aWYobnVsbCE9PW8mJm51bGwhPT1zKXt2YXIgbD1yK2ksYz1uK2k7aWYoIShBPmx8fFQ+Y3x8TTxyfHxTPG58fGE+PUN8fG89PT1zKSl7dmFyIHU9eVthXTt2b2lkIDA9PT1zJiYocz11Lmxlbmd0aCk7Zm9yKHZhciBoPW87aDxzO2grKyl7dmFyIGY9dVtoXSxwPXRbMipmXSxkPXRbMipmKzFdO3A+PWcmJnA8PW0mJmQ+PXYmJmQ8PXcmJnoucHVzaChmKX12YXIgYj14W2FdLF89Yls0Km8rMF0saz1iWzQqbysxXSxFPWJbNCpvKzJdLEw9Yls0Km8rM10sTz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1udWxsLG49MDtudWxsPT09cjspaWYocj10WzQqZStuXSwrK24+dC5sZW5ndGgpcmV0dXJuIG51bGw7cmV0dXJuIHJ9KGIsbysxKSxJPS41KmksRD1hKzE7ZShyLG4sSSxELF8sa3x8RXx8THx8TyksZShyLG4rSSxJLEQsayxFfHxMfHxPKSxlKHIrSSxuLEksRCxFLEx8fE8pLGUocitJLG4rSSxJLEQsTCxPKX19fSgwLDAsMSwwLDAsMSksen0sZDtmdW5jdGlvbiBFKHQsZSxyKXtmb3IodmFyIG49MSxpPS41LGE9LjUsbz0uNSxzPTA7czxyO3MrKyluPDw9MixuKz10PGk/ZTxhPzA6MTplPGE/MjozLG8qPS41LGkrPXQ8aT8tbzpvLGErPWU8YT8tbzpvO3JldHVybiBufX19LHtcImFycmF5LWJvdW5kc1wiOjU2LFwiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIjo0NjMsY2xhbXA6MTA2LGRlZmluZWQ6MTU2LGR0eXBlOjE2MSxcImZsYXR0ZW4tdmVydGV4LWRhdGFcIjoyMjQsXCJpcy1vYmpcIjo0MTQsXCJtYXRoLWxvZzJcIjo0MjUsXCJwYXJzZS1yZWN0XCI6NDUyLFwicGljay1ieS1hbGlhc1wiOjQ1OH1dLDQ2NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1bXSxhPVtdLHM9MDtzPGU7KytzKWZvcih2YXIgdT10W3NdLGg9dS5sZW5ndGgsZj1oLTEscD0wO3A8aDtmPXArKyl7dmFyIGQ9dVtmXSxnPXVbcF07ZFswXT09PWdbMF0/YS5wdXNoKFtkLGddKTpyLnB1c2goW2QsZ10pfWlmKDA9PT1yLmxlbmd0aClyZXR1cm4gMD09PWEubGVuZ3RoP2M6KHY9bChhKSxmdW5jdGlvbih0KXtyZXR1cm4gdih0WzBdLHRbMV0pPzA6MX0pO3ZhciB2O3ZhciBtPWkocikseT1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgaT1vLmxlKGUsclswXSk7aWYoaTwwKXJldHVybiAxO3ZhciBhPXRbaV07aWYoIWEpe2lmKCEoaT4wJiZlW2ldPT09clswXSkpcmV0dXJuIDE7YT10W2ktMV19Zm9yKHZhciBzPTE7YTspe3ZhciBsPWEua2V5LGM9bihyLGxbMF0sbFsxXSk7aWYobFswXVswXTxsWzFdWzBdKWlmKGM8MClhPWEubGVmdDtlbHNle2lmKCEoYz4wKSlyZXR1cm4gMDtzPS0xLGE9YS5yaWdodH1lbHNlIGlmKGM+MClhPWEubGVmdDtlbHNle2lmKCEoYzwwKSlyZXR1cm4gMDtzPTEsYT1hLnJpZ2h0fX1yZXR1cm4gc319KG0uc2xhYnMsbS5jb29yZGluYXRlcyk7cmV0dXJuIDA9PT1hLmxlbmd0aD95OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0KHJbMF0sclsxXSk/MDplKHIpfX0obChhKSx5KX07dmFyIG49dChcInJvYnVzdC1vcmllbnRhdGlvblwiKVszXSxpPXQoXCJzbGFiLWRlY29tcG9zaXRpb25cIiksYT10KFwiaW50ZXJ2YWwtdHJlZS0xZFwiKSxvPXQoXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiKTtmdW5jdGlvbiBzKCl7cmV0dXJuITB9ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU9e30scj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbj10W3JdLGk9blswXVswXSxvPW5bMF1bMV0sbD1uWzFdWzFdLGM9W01hdGgubWluKG8sbCksTWF0aC5tYXgobyxsKV07aSBpbiBlP2VbaV0ucHVzaChjKTplW2ldPVtjXX12YXIgdT17fSxoPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxoLmxlbmd0aDsrK3Ipe3ZhciBmPWVbaFtyXV07dVtoW3JdXT1hKGYpfXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbj10W2VdO3JldHVybiEhbiYmISFuLnF1ZXJ5UG9pbnQocixzKX19KHUpfWZ1bmN0aW9uIGModCl7cmV0dXJuIDF9fSx7XCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiOjgyLFwiaW50ZXJ2YWwtdHJlZS0xZFwiOjQwNyxcInJvYnVzdC1vcmllbnRhdGlvblwiOjQ5NSxcInNsYWItZGVjb21wb3NpdGlvblwiOjUxMX1dLDQ2NjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9dChcIi4vbGliL2J1aWxkLWxvZ1wiKSxhPXQoXCIuL2xpYi9lcHNpbG9uXCIpLG89dChcIi4vbGliL2ludGVyc2VjdGVyXCIpLHM9dChcIi4vbGliL3NlZ21lbnQtY2hhaW5lclwiKSxsPXQoXCIuL2xpYi9zZWdtZW50LXNlbGVjdG9yXCIpLGM9dChcIi4vbGliL2dlb2pzb25cIiksdT0hMSxoPWEoKTtmdW5jdGlvbiBmKHQsZSxyKXt2YXIgaT1uLnNlZ21lbnRzKHQpLGE9bi5zZWdtZW50cyhlKSxvPXIobi5jb21iaW5lKGksYSkpO3JldHVybiBuLnBvbHlnb24obyl9bj17YnVpbGRMb2c6ZnVuY3Rpb24odCl7cmV0dXJuITA9PT10P3U9aSgpOiExPT09dCYmKHU9ITEpLCExIT09dSYmdS5saXN0fSxlcHNpbG9uOmZ1bmN0aW9uKHQpe3JldHVybiBoLmVwc2lsb24odCl9LHNlZ21lbnRzOmZ1bmN0aW9uKHQpe3ZhciBlPW8oITAsaCx1KTtyZXR1cm4gdC5yZWdpb25zLmZvckVhY2goZS5hZGRSZWdpb24pLHtzZWdtZW50czplLmNhbGN1bGF0ZSh0LmludmVydGVkKSxpbnZlcnRlZDp0LmludmVydGVkfX0sY29tYmluZTpmdW5jdGlvbih0LGUpe3JldHVybntjb21iaW5lZDpvKCExLGgsdSkuY2FsY3VsYXRlKHQuc2VnbWVudHMsdC5pbnZlcnRlZCxlLnNlZ21lbnRzLGUuaW52ZXJ0ZWQpLGludmVydGVkMTp0LmludmVydGVkLGludmVydGVkMjplLmludmVydGVkfX0sc2VsZWN0VW5pb246ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwudW5pb24odC5jb21iaW5lZCx1KSxpbnZlcnRlZDp0LmludmVydGVkMXx8dC5pbnZlcnRlZDJ9fSxzZWxlY3RJbnRlcnNlY3Q6ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwuaW50ZXJzZWN0KHQuY29tYmluZWQsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZDEmJnQuaW52ZXJ0ZWQyfX0sc2VsZWN0RGlmZmVyZW5jZTpmdW5jdGlvbih0KXtyZXR1cm57c2VnbWVudHM6bC5kaWZmZXJlbmNlKHQuY29tYmluZWQsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZDEmJiF0LmludmVydGVkMn19LHNlbGVjdERpZmZlcmVuY2VSZXY6ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwuZGlmZmVyZW5jZVJldih0LmNvbWJpbmVkLHUpLGludmVydGVkOiF0LmludmVydGVkMSYmdC5pbnZlcnRlZDJ9fSxzZWxlY3RYb3I6ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwueG9yKHQuY29tYmluZWQsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZDEhPT10LmludmVydGVkMn19LHBvbHlnb246ZnVuY3Rpb24odCl7cmV0dXJue3JlZ2lvbnM6cyh0LnNlZ21lbnRzLGgsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZH19LHBvbHlnb25Gcm9tR2VvSlNPTjpmdW5jdGlvbih0KXtyZXR1cm4gYy50b1BvbHlnb24obix0KX0scG9seWdvblRvR2VvSlNPTjpmdW5jdGlvbih0KXtyZXR1cm4gYy5mcm9tUG9seWdvbihuLGgsdCl9LHVuaW9uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYodCxlLG4uc2VsZWN0VW5pb24pfSxpbnRlcnNlY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZih0LGUsbi5zZWxlY3RJbnRlcnNlY3QpfSxkaWZmZXJlbmNlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYodCxlLG4uc2VsZWN0RGlmZmVyZW5jZSl9LGRpZmZlcmVuY2VSZXY6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZih0LGUsbi5zZWxlY3REaWZmZXJlbmNlUmV2KX0seG9yOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYodCxlLG4uc2VsZWN0WG9yKX19LFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJih3aW5kb3cuUG9seUJvb2w9biksZS5leHBvcnRzPW59LHtcIi4vbGliL2J1aWxkLWxvZ1wiOjQ2NyxcIi4vbGliL2Vwc2lsb25cIjo0NjgsXCIuL2xpYi9nZW9qc29uXCI6NDY5LFwiLi9saWIvaW50ZXJzZWN0ZXJcIjo0NzAsXCIuL2xpYi9zZWdtZW50LWNoYWluZXJcIjo0NzIsXCIuL2xpYi9zZWdtZW50LXNlbGVjdG9yXCI6NDczfV0sNDY3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQsZT0wLHI9ITE7ZnVuY3Rpb24gbihlLHIpe3JldHVybiB0Lmxpc3QucHVzaCh7dHlwZTplLGRhdGE6cj9KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHIpKTp2b2lkIDB9KSx0fXJldHVybiB0PXtsaXN0OltdLHNlZ21lbnRJZDpmdW5jdGlvbigpe3JldHVybiBlKyt9LGNoZWNrSW50ZXJzZWN0aW9uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oXCJjaGVja1wiLHtzZWcxOnQsc2VnMjplfSl9LHNlZ21lbnRDaG9wOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oXCJkaXZfc2VnXCIse3NlZzp0LHB0OmV9KSxuKFwiY2hvcFwiLHtzZWc6dCxwdDplfSl9LHN0YXR1c1JlbW92ZTpmdW5jdGlvbih0KXtyZXR1cm4gbihcInBvcF9zZWdcIix7c2VnOnR9KX0sc2VnbWVudFVwZGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gbihcInNlZ191cGRhdGVcIix7c2VnOnR9KX0sc2VnbWVudE5ldzpmdW5jdGlvbih0LGUpe3JldHVybiBuKFwibmV3X3NlZ1wiLHtzZWc6dCxwcmltYXJ5OmV9KX0sc2VnbWVudFJlbW92ZTpmdW5jdGlvbih0KXtyZXR1cm4gbihcInJlbV9zZWdcIix7c2VnOnR9KX0sdGVtcFN0YXR1czpmdW5jdGlvbih0LGUscil7cmV0dXJuIG4oXCJ0ZW1wX3N0YXR1c1wiLHtzZWc6dCxhYm92ZTplLGJlbG93OnJ9KX0scmV3aW5kOmZ1bmN0aW9uKHQpe3JldHVybiBuKFwicmV3aW5kXCIse3NlZzp0fSl9LHN0YXR1czpmdW5jdGlvbih0LGUscil7cmV0dXJuIG4oXCJzdGF0dXNcIix7c2VnOnQsYWJvdmU6ZSxiZWxvdzpyfSl9LHZlcnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1yP3Q6KHI9ZSxuKFwidmVydFwiLHt4OmV9KSl9LGxvZzpmdW5jdGlvbih0KXtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgdCYmKHQ9SlNPTi5zdHJpbmdpZnkodCwhMSxcIiAgXCIpKSxuKFwibG9nXCIse3R4dDp0fSl9LHJlc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4oXCJyZXNldFwiKX0sc2VsZWN0ZWQ6ZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJzZWxlY3RlZFwiLHtzZWdzOnR9KX0sY2hhaW5TdGFydDpmdW5jdGlvbih0KXtyZXR1cm4gbihcImNoYWluX3N0YXJ0XCIse3NlZzp0fSl9LGNoYWluUmVtb3ZlSGVhZDpmdW5jdGlvbih0LGUpe3JldHVybiBuKFwiY2hhaW5fcmVtX2hlYWRcIix7aW5kZXg6dCxwdDplfSl9LGNoYWluUmVtb3ZlVGFpbDpmdW5jdGlvbih0LGUpe3JldHVybiBuKFwiY2hhaW5fcmVtX3RhaWxcIix7aW5kZXg6dCxwdDplfSl9LGNoYWluTmV3OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oXCJjaGFpbl9uZXdcIix7cHQxOnQscHQyOmV9KX0sY2hhaW5NYXRjaDpmdW5jdGlvbih0KXtyZXR1cm4gbihcImNoYWluX21hdGNoXCIse2luZGV4OnR9KX0sY2hhaW5DbG9zZTpmdW5jdGlvbih0KXtyZXR1cm4gbihcImNoYWluX2Nsb3NlXCIse2luZGV4OnR9KX0sY2hhaW5BZGRIZWFkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oXCJjaGFpbl9hZGRfaGVhZFwiLHtpbmRleDp0LHB0OmV9KX0sY2hhaW5BZGRUYWlsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oXCJjaGFpbl9hZGRfdGFpbFwiLHtpbmRleDp0LHB0OmV9KX0sY2hhaW5Db25uZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oXCJjaGFpbl9jb25cIix7aW5kZXgxOnQsaW5kZXgyOmV9KX0sY2hhaW5SZXZlcnNlOmZ1bmN0aW9uKHQpe3JldHVybiBuKFwiY2hhaW5fcmV2XCIse2luZGV4OnR9KX0sY2hhaW5Kb2luOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oXCJjaGFpbl9qb2luXCIse2luZGV4MTp0LGluZGV4MjplfSl9LGRvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbihcImRvbmVcIil9fX19LHt9XSw0Njg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7XCJudW1iZXJcIiE9dHlwZW9mIHQmJih0PTFlLTEwKTt2YXIgZT17ZXBzaWxvbjpmdW5jdGlvbihlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZSYmKHQ9ZSksdH0scG9pbnRBYm92ZU9yT25MaW5lOmZ1bmN0aW9uKGUscixuKXt2YXIgaT1yWzBdLGE9clsxXSxvPW5bMF0scz1uWzFdLGw9ZVswXTtyZXR1cm4oby1pKSooZVsxXS1hKS0ocy1hKSoobC1pKT49LXR9LHBvaW50QmV0d2VlbjpmdW5jdGlvbihlLHIsbil7dmFyIGk9ZVsxXS1yWzFdLGE9blswXS1yWzBdLG89ZVswXS1yWzBdLHM9blsxXS1yWzFdLGw9byphK2kqcztyZXR1cm4hKGw8dHx8bC0oYSphK3Mqcyk+LXQpfSxwb2ludHNTYW1lWDpmdW5jdGlvbihlLHIpe3JldHVybiBNYXRoLmFicyhlWzBdLXJbMF0pPHR9LHBvaW50c1NhbWVZOmZ1bmN0aW9uKGUscil7cmV0dXJuIE1hdGguYWJzKGVbMV0tclsxXSk8dH0scG9pbnRzU2FtZTpmdW5jdGlvbih0LHIpe3JldHVybiBlLnBvaW50c1NhbWVYKHQscikmJmUucG9pbnRzU2FtZVkodCxyKX0scG9pbnRzQ29tcGFyZTpmdW5jdGlvbih0LHIpe3JldHVybiBlLnBvaW50c1NhbWVYKHQscik/ZS5wb2ludHNTYW1lWSh0LHIpPzA6dFsxXTxyWzFdPy0xOjE6dFswXTxyWzBdPy0xOjF9LHBvaW50c0NvbGxpbmVhcjpmdW5jdGlvbihlLHIsbil7dmFyIGk9ZVswXS1yWzBdLGE9ZVsxXS1yWzFdLG89clswXS1uWzBdLHM9clsxXS1uWzFdO3JldHVybiBNYXRoLmFicyhpKnMtbyphKTx0fSxsaW5lc0ludGVyc2VjdDpmdW5jdGlvbihlLHIsbixpKXt2YXIgYT1yWzBdLWVbMF0sbz1yWzFdLWVbMV0scz1pWzBdLW5bMF0sbD1pWzFdLW5bMV0sYz1hKmwtbypzO2lmKE1hdGguYWJzKGMpPHQpcmV0dXJuITE7dmFyIHU9ZVswXS1uWzBdLGg9ZVsxXS1uWzFdLGY9KHMqaC1sKnUpL2MscD0oYSpoLW8qdSkvYyxkPXthbG9uZ0E6MCxhbG9uZ0I6MCxwdDpbZVswXStmKmEsZVsxXStmKm9dfTtyZXR1cm4gZC5hbG9uZ0E9Zjw9LXQ/LTI6Zjx0Py0xOmYtMTw9LXQ/MDpmLTE8dD8xOjIsZC5hbG9uZ0I9cDw9LXQ/LTI6cDx0Py0xOnAtMTw9LXQ/MDpwLTE8dD8xOjIsZH0scG9pbnRJbnNpZGVSZWdpb246ZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49ZVswXSxpPWVbMV0sYT1yW3IubGVuZ3RoLTFdWzBdLG89cltyLmxlbmd0aC0xXVsxXSxzPSExLGw9MDtsPHIubGVuZ3RoO2wrKyl7dmFyIGM9cltsXVswXSx1PXJbbF1bMV07dS1pPnQhPW8taT50JiYoYS1jKSooaS11KS8oby11KStjLW4+dCYmKHM9IXMpLGE9YyxvPXV9cmV0dXJuIHN9fTtyZXR1cm4gZX19LHt9XSw0Njk6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj17dG9Qb2x5Z29uOmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihlKXtpZihlLmxlbmd0aDw9MClyZXR1cm4gdC5zZWdtZW50cyh7aW52ZXJ0ZWQ6ITEscmVnaW9uczpbXX0pO2Z1bmN0aW9uIHIoZSl7dmFyIHI9ZS5zbGljZSgwLGUubGVuZ3RoLTEpO3JldHVybiB0LnNlZ21lbnRzKHtpbnZlcnRlZDohMSxyZWdpb25zOltyXX0pfWZvcih2YXIgbj1yKGVbMF0pLGk9MTtpPGUubGVuZ3RoO2krKyluPXQuc2VsZWN0RGlmZmVyZW5jZSh0LmNvbWJpbmUobixyKGVbaV0pKSk7cmV0dXJuIG59aWYoXCJQb2x5Z29uXCI9PT1lLnR5cGUpcmV0dXJuIHQucG9seWdvbihyKGUuY29vcmRpbmF0ZXMpKTtpZihcIk11bHRpUG9seWdvblwiPT09ZS50eXBlKXtmb3IodmFyIG49dC5zZWdtZW50cyh7aW52ZXJ0ZWQ6ITEscmVnaW9uczpbXX0pLGk9MDtpPGUuY29vcmRpbmF0ZXMubGVuZ3RoO2krKyluPXQuc2VsZWN0VW5pb24odC5jb21iaW5lKG4scihlLmNvb3JkaW5hdGVzW2ldKSkpO3JldHVybiB0LnBvbHlnb24obil9dGhyb3cgbmV3IEVycm9yKFwiUG9seUJvb2w6IENhbm5vdCBjb252ZXJ0IEdlb0pTT04gb2JqZWN0IHRvIFBvbHlCb29sIHBvbHlnb25cIil9LGZyb21Qb2x5Z29uOmZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQscil7cmV0dXJuIGUucG9pbnRJbnNpZGVSZWdpb24oWy41Kih0WzBdWzBdK3RbMV1bMF0pLC41Kih0WzBdWzFdK3RbMV1bMV0pXSxyKX1mdW5jdGlvbiBpKHQpe3JldHVybntyZWdpb246dCxjaGlsZHJlbjpbXX19cj10LnBvbHlnb24odC5zZWdtZW50cyhyKSk7dmFyIGE9aShudWxsKTtmdW5jdGlvbiBvKHQsZSl7Zm9yKHZhciByPTA7cjx0LmNoaWxkcmVuLmxlbmd0aDtyKyspe2lmKG4oZSwocz10LmNoaWxkcmVuW3JdKS5yZWdpb24pKXJldHVybiB2b2lkIG8ocyxlKX12YXIgYT1pKGUpO2ZvcihyPTA7cjx0LmNoaWxkcmVuLmxlbmd0aDtyKyspe3ZhciBzO24oKHM9dC5jaGlsZHJlbltyXSkucmVnaW9uLGUpJiYoYS5jaGlsZHJlbi5wdXNoKHMpLHQuY2hpbGRyZW4uc3BsaWNlKHIsMSksci0tKX10LmNoaWxkcmVuLnB1c2goYSl9Zm9yKHZhciBzPTA7czxyLnJlZ2lvbnMubGVuZ3RoO3MrKyl7dmFyIGw9ci5yZWdpb25zW3NdO2wubGVuZ3RoPDN8fG8oYSxsKX1mdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciByPTAsbj10W3QubGVuZ3RoLTFdWzBdLGk9dFt0Lmxlbmd0aC0xXVsxXSxhPVtdLG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9dFtvXVswXSxsPXRbb11bMV07YS5wdXNoKFtzLGxdKSxyKz1sKm4tcyppLG49cyxpPWx9cmV0dXJuIHI8MCE9PWUmJmEucmV2ZXJzZSgpLGEucHVzaChbYVswXVswXSxhWzBdWzFdXSksYX12YXIgdT1bXTtmdW5jdGlvbiBoKHQpe3ZhciBlPVtjKHQucmVnaW9uLCExKV07dS5wdXNoKGUpO2Zvcih2YXIgcj0wO3I8dC5jaGlsZHJlbi5sZW5ndGg7cisrKWUucHVzaChmKHQuY2hpbGRyZW5bcl0pKX1mdW5jdGlvbiBmKHQpe2Zvcih2YXIgZT0wO2U8dC5jaGlsZHJlbi5sZW5ndGg7ZSsrKWgodC5jaGlsZHJlbltlXSk7cmV0dXJuIGModC5yZWdpb24sITApfWZvcihzPTA7czxhLmNoaWxkcmVuLmxlbmd0aDtzKyspaChhLmNoaWxkcmVuW3NdKTtyZXR1cm4gdS5sZW5ndGg8PTA/e3R5cGU6XCJQb2x5Z29uXCIsY29vcmRpbmF0ZXM6W119OjE9PXUubGVuZ3RoP3t0eXBlOlwiUG9seWdvblwiLGNvb3JkaW5hdGVzOnVbMF19Ont0eXBlOlwiTXVsdGlQb2x5Z29uXCIsY29vcmRpbmF0ZXM6dX19fTtlLmV4cG9ydHM9bn0se31dLDQ3MDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuL2xpbmtlZC1saXN0XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gaSh0LGUsbil7cmV0dXJue2lkOnI/ci5zZWdtZW50SWQoKTotMSxzdGFydDp0LGVuZDplLG15RmlsbDp7YWJvdmU6bi5teUZpbGwuYWJvdmUsYmVsb3c6bi5teUZpbGwuYmVsb3d9LG90aGVyRmlsbDpudWxsfX12YXIgYT1uLmNyZWF0ZSgpO2Z1bmN0aW9uIG8odCxyKXthLmluc2VydEJlZm9yZSh0LGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbih0LHIsbixpLGEsbyl7dmFyIHM9ZS5wb2ludHNDb21wYXJlKHIsYSk7cmV0dXJuIDAhPT1zP3M6ZS5wb2ludHNTYW1lKG4sbyk/MDp0IT09aT90PzE6LTE6ZS5wb2ludEFib3ZlT3JPbkxpbmUobixpP2E6byxpP286YSk/MTotMX0odC5pc1N0YXJ0LHQucHQscixuLmlzU3RhcnQsbi5wdCxuLm90aGVyLnB0KTwwfSl9ZnVuY3Rpb24gcyh0LGUpe3ZhciByPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5ub2RlKHtpc1N0YXJ0OiEwLHB0OnQuc3RhcnQsc2VnOnQscHJpbWFyeTplLG90aGVyOm51bGwsc3RhdHVzOm51bGx9KTtyZXR1cm4gbyhyLHQuZW5kKSxyfSh0LGUpO3JldHVybiBmdW5jdGlvbih0LGUscil7dmFyIGk9bi5ub2RlKHtpc1N0YXJ0OiExLHB0OmUuZW5kLHNlZzplLHByaW1hcnk6cixvdGhlcjp0LHN0YXR1czpudWxsfSk7dC5vdGhlcj1pLG8oaSx0LnB0KX0ocix0LGUpLHJ9ZnVuY3Rpb24gbCh0LGUpe3ZhciBuPWkoZSx0LnNlZy5lbmQsdC5zZWcpO3JldHVybiBmdW5jdGlvbih0LGUpe3ImJnIuc2VnbWVudENob3AodC5zZWcsZSksdC5vdGhlci5yZW1vdmUoKSx0LnNlZy5lbmQ9ZSx0Lm90aGVyLnB0PWUsbyh0Lm90aGVyLHQucHQpfSh0LGUpLHMobix0LnByaW1hcnkpfWZ1bmN0aW9uIGMoaSxvKXt2YXIgcz1uLmNyZWF0ZSgpO2Z1bmN0aW9uIGModCl7cmV0dXJuIHMuZmluZFRyYW5zaXRpb24oZnVuY3Rpb24ocil7dmFyIG4saSxhLG8scyxsO3JldHVybiBuPXQsaT1yLmV2LGE9bi5zZWcuc3RhcnQsbz1uLnNlZy5lbmQscz1pLnNlZy5zdGFydCxsPWkuc2VnLmVuZCwoZS5wb2ludHNDb2xsaW5lYXIoYSxzLGwpP2UucG9pbnRzQ29sbGluZWFyKG8scyxsKT8xOmUucG9pbnRBYm92ZU9yT25MaW5lKG8scyxsKT8xOi0xOmUucG9pbnRBYm92ZU9yT25MaW5lKGEscyxsKT8xOi0xKT4wfSl9ZnVuY3Rpb24gdSh0LG4pe3ZhciBpPXQuc2VnLGE9bi5zZWcsbz1pLnN0YXJ0LHM9aS5lbmQsYz1hLnN0YXJ0LHU9YS5lbmQ7ciYmci5jaGVja0ludGVyc2VjdGlvbihpLGEpO3ZhciBoPWUubGluZXNJbnRlcnNlY3QobyxzLGMsdSk7aWYoITE9PT1oKXtpZighZS5wb2ludHNDb2xsaW5lYXIobyxzLGMpKXJldHVybiExO2lmKGUucG9pbnRzU2FtZShvLHUpfHxlLnBvaW50c1NhbWUocyxjKSlyZXR1cm4hMTt2YXIgZj1lLnBvaW50c1NhbWUobyxjKSxwPWUucG9pbnRzU2FtZShzLHUpO2lmKGYmJnApcmV0dXJuIG47dmFyIGQ9IWYmJmUucG9pbnRCZXR3ZWVuKG8sYyx1KSxnPSFwJiZlLnBvaW50QmV0d2VlbihzLGMsdSk7aWYoZilyZXR1cm4gZz9sKG4scyk6bCh0LHUpLG47ZCYmKHB8fChnP2wobixzKTpsKHQsdSkpLGwobixvKSl9ZWxzZSAwPT09aC5hbG9uZ0EmJigtMT09PWguYWxvbmdCP2wodCxjKTowPT09aC5hbG9uZ0I/bCh0LGgucHQpOjE9PT1oLmFsb25nQiYmbCh0LHUpKSwwPT09aC5hbG9uZ0ImJigtMT09PWguYWxvbmdBP2wobixvKTowPT09aC5hbG9uZ0E/bChuLGgucHQpOjE9PT1oLmFsb25nQSYmbChuLHMpKTtyZXR1cm4hMX1mb3IodmFyIGg9W107IWEuaXNFbXB0eSgpOyl7dmFyIGY9YS5nZXRIZWFkKCk7aWYociYmci52ZXJ0KGYucHRbMF0pLGYuaXNTdGFydCl7ciYmci5zZWdtZW50TmV3KGYuc2VnLGYucHJpbWFyeSk7dmFyIHA9YyhmKSxkPXAuYmVmb3JlP3AuYmVmb3JlLmV2Om51bGwsZz1wLmFmdGVyP3AuYWZ0ZXIuZXY6bnVsbDtmdW5jdGlvbiB2KCl7aWYoZCl7dmFyIHQ9dShmLGQpO2lmKHQpcmV0dXJuIHR9cmV0dXJuISFnJiZ1KGYsZyl9ciYmci50ZW1wU3RhdHVzKGYuc2VnLCEhZCYmZC5zZWcsISFnJiZnLnNlZyk7dmFyIG0seSx4PXYoKTtpZih4KXQ/KHk9bnVsbD09PWYuc2VnLm15RmlsbC5iZWxvd3x8Zi5zZWcubXlGaWxsLmFib3ZlIT09Zi5zZWcubXlGaWxsLmJlbG93KSYmKHguc2VnLm15RmlsbC5hYm92ZT0heC5zZWcubXlGaWxsLmFib3ZlKTp4LnNlZy5vdGhlckZpbGw9Zi5zZWcubXlGaWxsLHImJnIuc2VnbWVudFVwZGF0ZSh4LnNlZyksZi5vdGhlci5yZW1vdmUoKSxmLnJlbW92ZSgpO2lmKGEuZ2V0SGVhZCgpIT09Zil7ciYmci5yZXdpbmQoZi5zZWcpO2NvbnRpbnVlfXQ/KHk9bnVsbD09PWYuc2VnLm15RmlsbC5iZWxvd3x8Zi5zZWcubXlGaWxsLmFib3ZlIT09Zi5zZWcubXlGaWxsLmJlbG93LGYuc2VnLm15RmlsbC5iZWxvdz1nP2cuc2VnLm15RmlsbC5hYm92ZTppLGYuc2VnLm15RmlsbC5hYm92ZT15PyFmLnNlZy5teUZpbGwuYmVsb3c6Zi5zZWcubXlGaWxsLmJlbG93KTpudWxsPT09Zi5zZWcub3RoZXJGaWxsJiYobT1nP2YucHJpbWFyeT09PWcucHJpbWFyeT9nLnNlZy5vdGhlckZpbGwuYWJvdmU6Zy5zZWcubXlGaWxsLmFib3ZlOmYucHJpbWFyeT9vOmksZi5zZWcub3RoZXJGaWxsPXthYm92ZTptLGJlbG93Om19KSxyJiZyLnN0YXR1cyhmLnNlZywhIWQmJmQuc2VnLCEhZyYmZy5zZWcpLGYub3RoZXIuc3RhdHVzPXAuaW5zZXJ0KG4ubm9kZSh7ZXY6Zn0pKX1lbHNle3ZhciBiPWYuc3RhdHVzO2lmKG51bGw9PT1iKXRocm93IG5ldyBFcnJvcihcIlBvbHlCb29sOiBaZXJvLWxlbmd0aCBzZWdtZW50IGRldGVjdGVkOyB5b3VyIGVwc2lsb24gaXMgcHJvYmFibHkgdG9vIHNtYWxsIG9yIHRvbyBsYXJnZVwiKTtpZihzLmV4aXN0cyhiLnByZXYpJiZzLmV4aXN0cyhiLm5leHQpJiZ1KGIucHJldi5ldixiLm5leHQuZXYpLHImJnIuc3RhdHVzUmVtb3ZlKGIuZXYuc2VnKSxiLnJlbW92ZSgpLCFmLnByaW1hcnkpe3ZhciBfPWYuc2VnLm15RmlsbDtmLnNlZy5teUZpbGw9Zi5zZWcub3RoZXJGaWxsLGYuc2VnLm90aGVyRmlsbD1ffWgucHVzaChmLnNlZyl9YS5nZXRIZWFkKCkucmVtb3ZlKCl9cmV0dXJuIHImJnIuZG9uZSgpLGh9cmV0dXJuIHQ/e2FkZFJlZ2lvbjpmdW5jdGlvbih0KXtmb3IodmFyIG4saSxhLG89dFt0Lmxlbmd0aC0xXSxsPTA7bDx0Lmxlbmd0aDtsKyspe249byxvPXRbbF07dmFyIGM9ZS5wb2ludHNDb21wYXJlKG4sbyk7MCE9PWMmJnMoKGk9YzwwP246byxhPWM8MD9vOm4se2lkOnI/ci5zZWdtZW50SWQoKTotMSxzdGFydDppLGVuZDphLG15RmlsbDp7YWJvdmU6bnVsbCxiZWxvdzpudWxsfSxvdGhlckZpbGw6bnVsbH0pLCEwKX19LGNhbGN1bGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCExKX19OntjYWxjdWxhdGU6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXtzKGkodC5zdGFydCx0LmVuZCx0KSwhMCl9KSxyLmZvckVhY2goZnVuY3Rpb24odCl7cyhpKHQuc3RhcnQsdC5lbmQsdCksITEpfSksYyhlLG4pfX19fSx7XCIuL2xpbmtlZC1saXN0XCI6NDcxfV0sNDcxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXtjcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD17cm9vdDp7cm9vdDohMCxuZXh0Om51bGx9LGV4aXN0czpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWUmJmUhPT10LnJvb3R9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXQucm9vdC5uZXh0fSxnZXRIZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIHQucm9vdC5uZXh0fSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49dC5yb290LGk9dC5yb290Lm5leHQ7bnVsbCE9PWk7KXtpZihyKGkpKXJldHVybiBlLnByZXY9aS5wcmV2LGUubmV4dD1pLGkucHJldi5uZXh0PWUsdm9pZChpLnByZXY9ZSk7bj1pLGk9aS5uZXh0fW4ubmV4dD1lLGUucHJldj1uLGUubmV4dD1udWxsfSxmaW5kVHJhbnNpdGlvbjpmdW5jdGlvbihlKXtmb3IodmFyIHI9dC5yb290LG49dC5yb290Lm5leHQ7bnVsbCE9PW4mJiFlKG4pOylyPW4sbj1uLm5leHQ7cmV0dXJue2JlZm9yZTpyPT09dC5yb290P251bGw6cixhZnRlcjpuLGluc2VydDpmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2PXIsdC5uZXh0PW4sci5uZXh0PXQsbnVsbCE9PW4mJihuLnByZXY9dCksdH19fX07cmV0dXJuIHR9LG5vZGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldj1udWxsLHQubmV4dD1udWxsLHQucmVtb3ZlPWZ1bmN0aW9uKCl7dC5wcmV2Lm5leHQ9dC5uZXh0LHQubmV4dCYmKHQubmV4dC5wcmV2PXQucHJldiksdC5wcmV2PW51bGwsdC5uZXh0PW51bGx9LHR9fX0se31dLDQ3MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49W10saT1bXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBhPXQuc3RhcnQsbz10LmVuZDtpZihlLnBvaW50c1NhbWUoYSxvKSljb25zb2xlLndhcm4oXCJQb2x5Qm9vbDogV2FybmluZzogWmVyby1sZW5ndGggc2VnbWVudCBkZXRlY3RlZDsgeW91ciBlcHNpbG9uIGlzIHByb2JhYmx5IHRvbyBzbWFsbCBvciB0b28gbGFyZ2VcIik7ZWxzZXtyJiZyLmNoYWluU3RhcnQodCk7Zm9yKHZhciBzPXtpbmRleDowLG1hdGNoZXNfaGVhZDohMSxtYXRjaGVzX3B0MTohMX0sbD17aW5kZXg6MCxtYXRjaGVzX2hlYWQ6ITEsbWF0Y2hlc19wdDE6ITF9LGM9cyx1PTA7dTxuLmxlbmd0aDt1Kyspe3ZhciBoPSh2PW5bdV0pWzBdLGY9KHZbMV0sdlt2Lmxlbmd0aC0xXSk7aWYodlt2Lmxlbmd0aC0yXSxlLnBvaW50c1NhbWUoaCxhKSl7aWYoQSh1LCEwLCEwKSlicmVha31lbHNlIGlmKGUucG9pbnRzU2FtZShoLG8pKXtpZihBKHUsITAsITEpKWJyZWFrfWVsc2UgaWYoZS5wb2ludHNTYW1lKGYsYSkpe2lmKEEodSwhMSwhMCkpYnJlYWt9ZWxzZSBpZihlLnBvaW50c1NhbWUoZixvKSYmQSh1LCExLCExKSlicmVha31pZihjPT09cylyZXR1cm4gbi5wdXNoKFthLG9dKSx2b2lkKHImJnIuY2hhaW5OZXcoYSxvKSk7aWYoYz09PWwpe3ImJnIuY2hhaW5NYXRjaChzLmluZGV4KTt2YXIgcD1zLmluZGV4LGQ9cy5tYXRjaGVzX3B0MT9vOmEsZz1zLm1hdGNoZXNfaGVhZCx2PW5bcF0sbT1nP3ZbMF06dlt2Lmxlbmd0aC0xXSx5PWc/dlsxXTp2W3YubGVuZ3RoLTJdLHg9Zz92W3YubGVuZ3RoLTFdOnZbMF0sYj1nP3Zbdi5sZW5ndGgtMl06dlsxXTtyZXR1cm4gZS5wb2ludHNDb2xsaW5lYXIoeSxtLGQpJiYoZz8ociYmci5jaGFpblJlbW92ZUhlYWQocy5pbmRleCxkKSx2LnNoaWZ0KCkpOihyJiZyLmNoYWluUmVtb3ZlVGFpbChzLmluZGV4LGQpLHYucG9wKCkpLG09eSksZS5wb2ludHNTYW1lKHgsZCk/KG4uc3BsaWNlKHAsMSksZS5wb2ludHNDb2xsaW5lYXIoYix4LG0pJiYoZz8ociYmci5jaGFpblJlbW92ZVRhaWwocy5pbmRleCxtKSx2LnBvcCgpKToociYmci5jaGFpblJlbW92ZUhlYWQocy5pbmRleCxtKSx2LnNoaWZ0KCkpKSxyJiZyLmNoYWluQ2xvc2Uocy5pbmRleCksdm9pZCBpLnB1c2godikpOnZvaWQoZz8ociYmci5jaGFpbkFkZEhlYWQocy5pbmRleCxkKSx2LnVuc2hpZnQoZCkpOihyJiZyLmNoYWluQWRkVGFpbChzLmluZGV4LGQpLHYucHVzaChkKSkpfXZhciBfPXMuaW5kZXgsdz1sLmluZGV4O3ImJnIuY2hhaW5Db25uZWN0KF8sdyk7dmFyIGs9bltfXS5sZW5ndGg8blt3XS5sZW5ndGg7cy5tYXRjaGVzX2hlYWQ/bC5tYXRjaGVzX2hlYWQ/az8oVChfKSxNKF8sdykpOihUKHcpLE0odyxfKSk6TSh3LF8pOmwubWF0Y2hlc19oZWFkP00oXyx3KTprPyhUKF8pLE0odyxfKSk6KFQodyksTShfLHcpKX1mdW5jdGlvbiBBKHQsZSxyKXtyZXR1cm4gYy5pbmRleD10LGMubWF0Y2hlc19oZWFkPWUsYy5tYXRjaGVzX3B0MT1yLGM9PT1zPyhjPWwsITEpOihjPW51bGwsITApfWZ1bmN0aW9uIFQodCl7ciYmci5jaGFpblJldmVyc2UodCksblt0XS5yZXZlcnNlKCl9ZnVuY3Rpb24gTSh0LGkpe3ZhciBhPW5bdF0sbz1uW2ldLHM9YVthLmxlbmd0aC0xXSxsPWFbYS5sZW5ndGgtMl0sYz1vWzBdLHU9b1sxXTtlLnBvaW50c0NvbGxpbmVhcihsLHMsYykmJihyJiZyLmNoYWluUmVtb3ZlVGFpbCh0LHMpLGEucG9wKCkscz1sKSxlLnBvaW50c0NvbGxpbmVhcihzLGMsdSkmJihyJiZyLmNoYWluUmVtb3ZlSGVhZChpLGMpLG8uc2hpZnQoKSksciYmci5jaGFpbkpvaW4odCxpKSxuW3RdPWEuY29uY2F0KG8pLG4uc3BsaWNlKGksMSl9fSksaX19LHt9XSw0NzM6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj1bXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBpPSh0Lm15RmlsbC5hYm92ZT84OjApKyh0Lm15RmlsbC5iZWxvdz80OjApKyh0Lm90aGVyRmlsbCYmdC5vdGhlckZpbGwuYWJvdmU/MjowKSsodC5vdGhlckZpbGwmJnQub3RoZXJGaWxsLmJlbG93PzE6MCk7MCE9PWVbaV0mJm4ucHVzaCh7aWQ6cj9yLnNlZ21lbnRJZCgpOi0xLHN0YXJ0OnQuc3RhcnQsZW5kOnQuZW5kLG15RmlsbDp7YWJvdmU6MT09PWVbaV0sYmVsb3c6Mj09PWVbaV19LG90aGVyRmlsbDpudWxsfSl9KSxyJiZyLnNlbGVjdGVkKG4pLG59dmFyIGk9e3VuaW9uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxbMCwyLDEsMCwyLDIsMCwwLDEsMCwxLDAsMCwwLDAsMF0sZSl9LGludGVyc2VjdDpmdW5jdGlvbih0LGUpe3JldHVybiBuKHQsWzAsMCwwLDAsMCwyLDAsMiwwLDAsMSwxLDAsMiwxLDBdLGUpfSxkaWZmZXJlbmNlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxbMCwwLDAsMCwyLDAsMiwwLDEsMSwwLDAsMCwxLDIsMF0sZSl9LGRpZmZlcmVuY2VSZXY6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LFswLDIsMSwwLDAsMCwxLDEsMCwyLDAsMiwwLDAsMCwwXSxlKX0seG9yOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxbMCwyLDEsMCwyLDAsMCwxLDEsMCwwLDIsMCwxLDIsMF0sZSl9fTtlLmV4cG9ydHM9aX0se31dLDQ3NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPW5ldyBGbG9hdDY0QXJyYXkoNCksaT1uZXcgRmxvYXQ2NEFycmF5KDQpLGE9bmV3IEZsb2F0NjRBcnJheSg0KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzKXtuLmxlbmd0aDxvLmxlbmd0aCYmKG49bmV3IEZsb2F0NjRBcnJheShvLmxlbmd0aCksaT1uZXcgRmxvYXQ2NEFycmF5KG8ubGVuZ3RoKSxhPW5ldyBGbG9hdDY0QXJyYXkoby5sZW5ndGgpKTtmb3IodmFyIGw9MDtsPG8ubGVuZ3RoOysrbCluW2xdPXRbbF0tb1tsXSxpW2xdPWVbbF0tdFtsXSxhW2xdPXJbbF0tdFtsXTt2YXIgYz0wLHU9MCxoPTAsZj0wLHA9MCxkPTA7Zm9yKGw9MDtsPG8ubGVuZ3RoOysrbCl7dmFyIGc9aVtsXSx2PWFbbF0sbT1uW2xdO2MrPWcqZyx1Kz1nKnYsaCs9dip2LGYrPW0qZyxwKz1tKnYsZCs9bSptfXZhciB5LHgsYixfLHcsaz1NYXRoLmFicyhjKmgtdSp1KSxBPXUqcC1oKmYsVD11KmYtYypwO2lmKEErVDw9aylpZihBPDApVDwwJiZmPDA/KFQ9MCwtZj49Yz8oQT0xLHk9YysyKmYrZCk6eT1mKihBPS1mL2MpK2QpOihBPTAscD49MD8oVD0wLHk9ZCk6LXA+PWg/KFQ9MSx5PWgrMipwK2QpOnk9cCooVD0tcC9oKStkKTtlbHNlIGlmKFQ8MClUPTAsZj49MD8oQT0wLHk9ZCk6LWY+PWM/KEE9MSx5PWMrMipmK2QpOnk9ZiooQT0tZi9jKStkO2Vsc2V7dmFyIE09MS9rO3k9KEEqPU0pKihjKkErdSooVCo9TSkrMipmKStUKih1KkEraCpUKzIqcCkrZH1lbHNlIEE8MD8oYj1oK3ApPih4PXUrZik/KF89Yi14KT49KHc9Yy0yKnUraCk/KEE9MSxUPTAseT1jKzIqZitkKTp5PShBPV8vdykqKGMqQSt1KihUPTEtQSkrMipmKStUKih1KkEraCpUKzIqcCkrZDooQT0wLGI8PTA/KFQ9MSx5PWgrMipwK2QpOnA+PTA/KFQ9MCx5PWQpOnk9cCooVD0tcC9oKStkKTpUPDA/KGI9YytmKT4oeD11K3ApPyhfPWIteCk+PSh3PWMtMip1K2gpPyhUPTEsQT0wLHk9aCsyKnArZCk6eT0oQT0xLShUPV8vdykpKihjKkErdSpUKzIqZikrVCoodSpBK2gqVCsyKnApK2Q6KFQ9MCxiPD0wPyhBPTEseT1jKzIqZitkKTpmPj0wPyhBPTAseT1kKTp5PWYqKEE9LWYvYykrZCk6KF89aCtwLXUtZik8PTA/KEE9MCxUPTEseT1oKzIqcCtkKTpfPj0odz1jLTIqdStoKT8oQT0xLFQ9MCx5PWMrMipmK2QpOnk9KEE9Xy93KSooYypBK3UqKFQ9MS1BKSsyKmYpK1QqKHUqQStoKlQrMipwKStkO3ZhciBTPTEtQS1UO2ZvcihsPTA7bDxvLmxlbmd0aDsrK2wpc1tsXT1TKnRbbF0rQSplW2xdK1QqcltsXTtyZXR1cm4geTwwPzA6eX19LHt9XSw0NzU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9ZS5leHBvcnRzPXt9O2Z1bmN0aW9uIG8oKXt0aHJvdyBuZXcgRXJyb3IoXCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfWZ1bmN0aW9uIHMoKXt0aHJvdyBuZXcgRXJyb3IoXCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9ZnVuY3Rpb24gbCh0KXtpZihuPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dCh0LDApO2lmKChuPT09b3x8IW4pJiZzZXRUaW1lb3V0KXJldHVybiBuPXNldFRpbWVvdXQsc2V0VGltZW91dCh0LDApO3RyeXtyZXR1cm4gbih0LDApfWNhdGNoKGUpe3RyeXtyZXR1cm4gbi5jYWxsKG51bGwsdCwwKX1jYXRjaChlKXtyZXR1cm4gbi5jYWxsKHRoaXMsdCwwKX19fSFmdW5jdGlvbigpe3RyeXtuPVwiZnVuY3Rpb25cIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDpvfWNhdGNoKHQpe249b310cnl7aT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0OnN9Y2F0Y2godCl7aT1zfX0oKTt2YXIgYyx1PVtdLGg9ITEsZj0tMTtmdW5jdGlvbiBwKCl7aCYmYyYmKGg9ITEsYy5sZW5ndGg/dT1jLmNvbmNhdCh1KTpmPS0xLHUubGVuZ3RoJiZkKCkpfWZ1bmN0aW9uIGQoKXtpZighaCl7dmFyIHQ9bChwKTtoPSEwO2Zvcih2YXIgZT11Lmxlbmd0aDtlOyl7Zm9yKGM9dSx1PVtdOysrZjxlOyljJiZjW2ZdLnJ1bigpO2Y9LTEsZT11Lmxlbmd0aH1jPW51bGwsaD0hMSxmdW5jdGlvbih0KXtpZihpPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQodCk7aWYoKGk9PT1zfHwhaSkmJmNsZWFyVGltZW91dClyZXR1cm4gaT1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KHQpO3RyeXtpKHQpfWNhdGNoKGUpe3RyeXtyZXR1cm4gaS5jYWxsKG51bGwsdCl9Y2F0Y2goZSl7cmV0dXJuIGkuY2FsbCh0aGlzLHQpfX19KHQpfX1mdW5jdGlvbiBnKHQsZSl7dGhpcy5mdW49dCx0aGlzLmFycmF5PWV9ZnVuY3Rpb24gdigpe31hLm5leHRUaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWVbci0xXT1hcmd1bWVudHNbcl07dS5wdXNoKG5ldyBnKHQsZSkpLDEhPT11Lmxlbmd0aHx8aHx8bChkKX0sZy5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX0sYS50aXRsZT1cImJyb3dzZXJcIixhLmJyb3dzZXI9ITAsYS5lbnY9e30sYS5hcmd2PVtdLGEudmVyc2lvbj1cIlwiLGEudmVyc2lvbnM9e30sYS5vbj12LGEuYWRkTGlzdGVuZXI9dixhLm9uY2U9dixhLm9mZj12LGEucmVtb3ZlTGlzdGVuZXI9dixhLnJlbW92ZUFsbExpc3RlbmVycz12LGEuZW1pdD12LGEucHJlcGVuZExpc3RlbmVyPXYsYS5wcmVwZW5kT25jZUxpc3RlbmVyPXYsYS5saXN0ZW5lcnM9ZnVuY3Rpb24odCl7cmV0dXJuW119LGEuYmluZGluZz1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZFwiKX0sYS5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm5cIi9cIn0sYS5jaGRpcj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWRcIil9LGEudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LHt9XSw0NzY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dChcImdsLXF1YXQvc2xlcnBcIil9LHtcImdsLXF1YXQvc2xlcnBcIjoyOTB9XSw0Nzc6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7Zm9yKHZhciBuPXQoXCJwZXJmb3JtYW5jZS1ub3dcIiksaT1cInVuZGVmaW5lZFwiPT10eXBlb2Ygd2luZG93P3I6d2luZG93LGE9W1wibW96XCIsXCJ3ZWJraXRcIl0sbz1cIkFuaW1hdGlvbkZyYW1lXCIscz1pW1wicmVxdWVzdFwiK29dLGw9aVtcImNhbmNlbFwiK29dfHxpW1wiY2FuY2VsUmVxdWVzdFwiK29dLGM9MDshcyYmYzxhLmxlbmd0aDtjKyspcz1pW2FbY10rXCJSZXF1ZXN0XCIrb10sbD1pW2FbY10rXCJDYW5jZWxcIitvXXx8aVthW2NdK1wiQ2FuY2VsUmVxdWVzdFwiK29dO2lmKCFzfHwhbCl7dmFyIHU9MCxoPTAsZj1bXTtzPWZ1bmN0aW9uKHQpe2lmKDA9PT1mLmxlbmd0aCl7dmFyIGU9bigpLHI9TWF0aC5tYXgoMCwxZTMvNjAtKGUtdSkpO3U9citlLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgdD1mLnNsaWNlKDApO2YubGVuZ3RoPTA7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYoIXRbZV0uY2FuY2VsbGVkKXRyeXt0W2VdLmNhbGxiYWNrKHUpfWNhdGNoKHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyB0fSwwKX19LE1hdGgucm91bmQocikpfXJldHVybiBmLnB1c2goe2hhbmRsZTorK2gsY2FsbGJhY2s6dCxjYW5jZWxsZWQ6ITF9KSxofSxsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8Zi5sZW5ndGg7ZSsrKWZbZV0uaGFuZGxlPT09dCYmKGZbZV0uY2FuY2VsbGVkPSEwKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBzLmNhbGwoaSx0KX0sZS5leHBvcnRzLmNhbmNlbD1mdW5jdGlvbigpe2wuYXBwbHkoaSxhcmd1bWVudHMpfSxlLmV4cG9ydHMucG9seWZpbGw9ZnVuY3Rpb24odCl7dHx8KHQ9aSksdC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9cyx0LmNhbmNlbEFuaW1hdGlvbkZyYW1lPWx9fSkuY2FsbCh0aGlzLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7XCJwZXJmb3JtYW5jZS1ub3dcIjo0NTV9XSw0Nzg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiYmlnLXJhdC9hZGRcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7KythKWlbYV09bih0W2FdLGVbYV0pO3JldHVybiBpfX0se1wiYmlnLXJhdC9hZGRcIjo2Nn1dLDQ3OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDsrK3IpZVtyXT1uKHRbcl0pO3JldHVybiBlfTt2YXIgbj10KFwiYmlnLXJhdFwiKX0se1wiYmlnLXJhdFwiOjY5fV0sNDgwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImJpZy1yYXRcIiksaT10KFwiYmlnLXJhdC9tdWxcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW4oZSksYT10Lmxlbmd0aCxvPW5ldyBBcnJheShhKSxzPTA7czxhOysrcylvW3NdPWkodFtzXSxyKTtyZXR1cm4gb319LHtcImJpZy1yYXRcIjo2OSxcImJpZy1yYXQvbXVsXCI6Nzh9XSw0ODE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiYmlnLXJhdC9zdWJcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7KythKWlbYV09bih0W2FdLGVbYV0pO3JldHVybiBpfX0se1wiYmlnLXJhdC9zdWJcIjo4MH1dLDQ4MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJjb21wYXJlLWNlbGxcIiksaT10KFwiY29tcGFyZS1vcmllbnRlZC1jZWxsXCIpLGE9dChcImNlbGwtb3JpZW50YXRpb25cIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3Quc29ydChpKTtmb3IodmFyIGU9dC5sZW5ndGgscj0wLG89MDtvPGU7KytvKXt2YXIgcz10W29dLGw9YShzKTtpZigwIT09bCl7aWYocj4wKXt2YXIgYz10W3ItMV07aWYoMD09PW4ocyxjKSYmYShjKSE9PWwpe3ItPTE7Y29udGludWV9fXRbcisrXT1zfX1yZXR1cm4gdC5sZW5ndGg9cix0fX0se1wiY2VsbC1vcmllbnRhdGlvblwiOjEwMyxcImNvbXBhcmUtY2VsbFwiOjExOSxcImNvbXBhcmUtb3JpZW50ZWQtY2VsbFwiOjEyMH1dLDQ4MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJhcnJheS1ib3VuZHNcIiksaT10KFwiY29sb3Itbm9ybWFsaXplXCIpLGE9dChcInVwZGF0ZS1kaWZmXCIpLG89dChcInBpY2stYnktYWxpYXNcIikscz10KFwib2JqZWN0LWFzc2lnblwiKSxsPXQoXCJmbGF0dGVuLXZlcnRleC1kYXRhXCIpLGM9dChcInRvLWZsb2F0MzJcIiksdT1jLmZsb2F0MzIsaD1jLmZyYWN0MzI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7XCJmdW5jdGlvblwiPT10eXBlb2YgdD8oZXx8KGU9e30pLGUucmVnbD10KTplPXQ7ZS5sZW5ndGgmJihlLnBvc2l0aW9ucz1lKTtpZighKHQ9ZS5yZWdsKS5oYXNFeHRlbnNpb24oXCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzXCIpKXRocm93IEVycm9yKFwicmVnbC1lcnJvcjJkOiBgQU5HTEVfaW5zdGFuY2VkX2FycmF5c2AgZXh0ZW5zaW9uIHNob3VsZCBiZSBlbmFibGVkXCIpO3ZhciByLGMscCxkLGcsdixtPXQuX2dsLHk9e2NvbG9yOlwiYmxhY2tcIixjYXBTaXplOjUsbGluZVdpZHRoOjEsb3BhY2l0eToxLHZpZXdwb3J0Om51bGwscmFuZ2U6bnVsbCxvZmZzZXQ6MCxjb3VudDowLGJvdW5kczpudWxsLHBvc2l0aW9uczpbXSxlcnJvcnM6W119LHg9W107cmV0dXJuIGQ9dC5idWZmZXIoe3VzYWdlOlwiZHluYW1pY1wiLHR5cGU6XCJ1aW50OFwiLGRhdGE6bmV3IFVpbnQ4QXJyYXkoMCl9KSxjPXQuYnVmZmVyKHt1c2FnZTpcImR5bmFtaWNcIix0eXBlOlwiZmxvYXRcIixkYXRhOm5ldyBVaW50OEFycmF5KDApfSkscD10LmJ1ZmZlcih7dXNhZ2U6XCJkeW5hbWljXCIsdHlwZTpcImZsb2F0XCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pLGc9dC5idWZmZXIoe3VzYWdlOlwiZHluYW1pY1wiLHR5cGU6XCJmbG9hdFwiLGRhdGE6bmV3IFVpbnQ4QXJyYXkoMCl9KSx2PXQuYnVmZmVyKHt1c2FnZTpcInN0YXRpY1wiLHR5cGU6XCJmbG9hdFwiLGRhdGE6Zn0pLGsoZSkscj10KHt2ZXJ0OlwiXFxuXFx0XFx0cHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcblxcblxcdFxcdGF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uLCBwb3NpdGlvbkZyYWN0O1xcblxcdFxcdGF0dHJpYnV0ZSB2ZWM0IGVycm9yO1xcblxcdFxcdGF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xcblxcblxcdFxcdGF0dHJpYnV0ZSB2ZWMyIGRpcmVjdGlvbiwgbGluZU9mZnNldCwgY2FwT2Zmc2V0O1xcblxcblxcdFxcdHVuaWZvcm0gdmVjNCB2aWV3cG9ydDtcXG5cXHRcXHR1bmlmb3JtIGZsb2F0IGxpbmVXaWR0aCwgY2FwU2l6ZTtcXG5cXHRcXHR1bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3Q7XFxuXFxuXFx0XFx0dmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcXG5cXG5cXHRcXHR2b2lkIG1haW4oKSB7XFxuXFx0XFx0XFx0ZnJhZ0NvbG9yID0gY29sb3IgLyAyNTUuO1xcblxcblxcdFxcdFxcdHZlYzIgcGl4ZWxPZmZzZXQgPSBsaW5lV2lkdGggKiBsaW5lT2Zmc2V0ICsgKGNhcFNpemUgKyBsaW5lV2lkdGgpICogY2FwT2Zmc2V0O1xcblxcblxcdFxcdFxcdHZlYzIgZHh5ID0gLXN0ZXAoLjUsIGRpcmVjdGlvbi54eSkgKiBlcnJvci54eiArIHN0ZXAoZGlyZWN0aW9uLnh5LCB2ZWMyKC0uNSkpICogZXJyb3IueXc7XFxuXFxuXFx0XFx0XFx0dmVjMiBwb3NpdGlvbiA9IHBvc2l0aW9uICsgZHh5O1xcblxcblxcdFxcdFxcdHZlYzIgcG9zID0gKHBvc2l0aW9uICsgdHJhbnNsYXRlKSAqIHNjYWxlXFxuXFx0XFx0XFx0XFx0KyAocG9zaXRpb25GcmFjdCArIHRyYW5zbGF0ZUZyYWN0KSAqIHNjYWxlXFxuXFx0XFx0XFx0XFx0KyAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVGcmFjdFxcblxcdFxcdFxcdFxcdCsgKHBvc2l0aW9uRnJhY3QgKyB0cmFuc2xhdGVGcmFjdCkgKiBzY2FsZUZyYWN0O1xcblxcblxcdFxcdFxcdHBvcyArPSBwaXhlbE9mZnNldCAvIHZpZXdwb3J0Lnp3O1xcblxcblxcdFxcdFxcdGdsX1Bvc2l0aW9uID0gdmVjNChwb3MgKiAyLiAtIDEuLCAwLCAxKTtcXG5cXHRcXHR9XFxuXFx0XFx0XCIsZnJhZzpcIlxcblxcdFxcdHByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG5cXHRcXHR2YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xcblxcblxcdFxcdHVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcXG5cXG5cXHRcXHR2b2lkIG1haW4oKSB7XFxuXFx0XFx0XFx0Z2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xcblxcdFxcdFxcdGdsX0ZyYWdDb2xvci5hICo9IG9wYWNpdHk7XFxuXFx0XFx0fVxcblxcdFxcdFwiLHVuaWZvcm1zOntyYW5nZTp0LnByb3AoXCJyYW5nZVwiKSxsaW5lV2lkdGg6dC5wcm9wKFwibGluZVdpZHRoXCIpLGNhcFNpemU6dC5wcm9wKFwiY2FwU2l6ZVwiKSxvcGFjaXR5OnQucHJvcChcIm9wYWNpdHlcIiksc2NhbGU6dC5wcm9wKFwic2NhbGVcIiksdHJhbnNsYXRlOnQucHJvcChcInRyYW5zbGF0ZVwiKSxzY2FsZUZyYWN0OnQucHJvcChcInNjYWxlRnJhY3RcIiksdHJhbnNsYXRlRnJhY3Q6dC5wcm9wKFwidHJhbnNsYXRlRnJhY3RcIiksdmlld3BvcnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm5bZS52aWV3cG9ydC54LGUudmlld3BvcnQueSx0LnZpZXdwb3J0V2lkdGgsdC52aWV3cG9ydEhlaWdodF19fSxhdHRyaWJ1dGVzOntjb2xvcjp7YnVmZmVyOmQsb2Zmc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDQqZS5vZmZzZXR9LGRpdmlzb3I6MX0scG9zaXRpb246e2J1ZmZlcjpjLG9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiA4KmUub2Zmc2V0fSxkaXZpc29yOjF9LHBvc2l0aW9uRnJhY3Q6e2J1ZmZlcjpwLG9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiA4KmUub2Zmc2V0fSxkaXZpc29yOjF9LGVycm9yOntidWZmZXI6ZyxvZmZzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gMTYqZS5vZmZzZXR9LGRpdmlzb3I6MX0sZGlyZWN0aW9uOntidWZmZXI6dixzdHJpZGU6MjQsb2Zmc2V0OjB9LGxpbmVPZmZzZXQ6e2J1ZmZlcjp2LHN0cmlkZToyNCxvZmZzZXQ6OH0sY2FwT2Zmc2V0OntidWZmZXI6dixzdHJpZGU6MjQsb2Zmc2V0OjE2fX0scHJpbWl0aXZlOlwidHJpYW5nbGVzXCIsYmxlbmQ6e2VuYWJsZTohMCxjb2xvcjpbMCwwLDAsMF0sZXF1YXRpb246e3JnYjpcImFkZFwiLGFscGhhOlwiYWRkXCJ9LGZ1bmM6e3NyY1JHQjpcInNyYyBhbHBoYVwiLGRzdFJHQjpcIm9uZSBtaW51cyBzcmMgYWxwaGFcIixzcmNBbHBoYTpcIm9uZSBtaW51cyBkc3QgYWxwaGFcIixkc3RBbHBoYTpcIm9uZVwifX0sZGVwdGg6e2VuYWJsZTohMX0sc2Npc3Nvcjp7ZW5hYmxlOiEwLGJveDp0LnByb3AoXCJ2aWV3cG9ydFwiKX0sdmlld3BvcnQ6dC5wcm9wKFwidmlld3BvcnRcIiksc3RlbmNpbDohMSxpbnN0YW5jZXM6dC5wcm9wKFwiY291bnRcIiksY291bnQ6Zi5sZW5ndGh9KSxzKGIse3VwZGF0ZTprLGRyYXc6XyxkZXN0cm95OkEscmVnbDp0LGdsOm0sY2FudmFzOm0uY2FudmFzLGdyb3Vwczp4fSksYjtmdW5jdGlvbiBiKHQpe3Q/ayh0KTpudWxsPT09dCYmQSgpLF8oKX1mdW5jdGlvbiBfKGUpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXJldHVybiB3KGUpO2UmJiFBcnJheS5pc0FycmF5KGUpJiYoZT1bZV0pLHQuX3JlZnJlc2goKSx4LmZvckVhY2goZnVuY3Rpb24odCxyKXt0JiYoZSYmKGVbcl0/dC5kcmF3PSEwOnQuZHJhdz0hMSksdC5kcmF3P3cocik6dC5kcmF3PSEwKX0pfWZ1bmN0aW9uIHcodCl7XCJudW1iZXJcIj09dHlwZW9mIHQmJih0PXhbdF0pLG51bGwhPXQmJnQmJnQuY291bnQmJnQuY29sb3ImJnQub3BhY2l0eSYmdC5wb3NpdGlvbnMmJnQucG9zaXRpb25zLmxlbmd0aD4xJiYodC5zY2FsZVJhdGlvPVt0LnNjYWxlWzBdKnQudmlld3BvcnQud2lkdGgsdC5zY2FsZVsxXSp0LnZpZXdwb3J0LmhlaWdodF0scih0KSx0LmFmdGVyJiZ0LmFmdGVyKHQpKX1mdW5jdGlvbiBrKHQpe2lmKHQpe251bGwhPXQubGVuZ3RoP1wibnVtYmVyXCI9PXR5cGVvZiB0WzBdJiYodD1be3Bvc2l0aW9uczp0fV0pOkFycmF5LmlzQXJyYXkodCl8fCh0PVt0XSk7dmFyIGU9MCxyPTA7aWYoYi5ncm91cHM9eD10Lm1hcChmdW5jdGlvbih0LGMpe3ZhciB1PXhbY107cmV0dXJuIHQ/KFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dD17YWZ0ZXI6dH06XCJudW1iZXJcIj09dHlwZW9mIHRbMF0mJih0PXtwb3NpdGlvbnM6dH0pLHQ9byh0LHtjb2xvcjpcImNvbG9yIGNvbG9ycyBmaWxsXCIsY2FwU2l6ZTpcImNhcFNpemUgY2FwIGNhcHNpemUgY2FwLXNpemVcIixsaW5lV2lkdGg6XCJsaW5lV2lkdGggbGluZS13aWR0aCB3aWR0aCBsaW5lIHRoaWNrbmVzc1wiLG9wYWNpdHk6XCJvcGFjaXR5IGFscGhhXCIscmFuZ2U6XCJyYW5nZSBkYXRhQm94XCIsdmlld3BvcnQ6XCJ2aWV3cG9ydCB2aWV3Qm94XCIsZXJyb3JzOlwiZXJyb3JzIGVycm9yXCIscG9zaXRpb25zOlwicG9zaXRpb25zIHBvc2l0aW9uIGRhdGEgcG9pbnRzXCJ9KSx1fHwoeFtjXT11PXtpZDpjLHNjYWxlOm51bGwsdHJhbnNsYXRlOm51bGwsc2NhbGVGcmFjdDpudWxsLHRyYW5zbGF0ZUZyYWN0Om51bGwsZHJhdzohMH0sdD1zKHt9LHksdCkpLGEodSx0LFt7bGluZVdpZHRoOmZ1bmN0aW9uKHQpe3JldHVybi41Kit0fSxjYXBTaXplOmZ1bmN0aW9uKHQpe3JldHVybi41Kit0fSxvcGFjaXR5OnBhcnNlRmxvYXQsZXJyb3JzOmZ1bmN0aW9uKHQpe3JldHVybiB0PWwodCkscis9dC5sZW5ndGgsdH0scG9zaXRpb25zOmZ1bmN0aW9uKHQscil7cmV0dXJuIHQ9bCh0LFwiZmxvYXQ2NFwiKSxyLmNvdW50PU1hdGguZmxvb3IodC5sZW5ndGgvMiksci5ib3VuZHM9bih0LDIpLHIub2Zmc2V0PWUsZSs9ci5jb3VudCx0fX0se2NvbG9yOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5jb3VudDtpZih0fHwodD1cInRyYW5zcGFyZW50XCIpLCFBcnJheS5pc0FycmF5KHQpfHxcIm51bWJlclwiPT10eXBlb2YgdFswXSl7dmFyIG49dDt0PUFycmF5KHIpO2Zvcih2YXIgYT0wO2E8cjthKyspdFthXT1ufWlmKHQubGVuZ3RoPHIpdGhyb3cgRXJyb3IoXCJOb3QgZW5vdWdoIGNvbG9yc1wiKTtmb3IodmFyIG89bmV3IFVpbnQ4QXJyYXkoNCpyKSxzPTA7czxyO3MrKyl7dmFyIGw9aSh0W3NdLFwidWludDhcIik7by5zZXQobCw0KnMpfXJldHVybiBvfSxyYW5nZTpmdW5jdGlvbih0LGUscil7dmFyIG49ZS5ib3VuZHM7cmV0dXJuIHR8fCh0PW4pLGUuc2NhbGU9WzEvKHRbMl0tdFswXSksMS8odFszXS10WzFdKV0sZS50cmFuc2xhdGU9Wy10WzBdLC10WzFdXSxlLnNjYWxlRnJhY3Q9aChlLnNjYWxlKSxlLnRyYW5zbGF0ZUZyYWN0PWgoZS50cmFuc2xhdGUpLHR9LHZpZXdwb3J0OmZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBBcnJheS5pc0FycmF5KHQpP2U9e3g6dFswXSx5OnRbMV0sd2lkdGg6dFsyXS10WzBdLGhlaWdodDp0WzNdLXRbMV19OnQ/KGU9e3g6dC54fHx0LmxlZnR8fDAseTp0Lnl8fHQudG9wfHwwfSx0LnJpZ2h0P2Uud2lkdGg9dC5yaWdodC1lLng6ZS53aWR0aD10Lnd8fHQud2lkdGh8fDAsdC5ib3R0b20/ZS5oZWlnaHQ9dC5ib3R0b20tZS55OmUuaGVpZ2h0PXQuaHx8dC5oZWlnaHR8fDApOmU9e3g6MCx5OjAsd2lkdGg6bS5kcmF3aW5nQnVmZmVyV2lkdGgsaGVpZ2h0Om0uZHJhd2luZ0J1ZmZlckhlaWdodH0sZX19XSksdSk6dX0pLGV8fHIpe3ZhciBmPXgucmVkdWNlKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdCsoZT9lLmNvdW50OjApfSwwKSx2PW5ldyBGbG9hdDY0QXJyYXkoMipmKSxfPW5ldyBVaW50OEFycmF5KDQqZiksdz1uZXcgRmxvYXQzMkFycmF5KDQqZik7eC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7aWYodCl7dmFyIHI9dC5wb3NpdGlvbnMsbj10LmNvdW50LGk9dC5vZmZzZXQsYT10LmNvbG9yLG89dC5lcnJvcnM7biYmKF8uc2V0KGEsNCppKSx3LnNldChvLDQqaSksdi5zZXQociwyKmkpKX19KSxjKHUodikpLHAoaCh2KSksZChfKSxnKHcpfX19ZnVuY3Rpb24gQSgpe2MuZGVzdHJveSgpLHAuZGVzdHJveSgpLGQuZGVzdHJveSgpLGcuZGVzdHJveSgpLHYuZGVzdHJveSgpfX07dmFyIGY9W1sxLDAsMCwxLDAsMF0sWzEsMCwwLC0xLDAsMF0sWy0xLDAsMCwtMSwwLDBdLFstMSwwLDAsLTEsMCwwXSxbLTEsMCwwLDEsMCwwXSxbMSwwLDAsMSwwLDBdLFsxLDAsLTEsMCwwLDFdLFsxLDAsLTEsMCwwLC0xXSxbMSwwLDEsMCwwLC0xXSxbMSwwLDEsMCwwLC0xXSxbMSwwLDEsMCwwLDFdLFsxLDAsLTEsMCwwLDFdLFstMSwwLC0xLDAsMCwxXSxbLTEsMCwtMSwwLDAsLTFdLFstMSwwLDEsMCwwLC0xXSxbLTEsMCwxLDAsMCwtMV0sWy0xLDAsMSwwLDAsMV0sWy0xLDAsLTEsMCwwLDFdLFswLDEsMSwwLDAsMF0sWzAsMSwtMSwwLDAsMF0sWzAsLTEsLTEsMCwwLDBdLFswLC0xLC0xLDAsMCwwXSxbMCwxLDEsMCwwLDBdLFswLC0xLDEsMCwwLDBdLFswLDEsMCwtMSwxLDBdLFswLDEsMCwtMSwtMSwwXSxbMCwxLDAsMSwtMSwwXSxbMCwxLDAsMSwxLDBdLFswLDEsMCwtMSwxLDBdLFswLDEsMCwxLC0xLDBdLFswLC0xLDAsLTEsMSwwXSxbMCwtMSwwLC0xLC0xLDBdLFswLC0xLDAsMSwtMSwwXSxbMCwtMSwwLDEsMSwwXSxbMCwtMSwwLC0xLDEsMF0sWzAsLTEsMCwxLC0xLDBdXX0se1wiYXJyYXktYm91bmRzXCI6NTYsXCJjb2xvci1ub3JtYWxpemVcIjoxMTEsXCJmbGF0dGVuLXZlcnRleC1kYXRhXCI6MjI0LFwib2JqZWN0LWFzc2lnblwiOjQ0NyxcInBpY2stYnktYWxpYXNcIjo0NTgsXCJ0by1mbG9hdDMyXCI6NTIzLFwidXBkYXRlLWRpZmZcIjo1MzR9XSw0ODQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiY29sb3Itbm9ybWFsaXplXCIpLGk9dChcImFycmF5LWJvdW5kc1wiKSxhPXQoXCJvYmplY3QtYXNzaWduXCIpLG89dChcImdsc2xpZnlcIikscz10KFwicGljay1ieS1hbGlhc1wiKSxsPXQoXCJmbGF0dGVuLXZlcnRleC1kYXRhXCIpLGM9dChcImVhcmN1dFwiKSx1PXQoXCJhcnJheS1ub3JtYWxpemVcIiksaD10KFwidG8tZmxvYXQzMlwiKSxmPWguZmxvYXQzMixwPWguZnJhY3QzMixkPXQoXCJlczYtd2Vhay1tYXBcIiksZz10KFwicGFyc2UtcmVjdFwiKTtmdW5jdGlvbiB2KHQsZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgdikpcmV0dXJuIG5ldyB2KHQsZSk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdD8oZXx8KGU9e30pLGUucmVnbD10KTplPXQsZS5sZW5ndGgmJihlLnBvc2l0aW9ucz1lKSwhKHQ9ZS5yZWdsKS5oYXNFeHRlbnNpb24oXCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzXCIpKXRocm93IEVycm9yKFwicmVnbC1lcnJvcjJkOiBgQU5HTEVfaW5zdGFuY2VkX2FycmF5c2AgZXh0ZW5zaW9uIHNob3VsZCBiZSBlbmFibGVkXCIpO3RoaXMuZ2w9dC5fZ2wsdGhpcy5yZWdsPXQsdGhpcy5wYXNzZXM9W10sdGhpcy5zaGFkZXJzPXYuc2hhZGVycy5oYXModCk/di5zaGFkZXJzLmdldCh0KTp2LnNoYWRlcnMuc2V0KHQsdi5jcmVhdGVTaGFkZXJzKHQpKS5nZXQodCksdGhpcy51cGRhdGUoZSl9ZS5leHBvcnRzPXYsdi5kYXNoTXVsdD0yLHYubWF4UGF0dGVybkxlbmd0aD0yNTYsdi5wcmVjaXNpb25UaHJlc2hvbGQ9M2U2LHYubWF4UG9pbnRzPTFlNCx2Lm1heExpbmVzPTIwNDgsdi5zaGFkZXJzPW5ldyBkLHYuY3JlYXRlU2hhZGVycz1mdW5jdGlvbih0KXt2YXIgZSxyPXQuYnVmZmVyKHt1c2FnZTpcInN0YXRpY1wiLHR5cGU6XCJmbG9hdFwiLGRhdGE6WzAsMSwwLDAsMSwxLDEsMF19KSxuPXtwcmltaXRpdmU6XCJ0cmlhbmdsZSBzdHJpcFwiLGluc3RhbmNlczp0LnByb3AoXCJjb3VudFwiKSxjb3VudDo0LG9mZnNldDowLHVuaWZvcm1zOnttaXRlck1vZGU6ZnVuY3Rpb24odCxlKXtyZXR1cm5cInJvdW5kXCI9PT1lLmpvaW4/MjoxfSxtaXRlckxpbWl0OnQucHJvcChcIm1pdGVyTGltaXRcIiksc2NhbGU6dC5wcm9wKFwic2NhbGVcIiksc2NhbGVGcmFjdDp0LnByb3AoXCJzY2FsZUZyYWN0XCIpLHRyYW5zbGF0ZUZyYWN0OnQucHJvcChcInRyYW5zbGF0ZUZyYWN0XCIpLHRyYW5zbGF0ZTp0LnByb3AoXCJ0cmFuc2xhdGVcIiksdGhpY2tuZXNzOnQucHJvcChcInRoaWNrbmVzc1wiKSxkYXNoUGF0dGVybjp0LnByb3AoXCJkYXNoVGV4dHVyZVwiKSxvcGFjaXR5OnQucHJvcChcIm9wYWNpdHlcIikscGl4ZWxSYXRpbzp0LmNvbnRleHQoXCJwaXhlbFJhdGlvXCIpLGlkOnQucHJvcChcImlkXCIpLGRhc2hTaXplOnQucHJvcChcImRhc2hMZW5ndGhcIiksdmlld3BvcnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm5bZS52aWV3cG9ydC54LGUudmlld3BvcnQueSx0LnZpZXdwb3J0V2lkdGgsdC52aWV3cG9ydEhlaWdodF19LGRlcHRoOnQucHJvcChcImRlcHRoXCIpfSxibGVuZDp7ZW5hYmxlOiEwLGNvbG9yOlswLDAsMCwwXSxlcXVhdGlvbjp7cmdiOlwiYWRkXCIsYWxwaGE6XCJhZGRcIn0sZnVuYzp7c3JjUkdCOlwic3JjIGFscGhhXCIsZHN0UkdCOlwib25lIG1pbnVzIHNyYyBhbHBoYVwiLHNyY0FscGhhOlwib25lIG1pbnVzIGRzdCBhbHBoYVwiLGRzdEFscGhhOlwib25lXCJ9fSxkZXB0aDp7ZW5hYmxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIWUub3ZlcmxheX19LHN0ZW5jaWw6e2VuYWJsZTohMX0sc2Npc3Nvcjp7ZW5hYmxlOiEwLGJveDp0LnByb3AoXCJ2aWV3cG9ydFwiKX0sdmlld3BvcnQ6dC5wcm9wKFwidmlld3BvcnRcIil9LGk9dChhKHt2ZXJ0Om8oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzIgYUNvb3JkLCBiQ29vcmQsIGFDb29yZEZyYWN0LCBiQ29vcmRGcmFjdDtcXG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcXG5hdHRyaWJ1dGUgZmxvYXQgbGluZUVuZCwgbGluZVRvcDtcXG5cXG51bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3Q7XFxudW5pZm9ybSBmbG9hdCB0aGlja25lc3MsIHBpeGVsUmF0aW8sIGlkLCBkZXB0aDtcXG51bmlmb3JtIHZlYzQgdmlld3BvcnQ7XFxuXFxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdGFuZ2VudDtcXG5cXG52ZWMyIHByb2plY3QodmVjMiBwb3NpdGlvbiwgdmVjMiBwb3NpdGlvbkZyYWN0LCB2ZWMyIHNjYWxlLCB2ZWMyIHNjYWxlRnJhY3QsIHZlYzIgdHJhbnNsYXRlLCB2ZWMyIHRyYW5zbGF0ZUZyYWN0KSB7XFxuXFx0Ly8gdGhlIG9yZGVyIGlzIGltcG9ydGFudFxcblxcdHJldHVybiBwb3NpdGlvbiAqIHNjYWxlICsgdHJhbnNsYXRlXFxuICAgICAgICsgcG9zaXRpb25GcmFjdCAqIHNjYWxlICsgdHJhbnNsYXRlRnJhY3RcXG4gICAgICAgKyBwb3NpdGlvbiAqIHNjYWxlRnJhY3RcXG4gICAgICAgKyBwb3NpdGlvbkZyYWN0ICogc2NhbGVGcmFjdDtcXG59XFxuXFxudm9pZCBtYWluKCkge1xcblxcdGZsb2F0IGxpbmVTdGFydCA9IDEuIC0gbGluZUVuZDtcXG5cXHRmbG9hdCBsaW5lT2Zmc2V0ID0gbGluZVRvcCAqIDIuIC0gMS47XFxuXFxuXFx0dmVjMiBkaWZmID0gKGJDb29yZCArIGJDb29yZEZyYWN0IC0gYUNvb3JkIC0gYUNvb3JkRnJhY3QpO1xcblxcdHRhbmdlbnQgPSBub3JtYWxpemUoZGlmZiAqIHNjYWxlICogdmlld3BvcnQuencpO1xcblxcdHZlYzIgbm9ybWFsID0gdmVjMigtdGFuZ2VudC55LCB0YW5nZW50LngpO1xcblxcblxcdHZlYzIgcG9zaXRpb24gPSBwcm9qZWN0KGFDb29yZCwgYUNvb3JkRnJhY3QsIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0KSAqIGxpbmVTdGFydFxcblxcdFxcdCsgcHJvamVjdChiQ29vcmQsIGJDb29yZEZyYWN0LCBzY2FsZSwgc2NhbGVGcmFjdCwgdHJhbnNsYXRlLCB0cmFuc2xhdGVGcmFjdCkgKiBsaW5lRW5kXFxuXFxuXFx0XFx0KyB0aGlja25lc3MgKiBub3JtYWwgKiAuNSAqIGxpbmVPZmZzZXQgLyB2aWV3cG9ydC56dztcXG5cXG5cXHRnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24gKiAyLjAgLSAxLjAsIGRlcHRoLCAxKTtcXG5cXG5cXHRmcmFnQ29sb3IgPSBjb2xvciAvIDI1NS47XFxufVxcblwiXSksZnJhZzpvKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnVuaWZvcm0gc2FtcGxlcjJEIGRhc2hQYXR0ZXJuO1xcblxcbnVuaWZvcm0gZmxvYXQgZGFzaFNpemUsIHBpeGVsUmF0aW8sIHRoaWNrbmVzcywgb3BhY2l0eSwgaWQ7XFxuXFxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdGFuZ2VudDtcXG5cXG52b2lkIG1haW4oKSB7XFxuXFx0ZmxvYXQgYWxwaGEgPSAxLjtcXG5cXG5cXHRmbG9hdCB0ID0gZnJhY3QoZG90KHRhbmdlbnQsIGdsX0ZyYWdDb29yZC54eSkgLyBkYXNoU2l6ZSkgKiAuNSArIC4yNTtcXG5cXHRmbG9hdCBkYXNoID0gdGV4dHVyZTJEKGRhc2hQYXR0ZXJuLCB2ZWMyKHQsIC41KSkucjtcXG5cXG5cXHRnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XFxuXFx0Z2xfRnJhZ0NvbG9yLmEgKj0gYWxwaGEgKiBvcGFjaXR5ICogZGFzaDtcXG59XFxuXCJdKSxhdHRyaWJ1dGVzOntsaW5lRW5kOntidWZmZXI6cixkaXZpc29yOjAsc3RyaWRlOjgsb2Zmc2V0OjB9LGxpbmVUb3A6e2J1ZmZlcjpyLGRpdmlzb3I6MCxzdHJpZGU6OCxvZmZzZXQ6NH0sYUNvb3JkOntidWZmZXI6dC5wcm9wKFwicG9zaXRpb25CdWZmZXJcIiksc3RyaWRlOjgsb2Zmc2V0OjgsZGl2aXNvcjoxfSxiQ29vcmQ6e2J1ZmZlcjp0LnByb3AoXCJwb3NpdGlvbkJ1ZmZlclwiKSxzdHJpZGU6OCxvZmZzZXQ6MTYsZGl2aXNvcjoxfSxhQ29vcmRGcmFjdDp7YnVmZmVyOnQucHJvcChcInBvc2l0aW9uRnJhY3RCdWZmZXJcIiksc3RyaWRlOjgsb2Zmc2V0OjgsZGl2aXNvcjoxfSxiQ29vcmRGcmFjdDp7YnVmZmVyOnQucHJvcChcInBvc2l0aW9uRnJhY3RCdWZmZXJcIiksc3RyaWRlOjgsb2Zmc2V0OjE2LGRpdmlzb3I6MX0sY29sb3I6e2J1ZmZlcjp0LnByb3AoXCJjb2xvckJ1ZmZlclwiKSxzdHJpZGU6NCxvZmZzZXQ6MCxkaXZpc29yOjF9fX0sbikpO3RyeXtlPXQoYSh7Y3VsbDp7ZW5hYmxlOiEwLGZhY2U6XCJiYWNrXCJ9LHZlcnQ6byhbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhQ29vcmQsIGJDb29yZCwgbmV4dENvb3JkLCBwcmV2Q29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yLCBiQ29sb3I7XFxuYXR0cmlidXRlIGZsb2F0IGxpbmVFbmQsIGxpbmVUb3A7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlLCB0cmFuc2xhdGU7XFxudW5pZm9ybSBmbG9hdCB0aGlja25lc3MsIHBpeGVsUmF0aW8sIGlkLCBkZXB0aDtcXG51bmlmb3JtIHZlYzQgdmlld3BvcnQ7XFxudW5pZm9ybSBmbG9hdCBtaXRlckxpbWl0LCBtaXRlck1vZGU7XFxuXFxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcXG52YXJ5aW5nIHZlYzQgc3RhcnRDdXRvZmYsIGVuZEN1dG9mZjtcXG52YXJ5aW5nIHZlYzIgdGFuZ2VudDtcXG52YXJ5aW5nIHZlYzIgc3RhcnRDb29yZCwgZW5kQ29vcmQ7XFxudmFyeWluZyBmbG9hdCBlbmFibGVTdGFydE1pdGVyLCBlbmFibGVFbmRNaXRlcjtcXG5cXG5jb25zdCBmbG9hdCBSRVZFUlNFX1RIUkVTSE9MRCA9IC0uODc1O1xcbmNvbnN0IGZsb2F0IE1JTl9ESUZGID0gMWUtNjtcXG5cXG4vLyBUT0RPOiBwb3NzaWJsZSBvcHRpbWl6YXRpb25zOiBhdm9pZCBvdmVyY2FsY3VsYXRpbmcgYWxsIGZvciB2ZXJ0aWNlcyBhbmQgY2FsYyBqdXN0IG9uZSBpbnN0ZWFkXFxuLy8gVE9ETzogcHJlY2FsY3VsYXRlIGRvdCBwcm9kdWN0cywgbm9ybWFsaXplIHRoaW5ncyBiZWZvcmVoZWFkIGV0Yy5cXG4vLyBUT0RPOiByZWZhY3RvciB0byByZWN0YW5ndWxhciBhbGdvcml0aG1cXG5cXG5mbG9hdCBkaXN0VG9MaW5lKHZlYzIgcCwgdmVjMiBhLCB2ZWMyIGIpIHtcXG5cXHR2ZWMyIGRpZmYgPSBiIC0gYTtcXG5cXHR2ZWMyIHBlcnAgPSBub3JtYWxpemUodmVjMigtZGlmZi55LCBkaWZmLngpKTtcXG5cXHRyZXR1cm4gZG90KHAgLSBhLCBwZXJwKTtcXG59XFxuXFxuYm9vbCBpc05hTiggZmxvYXQgdmFsICl7XFxuICByZXR1cm4gKCB2YWwgPCAwLjAgfHwgMC4wIDwgdmFsIHx8IHZhbCA9PSAwLjAgKSA/IGZhbHNlIDogdHJ1ZTtcXG59XFxuXFxudm9pZCBtYWluKCkge1xcblxcdHZlYzIgYUNvb3JkID0gYUNvb3JkLCBiQ29vcmQgPSBiQ29vcmQsIHByZXZDb29yZCA9IHByZXZDb29yZCwgbmV4dENvb3JkID0gbmV4dENvb3JkO1xcblxcbiAgdmVjMiBhZGp1c3RlZFNjYWxlO1xcbiAgYWRqdXN0ZWRTY2FsZS54ID0gKGFicyhzY2FsZS54KSA8IE1JTl9ESUZGKSA/IE1JTl9ESUZGIDogc2NhbGUueDtcXG4gIGFkanVzdGVkU2NhbGUueSA9IChhYnMoc2NhbGUueSkgPCBNSU5fRElGRikgPyBNSU5fRElGRiA6IHNjYWxlLnk7XFxuXFxuICB2ZWMyIHNjYWxlUmF0aW8gPSBhZGp1c3RlZFNjYWxlICogdmlld3BvcnQuenc7XFxuXFx0dmVjMiBub3JtYWxXaWR0aCA9IHRoaWNrbmVzcyAvIHNjYWxlUmF0aW87XFxuXFxuXFx0ZmxvYXQgbGluZVN0YXJ0ID0gMS4gLSBsaW5lRW5kO1xcblxcdGZsb2F0IGxpbmVCb3QgPSAxLiAtIGxpbmVUb3A7XFxuXFxuXFx0ZnJhZ0NvbG9yID0gKGxpbmVTdGFydCAqIGFDb2xvciArIGxpbmVFbmQgKiBiQ29sb3IpIC8gMjU1LjtcXG5cXG5cXHRpZiAoaXNOYU4oYUNvb3JkLngpIHx8IGlzTmFOKGFDb29yZC55KSB8fCBpc05hTihiQ29vcmQueCkgfHwgaXNOYU4oYkNvb3JkLnkpKSByZXR1cm47XFxuXFxuXFx0aWYgKGFDb29yZCA9PSBwcmV2Q29vcmQpIHByZXZDb29yZCA9IGFDb29yZCArIG5vcm1hbGl6ZShiQ29vcmQgLSBhQ29vcmQpO1xcblxcdGlmIChiQ29vcmQgPT0gbmV4dENvb3JkKSBuZXh0Q29vcmQgPSBiQ29vcmQgLSBub3JtYWxpemUoYkNvb3JkIC0gYUNvb3JkKTtcXG5cXG5cXHR2ZWMyIHByZXZEaWZmID0gYUNvb3JkIC0gcHJldkNvb3JkO1xcblxcdHZlYzIgY3VyckRpZmYgPSBiQ29vcmQgLSBhQ29vcmQ7XFxuXFx0dmVjMiBuZXh0RGlmZiA9IG5leHRDb29yZCAtIGJDb29yZDtcXG5cXG5cXHR2ZWMyIHByZXZUYW5nZW50ID0gbm9ybWFsaXplKHByZXZEaWZmICogc2NhbGVSYXRpbyk7XFxuXFx0dmVjMiBjdXJyVGFuZ2VudCA9IG5vcm1hbGl6ZShjdXJyRGlmZiAqIHNjYWxlUmF0aW8pO1xcblxcdHZlYzIgbmV4dFRhbmdlbnQgPSBub3JtYWxpemUobmV4dERpZmYgKiBzY2FsZVJhdGlvKTtcXG5cXG5cXHR2ZWMyIHByZXZOb3JtYWwgPSB2ZWMyKC1wcmV2VGFuZ2VudC55LCBwcmV2VGFuZ2VudC54KTtcXG5cXHR2ZWMyIGN1cnJOb3JtYWwgPSB2ZWMyKC1jdXJyVGFuZ2VudC55LCBjdXJyVGFuZ2VudC54KTtcXG5cXHR2ZWMyIG5leHROb3JtYWwgPSB2ZWMyKC1uZXh0VGFuZ2VudC55LCBuZXh0VGFuZ2VudC54KTtcXG5cXG5cXHR2ZWMyIHN0YXJ0Sm9pbkRpcmVjdGlvbiA9IG5vcm1hbGl6ZShwcmV2VGFuZ2VudCAtIGN1cnJUYW5nZW50KTtcXG5cXHR2ZWMyIGVuZEpvaW5EaXJlY3Rpb24gPSBub3JtYWxpemUoY3VyclRhbmdlbnQgLSBuZXh0VGFuZ2VudCk7XFxuXFxuXFx0Ly8gY29sbGFwc2VkL3VuaWRpcmVjdGlvbmFsIHNlZ21lbnQgY2FzZXNcXG5cXHQvLyBGSVhNRTogdGhlcmUgc2hvdWxkIGJlIG1vcmUgZWxlZ2FudCBzb2x1dGlvblxcblxcdHZlYzIgcHJldlRhbkRpZmYgPSBhYnMocHJldlRhbmdlbnQgLSBjdXJyVGFuZ2VudCk7XFxuXFx0dmVjMiBuZXh0VGFuRGlmZiA9IGFicyhuZXh0VGFuZ2VudCAtIGN1cnJUYW5nZW50KTtcXG5cXHRpZiAobWF4KHByZXZUYW5EaWZmLngsIHByZXZUYW5EaWZmLnkpIDwgTUlOX0RJRkYpIHtcXG5cXHRcXHRzdGFydEpvaW5EaXJlY3Rpb24gPSBjdXJyTm9ybWFsO1xcblxcdH1cXG5cXHRpZiAobWF4KG5leHRUYW5EaWZmLngsIG5leHRUYW5EaWZmLnkpIDwgTUlOX0RJRkYpIHtcXG5cXHRcXHRlbmRKb2luRGlyZWN0aW9uID0gY3Vyck5vcm1hbDtcXG5cXHR9XFxuXFx0aWYgKGFDb29yZCA9PSBiQ29vcmQpIHtcXG5cXHRcXHRlbmRKb2luRGlyZWN0aW9uID0gc3RhcnRKb2luRGlyZWN0aW9uO1xcblxcdFxcdGN1cnJOb3JtYWwgPSBwcmV2Tm9ybWFsO1xcblxcdFxcdGN1cnJUYW5nZW50ID0gcHJldlRhbmdlbnQ7XFxuXFx0fVxcblxcblxcdHRhbmdlbnQgPSBjdXJyVGFuZ2VudDtcXG5cXG5cXHQvL2NhbGN1bGF0ZSBqb2luIHNoaWZ0cyByZWxhdGl2ZSB0byBub3JtYWxzXFxuXFx0ZmxvYXQgc3RhcnRKb2luU2hpZnQgPSBkb3QoY3Vyck5vcm1hbCwgc3RhcnRKb2luRGlyZWN0aW9uKTtcXG5cXHRmbG9hdCBlbmRKb2luU2hpZnQgPSBkb3QoY3Vyck5vcm1hbCwgZW5kSm9pbkRpcmVjdGlvbik7XFxuXFxuXFx0ZmxvYXQgc3RhcnRNaXRlclJhdGlvID0gYWJzKDEuIC8gc3RhcnRKb2luU2hpZnQpO1xcblxcdGZsb2F0IGVuZE1pdGVyUmF0aW8gPSBhYnMoMS4gLyBlbmRKb2luU2hpZnQpO1xcblxcblxcdHZlYzIgc3RhcnRKb2luID0gc3RhcnRKb2luRGlyZWN0aW9uICogc3RhcnRNaXRlclJhdGlvO1xcblxcdHZlYzIgZW5kSm9pbiA9IGVuZEpvaW5EaXJlY3Rpb24gKiBlbmRNaXRlclJhdGlvO1xcblxcblxcdHZlYzIgc3RhcnRUb3BKb2luLCBzdGFydEJvdEpvaW4sIGVuZFRvcEpvaW4sIGVuZEJvdEpvaW47XFxuXFx0c3RhcnRUb3BKb2luID0gc2lnbihzdGFydEpvaW5TaGlmdCkgKiBzdGFydEpvaW4gKiAuNTtcXG5cXHRzdGFydEJvdEpvaW4gPSAtc3RhcnRUb3BKb2luO1xcblxcblxcdGVuZFRvcEpvaW4gPSBzaWduKGVuZEpvaW5TaGlmdCkgKiBlbmRKb2luICogLjU7XFxuXFx0ZW5kQm90Sm9pbiA9IC1lbmRUb3BKb2luO1xcblxcblxcdHZlYzIgYVRvcENvb3JkID0gYUNvb3JkICsgbm9ybWFsV2lkdGggKiBzdGFydFRvcEpvaW47XFxuXFx0dmVjMiBiVG9wQ29vcmQgPSBiQ29vcmQgKyBub3JtYWxXaWR0aCAqIGVuZFRvcEpvaW47XFxuXFx0dmVjMiBhQm90Q29vcmQgPSBhQ29vcmQgKyBub3JtYWxXaWR0aCAqIHN0YXJ0Qm90Sm9pbjtcXG5cXHR2ZWMyIGJCb3RDb29yZCA9IGJDb29yZCArIG5vcm1hbFdpZHRoICogZW5kQm90Sm9pbjtcXG5cXG5cXHQvL21pdGVyIGFudGktY2xpcHBpbmdcXG5cXHRmbG9hdCBiYUNsaXBwaW5nID0gZGlzdFRvTGluZShiQ29vcmQsIGFDb29yZCwgYUJvdENvb3JkKSAvIGRvdChub3JtYWxpemUobm9ybWFsV2lkdGggKiBlbmRCb3RKb2luKSwgbm9ybWFsaXplKG5vcm1hbFdpZHRoLnl4ICogdmVjMigtc3RhcnRCb3RKb2luLnksIHN0YXJ0Qm90Sm9pbi54KSkpO1xcblxcdGZsb2F0IGFiQ2xpcHBpbmcgPSBkaXN0VG9MaW5lKGFDb29yZCwgYkNvb3JkLCBiVG9wQ29vcmQpIC8gZG90KG5vcm1hbGl6ZShub3JtYWxXaWR0aCAqIHN0YXJ0Qm90Sm9pbiksIG5vcm1hbGl6ZShub3JtYWxXaWR0aC55eCAqIHZlYzIoLWVuZEJvdEpvaW4ueSwgZW5kQm90Sm9pbi54KSkpO1xcblxcblxcdC8vcHJldmVudCBjbG9zZSB0byByZXZlcnNlIGRpcmVjdGlvbiBzd2l0Y2hcXG5cXHRib29sIHByZXZSZXZlcnNlID0gZG90KGN1cnJUYW5nZW50LCBwcmV2VGFuZ2VudCkgPD0gUkVWRVJTRV9USFJFU0hPTEQgJiYgYWJzKGRvdChjdXJyVGFuZ2VudCwgcHJldk5vcm1hbCkpICogbWluKGxlbmd0aChwcmV2RGlmZiksIGxlbmd0aChjdXJyRGlmZikpIDwgIGxlbmd0aChub3JtYWxXaWR0aCAqIGN1cnJOb3JtYWwpO1xcblxcdGJvb2wgbmV4dFJldmVyc2UgPSBkb3QoY3VyclRhbmdlbnQsIG5leHRUYW5nZW50KSA8PSBSRVZFUlNFX1RIUkVTSE9MRCAmJiBhYnMoZG90KGN1cnJUYW5nZW50LCBuZXh0Tm9ybWFsKSkgKiBtaW4obGVuZ3RoKG5leHREaWZmKSwgbGVuZ3RoKGN1cnJEaWZmKSkgPCAgbGVuZ3RoKG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCk7XFxuXFxuXFx0aWYgKHByZXZSZXZlcnNlKSB7XFxuXFx0XFx0Ly9tYWtlIGpvaW4gcmVjdGFuZ3VsYXJcXG5cXHRcXHR2ZWMyIG1pdGVyU2hpZnQgPSBub3JtYWxXaWR0aCAqIHN0YXJ0Sm9pbkRpcmVjdGlvbiAqIG1pdGVyTGltaXQgKiAuNTtcXG5cXHRcXHRmbG9hdCBub3JtYWxBZGp1c3QgPSAxLiAtIG1pbihtaXRlckxpbWl0IC8gc3RhcnRNaXRlclJhdGlvLCAxLik7XFxuXFx0XFx0YUJvdENvb3JkID0gYUNvb3JkICsgbWl0ZXJTaGlmdCAtIG5vcm1hbEFkanVzdCAqIG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCAqIC41O1xcblxcdFxcdGFUb3BDb29yZCA9IGFDb29yZCArIG1pdGVyU2hpZnQgKyBub3JtYWxBZGp1c3QgKiBub3JtYWxXaWR0aCAqIGN1cnJOb3JtYWwgKiAuNTtcXG5cXHR9XFxuXFx0ZWxzZSBpZiAoIW5leHRSZXZlcnNlICYmIGJhQ2xpcHBpbmcgPiAwLiAmJiBiYUNsaXBwaW5nIDwgbGVuZ3RoKG5vcm1hbFdpZHRoICogZW5kQm90Sm9pbikpIHtcXG5cXHRcXHQvL2hhbmRsZSBtaXRlciBjbGlwcGluZ1xcblxcdFxcdGJUb3BDb29yZCAtPSBub3JtYWxXaWR0aCAqIGVuZFRvcEpvaW47XFxuXFx0XFx0YlRvcENvb3JkICs9IG5vcm1hbGl6ZShlbmRUb3BKb2luICogbm9ybWFsV2lkdGgpICogYmFDbGlwcGluZztcXG5cXHR9XFxuXFxuXFx0aWYgKG5leHRSZXZlcnNlKSB7XFxuXFx0XFx0Ly9tYWtlIGpvaW4gcmVjdGFuZ3VsYXJcXG5cXHRcXHR2ZWMyIG1pdGVyU2hpZnQgPSBub3JtYWxXaWR0aCAqIGVuZEpvaW5EaXJlY3Rpb24gKiBtaXRlckxpbWl0ICogLjU7XFxuXFx0XFx0ZmxvYXQgbm9ybWFsQWRqdXN0ID0gMS4gLSBtaW4obWl0ZXJMaW1pdCAvIGVuZE1pdGVyUmF0aW8sIDEuKTtcXG5cXHRcXHRiQm90Q29vcmQgPSBiQ29vcmQgKyBtaXRlclNoaWZ0IC0gbm9ybWFsQWRqdXN0ICogbm9ybWFsV2lkdGggKiBjdXJyTm9ybWFsICogLjU7XFxuXFx0XFx0YlRvcENvb3JkID0gYkNvb3JkICsgbWl0ZXJTaGlmdCArIG5vcm1hbEFkanVzdCAqIG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCAqIC41O1xcblxcdH1cXG5cXHRlbHNlIGlmICghcHJldlJldmVyc2UgJiYgYWJDbGlwcGluZyA+IDAuICYmIGFiQ2xpcHBpbmcgPCBsZW5ndGgobm9ybWFsV2lkdGggKiBzdGFydEJvdEpvaW4pKSB7XFxuXFx0XFx0Ly9oYW5kbGUgbWl0ZXIgY2xpcHBpbmdcXG5cXHRcXHRhQm90Q29vcmQgLT0gbm9ybWFsV2lkdGggKiBzdGFydEJvdEpvaW47XFxuXFx0XFx0YUJvdENvb3JkICs9IG5vcm1hbGl6ZShzdGFydEJvdEpvaW4gKiBub3JtYWxXaWR0aCkgKiBhYkNsaXBwaW5nO1xcblxcdH1cXG5cXG5cXHR2ZWMyIGFUb3BQb3NpdGlvbiA9IChhVG9wQ29vcmQpICogYWRqdXN0ZWRTY2FsZSArIHRyYW5zbGF0ZTtcXG5cXHR2ZWMyIGFCb3RQb3NpdGlvbiA9IChhQm90Q29vcmQpICogYWRqdXN0ZWRTY2FsZSArIHRyYW5zbGF0ZTtcXG5cXG5cXHR2ZWMyIGJUb3BQb3NpdGlvbiA9IChiVG9wQ29vcmQpICogYWRqdXN0ZWRTY2FsZSArIHRyYW5zbGF0ZTtcXG5cXHR2ZWMyIGJCb3RQb3NpdGlvbiA9IChiQm90Q29vcmQpICogYWRqdXN0ZWRTY2FsZSArIHRyYW5zbGF0ZTtcXG5cXG5cXHQvL3Bvc2l0aW9uIGlzIG5vcm1hbGl6ZWQgMC4uMSBjb29yZCBvbiB0aGUgc2NyZWVuXFxuXFx0dmVjMiBwb3NpdGlvbiA9IChhVG9wUG9zaXRpb24gKiBsaW5lVG9wICsgYUJvdFBvc2l0aW9uICogbGluZUJvdCkgKiBsaW5lU3RhcnQgKyAoYlRvcFBvc2l0aW9uICogbGluZVRvcCArIGJCb3RQb3NpdGlvbiAqIGxpbmVCb3QpICogbGluZUVuZDtcXG5cXG5cXHRzdGFydENvb3JkID0gYUNvb3JkICogc2NhbGVSYXRpbyArIHRyYW5zbGF0ZSAqIHZpZXdwb3J0Lnp3ICsgdmlld3BvcnQueHk7XFxuXFx0ZW5kQ29vcmQgPSBiQ29vcmQgKiBzY2FsZVJhdGlvICsgdHJhbnNsYXRlICogdmlld3BvcnQuencgKyB2aWV3cG9ydC54eTtcXG5cXG5cXHRnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24gICogMi4wIC0gMS4wLCBkZXB0aCwgMSk7XFxuXFxuXFx0ZW5hYmxlU3RhcnRNaXRlciA9IHN0ZXAoZG90KGN1cnJUYW5nZW50LCBwcmV2VGFuZ2VudCksIC41KTtcXG5cXHRlbmFibGVFbmRNaXRlciA9IHN0ZXAoZG90KGN1cnJUYW5nZW50LCBuZXh0VGFuZ2VudCksIC41KTtcXG5cXG5cXHQvL2JldmVsIG1pdGVyIGN1dG9mZnNcXG5cXHRpZiAobWl0ZXJNb2RlID09IDEuKSB7XFxuXFx0XFx0aWYgKGVuYWJsZVN0YXJ0TWl0ZXIgPT0gMS4pIHtcXG5cXHRcXHRcXHR2ZWMyIHN0YXJ0TWl0ZXJXaWR0aCA9IHZlYzIoc3RhcnRKb2luRGlyZWN0aW9uKSAqIHRoaWNrbmVzcyAqIG1pdGVyTGltaXQgKiAuNTtcXG5cXHRcXHRcXHRzdGFydEN1dG9mZiA9IHZlYzQoYUNvb3JkLCBhQ29vcmQpO1xcblxcdFxcdFxcdHN0YXJ0Q3V0b2ZmLnp3ICs9IHZlYzIoLXN0YXJ0Sm9pbkRpcmVjdGlvbi55LCBzdGFydEpvaW5EaXJlY3Rpb24ueCkgLyBzY2FsZVJhdGlvO1xcblxcdFxcdFxcdHN0YXJ0Q3V0b2ZmID0gc3RhcnRDdXRvZmYgKiBzY2FsZVJhdGlvLnh5eHkgKyB0cmFuc2xhdGUueHl4eSAqIHZpZXdwb3J0Lnp3enc7XFxuXFx0XFx0XFx0c3RhcnRDdXRvZmYgKz0gdmlld3BvcnQueHl4eTtcXG5cXHRcXHRcXHRzdGFydEN1dG9mZiArPSBzdGFydE1pdGVyV2lkdGgueHl4eTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0aWYgKGVuYWJsZUVuZE1pdGVyID09IDEuKSB7XFxuXFx0XFx0XFx0dmVjMiBlbmRNaXRlcldpZHRoID0gdmVjMihlbmRKb2luRGlyZWN0aW9uKSAqIHRoaWNrbmVzcyAqIG1pdGVyTGltaXQgKiAuNTtcXG5cXHRcXHRcXHRlbmRDdXRvZmYgPSB2ZWM0KGJDb29yZCwgYkNvb3JkKTtcXG5cXHRcXHRcXHRlbmRDdXRvZmYuencgKz0gdmVjMigtZW5kSm9pbkRpcmVjdGlvbi55LCBlbmRKb2luRGlyZWN0aW9uLngpICAvIHNjYWxlUmF0aW87XFxuXFx0XFx0XFx0ZW5kQ3V0b2ZmID0gZW5kQ3V0b2ZmICogc2NhbGVSYXRpby54eXh5ICsgdHJhbnNsYXRlLnh5eHkgKiB2aWV3cG9ydC56d3p3O1xcblxcdFxcdFxcdGVuZEN1dG9mZiArPSB2aWV3cG9ydC54eXh5O1xcblxcdFxcdFxcdGVuZEN1dG9mZiArPSBlbmRNaXRlcldpZHRoLnh5eHk7XFxuXFx0XFx0fVxcblxcdH1cXG5cXG5cXHQvL3JvdW5kIG1pdGVyIGN1dG9mZnNcXG5cXHRlbHNlIGlmIChtaXRlck1vZGUgPT0gMi4pIHtcXG5cXHRcXHRpZiAoZW5hYmxlU3RhcnRNaXRlciA9PSAxLikge1xcblxcdFxcdFxcdHZlYzIgc3RhcnRNaXRlcldpZHRoID0gdmVjMihzdGFydEpvaW5EaXJlY3Rpb24pICogdGhpY2tuZXNzICogYWJzKGRvdChzdGFydEpvaW5EaXJlY3Rpb24sIGN1cnJOb3JtYWwpKSAqIC41O1xcblxcdFxcdFxcdHN0YXJ0Q3V0b2ZmID0gdmVjNChhQ29vcmQsIGFDb29yZCk7XFxuXFx0XFx0XFx0c3RhcnRDdXRvZmYuencgKz0gdmVjMigtc3RhcnRKb2luRGlyZWN0aW9uLnksIHN0YXJ0Sm9pbkRpcmVjdGlvbi54KSAvIHNjYWxlUmF0aW87XFxuXFx0XFx0XFx0c3RhcnRDdXRvZmYgPSBzdGFydEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcXG5cXHRcXHRcXHRzdGFydEN1dG9mZiArPSB2aWV3cG9ydC54eXh5O1xcblxcdFxcdFxcdHN0YXJ0Q3V0b2ZmICs9IHN0YXJ0TWl0ZXJXaWR0aC54eXh5O1xcblxcdFxcdH1cXG5cXG5cXHRcXHRpZiAoZW5hYmxlRW5kTWl0ZXIgPT0gMS4pIHtcXG5cXHRcXHRcXHR2ZWMyIGVuZE1pdGVyV2lkdGggPSB2ZWMyKGVuZEpvaW5EaXJlY3Rpb24pICogdGhpY2tuZXNzICogYWJzKGRvdChlbmRKb2luRGlyZWN0aW9uLCBjdXJyTm9ybWFsKSkgKiAuNTtcXG5cXHRcXHRcXHRlbmRDdXRvZmYgPSB2ZWM0KGJDb29yZCwgYkNvb3JkKTtcXG5cXHRcXHRcXHRlbmRDdXRvZmYuencgKz0gdmVjMigtZW5kSm9pbkRpcmVjdGlvbi55LCBlbmRKb2luRGlyZWN0aW9uLngpICAvIHNjYWxlUmF0aW87XFxuXFx0XFx0XFx0ZW5kQ3V0b2ZmID0gZW5kQ3V0b2ZmICogc2NhbGVSYXRpby54eXh5ICsgdHJhbnNsYXRlLnh5eHkgKiB2aWV3cG9ydC56d3p3O1xcblxcdFxcdFxcdGVuZEN1dG9mZiArPSB2aWV3cG9ydC54eXh5O1xcblxcdFxcdFxcdGVuZEN1dG9mZiArPSBlbmRNaXRlcldpZHRoLnh5eHk7XFxuXFx0XFx0fVxcblxcdH1cXG59XFxuXCJdKSxmcmFnOm8oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgZGFzaFBhdHRlcm47XFxudW5pZm9ybSBmbG9hdCBkYXNoU2l6ZSwgcGl4ZWxSYXRpbywgdGhpY2tuZXNzLCBvcGFjaXR5LCBpZCwgbWl0ZXJNb2RlO1xcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxudmFyeWluZyB2ZWMyIHRhbmdlbnQ7XFxudmFyeWluZyB2ZWM0IHN0YXJ0Q3V0b2ZmLCBlbmRDdXRvZmY7XFxudmFyeWluZyB2ZWMyIHN0YXJ0Q29vcmQsIGVuZENvb3JkO1xcbnZhcnlpbmcgZmxvYXQgZW5hYmxlU3RhcnRNaXRlciwgZW5hYmxlRW5kTWl0ZXI7XFxuXFxuZmxvYXQgZGlzdFRvTGluZSh2ZWMyIHAsIHZlYzIgYSwgdmVjMiBiKSB7XFxuXFx0dmVjMiBkaWZmID0gYiAtIGE7XFxuXFx0dmVjMiBwZXJwID0gbm9ybWFsaXplKHZlYzIoLWRpZmYueSwgZGlmZi54KSk7XFxuXFx0cmV0dXJuIGRvdChwIC0gYSwgcGVycCk7XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG5cXHRmbG9hdCBhbHBoYSA9IDEuLCBkaXN0VG9TdGFydCwgZGlzdFRvRW5kO1xcblxcdGZsb2F0IGN1dG9mZiA9IHRoaWNrbmVzcyAqIC41O1xcblxcblxcdC8vYmV2ZWwgbWl0ZXJcXG5cXHRpZiAobWl0ZXJNb2RlID09IDEuKSB7XFxuXFx0XFx0aWYgKGVuYWJsZVN0YXJ0TWl0ZXIgPT0gMS4pIHtcXG5cXHRcXHRcXHRkaXN0VG9TdGFydCA9IGRpc3RUb0xpbmUoZ2xfRnJhZ0Nvb3JkLnh5LCBzdGFydEN1dG9mZi54eSwgc3RhcnRDdXRvZmYuencpO1xcblxcdFxcdFxcdGlmIChkaXN0VG9TdGFydCA8IC0xLikge1xcblxcdFxcdFxcdFxcdGRpc2NhcmQ7XFxuXFx0XFx0XFx0XFx0cmV0dXJuO1xcblxcdFxcdFxcdH1cXG5cXHRcXHRcXHRhbHBoYSAqPSBtaW4obWF4KGRpc3RUb1N0YXJ0ICsgMS4sIDAuKSwgMS4pO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRpZiAoZW5hYmxlRW5kTWl0ZXIgPT0gMS4pIHtcXG5cXHRcXHRcXHRkaXN0VG9FbmQgPSBkaXN0VG9MaW5lKGdsX0ZyYWdDb29yZC54eSwgZW5kQ3V0b2ZmLnh5LCBlbmRDdXRvZmYuencpO1xcblxcdFxcdFxcdGlmIChkaXN0VG9FbmQgPCAtMS4pIHtcXG5cXHRcXHRcXHRcXHRkaXNjYXJkO1xcblxcdFxcdFxcdFxcdHJldHVybjtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0XFx0YWxwaGEgKj0gbWluKG1heChkaXN0VG9FbmQgKyAxLiwgMC4pLCAxLik7XFxuXFx0XFx0fVxcblxcdH1cXG5cXG5cXHQvLyByb3VuZCBtaXRlclxcblxcdGVsc2UgaWYgKG1pdGVyTW9kZSA9PSAyLikge1xcblxcdFxcdGlmIChlbmFibGVTdGFydE1pdGVyID09IDEuKSB7XFxuXFx0XFx0XFx0ZGlzdFRvU3RhcnQgPSBkaXN0VG9MaW5lKGdsX0ZyYWdDb29yZC54eSwgc3RhcnRDdXRvZmYueHksIHN0YXJ0Q3V0b2ZmLnp3KTtcXG5cXHRcXHRcXHRpZiAoZGlzdFRvU3RhcnQgPCAwLikge1xcblxcdFxcdFxcdFxcdGZsb2F0IHJhZGl1cyA9IGxlbmd0aChnbF9GcmFnQ29vcmQueHkgLSBzdGFydENvb3JkKTtcXG5cXG5cXHRcXHRcXHRcXHRpZihyYWRpdXMgPiBjdXRvZmYgKyAuNSkge1xcblxcdFxcdFxcdFxcdFxcdGRpc2NhcmQ7XFxuXFx0XFx0XFx0XFx0XFx0cmV0dXJuO1xcblxcdFxcdFxcdFxcdH1cXG5cXG5cXHRcXHRcXHRcXHRhbHBoYSAtPSBzbW9vdGhzdGVwKGN1dG9mZiAtIC41LCBjdXRvZmYgKyAuNSwgcmFkaXVzKTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fVxcblxcblxcdFxcdGlmIChlbmFibGVFbmRNaXRlciA9PSAxLikge1xcblxcdFxcdFxcdGRpc3RUb0VuZCA9IGRpc3RUb0xpbmUoZ2xfRnJhZ0Nvb3JkLnh5LCBlbmRDdXRvZmYueHksIGVuZEN1dG9mZi56dyk7XFxuXFx0XFx0XFx0aWYgKGRpc3RUb0VuZCA8IDAuKSB7XFxuXFx0XFx0XFx0XFx0ZmxvYXQgcmFkaXVzID0gbGVuZ3RoKGdsX0ZyYWdDb29yZC54eSAtIGVuZENvb3JkKTtcXG5cXG5cXHRcXHRcXHRcXHRpZihyYWRpdXMgPiBjdXRvZmYgKyAuNSkge1xcblxcdFxcdFxcdFxcdFxcdGRpc2NhcmQ7XFxuXFx0XFx0XFx0XFx0XFx0cmV0dXJuO1xcblxcdFxcdFxcdFxcdH1cXG5cXG5cXHRcXHRcXHRcXHRhbHBoYSAtPSBzbW9vdGhzdGVwKGN1dG9mZiAtIC41LCBjdXRvZmYgKyAuNSwgcmFkaXVzKTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fVxcblxcdH1cXG5cXG5cXHRmbG9hdCB0ID0gZnJhY3QoZG90KHRhbmdlbnQsIGdsX0ZyYWdDb29yZC54eSkgLyBkYXNoU2l6ZSkgKiAuNSArIC4yNTtcXG5cXHRmbG9hdCBkYXNoID0gdGV4dHVyZTJEKGRhc2hQYXR0ZXJuLCB2ZWMyKHQsIC41KSkucjtcXG5cXG5cXHRnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XFxuXFx0Z2xfRnJhZ0NvbG9yLmEgKj0gYWxwaGEgKiBvcGFjaXR5ICogZGFzaDtcXG59XFxuXCJdKSxhdHRyaWJ1dGVzOntsaW5lRW5kOntidWZmZXI6cixkaXZpc29yOjAsc3RyaWRlOjgsb2Zmc2V0OjB9LGxpbmVUb3A6e2J1ZmZlcjpyLGRpdmlzb3I6MCxzdHJpZGU6OCxvZmZzZXQ6NH0sYUNvbG9yOntidWZmZXI6dC5wcm9wKFwiY29sb3JCdWZmZXJcIiksc3RyaWRlOjQsb2Zmc2V0OjAsZGl2aXNvcjoxfSxiQ29sb3I6e2J1ZmZlcjp0LnByb3AoXCJjb2xvckJ1ZmZlclwiKSxzdHJpZGU6NCxvZmZzZXQ6NCxkaXZpc29yOjF9LHByZXZDb29yZDp7YnVmZmVyOnQucHJvcChcInBvc2l0aW9uQnVmZmVyXCIpLHN0cmlkZTo4LG9mZnNldDowLGRpdmlzb3I6MX0sYUNvb3JkOntidWZmZXI6dC5wcm9wKFwicG9zaXRpb25CdWZmZXJcIiksc3RyaWRlOjgsb2Zmc2V0OjgsZGl2aXNvcjoxfSxiQ29vcmQ6e2J1ZmZlcjp0LnByb3AoXCJwb3NpdGlvbkJ1ZmZlclwiKSxzdHJpZGU6OCxvZmZzZXQ6MTYsZGl2aXNvcjoxfSxuZXh0Q29vcmQ6e2J1ZmZlcjp0LnByb3AoXCJwb3NpdGlvbkJ1ZmZlclwiKSxzdHJpZGU6OCxvZmZzZXQ6MjQsZGl2aXNvcjoxfX19LG4pKX1jYXRjaCh0KXtlPWl9cmV0dXJue2ZpbGw6dCh7cHJpbWl0aXZlOlwidHJpYW5nbGVcIixlbGVtZW50czpmdW5jdGlvbih0LGUpe3JldHVybiBlLnRyaWFuZ2xlc30sb2Zmc2V0OjAsdmVydDpvKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uLCBwb3NpdGlvbkZyYWN0O1xcblxcbnVuaWZvcm0gdmVjNCBjb2xvcjtcXG51bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3Q7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFJhdGlvLCBpZDtcXG51bmlmb3JtIHZlYzQgdmlld3BvcnQ7XFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxuXFxuY29uc3QgZmxvYXQgTUFYX0xJTkVTID0gMjU2LjtcXG5cXG52b2lkIG1haW4oKSB7XFxuXFx0ZmxvYXQgZGVwdGggPSAoTUFYX0xJTkVTIC0gNC4gLSBpZCkgLyAoTUFYX0xJTkVTKTtcXG5cXG5cXHR2ZWMyIHBvc2l0aW9uID0gcG9zaXRpb24gKiBzY2FsZSArIHRyYW5zbGF0ZVxcbiAgICAgICArIHBvc2l0aW9uRnJhY3QgKiBzY2FsZSArIHRyYW5zbGF0ZUZyYWN0XFxuICAgICAgICsgcG9zaXRpb24gKiBzY2FsZUZyYWN0XFxuICAgICAgICsgcG9zaXRpb25GcmFjdCAqIHNjYWxlRnJhY3Q7XFxuXFxuXFx0Z2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uICogMi4wIC0gMS4wLCBkZXB0aCwgMSk7XFxuXFxuXFx0ZnJhZ0NvbG9yID0gY29sb3IgLyAyNTUuO1xcblxcdGZyYWdDb2xvci5hICo9IG9wYWNpdHk7XFxufVxcblwiXSksZnJhZzpvKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxuXFxudm9pZCBtYWluKCkge1xcblxcdGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjtcXG59XFxuXCJdKSx1bmlmb3Jtczp7c2NhbGU6dC5wcm9wKFwic2NhbGVcIiksY29sb3I6dC5wcm9wKFwiZmlsbFwiKSxzY2FsZUZyYWN0OnQucHJvcChcInNjYWxlRnJhY3RcIiksdHJhbnNsYXRlRnJhY3Q6dC5wcm9wKFwidHJhbnNsYXRlRnJhY3RcIiksdHJhbnNsYXRlOnQucHJvcChcInRyYW5zbGF0ZVwiKSxvcGFjaXR5OnQucHJvcChcIm9wYWNpdHlcIikscGl4ZWxSYXRpbzp0LmNvbnRleHQoXCJwaXhlbFJhdGlvXCIpLGlkOnQucHJvcChcImlkXCIpLHZpZXdwb3J0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuW2Uudmlld3BvcnQueCxlLnZpZXdwb3J0LnksdC52aWV3cG9ydFdpZHRoLHQudmlld3BvcnRIZWlnaHRdfX0sYXR0cmlidXRlczp7cG9zaXRpb246e2J1ZmZlcjp0LnByb3AoXCJwb3NpdGlvbkJ1ZmZlclwiKSxzdHJpZGU6OCxvZmZzZXQ6OH0scG9zaXRpb25GcmFjdDp7YnVmZmVyOnQucHJvcChcInBvc2l0aW9uRnJhY3RCdWZmZXJcIiksc3RyaWRlOjgsb2Zmc2V0Ojh9fSxibGVuZDpuLmJsZW5kLGRlcHRoOntlbmFibGU6ITF9LHNjaXNzb3I6bi5zY2lzc29yLHN0ZW5jaWw6bi5zdGVuY2lsLHZpZXdwb3J0Om4udmlld3BvcnR9KSxyZWN0OmksbWl0ZXI6ZX19LHYuZGVmYXVsdHM9e2Rhc2hlczpudWxsLGpvaW46XCJtaXRlclwiLG1pdGVyTGltaXQ6MSx0aGlja25lc3M6MTAsY2FwOlwic3F1YXJlXCIsY29sb3I6XCJibGFja1wiLG9wYWNpdHk6MSxvdmVybGF5OiExLHZpZXdwb3J0Om51bGwscmFuZ2U6bnVsbCxjbG9zZTohMSxmaWxsOm51bGx9LHYucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPVtdLHI9YXJndW1lbnRzLmxlbmd0aDtyLS07KWVbcl09YXJndW1lbnRzW3JdO2UubGVuZ3RoJiYodD10aGlzKS51cGRhdGUuYXBwbHkodCxlKSx0aGlzLmRyYXcoKX0sdi5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W10scj1hcmd1bWVudHMubGVuZ3RoO3ItLTspZVtyXT1hcmd1bWVudHNbcl07cmV0dXJuKGUubGVuZ3RoP2U6dGhpcy5wYXNzZXMpLmZvckVhY2goZnVuY3Rpb24oZSxyKXt2YXIgbjtpZihlJiZBcnJheS5pc0FycmF5KGUpKXJldHVybihuPXQpLmRyYXcuYXBwbHkobixlKTtcIm51bWJlclwiPT10eXBlb2YgZSYmKGU9dC5wYXNzZXNbZV0pLGUmJmUuY291bnQ+MSYmZS5vcGFjaXR5JiYodC5yZWdsLl9yZWZyZXNoKCksZS5maWxsJiZlLnRyaWFuZ2xlcyYmZS50cmlhbmdsZXMubGVuZ3RoPjImJnQuc2hhZGVycy5maWxsKGUpLGUudGhpY2tuZXNzJiYoZS5zY2FsZVswXSplLnZpZXdwb3J0LndpZHRoPnYucHJlY2lzaW9uVGhyZXNob2xkfHxlLnNjYWxlWzFdKmUudmlld3BvcnQuaGVpZ2h0PnYucHJlY2lzaW9uVGhyZXNob2xkP3Quc2hhZGVycy5yZWN0KGUpOlwicmVjdFwiPT09ZS5qb2lufHwhZS5qb2luJiYoZS50aGlja25lc3M8PTJ8fGUuY291bnQ+PXYubWF4UG9pbnRzKT90LnNoYWRlcnMucmVjdChlKTp0LnNoYWRlcnMubWl0ZXIoZSkpKX0pLHRoaXN9LHYucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHQpe251bGwhPXQubGVuZ3RoP1wibnVtYmVyXCI9PXR5cGVvZiB0WzBdJiYodD1be3Bvc2l0aW9uczp0fV0pOkFycmF5LmlzQXJyYXkodCl8fCh0PVt0XSk7dmFyIHI9dGhpcy5yZWdsLG89dGhpcy5nbDtpZih0LmZvckVhY2goZnVuY3Rpb24odCxoKXt2YXIgZD1lLnBhc3Nlc1toXTtpZih2b2lkIDAhPT10KWlmKG51bGwhPT10KXtpZihcIm51bWJlclwiPT10eXBlb2YgdFswXSYmKHQ9e3Bvc2l0aW9uczp0fSksdD1zKHQse3Bvc2l0aW9uczpcInBvc2l0aW9ucyBwb2ludHMgZGF0YSBjb29yZHNcIix0aGlja25lc3M6XCJ0aGlja25lc3MgbGluZVdpZHRoIGxpbmVXaWR0aHMgbGluZS13aWR0aCBsaW5ld2lkdGggd2lkdGggc3Ryb2tlLXdpZHRoIHN0cm9rZXdpZHRoIHN0cm9rZVdpZHRoXCIsam9pbjpcImxpbmVKb2luIGxpbmVqb2luIGpvaW4gdHlwZSBtb2RlXCIsbWl0ZXJMaW1pdDpcIm1pdGVybGltaXQgbWl0ZXJMaW1pdFwiLGRhc2hlczpcImRhc2ggZGFzaGVzIGRhc2hhcnJheSBkYXNoLWFycmF5IGRhc2hBcnJheVwiLGNvbG9yOlwiY29sb3IgY29sb3VyIHN0cm9rZSBjb2xvcnMgY29sb3VycyBzdHJva2UtY29sb3Igc3Ryb2tlQ29sb3JcIixmaWxsOlwiZmlsbCBmaWxsLWNvbG9yIGZpbGxDb2xvclwiLG9wYWNpdHk6XCJhbHBoYSBvcGFjaXR5XCIsb3ZlcmxheTpcIm92ZXJsYXkgY3JlYXNlIG92ZXJsYXAgaW50ZXJzZWN0XCIsY2xvc2U6XCJjbG9zZWQgY2xvc2UgY2xvc2VkLXBhdGggY2xvc2VQYXRoXCIscmFuZ2U6XCJyYW5nZSBkYXRhQm94XCIsdmlld3BvcnQ6XCJ2aWV3cG9ydCB2aWV3Qm94XCIsaG9sZTpcImhvbGVzIGhvbGUgaG9sbG93XCJ9KSxkfHwoZS5wYXNzZXNbaF09ZD17aWQ6aCxzY2FsZTpudWxsLHNjYWxlRnJhY3Q6bnVsbCx0cmFuc2xhdGU6bnVsbCx0cmFuc2xhdGVGcmFjdDpudWxsLGNvdW50OjAsaG9sZTpbXSxkZXB0aDowLGRhc2hMZW5ndGg6MSxkYXNoVGV4dHVyZTpyLnRleHR1cmUoe2NoYW5uZWxzOjEsZGF0YTpuZXcgVWludDhBcnJheShbMjU1XSksd2lkdGg6MSxoZWlnaHQ6MSxtYWc6XCJsaW5lYXJcIixtaW46XCJsaW5lYXJcIn0pLGNvbG9yQnVmZmVyOnIuYnVmZmVyKHt1c2FnZTpcImR5bmFtaWNcIix0eXBlOlwidWludDhcIixkYXRhOm5ldyBVaW50OEFycmF5fSkscG9zaXRpb25CdWZmZXI6ci5idWZmZXIoe3VzYWdlOlwiZHluYW1pY1wiLHR5cGU6XCJmbG9hdFwiLGRhdGE6bmV3IFVpbnQ4QXJyYXl9KSxwb3NpdGlvbkZyYWN0QnVmZmVyOnIuYnVmZmVyKHt1c2FnZTpcImR5bmFtaWNcIix0eXBlOlwiZmxvYXRcIixkYXRhOm5ldyBVaW50OEFycmF5fSl9LHQ9YSh7fSx2LmRlZmF1bHRzLHQpKSxudWxsIT10LnRoaWNrbmVzcyYmKGQudGhpY2tuZXNzPXBhcnNlRmxvYXQodC50aGlja25lc3MpKSxudWxsIT10Lm9wYWNpdHkmJihkLm9wYWNpdHk9cGFyc2VGbG9hdCh0Lm9wYWNpdHkpKSxudWxsIT10Lm1pdGVyTGltaXQmJihkLm1pdGVyTGltaXQ9cGFyc2VGbG9hdCh0Lm1pdGVyTGltaXQpKSxudWxsIT10Lm92ZXJsYXkmJihkLm92ZXJsYXk9ISF0Lm92ZXJsYXksaDx2Lm1heExpbmVzJiYoZC5kZXB0aD0yKih2Lm1heExpbmVzLTEtaCV2Lm1heExpbmVzKS92Lm1heExpbmVzLTEpKSxudWxsIT10LmpvaW4mJihkLmpvaW49dC5qb2luKSxudWxsIT10LmhvbGUmJihkLmhvbGU9dC5ob2xlKSxudWxsIT10LmZpbGwmJihkLmZpbGw9dC5maWxsP24odC5maWxsLFwidWludDhcIik6bnVsbCksbnVsbCE9dC52aWV3cG9ydCYmKGQudmlld3BvcnQ9Zyh0LnZpZXdwb3J0KSksZC52aWV3cG9ydHx8KGQudmlld3BvcnQ9Zyhbby5kcmF3aW5nQnVmZmVyV2lkdGgsby5kcmF3aW5nQnVmZmVySGVpZ2h0XSkpLG51bGwhPXQuY2xvc2UmJihkLmNsb3NlPXQuY2xvc2UpLG51bGw9PT10LnBvc2l0aW9ucyYmKHQucG9zaXRpb25zPVtdKSx0LnBvc2l0aW9ucyl7dmFyIG0seTtpZih0LnBvc2l0aW9ucy54JiZ0LnBvc2l0aW9ucy55KXt2YXIgeD10LnBvc2l0aW9ucy54LGI9dC5wb3NpdGlvbnMueTt5PWQuY291bnQ9TWF0aC5tYXgoeC5sZW5ndGgsYi5sZW5ndGgpLG09bmV3IEZsb2F0NjRBcnJheSgyKnkpO2Zvcih2YXIgXz0wO188eTtfKyspbVsyKl9dPXhbX10sbVsyKl8rMV09YltfXX1lbHNlIG09bCh0LnBvc2l0aW9ucyxcImZsb2F0NjRcIikseT1kLmNvdW50PU1hdGguZmxvb3IobS5sZW5ndGgvMik7dmFyIHc9ZC5ib3VuZHM9aShtLDIpO2lmKGQuZmlsbCl7Zm9yKHZhciBrPVtdLEE9e30sVD0wLE09MCxTPTAsRT1kLmNvdW50O008RTtNKyspe3ZhciBDPW1bMipNXSxMPW1bMipNKzFdO2lzTmFOKEMpfHxpc05hTihMKXx8bnVsbD09Q3x8bnVsbD09TD8oQz1tWzIqVF0sTD1tWzIqVCsxXSxBW01dPVQpOlQ9TSxrW1MrK109QyxrW1MrK109TH1mb3IodmFyIHo9YyhrLGQuaG9sZXx8W10pLE89MCxJPXoubGVuZ3RoO088STtPKyspbnVsbCE9QVt6W09dXSYmKHpbT109QVt6W09dXSk7ZC50cmlhbmdsZXM9en12YXIgRD1uZXcgRmxvYXQ2NEFycmF5KG0pO3UoRCwyLHcpO3ZhciBQPW5ldyBGbG9hdDY0QXJyYXkoMip5KzYpO2QuY2xvc2U/bVswXT09PW1bMip5LTJdJiZtWzFdPT09bVsyKnktMV0/KFBbMF09RFsyKnktNF0sUFsxXT1EWzIqeS0zXSk6KFBbMF09RFsyKnktMl0sUFsxXT1EWzIqeS0xXSk6KFBbMF09RFswXSxQWzFdPURbMV0pLFAuc2V0KEQsMiksZC5jbG9zZT9tWzBdPT09bVsyKnktMl0mJm1bMV09PT1tWzIqeS0xXT8oUFsyKnkrMl09RFsyXSxQWzIqeSszXT1EWzNdLGQuY291bnQtPTEpOihQWzIqeSsyXT1EWzBdLFBbMip5KzNdPURbMV0sUFsyKnkrNF09RFsyXSxQWzIqeSs1XT1EWzNdKTooUFsyKnkrMl09RFsyKnktMl0sUFsyKnkrM109RFsyKnktMV0sUFsyKnkrNF09RFsyKnktMl0sUFsyKnkrNV09RFsyKnktMV0pLGQucG9zaXRpb25CdWZmZXIoZihQKSksZC5wb3NpdGlvbkZyYWN0QnVmZmVyKHAoUCkpfWlmKHQucmFuZ2U/ZC5yYW5nZT10LnJhbmdlOmQucmFuZ2V8fChkLnJhbmdlPWQuYm91bmRzKSwodC5yYW5nZXx8dC5wb3NpdGlvbnMpJiZkLmNvdW50KXt2YXIgUj1kLmJvdW5kcyxGPVJbMl0tUlswXSxCPVJbM10tUlsxXSxOPWQucmFuZ2VbMl0tZC5yYW5nZVswXSxqPWQucmFuZ2VbM10tZC5yYW5nZVsxXTtkLnNjYWxlPVtGL04sQi9qXSxkLnRyYW5zbGF0ZT1bLWQucmFuZ2VbMF0vTitSWzBdL058fDAsLWQucmFuZ2VbMV0vaitSWzFdL2p8fDBdLGQuc2NhbGVGcmFjdD1wKGQuc2NhbGUpLGQudHJhbnNsYXRlRnJhY3Q9cChkLnRyYW5zbGF0ZSl9aWYodC5kYXNoZXMpe3ZhciBWLFU9MDtpZighdC5kYXNoZXN8fHQuZGFzaGVzLmxlbmd0aDwyKVU9MSxWPW5ldyBVaW50OEFycmF5KFsyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSk7ZWxzZXtVPTA7Zm9yKHZhciBxPTA7cTx0LmRhc2hlcy5sZW5ndGg7KytxKVUrPXQuZGFzaGVzW3FdO1Y9bmV3IFVpbnQ4QXJyYXkoVSp2LmRhc2hNdWx0KTtmb3IodmFyIEg9MCxHPTI1NSxZPTA7WTwyO1krKylmb3IodmFyIFc9MDtXPHQuZGFzaGVzLmxlbmd0aDsrK1cpe2Zvcih2YXIgWD0wLFo9dC5kYXNoZXNbV10qdi5kYXNoTXVsdCouNTtYPFo7KytYKVZbSCsrXT1HO0dePTI1NX19ZC5kYXNoTGVuZ3RoPVUsZC5kYXNoVGV4dHVyZSh7Y2hhbm5lbHM6MSxkYXRhOlYsd2lkdGg6Vi5sZW5ndGgsaGVpZ2h0OjEsbWFnOlwibGluZWFyXCIsbWluOlwibGluZWFyXCJ9LDAsMCl9aWYodC5jb2xvcil7dmFyICQ9ZC5jb3VudCxKPXQuY29sb3I7Snx8KEo9XCJ0cmFuc3BhcmVudFwiKTt2YXIgSz1uZXcgVWludDhBcnJheSg0KiQrNCk7aWYoQXJyYXkuaXNBcnJheShKKSYmXCJudW1iZXJcIiE9dHlwZW9mIEpbMF0pe2Zvcih2YXIgUT0wO1E8JDtRKyspe3ZhciB0dD1uKEpbUV0sXCJ1aW50OFwiKTtLLnNldCh0dCw0KlEpfUsuc2V0KG4oSlswXSxcInVpbnQ4XCIpLDQqJCl9ZWxzZSBmb3IodmFyIGV0PW4oSixcInVpbnQ4XCIpLHJ0PTA7cnQ8JCsxO3J0KyspSy5zZXQoZXQsNCpydCk7ZC5jb2xvckJ1ZmZlcih7dXNhZ2U6XCJkeW5hbWljXCIsdHlwZTpcInVpbnQ4XCIsZGF0YTpLfSl9fWVsc2UgZS5wYXNzZXNbaF09bnVsbH0pLHQubGVuZ3RoPHRoaXMucGFzc2VzLmxlbmd0aCl7Zm9yKHZhciBoPXQubGVuZ3RoO2g8dGhpcy5wYXNzZXMubGVuZ3RoO2grKyl7dmFyIGQ9ZS5wYXNzZXNbaF07ZCYmKGQuY29sb3JCdWZmZXIuZGVzdHJveSgpLGQucG9zaXRpb25CdWZmZXIuZGVzdHJveSgpLGQuZGFzaFRleHR1cmUuZGVzdHJveSgpKX10aGlzLnBhc3Nlcy5sZW5ndGg9dC5sZW5ndGh9Zm9yKHZhciBtPVtdLHk9MDt5PHRoaXMucGFzc2VzLmxlbmd0aDt5KyspbnVsbCE9PWUucGFzc2VzW3ldJiZtLnB1c2goZS5wYXNzZXNbeV0pO3JldHVybiB0aGlzLnBhc3Nlcz1tLHRoaXN9fSx2LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFzc2VzLmZvckVhY2goZnVuY3Rpb24odCl7dC5jb2xvckJ1ZmZlci5kZXN0cm95KCksdC5wb3NpdGlvbkJ1ZmZlci5kZXN0cm95KCksdC5kYXNoVGV4dHVyZS5kZXN0cm95KCl9KSx0aGlzLnBhc3Nlcy5sZW5ndGg9MCx0aGlzfX0se1wiYXJyYXktYm91bmRzXCI6NTYsXCJhcnJheS1ub3JtYWxpemVcIjo1NyxcImNvbG9yLW5vcm1hbGl6ZVwiOjExMSxlYXJjdXQ6MTYzLFwiZXM2LXdlYWstbWFwXCI6MjE3LFwiZmxhdHRlbi12ZXJ0ZXgtZGF0YVwiOjIyNCxnbHNsaWZ5OjQwMixcIm9iamVjdC1hc3NpZ25cIjo0NDcsXCJwYXJzZS1yZWN0XCI6NDUyLFwicGljay1ieS1hbGlhc1wiOjQ1OCxcInRvLWZsb2F0MzJcIjo1MjN9XSw0ODU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9KHQpfHxmdW5jdGlvbih0LGUpe3ZhciByPVtdLG49ITAsaT0hMSxhPXZvaWQgMDt0cnl7Zm9yKHZhciBvLHM9dFtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShvPXMubmV4dCgpKS5kb25lKSYmKHIucHVzaChvLnZhbHVlKSwhZXx8ci5sZW5ndGghPT1lKTtuPSEwKTt9Y2F0Y2godCl7aT0hMCxhPXR9ZmluYWxseXt0cnl7bnx8bnVsbD09cy5yZXR1cm58fHMucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IGF9fXJldHVybiByfSh0LGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpfSgpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLHI9bmV3IEFycmF5KHQubGVuZ3RoKTtlPHQubGVuZ3RoO2UrKylyW2VdPXRbZV07cmV0dXJuIHJ9fSh0KXx8ZnVuY3Rpb24odCl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdCh0KXx8XCJbb2JqZWN0IEFyZ3VtZW50c11cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpfSgpfXZhciBhPXQoXCJjb2xvci1ub3JtYWxpemVcIiksbz10KFwiYXJyYXktYm91bmRzXCIpLHM9dChcImNvbG9yLWlkXCIpLGw9dChcInBvaW50LWNsdXN0ZXJcIiksYz10KFwib2JqZWN0LWFzc2lnblwiKSx1PXQoXCJnbHNsaWZ5XCIpLGg9dChcInBpY2stYnktYWxpYXNcIiksZj10KFwidXBkYXRlLWRpZmZcIikscD10KFwiZmxhdHRlbi12ZXJ0ZXgtZGF0YVwiKSxkPXQoXCJpcy1pZXhwbG9yZXJcIiksZz10KFwidG8tZmxvYXQzMlwiKSx2PXQoXCJwYXJzZS1yZWN0XCIpLG09eTtmdW5jdGlvbiB5KHQsZSl7dmFyIHI9dGhpcztpZighKHRoaXMgaW5zdGFuY2VvZiB5KSlyZXR1cm4gbmV3IHkodCxlKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiB0PyhlfHwoZT17fSksZS5yZWdsPXQpOihlPXQsdD1udWxsKSxlJiZlLmxlbmd0aCYmKGUucG9zaXRpb25zPWUpO3ZhciBuLGk9KHQ9ZS5yZWdsKS5fZ2wsYT1bXTt0aGlzLnRvb01hbnlDb2xvcnM9ZCxuPXQudGV4dHVyZSh7ZGF0YTpuZXcgVWludDhBcnJheSgxMDIwKSx3aWR0aDoyNTUsaGVpZ2h0OjEsdHlwZTpcInVpbnQ4XCIsZm9ybWF0OlwicmdiYVwiLHdyYXBTOlwiY2xhbXBcIix3cmFwVDpcImNsYW1wXCIsbWFnOlwibmVhcmVzdFwiLG1pbjpcIm5lYXJlc3RcIn0pLGModGhpcyx7cmVnbDp0LGdsOmksZ3JvdXBzOltdLG1hcmtlckNhY2hlOltudWxsXSxtYXJrZXJUZXh0dXJlczpbbnVsbF0scGFsZXR0ZTphLHBhbGV0dGVJZHM6e30scGFsZXR0ZVRleHR1cmU6bixtYXhDb2xvcnM6MjU1LG1heFNpemU6MTAwLGNhbnZhczppLmNhbnZhc30pLHRoaXMudXBkYXRlKGUpO3ZhciBvPXt1bmlmb3Jtczp7cGl4ZWxSYXRpbzp0LmNvbnRleHQoXCJwaXhlbFJhdGlvXCIpLHBhbGV0dGU6bixwYWxldHRlU2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybltyLnRvb01hbnlDb2xvcnM/MDoyNTUsbi5oZWlnaHRdfSxzY2FsZTp0LnByb3AoXCJzY2FsZVwiKSxzY2FsZUZyYWN0OnQucHJvcChcInNjYWxlRnJhY3RcIiksdHJhbnNsYXRlOnQucHJvcChcInRyYW5zbGF0ZVwiKSx0cmFuc2xhdGVGcmFjdDp0LnByb3AoXCJ0cmFuc2xhdGVGcmFjdFwiKSxvcGFjaXR5OnQucHJvcChcIm9wYWNpdHlcIiksbWFya2VyOnQucHJvcChcIm1hcmtlclRleHR1cmVcIil9LGF0dHJpYnV0ZXM6e3g6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS54QXR0cnx8e2J1ZmZlcjplLnBvc2l0aW9uQnVmZmVyLHN0cmlkZTo4LG9mZnNldDowfX0seTpmdW5jdGlvbih0LGUpe3JldHVybiBlLnlBdHRyfHx7YnVmZmVyOmUucG9zaXRpb25CdWZmZXIsc3RyaWRlOjgsb2Zmc2V0OjR9fSx4RnJhY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS54QXR0cj97Y29uc3RhbnQ6WzAsMF19OntidWZmZXI6ZS5wb3NpdGlvbkZyYWN0QnVmZmVyLHN0cmlkZTo4LG9mZnNldDowfX0seUZyYWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUueUF0dHI/e2NvbnN0YW50OlswLDBdfTp7YnVmZmVyOmUucG9zaXRpb25GcmFjdEJ1ZmZlcixzdHJpZGU6OCxvZmZzZXQ6NH19LHNpemU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zaXplLmxlbmd0aD97YnVmZmVyOmUuc2l6ZUJ1ZmZlcixzdHJpZGU6MixvZmZzZXQ6MH06e2NvbnN0YW50OltNYXRoLnJvdW5kKDI1NSplLnNpemUvci5tYXhTaXplKV19fSxib3JkZXJTaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuYm9yZGVyU2l6ZS5sZW5ndGg/e2J1ZmZlcjplLnNpemVCdWZmZXIsc3RyaWRlOjIsb2Zmc2V0OjF9Ontjb25zdGFudDpbTWF0aC5yb3VuZCgyNTUqZS5ib3JkZXJTaXplL3IubWF4U2l6ZSldfX0sY29sb3JJZDpmdW5jdGlvbih0LGUpe3JldHVybiBlLmNvbG9yLmxlbmd0aD97YnVmZmVyOmUuY29sb3JCdWZmZXIsc3RyaWRlOnIudG9vTWFueUNvbG9ycz84OjQsb2Zmc2V0OjB9Ontjb25zdGFudDpyLnRvb01hbnlDb2xvcnM/YS5zbGljZSg0KmUuY29sb3IsNCplLmNvbG9yKzQpOltlLmNvbG9yXX19LGJvcmRlckNvbG9ySWQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5ib3JkZXJDb2xvci5sZW5ndGg/e2J1ZmZlcjplLmNvbG9yQnVmZmVyLHN0cmlkZTpyLnRvb01hbnlDb2xvcnM/ODo0LG9mZnNldDpyLnRvb01hbnlDb2xvcnM/NDoyfTp7Y29uc3RhbnQ6ci50b29NYW55Q29sb3JzP2Euc2xpY2UoNCplLmJvcmRlckNvbG9yLDQqZS5ib3JkZXJDb2xvcis0KTpbZS5ib3JkZXJDb2xvcl19fSxpc0FjdGl2ZTpmdW5jdGlvbih0LGUpe3JldHVybiEwPT09ZS5hY3RpdmF0aW9uP3tjb25zdGFudDpbMV19OmUuYWN0aXZhdGlvbj9lLmFjdGl2YXRpb246e2NvbnN0YW50OlswXX19fSxibGVuZDp7ZW5hYmxlOiEwLGNvbG9yOlswLDAsMCwxXSxmdW5jOntzcmNSR0I6XCJzcmMgYWxwaGFcIixkc3RSR0I6XCJvbmUgbWludXMgc3JjIGFscGhhXCIsc3JjQWxwaGE6XCJvbmUgbWludXMgZHN0IGFscGhhXCIsZHN0QWxwaGE6XCJvbmVcIn19LHNjaXNzb3I6e2VuYWJsZTohMCxib3g6dC5wcm9wKFwidmlld3BvcnRcIil9LHZpZXdwb3J0OnQucHJvcChcInZpZXdwb3J0XCIpLHN0ZW5jaWw6e2VuYWJsZTohMX0sZGVwdGg6e2VuYWJsZTohMX0sZWxlbWVudHM6dC5wcm9wKFwiZWxlbWVudHNcIiksY291bnQ6dC5wcm9wKFwiY291bnRcIiksb2Zmc2V0OnQucHJvcChcIm9mZnNldFwiKSxwcmltaXRpdmU6XCJwb2ludHNcIn0scz1jKHt9LG8pO3MuZnJhZz11KFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3IsIGZyYWdCb3JkZXJDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IGZyYWdXaWR0aCwgZnJhZ0JvcmRlckNvbG9yTGV2ZWwsIGZyYWdDb2xvckxldmVsO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIG1hcmtlcjtcXG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW8sIG9wYWNpdHk7XFxuXFxuZmxvYXQgc21vb3RoU3RlcChmbG9hdCB4LCBmbG9hdCB5KSB7XFxuICByZXR1cm4gMS4wIC8gKDEuMCArIGV4cCg1MC4wKih4IC0geSkpKTtcXG59XFxuXFxudm9pZCBtYWluKCkge1xcbiAgZmxvYXQgZGlzdCA9IHRleHR1cmUyRChtYXJrZXIsIGdsX1BvaW50Q29vcmQpLnIsIGRlbHRhID0gZnJhZ1dpZHRoO1xcblxcbiAgLy8gbWF4LWRpc3RhbmNlIGFscGhhXFxuICBpZiAoZGlzdCA8IDAuMDAzKSBkaXNjYXJkO1xcblxcbiAgLy8gbnVsbC1ib3JkZXIgY2FzZVxcbiAgaWYgKGZyYWdCb3JkZXJDb2xvckxldmVsID09IGZyYWdDb2xvckxldmVsIHx8IGZyYWdCb3JkZXJDb2xvci5hID09IDAuKSB7XFxuICAgIGZsb2F0IGNvbG9yQW10ID0gc21vb3Roc3RlcCguNSAtIGRlbHRhLCAuNSArIGRlbHRhLCBkaXN0KTtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChmcmFnQ29sb3IucmdiLCBjb2xvckFtdCAqIGZyYWdDb2xvci5hICogb3BhY2l0eSk7XFxuICB9XFxuICBlbHNlIHtcXG4gICAgZmxvYXQgYm9yZGVyQ29sb3JBbXQgPSBzbW9vdGhzdGVwKGZyYWdCb3JkZXJDb2xvckxldmVsIC0gZGVsdGEsIGZyYWdCb3JkZXJDb2xvckxldmVsICsgZGVsdGEsIGRpc3QpO1xcbiAgICBmbG9hdCBjb2xvckFtdCA9IHNtb290aHN0ZXAoZnJhZ0NvbG9yTGV2ZWwgLSBkZWx0YSwgZnJhZ0NvbG9yTGV2ZWwgKyBkZWx0YSwgZGlzdCk7XFxuXFxuICAgIHZlYzQgY29sb3IgPSBmcmFnQm9yZGVyQ29sb3I7XFxuICAgIGNvbG9yLmEgKj0gYm9yZGVyQ29sb3JBbXQ7XFxuICAgIGNvbG9yID0gbWl4KGNvbG9yLCBmcmFnQ29sb3IsIGNvbG9yQW10KTtcXG4gICAgY29sb3IuYSAqPSBvcGFjaXR5O1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG4gIH1cXG5cXG59XFxuXCJdKSxzLnZlcnQ9dShbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgZmxvYXQgeCwgeSwgeEZyYWN0LCB5RnJhY3Q7XFxuYXR0cmlidXRlIGZsb2F0IHNpemUsIGJvcmRlclNpemU7XFxuYXR0cmlidXRlIHZlYzQgY29sb3JJZCwgYm9yZGVyQ29sb3JJZDtcXG5hdHRyaWJ1dGUgZmxvYXQgaXNBY3RpdmU7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0LCBwYWxldHRlU2l6ZTtcXG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW87XFxudW5pZm9ybSBzYW1wbGVyMkQgcGFsZXR0ZTtcXG5cXG5jb25zdCBmbG9hdCBtYXhTaXplID0gMTAwLjtcXG5jb25zdCBmbG9hdCBib3JkZXJMZXZlbCA9IC41O1xcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3IsIGZyYWdCb3JkZXJDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IGZyYWdQb2ludFNpemUsIGZyYWdCb3JkZXJSYWRpdXMsIGZyYWdXaWR0aCwgZnJhZ0JvcmRlckNvbG9yTGV2ZWwsIGZyYWdDb2xvckxldmVsO1xcblxcbmJvb2wgaXNEaXJlY3QgPSAocGFsZXR0ZVNpemUueCA8IDEuKTtcXG5cXG52ZWM0IGdldENvbG9yKHZlYzQgaWQpIHtcXG4gIHJldHVybiBpc0RpcmVjdCA/IGlkIC8gMjU1LiA6IHRleHR1cmUyRChwYWxldHRlLFxcbiAgICB2ZWMyKFxcbiAgICAgIChpZC54ICsgLjUpIC8gcGFsZXR0ZVNpemUueCxcXG4gICAgICAoaWQueSArIC41KSAvIHBhbGV0dGVTaXplLnlcXG4gICAgKVxcbiAgKTtcXG59XFxuXFxudm9pZCBtYWluKCkge1xcbiAgaWYgKGlzQWN0aXZlID09IDAuKSByZXR1cm47XFxuXFxuICB2ZWMyIHBvc2l0aW9uID0gdmVjMih4LCB5KTtcXG4gIHZlYzIgcG9zaXRpb25GcmFjdCA9IHZlYzIoeEZyYWN0LCB5RnJhY3QpO1xcblxcbiAgdmVjNCBjb2xvciA9IGdldENvbG9yKGNvbG9ySWQpO1xcbiAgdmVjNCBib3JkZXJDb2xvciA9IGdldENvbG9yKGJvcmRlckNvbG9ySWQpO1xcblxcbiAgZmxvYXQgc2l6ZSA9IHNpemUgKiBtYXhTaXplIC8gMjU1LjtcXG4gIGZsb2F0IGJvcmRlclNpemUgPSBib3JkZXJTaXplICogbWF4U2l6ZSAvIDI1NS47XFxuXFxuICBnbF9Qb2ludFNpemUgPSAyLiAqIHNpemUgKiBwaXhlbFJhdGlvO1xcbiAgZnJhZ1BvaW50U2l6ZSA9IHNpemUgKiBwaXhlbFJhdGlvO1xcblxcbiAgdmVjMiBwb3MgPSAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVcXG4gICAgICArIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVcXG4gICAgICArIChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZUZyYWN0XFxuICAgICAgKyAocG9zaXRpb25GcmFjdCArIHRyYW5zbGF0ZUZyYWN0KSAqIHNjYWxlRnJhY3Q7XFxuXFxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zICogMi4gLSAxLiwgMCwgMSk7XFxuXFxuICBmcmFnQ29sb3IgPSBjb2xvcjtcXG4gIGZyYWdCb3JkZXJDb2xvciA9IGJvcmRlckNvbG9yO1xcbiAgZnJhZ1dpZHRoID0gMS4gLyBnbF9Qb2ludFNpemU7XFxuXFxuICBmcmFnQm9yZGVyQ29sb3JMZXZlbCA9IGNsYW1wKGJvcmRlckxldmVsIC0gYm9yZGVyTGV2ZWwgKiBib3JkZXJTaXplIC8gc2l6ZSwgMC4sIDEuKTtcXG4gIGZyYWdDb2xvckxldmVsID0gY2xhbXAoYm9yZGVyTGV2ZWwgKyAoMS4gLSBib3JkZXJMZXZlbCkgKiBib3JkZXJTaXplIC8gc2l6ZSwgMC4sIDEuKTtcXG59XCJdKSx0aGlzLmRyYXdNYXJrZXI9dChzKTt2YXIgbD1jKHt9LG8pO2wuZnJhZz11KFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3IsIGZyYWdCb3JkZXJDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxudmFyeWluZyBmbG9hdCBmcmFnQm9yZGVyUmFkaXVzLCBmcmFnV2lkdGg7XFxuXFxuZmxvYXQgc21vb3RoU3RlcChmbG9hdCBlZGdlMCwgZmxvYXQgZWRnZTEsIGZsb2F0IHgpIHtcXG5cXHRmbG9hdCB0O1xcblxcdHQgPSBjbGFtcCgoeCAtIGVkZ2UwKSAvIChlZGdlMSAtIGVkZ2UwKSwgMC4wLCAxLjApO1xcblxcdHJldHVybiB0ICogdCAqICgzLjAgLSAyLjAgKiB0KTtcXG59XFxuXFxudm9pZCBtYWluKCkge1xcblxcdGZsb2F0IHJhZGl1cywgYWxwaGEgPSAxLjAsIGRlbHRhID0gZnJhZ1dpZHRoO1xcblxcblxcdHJhZGl1cyA9IGxlbmd0aCgyLjAgKiBnbF9Qb2ludENvb3JkLnh5IC0gMS4wKTtcXG5cXG5cXHRpZiAocmFkaXVzID4gMS4wICsgZGVsdGEpIHtcXG5cXHRcXHRkaXNjYXJkO1xcblxcdH1cXG5cXG5cXHRhbHBoYSAtPSBzbW9vdGhzdGVwKDEuMCAtIGRlbHRhLCAxLjAgKyBkZWx0YSwgcmFkaXVzKTtcXG5cXG5cXHRmbG9hdCBib3JkZXJSYWRpdXMgPSBmcmFnQm9yZGVyUmFkaXVzO1xcblxcdGZsb2F0IHJhdGlvID0gc21vb3Roc3RlcChib3JkZXJSYWRpdXMgLSBkZWx0YSwgYm9yZGVyUmFkaXVzICsgZGVsdGEsIHJhZGl1cyk7XFxuXFx0dmVjNCBjb2xvciA9IG1peChmcmFnQ29sb3IsIGZyYWdCb3JkZXJDb2xvciwgcmF0aW8pO1xcblxcdGNvbG9yLmEgKj0gYWxwaGEgKiBvcGFjaXR5O1xcblxcdGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIl0pLGwudmVydD11KFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSBmbG9hdCB4LCB5LCB4RnJhY3QsIHlGcmFjdDtcXG5hdHRyaWJ1dGUgZmxvYXQgc2l6ZSwgYm9yZGVyU2l6ZTtcXG5hdHRyaWJ1dGUgdmVjNCBjb2xvcklkLCBib3JkZXJDb2xvcklkO1xcbmF0dHJpYnV0ZSBmbG9hdCBpc0FjdGl2ZTtcXG5cXG51bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3Q7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFJhdGlvO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHBhbGV0dGU7XFxudW5pZm9ybSB2ZWMyIHBhbGV0dGVTaXplO1xcblxcbmNvbnN0IGZsb2F0IG1heFNpemUgPSAxMDAuO1xcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3IsIGZyYWdCb3JkZXJDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IGZyYWdCb3JkZXJSYWRpdXMsIGZyYWdXaWR0aDtcXG5cXG5ib29sIGlzRGlyZWN0ID0gKHBhbGV0dGVTaXplLnggPCAxLik7XFxuXFxudmVjNCBnZXRDb2xvcih2ZWM0IGlkKSB7XFxuICByZXR1cm4gaXNEaXJlY3QgPyBpZCAvIDI1NS4gOiB0ZXh0dXJlMkQocGFsZXR0ZSxcXG4gICAgdmVjMihcXG4gICAgICAoaWQueCArIC41KSAvIHBhbGV0dGVTaXplLngsXFxuICAgICAgKGlkLnkgKyAuNSkgLyBwYWxldHRlU2l6ZS55XFxuICAgIClcXG4gICk7XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG4gIC8vIGlnbm9yZSBpbmFjdGl2ZSBwb2ludHNcXG4gIGlmIChpc0FjdGl2ZSA9PSAwLikgcmV0dXJuO1xcblxcbiAgdmVjMiBwb3NpdGlvbiA9IHZlYzIoeCwgeSk7XFxuICB2ZWMyIHBvc2l0aW9uRnJhY3QgPSB2ZWMyKHhGcmFjdCwgeUZyYWN0KTtcXG5cXG4gIHZlYzQgY29sb3IgPSBnZXRDb2xvcihjb2xvcklkKTtcXG4gIHZlYzQgYm9yZGVyQ29sb3IgPSBnZXRDb2xvcihib3JkZXJDb2xvcklkKTtcXG5cXG4gIGZsb2F0IHNpemUgPSBzaXplICogbWF4U2l6ZSAvIDI1NS47XFxuICBmbG9hdCBib3JkZXJTaXplID0gYm9yZGVyU2l6ZSAqIG1heFNpemUgLyAyNTUuO1xcblxcbiAgZ2xfUG9pbnRTaXplID0gKHNpemUgKyBib3JkZXJTaXplKSAqIHBpeGVsUmF0aW87XFxuXFxuICB2ZWMyIHBvcyA9IChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZVxcbiAgICAgICsgKHBvc2l0aW9uRnJhY3QgKyB0cmFuc2xhdGVGcmFjdCkgKiBzY2FsZVxcbiAgICAgICsgKHBvc2l0aW9uICsgdHJhbnNsYXRlKSAqIHNjYWxlRnJhY3RcXG4gICAgICArIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVGcmFjdDtcXG5cXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChwb3MgKiAyLiAtIDEuLCAwLCAxKTtcXG5cXG4gIGZyYWdCb3JkZXJSYWRpdXMgPSAxLiAtIDIuICogYm9yZGVyU2l6ZSAvIChzaXplICsgYm9yZGVyU2l6ZSk7XFxuICBmcmFnQ29sb3IgPSBjb2xvcjtcXG4gIGZyYWdCb3JkZXJDb2xvciA9IGJvcmRlckNvbG9yLmEgPT0gMC4gfHwgYm9yZGVyU2l6ZSA9PSAwLiA/IHZlYzQoY29sb3IucmdiLCAwLikgOiBib3JkZXJDb2xvcjtcXG4gIGZyYWdXaWR0aCA9IDEuIC8gZ2xfUG9pbnRTaXplO1xcbn1cXG5cIl0pLGQmJihsLmZyYWc9bC5mcmFnLnJlcGxhY2UoXCJzbW9vdGhzdGVwXCIsXCJzbW9vdGhTdGVwXCIpLHMuZnJhZz1zLmZyYWcucmVwbGFjZShcInNtb290aHN0ZXBcIixcInNtb290aFN0ZXBcIikpLHRoaXMuZHJhd0NpcmNsZT10KGwpfXkuZGVmYXVsdHM9e2NvbG9yOlwiYmxhY2tcIixib3JkZXJDb2xvcjpcInRyYW5zcGFyZW50XCIsYm9yZGVyU2l6ZTowLHNpemU6MTIsb3BhY2l0eToxLG1hcmtlcjp2b2lkIDAsdmlld3BvcnQ6bnVsbCxyYW5nZTpudWxsLHBpeGVsU2l6ZTpudWxsLGNvdW50OjAsb2Zmc2V0OjAsYm91bmRzOm51bGwscG9zaXRpb25zOltdLHNuYXA6MWU0fSx5LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCYmdGhpcy51cGRhdGUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuZHJhdygpLHRoaXN9LHkucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspcltuXT1hcmd1bWVudHNbbl07dmFyIGk9dGhpcy5ncm91cHM7aWYoMT09PXIubGVuZ3RoJiZBcnJheS5pc0FycmF5KHJbMF0pJiYobnVsbD09PXJbMF1bMF18fEFycmF5LmlzQXJyYXkoclswXVswXSkpJiYocj1yWzBdKSx0aGlzLnJlZ2wuX3JlZnJlc2goKSxyLmxlbmd0aClmb3IodmFyIGE9MDthPHIubGVuZ3RoO2ErKyl0aGlzLmRyYXdJdGVtKGEsclthXSk7ZWxzZSBpLmZvckVhY2goZnVuY3Rpb24oZSxyKXt0LmRyYXdJdGVtKHIpfSk7cmV0dXJuIHRoaXN9LHkucHJvdG90eXBlLmRyYXdJdGVtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5ncm91cHMsbj1yW3RdO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlJiYodD1lLG49cltlXSxlPW51bGwpLG4mJm4uY291bnQmJm4ub3BhY2l0eSl7bi5hY3RpdmF0aW9uWzBdJiZ0aGlzLmRyYXdDaXJjbGUodGhpcy5nZXRNYXJrZXJEcmF3T3B0aW9ucygwLG4sZSkpO2Zvcih2YXIgYT1bXSxvPTE7bzxuLmFjdGl2YXRpb24ubGVuZ3RoO28rKyluLmFjdGl2YXRpb25bb10mJighMD09PW4uYWN0aXZhdGlvbltvXXx8bi5hY3RpdmF0aW9uW29dLmRhdGEubGVuZ3RoKSYmYS5wdXNoLmFwcGx5KGEsaSh0aGlzLmdldE1hcmtlckRyYXdPcHRpb25zKG8sbixlKSkpO2EubGVuZ3RoJiZ0aGlzLmRyYXdNYXJrZXIoYSl9fSx5LnByb3RvdHlwZS5nZXRNYXJrZXJEcmF3T3B0aW9ucz1mdW5jdGlvbih0LGUscil7dmFyIGk9ZS5yYW5nZSxhPWUudHJlZSxvPWUudmlld3BvcnQscz1lLmFjdGl2YXRpb24sbD1lLnNlbGVjdGlvbkJ1ZmZlcix1PWUuY291bnQ7dGhpcy5yZWdsO2lmKCFhKXJldHVybiByP1tjKHt9LGUse21hcmtlclRleHR1cmU6dGhpcy5tYXJrZXJUZXh0dXJlc1t0XSxhY3RpdmF0aW9uOnNbdF0sY291bnQ6ci5sZW5ndGgsZWxlbWVudHM6cixvZmZzZXQ6MH0pXTpbYyh7fSxlLHttYXJrZXJUZXh0dXJlOnRoaXMubWFya2VyVGV4dHVyZXNbdF0sYWN0aXZhdGlvbjpzW3RdLG9mZnNldDowfSldO3ZhciBoPVtdLGY9YS5yYW5nZShpLHtsb2Q6ITAscHg6WyhpWzJdLWlbMF0pL28ud2lkdGgsKGlbM10taVsxXSkvby5oZWlnaHRdfSk7aWYocil7Zm9yKHZhciBwPXNbdF0uZGF0YSxkPW5ldyBVaW50OEFycmF5KHUpLGc9MDtnPHIubGVuZ3RoO2crKyl7dmFyIHY9cltnXTtkW3ZdPXA/cFt2XToxfWwuc3ViZGF0YShkKX1mb3IodmFyIG09Zi5sZW5ndGg7bS0tOyl7dmFyIHk9bihmW21dLDIpLHg9eVswXSxiPXlbMV07aC5wdXNoKGMoe30sZSx7bWFya2VyVGV4dHVyZTp0aGlzLm1hcmtlclRleHR1cmVzW3RdLGFjdGl2YXRpb246cj9sOnNbdF0sb2Zmc2V0OngsY291bnQ6Yi14fSkpfXJldHVybiBofSx5LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspcltuXT1hcmd1bWVudHNbbl07aWYoci5sZW5ndGgpezE9PT1yLmxlbmd0aCYmQXJyYXkuaXNBcnJheShyWzBdKSYmKHI9clswXSk7dmFyIGk9dGhpcy5ncm91cHMsYT10aGlzLmdsLHM9dGhpcy5yZWdsLHU9dGhpcy5tYXhTaXplLGQ9dGhpcy5tYXhDb2xvcnMsbT10aGlzLnBhbGV0dGU7dGhpcy5ncm91cHM9aT1yLm1hcChmdW5jdGlvbihlLHIpe3ZhciBuPWlbcl07aWYodm9pZCAwPT09ZSlyZXR1cm4gbjtudWxsPT09ZT9lPXtwb3NpdGlvbnM6bnVsbH06XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lPXtvbmRyYXc6ZX06XCJudW1iZXJcIj09dHlwZW9mIGVbMF0mJihlPXtwb3NpdGlvbnM6ZX0pLG51bGw9PT0oZT1oKGUse3Bvc2l0aW9uczpcInBvc2l0aW9ucyBkYXRhIHBvaW50c1wiLHNuYXA6XCJzbmFwIGNsdXN0ZXIgbG9kIHRyZWVcIixzaXplOlwic2l6ZXMgc2l6ZSByYWRpdXNcIixib3JkZXJTaXplOlwiYm9yZGVyU2l6ZXMgYm9yZGVyU2l6ZSBib3JkZXItc2l6ZSBib3JkZXJzaXplIGJvcmRlcldpZHRoIGJvcmRlcldpZHRocyBib3JkZXItd2lkdGggYm9yZGVyd2lkdGggc3Ryb2tlLXdpZHRoIHN0cm9rZVdpZHRoIHN0cm9rZXdpZHRoIG91dGxpbmVcIixjb2xvcjpcImNvbG9ycyBjb2xvciBmaWxsIGZpbGwtY29sb3IgZmlsbENvbG9yXCIsYm9yZGVyQ29sb3I6XCJib3JkZXJDb2xvcnMgYm9yZGVyQ29sb3Igc3Ryb2tlIHN0cm9rZS1jb2xvciBzdHJva2VDb2xvclwiLG1hcmtlcjpcIm1hcmtlcnMgbWFya2VyIHNoYXBlXCIscmFuZ2U6XCJyYW5nZSBkYXRhQm94IGRhdGFib3hcIix2aWV3cG9ydDpcInZpZXdwb3J0IHZpZXdQb3J0IHZpZXdCb3ggdmlld2JveFwiLG9wYWNpdHk6XCJvcGFjaXR5IGFscGhhIHRyYW5zcGFyZW5jeVwiLGJvdW5kczpcImJvdW5kIGJvdW5kcyBib3VuZGFyaWVzIGxpbWl0c1wiLHRvb01hbnlDb2xvcnM6XCJ0b29NYW55Q29sb3JzIHBhbGV0dGUgcGFsZXR0ZU1vZGUgb3B0aW1pemVQYWxldHRlIGVuYWJsZVBhbGV0dGVcIn0pKS5wb3NpdGlvbnMmJihlLnBvc2l0aW9ucz1bXSksbnVsbCE9ZS50b29NYW55Q29sb3JzJiYodC50b29NYW55Q29sb3JzPWUudG9vTWFueUNvbG9ycyksbnx8KGlbcl09bj17aWQ6cixzY2FsZTpudWxsLHRyYW5zbGF0ZTpudWxsLHNjYWxlRnJhY3Q6bnVsbCx0cmFuc2xhdGVGcmFjdDpudWxsLGFjdGl2YXRpb246W10sc2VsZWN0aW9uQnVmZmVyOnMuYnVmZmVyKHtkYXRhOm5ldyBVaW50OEFycmF5KDApLHVzYWdlOlwic3RyZWFtXCIsdHlwZTpcInVpbnQ4XCJ9KSxzaXplQnVmZmVyOnMuYnVmZmVyKHtkYXRhOm5ldyBVaW50OEFycmF5KDApLHVzYWdlOlwiZHluYW1pY1wiLHR5cGU6XCJ1aW50OFwifSksY29sb3JCdWZmZXI6cy5idWZmZXIoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMCksdXNhZ2U6XCJkeW5hbWljXCIsdHlwZTpcInVpbnQ4XCJ9KSxwb3NpdGlvbkJ1ZmZlcjpzLmJ1ZmZlcih7ZGF0YTpuZXcgVWludDhBcnJheSgwKSx1c2FnZTpcImR5bmFtaWNcIix0eXBlOlwiZmxvYXRcIn0pLHBvc2l0aW9uRnJhY3RCdWZmZXI6cy5idWZmZXIoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMCksdXNhZ2U6XCJkeW5hbWljXCIsdHlwZTpcImZsb2F0XCJ9KX0sZT1jKHt9LHkuZGVmYXVsdHMsZSkpLCFlLnBvc2l0aW9uc3x8XCJtYXJrZXJcImluIGV8fChlLm1hcmtlcj1uLm1hcmtlcixkZWxldGUgbi5tYXJrZXIpLCFlLm1hcmtlcnx8XCJwb3NpdGlvbnNcImluIGV8fChlLnBvc2l0aW9ucz1uLnBvc2l0aW9ucyxkZWxldGUgbi5wb3NpdGlvbnMpO3ZhciB4PTAsYj0wO2lmKGYobixlLFt7c25hcDohMCxzaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PXQmJih0PXkuZGVmYXVsdHMuc2l6ZSkseCs9dCYmdC5sZW5ndGg/MTowLHR9LGJvcmRlclNpemU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dCYmKHQ9eS5kZWZhdWx0cy5ib3JkZXJTaXplKSx4Kz10JiZ0Lmxlbmd0aD8xOjAsdH0sb3BhY2l0eTpwYXJzZUZsb2F0LGNvbG9yOmZ1bmN0aW9uKGUscil7cmV0dXJuIG51bGw9PWUmJihlPXkuZGVmYXVsdHMuY29sb3IpLGU9dC51cGRhdGVDb2xvcihlKSxiKyssZX0sYm9yZGVyQ29sb3I6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gbnVsbD09ZSYmKGU9eS5kZWZhdWx0cy5ib3JkZXJDb2xvciksZT10LnVwZGF0ZUNvbG9yKGUpLGIrKyxlfSxib3VuZHM6ZnVuY3Rpb24odCxlLHIpe3JldHVyblwicmFuZ2VcImluIHJ8fChyLnJhbmdlPW51bGwpLHR9LHBvc2l0aW9uczpmdW5jdGlvbih0LGUscil7dmFyIG49ZS5zbmFwLGk9ZS5wb3NpdGlvbkJ1ZmZlcixhPWUucG9zaXRpb25GcmFjdEJ1ZmZlcixjPWUuc2VsZWN0aW9uQnVmZmVyO2lmKHQueHx8dC55KXJldHVybiB0LngubGVuZ3RoP2UueEF0dHI9e2J1ZmZlcjpzLmJ1ZmZlcih0LngpLG9mZnNldDowLHN0cmlkZTo0LGNvdW50OnQueC5sZW5ndGh9OmUueEF0dHI9e2J1ZmZlcjp0LnguYnVmZmVyLG9mZnNldDo0KnQueC5vZmZzZXR8fDAsc3RyaWRlOjQqKHQueC5zdHJpZGV8fDEpLGNvdW50OnQueC5jb3VudH0sdC55Lmxlbmd0aD9lLnlBdHRyPXtidWZmZXI6cy5idWZmZXIodC55KSxvZmZzZXQ6MCxzdHJpZGU6NCxjb3VudDp0LnkubGVuZ3RofTplLnlBdHRyPXtidWZmZXI6dC55LmJ1ZmZlcixvZmZzZXQ6NCp0Lnkub2Zmc2V0fHwwLHN0cmlkZTo0Kih0Lnkuc3RyaWRlfHwxKSxjb3VudDp0LnkuY291bnR9LGUuY291bnQ9TWF0aC5tYXgoZS54QXR0ci5jb3VudCxlLnlBdHRyLmNvdW50KSx0O3Q9cCh0LFwiZmxvYXQ2NFwiKTt2YXIgdT1lLmNvdW50PU1hdGguZmxvb3IodC5sZW5ndGgvMiksaD1lLmJvdW5kcz11P28odCwyKTpudWxsO2lmKHIucmFuZ2V8fGUucmFuZ2V8fChkZWxldGUgZS5yYW5nZSxyLnJhbmdlPWgpLHIubWFya2VyfHxlLm1hcmtlcnx8KGRlbGV0ZSBlLm1hcmtlcixyLm1hcmtlcj1udWxsKSxuJiYoITA9PT1ufHx1Pm4pP2UudHJlZT1sKHQse2JvdW5kczpofSk6biYmbi5sZW5ndGgmJihlLnRyZWU9biksZS50cmVlKXt2YXIgZj17cHJpbWl0aXZlOlwicG9pbnRzXCIsdXNhZ2U6XCJzdGF0aWNcIixkYXRhOmUudHJlZSx0eXBlOlwidWludDMyXCJ9O2UuZWxlbWVudHM/ZS5lbGVtZW50cyhmKTplLmVsZW1lbnRzPXMuZWxlbWVudHMoZil9cmV0dXJuIGkoe2RhdGE6Zy5mbG9hdCh0KSx1c2FnZTpcImR5bmFtaWNcIn0pLGEoe2RhdGE6Zy5mcmFjdCh0KSx1c2FnZTpcImR5bmFtaWNcIn0pLGMoe2RhdGE6bmV3IFVpbnQ4QXJyYXkodSksdHlwZTpcInVpbnQ4XCIsdXNhZ2U6XCJzdHJlYW1cIn0pLHR9fSx7bWFya2VyOmZ1bmN0aW9uKGUscixuKXt2YXIgaT1yLmFjdGl2YXRpb247aWYoaS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0LmRlc3Ryb3kmJnQuZGVzdHJveSgpfSksaS5sZW5ndGg9MCxlJiZcIm51bWJlclwiIT10eXBlb2YgZVswXSl7Zm9yKHZhciBhPVtdLG89MCxsPU1hdGgubWluKGUubGVuZ3RoLHIuY291bnQpO288bDtvKyspe3ZhciBjPXQuYWRkTWFya2VyKGVbb10pO2FbY118fChhW2NdPW5ldyBVaW50OEFycmF5KHIuY291bnQpKSxhW2NdW29dPTF9Zm9yKHZhciB1PTA7dTxhLmxlbmd0aDt1KyspaWYoYVt1XSl7dmFyIGg9e2RhdGE6YVt1XSx0eXBlOlwidWludDhcIix1c2FnZTpcInN0YXRpY1wifTtpW3VdP2lbdV0oaCk6aVt1XT1zLmJ1ZmZlcihoKSxpW3VdLmRhdGE9YVt1XX19ZWxzZXtpW3QuYWRkTWFya2VyKGUpXT0hMH1yZXR1cm4gZX0scmFuZ2U6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuYm91bmRzO2lmKG4pcmV0dXJuIHR8fCh0PW4pLGUuc2NhbGU9WzEvKHRbMl0tdFswXSksMS8odFszXS10WzFdKV0sZS50cmFuc2xhdGU9Wy10WzBdLC10WzFdXSxlLnNjYWxlRnJhY3Q9Zy5mcmFjdChlLnNjYWxlKSxlLnRyYW5zbGF0ZUZyYWN0PWcuZnJhY3QoZS50cmFuc2xhdGUpLHR9LHZpZXdwb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB2KHR8fFthLmRyYXdpbmdCdWZmZXJXaWR0aCxhLmRyYXdpbmdCdWZmZXJIZWlnaHRdKX19XSkseCl7dmFyIF89bix3PV8uY291bnQsaz1fLnNpemUsQT1fLmJvcmRlclNpemUsVD1fLnNpemVCdWZmZXIsTT1uZXcgVWludDhBcnJheSgyKncpO2lmKGsubGVuZ3RofHxBLmxlbmd0aClmb3IodmFyIFM9MDtTPHc7UysrKU1bMipTXT1NYXRoLnJvdW5kKDI1NSoobnVsbD09a1tTXT9rOmtbU10pL3UpLE1bMipTKzFdPU1hdGgucm91bmQoMjU1KihudWxsPT1BW1NdP0E6QVtTXSkvdSk7VCh7ZGF0YTpNLHVzYWdlOlwiZHluYW1pY1wifSl9aWYoYil7dmFyIEUsQz1uLEw9Qy5jb3VudCx6PUMuY29sb3IsTz1DLmJvcmRlckNvbG9yLEk9Qy5jb2xvckJ1ZmZlcjtpZih0LnRvb01hbnlDb2xvcnMpe2lmKHoubGVuZ3RofHxPLmxlbmd0aCl7RT1uZXcgVWludDhBcnJheSg4KkwpO2Zvcih2YXIgRD0wO0Q8TDtEKyspe3ZhciBQPXpbRF07RVs4KkRdPW1bNCpQXSxFWzgqRCsxXT1tWzQqUCsxXSxFWzgqRCsyXT1tWzQqUCsyXSxFWzgqRCszXT1tWzQqUCszXTt2YXIgUj1PW0RdO0VbOCpEKzRdPW1bNCpSXSxFWzgqRCs1XT1tWzQqUisxXSxFWzgqRCs2XT1tWzQqUisyXSxFWzgqRCs3XT1tWzQqUiszXX19fWVsc2UgaWYoei5sZW5ndGh8fE8ubGVuZ3RoKXtFPW5ldyBVaW50OEFycmF5KDQqTCsyKTtmb3IodmFyIEY9MDtGPEw7RisrKW51bGwhPXpbRl0mJihFWzQqRl09eltGXSVkLEVbNCpGKzFdPU1hdGguZmxvb3IoeltGXS9kKSksbnVsbCE9T1tGXSYmKEVbNCpGKzJdPU9bRl0lZCxFWzQqRiszXT1NYXRoLmZsb29yKE9bRl0vZCkpfUkoe2RhdGE6RXx8bmV3IFVpbnQ4QXJyYXkoMCksdHlwZTpcInVpbnQ4XCIsdXNhZ2U6XCJkeW5hbWljXCJ9KX1yZXR1cm4gbn0pfX0seS5wcm90b3R5cGUuYWRkTWFya2VyPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5tYXJrZXJUZXh0dXJlcyxuPXRoaXMucmVnbCxpPXRoaXMubWFya2VyQ2FjaGUsYT1udWxsPT10PzA6aS5pbmRleE9mKHQpO2lmKGE+PTApcmV0dXJuIGE7aWYodCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSllPXQ7ZWxzZXtlPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoKTtmb3IodmFyIG89MCxzPXQubGVuZ3RoO288cztvKyspZVtvXT0yNTUqdFtvXX12YXIgbD1NYXRoLmZsb29yKE1hdGguc3FydChlLmxlbmd0aCkpO3JldHVybiBhPXIubGVuZ3RoLGkucHVzaCh0KSxyLnB1c2gobi50ZXh0dXJlKHtjaGFubmVsczoxLGRhdGE6ZSxyYWRpdXM6bCxtYWc6XCJsaW5lYXJcIixtaW46XCJsaW5lYXJcIn0pKSxhfSx5LnByb3RvdHlwZS51cGRhdGVDb2xvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnBhbGV0dGVJZHMscj10aGlzLnBhbGV0dGUsbj10aGlzLm1heENvbG9ycztBcnJheS5pc0FycmF5KHQpfHwodD1bdF0pO3ZhciBpPVtdO2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0WzBdKXt2YXIgbz1bXTtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgbD0wO2w8dC5sZW5ndGg7bCs9NClvLnB1c2godC5zbGljZShsLGwrNCkpO2Vsc2UgZm9yKHZhciBjPTA7Yzx0Lmxlbmd0aDtjKz00KW8ucHVzaCh0LnN1YmFycmF5KGMsYys0KSk7dD1vfWZvcih2YXIgdT0wO3U8dC5sZW5ndGg7dSsrKXt2YXIgaD10W3VdO2g9YShoLFwidWludDhcIik7dmFyIGY9cyhoLCExKTtpZihudWxsPT1lW2ZdKXt2YXIgcD1yLmxlbmd0aDtlW2ZdPU1hdGguZmxvb3IocC80KSxyW3BdPWhbMF0scltwKzFdPWhbMV0scltwKzJdPWhbMl0scltwKzNdPWhbM119aVt1XT1lW2ZdfXJldHVybiF0aGlzLnRvb01hbnlDb2xvcnMmJnIubGVuZ3RoPjQqbiYmKHRoaXMudG9vTWFueUNvbG9ycz0hMCksdGhpcy51cGRhdGVQYWxldHRlKHIpLDE9PT1pLmxlbmd0aD9pWzBdOml9LHkucHJvdG90eXBlLnVwZGF0ZVBhbGV0dGU9ZnVuY3Rpb24odCl7aWYoIXRoaXMudG9vTWFueUNvbG9ycyl7dmFyIGU9dGhpcy5tYXhDb2xvcnMscj10aGlzLnBhbGV0dGVUZXh0dXJlLG49TWF0aC5jZWlsKC4yNSp0Lmxlbmd0aC9lKTtpZihuPjEpZm9yKHZhciBpPS4yNSoodD10LnNsaWNlKCkpLmxlbmd0aCVlO2k8biplO2krKyl0LnB1c2goMCwwLDAsMCk7ci5oZWlnaHQ8biYmci5yZXNpemUoZSxuKSxyLnN1YmltYWdlKHt3aWR0aDpNYXRoLm1pbiguMjUqdC5sZW5ndGgsZSksaGVpZ2h0Om4sZGF0YTp0fSwwLDApfX0seS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyb3Vwcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc2l6ZUJ1ZmZlci5kZXN0cm95KCksdC5wb3NpdGlvbkJ1ZmZlci5kZXN0cm95KCksdC5wb3NpdGlvbkZyYWN0QnVmZmVyLmRlc3Ryb3koKSx0LmNvbG9yQnVmZmVyLmRlc3Ryb3koKSx0LmFjdGl2YXRpb24uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5kZXN0cm95JiZ0LmRlc3Ryb3koKX0pLHQuc2VsZWN0aW9uQnVmZmVyLmRlc3Ryb3koKSx0LmVsZW1lbnRzJiZ0LmVsZW1lbnRzLmRlc3Ryb3koKX0pLHRoaXMuZ3JvdXBzLmxlbmd0aD0wLHRoaXMucGFsZXR0ZVRleHR1cmUuZGVzdHJveSgpLHRoaXMubWFya2VyVGV4dHVyZXMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5kZXN0cm95JiZ0LmRlc3Ryb3koKX0pLHRoaXN9O3ZhciB4PXQoXCJvYmplY3QtYXNzaWduXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBtKHQsZSksbj1yLnJlbmRlci5iaW5kKHIpO3JldHVybiB4KG4se3JlbmRlcjpuLHVwZGF0ZTpyLnVwZGF0ZS5iaW5kKHIpLGRyYXc6ci5kcmF3LmJpbmQociksZGVzdHJveTpyLmRlc3Ryb3kuYmluZChyKSxyZWdsOnIucmVnbCxnbDpyLmdsLGNhbnZhczpyLmdsLmNhbnZhcyxncm91cHM6ci5ncm91cHMsbWFya2VyczpyLm1hcmtlckNhY2hlLHBhbGV0dGU6ci5wYWxldHRlfSksbn19LHtcImFycmF5LWJvdW5kc1wiOjU2LFwiY29sb3ItaWRcIjoxMDksXCJjb2xvci1ub3JtYWxpemVcIjoxMTEsXCJmbGF0dGVuLXZlcnRleC1kYXRhXCI6MjI0LGdsc2xpZnk6NDAyLFwiaXMtaWV4cGxvcmVyXCI6NDEyLFwib2JqZWN0LWFzc2lnblwiOjQ0NyxcInBhcnNlLXJlY3RcIjo0NTIsXCJwaWNrLWJ5LWFsaWFzXCI6NDU4LFwicG9pbnQtY2x1c3RlclwiOjQ2MixcInRvLWZsb2F0MzJcIjo1MjMsXCJ1cGRhdGUtZGlmZlwiOjUzNH1dLDQ4NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJyZWdsLXNjYXR0ZXIyZFwiKSxpPXQoXCJwaWNrLWJ5LWFsaWFzXCIpLGE9dChcImFycmF5LWJvdW5kc1wiKSxvPXQoXCJyYWZcIikscz10KFwiYXJyYXktcmFuZ2VcIiksbD10KFwicGFyc2UtcmVjdFwiKSxjPXQoXCJmbGF0dGVuLXZlcnRleC1kYXRhXCIpO2Z1bmN0aW9uIHUodCxlKXtpZighKHRoaXMgaW5zdGFuY2VvZiB1KSlyZXR1cm4gbmV3IHUodCxlKTt0aGlzLnRyYWNlcz1bXSx0aGlzLnBhc3Nlcz17fSx0aGlzLnJlZ2w9dCx0aGlzLnNjYXR0ZXI9bih0KSx0aGlzLmNhbnZhcz10aGlzLnNjYXR0ZXIuY2FudmFzfWZ1bmN0aW9uIGgodCxlLHIpe3JldHVybihudWxsIT10LmlkP3QuaWQ6dCk8PDE2fCgyNTUmZSk8PDh8MjU1JnJ9ZnVuY3Rpb24gZih0LGUscil7dmFyIG4saSxhLG8scz10W2VdLGw9dFtyXTtyZXR1cm4gcy5sZW5ndGg+Mj8oc1swXSxzWzJdLG49c1sxXSxpPXNbM10pOnMubGVuZ3RoPyhuPXNbMF0saT1zWzFdKToocy54LG49cy55LHMueCtzLndpZHRoLGk9cy55K3MuaGVpZ2h0KSxsLmxlbmd0aD4yPyhhPWxbMF0sbz1sWzJdLGxbMV0sbFszXSk6bC5sZW5ndGg/KGE9bFswXSxvPWxbMV0pOihhPWwueCxsLnksbz1sLngrbC53aWR0aCxsLnkrbC5oZWlnaHQpLFthLG4sbyxpXX1mdW5jdGlvbiBwKHQpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXJldHVyblt0LHQsdCx0XTtpZigyPT09dC5sZW5ndGgpcmV0dXJuW3RbMF0sdFsxXSx0WzBdLHRbMV1dO3ZhciBlPWwodCk7cmV0dXJuW2UueCxlLnksZS54K2Uud2lkdGgsZS55K2UuaGVpZ2h0XX1lLmV4cG9ydHM9dSx1LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT10aGlzLHI9W10sbj1hcmd1bWVudHMubGVuZ3RoO24tLTspcltuXT1hcmd1bWVudHNbbl07cmV0dXJuIHIubGVuZ3RoJiYodD10aGlzKS51cGRhdGUuYXBwbHkodCxyKSx0aGlzLnJlZ2wuYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI/dGhpcy5kcmF3KCk6KHRoaXMuZGlydHk/bnVsbD09dGhpcy5wbGFubmVkJiYodGhpcy5wbGFubmVkPW8oZnVuY3Rpb24oKXtlLmRyYXcoKSxlLmRpcnR5PSEwLGUucGxhbm5lZD1udWxsfSkpOih0aGlzLmRyYXcoKSx0aGlzLmRpcnR5PSEwLG8oZnVuY3Rpb24oKXtlLmRpcnR5PSExfSkpLHRoaXMpfSx1LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGg7ci0tOyllW3JdPWFyZ3VtZW50c1tyXTtpZihlLmxlbmd0aCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdGhpcy51cGRhdGVJdGVtKG4sZVtuXSk7dGhpcy50cmFjZXM9dGhpcy50cmFjZXMuZmlsdGVyKEJvb2xlYW4pO2Zvcih2YXIgaT1bXSxhPTAsbz0wO288dGhpcy50cmFjZXMubGVuZ3RoO28rKyl7Zm9yKHZhciBzPXRoaXMudHJhY2VzW29dLGw9dGhpcy50cmFjZXNbb10ucGFzc2VzLGM9MDtjPGwubGVuZ3RoO2MrKylpLnB1c2godGhpcy5wYXNzZXNbbFtjXV0pO3MucGFzc09mZnNldD1hLGErPXMucGFzc2VzLmxlbmd0aH1yZXR1cm4odD10aGlzLnNjYXR0ZXIpLnVwZGF0ZS5hcHBseSh0LGkpLHRoaXN9fSx1LnByb3RvdHlwZS51cGRhdGVJdGVtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5yZWdsO2lmKG51bGw9PT1lKXJldHVybiB0aGlzLnRyYWNlc1t0XT1udWxsLHRoaXM7aWYoIWUpcmV0dXJuIHRoaXM7dmFyIG4sbz1pKGUse2RhdGE6XCJkYXRhIGl0ZW1zIGNvbHVtbnMgcm93cyB2YWx1ZXMgZGltZW5zaW9ucyBzYW1wbGVzIHhcIixzbmFwOlwic25hcCBjbHVzdGVyXCIsc2l6ZTpcInNpemVzIHNpemUgcmFkaXVzXCIsY29sb3I6XCJjb2xvcnMgY29sb3IgZmlsbCBmaWxsLWNvbG9yIGZpbGxDb2xvclwiLG9wYWNpdHk6XCJvcGFjaXR5IGFscGhhIHRyYW5zcGFyZW5jeSBvcGFxdWVcIixib3JkZXJTaXplOlwiYm9yZGVyU2l6ZXMgYm9yZGVyU2l6ZSBib3JkZXItc2l6ZSBib3JkZXJzaXplIGJvcmRlcldpZHRoIGJvcmRlcldpZHRocyBib3JkZXItd2lkdGggYm9yZGVyd2lkdGggc3Ryb2tlLXdpZHRoIHN0cm9rZVdpZHRoIHN0cm9rZXdpZHRoIG91dGxpbmVcIixib3JkZXJDb2xvcjpcImJvcmRlckNvbG9ycyBib3JkZXJDb2xvciBib3JkZXJjb2xvciBzdHJva2Ugc3Ryb2tlLWNvbG9yIHN0cm9rZUNvbG9yXCIsbWFya2VyOlwibWFya2VycyBtYXJrZXIgc2hhcGVcIixyYW5nZTpcInJhbmdlIHJhbmdlcyBkYXRhYm94IGRhdGFCb3hcIix2aWV3cG9ydDpcInZpZXdwb3J0IHZpZXdCb3ggdmlld2JveFwiLGRvbWFpbjpcImRvbWFpbiBkb21haW5zIGFyZWEgYXJlYXNcIixwYWRkaW5nOlwicGFkIHBhZGRpbmcgcGFkZGluZ3MgcGFkcyBtYXJnaW4gbWFyZ2luc1wiLHRyYW5zcG9zZTpcInRyYW5zcG9zZSB0cmFuc3Bvc2VkXCIsZGlhZ29uYWw6XCJkaWFnb25hbCBkaWFnIHNob3dEaWFnb25hbFwiLHVwcGVyOlwidXBwZXIgdXAgdG9wIHVwcGVyaGFsZiB1cHBlckhhbGYgc2hvd3VwcGVyaGFsZiBzaG93VXBwZXIgc2hvd1VwcGVySGFsZlwiLGxvd2VyOlwibG93ZXIgbG93IGJvdHRvbSBsb3dlcmhhbGYgbG93ZXJIYWxmIHNob3dsb3dlcmhhbGYgc2hvd0xvd2VySGFsZiBzaG93TG93ZXJcIn0pLHM9dGhpcy50cmFjZXNbdF18fCh0aGlzLnRyYWNlc1t0XT17aWQ6dCxidWZmZXI6ci5idWZmZXIoe3VzYWdlOlwiZHluYW1pY1wiLHR5cGU6XCJmbG9hdFwiLGRhdGE6bmV3IFVpbnQ4QXJyYXl9KSxjb2xvcjpcImJsYWNrXCIsbWFya2VyOm51bGwsc2l6ZToxMixib3JkZXJDb2xvcjpcInRyYW5zcGFyZW50XCIsYm9yZGVyU2l6ZToxLHZpZXdwb3J0OmwoW3IuX2dsLmRyYXdpbmdCdWZmZXJXaWR0aCxyLl9nbC5kcmF3aW5nQnVmZmVySGVpZ2h0XSkscGFkZGluZzpbMCwwLDAsMF0sb3BhY2l0eToxLGRpYWdvbmFsOiEwLHVwcGVyOiEwLGxvd2VyOiEwfSk7aWYobnVsbCE9by5jb2xvciYmKHMuY29sb3I9by5jb2xvciksbnVsbCE9by5zaXplJiYocy5zaXplPW8uc2l6ZSksbnVsbCE9by5tYXJrZXImJihzLm1hcmtlcj1vLm1hcmtlciksbnVsbCE9by5ib3JkZXJDb2xvciYmKHMuYm9yZGVyQ29sb3I9by5ib3JkZXJDb2xvciksbnVsbCE9by5ib3JkZXJTaXplJiYocy5ib3JkZXJTaXplPW8uYm9yZGVyU2l6ZSksbnVsbCE9by5vcGFjaXR5JiYocy5vcGFjaXR5PW8ub3BhY2l0eSksby52aWV3cG9ydCYmKHMudmlld3BvcnQ9bChvLnZpZXdwb3J0KSksbnVsbCE9by5kaWFnb25hbCYmKHMuZGlhZ29uYWw9by5kaWFnb25hbCksbnVsbCE9by51cHBlciYmKHMudXBwZXI9by51cHBlciksbnVsbCE9by5sb3dlciYmKHMubG93ZXI9by5sb3dlciksby5kYXRhKXtzLmJ1ZmZlcihjKG8uZGF0YSkpLHMuY29sdW1ucz1vLmRhdGEubGVuZ3RoLHMuY291bnQ9by5kYXRhWzBdLmxlbmd0aCxzLmJvdW5kcz1bXTtmb3IodmFyIHU9MDt1PHMuY29sdW1uczt1Kyspcy5ib3VuZHNbdV09YShvLmRhdGFbdV0sMSl9by5yYW5nZSYmKHMucmFuZ2U9by5yYW5nZSxuPXMucmFuZ2UmJlwibnVtYmVyXCIhPXR5cGVvZiBzLnJhbmdlWzBdKSxvLmRvbWFpbiYmKHMuZG9tYWluPW8uZG9tYWluKTt2YXIgZD0hMTtudWxsIT1vLnBhZGRpbmcmJihBcnJheS5pc0FycmF5KG8ucGFkZGluZykmJm8ucGFkZGluZy5sZW5ndGg9PT1zLmNvbHVtbnMmJlwibnVtYmVyXCI9PXR5cGVvZiBvLnBhZGRpbmdbby5wYWRkaW5nLmxlbmd0aC0xXT8ocy5wYWRkaW5nPW8ucGFkZGluZy5tYXAocCksZD0hMCk6cy5wYWRkaW5nPXAoby5wYWRkaW5nKSk7dmFyIGc9cy5jb2x1bW5zLHY9cy5jb3VudCxtPXMudmlld3BvcnQud2lkdGgseT1zLnZpZXdwb3J0LmhlaWdodCx4PXMudmlld3BvcnQueCxiPXMudmlld3BvcnQueSxfPW0vZyx3PXkvZztzLnBhc3Nlcz1bXTtmb3IodmFyIGs9MDtrPGc7aysrKWZvcih2YXIgQT0wO0E8ZztBKyspaWYoKHMuZGlhZ29uYWx8fEEhPT1rKSYmKHMudXBwZXJ8fCEoaz5BKSkmJihzLmxvd2VyfHwhKGs8QSkpKXt2YXIgVD1oKHMuaWQsayxBKSxNPXRoaXMucGFzc2VzW1RdfHwodGhpcy5wYXNzZXNbVF09e30pO2lmKG8uZGF0YSYmKG8udHJhbnNwb3NlP00ucG9zaXRpb25zPXt4OntidWZmZXI6cy5idWZmZXIsb2Zmc2V0OkEsY291bnQ6dixzdHJpZGU6Z30seTp7YnVmZmVyOnMuYnVmZmVyLG9mZnNldDprLGNvdW50OnYsc3RyaWRlOmd9fTpNLnBvc2l0aW9ucz17eDp7YnVmZmVyOnMuYnVmZmVyLG9mZnNldDpBKnYsY291bnQ6dn0seTp7YnVmZmVyOnMuYnVmZmVyLG9mZnNldDprKnYsY291bnQ6dn19LE0uYm91bmRzPWYocy5ib3VuZHMsayxBKSksby5kb21haW58fG8udmlld3BvcnR8fG8uZGF0YSl7dmFyIFM9ZD9mKHMucGFkZGluZyxrLEEpOnMucGFkZGluZztpZihzLmRvbWFpbil7dmFyIEU9ZihzLmRvbWFpbixrLEEpLEM9RVswXSxMPUVbMV0sej1FWzJdLE89RVszXTtNLnZpZXdwb3J0PVt4K0MqbStTWzBdLGIrTCp5K1NbMV0seCt6Km0tU1syXSxiK08qeS1TWzNdXX1lbHNlIE0udmlld3BvcnQ9W3grQSpfK18qU1swXSxiK2sqdyt3KlNbMV0seCsoQSsxKSpfLV8qU1syXSxiKyhrKzEpKnctdypTWzNdXX1vLmNvbG9yJiYoTS5jb2xvcj1zLmNvbG9yKSxvLnNpemUmJihNLnNpemU9cy5zaXplKSxvLm1hcmtlciYmKE0ubWFya2VyPXMubWFya2VyKSxvLmJvcmRlclNpemUmJihNLmJvcmRlclNpemU9cy5ib3JkZXJTaXplKSxvLmJvcmRlckNvbG9yJiYoTS5ib3JkZXJDb2xvcj1zLmJvcmRlckNvbG9yKSxvLm9wYWNpdHkmJihNLm9wYWNpdHk9cy5vcGFjaXR5KSxvLnJhbmdlJiYoTS5yYW5nZT1uP2Yocy5yYW5nZSxrLEEpOnMucmFuZ2V8fE0uYm91bmRzKSxzLnBhc3Nlcy5wdXNoKFQpfXJldHVybiB0aGlzfSx1LnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9W10scj1hcmd1bWVudHMubGVuZ3RoO3ItLTspZVtyXT1hcmd1bWVudHNbcl07aWYoZS5sZW5ndGgpe2Zvcih2YXIgbj1bXSxpPTA7aTxlLmxlbmd0aDtpKyspaWYoXCJudW1iZXJcIj09dHlwZW9mIGVbaV0pe3ZhciBhPXRoaXMudHJhY2VzW2VbaV1dLG89YS5wYXNzZXMsbD1hLnBhc3NPZmZzZXQ7bi5wdXNoLmFwcGx5KG4scyhsLGwrby5sZW5ndGgpKX1lbHNlIGlmKGVbaV0ubGVuZ3RoKXt2YXIgYz1lW2ldLHU9dGhpcy50cmFjZXNbaV0saD11LnBhc3NlcyxmPXUucGFzc09mZnNldDtoPWgubWFwKGZ1bmN0aW9uKHQsZSl7bltmK2VdPWN9KX0odD10aGlzLnNjYXR0ZXIpLmRyYXcuYXBwbHkodCxuKX1lbHNlIHRoaXMuc2NhdHRlci5kcmF3KCk7cmV0dXJuIHRoaXN9LHUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFjZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LmJ1ZmZlciYmdC5idWZmZXIuZGVzdHJveSYmdC5idWZmZXIuZGVzdHJveSgpfSksdGhpcy50cmFjZXM9bnVsbCx0aGlzLnBhc3Nlcz1udWxsLHRoaXMuc2NhdHRlci5kZXN0cm95KCksdGhpc319LHtcImFycmF5LWJvdW5kc1wiOjU2LFwiYXJyYXktcmFuZ2VcIjo1OCxcImZsYXR0ZW4tdmVydGV4LWRhdGFcIjoyMjQsXCJwYXJzZS1yZWN0XCI6NDUyLFwicGljay1ieS1hbGlhc1wiOjQ1OCxyYWY6NDc3LFwicmVnbC1zY2F0dGVyMmRcIjo0ODV9XSw0ODc6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbixpO249dGhpcyxpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuaWQ9VisrLHRoaXMudHlwZT10LHRoaXMuZGF0YT1lfWZ1bmN0aW9uIGUodCl7cmV0dXJuXCJbXCIrZnVuY3Rpb24gdChlKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuW107dmFyIHI9ZS5jaGFyQXQoMCksbj1lLmNoYXJBdChlLmxlbmd0aC0xKTtpZigxPGUubGVuZ3RoJiZyPT09biYmKCdcIic9PT1yfHxcIidcIj09PXIpKXJldHVyblsnXCInK2Uuc3Vic3RyKDEsZS5sZW5ndGgtMikucmVwbGFjZSgvXFxcXC9nLFwiXFxcXFxcXFxcIikucmVwbGFjZSgvXCIvZywnXFxcXFwiJykrJ1wiJ107aWYocj0vXFxbKGZhbHNlfHRydWV8bnVsbHxcXGQrfCdbXiddKid8XCJbXlwiXSpcIilcXF0vLmV4ZWMoZSkpcmV0dXJuIHQoZS5zdWJzdHIoMCxyLmluZGV4KSkuY29uY2F0KHQoclsxXSkpLmNvbmNhdCh0KGUuc3Vic3RyKHIuaW5kZXgrclswXS5sZW5ndGgpKSk7aWYoMT09PShyPWUuc3BsaXQoXCIuXCIpKS5sZW5ndGgpcmV0dXJuWydcIicrZS5yZXBsYWNlKC9cXFxcL2csXCJcXFxcXFxcXFwiKS5yZXBsYWNlKC9cIi9nLCdcXFxcXCInKSsnXCInXTtmb3IoZT1bXSxuPTA7bjxyLmxlbmd0aDsrK24pZT1lLmNvbmNhdCh0KHJbbl0pKTtyZXR1cm4gZX0odCkuam9pbihcIl1bXCIpK1wiXVwifWZ1bmN0aW9uIHIodCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQ/dC5zcGxpdCgpOnR9ZnVuY3Rpb24gbih0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpOnR9ZnVuY3Rpb24gaSh0KXt2YXIgZSxpLGEsbyxzPXR8fHt9O3Q9e307dmFyIGw9W10sYz1bXSx1PVwidW5kZWZpbmVkXCI9PXR5cGVvZiB3aW5kb3c/MTp3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyxoPSExLGY9ZnVuY3Rpb24odCl7fSxwPWZ1bmN0aW9uKCl7fTtpZihcInN0cmluZ1wiPT10eXBlb2Ygcz9lPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iocyk6XCJvYmplY3RcIj09dHlwZW9mIHMmJihcInN0cmluZ1wiPT10eXBlb2Ygcy5ub2RlTmFtZSYmXCJmdW5jdGlvblwiPT10eXBlb2Ygcy5hcHBlbmRDaGlsZCYmXCJmdW5jdGlvblwiPT10eXBlb2Ygcy5nZXRCb3VuZGluZ0NsaWVudFJlY3Q/ZT1zOlwiZnVuY3Rpb25cIj09dHlwZW9mIHMuZHJhd0FycmF5c3x8XCJmdW5jdGlvblwiPT10eXBlb2Ygcy5kcmF3RWxlbWVudHM/YT0obz1zKS5jYW52YXM6KFwiZ2xcImluIHM/bz1zLmdsOlwiY2FudmFzXCJpbiBzP2E9bihzLmNhbnZhcyk6XCJjb250YWluZXJcImluIHMmJihpPW4ocy5jb250YWluZXIpKSxcImF0dHJpYnV0ZXNcImluIHMmJih0PXMuYXR0cmlidXRlcyksXCJleHRlbnNpb25zXCJpbiBzJiYobD1yKHMuZXh0ZW5zaW9ucykpLFwib3B0aW9uYWxFeHRlbnNpb25zXCJpbiBzJiYoYz1yKHMub3B0aW9uYWxFeHRlbnNpb25zKSksXCJvbkRvbmVcImluIHMmJihmPXMub25Eb25lKSxcInByb2ZpbGVcImluIHMmJihoPSEhcy5wcm9maWxlKSxcInBpeGVsUmF0aW9cImluIHMmJih1PStzLnBpeGVsUmF0aW8pKSksZSYmKFwiY2FudmFzXCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/YT1lOmk9ZSksIW8pe2lmKCFhKXtpZighKGU9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXt2YXIgZT13aW5kb3cuaW5uZXJXaWR0aCxuPXdpbmRvdy5pbm5lckhlaWdodDt0IT09ZG9jdW1lbnQuYm9keSYmKGU9KG49dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSkucmlnaHQtbi5sZWZ0LG49bi5ib3R0b20tbi50b3ApLGkud2lkdGg9ciplLGkuaGVpZ2h0PXIqbixqKGkuc3R5bGUse3dpZHRoOmUrXCJweFwiLGhlaWdodDpuK1wicHhcIn0pfXZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7cmV0dXJuIGooaS5zdHlsZSx7Ym9yZGVyOjAsbWFyZ2luOjAscGFkZGluZzowLHRvcDowLGxlZnQ6MH0pLHQuYXBwZW5kQ2hpbGQoaSksdD09PWRvY3VtZW50LmJvZHkmJihpLnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixqKHQuc3R5bGUse21hcmdpbjowLHBhZGRpbmc6MH0pKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLG4sITEpLG4oKSx7Y2FudmFzOmksb25EZXN0cm95OmZ1bmN0aW9uKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIixuKSx0LnJlbW92ZUNoaWxkKGkpfX19KGl8fGRvY3VtZW50LmJvZHksMCx1KSkpcmV0dXJuIG51bGw7YT1lLmNhbnZhcyxwPWUub25EZXN0cm95fW89ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIpe3RyeXtyZXR1cm4gdC5nZXRDb250ZXh0KHIsZSl9Y2F0Y2godCl7cmV0dXJuIG51bGx9fXJldHVybiByKFwid2ViZ2xcIil8fHIoXCJleHBlcmltZW50YWwtd2ViZ2xcIil8fHIoXCJ3ZWJnbC1leHBlcmltZW50YWxcIil9KGEsdCl9cmV0dXJuIG8/e2dsOm8sY2FudmFzOmEsY29udGFpbmVyOmksZXh0ZW5zaW9uczpsLG9wdGlvbmFsRXh0ZW5zaW9uczpjLHBpeGVsUmF0aW86dSxwcm9maWxlOmgsb25Eb25lOmYsb25EZXN0cm95OnB9OihwKCksZihcIndlYmdsIG5vdCBzdXBwb3J0ZWQsIHRyeSB1cGdyYWRpbmcgeW91ciBicm93c2VyIG9yIGdyYXBoaWNzIGRyaXZlcnMgaHR0cDovL2dldC53ZWJnbC5vcmdcIiksbnVsbCl9ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj1BcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWUobik7cmV0dXJuIHJ9ZnVuY3Rpb24gbyh0KXt2YXIgZSxyO3JldHVybiBlPSg2NTUzNTx0KTw8NCxlfD1yPSgyNTU8KHQ+Pj49ZSkpPDwzLChlfD1yPSgxNTwodD4+Pj1yKSk8PDIpfChyPSgzPCh0Pj4+PXIpKTw8MSl8dD4+PnI+PjF9ZnVuY3Rpb24gcygpe2Z1bmN0aW9uIHQodCl7dDp7Zm9yKHZhciBlPTE2OzI2ODQzNTQ1Nj49ZTtlKj0xNilpZih0PD1lKXt0PWU7YnJlYWsgdH10PTB9cmV0dXJuIDA8KGU9cltvKHQpPj4yXSkubGVuZ3RoP2UucG9wKCk6bmV3IEFycmF5QnVmZmVyKHQpfWZ1bmN0aW9uIGUodCl7cltvKHQuYnl0ZUxlbmd0aCk+PjJdLnB1c2godCl9dmFyIHI9YSg4LGZ1bmN0aW9uKCl7cmV0dXJuW119KTtyZXR1cm57YWxsb2M6dCxmcmVlOmUsYWxsb2NUeXBlOmZ1bmN0aW9uKGUscil7dmFyIG49bnVsbDtzd2l0Y2goZSl7Y2FzZSA1MTIwOm49bmV3IEludDhBcnJheSh0KHIpLDAscik7YnJlYWs7Y2FzZSA1MTIxOm49bmV3IFVpbnQ4QXJyYXkodChyKSwwLHIpO2JyZWFrO2Nhc2UgNTEyMjpuPW5ldyBJbnQxNkFycmF5KHQoMipyKSwwLHIpO2JyZWFrO2Nhc2UgNTEyMzpuPW5ldyBVaW50MTZBcnJheSh0KDIqciksMCxyKTticmVhaztjYXNlIDUxMjQ6bj1uZXcgSW50MzJBcnJheSh0KDQqciksMCxyKTticmVhaztjYXNlIDUxMjU6bj1uZXcgVWludDMyQXJyYXkodCg0KnIpLDAscik7YnJlYWs7Y2FzZSA1MTI2Om49bmV3IEZsb2F0MzJBcnJheSh0KDQqciksMCxyKTticmVhaztkZWZhdWx0OnJldHVybiBudWxsfXJldHVybiBuLmxlbmd0aCE9PXI/bi5zdWJhcnJheSgwLHIpOm59LGZyZWVUeXBlOmZ1bmN0aW9uKHQpe2UodC5idWZmZXIpfX19ZnVuY3Rpb24gbCh0KXtyZXR1cm4hIXQmJlwib2JqZWN0XCI9PXR5cGVvZiB0JiZBcnJheS5pc0FycmF5KHQuc2hhcGUpJiZBcnJheS5pc0FycmF5KHQuc3RyaWRlKSYmXCJudW1iZXJcIj09dHlwZW9mIHQub2Zmc2V0JiZ0LnNoYXBlLmxlbmd0aD09PXQuc3RyaWRlLmxlbmd0aCYmKEFycmF5LmlzQXJyYXkodC5kYXRhKXx8Vyh0LmRhdGEpKX1mdW5jdGlvbiBjKHQsZSxyLG4saSxhKXtmb3IodmFyIG89MDtvPGU7KytvKWZvcih2YXIgcz10W29dLGw9MDtsPHI7KytsKWZvcih2YXIgYz1zW2xdLHU9MDt1PG47Kyt1KWlbYSsrXT1jW3VdfWZ1bmN0aW9uIHUodCl7cmV0dXJuIDB8JFtPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCldfWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoOysrcil0W3JdPWVbcl19ZnVuY3Rpb24gZih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9MCxsPTA7bDxyOysrbClmb3IodmFyIGM9MDtjPG47KytjKXRbcysrXT1lW2kqbCthKmMrb119ZnVuY3Rpb24gcCh0LGUscixuKXtmdW5jdGlvbiBpKGUpe3RoaXMuaWQ9YysrLHRoaXMuYnVmZmVyPXQuY3JlYXRlQnVmZmVyKCksdGhpcy50eXBlPWUsdGhpcy51c2FnZT0zNTA0NCx0aGlzLmJ5dGVMZW5ndGg9MCx0aGlzLmRpbWVuc2lvbj0xLHRoaXMuZHR5cGU9NTEyMSx0aGlzLnBlcnNpc3RlbnREYXRhPW51bGwsci5wcm9maWxlJiYodGhpcy5zdGF0cz17c2l6ZTowfSl9ZnVuY3Rpb24gYShlLHIsbil7ZS5ieXRlTGVuZ3RoPXIuYnl0ZUxlbmd0aCx0LmJ1ZmZlckRhdGEoZS50eXBlLHIsbil9ZnVuY3Rpb24gbyh0LGUscixuLGksbyl7aWYodC51c2FnZT1yLEFycmF5LmlzQXJyYXkoZSkpe2lmKHQuZHR5cGU9bnx8NTEyNiwwPGUubGVuZ3RoKWlmKEFycmF5LmlzQXJyYXkoZVswXSkpe2k9dHQoZSk7Zm9yKHZhciBzPW49MTtzPGkubGVuZ3RoOysrcyluKj1pW3NdO3QuZGltZW5zaW9uPW4sYSh0LGU9UShlLGksdC5kdHlwZSksciksbz90LnBlcnNpc3RlbnREYXRhPWU6Ry5mcmVlVHlwZShlKX1lbHNlXCJudW1iZXJcIj09dHlwZW9mIGVbMF0/KHQuZGltZW5zaW9uPWksaChpPUcuYWxsb2NUeXBlKHQuZHR5cGUsZS5sZW5ndGgpLGUpLGEodCxpLHIpLG8/dC5wZXJzaXN0ZW50RGF0YT1pOkcuZnJlZVR5cGUoaSkpOlcoZVswXSkmJih0LmRpbWVuc2lvbj1lWzBdLmxlbmd0aCx0LmR0eXBlPW58fHUoZVswXSl8fDUxMjYsYSh0LGU9UShlLFtlLmxlbmd0aCxlWzBdLmxlbmd0aF0sdC5kdHlwZSksciksbz90LnBlcnNpc3RlbnREYXRhPWU6Ry5mcmVlVHlwZShlKSl9ZWxzZSBpZihXKGUpKXQuZHR5cGU9bnx8dShlKSx0LmRpbWVuc2lvbj1pLGEodCxlLHIpLG8mJih0LnBlcnNpc3RlbnREYXRhPW5ldyBVaW50OEFycmF5KG5ldyBVaW50OEFycmF5KGUuYnVmZmVyKSkpO2Vsc2UgaWYobChlKSl7aT1lLnNoYXBlO3ZhciBjPWUuc3RyaWRlLHA9KHM9ZS5vZmZzZXQsMCksZD0wLGc9MCx2PTA7MT09PWkubGVuZ3RoPyhwPWlbMF0sZD0xLGc9Y1swXSx2PTApOjI9PT1pLmxlbmd0aCYmKHA9aVswXSxkPWlbMV0sZz1jWzBdLHY9Y1sxXSksdC5kdHlwZT1ufHx1KGUuZGF0YSl8fDUxMjYsdC5kaW1lbnNpb249ZCxmKGk9Ry5hbGxvY1R5cGUodC5kdHlwZSxwKmQpLGUuZGF0YSxwLGQsZyx2LHMpLGEodCxpLHIpLG8/dC5wZXJzaXN0ZW50RGF0YT1pOkcuZnJlZVR5cGUoaSl9fWZ1bmN0aW9uIHMocil7ZS5idWZmZXJDb3VudC0tO2Zvcih2YXIgaT0wO2k8bi5zdGF0ZS5sZW5ndGg7KytpKXt2YXIgYT1uLnN0YXRlW2ldO2EuYnVmZmVyPT09ciYmKHQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpLGEuYnVmZmVyPW51bGwpfXQuZGVsZXRlQnVmZmVyKHIuYnVmZmVyKSxyLmJ1ZmZlcj1udWxsLGRlbGV0ZSBwW3IuaWRdfXZhciBjPTAscD17fTtpLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7dC5iaW5kQnVmZmVyKHRoaXMudHlwZSx0aGlzLmJ1ZmZlcil9LGkucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtzKHRoaXMpfTt2YXIgZD1bXTtyZXR1cm4gci5wcm9maWxlJiYoZS5nZXRUb3RhbEJ1ZmZlclNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBPYmplY3Qua2V5cyhwKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QrPXBbZV0uc3RhdHMuc2l6ZX0pLHR9KSx7Y3JlYXRlOmZ1bmN0aW9uKG4sYSxjLGQpe2Z1bmN0aW9uIGcoZSl7dmFyIG49MzUwNDQsaT1udWxsLGE9MCxzPTAsYz0xO3JldHVybiBBcnJheS5pc0FycmF5KGUpfHxXKGUpfHxsKGUpP2k9ZTpcIm51bWJlclwiPT10eXBlb2YgZT9hPTB8ZTplJiYoXCJkYXRhXCJpbiBlJiYoaT1lLmRhdGEpLFwidXNhZ2VcImluIGUmJihuPUtbZS51c2FnZV0pLFwidHlwZVwiaW4gZSYmKHM9SltlLnR5cGVdKSxcImRpbWVuc2lvblwiaW4gZSYmKGM9MHxlLmRpbWVuc2lvbiksXCJsZW5ndGhcImluIGUmJihhPTB8ZS5sZW5ndGgpKSx2LmJpbmQoKSxpP28odixpLG4scyxjLGQpOihhJiZ0LmJ1ZmZlckRhdGEodi50eXBlLGEsbiksdi5kdHlwZT1zfHw1MTIxLHYudXNhZ2U9bix2LmRpbWVuc2lvbj1jLHYuYnl0ZUxlbmd0aD1hKSxyLnByb2ZpbGUmJih2LnN0YXRzLnNpemU9di5ieXRlTGVuZ3RoKmV0W3YuZHR5cGVdKSxnfWUuYnVmZmVyQ291bnQrKzt2YXIgdj1uZXcgaShhKTtyZXR1cm4gcFt2LmlkXT12LGN8fGcobiksZy5fcmVnbFR5cGU9XCJidWZmZXJcIixnLl9idWZmZXI9dixnLnN1YmRhdGE9ZnVuY3Rpb24oZSxyKXt2YXIgbixpPTB8KHJ8fDApO2lmKHYuYmluZCgpLFcoZSkpdC5idWZmZXJTdWJEYXRhKHYudHlwZSxpLGUpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlKSl7aWYoMDxlLmxlbmd0aClpZihcIm51bWJlclwiPT10eXBlb2YgZVswXSl7dmFyIGE9Ry5hbGxvY1R5cGUodi5kdHlwZSxlLmxlbmd0aCk7aChhLGUpLHQuYnVmZmVyU3ViRGF0YSh2LnR5cGUsaSxhKSxHLmZyZWVUeXBlKGEpfWVsc2UoQXJyYXkuaXNBcnJheShlWzBdKXx8VyhlWzBdKSkmJihuPXR0KGUpLGE9UShlLG4sdi5kdHlwZSksdC5idWZmZXJTdWJEYXRhKHYudHlwZSxpLGEpLEcuZnJlZVR5cGUoYSkpfWVsc2UgaWYobChlKSl7bj1lLnNoYXBlO3ZhciBvPWUuc3RyaWRlLHM9YT0wLGM9MCxwPTA7MT09PW4ubGVuZ3RoPyhhPW5bMF0scz0xLGM9b1swXSxwPTApOjI9PT1uLmxlbmd0aCYmKGE9blswXSxzPW5bMV0sYz1vWzBdLHA9b1sxXSksbj1BcnJheS5pc0FycmF5KGUuZGF0YSk/di5kdHlwZTp1KGUuZGF0YSksZihuPUcuYWxsb2NUeXBlKG4sYSpzKSxlLmRhdGEsYSxzLGMscCxlLm9mZnNldCksdC5idWZmZXJTdWJEYXRhKHYudHlwZSxpLG4pLEcuZnJlZVR5cGUobil9cmV0dXJuIGd9LHIucHJvZmlsZSYmKGcuc3RhdHM9di5zdGF0cyksZy5kZXN0cm95PWZ1bmN0aW9uKCl7cyh2KX0sZ30sY3JlYXRlU3RyZWFtOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZC5wb3AoKTtyZXR1cm4gcnx8KHI9bmV3IGkodCkpLHIuYmluZCgpLG8ocixlLDM1MDQwLDAsMSwhMSkscn0sZGVzdHJveVN0cmVhbTpmdW5jdGlvbih0KXtkLnB1c2godCl9LGNsZWFyOmZ1bmN0aW9uKCl7WChwKS5mb3JFYWNoKHMpLGQuZm9yRWFjaChzKX0sZ2V0QnVmZmVyOmZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Ll9idWZmZXIgaW5zdGFuY2VvZiBpP3QuX2J1ZmZlcjpudWxsfSxyZXN0b3JlOmZ1bmN0aW9uKCl7WChwKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuYnVmZmVyPXQuY3JlYXRlQnVmZmVyKCksdC5iaW5kQnVmZmVyKGUudHlwZSxlLmJ1ZmZlciksdC5idWZmZXJEYXRhKGUudHlwZSxlLnBlcnNpc3RlbnREYXRhfHxlLmJ5dGVMZW5ndGgsZS51c2FnZSl9KX0sX2luaXRCdWZmZXI6b319ZnVuY3Rpb24gZCh0LGUscixuKXtmdW5jdGlvbiBpKHQpe3RoaXMuaWQ9YysrLHNbdGhpcy5pZF09dGhpcyx0aGlzLmJ1ZmZlcj10LHRoaXMucHJpbVR5cGU9NCx0aGlzLnR5cGU9dGhpcy52ZXJ0Q291bnQ9MH1mdW5jdGlvbiBhKG4saSxhLG8scyxjLHUpe2lmKG4uYnVmZmVyLmJpbmQoKSxpKXt2YXIgaD11O3V8fFcoaSkmJighbChpKXx8VyhpLmRhdGEpKXx8KGg9ZS5vZXNfZWxlbWVudF9pbmRleF91aW50PzUxMjU6NTEyMyksci5faW5pdEJ1ZmZlcihuLmJ1ZmZlcixpLGEsaCwzKX1lbHNlIHQuYnVmZmVyRGF0YSgzNDk2MyxjLGEpLG4uYnVmZmVyLmR0eXBlPWh8fDUxMjEsbi5idWZmZXIudXNhZ2U9YSxuLmJ1ZmZlci5kaW1lbnNpb249MyxuLmJ1ZmZlci5ieXRlTGVuZ3RoPWM7aWYoaD11LCF1KXtzd2l0Y2gobi5idWZmZXIuZHR5cGUpe2Nhc2UgNTEyMTpjYXNlIDUxMjA6aD01MTIxO2JyZWFrO2Nhc2UgNTEyMzpjYXNlIDUxMjI6aD01MTIzO2JyZWFrO2Nhc2UgNTEyNTpjYXNlIDUxMjQ6aD01MTI1fW4uYnVmZmVyLmR0eXBlPWh9bi50eXBlPWgsMD4oaT1zKSYmKGk9bi5idWZmZXIuYnl0ZUxlbmd0aCw1MTIzPT09aD9pPj49MTo1MTI1PT09aCYmKGk+Pj0yKSksbi52ZXJ0Q291bnQ9aSxpPW8sMD5vJiYoaT00LDE9PT0obz1uLmJ1ZmZlci5kaW1lbnNpb24pJiYoaT0wKSwyPT09byYmKGk9MSksMz09PW8mJihpPTQpKSxuLnByaW1UeXBlPWl9ZnVuY3Rpb24gbyh0KXtuLmVsZW1lbnRzQ291bnQtLSxkZWxldGUgc1t0LmlkXSx0LmJ1ZmZlci5kZXN0cm95KCksdC5idWZmZXI9bnVsbH12YXIgcz17fSxjPTAsdT17dWludDg6NTEyMSx1aW50MTY6NTEyM307ZS5vZXNfZWxlbWVudF9pbmRleF91aW50JiYodS51aW50MzI9NTEyNSksaS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe3RoaXMuYnVmZmVyLmJpbmQoKX07dmFyIGg9W107cmV0dXJue2NyZWF0ZTpmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHModCl7aWYodClpZihcIm51bWJlclwiPT10eXBlb2YgdCljKHQpLGgucHJpbVR5cGU9NCxoLnZlcnRDb3VudD0wfHQsaC50eXBlPTUxMjE7ZWxzZXt2YXIgZT1udWxsLHI9MzUwNDQsbj0tMSxpPS0xLG89MCxmPTA7QXJyYXkuaXNBcnJheSh0KXx8Vyh0KXx8bCh0KT9lPXQ6KFwiZGF0YVwiaW4gdCYmKGU9dC5kYXRhKSxcInVzYWdlXCJpbiB0JiYocj1LW3QudXNhZ2VdKSxcInByaW1pdGl2ZVwiaW4gdCYmKG49cnRbdC5wcmltaXRpdmVdKSxcImNvdW50XCJpbiB0JiYoaT0wfHQuY291bnQpLFwidHlwZVwiaW4gdCYmKGY9dVt0LnR5cGVdKSxcImxlbmd0aFwiaW4gdD9vPTB8dC5sZW5ndGg6KG89aSw1MTIzPT09Znx8NTEyMj09PWY/byo9Mjo1MTI1IT09ZiYmNTEyNCE9PWZ8fChvKj00KSkpLGEoaCxlLHIsbixpLG8sZil9ZWxzZSBjKCksaC5wcmltVHlwZT00LGgudmVydENvdW50PTAsaC50eXBlPTUxMjE7cmV0dXJuIHN9dmFyIGM9ci5jcmVhdGUobnVsbCwzNDk2MywhMCksaD1uZXcgaShjLl9idWZmZXIpO3JldHVybiBuLmVsZW1lbnRzQ291bnQrKyxzKHQpLHMuX3JlZ2xUeXBlPVwiZWxlbWVudHNcIixzLl9lbGVtZW50cz1oLHMuc3ViZGF0YT1mdW5jdGlvbih0LGUpe3JldHVybiBjLnN1YmRhdGEodCxlKSxzfSxzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtvKGgpfSxzfSxjcmVhdGVTdHJlYW06ZnVuY3Rpb24odCl7dmFyIGU9aC5wb3AoKTtyZXR1cm4gZXx8KGU9bmV3IGkoci5jcmVhdGUobnVsbCwzNDk2MywhMCwhMSkuX2J1ZmZlcikpLGEoZSx0LDM1MDQwLC0xLC0xLDAsMCksZX0sZGVzdHJveVN0cmVhbTpmdW5jdGlvbih0KXtoLnB1c2godCl9LGdldEVsZW1lbnRzOmZ1bmN0aW9uKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJnQuX2VsZW1lbnRzIGluc3RhbmNlb2YgaT90Ll9lbGVtZW50czpudWxsfSxjbGVhcjpmdW5jdGlvbigpe1gocykuZm9yRWFjaChvKX19fWZ1bmN0aW9uIGcodCl7Zm9yKHZhciBlPUcuYWxsb2NUeXBlKDUxMjMsdC5sZW5ndGgpLHI9MDtyPHQubGVuZ3RoOysrcilpZihpc05hTih0W3JdKSllW3JdPTY1NTM1O2Vsc2UgaWYoMS8wPT09dFtyXSllW3JdPTMxNzQ0O2Vsc2UgaWYoLTEvMD09PXRbcl0pZVtyXT02NDUxMjtlbHNle250WzBdPXRbcl07dmFyIG49KGE9aXRbMF0pPj4+MzE8PDE1LGk9KGE8PDE+Pj4yNCktMTI3LGE9YT4+MTMmMTAyMztlW3JdPS0yND5pP246LTE0Pmk/bisoYSsxMDI0Pj4tMTQtaSk6MTU8aT9uKzMxNzQ0Om4rKGkrMTU8PDEwKSthfXJldHVybiBlfWZ1bmN0aW9uIHYodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl8fFcodCl9ZnVuY3Rpb24gbSh0KXtyZXR1cm5cIltvYmplY3QgXCIrdCtcIl1cIn1mdW5jdGlvbiB5KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiYoMD09PXQubGVuZ3RofHxcIm51bWJlclwiPT10eXBlb2YgdFswXSl9ZnVuY3Rpb24geCh0KXtyZXR1cm4hKCFBcnJheS5pc0FycmF5KHQpfHwwPT09dC5sZW5ndGh8fCF2KHRbMF0pKX1mdW5jdGlvbiBiKHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gXyh0KXtpZighdClyZXR1cm4hMTt2YXIgZT1iKHQpO3JldHVybiAwPD1wdC5pbmRleE9mKGUpfHwoeSh0KXx8eCh0KXx8bCh0KSl9ZnVuY3Rpb24gdyh0LGUpezM2MTkzPT09dC50eXBlPyh0LmRhdGE9ZyhlKSxHLmZyZWVUeXBlKGUpKTp0LmRhdGE9ZX1mdW5jdGlvbiBrKHQsZSxyLG4saSxhKXtpZih0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBndFt0XT9ndFt0XTpzdFt0XSpkdFtlXSxhJiYodCo9NiksaSl7Zm9yKG49MDsxPD1yOyluKz10KnIqcixyLz0yO3JldHVybiBufXJldHVybiB0KnIqbn1mdW5jdGlvbiBBKHQsZSxyLG4saSxhLG8pe2Z1bmN0aW9uIHMoKXt0aGlzLmZvcm1hdD10aGlzLmludGVybmFsZm9ybWF0PTY0MDgsdGhpcy50eXBlPTUxMjEsdGhpcy5mbGlwWT10aGlzLnByZW11bHRpcGx5QWxwaGE9dGhpcy5jb21wcmVzc2VkPSExLHRoaXMudW5wYWNrQWxpZ25tZW50PTEsdGhpcy5jb2xvclNwYWNlPTM3NDQ0LHRoaXMuY2hhbm5lbHM9dGhpcy5oZWlnaHQ9dGhpcy53aWR0aD0wfWZ1bmN0aW9uIGModCxlKXt0LmludGVybmFsZm9ybWF0PWUuaW50ZXJuYWxmb3JtYXQsdC5mb3JtYXQ9ZS5mb3JtYXQsdC50eXBlPWUudHlwZSx0LmNvbXByZXNzZWQ9ZS5jb21wcmVzc2VkLHQucHJlbXVsdGlwbHlBbHBoYT1lLnByZW11bHRpcGx5QWxwaGEsdC5mbGlwWT1lLmZsaXBZLHQudW5wYWNrQWxpZ25tZW50PWUudW5wYWNrQWxpZ25tZW50LHQuY29sb3JTcGFjZT1lLmNvbG9yU3BhY2UsdC53aWR0aD1lLndpZHRoLHQuaGVpZ2h0PWUuaGVpZ2h0LHQuY2hhbm5lbHM9ZS5jaGFubmVsc31mdW5jdGlvbiB1KHQsZSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGUmJmUpe1wicHJlbXVsdGlwbHlBbHBoYVwiaW4gZSYmKHQucHJlbXVsdGlwbHlBbHBoYT1lLnByZW11bHRpcGx5QWxwaGEpLFwiZmxpcFlcImluIGUmJih0LmZsaXBZPWUuZmxpcFkpLFwiYWxpZ25tZW50XCJpbiBlJiYodC51bnBhY2tBbGlnbm1lbnQ9ZS5hbGlnbm1lbnQpLFwiY29sb3JTcGFjZVwiaW4gZSYmKHQuY29sb3JTcGFjZT1xW2UuY29sb3JTcGFjZV0pLFwidHlwZVwiaW4gZSYmKHQudHlwZT1IW2UudHlwZV0pO3ZhciByPXQud2lkdGgsbj10LmhlaWdodCxpPXQuY2hhbm5lbHMsYT0hMTtcInNoYXBlXCJpbiBlPyhyPWUuc2hhcGVbMF0sbj1lLnNoYXBlWzFdLDM9PT1lLnNoYXBlLmxlbmd0aCYmKGk9ZS5zaGFwZVsyXSxhPSEwKSk6KFwicmFkaXVzXCJpbiBlJiYocj1uPWUucmFkaXVzKSxcIndpZHRoXCJpbiBlJiYocj1lLndpZHRoKSxcImhlaWdodFwiaW4gZSYmKG49ZS5oZWlnaHQpLFwiY2hhbm5lbHNcImluIGUmJihpPWUuY2hhbm5lbHMsYT0hMCkpLHQud2lkdGg9MHxyLHQuaGVpZ2h0PTB8bix0LmNoYW5uZWxzPTB8aSxyPSExLFwiZm9ybWF0XCJpbiBlJiYocj1lLmZvcm1hdCxuPXQuaW50ZXJuYWxmb3JtYXQ9WVtyXSx0LmZvcm1hdD1wdFtuXSxyIGluIEgmJiEoXCJ0eXBlXCJpbiBlKSYmKHQudHlwZT1IW3JdKSxyIGluIEomJih0LmNvbXByZXNzZWQ9ITApLHI9ITApLCFhJiZyP3QuY2hhbm5lbHM9c3RbdC5mb3JtYXRdOmEmJiFyJiZ0LmNoYW5uZWxzIT09b3RbdC5mb3JtYXRdJiYodC5mb3JtYXQ9dC5pbnRlcm5hbGZvcm1hdD1vdFt0LmNoYW5uZWxzXSl9fWZ1bmN0aW9uIGgoZSl7dC5waXhlbFN0b3JlaSgzNzQ0MCxlLmZsaXBZKSx0LnBpeGVsU3RvcmVpKDM3NDQxLGUucHJlbXVsdGlwbHlBbHBoYSksdC5waXhlbFN0b3JlaSgzNzQ0MyxlLmNvbG9yU3BhY2UpLHQucGl4ZWxTdG9yZWkoMzMxNyxlLnVucGFja0FsaWdubWVudCl9ZnVuY3Rpb24gZigpe3MuY2FsbCh0aGlzKSx0aGlzLnlPZmZzZXQ9dGhpcy54T2Zmc2V0PTAsdGhpcy5kYXRhPW51bGwsdGhpcy5uZWVkc0ZyZWU9ITEsdGhpcy5lbGVtZW50PW51bGwsdGhpcy5uZWVkc0NvcHk9ITF9ZnVuY3Rpb24gcCh0LGUpe3ZhciByPW51bGw7aWYoXyhlKT9yPWU6ZSYmKHUodCxlKSxcInhcImluIGUmJih0LnhPZmZzZXQ9MHxlLngpLFwieVwiaW4gZSYmKHQueU9mZnNldD0wfGUueSksXyhlLmRhdGEpJiYocj1lLmRhdGEpKSxlLmNvcHkpe3ZhciBuPWkudmlld3BvcnRXaWR0aCxhPWkudmlld3BvcnRIZWlnaHQ7dC53aWR0aD10LndpZHRofHxuLXQueE9mZnNldCx0LmhlaWdodD10LmhlaWdodHx8YS10LnlPZmZzZXQsdC5uZWVkc0NvcHk9ITB9ZWxzZSBpZihyKXtpZihXKHIpKXQuY2hhbm5lbHM9dC5jaGFubmVsc3x8NCx0LmRhdGE9cixcInR5cGVcImluIGV8fDUxMjEhPT10LnR5cGV8fCh0LnR5cGU9MHwkW09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyKV0pO2Vsc2UgaWYoeShyKSl7c3dpdGNoKHQuY2hhbm5lbHM9dC5jaGFubmVsc3x8NCxhPShuPXIpLmxlbmd0aCx0LnR5cGUpe2Nhc2UgNTEyMTpjYXNlIDUxMjM6Y2FzZSA1MTI1OmNhc2UgNTEyNjooYT1HLmFsbG9jVHlwZSh0LnR5cGUsYSkpLnNldChuKSx0LmRhdGE9YTticmVhaztjYXNlIDM2MTkzOnQuZGF0YT1nKG4pfXQuYWxpZ25tZW50PTEsdC5uZWVkc0ZyZWU9ITB9ZWxzZSBpZihsKHIpKXtuPXIuZGF0YSxBcnJheS5pc0FycmF5KG4pfHw1MTIxIT09dC50eXBlfHwodC50eXBlPTB8JFtPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobildKTthPXIuc2hhcGU7dmFyIG8scyxjLGgsZj1yLnN0cmlkZTszPT09YS5sZW5ndGg/KGM9YVsyXSxoPWZbMl0pOmg9Yz0xLG89YVswXSxzPWFbMV0sYT1mWzBdLGY9ZlsxXSx0LmFsaWdubWVudD0xLHQud2lkdGg9byx0LmhlaWdodD1zLHQuY2hhbm5lbHM9Yyx0LmZvcm1hdD10LmludGVybmFsZm9ybWF0PW90W2NdLHQubmVlZHNGcmVlPSEwLG89aCxyPXIub2Zmc2V0LGM9dC53aWR0aCxoPXQuaGVpZ2h0LHM9dC5jaGFubmVscztmb3IodmFyIHA9Ry5hbGxvY1R5cGUoMzYxOTM9PT10LnR5cGU/NTEyNjp0LnR5cGUsYypoKnMpLGQ9MCxtPTA7bTxoOysrbSlmb3IodmFyIGs9MDtrPGM7KytrKWZvcih2YXIgQT0wO0E8czsrK0EpcFtkKytdPW5bYSprK2YqbStvKkErcl07dyh0LHApfWVsc2UgaWYoYihyKT09PWx0fHxiKHIpPT09Y3QpYihyKT09PWx0P3QuZWxlbWVudD1yOnQuZWxlbWVudD1yLmNhbnZhcyx0LndpZHRoPXQuZWxlbWVudC53aWR0aCx0LmhlaWdodD10LmVsZW1lbnQuaGVpZ2h0LHQuY2hhbm5lbHM9NDtlbHNlIGlmKGIocik9PT11dCl0LmVsZW1lbnQ9cix0LndpZHRoPXIud2lkdGgsdC5oZWlnaHQ9ci5oZWlnaHQsdC5jaGFubmVscz00O2Vsc2UgaWYoYihyKT09PWh0KXQuZWxlbWVudD1yLHQud2lkdGg9ci5uYXR1cmFsV2lkdGgsdC5oZWlnaHQ9ci5uYXR1cmFsSGVpZ2h0LHQuY2hhbm5lbHM9NDtlbHNlIGlmKGIocik9PT1mdCl0LmVsZW1lbnQ9cix0LndpZHRoPXIudmlkZW9XaWR0aCx0LmhlaWdodD1yLnZpZGVvSGVpZ2h0LHQuY2hhbm5lbHM9NDtlbHNlIGlmKHgocikpe2ZvcihuPXQud2lkdGh8fHJbMF0ubGVuZ3RoLGE9dC5oZWlnaHR8fHIubGVuZ3RoLGY9dC5jaGFubmVscyxmPXYoclswXVswXSk/Znx8clswXVswXS5sZW5ndGg6Znx8MSxvPVouc2hhcGUociksYz0xLGg9MDtoPG8ubGVuZ3RoOysraCljKj1vW2hdO2M9Ry5hbGxvY1R5cGUoMzYxOTM9PT10LnR5cGU/NTEyNjp0LnR5cGUsYyksWi5mbGF0dGVuKHIsbyxcIlwiLGMpLHcodCxjKSx0LmFsaWdubWVudD0xLHQud2lkdGg9bix0LmhlaWdodD1hLHQuY2hhbm5lbHM9Zix0LmZvcm1hdD10LmludGVybmFsZm9ybWF0PW90W2ZdLHQubmVlZHNGcmVlPSEwfX1lbHNlIHQud2lkdGg9dC53aWR0aHx8MSx0LmhlaWdodD10LmhlaWdodHx8MSx0LmNoYW5uZWxzPXQuY2hhbm5lbHN8fDR9ZnVuY3Rpb24gZChlLHIsaSxhLG8pe3ZhciBzPWUuZWxlbWVudCxsPWUuZGF0YSxjPWUuaW50ZXJuYWxmb3JtYXQsdT1lLmZvcm1hdCxmPWUudHlwZSxwPWUud2lkdGgsZD1lLmhlaWdodDtoKGUpLHM/dC50ZXhTdWJJbWFnZTJEKHIsbyxpLGEsdSxmLHMpOmUuY29tcHJlc3NlZD90LmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKHIsbyxpLGEsYyxwLGQsbCk6ZS5uZWVkc0NvcHk/KG4oKSx0LmNvcHlUZXhTdWJJbWFnZTJEKHIsbyxpLGEsZS54T2Zmc2V0LGUueU9mZnNldCxwLGQpKTp0LnRleFN1YkltYWdlMkQocixvLGksYSxwLGQsdSxmLGwpfWZ1bmN0aW9uIG0oKXtyZXR1cm4gZHQucG9wKCl8fG5ldyBmfWZ1bmN0aW9uIEEodCl7dC5uZWVkc0ZyZWUmJkcuZnJlZVR5cGUodC5kYXRhKSxmLmNhbGwodCksZHQucHVzaCh0KX1mdW5jdGlvbiBUKCl7cy5jYWxsKHRoaXMpLHRoaXMuZ2VuTWlwbWFwcz0hMSx0aGlzLm1pcG1hcEhpbnQ9NDM1Mix0aGlzLm1pcG1hc2s9MCx0aGlzLmltYWdlcz1BcnJheSgxNil9ZnVuY3Rpb24gTSh0LGUscil7dmFyIG49dC5pbWFnZXNbMF09bSgpO3QubWlwbWFzaz0xLG4ud2lkdGg9dC53aWR0aD1lLG4uaGVpZ2h0PXQuaGVpZ2h0PXIsbi5jaGFubmVscz10LmNoYW5uZWxzPTR9ZnVuY3Rpb24gUyh0LGUpe3ZhciByPW51bGw7aWYoXyhlKSljKHI9dC5pbWFnZXNbMF09bSgpLHQpLHAocixlKSx0Lm1pcG1hc2s9MTtlbHNlIGlmKHUodCxlKSxBcnJheS5pc0FycmF5KGUubWlwbWFwKSlmb3IodmFyIG49ZS5taXBtYXAsaT0wO2k8bi5sZW5ndGg7KytpKWMocj10LmltYWdlc1tpXT1tKCksdCksci53aWR0aD4+PWksci5oZWlnaHQ+Pj1pLHAocixuW2ldKSx0Lm1pcG1hc2t8PTE8PGk7ZWxzZSBjKHI9dC5pbWFnZXNbMF09bSgpLHQpLHAocixlKSx0Lm1pcG1hc2s9MTtjKHQsdC5pbWFnZXNbMF0pfWZ1bmN0aW9uIEUoZSxyKXtmb3IodmFyIGk9ZS5pbWFnZXMsYT0wO2E8aS5sZW5ndGgmJmlbYV07KythKXt2YXIgbz1pW2FdLHM9cixsPWEsYz1vLmVsZW1lbnQsdT1vLmRhdGEsZj1vLmludGVybmFsZm9ybWF0LHA9by5mb3JtYXQsZD1vLnR5cGUsZz1vLndpZHRoLHY9by5oZWlnaHQsbT1vLmNoYW5uZWxzO2gobyksYz90LnRleEltYWdlMkQocyxsLHAscCxkLGMpOm8uY29tcHJlc3NlZD90LmNvbXByZXNzZWRUZXhJbWFnZTJEKHMsbCxmLGcsdiwwLHUpOm8ubmVlZHNDb3B5PyhuKCksdC5jb3B5VGV4SW1hZ2UyRChzLGwscCxvLnhPZmZzZXQsby55T2Zmc2V0LGcsdiwwKSk6KChvPSF1KSYmKHU9Ry56ZXJvLmFsbG9jVHlwZShkLGcqdiptKSksdC50ZXhJbWFnZTJEKHMsbCxwLGcsdiwwLHAsZCx1KSxvJiZ1JiZHLnplcm8uZnJlZVR5cGUodSkpfX1mdW5jdGlvbiBDKCl7dmFyIHQ9Z3QucG9wKCl8fG5ldyBUO3MuY2FsbCh0KTtmb3IodmFyIGU9dC5taXBtYXNrPTA7MTY+ZTsrK2UpdC5pbWFnZXNbZV09bnVsbDtyZXR1cm4gdH1mdW5jdGlvbiBMKHQpe2Zvcih2YXIgZT10LmltYWdlcyxyPTA7cjxlLmxlbmd0aDsrK3IpZVtyXSYmQShlW3JdKSxlW3JdPW51bGw7Z3QucHVzaCh0KX1mdW5jdGlvbiB6KCl7dGhpcy5tYWdGaWx0ZXI9dGhpcy5taW5GaWx0ZXI9OTcyOCx0aGlzLndyYXBUPXRoaXMud3JhcFM9MzMwNzEsdGhpcy5hbmlzb3Ryb3BpYz0xLHRoaXMuZ2VuTWlwbWFwcz0hMSx0aGlzLm1pcG1hcEhpbnQ9NDM1Mn1mdW5jdGlvbiBPKHQsZSl7XCJtaW5cImluIGUmJih0Lm1pbkZpbHRlcj1VW2UubWluXSwwPD1hdC5pbmRleE9mKHQubWluRmlsdGVyKSYmIShcImZhY2VzXCJpbiBlKSYmKHQuZ2VuTWlwbWFwcz0hMCkpLFwibWFnXCJpbiBlJiYodC5tYWdGaWx0ZXI9VltlLm1hZ10pO3ZhciByPXQud3JhcFMsbj10LndyYXBUO2lmKFwid3JhcFwiaW4gZSl7dmFyIGk9ZS53cmFwO1wic3RyaW5nXCI9PXR5cGVvZiBpP3I9bj1OW2ldOkFycmF5LmlzQXJyYXkoaSkmJihyPU5baVswXV0sbj1OW2lbMV1dKX1lbHNlXCJ3cmFwU1wiaW4gZSYmKHI9TltlLndyYXBTXSksXCJ3cmFwVFwiaW4gZSYmKG49TltlLndyYXBUXSk7aWYodC53cmFwUz1yLHQud3JhcFQ9bixcImFuaXNvdHJvcGljXCJpbiBlJiYodC5hbmlzb3Ryb3BpYz1lLmFuaXNvdHJvcGljKSxcIm1pcG1hcFwiaW4gZSl7c3dpdGNoKHI9ITEsdHlwZW9mIGUubWlwbWFwKXtjYXNlXCJzdHJpbmdcIjp0Lm1pcG1hcEhpbnQ9QltlLm1pcG1hcF0scj10Lmdlbk1pcG1hcHM9ITA7YnJlYWs7Y2FzZVwiYm9vbGVhblwiOnI9dC5nZW5NaXBtYXBzPWUubWlwbWFwO2JyZWFrO2Nhc2VcIm9iamVjdFwiOnQuZ2VuTWlwbWFwcz0hMSxyPSEwfSFyfHxcIm1pblwiaW4gZXx8KHQubWluRmlsdGVyPTk5ODQpfX1mdW5jdGlvbiBJKHIsbil7dC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDEsci5taW5GaWx0ZXIpLHQudGV4UGFyYW1ldGVyaShuLDEwMjQwLHIubWFnRmlsdGVyKSx0LnRleFBhcmFtZXRlcmkobiwxMDI0MixyLndyYXBTKSx0LnRleFBhcmFtZXRlcmkobiwxMDI0MyxyLndyYXBUKSxlLmV4dF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyYmdC50ZXhQYXJhbWV0ZXJpKG4sMzQwNDYsci5hbmlzb3Ryb3BpYyksci5nZW5NaXBtYXBzJiYodC5oaW50KDMzMTcwLHIubWlwbWFwSGludCksdC5nZW5lcmF0ZU1pcG1hcChuKSl9ZnVuY3Rpb24gRChlKXtzLmNhbGwodGhpcyksdGhpcy5taXBtYXNrPTAsdGhpcy5pbnRlcm5hbGZvcm1hdD02NDA4LHRoaXMuaWQ9dnQrKyx0aGlzLnJlZkNvdW50PTEsdGhpcy50YXJnZXQ9ZSx0aGlzLnRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksdGhpcy51bml0PS0xLHRoaXMuYmluZENvdW50PTAsdGhpcy50ZXhJbmZvPW5ldyB6LG8ucHJvZmlsZSYmKHRoaXMuc3RhdHM9e3NpemU6MH0pfWZ1bmN0aW9uIFAoZSl7dC5hY3RpdmVUZXh0dXJlKDMzOTg0KSx0LmJpbmRUZXh0dXJlKGUudGFyZ2V0LGUudGV4dHVyZSl9ZnVuY3Rpb24gUigpe3ZhciBlPXh0WzBdO2U/dC5iaW5kVGV4dHVyZShlLnRhcmdldCxlLnRleHR1cmUpOnQuYmluZFRleHR1cmUoMzU1MyxudWxsKX1mdW5jdGlvbiBGKGUpe3ZhciByPWUudGV4dHVyZSxuPWUudW5pdCxpPWUudGFyZ2V0OzA8PW4mJih0LmFjdGl2ZVRleHR1cmUoMzM5ODQrbiksdC5iaW5kVGV4dHVyZShpLG51bGwpLHh0W25dPW51bGwpLHQuZGVsZXRlVGV4dHVyZShyKSxlLnRleHR1cmU9bnVsbCxlLnBhcmFtcz1udWxsLGUucGl4ZWxzPW51bGwsZS5yZWZDb3VudD0wLGRlbGV0ZSBtdFtlLmlkXSxhLnRleHR1cmVDb3VudC0tfXZhciBCPXtcImRvbid0IGNhcmVcIjo0MzUyLFwiZG9udCBjYXJlXCI6NDM1MixuaWNlOjQzNTQsZmFzdDo0MzUzfSxOPXtyZXBlYXQ6MTA0OTcsY2xhbXA6MzMwNzEsbWlycm9yOjMzNjQ4fSxWPXtuZWFyZXN0Ojk3MjgsbGluZWFyOjk3Mjl9LFU9aih7bWlwbWFwOjk5ODcsXCJuZWFyZXN0IG1pcG1hcCBuZWFyZXN0XCI6OTk4NCxcImxpbmVhciBtaXBtYXAgbmVhcmVzdFwiOjk5ODUsXCJuZWFyZXN0IG1pcG1hcCBsaW5lYXJcIjo5OTg2LFwibGluZWFyIG1pcG1hcCBsaW5lYXJcIjo5OTg3fSxWKSxxPXtub25lOjAsYnJvd3NlcjozNzQ0NH0sSD17dWludDg6NTEyMSxyZ2JhNDozMjgxOSxyZ2I1NjU6MzM2MzUsXCJyZ2I1IGExXCI6MzI4MjB9LFk9e2FscGhhOjY0MDYsbHVtaW5hbmNlOjY0MDksXCJsdW1pbmFuY2UgYWxwaGFcIjo2NDEwLHJnYjo2NDA3LHJnYmE6NjQwOCxyZ2JhNDozMjg1NCxcInJnYjUgYTFcIjozMjg1NSxyZ2I1NjU6MzYxOTR9LEo9e307ZS5leHRfc3JnYiYmKFkuc3JnYj0zNTkwNCxZLnNyZ2JhPTM1OTA2KSxlLm9lc190ZXh0dXJlX2Zsb2F0JiYoSC5mbG9hdDMyPUguZmxvYXQ9NTEyNiksZS5vZXNfdGV4dHVyZV9oYWxmX2Zsb2F0JiYoSC5mbG9hdDE2PUhbXCJoYWxmIGZsb2F0XCJdPTM2MTkzKSxlLndlYmdsX2RlcHRoX3RleHR1cmUmJihqKFkse2RlcHRoOjY0MDIsXCJkZXB0aCBzdGVuY2lsXCI6MzQwNDF9KSxqKEgse3VpbnQxNjo1MTIzLHVpbnQzMjo1MTI1LFwiZGVwdGggc3RlbmNpbFwiOjM0MDQyfSkpLGUud2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMmJmooSix7XCJyZ2IgczN0YyBkeHQxXCI6MzM3NzYsXCJyZ2JhIHMzdGMgZHh0MVwiOjMzNzc3LFwicmdiYSBzM3RjIGR4dDNcIjozMzc3OCxcInJnYmEgczN0YyBkeHQ1XCI6MzM3Nzl9KSxlLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9hdGMmJmooSix7XCJyZ2IgYXRjXCI6MzU5ODYsXCJyZ2JhIGF0YyBleHBsaWNpdCBhbHBoYVwiOjM1OTg3LFwicmdiYSBhdGMgaW50ZXJwb2xhdGVkIGFscGhhXCI6MzQ3OTh9KSxlLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyYmaihKLHtcInJnYiBwdnJ0YyA0YnBwdjFcIjozNTg0MCxcInJnYiBwdnJ0YyAyYnBwdjFcIjozNTg0MSxcInJnYmEgcHZydGMgNGJwcHYxXCI6MzU4NDIsXCJyZ2JhIHB2cnRjIDJicHB2MVwiOjM1ODQzfSksZS53ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfZXRjMSYmKEpbXCJyZ2IgZXRjMVwiXT0zNjE5Nik7dmFyIEs9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodC5nZXRQYXJhbWV0ZXIoMzQ0NjcpKTtPYmplY3Qua2V5cyhKKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPUpbdF07MDw9Sy5pbmRleE9mKGUpJiYoWVt0XT1lKX0pO3ZhciBRPU9iamVjdC5rZXlzKFkpO3IudGV4dHVyZUZvcm1hdHM9UTt2YXIgdHQ9W107T2JqZWN0LmtleXMoWSkuZm9yRWFjaChmdW5jdGlvbih0KXt0dFtZW3RdXT10fSk7dmFyIGV0PVtdO09iamVjdC5rZXlzKEgpLmZvckVhY2goZnVuY3Rpb24odCl7ZXRbSFt0XV09dH0pO3ZhciBydD1bXTtPYmplY3Qua2V5cyhWKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3J0W1ZbdF1dPXR9KTt2YXIgbnQ9W107T2JqZWN0LmtleXMoVSkuZm9yRWFjaChmdW5jdGlvbih0KXtudFtVW3RdXT10fSk7dmFyIGl0PVtdO09iamVjdC5rZXlzKE4pLmZvckVhY2goZnVuY3Rpb24odCl7aXRbTlt0XV09dH0pO3ZhciBwdD1RLnJlZHVjZShmdW5jdGlvbih0LGUpe3ZhciByPVlbZV07cmV0dXJuIDY0MDk9PT1yfHw2NDA2PT09cnx8NjQwOT09PXJ8fDY0MTA9PT1yfHw2NDAyPT09cnx8MzQwNDE9PT1yP3Rbcl09cjozMjg1NT09PXJ8fDA8PWUuaW5kZXhPZihcInJnYmFcIik/dFtyXT02NDA4OnRbcl09NjQwNyx0fSx7fSksZHQ9W10sZ3Q9W10sdnQ9MCxtdD17fSx5dD1yLm1heFRleHR1cmVVbml0cyx4dD1BcnJheSh5dCkubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9KTtyZXR1cm4gaihELnByb3RvdHlwZSx7YmluZDpmdW5jdGlvbigpe3RoaXMuYmluZENvdW50Kz0xO3ZhciBlPXRoaXMudW5pdDtpZigwPmUpe2Zvcih2YXIgcj0wO3I8eXQ7KytyKXt2YXIgbj14dFtyXTtpZihuKXtpZigwPG4uYmluZENvdW50KWNvbnRpbnVlO24udW5pdD0tMX14dFtyXT10aGlzLGU9cjticmVha31vLnByb2ZpbGUmJmEubWF4VGV4dHVyZVVuaXRzPGUrMSYmKGEubWF4VGV4dHVyZVVuaXRzPWUrMSksdGhpcy51bml0PWUsdC5hY3RpdmVUZXh0dXJlKDMzOTg0K2UpLHQuYmluZFRleHR1cmUodGhpcy50YXJnZXQsdGhpcy50ZXh0dXJlKX1yZXR1cm4gZX0sdW5iaW5kOmZ1bmN0aW9uKCl7LS10aGlzLmJpbmRDb3VudH0sZGVjUmVmOmZ1bmN0aW9uKCl7MD49LS10aGlzLnJlZkNvdW50JiZGKHRoaXMpfX0pLG8ucHJvZmlsZSYmKGEuZ2V0VG90YWxUZXh0dXJlU2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIE9iamVjdC5rZXlzKG10KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QrPW10W2VdLnN0YXRzLnNpemV9KSx0fSkse2NyZWF0ZTJEOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWkudGV4SW5mbzt6LmNhbGwocik7dmFyIGE9QygpO3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0P00oYSwwfHQsXCJudW1iZXJcIj09dHlwZW9mIGU/MHxlOjB8dCk6dD8oTyhyLHQpLFMoYSx0KSk6TShhLDEsMSksci5nZW5NaXBtYXBzJiYoYS5taXBtYXNrPShhLndpZHRoPDwxKS0xKSxpLm1pcG1hc2s9YS5taXBtYXNrLGMoaSxhKSxpLmludGVybmFsZm9ybWF0PWEuaW50ZXJuYWxmb3JtYXQsbi53aWR0aD1hLndpZHRoLG4uaGVpZ2h0PWEuaGVpZ2h0LFAoaSksRShhLDM1NTMpLEkociwzNTUzKSxSKCksTChhKSxvLnByb2ZpbGUmJihpLnN0YXRzLnNpemU9ayhpLmludGVybmFsZm9ybWF0LGkudHlwZSxhLndpZHRoLGEuaGVpZ2h0LHIuZ2VuTWlwbWFwcywhMSkpLG4uZm9ybWF0PXR0W2kuaW50ZXJuYWxmb3JtYXRdLG4udHlwZT1ldFtpLnR5cGVdLG4ubWFnPXJ0W3IubWFnRmlsdGVyXSxuLm1pbj1udFtyLm1pbkZpbHRlcl0sbi53cmFwUz1pdFtyLndyYXBTXSxuLndyYXBUPWl0W3Iud3JhcFRdLG59dmFyIGk9bmV3IEQoMzU1Myk7cmV0dXJuIG10W2kuaWRdPWksYS50ZXh0dXJlQ291bnQrKyxuKGUsciksbi5zdWJpbWFnZT1mdW5jdGlvbih0LGUscixhKXtlfD0wLHJ8PTAsYXw9MDt2YXIgbz1tKCk7cmV0dXJuIGMobyxpKSxvLndpZHRoPTAsby5oZWlnaHQ9MCxwKG8sdCksby53aWR0aD1vLndpZHRofHwoaS53aWR0aD4+YSktZSxvLmhlaWdodD1vLmhlaWdodHx8KGkuaGVpZ2h0Pj5hKS1yLFAoaSksZChvLDM1NTMsZSxyLGEpLFIoKSxBKG8pLG59LG4ucmVzaXplPWZ1bmN0aW9uKGUscil7dmFyIGE9MHxlLHM9MHxyfHxhO2lmKGE9PT1pLndpZHRoJiZzPT09aS5oZWlnaHQpcmV0dXJuIG47bi53aWR0aD1pLndpZHRoPWEsbi5oZWlnaHQ9aS5oZWlnaHQ9cyxQKGkpO2Zvcih2YXIgbCxjPWkuY2hhbm5lbHMsdT1pLnR5cGUsaD0wO2kubWlwbWFzaz4+aDsrK2gpe3ZhciBmPWE+PmgscD1zPj5oO2lmKCFmfHwhcClicmVhaztsPUcuemVyby5hbGxvY1R5cGUodSxmKnAqYyksdC50ZXhJbWFnZTJEKDM1NTMsaCxpLmZvcm1hdCxmLHAsMCxpLmZvcm1hdCxpLnR5cGUsbCksbCYmRy56ZXJvLmZyZWVUeXBlKGwpfXJldHVybiBSKCksby5wcm9maWxlJiYoaS5zdGF0cy5zaXplPWsoaS5pbnRlcm5hbGZvcm1hdCxpLnR5cGUsYSxzLCExLCExKSksbn0sbi5fcmVnbFR5cGU9XCJ0ZXh0dXJlMmRcIixuLl90ZXh0dXJlPWksby5wcm9maWxlJiYobi5zdGF0cz1pLnN0YXRzKSxuLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpLmRlY1JlZigpfSxufSxjcmVhdGVDdWJlOmZ1bmN0aW9uKGUscixuLGkscyxsKXtmdW5jdGlvbiBoKHQsZSxyLG4saSxhKXt2YXIgcyxsPWYudGV4SW5mbztmb3Ioei5jYWxsKGwpLHM9MDs2PnM7KytzKWdbc109QygpO2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0JiZ0KXtpZihcIm9iamVjdFwiPT10eXBlb2YgdClpZihlKVMoZ1swXSx0KSxTKGdbMV0sZSksUyhnWzJdLHIpLFMoZ1szXSxuKSxTKGdbNF0saSksUyhnWzVdLGEpO2Vsc2UgaWYoTyhsLHQpLHUoZix0KSxcImZhY2VzXCJpbiB0KWZvcih0PXQuZmFjZXMscz0wOzY+czsrK3MpYyhnW3NdLGYpLFMoZ1tzXSx0W3NdKTtlbHNlIGZvcihzPTA7Nj5zOysrcylTKGdbc10sdCl9ZWxzZSBmb3IodD0wfHR8fDEscz0wOzY+czsrK3MpTShnW3NdLHQsdCk7Zm9yKGMoZixnWzBdKSxmLm1pcG1hc2s9bC5nZW5NaXBtYXBzPyhnWzBdLndpZHRoPDwxKS0xOmdbMF0ubWlwbWFzayxmLmludGVybmFsZm9ybWF0PWdbMF0uaW50ZXJuYWxmb3JtYXQsaC53aWR0aD1nWzBdLndpZHRoLGguaGVpZ2h0PWdbMF0uaGVpZ2h0LFAoZikscz0wOzY+czsrK3MpRShnW3NdLDM0MDY5K3MpO2ZvcihJKGwsMzQwNjcpLFIoKSxvLnByb2ZpbGUmJihmLnN0YXRzLnNpemU9ayhmLmludGVybmFsZm9ybWF0LGYudHlwZSxoLndpZHRoLGguaGVpZ2h0LGwuZ2VuTWlwbWFwcywhMCkpLGguZm9ybWF0PXR0W2YuaW50ZXJuYWxmb3JtYXRdLGgudHlwZT1ldFtmLnR5cGVdLGgubWFnPXJ0W2wubWFnRmlsdGVyXSxoLm1pbj1udFtsLm1pbkZpbHRlcl0saC53cmFwUz1pdFtsLndyYXBTXSxoLndyYXBUPWl0W2wud3JhcFRdLHM9MDs2PnM7KytzKUwoZ1tzXSk7cmV0dXJuIGh9dmFyIGY9bmV3IEQoMzQwNjcpO210W2YuaWRdPWYsYS5jdWJlQ291bnQrKzt2YXIgZz1BcnJheSg2KTtyZXR1cm4gaChlLHIsbixpLHMsbCksaC5zdWJpbWFnZT1mdW5jdGlvbih0LGUscixuLGkpe3J8PTAsbnw9MCxpfD0wO3ZhciBhPW0oKTtyZXR1cm4gYyhhLGYpLGEud2lkdGg9MCxhLmhlaWdodD0wLHAoYSxlKSxhLndpZHRoPWEud2lkdGh8fChmLndpZHRoPj5pKS1yLGEuaGVpZ2h0PWEuaGVpZ2h0fHwoZi5oZWlnaHQ+PmkpLW4sUChmKSxkKGEsMzQwNjkrdCxyLG4saSksUigpLEEoYSksaH0saC5yZXNpemU9ZnVuY3Rpb24oZSl7aWYoKGV8PTApIT09Zi53aWR0aCl7aC53aWR0aD1mLndpZHRoPWUsaC5oZWlnaHQ9Zi5oZWlnaHQ9ZSxQKGYpO2Zvcih2YXIgcj0wOzY+cjsrK3IpZm9yKHZhciBuPTA7Zi5taXBtYXNrPj5uOysrbil0LnRleEltYWdlMkQoMzQwNjkrcixuLGYuZm9ybWF0LGU+Pm4sZT4+biwwLGYuZm9ybWF0LGYudHlwZSxudWxsKTtyZXR1cm4gUigpLG8ucHJvZmlsZSYmKGYuc3RhdHMuc2l6ZT1rKGYuaW50ZXJuYWxmb3JtYXQsZi50eXBlLGgud2lkdGgsaC5oZWlnaHQsITEsITApKSxofX0saC5fcmVnbFR5cGU9XCJ0ZXh0dXJlQ3ViZVwiLGguX3RleHR1cmU9ZixvLnByb2ZpbGUmJihoLnN0YXRzPWYuc3RhdHMpLGguZGVzdHJveT1mdW5jdGlvbigpe2YuZGVjUmVmKCl9LGh9LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx5dDsrK2UpdC5hY3RpdmVUZXh0dXJlKDMzOTg0K2UpLHQuYmluZFRleHR1cmUoMzU1MyxudWxsKSx4dFtlXT1udWxsO1gobXQpLmZvckVhY2goRiksYS5jdWJlQ291bnQ9MCxhLnRleHR1cmVDb3VudD0wfSxnZXRUZXh0dXJlOmZ1bmN0aW9uKHQpe3JldHVybiBudWxsfSxyZXN0b3JlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx5dDsrK2Upe3ZhciByPXh0W2VdO3ImJihyLmJpbmRDb3VudD0wLHIudW5pdD0tMSx4dFtlXT1udWxsKX1YKG10KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UudGV4dHVyZT10LmNyZWF0ZVRleHR1cmUoKSx0LmJpbmRUZXh0dXJlKGUudGFyZ2V0LGUudGV4dHVyZSk7Zm9yKHZhciByPTA7MzI+cjsrK3IpaWYoMCE9KGUubWlwbWFzayYxPDxyKSlpZigzNTUzPT09ZS50YXJnZXQpdC50ZXhJbWFnZTJEKDM1NTMscixlLmludGVybmFsZm9ybWF0LGUud2lkdGg+PnIsZS5oZWlnaHQ+PnIsMCxlLmludGVybmFsZm9ybWF0LGUudHlwZSxudWxsKTtlbHNlIGZvcih2YXIgbj0wOzY+bjsrK24pdC50ZXhJbWFnZTJEKDM0MDY5K24scixlLmludGVybmFsZm9ybWF0LGUud2lkdGg+PnIsZS5oZWlnaHQ+PnIsMCxlLmludGVybmFsZm9ybWF0LGUudHlwZSxudWxsKTtJKGUudGV4SW5mbyxlLnRhcmdldCl9KX19fWZ1bmN0aW9uIFQodCxlLHIsbixpLGEpe2Z1bmN0aW9uIG8odCxlLHIpe3RoaXMudGFyZ2V0PXQsdGhpcy50ZXh0dXJlPWUsdGhpcy5yZW5kZXJidWZmZXI9cjt2YXIgbj10PTA7ZT8odD1lLndpZHRoLG49ZS5oZWlnaHQpOnImJih0PXIud2lkdGgsbj1yLmhlaWdodCksdGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PW59ZnVuY3Rpb24gcyh0KXt0JiYodC50ZXh0dXJlJiZ0LnRleHR1cmUuX3RleHR1cmUuZGVjUmVmKCksdC5yZW5kZXJidWZmZXImJnQucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIuZGVjUmVmKCkpfWZ1bmN0aW9uIGwodCxlLHIpe3QmJih0LnRleHR1cmU/dC50ZXh0dXJlLl90ZXh0dXJlLnJlZkNvdW50Kz0xOnQucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIucmVmQ291bnQrPTEpfWZ1bmN0aW9uIGMoZSxyKXtyJiYoci50ZXh0dXJlP3QuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsZSxyLnRhcmdldCxyLnRleHR1cmUuX3RleHR1cmUudGV4dHVyZSwwKTp0LmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLGUsMzYxNjEsci5yZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlci5yZW5kZXJidWZmZXIpKX1mdW5jdGlvbiB1KHQpe3ZhciBlPTM1NTMscj1udWxsLG49bnVsbCxpPXQ7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHQmJihpPXQuZGF0YSxcInRhcmdldFwiaW4gdCYmKGU9MHx0LnRhcmdldCkpLFwidGV4dHVyZTJkXCI9PT0odD1pLl9yZWdsVHlwZSk/cj1pOlwidGV4dHVyZUN1YmVcIj09PXQ/cj1pOlwicmVuZGVyYnVmZmVyXCI9PT10JiYobj1pLGU9MzYxNjEpLG5ldyBvKGUscixuKX1mdW5jdGlvbiBoKHQsZSxyLGEscyl7cmV0dXJuIHI/KCh0PW4uY3JlYXRlMkQoe3dpZHRoOnQsaGVpZ2h0OmUsZm9ybWF0OmEsdHlwZTpzfSkpLl90ZXh0dXJlLnJlZkNvdW50PTAsbmV3IG8oMzU1Myx0LG51bGwpKTooKHQ9aS5jcmVhdGUoe3dpZHRoOnQsaGVpZ2h0OmUsZm9ybWF0OmF9KSkuX3JlbmRlcmJ1ZmZlci5yZWZDb3VudD0wLG5ldyBvKDM2MTYxLG51bGwsdCkpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQmJih0LnRleHR1cmV8fHQucmVuZGVyYnVmZmVyKX1mdW5jdGlvbiBwKHQsZSxyKXt0JiYodC50ZXh0dXJlP3QudGV4dHVyZS5yZXNpemUoZSxyKTp0LnJlbmRlcmJ1ZmZlciYmdC5yZW5kZXJidWZmZXIucmVzaXplKGUsciksdC53aWR0aD1lLHQuaGVpZ2h0PXIpfWZ1bmN0aW9uIGQoKXt0aGlzLmlkPWsrKyxBW3RoaXMuaWRdPXRoaXMsdGhpcy5mcmFtZWJ1ZmZlcj10LmNyZWF0ZUZyYW1lYnVmZmVyKCksdGhpcy5oZWlnaHQ9dGhpcy53aWR0aD0wLHRoaXMuY29sb3JBdHRhY2htZW50cz1bXSx0aGlzLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQ9dGhpcy5zdGVuY2lsQXR0YWNobWVudD10aGlzLmRlcHRoQXR0YWNobWVudD1udWxsfWZ1bmN0aW9uIGcodCl7dC5jb2xvckF0dGFjaG1lbnRzLmZvckVhY2gocykscyh0LmRlcHRoQXR0YWNobWVudCkscyh0LnN0ZW5jaWxBdHRhY2htZW50KSxzKHQuZGVwdGhTdGVuY2lsQXR0YWNobWVudCl9ZnVuY3Rpb24gdihlKXt0LmRlbGV0ZUZyYW1lYnVmZmVyKGUuZnJhbWVidWZmZXIpLGUuZnJhbWVidWZmZXI9bnVsbCxhLmZyYW1lYnVmZmVyQ291bnQtLSxkZWxldGUgQVtlLmlkXX1mdW5jdGlvbiBtKGUpe3ZhciBuO3QuYmluZEZyYW1lYnVmZmVyKDM2MTYwLGUuZnJhbWVidWZmZXIpO3ZhciBpPWUuY29sb3JBdHRhY2htZW50cztmb3Iobj0wO248aS5sZW5ndGg7KytuKWMoMzYwNjQrbixpW25dKTtmb3Iobj1pLmxlbmd0aDtuPHIubWF4Q29sb3JBdHRhY2htZW50czsrK24pdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA2NCtuLDM1NTMsbnVsbCwwKTt0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDMzMzA2LDM1NTMsbnVsbCwwKSx0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDk2LDM1NTMsbnVsbCwwKSx0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MTI4LDM1NTMsbnVsbCwwKSxjKDM2MDk2LGUuZGVwdGhBdHRhY2htZW50KSxjKDM2MTI4LGUuc3RlbmNpbEF0dGFjaG1lbnQpLGMoMzMzMDYsZS5kZXB0aFN0ZW5jaWxBdHRhY2htZW50KSx0LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoMzYxNjApLHQuaXNDb250ZXh0TG9zdCgpLHQuYmluZEZyYW1lYnVmZmVyKDM2MTYwLHgubmV4dD94Lm5leHQuZnJhbWVidWZmZXI6bnVsbCkseC5jdXI9eC5uZXh0LHQuZ2V0RXJyb3IoKX1mdW5jdGlvbiB5KHQsZSl7ZnVuY3Rpb24gcih0LGUpe3ZhciBpLGE9MCxvPTAscz0hMCxjPSEwO2k9bnVsbDt2YXIgcD0hMCxkPVwicmdiYVwiLHY9XCJ1aW50OFwiLHk9MSx4PW51bGwsdz1udWxsLGs9bnVsbCxBPSExO1wibnVtYmVyXCI9PXR5cGVvZiB0PyhhPTB8dCxvPTB8ZXx8YSk6dD8oXCJzaGFwZVwiaW4gdD8oYT0obz10LnNoYXBlKVswXSxvPW9bMV0pOihcInJhZGl1c1wiaW4gdCYmKGE9bz10LnJhZGl1cyksXCJ3aWR0aFwiaW4gdCYmKGE9dC53aWR0aCksXCJoZWlnaHRcImluIHQmJihvPXQuaGVpZ2h0KSksKFwiY29sb3JcImluIHR8fFwiY29sb3JzXCJpbiB0KSYmKGk9dC5jb2xvcnx8dC5jb2xvcnMsQXJyYXkuaXNBcnJheShpKSksaXx8KFwiY29sb3JDb3VudFwiaW4gdCYmKHk9MHx0LmNvbG9yQ291bnQpLFwiY29sb3JUZXh0dXJlXCJpbiB0JiYocD0hIXQuY29sb3JUZXh0dXJlLGQ9XCJyZ2JhNFwiKSxcImNvbG9yVHlwZVwiaW4gdCYmKHY9dC5jb2xvclR5cGUsIXApJiYoXCJoYWxmIGZsb2F0XCI9PT12fHxcImZsb2F0MTZcIj09PXY/ZD1cInJnYmExNmZcIjpcImZsb2F0XCIhPT12JiZcImZsb2F0MzJcIiE9PXZ8fChkPVwicmdiYTMyZlwiKSksXCJjb2xvckZvcm1hdFwiaW4gdCYmKGQ9dC5jb2xvckZvcm1hdCwwPD1iLmluZGV4T2YoZCk/cD0hMDowPD1fLmluZGV4T2YoZCkmJihwPSExKSkpLChcImRlcHRoVGV4dHVyZVwiaW4gdHx8XCJkZXB0aFN0ZW5jaWxUZXh0dXJlXCJpbiB0KSYmKEE9ISghdC5kZXB0aFRleHR1cmUmJiF0LmRlcHRoU3RlbmNpbFRleHR1cmUpKSxcImRlcHRoXCJpbiB0JiYoXCJib29sZWFuXCI9PXR5cGVvZiB0LmRlcHRoP3M9dC5kZXB0aDooeD10LmRlcHRoLGM9ITEpKSxcInN0ZW5jaWxcImluIHQmJihcImJvb2xlYW5cIj09dHlwZW9mIHQuc3RlbmNpbD9jPXQuc3RlbmNpbDoodz10LnN0ZW5jaWwscz0hMSkpLFwiZGVwdGhTdGVuY2lsXCJpbiB0JiYoXCJib29sZWFuXCI9PXR5cGVvZiB0LmRlcHRoU3RlbmNpbD9zPWM9dC5kZXB0aFN0ZW5jaWw6KGs9dC5kZXB0aFN0ZW5jaWwsYz1zPSExKSkpOmE9bz0xO3ZhciBUPW51bGwsTT1udWxsLFM9bnVsbCxFPW51bGw7aWYoQXJyYXkuaXNBcnJheShpKSlUPWkubWFwKHUpO2Vsc2UgaWYoaSlUPVt1KGkpXTtlbHNlIGZvcihUPUFycmF5KHkpLGk9MDtpPHk7KytpKVRbaV09aChhLG8scCxkLHYpO2ZvcihhPWF8fFRbMF0ud2lkdGgsbz1vfHxUWzBdLmhlaWdodCx4P009dSh4KTpzJiYhYyYmKE09aChhLG8sQSxcImRlcHRoXCIsXCJ1aW50MzJcIikpLHc/Uz11KHcpOmMmJiFzJiYoUz1oKGEsbywhMSxcInN0ZW5jaWxcIixcInVpbnQ4XCIpKSxrP0U9dShrKToheCYmIXcmJmMmJnMmJihFPWgoYSxvLEEsXCJkZXB0aCBzdGVuY2lsXCIsXCJkZXB0aCBzdGVuY2lsXCIpKSxzPW51bGwsaT0wO2k8VC5sZW5ndGg7KytpKWwoVFtpXSksVFtpXSYmVFtpXS50ZXh0dXJlJiYoYz15dFtUW2ldLnRleHR1cmUuX3RleHR1cmUuZm9ybWF0XSp4dFtUW2ldLnRleHR1cmUuX3RleHR1cmUudHlwZV0sbnVsbD09PXMmJihzPWMpKTtyZXR1cm4gbChNKSxsKFMpLGwoRSksZyhuKSxuLndpZHRoPWEsbi5oZWlnaHQ9byxuLmNvbG9yQXR0YWNobWVudHM9VCxuLmRlcHRoQXR0YWNobWVudD1NLG4uc3RlbmNpbEF0dGFjaG1lbnQ9UyxuLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQ9RSxyLmNvbG9yPVQubWFwKGYpLHIuZGVwdGg9ZihNKSxyLnN0ZW5jaWw9ZihTKSxyLmRlcHRoU3RlbmNpbD1mKEUpLHIud2lkdGg9bi53aWR0aCxyLmhlaWdodD1uLmhlaWdodCxtKG4pLHJ9dmFyIG49bmV3IGQ7cmV0dXJuIGEuZnJhbWVidWZmZXJDb3VudCsrLHIodCxlKSxqKHIse3Jlc2l6ZTpmdW5jdGlvbih0LGUpe3ZhciBpPU1hdGgubWF4KDB8dCwxKSxhPU1hdGgubWF4KDB8ZXx8aSwxKTtpZihpPT09bi53aWR0aCYmYT09PW4uaGVpZ2h0KXJldHVybiByO2Zvcih2YXIgbz1uLmNvbG9yQXR0YWNobWVudHMscz0wO3M8by5sZW5ndGg7KytzKXAob1tzXSxpLGEpO3JldHVybiBwKG4uZGVwdGhBdHRhY2htZW50LGksYSkscChuLnN0ZW5jaWxBdHRhY2htZW50LGksYSkscChuLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQsaSxhKSxuLndpZHRoPXIud2lkdGg9aSxuLmhlaWdodD1yLmhlaWdodD1hLG0obikscn0sX3JlZ2xUeXBlOlwiZnJhbWVidWZmZXJcIixfZnJhbWVidWZmZXI6bixkZXN0cm95OmZ1bmN0aW9uKCl7dihuKSxnKG4pfSx1c2U6ZnVuY3Rpb24odCl7eC5zZXRGQk8oe2ZyYW1lYnVmZmVyOnJ9LHQpfX0pfXZhciB4PXtjdXI6bnVsbCxuZXh0Om51bGwsZGlydHk6ITEsc2V0RkJPOm51bGx9LGI9W1wicmdiYVwiXSxfPVtcInJnYmE0XCIsXCJyZ2I1NjVcIixcInJnYjUgYTFcIl07ZS5leHRfc3JnYiYmXy5wdXNoKFwic3JnYmFcIiksZS5leHRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQmJl8ucHVzaChcInJnYmExNmZcIixcInJnYjE2ZlwiKSxlLndlYmdsX2NvbG9yX2J1ZmZlcl9mbG9hdCYmXy5wdXNoKFwicmdiYTMyZlwiKTt2YXIgdz1bXCJ1aW50OFwiXTtlLm9lc190ZXh0dXJlX2hhbGZfZmxvYXQmJncucHVzaChcImhhbGYgZmxvYXRcIixcImZsb2F0MTZcIiksZS5vZXNfdGV4dHVyZV9mbG9hdCYmdy5wdXNoKFwiZmxvYXRcIixcImZsb2F0MzJcIik7dmFyIGs9MCxBPXt9O3JldHVybiBqKHgse2dldEZyYW1lYnVmZmVyOmZ1bmN0aW9uKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJlwiZnJhbWVidWZmZXJcIj09PXQuX3JlZ2xUeXBlJiYodD10Ll9mcmFtZWJ1ZmZlcilpbnN0YW5jZW9mIGQ/dDpudWxsfSxjcmVhdGU6eSxjcmVhdGVDdWJlOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7dmFyIGksYT17Y29sb3I6bnVsbH0sbz0wLHM9bnVsbDtpPVwicmdiYVwiO3ZhciBsPVwidWludDhcIixjPTE7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQ/bz0wfHQ6dD8oXCJzaGFwZVwiaW4gdD9vPXQuc2hhcGVbMF06KFwicmFkaXVzXCJpbiB0JiYobz0wfHQucmFkaXVzKSxcIndpZHRoXCJpbiB0P289MHx0LndpZHRoOlwiaGVpZ2h0XCJpbiB0JiYobz0wfHQuaGVpZ2h0KSksKFwiY29sb3JcImluIHR8fFwiY29sb3JzXCJpbiB0KSYmKHM9dC5jb2xvcnx8dC5jb2xvcnMsQXJyYXkuaXNBcnJheShzKSksc3x8KFwiY29sb3JDb3VudFwiaW4gdCYmKGM9MHx0LmNvbG9yQ291bnQpLFwiY29sb3JUeXBlXCJpbiB0JiYobD10LmNvbG9yVHlwZSksXCJjb2xvckZvcm1hdFwiaW4gdCYmKGk9dC5jb2xvckZvcm1hdCkpLFwiZGVwdGhcImluIHQmJihhLmRlcHRoPXQuZGVwdGgpLFwic3RlbmNpbFwiaW4gdCYmKGEuc3RlbmNpbD10LnN0ZW5jaWwpLFwiZGVwdGhTdGVuY2lsXCJpbiB0JiYoYS5kZXB0aFN0ZW5jaWw9dC5kZXB0aFN0ZW5jaWwpKTpvPTEscylpZihBcnJheS5pc0FycmF5KHMpKWZvcih0PVtdLGk9MDtpPHMubGVuZ3RoOysraSl0W2ldPXNbaV07ZWxzZSB0PVtzXTtlbHNlIGZvcih0PUFycmF5KGMpLHM9e3JhZGl1czpvLGZvcm1hdDppLHR5cGU6bH0saT0wO2k8YzsrK2kpdFtpXT1uLmNyZWF0ZUN1YmUocyk7Zm9yKGEuY29sb3I9QXJyYXkodC5sZW5ndGgpLGk9MDtpPHQubGVuZ3RoOysraSljPXRbaV0sbz1vfHxjLndpZHRoLGEuY29sb3JbaV09e3RhcmdldDozNDA2OSxkYXRhOnRbaV19O2ZvcihpPTA7Nj5pOysraSl7Zm9yKGM9MDtjPHQubGVuZ3RoOysrYylhLmNvbG9yW2NdLnRhcmdldD0zNDA2OStpOzA8aSYmKGEuZGVwdGg9clswXS5kZXB0aCxhLnN0ZW5jaWw9clswXS5zdGVuY2lsLGEuZGVwdGhTdGVuY2lsPXJbMF0uZGVwdGhTdGVuY2lsKSxyW2ldP3JbaV0oYSk6cltpXT15KGEpfXJldHVybiBqKGUse3dpZHRoOm8saGVpZ2h0Om8sY29sb3I6dH0pfXZhciByPUFycmF5KDYpO3JldHVybiBlKHQpLGooZSx7ZmFjZXM6cixyZXNpemU6ZnVuY3Rpb24odCl7dmFyIG49MHx0O2lmKG49PT1lLndpZHRoKXJldHVybiBlO3ZhciBpPWUuY29sb3I7Zm9yKHQ9MDt0PGkubGVuZ3RoOysrdClpW3RdLnJlc2l6ZShuKTtmb3IodD0wOzY+dDsrK3Qpclt0XS5yZXNpemUobik7cmV0dXJuIGUud2lkdGg9ZS5oZWlnaHQ9bixlfSxfcmVnbFR5cGU6XCJmcmFtZWJ1ZmZlckN1YmVcIixkZXN0cm95OmZ1bmN0aW9uKCl7ci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZGVzdHJveSgpfSl9fSl9LGNsZWFyOmZ1bmN0aW9uKCl7WChBKS5mb3JFYWNoKHYpfSxyZXN0b3JlOmZ1bmN0aW9uKCl7eC5jdXI9bnVsbCx4Lm5leHQ9bnVsbCx4LmRpcnR5PSEwLFgoQSkuZm9yRWFjaChmdW5jdGlvbihlKXtlLmZyYW1lYnVmZmVyPXQuY3JlYXRlRnJhbWVidWZmZXIoKSxtKGUpfSl9fSl9ZnVuY3Rpb24gTSgpe3RoaXMudz10aGlzLno9dGhpcy55PXRoaXMueD10aGlzLnN0YXRlPTAsdGhpcy5idWZmZXI9bnVsbCx0aGlzLnNpemU9MCx0aGlzLm5vcm1hbGl6ZWQ9ITEsdGhpcy50eXBlPTUxMjYsdGhpcy5kaXZpc29yPXRoaXMuc3RyaWRlPXRoaXMub2Zmc2V0PTB9ZnVuY3Rpb24gUyh0LGUscixuKXtmdW5jdGlvbiBpKHQsZSxyLG4pe3RoaXMubmFtZT10LHRoaXMuaWQ9ZSx0aGlzLmxvY2F0aW9uPXIsdGhpcy5pbmZvPW59ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKWlmKHRbcl0uaWQ9PT1lLmlkKXJldHVybiB2b2lkKHRbcl0ubG9jYXRpb249ZS5sb2NhdGlvbik7dC5wdXNoKGUpfWZ1bmN0aW9uIG8ocixuLGkpe2lmKCEobz0oaT0zNTYzMj09PXI/Yzp1KVtuXSkpe3ZhciBhPWUuc3RyKG4pLG89dC5jcmVhdGVTaGFkZXIocik7dC5zaGFkZXJTb3VyY2UobyxhKSx0LmNvbXBpbGVTaGFkZXIobyksaVtuXT1vfXJldHVybiBvfWZ1bmN0aW9uIHModCxlKXt0aGlzLmlkPXArKyx0aGlzLmZyYWdJZD10LHRoaXMudmVydElkPWUsdGhpcy5wcm9ncmFtPW51bGwsdGhpcy51bmlmb3Jtcz1bXSx0aGlzLmF0dHJpYnV0ZXM9W10sbi5wcm9maWxlJiYodGhpcy5zdGF0cz17dW5pZm9ybXNDb3VudDowLGF0dHJpYnV0ZXNDb3VudDowfSl9ZnVuY3Rpb24gbChyLHMpe3ZhciBsLGM7bD1vKDM1NjMyLHIuZnJhZ0lkKSxjPW8oMzU2MzMsci52ZXJ0SWQpO3ZhciB1PXIucHJvZ3JhbT10LmNyZWF0ZVByb2dyYW0oKTt0LmF0dGFjaFNoYWRlcih1LGwpLHQuYXR0YWNoU2hhZGVyKHUsYyksdC5saW5rUHJvZ3JhbSh1KTt2YXIgaD10LmdldFByb2dyYW1QYXJhbWV0ZXIodSwzNTcxOCk7bi5wcm9maWxlJiYoci5zdGF0cy51bmlmb3Jtc0NvdW50PWgpO3ZhciBmPXIudW5pZm9ybXM7Zm9yKGw9MDtsPGg7KytsKWlmKGM9dC5nZXRBY3RpdmVVbmlmb3JtKHUsbCkpaWYoMTxjLnNpemUpZm9yKHZhciBwPTA7cDxjLnNpemU7KytwKXt2YXIgZD1jLm5hbWUucmVwbGFjZShcIlswXVwiLFwiW1wiK3ArXCJdXCIpO2EoZixuZXcgaShkLGUuaWQoZCksdC5nZXRVbmlmb3JtTG9jYXRpb24odSxkKSxjKSl9ZWxzZSBhKGYsbmV3IGkoYy5uYW1lLGUuaWQoYy5uYW1lKSx0LmdldFVuaWZvcm1Mb2NhdGlvbih1LGMubmFtZSksYykpO2ZvcihoPXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcih1LDM1NzIxKSxuLnByb2ZpbGUmJihyLnN0YXRzLmF0dHJpYnV0ZXNDb3VudD1oKSxmPXIuYXR0cmlidXRlcyxsPTA7bDxoOysrbCkoYz10LmdldEFjdGl2ZUF0dHJpYih1LGwpKSYmYShmLG5ldyBpKGMubmFtZSxlLmlkKGMubmFtZSksdC5nZXRBdHRyaWJMb2NhdGlvbih1LGMubmFtZSksYykpfXZhciBjPXt9LHU9e30saD17fSxmPVtdLHA9MDtyZXR1cm4gbi5wcm9maWxlJiYoci5nZXRNYXhVbmlmb3Jtc0NvdW50PWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gZi5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uuc3RhdHMudW5pZm9ybXNDb3VudD50JiYodD1lLnN0YXRzLnVuaWZvcm1zQ291bnQpfSksdH0sci5nZXRNYXhBdHRyaWJ1dGVzQ291bnQ9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBmLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5zdGF0cy5hdHRyaWJ1dGVzQ291bnQ+dCYmKHQ9ZS5zdGF0cy5hdHRyaWJ1dGVzQ291bnQpfSksdH0pLHtjbGVhcjpmdW5jdGlvbigpe3ZhciBlPXQuZGVsZXRlU2hhZGVyLmJpbmQodCk7WChjKS5mb3JFYWNoKGUpLGM9e30sWCh1KS5mb3JFYWNoKGUpLHU9e30sZi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QuZGVsZXRlUHJvZ3JhbShlLnByb2dyYW0pfSksZi5sZW5ndGg9MCxoPXt9LHIuc2hhZGVyQ291bnQ9MH0scHJvZ3JhbTpmdW5jdGlvbih0LGUsbil7dmFyIGk9aFtlXTtpfHwoaT1oW2VdPXt9KTt2YXIgYT1pW3RdO3JldHVybiBhfHwoYT1uZXcgcyhlLHQpLHIuc2hhZGVyQ291bnQrKyxsKGEpLGlbdF09YSxmLnB1c2goYSkpLGF9LHJlc3RvcmU6ZnVuY3Rpb24oKXtjPXt9LHU9e307Zm9yKHZhciB0PTA7dDxmLmxlbmd0aDsrK3QpbChmW3RdKX0sc2hhZGVyOm8sZnJhZzotMSx2ZXJ0Oi0xfX1mdW5jdGlvbiBFKHQsZSxyLG4saSxhLG8pe2Z1bmN0aW9uIHMoaSl7dmFyIGE7YT1udWxsPT09ZS5uZXh0PzUxMjE6ZS5uZXh0LmNvbG9yQXR0YWNobWVudHNbMF0udGV4dHVyZS5fdGV4dHVyZS50eXBlO3ZhciBvPTAscz0wLGw9bi5mcmFtZWJ1ZmZlcldpZHRoLGM9bi5mcmFtZWJ1ZmZlckhlaWdodCx1PW51bGw7cmV0dXJuIFcoaSk/dT1pOmkmJihvPTB8aS54LHM9MHxpLnksbD0wfChpLndpZHRofHxuLmZyYW1lYnVmZmVyV2lkdGgtbyksYz0wfChpLmhlaWdodHx8bi5mcmFtZWJ1ZmZlckhlaWdodC1zKSx1PWkuZGF0YXx8bnVsbCkscigpLGk9bCpjKjQsdXx8KDUxMjE9PT1hP3U9bmV3IFVpbnQ4QXJyYXkoaSk6NTEyNj09PWEmJih1PXV8fG5ldyBGbG9hdDMyQXJyYXkoaSkpKSx0LnBpeGVsU3RvcmVpKDMzMzMsNCksdC5yZWFkUGl4ZWxzKG8scyxsLGMsNjQwOCxhLHUpLHV9cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0JiZcImZyYW1lYnVmZmVyXCJpbiB0P2Z1bmN0aW9uKHQpe3ZhciByO3JldHVybiBlLnNldEZCTyh7ZnJhbWVidWZmZXI6dC5mcmFtZWJ1ZmZlcn0sZnVuY3Rpb24oKXtyPXModCl9KSxyfSh0KTpzKHQpfX1mdW5jdGlvbiBDKHQpe3JldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KX1mdW5jdGlvbiBMKHQpe3JldHVybiBDKHQpLmpvaW4oXCJcIil9ZnVuY3Rpb24geigpe2Z1bmN0aW9uIHQoKXt2YXIgdD1bXSxlPVtdO3JldHVybiBqKGZ1bmN0aW9uKCl7dC5wdXNoLmFwcGx5KHQsQyhhcmd1bWVudHMpKX0se2RlZjpmdW5jdGlvbigpe3ZhciBuPVwidlwiK3IrKztyZXR1cm4gZS5wdXNoKG4pLDA8YXJndW1lbnRzLmxlbmd0aCYmKHQucHVzaChuLFwiPVwiKSx0LnB1c2guYXBwbHkodCxDKGFyZ3VtZW50cykpLHQucHVzaChcIjtcIikpLG59LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIEwoWzA8ZS5sZW5ndGg/XCJ2YXIgXCIrZStcIjtcIjpcIlwiLEwodCldKX19KX1mdW5jdGlvbiBlKCl7ZnVuY3Rpb24gZSh0LGUpe24odCxlLFwiPVwiLHIuZGVmKHQsZSksXCI7XCIpfXZhciByPXQoKSxuPXQoKSxpPXIudG9TdHJpbmcsYT1uLnRvU3RyaW5nO3JldHVybiBqKGZ1bmN0aW9uKCl7ci5hcHBseShyLEMoYXJndW1lbnRzKSl9LHtkZWY6ci5kZWYsZW50cnk6cixleGl0Om4sc2F2ZTplLHNldDpmdW5jdGlvbih0LG4saSl7ZSh0LG4pLHIodCxuLFwiPVwiLGksXCI7XCIpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBpKCkrYSgpfX0pfXZhciByPTAsbj1bXSxpPVtdLGE9dCgpLG89e307cmV0dXJue2dsb2JhbDphLGxpbms6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxpLmxlbmd0aDsrK2UpaWYoaVtlXT09PXQpcmV0dXJuIG5bZV07cmV0dXJuIGU9XCJnXCIrcisrLG4ucHVzaChlKSxpLnB1c2godCksZX0sYmxvY2s6dCxwcm9jOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3ZhciB0PVwiYVwiK2kubGVuZ3RoO3JldHVybiBpLnB1c2godCksdH12YXIgaT1bXTtyPXJ8fDA7Zm9yKHZhciBhPTA7YTxyOysrYSluKCk7dmFyIHM9KGE9ZSgpKS50b1N0cmluZztyZXR1cm4gb1t0XT1qKGEse2FyZzpuLHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIEwoW1wiZnVuY3Rpb24oXCIsaS5qb2luKCksXCIpe1wiLHMoKSxcIn1cIl0pfX0pfSxzY29wZTplLGNvbmQ6ZnVuY3Rpb24oKXt2YXIgdD1MKGFyZ3VtZW50cykscj1lKCksbj1lKCksaT1yLnRvU3RyaW5nLGE9bi50b1N0cmluZztyZXR1cm4gaihyLHt0aGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHIuYXBwbHkocixDKGFyZ3VtZW50cykpLHRoaXN9LGVsc2U6ZnVuY3Rpb24oKXtyZXR1cm4gbi5hcHBseShuLEMoYXJndW1lbnRzKSksdGhpc30sdG9TdHJpbmc6ZnVuY3Rpb24oKXt2YXIgZT1hKCk7cmV0dXJuIGUmJihlPVwiZWxzZXtcIitlK1wifVwiKSxMKFtcImlmKFwiLHQsXCIpe1wiLGkoKSxcIn1cIixlXSl9fSl9LGNvbXBpbGU6ZnVuY3Rpb24oKXt2YXIgdD1bJ1widXNlIHN0cmljdFwiOycsYSxcInJldHVybiB7XCJdO09iamVjdC5rZXlzKG8pLmZvckVhY2goZnVuY3Rpb24oZSl7dC5wdXNoKCdcIicsZSwnXCI6JyxvW2VdLnRvU3RyaW5nKCksXCIsXCIpfSksdC5wdXNoKFwifVwiKTt2YXIgZT1MKHQpLnJlcGxhY2UoLzsvZyxcIjtcXG5cIikucmVwbGFjZSgvfS9nLFwifVxcblwiKS5yZXBsYWNlKC97L2csXCJ7XFxuXCIpO3JldHVybiBGdW5jdGlvbi5hcHBseShudWxsLG4uY29uY2F0KGUpKS5hcHBseShudWxsLGkpfX19ZnVuY3Rpb24gTyh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KXx8Vyh0KXx8bCh0KX1mdW5jdGlvbiBJKHQpe3JldHVybiB0LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm5cInZpZXdwb3J0XCI9PT10Py0xOlwidmlld3BvcnRcIj09PWU/MTp0PGU/LTE6MX0pfWZ1bmN0aW9uIEQodCxlLHIsbil7dGhpcy50aGlzRGVwPXQsdGhpcy5jb250ZXh0RGVwPWUsdGhpcy5wcm9wRGVwPXIsdGhpcy5hcHBlbmQ9bn1mdW5jdGlvbiBQKHQpe3JldHVybiB0JiYhKHQudGhpc0RlcHx8dC5jb250ZXh0RGVwfHx0LnByb3BEZXApfWZ1bmN0aW9uIFIodCl7cmV0dXJuIG5ldyBEKCExLCExLCExLHQpfWZ1bmN0aW9uIEYodCxlKXt2YXIgcj10LnR5cGU7cmV0dXJuIDA9PT1yP25ldyBEKCEwLDE8PShyPXQuZGF0YS5sZW5ndGgpLDI8PXIsZSk6ND09PXI/bmV3IEQoKHI9dC5kYXRhKS50aGlzRGVwLHIuY29udGV4dERlcCxyLnByb3BEZXAsZSk6bmV3IEQoMz09PXIsMj09PXIsMT09PXIsZSl9ZnVuY3Rpb24gQih0LGUscixuLGksbyxzLGwsYyx1LGgsZixwLGQsZyl7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdC5yZXBsYWNlKFwiLlwiLFwiX1wiKX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj1tKHQpO250LnB1c2godCksZXRbbl09dHRbbl09ISFyLGl0W25dPWV9ZnVuY3Rpb24geCh0LGUscil7dmFyIG49bSh0KTtudC5wdXNoKHQpLEFycmF5LmlzQXJyYXkocik/KHR0W25dPXIuc2xpY2UoKSxldFtuXT1yLnNsaWNlKCkpOnR0W25dPWV0W25dPXIsYXRbbl09ZX1mdW5jdGlvbiBiKCl7dmFyIHQ9eigpLHI9dC5saW5rLG49dC5nbG9iYWw7dC5pZD1sdCsrLHQuYmF0Y2hJZD1cIjBcIjt2YXIgaT1yKG90KSxhPXQuc2hhcmVkPXtwcm9wczpcImEwXCJ9O09iamVjdC5rZXlzKG90KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2FbdF09bi5kZWYoaSxcIi5cIix0KX0pO3ZhciBvPXQubmV4dD17fSxzPXQuY3VycmVudD17fTtPYmplY3Qua2V5cyhhdCkuZm9yRWFjaChmdW5jdGlvbih0KXtBcnJheS5pc0FycmF5KHR0W3RdKSYmKG9bdF09bi5kZWYoYS5uZXh0LFwiLlwiLHQpLHNbdF09bi5kZWYoYS5jdXJyZW50LFwiLlwiLHQpKX0pO3ZhciBsPXQuY29uc3RhbnRzPXt9O09iamVjdC5rZXlzKHN0KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2xbdF09bi5kZWYoSlNPTi5zdHJpbmdpZnkoc3RbdF0pKX0pLHQuaW52b2tlPWZ1bmN0aW9uKGUsbil7c3dpdGNoKG4udHlwZSl7Y2FzZSAwOnZhciBpPVtcInRoaXNcIixhLmNvbnRleHQsYS5wcm9wcyx0LmJhdGNoSWRdO3JldHVybiBlLmRlZihyKG4uZGF0YSksXCIuY2FsbChcIixpLnNsaWNlKDAsTWF0aC5tYXgobi5kYXRhLmxlbmd0aCsxLDQpKSxcIilcIik7Y2FzZSAxOnJldHVybiBlLmRlZihhLnByb3BzLG4uZGF0YSk7Y2FzZSAyOnJldHVybiBlLmRlZihhLmNvbnRleHQsbi5kYXRhKTtjYXNlIDM6cmV0dXJuIGUuZGVmKFwidGhpc1wiLG4uZGF0YSk7Y2FzZSA0OnJldHVybiBuLmRhdGEuYXBwZW5kKHQsZSksbi5kYXRhLnJlZn19LHQuYXR0cmliQ2FjaGU9e307dmFyIGM9e307cmV0dXJuIHQuc2NvcGVBdHRyaWI9ZnVuY3Rpb24odCl7aWYoKHQ9ZS5pZCh0KSlpbiBjKXJldHVybiBjW3RdO3ZhciBuPXUuc2NvcGVbdF07cmV0dXJuIG58fChuPXUuc2NvcGVbdF09bmV3IFopLGNbdF09cihuKX0sdH1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9dC5zdGF0aWMsbj10LmR5bmFtaWM7aWYoXCJmcmFtZWJ1ZmZlclwiaW4gcil7dmFyIGk9ci5mcmFtZWJ1ZmZlcjtyZXR1cm4gaT8oaT1sLmdldEZyYW1lYnVmZmVyKGkpLFIoZnVuY3Rpb24odCxlKXt2YXIgcj10LmxpbmsoaSksbj10LnNoYXJlZDtyZXR1cm4gZS5zZXQobi5mcmFtZWJ1ZmZlcixcIi5uZXh0XCIsciksbj1uLmNvbnRleHQsZS5zZXQobixcIi5mcmFtZWJ1ZmZlcldpZHRoXCIscitcIi53aWR0aFwiKSxlLnNldChuLFwiLmZyYW1lYnVmZmVySGVpZ2h0XCIscitcIi5oZWlnaHRcIikscn0pKTpSKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zaGFyZWQ7cmV0dXJuIGUuc2V0KHIuZnJhbWVidWZmZXIsXCIubmV4dFwiLFwibnVsbFwiKSxyPXIuY29udGV4dCxlLnNldChyLFwiLmZyYW1lYnVmZmVyV2lkdGhcIixyK1wiLmRyYXdpbmdCdWZmZXJXaWR0aFwiKSxlLnNldChyLFwiLmZyYW1lYnVmZmVySGVpZ2h0XCIscitcIi5kcmF3aW5nQnVmZmVySGVpZ2h0XCIpLFwibnVsbFwifSl9aWYoXCJmcmFtZWJ1ZmZlclwiaW4gbil7dmFyIGE9bi5mcmFtZWJ1ZmZlcjtyZXR1cm4gRihhLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pbnZva2UoZSxhKSxuPXQuc2hhcmVkLGk9bi5mcmFtZWJ1ZmZlcjtyPWUuZGVmKGksXCIuZ2V0RnJhbWVidWZmZXIoXCIscixcIilcIik7cmV0dXJuIGUuc2V0KGksXCIubmV4dFwiLHIpLG49bi5jb250ZXh0LGUuc2V0KG4sXCIuZnJhbWVidWZmZXJXaWR0aFwiLHIrXCI/XCIrcitcIi53aWR0aDpcIituK1wiLmRyYXdpbmdCdWZmZXJXaWR0aFwiKSxlLnNldChuLFwiLmZyYW1lYnVmZmVySGVpZ2h0XCIscitcIj9cIityK1wiLmhlaWdodDpcIituK1wiLmRyYXdpbmdCdWZmZXJIZWlnaHRcIikscn0pfXJldHVybiBudWxsfWZ1bmN0aW9uIHcodCl7ZnVuY3Rpb24gcih0KXtpZih0IGluIG4pe3ZhciByPWUuaWQoblt0XSk7cmV0dXJuKHQ9UihmdW5jdGlvbigpe3JldHVybiByfSkpLmlkPXIsdH1pZih0IGluIGkpe3ZhciBhPWlbdF07cmV0dXJuIEYoYSxmdW5jdGlvbih0LGUpe3ZhciByPXQuaW52b2tlKGUsYSk7cmV0dXJuIGUuZGVmKHQuc2hhcmVkLnN0cmluZ3MsXCIuaWQoXCIscixcIilcIil9KX1yZXR1cm4gbnVsbH12YXIgbj10LnN0YXRpYyxpPXQuZHluYW1pYyxhPXIoXCJmcmFnXCIpLG89cihcInZlcnRcIikscz1udWxsO3JldHVybiBQKGEpJiZQKG8pPyhzPWgucHJvZ3JhbShvLmlkLGEuaWQpLHQ9UihmdW5jdGlvbih0LGUpe3JldHVybiB0Lmxpbmsocyl9KSk6dD1uZXcgRChhJiZhLnRoaXNEZXB8fG8mJm8udGhpc0RlcCxhJiZhLmNvbnRleHREZXB8fG8mJm8uY29udGV4dERlcCxhJiZhLnByb3BEZXB8fG8mJm8ucHJvcERlcCxmdW5jdGlvbih0LGUpe3ZhciByLG4saT10LnNoYXJlZC5zaGFkZXI7cmV0dXJuIHI9YT9hLmFwcGVuZCh0LGUpOmUuZGVmKGksXCIuXCIsXCJmcmFnXCIpLG49bz9vLmFwcGVuZCh0LGUpOmUuZGVmKGksXCIuXCIsXCJ2ZXJ0XCIpLGUuZGVmKGkrXCIucHJvZ3JhbShcIituK1wiLFwiK3IrXCIpXCIpfSkse2ZyYWc6YSx2ZXJ0Om8scHJvZ1Zhcjp0LHByb2dyYW06c319ZnVuY3Rpb24gayh0LGUpe2Z1bmN0aW9uIHIodCxlKXtpZih0IGluIG4pe3ZhciByPTB8blt0XTtyZXR1cm4gUihmdW5jdGlvbih0LG4pe3JldHVybiBlJiYodC5PRkZTRVQ9cikscn0pfWlmKHQgaW4gaSl7dmFyIG89aVt0XTtyZXR1cm4gRihvLGZ1bmN0aW9uKHQscil7dmFyIG49dC5pbnZva2UocixvKTtyZXR1cm4gZSYmKHQuT0ZGU0VUPW4pLG59KX1yZXR1cm4gZSYmYT9SKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuT0ZGU0VUPVwiMFwiLDB9KTpudWxsfXZhciBuPXQuc3RhdGljLGk9dC5keW5hbWljLGE9ZnVuY3Rpb24oKXtpZihcImVsZW1lbnRzXCJpbiBuKXt2YXIgdD1uLmVsZW1lbnRzO08odCk/dD1vLmdldEVsZW1lbnRzKG8uY3JlYXRlKHQsITApKTp0JiYodD1vLmdldEVsZW1lbnRzKHQpKTt2YXIgZT1SKGZ1bmN0aW9uKGUscil7aWYodCl7dmFyIG49ZS5saW5rKHQpO3JldHVybiBlLkVMRU1FTlRTPW59cmV0dXJuIGUuRUxFTUVOVFM9bnVsbH0pO3JldHVybiBlLnZhbHVlPXQsZX1pZihcImVsZW1lbnRzXCJpbiBpKXt2YXIgcj1pLmVsZW1lbnRzO3JldHVybiBGKHIsZnVuY3Rpb24odCxlKXt2YXIgbj0oaT10LnNoYXJlZCkuaXNCdWZmZXJBcmdzLGk9aS5lbGVtZW50cyxhPXQuaW52b2tlKGUsciksbz1lLmRlZihcIm51bGxcIik7bj1lLmRlZihuLFwiKFwiLGEsXCIpXCIpLGE9dC5jb25kKG4pLnRoZW4obyxcIj1cIixpLFwiLmNyZWF0ZVN0cmVhbShcIixhLFwiKTtcIikuZWxzZShvLFwiPVwiLGksXCIuZ2V0RWxlbWVudHMoXCIsYSxcIik7XCIpO3JldHVybiBlLmVudHJ5KGEpLGUuZXhpdCh0LmNvbmQobikudGhlbihpLFwiLmRlc3Ryb3lTdHJlYW0oXCIsbyxcIik7XCIpKSx0LkVMRU1FTlRTPW99KX1yZXR1cm4gbnVsbH0oKSxzPXIoXCJvZmZzZXRcIiwhMCk7cmV0dXJue2VsZW1lbnRzOmEscHJpbWl0aXZlOmZ1bmN0aW9uKCl7aWYoXCJwcmltaXRpdmVcImluIG4pe3ZhciB0PW4ucHJpbWl0aXZlO3JldHVybiBSKGZ1bmN0aW9uKGUscil7cmV0dXJuIHJ0W3RdfSl9aWYoXCJwcmltaXRpdmVcImluIGkpe3ZhciBlPWkucHJpbWl0aXZlO3JldHVybiBGKGUsZnVuY3Rpb24odCxyKXt2YXIgbj10LmNvbnN0YW50cy5wcmltVHlwZXMsaT10Lmludm9rZShyLGUpO3JldHVybiByLmRlZihuLFwiW1wiLGksXCJdXCIpfSl9cmV0dXJuIGE/UChhKT9hLnZhbHVlP1IoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZWYodC5FTEVNRU5UUyxcIi5wcmltVHlwZVwiKX0pOlIoZnVuY3Rpb24oKXtyZXR1cm4gNH0pOm5ldyBEKGEudGhpc0RlcCxhLmNvbnRleHREZXAsYS5wcm9wRGVwLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5FTEVNRU5UUztyZXR1cm4gZS5kZWYocixcIj9cIixyLFwiLnByaW1UeXBlOlwiLDQpfSk6bnVsbH0oKSxjb3VudDpmdW5jdGlvbigpe2lmKFwiY291bnRcImluIG4pe3ZhciB0PTB8bi5jb3VudDtyZXR1cm4gUihmdW5jdGlvbigpe3JldHVybiB0fSl9aWYoXCJjb3VudFwiaW4gaSl7dmFyIGU9aS5jb3VudDtyZXR1cm4gRihlLGZ1bmN0aW9uKHQscil7cmV0dXJuIHQuaW52b2tlKHIsZSl9KX1yZXR1cm4gYT9QKGEpP2E/cz9uZXcgRChzLnRoaXNEZXAscy5jb250ZXh0RGVwLHMucHJvcERlcCxmdW5jdGlvbih0LGUpe3JldHVybiBlLmRlZih0LkVMRU1FTlRTLFwiLnZlcnRDb3VudC1cIix0Lk9GRlNFVCl9KTpSKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGVmKHQuRUxFTUVOVFMsXCIudmVydENvdW50XCIpfSk6UihmdW5jdGlvbigpe3JldHVybi0xfSk6bmV3IEQoYS50aGlzRGVwfHxzLnRoaXNEZXAsYS5jb250ZXh0RGVwfHxzLmNvbnRleHREZXAsYS5wcm9wRGVwfHxzLnByb3BEZXAsZnVuY3Rpb24odCxlKXt2YXIgcj10LkVMRU1FTlRTO3JldHVybiB0Lk9GRlNFVD9lLmRlZihyLFwiP1wiLHIsXCIudmVydENvdW50LVwiLHQuT0ZGU0VULFwiOi0xXCIpOmUuZGVmKHIsXCI/XCIscixcIi52ZXJ0Q291bnQ6LTFcIil9KTpudWxsfSgpLGluc3RhbmNlczpyKFwiaW5zdGFuY2VzXCIsITEpLG9mZnNldDpzfX1mdW5jdGlvbiBBKHQscil7dmFyIG49dC5zdGF0aWMsYT10LmR5bmFtaWMsbz17fTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcj1uW3RdLGE9ZS5pZCh0KSxzPW5ldyBaO2lmKE8ocikpcy5zdGF0ZT0xLHMuYnVmZmVyPWkuZ2V0QnVmZmVyKGkuY3JlYXRlKHIsMzQ5NjIsITEsITApKSxzLnR5cGU9MDtlbHNlIGlmKGM9aS5nZXRCdWZmZXIocikpcy5zdGF0ZT0xLHMuYnVmZmVyPWMscy50eXBlPTA7ZWxzZSBpZihcImNvbnN0YW50XCJpbiByKXt2YXIgbD1yLmNvbnN0YW50O3MuYnVmZmVyPVwibnVsbFwiLHMuc3RhdGU9MixcIm51bWJlclwiPT10eXBlb2YgbD9zLng9bDpidC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7ZTxsLmxlbmd0aCYmKHNbdF09bFtlXSl9KX1lbHNle3ZhciBjPU8oci5idWZmZXIpP2kuZ2V0QnVmZmVyKGkuY3JlYXRlKHIuYnVmZmVyLDM0OTYyLCExLCEwKSk6aS5nZXRCdWZmZXIoci5idWZmZXIpLHU9MHxyLm9mZnNldCxoPTB8ci5zdHJpZGUsZj0wfHIuc2l6ZSxwPSEhci5ub3JtYWxpemVkLGQ9MDtcInR5cGVcImluIHImJihkPUpbci50eXBlXSkscj0wfHIuZGl2aXNvcixzLmJ1ZmZlcj1jLHMuc3RhdGU9MSxzLnNpemU9ZixzLm5vcm1hbGl6ZWQ9cCxzLnR5cGU9ZHx8Yy5kdHlwZSxzLm9mZnNldD11LHMuc3RyaWRlPWgscy5kaXZpc29yPXJ9b1t0XT1SKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5hdHRyaWJDYWNoZTtpZihhIGluIHIpcmV0dXJuIHJbYV07dmFyIG49e2lzU3RyZWFtOiExfTtyZXR1cm4gT2JqZWN0LmtleXMocykuZm9yRWFjaChmdW5jdGlvbih0KXtuW3RdPXNbdF19KSxzLmJ1ZmZlciYmKG4uYnVmZmVyPXQubGluayhzLmJ1ZmZlciksbi50eXBlPW4udHlwZXx8bi5idWZmZXIrXCIuZHR5cGVcIiksclthXT1ufSl9KSxPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWFbdF07b1t0XT1GKGUsZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBuKHQpe3IobFt0XSxcIj1cIixpLFwiLlwiLHQsXCJ8MDtcIil9dmFyIGk9dC5pbnZva2UocixlKSxhPXQuc2hhcmVkLG89YS5pc0J1ZmZlckFyZ3Mscz1hLmJ1ZmZlcixsPXtpc1N0cmVhbTpyLmRlZighMSl9LGM9bmV3IFo7Yy5zdGF0ZT0xLE9iamVjdC5rZXlzKGMpLmZvckVhY2goZnVuY3Rpb24odCl7bFt0XT1yLmRlZihcIlwiK2NbdF0pfSk7dmFyIHU9bC5idWZmZXIsaD1sLnR5cGU7cmV0dXJuIHIoXCJpZihcIixvLFwiKFwiLGksXCIpKXtcIixsLmlzU3RyZWFtLFwiPXRydWU7XCIsdSxcIj1cIixzLFwiLmNyZWF0ZVN0cmVhbShcIiwzNDk2MixcIixcIixpLFwiKTtcIixoLFwiPVwiLHUsXCIuZHR5cGU7XCIsXCJ9ZWxzZXtcIix1LFwiPVwiLHMsXCIuZ2V0QnVmZmVyKFwiLGksXCIpO1wiLFwiaWYoXCIsdSxcIil7XCIsaCxcIj1cIix1LFwiLmR0eXBlO1wiLCd9ZWxzZSBpZihcImNvbnN0YW50XCIgaW4gJyxpLFwiKXtcIixsLnN0YXRlLFwiPVwiLDIsXCI7XCIsXCJpZih0eXBlb2YgXCIraSsnLmNvbnN0YW50ID09PSBcIm51bWJlclwiKXsnLGxbYnRbMF1dLFwiPVwiLGksXCIuY29uc3RhbnQ7XCIsYnQuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBsW3RdfSkuam9pbihcIj1cIiksXCI9MDtcIixcIn1lbHNle1wiLGJ0Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBsW3RdK1wiPVwiK2krXCIuY29uc3RhbnQubGVuZ3RoPlwiK2UrXCI/XCIraStcIi5jb25zdGFudFtcIitlK1wiXTowO1wifSkuam9pbihcIlwiKSxcIn19ZWxzZXtcIixcImlmKFwiLG8sXCIoXCIsaSxcIi5idWZmZXIpKXtcIix1LFwiPVwiLHMsXCIuY3JlYXRlU3RyZWFtKFwiLDM0OTYyLFwiLFwiLGksXCIuYnVmZmVyKTtcIixcIn1lbHNle1wiLHUsXCI9XCIscyxcIi5nZXRCdWZmZXIoXCIsaSxcIi5idWZmZXIpO1wiLFwifVwiLGgsJz1cInR5cGVcIiBpbiAnLGksXCI/XCIsYS5nbFR5cGVzLFwiW1wiLGksXCIudHlwZV06XCIsdSxcIi5kdHlwZTtcIixsLm5vcm1hbGl6ZWQsXCI9ISFcIixpLFwiLm5vcm1hbGl6ZWQ7XCIpLG4oXCJzaXplXCIpLG4oXCJvZmZzZXRcIiksbihcInN0cmlkZVwiKSxuKFwiZGl2aXNvclwiKSxyKFwifX1cIiksci5leGl0KFwiaWYoXCIsbC5pc1N0cmVhbSxcIil7XCIscyxcIi5kZXN0cm95U3RyZWFtKFwiLHUsXCIpO1wiLFwifVwiKSxsfSl9KSxvfWZ1bmN0aW9uIFQodCxlLHIsbixpKXt2YXIgbz1fKHQpLHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7aWYodCBpbiBpKXt2YXIgcj1pW3RdO3Q9ITA7dmFyIG4sbyxzPTB8ci54LGw9MHxyLnk7cmV0dXJuXCJ3aWR0aFwiaW4gcj9uPTB8ci53aWR0aDp0PSExLFwiaGVpZ2h0XCJpbiByP289MHxyLmhlaWdodDp0PSExLG5ldyBEKCF0JiZlJiZlLnRoaXNEZXAsIXQmJmUmJmUuY29udGV4dERlcCwhdCYmZSYmZS5wcm9wRGVwLGZ1bmN0aW9uKHQsZSl7dmFyIGk9dC5zaGFyZWQuY29udGV4dCxhPW47XCJ3aWR0aFwiaW4gcnx8KGE9ZS5kZWYoaSxcIi5cIixcImZyYW1lYnVmZmVyV2lkdGhcIixcIi1cIixzKSk7dmFyIGM9bztyZXR1cm5cImhlaWdodFwiaW4gcnx8KGM9ZS5kZWYoaSxcIi5cIixcImZyYW1lYnVmZmVySGVpZ2h0XCIsXCItXCIsbCkpLFtzLGwsYSxjXX0pfWlmKHQgaW4gYSl7dmFyIGM9YVt0XTtyZXR1cm4gdD1GKGMsZnVuY3Rpb24odCxlKXt2YXIgcj10Lmludm9rZShlLGMpLG49dC5zaGFyZWQuY29udGV4dCxpPWUuZGVmKHIsXCIueHwwXCIpLGE9ZS5kZWYocixcIi55fDBcIik7cmV0dXJuW2ksYSxlLmRlZignXCJ3aWR0aFwiIGluICcscixcIj9cIixyLFwiLndpZHRofDA6XCIsXCIoXCIsbixcIi5cIixcImZyYW1lYnVmZmVyV2lkdGhcIixcIi1cIixpLFwiKVwiKSxyPWUuZGVmKCdcImhlaWdodFwiIGluICcscixcIj9cIixyLFwiLmhlaWdodHwwOlwiLFwiKFwiLG4sXCIuXCIsXCJmcmFtZWJ1ZmZlckhlaWdodFwiLFwiLVwiLGEsXCIpXCIpXX0pLGUmJih0LnRoaXNEZXA9dC50aGlzRGVwfHxlLnRoaXNEZXAsdC5jb250ZXh0RGVwPXQuY29udGV4dERlcHx8ZS5jb250ZXh0RGVwLHQucHJvcERlcD10LnByb3BEZXB8fGUucHJvcERlcCksdH1yZXR1cm4gZT9uZXcgRChlLnRoaXNEZXAsZS5jb250ZXh0RGVwLGUucHJvcERlcCxmdW5jdGlvbih0LGUpe3ZhciByPXQuc2hhcmVkLmNvbnRleHQ7cmV0dXJuWzAsMCxlLmRlZihyLFwiLlwiLFwiZnJhbWVidWZmZXJXaWR0aFwiKSxlLmRlZihyLFwiLlwiLFwiZnJhbWVidWZmZXJIZWlnaHRcIildfSk6bnVsbH12YXIgaT10LnN0YXRpYyxhPXQuZHluYW1pYztpZih0PW4oXCJ2aWV3cG9ydFwiKSl7dmFyIG89dDt0PW5ldyBEKHQudGhpc0RlcCx0LmNvbnRleHREZXAsdC5wcm9wRGVwLGZ1bmN0aW9uKHQsZSl7dmFyIHI9by5hcHBlbmQodCxlKSxuPXQuc2hhcmVkLmNvbnRleHQ7cmV0dXJuIGUuc2V0KG4sXCIudmlld3BvcnRXaWR0aFwiLHJbMl0pLGUuc2V0KG4sXCIudmlld3BvcnRIZWlnaHRcIixyWzNdKSxyfSl9cmV0dXJue3ZpZXdwb3J0OnQsc2Npc3Nvcl9ib3g6bihcInNjaXNzb3IuYm94XCIpfX0odCxvKSxsPWsodCksYz1mdW5jdGlvbih0LGUpe3ZhciByPXQuc3RhdGljLG49dC5keW5hbWljLGk9e307cmV0dXJuIG50LmZvckVhY2goZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLGEpe2lmKHQgaW4gcil7dmFyIHM9ZShyW3RdKTtpW29dPVIoZnVuY3Rpb24oKXtyZXR1cm4gc30pfWVsc2UgaWYodCBpbiBuKXt2YXIgbD1uW3RdO2lbb109RihsLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEodCxlLHQuaW52b2tlKGUsbCkpfSl9fXZhciBvPW0odCk7c3dpdGNoKHQpe2Nhc2VcImN1bGwuZW5hYmxlXCI6Y2FzZVwiYmxlbmQuZW5hYmxlXCI6Y2FzZVwiZGl0aGVyXCI6Y2FzZVwic3RlbmNpbC5lbmFibGVcIjpjYXNlXCJkZXB0aC5lbmFibGVcIjpjYXNlXCJzY2lzc29yLmVuYWJsZVwiOmNhc2VcInBvbHlnb25PZmZzZXQuZW5hYmxlXCI6Y2FzZVwic2FtcGxlLmFscGhhXCI6Y2FzZVwic2FtcGxlLmVuYWJsZVwiOmNhc2VcImRlcHRoLm1hc2tcIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm4gdH0sZnVuY3Rpb24odCxlLHIpe3JldHVybiByfSk7Y2FzZVwiZGVwdGguZnVuY1wiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVybiBrdFt0XX0sZnVuY3Rpb24odCxlLHIpe3JldHVybiBlLmRlZih0LmNvbnN0YW50cy5jb21wYXJlRnVuY3MsXCJbXCIscixcIl1cIil9KTtjYXNlXCJkZXB0aC5yYW5nZVwiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVybiB0fSxmdW5jdGlvbih0LGUscil7cmV0dXJuW2UuZGVmKFwiK1wiLHIsXCJbMF1cIiksZT1lLmRlZihcIitcIixyLFwiWzFdXCIpXX0pO2Nhc2VcImJsZW5kLmZ1bmNcIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm5bd3RbXCJzcmNSR0JcImluIHQ/dC5zcmNSR0I6dC5zcmNdLHd0W1wiZHN0UkdCXCJpbiB0P3QuZHN0UkdCOnQuZHN0XSx3dFtcInNyY0FscGhhXCJpbiB0P3Quc3JjQWxwaGE6dC5zcmNdLHd0W1wiZHN0QWxwaGFcImluIHQ/dC5kc3RBbHBoYTp0LmRzdF1dfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LG4pe3JldHVybiBlLmRlZignXCInLHQsbiwnXCIgaW4gJyxyLFwiP1wiLHIsXCIuXCIsdCxuLFwiOlwiLHIsXCIuXCIsdCl9dD10LmNvbnN0YW50cy5ibGVuZEZ1bmNzO3ZhciBpPW4oXCJzcmNcIixcIlJHQlwiKSxhPW4oXCJkc3RcIixcIlJHQlwiKSxvPShpPWUuZGVmKHQsXCJbXCIsaSxcIl1cIiksZS5kZWYodCxcIltcIixuKFwic3JjXCIsXCJBbHBoYVwiKSxcIl1cIikpO3JldHVybltpLGE9ZS5kZWYodCxcIltcIixhLFwiXVwiKSxvLHQ9ZS5kZWYodCxcIltcIixuKFwiZHN0XCIsXCJBbHBoYVwiKSxcIl1cIildfSk7Y2FzZVwiYmxlbmQuZXF1YXRpb25cIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdD9bJFt0XSwkW3RdXTpcIm9iamVjdFwiPT10eXBlb2YgdD9bJFt0LnJnYl0sJFt0LmFscGhhXV06dm9pZCAwfSxmdW5jdGlvbih0LGUscil7dmFyIG49dC5jb25zdGFudHMuYmxlbmRFcXVhdGlvbnMsaT1lLmRlZigpLGE9ZS5kZWYoKTtyZXR1cm4odD10LmNvbmQoXCJ0eXBlb2YgXCIsciwnPT09XCJzdHJpbmdcIicpKS50aGVuKGksXCI9XCIsYSxcIj1cIixuLFwiW1wiLHIsXCJdO1wiKSx0LmVsc2UoaSxcIj1cIixuLFwiW1wiLHIsXCIucmdiXTtcIixhLFwiPVwiLG4sXCJbXCIscixcIi5hbHBoYV07XCIpLGUodCksW2ksYV19KTtjYXNlXCJibGVuZC5jb2xvclwiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVybiBhKDQsZnVuY3Rpb24oZSl7cmV0dXJuK3RbZV19KX0sZnVuY3Rpb24odCxlLHIpe3JldHVybiBhKDQsZnVuY3Rpb24odCl7cmV0dXJuIGUuZGVmKFwiK1wiLHIsXCJbXCIsdCxcIl1cIil9KX0pO2Nhc2VcInN0ZW5jaWwubWFza1wiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVybiAwfHR9LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5kZWYocixcInwwXCIpfSk7Y2FzZVwic3RlbmNpbC5mdW5jXCI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuW2t0W3QuY21wfHxcImtlZXBcIl0sdC5yZWZ8fDAsXCJtYXNrXCJpbiB0P3QubWFzazotMV19LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bdD1lLmRlZignXCJjbXBcIiBpbiAnLHIsXCI/XCIsdC5jb25zdGFudHMuY29tcGFyZUZ1bmNzLFwiW1wiLHIsXCIuY21wXVwiLFwiOlwiLDc2ODApLGUuZGVmKHIsXCIucmVmfDBcIiksZT1lLmRlZignXCJtYXNrXCIgaW4gJyxyLFwiP1wiLHIsXCIubWFza3wwOi0xXCIpXX0pO2Nhc2VcInN0ZW5jaWwub3BGcm9udFwiOmNhc2VcInN0ZW5jaWwub3BCYWNrXCI6cmV0dXJuIGUoZnVuY3Rpb24oZSl7cmV0dXJuW1wic3RlbmNpbC5vcEJhY2tcIj09PXQ/MTAyOToxMDI4LEF0W2UuZmFpbHx8XCJrZWVwXCJdLEF0W2UuemZhaWx8fFwia2VlcFwiXSxBdFtlLnpwYXNzfHxcImtlZXBcIl1dfSxmdW5jdGlvbihlLHIsbil7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gci5kZWYoJ1wiJyx0LCdcIiBpbiAnLG4sXCI/XCIsYSxcIltcIixuLFwiLlwiLHQsXCJdOlwiLDc2ODApfXZhciBhPWUuY29uc3RhbnRzLnN0ZW5jaWxPcHM7cmV0dXJuW1wic3RlbmNpbC5vcEJhY2tcIj09PXQ/MTAyOToxMDI4LGkoXCJmYWlsXCIpLGkoXCJ6ZmFpbFwiKSxpKFwienBhc3NcIildfSk7Y2FzZVwicG9seWdvbk9mZnNldC5vZmZzZXRcIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm5bMHx0LmZhY3RvciwwfHQudW5pdHNdfSxmdW5jdGlvbih0LGUscil7cmV0dXJuW2UuZGVmKHIsXCIuZmFjdG9yfDBcIiksZT1lLmRlZihyLFwiLnVuaXRzfDBcIildfSk7Y2FzZVwiY3VsbC5mYWNlXCI6cmV0dXJuIGUoZnVuY3Rpb24odCl7dmFyIGU9MDtyZXR1cm5cImZyb250XCI9PT10P2U9MTAyODpcImJhY2tcIj09PXQmJihlPTEwMjkpLGV9LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5kZWYociwnPT09XCJmcm9udFwiPycsMTAyOCxcIjpcIiwxMDI5KX0pO2Nhc2VcImxpbmVXaWR0aFwiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVybiB0fSxmdW5jdGlvbih0LGUscil7cmV0dXJuIHJ9KTtjYXNlXCJmcm9udEZhY2VcIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm4gVHRbdF19LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5kZWYocisnPT09XCJjd1wiPzIzMDQ6MjMwNScpfSk7Y2FzZVwiY29sb3JNYXNrXCI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pfSxmdW5jdGlvbih0LGUscil7cmV0dXJuIGEoNCxmdW5jdGlvbih0KXtyZXR1cm5cIiEhXCIrcitcIltcIit0K1wiXVwifSl9KTtjYXNlXCJzYW1wbGUuY292ZXJhZ2VcIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm5bXCJ2YWx1ZVwiaW4gdD90LnZhbHVlOjEsISF0LmludmVydF19LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZS5kZWYoJ1widmFsdWVcIiBpbiAnLHIsXCI/K1wiLHIsXCIudmFsdWU6MVwiKSxlPWUuZGVmKFwiISFcIixyLFwiLmludmVydFwiKV19KX19KSxpfSh0KSx1PXcodCksaD1zLnZpZXdwb3J0O3JldHVybiBoJiYoYy52aWV3cG9ydD1oKSwocz1zW2g9bShcInNjaXNzb3IuYm94XCIpXSkmJihjW2hdPXMpLChvPXtmcmFtZWJ1ZmZlcjpvLGRyYXc6bCxzaGFkZXI6dSxzdGF0ZTpjLGRpcnR5OnM9MDxPYmplY3Qua2V5cyhjKS5sZW5ndGh9KS5wcm9maWxlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5zdGF0aWM7aWYodD10LmR5bmFtaWMsXCJwcm9maWxlXCJpbiByKXt2YXIgbj0hIXIucHJvZmlsZTsoZT1SKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG59KSkuZW5hYmxlPW59ZWxzZSBpZihcInByb2ZpbGVcImluIHQpe3ZhciBpPXQucHJvZmlsZTtlPUYoaSxmdW5jdGlvbih0LGUpe3JldHVybiB0Lmludm9rZShlLGkpfSl9cmV0dXJuIGV9KHQpLG8udW5pZm9ybXM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnN0YXRpYyxuPXQuZHluYW1pYyxpPXt9O3JldHVybiBPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlLG49clt0XTtpZihcIm51bWJlclwiPT10eXBlb2Ygbnx8XCJib29sZWFuXCI9PXR5cGVvZiBuKWU9UihmdW5jdGlvbigpe3JldHVybiBufSk7ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKXt2YXIgbz1uLl9yZWdsVHlwZTtcInRleHR1cmUyZFwiPT09b3x8XCJ0ZXh0dXJlQ3ViZVwiPT09bz9lPVIoZnVuY3Rpb24odCl7cmV0dXJuIHQubGluayhuKX0pOlwiZnJhbWVidWZmZXJcIiE9PW8mJlwiZnJhbWVidWZmZXJDdWJlXCIhPT1vfHwoZT1SKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxpbmsobi5jb2xvclswXSl9KSl9ZWxzZSB2KG4pJiYoZT1SKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdsb2JhbC5kZWYoXCJbXCIsYShuLmxlbmd0aCxmdW5jdGlvbih0KXtyZXR1cm4gblt0XX0pLFwiXVwiKX0pKTtlLnZhbHVlPW4saVt0XT1lfSksT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1uW3RdO2lbdF09RihlLGZ1bmN0aW9uKHQscil7cmV0dXJuIHQuaW52b2tlKHIsZSl9KX0pLGl9KHIpLG8uYXR0cmlidXRlcz1BKGUpLG8uY29udGV4dD1mdW5jdGlvbih0KXt2YXIgZT10LnN0YXRpYyxyPXQuZHluYW1pYyxuPXt9O3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByPWVbdF07blt0XT1SKGZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIHJ8fFwiYm9vbGVhblwiPT10eXBlb2Ygcj9cIlwiK3I6dC5saW5rKHIpfSl9KSxPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXJbdF07blt0XT1GKGUsZnVuY3Rpb24odCxyKXtyZXR1cm4gdC5pbnZva2UocixlKX0pfSksbn0obiksb31mdW5jdGlvbiBNKHQsZSxyKXt2YXIgbj10LnNoYXJlZC5jb250ZXh0LGk9dC5zY29wZSgpO09iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24oYSl7ZS5zYXZlKG4sXCIuXCIrYSksaShuLFwiLlwiLGEsXCI9XCIsclthXS5hcHBlbmQodCxlKSxcIjtcIil9KSxlKGkpfWZ1bmN0aW9uIFModCxlLHIsbil7dmFyIGksYT0ocz10LnNoYXJlZCkuZ2wsbz1zLmZyYW1lYnVmZmVyO1EmJihpPWUuZGVmKHMuZXh0ZW5zaW9ucyxcIi53ZWJnbF9kcmF3X2J1ZmZlcnNcIikpO3ZhciBzPShsPXQuY29uc3RhbnRzKS5kcmF3QnVmZmVyLGw9bC5iYWNrQnVmZmVyO3Q9cj9yLmFwcGVuZCh0LGUpOmUuZGVmKG8sXCIubmV4dFwiKSxufHxlKFwiaWYoXCIsdCxcIiE9PVwiLG8sXCIuY3VyKXtcIiksZShcImlmKFwiLHQsXCIpe1wiLGEsXCIuYmluZEZyYW1lYnVmZmVyKFwiLDM2MTYwLFwiLFwiLHQsXCIuZnJhbWVidWZmZXIpO1wiKSxRJiZlKGksXCIuZHJhd0J1ZmZlcnNXRUJHTChcIixzLFwiW1wiLHQsXCIuY29sb3JBdHRhY2htZW50cy5sZW5ndGhdKTtcIiksZShcIn1lbHNle1wiLGEsXCIuYmluZEZyYW1lYnVmZmVyKFwiLDM2MTYwLFwiLG51bGwpO1wiKSxRJiZlKGksXCIuZHJhd0J1ZmZlcnNXRUJHTChcIixsLFwiKTtcIiksZShcIn1cIixvLFwiLmN1cj1cIix0LFwiO1wiKSxufHxlKFwifVwiKX1mdW5jdGlvbiBFKHQsZSxyKXt2YXIgbj10LnNoYXJlZCxpPW4uZ2wsbz10LmN1cnJlbnQscz10Lm5leHQsbD1uLmN1cnJlbnQsYz1uLm5leHQsdT10LmNvbmQobCxcIi5kaXJ0eVwiKTtudC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuLGg7aWYoISgoZT1tKGUpKWluIHIuc3RhdGUpKWlmKGUgaW4gcyl7bj1zW2VdLGg9b1tlXTt2YXIgZj1hKHR0W2VdLmxlbmd0aCxmdW5jdGlvbih0KXtyZXR1cm4gdS5kZWYobixcIltcIix0LFwiXVwiKX0pO3UodC5jb25kKGYubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrXCIhPT1cIitoK1wiW1wiK2UrXCJdXCJ9KS5qb2luKFwifHxcIikpLnRoZW4oaSxcIi5cIixhdFtlXSxcIihcIixmLFwiKTtcIixmLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBoK1wiW1wiK2UrXCJdPVwiK3R9KS5qb2luKFwiO1wiKSxcIjtcIikpfWVsc2Ugbj11LmRlZihjLFwiLlwiLGUpLGY9dC5jb25kKG4sXCIhPT1cIixsLFwiLlwiLGUpLHUoZiksZSBpbiBpdD9mKHQuY29uZChuKS50aGVuKGksXCIuZW5hYmxlKFwiLGl0W2VdLFwiKTtcIikuZWxzZShpLFwiLmRpc2FibGUoXCIsaXRbZV0sXCIpO1wiKSxsLFwiLlwiLGUsXCI9XCIsbixcIjtcIik6ZihpLFwiLlwiLGF0W2VdLFwiKFwiLG4sXCIpO1wiLGwsXCIuXCIsZSxcIj1cIixuLFwiO1wiKX0pLDA9PT1PYmplY3Qua2V5cyhyLnN0YXRlKS5sZW5ndGgmJnUobCxcIi5kaXJ0eT1mYWxzZTtcIiksZSh1KX1mdW5jdGlvbiBDKHQsZSxyLG4pe3ZhciBpPXQuc2hhcmVkLGE9dC5jdXJyZW50LG89aS5jdXJyZW50LHM9aS5nbDtJKE9iamVjdC5rZXlzKHIpKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBsPXJbaV07aWYoIW58fG4obCkpe3ZhciBjPWwuYXBwZW5kKHQsZSk7aWYoaXRbaV0pe3ZhciB1PWl0W2ldO1AobCk/ZShzLGM/XCIuZW5hYmxlKFwiOlwiLmRpc2FibGUoXCIsdSxcIik7XCIpOmUodC5jb25kKGMpLnRoZW4ocyxcIi5lbmFibGUoXCIsdSxcIik7XCIpLmVsc2UocyxcIi5kaXNhYmxlKFwiLHUsXCIpO1wiKSksZShvLFwiLlwiLGksXCI9XCIsYyxcIjtcIil9ZWxzZSBpZih2KGMpKXt2YXIgaD1hW2ldO2UocyxcIi5cIixhdFtpXSxcIihcIixjLFwiKTtcIixjLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBoK1wiW1wiK2UrXCJdPVwiK3R9KS5qb2luKFwiO1wiKSxcIjtcIil9ZWxzZSBlKHMsXCIuXCIsYXRbaV0sXCIoXCIsYyxcIik7XCIsbyxcIi5cIixpLFwiPVwiLGMsXCI7XCIpfX0pfWZ1bmN0aW9uIEwodCxlKXtLJiYodC5pbnN0YW5jaW5nPWUuZGVmKHQuc2hhcmVkLmV4dGVuc2lvbnMsXCIuYW5nbGVfaW5zdGFuY2VkX2FycmF5c1wiKSl9ZnVuY3Rpb24gQih0LGUscixuLGkpe2Z1bmN0aW9uIGEoKXtyZXR1cm5cInVuZGVmaW5lZFwiPT10eXBlb2YgcGVyZm9ybWFuY2U/XCJEYXRlLm5vdygpXCI6XCJwZXJmb3JtYW5jZS5ub3coKVwifWZ1bmN0aW9uIG8odCl7dChjPWUuZGVmKCksXCI9XCIsYSgpLFwiO1wiKSxcInN0cmluZ1wiPT10eXBlb2YgaT90KGYsXCIuY291bnQrPVwiLGksXCI7XCIpOnQoZixcIi5jb3VudCsrO1wiKSxkJiYobj90KHU9ZS5kZWYoKSxcIj1cIixnLFwiLmdldE51bVBlbmRpbmdRdWVyaWVzKCk7XCIpOnQoZyxcIi5iZWdpblF1ZXJ5KFwiLGYsXCIpO1wiKSl9ZnVuY3Rpb24gcyh0KXt0KGYsXCIuY3B1VGltZSs9XCIsYSgpLFwiLVwiLGMsXCI7XCIpLGQmJihuP3QoZyxcIi5wdXNoU2NvcGVTdGF0cyhcIix1LFwiLFwiLGcsXCIuZ2V0TnVtUGVuZGluZ1F1ZXJpZXMoKSxcIixmLFwiKTtcIik6dChnLFwiLmVuZFF1ZXJ5KCk7XCIpKX1mdW5jdGlvbiBsKHQpe3ZhciByPWUuZGVmKHAsXCIucHJvZmlsZVwiKTtlKHAsXCIucHJvZmlsZT1cIix0LFwiO1wiKSxlLmV4aXQocCxcIi5wcm9maWxlPVwiLHIsXCI7XCIpfXZhciBjLHUsaD10LnNoYXJlZCxmPXQuc3RhdHMscD1oLmN1cnJlbnQsZz1oLnRpbWVyO2lmKHI9ci5wcm9maWxlKXtpZihQKHIpKXJldHVybiB2b2lkKHIuZW5hYmxlPyhvKGUpLHMoZS5leGl0KSxsKFwidHJ1ZVwiKSk6bChcImZhbHNlXCIpKTtsKHI9ci5hcHBlbmQodCxlKSl9ZWxzZSByPWUuZGVmKHAsXCIucHJvZmlsZVwiKTtvKGg9dC5ibG9jaygpKSxlKFwiaWYoXCIscixcIil7XCIsaCxcIn1cIikscyh0PXQuYmxvY2soKSksZS5leGl0KFwiaWYoXCIscixcIil7XCIsdCxcIn1cIil9ZnVuY3Rpb24gTih0LGUscixuLGkpe2Z1bmN0aW9uIGEocixuLGkpe2Z1bmN0aW9uIGEoKXtlKFwiaWYoIVwiLHUsXCIuYnVmZmVyKXtcIixsLFwiLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KFwiLGMsXCIpO31cIik7dmFyIHIsYT1pLnR5cGU7cj1pLnNpemU/ZS5kZWYoaS5zaXplLFwifHxcIixuKTpuLGUoXCJpZihcIix1LFwiLnR5cGUhPT1cIixhLFwifHxcIix1LFwiLnNpemUhPT1cIixyLFwifHxcIixwLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdStcIi5cIit0K1wiIT09XCIraVt0XX0pLmpvaW4oXCJ8fFwiKSxcIil7XCIsbCxcIi5iaW5kQnVmZmVyKFwiLDM0OTYyLFwiLFwiLGgsXCIuYnVmZmVyKTtcIixsLFwiLnZlcnRleEF0dHJpYlBvaW50ZXIoXCIsW2MscixhLGkubm9ybWFsaXplZCxpLnN0cmlkZSxpLm9mZnNldF0sXCIpO1wiLHUsXCIudHlwZT1cIixhLFwiO1wiLHUsXCIuc2l6ZT1cIixyLFwiO1wiLHAubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB1K1wiLlwiK3QrXCI9XCIraVt0XStcIjtcIn0pLmpvaW4oXCJcIiksXCJ9XCIpLEsmJihhPWkuZGl2aXNvcixlKFwiaWYoXCIsdSxcIi5kaXZpc29yIT09XCIsYSxcIil7XCIsdC5pbnN0YW5jaW5nLFwiLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShcIixbYyxhXSxcIik7XCIsdSxcIi5kaXZpc29yPVwiLGEsXCI7fVwiKSl9ZnVuY3Rpb24gcygpe2UoXCJpZihcIix1LFwiLmJ1ZmZlcil7XCIsbCxcIi5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoXCIsYyxcIik7XCIsXCJ9aWYoXCIsYnQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUrXCIuXCIrdCtcIiE9PVwiK2ZbZV19KS5qb2luKFwifHxcIiksXCIpe1wiLGwsXCIudmVydGV4QXR0cmliNGYoXCIsYyxcIixcIixmLFwiKTtcIixidC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdStcIi5cIit0K1wiPVwiK2ZbZV0rXCI7XCJ9KS5qb2luKFwiXCIpLFwifVwiKX12YXIgbD1vLmdsLGM9ZS5kZWYocixcIi5sb2NhdGlvblwiKSx1PWUuZGVmKG8uYXR0cmlidXRlcyxcIltcIixjLFwiXVwiKTtyPWkuc3RhdGU7dmFyIGg9aS5idWZmZXIsZj1baS54LGkueSxpLnosaS53XSxwPVtcImJ1ZmZlclwiLFwibm9ybWFsaXplZFwiLFwib2Zmc2V0XCIsXCJzdHJpZGVcIl07MT09PXI/YSgpOjI9PT1yP3MoKTooZShcImlmKFwiLHIsXCI9PT1cIiwxLFwiKXtcIiksYSgpLGUoXCJ9ZWxzZXtcIikscygpLGUoXCJ9XCIpKX12YXIgbz10LnNoYXJlZDtuLmZvckVhY2goZnVuY3Rpb24obil7dmFyIG8scz1uLm5hbWUsbD1yLmF0dHJpYnV0ZXNbc107aWYobCl7aWYoIWkobCkpcmV0dXJuO289bC5hcHBlbmQodCxlKX1lbHNle2lmKCFpKE10KSlyZXR1cm47dmFyIGM9dC5zY29wZUF0dHJpYihzKTtvPXt9LE9iamVjdC5rZXlzKG5ldyBaKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe29bdF09ZS5kZWYoYyxcIi5cIix0KX0pfWEodC5saW5rKG4pLGZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIDM1NjY0OmNhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gMjtjYXNlIDM1NjY1OmNhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gMztjYXNlIDM1NjY2OmNhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gNDtkZWZhdWx0OnJldHVybiAxfX0obi5pbmZvLnR5cGUpLG8pfSl9ZnVuY3Rpb24gaih0LHIsbixpLG8pe2Zvcih2YXIgcyxsPXQuc2hhcmVkLGM9bC5nbCx1PTA7dTxpLmxlbmd0aDsrK3Upe3ZhciBoLGY9KGc9aVt1XSkubmFtZSxwPWcuaW5mby50eXBlLGQ9bi51bmlmb3Jtc1tmXSxnPXQubGluayhnKStcIi5sb2NhdGlvblwiO2lmKGQpe2lmKCFvKGQpKWNvbnRpbnVlO2lmKFAoZCkpe2lmKGY9ZC52YWx1ZSwzNTY3OD09PXB8fDM1NjgwPT09cClyKGMsXCIudW5pZm9ybTFpKFwiLGcsXCIsXCIsKHA9dC5saW5rKGYuX3RleHR1cmV8fGYuY29sb3JbMF0uX3RleHR1cmUpKStcIi5iaW5kKCkpO1wiKSxyLmV4aXQocCxcIi51bmJpbmQoKTtcIik7ZWxzZSBpZigzNTY3ND09PXB8fDM1Njc1PT09cHx8MzU2NzY9PT1wKWQ9MiwzNTY3NT09PXA/ZD0zOjM1Njc2PT09cCYmKGQ9NCkscihjLFwiLnVuaWZvcm1NYXRyaXhcIixkLFwiZnYoXCIsZyxcIixmYWxzZSxcIixmPXQuZ2xvYmFsLmRlZihcIm5ldyBGbG9hdDMyQXJyYXkoW1wiK0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGYpK1wiXSlcIiksXCIpO1wiKTtlbHNle3N3aXRjaChwKXtjYXNlIDUxMjY6cz1cIjFmXCI7YnJlYWs7Y2FzZSAzNTY2NDpzPVwiMmZcIjticmVhaztjYXNlIDM1NjY1OnM9XCIzZlwiO2JyZWFrO2Nhc2UgMzU2NjY6cz1cIjRmXCI7YnJlYWs7Y2FzZSAzNTY3MDpjYXNlIDUxMjQ6cz1cIjFpXCI7YnJlYWs7Y2FzZSAzNTY3MTpjYXNlIDM1NjY3OnM9XCIyaVwiO2JyZWFrO2Nhc2UgMzU2NzI6Y2FzZSAzNTY2ODpzPVwiM2lcIjticmVhaztjYXNlIDM1NjczOnM9XCI0aVwiO2JyZWFrO2Nhc2UgMzU2Njk6cz1cIjRpXCJ9cihjLFwiLnVuaWZvcm1cIixzLFwiKFwiLGcsXCIsXCIsdihmKT9BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmKTpmLFwiKTtcIil9Y29udGludWV9aD1kLmFwcGVuZCh0LHIpfWVsc2V7aWYoIW8oTXQpKWNvbnRpbnVlO2g9ci5kZWYobC51bmlmb3JtcyxcIltcIixlLmlkKGYpLFwiXVwiKX1zd2l0Y2goMzU2Nzg9PT1wP3IoXCJpZihcIixoLFwiJiZcIixoLCcuX3JlZ2xUeXBlPT09XCJmcmFtZWJ1ZmZlclwiKXsnLGgsXCI9XCIsaCxcIi5jb2xvclswXTtcIixcIn1cIik6MzU2ODA9PT1wJiZyKFwiaWYoXCIsaCxcIiYmXCIsaCwnLl9yZWdsVHlwZT09PVwiZnJhbWVidWZmZXJDdWJlXCIpeycsaCxcIj1cIixoLFwiLmNvbG9yWzBdO1wiLFwifVwiKSxmPTEscCl7Y2FzZSAzNTY3ODpjYXNlIDM1NjgwOnA9ci5kZWYoaCxcIi5fdGV4dHVyZVwiKSxyKGMsXCIudW5pZm9ybTFpKFwiLGcsXCIsXCIscCxcIi5iaW5kKCkpO1wiKSxyLmV4aXQocCxcIi51bmJpbmQoKTtcIik7Y29udGludWU7Y2FzZSA1MTI0OmNhc2UgMzU2NzA6cz1cIjFpXCI7YnJlYWs7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnM9XCIyaVwiLGY9MjticmVhaztjYXNlIDM1NjY4OmNhc2UgMzU2NzI6cz1cIjNpXCIsZj0zO2JyZWFrO2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpzPVwiNGlcIixmPTQ7YnJlYWs7Y2FzZSA1MTI2OnM9XCIxZlwiO2JyZWFrO2Nhc2UgMzU2NjQ6cz1cIjJmXCIsZj0yO2JyZWFrO2Nhc2UgMzU2NjU6cz1cIjNmXCIsZj0zO2JyZWFrO2Nhc2UgMzU2NjY6cz1cIjRmXCIsZj00O2JyZWFrO2Nhc2UgMzU2NzQ6cz1cIk1hdHJpeDJmdlwiO2JyZWFrO2Nhc2UgMzU2NzU6cz1cIk1hdHJpeDNmdlwiO2JyZWFrO2Nhc2UgMzU2NzY6cz1cIk1hdHJpeDRmdlwifWlmKHIoYyxcIi51bmlmb3JtXCIscyxcIihcIixnLFwiLFwiKSxcIk1cIj09PXMuY2hhckF0KDApKXtnPU1hdGgucG93KHAtMzU2NzQrMiwyKTt2YXIgbT10Lmdsb2JhbC5kZWYoXCJuZXcgRmxvYXQzMkFycmF5KFwiLGcsXCIpXCIpO3IoXCJmYWxzZSwoQXJyYXkuaXNBcnJheShcIixoLFwiKXx8XCIsaCxcIiBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSk/XCIsaCxcIjooXCIsYShnLGZ1bmN0aW9uKHQpe3JldHVybiBtK1wiW1wiK3QrXCJdPVwiK2grXCJbXCIrdCtcIl1cIn0pLFwiLFwiLG0sXCIpXCIpfWVsc2UgcigxPGY/YShmLGZ1bmN0aW9uKHQpe3JldHVybiBoK1wiW1wiK3QrXCJdXCJ9KTpoKTtyKFwiKTtcIil9fWZ1bmN0aW9uIFYodCxlLHIsbil7ZnVuY3Rpb24gaShpKXt2YXIgYT1mW2ldO3JldHVybiBhP2EuY29udGV4dERlcCYmbi5jb250ZXh0RHluYW1pY3x8YS5wcm9wRGVwP2EuYXBwZW5kKHQscik6YS5hcHBlbmQodCxlKTplLmRlZihoLFwiLlwiLGkpfWZ1bmN0aW9uIGEoKXtmdW5jdGlvbiB0KCl7cihsLFwiLmRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKFwiLFtkLHYsbSxnK1wiPDwoKFwiK20rXCItNTEyMSk+PjEpXCIsc10sXCIpO1wiKX1mdW5jdGlvbiBlKCl7cihsLFwiLmRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShcIixbZCxnLHYsc10sXCIpO1wiKX1wP3k/dCgpOihyKFwiaWYoXCIscCxcIil7XCIpLHQoKSxyKFwifWVsc2V7XCIpLGUoKSxyKFwifVwiKSk6ZSgpfWZ1bmN0aW9uIG8oKXtmdW5jdGlvbiB0KCl7cih1K1wiLmRyYXdFbGVtZW50cyhcIitbZCx2LG0sZytcIjw8KChcIittK1wiLTUxMjEpPj4xKVwiXStcIik7XCIpfWZ1bmN0aW9uIGUoKXtyKHUrXCIuZHJhd0FycmF5cyhcIitbZCxnLHZdK1wiKTtcIil9cD95P3QoKToocihcImlmKFwiLHAsXCIpe1wiKSx0KCkscihcIn1lbHNle1wiKSxlKCkscihcIn1cIikpOmUoKX12YXIgcyxsLGM9dC5zaGFyZWQsdT1jLmdsLGg9Yy5kcmF3LGY9bi5kcmF3LHA9ZnVuY3Rpb24oKXt2YXIgaT1mLmVsZW1lbnRzLGE9ZTtyZXR1cm4gaT8oKGkuY29udGV4dERlcCYmbi5jb250ZXh0RHluYW1pY3x8aS5wcm9wRGVwKSYmKGE9ciksaT1pLmFwcGVuZCh0LGEpKTppPWEuZGVmKGgsXCIuXCIsXCJlbGVtZW50c1wiKSxpJiZhKFwiaWYoXCIraStcIilcIit1K1wiLmJpbmRCdWZmZXIoMzQ5NjMsXCIraStcIi5idWZmZXIuYnVmZmVyKTtcIiksaX0oKSxkPWkoXCJwcmltaXRpdmVcIiksZz1pKFwib2Zmc2V0XCIpLHY9ZnVuY3Rpb24oKXt2YXIgaT1mLmNvdW50LGE9ZTtyZXR1cm4gaT8oKGkuY29udGV4dERlcCYmbi5jb250ZXh0RHluYW1pY3x8aS5wcm9wRGVwKSYmKGE9ciksaT1pLmFwcGVuZCh0LGEpKTppPWEuZGVmKGgsXCIuXCIsXCJjb3VudFwiKSxpfSgpO2lmKFwibnVtYmVyXCI9PXR5cGVvZiB2KXtpZigwPT09dilyZXR1cm59ZWxzZSByKFwiaWYoXCIsdixcIil7XCIpLHIuZXhpdChcIn1cIik7SyYmKHM9aShcImluc3RhbmNlc1wiKSxsPXQuaW5zdGFuY2luZyk7dmFyIG09cCtcIi50eXBlXCIseT1mLmVsZW1lbnRzJiZQKGYuZWxlbWVudHMpO0smJihcIm51bWJlclwiIT10eXBlb2Ygc3x8MDw9cyk/XCJzdHJpbmdcIj09dHlwZW9mIHM/KHIoXCJpZihcIixzLFwiPjApe1wiKSxhKCkscihcIn1lbHNlIGlmKFwiLHMsXCI8MCl7XCIpLG8oKSxyKFwifVwiKSk6YSgpOm8oKX1mdW5jdGlvbiBxKHQsZSxyLG4saSl7cmV0dXJuIGk9KGU9YigpKS5wcm9jKFwiYm9keVwiLGkpLEsmJihlLmluc3RhbmNpbmc9aS5kZWYoZS5zaGFyZWQuZXh0ZW5zaW9ucyxcIi5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzXCIpKSx0KGUsaSxyLG4pLGUuY29tcGlsZSgpLmJvZHl9ZnVuY3Rpb24gSCh0LGUscixuKXtMKHQsZSksTih0LGUscixuLmF0dHJpYnV0ZXMsZnVuY3Rpb24oKXtyZXR1cm4hMH0pLGoodCxlLHIsbi51bmlmb3JtcyxmdW5jdGlvbigpe3JldHVybiEwfSksVih0LGUsZSxyKX1mdW5jdGlvbiBHKHQsZSxyLG4pe2Z1bmN0aW9uIGkoKXtyZXR1cm4hMH10LmJhdGNoSWQ9XCJhMVwiLEwodCxlKSxOKHQsZSxyLG4uYXR0cmlidXRlcyxpKSxqKHQsZSxyLG4udW5pZm9ybXMsaSksVih0LGUsZSxyKX1mdW5jdGlvbiBZKHQsZSxyLG4pe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQuY29udGV4dERlcCYmb3x8dC5wcm9wRGVwfWZ1bmN0aW9uIGEodCl7cmV0dXJuIWkodCl9TCh0LGUpO3ZhciBvPXIuY29udGV4dERlcCxzPWUuZGVmKCksbD1lLmRlZigpO3Quc2hhcmVkLnByb3BzPWwsdC5iYXRjaElkPXM7dmFyIGM9dC5zY29wZSgpLHU9dC5zY29wZSgpO2UoYy5lbnRyeSxcImZvcihcIixzLFwiPTA7XCIscyxcIjxcIixcImExXCIsXCI7KytcIixzLFwiKXtcIixsLFwiPVwiLFwiYTBcIixcIltcIixzLFwiXTtcIix1LFwifVwiLGMuZXhpdCksci5uZWVkc0NvbnRleHQmJk0odCx1LHIuY29udGV4dCksci5uZWVkc0ZyYW1lYnVmZmVyJiZTKHQsdSxyLmZyYW1lYnVmZmVyKSxDKHQsdSxyLnN0YXRlLGkpLHIucHJvZmlsZSYmaShyLnByb2ZpbGUpJiZCKHQsdSxyLCExLCEwKSxuPyhOKHQsYyxyLG4uYXR0cmlidXRlcyxhKSxOKHQsdSxyLG4uYXR0cmlidXRlcyxpKSxqKHQsYyxyLG4udW5pZm9ybXMsYSksaih0LHUscixuLnVuaWZvcm1zLGkpLFYodCxjLHUscikpOihlPXQuZ2xvYmFsLmRlZihcInt9XCIpLG49ci5zaGFkZXIucHJvZ1Zhci5hcHBlbmQodCx1KSxsPXUuZGVmKG4sXCIuaWRcIiksYz11LmRlZihlLFwiW1wiLGwsXCJdXCIpLHUodC5zaGFyZWQuZ2wsXCIudXNlUHJvZ3JhbShcIixuLFwiLnByb2dyYW0pO1wiLFwiaWYoIVwiLGMsXCIpe1wiLGMsXCI9XCIsZSxcIltcIixsLFwiXT1cIix0LmxpbmsoZnVuY3Rpb24oZSl7cmV0dXJuIHEoRyx0LHIsZSwyKX0pLFwiKFwiLG4sXCIpO31cIixjLFwiLmNhbGwodGhpcyxhMFtcIixzLFwiXSxcIixzLFwiKTtcIikpfWZ1bmN0aW9uIFcodCxyKXtmdW5jdGlvbiBuKGUpe3ZhciBuPXIuc2hhZGVyW2VdO24mJmkuc2V0KGEuc2hhZGVyLFwiLlwiK2Usbi5hcHBlbmQodCxpKSl9dmFyIGk9dC5wcm9jKFwic2NvcGVcIiwzKTt0LmJhdGNoSWQ9XCJhMlwiO3ZhciBhPXQuc2hhcmVkLG89YS5jdXJyZW50O00odCxpLHIuY29udGV4dCksci5mcmFtZWJ1ZmZlciYmci5mcmFtZWJ1ZmZlci5hcHBlbmQodCxpKSxJKE9iamVjdC5rZXlzKHIuc3RhdGUpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXIuc3RhdGVbZV0uYXBwZW5kKHQsaSk7dihuKT9uLmZvckVhY2goZnVuY3Rpb24ocixuKXtpLnNldCh0Lm5leHRbZV0sXCJbXCIrbitcIl1cIixyKX0pOmkuc2V0KGEubmV4dCxcIi5cIitlLG4pfSksQih0LGksciwhMCwhMCksW1wiZWxlbWVudHNcIixcIm9mZnNldFwiLFwiY291bnRcIixcImluc3RhbmNlc1wiLFwicHJpbWl0aXZlXCJdLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49ci5kcmF3W2VdO24mJmkuc2V0KGEuZHJhdyxcIi5cIitlLFwiXCIrbi5hcHBlbmQodCxpKSl9KSxPYmplY3Qua2V5cyhyLnVuaWZvcm1zKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2kuc2V0KGEudW5pZm9ybXMsXCJbXCIrZS5pZChuKStcIl1cIixyLnVuaWZvcm1zW25dLmFwcGVuZCh0LGkpKX0pLE9iamVjdC5rZXlzKHIuYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj1yLmF0dHJpYnV0ZXNbZV0uYXBwZW5kKHQsaSksYT10LnNjb3BlQXR0cmliKGUpO09iamVjdC5rZXlzKG5ldyBaKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2kuc2V0KGEsXCIuXCIrdCxuW3RdKX0pfSksbihcInZlcnRcIiksbihcImZyYWdcIiksMDxPYmplY3Qua2V5cyhyLnN0YXRlKS5sZW5ndGgmJihpKG8sXCIuZGlydHk9dHJ1ZTtcIiksaS5leGl0KG8sXCIuZGlydHk9dHJ1ZTtcIikpLGkoXCJhMShcIix0LnNoYXJlZC5jb250ZXh0LFwiLGEwLFwiLHQuYmF0Y2hJZCxcIik7XCIpfWZ1bmN0aW9uIFgodCxlLHIpe3ZhciBuPWUuc3RhdGljW3JdO2lmKG4mJmZ1bmN0aW9uKHQpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0JiYhdih0KSl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKHQpLHI9MDtyPGUubGVuZ3RoOysrcilpZihVLmlzRHluYW1pYyh0W2Vbcl1dKSlyZXR1cm4hMDtyZXR1cm4hMX19KG4pKXt2YXIgaT10Lmdsb2JhbCxhPU9iamVjdC5rZXlzKG4pLG89ITEscz0hMSxsPSExLGM9dC5nbG9iYWwuZGVmKFwie31cIik7YS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW5bZV07aWYoVS5pc0R5bmFtaWMocikpXCJmdW5jdGlvblwiPT10eXBlb2YgciYmKHI9bltlXT1VLnVuYm94KHIpKSxlPUYocixudWxsKSxvPW98fGUudGhpc0RlcCxsPWx8fGUucHJvcERlcCxzPXN8fGUuY29udGV4dERlcDtlbHNle3N3aXRjaChpKGMsXCIuXCIsZSxcIj1cIiksdHlwZW9mIHIpe2Nhc2VcIm51bWJlclwiOmkocik7YnJlYWs7Y2FzZVwic3RyaW5nXCI6aSgnXCInLHIsJ1wiJyk7YnJlYWs7Y2FzZVwib2JqZWN0XCI6QXJyYXkuaXNBcnJheShyKSYmaShcIltcIixyLmpvaW4oKSxcIl1cIik7YnJlYWs7ZGVmYXVsdDppKHQubGluayhyKSl9aShcIjtcIil9fSksZS5keW5hbWljW3JdPW5ldyBVLkR5bmFtaWNWYXJpYWJsZSg0LHt0aGlzRGVwOm8sY29udGV4dERlcDpzLHByb3BEZXA6bCxyZWY6YyxhcHBlbmQ6ZnVuY3Rpb24odCxlKXthLmZvckVhY2goZnVuY3Rpb24ocil7dmFyIGk9bltyXTtVLmlzRHluYW1pYyhpKSYmKGk9dC5pbnZva2UoZSxpKSxlKGMsXCIuXCIscixcIj1cIixpLFwiO1wiKSl9KX19KSxkZWxldGUgZS5zdGF0aWNbcl19fXZhciBaPXUuUmVjb3JkLCQ9e2FkZDozMjc3NCxzdWJ0cmFjdDozMjc3OCxcInJldmVyc2Ugc3VidHJhY3RcIjozMjc3OX07ci5leHRfYmxlbmRfbWlubWF4JiYoJC5taW49MzI3NzUsJC5tYXg9MzI3NzYpO3ZhciBLPXIuYW5nbGVfaW5zdGFuY2VkX2FycmF5cyxRPXIud2ViZ2xfZHJhd19idWZmZXJzLHR0PXtkaXJ0eTohMCxwcm9maWxlOmcucHJvZmlsZX0sZXQ9e30sbnQ9W10saXQ9e30sYXQ9e307eShcImRpdGhlclwiLDMwMjQpLHkoXCJibGVuZC5lbmFibGVcIiwzMDQyKSx4KFwiYmxlbmQuY29sb3JcIixcImJsZW5kQ29sb3JcIixbMCwwLDAsMF0pLHgoXCJibGVuZC5lcXVhdGlvblwiLFwiYmxlbmRFcXVhdGlvblNlcGFyYXRlXCIsWzMyNzc0LDMyNzc0XSkseChcImJsZW5kLmZ1bmNcIixcImJsZW5kRnVuY1NlcGFyYXRlXCIsWzEsMCwxLDBdKSx5KFwiZGVwdGguZW5hYmxlXCIsMjkyOSwhMCkseChcImRlcHRoLmZ1bmNcIixcImRlcHRoRnVuY1wiLDUxMykseChcImRlcHRoLnJhbmdlXCIsXCJkZXB0aFJhbmdlXCIsWzAsMV0pLHgoXCJkZXB0aC5tYXNrXCIsXCJkZXB0aE1hc2tcIiwhMCkseChcImNvbG9yTWFza1wiLFwiY29sb3JNYXNrXCIsWyEwLCEwLCEwLCEwXSkseShcImN1bGwuZW5hYmxlXCIsMjg4NCkseChcImN1bGwuZmFjZVwiLFwiY3VsbEZhY2VcIiwxMDI5KSx4KFwiZnJvbnRGYWNlXCIsXCJmcm9udEZhY2VcIiwyMzA1KSx4KFwibGluZVdpZHRoXCIsXCJsaW5lV2lkdGhcIiwxKSx5KFwicG9seWdvbk9mZnNldC5lbmFibGVcIiwzMjgyMykseChcInBvbHlnb25PZmZzZXQub2Zmc2V0XCIsXCJwb2x5Z29uT2Zmc2V0XCIsWzAsMF0pLHkoXCJzYW1wbGUuYWxwaGFcIiwzMjkyNikseShcInNhbXBsZS5lbmFibGVcIiwzMjkyOCkseChcInNhbXBsZS5jb3ZlcmFnZVwiLFwic2FtcGxlQ292ZXJhZ2VcIixbMSwhMV0pLHkoXCJzdGVuY2lsLmVuYWJsZVwiLDI5NjApLHgoXCJzdGVuY2lsLm1hc2tcIixcInN0ZW5jaWxNYXNrXCIsLTEpLHgoXCJzdGVuY2lsLmZ1bmNcIixcInN0ZW5jaWxGdW5jXCIsWzUxOSwwLC0xXSkseChcInN0ZW5jaWwub3BGcm9udFwiLFwic3RlbmNpbE9wU2VwYXJhdGVcIixbMTAyOCw3NjgwLDc2ODAsNzY4MF0pLHgoXCJzdGVuY2lsLm9wQmFja1wiLFwic3RlbmNpbE9wU2VwYXJhdGVcIixbMTAyOSw3NjgwLDc2ODAsNzY4MF0pLHkoXCJzY2lzc29yLmVuYWJsZVwiLDMwODkpLHgoXCJzY2lzc29yLmJveFwiLFwic2Npc3NvclwiLFswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XSkseChcInZpZXdwb3J0XCIsXCJ2aWV3cG9ydFwiLFswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XSk7dmFyIG90PXtnbDp0LGNvbnRleHQ6cCxzdHJpbmdzOmUsbmV4dDpldCxjdXJyZW50OnR0LGRyYXc6ZixlbGVtZW50czpvLGJ1ZmZlcjppLHNoYWRlcjpoLGF0dHJpYnV0ZXM6dS5zdGF0ZSx1bmlmb3JtczpjLGZyYW1lYnVmZmVyOmwsZXh0ZW5zaW9uczpyLHRpbWVyOmQsaXNCdWZmZXJBcmdzOk99LHN0PXtwcmltVHlwZXM6cnQsY29tcGFyZUZ1bmNzOmt0LGJsZW5kRnVuY3M6d3QsYmxlbmRFcXVhdGlvbnM6JCxzdGVuY2lsT3BzOkF0LGdsVHlwZXM6SixvcmllbnRhdGlvblR5cGU6VHR9O1EmJihzdC5iYWNrQnVmZmVyPVsxMDI5XSxzdC5kcmF3QnVmZmVyPWEobi5tYXhEcmF3YnVmZmVycyxmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQ/WzBdOmEodCxmdW5jdGlvbih0KXtyZXR1cm4gMzYwNjQrdH0pfSkpO3ZhciBsdD0wO3JldHVybntuZXh0OmV0LGN1cnJlbnQ6dHQscHJvY3M6ZnVuY3Rpb24oKXt2YXIgdD1iKCksZT10LnByb2MoXCJwb2xsXCIpLHI9dC5wcm9jKFwicmVmcmVzaFwiKSxpPXQuYmxvY2soKTtlKGkpLHIoaSk7dmFyIG8scz10LnNoYXJlZCxsPXMuZ2wsYz1zLm5leHQsdT1zLmN1cnJlbnQ7aSh1LFwiLmRpcnR5PWZhbHNlO1wiKSxTKHQsZSksUyh0LHIsbnVsbCwhMCksSyYmKG89dC5saW5rKEspKTtmb3IodmFyIGg9MDtoPG4ubWF4QXR0cmlidXRlczsrK2gpe3ZhciBmPXIuZGVmKHMuYXR0cmlidXRlcyxcIltcIixoLFwiXVwiKSxwPXQuY29uZChmLFwiLmJ1ZmZlclwiKTtwLnRoZW4obCxcIi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShcIixoLFwiKTtcIixsLFwiLmJpbmRCdWZmZXIoXCIsMzQ5NjIsXCIsXCIsZixcIi5idWZmZXIuYnVmZmVyKTtcIixsLFwiLnZlcnRleEF0dHJpYlBvaW50ZXIoXCIsaCxcIixcIixmLFwiLnNpemUsXCIsZixcIi50eXBlLFwiLGYsXCIubm9ybWFsaXplZCxcIixmLFwiLnN0cmlkZSxcIixmLFwiLm9mZnNldCk7XCIpLmVsc2UobCxcIi5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoXCIsaCxcIik7XCIsbCxcIi52ZXJ0ZXhBdHRyaWI0ZihcIixoLFwiLFwiLGYsXCIueCxcIixmLFwiLnksXCIsZixcIi56LFwiLGYsXCIudyk7XCIsZixcIi5idWZmZXI9bnVsbDtcIikscihwKSxLJiZyKG8sXCIudmVydGV4QXR0cmliRGl2aXNvckFOR0xFKFwiLGgsXCIsXCIsZixcIi5kaXZpc29yKTtcIil9cmV0dXJuIE9iamVjdC5rZXlzKGl0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBhPWl0W25dLG89aS5kZWYoYyxcIi5cIixuKSxzPXQuYmxvY2soKTtzKFwiaWYoXCIsbyxcIil7XCIsbCxcIi5lbmFibGUoXCIsYSxcIil9ZWxzZXtcIixsLFwiLmRpc2FibGUoXCIsYSxcIil9XCIsdSxcIi5cIixuLFwiPVwiLG8sXCI7XCIpLHIocyksZShcImlmKFwiLG8sXCIhPT1cIix1LFwiLlwiLG4sXCIpe1wiLHMsXCJ9XCIpfSksT2JqZWN0LmtleXMoYXQpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIG8scyxoPWF0W25dLGY9dHRbbl0scD10LmJsb2NrKCk7cChsLFwiLlwiLGgsXCIoXCIpLHYoZik/KGg9Zi5sZW5ndGgsbz10Lmdsb2JhbC5kZWYoYyxcIi5cIixuKSxzPXQuZ2xvYmFsLmRlZih1LFwiLlwiLG4pLHAoYShoLGZ1bmN0aW9uKHQpe3JldHVybiBvK1wiW1wiK3QrXCJdXCJ9KSxcIik7XCIsYShoLGZ1bmN0aW9uKHQpe3JldHVybiBzK1wiW1wiK3QrXCJdPVwiK28rXCJbXCIrdCtcIl07XCJ9KS5qb2luKFwiXCIpKSxlKFwiaWYoXCIsYShoLGZ1bmN0aW9uKHQpe3JldHVybiBvK1wiW1wiK3QrXCJdIT09XCIrcytcIltcIit0K1wiXVwifSkuam9pbihcInx8XCIpLFwiKXtcIixwLFwifVwiKSk6KG89aS5kZWYoYyxcIi5cIixuKSxzPWkuZGVmKHUsXCIuXCIsbikscChvLFwiKTtcIix1LFwiLlwiLG4sXCI9XCIsbyxcIjtcIiksZShcImlmKFwiLG8sXCIhPT1cIixzLFwiKXtcIixwLFwifVwiKSkscihwKX0pLHQuY29tcGlsZSgpfSgpLGNvbXBpbGU6ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1iKCk7cmV0dXJuIGEuc3RhdHM9YS5saW5rKGkpLE9iamVjdC5rZXlzKGUuc3RhdGljKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe1goYSxlLHQpfSksX3QuZm9yRWFjaChmdW5jdGlvbihlKXtYKGEsdCxlKX0pLHI9VCh0LGUscixuKSxmdW5jdGlvbih0LGUpe3ZhciByPXQucHJvYyhcImRyYXdcIiwxKTtMKHQsciksTSh0LHIsZS5jb250ZXh0KSxTKHQscixlLmZyYW1lYnVmZmVyKSxFKHQscixlKSxDKHQscixlLnN0YXRlKSxCKHQscixlLCExLCEwKTt2YXIgbj1lLnNoYWRlci5wcm9nVmFyLmFwcGVuZCh0LHIpO2lmKHIodC5zaGFyZWQuZ2wsXCIudXNlUHJvZ3JhbShcIixuLFwiLnByb2dyYW0pO1wiKSxlLnNoYWRlci5wcm9ncmFtKUgodCxyLGUsZS5zaGFkZXIucHJvZ3JhbSk7ZWxzZXt2YXIgaT10Lmdsb2JhbC5kZWYoXCJ7fVwiKSxhPXIuZGVmKG4sXCIuaWRcIiksbz1yLmRlZihpLFwiW1wiLGEsXCJdXCIpO3IodC5jb25kKG8pLnRoZW4obyxcIi5jYWxsKHRoaXMsYTApO1wiKS5lbHNlKG8sXCI9XCIsaSxcIltcIixhLFwiXT1cIix0LmxpbmsoZnVuY3Rpb24ocil7cmV0dXJuIHEoSCx0LGUsciwxKX0pLFwiKFwiLG4sXCIpO1wiLG8sXCIuY2FsbCh0aGlzLGEwKTtcIikpfTA8T2JqZWN0LmtleXMoZS5zdGF0ZSkubGVuZ3RoJiZyKHQuc2hhcmVkLmN1cnJlbnQsXCIuZGlydHk9dHJ1ZTtcIil9KGEsciksVyhhLHIpLGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdC5jb250ZXh0RGVwJiZpfHx0LnByb3BEZXB9dmFyIG49dC5wcm9jKFwiYmF0Y2hcIiwyKTt0LmJhdGNoSWQ9XCIwXCIsTCh0LG4pO3ZhciBpPSExLGE9ITA7T2JqZWN0LmtleXMoZS5jb250ZXh0KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2k9aXx8ZS5jb250ZXh0W3RdLnByb3BEZXB9KSxpfHwoTSh0LG4sZS5jb250ZXh0KSxhPSExKTt2YXIgbz0hMTtpZigocz1lLmZyYW1lYnVmZmVyKT8ocy5wcm9wRGVwP2k9bz0hMDpzLmNvbnRleHREZXAmJmkmJihvPSEwKSxvfHxTKHQsbixzKSk6Uyh0LG4sbnVsbCksZS5zdGF0ZS52aWV3cG9ydCYmZS5zdGF0ZS52aWV3cG9ydC5wcm9wRGVwJiYoaT0hMCksRSh0LG4sZSksQyh0LG4sZS5zdGF0ZSxmdW5jdGlvbih0KXtyZXR1cm4hcih0KX0pLGUucHJvZmlsZSYmcihlLnByb2ZpbGUpfHxCKHQsbixlLCExLFwiYTFcIiksZS5jb250ZXh0RGVwPWksZS5uZWVkc0NvbnRleHQ9YSxlLm5lZWRzRnJhbWVidWZmZXI9bywoYT1lLnNoYWRlci5wcm9nVmFyKS5jb250ZXh0RGVwJiZpfHxhLnByb3BEZXApWSh0LG4sZSxudWxsKTtlbHNlIGlmKGE9YS5hcHBlbmQodCxuKSxuKHQuc2hhcmVkLmdsLFwiLnVzZVByb2dyYW0oXCIsYSxcIi5wcm9ncmFtKTtcIiksZS5zaGFkZXIucHJvZ3JhbSlZKHQsbixlLGUuc2hhZGVyLnByb2dyYW0pO2Vsc2V7dmFyIHM9dC5nbG9iYWwuZGVmKFwie31cIiksbD0obz1uLmRlZihhLFwiLmlkXCIpLG4uZGVmKHMsXCJbXCIsbyxcIl1cIikpO24odC5jb25kKGwpLnRoZW4obCxcIi5jYWxsKHRoaXMsYTAsYTEpO1wiKS5lbHNlKGwsXCI9XCIscyxcIltcIixvLFwiXT1cIix0LmxpbmsoZnVuY3Rpb24ocil7cmV0dXJuIHEoWSx0LGUsciwyKX0pLFwiKFwiLGEsXCIpO1wiLGwsXCIuY2FsbCh0aGlzLGEwLGExKTtcIikpfTA8T2JqZWN0LmtleXMoZS5zdGF0ZSkubGVuZ3RoJiZuKHQuc2hhcmVkLmN1cnJlbnQsXCIuZGlydHk9dHJ1ZTtcIil9KGEsciksYS5jb21waWxlKCl9fX1mdW5jdGlvbiBOKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpaWYodFtyXT09PWUpcmV0dXJuIHI7cmV0dXJuLTF9dmFyIGo9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9T2JqZWN0LmtleXMoZSksbj0wO248ci5sZW5ndGg7KytuKXRbcltuXV09ZVtyW25dXTtyZXR1cm4gdH0sVj0wLFU9e0R5bmFtaWNWYXJpYWJsZTp0LGRlZmluZTpmdW5jdGlvbihyLG4pe3JldHVybiBuZXcgdChyLGUobitcIlwiKSl9LGlzRHluYW1pYzpmdW5jdGlvbihlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYhZS5fcmVnbFR5cGV8fGUgaW5zdGFuY2VvZiB0fSx1bmJveDpmdW5jdGlvbihlLHIpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGU/bmV3IHQoMCxlKTplfSxhY2Nlc3NvcjplfSxxPXtuZXh0OlwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT9mdW5jdGlvbih0KXtyZXR1cm4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpfTpmdW5jdGlvbih0KXtyZXR1cm4gc2V0VGltZW91dCh0LDE2KX0sY2FuY2VsOlwiZnVuY3Rpb25cIj09dHlwZW9mIGNhbmNlbEFuaW1hdGlvbkZyYW1lP2Z1bmN0aW9uKHQpe3JldHVybiBjYW5jZWxBbmltYXRpb25GcmFtZSh0KX06Y2xlYXJUaW1lb3V0fSxIPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P2Z1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTpmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX0sRz1zKCk7Ry56ZXJvPXMoKTt2YXIgWT1mdW5jdGlvbih0LGUpe3ZhciByPTE7ZS5leHRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMmJihyPXQuZ2V0UGFyYW1ldGVyKDM0MDQ3KSk7dmFyIG49MSxpPTE7ZS53ZWJnbF9kcmF3X2J1ZmZlcnMmJihuPXQuZ2V0UGFyYW1ldGVyKDM0ODUyKSxpPXQuZ2V0UGFyYW1ldGVyKDM2MDYzKSk7dmFyIGE9ISFlLm9lc190ZXh0dXJlX2Zsb2F0O2lmKGEpe2E9dC5jcmVhdGVUZXh0dXJlKCksdC5iaW5kVGV4dHVyZSgzNTUzLGEpLHQudGV4SW1hZ2UyRCgzNTUzLDAsNjQwOCwxLDEsMCw2NDA4LDUxMjYsbnVsbCk7dmFyIG89dC5jcmVhdGVGcmFtZWJ1ZmZlcigpO2lmKHQuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG8pLHQuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwNjQsMzU1MyxhLDApLHQuYmluZFRleHR1cmUoMzU1MyxudWxsKSwzNjA1MyE9PXQuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cygzNjE2MCkpYT0hMTtlbHNle3Qudmlld3BvcnQoMCwwLDEsMSksdC5jbGVhckNvbG9yKDEsMCwwLDEpLHQuY2xlYXIoMTYzODQpO3ZhciBzPUcuYWxsb2NUeXBlKDUxMjYsNCk7dC5yZWFkUGl4ZWxzKDAsMCwxLDEsNjQwOCw1MTI2LHMpLHQuZ2V0RXJyb3IoKT9hPSExOih0LmRlbGV0ZUZyYW1lYnVmZmVyKG8pLHQuZGVsZXRlVGV4dHVyZShhKSxhPTE9PT1zWzBdKSxHLmZyZWVUeXBlKHMpfX1yZXR1cm4gcz0hMCxcInVuZGVmaW5lZFwiIT10eXBlb2YgbmF2aWdhdG9yJiYoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl8fC9UcmlkZW50XFwvLy50ZXN0KG5hdmlnYXRvci5hcHBWZXJzaW9uKXx8L0VkZ2UvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpfHwocz10LmNyZWF0ZVRleHR1cmUoKSxvPUcuYWxsb2NUeXBlKDUxMjEsMzYpLHQuYWN0aXZlVGV4dHVyZSgzMzk4NCksdC5iaW5kVGV4dHVyZSgzNDA2NyxzKSx0LnRleEltYWdlMkQoMzQwNjksMCw2NDA4LDMsMywwLDY0MDgsNTEyMSxvKSxHLmZyZWVUeXBlKG8pLHQuYmluZFRleHR1cmUoMzQwNjcsbnVsbCksdC5kZWxldGVUZXh0dXJlKHMpLHM9IXQuZ2V0RXJyb3IoKSkse2NvbG9yQml0czpbdC5nZXRQYXJhbWV0ZXIoMzQxMCksdC5nZXRQYXJhbWV0ZXIoMzQxMSksdC5nZXRQYXJhbWV0ZXIoMzQxMiksdC5nZXRQYXJhbWV0ZXIoMzQxMyldLGRlcHRoQml0czp0LmdldFBhcmFtZXRlcigzNDE0KSxzdGVuY2lsQml0czp0LmdldFBhcmFtZXRlcigzNDE1KSxzdWJwaXhlbEJpdHM6dC5nZXRQYXJhbWV0ZXIoMzQwOCksZXh0ZW5zaW9uczpPYmplY3Qua2V5cyhlKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuISFlW3RdfSksbWF4QW5pc290cm9waWM6cixtYXhEcmF3YnVmZmVyczpuLG1heENvbG9yQXR0YWNobWVudHM6aSxwb2ludFNpemVEaW1zOnQuZ2V0UGFyYW1ldGVyKDMzOTAxKSxsaW5lV2lkdGhEaW1zOnQuZ2V0UGFyYW1ldGVyKDMzOTAyKSxtYXhWaWV3cG9ydERpbXM6dC5nZXRQYXJhbWV0ZXIoMzM4NiksbWF4Q29tYmluZWRUZXh0dXJlVW5pdHM6dC5nZXRQYXJhbWV0ZXIoMzU2NjEpLG1heEN1YmVNYXBTaXplOnQuZ2V0UGFyYW1ldGVyKDM0MDc2KSxtYXhSZW5kZXJidWZmZXJTaXplOnQuZ2V0UGFyYW1ldGVyKDM0MDI0KSxtYXhUZXh0dXJlVW5pdHM6dC5nZXRQYXJhbWV0ZXIoMzQ5MzApLG1heFRleHR1cmVTaXplOnQuZ2V0UGFyYW1ldGVyKDMzNzkpLG1heEF0dHJpYnV0ZXM6dC5nZXRQYXJhbWV0ZXIoMzQ5MjEpLG1heFZlcnRleFVuaWZvcm1zOnQuZ2V0UGFyYW1ldGVyKDM2MzQ3KSxtYXhWZXJ0ZXhUZXh0dXJlVW5pdHM6dC5nZXRQYXJhbWV0ZXIoMzU2NjApLG1heFZhcnlpbmdWZWN0b3JzOnQuZ2V0UGFyYW1ldGVyKDM2MzQ4KSxtYXhGcmFnbWVudFVuaWZvcm1zOnQuZ2V0UGFyYW1ldGVyKDM2MzQ5KSxnbHNsOnQuZ2V0UGFyYW1ldGVyKDM1NzI0KSxyZW5kZXJlcjp0LmdldFBhcmFtZXRlcig3OTM3KSx2ZW5kb3I6dC5nZXRQYXJhbWV0ZXIoNzkzNiksdmVyc2lvbjp0LmdldFBhcmFtZXRlcig3OTM4KSxyZWFkRmxvYXQ6YSxucG90VGV4dHVyZUN1YmU6c319LFc9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx0IGluc3RhbmNlb2YgVWludDE2QXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50MzJBcnJheXx8dCBpbnN0YW5jZW9mIEludDhBcnJheXx8dCBpbnN0YW5jZW9mIEludDE2QXJyYXl8fHQgaW5zdGFuY2VvZiBJbnQzMkFycmF5fHx0IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5fHx0IGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5fHx0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXl9LFg9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfSxaPXtzaGFwZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9W107dC5sZW5ndGg7dD10WzBdKWUucHVzaCh0Lmxlbmd0aCk7cmV0dXJuIGV9LGZsYXR0ZW46ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9MTtpZihlLmxlbmd0aClmb3IodmFyIGE9MDthPGUubGVuZ3RoOysrYSlpKj1lW2FdO2Vsc2UgaT0wO3N3aXRjaChyPW58fEcuYWxsb2NUeXBlKHIsaSksZS5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6Zm9yKG49ZVswXSxlPTA7ZTxuOysrZSlyW2VdPXRbZV07YnJlYWs7Y2FzZSAyOmZvcihuPWVbMF0sZT1lWzFdLGE9aT0wO2E8bjsrK2EpZm9yKHZhciBvPXRbYV0scz0wO3M8ZTsrK3MpcltpKytdPW9bc107YnJlYWs7Y2FzZSAzOmModCxlWzBdLGVbMV0sZVsyXSxyLDApO2JyZWFrO2RlZmF1bHQ6IWZ1bmN0aW9uIHQoZSxyLG4saSxhKXtmb3IodmFyIG89MSxzPW4rMTtzPHIubGVuZ3RoOysrcylvKj1yW3NdO3ZhciBsPXJbbl07aWYoND09ci5sZW5ndGgtbil7dmFyIHU9cltuKzFdLGg9cltuKzJdO2ZvcihyPXJbbiszXSxzPTA7czxsOysrcyljKGVbc10sdSxoLHIsaSxhKSxhKz1vfWVsc2UgZm9yKHM9MDtzPGw7KytzKXQoZVtzXSxyLG4rMSxpLGEpLGErPW99KHQsZSwwLHIsMCl9cmV0dXJuIHJ9fSwkPXtcIltvYmplY3QgSW50OEFycmF5XVwiOjUxMjAsXCJbb2JqZWN0IEludDE2QXJyYXldXCI6NTEyMixcIltvYmplY3QgSW50MzJBcnJheV1cIjo1MTI0LFwiW29iamVjdCBVaW50OEFycmF5XVwiOjUxMjEsXCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XVwiOjUxMjEsXCJbb2JqZWN0IFVpbnQxNkFycmF5XVwiOjUxMjMsXCJbb2JqZWN0IFVpbnQzMkFycmF5XVwiOjUxMjUsXCJbb2JqZWN0IEZsb2F0MzJBcnJheV1cIjo1MTI2LFwiW29iamVjdCBGbG9hdDY0QXJyYXldXCI6NTEyMSxcIltvYmplY3QgQXJyYXlCdWZmZXJdXCI6NTEyMX0sSj17aW50ODo1MTIwLGludDE2OjUxMjIsaW50MzI6NTEyNCx1aW50ODo1MTIxLHVpbnQxNjo1MTIzLHVpbnQzMjo1MTI1LGZsb2F0OjUxMjYsZmxvYXQzMjo1MTI2fSxLPXtkeW5hbWljOjM1MDQ4LHN0cmVhbTozNTA0MCxzdGF0aWM6MzUwNDR9LFE9Wi5mbGF0dGVuLHR0PVouc2hhcGUsZXQ9W107ZXRbNTEyMF09MSxldFs1MTIyXT0yLGV0WzUxMjRdPTQsZXRbNTEyMV09MSxldFs1MTIzXT0yLGV0WzUxMjVdPTQsZXRbNTEyNl09NDt2YXIgcnQ9e3BvaW50czowLHBvaW50OjAsbGluZXM6MSxsaW5lOjEsdHJpYW5nbGVzOjQsdHJpYW5nbGU6NCxcImxpbmUgbG9vcFwiOjIsXCJsaW5lIHN0cmlwXCI6MyxcInRyaWFuZ2xlIHN0cmlwXCI6NSxcInRyaWFuZ2xlIGZhblwiOjZ9LG50PW5ldyBGbG9hdDMyQXJyYXkoMSksaXQ9bmV3IFVpbnQzMkFycmF5KG50LmJ1ZmZlciksYXQ9Wzk5ODQsOTk4Niw5OTg1LDk5ODddLG90PVswLDY0MDksNjQxMCw2NDA3LDY0MDhdLHN0PXt9O3N0WzY0MDldPXN0WzY0MDZdPXN0WzY0MDJdPTEsc3RbMzQwNDFdPXN0WzY0MTBdPTIsc3RbNjQwN109c3RbMzU5MDRdPTMsc3RbNjQwOF09c3RbMzU5MDZdPTQ7dmFyIGx0PW0oXCJIVE1MQ2FudmFzRWxlbWVudFwiKSxjdD1tKFwiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEXCIpLHV0PW0oXCJJbWFnZUJpdG1hcFwiKSxodD1tKFwiSFRNTEltYWdlRWxlbWVudFwiKSxmdD1tKFwiSFRNTFZpZGVvRWxlbWVudFwiKSxwdD1PYmplY3Qua2V5cygkKS5jb25jYXQoW2x0LGN0LHV0LGh0LGZ0XSksZHQ9W107ZHRbNTEyMV09MSxkdFs1MTI2XT00LGR0WzM2MTkzXT0yLGR0WzUxMjNdPTIsZHRbNTEyNV09NDt2YXIgZ3Q9W107Z3RbMzI4NTRdPTIsZ3RbMzI4NTVdPTIsZ3RbMzYxOTRdPTIsZ3RbMzQwNDFdPTQsZ3RbMzM3NzZdPS41LGd0WzMzNzc3XT0uNSxndFszMzc3OF09MSxndFszMzc3OV09MSxndFszNTk4Nl09LjUsZ3RbMzU5ODddPTEsZ3RbMzQ3OThdPTEsZ3RbMzU4NDBdPS41LGd0WzM1ODQxXT0uMjUsZ3RbMzU4NDJdPS41LGd0WzM1ODQzXT0uMjUsZ3RbMzYxOTZdPS41O3ZhciB2dD1bXTt2dFszMjg1NF09Mix2dFszMjg1NV09Mix2dFszNjE5NF09Mix2dFszMzE4OV09Mix2dFszNjE2OF09MSx2dFszNDA0MV09NCx2dFszNTkwN109NCx2dFszNDgzNl09MTYsdnRbMzQ4NDJdPTgsdnRbMzQ4NDNdPTY7dmFyIG10PWZ1bmN0aW9uKHQsZSxyLG4saSl7ZnVuY3Rpb24gYSh0KXt0aGlzLmlkPWMrKyx0aGlzLnJlZkNvdW50PTEsdGhpcy5yZW5kZXJidWZmZXI9dCx0aGlzLmZvcm1hdD0zMjg1NCx0aGlzLmhlaWdodD10aGlzLndpZHRoPTAsaS5wcm9maWxlJiYodGhpcy5zdGF0cz17c2l6ZTowfSl9ZnVuY3Rpb24gbyhlKXt2YXIgcj1lLnJlbmRlcmJ1ZmZlcjt0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsbnVsbCksdC5kZWxldGVSZW5kZXJidWZmZXIociksZS5yZW5kZXJidWZmZXI9bnVsbCxlLnJlZkNvdW50PTAsZGVsZXRlIHVbZS5pZF0sbi5yZW5kZXJidWZmZXJDb3VudC0tfXZhciBzPXtyZ2JhNDozMjg1NCxyZ2I1NjU6MzYxOTQsXCJyZ2I1IGExXCI6MzI4NTUsZGVwdGg6MzMxODksc3RlbmNpbDozNjE2OCxcImRlcHRoIHN0ZW5jaWxcIjozNDA0MX07ZS5leHRfc3JnYiYmKHMuc3JnYmE9MzU5MDcpLGUuZXh0X2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0JiYocy5yZ2JhMTZmPTM0ODQyLHMucmdiMTZmPTM0ODQzKSxlLndlYmdsX2NvbG9yX2J1ZmZlcl9mbG9hdCYmKHMucmdiYTMyZj0zNDgzNik7dmFyIGw9W107T2JqZWN0LmtleXMocykuZm9yRWFjaChmdW5jdGlvbih0KXtsW3NbdF1dPXR9KTt2YXIgYz0wLHU9e307cmV0dXJuIGEucHJvdG90eXBlLmRlY1JlZj1mdW5jdGlvbigpezA+PS0tdGhpcy5yZWZDb3VudCYmbyh0aGlzKX0saS5wcm9maWxlJiYobi5nZXRUb3RhbFJlbmRlcmJ1ZmZlclNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBPYmplY3Qua2V5cyh1KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QrPXVbZV0uc3RhdHMuc2l6ZX0pLHR9KSx7Y3JlYXRlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbyhlLHIpe3ZhciBuPTAsYT0wLHU9MzI4NTQ7aWYoXCJvYmplY3RcIj09dHlwZW9mIGUmJmU/KFwic2hhcGVcImluIGU/KG49MHwoYT1lLnNoYXBlKVswXSxhPTB8YVsxXSk6KFwicmFkaXVzXCJpbiBlJiYobj1hPTB8ZS5yYWRpdXMpLFwid2lkdGhcImluIGUmJihuPTB8ZS53aWR0aCksXCJoZWlnaHRcImluIGUmJihhPTB8ZS5oZWlnaHQpKSxcImZvcm1hdFwiaW4gZSYmKHU9c1tlLmZvcm1hdF0pKTpcIm51bWJlclwiPT10eXBlb2YgZT8obj0wfGUsYT1cIm51bWJlclwiPT10eXBlb2Ygcj8wfHI6bik6ZXx8KG49YT0xKSxuIT09Yy53aWR0aHx8YSE9PWMuaGVpZ2h0fHx1IT09Yy5mb3JtYXQpcmV0dXJuIG8ud2lkdGg9Yy53aWR0aD1uLG8uaGVpZ2h0PWMuaGVpZ2h0PWEsYy5mb3JtYXQ9dSx0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsYy5yZW5kZXJidWZmZXIpLHQucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSx1LG4sYSksaS5wcm9maWxlJiYoYy5zdGF0cy5zaXplPXZ0W2MuZm9ybWF0XSpjLndpZHRoKmMuaGVpZ2h0KSxvLmZvcm1hdD1sW2MuZm9ybWF0XSxvfXZhciBjPW5ldyBhKHQuY3JlYXRlUmVuZGVyYnVmZmVyKCkpO3JldHVybiB1W2MuaWRdPWMsbi5yZW5kZXJidWZmZXJDb3VudCsrLG8oZSxyKSxvLnJlc2l6ZT1mdW5jdGlvbihlLHIpe3ZhciBuPTB8ZSxhPTB8cnx8bjtyZXR1cm4gbj09PWMud2lkdGgmJmE9PT1jLmhlaWdodD9vOihvLndpZHRoPWMud2lkdGg9bixvLmhlaWdodD1jLmhlaWdodD1hLHQuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxjLnJlbmRlcmJ1ZmZlciksdC5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLGMuZm9ybWF0LG4sYSksaS5wcm9maWxlJiYoYy5zdGF0cy5zaXplPXZ0W2MuZm9ybWF0XSpjLndpZHRoKmMuaGVpZ2h0KSxvKX0sby5fcmVnbFR5cGU9XCJyZW5kZXJidWZmZXJcIixvLl9yZW5kZXJidWZmZXI9YyxpLnByb2ZpbGUmJihvLnN0YXRzPWMuc3RhdHMpLG8uZGVzdHJveT1mdW5jdGlvbigpe2MuZGVjUmVmKCl9LG99LGNsZWFyOmZ1bmN0aW9uKCl7WCh1KS5mb3JFYWNoKG8pfSxyZXN0b3JlOmZ1bmN0aW9uKCl7WCh1KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UucmVuZGVyYnVmZmVyPXQuY3JlYXRlUmVuZGVyYnVmZmVyKCksdC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLGUucmVuZGVyYnVmZmVyKSx0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsZS5mb3JtYXQsZS53aWR0aCxlLmhlaWdodCl9KSx0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsbnVsbCl9fX0seXQ9W107eXRbNjQwOF09NCx5dFs2NDA3XT0zO3ZhciB4dD1bXTt4dFs1MTIxXT0xLHh0WzUxMjZdPTQseHRbMzYxOTNdPTI7dmFyIGJ0PVtcInhcIixcInlcIixcInpcIixcIndcIl0sX3Q9XCJibGVuZC5mdW5jIGJsZW5kLmVxdWF0aW9uIHN0ZW5jaWwuZnVuYyBzdGVuY2lsLm9wRnJvbnQgc3RlbmNpbC5vcEJhY2sgc2FtcGxlLmNvdmVyYWdlIHZpZXdwb3J0IHNjaXNzb3IuYm94IHBvbHlnb25PZmZzZXQub2Zmc2V0XCIuc3BsaXQoXCIgXCIpLHd0PXswOjAsMToxLHplcm86MCxvbmU6MSxcInNyYyBjb2xvclwiOjc2OCxcIm9uZSBtaW51cyBzcmMgY29sb3JcIjo3NjksXCJzcmMgYWxwaGFcIjo3NzAsXCJvbmUgbWludXMgc3JjIGFscGhhXCI6NzcxLFwiZHN0IGNvbG9yXCI6Nzc0LFwib25lIG1pbnVzIGRzdCBjb2xvclwiOjc3NSxcImRzdCBhbHBoYVwiOjc3MixcIm9uZSBtaW51cyBkc3QgYWxwaGFcIjo3NzMsXCJjb25zdGFudCBjb2xvclwiOjMyNzY5LFwib25lIG1pbnVzIGNvbnN0YW50IGNvbG9yXCI6MzI3NzAsXCJjb25zdGFudCBhbHBoYVwiOjMyNzcxLFwib25lIG1pbnVzIGNvbnN0YW50IGFscGhhXCI6MzI3NzIsXCJzcmMgYWxwaGEgc2F0dXJhdGVcIjo3NzZ9LGt0PXtuZXZlcjo1MTIsbGVzczo1MTMsXCI8XCI6NTEzLGVxdWFsOjUxNCxcIj1cIjo1MTQsXCI9PVwiOjUxNCxcIj09PVwiOjUxNCxsZXF1YWw6NTE1LFwiPD1cIjo1MTUsZ3JlYXRlcjo1MTYsXCI+XCI6NTE2LG5vdGVxdWFsOjUxNyxcIiE9XCI6NTE3LFwiIT09XCI6NTE3LGdlcXVhbDo1MTgsXCI+PVwiOjUxOCxhbHdheXM6NTE5fSxBdD17MDowLHplcm86MCxrZWVwOjc2ODAscmVwbGFjZTo3NjgxLGluY3JlbWVudDo3NjgyLGRlY3JlbWVudDo3NjgzLFwiaW5jcmVtZW50IHdyYXBcIjozNDA1NSxcImRlY3JlbWVudCB3cmFwXCI6MzQwNTYsaW52ZXJ0OjUzODZ9LFR0PXtjdzoyMzA0LGNjdzoyMzA1fSxNdD1uZXcgRCghMSwhMSwhMSxmdW5jdGlvbigpe30pO3JldHVybiBmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7aWYoMD09PVoubGVuZ3RoKXcmJncudXBkYXRlKCksUT1udWxsO2Vsc2V7UT1xLm5leHQoZSksaCgpO2Zvcih2YXIgdD1aLmxlbmd0aC0xOzA8PXQ7LS10KXt2YXIgcj1aW3RdO3ImJnIoeixudWxsLDApfXYuZmx1c2goKSx3JiZ3LnVwZGF0ZSgpfX1mdW5jdGlvbiByKCl7IVEmJjA8Wi5sZW5ndGgmJihRPXEubmV4dChlKSl9ZnVuY3Rpb24gbigpe1EmJihxLmNhbmNlbChlKSxRPW51bGwpfWZ1bmN0aW9uIGEodCl7dC5wcmV2ZW50RGVmYXVsdCgpLG4oKSwkLmZvckVhY2goZnVuY3Rpb24odCl7dCgpfSl9ZnVuY3Rpb24gbyh0KXt2LmdldEVycm9yKCkseS5yZXN0b3JlKCksUC5yZXN0b3JlKCksSS5yZXN0b3JlKCksUi5yZXN0b3JlKCksRi5yZXN0b3JlKCksVi5yZXN0b3JlKCksdyYmdy5yZXN0b3JlKCksRy5wcm9jcy5yZWZyZXNoKCkscigpLEouZm9yRWFjaChmdW5jdGlvbih0KXt0KCl9KX1mdW5jdGlvbiBzKHQpe2Z1bmN0aW9uIGUodCl7dmFyIGU9e30scj17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT10W25dO1UuaXNEeW5hbWljKGkpP3Jbbl09VS51bmJveChpLG4pOmVbbl09aX0pLHtkeW5hbWljOnIsc3RhdGljOmV9fXZhciByPWUodC5jb250ZXh0fHx7fSksbj1lKHQudW5pZm9ybXN8fHt9KSxpPWUodC5hdHRyaWJ1dGVzfHx7fSksYT1lKGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7aWYodCBpbiByKXt2YXIgZT1yW3RdO2RlbGV0ZSByW3RdLE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24obil7clt0K1wiLlwiK25dPWVbbl19KX19dmFyIHI9aih7fSx0KTtyZXR1cm4gZGVsZXRlIHIudW5pZm9ybXMsZGVsZXRlIHIuYXR0cmlidXRlcyxkZWxldGUgci5jb250ZXh0LFwic3RlbmNpbFwiaW4gciYmci5zdGVuY2lsLm9wJiYoci5zdGVuY2lsLm9wQmFjaz1yLnN0ZW5jaWwub3BGcm9udD1yLnN0ZW5jaWwub3AsZGVsZXRlIHIuc3RlbmNpbC5vcCksZShcImJsZW5kXCIpLGUoXCJkZXB0aFwiKSxlKFwiY3VsbFwiKSxlKFwic3RlbmNpbFwiKSxlKFwicG9seWdvbk9mZnNldFwiKSxlKFwic2Npc3NvclwiKSxlKFwic2FtcGxlXCIpLHJ9KHQpKTt0PXtncHVUaW1lOjAsY3B1VGltZTowLGNvdW50OjB9O3ZhciBvPShyPUcuY29tcGlsZShhLGksbixyLHQpKS5kcmF3LHM9ci5iYXRjaCxsPXIuc2NvcGUsYz1bXTtyZXR1cm4gaihmdW5jdGlvbih0LGUpe3ZhciByO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpcmV0dXJuIGwuY2FsbCh0aGlzLG51bGwsdCwwKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlKWlmKFwibnVtYmVyXCI9PXR5cGVvZiB0KWZvcihyPTA7cjx0OysrcilsLmNhbGwodGhpcyxudWxsLGUscik7ZWxzZXtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gbC5jYWxsKHRoaXMsdCxlLDApO2ZvcihyPTA7cjx0Lmxlbmd0aDsrK3IpbC5jYWxsKHRoaXMsdFtyXSxlLHIpfWVsc2UgaWYoXCJudW1iZXJcIj09dHlwZW9mIHQpe2lmKDA8dClyZXR1cm4gcy5jYWxsKHRoaXMsZnVuY3Rpb24odCl7Zm9yKDtjLmxlbmd0aDx0OyljLnB1c2gobnVsbCk7cmV0dXJuIGN9KDB8dCksMHx0KX1lbHNle2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiBvLmNhbGwodGhpcyx0KTtpZih0Lmxlbmd0aClyZXR1cm4gcy5jYWxsKHRoaXMsdCx0Lmxlbmd0aCl9fSx7c3RhdHM6dH0pfWZ1bmN0aW9uIGwodCxlKXt2YXIgcj0wO0cucHJvY3MucG9sbCgpO3ZhciBuPWUuY29sb3I7biYmKHYuY2xlYXJDb2xvcigrblswXXx8MCwrblsxXXx8MCwrblsyXXx8MCwrblszXXx8MCkscnw9MTYzODQpLFwiZGVwdGhcImluIGUmJih2LmNsZWFyRGVwdGgoK2UuZGVwdGgpLHJ8PTI1NiksXCJzdGVuY2lsXCJpbiBlJiYodi5jbGVhclN0ZW5jaWwoMHxlLnN0ZW5jaWwpLHJ8PTEwMjQpLHYuY2xlYXIocil9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gWi5wdXNoKHQpLHIoKSx7Y2FuY2VsOmZ1bmN0aW9uKCl7dmFyIGU9TihaLHQpO1pbZV09ZnVuY3Rpb24gdCgpe3ZhciBlPU4oWix0KTtaW2VdPVpbWi5sZW5ndGgtMV0sLS1aLmxlbmd0aCwwPj1aLmxlbmd0aCYmbigpfX19fWZ1bmN0aW9uIHUoKXt2YXIgdD1XLnZpZXdwb3J0LGU9Vy5zY2lzc29yX2JveDt0WzBdPXRbMV09ZVswXT1lWzFdPTAsei52aWV3cG9ydFdpZHRoPXouZnJhbWVidWZmZXJXaWR0aD16LmRyYXdpbmdCdWZmZXJXaWR0aD10WzJdPWVbMl09di5kcmF3aW5nQnVmZmVyV2lkdGgsei52aWV3cG9ydEhlaWdodD16LmZyYW1lYnVmZmVySGVpZ2h0PXouZHJhd2luZ0J1ZmZlckhlaWdodD10WzNdPWVbM109di5kcmF3aW5nQnVmZmVySGVpZ2h0fWZ1bmN0aW9uIGgoKXt6LnRpY2srPTEsei50aW1lPWcoKSx1KCksRy5wcm9jcy5wb2xsKCl9ZnVuY3Rpb24gZigpe3UoKSxHLnByb2NzLnJlZnJlc2goKSx3JiZ3LnVwZGF0ZSgpfWZ1bmN0aW9uIGcoKXtyZXR1cm4oSCgpLWspLzFlM31pZighKHQ9aSh0KSkpcmV0dXJuIG51bGw7dmFyIHY9dC5nbCxtPXYuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTt2LmlzQ29udGV4dExvc3QoKTt2YXIgeT1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoZSl7dmFyIHI7ZT1lLnRvTG93ZXJDYXNlKCk7dHJ5e3I9bltlXT10LmdldEV4dGVuc2lvbihlKX1jYXRjaCh0KXt9cmV0dXJuISFyfWZvcih2YXIgbj17fSxpPTA7aTxlLmV4dGVuc2lvbnMubGVuZ3RoOysraSl7dmFyIGE9ZS5leHRlbnNpb25zW2ldO2lmKCFyKGEpKXJldHVybiBlLm9uRGVzdHJveSgpLGUub25Eb25lKCdcIicrYSsnXCIgZXh0ZW5zaW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgV2ViR0wgY29udGV4dCwgdHJ5IHVwZ3JhZGluZyB5b3VyIHN5c3RlbSBvciBhIGRpZmZlcmVudCBicm93c2VyJyksbnVsbH1yZXR1cm4gZS5vcHRpb25hbEV4dGVuc2lvbnMuZm9yRWFjaChyKSx7ZXh0ZW5zaW9uczpuLHJlc3RvcmU6ZnVuY3Rpb24oKXtPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKG5bdF0mJiFyKHQpKXRocm93IEVycm9yKFwiKHJlZ2wpOiBlcnJvciByZXN0b3JpbmcgZXh0ZW5zaW9uIFwiK3QpfSl9fX0odix0KTtpZigheSlyZXR1cm4gbnVsbDt2YXIgeD1mdW5jdGlvbigpe3ZhciB0PXtcIlwiOjB9LGU9W1wiXCJdO3JldHVybntpZDpmdW5jdGlvbihyKXt2YXIgbj10W3JdO3JldHVybiBufHwobj10W3JdPWUubGVuZ3RoLGUucHVzaChyKSxuKX0sc3RyOmZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfX19KCksYj17YnVmZmVyQ291bnQ6MCxlbGVtZW50c0NvdW50OjAsZnJhbWVidWZmZXJDb3VudDowLHNoYWRlckNvdW50OjAsdGV4dHVyZUNvdW50OjAsY3ViZUNvdW50OjAscmVuZGVyYnVmZmVyQ291bnQ6MCxtYXhUZXh0dXJlVW5pdHM6MH0sXz15LmV4dGVuc2lvbnMsdz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoKXt0aGlzLmVuZFF1ZXJ5SW5kZXg9dGhpcy5zdGFydFF1ZXJ5SW5kZXg9LTEsdGhpcy5zdW09MCx0aGlzLnN0YXRzPW51bGx9ZnVuY3Rpb24gbih0LGUsbil7dmFyIGk9by5wb3AoKXx8bmV3IHI7aS5zdGFydFF1ZXJ5SW5kZXg9dCxpLmVuZFF1ZXJ5SW5kZXg9ZSxpLnN1bT0wLGkuc3RhdHM9bixzLnB1c2goaSl9aWYoIWUuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5KXJldHVybiBudWxsO3ZhciBpPVtdLGE9W10sbz1bXSxzPVtdLGw9W10sYz1bXTtyZXR1cm57YmVnaW5RdWVyeTpmdW5jdGlvbih0KXt2YXIgcj1pLnBvcCgpfHxlLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5jcmVhdGVRdWVyeUVYVCgpO2UuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmJlZ2luUXVlcnlFWFQoMzUwMDcsciksYS5wdXNoKHIpLG4oYS5sZW5ndGgtMSxhLmxlbmd0aCx0KX0sZW5kUXVlcnk6ZnVuY3Rpb24oKXtlLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5lbmRRdWVyeUVYVCgzNTAwNyl9LHB1c2hTY29wZVN0YXRzOm4sdXBkYXRlOmZ1bmN0aW9uKCl7dmFyIHQscjtpZigwIT09KHQ9YS5sZW5ndGgpKXtjLmxlbmd0aD1NYXRoLm1heChjLmxlbmd0aCx0KzEpLGwubGVuZ3RoPU1hdGgubWF4KGwubGVuZ3RoLHQrMSksbFswXT0wO3ZhciBuPWNbMF09MDtmb3Iocj10PTA7cjxhLmxlbmd0aDsrK3Ipe3ZhciB1PWFbcl07ZS5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuZ2V0UXVlcnlPYmplY3RFWFQodSwzNDkxOSk/KG4rPWUuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmdldFF1ZXJ5T2JqZWN0RVhUKHUsMzQ5MTgpLGkucHVzaCh1KSk6YVt0KytdPXUsbFtyKzFdPW4sY1tyKzFdPXR9Zm9yKGEubGVuZ3RoPXQscj10PTA7cjxzLmxlbmd0aDsrK3Ipe3ZhciBoPShuPXNbcl0pLnN0YXJ0UXVlcnlJbmRleDt1PW4uZW5kUXVlcnlJbmRleCxuLnN1bSs9bFt1XS1sW2hdLGg9Y1toXSwodT1jW3VdKT09PWg/KG4uc3RhdHMuZ3B1VGltZSs9bi5zdW0vMWU2LG8ucHVzaChuKSk6KG4uc3RhcnRRdWVyeUluZGV4PWgsbi5lbmRRdWVyeUluZGV4PXUsc1t0KytdPW4pfXMubGVuZ3RoPXR9fSxnZXROdW1QZW5kaW5nUXVlcmllczpmdW5jdGlvbigpe3JldHVybiBhLmxlbmd0aH0sY2xlYXI6ZnVuY3Rpb24oKXtpLnB1c2guYXBwbHkoaSxhKTtmb3IodmFyIHQ9MDt0PGkubGVuZ3RoO3QrKyllLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5kZWxldGVRdWVyeUVYVChpW3RdKTthLmxlbmd0aD0wLGkubGVuZ3RoPTB9LHJlc3RvcmU6ZnVuY3Rpb24oKXthLmxlbmd0aD0wLGkubGVuZ3RoPTB9fX0oMCxfKSxrPUgoKSxDPXYuZHJhd2luZ0J1ZmZlcldpZHRoLEw9di5kcmF3aW5nQnVmZmVySGVpZ2h0LHo9e3RpY2s6MCx0aW1lOjAsdmlld3BvcnRXaWR0aDpDLHZpZXdwb3J0SGVpZ2h0OkwsZnJhbWVidWZmZXJXaWR0aDpDLGZyYW1lYnVmZmVySGVpZ2h0OkwsZHJhd2luZ0J1ZmZlcldpZHRoOkMsZHJhd2luZ0J1ZmZlckhlaWdodDpMLHBpeGVsUmF0aW86dC5waXhlbFJhdGlvfSxPPVkodixfKSxJPShDPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih0PXIubWF4QXR0cmlidXRlcyxlPUFycmF5KHQpLHI9MDtyPHQ7KytyKWVbcl09bmV3IE07cmV0dXJue1JlY29yZDpNLHNjb3BlOnt9LHN0YXRlOmV9fSh2LF8sTykscCh2LGIsdCxDKSksRD1kKHYsXyxJLGIpLFA9Uyh2LHgsYix0KSxSPUEodixfLE8sZnVuY3Rpb24oKXtHLnByb2NzLnBvbGwoKX0seixiLHQpLEY9bXQodixfLDAsYix0KSxWPVQodixfLE8sUixGLGIpLEc9Qih2LHgsXyxPLEksRCwwLFYse30sQyxQLHtlbGVtZW50czpudWxsLHByaW1pdGl2ZTo0LGNvdW50Oi0xLG9mZnNldDowLGluc3RhbmNlczotMX0seix3LHQpLFc9KHg9RSh2LFYsRy5wcm9jcy5wb2xsLHopLEcubmV4dCksWD12LmNhbnZhcyxaPVtdLCQ9W10sSj1bXSxLPVt0Lm9uRGVzdHJveV0sUT1udWxsO1gmJihYLmFkZEV2ZW50TGlzdGVuZXIoXCJ3ZWJnbGNvbnRleHRsb3N0XCIsYSwhMSksWC5hZGRFdmVudExpc3RlbmVyKFwid2ViZ2xjb250ZXh0cmVzdG9yZWRcIixvLCExKSk7dmFyIHR0PVYuc2V0RkJPPXMoe2ZyYW1lYnVmZmVyOlUuZGVmaW5lLmNhbGwobnVsbCwxLFwiZnJhbWVidWZmZXJcIil9KTtyZXR1cm4gZigpLG09aihzLHtjbGVhcjpmdW5jdGlvbih0KXtpZihcImZyYW1lYnVmZmVyXCJpbiB0KWlmKHQuZnJhbWVidWZmZXImJlwiZnJhbWVidWZmZXJDdWJlXCI9PT10LmZyYW1lYnVmZmVyX3JlZ2xUeXBlKWZvcih2YXIgZT0wOzY+ZTsrK2UpdHQoaih7ZnJhbWVidWZmZXI6dC5mcmFtZWJ1ZmZlci5mYWNlc1tlXX0sdCksbCk7ZWxzZSB0dCh0LGwpO2Vsc2UgbCgwLHQpfSxwcm9wOlUuZGVmaW5lLmJpbmQobnVsbCwxKSxjb250ZXh0OlUuZGVmaW5lLmJpbmQobnVsbCwyKSx0aGlzOlUuZGVmaW5lLmJpbmQobnVsbCwzKSxkcmF3OnMoe30pLGJ1ZmZlcjpmdW5jdGlvbih0KXtyZXR1cm4gSS5jcmVhdGUodCwzNDk2MiwhMSwhMSl9LGVsZW1lbnRzOmZ1bmN0aW9uKHQpe3JldHVybiBELmNyZWF0ZSh0LCExKX0sdGV4dHVyZTpSLmNyZWF0ZTJELGN1YmU6Ui5jcmVhdGVDdWJlLHJlbmRlcmJ1ZmZlcjpGLmNyZWF0ZSxmcmFtZWJ1ZmZlcjpWLmNyZWF0ZSxmcmFtZWJ1ZmZlckN1YmU6Vi5jcmVhdGVDdWJlLGF0dHJpYnV0ZXM6bSxmcmFtZTpjLG9uOmZ1bmN0aW9uKHQsZSl7dmFyIHI7c3dpdGNoKHQpe2Nhc2VcImZyYW1lXCI6cmV0dXJuIGMoZSk7Y2FzZVwibG9zdFwiOnI9JDticmVhaztjYXNlXCJyZXN0b3JlXCI6cj1KO2JyZWFrO2Nhc2VcImRlc3Ryb3lcIjpyPUt9cmV0dXJuIHIucHVzaChlKSx7Y2FuY2VsOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxyLmxlbmd0aDsrK3QpaWYoclt0XT09PWUpe3JbdF09cltyLmxlbmd0aC0xXSxyLnBvcCgpO2JyZWFrfX19fSxsaW1pdHM6TyxoYXNFeHRlbnNpb246ZnVuY3Rpb24odCl7cmV0dXJuIDA8PU8uZXh0ZW5zaW9ucy5pbmRleE9mKHQudG9Mb3dlckNhc2UoKSl9LHJlYWQ6eCxkZXN0cm95OmZ1bmN0aW9uKCl7Wi5sZW5ndGg9MCxuKCksWCYmKFgucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndlYmdsY29udGV4dGxvc3RcIixhKSxYLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ3ZWJnbGNvbnRleHRyZXN0b3JlZFwiLG8pKSxQLmNsZWFyKCksVi5jbGVhcigpLEYuY2xlYXIoKSxSLmNsZWFyKCksRC5jbGVhcigpLEkuY2xlYXIoKSx3JiZ3LmNsZWFyKCksSy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QoKX0pfSxfZ2w6dixfcmVmcmVzaDpmLHBvbGw6ZnVuY3Rpb24oKXtoKCksdyYmdy51cGRhdGUoKX0sbm93Omcsc3RhdHM6Yn0pLHQub25Eb25lKG51bGwsbSksbX19LFwib2JqZWN0XCI9PXR5cGVvZiByJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZT9lLmV4cG9ydHM9aSgpOm4uY3JlYXRlUkVHTD1pKCl9LHt9XSw0ODg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbixpPVwiXCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcImV4cGVjdGVkIGEgc3RyaW5nXCIpO2lmKDE9PT1lKXJldHVybiB0O2lmKDI9PT1lKXJldHVybiB0K3Q7dmFyIHI9dC5sZW5ndGgqZTtpZihuIT09dHx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIG4pbj10LGk9XCJcIjtlbHNlIGlmKGkubGVuZ3RoPj1yKXJldHVybiBpLnN1YnN0cigwLHIpO2Zvcig7cj5pLmxlbmd0aCYmZT4xOykxJmUmJihpKz10KSxlPj49MSx0Kz10O3JldHVybiBpPShpKz10KS5zdWJzdHIoMCxyKX19LHt9XSw0ODk6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZS5leHBvcnRzPXQucGVyZm9ybWFuY2UmJnQucGVyZm9ybWFuY2Uubm93P2Z1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTpEYXRlLm5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9fSkuY2FsbCh0aGlzLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7fV0sNDkwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPXRbdC5sZW5ndGgtMV0sbj1lLGk9ZS0yO2k+PTA7LS1pKXt2YXIgYT1yLG89dFtpXSxzPShyPWErbyktYSxsPW8tcztsJiYodFstLW5dPXIscj1sKX1mb3IodmFyIGM9MCxpPW47aTxlOysraSl7dmFyIGE9dFtpXSxvPXIscz0ocj1hK28pLWEsbD1vLXM7bCYmKHRbYysrXT1sKX1yZXR1cm4gdFtjKytdPXIsdC5sZW5ndGg9Yyx0fX0se31dLDQ5MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJ0d28tcHJvZHVjdFwiKSxpPXQoXCJyb2J1c3Qtc3VtXCIpLGE9dChcInJvYnVzdC1zY2FsZVwiKSxvPXQoXCJyb2J1c3QtY29tcHJlc3NcIikscz02O2Z1bmN0aW9uIGwodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoLTEpLG49MTtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9cltuLTFdPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxhPTAsbz0wO2E8dC5sZW5ndGg7KythKWEhPT1lJiYoaVtvKytdPXRbbl1bYV0pO3JldHVybiByfWZ1bmN0aW9uIGModCl7aWYoMj09PXQubGVuZ3RoKXJldHVybltcInN1bShwcm9kKFwiLHRbMF1bMF0sXCIsXCIsdFsxXVsxXSxcIikscHJvZCgtXCIsdFswXVsxXSxcIixcIix0WzFdWzBdLFwiKSlcIl0uam9pbihcIlwiKTtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaChbXCJzY2FsZShcIixjKGwodCxyKSksXCIsXCIsKG49ciwxJm4/XCItXCI6XCJcIiksdFswXVtyXSxcIilcIl0uam9pbihcIlwiKSk7cmV0dXJuIGZ1bmN0aW9uIHQoZSl7aWYoMT09PWUubGVuZ3RoKXJldHVybiBlWzBdO2lmKDI9PT1lLmxlbmd0aClyZXR1cm5bXCJzdW0oXCIsZVswXSxcIixcIixlWzFdLFwiKVwiXS5qb2luKFwiXCIpO3ZhciByPWUubGVuZ3RoPj4xO3JldHVybltcInN1bShcIix0KGUuc2xpY2UoMCxyKSksXCIsXCIsdChlLnNsaWNlKHIpKSxcIilcIl0uam9pbihcIlwiKX0oZSk7dmFyIG59ZnVuY3Rpb24gdSh0KXtyZXR1cm4gbmV3IEZ1bmN0aW9uKFwic3VtXCIsXCJzY2FsZVwiLFwicHJvZFwiLFwiY29tcHJlc3NcIixbXCJmdW5jdGlvbiByb2J1c3REZXRlcm1pbmFudFwiLHQsXCIobSl7cmV0dXJuIGNvbXByZXNzKFwiLGMoZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0Oysrcil7ZVtyXT1uZXcgQXJyYXkodCk7Zm9yKHZhciBuPTA7bjx0OysrbillW3JdW25dPVtcIm1bXCIscixcIl1bXCIsbixcIl1cIl0uam9pbihcIlwiKX1yZXR1cm4gZX0odCkpLFwiKX07cmV0dXJuIHJvYnVzdERldGVybWluYW50XCIsdF0uam9pbihcIlwiKSkoaSxhLG4sbyl9dmFyIGg9W2Z1bmN0aW9uKCl7cmV0dXJuWzBdfSxmdW5jdGlvbih0KXtyZXR1cm5bdFswXVswXV19XTshZnVuY3Rpb24oKXtmb3IoO2gubGVuZ3RoPHM7KWgucHVzaCh1KGgubGVuZ3RoKSk7Zm9yKHZhciB0PVtdLHI9W1wiZnVuY3Rpb24gcm9idXN0RGV0ZXJtaW5hbnQobSl7c3dpdGNoKG0ubGVuZ3RoKXtcIl0sbj0wO248czsrK24pdC5wdXNoKFwiZGV0XCIrbiksci5wdXNoKFwiY2FzZSBcIixuLFwiOnJldHVybiBkZXRcIixuLFwiKG0pO1wiKTtyLnB1c2goXCJ9dmFyIGRldD1DQUNIRVttLmxlbmd0aF07aWYoIWRldClkZXQ9Q0FDSEVbbS5sZW5ndGhdPWdlbihtLmxlbmd0aCk7cmV0dXJuIGRldChtKTt9cmV0dXJuIHJvYnVzdERldGVybWluYW50XCIpLHQucHVzaChcIkNBQ0hFXCIsXCJnZW5cIixyLmpvaW4oXCJcIikpO3ZhciBpPUZ1bmN0aW9uLmFwcGx5KHZvaWQgMCx0KTtmb3IoZS5leHBvcnRzPWkuYXBwbHkodm9pZCAwLGguY29uY2F0KFtoLHVdKSksbj0wO248aC5sZW5ndGg7KytuKWUuZXhwb3J0c1tuXT1oW25dfSgpfSx7XCJyb2J1c3QtY29tcHJlc3NcIjo0OTAsXCJyb2J1c3Qtc2NhbGVcIjo0OTcsXCJyb2J1c3Qtc3VtXCI6NTAwLFwidHdvLXByb2R1Y3RcIjo1Mjh9XSw0OTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwidHdvLXByb2R1Y3RcIiksaT10KFwicm9idXN0LXN1bVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bih0WzBdLGVbMF0pLGE9MTthPHQubGVuZ3RoOysrYSlyPWkocixuKHRbYV0sZVthXSkpO3JldHVybiByfX0se1wicm9idXN0LXN1bVwiOjUwMCxcInR3by1wcm9kdWN0XCI6NTI4fV0sNDkzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInR3by1wcm9kdWN0XCIpLGk9dChcInJvYnVzdC1zdW1cIiksYT10KFwicm9idXN0LXN1YnRyYWN0XCIpLG89dChcInJvYnVzdC1zY2FsZVwiKSxzPTY7ZnVuY3Rpb24gbCh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodC5sZW5ndGgtMSksbj0xO248dC5sZW5ndGg7KytuKWZvcih2YXIgaT1yW24tMV09bmV3IEFycmF5KHQubGVuZ3RoLTEpLGE9MCxvPTA7YTx0Lmxlbmd0aDsrK2EpYSE9PWUmJihpW28rK109dFtuXVthXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gYyh0KXtpZigxPT09dC5sZW5ndGgpcmV0dXJuIHRbMF07aWYoMj09PXQubGVuZ3RoKXJldHVybltcInN1bShcIix0WzBdLFwiLFwiLHRbMV0sXCIpXCJdLmpvaW4oXCJcIik7dmFyIGU9dC5sZW5ndGg+PjE7cmV0dXJuW1wic3VtKFwiLGModC5zbGljZSgwLGUpKSxcIixcIixjKHQuc2xpY2UoZSkpLFwiKVwiXS5qb2luKFwiXCIpfWZ1bmN0aW9uIHUodCxlKXtpZihcIm1cIj09PXQuY2hhckF0KDApKXtpZihcIndcIj09PWUuY2hhckF0KDApKXt2YXIgcj10LnNwbGl0KFwiW1wiKTtyZXR1cm5bXCJ3XCIsZS5zdWJzdHIoMSksXCJtXCIsclswXS5zdWJzdHIoMSldLmpvaW4oXCJcIil9cmV0dXJuW1wicHJvZChcIix0LFwiLFwiLGUsXCIpXCJdLmpvaW4oXCJcIil9cmV0dXJuIHUoZSx0KX1mdW5jdGlvbiBoKHQpe2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bW1wiZGlmZihcIix1KHRbMF1bMF0sdFsxXVsxXSksXCIsXCIsdSh0WzFdWzBdLHRbMF1bMV0pLFwiKVwiXS5qb2luKFwiXCIpXTtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaChbXCJzY2FsZShcIixjKGgobCh0LHIpKSksXCIsXCIsKG49ciwhMCZuP1wiLVwiOlwiXCIpLHRbMF1bcl0sXCIpXCJdLmpvaW4oXCJcIikpO3JldHVybiBlO3ZhciBufWZ1bmN0aW9uIGYodCxlKXtmb3IodmFyIHI9W10sbj0wO248ZS0yOysrbilyLnB1c2goW1wicHJvZChtXCIsdCxcIltcIixuLFwiXSxtXCIsdCxcIltcIixuLFwiXSlcIl0uam9pbihcIlwiKSk7cmV0dXJuIGMocil9ZnVuY3Rpb24gcCh0KXtmb3IodmFyIGU9W10scj1bXSxzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3Ipe2Vbcl09bmV3IEFycmF5KHQpO2Zvcih2YXIgbj0wO248dDsrK24pZVtyXVtuXT1bXCJtXCIsbixcIltcIix0LXItMixcIl1cIl0uam9pbihcIlwiKX1yZXR1cm4gZX0odCksdT0wO3U8dDsrK3Upc1swXVt1XT1cIjFcIixzW3QtMV1bdV09XCJ3XCIrdTtmb3IodT0wO3U8dDsrK3UpMD09KDEmdSk/ZS5wdXNoLmFwcGx5KGUsaChsKHMsdSkpKTpyLnB1c2guYXBwbHkocixoKGwocyx1KSkpO3ZhciBwPWMoZSksZD1jKHIpLGc9XCJleGFjdEluU3BoZXJlXCIrdCx2PVtdO2Zvcih1PTA7dTx0OysrdSl2LnB1c2goXCJtXCIrdSk7dmFyIG09W1wiZnVuY3Rpb24gXCIsZyxcIihcIix2LmpvaW4oKSxcIil7XCJdO2Zvcih1PTA7dTx0OysrdSl7bS5wdXNoKFwidmFyIHdcIix1LFwiPVwiLGYodSx0KSxcIjtcIik7Zm9yKHZhciB5PTA7eTx0OysreSl5IT09dSYmbS5wdXNoKFwidmFyIHdcIix1LFwibVwiLHksXCI9c2NhbGUod1wiLHUsXCIsbVwiLHksXCJbMF0pO1wiKX1yZXR1cm4gbS5wdXNoKFwidmFyIHA9XCIscCxcIixuPVwiLGQsXCIsZD1kaWZmKHAsbik7cmV0dXJuIGRbZC5sZW5ndGgtMV07fXJldHVybiBcIixnKSxuZXcgRnVuY3Rpb24oXCJzdW1cIixcImRpZmZcIixcInByb2RcIixcInNjYWxlXCIsbS5qb2luKFwiXCIpKShpLGEsbixvKX12YXIgZD1bZnVuY3Rpb24oKXtyZXR1cm4gMH0sZnVuY3Rpb24oKXtyZXR1cm4gMH0sZnVuY3Rpb24oKXtyZXR1cm4gMH1dOyFmdW5jdGlvbigpe2Zvcig7ZC5sZW5ndGg8PXM7KWQucHVzaChwKGQubGVuZ3RoKSk7Zm9yKHZhciB0PVtdLHI9W1wic2xvd1wiXSxuPTA7bjw9czsrK24pdC5wdXNoKFwiYVwiK24pLHIucHVzaChcIm9cIituKTt2YXIgaT1bXCJmdW5jdGlvbiB0ZXN0SW5TcGhlcmUoXCIsdC5qb2luKCksXCIpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6Y2FzZSAxOnJldHVybiAwO1wiXTtmb3Iobj0yO248PXM7KytuKWkucHVzaChcImNhc2UgXCIsbixcIjpyZXR1cm4gb1wiLG4sXCIoXCIsdC5zbGljZSgwLG4pLmpvaW4oKSxcIik7XCIpO2kucHVzaChcIn12YXIgcz1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTxhcmd1bWVudHMubGVuZ3RoOysraSl7c1tpXT1hcmd1bWVudHNbaV19O3JldHVybiBzbG93KHMpO31yZXR1cm4gdGVzdEluU3BoZXJlXCIpLHIucHVzaChpLmpvaW4oXCJcIikpO3ZhciBhPUZ1bmN0aW9uLmFwcGx5KHZvaWQgMCxyKTtmb3IoZS5leHBvcnRzPWEuYXBwbHkodm9pZCAwLFtmdW5jdGlvbih0KXt2YXIgZT1kW3QubGVuZ3RoXTtyZXR1cm4gZXx8KGU9ZFt0Lmxlbmd0aF09cCh0Lmxlbmd0aCkpLGUuYXBwbHkodm9pZCAwLHQpfV0uY29uY2F0KGQpKSxuPTA7bjw9czsrK24pZS5leHBvcnRzW25dPWRbbl19KCl9LHtcInJvYnVzdC1zY2FsZVwiOjQ5NyxcInJvYnVzdC1zdWJ0cmFjdFwiOjQ5OSxcInJvYnVzdC1zdW1cIjo1MDAsXCJ0d28tcHJvZHVjdFwiOjUyOH1dLDQ5NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJyb2J1c3QtZGV0ZXJtaW5hbnRcIiksaT02O2Z1bmN0aW9uIGEodCl7Zm9yKHZhciBlPVwicm9idXN0TGluZWFyU29sdmVcIit0K1wiZFwiLHI9W1wiZnVuY3Rpb24gXCIsZSxcIihBLGIpe3JldHVybiBbXCJdLGk9MDtpPHQ7KytpKXtyLnB1c2goXCJkZXQoW1wiKTtmb3IodmFyIGE9MDthPHQ7KythKXthPjAmJnIucHVzaChcIixcIiksci5wdXNoKFwiW1wiKTtmb3IodmFyIG89MDtvPHQ7KytvKW8+MCYmci5wdXNoKFwiLFwiKSxvPT09aT9yLnB1c2goXCIrYltcIixhLFwiXVwiKTpyLnB1c2goXCIrQVtcIixhLFwiXVtcIixvLFwiXVwiKTtyLnB1c2goXCJdXCIpfXIucHVzaChcIl0pLFwiKX1yLnB1c2goXCJkZXQoQSldfXJldHVybiBcIixlKTt2YXIgcz1uZXcgRnVuY3Rpb24oXCJkZXRcIixyLmpvaW4oXCJcIikpO3JldHVybiBzKHQ8Nj9uW3RdOm4pfXZhciBvPVtmdW5jdGlvbigpe3JldHVyblswXX0sZnVuY3Rpb24odCxlKXtyZXR1cm5bW2VbMF1dLFt0WzBdWzBdXV19XTshZnVuY3Rpb24oKXtmb3IoO28ubGVuZ3RoPGk7KW8ucHVzaChhKG8ubGVuZ3RoKSk7Zm9yKHZhciB0PVtdLHI9W1wiZnVuY3Rpb24gZGlzcGF0Y2hMaW5lYXJTb2x2ZShBLGIpe3N3aXRjaChBLmxlbmd0aCl7XCJdLG49MDtuPGk7KytuKXQucHVzaChcInNcIituKSxyLnB1c2goXCJjYXNlIFwiLG4sXCI6cmV0dXJuIHNcIixuLFwiKEEsYik7XCIpO3IucHVzaChcIn12YXIgcz1DQUNIRVtBLmxlbmd0aF07aWYoIXMpcz1DQUNIRVtBLmxlbmd0aF09ZyhBLmxlbmd0aCk7cmV0dXJuIHMoQSxiKX1yZXR1cm4gZGlzcGF0Y2hMaW5lYXJTb2x2ZVwiKSx0LnB1c2goXCJDQUNIRVwiLFwiZ1wiLHIuam9pbihcIlwiKSk7dmFyIHM9RnVuY3Rpb24uYXBwbHkodm9pZCAwLHQpO2ZvcihlLmV4cG9ydHM9cy5hcHBseSh2b2lkIDAsby5jb25jYXQoW28sYV0pKSxuPTA7bjxpOysrbillLmV4cG9ydHNbbl09b1tuXX0oKX0se1wicm9idXN0LWRldGVybWluYW50XCI6NDkxfV0sNDk1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInR3by1wcm9kdWN0XCIpLGk9dChcInJvYnVzdC1zdW1cIiksYT10KFwicm9idXN0LXNjYWxlXCIpLG89dChcInJvYnVzdC1zdWJ0cmFjdFwiKSxzPTU7ZnVuY3Rpb24gbCh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodC5sZW5ndGgtMSksbj0xO248dC5sZW5ndGg7KytuKWZvcih2YXIgaT1yW24tMV09bmV3IEFycmF5KHQubGVuZ3RoLTEpLGE9MCxvPTA7YTx0Lmxlbmd0aDsrK2EpYSE9PWUmJihpW28rK109dFtuXVthXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gYyh0KXtpZigxPT09dC5sZW5ndGgpcmV0dXJuIHRbMF07aWYoMj09PXQubGVuZ3RoKXJldHVybltcInN1bShcIix0WzBdLFwiLFwiLHRbMV0sXCIpXCJdLmpvaW4oXCJcIik7dmFyIGU9dC5sZW5ndGg+PjE7cmV0dXJuW1wic3VtKFwiLGModC5zbGljZSgwLGUpKSxcIixcIixjKHQuc2xpY2UoZSkpLFwiKVwiXS5qb2luKFwiXCIpfWZ1bmN0aW9uIHUodCl7aWYoMj09PXQubGVuZ3RoKXJldHVybltbXCJzdW0ocHJvZChcIix0WzBdWzBdLFwiLFwiLHRbMV1bMV0sXCIpLHByb2QoLVwiLHRbMF1bMV0sXCIsXCIsdFsxXVswXSxcIikpXCJdLmpvaW4oXCJcIildO2Zvcih2YXIgZT1bXSxyPTA7cjx0Lmxlbmd0aDsrK3IpZS5wdXNoKFtcInNjYWxlKFwiLGModShsKHQscikpKSxcIixcIiwobj1yLDEmbj9cIi1cIjpcIlwiKSx0WzBdW3JdLFwiKVwiXS5qb2luKFwiXCIpKTtyZXR1cm4gZTt2YXIgbn1mdW5jdGlvbiBoKHQpe2Zvcih2YXIgZT1bXSxyPVtdLHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0Oysrcil7ZVtyXT1uZXcgQXJyYXkodCk7Zm9yKHZhciBuPTA7bjx0OysrbillW3JdW25dPVtcIm1cIixuLFwiW1wiLHQtci0xLFwiXVwiXS5qb2luKFwiXCIpfXJldHVybiBlfSh0KSxoPVtdLGY9MDtmPHQ7KytmKTA9PSgxJmYpP2UucHVzaC5hcHBseShlLHUobChzLGYpKSk6ci5wdXNoLmFwcGx5KHIsdShsKHMsZikpKSxoLnB1c2goXCJtXCIrZik7dmFyIHA9YyhlKSxkPWMociksZz1cIm9yaWVudGF0aW9uXCIrdCtcIkV4YWN0XCIsdj1bXCJmdW5jdGlvbiBcIixnLFwiKFwiLGguam9pbigpLFwiKXt2YXIgcD1cIixwLFwiLG49XCIsZCxcIixkPXN1YihwLG4pO3JldHVybiBkW2QubGVuZ3RoLTFdO307cmV0dXJuIFwiLGddLmpvaW4oXCJcIik7cmV0dXJuIG5ldyBGdW5jdGlvbihcInN1bVwiLFwicHJvZFwiLFwic2NhbGVcIixcInN1YlwiLHYpKGksbixhLG8pfXZhciBmPWgoMykscD1oKDQpLGQ9W2Z1bmN0aW9uKCl7cmV0dXJuIDB9LGZ1bmN0aW9uKCl7cmV0dXJuIDB9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0tdFswXX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9KHRbMV0tclsxXSkqKGVbMF0tclswXSksYT0odFswXS1yWzBdKSooZVsxXS1yWzFdKSxvPWktYTtpZihpPjApe2lmKGE8PTApcmV0dXJuIG87bj1pK2F9ZWxzZXtpZighKGk8MCkpcmV0dXJuIG87aWYoYT49MClyZXR1cm4gbztuPS0oaSthKX12YXIgcz0zLjMzMDY2OTA3Mzg3NTQ3MTZlLTE2Km47cmV0dXJuIG8+PXN8fG88PS1zP286Zih0LGUscil9LGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRbMF0tblswXSxhPWVbMF0tblswXSxvPXJbMF0tblswXSxzPXRbMV0tblsxXSxsPWVbMV0tblsxXSxjPXJbMV0tblsxXSx1PXRbMl0tblsyXSxoPWVbMl0tblsyXSxmPXJbMl0tblsyXSxkPWEqYyxnPW8qbCx2PW8qcyxtPWkqYyx5PWkqbCx4PWEqcyxiPXUqKGQtZykraCoodi1tKStmKih5LXgpLF89Ny43NzE1NjExNzIzNzYxMDNlLTE2KigoTWF0aC5hYnMoZCkrTWF0aC5hYnMoZykpKk1hdGguYWJzKHUpKyhNYXRoLmFicyh2KStNYXRoLmFicyhtKSkqTWF0aC5hYnMoaCkrKE1hdGguYWJzKHkpK01hdGguYWJzKHgpKSpNYXRoLmFicyhmKSk7cmV0dXJuIGI+X3x8LWI+Xz9iOnAodCxlLHIsbil9XTshZnVuY3Rpb24oKXtmb3IoO2QubGVuZ3RoPD1zOylkLnB1c2goaChkLmxlbmd0aCkpO2Zvcih2YXIgdD1bXSxyPVtcInNsb3dcIl0sbj0wO248PXM7KytuKXQucHVzaChcImFcIituKSxyLnB1c2goXCJvXCIrbik7dmFyIGk9W1wiZnVuY3Rpb24gZ2V0T3JpZW50YXRpb24oXCIsdC5qb2luKCksXCIpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6Y2FzZSAxOnJldHVybiAwO1wiXTtmb3Iobj0yO248PXM7KytuKWkucHVzaChcImNhc2UgXCIsbixcIjpyZXR1cm4gb1wiLG4sXCIoXCIsdC5zbGljZSgwLG4pLmpvaW4oKSxcIik7XCIpO2kucHVzaChcIn12YXIgcz1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTxhcmd1bWVudHMubGVuZ3RoOysraSl7c1tpXT1hcmd1bWVudHNbaV19O3JldHVybiBzbG93KHMpO31yZXR1cm4gZ2V0T3JpZW50YXRpb25cIiksci5wdXNoKGkuam9pbihcIlwiKSk7dmFyIGE9RnVuY3Rpb24uYXBwbHkodm9pZCAwLHIpO2ZvcihlLmV4cG9ydHM9YS5hcHBseSh2b2lkIDAsW2Z1bmN0aW9uKHQpe3ZhciBlPWRbdC5sZW5ndGhdO3JldHVybiBlfHwoZT1kW3QubGVuZ3RoXT1oKHQubGVuZ3RoKSksZS5hcHBseSh2b2lkIDAsdCl9XS5jb25jYXQoZCkpLG49MDtuPD1zOysrbillLmV4cG9ydHNbbl09ZFtuXX0oKX0se1wicm9idXN0LXNjYWxlXCI6NDk3LFwicm9idXN0LXN1YnRyYWN0XCI6NDk5LFwicm9idXN0LXN1bVwiOjUwMCxcInR3by1wcm9kdWN0XCI6NTI4fV0sNDk2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInJvYnVzdC1zdW1cIiksaT10KFwicm9idXN0LXNjYWxlXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm4gaShlLHRbMF0pO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gaSh0LGVbMF0pO2lmKDA9PT10Lmxlbmd0aHx8MD09PWUubGVuZ3RoKXJldHVyblswXTt2YXIgcj1bMF07aWYodC5sZW5ndGg8ZS5sZW5ndGgpZm9yKHZhciBhPTA7YTx0Lmxlbmd0aDsrK2Epcj1uKHIsaShlLHRbYV0pKTtlbHNlIGZvcih2YXIgYT0wO2E8ZS5sZW5ndGg7KythKXI9bihyLGkodCxlW2FdKSk7cmV0dXJuIHJ9fSx7XCJyb2J1c3Qtc2NhbGVcIjo0OTcsXCJyb2J1c3Qtc3VtXCI6NTAwfV0sNDk3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInR3by1wcm9kdWN0XCIpLGk9dChcInR3by1zdW1cIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoMT09PXIpe3ZhciBhPW4odFswXSxlKTtyZXR1cm4gYVswXT9hOlthWzFdXX12YXIgbz1uZXcgQXJyYXkoMipyKSxzPVsuMSwuMV0sbD1bLjEsLjFdLGM9MDtuKHRbMF0sZSxzKSxzWzBdJiYob1tjKytdPXNbMF0pO2Zvcih2YXIgdT0xO3U8cjsrK3Upe24odFt1XSxlLGwpO3ZhciBoPXNbMV07aShoLGxbMF0scyksc1swXSYmKG9bYysrXT1zWzBdKTt2YXIgZj1sWzFdLHA9c1sxXSxkPWYrcCxnPWQtZix2PXAtZztzWzFdPWQsdiYmKG9bYysrXT12KX1zWzFdJiYob1tjKytdPXNbMV0pOzA9PT1jJiYob1tjKytdPTApO3JldHVybiBvLmxlbmd0aD1jLG99fSx7XCJ0d28tcHJvZHVjdFwiOjUyOCxcInR3by1zdW1cIjo1Mjl9XSw0OTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9bih0LHIsaSksbz1uKGUscixpKTtpZihhPjAmJm8+MHx8YTwwJiZvPDApcmV0dXJuITE7dmFyIHM9bihyLHQsZSksbD1uKGksdCxlKTtpZihzPjAmJmw+MHx8czwwJiZsPDApcmV0dXJuITE7aWYoMD09PWEmJjA9PT1vJiYwPT09cyYmMD09PWwpcmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8MjsrK2kpe3ZhciBhPXRbaV0sbz1lW2ldLHM9TWF0aC5taW4oYSxvKSxsPU1hdGgubWF4KGEsbyksYz1yW2ldLHU9bltpXSxoPU1hdGgubWluKGMsdSksZj1NYXRoLm1heChjLHUpO2lmKGY8c3x8bDxoKXJldHVybiExfXJldHVybiEwfSh0LGUscixpKTtyZXR1cm4hMH07dmFyIG49dChcInJvYnVzdC1vcmllbnRhdGlvblwiKVszXX0se1wicm9idXN0LW9yaWVudGF0aW9uXCI6NDk1fV0sNDk5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MHx0Lmxlbmd0aCxuPTB8ZS5sZW5ndGg7aWYoMT09PXImJjE9PT1uKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPXQrZSxuPXItdCxpPXQtKHItbikrKGUtbik7aWYoaSlyZXR1cm5baSxyXTtyZXR1cm5bcl19KHRbMF0sLWVbMF0pO3ZhciBpLGEsbz1uZXcgQXJyYXkocituKSxzPTAsbD0wLGM9MCx1PU1hdGguYWJzLGg9dFtsXSxmPXUoaCkscD0tZVtjXSxkPXUocCk7ZjxkPyhhPWgsKGwrPTEpPHImJihoPXRbbF0sZj11KGgpKSk6KGE9cCwoYys9MSk8biYmKHA9LWVbY10sZD11KHApKSk7bDxyJiZmPGR8fGM+PW4/KGk9aCwobCs9MSk8ciYmKGg9dFtsXSxmPXUoaCkpKTooaT1wLChjKz0xKTxuJiYocD0tZVtjXSxkPXUocCkpKTt2YXIgZyx2LG09aSthLHk9bS1pLHg9YS15LGI9eCxfPW07Zm9yKDtsPHImJmM8bjspZjxkPyhpPWgsKGwrPTEpPHImJihoPXRbbF0sZj11KGgpKSk6KGk9cCwoYys9MSk8biYmKHA9LWVbY10sZD11KHApKSksKHg9KGE9YiktKHk9KG09aSthKS1pKSkmJihvW3MrK109eCksYj1fLSgoZz1fK20pLSh2PWctXykpKyhtLXYpLF89Zztmb3IoO2w8cjspKHg9KGE9YiktKHk9KG09KGk9aCkrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKGc9XyttKS0odj1nLV8pKSsobS12KSxfPWcsKGwrPTEpPHImJihoPXRbbF0pO2Zvcig7YzxuOykoeD0oYT1iKS0oeT0obT0oaT1wKSthKS1pKSkmJihvW3MrK109eCksYj1fLSgoZz1fK20pLSh2PWctXykpKyhtLXYpLF89ZywoYys9MSk8biYmKHA9LWVbY10pO2ImJihvW3MrK109Yik7XyYmKG9bcysrXT1fKTtzfHwob1tzKytdPTApO3JldHVybiBvLmxlbmd0aD1zLG99fSx7fV0sNTAwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MHx0Lmxlbmd0aCxuPTB8ZS5sZW5ndGg7aWYoMT09PXImJjE9PT1uKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPXQrZSxuPXItdCxpPXQtKHItbikrKGUtbik7aWYoaSlyZXR1cm5baSxyXTtyZXR1cm5bcl19KHRbMF0sZVswXSk7dmFyIGksYSxvPW5ldyBBcnJheShyK24pLHM9MCxsPTAsYz0wLHU9TWF0aC5hYnMsaD10W2xdLGY9dShoKSxwPWVbY10sZD11KHApO2Y8ZD8oYT1oLChsKz0xKTxyJiYoaD10W2xdLGY9dShoKSkpOihhPXAsKGMrPTEpPG4mJihwPWVbY10sZD11KHApKSk7bDxyJiZmPGR8fGM+PW4/KGk9aCwobCs9MSk8ciYmKGg9dFtsXSxmPXUoaCkpKTooaT1wLChjKz0xKTxuJiYocD1lW2NdLGQ9dShwKSkpO3ZhciBnLHYsbT1pK2EseT1tLWkseD1hLXksYj14LF89bTtmb3IoO2w8ciYmYzxuOylmPGQ/KGk9aCwobCs9MSk8ciYmKGg9dFtsXSxmPXUoaCkpKTooaT1wLChjKz0xKTxuJiYocD1lW2NdLGQ9dShwKSkpLCh4PShhPWIpLSh5PShtPWkrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKGc9XyttKS0odj1nLV8pKSsobS12KSxfPWc7Zm9yKDtsPHI7KSh4PShhPWIpLSh5PShtPShpPWgpK2EpLWkpKSYmKG9bcysrXT14KSxiPV8tKChnPV8rbSktKHY9Zy1fKSkrKG0tdiksXz1nLChsKz0xKTxyJiYoaD10W2xdKTtmb3IoO2M8bjspKHg9KGE9YiktKHk9KG09KGk9cCkrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKGc9XyttKS0odj1nLV8pKSsobS12KSxfPWcsKGMrPTEpPG4mJihwPWVbY10pO2ImJihvW3MrK109Yik7XyYmKG9bcysrXT1fKTtzfHwob1tzKytdPTApO3JldHVybiBvLmxlbmd0aD1zLG99fSx7fV0sNTAxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PDA/LTE6dD4wPzE6MH19LHt9XSw1MDI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkobih0KSl9O3ZhciBuPXQoXCJib3VuZGFyeS1jZWxsc1wiKSxpPXQoXCJyZWR1Y2Utc2ltcGxpY2lhbC1jb21wbGV4XCIpfSx7XCJib3VuZGFyeS1jZWxsc1wiOjg2LFwicmVkdWNlLXNpbXBsaWNpYWwtY29tcGxleFwiOjQ4Mn1dLDUwMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtyPXJ8fDAsXCJ1bmRlZmluZWRcIj09dHlwZW9mIHMmJihzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPTAsbj0wO248ZTsrK24pcj0wfE1hdGgubWF4KHIsdFtuXS5sZW5ndGgpO3JldHVybiByLTF9KHQpKTtpZigwPT09dC5sZW5ndGh8fHM8MSlyZXR1cm57Y2VsbHM6W10sdmVydGV4SWRzOltdLHZlcnRleFdlaWdodHM6W119O3ZhciBsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49aS5tYWxsb2NVaW50OChyKSxhPTA7YTxyOysrYSluW2FdPXRbYV08ZXwwO3JldHVybiBufShlLCtyKSxjPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG89ZSooZSsxKS8yKnJ8MCxzPWkubWFsbG9jVWludDMyKDIqbyksbD0wLGM9MDtjPHI7KytjKWZvcih2YXIgdT10W2NdLGU9dS5sZW5ndGgsaD0wO2g8ZTsrK2gpZm9yKHZhciBmPTA7ZjxoOysrZil7dmFyIHA9dVtmXSxkPXVbaF07c1tsKytdPTB8TWF0aC5taW4ocCxkKSxzW2wrK109MHxNYXRoLm1heChwLGQpfWEobihzLFtsLzJ8MCwyXSkpO2Zvcih2YXIgZz0yLGM9MjtjPGw7Yys9MilzW2MtMl09PT1zW2NdJiZzW2MtMV09PT1zW2MrMV18fChzW2crK109c1tjXSxzW2crK109c1tjKzFdKTtyZXR1cm4gbihzLFtnLzJ8MCwyXSl9KHQscyksdT1mdW5jdGlvbih0LGUscixhKXtmb3IodmFyIG89dC5kYXRhLHM9dC5zaGFwZVswXSxsPWkubWFsbG9jRG91YmxlKHMpLGM9MCx1PTA7dTxzOysrdSl7dmFyIGg9b1syKnVdLGY9b1syKnUrMV07aWYocltoXSE9PXJbZl0pe3ZhciBwPWVbaF0sZD1lW2ZdO29bMipjXT1oLG9bMipjKzFdPWYsbFtjKytdPShkLWEpLyhkLXApfX1yZXR1cm4gdC5zaGFwZVswXT1jLG4obCxbY10pfShjLGUsbCwrciksaD1mdW5jdGlvbih0LGUpe3ZhciByPWkubWFsbG9jSW50MzIoMiplKSxuPXQuc2hhcGVbMF0sYT10LmRhdGE7clswXT0wO2Zvcih2YXIgbz0wLHM9MDtzPG47KytzKXt2YXIgbD1hWzIqc107aWYobCE9PW8pe2ZvcihyWzIqbysxXT1zOysrbzxsOylyWzIqb109cyxyWzIqbysxXT1zO3JbMipvXT1zfX1yWzIqbysxXT1uO2Zvcig7KytvPGU7KXJbMipvXT1yWzIqbysxXT1uO3JldHVybiByfShjLDB8ZS5sZW5ndGgpLGY9byhzKSh0LGMuZGF0YSxoLGwpLHA9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTB8dC5zaGFwZVswXSxyPXQuZGF0YSxuPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSluW2ldPVtyWzIqaV0sclsyKmkrMV1dO3JldHVybiBufShjKSxkPVtdLnNsaWNlLmNhbGwodS5kYXRhLDAsdS5zaGFwZVswXSk7cmV0dXJuIGkuZnJlZShsKSxpLmZyZWUoYy5kYXRhKSxpLmZyZWUodS5kYXRhKSxpLmZyZWUoaCkse2NlbGxzOmYsdmVydGV4SWRzOnAsdmVydGV4V2VpZ2h0czpkfX07dmFyIG49dChcIm5kYXJyYXlcIiksaT10KFwidHlwZWRhcnJheS1wb29sXCIpLGE9dChcIm5kYXJyYXktc29ydFwiKSxvPXQoXCIuL2xpYi9jb2RlZ2VuXCIpfSx7XCIuL2xpYi9jb2RlZ2VuXCI6NTA0LG5kYXJyYXk6NDQzLFwibmRhcnJheS1zb3J0XCI6NDQxLFwidHlwZWRhcnJheS1wb29sXCI6NTMwfV0sNTA0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWFbdF07ZXx8KGU9YVt0XT1mdW5jdGlvbih0KXt2YXIgZT0wLHI9bmV3IEFycmF5KHQrMSk7clswXT1bW11dO2Zvcih2YXIgYT0xO2E8PXQ7KythKWZvcih2YXIgbz1yW2FdPWkoYSkscz0wO3M8by5sZW5ndGg7KytzKWU9TWF0aC5tYXgoZSxvW2FdLmxlbmd0aCk7dmFyIGw9W1wiZnVuY3Rpb24gQihDLEUsaSxqKXtcIixcInZhciBhPU1hdGgubWluKGksail8MCxiPU1hdGgubWF4KGksail8MCxsPUNbMiphXSxoPUNbMiphKzFdO1wiLFwid2hpbGUobDxoKXtcIixcInZhciBtPShsK2gpPj4xLHY9RVsyKm0rMV07XCIsXCJpZih2PT09Yil7cmV0dXJuIG19XCIsXCJpZihiPHYpe2g9bX1lbHNle2w9bSsxfVwiLFwifVwiLFwicmV0dXJuIGw7XCIsXCJ9O1wiLFwiZnVuY3Rpb24gZ2V0Q29udG91clwiLHQsXCJkKEYsRSxDLFMpe1wiLFwidmFyIG49Ri5sZW5ndGgsUj1bXTtcIixcImZvcih2YXIgaT0wO2k8bjsrK2kpe3ZhciBjPUZbaV0sbD1jLmxlbmd0aDtcIl07ZnVuY3Rpb24gYyh0KXtpZighKHQubGVuZ3RoPD0wKSl7bC5wdXNoKFwiUi5wdXNoKFwiKTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoOysrZSl7dmFyIHI9dFtlXTtlPjAmJmwucHVzaChcIixcIiksbC5wdXNoKFwiW1wiKTtmb3IodmFyIG49MDtuPHIubGVuZ3RoOysrbil7dmFyIGk9cltuXTtuPjAmJmwucHVzaChcIixcIiksbC5wdXNoKFwiQihDLEUsY1tcIixpWzBdLFwiXSxjW1wiLGlbMV0sXCJdKVwiKX1sLnB1c2goXCJdXCIpfWwucHVzaChcIik7XCIpfX1mb3IodmFyIGE9dCsxO2E+MTstLWEpe2E8dCsxJiZsLnB1c2goXCJlbHNlIFwiKSxsLnB1c2goXCJpZihsPT09XCIsYSxcIil7XCIpO2Zvcih2YXIgdT1bXSxzPTA7czxhOysrcyl1LnB1c2goXCIoU1tjW1wiK3MrXCJdXTw8XCIrcytcIilcIik7bC5wdXNoKFwidmFyIE09XCIsdS5qb2luKFwiK1wiKSxcIjtpZihNPT09MHx8TT09PVwiLCgxPDxhKS0xLFwiKXtjb250aW51ZX1zd2l0Y2goTSl7XCIpO2Zvcih2YXIgbz1yW2EtMV0scz0wO3M8by5sZW5ndGg7KytzKWwucHVzaChcImNhc2UgXCIscyxcIjpcIiksYyhvW3NdKSxsLnB1c2goXCJicmVhaztcIik7bC5wdXNoKFwifX1cIil9cmV0dXJuIGwucHVzaChcIn1yZXR1cm4gUjt9O3JldHVybiBnZXRDb250b3VyXCIsdCxcImRcIiksbmV3IEZ1bmN0aW9uKFwicG9vbFwiLGwuam9pbihcIlwiKSkobil9KHQpKTtyZXR1cm4gZX07dmFyIG49dChcInR5cGVkYXJyYXktcG9vbFwiKSxpPXQoXCJtYXJjaGluZy1zaW1wbGV4LXRhYmxlXCIpLGE9e319LHtcIm1hcmNoaW5nLXNpbXBsZXgtdGFibGVcIjo0MjAsXCJ0eXBlZGFycmF5LXBvb2xcIjo1MzB9XSw1MDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiYml0LXR3aWRkbGVcIiksaT10KFwidW5pb24tZmluZFwiKTtmdW5jdGlvbiBhKHQsZSl7dmFyIHI9dC5sZW5ndGgsbj10Lmxlbmd0aC1lLmxlbmd0aCxpPU1hdGgubWluO2lmKG4pcmV0dXJuIG47c3dpdGNoKHIpe2Nhc2UgMDpyZXR1cm4gMDtjYXNlIDE6cmV0dXJuIHRbMF0tZVswXTtjYXNlIDI6cmV0dXJuKHM9dFswXSt0WzFdLWVbMF0tZVsxXSl8fGkodFswXSx0WzFdKS1pKGVbMF0sZVsxXSk7Y2FzZSAzOnZhciBhPXRbMF0rdFsxXSxvPWVbMF0rZVsxXTtpZihzPWErdFsyXS0obytlWzJdKSlyZXR1cm4gczt2YXIgcyxsPWkodFswXSx0WzFdKSxjPWkoZVswXSxlWzFdKTtyZXR1cm4ocz1pKGwsdFsyXSktaShjLGVbMl0pKXx8aShsK3RbMl0sYSktaShjK2VbMl0sbyk7ZGVmYXVsdDp2YXIgdT10LnNsaWNlKDApO3Uuc29ydCgpO3ZhciBoPWUuc2xpY2UoMCk7aC5zb3J0KCk7Zm9yKHZhciBmPTA7ZjxyOysrZilpZihuPXVbZl0taFtmXSlyZXR1cm4gbjtyZXR1cm4gMH19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBhKHRbMF0sZVswXSl9ZnVuY3Rpb24gcyh0LGUpe2lmKGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSluW2ldPVt0W2ldLGVbaV1dO24uc29ydChvKTtmb3IoaT0wO2k8cjsrK2kpdFtpXT1uW2ldWzBdLGVbaV09bltpXVsxXTtyZXR1cm4gdH1yZXR1cm4gdC5zb3J0KGEpLHR9ZnVuY3Rpb24gbCh0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuW107Zm9yKHZhciBlPTEscj10Lmxlbmd0aCxuPTE7bjxyOysrbil7dmFyIGk9dFtuXTtpZihhKGksdFtuLTFdKSl7aWYobj09PWUpe2UrKztjb250aW51ZX10W2UrK109aX19cmV0dXJuIHQubGVuZ3RoPWUsdH1mdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aC0xLGk9LTE7cjw9bjspe3ZhciBvPXIrbj4+MSxzPWEodFtvXSxlKTtzPD0wPygwPT09cyYmKGk9bykscj1vKzEpOnM+MCYmKG49by0xKX1yZXR1cm4gaX1mdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aCksaT0wLG89ci5sZW5ndGg7aTxvOysraSlyW2ldPVtdO2Zvcih2YXIgcz1bXSxsPShpPTAsZS5sZW5ndGgpO2k8bDsrK2kpZm9yKHZhciB1PWVbaV0saD11Lmxlbmd0aCxmPTEscD0xPDxoO2Y8cDsrK2Ype3MubGVuZ3RoPW4ucG9wQ291bnQoZik7Zm9yKHZhciBkPTAsZz0wO2c8aDsrK2cpZiYxPDxnJiYoc1tkKytdPXVbZ10pO3ZhciB2PWModCxzKTtpZighKHY8MCkpZm9yKDtyW3YrK10ucHVzaChpKSwhKHY+PXQubGVuZ3RofHwwIT09YSh0W3ZdLHMpKTspO31yZXR1cm4gcn1mdW5jdGlvbiBoKHQsZSl7aWYoZTwwKXJldHVybltdO2Zvcih2YXIgcj1bXSxpPSgxPDxlKzEpLTEsYT0wO2E8dC5sZW5ndGg7KythKWZvcih2YXIgbz10W2FdLGw9aTtsPDE8PG8ubGVuZ3RoO2w9bi5uZXh0Q29tYmluYXRpb24obCkpe2Zvcih2YXIgYz1uZXcgQXJyYXkoZSsxKSx1PTAsaD0wO2g8by5sZW5ndGg7KytoKWwmMTw8aCYmKGNbdSsrXT1vW2hdKTtyLnB1c2goYyl9cmV0dXJuIHMocil9ci5kaW1lbnNpb249ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj1NYXRoLm1heCxuPTAsaT10Lmxlbmd0aDtuPGk7KytuKWU9cihlLHRbbl0ubGVuZ3RoKTtyZXR1cm4gZS0xfSxyLmNvdW50VmVydGljZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPS0xLHI9TWF0aC5tYXgsbj0wLGk9dC5sZW5ndGg7bjxpOysrbilmb3IodmFyIGE9dFtuXSxvPTAscz1hLmxlbmd0aDtvPHM7KytvKWU9cihlLGFbb10pO3JldHVybiBlKzF9LHIuY2xvbmVDZWxscz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWVbcl09dFtyXS5zbGljZSgwKTtyZXR1cm4gZX0sci5jb21wYXJlQ2VsbHM9YSxyLm5vcm1hbGl6ZT1zLHIudW5pcXVlPWwsci5maW5kQ2VsbD1jLHIuaW5jaWRlbmNlPXUsci5kdWFsPWZ1bmN0aW9uKHQsZSl7aWYoIWUpcmV0dXJuIHUobChoKHQsMCkpLHQpO2Zvcih2YXIgcj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT1bXTtuPTA7Zm9yKHZhciBpPXQubGVuZ3RoO248aTsrK24pZm9yKHZhciBhPXRbbl0sbz0wLHM9YS5sZW5ndGg7bzxzOysrbylyW2Fbb11dLnB1c2gobik7cmV0dXJuIHJ9LHIuZXhwbG9kZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxhPTB8aS5sZW5ndGgsbz0xLGw9MTw8YTtvPGw7KytvKXtmb3IodmFyIGM9W10sdT0wO3U8YTsrK3Upbz4+PnUmMSYmYy5wdXNoKGlbdV0pO2UucHVzaChjKX1yZXR1cm4gcyhlKX0sci5za2VsZXRvbj1oLHIuYm91bmRhcnk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sYT0wLG89aS5sZW5ndGg7YTxvOysrYSl7Zm9yKHZhciBsPW5ldyBBcnJheShpLmxlbmd0aC0xKSxjPTAsdT0wO2M8bzsrK2MpYyE9PWEmJihsW3UrK109aVtjXSk7ZS5wdXNoKGwpfXJldHVybiBzKGUpfSxyLmNvbm5lY3RlZENvbXBvbmVudHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgaShlKSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBhPXRbbl0sbz0wO288YS5sZW5ndGg7KytvKWZvcih2YXIgcz1vKzE7czxhLmxlbmd0aDsrK3Mpci5saW5rKGFbb10sYVtzXSk7dmFyIGw9W10sYz1yLnJhbmtzO2ZvcihuPTA7bjxjLmxlbmd0aDsrK24pY1tuXT0tMTtmb3Iobj0wO248dC5sZW5ndGg7KytuKXt2YXIgdT1yLmZpbmQodFtuXVswXSk7Y1t1XTwwPyhjW3VdPWwubGVuZ3RoLGwucHVzaChbdFtuXS5zbGljZSgwKV0pKTpsW2NbdV1dLnB1c2godFtuXS5zbGljZSgwKSl9cmV0dXJuIGx9KHQsZSk6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPWwocyhoKHQsMCkpKSxyPW5ldyBpKGUubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBhPXRbbl0sbz0wO288YS5sZW5ndGg7KytvKWZvcih2YXIgdT1jKGUsW2Fbb11dKSxmPW8rMTtmPGEubGVuZ3RoOysrZilyLmxpbmsodSxjKGUsW2FbZl1dKSk7dmFyIHA9W10sZD1yLnJhbmtzO2ZvcihuPTA7bjxkLmxlbmd0aDsrK24pZFtuXT0tMTtmb3Iobj0wO248dC5sZW5ndGg7KytuKXt2YXIgZz1yLmZpbmQoYyhlLFt0W25dWzBdXSkpO2RbZ108MD8oZFtnXT1wLmxlbmd0aCxwLnB1c2goW3Rbbl0uc2xpY2UoMCldKSk6cFtkW2ddXS5wdXNoKHRbbl0uc2xpY2UoMCkpfXJldHVybiBwfSh0KX19LHtcImJpdC10d2lkZGxlXCI6ODMsXCJ1bmlvbi1maW5kXCI6NTMxfV0sNTA2OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzgzXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6ODN9XSw1MDc6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bNTA1XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtcImJpdC10d2lkZGxlXCI6NTA2LGR1cDo1MDUsXCJ1bmlvbi1maW5kXCI6NTA4fV0sNTA4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXt0aGlzLnJvb3RzPW5ldyBBcnJheSh0KSx0aGlzLnJhbmtzPW5ldyBBcnJheSh0KTtmb3IodmFyIGU9MDtlPHQ7KytlKXRoaXMucm9vdHNbZV09ZSx0aGlzLnJhbmtzW2VdPTB9ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUubGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdHMubGVuZ3RofSxuLnByb3RvdHlwZS5tYWtlU2V0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yb290cy5sZW5ndGg7cmV0dXJuIHRoaXMucm9vdHMucHVzaCh0KSx0aGlzLnJhbmtzLnB1c2goMCksdH0sbi5wcm90b3R5cGUuZmluZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5yb290cztlW3RdIT09dDspe3ZhciByPWVbdF07ZVt0XT1lW3JdLHQ9cn1yZXR1cm4gdH0sbi5wcm90b3R5cGUubGluaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZmluZCh0KSxuPXRoaXMuZmluZChlKTtpZihyIT09bil7dmFyIGk9dGhpcy5yYW5rcyxhPXRoaXMucm9vdHMsbz1pW3JdLHM9aVtuXTtvPHM/YVtyXT1uOnM8bz9hW25dPXI6KGFbbl09ciwrK2lbcl0pfX19LHt9XSw1MDk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgYT1lLmxlbmd0aCxvPXQubGVuZ3RoLHM9bmV3IEFycmF5KGEpLGw9bmV3IEFycmF5KGEpLGM9bmV3IEFycmF5KGEpLHU9bmV3IEFycmF5KGEpLGg9MDtoPGE7KytoKXNbaF09bFtoXT0tMSxjW2hdPTEvMCx1W2hdPSExO2Zvcih2YXIgaD0wO2g8bzsrK2gpe3ZhciBmPXRbaF07aWYoMiE9PWYubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIklucHV0IG11c3QgYmUgYSBncmFwaFwiKTt2YXIgcD1mWzFdLGQ9ZlswXTstMSE9PWxbZF0/bFtkXT0tMjpsW2RdPXAsLTEhPT1zW3BdP3NbcF09LTI6c1twXT1kfWZ1bmN0aW9uIGcodCl7aWYodVt0XSlyZXR1cm4gMS8wO3ZhciByLGksYSxvLGMsaD1zW3RdLGY9bFt0XTtyZXR1cm4gaDwwfHxmPDA/MS8wOihyPWVbdF0saT1lW2hdLGE9ZVtmXSxvPU1hdGguYWJzKG4ocixpLGEpKSxjPU1hdGguc3FydChNYXRoLnBvdyhpWzBdLWFbMF0sMikrTWF0aC5wb3coaVsxXS1hWzFdLDIpKSxvL2MpfWZ1bmN0aW9uIHYodCxlKXt2YXIgcj1BW3RdLG49QVtlXTtBW3RdPW4sQVtlXT1yLFRbcl09ZSxUW25dPXR9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gY1tBW3RdXX1mdW5jdGlvbiB5KHQpe3JldHVybiAxJnQ/dC0xPj4xOih0Pj4xKS0xfWZ1bmN0aW9uIHgodCl7Zm9yKHZhciBlPW0odCk7Oyl7dmFyIHI9ZSxuPTIqdCsxLGk9MioodCsxKSxhPXQ7aWYobjxTKXt2YXIgbz1tKG4pO288ciYmKGE9bixyPW8pfWlmKGk8Uyl7dmFyIHM9bShpKTtzPHImJihhPWkpfWlmKGE9PT10KXJldHVybiB0O3YodCxhKSx0PWF9fWZ1bmN0aW9uIGIodCl7Zm9yKHZhciBlPW0odCk7dD4wOyl7dmFyIHI9eSh0KTtpZihyPj0wKXt2YXIgbj1tKHIpO2lmKGU8bil7dih0LHIpLHQ9cjtjb250aW51ZX19cmV0dXJuIHR9fWZ1bmN0aW9uIF8oKXtpZihTPjApe3ZhciB0PUFbMF07cmV0dXJuIHYoMCxTLTEpLFMtPTEseCgwKSx0fXJldHVybi0xfWZ1bmN0aW9uIHcodCxlKXt2YXIgcj1BW3RdO3JldHVybiBjW3JdPT09ZT90OihjW3JdPS0xLzAsYih0KSxfKCksY1tyXT1lLGIoKFMrPTEpLTEpKX1mdW5jdGlvbiBrKHQpe2lmKCF1W3RdKXt1W3RdPSEwO3ZhciBlPXNbdF0scj1sW3RdO3Nbcl0+PTAmJihzW3JdPWUpLGxbZV0+PTAmJihsW2VdPXIpLFRbZV0+PTAmJncoVFtlXSxnKGUpKSxUW3JdPj0wJiZ3KFRbcl0sZyhyKSl9fWZvcih2YXIgQT1bXSxUPW5ldyBBcnJheShhKSxoPTA7aDxhOysraCl7dmFyIE09Y1toXT1nKGgpO008MS8wPyhUW2hdPUEubGVuZ3RoLEEucHVzaChoKSk6VFtoXT0tMX1mb3IodmFyIFM9QS5sZW5ndGgsaD1TPj4xO2g+PTA7LS1oKXgoaCk7Zm9yKDs7KXt2YXIgRT1fKCk7aWYoRTwwfHxjW0VdPnIpYnJlYWs7ayhFKX1mb3IodmFyIEM9W10saD0wO2g8YTsrK2gpdVtoXXx8KFRbaF09Qy5sZW5ndGgsQy5wdXNoKGVbaF0uc2xpY2UoKSkpO0MubGVuZ3RoO2Z1bmN0aW9uIEwodCxlKXtpZih0W2VdPDApcmV0dXJuIGU7dmFyIHI9ZSxuPWU7ZG97dmFyIGk9dFtuXTtpZighdVtuXXx8aTwwfHxpPT09bilicmVhaztpZihpPXRbbj1pXSwhdVtuXXx8aTwwfHxpPT09bilicmVhaztuPWkscj10W3JdfXdoaWxlKHIhPT1uKTtmb3IodmFyIGE9ZTthIT09bjthPXRbYV0pdFthXT1uO3JldHVybiBufXZhciB6PVtdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9TChzLHRbMF0pLHI9TChsLHRbMV0pO2lmKGU+PTAmJnI+PTAmJmUhPT1yKXt2YXIgbj1UW2VdLGk9VFtyXTtuIT09aSYmei5wdXNoKFtuLGldKX19KSxpLnVuaXF1ZShpLm5vcm1hbGl6ZSh6KSkse3Bvc2l0aW9uczpDLGVkZ2VzOnp9fTt2YXIgbj10KFwicm9idXN0LW9yaWVudGF0aW9uXCIpLGk9dChcInNpbXBsaWNpYWwtY29tcGxleFwiKX0se1wicm9idXN0LW9yaWVudGF0aW9uXCI6NDk1LFwic2ltcGxpY2lhbC1jb21wbGV4XCI6NTA3fV0sNTEwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLHM7aWYoZVswXVswXTxlWzFdWzBdKXI9ZVswXSxhPWVbMV07ZWxzZXtpZighKGVbMF1bMF0+ZVsxXVswXSkpcmV0dXJuIGkoZSx0KTtyPWVbMV0sYT1lWzBdfWlmKHRbMF1bMF08dFsxXVswXSlvPXRbMF0scz10WzFdO2Vsc2V7aWYoISh0WzBdWzBdPnRbMV1bMF0pKXJldHVybi1pKHQsZSk7bz10WzFdLHM9dFswXX12YXIgbD1uKHIsYSxzKSxjPW4ocixhLG8pO2lmKGw8MCl7aWYoYzw9MClyZXR1cm4gbH1lbHNlIGlmKGw+MCl7aWYoYz49MClyZXR1cm4gbH1lbHNlIGlmKGMpcmV0dXJuIGM7aWYobD1uKHMsbyxhKSxjPW4ocyxvLHIpLGw8MCl7aWYoYzw9MClyZXR1cm4gbH1lbHNlIGlmKGw+MCl7aWYoYz49MClyZXR1cm4gbH1lbHNlIGlmKGMpcmV0dXJuIGM7cmV0dXJuIGFbMF0tc1swXX07dmFyIG49dChcInJvYnVzdC1vcmllbnRhdGlvblwiKTtmdW5jdGlvbiBpKHQsZSl7dmFyIHIsaSxhLG87aWYoZVswXVswXTxlWzFdWzBdKXI9ZVswXSxpPWVbMV07ZWxzZXtpZighKGVbMF1bMF0+ZVsxXVswXSkpe3ZhciBzPU1hdGgubWluKHRbMF1bMV0sdFsxXVsxXSksbD1NYXRoLm1heCh0WzBdWzFdLHRbMV1bMV0pLGM9TWF0aC5taW4oZVswXVsxXSxlWzFdWzFdKSx1PU1hdGgubWF4KGVbMF1bMV0sZVsxXVsxXSk7cmV0dXJuIGw8Yz9sLWM6cz51P3MtdTpsLXV9cj1lWzFdLGk9ZVswXX10WzBdWzFdPHRbMV1bMV0/KGE9dFswXSxvPXRbMV0pOihhPXRbMV0sbz10WzBdKTt2YXIgaD1uKGkscixhKTtyZXR1cm4gaHx8KChoPW4oaSxyLG8pKXx8by1pKX19LHtcInJvYnVzdC1vcmllbnRhdGlvblwiOjQ5NX1dLDUxMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj0yKmUsbj1uZXcgQXJyYXkociksYT0wO2E8ZTsrK2Epe3ZhciBsPXRbYV0sYz1sWzBdWzBdPGxbMV1bMF07blsyKmFdPW5ldyBoKGxbMF1bMF0sbCxjLGEpLG5bMiphKzFdPW5ldyBoKGxbMV1bMF0sbCwhYyxhKX1uLnNvcnQoZnVuY3Rpb24odCxlKXt2YXIgcj10LngtZS54O3JldHVybiByfHwoKHI9dC5jcmVhdGUtZS5jcmVhdGUpfHxNYXRoLm1pbih0LnNlZ21lbnRbMF1bMV0sdC5zZWdtZW50WzFdWzFdKS1NYXRoLm1pbihlLnNlZ21lbnRbMF1bMV0sZS5zZWdtZW50WzFdWzFdKSl9KTtmb3IodmFyIGY9aShvKSxwPVtdLGQ9W10sZz1bXSxhPTA7YTxyOyl7Zm9yKHZhciB2PW5bYV0ueCxtPVtdO2E8cjspe3ZhciB5PW5bYV07aWYoeS54IT09dilicmVhazthKz0xLHkuc2VnbWVudFswXVswXT09PXkueCYmeS5zZWdtZW50WzFdWzBdPT09eS54P3kuY3JlYXRlJiYoeS5zZWdtZW50WzBdWzFdPHkuc2VnbWVudFsxXVsxXT8obS5wdXNoKG5ldyB1KHkuc2VnbWVudFswXVsxXSx5LmluZGV4LCEwLCEwKSksbS5wdXNoKG5ldyB1KHkuc2VnbWVudFsxXVsxXSx5LmluZGV4LCExLCExKSkpOihtLnB1c2gobmV3IHUoeS5zZWdtZW50WzFdWzFdLHkuaW5kZXgsITAsITEpKSxtLnB1c2gobmV3IHUoeS5zZWdtZW50WzBdWzFdLHkuaW5kZXgsITEsITApKSkpOmY9eS5jcmVhdGU/Zi5pbnNlcnQoeS5zZWdtZW50LHkuaW5kZXgpOmYucmVtb3ZlKHkuc2VnbWVudCl9cC5wdXNoKGYucm9vdCksZC5wdXNoKHYpLGcucHVzaChtKX1yZXR1cm4gbmV3IHMocCxkLGcpfTt2YXIgbj10KFwiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIiksaT10KFwiZnVuY3Rpb25hbC1yZWQtYmxhY2stdHJlZVwiKSxhPXQoXCJyb2J1c3Qtb3JpZW50YXRpb25cIiksbz10KFwiLi9saWIvb3JkZXItc2VnbWVudHNcIik7ZnVuY3Rpb24gcyh0LGUscil7dGhpcy5zbGFicz10LHRoaXMuY29vcmRpbmF0ZXM9ZSx0aGlzLmhvcml6b250YWw9cn1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQueS1lfWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9bnVsbDt0Oyl7dmFyIG4saSxvPXQua2V5O29bMF1bMF08b1sxXVswXT8obj1vWzBdLGk9b1sxXSk6KG49b1sxXSxpPW9bMF0pO3ZhciBzPWEobixpLGUpO2lmKHM8MCl0PXQubGVmdDtlbHNlIGlmKHM+MClpZihlWzBdIT09b1sxXVswXSlyPXQsdD10LnJpZ2h0O2Vsc2V7aWYobD1jKHQucmlnaHQsZSkpcmV0dXJuIGw7dD10LmxlZnR9ZWxzZXtpZihlWzBdIT09b1sxXVswXSlyZXR1cm4gdDt2YXIgbDtpZihsPWModC5yaWdodCxlKSlyZXR1cm4gbDt0PXQubGVmdH19cmV0dXJuIHJ9ZnVuY3Rpb24gdSh0LGUscixuKXt0aGlzLnk9dCx0aGlzLmluZGV4PWUsdGhpcy5zdGFydD1yLHRoaXMuY2xvc2VkPW59ZnVuY3Rpb24gaCh0LGUscixuKXt0aGlzLng9dCx0aGlzLnNlZ21lbnQ9ZSx0aGlzLmNyZWF0ZT1yLHRoaXMuaW5kZXg9bn1zLnByb3RvdHlwZS5jYXN0VXA9ZnVuY3Rpb24odCl7dmFyIGU9bi5sZSh0aGlzLmNvb3JkaW5hdGVzLHRbMF0pO2lmKGU8MClyZXR1cm4tMTt0aGlzLnNsYWJzW2VdO3ZhciByPWModGhpcy5zbGFic1tlXSx0KSxpPS0xO2lmKHImJihpPXIudmFsdWUpLHRoaXMuY29vcmRpbmF0ZXNbZV09PT10WzBdKXt2YXIgcz1udWxsO2lmKHImJihzPXIua2V5KSxlPjApe3ZhciB1PWModGhpcy5zbGFic1tlLTFdLHQpO3UmJihzP28odS5rZXkscyk+MCYmKHM9dS5rZXksaT11LnZhbHVlKTooaT11LnZhbHVlLHM9dS5rZXkpKX12YXIgaD10aGlzLmhvcml6b250YWxbZV07aWYoaC5sZW5ndGg+MCl7dmFyIGY9bi5nZShoLHRbMV0sbCk7aWYoZjxoLmxlbmd0aCl7dmFyIHA9aFtmXTtpZih0WzFdPT09cC55KXtpZihwLmNsb3NlZClyZXR1cm4gcC5pbmRleDtmb3IoO2Y8aC5sZW5ndGgtMSYmaFtmKzFdLnk9PT10WzFdOylpZigocD1oW2YrPTFdKS5jbG9zZWQpcmV0dXJuIHAuaW5kZXg7aWYocC55PT09dFsxXSYmIXAuc3RhcnQpe2lmKChmKz0xKT49aC5sZW5ndGgpcmV0dXJuIGk7cD1oW2ZdfX1pZihwLnN0YXJ0KWlmKHMpe3ZhciBkPWEoc1swXSxzWzFdLFt0WzBdLHAueV0pO3NbMF1bMF0+c1sxXVswXSYmKGQ9LWQpLGQ+MCYmKGk9cC5pbmRleCl9ZWxzZSBpPXAuaW5kZXg7ZWxzZSBwLnkhPT10WzFdJiYoaT1wLmluZGV4KX19fXJldHVybiBpfX0se1wiLi9saWIvb3JkZXItc2VnbWVudHNcIjo1MTAsXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiOjgyLFwiZnVuY3Rpb25hbC1yZWQtYmxhY2stdHJlZVwiOjIyNyxcInJvYnVzdC1vcmllbnRhdGlvblwiOjQ5NX1dLDUxMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJyb2J1c3QtZG90LXByb2R1Y3RcIiksaT10KFwicm9idXN0LXN1bVwiKTtmdW5jdGlvbiBhKHQsZSl7dmFyIHI9aShuKHQsZSksW2VbZS5sZW5ndGgtMV1dKTtyZXR1cm4gcltyLmxlbmd0aC0xXX1mdW5jdGlvbiBvKHQsZSxyLG4pe3ZhciBpPS1lLyhuLWUpO2k8MD9pPTA6aT4xJiYoaT0xKTtmb3IodmFyIGE9MS1pLG89dC5sZW5ndGgscz1uZXcgQXJyYXkobyksbD0wO2w8bzsrK2wpc1tsXT1pKnRbbF0rYSpyW2xdO3JldHVybiBzfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPVtdLGk9YSh0W3QubGVuZ3RoLTFdLGUpLHM9dFt0Lmxlbmd0aC0xXSxsPXRbMF0sYz0wO2M8dC5sZW5ndGg7KytjLHM9bCl7dmFyIHU9YShsPXRbY10sZSk7aWYoaTwwJiZ1PjB8fGk+MCYmdTwwKXt2YXIgaD1vKHMsdSxsLGkpO3IucHVzaChoKSxuLnB1c2goaC5zbGljZSgpKX11PDA/bi5wdXNoKGwuc2xpY2UoKSk6dT4wP3IucHVzaChsLnNsaWNlKCkpOihyLnB1c2gobC5zbGljZSgpKSxuLnB1c2gobC5zbGljZSgpKSksaT11fXJldHVybntwb3NpdGl2ZTpyLG5lZ2F0aXZlOm59fSxlLmV4cG9ydHMucG9zaXRpdmU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj1hKHRbdC5sZW5ndGgtMV0sZSksaT10W3QubGVuZ3RoLTFdLHM9dFswXSxsPTA7bDx0Lmxlbmd0aDsrK2wsaT1zKXt2YXIgYz1hKHM9dFtsXSxlKTsobjwwJiZjPjB8fG4+MCYmYzwwKSYmci5wdXNoKG8oaSxjLHMsbikpLGM+PTAmJnIucHVzaChzLnNsaWNlKCkpLG49Y31yZXR1cm4gcn0sZS5leHBvcnRzLm5lZ2F0aXZlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49YSh0W3QubGVuZ3RoLTFdLGUpLGk9dFt0Lmxlbmd0aC0xXSxzPXRbMF0sbD0wO2w8dC5sZW5ndGg7KytsLGk9cyl7dmFyIGM9YShzPXRbbF0sZSk7KG48MCYmYz4wfHxuPjAmJmM8MCkmJnIucHVzaChvKGksYyxzLG4pKSxjPD0wJiZyLnB1c2gocy5zbGljZSgpKSxuPWN9cmV0dXJuIHJ9fSx7XCJyb2J1c3QtZG90LXByb2R1Y3RcIjo0OTIsXCJyb2J1c3Qtc3VtXCI6NTAwfV0sNTEzOltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHQ9e25vdF9zdHJpbmc6L1tec10vLG5vdF9ib29sOi9bXnRdLyxub3RfdHlwZTovW15UXS8sbm90X3ByaW1pdGl2ZTovW152XS8sbnVtYmVyOi9bZGllZmddLyxudW1lcmljX2FyZzovW2JjZGllZmd1eFhdLyxqc29uOi9bal0vLG5vdF9qc29uOi9bXmpdLyx0ZXh0Oi9eW15cXHgyNV0rLyxtb2R1bG86L15cXHgyNXsyfS8scGxhY2Vob2xkZXI6L15cXHgyNSg/OihbMS05XVxcZCopXFwkfFxcKChbXildKylcXCkpPyhcXCspPygwfCdbXiRdKT8oLSk/KFxcZCspPyg/OlxcLihcXGQrKSk/KFtiLWdpam9zdFR1dnhYXSkvLGtleTovXihbYS16X11bYS16X1xcZF0qKS9pLGtleV9hY2Nlc3M6L15cXC4oW2Etel9dW2Etel9cXGRdKikvaSxpbmRleF9hY2Nlc3M6L15cXFsoXFxkKylcXF0vLHNpZ246L15bKy1dL307ZnVuY3Rpb24gZShyKXtyZXR1cm4gZnVuY3Rpb24ocixuKXt2YXIgaSxhLG8scyxsLGMsdSxoLGYscD0xLGQ9ci5sZW5ndGgsZz1cIlwiO2ZvcihhPTA7YTxkO2ErKylpZihcInN0cmluZ1wiPT10eXBlb2YgclthXSlnKz1yW2FdO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIHJbYV0pe2lmKChzPXJbYV0pLmtleXMpZm9yKGk9bltwXSxvPTA7bzxzLmtleXMubGVuZ3RoO28rKyl7aWYobnVsbD09aSl0aHJvdyBuZXcgRXJyb3IoZSgnW3NwcmludGZdIENhbm5vdCBhY2Nlc3MgcHJvcGVydHkgXCIlc1wiIG9mIHVuZGVmaW5lZCB2YWx1ZSBcIiVzXCInLHMua2V5c1tvXSxzLmtleXNbby0xXSkpO2k9aVtzLmtleXNbb11dfWVsc2UgaT1zLnBhcmFtX25vP25bcy5wYXJhbV9ub106bltwKytdO2lmKHQubm90X3R5cGUudGVzdChzLnR5cGUpJiZ0Lm5vdF9wcmltaXRpdmUudGVzdChzLnR5cGUpJiZpIGluc3RhbmNlb2YgRnVuY3Rpb24mJihpPWkoKSksdC5udW1lcmljX2FyZy50ZXN0KHMudHlwZSkmJlwibnVtYmVyXCIhPXR5cGVvZiBpJiZpc05hTihpKSl0aHJvdyBuZXcgVHlwZUVycm9yKGUoXCJbc3ByaW50Zl0gZXhwZWN0aW5nIG51bWJlciBidXQgZm91bmQgJVRcIixpKSk7c3dpdGNoKHQubnVtYmVyLnRlc3Qocy50eXBlKSYmKGg9aT49MCkscy50eXBlKXtjYXNlXCJiXCI6aT1wYXJzZUludChpLDEwKS50b1N0cmluZygyKTticmVhaztjYXNlXCJjXCI6aT1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGksMTApKTticmVhaztjYXNlXCJkXCI6Y2FzZVwiaVwiOmk9cGFyc2VJbnQoaSwxMCk7YnJlYWs7Y2FzZVwialwiOmk9SlNPTi5zdHJpbmdpZnkoaSxudWxsLHMud2lkdGg/cGFyc2VJbnQocy53aWR0aCk6MCk7YnJlYWs7Y2FzZVwiZVwiOmk9cy5wcmVjaXNpb24/cGFyc2VGbG9hdChpKS50b0V4cG9uZW50aWFsKHMucHJlY2lzaW9uKTpwYXJzZUZsb2F0KGkpLnRvRXhwb25lbnRpYWwoKTticmVhaztjYXNlXCJmXCI6aT1zLnByZWNpc2lvbj9wYXJzZUZsb2F0KGkpLnRvRml4ZWQocy5wcmVjaXNpb24pOnBhcnNlRmxvYXQoaSk7YnJlYWs7Y2FzZVwiZ1wiOmk9cy5wcmVjaXNpb24/U3RyaW5nKE51bWJlcihpLnRvUHJlY2lzaW9uKHMucHJlY2lzaW9uKSkpOnBhcnNlRmxvYXQoaSk7YnJlYWs7Y2FzZVwib1wiOmk9KHBhcnNlSW50KGksMTApPj4+MCkudG9TdHJpbmcoOCk7YnJlYWs7Y2FzZVwic1wiOmk9U3RyaW5nKGkpLGk9cy5wcmVjaXNpb24/aS5zdWJzdHJpbmcoMCxzLnByZWNpc2lvbik6aTticmVhaztjYXNlXCJ0XCI6aT1TdHJpbmcoISFpKSxpPXMucHJlY2lzaW9uP2kuc3Vic3RyaW5nKDAscy5wcmVjaXNpb24pOmk7YnJlYWs7Y2FzZVwiVFwiOmk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGkpLnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCksaT1zLnByZWNpc2lvbj9pLnN1YnN0cmluZygwLHMucHJlY2lzaW9uKTppO2JyZWFrO2Nhc2VcInVcIjppPXBhcnNlSW50KGksMTApPj4+MDticmVhaztjYXNlXCJ2XCI6aT1pLnZhbHVlT2YoKSxpPXMucHJlY2lzaW9uP2kuc3Vic3RyaW5nKDAscy5wcmVjaXNpb24pOmk7YnJlYWs7Y2FzZVwieFwiOmk9KHBhcnNlSW50KGksMTApPj4+MCkudG9TdHJpbmcoMTYpO2JyZWFrO2Nhc2VcIlhcIjppPShwYXJzZUludChpLDEwKT4+PjApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfXQuanNvbi50ZXN0KHMudHlwZSk/Zys9aTooIXQubnVtYmVyLnRlc3Qocy50eXBlKXx8aCYmIXMuc2lnbj9mPVwiXCI6KGY9aD9cIitcIjpcIi1cIixpPWkudG9TdHJpbmcoKS5yZXBsYWNlKHQuc2lnbixcIlwiKSksYz1zLnBhZF9jaGFyP1wiMFwiPT09cy5wYWRfY2hhcj9cIjBcIjpzLnBhZF9jaGFyLmNoYXJBdCgxKTpcIiBcIix1PXMud2lkdGgtKGYraSkubGVuZ3RoLGw9cy53aWR0aCYmdT4wP2MucmVwZWF0KHUpOlwiXCIsZys9cy5hbGlnbj9mK2krbDpcIjBcIj09PWM/ZitsK2k6bCtmK2kpfXJldHVybiBnfShmdW5jdGlvbihlKXtpZihpW2VdKXJldHVybiBpW2VdO3ZhciByLG49ZSxhPVtdLG89MDtmb3IoO247KXtpZihudWxsIT09KHI9dC50ZXh0LmV4ZWMobikpKWEucHVzaChyWzBdKTtlbHNlIGlmKG51bGwhPT0ocj10Lm1vZHVsby5leGVjKG4pKSlhLnB1c2goXCIlXCIpO2Vsc2V7aWYobnVsbD09PShyPXQucGxhY2Vob2xkZXIuZXhlYyhuKSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiW3NwcmludGZdIHVuZXhwZWN0ZWQgcGxhY2Vob2xkZXJcIik7aWYoclsyXSl7b3w9MTt2YXIgcz1bXSxsPXJbMl0sYz1bXTtpZihudWxsPT09KGM9dC5rZXkuZXhlYyhsKSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiW3NwcmludGZdIGZhaWxlZCB0byBwYXJzZSBuYW1lZCBhcmd1bWVudCBrZXlcIik7Zm9yKHMucHVzaChjWzFdKTtcIlwiIT09KGw9bC5zdWJzdHJpbmcoY1swXS5sZW5ndGgpKTspaWYobnVsbCE9PShjPXQua2V5X2FjY2Vzcy5leGVjKGwpKSlzLnB1c2goY1sxXSk7ZWxzZXtpZihudWxsPT09KGM9dC5pbmRleF9hY2Nlc3MuZXhlYyhsKSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiW3NwcmludGZdIGZhaWxlZCB0byBwYXJzZSBuYW1lZCBhcmd1bWVudCBrZXlcIik7cy5wdXNoKGNbMV0pfXJbMl09c31lbHNlIG98PTI7aWYoMz09PW8pdGhyb3cgbmV3IEVycm9yKFwiW3NwcmludGZdIG1peGluZyBwb3NpdGlvbmFsIGFuZCBuYW1lZCBwbGFjZWhvbGRlcnMgaXMgbm90ICh5ZXQpIHN1cHBvcnRlZFwiKTthLnB1c2goe3BsYWNlaG9sZGVyOnJbMF0scGFyYW1fbm86clsxXSxrZXlzOnJbMl0sc2lnbjpyWzNdLHBhZF9jaGFyOnJbNF0sYWxpZ246cls1XSx3aWR0aDpyWzZdLHByZWNpc2lvbjpyWzddLHR5cGU6cls4XX0pfW49bi5zdWJzdHJpbmcoclswXS5sZW5ndGgpfXJldHVybiBpW2VdPWF9KHIpLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbih0LHIpe3JldHVybiBlLmFwcGx5KG51bGwsW3RdLmNvbmNhdChyfHxbXSkpfXZhciBpPU9iamVjdC5jcmVhdGUobnVsbCk7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHImJihyLnNwcmludGY9ZSxyLnZzcHJpbnRmPW4pLFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJih3aW5kb3cuc3ByaW50Zj1lLHdpbmRvdy52c3ByaW50Zj1uKX0oKX0se31dLDUxNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJwYXJlbnRoZXNpc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKG51bGw9PXQpdGhyb3cgRXJyb3IoXCJGaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgYSBzdHJpbmdcIik7aWYobnVsbD09ZSl0aHJvdyBFcnJvcihcIlNlcGFyYXRvciBzaG91bGQgYmUgYSBzdHJpbmcgb3IgYSBSZWdFeHBcIik7cj8oXCJzdHJpbmdcIj09dHlwZW9mIHJ8fEFycmF5LmlzQXJyYXkocikpJiYocj17aWdub3JlOnJ9KTpyPXt9LG51bGw9PXIuZXNjYXBlJiYoci5lc2NhcGU9ITApLG51bGw9PXIuaWdub3JlP3IuaWdub3JlPVtcIltdXCIsXCIoKVwiLFwie31cIixcIjw+XCIsJ1wiXCInLFwiJydcIixcImBgXCIsXCJcXHUyMDFjXFx1MjAxZFwiLFwiXFx4YWJcXHhiYlwiXTooXCJzdHJpbmdcIj09dHlwZW9mIHIuaWdub3JlJiYoci5pZ25vcmU9W3IuaWdub3JlXSksci5pZ25vcmU9ci5pZ25vcmUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiAxPT09dC5sZW5ndGgmJih0Kz10KSx0fSkpO3ZhciBpPW4ucGFyc2UodCx7ZmxhdDohMCxicmFja2V0czpyLmlnbm9yZX0pLGE9aVswXS5zcGxpdChlKTtpZihyLmVzY2FwZSl7Zm9yKHZhciBvPVtdLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzXSxjPWFbcysxXTtcIlxcXFxcIj09PWxbbC5sZW5ndGgtMV0mJlwiXFxcXFwiIT09bFtsLmxlbmd0aC0yXT8oby5wdXNoKGwrZStjKSxzKyspOm8ucHVzaChsKX1hPW99Zm9yKHM9MDtzPGEubGVuZ3RoO3MrKylpWzBdPWFbc10sYVtzXT1uLnN0cmluZ2lmeShpLHtmbGF0OiEwfSk7cmV0dXJuIGF9fSx7cGFyZW50aGVzaXM6NDUxfV0sNTE1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPW5ldyBBcnJheShlKSxpPW5ldyBBcnJheShlKSxhPW5ldyBBcnJheShlKSxvPW5ldyBBcnJheShlKSxzPW5ldyBBcnJheShlKSxsPTA7bDxlOysrbClyW2xdPS0xLG5bbF09MCxpW2xdPSExLGFbbF09MCxvW2xdPS0xLHNbbF09W107dmFyIGMsdT0wLGg9W10sZj1bXTtmdW5jdGlvbiBwKGUpe3ZhciBsPVtlXSxjPVtlXTtmb3IocltlXT1uW2VdPXUsaVtlXT0hMCx1Kz0xO2MubGVuZ3RoPjA7KXtlPWNbYy5sZW5ndGgtMV07dmFyIHA9dFtlXTtpZihhW2VdPHAubGVuZ3RoKXtmb3IodmFyIGQ9YVtlXTtkPHAubGVuZ3RoOysrZCl7dmFyIGc9cFtkXTtpZihyW2ddPDApe3JbZ109bltnXT11LGlbZ109ITAsdSs9MSxsLnB1c2goZyksYy5wdXNoKGcpO2JyZWFrfWlbZ10mJihuW2VdPTB8TWF0aC5taW4obltlXSxuW2ddKSksb1tnXT49MCYmc1tlXS5wdXNoKG9bZ10pfWFbZV09ZH1lbHNle2lmKG5bZV09PT1yW2VdKXtmb3IodmFyIHY9W10sbT1bXSx5PTAsZD1sLmxlbmd0aC0xO2Q+PTA7LS1kKXt2YXIgeD1sW2RdO2lmKGlbeF09ITEsdi5wdXNoKHgpLG0ucHVzaChzW3hdKSx5Kz1zW3hdLmxlbmd0aCxvW3hdPWgubGVuZ3RoLHg9PT1lKXtsLmxlbmd0aD1kO2JyZWFrfX1oLnB1c2godik7Zm9yKHZhciBiPW5ldyBBcnJheSh5KSxkPTA7ZDxtLmxlbmd0aDtkKyspZm9yKHZhciBfPTA7XzxtW2RdLmxlbmd0aDtfKyspYlstLXldPW1bZF1bX107Zi5wdXNoKGIpfWMucG9wKCl9fX1mb3IodmFyIGw9MDtsPGU7KytsKXJbbF08MCYmcChsKTtmb3IodmFyIGw9MDtsPGYubGVuZ3RoO2wrKyl7dmFyIGQ9ZltsXTtpZigwIT09ZC5sZW5ndGgpe2Quc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSxjPVtkWzBdXTtmb3IodmFyIGc9MTtnPGQubGVuZ3RoO2crKylkW2ddIT09ZFtnLTFdJiZjLnB1c2goZFtnXSk7ZltsXT1jfX1yZXR1cm57Y29tcG9uZW50czpoLGFkamFjZW5jeUxpc3Q6Zn19fSx7fV0sNTE2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYodC5kaW1lbnNpb248PTApcmV0dXJue3Bvc2l0aW9uczpbXSxjZWxsczpbXX07aWYoMT09PXQuZGltZW5zaW9uKXJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1hKHQsZSksbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKSxzPTA7czxuOysrcylpW3NdPVtyW3NdXSxvW3NdPVtzXTtyZXR1cm57cG9zaXRpb25zOmksY2VsbHM6b319KHQsZSk7dmFyIHI9dC5vcmRlci5qb2luKCkrXCItXCIrdC5kdHlwZSxzPW9bcl0sZT0rZXx8MDtzfHwocz1vW3JdPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGgsYT1bXCIndXNlIHN0cmljdCc7XCJdLG89XCJzdXJmYWNlTmV0c1wiK3Quam9pbihcIl9cIikrXCJkXCIrZTthLnB1c2goXCJ2YXIgY29udG91cj1nZW5Db250b3VyKHtcIixcIm9yZGVyOltcIix0LmpvaW4oKSxcIl0sXCIsXCJzY2FsYXJBcmd1bWVudHM6IDMsXCIsXCJwaGFzZTpmdW5jdGlvbiBwaGFzZUZ1bmMocCxhLGIsYykgeyByZXR1cm4gKHAgPiBjKXwwIH0sXCIpLFwiZ2VuZXJpY1wiPT09ZSYmYS5wdXNoKFwiZ2V0dGVyczpbMF0sXCIpO2Zvcih2YXIgcz1bXSxsPVtdLGM9MDtjPHI7KytjKXMucHVzaChcImRcIitjKSxsLnB1c2goXCJkXCIrYyk7Zm9yKHZhciBjPTA7YzwxPDxyOysrYylzLnB1c2goXCJ2XCIrYyksbC5wdXNoKFwidlwiK2MpO2Zvcih2YXIgYz0wO2M8MTw8cjsrK2Mpcy5wdXNoKFwicFwiK2MpLGwucHVzaChcInBcIitjKTtzLnB1c2goXCJhXCIsXCJiXCIsXCJjXCIpLGwucHVzaChcImFcIixcImNcIiksYS5wdXNoKFwidmVydGV4OmZ1bmN0aW9uIHZlcnRleEZ1bmMoXCIscy5qb2luKCksXCIpe1wiKTtmb3IodmFyIHU9W10sYz0wO2M8MTw8cjsrK2MpdS5wdXNoKFwiKHBcIitjK1wiPDxcIitjK1wiKVwiKTthLnB1c2goXCJ2YXIgbT0oXCIsdS5qb2luKFwiK1wiKSxcIil8MDtpZihtPT09MHx8bT09PVwiLCgxPDwoMTw8cikpLTEsXCIpe3JldHVybn1cIik7dmFyIGg9W10sZj1bXTsxPDwoMTw8cik8PTEyOD8oYS5wdXNoKFwic3dpdGNoKG0pe1wiKSxmPWEpOmEucHVzaChcInN3aXRjaChtPj4+Nyl7XCIpO2Zvcih2YXIgYz0wO2M8MTw8KDE8PHIpOysrYyl7aWYoMTw8KDE8PHIpPjEyOCYmYyUxMjg9PTApe2gubGVuZ3RoPjAmJmYucHVzaChcIn19XCIpO3ZhciBwPVwidkV4dHJhXCIraC5sZW5ndGg7YS5wdXNoKFwiY2FzZSBcIixjPj4+NyxcIjpcIixwLFwiKG0mMHg3ZixcIixsLmpvaW4oKSxcIik7YnJlYWs7XCIpLGY9W1wiZnVuY3Rpb24gXCIscCxcIihtLFwiLGwuam9pbigpLFwiKXtzd2l0Y2gobSl7XCJdLGgucHVzaChmKX1mLnB1c2goXCJjYXNlIFwiLDEyNyZjLFwiOlwiKTtmb3IodmFyIGQ9bmV3IEFycmF5KHIpLGc9bmV3IEFycmF5KHIpLHY9bmV3IEFycmF5KHIpLG09bmV3IEFycmF5KHIpLHk9MCx4PTA7eDxyOysreClkW3hdPVtdLGdbeF09W10sdlt4XT0wLG1beF09MDtmb3IodmFyIHg9MDt4PDE8PHI7Kyt4KWZvcih2YXIgYj0wO2I8cjsrK2Ipe3ZhciBfPXheMTw8YjtpZighKF8+eCkmJiEoYyYxPDxfKSE9IShjJjE8PHgpKXt2YXIgdz0xO2MmMTw8Xz9nW2JdLnB1c2goXCJ2XCIrXytcIi12XCIreCk6KGdbYl0ucHVzaChcInZcIit4K1wiLXZcIitfKSx3PS13KSx3PDA/KGRbYl0ucHVzaChcIi12XCIreCtcIi12XCIrXyksdltiXSs9Mik6KGRbYl0ucHVzaChcInZcIit4K1wiK3ZcIitfKSx2W2JdLT0yKSx5Kz0xO2Zvcih2YXIgaz0wO2s8cjsrK2spayE9PWImJihfJjE8PGs/bVtrXSs9MTptW2tdLT0xKX19Zm9yKHZhciBBPVtdLGI9MDtiPHI7KytiKWlmKDA9PT1kW2JdLmxlbmd0aClBLnB1c2goXCJkXCIrYitcIi0wLjVcIik7ZWxzZXt2YXIgVD1cIlwiO3ZbYl08MD9UPXZbYl0rXCIqY1wiOnZbYl0+MCYmKFQ9XCIrXCIrdltiXStcIipjXCIpO3ZhciBNPWRbYl0ubGVuZ3RoL3kqLjUsUz0uNSttW2JdL3kqLjU7QS5wdXNoKFwiZFwiK2IrXCItXCIrUytcIi1cIitNK1wiKihcIitkW2JdLmpvaW4oXCIrXCIpK1QrXCIpLyhcIitnW2JdLmpvaW4oXCIrXCIpK1wiKVwiKX1mLnB1c2goXCJhLnB1c2goW1wiLEEuam9pbigpLFwiXSk7XCIsXCJicmVhaztcIil9YS5wdXNoKFwifX0sXCIpLGgubGVuZ3RoPjAmJmYucHVzaChcIn19XCIpO2Zvcih2YXIgRT1bXSxjPTA7YzwxPDxyLTE7KytjKUUucHVzaChcInZcIitjKTtFLnB1c2goXCJjMFwiLFwiYzFcIixcInAwXCIsXCJwMVwiLFwiYVwiLFwiYlwiLFwiY1wiKSxhLnB1c2goXCJjZWxsOmZ1bmN0aW9uIGNlbGxGdW5jKFwiLEUuam9pbigpLFwiKXtcIik7dmFyIEM9aShyLTEpO2EucHVzaChcImlmKHAwKXtiLnB1c2goXCIsQy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJbXCIrdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJ2XCIrdH0pK1wiXVwifSkuam9pbigpLFwiKX1lbHNle2IucHVzaChcIixDLm1hcChmdW5jdGlvbih0KXt2YXIgZT10LnNsaWNlKCk7cmV0dXJuIGUucmV2ZXJzZSgpLFwiW1wiK2UubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwidlwiK3R9KStcIl1cIn0pLmpvaW4oKSxcIil9fX0pO2Z1bmN0aW9uIFwiLG8sXCIoYXJyYXksbGV2ZWwpe3ZhciB2ZXJ0cz1bXSxjZWxscz1bXTtjb250b3VyKGFycmF5LHZlcnRzLGNlbGxzLGxldmVsKTtyZXR1cm4ge3Bvc2l0aW9uczp2ZXJ0cyxjZWxsczpjZWxsc307fSByZXR1cm4gXCIsbyxcIjtcIik7Zm9yKHZhciBjPTA7YzxoLmxlbmd0aDsrK2MpYS5wdXNoKGhbY10uam9pbihcIlwiKSk7cmV0dXJuIG5ldyBGdW5jdGlvbihcImdlbkNvbnRvdXJcIixhLmpvaW4oXCJcIikpKG4pfSh0Lm9yZGVyLHQuZHR5cGUpKTtyZXR1cm4gcyh0LGUpfTt2YXIgbj10KFwibmRhcnJheS1leHRyYWN0LWNvbnRvdXJcIiksaT10KFwidHJpYW5ndWxhdGUtaHlwZXJjdWJlXCIpLGE9dChcInplcm8tY3Jvc3NpbmdzXCIpO3ZhciBvPXt9fSx7XCJuZGFycmF5LWV4dHJhY3QtY29udG91clwiOjQzMixcInRyaWFuZ3VsYXRlLWh5cGVyY3ViZVwiOjUyNixcInplcm8tY3Jvc3NpbmdzXCI6NTU5fV0sNTE3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG49ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0O2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QodCkpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9W10sbj0hMCxpPSExLGE9dm9pZCAwO3RyeXtmb3IodmFyIG8scz10W1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KG89cy5uZXh0KCkpLmRvbmUpJiYoci5wdXNoKG8udmFsdWUpLCFlfHxyLmxlbmd0aCE9PWUpO249ITApO31jYXRjaCh0KXtpPSEwLGE9dH1maW5hbGx5e3RyeXshbiYmcy5yZXR1cm4mJnMucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IGF9fXJldHVybiByfSh0LGUpO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpfX0oKSxpPTIqTWF0aC5QSSxhPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPXQueCxsPXQueTtyZXR1cm57eDpuKihzKj1lKS1pKihsKj1yKSthLHk6aSpzK24qbCtvfX0sbz1mdW5jdGlvbih0LGUpe3ZhciByPS41NTE5MTUwMjQ0OTQsbj1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpLGE9TWF0aC5jb3ModCtlKSxvPU1hdGguc2luKHQrZSk7cmV0dXJuW3t4Om4taSpyLHk6aStuKnJ9LHt4OmErbypyLHk6by1hKnJ9LHt4OmEseTpvfV19LHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dCpuLWUqcjwwPy0xOjEsYT0odCpyK2UqbikvKE1hdGguc3FydCh0KnQrZSplKSpNYXRoLnNxcnQodCp0K2UqZSkpO3JldHVybiBhPjEmJihhPTEpLGE8LTEmJihhPS0xKSxpKk1hdGguYWNvcyhhKX07ci5kZWZhdWx0PWZ1bmN0aW9uKHQpe3ZhciBlPXQucHgscj10LnB5LGw9dC5jeCxjPXQuY3ksdT10LnJ4LGg9dC5yeSxmPXQueEF4aXNSb3RhdGlvbixwPXZvaWQgMD09PWY/MDpmLGQ9dC5sYXJnZUFyY0ZsYWcsZz12b2lkIDA9PT1kPzA6ZCx2PXQuc3dlZXBGbGFnLG09dm9pZCAwPT09dj8wOnYseT1bXTtpZigwPT09dXx8MD09PWgpcmV0dXJuW107dmFyIHg9TWF0aC5zaW4ocCppLzM2MCksYj1NYXRoLmNvcyhwKmkvMzYwKSxfPWIqKGUtbCkvMit4KihyLWMpLzIsdz0teCooZS1sKS8yK2IqKHItYykvMjtpZigwPT09XyYmMD09PXcpcmV0dXJuW107dT1NYXRoLmFicyh1KSxoPU1hdGguYWJzKGgpO3ZhciBrPU1hdGgucG93KF8sMikvTWF0aC5wb3codSwyKStNYXRoLnBvdyh3LDIpL01hdGgucG93KGgsMik7az4xJiYodSo9TWF0aC5zcXJ0KGspLGgqPU1hdGguc3FydChrKSk7dmFyIEE9ZnVuY3Rpb24odCxlLHIsbixhLG8sbCxjLHUsaCxmLHApe3ZhciBkPU1hdGgucG93KGEsMiksZz1NYXRoLnBvdyhvLDIpLHY9TWF0aC5wb3coZiwyKSxtPU1hdGgucG93KHAsMikseT1kKmctZCptLWcqdjt5PDAmJih5PTApLHkvPWQqbStnKnY7dmFyIHg9KHk9TWF0aC5zcXJ0KHkpKihsPT09Yz8tMToxKSkqYS9vKnAsYj15Ki1vL2EqZixfPWgqeC11KmIrKHQrcikvMix3PXUqeCtoKmIrKGUrbikvMixrPShmLXgpL2EsQT0ocC1iKS9vLFQ9KC1mLXgpL2EsTT0oLXAtYikvbyxTPXMoMSwwLGssQSksRT1zKGssQSxULE0pO3JldHVybiAwPT09YyYmRT4wJiYoRS09aSksMT09PWMmJkU8MCYmKEUrPWkpLFtfLHcsUyxFXX0oZSxyLGwsYyx1LGgsZyxtLHgsYixfLHcpLFQ9bihBLDQpLE09VFswXSxTPVRbMV0sRT1UWzJdLEM9VFszXSxMPU1hdGguYWJzKEMpLyhpLzQpO01hdGguYWJzKDEtTCk8MWUtNyYmKEw9MSk7dmFyIHo9TWF0aC5tYXgoTWF0aC5jZWlsKEwpLDEpO0MvPXo7Zm9yKHZhciBPPTA7Tzx6O08rKyl5LnB1c2gobyhFLEMpKSxFKz1DO3JldHVybiB5Lm1hcChmdW5jdGlvbih0KXt2YXIgZT1hKHRbMF0sdSxoLGIseCxNLFMpLHI9ZS54LG49ZS55LGk9YSh0WzFdLHUsaCxiLHgsTSxTKSxvPWkueCxzPWkueSxsPWEodFsyXSx1LGgsYix4LE0sUyk7cmV0dXJue3gxOnIseTE6bix4MjpvLHkyOnMseDpsLngseTpsLnl9fSl9LGUuZXhwb3J0cz1yLmRlZmF1bHR9LHt9XSw1MTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicGFyc2Utc3ZnLXBhdGhcIiksaT10KFwiYWJzLXN2Zy1wYXRoXCIpLGE9dChcIm5vcm1hbGl6ZS1zdmctcGF0aFwiKSxvPXQoXCJpcy1zdmctcGF0aFwiKSxzPXQoXCJhc3NlcnRcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe0FycmF5LmlzQXJyYXkodCkmJjE9PT10Lmxlbmd0aCYmXCJzdHJpbmdcIj09dHlwZW9mIHRbMF0mJih0PXRbMF0pO1wic3RyaW5nXCI9PXR5cGVvZiB0JiYocyhvKHQpLFwiU3RyaW5nIGlzIG5vdCBhbiBTVkcgcGF0aC5cIiksdD1uKHQpKTtpZihzKEFycmF5LmlzQXJyYXkodCksXCJBcmd1bWVudCBzaG91bGQgYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2YgcGF0aCBzZWdtZW50cy5cIiksdD1pKHQpLCEodD1hKHQpKS5sZW5ndGgpcmV0dXJuWzAsMCwwLDBdO2Zvcih2YXIgZT1bMS8wLDEvMCwtMS8wLC0xLzBdLHI9MCxsPXQubGVuZ3RoO3I8bDtyKyspZm9yKHZhciBjPXRbcl0uc2xpY2UoMSksdT0wO3U8Yy5sZW5ndGg7dSs9MiljW3UrMF08ZVswXSYmKGVbMF09Y1t1KzBdKSxjW3UrMV08ZVsxXSYmKGVbMV09Y1t1KzFdKSxjW3UrMF0+ZVsyXSYmKGVbMl09Y1t1KzBdKSxjW3UrMV0+ZVszXSYmKGVbM109Y1t1KzFdKTtyZXR1cm4gZX19LHtcImFicy1zdmctcGF0aFwiOjUxLGFzc2VydDo1OSxcImlzLXN2Zy1wYXRoXCI6NDE3LFwibm9ybWFsaXplLXN2Zy1wYXRoXCI6NTE5LFwicGFyc2Utc3ZnLXBhdGhcIjo0NTN9XSw1MTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9W10sbz0wLHM9MCxsPTAsYz0wLHU9bnVsbCxoPW51bGwsZj0wLHA9MCxkPTAsZz10Lmxlbmd0aDtkPGc7ZCsrKXt2YXIgdj10W2RdLG09dlswXTtzd2l0Y2gobSl7Y2FzZVwiTVwiOmw9dlsxXSxjPXZbMl07YnJlYWs7Y2FzZVwiQVwiOnZhciB5PW4oe3B4OmYscHk6cCxjeDp2WzZdLGN5OnZbN10scng6dlsxXSxyeTp2WzJdLHhBeGlzUm90YXRpb246dlszXSxsYXJnZUFyY0ZsYWc6dls0XSxzd2VlcEZsYWc6dls1XX0pO2lmKCF5Lmxlbmd0aCljb250aW51ZTtmb3IodmFyIHgsYj0wO2I8eS5sZW5ndGg7YisrKXg9eVtiXSx2PVtcIkNcIix4LngxLHgueTEseC54Mix4LnkyLHgueCx4LnldLGI8eS5sZW5ndGgtMSYmci5wdXNoKHYpO2JyZWFrO2Nhc2VcIlNcIjp2YXIgXz1mLHc9cDtcIkNcIiE9ZSYmXCJTXCIhPWV8fChfKz1fLW8sdys9dy1zKSx2PVtcIkNcIixfLHcsdlsxXSx2WzJdLHZbM10sdls0XV07YnJlYWs7Y2FzZVwiVFwiOlwiUVwiPT1lfHxcIlRcIj09ZT8odT0yKmYtdSxoPTIqcC1oKToodT1mLGg9cCksdj1hKGYscCx1LGgsdlsxXSx2WzJdKTticmVhaztjYXNlXCJRXCI6dT12WzFdLGg9dlsyXSx2PWEoZixwLHZbMV0sdlsyXSx2WzNdLHZbNF0pO2JyZWFrO2Nhc2VcIkxcIjp2PWkoZixwLHZbMV0sdlsyXSk7YnJlYWs7Y2FzZVwiSFwiOnY9aShmLHAsdlsxXSxwKTticmVhaztjYXNlXCJWXCI6dj1pKGYscCxmLHZbMV0pO2JyZWFrO2Nhc2VcIlpcIjp2PWkoZixwLGwsYyl9ZT1tLGY9dlt2Lmxlbmd0aC0yXSxwPXZbdi5sZW5ndGgtMV0sdi5sZW5ndGg+ND8obz12W3YubGVuZ3RoLTRdLHM9dlt2Lmxlbmd0aC0zXSk6KG89ZixzPXApLHIucHVzaCh2KX1yZXR1cm4gcn07dmFyIG49dChcInN2Zy1hcmMtdG8tY3ViaWMtYmV6aWVyXCIpO2Z1bmN0aW9uIGkodCxlLHIsbil7cmV0dXJuW1wiQ1wiLHQsZSxyLG4scixuXX1mdW5jdGlvbiBhKHQsZSxyLG4saSxhKXtyZXR1cm5bXCJDXCIsdC8zKzIvMypyLGUvMysyLzMqbixpLzMrMi8zKnIsYS8zKzIvMypuLGksYV19fSx7XCJzdmctYXJjLXRvLWN1YmljLWJlemllclwiOjUxN31dLDUyMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuLGk9dChcInN2Zy1wYXRoLWJvdW5kc1wiKSxhPXQoXCJwYXJzZS1zdmctcGF0aFwiKSxvPXQoXCJkcmF3LXN2Zy1wYXRoXCIpLHM9dChcImlzLXN2Zy1wYXRoXCIpLGw9dChcImJpdG1hcC1zZGZcIiksYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLHU9Yy5nZXRDb250ZXh0KFwiMmRcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIXModCkpdGhyb3cgRXJyb3IoXCJBcmd1bWVudCBzaG91bGQgYmUgdmFsaWQgc3ZnIHBhdGggc3RyaW5nXCIpO2V8fChlPXt9KTt2YXIgcixoO2Uuc2hhcGU/KHI9ZS5zaGFwZVswXSxoPWUuc2hhcGVbMV0pOihyPWMud2lkdGg9ZS53fHxlLndpZHRofHwyMDAsaD1jLmhlaWdodD1lLmh8fGUuaGVpZ2h0fHwyMDApO3ZhciBmPU1hdGgubWluKHIsaCkscD1lLnN0cm9rZXx8MCxkPWUudmlld2JveHx8ZS52aWV3Qm94fHxpKHQpLGc9W3IvKGRbMl0tZFswXSksaC8oZFszXS1kWzFdKV0sdj1NYXRoLm1pbihnWzBdfHwwLGdbMV18fDApLzI7dS5maWxsU3R5bGU9XCJibGFja1wiLHUuZmlsbFJlY3QoMCwwLHIsaCksdS5maWxsU3R5bGU9XCJ3aGl0ZVwiLHAmJihcIm51bWJlclwiIT10eXBlb2YgcCYmKHA9MSksdS5zdHJva2VTdHlsZT1wPjA/XCJ3aGl0ZVwiOlwiYmxhY2tcIix1LmxpbmVXaWR0aD1NYXRoLmFicyhwKSk7aWYodS50cmFuc2xhdGUoLjUqciwuNSpoKSx1LnNjYWxlKHYsdiksZnVuY3Rpb24oKXtpZihudWxsIT1uKXJldHVybiBuO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIikuZ2V0Q29udGV4dChcIjJkXCIpO2lmKHQuY2FudmFzLndpZHRoPXQuY2FudmFzLmhlaWdodD0xLCF3aW5kb3cuUGF0aDJEKXJldHVybiBuPSExO3ZhciBlPW5ldyBQYXRoMkQoXCJNMCwwaDF2MWgtMXYtMVpcIik7dC5maWxsU3R5bGU9XCJibGFja1wiLHQuZmlsbChlKTt2YXIgcj10LmdldEltYWdlRGF0YSgwLDAsMSwxKTtyZXR1cm4gbj1yJiZyLmRhdGEmJjI1NT09PXIuZGF0YVszXX0oKSl7dmFyIG09bmV3IFBhdGgyRCh0KTt1LmZpbGwobSkscCYmdS5zdHJva2UobSl9ZWxzZXt2YXIgeT1hKHQpO28odSx5KSx1LmZpbGwoKSxwJiZ1LnN0cm9rZSgpfXJldHVybiB1LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksbCh1LHtjdXRvZmY6bnVsbCE9ZS5jdXRvZmY/ZS5jdXRvZmY6LjUscmFkaXVzOm51bGwhPWUucmFkaXVzP2UucmFkaXVzOi41KmZ9KX19LHtcImJpdG1hcC1zZGZcIjo4NCxcImRyYXctc3ZnLXBhdGhcIjoxNjAsXCJpcy1zdmctcGF0aFwiOjQxNyxcInBhcnNlLXN2Zy1wYXRoXCI6NDUzLFwic3ZnLXBhdGgtYm91bmRzXCI6NTE4fV0sNTIxOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbiB0KGUscixpKXt2YXIgaT1pfHx7fTt2YXIgbz1hW2VdO298fChvPWFbZV09e1wiIFwiOntkYXRhOm5ldyBGbG9hdDMyQXJyYXkoMCksc2hhcGU6LjJ9fSk7dmFyIHM9b1tyXTtpZighcylpZihyLmxlbmd0aDw9MXx8IS9cXGQvLnRlc3Qocikpcz1vW3JdPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmNlbGxzLHI9dC5wb3NpdGlvbnMsbj1uZXcgRmxvYXQzMkFycmF5KDYqZS5sZW5ndGgpLGk9MCxhPTAsbz0wO288ZS5sZW5ndGg7KytvKWZvcih2YXIgcz1lW29dLGw9MDtsPDM7KytsKXt2YXIgYz1yW3NbbF1dO25baSsrXT1jWzBdLG5baSsrXT1jWzFdKzEuNCxhPU1hdGgubWF4KGNbMF0sYSl9cmV0dXJue2RhdGE6bixzaGFwZTphfX0obihyLHt0cmlhbmdsZXM6ITAsZm9udDplLHRleHRBbGlnbjppLnRleHRBbGlnbnx8XCJsZWZ0XCIsdGV4dEJhc2VsaW5lOlwiYWxwaGFiZXRpY1wiLHN0eWxldGFnczp7YnJlYWtsaW5lczohMCxib2xkczohMCxpdGFsaWNzOiEwLHN1YnNjcmlwdHM6ITAsc3VwZXJzY3JpcHRzOiEwfX0pKTtlbHNle2Zvcih2YXIgbD1yLnNwbGl0KC8oXFxkfFxccykvKSxjPW5ldyBBcnJheShsLmxlbmd0aCksdT0wLGg9MCxmPTA7ZjxsLmxlbmd0aDsrK2YpY1tmXT10KGUsbFtmXSksdSs9Y1tmXS5kYXRhLmxlbmd0aCxoKz1jW2ZdLnNoYXBlLGY+MCYmKGgrPS4wMik7Zm9yKHZhciBwPW5ldyBGbG9hdDMyQXJyYXkodSksZD0wLGc9LS41KmgsZj0wO2Y8Yy5sZW5ndGg7KytmKXtmb3IodmFyIHY9Y1tmXS5kYXRhLG09MDttPHYubGVuZ3RoO20rPTIpcFtkKytdPXZbbV0rZyxwW2QrK109dlttKzFdO2crPWNbZl0uc2hhcGUrLjAyfXM9b1tyXT17ZGF0YTpwLHNoYXBlOmh9fXJldHVybiBzfTt2YXIgbj10KFwidmVjdG9yaXplLXRleHRcIiksaT13aW5kb3d8fHIuZ2xvYmFsfHx7fSxhPWkuX19URVhUX0NBQ0hFfHx7fTtpLl9fVEVYVF9DQUNIRT17fX0pLmNhbGwodGhpcyx0KFwiX3Byb2Nlc3NcIikpfSx7X3Byb2Nlc3M6NDc1LFwidmVjdG9yaXplLXRleHRcIjo1MzV9XSw1MjI6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCl7dmFyIHI9L15cXHMrLyxuPS9cXHMrJC8saT0wLGE9dC5yb3VuZCxvPXQubWluLHM9dC5tYXgsbD10LnJhbmRvbTtmdW5jdGlvbiBjKGUsbCl7aWYobD1sfHx7fSwoZT1lfHxcIlwiKWluc3RhbmNlb2YgYylyZXR1cm4gZTtpZighKHRoaXMgaW5zdGFuY2VvZiBjKSlyZXR1cm4gbmV3IGMoZSxsKTt2YXIgdT1mdW5jdGlvbihlKXt2YXIgaT17cjowLGc6MCxiOjB9LGE9MSxsPW51bGwsYz1udWxsLHU9bnVsbCxoPSExLGY9ITE7XCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPWZ1bmN0aW9uKHQpe3Q9dC5yZXBsYWNlKHIsXCJcIikucmVwbGFjZShuLFwiXCIpLnRvTG93ZXJDYXNlKCk7dmFyIGUsaT0hMTtpZihTW3RdKXQ9U1t0XSxpPSEwO2Vsc2UgaWYoXCJ0cmFuc3BhcmVudFwiPT10KXJldHVybntyOjAsZzowLGI6MCxhOjAsZm9ybWF0OlwibmFtZVwifTtpZihlPWoucmdiLmV4ZWModCkpcmV0dXJue3I6ZVsxXSxnOmVbMl0sYjplWzNdfTtpZihlPWoucmdiYS5leGVjKHQpKXJldHVybntyOmVbMV0sZzplWzJdLGI6ZVszXSxhOmVbNF19O2lmKGU9ai5oc2wuZXhlYyh0KSlyZXR1cm57aDplWzFdLHM6ZVsyXSxsOmVbM119O2lmKGU9ai5oc2xhLmV4ZWModCkpcmV0dXJue2g6ZVsxXSxzOmVbMl0sbDplWzNdLGE6ZVs0XX07aWYoZT1qLmhzdi5leGVjKHQpKXJldHVybntoOmVbMV0sczplWzJdLHY6ZVszXX07aWYoZT1qLmhzdmEuZXhlYyh0KSlyZXR1cm57aDplWzFdLHM6ZVsyXSx2OmVbM10sYTplWzRdfTtpZihlPWouaGV4OC5leGVjKHQpKXJldHVybntyOk8oZVsxXSksZzpPKGVbMl0pLGI6TyhlWzNdKSxhOlIoZVs0XSksZm9ybWF0Omk/XCJuYW1lXCI6XCJoZXg4XCJ9O2lmKGU9ai5oZXg2LmV4ZWModCkpcmV0dXJue3I6TyhlWzFdKSxnOk8oZVsyXSksYjpPKGVbM10pLGZvcm1hdDppP1wibmFtZVwiOlwiaGV4XCJ9O2lmKGU9ai5oZXg0LmV4ZWModCkpcmV0dXJue3I6TyhlWzFdK1wiXCIrZVsxXSksZzpPKGVbMl0rXCJcIitlWzJdKSxiOk8oZVszXStcIlwiK2VbM10pLGE6UihlWzRdK1wiXCIrZVs0XSksZm9ybWF0Omk/XCJuYW1lXCI6XCJoZXg4XCJ9O2lmKGU9ai5oZXgzLmV4ZWModCkpcmV0dXJue3I6TyhlWzFdK1wiXCIrZVsxXSksZzpPKGVbMl0rXCJcIitlWzJdKSxiOk8oZVszXStcIlwiK2VbM10pLGZvcm1hdDppP1wibmFtZVwiOlwiaGV4XCJ9O3JldHVybiExfShlKSk7XCJvYmplY3RcIj09dHlwZW9mIGUmJihWKGUucikmJlYoZS5nKSYmVihlLmIpPyhwPWUucixkPWUuZyxnPWUuYixpPXtyOjI1NSpMKHAsMjU1KSxnOjI1NSpMKGQsMjU1KSxiOjI1NSpMKGcsMjU1KX0saD0hMCxmPVwiJVwiPT09U3RyaW5nKGUucikuc3Vic3RyKC0xKT9cInByZ2JcIjpcInJnYlwiKTpWKGUuaCkmJlYoZS5zKSYmVihlLnYpPyhsPUQoZS5zKSxjPUQoZS52KSxpPWZ1bmN0aW9uKGUscixuKXtlPTYqTChlLDM2MCkscj1MKHIsMTAwKSxuPUwobiwxMDApO3ZhciBpPXQuZmxvb3IoZSksYT1lLWksbz1uKigxLXIpLHM9biooMS1hKnIpLGw9biooMS0oMS1hKSpyKSxjPWklNjtyZXR1cm57cjoyNTUqW24scyxvLG8sbCxuXVtjXSxnOjI1NSpbbCxuLG4scyxvLG9dW2NdLGI6MjU1KltvLG8sbCxuLG4sc11bY119fShlLmgsbCxjKSxoPSEwLGY9XCJoc3ZcIik6VihlLmgpJiZWKGUucykmJlYoZS5sKSYmKGw9RChlLnMpLHU9RChlLmwpLGk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYTtmdW5jdGlvbiBvKHQsZSxyKXtyZXR1cm4gcjwwJiYocis9MSkscj4xJiYoci09MSkscjwxLzY/dCs2KihlLXQpKnI6cjwuNT9lOnI8Mi8zP3QrKGUtdCkqKDIvMy1yKSo2OnR9aWYodD1MKHQsMzYwKSxlPUwoZSwxMDApLHI9TChyLDEwMCksMD09PWUpbj1pPWE9cjtlbHNle3ZhciBzPXI8LjU/ciooMStlKTpyK2UtciplLGw9MipyLXM7bj1vKGwscyx0KzEvMyksaT1vKGwscyx0KSxhPW8obCxzLHQtMS8zKX1yZXR1cm57cjoyNTUqbixnOjI1NSppLGI6MjU1KmF9fShlLmgsbCx1KSxoPSEwLGY9XCJoc2xcIiksZS5oYXNPd25Qcm9wZXJ0eShcImFcIikmJihhPWUuYSkpO3ZhciBwLGQsZztyZXR1cm4gYT1DKGEpLHtvazpoLGZvcm1hdDplLmZvcm1hdHx8ZixyOm8oMjU1LHMoaS5yLDApKSxnOm8oMjU1LHMoaS5nLDApKSxiOm8oMjU1LHMoaS5iLDApKSxhOmF9fShlKTt0aGlzLl9vcmlnaW5hbElucHV0PWUsdGhpcy5fcj11LnIsdGhpcy5fZz11LmcsdGhpcy5fYj11LmIsdGhpcy5fYT11LmEsdGhpcy5fcm91bmRBPWEoMTAwKnRoaXMuX2EpLzEwMCx0aGlzLl9mb3JtYXQ9bC5mb3JtYXR8fHUuZm9ybWF0LHRoaXMuX2dyYWRpZW50VHlwZT1sLmdyYWRpZW50VHlwZSx0aGlzLl9yPDEmJih0aGlzLl9yPWEodGhpcy5fcikpLHRoaXMuX2c8MSYmKHRoaXMuX2c9YSh0aGlzLl9nKSksdGhpcy5fYjwxJiYodGhpcy5fYj1hKHRoaXMuX2IpKSx0aGlzLl9vaz11Lm9rLHRoaXMuX3RjX2lkPWkrK31mdW5jdGlvbiB1KHQsZSxyKXt0PUwodCwyNTUpLGU9TChlLDI1NSkscj1MKHIsMjU1KTt2YXIgbixpLGE9cyh0LGUsciksbD1vKHQsZSxyKSxjPShhK2wpLzI7aWYoYT09bCluPWk9MDtlbHNle3ZhciB1PWEtbDtzd2l0Y2goaT1jPi41P3UvKDItYS1sKTp1LyhhK2wpLGEpe2Nhc2UgdDpuPShlLXIpL3UrKGU8cj82OjApO2JyZWFrO2Nhc2UgZTpuPShyLXQpL3UrMjticmVhaztjYXNlIHI6bj0odC1lKS91KzR9bi89Nn1yZXR1cm57aDpuLHM6aSxsOmN9fWZ1bmN0aW9uIGgodCxlLHIpe3Q9TCh0LDI1NSksZT1MKGUsMjU1KSxyPUwociwyNTUpO3ZhciBuLGksYT1zKHQsZSxyKSxsPW8odCxlLHIpLGM9YSx1PWEtbDtpZihpPTA9PT1hPzA6dS9hLGE9PWwpbj0wO2Vsc2V7c3dpdGNoKGEpe2Nhc2UgdDpuPShlLXIpL3UrKGU8cj82OjApO2JyZWFrO2Nhc2UgZTpuPShyLXQpL3UrMjticmVhaztjYXNlIHI6bj0odC1lKS91KzR9bi89Nn1yZXR1cm57aDpuLHM6aSx2OmN9fWZ1bmN0aW9uIGYodCxlLHIsbil7dmFyIGk9W0koYSh0KS50b1N0cmluZygxNikpLEkoYShlKS50b1N0cmluZygxNikpLEkoYShyKS50b1N0cmluZygxNikpXTtyZXR1cm4gbiYmaVswXS5jaGFyQXQoMCk9PWlbMF0uY2hhckF0KDEpJiZpWzFdLmNoYXJBdCgwKT09aVsxXS5jaGFyQXQoMSkmJmlbMl0uY2hhckF0KDApPT1pWzJdLmNoYXJBdCgxKT9pWzBdLmNoYXJBdCgwKStpWzFdLmNoYXJBdCgwKStpWzJdLmNoYXJBdCgwKTppLmpvaW4oXCJcIil9ZnVuY3Rpb24gcCh0LGUscixuKXtyZXR1cm5bSShQKG4pKSxJKGEodCkudG9TdHJpbmcoMTYpKSxJKGEoZSkudG9TdHJpbmcoMTYpKSxJKGEocikudG9TdHJpbmcoMTYpKV0uam9pbihcIlwiKX1mdW5jdGlvbiBkKHQsZSl7ZT0wPT09ZT8wOmV8fDEwO3ZhciByPWModCkudG9Ic2woKTtyZXR1cm4gci5zLT1lLzEwMCxyLnM9eihyLnMpLGMocil9ZnVuY3Rpb24gZyh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1jKHQpLnRvSHNsKCk7cmV0dXJuIHIucys9ZS8xMDAsci5zPXooci5zKSxjKHIpfWZ1bmN0aW9uIHYodCl7cmV0dXJuIGModCkuZGVzYXR1cmF0ZSgxMDApfWZ1bmN0aW9uIG0odCxlKXtlPTA9PT1lPzA6ZXx8MTA7dmFyIHI9Yyh0KS50b0hzbCgpO3JldHVybiByLmwrPWUvMTAwLHIubD16KHIubCksYyhyKX1mdW5jdGlvbiB5KHQsZSl7ZT0wPT09ZT8wOmV8fDEwO3ZhciByPWModCkudG9SZ2IoKTtyZXR1cm4gci5yPXMoMCxvKDI1NSxyLnItYSgtZS8xMDAqMjU1KSkpLHIuZz1zKDAsbygyNTUsci5nLWEoLWUvMTAwKjI1NSkpKSxyLmI9cygwLG8oMjU1LHIuYi1hKC1lLzEwMCoyNTUpKSksYyhyKX1mdW5jdGlvbiB4KHQsZSl7ZT0wPT09ZT8wOmV8fDEwO3ZhciByPWModCkudG9Ic2woKTtyZXR1cm4gci5sLT1lLzEwMCxyLmw9eihyLmwpLGMocil9ZnVuY3Rpb24gYih0LGUpe3ZhciByPWModCkudG9Ic2woKSxuPShyLmgrZSklMzYwO3JldHVybiByLmg9bjwwPzM2MCtuOm4sYyhyKX1mdW5jdGlvbiBfKHQpe3ZhciBlPWModCkudG9Ic2woKTtyZXR1cm4gZS5oPShlLmgrMTgwKSUzNjAsYyhlKX1mdW5jdGlvbiB3KHQpe3ZhciBlPWModCkudG9Ic2woKSxyPWUuaDtyZXR1cm5bYyh0KSxjKHtoOihyKzEyMCklMzYwLHM6ZS5zLGw6ZS5sfSksYyh7aDoocisyNDApJTM2MCxzOmUucyxsOmUubH0pXX1mdW5jdGlvbiBrKHQpe3ZhciBlPWModCkudG9Ic2woKSxyPWUuaDtyZXR1cm5bYyh0KSxjKHtoOihyKzkwKSUzNjAsczplLnMsbDplLmx9KSxjKHtoOihyKzE4MCklMzYwLHM6ZS5zLGw6ZS5sfSksYyh7aDoocisyNzApJTM2MCxzOmUucyxsOmUubH0pXX1mdW5jdGlvbiBBKHQpe3ZhciBlPWModCkudG9Ic2woKSxyPWUuaDtyZXR1cm5bYyh0KSxjKHtoOihyKzcyKSUzNjAsczplLnMsbDplLmx9KSxjKHtoOihyKzIxNiklMzYwLHM6ZS5zLGw6ZS5sfSldfWZ1bmN0aW9uIFQodCxlLHIpe2U9ZXx8NixyPXJ8fDMwO3ZhciBuPWModCkudG9Ic2woKSxpPTM2MC9yLGE9W2ModCldO2ZvcihuLmg9KG4uaC0oaSplPj4xKSs3MjApJTM2MDstLWU7KW4uaD0obi5oK2kpJTM2MCxhLnB1c2goYyhuKSk7cmV0dXJuIGF9ZnVuY3Rpb24gTSh0LGUpe2U9ZXx8Njtmb3IodmFyIHI9Yyh0KS50b0hzdigpLG49ci5oLGk9ci5zLGE9ci52LG89W10scz0xL2U7ZS0tOylvLnB1c2goYyh7aDpuLHM6aSx2OmF9KSksYT0oYStzKSUxO3JldHVybiBvfWMucHJvdG90eXBlPXtpc0Rhcms6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCcmlnaHRuZXNzKCk8MTI4fSxpc0xpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNEYXJrKCl9LGlzVmFsaWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb2t9LGdldE9yaWdpbmFsSW5wdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3JpZ2luYWxJbnB1dH0sZ2V0Rm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Zvcm1hdH0sZ2V0QWxwaGE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYX0sZ2V0QnJpZ2h0bmVzczpmdW5jdGlvbigpe3ZhciB0PXRoaXMudG9SZ2IoKTtyZXR1cm4oMjk5KnQucis1ODcqdC5nKzExNCp0LmIpLzFlM30sZ2V0THVtaW5hbmNlOmZ1bmN0aW9uKCl7dmFyIGUscixuLGk9dGhpcy50b1JnYigpO3JldHVybiBlPWkuci8yNTUscj1pLmcvMjU1LG49aS5iLzI1NSwuMjEyNiooZTw9LjAzOTI4P2UvMTIuOTI6dC5wb3coKGUrLjA1NSkvMS4wNTUsMi40KSkrLjcxNTIqKHI8PS4wMzkyOD9yLzEyLjkyOnQucG93KChyKy4wNTUpLzEuMDU1LDIuNCkpKy4wNzIyKihuPD0uMDM5Mjg/bi8xMi45Mjp0LnBvdygobisuMDU1KS8xLjA1NSwyLjQpKX0sc2V0QWxwaGE6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2E9Qyh0KSx0aGlzLl9yb3VuZEE9YSgxMDAqdGhpcy5fYSkvMTAwLHRoaXN9LHRvSHN2OmZ1bmN0aW9uKCl7dmFyIHQ9aCh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYik7cmV0dXJue2g6MzYwKnQuaCxzOnQucyx2OnQudixhOnRoaXMuX2F9fSx0b0hzdlN0cmluZzpmdW5jdGlvbigpe3ZhciB0PWgodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpLGU9YSgzNjAqdC5oKSxyPWEoMTAwKnQucyksbj1hKDEwMCp0LnYpO3JldHVybiAxPT10aGlzLl9hP1wiaHN2KFwiK2UrXCIsIFwiK3IrXCIlLCBcIituK1wiJSlcIjpcImhzdmEoXCIrZStcIiwgXCIrcitcIiUsIFwiK24rXCIlLCBcIit0aGlzLl9yb3VuZEErXCIpXCJ9LHRvSHNsOmZ1bmN0aW9uKCl7dmFyIHQ9dSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYik7cmV0dXJue2g6MzYwKnQuaCxzOnQucyxsOnQubCxhOnRoaXMuX2F9fSx0b0hzbFN0cmluZzpmdW5jdGlvbigpe3ZhciB0PXUodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpLGU9YSgzNjAqdC5oKSxyPWEoMTAwKnQucyksbj1hKDEwMCp0LmwpO3JldHVybiAxPT10aGlzLl9hP1wiaHNsKFwiK2UrXCIsIFwiK3IrXCIlLCBcIituK1wiJSlcIjpcImhzbGEoXCIrZStcIiwgXCIrcitcIiUsIFwiK24rXCIlLCBcIit0aGlzLl9yb3VuZEErXCIpXCJ9LHRvSGV4OmZ1bmN0aW9uKHQpe3JldHVybiBmKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLHQpfSx0b0hleFN0cmluZzpmdW5jdGlvbih0KXtyZXR1cm5cIiNcIit0aGlzLnRvSGV4KHQpfSx0b0hleDg6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG89W0koYSh0KS50b1N0cmluZygxNikpLEkoYShlKS50b1N0cmluZygxNikpLEkoYShyKS50b1N0cmluZygxNikpLEkoUChuKSldO2lmKGkmJm9bMF0uY2hhckF0KDApPT1vWzBdLmNoYXJBdCgxKSYmb1sxXS5jaGFyQXQoMCk9PW9bMV0uY2hhckF0KDEpJiZvWzJdLmNoYXJBdCgwKT09b1syXS5jaGFyQXQoMSkmJm9bM10uY2hhckF0KDApPT1vWzNdLmNoYXJBdCgxKSlyZXR1cm4gb1swXS5jaGFyQXQoMCkrb1sxXS5jaGFyQXQoMCkrb1syXS5jaGFyQXQoMCkrb1szXS5jaGFyQXQoMCk7cmV0dXJuIG8uam9pbihcIlwiKX0odGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsdGhpcy5fYSx0KX0sdG9IZXg4U3RyaW5nOmZ1bmN0aW9uKHQpe3JldHVyblwiI1wiK3RoaXMudG9IZXg4KHQpfSx0b1JnYjpmdW5jdGlvbigpe3JldHVybntyOmEodGhpcy5fciksZzphKHRoaXMuX2cpLGI6YSh0aGlzLl9iKSxhOnRoaXMuX2F9fSx0b1JnYlN0cmluZzpmdW5jdGlvbigpe3JldHVybiAxPT10aGlzLl9hP1wicmdiKFwiK2EodGhpcy5fcikrXCIsIFwiK2EodGhpcy5fZykrXCIsIFwiK2EodGhpcy5fYikrXCIpXCI6XCJyZ2JhKFwiK2EodGhpcy5fcikrXCIsIFwiK2EodGhpcy5fZykrXCIsIFwiK2EodGhpcy5fYikrXCIsIFwiK3RoaXMuX3JvdW5kQStcIilcIn0sdG9QZXJjZW50YWdlUmdiOmZ1bmN0aW9uKCl7cmV0dXJue3I6YSgxMDAqTCh0aGlzLl9yLDI1NSkpK1wiJVwiLGc6YSgxMDAqTCh0aGlzLl9nLDI1NSkpK1wiJVwiLGI6YSgxMDAqTCh0aGlzLl9iLDI1NSkpK1wiJVwiLGE6dGhpcy5fYX19LHRvUGVyY2VudGFnZVJnYlN0cmluZzpmdW5jdGlvbigpe3JldHVybiAxPT10aGlzLl9hP1wicmdiKFwiK2EoMTAwKkwodGhpcy5fciwyNTUpKStcIiUsIFwiK2EoMTAwKkwodGhpcy5fZywyNTUpKStcIiUsIFwiK2EoMTAwKkwodGhpcy5fYiwyNTUpKStcIiUpXCI6XCJyZ2JhKFwiK2EoMTAwKkwodGhpcy5fciwyNTUpKStcIiUsIFwiK2EoMTAwKkwodGhpcy5fZywyNTUpKStcIiUsIFwiK2EoMTAwKkwodGhpcy5fYiwyNTUpKStcIiUsIFwiK3RoaXMuX3JvdW5kQStcIilcIn0sdG9OYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLl9hP1widHJhbnNwYXJlbnRcIjohKHRoaXMuX2E8MSkmJihFW2YodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsITApXXx8ITEpfSx0b0ZpbHRlcjpmdW5jdGlvbih0KXt2YXIgZT1cIiNcIitwKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLHRoaXMuX2EpLHI9ZSxuPXRoaXMuX2dyYWRpZW50VHlwZT9cIkdyYWRpZW50VHlwZSA9IDEsIFwiOlwiXCI7aWYodCl7dmFyIGk9Yyh0KTtyPVwiI1wiK3AoaS5fcixpLl9nLGkuX2IsaS5fYSl9cmV0dXJuXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoXCIrbitcInN0YXJ0Q29sb3JzdHI9XCIrZStcIixlbmRDb2xvcnN0cj1cIityK1wiKVwifSx0b1N0cmluZzpmdW5jdGlvbih0KXt2YXIgZT0hIXQ7dD10fHx0aGlzLl9mb3JtYXQ7dmFyIHI9ITEsbj10aGlzLl9hPDEmJnRoaXMuX2E+PTA7cmV0dXJuIGV8fCFufHxcImhleFwiIT09dCYmXCJoZXg2XCIhPT10JiZcImhleDNcIiE9PXQmJlwiaGV4NFwiIT09dCYmXCJoZXg4XCIhPT10JiZcIm5hbWVcIiE9PXQ/KFwicmdiXCI9PT10JiYocj10aGlzLnRvUmdiU3RyaW5nKCkpLFwicHJnYlwiPT09dCYmKHI9dGhpcy50b1BlcmNlbnRhZ2VSZ2JTdHJpbmcoKSksXCJoZXhcIiE9PXQmJlwiaGV4NlwiIT09dHx8KHI9dGhpcy50b0hleFN0cmluZygpKSxcImhleDNcIj09PXQmJihyPXRoaXMudG9IZXhTdHJpbmcoITApKSxcImhleDRcIj09PXQmJihyPXRoaXMudG9IZXg4U3RyaW5nKCEwKSksXCJoZXg4XCI9PT10JiYocj10aGlzLnRvSGV4OFN0cmluZygpKSxcIm5hbWVcIj09PXQmJihyPXRoaXMudG9OYW1lKCkpLFwiaHNsXCI9PT10JiYocj10aGlzLnRvSHNsU3RyaW5nKCkpLFwiaHN2XCI9PT10JiYocj10aGlzLnRvSHN2U3RyaW5nKCkpLHJ8fHRoaXMudG9IZXhTdHJpbmcoKSk6XCJuYW1lXCI9PT10JiYwPT09dGhpcy5fYT90aGlzLnRvTmFtZSgpOnRoaXMudG9SZ2JTdHJpbmcoKX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gYyh0aGlzLnRvU3RyaW5nKCkpfSxfYXBwbHlNb2RpZmljYXRpb246ZnVuY3Rpb24odCxlKXt2YXIgcj10LmFwcGx5KG51bGwsW3RoaXNdLmNvbmNhdChbXS5zbGljZS5jYWxsKGUpKSk7cmV0dXJuIHRoaXMuX3I9ci5fcix0aGlzLl9nPXIuX2csdGhpcy5fYj1yLl9iLHRoaXMuc2V0QWxwaGEoci5fYSksdGhpc30sbGlnaHRlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihtLGFyZ3VtZW50cyl9LGJyaWdodGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHksYXJndW1lbnRzKX0sZGFya2VuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHgsYXJndW1lbnRzKX0sZGVzYXR1cmF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihkLGFyZ3VtZW50cyl9LHNhdHVyYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGcsYXJndW1lbnRzKX0sZ3JleXNjYWxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHYsYXJndW1lbnRzKX0sc3BpbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihiLGFyZ3VtZW50cyl9LF9hcHBseUNvbWJpbmF0aW9uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuYXBwbHkobnVsbCxbdGhpc10uY29uY2F0KFtdLnNsaWNlLmNhbGwoZSkpKX0sYW5hbG9nb3VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oVCxhcmd1bWVudHMpfSxjb21wbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oXyxhcmd1bWVudHMpfSxtb25vY2hyb21hdGljOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oTSxhcmd1bWVudHMpfSxzcGxpdGNvbXBsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihBLGFyZ3VtZW50cyl9LHRyaWFkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24odyxhcmd1bWVudHMpfSx0ZXRyYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihrLGFyZ3VtZW50cyl9fSxjLmZyb21SYXRpbz1mdW5jdGlvbih0LGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KXt2YXIgcj17fTtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYocltuXT1cImFcIj09PW4/dFtuXTpEKHRbbl0pKTt0PXJ9cmV0dXJuIGModCxlKX0sYy5lcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4hKCF0fHwhZSkmJmModCkudG9SZ2JTdHJpbmcoKT09YyhlKS50b1JnYlN0cmluZygpfSxjLnJhbmRvbT1mdW5jdGlvbigpe3JldHVybiBjLmZyb21SYXRpbyh7cjpsKCksZzpsKCksYjpsKCl9KX0sYy5taXg9ZnVuY3Rpb24odCxlLHIpe3I9MD09PXI/MDpyfHw1MDt2YXIgbj1jKHQpLnRvUmdiKCksaT1jKGUpLnRvUmdiKCksYT1yLzEwMDtyZXR1cm4gYyh7cjooaS5yLW4ucikqYStuLnIsZzooaS5nLW4uZykqYStuLmcsYjooaS5iLW4uYikqYStuLmIsYTooaS5hLW4uYSkqYStuLmF9KX0sYy5yZWFkYWJpbGl0eT1mdW5jdGlvbihlLHIpe3ZhciBuPWMoZSksaT1jKHIpO3JldHVybih0Lm1heChuLmdldEx1bWluYW5jZSgpLGkuZ2V0THVtaW5hbmNlKCkpKy4wNSkvKHQubWluKG4uZ2V0THVtaW5hbmNlKCksaS5nZXRMdW1pbmFuY2UoKSkrLjA1KX0sYy5pc1JlYWRhYmxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9Yy5yZWFkYWJpbGl0eSh0LGUpO3N3aXRjaChpPSExLChuPWZ1bmN0aW9uKHQpe3ZhciBlLHI7ZT0oKHQ9dHx8e2xldmVsOlwiQUFcIixzaXplOlwic21hbGxcIn0pLmxldmVsfHxcIkFBXCIpLnRvVXBwZXJDYXNlKCkscj0odC5zaXplfHxcInNtYWxsXCIpLnRvTG93ZXJDYXNlKCksXCJBQVwiIT09ZSYmXCJBQUFcIiE9PWUmJihlPVwiQUFcIik7XCJzbWFsbFwiIT09ciYmXCJsYXJnZVwiIT09ciYmKHI9XCJzbWFsbFwiKTtyZXR1cm57bGV2ZWw6ZSxzaXplOnJ9fShyKSkubGV2ZWwrbi5zaXplKXtjYXNlXCJBQXNtYWxsXCI6Y2FzZVwiQUFBbGFyZ2VcIjppPWE+PTQuNTticmVhaztjYXNlXCJBQWxhcmdlXCI6aT1hPj0zO2JyZWFrO2Nhc2VcIkFBQXNtYWxsXCI6aT1hPj03fXJldHVybiBpfSxjLm1vc3RSZWFkYWJsZT1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scz1udWxsLGw9MDtpPShyPXJ8fHt9KS5pbmNsdWRlRmFsbGJhY2tDb2xvcnMsYT1yLmxldmVsLG89ci5zaXplO2Zvcih2YXIgdT0wO3U8ZS5sZW5ndGg7dSsrKShuPWMucmVhZGFiaWxpdHkodCxlW3VdKSk+bCYmKGw9bixzPWMoZVt1XSkpO3JldHVybiBjLmlzUmVhZGFibGUodCxzLHtsZXZlbDphLHNpemU6b30pfHwhaT9zOihyLmluY2x1ZGVGYWxsYmFja0NvbG9ycz0hMSxjLm1vc3RSZWFkYWJsZSh0LFtcIiNmZmZcIixcIiMwMDBcIl0scikpfTt2YXIgUz1jLm5hbWVzPXthbGljZWJsdWU6XCJmMGY4ZmZcIixhbnRpcXVld2hpdGU6XCJmYWViZDdcIixhcXVhOlwiMGZmXCIsYXF1YW1hcmluZTpcIjdmZmZkNFwiLGF6dXJlOlwiZjBmZmZmXCIsYmVpZ2U6XCJmNWY1ZGNcIixiaXNxdWU6XCJmZmU0YzRcIixibGFjazpcIjAwMFwiLGJsYW5jaGVkYWxtb25kOlwiZmZlYmNkXCIsYmx1ZTpcIjAwZlwiLGJsdWV2aW9sZXQ6XCI4YTJiZTJcIixicm93bjpcImE1MmEyYVwiLGJ1cmx5d29vZDpcImRlYjg4N1wiLGJ1cm50c2llbm5hOlwiZWE3ZTVkXCIsY2FkZXRibHVlOlwiNWY5ZWEwXCIsY2hhcnRyZXVzZTpcIjdmZmYwMFwiLGNob2NvbGF0ZTpcImQyNjkxZVwiLGNvcmFsOlwiZmY3ZjUwXCIsY29ybmZsb3dlcmJsdWU6XCI2NDk1ZWRcIixjb3Juc2lsazpcImZmZjhkY1wiLGNyaW1zb246XCJkYzE0M2NcIixjeWFuOlwiMGZmXCIsZGFya2JsdWU6XCIwMDAwOGJcIixkYXJrY3lhbjpcIjAwOGI4YlwiLGRhcmtnb2xkZW5yb2Q6XCJiODg2MGJcIixkYXJrZ3JheTpcImE5YTlhOVwiLGRhcmtncmVlbjpcIjAwNjQwMFwiLGRhcmtncmV5OlwiYTlhOWE5XCIsZGFya2toYWtpOlwiYmRiNzZiXCIsZGFya21hZ2VudGE6XCI4YjAwOGJcIixkYXJrb2xpdmVncmVlbjpcIjU1NmIyZlwiLGRhcmtvcmFuZ2U6XCJmZjhjMDBcIixkYXJrb3JjaGlkOlwiOTkzMmNjXCIsZGFya3JlZDpcIjhiMDAwMFwiLGRhcmtzYWxtb246XCJlOTk2N2FcIixkYXJrc2VhZ3JlZW46XCI4ZmJjOGZcIixkYXJrc2xhdGVibHVlOlwiNDgzZDhiXCIsZGFya3NsYXRlZ3JheTpcIjJmNGY0ZlwiLGRhcmtzbGF0ZWdyZXk6XCIyZjRmNGZcIixkYXJrdHVycXVvaXNlOlwiMDBjZWQxXCIsZGFya3Zpb2xldDpcIjk0MDBkM1wiLGRlZXBwaW5rOlwiZmYxNDkzXCIsZGVlcHNreWJsdWU6XCIwMGJmZmZcIixkaW1ncmF5OlwiNjk2OTY5XCIsZGltZ3JleTpcIjY5Njk2OVwiLGRvZGdlcmJsdWU6XCIxZTkwZmZcIixmaXJlYnJpY2s6XCJiMjIyMjJcIixmbG9yYWx3aGl0ZTpcImZmZmFmMFwiLGZvcmVzdGdyZWVuOlwiMjI4YjIyXCIsZnVjaHNpYTpcImYwZlwiLGdhaW5zYm9ybzpcImRjZGNkY1wiLGdob3N0d2hpdGU6XCJmOGY4ZmZcIixnb2xkOlwiZmZkNzAwXCIsZ29sZGVucm9kOlwiZGFhNTIwXCIsZ3JheTpcIjgwODA4MFwiLGdyZWVuOlwiMDA4MDAwXCIsZ3JlZW55ZWxsb3c6XCJhZGZmMmZcIixncmV5OlwiODA4MDgwXCIsaG9uZXlkZXc6XCJmMGZmZjBcIixob3RwaW5rOlwiZmY2OWI0XCIsaW5kaWFucmVkOlwiY2Q1YzVjXCIsaW5kaWdvOlwiNGIwMDgyXCIsaXZvcnk6XCJmZmZmZjBcIixraGFraTpcImYwZTY4Y1wiLGxhdmVuZGVyOlwiZTZlNmZhXCIsbGF2ZW5kZXJibHVzaDpcImZmZjBmNVwiLGxhd25ncmVlbjpcIjdjZmMwMFwiLGxlbW9uY2hpZmZvbjpcImZmZmFjZFwiLGxpZ2h0Ymx1ZTpcImFkZDhlNlwiLGxpZ2h0Y29yYWw6XCJmMDgwODBcIixsaWdodGN5YW46XCJlMGZmZmZcIixsaWdodGdvbGRlbnJvZHllbGxvdzpcImZhZmFkMlwiLGxpZ2h0Z3JheTpcImQzZDNkM1wiLGxpZ2h0Z3JlZW46XCI5MGVlOTBcIixsaWdodGdyZXk6XCJkM2QzZDNcIixsaWdodHBpbms6XCJmZmI2YzFcIixsaWdodHNhbG1vbjpcImZmYTA3YVwiLGxpZ2h0c2VhZ3JlZW46XCIyMGIyYWFcIixsaWdodHNreWJsdWU6XCI4N2NlZmFcIixsaWdodHNsYXRlZ3JheTpcIjc4OVwiLGxpZ2h0c2xhdGVncmV5OlwiNzg5XCIsbGlnaHRzdGVlbGJsdWU6XCJiMGM0ZGVcIixsaWdodHllbGxvdzpcImZmZmZlMFwiLGxpbWU6XCIwZjBcIixsaW1lZ3JlZW46XCIzMmNkMzJcIixsaW5lbjpcImZhZjBlNlwiLG1hZ2VudGE6XCJmMGZcIixtYXJvb246XCI4MDAwMDBcIixtZWRpdW1hcXVhbWFyaW5lOlwiNjZjZGFhXCIsbWVkaXVtYmx1ZTpcIjAwMDBjZFwiLG1lZGl1bW9yY2hpZDpcImJhNTVkM1wiLG1lZGl1bXB1cnBsZTpcIjkzNzBkYlwiLG1lZGl1bXNlYWdyZWVuOlwiM2NiMzcxXCIsbWVkaXVtc2xhdGVibHVlOlwiN2I2OGVlXCIsbWVkaXVtc3ByaW5nZ3JlZW46XCIwMGZhOWFcIixtZWRpdW10dXJxdW9pc2U6XCI0OGQxY2NcIixtZWRpdW12aW9sZXRyZWQ6XCJjNzE1ODVcIixtaWRuaWdodGJsdWU6XCIxOTE5NzBcIixtaW50Y3JlYW06XCJmNWZmZmFcIixtaXN0eXJvc2U6XCJmZmU0ZTFcIixtb2NjYXNpbjpcImZmZTRiNVwiLG5hdmFqb3doaXRlOlwiZmZkZWFkXCIsbmF2eTpcIjAwMDA4MFwiLG9sZGxhY2U6XCJmZGY1ZTZcIixvbGl2ZTpcIjgwODAwMFwiLG9saXZlZHJhYjpcIjZiOGUyM1wiLG9yYW5nZTpcImZmYTUwMFwiLG9yYW5nZXJlZDpcImZmNDUwMFwiLG9yY2hpZDpcImRhNzBkNlwiLHBhbGVnb2xkZW5yb2Q6XCJlZWU4YWFcIixwYWxlZ3JlZW46XCI5OGZiOThcIixwYWxldHVycXVvaXNlOlwiYWZlZWVlXCIscGFsZXZpb2xldHJlZDpcImRiNzA5M1wiLHBhcGF5YXdoaXA6XCJmZmVmZDVcIixwZWFjaHB1ZmY6XCJmZmRhYjlcIixwZXJ1OlwiY2Q4NTNmXCIscGluazpcImZmYzBjYlwiLHBsdW06XCJkZGEwZGRcIixwb3dkZXJibHVlOlwiYjBlMGU2XCIscHVycGxlOlwiODAwMDgwXCIscmViZWNjYXB1cnBsZTpcIjY2MzM5OVwiLHJlZDpcImYwMFwiLHJvc3licm93bjpcImJjOGY4ZlwiLHJveWFsYmx1ZTpcIjQxNjllMVwiLHNhZGRsZWJyb3duOlwiOGI0NTEzXCIsc2FsbW9uOlwiZmE4MDcyXCIsc2FuZHlicm93bjpcImY0YTQ2MFwiLHNlYWdyZWVuOlwiMmU4YjU3XCIsc2Vhc2hlbGw6XCJmZmY1ZWVcIixzaWVubmE6XCJhMDUyMmRcIixzaWx2ZXI6XCJjMGMwYzBcIixza3libHVlOlwiODdjZWViXCIsc2xhdGVibHVlOlwiNmE1YWNkXCIsc2xhdGVncmF5OlwiNzA4MDkwXCIsc2xhdGVncmV5OlwiNzA4MDkwXCIsc25vdzpcImZmZmFmYVwiLHNwcmluZ2dyZWVuOlwiMDBmZjdmXCIsc3RlZWxibHVlOlwiNDY4MmI0XCIsdGFuOlwiZDJiNDhjXCIsdGVhbDpcIjAwODA4MFwiLHRoaXN0bGU6XCJkOGJmZDhcIix0b21hdG86XCJmZjYzNDdcIix0dXJxdW9pc2U6XCI0MGUwZDBcIix2aW9sZXQ6XCJlZTgyZWVcIix3aGVhdDpcImY1ZGViM1wiLHdoaXRlOlwiZmZmXCIsd2hpdGVzbW9rZTpcImY1ZjVmNVwiLHllbGxvdzpcImZmMFwiLHllbGxvd2dyZWVuOlwiOWFjZDMyXCJ9LEU9Yy5oZXhOYW1lcz1mdW5jdGlvbih0KXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdCl0Lmhhc093blByb3BlcnR5KHIpJiYoZVt0W3JdXT1yKTtyZXR1cm4gZX0oUyk7ZnVuY3Rpb24gQyh0KXtyZXR1cm4gdD1wYXJzZUZsb2F0KHQpLChpc05hTih0KXx8dDwwfHx0PjEpJiYodD0xKSx0fWZ1bmN0aW9uIEwoZSxyKXsoZnVuY3Rpb24odCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQmJi0xIT10LmluZGV4T2YoXCIuXCIpJiYxPT09cGFyc2VGbG9hdCh0KX0pKGUpJiYoZT1cIjEwMCVcIik7dmFyIG49ZnVuY3Rpb24odCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQmJi0xIT10LmluZGV4T2YoXCIlXCIpfShlKTtyZXR1cm4gZT1vKHIscygwLHBhcnNlRmxvYXQoZSkpKSxuJiYoZT1wYXJzZUludChlKnIsMTApLzEwMCksdC5hYnMoZS1yKTwxZS02PzE6ZSVyL3BhcnNlRmxvYXQocil9ZnVuY3Rpb24geih0KXtyZXR1cm4gbygxLHMoMCx0KSl9ZnVuY3Rpb24gTyh0KXtyZXR1cm4gcGFyc2VJbnQodCwxNil9ZnVuY3Rpb24gSSh0KXtyZXR1cm4gMT09dC5sZW5ndGg/XCIwXCIrdDpcIlwiK3R9ZnVuY3Rpb24gRCh0KXtyZXR1cm4gdDw9MSYmKHQ9MTAwKnQrXCIlXCIpLHR9ZnVuY3Rpb24gUChlKXtyZXR1cm4gdC5yb3VuZCgyNTUqcGFyc2VGbG9hdChlKSkudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFIodCl7cmV0dXJuIE8odCkvMjU1fXZhciBGLEIsTixqPShCPVwiW1xcXFxzfFxcXFwoXSsoXCIrKEY9XCIoPzpbLVxcXFwrXT9cXFxcZCpcXFxcLlxcXFxkKyU/KXwoPzpbLVxcXFwrXT9cXFxcZCslPylcIikrXCIpWyx8XFxcXHNdKyhcIitGK1wiKVssfFxcXFxzXSsoXCIrRitcIilcXFxccypcXFxcKT9cIixOPVwiW1xcXFxzfFxcXFwoXSsoXCIrRitcIilbLHxcXFxcc10rKFwiK0YrXCIpWyx8XFxcXHNdKyhcIitGK1wiKVssfFxcXFxzXSsoXCIrRitcIilcXFxccypcXFxcKT9cIix7Q1NTX1VOSVQ6bmV3IFJlZ0V4cChGKSxyZ2I6bmV3IFJlZ0V4cChcInJnYlwiK0IpLHJnYmE6bmV3IFJlZ0V4cChcInJnYmFcIitOKSxoc2w6bmV3IFJlZ0V4cChcImhzbFwiK0IpLGhzbGE6bmV3IFJlZ0V4cChcImhzbGFcIitOKSxoc3Y6bmV3IFJlZ0V4cChcImhzdlwiK0IpLGhzdmE6bmV3IFJlZ0V4cChcImhzdmFcIitOKSxoZXgzOi9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkkLyxoZXg2Oi9eIz8oWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkkLyxoZXg0Oi9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8saGV4ODovXiM/KFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KSQvfSk7ZnVuY3Rpb24gVih0KXtyZXR1cm4hIWouQ1NTX1VOSVQuZXhlYyh0KX1cInVuZGVmaW5lZFwiIT10eXBlb2YgZSYmZS5leHBvcnRzP2UuZXhwb3J0cz1jOndpbmRvdy50aW55Y29sb3I9Y30oTWF0aCl9LHt9XSw1MjM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9aSxlLmV4cG9ydHMuZmxvYXQzMj1lLmV4cG9ydHMuZmxvYXQ9aSxlLmV4cG9ydHMuZnJhY3QzMj1lLmV4cG9ydHMuZnJhY3Q9ZnVuY3Rpb24odCl7aWYodC5sZW5ndGgpe2Zvcih2YXIgZT1pKHQpLHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspZVtyXT10W3JdLWVbcl07cmV0dXJuIGV9cmV0dXJuIGkodC1pKHQpKX07dmFyIG49bmV3IEZsb2F0MzJBcnJheSgxKTtmdW5jdGlvbiBpKHQpe2lmKHQubGVuZ3RoKXtpZih0IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KXJldHVybiB0O3ZhciBlPW5ldyBGbG9hdDMyQXJyYXkodCk7cmV0dXJuIGUuc2V0KHQpLGV9cmV0dXJuIG5bMF09dCxuWzBdfX0se31dLDUyNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJwYXJzZS11bml0XCIpO2UuZXhwb3J0cz1vO3ZhciBpPTk2O2Z1bmN0aW9uIGEodCxlKXt2YXIgcj1uKGdldENvbXB1dGVkU3R5bGUodCkuZ2V0UHJvcGVydHlWYWx1ZShlKSk7cmV0dXJuIHJbMF0qbyhyWzFdLHQpfWZ1bmN0aW9uIG8odCxlKXtzd2l0Y2goZT1lfHxkb2N1bWVudC5ib2R5LHQ9KHR8fFwicHhcIikudHJpbSgpLnRvTG93ZXJDYXNlKCksZSE9PXdpbmRvdyYmZSE9PWRvY3VtZW50fHwoZT1kb2N1bWVudC5ib2R5KSx0KXtjYXNlXCIlXCI6cmV0dXJuIGUuY2xpZW50SGVpZ2h0LzEwMDtjYXNlXCJjaFwiOmNhc2VcImV4XCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtyLnN0eWxlW1wiZm9udC1zaXplXCJdPVwiMTI4XCIrdCxlLmFwcGVuZENoaWxkKHIpO3ZhciBuPWEocixcImZvbnQtc2l6ZVwiKS8xMjg7cmV0dXJuIGUucmVtb3ZlQ2hpbGQociksbn0odCxlKTtjYXNlXCJlbVwiOnJldHVybiBhKGUsXCJmb250LXNpemVcIik7Y2FzZVwicmVtXCI6cmV0dXJuIGEoZG9jdW1lbnQuYm9keSxcImZvbnQtc2l6ZVwiKTtjYXNlXCJ2d1wiOnJldHVybiB3aW5kb3cuaW5uZXJXaWR0aC8xMDA7Y2FzZVwidmhcIjpyZXR1cm4gd2luZG93LmlubmVySGVpZ2h0LzEwMDtjYXNlXCJ2bWluXCI6cmV0dXJuIE1hdGgubWluKHdpbmRvdy5pbm5lcldpZHRoLHdpbmRvdy5pbm5lckhlaWdodCkvMTAwO2Nhc2VcInZtYXhcIjpyZXR1cm4gTWF0aC5tYXgod2luZG93LmlubmVyV2lkdGgsd2luZG93LmlubmVySGVpZ2h0KS8xMDA7Y2FzZVwiaW5cIjpyZXR1cm4gaTtjYXNlXCJjbVwiOnJldHVybiBpLzIuNTQ7Y2FzZVwibW1cIjpyZXR1cm4gaS8yNS40O2Nhc2VcInB0XCI6cmV0dXJuIGkvNzI7Y2FzZVwicGNcIjpyZXR1cm4gaS82fXJldHVybiAxfX0se1wicGFyc2UtdW5pdFwiOjQ1NH1dLDUyNTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuO249dGhpcyxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjt2YXIgZT1mdW5jdGlvbih0KXtyZXR1cm4gdH0scj1mdW5jdGlvbih0KXtpZihudWxsPT0ocj10LnRyYW5zZm9ybSkpcmV0dXJuIGU7dmFyIHIsbixpLGE9ci5zY2FsZVswXSxvPXIuc2NhbGVbMV0scz1yLnRyYW5zbGF0ZVswXSxsPXIudHJhbnNsYXRlWzFdO3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBlfHwobj1pPTApLHRbMF09KG4rPXRbMF0pKmErcyx0WzFdPShpKz10WzFdKSpvK2wsdH19LG49ZnVuY3Rpb24odCl7dmFyIGU9dC5iYm94O2Z1bmN0aW9uIG4odCl7bFswXT10WzBdLGxbMV09dFsxXSxzKGwpLGxbMF08YyYmKGM9bFswXSksbFswXT5oJiYoaD1sWzBdKSxsWzFdPHUmJih1PWxbMV0pLGxbMV0+ZiYmKGY9bFsxXSl9ZnVuY3Rpb24gaSh0KXtzd2l0Y2godC50eXBlKXtjYXNlXCJHZW9tZXRyeUNvbGxlY3Rpb25cIjp0Lmdlb21ldHJpZXMuZm9yRWFjaChpKTticmVhaztjYXNlXCJQb2ludFwiOm4odC5jb29yZGluYXRlcyk7YnJlYWs7Y2FzZVwiTXVsdGlQb2ludFwiOnQuY29vcmRpbmF0ZXMuZm9yRWFjaChuKX19aWYoIWUpe3ZhciBhLG8scz1yKHQpLGw9bmV3IEFycmF5KDIpLGM9MS8wLHU9YyxoPS1jLGY9LWM7Zm9yKG8gaW4gdC5hcmNzLmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciBlPS0xLHI9dC5sZW5ndGg7KytlPHI7KWE9dFtlXSxsWzBdPWFbMF0sbFsxXT1hWzFdLHMobCxlKSxsWzBdPGMmJihjPWxbMF0pLGxbMF0+aCYmKGg9bFswXSksbFsxXTx1JiYodT1sWzFdKSxsWzFdPmYmJihmPWxbMV0pfSksdC5vYmplY3RzKWkodC5vYmplY3RzW29dKTtlPXQuYmJveD1bYyx1LGgsZl19cmV0dXJuIGV9LGk9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj10Lmxlbmd0aCxpPW4tZTtpPC0tbjspcj10W2ldLHRbaSsrXT10W25dLHRbbl09cn07ZnVuY3Rpb24gYSh0LGUpe3ZhciByPWUuaWQsbj1lLmJib3gsaT1udWxsPT1lLnByb3BlcnRpZXM/e306ZS5wcm9wZXJ0aWVzLGE9byh0LGUpO3JldHVybiBudWxsPT1yJiZudWxsPT1uP3t0eXBlOlwiRmVhdHVyZVwiLHByb3BlcnRpZXM6aSxnZW9tZXRyeTphfTpudWxsPT1uP3t0eXBlOlwiRmVhdHVyZVwiLGlkOnIscHJvcGVydGllczppLGdlb21ldHJ5OmF9Ont0eXBlOlwiRmVhdHVyZVwiLGlkOnIsYmJveDpuLHByb3BlcnRpZXM6aSxnZW9tZXRyeTphfX1mdW5jdGlvbiBvKHQsZSl7dmFyIG49cih0KSxhPXQuYXJjcztmdW5jdGlvbiBvKHQsZSl7ZS5sZW5ndGgmJmUucG9wKCk7Zm9yKHZhciByPWFbdDwwP350OnRdLG89MCxzPXIubGVuZ3RoO288czsrK28pZS5wdXNoKG4ocltvXS5zbGljZSgpLG8pKTt0PDAmJmkoZSxzKX1mdW5jdGlvbiBzKHQpe3JldHVybiBuKHQuc2xpY2UoKSl9ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilvKHRbcl0sZSk7cmV0dXJuIGUubGVuZ3RoPDImJmUucHVzaChlWzBdLnNsaWNlKCkpLGV9ZnVuY3Rpb24gYyh0KXtmb3IodmFyIGU9bCh0KTtlLmxlbmd0aDw0OyllLnB1c2goZVswXS5zbGljZSgpKTtyZXR1cm4gZX1mdW5jdGlvbiB1KHQpe3JldHVybiB0Lm1hcChjKX1yZXR1cm4gZnVuY3Rpb24gdChlKXt2YXIgcixuPWUudHlwZTtzd2l0Y2gobil7Y2FzZVwiR2VvbWV0cnlDb2xsZWN0aW9uXCI6cmV0dXJue3R5cGU6bixnZW9tZXRyaWVzOmUuZ2VvbWV0cmllcy5tYXAodCl9O2Nhc2VcIlBvaW50XCI6cj1zKGUuY29vcmRpbmF0ZXMpO2JyZWFrO2Nhc2VcIk11bHRpUG9pbnRcIjpyPWUuY29vcmRpbmF0ZXMubWFwKHMpO2JyZWFrO2Nhc2VcIkxpbmVTdHJpbmdcIjpyPWwoZS5hcmNzKTticmVhaztjYXNlXCJNdWx0aUxpbmVTdHJpbmdcIjpyPWUuYXJjcy5tYXAobCk7YnJlYWs7Y2FzZVwiUG9seWdvblwiOnI9dShlLmFyY3MpO2JyZWFrO2Nhc2VcIk11bHRpUG9seWdvblwiOnI9ZS5hcmNzLm1hcCh1KTticmVhaztkZWZhdWx0OnJldHVybiBudWxsfXJldHVybnt0eXBlOm4sY29vcmRpbmF0ZXM6cn19KGUpfXZhciBzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e30sbj17fSxpPXt9LGE9W10sbz0tMTtmdW5jdGlvbiBzKHQsZSl7Zm9yKHZhciBuIGluIHQpe3ZhciBpPXRbbl07ZGVsZXRlIGVbaS5zdGFydF0sZGVsZXRlIGkuc3RhcnQsZGVsZXRlIGkuZW5kLGkuZm9yRWFjaChmdW5jdGlvbih0KXtyW3Q8MD9+dDp0XT0xfSksYS5wdXNoKGkpfX1yZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKHIsbil7dmFyIGksYT10LmFyY3NbcjwwP35yOnJdO2EubGVuZ3RoPDMmJiFhWzFdWzBdJiYhYVsxXVsxXSYmKGk9ZVsrK29dLGVbb109cixlW25dPWkpfSksZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByLGEsbz1mdW5jdGlvbihlKXt2YXIgcixuPXQuYXJjc1tlPDA/fmU6ZV0saT1uWzBdO3QudHJhbnNmb3JtPyhyPVswLDBdLG4uZm9yRWFjaChmdW5jdGlvbih0KXtyWzBdKz10WzBdLHJbMV0rPXRbMV19KSk6cj1uW24ubGVuZ3RoLTFdO3JldHVybiBlPDA/W3IsaV06W2kscl19KGUpLHM9b1swXSxsPW9bMV07aWYocj1pW3NdKWlmKGRlbGV0ZSBpW3IuZW5kXSxyLnB1c2goZSksci5lbmQ9bCxhPW5bbF0pe2RlbGV0ZSBuW2Euc3RhcnRdO3ZhciBjPWE9PT1yP3I6ci5jb25jYXQoYSk7bltjLnN0YXJ0PXIuc3RhcnRdPWlbYy5lbmQ9YS5lbmRdPWN9ZWxzZSBuW3Iuc3RhcnRdPWlbci5lbmRdPXI7ZWxzZSBpZihyPW5bbF0paWYoZGVsZXRlIG5bci5zdGFydF0sci51bnNoaWZ0KGUpLHIuc3RhcnQ9cyxhPWlbc10pe2RlbGV0ZSBpW2EuZW5kXTt2YXIgdT1hPT09cj9yOmEuY29uY2F0KHIpO25bdS5zdGFydD1hLnN0YXJ0XT1pW3UuZW5kPXIuZW5kXT11fWVsc2UgbltyLnN0YXJ0XT1pW3IuZW5kXT1yO2Vsc2Ugblsocj1bZV0pLnN0YXJ0PXNdPWlbci5lbmQ9bF09cn0pLHMoaSxuKSxzKG4saSksZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JbdDwwP350OnRdfHxhLnB1c2goW3RdKX0pLGF9O2Z1bmN0aW9uIGwodCxlLHIpe3ZhciBuLGksYTtpZihhcmd1bWVudHMubGVuZ3RoPjEpbj1mdW5jdGlvbih0LGUscil7dmFyIG4saT1bXSxhPVtdO2Z1bmN0aW9uIG8odCl7dmFyIGU9dDwwP350OnQ7KGFbZV18fChhW2VdPVtdKSkucHVzaCh7aTp0LGc6bn0pfWZ1bmN0aW9uIHModCl7dC5mb3JFYWNoKG8pfWZ1bmN0aW9uIGwodCl7dC5mb3JFYWNoKHMpfXJldHVybiBmdW5jdGlvbiB0KGUpe3N3aXRjaChuPWUsZS50eXBlKXtjYXNlXCJHZW9tZXRyeUNvbGxlY3Rpb25cIjplLmdlb21ldHJpZXMuZm9yRWFjaCh0KTticmVhaztjYXNlXCJMaW5lU3RyaW5nXCI6cyhlLmFyY3MpO2JyZWFrO2Nhc2VcIk11bHRpTGluZVN0cmluZ1wiOmNhc2VcIlBvbHlnb25cIjpsKGUuYXJjcyk7YnJlYWs7Y2FzZVwiTXVsdGlQb2x5Z29uXCI6ZS5hcmNzLmZvckVhY2gobCl9fShlKSxhLmZvckVhY2gobnVsbD09cj9mdW5jdGlvbih0KXtpLnB1c2godFswXS5pKX06ZnVuY3Rpb24odCl7cih0WzBdLmcsdFt0Lmxlbmd0aC0xXS5nKSYmaS5wdXNoKHRbMF0uaSl9KSxpfSgwLGUscik7ZWxzZSBmb3IoaT0wLG49bmV3IEFycmF5KGE9dC5hcmNzLmxlbmd0aCk7aTxhOysraSluW2ldPWk7cmV0dXJue3R5cGU6XCJNdWx0aUxpbmVTdHJpbmdcIixhcmNzOnModCxuKX19ZnVuY3Rpb24gYyh0LGUpe3ZhciByPXt9LG49W10saT1bXTtmdW5jdGlvbiBhKHQpe3QuZm9yRWFjaChmdW5jdGlvbihlKXtlLmZvckVhY2goZnVuY3Rpb24oZSl7KHJbZT1lPDA/fmU6ZV18fChyW2VdPVtdKSkucHVzaCh0KX0pfSksbi5wdXNoKHQpfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPS0xLG49dC5sZW5ndGgsaT10W24tMV0sYT0wOysrcjxuOyllPWksaT10W3JdLGErPWVbMF0qaVsxXS1lWzFdKmlbMF07cmV0dXJuIE1hdGguYWJzKGEpfShvKHQse3R5cGU6XCJQb2x5Z29uXCIsYXJjczpbZV19KS5jb29yZGluYXRlc1swXSl9cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbiB0KGUpe3N3aXRjaChlLnR5cGUpe2Nhc2VcIkdlb21ldHJ5Q29sbGVjdGlvblwiOmUuZ2VvbWV0cmllcy5mb3JFYWNoKHQpO2JyZWFrO2Nhc2VcIlBvbHlnb25cIjphKGUuYXJjcyk7YnJlYWs7Y2FzZVwiTXVsdGlQb2x5Z29uXCI6ZS5hcmNzLmZvckVhY2goYSl9fSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCF0Ll8pe3ZhciBlPVtdLG49W3RdO2Zvcih0Ll89MSxpLnB1c2goZSk7dD1uLnBvcCgpOyllLnB1c2godCksdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaChmdW5jdGlvbih0KXtyW3Q8MD9+dDp0XS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuX3x8KHQuXz0xLG4ucHVzaCh0KSl9KX0pfSl9fSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2RlbGV0ZSB0Ll99KSx7dHlwZTpcIk11bHRpUG9seWdvblwiLGFyY3M6aS5tYXAoZnVuY3Rpb24oZSl7dmFyIG4saT1bXTtpZihlLmZvckVhY2goZnVuY3Rpb24odCl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaChmdW5jdGlvbih0KXtyW3Q8MD9+dDp0XS5sZW5ndGg8MiYmaS5wdXNoKHQpfSl9KX0pLChuPShpPXModCxpKSkubGVuZ3RoKT4xKWZvcih2YXIgYSxvLGM9MSx1PWwoaVswXSk7YzxuOysrYykoYT1sKGlbY10pKT51JiYobz1pWzBdLGlbMF09aVtjXSxpW2NdPW8sdT1hKTtyZXR1cm4gaX0pfX12YXIgdT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuOyl7dmFyIGk9cituPj4+MTt0W2ldPGU/cj1pKzE6bj1pfXJldHVybiByfTt0LmJib3g9bix0LmZlYXR1cmU9ZnVuY3Rpb24odCxlKXtyZXR1cm5cIkdlb21ldHJ5Q29sbGVjdGlvblwiPT09ZS50eXBlP3t0eXBlOlwiRmVhdHVyZUNvbGxlY3Rpb25cIixmZWF0dXJlczplLmdlb21ldHJpZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBhKHQsZSl9KX06YSh0LGUpfSx0Lm1lc2g9ZnVuY3Rpb24odCl7cmV0dXJuIG8odCxsLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LHQubWVzaEFyY3M9bCx0Lm1lcmdlPWZ1bmN0aW9uKHQpe3JldHVybiBvKHQsYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSx0Lm1lcmdlQXJjcz1jLHQubmVpZ2hib3JzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LHI9dC5tYXAoZnVuY3Rpb24oKXtyZXR1cm5bXX0pO2Z1bmN0aW9uIG4odCxyKXt0LmZvckVhY2goZnVuY3Rpb24odCl7dDwwJiYodD1+dCk7dmFyIG49ZVt0XTtuP24ucHVzaChyKTplW3RdPVtyXX0pfWZ1bmN0aW9uIGkodCxlKXt0LmZvckVhY2goZnVuY3Rpb24odCl7bih0LGUpfSl9dmFyIGE9e0xpbmVTdHJpbmc6bixNdWx0aUxpbmVTdHJpbmc6aSxQb2x5Z29uOmksTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2kodCxlKX0pfX07Zm9yKHZhciBvIGluIHQuZm9yRWFjaChmdW5jdGlvbiB0KGUscil7XCJHZW9tZXRyeUNvbGxlY3Rpb25cIj09PWUudHlwZT9lLmdlb21ldHJpZXMuZm9yRWFjaChmdW5jdGlvbihlKXt0KGUscil9KTplLnR5cGUgaW4gYSYmYVtlLnR5cGVdKGUuYXJjcyxyKX0pLGUpZm9yKHZhciBzPWVbb10sbD1zLmxlbmd0aCxjPTA7YzxsOysrYylmb3IodmFyIGg9YysxO2g8bDsrK2gpe3ZhciBmLHA9c1tjXSxkPXNbaF07KGY9cltwXSlbbz11KGYsZCldIT09ZCYmZi5zcGxpY2UobywwLGQpLChmPXJbZF0pW289dShmLHApXSE9PXAmJmYuc3BsaWNlKG8sMCxwKX1yZXR1cm4gcn0sdC5xdWFudGl6ZT1mdW5jdGlvbih0LGUpe2lmKCEoKGU9TWF0aC5mbG9vcihlKSk+PTIpKXRocm93IG5ldyBFcnJvcihcIm4gbXVzdCBiZSBcXHUyMjY1MlwiKTtpZih0LnRyYW5zZm9ybSl0aHJvdyBuZXcgRXJyb3IoXCJhbHJlYWR5IHF1YW50aXplZFwiKTt2YXIgcixpPW4odCksYT1pWzBdLG89KGlbMl0tYSkvKGUtMSl8fDEscz1pWzFdLGw9KGlbM10tcykvKGUtMSl8fDE7ZnVuY3Rpb24gYyh0KXt0WzBdPU1hdGgucm91bmQoKHRbMF0tYSkvbyksdFsxXT1NYXRoLnJvdW5kKCh0WzFdLXMpL2wpfWZ1bmN0aW9uIHUodCl7c3dpdGNoKHQudHlwZSl7Y2FzZVwiR2VvbWV0cnlDb2xsZWN0aW9uXCI6dC5nZW9tZXRyaWVzLmZvckVhY2godSk7YnJlYWs7Y2FzZVwiUG9pbnRcIjpjKHQuY29vcmRpbmF0ZXMpO2JyZWFrO2Nhc2VcIk11bHRpUG9pbnRcIjp0LmNvb3JkaW5hdGVzLmZvckVhY2goYyl9fWZvcihyIGluIHQuYXJjcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saT0xLGM9MSx1PXQubGVuZ3RoLGg9dFswXSxmPWhbMF09TWF0aC5yb3VuZCgoaFswXS1hKS9vKSxwPWhbMV09TWF0aC5yb3VuZCgoaFsxXS1zKS9sKTtpPHU7KytpKWg9dFtpXSxyPU1hdGgucm91bmQoKGhbMF0tYSkvbyksbj1NYXRoLnJvdW5kKChoWzFdLXMpL2wpLHI9PT1mJiZuPT09cHx8KChlPXRbYysrXSlbMF09ci1mLGY9cixlWzFdPW4tcCxwPW4pO2M8MiYmKChlPXRbYysrXSlbMF09MCxlWzFdPTApLHQubGVuZ3RoPWN9KSx0Lm9iamVjdHMpdSh0Lm9iamVjdHNbcl0pO3JldHVybiB0LnRyYW5zZm9ybT17c2NhbGU6W28sbF0sdHJhbnNsYXRlOlthLHNdfSx0fSx0LnRyYW5zZm9ybT1yLHQudW50cmFuc2Zvcm09ZnVuY3Rpb24odCl7aWYobnVsbD09KHI9dC50cmFuc2Zvcm0pKXJldHVybiBlO3ZhciByLG4saSxhPXIuc2NhbGVbMF0sbz1yLnNjYWxlWzFdLHM9ci50cmFuc2xhdGVbMF0sbD1yLnRyYW5zbGF0ZVsxXTtyZXR1cm4gZnVuY3Rpb24odCxlKXtlfHwobj1pPTApO3ZhciByPU1hdGgucm91bmQoKHRbMF0tcykvYSksYz1NYXRoLnJvdW5kKCh0WzFdLWwpL28pO3JldHVybiB0WzBdPXItbixuPXIsdFsxXT1jLWksaT1jLHR9fSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0oXCJvYmplY3RcIj09dHlwZW9mIHImJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBlP3I6bi50b3BvanNvbj1uLnRvcG9qc29ufHx7fSl9LHt9XSw1MjY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYodDwwKXJldHVybltdO2lmKDA9PT10KXJldHVybltbMF1dO2Zvcih2YXIgZT0wfE1hdGgucm91bmQoYSh0KzEpKSxyPVtdLG89MDtvPGU7KytvKXtmb3IodmFyIHM9bi51bnJhbmsodCxvKSxsPVswXSxjPTAsdT0wO3U8cy5sZW5ndGg7Kyt1KWMrPTE8PHNbdV0sbC5wdXNoKGMpO2kocyk8MSYmKGxbMF09YyxsW3RdPTApLHIucHVzaChsKX1yZXR1cm4gcn07dmFyIG49dChcInBlcm11dGF0aW9uLXJhbmtcIiksaT10KFwicGVybXV0YXRpb24tcGFyaXR5XCIpLGE9dChcImdhbW1hXCIpfSx7Z2FtbWE6MjI4LFwicGVybXV0YXRpb24tcGFyaXR5XCI6NDU2LFwicGVybXV0YXRpb24tcmFua1wiOjQ1N31dLDUyNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuY2VudGVyfHxbMCwwLDBdLHI9dC51cHx8WzAsMSwwXSxuPXQucmlnaHR8fGgociksaT10LnJhZGl1c3x8MSxhPXQudGhldGF8fDAsdT10LnBoaXx8MDtpZihlPVtdLnNsaWNlLmNhbGwoZSwwLDMpLHI9W10uc2xpY2UuY2FsbChyLDAsMykscyhyLHIpLG49W10uc2xpY2UuY2FsbChuLDAsMykscyhuLG4pLFwiZXllXCJpbiB0KXt2YXIgcD10LmV5ZSxkPVtwWzBdLWVbMF0scFsxXS1lWzFdLHBbMl0tZVsyXV07byhuLGQsciksYyhuWzBdLG5bMV0sblsyXSk8MWUtNj9uPWgocik6cyhuLG4pLGk9YyhkWzBdLGRbMV0sZFsyXSk7dmFyIGc9bChyLGQpL2ksdj1sKG4sZCkvaTt1PU1hdGguYWNvcyhnKSxhPU1hdGguYWNvcyh2KX1yZXR1cm4gaT1NYXRoLmxvZyhpKSxuZXcgZih0Lnpvb21NaW4sdC56b29tTWF4LGUscixuLGksYSx1KX07dmFyIG49dChcImZpbHRlcmVkLXZlY3RvclwiKSxpPXQoXCJnbC1tYXQ0L2ludmVydFwiKSxhPXQoXCJnbC1tYXQ0L3JvdGF0ZVwiKSxvPXQoXCJnbC12ZWMzL2Nyb3NzXCIpLHM9dChcImdsLXZlYzMvbm9ybWFsaXplXCIpLGw9dChcImdsLXZlYzMvZG90XCIpO2Z1bmN0aW9uIGModCxlLHIpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codCwyKStNYXRoLnBvdyhlLDIpK01hdGgucG93KHIsMikpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIE1hdGgubWluKDEsTWF0aC5tYXgoLTEsdCkpfWZ1bmN0aW9uIGgodCl7dmFyIGU9TWF0aC5hYnModFswXSkscj1NYXRoLmFicyh0WzFdKSxuPU1hdGguYWJzKHRbMl0pLGk9WzAsMCwwXTtlPk1hdGgubWF4KHIsbik/aVsyXT0xOnI+TWF0aC5tYXgoZSxuKT9pWzBdPTE6aVsxXT0xO2Zvcih2YXIgYT0wLG89MCxsPTA7bDwzOysrbClhKz10W2xdKnRbbF0sbys9aVtsXSp0W2xdO2ZvcihsPTA7bDwzOysrbClpW2xdLT1vL2EqdFtsXTtyZXR1cm4gcyhpLGkpLGl9ZnVuY3Rpb24gZih0LGUscixpLGEsbyxzLGwpe3RoaXMuY2VudGVyPW4ociksdGhpcy51cD1uKGkpLHRoaXMucmlnaHQ9bihhKSx0aGlzLnJhZGl1cz1uKFtvXSksdGhpcy5hbmdsZT1uKFtzLGxdKSx0aGlzLmFuZ2xlLmJvdW5kcz1bWy0xLzAsLU1hdGguUEkvMl0sWzEvMCxNYXRoLlBJLzJdXSx0aGlzLnNldERpc3RhbmNlTGltaXRzKHQsZSksdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLmNlbnRlci5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVXA9dGhpcy51cC5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkUmlnaHQ9dGhpcy5yaWdodC5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkUmFkaXVzPXRoaXMucmFkaXVzLmN1cnZlKDApLHRoaXMuY29tcHV0ZWRBbmdsZT10aGlzLmFuZ2xlLmN1cnZlKDApLHRoaXMuY29tcHV0ZWRUb3dhcmQ9WzAsMCwwXSx0aGlzLmNvbXB1dGVkRXllPVswLDAsMF0sdGhpcy5jb21wdXRlZE1hdHJpeD1uZXcgQXJyYXkoMTYpO2Zvcih2YXIgYz0wO2M8MTY7KytjKXRoaXMuY29tcHV0ZWRNYXRyaXhbY109LjU7dGhpcy5yZWNhbGNNYXRyaXgoMCl9dmFyIHA9Zi5wcm90b3R5cGU7cC5zZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0LGUpe3Q9dD4wP01hdGgubG9nKHQpOi0xLzAsZT1lPjA/TWF0aC5sb2coZSk6MS8wLGU9TWF0aC5tYXgoZSx0KSx0aGlzLnJhZGl1cy5ib3VuZHNbMF1bMF09dCx0aGlzLnJhZGl1cy5ib3VuZHNbMV1bMF09ZX0scC5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnJhZGl1cy5ib3VuZHNbMF07cmV0dXJuIHQ/KHRbMF09TWF0aC5leHAoZVswXVswXSksdFsxXT1NYXRoLmV4cChlWzFdWzBdKSx0KTpbTWF0aC5leHAoZVswXVswXSksTWF0aC5leHAoZVsxXVswXSldfSxwLnJlY2FsY01hdHJpeD1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5jdXJ2ZSh0KSx0aGlzLnVwLmN1cnZlKHQpLHRoaXMucmlnaHQuY3VydmUodCksdGhpcy5yYWRpdXMuY3VydmUodCksdGhpcy5hbmdsZS5jdXJ2ZSh0KTtmb3IodmFyIGU9dGhpcy5jb21wdXRlZFVwLHI9dGhpcy5jb21wdXRlZFJpZ2h0LG49MCxpPTAsYT0wO2E8MzsrK2EpaSs9ZVthXSpyW2FdLG4rPWVbYV0qZVthXTt2YXIgbD1NYXRoLnNxcnQobiksdT0wO2ZvcihhPTA7YTwzOysrYSlyW2FdLT1lW2FdKmkvbix1Kz1yW2FdKnJbYV0sZVthXS89bDt2YXIgaD1NYXRoLnNxcnQodSk7Zm9yKGE9MDthPDM7KythKXJbYV0vPWg7dmFyIGY9dGhpcy5jb21wdXRlZFRvd2FyZDtvKGYsZSxyKSxzKGYsZik7dmFyIHA9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSksZD10aGlzLmNvbXB1dGVkQW5nbGVbMF0sZz10aGlzLmNvbXB1dGVkQW5nbGVbMV0sdj1NYXRoLmNvcyhkKSxtPU1hdGguc2luKGQpLHk9TWF0aC5jb3MoZykseD1NYXRoLnNpbihnKSxiPXRoaXMuY29tcHV0ZWRDZW50ZXIsXz12Knksdz1tKnksaz14LEE9LXYqeCxUPS1tKngsTT15LFM9dGhpcy5jb21wdXRlZEV5ZSxFPXRoaXMuY29tcHV0ZWRNYXRyaXg7Zm9yKGE9MDthPDM7KythKXt2YXIgQz1fKnJbYV0rdypmW2FdK2sqZVthXTtFWzQqYSsxXT1BKnJbYV0rVCpmW2FdK00qZVthXSxFWzQqYSsyXT1DLEVbNCphKzNdPTB9dmFyIEw9RVsxXSx6PUVbNV0sTz1FWzldLEk9RVsyXSxEPUVbNl0sUD1FWzEwXSxSPXoqUC1PKkQsRj1PKkktTCpQLEI9TCpELXoqSSxOPWMoUixGLEIpO1IvPU4sRi89TixCLz1OLEVbMF09UixFWzRdPUYsRVs4XT1CO2ZvcihhPTA7YTwzOysrYSlTW2FdPWJbYV0rRVsyKzQqYV0qcDtmb3IoYT0wO2E8MzsrK2Epe3U9MDtmb3IodmFyIGo9MDtqPDM7KytqKXUrPUVbYSs0KmpdKlNbal07RVsxMithXT0tdX1FWzE1XT0xfSxwLmdldE1hdHJpeD1mdW5jdGlvbih0LGUpe3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciByPXRoaXMuY29tcHV0ZWRNYXRyaXg7aWYoZSl7Zm9yKHZhciBuPTA7bjwxNjsrK24pZVtuXT1yW25dO3JldHVybiBlfXJldHVybiByfTt2YXIgZD1bMCwwLDBdO3Aucm90YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHRoaXMuYW5nbGUubW92ZSh0LGUsciksbil7dGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZE1hdHJpeDtkWzBdPWlbMl0sZFsxXT1pWzZdLGRbMl09aVsxMF07Zm9yKHZhciBvPXRoaXMuY29tcHV0ZWRVcCxzPXRoaXMuY29tcHV0ZWRSaWdodCxsPXRoaXMuY29tcHV0ZWRUb3dhcmQsYz0wO2M8MzsrK2MpaVs0KmNdPW9bY10saVs0KmMrMV09c1tjXSxpWzQqYysyXT1sW2NdO2EoaSxpLG4sZCk7Zm9yKGM9MDtjPDM7KytjKW9bY109aVs0KmNdLHNbY109aVs0KmMrMV07dGhpcy51cC5zZXQodCxvWzBdLG9bMV0sb1syXSksdGhpcy5yaWdodC5zZXQodCxzWzBdLHNbMV0sc1syXSl9fSxwLnBhbj1mdW5jdGlvbih0LGUscixuKXtlPWV8fDAscj1yfHwwLG49bnx8MCx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgaT10aGlzLmNvbXB1dGVkTWF0cml4LGE9KE1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pLGlbMV0pLG89aVs1XSxzPWlbOV0sbD1jKGEsbyxzKTthLz1sLG8vPWwscy89bDt2YXIgdT1pWzBdLGg9aVs0XSxmPWlbOF0scD11KmEraCpvK2YqcyxkPWModS09YSpwLGgtPW8qcCxmLT1zKnApLGc9KHUvPWQpKmUrYSpyLHY9KGgvPWQpKmUrbypyLG09KGYvPWQpKmUrcypyO3RoaXMuY2VudGVyLm1vdmUodCxnLHYsbSk7dmFyIHk9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7eT1NYXRoLm1heCgxZS00LHkrbiksdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coeSkpfSxwLnRyYW5zbGF0ZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLmNlbnRlci5tb3ZlKHQsZXx8MCxyfHwwLG58fDApfSxwLnNldE1hdHJpeD1mdW5jdGlvbih0LGUscixuKXt2YXIgYT0xO1wibnVtYmVyXCI9PXR5cGVvZiByJiYoYT0wfHIpLChhPDB8fGE+MykmJihhPTEpO3ZhciBvPShhKzIpJTM7ZXx8KHRoaXMucmVjYWxjTWF0cml4KHQpLGU9dGhpcy5jb21wdXRlZE1hdHJpeCk7dmFyIHM9ZVthXSxsPWVbYSs0XSxoPWVbYSs4XTtpZihuKXt2YXIgZj1NYXRoLmFicyhzKSxwPU1hdGguYWJzKGwpLGQ9TWF0aC5hYnMoaCksZz1NYXRoLm1heChmLHAsZCk7Zj09PWc/KHM9czwwPy0xOjEsbD1oPTApOmQ9PT1nPyhoPWg8MD8tMToxLHM9bD0wKToobD1sPDA/LTE6MSxzPWg9MCl9ZWxzZXt2YXIgdj1jKHMsbCxoKTtzLz12LGwvPXYsaC89dn12YXIgbSx5LHg9ZVtvXSxiPWVbbys0XSxfPWVbbys4XSx3PXgqcytiKmwrXypoLGs9Yyh4LT1zKncsYi09bCp3LF8tPWgqdyksQT1sKihfLz1rKS1oKihiLz1rKSxUPWgqKHgvPWspLXMqXyxNPXMqYi1sKngsUz1jKEEsVCxNKTtpZihBLz1TLFQvPVMsTS89Uyx0aGlzLmNlbnRlci5qdW1wKHQsSCxHLFkpLHRoaXMucmFkaXVzLmlkbGUodCksdGhpcy51cC5qdW1wKHQscyxsLGgpLHRoaXMucmlnaHQuanVtcCh0LHgsYixfKSwyPT09YSl7dmFyIEU9ZVsxXSxDPWVbNV0sTD1lWzldLHo9RSp4K0MqYitMKl8sTz1FKkErQypUK0wqTTttPVI8MD8tTWF0aC5QSS8yOk1hdGguUEkvMix5PU1hdGguYXRhbjIoTyx6KX1lbHNle3ZhciBJPWVbMl0sRD1lWzZdLFA9ZVsxMF0sUj1JKnMrRCpsK1AqaCxGPUkqeCtEKmIrUCpfLEI9SSpBK0QqVCtQKk07bT1NYXRoLmFzaW4odShSKSkseT1NYXRoLmF0YW4yKEIsRil9dGhpcy5hbmdsZS5qdW1wKHQseSxtKSx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgTj1lWzJdLGo9ZVs2XSxWPWVbMTBdLFU9dGhpcy5jb21wdXRlZE1hdHJpeDtpKFUsZSk7dmFyIHE9VVsxNV0sSD1VWzEyXS9xLEc9VVsxM10vcSxZPVVbMTRdL3EsVz1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKTt0aGlzLmNlbnRlci5qdW1wKHQsSC1OKlcsRy1qKlcsWS1WKlcpfSxwLmxhc3RUPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMuY2VudGVyLmxhc3RUKCksdGhpcy51cC5sYXN0VCgpLHRoaXMucmlnaHQubGFzdFQoKSx0aGlzLnJhZGl1cy5sYXN0VCgpLHRoaXMuYW5nbGUubGFzdFQoKSl9LHAuaWRsZT1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5pZGxlKHQpLHRoaXMudXAuaWRsZSh0KSx0aGlzLnJpZ2h0LmlkbGUodCksdGhpcy5yYWRpdXMuaWRsZSh0KSx0aGlzLmFuZ2xlLmlkbGUodCl9LHAuZmx1c2g9ZnVuY3Rpb24odCl7dGhpcy5jZW50ZXIuZmx1c2godCksdGhpcy51cC5mbHVzaCh0KSx0aGlzLnJpZ2h0LmZsdXNoKHQpLHRoaXMucmFkaXVzLmZsdXNoKHQpLHRoaXMuYW5nbGUuZmx1c2godCl9LHAuc2V0RGlzdGFuY2U9ZnVuY3Rpb24odCxlKXtlPjAmJnRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKGUpKX0scC5sb29rQXQ9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5yZWNhbGNNYXRyaXgodCksZT1lfHx0aGlzLmNvbXB1dGVkRXllLHI9cnx8dGhpcy5jb21wdXRlZENlbnRlcjt2YXIgaT0obj1ufHx0aGlzLmNvbXB1dGVkVXApWzBdLGE9blsxXSxvPW5bMl0scz1jKGksYSxvKTtpZighKHM8MWUtNikpe2kvPXMsYS89cyxvLz1zO3ZhciBsPWVbMF0tclswXSxoPWVbMV0tclsxXSxmPWVbMl0tclsyXSxwPWMobCxoLGYpO2lmKCEocDwxZS02KSl7bC89cCxoLz1wLGYvPXA7dmFyIGQ9dGhpcy5jb21wdXRlZFJpZ2h0LGc9ZFswXSx2PWRbMV0sbT1kWzJdLHk9aSpnK2EqditvKm0seD1jKGctPXkqaSx2LT15KmEsbS09eSpvKTtpZighKHg8LjAxJiYoeD1jKGc9YSpmLW8qaCx2PW8qbC1pKmYsbT1pKmgtYSpsKSk8MWUtNikpe2cvPXgsdi89eCxtLz14LHRoaXMudXAuc2V0KHQsaSxhLG8pLHRoaXMucmlnaHQuc2V0KHQsZyx2LG0pLHRoaXMuY2VudGVyLnNldCh0LHJbMF0sclsxXSxyWzJdKSx0aGlzLnJhZGl1cy5zZXQodCxNYXRoLmxvZyhwKSk7dmFyIGI9YSptLW8qdixfPW8qZy1pKm0sdz1pKnYtYSpnLGs9YyhiLF8sdyksQT1pKmwrYSpoK28qZixUPWcqbCt2KmgrbSpmLE09KGIvPWspKmwrKF8vPWspKmgrKHcvPWspKmYsUz1NYXRoLmFzaW4odShBKSksRT1NYXRoLmF0YW4yKE0sVCksQz10aGlzLmFuZ2xlLl9zdGF0ZSxMPUNbQy5sZW5ndGgtMV0sej1DW0MubGVuZ3RoLTJdO0wlPTIqTWF0aC5QSTt2YXIgTz1NYXRoLmFicyhMKzIqTWF0aC5QSS1FKSxJPU1hdGguYWJzKEwtRSksRD1NYXRoLmFicyhMLTIqTWF0aC5QSS1FKTtPPEkmJihMKz0yKk1hdGguUEkpLEQ8SSYmKEwtPTIqTWF0aC5QSSksdGhpcy5hbmdsZS5qdW1wKHRoaXMuYW5nbGUubGFzdFQoKSxMLHopLHRoaXMuYW5nbGUuc2V0KHQsRSxTKX19fX19LHtcImZpbHRlcmVkLXZlY3RvclwiOjIyMyxcImdsLW1hdDQvaW52ZXJ0XCI6MjYyLFwiZ2wtbWF0NC9yb3RhdGVcIjoyNjcsXCJnbC12ZWMzL2Nyb3NzXCI6MzI3LFwiZ2wtdmVjMy9kb3RcIjozMzIsXCJnbC12ZWMzL25vcm1hbGl6ZVwiOjM0OX1dLDUyODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9dCplLGE9bip0LG89YS0oYS10KSxzPXQtbyxsPW4qZSxjPWwtKGwtZSksdT1lLWMsaD1zKnUtKGktbypjLXMqYy1vKnUpO2lmKHIpcmV0dXJuIHJbMF09aCxyWzFdPWkscjtyZXR1cm5baCxpXX07dmFyIG49KyhNYXRoLnBvdygyLDI3KSsxKX0se31dLDUyOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49dCtlLGk9bi10LGE9ZS1pLG89dC0obi1pKTtpZihyKXJldHVybiByWzBdPW8rYSxyWzFdPW4scjtyZXR1cm5bbythLG5dfX0se31dLDUzMDpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlLG4pe1widXNlIHN0cmljdFwiO3ZhciBpPXQoXCJiaXQtdHdpZGRsZVwiKSxhPXQoXCJkdXBcIik7ZS5fX1RZUEVEQVJSQVlfUE9PTHx8KGUuX19UWVBFREFSUkFZX1BPT0w9e1VJTlQ4OmEoWzMyLDBdKSxVSU5UMTY6YShbMzIsMF0pLFVJTlQzMjphKFszMiwwXSksSU5UODphKFszMiwwXSksSU5UMTY6YShbMzIsMF0pLElOVDMyOmEoWzMyLDBdKSxGTE9BVDphKFszMiwwXSksRE9VQkxFOmEoWzMyLDBdKSxEQVRBOmEoWzMyLDBdKSxVSU5UOEM6YShbMzIsMF0pLEJVRkZFUjphKFszMiwwXSl9KTt2YXIgbz1cInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDhDbGFtcGVkQXJyYXkscz1lLl9fVFlQRURBUlJBWV9QT09MO3MuVUlOVDhDfHwocy5VSU5UOEM9YShbMzIsMF0pKSxzLkJVRkZFUnx8KHMuQlVGRkVSPWEoWzMyLDBdKSk7dmFyIGw9cy5EQVRBLGM9cy5CVUZGRVI7ZnVuY3Rpb24gdSh0KXtpZih0KXt2YXIgZT10Lmxlbmd0aHx8dC5ieXRlTGVuZ3RoLHI9aS5sb2cyKGUpO2xbcl0ucHVzaCh0KX19ZnVuY3Rpb24gaCh0KXt0PWkubmV4dFBvdzIodCk7dmFyIGU9aS5sb2cyKHQpLHI9bFtlXTtyZXR1cm4gci5sZW5ndGg+MD9yLnBvcCgpOm5ldyBBcnJheUJ1ZmZlcih0KX1mdW5jdGlvbiBmKHQpe3JldHVybiBuZXcgVWludDhBcnJheShoKHQpLDAsdCl9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gbmV3IFVpbnQxNkFycmF5KGgoMip0KSwwLHQpfWZ1bmN0aW9uIGQodCl7cmV0dXJuIG5ldyBVaW50MzJBcnJheShoKDQqdCksMCx0KX1mdW5jdGlvbiBnKHQpe3JldHVybiBuZXcgSW50OEFycmF5KGgodCksMCx0KX1mdW5jdGlvbiB2KHQpe3JldHVybiBuZXcgSW50MTZBcnJheShoKDIqdCksMCx0KX1mdW5jdGlvbiBtKHQpe3JldHVybiBuZXcgSW50MzJBcnJheShoKDQqdCksMCx0KX1mdW5jdGlvbiB5KHQpe3JldHVybiBuZXcgRmxvYXQzMkFycmF5KGgoNCp0KSwwLHQpfWZ1bmN0aW9uIHgodCl7cmV0dXJuIG5ldyBGbG9hdDY0QXJyYXkoaCg4KnQpLDAsdCl9ZnVuY3Rpb24gYih0KXtyZXR1cm4gbz9uZXcgVWludDhDbGFtcGVkQXJyYXkoaCh0KSwwLHQpOmYodCl9ZnVuY3Rpb24gXyh0KXtyZXR1cm4gbmV3IERhdGFWaWV3KGgodCksMCx0KX1mdW5jdGlvbiB3KHQpe3Q9aS5uZXh0UG93Mih0KTt2YXIgZT1pLmxvZzIodCkscj1jW2VdO3JldHVybiByLmxlbmd0aD4wP3IucG9wKCk6bmV3IG4odCl9ci5mcmVlPWZ1bmN0aW9uKHQpe2lmKG4uaXNCdWZmZXIodCkpY1tpLmxvZzIodC5sZW5ndGgpXS5wdXNoKHQpO2Vsc2V7aWYoXCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpJiYodD10LmJ1ZmZlciksIXQpcmV0dXJuO3ZhciBlPXQubGVuZ3RofHx0LmJ5dGVMZW5ndGgscj0wfGkubG9nMihlKTtsW3JdLnB1c2godCl9fSxyLmZyZWVVaW50OD1yLmZyZWVVaW50MTY9ci5mcmVlVWludDMyPXIuZnJlZUludDg9ci5mcmVlSW50MTY9ci5mcmVlSW50MzI9ci5mcmVlRmxvYXQzMj1yLmZyZWVGbG9hdD1yLmZyZWVGbG9hdDY0PXIuZnJlZURvdWJsZT1yLmZyZWVVaW50OENsYW1wZWQ9ci5mcmVlRGF0YVZpZXc9ZnVuY3Rpb24odCl7dSh0LmJ1ZmZlcil9LHIuZnJlZUFycmF5QnVmZmVyPXUsci5mcmVlQnVmZmVyPWZ1bmN0aW9uKHQpe2NbaS5sb2cyKHQubGVuZ3RoKV0ucHVzaCh0KX0sci5tYWxsb2M9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT1lfHxcImFycmF5YnVmZmVyXCI9PT1lKXJldHVybiBoKHQpO3N3aXRjaChlKXtjYXNlXCJ1aW50OFwiOnJldHVybiBmKHQpO2Nhc2VcInVpbnQxNlwiOnJldHVybiBwKHQpO2Nhc2VcInVpbnQzMlwiOnJldHVybiBkKHQpO2Nhc2VcImludDhcIjpyZXR1cm4gZyh0KTtjYXNlXCJpbnQxNlwiOnJldHVybiB2KHQpO2Nhc2VcImludDMyXCI6cmV0dXJuIG0odCk7Y2FzZVwiZmxvYXRcIjpjYXNlXCJmbG9hdDMyXCI6cmV0dXJuIHkodCk7Y2FzZVwiZG91YmxlXCI6Y2FzZVwiZmxvYXQ2NFwiOnJldHVybiB4KHQpO2Nhc2VcInVpbnQ4X2NsYW1wZWRcIjpyZXR1cm4gYih0KTtjYXNlXCJidWZmZXJcIjpyZXR1cm4gdyh0KTtjYXNlXCJkYXRhXCI6Y2FzZVwiZGF0YXZpZXdcIjpyZXR1cm4gXyh0KTtkZWZhdWx0OnJldHVybiBudWxsfXJldHVybiBudWxsfSxyLm1hbGxvY0FycmF5QnVmZmVyPWgsci5tYWxsb2NVaW50OD1mLHIubWFsbG9jVWludDE2PXAsci5tYWxsb2NVaW50MzI9ZCxyLm1hbGxvY0ludDg9ZyxyLm1hbGxvY0ludDE2PXYsci5tYWxsb2NJbnQzMj1tLHIubWFsbG9jRmxvYXQzMj1yLm1hbGxvY0Zsb2F0PXksci5tYWxsb2NGbG9hdDY0PXIubWFsbG9jRG91YmxlPXgsci5tYWxsb2NVaW50OENsYW1wZWQ9YixyLm1hbGxvY0RhdGFWaWV3PV8sci5tYWxsb2NCdWZmZXI9dyxyLmNsZWFyQ2FjaGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PDMyOysrdClzLlVJTlQ4W3RdLmxlbmd0aD0wLHMuVUlOVDE2W3RdLmxlbmd0aD0wLHMuVUlOVDMyW3RdLmxlbmd0aD0wLHMuSU5UOFt0XS5sZW5ndGg9MCxzLklOVDE2W3RdLmxlbmd0aD0wLHMuSU5UMzJbdF0ubGVuZ3RoPTAscy5GTE9BVFt0XS5sZW5ndGg9MCxzLkRPVUJMRVt0XS5sZW5ndGg9MCxzLlVJTlQ4Q1t0XS5sZW5ndGg9MCxsW3RdLmxlbmd0aD0wLGNbdF0ubGVuZ3RoPTB9fSkuY2FsbCh0aGlzLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30sdChcImJ1ZmZlclwiKS5CdWZmZXIpfSx7XCJiaXQtdHdpZGRsZVwiOjgzLGJ1ZmZlcjo5NixkdXA6MTYyfV0sNTMxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXt0aGlzLnJvb3RzPW5ldyBBcnJheSh0KSx0aGlzLnJhbmtzPW5ldyBBcnJheSh0KTtmb3IodmFyIGU9MDtlPHQ7KytlKXRoaXMucm9vdHNbZV09ZSx0aGlzLnJhbmtzW2VdPTB9ZS5leHBvcnRzPW47dmFyIGk9bi5wcm90b3R5cGU7T2JqZWN0LmRlZmluZVByb3BlcnR5KGksXCJsZW5ndGhcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdHMubGVuZ3RofX0pLGkubWFrZVNldD1mdW5jdGlvbigpe3ZhciB0PXRoaXMucm9vdHMubGVuZ3RoO3JldHVybiB0aGlzLnJvb3RzLnB1c2godCksdGhpcy5yYW5rcy5wdXNoKDApLHR9LGkuZmluZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dCxyPXRoaXMucm9vdHM7clt0XSE9PXQ7KXQ9clt0XTtmb3IoO3JbZV0hPT10Oyl7dmFyIG49cltlXTtyW2VdPXQsZT1ufXJldHVybiB0fSxpLmxpbms9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmZpbmQodCksbj10aGlzLmZpbmQoZSk7aWYociE9PW4pe3ZhciBpPXRoaXMucmFua3MsYT10aGlzLnJvb3RzLG89aVtyXSxzPWlbbl07bzxzP2Fbcl09bjpzPG8/YVtuXT1yOihhW25dPXIsKytpW3JdKX19fSx7fV0sNTMyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMD09PXQubGVuZ3RoP3Q6ZT8ocnx8dC5zb3J0KGUpLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTEsbj10Lmxlbmd0aCxpPXRbMF0sYT10WzBdLG89MTtvPG47KytvKWlmKGE9aSxlKGk9dFtvXSxhKSl7aWYobz09PXIpe3IrKztjb250aW51ZX10W3IrK109aX1yZXR1cm4gdC5sZW5ndGg9cix0fSh0LGUpKToocnx8dC5zb3J0KCksZnVuY3Rpb24odCl7Zm9yKHZhciBlPTEscj10Lmxlbmd0aCxuPXRbMF0saT10WzBdLGE9MTthPHI7KythLGk9bilpZihpPW4sKG49dFthXSkhPT1pKXtpZihhPT09ZSl7ZSsrO2NvbnRpbnVlfXRbZSsrXT1ufXJldHVybiB0Lmxlbmd0aD1lLHR9KHQpKX19LHt9XSw1MzM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj0vW1xcJ1xcXCJdLztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/KG4udGVzdCh0LmNoYXJBdCgwKSkmJih0PXQuc3Vic3RyKDEpKSxuLnRlc3QodC5jaGFyQXQodC5sZW5ndGgtMSkpJiYodD10LnN1YnN0cigwLHQubGVuZ3RoLTEpKSx0KTpcIlwifX0se31dLDUzNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7QXJyYXkuaXNBcnJheShyKXx8KHI9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMikpO2Zvcih2YXIgbj0wLGk9ci5sZW5ndGg7bjxpO24rKyl7dmFyIGE9cltuXTtmb3IodmFyIG8gaW4gYSlpZigodm9pZCAwPT09ZVtvXXx8QXJyYXkuaXNBcnJheShlW29dKXx8dFtvXSE9PWVbb10pJiZvIGluIGUpe3ZhciBzO2lmKCEwPT09YVtvXSlzPWVbb107ZWxzZXtpZighMT09PWFbb10pY29udGludWU7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYVtvXSYmdm9pZCAwPT09KHM9YVtvXShlW29dLHQsZSkpKWNvbnRpbnVlfXRbb109c319cmV0dXJuIHR9fSx7fV0sNTM1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7XCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lfHwoZT17fSk7cmV0dXJuIG4odCxlLmNhbnZhc3x8aSxlLmNvbnRleHR8fGEsZSl9O3ZhciBuPXQoXCIuL2xpYi92dGV4dFwiKSxpPW51bGwsYT1udWxsO1widW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudCYmKChpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIikpLndpZHRoPTgxOTIsaS5oZWlnaHQ9MTAyNCxhPWkuZ2V0Q29udGV4dChcIjJkXCIpKX0se1wiLi9saWIvdnRleHRcIjo1MzZ9XSw1MzY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9NjQsbz0xLjI1LHM9e2JyZWFrbGluZXM6ITEsYm9sZHM6ITEsaXRhbGljczohMSxzdWJzY3JpcHRzOiExLHN1cGVyc2NyaXB0czohMX07biYmKG4uc2l6ZSYmbi5zaXplPjAmJihhPW4uc2l6ZSksbi5saW5lU3BhY2luZyYmbi5saW5lU3BhY2luZz4wJiYobz1uLmxpbmVTcGFjaW5nKSxuLnN0eWxldGFncyYmbi5zdHlsZXRhZ3MuYnJlYWtsaW5lcyYmKHMuYnJlYWtsaW5lcz0hIW4uc3R5bGV0YWdzLmJyZWFrbGluZXMpLG4uc3R5bGV0YWdzJiZuLnN0eWxldGFncy5ib2xkcyYmKHMuYm9sZHM9ISFuLnN0eWxldGFncy5ib2xkcyksbi5zdHlsZXRhZ3MmJm4uc3R5bGV0YWdzLml0YWxpY3MmJihzLml0YWxpY3M9ISFuLnN0eWxldGFncy5pdGFsaWNzKSxuLnN0eWxldGFncyYmbi5zdHlsZXRhZ3Muc3Vic2NyaXB0cyYmKHMuc3Vic2NyaXB0cz0hIW4uc3R5bGV0YWdzLnN1YnNjcmlwdHMpLG4uc3R5bGV0YWdzJiZuLnN0eWxldGFncy5zdXBlcnNjcmlwdHMmJihzLnN1cGVyc2NyaXB0cz0hIW4uc3R5bGV0YWdzLnN1cGVyc2NyaXB0cykpO3JldHVybiByLmZvbnQ9W24uZm9udFN0eWxlLG4uZm9udFZhcmlhbnQsbi5mb250V2VpZ2h0LGErXCJweFwiLG4uZm9udF0uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkuam9pbihcIiBcIiksci50ZXh0QWxpZ249XCJzdGFydFwiLHIudGV4dEJhc2VsaW5lPVwiYWxwaGFiZXRpY1wiLHIuZGlyZWN0aW9uPVwibHRyXCIsdyhmdW5jdGlvbih0LGUscixuLGEsbyl7cj1yLnJlcGxhY2UoL1xcbi9nLFwiXCIpLHI9ITA9PT1vLmJyZWFrbGluZXM/ci5yZXBsYWNlKC9cXDxiclxcPi9nLFwiXFxuXCIpOnIucmVwbGFjZSgvXFw8YnJcXD4vZyxcIiBcIik7dmFyIHM9XCJcIixsPVtdO2ZvcihrPTA7azxyLmxlbmd0aDsrK2spbFtrXT1zOyEwPT09by5ib2xkcyYmKGw9eChjLHUscixsKSksITA9PT1vLml0YWxpY3MmJihsPXgoaCxmLHIsbCkpLCEwPT09by5zdXBlcnNjcmlwdHMmJihsPXgocCxnLHIsbCkpLCEwPT09by5zdWJzY3JpcHRzJiYobD14KHYseSxyLGwpKTt2YXIgYj1bXSxfPVwiXCI7Zm9yKGs9MDtrPHIubGVuZ3RoOysrayludWxsIT09bFtrXSYmKF8rPXJba10sYi5wdXNoKGxba10pKTt2YXIgdyxrLEEsVCxNLFM9Xy5zcGxpdChcIlxcblwiKSxFPVMubGVuZ3RoLEM9TWF0aC5yb3VuZChhKm4pLEw9bix6PTIqbixPPTAsST1FKkMrejt0LmhlaWdodDxJJiYodC5oZWlnaHQ9SSksZS5maWxsU3R5bGU9XCIjMDAwXCIsZS5maWxsUmVjdCgwLDAsdC53aWR0aCx0LmhlaWdodCksZS5maWxsU3R5bGU9XCIjZmZmXCI7dmFyIEQ9MCxQPVwiXCI7ZnVuY3Rpb24gUigpe2lmKFwiXCIhPT1QKXt2YXIgdD1lLm1lYXN1cmVUZXh0KFApLndpZHRoO2UuZmlsbFRleHQoUCxMK0EseitUKSxBKz10fX1mdW5jdGlvbiBGKCl7cmV0dXJuIE1hdGgucm91bmQoTSkrXCJweCBcIn1mdW5jdGlvbiBCKHQscil7dmFyIG49XCJcIitlLmZvbnQ7aWYoITA9PT1vLnN1YnNjcmlwdHMpe3ZhciBpPXQuaW5kZXhPZihtKSxhPXIuaW5kZXhPZihtKSxzPWk+LTE/cGFyc2VJbnQodFsxK2ldKTowLGw9YT4tMT9wYXJzZUludChyWzErYV0pOjA7cyE9PWwmJihuPW4ucmVwbGFjZShGKCksXCI/cHggXCIpLE0qPU1hdGgucG93KC43NSxsLXMpLG49bi5yZXBsYWNlKFwiP3B4IFwiLEYoKSkpLFQrPS4yNSpDKihsLXMpfWlmKCEwPT09by5zdXBlcnNjcmlwdHMpe3ZhciBjPXQuaW5kZXhPZihkKSxoPXIuaW5kZXhPZihkKSxwPWM+LTE/cGFyc2VJbnQodFsxK2NdKTowLGc9aD4tMT9wYXJzZUludChyWzEraF0pOjA7cCE9PWcmJihuPW4ucmVwbGFjZShGKCksXCI/cHggXCIpLE0qPU1hdGgucG93KC43NSxnLXApLG49bi5yZXBsYWNlKFwiP3B4IFwiLEYoKSkpLFQtPS4yNSpDKihnLXApfWlmKCEwPT09by5ib2xkcyl7dmFyIHY9dC5pbmRleE9mKHUpPi0xLHk9ci5pbmRleE9mKHUpPi0xOyF2JiZ5JiYobj14P24ucmVwbGFjZShcIml0YWxpYyBcIixcIml0YWxpYyBib2xkIFwiKTpcImJvbGQgXCIrbiksdiYmIXkmJihuPW4ucmVwbGFjZShcImJvbGQgXCIsXCJcIikpfWlmKCEwPT09by5pdGFsaWNzKXt2YXIgeD10LmluZGV4T2YoZik+LTEsYj1yLmluZGV4T2YoZik+LTE7IXgmJmImJihuPVwiaXRhbGljIFwiK24pLHgmJiFiJiYobj1uLnJlcGxhY2UoXCJpdGFsaWMgXCIsXCJcIikpfWUuZm9udD1ufWZvcih3PTA7dzxFOysrdyl7dmFyIE49U1t3XStcIlxcblwiO2ZvcihBPTAsVD13KkMsTT1uLFA9XCJcIixrPTA7azxOLmxlbmd0aDsrK2spe3ZhciBqPWsrRDxiLmxlbmd0aD9iW2srRF06YltiLmxlbmd0aC0xXTtzPT09aj9QKz1OW2tdOihSKCksUD1OW2tdLHZvaWQgMCE9PWomJihCKHMsaikscz1qKSl9UigpLEQrPU4ubGVuZ3RoO3ZhciBWPTB8TWF0aC5yb3VuZChBKzIqTCk7TzxWJiYoTz1WKX12YXIgVT1PLHE9eitDKkU7cmV0dXJuIGkoZS5nZXRJbWFnZURhdGEoMCwwLFUscSkuZGF0YSxbcSxVLDRdKS5waWNrKC0xLC0xLDApLnRyYW5zcG9zZSgxLDApfShlLHIsdCxhLG8scyksbixhKX0sZS5leHBvcnRzLnByb2Nlc3NQaXhlbHM9dzt2YXIgbj10KFwic3VyZmFjZS1uZXRzXCIpLGk9dChcIm5kYXJyYXlcIiksYT10KFwic2ltcGxpZnktcGxhbmFyLWdyYXBoXCIpLG89dChcImNsZWFuLXBzbGdcIikscz10KFwiY2R0MmRcIiksbD10KFwicGxhbmFyLWdyYXBoLXRvLXBvbHlsaW5lXCIpLGM9XCJiXCIsdT1cImJ8XCIsaD1cImlcIixmPVwiaXxcIixwPVwic3VwXCIsZD1cIitcIixnPVwiKzFcIix2PVwic3ViXCIsbT1cIi1cIix5PVwiLTFcIjtmdW5jdGlvbiB4KHQsZSxyLG4pe2Zvcih2YXIgaT1cIjxcIit0K1wiPlwiLGE9XCI8L1wiK3QrXCI+XCIsbz1pLmxlbmd0aCxzPWEubGVuZ3RoLGw9ZVswXT09PWR8fGVbMF09PT1tLGM9MCx1PS1zO2M+LTEmJi0xIT09KGM9ci5pbmRleE9mKGksYykpJiYtMSE9PSh1PXIuaW5kZXhPZihhLGMrbykpJiYhKHU8PWMpOyl7Zm9yKHZhciBoPWM7aDx1K3M7KytoKWlmKGg8YytvfHxoPj11KW5baF09bnVsbCxyPXIuc3Vic3RyKDAsaCkrXCIgXCIrci5zdWJzdHIoaCsxKTtlbHNlIGlmKG51bGwhPT1uW2hdKXt2YXIgZj1uW2hdLmluZGV4T2YoZVswXSk7LTE9PT1mP25baF0rPWU6bCYmKG5baF09bltoXS5zdWJzdHIoMCxmKzEpKygxK3BhcnNlSW50KG5baF1bZisxXSkpK25baF0uc3Vic3RyKGYrMikpfXZhciBwPWMrbyxnPXIuc3Vic3RyKHAsdS1wKS5pbmRleE9mKGkpO2M9LTEhPT1nP2c6dStzfXJldHVybiBufWZ1bmN0aW9uIGIodCxlKXt2YXIgcj1uKHQsMTI4KTtyZXR1cm4gZT9hKHIuY2VsbHMsci5wb3NpdGlvbnMsLjI1KTp7ZWRnZXM6ci5jZWxscyxwb3NpdGlvbnM6ci5wb3NpdGlvbnN9fWZ1bmN0aW9uIF8odCxlLHIsbil7dmFyIGk9Yih0LG4pLGE9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1lLnRleHRBbGlnbnx8XCJzdGFydFwiLGk9ZS50ZXh0QmFzZWxpbmV8fFwiYWxwaGFiZXRpY1wiLGE9WzE8PDMwLDE8PDMwXSxvPVswLDBdLHM9dC5sZW5ndGgsbD0wO2w8czsrK2wpZm9yKHZhciBjPXRbbF0sdT0wO3U8MjsrK3UpYVt1XT0wfE1hdGgubWluKGFbdV0sY1t1XSksb1t1XT0wfE1hdGgubWF4KG9bdV0sY1t1XSk7dmFyIGg9MDtzd2l0Y2gobil7Y2FzZVwiY2VudGVyXCI6aD0tLjUqKGFbMF0rb1swXSk7YnJlYWs7Y2FzZVwicmlnaHRcIjpjYXNlXCJlbmRcIjpoPS1vWzBdO2JyZWFrO2Nhc2VcImxlZnRcIjpjYXNlXCJzdGFydFwiOmg9LWFbMF07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJ2ZWN0b3JpemUtdGV4dDogVW5yZWNvZ25pemVkIHRleHRBbGlnbjogJ1wiK24rXCInXCIpfXZhciBmPTA7c3dpdGNoKGkpe2Nhc2VcImhhbmdpbmdcIjpjYXNlXCJ0b3BcIjpmPS1hWzFdO2JyZWFrO2Nhc2VcIm1pZGRsZVwiOmY9LS41KihhWzFdK29bMV0pO2JyZWFrO2Nhc2VcImFscGhhYmV0aWNcIjpjYXNlXCJpZGVvZ3JhcGhpY1wiOmY9LTMqcjticmVhaztjYXNlXCJib3R0b21cIjpmPS1vWzFdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwidmVjdG9yaXplLXRleHQ6IFVucmVjb2dpbml6ZWQgdGV4dEJhc2VsaW5lOiAnXCIraStcIidcIil9dmFyIHA9MS9yO3JldHVyblwibGluZUhlaWdodFwiaW4gZT9wKj0rZS5saW5lSGVpZ2h0Olwid2lkdGhcImluIGU/cD1lLndpZHRoLyhvWzBdLWFbMF0pOlwiaGVpZ2h0XCJpbiBlJiYocD1lLmhlaWdodC8ob1sxXS1hWzFdKSksdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW3AqKHRbMF0raCkscCoodFsxXStmKV19KX0oaS5wb3NpdGlvbnMsZSxyKSxjPWkuZWRnZXMsdT1cImNjd1wiPT09ZS5vcmllbnRhdGlvbjtpZihvKGEsYyksZS5wb2x5Z29uc3x8ZS5wb2x5Z29ufHxlLnBvbHlsaW5lKXtmb3IodmFyIGg9bChjLGEpLGY9bmV3IEFycmF5KGgubGVuZ3RoKSxwPTA7cDxoLmxlbmd0aDsrK3Ape2Zvcih2YXIgZD1oW3BdLGc9bmV3IEFycmF5KGQubGVuZ3RoKSx2PTA7djxkLmxlbmd0aDsrK3Ype2Zvcih2YXIgbT1kW3ZdLHk9bmV3IEFycmF5KG0ubGVuZ3RoKSx4PTA7eDxtLmxlbmd0aDsrK3gpeVt4XT1hW21beF1dLnNsaWNlKCk7dSYmeS5yZXZlcnNlKCksZ1t2XT15fWZbcF09Z31yZXR1cm4gZn1yZXR1cm4gZS50cmlhbmdsZXN8fGUudHJpYW5ndWxhdGV8fGUudHJpYW5nbGU/e2NlbGxzOnMoYSxjLHtkZWxhdW5heTohMSxleHRlcmlvcjohMSxpbnRlcmlvcjohMH0pLHBvc2l0aW9uczphfTp7ZWRnZXM6Yyxwb3NpdGlvbnM6YX19ZnVuY3Rpb24gdyh0LGUscil7dHJ5e3JldHVybiBfKHQsZSxyLCEwKX1jYXRjaCh0KXt9dHJ5e3JldHVybiBfKHQsZSxyLCExKX1jYXRjaCh0KXt9cmV0dXJuIGUucG9seWdvbnN8fGUucG9seWxpbmV8fGUucG9seWdvbj9bXTplLnRyaWFuZ2xlc3x8ZS50cmlhbmd1bGF0ZXx8ZS50cmlhbmdsZT97Y2VsbHM6W10scG9zaXRpb25zOltdfTp7ZWRnZXM6W10scG9zaXRpb25zOltdfX19LHtjZHQyZDo5NyxcImNsZWFuLXBzbGdcIjoxMDcsbmRhcnJheTo0NDMsXCJwbGFuYXItZ3JhcGgtdG8tcG9seWxpbmVcIjo0NjEsXCJzaW1wbGlmeS1wbGFuYXItZ3JhcGhcIjo1MDksXCJzdXJmYWNlLW5ldHNcIjo1MTZ9XSw1Mzc6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtpZihcInVuZGVmaW5lZFwiPT10eXBlb2Ygc2VzfHwhc2VzLm9rfHxzZXMub2soKSl7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlcyYmKHNlcy53ZWFrTWFwUGVybWl0SG9zdE9iamVjdHM9dik7dmFyIHQ9ITE7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgV2Vha01hcCl7dmFyIHI9V2Vha01hcDtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgbmF2aWdhdG9yJiYvRmlyZWZveC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSk7ZWxzZXt2YXIgbj1uZXcgcixpPU9iamVjdC5mcmVlemUoe30pO2lmKG4uc2V0KGksMSksMT09PW4uZ2V0KGkpKXJldHVybiB2b2lkKGUuZXhwb3J0cz1XZWFrTWFwKTt0PSEwfX1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzLG89T2JqZWN0LmRlZmluZVByb3BlcnR5LHM9T2JqZWN0LmlzRXh0ZW5zaWJsZSxsPVwid2Vha21hcDpcIixjPWwrXCJpZGVudDpcIitNYXRoLnJhbmRvbSgpK1wiX19fXCI7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGNyeXB0byYmXCJmdW5jdGlvblwiPT10eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyYmXCJmdW5jdGlvblwiPT10eXBlb2YgQXJyYXlCdWZmZXImJlwiZnVuY3Rpb25cIj09dHlwZW9mIFVpbnQ4QXJyYXkpe3ZhciB1PW5ldyBBcnJheUJ1ZmZlcigyNSksaD1uZXcgVWludDhBcnJheSh1KTtjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGgpLGM9bCtcInJhbmQ6XCIrQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGgsZnVuY3Rpb24odCl7cmV0dXJuKHQlMzYpLnRvU3RyaW5nKDM2KX0pLmpvaW4oXCJcIikrXCJfX19cIn1pZihvKE9iamVjdCxcImdldE93blByb3BlcnR5TmFtZXNcIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGEodCkuZmlsdGVyKG0pfX0pLFwiZ2V0UHJvcGVydHlOYW1lc1wiaW4gT2JqZWN0KXt2YXIgZj1PYmplY3QuZ2V0UHJvcGVydHlOYW1lcztvKE9iamVjdCxcImdldFByb3BlcnR5TmFtZXNcIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGYodCkuZmlsdGVyKG0pfX0pfSFmdW5jdGlvbigpe3ZhciB0PU9iamVjdC5mcmVlemU7byhPYmplY3QsXCJmcmVlemVcIix7dmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHkoZSksdChlKX19KTt2YXIgZT1PYmplY3Quc2VhbDtvKE9iamVjdCxcInNlYWxcIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHkodCksZSh0KX19KTt2YXIgcj1PYmplY3QucHJldmVudEV4dGVuc2lvbnM7byhPYmplY3QsXCJwcmV2ZW50RXh0ZW5zaW9uc1wiLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4geSh0KSxyKHQpfX0pfSgpO3ZhciBwPSExLGQ9MCxnPWZ1bmN0aW9uKCl7dGhpcyBpbnN0YW5jZW9mIGd8fGIoKTt2YXIgdD1bXSxlPVtdLHI9ZCsrO3JldHVybiBPYmplY3QuY3JlYXRlKGcucHJvdG90eXBlLHtnZXRfX186e3ZhbHVlOngoZnVuY3Rpb24obixpKXt2YXIgYSxvPXkobik7cmV0dXJuIG8/ciBpbiBvP29bcl06aTooYT10LmluZGV4T2YobikpPj0wP2VbYV06aX0pfSxoYXNfX186e3ZhbHVlOngoZnVuY3Rpb24oZSl7dmFyIG49eShlKTtyZXR1cm4gbj9yIGluIG46dC5pbmRleE9mKGUpPj0wfSl9LHNldF9fXzp7dmFsdWU6eChmdW5jdGlvbihuLGkpe3ZhciBhLG89eShuKTtyZXR1cm4gbz9vW3JdPWk6KGE9dC5pbmRleE9mKG4pKT49MD9lW2FdPWk6KGE9dC5sZW5ndGgsZVthXT1pLHRbYV09biksdGhpc30pfSxkZWxldGVfX186e3ZhbHVlOngoZnVuY3Rpb24obil7dmFyIGksYSxvPXkobik7cmV0dXJuIG8/ciBpbiBvJiZkZWxldGUgb1tyXTohKChpPXQuaW5kZXhPZihuKSk8MHx8KGE9dC5sZW5ndGgtMSx0W2ldPXZvaWQgMCxlW2ldPWVbYV0sdFtpXT10W2FdLHQubGVuZ3RoPWEsZS5sZW5ndGg9YSwwKSl9KX19KX07Zy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShPYmplY3QucHJvdG90eXBlLHtnZXQ6e3ZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZ2V0X19fKHQsZSl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0saGFzOnt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXNfX18odCl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sc2V0Ont2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnNldF9fXyh0LGUpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9LGRlbGV0ZTp7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZXRlX19fKHQpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksXCJmdW5jdGlvblwiPT10eXBlb2Ygcj9mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXt0aGlzIGluc3RhbmNlb2YgZ3x8YigpO3ZhciBlLG49bmV3IHIsaT12b2lkIDAsYT0hMTtyZXR1cm4gZT10P2Z1bmN0aW9uKHQsZSl7cmV0dXJuIG4uc2V0KHQsZSksbi5oYXModCl8fChpfHwoaT1uZXcgZyksaS5zZXQodCxlKSksdGhpc306ZnVuY3Rpb24odCxlKXtpZihhKXRyeXtuLnNldCh0LGUpfWNhdGNoKHIpe2l8fChpPW5ldyBnKSxpLnNldF9fXyh0LGUpfWVsc2Ugbi5zZXQodCxlKTtyZXR1cm4gdGhpc30sT2JqZWN0LmNyZWF0ZShnLnByb3RvdHlwZSx7Z2V0X19fOnt2YWx1ZTp4KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGk/bi5oYXModCk/bi5nZXQodCk6aS5nZXRfX18odCxlKTpuLmdldCh0LGUpfSl9LGhhc19fXzp7dmFsdWU6eChmdW5jdGlvbih0KXtyZXR1cm4gbi5oYXModCl8fCEhaSYmaS5oYXNfX18odCl9KX0sc2V0X19fOnt2YWx1ZTp4KGUpfSxkZWxldGVfX186e3ZhbHVlOngoZnVuY3Rpb24odCl7dmFyIGU9ISFuLmRlbGV0ZSh0KTtyZXR1cm4gaSYmaS5kZWxldGVfX18odCl8fGV9KX0scGVybWl0SG9zdE9iamVjdHNfX186e3ZhbHVlOngoZnVuY3Rpb24odCl7aWYodCE9PXYpdGhyb3cgbmV3IEVycm9yKFwiYm9ndXMgY2FsbCB0byBwZXJtaXRIb3N0T2JqZWN0c19fX1wiKTthPSEwfSl9fSl9dCYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFByb3h5JiYoUHJveHk9dm9pZCAwKSxuLnByb3RvdHlwZT1nLnByb3RvdHlwZSxlLmV4cG9ydHM9bixPYmplY3QuZGVmaW5lUHJvcGVydHkoV2Vha01hcC5wcm90b3R5cGUsXCJjb25zdHJ1Y3RvclwiLHt2YWx1ZTpXZWFrTWFwLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSl9KCk6KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBQcm94eSYmKFByb3h5PXZvaWQgMCksZS5leHBvcnRzPWcpfWZ1bmN0aW9uIHYodCl7dC5wZXJtaXRIb3N0T2JqZWN0c19fXyYmdC5wZXJtaXRIb3N0T2JqZWN0c19fXyh2KX1mdW5jdGlvbiBtKHQpe3JldHVybiEodC5zdWJzdHIoMCxsLmxlbmd0aCk9PWwmJlwiX19fXCI9PT10LnN1YnN0cih0Lmxlbmd0aC0zKSl9ZnVuY3Rpb24geSh0KXtpZih0IT09T2JqZWN0KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJOb3QgYW4gb2JqZWN0OiBcIit0KTt2YXIgZT10W2NdO2lmKGUmJmUua2V5PT09dClyZXR1cm4gZTtpZihzKHQpKXtlPXtrZXk6dH07dHJ5e3JldHVybiBvKHQsYyx7dmFsdWU6ZSx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMX0pLGV9Y2F0Y2godCl7cmV0dXJufX19ZnVuY3Rpb24geCh0KXtyZXR1cm4gdC5wcm90b3R5cGU9bnVsbCxPYmplY3QuZnJlZXplKHQpfWZ1bmN0aW9uIGIoKXtwfHxcInVuZGVmaW5lZFwiPT10eXBlb2YgY29uc29sZXx8KHA9ITAsY29uc29sZS53YXJuKFwiV2Vha01hcCBzaG91bGQgYmUgaW52b2tlZCBhcyBuZXcgV2Vha01hcCgpLCBub3QgV2Vha01hcCgpLiBUaGlzIHdpbGwgYmUgYW4gZXJyb3IgaW4gdGhlIGZ1dHVyZS5cIikpfX0oKX0se31dLDUzODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuL2hpZGRlbi1zdG9yZS5qc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoKFwib2JqZWN0XCIhPXR5cGVvZiBlfHxudWxsPT09ZSkmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKFwiV2Vha21hcC1zaGltOiBLZXkgbXVzdCBiZSBvYmplY3RcIik7dmFyIHI9ZS52YWx1ZU9mKHQpO3JldHVybiByJiZyLmlkZW50aXR5PT09dD9yOm4oZSx0KX19fSx7XCIuL2hpZGRlbi1zdG9yZS5qc1wiOjUzOX1dLDUzOTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXtpZGVudGl0eTplfSxuPXQudmFsdWVPZjtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJ2YWx1ZU9mXCIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0IT09ZT9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpyfSx3cml0YWJsZTohMH0pLHJ9fSx7fV0sNTQwOltmdW5jdGlvbih0LGUscil7dmFyIG49dChcIi4vY3JlYXRlLXN0b3JlLmpzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PW4oKTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGUscil7dmFyIG49dChlKTtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eShcInZhbHVlXCIpP24udmFsdWU6cn0sc2V0OmZ1bmN0aW9uKGUscil7cmV0dXJuIHQoZSkudmFsdWU9cix0aGlzfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuXCJ2YWx1ZVwiaW4gdChlKX0sZGVsZXRlOmZ1bmN0aW9uKGUpe3JldHVybiBkZWxldGUgdChlKS52YWx1ZX19fX0se1wiLi9jcmVhdGUtc3RvcmUuanNcIjo1Mzh9XSw1NDE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiZ2V0LWNhbnZhcy1jb250ZXh0XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbihcIndlYmdsXCIsdCl9fSx7XCJnZXQtY2FudmFzLWNvbnRleHRcIjoyMjl9XSw1NDI6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi4vbWFpblwiKSxpPXQoXCJvYmplY3QtYXNzaWduXCIpLGE9bi5pbnN0YW5jZSgpO2Z1bmN0aW9uIG8odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHxcIlwiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbXCJcIl19by5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoby5wcm90b3R5cGUse25hbWU6XCJDaGluZXNlXCIsamRFcG9jaDoxNzIxNDI1LjUsaGFzWWVhclplcm86ITEsbWluTW9udGg6MCxmaXJzdE1vbnRoOjAsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOntcIlwiOntuYW1lOlwiQ2hpbmVzZVwiLGVwb2NoczpbXCJCRUNcIixcIkVDXCJdLG1vbnRoTnVtYmVyczpmdW5jdGlvbih0LGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXt2YXIgcj10Lm1hdGNoKGwpO3JldHVybiByP3JbMF06XCJcIn12YXIgbj10aGlzLl92YWxpZGF0ZVllYXIodCksaT10Lm1vbnRoKCksYT1cIlwiK3RoaXMudG9DaGluZXNlTW9udGgobixpKTtyZXR1cm4gZSYmYS5sZW5ndGg8MiYmKGE9XCIwXCIrYSksdGhpcy5pc0ludGVyY2FsYXJ5TW9udGgobixpKSYmKGErPVwiaVwiKSxhfSxtb250aE5hbWVzOmZ1bmN0aW9uKHQpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXt2YXIgZT10Lm1hdGNoKGMpO3JldHVybiBlP2VbMF06XCJcIn12YXIgcj10aGlzLl92YWxpZGF0ZVllYXIodCksbj10Lm1vbnRoKCksaT1bXCJcXHU0ZTAwXFx1NjcwOFwiLFwiXFx1NGU4Y1xcdTY3MDhcIixcIlxcdTRlMDlcXHU2NzA4XCIsXCJcXHU1NmRiXFx1NjcwOFwiLFwiXFx1NGU5NFxcdTY3MDhcIixcIlxcdTUxNmRcXHU2NzA4XCIsXCJcXHU0ZTAzXFx1NjcwOFwiLFwiXFx1NTE2YlxcdTY3MDhcIixcIlxcdTRlNWRcXHU2NzA4XCIsXCJcXHU1MzQxXFx1NjcwOFwiLFwiXFx1NTM0MVxcdTRlMDBcXHU2NzA4XCIsXCJcXHU1MzQxXFx1NGU4Y1xcdTY3MDhcIl1bdGhpcy50b0NoaW5lc2VNb250aChyLG4pLTFdO3JldHVybiB0aGlzLmlzSW50ZXJjYWxhcnlNb250aChyLG4pJiYoaT1cIlxcdTk1ZjBcIitpKSxpfSxtb250aE5hbWVzU2hvcnQ6ZnVuY3Rpb24odCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpe3ZhciBlPXQubWF0Y2godSk7cmV0dXJuIGU/ZVswXTpcIlwifXZhciByPXRoaXMuX3ZhbGlkYXRlWWVhcih0KSxuPXQubW9udGgoKSxpPVtcIlxcdTRlMDBcIixcIlxcdTRlOGNcIixcIlxcdTRlMDlcIixcIlxcdTU2ZGJcIixcIlxcdTRlOTRcIixcIlxcdTUxNmRcIixcIlxcdTRlMDNcIixcIlxcdTUxNmJcIixcIlxcdTRlNWRcIixcIlxcdTUzNDFcIixcIlxcdTUzNDFcXHU0ZTAwXCIsXCJcXHU1MzQxXFx1NGU4Y1wiXVt0aGlzLnRvQ2hpbmVzZU1vbnRoKHIsbiktMV07cmV0dXJuIHRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKHIsbikmJihpPVwiXFx1OTVmMFwiK2kpLGl9LHBhcnNlTW9udGg6ZnVuY3Rpb24odCxlKXt0PXRoaXMuX3ZhbGlkYXRlWWVhcih0KTt2YXIgcixuPXBhcnNlSW50KGUpO2lmKGlzTmFOKG4pKVwiXFx1OTVmMFwiPT09ZVswXSYmKHI9ITAsZT1lLnN1YnN0cmluZygxKSksXCJcXHU2NzA4XCI9PT1lW2UubGVuZ3RoLTFdJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTEpKSxuPTErW1wiXFx1NGUwMFwiLFwiXFx1NGU4Y1wiLFwiXFx1NGUwOVwiLFwiXFx1NTZkYlwiLFwiXFx1NGU5NFwiLFwiXFx1NTE2ZFwiLFwiXFx1NGUwM1wiLFwiXFx1NTE2YlwiLFwiXFx1NGU1ZFwiLFwiXFx1NTM0MVwiLFwiXFx1NTM0MVxcdTRlMDBcIixcIlxcdTUzNDFcXHU0ZThjXCJdLmluZGV4T2YoZSk7ZWxzZXt2YXIgaT1lW2UubGVuZ3RoLTFdO3I9XCJpXCI9PT1pfHxcIklcIj09PWl9cmV0dXJuIHRoaXMudG9Nb250aEluZGV4KHQsbixyKX0sZGF5TmFtZXM6W1wiU3VuZGF5XCIsXCJNb25kYXlcIixcIlR1ZXNkYXlcIixcIldlZG5lc2RheVwiLFwiVGh1cnNkYXlcIixcIkZyaWRheVwiLFwiU2F0dXJkYXlcIl0sZGF5TmFtZXNTaG9ydDpbXCJTdW5cIixcIk1vblwiLFwiVHVlXCIsXCJXZWRcIixcIlRodVwiLFwiRnJpXCIsXCJTYXRcIl0sZGF5TmFtZXNNaW46W1wiU3VcIixcIk1vXCIsXCJUdVwiLFwiV2VcIixcIlRoXCIsXCJGclwiLFwiU2FcIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDpcInl5eXkvbW0vZGRcIixmaXJzdERheToxLGlzUlRMOiExfX0sX3ZhbGlkYXRlWWVhcjpmdW5jdGlvbih0LGUpe2lmKHQueWVhciYmKHQ9dC55ZWFyKCkpLFwibnVtYmVyXCIhPXR5cGVvZiB0fHx0PDE4ODh8fHQ+MjExMSl0aHJvdyBlLnJlcGxhY2UoL1xcezBcXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIHR9LHRvTW9udGhJbmRleDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpO2lmKHImJmUhPT1pfHxlPDF8fGU+MTIpdGhyb3cgbi5sb2NhbC5pbnZhbGlkTW9udGgucmVwbGFjZSgvXFx7MFxcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gaT8hciYmZTw9aT9lLTE6ZTplLTF9LHRvQ2hpbmVzZU1vbnRoOmZ1bmN0aW9uKHQsZSl7dC55ZWFyJiYoZT0odD10LnllYXIoKSkubW9udGgoKSk7dmFyIHI9dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpO2lmKGU8MHx8ZT4ocj8xMjoxMSkpdGhyb3cgbi5sb2NhbC5pbnZhbGlkTW9udGgucmVwbGFjZSgvXFx7MFxcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gcj9lPHI/ZSsxOmU6ZSsxfSxpbnRlcmNhbGFyeU1vbnRoOmZ1bmN0aW9uKHQpe3JldHVybiB0PXRoaXMuX3ZhbGlkYXRlWWVhcih0KSxoW3QtaFswXV0+PjEzfSxpc0ludGVyY2FsYXJ5TW9udGg6ZnVuY3Rpb24odCxlKXt0LnllYXImJihlPSh0PXQueWVhcigpKS5tb250aCgpKTt2YXIgcj10aGlzLmludGVyY2FsYXJ5TW9udGgodCk7cmV0dXJuISFyJiZyPT09ZX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIDAhPT10aGlzLmludGVyY2FsYXJ5TW9udGgodCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBpLG89dGhpcy5fdmFsaWRhdGVZZWFyKHQsbi5sb2NhbC5pbnZhbGlkeWVhcikscz1mW28tZlswXV0sbD1zPj45JjQwOTUsYz1zPj41JjE1LHU9MzEmczsoaT1hLm5ld0RhdGUobCxjLHUpKS5hZGQoNC0oaS5kYXlPZldlZWsoKXx8NyksXCJkXCIpO3ZhciBoPXRoaXMudG9KRCh0LGUsciktaS50b0pEKCk7cmV0dXJuIDErTWF0aC5mbG9vcihoLzcpfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVhcFllYXIodCk/MTM6MTJ9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dC55ZWFyJiYoZT10Lm1vbnRoKCksdD10LnllYXIoKSksdD10aGlzLl92YWxpZGF0ZVllYXIodCk7dmFyIHI9aFt0LWhbMF1dO2lmKGU+KHI+PjEzPzEyOjExKSl0aHJvdyBuLmxvY2FsLmludmFsaWRNb250aC5yZXBsYWNlKC9cXHswXFx9Lyx0aGlzLmxvY2FsLm5hbWUpO3JldHVybiByJjE8PDEyLWU/MzA6Mjl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQscyxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3Q9dGhpcy5fdmFsaWRhdGVZZWFyKGkueWVhcigpKSxlPWkubW9udGgoKSxyPWkuZGF5KCk7dmFyIG89dGhpcy5pc0ludGVyY2FsYXJ5TW9udGgodCxlKSxzPXRoaXMudG9DaGluZXNlTW9udGgodCxlKSxsPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbyxzO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KW89dCxhPWV8fHt9O2Vsc2V7dmFyIGw9XCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTE4ODgmJnQ8PTIxMTE7aWYoIWwpdGhyb3cgbmV3IEVycm9yKFwiTHVuYXIgeWVhciBvdXRzaWRlIHJhbmdlIDE4ODgtMjExMVwiKTt2YXIgYz1cIm51bWJlclwiPT10eXBlb2YgZSYmZT49MSYmZTw9MTI7aWYoIWMpdGhyb3cgbmV3IEVycm9yKFwiTHVuYXIgbW9udGggb3V0c2lkZSByYW5nZSAxIC0gMTJcIik7dmFyIHUscD1cIm51bWJlclwiPT10eXBlb2YgciYmcj49MSYmcjw9MzA7aWYoIXApdGhyb3cgbmV3IEVycm9yKFwiTHVuYXIgZGF5IG91dHNpZGUgcmFuZ2UgMSAtIDMwXCIpO1wib2JqZWN0XCI9PXR5cGVvZiBuPyh1PSExLGE9bik6KHU9ISFuLGE9aXx8e30pLG89e3llYXI6dCxtb250aDplLGRheTpyLGlzSW50ZXJjYWxhcnk6dX19cz1vLmRheS0xO3ZhciBkLGc9aFtvLnllYXItaFswXV0sdj1nPj4xMztkPXY/by5tb250aD52P28ubW9udGg6by5pc0ludGVyY2FsYXJ5P28ubW9udGg6by5tb250aC0xOm8ubW9udGgtMTtmb3IodmFyIG09MDttPGQ7bSsrKXt2YXIgeT1nJjE8PDEyLW0/MzA6Mjk7cys9eX12YXIgeD1mW28ueWVhci1mWzBdXSxiPW5ldyBEYXRlKHg+PjkmNDA5NSwoeD4+NSYxNSktMSwoMzEmeCkrcyk7cmV0dXJuIGEueWVhcj1iLmdldEZ1bGxZZWFyKCksYS5tb250aD0xK2IuZ2V0TW9udGgoKSxhLmRheT1iLmdldERhdGUoKSxhfSh0LHMscixvKTtyZXR1cm4gYS50b0pEKGwueWVhcixsLm1vbnRoLGwuZGF5KX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPWEuZnJvbUpEKHQpLHI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYTtpZihcIm9iamVjdFwiPT10eXBlb2YgdClpPXQsYT1lfHx7fTtlbHNle3ZhciBvPVwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0xODg4JiZ0PD0yMTExO2lmKCFvKXRocm93IG5ldyBFcnJvcihcIlNvbGFyIHllYXIgb3V0c2lkZSByYW5nZSAxODg4LTIxMTFcIik7dmFyIHM9XCJudW1iZXJcIj09dHlwZW9mIGUmJmU+PTEmJmU8PTEyO2lmKCFzKXRocm93IG5ldyBFcnJvcihcIlNvbGFyIG1vbnRoIG91dHNpZGUgcmFuZ2UgMSAtIDEyXCIpO3ZhciBsPVwibnVtYmVyXCI9PXR5cGVvZiByJiZyPj0xJiZyPD0zMTtpZighbCl0aHJvdyBuZXcgRXJyb3IoXCJTb2xhciBkYXkgb3V0c2lkZSByYW5nZSAxIC0gMzFcIik7aT17eWVhcjp0LG1vbnRoOmUsZGF5OnJ9LGE9bnx8e319dmFyIGM9ZltpLnllYXItZlswXV0sdT1pLnllYXI8PDl8aS5tb250aDw8NXxpLmRheTthLnllYXI9dT49Yz9pLnllYXI6aS55ZWFyLTEsYz1mW2EueWVhci1mWzBdXTt2YXIgcCxkPW5ldyBEYXRlKGM+PjkmNDA5NSwoYz4+NSYxNSktMSwzMSZjKSxnPW5ldyBEYXRlKGkueWVhcixpLm1vbnRoLTEsaS5kYXkpO3A9TWF0aC5yb3VuZCgoZy1kKS84NjRlNSk7dmFyIHYsbT1oW2EueWVhci1oWzBdXTtmb3Iodj0wO3Y8MTM7disrKXt2YXIgeT1tJjE8PDEyLXY/MzA6Mjk7aWYocDx5KWJyZWFrO3AtPXl9dmFyIHg9bT4+MTM7IXh8fHY8eD8oYS5pc0ludGVyY2FsYXJ5PSExLGEubW9udGg9MSt2KTp2PT09eD8oYS5pc0ludGVyY2FsYXJ5PSEwLGEubW9udGg9dik6KGEuaXNJbnRlcmNhbGFyeT0hMSxhLm1vbnRoPXYpO3JldHVybiBhLmRheT0xK3AsYX0oZS55ZWFyKCksZS5tb250aCgpLGUuZGF5KCkpLG49dGhpcy50b01vbnRoSW5kZXgoci55ZWFyLHIubW9udGgsci5pc0ludGVyY2FsYXJ5KTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIueWVhcixuLHIuZGF5KX0sZnJvbVN0cmluZzpmdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKHMpLHI9dGhpcy5fdmFsaWRhdGVZZWFyKCtlWzFdKSxuPStlWzJdLGk9ISFlWzNdLGE9dGhpcy50b01vbnRoSW5kZXgocixuLGkpLG89K2VbNF07cmV0dXJuIHRoaXMubmV3RGF0ZShyLGEsbyl9LGFkZDpmdW5jdGlvbih0LGUscil7dmFyIG49dC55ZWFyKCksaT10Lm1vbnRoKCksYT10aGlzLmlzSW50ZXJjYWxhcnlNb250aChuLGkpLHM9dGhpcy50b0NoaW5lc2VNb250aChuLGkpLGw9T2JqZWN0LmdldFByb3RvdHlwZU9mKG8ucHJvdG90eXBlKS5hZGQuY2FsbCh0aGlzLHQsZSxyKTtpZihcInlcIj09PXIpe3ZhciBjPWwueWVhcigpLHU9bC5tb250aCgpLGg9dGhpcy5pc0ludGVyY2FsYXJ5TW9udGgoYyxzKSxmPWEmJmg/dGhpcy50b01vbnRoSW5kZXgoYyxzLCEwKTp0aGlzLnRvTW9udGhJbmRleChjLHMsITEpO2YhPT11JiZsLm1vbnRoKGYpfXJldHVybiBsfX0pO3ZhciBzPS9eXFxzKigtP1xcZFxcZFxcZFxcZHxcXGRcXGQpWy1cXC9dKFxcZD9cXGQpKFtpSV0/KVstXFwvXShcXGQ/XFxkKS9tLGw9L15cXGQ/XFxkW2lJXT8vbSxjPS9eXFx1OTVmMD9cXHU1MzQxP1tcXHU0ZTAwXFx1NGU4Y1xcdTRlMDlcXHU1NmRiXFx1NGU5NFxcdTUxNmRcXHU0ZTAzXFx1NTE2YlxcdTRlNWRdP1xcdTY3MDgvbSx1PS9eXFx1OTVmMD9cXHU1MzQxP1tcXHU0ZTAwXFx1NGU4Y1xcdTRlMDlcXHU1NmRiXFx1NGU5NFxcdTUxNmRcXHU0ZTAzXFx1NTE2YlxcdTRlNWRdPy9tO24uY2FsZW5kYXJzLmNoaW5lc2U9bzt2YXIgaD1bMTg4Nyw1NzgwLDU4MDIsMTkxNTcsMjc0Miw1MDM1OSwxMTk4LDI2NDYsNDYzNzgsNzQ2NiwzNDEyLDMwMTIyLDU0ODIsNjc5NDksMjM5Niw1Mjk0LDQzNTk3LDY3MzIsNjk1NCwzNjE4MSwyNzcyLDQ5NTQsMTg3ODEsMjM5Niw1NDQyNyw1Mjc0LDY3MzAsNDc3ODEsNTgwMCw2ODY4LDIxMjEwLDQ3OTAsNTk3MDMsMjM1MCw1MjcwLDQ2NjY3LDM0MDIsMzQ5NiwzODMyNSwxMzg4LDQ3ODIsMTg3MzUsMjM1MCw1MjM3NCw2ODA0LDc0OTgsNDQ0NTcsMjkwNiwxMzg4LDI5Mjk0LDQ3MDAsNjM3ODksNjQ0Miw2ODA0LDU2MTM4LDU4MDIsMjc3MiwzODIzNSwxMjEwLDQ2OTgsMjI4MjcsNTQxOCw2MzEyNSwzNDc2LDU4MDIsNDM3MDEsMjQ4NCw1MzAyLDI3MjIzLDI2NDYsNzA5NTQsNzQ2NiwzNDEyLDU0Njk4LDU0ODIsMjQxMiwzODA2Miw1Mjk0LDI2MzYsMzIwMzgsNjk1NCw2MDI0NSwyNzcyLDQ4MjYsNDMzNTcsMjM5NCw1Mjc0LDM5NTAxLDY3MzAsNzIzNTcsNTgwMCw1ODQ0LDUzOTc4LDQ3OTAsMjM1OCwzODAzOSw1MjcwLDg3NjI3LDM0MDIsMzQ5Niw1NDcwOCw1NDg0LDQ3ODIsNDMzMTEsMjM1MCwzMjIyLDI3OTc4LDc0OTgsNjg5NjUsMjkwNCw1NDg0LDQ1Njc3LDQ3MDAsNjQ0NCwzOTU3Myw2ODA0LDY5ODYsMTkyODUsMjc3Miw2MjgxMSwxMjEwLDQ2OTgsNDc0MDMsNTQxOCw1NzgwLDM4NTcwLDU1NDYsNzY0NjksMjQyMCw1MzAyLDUxNzk5LDI2NDYsNTQxNCwzNjUwMSwzNDEyLDU1NDYsMTg4NjksMjQxMiw1NDQ0Niw1Mjc2LDY3MzIsNDg0MjIsNjgyMiwyOTAwLDI4MDEwLDQ4MjYsOTI1MDksMjM5NCw1Mjc0LDU1ODgzLDY3MzAsNjgyMCw0Nzk1Niw1ODEyLDI3NzgsMTg3NzksMjM1OCw2MjYxNSw1MjcwLDU0NTAsNDY3NTcsMzQ5Miw1NTU2LDI3MzE4LDQ3MTgsNjc4ODcsMjM1MCwzMjIyLDUyNTU0LDc0OTgsMzQyOCwzODI1Miw1NDY4LDQ3MDAsMzEwMjIsNjQ0NCw2NDE0OSw2ODA0LDY5ODYsNDM4NjEsMjc3Miw1MzM4LDM1NDIxLDI2NTAsNzA5NTUsNTQxOCw1NzgwLDU0OTU0LDU1NDYsMjc0MCwzODA3NCw1MzAyLDI2NDYsMjk5OTEsMzM2Niw2MTAxMSwzNDEyLDU1NDYsNDM0NDUsMjQxMiw1Mjk0LDM1NDA2LDY3MzIsNzI5OTgsNjgyMCw2OTk2LDUyNTg2LDI3NzgsMjM5NiwzODA0NSw1Mjc0LDY2OTgsMjMzMzMsNjgyMCw2NDMzOCw1ODEyLDI3NDYsNDMzNTUsMjM1OCw1MjcwLDM5NDk5LDU0NTAsNzk1MjUsMzQ5Miw1NTQ4XSxmPVsxODg3LDk2NjczMiw5NjcyMzEsOTY3NzMzLDk2ODI2NSw5Njg3NjYsOTY5Mjk3LDk2OTc5OCw5NzAyOTgsOTcwODI5LDk3MTMzMCw5NzE4MzAsOTcyMzYyLDk3Mjg2Myw5NzMzOTUsOTczODk2LDk3NDM5Nyw5NzQ5MjgsOTc1NDI4LDk3NTkyOSw5NzY0NjEsOTc2OTYyLDk3NzQ2Miw5Nzc5OTQsOTc4NDk0LDk3OTAyNiw5Nzk1MjYsOTgwMDI2LDk4MDU1OCw5ODEwNTksOTgxNTU5LDk4MjA5MSw5ODI1OTMsOTgzMTI0LDk4MzYyNCw5ODQxMjQsOTg0NjU2LDk4NTE1Nyw5ODU2NTYsOTg2MTg5LDk4NjY5MCw5ODcxOTEsOTg3NzIyLDk4ODIyMiw5ODg3NTMsOTg5MjU0LDk4OTc1NCw5OTAyODYsOTkwNzg4LDk5MTI4OCw5OTE4MTksOTkyMzE5LDk5Mjg1MSw5OTMzNTIsOTkzODUxLDk5NDM4Myw5OTQ4ODUsOTk1Mzg1LDk5NTkxNyw5OTY0MTgsOTk2OTE4LDk5NzQ1MCw5OTc5NDksOTk4NDgxLDk5ODk4Miw5OTk0ODMsMTAwMDAxNCwxMDAwNTE1LDEwMDEwMTYsMTAwMTU0OCwxMDAyMDQ3LDEwMDI1NzgsMTAwMzA4MCwxMDAzNTgwLDEwMDQxMTEsMTAwNDYxMywxMDA1MTEzLDEwMDU2NDUsMTAwNjE0NiwxMDA2NjQ1LDEwMDcxNzcsMTAwNzY3OCwxMDA4MjA5LDEwMDg3MTAsMTAwOTIxMSwxMDA5NzQzLDEwMTAyNDMsMTAxMDc0MywxMDExMjc1LDEwMTE3NzUsMTAxMjMwNiwxMDEyODA3LDEwMTMzMDgsMTAxMzg0MCwxMDE0MzQxLDEwMTQ4NDEsMTAxNTM3MywxMDE1ODc0LDEwMTY0MDQsMTAxNjkwNSwxMDE3NDA1LDEwMTc5MzcsMTAxODQzOCwxMDE4OTM5LDEwMTk0NzEsMTAxOTk3MiwxMDIwNDcxLDEwMjEwMDIsMTAyMTUwMywxMDIyMDM1LDEwMjI1MzUsMTAyMzAzNiwxMDIzNTY4LDEwMjQwNjksMTAyNDU2OCwxMDI1MTAwLDEwMjU2MDEsMTAyNjEwMiwxMDI2NjMzLDEwMjcxMzMsMTAyNzY2NiwxMDI4MTY3LDEwMjg2NjYsMTAyOTE5OCwxMDI5Njk5LDEwMzAxOTksMTAzMDczMCwxMDMxMjMxLDEwMzE3NjMsMTAzMjI2NCwxMDMyNzY0LDEwMzMyOTYsMTAzMzc5NywxMDM0Mjk3LDEwMzQ4MjgsMTAzNTMyOSwxMDM1ODMwLDEwMzYzNjIsMTAzNjg2MSwxMDM3MzkzLDEwMzc4OTQsMTAzODM5NCwxMDM4OTI1LDEwMzk0MjcsMTAzOTkyNywxMDQwNDU5LDEwNDA5NTksMTA0MTQ5MSwxMDQxOTkyLDEwNDI0OTIsMTA0MzAyMywxMDQzNTI0LDEwNDQwMjQsMTA0NDU1NiwxMDQ1MDU3LDEwNDU1NTgsMTA0NjA5MCwxMDQ2NTkwLDEwNDcxMjEsMTA0NzYyMiwxMDQ4MTIyLDEwNDg2NTQsMTA0OTE1NCwxMDQ5NjU1LDEwNTAxODcsMTA1MDY4OSwxMDUxMjE5LDEwNTE3MjAsMTA1MjIyMCwxMDUyNzUxLDEwNTMyNTIsMTA1Mzc1MiwxMDU0Mjg0LDEwNTQ3ODYsMTA1NTI4NSwxMDU1ODE3LDEwNTYzMTcsMTA1Njg0OSwxMDU3MzQ5LDEwNTc4NTAsMTA1ODM4MiwxMDU4ODgzLDEwNTkzODMsMTA1OTkxNSwxMDYwNDE1LDEwNjA5NDcsMTA2MTQ0NywxMDYxOTQ3LDEwNjI0NzksMTA2Mjk4MSwxMDYzNDgwLDEwNjQwMTIsMTA2NDUxNCwxMDY1MDE0LDEwNjU1NDUsMTA2NjA0NSwxMDY2NTc3LDEwNjcwNzgsMTA2NzU3OCwxMDY4MTEwLDEwNjg2MTEsMTA2OTExMiwxMDY5NjQyLDEwNzAxNDIsMTA3MDY3NCwxMDcxMTc1LDEwNzE2NzUsMTA3MjIwNywxMDcyNzA5LDEwNzMyMDksMTA3Mzc0MCwxMDc0MjQxLDEwNzQ3NDEsMTA3NTI3MywxMDc1NzczLDEwNzYzMDUsMTA3NjgwNywxMDc3MzA4LDEwNzc4MzksMTA3ODM0MCwxMDc4ODQwLDEwNzkzNzIsMTA3OTg3MSwxMDgwNDAzLDEwODA5MDRdfSx7XCIuLi9tYWluXCI6NTU2LFwib2JqZWN0LWFzc2lnblwiOjQ0N31dLDU0MzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuLi9tYWluXCIpLGk9dChcIm9iamVjdC1hc3NpZ25cIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fFwiXCJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZTpcIkNvcHRpY1wiLGpkRXBvY2g6MTgyNTAyOS41LGRheXNQZXJNb250aDpbMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsNV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOntcIlwiOntuYW1lOlwiQ29wdGljXCIsZXBvY2hzOltcIkJBTVwiLFwiQU1cIl0sbW9udGhOYW1lczpbXCJUaG91dFwiLFwiUGFvcGlcIixcIkhhdGhvclwiLFwiS29pYWtcIixcIlRvYmlcIixcIk1lc2hpclwiLFwiUGFyZW1oYXRcIixcIlBhcmVtb3VkZVwiLFwiUGFzaG9uc1wiLFwiUGFvbmlcIixcIkVwaXBcIixcIk1lc29yaVwiLFwiUGkgS29naSBFbmF2b3RcIl0sbW9udGhOYW1lc1Nob3J0OltcIlRob1wiLFwiUGFvXCIsXCJIYXRoXCIsXCJLb2lcIixcIlRvYlwiLFwiTWVzaFwiLFwiUGF0XCIsXCJQYWRcIixcIlBhc2hcIixcIlBhb1wiLFwiRXBpXCIsXCJNZXNvXCIsXCJQaUtcIl0sZGF5TmFtZXM6W1wiVGt5cmlha2FcIixcIlBlc25hdVwiLFwiUHNob21lbnRcIixcIlBlZnRvb3VcIixcIlB0aW91XCIsXCJQc29vdVwiLFwiUHNhYmJhdG9uXCJdLGRheU5hbWVzU2hvcnQ6W1wiVGt5XCIsXCJQZXNcIixcIlBzaFwiLFwiUGVmXCIsXCJQdGlcIixcIlBzb1wiLFwiUHNhXCJdLGRheU5hbWVzTWluOltcIlRrXCIsXCJQZXNcIixcIlBzaFwiLFwiUGVmXCIsXCJQdFwiLFwiUHNvXCIsXCJQc2FcIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDpcImRkL21tL3l5eXlcIixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybih0PWUueWVhcigpKyhlLnllYXIoKTwwPzE6MCkpJTQ9PTN8fHQlND09LTF9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXJ8fG4ucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWRZZWFyKSwxM30sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksXCJkXCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDEzPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4odD1pLnllYXIoKSk8MCYmdCsrLGkuZGF5KCkrMzAqKGkubW9udGgoKS0xKSszNjUqKHQtMSkrTWF0aC5mbG9vcih0LzQpK3RoaXMuamRFcG9jaC0xfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcih0KSsuNS10aGlzLmpkRXBvY2gscj1NYXRoLmZsb29yKChlLU1hdGguZmxvb3IoKGUrMzY2KS8xNDYxKSkvMzY1KSsxO3I8PTAmJnItLSxlPU1hdGguZmxvb3IodCkrLjUtdGhpcy5uZXdEYXRlKHIsMSwxKS50b0pEKCk7dmFyIG49TWF0aC5mbG9vcihlLzMwKSsxLGk9ZS0zMCoobi0xKSsxO3JldHVybiB0aGlzLm5ld0RhdGUocixuLGkpfX0pLG4uY2FsZW5kYXJzLmNvcHRpYz1hfSx7XCIuLi9tYWluXCI6NTU2LFwib2JqZWN0LWFzc2lnblwiOjQ0N31dLDU0NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuLi9tYWluXCIpLGk9dChcIm9iamVjdC1hc3NpZ25cIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fFwiXCJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZTpcIkRpc2N3b3JsZFwiLGpkRXBvY2g6MTcyMTQyNS41LGRheXNQZXJNb250aDpbMTYsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzJdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7XCJcIjp7bmFtZTpcIkRpc2N3b3JsZFwiLGVwb2NoczpbXCJCVUNcIixcIlVDXCJdLG1vbnRoTmFtZXM6W1wiSWNrXCIsXCJPZmZsZVwiLFwiRmVicnVhcnlcIixcIk1hcmNoXCIsXCJBcHJpbFwiLFwiTWF5XCIsXCJKdW5lXCIsXCJHcnVuZVwiLFwiQXVndXN0XCIsXCJTcHVuZVwiLFwiU2VrdG9iZXJcIixcIkVtYmVyXCIsXCJEZWNlbWJlclwiXSxtb250aE5hbWVzU2hvcnQ6W1wiSWNrXCIsXCJPZmZcIixcIkZlYlwiLFwiTWFyXCIsXCJBcHJcIixcIk1heVwiLFwiSnVuXCIsXCJHcnVcIixcIkF1Z1wiLFwiU3B1XCIsXCJTZWtcIixcIkVtYlwiLFwiRGVjXCJdLGRheU5hbWVzOltcIlN1bmRheVwiLFwiT2N0ZWRheVwiLFwiTW9uZGF5XCIsXCJUdWVzZGF5XCIsXCJXZWRuZXNkYXlcIixcIlRodXJzZGF5XCIsXCJGcmlkYXlcIixcIlNhdHVyZGF5XCJdLGRheU5hbWVzU2hvcnQ6W1wiU3VuXCIsXCJPY3RcIixcIk1vblwiLFwiVHVlXCIsXCJXZWRcIixcIlRodVwiLFwiRnJpXCIsXCJTYXRcIl0sZGF5TmFtZXNNaW46W1wiU3VcIixcIk9jXCIsXCJNb1wiLFwiVHVcIixcIldlXCIsXCJUaFwiLFwiRnJcIixcIlNhXCJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6XCJ5eXl5L21tL2RkXCIsZmlyc3REYXk6Mixpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksITF9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLDEzfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksNDAwfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSxcImRcIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS84KSsxfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXX0sZGF5c0luV2VlazpmdW5jdGlvbigpe3JldHVybiA4fSxkYXlPZldlZWs6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKS5kYXkoKSsxKSU4fSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmRheU9mV2Vlayh0LGUscik7cmV0dXJuIG4+PTImJm48PTZ9LGV4dHJhSW5mbzpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJue2NlbnR1cnk6b1tNYXRoLmZsb29yKChpLnllYXIoKS0xKS8xMDApKzFdfHxcIlwifX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuIHQ9aS55ZWFyKCkrKGkueWVhcigpPDA/MTowKSxlPWkubW9udGgoKSwocj1pLmRheSgpKSsoZT4xPzE2OjApKyhlPjI/MzIqKGUtMik6MCkrNDAwKih0LTEpK3RoaXMuamRFcG9jaC0xfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dD1NYXRoLmZsb29yKHQrLjUpLU1hdGguZmxvb3IodGhpcy5qZEVwb2NoKS0xO3ZhciBlPU1hdGguZmxvb3IodC80MDApKzE7dC09NDAwKihlLTEpLHQrPXQ+MTU/MTY6MDt2YXIgcj1NYXRoLmZsb29yKHQvMzIpKzEsbj10LTMyKihyLTEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShlPD0wP2UtMTplLHIsbil9fSk7dmFyIG89ezIwOlwiRnJ1aXRiYXRcIiwyMTpcIkFuY2hvdnlcIn07bi5jYWxlbmRhcnMuZGlzY3dvcmxkPWF9LHtcIi4uL21haW5cIjo1NTYsXCJvYmplY3QtYXNzaWduXCI6NDQ3fV0sNTQ1OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcIi4uL21haW5cIiksaT10KFwib2JqZWN0LWFzc2lnblwiKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8XCJcIl18fHRoaXMucmVnaW9uYWxPcHRpb25zW1wiXCJdfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOlwiRXRoaW9waWFuXCIsamRFcG9jaDoxNzI0MjIwLjUsZGF5c1Blck1vbnRoOlszMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCw1XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6e1wiXCI6e25hbWU6XCJFdGhpb3BpYW5cIixlcG9jaHM6W1wiQkVFXCIsXCJFRVwiXSxtb250aE5hbWVzOltcIk1lc2tlcmVtXCIsXCJUaWtlbWV0XCIsXCJIaWRhclwiLFwiVGFoZXNhc1wiLFwiVGlyXCIsXCJZZWthdGl0XCIsXCJNZWdhYml0XCIsXCJNaWF6aWFcIixcIkdlbmJvdFwiLFwiU2VuZVwiLFwiSGFtbGVcIixcIk5laGFzZVwiLFwiUGFndW1lXCJdLG1vbnRoTmFtZXNTaG9ydDpbXCJNZXNcIixcIlRpa1wiLFwiSGlkXCIsXCJUYWhcIixcIlRpclwiLFwiWWVrXCIsXCJNZWdcIixcIk1pYVwiLFwiR2VuXCIsXCJTZW5cIixcIkhhbVwiLFwiTmVoXCIsXCJQYWdcIl0sZGF5TmFtZXM6W1wiRWh1ZFwiLFwiU2Vnbm9cIixcIk1ha3NlZ25vXCIsXCJJcm9iXCIsXCJIYW11c1wiLFwiQXJiXCIsXCJLaWRhbWVcIl0sZGF5TmFtZXNTaG9ydDpbXCJFaHVcIixcIlNlZ1wiLFwiTWFrXCIsXCJJcm9cIixcIkhhbVwiLFwiQXJiXCIsXCJLaWRcIl0sZGF5TmFtZXNNaW46W1wiRWhcIixcIlNlXCIsXCJNYVwiLFwiSXJcIixcIkhhXCIsXCJBclwiLFwiS2lcIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDpcImRkL21tL3l5eXlcIixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybih0PWUueWVhcigpKyhlLnllYXIoKTwwPzE6MCkpJTQ9PTN8fHQlND09LTF9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXJ8fG4ucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWRZZWFyKSwxM30sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksXCJkXCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDEzPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4odD1pLnllYXIoKSk8MCYmdCsrLGkuZGF5KCkrMzAqKGkubW9udGgoKS0xKSszNjUqKHQtMSkrTWF0aC5mbG9vcih0LzQpK3RoaXMuamRFcG9jaC0xfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcih0KSsuNS10aGlzLmpkRXBvY2gscj1NYXRoLmZsb29yKChlLU1hdGguZmxvb3IoKGUrMzY2KS8xNDYxKSkvMzY1KSsxO3I8PTAmJnItLSxlPU1hdGguZmxvb3IodCkrLjUtdGhpcy5uZXdEYXRlKHIsMSwxKS50b0pEKCk7dmFyIG49TWF0aC5mbG9vcihlLzMwKSsxLGk9ZS0zMCoobi0xKSsxO3JldHVybiB0aGlzLm5ld0RhdGUocixuLGkpfX0pLG4uY2FsZW5kYXJzLmV0aGlvcGlhbj1hfSx7XCIuLi9tYWluXCI6NTU2LFwib2JqZWN0LWFzc2lnblwiOjQ0N31dLDU0NjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuLi9tYWluXCIpLGk9dChcIm9iamVjdC1hc3NpZ25cIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fFwiXCJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHQtZSpNYXRoLmZsb29yKHQvZSl9YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6XCJIZWJyZXdcIixqZEVwb2NoOjM0Nzk5NS41LGRheXNQZXJNb250aDpbMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMjldLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDo3LG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7XCJcIjp7bmFtZTpcIkhlYnJld1wiLGVwb2NoczpbXCJCQU1cIixcIkFNXCJdLG1vbnRoTmFtZXM6W1wiTmlzYW5cIixcIkl5YXJcIixcIlNpdmFuXCIsXCJUYW1tdXpcIixcIkF2XCIsXCJFbHVsXCIsXCJUaXNocmVpXCIsXCJDaGVzaHZhblwiLFwiS2lzbGV2XCIsXCJUZXZldFwiLFwiU2hldmF0XCIsXCJBZGFyXCIsXCJBZGFyIElJXCJdLG1vbnRoTmFtZXNTaG9ydDpbXCJOaXNcIixcIkl5YVwiLFwiU2l2XCIsXCJUYW1cIixcIkF2XCIsXCJFbHVcIixcIlRpc1wiLFwiQ2hlXCIsXCJLaXNcIixcIlRldlwiLFwiU2hlXCIsXCJBZGFcIixcIkFkMlwiXSxkYXlOYW1lczpbXCJZb20gUmlzaG9uXCIsXCJZb20gU2hlbmlcIixcIllvbSBTaGxpc2hpXCIsXCJZb20gUmV2aSdpXCIsXCJZb20gQ2hhbWlzaGlcIixcIllvbSBTaGlzaGlcIixcIllvbSBTaGFiYmF0XCJdLGRheU5hbWVzU2hvcnQ6W1wiUmlzXCIsXCJTaGVcIixcIlNobFwiLFwiUmV2XCIsXCJDaGFcIixcIlNoaVwiLFwiU2hhXCJdLGRheU5hbWVzTWluOltcIlJpXCIsXCJTaGVcIixcIlNobFwiLFwiUmVcIixcIkNoXCIsXCJTaGlcIixcIlNoYVwiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OlwiZGQvbW0veXl5eVwiLGZpcnN0RGF5OjAsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7cmV0dXJuIHRoaXMuX2xlYXBZZWFyKGUueWVhcigpKX0sX2xlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiBvKDcqKHQ9dDwwP3QrMTp0KSsxLDE5KTw3fSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKSx0aGlzLl9sZWFwWWVhcih0LnllYXI/dC55ZWFyKCk6dCk/MTM6MTJ9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLFwiZFwiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLnllYXIoKSx0aGlzLnRvSkQoLTE9PT10PzE6dCsxLDcsMSktdGhpcy50b0pEKHQsNywxKX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC55ZWFyJiYoZT10Lm1vbnRoKCksdD10LnllYXIoKSksdGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKSwxMj09PWUmJnRoaXMubGVhcFllYXIodCk/MzA6OD09PWUmJjU9PT1vKHRoaXMuZGF5c0luWWVhcih0KSwxMCk/MzA6OT09PWUmJjM9PT1vKHRoaXMuZGF5c0luWWVhcih0KSwxMCk/Mjk6dGhpcy5kYXlzUGVyTW9udGhbZS0xXX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIDYhPT10aGlzLmRheU9mV2Vlayh0LGUscil9LGV4dHJhSW5mbzpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJue3llYXJUeXBlOih0aGlzLmxlYXBZZWFyKGkpP1wiZW1ib2xpc21pY1wiOlwiY29tbW9uXCIpK1wiIFwiK1tcImRlZmljaWVudFwiLFwicmVndWxhclwiLFwiY29tcGxldGVcIl1bdGhpcy5kYXlzSW5ZZWFyKGkpJTEwLTNdfX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7dD1pLnllYXIoKSxlPWkubW9udGgoKSxyPWkuZGF5KCk7dmFyIGE9dDw9MD90KzE6dCxvPXRoaXMuamRFcG9jaCt0aGlzLl9kZWxheTEoYSkrdGhpcy5fZGVsYXkyKGEpK3IrMTtpZihlPDcpe2Zvcih2YXIgcz03O3M8PXRoaXMubW9udGhzSW5ZZWFyKHQpO3MrKylvKz10aGlzLmRheXNJbk1vbnRoKHQscyk7Zm9yKHM9MTtzPGU7cysrKW8rPXRoaXMuZGF5c0luTW9udGgodCxzKX1lbHNlIGZvcihzPTc7czxlO3MrKylvKz10aGlzLmRheXNJbk1vbnRoKHQscyk7cmV0dXJuIG99LF9kZWxheTE6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcigoMjM1KnQtMjM0KS8xOSkscj0xMjA4NCsxMzc1MyplLG49MjkqZStNYXRoLmZsb29yKHIvMjU5MjApO3JldHVybiBvKDMqKG4rMSksNyk8MyYmbisrLG59LF9kZWxheTI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZGVsYXkxKHQtMSkscj10aGlzLl9kZWxheTEodCk7cmV0dXJuIHRoaXMuX2RlbGF5MSh0KzEpLXI9PTM1Nj8yOnItZT09MzgyPzE6MH0sZnJvbUpEOmZ1bmN0aW9uKHQpe3Q9TWF0aC5mbG9vcih0KSsuNTtmb3IodmFyIGU9TWF0aC5mbG9vcig5ODQ5NioodC10aGlzLmpkRXBvY2gpLzM1OTc1MzUxKS0xO3Q+PXRoaXMudG9KRCgtMT09PWU/MTplKzEsNywxKTspZSsrO2Zvcih2YXIgcj10PHRoaXMudG9KRChlLDEsMSk/NzoxO3Q+dGhpcy50b0pEKGUscix0aGlzLmRheXNJbk1vbnRoKGUscikpOylyKys7dmFyIG49dC10aGlzLnRvSkQoZSxyLDEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShlLHIsbil9fSksbi5jYWxlbmRhcnMuaGVicmV3PWF9LHtcIi4uL21haW5cIjo1NTYsXCJvYmplY3QtYXNzaWduXCI6NDQ3fV0sNTQ3OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcIi4uL21haW5cIiksaT10KFwib2JqZWN0LWFzc2lnblwiKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8XCJcIl18fHRoaXMucmVnaW9uYWxPcHRpb25zW1wiXCJdfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOlwiSXNsYW1pY1wiLGpkRXBvY2g6MTk0ODQzOS41LGRheXNQZXJNb250aDpbMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjldLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7XCJcIjp7bmFtZTpcIklzbGFtaWNcIixlcG9jaHM6W1wiQkhcIixcIkFIXCJdLG1vbnRoTmFtZXM6W1wiTXVoYXJyYW1cIixcIlNhZmFyXCIsXCJSYWJpJyBhbC1hd3dhbFwiLFwiUmFiaScgYWwtdGhhbmlcIixcIkp1bWFkYSBhbC1hd3dhbFwiLFwiSnVtYWRhIGFsLXRoYW5pXCIsXCJSYWphYlwiLFwiU2hhJ2FiYW5cIixcIlJhbWFkYW5cIixcIlNoYXd3YWxcIixcIkRodSBhbC1RaSdkYWhcIixcIkRodSBhbC1IaWpqYWhcIl0sbW9udGhOYW1lc1Nob3J0OltcIk11aFwiLFwiU2FmXCIsXCJSYWIxXCIsXCJSYWIyXCIsXCJKdW0xXCIsXCJKdW0yXCIsXCJSYWpcIixcIlNoYSdcIixcIlJhbVwiLFwiU2hhd1wiLFwiRGh1UVwiLFwiRGh1SFwiXSxkYXlOYW1lczpbXCJZYXdtIGFsLWFoYWRcIixcIllhd20gYWwtaXRobmF5blwiLFwiWWF3bSBhdGgtdGh1bGFhdGhhYSdcIixcIllhd20gYWwtYXJiaSdhYSdcIixcIllhd20gYWwta2hhbVxcdTAxMmJzXCIsXCJZYXdtIGFsLWp1bSdhXCIsXCJZYXdtIGFzLXNhYnRcIl0sZGF5TmFtZXNTaG9ydDpbXCJBaGFcIixcIkl0aFwiLFwiVGh1XCIsXCJBcmJcIixcIktoYVwiLFwiSnVtXCIsXCJTYWJcIl0sZGF5TmFtZXNNaW46W1wiQWhcIixcIkl0XCIsXCJUaFwiLFwiQXJcIixcIktoXCIsXCJKdVwiLFwiU2FcIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDpcInl5eXkvbW0vZGRcIixmaXJzdERheTo2LGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuKDExKnRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCkrMTQpJTMwPDExfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSxcImRcIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlYXBZZWFyKHQpPzM1NTozNTR9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIDUhPT10aGlzLmRheU9mV2Vlayh0LGUscil9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybiB0PWkueWVhcigpLGU9aS5tb250aCgpLHQ9dDw9MD90KzE6dCwocj1pLmRheSgpKStNYXRoLmNlaWwoMjkuNSooZS0xKSkrMzU0Kih0LTEpK01hdGguZmxvb3IoKDMrMTEqdCkvMzApK3RoaXMuamRFcG9jaC0xfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dD1NYXRoLmZsb29yKHQpKy41O3ZhciBlPU1hdGguZmxvb3IoKDMwKih0LXRoaXMuamRFcG9jaCkrMTA2NDYpLzEwNjMxKTtlPWU8PTA/ZS0xOmU7dmFyIHI9TWF0aC5taW4oMTIsTWF0aC5jZWlsKCh0LTI5LXRoaXMudG9KRChlLDEsMSkpLzI5LjUpKzEpLG49dC10aGlzLnRvSkQoZSxyLDEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShlLHIsbil9fSksbi5jYWxlbmRhcnMuaXNsYW1pYz1hfSx7XCIuLi9tYWluXCI6NTU2LFwib2JqZWN0LWFzc2lnblwiOjQ0N31dLDU0ODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuLi9tYWluXCIpLGk9dChcIm9iamVjdC1hc3NpZ25cIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fFwiXCJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZTpcIkp1bGlhblwiLGpkRXBvY2g6MTcyMTQyMy41LGRheXNQZXJNb250aDpbMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7XCJcIjp7bmFtZTpcIkp1bGlhblwiLGVwb2NoczpbXCJCQ1wiLFwiQURcIl0sbW9udGhOYW1lczpbXCJKYW51YXJ5XCIsXCJGZWJydWFyeVwiLFwiTWFyY2hcIixcIkFwcmlsXCIsXCJNYXlcIixcIkp1bmVcIixcIkp1bHlcIixcIkF1Z3VzdFwiLFwiU2VwdGVtYmVyXCIsXCJPY3RvYmVyXCIsXCJOb3ZlbWJlclwiLFwiRGVjZW1iZXJcIl0sbW9udGhOYW1lc1Nob3J0OltcIkphblwiLFwiRmViXCIsXCJNYXJcIixcIkFwclwiLFwiTWF5XCIsXCJKdW5cIixcIkp1bFwiLFwiQXVnXCIsXCJTZXBcIixcIk9jdFwiLFwiTm92XCIsXCJEZWNcIl0sZGF5TmFtZXM6W1wiU3VuZGF5XCIsXCJNb25kYXlcIixcIlR1ZXNkYXlcIixcIldlZG5lc2RheVwiLFwiVGh1cnNkYXlcIixcIkZyaWRheVwiLFwiU2F0dXJkYXlcIl0sZGF5TmFtZXNTaG9ydDpbXCJTdW5cIixcIk1vblwiLFwiVHVlXCIsXCJXZWRcIixcIlRodVwiLFwiRnJpXCIsXCJTYXRcIl0sZGF5TmFtZXNNaW46W1wiU3VcIixcIk1vXCIsXCJUdVwiLFwiV2VcIixcIlRoXCIsXCJGclwiLFwiU2FcIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDpcIm1tL2RkL3l5eXlcIixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybih0PWUueWVhcigpPDA/ZS55ZWFyKCkrMTplLnllYXIoKSklND09MH0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoNC0obi5kYXlPZldlZWsoKXx8NyksXCJkXCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybiB0PWkueWVhcigpLGU9aS5tb250aCgpLHI9aS5kYXkoKSx0PDAmJnQrKyxlPD0yJiYodC0tLGUrPTEyKSxNYXRoLmZsb29yKDM2NS4yNSoodCs0NzE2KSkrTWF0aC5mbG9vcigzMC42MDAxKihlKzEpKStyLTE1MjQuNX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodCsuNSkrMTUyNCxyPU1hdGguZmxvb3IoKGUtMTIyLjEpLzM2NS4yNSksbj1NYXRoLmZsb29yKDM2NS4yNSpyKSxpPU1hdGguZmxvb3IoKGUtbikvMzAuNjAwMSksYT1pLU1hdGguZmxvb3IoaTwxND8xOjEzKSxvPXItTWF0aC5mbG9vcihhPjI/NDcxNjo0NzE1KSxzPWUtbi1NYXRoLmZsb29yKDMwLjYwMDEqaSk7cmV0dXJuIG88PTAmJm8tLSx0aGlzLm5ld0RhdGUobyxhLHMpfX0pLG4uY2FsZW5kYXJzLmp1bGlhbj1hfSx7XCIuLi9tYWluXCI6NTU2LFwib2JqZWN0LWFzc2lnblwiOjQ0N31dLDU0OTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuLi9tYWluXCIpLGk9dChcIm9iamVjdC1hc3NpZ25cIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fFwiXCJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHQtZSpNYXRoLmZsb29yKHQvZSl9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBvKHQtMSxlKSsxfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOlwiTWF5YW5cIixqZEVwb2NoOjU4NDI4Mi41LGhhc1llYXJaZXJvOiEwLG1pbk1vbnRoOjAsZmlyc3RNb250aDowLG1pbkRheTowLHJlZ2lvbmFsT3B0aW9uczp7XCJcIjp7bmFtZTpcIk1heWFuXCIsZXBvY2hzOltcIlwiLFwiXCJdLG1vbnRoTmFtZXM6W1wiMFwiLFwiMVwiLFwiMlwiLFwiM1wiLFwiNFwiLFwiNVwiLFwiNlwiLFwiN1wiLFwiOFwiLFwiOVwiLFwiMTBcIixcIjExXCIsXCIxMlwiLFwiMTNcIixcIjE0XCIsXCIxNVwiLFwiMTZcIixcIjE3XCJdLG1vbnRoTmFtZXNTaG9ydDpbXCIwXCIsXCIxXCIsXCIyXCIsXCIzXCIsXCI0XCIsXCI1XCIsXCI2XCIsXCI3XCIsXCI4XCIsXCI5XCIsXCIxMFwiLFwiMTFcIixcIjEyXCIsXCIxM1wiLFwiMTRcIixcIjE1XCIsXCIxNlwiLFwiMTdcIl0sZGF5TmFtZXM6W1wiMFwiLFwiMVwiLFwiMlwiLFwiM1wiLFwiNFwiLFwiNVwiLFwiNlwiLFwiN1wiLFwiOFwiLFwiOVwiLFwiMTBcIixcIjExXCIsXCIxMlwiLFwiMTNcIixcIjE0XCIsXCIxNVwiLFwiMTZcIixcIjE3XCIsXCIxOFwiLFwiMTlcIl0sZGF5TmFtZXNTaG9ydDpbXCIwXCIsXCIxXCIsXCIyXCIsXCIzXCIsXCI0XCIsXCI1XCIsXCI2XCIsXCI3XCIsXCI4XCIsXCI5XCIsXCIxMFwiLFwiMTFcIixcIjEyXCIsXCIxM1wiLFwiMTRcIixcIjE1XCIsXCIxNlwiLFwiMTdcIixcIjE4XCIsXCIxOVwiXSxkYXlOYW1lc01pbjpbXCIwXCIsXCIxXCIsXCIyXCIsXCIzXCIsXCI0XCIsXCI1XCIsXCI2XCIsXCI3XCIsXCI4XCIsXCI5XCIsXCIxMFwiLFwiMTFcIixcIjEyXCIsXCIxM1wiLFwiMTRcIixcIjE1XCIsXCIxNlwiLFwiMTdcIixcIjE4XCIsXCIxOVwiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OlwiWVlZWS5tLmRcIixmaXJzdERheTowLGlzUlRMOiExLGhhYWJNb250aHM6W1wiUG9wXCIsXCJVb1wiLFwiWmlwXCIsXCJab3R6XCIsXCJUemVjXCIsXCJYdWxcIixcIllheGtpblwiLFwiTW9sXCIsXCJDaGVuXCIsXCJZYXhcIixcIlphY1wiLFwiQ2VoXCIsXCJNYWNcIixcIkthbmtpblwiLFwiTXVhblwiLFwiUGF4XCIsXCJLYXlhYlwiLFwiQ3Vta3VcIixcIlVheWViXCJdLHR6b2xraW5Nb250aHM6W1wiSW1peFwiLFwiSWtcIixcIkFrYmFsXCIsXCJLYW5cIixcIkNoaWNjaGFuXCIsXCJDaW1pXCIsXCJNYW5pa1wiLFwiTGFtYXRcIixcIk11bHVjXCIsXCJPY1wiLFwiQ2h1ZW5cIixcIkViXCIsXCJCZW5cIixcIkl4XCIsXCJNZW5cIixcIkNpYlwiLFwiQ2FiYW5cIixcIkV0em5hYlwiLFwiQ2F1YWNcIixcIkFoYXVcIl19fSxsZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLCExfSxmb3JtYXRZZWFyOmZ1bmN0aW9uKHQpe3Q9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLnllYXIoKTt2YXIgZT1NYXRoLmZsb29yKHQvNDAwKTtyZXR1cm4gdCU9NDAwLHQrPXQ8MD80MDA6MCxlK1wiLlwiK01hdGguZmxvb3IodC8yMCkrXCIuXCIrdCUyMH0sZm9yWWVhcjpmdW5jdGlvbih0KXtpZigodD10LnNwbGl0KFwiLlwiKSkubGVuZ3RoPDMpdGhyb3dcIkludmFsaWQgTWF5YW4geWVhclwiO2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49cGFyc2VJbnQodFtyXSwxMCk7aWYoTWF0aC5hYnMobik+MTl8fHI+MCYmbjwwKXRocm93XCJJbnZhbGlkIE1heWFuIHllYXJcIjtlPTIwKmUrbn1yZXR1cm4gZX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksMTh9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKSwwfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksMzYwfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpLDIwfSxkYXlzSW5XZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDV9LGRheU9mV2VlazpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpLmRheSgpfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSksITB9LGV4dHJhSW5mbzpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSkudG9KRCgpLGE9dGhpcy5fdG9IYWFiKGkpLG89dGhpcy5fdG9Uem9sa2luKGkpO3JldHVybntoYWFiTW9udGhOYW1lOnRoaXMubG9jYWwuaGFhYk1vbnRoc1thWzBdLTFdLGhhYWJNb250aDphWzBdLGhhYWJEYXk6YVsxXSx0em9sa2luRGF5TmFtZTp0aGlzLmxvY2FsLnR6b2xraW5Nb250aHNbb1swXS0xXSx0em9sa2luRGF5Om9bMF0sdHpvbGtpblRyZWNlbmE6b1sxXX19LF90b0hhYWI6ZnVuY3Rpb24odCl7dmFyIGU9bygodC09dGhpcy5qZEVwb2NoKSs4KzM0MCwzNjUpO3JldHVybltNYXRoLmZsb29yKGUvMjApKzEsbyhlLDIwKV19LF90b1R6b2xraW46ZnVuY3Rpb24odCl7cmV0dXJuW3MoKHQtPXRoaXMuamRFcG9jaCkrMjAsMjApLHModCs0LDEzKV19LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybiBpLmRheSgpKzIwKmkubW9udGgoKSszNjAqaS55ZWFyKCkrdGhpcy5qZEVwb2NofSxmcm9tSkQ6ZnVuY3Rpb24odCl7dD1NYXRoLmZsb29yKHQpKy41LXRoaXMuamRFcG9jaDt2YXIgZT1NYXRoLmZsb29yKHQvMzYwKTt0JT0zNjAsdCs9dDwwPzM2MDowO3ZhciByPU1hdGguZmxvb3IodC8yMCksbj10JTIwO3JldHVybiB0aGlzLm5ld0RhdGUoZSxyLG4pfX0pLG4uY2FsZW5kYXJzLm1heWFuPWF9LHtcIi4uL21haW5cIjo1NTYsXCJvYmplY3QtYXNzaWduXCI6NDQ3fV0sNTUwOltmdW5jdGlvbih0LGUscil7dmFyIG49dChcIi4uL21haW5cIiksaT10KFwib2JqZWN0LWFzc2lnblwiKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8XCJcIl18fHRoaXMucmVnaW9uYWxPcHRpb25zW1wiXCJdfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcjt2YXIgbz1uLmluc3RhbmNlKFwiZ3JlZ29yaWFuXCIpO2koYS5wcm90b3R5cGUse25hbWU6XCJOYW5ha3NoYWhpXCIsamRFcG9jaDoyMjU3NjczLjUsZGF5c1Blck1vbnRoOlszMSwzMSwzMSwzMSwzMSwzMCwzMCwzMCwzMCwzMCwzMCwzMF0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOntcIlwiOntuYW1lOlwiTmFuYWtzaGFoaVwiLGVwb2NoczpbXCJCTlwiLFwiQU5cIl0sbW9udGhOYW1lczpbXCJDaGV0XCIsXCJWYWlzYWtoXCIsXCJKZXRoXCIsXCJIYXJoXCIsXCJTYXdhblwiLFwiQmhhZG9uXCIsXCJBc3N1XCIsXCJLYXRha1wiLFwiTWFnaGFyXCIsXCJQb2hcIixcIk1hZ2hcIixcIlBoYWd1blwiXSxtb250aE5hbWVzU2hvcnQ6W1wiQ2hlXCIsXCJWYWlcIixcIkpldFwiLFwiSGFyXCIsXCJTYXdcIixcIkJoYVwiLFwiQXNzXCIsXCJLYXRcIixcIk1nclwiLFwiUG9oXCIsXCJNZ2hcIixcIlBoYVwiXSxkYXlOYW1lczpbXCJTb212YWFyXCIsXCJNYW5nYWx2YXJcIixcIkJ1ZGh2YWFyXCIsXCJWZWVydmFhclwiLFwiU2h1a2FydmFhclwiLFwiU2FuaWNoYXJ2YWFyXCIsXCJFdHZhYXJcIl0sZGF5TmFtZXNTaG9ydDpbXCJTb21cIixcIk1hbmdhbFwiLFwiQnVkaFwiLFwiVmVlclwiLFwiU2h1a2FyXCIsXCJTYW5pY2hhclwiLFwiRXRcIl0sZGF5TmFtZXNNaW46W1wiU29cIixcIk1hXCIsXCJCdVwiLFwiVmVcIixcIlNoXCIsXCJTYVwiLFwiRXRcIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDpcImRkLW1tLXl5eXlcIixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXJ8fG4ucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWRZZWFyKTtyZXR1cm4gby5sZWFwWWVhcihlLnllYXIoKSsoZS55ZWFyKCk8MT8xOjApKzE0NjkpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgxLShuLmRheU9mV2VlaygpfHw3KSxcImRcIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMTI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZE1vbnRoKTsodD1pLnllYXIoKSk8MCYmdCsrO2Zvcih2YXIgYT1pLmRheSgpLHM9MTtzPGkubW9udGgoKTtzKyspYSs9dGhpcy5kYXlzUGVyTW9udGhbcy0xXTtyZXR1cm4gYStvLnRvSkQodCsxNDY4LDMsMTMpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dD1NYXRoLmZsb29yKHQrLjUpO2Zvcih2YXIgZT1NYXRoLmZsb29yKCh0LSh0aGlzLmpkRXBvY2gtMSkpLzM2Nik7dD49dGhpcy50b0pEKGUrMSwxLDEpOyllKys7Zm9yKHZhciByPXQtTWF0aC5mbG9vcih0aGlzLnRvSkQoZSwxLDEpKy41KSsxLG49MTtyPnRoaXMuZGF5c0luTW9udGgoZSxuKTspci09dGhpcy5kYXlzSW5Nb250aChlLG4pLG4rKztyZXR1cm4gdGhpcy5uZXdEYXRlKGUsbixyKX19KSxuLmNhbGVuZGFycy5uYW5ha3NoYWhpPWF9LHtcIi4uL21haW5cIjo1NTYsXCJvYmplY3QtYXNzaWduXCI6NDQ3fV0sNTUxOltmdW5jdGlvbih0LGUscil7dmFyIG49dChcIi4uL21haW5cIiksaT10KFwib2JqZWN0LWFzc2lnblwiKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8XCJcIl18fHRoaXMucmVnaW9uYWxPcHRpb25zW1wiXCJdfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOlwiTmVwYWxpXCIsamRFcG9jaDoxNzAwNzA5LjUsZGF5c1Blck1vbnRoOlszMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEsZGF5c1BlclllYXI6MzY1LHJlZ2lvbmFsT3B0aW9uczp7XCJcIjp7bmFtZTpcIk5lcGFsaVwiLGVwb2NoczpbXCJCQlNcIixcIkFCU1wiXSxtb250aE5hbWVzOltcIkJhaXNha2hcIixcIkplc3RoYVwiLFwiQXNoYWRoXCIsXCJTaHJhd2FuXCIsXCJCaGFkcmFcIixcIkFzaHdpblwiLFwiS2FydGlrXCIsXCJNYW5nc2lyXCIsXCJQYXVzaFwiLFwiTWFuZ2hcIixcIkZhbGd1blwiLFwiQ2hhaXRyYVwiXSxtb250aE5hbWVzU2hvcnQ6W1wiQmFpXCIsXCJKZVwiLFwiQXNcIixcIlNocmFcIixcIkJoYVwiLFwiQXNoXCIsXCJLYXJcIixcIk1hbmdcIixcIlBhdVwiLFwiTWFcIixcIkZhbFwiLFwiQ2hhaVwiXSxkYXlOYW1lczpbXCJBYWl0YWJhYXJcIixcIlNvbWJhYXJcIixcIk1hbmdsYmFhclwiLFwiQnVkaGFiYWFyXCIsXCJCaWhpYmFhclwiLFwiU2h1a3JhYmFhclwiLFwiU2hhbmliYWFyXCJdLGRheU5hbWVzU2hvcnQ6W1wiQWFpdGFcIixcIlNvbVwiLFwiTWFuZ2xcIixcIkJ1ZGhhXCIsXCJCaWhpXCIsXCJTaHVrcmFcIixcIlNoYW5pXCJdLGRheU5hbWVzTWluOltcIkFhaVwiLFwiU29cIixcIk1hblwiLFwiQnVcIixcIkJpXCIsXCJTaHVcIixcIlNoYVwiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OlwiZGQvbW0veXl5eVwiLGZpcnN0RGF5OjEsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kYXlzSW5ZZWFyKHQpIT09dGhpcy5kYXlzUGVyWWVhcn0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksXCJkXCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtpZih0PXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCksXCJ1bmRlZmluZWRcIj09dHlwZW9mIHRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbdF0pcmV0dXJuIHRoaXMuZGF5c1BlclllYXI7Zm9yKHZhciBlPTAscj10aGlzLm1pbk1vbnRoO3I8PTEyO3IrKyllKz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3RdW3JdO3JldHVybiBlfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3JldHVybiB0LnllYXImJihlPXQubW9udGgoKSx0PXQueWVhcigpKSx0aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpLFwidW5kZWZpbmVkXCI9PXR5cGVvZiB0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3RdP3RoaXMuZGF5c1Blck1vbnRoW2UtMV06dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVt0XVtlXX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIDYhPT10aGlzLmRheU9mV2Vlayh0LGUscil9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3Q9aS55ZWFyKCksZT1pLm1vbnRoKCkscj1pLmRheSgpO3ZhciBhPW4uaW5zdGFuY2UoKSxvPTAscz1lLGw9dDt0aGlzLl9jcmVhdGVNaXNzaW5nQ2FsZW5kYXJEYXRhKHQpO3ZhciBjPXQtKHM+OXx8OT09PXMmJnI+PXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbF1bMF0/NTY6NTcpO2Zvcig5IT09ZSYmKG89cixzLS0pOzkhPT1zOylzPD0wJiYocz0xMixsLS0pLG8rPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbF1bc10scy0tO3JldHVybiA5PT09ZT8obys9ci10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdWzBdKTwwJiYobys9YS5kYXlzSW5ZZWFyKGMpKTpvKz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdWzldLXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbF1bMF0sYS5uZXdEYXRlKGMsMSwxKS5hZGQobyxcImRcIikudG9KRCgpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9bi5pbnN0YW5jZSgpLmZyb21KRCh0KSxyPWUueWVhcigpLGk9ZS5kYXlPZlllYXIoKSxhPXIrNTY7dGhpcy5fY3JlYXRlTWlzc2luZ0NhbGVuZGFyRGF0YShhKTtmb3IodmFyIG89OSxzPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbYV1bMF0sbD10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2FdW29dLXMrMTtpPmw7KSsrbz4xMiYmKG89MSxhKyspLGwrPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbYV1bb107dmFyIGM9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVthXVtvXS0obC1pKTtyZXR1cm4gdGhpcy5uZXdEYXRlKGEsbyxjKX0sX2NyZWF0ZU1pc3NpbmdDYWxlbmRhckRhdGE6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kYXlzUGVyTW9udGguc2xpY2UoMCk7ZS51bnNoaWZ0KDE3KTtmb3IodmFyIHI9dC0xO3I8dCsyO3IrKylcInVuZGVmaW5lZFwiPT10eXBlb2YgdGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtyXSYmKHRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbcl09ZSl9LE5FUEFMSV9DQUxFTkRBUl9EQVRBOnsxOTcwOlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3MTpbMTgsMzEsMzEsMzIsMzEsMzIsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5NzI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwxOTczOlsxOSwzMCwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMTk3NDpbMTksMzEsMzEsMzIsMzAsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5NzU6WzE4LDMxLDMxLDMyLDMyLDMwLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTc2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMTk3NzpbMTgsMzEsMzIsMzEsMzIsMzEsMzEsMjksMzAsMjksMzAsMjksMzFdLDE5Nzg6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTc5OlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMTk4MDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDE5ODE6WzE4LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwxOTgyOlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk4MzpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5ODQ6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwxOTg1OlsxOCwzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwzMCwzMF0sMTk4NjpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5ODc6WzE4LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTg4OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMTk4OTpbMTgsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTA6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTkxOlsxOCwzMSwzMiwzMSwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDE5OTM6WzE4LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTk0OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5NTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzBdLDE5OTY6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwxOTk3OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5ODpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDAwOlsxNywzMCwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjAwMTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMDI6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDAzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAwNDpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMDU6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDA2OlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwNzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMDg6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDI5LDMxXSwyMDA5OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxMDpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMTE6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDEyOlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwzMCwzMF0sMjAxMzpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMTQ6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDE1OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAxNjpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwMTc6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDE4OlsxOCwzMSwzMiwzMSwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxOTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMjA6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDIxOlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAyMjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzBdLDIwMjM6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDI0OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAyNTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjY6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDI3OlsxNywzMCwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjAyODpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjk6WzE4LDMxLDMxLDMyLDMxLDMyLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDMwOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwzMCwzMCwzMCwzMV0sMjAzMTpbMTcsMzEsMzIsMzEsMzIsMzEsMzEsMzEsMzEsMzEsMzEsMzEsMzFdLDIwMzI6WzE3LDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyXSwyMDMzOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAzNDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMzU6WzE3LDMwLDMyLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDI5LDMxXSwyMDM2OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAzNzpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMzg6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDM5OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwzMCwzMF0sMjA0MDpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNDE6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDQyOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA0MzpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwNDQ6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDQ1OlsxOCwzMSwzMiwzMSwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0NjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNDc6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDQ4OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0OTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzBdLDIwNTA6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDUxOlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA1MjpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNTM6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDU0OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA1NTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMzAsMjksMzBdLDIwNTY6WzE3LDMxLDMxLDMyLDMxLDMyLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDU3OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA1ODpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwNTk6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDYwOlsxNywzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2MTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNjI6WzE3LDMwLDMyLDMxLDMyLDMxLDMxLDI5LDMwLDI5LDMwLDI5LDMxXSwyMDYzOlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2NDpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNjU6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDY2OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwyOSwzMV0sMjA2NzpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNjg6WzE3LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY5OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA3MDpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwNzE6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDcyOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3MzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNzQ6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDc1OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3NjpbMTYsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzBdLDIwNzc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDc4OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3OTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwODA6WzE2LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDgxOlsxNywzMSwzMSwzMiwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODM6WzE3LDMxLDMxLDMyLDMxLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg0OlsxNywzMSwzMSwzMiwzMSwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NTpbMTcsMzEsMzIsMzEsMzIsMzEsMzEsMzAsMzAsMjksMzAsMzAsMzBdLDIwODY6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg3OlsxNiwzMSwzMSwzMiwzMSwzMSwzMSwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4ODpbMTYsMzAsMzEsMzIsMzIsMzAsMzEsMzAsMzAsMjksMzAsMzAsMzBdLDIwODk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDkwOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MTpbMTYsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTI6WzE2LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDkzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5NDpbMTcsMzEsMzEsMzIsMzEsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTU6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDMwLDMwLDMwXSwyMDk2OlsxNywzMCwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA5NzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTg6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDI5LDMwLDI5LDMwLDMwLDMxXSwyMDk5OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwyOSwzMCwzMCwzMF0sMjEwMDpbMTcsMzEsMzIsMzEsMzIsMzAsMzEsMzAsMjksMzAsMjksMzAsMzBdfX0pLG4uY2FsZW5kYXJzLm5lcGFsaT1hfSx7XCIuLi9tYWluXCI6NTU2LFwib2JqZWN0LWFzc2lnblwiOjQ0N31dLDU1MjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuLi9tYWluXCIpLGk9dChcIm9iamVjdC1hc3NpZ25cIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fFwiXCJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHQtZSpNYXRoLmZsb29yKHQvZSl9YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6XCJQZXJzaWFuXCIsamRFcG9jaDoxOTQ4MzIwLjUsZGF5c1Blck1vbnRoOlszMSwzMSwzMSwzMSwzMSwzMSwzMCwzMCwzMCwzMCwzMCwyOV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOntcIlwiOntuYW1lOlwiUGVyc2lhblwiLGVwb2NoczpbXCJCUFwiLFwiQVBcIl0sbW9udGhOYW1lczpbXCJGYXJ2YXJkaW5cIixcIk9yZGliZWhlc2h0XCIsXCJLaG9yZGFkXCIsXCJUaXJcIixcIk1vcmRhZFwiLFwiU2hhaHJpdmFyXCIsXCJNZWhyXCIsXCJBYmFuXCIsXCJBemFyXCIsXCJEYXlcIixcIkJhaG1hblwiLFwiRXNmYW5kXCJdLG1vbnRoTmFtZXNTaG9ydDpbXCJGYXJcIixcIk9yZFwiLFwiS2hvXCIsXCJUaXJcIixcIk1vclwiLFwiU2hhXCIsXCJNZWhcIixcIkFiYVwiLFwiQXphXCIsXCJEYXlcIixcIkJhaFwiLFwiRXNmXCJdLGRheU5hbWVzOltcIllla3NoYW1iZVwiLFwiRG9zaGFtYmVcIixcIlNlc2hhbWJlXCIsXCJDaFxceGU2aGFyc2hhbWJlXCIsXCJQYW5qc2hhbWJlXCIsXCJKb20nZVwiLFwiU2hhbWJlXCJdLGRheU5hbWVzU2hvcnQ6W1wiWWVrXCIsXCJEb1wiLFwiU2VcIixcIkNoXFx4ZTZcIixcIlBhbmpcIixcIkpvbVwiLFwiU2hhXCJdLGRheU5hbWVzTWluOltcIlllXCIsXCJEb1wiLFwiU2VcIixcIkNoXCIsXCJQYVwiLFwiSm9cIixcIlNoXCJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6XCJ5eXl5L21tL2RkXCIsZmlyc3REYXk6Nixpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4gNjgyKigoZS55ZWFyKCktKGUueWVhcigpPjA/NDc0OjQ3MykpJTI4MjArNDc0KzM4KSUyODE2PDY4Mn0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLShuLmRheU9mV2VlaygpKzEpJTcsXCJkXCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDEyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNSE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7dD1pLnllYXIoKSxlPWkubW9udGgoKSxyPWkuZGF5KCk7dmFyIGE9dC0odD49MD80NzQ6NDczKSxzPTQ3NCtvKGEsMjgyMCk7cmV0dXJuIHIrKGU8PTc/MzEqKGUtMSk6MzAqKGUtMSkrNikrTWF0aC5mbG9vcigoNjgyKnMtMTEwKS8yODE2KSszNjUqKHMtMSkrMTAyOTk4MypNYXRoLmZsb29yKGEvMjgyMCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT0odD1NYXRoLmZsb29yKHQpKy41KS10aGlzLnRvSkQoNDc1LDEsMSkscj1NYXRoLmZsb29yKGUvMTAyOTk4Myksbj1vKGUsMTAyOTk4MyksaT0yODIwO2lmKDEwMjk5ODIhPT1uKXt2YXIgYT1NYXRoLmZsb29yKG4vMzY2KSxzPW8obiwzNjYpO2k9TWF0aC5mbG9vcigoMjEzNCphKzI4MTYqcysyODE1KS8xMDI4NTIyKSthKzF9dmFyIGw9aSsyODIwKnIrNDc0O2w9bDw9MD9sLTE6bDt2YXIgYz10LXRoaXMudG9KRChsLDEsMSkrMSx1PWM8PTE4Nj9NYXRoLmNlaWwoYy8zMSk6TWF0aC5jZWlsKChjLTYpLzMwKSxoPXQtdGhpcy50b0pEKGwsdSwxKSsxO3JldHVybiB0aGlzLm5ld0RhdGUobCx1LGgpfX0pLG4uY2FsZW5kYXJzLnBlcnNpYW49YSxuLmNhbGVuZGFycy5qYWxhbGk9YX0se1wiLi4vbWFpblwiOjU1NixcIm9iamVjdC1hc3NpZ25cIjo0NDd9XSw1NTM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi4vbWFpblwiKSxpPXQoXCJvYmplY3QtYXNzaWduXCIpLGE9bi5pbnN0YW5jZSgpO2Z1bmN0aW9uIG8odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHxcIlwiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbXCJcIl19by5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoby5wcm90b3R5cGUse25hbWU6XCJUYWl3YW5cIixqZEVwb2NoOjI0MTk0MDIuNSx5ZWFyc09mZnNldDoxOTExLGRheXNQZXJNb250aDpbMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7XCJcIjp7bmFtZTpcIlRhaXdhblwiLGVwb2NoczpbXCJCUk9DXCIsXCJST0NcIl0sbW9udGhOYW1lczpbXCJKYW51YXJ5XCIsXCJGZWJydWFyeVwiLFwiTWFyY2hcIixcIkFwcmlsXCIsXCJNYXlcIixcIkp1bmVcIixcIkp1bHlcIixcIkF1Z3VzdFwiLFwiU2VwdGVtYmVyXCIsXCJPY3RvYmVyXCIsXCJOb3ZlbWJlclwiLFwiRGVjZW1iZXJcIl0sbW9udGhOYW1lc1Nob3J0OltcIkphblwiLFwiRmViXCIsXCJNYXJcIixcIkFwclwiLFwiTWF5XCIsXCJKdW5cIixcIkp1bFwiLFwiQXVnXCIsXCJTZXBcIixcIk9jdFwiLFwiTm92XCIsXCJEZWNcIl0sZGF5TmFtZXM6W1wiU3VuZGF5XCIsXCJNb25kYXlcIixcIlR1ZXNkYXlcIixcIldlZG5lc2RheVwiLFwiVGh1cnNkYXlcIixcIkZyaWRheVwiLFwiU2F0dXJkYXlcIl0sZGF5TmFtZXNTaG9ydDpbXCJTdW5cIixcIk1vblwiLFwiVHVlXCIsXCJXZWRcIixcIlRodVwiLFwiRnJpXCIsXCJTYXRcIl0sZGF5TmFtZXNNaW46W1wiU3VcIixcIk1vXCIsXCJUdVwiLFwiV2VcIixcIlRoXCIsXCJGclwiLFwiU2FcIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDpcInl5eXkvbW0vZGRcIixmaXJzdERheToxLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3Q9dGhpcy5fdDJnWWVhcihlLnllYXIoKSk7cmV0dXJuIGEubGVhcFllYXIodCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLndlZWtPZlllYXIodCxpLm1vbnRoKCksaS5kYXkoKSl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLnRvSkQodCxpLm1vbnRoKCksaS5kYXkoKSl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1hLmZyb21KRCh0KSxyPXRoaXMuX2cydFllYXIoZS55ZWFyKCkpO3JldHVybiB0aGlzLm5ld0RhdGUocixlLm1vbnRoKCksZS5kYXkoKSl9LF90MmdZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0K3RoaXMueWVhcnNPZmZzZXQrKHQ+PS10aGlzLnllYXJzT2Zmc2V0JiZ0PD0tMT8xOjApfSxfZzJ0WWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdC10aGlzLnllYXJzT2Zmc2V0LSh0Pj0xJiZ0PD10aGlzLnllYXJzT2Zmc2V0PzE6MCl9fSksbi5jYWxlbmRhcnMudGFpd2FuPW99LHtcIi4uL21haW5cIjo1NTYsXCJvYmplY3QtYXNzaWduXCI6NDQ3fV0sNTU0OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcIi4uL21haW5cIiksaT10KFwib2JqZWN0LWFzc2lnblwiKSxhPW4uaW5zdGFuY2UoKTtmdW5jdGlvbiBvKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8XCJcIl18fHRoaXMucmVnaW9uYWxPcHRpb25zW1wiXCJdfW8ucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKG8ucHJvdG90eXBlLHtuYW1lOlwiVGhhaVwiLGpkRXBvY2g6MTUyMzA5OC41LHllYXJzT2Zmc2V0OjU0MyxkYXlzUGVyTW9udGg6WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6e1wiXCI6e25hbWU6XCJUaGFpXCIsZXBvY2hzOltcIkJCRVwiLFwiQkVcIl0sbW9udGhOYW1lczpbXCJKYW51YXJ5XCIsXCJGZWJydWFyeVwiLFwiTWFyY2hcIixcIkFwcmlsXCIsXCJNYXlcIixcIkp1bmVcIixcIkp1bHlcIixcIkF1Z3VzdFwiLFwiU2VwdGVtYmVyXCIsXCJPY3RvYmVyXCIsXCJOb3ZlbWJlclwiLFwiRGVjZW1iZXJcIl0sbW9udGhOYW1lc1Nob3J0OltcIkphblwiLFwiRmViXCIsXCJNYXJcIixcIkFwclwiLFwiTWF5XCIsXCJKdW5cIixcIkp1bFwiLFwiQXVnXCIsXCJTZXBcIixcIk9jdFwiLFwiTm92XCIsXCJEZWNcIl0sZGF5TmFtZXM6W1wiU3VuZGF5XCIsXCJNb25kYXlcIixcIlR1ZXNkYXlcIixcIldlZG5lc2RheVwiLFwiVGh1cnNkYXlcIixcIkZyaWRheVwiLFwiU2F0dXJkYXlcIl0sZGF5TmFtZXNTaG9ydDpbXCJTdW5cIixcIk1vblwiLFwiVHVlXCIsXCJXZWRcIixcIlRodVwiLFwiRnJpXCIsXCJTYXRcIl0sZGF5TmFtZXNNaW46W1wiU3VcIixcIk1vXCIsXCJUdVwiLFwiV2VcIixcIlRoXCIsXCJGclwiLFwiU2FcIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDpcImRkL21tL3l5eXlcIixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3Q9dGhpcy5fdDJnWWVhcihlLnllYXIoKSk7cmV0dXJuIGEubGVhcFllYXIodCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLndlZWtPZlllYXIodCxpLm1vbnRoKCksaS5kYXkoKSl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLnRvSkQodCxpLm1vbnRoKCksaS5kYXkoKSl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1hLmZyb21KRCh0KSxyPXRoaXMuX2cydFllYXIoZS55ZWFyKCkpO3JldHVybiB0aGlzLm5ld0RhdGUocixlLm1vbnRoKCksZS5kYXkoKSl9LF90MmdZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0LXRoaXMueWVhcnNPZmZzZXQtKHQ+PTEmJnQ8PXRoaXMueWVhcnNPZmZzZXQ/MTowKX0sX2cydFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQrdGhpcy55ZWFyc09mZnNldCsodD49LXRoaXMueWVhcnNPZmZzZXQmJnQ8PS0xPzE6MCl9fSksbi5jYWxlbmRhcnMudGhhaT1vfSx7XCIuLi9tYWluXCI6NTU2LFwib2JqZWN0LWFzc2lnblwiOjQ0N31dLDU1NTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuLi9tYWluXCIpLGk9dChcIm9iamVjdC1hc3NpZ25cIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fFwiXCJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZTpcIlVtbUFsUXVyYVwiLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7XCJcIjp7bmFtZTpcIlVtbSBhbC1RdXJhXCIsZXBvY2hzOltcIkJIXCIsXCJBSFwiXSxtb250aE5hbWVzOltcIkFsLU11aGFycmFtXCIsXCJTYWZhclwiLFwiUmFiaScgYWwtYXd3YWxcIixcIlJhYmknIEFsLVRoYW5pXCIsXCJKdW1hZGEgQWwtQXd3YWxcIixcIkp1bWFkYSBBbC1UaGFuaVwiLFwiUmFqYWJcIixcIlNoYSdhYmFuXCIsXCJSYW1hZGFuXCIsXCJTaGF3d2FsXCIsXCJEaHUgYWwtUWknZGFoXCIsXCJEaHUgYWwtSGlqamFoXCJdLG1vbnRoTmFtZXNTaG9ydDpbXCJNdWhcIixcIlNhZlwiLFwiUmFiMVwiLFwiUmFiMlwiLFwiSnVtMVwiLFwiSnVtMlwiLFwiUmFqXCIsXCJTaGEnXCIsXCJSYW1cIixcIlNoYXdcIixcIkRodVFcIixcIkRodUhcIl0sZGF5TmFtZXM6W1wiWWF3bSBhbC1BaGFkXCIsXCJZYXdtIGFsLUl0aG5haW5cIixcIllhd20gYWwtVGhhbFxcdTAxMDF0aFxcdTAxMDFcXHUyMDE5XCIsXCJZYXdtIGFsLUFyYmFcXHUyMDE4XFx1MDEwMVxcdTIwMTlcIixcIllhd20gYWwtS2hhbVxcdTAxMmJzXCIsXCJZYXdtIGFsLUp1bVxcdTIwMThhXCIsXCJZYXdtIGFsLVNhYnRcIl0sZGF5TmFtZXNNaW46W1wiQWhcIixcIkl0aFwiLFwiVGhcIixcIkFyXCIsXCJLaFwiLFwiSnVcIixcIlNhXCJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6XCJ5eXl5L21tL2RkXCIsZmlyc3REYXk6Nixpc1JUTDohMH19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4gMzU1PT09dGhpcy5kYXlzSW5ZZWFyKGUueWVhcigpKX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksXCJkXCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTE7cjw9MTI7cisrKWUrPXRoaXMuZGF5c0luTW9udGgodCxyKTtyZXR1cm4gZX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKS50b0pEKCktMjRlNSsuNSxpPTAsYT0wO2E8by5sZW5ndGg7YSsrKXtpZihvW2FdPnIpcmV0dXJuIG9baV0tb1tpLTFdO2krK31yZXR1cm4gMzB9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiA1IT09dGhpcy5kYXlPZldlZWsodCxlLHIpfSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKSxhPTEyKihpLnllYXIoKS0xKStpLm1vbnRoKCktMTUyOTI7cmV0dXJuIGkuZGF5KCkrb1thLTFdLTErMjRlNS0uNX0sZnJvbUpEOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LTI0ZTUrLjUscj0wLG49MDtuPG8ubGVuZ3RoJiYhKG9bbl0+ZSk7bisrKXIrKzt2YXIgaT1yKzE1MjkyLGE9TWF0aC5mbG9vcigoaS0xKS8xMikscz1hKzEsbD1pLTEyKmEsYz1lLW9bci0xXSsxO3JldHVybiB0aGlzLm5ld0RhdGUocyxsLGMpfSxpc1ZhbGlkOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1uLmJhc2VDYWxlbmRhci5wcm90b3R5cGUuaXNWYWxpZC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkmJihpPSh0PW51bGwhPXQueWVhcj90LnllYXI6dCk+PTEyNzYmJnQ8PTE1MDApLGl9LF92YWxpZGF0ZTpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1uLmJhc2VDYWxlbmRhci5wcm90b3R5cGUuX3ZhbGlkYXRlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihhLnllYXI8MTI3Nnx8YS55ZWFyPjE1MDApdGhyb3cgaS5yZXBsYWNlKC9cXHswXFx9Lyx0aGlzLmxvY2FsLm5hbWUpO3JldHVybiBhfX0pLG4uY2FsZW5kYXJzLnVtbWFscXVyYT1hO3ZhciBvPVsyMCw1MCw3OSwxMDksMTM4LDE2OCwxOTcsMjI3LDI1NiwyODYsMzE1LDM0NSwzNzQsNDA0LDQzMyw0NjMsNDkyLDUyMiw1NTEsNTgxLDYxMSw2NDEsNjcwLDcwMCw3MjksNzU5LDc4OCw4MTgsODQ3LDg3Nyw5MDYsOTM2LDk2NSw5OTUsMTAyNCwxMDU0LDEwODMsMTExMywxMTQyLDExNzIsMTIwMSwxMjMxLDEyNjAsMTI5MCwxMzIwLDEzNTAsMTM3OSwxNDA5LDE0MzgsMTQ2OCwxNDk3LDE1MjcsMTU1NiwxNTg2LDE2MTUsMTY0NSwxNjc0LDE3MDQsMTczMywxNzYzLDE3OTIsMTgyMiwxODUxLDE4ODEsMTkxMCwxOTQwLDE5NjksMTk5OSwyMDI4LDIwNTgsMjA4NywyMTE3LDIxNDYsMjE3NiwyMjA1LDIyMzUsMjI2NCwyMjk0LDIzMjMsMjM1MywyMzgzLDI0MTMsMjQ0MiwyNDcyLDI1MDEsMjUzMSwyNTYwLDI1OTAsMjYxOSwyNjQ5LDI2NzgsMjcwOCwyNzM3LDI3NjcsMjc5NiwyODI2LDI4NTUsMjg4NSwyOTE0LDI5NDQsMjk3MywzMDAzLDMwMzIsMzA2MiwzMDkxLDMxMjEsMzE1MCwzMTgwLDMyMDksMzIzOSwzMjY4LDMyOTgsMzMyNywzMzU3LDMzODYsMzQxNiwzNDQ2LDM0NzYsMzUwNSwzNTM1LDM1NjQsMzU5NCwzNjIzLDM2NTMsMzY4MiwzNzEyLDM3NDEsMzc3MSwzODAwLDM4MzAsMzg1OSwzODg5LDM5MTgsMzk0OCwzOTc3LDQwMDcsNDAzNiw0MDY2LDQwOTUsNDEyNSw0MTU1LDQxODUsNDIxNCw0MjQ0LDQyNzMsNDMwMyw0MzMyLDQzNjIsNDM5MSw0NDIxLDQ0NTAsNDQ4MCw0NTA5LDQ1MzksNDU2OCw0NTk4LDQ2MjcsNDY1Nyw0Njg2LDQ3MTYsNDc0NSw0Nzc1LDQ4MDQsNDgzNCw0ODYzLDQ4OTMsNDkyMiw0OTUyLDQ5ODEsNTAxMSw1MDQwLDUwNzAsNTA5OSw1MTI5LDUxNTgsNTE4OCw1MjE4LDUyNDgsNTI3Nyw1MzA3LDUzMzYsNTM2Niw1Mzk1LDU0MjUsNTQ1NCw1NDg0LDU1MTMsNTU0Myw1NTcyLDU2MDIsNTYzMSw1NjYxLDU2OTAsNTcyMCw1NzQ5LDU3NzksNTgwOCw1ODM4LDU4NjcsNTg5Nyw1OTI2LDU5NTYsNTk4NSw2MDE1LDYwNDQsNjA3NCw2MTAzLDYxMzMsNjE2Miw2MTkyLDYyMjEsNjI1MSw2MjgxLDYzMTEsNjM0MCw2MzcwLDYzOTksNjQyOSw2NDU4LDY0ODgsNjUxNyw2NTQ3LDY1NzYsNjYwNiw2NjM1LDY2NjUsNjY5NCw2NzI0LDY3NTMsNjc4Myw2ODEyLDY4NDIsNjg3MSw2OTAxLDY5MzAsNjk2MCw2OTg5LDcwMTksNzA0OCw3MDc4LDcxMDcsNzEzNyw3MTY2LDcxOTYsNzIyNSw3MjU1LDcyODQsNzMxNCw3MzQ0LDczNzQsNzQwMyw3NDMzLDc0NjIsNzQ5Miw3NTIxLDc1NTEsNzU4MCw3NjEwLDc2MzksNzY2OSw3Njk4LDc3MjgsNzc1Nyw3Nzg3LDc4MTYsNzg0Niw3ODc1LDc5MDUsNzkzNCw3OTY0LDc5OTMsODAyMyw4MDUzLDgwODMsODExMiw4MTQyLDgxNzEsODIwMSw4MjMwLDgyNjAsODI4OSw4MzE5LDgzNDgsODM3OCw4NDA3LDg0MzcsODQ2Niw4NDk2LDg1MjUsODU1NSw4NTg0LDg2MTQsODY0Myw4NjczLDg3MDIsODczMiw4NzYxLDg3OTEsODgyMSw4ODUwLDg4ODAsODkwOSw4OTM4LDg5NjgsODk5Nyw5MDI3LDkwNTYsOTA4Niw5MTE1LDkxNDUsOTE3NSw5MjA1LDkyMzQsOTI2NCw5MjkzLDkzMjIsOTM1Miw5MzgxLDk0MTAsOTQ0MCw5NDcwLDk0OTksOTUyOSw5NTU5LDk1ODksOTYxOCw5NjQ4LDk2NzcsOTcwNiw5NzM2LDk3NjUsOTc5NCw5ODI0LDk4NTMsOTg4Myw5OTEzLDk5NDMsOTk3MiwxMDAwMiwxMDAzMiwxMDA2MSwxMDA5MCwxMDEyMCwxMDE0OSwxMDE3OCwxMDIwOCwxMDIzNywxMDI2NywxMDI5NywxMDMyNiwxMDM1NiwxMDM4NiwxMDQxNSwxMDQ0NSwxMDQ3NCwxMDUwNCwxMDUzMywxMDU2MiwxMDU5MiwxMDYyMSwxMDY1MSwxMDY4MCwxMDcxMCwxMDc0MCwxMDc3MCwxMDc5OSwxMDgyOSwxMDg1OCwxMDg4OCwxMDkxNywxMDk0NywxMDk3NiwxMTAwNSwxMTAzNSwxMTA2NCwxMTA5NCwxMTEyNCwxMTE1MywxMTE4MywxMTIxMywxMTI0MiwxMTI3MiwxMTMwMSwxMTMzMSwxMTM2MCwxMTM4OSwxMTQxOSwxMTQ0OCwxMTQ3OCwxMTUwNywxMTUzNywxMTU2NywxMTU5NiwxMTYyNiwxMTY1NSwxMTY4NSwxMTcxNSwxMTc0NCwxMTc3NCwxMTgwMywxMTgzMiwxMTg2MiwxMTg5MSwxMTkyMSwxMTk1MCwxMTk4MCwxMjAxMCwxMjAzOSwxMjA2OSwxMjA5OSwxMjEyOCwxMjE1OCwxMjE4NywxMjIxNiwxMjI0NiwxMjI3NSwxMjMwNCwxMjMzNCwxMjM2NCwxMjM5MywxMjQyMywxMjQ1MywxMjQ4MywxMjUxMiwxMjU0MiwxMjU3MSwxMjYwMCwxMjYzMCwxMjY1OSwxMjY4OCwxMjcxOCwxMjc0NywxMjc3NywxMjgwNywxMjgzNywxMjg2NiwxMjg5NiwxMjkyNiwxMjk1NSwxMjk4NCwxMzAxNCwxMzA0MywxMzA3MiwxMzEwMiwxMzEzMSwxMzE2MSwxMzE5MSwxMzIyMCwxMzI1MCwxMzI4MCwxMzMxMCwxMzMzOSwxMzM2OCwxMzM5OCwxMzQyNywxMzQ1NiwxMzQ4NiwxMzUxNSwxMzU0NSwxMzU3NCwxMzYwNCwxMzYzNCwxMzY2NCwxMzY5MywxMzcyMywxMzc1MiwxMzc4MiwxMzgxMSwxMzg0MCwxMzg3MCwxMzg5OSwxMzkyOSwxMzk1OCwxMzk4OCwxNDAxOCwxNDA0NywxNDA3NywxNDEwNywxNDEzNiwxNDE2NiwxNDE5NSwxNDIyNCwxNDI1NCwxNDI4MywxNDMxMywxNDM0MiwxNDM3MiwxNDQwMSwxNDQzMSwxNDQ2MSwxNDQ5MCwxNDUyMCwxNDU1MCwxNDU3OSwxNDYwOSwxNDYzOCwxNDY2NywxNDY5NywxNDcyNiwxNDc1NiwxNDc4NSwxNDgxNSwxNDg0NCwxNDg3NCwxNDkwNCwxNDkzMywxNDk2MywxNDk5MywxNTAyMSwxNTA1MSwxNTA4MSwxNTExMCwxNTE0MCwxNTE2OSwxNTE5OSwxNTIyOCwxNTI1OCwxNTI4NywxNTMxNywxNTM0NywxNTM3NywxNTQwNiwxNTQzNiwxNTQ2NSwxNTQ5NCwxNTUyNCwxNTU1MywxNTU4MiwxNTYxMiwxNTY0MSwxNTY3MSwxNTcwMSwxNTczMSwxNTc2MCwxNTc5MCwxNTgyMCwxNTg0OSwxNTg3OCwxNTkwOCwxNTkzNywxNTk2NiwxNTk5NiwxNjAyNSwxNjA1NSwxNjA4NSwxNjExNCwxNjE0NCwxNjE3NCwxNjIwNCwxNjIzMywxNjI2MiwxNjI5MiwxNjMyMSwxNjM1MCwxNjM4MCwxNjQwOSwxNjQzOSwxNjQ2OCwxNjQ5OCwxNjUyOCwxNjU1OCwxNjU4NywxNjYxNywxNjY0NiwxNjY3NiwxNjcwNSwxNjczNCwxNjc2NCwxNjc5MywxNjgyMywxNjg1MiwxNjg4MiwxNjkxMiwxNjk0MSwxNjk3MSwxNzAwMSwxNzAzMCwxNzA2MCwxNzA4OSwxNzExOCwxNzE0OCwxNzE3NywxNzIwNywxNzIzNiwxNzI2NiwxNzI5NSwxNzMyNSwxNzM1NSwxNzM4NCwxNzQxNCwxNzQ0NCwxNzQ3MywxNzUwMiwxNzUzMiwxNzU2MSwxNzU5MSwxNzYyMCwxNzY1MCwxNzY3OSwxNzcwOSwxNzczOCwxNzc2OCwxNzc5OCwxNzgyNywxNzg1NywxNzg4NiwxNzkxNiwxNzk0NSwxNzk3NSwxODAwNCwxODAzNCwxODA2MywxODA5MywxODEyMiwxODE1MiwxODE4MSwxODIxMSwxODI0MSwxODI3MCwxODMwMCwxODMzMCwxODM1OSwxODM4OCwxODQxOCwxODQ0NywxODQ3NiwxODUwNiwxODUzNSwxODU2NSwxODU5NSwxODYyNSwxODY1NCwxODY4NCwxODcxNCwxODc0MywxODc3MiwxODgwMiwxODgzMSwxODg2MCwxODg5MCwxODkxOSwxODk0OSwxODk3OSwxOTAwOCwxOTAzOCwxOTA2OCwxOTA5OCwxOTEyNywxOTE1NiwxOTE4NiwxOTIxNSwxOTI0NCwxOTI3NCwxOTMwMywxOTMzMywxOTM2MiwxOTM5MiwxOTQyMiwxOTQ1MiwxOTQ4MSwxOTUxMSwxOTU0MCwxOTU3MCwxOTU5OSwxOTYyOCwxOTY1OCwxOTY4NywxOTcxNywxOTc0NiwxOTc3NiwxOTgwNiwxOTgzNiwxOTg2NSwxOTg5NSwxOTkyNCwxOTk1NCwxOTk4MywyMDAxMiwyMDA0MiwyMDA3MSwyMDEwMSwyMDEzMCwyMDE2MCwyMDE5MCwyMDIxOSwyMDI0OSwyMDI3OSwyMDMwOCwyMDMzOCwyMDM2NywyMDM5NiwyMDQyNiwyMDQ1NSwyMDQ4NSwyMDUxNCwyMDU0NCwyMDU3MywyMDYwMywyMDYzMywyMDY2MiwyMDY5MiwyMDcyMSwyMDc1MSwyMDc4MCwyMDgxMCwyMDgzOSwyMDg2OSwyMDg5OCwyMDkyOCwyMDk1NywyMDk4NywyMTAxNiwyMTA0NiwyMTA3NiwyMTEwNSwyMTEzNSwyMTE2NCwyMTE5NCwyMTIyMywyMTI1MywyMTI4MiwyMTMxMiwyMTM0MSwyMTM3MSwyMTQwMCwyMTQzMCwyMTQ1OSwyMTQ4OSwyMTUxOSwyMTU0OCwyMTU3OCwyMTYwNywyMTYzNywyMTY2NiwyMTY5NiwyMTcyNSwyMTc1NCwyMTc4NCwyMTgxMywyMTg0MywyMTg3MywyMTkwMiwyMTkzMiwyMTk2MiwyMTk5MSwyMjAyMSwyMjA1MCwyMjA4MCwyMjEwOSwyMjEzOCwyMjE2OCwyMjE5NywyMjIyNywyMjI1NiwyMjI4NiwyMjMxNiwyMjM0NiwyMjM3NSwyMjQwNSwyMjQzNCwyMjQ2NCwyMjQ5MywyMjUyMiwyMjU1MiwyMjU4MSwyMjYxMSwyMjY0MCwyMjY3MCwyMjcwMCwyMjczMCwyMjc1OSwyMjc4OSwyMjgxOCwyMjg0OCwyMjg3NywyMjkwNiwyMjkzNiwyMjk2NSwyMjk5NCwyMzAyNCwyMzA1NCwyMzA4MywyMzExMywyMzE0MywyMzE3MywyMzIwMiwyMzIzMiwyMzI2MSwyMzI5MCwyMzMyMCwyMzM0OSwyMzM3OSwyMzQwOCwyMzQzOCwyMzQ2NywyMzQ5NywyMzUyNywyMzU1NiwyMzU4NiwyMzYxNiwyMzY0NSwyMzY3NCwyMzcwNCwyMzczMywyMzc2MywyMzc5MiwyMzgyMiwyMzg1MSwyMzg4MSwyMzkxMCwyMzk0MCwyMzk3MCwyMzk5OSwyNDAyOSwyNDA1OCwyNDA4OCwyNDExNywyNDE0NywyNDE3NiwyNDIwNiwyNDIzNSwyNDI2NSwyNDI5NCwyNDMyNCwyNDM1MywyNDM4MywyNDQxMywyNDQ0MiwyNDQ3MiwyNDUwMSwyNDUzMSwyNDU2MCwyNDU5MCwyNDYxOSwyNDY0OCwyNDY3OCwyNDcwNywyNDczNywyNDc2NywyNDc5NiwyNDgyNiwyNDg1NiwyNDg4NSwyNDkxNSwyNDk0NCwyNDk3NCwyNTAwMywyNTAzMiwyNTA2MiwyNTA5MSwyNTEyMSwyNTE1MCwyNTE4MCwyNTIxMCwyNTI0MCwyNTI2OSwyNTI5OSwyNTMyOCwyNTM1OCwyNTM4NywyNTQxNiwyNTQ0NiwyNTQ3NSwyNTUwNSwyNTUzNCwyNTU2NCwyNTU5NCwyNTYyNCwyNTY1MywyNTY4MywyNTcxMiwyNTc0MiwyNTc3MSwyNTgwMCwyNTgzMCwyNTg1OSwyNTg4OCwyNTkxOCwyNTk0OCwyNTk3NywyNjAwNywyNjAzNywyNjA2NywyNjA5NiwyNjEyNiwyNjE1NSwyNjE4NCwyNjIxNCwyNjI0MywyNjI3MiwyNjMwMiwyNjMzMiwyNjM2MSwyNjM5MSwyNjQyMSwyNjQ1MSwyNjQ4MCwyNjUxMCwyNjUzOSwyNjU2OCwyNjU5OCwyNjYyNywyNjY1NiwyNjY4NiwyNjcxNSwyNjc0NSwyNjc3NSwyNjgwNSwyNjgzNCwyNjg2NCwyNjg5MywyNjkyMywyNjk1MiwyNjk4MiwyNzAxMSwyNzA0MSwyNzA3MCwyNzA5OSwyNzEyOSwyNzE1OSwyNzE4OCwyNzIxOCwyNzI0OCwyNzI3NywyNzMwNywyNzMzNiwyNzM2NiwyNzM5NSwyNzQyNSwyNzQ1NCwyNzQ4NCwyNzUxMywyNzU0MiwyNzU3MiwyNzYwMiwyNzYzMSwyNzY2MSwyNzY5MSwyNzcyMCwyNzc1MCwyNzc3OSwyNzgwOSwyNzgzOCwyNzg2OCwyNzg5NywyNzkyNiwyNzk1NiwyNzk4NSwyODAxNSwyODA0NSwyODA3NCwyODEwNCwyODEzNCwyODE2MywyODE5MywyODIyMiwyODI1MiwyODI4MSwyODMxMCwyODM0MCwyODM2OSwyODM5OSwyODQyOCwyODQ1OCwyODQ4OCwyODUxNywyODU0NywyODU3NywyODYwNywyODYzNiwyODY2NSwyODY5NSwyODcyNCwyODc1NCwyODc4MywyODgxMywyODg0MywyODg3MiwyODkwMSwyODkzMSwyODk2MCwyODk5MCwyOTAxOSwyOTA0OSwyOTA3OCwyOTEwOCwyOTEzNywyOTE2NywyOTE5NiwyOTIyNiwyOTI1NSwyOTI4NSwyOTMxNSwyOTM0NSwyOTM3NSwyOTQwNCwyOTQzNCwyOTQ2MywyOTQ5MiwyOTUyMiwyOTU1MSwyOTU4MCwyOTYxMCwyOTY0MCwyOTY2OSwyOTY5OSwyOTcyOSwyOTc1OSwyOTc4OCwyOTgxOCwyOTg0NywyOTg3NiwyOTkwNiwyOTkzNSwyOTk2NCwyOTk5NCwzMDAyMywzMDA1MywzMDA4MiwzMDExMiwzMDE0MSwzMDE3MSwzMDIwMCwzMDIzMCwzMDI1OSwzMDI4OSwzMDMxOCwzMDM0OCwzMDM3OCwzMDQwOCwzMDQzNywzMDQ2NywzMDQ5NiwzMDUyNiwzMDU1NSwzMDU4NSwzMDYxNCwzMDY0NCwzMDY3MywzMDcwMywzMDczMiwzMDc2MiwzMDc5MSwzMDgyMSwzMDg1MCwzMDg4MCwzMDkwOSwzMDkzOSwzMDk2OCwzMDk5OCwzMTAyNywzMTA1NywzMTA4NiwzMTExNiwzMTE0NSwzMTE3NSwzMTIwNCwzMTIzNCwzMTI2MywzMTI5MywzMTMyMiwzMTM1MiwzMTM4MSwzMTQxMSwzMTQ0MSwzMTQ3MSwzMTUwMCwzMTUzMCwzMTU1OSwzMTU4OSwzMTYxOCwzMTY0OCwzMTY3NiwzMTcwNiwzMTczNiwzMTc2NiwzMTc5NSwzMTgyNSwzMTg1NCwzMTg4NCwzMTkxMywzMTk0MywzMTk3MiwzMjAwMiwzMjAzMSwzMjA2MSwzMjA5MCwzMjEyMCwzMjE1MCwzMjE4MCwzMjIwOSwzMjIzOSwzMjI2OCwzMjI5OCwzMjMyNywzMjM1NywzMjM4NiwzMjQxNiwzMjQ0NSwzMjQ3NSwzMjUwNCwzMjUzNCwzMjU2MywzMjU5MywzMjYyMiwzMjY1MiwzMjY4MSwzMjcxMSwzMjc0MCwzMjc3MCwzMjc5OSwzMjgyOSwzMjg1OCwzMjg4OCwzMjkxNywzMjk0NywzMjk3NiwzMzAwNiwzMzAzNSwzMzA2NSwzMzA5NCwzMzEyNCwzMzE1MywzMzE4MywzMzIxMywzMzI0MywzMzI3MiwzMzMwMiwzMzMzMSwzMzM2MSwzMzM5MCwzMzQyMCwzMzQ1MCwzMzQ3OSwzMzUwOSwzMzUzOSwzMzU2OCwzMzU5OCwzMzYyNywzMzY1NywzMzY4NiwzMzcxNiwzMzc0NSwzMzc3NSwzMzgwNCwzMzgzNCwzMzg2MywzMzg5MywzMzkyMiwzMzk1MiwzMzk4MSwzNDAxMSwzNDA0MCwzNDA2OSwzNDA5OSwzNDEyOCwzNDE1OCwzNDE4NywzNDIxNywzNDI0NywzNDI3NywzNDMwNiwzNDMzNiwzNDM2NSwzNDM5NSwzNDQyNCwzNDQ1NCwzNDQ4MywzNDUxMiwzNDU0MiwzNDU3MSwzNDYwMSwzNDYzMSwzNDY2MCwzNDY5MCwzNDcxOSwzNDc0OSwzNDc3OCwzNDgwOCwzNDgzNywzNDg2NywzNDg5NiwzNDkyNiwzNDk1NSwzNDk4NSwzNTAxNSwzNTA0NCwzNTA3NCwzNTEwMywzNTEzMywzNTE2MiwzNTE5MiwzNTIyMiwzNTI1MSwzNTI4MCwzNTMxMCwzNTM0MCwzNTM3MCwzNTM5OSwzNTQyOSwzNTQ1OCwzNTQ4OCwzNTUxNywzNTU0NywzNTU3NiwzNTYwNSwzNTYzNSwzNTY2NSwzNTY5NCwzNTcyMywzNTc1MywzNTc4MiwzNTgxMSwzNTg0MSwzNTg3MSwzNTkwMSwzNTkzMCwzNTk2MCwzNTk4OSwzNjAxOSwzNjA0OCwzNjA3OCwzNjEwNywzNjEzNiwzNjE2NiwzNjE5NSwzNjIyNSwzNjI1NCwzNjI4NCwzNjMxNCwzNjM0MywzNjM3MywzNjQwMywzNjQzMywzNjQ2MiwzNjQ5MiwzNjUyMSwzNjU1MSwzNjU4MCwzNjYxMCwzNjYzOSwzNjY2OSwzNjY5OCwzNjcyOCwzNjc1NywzNjc4NiwzNjgxNiwzNjg0NSwzNjg3NSwzNjkwNCwzNjkzNCwzNjk2MywzNjk5MywzNzAyMiwzNzA1MiwzNzA4MSwzNzExMSwzNzE0MSwzNzE3MCwzNzIwMCwzNzIyOSwzNzI1OSwzNzI4OCwzNzMxOCwzNzM0NywzNzM3NywzNzQwNiwzNzQzNiwzNzQ2NSwzNzQ5NSwzNzUyNCwzNzU1NCwzNzU4NCwzNzYxMywzNzY0MywzNzY3MiwzNzcwMSwzNzczMSwzNzc2MCwzNzc5MCwzNzgxOSwzNzg0OSwzNzg3OCwzNzkwOCwzNzkzOCwzNzk2NywzNzk5NywzODAyNywzODA1NiwzODA4NSwzODExNSwzODE0NCwzODE3NCwzODIwMywzODIzMywzODI2MiwzODI5MiwzODMyMiwzODM1MSwzODM4MSwzODQxMCwzODQ0MCwzODQ2OSwzODQ5OSwzODUyOCwzODU1OCwzODU4NywzODYxNywzODY0NiwzODY3NiwzODcwNSwzODczNSwzODc2NCwzODc5NCwzODgyMywzODg1MywzODg4MiwzODkxMiwzODk0MSwzODk3MSwzOTAwMSwzOTAzMCwzOTA1OSwzOTA4OSwzOTExOCwzOTE0OCwzOTE3OCwzOTIwOCwzOTIzNywzOTI2NywzOTI5NywzOTMyNiwzOTM1NSwzOTM4NSwzOTQxNCwzOTQ0NCwzOTQ3MywzOTUwMywzOTUzMiwzOTU2MiwzOTU5MiwzOTYyMSwzOTY1MCwzOTY4MCwzOTcwOSwzOTczOSwzOTc2OCwzOTc5OCwzOTgyNywzOTg1NywzOTg4NiwzOTkxNiwzOTk0NiwzOTk3NSw0MDAwNSw0MDAzNSw0MDA2NCw0MDA5NCw0MDEyMyw0MDE1Myw0MDE4Miw0MDIxMiw0MDI0MSw0MDI3MSw0MDMwMCw0MDMzMCw0MDM1OSw0MDM4OSw0MDQxOCw0MDQ0OCw0MDQ3Nyw0MDUwNyw0MDUzNiw0MDU2Niw0MDU5NSw0MDYyNSw0MDY1NSw0MDY4NSw0MDcxNCw0MDc0NCw0MDc3Myw0MDgwMyw0MDgzMiw0MDg2Miw0MDg5Miw0MDkyMSw0MDk1MSw0MDk4MCw0MTAwOSw0MTAzOSw0MTA2OCw0MTA5OCw0MTEyNyw0MTE1Nyw0MTE4Niw0MTIxNiw0MTI0NSw0MTI3NSw0MTMwNCw0MTMzNCw0MTM2NCw0MTM5Myw0MTQyMiw0MTQ1Miw0MTQ4MSw0MTUxMSw0MTU0MCw0MTU3MCw0MTU5OSw0MTYyOSw0MTY1OCw0MTY4OCw0MTcxOCw0MTc0OCw0MTc3Nyw0MTgwNyw0MTgzNiw0MTg2NSw0MTg5NCw0MTkyNCw0MTk1Myw0MTk4Myw0MjAxMiw0MjA0Miw0MjA3Miw0MjEwMiw0MjEzMSw0MjE2MSw0MjE5MCw0MjIyMCw0MjI0OSw0MjI3OSw0MjMwOCw0MjMzNyw0MjM2Nyw0MjM5Nyw0MjQyNiw0MjQ1Niw0MjQ4NSw0MjUxNSw0MjU0NSw0MjU3NCw0MjYwNCw0MjYzMyw0MjY2Miw0MjY5Miw0MjcyMSw0Mjc1MSw0Mjc4MCw0MjgxMCw0MjgzOSw0Mjg2OSw0Mjg5OSw0MjkyOSw0Mjk1OCw0Mjk4OCw0MzAxNyw0MzA0Niw0MzA3Niw0MzEwNSw0MzEzNSw0MzE2NCw0MzE5NCw0MzIyMyw0MzI1Myw0MzI4Myw0MzMxMiw0MzM0Miw0MzM3MSw0MzQwMSw0MzQzMCw0MzQ2MCw0MzQ4OSw0MzUxOSw0MzU0OCw0MzU3OCw0MzYwNyw0MzYzNyw0MzY2Niw0MzY5Niw0MzcyNiw0Mzc1NSw0Mzc4NSw0MzgxNCw0Mzg0NCw0Mzg3Myw0MzkwMyw0MzkzMiw0Mzk2Miw0Mzk5MSw0NDAyMSw0NDA1MCw0NDA4MCw0NDEwOSw0NDEzOSw0NDE2OSw0NDE5OCw0NDIyOCw0NDI1OCw0NDI4Nyw0NDMxNyw0NDM0Niw0NDM3NSw0NDQwNSw0NDQzNCw0NDQ2NCw0NDQ5Myw0NDUyMyw0NDU1Myw0NDU4Miw0NDYxMiw0NDY0MSw0NDY3MSw0NDcwMCw0NDczMCw0NDc1OSw0NDc4OCw0NDgxOCw0NDg0Nyw0NDg3Nyw0NDkwNiw0NDkzNiw0NDk2Niw0NDk5Niw0NTAyNSw0NTA1NSw0NTA4NCw0NTExNCw0NTE0Myw0NTE3Miw0NTIwMiw0NTIzMSw0NTI2MSw0NTI5MCw0NTMyMCw0NTM1MCw0NTM4MCw0NTQwOSw0NTQzOSw0NTQ2OCw0NTQ5OCw0NTUyNyw0NTU1Niw0NTU4Niw0NTYxNSw0NTY0NCw0NTY3NCw0NTcwNCw0NTczMyw0NTc2Myw0NTc5Myw0NTgyMyw0NTg1Miw0NTg4Miw0NTkxMSw0NTk0MCw0NTk3MCw0NTk5OSw0NjAyOCw0NjA1OCw0NjA4OCw0NjExNyw0NjE0Nyw0NjE3Nyw0NjIwNiw0NjIzNiw0NjI2NSw0NjI5NSw0NjMyNCw0NjM1NCw0NjM4Myw0NjQxMyw0NjQ0Miw0NjQ3Miw0NjUwMSw0NjUzMSw0NjU2MCw0NjU5MCw0NjYyMCw0NjY0OSw0NjY3OSw0NjcwOCw0NjczOCw0Njc2Nyw0Njc5Nyw0NjgyNiw0Njg1Niw0Njg4NSw0NjkxNSw0Njk0NCw0Njk3NCw0NzAwMyw0NzAzMyw0NzA2Myw0NzA5Miw0NzEyMiw0NzE1MSw0NzE4MSw0NzIxMCw0NzI0MCw0NzI2OSw0NzI5OCw0NzMyOCw0NzM1Nyw0NzM4Nyw0NzQxNyw0NzQ0Niw0NzQ3Niw0NzUwNiw0NzUzNSw0NzU2NSw0NzU5NCw0NzYyNCw0NzY1Myw0NzY4Miw0NzcxMiw0Nzc0MSw0Nzc3MSw0NzgwMCw0NzgzMCw0Nzg2MCw0Nzg5MCw0NzkxOSw0Nzk0OSw0Nzk3OCw0ODAwOCw0ODAzNyw0ODA2Niw0ODA5Niw0ODEyNSw0ODE1NSw0ODE4NCw0ODIxNCw0ODI0NCw0ODI3Myw0ODMwMyw0ODMzMyw0ODM2Miw0ODM5Miw0ODQyMSw0ODQ1MCw0ODQ4MCw0ODUwOSw0ODUzOCw0ODU2OCw0ODU5OCw0ODYyNyw0ODY1Nyw0ODY4Nyw0ODcxNyw0ODc0Niw0ODc3Niw0ODgwNSw0ODgzNCw0ODg2NCw0ODg5Myw0ODkyMiw0ODk1Miw0ODk4Miw0OTAxMSw0OTA0MSw0OTA3MSw0OTEwMCw0OTEzMCw0OTE2MCw0OTE4OSw0OTIxOCw0OTI0OCw0OTI3Nyw0OTMwNiw0OTMzNiw0OTM2NSw0OTM5NSw0OTQyNSw0OTQ1NSw0OTQ4NCw0OTUxNCw0OTU0Myw0OTU3Myw0OTYwMiw0OTYzMiw0OTY2MSw0OTY5MCw0OTcyMCw0OTc0OSw0OTc3OSw0OTgwOSw0OTgzOCw0OTg2OCw0OTg5OCw0OTkyNyw0OTk1Nyw0OTk4Niw1MDAxNiw1MDA0NSw1MDA3NSw1MDEwNCw1MDEzMyw1MDE2Myw1MDE5Miw1MDIyMiw1MDI1Miw1MDI4MSw1MDMxMSw1MDM0MCw1MDM3MCw1MDQwMCw1MDQyOSw1MDQ1OSw1MDQ4OCw1MDUxOCw1MDU0Nyw1MDU3Niw1MDYwNiw1MDYzNSw1MDY2NSw1MDY5NCw1MDcyNCw1MDc1NCw1MDc4NCw1MDgxMyw1MDg0Myw1MDg3Miw1MDkwMiw1MDkzMSw1MDk2MCw1MDk5MCw1MTAxOSw1MTA0OSw1MTA3OCw1MTEwOCw1MTEzOCw1MTE2Nyw1MTE5Nyw1MTIyNyw1MTI1Niw1MTI4Niw1MTMxNSw1MTM0NSw1MTM3NCw1MTQwMyw1MTQzMyw1MTQ2Miw1MTQ5Miw1MTUyMiw1MTU1Miw1MTU4Miw1MTYxMSw1MTY0MSw1MTY3MCw1MTY5OSw1MTcyOSw1MTc1OCw1MTc4Nyw1MTgxNiw1MTg0Niw1MTg3Niw1MTkwNiw1MTkzNiw1MTk2NSw1MTk5NSw1MjAyNSw1MjA1NCw1MjA4Myw1MjExMyw1MjE0Miw1MjE3MSw1MjIwMCw1MjIzMCw1MjI2MCw1MjI5MCw1MjMxOSw1MjM0OSw1MjM3OSw1MjQwOCw1MjQzOCw1MjQ2Nyw1MjQ5Nyw1MjUyNiw1MjU1NSw1MjU4NSw1MjYxNCw1MjY0NCw1MjY3Myw1MjcwMyw1MjczMyw1Mjc2Miw1Mjc5Miw1MjgyMiw1Mjg1MSw1Mjg4MSw1MjkxMCw1MjkzOSw1Mjk2OSw1Mjk5OCw1MzAyOCw1MzA1Nyw1MzA4Nyw1MzExNiw1MzE0Niw1MzE3Niw1MzIwNSw1MzIzNSw1MzI2NCw1MzI5NCw1MzMyNCw1MzM1Myw1MzM4Myw1MzQxMiw1MzQ0MSw1MzQ3MSw1MzUwMCw1MzUzMCw1MzU1OSw1MzU4OSw1MzYxOSw1MzY0OCw1MzY3OCw1MzcwOCw1MzczNyw1Mzc2Nyw1Mzc5Niw1MzgyNSw1Mzg1NSw1Mzg4NCw1MzkxMyw1Mzk0Myw1Mzk3Myw1NDAwMyw1NDAzMiw1NDA2Miw1NDA5Miw1NDEyMSw1NDE1MSw1NDE4MCw1NDIwOSw1NDIzOSw1NDI2OCw1NDI5Nyw1NDMyNyw1NDM1Nyw1NDM4Nyw1NDQxNiw1NDQ0Niw1NDQ3Niw1NDUwNSw1NDUzNSw1NDU2NCw1NDU5Myw1NDYyMyw1NDY1Miw1NDY4MSw1NDcxMSw1NDc0MSw1NDc3MCw1NDgwMCw1NDgzMCw1NDg1OSw1NDg4OSw1NDkxOSw1NDk0OCw1NDk3Nyw1NTAwNyw1NTAzNiw1NTA2Niw1NTA5NSw1NTEyNSw1NTE1NCw1NTE4NCw1NTIxMyw1NTI0Myw1NTI3Myw1NTMwMiw1NTMzMiw1NTM2MSw1NTM5MSw1NTQyMCw1NTQ1MCw1NTQ3OSw1NTUwOCw1NTUzOCw1NTU2Nyw1NTU5Nyw1NTYyNyw1NTY1Nyw1NTY4Niw1NTcxNiw1NTc0NSw1NTc3NSw1NTgwNCw1NTgzNCw1NTg2Myw1NTg5Miw1NTkyMiw1NTk1MSw1NTk4MSw1NjAxMSw1NjA0MCw1NjA3MCw1NjEwMCw1NjEyOSw1NjE1OSw1NjE4OCw1NjIxOCw1NjI0Nyw1NjI3Niw1NjMwNiw1NjMzNSw1NjM2NSw1NjM5NCw1NjQyNCw1NjQ1NCw1NjQ4Myw1NjUxMyw1NjU0Myw1NjU3Miw1NjYwMSw1NjYzMSw1NjY2MCw1NjY5MCw1NjcxOSw1Njc0OSw1Njc3OCw1NjgwOCw1NjgzNyw1Njg2Nyw1Njg5Nyw1NjkyNiw1Njk1Niw1Njk4NSw1NzAxNSw1NzA0NCw1NzA3NCw1NzEwMyw1NzEzMyw1NzE2Miw1NzE5Miw1NzIyMSw1NzI1MSw1NzI4MCw1NzMxMCw1NzM0MCw1NzM2OSw1NzM5OSw1NzQyOSw1NzQ1OCw1NzQ4Nyw1NzUxNyw1NzU0Niw1NzU3Niw1NzYwNSw1NzYzNCw1NzY2NCw1NzY5NCw1NzcyMyw1Nzc1Myw1Nzc4Myw1NzgxMyw1Nzg0Miw1Nzg3MSw1NzkwMSw1NzkzMCw1Nzk1OSw1Nzk4OSw1ODAxOCw1ODA0OCw1ODA3Nyw1ODEwNyw1ODEzNyw1ODE2Nyw1ODE5Niw1ODIyNiw1ODI1NSw1ODI4NSw1ODMxNCw1ODM0Myw1ODM3Myw1ODQwMiw1ODQzMiw1ODQ2MSw1ODQ5MSw1ODUyMSw1ODU1MSw1ODU4MCw1ODYxMCw1ODYzOSw1ODY2OSw1ODY5OCw1ODcyNyw1ODc1Nyw1ODc4Niw1ODgxNiw1ODg0NSw1ODg3NSw1ODkwNSw1ODkzNCw1ODk2NCw1ODk5NCw1OTAyMyw1OTA1Myw1OTA4Miw1OTExMSw1OTE0MSw1OTE3MCw1OTIwMCw1OTIyOSw1OTI1OSw1OTI4OCw1OTMxOCw1OTM0OCw1OTM3Nyw1OTQwNyw1OTQzNiw1OTQ2Niw1OTQ5NSw1OTUyNSw1OTU1NCw1OTU4NCw1OTYxMyw1OTY0Myw1OTY3Miw1OTcwMiw1OTczMSw1OTc2MSw1OTc5MSw1OTgyMCw1OTg1MCw1OTg3OSw1OTkwOSw1OTkzOSw1OTk2OCw1OTk5Nyw2MDAyNyw2MDA1Niw2MDA4Niw2MDExNSw2MDE0NSw2MDE3NCw2MDIwNCw2MDIzNCw2MDI2NCw2MDI5Myw2MDMyMyw2MDM1Miw2MDM4MSw2MDQxMSw2MDQ0MCw2MDQ2OSw2MDQ5OSw2MDUyOCw2MDU1OCw2MDU4OCw2MDYxOCw2MDY0OCw2MDY3Nyw2MDcwNyw2MDczNiw2MDc2NSw2MDc5NSw2MDgyNCw2MDg1Myw2MDg4Myw2MDkxMiw2MDk0Miw2MDk3Miw2MTAwMiw2MTAzMSw2MTA2MSw2MTA5MCw2MTEyMCw2MTE0OSw2MTE3OSw2MTIwOCw2MTIzNyw2MTI2Nyw2MTI5Niw2MTMyNiw2MTM1Niw2MTM4NSw2MTQxNSw2MTQ0NSw2MTQ3NCw2MTUwNCw2MTUzMyw2MTU2Myw2MTU5Miw2MTYyMSw2MTY1MSw2MTY4MCw2MTcxMCw2MTczOSw2MTc2OSw2MTc5OSw2MTgyOCw2MTg1OCw2MTg4OCw2MTkxNyw2MTk0Nyw2MTk3Niw2MjAwNiw2MjAzNSw2MjA2NCw2MjA5NCw2MjEyMyw2MjE1Myw2MjE4Miw2MjIxMiw2MjI0Miw2MjI3MSw2MjMwMSw2MjMzMSw2MjM2MCw2MjM5MCw2MjQxOSw2MjQ0OCw2MjQ3OCw2MjUwNyw2MjUzNyw2MjU2Niw2MjU5Niw2MjYyNSw2MjY1NSw2MjY4NSw2MjcxNSw2Mjc0NCw2Mjc3NCw2MjgwMyw2MjgzMiw2Mjg2Miw2Mjg5MSw2MjkyMSw2Mjk1MCw2Mjk4MCw2MzAwOSw2MzAzOSw2MzA2OSw2MzA5OSw2MzEyOCw2MzE1Nyw2MzE4Nyw2MzIxNiw2MzI0Niw2MzI3NSw2MzMwNSw2MzMzNCw2MzM2Myw2MzM5Myw2MzQyMyw2MzQ1Myw2MzQ4Miw2MzUxMiw2MzU0MSw2MzU3MSw2MzYwMCw2MzYzMCw2MzY1OSw2MzY4OSw2MzcxOCw2Mzc0Nyw2Mzc3Nyw2MzgwNyw2MzgzNiw2Mzg2Niw2Mzg5NSw2MzkyNSw2Mzk1NSw2Mzk4NCw2NDAxNCw2NDA0Myw2NDA3Myw2NDEwMiw2NDEzMSw2NDE2MSw2NDE5MCw2NDIyMCw2NDI0OSw2NDI3OSw2NDMwOSw2NDMzOSw2NDM2OCw2NDM5OCw2NDQyNyw2NDQ1Nyw2NDQ4Niw2NDUxNSw2NDU0NSw2NDU3NCw2NDYwMyw2NDYzMyw2NDY2Myw2NDY5Miw2NDcyMiw2NDc1Miw2NDc4Miw2NDgxMSw2NDg0MSw2NDg3MCw2NDg5OSw2NDkyOSw2NDk1OCw2NDk4Nyw2NTAxNyw2NTA0Nyw2NTA3Niw2NTEwNiw2NTEzNiw2NTE2Niw2NTE5NSw2NTIyNSw2NTI1NCw2NTI4Myw2NTMxMyw2NTM0Miw2NTM3MSw2NTQwMSw2NTQzMSw2NTQ2MCw2NTQ5MCw2NTUyMCw2NTU0OSw2NTU3OSw2NTYwOCw2NTYzOCw2NTY2Nyw2NTY5Nyw2NTcyNiw2NTc1NSw2NTc4NSw2NTgxNSw2NTg0NCw2NTg3NCw2NTkwMyw2NTkzMyw2NTk2Myw2NTk5Miw2NjAyMiw2NjA1MSw2NjA4MSw2NjExMCw2NjE0MCw2NjE2OSw2NjE5OSw2NjIyOCw2NjI1OCw2NjI4Nyw2NjMxNyw2NjM0Niw2NjM3Niw2NjQwNSw2NjQzNSw2NjQ2NSw2NjQ5NCw2NjUyNCw2NjU1Myw2NjU4Myw2NjYxMiw2NjY0MSw2NjY3MSw2NjcwMCw2NjczMCw2Njc2MCw2Njc4OSw2NjgxOSw2Njg0OSw2Njg3OCw2NjkwOCw2NjkzNyw2Njk2Nyw2Njk5Niw2NzAyNSw2NzA1NSw2NzA4NCw2NzExNCw2NzE0Myw2NzE3Myw2NzIwMyw2NzIzMyw2NzI2Miw2NzI5Miw2NzMyMSw2NzM1MSw2NzM4MCw2NzQwOSw2NzQzOSw2NzQ2OCw2NzQ5Nyw2NzUyNyw2NzU1Nyw2NzU4Nyw2NzYxNyw2NzY0Niw2NzY3Niw2NzcwNSw2NzczNSw2Nzc2NCw2Nzc5Myw2NzgyMyw2Nzg1Miw2Nzg4Miw2NzkxMSw2Nzk0MSw2Nzk3MSw2OGUzLDY4MDMwLDY4MDYwLDY4MDg5LDY4MTE5LDY4MTQ4LDY4MTc3LDY4MjA3LDY4MjM2LDY4MjY2LDY4Mjk1LDY4MzI1LDY4MzU0LDY4Mzg0LDY4NDE0LDY4NDQzLDY4NDczLDY4NTAyLDY4NTMyLDY4NTYxLDY4NTkxLDY4NjIwLDY4NjUwLDY4Njc5LDY4NzA4LDY4NzM4LDY4NzY4LDY4Nzk3LDY4ODI3LDY4ODU3LDY4ODg2LDY4OTE2LDY4OTQ2LDY4OTc1LDY5MDA0LDY5MDM0LDY5MDYzLDY5MDkyLDY5MTIyLDY5MTUyLDY5MTgxLDY5MjExLDY5MjQwLDY5MjcwLDY5MzAwLDY5MzMwLDY5MzU5LDY5Mzg4LDY5NDE4LDY5NDQ3LDY5NDc2LDY5NTA2LDY5NTM1LDY5NTY1LDY5NTk1LDY5NjI0LDY5NjU0LDY5Njg0LDY5NzEzLDY5NzQzLDY5NzcyLDY5ODAyLDY5ODMxLDY5ODYxLDY5ODkwLDY5OTE5LDY5OTQ5LDY5OTc4LDcwMDA4LDcwMDM4LDcwMDY3LDcwMDk3LDcwMTI2LDcwMTU2LDcwMTg2LDcwMjE1LDcwMjQ1LDcwMjc0LDcwMzAzLDcwMzMzLDcwMzYyLDcwMzkyLDcwNDIxLDcwNDUxLDcwNDgxLDcwNTEwLDcwNTQwLDcwNTcwLDcwNTk5LDcwNjI5LDcwNjU4LDcwNjg3LDcwNzE3LDcwNzQ2LDcwNzc2LDcwODA1LDcwODM1LDcwODY0LDcwODk0LDcwOTI0LDcwOTU0LDcwOTgzLDcxMDEzLDcxMDQyLDcxMDcxLDcxMTAxLDcxMTMwLDcxMTU5LDcxMTg5LDcxMjE4LDcxMjQ4LDcxMjc4LDcxMzA4LDcxMzM3LDcxMzY3LDcxMzk3LDcxNDI2LDcxNDU1LDcxNDg1LDcxNTE0LDcxNTQzLDcxNTczLDcxNjAyLDcxNjMyLDcxNjYyLDcxNjkxLDcxNzIxLDcxNzUxLDcxNzgxLDcxODEwLDcxODM5LDcxODY5LDcxODk4LDcxOTI3LDcxOTU3LDcxOTg2LDcyMDE2LDcyMDQ2LDcyMDc1LDcyMTA1LDcyMTM1LDcyMTY0LDcyMTk0LDcyMjIzLDcyMjUzLDcyMjgyLDcyMzExLDcyMzQxLDcyMzcwLDcyNDAwLDcyNDI5LDcyNDU5LDcyNDg5LDcyNTE4LDcyNTQ4LDcyNTc3LDcyNjA3LDcyNjM3LDcyNjY2LDcyNjk1LDcyNzI1LDcyNzU0LDcyNzg0LDcyODEzLDcyODQzLDcyODcyLDcyOTAyLDcyOTMxLDcyOTYxLDcyOTkxLDczMDIwLDczMDUwLDczMDgwLDczMTA5LDczMTM5LDczMTY4LDczMTk3LDczMjI3LDczMjU2LDczMjg2LDczMzE1LDczMzQ1LDczMzc1LDczNDA0LDczNDM0LDczNDY0LDczNDkzLDczNTIzLDczNTUyLDczNTgxLDczNjExLDczNjQwLDczNjY5LDczNjk5LDczNzI5LDczNzU4LDczNzg4LDczODE4LDczODQ4LDczODc3LDczOTA3LDczOTM2LDczOTY1LDczOTk1LDc0MDI0LDc0MDUzLDc0MDgzLDc0MTEzLDc0MTQyLDc0MTcyLDc0MjAyLDc0MjMxLDc0MjYxLDc0MjkxLDc0MzIwLDc0MzQ5LDc0Mzc5LDc0NDA4LDc0NDM3LDc0NDY3LDc0NDk3LDc0NTI2LDc0NTU2LDc0NTg2LDc0NjE1LDc0NjQ1LDc0Njc1LDc0NzA0LDc0NzMzLDc0NzYzLDc0NzkyLDc0ODIyLDc0ODUxLDc0ODgxLDc0OTEwLDc0OTQwLDc0OTY5LDc0OTk5LDc1MDI5LDc1MDU4LDc1MDg4LDc1MTE3LDc1MTQ3LDc1MTc2LDc1MjA2LDc1MjM1LDc1MjY0LDc1Mjk0LDc1MzIzLDc1MzUzLDc1MzgzLDc1NDEyLDc1NDQyLDc1NDcyLDc1NTAxLDc1NTMxLDc1NTYwLDc1NTkwLDc1NjE5LDc1NjQ4LDc1Njc4LDc1NzA3LDc1NzM3LDc1NzY2LDc1Nzk2LDc1ODI2LDc1ODU2LDc1ODg1LDc1OTE1LDc1OTQ0LDc1OTc0LDc2MDAzLDc2MDMyLDc2MDYyLDc2MDkxLDc2MTIxLDc2MTUwLDc2MTgwLDc2MjEwLDc2MjM5LDc2MjY5LDc2Mjk5LDc2MzI4LDc2MzU4LDc2Mzg3LDc2NDE2LDc2NDQ2LDc2NDc1LDc2NTA1LDc2NTM0LDc2NTY0LDc2NTkzLDc2NjIzLDc2NjUzLDc2NjgyLDc2NzEyLDc2NzQxLDc2NzcxLDc2ODAxLDc2ODMwLDc2ODU5LDc2ODg5LDc2OTE4LDc2OTQ4LDc2OTc3LDc3MDA3LDc3MDM2LDc3MDY2LDc3MDk2LDc3MTI1LDc3MTU1LDc3MTg1LDc3MjE0LDc3MjQzLDc3MjczLDc3MzAyLDc3MzMyLDc3MzYxLDc3MzkwLDc3NDIwLDc3NDUwLDc3NDc5LDc3NTA5LDc3NTM5LDc3NTY5LDc3NTk4LDc3NjI3LDc3NjU3LDc3Njg2LDc3NzE1LDc3NzQ1LDc3Nzc0LDc3ODA0LDc3ODMzLDc3ODYzLDc3ODkzLDc3OTIzLDc3OTUyLDc3OTgyLDc4MDExLDc4MDQxLDc4MDcwLDc4MDk5LDc4MTI5LDc4MTU4LDc4MTg4LDc4MjE3LDc4MjQ3LDc4Mjc3LDc4MzA3LDc4MzM2LDc4MzY2LDc4Mzk1LDc4NDI1LDc4NDU0LDc4NDgzLDc4NTEzLDc4NTQyLDc4NTcyLDc4NjAxLDc4NjMxLDc4NjYxLDc4NjkwLDc4NzIwLDc4NzUwLDc4Nzc5LDc4ODA4LDc4ODM4LDc4ODY3LDc4ODk3LDc4OTI2LDc4OTU2LDc4OTg1LDc5MDE1LDc5MDQ0LDc5MDc0LDc5MTA0LDc5MTMzLDc5MTYzLDc5MTkyLDc5MjIyLDc5MjUxLDc5MjgxLDc5MzEwLDc5MzQwLDc5MzY5LDc5Mzk5LDc5NDI4LDc5NDU4LDc5NDg3LDc5NTE3LDc5NTQ2LDc5NTc2LDc5NjA2LDc5NjM1LDc5NjY1LDc5Njk1LDc5NzI0LDc5NzUzLDc5NzgzLDc5ODEyLDc5ODQxLDc5ODcxLDc5OTAwLDc5OTMwLDc5OTYwLDc5OTkwXX0se1wiLi4vbWFpblwiOjU1NixcIm9iamVjdC1hc3NpZ25cIjo0NDd9XSw1NTY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwib2JqZWN0LWFzc2lnblwiKTtmdW5jdGlvbiBpKCl7dGhpcy5yZWdpb25hbE9wdGlvbnM9W10sdGhpcy5yZWdpb25hbE9wdGlvbnNbXCJcIl09e2ludmFsaWRDYWxlbmRhcjpcIkNhbGVuZGFyIHswfSBub3QgZm91bmRcIixpbnZhbGlkRGF0ZTpcIkludmFsaWQgezB9IGRhdGVcIixpbnZhbGlkTW9udGg6XCJJbnZhbGlkIHswfSBtb250aFwiLGludmFsaWRZZWFyOlwiSW52YWxpZCB7MH0geWVhclwiLGRpZmZlcmVudENhbGVuZGFyczpcIkNhbm5vdCBtaXggezB9IGFuZCB7MX0gZGF0ZXNcIn0sdGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXSx0aGlzLmNhbGVuZGFycz17fSx0aGlzLl9sb2NhbENhbHM9e319ZnVuY3Rpb24gYSh0LGUscixuKXtpZih0aGlzLl9jYWxlbmRhcj10LHRoaXMuX3llYXI9ZSx0aGlzLl9tb250aD1yLHRoaXMuX2RheT1uLDA9PT10aGlzLl9jYWxlbmRhci5fdmFsaWRhdGVMZXZlbCYmIXRoaXMuX2NhbGVuZGFyLmlzVmFsaWQodGhpcy5feWVhcix0aGlzLl9tb250aCx0aGlzLl9kYXkpKXRocm93KGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWREYXRlKS5yZXBsYWNlKC9cXHswXFx9Lyx0aGlzLl9jYWxlbmRhci5sb2NhbC5uYW1lKX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuXCIwMDAwMDBcIi5zdWJzdHJpbmcoMCxlLSh0PVwiXCIrdCkubGVuZ3RoKSt0fWZ1bmN0aW9uIHMoKXt0aGlzLnNob3J0WWVhckN1dG9mZj1cIisxMFwifWZ1bmN0aW9uIGwodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0XXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbXCJcIl19bihpLnByb3RvdHlwZSx7aW5zdGFuY2U6ZnVuY3Rpb24odCxlKXt0PSh0fHxcImdyZWdvcmlhblwiKS50b0xvd2VyQ2FzZSgpLGU9ZXx8XCJcIjt2YXIgcj10aGlzLl9sb2NhbENhbHNbdCtcIi1cIitlXTtpZighciYmdGhpcy5jYWxlbmRhcnNbdF0mJihyPW5ldyB0aGlzLmNhbGVuZGFyc1t0XShlKSx0aGlzLl9sb2NhbENhbHNbdCtcIi1cIitlXT1yKSwhcil0aHJvdyh0aGlzLmxvY2FsLmludmFsaWRDYWxlbmRhcnx8dGhpcy5yZWdpb25hbE9wdGlvbnNbXCJcIl0uaW52YWxpZENhbGVuZGFyKS5yZXBsYWNlKC9cXHswXFx9Lyx0KTtyZXR1cm4gcn0sbmV3RGF0ZTpmdW5jdGlvbih0LGUscixuLGkpe3JldHVybihuPShudWxsIT10JiZ0LnllYXI/dC5jYWxlbmRhcigpOlwic3RyaW5nXCI9PXR5cGVvZiBuP3RoaXMuaW5zdGFuY2UobixpKTpuKXx8dGhpcy5pbnN0YW5jZSgpKS5uZXdEYXRlKHQsZSxyKX0sc3Vic3RpdHV0ZURpZ2l0czpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuKGUrXCJcIikucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfX0sc3Vic3RpdHV0ZUNoaW5lc2VEaWdpdHM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7Zm9yKHZhciBuPVwiXCIsaT0wO3I+MDspe3ZhciBhPXIlMTA7bj0oMD09PWE/XCJcIjp0W2FdK2VbaV0pK24saSsrLHI9TWF0aC5mbG9vcihyLzEwKX1yZXR1cm4gMD09PW4uaW5kZXhPZih0WzFdK2VbMV0pJiYobj1uLnN1YnN0cigxKSksbnx8dFswXX19fSksbihhLnByb3RvdHlwZSx7bmV3RGF0ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLm5ld0RhdGUobnVsbD09dD90aGlzOnQsZSxyKX0seWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5feWVhcjp0aGlzLnNldCh0LFwieVwiKX0sbW9udGg6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX21vbnRoOnRoaXMuc2V0KHQsXCJtXCIpfSxkYXk6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX2RheTp0aGlzLnNldCh0LFwiZFwiKX0sZGF0ZTpmdW5jdGlvbih0LGUscil7aWYoIXRoaXMuX2NhbGVuZGFyLmlzVmFsaWQodCxlLHIpKXRocm93KGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWREYXRlKS5yZXBsYWNlKC9cXHswXFx9Lyx0aGlzLl9jYWxlbmRhci5sb2NhbC5uYW1lKTtyZXR1cm4gdGhpcy5feWVhcj10LHRoaXMuX21vbnRoPWUsdGhpcy5fZGF5PXIsdGhpc30sbGVhcFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIubGVhcFllYXIodGhpcyl9LGVwb2NoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmVwb2NoKHRoaXMpfSxmb3JtYXRZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmZvcm1hdFllYXIodGhpcyl9LG1vbnRoT2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLndlZWtPZlllYXIodGhpcyl9LGRheXNJblllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5c0luWWVhcih0aGlzKX0sZGF5T2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheU9mWWVhcih0aGlzKX0sZGF5c0luTW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5c0luTW9udGgodGhpcyl9LGRheU9mV2VlazpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5kYXlPZldlZWsodGhpcyl9LHdlZWtEYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIud2Vla0RheSh0aGlzKX0sZXh0cmFJbmZvOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmV4dHJhSW5mbyh0aGlzKX0sYWRkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmFkZCh0aGlzLHQsZSl9LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9jYWxlbmRhci5zZXQodGhpcyx0LGUpfSxjb21wYXJlVG86ZnVuY3Rpb24odCl7aWYodGhpcy5fY2FsZW5kYXIubmFtZSE9PXQuX2NhbGVuZGFyLm5hbWUpdGhyb3coYy5sb2NhbC5kaWZmZXJlbnRDYWxlbmRhcnN8fGMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmRpZmZlcmVudENhbGVuZGFycykucmVwbGFjZSgvXFx7MFxcfS8sdGhpcy5fY2FsZW5kYXIubG9jYWwubmFtZSkucmVwbGFjZSgvXFx7MVxcfS8sdC5fY2FsZW5kYXIubG9jYWwubmFtZSk7dmFyIGU9dGhpcy5feWVhciE9PXQuX3llYXI/dGhpcy5feWVhci10Ll95ZWFyOnRoaXMuX21vbnRoIT09dC5fbW9udGg/dGhpcy5tb250aE9mWWVhcigpLXQubW9udGhPZlllYXIoKTp0aGlzLl9kYXktdC5fZGF5O3JldHVybiAwPT09ZT8wOmU8MD8tMToxfSxjYWxlbmRhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhcn0sdG9KRDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci50b0pEKHRoaXMpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmZyb21KRCh0KX0sdG9KU0RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIudG9KU0RhdGUodGhpcyl9LGZyb21KU0RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmZyb21KU0RhdGUodCl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMueWVhcigpPDA/XCItXCI6XCJcIikrbyhNYXRoLmFicyh0aGlzLnllYXIoKSksNCkrXCItXCIrbyh0aGlzLm1vbnRoKCksMikrXCItXCIrbyh0aGlzLmRheSgpLDIpfX0pLG4ocy5wcm90b3R5cGUse192YWxpZGF0ZUxldmVsOjAsbmV3RGF0ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuIG51bGw9PXQ/dGhpcy50b2RheSgpOih0LnllYXImJih0aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkRGF0ZSkscj10LmRheSgpLGU9dC5tb250aCgpLHQ9dC55ZWFyKCkpLG5ldyBhKHRoaXMsdCxlLHIpKX0sdG9kYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mcm9tSlNEYXRlKG5ldyBEYXRlKX0sZXBvY2g6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRZZWFyfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkWWVhcikueWVhcigpPDA/dGhpcy5sb2NhbC5lcG9jaHNbMF06dGhpcy5sb2NhbC5lcG9jaHNbMV19LGZvcm1hdFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZFllYXJ8fGMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWRZZWFyKTtyZXR1cm4oZS55ZWFyKCk8MD9cIi1cIjpcIlwiKStvKE1hdGguYWJzKGUueWVhcigpKSw0KX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbXCJcIl0uaW52YWxpZFllYXIpLDEyfSxtb250aE9mWWVhcjpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRNb250aHx8Yy5yZWdpb25hbE9wdGlvbnNbXCJcIl0uaW52YWxpZE1vbnRoKTtyZXR1cm4oci5tb250aCgpK3RoaXMubW9udGhzSW5ZZWFyKHIpLXRoaXMuZmlyc3RNb250aCkldGhpcy5tb250aHNJblllYXIocikrdGhpcy5taW5Nb250aH0sZnJvbU1vbnRoT2ZZZWFyOmZ1bmN0aW9uKHQsZSl7dmFyIHI9KGUrdGhpcy5maXJzdE1vbnRoLTIqdGhpcy5taW5Nb250aCkldGhpcy5tb250aHNJblllYXIodCkrdGhpcy5taW5Nb250aDtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxyLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZE1vbnRofHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkTW9udGgpLHJ9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZFllYXJ8fGMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWRZZWFyKTtyZXR1cm4gdGhpcy5sZWFwWWVhcihlKT8zNjY6MzY1fSxkYXlPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWREYXRlKTtyZXR1cm4gbi50b0pEKCktdGhpcy5uZXdEYXRlKG4ueWVhcigpLHRoaXMuZnJvbU1vbnRoT2ZZZWFyKG4ueWVhcigpLHRoaXMubWluTW9udGgpLHRoaXMubWluRGF5KS50b0pEKCkrMX0sZGF5c0luV2VlazpmdW5jdGlvbigpe3JldHVybiA3fSxkYXlPZldlZWs6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWREYXRlKTtyZXR1cm4oTWF0aC5mbG9vcih0aGlzLnRvSkQobikpKzIpJXRoaXMuZGF5c0luV2VlaygpfSxleHRyYUluZm86ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkRGF0ZSkse319LGFkZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkRGF0ZSksdGhpcy5fY29ycmVjdEFkZCh0LHRoaXMuX2FkZCh0LGUsciksZSxyKX0sX2FkZDpmdW5jdGlvbih0LGUscil7aWYodGhpcy5fdmFsaWRhdGVMZXZlbCsrLFwiZFwiPT09cnx8XCJ3XCI9PT1yKXt2YXIgbj10LnRvSkQoKStlKihcIndcIj09PXI/dGhpcy5kYXlzSW5XZWVrKCk6MSksaT10LmNhbGVuZGFyKCkuZnJvbUpEKG4pO3JldHVybiB0aGlzLl92YWxpZGF0ZUxldmVsLS0sW2kueWVhcigpLGkubW9udGgoKSxpLmRheSgpXX10cnl7dmFyIGE9dC55ZWFyKCkrKFwieVwiPT09cj9lOjApLG89dC5tb250aE9mWWVhcigpKyhcIm1cIj09PXI/ZTowKTtpPXQuZGF5KCk7XCJ5XCI9PT1yPyh0Lm1vbnRoKCkhPT10aGlzLmZyb21Nb250aE9mWWVhcihhLG8pJiYobz10aGlzLm5ld0RhdGUoYSx0Lm1vbnRoKCksdGhpcy5taW5EYXkpLm1vbnRoT2ZZZWFyKCkpLG89TWF0aC5taW4obyx0aGlzLm1vbnRoc0luWWVhcihhKSksaT1NYXRoLm1pbihpLHRoaXMuZGF5c0luTW9udGgoYSx0aGlzLmZyb21Nb250aE9mWWVhcihhLG8pKSkpOlwibVwiPT09ciYmKCFmdW5jdGlvbih0KXtmb3IoO288dC5taW5Nb250aDspYS0tLG8rPXQubW9udGhzSW5ZZWFyKGEpO2Zvcih2YXIgZT10Lm1vbnRoc0luWWVhcihhKTtvPmUtMSt0Lm1pbk1vbnRoOylhKyssby09ZSxlPXQubW9udGhzSW5ZZWFyKGEpfSh0aGlzKSxpPU1hdGgubWluKGksdGhpcy5kYXlzSW5Nb250aChhLHRoaXMuZnJvbU1vbnRoT2ZZZWFyKGEsbykpKSk7dmFyIHM9W2EsdGhpcy5mcm9tTW9udGhPZlllYXIoYSxvKSxpXTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLHN9Y2F0Y2godCl7dGhyb3cgdGhpcy5fdmFsaWRhdGVMZXZlbC0tLHR9fSxfY29ycmVjdEFkZDpmdW5jdGlvbih0LGUscixuKXtpZighKHRoaXMuaGFzWWVhclplcm98fFwieVwiIT09biYmXCJtXCIhPT1ufHwwIT09ZVswXSYmdC55ZWFyKCk+MD09ZVswXT4wKSl7dmFyIGk9e3k6WzEsMSxcInlcIl0sbTpbMSx0aGlzLm1vbnRoc0luWWVhcigtMSksXCJtXCJdLHc6W3RoaXMuZGF5c0luV2VlaygpLHRoaXMuZGF5c0luWWVhcigtMSksXCJkXCJdLGQ6WzEsdGhpcy5kYXlzSW5ZZWFyKC0xKSxcImRcIl19W25dLGE9cjwwPy0xOjE7ZT10aGlzLl9hZGQodCxyKmlbMF0rYSppWzFdLGlbMl0pfXJldHVybiB0LmRhdGUoZVswXSxlWzFdLGVbMl0pfSxzZXQ6ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkRGF0ZSk7dmFyIG49XCJ5XCI9PT1yP2U6dC55ZWFyKCksaT1cIm1cIj09PXI/ZTp0Lm1vbnRoKCksYT1cImRcIj09PXI/ZTp0LmRheSgpO3JldHVyblwieVwiIT09ciYmXCJtXCIhPT1yfHwoYT1NYXRoLm1pbihhLHRoaXMuZGF5c0luTW9udGgobixpKSkpLHQuZGF0ZShuLGksYSl9LGlzVmFsaWQ6ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3ZhbGlkYXRlTGV2ZWwrKzt2YXIgbj10aGlzLmhhc1llYXJaZXJvfHwwIT09dDtpZihuKXt2YXIgaT10aGlzLm5ld0RhdGUodCxlLHRoaXMubWluRGF5KTtuPWU+PXRoaXMubWluTW9udGgmJmUtdGhpcy5taW5Nb250aDx0aGlzLm1vbnRoc0luWWVhcihpKSYmcj49dGhpcy5taW5EYXkmJnItdGhpcy5taW5EYXk8dGhpcy5kYXlzSW5Nb250aChpKX1yZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLG59LHRvSlNEYXRlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkRGF0ZSk7cmV0dXJuIGMuaW5zdGFuY2UoKS5mcm9tSkQodGhpcy50b0pEKG4pKS50b0pTRGF0ZSgpfSxmcm9tSlNEYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZyb21KRChjLmluc3RhbmNlKCkuZnJvbUpTRGF0ZSh0KS50b0pEKCkpfSxfdmFsaWRhdGU6ZnVuY3Rpb24odCxlLHIsbil7aWYodC55ZWFyKXtpZigwPT09dGhpcy5fdmFsaWRhdGVMZXZlbCYmdGhpcy5uYW1lIT09dC5jYWxlbmRhcigpLm5hbWUpdGhyb3coYy5sb2NhbC5kaWZmZXJlbnRDYWxlbmRhcnN8fGMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmRpZmZlcmVudENhbGVuZGFycykucmVwbGFjZSgvXFx7MFxcfS8sdGhpcy5sb2NhbC5uYW1lKS5yZXBsYWNlKC9cXHsxXFx9Lyx0LmNhbGVuZGFyKCkubG9jYWwubmFtZSk7cmV0dXJuIHR9dHJ5e2lmKHRoaXMuX3ZhbGlkYXRlTGV2ZWwrKywxPT09dGhpcy5fdmFsaWRhdGVMZXZlbCYmIXRoaXMuaXNWYWxpZCh0LGUscikpdGhyb3cgbi5yZXBsYWNlKC9cXHswXFx9Lyx0aGlzLmxvY2FsLm5hbWUpO3ZhciBpPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLSxpfWNhdGNoKHQpe3Rocm93IHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLSx0fX19KSxsLnByb3RvdHlwZT1uZXcgcyxuKGwucHJvdG90eXBlLHtuYW1lOlwiR3JlZ29yaWFuXCIsamRFcG9jaDoxNzIxNDI1LjUsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOntcIlwiOntuYW1lOlwiR3JlZ29yaWFuXCIsZXBvY2hzOltcIkJDRVwiLFwiQ0VcIl0sbW9udGhOYW1lczpbXCJKYW51YXJ5XCIsXCJGZWJydWFyeVwiLFwiTWFyY2hcIixcIkFwcmlsXCIsXCJNYXlcIixcIkp1bmVcIixcIkp1bHlcIixcIkF1Z3VzdFwiLFwiU2VwdGVtYmVyXCIsXCJPY3RvYmVyXCIsXCJOb3ZlbWJlclwiLFwiRGVjZW1iZXJcIl0sbW9udGhOYW1lc1Nob3J0OltcIkphblwiLFwiRmViXCIsXCJNYXJcIixcIkFwclwiLFwiTWF5XCIsXCJKdW5cIixcIkp1bFwiLFwiQXVnXCIsXCJTZXBcIixcIk9jdFwiLFwiTm92XCIsXCJEZWNcIl0sZGF5TmFtZXM6W1wiU3VuZGF5XCIsXCJNb25kYXlcIixcIlR1ZXNkYXlcIixcIldlZG5lc2RheVwiLFwiVGh1cnNkYXlcIixcIkZyaWRheVwiLFwiU2F0dXJkYXlcIl0sZGF5TmFtZXNTaG9ydDpbXCJTdW5cIixcIk1vblwiLFwiVHVlXCIsXCJXZWRcIixcIlRodVwiLFwiRnJpXCIsXCJTYXRcIl0sZGF5TmFtZXNNaW46W1wiU3VcIixcIk1vXCIsXCJUdVwiLFwiV2VcIixcIlRoXCIsXCJGclwiLFwiU2FcIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDpcIm1tL2RkL3l5eXlcIixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZFllYXJ8fGMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWRZZWFyKTtyZXR1cm4odD1lLnllYXIoKSsoZS55ZWFyKCk8MD8xOjApKSU0PT0wJiYodCUxMDAhPTB8fHQlNDAwPT0wKX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoNC0obi5kYXlPZldlZWsoKXx8NyksXCJkXCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkTW9udGh8fGMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbXCJcIl0uaW52YWxpZERhdGUpO3Q9bi55ZWFyKCksZT1uLm1vbnRoKCkscj1uLmRheSgpLHQ8MCYmdCsrLGU8MyYmKGUrPTEyLHQtLSk7dmFyIGk9TWF0aC5mbG9vcih0LzEwMCksYT0yLWkrTWF0aC5mbG9vcihpLzQpO3JldHVybiBNYXRoLmZsb29yKDM2NS4yNSoodCs0NzE2KSkrTWF0aC5mbG9vcigzMC42MDAxKihlKzEpKStyK2EtMTUyNC41fSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcih0Ky41KSxyPU1hdGguZmxvb3IoKGUtMTg2NzIxNi4yNSkvMzY1MjQuMjUpLG49KHI9ZSsxK3ItTWF0aC5mbG9vcihyLzQpKSsxNTI0LGk9TWF0aC5mbG9vcigobi0xMjIuMSkvMzY1LjI1KSxhPU1hdGguZmxvb3IoMzY1LjI1KmkpLG89TWF0aC5mbG9vcigobi1hKS8zMC42MDAxKSxzPW4tYS1NYXRoLmZsb29yKDMwLjYwMDEqbyksbD1vLShvPjEzLjU/MTM6MSksYz1pLShsPjIuNT80NzE2OjQ3MTUpO3JldHVybiBjPD0wJiZjLS0sdGhpcy5uZXdEYXRlKGMsbCxzKX0sdG9KU0RhdGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWREYXRlKSxpPW5ldyBEYXRlKG4ueWVhcigpLG4ubW9udGgoKS0xLG4uZGF5KCkpO3JldHVybiBpLnNldEhvdXJzKDApLGkuc2V0TWludXRlcygwKSxpLnNldFNlY29uZHMoMCksaS5zZXRNaWxsaXNlY29uZHMoMCksaS5zZXRIb3VycyhpLmdldEhvdXJzKCk+MTI/aS5nZXRIb3VycygpKzI6MCksaX0sZnJvbUpTRGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5uZXdEYXRlKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCkrMSx0LmdldERhdGUoKSl9fSk7dmFyIGM9ZS5leHBvcnRzPW5ldyBpO2MuY2RhdGU9YSxjLmJhc2VDYWxlbmRhcj1zLGMuY2FsZW5kYXJzLmdyZWdvcmlhbj1sfSx7XCJvYmplY3QtYXNzaWduXCI6NDQ3fV0sNTU3OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcIm9iamVjdC1hc3NpZ25cIiksaT10KFwiLi9tYWluXCIpO24oaS5yZWdpb25hbE9wdGlvbnNbXCJcIl0se2ludmFsaWRBcmd1bWVudHM6XCJJbnZhbGlkIGFyZ3VtZW50c1wiLGludmFsaWRGb3JtYXQ6XCJDYW5ub3QgZm9ybWF0IGEgZGF0ZSBmcm9tIGFub3RoZXIgY2FsZW5kYXJcIixtaXNzaW5nTnVtYmVyQXQ6XCJNaXNzaW5nIG51bWJlciBhdCBwb3NpdGlvbiB7MH1cIix1bmtub3duTmFtZUF0OlwiVW5rbm93biBuYW1lIGF0IHBvc2l0aW9uIHswfVwiLHVuZXhwZWN0ZWRMaXRlcmFsQXQ6XCJVbmV4cGVjdGVkIGxpdGVyYWwgYXQgcG9zaXRpb24gezB9XCIsdW5leHBlY3RlZFRleHQ6XCJBZGRpdGlvbmFsIHRleHQgZm91bmQgYXQgZW5kXCJ9KSxpLmxvY2FsPWkucmVnaW9uYWxPcHRpb25zW1wiXCJdLG4oaS5jZGF0ZS5wcm90b3R5cGUse2Zvcm1hdERhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgdCYmKGU9dCx0PVwiXCIpLHRoaXMuX2NhbGVuZGFyLmZvcm1hdERhdGUodHx8XCJcIix0aGlzLGUpfX0pLG4oaS5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLHtVTklYX0VQT0NIOmkuaW5zdGFuY2UoKS5uZXdEYXRlKDE5NzAsMSwxKS50b0pEKCksU0VDU19QRVJfREFZOjg2NDAwLFRJQ0tTX0VQT0NIOmkuaW5zdGFuY2UoKS5qZEVwb2NoLFRJQ0tTX1BFUl9EQVk6ODY0ZTksQVRPTTpcInl5eXktbW0tZGRcIixDT09LSUU6XCJELCBkZCBNIHl5eXlcIixGVUxMOlwiREQsIE1NIGQsIHl5eXlcIixJU09fODYwMTpcInl5eXktbW0tZGRcIixKVUxJQU46XCJKXCIsUkZDXzgyMjpcIkQsIGQgTSB5eVwiLFJGQ184NTA6XCJERCwgZGQtTS15eVwiLFJGQ18xMDM2OlwiRCwgZCBNIHl5XCIsUkZDXzExMjM6XCJELCBkIE0geXl5eVwiLFJGQ18yODIyOlwiRCwgZCBNIHl5eXlcIixSU1M6XCJELCBkIE0geXlcIixUSUNLUzpcIiFcIixUSU1FU1RBTVA6XCJAXCIsVzNDOlwieXl5eS1tbS1kZFwiLGZvcm1hdERhdGU6ZnVuY3Rpb24odCxlLHIpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0JiYocj1lLGU9dCx0PVwiXCIpLCFlKXJldHVyblwiXCI7aWYoZS5jYWxlbmRhcigpIT09dGhpcyl0aHJvdyBpLmxvY2FsLmludmFsaWRGb3JtYXR8fGkucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWRGb3JtYXQ7dD10fHx0aGlzLmxvY2FsLmRhdGVGb3JtYXQ7Zm9yKHZhciBuLGEsbyxzLGw9KHI9cnx8e30pLmRheU5hbWVzU2hvcnR8fHRoaXMubG9jYWwuZGF5TmFtZXNTaG9ydCxjPXIuZGF5TmFtZXN8fHRoaXMubG9jYWwuZGF5TmFtZXMsdT1yLm1vbnRoTnVtYmVyc3x8dGhpcy5sb2NhbC5tb250aE51bWJlcnMsaD1yLm1vbnRoTmFtZXNTaG9ydHx8dGhpcy5sb2NhbC5tb250aE5hbWVzU2hvcnQsZj1yLm1vbnRoTmFtZXN8fHRoaXMubG9jYWwubW9udGhOYW1lcyxwPShyLmNhbGN1bGF0ZVdlZWt8fHRoaXMubG9jYWwuY2FsY3VsYXRlV2VlayxmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0xO3crbjx0Lmxlbmd0aCYmdC5jaGFyQXQodytuKT09PWU7KW4rKztyZXR1cm4gdys9bi0xLE1hdGguZmxvb3Iobi8ocnx8MSkpPjF9KSxkPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPVwiXCIrZTtpZihwKHQsbikpZm9yKDtpLmxlbmd0aDxyOylpPVwiMFwiK2k7cmV0dXJuIGl9LGc9dGhpcyx2PWZ1bmN0aW9uKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHU/dS5jYWxsKGcsdCxwKFwibVwiKSk6eChkKFwibVwiLHQubW9udGgoKSwyKSl9LG09ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9cImZ1bmN0aW9uXCI9PXR5cGVvZiBmP2YuY2FsbChnLHQpOmZbdC5tb250aCgpLWcubWluTW9udGhdOlwiZnVuY3Rpb25cIj09dHlwZW9mIGg/aC5jYWxsKGcsdCk6aFt0Lm1vbnRoKCktZy5taW5Nb250aF19LHk9dGhpcy5sb2NhbC5kaWdpdHMseD1mdW5jdGlvbih0KXtyZXR1cm4gci5sb2NhbE51bWJlcnMmJnk/eSh0KTp0fSxiPVwiXCIsXz0hMSx3PTA7dzx0Lmxlbmd0aDt3KyspaWYoXylcIidcIiE9PXQuY2hhckF0KHcpfHxwKFwiJ1wiKT9iKz10LmNoYXJBdCh3KTpfPSExO2Vsc2Ugc3dpdGNoKHQuY2hhckF0KHcpKXtjYXNlXCJkXCI6Yis9eChkKFwiZFwiLGUuZGF5KCksMikpO2JyZWFrO2Nhc2VcIkRcIjpiKz0obj1cIkRcIixhPWUuZGF5T2ZXZWVrKCksbz1sLHM9YyxwKG4pP3NbYV06b1thXSk7YnJlYWs7Y2FzZVwib1wiOmIrPWQoXCJvXCIsZS5kYXlPZlllYXIoKSwzKTticmVhaztjYXNlXCJ3XCI6Yis9ZChcIndcIixlLndlZWtPZlllYXIoKSwyKTticmVhaztjYXNlXCJtXCI6Yis9dihlKTticmVhaztjYXNlXCJNXCI6Yis9bShlLHAoXCJNXCIpKTticmVhaztjYXNlXCJ5XCI6Yis9cChcInlcIiwyKT9lLnllYXIoKTooZS55ZWFyKCklMTAwPDEwP1wiMFwiOlwiXCIpK2UueWVhcigpJTEwMDticmVhaztjYXNlXCJZXCI6cChcIllcIiwyKSxiKz1lLmZvcm1hdFllYXIoKTticmVhaztjYXNlXCJKXCI6Yis9ZS50b0pEKCk7YnJlYWs7Y2FzZVwiQFwiOmIrPShlLnRvSkQoKS10aGlzLlVOSVhfRVBPQ0gpKnRoaXMuU0VDU19QRVJfREFZO2JyZWFrO2Nhc2VcIiFcIjpiKz0oZS50b0pEKCktdGhpcy5USUNLU19FUE9DSCkqdGhpcy5USUNLU19QRVJfREFZO2JyZWFrO2Nhc2VcIidcIjpwKFwiJ1wiKT9iKz1cIidcIjpfPSEwO2JyZWFrO2RlZmF1bHQ6Yis9dC5jaGFyQXQodyl9cmV0dXJuIGJ9LHBhcnNlRGF0ZTpmdW5jdGlvbih0LGUscil7aWYobnVsbD09ZSl0aHJvdyBpLmxvY2FsLmludmFsaWRBcmd1bWVudHN8fGkucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWRBcmd1bWVudHM7aWYoXCJcIj09PShlPVwib2JqZWN0XCI9PXR5cGVvZiBlP2UudG9TdHJpbmcoKTplK1wiXCIpKXJldHVybiBudWxsO3Q9dHx8dGhpcy5sb2NhbC5kYXRlRm9ybWF0O3ZhciBuPShyPXJ8fHt9KS5zaG9ydFllYXJDdXRvZmZ8fHRoaXMuc2hvcnRZZWFyQ3V0b2ZmO249XCJzdHJpbmdcIiE9dHlwZW9mIG4/bjp0aGlzLnRvZGF5KCkueWVhcigpJTEwMCtwYXJzZUludChuLDEwKTtmb3IodmFyIGE9ci5kYXlOYW1lc1Nob3J0fHx0aGlzLmxvY2FsLmRheU5hbWVzU2hvcnQsbz1yLmRheU5hbWVzfHx0aGlzLmxvY2FsLmRheU5hbWVzLHM9ci5wYXJzZU1vbnRofHx0aGlzLmxvY2FsLnBhcnNlTW9udGgsbD1yLm1vbnRoTnVtYmVyc3x8dGhpcy5sb2NhbC5tb250aE51bWJlcnMsYz1yLm1vbnRoTmFtZXNTaG9ydHx8dGhpcy5sb2NhbC5tb250aE5hbWVzU2hvcnQsdT1yLm1vbnRoTmFtZXN8fHRoaXMubG9jYWwubW9udGhOYW1lcyxoPS0xLGY9LTEscD0tMSxkPS0xLGc9LTEsdj0hMSxtPSExLHk9ZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MTtNK248dC5sZW5ndGgmJnQuY2hhckF0KE0rbik9PT1lOyluKys7cmV0dXJuIE0rPW4tMSxNYXRoLmZsb29yKG4vKHJ8fDEpKT4xfSx4PWZ1bmN0aW9uKHQscil7dmFyIG49eSh0LHIpLGE9WzIsMyxuPzQ6MixuPzQ6MiwxMCwxMSwyMF1bXCJveVlKQCFcIi5pbmRleE9mKHQpKzFdLG89bmV3IFJlZ0V4cChcIl4tP1xcXFxkezEsXCIrYStcIn1cIikscz1lLnN1YnN0cmluZyhUKS5tYXRjaChvKTtpZighcyl0aHJvdyhpLmxvY2FsLm1pc3NpbmdOdW1iZXJBdHx8aS5yZWdpb25hbE9wdGlvbnNbXCJcIl0ubWlzc2luZ051bWJlckF0KS5yZXBsYWNlKC9cXHswXFx9LyxUKTtyZXR1cm4gVCs9c1swXS5sZW5ndGgscGFyc2VJbnQoc1swXSwxMCl9LGI9dGhpcyxfPWZ1bmN0aW9uKCl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgbCl7eShcIm1cIik7dmFyIHQ9bC5jYWxsKGIsZS5zdWJzdHJpbmcoVCkpO3JldHVybiBUKz10Lmxlbmd0aCx0fXJldHVybiB4KFwibVwiKX0sdz1mdW5jdGlvbih0LHIsbixhKXtmb3IodmFyIG89eSh0LGEpP246cixzPTA7czxvLmxlbmd0aDtzKyspaWYoZS5zdWJzdHIoVCxvW3NdLmxlbmd0aCkudG9Mb3dlckNhc2UoKT09PW9bc10udG9Mb3dlckNhc2UoKSlyZXR1cm4gVCs9b1tzXS5sZW5ndGgscytiLm1pbk1vbnRoO3Rocm93KGkubG9jYWwudW5rbm93bk5hbWVBdHx8aS5yZWdpb25hbE9wdGlvbnNbXCJcIl0udW5rbm93bk5hbWVBdCkucmVwbGFjZSgvXFx7MFxcfS8sVCl9LGs9ZnVuY3Rpb24oKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB1KXt2YXIgdD15KFwiTVwiKT91LmNhbGwoYixlLnN1YnN0cmluZyhUKSk6Yy5jYWxsKGIsZS5zdWJzdHJpbmcoVCkpO3JldHVybiBUKz10Lmxlbmd0aCx0fXJldHVybiB3KFwiTVwiLGMsdSl9LEE9ZnVuY3Rpb24oKXtpZihlLmNoYXJBdChUKSE9PXQuY2hhckF0KE0pKXRocm93KGkubG9jYWwudW5leHBlY3RlZExpdGVyYWxBdHx8aS5yZWdpb25hbE9wdGlvbnNbXCJcIl0udW5leHBlY3RlZExpdGVyYWxBdCkucmVwbGFjZSgvXFx7MFxcfS8sVCk7VCsrfSxUPTAsTT0wO008dC5sZW5ndGg7TSsrKWlmKG0pXCInXCIhPT10LmNoYXJBdChNKXx8eShcIidcIik/QSgpOm09ITE7ZWxzZSBzd2l0Y2godC5jaGFyQXQoTSkpe2Nhc2VcImRcIjpkPXgoXCJkXCIpO2JyZWFrO2Nhc2VcIkRcIjp3KFwiRFwiLGEsbyk7YnJlYWs7Y2FzZVwib1wiOmc9eChcIm9cIik7YnJlYWs7Y2FzZVwid1wiOngoXCJ3XCIpO2JyZWFrO2Nhc2VcIm1cIjpwPV8oKTticmVhaztjYXNlXCJNXCI6cD1rKCk7YnJlYWs7Y2FzZVwieVwiOnZhciBTPU07dj0heShcInlcIiwyKSxNPVMsZj14KFwieVwiLDIpO2JyZWFrO2Nhc2VcIllcIjpmPXgoXCJZXCIsMik7YnJlYWs7Y2FzZVwiSlwiOmg9eChcIkpcIikrLjUsXCIuXCI9PT1lLmNoYXJBdChUKSYmKFQrKyx4KFwiSlwiKSk7YnJlYWs7Y2FzZVwiQFwiOmg9eChcIkBcIikvdGhpcy5TRUNTX1BFUl9EQVkrdGhpcy5VTklYX0VQT0NIO2JyZWFrO2Nhc2VcIiFcIjpoPXgoXCIhXCIpL3RoaXMuVElDS1NfUEVSX0RBWSt0aGlzLlRJQ0tTX0VQT0NIO2JyZWFrO2Nhc2VcIipcIjpUPWUubGVuZ3RoO2JyZWFrO2Nhc2VcIidcIjp5KFwiJ1wiKT9BKCk6bT0hMDticmVhaztkZWZhdWx0OkEoKX1pZihUPGUubGVuZ3RoKXRocm93IGkubG9jYWwudW5leHBlY3RlZFRleHR8fGkucmVnaW9uYWxPcHRpb25zW1wiXCJdLnVuZXhwZWN0ZWRUZXh0O2lmKC0xPT09Zj9mPXRoaXMudG9kYXkoKS55ZWFyKCk6ZjwxMDAmJnYmJihmKz0tMT09PW4/MTkwMDp0aGlzLnRvZGF5KCkueWVhcigpLXRoaXMudG9kYXkoKS55ZWFyKCklMTAwLShmPD1uPzA6MTAwKSksXCJzdHJpbmdcIj09dHlwZW9mIHAmJihwPXMuY2FsbCh0aGlzLGYscCkpLGc+LTEpe3A9MSxkPWc7Zm9yKHZhciBFPXRoaXMuZGF5c0luTW9udGgoZixwKTtkPkU7RT10aGlzLmRheXNJbk1vbnRoKGYscCkpcCsrLGQtPUV9cmV0dXJuIGg+LTE/dGhpcy5mcm9tSkQoaCk6dGhpcy5uZXdEYXRlKGYscCxkKX0sZGV0ZXJtaW5lRGF0ZTpmdW5jdGlvbih0LGUscixuLGkpe3ImJlwib2JqZWN0XCIhPXR5cGVvZiByJiYoaT1uLG49cixyPW51bGwpLFwic3RyaW5nXCIhPXR5cGVvZiBuJiYoaT1uLG49XCJcIik7dmFyIGE9dGhpcztyZXR1cm4gZT1lP2UubmV3RGF0ZSgpOm51bGwsdD1udWxsPT10P2U6XCJzdHJpbmdcIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBhLnBhcnNlRGF0ZShuLHQsaSl9Y2F0Y2godCl7fWZvcih2YXIgZT0oKHQ9dC50b0xvd2VyQ2FzZSgpKS5tYXRjaCgvXmMvKSYmcj9yLm5ld0RhdGUoKTpudWxsKXx8YS50b2RheSgpLG89LyhbKy1dP1swLTldKylcXHMqKGR8d3xtfHkpPy9nLHM9by5leGVjKHQpO3M7KWUuYWRkKHBhcnNlSW50KHNbMV0sMTApLHNbMl18fFwiZFwiKSxzPW8uZXhlYyh0KTtyZXR1cm4gZX0odCk6XCJudW1iZXJcIj09dHlwZW9mIHQ/aXNOYU4odCl8fHQ9PT0xLzB8fHQ9PT0tMS8wP2U6YS50b2RheSgpLmFkZCh0LFwiZFwiKTphLm5ld0RhdGUodCl9fSl9LHtcIi4vbWFpblwiOjU1NixcIm9iamVjdC1hc3NpZ25cIjo0NDd9XSw1NTg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dChcImN3aXNlLWNvbXBpbGVyXCIpKHthcmdzOltcImFycmF5XCIse29mZnNldDpbMV0sYXJyYXk6MH0sXCJzY2FsYXJcIixcInNjYWxhclwiLFwiaW5kZXhcIl0scHJlOntib2R5Olwie31cIixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keTpcInt9XCIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6XCJ7XFxuICAgICAgICB2YXIgX2lubGluZV8xX2RhID0gX2lubGluZV8xX2FyZzBfIC0gX2lubGluZV8xX2FyZzNfXFxuICAgICAgICB2YXIgX2lubGluZV8xX2RiID0gX2lubGluZV8xX2FyZzFfIC0gX2lubGluZV8xX2FyZzNfXFxuICAgICAgICBpZigoX2lubGluZV8xX2RhID49IDApICE9PSAoX2lubGluZV8xX2RiID49IDApKSB7XFxuICAgICAgICAgIF9pbmxpbmVfMV9hcmcyXy5wdXNoKF9pbmxpbmVfMV9hcmc0X1swXSArIDAuNSArIDAuNSAqIChfaW5saW5lXzFfZGEgKyBfaW5saW5lXzFfZGIpIC8gKF9pbmxpbmVfMV9kYSAtIF9pbmxpbmVfMV9kYikpXFxuICAgICAgICB9XFxuICAgICAgfVwiLGFyZ3M6W3tuYW1lOlwiX2lubGluZV8xX2FyZzBfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfMV9hcmcxX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzFfYXJnMl9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xX2FyZzNfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfSx7bmFtZTpcIl9pbmxpbmVfMV9hcmc0X1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXCJfaW5saW5lXzFfZGFcIixcIl9pbmxpbmVfMV9kYlwiXX0sZnVuY05hbWU6XCJ6ZXJvQ3Jvc3NpbmdzXCJ9KX0se1wiY3dpc2UtY29tcGlsZXJcIjoxMzd9XSw1NTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1bXTtyZXR1cm4gZT0rZXx8MCxuKHQuaGkodC5zaGFwZVswXS0xKSxyLGUpLHJ9O3ZhciBuPXQoXCIuL2xpYi96Yy1jb3JlXCIpfSx7XCIuL2xpYi96Yy1jb3JlXCI6NTU4fV0sNTYwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPVt7cGF0aDpcIlwiLGJhY2tvZmY6MH0se3BhdGg6XCJNLTIuNCwtM1YzTDAuNiwwWlwiLGJhY2tvZmY6LjZ9LHtwYXRoOlwiTS0zLjcsLTIuNVYyLjVMMS4zLDBaXCIsYmFja29mZjoxLjN9LHtwYXRoOlwiTS00LjQ1LC0zTC0xLjY1LC0wLjJWMC4yTC00LjQ1LDNMMS41NSwwWlwiLGJhY2tvZmY6MS41NX0se3BhdGg6XCJNLTIuMiwtMi4yTC0wLjIsLTAuMlYwLjJMLTIuMiwyLjJMLTEuNCwzTDEuNiwwTC0xLjQsLTNaXCIsYmFja29mZjoxLjZ9LHtwYXRoOlwiTS00LjQsLTIuMUwtMC42LC0wLjJWMC4yTC00LjQsMi4xTC00LDNMMiwwTC00LC0zWlwiLGJhY2tvZmY6Mn0se3BhdGg6XCJNMiwwQTIsMiAwIDEsMSAwLC0yQTIsMiAwIDAsMSAyLDBaXCIsYmFja29mZjowLG5vUm90YXRlOiEwfSx7cGF0aDpcIk0yLDJWLTJILTJWMlpcIixiYWNrb2ZmOjAsbm9Sb3RhdGU6ITB9XX0se31dLDU2MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2Fycm93X3BhdGhzXCIpLGk9dChcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzXCIpLG89dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIikudGVtcGxhdGVkQXJyYXk7ZS5leHBvcnRzPW8oXCJhbm5vdGF0aW9uXCIse3Zpc2libGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LHRleHQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LHRleHRhbmdsZTp7dmFsVHlwZTpcImFuZ2xlXCIsZGZsdDowLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0sZm9udDppKHtlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCIsY29sb3JFZGl0VHlwZTpcImFycmF5ZHJhd1wifSksd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MSxkZmx0Om51bGwsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSxoZWlnaHQ6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MSxkZmx0Om51bGwsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSxvcGFjaXR5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGFsaWduOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJsZWZ0XCIsXCJjZW50ZXJcIixcInJpZ2h0XCJdLGRmbHQ6XCJjZW50ZXJcIixlZGl0VHlwZTpcImFycmF5ZHJhd1wifSx2YWxpZ246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInRvcFwiLFwibWlkZGxlXCIsXCJib3R0b21cIl0sZGZsdDpcIm1pZGRsZVwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGJnY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6XCJyZ2JhKDAsMCwwLDApXCIsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6XCJyZ2JhKDAsMCwwLDApXCIsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0sYm9yZGVycGFkOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSxzaG93YXJyb3c6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LGFycm93Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGFycm93aGVhZDp7dmFsVHlwZTpcImludGVnZXJcIixtaW46MCxtYXg6bi5sZW5ndGgsZGZsdDoxLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LHN0YXJ0YXJyb3doZWFkOnt2YWxUeXBlOlwiaW50ZWdlclwiLG1pbjowLG1heDpuLmxlbmd0aCxkZmx0OjEsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0sYXJyb3dzaWRlOnt2YWxUeXBlOlwiZmxhZ2xpc3RcIixmbGFnczpbXCJlbmRcIixcInN0YXJ0XCJdLGV4dHJhczpbXCJub25lXCJdLGRmbHQ6XCJlbmRcIixlZGl0VHlwZTpcImFycmF5ZHJhd1wifSxhcnJvd3NpemU6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46LjMsZGZsdDoxLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0sc3RhcnRhcnJvd3NpemU6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46LjMsZGZsdDoxLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0sYXJyb3d3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjouMSxlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LHN0YW5kb2ZmOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDowLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0sc3RhcnRzdGFuZG9mZjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LGF4Ont2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSxheTp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0sYXhyZWY6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsZGZsdDpcInBpeGVsXCIsdmFsdWVzOltcInBpeGVsXCIsYS5pZFJlZ2V4LngudG9TdHJpbmcoKV0sZWRpdFR5cGU6XCJjYWxjXCJ9LGF5cmVmOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLGRmbHQ6XCJwaXhlbFwiLHZhbHVlczpbXCJwaXhlbFwiLGEuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOlwiY2FsY1wifSx4cmVmOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJwYXBlclwiLGEuaWRSZWdleC54LnRvU3RyaW5nKCldLGVkaXRUeXBlOlwiY2FsY1wifSx4Ont2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSx4YW5jaG9yOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhdXRvXCIsXCJsZWZ0XCIsXCJjZW50ZXJcIixcInJpZ2h0XCJdLGRmbHQ6XCJhdXRvXCIsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSx4c2hpZnQ6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjAsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSx5cmVmOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJwYXBlclwiLGEuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOlwiY2FsY1wifSx5Ont2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSx5YW5jaG9yOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhdXRvXCIsXCJ0b3BcIixcIm1pZGRsZVwiLFwiYm90dG9tXCJdLGRmbHQ6XCJhdXRvXCIsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSx5c2hpZnQ6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjAsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSxjbGlja3Rvc2hvdzp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6WyExLFwib25vZmZcIixcIm9ub3V0XCJdLGRmbHQ6ITEsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0seGNsaWNrOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0seWNsaWNrOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0saG92ZXJsYWJlbDp7Ymdjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGZvbnQ6aSh7ZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0pLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGNhcHR1cmVldmVudHM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0sZWRpdFR5cGU6XCJjYWxjXCIsX2RlcHJlY2F0ZWQ6e3JlZjp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwiY2FsY1wifX19KX0se1wiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHNcIjo3NTUsXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIjo3NzUsXCIuL2Fycm93X3BhdGhzXCI6NTYwfV0sNTYyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxhPXQoXCIuL2RyYXdcIikuZHJhdztmdW5jdGlvbiBvKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7bi5maWx0ZXJWaXNpYmxlKGUuYW5ub3RhdGlvbnMpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHI9aS5nZXRGcm9tSWQodCxlLnhyZWYpLG49aS5nZXRGcm9tSWQodCxlLnlyZWYpO2UuX2V4dHJlbWVzPXt9LHImJnMoZSxyKSxuJiZzKGUsbil9KX1mdW5jdGlvbiBzKHQsZSl7dmFyIHIsbj1lLl9pZCxhPW4uY2hhckF0KDApLG89dFthXSxzPXRbXCJhXCIrYV0sbD10W2ErXCJyZWZcIl0sYz10W1wiYVwiK2ErXCJyZWZcIl0sdT10W1wiX1wiK2ErXCJwYWRwbHVzXCJdLGg9dFtcIl9cIithK1wicGFkbWludXNcIl0sZj17eDoxLHk6LTF9W2FdKnRbYStcInNoaWZ0XCJdLHA9Myp0LmFycm93c2l6ZSp0LmFycm93d2lkdGh8fDAsZD1wK2YsZz1wLWYsdj0zKnQuc3RhcnRhcnJvd3NpemUqdC5hcnJvd3dpZHRofHwwLG09ditmLHk9di1mO2lmKGM9PT1sKXt2YXIgeD1pLmZpbmRFeHRyZW1lcyhlLFtlLnIyYyhvKV0se3BwYWRwbHVzOmQscHBhZG1pbnVzOmd9KSxiPWkuZmluZEV4dHJlbWVzKGUsW2UucjJjKHMpXSx7cHBhZHBsdXM6TWF0aC5tYXgodSxtKSxwcGFkbWludXM6TWF0aC5tYXgoaCx5KX0pO3I9e21pbjpbeC5taW5bMF0sYi5taW5bMF1dLG1heDpbeC5tYXhbMF0sYi5tYXhbMF1dfX1lbHNlIG09cz9tK3M6bSx5PXM/eS1zOnkscj1pLmZpbmRFeHRyZW1lcyhlLFtlLnIyYyhvKV0se3BwYWRwbHVzOk1hdGgubWF4KHUsZCxtKSxwcGFkbWludXM6TWF0aC5tYXgoaCxnLHkpfSk7dC5fZXh0cmVtZXNbbl09cn1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtpZihuLmZpbHRlclZpc2libGUoZS5hbm5vdGF0aW9ucykubGVuZ3RoJiZ0Ll9mdWxsRGF0YS5sZW5ndGgpcmV0dXJuIG4uc3luY09yQXN5bmMoW2Esb10sdCl9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4vZHJhd1wiOjU2N31dLDU2MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcmVnaXN0cnlcIiksYT10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKS5hcnJheUVkaXRvcjtmdW5jdGlvbiBvKHQsZSl7dmFyIHIsbixpLGEsbyxsLGMsdT10Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zLGg9W10sZj1bXSxwPVtdLGQ9KGV8fFtdKS5sZW5ndGg7Zm9yKHI9MDtyPHUubGVuZ3RoO3IrKylpZihhPShpPXVbcl0pLmNsaWNrdG9zaG93KXtmb3Iobj0wO248ZDtuKyspaWYobD0obz1lW25dKS54YXhpcyxjPW8ueWF4aXMsbC5faWQ9PT1pLnhyZWYmJmMuX2lkPT09aS55cmVmJiZsLmQycihvLngpPT09cyhpLl94Y2xpY2ssbCkmJmMuZDJyKG8ueSk9PT1zKGkuX3ljbGljayxjKSl7KGkudmlzaWJsZT9cIm9ub3V0XCI9PT1hP2Y6cDpoKS5wdXNoKHIpO2JyZWFrfW49PT1kJiZpLnZpc2libGUmJlwib25vdXRcIj09PWEmJmYucHVzaChyKX1yZXR1cm57b246aCxvZmY6ZixleHBsaWNpdE9mZjpwfX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuXCJsb2dcIj09PWUudHlwZT9lLmwycih0KTplLmQycih0KX1lLmV4cG9ydHM9e2hhc0NsaWNrVG9TaG93OmZ1bmN0aW9uKHQsZSl7dmFyIHI9byh0LGUpO3JldHVybiByLm9uLmxlbmd0aD4wfHxyLmV4cGxpY2l0T2ZmLmxlbmd0aD4wfSxvbkNsaWNrOmZ1bmN0aW9uKHQsZSl7dmFyIHIscyxsPW8odCxlKSxjPWwub24sdT1sLm9mZi5jb25jYXQobC5leHBsaWNpdE9mZiksaD17fSxmPXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnM7aWYoIWMubGVuZ3RoJiYhdS5sZW5ndGgpcmV0dXJuO2ZvcihyPTA7cjxjLmxlbmd0aDtyKyspKHM9YSh0LmxheW91dCxcImFubm90YXRpb25zXCIsZltjW3JdXSkpLm1vZGlmeUl0ZW0oXCJ2aXNpYmxlXCIsITApLG4uZXh0ZW5kRmxhdChoLHMuZ2V0VXBkYXRlT2JqKCkpO2ZvcihyPTA7cjx1Lmxlbmd0aDtyKyspKHM9YSh0LmxheW91dCxcImFubm90YXRpb25zXCIsZlt1W3JdXSkpLm1vZGlmeUl0ZW0oXCJ2aXNpYmxlXCIsITEpLG4uZXh0ZW5kRmxhdChoLHMuZ2V0VXBkYXRlT2JqKCkpO3JldHVybiBpLmNhbGwoXCJ1cGRhdGVcIix0LHt9LGgpfX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi9yZWdpc3RyeVwiOjgyOX1dLDU2NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vY29sb3JcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe2EoXCJvcGFjaXR5XCIpO3ZhciBvPWEoXCJiZ2NvbG9yXCIpLHM9YShcImJvcmRlcmNvbG9yXCIpLGw9aS5vcGFjaXR5KHMpO2EoXCJib3JkZXJwYWRcIik7dmFyIGM9YShcImJvcmRlcndpZHRoXCIpLHU9YShcInNob3dhcnJvd1wiKTtpZihhKFwidGV4dFwiLHU/XCIgXCI6ci5fZGZsdFRpdGxlLmFubm90YXRpb24pLGEoXCJ0ZXh0YW5nbGVcIiksbi5jb2VyY2VGb250KGEsXCJmb250XCIsci5mb250KSxhKFwid2lkdGhcIiksYShcImFsaWduXCIpLGEoXCJoZWlnaHRcIikmJmEoXCJ2YWxpZ25cIiksdSl7dmFyIGgsZixwPWEoXCJhcnJvd3NpZGVcIik7LTEhPT1wLmluZGV4T2YoXCJlbmRcIikmJihoPWEoXCJhcnJvd2hlYWRcIiksZj1hKFwiYXJyb3dzaXplXCIpKSwtMSE9PXAuaW5kZXhPZihcInN0YXJ0XCIpJiYoYShcInN0YXJ0YXJyb3doZWFkXCIsaCksYShcInN0YXJ0YXJyb3dzaXplXCIsZikpLGEoXCJhcnJvd2NvbG9yXCIsbD9lLmJvcmRlcmNvbG9yOmkuZGVmYXVsdExpbmUpLGEoXCJhcnJvd3dpZHRoXCIsMioobCYmY3x8MSkpLGEoXCJzdGFuZG9mZlwiKSxhKFwic3RhcnRzdGFuZG9mZlwiKX12YXIgZD1hKFwiaG92ZXJ0ZXh0XCIpLGc9ci5ob3ZlcmxhYmVsfHx7fTtpZihkKXt2YXIgdj1hKFwiaG92ZXJsYWJlbC5iZ2NvbG9yXCIsZy5iZ2NvbG9yfHwoaS5vcGFjaXR5KG8pP2kucmdiKG8pOmkuZGVmYXVsdExpbmUpKSxtPWEoXCJob3ZlcmxhYmVsLmJvcmRlcmNvbG9yXCIsZy5ib3JkZXJjb2xvcnx8aS5jb250cmFzdCh2KSk7bi5jb2VyY2VGb250KGEsXCJob3ZlcmxhYmVsLmZvbnRcIix7ZmFtaWx5OmcuZm9udC5mYW1pbHksc2l6ZTpnLmZvbnQuc2l6ZSxjb2xvcjpnLmZvbnQuY29sb3J8fG19KX1hKFwiY2FwdHVyZWV2ZW50c1wiLCEhZCl9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9jb2xvclwiOjU3OH1dLDU2NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuLi8uLi9saWIvdG9fbG9nX3JhbmdlXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtlPWV8fHt9O3ZhciBvPVwibG9nXCI9PT1yJiZcImxpbmVhclwiPT09ZS50eXBlLHM9XCJsaW5lYXJcIj09PXImJlwibG9nXCI9PT1lLnR5cGU7aWYob3x8cylmb3IodmFyIGwsYyx1PXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnMsaD1lLl9pZC5jaGFyQXQoMCksZj0wO2Y8dS5sZW5ndGg7ZisrKWw9dVtmXSxjPVwiYW5ub3RhdGlvbnNbXCIrZitcIl0uXCIsbFtoK1wicmVmXCJdPT09ZS5faWQmJnAoaCksbFtcImFcIitoK1wicmVmXCJdPT09ZS5faWQmJnAoXCJhXCIraCk7ZnVuY3Rpb24gcCh0KXt2YXIgcj1sW3RdLHM9bnVsbDtzPW8/aShyLGUucmFuZ2UpOk1hdGgucG93KDEwLHIpLG4ocyl8fChzPW51bGwpLGEoYyt0LHMpfX19LHtcIi4uLy4uL2xpYi90b19sb2dfcmFuZ2VcIjo3MjcsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDU2NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksYT10KFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCIpLG89dChcIi4vY29tbW9uX2RlZmF1bHRzXCIpLHM9dChcIi4vYXR0cmlidXRlc1wiKTtmdW5jdGlvbiBsKHQsZSxyKXtmdW5jdGlvbiBhKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9dmFyIGw9YShcInZpc2libGVcIiksYz1hKFwiY2xpY2t0b3Nob3dcIik7aWYobHx8Yyl7byh0LGUscixhKTtmb3IodmFyIHU9ZS5zaG93YXJyb3csaD1bXCJ4XCIsXCJ5XCJdLGY9Wy0xMCwtMzBdLHA9e19mdWxsTGF5b3V0OnJ9LGQ9MDtkPDI7ZCsrKXt2YXIgZz1oW2RdLHY9aS5jb2VyY2VSZWYodCxlLHAsZyxcIlwiLFwicGFwZXJcIik7aWYoXCJwYXBlclwiIT09dilpLmdldEZyb21JZChwLHYpLl9hbm5JbmRpY2VzLnB1c2goZS5faW5kZXgpO2lmKGkuY29lcmNlUG9zaXRpb24oZSxwLGEsdixnLC41KSx1KXt2YXIgbT1cImFcIitnLHk9aS5jb2VyY2VSZWYodCxlLHAsbSxcInBpeGVsXCIpO1wicGl4ZWxcIiE9PXkmJnkhPT12JiYoeT1lW21dPVwicGl4ZWxcIik7dmFyIHg9XCJwaXhlbFwiPT09eT9mW2RdOi40O2kuY29lcmNlUG9zaXRpb24oZSxwLGEseSxtLHgpfWEoZytcImFuY2hvclwiKSxhKGcrXCJzaGlmdFwiKX1pZihuLm5vbmVPckFsbCh0LGUsW1wieFwiLFwieVwiXSksdSYmbi5ub25lT3JBbGwodCxlLFtcImF4XCIsXCJheVwiXSksYyl7dmFyIGI9YShcInhjbGlja1wiKSxfPWEoXCJ5Y2xpY2tcIik7ZS5feGNsaWNrPXZvaWQgMD09PWI/ZS54OmkuY2xlYW5Qb3NpdGlvbihiLHAsZS54cmVmKSxlLl95Y2xpY2s9dm9pZCAwPT09Xz9lLnk6aS5jbGVhblBvc2l0aW9uKF8scCxlLnlyZWYpfX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7YSh0LGUse25hbWU6XCJhbm5vdGF0aW9uc1wiLGhhbmRsZUl0ZW1EZWZhdWx0czpsfSl9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIjo3NDUsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4vYXR0cmlidXRlc1wiOjU2MSxcIi4vY29tbW9uX2RlZmF1bHRzXCI6NTY0fV0sNTY3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGE9dChcIi4uLy4uL3Bsb3RzL3Bsb3RzXCIpLG89dChcIi4uLy4uL2xpYlwiKSxzPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxsPXQoXCIuLi9jb2xvclwiKSxjPXQoXCIuLi9kcmF3aW5nXCIpLHU9dChcIi4uL2Z4XCIpLGg9dChcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiKSxmPXQoXCIuLi8uLi9saWIvc2V0Y3Vyc29yXCIpLHA9dChcIi4uL2RyYWdlbGVtZW50XCIpLGQ9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIikuYXJyYXlFZGl0b3IsZz10KFwiLi9kcmF3X2Fycm93X2hlYWRcIik7ZnVuY3Rpb24gdih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnNbZV18fHt9LG49cy5nZXRGcm9tSWQodCxyLnhyZWYpLGk9cy5nZXRGcm9tSWQodCxyLnlyZWYpO24mJm4uc2V0U2NhbGUoKSxpJiZpLnNldFNjYWxlKCksbSh0LHIsZSwhMSxuLGkpfWZ1bmN0aW9uIG0odCxlLHIsYSxzLHYpe3ZhciBtLHkseD10Ll9mdWxsTGF5b3V0LGI9dC5fZnVsbExheW91dC5fc2l6ZSxfPXQuX2NvbnRleHQuZWRpdHM7YT8obT1cImFubm90YXRpb24tXCIrYSx5PWErXCIuYW5ub3RhdGlvbnNcIik6KG09XCJhbm5vdGF0aW9uXCIseT1cImFubm90YXRpb25zXCIpO3ZhciB3PWQodC5sYXlvdXQseSxlKSxrPXcubW9kaWZ5QmFzZSxBPXcubW9kaWZ5SXRlbSxUPXcuZ2V0VXBkYXRlT2JqO3guX2luZm9sYXllci5zZWxlY3RBbGwoXCIuXCIrbSsnW2RhdGEtaW5kZXg9XCInK3IrJ1wiXScpLnJlbW92ZSgpO3ZhciBNPVwiY2xpcFwiK3guX3VpZCtcIl9hbm5cIityO2lmKGUuX2lucHV0JiYhMSE9PWUudmlzaWJsZSl7dmFyIFM9e3g6e30seTp7fX0sRT0rZS50ZXh0YW5nbGV8fDAsQz14Ll9pbmZvbGF5ZXIuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKG0sITApLmF0dHIoXCJkYXRhLWluZGV4XCIsU3RyaW5nKHIpKS5zdHlsZShcIm9wYWNpdHlcIixlLm9wYWNpdHkpLEw9Qy5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJhbm5vdGF0aW9uLXRleHQtZ1wiLCEwKSx6PV9bZS5zaG93YXJyb3c/XCJhbm5vdGF0aW9uVGFpbFwiOlwiYW5ub3RhdGlvblBvc2l0aW9uXCJdLE89ZS5jYXB0dXJlZXZlbnRzfHxfLmFubm90YXRpb25UZXh0fHx6LEk9TC5hcHBlbmQoXCJnXCIpLnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixPP1wiYWxsXCI6bnVsbCkuY2FsbChmLFwicG9pbnRlclwiKS5vbihcImNsaWNrXCIsZnVuY3Rpb24oKXt0Ll9kcmFnZ2luZz0hMTt2YXIgaT17aW5kZXg6cixhbm5vdGF0aW9uOmUuX2lucHV0LGZ1bGxBbm5vdGF0aW9uOmUsZXZlbnQ6bi5ldmVudH07YSYmKGkuc3VicGxvdElkPWEpLHQuZW1pdChcInBsb3RseV9jbGlja2Fubm90YXRpb25cIixpKX0pO2UuaG92ZXJ0ZXh0JiZJLm9uKFwibW91c2VvdmVyXCIsZnVuY3Rpb24oKXt2YXIgcj1lLmhvdmVybGFiZWwsbj1yLmZvbnQsaT10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGE9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt1LmxvbmVIb3Zlcih7eDA6aS5sZWZ0LWEubGVmdCx4MTppLnJpZ2h0LWEubGVmdCx5OihpLnRvcCtpLmJvdHRvbSkvMi1hLnRvcCx0ZXh0OmUuaG92ZXJ0ZXh0LGNvbG9yOnIuYmdjb2xvcixib3JkZXJDb2xvcjpyLmJvcmRlcmNvbG9yLGZvbnRGYW1pbHk6bi5mYW1pbHksZm9udFNpemU6bi5zaXplLGZvbnRDb2xvcjpuLmNvbG9yfSx7Y29udGFpbmVyOnguX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOnguX3BhcGVyLm5vZGUoKSxnZDp0fSl9KS5vbihcIm1vdXNlb3V0XCIsZnVuY3Rpb24oKXt1LmxvbmVVbmhvdmVyKHguX2hvdmVybGF5ZXIubm9kZSgpKX0pO3ZhciBEPWUuYm9yZGVyd2lkdGgsUD1lLmJvcmRlcnBhZCxSPUQrUCxGPUkuYXBwZW5kKFwicmVjdFwiKS5hdHRyKFwiY2xhc3NcIixcImJnXCIpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsRCtcInB4XCIpLmNhbGwobC5zdHJva2UsZS5ib3JkZXJjb2xvcikuY2FsbChsLmZpbGwsZS5iZ2NvbG9yKSxCPWUud2lkdGh8fGUuaGVpZ2h0LE49eC5fdG9wY2xpcHMuc2VsZWN0QWxsKFwiI1wiK00pLmRhdGEoQj9bMF06W10pO04uZW50ZXIoKS5hcHBlbmQoXCJjbGlwUGF0aFwiKS5jbGFzc2VkKFwiYW5uY2xpcFwiLCEwKS5hdHRyKFwiaWRcIixNKS5hcHBlbmQoXCJyZWN0XCIpLE4uZXhpdCgpLnJlbW92ZSgpO3ZhciBqPWUuZm9udCxWPXgubWV0YT9vLnRlbXBsYXRlU3RyaW5nKGUudGV4dCx7bWV0YTp4Lm1ldGF9KTplLnRleHQsVT1JLmFwcGVuZChcInRleHRcIikuY2xhc3NlZChcImFubm90YXRpb24tdGV4dFwiLCEwKS50ZXh0KFYpO18uYW5ub3RhdGlvblRleHQ/VS5jYWxsKGgubWFrZUVkaXRhYmxlLHtkZWxlZ2F0ZTpJLGdkOnR9KS5jYWxsKHEpLm9uKFwiZWRpdFwiLGZ1bmN0aW9uKHIpe2UudGV4dD1yLHRoaXMuY2FsbChxKSxBKFwidGV4dFwiLHIpLHMmJnMuYXV0b3JhbmdlJiZrKHMuX25hbWUrXCIuYXV0b3JhbmdlXCIsITApLHYmJnYuYXV0b3JhbmdlJiZrKHYuX25hbWUrXCIuYXV0b3JhbmdlXCIsITApLGkuY2FsbChcIl9ndWlSZWxheW91dFwiLHQsVCgpKX0pOlUuY2FsbChxKX1lbHNlIG4uc2VsZWN0QWxsKFwiI1wiK00pLnJlbW92ZSgpO2Z1bmN0aW9uIHEocil7cmV0dXJuIHIuY2FsbChjLmZvbnQsaikuYXR0cih7XCJ0ZXh0LWFuY2hvclwiOntsZWZ0Olwic3RhcnRcIixyaWdodDpcImVuZFwifVtlLmFsaWduXXx8XCJtaWRkbGVcIn0pLGguY29udmVydFRvVHNwYW5zKHIsdCxIKSxyfWZ1bmN0aW9uIEgoKXt2YXIgcj1VLnNlbGVjdEFsbChcImFcIik7MT09PXIuc2l6ZSgpJiZyLnRleHQoKT09PVUudGV4dCgpJiZJLmluc2VydChcImFcIixcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKHtcInhsaW5rOnhsaW5rOmhyZWZcIjpyLmF0dHIoXCJ4bGluazpocmVmXCIpLFwieGxpbms6eGxpbms6c2hvd1wiOnIuYXR0cihcInhsaW5rOnNob3dcIil9KS5zdHlsZSh7Y3Vyc29yOlwicG9pbnRlclwifSkubm9kZSgpLmFwcGVuZENoaWxkKEYubm9kZSgpKTt2YXIgbj1JLnNlbGVjdChcIi5hbm5vdGF0aW9uLXRleHQtbWF0aC1ncm91cFwiKSx1PSFuLmVtcHR5KCksZD1jLmJCb3goKHU/bjpVKS5ub2RlKCkpLG09ZC53aWR0aCx5PWQuaGVpZ2h0LHc9ZS53aWR0aHx8bSxPPWUuaGVpZ2h0fHx5LFA9TWF0aC5yb3VuZCh3KzIqUiksaj1NYXRoLnJvdW5kKE8rMipSKTtmdW5jdGlvbiBWKHQsZSl7cmV0dXJuXCJhdXRvXCI9PT1lJiYoZT10PDEvMz9cImxlZnRcIjp0PjIvMz9cInJpZ2h0XCI6XCJjZW50ZXJcIikse2NlbnRlcjowLG1pZGRsZTowLGxlZnQ6LjUsYm90dG9tOi0uNSxyaWdodDotLjUsdG9wOi41fVtlXX1mb3IodmFyIHE9ITEsSD1bXCJ4XCIsXCJ5XCJdLEc9MDtHPEgubGVuZ3RoO0crKyl7dmFyIFksVyxYLFosJCxKPUhbR10sSz1lW0orXCJyZWZcIl18fEosUT1lW1wiYVwiK0orXCJyZWZcIl0sdHQ9e3g6cyx5OnZ9W0pdLGV0PShFKyhcInhcIj09PUo/MDotOTApKSpNYXRoLlBJLzE4MCxydD1QKk1hdGguY29zKGV0KSxudD1qKk1hdGguc2luKGV0KSxpdD1NYXRoLmFicyhydCkrTWF0aC5hYnMobnQpLGF0PWVbSitcImFuY2hvclwiXSxvdD1lW0orXCJzaGlmdFwiXSooXCJ4XCI9PT1KPzE6LTEpLHN0PVNbSl07aWYodHQpe3ZhciBsdD10dC5yMmZyYWN0aW9uKGVbSl0pOyhsdDwwfHxsdD4xKSYmKFE9PT1LPygobHQ9dHQucjJmcmFjdGlvbihlW1wiYVwiK0pdKSk8MHx8bHQ+MSkmJihxPSEwKTpxPSEwKSxZPXR0Ll9vZmZzZXQrdHQucjJwKGVbSl0pLFo9LjV9ZWxzZVwieFwiPT09Sj8oWD1lW0pdLFk9Yi5sK2IudypYKTooWD0xLWVbSl0sWT1iLnQrYi5oKlgpLFo9ZS5zaG93YXJyb3c/LjU6WDtpZihlLnNob3dhcnJvdyl7c3QuaGVhZD1ZO3ZhciBjdD1lW1wiYVwiK0pdOyQ9cnQqViguNSxlLnhhbmNob3IpLW50KlYoLjUsZS55YW5jaG9yKSxRPT09Sz8oc3QudGFpbD10dC5fb2Zmc2V0K3R0LnIycChjdCksVz0kKTooc3QudGFpbD1ZK2N0LFc9JCtjdCksc3QudGV4dD1zdC50YWlsKyQ7dmFyIHV0PXhbXCJ4XCI9PT1KP1wid2lkdGhcIjpcImhlaWdodFwiXTtpZihcInBhcGVyXCI9PT1LJiYoc3QuaGVhZD1vLmNvbnN0cmFpbihzdC5oZWFkLDEsdXQtMSkpLFwicGl4ZWxcIj09PVEpe3ZhciBodD0tTWF0aC5tYXgoc3QudGFpbC0zLHN0LnRleHQpLGZ0PU1hdGgubWluKHN0LnRhaWwrMyxzdC50ZXh0KS11dDtodD4wPyhzdC50YWlsKz1odCxzdC50ZXh0Kz1odCk6ZnQ+MCYmKHN0LnRhaWwtPWZ0LHN0LnRleHQtPWZ0KX1zdC50YWlsKz1vdCxzdC5oZWFkKz1vdH1lbHNlIFc9JD1pdCpWKFosYXQpLHN0LnRleHQ9WSskO3N0LnRleHQrPW90LCQrPW90LFcrPW90LGVbXCJfXCIrSitcInBhZHBsdXNcIl09aXQvMitXLGVbXCJfXCIrSitcInBhZG1pbnVzXCJdPWl0LzItVyxlW1wiX1wiK0orXCJzaXplXCJdPWl0LGVbXCJfXCIrSitcInNoaWZ0XCJdPSR9aWYodC5fZHJhZ2dpbmd8fCFxKXt2YXIgcHQ9MCxkdD0wO2lmKFwibGVmdFwiIT09ZS5hbGlnbiYmKHB0PSh3LW0pKihcImNlbnRlclwiPT09ZS5hbGlnbj8uNToxKSksXCJ0b3BcIiE9PWUudmFsaWduJiYoZHQ9KE8teSkqKFwibWlkZGxlXCI9PT1lLnZhbGlnbj8uNToxKSksdSluLnNlbGVjdChcInN2Z1wiKS5hdHRyKHt4OlIrcHQtMSx5OlIrZHR9KS5jYWxsKGMuc2V0Q2xpcFVybCxCP006bnVsbCx0KTtlbHNle3ZhciBndD1SK2R0LWQudG9wLHZ0PVIrcHQtZC5sZWZ0O1UuY2FsbChoLnBvc2l0aW9uVGV4dCx2dCxndCkuY2FsbChjLnNldENsaXBVcmwsQj9NOm51bGwsdCl9Ti5zZWxlY3QoXCJyZWN0XCIpLmNhbGwoYy5zZXRSZWN0LFIsUix3LE8pLEYuY2FsbChjLnNldFJlY3QsRC8yLEQvMixQLUQsai1EKSxJLmNhbGwoYy5zZXRUcmFuc2xhdGUsTWF0aC5yb3VuZChTLngudGV4dC1QLzIpLE1hdGgucm91bmQoUy55LnRleHQtai8yKSksTC5hdHRyKHt0cmFuc2Zvcm06XCJyb3RhdGUoXCIrRStcIixcIitTLngudGV4dCtcIixcIitTLnkudGV4dCtcIilcIn0pO3ZhciBtdCx5dD1mdW5jdGlvbihyLG4pe0Muc2VsZWN0QWxsKFwiLmFubm90YXRpb24tYXJyb3ctZ1wiKS5yZW1vdmUoKTt2YXIgdT1TLnguaGVhZCxoPVMueS5oZWFkLGY9Uy54LnRhaWwrcixkPVMueS50YWlsK24sbT1TLngudGV4dCtyLHk9Uy55LnRleHQrbix4PW8ucm90YXRpb25YWU1hdHJpeChFLG0seSksdz1vLmFwcGx5MkRUcmFuc2Zvcm0oeCksTT1vLmFwcGx5MkRUcmFuc2Zvcm0yKHgpLHo9K0YuYXR0cihcIndpZHRoXCIpLE89K0YuYXR0cihcImhlaWdodFwiKSxEPW0tLjUqeixQPUQreixSPXktLjUqTyxCPVIrTyxOPVtbRCxSLEQsQl0sW0QsQixQLEJdLFtQLEIsUCxSXSxbUCxSLEQsUl1dLm1hcChNKTtpZighTi5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdF4hIW8uc2VnbWVudHNJbnRlcnNlY3QodSxoLHUrMWU2LGgrMWU2LGVbMF0sZVsxXSxlWzJdLGVbM10pfSwhMSkpe04uZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1vLnNlZ21lbnRzSW50ZXJzZWN0KGYsZCx1LGgsdFswXSx0WzFdLHRbMl0sdFszXSk7ZSYmKGY9ZS54LGQ9ZS55KX0pO3ZhciBqPWUuYXJyb3d3aWR0aCxWPWUuYXJyb3djb2xvcixVPWUuYXJyb3dzaWRlLHE9Qy5hcHBlbmQoXCJnXCIpLnN0eWxlKHtvcGFjaXR5Omwub3BhY2l0eShWKX0pLmNsYXNzZWQoXCJhbm5vdGF0aW9uLWFycm93LWdcIiwhMCksSD1xLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIixcIk1cIitmK1wiLFwiK2QrXCJMXCIrdStcIixcIitoKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLGorXCJweFwiKS5jYWxsKGwuc3Ryb2tlLGwucmdiKFYpKTtpZihnKEgsVSxlKSxfLmFubm90YXRpb25Qb3NpdGlvbiYmSC5ub2RlKCkucGFyZW50Tm9kZSYmIWEpe3ZhciBHPXUsWT1oO2lmKGUuc3RhbmRvZmYpe3ZhciBXPU1hdGguc3FydChNYXRoLnBvdyh1LWYsMikrTWF0aC5wb3coaC1kLDIpKTtHKz1lLnN0YW5kb2ZmKihmLXUpL1csWSs9ZS5zdGFuZG9mZiooZC1oKS9XfXZhciBYLFosJD1xLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChcImFubm90YXRpb24tYXJyb3dcIiwhMCkuY2xhc3NlZChcImFubmRyYWdcIiwhMCkuY2xhc3NlZChcImN1cnNvci1tb3ZlXCIsITApLmF0dHIoe2Q6XCJNMywzSC0zVi0zSDNaTTAsMExcIisoZi1HKStcIixcIisoZC1ZKSx0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoXCIrRytcIixcIitZK1wiKVwifSkuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixqKzYrXCJweFwiKS5jYWxsKGwuc3Ryb2tlLFwicmdiYSgwLDAsMCwwKVwiKS5jYWxsKGwuZmlsbCxcInJnYmEoMCwwLDAsMClcIik7cC5pbml0KHtlbGVtZW50OiQubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKCl7dmFyIHQ9Yy5nZXRUcmFuc2xhdGUoSSk7WD10LngsWj10LnkscyYmcy5hdXRvcmFuZ2UmJmsocy5fbmFtZStcIi5hdXRvcmFuZ2VcIiwhMCksdiYmdi5hdXRvcmFuZ2UmJmsodi5fbmFtZStcIi5hdXRvcmFuZ2VcIiwhMCl9LG1vdmVGbjpmdW5jdGlvbih0LHIpe3ZhciBuPXcoWCxaKSxpPW5bMF0rdCxhPW5bMV0rcjtJLmNhbGwoYy5zZXRUcmFuc2xhdGUsaSxhKSxBKFwieFwiLHM/cy5wMnIocy5yMnAoZS54KSt0KTplLngrdC9iLncpLEEoXCJ5XCIsdj92LnAycih2LnIycChlLnkpK3IpOmUueS1yL2IuaCksZS5heHJlZj09PWUueHJlZiYmQShcImF4XCIscy5wMnIocy5yMnAoZS5heCkrdCkpLGUuYXlyZWY9PT1lLnlyZWYmJkEoXCJheVwiLHYucDJyKHYucjJwKGUuYXkpK3IpKSxxLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIit0K1wiLFwiK3IrXCIpXCIpLEwuYXR0cih7dHJhbnNmb3JtOlwicm90YXRlKFwiK0UrXCIsXCIraStcIixcIithK1wiKVwifSl9LGRvbmVGbjpmdW5jdGlvbigpe2kuY2FsbChcIl9ndWlSZWxheW91dFwiLHQsVCgpKTt2YXIgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmpzLW5vdGVzLWJveC1wYW5lbFwiKTtlJiZlLnJlZHJhdyhlLnNlbGVjdGVkT2JqKX19KX19fTtpZihlLnNob3dhcnJvdyYmeXQoMCwwKSx6KXAuaW5pdCh7ZWxlbWVudDpJLm5vZGUoKSxnZDp0LHByZXBGbjpmdW5jdGlvbigpe210PUwuYXR0cihcInRyYW5zZm9ybVwiKX0sbW92ZUZuOmZ1bmN0aW9uKHQscil7dmFyIG49XCJwb2ludGVyXCI7aWYoZS5zaG93YXJyb3cpZS5heHJlZj09PWUueHJlZj9BKFwiYXhcIixzLnAycihzLnIycChlLmF4KSt0KSk6QShcImF4XCIsZS5heCt0KSxlLmF5cmVmPT09ZS55cmVmP0EoXCJheVwiLHYucDJyKHYucjJwKGUuYXkpK3IpKTpBKFwiYXlcIixlLmF5K3IpLHl0KHQscik7ZWxzZXtpZihhKXJldHVybjt2YXIgaSxvO2lmKHMpaT1zLnAycihzLnIycChlLngpK3QpO2Vsc2V7dmFyIGw9ZS5feHNpemUvYi53LGM9ZS54KyhlLl94c2hpZnQtZS54c2hpZnQpL2Iudy1sLzI7aT1wLmFsaWduKGMrdC9iLncsbCwwLDEsZS54YW5jaG9yKX1pZih2KW89di5wMnIodi5yMnAoZS55KStyKTtlbHNle3ZhciB1PWUuX3lzaXplL2IuaCxoPWUueS0oZS5feXNoaWZ0K2UueXNoaWZ0KS9iLmgtdS8yO289cC5hbGlnbihoLXIvYi5oLHUsMCwxLGUueWFuY2hvcil9QShcInhcIixpKSxBKFwieVwiLG8pLHMmJnZ8fChuPXAuZ2V0Q3Vyc29yKHM/LjU6aSx2Py41Om8sZS54YW5jaG9yLGUueWFuY2hvcikpfUwuYXR0cih7dHJhbnNmb3JtOlwidHJhbnNsYXRlKFwiK3QrXCIsXCIrcitcIilcIittdH0pLGYoSSxuKX0sZG9uZUZuOmZ1bmN0aW9uKCl7ZihJKSxpLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix0LFQoKSk7dmFyIGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5qcy1ub3Rlcy1ib3gtcGFuZWxcIik7ZSYmZS5yZWRyYXcoZS5zZWxlY3RlZE9iail9fSl9ZWxzZSBJLnJlbW92ZSgpfX1lLmV4cG9ydHM9e2RyYXc6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtlLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKFwiLmFubm90YXRpb25cIikucmVtb3ZlKCk7Zm9yKHZhciByPTA7cjxlLmFubm90YXRpb25zLmxlbmd0aDtyKyspZS5hbm5vdGF0aW9uc1tyXS52aXNpYmxlJiZ2KHQscik7cmV0dXJuIGEucHJldmlvdXNQcm9taXNlcyh0KX0sZHJhd09uZTp2LGRyYXdSYXc6bX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9zZXRjdXJzb3JcIjo3MjEsXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIjo3MjUsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi8uLi9wbG90cy9wbG90c1wiOjgxMCxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vY29sb3JcIjo1NzgsXCIuLi9kcmFnZWxlbWVudFwiOjU5NixcIi4uL2RyYXdpbmdcIjo1OTksXCIuLi9meFwiOjYxNyxcIi4vZHJhd19hcnJvd19oZWFkXCI6NTY4LGQzOjE1NX1dLDU2ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi9jb2xvclwiKSxhPXQoXCIuL2Fycm93X3BhdGhzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG8scyxsLGMsdT10Lm5vZGUoKSxoPWFbci5hcnJvd2hlYWR8fDBdLGY9YVtyLnN0YXJ0YXJyb3doZWFkfHwwXSxwPShyLmFycm93d2lkdGh8fDEpKihyLmFycm93c2l6ZXx8MSksZD0oci5hcnJvd3dpZHRofHwxKSooci5zdGFydGFycm93c2l6ZXx8MSksZz1lLmluZGV4T2YoXCJzdGFydFwiKT49MCx2PWUuaW5kZXhPZihcImVuZFwiKT49MCxtPWguYmFja29mZipwK3Iuc3RhbmRvZmYseT1mLmJhY2tvZmYqZCtyLnN0YXJ0c3RhbmRvZmY7aWYoXCJsaW5lXCI9PT11Lm5vZGVOYW1lKXtvPXt4Oit0LmF0dHIoXCJ4MVwiKSx5Oit0LmF0dHIoXCJ5MVwiKX0scz17eDordC5hdHRyKFwieDJcIikseTordC5hdHRyKFwieTJcIil9O3ZhciB4PW8ueC1zLngsYj1vLnktcy55O2lmKGM9KGw9TWF0aC5hdGFuMihiLHgpKStNYXRoLlBJLG0mJnkmJm0reT5NYXRoLnNxcnQoeCp4K2IqYikpcmV0dXJuIHZvaWQgeigpO2lmKG0pe2lmKG0qbT54KngrYipiKXJldHVybiB2b2lkIHooKTt2YXIgXz1tKk1hdGguY29zKGwpLHc9bSpNYXRoLnNpbihsKTtzLngrPV8scy55Kz13LHQuYXR0cih7eDI6cy54LHkyOnMueX0pfWlmKHkpe2lmKHkqeT54KngrYipiKXJldHVybiB2b2lkIHooKTt2YXIgaz15Kk1hdGguY29zKGwpLEE9eSpNYXRoLnNpbihsKTtvLngtPWssby55LT1BLHQuYXR0cih7eDE6by54LHkxOm8ueX0pfX1lbHNlIGlmKFwicGF0aFwiPT09dS5ub2RlTmFtZSl7dmFyIFQ9dS5nZXRUb3RhbExlbmd0aCgpLE09XCJcIjtpZihUPG0reSlyZXR1cm4gdm9pZCB6KCk7dmFyIFM9dS5nZXRQb2ludEF0TGVuZ3RoKDApLEU9dS5nZXRQb2ludEF0TGVuZ3RoKC4xKTtsPU1hdGguYXRhbjIoUy55LUUueSxTLngtRS54KSxvPXUuZ2V0UG9pbnRBdExlbmd0aChNYXRoLm1pbih5LFQpKSxNPVwiMHB4LFwiK3krXCJweCxcIjt2YXIgQz11LmdldFBvaW50QXRMZW5ndGgoVCksTD11LmdldFBvaW50QXRMZW5ndGgoVC0uMSk7Yz1NYXRoLmF0YW4yKEMueS1MLnksQy54LUwueCkscz11LmdldFBvaW50QXRMZW5ndGgoTWF0aC5tYXgoMCxULW0pKSxNKz1ULShNP3krbTptKStcInB4LFwiK1QrXCJweFwiLHQuc3R5bGUoXCJzdHJva2UtZGFzaGFycmF5XCIsTSl9ZnVuY3Rpb24geigpe3Quc3R5bGUoXCJzdHJva2UtZGFzaGFycmF5XCIsXCIwcHgsMTAwcHhcIil9ZnVuY3Rpb24gTyhlLGEsbyxzKXtlLnBhdGgmJihlLm5vUm90YXRlJiYobz0wKSxuLnNlbGVjdCh1LnBhcmVudE5vZGUpLmFwcGVuZChcInBhdGhcIikuYXR0cih7Y2xhc3M6dC5hdHRyKFwiY2xhc3NcIiksZDplLnBhdGgsdHJhbnNmb3JtOlwidHJhbnNsYXRlKFwiK2EueCtcIixcIithLnkrXCIpXCIrKG8/XCJyb3RhdGUoXCIrMTgwKm8vTWF0aC5QSStcIilcIjpcIlwiKStcInNjYWxlKFwiK3MrXCIpXCJ9KS5zdHlsZSh7ZmlsbDppLnJnYihyLmFycm93Y29sb3IpLFwic3Ryb2tlLXdpZHRoXCI6MH0pKX1nJiZPKGYsbyxsLGQpLHYmJk8oaCxzLGMscCl9fSx7XCIuLi9jb2xvclwiOjU3OCxcIi4vYXJyb3dfcGF0aHNcIjo1NjAsZDM6MTU1fV0sNTY5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vZHJhd1wiKSxpPXQoXCIuL2NsaWNrXCIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZTpcImNvbXBvbmVudFwiLG5hbWU6XCJhbm5vdGF0aW9uc1wiLGxheW91dEF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxpbmNsdWRlQmFzZVBsb3Q6dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHNcIikoXCJhbm5vdGF0aW9uc1wiKSxjYWxjQXV0b3JhbmdlOnQoXCIuL2NhbGNfYXV0b3JhbmdlXCIpLGRyYXc6bi5kcmF3LGRyYXdPbmU6bi5kcmF3T25lLGRyYXdSYXc6bi5kcmF3UmF3LGhhc0NsaWNrVG9TaG93OmkuaGFzQ2xpY2tUb1Nob3csb25DbGljazppLm9uQ2xpY2ssY29udmVydENvb3Jkczp0KFwiLi9jb252ZXJ0X2Nvb3Jkc1wiKX19LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHNcIjo3NTksXCIuL2F0dHJpYnV0ZXNcIjo1NjEsXCIuL2NhbGNfYXV0b3JhbmdlXCI6NTYyLFwiLi9jbGlja1wiOjU2MyxcIi4vY29udmVydF9jb29yZHNcIjo1NjUsXCIuL2RlZmF1bHRzXCI6NTY2LFwiLi9kcmF3XCI6NTY3fV0sNTcwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbCxhPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLnRlbXBsYXRlZEFycmF5O2UuZXhwb3J0cz1pKGEoXCJhbm5vdGF0aW9uXCIse3Zpc2libGU6bi52aXNpYmxlLHg6e3ZhbFR5cGU6XCJhbnlcIn0seTp7dmFsVHlwZTpcImFueVwifSx6Ont2YWxUeXBlOlwiYW55XCJ9LGF4Ont2YWxUeXBlOlwibnVtYmVyXCJ9LGF5Ont2YWxUeXBlOlwibnVtYmVyXCJ9LHhhbmNob3I6bi54YW5jaG9yLHhzaGlmdDpuLnhzaGlmdCx5YW5jaG9yOm4ueWFuY2hvcix5c2hpZnQ6bi55c2hpZnQsdGV4dDpuLnRleHQsdGV4dGFuZ2xlOm4udGV4dGFuZ2xlLGZvbnQ6bi5mb250LHdpZHRoOm4ud2lkdGgsaGVpZ2h0Om4uaGVpZ2h0LG9wYWNpdHk6bi5vcGFjaXR5LGFsaWduOm4uYWxpZ24sdmFsaWduOm4udmFsaWduLGJnY29sb3I6bi5iZ2NvbG9yLGJvcmRlcmNvbG9yOm4uYm9yZGVyY29sb3IsYm9yZGVycGFkOm4uYm9yZGVycGFkLGJvcmRlcndpZHRoOm4uYm9yZGVyd2lkdGgsc2hvd2Fycm93Om4uc2hvd2Fycm93LGFycm93Y29sb3I6bi5hcnJvd2NvbG9yLGFycm93aGVhZDpuLmFycm93aGVhZCxzdGFydGFycm93aGVhZDpuLnN0YXJ0YXJyb3doZWFkLGFycm93c2lkZTpuLmFycm93c2lkZSxhcnJvd3NpemU6bi5hcnJvd3NpemUsc3RhcnRhcnJvd3NpemU6bi5zdGFydGFycm93c2l6ZSxhcnJvd3dpZHRoOm4uYXJyb3d3aWR0aCxzdGFuZG9mZjpuLnN0YW5kb2ZmLHN0YXJ0c3RhbmRvZmY6bi5zdGFydHN0YW5kb2ZmLGhvdmVydGV4dDpuLmhvdmVydGV4dCxob3ZlcmxhYmVsOm4uaG92ZXJsYWJlbCxjYXB0dXJlZXZlbnRzOm4uY2FwdHVyZWV2ZW50c30pLFwiY2FsY1wiLFwiZnJvbS1yb290XCIpfSx7XCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXNcIjo1NjF9XSw1NzE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpO2Z1bmN0aW9uIGEodCxlKXt2YXIgcj1lLmZ1bGxTY2VuZUxheW91dC5kb21haW4sYT1lLmZ1bGxMYXlvdXQuX3NpemUsbz17cGRhdGE6bnVsbCx0eXBlOlwibGluZWFyXCIsYXV0b3JhbmdlOiExLHJhbmdlOlstMS8wLDEvMF19O3QuX3hhPXt9LG4uZXh0ZW5kRmxhdCh0Ll94YSxvKSxpLnNldENvbnZlcnQodC5feGEpLHQuX3hhLl9vZmZzZXQ9YS5sK3IueFswXSphLncsdC5feGEubDJwPWZ1bmN0aW9uKCl7cmV0dXJuLjUqKDErdC5fcGRhdGFbMF0vdC5fcGRhdGFbM10pKmEudyooci54WzFdLXIueFswXSl9LHQuX3lhPXt9LG4uZXh0ZW5kRmxhdCh0Ll95YSxvKSxpLnNldENvbnZlcnQodC5feWEpLHQuX3lhLl9vZmZzZXQ9YS50KygxLXIueVsxXSkqYS5oLHQuX3lhLmwycD1mdW5jdGlvbigpe3JldHVybi41KigxLXQuX3BkYXRhWzFdL3QuX3BkYXRhWzNdKSphLmgqKHIueVsxXS1yLnlbMF0pfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuZnVsbFNjZW5lTGF5b3V0LmFubm90YXRpb25zLHI9MDtyPGUubGVuZ3RoO3IrKylhKGVbcl0sdCk7dC5mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKFwiLmFubm90YXRpb24tXCIrdC5pZCkucmVtb3ZlKCl9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OX1dLDU3MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksYT10KFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCIpLG89dChcIi4uL2Fubm90YXRpb25zL2NvbW1vbl9kZWZhdWx0c1wiKSxzPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZnVuY3Rpb24gbCh0LGUscixhKXtmdW5jdGlvbiBsKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9ZnVuY3Rpb24gYyh0KXt2YXIgbj10K1wiYXhpc1wiLGE9e19mdWxsTGF5b3V0Ont9fTtyZXR1cm4gYS5fZnVsbExheW91dFtuXT1yW25dLGkuY29lcmNlUG9zaXRpb24oZSxhLGwsdCx0LC41KX1sKFwidmlzaWJsZVwiKSYmKG8odCxlLGEuZnVsbExheW91dCxsKSxjKFwieFwiKSxjKFwieVwiKSxjKFwielwiKSxuLm5vbmVPckFsbCh0LGUsW1wieFwiLFwieVwiLFwielwiXSksZS54cmVmPVwieFwiLGUueXJlZj1cInlcIixlLnpyZWY9XCJ6XCIsbChcInhhbmNob3JcIiksbChcInlhbmNob3JcIiksbChcInhzaGlmdFwiKSxsKFwieXNoaWZ0XCIpLGUuc2hvd2Fycm93JiYoZS5heHJlZj1cInBpeGVsXCIsZS5heXJlZj1cInBpeGVsXCIsbChcImF4XCIsLTEwKSxsKFwiYXlcIiwtMzApLG4ubm9uZU9yQWxsKHQsZSxbXCJheFwiLFwiYXlcIl0pKSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXthKHQsZSx7bmFtZTpcImFubm90YXRpb25zXCIsaGFuZGxlSXRlbURlZmF1bHRzOmwsZnVsbExheW91dDpyLmZ1bGxMYXlvdXR9KX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0c1wiOjc0NSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vYW5ub3RhdGlvbnMvY29tbW9uX2RlZmF1bHRzXCI6NTY0LFwiLi9hdHRyaWJ1dGVzXCI6NTcwfV0sNTczOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2Fubm90YXRpb25zL2RyYXdcIikuZHJhd1JhdyxpPXQoXCIuLi8uLi9wbG90cy9nbDNkL3Byb2plY3RcIiksYT1bXCJ4XCIsXCJ5XCIsXCJ6XCJdO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5mdWxsU2NlbmVMYXlvdXQscj10LmRhdGFTY2FsZSxvPWUuYW5ub3RhdGlvbnMscz0wO3M8by5sZW5ndGg7cysrKXtmb3IodmFyIGw9b1tzXSxjPSExLHU9MDt1PDM7dSsrKXt2YXIgaD1hW3VdLGY9bFtoXSxwPWVbaCtcImF4aXNcIl0ucjJmcmFjdGlvbihmKTtpZihwPDB8fHA+MSl7Yz0hMDticmVha319Yz90LmZ1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3QoXCIuYW5ub3RhdGlvbi1cIit0LmlkKydbZGF0YS1pbmRleD1cIicrcysnXCJdJykucmVtb3ZlKCk6KGwuX3BkYXRhPWkodC5nbHBsb3QuY2FtZXJhUGFyYW1zLFtlLnhheGlzLnIybChsLngpKnJbMF0sZS55YXhpcy5yMmwobC55KSpyWzFdLGUuemF4aXMucjJsKGwueikqclsyXV0pLG4odC5ncmFwaERpdixsLHMsdC5pZCxsLl94YSxsLl95YSkpfX19LHtcIi4uLy4uL3Bsb3RzL2dsM2QvcHJvamVjdFwiOjc5OCxcIi4uL2Fubm90YXRpb25zL2RyYXdcIjo1Njd9XSw1NzQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIiksaT10KFwiLi4vLi4vbGliXCIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZTpcImNvbXBvbmVudFwiLG5hbWU6XCJhbm5vdGF0aW9uczNkXCIsc2NoZW1hOntzdWJwbG90czp7c2NlbmU6e2Fubm90YXRpb25zOnQoXCIuL2F0dHJpYnV0ZXNcIil9fX0sbGF5b3V0QXR0cmlidXRlczp0KFwiLi9hdHRyaWJ1dGVzXCIpLGhhbmRsZURlZmF1bHRzOnQoXCIuL2RlZmF1bHRzXCIpLGluY2x1ZGVCYXNlUGxvdDpmdW5jdGlvbih0LGUpe3ZhciByPW4uc3VicGxvdHNSZWdpc3RyeS5nbDNkO2lmKCFyKXJldHVybjtmb3IodmFyIGE9ci5hdHRyUmVnZXgsbz1PYmplY3Qua2V5cyh0KSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107YS50ZXN0KGwpJiYodFtsXS5hbm5vdGF0aW9uc3x8W10pLmxlbmd0aCYmKGkucHVzaFVuaXF1ZShlLl9iYXNlUGxvdE1vZHVsZXMsciksaS5wdXNoVW5pcXVlKGUuX3N1YnBsb3RzLmdsM2QsbCkpfX0sY29udmVydDp0KFwiLi9jb252ZXJ0XCIpLGRyYXc6dChcIi4vZHJhd1wiKX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9hdHRyaWJ1dGVzXCI6NTcwLFwiLi9jb252ZXJ0XCI6NTcxLFwiLi9kZWZhdWx0c1wiOjU3MixcIi4vZHJhd1wiOjU3M31dLDU3NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvbWFpblwiKSx0KFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvcGx1c1wiKSx0KFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2NoaW5lc2VcIiksdChcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9jb3B0aWNcIiksdChcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9kaXNjd29ybGRcIiksdChcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9ldGhpb3BpYW5cIiksdChcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9oZWJyZXdcIiksdChcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9pc2xhbWljXCIpLHQoXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvanVsaWFuXCIpLHQoXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbWF5YW5cIiksdChcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9uYW5ha3NoYWhpXCIpLHQoXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmVwYWxpXCIpLHQoXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvcGVyc2lhblwiKSx0KFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3RhaXdhblwiKSx0KFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3RoYWlcIiksdChcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy91bW1hbHF1cmFcIil9LHtcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9jaGluZXNlXCI6NTQyLFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2NvcHRpY1wiOjU0MyxcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9kaXNjd29ybGRcIjo1NDQsXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvZXRoaW9waWFuXCI6NTQ1LFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2hlYnJld1wiOjU0NixcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9pc2xhbWljXCI6NTQ3LFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2p1bGlhblwiOjU0OCxcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9tYXlhblwiOjU0OSxcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9uYW5ha3NoYWhpXCI6NTUwLFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL25lcGFsaVwiOjU1MSxcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9wZXJzaWFuXCI6NTUyLFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3RhaXdhblwiOjU1MyxcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy90aGFpXCI6NTU0LFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3VtbWFscXVyYVwiOjU1NSxcIndvcmxkLWNhbGVuZGFycy9kaXN0L21haW5cIjo1NTYsXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9wbHVzXCI6NTU3fV0sNTc2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vY2FsZW5kYXJzXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLG89YS5FUE9DSEpELHM9YS5PTkVEQVksbD17dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6T2JqZWN0LmtleXMobi5jYWxlbmRhcnMpLGVkaXRUeXBlOlwiY2FsY1wiLGRmbHQ6XCJncmVnb3JpYW5cIn0sYz1mdW5jdGlvbih0LGUscixuKXt2YXIgYT17fTtyZXR1cm4gYVtyXT1sLGkuY29lcmNlKHQsZSxhLHIsbil9LHU9XCIjI1wiLGg9e2Q6ezA6XCJkZFwiLFwiLVwiOlwiZFwifSxlOnswOlwiZFwiLFwiLVwiOlwiZFwifSxhOnswOlwiRFwiLFwiLVwiOlwiRFwifSxBOnswOlwiRERcIixcIi1cIjpcIkREXCJ9LGo6ezA6XCJvb1wiLFwiLVwiOlwib1wifSxXOnswOlwid3dcIixcIi1cIjpcIndcIn0sbTp7MDpcIm1tXCIsXCItXCI6XCJtXCJ9LGI6ezA6XCJNXCIsXCItXCI6XCJNXCJ9LEI6ezA6XCJNTVwiLFwiLVwiOlwiTU1cIn0seTp7MDpcInl5XCIsXCItXCI6XCJ5eVwifSxZOnswOlwieXl5eVwiLFwiLVwiOlwieXl5eVwifSxVOnUsdzp1LGM6ezA6XCJEIE0gZCAlWCB5eXl5XCIsXCItXCI6XCJEIE0gZCAlWCB5eXl5XCJ9LHg6ezA6XCJtbS9kZC95eXl5XCIsXCItXCI6XCJtbS9kZC95eXl5XCJ9fTt2YXIgZj17fTtmdW5jdGlvbiBwKHQpe3ZhciBlPWZbdF07cmV0dXJuIGV8fChlPWZbdF09bi5pbnN0YW5jZSh0KSl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gaS5leHRlbmRGbGF0KHt9LGwse2Rlc2NyaXB0aW9uOnR9KX1mdW5jdGlvbiBnKHQpe3JldHVyblwiU2V0cyB0aGUgY2FsZW5kYXIgc3lzdGVtIHRvIHVzZSB3aXRoIGBcIit0K1wiYCBkYXRlIGRhdGEuXCJ9dmFyIHY9e3hjYWxlbmRhcjpkKGcoXCJ4XCIpKX0sbT1pLmV4dGVuZEZsYXQoe30sdix7eWNhbGVuZGFyOmQoZyhcInlcIikpfSkseT1pLmV4dGVuZEZsYXQoe30sbSx7emNhbGVuZGFyOmQoZyhcInpcIikpfSkseD1kKFtcIlNldHMgdGhlIGNhbGVuZGFyIHN5c3RlbSB0byB1c2UgZm9yIGByYW5nZWAgYW5kIGB0aWNrMGBcIixcImlmIHRoaXMgaXMgYSBkYXRlIGF4aXMuIFRoaXMgZG9lcyBub3Qgc2V0IHRoZSBjYWxlbmRhciBmb3JcIixcImludGVycHJldGluZyBkYXRhIG9uIHRoaXMgYXhpcywgdGhhdCdzIHNwZWNpZmllZCBpbiB0aGUgdHJhY2VcIixcIm9yIHZpYSB0aGUgZ2xvYmFsIGBsYXlvdXQuY2FsZW5kYXJgXCJdLmpvaW4oXCIgXCIpKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6XCJjb21wb25lbnRcIixuYW1lOlwiY2FsZW5kYXJzXCIsc2NoZW1hOnt0cmFjZXM6e3NjYXR0ZXI6bSxiYXI6bSxib3g6bSxoZWF0bWFwOm0sY29udG91cjptLGhpc3RvZ3JhbTptLGhpc3RvZ3JhbTJkOm0saGlzdG9ncmFtMmRjb250b3VyOm0sc2NhdHRlcjNkOnksc3VyZmFjZTp5LG1lc2gzZDp5LHNjYXR0ZXJnbDptLG9obGM6dixjYW5kbGVzdGljazp2fSxsYXlvdXQ6e2NhbGVuZGFyOmQoW1wiU2V0cyB0aGUgZGVmYXVsdCBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIGZvciBpbnRlcnByZXRpbmcgYW5kXCIsXCJkaXNwbGF5aW5nIGRhdGVzIHRocm91Z2hvdXQgdGhlIHBsb3QuXCJdLmpvaW4oXCIgXCIpKX0sc3VicGxvdHM6e3hheGlzOntjYWxlbmRhcjp4fSx5YXhpczp7Y2FsZW5kYXI6eH0sc2NlbmU6e3hheGlzOntjYWxlbmRhcjp4fSx5YXhpczp7Y2FsZW5kYXI6eH0semF4aXM6e2NhbGVuZGFyOnh9fSxwb2xhcjp7cmFkaWFsYXhpczp7Y2FsZW5kYXI6eH19fSx0cmFuc2Zvcm1zOntmaWx0ZXI6e3ZhbHVlY2FsZW5kYXI6ZChbXCJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIGZvciBgdmFsdWVgLCBpZiBpdCBpcyBhIGRhdGUuXCJdLmpvaW4oXCIgXCIpKSx0YXJnZXRjYWxlbmRhcjpkKFtcIlNldHMgdGhlIGNhbGVuZGFyIHN5c3RlbSB0byB1c2UgZm9yIGB0YXJnZXRgLCBpZiBpdCBpcyBhblwiLFwiYXJyYXkgb2YgZGF0ZXMuIElmIGB0YXJnZXRgIGlzIGEgc3RyaW5nIChlZyAqeCopIHdlIHVzZSB0aGVcIixcImNvcnJlc3BvbmRpbmcgdHJhY2UgYXR0cmlidXRlIChlZyBgeGNhbGVuZGFyYCkgaWYgaXQgZXhpc3RzLFwiLFwiZXZlbiBpZiBgdGFyZ2V0Y2FsZW5kYXJgIGlzIHByb3ZpZGVkLlwiXS5qb2luKFwiIFwiKSl9fX0sbGF5b3V0QXR0cmlidXRlczpsLGhhbmRsZURlZmF1bHRzOmMsaGFuZGxlVHJhY2VEZWZhdWx0czpmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyljKHQsZSxyW2ldK1wiY2FsZW5kYXJcIixuLmNhbGVuZGFyKX0sQ0FOT05JQ0FMX1NVTkRBWTp7Y2hpbmVzZTpcIjIwMDAtMDEtMDJcIixjb3B0aWM6XCIyMDAwLTAxLTAzXCIsZGlzY3dvcmxkOlwiMjAwMC0wMS0wM1wiLGV0aGlvcGlhbjpcIjIwMDAtMDEtMDVcIixoZWJyZXc6XCI1MDAwLTAxLTAxXCIsaXNsYW1pYzpcIjEwMDAtMDEtMDJcIixqdWxpYW46XCIyMDAwLTAxLTAzXCIsbWF5YW46XCI1MDAwLTAxLTAxXCIsbmFuYWtzaGFoaTpcIjEwMDAtMDEtMDVcIixuZXBhbGk6XCIyMDAwLTAxLTA1XCIscGVyc2lhbjpcIjEwMDAtMDEtMDFcIixqYWxhbGk6XCIxMDAwLTAxLTAxXCIsdGFpd2FuOlwiMTAwMC0wMS0wNFwiLHRoYWk6XCIyMDAwLTAxLTA0XCIsdW1tYWxxdXJhOlwiMTQwMC0wMS0wNlwifSxDQU5PTklDQUxfVElDSzp7Y2hpbmVzZTpcIjIwMDAtMDEtMDFcIixjb3B0aWM6XCIyMDAwLTAxLTAxXCIsZGlzY3dvcmxkOlwiMjAwMC0wMS0wMVwiLGV0aGlvcGlhbjpcIjIwMDAtMDEtMDFcIixoZWJyZXc6XCI1MDAwLTAxLTAxXCIsaXNsYW1pYzpcIjEwMDAtMDEtMDFcIixqdWxpYW46XCIyMDAwLTAxLTAxXCIsbWF5YW46XCI1MDAwLTAxLTAxXCIsbmFuYWtzaGFoaTpcIjEwMDAtMDEtMDFcIixuZXBhbGk6XCIyMDAwLTAxLTAxXCIscGVyc2lhbjpcIjEwMDAtMDEtMDFcIixqYWxhbGk6XCIxMDAwLTAxLTAxXCIsdGFpd2FuOlwiMTAwMC0wMS0wMVwiLHRoYWk6XCIyMDAwLTAxLTAxXCIsdW1tYWxxdXJhOlwiMTQwMC0wMS0wMVwifSxERkxUUkFOR0U6e2NoaW5lc2U6W1wiMjAwMC0wMS0wMVwiLFwiMjAwMS0wMS0wMVwiXSxjb3B0aWM6W1wiMTcwMC0wMS0wMVwiLFwiMTcwMS0wMS0wMVwiXSxkaXNjd29ybGQ6W1wiMTgwMC0wMS0wMVwiLFwiMTgwMS0wMS0wMVwiXSxldGhpb3BpYW46W1wiMjAwMC0wMS0wMVwiLFwiMjAwMS0wMS0wMVwiXSxoZWJyZXc6W1wiNTcwMC0wMS0wMVwiLFwiNTcwMS0wMS0wMVwiXSxpc2xhbWljOltcIjE0MDAtMDEtMDFcIixcIjE0MDEtMDEtMDFcIl0sanVsaWFuOltcIjIwMDAtMDEtMDFcIixcIjIwMDEtMDEtMDFcIl0sbWF5YW46W1wiNTIwMC0wMS0wMVwiLFwiNTIwMS0wMS0wMVwiXSxuYW5ha3NoYWhpOltcIjA1MDAtMDEtMDFcIixcIjA1MDEtMDEtMDFcIl0sbmVwYWxpOltcIjIwMDAtMDEtMDFcIixcIjIwMDEtMDEtMDFcIl0scGVyc2lhbjpbXCIxNDAwLTAxLTAxXCIsXCIxNDAxLTAxLTAxXCJdLGphbGFsaTpbXCIxNDAwLTAxLTAxXCIsXCIxNDAxLTAxLTAxXCJdLHRhaXdhbjpbXCIwMTAwLTAxLTAxXCIsXCIwMTAxLTAxLTAxXCJdLHRoYWk6W1wiMjUwMC0wMS0wMVwiLFwiMjUwMS0wMS0wMVwiXSx1bW1hbHF1cmE6W1wiMTQwMC0wMS0wMVwiLFwiMTQwMS0wMS0wMVwiXX0sZ2V0Q2FsOnAsd29ybGRDYWxGbXQ6ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpLGEsbCxjLGY9TWF0aC5mbG9vcigoZSsuMDUpL3MpK28sZD1wKHIpLmZyb21KRChmKSxnPTA7LTEhPT0oZz10LmluZGV4T2YoXCIlXCIsZykpOylcIjBcIj09PShuPXQuY2hhckF0KGcrMSkpfHxcIi1cIj09PW58fFwiX1wiPT09bj8oYT0zLGk9dC5jaGFyQXQoZysyKSxcIl9cIj09PW4mJihuPVwiLVwiKSk6KGk9bixuPVwiMFwiLGE9MiksKGw9aFtpXSk/KGM9bD09PXU/dTpkLmZvcm1hdERhdGUobFtuXSksdD10LnN1YnN0cigwLGcpK2MrdC5zdWJzdHIoZythKSxnKz1jLmxlbmd0aCk6Zys9YTtyZXR1cm4gdH19fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi9jYWxlbmRhcnNcIjo1NzV9XSw1Nzc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLmRlZmF1bHRzPVtcIiMxZjc3YjRcIixcIiNmZjdmMGVcIixcIiMyY2EwMmNcIixcIiNkNjI3MjhcIixcIiM5NDY3YmRcIixcIiM4YzU2NGJcIixcIiNlMzc3YzJcIixcIiM3ZjdmN2ZcIixcIiNiY2JkMjJcIixcIiMxN2JlY2ZcIl0sci5kZWZhdWx0TGluZT1cIiM0NDRcIixyLmxpZ2h0TGluZT1cIiNlZWVcIixyLmJhY2tncm91bmQ9XCIjZmZmXCIsci5ib3JkZXJMaW5lPVwiI0JFQzhEOVwiLHIubGlnaHRGcmFjdGlvbj0xZTMvMTF9LHt9XSw1Nzg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwidGlueWNvbG9yMlwiKSxpPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxhPWUuZXhwb3J0cz17fSxvPXQoXCIuL2F0dHJpYnV0ZXNcIik7YS5kZWZhdWx0cz1vLmRlZmF1bHRzO3ZhciBzPWEuZGVmYXVsdExpbmU9by5kZWZhdWx0TGluZTthLmxpZ2h0TGluZT1vLmxpZ2h0TGluZTt2YXIgbD1hLmJhY2tncm91bmQ9by5iYWNrZ3JvdW5kO2Z1bmN0aW9uIGModCl7aWYoaSh0KXx8XCJzdHJpbmdcIiE9dHlwZW9mIHQpcmV0dXJuIHQ7dmFyIGU9dC50cmltKCk7aWYoXCJyZ2JcIiE9PWUuc3Vic3RyKDAsMykpcmV0dXJuIHQ7dmFyIHI9ZS5tYXRjaCgvXnJnYmE/XFxzKlxcKChbXigpXSopXFwpJC8pO2lmKCFyKXJldHVybiB0O3ZhciBuPXJbMV0udHJpbSgpLnNwbGl0KC9cXHMqW1xccyxdXFxzKi8pLGE9XCJhXCI9PT1lLmNoYXJBdCgzKSYmND09PW4ubGVuZ3RoO2lmKCFhJiYzIT09bi5sZW5ndGgpcmV0dXJuIHQ7Zm9yKHZhciBvPTA7bzxuLmxlbmd0aDtvKyspe2lmKCFuW29dLmxlbmd0aClyZXR1cm4gdDtpZihuW29dPU51bWJlcihuW29dKSwhKG5bb10+PTApKXJldHVybiB0O2lmKDM9PT1vKW5bb10+MSYmKG5bb109MSk7ZWxzZSBpZihuW29dPj0xKXJldHVybiB0fXZhciBzPU1hdGgucm91bmQoMjU1Km5bMF0pK1wiLCBcIitNYXRoLnJvdW5kKDI1NSpuWzFdKStcIiwgXCIrTWF0aC5yb3VuZCgyNTUqblsyXSk7cmV0dXJuIGE/XCJyZ2JhKFwiK3MrXCIsIFwiK25bM10rXCIpXCI6XCJyZ2IoXCIrcytcIilcIn1hLnRpbnlSR0I9ZnVuY3Rpb24odCl7dmFyIGU9dC50b1JnYigpO3JldHVyblwicmdiKFwiK01hdGgucm91bmQoZS5yKStcIiwgXCIrTWF0aC5yb3VuZChlLmcpK1wiLCBcIitNYXRoLnJvdW5kKGUuYikrXCIpXCJ9LGEucmdiPWZ1bmN0aW9uKHQpe3JldHVybiBhLnRpbnlSR0Iobih0KSl9LGEub3BhY2l0eT1mdW5jdGlvbih0KXtyZXR1cm4gdD9uKHQpLmdldEFscGhhKCk6MH0sYS5hZGRPcGFjaXR5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0KS50b1JnYigpO3JldHVyblwicmdiYShcIitNYXRoLnJvdW5kKHIucikrXCIsIFwiK01hdGgucm91bmQoci5nKStcIiwgXCIrTWF0aC5yb3VuZChyLmIpK1wiLCBcIitlK1wiKVwifSxhLmNvbWJpbmU9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKHQpLnRvUmdiKCk7aWYoMT09PXIuYSlyZXR1cm4gbih0KS50b1JnYlN0cmluZygpO3ZhciBpPW4oZXx8bCkudG9SZ2IoKSxhPTE9PT1pLmE/aTp7cjoyNTUqKDEtaS5hKStpLnIqaS5hLGc6MjU1KigxLWkuYSkraS5nKmkuYSxiOjI1NSooMS1pLmEpK2kuYippLmF9LG89e3I6YS5yKigxLXIuYSkrci5yKnIuYSxnOmEuZyooMS1yLmEpK3IuZypyLmEsYjphLmIqKDEtci5hKStyLmIqci5hfTtyZXR1cm4gbihvKS50b1JnYlN0cmluZygpfSxhLmNvbnRyYXN0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1uKHQpO3JldHVybiAxIT09aS5nZXRBbHBoYSgpJiYoaT1uKGEuY29tYmluZSh0LGwpKSksKGkuaXNEYXJrKCk/ZT9pLmxpZ2h0ZW4oZSk6bDpyP2kuZGFya2VuKHIpOnMpLnRvU3RyaW5nKCl9LGEuc3Ryb2tlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bihlKTt0LnN0eWxlKHtzdHJva2U6YS50aW55UkdCKHIpLFwic3Ryb2tlLW9wYWNpdHlcIjpyLmdldEFscGhhKCl9KX0sYS5maWxsPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bihlKTt0LnN0eWxlKHtmaWxsOmEudGlueVJHQihyKSxcImZpbGwtb3BhY2l0eVwiOnIuZ2V0QWxwaGEoKX0pfSxhLmNsZWFuPWZ1bmN0aW9uKHQpe2lmKHQmJlwib2JqZWN0XCI9PXR5cGVvZiB0KXt2YXIgZSxyLG4saSxvPU9iamVjdC5rZXlzKHQpO2ZvcihlPTA7ZTxvLmxlbmd0aDtlKyspaWYoaT10W249b1tlXV0sXCJjb2xvclwiPT09bi5zdWJzdHIobi5sZW5ndGgtNSkpaWYoQXJyYXkuaXNBcnJheShpKSlmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWlbcl09YyhpW3JdKTtlbHNlIHRbbl09YyhpKTtlbHNlIGlmKFwiY29sb3JzY2FsZVwiPT09bi5zdWJzdHIobi5sZW5ndGgtMTApJiZBcnJheS5pc0FycmF5KGkpKWZvcihyPTA7cjxpLmxlbmd0aDtyKyspQXJyYXkuaXNBcnJheShpW3JdKSYmKGlbcl1bMV09YyhpW3JdWzFdKSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGkpKXt2YXIgcz1pWzBdO2lmKCFBcnJheS5pc0FycmF5KHMpJiZzJiZcIm9iamVjdFwiPT10eXBlb2Ygcylmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWEuY2xlYW4oaVtyXSl9ZWxzZSBpJiZcIm9iamVjdFwiPT10eXBlb2YgaSYmYS5jbGVhbihpKX19fSx7XCIuL2F0dHJpYnV0ZXNcIjo1NzcsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMix0aW55Y29sb3IyOjUyMn1dLDU3OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxvPXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsO2UuZXhwb3J0cz1vKHt0aGlja25lc3Ntb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJmcmFjdGlvblwiLFwicGl4ZWxzXCJdLGRmbHQ6XCJwaXhlbHNcIn0sdGhpY2tuZXNzOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDozMH0sbGVubW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiZnJhY3Rpb25cIixcInBpeGVsc1wiXSxkZmx0OlwiZnJhY3Rpb25cIn0sbGVuOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxfSx4Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxLjAyLG1pbjotMixtYXg6M30seGFuY2hvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibGVmdFwiLFwiY2VudGVyXCIsXCJyaWdodFwiXSxkZmx0OlwibGVmdFwifSx4cGFkOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxMH0seTp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6LjUsbWluOi0yLG1heDozfSx5YW5jaG9yOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ0b3BcIixcIm1pZGRsZVwiLFwiYm90dG9tXCJdLGRmbHQ6XCJtaWRkbGVcIn0seXBhZDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MTB9LG91dGxpbmVjb2xvcjpuLmxpbmVjb2xvcixvdXRsaW5ld2lkdGg6bi5saW5ld2lkdGgsYm9yZGVyY29sb3I6bi5saW5lY29sb3IsYm9yZGVyd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjB9LGJnY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6XCJyZ2JhKDAsMCwwLDApXCJ9LHRpY2ttb2RlOm4udGlja21vZGUsbnRpY2tzOm4ubnRpY2tzLHRpY2swOm4udGljazAsZHRpY2s6bi5kdGljayx0aWNrdmFsczpuLnRpY2t2YWxzLHRpY2t0ZXh0Om4udGlja3RleHQsdGlja3M6YSh7fSxuLnRpY2tzLHtkZmx0OlwiXCJ9KSx0aWNrbGVuOm4udGlja2xlbix0aWNrd2lkdGg6bi50aWNrd2lkdGgsdGlja2NvbG9yOm4udGlja2NvbG9yLHNob3d0aWNrbGFiZWxzOm4uc2hvd3RpY2tsYWJlbHMsdGlja2ZvbnQ6aSh7fSksdGlja2FuZ2xlOm4udGlja2FuZ2xlLHRpY2tmb3JtYXQ6bi50aWNrZm9ybWF0LHRpY2tmb3JtYXRzdG9wczpuLnRpY2tmb3JtYXRzdG9wcyx0aWNrcHJlZml4Om4udGlja3ByZWZpeCxzaG93dGlja3ByZWZpeDpuLnNob3d0aWNrcHJlZml4LHRpY2tzdWZmaXg6bi50aWNrc3VmZml4LHNob3d0aWNrc3VmZml4Om4uc2hvd3RpY2tzdWZmaXgsc2VwYXJhdGV0aG91c2FuZHM6bi5zZXBhcmF0ZXRob3VzYW5kcyxleHBvbmVudGZvcm1hdDpuLmV4cG9uZW50Zm9ybWF0LHNob3dleHBvbmVudDpuLnNob3dleHBvbmVudCx0aXRsZTp7dGV4dDp7dmFsVHlwZTpcInN0cmluZ1wifSxmb250Omkoe30pLHNpZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInJpZ2h0XCIsXCJ0b3BcIixcImJvdHRvbVwiXSxkZmx0OlwidG9wXCJ9fSxfZGVwcmVjYXRlZDp7dGl0bGU6e3ZhbFR5cGU6XCJzdHJpbmdcIn0sdGl0bGVmb250Omkoe30pLHRpdGxlc2lkZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wicmlnaHRcIixcInRvcFwiLFwiYm90dG9tXCJdLGRmbHQ6XCJ0b3BcIn19fSxcImNvbG9yYmFyc1wiLFwiZnJvbS1yb290XCIpfSx7XCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlc1wiOjc2MSxcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiOjc3NX1dLDU4MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2RyYXdcIiksaT10KFwiLi4vY29sb3JzY2FsZS9oZWxwZXJzXCIpLmZsaXBTY2FsZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHIpcmV0dXJuIHIodCxlKTt2YXIgYT1lWzBdLnRyYWNlLG89XCJjYlwiK2EudWlkO3I9QXJyYXkuaXNBcnJheShyKT9yOltyXTtmb3IodmFyIHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIGw9cltzXS5jb250YWluZXIsYz1sP2FbbF06YTtpZih0Ll9mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKFwiLlwiK28pLnJlbW92ZSgpLGMmJmMuc2hvd3NjYWxlKXt2YXIgdT1lWzBdLnQuY2I9bih0LG8pLGg9Yy5yZXZlcnNlc2NhbGU/aShjLmNvbG9yc2NhbGUpOmMuY29sb3JzY2FsZTtyZXR1cm4gdm9pZCB1LmZpbGxncmFkaWVudChoKS56cmFuZ2UoW2NbcltzXS5taW5dLGNbcltzXS5tYXhdXSkub3B0aW9ucyhjLmNvbG9yYmFyKSgpfX19fSx7XCIuLi9jb2xvcnNjYWxlL2hlbHBlcnNcIjo1ODksXCIuL2RyYXdcIjo1ODN9XSw1ODE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e2NuOntjb2xvcmJhcjpcImNvbG9yYmFyXCIsY2JiZzpcImNiYmdcIixjYmZpbGw6XCJjYmZpbGxcIixjYmZpbGxzOlwiY2JmaWxsc1wiLGNibGluZTpcImNibGluZVwiLGNibGluZXM6XCJjYmxpbmVzXCIsY2JheGlzOlwiY2JheGlzXCIsY2J0aXRsZXVuc2hpZnQ6XCJjYnRpdGxldW5zaGlmdFwiLGNidGl0bGU6XCJjYnRpdGxlXCIsY2JvdXRsaW5lOlwiY2JvdXRsaW5lXCIsY3Jpc3A6XCJjcmlzcFwiLGpzUGxhY2Vob2xkZXI6XCJqcy1wbGFjZWhvbGRlclwifX19LHt9XSw1ODI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIiksYT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHNcIiksbz10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0c1wiKSxzPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0c1wiKSxsPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYz1pLm5ld0NvbnRhaW5lcihlLFwiY29sb3JiYXJcIiksdT10LmNvbG9yYmFyfHx7fTtmdW5jdGlvbiBoKHQsZSl7cmV0dXJuIG4uY29lcmNlKHUsYyxsLHQsZSl9dmFyIGY9aChcInRoaWNrbmVzc21vZGVcIik7aChcInRoaWNrbmVzc1wiLFwiZnJhY3Rpb25cIj09PWY/MzAvKHIud2lkdGgtci5tYXJnaW4ubC1yLm1hcmdpbi5yKTozMCk7dmFyIHA9aChcImxlbm1vZGVcIik7aChcImxlblwiLFwiZnJhY3Rpb25cIj09PXA/MTpyLmhlaWdodC1yLm1hcmdpbi50LXIubWFyZ2luLmIpLGgoXCJ4XCIpLGgoXCJ4YW5jaG9yXCIpLGgoXCJ4cGFkXCIpLGgoXCJ5XCIpLGgoXCJ5YW5jaG9yXCIpLGgoXCJ5cGFkXCIpLG4ubm9uZU9yQWxsKHUsYyxbXCJ4XCIsXCJ5XCJdKSxoKFwib3V0bGluZWNvbG9yXCIpLGgoXCJvdXRsaW5ld2lkdGhcIiksaChcImJvcmRlcmNvbG9yXCIpLGgoXCJib3JkZXJ3aWR0aFwiKSxoKFwiYmdjb2xvclwiKSxhKHUsYyxoLFwibGluZWFyXCIpO3ZhciBkPXtvdXRlclRpY2tzOiExLGZvbnQ6ci5mb250fTtzKHUsYyxoLFwibGluZWFyXCIsZCksbyh1LGMsaCxcImxpbmVhclwiLGQpLGgoXCJ0aXRsZS50ZXh0XCIsci5fZGZsdFRpdGxlLmNvbG9yYmFyKSxuLmNvZXJjZUZvbnQoaCxcInRpdGxlLmZvbnRcIixyLmZvbnQpLGgoXCJ0aXRsZS5zaWRlXCIpfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzXCI6NzY4LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0c1wiOjc2OSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzXCI6NzcwLFwiLi9hdHRyaWJ1dGVzXCI6NTc5fV0sNTgzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcInRpbnljb2xvcjJcIiksYT10KFwiLi4vLi4vcGxvdHMvcGxvdHNcIiksbz10KFwiLi4vLi4vcmVnaXN0cnlcIikscz10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksbD10KFwiLi4vZHJhZ2VsZW1lbnRcIiksYz10KFwiLi4vLi4vbGliXCIpLHU9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxoPXQoXCIuLi8uLi9saWIvc2V0Y3Vyc29yXCIpLGY9dChcIi4uL2RyYXdpbmdcIikscD10KFwiLi4vY29sb3JcIiksZD10KFwiLi4vdGl0bGVzXCIpLGc9dChcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiKSx2PXQoXCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCIpLG09di5MSU5FX1NQQUNJTkcseT12LkZST01fVEwseD12LkZST01fQlIsYj10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZGVmYXVsdHNcIiksXz10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3Bvc2l0aW9uX2RlZmF1bHRzXCIpLHc9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlc1wiKSxrPXQoXCIuL2F0dHJpYnV0ZXNcIiksQT10KFwiLi9jb25zdGFudHNcIikuY247ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307Zm9yKHZhciB2IGluIGspclt2XT1udWxsO2Z1bmN0aW9uIFQoKXt2YXIgdj10Ll9mdWxsTGF5b3V0LGs9di5fc2l6ZTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiByLmZpbGxjb2xvcnx8XCJmdW5jdGlvblwiPT10eXBlb2Ygci5saW5lLmNvbG9yfHxyLmZpbGxncmFkaWVudCl7dmFyIEUsQyxMPXIuenJhbmdlfHxuLmV4dGVudCgoXCJmdW5jdGlvblwiPT10eXBlb2Ygci5maWxsY29sb3I/ci5maWxsY29sb3I6ci5saW5lLmNvbG9yKS5kb21haW4oKSksej1bXSxPPVtdLEk9XCJmdW5jdGlvblwiPT10eXBlb2Ygci5saW5lLmNvbG9yP3IubGluZS5jb2xvcjpmdW5jdGlvbigpe3JldHVybiByLmxpbmUuY29sb3J9LEQ9XCJmdW5jdGlvblwiPT10eXBlb2Ygci5maWxsY29sb3I/ci5maWxsY29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gci5maWxsY29sb3J9LFA9ci5sZXZlbHMuZW5kK3IubGV2ZWxzLnNpemUvMTAwLFI9ci5sZXZlbHMuc2l6ZSxGPTEuMDAxKkxbMF0tLjAwMSpMWzFdLEI9MS4wMDEqTFsxXS0uMDAxKkxbMF07Zm9yKEM9MDtDPDFlNSYmKEU9ci5sZXZlbHMuc3RhcnQrQypSLCEoUj4wP0U+PVA6RTw9UCkpO0MrKylFPkYmJkU8QiYmei5wdXNoKEUpO2lmKHIuZmlsbGdyYWRpZW50KU89WzBdO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygci5maWxsY29sb3IpaWYoci5maWxsbGV2ZWxzKWZvcihQPXIuZmlsbGxldmVscy5lbmQrci5maWxsbGV2ZWxzLnNpemUvMTAwLFI9ci5maWxsbGV2ZWxzLnNpemUsQz0wO0M8MWU1JiYoRT1yLmZpbGxsZXZlbHMuc3RhcnQrQypSLCEoUj4wP0U+PVA6RTw9UCkpO0MrKylFPkxbMF0mJkU8TFsxXSYmTy5wdXNoKEUpO2Vsc2UoTz16Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC1yLmxldmVscy5zaXplLzJ9KSkucHVzaChPW08ubGVuZ3RoLTFdK3IubGV2ZWxzLnNpemUpO2Vsc2Ugci5maWxsY29sb3ImJlwic3RyaW5nXCI9PXR5cGVvZiByLmZpbGxjb2xvciYmKE89WzBdKTtyLmxldmVscy5zaXplPDAmJih6LnJldmVyc2UoKSxPLnJldmVyc2UoKSk7dmFyIE4saj1rLmgsVj1rLncsVT1NYXRoLnJvdW5kKHIudGhpY2tuZXNzKihcImZyYWN0aW9uXCI9PT1yLnRoaWNrbmVzc21vZGU/VjoxKSkscT1VL2sudyxIPU1hdGgucm91bmQoci5sZW4qKFwiZnJhY3Rpb25cIj09PXIubGVubW9kZT9qOjEpKSxHPUgvay5oLFk9ci54cGFkL2sudyxXPShyLmJvcmRlcndpZHRoK3Iub3V0bGluZXdpZHRoKS8yLFg9ci55cGFkL2suaCxaPU1hdGgucm91bmQoci54KmsudytyLnhwYWQpLCQ9ci54LXEqKHttaWRkbGU6LjUscmlnaHQ6MX1bci54YW5jaG9yXXx8MCksSj1yLnkrRyooKHt0b3A6LS41LGJvdHRvbTouNX1bci55YW5jaG9yXXx8MCktLjUpLEs9TWF0aC5yb3VuZChrLmgqKDEtSikpLFE9Sy1ILHR0PXt0eXBlOlwibGluZWFyXCIscmFuZ2U6TCx0aWNrbW9kZTpyLnRpY2ttb2RlLG50aWNrczpyLm50aWNrcyx0aWNrMDpyLnRpY2swLGR0aWNrOnIuZHRpY2ssdGlja3ZhbHM6ci50aWNrdmFscyx0aWNrdGV4dDpyLnRpY2t0ZXh0LHRpY2tzOnIudGlja3MsdGlja2xlbjpyLnRpY2tsZW4sdGlja3dpZHRoOnIudGlja3dpZHRoLHRpY2tjb2xvcjpyLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczpyLnNob3d0aWNrbGFiZWxzLHRpY2tmb250OnIudGlja2ZvbnQsdGlja2FuZ2xlOnIudGlja2FuZ2xlLHRpY2tmb3JtYXQ6ci50aWNrZm9ybWF0LGV4cG9uZW50Zm9ybWF0OnIuZXhwb25lbnRmb3JtYXQsc2VwYXJhdGV0aG91c2FuZHM6ci5zZXBhcmF0ZXRob3VzYW5kcyxzaG93ZXhwb25lbnQ6ci5zaG93ZXhwb25lbnQsc2hvd3RpY2twcmVmaXg6ci5zaG93dGlja3ByZWZpeCx0aWNrcHJlZml4OnIudGlja3ByZWZpeCxzaG93dGlja3N1ZmZpeDpyLnNob3d0aWNrc3VmZml4LHRpY2tzdWZmaXg6ci50aWNrc3VmZml4LHRpdGxlOnIudGl0bGUsc2hvd2xpbmU6ITAsYW5jaG9yOlwiZnJlZVwiLHNpZGU6XCJyaWdodFwiLHBvc2l0aW9uOjF9LGV0PXt0eXBlOlwibGluZWFyXCIsX2lkOlwieVwiK2V9LHJ0PXtsZXR0ZXI6XCJ5XCIsZm9udDp2LmZvbnQsbm9Ib3ZlcjohMCxub1RpY2tzb246ITAsY2FsZW5kYXI6di5jYWxlbmRhcn07aWYoYih0dCxldCx5dCxydCx2KSxfKHR0LGV0LHl0LHJ0KSxldC5wb3NpdGlvbj1yLngrWStxLFQuYXhpcz1ldCwtMSE9PVtcInRvcFwiLFwiYm90dG9tXCJdLmluZGV4T2Yoci50aXRsZS5zaWRlKSYmKGV0LnRpdGxlLnNpZGU9ci50aXRsZS5zaWRlLGV0LnRpdGxleD1yLngrWSxldC50aXRsZXk9SisoXCJ0b3BcIj09PXIudGl0bGUuc2lkZT9HLVg6WCkpLHIubGluZS5jb2xvciYmXCJhdXRvXCI9PT1yLnRpY2ttb2RlKXtldC50aWNrbW9kZT1cImxpbmVhclwiLGV0LnRpY2swPXIubGV2ZWxzLnN0YXJ0O3ZhciBudD1yLmxldmVscy5zaXplLGl0PWMuY29uc3RyYWluKChLLVEpLzUwLDQsMTUpKzEsYXQ9KExbMV0tTFswXSkvKChyLm50aWNrc3x8aXQpKm50KTtpZihhdD4xKXt2YXIgb3Q9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhhdCkvTWF0aC5MTjEwKSk7bnQqPW90KmMucm91bmRVcChhdC9vdCxbMiw1LDEwXSksKE1hdGguYWJzKHIubGV2ZWxzLnN0YXJ0KS9yLmxldmVscy5zaXplKzFlLTYpJTE8MmUtNiYmKGV0LnRpY2swPTApfWV0LmR0aWNrPW50fWV0LmRvbWFpbj1bSitYLEorRy1YXSxldC5zZXRTY2FsZSgpO3ZhciBzdD1jLmVuc3VyZVNpbmdsZSh2Ll9pbmZvbGF5ZXIsXCJnXCIsZSxmdW5jdGlvbih0KXt0LmNsYXNzZWQoQS5jb2xvcmJhciwhMCkuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO3QuYXBwZW5kKFwicmVjdFwiKS5jbGFzc2VkKEEuY2JiZywhMCksdC5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoQS5jYmZpbGxzLCEwKSx0LmFwcGVuZChcImdcIikuY2xhc3NlZChBLmNibGluZXMsITApLHQuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKEEuY2JheGlzLCEwKS5jbGFzc2VkKEEuY3Jpc3AsITApLHQuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKEEuY2J0aXRsZXVuc2hpZnQsITApLmFwcGVuZChcImdcIikuY2xhc3NlZChBLmNidGl0bGUsITApLHQuYXBwZW5kKFwicmVjdFwiKS5jbGFzc2VkKEEuY2JvdXRsaW5lLCEwKSx0LnNlbGVjdChcIi5jYnRpdGxlXCIpLmRhdHVtKDApfSl9KTtzdC5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrTWF0aC5yb3VuZChrLmwpK1wiLFwiK01hdGgucm91bmQoay50KStcIilcIik7dmFyIGx0PXN0LnNlbGVjdChcIi5jYnRpdGxldW5zaGlmdFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoLVwiK01hdGgucm91bmQoay5sKStcIiwtXCIrTWF0aC5yb3VuZChrLnQpK1wiKVwiKSxjdD1zdC5zZWxlY3QoXCIuY2JheGlzXCIpLHV0PTA7aWYoLTEhPT1bXCJ0b3BcIixcImJvdHRvbVwiXS5pbmRleE9mKHIudGl0bGUuc2lkZSkpe3ZhciBodCxmdD1rLmwrKHIueCtZKSprLncscHQ9ZXQudGl0bGUuZm9udC5zaXplO2h0PVwidG9wXCI9PT1yLnRpdGxlLnNpZGU/KDEtKEorRy1YKSkqay5oK2sudCszKy43NSpwdDooMS0oSitYKSkqay5oK2sudC0zLS4yNSpwdCx4dChldC5faWQrXCJ0aXRsZVwiLHthdHRyaWJ1dGVzOnt4OmZ0LHk6aHQsXCJ0ZXh0LWFuY2hvclwiOlwic3RhcnRcIn19KX12YXIgZHQsZ3QsdnQsbXQ9Yy5zeW5jT3JBc3luYyhbYS5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7aWYoLTEhPT1bXCJ0b3BcIixcImJvdHRvbVwiXS5pbmRleE9mKHIudGl0bGUuc2lkZSkpe3ZhciBhPXN0LnNlbGVjdChcIi5jYnRpdGxlXCIpLG89YS5zZWxlY3QoXCJ0ZXh0XCIpLGw9Wy1yLm91dGxpbmV3aWR0aC8yLHIub3V0bGluZXdpZHRoLzJdLHU9YS5zZWxlY3QoXCIuaFwiK2V0Ll9pZCtcInRpdGxlLW1hdGgtZ3JvdXBcIikubm9kZSgpLGg9MTUuNjtpZihvLm5vZGUoKSYmKGg9cGFyc2VJbnQoby5ub2RlKCkuc3R5bGUuZm9udFNpemUsMTApKm0pLHU/KHV0PWYuYkJveCh1KS5oZWlnaHQpPmgmJihsWzFdLT0odXQtaCkvMik6by5ub2RlKCkmJiFvLmNsYXNzZWQoQS5qc1BsYWNlaG9sZGVyKSYmKHV0PWYuYkJveChvLm5vZGUoKSkuaGVpZ2h0KSx1dCl7aWYodXQrPTUsXCJ0b3BcIj09PXIudGl0bGUuc2lkZSlldC5kb21haW5bMV0tPXV0L2suaCxsWzFdKj0tMTtlbHNle2V0LmRvbWFpblswXSs9dXQvay5oO3ZhciBwPWcubGluZUNvdW50KG8pO2xbMV0rPSgxLXApKmh9YS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrbCtcIilcIiksZXQuc2V0U2NhbGUoKX19c3Quc2VsZWN0QWxsKFwiLmNiZmlsbHMsLmNibGluZXNcIikuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKDAsXCIrTWF0aC5yb3VuZChrLmgqKDEtZXQuZG9tYWluWzFdKSkrXCIpXCIpLGN0LmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZSgwLFwiK01hdGgucm91bmQoLWsudCkrXCIpXCIpO3ZhciBkPXN0LnNlbGVjdChcIi5jYmZpbGxzXCIpLnNlbGVjdEFsbChcInJlY3QuY2JmaWxsXCIpLmRhdGEoTyk7ZC5lbnRlcigpLmFwcGVuZChcInJlY3RcIikuY2xhc3NlZChBLmNiZmlsbCwhMCkuc3R5bGUoXCJzdHJva2VcIixcIm5vbmVcIiksZC5leGl0KCkucmVtb3ZlKCk7dmFyIHk9TC5tYXAoZXQuYzJwKS5tYXAoTWF0aC5yb3VuZCkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KTtkLmVhY2goZnVuY3Rpb24oYSxvKXt2YXIgcz1bMD09PW8/TFswXTooT1tvXStPW28tMV0pLzIsbz09PU8ubGVuZ3RoLTE/TFsxXTooT1tvXStPW28rMV0pLzJdLm1hcChldC5jMnApLm1hcChNYXRoLnJvdW5kKTtzWzFdPWMuY29uc3RyYWluKHNbMV0rKHNbMV0+c1swXSk/MTotMSx5WzBdLHlbMV0pO3ZhciBsPW4uc2VsZWN0KHRoaXMpLmF0dHIoe3g6Wix3aWR0aDpNYXRoLm1heChVLDIpLHk6bi5taW4ocyksaGVpZ2h0Ok1hdGgubWF4KG4ubWF4KHMpLW4ubWluKHMpLDIpfSk7aWYoci5maWxsZ3JhZGllbnQpZi5ncmFkaWVudChsLHQsZSxcInZlcnRpY2FsXCIsci5maWxsZ3JhZGllbnQsXCJmaWxsXCIpO2Vsc2V7dmFyIHU9RChhKS5yZXBsYWNlKFwiZS1cIixcIlwiKTtsLmF0dHIoXCJmaWxsXCIsaSh1KS50b0hleFN0cmluZygpKX19KTt2YXIgeD1zdC5zZWxlY3QoXCIuY2JsaW5lc1wiKS5zZWxlY3RBbGwoXCJwYXRoLmNibGluZVwiKS5kYXRhKHIubGluZS5jb2xvciYmci5saW5lLndpZHRoP3o6W10pO3JldHVybiB4LmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5jbGFzc2VkKEEuY2JsaW5lLCEwKSx4LmV4aXQoKS5yZW1vdmUoKSx4LmVhY2goZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuYXR0cihcImRcIixcIk1cIitaK1wiLFwiKyhNYXRoLnJvdW5kKGV0LmMycCh0KSkrci5saW5lLndpZHRoLzIlMSkrXCJoXCIrVSkuY2FsbChmLmxpbmVHcm91cFN0eWxlLHIubGluZS53aWR0aCxJKHQpLHIubGluZS5kYXNoKX0pLGN0LnNlbGVjdEFsbChcImcuXCIrZXQuX2lkK1widGljayxwYXRoXCIpLnJlbW92ZSgpLGMuc3luY09yQXN5bmMoW2Z1bmN0aW9uKCl7dmFyIGU9WitVKyhyLm91dGxpbmV3aWR0aHx8MCkvMi0oXCJvdXRzaWRlXCI9PT1yLnRpY2tzPzE6MCksbj1zLmNhbGNUaWNrcyhldCksaT1zLm1ha2VUcmFuc0ZuKGV0KSxhPXMuZ2V0VGlja1NpZ25zKGV0KVsyXTtyZXR1cm4gcy5kcmF3VGlja3ModCxldCx7dmFsczpcImluc2lkZVwiPT09ZXQudGlja3M/cy5jbGlwRW5kcyhldCxuKTpuLGxheWVyOmN0LHBhdGg6cy5tYWtlVGlja1BhdGgoZXQsZSxhKSx0cmFuc0ZuOml9KSxzLmRyYXdMYWJlbHModCxldCx7dmFsczpuLGxheWVyOmN0LHRyYW5zRm46aSxsYWJlbEZuczpzLm1ha2VMYWJlbEZucyhldCxlKX0pfSxmdW5jdGlvbigpe2lmKC0xPT09W1widG9wXCIsXCJib3R0b21cIl0uaW5kZXhPZihyLnRpdGxlLnNpZGUpKXt2YXIgZT1ldC50aXRsZS5mb250LnNpemUsaT1ldC5fb2Zmc2V0K2V0Ll9sZW5ndGgvMixhPWsubCsoZXQucG9zaXRpb258fDApKmsudysoXCJyaWdodFwiPT09ZXQuc2lkZT8xMCtlKihldC5zaG93dGlja2xhYmVscz8xOi41KTotMTAtZSooZXQuc2hvd3RpY2tsYWJlbHM/LjU6MCkpO3h0KFwiaFwiK2V0Ll9pZCtcInRpdGxlXCIse2F2b2lkOntzZWxlY3Rpb246bi5zZWxlY3QodCkuc2VsZWN0QWxsKFwiZy5cIitldC5faWQrXCJ0aWNrXCIpLHNpZGU6ci50aXRsZS5zaWRlLG9mZnNldExlZnQ6ay5sLG9mZnNldFRvcDowLG1heFNoaWZ0OnYud2lkdGh9LGF0dHJpYnV0ZXM6e3g6YSx5OmksXCJ0ZXh0LWFuY2hvclwiOlwibWlkZGxlXCJ9LHRyYW5zZm9ybTp7cm90YXRlOlwiLTkwXCIsb2Zmc2V0OjB9fSl9fV0pfSxhLnByZXZpb3VzUHJvbWlzZXMsZnVuY3Rpb24oKXt2YXIgbj1VK3Iub3V0bGluZXdpZHRoLzIrZi5iQm94KGN0Lm5vZGUoKSkud2lkdGg7aWYoKE49bHQuc2VsZWN0KFwidGV4dFwiKSkubm9kZSgpJiYhTi5jbGFzc2VkKEEuanNQbGFjZWhvbGRlcikpe3ZhciBpLG89bHQuc2VsZWN0KFwiLmhcIitldC5faWQrXCJ0aXRsZS1tYXRoLWdyb3VwXCIpLm5vZGUoKTtpPW8mJi0xIT09W1widG9wXCIsXCJib3R0b21cIl0uaW5kZXhPZihyLnRpdGxlLnNpZGUpP2YuYkJveChvKS53aWR0aDpmLmJCb3gobHQubm9kZSgpKS5yaWdodC1aLWsubCxuPU1hdGgubWF4KG4saSl9dmFyIHM9MipyLnhwYWQrbityLmJvcmRlcndpZHRoK3Iub3V0bGluZXdpZHRoLzIsbD1LLVE7c3Quc2VsZWN0KFwiLmNiYmdcIikuYXR0cih7eDpaLXIueHBhZC0oci5ib3JkZXJ3aWR0aCtyLm91dGxpbmV3aWR0aCkvMix5OlEtVyx3aWR0aDpNYXRoLm1heChzLDIpLGhlaWdodDpNYXRoLm1heChsKzIqVywyKX0pLmNhbGwocC5maWxsLHIuYmdjb2xvcikuY2FsbChwLnN0cm9rZSxyLmJvcmRlcmNvbG9yKS5zdHlsZSh7XCJzdHJva2Utd2lkdGhcIjpyLmJvcmRlcndpZHRofSksc3Quc2VsZWN0QWxsKFwiLmNib3V0bGluZVwiKS5hdHRyKHt4OloseTpRK3IueXBhZCsoXCJ0b3BcIj09PXIudGl0bGUuc2lkZT91dDowKSx3aWR0aDpNYXRoLm1heChVLDIpLGhlaWdodDpNYXRoLm1heChsLTIqci55cGFkLXV0LDIpfSkuY2FsbChwLnN0cm9rZSxyLm91dGxpbmVjb2xvcikuc3R5bGUoe2ZpbGw6XCJOb25lXCIsXCJzdHJva2Utd2lkdGhcIjpyLm91dGxpbmV3aWR0aH0pO3ZhciBjPSh7Y2VudGVyOi41LHJpZ2h0OjF9W3IueGFuY2hvcl18fDApKnM7c3QuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiKyhrLmwtYykrXCIsXCIray50K1wiKVwiKTt2YXIgdT17fSxoPXlbci55YW5jaG9yXSxkPXhbci55YW5jaG9yXTtcInBpeGVsc1wiPT09ci5sZW5tb2RlPyh1Lnk9ci55LHUudD1sKmgsdS5iPWwqZCk6KHUudD11LmI9MCx1Lnl0PXIueStyLmxlbipoLHUueWI9ci55LXIubGVuKmQpO3ZhciBnPXlbci54YW5jaG9yXSx2PXhbci54YW5jaG9yXTtpZihcInBpeGVsc1wiPT09ci50aGlja25lc3Ntb2RlKXUueD1yLngsdS5sPXMqZyx1LnI9cyp2O2Vsc2V7dmFyIG09cy1VO3UubD1tKmcsdS5yPW0qdix1LnhsPXIueC1yLnRoaWNrbmVzcypnLHUueHI9ci54K3IudGhpY2tuZXNzKnZ9YS5hdXRvTWFyZ2luKHQsZSx1KX1dLHQpO2lmKG10JiZtdC50aGVuJiYodC5fcHJvbWlzZXN8fFtdKS5wdXNoKG10KSx0Ll9jb250ZXh0LmVkaXRzLmNvbG9yYmFyUG9zaXRpb24pbC5pbml0KHtlbGVtZW50OnN0Lm5vZGUoKSxnZDp0LHByZXBGbjpmdW5jdGlvbigpe2R0PXN0LmF0dHIoXCJ0cmFuc2Zvcm1cIiksaChzdCl9LG1vdmVGbjpmdW5jdGlvbih0LGUpe3N0LmF0dHIoXCJ0cmFuc2Zvcm1cIixkdCtcIiB0cmFuc2xhdGUoXCIrdCtcIixcIitlK1wiKVwiKSxndD1sLmFsaWduKCQrdC9rLncscSwwLDEsci54YW5jaG9yKSx2dD1sLmFsaWduKEotZS9rLmgsRywwLDEsci55YW5jaG9yKTt2YXIgbj1sLmdldEN1cnNvcihndCx2dCxyLnhhbmNob3Isci55YW5jaG9yKTtoKHN0LG4pfSxkb25lRm46ZnVuY3Rpb24oKXtpZihoKHN0KSx2b2lkIDAhPT1ndCYmdm9pZCAwIT09dnQpe3ZhciBlPXt9O2VbUyhcInhcIildPWd0LGVbUyhcInlcIildPXZ0LG8uY2FsbChcIl9ndWlSZXN0eWxlXCIsdCxlLE0oKS5pbmRleCl9fX0pO3JldHVybiBtdH1mdW5jdGlvbiB5dCh0LGUpe3JldHVybiBjLmNvZXJjZSh0dCxldCx3LHQsZSl9ZnVuY3Rpb24geHQoZSxyKXt2YXIgbj17cHJvcENvbnRhaW5lcjpldCxwcm9wTmFtZTpTKFwidGl0bGVcIiksdHJhY2VJbmRleDpNKCkuaW5kZXgscGxhY2Vob2xkZXI6di5fZGZsdFRpdGxlLmNvbG9yYmFyLGNvbnRhaW5lckdyb3VwOnN0LnNlbGVjdChcIi5jYnRpdGxlXCIpfSxpPVwiaFwiPT09ZS5jaGFyQXQoMCk/ZS5zdWJzdHIoMSk6XCJoXCIrZTtzdC5zZWxlY3RBbGwoXCIuXCIraStcIiwuXCIraStcIi1tYXRoLWdyb3VwXCIpLnJlbW92ZSgpLGQuZHJhdyh0LGUsdShuLHJ8fHt9KSl9di5faW5mb2xheWVyLnNlbGVjdEFsbChcImcuXCIrZSkucmVtb3ZlKCl9ZnVuY3Rpb24gTSgpe2Zvcih2YXIgcj1lLnN1YnN0cigyKSxuPTA7bjx0Ll9mdWxsRGF0YS5sZW5ndGg7bisrKXt2YXIgaT10Ll9mdWxsRGF0YVtuXTtpZihpLnVpZD09PXIpcmV0dXJuIGl9fWZ1bmN0aW9uIFModCl7dmFyIGU9XCJjb2xvcmJhci5cIixyPU0oKS5fbW9kdWxlLmNvbG9yYmFyLmNvbnRhaW5lcjtyZXR1cm4gciYmKGU9citcIi5cIitlKSxlK3R9cmV0dXJuIHIuZmlsbGNvbG9yPW51bGwsci5saW5lPXtjb2xvcjpudWxsLHdpZHRoOm51bGwsZGFzaDpudWxsfSxyLmxldmVscz17c3RhcnQ6bnVsbCxlbmQ6bnVsbCxzaXplOm51bGx9LHIuZmlsbGxldmVscz1udWxsLHIuZmlsbGdyYWRpZW50PW51bGwsci56cmFuZ2U9bnVsbCxPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe1RbdF09ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHJbdF09Yy5pc1BsYWluT2JqZWN0KHJbdF0pP2MuZXh0ZW5kRmxhdChyW3RdLGUpOmUsVCk6clt0XX19KSxULm9wdGlvbnM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHQpXCJmdW5jdGlvblwiPT10eXBlb2YgVFtlXSYmVFtlXSh0W2VdKTtyZXR1cm4gVH0sVC5fb3B0cz1yLFR9fSx7XCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCI6NjczLFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL2xpYi9zZXRjdXJzb3JcIjo3MjEsXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIjo3MjUsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzXCI6NzUxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzXCI6NzYxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3Bvc2l0aW9uX2RlZmF1bHRzXCI6NzY0LFwiLi4vLi4vcGxvdHMvcGxvdHNcIjo4MTAsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL2NvbG9yXCI6NTc4LFwiLi4vZHJhZ2VsZW1lbnRcIjo1OTYsXCIuLi9kcmF3aW5nXCI6NTk5LFwiLi4vdGl0bGVzXCI6NjY2LFwiLi9hdHRyaWJ1dGVzXCI6NTc5LFwiLi9jb25zdGFudHNcIjo1ODEsZDM6MTU1LHRpbnljb2xvcjI6NTIyfV0sNTg0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4uaXNQbGFpbk9iamVjdCh0LmNvbG9yYmFyKX19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDU4NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL3NjYWxlcy5qc1wiKS5zY2FsZXM7T2JqZWN0LmtleXMobik7ZnVuY3Rpb24gaSh0KXtyZXR1cm5cImBcIit0K1wiYFwifWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Q9dHx8XCJcIjt2YXIgcixhPShlPWV8fHt9KS5jTGV0dGVyfHxcImNcIixvPShcIm9ubHlJZk51bWVyaWNhbFwiaW4gZT9lLm9ubHlJZk51bWVyaWNhbDpCb29sZWFuKHQpLFwibm9TY2FsZVwiaW4gZT9lLm5vU2NhbGU6XCJtYXJrZXIubGluZVwiPT09dCkscz1cInNob3dTY2FsZURmbHRcImluIGU/ZS5zaG93U2NhbGVEZmx0OlwielwiPT09YSxsPVwic3RyaW5nXCI9PXR5cGVvZiBlLmNvbG9yc2NhbGVEZmx0P25bZS5jb2xvcnNjYWxlRGZsdF06bnVsbCxjPWUuZWRpdFR5cGVPdmVycmlkZXx8XCJcIix1PXQ/dCtcIi5cIjpcIlwiO1wiY29sb3JBdHRyXCJpbiBlPyhyPWUuY29sb3JBdHRyLGUuY29sb3JBdHRyKTppKHUrKHI9e3o6XCJ6XCIsYzpcImNvbG9yXCJ9W2FdKSk7dmFyIGg9YStcImF1dG9cIixmPWErXCJtaW5cIixwPWErXCJtYXhcIixkPWErXCJtaWRcIixnPShpKHUraCksaSh1K2YpLGkodStwKSx7fSk7Z1tmXT1nW3BdPXZvaWQgMDt2YXIgdj17fTt2W2hdPSExO3ZhciBtPXt9O3JldHVyblwiY29sb3JcIj09PXImJihtLmNvbG9yPXt2YWxUeXBlOlwiY29sb3JcIixhcnJheU9rOiEwLGVkaXRUeXBlOmN8fFwic3R5bGVcIn0sZS5hbmltJiYobS5jb2xvci5hbmltPSEwKSksbVtoXT17dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wiLGltcGxpZWRFZGl0czpnfSxtW2ZdPXt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDpudWxsLGVkaXRUeXBlOmN8fFwicGxvdFwiLGltcGxpZWRFZGl0czp2fSxtW3BdPXt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDpudWxsLGVkaXRUeXBlOmN8fFwicGxvdFwiLGltcGxpZWRFZGl0czp2fSxtW2RdPXt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDpudWxsLGVkaXRUeXBlOlwiY2FsY1wiLGltcGxpZWRFZGl0czpnfSxtLmNvbG9yc2NhbGU9e3ZhbFR5cGU6XCJjb2xvcnNjYWxlXCIsZWRpdFR5cGU6XCJjYWxjXCIsZGZsdDpsLGltcGxpZWRFZGl0czp7YXV0b2NvbG9yc2NhbGU6ITF9fSxtLmF1dG9jb2xvcnNjYWxlPXt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEhPT1lLmF1dG9Db2xvckRmbHQsZWRpdFR5cGU6XCJjYWxjXCIsaW1wbGllZEVkaXRzOntjb2xvcnNjYWxlOnZvaWQgMH19LG0ucmV2ZXJzZXNjYWxlPXt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEsZWRpdFR5cGU6XCJwbG90XCJ9LG98fChtLnNob3dzY2FsZT17dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OnMsZWRpdFR5cGU6XCJjYWxjXCJ9KSxtfX0se1wiLi9zY2FsZXMuanNcIjo1OTN9XSw1ODY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9dC5fZnVsbExheW91dCxhPXIudmFscyxvPXIuY29udGFpbmVyU3RyLHM9ci5jTGV0dGVyLGw9bz9uLm5lc3RlZFByb3BlcnR5KGUsbykuZ2V0KCk6ZSxjPXMrXCJtaW5cIix1PXMrXCJtYXhcIixoPXMrXCJtaWRcIixmPWxbcytcImF1dG9cIl0scD1sW2NdLGQ9bFt1XSxnPWxbaF0sdj1sLmNvbG9yc2NhbGU7ITE9PT1mJiZ2b2lkIDAhPT1wfHwocD1uLmFnZ051bXMoTWF0aC5taW4sbnVsbCxhKSksITE9PT1mJiZ2b2lkIDAhPT1kfHwoZD1uLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxhKSksITEhPT1mJiZ2b2lkIDAhPT1nJiYoZC1nPmctcD9wPWctKGQtZyk6ZC1nPGctcCYmKGQ9ZysoZy1wKSkpLHA9PT1kJiYocC09LjUsZCs9LjUpLGxbXCJfXCIrY109bFtjXT1wLGxbXCJfXCIrdV09bFt1XT1kLGwuYXV0b2NvbG9yc2NhbGUmJih2PXAqZDwwP2kuY29sb3JzY2FsZS5kaXZlcmdpbmc6cD49MD9pLmNvbG9yc2NhbGUuc2VxdWVudGlhbDppLmNvbG9yc2NhbGUuc2VxdWVudGlhbG1pbnVzLGwuX2NvbG9yc2NhbGU9bC5jb2xvcnNjYWxlPXYpfX0se1wiLi4vLi4vbGliXCI6NzAxfV0sNTg3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2hlbHBlcnNcIikuaGFzQ29sb3JzY2FsZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe3ZhciByPXRbXCJfXCIrZV07dm9pZCAwIT09ciYmKHRbZV09cil9ZnVuY3Rpb24gcih0LHIpe3ZhciBpPXIuY29udGFpbmVyP24ubmVzdGVkUHJvcGVydHkodCxyLmNvbnRhaW5lcikuZ2V0KCk6dDtpZihpKXt2YXIgYT1pLnphdXRvfHxpLmNhdXRvLG89ci5taW4scz1yLm1heDsoYXx8dm9pZCAwPT09aVtvXSkmJmUoaSxvKSwoYXx8dm9pZCAwPT09aVtzXSkmJmUoaSxzKSxpLmF1dG9jb2xvcnNjYWxlJiZlKGksXCJjb2xvcnNjYWxlXCIpfX1mb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89dFthXSxzPW8uX21vZHVsZS5jb2xvcmJhcjtpZihzKWlmKEFycmF5LmlzQXJyYXkocykpZm9yKHZhciBsPTA7bDxzLmxlbmd0aDtsKyspcihvLHNbbF0pO2Vsc2UgcihvLHMpO2kobyxcIm1hcmtlci5saW5lXCIpJiZyKG8se2NvbnRhaW5lcjpcIm1hcmtlci5saW5lXCIsbWluOlwiY21pblwiLG1heDpcImNtYXhcIn0pLGkobyxcImxpbmVcIikmJnIobyx7Y29udGFpbmVyOlwibGluZVwiLG1pbjpcImNtaW5cIixtYXg6XCJjbWF4XCJ9KX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuL2hlbHBlcnNcIjo1ODl9XSw1ODg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uL2NvbG9yYmFyL2hhc19jb2xvcmJhclwiKSxvPXQoXCIuLi9jb2xvcmJhci9kZWZhdWx0c1wiKSxzPXQoXCIuL3NjYWxlc1wiKS5pc1ZhbGlkO2Z1bmN0aW9uIGwodCxlKXt2YXIgcj1lLnNsaWNlKDAsZS5sZW5ndGgtMSk7cmV0dXJuIGU/aS5uZXN0ZWRQcm9wZXJ0eSh0LHIpLmdldCgpfHx7fTp0fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLGMpe3ZhciB1PWMucHJlZml4LGg9Yy5jTGV0dGVyLGY9bCh0LHUpLHA9bChlLHUpLGQ9bChlLl90ZW1wbGF0ZXx8e30sdSl8fHt9LGc9ZltoK1wibWluXCJdLHY9ZltoK1wibWF4XCJdO2kodStoK1wiYXV0b1wiLCEobihnKSYmbih2KSYmZzx2KSk/aSh1K2grXCJtaWRcIik6KGkodStoK1wibWluXCIpLGkodStoK1wibWF4XCIpKTt2YXIgbSx5LHg9Zi5jb2xvcnNjYWxlLGI9ZC5jb2xvcnNjYWxlOyh2b2lkIDAhPT14JiYobT0hcyh4KSksdm9pZCAwIT09YiYmKG09IXMoYikpLGkodStcImF1dG9jb2xvcnNjYWxlXCIsbSksaSh1K1wiY29sb3JzY2FsZVwiKSxpKHUrXCJyZXZlcnNlc2NhbGVcIiksYy5ub1NjYWxlfHxcIm1hcmtlci5saW5lLlwiPT09dSl8fCh1JiYoeT1hKGYpKSxpKHUrXCJzaG93c2NhbGVcIix5KSYmbyhmLHAscikpfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vY29sb3JiYXIvZGVmYXVsdHNcIjo1ODIsXCIuLi9jb2xvcmJhci9oYXNfY29sb3JiYXJcIjo1ODQsXCIuL3NjYWxlc1wiOjU5MyxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sNTg5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcInRpbnljb2xvcjJcIiksYT10KFwiZmFzdC1pc251bWVyaWNcIiksbz10KFwiLi4vLi4vbGliXCIpLHM9dChcIi4uL2NvbG9yXCIpLGw9dChcIi4vc2NhbGVzXCIpLmlzVmFsaWQ7ZnVuY3Rpb24gYyh0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj1lLTEsaT0wO24+PTA7bi0tLGkrKyl7dmFyIGE9dFtuXTtyW2ldPVsxLWFbMF0sYVsxXV19cmV0dXJuIHJ9ZnVuY3Rpb24gdSh0KXt2YXIgZT17cjp0WzBdLGc6dFsxXSxiOnRbMl0sYTp0WzNdfTtyZXR1cm4gaShlKS50b1JnYlN0cmluZygpfWUuZXhwb3J0cz17aGFzQ29sb3JzY2FsZTpmdW5jdGlvbih0LGUpe3ZhciByPWU/by5uZXN0ZWRQcm9wZXJ0eSh0LGUpLmdldCgpfHx7fTp0LG49ci5jb2xvcixpPSExO2lmKG8uaXNBcnJheU9yVHlwZWRBcnJheShuKSlmb3IodmFyIHM9MDtzPG4ubGVuZ3RoO3MrKylpZihhKG5bc10pKXtpPSEwO2JyZWFrfXJldHVybiBvLmlzUGxhaW5PYmplY3QocikmJihpfHwhMD09PXIuc2hvd3NjYWxlfHxhKHIuY21pbikmJmEoci5jbWF4KXx8bChyLmNvbG9yc2NhbGUpfHxvLmlzUGxhaW5PYmplY3Qoci5jb2xvcmJhcikpfSxleHRyYWN0U2NhbGU6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5jTGV0dGVyLG49dC5yZXZlcnNlc2NhbGU/Yyh0LmNvbG9yc2NhbGUpOnQuY29sb3JzY2FsZSxpPXRbcitcIm1pblwiXSxhPXRbcitcIm1heFwiXSxvPW4ubGVuZ3RoLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLHU9MDt1PG87dSsrKXt2YXIgaD1uW3VdO3NbdV09aStoWzBdKihhLWkpLGxbdV09aFsxXX1yZXR1cm57ZG9tYWluOnMscmFuZ2U6bH19LGZsaXBTY2FsZTpjLG1ha2VDb2xvclNjYWxlRnVuYzpmdW5jdGlvbih0LGUpe2U9ZXx8e307Zm9yKHZhciByPXQuZG9tYWluLG89dC5yYW5nZSxsPW8ubGVuZ3RoLGM9bmV3IEFycmF5KGwpLGg9MDtoPGw7aCsrKXt2YXIgZj1pKG9baF0pLnRvUmdiKCk7Y1toXT1bZi5yLGYuZyxmLmIsZi5hXX12YXIgcCxkPW4uc2NhbGUubGluZWFyKCkuZG9tYWluKHIpLnJhbmdlKGMpLmNsYW1wKCEwKSxnPWUubm9OdW1lcmljQ2hlY2ssdj1lLnJldHVybkFycmF5O3JldHVybihwPWcmJnY/ZDpnP2Z1bmN0aW9uKHQpe3JldHVybiB1KGQodCkpfTp2P2Z1bmN0aW9uKHQpe3JldHVybiBhKHQpP2QodCk6aSh0KS5pc1ZhbGlkKCk/dDpzLmRlZmF1bHRMaW5lfTpmdW5jdGlvbih0KXtyZXR1cm4gYSh0KT91KGQodCkpOmkodCkuaXNWYWxpZCgpP3Q6cy5kZWZhdWx0TGluZX0pLmRvbWFpbj1kLmRvbWFpbixwLnJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIG99LHB9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vY29sb3JcIjo1NzgsXCIuL3NjYWxlc1wiOjU5MyxkMzoxNTUsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMix0aW55Y29sb3IyOjUyMn1dLDU5MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL3NjYWxlc1wiKSxpPXQoXCIuL2hlbHBlcnNcIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwiY29tcG9uZW50XCIsbmFtZTpcImNvbG9yc2NhbGVcIixhdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksbGF5b3V0QXR0cmlidXRlczp0KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KFwiLi9sYXlvdXRfZGVmYXVsdHNcIiksaGFuZGxlRGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIiksY3Jvc3NUcmFjZURlZmF1bHRzOnQoXCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzXCIpLGNhbGM6dChcIi4vY2FsY1wiKSxzY2FsZXM6bi5zY2FsZXMsZGVmYXVsdFNjYWxlOm4uZGVmYXVsdFNjYWxlLGdldFNjYWxlOm4uZ2V0LGlzVmFsaWRTY2FsZTpuLmlzVmFsaWQsaGFzQ29sb3JzY2FsZTppLmhhc0NvbG9yc2NhbGUsZmxpcFNjYWxlOmkuZmxpcFNjYWxlLGV4dHJhY3RTY2FsZTppLmV4dHJhY3RTY2FsZSxtYWtlQ29sb3JTY2FsZUZ1bmM6aS5tYWtlQ29sb3JTY2FsZUZ1bmN9fSx7XCIuL2F0dHJpYnV0ZXNcIjo1ODUsXCIuL2NhbGNcIjo1ODYsXCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzXCI6NTg3LFwiLi9kZWZhdWx0c1wiOjU4OCxcIi4vaGVscGVyc1wiOjU4OSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo1OTEsXCIuL2xheW91dF9kZWZhdWx0c1wiOjU5MixcIi4vc2NhbGVzXCI6NTkzfV0sNTkxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vc2NhbGVzXCIpLnNjYWxlcztlLmV4cG9ydHM9e2VkaXRUeXBlOlwiY2FsY1wiLHNlcXVlbnRpYWw6e3ZhbFR5cGU6XCJjb2xvcnNjYWxlXCIsZGZsdDpuLlJlZHMsZWRpdFR5cGU6XCJjYWxjXCJ9LHNlcXVlbnRpYWxtaW51czp7dmFsVHlwZTpcImNvbG9yc2NhbGVcIixkZmx0Om4uQmx1ZXMsZWRpdFR5cGU6XCJjYWxjXCJ9LGRpdmVyZ2luZzp7dmFsVHlwZTpcImNvbG9yc2NhbGVcIixkZmx0Om4uUmRCdSxlZGl0VHlwZTpcImNhbGNcIn19fSx7XCIuL3NjYWxlc1wiOjU5M31dLDU5MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuY29sb3JzY2FsZSxvPWEubmV3Q29udGFpbmVyKGUsXCJjb2xvcnNjYWxlXCIpO2Z1bmN0aW9uIHModCxlKXtyZXR1cm4gbi5jb2VyY2UocixvLGksdCxlKX1zKFwic2VxdWVudGlhbFwiKSxzKFwic2VxdWVudGlhbG1pbnVzXCIpLHMoXCJkaXZlcmdpbmdcIil9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjU5MX1dLDU5MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJ0aW55Y29sb3IyXCIpLGk9e0dyZXlzOltbMCxcInJnYigwLDAsMClcIl0sWzEsXCJyZ2IoMjU1LDI1NSwyNTUpXCJdXSxZbEduQnU6W1swLFwicmdiKDgsMjksODgpXCJdLFsuMTI1LFwicmdiKDM3LDUyLDE0OClcIl0sWy4yNSxcInJnYigzNCw5NCwxNjgpXCJdLFsuMzc1LFwicmdiKDI5LDE0NSwxOTIpXCJdLFsuNSxcInJnYig2NSwxODIsMTk2KVwiXSxbLjYyNSxcInJnYigxMjcsMjA1LDE4NylcIl0sWy43NSxcInJnYigxOTksMjMzLDE4MClcIl0sWy44NzUsXCJyZ2IoMjM3LDI0OCwyMTcpXCJdLFsxLFwicmdiKDI1NSwyNTUsMjE3KVwiXV0sR3JlZW5zOltbMCxcInJnYigwLDY4LDI3KVwiXSxbLjEyNSxcInJnYigwLDEwOSw0NClcIl0sWy4yNSxcInJnYigzNSwxMzksNjkpXCJdLFsuMzc1LFwicmdiKDY1LDE3MSw5MylcIl0sWy41LFwicmdiKDExNiwxOTYsMTE4KVwiXSxbLjYyNSxcInJnYigxNjEsMjE3LDE1NSlcIl0sWy43NSxcInJnYigxOTksMjMzLDE5MilcIl0sWy44NzUsXCJyZ2IoMjI5LDI0NSwyMjQpXCJdLFsxLFwicmdiKDI0NywyNTIsMjQ1KVwiXV0sWWxPclJkOltbMCxcInJnYigxMjgsMCwzOClcIl0sWy4xMjUsXCJyZ2IoMTg5LDAsMzgpXCJdLFsuMjUsXCJyZ2IoMjI3LDI2LDI4KVwiXSxbLjM3NSxcInJnYigyNTIsNzgsNDIpXCJdLFsuNSxcInJnYigyNTMsMTQxLDYwKVwiXSxbLjYyNSxcInJnYigyNTQsMTc4LDc2KVwiXSxbLjc1LFwicmdiKDI1NCwyMTcsMTE4KVwiXSxbLjg3NSxcInJnYigyNTUsMjM3LDE2MClcIl0sWzEsXCJyZ2IoMjU1LDI1NSwyMDQpXCJdXSxCbHVlcmVkOltbMCxcInJnYigwLDAsMjU1KVwiXSxbMSxcInJnYigyNTUsMCwwKVwiXV0sUmRCdTpbWzAsXCJyZ2IoNSwxMCwxNzIpXCJdLFsuMzUsXCJyZ2IoMTA2LDEzNywyNDcpXCJdLFsuNSxcInJnYigxOTAsMTkwLDE5MClcIl0sWy42LFwicmdiKDIyMCwxNzAsMTMyKVwiXSxbLjcsXCJyZ2IoMjMwLDE0NSw5MClcIl0sWzEsXCJyZ2IoMTc4LDEwLDI4KVwiXV0sUmVkczpbWzAsXCJyZ2IoMjIwLDIyMCwyMjApXCJdLFsuMixcInJnYigyNDUsMTk1LDE1NylcIl0sWy40LFwicmdiKDI0NSwxNjAsMTA1KVwiXSxbMSxcInJnYigxNzgsMTAsMjgpXCJdXSxCbHVlczpbWzAsXCJyZ2IoNSwxMCwxNzIpXCJdLFsuMzUsXCJyZ2IoNDAsNjAsMTkwKVwiXSxbLjUsXCJyZ2IoNzAsMTAwLDI0NSlcIl0sWy42LFwicmdiKDkwLDEyMCwyNDUpXCJdLFsuNyxcInJnYigxMDYsMTM3LDI0NylcIl0sWzEsXCJyZ2IoMjIwLDIyMCwyMjApXCJdXSxQaWNuaWM6W1swLFwicmdiKDAsMCwyNTUpXCJdLFsuMSxcInJnYig1MSwxNTMsMjU1KVwiXSxbLjIsXCJyZ2IoMTAyLDIwNCwyNTUpXCJdLFsuMyxcInJnYigxNTMsMjA0LDI1NSlcIl0sWy40LFwicmdiKDIwNCwyMDQsMjU1KVwiXSxbLjUsXCJyZ2IoMjU1LDI1NSwyNTUpXCJdLFsuNixcInJnYigyNTUsMjA0LDI1NSlcIl0sWy43LFwicmdiKDI1NSwxNTMsMjU1KVwiXSxbLjgsXCJyZ2IoMjU1LDEwMiwyMDQpXCJdLFsuOSxcInJnYigyNTUsMTAyLDEwMilcIl0sWzEsXCJyZ2IoMjU1LDAsMClcIl1dLFJhaW5ib3c6W1swLFwicmdiKDE1MCwwLDkwKVwiXSxbLjEyNSxcInJnYigwLDAsMjAwKVwiXSxbLjI1LFwicmdiKDAsMjUsMjU1KVwiXSxbLjM3NSxcInJnYigwLDE1MiwyNTUpXCJdLFsuNSxcInJnYig0NCwyNTUsMTUwKVwiXSxbLjYyNSxcInJnYigxNTEsMjU1LDApXCJdLFsuNzUsXCJyZ2IoMjU1LDIzNCwwKVwiXSxbLjg3NSxcInJnYigyNTUsMTExLDApXCJdLFsxLFwicmdiKDI1NSwwLDApXCJdXSxQb3J0bGFuZDpbWzAsXCJyZ2IoMTIsNTEsMTMxKVwiXSxbLjI1LFwicmdiKDEwLDEzNiwxODYpXCJdLFsuNSxcInJnYigyNDIsMjExLDU2KVwiXSxbLjc1LFwicmdiKDI0MiwxNDMsNTYpXCJdLFsxLFwicmdiKDIxNywzMCwzMClcIl1dLEpldDpbWzAsXCJyZ2IoMCwwLDEzMSlcIl0sWy4xMjUsXCJyZ2IoMCw2MCwxNzApXCJdLFsuMzc1LFwicmdiKDUsMjU1LDI1NSlcIl0sWy42MjUsXCJyZ2IoMjU1LDI1NSwwKVwiXSxbLjg3NSxcInJnYigyNTAsMCwwKVwiXSxbMSxcInJnYigxMjgsMCwwKVwiXV0sSG90OltbMCxcInJnYigwLDAsMClcIl0sWy4zLFwicmdiKDIzMCwwLDApXCJdLFsuNixcInJnYigyNTUsMjEwLDApXCJdLFsxLFwicmdiKDI1NSwyNTUsMjU1KVwiXV0sQmxhY2tib2R5OltbMCxcInJnYigwLDAsMClcIl0sWy4yLFwicmdiKDIzMCwwLDApXCJdLFsuNCxcInJnYigyMzAsMjEwLDApXCJdLFsuNyxcInJnYigyNTUsMjU1LDI1NSlcIl0sWzEsXCJyZ2IoMTYwLDIwMCwyNTUpXCJdXSxFYXJ0aDpbWzAsXCJyZ2IoMCwwLDEzMClcIl0sWy4xLFwicmdiKDAsMTgwLDE4MClcIl0sWy4yLFwicmdiKDQwLDIxMCw0MClcIl0sWy40LFwicmdiKDIzMCwyMzAsNTApXCJdLFsuNixcInJnYigxMjAsNzAsMjApXCJdLFsxLFwicmdiKDI1NSwyNTUsMjU1KVwiXV0sRWxlY3RyaWM6W1swLFwicmdiKDAsMCwwKVwiXSxbLjE1LFwicmdiKDMwLDAsMTAwKVwiXSxbLjQsXCJyZ2IoMTIwLDAsMTAwKVwiXSxbLjYsXCJyZ2IoMTYwLDkwLDApXCJdLFsuOCxcInJnYigyMzAsMjAwLDApXCJdLFsxLFwicmdiKDI1NSwyNTAsMjIwKVwiXV0sVmlyaWRpczpbWzAsXCIjNDQwMTU0XCJdLFsuMDYyNzQ1MDk4MDM5MjE1NjksXCIjNDgxODZhXCJdLFsuMTI1NDkwMTk2MDc4NDMxMzcsXCIjNDcyZDdiXCJdLFsuMTg4MjM1Mjk0MTE3NjQ3MDYsXCIjNDI0MDg2XCJdLFsuMjUwOTgwMzkyMTU2ODYyNzQsXCIjM2I1MjhiXCJdLFsuMzEzNzI1NDkwMTk2MDc4NCxcIiMzMzYzOGRcIl0sWy4zNzY0NzA1ODgyMzUyOTQxLFwiIzJjNzI4ZVwiXSxbLjQzOTIxNTY4NjI3NDUwOTgsXCIjMjY4MjhlXCJdLFsuNTAxOTYwNzg0MzEzNzI1NSxcIiMyMTkxOGNcIl0sWy41NjQ3MDU4ODIzNTI5NDEyLFwiIzFmYTA4OFwiXSxbLjYyNzQ1MDk4MDM5MjE1NjksXCIjMjhhZTgwXCJdLFsuNjkwMTk2MDc4NDMxMzcyNSxcIiMzZmJjNzNcIl0sWy43NTI5NDExNzY0NzA1ODgyLFwiIzVlYzk2MlwiXSxbLjgxNTY4NjI3NDUwOTgwMzksXCIjODRkNDRiXCJdLFsuODc4NDMxMzcyNTQ5MDE5NixcIiNhZGRjMzBcIl0sWy45NDExNzY0NzA1ODgyMzUzLFwiI2Q4ZTIxOVwiXSxbMSxcIiNmZGU3MjVcIl1dLENpdmlkaXM6W1swLFwicmdiKDAsMzIsNzYpXCJdLFsuMDU4ODI0LFwicmdiKDAsNDIsMTAyKVwiXSxbLjExNzY0NyxcInJnYigwLDUyLDExMClcIl0sWy4xNzY0NzEsXCJyZ2IoMzksNjMsMTA4KVwiXSxbLjIzNTI5NCxcInJnYig2MCw3NCwxMDcpXCJdLFsuMjk0MTE4LFwicmdiKDc2LDg1LDEwNylcIl0sWy4zNTI5NDEsXCJyZ2IoOTEsOTUsMTA5KVwiXSxbLjQxMTc2NSxcInJnYigxMDQsMTA2LDExMilcIl0sWy40NzA1ODgsXCJyZ2IoMTE3LDExNywxMTcpXCJdLFsuNTI5NDEyLFwicmdiKDEzMSwxMjksMTIwKVwiXSxbLjU4ODIzNSxcInJnYigxNDYsMTQwLDEyMClcIl0sWy42NDcwNTksXCJyZ2IoMTYxLDE1MiwxMTgpXCJdLFsuNzA1ODgyLFwicmdiKDE3NiwxNjUsMTE0KVwiXSxbLjc2NDcwNixcInJnYigxOTIsMTc3LDEwOSlcIl0sWy44MjM1MjksXCJyZ2IoMjA5LDE5MSwxMDIpXCJdLFsuODgyMzUzLFwicmdiKDIyNSwyMDQsOTIpXCJdLFsuOTQxMTc2LFwicmdiKDI0MywyMTksNzkpXCJdLFsxLFwicmdiKDI1NSwyMzMsNjkpXCJdXX0sYT1pLlJkQnU7ZnVuY3Rpb24gbyh0KXt2YXIgZT0wO2lmKCFBcnJheS5pc0FycmF5KHQpfHx0Lmxlbmd0aDwyKXJldHVybiExO2lmKCF0WzBdfHwhdFt0Lmxlbmd0aC0xXSlyZXR1cm4hMTtpZigwIT0rdFswXVswXXx8MSE9K3RbdC5sZW5ndGgtMV1bMF0pcmV0dXJuITE7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBpPXRbcl07aWYoMiE9PWkubGVuZ3RofHwraVswXTxlfHwhbihpWzFdKS5pc1ZhbGlkKCkpcmV0dXJuITE7ZT0raVswXX1yZXR1cm4hMH1lLmV4cG9ydHM9e3NjYWxlczppLGRlZmF1bHRTY2FsZTphLGdldDpmdW5jdGlvbih0LGUpe2lmKGV8fChlPWEpLCF0KXJldHVybiBlO2Z1bmN0aW9uIHIoKXt0cnl7dD1pW3RdfHxKU09OLnBhcnNlKHQpfWNhdGNoKHIpe3Q9ZX19cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQmJihyKCksXCJzdHJpbmdcIj09dHlwZW9mIHQmJnIoKSksbyh0KT90OmV9LGlzVmFsaWQ6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PWlbdF18fG8odCl9fX0se3Rpbnljb2xvcjI6NTIyfV0sNTk0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9KHQtcikvKG4tciksbz1hK2UvKG4tcikscz0oYStvKS8yO3JldHVyblwibGVmdFwiPT09aXx8XCJib3R0b21cIj09PWk/YTpcImNlbnRlclwiPT09aXx8XCJtaWRkbGVcIj09PWk/czpcInJpZ2h0XCI9PT1pfHxcInRvcFwiPT09aT9vOmE8Mi8zLXM/YTpvPjQvMy1zP286c319LHt9XSw1OTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9W1tcInN3LXJlc2l6ZVwiLFwicy1yZXNpemVcIixcInNlLXJlc2l6ZVwiXSxbXCJ3LXJlc2l6ZVwiLFwibW92ZVwiLFwiZS1yZXNpemVcIl0sW1wibnctcmVzaXplXCIsXCJuLXJlc2l6ZVwiLFwibmUtcmVzaXplXCJdXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7cmV0dXJuIHQ9XCJsZWZ0XCI9PT1yPzA6XCJjZW50ZXJcIj09PXI/MTpcInJpZ2h0XCI9PT1yPzI6bi5jb25zdHJhaW4oTWF0aC5mbG9vcigzKnQpLDAsMiksZT1cImJvdHRvbVwiPT09YT8wOlwibWlkZGxlXCI9PT1hPzE6XCJ0b3BcIj09PWE/MjpuLmNvbnN0cmFpbihNYXRoLmZsb29yKDMqZSksMCwyKSxpW2VdW3RdfX0se1wiLi4vLi4vbGliXCI6NzAxfV0sNTk2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIm1vdXNlLWV2ZW50LW9mZnNldFwiKSxpPXQoXCJoYXMtaG92ZXJcIiksYT10KFwiaGFzLXBhc3NpdmUtZXZlbnRzXCIpLG89dChcIi4uLy4uL2xpYlwiKS5yZW1vdmVFbGVtZW50LHM9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHNcIiksbD10KFwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9uc1wiKSxjPWUuZXhwb3J0cz17fTtjLmFsaWduPXQoXCIuL2FsaWduXCIpLGMuZ2V0Q3Vyc29yPXQoXCIuL2N1cnNvclwiKTt2YXIgdT10KFwiLi91bmhvdmVyXCIpO2Z1bmN0aW9uIGgoKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3QuY2xhc3NOYW1lPVwiZHJhZ2NvdmVyXCI7dmFyIGU9dC5zdHlsZTtyZXR1cm4gZS5wb3NpdGlvbj1cImZpeGVkXCIsZS5sZWZ0PTAsZS5yaWdodD0wLGUudG9wPTAsZS5ib3R0b209MCxlLnpJbmRleD05OTk5OTk5OTksZS5iYWNrZ3JvdW5kPVwibm9uZVwiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCksdH1mdW5jdGlvbiBmKHQpe3JldHVybiBuKHQuY2hhbmdlZFRvdWNoZXM/dC5jaGFuZ2VkVG91Y2hlc1swXTp0LGRvY3VtZW50LmJvZHkpfWMudW5ob3Zlcj11LndyYXBwZWQsYy51bmhvdmVyUmF3PXUucmF3LGMuaW5pdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4sdSxwLGQsZyx2LG09dC5nZCx5PTEseD1sLkRCTENMSUNLREVMQVksYj10LmVsZW1lbnQ7bS5fbW91c2VEb3duVGltZXx8KG0uX21vdXNlRG93blRpbWU9MCksYi5zdHlsZS5wb2ludGVyRXZlbnRzPVwiYWxsXCIsYi5vbm1vdXNlZG93bj13LGE/KGIuX29udG91Y2hzdGFydCYmYi5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLGIuX29udG91Y2hzdGFydCksYi5fb250b3VjaHN0YXJ0PXcsYi5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLHcse3Bhc3NpdmU6ITF9KSk6Yi5vbnRvdWNoc3RhcnQ9dzt2YXIgXz10LmNsYW1wRm58fGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gTWF0aC5hYnModCk8ciYmKHQ9MCksTWF0aC5hYnMoZSk8ciYmKGU9MCksW3QsZV19O2Z1bmN0aW9uIHcoYSl7bS5fZHJhZ2dlZD0hMSxtLl9kcmFnZ2luZz0hMDt2YXIgbz1mKGEpO2U9b1swXSxyPW9bMV0sZz1hLnRhcmdldCxkPWEsdj0yPT09YS5idXR0b25zfHxhLmN0cmxLZXksXCJ1bmRlZmluZWRcIj09dHlwZW9mIGEuY2xpZW50WCYmXCJ1bmRlZmluZWRcIj09dHlwZW9mIGEuY2xpZW50WSYmKGEuY2xpZW50WD1lLGEuY2xpZW50WT1yKSwobj0obmV3IERhdGUpLmdldFRpbWUoKSktbS5fbW91c2VEb3duVGltZTx4P3krPTE6KHk9MSxtLl9tb3VzZURvd25UaW1lPW4pLHQucHJlcEZuJiZ0LnByZXBGbihhLGUsciksaSYmIXY/KHA9aCgpKS5zdHlsZS5jdXJzb3I9d2luZG93LmdldENvbXB1dGVkU3R5bGUoYikuY3Vyc29yOml8fChwPWRvY3VtZW50LHU9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5jdXJzb3IsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmN1cnNvcj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShiKS5jdXJzb3IpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsQSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsQSksITEhPT10LmRyYWdtb2RlJiYoYS5wcmV2ZW50RGVmYXVsdCgpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixrKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsaykpfWZ1bmN0aW9uIGsobil7bi5wcmV2ZW50RGVmYXVsdCgpO3ZhciBpPWYobiksYT10Lm1pbkRyYWd8fHMuTUlORFJBRyxvPV8oaVswXS1lLGlbMV0tcixhKSxsPW9bMF0sdT1vWzFdOyhsfHx1KSYmKG0uX2RyYWdnZWQ9ITAsYy51bmhvdmVyKG0pKSxtLl9kcmFnZ2VkJiZ0Lm1vdmVGbiYmIXYmJihtLl9kcmFnZGF0YT17ZWxlbWVudDpiLGR4OmwsZHk6dX0sdC5tb3ZlRm4obCx1KSl9ZnVuY3Rpb24gQShlKXtpZihkZWxldGUgbS5fZHJhZ2RhdGEsITEhPT10LmRyYWdtb2RlJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixrKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsaykpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsQSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsQSksaT9vKHApOnUmJihwLmRvY3VtZW50RWxlbWVudC5zdHlsZS5jdXJzb3I9dSx1PW51bGwpLG0uX2RyYWdnaW5nKXtpZihtLl9kcmFnZ2luZz0hMSwobmV3IERhdGUpLmdldFRpbWUoKS1tLl9tb3VzZURvd25UaW1lPngmJih5PU1hdGgubWF4KHktMSwxKSksbS5fZHJhZ2dlZCl0LmRvbmVGbiYmdC5kb25lRm4oKTtlbHNlIGlmKHQuY2xpY2tGbiYmdC5jbGlja0ZuKHksZCksIXYpe3ZhciByO3RyeXtyPW5ldyBNb3VzZUV2ZW50KFwiY2xpY2tcIixlKX1jYXRjaCh0KXt2YXIgbj1mKGUpOyhyPWRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiTW91c2VFdmVudHNcIikpLmluaXRNb3VzZUV2ZW50KFwiY2xpY2tcIixlLmJ1YmJsZXMsZS5jYW5jZWxhYmxlLGUudmlldyxlLmRldGFpbCxlLnNjcmVlblgsZS5zY3JlZW5ZLG5bMF0sblsxXSxlLmN0cmxLZXksZS5hbHRLZXksZS5zaGlmdEtleSxlLm1ldGFLZXksZS5idXR0b24sZS5yZWxhdGVkVGFyZ2V0KX1nLmRpc3BhdGNoRXZlbnQocil9bS5fZHJhZ2dpbmc9ITEsbS5fZHJhZ2dlZD0hMX1lbHNlIG0uX2RyYWdnZWQ9ITF9fSxjLmNvdmVyU2xpcD1ofSx7XCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zXCI6Njc3LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50c1wiOjc1NSxcIi4vYWxpZ25cIjo1OTQsXCIuL2N1cnNvclwiOjU5NSxcIi4vdW5ob3ZlclwiOjU5NyxcImhhcy1ob3ZlclwiOjQwMyxcImhhcy1wYXNzaXZlLWV2ZW50c1wiOjQwNCxcIm1vdXNlLWV2ZW50LW9mZnNldFwiOjQyOX1dLDU5NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWIvZXZlbnRzXCIpLGk9dChcIi4uLy4uL2xpYi90aHJvdHRsZVwiKSxhPXQoXCIuLi8uLi9saWIvZ2V0X2dyYXBoX2RpdlwiKSxvPXQoXCIuLi9meC9jb25zdGFudHNcIikscz1lLmV4cG9ydHM9e307cy53cmFwcGVkPWZ1bmN0aW9uKHQsZSxyKXsodD1hKHQpKS5fZnVsbExheW91dCYmaS5jbGVhcih0Ll9mdWxsTGF5b3V0Ll91aWQrby5IT1ZFUklEKSxzLnJhdyh0LGUscil9LHMucmF3PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxpPXQuX2hvdmVyZGF0YTtlfHwoZT17fSksZS50YXJnZXQmJiExPT09bi50cmlnZ2VySGFuZGxlcih0LFwicGxvdGx5X2JlZm9yZWhvdmVyXCIsZSl8fChyLl9ob3ZlcmxheWVyLnNlbGVjdEFsbChcImdcIikucmVtb3ZlKCksci5faG92ZXJsYXllci5zZWxlY3RBbGwoXCJsaW5lXCIpLnJlbW92ZSgpLHIuX2hvdmVybGF5ZXIuc2VsZWN0QWxsKFwiY2lyY2xlXCIpLnJlbW92ZSgpLHQuX2hvdmVyZGF0YT12b2lkIDAsZS50YXJnZXQmJmkmJnQuZW1pdChcInBsb3RseV91bmhvdmVyXCIse2V2ZW50OmUscG9pbnRzOml9KSl9fSx7XCIuLi8uLi9saWIvZXZlbnRzXCI6NjkwLFwiLi4vLi4vbGliL2dldF9ncmFwaF9kaXZcIjo2OTcsXCIuLi8uLi9saWIvdGhyb3R0bGVcIjo3MjYsXCIuLi9meC9jb25zdGFudHNcIjo2MTF9XSw1OTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLmRhc2g9e3ZhbFR5cGU6XCJzdHJpbmdcIix2YWx1ZXM6W1wic29saWRcIixcImRvdFwiLFwiZGFzaFwiLFwibG9uZ2Rhc2hcIixcImRhc2hkb3RcIixcImxvbmdkYXNoZG90XCJdLGRmbHQ6XCJzb2xpZFwiLGVkaXRUeXBlOlwic3R5bGVcIn19LHt9XSw1OTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiZmFzdC1pc251bWVyaWNcIiksYT10KFwidGlueWNvbG9yMlwiKSxvPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxzPXQoXCIuLi9jb2xvclwiKSxsPXQoXCIuLi9jb2xvcnNjYWxlXCIpLGM9dChcIi4uLy4uL2xpYlwiKSx1PXQoXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIiksaD10KFwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIiksZj10KFwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiKS5MSU5FX1NQQUNJTkcscD10KFwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9uc1wiKS5ERVNFTEVDVERJTSxkPXQoXCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlc1wiKSxnPXQoXCIuLi8uLi90cmFjZXMvc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmNcIiksdj1lLmV4cG9ydHM9e307di5mb250PWZ1bmN0aW9uKHQsZSxyLG4pe2MuaXNQbGFpbk9iamVjdChlKSYmKG49ZS5jb2xvcixyPWUuc2l6ZSxlPWUuZmFtaWx5KSxlJiZ0LnN0eWxlKFwiZm9udC1mYW1pbHlcIixlKSxyKzEmJnQuc3R5bGUoXCJmb250LXNpemVcIixyK1wicHhcIiksbiYmdC5jYWxsKHMuZmlsbCxuKX0sdi5zZXRQb3NpdGlvbj1mdW5jdGlvbih0LGUscil7dC5hdHRyKFwieFwiLGUpLmF0dHIoXCJ5XCIscil9LHYuc2V0U2l6ZT1mdW5jdGlvbih0LGUscil7dC5hdHRyKFwid2lkdGhcIixlKS5hdHRyKFwiaGVpZ2h0XCIscil9LHYuc2V0UmVjdD1mdW5jdGlvbih0LGUscixuLGkpe3QuY2FsbCh2LnNldFBvc2l0aW9uLGUscikuY2FsbCh2LnNldFNpemUsbixpKX0sdi50cmFuc2xhdGVQb2ludD1mdW5jdGlvbih0LGUscixuKXt2YXIgYT1yLmMycCh0LngpLG89bi5jMnAodC55KTtyZXR1cm4hIShpKGEpJiZpKG8pJiZlLm5vZGUoKSkmJihcInRleHRcIj09PWUubm9kZSgpLm5vZGVOYW1lP2UuYXR0cihcInhcIixhKS5hdHRyKFwieVwiLG8pOmUuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK2ErXCIsXCIrbytcIilcIiksITApfSx2LnRyYW5zbGF0ZVBvaW50cz1mdW5jdGlvbih0LGUscil7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBpPW4uc2VsZWN0KHRoaXMpO3YudHJhbnNsYXRlUG9pbnQodCxpLGUscil9KX0sdi5oaWRlT3V0c2lkZVJhbmdlUG9pbnQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2UuYXR0cihcImRpc3BsYXlcIixyLmlzUHRXaXRoaW5SYW5nZSh0LGkpJiZuLmlzUHRXaXRoaW5SYW5nZSh0LGEpP251bGw6XCJub25lXCIpfSx2LmhpZGVPdXRzaWRlUmFuZ2VQb2ludHM9ZnVuY3Rpb24odCxlKXtpZihlLl9oYXNDbGlwT25BeGlzRmFsc2Upe3ZhciByPWUueGF4aXMsaT1lLnlheGlzO3QuZWFjaChmdW5jdGlvbihlKXt2YXIgYT1lWzBdLnRyYWNlLG89YS54Y2FsZW5kYXIscz1hLnljYWxlbmRhcixsPVwiYmFyXCI9PT1hLnR5cGU/XCIuYmFydGV4dFwiOlwid2F0ZXJmYWxsXCI9PT1hLnR5cGU/XCIuYmFydGV4dCwubGluZVwiOlwiLnBvaW50LC50ZXh0cG9pbnRcIjt0LnNlbGVjdEFsbChsKS5lYWNoKGZ1bmN0aW9uKHQpe3YuaGlkZU91dHNpZGVSYW5nZVBvaW50KHQsbi5zZWxlY3QodGhpcykscixpLG8scyl9KX0pfX0sdi5jcmlzcFJvdW5kPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSYmaShlKT90Ll9jb250ZXh0LnN0YXRpY1Bsb3Q/ZTplPDE/MTpNYXRoLnJvdW5kKGUpOnJ8fDB9LHYuc2luZ2xlTGluZVN0eWxlPWZ1bmN0aW9uKHQsZSxyLG4saSl7ZS5zdHlsZShcImZpbGxcIixcIm5vbmVcIik7dmFyIGE9KCgodHx8W10pWzBdfHx7fSkudHJhY2V8fHt9KS5saW5lfHx7fSxvPXJ8fGEud2lkdGh8fDAsbD1pfHxhLmRhc2h8fFwiXCI7cy5zdHJva2UoZSxufHxhLmNvbG9yKSx2LmRhc2hMaW5lKGUsbCxvKX0sdi5saW5lR3JvdXBTdHlsZT1mdW5jdGlvbih0LGUscixpKXt0LnN0eWxlKFwiZmlsbFwiLFwibm9uZVwiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBhPSgoKHR8fFtdKVswXXx8e30pLnRyYWNlfHx7fSkubGluZXx8e30sbz1lfHxhLndpZHRofHwwLGw9aXx8YS5kYXNofHxcIlwiO24uc2VsZWN0KHRoaXMpLmNhbGwocy5zdHJva2Uscnx8YS5jb2xvcikuY2FsbCh2LmRhc2hMaW5lLGwsbyl9KX0sdi5kYXNoTGluZT1mdW5jdGlvbih0LGUscil7cj0rcnx8MCxlPXYuZGFzaFN0eWxlKGUsciksdC5zdHlsZSh7XCJzdHJva2UtZGFzaGFycmF5XCI6ZSxcInN0cm9rZS13aWR0aFwiOnIrXCJweFwifSl9LHYuZGFzaFN0eWxlPWZ1bmN0aW9uKHQsZSl7ZT0rZXx8MTt2YXIgcj1NYXRoLm1heChlLDMpO3JldHVyblwic29saWRcIj09PXQ/dD1cIlwiOlwiZG90XCI9PT10P3Q9citcInB4LFwiK3IrXCJweFwiOlwiZGFzaFwiPT09dD90PTMqcitcInB4LFwiKzMqcitcInB4XCI6XCJsb25nZGFzaFwiPT09dD90PTUqcitcInB4LFwiKzUqcitcInB4XCI6XCJkYXNoZG90XCI9PT10P3Q9MypyK1wicHgsXCIrcitcInB4LFwiK3IrXCJweCxcIityK1wicHhcIjpcImxvbmdkYXNoZG90XCI9PT10JiYodD01KnIrXCJweCxcIisyKnIrXCJweCxcIityK1wicHgsXCIrMipyK1wicHhcIiksdH0sdi5zaW5nbGVGaWxsU3R5bGU9ZnVuY3Rpb24odCl7dmFyIGU9KCgobi5zZWxlY3QodC5ub2RlKCkpLmRhdGEoKVswXXx8W10pWzBdfHx7fSkudHJhY2V8fHt9KS5maWxsY29sb3I7ZSYmdC5jYWxsKHMuZmlsbCxlKX0sdi5maWxsR3JvdXBTdHlsZT1mdW5jdGlvbih0KXt0LnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsMCkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKTt0WzBdLnRyYWNlJiZlLmNhbGwocy5maWxsLHRbMF0udHJhY2UuZmlsbGNvbG9yKX0pfTt2YXIgbT10KFwiLi9zeW1ib2xfZGVmc1wiKTt2LnN5bWJvbE5hbWVzPVtdLHYuc3ltYm9sRnVuY3M9W10sdi5zeW1ib2xOZWVkTGluZXM9e30sdi5zeW1ib2xOb0RvdD17fSx2LnN5bWJvbE5vRmlsbD17fSx2LnN5bWJvbExpc3Q9W10sT2JqZWN0LmtleXMobSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1tW3RdO3Yuc3ltYm9sTGlzdD12LnN5bWJvbExpc3QuY29uY2F0KFtlLm4sdCxlLm4rMTAwLHQrXCItb3BlblwiXSksdi5zeW1ib2xOYW1lc1tlLm5dPXQsdi5zeW1ib2xGdW5jc1tlLm5dPWUuZixlLm5lZWRMaW5lJiYodi5zeW1ib2xOZWVkTGluZXNbZS5uXT0hMCksZS5ub0RvdD92LnN5bWJvbE5vRG90W2Uubl09ITA6di5zeW1ib2xMaXN0PXYuc3ltYm9sTGlzdC5jb25jYXQoW2UubisyMDAsdCtcIi1kb3RcIixlLm4rMzAwLHQrXCItb3Blbi1kb3RcIl0pLGUubm9GaWxsJiYodi5zeW1ib2xOb0ZpbGxbZS5uXT0hMCl9KTt2YXIgeT12LnN5bWJvbE5hbWVzLmxlbmd0aCx4PVwiTTAsMC41TDAuNSwwTDAsLTAuNUwtMC41LDBaXCI7ZnVuY3Rpb24gYih0LGUpe3ZhciByPXQlMTAwO3JldHVybiB2LnN5bWJvbEZ1bmNzW3JdKGUpKyh0Pj0yMDA/eDpcIlwiKX12LnN5bWJvbE51bWJlcj1mdW5jdGlvbih0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7dmFyIGU9MDt0LmluZGV4T2YoXCItb3BlblwiKT4wJiYoZT0xMDAsdD10LnJlcGxhY2UoXCItb3BlblwiLFwiXCIpKSx0LmluZGV4T2YoXCItZG90XCIpPjAmJihlKz0yMDAsdD10LnJlcGxhY2UoXCItZG90XCIsXCJcIikpLCh0PXYuc3ltYm9sTmFtZXMuaW5kZXhPZih0KSk+PTAmJih0Kz1lKX1yZXR1cm4gdCUxMDA+PXl8fHQ+PTQwMD8wOk1hdGguZmxvb3IoTWF0aC5tYXgodCwwKSl9O3ZhciBfPXt4MToxLHgyOjAseTE6MCx5MjowfSx3PXt4MTowLHgyOjAseTE6MSx5MjowfSxrPW4uZm9ybWF0KFwifi4xZlwiKSxBPXtyYWRpYWw6e25vZGU6XCJyYWRpYWxHcmFkaWVudFwifSxyYWRpYWxyZXZlcnNlZDp7bm9kZTpcInJhZGlhbEdyYWRpZW50XCIscmV2ZXJzZWQ6ITB9LGhvcml6b250YWw6e25vZGU6XCJsaW5lYXJHcmFkaWVudFwiLGF0dHJzOl99LGhvcml6b250YWxyZXZlcnNlZDp7bm9kZTpcImxpbmVhckdyYWRpZW50XCIsYXR0cnM6XyxyZXZlcnNlZDohMH0sdmVydGljYWw6e25vZGU6XCJsaW5lYXJHcmFkaWVudFwiLGF0dHJzOnd9LHZlcnRpY2FscmV2ZXJzZWQ6e25vZGU6XCJsaW5lYXJHcmFkaWVudFwiLGF0dHJzOncscmV2ZXJzZWQ6ITB9fTt2LmdyYWRpZW50PWZ1bmN0aW9uKHQsZSxyLGksbyxsKXtmb3IodmFyIHU9by5sZW5ndGgsaD1BW2ldLGY9bmV3IEFycmF5KHUpLHA9MDtwPHU7cCsrKWgucmV2ZXJzZWQ/Zlt1LTEtcF09W2soMTAwKigxLW9bcF1bMF0pKSxvW3BdWzFdXTpmW3BdPVtrKDEwMCpvW3BdWzBdKSxvW3BdWzFdXTt2YXIgZD1cImdcIitlLl9mdWxsTGF5b3V0Ll91aWQrXCItXCIrcixnPWUuX2Z1bGxMYXlvdXQuX2RlZnMuc2VsZWN0KFwiLmdyYWRpZW50c1wiKS5zZWxlY3RBbGwoXCIjXCIrZCkuZGF0YShbaStmLmpvaW4oXCI7XCIpXSxjLmlkZW50aXR5KTtnLmV4aXQoKS5yZW1vdmUoKSxnLmVudGVyKCkuYXBwZW5kKGgubm9kZSkuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO2guYXR0cnMmJnQuYXR0cihoLmF0dHJzKSx0LmF0dHIoXCJpZFwiLGQpO3ZhciBlPXQuc2VsZWN0QWxsKFwic3RvcFwiKS5kYXRhKGYpO2UuZXhpdCgpLnJlbW92ZSgpLGUuZW50ZXIoKS5hcHBlbmQoXCJzdG9wXCIpLGUuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1hKHRbMV0pO24uc2VsZWN0KHRoaXMpLmF0dHIoe29mZnNldDp0WzBdK1wiJVwiLFwic3RvcC1jb2xvclwiOnMudGlueVJHQihlKSxcInN0b3Atb3BhY2l0eVwiOmUuZ2V0QWxwaGEoKX0pfSl9KSx0LnN0eWxlKGwsRChkLGUpKS5zdHlsZShsK1wiLW9wYWNpdHlcIixudWxsKX0sdi5pbml0R3JhZGllbnRzPWZ1bmN0aW9uKHQpe2MuZW5zdXJlU2luZ2xlKHQuX2Z1bGxMYXlvdXQuX2RlZnMsXCJnXCIsXCJncmFkaWVudHNcIikuc2VsZWN0QWxsKFwibGluZWFyR3JhZGllbnQscmFkaWFsR3JhZGllbnRcIikucmVtb3ZlKCl9LHYucG9pbnRTdHlsZT1mdW5jdGlvbih0LGUscil7aWYodC5zaXplKCkpe3ZhciBpPXYubWFrZVBvaW50U3R5bGVGbnMoZSk7dC5lYWNoKGZ1bmN0aW9uKHQpe3Yuc2luZ2xlUG9pbnRTdHlsZSh0LG4uc2VsZWN0KHRoaXMpLGUsaSxyKX0pfX0sdi5zaW5nbGVQb2ludFN0eWxlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9ci5tYXJrZXIsbz1hLmxpbmU7aWYoZS5zdHlsZShcIm9wYWNpdHlcIixuLnNlbGVjdGVkT3BhY2l0eUZuP24uc2VsZWN0ZWRPcGFjaXR5Rm4odCk6dm9pZCAwPT09dC5tbz9hLm9wYWNpdHk6dC5tbyksbi5tczJtcmMpe3ZhciBsO2w9XCJ2YXJpb3VzXCI9PT10Lm1zfHxcInZhcmlvdXNcIj09PWEuc2l6ZT8zOm4ubXMybXJjKHQubXMpLHQubXJjPWwsbi5zZWxlY3RlZFNpemVGbiYmKGw9dC5tcmM9bi5zZWxlY3RlZFNpemVGbih0KSk7dmFyIHU9di5zeW1ib2xOdW1iZXIodC5teHx8YS5zeW1ib2wpfHwwO3Qub209dSUyMDA+PTEwMCxlLmF0dHIoXCJkXCIsYih1LGwpKX12YXIgaCxmLHAsZD0hMTtpZih0LnNvKXA9by5vdXRsaWVyd2lkdGgsZj1vLm91dGxpZXJjb2xvcixoPWEub3V0bGllcmNvbG9yO2Vsc2V7dmFyIGc9KG98fHt9KS53aWR0aDtwPSh0Lm1sdysxfHxnKzF8fCh0LnRyYWNlPyh0LnRyYWNlLm1hcmtlci5saW5lfHx7fSkud2lkdGg6MCkrMSktMXx8MCxmPVwibWxjXCJpbiB0P3QubWxjYz1uLmxpbmVTY2FsZSh0Lm1sYyk6Yy5pc0FycmF5T3JUeXBlZEFycmF5KG8uY29sb3IpP3MuZGVmYXVsdExpbmU6by5jb2xvcixjLmlzQXJyYXlPclR5cGVkQXJyYXkoYS5jb2xvcikmJihoPXMuZGVmYXVsdExpbmUsZD0hMCksaD1cIm1jXCJpbiB0P3QubWNjPW4ubWFya2VyU2NhbGUodC5tYyk6YS5jb2xvcnx8XCJyZ2JhKDAsMCwwLDApXCIsbi5zZWxlY3RlZENvbG9yRm4mJihoPW4uc2VsZWN0ZWRDb2xvckZuKHQpKX1pZih0Lm9tKWUuY2FsbChzLnN0cm9rZSxoKS5zdHlsZSh7XCJzdHJva2Utd2lkdGhcIjoocHx8MSkrXCJweFwiLGZpbGw6XCJub25lXCJ9KTtlbHNle2Uuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixwK1wicHhcIik7dmFyIG09YS5ncmFkaWVudCx5PXQubWd0O2lmKHk/ZD0hMDp5PW0mJm0udHlwZSxBcnJheS5pc0FycmF5KHkpJiYoeT15WzBdLEFbeV18fCh5PTApKSx5JiZcIm5vbmVcIiE9PXkpe3ZhciB4PXQubWdjO3g/ZD0hMDp4PW0uY29sb3I7dmFyIF89ci51aWQ7ZCYmKF8rPVwiLVwiK3QuaSksdi5ncmFkaWVudChlLGksXyx5LFtbMCx4XSxbMSxoXV0sXCJmaWxsXCIpfWVsc2Ugcy5maWxsKGUsaCk7cCYmcy5zdHJva2UoZSxmKX19LHYubWFrZVBvaW50U3R5bGVGbnM9ZnVuY3Rpb24odCl7dmFyIGU9e30scj10Lm1hcmtlcjtyZXR1cm4gZS5tYXJrZXJTY2FsZT12LnRyeUNvbG9yc2NhbGUocixcIlwiKSxlLmxpbmVTY2FsZT12LnRyeUNvbG9yc2NhbGUocixcImxpbmVcIiksby50cmFjZUlzKHQsXCJzeW1ib2xzXCIpJiYoZS5tczJtcmM9ZC5pc0J1YmJsZSh0KT9nKHQpOmZ1bmN0aW9uKCl7cmV0dXJuKHIuc2l6ZXx8NikvMn0pLHQuc2VsZWN0ZWRwb2ludHMmJmMuZXh0ZW5kRmxhdChlLHYubWFrZVNlbGVjdGVkUG9pbnRTdHlsZUZucyh0KSksZX0sdi5tYWtlU2VsZWN0ZWRQb2ludFN0eWxlRm5zPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LHI9dC5zZWxlY3RlZHx8e30sbj10LnVuc2VsZWN0ZWR8fHt9LGk9dC5tYXJrZXJ8fHt9LGE9ci5tYXJrZXJ8fHt9LHM9bi5tYXJrZXJ8fHt9LGw9aS5vcGFjaXR5LHU9YS5vcGFjaXR5LGg9cy5vcGFjaXR5LGY9dm9pZCAwIT09dSxkPXZvaWQgMCE9PWg7KGMuaXNBcnJheU9yVHlwZWRBcnJheShsKXx8Znx8ZCkmJihlLnNlbGVjdGVkT3BhY2l0eUZuPWZ1bmN0aW9uKHQpe3ZhciBlPXZvaWQgMD09PXQubW8/aS5vcGFjaXR5OnQubW87cmV0dXJuIHQuc2VsZWN0ZWQ/Zj91OmU6ZD9oOnAqZX0pO3ZhciBnPWkuY29sb3Isdj1hLmNvbG9yLG09cy5jb2xvcjsodnx8bSkmJihlLnNlbGVjdGVkQ29sb3JGbj1mdW5jdGlvbih0KXt2YXIgZT10Lm1jY3x8ZztyZXR1cm4gdC5zZWxlY3RlZD92fHxlOm18fGV9KTt2YXIgeT1pLnNpemUseD1hLnNpemUsYj1zLnNpemUsXz12b2lkIDAhPT14LHc9dm9pZCAwIT09YjtyZXR1cm4gby50cmFjZUlzKHQsXCJzeW1ib2xzXCIpJiYoX3x8dykmJihlLnNlbGVjdGVkU2l6ZUZuPWZ1bmN0aW9uKHQpe3ZhciBlPXQubXJjfHx5LzI7cmV0dXJuIHQuc2VsZWN0ZWQ/Xz94LzI6ZTp3P2IvMjplfSksZX0sdi5tYWtlU2VsZWN0ZWRUZXh0U3R5bGVGbnM9ZnVuY3Rpb24odCl7dmFyIGU9e30scj10LnNlbGVjdGVkfHx7fSxuPXQudW5zZWxlY3RlZHx8e30saT10LnRleHRmb250fHx7fSxhPXIudGV4dGZvbnR8fHt9LG89bi50ZXh0Zm9udHx8e30sbD1pLmNvbG9yLGM9YS5jb2xvcix1PW8uY29sb3I7cmV0dXJuIGUuc2VsZWN0ZWRUZXh0Q29sb3JGbj1mdW5jdGlvbih0KXt2YXIgZT10LnRjfHxsO3JldHVybiB0LnNlbGVjdGVkP2N8fGU6dXx8KGM/ZTpzLmFkZE9wYWNpdHkoZSxwKSl9LGV9LHYuc2VsZWN0ZWRQb2ludFN0eWxlPWZ1bmN0aW9uKHQsZSl7aWYodC5zaXplKCkmJmUuc2VsZWN0ZWRwb2ludHMpe3ZhciByPXYubWFrZVNlbGVjdGVkUG9pbnRTdHlsZUZucyhlKSxpPWUubWFya2VyfHx7fSxhPVtdO3Iuc2VsZWN0ZWRPcGFjaXR5Rm4mJmEucHVzaChmdW5jdGlvbih0LGUpe3Quc3R5bGUoXCJvcGFjaXR5XCIsci5zZWxlY3RlZE9wYWNpdHlGbihlKSl9KSxyLnNlbGVjdGVkQ29sb3JGbiYmYS5wdXNoKGZ1bmN0aW9uKHQsZSl7cy5maWxsKHQsci5zZWxlY3RlZENvbG9yRm4oZSkpfSksci5zZWxlY3RlZFNpemVGbiYmYS5wdXNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5teHx8aS5zeW1ib2x8fDAsYT1yLnNlbGVjdGVkU2l6ZUZuKGUpO3QuYXR0cihcImRcIixiKHYuc3ltYm9sTnVtYmVyKG4pLGEpKSxlLm1yYzI9YX0pLGEubGVuZ3RoJiZ0LmVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciBlPW4uc2VsZWN0KHRoaXMpLHI9MDtyPGEubGVuZ3RoO3IrKylhW3JdKGUsdCl9KX19LHYudHJ5Q29sb3JzY2FsZT1mdW5jdGlvbih0LGUpe3ZhciByPWU/Yy5uZXN0ZWRQcm9wZXJ0eSh0LGUpLmdldCgpOnQ7aWYocil7dmFyIG49ci5jb2xvcnNjYWxlLGk9ci5jb2xvcjtpZihuJiZjLmlzQXJyYXlPclR5cGVkQXJyYXkoaSkpcmV0dXJuIGwubWFrZUNvbG9yU2NhbGVGdW5jKGwuZXh0cmFjdFNjYWxlKHIse2NMZXR0ZXI6XCJjXCJ9KSl9cmV0dXJuIGMuaWRlbnRpdHl9O3ZhciBUPXtzdGFydDoxLGVuZDotMSxtaWRkbGU6MCxib3R0b206MSx0b3A6LTF9O2Z1bmN0aW9uIE0odCxlLHIsaSl7dmFyIGE9bi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSksbz0tMSE9PWUuaW5kZXhPZihcInRvcFwiKT9cInRvcFwiOi0xIT09ZS5pbmRleE9mKFwiYm90dG9tXCIpP1wiYm90dG9tXCI6XCJtaWRkbGVcIixzPS0xIT09ZS5pbmRleE9mKFwibGVmdFwiKT9cImVuZFwiOi0xIT09ZS5pbmRleE9mKFwicmlnaHRcIik/XCJzdGFydFwiOlwibWlkZGxlXCIsbD1pP2kvLjgrMTowLGM9KHUubGluZUNvdW50KHQpLTEpKmYrMSxoPVRbc10qbCxwPS43NSpyK1Rbb10qbCsoVFtvXS0xKSpjKnIvMjt0LmF0dHIoXCJ0ZXh0LWFuY2hvclwiLHMpLGEuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK2grXCIsXCIrcCtcIilcIil9ZnVuY3Rpb24gUyh0LGUpe3ZhciByPXQudHN8fGUudGV4dGZvbnQuc2l6ZTtyZXR1cm4gaShyKSYmcj4wP3I6MH12LnRleHRQb2ludFN0eWxlPWZ1bmN0aW9uKHQsZSxyKXtpZih0LnNpemUoKSl7dmFyIGk7aWYoZS5zZWxlY3RlZHBvaW50cyl7dmFyIGE9di5tYWtlU2VsZWN0ZWRUZXh0U3R5bGVGbnMoZSk7aT1hLnNlbGVjdGVkVGV4dENvbG9yRm59dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBhPW4uc2VsZWN0KHRoaXMpLG89Yy5leHRyYWN0T3B0aW9uKHQsZSxcInR4XCIsXCJ0ZXh0XCIpO2lmKG98fDA9PT1vKXt2YXIgcz10LnRwfHxlLnRleHRwb3NpdGlvbixsPVModCxlKSxoPWk/aSh0KTp0LnRjfHxlLnRleHRmb250LmNvbG9yO2EuY2FsbCh2LmZvbnQsdC50Znx8ZS50ZXh0Zm9udC5mYW1pbHksbCxoKS50ZXh0KG8pLmNhbGwodS5jb252ZXJ0VG9Uc3BhbnMscikuY2FsbChNLHMsbCx0Lm1yYyl9ZWxzZSBhLnJlbW92ZSgpfSl9fSx2LnNlbGVjdGVkVGV4dFN0eWxlPWZ1bmN0aW9uKHQsZSl7aWYodC5zaXplKCkmJmUuc2VsZWN0ZWRwb2ludHMpe3ZhciByPXYubWFrZVNlbGVjdGVkVGV4dFN0eWxlRm5zKGUpO3QuZWFjaChmdW5jdGlvbih0KXt2YXIgaT1uLnNlbGVjdCh0aGlzKSxhPXIuc2VsZWN0ZWRUZXh0Q29sb3JGbih0KSxvPXQudHB8fGUudGV4dHBvc2l0aW9uLGw9Uyh0LGUpO3MuZmlsbChpLGEpLE0oaSxvLGwsdC5tcmMyfHx0Lm1yYyl9KX19O3ZhciBFPS41O2Z1bmN0aW9uIEModCxlLHIsaSl7dmFyIGE9dFswXS1lWzBdLG89dFsxXS1lWzFdLHM9clswXS1lWzBdLGw9clsxXS1lWzFdLGM9TWF0aC5wb3coYSphK28qbyxFLzIpLHU9TWF0aC5wb3cocypzK2wqbCxFLzIpLGg9KHUqdSphLWMqYypzKSppLGY9KHUqdSpvLWMqYypsKSppLHA9Myp1KihjK3UpLGQ9MypjKihjK3UpO3JldHVybltbbi5yb3VuZChlWzBdKyhwJiZoL3ApLDIpLG4ucm91bmQoZVsxXSsocCYmZi9wKSwyKV0sW24ucm91bmQoZVswXS0oZCYmaC9kKSwyKSxuLnJvdW5kKGVbMV0tKGQmJmYvZCksMildXX12LnNtb290aG9wZW49ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwzKXJldHVyblwiTVwiK3Quam9pbihcIkxcIik7dmFyIHIsbj1cIk1cIit0WzBdLGk9W107Zm9yKHI9MTtyPHQubGVuZ3RoLTE7cisrKWkucHVzaChDKHRbci0xXSx0W3JdLHRbcisxXSxlKSk7Zm9yKG4rPVwiUVwiK2lbMF1bMF0rXCIgXCIrdFsxXSxyPTI7cjx0Lmxlbmd0aC0xO3IrKyluKz1cIkNcIitpW3ItMl1bMV0rXCIgXCIraVtyLTFdWzBdK1wiIFwiK3Rbcl07cmV0dXJuIG4rPVwiUVwiK2lbdC5sZW5ndGgtM11bMV0rXCIgXCIrdFt0Lmxlbmd0aC0xXX0sdi5zbW9vdGhjbG9zZWQ9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwzKXJldHVyblwiTVwiK3Quam9pbihcIkxcIikrXCJaXCI7dmFyIHIsbj1cIk1cIit0WzBdLGk9dC5sZW5ndGgtMSxhPVtDKHRbaV0sdFswXSx0WzFdLGUpXTtmb3Iocj0xO3I8aTtyKyspYS5wdXNoKEModFtyLTFdLHRbcl0sdFtyKzFdLGUpKTtmb3IoYS5wdXNoKEModFtpLTFdLHRbaV0sdFswXSxlKSkscj0xO3I8PWk7cisrKW4rPVwiQ1wiK2Fbci0xXVsxXStcIiBcIithW3JdWzBdK1wiIFwiK3Rbcl07cmV0dXJuIG4rPVwiQ1wiK2FbaV1bMV0rXCIgXCIrYVswXVswXStcIiBcIit0WzBdK1wiWlwifTt2YXIgTD17aHY6ZnVuY3Rpb24odCxlKXtyZXR1cm5cIkhcIituLnJvdW5kKGVbMF0sMikrXCJWXCIrbi5yb3VuZChlWzFdLDIpfSx2aDpmdW5jdGlvbih0LGUpe3JldHVyblwiVlwiK24ucm91bmQoZVsxXSwyKStcIkhcIituLnJvdW5kKGVbMF0sMil9LGh2aDpmdW5jdGlvbih0LGUpe3JldHVyblwiSFwiK24ucm91bmQoKHRbMF0rZVswXSkvMiwyKStcIlZcIituLnJvdW5kKGVbMV0sMikrXCJIXCIrbi5yb3VuZChlWzBdLDIpfSx2aHY6ZnVuY3Rpb24odCxlKXtyZXR1cm5cIlZcIituLnJvdW5kKCh0WzFdK2VbMV0pLzIsMikrXCJIXCIrbi5yb3VuZChlWzBdLDIpK1wiVlwiK24ucm91bmQoZVsxXSwyKX19LHo9ZnVuY3Rpb24odCxlKXtyZXR1cm5cIkxcIituLnJvdW5kKGVbMF0sMikrXCIsXCIrbi5yb3VuZChlWzFdLDIpfTt2LnN0ZXBzPWZ1bmN0aW9uKHQpe3ZhciBlPUxbdF18fHo7cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1cIk1cIituLnJvdW5kKHRbMF1bMF0sMikrXCIsXCIrbi5yb3VuZCh0WzBdWzFdLDIpLGk9MTtpPHQubGVuZ3RoO2krKylyKz1lKHRbaS0xXSx0W2ldKTtyZXR1cm4gcn19LHYubWFrZVRlc3Rlcj1mdW5jdGlvbigpe3ZhciB0PWMuZW5zdXJlU2luZ2xlQnlJZChuLnNlbGVjdChcImJvZHlcIiksXCJzdmdcIixcImpzLXBsb3RseS10ZXN0ZXJcIixmdW5jdGlvbih0KXt0LmF0dHIoaC5zdmdBdHRycykuc3R5bGUoe3Bvc2l0aW9uOlwiYWJzb2x1dGVcIixsZWZ0OlwiLTEwMDAwcHhcIix0b3A6XCItMTAwMDBweFwiLHdpZHRoOlwiOTAwMHB4XCIsaGVpZ2h0OlwiOTAwMHB4XCIsXCJ6LWluZGV4XCI6XCIxXCJ9KX0pLGU9Yy5lbnN1cmVTaW5nbGUodCxcInBhdGhcIixcImpzLXJlZmVyZW5jZS1wb2ludFwiLGZ1bmN0aW9uKHQpe3QuYXR0cihcImRcIixcIk0wLDBIMVYxSDBaXCIpLnN0eWxlKHtcInN0cm9rZS13aWR0aFwiOjAsZmlsbDpcImJsYWNrXCJ9KX0pO3YudGVzdGVyPXQsdi50ZXN0cmVmPWV9LHYuc2F2ZWRCQm94ZXM9e307dmFyIE89MDtmdW5jdGlvbiBJKHQpe3ZhciBlPXQuZ2V0QXR0cmlidXRlKFwiZGF0YS11bmZvcm1hdHRlZFwiKTtpZihudWxsIT09ZSlyZXR1cm4gZSt0LmdldEF0dHJpYnV0ZShcImRhdGEtbWF0aFwiKSt0LmdldEF0dHJpYnV0ZShcInRleHQtYW5jaG9yXCIpK3QuZ2V0QXR0cmlidXRlKFwic3R5bGVcIil9ZnVuY3Rpb24gRCh0LGUpe2lmKCF0KXJldHVybiBudWxsO3ZhciByPWUuX2NvbnRleHQ7cmV0dXJuXCJ1cmwoJ1wiKyhyLl9leHBvcnRlZFBsb3Q/XCJcIjpyLl9iYXNlVXJsfHxcIlwiKStcIiNcIit0K1wiJylcIn12LmJCb3g9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEsbztpZihyfHwocj1JKHQpKSxyKXtpZihpPXYuc2F2ZWRCQm94ZXNbcl0pcmV0dXJuIGMuZXh0ZW5kRmxhdCh7fSxpKX1lbHNlIGlmKDE9PT10LmNoaWxkTm9kZXMubGVuZ3RoKXt2YXIgcz10LmNoaWxkTm9kZXNbMF07aWYocj1JKHMpKXt2YXIgbD0rcy5nZXRBdHRyaWJ1dGUoXCJ4XCIpfHwwLGg9K3MuZ2V0QXR0cmlidXRlKFwieVwiKXx8MCxmPXMuZ2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIpO2lmKCFmKXt2YXIgcD12LmJCb3gocywhMSxyKTtyZXR1cm4gbCYmKHAubGVmdCs9bCxwLnJpZ2h0Kz1sKSxoJiYocC50b3ArPWgscC5ib3R0b20rPWgpLHB9aWYocis9XCJ+XCIrbCtcIn5cIitoK1wiflwiK2YsaT12LnNhdmVkQkJveGVzW3JdKXJldHVybiBjLmV4dGVuZEZsYXQoe30saSl9fWU/YT10OihvPXYudGVzdGVyLm5vZGUoKSxhPXQuY2xvbmVOb2RlKCEwKSxvLmFwcGVuZENoaWxkKGEpKSxuLnNlbGVjdChhKS5hdHRyKFwidHJhbnNmb3JtXCIsbnVsbCkuY2FsbCh1LnBvc2l0aW9uVGV4dCwwLDApO3ZhciBkPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZz12LnRlc3RyZWYubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2V8fG8ucmVtb3ZlQ2hpbGQoYSk7dmFyIG09e2hlaWdodDpkLmhlaWdodCx3aWR0aDpkLndpZHRoLGxlZnQ6ZC5sZWZ0LWcubGVmdCx0b3A6ZC50b3AtZy50b3AscmlnaHQ6ZC5yaWdodC1nLmxlZnQsYm90dG9tOmQuYm90dG9tLWcudG9wfTtyZXR1cm4gTz49MWU0JiYodi5zYXZlZEJCb3hlcz17fSxPPTApLHImJih2LnNhdmVkQkJveGVzW3JdPW0pLE8rKyxjLmV4dGVuZEZsYXQoe30sbSl9LHYuc2V0Q2xpcFVybD1mdW5jdGlvbih0LGUscil7dC5hdHRyKFwiY2xpcC1wYXRoXCIsRChlLHIpKX0sdi5nZXRUcmFuc2xhdGU9ZnVuY3Rpb24odCl7dmFyIGU9KHRbdC5hdHRyP1wiYXR0clwiOlwiZ2V0QXR0cmlidXRlXCJdKFwidHJhbnNmb3JtXCIpfHxcIlwiKS5yZXBsYWNlKC8uKlxcYnRyYW5zbGF0ZVxcKCgtP1xcZCpcXC4/XFxkKilbXi1cXGRdKigtP1xcZCpcXC4/XFxkKilbXlxcZF0uKi8sZnVuY3Rpb24odCxlLHIpe3JldHVybltlLHJdLmpvaW4oXCIgXCIpfSkuc3BsaXQoXCIgXCIpO3JldHVybnt4OitlWzBdfHwwLHk6K2VbMV18fDB9fSx2LnNldFRyYW5zbGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49dC5hdHRyP1wiYXR0clwiOlwiZ2V0QXR0cmlidXRlXCIsaT10LmF0dHI/XCJhdHRyXCI6XCJzZXRBdHRyaWJ1dGVcIixhPXRbbl0oXCJ0cmFuc2Zvcm1cIil8fFwiXCI7cmV0dXJuIGU9ZXx8MCxyPXJ8fDAsYT1hLnJlcGxhY2UoLyhcXGJ0cmFuc2xhdGVcXCguKj9cXCk7PykvLFwiXCIpLnRyaW0oKSxhPShhKz1cIiB0cmFuc2xhdGUoXCIrZStcIiwgXCIrcitcIilcIikudHJpbSgpLHRbaV0oXCJ0cmFuc2Zvcm1cIixhKSxhfSx2LmdldFNjYWxlPWZ1bmN0aW9uKHQpe3ZhciBlPSh0W3QuYXR0cj9cImF0dHJcIjpcImdldEF0dHJpYnV0ZVwiXShcInRyYW5zZm9ybVwiKXx8XCJcIikucmVwbGFjZSgvLipcXGJzY2FsZVxcKChcXGQqXFwuP1xcZCopW15cXGRdKihcXGQqXFwuP1xcZCopW15cXGRdLiovLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZSxyXS5qb2luKFwiIFwiKX0pLnNwbGl0KFwiIFwiKTtyZXR1cm57eDorZVswXXx8MSx5OitlWzFdfHwxfX0sdi5zZXRTY2FsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dC5hdHRyP1wiYXR0clwiOlwiZ2V0QXR0cmlidXRlXCIsaT10LmF0dHI/XCJhdHRyXCI6XCJzZXRBdHRyaWJ1dGVcIixhPXRbbl0oXCJ0cmFuc2Zvcm1cIil8fFwiXCI7cmV0dXJuIGU9ZXx8MSxyPXJ8fDEsYT1hLnJlcGxhY2UoLyhcXGJzY2FsZVxcKC4qP1xcKTs/KS8sXCJcIikudHJpbSgpLGE9KGErPVwiIHNjYWxlKFwiK2UrXCIsIFwiK3IrXCIpXCIpLnRyaW0oKSx0W2ldKFwidHJhbnNmb3JtXCIsYSksYX07dmFyIFA9L1xccypzYy4qLzt2LnNldFBvaW50R3JvdXBTY2FsZT1mdW5jdGlvbih0LGUscil7aWYoZT1lfHwxLHI9cnx8MSx0KXt2YXIgbj0xPT09ZSYmMT09PXI/XCJcIjpcIiBzY2FsZShcIitlK1wiLFwiK3IrXCIpXCI7dC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9KHRoaXMuZ2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIpfHxcIlwiKS5yZXBsYWNlKFAsXCJcIik7dD0odCs9bikudHJpbSgpLHRoaXMuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsdCl9KX19O3ZhciBSPS90cmFuc2xhdGVcXChbXildKlxcKVxccyokLzt2LnNldFRleHRQb2ludHNTY2FsZT1mdW5jdGlvbih0LGUscil7dCYmdC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQsaT1uLnNlbGVjdCh0aGlzKSxhPWkuc2VsZWN0KFwidGV4dFwiKTtpZihhLm5vZGUoKSl7dmFyIG89cGFyc2VGbG9hdChhLmF0dHIoXCJ4XCIpfHwwKSxzPXBhcnNlRmxvYXQoYS5hdHRyKFwieVwiKXx8MCksbD0oaS5hdHRyKFwidHJhbnNmb3JtXCIpfHxcIlwiKS5tYXRjaChSKTt0PTE9PT1lJiYxPT09cj9bXTpbXCJ0cmFuc2xhdGUoXCIrbytcIixcIitzK1wiKVwiLFwic2NhbGUoXCIrZStcIixcIityK1wiKVwiLFwidHJhbnNsYXRlKFwiKy1vK1wiLFwiKy1zK1wiKVwiXSxsJiZ0LnB1c2gobCksaS5hdHRyKFwidHJhbnNmb3JtXCIsdC5qb2luKFwiIFwiKSl9fSl9fSx7XCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCI6NjczLFwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9uc1wiOjY3NyxcIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzXCI6Njc5LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCI6NzI1LFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi8uLi90cmFjZXMvc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmNcIjoxMDY5LFwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi4vY29sb3JcIjo1NzgsXCIuLi9jb2xvcnNjYWxlXCI6NTkwLFwiLi9zeW1ib2xfZGVmc1wiOjYwMCxkMzoxNTUsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMix0aW55Y29sb3IyOjUyMn1dLDYwMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKTtlLmV4cG9ydHM9e2NpcmNsZTp7bjowLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVyblwiTVwiK2UrXCIsMEFcIitlK1wiLFwiK2UrXCIgMCAxLDEgMCwtXCIrZStcIkFcIitlK1wiLFwiK2UrXCIgMCAwLDEgXCIrZStcIiwwWlwifX0sc3F1YXJlOntuOjEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuXCJNXCIrZStcIixcIitlK1wiSC1cIitlK1wiVi1cIitlK1wiSFwiK2UrXCJaXCJ9fSxkaWFtb25kOntuOjIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMyp0LDIpO3JldHVyblwiTVwiK2UrXCIsMEwwLFwiK2UrXCJMLVwiK2UrXCIsMEwwLC1cIitlK1wiWlwifX0sY3Jvc3M6e246MyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjQqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuXCJNXCIrcitcIixcIitlK1wiSFwiK2UrXCJWXCIrcitcIkgtXCIrZStcIlZcIitlK1wiSC1cIityK1wiVi1cIitlK1wiSC1cIitlK1wiVi1cIityK1wiSFwiK2UrXCJWLVwiK2UrXCJIXCIrcitcIlpcIn19LHg6e246NCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjgqdC9NYXRoLnNxcnQoMiksMikscj1cImxcIitlK1wiLFwiK2UsaT1cImxcIitlK1wiLC1cIitlLGE9XCJsLVwiK2UrXCIsLVwiK2Usbz1cImwtXCIrZStcIixcIitlO3JldHVyblwiTTAsXCIrZStyK2krYStpK2ErbythK28rcitvK3IrXCJaXCJ9fSxcInRyaWFuZ2xlLXVwXCI6e246NSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0L01hdGguc3FydCgzKSwyKTtyZXR1cm5cIk0tXCIrZStcIixcIituLnJvdW5kKHQvMiwyKStcIkhcIitlK1wiTDAsLVwiK24ucm91bmQodCwyKStcIlpcIn19LFwidHJpYW5nbGUtZG93blwiOntuOjYsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdC9NYXRoLnNxcnQoMyksMik7cmV0dXJuXCJNLVwiK2UrXCIsLVwiK24ucm91bmQodC8yLDIpK1wiSFwiK2UrXCJMMCxcIituLnJvdW5kKHQsMikrXCJaXCJ9fSxcInRyaWFuZ2xlLWxlZnRcIjp7bjo3LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQvTWF0aC5zcXJ0KDMpLDIpO3JldHVyblwiTVwiK24ucm91bmQodC8yLDIpK1wiLC1cIitlK1wiVlwiK2UrXCJMLVwiK24ucm91bmQodCwyKStcIiwwWlwifX0sXCJ0cmlhbmdsZS1yaWdodFwiOntuOjgsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdC9NYXRoLnNxcnQoMyksMik7cmV0dXJuXCJNLVwiK24ucm91bmQodC8yLDIpK1wiLC1cIitlK1wiVlwiK2UrXCJMXCIrbi5yb3VuZCh0LDIpK1wiLDBaXCJ9fSxcInRyaWFuZ2xlLW5lXCI6e246OSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjYqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuXCJNLVwiK3IrXCIsLVwiK2UrXCJIXCIrZStcIlZcIityK1wiWlwifX0sXCJ0cmlhbmdsZS1zZVwiOntuOjEwLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNip0LDIpLHI9bi5yb3VuZCgxLjIqdCwyKTtyZXR1cm5cIk1cIitlK1wiLC1cIityK1wiVlwiK2UrXCJILVwiK3IrXCJaXCJ9fSxcInRyaWFuZ2xlLXN3XCI6e246MTEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC42KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVyblwiTVwiK3IrXCIsXCIrZStcIkgtXCIrZStcIlYtXCIrcitcIlpcIn19LFwidHJpYW5nbGUtbndcIjp7bjoxMixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjYqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuXCJNLVwiK2UrXCIsXCIrcitcIlYtXCIrZStcIkhcIityK1wiWlwifX0scGVudGFnb246e246MTMsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC45NTEqdCwyKSxyPW4ucm91bmQoLjU4OCp0LDIpLGk9bi5yb3VuZCgtdCwyKSxhPW4ucm91bmQoLS4zMDkqdCwyKTtyZXR1cm5cIk1cIitlK1wiLFwiK2ErXCJMXCIrcitcIixcIituLnJvdW5kKC44MDkqdCwyKStcIkgtXCIrcitcIkwtXCIrZStcIixcIithK1wiTDAsXCIraStcIlpcIn19LGhleGFnb246e246MTQsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMikscj1uLnJvdW5kKHQvMiwyKSxpPW4ucm91bmQodCpNYXRoLnNxcnQoMykvMiwyKTtyZXR1cm5cIk1cIitpK1wiLC1cIityK1wiVlwiK3IrXCJMMCxcIitlK1wiTC1cIitpK1wiLFwiK3IrXCJWLVwiK3IrXCJMMCwtXCIrZStcIlpcIn19LGhleGFnb24yOntuOjE1LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpLHI9bi5yb3VuZCh0LzIsMiksaT1uLnJvdW5kKHQqTWF0aC5zcXJ0KDMpLzIsMik7cmV0dXJuXCJNLVwiK3IrXCIsXCIraStcIkhcIityK1wiTFwiK2UrXCIsMExcIityK1wiLC1cIitpK1wiSC1cIityK1wiTC1cIitlK1wiLDBaXCJ9fSxvY3RhZ29uOntuOjE2LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguOTI0KnQsMikscj1uLnJvdW5kKC4zODMqdCwyKTtyZXR1cm5cIk0tXCIrcitcIiwtXCIrZStcIkhcIityK1wiTFwiK2UrXCIsLVwiK3IrXCJWXCIrcitcIkxcIityK1wiLFwiK2UrXCJILVwiK3IrXCJMLVwiK2UrXCIsXCIrcitcIlYtXCIrcitcIlpcIn19LHN0YXI6e246MTcsZjpmdW5jdGlvbih0KXt2YXIgZT0xLjQqdCxyPW4ucm91bmQoLjIyNSplLDIpLGk9bi5yb3VuZCguOTUxKmUsMiksYT1uLnJvdW5kKC4zNjMqZSwyKSxvPW4ucm91bmQoLjU4OCplLDIpLHM9bi5yb3VuZCgtZSwyKSxsPW4ucm91bmQoLS4zMDkqZSwyKSxjPW4ucm91bmQoLjExOCplLDIpLHU9bi5yb3VuZCguODA5KmUsMik7cmV0dXJuXCJNXCIrcitcIixcIitsK1wiSFwiK2krXCJMXCIrYStcIixcIitjK1wiTFwiK28rXCIsXCIrdStcIkwwLFwiK24ucm91bmQoLjM4MiplLDIpK1wiTC1cIitvK1wiLFwiK3UrXCJMLVwiK2ErXCIsXCIrYytcIkwtXCIraStcIixcIitsK1wiSC1cIityK1wiTDAsXCIrcytcIlpcIn19LGhleGFncmFtOntuOjE4LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNjYqdCwyKSxyPW4ucm91bmQoLjM4KnQsMiksaT1uLnJvdW5kKC43Nip0LDIpO3JldHVyblwiTS1cIitpK1wiLDBsLVwiK3IrXCIsLVwiK2UrXCJoXCIraStcImxcIityK1wiLC1cIitlK1wibFwiK3IrXCIsXCIrZStcImhcIitpK1wibC1cIityK1wiLFwiK2UrXCJsXCIrcitcIixcIitlK1wiaC1cIitpK1wibC1cIityK1wiLFwiK2UrXCJsLVwiK3IrXCIsLVwiK2UrXCJoLVwiK2krXCJaXCJ9fSxcInN0YXItdHJpYW5nbGUtdXBcIjp7bjoxOSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCpNYXRoLnNxcnQoMykqLjgsMikscj1uLnJvdW5kKC44KnQsMiksaT1uLnJvdW5kKDEuNip0LDIpLGE9bi5yb3VuZCg0KnQsMiksbz1cIkEgXCIrYStcIixcIithK1wiIDAgMCAxIFwiO3JldHVyblwiTS1cIitlK1wiLFwiK3IrbytlK1wiLFwiK3IrbytcIjAsLVwiK2krbytcIi1cIitlK1wiLFwiK3IrXCJaXCJ9fSxcInN0YXItdHJpYW5nbGUtZG93blwiOntuOjIwLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0Kk1hdGguc3FydCgzKSouOCwyKSxyPW4ucm91bmQoLjgqdCwyKSxpPW4ucm91bmQoMS42KnQsMiksYT1uLnJvdW5kKDQqdCwyKSxvPVwiQSBcIithK1wiLFwiK2ErXCIgMCAwIDEgXCI7cmV0dXJuXCJNXCIrZStcIiwtXCIrcitvK1wiLVwiK2UrXCIsLVwiK3IrbytcIjAsXCIraStvK2UrXCIsLVwiK3IrXCJaXCJ9fSxcInN0YXItc3F1YXJlXCI6e246MjEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMSp0LDIpLHI9bi5yb3VuZCgyKnQsMiksaT1cIkEgXCIrcitcIixcIityK1wiIDAgMCAxIFwiO3JldHVyblwiTS1cIitlK1wiLC1cIitlK2krXCItXCIrZStcIixcIitlK2krZStcIixcIitlK2krZStcIiwtXCIrZStpK1wiLVwiK2UrXCIsLVwiK2UrXCJaXCJ9fSxcInN0YXItZGlhbW9uZFwiOntuOjIyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjQqdCwyKSxyPW4ucm91bmQoMS45KnQsMiksaT1cIkEgXCIrcitcIixcIityK1wiIDAgMCAxIFwiO3JldHVyblwiTS1cIitlK1wiLDBcIitpK1wiMCxcIitlK2krZStcIiwwXCIraStcIjAsLVwiK2UraStcIi1cIitlK1wiLDBaXCJ9fSxcImRpYW1vbmQtdGFsbFwiOntuOjIzLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNyp0LDIpLHI9bi5yb3VuZCgxLjQqdCwyKTtyZXR1cm5cIk0wLFwiK3IrXCJMXCIrZStcIiwwTDAsLVwiK3IrXCJMLVwiK2UrXCIsMFpcIn19LFwiZGlhbW9uZC13aWRlXCI6e246MjQsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpLHI9bi5yb3VuZCguNyp0LDIpO3JldHVyblwiTTAsXCIrcitcIkxcIitlK1wiLDBMMCwtXCIrcitcIkwtXCIrZStcIiwwWlwifX0saG91cmdsYXNzOntuOjI1LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVyblwiTVwiK2UrXCIsXCIrZStcIkgtXCIrZStcIkxcIitlK1wiLC1cIitlK1wiSC1cIitlK1wiWlwifSxub0RvdDohMH0sYm93dGllOntuOjI2LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVyblwiTVwiK2UrXCIsXCIrZStcIlYtXCIrZStcIkwtXCIrZStcIixcIitlK1wiVi1cIitlK1wiWlwifSxub0RvdDohMH0sXCJjaXJjbGUtY3Jvc3NcIjp7bjoyNyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm5cIk0wLFwiK2UrXCJWLVwiK2UrXCJNXCIrZStcIiwwSC1cIitlK1wiTVwiK2UrXCIsMEFcIitlK1wiLFwiK2UrXCIgMCAxLDEgMCwtXCIrZStcIkFcIitlK1wiLFwiK2UrXCIgMCAwLDEgXCIrZStcIiwwWlwifSxuZWVkTGluZTohMCxub0RvdDohMH0sXCJjaXJjbGUteFwiOntuOjI4LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpLHI9bi5yb3VuZCh0L01hdGguc3FydCgyKSwyKTtyZXR1cm5cIk1cIityK1wiLFwiK3IrXCJMLVwiK3IrXCIsLVwiK3IrXCJNXCIrcitcIiwtXCIrcitcIkwtXCIrcitcIixcIityK1wiTVwiK2UrXCIsMEFcIitlK1wiLFwiK2UrXCIgMCAxLDEgMCwtXCIrZStcIkFcIitlK1wiLFwiK2UrXCIgMCAwLDEgXCIrZStcIiwwWlwifSxuZWVkTGluZTohMCxub0RvdDohMH0sXCJzcXVhcmUtY3Jvc3NcIjp7bjoyOSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm5cIk0wLFwiK2UrXCJWLVwiK2UrXCJNXCIrZStcIiwwSC1cIitlK1wiTVwiK2UrXCIsXCIrZStcIkgtXCIrZStcIlYtXCIrZStcIkhcIitlK1wiWlwifSxuZWVkTGluZTohMCxub0RvdDohMH0sXCJzcXVhcmUteFwiOntuOjMwLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVyblwiTVwiK2UrXCIsXCIrZStcIkwtXCIrZStcIiwtXCIrZStcIk1cIitlK1wiLC1cIitlK1wiTC1cIitlK1wiLFwiK2UrXCJNXCIrZStcIixcIitlK1wiSC1cIitlK1wiVi1cIitlK1wiSFwiK2UrXCJaXCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSxcImRpYW1vbmQtY3Jvc3NcIjp7bjozMSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4zKnQsMik7cmV0dXJuXCJNXCIrZStcIiwwTDAsXCIrZStcIkwtXCIrZStcIiwwTDAsLVwiK2UrXCJaTTAsLVwiK2UrXCJWXCIrZStcIk0tXCIrZStcIiwwSFwiK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSxcImRpYW1vbmQteFwiOntuOjMyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjMqdCwyKSxyPW4ucm91bmQoLjY1KnQsMik7cmV0dXJuXCJNXCIrZStcIiwwTDAsXCIrZStcIkwtXCIrZStcIiwwTDAsLVwiK2UrXCJaTS1cIityK1wiLC1cIityK1wiTFwiK3IrXCIsXCIrcitcIk0tXCIrcitcIixcIityK1wiTFwiK3IrXCIsLVwiK3J9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSxcImNyb3NzLXRoaW5cIjp7bjozMyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS40KnQsMik7cmV0dXJuXCJNMCxcIitlK1wiVi1cIitlK1wiTVwiK2UrXCIsMEgtXCIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSxcIngtdGhpblwiOntuOjM0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVyblwiTVwiK2UrXCIsXCIrZStcIkwtXCIrZStcIiwtXCIrZStcIk1cIitlK1wiLC1cIitlK1wiTC1cIitlK1wiLFwiK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sYXN0ZXJpc2s6e246MzUsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMip0LDIpLHI9bi5yb3VuZCguODUqdCwyKTtyZXR1cm5cIk0wLFwiK2UrXCJWLVwiK2UrXCJNXCIrZStcIiwwSC1cIitlK1wiTVwiK3IrXCIsXCIrcitcIkwtXCIrcitcIiwtXCIrcitcIk1cIityK1wiLC1cIityK1wiTC1cIityK1wiLFwiK3J9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0saGFzaDp7bjozNixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodC8yLDIpLHI9bi5yb3VuZCh0LDIpO3JldHVyblwiTVwiK2UrXCIsXCIrcitcIlYtXCIrcitcIm0tXCIrcitcIiwwVlwiK3IrXCJNXCIrcitcIixcIitlK1wiSC1cIityK1wibTAsLVwiK3IrXCJIXCIrcn0sbmVlZExpbmU6ITAsbm9GaWxsOiEwfSxcInktdXBcIjp7bjozNyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKDEuNip0LDIpLGk9bi5yb3VuZCguOCp0LDIpO3JldHVyblwiTS1cIitlK1wiLFwiK2krXCJMMCwwTVwiK2UrXCIsXCIraStcIkwwLDBNMCwtXCIrcitcIkwwLDBcIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSxcInktZG93blwiOntuOjM4LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjIqdCwyKSxyPW4ucm91bmQoMS42KnQsMiksaT1uLnJvdW5kKC44KnQsMik7cmV0dXJuXCJNLVwiK2UrXCIsLVwiK2krXCJMMCwwTVwiK2UrXCIsLVwiK2krXCJMMCwwTTAsXCIrcitcIkwwLDBcIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSxcInktbGVmdFwiOntuOjM5LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjIqdCwyKSxyPW4ucm91bmQoMS42KnQsMiksaT1uLnJvdW5kKC44KnQsMik7cmV0dXJuXCJNXCIraStcIixcIitlK1wiTDAsME1cIitpK1wiLC1cIitlK1wiTDAsME0tXCIrcitcIiwwTDAsMFwifSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LFwieS1yaWdodFwiOntuOjQwLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjIqdCwyKSxyPW4ucm91bmQoMS42KnQsMiksaT1uLnJvdW5kKC44KnQsMik7cmV0dXJuXCJNLVwiK2krXCIsXCIrZStcIkwwLDBNLVwiK2krXCIsLVwiK2UrXCJMMCwwTVwiK3IrXCIsMEwwLDBcIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSxcImxpbmUtZXdcIjp7bjo0MSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS40KnQsMik7cmV0dXJuXCJNXCIrZStcIiwwSC1cIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LFwibGluZS1uc1wiOntuOjQyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjQqdCwyKTtyZXR1cm5cIk0wLFwiK2UrXCJWLVwiK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sXCJsaW5lLW5lXCI6e246NDMsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuXCJNXCIrZStcIiwtXCIrZStcIkwtXCIrZStcIixcIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LFwibGluZS1ud1wiOntuOjQ0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVyblwiTVwiK2UrXCIsXCIrZStcIkwtXCIrZStcIiwtXCIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfX19LHtkMzoxNTV9XSw2MDE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e3Zpc2libGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHR5cGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInBlcmNlbnRcIixcImNvbnN0YW50XCIsXCJzcXJ0XCIsXCJkYXRhXCJdLGVkaXRUeXBlOlwiY2FsY1wifSxzeW1tZXRyaWM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGFycmF5Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxhcnJheW1pbnVzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx2YWx1ZTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MTAsZWRpdFR5cGU6XCJjYWxjXCJ9LHZhbHVlbWludXM6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjEwLGVkaXRUeXBlOlwiY2FsY1wifSx0cmFjZXJlZjp7dmFsVHlwZTpcImludGVnZXJcIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6XCJzdHlsZVwifSx0cmFjZXJlZm1pbnVzOnt2YWxUeXBlOlwiaW50ZWdlclwiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTpcInN0eWxlXCJ9LGNvcHlfeXN0eWxlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGVkaXRUeXBlOlwicGxvdFwifSxjb3B5X3pzdHlsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixlZGl0VHlwZTpcInN0eWxlXCJ9LGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcInN0eWxlXCJ9LHRoaWNrbmVzczp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MixlZGl0VHlwZTpcInN0eWxlXCJ9LHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZWRpdFR5cGU6XCJwbG90XCJ9LGVkaXRUeXBlOlwiY2FsY1wiLF9kZXByZWNhdGVkOntvcGFjaXR5Ont2YWxUeXBlOlwibnVtYmVyXCIsZWRpdFR5cGU6XCJzdHlsZVwifX19fSx7fV0sNjAyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGE9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLG89dChcIi4uLy4uL2xpYlwiKSxzPXQoXCIuL2NvbXB1dGVfZXJyb3JcIik7ZnVuY3Rpb24gbCh0LGUscixpKXt2YXIgbD1lW1wiZXJyb3JfXCIraV18fHt9LGM9W107aWYobC52aXNpYmxlJiYtMSE9PVtcImxpbmVhclwiLFwibG9nXCJdLmluZGV4T2Yoci50eXBlKSl7Zm9yKHZhciB1PXMobCksaD0wO2g8dC5sZW5ndGg7aCsrKXt2YXIgZj10W2hdLHA9Zi5pO2lmKHZvaWQgMD09PXApcD1oO2Vsc2UgaWYobnVsbD09PXApY29udGludWU7dmFyIGQ9ZltpXTtpZihuKHIuYzJsKGQpKSl7dmFyIGc9dShkLHApO2lmKG4oZ1swXSkmJm4oZ1sxXSkpe3ZhciB2PWZbaStcInNcIl09ZC1nWzBdLG09ZltpK1wiaFwiXT1kK2dbMV07Yy5wdXNoKHYsbSl9fX12YXIgeT1yLl9pZCx4PWUuX2V4dHJlbWVzW3ldLGI9YS5maW5kRXh0cmVtZXMocixjLG8uZXh0ZW5kRmxhdCh7dG96ZXJvOngub3B0cy50b3plcm99LHtwYWRkZWQ6ITB9KSk7eC5taW49eC5taW4uY29uY2F0KGIubWluKSx4Lm1heD14Lm1heC5jb25jYXQoYi5tYXgpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuY2FsY2RhdGEscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdLG89blswXS50cmFjZTtpZighMD09PW8udmlzaWJsZSYmaS50cmFjZUlzKG8sXCJlcnJvckJhcnNPS1wiKSl7dmFyIHM9YS5nZXRGcm9tSWQodCxvLnhheGlzKSxjPWEuZ2V0RnJvbUlkKHQsby55YXhpcyk7bChuLG8scyxcInhcIiksbChuLG8sYyxcInlcIil9fX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2NvbXB1dGVfZXJyb3JcIjo2MDMsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDYwMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm5cInBlcmNlbnRcIj09PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKHQqZS8xMDApfTpcImNvbnN0YW50XCI9PT10P2Z1bmN0aW9uKCl7cmV0dXJuIE1hdGguYWJzKGUpfTpcInNxcnRcIj09PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydChNYXRoLmFicyh0KSl9OnZvaWQgMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC50eXBlLHI9dC5zeW1tZXRyaWM7aWYoXCJkYXRhXCI9PT1lKXt2YXIgaT10LmFycmF5fHxbXTtpZihyKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPStpW2VdO3JldHVybltyLHJdfTt2YXIgYT10LmFycmF5bWludXN8fFtdO3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPStpW2VdLG49K2FbZV07cmV0dXJuIGlzTmFOKHIpJiZpc05hTihuKT9bTmFOLE5hTl06W258fDAscnx8MF19fXZhciBvPW4oZSx0LnZhbHVlKSxzPW4oZSx0LnZhbHVlbWludXMpO3JldHVybiByfHx2b2lkIDA9PT10LnZhbHVlbWludXM/ZnVuY3Rpb24odCl7dmFyIGU9byh0KTtyZXR1cm5bZSxlXX06ZnVuY3Rpb24odCl7cmV0dXJuW3ModCksbyh0KV19fX0se31dLDYwNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxhPXQoXCIuLi8uLi9saWJcIiksbz10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKSxzPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe3ZhciBjPVwiZXJyb3JfXCIrbC5heGlzLHU9by5uZXdDb250YWluZXIoZSxjKSxoPXRbY118fHt9O2Z1bmN0aW9uIGYodCxlKXtyZXR1cm4gYS5jb2VyY2UoaCx1LHMsdCxlKX1pZighMSE9PWYoXCJ2aXNpYmxlXCIsdm9pZCAwIT09aC5hcnJheXx8dm9pZCAwIT09aC52YWx1ZXx8XCJzcXJ0XCI9PT1oLnR5cGUpKXt2YXIgcD1mKFwidHlwZVwiLFwiYXJyYXlcImluIGg/XCJkYXRhXCI6XCJwZXJjZW50XCIpLGQ9ITA7XCJzcXJ0XCIhPT1wJiYoZD1mKFwic3ltbWV0cmljXCIsISgoXCJkYXRhXCI9PT1wP1wiYXJyYXltaW51c1wiOlwidmFsdWVtaW51c1wiKWluIGgpKSksXCJkYXRhXCI9PT1wPyhmKFwiYXJyYXlcIiksZihcInRyYWNlcmVmXCIpLGR8fChmKFwiYXJyYXltaW51c1wiKSxmKFwidHJhY2VyZWZtaW51c1wiKSkpOlwicGVyY2VudFwiIT09cCYmXCJjb25zdGFudFwiIT09cHx8KGYoXCJ2YWx1ZVwiKSxkfHxmKFwidmFsdWVtaW51c1wiKSk7dmFyIGc9XCJjb3B5X1wiK2wuaW5oZXJpdCtcInN0eWxlXCI7aWYobC5pbmhlcml0KShlW1wiZXJyb3JfXCIrbC5pbmhlcml0XXx8e30pLnZpc2libGUmJmYoZywhKGguY29sb3J8fG4oaC50aGlja25lc3MpfHxuKGgud2lkdGgpKSk7bC5pbmhlcml0JiZ1W2ddfHwoZihcImNvbG9yXCIsciksZihcInRoaWNrbmVzc1wiKSxmKFwid2lkdGhcIixpLnRyYWNlSXMoZSxcImdsM2RcIik/MDo0KSl9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9hdHRyaWJ1dGVzXCI6NjAxLFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw2MDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGwsYT10KFwiLi9hdHRyaWJ1dGVzXCIpLG89e2Vycm9yX3g6bi5leHRlbmRGbGF0KHt9LGEpLGVycm9yX3k6bi5leHRlbmRGbGF0KHt9LGEpfTtkZWxldGUgby5lcnJvcl94LmNvcHlfenN0eWxlLGRlbGV0ZSBvLmVycm9yX3kuY29weV96c3R5bGUsZGVsZXRlIG8uZXJyb3JfeS5jb3B5X3lzdHlsZTt2YXIgcz17ZXJyb3JfeDpuLmV4dGVuZEZsYXQoe30sYSksZXJyb3JfeTpuLmV4dGVuZEZsYXQoe30sYSksZXJyb3JfejpuLmV4dGVuZEZsYXQoe30sYSl9O2RlbGV0ZSBzLmVycm9yX3guY29weV95c3R5bGUsZGVsZXRlIHMuZXJyb3JfeS5jb3B5X3lzdHlsZSxkZWxldGUgcy5lcnJvcl96LmNvcHlfeXN0eWxlLGRlbGV0ZSBzLmVycm9yX3ouY29weV96c3R5bGUsZS5leHBvcnRzPXttb2R1bGVUeXBlOlwiY29tcG9uZW50XCIsbmFtZTpcImVycm9yYmFyc1wiLHNjaGVtYTp7dHJhY2VzOntzY2F0dGVyOm8sYmFyOm8saGlzdG9ncmFtOm8sc2NhdHRlcjNkOmkocyxcImNhbGNcIixcIm5lc3RlZFwiKSxzY2F0dGVyZ2w6aShvLFwiY2FsY1wiLFwibmVzdGVkXCIpfX0sc3VwcGx5RGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIiksY2FsYzp0KFwiLi9jYWxjXCIpLG1ha2VDb21wdXRlRXJyb3I6dChcIi4vY29tcHV0ZV9lcnJvclwiKSxwbG90OnQoXCIuL3Bsb3RcIiksc3R5bGU6dChcIi4vc3R5bGVcIiksaG92ZXJJbmZvOmZ1bmN0aW9uKHQsZSxyKXsoZS5lcnJvcl95fHx7fSkudmlzaWJsZSYmKHIueWVycj10LnloLXQueSxlLmVycm9yX3kuc3ltbWV0cmljfHwoci55ZXJybmVnPXQueS10LnlzKSk7KGUuZXJyb3JfeHx8e30pLnZpc2libGUmJihyLnhlcnI9dC54aC10LngsZS5lcnJvcl94LnN5bW1ldHJpY3x8KHIueGVycm5lZz10LngtdC54cykpfX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuL2F0dHJpYnV0ZXNcIjo2MDEsXCIuL2NhbGNcIjo2MDIsXCIuL2NvbXB1dGVfZXJyb3JcIjo2MDMsXCIuL2RlZmF1bHRzXCI6NjA0LFwiLi9wbG90XCI6NjA2LFwiLi9zdHlsZVwiOjYwN31dLDYwNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxhPXQoXCIuLi9kcmF3aW5nXCIpLG89dChcIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXt2YXIgbD1yLnhheGlzLGM9ci55YXhpcyx1PXMmJnMuZHVyYXRpb24+MDtlLmVhY2goZnVuY3Rpb24oZSl7dmFyIGgsZj1lWzBdLnRyYWNlLHA9Zi5lcnJvcl94fHx7fSxkPWYuZXJyb3JfeXx8e307Zi5pZHMmJihoPWZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSk7dmFyIGc9by5oYXNNYXJrZXJzKGYpJiZmLm1hcmtlci5tYXhkaXNwbGF5ZWQ+MDtkLnZpc2libGV8fHAudmlzaWJsZXx8KGU9W10pO3ZhciB2PW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbChcImcuZXJyb3JiYXJcIikuZGF0YShlLGgpO2lmKHYuZXhpdCgpLnJlbW92ZSgpLGUubGVuZ3RoKXtwLnZpc2libGV8fHYuc2VsZWN0QWxsKFwicGF0aC54ZXJyb3JcIikucmVtb3ZlKCksZC52aXNpYmxlfHx2LnNlbGVjdEFsbChcInBhdGgueWVycm9yXCIpLnJlbW92ZSgpLHYuc3R5bGUoXCJvcGFjaXR5XCIsMSk7dmFyIG09di5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcImVycm9yYmFyXCIsITApO3UmJm0uc3R5bGUoXCJvcGFjaXR5XCIsMCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMuZHVyYXRpb24pLnN0eWxlKFwib3BhY2l0eVwiLDEpLGEuc2V0Q2xpcFVybCh2LHIubGF5ZXJDbGlwSWQsdCksdi5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXt4OmUuYzJwKHQueCkseTpyLmMycCh0LnkpfTt2b2lkIDAhPT10LnloJiYobi55aD1yLmMycCh0LnloKSxuLnlzPXIuYzJwKHQueXMpLGkobi55cyl8fChuLm5vWVM9ITAsbi55cz1yLmMycCh0LnlzLCEwKSkpO3ZvaWQgMCE9PXQueGgmJihuLnhoPWUuYzJwKHQueGgpLG4ueHM9ZS5jMnAodC54cyksaShuLnhzKXx8KG4ubm9YUz0hMCxuLnhzPWUuYzJwKHQueHMsITApKSk7cmV0dXJuIG59KHQsbCxjKTtpZighZ3x8dC52aXMpe3ZhciBhLG89ZS5zZWxlY3QoXCJwYXRoLnllcnJvclwiKTtpZihkLnZpc2libGUmJmkoci54KSYmaShyLnloKSYmaShyLnlzKSl7dmFyIGg9ZC53aWR0aDthPVwiTVwiKyhyLngtaCkrXCIsXCIrci55aCtcImhcIisyKmgrXCJtLVwiK2grXCIsMFZcIityLnlzLHIubm9ZU3x8KGErPVwibS1cIitoK1wiLDBoXCIrMipoKSwhby5zaXplKCk/bz1lLmFwcGVuZChcInBhdGhcIikuc3R5bGUoXCJ2ZWN0b3ItZWZmZWN0XCIsXCJub24tc2NhbGluZy1zdHJva2VcIikuY2xhc3NlZChcInllcnJvclwiLCEwKTp1JiYobz1vLnRyYW5zaXRpb24oKS5kdXJhdGlvbihzLmR1cmF0aW9uKS5lYXNlKHMuZWFzaW5nKSksby5hdHRyKFwiZFwiLGEpfWVsc2Ugby5yZW1vdmUoKTt2YXIgZj1lLnNlbGVjdChcInBhdGgueGVycm9yXCIpO2lmKHAudmlzaWJsZSYmaShyLnkpJiZpKHIueGgpJiZpKHIueHMpKXt2YXIgdj0ocC5jb3B5X3lzdHlsZT9kOnApLndpZHRoO2E9XCJNXCIrci54aCtcIixcIisoci55LXYpK1widlwiKzIqditcIm0wLC1cIit2K1wiSFwiK3IueHMsci5ub1hTfHwoYSs9XCJtMCwtXCIrditcInZcIisyKnYpLCFmLnNpemUoKT9mPWUuYXBwZW5kKFwicGF0aFwiKS5zdHlsZShcInZlY3Rvci1lZmZlY3RcIixcIm5vbi1zY2FsaW5nLXN0cm9rZVwiKS5jbGFzc2VkKFwieGVycm9yXCIsITApOnUmJihmPWYudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMuZHVyYXRpb24pLmVhc2Uocy5lYXNpbmcpKSxmLmF0dHIoXCJkXCIsYSl9ZWxzZSBmLnJlbW92ZSgpfX0pfX0pfX0se1wiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi4vZHJhd2luZ1wiOjU5OSxkMzoxNTUsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDYwNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi9jb2xvclwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1lLmVycm9yX3l8fHt9LGE9ZS5lcnJvcl94fHx7fSxvPW4uc2VsZWN0KHRoaXMpO28uc2VsZWN0QWxsKFwicGF0aC55ZXJyb3JcIikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixyLnRoaWNrbmVzcytcInB4XCIpLmNhbGwoaS5zdHJva2Usci5jb2xvciksYS5jb3B5X3lzdHlsZSYmKGE9ciksby5zZWxlY3RBbGwoXCJwYXRoLnhlcnJvclwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLGEudGhpY2tuZXNzK1wicHhcIikuY2FsbChpLnN0cm9rZSxhLmNvbG9yKX0pfX0se1wiLi4vY29sb3JcIjo1NzgsZDM6MTU1fV0sNjA4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiKSxpPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLmhvdmVybGFiZWwsYT10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17aG92ZXJsYWJlbDp7Ymdjb2xvcjphKHt9LGkuYmdjb2xvcix7YXJyYXlPazohMH0pLGJvcmRlcmNvbG9yOmEoe30saS5ib3JkZXJjb2xvcix7YXJyYXlPazohMH0pLGZvbnQ6bih7YXJyYXlPazohMCxlZGl0VHlwZTpcIm5vbmVcIn0pLGFsaWduOmEoe30saS5hbGlnbix7YXJyYXlPazohMH0pLG5hbWVsZW5ndGg6YSh7fSxpLm5hbWVsZW5ndGgse2FycmF5T2s6ITB9KSxlZGl0VHlwZTpcIm5vbmVcIn19fSx7XCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCI6Nzc1LFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjYxOH1dLDYwOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcmVnaXN0cnlcIik7ZnVuY3Rpb24gYSh0LGUscixpKXtpPWl8fG4uaWRlbnRpdHksQXJyYXkuaXNBcnJheSh0KSYmKGVbMF1bcl09aSh0KSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2FsY2RhdGEscj10Ll9mdWxsTGF5b3V0O2Z1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBuLmNvZXJjZUhvdmVyaW5mbyh7aG92ZXJpbmZvOmV9LHtfbW9kdWxlOnQuX21vZHVsZX0scil9fWZvcih2YXIgcz0wO3M8ZS5sZW5ndGg7cysrKXt2YXIgbD1lW3NdLGM9bFswXS50cmFjZTtpZighaS50cmFjZUlzKGMsXCJwaWVcIikpe3ZhciB1PWkudHJhY2VJcyhjLFwiMmRNYXBcIik/YTpuLmZpbGxBcnJheTt1KGMuaG92ZXJpbmZvLGwsXCJoaVwiLG8oYykpLGMuaG92ZXJ0ZW1wbGF0ZSYmdShjLmhvdmVydGVtcGxhdGUsbCxcImh0XCIpLGMuaG92ZXJsYWJlbCYmKHUoYy5ob3ZlcmxhYmVsLmJnY29sb3IsbCxcImhiZ1wiKSx1KGMuaG92ZXJsYWJlbC5ib3JkZXJjb2xvcixsLFwiaGJjXCIpLHUoYy5ob3ZlcmxhYmVsLmZvbnQuc2l6ZSxsLFwiaHRzXCIpLHUoYy5ob3ZlcmxhYmVsLmZvbnQuY29sb3IsbCxcImh0Y1wiKSx1KGMuaG92ZXJsYWJlbC5mb250LmZhbWlseSxsLFwiaHRmXCIpLHUoYy5ob3ZlcmxhYmVsLm5hbWVsZW5ndGgsbCxcImhubFwiKSx1KGMuaG92ZXJsYWJlbC5hbGlnbixsLFwiaHRhXCIpKX19fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4Mjl9XSw2MTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIiksaT10KFwiLi9ob3ZlclwiKS5ob3ZlcjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPW4uZ2V0Q29tcG9uZW50TWV0aG9kKFwiYW5ub3RhdGlvbnNcIixcIm9uQ2xpY2tcIikodCx0Ll9ob3ZlcmRhdGEpO2Z1bmN0aW9uIG8oKXt0LmVtaXQoXCJwbG90bHlfY2xpY2tcIix7cG9pbnRzOnQuX2hvdmVyZGF0YSxldmVudDplfSl9dm9pZCAwIT09ciYmaSh0LGUsciwhMCksdC5faG92ZXJkYXRhJiZlJiZlLnRhcmdldCYmKGEmJmEudGhlbj9hLnRoZW4obyk6bygpLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uJiZlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX19LHtcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9ob3ZlclwiOjYxNH1dLDYxMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17WUFOR0xFOjYwLEhPVkVSQVJST1dTSVpFOjYsSE9WRVJURVhUUEFEOjMsSE9WRVJGT05UU0laRToxMyxIT1ZFUkZPTlQ6XCJBcmlhbCwgc2Fucy1zZXJpZlwiLEhPVkVSTUlOVElNRTo1MCxIT1ZFUklEOlwiLWhvdmVyXCJ9fSx7fV0sNjEyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2F0dHJpYnV0ZXNcIiksYT10KFwiLi9ob3ZlcmxhYmVsX2RlZmF1bHRzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcz1uLmV4dGVuZEZsYXQoe30sby5ob3ZlcmxhYmVsKTtlLmhvdmVydGVtcGxhdGUmJihzLm5hbWVsZW5ndGg9LTEpLGEodCxlLGZ1bmN0aW9uKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9LHMpfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi9hdHRyaWJ1dGVzXCI6NjA4LFwiLi9ob3ZlcmxhYmVsX2RlZmF1bHRzXCI6NjE1fV0sNjEzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKTtyLmdldFN1YnBsb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3VicGxvdHx8dC54YXhpcyt0LnlheGlzfHx0Lmdlb30sci5pc1RyYWNlSW5TdWJwbG90cz1mdW5jdGlvbih0LGUpe2lmKFwic3Bsb21cIj09PXQudHlwZSl7Zm9yKHZhciBuPXQueGF4ZXN8fFtdLGk9dC55YXhlc3x8W10sYT0wO2E8bi5sZW5ndGg7YSsrKWZvcih2YXIgbz0wO288aS5sZW5ndGg7bysrKWlmKC0xIT09ZS5pbmRleE9mKG5bYV0raVtvXSkpcmV0dXJuITA7cmV0dXJuITF9cmV0dXJuLTEhPT1lLmluZGV4T2Yoci5nZXRTdWJwbG90KHQpKX0sci5mbGF0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aCksbj0wO248dC5sZW5ndGg7bisrKXJbbl09ZTtyZXR1cm4gcn0sci5wMmM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDtuKyspcltuXT10W25dLnAyYyhlKTtyZXR1cm4gcn0sci5nZXREaXN0YW5jZUZ1bmN0aW9uPWZ1bmN0aW9uKHQsZSxuLGkpe3JldHVyblwiY2xvc2VzdFwiPT09dD9pfHxyLnF1YWRyYXR1cmUoZSxuKTpcInhcIj09PXQ/ZTpufSxyLmdldENsb3Nlc3Q9ZnVuY3Rpb24odCxlLHIpe2lmKCExIT09ci5pbmRleClyLmluZGV4Pj0wJiZyLmluZGV4PHQubGVuZ3RoP3IuZGlzdGFuY2U9MDpyLmluZGV4PSExO2Vsc2UgZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPWUodFtuXSk7aTw9ci5kaXN0YW5jZSYmKHIuaW5kZXg9bixyLmRpc3RhbmNlPWkpfXJldHVybiByfSxyLmluYm94PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdCplPDB8fDA9PT10P3I6MS8wfSxyLnF1YWRyYXR1cmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49dChyKSxpPWUocik7cmV0dXJuIE1hdGguc3FydChuKm4raSppKX19LHIubWFrZUV2ZW50RGF0YT1mdW5jdGlvbih0LGUsbil7dmFyIGk9XCJpbmRleFwiaW4gdD90LmluZGV4OnQucG9pbnROdW1iZXIsYT17ZGF0YTplLl9pbnB1dCxmdWxsRGF0YTplLGN1cnZlTnVtYmVyOmUuaW5kZXgscG9pbnROdW1iZXI6aX07aWYoZS5faW5kZXhUb1BvaW50cyl7dmFyIG89ZS5faW5kZXhUb1BvaW50c1tpXTsxPT09by5sZW5ndGg/YS5wb2ludEluZGV4PW9bMF06YS5wb2ludEluZGljZXM9b31lbHNlIGEucG9pbnRJbmRleD1pO3JldHVybiBlLl9tb2R1bGUuZXZlbnREYXRhP2E9ZS5fbW9kdWxlLmV2ZW50RGF0YShhLHQsZSxuLGkpOihcInhWYWxcImluIHQ/YS54PXQueFZhbDpcInhcImluIHQmJihhLng9dC54KSxcInlWYWxcImluIHQ/YS55PXQueVZhbDpcInlcImluIHQmJihhLnk9dC55KSx0LnhhJiYoYS54YXhpcz10LnhhKSx0LnlhJiYoYS55YXhpcz10LnlhKSx2b2lkIDAhPT10LnpMYWJlbFZhbCYmKGEuej10LnpMYWJlbFZhbCkpLHIuYXBwZW5kQXJyYXlQb2ludFZhbHVlKGEsZSxpKSxhfSxyLmFwcGVuZEFycmF5UG9pbnRWYWx1ZT1mdW5jdGlvbih0LGUscil7dmFyIGk9ZS5fYXJyYXlBdHRycztpZihpKWZvcih2YXIgcz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbD1pW3NdLGM9YShsKTtpZih2b2lkIDA9PT10W2NdKXt2YXIgdT1vKG4ubmVzdGVkUHJvcGVydHkoZSxsKS5nZXQoKSxyKTt2b2lkIDAhPT11JiYodFtjXT11KX19fSxyLmFwcGVuZEFycmF5TXVsdGlQb2ludFZhbHVlcz1mdW5jdGlvbih0LGUscil7dmFyIGk9ZS5fYXJyYXlBdHRycztpZihpKWZvcih2YXIgcz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbD1pW3NdLGM9YShsKTtpZih2b2lkIDA9PT10W2NdKXtmb3IodmFyIHU9bi5uZXN0ZWRQcm9wZXJ0eShlLGwpLmdldCgpLGg9bmV3IEFycmF5KHIubGVuZ3RoKSxmPTA7ZjxyLmxlbmd0aDtmKyspaFtmXT1vKHUscltmXSk7dFtjXT1ofX19O3ZhciBpPXtpZHM6XCJpZFwiLGxvY2F0aW9uczpcImxvY2F0aW9uXCIsbGFiZWxzOlwibGFiZWxcIix2YWx1ZXM6XCJ2YWx1ZVwiLFwibWFya2VyLmNvbG9yc1wiOlwiY29sb3JcIixwYXJlbnRzOlwicGFyZW50XCJ9O2Z1bmN0aW9uIGEodCl7cmV0dXJuIGlbdF18fHR9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP0FycmF5LmlzQXJyYXkodCkmJkFycmF5LmlzQXJyYXkodFtlWzBdXSk/dFtlWzBdXVtlWzFdXTp2b2lkIDA6dFtlXX19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDYxNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxhPXQoXCJ0aW55Y29sb3IyXCIpLG89dChcIi4uLy4uL2xpYlwiKSxzPXQoXCIuLi8uLi9saWIvZXZlbnRzXCIpLGw9dChcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiKSxjPXQoXCIuLi8uLi9saWIvb3ZlcnJpZGVfY3Vyc29yXCIpLHU9dChcIi4uL2RyYXdpbmdcIiksaD10KFwiLi4vY29sb3JcIiksZj10KFwiLi4vZHJhZ2VsZW1lbnRcIikscD10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksZD10KFwiLi4vLi4vcmVnaXN0cnlcIiksZz10KFwiLi9oZWxwZXJzXCIpLHY9dChcIi4vY29uc3RhbnRzXCIpLG09di5ZQU5HTEUseT1NYXRoLlBJKm0vMTgwLHg9MS9NYXRoLnNpbih5KSxiPU1hdGguY29zKHkpLF89TWF0aC5zaW4oeSksdz12LkhPVkVSQVJST1dTSVpFLGs9di5IT1ZFUlRFWFRQQUQ7ci5ob3Zlcj1mdW5jdGlvbih0LGUscixhKXt0PW8uZ2V0R3JhcGhEaXYodCksby50aHJvdHRsZSh0Ll9mdWxsTGF5b3V0Ll91aWQrdi5IT1ZFUklELHYuSE9WRVJNSU5USU1FLGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQsZSxyLGEpe3J8fChyPVwieHlcIik7dmFyIGw9QXJyYXkuaXNBcnJheShyKT9yOltyXSx1PXQuX2Z1bGxMYXlvdXQsdj11Ll9wbG90c3x8W10sbT12W3JdLHk9dS5faGFzKFwiY2FydGVzaWFuXCIpO2lmKG0pe3ZhciBiPW0ub3ZlcmxheXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSk7bD1sLmNvbmNhdChiKX1mb3IodmFyIF89bC5sZW5ndGgsdz1uZXcgQXJyYXkoXyksaz1uZXcgQXJyYXkoXyksQT0hMSxMPTA7TDxfO0wrKyl7dmFyIHo9bFtMXSxPPXZbel07aWYoTylBPSEwLHdbTF09cC5nZXRGcm9tSWQodCxPLnhheGlzLl9pZCksa1tMXT1wLmdldEZyb21JZCh0LE8ueWF4aXMuX2lkKTtlbHNle3ZhciBJPXVbel0uX3N1YnBsb3Q7d1tMXT1JLnhheGlzLGtbTF09SS55YXhpc319dmFyIEQ9ZS5ob3Zlcm1vZGV8fHUuaG92ZXJtb2RlO0QmJiFBJiYoRD1cImNsb3Nlc3RcIik7aWYoLTE9PT1bXCJ4XCIsXCJ5XCIsXCJjbG9zZXN0XCJdLmluZGV4T2YoRCl8fCF0LmNhbGNkYXRhfHx0LnF1ZXJ5U2VsZWN0b3IoXCIuem9vbWJveFwiKXx8dC5fZHJhZ2dpbmcpcmV0dXJuIGYudW5ob3ZlclJhdyh0LGUpO3ZhciBQLFIsRixCLE4saixWLFUscSxILEcsWSxXLFg9LTE9PT11LmhvdmVyZGlzdGFuY2U/MS8wOnUuaG92ZXJkaXN0YW5jZSxaPS0xPT09dS5zcGlrZWRpc3RhbmNlPzEvMDp1LnNwaWtlZGlzdGFuY2UsJD1bXSxKPVtdLEs9e2hMaW5lUG9pbnQ6bnVsbCx2TGluZVBvaW50Om51bGx9LFE9ITE7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IoRD1cImFycmF5XCIsRj0wO0Y8ZS5sZW5ndGg7RisrKShOPXQuY2FsY2RhdGFbZVtGXS5jdXJ2ZU51bWJlcnx8MF0pJiYoaj1OWzBdLnRyYWNlLFwic2tpcFwiIT09TlswXS50cmFjZS5ob3ZlcmluZm8mJihKLnB1c2goTiksXCJoXCI9PT1qLm9yaWVudGF0aW9uJiYoUT0hMCkpKTtlbHNle2ZvcihCPTA7Qjx0LmNhbGNkYXRhLmxlbmd0aDtCKyspTj10LmNhbGNkYXRhW0JdLFwic2tpcFwiIT09KGo9TlswXS50cmFjZSkuaG92ZXJpbmZvJiZnLmlzVHJhY2VJblN1YnBsb3RzKGosbCkmJihKLnB1c2goTiksXCJoXCI9PT1qLm9yaWVudGF0aW9uJiYoUT0hMCkpO3ZhciB0dCxldCxydD0hZS50YXJnZXQ7aWYocnQpdHQ9XCJ4cHhcImluIGU/ZS54cHg6d1swXS5fbGVuZ3RoLzIsZXQ9XCJ5cHhcImluIGU/ZS55cHg6a1swXS5fbGVuZ3RoLzI7ZWxzZXtpZighMT09PXMudHJpZ2dlckhhbmRsZXIodCxcInBsb3RseV9iZWZvcmVob3ZlclwiLGUpKXJldHVybjt2YXIgbnQ9ZS50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYodHQ9ZS5jbGllbnRYLW50LmxlZnQsZXQ9ZS5jbGllbnRZLW50LnRvcCx0dDwwfHx0dD53WzBdLl9sZW5ndGh8fGV0PDB8fGV0PmtbMF0uX2xlbmd0aClyZXR1cm4gZi51bmhvdmVyUmF3KHQsZSl9aWYoZS5wb2ludGVyWD10dCt3WzBdLl9vZmZzZXQsZS5wb2ludGVyWT1ldCtrWzBdLl9vZmZzZXQsUD1cInh2YWxcImluIGU/Zy5mbGF0KGwsZS54dmFsKTpnLnAyYyh3LHR0KSxSPVwieXZhbFwiaW4gZT9nLmZsYXQobCxlLnl2YWwpOmcucDJjKGssZXQpLCFpKFBbMF0pfHwhaShSWzBdKSlyZXR1cm4gby53YXJuKFwiRnguaG92ZXIgZmFpbGVkXCIsZSx0KSxmLnVuaG92ZXJSYXcodCxlKX12YXIgaXQ9MS8wO2ZvcihCPTA7QjxKLmxlbmd0aDtCKyspaWYoKE49SltCXSkmJk5bMF0mJk5bMF0udHJhY2UmJiEwPT09TlswXS50cmFjZS52aXNpYmxlJiYoaj1OWzBdLnRyYWNlLC0xPT09W1wiY2FycGV0XCIsXCJjb250b3VyY2FycGV0XCJdLmluZGV4T2Yoai5fbW9kdWxlLm5hbWUpKSl7aWYoXCJzcGxvbVwiPT09ai50eXBlP1Y9bFtVPTBdOihWPWcuZ2V0U3VicGxvdChqKSxVPWwuaW5kZXhPZihWKSkscT1ELFk9e2NkOk4sdHJhY2U6aix4YTp3W1VdLHlhOmtbVV0sbWF4SG92ZXJEaXN0YW5jZTpYLG1heFNwaWtlRGlzdGFuY2U6WixpbmRleDohMSxkaXN0YW5jZTpNYXRoLm1pbihpdCxYKSxzcGlrZURpc3RhbmNlOjEvMCx4U3Bpa2U6dm9pZCAwLHlTcGlrZTp2b2lkIDAsY29sb3I6aC5kZWZhdWx0TGluZSxuYW1lOmoubmFtZSx4MDp2b2lkIDAseDE6dm9pZCAwLHkwOnZvaWQgMCx5MTp2b2lkIDAseExhYmVsVmFsOnZvaWQgMCx5TGFiZWxWYWw6dm9pZCAwLHpMYWJlbFZhbDp2b2lkIDAsdGV4dDp2b2lkIDB9LHVbVl0mJihZLnN1YnBsb3Q9dVtWXS5fc3VicGxvdCksdS5fc3Bsb21TY2VuZXMmJnUuX3NwbG9tU2NlbmVzW2oudWlkXSYmKFkuc2NlbmU9dS5fc3Bsb21TY2VuZXNbai51aWRdKSxXPSQubGVuZ3RoLFwiYXJyYXlcIj09PXEpe3ZhciBhdD1lW0JdO1wicG9pbnROdW1iZXJcImluIGF0PyhZLmluZGV4PWF0LnBvaW50TnVtYmVyLHE9XCJjbG9zZXN0XCIpOihxPVwiXCIsXCJ4dmFsXCJpbiBhdCYmKEg9YXQueHZhbCxxPVwieFwiKSxcInl2YWxcImluIGF0JiYoRz1hdC55dmFsLHE9cT9cImNsb3Nlc3RcIjpcInlcIikpfWVsc2UgSD1QW1VdLEc9UltVXTtpZigwIT09WClpZihqLl9tb2R1bGUmJmouX21vZHVsZS5ob3ZlclBvaW50cyl7dmFyIG90PWouX21vZHVsZS5ob3ZlclBvaW50cyhZLEgsRyxxLHUuX2hvdmVybGF5ZXIpO2lmKG90KWZvcih2YXIgc3QsbHQ9MDtsdDxvdC5sZW5ndGg7bHQrKylzdD1vdFtsdF0saShzdC54MCkmJmkoc3QueTApJiYkLnB1c2goUyhzdCxEKSl9ZWxzZSBvLmxvZyhcIlVucmVjb2duaXplZCB0cmFjZSB0eXBlIGluIGhvdmVyOlwiLGopO2lmKFwiY2xvc2VzdFwiPT09RCYmJC5sZW5ndGg+VyYmKCQuc3BsaWNlKDAsVyksaXQ9JFswXS5kaXN0YW5jZSkseSYmMCE9PVomJjA9PT0kLmxlbmd0aCl7WS5kaXN0YW5jZT1aLFkuaW5kZXg9ITE7dmFyIGN0PWouX21vZHVsZS5ob3ZlclBvaW50cyhZLEgsRyxcImNsb3Nlc3RcIix1Ll9ob3ZlcmxheWVyKTtpZihjdCYmKGN0PWN0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5zcGlrZURpc3RhbmNlPD1afSkpLGN0JiZjdC5sZW5ndGgpe3ZhciB1dCxodD1jdC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQueGEuc2hvd3NwaWtlc30pO2lmKGh0Lmxlbmd0aCl7dmFyIGZ0PWh0WzBdO2koZnQueDApJiZpKGZ0LnkwKSYmKHV0PXZ0KGZ0KSwoIUsudkxpbmVQb2ludHx8Sy52TGluZVBvaW50LnNwaWtlRGlzdGFuY2U+dXQuc3Bpa2VEaXN0YW5jZSkmJihLLnZMaW5lUG9pbnQ9dXQpKX12YXIgcHQ9Y3QuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnlhLnNob3dzcGlrZXN9KTtpZihwdC5sZW5ndGgpe3ZhciBkdD1wdFswXTtpKGR0LngwKSYmaShkdC55MCkmJih1dD12dChkdCksKCFLLmhMaW5lUG9pbnR8fEsuaExpbmVQb2ludC5zcGlrZURpc3RhbmNlPnV0LnNwaWtlRGlzdGFuY2UpJiYoSy5oTGluZVBvaW50PXV0KSl9fX19ZnVuY3Rpb24gZ3QodCxlKXtmb3IodmFyIHIsbj1udWxsLGk9MS8wLGE9MDthPHQubGVuZ3RoO2ErKykocj10W2FdLnNwaWtlRGlzdGFuY2UpPGkmJnI8PWUmJihuPXRbYV0saT1yKTtyZXR1cm4gbn1mdW5jdGlvbiB2dCh0KXtyZXR1cm4gdD97eGE6dC54YSx5YTp0LnlhLHg6dm9pZCAwIT09dC54U3Bpa2U/dC54U3Bpa2U6KHQueDArdC54MSkvMix5OnZvaWQgMCE9PXQueVNwaWtlP3QueVNwaWtlOih0LnkwK3QueTEpLzIsZGlzdGFuY2U6dC5kaXN0YW5jZSxzcGlrZURpc3RhbmNlOnQuc3Bpa2VEaXN0YW5jZSxjdXJ2ZU51bWJlcjp0LnRyYWNlLmluZGV4LGNvbG9yOnQuY29sb3IscG9pbnROdW1iZXI6dC5pbmRleH06bnVsbH12YXIgbXQ9e2Z1bGxMYXlvdXQ6dSxjb250YWluZXI6dS5faG92ZXJsYXllcixvdXRlckNvbnRhaW5lcjp1Ll9wYXBlcmRpdixldmVudDplfSx5dD10Ll9zcGlrZXBvaW50cyx4dD17dkxpbmVQb2ludDpLLnZMaW5lUG9pbnQsaExpbmVQb2ludDpLLmhMaW5lUG9pbnR9O2lmKHQuX3NwaWtlcG9pbnRzPXh0LHkmJjAhPT1aJiYwIT09JC5sZW5ndGgpe3ZhciBidD0kLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC55YS5zaG93c3Bpa2VzfSksX3Q9Z3QoYnQsWik7Sy5oTGluZVBvaW50PXZ0KF90KTt2YXIgd3Q9JC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQueGEuc2hvd3NwaWtlc30pLGt0PWd0KHd0LFopO0sudkxpbmVQb2ludD12dChrdCl9aWYoMD09PSQubGVuZ3RoKXt2YXIgQXQ9Zi51bmhvdmVyUmF3KHQsZSk7cmV0dXJuIXl8fG51bGw9PT1LLmhMaW5lUG9pbnQmJm51bGw9PT1LLnZMaW5lUG9pbnR8fEMoeXQpJiZFKEssbXQpLEF0fXkmJkMoeXQpJiZFKEssbXQpOyQuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmRpc3RhbmNlLWUuZGlzdGFuY2V9KTt2YXIgVHQ9dC5faG92ZXJkYXRhLE10PVtdO2ZvcihGPTA7RjwkLmxlbmd0aDtGKyspe3ZhciBTdD0kW0ZdLEV0PWcubWFrZUV2ZW50RGF0YShTdCxTdC50cmFjZSxTdC5jZCk7aWYoITEhPT1TdC5ob3ZlcnRlbXBsYXRlKXt2YXIgQ3Q9ITE7U3QuY2RbU3QuaW5kZXhdJiZTdC5jZFtTdC5pbmRleF0uaHQmJihDdD1TdC5jZFtTdC5pbmRleF0uaHQpLFN0LmhvdmVydGVtcGxhdGU9Q3R8fFN0LnRyYWNlLmhvdmVydGVtcGxhdGV8fCExfVN0LmV2ZW50RGF0YT1bRXRdLE10LnB1c2goRXQpfXQuX2hvdmVyZGF0YT1NdDt2YXIgTHQ9XCJ5XCI9PT1EJiYoSi5sZW5ndGg+MXx8JC5sZW5ndGg+MSl8fFwiY2xvc2VzdFwiPT09RCYmUSYmJC5sZW5ndGg+MSx6dD1oLmNvbWJpbmUodS5wbG90X2JnY29sb3J8fGguYmFja2dyb3VuZCx1LnBhcGVyX2JnY29sb3IpLE90PXtob3Zlcm1vZGU6RCxyb3RhdGVMYWJlbHM6THQsYmdDb2xvcjp6dCxjb250YWluZXI6dS5faG92ZXJsYXllcixvdXRlckNvbnRhaW5lcjp1Ll9wYXBlcmRpdixjb21tb25MYWJlbE9wdHM6dS5ob3ZlcmxhYmVsLGhvdmVyZGlzdGFuY2U6dS5ob3ZlcmRpc3RhbmNlfSxJdD1UKCQsT3QsdCk7aWYoZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHMsbCxjLHU9MCxoPTEsZj10LnNpemUoKSxwPW5ldyBBcnJheShmKTtmdW5jdGlvbiBkKHQpe3ZhciBlPXRbMF0scj10W3QubGVuZ3RoLTFdO2lmKGk9ZS5wbWluLWUucG9zLWUuZHArZS5zaXplLGE9ci5wb3Mrci5kcCtyLnNpemUtZS5wbWF4LGk+LjAxKXtmb3Iocz10Lmxlbmd0aC0xO3M+PTA7cy0tKXRbc10uZHArPWk7bj0hMX1pZighKGE8LjAxKSl7aWYoaTwtLjAxKXtmb3Iocz10Lmxlbmd0aC0xO3M+PTA7cy0tKXRbc10uZHAtPWE7bj0hMX1pZihuKXt2YXIgYz0wO2ZvcihvPTA7bzx0Lmxlbmd0aDtvKyspKGw9dFtvXSkucG9zK2wuZHArbC5zaXplPmUucG1heCYmYysrO2ZvcihvPXQubGVuZ3RoLTE7bz49MCYmIShjPD0wKTtvLS0pKGw9dFtvXSkucG9zPmUucG1heC0xJiYobC5kZWw9ITAsYy0tKTtmb3Iobz0wO288dC5sZW5ndGgmJiEoYzw9MCk7bysrKWlmKChsPXRbb10pLnBvczxlLnBtaW4rMSlmb3IobC5kZWw9ITAsYy0tLGE9MipsLnNpemUscz10Lmxlbmd0aC0xO3M+PTA7cy0tKXRbc10uZHAtPWE7Zm9yKG89dC5sZW5ndGgtMTtvPj0wJiYhKGM8PTApO28tLSkobD10W29dKS5wb3MrbC5kcCtsLnNpemU+ZS5wbWF4JiYobC5kZWw9ITAsYy0tKX19fWZvcih0LmVhY2goZnVuY3Rpb24odCxuKXt2YXIgaT10W2VdLGE9XCJ4XCI9PT1pLl9pZC5jaGFyQXQoMCksbz1pLnJhbmdlOyFuJiZvJiZvWzBdPm9bMV0hPT1hJiYoaD0tMSkscFtuXT1be2RhdHVtOnQsaTpuLHRyYWNlSW5kZXg6dC50cmFjZS5pbmRleCxkcDowLHBvczp0LnBvcyxwb3NyZWY6dC5wb3NyZWYsc2l6ZTp0LmJ5KihhP3g6MSkvMixwbWluOjAscG1heDphP3Iud2lkdGg6ci5oZWlnaHR9XX0pLHAuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0WzBdLnBvc3JlZi1lWzBdLnBvc3JlZnx8aCooZVswXS50cmFjZUluZGV4LXRbMF0udHJhY2VJbmRleCl9KTshbiYmdTw9Zjspe2Zvcih1Kyssbj0hMCxvPTA7bzxwLmxlbmd0aC0xOyl7dmFyIGc9cFtvXSx2PXBbbysxXSxtPWdbZy5sZW5ndGgtMV0seT12WzBdO2lmKChpPW0ucG9zK20uZHArbS5zaXplLXkucG9zLXkuZHAreS5zaXplKT4uMDEmJm0ucG1pbj09PXkucG1pbiYmbS5wbWF4PT09eS5wbWF4KXtmb3Iocz12Lmxlbmd0aC0xO3M+PTA7cy0tKXZbc10uZHArPWk7Zm9yKGcucHVzaC5hcHBseShnLHYpLHAuc3BsaWNlKG8rMSwxKSxjPTAscz1nLmxlbmd0aC0xO3M+PTA7cy0tKWMrPWdbc10uZHA7Zm9yKGE9Yy9nLmxlbmd0aCxzPWcubGVuZ3RoLTE7cz49MDtzLS0pZ1tzXS5kcC09YTtuPSExfWVsc2UgbysrfXAuZm9yRWFjaChkKX1mb3Iobz1wLmxlbmd0aC0xO28+PTA7by0tKXt2YXIgYj1wW29dO2ZvcihzPWIubGVuZ3RoLTE7cz49MDtzLS0pe3ZhciBfPWJbc10sdz1fLmRhdHVtO3cub2Zmc2V0PV8uZHAsdy5kZWw9Xy5kZWx9fX0oSXQsTHQ/XCJ4YVwiOlwieWFcIix1KSxNKEl0LEx0KSxlLnRhcmdldCYmZS50YXJnZXQudGFnTmFtZSl7dmFyIER0PWQuZ2V0Q29tcG9uZW50TWV0aG9kKFwiYW5ub3RhdGlvbnNcIixcImhhc0NsaWNrVG9TaG93XCIpKHQsTXQpO2Mobi5zZWxlY3QoZS50YXJnZXQpLER0P1wicG9pbnRlclwiOlwiXCIpfWlmKCFlLnRhcmdldHx8YXx8IWZ1bmN0aW9uKHQsZSxyKXtpZighcnx8ci5sZW5ndGghPT10Ll9ob3ZlcmRhdGEubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgbj1yLmxlbmd0aC0xO24+PTA7bi0tKXt2YXIgaT1yW25dLGE9dC5faG92ZXJkYXRhW25dO2lmKGkuY3VydmVOdW1iZXIhPT1hLmN1cnZlTnVtYmVyfHxTdHJpbmcoaS5wb2ludE51bWJlcikhPT1TdHJpbmcoYS5wb2ludE51bWJlcil8fFN0cmluZyhpLnBvaW50TnVtYmVycykhPT1TdHJpbmcoYS5wb2ludE51bWJlcnMpKXJldHVybiEwfXJldHVybiExfSh0LDAsVHQpKXJldHVybjtUdCYmdC5lbWl0KFwicGxvdGx5X3VuaG92ZXJcIix7ZXZlbnQ6ZSxwb2ludHM6VHR9KTt0LmVtaXQoXCJwbG90bHlfaG92ZXJcIix7ZXZlbnQ6ZSxwb2ludHM6dC5faG92ZXJkYXRhLHhheGVzOncseWF4ZXM6ayx4dmFsczpQLHl2YWxzOlJ9KX0odCxlLHIsYSl9KX0sci5sb25lSG92ZXI9ZnVuY3Rpb24odCxlKXt2YXIgcj17Y29sb3I6dC5jb2xvcnx8aC5kZWZhdWx0TGluZSx4MDp0LngwfHx0Lnh8fDAseDE6dC54MXx8dC54fHwwLHkwOnQueTB8fHQueXx8MCx5MTp0LnkxfHx0Lnl8fDAseExhYmVsOnQueExhYmVsLHlMYWJlbDp0LnlMYWJlbCx6TGFiZWw6dC56TGFiZWwsdGV4dDp0LnRleHQsbmFtZTp0Lm5hbWUsaWRlYWxBbGlnbjp0LmlkZWFsQWxpZ24sYm9yZGVyQ29sb3I6dC5ib3JkZXJDb2xvcixmb250RmFtaWx5OnQuZm9udEZhbWlseSxmb250U2l6ZTp0LmZvbnRTaXplLGZvbnRDb2xvcjp0LmZvbnRDb2xvcixuYW1lTGVuZ3RoOnQubmFtZUxlbmd0aCx0ZXh0QWxpZ246dC50ZXh0QWxpZ24sdHJhY2U6dC50cmFjZXx8e2luZGV4OjAsaG92ZXJpbmZvOlwiXCJ9LHhhOntfb2Zmc2V0OjB9LHlhOntfb2Zmc2V0OjB9LGluZGV4OjAsaG92ZXJ0ZW1wbGF0ZTp0LmhvdmVydGVtcGxhdGV8fCExLGV2ZW50RGF0YTp0LmV2ZW50RGF0YXx8ITEsaG92ZXJ0ZW1wbGF0ZUxhYmVsczp0LmhvdmVydGVtcGxhdGVMYWJlbHN8fCExfSxpPW4uc2VsZWN0KGUuY29udGFpbmVyKSxhPWUub3V0ZXJDb250YWluZXI/bi5zZWxlY3QoZS5vdXRlckNvbnRhaW5lcik6aSxvPXtob3Zlcm1vZGU6XCJjbG9zZXN0XCIscm90YXRlTGFiZWxzOiExLGJnQ29sb3I6ZS5iZ0NvbG9yfHxoLmJhY2tncm91bmQsY29udGFpbmVyOmksb3V0ZXJDb250YWluZXI6YX0scz1UKFtyXSxvLGUuZ2QpO3JldHVybiBNKHMsby5yb3RhdGVMYWJlbHMpLHMubm9kZSgpfSxyLm11bHRpSG92ZXJzPWZ1bmN0aW9uKHQsZSl7QXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKTt2YXIgcj10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm57Y29sb3I6dC5jb2xvcnx8aC5kZWZhdWx0TGluZSx4MDp0LngwfHx0Lnh8fDAseDE6dC54MXx8dC54fHwwLHkwOnQueTB8fHQueXx8MCx5MTp0LnkxfHx0Lnl8fDAseExhYmVsOnQueExhYmVsLHlMYWJlbDp0LnlMYWJlbCx6TGFiZWw6dC56TGFiZWwsdGV4dDp0LnRleHQsbmFtZTp0Lm5hbWUsaWRlYWxBbGlnbjp0LmlkZWFsQWxpZ24sYm9yZGVyQ29sb3I6dC5ib3JkZXJDb2xvcixmb250RmFtaWx5OnQuZm9udEZhbWlseSxmb250U2l6ZTp0LmZvbnRTaXplLGZvbnRDb2xvcjp0LmZvbnRDb2xvcixuYW1lTGVuZ3RoOnQubmFtZUxlbmd0aCx0ZXh0QWxpZ246dC50ZXh0QWxpZ24sdHJhY2U6dC50cmFjZXx8e2luZGV4OjAsaG92ZXJpbmZvOlwiXCJ9LHhhOntfb2Zmc2V0OjB9LHlhOntfb2Zmc2V0OjB9LGluZGV4OjAsaG92ZXJ0ZW1wbGF0ZTp0LmhvdmVydGVtcGxhdGV8fCExLGV2ZW50RGF0YTp0LmV2ZW50RGF0YXx8ITEsaG92ZXJ0ZW1wbGF0ZUxhYmVsczp0LmhvdmVydGVtcGxhdGVMYWJlbHN8fCExfX0pLGk9bi5zZWxlY3QoZS5jb250YWluZXIpLGE9ZS5vdXRlckNvbnRhaW5lcj9uLnNlbGVjdChlLm91dGVyQ29udGFpbmVyKTppLG89e2hvdmVybW9kZTpcImNsb3Nlc3RcIixyb3RhdGVMYWJlbHM6ITEsYmdDb2xvcjplLmJnQ29sb3J8fGguYmFja2dyb3VuZCxjb250YWluZXI6aSxvdXRlckNvbnRhaW5lcjphfSxzPVQocixvLGUuZ2QpLGw9MCxjPTA7cmV0dXJuIHMuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LnkwLWUueTB9KS5lYWNoKGZ1bmN0aW9uKHQscil7dmFyIG49dC55MC10LmJ5LzI7dC5vZmZzZXQ9bi01PGw/bC1uKzU6MCxsPW4rdC5ieSt0Lm9mZnNldCxyPT09ZS5hbmNob3JJbmRleCYmKGM9dC5vZmZzZXQpfSkuZWFjaChmdW5jdGlvbih0KXt0Lm9mZnNldC09Y30pLE0ocyxvLnJvdGF0ZUxhYmVscyksc307dmFyIEE9LzxleHRyYT4oW1xcc1xcU10qKTxcXC9leHRyYT4vO2Z1bmN0aW9uIFQodCxlLHIpe3ZhciBpPXIuX2Z1bGxMYXlvdXQsYT1lLmhvdmVybW9kZSxzPWUucm90YXRlTGFiZWxzLGM9ZS5iZ0NvbG9yLGY9ZS5jb250YWluZXIscD1lLm91dGVyQ29udGFpbmVyLGQ9ZS5jb21tb25MYWJlbE9wdHN8fHt9LGc9ZS5mb250RmFtaWx5fHx2LkhPVkVSRk9OVCx5PWUuZm9udFNpemV8fHYuSE9WRVJGT05UU0laRSx4PXRbMF0sYj14LnhhLF89eC55YSxUPVwieVwiPT09YT9cInlMYWJlbFwiOlwieExhYmVsXCIsTT14W1RdLFM9KFN0cmluZyhNKXx8XCJcIikuc3BsaXQoXCIgXCIpWzBdLEU9cC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksQz1FLnRvcCx6PUUud2lkdGgsTz1FLmhlaWdodCxJPXZvaWQgMCE9PU0mJnguZGlzdGFuY2U8PWUuaG92ZXJkaXN0YW5jZSYmKFwieFwiPT09YXx8XCJ5XCI9PT1hKTtpZihJKXt2YXIgRCxQLFI9ITA7Zm9yKEQ9MDtEPHQubGVuZ3RoO0QrKylpZihSJiZ2b2lkIDA9PT10W0RdLnpMYWJlbCYmKFI9ITEpLFA9dFtEXS5ob3ZlcmluZm98fHRbRF0udHJhY2UuaG92ZXJpbmZvKXt2YXIgRj1BcnJheS5pc0FycmF5KFApP1A6UC5zcGxpdChcIitcIik7aWYoLTE9PT1GLmluZGV4T2YoXCJhbGxcIikmJi0xPT09Ri5pbmRleE9mKGEpKXtJPSExO2JyZWFrfX1SJiYoST0hMSl9dmFyIEI9Zi5zZWxlY3RBbGwoXCJnLmF4aXN0ZXh0XCIpLmRhdGEoST9bMF06W10pO0IuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJheGlzdGV4dFwiLCEwKSxCLmV4aXQoKS5yZW1vdmUoKSxCLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxpPW8uZW5zdXJlU2luZ2xlKGUsXCJwYXRoXCIsXCJcIixmdW5jdGlvbih0KXt0LnN0eWxlKHtcInN0cm9rZS13aWR0aFwiOlwiMXB4XCJ9KX0pLHM9by5lbnN1cmVTaW5nbGUoZSxcInRleHRcIixcIlwiLGZ1bmN0aW9uKHQpe3QuYXR0cihcImRhdGEtbm90ZXhcIiwxKX0pLGM9ZC5iZ2NvbG9yfHxoLmRlZmF1bHRMaW5lLGY9ZC5ib3JkZXJjb2xvcnx8aC5jb250cmFzdChjKSxwPWguY29udHJhc3QoYyk7aS5zdHlsZSh7ZmlsbDpjLHN0cm9rZTpmfSkscy50ZXh0KE0pLmNhbGwodS5mb250LGQuZm9udC5mYW1pbHl8fGcsZC5mb250LnNpemV8fHksZC5mb250LmNvbG9yfHxwKS5jYWxsKGwucG9zaXRpb25UZXh0LDAsMCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyxyKSxlLmF0dHIoXCJ0cmFuc2Zvcm1cIixcIlwiKTt2YXIgdj1zLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihcInhcIj09PWEpe3MuYXR0cihcInRleHQtYW5jaG9yXCIsXCJtaWRkbGVcIikuY2FsbChsLnBvc2l0aW9uVGV4dCwwLFwidG9wXCI9PT1iLnNpZGU/Qy12LmJvdHRvbS13LWs6Qy12LnRvcCt3K2spO3ZhciBtPVwidG9wXCI9PT1iLnNpZGU/XCItXCI6XCJcIjtpLmF0dHIoXCJkXCIsXCJNMCwwTFwiK3crXCIsXCIrbSt3K1wiSFwiKyhrK3Yud2lkdGgvMikrXCJ2XCIrbSsoMiprK3YuaGVpZ2h0KStcIkgtXCIrKGsrdi53aWR0aC8yKStcIlZcIittK3crXCJILVwiK3crXCJaXCIpLGUuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiKyhiLl9vZmZzZXQrKHgueDAreC54MSkvMikrXCIsXCIrKF8uX29mZnNldCsoXCJ0b3BcIj09PWIuc2lkZT8wOl8uX2xlbmd0aCkpK1wiKVwiKX1lbHNle3MuYXR0cihcInRleHQtYW5jaG9yXCIsXCJyaWdodFwiPT09Xy5zaWRlP1wic3RhcnRcIjpcImVuZFwiKS5jYWxsKGwucG9zaXRpb25UZXh0LChcInJpZ2h0XCI9PT1fLnNpZGU/MTotMSkqKGsrdyksQy12LnRvcC12LmhlaWdodC8yKTt2YXIgQT1cInJpZ2h0XCI9PT1fLnNpZGU/XCJcIjpcIi1cIjtpLmF0dHIoXCJkXCIsXCJNMCwwTFwiK0ErdytcIixcIit3K1wiVlwiKyhrK3YuaGVpZ2h0LzIpK1wiaFwiK0ErKDIqayt2LndpZHRoKStcIlYtXCIrKGsrdi5oZWlnaHQvMikrXCJIXCIrQSt3K1wiVi1cIit3K1wiWlwiKSxlLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIisoYi5fb2Zmc2V0KyhcInJpZ2h0XCI9PT1fLnNpZGU/Yi5fbGVuZ3RoOjApKStcIixcIisoXy5fb2Zmc2V0Kyh4LnkwK3gueTEpLzIpK1wiKVwiKX10PXQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10LnpMYWJlbFZhbHx8KHRbVF18fFwiXCIpLnNwbGl0KFwiIFwiKVswXT09PVN9KX0pO3ZhciBOPWYuc2VsZWN0QWxsKFwiZy5ob3ZlcnRleHRcIikuZGF0YSh0LGZ1bmN0aW9uKHQpe3JldHVyblt0LnRyYWNlLmluZGV4LHQuaW5kZXgsdC54MCx0LnkwLHQubmFtZSx0LmF0dHIsdC54YSx0LnlhfHxcIlwiXS5qb2luKFwiLFwiKX0pO3JldHVybiBOLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiaG92ZXJ0ZXh0XCIsITApLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTt0LmFwcGVuZChcInJlY3RcIikuY2FsbChoLmZpbGwsaC5hZGRPcGFjaXR5KGMsLjgpKSx0LmFwcGVuZChcInRleHRcIikuY2xhc3NlZChcIm5hbWVcIiwhMCksdC5hcHBlbmQoXCJwYXRoXCIpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsXCIxcHhcIiksdC5hcHBlbmQoXCJ0ZXh0XCIpLmNsYXNzZWQoXCJudW1zXCIsITApLmNhbGwodS5mb250LGcseSl9KSxOLmV4aXQoKS5yZW1vdmUoKSxOLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykuYXR0cihcInRyYW5zZm9ybVwiLFwiXCIpLGY9XCJcIixwPVwiXCIsZD10LmJnY29sb3J8fHQuY29sb3Isdj1oLmNvbWJpbmUoaC5vcGFjaXR5KGQpP2Q6aC5kZWZhdWx0TGluZSxjKSx4PWguY29tYmluZShoLm9wYWNpdHkodC5jb2xvcik/dC5jb2xvcjpoLmRlZmF1bHRMaW5lLGMpLGI9dC5ib3JkZXJDb2xvcnx8aC5jb250cmFzdCh2KTt2b2lkIDAhPT10Lm5hbWVPdmVycmlkZSYmKHQubmFtZT10Lm5hbWVPdmVycmlkZSksdC5uYW1lJiYoaS5tZXRhJiYodC5uYW1lPW8udGVtcGxhdGVTdHJpbmcodC5uYW1lLHttZXRhOmkubWV0YX0pKSxmPUwodC5uYW1lLHQubmFtZUxlbmd0aCkpLHZvaWQgMCE9PXQuekxhYmVsPyh2b2lkIDAhPT10LnhMYWJlbCYmKHArPVwieDogXCIrdC54TGFiZWwrXCI8YnI+XCIpLHZvaWQgMCE9PXQueUxhYmVsJiYocCs9XCJ5OiBcIit0LnlMYWJlbCtcIjxicj5cIikscCs9KHA/XCJ6OiBcIjpcIlwiKSt0LnpMYWJlbCk6SSYmdFthK1wiTGFiZWxcIl09PT1NP3A9dFsoXCJ4XCI9PT1hP1wieVwiOlwieFwiKStcIkxhYmVsXCJdfHxcIlwiOnZvaWQgMD09PXQueExhYmVsP3ZvaWQgMCE9PXQueUxhYmVsJiZcInNjYXR0ZXJjYXJwZXRcIiE9PXQudHJhY2UudHlwZSYmKHA9dC55TGFiZWwpOnA9dm9pZCAwPT09dC55TGFiZWw/dC54TGFiZWw6XCIoXCIrdC54TGFiZWwrXCIsIFwiK3QueUxhYmVsK1wiKVwiLCF0LnRleHQmJjAhPT10LnRleHR8fEFycmF5LmlzQXJyYXkodC50ZXh0KXx8KHArPShwP1wiPGJyPlwiOlwiXCIpK3QudGV4dCksdm9pZCAwIT09dC5leHRyYVRleHQmJihwKz0ocD9cIjxicj5cIjpcIlwiKSt0LmV4dHJhVGV4dCksXCJcIiE9PXB8fHQuaG92ZXJ0ZW1wbGF0ZXx8KFwiXCI9PT1mJiZlLnJlbW92ZSgpLHA9Zik7dmFyIF89ci5fZnVsbExheW91dC5fZDNsb2NhbGUsVD10LmhvdmVydGVtcGxhdGV8fCExLFM9dC5ob3ZlcnRlbXBsYXRlTGFiZWxzfHx0LEU9dC5ldmVudERhdGFbMF18fHt9O1QmJihwPShwPW8uaG92ZXJ0ZW1wbGF0ZVN0cmluZyhULFMsXyxFLHttZXRhOmkubWV0YX0pKS5yZXBsYWNlKEEsZnVuY3Rpb24oZSxyKXtyZXR1cm4gZj1MKHIsdC5uYW1lTGVuZ3RoKSxcIlwifSkpO3ZhciBEPWUuc2VsZWN0KFwidGV4dC5udW1zXCIpLmNhbGwodS5mb250LHQuZm9udEZhbWlseXx8Zyx0LmZvbnRTaXplfHx5LHQuZm9udENvbG9yfHxiKS50ZXh0KHApLmF0dHIoXCJkYXRhLW5vdGV4XCIsMSkuY2FsbChsLnBvc2l0aW9uVGV4dCwwLDApLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsciksUD1lLnNlbGVjdChcInRleHQubmFtZVwiKSxSPTAsRj0wO2lmKGYmJmYhPT1wKXtQLmNhbGwodS5mb250LHQuZm9udEZhbWlseXx8Zyx0LmZvbnRTaXplfHx5LHgpLnRleHQoZikuYXR0cihcImRhdGEtbm90ZXhcIiwxKS5jYWxsKGwucG9zaXRpb25UZXh0LDAsMCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyxyKTt2YXIgQj1QLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtSPUIud2lkdGgrMiprLEY9Qi5oZWlnaHQrMiprfWVsc2UgUC5yZW1vdmUoKSxlLnNlbGVjdChcInJlY3RcIikucmVtb3ZlKCk7ZS5zZWxlY3QoXCJwYXRoXCIpLnN0eWxlKHtmaWxsOnYsc3Ryb2tlOmJ9KTt2YXIgTixqLFY9RC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksVT10LnhhLl9vZmZzZXQrKHQueDArdC54MSkvMixxPXQueWEuX29mZnNldCsodC55MCt0LnkxKS8yLEg9TWF0aC5hYnModC54MS10LngwKSxHPU1hdGguYWJzKHQueTEtdC55MCksWT1WLndpZHRoK3craytSO2lmKHQudHkwPUMtVi50b3AsdC5ieD1WLndpZHRoKzIqayx0LmJ5PU1hdGgubWF4KFYuaGVpZ2h0KzIqayxGKSx0LmFuY2hvcj1cInN0YXJ0XCIsdC50eHdpZHRoPVYud2lkdGgsdC50eDJ3aWR0aD1SLHQub2Zmc2V0PTAscyl0LnBvcz1VLE49cStHLzIrWTw9TyxqPXEtRy8yLVk+PTAsXCJ0b3BcIiE9PXQuaWRlYWxBbGlnbiYmTnx8IWo/Tj8ocSs9Ry8yLHQuYW5jaG9yPVwic3RhcnRcIik6dC5hbmNob3I9XCJtaWRkbGVcIjoocS09Ry8yLHQuYW5jaG9yPVwiZW5kXCIpO2Vsc2UgaWYodC5wb3M9cSxOPVUrSC8yK1k8PXosaj1VLUgvMi1ZPj0wLFwibGVmdFwiIT09dC5pZGVhbEFsaWduJiZOfHwhailpZihOKVUrPUgvMix0LmFuY2hvcj1cInN0YXJ0XCI7ZWxzZXt0LmFuY2hvcj1cIm1pZGRsZVwiO3ZhciBXPVkvMixYPVUrVy16LFo9VS1XO1g+MCYmKFUtPVgpLFo8MCYmKFUrPS1aKX1lbHNlIFUtPUgvMix0LmFuY2hvcj1cImVuZFwiO0QuYXR0cihcInRleHQtYW5jaG9yXCIsdC5hbmNob3IpLFImJlAuYXR0cihcInRleHQtYW5jaG9yXCIsdC5hbmNob3IpLGUuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK1UrXCIsXCIrcStcIilcIisocz9cInJvdGF0ZShcIittK1wiKVwiOlwiXCIpKX0pLE59ZnVuY3Rpb24gTSh0LGUpe3QuZWFjaChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtpZih0LmRlbClyZXR1cm4gci5yZW1vdmUoKTt2YXIgaT1yLnNlbGVjdChcInRleHQubnVtc1wiKSxhPXQuYW5jaG9yLG89XCJlbmRcIj09PWE/LTE6MSxzPXtzdGFydDoxLGVuZDotMSxtaWRkbGU6MH1bYV0sYz1zKih3K2spLGg9YytzKih0LnR4d2lkdGgrayksZj0wLHA9dC5vZmZzZXQ7XCJtaWRkbGVcIj09PWEmJihjLT10LnR4MndpZHRoLzIsaCs9dC50eHdpZHRoLzIrayksZSYmKHAqPS1fLGY9dC5vZmZzZXQqYiksci5zZWxlY3QoXCJwYXRoXCIpLmF0dHIoXCJkXCIsXCJtaWRkbGVcIj09PWE/XCJNLVwiKyh0LmJ4LzIrdC50eDJ3aWR0aC8yKStcIixcIisocC10LmJ5LzIpK1wiaFwiK3QuYngrXCJ2XCIrdC5ieStcImgtXCIrdC5ieCtcIlpcIjpcIk0wLDBMXCIrKG8qdytmKStcIixcIisodytwKStcInZcIisodC5ieS8yLXcpK1wiaFwiK28qdC5ieCtcInYtXCIrdC5ieStcIkhcIisobyp3K2YpK1wiVlwiKyhwLXcpK1wiWlwiKTt2YXIgZD1jK2YsZz1wK3QudHkwLXQuYnkvMitrLHY9dC50ZXh0QWxpZ258fFwiYXV0b1wiO1wiYXV0b1wiIT09diYmKFwibGVmdFwiPT09diYmXCJzdGFydFwiIT09YT8oaS5hdHRyKFwidGV4dC1hbmNob3JcIixcInN0YXJ0XCIpLGQ9LXQuYngtayk6XCJyaWdodFwiPT09diYmXCJlbmRcIiE9PWEmJihpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLFwiZW5kXCIpLGQ9dC5ieCtrKSksaS5jYWxsKGwucG9zaXRpb25UZXh0LGQsZyksdC50eDJ3aWR0aCYmKHIuc2VsZWN0KFwidGV4dC5uYW1lXCIpLmNhbGwobC5wb3NpdGlvblRleHQsaCtzKmsrZixwK3QudHkwLXQuYnkvMitrKSxyLnNlbGVjdChcInJlY3RcIikuY2FsbCh1LnNldFJlY3QsaCsocy0xKSp0LnR4MndpZHRoLzIrZixwLXQuYnkvMi0xLHQudHgyd2lkdGgsdC5ieSsyKSl9KX1mdW5jdGlvbiBTKHQsZSl7dmFyIHI9dC5pbmRleCxuPXQudHJhY2V8fHt9LGE9dC5jZFswXSxzPXQuY2Rbcl18fHt9O2Z1bmN0aW9uIGwodCl7cmV0dXJuIHR8fGkodCkmJjA9PT10fXZhciBjPUFycmF5LmlzQXJyYXkocik/ZnVuY3Rpb24odCxlKXt2YXIgaT1vLmNhc3RPcHRpb24oYSxyLHQpO3JldHVybiBsKGkpP2k6by5leHRyYWN0T3B0aW9uKHt9LG4sXCJcIixlKX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gby5leHRyYWN0T3B0aW9uKHMsbix0LGUpfTtmdW5jdGlvbiB1KGUscixuKXt2YXIgaT1jKHIsbik7bChpKSYmKHRbZV09aSl9aWYodShcImhvdmVyaW5mb1wiLFwiaGlcIixcImhvdmVyaW5mb1wiKSx1KFwiYmdjb2xvclwiLFwiaGJnXCIsXCJob3ZlcmxhYmVsLmJnY29sb3JcIiksdShcImJvcmRlckNvbG9yXCIsXCJoYmNcIixcImhvdmVybGFiZWwuYm9yZGVyY29sb3JcIiksdShcImZvbnRGYW1pbHlcIixcImh0ZlwiLFwiaG92ZXJsYWJlbC5mb250LmZhbWlseVwiKSx1KFwiZm9udFNpemVcIixcImh0c1wiLFwiaG92ZXJsYWJlbC5mb250LnNpemVcIiksdShcImZvbnRDb2xvclwiLFwiaHRjXCIsXCJob3ZlcmxhYmVsLmZvbnQuY29sb3JcIiksdShcIm5hbWVMZW5ndGhcIixcImhubFwiLFwiaG92ZXJsYWJlbC5uYW1lbGVuZ3RoXCIpLHUoXCJ0ZXh0QWxpZ25cIixcImh0YVwiLFwiaG92ZXJsYWJlbC5hbGlnblwiKSx0LnBvc3JlZj1cInlcIj09PWV8fFwiY2xvc2VzdFwiPT09ZSYmXCJoXCI9PT1uLm9yaWVudGF0aW9uP3QueGEuX29mZnNldCsodC54MCt0LngxKS8yOnQueWEuX29mZnNldCsodC55MCt0LnkxKS8yLHQueDA9by5jb25zdHJhaW4odC54MCwwLHQueGEuX2xlbmd0aCksdC54MT1vLmNvbnN0cmFpbih0LngxLDAsdC54YS5fbGVuZ3RoKSx0LnkwPW8uY29uc3RyYWluKHQueTAsMCx0LnlhLl9sZW5ndGgpLHQueTE9by5jb25zdHJhaW4odC55MSwwLHQueWEuX2xlbmd0aCksdm9pZCAwIT09dC54TGFiZWxWYWwmJih0LnhMYWJlbD1cInhMYWJlbFwiaW4gdD90LnhMYWJlbDpwLmhvdmVyTGFiZWxUZXh0KHQueGEsdC54TGFiZWxWYWwpLHQueFZhbD10LnhhLmMyZCh0LnhMYWJlbFZhbCkpLHZvaWQgMCE9PXQueUxhYmVsVmFsJiYodC55TGFiZWw9XCJ5TGFiZWxcImluIHQ/dC55TGFiZWw6cC5ob3ZlckxhYmVsVGV4dCh0LnlhLHQueUxhYmVsVmFsKSx0LnlWYWw9dC55YS5jMmQodC55TGFiZWxWYWwpKSx2b2lkIDAhPT10LnpMYWJlbFZhbCYmdm9pZCAwPT09dC56TGFiZWwmJih0LnpMYWJlbD1TdHJpbmcodC56TGFiZWxWYWwpKSwhKGlzTmFOKHQueGVycil8fFwibG9nXCI9PT10LnhhLnR5cGUmJnQueGVycjw9MCkpe3ZhciBoPXAudGlja1RleHQodC54YSx0LnhhLmMybCh0LnhlcnIpLFwiaG92ZXJcIikudGV4dDt2b2lkIDAhPT10LnhlcnJuZWc/dC54TGFiZWwrPVwiICtcIitoK1wiIC8gLVwiK3AudGlja1RleHQodC54YSx0LnhhLmMybCh0LnhlcnJuZWcpLFwiaG92ZXJcIikudGV4dDp0LnhMYWJlbCs9XCIgXFx4YjEgXCIraCxcInhcIj09PWUmJih0LmRpc3RhbmNlKz0xKX1pZighKGlzTmFOKHQueWVycil8fFwibG9nXCI9PT10LnlhLnR5cGUmJnQueWVycjw9MCkpe3ZhciBmPXAudGlja1RleHQodC55YSx0LnlhLmMybCh0LnllcnIpLFwiaG92ZXJcIikudGV4dDt2b2lkIDAhPT10LnllcnJuZWc/dC55TGFiZWwrPVwiICtcIitmK1wiIC8gLVwiK3AudGlja1RleHQodC55YSx0LnlhLmMybCh0LnllcnJuZWcpLFwiaG92ZXJcIikudGV4dDp0LnlMYWJlbCs9XCIgXFx4YjEgXCIrZixcInlcIj09PWUmJih0LmRpc3RhbmNlKz0xKX12YXIgZD10LmhvdmVyaW5mb3x8dC50cmFjZS5ob3ZlcmluZm87cmV0dXJuIGQmJlwiYWxsXCIhPT1kJiYoLTE9PT0oZD1BcnJheS5pc0FycmF5KGQpP2Q6ZC5zcGxpdChcIitcIikpLmluZGV4T2YoXCJ4XCIpJiYodC54TGFiZWw9dm9pZCAwKSwtMT09PWQuaW5kZXhPZihcInlcIikmJih0LnlMYWJlbD12b2lkIDApLC0xPT09ZC5pbmRleE9mKFwielwiKSYmKHQuekxhYmVsPXZvaWQgMCksLTE9PT1kLmluZGV4T2YoXCJ0ZXh0XCIpJiYodC50ZXh0PXZvaWQgMCksLTE9PT1kLmluZGV4T2YoXCJuYW1lXCIpJiYodC5uYW1lPXZvaWQgMCkpLHR9ZnVuY3Rpb24gRSh0LGUpe3ZhciByLG4saT1lLmNvbnRhaW5lcixvPWUuZnVsbExheW91dCxzPWUuZXZlbnQsbD0hIXQuaExpbmVQb2ludCxjPSEhdC52TGluZVBvaW50O2lmKGkuc2VsZWN0QWxsKFwiLnNwaWtlbGluZVwiKS5yZW1vdmUoKSxjfHxsKXt2YXIgZj1oLmNvbWJpbmUoby5wbG90X2JnY29sb3Isby5wYXBlcl9iZ2NvbG9yKTtpZihsKXt2YXIgcCxkLGc9dC5oTGluZVBvaW50O3I9ZyYmZy54YSxcImN1cnNvclwiPT09KG49ZyYmZy55YSkuc3Bpa2VzbmFwPyhwPXMucG9pbnRlclgsZD1zLnBvaW50ZXJZKToocD1yLl9vZmZzZXQrZy54LGQ9bi5fb2Zmc2V0K2cueSk7dmFyIHYsbSx5PWEucmVhZGFiaWxpdHkoZy5jb2xvcixmKTwxLjU/aC5jb250cmFzdChmKTpnLmNvbG9yLHg9bi5zcGlrZW1vZGUsYj1uLnNwaWtldGhpY2tuZXNzLF89bi5zcGlrZWNvbG9yfHx5LHc9bi5fYm91bmRpbmdCb3gsaz0ody5sZWZ0K3cucmlnaHQpLzI8cD93LnJpZ2h0OncubGVmdDstMT09PXguaW5kZXhPZihcInRvYXhpc1wiKSYmLTE9PT14LmluZGV4T2YoXCJhY3Jvc3NcIil8fCgtMSE9PXguaW5kZXhPZihcInRvYXhpc1wiKSYmKHY9ayxtPXApLC0xIT09eC5pbmRleE9mKFwiYWNyb3NzXCIpJiYodj1uLl9jb3VudGVyU3BhblswXSxtPW4uX2NvdW50ZXJTcGFuWzFdKSxpLmluc2VydChcImxpbmVcIixcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKHt4MTp2LHgyOm0seTE6ZCx5MjpkLFwic3Ryb2tlLXdpZHRoXCI6YixzdHJva2U6XyxcInN0cm9rZS1kYXNoYXJyYXlcIjp1LmRhc2hTdHlsZShuLnNwaWtlZGFzaCxiKX0pLmNsYXNzZWQoXCJzcGlrZWxpbmVcIiwhMCkuY2xhc3NlZChcImNyaXNwXCIsITApLGkuaW5zZXJ0KFwibGluZVwiLFwiOmZpcnN0LWNoaWxkXCIpLmF0dHIoe3gxOnYseDI6bSx5MTpkLHkyOmQsXCJzdHJva2Utd2lkdGhcIjpiKzIsc3Ryb2tlOmZ9KS5jbGFzc2VkKFwic3Bpa2VsaW5lXCIsITApLmNsYXNzZWQoXCJjcmlzcFwiLCEwKSksLTEhPT14LmluZGV4T2YoXCJtYXJrZXJcIikmJmkuaW5zZXJ0KFwiY2lyY2xlXCIsXCI6Zmlyc3QtY2hpbGRcIikuYXR0cih7Y3g6aysoXCJyaWdodFwiIT09bi5zaWRlP2I6LWIpLGN5OmQscjpiLGZpbGw6X30pLmNsYXNzZWQoXCJzcGlrZWxpbmVcIiwhMCl9aWYoYyl7dmFyIEEsVCxNPXQudkxpbmVQb2ludDtyPU0mJk0ueGEsbj1NJiZNLnlhLFwiY3Vyc29yXCI9PT1yLnNwaWtlc25hcD8oQT1zLnBvaW50ZXJYLFQ9cy5wb2ludGVyWSk6KEE9ci5fb2Zmc2V0K00ueCxUPW4uX29mZnNldCtNLnkpO3ZhciBTLEUsQz1hLnJlYWRhYmlsaXR5KE0uY29sb3IsZik8MS41P2guY29udHJhc3QoZik6TS5jb2xvcixMPXIuc3Bpa2Vtb2RlLHo9ci5zcGlrZXRoaWNrbmVzcyxPPXIuc3Bpa2Vjb2xvcnx8QyxJPXIuX2JvdW5kaW5nQm94LEQ9KEkudG9wK0kuYm90dG9tKS8yPFQ/SS5ib3R0b206SS50b3A7LTE9PT1MLmluZGV4T2YoXCJ0b2F4aXNcIikmJi0xPT09TC5pbmRleE9mKFwiYWNyb3NzXCIpfHwoLTEhPT1MLmluZGV4T2YoXCJ0b2F4aXNcIikmJihTPUQsRT1UKSwtMSE9PUwuaW5kZXhPZihcImFjcm9zc1wiKSYmKFM9ci5fY291bnRlclNwYW5bMF0sRT1yLl9jb3VudGVyU3BhblsxXSksaS5pbnNlcnQoXCJsaW5lXCIsXCI6Zmlyc3QtY2hpbGRcIikuYXR0cih7eDE6QSx4MjpBLHkxOlMseTI6RSxcInN0cm9rZS13aWR0aFwiOnosc3Ryb2tlOk8sXCJzdHJva2UtZGFzaGFycmF5XCI6dS5kYXNoU3R5bGUoci5zcGlrZWRhc2gseil9KS5jbGFzc2VkKFwic3Bpa2VsaW5lXCIsITApLmNsYXNzZWQoXCJjcmlzcFwiLCEwKSxpLmluc2VydChcImxpbmVcIixcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKHt4MTpBLHgyOkEseTE6Uyx5MjpFLFwic3Ryb2tlLXdpZHRoXCI6eisyLHN0cm9rZTpmfSkuY2xhc3NlZChcInNwaWtlbGluZVwiLCEwKS5jbGFzc2VkKFwiY3Jpc3BcIiwhMCkpLC0xIT09TC5pbmRleE9mKFwibWFya2VyXCIpJiZpLmluc2VydChcImNpcmNsZVwiLFwiOmZpcnN0LWNoaWxkXCIpLmF0dHIoe2N4OkEsY3k6RC0oXCJ0b3BcIiE9PXIuc2lkZT96Oi16KSxyOnosZmlsbDpPfSkuY2xhc3NlZChcInNwaWtlbGluZVwiLCEwKX19fWZ1bmN0aW9uIEModCxlKXtyZXR1cm4hZXx8KGUudkxpbmVQb2ludCE9PXQuX3NwaWtlcG9pbnRzLnZMaW5lUG9pbnR8fGUuaExpbmVQb2ludCE9PXQuX3NwaWtlcG9pbnRzLmhMaW5lUG9pbnQpfWZ1bmN0aW9uIEwodCxlKXtyZXR1cm4gbC5wbGFpblRleHQodHx8XCJcIix7bGVuOmUsYWxsb3dlZFRhZ3M6W1wiYnJcIixcInN1YlwiLFwic3VwXCIsXCJiXCIsXCJpXCIsXCJlbVwiXX0pfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2V2ZW50c1wiOjY5MCxcIi4uLy4uL2xpYi9vdmVycmlkZV9jdXJzb3JcIjo3MTIsXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIjo3MjUsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vY29sb3JcIjo1NzgsXCIuLi9kcmFnZWxlbWVudFwiOjU5NixcIi4uL2RyYXdpbmdcIjo1OTksXCIuL2NvbnN0YW50c1wiOjYxMSxcIi4vaGVscGVyc1wiOjYxMyxkMzoxNTUsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMix0aW55Y29sb3IyOjUyMn1dLDYxNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3IoXCJob3ZlcmxhYmVsLmJnY29sb3JcIiwoaT1pfHx7fSkuYmdjb2xvcikscihcImhvdmVybGFiZWwuYm9yZGVyY29sb3JcIixpLmJvcmRlcmNvbG9yKSxyKFwiaG92ZXJsYWJlbC5uYW1lbGVuZ3RoXCIsaS5uYW1lbGVuZ3RoKSxuLmNvZXJjZUZvbnQocixcImhvdmVybGFiZWwuZm9udFwiLGkuZm9udCkscihcImhvdmVybGFiZWwuYWxpZ25cIixpLmFsaWduKX19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDYxNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Q9dHx8e307KGU9ZXx8e30pLmRlc2NyaXB0aW9uJiZlLmRlc2NyaXB0aW9uO3ZhciByPWUua2V5c3x8W107aWYoci5sZW5ndGg+MCl7Zm9yKHZhciBuPVtdLGk9MDtpPHIubGVuZ3RoO2krKyluW2ldPVwiYFwiK3JbaV0rXCJgXCI7XCJGaW5hbGx5LCB0aGUgdGVtcGxhdGUgc3RyaW5nIGhhcyBhY2Nlc3MgdG8gXCIsMT09PXIubGVuZ3RoP1widmFyaWFibGUgXCIrblswXTpcInZhcmlhYmxlcyBcIituLnNsaWNlKDAsLTEpLmpvaW4oXCIsIFwiKStcIiBhbmQgXCIrbi5zbGljZSgtMSkrXCIuXCJ9dmFyIGE9e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsZWRpdFR5cGU6dC5lZGl0VHlwZXx8XCJub25lXCJ9O3JldHVybiExIT09dC5hcnJheU9rJiYoYS5hcnJheU9rPSEwKSxhfX0se31dLDYxNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vZHJhZ2VsZW1lbnRcIiksbz10KFwiLi9oZWxwZXJzXCIpLHM9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksbD10KFwiLi9ob3ZlclwiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6XCJjb21wb25lbnRcIixuYW1lOlwiZnhcIixjb25zdGFudHM6dChcIi4vY29uc3RhbnRzXCIpLHNjaGVtYTp7bGF5b3V0OnN9LGF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxsYXlvdXRBdHRyaWJ1dGVzOnMsc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHM6dChcIi4vbGF5b3V0X2dsb2JhbF9kZWZhdWx0c1wiKSxzdXBwbHlEZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KFwiLi9sYXlvdXRfZGVmYXVsdHNcIiksY2FsYzp0KFwiLi9jYWxjXCIpLGdldERpc3RhbmNlRnVuY3Rpb246by5nZXREaXN0YW5jZUZ1bmN0aW9uLGdldENsb3Nlc3Q6by5nZXRDbG9zZXN0LGluYm94Om8uaW5ib3gscXVhZHJhdHVyZTpvLnF1YWRyYXR1cmUsYXBwZW5kQXJyYXlQb2ludFZhbHVlOm8uYXBwZW5kQXJyYXlQb2ludFZhbHVlLGNhc3RIb3Zlck9wdGlvbjpmdW5jdGlvbih0LGUscil7cmV0dXJuIGkuY2FzdE9wdGlvbih0LGUsXCJob3ZlcmxhYmVsLlwiK3IpfSxjYXN0SG92ZXJpbmZvOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gaS5jYXN0T3B0aW9uKHQscixcImhvdmVyaW5mb1wiLGZ1bmN0aW9uKHIpe3JldHVybiBpLmNvZXJjZUhvdmVyaW5mbyh7aG92ZXJpbmZvOnJ9LHtfbW9kdWxlOnQuX21vZHVsZX0sZSl9KX0saG92ZXI6bC5ob3Zlcix1bmhvdmVyOmEudW5ob3Zlcixsb25lSG92ZXI6bC5sb25lSG92ZXIsbXVsdGlIb3ZlcnM6bC5tdWx0aUhvdmVycyxsb25lVW5ob3ZlcjpmdW5jdGlvbih0KXt2YXIgZT1pLmlzRDNTZWxlY3Rpb24odCk/dDpuLnNlbGVjdCh0KTtlLnNlbGVjdEFsbChcImcuaG92ZXJ0ZXh0XCIpLnJlbW92ZSgpLGUuc2VsZWN0QWxsKFwiLnNwaWtlbGluZVwiKS5yZW1vdmUoKX0sY2xpY2s6dChcIi4vY2xpY2tcIil9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9kcmFnZWxlbWVudFwiOjU5NixcIi4vYXR0cmlidXRlc1wiOjYwOCxcIi4vY2FsY1wiOjYwOSxcIi4vY2xpY2tcIjo2MTAsXCIuL2NvbnN0YW50c1wiOjYxMSxcIi4vZGVmYXVsdHNcIjo2MTIsXCIuL2hlbHBlcnNcIjo2MTMsXCIuL2hvdmVyXCI6NjE0LFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjYxOCxcIi4vbGF5b3V0X2RlZmF1bHRzXCI6NjE5LFwiLi9sYXlvdXRfZ2xvYmFsX2RlZmF1bHRzXCI6NjIwLGQzOjE1NX1dLDYxODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2NvbnN0YW50c1wiKSxpPXQoXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIikoe2VkaXRUeXBlOlwibm9uZVwifSk7aS5mYW1pbHkuZGZsdD1uLkhPVkVSRk9OVCxpLnNpemUuZGZsdD1uLkhPVkVSRk9OVFNJWkUsZS5leHBvcnRzPXtjbGlja21vZGU6e3ZhbFR5cGU6XCJmbGFnbGlzdFwiLGZsYWdzOltcImV2ZW50XCIsXCJzZWxlY3RcIl0sZGZsdDpcImV2ZW50XCIsZWRpdFR5cGU6XCJwbG90XCIsZXh0cmFzOltcIm5vbmVcIl19LGRyYWdtb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ6b29tXCIsXCJwYW5cIixcInNlbGVjdFwiLFwibGFzc29cIixcIm9yYml0XCIsXCJ0dXJudGFibGVcIiwhMV0sZGZsdDpcInpvb21cIixlZGl0VHlwZTpcIm1vZGViYXJcIn0saG92ZXJtb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ4XCIsXCJ5XCIsXCJjbG9zZXN0XCIsITFdLGVkaXRUeXBlOlwibW9kZWJhclwifSxob3ZlcmRpc3RhbmNlOnt2YWxUeXBlOlwiaW50ZWdlclwiLG1pbjotMSxkZmx0OjIwLGVkaXRUeXBlOlwibm9uZVwifSxzcGlrZWRpc3RhbmNlOnt2YWxUeXBlOlwiaW50ZWdlclwiLG1pbjotMSxkZmx0OjIwLGVkaXRUeXBlOlwibm9uZVwifSxob3ZlcmxhYmVsOntiZ2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcIm5vbmVcIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwibm9uZVwifSxmb250OmksYWxpZ246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImxlZnRcIixcInJpZ2h0XCIsXCJhdXRvXCJdLGRmbHQ6XCJhdXRvXCIsZWRpdFR5cGU6XCJub25lXCJ9LG5hbWVsZW5ndGg6e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsbWluOi0xLGRmbHQ6MTUsZWRpdFR5cGU6XCJub25lXCJ9LGVkaXRUeXBlOlwibm9uZVwifSxzZWxlY3RkaXJlY3Rpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImhcIixcInZcIixcImRcIixcImFueVwiXSxkZmx0OlwiYW55XCIsZWRpdFR5cGU6XCJub25lXCJ9fX0se1wiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCI6Nzc1LFwiLi9jb25zdGFudHNcIjo2MTF9XSw2MTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBhKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9dmFyIG8scz1hKFwiY2xpY2ttb2RlXCIpO1wic2VsZWN0XCI9PT1hKFwiZHJhZ21vZGVcIikmJmEoXCJzZWxlY3RkaXJlY3Rpb25cIiksZS5faGFzKFwiY2FydGVzaWFuXCIpP3MuaW5kZXhPZihcInNlbGVjdFwiKT4tMT9vPVwiY2xvc2VzdFwiOihlLl9pc0hvcml6PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUuX3NjYXR0ZXJTdGFja09wdHN8fHt9LG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXSxhPWkueGF4aXMraS55YXhpcyxvPXJbYV18fHt9LHM9b1tpLnN0YWNrZ3JvdXBdfHx7fTtpZihcImhcIiE9PWkub3JpZW50YXRpb24mJlwiaFwiIT09cy5vcmllbnRhdGlvbilyZXR1cm4hMX1yZXR1cm4hMH0ocixlKSxvPWUuX2lzSG9yaXo/XCJ5XCI6XCJ4XCIpOm89XCJjbG9zZXN0XCIsYShcImhvdmVybW9kZVwiLG8pJiYoYShcImhvdmVyZGlzdGFuY2VcIiksYShcInNwaWtlZGlzdGFuY2VcIikpO3ZhciBsPWUuX2hhcyhcIm1hcGJveFwiKSxjPWUuX2hhcyhcImdlb1wiKSx1PWUuX2Jhc2VQbG90TW9kdWxlcy5sZW5ndGg7XCJ6b29tXCI9PT1lLmRyYWdtb2RlJiYoKGx8fGMpJiYxPT09dXx8bCYmYyYmMj09PXUpJiYoZS5kcmFnbW9kZT1cInBhblwiKX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo2MTh9XSw2MjA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vaG92ZXJsYWJlbF9kZWZhdWx0c1wiKSxhPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2kodCxlLGZ1bmN0aW9uKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9KX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4vaG92ZXJsYWJlbF9kZWZhdWx0c1wiOjYxNSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo2MTh9XSw2MjE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL2xpYi9yZWdleFwiKS5jb3VudGVyLGE9dChcIi4uLy4uL3Bsb3RzL2RvbWFpblwiKS5hdHRyaWJ1dGVzLG89dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHNcIikuaWRSZWdleCxzPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLGw9e3Jvd3M6e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsbWluOjEsZWRpdFR5cGU6XCJwbG90XCJ9LHJvd29yZGVyOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ0b3AgdG8gYm90dG9tXCIsXCJib3R0b20gdG8gdG9wXCJdLGRmbHQ6XCJ0b3AgdG8gYm90dG9tXCIsZWRpdFR5cGU6XCJwbG90XCJ9LGNvbHVtbnM6e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsbWluOjEsZWRpdFR5cGU6XCJwbG90XCJ9LHN1YnBsb3RzOnt2YWxUeXBlOlwiaW5mb19hcnJheVwiLGZyZWVMZW5ndGg6ITAsZGltZW5zaW9uczoyLGl0ZW1zOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbaShcInh5XCIpLnRvU3RyaW5nKCksXCJcIl0sZWRpdFR5cGU6XCJwbG90XCJ9LGVkaXRUeXBlOlwicGxvdFwifSx4YXhlczp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixmcmVlTGVuZ3RoOiEwLGl0ZW1zOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbby54LnRvU3RyaW5nKCksXCJcIl0sZWRpdFR5cGU6XCJwbG90XCJ9LGVkaXRUeXBlOlwicGxvdFwifSx5YXhlczp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixmcmVlTGVuZ3RoOiEwLGl0ZW1zOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbby55LnRvU3RyaW5nKCksXCJcIl0sZWRpdFR5cGU6XCJwbG90XCJ9LGVkaXRUeXBlOlwicGxvdFwifSxwYXR0ZXJuOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJpbmRlcGVuZGVudFwiLFwiY291cGxlZFwiXSxkZmx0OlwiY291cGxlZFwiLGVkaXRUeXBlOlwicGxvdFwifSx4Z2FwOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZWRpdFR5cGU6XCJwbG90XCJ9LHlnYXA6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxlZGl0VHlwZTpcInBsb3RcIn0sZG9tYWluOmEoe25hbWU6XCJncmlkXCIsZWRpdFR5cGU6XCJwbG90XCIsbm9HcmlkQ2VsbDohMH0se30pLHhzaWRlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJib3R0b21cIixcImJvdHRvbSBwbG90XCIsXCJ0b3AgcGxvdFwiLFwidG9wXCJdLGRmbHQ6XCJib3R0b20gcGxvdFwiLGVkaXRUeXBlOlwicGxvdFwifSx5c2lkZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibGVmdFwiLFwibGVmdCBwbG90XCIsXCJyaWdodCBwbG90XCIsXCJyaWdodFwiXSxkZmx0OlwibGVmdCBwbG90XCIsZWRpdFR5cGU6XCJwbG90XCJ9LGVkaXRUeXBlOlwicGxvdFwifTtmdW5jdGlvbiBjKHQsZSxyKXt2YXIgbj1lW3IrXCJheGVzXCJdLGk9T2JqZWN0LmtleXMoKHQuX3NwbG9tQXhlc3x8e30pW3JdfHx7fSk7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bjppLmxlbmd0aD9pOnZvaWQgMH1mdW5jdGlvbiB1KHQsZSxyLG4saSxhKXt2YXIgbz1lKHQrXCJnYXBcIixyKSxzPWUoXCJkb21haW4uXCIrdCk7ZSh0K1wic2lkZVwiLG4pO2Zvcih2YXIgbD1uZXcgQXJyYXkoaSksYz1zWzBdLHU9KHNbMV0tYykvKGktbyksaD11KigxLW8pLGY9MDtmPGk7ZisrKXt2YXIgcD1jK3UqZjtsW2E/aS0xLWY6Zl09W3AscCtoXX1yZXR1cm4gbH1mdW5jdGlvbiBoKHQsZSxyLG4saSl7dmFyIGEsbz1uZXcgQXJyYXkocik7ZnVuY3Rpb24gcyh0LHIpey0xIT09ZS5pbmRleE9mKHIpJiZ2b2lkIDA9PT1uW3JdPyhvW3RdPXIsbltyXT10KTpvW3RdPVwiXCJ9aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IoYT0wO2E8cjthKyspcyhhLHRbYV0pO2Vsc2UgZm9yKHMoMCxpKSxhPTE7YTxyO2ErKylzKGEsaSsoYSsxKSk7cmV0dXJuIG99ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwiY29tcG9uZW50XCIsbmFtZTpcImdyaWRcIixzY2hlbWE6e2xheW91dDp7Z3JpZDpsfX0sbGF5b3V0QXR0cmlidXRlczpsLHNpemVEZWZhdWx0czpmdW5jdGlvbih0LGUpe3ZhciByPXQuZ3JpZHx8e30saT1jKGUscixcInhcIiksYT1jKGUscixcInlcIik7aWYodC5ncmlkfHxpfHxhKXt2YXIgbyxoLGY9QXJyYXkuaXNBcnJheShyLnN1YnBsb3RzKSYmQXJyYXkuaXNBcnJheShyLnN1YnBsb3RzWzBdKSxwPUFycmF5LmlzQXJyYXkoaSksZD1BcnJheS5pc0FycmF5KGEpLGc9cCYmaSE9PXIueGF4ZXMmJmQmJmEhPT1yLnlheGVzO2Y/KG89ci5zdWJwbG90cy5sZW5ndGgsaD1yLnN1YnBsb3RzWzBdLmxlbmd0aCk6KGQmJihvPWEubGVuZ3RoKSxwJiYoaD1pLmxlbmd0aCkpO3ZhciB2PXMubmV3Q29udGFpbmVyKGUsXCJncmlkXCIpLG09QShcInJvd3NcIixvKSx5PUEoXCJjb2x1bW5zXCIsaCk7aWYobSp5PjEpe2Z8fHB8fGR8fFwiaW5kZXBlbmRlbnRcIj09PUEoXCJwYXR0ZXJuXCIpJiYoZj0hMCksdi5faGFzU3VicGxvdEdyaWQ9Zjt2YXIgeCxiLF89XCJ0b3AgdG8gYm90dG9tXCI9PT1BKFwicm93b3JkZXJcIiksdz1mPy4yOi4xLGs9Zj8uMzouMTtnJiZlLl9zcGxvbUdyaWREZmx0JiYoeD1lLl9zcGxvbUdyaWREZmx0LnhzaWRlLGI9ZS5fc3Bsb21HcmlkRGZsdC55c2lkZSksdi5fZG9tYWlucz17eDp1KFwieFwiLEEsdyx4LHkpLHk6dShcInlcIixBLGssYixtLF8pfX1lbHNlIGRlbGV0ZSBlLmdyaWR9ZnVuY3Rpb24gQSh0LGUpe3JldHVybiBuLmNvZXJjZShyLHYsbCx0LGUpfX0sY29udGVudERlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5ncmlkO2lmKHImJnIuX2RvbWFpbnMpe3ZhciBuLGksYSxvLHMsbCx1LGY9dC5ncmlkfHx7fSxwPWUuX3N1YnBsb3RzLGQ9ci5faGFzU3VicGxvdEdyaWQsZz1yLnJvd3Msdj1yLmNvbHVtbnMsbT1cImluZGVwZW5kZW50XCI9PT1yLnBhdHRlcm4seT1yLl9heGlzTWFwPXt9O2lmKGQpe3ZhciB4PWYuc3VicGxvdHN8fFtdO2w9ci5zdWJwbG90cz1uZXcgQXJyYXkoZyk7dmFyIGI9MTtmb3Iobj0wO248ZztuKyspe3ZhciBfPWxbbl09bmV3IEFycmF5KHYpLHc9eFtuXXx8W107Zm9yKGk9MDtpPHY7aSsrKWlmKG0/KHM9MT09PWI/XCJ4eVwiOlwieFwiK2IrXCJ5XCIrYixiKyspOnM9d1tpXSxfW2ldPVwiXCIsLTEhPT1wLmNhcnRlc2lhbi5pbmRleE9mKHMpKXtpZih1PXMuaW5kZXhPZihcInlcIiksYT1zLnNsaWNlKDAsdSksbz1zLnNsaWNlKHUpLHZvaWQgMCE9PXlbYV0mJnlbYV0hPT1pfHx2b2lkIDAhPT15W29dJiZ5W29dIT09biljb250aW51ZTtfW2ldPXMseVthXT1pLHlbb109bn19fWVsc2V7dmFyIGs9YyhlLGYsXCJ4XCIpLEE9YyhlLGYsXCJ5XCIpO3IueGF4ZXM9aChrLHAueGF4aXMsdix5LFwieFwiKSxyLnlheGVzPWgoQSxwLnlheGlzLGcseSxcInlcIil9dmFyIFQ9ci5fYW5jaG9ycz17fSxNPVwidG9wIHRvIGJvdHRvbVwiPT09ci5yb3dvcmRlcjtmb3IodmFyIFMgaW4geSl7dmFyIEUsQyxMLHo9Uy5jaGFyQXQoMCksTz1yW3orXCJzaWRlXCJdO2lmKE8ubGVuZ3RoPDgpVFtTXT1cImZyZWVcIjtlbHNlIGlmKFwieFwiPT09eil7aWYoXCJ0XCI9PT1PLmNoYXJBdCgwKT09PU0/KEU9MCxDPTEsTD1nKTooRT1nLTEsQz0tMSxMPS0xKSxkKXt2YXIgST15W1NdO2ZvcihuPUU7biE9PUw7bis9QylpZigocz1sW25dW0ldKSYmKHU9cy5pbmRleE9mKFwieVwiKSxzLnNsaWNlKDAsdSk9PT1TKSl7VFtTXT1zLnNsaWNlKHUpO2JyZWFrfX1lbHNlIGZvcihuPUU7biE9PUw7bis9QylpZihvPXIueWF4ZXNbbl0sLTEhPT1wLmNhcnRlc2lhbi5pbmRleE9mKFMrbykpe1RbU109bzticmVha319ZWxzZSBpZihcImxcIj09PU8uY2hhckF0KDApPyhFPTAsQz0xLEw9dik6KEU9di0xLEM9LTEsTD0tMSksZCl7dmFyIEQ9eVtTXTtmb3Iobj1FO24hPT1MO24rPUMpaWYoKHM9bFtEXVtuXSkmJih1PXMuaW5kZXhPZihcInlcIikscy5zbGljZSh1KT09PVMpKXtUW1NdPXMuc2xpY2UoMCx1KTticmVha319ZWxzZSBmb3Iobj1FO24hPT1MO24rPUMpaWYoYT1yLnhheGVzW25dLC0xIT09cC5jYXJ0ZXNpYW4uaW5kZXhPZihhK1MpKXtUW1NdPWE7YnJlYWt9fX19fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3JlZ2V4XCI6NzE3LFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHNcIjo3NTUsXCIuLi8uLi9wbG90cy9kb21haW5cIjo3NzR9XSw2MjI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50c1wiKSxpPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLnRlbXBsYXRlZEFycmF5O2UuZXhwb3J0cz1pKFwiaW1hZ2VcIix7dmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LHNvdXJjZTp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGxheWVyOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJiZWxvd1wiLFwiYWJvdmVcIl0sZGZsdDpcImFib3ZlXCIsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0sc2l6ZXg6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjAsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0sc2l6ZXk6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjAsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0sc2l6aW5nOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJmaWxsXCIsXCJjb250YWluXCIsXCJzdHJldGNoXCJdLGRmbHQ6XCJjb250YWluXCIsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0sb3BhY2l0eTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZTpcImFycmF5ZHJhd1wifSx4Ont2YWxUeXBlOlwiYW55XCIsZGZsdDowLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LHk6e3ZhbFR5cGU6XCJhbnlcIixkZmx0OjAsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0seGFuY2hvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibGVmdFwiLFwiY2VudGVyXCIsXCJyaWdodFwiXSxkZmx0OlwibGVmdFwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LHlhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInRvcFwiLFwibWlkZGxlXCIsXCJib3R0b21cIl0sZGZsdDpcInRvcFwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LHhyZWY6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInBhcGVyXCIsbi5pZFJlZ2V4LngudG9TdHJpbmcoKV0sZGZsdDpcInBhcGVyXCIsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0seXJlZjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wicGFwZXJcIixuLmlkUmVnZXgueS50b1N0cmluZygpXSxkZmx0OlwicGFwZXJcIixlZGl0VHlwZTpcImFycmF5ZHJhd1wifSxlZGl0VHlwZTpcImFycmF5ZHJhd1wifSl9LHtcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzXCI6NzU1fV0sNjIzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL2xpYi90b19sb2dfcmFuZ2VcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe2U9ZXx8e307dmFyIG89XCJsb2dcIj09PXImJlwibGluZWFyXCI9PT1lLnR5cGUscz1cImxpbmVhclwiPT09ciYmXCJsb2dcIj09PWUudHlwZTtpZihvfHxzKWZvcih2YXIgbCxjLHU9dC5fZnVsbExheW91dC5pbWFnZXMsaD1lLl9pZC5jaGFyQXQoMCksZj0wO2Y8dS5sZW5ndGg7ZisrKWlmKGM9XCJpbWFnZXNbXCIrZitcIl0uXCIsKGw9dVtmXSlbaCtcInJlZlwiXT09PWUuX2lkKXt2YXIgcD1sW2hdLGQ9bFtcInNpemVcIitoXSxnPW51bGwsdj1udWxsO2lmKG8pe2c9aShwLGUucmFuZ2UpO3ZhciBtPWQvTWF0aC5wb3coMTAsZykvMjt2PTIqTWF0aC5sb2cobStNYXRoLnNxcnQoMSttKm0pKS9NYXRoLkxOMTB9ZWxzZSB2PShnPU1hdGgucG93KDEwLHApKSooTWF0aC5wb3coMTAsZC8yKS1NYXRoLnBvdygxMCwtZC8yKSk7bihnKT9uKHYpfHwodj1udWxsKTooZz1udWxsLHY9bnVsbCksYShjK2gsZyksYShjK1wic2l6ZVwiK2gsdil9fX0se1wiLi4vLi4vbGliL3RvX2xvZ19yYW5nZVwiOjcyNyxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sNjI0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxhPXQoXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIiksbz10KFwiLi9hdHRyaWJ1dGVzXCIpO2Z1bmN0aW9uIHModCxlLHIpe2Z1bmN0aW9uIGEocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX12YXIgcz1hKFwic291cmNlXCIpO2lmKCFhKFwidmlzaWJsZVwiLCEhcykpcmV0dXJuIGU7YShcImxheWVyXCIpLGEoXCJ4YW5jaG9yXCIpLGEoXCJ5YW5jaG9yXCIpLGEoXCJzaXpleFwiKSxhKFwic2l6ZXlcIiksYShcInNpemluZ1wiKSxhKFwib3BhY2l0eVwiKTtmb3IodmFyIGw9e19mdWxsTGF5b3V0OnJ9LGM9W1wieFwiLFwieVwiXSx1PTA7dTwyO3UrKyl7dmFyIGg9Y1t1XSxmPWkuY29lcmNlUmVmKHQsZSxsLGgsXCJwYXBlclwiKTtpZihcInBhcGVyXCIhPT1mKWkuZ2V0RnJvbUlkKGwsZikuX2ltZ0luZGljZXMucHVzaChlLl9pbmRleCk7aS5jb2VyY2VQb3NpdGlvbihlLGwsYSxmLGgsMCl9cmV0dXJuIGV9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7YSh0LGUse25hbWU6XCJpbWFnZXNcIixoYW5kbGVJdGVtRGVmYXVsdHM6c30pfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCI6NzQ1LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuL2F0dHJpYnV0ZXNcIjo2MjJ9XSw2MjU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vZHJhd2luZ1wiKSxhPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxvPXQoXCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixzPXQuX2Z1bGxMYXlvdXQsbD1bXSxjPXt9LHU9W107Zm9yKHI9MDtyPHMuaW1hZ2VzLmxlbmd0aDtyKyspe3ZhciBoPXMuaW1hZ2VzW3JdO2lmKGgudmlzaWJsZSlpZihcImJlbG93XCI9PT1oLmxheWVyJiZcInBhcGVyXCIhPT1oLnhyZWYmJlwicGFwZXJcIiE9PWgueXJlZil7ZT1oLnhyZWYraC55cmVmO3ZhciBmPXMuX3Bsb3RzW2VdO2lmKCFmKXt1LnB1c2goaCk7Y29udGludWV9Zi5tYWlucGxvdCYmKGU9Zi5tYWlucGxvdC5pZCksY1tlXXx8KGNbZV09W10pLGNbZV0ucHVzaChoKX1lbHNlXCJhYm92ZVwiPT09aC5sYXllcj9sLnB1c2goaCk6dS5wdXNoKGgpfXZhciBwPXt4OntsZWZ0OntzaXppbmc6XCJ4TWluXCIsb2Zmc2V0OjB9LGNlbnRlcjp7c2l6aW5nOlwieE1pZFwiLG9mZnNldDotLjV9LHJpZ2h0OntzaXppbmc6XCJ4TWF4XCIsb2Zmc2V0Oi0xfX0seTp7dG9wOntzaXppbmc6XCJZTWluXCIsb2Zmc2V0OjB9LG1pZGRsZTp7c2l6aW5nOlwiWU1pZFwiLG9mZnNldDotLjV9LGJvdHRvbTp7c2l6aW5nOlwiWU1heFwiLG9mZnNldDotMX19fTtmdW5jdGlvbiBkKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKCF0aGlzLmltZ3x8dGhpcy5pbWcuc3JjIT09ZS5zb3VyY2Upe3IuYXR0cihcInhtbG5zXCIsby5zdmcpO3ZhciBpPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHQpe3ZhciBuPW5ldyBJbWFnZTtmdW5jdGlvbiBpKCl7ci5yZW1vdmUoKSx0KCl9dGhpcy5pbWc9bixuLnNldEF0dHJpYnV0ZShcImNyb3NzT3JpZ2luXCIsXCJhbm9ueW1vdXNcIiksbi5vbmVycm9yPWksbi5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO2Uud2lkdGg9dGhpcy53aWR0aCxlLmhlaWdodD10aGlzLmhlaWdodCxlLmdldENvbnRleHQoXCIyZFwiKS5kcmF3SW1hZ2UodGhpcywwLDApO3ZhciBuPWUudG9EYXRhVVJMKFwiaW1hZ2UvcG5nXCIpO3IuYXR0cihcInhsaW5rOmhyZWZcIixuKSx0KCl9LHIub24oXCJlcnJvclwiLGkpLG4uc3JjPWUuc291cmNlfS5iaW5kKHRoaXMpKTt0Ll9wcm9taXNlcy5wdXNoKGkpfX1mdW5jdGlvbiBnKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLG89YS5nZXRGcm9tSWQodCxlLnhyZWYpLGw9YS5nZXRGcm9tSWQodCxlLnlyZWYpLGM9cy5fc2l6ZSx1PW8/TWF0aC5hYnMoby5sMnAoZS5zaXpleCktby5sMnAoMCkpOmUuc2l6ZXgqYy53LGg9bD9NYXRoLmFicyhsLmwycChlLnNpemV5KS1sLmwycCgwKSk6ZS5zaXpleSpjLmgsZj11KnAueFtlLnhhbmNob3JdLm9mZnNldCxkPWgqcC55W2UueWFuY2hvcl0ub2Zmc2V0LGc9cC54W2UueGFuY2hvcl0uc2l6aW5nK3AueVtlLnlhbmNob3JdLnNpemluZyx2PShvP28ucjJwKGUueCkrby5fb2Zmc2V0OmUueCpjLncrYy5sKStmLG09KGw/bC5yMnAoZS55KStsLl9vZmZzZXQ6Yy5oLWUueSpjLmgrYy50KStkO3N3aXRjaChlLnNpemluZyl7Y2FzZVwiZmlsbFwiOmcrPVwiIHNsaWNlXCI7YnJlYWs7Y2FzZVwic3RyZXRjaFwiOmc9XCJub25lXCJ9ci5hdHRyKHt4OnYseTptLHdpZHRoOnUsaGVpZ2h0OmgscHJlc2VydmVBc3BlY3RSYXRpbzpnLG9wYWNpdHk6ZS5vcGFjaXR5fSk7dmFyIHk9KG8/by5faWQ6XCJcIikrKGw/bC5faWQ6XCJcIik7aS5zZXRDbGlwVXJsKHIseT9cImNsaXBcIitzLl91aWQreTpudWxsLHQpfXZhciB2PXMuX2ltYWdlTG93ZXJMYXllci5zZWxlY3RBbGwoXCJpbWFnZVwiKS5kYXRhKHUpLG09cy5faW1hZ2VVcHBlckxheWVyLnNlbGVjdEFsbChcImltYWdlXCIpLmRhdGEobCk7di5lbnRlcigpLmFwcGVuZChcImltYWdlXCIpLG0uZW50ZXIoKS5hcHBlbmQoXCJpbWFnZVwiKSx2LmV4aXQoKS5yZW1vdmUoKSxtLmV4aXQoKS5yZW1vdmUoKSx2LmVhY2goZnVuY3Rpb24odCl7ZC5iaW5kKHRoaXMpKHQpLGcuYmluZCh0aGlzKSh0KX0pLG0uZWFjaChmdW5jdGlvbih0KXtkLmJpbmQodGhpcykodCksZy5iaW5kKHRoaXMpKHQpfSk7dmFyIHk9T2JqZWN0LmtleXMocy5fcGxvdHMpO2ZvcihyPTA7cjx5Lmxlbmd0aDtyKyspe2U9eVtyXTt2YXIgeD1zLl9wbG90c1tlXTtpZih4LmltYWdlbGF5ZXIpe3ZhciBiPXguaW1hZ2VsYXllci5zZWxlY3RBbGwoXCJpbWFnZVwiKS5kYXRhKGNbZV18fFtdKTtiLmVudGVyKCkuYXBwZW5kKFwiaW1hZ2VcIiksYi5leGl0KCkucmVtb3ZlKCksYi5lYWNoKGZ1bmN0aW9uKHQpe2QuYmluZCh0aGlzKSh0KSxnLmJpbmQodGhpcykodCl9KX19fX0se1wiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIjo2NzksXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL2RyYXdpbmdcIjo1OTksZDM6MTU1fV0sNjI2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwiY29tcG9uZW50XCIsbmFtZTpcImltYWdlc1wiLGxheW91dEF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxpbmNsdWRlQmFzZVBsb3Q6dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHNcIikoXCJpbWFnZXNcIiksZHJhdzp0KFwiLi9kcmF3XCIpLGNvbnZlcnRDb29yZHM6dChcIi4vY29udmVydF9jb29yZHNcIil9fSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzXCI6NzU5LFwiLi9hdHRyaWJ1dGVzXCI6NjIyLFwiLi9jb252ZXJ0X2Nvb3Jkc1wiOjYyMyxcIi4vZGVmYXVsdHNcIjo2MjQsXCIuL2RyYXdcIjo2MjV9XSw2Mjc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uL2NvbG9yL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPXtiZ2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcImxlZ2VuZFwifSxib3JkZXJjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOlwibGVnZW5kXCJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDowLGVkaXRUeXBlOlwibGVnZW5kXCJ9LGZvbnQ6bih7ZWRpdFR5cGU6XCJsZWdlbmRcIn0pLG9yaWVudGF0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ2XCIsXCJoXCJdLGRmbHQ6XCJ2XCIsZWRpdFR5cGU6XCJsZWdlbmRcIn0sdHJhY2VvcmRlcjp7dmFsVHlwZTpcImZsYWdsaXN0XCIsZmxhZ3M6W1wicmV2ZXJzZWRcIixcImdyb3VwZWRcIl0sZXh0cmFzOltcIm5vcm1hbFwiXSxlZGl0VHlwZTpcImxlZ2VuZFwifSx0cmFjZWdyb3VwZ2FwOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxMCxlZGl0VHlwZTpcImxlZ2VuZFwifSxpdGVtc2l6aW5nOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ0cmFjZVwiLFwiY29uc3RhbnRcIl0sZGZsdDpcInRyYWNlXCIsZWRpdFR5cGU6XCJsZWdlbmRcIn0seDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjotMixtYXg6MyxkZmx0OjEuMDIsZWRpdFR5cGU6XCJsZWdlbmRcIn0seGFuY2hvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYXV0b1wiLFwibGVmdFwiLFwiY2VudGVyXCIsXCJyaWdodFwiXSxkZmx0OlwibGVmdFwiLGVkaXRUeXBlOlwibGVnZW5kXCJ9LHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46LTIsbWF4OjMsZGZsdDoxLGVkaXRUeXBlOlwibGVnZW5kXCJ9LHlhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImF1dG9cIixcInRvcFwiLFwibWlkZGxlXCIsXCJib3R0b21cIl0sZGZsdDpcImF1dG9cIixlZGl0VHlwZTpcImxlZ2VuZFwifSx1aXJldmlzaW9uOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJub25lXCJ9LHZhbGlnbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1widG9wXCIsXCJtaWRkbGVcIixcImJvdHRvbVwiXSxkZmx0OlwibWlkZGxlXCIsZWRpdFR5cGU6XCJsZWdlbmRcIn0sZWRpdFR5cGU6XCJsZWdlbmRcIn19LHtcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiOjc3NSxcIi4uL2NvbG9yL2F0dHJpYnV0ZXNcIjo1Nzd9XSw2Mjg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e3Njcm9sbEJhcldpZHRoOjYsc2Nyb2xsQmFyTWluSGVpZ2h0OjIwLHNjcm9sbEJhckNvbG9yOlwiIzgwOEJBNFwiLHNjcm9sbEJhck1hcmdpbjo0LHRleHRPZmZzZXRYOjQwfX0se31dLDYyOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKSxvPXQoXCIuL2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXNcIiksbD10KFwiLi9oZWxwZXJzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBjLHUsaCxmLHA9dC5sZWdlbmR8fHt9LGQ9MCxnPSExLHY9XCJub3JtYWxcIixtPTA7bTxyLmxlbmd0aDttKyspe3ZhciB5PXJbbV07eS52aXNpYmxlJiYoKHkuc2hvd2xlZ2VuZHx8eS5fZGZsdFNob3dMZWdlbmQpJiYoZCsrLHkuc2hvd2xlZ2VuZCYmKGc9ITAsKG4udHJhY2VJcyh5LFwicGllXCIpfHwhMD09PXkuX2lucHV0LnNob3dsZWdlbmQpJiZkKyspKSwobi50cmFjZUlzKHksXCJiYXJcIikmJlwic3RhY2tcIj09PWUuYmFybW9kZXx8LTEhPT1bXCJ0b25leHR4XCIsXCJ0b25leHR5XCJdLmluZGV4T2YoeS5maWxsKSkmJih2PWwuaXNHcm91cGVkKHt0cmFjZW9yZGVyOnZ9KT9cImdyb3VwZWQrcmV2ZXJzZWRcIjpcInJldmVyc2VkXCIpLHZvaWQgMCE9PXkubGVnZW5kZ3JvdXAmJlwiXCIhPT15LmxlZ2VuZGdyb3VwJiYodj1sLmlzUmV2ZXJzZWQoe3RyYWNlb3JkZXI6dn0pP1wicmV2ZXJzZWQrZ3JvdXBlZFwiOlwiZ3JvdXBlZFwiKSl9dmFyIHg9aS5jb2VyY2UodCxlLHMsXCJzaG93bGVnZW5kXCIsZyYmZD4xKTtpZighMSE9PXh8fHAudWlyZXZpc2lvbil7dmFyIGI9YS5uZXdDb250YWluZXIoZSxcImxlZ2VuZFwiKTtpZih3KFwidWlyZXZpc2lvblwiLGUudWlyZXZpc2lvbiksITEhPT14KXtpZih3KFwiYmdjb2xvclwiLGUucGFwZXJfYmdjb2xvciksdyhcImJvcmRlcmNvbG9yXCIpLHcoXCJib3JkZXJ3aWR0aFwiKSxpLmNvZXJjZUZvbnQodyxcImZvbnRcIixlLmZvbnQpLHcoXCJvcmllbnRhdGlvblwiKSxcImhcIj09PWIub3JpZW50YXRpb24pe3ZhciBfPXQueGF4aXM7bi5nZXRDb21wb25lbnRNZXRob2QoXCJyYW5nZXNsaWRlclwiLFwiaXNWaXNpYmxlXCIpKF8pPyhjPTAsaD1cImxlZnRcIix1PTEuMSxmPVwiYm90dG9tXCIpOihjPTAsaD1cImxlZnRcIix1PS0uMSxmPVwidG9wXCIpfXcoXCJ0cmFjZW9yZGVyXCIsdiksbC5pc0dyb3VwZWQoZS5sZWdlbmQpJiZ3KFwidHJhY2Vncm91cGdhcFwiKSx3KFwiaXRlbXNpemluZ1wiKSx3KFwieFwiLGMpLHcoXCJ4YW5jaG9yXCIsaCksdyhcInlcIix1KSx3KFwieWFuY2hvclwiLGYpLHcoXCJ2YWxpZ25cIiksaS5ub25lT3JBbGwocCxiLFtcInhcIixcInlcIl0pfX1mdW5jdGlvbiB3KHQsZSl7cmV0dXJuIGkuY29lcmNlKHAsYixvLHQsZSl9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzXCI6ODAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2F0dHJpYnV0ZXNcIjo2MjcsXCIuL2hlbHBlcnNcIjo2MzN9XSw2MzA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL3Bsb3RzL3Bsb3RzXCIpLG89dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLHM9dChcIi4uLy4uL2xpYi9ldmVudHNcIiksbD10KFwiLi4vZHJhZ2VsZW1lbnRcIiksYz10KFwiLi4vZHJhd2luZ1wiKSx1PXQoXCIuLi9jb2xvclwiKSxoPXQoXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIiksZj10KFwiLi9oYW5kbGVfY2xpY2tcIikscD10KFwiLi9jb25zdGFudHNcIiksZD10KFwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9uc1wiKSxnPXQoXCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCIpLHY9Zy5MSU5FX1NQQUNJTkcsbT1nLkZST01fVEwseT1nLkZST01fQlIseD10KFwiLi9nZXRfbGVnZW5kX2RhdGFcIiksYj10KFwiLi9zdHlsZVwiKSxfPXQoXCIuL2hlbHBlcnNcIiksdz1kLkRCTENMSUNLREVMQVk7ZnVuY3Rpb24gayh0LGUscixuLGkpe3ZhciBhPXIuZGF0YSgpWzBdWzBdLnRyYWNlLG89e2V2ZW50Omksbm9kZTpyLm5vZGUoKSxjdXJ2ZU51bWJlcjphLmluZGV4LGV4cGFuZGVkSW5kZXg6YS5fZXhwYW5kZWRJbmRleCxkYXRhOnQuZGF0YSxsYXlvdXQ6dC5sYXlvdXQsZnJhbWVzOnQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMsY29uZmlnOnQuX2NvbnRleHQsZnVsbERhdGE6dC5fZnVsbERhdGEsZnVsbExheW91dDp0Ll9mdWxsTGF5b3V0fTtpZihhLl9ncm91cCYmKG8uZ3JvdXA9YS5fZ3JvdXApLFwicGllXCI9PT1hLnR5cGUmJihvLmxhYmVsPXIuZGF0dW0oKVswXS5sYWJlbCksITEhPT1zLnRyaWdnZXJIYW5kbGVyKHQsXCJwbG90bHlfbGVnZW5kY2xpY2tcIixvKSlpZigxPT09billLl9jbGlja1RpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2Yocix0LG4pfSx3KTtlbHNlIGlmKDI9PT1uKXtlLl9jbGlja1RpbWVvdXQmJmNsZWFyVGltZW91dChlLl9jbGlja1RpbWVvdXQpLHQuX2xlZ2VuZE1vdXNlRG93blRpbWU9MCwhMSE9PXMudHJpZ2dlckhhbmRsZXIodCxcInBsb3RseV9sZWdlbmRkb3VibGVjbGlja1wiLG8pJiZmKHIsdCxuKX19ZnVuY3Rpb24gQSh0LGUscil7dmFyIG49dC5kYXRhKClbMF1bMF0sYT1lLl9mdWxsTGF5b3V0LHM9bi50cmFjZSxsPW8udHJhY2VJcyhzLFwicGllXCIpLHU9cy5pbmRleCxmPWUuX2NvbnRleHQuZWRpdHMubGVnZW5kVGV4dCYmIWwsZD1sP24ubGFiZWw6cy5uYW1lO2EubWV0YSYmKGQ9aS50ZW1wbGF0ZVN0cmluZyhkLHttZXRhOmEubWV0YX0pKTt2YXIgZz1pLmVuc3VyZVNpbmdsZSh0LFwidGV4dFwiLFwibGVnZW5kdGV4dFwiKTtmdW5jdGlvbiBtKHIpe2guY29udmVydFRvVHNwYW5zKHIsZSxmdW5jdGlvbigpeyFmdW5jdGlvbih0LGUpe3ZhciByPXQuZGF0YSgpWzBdWzBdO2lmKCFyLnRyYWNlLnNob3dsZWdlbmQpcmV0dXJuIHZvaWQgdC5yZW1vdmUoKTt2YXIgbixpLGE9dC5zZWxlY3QoXCJnW2NsYXNzKj1tYXRoLWdyb3VwXVwiKSxvPWEubm9kZSgpLHM9ZS5fZnVsbExheW91dC5sZWdlbmQuZm9udC5zaXplKnY7aWYobyl7dmFyIGw9Yy5iQm94KG8pO249bC5oZWlnaHQsaT1sLndpZHRoLGMuc2V0VHJhbnNsYXRlKGEsMCxuLzQpfWVsc2V7dmFyIHU9dC5zZWxlY3QoXCIubGVnZW5kdGV4dFwiKSxmPWgubGluZUNvdW50KHUpLGQ9dS5ub2RlKCk7bj1zKmYsaT1kP2MuYkJveChkKS53aWR0aDowO3ZhciBnPXMqKC4zKygxLWYpLzIpO2gucG9zaXRpb25UZXh0KHUscC50ZXh0T2Zmc2V0WCxnKX1yLmxpbmVIZWlnaHQ9cyxyLmhlaWdodD1NYXRoLm1heChuLDE2KSszLHIud2lkdGg9aX0odCxlKX0pfWcuYXR0cihcInRleHQtYW5jaG9yXCIsXCJzdGFydFwiKS5jbGFzc2VkKFwidXNlci1zZWxlY3Qtbm9uZVwiLCEwKS5jYWxsKGMuZm9udCxhLmxlZ2VuZC5mb250KS50ZXh0KGY/VChkLHIpOmQpLGgucG9zaXRpb25UZXh0KGcscC50ZXh0T2Zmc2V0WCwwKSxmP2cuY2FsbChoLm1ha2VFZGl0YWJsZSx7Z2Q6ZSx0ZXh0OmR9KS5jYWxsKG0pLm9uKFwiZWRpdFwiLGZ1bmN0aW9uKHQpe3RoaXMudGV4dChUKHQscikpLmNhbGwobSk7dmFyIGE9bi50cmFjZS5fZnVsbElucHV0fHx7fSxzPXt9O2lmKG8uaGFzVHJhbnNmb3JtKGEsXCJncm91cGJ5XCIpKXt2YXIgbD1vLmdldFRyYW5zZm9ybUluZGljZXMoYSxcImdyb3VwYnlcIiksYz1sW2wubGVuZ3RoLTFdLGg9aS5rZXllZENvbnRhaW5lcihhLFwidHJhbnNmb3Jtc1tcIitjK1wiXS5zdHlsZXNcIixcInRhcmdldFwiLFwidmFsdWUubmFtZVwiKTtoLnNldChuLnRyYWNlLl9ncm91cCx0KSxzPWguY29uc3RydWN0VXBkYXRlKCl9ZWxzZSBzLm5hbWU9dDtyZXR1cm4gby5jYWxsKFwiX2d1aVJlc3R5bGVcIixlLHMsdSl9KTptKGcpfWZ1bmN0aW9uIFQodCxlKXt2YXIgcj1NYXRoLm1heCg0LGUpO2lmKHQmJnQudHJpbSgpLmxlbmd0aD49ci8yKXJldHVybiB0O2Zvcih2YXIgbj1yLSh0PXR8fFwiXCIpLmxlbmd0aDtuPjA7bi0tKXQrPVwiIFwiO3JldHVybiB0fWZ1bmN0aW9uIE0odCxlKXt2YXIgcixhPTEsbz1pLmVuc3VyZVNpbmdsZSh0LFwicmVjdFwiLFwibGVnZW5kdG9nZ2xlXCIsZnVuY3Rpb24odCl7dC5zdHlsZShcImN1cnNvclwiLFwicG9pbnRlclwiKS5hdHRyKFwicG9pbnRlci1ldmVudHNcIixcImFsbFwiKS5jYWxsKHUuZmlsbCxcInJnYmEoMCwwLDAsMClcIil9KTtvLm9uKFwibW91c2Vkb3duXCIsZnVuY3Rpb24oKXsocj0obmV3IERhdGUpLmdldFRpbWUoKSktZS5fbGVnZW5kTW91c2VEb3duVGltZTx3P2ErPTE6KGE9MSxlLl9sZWdlbmRNb3VzZURvd25UaW1lPXIpfSksby5vbihcIm1vdXNldXBcIixmdW5jdGlvbigpe2lmKCFlLl9kcmFnZ2VkJiYhZS5fZWRpdGluZyl7dmFyIHI9ZS5fZnVsbExheW91dC5sZWdlbmQ7KG5ldyBEYXRlKS5nZXRUaW1lKCktZS5fbGVnZW5kTW91c2VEb3duVGltZT53JiYoYT1NYXRoLm1heChhLTEsMSkpLGsoZSxyLHQsYSxuLmV2ZW50KX19KX1mdW5jdGlvbiBTKHQsZSxyKXt2YXIgYT10Ll9mdWxsTGF5b3V0LG89YS5sZWdlbmQscz1vLmJvcmRlcndpZHRoLGw9Xy5pc0dyb3VwZWQobyksdT0wO2lmKG8uX3dpZHRoPTAsby5faGVpZ2h0PTAsXy5pc1ZlcnRpY2FsKG8pKWwmJmUuZWFjaChmdW5jdGlvbih0LGUpe2Muc2V0VHJhbnNsYXRlKHRoaXMsMCxlKm8udHJhY2Vncm91cGdhcCl9KSxyLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPWUuaGVpZ2h0LG49ZS53aWR0aDtjLnNldFRyYW5zbGF0ZSh0aGlzLHMsNStzK28uX2hlaWdodCtyLzIpLG8uX2hlaWdodCs9cixvLl93aWR0aD1NYXRoLm1heChvLl93aWR0aCxuKX0pLG8uX3dpZHRoKz00NSsyKnMsby5faGVpZ2h0Kz0xMCsyKnMsbCYmKG8uX2hlaWdodCs9KG8uX2xncm91cHNMZW5ndGgtMSkqby50cmFjZWdyb3VwZ2FwKSx1PTQwO2Vsc2UgaWYobCl7dmFyIGgsZj0wLHA9MCxkPWUuZGF0YSgpLGc9MDtmb3IoaD0wO2g8ZC5sZW5ndGg7aCsrKXt2YXIgdj1kW2hdLG09di5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0ud2lkdGh9KSx5PWkuYWdnTnVtcyhNYXRoLm1heCxudWxsLG0pLHg9di5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlWzBdLmhlaWdodH0sMCk7cD1NYXRoLm1heChwLHkpLGY9TWF0aC5tYXgoZix4KSxnPU1hdGgubWF4KGcsdi5sZW5ndGgpfXArPTUscCs9NDA7dmFyIGI9W28uX3dpZHRoXSx3PVtdLGs9MDtmb3IoaD0wO2g8ZC5sZW5ndGg7aCsrKXthLl9zaXplLnc8cytvLl93aWR0aCs1K3A/KGJbYi5sZW5ndGgtMV09YlswXSxvLl93aWR0aD1wLGsrKyk6by5fd2lkdGgrPXArczt2YXIgQT1rKmY7QSs9az4wP28udHJhY2Vncm91cGdhcDowLHcucHVzaChBKSxiLnB1c2goby5fd2lkdGgpfWUuZWFjaChmdW5jdGlvbih0LGUpe2Muc2V0VHJhbnNsYXRlKHRoaXMsYltlXSx3W2VdKX0pLGUuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbChcImcudHJhY2VzXCIpLGU9MDt0LmVhY2goZnVuY3Rpb24odCl7dmFyIHI9dFswXS5oZWlnaHQ7Yy5zZXRUcmFuc2xhdGUodGhpcywwLDUrcytlK3IvMiksZSs9cn0pfSk7dmFyIFQ9d1t3Lmxlbmd0aC0xXStmO28uX2hlaWdodD0xMCsyKnMrVDt2YXIgTT1NYXRoLm1heC5hcHBseShudWxsLGIpO28uX3dpZHRoPU0rcCs0MCxvLl93aWR0aCs9MipzfWVsc2V7dmFyIFM9MCxFPTAsQz0wLEw9MCx6PTA7ci5lYWNoKGZ1bmN0aW9uKHQpe0M9TWF0aC5tYXgoNDArdFswXS53aWR0aCxDKSx6Kz00MCt0WzBdLndpZHRoKzV9KTt2YXIgTz1hLl9zaXplLnc+cyt6LTU7ci5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj1PPzQwK3RbMF0ud2lkdGg6QztzK0wrNStyPmEuX3NpemUudyYmKEw9MCxTKz1FLG8uX2hlaWdodCs9RSxFPTApLGMuc2V0VHJhbnNsYXRlKHRoaXMscytMLDUrcytlLmhlaWdodC8yK1MpLG8uX3dpZHRoKz01K3IsTCs9NStyLEU9TWF0aC5tYXgoZS5oZWlnaHQsRSl9KSxPP28uX2hlaWdodD1FOm8uX2hlaWdodCs9RSxvLl93aWR0aCs9MipzLG8uX2hlaWdodCs9MTArMipzfW8uX3dpZHRoPU1hdGguY2VpbChvLl93aWR0aCksby5faGVpZ2h0PU1hdGguY2VpbChvLl9oZWlnaHQpO3ZhciBJPXQuX2NvbnRleHQuZWRpdHMubGVnZW5kVGV4dHx8dC5fY29udGV4dC5lZGl0cy5sZWdlbmRQb3NpdGlvbjtyLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPW4uc2VsZWN0KHRoaXMpLnNlbGVjdChcIi5sZWdlbmR0b2dnbGVcIik7Yy5zZXRSZWN0KHIsMCwtZS5oZWlnaHQvMiwoST8wOm8uX3dpZHRoKSt1LGUuaGVpZ2h0KX0pfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5fZnVsbExheW91dC5sZWdlbmQscj1cImxlZnRcIjtpLmlzUmlnaHRBbmNob3IoZSk/cj1cInJpZ2h0XCI6aS5pc0NlbnRlckFuY2hvcihlKSYmKHI9XCJjZW50ZXJcIik7dmFyIG49XCJ0b3BcIjtpLmlzQm90dG9tQW5jaG9yKGUpP249XCJib3R0b21cIjppLmlzTWlkZGxlQW5jaG9yKGUpJiYobj1cIm1pZGRsZVwiKSxhLmF1dG9NYXJnaW4odCxcImxlZ2VuZFwiLHt4OmUueCx5OmUueSxsOmUuX3dpZHRoKm1bcl0scjplLl93aWR0aCp5W3JdLGI6ZS5faGVpZ2h0Knlbbl0sdDplLl9oZWlnaHQqbVtuXX0pfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9XCJsZWdlbmRcIitlLl91aWQ7aWYoZS5faW5mb2xheWVyJiZ0LmNhbGNkYXRhKXt0Ll9sZWdlbmRNb3VzZURvd25UaW1lfHwodC5fbGVnZW5kTW91c2VEb3duVGltZT0wKTt2YXIgcz1lLmxlZ2VuZCxoPWUuc2hvd2xlZ2VuZCYmeCh0LmNhbGNkYXRhLHMpLGY9ZS5oaWRkZW5sYWJlbHN8fFtdO2lmKCFlLnNob3dsZWdlbmR8fCFoLmxlbmd0aClyZXR1cm4gZS5faW5mb2xheWVyLnNlbGVjdEFsbChcIi5sZWdlbmRcIikucmVtb3ZlKCksZS5fdG9wZGVmcy5zZWxlY3QoXCIjXCIrcikucmVtb3ZlKCksdm9pZCBhLmF1dG9NYXJnaW4odCxcImxlZ2VuZFwiKTtmb3IodmFyIGQ9MCxnPTA7ZzxoLmxlbmd0aDtnKyspZm9yKHZhciB2PTA7djxoW2ddLmxlbmd0aDt2Kyspe3ZhciBfPWhbZ11bdl1bMF0sdz1fLnRyYWNlLFQ9by50cmFjZUlzKHcsXCJwaWVcIik/Xy5sYWJlbDp3Lm5hbWU7ZD1NYXRoLm1heChkLFQmJlQubGVuZ3RofHwwKX12YXIgQz0hMSxMPWkuZW5zdXJlU2luZ2xlKGUuX2luZm9sYXllcixcImdcIixcImxlZ2VuZFwiLGZ1bmN0aW9uKHQpe3QuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsXCJhbGxcIiksQz0hMH0pLHo9aS5lbnN1cmVTaW5nbGVCeUlkKGUuX3RvcGRlZnMsXCJjbGlwUGF0aFwiLHIsZnVuY3Rpb24odCl7dC5hcHBlbmQoXCJyZWN0XCIpfSksTz1pLmVuc3VyZVNpbmdsZShMLFwicmVjdFwiLFwiYmdcIixmdW5jdGlvbih0KXt0LmF0dHIoXCJzaGFwZS1yZW5kZXJpbmdcIixcImNyaXNwRWRnZXNcIil9KTtPLmNhbGwodS5zdHJva2Uscy5ib3JkZXJjb2xvcikuY2FsbCh1LmZpbGwscy5iZ2NvbG9yKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLHMuYm9yZGVyd2lkdGgrXCJweFwiKTt2YXIgST1pLmVuc3VyZVNpbmdsZShMLFwiZ1wiLFwic2Nyb2xsYm94XCIpLEQ9aS5lbnN1cmVTaW5nbGUoTCxcInJlY3RcIixcInNjcm9sbGJhclwiLGZ1bmN0aW9uKHQpe3QuYXR0cih7cng6MjAscnk6Myx3aWR0aDowLGhlaWdodDowfSkuY2FsbCh1LmZpbGwsXCIjODA4QkE0XCIpfSksUD1JLnNlbGVjdEFsbChcImcuZ3JvdXBzXCIpLmRhdGEoaCk7UC5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsXCJncm91cHNcIiksUC5leGl0KCkucmVtb3ZlKCk7dmFyIFI9UC5zZWxlY3RBbGwoXCJnLnRyYWNlc1wiKS5kYXRhKGkuaWRlbnRpdHkpO1IuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLFwidHJhY2VzXCIpLFIuZXhpdCgpLnJlbW92ZSgpLFIuc3R5bGUoXCJvcGFjaXR5XCIsZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZTtyZXR1cm4gby50cmFjZUlzKGUsXCJwaWVcIik/LTEhPT1mLmluZGV4T2YodFswXS5sYWJlbCk/LjU6MTpcImxlZ2VuZG9ubHlcIj09PWUudmlzaWJsZT8uNToxfSkuZWFjaChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLmNhbGwoQSx0LGQpfSkuY2FsbChiLHQpLmVhY2goZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5jYWxsKE0sdCl9KSxpLnN5bmNPckFzeW5jKFthLnByZXZpb3VzUHJvbWlzZXMsZnVuY3Rpb24oKXtDJiYoUyh0LFAsUiksRSh0KSk7dmFyIHU9ZS53aWR0aCxoPWUuaGVpZ2h0O1ModCxQLFIpLHMuX2hlaWdodD5oP2Z1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQubGVnZW5kLHI9XCJsZWZ0XCI7aS5pc1JpZ2h0QW5jaG9yKGUpP3I9XCJyaWdodFwiOmkuaXNDZW50ZXJBbmNob3IoZSkmJihyPVwiY2VudGVyXCIpO2EuYXV0b01hcmdpbih0LFwibGVnZW5kXCIse3g6ZS54LHk6LjUsbDplLl93aWR0aCptW3JdLHI6ZS5fd2lkdGgqeVtyXSxiOjAsdDowfSl9KHQpOkUodCk7dmFyIGY9ZS5fc2l6ZSxkPWYubCtmLncqcy54LGc9Zi50K2YuaCooMS1zLnkpO2kuaXNSaWdodEFuY2hvcihzKT9kLT1zLl93aWR0aDppLmlzQ2VudGVyQW5jaG9yKHMpJiYoZC09cy5fd2lkdGgvMiksaS5pc0JvdHRvbUFuY2hvcihzKT9nLT1zLl9oZWlnaHQ6aS5pc01pZGRsZUFuY2hvcihzKSYmKGctPXMuX2hlaWdodC8yKTt2YXIgdj1zLl93aWR0aCx4PWYudzt2Png/KGQ9Zi5sLHY9eCk6KGQrdj51JiYoZD11LXYpLGQ8MCYmKGQ9MCksdj1NYXRoLm1pbih1LWQscy5fd2lkdGgpKTt2YXIgYixfLHcsQSxUPXMuX2hlaWdodCxNPWYuaDtpZihUPk0/KGc9Zi50LFQ9TSk6KGcrVD5oJiYoZz1oLVQpLGc8MCYmKGc9MCksVD1NYXRoLm1pbihoLWcscy5faGVpZ2h0KSksYy5zZXRUcmFuc2xhdGUoTCxkLGcpLEQub24oXCIuZHJhZ1wiLG51bGwpLEwub24oXCJ3aGVlbFwiLG51bGwpLHMuX2hlaWdodDw9VHx8dC5fY29udGV4dC5zdGF0aWNQbG90KU8uYXR0cih7d2lkdGg6di1zLmJvcmRlcndpZHRoLGhlaWdodDpULXMuYm9yZGVyd2lkdGgseDpzLmJvcmRlcndpZHRoLzIseTpzLmJvcmRlcndpZHRoLzJ9KSxjLnNldFRyYW5zbGF0ZShJLDAsMCksei5zZWxlY3QoXCJyZWN0XCIpLmF0dHIoe3dpZHRoOnYtMipzLmJvcmRlcndpZHRoLGhlaWdodDpULTIqcy5ib3JkZXJ3aWR0aCx4OnMuYm9yZGVyd2lkdGgseTpzLmJvcmRlcndpZHRofSksYy5zZXRDbGlwVXJsKEkscix0KSxjLnNldFJlY3QoRCwwLDAsMCwwKSxkZWxldGUgcy5fc2Nyb2xsWTtlbHNle3ZhciBGLEIsTj1NYXRoLm1heChwLnNjcm9sbEJhck1pbkhlaWdodCxUKlQvcy5faGVpZ2h0KSxqPVQtTi0yKnAuc2Nyb2xsQmFyTWFyZ2luLFY9cy5faGVpZ2h0LVQsVT1qL1YscT1NYXRoLm1pbihzLl9zY3JvbGxZfHwwLFYpO08uYXR0cih7d2lkdGg6di0yKnMuYm9yZGVyd2lkdGgrcC5zY3JvbGxCYXJXaWR0aCtwLnNjcm9sbEJhck1hcmdpbixoZWlnaHQ6VC1zLmJvcmRlcndpZHRoLHg6cy5ib3JkZXJ3aWR0aC8yLHk6cy5ib3JkZXJ3aWR0aC8yfSksei5zZWxlY3QoXCJyZWN0XCIpLmF0dHIoe3dpZHRoOnYtMipzLmJvcmRlcndpZHRoK3Auc2Nyb2xsQmFyV2lkdGgrcC5zY3JvbGxCYXJNYXJnaW4saGVpZ2h0OlQtMipzLmJvcmRlcndpZHRoLHg6cy5ib3JkZXJ3aWR0aCx5OnMuYm9yZGVyd2lkdGgrcX0pLGMuc2V0Q2xpcFVybChJLHIsdCksRyhxLE4sVSksTC5vbihcIndoZWVsXCIsZnVuY3Rpb24oKXtHKHE9aS5jb25zdHJhaW4ocy5fc2Nyb2xsWStuLmV2ZW50LmRlbHRhWS9qKlYsMCxWKSxOLFUpLDAhPT1xJiZxIT09ViYmbi5ldmVudC5wcmV2ZW50RGVmYXVsdCgpfSk7dmFyIEg9bi5iZWhhdmlvci5kcmFnKCkub24oXCJkcmFnc3RhcnRcIixmdW5jdGlvbigpe0Y9bi5ldmVudC5zb3VyY2VFdmVudC5jbGllbnRZLEI9cX0pLm9uKFwiZHJhZ1wiLGZ1bmN0aW9uKCl7dmFyIHQ9bi5ldmVudC5zb3VyY2VFdmVudDsyPT09dC5idXR0b25zfHx0LmN0cmxLZXl8fEcocT1pLmNvbnN0cmFpbigodC5jbGllbnRZLUYpL1UrQiwwLFYpLE4sVSl9KTtELmNhbGwoSCl9ZnVuY3Rpb24gRyhlLHIsbil7cy5fc2Nyb2xsWT10Ll9mdWxsTGF5b3V0LmxlZ2VuZC5fc2Nyb2xsWT1lLGMuc2V0VHJhbnNsYXRlKEksMCwtZSksYy5zZXRSZWN0KEQsdixwLnNjcm9sbEJhck1hcmdpbitlKm4scC5zY3JvbGxCYXJXaWR0aCxyKSx6LnNlbGVjdChcInJlY3RcIikuYXR0cih7eTpzLmJvcmRlcndpZHRoK2V9KX10Ll9jb250ZXh0LmVkaXRzLmxlZ2VuZFBvc2l0aW9uJiYoTC5jbGFzc2VkKFwiY3Vyc29yLW1vdmVcIiwhMCksbC5pbml0KHtlbGVtZW50Okwubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKCl7dmFyIHQ9Yy5nZXRUcmFuc2xhdGUoTCk7dz10LngsQT10Lnl9LG1vdmVGbjpmdW5jdGlvbih0LGUpe3ZhciByPXcrdCxuPUErZTtjLnNldFRyYW5zbGF0ZShMLHIsbiksYj1sLmFsaWduKHIsMCxmLmwsZi5sK2YudyxzLnhhbmNob3IpLF89bC5hbGlnbihuLDAsZi50K2YuaCxmLnQscy55YW5jaG9yKX0sZG9uZUZuOmZ1bmN0aW9uKCl7dm9pZCAwIT09YiYmdm9pZCAwIT09XyYmby5jYWxsKFwiX2d1aVJlbGF5b3V0XCIsdCx7XCJsZWdlbmQueFwiOmIsXCJsZWdlbmQueVwiOl99KX0sY2xpY2tGbjpmdW5jdGlvbihyLG4pe3ZhciBpPWUuX2luZm9sYXllci5zZWxlY3RBbGwoXCJnLnRyYWNlc1wiKS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBuLmNsaWVudFg+PXQubGVmdCYmbi5jbGllbnRYPD10LnJpZ2h0JiZuLmNsaWVudFk+PXQudG9wJiZuLmNsaWVudFk8PXQuYm90dG9tfSk7aS5zaXplKCk+MCYmayh0LEwsaSxyLG4pfX0pKX1dLHQpfX19LHtcIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIjo2NzMsXCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zXCI6Njc3LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2V2ZW50c1wiOjY5MCxcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiOjcyNSxcIi4uLy4uL3Bsb3RzL3Bsb3RzXCI6ODEwLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9jb2xvclwiOjU3OCxcIi4uL2RyYWdlbGVtZW50XCI6NTk2LFwiLi4vZHJhd2luZ1wiOjU5OSxcIi4vY29uc3RhbnRzXCI6NjI4LFwiLi9nZXRfbGVnZW5kX2RhdGFcIjo2MzEsXCIuL2hhbmRsZV9jbGlja1wiOjYzMixcIi4vaGVscGVyc1wiOjYzMyxcIi4vc3R5bGVcIjo2MzUsZDM6MTU1fV0sNjMxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4vaGVscGVyc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhLG89e30scz1bXSxsPSExLGM9e30sdT0wO2Z1bmN0aW9uIGgodCxyKXtpZihcIlwiIT09dCYmaS5pc0dyb3VwZWQoZSkpLTE9PT1zLmluZGV4T2YodCk/KHMucHVzaCh0KSxsPSEwLG9bdF09W1tyXV0pOm9bdF0ucHVzaChbcl0pO2Vsc2V7dmFyIG49XCJ+fmlcIit1O3MucHVzaChuKSxvW25dPVtbcl1dLHUrK319Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGY9dFtyXSxwPWZbMF0sZD1wLnRyYWNlLGc9ZC5sZWdlbmRncm91cDtpZihkLnZpc2libGUmJmQuc2hvd2xlZ2VuZClpZihuLnRyYWNlSXMoZCxcInBpZVwiKSlmb3IoY1tnXXx8KGNbZ109e30pLGE9MDthPGYubGVuZ3RoO2ErKyl7dmFyIHY9ZlthXS5sYWJlbDtjW2ddW3ZdfHwoaChnLHtsYWJlbDp2LGNvbG9yOmZbYV0uY29sb3IsaTpmW2FdLmksdHJhY2U6ZCxwdHM6ZlthXS5wdHN9KSxjW2ddW3ZdPSEwKX1lbHNlIGgoZyxwKX1pZighcy5sZW5ndGgpcmV0dXJuW107dmFyIG0seSx4PXMubGVuZ3RoO2lmKGwmJmkuaXNHcm91cGVkKGUpKWZvcih5PW5ldyBBcnJheSh4KSxyPTA7cjx4O3IrKyltPW9bc1tyXV0seVtyXT1pLmlzUmV2ZXJzZWQoZSk/bS5yZXZlcnNlKCk6bTtlbHNle2Zvcih5PVtuZXcgQXJyYXkoeCldLHI9MDtyPHg7cisrKW09b1tzW3JdXVswXSx5WzBdW2kuaXNSZXZlcnNlZChlKT94LXItMTpyXT1tO3g9MX1yZXR1cm4gZS5fbGdyb3Vwc0xlbmd0aD14LHl9fSx7XCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vaGVscGVyc1wiOjYzM31dLDYzMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcmVnaXN0cnlcIiksYT0hMDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKCFlLl9kcmFnZ2VkJiYhZS5fZWRpdGluZyl7dmFyIG8scyxsLGMsdSxoPWUuX2Z1bGxMYXlvdXQuaGlkZGVubGFiZWxzP2UuX2Z1bGxMYXlvdXQuaGlkZGVubGFiZWxzLnNsaWNlKCk6W10sZj10LmRhdGEoKVswXVswXSxwPWUuX2Z1bGxEYXRhLGQ9Zi50cmFjZSxnPWQubGVnZW5kZ3JvdXAsdj17fSxtPVtdLHk9W10seD1bXTtpZigxPT09ciYmYSYmZS5kYXRhJiZlLl9jb250ZXh0LnNob3dUaXBzPyhuLm5vdGlmaWVyKG4uXyhlLFwiRG91YmxlLWNsaWNrIG9uIGxlZ2VuZCB0byBpc29sYXRlIG9uZSB0cmFjZVwiKSxcImxvbmdcIiksYT0hMSk6YT0hMSxpLnRyYWNlSXMoZCxcInBpZVwiKSl7dmFyIGI9Zi5sYWJlbCxfPWguaW5kZXhPZihiKTsxPT09cj8tMT09PV8/aC5wdXNoKGIpOmguc3BsaWNlKF8sMSk6Mj09PXImJihoPVtdLGUuY2FsY2RhdGFbMF0uZm9yRWFjaChmdW5jdGlvbih0KXtiIT09dC5sYWJlbCYmaC5wdXNoKHQubGFiZWwpfSksZS5fZnVsbExheW91dC5oaWRkZW5sYWJlbHMmJmUuX2Z1bGxMYXlvdXQuaGlkZGVubGFiZWxzLmxlbmd0aD09PWgubGVuZ3RoJiYtMT09PV8mJihoPVtdKSksaS5jYWxsKFwiX2d1aVJlbGF5b3V0XCIsZSxcImhpZGRlbmxhYmVsc1wiLGgpfWVsc2V7dmFyIHcsaz1nJiZnLmxlbmd0aCxBPVtdO2lmKGspZm9yKG89MDtvPHAubGVuZ3RoO28rKykodz1wW29dKS52aXNpYmxlJiZ3LmxlZ2VuZGdyb3VwPT09ZyYmQS5wdXNoKG8pO2lmKDE9PT1yKXt2YXIgVDtzd2l0Y2goZC52aXNpYmxlKXtjYXNlITA6VD1cImxlZ2VuZG9ubHlcIjticmVhaztjYXNlITE6VD0hMTticmVhaztjYXNlXCJsZWdlbmRvbmx5XCI6VD0hMH1pZihrKWZvcihvPTA7bzxwLmxlbmd0aDtvKyspITEhPT1wW29dLnZpc2libGUmJnBbb10ubGVnZW5kZ3JvdXA9PT1nJiZPKHBbb10sVCk7ZWxzZSBPKGQsVCl9ZWxzZSBpZigyPT09cil7dmFyIE0sUyxFPSEwO2ZvcihvPTA7bzxwLmxlbmd0aDtvKyspaWYoIShwW29dPT09ZCkmJiEoTT1rJiZwW29dLmxlZ2VuZGdyb3VwPT09ZykmJiEwPT09cFtvXS52aXNpYmxlJiYhaS50cmFjZUlzKHBbb10sXCJub3RMZWdlbmRJc29sYXRhYmxlXCIpKXtFPSExO2JyZWFrfWZvcihvPTA7bzxwLmxlbmd0aDtvKyspaWYoITEhPT1wW29dLnZpc2libGUmJiFpLnRyYWNlSXMocFtvXSxcIm5vdExlZ2VuZElzb2xhdGFibGVcIikpc3dpdGNoKGQudmlzaWJsZSl7Y2FzZVwibGVnZW5kb25seVwiOk8ocFtvXSwhMCk7YnJlYWs7Y2FzZSEwOlM9ISFFfHxcImxlZ2VuZG9ubHlcIixNPXBbb109PT1kfHxrJiZwW29dLmxlZ2VuZGdyb3VwPT09ZyxPKHBbb10sISFNfHxTKX19Zm9yKG89MDtvPHkubGVuZ3RoO28rKylpZihsPXlbb10pe3ZhciBDPWwuY29uc3RydWN0VXBkYXRlKCksTD1PYmplY3Qua2V5cyhDKTtmb3Iocz0wO3M8TC5sZW5ndGg7cysrKWM9TFtzXSwodltjXT12W2NdfHxbXSlbeFtvXV09Q1tjXX1mb3IodT1PYmplY3Qua2V5cyh2KSxvPTA7bzx1Lmxlbmd0aDtvKyspZm9yKGM9dVtvXSxzPTA7czxtLmxlbmd0aDtzKyspdltjXS5oYXNPd25Qcm9wZXJ0eShzKXx8KHZbY11bc109dm9pZCAwKTtpLmNhbGwoXCJfZ3VpUmVzdHlsZVwiLGUsdixtKX19ZnVuY3Rpb24geih0LGUscil7dmFyIG49bS5pbmRleE9mKHQpLGk9dltlXTtyZXR1cm4gaXx8KGk9dltlXT1bXSksLTE9PT1tLmluZGV4T2YodCkmJihtLnB1c2godCksbj1tLmxlbmd0aC0xKSxpW25dPXIsbn1mdW5jdGlvbiBPKHQsZSl7dmFyIHI9dC5fZnVsbElucHV0O2lmKGkuaGFzVHJhbnNmb3JtKHIsXCJncm91cGJ5XCIpKXt2YXIgYT15W3IuaW5kZXhdO2lmKCFhKXt2YXIgbz1pLmdldFRyYW5zZm9ybUluZGljZXMocixcImdyb3VwYnlcIikscz1vW28ubGVuZ3RoLTFdO2E9bi5rZXllZENvbnRhaW5lcihyLFwidHJhbnNmb3Jtc1tcIitzK1wiXS5zdHlsZXNcIixcInRhcmdldFwiLFwidmFsdWUudmlzaWJsZVwiKSx5W3IuaW5kZXhdPWF9dmFyIGw9YS5nZXQodC5fZ3JvdXApO3ZvaWQgMD09PWwmJihsPSEwKSwhMSE9PWwmJmEuc2V0KHQuX2dyb3VwLGUpLHhbci5pbmRleF09eihyLmluZGV4LFwidmlzaWJsZVwiLCExIT09ci52aXNpYmxlKX1lbHNle3ZhciBjPSExIT09ci52aXNpYmxlJiZlO3ooci5pbmRleCxcInZpc2libGVcIixjKX19fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4Mjl9XSw2MzM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLmlzR3JvdXBlZD1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PSh0LnRyYWNlb3JkZXJ8fFwiXCIpLmluZGV4T2YoXCJncm91cGVkXCIpfSxyLmlzVmVydGljYWw9ZnVuY3Rpb24odCl7cmV0dXJuXCJoXCIhPT10Lm9yaWVudGF0aW9ufSxyLmlzUmV2ZXJzZWQ9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT0odC50cmFjZW9yZGVyfHxcIlwiKS5pbmRleE9mKFwicmV2ZXJzZWRcIil9fSx7fV0sNjM0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwiY29tcG9uZW50XCIsbmFtZTpcImxlZ2VuZFwiLGxheW91dEF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxkcmF3OnQoXCIuL2RyYXdcIiksc3R5bGU6dChcIi4vc3R5bGVcIil9fSx7XCIuL2F0dHJpYnV0ZXNcIjo2MjcsXCIuL2RlZmF1bHRzXCI6NjI5LFwiLi9kcmF3XCI6NjMwLFwiLi9zdHlsZVwiOjYzNX1dLDYzNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxhPXQoXCIuLi8uLi9saWJcIiksbz10KFwiLi4vZHJhd2luZ1wiKSxzPXQoXCIuLi9jb2xvclwiKSxsPXQoXCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlc1wiKSxjPXQoXCIuLi8uLi90cmFjZXMvcGllL3N0eWxlX29uZVwiKSx1PXQoXCIuLi8uLi90cmFjZXMvcGllL2hlbHBlcnNcIikuY2FzdE9wdGlvbixoPTEyLGY9NSxwPTIsZD0xMCxnPTU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5fZnVsbExheW91dC5sZWdlbmQsdj1cImNvbnN0YW50XCI9PT1yLml0ZW1zaXppbmc7ZnVuY3Rpb24gbSh0LGUscixuKXt2YXIgaTtpZih0KzEpaT10O2Vsc2V7aWYoIShlJiZlLndpZHRoPjApKXJldHVybiAwO2k9ZS53aWR0aH1yZXR1cm4gdj9uOk1hdGgubWluKGkscil9dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLGk9YS5lbnN1cmVTaW5nbGUoZSxcImdcIixcImxheWVyc1wiKTtpLnN0eWxlKFwib3BhY2l0eVwiLHRbMF0udHJhY2Uub3BhY2l0eSk7dmFyIG89ci52YWxpZ24scz10WzBdLmxpbmVIZWlnaHQsbD10WzBdLmhlaWdodDtpZihcIm1pZGRsZVwiIT09byYmcyYmbCl7dmFyIGM9e3RvcDoxLGJvdHRvbTotMX1bb10qKC41KihzLWwrMykpO2kuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKDAsXCIrYytcIilcIil9ZWxzZSBpLmF0dHIoXCJ0cmFuc2Zvcm1cIixudWxsKTtpLnNlbGVjdEFsbChcImcubGVnZW5kZmlsbFwiKS5kYXRhKFt0XSkuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJsZWdlbmRmaWxsXCIsITApLGkuc2VsZWN0QWxsKFwiZy5sZWdlbmRsaW5lc1wiKS5kYXRhKFt0XSkuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJsZWdlbmRsaW5lc1wiLCEwKTt2YXIgdT1pLnNlbGVjdEFsbChcImcubGVnZW5kc3ltYm9sc1wiKS5kYXRhKFt0XSk7dS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcImxlZ2VuZHN5bWJvbHNcIiwhMCksdS5zZWxlY3RBbGwoXCJnLmxlZ2VuZHBvaW50c1wiKS5kYXRhKFt0XSkuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJsZWdlbmRwb2ludHNcIiwhMCl9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1bXTtcIndhdGVyZmFsbFwiPT09ZS50eXBlJiZlLnZpc2libGUmJihyPXRbMF0uaGFzVG90YWxzP1tbXCJpbmNyZWFzaW5nXCIsXCJNLTYsLTZWNkgwWlwiXSxbXCJ0b3RhbHNcIixcIk02LDZIMEwtNiwtNkgtMFpcIl0sW1wiZGVjcmVhc2luZ1wiLFwiTTYsNlYtNkgwWlwiXV06W1tcImluY3JlYXNpbmdcIixcIk0tNiwtNlY2SDZaXCJdLFtcImRlY3JlYXNpbmdcIixcIk02LDZWLTZILTZaXCJdXSk7dmFyIGk9bi5zZWxlY3QodGhpcykuc2VsZWN0KFwiZy5sZWdlbmRwb2ludHNcIikuc2VsZWN0QWxsKFwicGF0aC5sZWdlbmR3YXRlcmZhbGxcIikuZGF0YShyKTtpLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5jbGFzc2VkKFwibGVnZW5kd2F0ZXJmYWxsXCIsITApLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZSgyMCwwKVwiKS5zdHlsZShcInN0cm9rZS1taXRlcmxpbWl0XCIsMSksaS5leGl0KCkucmVtb3ZlKCksaS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGk9ZVt0WzBdXS5tYXJrZXIsYT1tKHZvaWQgMCxpLmxpbmUsZyxwKTtyLmF0dHIoXCJkXCIsdFsxXSkuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixhK1wicHhcIikuY2FsbChzLmZpbGwsaS5jb2xvciksYSYmci5jYWxsKHMuc3Ryb2tlLGkubGluZS5jb2xvcil9KX0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPWUubWFya2VyfHx7fSxhPXIubGluZXx8e30sbz1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoXCJnLmxlZ2VuZHBvaW50c1wiKS5zZWxlY3RBbGwoXCJwYXRoLmxlZ2VuZGJhclwiKS5kYXRhKGkudHJhY2VJcyhlLFwiYmFyXCIpP1t0XTpbXSk7by5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChcImxlZ2VuZGJhclwiLCEwKS5hdHRyKFwiZFwiLFwiTTYsNkgtNlYtNkg2WlwiKS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoMjAsMClcIiksby5leGl0KCkucmVtb3ZlKCksby5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLGk9dFswXSxvPW0oaS5tbHcsci5saW5lLGcscCk7ZS5zdHlsZShcInN0cm9rZS13aWR0aFwiLG8rXCJweFwiKS5jYWxsKHMuZmlsbCxpLm1jfHxyLmNvbG9yKSxvJiZzLnN0cm9rZShlLGkubWxjfHxhLmNvbG9yKX0pfSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9bi5zZWxlY3QodGhpcykuc2VsZWN0KFwiZy5sZWdlbmRwb2ludHNcIikuc2VsZWN0QWxsKFwicGF0aC5sZWdlbmRib3hcIikuZGF0YShpLnRyYWNlSXMoZSxcImJveC12aW9saW5cIikmJmUudmlzaWJsZT9bdF06W10pO3IuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoXCJsZWdlbmRib3hcIiwhMCkuYXR0cihcImRcIixcIk02LDZILTZWLTZINlpcIikuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKDIwLDApXCIpLHIuZXhpdCgpLnJlbW92ZSgpLHIuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLHI9bSh2b2lkIDAsZS5saW5lLGcscCk7dC5zdHlsZShcInN0cm9rZS13aWR0aFwiLHIrXCJweFwiKS5jYWxsKHMuZmlsbCxlLmZpbGxjb2xvciksciYmcy5zdHJva2UodCxlLmxpbmUuY29sb3IpfSl9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj1lLnRyYWNlLG89bi5zZWxlY3QodGhpcykuc2VsZWN0KFwiZy5sZWdlbmRwb2ludHNcIikuc2VsZWN0QWxsKFwicGF0aC5sZWdlbmRwaWVcIikuZGF0YShpLnRyYWNlSXMocixcInBpZVwiKSYmci52aXNpYmxlP1t0XTpbXSk7aWYoby5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChcImxlZ2VuZHBpZVwiLCEwKS5hdHRyKFwiZFwiLFwiTTYsNkgtNlYtNkg2WlwiKS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoMjAsMClcIiksby5leGl0KCkucmVtb3ZlKCksby5zaXplKCkpe3ZhciBzPShyLm1hcmtlcnx8e30pLmxpbmUsbD1tKHUocy53aWR0aCxlLnB0cykscyxnLHApLGg9YS5taW5FeHRlbmQocix7bWFya2VyOntsaW5lOnt3aWR0aDpsfX19KSxmPWEubWluRXh0ZW5kKGUse3RyYWNlOmh9KTtjKG8sZixoKX19KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByLGkscz10WzBdLGM9cy50cmFjZSx1PWMudmlzaWJsZSYmYy5maWxsJiZcIm5vbmVcIiE9PWMuZmlsbCxoPWwuaGFzTGluZXMoYykscD1jLmNvbnRvdXJzLGc9ITEsdj0hMTtpZihwKXt2YXIgeT1wLmNvbG9yaW5nO1wibGluZXNcIj09PXk/Zz0hMDpoPVwibm9uZVwiPT09eXx8XCJoZWF0bWFwXCI9PT15fHxwLnNob3dsaW5lcyxcImNvbnN0cmFpbnRcIj09PXAudHlwZT91PVwiPVwiIT09cC5fb3BlcmF0aW9uOlwiZmlsbFwiIT09eSYmXCJoZWF0bWFwXCIhPT15fHwodj0hMCl9dmFyIHg9bC5oYXNNYXJrZXJzKGMpfHxsLmhhc1RleHQoYyksYj11fHx2LF89aHx8Zyx3PXh8fCFiP1wiTTUsMFwiOl8/XCJNNSwtMlwiOlwiTTUsLTNcIixrPW4uc2VsZWN0KHRoaXMpLEE9ay5zZWxlY3QoXCIubGVnZW5kZmlsbFwiKS5zZWxlY3RBbGwoXCJwYXRoXCIpLmRhdGEodXx8dj9bdF06W10pO2lmKEEuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoXCJqcy1maWxsXCIsITApLEEuZXhpdCgpLnJlbW92ZSgpLEEuYXR0cihcImRcIix3K1wiaDMwdjZoLTMwelwiKS5jYWxsKHU/by5maWxsR3JvdXBTdHlsZTpmdW5jdGlvbih0KXtpZih0LnNpemUoKSl7dmFyIHI9XCJsZWdlbmRmaWxsLVwiK2MudWlkO28uZ3JhZGllbnQodCxlLHIsXCJob3Jpem9udGFscmV2ZXJzZWRcIixjLmNvbG9yc2NhbGUsXCJmaWxsXCIpfX0pLGh8fGcpe3ZhciBUPW0odm9pZCAwLGMubGluZSxkLGYpO2k9YS5taW5FeHRlbmQoYyx7bGluZTp7d2lkdGg6VH19KSxyPVthLm1pbkV4dGVuZChzLHt0cmFjZTppfSldfXZhciBNPWsuc2VsZWN0KFwiLmxlZ2VuZGxpbmVzXCIpLnNlbGVjdEFsbChcInBhdGhcIikuZGF0YShofHxnP1tyXTpbXSk7TS5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChcImpzLWxpbmVcIiwhMCksTS5leGl0KCkucmVtb3ZlKCksTS5hdHRyKFwiZFwiLHcrKGc/XCJsMzAsMC4wMDAxXCI6XCJoMzBcIikpLmNhbGwoaD9vLmxpbmVHcm91cFN0eWxlOmZ1bmN0aW9uKHQpe2lmKHQuc2l6ZSgpKXt2YXIgcj1cImxlZ2VuZGxpbmUtXCIrYy51aWQ7by5saW5lR3JvdXBTdHlsZSh0KSxvLmdyYWRpZW50KHQsZSxyLFwiaG9yaXpvbnRhbHJldmVyc2VkXCIsYy5jb2xvcnNjYWxlLFwic3Ryb2tlXCIpfX0pfSkuZWFjaChmdW5jdGlvbih0KXt2YXIgcixpLHM9dFswXSxjPXMudHJhY2UsdT1sLmhhc01hcmtlcnMoYyksZD1sLmhhc1RleHQoYyksZz1sLmhhc0xpbmVzKGMpO2Z1bmN0aW9uIG0odCxlLHIsbil7dmFyIGk9YS5uZXN0ZWRQcm9wZXJ0eShjLHQpLmdldCgpLG89YS5pc0FycmF5T3JUeXBlZEFycmF5KGkpJiZlP2UoaSk6aTtpZih2JiZvJiZ2b2lkIDAhPT1uJiYobz1uKSxyKXtpZihvPHJbMF0pcmV0dXJuIHJbMF07aWYobz5yWzFdKXJldHVybiByWzFdfXJldHVybiBvfWZ1bmN0aW9uIHkodCl7cmV0dXJuIHRbMF19aWYodXx8ZHx8Zyl7dmFyIHg9e30sYj17fTtpZih1KXt4Lm1jPW0oXCJtYXJrZXIuY29sb3JcIix5KSx4Lm14PW0oXCJtYXJrZXIuc3ltYm9sXCIseSkseC5tbz1tKFwibWFya2VyLm9wYWNpdHlcIixhLm1lYW4sWy4yLDFdKSx4Lm1sYz1tKFwibWFya2VyLmxpbmUuY29sb3JcIix5KSx4Lm1sdz1tKFwibWFya2VyLmxpbmUud2lkdGhcIixhLm1lYW4sWzAsNV0scCksYi5tYXJrZXI9e3NpemVyZWY6MSxzaXplbWluOjEsc2l6ZW1vZGU6XCJkaWFtZXRlclwifTt2YXIgXz1tKFwibWFya2VyLnNpemVcIixhLm1lYW4sWzIsMTZdLGgpO3gubXM9XyxiLm1hcmtlci5zaXplPV99ZyYmKGIubGluZT17d2lkdGg6bShcImxpbmUud2lkdGhcIix5LFswLDEwXSxmKX0pLGQmJih4LnR4PVwiQWFcIix4LnRwPW0oXCJ0ZXh0cG9zaXRpb25cIix5KSx4LnRzPTEwLHgudGM9bShcInRleHRmb250LmNvbG9yXCIseSkseC50Zj1tKFwidGV4dGZvbnQuZmFtaWx5XCIseSkpLHI9W2EubWluRXh0ZW5kKHMseCldLChpPWEubWluRXh0ZW5kKGMsYikpLnNlbGVjdGVkcG9pbnRzPW51bGx9dmFyIHc9bi5zZWxlY3QodGhpcykuc2VsZWN0KFwiZy5sZWdlbmRwb2ludHNcIiksaz13LnNlbGVjdEFsbChcInBhdGguc2NhdHRlcnB0c1wiKS5kYXRhKHU/cjpbXSk7ay5lbnRlcigpLmluc2VydChcInBhdGhcIixcIjpmaXJzdC1jaGlsZFwiKS5jbGFzc2VkKFwic2NhdHRlcnB0c1wiLCEwKS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoMjAsMClcIiksay5leGl0KCkucmVtb3ZlKCksay5jYWxsKG8ucG9pbnRTdHlsZSxpLGUpLHUmJihyWzBdLm1yYz0zKTt2YXIgQT13LnNlbGVjdEFsbChcImcucG9pbnR0ZXh0XCIpLmRhdGEoZD9yOltdKTtBLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwicG9pbnR0ZXh0XCIsITApLmFwcGVuZChcInRleHRcIikuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKDIwLDApXCIpLEEuZXhpdCgpLnJlbW92ZSgpLEEuc2VsZWN0QWxsKFwidGV4dFwiKS5jYWxsKG8udGV4dFBvaW50U3R5bGUsaSxlKX0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPW4uc2VsZWN0KHRoaXMpLnNlbGVjdChcImcubGVnZW5kcG9pbnRzXCIpLnNlbGVjdEFsbChcInBhdGgubGVnZW5kY2FuZGxlXCIpLmRhdGEoXCJjYW5kbGVzdGlja1wiPT09ZS50eXBlJiZlLnZpc2libGU/W3QsdF06W10pO3IuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoXCJsZWdlbmRjYW5kbGVcIiwhMCkuYXR0cihcImRcIixmdW5jdGlvbih0LGUpe3JldHVybiBlP1wiTS0xNSwwSC04TS04LDZWLTZIOFpcIjpcIk0xNSwwSDhNOCwtNlY2SC04WlwifSkuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKDIwLDApXCIpLnN0eWxlKFwic3Ryb2tlLW1pdGVybGltaXRcIiwxKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmVhY2goZnVuY3Rpb24odCxyKXt2YXIgaT1uLnNlbGVjdCh0aGlzKSxhPWVbcj9cImluY3JlYXNpbmdcIjpcImRlY3JlYXNpbmdcIl0sbz1tKHZvaWQgMCxhLmxpbmUsZyxwKTtpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsbytcInB4XCIpLmNhbGwocy5maWxsLGEuZmlsbGNvbG9yKSxvJiZzLnN0cm9rZShpLGEubGluZS5jb2xvcil9KX0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPW4uc2VsZWN0KHRoaXMpLnNlbGVjdChcImcubGVnZW5kcG9pbnRzXCIpLnNlbGVjdEFsbChcInBhdGgubGVnZW5kb2hsY1wiKS5kYXRhKFwib2hsY1wiPT09ZS50eXBlJiZlLnZpc2libGU/W3QsdF06W10pO3IuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoXCJsZWdlbmRvaGxjXCIsITApLmF0dHIoXCJkXCIsZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9cIk0tMTUsMEgwTS04LC02VjBcIjpcIk0xNSwwSDBNOCw2VjBcIn0pLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZSgyMCwwKVwiKS5zdHlsZShcInN0cm9rZS1taXRlcmxpbWl0XCIsMSksci5leGl0KCkucmVtb3ZlKCksci5lYWNoKGZ1bmN0aW9uKHQscil7dmFyIGk9bi5zZWxlY3QodGhpcyksYT1lW3I/XCJpbmNyZWFzaW5nXCI6XCJkZWNyZWFzaW5nXCJdLGw9bSh2b2lkIDAsYS5saW5lLGcscCk7aS5zdHlsZShcImZpbGxcIixcIm5vbmVcIikuY2FsbChvLmRhc2hMaW5lLGEubGluZS5kYXNoLGwpLGwmJnMuc3Ryb2tlKGksYS5saW5lLmNvbG9yKX0pfSl9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uLy4uL3RyYWNlcy9waWUvaGVscGVyc1wiOjEwMzEsXCIuLi8uLi90cmFjZXMvcGllL3N0eWxlX29uZVwiOjEwMzcsXCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlc1wiOjEwNzYsXCIuLi9jb2xvclwiOjU3OCxcIi4uL2RyYXdpbmdcIjo1OTksZDM6MTU1fV0sNjM2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uLy4uL3Bsb3RzL3Bsb3RzXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiKSxvPXQoXCIuLi8uLi9saWJcIikscz10KFwiLi4vLi4vLi4vYnVpbGQvcGxvdGljb25cIiksbD1vLl8sYz1lLmV4cG9ydHM9e307ZnVuY3Rpb24gdSh0LGUpe3ZhciByLGksbz1lLmN1cnJlbnRUYXJnZXQscz1vLmdldEF0dHJpYnV0ZShcImRhdGEtYXR0clwiKSxsPW8uZ2V0QXR0cmlidXRlKFwiZGF0YS12YWxcIil8fCEwLGM9dC5fZnVsbExheW91dCx1PXt9LGg9YS5saXN0KHQsbnVsbCwhMCksZj1cIm9uXCI7aWYoXCJ6b29tXCI9PT1zKXt2YXIgcCxkPVwiaW5cIj09PWw/LjU6MixnPSgxK2QpLzIsdj0oMS1kKS8yO2ZvcihpPTA7aTxoLmxlbmd0aDtpKyspaWYoIShyPWhbaV0pLmZpeGVkcmFuZ2UpaWYocD1yLl9uYW1lLFwiYXV0b1wiPT09bCl1W3ArXCIuYXV0b3JhbmdlXCJdPSEwO2Vsc2UgaWYoXCJyZXNldFwiPT09bCl7aWYodm9pZCAwPT09ci5fcmFuZ2VJbml0aWFsKXVbcCtcIi5hdXRvcmFuZ2VcIl09ITA7ZWxzZXt2YXIgbT1yLl9yYW5nZUluaXRpYWwuc2xpY2UoKTt1W3ArXCIucmFuZ2VbMF1cIl09bVswXSx1W3ArXCIucmFuZ2VbMV1cIl09bVsxXX12b2lkIDAhPT1yLl9zaG93U3Bpa2VJbml0aWFsJiYodVtwK1wiLnNob3dzcGlrZXNcIl09ci5fc2hvd1NwaWtlSW5pdGlhbCxcIm9uXCIhPT1mfHxyLl9zaG93U3Bpa2VJbml0aWFsfHwoZj1cIm9mZlwiKSl9ZWxzZXt2YXIgeT1bci5yMmwoci5yYW5nZVswXSksci5yMmwoci5yYW5nZVsxXSldLHg9W2cqeVswXSt2KnlbMV0sZyp5WzFdK3YqeVswXV07dVtwK1wiLnJhbmdlWzBdXCJdPXIubDJyKHhbMF0pLHVbcCtcIi5yYW5nZVsxXVwiXT1yLmwycih4WzFdKX1jLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkPWZ9ZWxzZXtpZihcImhvdmVybW9kZVwiIT09c3x8XCJ4XCIhPT1sJiZcInlcIiE9PWwpe2lmKFwiaG92ZXJtb2RlXCI9PT1zJiZcImNsb3Nlc3RcIj09PWwpe2ZvcihpPTA7aTxoLmxlbmd0aDtpKyspcj1oW2ldLFwib25cIiE9PWZ8fHIuc2hvd3NwaWtlc3x8KGY9XCJvZmZcIik7Yy5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD1mfX1lbHNlIGw9Yy5faXNIb3Jpej9cInlcIjpcInhcIixvLnNldEF0dHJpYnV0ZShcImRhdGEtdmFsXCIsbCk7dVtzXT1sfW4uY2FsbChcIl9ndWlSZWxheW91dFwiLHQsdSl9ZnVuY3Rpb24gaCh0LGUpe2Zvcih2YXIgcj1lLmN1cnJlbnRUYXJnZXQsaT1yLmdldEF0dHJpYnV0ZShcImRhdGEtYXR0clwiKSxhPXIuZ2V0QXR0cmlidXRlKFwiZGF0YS12YWxcIil8fCEwLG89dC5fZnVsbExheW91dC5fc3VicGxvdHMuZ2wzZCxzPXt9LGw9aS5zcGxpdChcIi5cIiksYz0wO2M8by5sZW5ndGg7YysrKXNbb1tjXStcIi5cIitsWzFdXT1hO3ZhciB1PVwicGFuXCI9PT1hP2E6XCJ6b29tXCI7cy5kcmFnbW9kZT11LG4uY2FsbChcIl9ndWlSZWxheW91dFwiLHQscyl9ZnVuY3Rpb24gZih0LGUpe2Zvcih2YXIgcj1lLmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1hdHRyXCIpLGk9dC5fZnVsbExheW91dCxhPWkuX3N1YnBsb3RzLmdsM2Qsbz17fSxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc10sYz1sK1wiLmNhbWVyYVwiLHU9aVtsXS5fc2NlbmU7XCJyZXNldExhc3RTYXZlXCI9PT1yPyhvW2MrXCIudXBcIl09dS52aWV3SW5pdGlhbC51cCxvW2MrXCIuZXllXCJdPXUudmlld0luaXRpYWwuZXllLG9bYytcIi5jZW50ZXJcIl09dS52aWV3SW5pdGlhbC5jZW50ZXIpOlwicmVzZXREZWZhdWx0XCI9PT1yJiYob1tjK1wiLnVwXCJdPW51bGwsb1tjK1wiLmV5ZVwiXT1udWxsLG9bYytcIi5jZW50ZXJcIl09bnVsbCl9bi5jYWxsKFwiX2d1aVJlbGF5b3V0XCIsdCxvKX1mdW5jdGlvbiBwKHQsZSl7dmFyIHI9ZS5jdXJyZW50VGFyZ2V0LG49ci5fcHJldmlvdXNWYWwsaT10Ll9mdWxsTGF5b3V0LGE9aS5fc3VicGxvdHMuZ2wzZCxvPVtcInhheGlzXCIsXCJ5YXhpc1wiLFwiemF4aXNcIl0scz17fSxsPXt9O2lmKG4pbD1uLHIuX3ByZXZpb3VzVmFsPW51bGw7ZWxzZXtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIHU9YVtjXSxoPWlbdV0sZj11K1wiLmhvdmVybW9kZVwiO3NbZl09aC5ob3Zlcm1vZGUsbFtmXT0hMTtmb3IodmFyIHA9MDtwPDM7cCsrKXt2YXIgZD1vW3BdLGc9dStcIi5cIitkK1wiLnNob3dzcGlrZXNcIjtsW2ddPSExLHNbZ109aFtkXS5zaG93c3Bpa2VzfX1yLl9wcmV2aW91c1ZhbD1zfXJldHVybiBsfWZ1bmN0aW9uIGQodCxlKXtmb3IodmFyIHI9ZS5jdXJyZW50VGFyZ2V0LGk9ci5nZXRBdHRyaWJ1dGUoXCJkYXRhLWF0dHJcIiksYT1yLmdldEF0dHJpYnV0ZShcImRhdGEtdmFsXCIpfHwhMCxvPXQuX2Z1bGxMYXlvdXQscz1vLl9zdWJwbG90cy5nZW8sbD0wO2w8cy5sZW5ndGg7bCsrKXt2YXIgYz1zW2xdLHU9b1tjXTtpZihcInpvb21cIj09PWkpe3ZhciBoPXUucHJvamVjdGlvbi5zY2FsZSxmPVwiaW5cIj09PWE/MipoOi41Kmg7bi5jYWxsKFwiX2d1aVJlbGF5b3V0XCIsdCxjK1wiLnByb2plY3Rpb24uc2NhbGVcIixmKX1lbHNlXCJyZXNldFwiPT09aSYmbSh0LFwiZ2VvXCIpfX1mdW5jdGlvbiBnKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7cmV0dXJuIWUuaG92ZXJtb2RlJiYoZS5faGFzKFwiY2FydGVzaWFuXCIpP2UuX2lzSG9yaXo/XCJ5XCI6XCJ4XCI6XCJjbG9zZXN0XCIpfWZ1bmN0aW9uIHYodCl7dmFyIGU9Zyh0KTtuLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix0LFwiaG92ZXJtb2RlXCIsZSl9ZnVuY3Rpb24gbSh0LGUpe2Zvcih2YXIgcj10Ll9mdWxsTGF5b3V0LGk9ci5fc3VicGxvdHNbZV0sYT17fSxvPTA7bzxpLmxlbmd0aDtvKyspZm9yKHZhciBzPWlbb10sbD1yW3NdLl9zdWJwbG90LnZpZXdJbml0aWFsLGM9T2JqZWN0LmtleXMobCksdT0wO3U8Yy5sZW5ndGg7dSsrKXt2YXIgaD1jW3VdO2FbcytcIi5cIitoXT1sW2hdfW4uY2FsbChcIl9ndWlSZWxheW91dFwiLHQsYSl9Yy50b0ltYWdlPXtuYW1lOlwidG9JbWFnZVwiLHRpdGxlOmZ1bmN0aW9uKHQpe3ZhciBlPSh0Ll9jb250ZXh0LnRvSW1hZ2VCdXR0b25PcHRpb25zfHx7fSkuZm9ybWF0fHxcInBuZ1wiO3JldHVybiBsKHQsXCJwbmdcIj09PWU/XCJEb3dubG9hZCBwbG90IGFzIGEgcG5nXCI6XCJEb3dubG9hZCBwbG90XCIpfSxpY29uOnMuY2FtZXJhLGNsaWNrOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2NvbnRleHQudG9JbWFnZUJ1dHRvbk9wdGlvbnMscj17Zm9ybWF0OmUuZm9ybWF0fHxcInBuZ1wifTtvLm5vdGlmaWVyKGwodCxcIlRha2luZyBzbmFwc2hvdCAtIHRoaXMgbWF5IHRha2UgYSBmZXcgc2Vjb25kc1wiKSxcImxvbmdcIiksXCJzdmdcIiE9PXIuZm9ybWF0JiZvLmlzSUUoKSYmKG8ubm90aWZpZXIobCh0LFwiSUUgb25seSBzdXBwb3J0cyBzdmcuICBDaGFuZ2luZyBmb3JtYXQgdG8gc3ZnLlwiKSxcImxvbmdcIiksci5mb3JtYXQ9XCJzdmdcIiksW1wiZmlsZW5hbWVcIixcIndpZHRoXCIsXCJoZWlnaHRcIixcInNjYWxlXCJdLmZvckVhY2goZnVuY3Rpb24odCl7dCBpbiBlJiYoclt0XT1lW3RdKX0pLG4uY2FsbChcImRvd25sb2FkSW1hZ2VcIix0LHIpLnRoZW4oZnVuY3Rpb24oZSl7by5ub3RpZmllcihsKHQsXCJTbmFwc2hvdCBzdWNjZWVkZWRcIikrXCIgLSBcIitlLFwibG9uZ1wiKX0pLmNhdGNoKGZ1bmN0aW9uKCl7by5ub3RpZmllcihsKHQsXCJTb3JyeSwgdGhlcmUgd2FzIGEgcHJvYmxlbSBkb3dubG9hZGluZyB5b3VyIHNuYXBzaG90IVwiKSxcImxvbmdcIil9KX19LGMuc2VuZERhdGFUb0Nsb3VkPXtuYW1lOlwic2VuZERhdGFUb0Nsb3VkXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIkVkaXQgaW4gQ2hhcnQgU3R1ZGlvXCIpfSxpY29uOnMuZGlzayxjbGljazpmdW5jdGlvbih0KXtpLnNlbmREYXRhVG9DbG91ZCh0KX19LGMuem9vbTJkPXtuYW1lOlwiem9vbTJkXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlpvb21cIil9LGF0dHI6XCJkcmFnbW9kZVwiLHZhbDpcInpvb21cIixpY29uOnMuem9vbWJveCxjbGljazp1fSxjLnBhbjJkPXtuYW1lOlwicGFuMmRcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiUGFuXCIpfSxhdHRyOlwiZHJhZ21vZGVcIix2YWw6XCJwYW5cIixpY29uOnMucGFuLGNsaWNrOnV9LGMuc2VsZWN0MmQ9e25hbWU6XCJzZWxlY3QyZFwiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsXCJCb3ggU2VsZWN0XCIpfSxhdHRyOlwiZHJhZ21vZGVcIix2YWw6XCJzZWxlY3RcIixpY29uOnMuc2VsZWN0Ym94LGNsaWNrOnV9LGMubGFzc28yZD17bmFtZTpcImxhc3NvMmRcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiTGFzc28gU2VsZWN0XCIpfSxhdHRyOlwiZHJhZ21vZGVcIix2YWw6XCJsYXNzb1wiLGljb246cy5sYXNzbyxjbGljazp1fSxjLnpvb21JbjJkPXtuYW1lOlwiem9vbUluMmRcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiWm9vbSBpblwiKX0sYXR0cjpcInpvb21cIix2YWw6XCJpblwiLGljb246cy56b29tX3BsdXMsY2xpY2s6dX0sYy56b29tT3V0MmQ9e25hbWU6XCJ6b29tT3V0MmRcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiWm9vbSBvdXRcIil9LGF0dHI6XCJ6b29tXCIsdmFsOlwib3V0XCIsaWNvbjpzLnpvb21fbWludXMsY2xpY2s6dX0sYy5hdXRvU2NhbGUyZD17bmFtZTpcImF1dG9TY2FsZTJkXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIkF1dG9zY2FsZVwiKX0sYXR0cjpcInpvb21cIix2YWw6XCJhdXRvXCIsaWNvbjpzLmF1dG9zY2FsZSxjbGljazp1fSxjLnJlc2V0U2NhbGUyZD17bmFtZTpcInJlc2V0U2NhbGUyZFwiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsXCJSZXNldCBheGVzXCIpfSxhdHRyOlwiem9vbVwiLHZhbDpcInJlc2V0XCIsaWNvbjpzLmhvbWUsY2xpY2s6dX0sYy5ob3ZlckNsb3Nlc3RDYXJ0ZXNpYW49e25hbWU6XCJob3ZlckNsb3Nlc3RDYXJ0ZXNpYW5cIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiU2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXJcIil9LGF0dHI6XCJob3Zlcm1vZGVcIix2YWw6XCJjbG9zZXN0XCIsaWNvbjpzLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eTpcIm5lXCIsY2xpY2s6dX0sYy5ob3ZlckNvbXBhcmVDYXJ0ZXNpYW49e25hbWU6XCJob3ZlckNvbXBhcmVDYXJ0ZXNpYW5cIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiQ29tcGFyZSBkYXRhIG9uIGhvdmVyXCIpfSxhdHRyOlwiaG92ZXJtb2RlXCIsdmFsOmZ1bmN0aW9uKHQpe3JldHVybiB0Ll9mdWxsTGF5b3V0Ll9pc0hvcml6P1wieVwiOlwieFwifSxpY29uOnMudG9vbHRpcF9jb21wYXJlLGdyYXZpdHk6XCJuZVwiLGNsaWNrOnV9LGMuem9vbTNkPXtuYW1lOlwiem9vbTNkXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlpvb21cIil9LGF0dHI6XCJzY2VuZS5kcmFnbW9kZVwiLHZhbDpcInpvb21cIixpY29uOnMuem9vbWJveCxjbGljazpofSxjLnBhbjNkPXtuYW1lOlwicGFuM2RcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiUGFuXCIpfSxhdHRyOlwic2NlbmUuZHJhZ21vZGVcIix2YWw6XCJwYW5cIixpY29uOnMucGFuLGNsaWNrOmh9LGMub3JiaXRSb3RhdGlvbj17bmFtZTpcIm9yYml0Um90YXRpb25cIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiT3JiaXRhbCByb3RhdGlvblwiKX0sYXR0cjpcInNjZW5lLmRyYWdtb2RlXCIsdmFsOlwib3JiaXRcIixpY29uOnNbXCIzZF9yb3RhdGVcIl0sY2xpY2s6aH0sYy50YWJsZVJvdGF0aW9uPXtuYW1lOlwidGFibGVSb3RhdGlvblwiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsXCJUdXJudGFibGUgcm90YXRpb25cIil9LGF0dHI6XCJzY2VuZS5kcmFnbW9kZVwiLHZhbDpcInR1cm50YWJsZVwiLGljb246c1tcInotYXhpc1wiXSxjbGljazpofSxjLnJlc2V0Q2FtZXJhRGVmYXVsdDNkPXtuYW1lOlwicmVzZXRDYW1lcmFEZWZhdWx0M2RcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiUmVzZXQgY2FtZXJhIHRvIGRlZmF1bHRcIil9LGF0dHI6XCJyZXNldERlZmF1bHRcIixpY29uOnMuaG9tZSxjbGljazpmfSxjLnJlc2V0Q2FtZXJhTGFzdFNhdmUzZD17bmFtZTpcInJlc2V0Q2FtZXJhTGFzdFNhdmUzZFwiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsXCJSZXNldCBjYW1lcmEgdG8gbGFzdCBzYXZlXCIpfSxhdHRyOlwicmVzZXRMYXN0U2F2ZVwiLGljb246cy5tb3ZpZSxjbGljazpmfSxjLmhvdmVyQ2xvc2VzdDNkPXtuYW1lOlwiaG92ZXJDbG9zZXN0M2RcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyXCIpfSxhdHRyOlwiaG92ZXJtb2RlXCIsdmFsOm51bGwsdG9nZ2xlOiEwLGljb246cy50b29sdGlwX2Jhc2ljLGdyYXZpdHk6XCJuZVwiLGNsaWNrOmZ1bmN0aW9uKHQsZSl7dmFyIHI9cCh0LGUpO24uY2FsbChcIl9ndWlSZWxheW91dFwiLHQscil9fSxjLnpvb21Jbkdlbz17bmFtZTpcInpvb21Jbkdlb1wiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsXCJab29tIGluXCIpfSxhdHRyOlwiem9vbVwiLHZhbDpcImluXCIsaWNvbjpzLnpvb21fcGx1cyxjbGljazpkfSxjLnpvb21PdXRHZW89e25hbWU6XCJ6b29tT3V0R2VvXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlpvb20gb3V0XCIpfSxhdHRyOlwiem9vbVwiLHZhbDpcIm91dFwiLGljb246cy56b29tX21pbnVzLGNsaWNrOmR9LGMucmVzZXRHZW89e25hbWU6XCJyZXNldEdlb1wiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsXCJSZXNldFwiKX0sYXR0cjpcInJlc2V0XCIsdmFsOm51bGwsaWNvbjpzLmF1dG9zY2FsZSxjbGljazpkfSxjLmhvdmVyQ2xvc2VzdEdlbz17bmFtZTpcImhvdmVyQ2xvc2VzdEdlb1wiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsXCJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXJcIil9LGF0dHI6XCJob3Zlcm1vZGVcIix2YWw6bnVsbCx0b2dnbGU6ITAsaWNvbjpzLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eTpcIm5lXCIsY2xpY2s6dn0sYy5ob3ZlckNsb3Nlc3RHbDJkPXtuYW1lOlwiaG92ZXJDbG9zZXN0R2wyZFwiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsXCJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXJcIil9LGF0dHI6XCJob3Zlcm1vZGVcIix2YWw6bnVsbCx0b2dnbGU6ITAsaWNvbjpzLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eTpcIm5lXCIsY2xpY2s6dn0sYy5ob3ZlckNsb3Nlc3RQaWU9e25hbWU6XCJob3ZlckNsb3Nlc3RQaWVcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyXCIpfSxhdHRyOlwiaG92ZXJtb2RlXCIsdmFsOlwiY2xvc2VzdFwiLGljb246cy50b29sdGlwX2Jhc2ljLGdyYXZpdHk6XCJuZVwiLGNsaWNrOnZ9LGMucmVzZXRWaWV3U2Fua2V5PXtuYW1lOlwicmVzZXRTYW5rZXlHcm91cFwiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsXCJSZXNldCB2aWV3XCIpfSxpY29uOnMuaG9tZSxjbGljazpmdW5jdGlvbih0KXtmb3IodmFyIGU9e1wibm9kZS5ncm91cHNcIjpbXSxcIm5vZGUueFwiOltdLFwibm9kZS55XCI6W119LHI9MDtyPHQuX2Z1bGxEYXRhLmxlbmd0aDtyKyspe3ZhciBpPXQuX2Z1bGxEYXRhW3JdLl92aWV3SW5pdGlhbDtlW1wibm9kZS5ncm91cHNcIl0ucHVzaChpLm5vZGUuZ3JvdXBzLnNsaWNlKCkpLGVbXCJub2RlLnhcIl0ucHVzaChpLm5vZGUueC5zbGljZSgpKSxlW1wibm9kZS55XCJdLnB1c2goaS5ub2RlLnkuc2xpY2UoKSl9bi5jYWxsKFwicmVzdHlsZVwiLHQsZSl9fSxjLnRvZ2dsZUhvdmVyPXtuYW1lOlwidG9nZ2xlSG92ZXJcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyXCIpfSxhdHRyOlwiaG92ZXJtb2RlXCIsdmFsOm51bGwsdG9nZ2xlOiEwLGljb246cy50b29sdGlwX2Jhc2ljLGdyYXZpdHk6XCJuZVwiLGNsaWNrOmZ1bmN0aW9uKHQsZSl7dmFyIHI9cCh0LGUpO3IuaG92ZXJtb2RlPWcodCksbi5jYWxsKFwiX2d1aVJlbGF5b3V0XCIsdCxyKX19LGMucmVzZXRWaWV3cz17bmFtZTpcInJlc2V0Vmlld3NcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiUmVzZXQgdmlld3NcIil9LGljb246cy5ob21lLGNsaWNrOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5jdXJyZW50VGFyZ2V0O3Iuc2V0QXR0cmlidXRlKFwiZGF0YS1hdHRyXCIsXCJ6b29tXCIpLHIuc2V0QXR0cmlidXRlKFwiZGF0YS12YWxcIixcInJlc2V0XCIpLHUodCxlKSxyLnNldEF0dHJpYnV0ZShcImRhdGEtYXR0clwiLFwicmVzZXRMYXN0U2F2ZVwiKSxmKHQsZSksbSh0LFwiZ2VvXCIpLG0odCxcIm1hcGJveFwiKX19LGMudG9nZ2xlU3Bpa2VsaW5lcz17bmFtZTpcInRvZ2dsZVNwaWtlbGluZXNcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiVG9nZ2xlIFNwaWtlIExpbmVzXCIpfSxpY29uOnMuc3Bpa2VsaW5lLGF0dHI6XCJfY2FydGVzaWFuU3Bpa2VzRW5hYmxlZFwiLHZhbDpcIm9uXCIsY2xpY2s6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtlLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkPVwib25cIj09PWUuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQ/XCJvZmZcIjpcIm9uXCI7dmFyIHI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbj10Ll9mdWxsTGF5b3V0LGk9YS5saXN0KHQsbnVsbCwhMCksbz17fSxzPTA7czxpLmxlbmd0aDtzKyspZT1pW3NdLHI9ZS5fbmFtZSxvW3IrXCIuc2hvd3NwaWtlc1wiXT1cIm9uXCI9PT1uLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkfHxlLl9zaG93U3Bpa2VJbml0aWFsO3JldHVybiBvfSh0KTtuLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix0LHIpfX0sYy5yZXNldFZpZXdNYXBib3g9e25hbWU6XCJyZXNldFZpZXdNYXBib3hcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiUmVzZXQgdmlld1wiKX0sYXR0cjpcInJlc2V0XCIsaWNvbjpzLmhvbWUsY2xpY2s6ZnVuY3Rpb24odCl7bSh0LFwibWFwYm94XCIpfX19LHtcIi4uLy4uLy4uL2J1aWxkL3Bsb3RpY29uXCI6MixcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiOjc1MixcIi4uLy4uL3Bsb3RzL3Bsb3RzXCI6ODEwLFwiLi4vLi4vcmVnaXN0cnlcIjo4Mjl9XSw2Mzc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLm1hbmFnZT10KFwiLi9tYW5hZ2VcIil9LHtcIi4vbWFuYWdlXCI6NjM4fV0sNjM4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiKSxpPXQoXCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlc1wiKSxhPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxvPXQoXCIuL21vZGViYXJcIikscz10KFwiLi9idXR0b25zXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5fY29udGV4dCxsPWUuX21vZGVCYXI7aWYoci5kaXNwbGF5TW9kZUJhcnx8ci53YXRlcm1hcmspe2lmKCFBcnJheS5pc0FycmF5KHIubW9kZUJhckJ1dHRvbnNUb1JlbW92ZSkpdGhyb3cgbmV3IEVycm9yKFtcIiptb2RlQmFyQnV0dG9uc1RvUmVtb3ZlKiBjb25maWd1cmF0aW9uIG9wdGlvbnNcIixcIm11c3QgYmUgYW4gYXJyYXkuXCJdLmpvaW4oXCIgXCIpKTtpZighQXJyYXkuaXNBcnJheShyLm1vZGVCYXJCdXR0b25zVG9BZGQpKXRocm93IG5ldyBFcnJvcihbXCIqbW9kZUJhckJ1dHRvbnNUb0FkZCogY29uZmlndXJhdGlvbiBvcHRpb25zXCIsXCJtdXN0IGJlIGFuIGFycmF5LlwiXS5qb2luKFwiIFwiKSk7dmFyIGMsdT1yLm1vZGVCYXJCdXR0b25zO2M9QXJyYXkuaXNBcnJheSh1KSYmdS5sZW5ndGg/ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspZm9yKHZhciByPXRbZV0sbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBpKXtpZih2b2lkIDA9PT1zW2ldKXRocm93IG5ldyBFcnJvcihbXCIqbW9kZUJhckJ1dHRvbnMqIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1wiLFwiaW52YWxpZCBidXR0b24gbmFtZVwiXS5qb2luKFwiIFwiKSk7dFtlXVtuXT1zW2ldfX1yZXR1cm4gdH0odSk6IXIuZGlzcGxheU1vZGVCYXImJnIud2F0ZXJtYXJrP1tdOmZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBsPXQuX2Z1bGxMYXlvdXQsYz10Ll9mdWxsRGF0YSx1PWwuX2hhcyhcImNhcnRlc2lhblwiKSxoPWwuX2hhcyhcImdsM2RcIiksZj1sLl9oYXMoXCJnZW9cIikscD1sLl9oYXMoXCJwaWVcIiksZD1sLl9oYXMoXCJnbDJkXCIpLGc9bC5faGFzKFwidGVybmFyeVwiKSx2PWwuX2hhcyhcIm1hcGJveFwiKSxtPWwuX2hhcyhcInBvbGFyXCIpLHk9bC5faGFzKFwic2Fua2V5XCIpLHg9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW4ubGlzdCh7X2Z1bGxMYXlvdXQ6dH0sbnVsbCwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKWlmKCFlW3JdLmZpeGVkcmFuZ2UpcmV0dXJuITE7cmV0dXJuITB9KGwpLGI9W107ZnVuY3Rpb24gXyh0KXtpZih0Lmxlbmd0aCl7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXTstMT09PWUuaW5kZXhPZihpKSYmci5wdXNoKHNbaV0pfWIucHVzaChyKX19dmFyIHc9W1widG9JbWFnZVwiXTtvJiZ3LnB1c2goXCJzZW5kRGF0YVRvQ2xvdWRcIik7Xyh3KTt2YXIgaz1bXSxBPVtdLFQ9W10sTT1bXTsodXx8ZHx8cHx8ZykrZitoK3YrbT4xPyhBPVtcInRvZ2dsZUhvdmVyXCJdLFQ9W1wicmVzZXRWaWV3c1wiXSk6Zj8oaz1bXCJ6b29tSW5HZW9cIixcInpvb21PdXRHZW9cIl0sQT1bXCJob3ZlckNsb3Nlc3RHZW9cIl0sVD1bXCJyZXNldEdlb1wiXSk6aD8oQT1bXCJob3ZlckNsb3Nlc3QzZFwiXSxUPVtcInJlc2V0Q2FtZXJhRGVmYXVsdDNkXCIsXCJyZXNldENhbWVyYUxhc3RTYXZlM2RcIl0pOnY/KEE9W1widG9nZ2xlSG92ZXJcIl0sVD1bXCJyZXNldFZpZXdNYXBib3hcIl0pOmQ/QT1bXCJob3ZlckNsb3Nlc3RHbDJkXCJdOnA/QT1bXCJob3ZlckNsb3Nlc3RQaWVcIl06eT8oQT1bXCJob3ZlckNsb3Nlc3RDYXJ0ZXNpYW5cIixcImhvdmVyQ29tcGFyZUNhcnRlc2lhblwiXSxUPVtcInJlc2V0Vmlld1NhbmtleVwiXSk6QT1bXCJ0b2dnbGVIb3ZlclwiXTt1JiYoQT1bXCJ0b2dnbGVTcGlrZWxpbmVzXCIsXCJob3ZlckNsb3Nlc3RDYXJ0ZXNpYW5cIixcImhvdmVyQ29tcGFyZUNhcnRlc2lhblwiXSk7IXUmJiFkfHx4fHwoaz1bXCJ6b29tSW4yZFwiLFwiem9vbU91dDJkXCIsXCJhdXRvU2NhbGUyZFwiXSxcInJlc2V0Vmlld3NcIiE9PVRbMF0mJihUPVtcInJlc2V0U2NhbGUyZFwiXSkpO2g/TT1bXCJ6b29tM2RcIixcInBhbjNkXCIsXCJvcmJpdFJvdGF0aW9uXCIsXCJ0YWJsZVJvdGF0aW9uXCJdOih1fHxkKSYmIXh8fGc/TT1bXCJ6b29tMmRcIixcInBhbjJkXCJdOnZ8fGY/TT1bXCJwYW4yZFwiXTptJiYoTT1bXCJ6b29tMmRcIl0pOyhmdW5jdGlvbih0KXtmb3IodmFyIGU9ITEscj0wO3I8dC5sZW5ndGgmJiFlO3IrKyl7dmFyIG49dFtyXTtuLl9tb2R1bGUmJm4uX21vZHVsZS5zZWxlY3RQb2ludHMmJihhLnRyYWNlSXMobixcInNjYXR0ZXItbGlrZVwiKT8oaS5oYXNNYXJrZXJzKG4pfHxpLmhhc1RleHQobikpJiYoZT0hMCk6YS50cmFjZUlzKG4sXCJib3gtdmlvbGluXCIpJiZcImFsbFwiIT09bi5ib3hwb2ludHMmJlwiYWxsXCIhPT1uLnBvaW50c3x8KGU9ITApKX1yZXR1cm4gZX0pKGMpJiZNLnB1c2goXCJzZWxlY3QyZFwiLFwibGFzc28yZFwiKTtyZXR1cm4gXyhNKSxfKGsuY29uY2F0KFQpKSxfKEEpLGZ1bmN0aW9uKHQsZSl7aWYoZS5sZW5ndGgpaWYoQXJyYXkuaXNBcnJheShlWzBdKSlmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0LnB1c2goZVtyXSk7ZWxzZSB0LnB1c2goZSk7cmV0dXJuIHR9KGIscil9KHQsci5tb2RlQmFyQnV0dG9uc1RvUmVtb3ZlLHIubW9kZUJhckJ1dHRvbnNUb0FkZCxyLnNob3dTZW5kVG9DbG91ZCksbD9sLnVwZGF0ZSh0LGMpOmUuX21vZGVCYXI9byh0LGMpfWVsc2UgbCYmKGwuZGVzdHJveSgpLGRlbGV0ZSBlLl9tb2RlQmFyKX19LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiOjc1MixcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi9idXR0b25zXCI6NjM2LFwiLi9tb2RlYmFyXCI6NjM5fV0sNjM5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcImZhc3QtaXNudW1lcmljXCIpLGE9dChcIi4uLy4uL2xpYlwiKSxvPXQoXCIuLi8uLi8uLi9idWlsZC9wbG90aWNvblwiKSxzPW5ldyBET01QYXJzZXI7ZnVuY3Rpb24gbCh0KXt0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLmVsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSx0aGlzLnVwZGF0ZSh0LmdyYXBoSW5mbyx0LmJ1dHRvbnMpLHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCl9dmFyIGM9bC5wcm90b3R5cGU7Yy51cGRhdGU9ZnVuY3Rpb24odCxlKXt0aGlzLmdyYXBoSW5mbz10O3ZhciByPXRoaXMuZ3JhcGhJbmZvLl9jb250ZXh0LG49dGhpcy5ncmFwaEluZm8uX2Z1bGxMYXlvdXQsaT1cIm1vZGViYXItXCIrbi5fdWlkO3RoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJpZFwiLGkpLHRoaXMuX3VpZD1pLHRoaXMuZWxlbWVudC5jbGFzc05hbWU9XCJtb2RlYmFyXCIsXCJob3ZlclwiPT09ci5kaXNwbGF5TW9kZUJhciYmKHRoaXMuZWxlbWVudC5jbGFzc05hbWUrPVwiIG1vZGViYXItLWhvdmVyIGVhc2UtYmdcIiksXCJ2XCI9PT1uLm1vZGViYXIub3JpZW50YXRpb24mJih0aGlzLmVsZW1lbnQuY2xhc3NOYW1lKz1cIiB2ZXJ0aWNhbFwiLGU9ZS5yZXZlcnNlKCkpO3ZhciBvPW4ubW9kZWJhcixzPVwiaG92ZXJcIj09PXIuZGlzcGxheU1vZGVCYXI/XCIuanMtcGxvdGx5LXBsb3QgLnBsb3RseTpob3ZlciBcIjpcIlwiO2EuZGVsZXRlUmVsYXRlZFN0eWxlUnVsZShpKSxhLmFkZFJlbGF0ZWRTdHlsZVJ1bGUoaSxzK1wiI1wiK2krXCIgLm1vZGViYXItZ3JvdXBcIixcImJhY2tncm91bmQtY29sb3I6IFwiK28uYmdjb2xvciksYS5hZGRSZWxhdGVkU3R5bGVSdWxlKGksXCIjXCIraStcIiAubW9kZWJhci1idG4gLmljb24gcGF0aFwiLFwiZmlsbDogXCIrby5jb2xvciksYS5hZGRSZWxhdGVkU3R5bGVSdWxlKGksXCIjXCIraStcIiAubW9kZWJhci1idG46aG92ZXIgLmljb24gcGF0aFwiLFwiZmlsbDogXCIrby5hY3RpdmVjb2xvciksYS5hZGRSZWxhdGVkU3R5bGVSdWxlKGksXCIjXCIraStcIiAubW9kZWJhci1idG4uYWN0aXZlIC5pY29uIHBhdGhcIixcImZpbGw6IFwiK28uYWN0aXZlY29sb3IpO3ZhciBsPSF0aGlzLmhhc0J1dHRvbnMoZSksYz10aGlzLmhhc0xvZ28hPT1yLmRpc3BsYXlsb2dvLHU9dGhpcy5sb2NhbGUhPT1yLmxvY2FsZTtpZih0aGlzLmxvY2FsZT1yLmxvY2FsZSwobHx8Y3x8dSkmJih0aGlzLnJlbW92ZUFsbEJ1dHRvbnMoKSx0aGlzLnVwZGF0ZUJ1dHRvbnMoZSksci53YXRlcm1hcmt8fHIuZGlzcGxheWxvZ28pKXt2YXIgaD10aGlzLmdldExvZ28oKTtyLndhdGVybWFyayYmKGguY2xhc3NOYW1lPWguY2xhc3NOYW1lK1wiIHdhdGVybWFya1wiKSxcInZcIj09PW4ubW9kZWJhci5vcmllbnRhdGlvbj90aGlzLmVsZW1lbnQuaW5zZXJ0QmVmb3JlKGgsdGhpcy5lbGVtZW50LmNoaWxkTm9kZXNbMF0pOnRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChoKSx0aGlzLmhhc0xvZ289ITB9dGhpcy51cGRhdGVBY3RpdmVCdXR0b24oKX0sYy51cGRhdGVCdXR0b25zPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5idXR0b25zPXQsdGhpcy5idXR0b25FbGVtZW50cz1bXSx0aGlzLmJ1dHRvbnNOYW1lcz1bXSx0aGlzLmJ1dHRvbnMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcj1lLmNyZWF0ZUdyb3VwKCk7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPXQubmFtZTtpZighbil0aHJvdyBuZXcgRXJyb3IoXCJtdXN0IHByb3ZpZGUgYnV0dG9uICduYW1lJyBpbiBidXR0b24gY29uZmlnXCIpO2lmKC0xIT09ZS5idXR0b25zTmFtZXMuaW5kZXhPZihuKSl0aHJvdyBuZXcgRXJyb3IoXCJidXR0b24gbmFtZSAnXCIrbitcIicgaXMgdGFrZW5cIik7ZS5idXR0b25zTmFtZXMucHVzaChuKTt2YXIgaT1lLmNyZWF0ZUJ1dHRvbih0KTtlLmJ1dHRvbkVsZW1lbnRzLnB1c2goaSksci5hcHBlbmRDaGlsZChpKX0pLGUuZWxlbWVudC5hcHBlbmRDaGlsZChyKX0pfSxjLmNyZWF0ZUdyb3VwPWZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtyZXR1cm4gdC5jbGFzc05hbWU9XCJtb2RlYmFyLWdyb3VwXCIsdH0sYy5jcmVhdGVCdXR0b249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO3Iuc2V0QXR0cmlidXRlKFwicmVsXCIsXCJ0b29sdGlwXCIpLHIuY2xhc3NOYW1lPVwibW9kZWJhci1idG5cIjt2YXIgaT10LnRpdGxlO3ZvaWQgMD09PWk/aT10Lm5hbWU6XCJmdW5jdGlvblwiPT10eXBlb2YgaSYmKGk9aSh0aGlzLmdyYXBoSW5mbykpLChpfHwwPT09aSkmJnIuc2V0QXR0cmlidXRlKFwiZGF0YS10aXRsZVwiLGkpLHZvaWQgMCE9PXQuYXR0ciYmci5zZXRBdHRyaWJ1dGUoXCJkYXRhLWF0dHJcIix0LmF0dHIpO3ZhciBhPXQudmFsO2lmKHZvaWQgMCE9PWEmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiBhJiYoYT1hKHRoaXMuZ3JhcGhJbmZvKSksci5zZXRBdHRyaWJ1dGUoXCJkYXRhLXZhbFwiLGEpKSxcImZ1bmN0aW9uXCIhPXR5cGVvZiB0LmNsaWNrKXRocm93IG5ldyBFcnJvcihcIm11c3QgcHJvdmlkZSBidXR0b24gJ2NsaWNrJyBmdW5jdGlvbiBpbiBidXR0b24gY29uZmlnXCIpO3IuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsZnVuY3Rpb24ocil7dC5jbGljayhlLmdyYXBoSW5mbyxyKSxlLnVwZGF0ZUFjdGl2ZUJ1dHRvbihyLmN1cnJlbnRUYXJnZXQpfSksci5zZXRBdHRyaWJ1dGUoXCJkYXRhLXRvZ2dsZVwiLHQudG9nZ2xlfHwhMSksdC50b2dnbGUmJm4uc2VsZWN0KHIpLmNsYXNzZWQoXCJhY3RpdmVcIiwhMCk7dmFyIHM9dC5pY29uO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHM/ci5hcHBlbmRDaGlsZChzKCkpOnIuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVJY29uKHN8fG8ucXVlc3Rpb24pKSxyLnNldEF0dHJpYnV0ZShcImRhdGEtZ3Jhdml0eVwiLHQuZ3Jhdml0eXx8XCJuXCIpLHJ9LGMuY3JlYXRlSWNvbj1mdW5jdGlvbih0KXt2YXIgZSxyPWkodC5oZWlnaHQpP051bWJlcih0LmhlaWdodCk6dC5hc2NlbnQtdC5kZXNjZW50LG49XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO2lmKHQucGF0aCl7KGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG4sXCJzdmdcIikpLnNldEF0dHJpYnV0ZShcInZpZXdCb3hcIixbMCwwLHQud2lkdGgscl0uam9pbihcIiBcIikpLGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIixcImljb25cIik7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG4sXCJwYXRoXCIpO2Euc2V0QXR0cmlidXRlKFwiZFwiLHQucGF0aCksdC50cmFuc2Zvcm0/YS5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIix0LnRyYW5zZm9ybSk6dm9pZCAwIT09dC5hc2NlbnQmJmEuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsXCJtYXRyaXgoMSAwIDAgLTEgMCBcIit0LmFzY2VudCtcIilcIiksZS5hcHBlbmRDaGlsZChhKX10LnN2ZyYmKGU9cy5wYXJzZUZyb21TdHJpbmcodC5zdmcsXCJhcHBsaWNhdGlvbi94bWxcIikuY2hpbGROb2Rlc1swXSk7cmV0dXJuIGUuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsXCIxZW1cIiksZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLFwiMWVtXCIpLGV9LGMudXBkYXRlQWN0aXZlQnV0dG9uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ3JhcGhJbmZvLl9mdWxsTGF5b3V0LHI9dm9pZCAwIT09dD90LmdldEF0dHJpYnV0ZShcImRhdGEtYXR0clwiKTpudWxsO3RoaXMuYnV0dG9uRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgaT10LmdldEF0dHJpYnV0ZShcImRhdGEtdmFsXCIpfHwhMCxvPXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1hdHRyXCIpLHM9XCJ0cnVlXCI9PT10LmdldEF0dHJpYnV0ZShcImRhdGEtdG9nZ2xlXCIpLGw9bi5zZWxlY3QodCk7aWYocylvPT09ciYmbC5jbGFzc2VkKFwiYWN0aXZlXCIsIWwuY2xhc3NlZChcImFjdGl2ZVwiKSk7ZWxzZXt2YXIgYz1udWxsPT09bz9vOmEubmVzdGVkUHJvcGVydHkoZSxvKS5nZXQoKTtsLmNsYXNzZWQoXCJhY3RpdmVcIixjPT09aSl9fSl9LGMuaGFzQnV0dG9ucz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmJ1dHRvbnM7aWYoIWUpcmV0dXJuITE7aWYodC5sZW5ndGghPT1lLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil7aWYodFtyXS5sZW5ndGghPT1lW3JdLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHRbcl0ubGVuZ3RoO24rKylpZih0W3JdW25dLm5hbWUhPT1lW3JdW25dLm5hbWUpcmV0dXJuITF9cmV0dXJuITB9LGMuZ2V0TG9nbz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY3JlYXRlR3JvdXAoKSxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO3JldHVybiBlLmhyZWY9XCJodHRwczovL3Bsb3QubHkvXCIsZS50YXJnZXQ9XCJfYmxhbmtcIixlLnNldEF0dHJpYnV0ZShcImRhdGEtdGl0bGVcIixhLl8odGhpcy5ncmFwaEluZm8sXCJQcm9kdWNlZCB3aXRoIFBsb3RseVwiKSksZS5jbGFzc05hbWU9XCJtb2RlYmFyLWJ0biBwbG90bHlqc2ljb24gbW9kZWJhci1idG4tLWxvZ29cIixlLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlSWNvbihvLm5ld3Bsb3RseWxvZ28pKSx0LmFwcGVuZENoaWxkKGUpLHR9LGMucmVtb3ZlQWxsQnV0dG9ucz1mdW5jdGlvbigpe2Zvcig7dGhpcy5lbGVtZW50LmZpcnN0Q2hpbGQ7KXRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZCk7dGhpcy5oYXNMb2dvPSExfSxjLmRlc3Ryb3k9ZnVuY3Rpb24oKXthLnJlbW92ZUVsZW1lbnQodGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5tb2RlYmFyXCIpKSxhLmRlbGV0ZVJlbGF0ZWRTdHlsZVJ1bGUodGhpcy5fdWlkKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxpPW5ldyBsKHtncmFwaEluZm86dCxjb250YWluZXI6ci5fbW9kZWJhcmRpdi5ub2RlKCksYnV0dG9uczplfSk7cmV0dXJuIHIuX3ByaXZhdGVwbG90JiZuLnNlbGVjdChpLmVsZW1lbnQpLmFwcGVuZChcInNwYW5cIikuY2xhc3NlZChcImJhZGdlLXByaXZhdGUgZmxvYXQtLWxlZnRcIiwhMCkudGV4dChcIlBSSVZBVEVcIiksaX19LHtcIi4uLy4uLy4uL2J1aWxkL3Bsb3RpY29uXCI6MixcIi4uLy4uL2xpYlwiOjcwMSxkMzoxNTUsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDY0MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vY29sb3IvYXR0cmlidXRlc1wiKSxhPSgwLHQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLnRlbXBsYXRlZEFycmF5KShcImJ1dHRvblwiLHt2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJwbG90XCJ9LHN0ZXA6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcIm1vbnRoXCIsXCJ5ZWFyXCIsXCJkYXlcIixcImhvdXJcIixcIm1pbnV0ZVwiLFwic2Vjb25kXCIsXCJhbGxcIl0sZGZsdDpcIm1vbnRoXCIsZWRpdFR5cGU6XCJwbG90XCJ9LHN0ZXBtb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJiYWNrd2FyZFwiLFwidG9kYXRlXCJdLGRmbHQ6XCJiYWNrd2FyZFwiLGVkaXRUeXBlOlwicGxvdFwifSxjb3VudDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZTpcInBsb3RcIn0sbGFiZWw6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcInBsb3RcIn0sZWRpdFR5cGU6XCJwbG90XCJ9KTtlLmV4cG9ydHM9e3Zpc2libGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZWRpdFR5cGU6XCJwbG90XCJ9LGJ1dHRvbnM6YSx4Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOi0yLG1heDozLGVkaXRUeXBlOlwicGxvdFwifSx4YW5jaG9yOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhdXRvXCIsXCJsZWZ0XCIsXCJjZW50ZXJcIixcInJpZ2h0XCJdLGRmbHQ6XCJsZWZ0XCIsZWRpdFR5cGU6XCJwbG90XCJ9LHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46LTIsbWF4OjMsZWRpdFR5cGU6XCJwbG90XCJ9LHlhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImF1dG9cIixcInRvcFwiLFwibWlkZGxlXCIsXCJib3R0b21cIl0sZGZsdDpcImJvdHRvbVwiLGVkaXRUeXBlOlwicGxvdFwifSxmb250Om4oe2VkaXRUeXBlOlwicGxvdFwifSksYmdjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDppLmxpZ2h0TGluZSxlZGl0VHlwZTpcInBsb3RcIn0sYWN0aXZlY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwicGxvdFwifSxib3JkZXJjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOlwicGxvdFwifSxib3JkZXJ3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTpcInBsb3RcIn0sZWRpdFR5cGU6XCJwbG90XCJ9fSx7XCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCI6Nzc1LFwiLi4vY29sb3IvYXR0cmlidXRlc1wiOjU3N31dLDY0MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17eVBhZDouMDIsbWluQnV0dG9uV2lkdGg6MzAscng6MyxyeTozLGxpZ2h0QW1vdW50OjI1LGRhcmtBbW91bnQ6MTB9fSx7fV0sNjQyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi9jb2xvclwiKSxhPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLG89dChcIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0c1wiKSxzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbD10KFwiLi9jb25zdGFudHNcIik7ZnVuY3Rpb24gYyh0LGUscixpKXt2YXIgYT1pLmNhbGVuZGFyO2Z1bmN0aW9uIG8ocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMuYnV0dG9ucyxyLGkpfWlmKG8oXCJ2aXNpYmxlXCIpKXt2YXIgbD1vKFwic3RlcFwiKTtcImFsbFwiIT09bCYmKCFhfHxcImdyZWdvcmlhblwiPT09YXx8XCJtb250aFwiIT09bCYmXCJ5ZWFyXCIhPT1sP28oXCJzdGVwbW9kZVwiKTplLnN0ZXBtb2RlPVwiYmFja3dhcmRcIixvKFwiY291bnRcIikpLG8oXCJsYWJlbFwiKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUsaCl7dmFyIGY9dC5yYW5nZXNlbGVjdG9yfHx7fSxwPWEubmV3Q29udGFpbmVyKGUsXCJyYW5nZXNlbGVjdG9yXCIpO2Z1bmN0aW9uIGQodCxlKXtyZXR1cm4gbi5jb2VyY2UoZixwLHMsdCxlKX1pZihkKFwidmlzaWJsZVwiLG8oZixwLHtuYW1lOlwiYnV0dG9uc1wiLGhhbmRsZUl0ZW1EZWZhdWx0czpjLGNhbGVuZGFyOmh9KS5sZW5ndGg+MCkpe3ZhciBnPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ci5maWx0ZXIoZnVuY3Rpb24ocil7cmV0dXJuIGVbcl0uYW5jaG9yPT09dC5faWR9KSxpPTAsYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1lW25bYV1dLmRvbWFpbjtvJiYoaT1NYXRoLm1heChvWzFdLGkpKX1yZXR1cm5bdC5kb21haW5bMF0saStsLnlQYWRdfShlLHIsdSk7ZChcInhcIixnWzBdKSxkKFwieVwiLGdbMV0pLG4ubm9uZU9yQWxsKHQsZSxbXCJ4XCIsXCJ5XCJdKSxkKFwieGFuY2hvclwiKSxkKFwieWFuY2hvclwiKSxuLmNvZXJjZUZvbnQoZCxcImZvbnRcIixyLmZvbnQpO3ZhciB2PWQoXCJiZ2NvbG9yXCIpO2QoXCJhY3RpdmVjb2xvclwiLGkuY29udHJhc3QodixsLmxpZ2h0QW1vdW50LGwuZGFya0Ftb3VudCkpLGQoXCJib3JkZXJjb2xvclwiKSxkKFwiYm9yZGVyd2lkdGhcIil9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0c1wiOjc0NSxcIi4uL2NvbG9yXCI6NTc4LFwiLi9hdHRyaWJ1dGVzXCI6NjQwLFwiLi9jb25zdGFudHNcIjo2NDF9XSw2NDM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vcmVnaXN0cnlcIiksYT10KFwiLi4vLi4vcGxvdHMvcGxvdHNcIiksbz10KFwiLi4vY29sb3JcIikscz10KFwiLi4vZHJhd2luZ1wiKSxsPXQoXCIuLi8uLi9saWJcIiksYz10KFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCIpLHU9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiKSxoPXQoXCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCIpLGY9aC5MSU5FX1NQQUNJTkcscD1oLkZST01fVEwsZD1oLkZST01fQlIsZz10KFwiLi9jb25zdGFudHNcIiksdj10KFwiLi9nZXRfdXBkYXRlX29iamVjdFwiKTtmdW5jdGlvbiBtKHQpe3JldHVybiB0Ll9pZH1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj1sLmVuc3VyZVNpbmdsZSh0LFwicmVjdFwiLFwic2VsZWN0b3ItcmVjdFwiLGZ1bmN0aW9uKHQpe3QuYXR0cihcInNoYXBlLXJlbmRlcmluZ1wiLFwiY3Jpc3BFZGdlc1wiKX0pO24uYXR0cih7cng6Zy5yeCxyeTpnLnJ5fSksbi5jYWxsKG8uc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwoby5maWxsLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuX2lzQWN0aXZlfHxlLl9pc0hvdmVyZWQ/dC5hY3RpdmVjb2xvcjp0LmJnY29sb3J9KGUscikpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsZS5ib3JkZXJ3aWR0aCtcInB4XCIpfWZ1bmN0aW9uIHgodCxlLHIsbil7bC5lbnN1cmVTaW5nbGUodCxcInRleHRcIixcInNlbGVjdG9yLXRleHRcIixmdW5jdGlvbih0KXt0LmNsYXNzZWQoXCJ1c2VyLXNlbGVjdC1ub25lXCIsITApLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLFwibWlkZGxlXCIpfSkuY2FsbChzLmZvbnQsZS5mb250KS50ZXh0KGZ1bmN0aW9uKHQsZSl7aWYodC5sYWJlbClyZXR1cm4gZT9sLnRlbXBsYXRlU3RyaW5nKHQubGFiZWwse21ldGE6ZX0pOnQubGFiZWw7cmV0dXJuXCJhbGxcIj09PXQuc3RlcD9cImFsbFwiOnQuY291bnQrdC5zdGVwLmNoYXJBdCgwKX0ocixuLl9mdWxsTGF5b3V0Lm1ldGEpKS5jYWxsKGZ1bmN0aW9uKHQpe2MuY29udmVydFRvVHNwYW5zKHQsbil9KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdEFsbChcIi5yYW5nZXNlbGVjdG9yXCIpLmRhdGEoZnVuY3Rpb24odCl7Zm9yKHZhciBlPXUubGlzdCh0LFwieFwiLCEwKSxyPVtdLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXTtpLnJhbmdlc2VsZWN0b3ImJmkucmFuZ2VzZWxlY3Rvci52aXNpYmxlJiZyLnB1c2goaSl9cmV0dXJuIHJ9KHQpLG0pO2UuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJyYW5nZXNlbGVjdG9yXCIsITApLGUuZXhpdCgpLnJlbW92ZSgpLGUuc3R5bGUoe2N1cnNvcjpcInBvaW50ZXJcIixcInBvaW50ZXItZXZlbnRzXCI6XCJhbGxcIn0pLGUuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxvPWUsdT1vLnJhbmdlc2VsZWN0b3IsaD1yLnNlbGVjdEFsbChcImcuYnV0dG9uXCIpLmRhdGEobC5maWx0ZXJWaXNpYmxlKHUuYnV0dG9ucykpO2guZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJidXR0b25cIiwhMCksaC5leGl0KCkucmVtb3ZlKCksaC5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGE9dihvLGUpO2UuX2lzQWN0aXZlPWZ1bmN0aW9uKHQsZSxyKXtpZihcImFsbFwiPT09ZS5zdGVwKXJldHVybiEwPT09dC5hdXRvcmFuZ2U7dmFyIG49T2JqZWN0LmtleXMocik7cmV0dXJuIHQucmFuZ2VbMF09PT1yW25bMF1dJiZ0LnJhbmdlWzFdPT09cltuWzFdXX0obyxlLGEpLHIuY2FsbCh5LHUsZSksci5jYWxsKHgsdSxlLHQpLHIub24oXCJjbGlja1wiLGZ1bmN0aW9uKCl7dC5fZHJhZ2dlZHx8aS5jYWxsKFwiX2d1aVJlbGF5b3V0XCIsdCxhKX0pLHIub24oXCJtb3VzZW92ZXJcIixmdW5jdGlvbigpe2UuX2lzSG92ZXJlZD0hMCxyLmNhbGwoeSx1LGUpfSksci5vbihcIm1vdXNlb3V0XCIsZnVuY3Rpb24oKXtlLl9pc0hvdmVyZWQ9ITEsci5jYWxsKHksdSxlKX0pfSksZnVuY3Rpb24odCxlLHIsaSxvKXt2YXIgdT0wLGg9MCx2PXIuYm9yZGVyd2lkdGg7ZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT10LnNlbGVjdChcIi5zZWxlY3Rvci10ZXh0XCIpLGk9ci5mb250LnNpemUqZixhPU1hdGgubWF4KGkqYy5saW5lQ291bnQoZSksMTYpKzM7aD1NYXRoLm1heChoLGEpfSksZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT10LnNlbGVjdChcIi5zZWxlY3Rvci1yZWN0XCIpLGk9dC5zZWxlY3QoXCIuc2VsZWN0b3ItdGV4dFwiKSxhPWkubm9kZSgpJiZzLmJCb3goaS5ub2RlKCkpLndpZHRoLG89ci5mb250LnNpemUqZixsPWMubGluZUNvdW50KGkpLHA9TWF0aC5tYXgoYSsxMCxnLm1pbkJ1dHRvbldpZHRoKTt0LmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIisodit1KStcIixcIit2K1wiKVwiKSxlLmF0dHIoe3g6MCx5OjAsd2lkdGg6cCxoZWlnaHQ6aH0pLGMucG9zaXRpb25UZXh0KGkscC8yLGgvMi0obC0xKSpvLzIrMyksdSs9cCs1fSk7dmFyIG09dC5fZnVsbExheW91dC5fc2l6ZSx5PW0ubCttLncqci54LHg9bS50K20uaCooMS1yLnkpLGI9XCJsZWZ0XCI7bC5pc1JpZ2h0QW5jaG9yKHIpJiYoeS09dSxiPVwicmlnaHRcIik7bC5pc0NlbnRlckFuY2hvcihyKSYmKHktPXUvMixiPVwiY2VudGVyXCIpO3ZhciBfPVwidG9wXCI7bC5pc0JvdHRvbUFuY2hvcihyKSYmKHgtPWgsXz1cImJvdHRvbVwiKTtsLmlzTWlkZGxlQW5jaG9yKHIpJiYoeC09aC8yLF89XCJtaWRkbGVcIik7dT1NYXRoLmNlaWwodSksaD1NYXRoLmNlaWwoaCkseT1NYXRoLnJvdW5kKHkpLHg9TWF0aC5yb3VuZCh4KSxhLmF1dG9NYXJnaW4odCxpK1wiLXJhbmdlLXNlbGVjdG9yXCIse3g6ci54LHk6ci55LGw6dSpwW2JdLHI6dSpkW2JdLGI6aCpkW19dLHQ6aCpwW19dfSksby5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIreStcIixcIit4K1wiKVwiKX0odCxoLHUsby5fbmFtZSxyKX0pfX0se1wiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiOjY3MyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiOjcyNSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiOjc1MixcIi4uLy4uL3Bsb3RzL3Bsb3RzXCI6ODEwLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9jb2xvclwiOjU3OCxcIi4uL2RyYXdpbmdcIjo1OTksXCIuL2NvbnN0YW50c1wiOjY0MSxcIi4vZ2V0X3VwZGF0ZV9vYmplY3RcIjo2NDQsZDM6MTU1fV0sNjQ0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX25hbWUsaT17fTtpZihcImFsbFwiPT09ZS5zdGVwKWlbcitcIi5hdXRvcmFuZ2VcIl09ITA7ZWxzZXt2YXIgYT1mdW5jdGlvbih0LGUpe3ZhciByLGk9dC5yYW5nZSxhPW5ldyBEYXRlKHQucjJsKGlbMV0pKSxvPWUuc3RlcCxzPWUuY291bnQ7c3dpdGNoKGUuc3RlcG1vZGUpe2Nhc2VcImJhY2t3YXJkXCI6cj10Lmwycigrbi50aW1lW29dLnV0Yy5vZmZzZXQoYSwtcykpO2JyZWFrO2Nhc2VcInRvZGF0ZVwiOnZhciBsPW4udGltZVtvXS51dGMub2Zmc2V0KGEsLXMpO3I9dC5sMnIoK24udGltZVtvXS51dGMuY2VpbChsKSl9dmFyIGM9aVsxXTtyZXR1cm5bcixjXX0odCxlKTtpW3IrXCIucmFuZ2VbMF1cIl09YVswXSxpW3IrXCIucmFuZ2VbMV1cIl09YVsxXX1yZXR1cm4gaX19LHtkMzoxNTV9XSw2NDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6XCJjb21wb25lbnRcIixuYW1lOlwicmFuZ2VzZWxlY3RvclwiLHNjaGVtYTp7c3VicGxvdHM6e3hheGlzOntyYW5nZXNlbGVjdG9yOnQoXCIuL2F0dHJpYnV0ZXNcIil9fX0sbGF5b3V0QXR0cmlidXRlczp0KFwiLi9hdHRyaWJ1dGVzXCIpLGhhbmRsZURlZmF1bHRzOnQoXCIuL2RlZmF1bHRzXCIpLGRyYXc6dChcIi4vZHJhd1wiKX19LHtcIi4vYXR0cmlidXRlc1wiOjY0MCxcIi4vZGVmYXVsdHNcIjo2NDIsXCIuL2RyYXdcIjo2NDN9XSw2NDY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vY29sb3IvYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9e2JnY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6bi5iYWNrZ3JvdW5kLGVkaXRUeXBlOlwicGxvdFwifSxib3JkZXJjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDpuLmRlZmF1bHRMaW5lLGVkaXRUeXBlOlwicGxvdFwifSxib3JkZXJ3aWR0aDp7dmFsVHlwZTpcImludGVnZXJcIixkZmx0OjAsbWluOjAsZWRpdFR5cGU6XCJwbG90XCJ9LGF1dG9yYW5nZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wiLGltcGxpZWRFZGl0czp7XCJyYW5nZVswXVwiOnZvaWQgMCxcInJhbmdlWzFdXCI6dm9pZCAwfX0scmFuZ2U6e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsaXRlbXM6W3t2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjXCIsaW1wbGllZEVkaXRzOntcIl5hdXRvcmFuZ2VcIjohMX19LHt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjXCIsaW1wbGllZEVkaXRzOntcIl5hdXRvcmFuZ2VcIjohMX19XSxlZGl0VHlwZTpcImNhbGNcIixpbXBsaWVkRWRpdHM6e2F1dG9yYW5nZTohMX19LHRoaWNrbmVzczp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6LjE1LG1pbjowLG1heDoxLGVkaXRUeXBlOlwicGxvdFwifSx2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LGVkaXRUeXBlOlwiY2FsY1wifX0se1wiLi4vY29sb3IvYXR0cmlidXRlc1wiOjU3N31dLDY0NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIikubGlzdCxpPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlXCIpLmdldEF1dG9SYW5nZSxhPXQoXCIuL2NvbnN0YW50c1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW4odCxcInhcIiwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbz1lW3JdLHM9b1thLm5hbWVdO3MmJnMudmlzaWJsZSYmcy5hdXRvcmFuZ2UmJihzLl9pbnB1dC5hdXRvcmFuZ2U9ITAscy5faW5wdXQucmFuZ2U9cy5yYW5nZT1pKHQsbykpfX19LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2VcIjo3NDgsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIjo3NTIsXCIuL2NvbnN0YW50c1wiOjY0OH1dLDY0ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17bmFtZTpcInJhbmdlc2xpZGVyXCIsY29udGFpbmVyQ2xhc3NOYW1lOlwicmFuZ2VzbGlkZXItY29udGFpbmVyXCIsYmdDbGFzc05hbWU6XCJyYW5nZXNsaWRlci1iZ1wiLHJhbmdlUGxvdENsYXNzTmFtZTpcInJhbmdlc2xpZGVyLXJhbmdlcGxvdFwiLG1hc2tNaW5DbGFzc05hbWU6XCJyYW5nZXNsaWRlci1tYXNrLW1pblwiLG1hc2tNYXhDbGFzc05hbWU6XCJyYW5nZXNsaWRlci1tYXNrLW1heFwiLHNsaWRlQm94Q2xhc3NOYW1lOlwicmFuZ2VzbGlkZXItc2xpZGVib3hcIixncmFiYmVyTWluQ2xhc3NOYW1lOlwicmFuZ2VzbGlkZXItZ3JhYmJlci1taW5cIixncmFiQXJlYU1pbkNsYXNzTmFtZTpcInJhbmdlc2xpZGVyLWdyYWJhcmVhLW1pblwiLGhhbmRsZU1pbkNsYXNzTmFtZTpcInJhbmdlc2xpZGVyLWhhbmRsZS1taW5cIixncmFiYmVyTWF4Q2xhc3NOYW1lOlwicmFuZ2VzbGlkZXItZ3JhYmJlci1tYXhcIixncmFiQXJlYU1heENsYXNzTmFtZTpcInJhbmdlc2xpZGVyLWdyYWJhcmVhLW1heFwiLGhhbmRsZU1heENsYXNzTmFtZTpcInJhbmdlc2xpZGVyLWhhbmRsZS1tYXhcIixtYXNrTWluT3BwQXhpc0NsYXNzTmFtZTpcInJhbmdlc2xpZGVyLW1hc2stbWluLW9wcC1heGlzXCIsbWFza01heE9wcEF4aXNDbGFzc05hbWU6XCJyYW5nZXNsaWRlci1tYXNrLW1heC1vcHAtYXhpc1wiLG1hc2tDb2xvcjpcInJnYmEoMCwwLDAsMC40KVwiLG1hc2tPcHBBeGlzQ29sb3I6XCJyZ2JhKDAsMCwwLDAuMilcIixzbGlkZUJveEZpbGw6XCJ0cmFuc3BhcmVudFwiLHNsaWRlQm94Q3Vyc29yOlwiZXctcmVzaXplXCIsZ3JhYkFyZWFGaWxsOlwidHJhbnNwYXJlbnRcIixncmFiQXJlYUN1cnNvcjpcImNvbC1yZXNpemVcIixncmFiQXJlYVdpZHRoOjEwLGhhbmRsZVdpZHRoOjQsaGFuZGxlUmFkaXVzOjEsaGFuZGxlU3Ryb2tlV2lkdGg6MSxleHRyYVBhZDoxNX19LHt9XSw2NDk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIiksYT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCIpLG89dChcIi4vYXR0cmlidXRlc1wiKSxzPXQoXCIuL29wcGF4aXNfYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBsPXRbcl0sYz1lW3JdO2lmKGwucmFuZ2VzbGlkZXJ8fGUuX3JlcXVlc3RSYW5nZXNsaWRlcltjLl9pZF0pe24uaXNQbGFpbk9iamVjdChsLnJhbmdlc2xpZGVyKXx8KGwucmFuZ2VzbGlkZXI9e30pO3ZhciB1LGgsZj1sLnJhbmdlc2xpZGVyLHA9aS5uZXdDb250YWluZXIoYyxcInJhbmdlc2xpZGVyXCIpO2lmKF8oXCJ2aXNpYmxlXCIpKXtfKFwiYmdjb2xvclwiLGUucGxvdF9iZ2NvbG9yKSxfKFwiYm9yZGVyY29sb3JcIiksXyhcImJvcmRlcndpZHRoXCIpLF8oXCJ0aGlja25lc3NcIiksXyhcImF1dG9yYW5nZVwiLCFjLmlzVmFsaWRSYW5nZShmLnJhbmdlKSksXyhcInJhbmdlXCIpO3ZhciBkPWUuX3N1YnBsb3RzO2lmKGQpZm9yKHZhciBnPWQuY2FydGVzaWFuLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5zdWJzdHIoMCx0LmluZGV4T2YoXCJ5XCIpKT09PWEubmFtZTJpZChyKX0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdWJzdHIodC5pbmRleE9mKFwieVwiKSx0Lmxlbmd0aCl9KSx2PW4uc2ltcGxlTWFwKGcsYS5pZDJuYW1lKSxtPTA7bTx2Lmxlbmd0aDttKyspe3ZhciB5PXZbbV07dT1mW3ldfHx7fSxoPWkubmV3Q29udGFpbmVyKHAseSxcInlheGlzXCIpO3ZhciB4LGI9ZVt5XTt1LnJhbmdlJiZiLmlzVmFsaWRSYW5nZSh1LnJhbmdlKSYmKHg9XCJmaXhlZFwiKSxcIm1hdGNoXCIhPT13KFwicmFuZ2Vtb2RlXCIseCkmJncoXCJyYW5nZVwiLGIucmFuZ2Uuc2xpY2UoKSl9cC5faW5wdXQ9Zn19ZnVuY3Rpb24gXyh0LGUpe3JldHVybiBuLmNvZXJjZShmLHAsbyx0LGUpfWZ1bmN0aW9uIHcodCxlKXtyZXR1cm4gbi5jb2VyY2UodSxoLHMsdCxlKX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCI6NzUyLFwiLi9hdHRyaWJ1dGVzXCI6NjQ2LFwiLi9vcHBheGlzX2F0dHJpYnV0ZXNcIjo2NTN9XSw2NTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vcmVnaXN0cnlcIiksYT10KFwiLi4vLi4vcGxvdHMvcGxvdHNcIiksbz10KFwiLi4vLi4vbGliXCIpLHM9dChcIi4uL2RyYXdpbmdcIiksbD10KFwiLi4vY29sb3JcIiksYz10KFwiLi4vdGl0bGVzXCIpLHU9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiKSxoPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIiksZj10KFwiLi4vZHJhZ2VsZW1lbnRcIikscD10KFwiLi4vLi4vbGliL3NldGN1cnNvclwiKSxkPXQoXCIuL2NvbnN0YW50c1wiKTtmdW5jdGlvbiBnKHQsZSxyLG4pe3ZhciBpPW8uZW5zdXJlU2luZ2xlKHQsXCJyZWN0XCIsZC5iZ0NsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIoe3g6MCx5OjAsXCJzaGFwZS1yZW5kZXJpbmdcIjpcImNyaXNwRWRnZXNcIn0pfSksYT1uLmJvcmRlcndpZHRoJTI9PTA/bi5ib3JkZXJ3aWR0aDpuLmJvcmRlcndpZHRoLTEsbD0tbi5fb2Zmc2V0U2hpZnQsYz1zLmNyaXNwUm91bmQoZSxuLmJvcmRlcndpZHRoKTtpLmF0dHIoe3dpZHRoOm4uX3dpZHRoK2EsaGVpZ2h0Om4uX2hlaWdodCthLHRyYW5zZm9ybTpcInRyYW5zbGF0ZShcIitsK1wiLFwiK2wrXCIpXCIsZmlsbDpuLmJnY29sb3Isc3Ryb2tlOm4uYm9yZGVyY29sb3IsXCJzdHJva2Utd2lkdGhcIjpjfSl9ZnVuY3Rpb24gdih0LGUscixuKXt2YXIgaT1lLl9mdWxsTGF5b3V0O28uZW5zdXJlU2luZ2xlQnlJZChpLl90b3BkZWZzLFwiY2xpcFBhdGhcIixuLl9jbGlwSWQsZnVuY3Rpb24odCl7dC5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoe3g6MCx5OjB9KX0pLnNlbGVjdChcInJlY3RcIikuYXR0cih7d2lkdGg6bi5fd2lkdGgsaGVpZ2h0Om4uX2hlaWdodH0pfWZ1bmN0aW9uIG0odCxlLHIsaSl7dmFyIGwsYz1lLmNhbGNkYXRhLGY9dC5zZWxlY3RBbGwoXCJnLlwiK2QucmFuZ2VQbG90Q2xhc3NOYW1lKS5kYXRhKHIuX3N1YnBsb3RzV2l0aCxvLmlkZW50aXR5KTtmLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIixmdW5jdGlvbih0KXtyZXR1cm4gZC5yYW5nZVBsb3RDbGFzc05hbWUrXCIgXCIrdH0pLmNhbGwocy5zZXRDbGlwVXJsLGkuX2NsaXBJZCxlKSxmLm9yZGVyKCksZi5leGl0KCkucmVtb3ZlKCksZi5lYWNoKGZ1bmN0aW9uKHQsbyl7dmFyIHM9bi5zZWxlY3QodGhpcyksZj0wPT09byxwPWguZ2V0RnJvbUlkKGUsdCxcInlcIiksZD1wLl9uYW1lLGc9aVtkXSx2PXtkYXRhOltdLGxheW91dDp7eGF4aXM6e3R5cGU6ci50eXBlLGRvbWFpbjpbMCwxXSxyYW5nZTppLnJhbmdlLnNsaWNlKCksY2FsZW5kYXI6ci5jYWxlbmRhcn0sd2lkdGg6aS5fd2lkdGgsaGVpZ2h0OmkuX2hlaWdodCxtYXJnaW46e3Q6MCxiOjAsbDowLHI6MH19LF9jb250ZXh0OmUuX2NvbnRleHR9O3YubGF5b3V0W2RdPXt0eXBlOnAudHlwZSxkb21haW46WzAsMV0scmFuZ2U6XCJtYXRjaFwiIT09Zy5yYW5nZW1vZGU/Zy5yYW5nZS5zbGljZSgpOnAucmFuZ2Uuc2xpY2UoKSxjYWxlbmRhcjpwLmNhbGVuZGFyfSxhLnN1cHBseURlZmF1bHRzKHYpO3ZhciBtPXYuX2Z1bGxMYXlvdXQueGF4aXMseT12Ll9mdWxsTGF5b3V0W2RdO20uY2xlYXJDYWxjKCksbS5zZXRTY2FsZSgpLHkuY2xlYXJDYWxjKCkseS5zZXRTY2FsZSgpO3ZhciB4PXtpZDp0LHBsb3Rncm91cDpzLHhheGlzOm0seWF4aXM6eSxpc1JhbmdlUGxvdDohMH07Zj9sPXg6KHgubWFpbnBsb3Q9XCJ4eVwiLHgubWFpbnBsb3RpbmZvPWwpLHUucmFuZ2VQbG90KGUseCxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl0sYT1pWzBdLnRyYWNlO2EueGF4aXMrYS55YXhpcz09PWUmJnIucHVzaChpKX1yZXR1cm4gcn0oYyx0KSl9KX1mdW5jdGlvbiB5KHQsZSxyLG4saSl7KG8uZW5zdXJlU2luZ2xlKHQsXCJyZWN0XCIsZC5tYXNrTWluQ2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuYXR0cih7eDowLHk6MCxcInNoYXBlLXJlbmRlcmluZ1wiOlwiY3Jpc3BFZGdlc1wifSl9KS5hdHRyKFwiaGVpZ2h0XCIsbi5faGVpZ2h0KS5jYWxsKGwuZmlsbCxkLm1hc2tDb2xvciksby5lbnN1cmVTaW5nbGUodCxcInJlY3RcIixkLm1hc2tNYXhDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHt5OjAsXCJzaGFwZS1yZW5kZXJpbmdcIjpcImNyaXNwRWRnZXNcIn0pfSkuYXR0cihcImhlaWdodFwiLG4uX2hlaWdodCkuY2FsbChsLmZpbGwsZC5tYXNrQ29sb3IpLFwibWF0Y2hcIiE9PWkucmFuZ2Vtb2RlKSYmKG8uZW5zdXJlU2luZ2xlKHQsXCJyZWN0XCIsZC5tYXNrTWluT3BwQXhpc0NsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIoe3k6MCxcInNoYXBlLXJlbmRlcmluZ1wiOlwiY3Jpc3BFZGdlc1wifSl9KS5hdHRyKFwid2lkdGhcIixuLl93aWR0aCkuY2FsbChsLmZpbGwsZC5tYXNrT3BwQXhpc0NvbG9yKSxvLmVuc3VyZVNpbmdsZSh0LFwicmVjdFwiLGQubWFza01heE9wcEF4aXNDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHt5OjAsXCJzaGFwZS1yZW5kZXJpbmdcIjpcImNyaXNwRWRnZXNcIn0pfSkuYXR0cihcIndpZHRoXCIsbi5fd2lkdGgpLnN0eWxlKFwiYm9yZGVyLXRvcFwiLGQubWFza09wcEJvcmRlcikuY2FsbChsLmZpbGwsZC5tYXNrT3BwQXhpc0NvbG9yKSl9ZnVuY3Rpb24geCh0LGUscixuKXtlLl9jb250ZXh0LnN0YXRpY1Bsb3R8fG8uZW5zdXJlU2luZ2xlKHQsXCJyZWN0XCIsZC5zbGlkZUJveENsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIoe3k6MCxjdXJzb3I6ZC5zbGlkZUJveEN1cnNvcixcInNoYXBlLXJlbmRlcmluZ1wiOlwiY3Jpc3BFZGdlc1wifSl9KS5hdHRyKHtoZWlnaHQ6bi5faGVpZ2h0LGZpbGw6ZC5zbGlkZUJveEZpbGx9KX1mdW5jdGlvbiBiKHQsZSxyLG4pe3ZhciBpPW8uZW5zdXJlU2luZ2xlKHQsXCJnXCIsZC5ncmFiYmVyTWluQ2xhc3NOYW1lKSxhPW8uZW5zdXJlU2luZ2xlKHQsXCJnXCIsZC5ncmFiYmVyTWF4Q2xhc3NOYW1lKSxzPXt4OjAsd2lkdGg6ZC5oYW5kbGVXaWR0aCxyeDpkLmhhbmRsZVJhZGl1cyxmaWxsOmwuYmFja2dyb3VuZCxzdHJva2U6bC5kZWZhdWx0TGluZSxcInN0cm9rZS13aWR0aFwiOmQuaGFuZGxlU3Ryb2tlV2lkdGgsXCJzaGFwZS1yZW5kZXJpbmdcIjpcImNyaXNwRWRnZXNcIn0sYz17eTpNYXRoLnJvdW5kKG4uX2hlaWdodC80KSxoZWlnaHQ6TWF0aC5yb3VuZChuLl9oZWlnaHQvMil9O2lmKG8uZW5zdXJlU2luZ2xlKGksXCJyZWN0XCIsZC5oYW5kbGVNaW5DbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHMpfSkuYXR0cihjKSxvLmVuc3VyZVNpbmdsZShhLFwicmVjdFwiLGQuaGFuZGxlTWF4Q2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuYXR0cihzKX0pLmF0dHIoYyksIWUuX2NvbnRleHQuc3RhdGljUGxvdCl7dmFyIHU9e3dpZHRoOmQuZ3JhYkFyZWFXaWR0aCx4OjAseTowLGZpbGw6ZC5ncmFiQXJlYUZpbGwsY3Vyc29yOmQuZ3JhYkFyZWFDdXJzb3J9O28uZW5zdXJlU2luZ2xlKGksXCJyZWN0XCIsZC5ncmFiQXJlYU1pbkNsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIodSl9KS5hdHRyKFwiaGVpZ2h0XCIsbi5faGVpZ2h0KSxvLmVuc3VyZVNpbmdsZShhLFwicmVjdFwiLGQuZ3JhYkFyZWFNYXhDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHUpfSkuYXR0cihcImhlaWdodFwiLG4uX2hlaWdodCl9fWUuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3JhbmdlU2xpZGVyRGF0YSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV1bZC5uYW1lXTtzLl9jbGlwSWQ9cy5faWQrXCItXCIrZS5fdWlkfXZhciBsPWUuX2luZm9sYXllci5zZWxlY3RBbGwoXCJnLlwiK2QuY29udGFpbmVyQ2xhc3NOYW1lKS5kYXRhKHIsZnVuY3Rpb24odCl7cmV0dXJuIHQuX25hbWV9KTtsLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPXRbZC5uYW1lXTtlLl90b3BkZWZzLnNlbGVjdChcIiNcIityLl9jbGlwSWQpLnJlbW92ZSgpfSkucmVtb3ZlKCksMCE9PXIubGVuZ3RoJiYobC5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChkLmNvbnRhaW5lckNsYXNzTmFtZSwhMCkuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsXCJhbGxcIiksbC5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBhPW4uc2VsZWN0KHRoaXMpLHM9cltkLm5hbWVdLGw9ZVtoLmlkMm5hbWUoci5hbmNob3IpXSx1PXNbaC5pZDJuYW1lKHIuYW5jaG9yKV07aWYocy5yYW5nZSl7dmFyIF8sdz1vLnNpbXBsZU1hcChzLnJhbmdlLHIucjJsKSxrPW8uc2ltcGxlTWFwKHIucmFuZ2Usci5yMmwpO189a1swXTxrWzFdP1tNYXRoLm1pbih3WzBdLGtbMF0pLE1hdGgubWF4KHdbMV0sa1sxXSldOltNYXRoLm1heCh3WzBdLGtbMF0pLE1hdGgubWluKHdbMV0sa1sxXSldLHMucmFuZ2U9cy5faW5wdXQucmFuZ2U9by5zaW1wbGVNYXAoXyxyLmwycil9ci5jbGVhblJhbmdlKFwicmFuZ2VzbGlkZXIucmFuZ2VcIik7dmFyIEE9ZS5tYXJnaW4sVD1lLl9zaXplLE09ci5kb21haW4sUz1zLl90aWNrSGVpZ2h0LEU9cy5fb3BwQm90dG9tO3MuX3dpZHRoPVQudyooTVsxXS1NWzBdKTt2YXIgQz1NYXRoLnJvdW5kKEEubCtULncqTVswXSksTD1NYXRoLnJvdW5kKFQudCtULmgqKDEtRSkrUytzLl9vZmZzZXRTaGlmdCtkLmV4dHJhUGFkKTthLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIitDK1wiLFwiK0wrXCIpXCIpO3ZhciB6PXIucjJsKHMucmFuZ2VbMF0pLE89ci5yMmwocy5yYW5nZVsxXSksST1PLXo7aWYocy5wMmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQvcy5fd2lkdGgqSSt6fSxzLmQycD1mdW5jdGlvbih0KXtyZXR1cm4odC16KS9JKnMuX3dpZHRofSxzLl9ybD1beixPXSxcIm1hdGNoXCIhPT11LnJhbmdlbW9kZSl7dmFyIEQ9bC5yMmwodS5yYW5nZVswXSksUD1sLnIybCh1LnJhbmdlWzFdKS1EO3MuZDJwT3BwQXhpcz1mdW5jdGlvbih0KXtyZXR1cm4odC1EKS9QKnMuX2hlaWdodH19YS5jYWxsKGcsdCxyLHMpLmNhbGwodix0LHIscykuY2FsbChtLHQscixzKS5jYWxsKHksdCxyLHMsdSkuY2FsbCh4LHQscixzKS5jYWxsKGIsdCxyLHMpLGZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBzPXQuc2VsZWN0KFwicmVjdC5cIitkLnNsaWRlQm94Q2xhc3NOYW1lKS5ub2RlKCksbD10LnNlbGVjdChcInJlY3QuXCIrZC5ncmFiQXJlYU1pbkNsYXNzTmFtZSkubm9kZSgpLGM9dC5zZWxlY3QoXCJyZWN0LlwiK2QuZ3JhYkFyZWFNYXhDbGFzc05hbWUpLm5vZGUoKTt0Lm9uKFwibW91c2Vkb3duXCIsZnVuY3Rpb24oKXt2YXIgdT1uLmV2ZW50LGg9dS50YXJnZXQsZD11LmNsaWVudFgsZz1kLXQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQsdj1hLmQycChyLl9ybFswXSksbT1hLmQycChyLl9ybFsxXSkseT1mLmNvdmVyU2xpcCgpO2Z1bmN0aW9uIHgodCl7dmFyIHUsZix4LGI9K3QuY2xpZW50WC1kO3N3aXRjaChoKXtjYXNlIHM6eD1cImV3LXJlc2l6ZVwiLHU9ditiLGY9bStiO2JyZWFrO2Nhc2UgbDp4PVwiY29sLXJlc2l6ZVwiLHU9ditiLGY9bTticmVhaztjYXNlIGM6eD1cImNvbC1yZXNpemVcIix1PXYsZj1tK2I7YnJlYWs7ZGVmYXVsdDp4PVwiZXctcmVzaXplXCIsdT1nLGY9ZytifWlmKGY8dSl7dmFyIF89ZjtmPXUsdT1ffWEuX3BpeGVsTWluPXUsYS5fcGl4ZWxNYXg9ZixwKG4uc2VsZWN0KHkpLHgpLGZ1bmN0aW9uKHQsZSxyLG4pe2Z1bmN0aW9uIGEodCl7cmV0dXJuIHIubDJyKG8uY29uc3RyYWluKHQsbi5fcmxbMF0sbi5fcmxbMV0pKX12YXIgcz1hKG4ucDJkKG4uX3BpeGVsTWluKSksbD1hKG4ucDJkKG4uX3BpeGVsTWF4KSk7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe2kuY2FsbChcIl9ndWlSZWxheW91dFwiLGUsci5fbmFtZStcIi5yYW5nZVwiLFtzLGxdKX0pfSgwLGUscixhKX15LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIix4KSx5LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsZnVuY3Rpb24gdCgpe3kucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHgpO3kucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIix0KTtvLnJlbW92ZUVsZW1lbnQoeSl9KX0pfShhLHQscixzKSxmdW5jdGlvbih0LGUscixuLGksYSl7dmFyIHM9ZC5oYW5kbGVXaWR0aC8yO2Z1bmN0aW9uIGwodCl7cmV0dXJuIG8uY29uc3RyYWluKHQsMCxuLl93aWR0aCl9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gby5jb25zdHJhaW4odCwwLG4uX2hlaWdodCl9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gby5jb25zdHJhaW4odCwtcyxuLl93aWR0aCtzKX12YXIgaD1sKG4uZDJwKHIuX3JsWzBdKSksZj1sKG4uZDJwKHIuX3JsWzFdKSk7aWYodC5zZWxlY3QoXCJyZWN0LlwiK2Quc2xpZGVCb3hDbGFzc05hbWUpLmF0dHIoXCJ4XCIsaCkuYXR0cihcIndpZHRoXCIsZi1oKSx0LnNlbGVjdChcInJlY3QuXCIrZC5tYXNrTWluQ2xhc3NOYW1lKS5hdHRyKFwid2lkdGhcIixoKSx0LnNlbGVjdChcInJlY3QuXCIrZC5tYXNrTWF4Q2xhc3NOYW1lKS5hdHRyKFwieFwiLGYpLmF0dHIoXCJ3aWR0aFwiLG4uX3dpZHRoLWYpLFwibWF0Y2hcIiE9PWEucmFuZ2Vtb2RlKXt2YXIgcD1uLl9oZWlnaHQtYyhuLmQycE9wcEF4aXMoaS5fcmxbMV0pKSxnPW4uX2hlaWdodC1jKG4uZDJwT3BwQXhpcyhpLl9ybFswXSkpO3Quc2VsZWN0KFwicmVjdC5cIitkLm1hc2tNaW5PcHBBeGlzQ2xhc3NOYW1lKS5hdHRyKFwieFwiLGgpLmF0dHIoXCJoZWlnaHRcIixwKS5hdHRyKFwid2lkdGhcIixmLWgpLHQuc2VsZWN0KFwicmVjdC5cIitkLm1hc2tNYXhPcHBBeGlzQ2xhc3NOYW1lKS5hdHRyKFwieFwiLGgpLmF0dHIoXCJ5XCIsZykuYXR0cihcImhlaWdodFwiLG4uX2hlaWdodC1nKS5hdHRyKFwid2lkdGhcIixmLWgpLHQuc2VsZWN0KFwicmVjdC5cIitkLnNsaWRlQm94Q2xhc3NOYW1lKS5hdHRyKFwieVwiLHApLmF0dHIoXCJoZWlnaHRcIixnLXApfXZhciB2PU1hdGgucm91bmQodShoLXMpKS0uNSxtPU1hdGgucm91bmQodShmLXMpKSsuNTt0LnNlbGVjdChcImcuXCIrZC5ncmFiYmVyTWluQ2xhc3NOYW1lKS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrditcIiwwLjUpXCIpLHQuc2VsZWN0KFwiZy5cIitkLmdyYWJiZXJNYXhDbGFzc05hbWUpLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIittK1wiLDAuNSlcIil9KGEsMCxyLHMsbCx1KSxcImJvdHRvbVwiPT09ci5zaWRlJiZjLmRyYXcodCxyLl9pZCtcInRpdGxlXCIse3Byb3BDb250YWluZXI6cixwcm9wTmFtZTpyLl9uYW1lK1wiLnRpdGxlXCIscGxhY2Vob2xkZXI6ZS5fZGZsdFRpdGxlLngsYXR0cmlidXRlczp7eDpyLl9vZmZzZXQrci5fbGVuZ3RoLzIseTpMK3MuX2hlaWdodCtzLl9vZmZzZXRTaGlmdCsxMCsxLjUqci50aXRsZS5mb250LnNpemUsXCJ0ZXh0LWFuY2hvclwiOlwibWlkZGxlXCJ9fSl9KSl9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvc2V0Y3Vyc29yXCI6NzIxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCI6NzUyLFwiLi4vLi4vcGxvdHMvcGxvdHNcIjo4MTAsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL2NvbG9yXCI6NTc4LFwiLi4vZHJhZ2VsZW1lbnRcIjo1OTYsXCIuLi9kcmF3aW5nXCI6NTk5LFwiLi4vdGl0bGVzXCI6NjY2LFwiLi9jb25zdGFudHNcIjo2NDgsZDM6MTU1fV0sNjUxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiKSxpPXQoXCIuL2NvbnN0YW50c1wiKSxhPWkubmFtZTtmdW5jdGlvbiBvKHQpe3ZhciBlPXQmJnRbYV07cmV0dXJuIGUmJmUudmlzaWJsZX1yLmlzVmlzaWJsZT1vLHIubWFrZURhdGE9ZnVuY3Rpb24odCl7dmFyIGU9bi5saXN0KHtfZnVsbExheW91dDp0fSxcInhcIiwhMCkscj10Lm1hcmdpbixpPVtdO2lmKCF0Ll9oYXMoXCJnbDJkXCIpKWZvcih2YXIgcz0wO3M8ZS5sZW5ndGg7cysrKXt2YXIgbD1lW3NdO2lmKG8obCkpe2kucHVzaChsKTt2YXIgYz1sW2FdO2MuX2lkPWErbC5faWQsYy5faGVpZ2h0PSh0LmhlaWdodC1yLmItci50KSpjLnRoaWNrbmVzcyxjLl9vZmZzZXRTaGlmdD1NYXRoLmZsb29yKGMuYm9yZGVyd2lkdGgvMil9fXQuX3JhbmdlU2xpZGVyRGF0YT1pfSxyLmF1dG9NYXJnaW5PcHRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWVbYV0sbz0xLzAscz1lLl9jb3VudGVyQXhlcyxsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciBjPXNbbF0sdT1uLmdldEZyb21JZCh0LGMpO289TWF0aC5taW4obyx1LmRvbWFpblswXSl9ci5fb3BwQm90dG9tPW87dmFyIGg9XCJib3R0b21cIj09PWUuc2lkZSYmZS5fYm91bmRpbmdCb3guaGVpZ2h0fHwwO3JldHVybiByLl90aWNrSGVpZ2h0PWgse3g6MCx5Om8sbDowLHI6MCx0OjAsYjpyLl9oZWlnaHQrdC5fZnVsbExheW91dC5tYXJnaW4uYitoLHBhZDppLmV4dHJhUGFkKzIqci5fb2Zmc2V0U2hpZnR9fX0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCI6NzUyLFwiLi9jb25zdGFudHNcIjo2NDh9XSw2NTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vYXR0cmlidXRlc1wiKSxhPXQoXCIuL29wcGF4aXNfYXR0cmlidXRlc1wiKSxvPXQoXCIuL2hlbHBlcnNcIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwiY29tcG9uZW50XCIsbmFtZTpcInJhbmdlc2xpZGVyXCIsc2NoZW1hOntzdWJwbG90czp7eGF4aXM6e3Jhbmdlc2xpZGVyOm4uZXh0ZW5kRmxhdCh7fSxpLHt5YXhpczphfSl9fX0sbGF5b3V0QXR0cmlidXRlczp0KFwiLi9hdHRyaWJ1dGVzXCIpLGhhbmRsZURlZmF1bHRzOnQoXCIuL2RlZmF1bHRzXCIpLGNhbGNBdXRvcmFuZ2U6dChcIi4vY2FsY19hdXRvcmFuZ2VcIiksZHJhdzp0KFwiLi9kcmF3XCIpLGlzVmlzaWJsZTpvLmlzVmlzaWJsZSxtYWtlRGF0YTpvLm1ha2VEYXRhLGF1dG9NYXJnaW5PcHRzOm8uYXV0b01hcmdpbk9wdHN9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuL2F0dHJpYnV0ZXNcIjo2NDYsXCIuL2NhbGNfYXV0b3JhbmdlXCI6NjQ3LFwiLi9kZWZhdWx0c1wiOjY0OSxcIi4vZHJhd1wiOjY1MCxcIi4vaGVscGVyc1wiOjY1MSxcIi4vb3BwYXhpc19hdHRyaWJ1dGVzXCI6NjUzfV0sNjUzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtfaXNTdWJwbG90T2JqOiEwLHJhbmdlbW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYXV0b1wiLFwiZml4ZWRcIixcIm1hdGNoXCJdLGRmbHQ6XCJtYXRjaFwiLGVkaXRUeXBlOlwiY2FsY1wifSxyYW5nZTp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixpdGVtczpbe3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcInBsb3RcIn0se3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcInBsb3RcIn1dLGVkaXRUeXBlOlwicGxvdFwifSxlZGl0VHlwZTpcImNhbGNcIn19LHt9XSw2NTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vYW5ub3RhdGlvbnMvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzXCIpLmxpbmUsYT10KFwiLi4vZHJhd2luZy9hdHRyaWJ1dGVzXCIpLmRhc2gsbz10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LHM9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIikudGVtcGxhdGVkQXJyYXk7ZS5leHBvcnRzPXMoXCJzaGFwZVwiLHt2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSx0eXBlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJjaXJjbGVcIixcInJlY3RcIixcInBhdGhcIixcImxpbmVcIl0sZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSxsYXllcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYmVsb3dcIixcImFib3ZlXCJdLGRmbHQ6XCJhYm92ZVwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LHhyZWY6byh7fSxuLnhyZWYse30pLHhzaXplbW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wic2NhbGVkXCIsXCJwaXhlbFwiXSxkZmx0Olwic2NhbGVkXCIsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSx4YW5jaG9yOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSx4MDp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0seDE6e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LHlyZWY6byh7fSxuLnlyZWYse30pLHlzaXplbW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wic2NhbGVkXCIsXCJwaXhlbFwiXSxkZmx0Olwic2NhbGVkXCIsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSx5YW5jaG9yOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSx5MDp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0seTE6e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LHBhdGg6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LG9wYWNpdHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0sbGluZTp7Y29sb3I6byh7fSxpLmNvbG9yLHtlZGl0VHlwZTpcImFycmF5ZHJhd1wifSksd2lkdGg6byh7fSxpLndpZHRoLHtlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9KSxkYXNoOm8oe30sYSx7ZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0pLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0sZmlsbGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OlwicmdiYSgwLDAsMCwwKVwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9KX0se1wiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzXCI6MTA1MixcIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXNcIjo1NjEsXCIuLi9kcmF3aW5nL2F0dHJpYnV0ZXNcIjo1OTh9XSw2NTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGE9dChcIi4vY29uc3RhbnRzXCIpLG89dChcIi4vaGVscGVyc1wiKTtmdW5jdGlvbiBzKHQpe3JldHVybiBjKHQubGluZS53aWR0aCx0LnhzaXplbW9kZSx0LngwLHQueDEsdC5wYXRoLCExKX1mdW5jdGlvbiBsKHQpe3JldHVybiBjKHQubGluZS53aWR0aCx0LnlzaXplbW9kZSx0LnkwLHQueTEsdC5wYXRoLCEwKX1mdW5jdGlvbiBjKHQsZSxyLGkscyxsKXt2YXIgYz10LzIsdT1sO2lmKFwicGl4ZWxcIj09PWUpe3ZhciBoPXM/by5leHRyYWN0UGF0aENvb3JkcyhzLGw/YS5wYXJhbUlzWTphLnBhcmFtSXNYKTpbcixpXSxmPW4uYWdnTnVtcyhNYXRoLm1heCxudWxsLGgpLHA9bi5hZ2dOdW1zKE1hdGgubWluLG51bGwsaCksZD1wPDA/TWF0aC5hYnMocCkrYzpjLGc9Zj4wP2YrYzpjO3JldHVybntwcGFkOmMscHBhZHBsdXM6dT9kOmcscHBhZG1pbnVzOnU/ZzpkfX1yZXR1cm57cHBhZDpjfX1mdW5jdGlvbiB1KHQsZSxyLG4saSl7dmFyIHM9XCJjYXRlZ29yeVwiPT09dC50eXBlfHxcIm11bHRpY2F0ZWdvcnlcIj09PXQudHlwZT90LnIyYzp0LmQyYztpZih2b2lkIDAhPT1lKXJldHVybltzKGUpLHMocildO2lmKG4pe3ZhciBsLGMsdSxoLGY9MS8wLHA9LTEvMCxkPW4ubWF0Y2goYS5zZWdtZW50UkUpO2ZvcihcImRhdGVcIj09PXQudHlwZSYmKHM9by5kZWNvZGVEYXRlKHMpKSxsPTA7bDxkLmxlbmd0aDtsKyspdm9pZCAwIT09KGM9aVtkW2xdLmNoYXJBdCgwKV0uZHJhd24pJiYoISh1PWRbbF0uc3Vic3RyKDEpLm1hdGNoKGEucGFyYW1SRSkpfHx1Lmxlbmd0aDxjfHwoKGg9cyh1W2NdKSk8ZiYmKGY9aCksaD5wJiYocD1oKSkpO3JldHVybiBwPj1mP1tmLHBdOnZvaWQgMH19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1uLmZpbHRlclZpc2libGUoZS5zaGFwZXMpO2lmKHIubGVuZ3RoJiZ0Ll9mdWxsRGF0YS5sZW5ndGgpZm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspe3ZhciBjLGgsZj1yW29dO2lmKGYuX2V4dHJlbWVzPXt9LFwicGFwZXJcIiE9PWYueHJlZil7dmFyIHA9XCJwaXhlbFwiPT09Zi54c2l6ZW1vZGU/Zi54YW5jaG9yOmYueDAsZD1cInBpeGVsXCI9PT1mLnhzaXplbW9kZT9mLnhhbmNob3I6Zi54MTsoaD11KGM9aS5nZXRGcm9tSWQodCxmLnhyZWYpLHAsZCxmLnBhdGgsYS5wYXJhbUlzWCkpJiYoZi5fZXh0cmVtZXNbYy5faWRdPWkuZmluZEV4dHJlbWVzKGMsaCxzKGYpKSl9aWYoXCJwYXBlclwiIT09Zi55cmVmKXt2YXIgZz1cInBpeGVsXCI9PT1mLnlzaXplbW9kZT9mLnlhbmNob3I6Zi55MCx2PVwicGl4ZWxcIj09PWYueXNpemVtb2RlP2YueWFuY2hvcjpmLnkxOyhoPXUoYz1pLmdldEZyb21JZCh0LGYueXJlZiksZyx2LGYucGF0aCxhLnBhcmFtSXNZKSkmJihmLl9leHRyZW1lc1tjLl9pZF09aS5maW5kRXh0cmVtZXMoYyxoLGwoZikpKX19fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuL2NvbnN0YW50c1wiOjY1NixcIi4vaGVscGVyc1wiOjY1OX1dLDY1NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17c2VnbWVudFJFOi9bTUxIVlFDVFNaXVteTUxIVlFDVFNaXSovZyxwYXJhbVJFOi9bXlxccyxdKy9nLHBhcmFtSXNYOntNOnswOiEwLGRyYXduOjB9LEw6ezA6ITAsZHJhd246MH0sSDp7MDohMCxkcmF3bjowfSxWOnt9LFE6ezA6ITAsMjohMCxkcmF3bjoyfSxDOnswOiEwLDI6ITAsNDohMCxkcmF3bjo0fSxUOnswOiEwLGRyYXduOjB9LFM6ezA6ITAsMjohMCxkcmF3bjoyfSxaOnt9fSxwYXJhbUlzWTp7TTp7MTohMCxkcmF3bjoxfSxMOnsxOiEwLGRyYXduOjF9LEg6e30sVjp7MDohMCxkcmF3bjowfSxROnsxOiEwLDM6ITAsZHJhd246M30sQzp7MTohMCwzOiEwLDU6ITAsZHJhd246NX0sVDp7MTohMCxkcmF3bjoxfSxTOnsxOiEwLDM6ITAsZHJhd246NX0sWjp7fX0sbnVtUGFyYW1zOntNOjIsTDoyLEg6MSxWOjEsUTo0LEM6NixUOjIsUzo0LFo6MH19fSx7fV0sNjU3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxhPXQoXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIiksbz10KFwiLi9hdHRyaWJ1dGVzXCIpLHM9dChcIi4vaGVscGVyc1wiKTtmdW5jdGlvbiBsKHQsZSxyKXtmdW5jdGlvbiBhKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxvLHIsaSl9aWYoYShcInZpc2libGVcIikpe2EoXCJsYXllclwiKSxhKFwib3BhY2l0eVwiKSxhKFwiZmlsbGNvbG9yXCIpLGEoXCJsaW5lLmNvbG9yXCIpLGEoXCJsaW5lLndpZHRoXCIpLGEoXCJsaW5lLmRhc2hcIik7Zm9yKHZhciBsPWEoXCJ0eXBlXCIsdC5wYXRoP1wicGF0aFwiOlwicmVjdFwiKSxjPWEoXCJ4c2l6ZW1vZGVcIiksdT1hKFwieXNpemVtb2RlXCIpLGg9W1wieFwiLFwieVwiXSxmPTA7ZjwyO2YrKyl7dmFyIHAsZCxnLHY9aFtmXSxtPXYrXCJhbmNob3JcIix5PVwieFwiPT09dj9jOnUseD17X2Z1bGxMYXlvdXQ6cn0sYj1pLmNvZXJjZVJlZih0LGUseCx2LFwiXCIsXCJwYXBlclwiKTtpZihcInBhcGVyXCIhPT1iPygocD1pLmdldEZyb21JZCh4LGIpKS5fc2hhcGVJbmRpY2VzLnB1c2goZS5faW5kZXgpLGc9cy5yYW5nZVRvU2hhcGVQb3NpdGlvbihwKSxkPXMuc2hhcGVQb3NpdGlvblRvUmFuZ2UocCkpOmQ9Zz1uLmlkZW50aXR5LFwicGF0aFwiIT09bCl7dmFyIF89ditcIjBcIix3PXYrXCIxXCIsaz10W19dLEE9dFt3XTt0W19dPWQodFtfXSwhMCksdFt3XT1kKHRbd10sITApLFwicGl4ZWxcIj09PXk/KGEoXywwKSxhKHcsMTApKTooaS5jb2VyY2VQb3NpdGlvbihlLHgsYSxiLF8sLjI1KSxpLmNvZXJjZVBvc2l0aW9uKGUseCxhLGIsdywuNzUpKSxlW19dPWcoZVtfXSksZVt3XT1nKGVbd10pLHRbX109ayx0W3ddPUF9aWYoXCJwaXhlbFwiPT09eSl7dmFyIFQ9dFttXTt0W21dPWQodFttXSwhMCksaS5jb2VyY2VQb3NpdGlvbihlLHgsYSxiLG0sLjI1KSxlW21dPWcoZVttXSksdFttXT1UfX1cInBhdGhcIj09PWw/YShcInBhdGhcIik6bi5ub25lT3JBbGwodCxlLFtcIngwXCIsXCJ4MVwiLFwieTBcIixcInkxXCJdKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7YSh0LGUse25hbWU6XCJzaGFwZXNcIixoYW5kbGVJdGVtRGVmYXVsdHM6bH0pfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCI6NzQ1LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuL2F0dHJpYnV0ZXNcIjo2NTQsXCIuL2hlbHBlcnNcIjo2NTl9XSw2NTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLG89dChcIi4uL2NvbG9yXCIpLHM9dChcIi4uL2RyYXdpbmdcIiksbD10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKS5hcnJheUVkaXRvcixjPXQoXCIuLi9kcmFnZWxlbWVudFwiKSx1PXQoXCIuLi8uLi9saWIvc2V0Y3Vyc29yXCIpLGg9dChcIi4vY29uc3RhbnRzXCIpLGY9dChcIi4vaGVscGVyc1wiKTtmdW5jdGlvbiBwKHQsZSl7dC5fZnVsbExheW91dC5fcGFwZXJkaXYuc2VsZWN0QWxsKCcuc2hhcGVsYXllciBbZGF0YS1pbmRleD1cIicrZSsnXCJdJykucmVtb3ZlKCk7dmFyIHI9dC5fZnVsbExheW91dC5zaGFwZXNbZV18fHt9O2lmKHIuX2lucHV0JiYhMSE9PXIudmlzaWJsZSlpZihcImJlbG93XCIhPT1yLmxheWVyKW0odC5fZnVsbExheW91dC5fc2hhcGVVcHBlckxheWVyKTtlbHNlIGlmKFwicGFwZXJcIj09PXIueHJlZnx8XCJwYXBlclwiPT09ci55cmVmKW0odC5fZnVsbExheW91dC5fc2hhcGVMb3dlckxheWVyKTtlbHNle3ZhciBwPXQuX2Z1bGxMYXlvdXQuX3Bsb3RzW3IueHJlZityLnlyZWZdO2lmKHApbSgocC5tYWlucGxvdGluZm98fHApLnNoYXBlbGF5ZXIpO2Vsc2UgbSh0Ll9mdWxsTGF5b3V0Ll9zaGFwZUxvd2VyTGF5ZXIpfWZ1bmN0aW9uIG0ocCl7dmFyIG09e1wiZGF0YS1pbmRleFwiOmUsXCJmaWxsLXJ1bGVcIjpcImV2ZW5vZGRcIixkOmcodCxyKX0seT1yLmxpbmUud2lkdGg/ci5saW5lLmNvbG9yOlwicmdiYSgwLDAsMCwwKVwiLHg9cC5hcHBlbmQoXCJwYXRoXCIpLmF0dHIobSkuc3R5bGUoXCJvcGFjaXR5XCIsci5vcGFjaXR5KS5jYWxsKG8uc3Ryb2tlLHkpLmNhbGwoby5maWxsLHIuZmlsbGNvbG9yKS5jYWxsKHMuZGFzaExpbmUsci5saW5lLmRhc2gsci5saW5lLndpZHRoKTtkKHgsdCxyKSx0Ll9jb250ZXh0LmVkaXRzLnNoYXBlUG9zaXRpb24mJmZ1bmN0aW9uKHQsZSxyLG8scCl7dmFyIG0seSx4LGIsXyx3LGssQSxULE0sUyxFLEMsTCx6LE8sST0xMCxEPTEwLFA9XCJwaXhlbFwiPT09ci54c2l6ZW1vZGUsUj1cInBpeGVsXCI9PT1yLnlzaXplbW9kZSxGPVwibGluZVwiPT09ci50eXBlLEI9XCJwYXRoXCI9PT1yLnR5cGUsTj1sKHQubGF5b3V0LFwic2hhcGVzXCIsciksaj1OLm1vZGlmeUl0ZW0sVj1hLmdldEZyb21JZCh0LHIueHJlZiksVT1hLmdldEZyb21JZCh0LHIueXJlZikscT1mLmdldERhdGFUb1BpeGVsKHQsViksSD1mLmdldERhdGFUb1BpeGVsKHQsVSwhMCksRz1mLmdldFBpeGVsVG9EYXRhKHQsViksWT1mLmdldFBpeGVsVG9EYXRhKHQsVSwhMCksVz1GP2Z1bmN0aW9uKCl7dmFyIHQ9TWF0aC5tYXgoci5saW5lLndpZHRoLDEwKSxuPXAuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiZGF0YS1pbmRleFwiLG8pO24uYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLGUuYXR0cihcImRcIikpLnN0eWxlKHtjdXJzb3I6XCJtb3ZlXCIsXCJzdHJva2Utd2lkdGhcIjp0LFwic3Ryb2tlLW9wYWNpdHlcIjpcIjBcIn0pO3ZhciBpPXtcImZpbGwtb3BhY2l0eVwiOlwiMFwifSxhPXQvMj4xMD90LzI6MTA7cmV0dXJuIG4uYXBwZW5kKFwiY2lyY2xlXCIpLmF0dHIoe1wiZGF0YS1saW5lLXBvaW50XCI6XCJzdGFydC1wb2ludFwiLGN4OlA/cShyLnhhbmNob3IpK3IueDA6cShyLngwKSxjeTpSP0goci55YW5jaG9yKS1yLnkwOkgoci55MCkscjphfSkuc3R5bGUoaSkuY2xhc3NlZChcImN1cnNvci1ncmFiXCIsITApLG4uYXBwZW5kKFwiY2lyY2xlXCIpLmF0dHIoe1wiZGF0YS1saW5lLXBvaW50XCI6XCJlbmQtcG9pbnRcIixjeDpQP3Eoci54YW5jaG9yKStyLngxOnEoci54MSksY3k6Uj9IKHIueWFuY2hvciktci55MTpIKHIueTEpLHI6YX0pLnN0eWxlKGkpLmNsYXNzZWQoXCJjdXJzb3ItZ3JhYlwiLCEwKSxufSgpOmUsWD17ZWxlbWVudDpXLm5vZGUoKSxnZDp0LHByZXBGbjpmdW5jdGlvbihuKXtQJiYoXz1xKHIueGFuY2hvcikpO1ImJih3PUgoci55YW5jaG9yKSk7XCJwYXRoXCI9PT1yLnR5cGU/ej1yLnBhdGg6KG09UD9yLngwOnEoci54MCkseT1SP3IueTA6SChyLnkwKSx4PVA/ci54MTpxKHIueDEpLGI9Uj9yLnkxOkgoci55MSkpO208eD8oVD1tLEM9XCJ4MFwiLE09eCxMPVwieDFcIik6KFQ9eCxDPVwieDFcIixNPW0sTD1cIngwXCIpOyFSJiZ5PGJ8fFImJnk+Yj8oaz15LFM9XCJ5MFwiLEE9YixFPVwieTFcIik6KGs9YixTPVwieTFcIixBPXksRT1cInkwXCIpO1oobiksSyhwLHIpLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLnhyZWYsaT1lLnlyZWYsbz1hLmdldEZyb21JZChyLG4pLGw9YS5nZXRGcm9tSWQocixpKSxjPVwiXCI7XCJwYXBlclwiPT09bnx8by5hdXRvcmFuZ2V8fChjKz1uKTtcInBhcGVyXCI9PT1pfHxsLmF1dG9yYW5nZXx8KGMrPWkpO3Muc2V0Q2xpcFVybCh0LGM/XCJjbGlwXCIrci5fZnVsbExheW91dC5fdWlkK2M6bnVsbCxyKX0oZSxyLHQpLFgubW92ZUZuPVwibW92ZVwiPT09Tz8kOkp9LGRvbmVGbjpmdW5jdGlvbigpe3UoZSksUShwKSxkKGUsdCxyKSxuLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix0LE4uZ2V0VXBkYXRlT2JqKCkpfSxjbGlja0ZuOmZ1bmN0aW9uKCl7UShwKX19O2Z1bmN0aW9uIFoodCl7aWYoRilPPVwicGF0aFwiPT09dC50YXJnZXQudGFnTmFtZT9cIm1vdmVcIjpcInN0YXJ0LXBvaW50XCI9PT10LnRhcmdldC5hdHRyaWJ1dGVzW1wiZGF0YS1saW5lLXBvaW50XCJdLnZhbHVlP1wicmVzaXplLW92ZXItc3RhcnQtcG9pbnRcIjpcInJlc2l6ZS1vdmVyLWVuZC1wb2ludFwiO2Vsc2V7dmFyIHI9WC5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci5yaWdodC1yLmxlZnQsaT1yLmJvdHRvbS1yLnRvcCxhPXQuY2xpZW50WC1yLmxlZnQsbz10LmNsaWVudFktci50b3Ascz0hQiYmbj5JJiZpPkQmJiF0LnNoaWZ0S2V5P2MuZ2V0Q3Vyc29yKGEvbiwxLW8vaSk6XCJtb3ZlXCI7dShlLHMpLE89cy5zcGxpdChcIi1cIilbMF19fWZ1bmN0aW9uICQobixpKXtpZihcInBhdGhcIj09PXIudHlwZSl7dmFyIGE9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LG89YSxzPWE7UD9qKFwieGFuY2hvclwiLHIueGFuY2hvcj1HKF8rbikpOihvPWZ1bmN0aW9uKHQpe3JldHVybiBHKHEodCkrbil9LFYmJlwiZGF0ZVwiPT09Vi50eXBlJiYobz1mLmVuY29kZURhdGUobykpKSxSP2ooXCJ5YW5jaG9yXCIsci55YW5jaG9yPVkodytpKSk6KHM9ZnVuY3Rpb24odCl7cmV0dXJuIFkoSCh0KStpKX0sVSYmXCJkYXRlXCI9PT1VLnR5cGUmJihzPWYuZW5jb2RlRGF0ZShzKSkpLGooXCJwYXRoXCIsci5wYXRoPXYoeixvLHMpKX1lbHNlIFA/aihcInhhbmNob3JcIixyLnhhbmNob3I9RyhfK24pKTooaihcIngwXCIsci54MD1HKG0rbikpLGooXCJ4MVwiLHIueDE9Ryh4K24pKSksUj9qKFwieWFuY2hvclwiLHIueWFuY2hvcj1ZKHcraSkpOihqKFwieTBcIixyLnkwPVkoeStpKSksaihcInkxXCIsci55MT1ZKGIraSkpKTtlLmF0dHIoXCJkXCIsZyh0LHIpKSxLKHAscil9ZnVuY3Rpb24gSihuLGkpe2lmKEIpe3ZhciBhPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxvPWEscz1hO1A/aihcInhhbmNob3JcIixyLnhhbmNob3I9RyhfK24pKToobz1mdW5jdGlvbih0KXtyZXR1cm4gRyhxKHQpK24pfSxWJiZcImRhdGVcIj09PVYudHlwZSYmKG89Zi5lbmNvZGVEYXRlKG8pKSksUj9qKFwieWFuY2hvclwiLHIueWFuY2hvcj1ZKHcraSkpOihzPWZ1bmN0aW9uKHQpe3JldHVybiBZKEgodCkraSl9LFUmJlwiZGF0ZVwiPT09VS50eXBlJiYocz1mLmVuY29kZURhdGUocykpKSxqKFwicGF0aFwiLHIucGF0aD12KHosbyxzKSl9ZWxzZSBpZihGKXtpZihcInJlc2l6ZS1vdmVyLXN0YXJ0LXBvaW50XCI9PT1PKXt2YXIgbD1tK24sYz1SP3ktaTp5K2k7aihcIngwXCIsci54MD1QP2w6RyhsKSksaihcInkwXCIsci55MD1SP2M6WShjKSl9ZWxzZSBpZihcInJlc2l6ZS1vdmVyLWVuZC1wb2ludFwiPT09Tyl7dmFyIHU9eCtuLGg9Uj9iLWk6YitpO2ooXCJ4MVwiLHIueDE9UD91OkcodSkpLGooXCJ5MVwiLHIueTE9Uj9oOlkoaCkpfX1lbHNle3ZhciBkPX5PLmluZGV4T2YoXCJuXCIpP2sraTprLE49fk8uaW5kZXhPZihcInNcIik/QStpOkEsVz1+Ty5pbmRleE9mKFwid1wiKT9UK246VCxYPX5PLmluZGV4T2YoXCJlXCIpP00rbjpNO35PLmluZGV4T2YoXCJuXCIpJiZSJiYoZD1rLWkpLH5PLmluZGV4T2YoXCJzXCIpJiZSJiYoTj1BLWkpLCghUiYmTi1kPkR8fFImJmQtTj5EKSYmKGooUyxyW1NdPVI/ZDpZKGQpKSxqKEUscltFXT1SP046WShOKSkpLFgtVz5JJiYoaihDLHJbQ109UD9XOkcoVykpLGooTCxyW0xdPVA/WDpHKFgpKSl9ZS5hdHRyKFwiZFwiLGcodCxyKSksSyhwLHIpfWZ1bmN0aW9uIEsodCxlKXsoUHx8UikmJmZ1bmN0aW9uKCl7dmFyIHI9XCJwYXRoXCIhPT1lLnR5cGUsbj10LnNlbGVjdEFsbChcIi52aXN1YWwtY3VlXCIpLmRhdGEoWzBdKTtuLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5hdHRyKHtmaWxsOlwiI2ZmZlwiLFwiZmlsbC1ydWxlXCI6XCJldmVub2RkXCIsc3Ryb2tlOlwiIzAwMFwiLFwic3Ryb2tlLXdpZHRoXCI6MX0pLmNsYXNzZWQoXCJ2aXN1YWwtY3VlXCIsITApO3ZhciBhPXEoUD9lLnhhbmNob3I6aS5taWRSYW5nZShyP1tlLngwLGUueDFdOmYuZXh0cmFjdFBhdGhDb29yZHMoZS5wYXRoLGgucGFyYW1Jc1gpKSksbz1IKFI/ZS55YW5jaG9yOmkubWlkUmFuZ2Uocj9bZS55MCxlLnkxXTpmLmV4dHJhY3RQYXRoQ29vcmRzKGUucGF0aCxoLnBhcmFtSXNZKSkpO2lmKGE9Zi5yb3VuZFBvc2l0aW9uRm9yU2hhcnBTdHJva2VSZW5kZXJpbmcoYSwxKSxvPWYucm91bmRQb3NpdGlvbkZvclNoYXJwU3Ryb2tlUmVuZGVyaW5nKG8sMSksUCYmUil7dmFyIHM9XCJNXCIrKGEtMS0xKStcIixcIisoby0xLTEpK1wiaC04djJoOCB2OGgydi04IGg4di0yaC04IHYtOGgtMiBaXCI7bi5hdHRyKFwiZFwiLHMpfWVsc2UgaWYoUCl7dmFyIGw9XCJNXCIrKGEtMS0xKStcIixcIisoby05LTEpK1widjE4IGgyIHYtMTggWlwiO24uYXR0cihcImRcIixsKX1lbHNle3ZhciBjPVwiTVwiKyhhLTktMSkrXCIsXCIrKG8tMS0xKStcImgxOCB2MiBoLTE4IFpcIjtuLmF0dHIoXCJkXCIsYyl9fSgpfWZ1bmN0aW9uIFEodCl7dC5zZWxlY3RBbGwoXCIudmlzdWFsLWN1ZVwiKS5yZW1vdmUoKX1jLmluaXQoWCksVy5ub2RlKCkub25tb3VzZW1vdmU9Wn0odCx4LHIsZSxwKX19ZnVuY3Rpb24gZCh0LGUscil7dmFyIG49KHIueHJlZityLnlyZWYpLnJlcGxhY2UoL3BhcGVyL2csXCJcIik7cy5zZXRDbGlwVXJsKHQsbj9cImNsaXBcIitlLl9mdWxsTGF5b3V0Ll91aWQrbjpudWxsLGUpfWZ1bmN0aW9uIGcodCxlKXt2YXIgcixuLG8scyxsLGMsdSxwLGQ9ZS50eXBlLGc9YS5nZXRGcm9tSWQodCxlLnhyZWYpLHY9YS5nZXRGcm9tSWQodCxlLnlyZWYpLG09dC5fZnVsbExheW91dC5fc2l6ZTtpZihnPyhyPWYuc2hhcGVQb3NpdGlvblRvUmFuZ2UoZyksbj1mdW5jdGlvbih0KXtyZXR1cm4gZy5fb2Zmc2V0K2cucjJwKHIodCwhMCkpfSk6bj1mdW5jdGlvbih0KXtyZXR1cm4gbS5sK20udyp0fSx2PyhvPWYuc2hhcGVQb3NpdGlvblRvUmFuZ2Uodikscz1mdW5jdGlvbih0KXtyZXR1cm4gdi5fb2Zmc2V0K3YucjJwKG8odCwhMCkpfSk6cz1mdW5jdGlvbih0KXtyZXR1cm4gbS50K20uaCooMS10KX0sXCJwYXRoXCI9PT1kKXJldHVybiBnJiZcImRhdGVcIj09PWcudHlwZSYmKG49Zi5kZWNvZGVEYXRlKG4pKSx2JiZcImRhdGVcIj09PXYudHlwZSYmKHM9Zi5kZWNvZGVEYXRlKHMpKSxmdW5jdGlvbih0LGUscil7dmFyIG49dC5wYXRoLGE9dC54c2l6ZW1vZGUsbz10LnlzaXplbW9kZSxzPXQueGFuY2hvcixsPXQueWFuY2hvcjtyZXR1cm4gbi5yZXBsYWNlKGguc2VnbWVudFJFLGZ1bmN0aW9uKHQpe3ZhciBuPTAsYz10LmNoYXJBdCgwKSx1PWgucGFyYW1Jc1hbY10sZj1oLnBhcmFtSXNZW2NdLHA9aC5udW1QYXJhbXNbY10sZD10LnN1YnN0cigxKS5yZXBsYWNlKGgucGFyYW1SRSxmdW5jdGlvbih0KXtyZXR1cm4gdVtuXT90PVwicGl4ZWxcIj09PWE/ZShzKStOdW1iZXIodCk6ZSh0KTpmW25dJiYodD1cInBpeGVsXCI9PT1vP3IobCktTnVtYmVyKHQpOnIodCkpLCsrbj5wJiYodD1cIlhcIiksdH0pO3JldHVybiBuPnAmJihkPWQucmVwbGFjZSgvW1xccyxdKlguKi8sXCJcIiksaS5sb2coXCJJZ25vcmluZyBleHRyYSBwYXJhbXMgaW4gc2VnbWVudCBcIit0KSksYytkfSl9KGUsbixzKTtpZihcInBpeGVsXCI9PT1lLnhzaXplbW9kZSl7dmFyIHk9bihlLnhhbmNob3IpO2w9eStlLngwLGM9eStlLngxfWVsc2UgbD1uKGUueDApLGM9bihlLngxKTtpZihcInBpeGVsXCI9PT1lLnlzaXplbW9kZSl7dmFyIHg9cyhlLnlhbmNob3IpO3U9eC1lLnkwLHA9eC1lLnkxfWVsc2UgdT1zKGUueTApLHA9cyhlLnkxKTtpZihcImxpbmVcIj09PWQpcmV0dXJuXCJNXCIrbCtcIixcIit1K1wiTFwiK2MrXCIsXCIrcDtpZihcInJlY3RcIj09PWQpcmV0dXJuXCJNXCIrbCtcIixcIit1K1wiSFwiK2MrXCJWXCIrcCtcIkhcIitsK1wiWlwiO3ZhciBiPShsK2MpLzIsXz0odStwKS8yLHc9TWF0aC5hYnMoYi1sKSxrPU1hdGguYWJzKF8tdSksQT1cIkFcIit3K1wiLFwiK2ssVD1iK3crXCIsXCIrXztyZXR1cm5cIk1cIitUK0ErXCIgMCAxLDEgXCIrKGIrXCIsXCIrKF8taykpK0ErXCIgMCAwLDEgXCIrVCtcIlpcIn1mdW5jdGlvbiB2KHQsZSxyKXtyZXR1cm4gdC5yZXBsYWNlKGguc2VnbWVudFJFLGZ1bmN0aW9uKHQpe3ZhciBuPTAsaT10LmNoYXJBdCgwKSxhPWgucGFyYW1Jc1hbaV0sbz1oLnBhcmFtSXNZW2ldLHM9aC5udW1QYXJhbXNbaV07cmV0dXJuIGkrdC5zdWJzdHIoMSkucmVwbGFjZShoLnBhcmFtUkUsZnVuY3Rpb24odCl7cmV0dXJuIG4+PXM/dDooYVtuXT90PWUodCk6b1tuXSYmKHQ9cih0KSksbisrLHQpfSl9KX1lLmV4cG9ydHM9e2RyYXc6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtmb3IodmFyIHIgaW4gZS5fc2hhcGVVcHBlckxheWVyLnNlbGVjdEFsbChcInBhdGhcIikucmVtb3ZlKCksZS5fc2hhcGVMb3dlckxheWVyLnNlbGVjdEFsbChcInBhdGhcIikucmVtb3ZlKCksZS5fcGxvdHMpe3ZhciBuPWUuX3Bsb3RzW3JdLnNoYXBlbGF5ZXI7biYmbi5zZWxlY3RBbGwoXCJwYXRoXCIpLnJlbW92ZSgpfWZvcih2YXIgaT0wO2k8ZS5zaGFwZXMubGVuZ3RoO2krKyllLnNoYXBlc1tpXS52aXNpYmxlJiZwKHQsaSl9LGRyYXdPbmU6cH19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9zZXRjdXJzb3JcIjo3MjEsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL2NvbG9yXCI6NTc4LFwiLi4vZHJhZ2VsZW1lbnRcIjo1OTYsXCIuLi9kcmF3aW5nXCI6NTk5LFwiLi9jb25zdGFudHNcIjo2NTYsXCIuL2hlbHBlcnNcIjo2NTl9XSw2NTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9jb25zdGFudHNcIiksaT10KFwiLi4vLi4vbGliXCIpO3IucmFuZ2VUb1NoYXBlUG9zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuXCJsb2dcIj09PXQudHlwZT90LnIyZDpmdW5jdGlvbih0KXtyZXR1cm4gdH19LHIuc2hhcGVQb3NpdGlvblRvUmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuXCJsb2dcIj09PXQudHlwZT90LmQycjpmdW5jdGlvbih0KXtyZXR1cm4gdH19LHIuZGVjb2RlRGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSYmKGU9ZS5yZXBsYWNlKFwiX1wiLFwiIFwiKSksdChlKX19LHIuZW5jb2RlRGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkucmVwbGFjZShcIiBcIixcIl9cIil9fSxyLmV4dHJhY3RQYXRoQ29vcmRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107cmV0dXJuIHQubWF0Y2gobi5zZWdtZW50UkUpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGE9ZVt0LmNoYXJBdCgwKV0uZHJhd247aWYodm9pZCAwIT09YSl7dmFyIG89dC5zdWJzdHIoMSkubWF0Y2gobi5wYXJhbVJFKTshb3x8by5sZW5ndGg8YXx8ci5wdXNoKGkuY2xlYW5OdW1iZXIob1thXSkpfX0pLHJ9LHIuZ2V0RGF0YVRvUGl4ZWw9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGE9dC5fZnVsbExheW91dC5fc2l6ZTtpZihlKXt2YXIgbz1yLnNoYXBlUG9zaXRpb25Ub1JhbmdlKGUpO2k9ZnVuY3Rpb24odCl7cmV0dXJuIGUuX29mZnNldCtlLnIycChvKHQsITApKX0sXCJkYXRlXCI9PT1lLnR5cGUmJihpPXIuZGVjb2RlRGF0ZShpKSl9ZWxzZSBpPW4/ZnVuY3Rpb24odCl7cmV0dXJuIGEudCthLmgqKDEtdCl9OmZ1bmN0aW9uKHQpe3JldHVybiBhLmwrYS53KnR9O3JldHVybiBpfSxyLmdldFBpeGVsVG9EYXRhPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhPXQuX2Z1bGxMYXlvdXQuX3NpemU7aWYoZSl7dmFyIG89ci5yYW5nZVRvU2hhcGVQb3NpdGlvbihlKTtpPWZ1bmN0aW9uKHQpe3JldHVybiBvKGUucDJyKHQtZS5fb2Zmc2V0KSl9fWVsc2UgaT1uP2Z1bmN0aW9uKHQpe3JldHVybiAxLSh0LWEudCkvYS5ofTpmdW5jdGlvbih0KXtyZXR1cm4odC1hLmwpL2Eud307cmV0dXJuIGl9LHIucm91bmRQb3NpdGlvbkZvclNoYXJwU3Ryb2tlUmVuZGVyaW5nPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MT09PU1hdGgucm91bmQoZSUyKSxuPU1hdGgucm91bmQodCk7cmV0dXJuIHI/bisuNTpufX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi9jb25zdGFudHNcIjo2NTZ9XSw2NjA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9kcmF3XCIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZTpcImNvbXBvbmVudFwiLG5hbWU6XCJzaGFwZXNcIixsYXlvdXRBdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIiksaW5jbHVkZUJhc2VQbG90OnQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzXCIpKFwic2hhcGVzXCIpLGNhbGNBdXRvcmFuZ2U6dChcIi4vY2FsY19hdXRvcmFuZ2VcIiksZHJhdzpuLmRyYXcsZHJhd09uZTpuLmRyYXdPbmV9fSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzXCI6NzU5LFwiLi9hdHRyaWJ1dGVzXCI6NjU0LFwiLi9jYWxjX2F1dG9yYW5nZVwiOjY1NSxcIi4vZGVmYXVsdHNcIjo2NTcsXCIuL2RyYXdcIjo2NTh9XSw2NjE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL3Bsb3RzL3BhZF9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRGVlcEFsbCxvPXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsLHM9dChcIi4uLy4uL3Bsb3RzL2FuaW1hdGlvbl9hdHRyaWJ1dGVzXCIpLGw9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIikudGVtcGxhdGVkQXJyYXksYz10KFwiLi9jb25zdGFudHNcIiksdT1sKFwic3RlcFwiLHt2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITB9LG1ldGhvZDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wicmVzdHlsZVwiLFwicmVsYXlvdXRcIixcImFuaW1hdGVcIixcInVwZGF0ZVwiLFwic2tpcFwiXSxkZmx0OlwicmVzdHlsZVwifSxhcmdzOnt2YWxUeXBlOlwiaW5mb19hcnJheVwiLGZyZWVMZW5ndGg6ITAsaXRlbXM6W3t2YWxUeXBlOlwiYW55XCJ9LHt2YWxUeXBlOlwiYW55XCJ9LHt2YWxUeXBlOlwiYW55XCJ9XX0sbGFiZWw6e3ZhbFR5cGU6XCJzdHJpbmdcIn0sdmFsdWU6e3ZhbFR5cGU6XCJzdHJpbmdcIn0sZXhlY3V0ZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfX0pO2UuZXhwb3J0cz1vKGwoXCJzbGlkZXJcIix7dmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfSxhY3RpdmU6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjB9LHN0ZXBzOnUsbGVubW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiZnJhY3Rpb25cIixcInBpeGVsc1wiXSxkZmx0OlwiZnJhY3Rpb25cIn0sbGVuOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxfSx4Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOi0yLG1heDozLGRmbHQ6MH0scGFkOmEoaSh7ZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0pLHt9LHt0OntkZmx0OjIwfX0pLHhhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImF1dG9cIixcImxlZnRcIixcImNlbnRlclwiLFwicmlnaHRcIl0sZGZsdDpcImxlZnRcIn0seTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjotMixtYXg6MyxkZmx0OjB9LHlhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImF1dG9cIixcInRvcFwiLFwibWlkZGxlXCIsXCJib3R0b21cIl0sZGZsdDpcInRvcFwifSx0cmFuc2l0aW9uOntkdXJhdGlvbjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MTUwfSxlYXNpbmc6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOnMudHJhbnNpdGlvbi5lYXNpbmcudmFsdWVzLGRmbHQ6XCJjdWJpYy1pbi1vdXRcIn19LGN1cnJlbnR2YWx1ZTp7dmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfSx4YW5jaG9yOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJsZWZ0XCIsXCJjZW50ZXJcIixcInJpZ2h0XCJdLGRmbHQ6XCJsZWZ0XCJ9LG9mZnNldDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MTB9LHByZWZpeDp7dmFsVHlwZTpcInN0cmluZ1wifSxzdWZmaXg6e3ZhbFR5cGU6XCJzdHJpbmdcIn0sZm9udDpuKHt9KX0sZm9udDpuKHt9KSxhY3RpdmViZ2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmMuZ3JpcEJnQWN0aXZlQ29sb3J9LGJnY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6Yy5yYWlsQmdDb2xvcn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6Yy5yYWlsQm9yZGVyQ29sb3J9LGJvcmRlcndpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDpjLnJhaWxCb3JkZXJXaWR0aH0sdGlja2xlbjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6Yy50aWNrTGVuZ3RofSx0aWNrY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6Yy50aWNrQ29sb3J9LHRpY2t3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MX0sbWlub3J0aWNrbGVuOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDpjLm1pbm9yVGlja0xlbmd0aH19KSxcImFycmF5ZHJhd1wiLFwiZnJvbS1yb290XCIpfSx7XCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi9wbG90cy9hbmltYXRpb25fYXR0cmlidXRlc1wiOjc0NCxcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiOjc3NSxcIi4uLy4uL3Bsb3RzL3BhZF9hdHRyaWJ1dGVzXCI6ODA5LFwiLi9jb25zdGFudHNcIjo2NjJ9XSw2NjI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e25hbWU6XCJzbGlkZXJzXCIsY29udGFpbmVyQ2xhc3NOYW1lOlwic2xpZGVyLWNvbnRhaW5lclwiLGdyb3VwQ2xhc3NOYW1lOlwic2xpZGVyLWdyb3VwXCIsaW5wdXRBcmVhQ2xhc3M6XCJzbGlkZXItaW5wdXQtYXJlYVwiLHJhaWxSZWN0Q2xhc3M6XCJzbGlkZXItcmFpbC1yZWN0XCIscmFpbFRvdWNoUmVjdENsYXNzOlwic2xpZGVyLXJhaWwtdG91Y2gtcmVjdFwiLGdyaXBSZWN0Q2xhc3M6XCJzbGlkZXItZ3JpcC1yZWN0XCIsdGlja1JlY3RDbGFzczpcInNsaWRlci10aWNrLXJlY3RcIixpbnB1dFByb3h5Q2xhc3M6XCJzbGlkZXItaW5wdXQtcHJveHlcIixsYWJlbHNDbGFzczpcInNsaWRlci1sYWJlbHNcIixsYWJlbEdyb3VwQ2xhc3M6XCJzbGlkZXItbGFiZWwtZ3JvdXBcIixsYWJlbENsYXNzOlwic2xpZGVyLWxhYmVsXCIsY3VycmVudFZhbHVlQ2xhc3M6XCJzbGlkZXItY3VycmVudC12YWx1ZVwiLHJhaWxIZWlnaHQ6NSxtZW51SW5kZXhBdHRyTmFtZTpcInNsaWRlci1hY3RpdmUtaW5kZXhcIixhdXRvTWFyZ2luSWRSb290Olwic2xpZGVyLVwiLG1pbldpZHRoOjMwLG1pbkhlaWdodDozMCx0ZXh0UGFkWDo0MCxhcnJvd09mZnNldFg6NCxyYWlsUmFkaXVzOjIscmFpbFdpZHRoOjUscmFpbEJvcmRlcjo0LHJhaWxCb3JkZXJXaWR0aDoxLHJhaWxCb3JkZXJDb2xvcjpcIiNiZWM4ZDlcIixyYWlsQmdDb2xvcjpcIiNmOGZhZmNcIixyYWlsSW5zZXQ6OCxzdGVwSW5zZXQ6MTAsZ3JpcFJhZGl1czoxMCxncmlwV2lkdGg6MjAsZ3JpcEhlaWdodDoyMCxncmlwQm9yZGVyOjIwLGdyaXBCb3JkZXJXaWR0aDoxLGdyaXBCb3JkZXJDb2xvcjpcIiNiZWM4ZDlcIixncmlwQmdDb2xvcjpcIiNmNmY4ZmFcIixncmlwQmdBY3RpdmVDb2xvcjpcIiNkYmRkZTBcIixsYWJlbFBhZGRpbmc6OCxsYWJlbE9mZnNldDowLHRpY2tXaWR0aDoxLHRpY2tDb2xvcjpcIiMzMzNcIix0aWNrT2Zmc2V0OjI1LHRpY2tMZW5ndGg6NyxtaW5vclRpY2tPZmZzZXQ6MjUsbWlub3JUaWNrQ29sb3I6XCIjMzMzXCIsbWlub3JUaWNrTGVuZ3RoOjQsY3VycmVudFZhbHVlUGFkZGluZzo4LGN1cnJlbnRWYWx1ZUluc2V0OjB9fSx7fV0sNjYzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIiksYT10KFwiLi9hdHRyaWJ1dGVzXCIpLG89dChcIi4vY29uc3RhbnRzXCIpLm5hbWUscz1hLnN0ZXBzO2Z1bmN0aW9uIGwodCxlLHIpe2Z1bmN0aW9uIG8ocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX1mb3IodmFyIHM9aSh0LGUse25hbWU6XCJzdGVwc1wiLGhhbmRsZUl0ZW1EZWZhdWx0czpjfSksbD0wLHU9MDt1PHMubGVuZ3RoO3UrKylzW3VdLnZpc2libGUmJmwrKztpZihsPDI/ZS52aXNpYmxlPSExOm8oXCJ2aXNpYmxlXCIpKXtlLl9zdGVwQ291bnQ9bDt2YXIgaD1lLl92aXNpYmxlU3RlcHM9bi5maWx0ZXJWaXNpYmxlKHMpOyhzW28oXCJhY3RpdmVcIildfHx7fSkudmlzaWJsZXx8KGUuYWN0aXZlPWhbMF0uX2luZGV4KSxvKFwieFwiKSxvKFwieVwiKSxuLm5vbmVPckFsbCh0LGUsW1wieFwiLFwieVwiXSksbyhcInhhbmNob3JcIiksbyhcInlhbmNob3JcIiksbyhcImxlblwiKSxvKFwibGVubW9kZVwiKSxvKFwicGFkLnRcIiksbyhcInBhZC5yXCIpLG8oXCJwYWQuYlwiKSxvKFwicGFkLmxcIiksbi5jb2VyY2VGb250KG8sXCJmb250XCIsci5mb250KSxvKFwiY3VycmVudHZhbHVlLnZpc2libGVcIikmJihvKFwiY3VycmVudHZhbHVlLnhhbmNob3JcIiksbyhcImN1cnJlbnR2YWx1ZS5wcmVmaXhcIiksbyhcImN1cnJlbnR2YWx1ZS5zdWZmaXhcIiksbyhcImN1cnJlbnR2YWx1ZS5vZmZzZXRcIiksbi5jb2VyY2VGb250KG8sXCJjdXJyZW50dmFsdWUuZm9udFwiLGUuZm9udCkpLG8oXCJ0cmFuc2l0aW9uLmR1cmF0aW9uXCIpLG8oXCJ0cmFuc2l0aW9uLmVhc2luZ1wiKSxvKFwiYmdjb2xvclwiKSxvKFwiYWN0aXZlYmdjb2xvclwiKSxvKFwiYm9yZGVyY29sb3JcIiksbyhcImJvcmRlcndpZHRoXCIpLG8oXCJ0aWNrbGVuXCIpLG8oXCJ0aWNrd2lkdGhcIiksbyhcInRpY2tjb2xvclwiKSxvKFwibWlub3J0aWNrbGVuXCIpfX1mdW5jdGlvbiBjKHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfWlmKFwic2tpcFwiPT09dC5tZXRob2R8fEFycmF5LmlzQXJyYXkodC5hcmdzKT9yKFwidmlzaWJsZVwiKTplLnZpc2libGU9ITEpe3IoXCJtZXRob2RcIikscihcImFyZ3NcIik7dmFyIGk9cihcImxhYmVsXCIsXCJzdGVwLVwiK2UuX2luZGV4KTtyKFwidmFsdWVcIixpKSxyKFwiZXhlY3V0ZVwiKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aSh0LGUse25hbWU6byxoYW5kbGVJdGVtRGVmYXVsdHM6bH0pfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCI6NzQ1LFwiLi9hdHRyaWJ1dGVzXCI6NjYxLFwiLi9jb25zdGFudHNcIjo2NjJ9XSw2NjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vcGxvdHMvcGxvdHNcIiksYT10KFwiLi4vY29sb3JcIiksbz10KFwiLi4vZHJhd2luZ1wiKSxzPXQoXCIuLi8uLi9saWJcIiksbD10KFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCIpLGM9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIikuYXJyYXlFZGl0b3IsdT10KFwiLi9jb25zdGFudHNcIiksaD10KFwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiKSxmPWguTElORV9TUEFDSU5HLHA9aC5GUk9NX1RMLGQ9aC5GUk9NX0JSO2Z1bmN0aW9uIGcodCl7cmV0dXJuIHUuYXV0b01hcmdpbklkUm9vdCt0Ll9pbmRleH1mdW5jdGlvbiB2KHQpe3JldHVybiB0Ll9pbmRleH1mdW5jdGlvbiBtKHQsZSl7dmFyIHI9by50ZXN0ZXIuc2VsZWN0QWxsKFwiZy5cIit1LmxhYmVsR3JvdXBDbGFzcykuZGF0YShlLl92aXNpYmxlU3RlcHMpO3IuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQodS5sYWJlbEdyb3VwQ2xhc3MsITApO3ZhciBhPTAsYz0wO3IuZWFjaChmdW5jdGlvbih0KXt2YXIgcj1iKG4uc2VsZWN0KHRoaXMpLHtzdGVwOnR9LGUpLm5vZGUoKTtpZihyKXt2YXIgaT1vLmJCb3gocik7Yz1NYXRoLm1heChjLGkuaGVpZ2h0KSxhPU1hdGgubWF4KGEsaS53aWR0aCl9fSksci5yZW1vdmUoKTt2YXIgaD1lLl9kaW1zPXt9O2guaW5wdXRBcmVhV2lkdGg9TWF0aC5tYXgodS5yYWlsV2lkdGgsdS5ncmlwSGVpZ2h0KTt2YXIgZj10Ll9mdWxsTGF5b3V0Ll9zaXplO2gubHg9Zi5sK2YudyplLngsaC5seT1mLnQrZi5oKigxLWUueSksXCJmcmFjdGlvblwiPT09ZS5sZW5tb2RlP2gub3V0ZXJMZW5ndGg9TWF0aC5yb3VuZChmLncqZS5sZW4pOmgub3V0ZXJMZW5ndGg9ZS5sZW4saC5pbnB1dEFyZWFTdGFydD0wLGguaW5wdXRBcmVhTGVuZ3RoPU1hdGgucm91bmQoaC5vdXRlckxlbmd0aC1lLnBhZC5sLWUucGFkLnIpO3ZhciB2PShoLmlucHV0QXJlYUxlbmd0aC0yKnUuc3RlcEluc2V0KS8oZS5fc3RlcENvdW50LTEpLG09YSt1LmxhYmVsUGFkZGluZztpZihoLmxhYmVsU3RyaWRlPU1hdGgubWF4KDEsTWF0aC5jZWlsKG0vdikpLGgubGFiZWxIZWlnaHQ9YyxoLmN1cnJlbnRWYWx1ZU1heFdpZHRoPTAsaC5jdXJyZW50VmFsdWVIZWlnaHQ9MCxoLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0PTAsaC5jdXJyZW50VmFsdWVNYXhMaW5lcz0xLGUuY3VycmVudHZhbHVlLnZpc2libGUpe3ZhciB4PW8udGVzdGVyLmFwcGVuZChcImdcIik7ci5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPXkoeCxlLHQubGFiZWwpLG49ci5ub2RlKCkmJm8uYkJveChyLm5vZGUoKSl8fHt3aWR0aDowLGhlaWdodDowfSxpPWwubGluZUNvdW50KHIpO2guY3VycmVudFZhbHVlTWF4V2lkdGg9TWF0aC5tYXgoaC5jdXJyZW50VmFsdWVNYXhXaWR0aCxNYXRoLmNlaWwobi53aWR0aCkpLGguY3VycmVudFZhbHVlSGVpZ2h0PU1hdGgubWF4KGguY3VycmVudFZhbHVlSGVpZ2h0LE1hdGguY2VpbChuLmhlaWdodCkpLGguY3VycmVudFZhbHVlTWF4TGluZXM9TWF0aC5tYXgoaC5jdXJyZW50VmFsdWVNYXhMaW5lcyxpKX0pLGguY3VycmVudFZhbHVlVG90YWxIZWlnaHQ9aC5jdXJyZW50VmFsdWVIZWlnaHQrZS5jdXJyZW50dmFsdWUub2Zmc2V0LHgucmVtb3ZlKCl9aC5oZWlnaHQ9aC5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCt1LnRpY2tPZmZzZXQrZS50aWNrbGVuK3UubGFiZWxPZmZzZXQraC5sYWJlbEhlaWdodCtlLnBhZC50K2UucGFkLmI7dmFyIF89XCJsZWZ0XCI7cy5pc1JpZ2h0QW5jaG9yKGUpJiYoaC5seC09aC5vdXRlckxlbmd0aCxfPVwicmlnaHRcIikscy5pc0NlbnRlckFuY2hvcihlKSYmKGgubHgtPWgub3V0ZXJMZW5ndGgvMixfPVwiY2VudGVyXCIpO3ZhciB3PVwidG9wXCI7cy5pc0JvdHRvbUFuY2hvcihlKSYmKGgubHktPWguaGVpZ2h0LHc9XCJib3R0b21cIikscy5pc01pZGRsZUFuY2hvcihlKSYmKGgubHktPWguaGVpZ2h0LzIsdz1cIm1pZGRsZVwiKSxoLm91dGVyTGVuZ3RoPU1hdGguY2VpbChoLm91dGVyTGVuZ3RoKSxoLmhlaWdodD1NYXRoLmNlaWwoaC5oZWlnaHQpLGgubHg9TWF0aC5yb3VuZChoLmx4KSxoLmx5PU1hdGgucm91bmQoaC5seSk7dmFyIGs9e3k6ZS55LGI6aC5oZWlnaHQqZFt3XSx0OmguaGVpZ2h0KnBbd119O1wiZnJhY3Rpb25cIj09PWUubGVubW9kZT8oay5sPTAsay54bD1lLngtZS5sZW4qcFtfXSxrLnI9MCxrLnhyPWUueCtlLmxlbipkW19dKTooay54PWUueCxrLmw9aC5vdXRlckxlbmd0aCpwW19dLGsucj1oLm91dGVyTGVuZ3RoKmRbX10pLGkuYXV0b01hcmdpbih0LGcoZSksayl9ZnVuY3Rpb24geSh0LGUscil7aWYoZS5jdXJyZW50dmFsdWUudmlzaWJsZSl7dmFyIG4saSxhPWUuX2RpbXM7c3dpdGNoKGUuY3VycmVudHZhbHVlLnhhbmNob3Ipe2Nhc2VcInJpZ2h0XCI6bj1hLmlucHV0QXJlYUxlbmd0aC11LmN1cnJlbnRWYWx1ZUluc2V0LWEuY3VycmVudFZhbHVlTWF4V2lkdGgsaT1cImxlZnRcIjticmVhaztjYXNlXCJjZW50ZXJcIjpuPS41KmEuaW5wdXRBcmVhTGVuZ3RoLGk9XCJtaWRkbGVcIjticmVhaztkZWZhdWx0Om49dS5jdXJyZW50VmFsdWVJbnNldCxpPVwibGVmdFwifXZhciBjPXMuZW5zdXJlU2luZ2xlKHQsXCJ0ZXh0XCIsdS5sYWJlbENsYXNzLGZ1bmN0aW9uKHQpe3QuY2xhc3NlZChcInVzZXItc2VsZWN0LW5vbmVcIiwhMCkuYXR0cih7XCJ0ZXh0LWFuY2hvclwiOmksXCJkYXRhLW5vdGV4XCI6MX0pfSksaD1lLmN1cnJlbnR2YWx1ZS5wcmVmaXg/ZS5jdXJyZW50dmFsdWUucHJlZml4OlwiXCI7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHIpaCs9cjtlbHNle3ZhciBwPWUuc3RlcHNbZS5hY3RpdmVdLmxhYmVsLGQ9ZS5fZ2QuX2Z1bGxMYXlvdXQubWV0YTtkJiYocD1zLnRlbXBsYXRlU3RyaW5nKHAse21ldGE6ZH0pKSxoKz1wfWUuY3VycmVudHZhbHVlLnN1ZmZpeCYmKGgrPWUuY3VycmVudHZhbHVlLnN1ZmZpeCksYy5jYWxsKG8uZm9udCxlLmN1cnJlbnR2YWx1ZS5mb250KS50ZXh0KGgpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsZS5fZ2QpO3ZhciBnPWwubGluZUNvdW50KGMpLHY9KGEuY3VycmVudFZhbHVlTWF4TGluZXMrMS1nKSplLmN1cnJlbnR2YWx1ZS5mb250LnNpemUqZjtyZXR1cm4gbC5wb3NpdGlvblRleHQoYyxuLHYpLGN9fWZ1bmN0aW9uIHgodCxlLHIpe3MuZW5zdXJlU2luZ2xlKHQsXCJyZWN0XCIsdS5ncmlwUmVjdENsYXNzLGZ1bmN0aW9uKG4pe24uY2FsbChBLGUsdCxyKS5zdHlsZShcInBvaW50ZXItZXZlbnRzXCIsXCJhbGxcIil9KS5hdHRyKHt3aWR0aDp1LmdyaXBXaWR0aCxoZWlnaHQ6dS5ncmlwSGVpZ2h0LHJ4OnUuZ3JpcFJhZGl1cyxyeTp1LmdyaXBSYWRpdXN9KS5jYWxsKGEuc3Ryb2tlLHIuYm9yZGVyY29sb3IpLmNhbGwoYS5maWxsLHIuYmdjb2xvcikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixyLmJvcmRlcndpZHRoK1wicHhcIil9ZnVuY3Rpb24gYih0LGUscil7dmFyIG49cy5lbnN1cmVTaW5nbGUodCxcInRleHRcIix1LmxhYmVsQ2xhc3MsZnVuY3Rpb24odCl7dC5jbGFzc2VkKFwidXNlci1zZWxlY3Qtbm9uZVwiLCEwKS5hdHRyKHtcInRleHQtYW5jaG9yXCI6XCJtaWRkbGVcIixcImRhdGEtbm90ZXhcIjoxfSl9KSxpPWUuc3RlcC5sYWJlbCxhPXIuX2dkLl9mdWxsTGF5b3V0Lm1ldGE7cmV0dXJuIGEmJihpPXMudGVtcGxhdGVTdHJpbmcoaSx7bWV0YTphfSkpLG4uY2FsbChvLmZvbnQsci5mb250KS50ZXh0KGkpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsci5fZ2QpLG59ZnVuY3Rpb24gXyh0LGUpe3ZhciByPXMuZW5zdXJlU2luZ2xlKHQsXCJnXCIsdS5sYWJlbHNDbGFzcyksaT1lLl9kaW1zLGE9ci5zZWxlY3RBbGwoXCJnLlwiK3UubGFiZWxHcm91cENsYXNzKS5kYXRhKGkubGFiZWxTdGVwcyk7YS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZCh1LmxhYmVsR3JvdXBDbGFzcywhMCksYS5leGl0KCkucmVtb3ZlKCksYS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpO3IuY2FsbChiLHQsZSksby5zZXRUcmFuc2xhdGUocixTKGUsdC5mcmFjdGlvbiksdS50aWNrT2Zmc2V0K2UudGlja2xlbitlLmZvbnQuc2l6ZSpmK3UubGFiZWxPZmZzZXQraS5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCl9KX1mdW5jdGlvbiB3KHQsZSxyLG4saSl7dmFyIGE9TWF0aC5yb3VuZChuKihyLl9zdGVwQ291bnQtMSkpLG89ci5fdmlzaWJsZVN0ZXBzW2FdLl9pbmRleDtvIT09ci5hY3RpdmUmJmsodCxlLHIsbywhMCxpKX1mdW5jdGlvbiBrKHQsZSxyLG4sYSxvKXt2YXIgcz1yLmFjdGl2ZTtyLmFjdGl2ZT1uLGModC5sYXlvdXQsdS5uYW1lLHIpLmFwcGx5VXBkYXRlKFwiYWN0aXZlXCIsbik7dmFyIGw9ci5zdGVwc1tyLmFjdGl2ZV07ZS5jYWxsKE0scixvKSxlLmNhbGwoeSxyKSx0LmVtaXQoXCJwbG90bHlfc2xpZGVyY2hhbmdlXCIse3NsaWRlcjpyLHN0ZXA6ci5zdGVwc1tyLmFjdGl2ZV0saW50ZXJhY3Rpb246YSxwcmV2aW91c0FjdGl2ZTpzfSksbCYmbC5tZXRob2QmJmEmJihlLl9uZXh0TWV0aG9kPyhlLl9uZXh0TWV0aG9kLnN0ZXA9bCxlLl9uZXh0TWV0aG9kLmRvQ2FsbGJhY2s9YSxlLl9uZXh0TWV0aG9kLmRvVHJhbnNpdGlvbj1vKTooZS5fbmV4dE1ldGhvZD17c3RlcDpsLGRvQ2FsbGJhY2s6YSxkb1RyYW5zaXRpb246b30sZS5fbmV4dE1ldGhvZFJhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7dmFyIHI9ZS5fbmV4dE1ldGhvZC5zdGVwO3IubWV0aG9kJiYoci5leGVjdXRlJiZpLmV4ZWN1dGVBUElDb21tYW5kKHQsci5tZXRob2Qsci5hcmdzKSxlLl9uZXh0TWV0aG9kPW51bGwsZS5fbmV4dE1ldGhvZFJhZj1udWxsKX0pKSl9ZnVuY3Rpb24gQSh0LGUscil7dmFyIGk9ci5ub2RlKCksbz1uLnNlbGVjdChlKTtmdW5jdGlvbiBzKCl7cmV0dXJuIHIuZGF0YSgpWzBdfXQub24oXCJtb3VzZWRvd25cIixmdW5jdGlvbigpe3ZhciB0PXMoKTtlLmVtaXQoXCJwbG90bHlfc2xpZGVyc3RhcnRcIix7c2xpZGVyOnR9KTt2YXIgbD1yLnNlbGVjdChcIi5cIit1LmdyaXBSZWN0Q2xhc3MpO24uZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCksbi5ldmVudC5wcmV2ZW50RGVmYXVsdCgpLGwuY2FsbChhLmZpbGwsdC5hY3RpdmViZ2NvbG9yKTt2YXIgYz1FKHQsbi5tb3VzZShpKVswXSk7dyhlLHIsdCxjLCEwKSx0Ll9kcmFnZ2luZz0hMCxvLm9uKFwibW91c2Vtb3ZlXCIsZnVuY3Rpb24oKXt2YXIgdD1zKCksYT1FKHQsbi5tb3VzZShpKVswXSk7dyhlLHIsdCxhLCExKX0pLG8ub24oXCJtb3VzZXVwXCIsZnVuY3Rpb24oKXt2YXIgdD1zKCk7dC5fZHJhZ2dpbmc9ITEsbC5jYWxsKGEuZmlsbCx0LmJnY29sb3IpLG8ub24oXCJtb3VzZXVwXCIsbnVsbCksby5vbihcIm1vdXNlbW92ZVwiLG51bGwpLGUuZW1pdChcInBsb3RseV9zbGlkZXJlbmRcIix7c2xpZGVyOnQsc3RlcDp0LnN0ZXBzW3QuYWN0aXZlXX0pfSl9KX1mdW5jdGlvbiBUKHQsZSl7dmFyIHI9dC5zZWxlY3RBbGwoXCJyZWN0LlwiK3UudGlja1JlY3RDbGFzcykuZGF0YShlLl92aXNpYmxlU3RlcHMpLGk9ZS5fZGltcztyLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKS5jbGFzc2VkKHUudGlja1JlY3RDbGFzcywhMCksci5leGl0KCkucmVtb3ZlKCksci5hdHRyKHt3aWR0aDplLnRpY2t3aWR0aCtcInB4XCIsXCJzaGFwZS1yZW5kZXJpbmdcIjpcImNyaXNwRWRnZXNcIn0pLHIuZWFjaChmdW5jdGlvbih0LHIpe3ZhciBzPXIlaS5sYWJlbFN0cmlkZT09MCxsPW4uc2VsZWN0KHRoaXMpO2wuYXR0cih7aGVpZ2h0OnM/ZS50aWNrbGVuOmUubWlub3J0aWNrbGVufSkuY2FsbChhLmZpbGwsZS50aWNrY29sb3IpLG8uc2V0VHJhbnNsYXRlKGwsUyhlLHIvKGUuX3N0ZXBDb3VudC0xKSktLjUqZS50aWNrd2lkdGgsKHM/dS50aWNrT2Zmc2V0OnUubWlub3JUaWNrT2Zmc2V0KStpLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX0pfWZ1bmN0aW9uIE0odCxlLHIpe2Zvcih2YXIgbj10LnNlbGVjdChcInJlY3QuXCIrdS5ncmlwUmVjdENsYXNzKSxpPTAsYT0wO2E8ZS5fc3RlcENvdW50O2ErKylpZihlLl92aXNpYmxlU3RlcHNbYV0uX2luZGV4PT09ZS5hY3RpdmUpe2k9YTticmVha312YXIgbz1TKGUsaS8oZS5fc3RlcENvdW50LTEpKTtpZighZS5faW52b2tpbmdDb21tYW5kKXt2YXIgcz1uO3ImJmUudHJhbnNpdGlvbi5kdXJhdGlvbj4wJiYocz1zLnRyYW5zaXRpb24oKS5kdXJhdGlvbihlLnRyYW5zaXRpb24uZHVyYXRpb24pLmVhc2UoZS50cmFuc2l0aW9uLmVhc2luZykpLHMuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiKyhvLS41KnUuZ3JpcFdpZHRoKStcIixcIitlLl9kaW1zLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0K1wiKVwiKX19ZnVuY3Rpb24gUyh0LGUpe3ZhciByPXQuX2RpbXM7cmV0dXJuIHIuaW5wdXRBcmVhU3RhcnQrdS5zdGVwSW5zZXQrKHIuaW5wdXRBcmVhTGVuZ3RoLTIqdS5zdGVwSW5zZXQpKk1hdGgubWluKDEsTWF0aC5tYXgoMCxlKSl9ZnVuY3Rpb24gRSh0LGUpe3ZhciByPXQuX2RpbXM7cmV0dXJuIE1hdGgubWluKDEsTWF0aC5tYXgoMCwoZS11LnN0ZXBJbnNldC1yLmlucHV0QXJlYVN0YXJ0KS8oci5pbnB1dEFyZWFMZW5ndGgtMip1LnN0ZXBJbnNldC0yKnIuaW5wdXRBcmVhU3RhcnQpKSl9ZnVuY3Rpb24gQyh0LGUscil7dmFyIG49ci5fZGltcyxpPXMuZW5zdXJlU2luZ2xlKHQsXCJyZWN0XCIsdS5yYWlsVG91Y2hSZWN0Q2xhc3MsZnVuY3Rpb24obil7bi5jYWxsKEEsZSx0LHIpLnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixcImFsbFwiKX0pO2kuYXR0cih7d2lkdGg6bi5pbnB1dEFyZWFMZW5ndGgsaGVpZ2h0Ok1hdGgubWF4KG4uaW5wdXRBcmVhV2lkdGgsdS50aWNrT2Zmc2V0K3IudGlja2xlbituLmxhYmVsSGVpZ2h0KX0pLmNhbGwoYS5maWxsLHIuYmdjb2xvcikuYXR0cihcIm9wYWNpdHlcIiwwKSxvLnNldFRyYW5zbGF0ZShpLDAsbi5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCl9ZnVuY3Rpb24gTCh0LGUpe3ZhciByPWUuX2RpbXMsbj1yLmlucHV0QXJlYUxlbmd0aC0yKnUucmFpbEluc2V0LGk9cy5lbnN1cmVTaW5nbGUodCxcInJlY3RcIix1LnJhaWxSZWN0Q2xhc3MpO2kuYXR0cih7d2lkdGg6bixoZWlnaHQ6dS5yYWlsV2lkdGgscng6dS5yYWlsUmFkaXVzLHJ5OnUucmFpbFJhZGl1cyxcInNoYXBlLXJlbmRlcmluZ1wiOlwiY3Jpc3BFZGdlc1wifSkuY2FsbChhLnN0cm9rZSxlLmJvcmRlcmNvbG9yKS5jYWxsKGEuZmlsbCxlLmJnY29sb3IpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsZS5ib3JkZXJ3aWR0aCtcInB4XCIpLG8uc2V0VHJhbnNsYXRlKGksdS5yYWlsSW5zZXQsLjUqKHIuaW5wdXRBcmVhV2lkdGgtdS5yYWlsV2lkdGgpK3IuY3VycmVudFZhbHVlVG90YWxIZWlnaHQpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dFt1Lm5hbWVdLG49W10saT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldO2EudmlzaWJsZSYmKGEuX2dkPWUsbi5wdXNoKGEpKX1yZXR1cm4gbn0oZSx0KSxhPWUuX2luZm9sYXllci5zZWxlY3RBbGwoXCJnLlwiK3UuY29udGFpbmVyQ2xhc3NOYW1lKS5kYXRhKHIubGVuZ3RoPjA/WzBdOltdKTtmdW5jdGlvbiBzKGUpe2UuX2NvbW1hbmRPYnNlcnZlciYmKGUuX2NvbW1hbmRPYnNlcnZlci5yZW1vdmUoKSxkZWxldGUgZS5fY29tbWFuZE9ic2VydmVyKSxpLmF1dG9NYXJnaW4odCxnKGUpKX1pZihhLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKHUuY29udGFpbmVyQ2xhc3NOYW1lLCEwKS5zdHlsZShcImN1cnNvclwiLFwiZXctcmVzaXplXCIpLGEuZXhpdCgpLmVhY2goZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoXCJnLlwiK3UuZ3JvdXBDbGFzc05hbWUpLmVhY2gocyl9KS5yZW1vdmUoKSwwIT09ci5sZW5ndGgpe3ZhciBsPWEuc2VsZWN0QWxsKFwiZy5cIit1Lmdyb3VwQ2xhc3NOYW1lKS5kYXRhKHIsdik7bC5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZCh1Lmdyb3VwQ2xhc3NOYW1lLCEwKSxsLmV4aXQoKS5lYWNoKHMpLnJlbW92ZSgpO2Zvcih2YXIgYz0wO2M8ci5sZW5ndGg7YysrKXt2YXIgaD1yW2NdO20odCxoKX1sLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyk7IWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2RpbXM7ZS5sYWJlbFN0ZXBzPVtdO2Zvcih2YXIgcj10Ll9zdGVwQ291bnQsbj0wO248cjtuKz1lLmxhYmVsU3RyaWRlKWUubGFiZWxTdGVwcy5wdXNoKHtmcmFjdGlvbjpuLyhyLTEpLHN0ZXA6dC5fdmlzaWJsZVN0ZXBzW25dfSl9KGUpLGkubWFuYWdlQ29tbWFuZE9ic2VydmVyKHQsZSxlLl92aXNpYmxlU3RlcHMsZnVuY3Rpb24oZSl7dmFyIG49ci5kYXRhKClbMF07bi5hY3RpdmUhPT1lLmluZGV4JiYobi5fZHJhZ2dpbmd8fGsodCxyLG4sZS5pbmRleCwhMSwhMCkpfSksZnVuY3Rpb24odCxlLHIpeyhyLnN0ZXBzW3IuYWN0aXZlXXx8e30pLnZpc2libGV8fChyLmFjdGl2ZT1yLl92aXNpYmxlU3RlcHNbMF0uX2luZGV4KTtlLmNhbGwoeSxyKS5jYWxsKEwscikuY2FsbChfLHIpLmNhbGwoVCxyKS5jYWxsKEMsdCxyKS5jYWxsKHgsdCxyKTt2YXIgbj1yLl9kaW1zO28uc2V0VHJhbnNsYXRlKGUsbi5seCtyLnBhZC5sLG4ubHkrci5wYWQudCksZS5jYWxsKE0sciwhMSksZS5jYWxsKHkscil9KHQsbi5zZWxlY3QodGhpcyksZSl9KX19fSx7XCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCI6NjczLFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCI6NzI1LFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3Bsb3RzL3Bsb3RzXCI6ODEwLFwiLi4vY29sb3JcIjo1NzgsXCIuLi9kcmF3aW5nXCI6NTk5LFwiLi9jb25zdGFudHNcIjo2NjIsZDM6MTU1fV0sNjY1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vY29uc3RhbnRzXCIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZTpcImNvbXBvbmVudFwiLG5hbWU6bi5uYW1lLGxheW91dEF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxkcmF3OnQoXCIuL2RyYXdcIil9fSx7XCIuL2F0dHJpYnV0ZXNcIjo2NjEsXCIuL2NvbnN0YW50c1wiOjY2MixcIi4vZGVmYXVsdHNcIjo2NjMsXCIuL2RyYXdcIjo2NjR9XSw2NjY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiZmFzdC1pc251bWVyaWNcIiksYT10KFwiLi4vLi4vcGxvdHMvcGxvdHNcIiksbz10KFwiLi4vLi4vcmVnaXN0cnlcIikscz10KFwiLi4vLi4vbGliXCIpLGw9dChcIi4uL2RyYXdpbmdcIiksYz10KFwiLi4vY29sb3JcIiksdT10KFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCIpLGg9dChcIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnNcIik7ZS5leHBvcnRzPXtkcmF3OmZ1bmN0aW9uKHQsZSxyKXt2YXIgcCxkPXIucHJvcENvbnRhaW5lcixnPXIucHJvcE5hbWUsdj1yLnBsYWNlaG9sZGVyLG09ci50cmFjZUluZGV4LHk9ci5hdm9pZHx8e30seD1yLmF0dHJpYnV0ZXMsYj1yLnRyYW5zZm9ybSxfPXIuY29udGFpbmVyR3JvdXAsdz10Ll9mdWxsTGF5b3V0LGs9MSxBPSExLFQ9ZC50aXRsZSxNPShUJiZULnRleHQ/VC50ZXh0OlwiXCIpLnRyaW0oKSxTPVQmJlQuZm9udD9ULmZvbnQ6e30sRT1TLmZhbWlseSxDPVMuc2l6ZSxMPVMuY29sb3I7XCJ0aXRsZS50ZXh0XCI9PT1nP3A9XCJ0aXRsZVRleHRcIjotMSE9PWcuaW5kZXhPZihcImF4aXNcIik/cD1cImF4aXNUaXRsZVRleHRcIjpnLmluZGV4T2YoITApJiYocD1cImNvbG9yYmFyVGl0bGVUZXh0XCIpO3ZhciB6PXQuX2NvbnRleHQuZWRpdHNbcF07XCJcIj09PU0/az0wOk0ucmVwbGFjZShmLFwiICUgXCIpPT09di5yZXBsYWNlKGYsXCIgJSBcIikmJihrPS4yLEE9ITAsenx8KE09XCJcIikpO3cubWV0YSYmKE09cy50ZW1wbGF0ZVN0cmluZyhNLHttZXRhOncubWV0YX0pKTt2YXIgTz1NfHx6O198fChfPXMuZW5zdXJlU2luZ2xlKHcuX2luZm9sYXllcixcImdcIixcImctXCIrZSkpO3ZhciBJPV8uc2VsZWN0QWxsKFwidGV4dFwiKS5kYXRhKE8/WzBdOltdKTtpZihJLmVudGVyKCkuYXBwZW5kKFwidGV4dFwiKSxJLnRleHQoTSkuYXR0cihcImNsYXNzXCIsZSksSS5leGl0KCkucmVtb3ZlKCksIU8pcmV0dXJuIF87ZnVuY3Rpb24gRCh0KXtzLnN5bmNPckFzeW5jKFtQLFJdLHQpfWZ1bmN0aW9uIFAoZSl7dmFyIHI7cmV0dXJuIGI/KHI9XCJcIixiLnJvdGF0ZSYmKHIrPVwicm90YXRlKFwiK1tiLnJvdGF0ZSx4LngseC55XStcIilcIiksYi5vZmZzZXQmJihyKz1cInRyYW5zbGF0ZSgwLCBcIitiLm9mZnNldCtcIilcIikpOnI9bnVsbCxlLmF0dHIoXCJ0cmFuc2Zvcm1cIixyKSxlLnN0eWxlKHtcImZvbnQtZmFtaWx5XCI6RSxcImZvbnQtc2l6ZVwiOm4ucm91bmQoQywyKStcInB4XCIsZmlsbDpjLnJnYihMKSxvcGFjaXR5OmsqYy5vcGFjaXR5KEwpLFwiZm9udC13ZWlnaHRcIjphLmZvbnRXZWlnaHR9KS5hdHRyKHgpLmNhbGwodS5jb252ZXJ0VG9Uc3BhbnMsdCksYS5wcmV2aW91c1Byb21pc2VzKHQpfWZ1bmN0aW9uIFIodCl7dmFyIGU9bi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSk7aWYoeSYmeS5zZWxlY3Rpb24mJnkuc2lkZSYmTSl7ZS5hdHRyKFwidHJhbnNmb3JtXCIsbnVsbCk7dmFyIHI9MCxhPXtsZWZ0OlwicmlnaHRcIixyaWdodDpcImxlZnRcIix0b3A6XCJib3R0b21cIixib3R0b206XCJ0b3BcIn1beS5zaWRlXSxvPS0xIT09W1wibGVmdFwiLFwidG9wXCJdLmluZGV4T2YoeS5zaWRlKT8tMToxLGM9aSh5LnBhZCk/eS5wYWQ6Mix1PWwuYkJveChlLm5vZGUoKSksaD17bGVmdDowLHRvcDowLHJpZ2h0Oncud2lkdGgsYm90dG9tOncuaGVpZ2h0fSxmPXkubWF4U2hpZnR8fChoW3kuc2lkZV0tdVt5LnNpZGVdKSooXCJsZWZ0XCI9PT15LnNpZGV8fFwidG9wXCI9PT15LnNpZGU/LTE6MSk7aWYoZjwwKXI9ZjtlbHNle3ZhciBwPXkub2Zmc2V0TGVmdHx8MCxkPXkub2Zmc2V0VG9wfHwwO3UubGVmdC09cCx1LnJpZ2h0LT1wLHUudG9wLT1kLHUuYm90dG9tLT1kLHkuc2VsZWN0aW9uLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1sLmJCb3godGhpcyk7cy5iQm94SW50ZXJzZWN0KHUsdCxjKSYmKHI9TWF0aC5tYXgocixvKih0W3kuc2lkZV0tdVthXSkrYykpfSkscj1NYXRoLm1pbihmLHIpfWlmKHI+MHx8ZjwwKXt2YXIgZz17bGVmdDpbLXIsMF0scmlnaHQ6W3IsMF0sdG9wOlswLC1yXSxib3R0b206WzAscl19W3kuc2lkZV07ZS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrZytcIilcIil9fX1JLmNhbGwoRCkseiYmKE0/SS5vbihcIi5vcGFjaXR5XCIsbnVsbCk6KGs9MCxBPSEwLEkudGV4dCh2KS5vbihcIm1vdXNlb3Zlci5vcGFjaXR5XCIsZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oaC5TSE9XX1BMQUNFSE9MREVSKS5zdHlsZShcIm9wYWNpdHlcIiwxKX0pLm9uKFwibW91c2VvdXQub3BhY2l0eVwiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKGguSElERV9QTEFDRUhPTERFUikuc3R5bGUoXCJvcGFjaXR5XCIsMCl9KSksSS5jYWxsKHUubWFrZUVkaXRhYmxlLHtnZDp0fSkub24oXCJlZGl0XCIsZnVuY3Rpb24oZSl7dm9pZCAwIT09bT9vLmNhbGwoXCJfZ3VpUmVzdHlsZVwiLHQsZyxlLG0pOm8uY2FsbChcIl9ndWlSZWxheW91dFwiLHQsZyxlKX0pLm9uKFwiY2FuY2VsXCIsZnVuY3Rpb24oKXt0aGlzLnRleHQodGhpcy5hdHRyKFwiZGF0YS11bmZvcm1hdHRlZFwiKSkuY2FsbChEKX0pLm9uKFwiaW5wdXRcIixmdW5jdGlvbih0KXt0aGlzLnRleHQodHx8XCIgXCIpLmNhbGwodS5wb3NpdGlvblRleHQseC54LHgueSl9KSk7cmV0dXJuIEkuY2xhc3NlZChcImpzLXBsYWNlaG9sZGVyXCIsQSksX319O3ZhciBmPS8gW1hZXVswLTldKiAvfSx7XCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zXCI6Njc3LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCI6NzI1LFwiLi4vLi4vcGxvdHMvcGxvdHNcIjo4MTAsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL2NvbG9yXCI6NTc4LFwiLi4vZHJhd2luZ1wiOjU5OSxkMzoxNTUsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDY2NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vY29sb3IvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsbz10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbCxzPXQoXCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlc1wiKSxsPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLnRlbXBsYXRlZEFycmF5LGM9bChcImJ1dHRvblwiLHt2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwifSxtZXRob2Q6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInJlc3R5bGVcIixcInJlbGF5b3V0XCIsXCJhbmltYXRlXCIsXCJ1cGRhdGVcIixcInNraXBcIl0sZGZsdDpcInJlc3R5bGVcIn0sYXJnczp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixmcmVlTGVuZ3RoOiEwLGl0ZW1zOlt7dmFsVHlwZTpcImFueVwifSx7dmFsVHlwZTpcImFueVwifSx7dmFsVHlwZTpcImFueVwifV19LGxhYmVsOnt2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwifSxleGVjdXRlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITB9fSk7ZS5leHBvcnRzPW8obChcInVwZGF0ZW1lbnVcIix7X2FycmF5QXR0clJlZ2V4cHM6Wy9edXBkYXRlbWVudXNcXFsoMHxbMS05XVswLTldKylcXF1cXC5idXR0b25zL10sdmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIn0sdHlwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiZHJvcGRvd25cIixcImJ1dHRvbnNcIl0sZGZsdDpcImRyb3Bkb3duXCJ9LGRpcmVjdGlvbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibGVmdFwiLFwicmlnaHRcIixcInVwXCIsXCJkb3duXCJdLGRmbHQ6XCJkb3duXCJ9LGFjdGl2ZTp7dmFsVHlwZTpcImludGVnZXJcIixtaW46LTEsZGZsdDowfSxzaG93YWN0aXZlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITB9LGJ1dHRvbnM6Yyx4Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOi0yLG1heDozLGRmbHQ6LS4wNX0seGFuY2hvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYXV0b1wiLFwibGVmdFwiLFwiY2VudGVyXCIsXCJyaWdodFwiXSxkZmx0OlwicmlnaHRcIn0seTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjotMixtYXg6MyxkZmx0OjF9LHlhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImF1dG9cIixcInRvcFwiLFwibWlkZGxlXCIsXCJib3R0b21cIl0sZGZsdDpcInRvcFwifSxwYWQ6YShzKHtlZGl0VHlwZTpcImFycmF5ZHJhd1wifSkse30pLGZvbnQ6bih7fSksYmdjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmkuYm9yZGVyTGluZX0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn19KSxcImFycmF5ZHJhd1wiLFwiZnJvbS1yb290XCIpfSx7XCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIjo3NzUsXCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlc1wiOjgwOSxcIi4uL2NvbG9yL2F0dHJpYnV0ZXNcIjo1Nzd9XSw2Njg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e25hbWU6XCJ1cGRhdGVtZW51c1wiLGNvbnRhaW5lckNsYXNzTmFtZTpcInVwZGF0ZW1lbnUtY29udGFpbmVyXCIsaGVhZGVyR3JvdXBDbGFzc05hbWU6XCJ1cGRhdGVtZW51LWhlYWRlci1ncm91cFwiLGhlYWRlckNsYXNzTmFtZTpcInVwZGF0ZW1lbnUtaGVhZGVyXCIsaGVhZGVyQXJyb3dDbGFzc05hbWU6XCJ1cGRhdGVtZW51LWhlYWRlci1hcnJvd1wiLGRyb3Bkb3duQnV0dG9uR3JvdXBDbGFzc05hbWU6XCJ1cGRhdGVtZW51LWRyb3Bkb3duLWJ1dHRvbi1ncm91cFwiLGRyb3Bkb3duQnV0dG9uQ2xhc3NOYW1lOlwidXBkYXRlbWVudS1kcm9wZG93bi1idXR0b25cIixidXR0b25DbGFzc05hbWU6XCJ1cGRhdGVtZW51LWJ1dHRvblwiLGl0ZW1SZWN0Q2xhc3NOYW1lOlwidXBkYXRlbWVudS1pdGVtLXJlY3RcIixpdGVtVGV4dENsYXNzTmFtZTpcInVwZGF0ZW1lbnUtaXRlbS10ZXh0XCIsbWVudUluZGV4QXR0ck5hbWU6XCJ1cGRhdGVtZW51LWFjdGl2ZS1pbmRleFwiLGF1dG9NYXJnaW5JZFJvb3Q6XCJ1cGRhdGVtZW51LVwiLGJsYW5rSGVhZGVyT3B0czp7bGFiZWw6XCIgIFwifSxtaW5XaWR0aDozMCxtaW5IZWlnaHQ6MzAsdGV4dFBhZFg6MjQsYXJyb3dQYWRYOjE2LHJ4OjIscnk6Mix0ZXh0T2Zmc2V0WDoxMix0ZXh0T2Zmc2V0WTozLGFycm93T2Zmc2V0WDo0LGdhcEJ1dHRvbkhlYWRlcjo1LGdhcEJ1dHRvbjoyLGFjdGl2ZUNvbG9yOlwiI0Y0RkFGRlwiLGhvdmVyQ29sb3I6XCIjRjRGQUZGXCIsYXJyb3dTeW1ib2w6e2xlZnQ6XCJcXHUyNWM0XCIscmlnaHQ6XCJcXHUyNWJhXCIsdXA6XCJcXHUyNWIyXCIsZG93bjpcIlxcdTI1YmNcIn19fSx7fV0sNjY5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIiksYT10KFwiLi9hdHRyaWJ1dGVzXCIpLG89dChcIi4vY29uc3RhbnRzXCIpLm5hbWUscz1hLmJ1dHRvbnM7ZnVuY3Rpb24gbCh0LGUscil7ZnVuY3Rpb24gbyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfW8oXCJ2aXNpYmxlXCIsaSh0LGUse25hbWU6XCJidXR0b25zXCIsaGFuZGxlSXRlbURlZmF1bHRzOmN9KS5sZW5ndGg+MCkmJihvKFwiYWN0aXZlXCIpLG8oXCJkaXJlY3Rpb25cIiksbyhcInR5cGVcIiksbyhcInNob3dhY3RpdmVcIiksbyhcInhcIiksbyhcInlcIiksbi5ub25lT3JBbGwodCxlLFtcInhcIixcInlcIl0pLG8oXCJ4YW5jaG9yXCIpLG8oXCJ5YW5jaG9yXCIpLG8oXCJwYWQudFwiKSxvKFwicGFkLnJcIiksbyhcInBhZC5iXCIpLG8oXCJwYWQubFwiKSxuLmNvZXJjZUZvbnQobyxcImZvbnRcIixyLmZvbnQpLG8oXCJiZ2NvbG9yXCIsci5wYXBlcl9iZ2NvbG9yKSxvKFwiYm9yZGVyY29sb3JcIiksbyhcImJvcmRlcndpZHRoXCIpKX1mdW5jdGlvbiBjKHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfXIoXCJ2aXNpYmxlXCIsXCJza2lwXCI9PT10Lm1ldGhvZHx8QXJyYXkuaXNBcnJheSh0LmFyZ3MpKSYmKHIoXCJtZXRob2RcIikscihcImFyZ3NcIikscihcImxhYmVsXCIpLHIoXCJleGVjdXRlXCIpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpKHQsZSx7bmFtZTpvLGhhbmRsZUl0ZW1EZWZhdWx0czpsfSl9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIjo3NDUsXCIuL2F0dHJpYnV0ZXNcIjo2NjcsXCIuL2NvbnN0YW50c1wiOjY2OH1dLDY3MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9wbG90cy9wbG90c1wiKSxhPXQoXCIuLi9jb2xvclwiKSxvPXQoXCIuLi9kcmF3aW5nXCIpLHM9dChcIi4uLy4uL2xpYlwiKSxsPXQoXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIiksYz10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKS5hcnJheUVkaXRvcix1PXQoXCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCIpLkxJTkVfU1BBQ0lORyxoPXQoXCIuL2NvbnN0YW50c1wiKSxmPXQoXCIuL3Njcm9sbGJveFwiKTtmdW5jdGlvbiBwKHQpe3JldHVybiB0Ll9pbmRleH1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuK3QuYXR0cihoLm1lbnVJbmRleEF0dHJOYW1lKT09PWUuX2luZGV4fWZ1bmN0aW9uIGcodCxlLHIsbixpLGEsbyxzKXtlLmFjdGl2ZT1vLGModC5sYXlvdXQsaC5uYW1lLGUpLmFwcGx5VXBkYXRlKFwiYWN0aXZlXCIsbyksXCJidXR0b25zXCI9PT1lLnR5cGU/bSh0LG4sbnVsbCxudWxsLGUpOlwiZHJvcGRvd25cIj09PWUudHlwZSYmKGkuYXR0cihoLm1lbnVJbmRleEF0dHJOYW1lLFwiLTFcIiksdih0LG4saSxhLGUpLHN8fG0odCxuLGksYSxlKSl9ZnVuY3Rpb24gdih0LGUscixuLGkpe3ZhciBhPXMuZW5zdXJlU2luZ2xlKGUsXCJnXCIsaC5oZWFkZXJDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5zdHlsZShcInBvaW50ZXItZXZlbnRzXCIsXCJhbGxcIil9KSxsPWkuX2RpbXMsYz1pLmFjdGl2ZSx1PWkuYnV0dG9uc1tjXXx8aC5ibGFua0hlYWRlck9wdHMsZj17eTppLnBhZC50LHlQYWQ6MCx4OmkucGFkLmwseFBhZDowLGluZGV4OjB9LHA9e3dpZHRoOmwuaGVhZGVyV2lkdGgsaGVpZ2h0OmwuaGVhZGVySGVpZ2h0fTthLmNhbGwoeSxpLHUsdCkuY2FsbChNLGksZixwKSxzLmVuc3VyZVNpbmdsZShlLFwidGV4dFwiLGguaGVhZGVyQXJyb3dDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5jbGFzc2VkKFwidXNlci1zZWxlY3Qtbm9uZVwiLCEwKS5hdHRyKFwidGV4dC1hbmNob3JcIixcImVuZFwiKS5jYWxsKG8uZm9udCxpLmZvbnQpLnRleHQoaC5hcnJvd1N5bWJvbFtpLmRpcmVjdGlvbl0pfSkuYXR0cih7eDpsLmhlYWRlcldpZHRoLWguYXJyb3dPZmZzZXRYK2kucGFkLmwseTpsLmhlYWRlckhlaWdodC8yK2gudGV4dE9mZnNldFkraS5wYWQudH0pLGEub24oXCJjbGlja1wiLGZ1bmN0aW9uKCl7ci5jYWxsKFMsU3RyaW5nKGQocixpKT8tMTppLl9pbmRleCkpLG0odCxlLHIsbixpKX0pLGEub24oXCJtb3VzZW92ZXJcIixmdW5jdGlvbigpe2EuY2FsbCh3KX0pLGEub24oXCJtb3VzZW91dFwiLGZ1bmN0aW9uKCl7YS5jYWxsKGssaSl9KSxvLnNldFRyYW5zbGF0ZShlLGwubHgsbC5seSl9ZnVuY3Rpb24gbSh0LGUscixhLG8pe3J8fChyPWUpLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpO3ZhciBsPWZ1bmN0aW9uKHQpe3JldHVybi0xPT0rdC5hdHRyKGgubWVudUluZGV4QXR0ck5hbWUpfShyKSYmXCJidXR0b25zXCIhPT1vLnR5cGU/W106by5idXR0b25zLGM9XCJkcm9wZG93blwiPT09by50eXBlP2guZHJvcGRvd25CdXR0b25DbGFzc05hbWU6aC5idXR0b25DbGFzc05hbWUsdT1yLnNlbGVjdEFsbChcImcuXCIrYykuZGF0YShzLmZpbHRlclZpc2libGUobCkpLGY9dS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChjLCEwKSxwPXUuZXhpdCgpO1wiZHJvcGRvd25cIj09PW8udHlwZT8oZi5hdHRyKFwib3BhY2l0eVwiLFwiMFwiKS50cmFuc2l0aW9uKCkuYXR0cihcIm9wYWNpdHlcIixcIjFcIikscC50cmFuc2l0aW9uKCkuYXR0cihcIm9wYWNpdHlcIixcIjBcIikucmVtb3ZlKCkpOnAucmVtb3ZlKCk7dmFyIGQ9MCx2PTAsbT1vLl9kaW1zLHg9LTEhPT1bXCJ1cFwiLFwiZG93blwiXS5pbmRleE9mKG8uZGlyZWN0aW9uKTtcImRyb3Bkb3duXCI9PT1vLnR5cGUmJih4P3Y9bS5oZWFkZXJIZWlnaHQraC5nYXBCdXR0b25IZWFkZXI6ZD1tLmhlYWRlcldpZHRoK2guZ2FwQnV0dG9uSGVhZGVyKSxcImRyb3Bkb3duXCI9PT1vLnR5cGUmJlwidXBcIj09PW8uZGlyZWN0aW9uJiYodj0taC5nYXBCdXR0b25IZWFkZXIraC5nYXBCdXR0b24tbS5vcGVuSGVpZ2h0KSxcImRyb3Bkb3duXCI9PT1vLnR5cGUmJlwibGVmdFwiPT09by5kaXJlY3Rpb24mJihkPS1oLmdhcEJ1dHRvbkhlYWRlcitoLmdhcEJ1dHRvbi1tLm9wZW5XaWR0aCk7dmFyIGI9e3g6bS5seCtkK28ucGFkLmwseTptLmx5K3Yrby5wYWQudCx5UGFkOmguZ2FwQnV0dG9uLHhQYWQ6aC5nYXBCdXR0b24saW5kZXg6MH0sQT17bDpiLngrby5ib3JkZXJ3aWR0aCx0OmIueStvLmJvcmRlcndpZHRofTt1LmVhY2goZnVuY3Rpb24ocyxsKXt2YXIgYz1uLnNlbGVjdCh0aGlzKTtjLmNhbGwoeSxvLHMsdCkuY2FsbChNLG8sYiksYy5vbihcImNsaWNrXCIsZnVuY3Rpb24oKXtuLmV2ZW50LmRlZmF1bHRQcmV2ZW50ZWR8fChnKHQsbywwLGUscixhLGwpLHMuZXhlY3V0ZSYmaS5leGVjdXRlQVBJQ29tbWFuZCh0LHMubWV0aG9kLHMuYXJncyksdC5lbWl0KFwicGxvdGx5X2J1dHRvbmNsaWNrZWRcIix7bWVudTpvLGJ1dHRvbjpzLGFjdGl2ZTpvLmFjdGl2ZX0pKX0pLGMub24oXCJtb3VzZW92ZXJcIixmdW5jdGlvbigpe2MuY2FsbCh3KX0pLGMub24oXCJtb3VzZW91dFwiLGZ1bmN0aW9uKCl7Yy5jYWxsKGssbyksdS5jYWxsKF8sbyl9KX0pLHUuY2FsbChfLG8pLHg/KEEudz1NYXRoLm1heChtLm9wZW5XaWR0aCxtLmhlYWRlcldpZHRoKSxBLmg9Yi55LUEudCk6KEEudz1iLngtQS5sLEEuaD1NYXRoLm1heChtLm9wZW5IZWlnaHQsbS5oZWFkZXJIZWlnaHQpKSxBLmRpcmVjdGlvbj1vLmRpcmVjdGlvbixhJiYodS5zaXplKCk/ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvLHMsbCxjPWkuZGlyZWN0aW9uLHU9XCJ1cFwiPT09Y3x8XCJkb3duXCI9PT1jLGY9aS5fZGltcyxwPWkuYWN0aXZlO2lmKHUpZm9yKHM9MCxsPTA7bDxwO2wrKylzKz1mLmhlaWdodHNbbF0raC5nYXBCdXR0b247ZWxzZSBmb3Iobz0wLGw9MDtsPHA7bCsrKW8rPWYud2lkdGhzW2xdK2guZ2FwQnV0dG9uO24uZW5hYmxlKGEsbyxzKSxuLmhiYXImJm4uaGJhci5hdHRyKFwib3BhY2l0eVwiLFwiMFwiKS50cmFuc2l0aW9uKCkuYXR0cihcIm9wYWNpdHlcIixcIjFcIik7bi52YmFyJiZuLnZiYXIuYXR0cihcIm9wYWNpdHlcIixcIjBcIikudHJhbnNpdGlvbigpLmF0dHIoXCJvcGFjaXR5XCIsXCIxXCIpfSgwLDAsMCxhLG8sQSk6ZnVuY3Rpb24odCl7dmFyIGU9ISF0LmhiYXIscj0hIXQudmJhcjtlJiZ0LmhiYXIudHJhbnNpdGlvbigpLmF0dHIoXCJvcGFjaXR5XCIsXCIwXCIpLmVhY2goXCJlbmRcIixmdW5jdGlvbigpe2U9ITEscnx8dC5kaXNhYmxlKCl9KTtyJiZ0LnZiYXIudHJhbnNpdGlvbigpLmF0dHIoXCJvcGFjaXR5XCIsXCIwXCIpLmVhY2goXCJlbmRcIixmdW5jdGlvbigpe3I9ITEsZXx8dC5kaXNhYmxlKCl9KX0oYSkpfWZ1bmN0aW9uIHkodCxlLHIsbil7dC5jYWxsKHgsZSkuY2FsbChiLGUscixuKX1mdW5jdGlvbiB4KHQsZSl7cy5lbnN1cmVTaW5nbGUodCxcInJlY3RcIixoLml0ZW1SZWN0Q2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuYXR0cih7cng6aC5yeCxyeTpoLnJ5LFwic2hhcGUtcmVuZGVyaW5nXCI6XCJjcmlzcEVkZ2VzXCJ9KX0pLmNhbGwoYS5zdHJva2UsZS5ib3JkZXJjb2xvcikuY2FsbChhLmZpbGwsZS5iZ2NvbG9yKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLGUuYm9yZGVyd2lkdGgrXCJweFwiKX1mdW5jdGlvbiBiKHQsZSxyLG4pe3ZhciBpPXMuZW5zdXJlU2luZ2xlKHQsXCJ0ZXh0XCIsaC5pdGVtVGV4dENsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmNsYXNzZWQoXCJ1c2VyLXNlbGVjdC1ub25lXCIsITApLmF0dHIoe1widGV4dC1hbmNob3JcIjpcInN0YXJ0XCIsXCJkYXRhLW5vdGV4XCI6MX0pfSksYT1yLmxhYmVsLGM9bi5fZnVsbExheW91dC5tZXRhO2MmJihhPXMudGVtcGxhdGVTdHJpbmcoYSx7bWV0YTpjfSkpLGkuY2FsbChvLmZvbnQsZS5mb250KS50ZXh0KGEpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsbil9ZnVuY3Rpb24gXyh0LGUpe3ZhciByPWUuYWN0aXZlO3QuZWFjaChmdW5jdGlvbih0LGkpe3ZhciBvPW4uc2VsZWN0KHRoaXMpO2k9PT1yJiZlLnNob3dhY3RpdmUmJm8uc2VsZWN0KFwicmVjdC5cIitoLml0ZW1SZWN0Q2xhc3NOYW1lKS5jYWxsKGEuZmlsbCxoLmFjdGl2ZUNvbG9yKX0pfWZ1bmN0aW9uIHcodCl7dC5zZWxlY3QoXCJyZWN0LlwiK2guaXRlbVJlY3RDbGFzc05hbWUpLmNhbGwoYS5maWxsLGguaG92ZXJDb2xvcil9ZnVuY3Rpb24gayh0LGUpe3Quc2VsZWN0KFwicmVjdC5cIitoLml0ZW1SZWN0Q2xhc3NOYW1lKS5jYWxsKGEuZmlsbCxlLmJnY29sb3IpfWZ1bmN0aW9uIEEodCxlKXt2YXIgcj1lLl9kaW1zPXt3aWR0aDE6MCxoZWlnaHQxOjAsaGVpZ2h0czpbXSx3aWR0aHM6W10sdG90YWxXaWR0aDowLHRvdGFsSGVpZ2h0OjAsb3BlbldpZHRoOjAsb3BlbkhlaWdodDowLGx4OjAsbHk6MH0sYT1vLnRlc3Rlci5zZWxlY3RBbGwoXCJnLlwiK2guZHJvcGRvd25CdXR0b25DbGFzc05hbWUpLmRhdGEocy5maWx0ZXJWaXNpYmxlKGUuYnV0dG9ucykpO2EuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoaC5kcm9wZG93bkJ1dHRvbkNsYXNzTmFtZSwhMCk7dmFyIGM9LTEhPT1bXCJ1cFwiLFwiZG93blwiXS5pbmRleE9mKGUuZGlyZWN0aW9uKTthLmVhY2goZnVuY3Rpb24oaSxhKXt2YXIgcz1uLnNlbGVjdCh0aGlzKTtzLmNhbGwoeSxlLGksdCk7dmFyIGY9cy5zZWxlY3QoXCIuXCIraC5pdGVtVGV4dENsYXNzTmFtZSkscD1mLm5vZGUoKSYmby5iQm94KGYubm9kZSgpKS53aWR0aCxkPU1hdGgubWF4KHAraC50ZXh0UGFkWCxoLm1pbldpZHRoKSxnPWUuZm9udC5zaXplKnUsdj1sLmxpbmVDb3VudChmKSxtPU1hdGgubWF4KGcqdixoLm1pbkhlaWdodCkraC50ZXh0T2Zmc2V0WTttPU1hdGguY2VpbChtKSxkPU1hdGguY2VpbChkKSxyLndpZHRoc1thXT1kLHIuaGVpZ2h0c1thXT1tLHIuaGVpZ2h0MT1NYXRoLm1heChyLmhlaWdodDEsbSksci53aWR0aDE9TWF0aC5tYXgoci53aWR0aDEsZCksYz8oci50b3RhbFdpZHRoPU1hdGgubWF4KHIudG90YWxXaWR0aCxkKSxyLm9wZW5XaWR0aD1yLnRvdGFsV2lkdGgsci50b3RhbEhlaWdodCs9bStoLmdhcEJ1dHRvbixyLm9wZW5IZWlnaHQrPW0raC5nYXBCdXR0b24pOihyLnRvdGFsV2lkdGgrPWQraC5nYXBCdXR0b24sci5vcGVuV2lkdGgrPWQraC5nYXBCdXR0b24sci50b3RhbEhlaWdodD1NYXRoLm1heChyLnRvdGFsSGVpZ2h0LG0pLHIub3BlbkhlaWdodD1yLnRvdGFsSGVpZ2h0KX0pLGM/ci50b3RhbEhlaWdodC09aC5nYXBCdXR0b246ci50b3RhbFdpZHRoLT1oLmdhcEJ1dHRvbixyLmhlYWRlcldpZHRoPXIud2lkdGgxK2guYXJyb3dQYWRYLHIuaGVhZGVySGVpZ2h0PXIuaGVpZ2h0MSxcImRyb3Bkb3duXCI9PT1lLnR5cGUmJihjPyhyLndpZHRoMSs9aC5hcnJvd1BhZFgsci50b3RhbEhlaWdodD1yLmhlaWdodDEpOnIudG90YWxXaWR0aD1yLndpZHRoMSxyLnRvdGFsV2lkdGgrPWguYXJyb3dQYWRYKSxhLnJlbW92ZSgpO3ZhciBmPXIudG90YWxXaWR0aCtlLnBhZC5sK2UucGFkLnIscD1yLnRvdGFsSGVpZ2h0K2UucGFkLnQrZS5wYWQuYixkPXQuX2Z1bGxMYXlvdXQuX3NpemU7ci5seD1kLmwrZC53KmUueCxyLmx5PWQudCtkLmgqKDEtZS55KTt2YXIgZz1cImxlZnRcIjtzLmlzUmlnaHRBbmNob3IoZSkmJihyLmx4LT1mLGc9XCJyaWdodFwiKSxzLmlzQ2VudGVyQW5jaG9yKGUpJiYoci5seC09Zi8yLGc9XCJjZW50ZXJcIik7dmFyIHY9XCJ0b3BcIjtzLmlzQm90dG9tQW5jaG9yKGUpJiYoci5seS09cCx2PVwiYm90dG9tXCIpLHMuaXNNaWRkbGVBbmNob3IoZSkmJihyLmx5LT1wLzIsdj1cIm1pZGRsZVwiKSxyLnRvdGFsV2lkdGg9TWF0aC5jZWlsKHIudG90YWxXaWR0aCksci50b3RhbEhlaWdodD1NYXRoLmNlaWwoci50b3RhbEhlaWdodCksci5seD1NYXRoLnJvdW5kKHIubHgpLHIubHk9TWF0aC5yb3VuZChyLmx5KSxpLmF1dG9NYXJnaW4odCxUKGUpLHt4OmUueCx5OmUueSxsOmYqKHtyaWdodDoxLGNlbnRlcjouNX1bZ118fDApLHI6Ziooe2xlZnQ6MSxjZW50ZXI6LjV9W2ddfHwwKSxiOnAqKHt0b3A6MSxtaWRkbGU6LjV9W3ZdfHwwKSx0OnAqKHtib3R0b206MSxtaWRkbGU6LjV9W3ZdfHwwKX0pfWZ1bmN0aW9uIFQodCl7cmV0dXJuIGguYXV0b01hcmdpbklkUm9vdCt0Ll9pbmRleH1mdW5jdGlvbiBNKHQsZSxyLG4pe249bnx8e307dmFyIGk9dC5zZWxlY3QoXCIuXCIraC5pdGVtUmVjdENsYXNzTmFtZSksYT10LnNlbGVjdChcIi5cIitoLml0ZW1UZXh0Q2xhc3NOYW1lKSxzPWUuYm9yZGVyd2lkdGgsYz1yLmluZGV4LGY9ZS5fZGltcztvLnNldFRyYW5zbGF0ZSh0LHMrci54LHMrci55KTt2YXIgcD0tMSE9PVtcInVwXCIsXCJkb3duXCJdLmluZGV4T2YoZS5kaXJlY3Rpb24pLGQ9bi5oZWlnaHR8fChwP2YuaGVpZ2h0c1tjXTpmLmhlaWdodDEpO2kuYXR0cih7eDowLHk6MCx3aWR0aDpuLndpZHRofHwocD9mLndpZHRoMTpmLndpZHRoc1tjXSksaGVpZ2h0OmR9KTt2YXIgZz1lLmZvbnQuc2l6ZSp1LHY9KGwubGluZUNvdW50KGEpLTEpKmcvMjtsLnBvc2l0aW9uVGV4dChhLGgudGV4dE9mZnNldFgsZC8yLXYraC50ZXh0T2Zmc2V0WSkscD9yLnkrPWYuaGVpZ2h0c1tjXStyLnlQYWQ6ci54Kz1mLndpZHRoc1tjXStyLnhQYWQsci5pbmRleCsrfWZ1bmN0aW9uIFModCxlKXt0LmF0dHIoaC5tZW51SW5kZXhBdHRyTmFtZSxlfHxcIi0xXCIpLnNlbGVjdEFsbChcImcuXCIraC5kcm9wZG93bkJ1dHRvbkNsYXNzTmFtZSkucmVtb3ZlKCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1zLmZpbHRlclZpc2libGUoZVtoLm5hbWVdKTtmdW5jdGlvbiBhKGUpe2kuYXV0b01hcmdpbih0LFQoZSkpfXZhciBvPWUuX21lbnVsYXllci5zZWxlY3RBbGwoXCJnLlwiK2guY29udGFpbmVyQ2xhc3NOYW1lKS5kYXRhKHIubGVuZ3RoPjA/WzBdOltdKTtpZihvLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKGguY29udGFpbmVyQ2xhc3NOYW1lLCEwKS5zdHlsZShcImN1cnNvclwiLFwicG9pbnRlclwiKSxvLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKFwiZy5cIitoLmhlYWRlckdyb3VwQ2xhc3NOYW1lKS5lYWNoKGEpfSkucmVtb3ZlKCksMCE9PXIubGVuZ3RoKXt2YXIgbD1vLnNlbGVjdEFsbChcImcuXCIraC5oZWFkZXJHcm91cENsYXNzTmFtZSkuZGF0YShyLHApO2wuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoaC5oZWFkZXJHcm91cENsYXNzTmFtZSwhMCk7Zm9yKHZhciBjPXMuZW5zdXJlU2luZ2xlKG8sXCJnXCIsaC5kcm9wZG93bkJ1dHRvbkdyb3VwQ2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3Quc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpfSksdT0wO3U8ci5sZW5ndGg7dSsrKXt2YXIgeT1yW3VdO0EodCx5KX12YXIgeD1cInVwZGF0ZW1lbnVzXCIrZS5fdWlkLGI9bmV3IGYodCxjLHgpO2wuZW50ZXIoKS5zaXplKCkmJihjLm5vZGUoKS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGMubm9kZSgpKSxjLmNhbGwoUykpLGwuZXhpdCgpLmVhY2goZnVuY3Rpb24odCl7Yy5jYWxsKFMpLGEodCl9KS5yZW1vdmUoKSxsLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksYT1cImRyb3Bkb3duXCI9PT1lLnR5cGU/YzpudWxsO2kubWFuYWdlQ29tbWFuZE9ic2VydmVyKHQsZSxlLmJ1dHRvbnMsZnVuY3Rpb24obil7Zyh0LGUsZS5idXR0b25zW24uaW5kZXhdLHIsYSxiLG4uaW5kZXgsITApfSksXCJkcm9wZG93blwiPT09ZS50eXBlPyh2KHQscixjLGIsZSksZChjLGUpJiZtKHQscixjLGIsZSkpOm0odCxyLG51bGwsbnVsbCxlKX0pfX19LHtcIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIjo2NzMsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIjo3MjUsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vcGxvdHMvcGxvdHNcIjo4MTAsXCIuLi9jb2xvclwiOjU3OCxcIi4uL2RyYXdpbmdcIjo1OTksXCIuL2NvbnN0YW50c1wiOjY2OCxcIi4vc2Nyb2xsYm94XCI6NjcyLGQzOjE1NX1dLDY3MTpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVs2NjVdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se1wiLi9hdHRyaWJ1dGVzXCI6NjY3LFwiLi9jb25zdGFudHNcIjo2NjgsXCIuL2RlZmF1bHRzXCI6NjY5LFwiLi9kcmF3XCI6NjcwLGR1cDo2NjV9XSw2NzI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9czt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vY29sb3JcIiksYT10KFwiLi4vZHJhd2luZ1wiKSxvPXQoXCIuLi8uLi9saWJcIik7ZnVuY3Rpb24gcyh0LGUscil7dGhpcy5nZD10LHRoaXMuY29udGFpbmVyPWUsdGhpcy5pZD1yLHRoaXMucG9zaXRpb249bnVsbCx0aGlzLnRyYW5zbGF0ZVg9bnVsbCx0aGlzLnRyYW5zbGF0ZVk9bnVsbCx0aGlzLmhiYXI9bnVsbCx0aGlzLnZiYXI9bnVsbCx0aGlzLmJnPXRoaXMuY29udGFpbmVyLnNlbGVjdEFsbChcInJlY3Quc2Nyb2xsYm94LWJnXCIpLmRhdGEoWzBdKSx0aGlzLmJnLmV4aXQoKS5vbihcIi5kcmFnXCIsbnVsbCkub24oXCJ3aGVlbFwiLG51bGwpLnJlbW92ZSgpLHRoaXMuYmcuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpLmNsYXNzZWQoXCJzY3JvbGxib3gtYmdcIiwhMCkuc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpLmF0dHIoe29wYWNpdHk6MCx4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9KX1zLmJhcldpZHRoPTIscy5iYXJMZW5ndGg9MjAscy5iYXJSYWRpdXM9MixzLmJhclBhZD0xLHMuYmFyQ29sb3I9XCIjODA4QkE0XCIscy5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbz10aGlzLmdkLl9mdWxsTGF5b3V0LGw9by53aWR0aCxjPW8uaGVpZ2h0O3RoaXMucG9zaXRpb249dDt2YXIgdSxoLGYscCxkPXRoaXMucG9zaXRpb24ubCxnPXRoaXMucG9zaXRpb24udyx2PXRoaXMucG9zaXRpb24udCxtPXRoaXMucG9zaXRpb24uaCx5PXRoaXMucG9zaXRpb24uZGlyZWN0aW9uLHg9XCJkb3duXCI9PT15LGI9XCJsZWZ0XCI9PT15LF89XCJ1cFwiPT09eSx3PWcsaz1tO3h8fGJ8fFwicmlnaHRcIj09PXl8fF98fCh0aGlzLnBvc2l0aW9uLmRpcmVjdGlvbj1cImRvd25cIix4PSEwKSx4fHxfPyhoPSh1PWQpK3cseD8oZj12LGs9KHA9TWF0aC5taW4oZitrLGMpKS1mKTprPShwPXYrayktKGY9TWF0aC5tYXgocC1rLDApKSk6KHA9KGY9dikrayxiP3c9KGg9ZCt3KS0odT1NYXRoLm1heChoLXcsMCkpOih1PWQsdz0oaD1NYXRoLm1pbih1K3csbCkpLXUpKSx0aGlzLl9ib3g9e2w6dSx0OmYsdzp3LGg6a307dmFyIEE9Zz53LFQ9cy5iYXJMZW5ndGgrMipzLmJhclBhZCxNPXMuYmFyV2lkdGgrMipzLmJhclBhZCxTPWQsRT12K207RStNPmMmJihFPWMtTSk7dmFyIEM9dGhpcy5jb250YWluZXIuc2VsZWN0QWxsKFwicmVjdC5zY3JvbGxiYXItaG9yaXpvbnRhbFwiKS5kYXRhKEE/WzBdOltdKTtDLmV4aXQoKS5vbihcIi5kcmFnXCIsbnVsbCkucmVtb3ZlKCksQy5lbnRlcigpLmFwcGVuZChcInJlY3RcIikuY2xhc3NlZChcInNjcm9sbGJhci1ob3Jpem9udGFsXCIsITApLmNhbGwoaS5maWxsLHMuYmFyQ29sb3IpLEE/KHRoaXMuaGJhcj1DLmF0dHIoe3J4OnMuYmFyUmFkaXVzLHJ5OnMuYmFyUmFkaXVzLHg6Uyx5OkUsd2lkdGg6VCxoZWlnaHQ6TX0pLHRoaXMuX2hiYXJYTWluPVMrVC8yLHRoaXMuX2hiYXJUcmFuc2xhdGVNYXg9dy1UKTooZGVsZXRlIHRoaXMuaGJhcixkZWxldGUgdGhpcy5faGJhclhNaW4sZGVsZXRlIHRoaXMuX2hiYXJUcmFuc2xhdGVNYXgpO3ZhciBMPW0+ayx6PXMuYmFyV2lkdGgrMipzLmJhclBhZCxPPXMuYmFyTGVuZ3RoKzIqcy5iYXJQYWQsST1kK2csRD12O0krej5sJiYoST1sLXopO3ZhciBQPXRoaXMuY29udGFpbmVyLnNlbGVjdEFsbChcInJlY3Quc2Nyb2xsYmFyLXZlcnRpY2FsXCIpLmRhdGEoTD9bMF06W10pO1AuZXhpdCgpLm9uKFwiLmRyYWdcIixudWxsKS5yZW1vdmUoKSxQLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKS5jbGFzc2VkKFwic2Nyb2xsYmFyLXZlcnRpY2FsXCIsITApLmNhbGwoaS5maWxsLHMuYmFyQ29sb3IpLEw/KHRoaXMudmJhcj1QLmF0dHIoe3J4OnMuYmFyUmFkaXVzLHJ5OnMuYmFyUmFkaXVzLHg6SSx5OkQsd2lkdGg6eixoZWlnaHQ6T30pLHRoaXMuX3ZiYXJZTWluPUQrTy8yLHRoaXMuX3ZiYXJUcmFuc2xhdGVNYXg9ay1PKTooZGVsZXRlIHRoaXMudmJhcixkZWxldGUgdGhpcy5fdmJhcllNaW4sZGVsZXRlIHRoaXMuX3ZiYXJUcmFuc2xhdGVNYXgpO3ZhciBSPXRoaXMuaWQsRj11LS41LEI9TD9oK3orLjU6aCsuNSxOPWYtLjUsaj1BP3ArTSsuNTpwKy41LFY9by5fdG9wZGVmcy5zZWxlY3RBbGwoXCIjXCIrUikuZGF0YShBfHxMP1swXTpbXSk7aWYoVi5leGl0KCkucmVtb3ZlKCksVi5lbnRlcigpLmFwcGVuZChcImNsaXBQYXRoXCIpLmF0dHIoXCJpZFwiLFIpLmFwcGVuZChcInJlY3RcIiksQXx8TD8odGhpcy5fY2xpcFJlY3Q9Vi5zZWxlY3QoXCJyZWN0XCIpLmF0dHIoe3g6TWF0aC5mbG9vcihGKSx5Ok1hdGguZmxvb3IoTiksd2lkdGg6TWF0aC5jZWlsKEIpLU1hdGguZmxvb3IoRiksaGVpZ2h0Ok1hdGguY2VpbChqKS1NYXRoLmZsb29yKE4pfSksdGhpcy5jb250YWluZXIuY2FsbChhLnNldENsaXBVcmwsUix0aGlzLmdkKSx0aGlzLmJnLmF0dHIoe3g6ZCx5OnYsd2lkdGg6ZyxoZWlnaHQ6bX0pKToodGhpcy5iZy5hdHRyKHt3aWR0aDowLGhlaWdodDowfSksdGhpcy5jb250YWluZXIub24oXCJ3aGVlbFwiLG51bGwpLm9uKFwiLmRyYWdcIixudWxsKS5jYWxsKGEuc2V0Q2xpcFVybCxudWxsKSxkZWxldGUgdGhpcy5fY2xpcFJlY3QpLEF8fEwpe3ZhciBVPW4uYmVoYXZpb3IuZHJhZygpLm9uKFwiZHJhZ3N0YXJ0XCIsZnVuY3Rpb24oKXtuLmV2ZW50LnNvdXJjZUV2ZW50LnByZXZlbnREZWZhdWx0KCl9KS5vbihcImRyYWdcIix0aGlzLl9vbkJveERyYWcuYmluZCh0aGlzKSk7dGhpcy5jb250YWluZXIub24oXCJ3aGVlbFwiLG51bGwpLm9uKFwid2hlZWxcIix0aGlzLl9vbkJveFdoZWVsLmJpbmQodGhpcykpLm9uKFwiLmRyYWdcIixudWxsKS5jYWxsKFUpO3ZhciBxPW4uYmVoYXZpb3IuZHJhZygpLm9uKFwiZHJhZ3N0YXJ0XCIsZnVuY3Rpb24oKXtuLmV2ZW50LnNvdXJjZUV2ZW50LnByZXZlbnREZWZhdWx0KCksbi5ldmVudC5zb3VyY2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKX0pLm9uKFwiZHJhZ1wiLHRoaXMuX29uQmFyRHJhZy5iaW5kKHRoaXMpKTtBJiZ0aGlzLmhiYXIub24oXCIuZHJhZ1wiLG51bGwpLmNhbGwocSksTCYmdGhpcy52YmFyLm9uKFwiLmRyYWdcIixudWxsKS5jYWxsKHEpfXRoaXMuc2V0VHJhbnNsYXRlKGUscil9LHMucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXsodGhpcy5oYmFyfHx0aGlzLnZiYXIpJiYodGhpcy5iZy5hdHRyKHt3aWR0aDowLGhlaWdodDowfSksdGhpcy5jb250YWluZXIub24oXCJ3aGVlbFwiLG51bGwpLm9uKFwiLmRyYWdcIixudWxsKS5jYWxsKGEuc2V0Q2xpcFVybCxudWxsKSxkZWxldGUgdGhpcy5fY2xpcFJlY3QpLHRoaXMuaGJhciYmKHRoaXMuaGJhci5vbihcIi5kcmFnXCIsbnVsbCksdGhpcy5oYmFyLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLmhiYXIsZGVsZXRlIHRoaXMuX2hiYXJYTWluLGRlbGV0ZSB0aGlzLl9oYmFyVHJhbnNsYXRlTWF4KSx0aGlzLnZiYXImJih0aGlzLnZiYXIub24oXCIuZHJhZ1wiLG51bGwpLHRoaXMudmJhci5yZW1vdmUoKSxkZWxldGUgdGhpcy52YmFyLGRlbGV0ZSB0aGlzLl92YmFyWU1pbixkZWxldGUgdGhpcy5fdmJhclRyYW5zbGF0ZU1heCl9LHMucHJvdG90eXBlLl9vbkJveERyYWc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRyYW5zbGF0ZVgsZT10aGlzLnRyYW5zbGF0ZVk7dGhpcy5oYmFyJiYodC09bi5ldmVudC5keCksdGhpcy52YmFyJiYoZS09bi5ldmVudC5keSksdGhpcy5zZXRUcmFuc2xhdGUodCxlKX0scy5wcm90b3R5cGUuX29uQm94V2hlZWw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRyYW5zbGF0ZVgsZT10aGlzLnRyYW5zbGF0ZVk7dGhpcy5oYmFyJiYodCs9bi5ldmVudC5kZWx0YVkpLHRoaXMudmJhciYmKGUrPW4uZXZlbnQuZGVsdGFZKSx0aGlzLnNldFRyYW5zbGF0ZSh0LGUpfSxzLnByb3RvdHlwZS5fb25CYXJEcmFnPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50cmFuc2xhdGVYLGU9dGhpcy50cmFuc2xhdGVZO2lmKHRoaXMuaGJhcil7dmFyIHI9dCt0aGlzLl9oYmFyWE1pbixpPXIrdGhpcy5faGJhclRyYW5zbGF0ZU1heDt0PShvLmNvbnN0cmFpbihuLmV2ZW50LngscixpKS1yKS8oaS1yKSoodGhpcy5wb3NpdGlvbi53LXRoaXMuX2JveC53KX1pZih0aGlzLnZiYXIpe3ZhciBhPWUrdGhpcy5fdmJhcllNaW4scz1hK3RoaXMuX3ZiYXJUcmFuc2xhdGVNYXg7ZT0oby5jb25zdHJhaW4obi5ldmVudC55LGEscyktYSkvKHMtYSkqKHRoaXMucG9zaXRpb24uaC10aGlzLl9ib3guaCl9dGhpcy5zZXRUcmFuc2xhdGUodCxlKX0scy5wcm90b3R5cGUuc2V0VHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5wb3NpdGlvbi53LXRoaXMuX2JveC53LG49dGhpcy5wb3NpdGlvbi5oLXRoaXMuX2JveC5oO2lmKHQ9by5jb25zdHJhaW4odHx8MCwwLHIpLGU9by5jb25zdHJhaW4oZXx8MCwwLG4pLHRoaXMudHJhbnNsYXRlWD10LHRoaXMudHJhbnNsYXRlWT1lLHRoaXMuY29udGFpbmVyLmNhbGwoYS5zZXRUcmFuc2xhdGUsdGhpcy5fYm94LmwtdGhpcy5wb3NpdGlvbi5sLXQsdGhpcy5fYm94LnQtdGhpcy5wb3NpdGlvbi50LWUpLHRoaXMuX2NsaXBSZWN0JiZ0aGlzLl9jbGlwUmVjdC5hdHRyKHt4Ok1hdGguZmxvb3IodGhpcy5wb3NpdGlvbi5sK3QtLjUpLHk6TWF0aC5mbG9vcih0aGlzLnBvc2l0aW9uLnQrZS0uNSl9KSx0aGlzLmhiYXIpe3ZhciBpPXQvcjt0aGlzLmhiYXIuY2FsbChhLnNldFRyYW5zbGF0ZSx0K2kqdGhpcy5faGJhclRyYW5zbGF0ZU1heCxlKX1pZih0aGlzLnZiYXIpe3ZhciBzPWUvbjt0aGlzLnZiYXIuY2FsbChhLnNldFRyYW5zbGF0ZSx0LGUrcyp0aGlzLl92YmFyVHJhbnNsYXRlTWF4KX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9jb2xvclwiOjU3OCxcIi4uL2RyYXdpbmdcIjo1OTksZDM6MTU1fV0sNjczOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtGUk9NX0JMOntsZWZ0OjAsY2VudGVyOi41LHJpZ2h0OjEsYm90dG9tOjAsbWlkZGxlOi41LHRvcDoxfSxGUk9NX1RMOntsZWZ0OjAsY2VudGVyOi41LHJpZ2h0OjEsYm90dG9tOjEsbWlkZGxlOi41LHRvcDowfSxGUk9NX0JSOntsZWZ0OjEsY2VudGVyOi41LHJpZ2h0OjAsYm90dG9tOjAsbWlkZGxlOi41LHRvcDoxfSxMSU5FX1NQQUNJTkc6MS4zLENBUF9TSElGVDouNyxNSURfU0hJRlQ6LjM1LE9QUE9TSVRFX1NJREU6e2xlZnQ6XCJyaWdodFwiLHJpZ2h0OlwibGVmdFwiLHRvcDpcImJvdHRvbVwiLGJvdHRvbTpcInRvcFwifX19LHt9XSw2NzQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e0NPTVBBUklTT05fT1BTOltcIj1cIixcIiE9XCIsXCI8XCIsXCI+PVwiLFwiPlwiLFwiPD1cIl0sQ09NUEFSSVNPTl9PUFMyOltcIj1cIixcIjxcIixcIj49XCIsXCI+XCIsXCI8PVwiXSxJTlRFUlZBTF9PUFM6W1wiW11cIixcIigpXCIsXCJbKVwiLFwiKF1cIixcIl1bXCIsXCIpKFwiLFwiXShcIixcIilbXCJdLFNFVF9PUFM6W1wie31cIixcIn17XCJdLENPTlNUUkFJTlRfUkVEVUNUSU9OOntcIj1cIjpcIj1cIixcIjxcIjpcIjxcIixcIjw9XCI6XCI8XCIsXCI+XCI6XCI+XCIsXCI+PVwiOlwiPlwiLFwiW11cIjpcIltdXCIsXCIoKVwiOlwiW11cIixcIlspXCI6XCJbXVwiLFwiKF1cIjpcIltdXCIsXCJdW1wiOlwiXVtcIixcIikoXCI6XCJdW1wiLFwiXShcIjpcIl1bXCIsXCIpW1wiOlwiXVtcIn19fSx7fV0sNjc1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtzb2xpZDpbW10sMF0sZG90OltbLjUsMV0sMjAwXSxkYXNoOltbLjUsMV0sNTBdLGxvbmdkYXNoOltbLjUsMV0sMTBdLGRhc2hkb3Q6W1suNSwuNjI1LC44NzUsMV0sNTBdLGxvbmdkYXNoZG90OltbLjUsLjcsLjgsMV0sMTBdfX0se31dLDY3NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17Y2lyY2xlOlwiXFx1MjVjZlwiLFwiY2lyY2xlLW9wZW5cIjpcIlxcdTI1Y2JcIixzcXVhcmU6XCJcXHUyNWEwXCIsXCJzcXVhcmUtb3BlblwiOlwiXFx1MjVhMVwiLGRpYW1vbmQ6XCJcXHUyNWM2XCIsXCJkaWFtb25kLW9wZW5cIjpcIlxcdTI1YzdcIixjcm9zczpcIitcIix4OlwiXFx1Mjc0Y1wifX0se31dLDY3NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17U0hPV19QTEFDRUhPTERFUjoxMDAsSElERV9QTEFDRUhPTERFUjoxZTMsREJMQ0xJQ0tERUxBWTozMDAsREVTRUxFQ1RESU06LjJ9fSx7fV0sNjc4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtCQUROVU06dm9pZCAwLEZQX1NBRkU6TnVtYmVyLk1BWF9WQUxVRS8xZTQsT05FQVZHWUVBUjozMTU1NzZlNSxPTkVBVkdNT05USDoyNjI5OGU1LE9ORURBWTo4NjRlNSxPTkVIT1VSOjM2ZTUsT05FTUlOOjZlNCxPTkVTRUM6MWUzLEVQT0NISkQ6MjQ0MDU4Ny41LEFMTU9TVF9FUVVBTDoxLTFlLTYsTE9HX0NMSVA6MTAsTUlOVVNfU0lHTjpcIlxcdTIyMTJcIn19LHt9XSw2Nzk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLnhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy9cIixyLnN2Zz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsci54bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixyLnN2Z0F0dHJzPXt4bWxuczpyLnN2ZyxcInhtbG5zOnhsaW5rXCI6ci54bGlua319LHt9XSw2ODA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLnZlcnNpb249XCIxLjQ3LjFcIix0KFwiZXM2LXByb21pc2VcIikucG9seWZpbGwoKSx0KFwiLi4vYnVpbGQvcGxvdGNzc1wiKSx0KFwiLi9mb250cy9tYXRoamF4X2NvbmZpZ1wiKSgpO2Zvcih2YXIgbj10KFwiLi9yZWdpc3RyeVwiKSxpPXIucmVnaXN0ZXI9bi5yZWdpc3RlcixhPXQoXCIuL3Bsb3RfYXBpXCIpLG89T2JqZWN0LmtleXMoYSkscz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdO1wiX1wiIT09bC5jaGFyQXQoMCkmJihyW2xdPWFbbF0pLGkoe21vZHVsZVR5cGU6XCJhcGlNZXRob2RcIixuYW1lOmwsZm46YVtsXX0pfWkodChcIi4vdHJhY2VzL3NjYXR0ZXJcIikpLGkoW3QoXCIuL2NvbXBvbmVudHMvZnhcIiksdChcIi4vY29tcG9uZW50cy9sZWdlbmRcIiksdChcIi4vY29tcG9uZW50cy9hbm5vdGF0aW9uc1wiKSx0KFwiLi9jb21wb25lbnRzL2Fubm90YXRpb25zM2RcIiksdChcIi4vY29tcG9uZW50cy9zaGFwZXNcIiksdChcIi4vY29tcG9uZW50cy9pbWFnZXNcIiksdChcIi4vY29tcG9uZW50cy91cGRhdGVtZW51c1wiKSx0KFwiLi9jb21wb25lbnRzL3NsaWRlcnNcIiksdChcIi4vY29tcG9uZW50cy9yYW5nZXNsaWRlclwiKSx0KFwiLi9jb21wb25lbnRzL3Jhbmdlc2VsZWN0b3JcIiksdChcIi4vY29tcG9uZW50cy9ncmlkXCIpLHQoXCIuL2NvbXBvbmVudHMvZXJyb3JiYXJzXCIpLHQoXCIuL2NvbXBvbmVudHMvY29sb3JzY2FsZVwiKV0pLGkoW3QoXCIuL2xvY2FsZS1lblwiKSx0KFwiLi9sb2NhbGUtZW4tdXNcIildKSxyLkljb25zPXQoXCIuLi9idWlsZC9wbG90aWNvblwiKSxyLlBsb3RzPXQoXCIuL3Bsb3RzL3Bsb3RzXCIpLHIuRng9dChcIi4vY29tcG9uZW50cy9meFwiKSxyLlNuYXBzaG90PXQoXCIuL3NuYXBzaG90XCIpLHIuUGxvdFNjaGVtYT10KFwiLi9wbG90X2FwaS9wbG90X3NjaGVtYVwiKSxyLlF1ZXVlPXQoXCIuL2xpYi9xdWV1ZVwiKSxyLmQzPXQoXCJkM1wiKX0se1wiLi4vYnVpbGQvcGxvdGNzc1wiOjEsXCIuLi9idWlsZC9wbG90aWNvblwiOjIsXCIuL2NvbXBvbmVudHMvYW5ub3RhdGlvbnNcIjo1NjksXCIuL2NvbXBvbmVudHMvYW5ub3RhdGlvbnMzZFwiOjU3NCxcIi4vY29tcG9uZW50cy9jb2xvcnNjYWxlXCI6NTkwLFwiLi9jb21wb25lbnRzL2Vycm9yYmFyc1wiOjYwNSxcIi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4vY29tcG9uZW50cy9ncmlkXCI6NjIxLFwiLi9jb21wb25lbnRzL2ltYWdlc1wiOjYyNixcIi4vY29tcG9uZW50cy9sZWdlbmRcIjo2MzQsXCIuL2NvbXBvbmVudHMvcmFuZ2VzZWxlY3RvclwiOjY0NSxcIi4vY29tcG9uZW50cy9yYW5nZXNsaWRlclwiOjY1MixcIi4vY29tcG9uZW50cy9zaGFwZXNcIjo2NjAsXCIuL2NvbXBvbmVudHMvc2xpZGVyc1wiOjY2NSxcIi4vY29tcG9uZW50cy91cGRhdGVtZW51c1wiOjY3MSxcIi4vZm9udHMvbWF0aGpheF9jb25maWdcIjo2ODEsXCIuL2xpYi9xdWV1ZVwiOjcxNixcIi4vbG9jYWxlLWVuXCI6NzMwLFwiLi9sb2NhbGUtZW4tdXNcIjo3MjksXCIuL3Bsb3RfYXBpXCI6NzM0LFwiLi9wbG90X2FwaS9wbG90X3NjaGVtYVwiOjczOCxcIi4vcGxvdHMvcGxvdHNcIjo4MTAsXCIuL3JlZ2lzdHJ5XCI6ODI5LFwiLi9zbmFwc2hvdFwiOjgzNCxcIi4vdHJhY2VzL3NjYXR0ZXJcIjoxMDY0LGQzOjE1NSxcImVzNi1wcm9taXNlXCI6MjExfV0sNjgxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIE1hdGhKYXgmJihcImxvY2FsXCIhPT0od2luZG93LlBsb3RseUNvbmZpZ3x8e30pLk1hdGhKYXhDb25maWcmJihNYXRoSmF4Lkh1Yi5Db25maWcoe21lc3NhZ2VTdHlsZTpcIm5vbmVcIixza2lwU3RhcnR1cFR5cGVzZXQ6ITAsZGlzcGxheUFsaWduOlwibGVmdFwiLHRleDJqYXg6e2lubGluZU1hdGg6W1tcIiRcIixcIiRcIl0sW1wiXFxcXChcIixcIlxcXFwpXCJdXX19KSxNYXRoSmF4Lkh1Yi5Db25maWd1cmVkKCkpKX19LHt9XSw2ODI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLmlzTGVmdEFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm5cImxlZnRcIj09PXQueGFuY2hvcnx8XCJhdXRvXCI9PT10LnhhbmNob3ImJnQueDw9MS8zfSxyLmlzQ2VudGVyQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVyblwiY2VudGVyXCI9PT10LnhhbmNob3J8fFwiYXV0b1wiPT09dC54YW5jaG9yJiZ0Lng+MS8zJiZ0Lng8Mi8zfSxyLmlzUmlnaHRBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuXCJyaWdodFwiPT09dC54YW5jaG9yfHxcImF1dG9cIj09PXQueGFuY2hvciYmdC54Pj0yLzN9LHIuaXNUb3BBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuXCJ0b3BcIj09PXQueWFuY2hvcnx8XCJhdXRvXCI9PT10LnlhbmNob3ImJnQueT49Mi8zfSxyLmlzTWlkZGxlQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVyblwibWlkZGxlXCI9PT10LnlhbmNob3J8fFwiYXV0b1wiPT09dC55YW5jaG9yJiZ0Lnk+MS8zJiZ0Lnk8Mi8zfSxyLmlzQm90dG9tQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVyblwiYm90dG9tXCI9PT10LnlhbmNob3J8fFwiYXV0b1wiPT09dC55YW5jaG9yJiZ0Lnk8PTEvM319LHt9XSw2ODM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9tb2RcIiksaT1uLm1vZCxhPW4ubW9kSGFsZixvPU1hdGguUEkscz0yKm87ZnVuY3Rpb24gbCh0KXtyZXR1cm4gTWF0aC5hYnModFsxXS10WzBdKT5zLTFlLTE0fWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gYShlLXQscyl9ZnVuY3Rpb24gdSh0LGUpe2lmKGwoZSkpcmV0dXJuITA7dmFyIHIsbjtlWzBdPGVbMV0/KHI9ZVswXSxuPWVbMV0pOihyPWVbMV0sbj1lWzBdKSwocj1pKHIscykpPihuPWkobixzKSkmJihuKz1zKTt2YXIgYT1pKHQscyksbz1hK3M7cmV0dXJuIGE+PXImJmE8PW58fG8+PXImJm88PW59ZnVuY3Rpb24gaCh0LGUscixuLGksYSxjKXtpPWl8fDAsYT1hfHwwO3ZhciB1LGgsZixwLGQsZz1sKFtyLG5dKTtmdW5jdGlvbiB2KHQsZSl7cmV0dXJuW3QqTWF0aC5jb3MoZSkraSxhLXQqTWF0aC5zaW4oZSldfWc/KHU9MCxoPW8sZj1zKTpyPG4/KHU9cixmPW4pOih1PW4sZj1yKSx0PGU/KHA9dCxkPWUpOihwPWUsZD10KTt2YXIgbSx5PU1hdGguYWJzKGYtdSk8PW8/MDoxO2Z1bmN0aW9uIHgodCxlLHIpe3JldHVyblwiQVwiK1t0LHRdK1wiIFwiK1swLHkscl0rXCIgXCIrdih0LGUpfXJldHVybiBnP209bnVsbD09PXA/XCJNXCIrdihkLHUpK3goZCxoLDApK3goZCxmLDApK1wiWlwiOlwiTVwiK3YocCx1KSt4KHAsaCwwKSt4KHAsZiwwKStcIlpNXCIrdihkLHUpK3goZCxoLDEpK3goZCxmLDEpK1wiWlwiOm51bGw9PT1wPyhtPVwiTVwiK3YoZCx1KSt4KGQsZiwwKSxjJiYobSs9XCJMMCwwWlwiKSk6bT1cIk1cIit2KHAsdSkrXCJMXCIrdihkLHUpK3goZCxmLDApK1wiTFwiK3YocCxmKSt4KHAsdSwxKStcIlpcIixtfWUuZXhwb3J0cz17ZGVnMnJhZDpmdW5jdGlvbih0KXtyZXR1cm4gdC8xODAqb30scmFkMmRlZzpmdW5jdGlvbih0KXtyZXR1cm4gdC9vKjE4MH0sYW5nbGVEZWx0YTpjLGFuZ2xlRGlzdDpmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmFicyhjKHQsZSkpfSxpc0Z1bGxDaXJjbGU6bCxpc0FuZ2xlSW5zaWRlU2VjdG9yOnUsaXNQdEluc2lkZVNlY3RvcjpmdW5jdGlvbih0LGUscixuKXtyZXR1cm4hIXUoZSxuKSYmKHJbMF08clsxXT8oaT1yWzBdLGE9clsxXSk6KGk9clsxXSxhPXJbMF0pLHQ+PWkmJnQ8PWEpO3ZhciBpLGF9LHBhdGhBcmM6ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gaChudWxsLHQsZSxyLG4saSwwKX0scGF0aFNlY3RvcjpmdW5jdGlvbih0LGUscixuLGkpe3JldHVybiBoKG51bGwsdCxlLHIsbixpLDEpfSxwYXRoQW5udWx1czpmdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuIGgodCxlLHIsbixpLGEsMSl9fX0se1wiLi9tb2RcIjo3MDh9XSw2ODQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1BcnJheS5pc0FycmF5LGk9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXI6e2lzVmlldzpmdW5jdGlvbigpe3JldHVybiExfX0sYT1cInVuZGVmaW5lZFwiPT10eXBlb2YgRGF0YVZpZXc/ZnVuY3Rpb24oKXt9OkRhdGFWaWV3O2Z1bmN0aW9uIG8odCl7cmV0dXJuIGkuaXNWaWV3KHQpJiYhKHQgaW5zdGFuY2VvZiBhKX1mdW5jdGlvbiBzKHQpe3JldHVybiBuKHQpfHxvKHQpfWZ1bmN0aW9uIGwodCxlLHIpe2lmKHModCkpe2lmKHModFswXSkpe2Zvcih2YXIgbj1yLGk9MDtpPHQubGVuZ3RoO2krKyluPWUobix0W2ldLmxlbmd0aCk7cmV0dXJuIG59cmV0dXJuIHQubGVuZ3RofXJldHVybiAwfXIuaXNUeXBlZEFycmF5PW8sci5pc0FycmF5T3JUeXBlZEFycmF5PXMsci5pc0FycmF5MUQ9ZnVuY3Rpb24odCl7cmV0dXJuIXModFswXSl9LHIuZW5zdXJlQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0KXx8KHQ9W10pLHQubGVuZ3RoPWUsdH0sci5jb25jYXQ9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsaSxhLG8scyxsLGM9W10sdT0hMCxoPTA7Zm9yKHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKShvPShpPWFyZ3VtZW50c1tyXSkubGVuZ3RoKSYmKGU/Yy5wdXNoKGkpOihlPWksYT1vKSxuKGkpP3Q9ITE6KHU9ITEsaD90IT09aS5jb25zdHJ1Y3RvciYmKHQ9ITEpOnQ9aS5jb25zdHJ1Y3RvciksaCs9byk7aWYoIWgpcmV0dXJuW107aWYoIWMubGVuZ3RoKXJldHVybiBlO2lmKHUpcmV0dXJuIGUuY29uY2F0LmFwcGx5KGUsYyk7aWYodCl7Zm9yKChzPW5ldyB0KGgpKS5zZXQoZSkscj0wO3I8Yy5sZW5ndGg7cisrKWk9Y1tyXSxzLnNldChpLGEpLGErPWkubGVuZ3RoO3JldHVybiBzfWZvcihzPW5ldyBBcnJheShoKSxsPTA7bDxlLmxlbmd0aDtsKyspc1tsXT1lW2xdO2ZvcihyPTA7cjxjLmxlbmd0aDtyKyspe2ZvcihpPWNbcl0sbD0wO2w8aS5sZW5ndGg7bCsrKXNbYStsXT1pW2xdO2ErPWx9cmV0dXJuIHN9LHIubWF4Um93TGVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsTWF0aC5tYXgsMCl9LHIubWluUm93TGVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsTWF0aC5taW4sMS8wKX19LHt9XSw2ODU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKS5CQUROVU0sYT0vXlsnXCIlLCQjXFxzJ10rfFssIF18WydcIiUsJCNcXHMnXSskL2c7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD10LnJlcGxhY2UoYSxcIlwiKSksbih0KT9OdW1iZXIodCk6aX19LHtcIi4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDY4NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2UuX2dsY2FudmFzJiZlLl9nbGNhbnZhcy5zaXplKCkmJmUuX2dsY2FudmFzLmVhY2goZnVuY3Rpb24odCl7dC5yZWdsJiZ0LnJlZ2wuY2xlYXIoe2NvbG9yOiEwLGRlcHRoOiEwfSl9KX19LHt9XSw2ODc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlciYmKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlciksZGVsZXRlIHQuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXIpfX0se31dLDY4ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCJ0aW55Y29sb3IyXCIpLGE9dChcIi4uL3Bsb3RzL2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL3NjYWxlc1wiKSxzPXQoXCIuLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zXCIpLkRFU0VMRUNURElNLGw9dChcIi4vbmVzdGVkX3Byb3BlcnR5XCIpLGM9dChcIi4vcmVnZXhcIikuY291bnRlcix1PXQoXCIuL21vZFwiKS5tb2RIYWxmLGg9dChcIi4vYXJyYXlcIikuaXNBcnJheU9yVHlwZWRBcnJheTtmdW5jdGlvbiBmKHQsZSl7dmFyIG49ci52YWxPYmplY3RNZXRhW2UudmFsVHlwZV07aWYoZS5hcnJheU9rJiZoKHQpKXJldHVybiEwO2lmKG4udmFsaWRhdGVGdW5jdGlvbilyZXR1cm4gbi52YWxpZGF0ZUZ1bmN0aW9uKHQsZSk7dmFyIGk9e30sYT1pLG89e3NldDpmdW5jdGlvbih0KXthPXR9fTtyZXR1cm4gbi5jb2VyY2VGdW5jdGlvbih0LG8saSxlKSxhIT09aX1yLnZhbE9iamVjdE1ldGE9e2RhdGFfYXJyYXk6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtoKHQpP2Uuc2V0KHQpOnZvaWQgMCE9PXImJmUuc2V0KHIpfX0sZW51bWVyYXRlZDp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsbil7bi5jb2VyY2VOdW1iZXImJih0PSt0KSwtMT09PW4udmFsdWVzLmluZGV4T2YodCk/ZS5zZXQocik6ZS5zZXQodCl9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24odCxlKXtlLmNvZXJjZU51bWJlciYmKHQ9K3QpO2Zvcih2YXIgcj1lLnZhbHVlcyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPVN0cmluZyhyW25dKTtpZihcIi9cIj09PWkuY2hhckF0KDApJiZcIi9cIj09PWkuY2hhckF0KGkubGVuZ3RoLTEpKXtpZihuZXcgUmVnRXhwKGkuc3Vic3RyKDEsaS5sZW5ndGgtMikpLnRlc3QodCkpcmV0dXJuITB9ZWxzZSBpZih0PT09cltuXSlyZXR1cm4hMH1yZXR1cm4hMX19LGJvb2xlYW46e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXshMD09PXR8fCExPT09dD9lLnNldCh0KTplLnNldChyKX19LG51bWJlcjp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsaSl7IW4odCl8fHZvaWQgMCE9PWkubWluJiZ0PGkubWlufHx2b2lkIDAhPT1pLm1heCYmdD5pLm1heD9lLnNldChyKTplLnNldCgrdCl9fSxpbnRlZ2VyOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixpKXt0JTF8fCFuKHQpfHx2b2lkIDAhPT1pLm1pbiYmdDxpLm1pbnx8dm9pZCAwIT09aS5tYXgmJnQ+aS5tYXg/ZS5zZXQocik6ZS5zZXQoK3QpfX0sc3RyaW5nOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixuKXtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl7dmFyIGk9XCJudW1iZXJcIj09dHlwZW9mIHQ7ITAhPT1uLnN0cmljdCYmaT9lLnNldChTdHJpbmcodCkpOmUuc2V0KHIpfWVsc2Ugbi5ub0JsYW5rJiYhdD9lLnNldChyKTplLnNldCh0KX19LGNvbG9yOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7aSh0KS5pc1ZhbGlkKCk/ZS5zZXQodCk6ZS5zZXQocil9fSxjb2xvcmxpc3Q6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aCYmdC5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4gaSh0KS5pc1ZhbGlkKCl9KT9lLnNldCh0KTplLnNldChyKX19LGNvbG9yc2NhbGU6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtlLnNldChvLmdldCh0LHIpKX19LGFuZ2xlOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7XCJhdXRvXCI9PT10P2Uuc2V0KFwiYXV0b1wiKTpuKHQpP2Uuc2V0KHUoK3QsMzYwKSk6ZS5zZXQocil9fSxzdWJwbG90aWQ6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4ucmVnZXh8fGMocik7XCJzdHJpbmdcIj09dHlwZW9mIHQmJmkudGVzdCh0KT9lLnNldCh0KTplLnNldChyKX0sdmFsaWRhdGVGdW5jdGlvbjpmdW5jdGlvbih0LGUpe3ZhciByPWUuZGZsdDtyZXR1cm4gdD09PXJ8fFwic3RyaW5nXCI9PXR5cGVvZiB0JiYhIWMocikudGVzdCh0KX19LGZsYWdsaXN0Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixuKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdClpZigtMT09PShuLmV4dHJhc3x8W10pLmluZGV4T2YodCkpe2Zvcih2YXIgaT10LnNwbGl0KFwiK1wiKSxhPTA7YTxpLmxlbmd0aDspe3ZhciBvPWlbYV07LTE9PT1uLmZsYWdzLmluZGV4T2Yobyl8fGkuaW5kZXhPZihvKTxhP2kuc3BsaWNlKGEsMSk6YSsrfWkubGVuZ3RoP2Uuc2V0KGkuam9pbihcIitcIikpOmUuc2V0KHIpfWVsc2UgZS5zZXQodCk7ZWxzZSBlLnNldChyKX19LGFueTp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpe3ZvaWQgMD09PXQ/ZS5zZXQocik6ZS5zZXQodCl9fSxpbmZvX2FycmF5Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUsbixpKXtmdW5jdGlvbiBhKHQsZSxuKXt2YXIgaSxhPXtzZXQ6ZnVuY3Rpb24odCl7aT10fX07cmV0dXJuIHZvaWQgMD09PW4mJihuPWUuZGZsdCksci52YWxPYmplY3RNZXRhW2UudmFsVHlwZV0uY29lcmNlRnVuY3Rpb24odCxhLG4sZSksaX12YXIgbz0yPT09aS5kaW1lbnNpb25zfHxcIjEtMlwiPT09aS5kaW1lbnNpb25zJiZBcnJheS5pc0FycmF5KHQpJiZBcnJheS5pc0FycmF5KHRbMF0pO2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBzLGwsYyx1LGgsZixwPWkuaXRlbXMsZD1bXSxnPUFycmF5LmlzQXJyYXkocCksdj1nJiZvJiZBcnJheS5pc0FycmF5KHBbMF0pLG09byYmZyYmIXYseT1nJiYhbT9wLmxlbmd0aDp0Lmxlbmd0aDtpZihuPUFycmF5LmlzQXJyYXkobik/bjpbXSxvKWZvcihzPTA7czx5O3MrKylmb3IoZFtzXT1bXSxjPUFycmF5LmlzQXJyYXkodFtzXSk/dFtzXTpbXSxoPW0/cC5sZW5ndGg6Zz9wW3NdLmxlbmd0aDpjLmxlbmd0aCxsPTA7bDxoO2wrKyl1PW0/cFtsXTpnP3Bbc11bbF06cCx2b2lkIDAhPT0oZj1hKGNbbF0sdSwobltzXXx8W10pW2xdKSkmJihkW3NdW2xdPWYpO2Vsc2UgZm9yKHM9MDtzPHk7cysrKXZvaWQgMCE9PShmPWEodFtzXSxnP3Bbc106cCxuW3NdKSkmJihkW3NdPWYpO2Uuc2V0KGQpfWVsc2UgZS5zZXQobil9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24odCxlKXtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4hMTt2YXIgcj1lLml0ZW1zLG49QXJyYXkuaXNBcnJheShyKSxpPTI9PT1lLmRpbWVuc2lvbnM7aWYoIWUuZnJlZUxlbmd0aCYmdC5sZW5ndGghPT1yLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKylpZihpKXtpZighQXJyYXkuaXNBcnJheSh0W2FdKXx8IWUuZnJlZUxlbmd0aCYmdFthXS5sZW5ndGghPT1yW2FdLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG89MDtvPHRbYV0ubGVuZ3RoO28rKylpZighZih0W2FdW29dLG4/clthXVtvXTpyKSlyZXR1cm4hMX1lbHNlIGlmKCFmKHRbYV0sbj9yW2FdOnIpKXJldHVybiExO3JldHVybiEwfX19LHIuY29lcmNlPWZ1bmN0aW9uKHQsZSxuLGksYSl7dmFyIG89bChuLGkpLmdldCgpLHM9bCh0LGkpLGM9bChlLGkpLHU9cy5nZXQoKSxwPWUuX3RlbXBsYXRlO2lmKHZvaWQgMD09PXUmJnAmJih1PWwocCxpKS5nZXQoKSxwPTApLHZvaWQgMD09PWEmJihhPW8uZGZsdCksby5hcnJheU9rJiZoKHUpKXJldHVybiBjLnNldCh1KSx1O3ZhciBkPXIudmFsT2JqZWN0TWV0YVtvLnZhbFR5cGVdLmNvZXJjZUZ1bmN0aW9uO2QodSxjLGEsbyk7dmFyIGc9Yy5nZXQoKTtyZXR1cm4gcCYmZz09PWEmJiFmKHUsbykmJihkKHU9bChwLGkpLmdldCgpLGMsYSxvKSxnPWMuZ2V0KCkpLGd9LHIuY29lcmNlMj1mdW5jdGlvbih0LGUsbixpLGEpe3ZhciBvPWwodCxpKSxzPXIuY29lcmNlKHQsZSxuLGksYSksYz1vLmdldCgpO3JldHVybiBudWxsIT1jJiZzfSxyLmNvZXJjZUZvbnQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXt9O3JldHVybiByPXJ8fHt9LG4uZmFtaWx5PXQoZStcIi5mYW1pbHlcIixyLmZhbWlseSksbi5zaXplPXQoZStcIi5zaXplXCIsci5zaXplKSxuLmNvbG9yPXQoZStcIi5jb2xvclwiLHIuY29sb3IpLG59LHIuY29lcmNlSG92ZXJpbmZvPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxvPWUuX21vZHVsZS5hdHRyaWJ1dGVzLHM9by5ob3ZlcmluZm8/bzphLGw9cy5ob3ZlcmluZm87aWYoMT09PW4uX2RhdGFMZW5ndGgpe3ZhciBjPVwiYWxsXCI9PT1sLmRmbHQ/bC5mbGFncy5zbGljZSgpOmwuZGZsdC5zcGxpdChcIitcIik7Yy5zcGxpY2UoYy5pbmRleE9mKFwibmFtZVwiKSwxKSxpPWMuam9pbihcIitcIil9cmV0dXJuIHIuY29lcmNlKHQsZSxzLFwiaG92ZXJpbmZvXCIsaSl9LHIuY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eT1mdW5jdGlvbih0LGUpe2lmKHQubWFya2VyKXt2YXIgcixuLGk9dC5tYXJrZXIub3BhY2l0eTtpZih2b2lkIDAhPT1pKWgoaSl8fHQuc2VsZWN0ZWR8fHQudW5zZWxlY3RlZHx8KHI9aSxuPXMqaSksZShcInNlbGVjdGVkLm1hcmtlci5vcGFjaXR5XCIsciksZShcInVuc2VsZWN0ZWQubWFya2VyLm9wYWNpdHlcIixuKX19LHIudmFsaWRhdGU9Zn0se1wiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL3NjYWxlc1wiOjU5MyxcIi4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnNcIjo2NzcsXCIuLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi9hcnJheVwiOjY4NCxcIi4vbW9kXCI6NzA4LFwiLi9uZXN0ZWRfcHJvcGVydHlcIjo3MDksXCIuL3JlZ2V4XCI6NzE3LFwiZmFzdC1pc251bWVyaWNcIjoyMjIsdGlueWNvbG9yMjo1MjJ9XSw2ODk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbixpLGE9dChcImQzXCIpLG89dChcImZhc3QtaXNudW1lcmljXCIpLHM9dChcIi4vbG9nZ2Vyc1wiKSxsPXQoXCIuL21vZFwiKS5tb2QsYz10KFwiLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKSx1PWMuQkFETlVNLGg9Yy5PTkVEQVksZj1jLk9ORUhPVVIscD1jLk9ORU1JTixkPWMuT05FU0VDLGc9Yy5FUE9DSEpELHY9dChcIi4uL3JlZ2lzdHJ5XCIpLG09YS50aW1lLmZvcm1hdC51dGMseT0vXlxccyooLT9cXGRcXGRcXGRcXGR8XFxkXFxkKSgtKFxcZD9cXGQpKC0oXFxkP1xcZCkoWyBUdF0oWzAxXT9cXGR8MlswLTNdKSg6KFswLTVdXFxkKSg6KFswLTVdXFxkKFxcLlxcZCspPykpPyhafHp8WytcXC1dXFxkXFxkOj9cXGRcXGQpPyk/KT8pPyk/XFxzKiQvbSx4PS9eXFxzKigtP1xcZFxcZFxcZFxcZHxcXGRcXGQpKC0oXFxkP1xcZGk/KSgtKFxcZD9cXGQpKFsgVHRdKFswMV0/XFxkfDJbMC0zXSkoOihbMC01XVxcZCkoOihbMC01XVxcZChcXC5cXGQrKT8pKT8oWnx6fFsrXFwtXVxcZFxcZDo/XFxkXFxkKT8pPyk/KT8pP1xccyokL20sYj0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCktNzA7ZnVuY3Rpb24gXyh0KXtyZXR1cm4gdCYmdi5jb21wb25lbnRzUmVnaXN0cnkuY2FsZW5kYXJzJiZcInN0cmluZ1wiPT10eXBlb2YgdCYmXCJncmVnb3JpYW5cIiE9PXR9ZnVuY3Rpb24gdyh0LGUpe3JldHVybiBTdHJpbmcodCtNYXRoLnBvdygxMCxlKSkuc3Vic3RyKDEpfXIuZGF0ZVRpY2swPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIF8odCk/ZT92LmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiQ0FOT05JQ0FMX1NVTkRBWVwiKVt0XTp2LmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiQ0FOT05JQ0FMX1RJQ0tcIilbdF06ZT9cIjIwMDAtMDEtMDJcIjpcIjIwMDAtMDEtMDFcIn0sci5kZmx0UmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIF8odCk/di5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcIkRGTFRSQU5HRVwiKVt0XTpbXCIyMDAwLTAxLTAxXCIsXCIyMDAxLTAxLTAxXCJdfSxyLmlzSlNEYXRlPWZ1bmN0aW9uKHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0JiZudWxsIT09dCYmXCJmdW5jdGlvblwiPT10eXBlb2YgdC5nZXRUaW1lfSxyLmRhdGVUaW1lMm1zPWZ1bmN0aW9uKHQsZSl7aWYoci5pc0pTRGF0ZSh0KSl7dmFyIGE9dC5nZXRUaW1lem9uZU9mZnNldCgpKnAsbz0odC5nZXRVVENNaW51dGVzKCktdC5nZXRNaW51dGVzKCkpKnArKHQuZ2V0VVRDU2Vjb25kcygpLXQuZ2V0U2Vjb25kcygpKSpkKyh0LmdldFVUQ01pbGxpc2Vjb25kcygpLXQuZ2V0TWlsbGlzZWNvbmRzKCkpO2lmKG8pe3ZhciBzPTMqcDthPWEtcy8yK2woby1hK3MvMixzKX1yZXR1cm4odD1OdW1iZXIodCktYSk+PW4mJnQ8PWk/dDp1fWlmKFwic3RyaW5nXCIhPXR5cGVvZiB0JiZcIm51bWJlclwiIT10eXBlb2YgdClyZXR1cm4gdTt0PVN0cmluZyh0KTt2YXIgYz1fKGUpLG09dC5jaGFyQXQoMCk7IWN8fFwiR1wiIT09bSYmXCJnXCIhPT1tfHwodD10LnN1YnN0cigxKSxlPVwiXCIpO3ZhciB3PWMmJlwiY2hpbmVzZVwiPT09ZS5zdWJzdHIoMCw3KSxrPXQubWF0Y2godz94OnkpO2lmKCFrKXJldHVybiB1O3ZhciBBPWtbMV0sVD1rWzNdfHxcIjFcIixNPU51bWJlcihrWzVdfHwxKSxTPU51bWJlcihrWzddfHwwKSxFPU51bWJlcihrWzldfHwwKSxDPU51bWJlcihrWzExXXx8MCk7aWYoYyl7aWYoMj09PUEubGVuZ3RoKXJldHVybiB1O3ZhciBMO0E9TnVtYmVyKEEpO3RyeXt2YXIgej12LmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiZ2V0Q2FsXCIpKGUpO2lmKHcpe3ZhciBPPVwiaVwiPT09VC5jaGFyQXQoVC5sZW5ndGgtMSk7VD1wYXJzZUludChULDEwKSxMPXoubmV3RGF0ZShBLHoudG9Nb250aEluZGV4KEEsVCxPKSxNKX1lbHNlIEw9ei5uZXdEYXRlKEEsTnVtYmVyKFQpLE0pfWNhdGNoKHQpe3JldHVybiB1fXJldHVybiBMPyhMLnRvSkQoKS1nKSpoK1MqZitFKnArQypkOnV9QT0yPT09QS5sZW5ndGg/KE51bWJlcihBKSsyZTMtYiklMTAwK2I6TnVtYmVyKEEpLFQtPTE7dmFyIEk9bmV3IERhdGUoRGF0ZS5VVEMoMmUzLFQsTSxTLEUpKTtyZXR1cm4gSS5zZXRVVENGdWxsWWVhcihBKSxJLmdldFVUQ01vbnRoKCkhPT1UP3U6SS5nZXRVVENEYXRlKCkhPT1NP3U6SS5nZXRUaW1lKCkrQypkfSxuPXIuTUlOX01TPXIuZGF0ZVRpbWUybXMoXCItOTk5OVwiKSxpPXIuTUFYX01TPXIuZGF0ZVRpbWUybXMoXCI5OTk5LTEyLTMxIDIzOjU5OjU5Ljk5OTlcIiksci5pc0RhdGVUaW1lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZGF0ZVRpbWUybXModCxlKSE9PXV9O3ZhciBrPTkwKmgsQT0zKmYsVD01KnA7ZnVuY3Rpb24gTSh0LGUscixuLGkpe2lmKChlfHxyfHxufHxpKSYmKHQrPVwiIFwiK3coZSwyKStcIjpcIit3KHIsMiksKG58fGkpJiYodCs9XCI6XCIrdyhuLDIpLGkpKSl7Zm9yKHZhciBhPTQ7aSUxMD09MDspYS09MSxpLz0xMDt0Kz1cIi5cIit3KGksYSl9cmV0dXJuIHR9ci5tczJEYXRlVGltZT1mdW5jdGlvbih0LGUscil7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHR8fCEodD49biYmdDw9aSkpcmV0dXJuIHU7ZXx8KGU9MCk7dmFyIGEsbyxzLGMseSx4LGI9TWF0aC5mbG9vcigxMCpsKHQrLjA1LDEpKSx3PU1hdGgucm91bmQodC1iLzEwKTtpZihfKHIpKXt2YXIgUz1NYXRoLmZsb29yKHcvaCkrZyxFPU1hdGguZmxvb3IobCh0LGgpKTt0cnl7YT12LmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiZ2V0Q2FsXCIpKHIpLmZyb21KRChTKS5mb3JtYXREYXRlKFwieXl5eS1tbS1kZFwiKX1jYXRjaCh0KXthPW0oXCJHJVktJW0tJWRcIikobmV3IERhdGUodykpfWlmKFwiLVwiPT09YS5jaGFyQXQoMCkpZm9yKDthLmxlbmd0aDwxMTspYT1cIi0wXCIrYS5zdWJzdHIoMSk7ZWxzZSBmb3IoO2EubGVuZ3RoPDEwOylhPVwiMFwiK2E7bz1lPGs/TWF0aC5mbG9vcihFL2YpOjAscz1lPGs/TWF0aC5mbG9vcihFJWYvcCk6MCxjPWU8QT9NYXRoLmZsb29yKEUlcC9kKTowLHk9ZTxUP0UlZCoxMCtiOjB9ZWxzZSB4PW5ldyBEYXRlKHcpLGE9bShcIiVZLSVtLSVkXCIpKHgpLG89ZTxrP3guZ2V0VVRDSG91cnMoKTowLHM9ZTxrP3guZ2V0VVRDTWludXRlcygpOjAsYz1lPEE/eC5nZXRVVENTZWNvbmRzKCk6MCx5PWU8VD8xMCp4LmdldFVUQ01pbGxpc2Vjb25kcygpK2I6MDtyZXR1cm4gTShhLG8scyxjLHkpfSxyLm1zMkRhdGVUaW1lTG9jYWw9ZnVuY3Rpb24odCl7aWYoISh0Pj1uK2gmJnQ8PWktaCkpcmV0dXJuIHU7dmFyIGU9TWF0aC5mbG9vcigxMCpsKHQrLjA1LDEpKSxyPW5ldyBEYXRlKE1hdGgucm91bmQodC1lLzEwKSk7cmV0dXJuIE0oYS50aW1lLmZvcm1hdChcIiVZLSVtLSVkXCIpKHIpLHIuZ2V0SG91cnMoKSxyLmdldE1pbnV0ZXMoKSxyLmdldFNlY29uZHMoKSwxMCpyLmdldFVUQ01pbGxpc2Vjb25kcygpK2UpfSxyLmNsZWFuRGF0ZT1mdW5jdGlvbih0LGUsbil7aWYodD09PXUpcmV0dXJuIGU7aWYoci5pc0pTRGF0ZSh0KXx8XCJudW1iZXJcIj09dHlwZW9mIHQmJmlzRmluaXRlKHQpKXtpZihfKG4pKXJldHVybiBzLmVycm9yKFwiSlMgRGF0ZXMgYW5kIG1pbGxpc2Vjb25kcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggd29ybGQgY2FsZW5kYXJzXCIsdCksZTtpZighKHQ9ci5tczJEYXRlVGltZUxvY2FsKCt0KSkmJnZvaWQgMCE9PWUpcmV0dXJuIGV9ZWxzZSBpZighci5pc0RhdGVUaW1lKHQsbikpcmV0dXJuIHMuZXJyb3IoXCJ1bnJlY29nbml6ZWQgZGF0ZVwiLHQpLGU7cmV0dXJuIHR9O3ZhciBTPS8lXFxkP2YvZztmdW5jdGlvbiBFKHQsZSxyLG4pe3Q9dC5yZXBsYWNlKFMsZnVuY3Rpb24odCl7dmFyIHI9TWF0aC5taW4oK3QuY2hhckF0KDEpfHw2LDYpO3JldHVybihlLzFlMyUxKzIpLnRvRml4ZWQocikuc3Vic3RyKDIpLnJlcGxhY2UoLzArJC8sXCJcIil8fFwiMFwifSk7dmFyIGk9bmV3IERhdGUoTWF0aC5mbG9vcihlKy4wNSkpO2lmKF8obikpdHJ5e3Q9di5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcIndvcmxkQ2FsRm10XCIpKHQsZSxuKX1jYXRjaCh0KXtyZXR1cm5cIkludmFsaWRcIn1yZXR1cm4gcih0KShpKX12YXIgQz1bNTksNTkuOSw1OS45OSw1OS45OTksNTkuOTk5OV07ci5mb3JtYXREYXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtpZihpPV8oaSkmJmksIWUpaWYoXCJ5XCI9PT1yKWU9YS55ZWFyO2Vsc2UgaWYoXCJtXCI9PT1yKWU9YS5tb250aDtlbHNle2lmKFwiZFwiIT09cilyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj1sKHQrLjA1LGgpLG49dyhNYXRoLmZsb29yKHIvZiksMikrXCI6XCIrdyhsKE1hdGguZmxvb3Ioci9wKSw2MCksMik7aWYoXCJNXCIhPT1lKXtvKGUpfHwoZT0wKTt2YXIgaT0oMTAwK01hdGgubWluKGwodC9kLDYwKSxDW2VdKSkudG9GaXhlZChlKS5zdWJzdHIoMSk7ZT4wJiYoaT1pLnJlcGxhY2UoLzArJC8sXCJcIikucmVwbGFjZSgvW1xcLl0kLyxcIlwiKSksbis9XCI6XCIraX1yZXR1cm4gbn0odCxyKStcIlxcblwiK0UoYS5kYXlNb250aFllYXIsdCxuLGkpO2U9YS5kYXlNb250aCtcIlxcblwiK2EueWVhcn1yZXR1cm4gRShlLHQsbixpKX07dmFyIEw9MypoO3IuaW5jcmVtZW50TW9udGg9ZnVuY3Rpb24odCxlLHIpe3I9XyhyKSYmcjt2YXIgbj1sKHQsaCk7aWYodD1NYXRoLnJvdW5kKHQtbikscil0cnl7dmFyIGk9TWF0aC5yb3VuZCh0L2gpK2csYT12LmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiZ2V0Q2FsXCIpKHIpLG89YS5mcm9tSkQoaSk7cmV0dXJuIGUlMTI/YS5hZGQobyxlLFwibVwiKTphLmFkZChvLGUvMTIsXCJ5XCIpLChvLnRvSkQoKS1nKSpoK259Y2F0Y2goZSl7cy5lcnJvcihcImludmFsaWQgbXMgXCIrdCtcIiBpbiBjYWxlbmRhciBcIityKX12YXIgYz1uZXcgRGF0ZSh0K0wpO3JldHVybiBjLnNldFVUQ01vbnRoKGMuZ2V0VVRDTW9udGgoKStlKStuLUx9LHIuZmluZEV4YWN0RGF0ZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpPTAsYT0wLHM9MCxsPTAsYz1fKGUpJiZ2LmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiZ2V0Q2FsXCIpKGUpLHU9MDt1PHQubGVuZ3RoO3UrKylpZihuPXRbdV0sbyhuKSl7aWYoIShuJWgpKWlmKGMpdHJ5ezE9PT0ocj1jLmZyb21KRChuL2grZykpLmRheSgpPzE9PT1yLm1vbnRoKCk/aSsrOmErKzpzKyt9Y2F0Y2godCl7fWVsc2UgMT09PShyPW5ldyBEYXRlKG4pKS5nZXRVVENEYXRlKCk/MD09PXIuZ2V0VVRDTW9udGgoKT9pKys6YSsrOnMrK31lbHNlIGwrKztzKz1hKz1pO3ZhciBmPXQubGVuZ3RoLWw7cmV0dXJue2V4YWN0WWVhcnM6aS9mLGV4YWN0TW9udGhzOmEvZixleGFjdERheXM6cy9mfX19LHtcIi4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi9yZWdpc3RyeVwiOjgyOSxcIi4vbG9nZ2Vyc1wiOjcwNSxcIi4vbW9kXCI6NzA4LGQzOjE1NSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sNjkwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImV2ZW50c1wiKS5FdmVudEVtaXR0ZXIsaT17aW5pdDpmdW5jdGlvbih0KXtpZih0Ll9ldiBpbnN0YW5jZW9mIG4pcmV0dXJuIHQ7dmFyIGU9bmV3IG4scj1uZXcgbjtyZXR1cm4gdC5fZXY9ZSx0Ll9pbnRlcm5hbEV2PXIsdC5vbj1lLm9uLmJpbmQoZSksdC5vbmNlPWUub25jZS5iaW5kKGUpLHQucmVtb3ZlTGlzdGVuZXI9ZS5yZW1vdmVMaXN0ZW5lci5iaW5kKGUpLHQucmVtb3ZlQWxsTGlzdGVuZXJzPWUucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQoZSksdC5faW50ZXJuYWxPbj1yLm9uLmJpbmQociksdC5faW50ZXJuYWxPbmNlPXIub25jZS5iaW5kKHIpLHQuX3JlbW92ZUludGVybmFsTGlzdGVuZXI9ci5yZW1vdmVMaXN0ZW5lci5iaW5kKHIpLHQuX3JlbW92ZUFsbEludGVybmFsTGlzdGVuZXJzPXIucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQociksdC5lbWl0PWZ1bmN0aW9uKG4saSl7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGpRdWVyeSYmalF1ZXJ5KHQpLnRyaWdnZXIobixpKSxlLmVtaXQobixpKSxyLmVtaXQobixpKX0sdH0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGpRdWVyeSYmKG49alF1ZXJ5KHQpLnRyaWdnZXJIYW5kbGVyKGUscikpO3ZhciBhPXQuX2V2O2lmKCFhKXJldHVybiBuO3ZhciBvLHM9YS5fZXZlbnRzW2VdO2lmKCFzKXJldHVybiBuO2Z1bmN0aW9uIGwodCl7cmV0dXJuIHQubGlzdGVuZXI/KGEucmVtb3ZlTGlzdGVuZXIoZSx0Lmxpc3RlbmVyKSx0LmZpcmVkP3ZvaWQgMDoodC5maXJlZD0hMCx0Lmxpc3RlbmVyLmFwcGx5KGEsW3JdKSkpOnQuYXBwbHkoYSxbcl0pfWZvcihzPUFycmF5LmlzQXJyYXkocyk/czpbc10sbz0wO288cy5sZW5ndGgtMTtvKyspbChzW29dKTtyZXR1cm4gaT1sKHNbb10pLHZvaWQgMCE9PW4/bjppfSxwdXJnZTpmdW5jdGlvbih0KXtyZXR1cm4gZGVsZXRlIHQuX2V2LGRlbGV0ZSB0Lm9uLGRlbGV0ZSB0Lm9uY2UsZGVsZXRlIHQucmVtb3ZlTGlzdGVuZXIsZGVsZXRlIHQucmVtb3ZlQWxsTGlzdGVuZXJzLGRlbGV0ZSB0LmVtaXQsZGVsZXRlIHQuX2V2LGRlbGV0ZSB0Ll9pbnRlcm5hbEV2LGRlbGV0ZSB0Ll9pbnRlcm5hbE9uLGRlbGV0ZSB0Ll9pbnRlcm5hbE9uY2UsZGVsZXRlIHQuX3JlbW92ZUludGVybmFsTGlzdGVuZXIsZGVsZXRlIHQuX3JlbW92ZUFsbEludGVybmFsTGlzdGVuZXJzLHR9fTtlLmV4cG9ydHM9aX0se2V2ZW50czo5NX1dLDY5MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2lzX3BsYWluX29iamVjdC5qc1wiKSxpPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gYSh0LGUscixvKXt2YXIgcyxsLGMsdSxoLGYscD10WzBdLGQ9dC5sZW5ndGg7aWYoMj09PWQmJmkocCkmJmkodFsxXSkmJjA9PT1wLmxlbmd0aCl7aWYoZnVuY3Rpb24odCxlKXt2YXIgcixuO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe2lmKG51bGwhPT0obj10W3JdKSYmXCJvYmplY3RcIj09dHlwZW9mIG4pcmV0dXJuITE7dm9pZCAwIT09biYmKGVbcl09bil9cmV0dXJuITB9KHRbMV0scCkpcmV0dXJuIHA7cC5zcGxpY2UoMCxwLmxlbmd0aCl9Zm9yKHZhciBnPTE7ZzxkO2crKylmb3IobCBpbiBzPXRbZ10pYz1wW2xdLHU9c1tsXSxvJiZpKHUpP3BbbF09dTplJiZ1JiYobih1KXx8KGg9aSh1KSkpPyhoPyhoPSExLGY9YyYmaShjKT9jOltdKTpmPWMmJm4oYyk/Yzp7fSxwW2xdPWEoW2YsdV0sZSxyLG8pKTooXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHV8fHIpJiYocFtsXT11KTtyZXR1cm4gcH1yLmV4dGVuZEZsYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gYShhcmd1bWVudHMsITEsITEsITEpfSxyLmV4dGVuZERlZXA9ZnVuY3Rpb24oKXtyZXR1cm4gYShhcmd1bWVudHMsITAsITEsITEpfSxyLmV4dGVuZERlZXBBbGw9ZnVuY3Rpb24oKXtyZXR1cm4gYShhcmd1bWVudHMsITAsITAsITEpfSxyLmV4dGVuZERlZXBOb0FycmF5cz1mdW5jdGlvbigpe3JldHVybiBhKGFyZ3VtZW50cywhMCwhMSwhMCl9fSx7XCIuL2lzX3BsYWluX29iamVjdC5qc1wiOjcwMn1dLDY5MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9e30scj1bXSxuPTAsaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT10W2ldOzEhPT1lW2FdJiYoZVthXT0xLHJbbisrXT1hKX1yZXR1cm4gcn19LHt9XSw2OTM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe3JldHVybiEwPT09dC52aXNpYmxlfWZ1bmN0aW9uIGkodCl7cmV0dXJuITA9PT10WzBdLnRyYWNlLnZpc2libGV9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPShlPXQsQXJyYXkuaXNBcnJheShlKSYmQXJyYXkuaXNBcnJheShlWzBdKSYmZVswXVswXSYmZVswXVswXS50cmFjZT9pOm4pLGE9W10sbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dO3IocykmJmEucHVzaChzKX1yZXR1cm4gYX19LHt9XSw2OTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiY291bnRyeS1yZWdleFwiKSxpPXQoXCIuLi9saWJcIiksYT1PYmplY3Qua2V5cyhuKSxvPXtcIklTTy0zXCI6aS5pZGVudGl0eSxcIlVTQS1zdGF0ZXNcIjppLmlkZW50aXR5LFwiY291bnRyeSBuYW1lc1wiOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgcj1hW2VdLG89bmV3IFJlZ0V4cChuW3JdKTtpZihvLnRlc3QodC50cmltKCkudG9Mb3dlckNhc2UoKSkpcmV0dXJuIHJ9cmV0dXJuIGkubG9nKFwiVW5yZWNvZ25pemVkIGNvdW50cnkgbmFtZTogXCIrdCtcIi5cIiksITF9fTtyLmxvY2F0aW9uVG9GZWF0dXJlPWZ1bmN0aW9uKHQsZSxyKXtpZighZXx8XCJzdHJpbmdcIiE9dHlwZW9mIGUpcmV0dXJuITE7dmFyIG49ZnVuY3Rpb24odCxlKXtyZXR1cm4oMCxvW3RdKShlKX0odCxlKTtpZihuKXtmb3IodmFyIGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIHM9clthXTtpZihzLmlkPT09bilyZXR1cm4gc31pLmxvZyhbXCJMb2NhdGlvbiB3aXRoIGlkXCIsbixcImRvZXMgbm90IGhhdmUgYSBtYXRjaGluZyB0b3BvanNvbiBmZWF0dXJlIGF0IHRoaXMgcmVzb2x1dGlvbi5cIl0uam9pbihcIiBcIikpfXJldHVybiExfX0se1wiLi4vbGliXCI6NzAxLFwiY291bnRyeS1yZWdleFwiOjEyNX1dLDY5NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTTtyLmNhbGNUcmFjZVRvTGluZUNvb3Jkcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dFswXS50cmFjZS5jb25uZWN0Z2FwcyxyPVtdLGk9W10sYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz10W2FdLmxvbmxhdDtvWzBdIT09bj9pLnB1c2gobyk6IWUmJmkubGVuZ3RoPjAmJihyLnB1c2goaSksaT1bXSl9cmV0dXJuIGkubGVuZ3RoPjAmJnIucHVzaChpKSxyfSxyLm1ha2VMaW5lPWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dC5sZW5ndGg/e3R5cGU6XCJMaW5lU3RyaW5nXCIsY29vcmRpbmF0ZXM6dFswXX06e3R5cGU6XCJNdWx0aUxpbmVTdHJpbmdcIixjb29yZGluYXRlczp0fX0sci5tYWtlUG9seWdvbj1mdW5jdGlvbih0KXtpZigxPT09dC5sZW5ndGgpcmV0dXJue3R5cGU6XCJQb2x5Z29uXCIsY29vcmRpbmF0ZXM6dH07Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wO3I8dC5sZW5ndGg7cisrKWVbcl09W3Rbcl1dO3JldHVybnt0eXBlOlwiTXVsdGlQb2x5Z29uXCIsY29vcmRpbmF0ZXM6ZX19LHIubWFrZUJsYW5rPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6XCJQb2ludFwiLGNvb3JkaW5hdGVzOltdfX19LHtcIi4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2Nzh9XSw2OTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbixpLGEsbz10KFwiLi9tb2RcIikubW9kO2Z1bmN0aW9uIHModCxlLHIsbixpLGEsbyxzKXt2YXIgbD1yLXQsYz1pLXQsdT1vLWksaD1uLWUsZj1hLWUscD1zLWEsZD1sKnAtdSpoO2lmKDA9PT1kKXJldHVybiBudWxsO3ZhciBnPShjKnAtdSpmKS9kLHY9KGMqaC1sKmYpL2Q7cmV0dXJuIHY8MHx8dj4xfHxnPDB8fGc+MT9udWxsOnt4OnQrbCpnLHk6ZStoKmd9fWZ1bmN0aW9uIGwodCxlLHIsbixpKXt2YXIgYT1uKnQraSplO2lmKGE8MClyZXR1cm4gbipuK2kqaTtpZihhPnIpe3ZhciBvPW4tdCxzPWktZTtyZXR1cm4gbypvK3Mqc312YXIgbD1uKmUtaSp0O3JldHVybiBsKmwvcn1yLnNlZ21lbnRzSW50ZXJzZWN0PXMsci5zZWdtZW50RGlzdGFuY2U9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxjKXtpZihzKHQsZSxyLG4saSxhLG8sYykpcmV0dXJuIDA7dmFyIHU9ci10LGg9bi1lLGY9by1pLHA9Yy1hLGQ9dSp1K2gqaCxnPWYqZitwKnAsdj1NYXRoLm1pbihsKHUsaCxkLGktdCxhLWUpLGwodSxoLGQsby10LGMtZSksbChmLHAsZyx0LWksZS1hKSxsKGYscCxnLHItaSxuLWEpKTtyZXR1cm4gTWF0aC5zcXJ0KHYpfSxyLmdldFRleHRMb2NhdGlvbj1mdW5jdGlvbih0LGUscixzKXtpZih0PT09aSYmcz09PWF8fChuPXt9LGk9dCxhPXMpLG5bcl0pcmV0dXJuIG5bcl07dmFyIGw9dC5nZXRQb2ludEF0TGVuZ3RoKG8oci1zLzIsZSkpLGM9dC5nZXRQb2ludEF0TGVuZ3RoKG8ocitzLzIsZSkpLHU9TWF0aC5hdGFuKChjLnktbC55KS8oYy54LWwueCkpLGg9dC5nZXRQb2ludEF0TGVuZ3RoKG8ocixlKSksZj17eDooNCpoLngrbC54K2MueCkvNix5Oig0KmgueStsLnkrYy55KS82LHRoZXRhOnV9O3JldHVybiBuW3JdPWYsZn0sci5jbGVhckxvY2F0aW9uQ2FjaGU9ZnVuY3Rpb24oKXtpPW51bGx9LHIuZ2V0VmlzaWJsZVNlZ21lbnQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1lLmxlZnQsbz1lLnJpZ2h0LHM9ZS50b3AsbD1lLmJvdHRvbSxjPTAsdT10LmdldFRvdGFsTGVuZ3RoKCksaD11O2Z1bmN0aW9uIGYoZSl7dmFyIHI9dC5nZXRQb2ludEF0TGVuZ3RoKGUpOzA9PT1lP249cjplPT09dSYmKGk9cik7dmFyIGM9ci54PGE/YS1yLng6ci54Pm8/ci54LW86MCxoPXIueTxzP3Mtci55OnIueT5sP3IueS1sOjA7cmV0dXJuIE1hdGguc3FydChjKmMraCpoKX1mb3IodmFyIHA9ZihjKTtwOyl7aWYoKGMrPXArcik+aClyZXR1cm47cD1mKGMpfWZvcihwPWYoaCk7cDspe2lmKGM+KGgtPXArcikpcmV0dXJuO3A9ZihoKX1yZXR1cm57bWluOmMsbWF4OmgsbGVuOmgtYyx0b3RhbDp1LGlzQ2xvc2VkOjA9PT1jJiZoPT09dSYmTWF0aC5hYnMobi54LWkueCk8LjEmJk1hdGguYWJzKG4ueS1pLnkpPC4xfX0sci5maW5kUG9pbnRPblBhdGg9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpLGEsbyxzPShuPW58fHt9KS5wYXRoTGVuZ3RofHx0LmdldFRvdGFsTGVuZ3RoKCksbD1uLnRvbGVyYW5jZXx8LjAwMSxjPW4uaXRlcmF0aW9uTGltaXR8fDMwLHU9dC5nZXRQb2ludEF0TGVuZ3RoKDApW3JdPnQuZ2V0UG9pbnRBdExlbmd0aChzKVtyXT8tMToxLGg9MCxmPTAscD1zO2g8Yzspe2lmKGk9KGYrcCkvMixvPShhPXQuZ2V0UG9pbnRBdExlbmd0aChpKSlbcl0tZSxNYXRoLmFicyhvKTxsKXJldHVybiBhO3Uqbz4wP3A9aTpmPWksaCsrfXJldHVybiBhfX0se1wiLi9tb2RcIjo3MDh9XSw2OTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpe2lmKG51bGw9PT0oZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KSkpdGhyb3cgbmV3IEVycm9yKFwiTm8gRE9NIGVsZW1lbnQgd2l0aCBpZCAnXCIrdCtcIicgZXhpc3RzIG9uIHRoZSBwYWdlLlwiKTtyZXR1cm4gZX1pZihudWxsPT10KXRocm93IG5ldyBFcnJvcihcIkRPTSBlbGVtZW50IHByb3ZpZGVkIGlzIG51bGwgb3IgdW5kZWZpbmVkXCIpO3JldHVybiB0fX0se31dLDY5ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCJ0aW55Y29sb3IyXCIpLGE9dChcImNvbG9yLW5vcm1hbGl6ZVwiKSxvPXQoXCIuLi9jb21wb25lbnRzL2NvbG9yc2NhbGVcIikscz10KFwiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzXCIpLmRlZmF1bHRMaW5lLGw9dChcIi4vYXJyYXlcIikuaXNBcnJheU9yVHlwZWRBcnJheSxjPWEocyksdT0xO2Z1bmN0aW9uIGgodCxlKXt2YXIgcj10O3JldHVybiByWzNdKj1lLHJ9ZnVuY3Rpb24gZih0KXtpZihuKHQpKXJldHVybiBjO3ZhciBlPWEodCk7cmV0dXJuIGUubGVuZ3RoP2U6Y31mdW5jdGlvbiBwKHQpe3JldHVybiBuKHQpP3Q6dX1lLmV4cG9ydHM9e2Zvcm1hdENvbG9yOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLHMsZCxnLHY9dC5jb2xvcixtPWwodikseT1sKGUpLHg9W107aWYobj12b2lkIDAhPT10LmNvbG9yc2NhbGU/by5tYWtlQ29sb3JTY2FsZUZ1bmMoby5leHRyYWN0U2NhbGUodCx7Y0xldHRlcjpcImNcIn0pKTpmLGk9bT9mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT10W2VdP2M6YShuKHRbZV0pKX06ZixzPXk/ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09dFtlXT91OnAodFtlXSl9OnAsbXx8eSlmb3IodmFyIGI9MDtiPHI7YisrKWQ9aSh2LGIpLGc9cyhlLGIpLHhbYl09aChkLGcpO2Vsc2UgeD1oKGEodiksZSk7cmV0dXJuIHh9LHBhcnNlQ29sb3JTY2FsZTpmdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0xKSwodC5yZXZlcnNlc2NhbGU/by5mbGlwU2NhbGUodC5jb2xvcnNjYWxlKTp0LmNvbG9yc2NhbGUpLm1hcChmdW5jdGlvbih0KXt2YXIgcj10WzBdLG49aSh0WzFdKS50b1JnYigpO3JldHVybntpbmRleDpyLHJnYjpbbi5yLG4uZyxuLmIsZV19fSl9fX0se1wiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzXCI6NTc3LFwiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlXCI6NTkwLFwiLi9hcnJheVwiOjY4NCxcImNvbG9yLW5vcm1hbGl6ZVwiOjExMSxcImZhc3QtaXNudW1lcmljXCI6MjIyLHRpbnljb2xvcjI6NTIyfV0sNjk5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vaWRlbnRpdHlcIik7ZnVuY3Rpb24gaSh0KXtyZXR1cm5bdF19ZS5leHBvcnRzPXtrZXlGdW46ZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5fSxyZXBlYXQ6aSxkZXNjZW5kOm4sd3JhcDppLHVud3JhcDpmdW5jdGlvbih0KXtyZXR1cm4gdFswXX19fSx7XCIuL2lkZW50aXR5XCI6NzAwfV0sNzAwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0fX0se31dLDcwMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxhPXQoXCIuLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLG89YS5GUF9TQUZFLHM9YS5CQUROVU0sbD1lLmV4cG9ydHM9e307bC5uZXN0ZWRQcm9wZXJ0eT10KFwiLi9uZXN0ZWRfcHJvcGVydHlcIiksbC5rZXllZENvbnRhaW5lcj10KFwiLi9rZXllZF9jb250YWluZXJcIiksbC5yZWxhdGl2ZUF0dHI9dChcIi4vcmVsYXRpdmVfYXR0clwiKSxsLmlzUGxhaW5PYmplY3Q9dChcIi4vaXNfcGxhaW5fb2JqZWN0XCIpLGwudG9Mb2dSYW5nZT10KFwiLi90b19sb2dfcmFuZ2VcIiksbC5yZWxpbmtQcml2YXRlS2V5cz10KFwiLi9yZWxpbmtfcHJpdmF0ZVwiKTt2YXIgYz10KFwiLi9hcnJheVwiKTtsLmlzVHlwZWRBcnJheT1jLmlzVHlwZWRBcnJheSxsLmlzQXJyYXlPclR5cGVkQXJyYXk9Yy5pc0FycmF5T3JUeXBlZEFycmF5LGwuaXNBcnJheTFEPWMuaXNBcnJheTFELGwuZW5zdXJlQXJyYXk9Yy5lbnN1cmVBcnJheSxsLmNvbmNhdD1jLmNvbmNhdCxsLm1heFJvd0xlbmd0aD1jLm1heFJvd0xlbmd0aCxsLm1pblJvd0xlbmd0aD1jLm1pblJvd0xlbmd0aDt2YXIgdT10KFwiLi9tb2RcIik7bC5tb2Q9dS5tb2QsbC5tb2RIYWxmPXUubW9kSGFsZjt2YXIgaD10KFwiLi9jb2VyY2VcIik7bC52YWxPYmplY3RNZXRhPWgudmFsT2JqZWN0TWV0YSxsLmNvZXJjZT1oLmNvZXJjZSxsLmNvZXJjZTI9aC5jb2VyY2UyLGwuY29lcmNlRm9udD1oLmNvZXJjZUZvbnQsbC5jb2VyY2VIb3ZlcmluZm89aC5jb2VyY2VIb3ZlcmluZm8sbC5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5PWguY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eSxsLnZhbGlkYXRlPWgudmFsaWRhdGU7dmFyIGY9dChcIi4vZGF0ZXNcIik7bC5kYXRlVGltZTJtcz1mLmRhdGVUaW1lMm1zLGwuaXNEYXRlVGltZT1mLmlzRGF0ZVRpbWUsbC5tczJEYXRlVGltZT1mLm1zMkRhdGVUaW1lLGwubXMyRGF0ZVRpbWVMb2NhbD1mLm1zMkRhdGVUaW1lTG9jYWwsbC5jbGVhbkRhdGU9Zi5jbGVhbkRhdGUsbC5pc0pTRGF0ZT1mLmlzSlNEYXRlLGwuZm9ybWF0RGF0ZT1mLmZvcm1hdERhdGUsbC5pbmNyZW1lbnRNb250aD1mLmluY3JlbWVudE1vbnRoLGwuZGF0ZVRpY2swPWYuZGF0ZVRpY2swLGwuZGZsdFJhbmdlPWYuZGZsdFJhbmdlLGwuZmluZEV4YWN0RGF0ZXM9Zi5maW5kRXhhY3REYXRlcyxsLk1JTl9NUz1mLk1JTl9NUyxsLk1BWF9NUz1mLk1BWF9NUzt2YXIgcD10KFwiLi9zZWFyY2hcIik7bC5maW5kQmluPXAuZmluZEJpbixsLnNvcnRlckFzYz1wLnNvcnRlckFzYyxsLnNvcnRlckRlcz1wLnNvcnRlckRlcyxsLmRpc3RpbmN0VmFscz1wLmRpc3RpbmN0VmFscyxsLnJvdW5kVXA9cC5yb3VuZFVwLGwuc29ydD1wLnNvcnQsbC5maW5kSW5kZXhPZk1pbj1wLmZpbmRJbmRleE9mTWluO3ZhciBkPXQoXCIuL3N0YXRzXCIpO2wuYWdnTnVtcz1kLmFnZ051bXMsbC5sZW49ZC5sZW4sbC5tZWFuPWQubWVhbixsLm1pZFJhbmdlPWQubWlkUmFuZ2UsbC52YXJpYW5jZT1kLnZhcmlhbmNlLGwuc3RkZXY9ZC5zdGRldixsLmludGVycD1kLmludGVycDt2YXIgZz10KFwiLi9tYXRyaXhcIik7bC5pbml0MmRBcnJheT1nLmluaXQyZEFycmF5LGwudHJhbnNwb3NlUmFnZ2VkPWcudHJhbnNwb3NlUmFnZ2VkLGwuZG90PWcuZG90LGwudHJhbnNsYXRpb25NYXRyaXg9Zy50cmFuc2xhdGlvbk1hdHJpeCxsLnJvdGF0aW9uTWF0cml4PWcucm90YXRpb25NYXRyaXgsbC5yb3RhdGlvblhZTWF0cml4PWcucm90YXRpb25YWU1hdHJpeCxsLmFwcGx5MkRUcmFuc2Zvcm09Zy5hcHBseTJEVHJhbnNmb3JtLGwuYXBwbHkyRFRyYW5zZm9ybTI9Zy5hcHBseTJEVHJhbnNmb3JtMjt2YXIgdj10KFwiLi9hbmdsZXNcIik7bC5kZWcycmFkPXYuZGVnMnJhZCxsLnJhZDJkZWc9di5yYWQyZGVnLGwuYW5nbGVEZWx0YT12LmFuZ2xlRGVsdGEsbC5hbmdsZURpc3Q9di5hbmdsZURpc3QsbC5pc0Z1bGxDaXJjbGU9di5pc0Z1bGxDaXJjbGUsbC5pc0FuZ2xlSW5zaWRlU2VjdG9yPXYuaXNBbmdsZUluc2lkZVNlY3RvcixsLmlzUHRJbnNpZGVTZWN0b3I9di5pc1B0SW5zaWRlU2VjdG9yLGwucGF0aEFyYz12LnBhdGhBcmMsbC5wYXRoU2VjdG9yPXYucGF0aFNlY3RvcixsLnBhdGhBbm51bHVzPXYucGF0aEFubnVsdXM7dmFyIG09dChcIi4vYW5jaG9yX3V0aWxzXCIpO2wuaXNMZWZ0QW5jaG9yPW0uaXNMZWZ0QW5jaG9yLGwuaXNDZW50ZXJBbmNob3I9bS5pc0NlbnRlckFuY2hvcixsLmlzUmlnaHRBbmNob3I9bS5pc1JpZ2h0QW5jaG9yLGwuaXNUb3BBbmNob3I9bS5pc1RvcEFuY2hvcixsLmlzTWlkZGxlQW5jaG9yPW0uaXNNaWRkbGVBbmNob3IsbC5pc0JvdHRvbUFuY2hvcj1tLmlzQm90dG9tQW5jaG9yO3ZhciB5PXQoXCIuL2dlb21ldHJ5MmRcIik7bC5zZWdtZW50c0ludGVyc2VjdD15LnNlZ21lbnRzSW50ZXJzZWN0LGwuc2VnbWVudERpc3RhbmNlPXkuc2VnbWVudERpc3RhbmNlLGwuZ2V0VGV4dExvY2F0aW9uPXkuZ2V0VGV4dExvY2F0aW9uLGwuY2xlYXJMb2NhdGlvbkNhY2hlPXkuY2xlYXJMb2NhdGlvbkNhY2hlLGwuZ2V0VmlzaWJsZVNlZ21lbnQ9eS5nZXRWaXNpYmxlU2VnbWVudCxsLmZpbmRQb2ludE9uUGF0aD15LmZpbmRQb2ludE9uUGF0aDt2YXIgeD10KFwiLi9leHRlbmRcIik7bC5leHRlbmRGbGF0PXguZXh0ZW5kRmxhdCxsLmV4dGVuZERlZXA9eC5leHRlbmREZWVwLGwuZXh0ZW5kRGVlcEFsbD14LmV4dGVuZERlZXBBbGwsbC5leHRlbmREZWVwTm9BcnJheXM9eC5leHRlbmREZWVwTm9BcnJheXM7dmFyIGI9dChcIi4vbG9nZ2Vyc1wiKTtsLmxvZz1iLmxvZyxsLndhcm49Yi53YXJuLGwuZXJyb3I9Yi5lcnJvcjt2YXIgXz10KFwiLi9yZWdleFwiKTtsLmNvdW50ZXJSZWdleD1fLmNvdW50ZXI7dmFyIHc9dChcIi4vdGhyb3R0bGVcIik7ZnVuY3Rpb24gayh0KXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdClmb3IodmFyIG49dFtyXSxpPTA7aTxuLmxlbmd0aDtpKyspZVtuW2ldXT0rcjtyZXR1cm4gZX1sLnRocm90dGxlPXcudGhyb3R0bGUsbC50aHJvdHRsZURvbmU9dy5kb25lLGwuY2xlYXJUaHJvdHRsZT13LmNsZWFyLGwuZ2V0R3JhcGhEaXY9dChcIi4vZ2V0X2dyYXBoX2RpdlwiKSxsLmNsZWFyUmVzcG9uc2l2ZT10KFwiLi9jbGVhcl9yZXNwb25zaXZlXCIpLGwubWFrZVRyYWNlR3JvdXBzPXQoXCIuL21ha2VfdHJhY2VfZ3JvdXBzXCIpLGwuXz10KFwiLi9sb2NhbGl6ZVwiKSxsLm5vdGlmaWVyPXQoXCIuL25vdGlmaWVyXCIpLGwuZmlsdGVyVW5pcXVlPXQoXCIuL2ZpbHRlcl91bmlxdWVcIiksbC5maWx0ZXJWaXNpYmxlPXQoXCIuL2ZpbHRlcl92aXNpYmxlXCIpLGwucHVzaFVuaXF1ZT10KFwiLi9wdXNoX3VuaXF1ZVwiKSxsLmNsZWFuTnVtYmVyPXQoXCIuL2NsZWFuX251bWJlclwiKSxsLmVuc3VyZU51bWJlcj1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KT8odD1OdW1iZXIodCkpPC1vfHx0Pm8/czppKHQpP051bWJlcih0KTpzOnN9LGwuaXNJbmRleD1mdW5jdGlvbih0LGUpe3JldHVybiEodm9pZCAwIT09ZSYmdD49ZSkmJihpKHQpJiZ0Pj0wJiZ0JTE9PTApfSxsLm5vb3A9dChcIi4vbm9vcFwiKSxsLmlkZW50aXR5PXQoXCIuL2lkZW50aXR5XCIpLGwucmVwZWF0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7bjxlO24rKylyW25dPXQ7cmV0dXJuIHJ9LGwuc3dhcEF0dHJzPWZ1bmN0aW9uKHQsZSxyLG4pe3J8fChyPVwieFwiKSxufHwobj1cInlcIik7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPWVbaV0sbz1sLm5lc3RlZFByb3BlcnR5KHQsYS5yZXBsYWNlKFwiP1wiLHIpKSxzPWwubmVzdGVkUHJvcGVydHkodCxhLnJlcGxhY2UoXCI/XCIsbikpLGM9by5nZXQoKTtvLnNldChzLmdldCgpKSxzLnNldChjKX19LGwucmFpc2VUb1RvcD1mdW5jdGlvbih0KXt0LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodCl9LGwuY2FuY2VsVHJhbnNpdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdC50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCl9LGwuY29uc3RyYWluPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZT5yP01hdGgubWF4KHIsTWF0aC5taW4oZSx0KSk6TWF0aC5tYXgoZSxNYXRoLm1pbihyLHQpKX0sbC5iQm94SW50ZXJzZWN0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gcj1yfHwwLHQubGVmdDw9ZS5yaWdodCtyJiZlLmxlZnQ8PXQucmlnaHQrciYmdC50b3A8PWUuYm90dG9tK3ImJmUudG9wPD10LmJvdHRvbStyfSxsLnNpbXBsZU1hcD1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9dC5sZW5ndGgsYT1uZXcgQXJyYXkoaSksbz0wO288aTtvKyspYVtvXT1lKHRbb10scixuKTtyZXR1cm4gYX0sbC5yYW5kc3RyPWZ1bmN0aW9uIHQoZSxyLG4saSl7aWYobnx8KG49MTYpLHZvaWQgMD09PXImJihyPTI0KSxyPD0wKXJldHVyblwiMFwiO3ZhciBhLG8scz1NYXRoLmxvZyhNYXRoLnBvdygyLHIpKS9NYXRoLmxvZyhuKSxjPVwiXCI7Zm9yKGE9MjtzPT09MS8wO2EqPTIpcz1NYXRoLmxvZyhNYXRoLnBvdygyLHIvYSkpL01hdGgubG9nKG4pKmE7dmFyIHU9cy1NYXRoLmZsb29yKHMpO2ZvcihhPTA7YTxNYXRoLmZsb29yKHMpO2ErKyljPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpuKS50b1N0cmluZyhuKStjO3UmJihvPU1hdGgucG93KG4sdSksYz1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbykudG9TdHJpbmcobikrYyk7dmFyIGg9cGFyc2VJbnQoYyxuKTtyZXR1cm4gZSYmZVtjXXx8aCE9PTEvMCYmaD49TWF0aC5wb3coMixyKT9pPjEwPyhsLndhcm4oXCJyYW5kc3RyIGZhaWxlZCB1bmlxdWVuZXNzXCIpLGMpOnQoZSxyLG4sKGl8fDApKzEpOmN9LGwuT3B0aW9uQ29udHJvbD1mdW5jdGlvbih0LGUpe3R8fCh0PXt9KSxlfHwoZT1cIm9wdFwiKTt2YXIgcj17b3B0aW9uTGlzdDpbXSxfbmV3b3B0aW9uOmZ1bmN0aW9uKG4pe25bZV09dCxyW24ubmFtZV09bixyLm9wdGlvbkxpc3QucHVzaChuKX19O3JldHVybiByW1wiX1wiK2VdPXQscn0sbC5zbW9vdGg9ZnVuY3Rpb24odCxlKXtpZigoZT1NYXRoLnJvdW5kKGUpfHwwKTwyKXJldHVybiB0O3ZhciByLG4saSxhLG89dC5sZW5ndGgscz0yKm8sbD0yKmUtMSxjPW5ldyBBcnJheShsKSx1PW5ldyBBcnJheShvKTtmb3Iocj0wO3I8bDtyKyspY1tyXT0oMS1NYXRoLmNvcyhNYXRoLlBJKihyKzEpL2UpKS8oMiplKTtmb3Iocj0wO3I8bztyKyspe2ZvcihhPTAsbj0wO248bDtuKyspKGk9cituKzEtZSk8LW8/aS09cypNYXRoLnJvdW5kKGkvcyk6aT49cyYmKGktPXMqTWF0aC5mbG9vcihpL3MpKSxpPDA/aT0tMS1pOmk+PW8mJihpPXMtMS1pKSxhKz10W2ldKmNbbl07dVtyXT1hfXJldHVybiB1fSxsLnN5bmNPckFzeW5jPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjtmdW5jdGlvbiBpKCl7cmV0dXJuIGwuc3luY09yQXN5bmModCxlLHIpfWZvcig7dC5sZW5ndGg7KWlmKChuPSgwLHQuc3BsaWNlKDAsMSlbMF0pKGUpKSYmbi50aGVuKXJldHVybiBuLnRoZW4oaSkudGhlbih2b2lkIDAsbC5wcm9taXNlRXJyb3IpO3JldHVybiByJiZyKGUpfSxsLnN0cmlwVHJhaWxpbmdTbGFzaD1mdW5jdGlvbih0KXtyZXR1cm5cIi9cIj09PXQuc3Vic3RyKC0xKT90LnN1YnN0cigwLHQubGVuZ3RoLTEpOnR9LGwubm9uZU9yQWxsPWZ1bmN0aW9uKHQsZSxyKXtpZih0KXt2YXIgbixpPSExLGE9ITA7Zm9yKG49MDtuPHIubGVuZ3RoO24rKyludWxsIT10W3Jbbl1dP2k9ITA6YT0hMTtpZihpJiYhYSlmb3Iobj0wO248ci5sZW5ndGg7bisrKXRbcltuXV09ZVtyW25dXX19LGwubWVyZ2VBcnJheT1mdW5jdGlvbih0LGUscil7aWYobC5pc0FycmF5T3JUeXBlZEFycmF5KHQpKWZvcih2YXIgbj1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCksaT0wO2k8bjtpKyspZVtpXVtyXT10W2ldfSxsLmZpbGxBcnJheT1mdW5jdGlvbih0LGUscixuKXtpZihuPW58fGwuaWRlbnRpdHksbC5pc0FycmF5T3JUeXBlZEFycmF5KHQpKWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKWVbaV1bcl09bih0W2ldKX0sbC5jYXN0T3B0aW9uPWZ1bmN0aW9uKHQsZSxyLG4pe249bnx8bC5pZGVudGl0eTt2YXIgaT1sLm5lc3RlZFByb3BlcnR5KHQscikuZ2V0KCk7cmV0dXJuIGwuaXNBcnJheU9yVHlwZWRBcnJheShpKT9BcnJheS5pc0FycmF5KGUpJiZsLmlzQXJyYXlPclR5cGVkQXJyYXkoaVtlWzBdXSk/bihpW2VbMF1dW2VbMV1dKTpuKGlbZV0pOml9LGwuZXh0cmFjdE9wdGlvbj1mdW5jdGlvbih0LGUscixuKXtpZihyIGluIHQpcmV0dXJuIHRbcl07dmFyIGk9bC5uZXN0ZWRQcm9wZXJ0eShlLG4pLmdldCgpO3JldHVybiBBcnJheS5pc0FycmF5KGkpP3ZvaWQgMDppfSxsLnRhZ1NlbGVjdGVkPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9ZS5zZWxlY3RlZHBvaW50cyxvPWUuX2luZGV4VG9Qb2ludHM7byYmKG49ayhvKSk7Zm9yKHZhciBzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBjPWFbc107aWYobC5pc0luZGV4KGMpKXt2YXIgdT1uP25bY106YyxoPXI/clt1XTp1O3ZvaWQgMCE9PShpPWgpJiZpPHQubGVuZ3RoJiYodFtoXS5zZWxlY3RlZD0xKX19fSxsLnNlbEluZGljZXMyc2VsUG9pbnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0ZWRwb2ludHMscj10Ll9pbmRleFRvUG9pbnRzO2lmKHIpe2Zvcih2YXIgbj1rKHIpLGk9W10sYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1lW2FdO2lmKGwuaXNJbmRleChvKSl7dmFyIHM9bltvXTtsLmlzSW5kZXgocykmJmkucHVzaChzKX19cmV0dXJuIGl9cmV0dXJuIGV9LGwuZ2V0VGFyZ2V0QXJyYXk9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnRhcmdldDtpZihcInN0cmluZ1wiPT10eXBlb2YgciYmcil7dmFyIG49bC5uZXN0ZWRQcm9wZXJ0eSh0LHIpLmdldCgpO3JldHVybiEhQXJyYXkuaXNBcnJheShuKSYmbn1yZXR1cm4hIUFycmF5LmlzQXJyYXkocikmJnJ9LGwubWluRXh0ZW5kPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307XCJvYmplY3RcIiE9dHlwZW9mIGUmJihlPXt9KTt2YXIgbixpLGEsbz1PYmplY3Qua2V5cyh0KTtmb3Iobj0wO248by5sZW5ndGg7bisrKWE9dFtpPW9bbl1dLFwiX1wiIT09aS5jaGFyQXQoMCkmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGEmJihcIm1vZHVsZVwiPT09aT9yW2ldPWE6QXJyYXkuaXNBcnJheShhKT9yW2ldPVwiY29sb3JzY2FsZVwiPT09aT9hLnNsaWNlKCk6YS5zbGljZSgwLDMpOnJbaV09YSYmXCJvYmplY3RcIj09dHlwZW9mIGE/bC5taW5FeHRlbmQodFtpXSxlW2ldKTphKTtmb3Iobz1PYmplY3Qua2V5cyhlKSxuPTA7bjxvLmxlbmd0aDtuKyspXCJvYmplY3RcIj09dHlwZW9mKGE9ZVtpPW9bbl1dKSYmaSBpbiByJiZcIm9iamVjdFwiPT10eXBlb2YgcltpXXx8KHJbaV09YSk7cmV0dXJuIHJ9LGwudGl0bGVDYXNlPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc3Vic3RyKDEpfSxsLmNvbnRhaW5zQW55PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYoLTEhPT10LmluZGV4T2YoZVtyXSkpcmV0dXJuITA7cmV0dXJuITF9LGwuaXNQbG90RGl2PWZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHQpO3JldHVybiBlLm5vZGUoKWluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJmUuc2l6ZSgpJiZlLmNsYXNzZWQoXCJqcy1wbG90bHktcGxvdFwiKX0sbC5yZW1vdmVFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXQmJnQucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHQpfSxsLmFkZFN0eWxlUnVsZT1mdW5jdGlvbih0LGUpe2wuYWRkUmVsYXRlZFN0eWxlUnVsZShcImdsb2JhbFwiLHQsZSl9LGwuYWRkUmVsYXRlZFN0eWxlUnVsZT1mdW5jdGlvbih0LGUscil7dmFyIG49XCJwbG90bHkuanMtc3R5bGUtXCIrdCxpPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG4pO2l8fCgoaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIikpLnNldEF0dHJpYnV0ZShcImlkXCIsbiksaS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChpKSk7dmFyIGE9aS5zaGVldDthLmluc2VydFJ1bGU/YS5pbnNlcnRSdWxlKGUrXCJ7XCIrcitcIn1cIiwwKTphLmFkZFJ1bGU/YS5hZGRSdWxlKGUsciwwKTpsLndhcm4oXCJhZGRTdHlsZVJ1bGUgZmFpbGVkXCIpfSxsLmRlbGV0ZVJlbGF0ZWRTdHlsZVJ1bGU9ZnVuY3Rpb24odCl7dmFyIGU9XCJwbG90bHkuanMtc3R5bGUtXCIrdCxyPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO3ImJmwucmVtb3ZlRWxlbWVudChyKX0sbC5pc0lFPWZ1bmN0aW9uKCl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYn0sbC5pc0QzU2VsZWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmNsYXNzZWR9LGwuZW5zdXJlU2luZ2xlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuc2VsZWN0KGUrKHI/XCIuXCIrcjpcIlwiKSk7aWYoaS5zaXplKCkpcmV0dXJuIGk7dmFyIGE9dC5hcHBlbmQoZSk7cmV0dXJuIHImJmEuY2xhc3NlZChyLCEwKSxuJiZhLmNhbGwobiksYX0sbC5lbnN1cmVTaW5nbGVCeUlkPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuc2VsZWN0KGUrXCIjXCIrcik7aWYoaS5zaXplKCkpcmV0dXJuIGk7dmFyIGE9dC5hcHBlbmQoZSkuYXR0cihcImlkXCIscik7cmV0dXJuIG4mJmEuY2FsbChuKSxhfSxsLm9iamVjdEZyb21QYXRoPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC5zcGxpdChcIi5cIiksaT1yPXt9LGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXSxzPW51bGwsbD1uW2FdLm1hdGNoKC8oLiopXFxbKFswLTldKylcXF0vKTtsPyhvPWxbMV0scz1sWzJdLHI9cltvXT1bXSxhPT09bi5sZW5ndGgtMT9yW3NdPWU6cltzXT17fSxyPXJbc10pOihhPT09bi5sZW5ndGgtMT9yW29dPWU6cltvXT17fSxyPXJbb10pfXJldHVybiBpfTt2YXIgQT0vXihbXlxcW1xcLl0rKVxcLiguKyk/LyxUPS9eKFteXFwuXSspXFxbKFswLTldKylcXF0oXFwuKT8oLispPy87bC5leHBhbmRPYmplY3RQYXRocz1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scztpZihcIm9iamVjdFwiPT10eXBlb2YgdCYmIUFycmF5LmlzQXJyYXkodCkpZm9yKHIgaW4gdCl0Lmhhc093blByb3BlcnR5KHIpJiYoKGU9ci5tYXRjaChBKSk/KGk9dFtyXSxuPWVbMV0sZGVsZXRlIHRbcl0sdFtuXT1sLmV4dGVuZERlZXBOb0FycmF5cyh0W25dfHx7fSxsLm9iamVjdEZyb21QYXRoKHIsbC5leHBhbmRPYmplY3RQYXRocyhpKSlbbl0pKTooZT1yLm1hdGNoKFQpKT8oaT10W3JdLG49ZVsxXSxhPXBhcnNlSW50KGVbMl0pLGRlbGV0ZSB0W3JdLHRbbl09dFtuXXx8W10sXCIuXCI9PT1lWzNdPyhzPWVbNF0sbz10W25dW2FdPXRbbl1bYV18fHt9LGwuZXh0ZW5kRGVlcE5vQXJyYXlzKG8sbC5vYmplY3RGcm9tUGF0aChzLGwuZXhwYW5kT2JqZWN0UGF0aHMoaSkpKSk6dFtuXVthXT1sLmV4cGFuZE9iamVjdFBhdGhzKGkpKTp0W3JdPWwuZXhwYW5kT2JqZWN0UGF0aHModFtyXSkpO3JldHVybiB0fSxsLm51bVNlcGFyYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZihyfHwocj0hMSksXCJzdHJpbmdcIiE9dHlwZW9mIGV8fDA9PT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJTZXBhcmF0b3Igc3RyaW5nIHJlcXVpcmVkIGZvciBmb3JtYXR0aW5nIVwiKTtcIm51bWJlclwiPT10eXBlb2YgdCYmKHQ9U3RyaW5nKHQpKTt2YXIgbj0vKFxcZCspKFxcZHszfSkvLGk9ZS5jaGFyQXQoMCksYT1lLmNoYXJBdCgxKSxvPXQuc3BsaXQoXCIuXCIpLHM9b1swXSxsPW8ubGVuZ3RoPjE/aStvWzFdOlwiXCI7aWYoYSYmKG8ubGVuZ3RoPjF8fHMubGVuZ3RoPjR8fHIpKWZvcig7bi50ZXN0KHMpOylzPXMucmVwbGFjZShuLFwiJDFcIithK1wiJDJcIik7cmV0dXJuIHMrbH0sbC5URU1QTEFURV9TVFJJTkdfUkVHRVg9LyV7KFteXFxzJXt9Ol0qKSg6W159XSopP30vZzt2YXIgTT0vXlxcdyokLztsLnRlbXBsYXRlU3RyaW5nPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307cmV0dXJuIHQucmVwbGFjZShsLlRFTVBMQVRFX1NUUklOR19SRUdFWCxmdW5jdGlvbih0LG4pe3JldHVybiBNLnRlc3Qobik/ZVtuXXx8XCJcIjoocltuXT1yW25dfHxsLm5lc3RlZFByb3BlcnR5KGUsbikuZ2V0LHJbbl0oKXx8XCJcIil9KX07dmFyIFM9L146LyxFPTA7bC5ob3ZlcnRlbXBsYXRlU3RyaW5nPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1hcmd1bWVudHMsYT17fTtyZXR1cm4gdC5yZXBsYWNlKGwuVEVNUExBVEVfU1RSSU5HX1JFR0VYLGZ1bmN0aW9uKHQsbyxzKXt2YXIgYyx1LGg7Zm9yKGg9MztoPGkubGVuZ3RoO2grKyl7aWYoKGM9aVtoXSkuaGFzT3duUHJvcGVydHkobykpe3U9Y1tvXTticmVha31pZihNLnRlc3Qobyl8fCh1PWFbb118fGwubmVzdGVkUHJvcGVydHkoYyxvKS5nZXQoKSkmJihhW29dPXUpLHZvaWQgMCE9PXUpYnJlYWt9KHZvaWQgMD09PXUmJihFPDEwJiYobC53YXJuKFwiVmFyaWFibGUgJ1wiK28rXCInIGluIGhvdmVydGVtcGxhdGUgY291bGQgbm90IGJlIGZvdW5kIVwiKSx1PXQpLDEwPT09RSYmbC53YXJuKFwiVG9vIG1hbnkgaG92ZXJ0ZW1wbGF0ZSB3YXJuaW5ncyAtIGFkZGl0aW9uYWwgd2FybmluZ3Mgd2lsbCBiZSBzdXBwcmVzc2VkXCIpLEUrKykscyk/dT0ocj9yLm51bWJlckZvcm1hdDpuLmZvcm1hdCkocy5yZXBsYWNlKFMsXCJcIikpKHUpOmUuaGFzT3duUHJvcGVydHkobytcIkxhYmVsXCIpJiYodT1lW28rXCJMYWJlbFwiXSk7cmV0dXJuIHV9KX07bC5zdWJwbG90U29ydD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCkrMSxuPTAsaT0wLGE9MDthPHI7YSsrKXt2YXIgbz10LmNoYXJDb2RlQXQoYSl8fDAscz1lLmNoYXJDb2RlQXQoYSl8fDAsbD1vPj00OCYmbzw9NTcsYz1zPj00OCYmczw9NTc7aWYobCYmKG49MTAqbitvLTQ4KSxjJiYoaT0xMCppK3MtNDgpLCFsfHwhYyl7aWYobiE9PWkpcmV0dXJuIG4taTtpZihvIT09cylyZXR1cm4gby1zfX1yZXR1cm4gaS1ufTt2YXIgQz0yZTk7bC5zZWVkUHNldWRvUmFuZG9tPWZ1bmN0aW9uKCl7Qz0yZTl9LGwucHNldWRvUmFuZG9tPWZ1bmN0aW9uKCl7dmFyIHQ9QztyZXR1cm4gQz0oNjkwNjkqQysxKSU0Mjk0OTY3Mjk2LE1hdGguYWJzKEMtdCk8NDI5NDk2NzI5P2wucHNldWRvUmFuZG9tKCk6Qy80Mjk0OTY3Mjk2fX0se1wiLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4vYW5jaG9yX3V0aWxzXCI6NjgyLFwiLi9hbmdsZXNcIjo2ODMsXCIuL2FycmF5XCI6Njg0LFwiLi9jbGVhbl9udW1iZXJcIjo2ODUsXCIuL2NsZWFyX3Jlc3BvbnNpdmVcIjo2ODcsXCIuL2NvZXJjZVwiOjY4OCxcIi4vZGF0ZXNcIjo2ODksXCIuL2V4dGVuZFwiOjY5MSxcIi4vZmlsdGVyX3VuaXF1ZVwiOjY5MixcIi4vZmlsdGVyX3Zpc2libGVcIjo2OTMsXCIuL2dlb21ldHJ5MmRcIjo2OTYsXCIuL2dldF9ncmFwaF9kaXZcIjo2OTcsXCIuL2lkZW50aXR5XCI6NzAwLFwiLi9pc19wbGFpbl9vYmplY3RcIjo3MDIsXCIuL2tleWVkX2NvbnRhaW5lclwiOjcwMyxcIi4vbG9jYWxpemVcIjo3MDQsXCIuL2xvZ2dlcnNcIjo3MDUsXCIuL21ha2VfdHJhY2VfZ3JvdXBzXCI6NzA2LFwiLi9tYXRyaXhcIjo3MDcsXCIuL21vZFwiOjcwOCxcIi4vbmVzdGVkX3Byb3BlcnR5XCI6NzA5LFwiLi9ub29wXCI6NzEwLFwiLi9ub3RpZmllclwiOjcxMSxcIi4vcHVzaF91bmlxdWVcIjo3MTUsXCIuL3JlZ2V4XCI6NzE3LFwiLi9yZWxhdGl2ZV9hdHRyXCI6NzE4LFwiLi9yZWxpbmtfcHJpdmF0ZVwiOjcxOSxcIi4vc2VhcmNoXCI6NzIwLFwiLi9zdGF0c1wiOjcyMyxcIi4vdGhyb3R0bGVcIjo3MjYsXCIuL3RvX2xvZ19yYW5nZVwiOjcyNyxkMzoxNTUsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDcwMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gd2luZG93JiZ3aW5kb3cucHJvY2VzcyYmd2luZG93LnByb2Nlc3MudmVyc2lvbnM/XCJbb2JqZWN0IE9iamVjdF1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KTpcIltvYmplY3QgT2JqZWN0XVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1PYmplY3QucHJvdG90eXBlfX0se31dLDcwMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL25lc3RlZF9wcm9wZXJ0eVwiKSxpPS9eXFx3KiQvO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbyxzLGw7cj1yfHxcIm5hbWVcIixhPWF8fFwidmFsdWVcIjt2YXIgYz17fTtlJiZlLmxlbmd0aD8obD1uKHQsZSkscz1sLmdldCgpKTpzPXQsZT1lfHxcIlwiO3ZhciB1PXt9O2lmKHMpZm9yKG89MDtvPHMubGVuZ3RoO28rKyl1W3Nbb11bcl1dPW87dmFyIGg9aS50ZXN0KGEpLGY9e3NldDpmdW5jdGlvbih0LGUpe3ZhciBpPW51bGw9PT1lPzQ6MDtpZighcyl7aWYoIWx8fDQ9PT1pKXJldHVybjtzPVtdLGwuc2V0KHMpfXZhciBvPXVbdF07aWYodm9pZCAwPT09byl7aWYoND09PWkpcmV0dXJuO2l8PTMsbz1zLmxlbmd0aCx1W3RdPW99ZWxzZSBlIT09KGg/c1tvXVthXTpuKHNbb10sYSkuZ2V0KCkpJiYoaXw9Mik7dmFyIHA9c1tvXT1zW29dfHx7fTtyZXR1cm4gcFtyXT10LGg/cFthXT1lOm4ocCxhKS5zZXQoZSksbnVsbCE9PWUmJihpJj0tNSksY1tvXT1jW29dfGksZn0sZ2V0OmZ1bmN0aW9uKHQpe2lmKHMpe3ZhciBlPXVbdF07cmV0dXJuIHZvaWQgMD09PWU/dm9pZCAwOmg/c1tlXVthXTpuKHNbZV0sYSkuZ2V0KCl9fSxyZW5hbWU6ZnVuY3Rpb24odCxlKXt2YXIgbj11W3RdO3JldHVybiB2b2lkIDA9PT1uP2Y6KGNbbl09MXxjW25dLHVbZV09bixkZWxldGUgdVt0XSxzW25dW3JdPWUsZil9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT11W3RdO2lmKHZvaWQgMD09PWUpcmV0dXJuIGY7dmFyIGk9c1tlXTtpZihPYmplY3Qua2V5cyhpKS5sZW5ndGg+MilyZXR1cm4gY1tlXT0yfGNbZV0sZi5zZXQodCxudWxsKTtpZihoKXtmb3Iobz1lO288cy5sZW5ndGg7bysrKWNbb109M3xjW29dO2ZvcihvPWU7bzxzLmxlbmd0aDtvKyspdVtzW29dW3JdXS0tO3Muc3BsaWNlKGUsMSksZGVsZXRlIHVbdF19ZWxzZSBuKGksYSkuc2V0KG51bGwpLGNbZV09NnxjW2VdO3JldHVybiBmfSxjb25zdHJ1Y3RVcGRhdGU6ZnVuY3Rpb24oKXtmb3IodmFyIHQsaSxvPXt9LGw9T2JqZWN0LmtleXMoYyksdT0wO3U8bC5sZW5ndGg7dSsrKWk9bFt1XSx0PWUrXCJbXCIraStcIl1cIixzW2ldPygxJmNbaV0mJihvW3QrXCIuXCIrcl09c1tpXVtyXSksMiZjW2ldJiYob1t0K1wiLlwiK2FdPWg/NCZjW2ldP251bGw6c1tpXVthXTo0JmNbaV0/bnVsbDpuKHNbaV0sYSkuZ2V0KCkpKTpvW3RdPW51bGw7cmV0dXJuIG99fTtyZXR1cm4gZn19LHtcIi4vbmVzdGVkX3Byb3BlcnR5XCI6NzA5fV0sNzA0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3JlZ2lzdHJ5XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Ll9jb250ZXh0LmxvY2FsZSxpPTA7aTwyO2krKyl7Zm9yKHZhciBhPXQuX2NvbnRleHQubG9jYWxlcyxvPTA7bzwyO28rKyl7dmFyIHM9KGFbcl18fHt9KS5kaWN0aW9uYXJ5O2lmKHMpe3ZhciBsPXNbZV07aWYobClyZXR1cm4gbH1hPW4ubG9jYWxlUmVnaXN0cnl9dmFyIGM9ci5zcGxpdChcIi1cIilbMF07aWYoYz09PXIpYnJlYWs7cj1jfXJldHVybiBlfX0se1wiLi4vcmVnaXN0cnlcIjo4Mjl9XSw3MDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vcGxvdF9hcGkvcGxvdF9jb25maWdcIikuZGZsdENvbmZpZyxpPWUuZXhwb3J0cz17fTtmdW5jdGlvbiBhKHQsZSl7aWYodCYmdC5hcHBseSl0cnl7cmV0dXJuIHZvaWQgdC5hcHBseShjb25zb2xlLGUpfWNhdGNoKHQpe31mb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0cnl7dChlW3JdKX1jYXRjaCh0KXtjb25zb2xlLmxvZyhlW3JdKX19aS5sb2c9ZnVuY3Rpb24oKXtpZihuLmxvZ2dpbmc+MSl7Zm9yKHZhciB0PVtcIkxPRzpcIl0sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdC5wdXNoKGFyZ3VtZW50c1tlXSk7YShjb25zb2xlLnRyYWNlfHxjb25zb2xlLmxvZyx0KX19LGkud2Fybj1mdW5jdGlvbigpe2lmKG4ubG9nZ2luZz4wKXtmb3IodmFyIHQ9W1wiV0FSTjpcIl0sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdC5wdXNoKGFyZ3VtZW50c1tlXSk7YShjb25zb2xlLnRyYWNlfHxjb25zb2xlLmxvZyx0KX19LGkuZXJyb3I9ZnVuY3Rpb24oKXtpZihuLmxvZ2dpbmc+MCl7Zm9yKHZhciB0PVtcIkVSUk9SOlwiXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0LnB1c2goYXJndW1lbnRzW2VdKTthKGNvbnNvbGUuZXJyb3IsdCl9fX0se1wiLi4vcGxvdF9hcGkvcGxvdF9jb25maWdcIjo3Mzd9XSw3MDY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuc2VsZWN0QWxsKFwiZy5cIityLnJlcGxhY2UoL1xccy9nLFwiLlwiKSkuZGF0YShlLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLnVpZH0pO3JldHVybiBuLmV4aXQoKS5yZW1vdmUoKSxuLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIixyKSxuLm9yZGVyKCksbn19LHt9XSw3MDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLmluaXQyZEFycmF5PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0O24rKylyW25dPW5ldyBBcnJheShlKTtyZXR1cm4gcn0sci50cmFuc3Bvc2VSYWdnZWQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPTAsaT10Lmxlbmd0aDtmb3IoZT0wO2U8aTtlKyspbj1NYXRoLm1heChuLHRbZV0ubGVuZ3RoKTt2YXIgYT1uZXcgQXJyYXkobik7Zm9yKGU9MDtlPG47ZSsrKWZvcihhW2VdPW5ldyBBcnJheShpKSxyPTA7cjxpO3IrKylhW2VdW3JdPXRbcl1bZV07cmV0dXJuIGF9LHIuZG90PWZ1bmN0aW9uKHQsZSl7aWYoIXQubGVuZ3RofHwhZS5sZW5ndGh8fHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIG4saSxhPXQubGVuZ3RoO2lmKHRbMF0ubGVuZ3RoKWZvcihuPW5ldyBBcnJheShhKSxpPTA7aTxhO2krKyluW2ldPXIuZG90KHRbaV0sZSk7ZWxzZSBpZihlWzBdLmxlbmd0aCl7dmFyIG89ci50cmFuc3Bvc2VSYWdnZWQoZSk7Zm9yKG49bmV3IEFycmF5KG8ubGVuZ3RoKSxpPTA7aTxvLmxlbmd0aDtpKyspbltpXT1yLmRvdCh0LG9baV0pfWVsc2UgZm9yKG49MCxpPTA7aTxhO2krKyluKz10W2ldKmVbaV07cmV0dXJuIG59LHIudHJhbnNsYXRpb25NYXRyaXg9ZnVuY3Rpb24odCxlKXtyZXR1cm5bWzEsMCx0XSxbMCwxLGVdLFswLDAsMV1dfSxyLnJvdGF0aW9uTWF0cml4PWZ1bmN0aW9uKHQpe3ZhciBlPXQqTWF0aC5QSS8xODA7cmV0dXJuW1tNYXRoLmNvcyhlKSwtTWF0aC5zaW4oZSksMF0sW01hdGguc2luKGUpLE1hdGguY29zKGUpLDBdLFswLDAsMV1dfSxyLnJvdGF0aW9uWFlNYXRyaXg9ZnVuY3Rpb24odCxlLG4pe3JldHVybiByLmRvdChyLmRvdChyLnRyYW5zbGF0aW9uTWF0cml4KGUsbiksci5yb3RhdGlvbk1hdHJpeCh0KSksci50cmFuc2xhdGlvbk1hdHJpeCgtZSwtbikpfSxyLmFwcGx5MkRUcmFuc2Zvcm09ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzOzM9PT1lLmxlbmd0aCYmKGU9ZVswXSk7dmFyIG49MT09PWFyZ3VtZW50cy5sZW5ndGg/ZVswXTpbZVswXSxlWzFdXTtyZXR1cm4gci5kb3QodCxbblswXSxuWzFdLDFdKS5zbGljZSgwLDIpfX0sci5hcHBseTJEVHJhbnNmb3JtMj1mdW5jdGlvbih0KXt2YXIgZT1yLmFwcGx5MkRUcmFuc2Zvcm0odCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQuc2xpY2UoMCwyKSkuY29uY2F0KGUodC5zbGljZSgyLDQpKSl9fX0se31dLDcwODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17bW9kOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dCVlO3JldHVybiByPDA/citlOnJ9LG1vZEhhbGY6ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hYnModCk+ZS8yP3QtTWF0aC5yb3VuZCh0L2UpKmU6dH19fSx7fV0sNzA5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4vYXJyYXlcIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihuKGUpKWU9U3RyaW5nKGUpO2Vsc2UgaWYoXCJzdHJpbmdcIiE9dHlwZW9mIGV8fFwiWy0xXVwiPT09ZS5zdWJzdHIoZS5sZW5ndGgtNCkpdGhyb3dcImJhZCBwcm9wZXJ0eSBzdHJpbmdcIjtmb3IodmFyIHIsYSxvLGw9MCxjPWUuc3BsaXQoXCIuXCIpO2w8Yy5sZW5ndGg7KXtpZihyPVN0cmluZyhjW2xdKS5tYXRjaCgvXihbXlxcW1xcXV0qKSgoXFxbXFwtP1swLTldKlxcXSkrKSQvKSl7aWYoclsxXSljW2xdPXJbMV07ZWxzZXtpZigwIT09bCl0aHJvd1wiYmFkIHByb3BlcnR5IHN0cmluZ1wiO2Muc3BsaWNlKDAsMSl9Zm9yKGE9clsyXS5zdWJzdHIoMSxyWzJdLmxlbmd0aC0yKS5zcGxpdChcIl1bXCIpLG89MDtvPGEubGVuZ3RoO28rKylsKyssYy5zcGxpY2UobCwwLE51bWJlcihhW29dKSl9bCsrfXJldHVyblwib2JqZWN0XCIhPXR5cGVvZiB0P2Z1bmN0aW9uKHQsZSxyKXtyZXR1cm57c2V0OmZ1bmN0aW9uKCl7dGhyb3dcImJhZCBjb250YWluZXJcIn0sZ2V0OmZ1bmN0aW9uKCl7fSxhc3RyOmUscGFydHM6cixvYmo6dH19KHQsZSxjKTp7c2V0OnModCxjLGUpLGdldDpmdW5jdGlvbiB0KGUscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG4sYSxvLHMsbCxjPWU7Zm9yKHM9MDtzPHIubGVuZ3RoLTE7cysrKXtpZigtMT09PShuPXJbc10pKXtmb3IoYT0hMCxvPVtdLGw9MDtsPGMubGVuZ3RoO2wrKylvW2xdPXQoY1tsXSxyLnNsaWNlKHMrMSkpKCksb1tsXSE9PW9bMF0mJihhPSExKTtyZXR1cm4gYT9vWzBdOm99aWYoXCJudW1iZXJcIj09dHlwZW9mIG4mJiFpKGMpKXJldHVybjtpZihcIm9iamVjdFwiIT10eXBlb2YoYz1jW25dKXx8bnVsbD09PWMpcmV0dXJufWlmKFwib2JqZWN0XCI9PXR5cGVvZiBjJiZudWxsIT09YyYmbnVsbCE9PShvPWNbcltzXV0pKXJldHVybiBvfX0odCxjKSxhc3RyOmUscGFydHM6YyxvYmo6dH19O3ZhciBhPS8oXnxcXC4pYXJnc1xcWy87ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB2b2lkIDA9PT10fHxudWxsPT09dCYmIWUubWF0Y2goYSl9ZnVuY3Rpb24gcyh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBhLHMsaD10LGY9XCJcIixwPVtbdCxmXV0sZD1vKG4scik7Zm9yKHM9MDtzPGUubGVuZ3RoLTE7cysrKXtpZihcIm51bWJlclwiPT10eXBlb2YoYT1lW3NdKSYmIWkoaCkpdGhyb3dcImFycmF5IGluZGV4IGJ1dCBjb250YWluZXIgaXMgbm90IGFuIGFycmF5XCI7aWYoLTE9PT1hKXtpZihkPSFjKGgsZS5zbGljZShzKzEpLG4scikpYnJlYWs7cmV0dXJufWlmKCF1KGgsYSxlW3MrMV0sZCkpYnJlYWs7aWYoXCJvYmplY3RcIiE9dHlwZW9mKGg9aFthXSl8fG51bGw9PT1oKXRocm93XCJjb250YWluZXIgaXMgbm90IGFuIG9iamVjdFwiO2Y9bChmLGEpLHAucHVzaChbaCxmXSl9aWYoZCl7aWYocz09PWUubGVuZ3RoLTEmJihkZWxldGUgaFtlW3NdXSxBcnJheS5pc0FycmF5KGgpJiYrZVtzXT09aC5sZW5ndGgtMSkpZm9yKDtoLmxlbmd0aCYmdm9pZCAwPT09aFtoLmxlbmd0aC0xXTspaC5wb3AoKX1lbHNlIGhbZVtzXV09bn19ZnVuY3Rpb24gbCh0LGUpe3ZhciByPWU7cmV0dXJuIG4oZSk/cj1cIltcIitlK1wiXVwiOnQmJihyPVwiLlwiK2UpLHQrcn1mdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBhLGw9aShyKSxjPSEwLGg9cixmPW4ucmVwbGFjZShcIi0xXCIsMCkscD0hbCYmbyhyLGYpLGQ9ZVswXTtmb3IoYT0wO2E8dC5sZW5ndGg7YSsrKWY9bi5yZXBsYWNlKFwiLTFcIixhKSxsJiYocD1vKGg9clthJXIubGVuZ3RoXSxmKSkscCYmKGM9ITEpLHUodCxhLGQscCkmJnModFthXSxlLG4ucmVwbGFjZShcIi0xXCIsYSkpKGgpO3JldHVybiBjfWZ1bmN0aW9uIHUodCxlLHIsbil7aWYodm9pZCAwPT09dFtlXSl7aWYobilyZXR1cm4hMTt0W2VdPVwibnVtYmVyXCI9PXR5cGVvZiByP1tdOnt9fXJldHVybiEwfX0se1wiLi9hcnJheVwiOjY4NCxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sNzEwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7fX0se31dLDcxMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxhPVtdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKC0xPT09YS5pbmRleE9mKHQpKXthLnB1c2godCk7dmFyIHI9MWUzO2koZSk/cj1lOlwibG9uZ1wiPT09ZSYmKHI9M2UzKTt2YXIgbz1uLnNlbGVjdChcImJvZHlcIikuc2VsZWN0QWxsKFwiLnBsb3RseS1ub3RpZmllclwiKS5kYXRhKFswXSk7by5lbnRlcigpLmFwcGVuZChcImRpdlwiKS5jbGFzc2VkKFwicGxvdGx5LW5vdGlmaWVyXCIsITApLG8uc2VsZWN0QWxsKFwiLm5vdGlmaWVyLW5vdGVcIikuZGF0YShhKS5lbnRlcigpLmFwcGVuZChcImRpdlwiKS5jbGFzc2VkKFwibm90aWZpZXItbm90ZVwiLCEwKS5zdHlsZShcIm9wYWNpdHlcIiwwKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO2UuYXBwZW5kKFwiYnV0dG9uXCIpLmNsYXNzZWQoXCJub3RpZmllci1jbG9zZVwiLCEwKS5odG1sKFwiJnRpbWVzO1wiKS5vbihcImNsaWNrXCIsZnVuY3Rpb24oKXtlLnRyYW5zaXRpb24oKS5jYWxsKHMpfSk7Zm9yKHZhciBpPWUuYXBwZW5kKFwicFwiKSxhPXQuc3BsaXQoLzxiclxccypcXC8/Pi9nKSxvPTA7bzxhLmxlbmd0aDtvKyspbyYmaS5hcHBlbmQoXCJiclwiKSxpLmFwcGVuZChcInNwYW5cIikudGV4dChhW29dKTtlLnRyYW5zaXRpb24oKS5kdXJhdGlvbig3MDApLnN0eWxlKFwib3BhY2l0eVwiLDEpLnRyYW5zaXRpb24oKS5kZWxheShyKS5jYWxsKHMpfSl9ZnVuY3Rpb24gcyh0KXt0LmR1cmF0aW9uKDcwMCkuc3R5bGUoXCJvcGFjaXR5XCIsMCkuZWFjaChcImVuZFwiLGZ1bmN0aW9uKHQpe3ZhciBlPWEuaW5kZXhPZih0KTstMSE9PWUmJmEuc3BsaWNlKGUsMSksbi5zZWxlY3QodGhpcykucmVtb3ZlKCl9KX19fSx7ZDM6MTU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw3MTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9zZXRjdXJzb3JcIiksaT1cImRhdGEtc2F2ZWRjdXJzb3JcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmF0dHIoaSk7aWYoZSl7aWYoIXIpe2Zvcih2YXIgYT0odC5hdHRyKFwiY2xhc3NcIil8fFwiXCIpLnNwbGl0KFwiIFwiKSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107MD09PXMuaW5kZXhPZihcImN1cnNvci1cIikmJnQuYXR0cihpLHMuc3Vic3RyKDcpKS5jbGFzc2VkKHMsITEpfXQuYXR0cihpKXx8dC5hdHRyKGksXCIhIVwiKX1uKHQsZSl9ZWxzZSByJiYodC5hdHRyKGksbnVsbCksXCIhIVwiPT09cj9uKHQpOm4odCxyKSl9fSx7XCIuL3NldGN1cnNvclwiOjcyMX1dLDcxMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL21hdHJpeFwiKS5kb3QsaT10KFwiLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKS5CQUROVU0sYT1lLmV4cG9ydHM9e307YS50ZXN0ZXI9ZnVuY3Rpb24odCl7dmFyIGUscj10LnNsaWNlKCksbj1yWzBdWzBdLGE9bixvPXJbMF1bMV0scz1vO2ZvcihyLnB1c2goclswXSksZT0xO2U8ci5sZW5ndGg7ZSsrKW49TWF0aC5taW4obixyW2VdWzBdKSxhPU1hdGgubWF4KGEscltlXVswXSksbz1NYXRoLm1pbihvLHJbZV1bMV0pLHM9TWF0aC5tYXgocyxyW2VdWzFdKTt2YXIgbCxjPSExOzU9PT1yLmxlbmd0aCYmKHJbMF1bMF09PT1yWzFdWzBdP3JbMl1bMF09PT1yWzNdWzBdJiZyWzBdWzFdPT09clszXVsxXSYmclsxXVsxXT09PXJbMl1bMV0mJihjPSEwLGw9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09PT1yWzBdWzBdfSk6clswXVsxXT09PXJbMV1bMV0mJnJbMl1bMV09PT1yWzNdWzFdJiZyWzBdWzBdPT09clszXVswXSYmclsxXVswXT09PXJbMl1bMF0mJihjPSEwLGw9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMV09PT1yWzBdWzFdfSkpO3ZhciB1PSEwLGg9clswXTtmb3IoZT0xO2U8ci5sZW5ndGg7ZSsrKWlmKGhbMF0hPT1yW2VdWzBdfHxoWzFdIT09cltlXVsxXSl7dT0hMTticmVha31yZXR1cm57eG1pbjpuLHhtYXg6YSx5bWluOm8seW1heDpzLHB0czpyLGNvbnRhaW5zOmM/ZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLGM9dFsxXTtyZXR1cm4hKHI9PT1pfHxyPG58fHI+YXx8Yz09PWl8fGM8b3x8Yz5zfHxlJiZsKHQpKX06ZnVuY3Rpb24odCxlKXt2YXIgbD10WzBdLGM9dFsxXTtpZihsPT09aXx8bDxufHxsPmF8fGM9PT1pfHxjPG98fGM+cylyZXR1cm4hMTt2YXIgdSxoLGYscCxkLGc9ci5sZW5ndGgsdj1yWzBdWzBdLG09clswXVsxXSx5PTA7Zm9yKHU9MTt1PGc7dSsrKWlmKGg9dixmPW0sdj1yW3VdWzBdLG09clt1XVsxXSwhKGw8KHA9TWF0aC5taW4oaCx2KSl8fGw+TWF0aC5tYXgoaCx2KXx8Yz5NYXRoLm1heChmLG0pKSlpZihjPE1hdGgubWluKGYsbSkpbCE9PXAmJnkrKztlbHNle2lmKGM9PT0oZD12PT09aD9jOmYrKGwtaCkqKG0tZikvKHYtaCkpKXJldHVybiAxIT09dXx8IWU7Yzw9ZCYmbCE9PXAmJnkrK31yZXR1cm4geSUyPT0xfSxpc1JlY3Q6YyxkZWdlbmVyYXRlOnV9fTt2YXIgbz1hLmlzU2VnbWVudEJlbnQ9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbyxzLGw9dFtlXSxjPVt0W3JdWzBdLWxbMF0sdFtyXVsxXS1sWzFdXSx1PW4oYyxjKSxoPU1hdGguc3FydCh1KSxmPVstY1sxXS9oLGNbMF0vaF07Zm9yKGE9ZSsxO2E8cjthKyspaWYobz1bdFthXVswXS1sWzBdLHRbYV1bMV0tbFsxXV0sKHM9bihvLGMpKTwwfHxzPnV8fE1hdGguYWJzKG4obyxmKSk+aSlyZXR1cm4hMDtyZXR1cm4hMX07YS5maWx0ZXI9ZnVuY3Rpb24odCxlKXt2YXIgcj1bdFswXV0sbj0wLGk9MDtmdW5jdGlvbiBhKGEpe3QucHVzaChhKTt2YXIgcz1yLmxlbmd0aCxsPW47ci5zcGxpY2UoaSsxKTtmb3IodmFyIGM9bCsxO2M8dC5sZW5ndGg7YysrKShjPT09dC5sZW5ndGgtMXx8byh0LGwsYysxLGUpKSYmKHIucHVzaCh0W2NdKSxyLmxlbmd0aDxzLTImJihuPWMsaT1yLmxlbmd0aC0xKSxsPWMpfXQubGVuZ3RoPjEmJmEodC5wb3AoKSk7cmV0dXJue2FkZFB0OmEscmF3OnQsZmlsdGVyZWQ6cn19fSx7XCIuLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi9tYXRyaXhcIjo3MDd9XSw3MTQ6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vc2hvd19ub193ZWJnbF9tc2dcIiksaT10KFwicmVnbFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgYT10Ll9mdWxsTGF5b3V0LG89ITA7cmV0dXJuIGEuX2dsY2FudmFzLmVhY2goZnVuY3Rpb24obil7aWYoIW4ucmVnbCYmKCFuLnBpY2t8fGEuX2hhcyhcInBhcmNvb3Jkc1wiKSkpe3RyeXtuLnJlZ2w9aSh7Y2FudmFzOnRoaXMsYXR0cmlidXRlczp7YW50aWFsaWFzOiFuLnBpY2sscHJlc2VydmVEcmF3aW5nQnVmZmVyOiEwfSxwaXhlbFJhdGlvOnQuX2NvbnRleHQucGxvdEdsUGl4ZWxSYXRpb3x8ci5kZXZpY2VQaXhlbFJhdGlvLGV4dGVuc2lvbnM6ZXx8W119KX1jYXRjaCh0KXtvPSExfW8mJnRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcIndlYmdsY29udGV4dGxvc3RcIixmdW5jdGlvbihlKXt0JiZ0LmVtaXQmJnQuZW1pdChcInBsb3RseV93ZWJnbGNvbnRleHRsb3N0XCIse2V2ZW50OmUsbGF5ZXI6bi5rZXl9KX0sITEpfX0pLG98fG4oe2NvbnRhaW5lcjphLl9nbGNvbnRhaW5lci5ub2RlKCl9KSxvfX0pLmNhbGwodGhpcyxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se1wiLi9zaG93X25vX3dlYmdsX21zZ1wiOjcyMixyZWdsOjQ4N31dLDcxNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKGUgaW5zdGFuY2VvZiBSZWdFeHApe2Zvcih2YXIgcj1lLnRvU3RyaW5nKCksbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl1pbnN0YW5jZW9mIFJlZ0V4cCYmdFtuXS50b1N0cmluZygpPT09cilyZXR1cm4gdDt0LnB1c2goZSl9ZWxzZSFlJiYwIT09ZXx8LTEhPT10LmluZGV4T2YoZSl8fHQucHVzaChlKTtyZXR1cm4gdH19LHt9XSw3MTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vbGliXCIpLGk9dChcIi4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnXCIpLmRmbHRDb25maWc7dmFyIGE9e2FkZDpmdW5jdGlvbih0LGUscixuLGEpe3ZhciBvLHM7dC51bmRvUXVldWU9dC51bmRvUXVldWV8fHtpbmRleDowLHF1ZXVlOltdLHNlcXVlbmNlOiExfSxzPXQudW5kb1F1ZXVlLmluZGV4LHQuYXV0b3BsYXk/dC51bmRvUXVldWUuaW5TZXF1ZW5jZXx8KHQuYXV0b3BsYXk9ITEpOighdC51bmRvUXVldWUuc2VxdWVuY2V8fHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U/KG89e3VuZG86e2NhbGxzOltdLGFyZ3M6W119LHJlZG86e2NhbGxzOltdLGFyZ3M6W119fSx0LnVuZG9RdWV1ZS5xdWV1ZS5zcGxpY2Uocyx0LnVuZG9RdWV1ZS5xdWV1ZS5sZW5ndGgtcyxvKSx0LnVuZG9RdWV1ZS5pbmRleCs9MSk6bz10LnVuZG9RdWV1ZS5xdWV1ZVtzLTFdLHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U9ITEsbyYmKG8udW5kby5jYWxscy51bnNoaWZ0KGUpLG8udW5kby5hcmdzLnVuc2hpZnQociksby5yZWRvLmNhbGxzLnB1c2gobiksby5yZWRvLmFyZ3MucHVzaChhKSksdC51bmRvUXVldWUucXVldWUubGVuZ3RoPmkucXVldWVMZW5ndGgmJih0LnVuZG9RdWV1ZS5xdWV1ZS5zaGlmdCgpLHQudW5kb1F1ZXVlLmluZGV4LS0pKX0sc3RhcnRTZXF1ZW5jZTpmdW5jdGlvbih0KXt0LnVuZG9RdWV1ZT10LnVuZG9RdWV1ZXx8e2luZGV4OjAscXVldWU6W10sc2VxdWVuY2U6ITF9LHQudW5kb1F1ZXVlLnNlcXVlbmNlPSEwLHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U9ITB9LHN0b3BTZXF1ZW5jZTpmdW5jdGlvbih0KXt0LnVuZG9RdWV1ZT10LnVuZG9RdWV1ZXx8e2luZGV4OjAscXVldWU6W10sc2VxdWVuY2U6ITF9LHQudW5kb1F1ZXVlLnNlcXVlbmNlPSExLHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U9ITF9LHVuZG86ZnVuY3Rpb24odCl7dmFyIGUscjtpZih0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhcil0LmZyYW1ld29yay51bmRvKCk7ZWxzZSBpZighKHZvaWQgMD09PXQudW5kb1F1ZXVlfHxpc05hTih0LnVuZG9RdWV1ZS5pbmRleCl8fHQudW5kb1F1ZXVlLmluZGV4PD0wKSl7Zm9yKHQudW5kb1F1ZXVlLmluZGV4LS0sZT10LnVuZG9RdWV1ZS5xdWV1ZVt0LnVuZG9RdWV1ZS5pbmRleF0sdC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMCxyPTA7cjxlLnVuZG8uY2FsbHMubGVuZ3RoO3IrKylhLnBsb3REbyh0LGUudW5kby5jYWxsc1tyXSxlLnVuZG8uYXJnc1tyXSk7dC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMSx0LmF1dG9wbGF5PSExfX0scmVkbzpmdW5jdGlvbih0KXt2YXIgZSxyO2lmKHQuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5pc1BvbGFyKXQuZnJhbWV3b3JrLnJlZG8oKTtlbHNlIGlmKCEodm9pZCAwPT09dC51bmRvUXVldWV8fGlzTmFOKHQudW5kb1F1ZXVlLmluZGV4KXx8dC51bmRvUXVldWUuaW5kZXg+PXQudW5kb1F1ZXVlLnF1ZXVlLmxlbmd0aCkpe2ZvcihlPXQudW5kb1F1ZXVlLnF1ZXVlW3QudW5kb1F1ZXVlLmluZGV4XSx0LnVuZG9RdWV1ZS5pblNlcXVlbmNlPSEwLHI9MDtyPGUucmVkby5jYWxscy5sZW5ndGg7cisrKWEucGxvdERvKHQsZS5yZWRvLmNhbGxzW3JdLGUucmVkby5hcmdzW3JdKTt0LnVuZG9RdWV1ZS5pblNlcXVlbmNlPSExLHQuYXV0b3BsYXk9ITEsdC51bmRvUXVldWUuaW5kZXgrK319fTthLnBsb3REbz1mdW5jdGlvbih0LGUscil7dC5hdXRvcGxheT0hMCxyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLGk9W10sYT0wO2E8ZS5sZW5ndGg7YSsrKXI9ZVthXSxpW2FdPXI9PT10P3I6XCJvYmplY3RcIj09dHlwZW9mIHI/QXJyYXkuaXNBcnJheShyKT9uLmV4dGVuZERlZXAoW10scik6bi5leHRlbmREZWVwQWxsKHt9LHIpOnI7cmV0dXJuIGl9KHQsciksZS5hcHBseShudWxsLHIpfSxlLmV4cG9ydHM9YX0se1wiLi4vbGliXCI6NzAxLFwiLi4vcGxvdF9hcGkvcGxvdF9jb25maWdcIjo3Mzd9XSw3MTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLmNvdW50ZXI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9KGV8fFwiXCIpKyhyP1wiXCI6XCIkXCIpLGE9ITE9PT1uP1wiXCI6XCJeXCI7cmV0dXJuXCJ4eVwiPT09dD9uZXcgUmVnRXhwKGErXCJ4KFsyLTldfFsxLTldWzAtOV0rKT95KFsyLTldfFsxLTldWzAtOV0rKT9cIitpKTpuZXcgUmVnRXhwKGErdCtcIihbMi05XXxbMS05XVswLTldKyk/XCIraSl9fSx7fV0sNzE4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49L14oLiopKFxcLlteXFwuXFxbXFxdXSt8XFxbXFxkXFxdKSQvLGk9L15bXlxcLlxcW1xcXV0rJC87ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKDtlOyl7dmFyIHI9dC5tYXRjaChuKTtpZihyKXQ9clsxXTtlbHNle2lmKCF0Lm1hdGNoKGkpKXRocm93IG5ldyBFcnJvcihcImJhZCByZWxhdGl2ZUF0dHIgY2FsbDpcIitbdCxlXSk7dD1cIlwifWlmKFwiXlwiIT09ZS5jaGFyQXQoMCkpYnJlYWs7ZT1lLnNsaWNlKDEpfXJldHVybiB0JiZcIltcIiE9PWUuY2hhckF0KDApP3QrXCIuXCIrZTp0K2V9fSx7fV0sNzE5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vYXJyYXlcIikuaXNBcnJheU9yVHlwZWRBcnJheSxpPXQoXCIuL2lzX3BsYWluX29iamVjdFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24gdChlLHIpe2Zvcih2YXIgYSBpbiByKXt2YXIgbz1yW2FdLHM9ZVthXTtpZihzIT09bylpZihcIl9cIj09PWEuY2hhckF0KDApfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBvKXtpZihhIGluIGUpY29udGludWU7ZVthXT1vfWVsc2UgaWYobihvKSYmbihzKSYmaShvWzBdKSl7aWYoXCJjdXN0b21kYXRhXCI9PT1hfHxcImlkc1wiPT09YSljb250aW51ZTtmb3IodmFyIGw9TWF0aC5taW4oby5sZW5ndGgscy5sZW5ndGgpLGM9MDtjPGw7YysrKXNbY10hPT1vW2NdJiZpKG9bY10pJiZpKHNbY10pJiZ0KHNbY10sb1tjXSl9ZWxzZSBpKG8pJiZpKHMpJiYodChzLG8pLE9iamVjdC5rZXlzKHMpLmxlbmd0aHx8ZGVsZXRlIGVbYV0pfX19LHtcIi4vYXJyYXlcIjo2ODQsXCIuL2lzX3BsYWluX29iamVjdFwiOjcwMn1dLDcyMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuL2xvZ2dlcnNcIiksYT10KFwiLi9pZGVudGl0eVwiKTtmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHQ8ZX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIHQ8PWV9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0PmV9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiB0Pj1lfXIuZmluZEJpbj1mdW5jdGlvbih0LGUscil7aWYobihlLnN0YXJ0KSlyZXR1cm4gcj9NYXRoLmNlaWwoKHQtZS5zdGFydCkvZS5zaXplLTFlLTkpLTE6TWF0aC5mbG9vcigodC1lLnN0YXJ0KS9lLnNpemUrMWUtOSk7dmFyIGEsdSxoPTAsZj1lLmxlbmd0aCxwPTAsZD1mPjE/KGVbZi0xXS1lWzBdKS8oZi0xKToxO2Zvcih1PWQ+PTA/cj9vOnM6cj9jOmwsdCs9MWUtOSpkKihyPy0xOjEpKihkPj0wPzE6LTEpO2g8ZiYmcCsrPDEwMDspdShlW2E9TWF0aC5mbG9vcigoaCtmKS8yKV0sdCk/aD1hKzE6Zj1hO3JldHVybiBwPjkwJiZpLmxvZyhcIkxvbmcgYmluYXJ5IHNlYXJjaC4uLlwiKSxoLTF9LHIuc29ydGVyQXNjPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0sci5zb3J0ZXJEZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS10fSxyLmRpc3RpbmN0VmFscz1mdW5jdGlvbih0KXt2YXIgZT10LnNsaWNlKCk7ZS5zb3J0KHIuc29ydGVyQXNjKTtmb3IodmFyIG49ZS5sZW5ndGgtMSxpPWVbbl0tZVswXXx8MSxhPWkvKG58fDEpLzFlNCxvPVtlWzBdXSxzPTA7czxuO3MrKyllW3MrMV0+ZVtzXSthJiYoaT1NYXRoLm1pbihpLGVbcysxXS1lW3NdKSxvLnB1c2goZVtzKzFdKSk7cmV0dXJue3ZhbHM6byxtaW5EaWZmOml9fSxyLnJvdW5kVXA9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpPTAsYT1lLmxlbmd0aC0xLG89MCxzPXI/MDoxLGw9cj8xOjAsYz1yP01hdGguY2VpbDpNYXRoLmZsb29yO2k8YSYmbysrPDEwMDspZVtuPWMoKGkrYSkvMildPD10P2k9bitzOmE9bi1sO3JldHVybiBlW2ldfSxyLnNvcnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTAsaT0xO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT1lKHRbaV0sdFtpLTFdKTtpZihhPDA/cj0xOmE+MCYmKG49MSksciYmbilyZXR1cm4gdC5zb3J0KGUpfXJldHVybiBuP3Q6dC5yZXZlcnNlKCl9LHIuZmluZEluZGV4T2ZNaW49ZnVuY3Rpb24odCxlKXtlPWV8fGE7Zm9yKHZhciByLG49MS8wLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIG89ZSh0W2ldKTtvPG4mJihuPW8scj1pKX1yZXR1cm4gcn19LHtcIi4vaWRlbnRpdHlcIjo3MDAsXCIuL2xvZ2dlcnNcIjo3MDUsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDcyMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpeyh0LmF0dHIoXCJjbGFzc1wiKXx8XCJcIikuc3BsaXQoXCIgXCIpLmZvckVhY2goZnVuY3Rpb24oZSl7MD09PWUuaW5kZXhPZihcImN1cnNvci1cIikmJnQuY2xhc3NlZChlLCExKX0pLGUmJnQuY2xhc3NlZChcImN1cnNvci1cIitlLCEwKX19LHt9XSw3MjI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vY29tcG9uZW50cy9jb2xvclwiKSxpPWZ1bmN0aW9uKCl7fTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHQpXCJmdW5jdGlvblwiPT10eXBlb2YgdFtlXSYmKHRbZV09aSk7dC5kZXN0cm95PWZ1bmN0aW9uKCl7dC5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0LmNvbnRhaW5lcil9O3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7ci5jbGFzc05hbWU9XCJuby13ZWJnbFwiLHIuc3R5bGUuY3Vyc29yPVwicG9pbnRlclwiLHIuc3R5bGUuZm9udFNpemU9XCIyNHB4XCIsci5zdHlsZS5jb2xvcj1uLmRlZmF1bHRzWzBdLHIuc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwiLHIuc3R5bGUubGVmdD1yLnN0eWxlLnRvcD1cIjBweFwiLHIuc3R5bGUud2lkdGg9ci5zdHlsZS5oZWlnaHQ9XCIxMDAlXCIsci5zdHlsZVtcImJhY2tncm91bmQtY29sb3JcIl09bi5saWdodExpbmUsci5zdHlsZVtcInotaW5kZXhcIl09MzA7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7cmV0dXJuIGEudGV4dENvbnRlbnQ9XCJXZWJHTCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3NlciAtIHZpc2l0IGh0dHBzOi8vZ2V0LndlYmdsLm9yZyBmb3IgbW9yZSBpbmZvXCIsYS5zdHlsZS5wb3NpdGlvbj1cInJlbGF0aXZlXCIsYS5zdHlsZS50b3A9XCI1MCVcIixhLnN0eWxlLmxlZnQ9XCI1MCVcIixhLnN0eWxlLmhlaWdodD1cIjMwJVwiLGEuc3R5bGUud2lkdGg9XCI1MCVcIixhLnN0eWxlLm1hcmdpbj1cIi0xNSUgMCAwIC0yNSVcIixyLmFwcGVuZENoaWxkKGEpLHQuY29udGFpbmVyLmFwcGVuZENoaWxkKHIpLHQuY29udGFpbmVyLnN0eWxlLmJhY2tncm91bmQ9XCIjRkZGRkZGXCIsdC5jb250YWluZXIub25jbGljaz1mdW5jdGlvbigpe3dpbmRvdy5vcGVuKFwiaHR0cHM6Ly9nZXQud2ViZ2wub3JnXCIpfSwhMX19LHtcIi4uL2NvbXBvbmVudHMvY29sb3JcIjo1Nzh9XSw3MjM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi9hcnJheVwiKS5pc0FycmF5T3JUeXBlZEFycmF5O3IuYWdnTnVtcz1mdW5jdGlvbih0LGUsYSxvKXt2YXIgcyxsO2lmKCghb3x8bz5hLmxlbmd0aCkmJihvPWEubGVuZ3RoKSxuKGUpfHwoZT0hMSksaShhWzBdKSl7Zm9yKGw9bmV3IEFycmF5KG8pLHM9MDtzPG87cysrKWxbc109ci5hZ2dOdW1zKHQsZSxhW3NdKTthPWx9Zm9yKHM9MDtzPG87cysrKW4oZSk/bihhW3NdKSYmKGU9dCgrZSwrYVtzXSkpOmU9YVtzXTtyZXR1cm4gZX0sci5sZW49ZnVuY3Rpb24odCl7cmV0dXJuIHIuYWdnTnVtcyhmdW5jdGlvbih0KXtyZXR1cm4gdCsxfSwwLHQpfSxyLm1lYW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8KGU9ci5sZW4odCkpLHIuYWdnTnVtcyhmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9LDAsdCkvZX0sci5taWRSYW5nZT1mdW5jdGlvbih0KXtpZih2b2lkIDAhPT10JiYwIT09dC5sZW5ndGgpcmV0dXJuKHIuYWdnTnVtcyhNYXRoLm1heCxudWxsLHQpK3IuYWdnTnVtcyhNYXRoLm1pbixudWxsLHQpKS8yfSxyLnZhcmlhbmNlPWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gZXx8KGU9ci5sZW4odCkpLG4oaSl8fChpPXIubWVhbih0LGUpKSxyLmFnZ051bXMoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtNYXRoLnBvdyhlLWksMil9LDAsdCkvZX0sci5zdGRldj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIE1hdGguc3FydChyLnZhcmlhbmNlKHQsZSxuKSl9LHIuaW50ZXJwPWZ1bmN0aW9uKHQsZSl7aWYoIW4oZSkpdGhyb3dcIm4gc2hvdWxkIGJlIGEgZmluaXRlIG51bWJlclwiO2lmKChlPWUqdC5sZW5ndGgtLjUpPDApcmV0dXJuIHRbMF07aWYoZT50Lmxlbmd0aC0xKXJldHVybiB0W3QubGVuZ3RoLTFdO3ZhciByPWUlMTtyZXR1cm4gcip0W01hdGguY2VpbChlKV0rKDEtcikqdFtNYXRoLmZsb29yKGUpXX19LHtcIi4vYXJyYXlcIjo2ODQsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDcyNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJjb2xvci1ub3JtYWxpemVcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0P24odCk6WzAsMCwwLDFdfX0se1wiY29sb3Itbm9ybWFsaXplXCI6MTExfV0sNzI1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uL2xpYlwiKSxhPXQoXCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiKSxvPXQoXCIuLi9jb25zdGFudHMvYWxpZ25tZW50XCIpLkxJTkVfU1BBQ0lORztmdW5jdGlvbiBzKHQsZSl7cmV0dXJuIHQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2VdfXZhciBsPS8oW14kXSopKFskXStbXiRdKlskXSspKFteJF0qKS87ci5jb252ZXJ0VG9Uc3BhbnM9ZnVuY3Rpb24odCxlLE0pe3ZhciBTPXQudGV4dCgpLEM9IXQuYXR0cihcImRhdGEtbm90ZXhcIikmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBNYXRoSmF4JiZTLm1hdGNoKGwpLEw9bi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSk7aWYoIUwuZW1wdHkoKSl7dmFyIHo9dC5hdHRyKFwiY2xhc3NcIik/dC5hdHRyKFwiY2xhc3NcIikuc3BsaXQoXCIgXCIpWzBdOlwidGV4dFwiO3JldHVybiB6Kz1cIi1tYXRoXCIsTC5zZWxlY3RBbGwoXCJzdmcuXCIreikucmVtb3ZlKCksTC5zZWxlY3RBbGwoXCJnLlwiK3orXCItZ3JvdXBcIikucmVtb3ZlKCksdC5zdHlsZShcImRpc3BsYXlcIixudWxsKS5hdHRyKHtcImRhdGEtdW5mb3JtYXR0ZWRcIjpTLFwiZGF0YS1tYXRoXCI6XCJOXCJ9KSxDPyhlJiZlLl9wcm9taXNlc3x8W10pLnB1c2gobmV3IFByb21pc2UoZnVuY3Rpb24oZSl7dC5zdHlsZShcImRpc3BsYXlcIixcIm5vbmVcIik7dmFyIHI9cGFyc2VJbnQodC5ub2RlKCkuc3R5bGUuZm9udFNpemUsMTApLGE9e2ZvbnRTaXplOnJ9OyFmdW5jdGlvbih0LGUscil7dmFyIGEsbyxzLGw7TWF0aEpheC5IdWIuUXVldWUoZnVuY3Rpb24oKXtyZXR1cm4gbz1pLmV4dGVuZERlZXBBbGwoe30sTWF0aEpheC5IdWIuY29uZmlnKSxzPU1hdGhKYXguSHViLnByb2Nlc3NTZWN0aW9uRGVsYXksdm9pZCAwIT09TWF0aEpheC5IdWIucHJvY2Vzc1NlY3Rpb25EZWxheSYmKE1hdGhKYXguSHViLnByb2Nlc3NTZWN0aW9uRGVsYXk9MCksTWF0aEpheC5IdWIuQ29uZmlnKHttZXNzYWdlU3R5bGU6XCJub25lXCIsdGV4MmpheDp7aW5saW5lTWF0aDpbW1wiJFwiLFwiJFwiXSxbXCJcXFxcKFwiLFwiXFxcXClcIl1dfSxkaXNwbGF5QWxpZ246XCJsZWZ0XCJ9KX0sZnVuY3Rpb24oKXtpZihcIlNWR1wiIT09KGE9TWF0aEpheC5IdWIuY29uZmlnLm1lbnVTZXR0aW5ncy5yZW5kZXJlcikpcmV0dXJuIE1hdGhKYXguSHViLnNldFJlbmRlcmVyKFwiU1ZHXCIpfSxmdW5jdGlvbigpe3ZhciByPVwibWF0aC1vdXRwdXQtXCIraS5yYW5kc3RyKHt9LDY0KTtyZXR1cm4gbD1uLnNlbGVjdChcImJvZHlcIikuYXBwZW5kKFwiZGl2XCIpLmF0dHIoe2lkOnJ9KS5zdHlsZSh7dmlzaWJpbGl0eTpcImhpZGRlblwiLHBvc2l0aW9uOlwiYWJzb2x1dGVcIn0pLnN0eWxlKHtcImZvbnQtc2l6ZVwiOmUuZm9udFNpemUrXCJweFwifSkudGV4dCh0LnJlcGxhY2UoYyxcIlxcXFxsdCBcIikucmVwbGFjZSh1LFwiXFxcXGd0IFwiKSksTWF0aEpheC5IdWIuVHlwZXNldChsLm5vZGUoKSl9LGZ1bmN0aW9uKCl7dmFyIGU9bi5zZWxlY3QoXCJib2R5XCIpLnNlbGVjdChcIiNNYXRoSmF4X1NWR19nbHlwaHNcIik7aWYobC5zZWxlY3QoXCIuTWF0aEpheF9TVkdcIikuZW1wdHkoKXx8IWwuc2VsZWN0KFwic3ZnXCIpLm5vZGUoKSlpLmxvZyhcIlRoZXJlIHdhcyBhbiBlcnJvciBpbiB0aGUgdGV4IHN5bnRheC5cIix0KSxyKCk7ZWxzZXt2YXIgbz1sLnNlbGVjdChcInN2Z1wiKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cihsLnNlbGVjdChcIi5NYXRoSmF4X1NWR1wiKSxlLG8pfWlmKGwucmVtb3ZlKCksXCJTVkdcIiE9PWEpcmV0dXJuIE1hdGhKYXguSHViLnNldFJlbmRlcmVyKGEpfSxmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT1zJiYoTWF0aEpheC5IdWIucHJvY2Vzc1NlY3Rpb25EZWxheT1zKSxNYXRoSmF4Lkh1Yi5Db25maWcobyl9KX0oQ1syXSxhLGZ1bmN0aW9uKG4saSxhKXtMLnNlbGVjdEFsbChcInN2Zy5cIit6KS5yZW1vdmUoKSxMLnNlbGVjdEFsbChcImcuXCIreitcIi1ncm91cFwiKS5yZW1vdmUoKTt2YXIgbz1uJiZuLnNlbGVjdChcInN2Z1wiKTtpZighb3x8IW8ubm9kZSgpKXJldHVybiBPKCksdm9pZCBlKCk7dmFyIGw9TC5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoeitcIi1ncm91cFwiLCEwKS5hdHRyKHtcInBvaW50ZXItZXZlbnRzXCI6XCJub25lXCIsXCJkYXRhLXVuZm9ybWF0dGVkXCI6UyxcImRhdGEtbWF0aFwiOlwiWVwifSk7bC5ub2RlKCkuYXBwZW5kQ2hpbGQoby5ub2RlKCkpLGkmJmkubm9kZSgpJiZvLm5vZGUoKS5pbnNlcnRCZWZvcmUoaS5ub2RlKCkuY2xvbmVOb2RlKCEwKSxvLm5vZGUoKS5maXJzdENoaWxkKSxvLmF0dHIoe2NsYXNzOnosaGVpZ2h0OmEuaGVpZ2h0LHByZXNlcnZlQXNwZWN0UmF0aW86XCJ4TWluWU1pbiBtZWV0XCJ9KS5zdHlsZSh7b3ZlcmZsb3c6XCJ2aXNpYmxlXCIsXCJwb2ludGVyLWV2ZW50c1wiOlwibm9uZVwifSk7dmFyIGM9dC5ub2RlKCkuc3R5bGUuZmlsbHx8XCJibGFja1wiO28uc2VsZWN0KFwiZ1wiKS5hdHRyKHtmaWxsOmMsc3Ryb2tlOmN9KTt2YXIgdT1zKG8sXCJ3aWR0aFwiKSxoPXMobyxcImhlaWdodFwiKSxmPSt0LmF0dHIoXCJ4XCIpLXUqe3N0YXJ0OjAsbWlkZGxlOi41LGVuZDoxfVt0LmF0dHIoXCJ0ZXh0LWFuY2hvclwiKXx8XCJzdGFydFwiXSxwPS0ocnx8cyh0LFwiaGVpZ2h0XCIpKS80O1wieVwiPT09elswXT8obC5hdHRyKHt0cmFuc2Zvcm06XCJyb3RhdGUoXCIrWy05MCwrdC5hdHRyKFwieFwiKSwrdC5hdHRyKFwieVwiKV0rXCIpIHRyYW5zbGF0ZShcIitbLXUvMixwLWgvMl0rXCIpXCJ9KSxvLmF0dHIoe3g6K3QuYXR0cihcInhcIikseTordC5hdHRyKFwieVwiKX0pKTpcImxcIj09PXpbMF0/by5hdHRyKHt4OnQuYXR0cihcInhcIikseTpwLWgvMn0pOlwiYVwiPT09elswXSYmMCE9PXouaW5kZXhPZihcImF0aXRsZVwiKT9vLmF0dHIoe3g6MCx5OnB9KTpvLmF0dHIoe3g6Zix5Oit0LmF0dHIoXCJ5XCIpK3AtaC8yfSksTSYmTS5jYWxsKHQsbCksZShsKX0pfSkpOk8oKSx0fWZ1bmN0aW9uIE8oKXtMLmVtcHR5KCl8fCh6PXQuYXR0cihcImNsYXNzXCIpK1wiLW1hdGhcIixMLnNlbGVjdChcInN2Zy5cIit6KS5yZW1vdmUoKSksdC50ZXh0KFwiXCIpLnN0eWxlKFwid2hpdGUtc3BhY2VcIixcInByZVwiKSxmdW5jdGlvbih0LGUpe2U9ZS5yZXBsYWNlKHYsXCIgXCIpO3ZhciByLHM9ITEsbD1bXSxjPS0xO2Z1bmN0aW9uIHUoKXtjKys7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGEuc3ZnLFwidHNwYW5cIik7bi5zZWxlY3QoZSkuYXR0cih7Y2xhc3M6XCJsaW5lXCIsZHk6YypvK1wiZW1cIn0pLHQuYXBwZW5kQ2hpbGQoZSkscj1lO3ZhciBpPWw7aWYobD1be25vZGU6ZX1dLGkubGVuZ3RoPjEpZm9yKHZhciBzPTE7czxpLmxlbmd0aDtzKyspTShpW3NdKX1mdW5jdGlvbiBNKHQpe3ZhciBlLGk9dC50eXBlLG89e307aWYoXCJhXCI9PT1pKXtlPVwiYVwiO3ZhciBzPXQudGFyZ2V0LGM9dC5ocmVmLHU9dC5wb3B1cDtjJiYobz17XCJ4bGluazp4bGluazpzaG93XCI6XCJfYmxhbmtcIj09PXN8fFwiX1wiIT09cy5jaGFyQXQoMCk/XCJuZXdcIjpcInJlcGxhY2VcIix0YXJnZXQ6cyxcInhsaW5rOnhsaW5rOmhyZWZcIjpjfSx1JiYoby5vbmNsaWNrPSd3aW5kb3cub3Blbih0aGlzLmhyZWYuYmFzZVZhbCx0aGlzLnRhcmdldC5iYXNlVmFsLFwiJyt1KydcIik7cmV0dXJuIGZhbHNlOycpKX1lbHNlIGU9XCJ0c3BhblwiO3Quc3R5bGUmJihvLnN0eWxlPXQuc3R5bGUpO3ZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhhLnN2ZyxlKTtpZihcInN1cFwiPT09aXx8XCJzdWJcIj09PWkpe1MocixkKSxyLmFwcGVuZENoaWxkKGgpO3ZhciBnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhhLnN2ZyxcInRzcGFuXCIpO1MoZyxkKSxuLnNlbGVjdChnKS5hdHRyKFwiZHlcIixwW2ldKSxvLmR5PWZbaV0sci5hcHBlbmRDaGlsZChoKSxyLmFwcGVuZENoaWxkKGcpfWVsc2Ugci5hcHBlbmRDaGlsZChoKTtuLnNlbGVjdChoKS5hdHRyKG8pLHI9dC5ub2RlPWgsbC5wdXNoKHQpfWZ1bmN0aW9uIFModCxlKXt0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpKX1mdW5jdGlvbiBDKHQpe2lmKDEhPT1sLmxlbmd0aCl7dmFyIG49bC5wb3AoKTt0IT09bi50eXBlJiZpLmxvZyhcIlN0YXJ0IHRhZyA8XCIrbi50eXBlK1wiPiBkb2VzbnQgbWF0Y2ggZW5kIHRhZyA8XCIrdCtcIj4uIFByZXRlbmRpbmcgaXQgZGlkIG1hdGNoLlwiLGUpLHI9bFtsLmxlbmd0aC0xXS5ub2RlfWVsc2UgaS5sb2coXCJJZ25vcmluZyB1bmV4cGVjdGVkIGVuZCB0YWcgPC9cIit0K1wiPi5cIixlKX14LnRlc3QoZSk/dSgpOihyPXQsbD1be25vZGU6dH1dKTtmb3IodmFyIEw9ZS5zcGxpdChtKSx6PTA7ejxMLmxlbmd0aDt6Kyspe3ZhciBPPUxbel0sST1PLm1hdGNoKHkpLEQ9SSYmSVsyXS50b0xvd2VyQ2FzZSgpLFA9aFtEXTtpZihcImJyXCI9PT1EKXUoKTtlbHNlIGlmKHZvaWQgMD09PVApUyhyLEUoTykpO2Vsc2UgaWYoSVsxXSlDKEQpO2Vsc2V7dmFyIFI9SVs0XSxGPXt0eXBlOkR9LEI9QShSLGIpO2lmKEI/KEI9Qi5yZXBsYWNlKFQsXCIkMSBmaWxsOlwiKSxQJiYoQis9XCI7XCIrUCkpOlAmJihCPVApLEImJihGLnN0eWxlPUIpLFwiYVwiPT09RCl7cz0hMDt2YXIgTj1BKFIsXyk7aWYoTil7dmFyIGo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7ai5ocmVmPU4sLTEhPT1nLmluZGV4T2Yoai5wcm90b2NvbCkmJihGLmhyZWY9ZW5jb2RlVVJJKGRlY29kZVVSSShOKSksRi50YXJnZXQ9QShSLHcpfHxcIl9ibGFua1wiLEYucG9wdXA9QShSLGspKX19TShGKX19cmV0dXJuIHN9KHQubm9kZSgpLFMpJiZ0LnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixcImFsbFwiKSxyLnBvc2l0aW9uVGV4dCh0KSxNJiZNLmNhbGwodCl9fTt2YXIgYz0vKDx8Jmx0O3wmIzYwOykvZyx1PS8oPnwmZ3Q7fCYjNjI7KS9nO3ZhciBoPXtzdXA6XCJmb250LXNpemU6NzAlXCIsc3ViOlwiZm9udC1zaXplOjcwJVwiLGI6XCJmb250LXdlaWdodDpib2xkXCIsaTpcImZvbnQtc3R5bGU6aXRhbGljXCIsYTpcImN1cnNvcjpwb2ludGVyXCIsc3BhbjpcIlwiLGVtOlwiZm9udC1zdHlsZTppdGFsaWM7Zm9udC13ZWlnaHQ6Ym9sZFwifSxmPXtzdWI6XCIwLjNlbVwiLHN1cDpcIi0wLjZlbVwifSxwPXtzdWI6XCItMC4yMWVtXCIsc3VwOlwiMC40MmVtXCJ9LGQ9XCJcXHUyMDBiXCIsZz1bXCJodHRwOlwiLFwiaHR0cHM6XCIsXCJtYWlsdG86XCIsXCJcIix2b2lkIDAsXCI6XCJdLHY9LyhcXHJcXG4/fFxcbikvZyxtPS8oPFtePD5dKj4pLyx5PS88KFxcLz8pKFteID5dKikoXFxzKyguKikpPz4vaSx4PS88YnIoXFxzKy4qKT8+L2ksYj0vKF58W1xcc1wiJ10pc3R5bGVcXHMqPVxccyooXCIoW15cIl0qKTs/XCJ8JyhbXiddKik7PycpL2ksXz0vKF58W1xcc1wiJ10paHJlZlxccyo9XFxzKihcIihbXlwiXSopXCJ8JyhbXiddKiknKS9pLHc9LyhefFtcXHNcIiddKXRhcmdldFxccyo9XFxzKihcIihbXlwiXFxzXSopXCJ8JyhbXidcXHNdKiknKS9pLGs9LyhefFtcXHNcIiddKXBvcHVwXFxzKj1cXHMqKFwiKFtcXHc9LF0qKVwifCcoW1xcdz0sXSopJykvaTtmdW5jdGlvbiBBKHQsZSl7aWYoIXQpcmV0dXJuIG51bGw7dmFyIHI9dC5tYXRjaChlKSxuPXImJihyWzNdfHxyWzRdKTtyZXR1cm4gbiYmRShuKX12YXIgVD0vKF58OylcXHMqY29sb3I6LztyLnBsYWluVGV4dD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj12b2lkIDAhPT0oZT1lfHx7fSkubGVuJiYtMSE9PWUubGVuP2UubGVuOjEvMCxuPXZvaWQgMCE9PWUuYWxsb3dlZFRhZ3M/ZS5hbGxvd2VkVGFnczpbXCJiclwiXSxpPVwiLi4uXCIubGVuZ3RoLGE9dC5zcGxpdChtKSxvPVtdLHM9XCJcIixsPTAsYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgdT1hW2NdLGg9dS5tYXRjaCh5KSxmPWgmJmhbMl0udG9Mb3dlckNhc2UoKTtpZihmKS0xIT09bi5pbmRleE9mKGYpJiYoby5wdXNoKHUpLHM9Zik7ZWxzZXt2YXIgcD11Lmxlbmd0aDtpZihsK3A8cilvLnB1c2godSksbCs9cDtlbHNlIGlmKGw8cil7dmFyIGQ9ci1sO3MmJihcImJyXCIhPT1zfHxkPD1pfHxwPD1pKSYmby5wb3AoKSxyPmk/by5wdXNoKHUuc3Vic3RyKDAsZC1pKStcIi4uLlwiKTpvLnB1c2godS5zdWJzdHIoMCxkKSk7YnJlYWt9cz1cIlwifX1yZXR1cm4gby5qb2luKFwiXCIpfTt2YXIgTT17bXU6XCJcXHUwM2JjXCIsYW1wOlwiJlwiLGx0OlwiPFwiLGd0OlwiPlwiLG5ic3A6XCJcXHhhMFwiLHRpbWVzOlwiXFx4ZDdcIixwbHVzbW46XCJcXHhiMVwiLGRlZzpcIlxceGIwXCJ9LFM9LyYoI1xcZCt8I3hbXFxkYS1mQS1GXSt8W2Etel0rKTsvZztmdW5jdGlvbiBFKHQpe3JldHVybiB0LnJlcGxhY2UoUyxmdW5jdGlvbih0LGUpe3JldHVybihcIiNcIj09PWUuY2hhckF0KDApP2Z1bmN0aW9uKHQpe2lmKHQ+MTExNDExMSlyZXR1cm47dmFyIGU9U3RyaW5nLmZyb21Db2RlUG9pbnQ7aWYoZSlyZXR1cm4gZSh0KTt2YXIgcj1TdHJpbmcuZnJvbUNoYXJDb2RlO3JldHVybiB0PD02NTUzNT9yKHQpOnIoNTUyMzIrKHQ+PjEwKSx0JTEwMjQrNTYzMjApfShcInhcIj09PWUuY2hhckF0KDEpP3BhcnNlSW50KGUuc3Vic3RyKDIpLDE2KTpwYXJzZUludChlLnN1YnN0cigxKSwxMCkpOk1bZV0pfHx0fSl9ZnVuY3Rpb24gQyh0LGUscil7dmFyIG4saSxhLG89ci5ob3Jpem9udGFsQWxpZ24scz1yLnZlcnRpY2FsQWxpZ258fFwidG9wXCIsbD10Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjPWUubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBpPVwiYm90dG9tXCI9PT1zP2Z1bmN0aW9uKCl7cmV0dXJuIGwuYm90dG9tLW4uaGVpZ2h0fTpcIm1pZGRsZVwiPT09cz9mdW5jdGlvbigpe3JldHVybiBsLnRvcCsobC5oZWlnaHQtbi5oZWlnaHQpLzJ9OmZ1bmN0aW9uKCl7cmV0dXJuIGwudG9wfSxhPVwicmlnaHRcIj09PW8/ZnVuY3Rpb24oKXtyZXR1cm4gbC5yaWdodC1uLndpZHRofTpcImNlbnRlclwiPT09bz9mdW5jdGlvbigpe3JldHVybiBsLmxlZnQrKGwud2lkdGgtbi53aWR0aCkvMn06ZnVuY3Rpb24oKXtyZXR1cm4gbC5sZWZ0fSxmdW5jdGlvbigpe3JldHVybiBuPXRoaXMubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuc3R5bGUoe3RvcDppKCktYy50b3ArXCJweFwiLGxlZnQ6YSgpLWMubGVmdCtcInB4XCIsXCJ6LWluZGV4XCI6MWUzfSksdGhpc319ci5jb252ZXJ0RW50aXRpZXM9RSxyLmxpbmVDb3VudD1mdW5jdGlvbih0KXtyZXR1cm4gdC5zZWxlY3RBbGwoXCJ0c3Bhbi5saW5lXCIpLnNpemUoKXx8MX0sci5wb3NpdGlvblRleHQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0LmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTtmdW5jdGlvbiBpKGUscil7cmV0dXJuIHZvaWQgMD09PXI/bnVsbD09PShyPXQuYXR0cihlKSkmJih0LmF0dHIoZSwwKSxyPTApOnQuYXR0cihlLHIpLHJ9dmFyIGE9aShcInhcIixlKSxvPWkoXCJ5XCIscik7XCJ0ZXh0XCI9PT10aGlzLm5vZGVOYW1lJiZ0LnNlbGVjdEFsbChcInRzcGFuLmxpbmVcIikuYXR0cih7eDphLHk6b30pfSl9LHIubWFrZUVkaXRhYmxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5nZCxpPWUuZGVsZWdhdGUsYT1uLmRpc3BhdGNoKFwiZWRpdFwiLFwiaW5wdXRcIixcImNhbmNlbFwiKSxvPWl8fHQ7aWYodC5zdHlsZSh7XCJwb2ludGVyLWV2ZW50c1wiOmk/XCJub25lXCI6XCJhbGxcIn0pLDEhPT10LnNpemUoKSl0aHJvdyBuZXcgRXJyb3IoXCJib29cIik7ZnVuY3Rpb24gcygpeyFmdW5jdGlvbigpe3ZhciBpPW4uc2VsZWN0KHIpLnNlbGVjdChcIi5zdmctY29udGFpbmVyXCIpLG89aS5hcHBlbmQoXCJkaXZcIikscz10Lm5vZGUoKS5zdHlsZSxjPXBhcnNlRmxvYXQocy5mb250U2l6ZXx8MTIpLHU9ZS50ZXh0O3ZvaWQgMD09PXUmJih1PXQuYXR0cihcImRhdGEtdW5mb3JtYXR0ZWRcIikpO28uY2xhc3NlZChcInBsdWdpbi1lZGl0YWJsZSBlZGl0YWJsZVwiLCEwKS5zdHlsZSh7cG9zaXRpb246XCJhYnNvbHV0ZVwiLFwiZm9udC1mYW1pbHlcIjpzLmZvbnRGYW1pbHl8fFwiQXJpYWxcIixcImZvbnQtc2l6ZVwiOmMsY29sb3I6ZS5maWxsfHxzLmZpbGx8fFwiYmxhY2tcIixvcGFjaXR5OjEsXCJiYWNrZ3JvdW5kLWNvbG9yXCI6ZS5iYWNrZ3JvdW5kfHxcInRyYW5zcGFyZW50XCIsb3V0bGluZTpcIiNmZmZmZmYzMyAxcHggc29saWRcIixtYXJnaW46Wy1jLzgrMSwwLDAsLTFdLmpvaW4oXCJweCBcIikrXCJweFwiLHBhZGRpbmc6XCIwXCIsXCJib3gtc2l6aW5nXCI6XCJib3JkZXItYm94XCJ9KS5hdHRyKHtjb250ZW50ZWRpdGFibGU6ITB9KS50ZXh0KHUpLmNhbGwoQyh0LGksZSkpLm9uKFwiYmx1clwiLGZ1bmN0aW9uKCl7ci5fZWRpdGluZz0hMSx0LnRleHQodGhpcy50ZXh0Q29udGVudCkuc3R5bGUoe29wYWNpdHk6MX0pO3ZhciBlLGk9bi5zZWxlY3QodGhpcykuYXR0cihcImNsYXNzXCIpOyhlPWk/XCIuXCIraS5zcGxpdChcIiBcIilbMF0rXCItbWF0aC1ncm91cFwiOlwiW2NsYXNzKj0tbWF0aC1ncm91cF1cIikmJm4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpLnNlbGVjdChlKS5zdHlsZSh7b3BhY2l0eTowfSk7dmFyIG89dGhpcy50ZXh0Q29udGVudDtuLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkucmVtb3ZlKCksbi5zZWxlY3QoZG9jdW1lbnQpLm9uKFwibW91c2V1cFwiLG51bGwpLGEuZWRpdC5jYWxsKHQsbyl9KS5vbihcImZvY3VzXCIsZnVuY3Rpb24oKXt2YXIgdD10aGlzO3IuX2VkaXRpbmc9ITAsbi5zZWxlY3QoZG9jdW1lbnQpLm9uKFwibW91c2V1cFwiLGZ1bmN0aW9uKCl7aWYobi5ldmVudC50YXJnZXQ9PT10KXJldHVybiExO2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1vLm5vZGUoKSYmby5ub2RlKCkuYmx1cigpfSl9KS5vbihcImtleXVwXCIsZnVuY3Rpb24oKXsyNz09PW4uZXZlbnQud2hpY2g/KHIuX2VkaXRpbmc9ITEsdC5zdHlsZSh7b3BhY2l0eToxfSksbi5zZWxlY3QodGhpcykuc3R5bGUoe29wYWNpdHk6MH0pLm9uKFwiYmx1clwiLGZ1bmN0aW9uKCl7cmV0dXJuITF9KS50cmFuc2l0aW9uKCkucmVtb3ZlKCksYS5jYW5jZWwuY2FsbCh0LHRoaXMudGV4dENvbnRlbnQpKTooYS5pbnB1dC5jYWxsKHQsdGhpcy50ZXh0Q29udGVudCksbi5zZWxlY3QodGhpcykuY2FsbChDKHQsaSxlKSkpfSkub24oXCJrZXlkb3duXCIsZnVuY3Rpb24oKXsxMz09PW4uZXZlbnQud2hpY2gmJnRoaXMuYmx1cigpfSkuY2FsbChsKX0oKSx0LnN0eWxlKHtvcGFjaXR5OjB9KTt2YXIgaSxzPW8uYXR0cihcImNsYXNzXCIpOyhpPXM/XCIuXCIrcy5zcGxpdChcIiBcIilbMF0rXCItbWF0aC1ncm91cFwiOlwiW2NsYXNzKj0tbWF0aC1ncm91cF1cIikmJm4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpLnNlbGVjdChpKS5zdHlsZSh7b3BhY2l0eTowfSl9ZnVuY3Rpb24gbCh0KXt2YXIgZT10Lm5vZGUoKSxyPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7ci5zZWxlY3ROb2RlQ29udGVudHMoZSk7dmFyIG49d2luZG93LmdldFNlbGVjdGlvbigpO24ucmVtb3ZlQWxsUmFuZ2VzKCksbi5hZGRSYW5nZShyKSxlLmZvY3VzKCl9cmV0dXJuIGUuaW1tZWRpYXRlP3MoKTpvLm9uKFwiY2xpY2tcIixzKSxuLnJlYmluZCh0LGEsXCJvblwiKX19LHtcIi4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIjo2NzMsXCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiOjY3OSxcIi4uL2xpYlwiOjcwMSxkMzoxNTV9XSw3MjY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtmdW5jdGlvbiBpKHQpe3QmJm51bGwhPT10LnRpbWVyJiYoY2xlYXJUaW1lb3V0KHQudGltZXIpLHQudGltZXI9bnVsbCl9ci50aHJvdHRsZT1mdW5jdGlvbih0LGUscil7dmFyIGE9blt0XSxvPURhdGUubm93KCk7aWYoIWEpe2Zvcih2YXIgcyBpbiBuKW5bc10udHM8by02ZTQmJmRlbGV0ZSBuW3NdO2E9blt0XT17dHM6MCx0aW1lcjpudWxsfX1mdW5jdGlvbiBsKCl7cigpLGEudHM9RGF0ZS5ub3coKSxhLm9uRG9uZSYmKGEub25Eb25lKCksYS5vbkRvbmU9bnVsbCl9aShhKSxvPmEudHMrZT9sKCk6YS50aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bCgpLGEudGltZXI9bnVsbH0sZSl9LHIuZG9uZT1mdW5jdGlvbih0KXt2YXIgZT1uW3RdO3JldHVybiBlJiZlLnRpbWVyP25ldyBQcm9taXNlKGZ1bmN0aW9uKHQpe3ZhciByPWUub25Eb25lO2Uub25Eb25lPWZ1bmN0aW9uKCl7ciYmcigpLHQoKSxlLm9uRG9uZT1udWxsfX0pOlByb21pc2UucmVzb2x2ZSgpfSxyLmNsZWFyPWZ1bmN0aW9uKHQpe2lmKHQpaShuW3RdKSxkZWxldGUgblt0XTtlbHNlIGZvcih2YXIgZSBpbiBuKXIuY2xlYXIoZSl9fSx7fV0sNzI3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHQ+MClyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5MTjEwO3ZhciByPU1hdGgubG9nKE1hdGgubWluKGVbMF0sZVsxXSkpL01hdGguTE4xMDtyZXR1cm4gbihyKXx8KHI9TWF0aC5sb2coTWF0aC5tYXgoZVswXSxlWzFdKSkvTWF0aC5MTjEwLTYpLHJ9fSx7XCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDcyODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUuZXhwb3J0cz17fSxpPXQoXCIuLi9wbG90cy9nZW8vY29uc3RhbnRzXCIpLmxvY2F0aW9ubW9kZVRvTGF5ZXIsYT10KFwidG9wb2pzb24tY2xpZW50XCIpLmZlYXR1cmU7bi5nZXRUb3BvanNvbk5hbWU9ZnVuY3Rpb24odCl7cmV0dXJuW3Quc2NvcGUucmVwbGFjZSgvIC9nLFwiLVwiKSxcIl9cIix0LnJlc29sdXRpb24udG9TdHJpbmcoKSxcIm1cIl0uam9pbihcIlwiKX0sbi5nZXRUb3BvanNvblBhdGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlK1wiLmpzb25cIn0sbi5nZXRUb3BvanNvbkZlYXR1cmVzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9aVt0LmxvY2F0aW9ubW9kZV0sbj1lLm9iamVjdHNbcl07cmV0dXJuIGEoZSxuKS5mZWF0dXJlc319LHtcIi4uL3Bsb3RzL2dlby9jb25zdGFudHNcIjo3NzcsXCJ0b3BvanNvbi1jbGllbnRcIjo1MjV9XSw3Mjk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6XCJsb2NhbGVcIixuYW1lOlwiZW4tVVNcIixkaWN0aW9uYXJ5OntcIkNsaWNrIHRvIGVudGVyIENvbG9yc2NhbGUgdGl0bGVcIjpcIkNsaWNrIHRvIGVudGVyIENvbG9yc2NhbGUgdGl0bGVcIn0sZm9ybWF0OntkYXRlOlwiJW0vJWQvJVlcIn19fSx7fV0sNzMwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwibG9jYWxlXCIsbmFtZTpcImVuXCIsZGljdGlvbmFyeTp7XCJDbGljayB0byBlbnRlciBDb2xvcnNjYWxlIHRpdGxlXCI6XCJDbGljayB0byBlbnRlciBDb2xvdXJzY2FsZSB0aXRsZVwifSxmb3JtYXQ6e2RheXM6W1wiU3VuZGF5XCIsXCJNb25kYXlcIixcIlR1ZXNkYXlcIixcIldlZG5lc2RheVwiLFwiVGh1cnNkYXlcIixcIkZyaWRheVwiLFwiU2F0dXJkYXlcIl0sc2hvcnREYXlzOltcIlN1blwiLFwiTW9uXCIsXCJUdWVcIixcIldlZFwiLFwiVGh1XCIsXCJGcmlcIixcIlNhdFwiXSxtb250aHM6W1wiSmFudWFyeVwiLFwiRmVicnVhcnlcIixcIk1hcmNoXCIsXCJBcHJpbFwiLFwiTWF5XCIsXCJKdW5lXCIsXCJKdWx5XCIsXCJBdWd1c3RcIixcIlNlcHRlbWJlclwiLFwiT2N0b2JlclwiLFwiTm92ZW1iZXJcIixcIkRlY2VtYmVyXCJdLHNob3J0TW9udGhzOltcIkphblwiLFwiRmViXCIsXCJNYXJcIixcIkFwclwiLFwiTWF5XCIsXCJKdW5cIixcIkp1bFwiLFwiQXVnXCIsXCJTZXBcIixcIk9jdFwiLFwiTm92XCIsXCJEZWNcIl0scGVyaW9kczpbXCJBTVwiLFwiUE1cIl0sZGF0ZVRpbWU6XCIlYSAlYiAlZSAlWCAlWVwiLGRhdGU6XCIlZC8lbS8lWVwiLHRpbWU6XCIlSDolTTolU1wiLGRlY2ltYWw6XCIuXCIsdGhvdXNhbmRzOlwiLFwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbXCIkXCIsXCJcIl0seWVhcjpcIiVZXCIsbW9udGg6XCIlYiAlWVwiLGRheU1vbnRoOlwiJWIgJS1kXCIsZGF5TW9udGhZZWFyOlwiJWIgJS1kLCAlWVwifX19LHt9XSw3MzE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vcmVnaXN0cnlcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLGk9bi5sYXlvdXRBcnJheUNvbnRhaW5lcnMsYT1uLmxheW91dEFycmF5UmVnZXhlcyxvPXQuc3BsaXQoXCJbXCIpWzBdLHM9MDtzPGEubGVuZ3RoO3MrKylpZigocj10Lm1hdGNoKGFbc10pKSYmMD09PXIuaW5kZXgpe2U9clswXTticmVha31pZihlfHwoZT1pW2kuaW5kZXhPZihvKV0pLCFlKXJldHVybiExO3ZhciBsPXQuc3Vic3RyKGUubGVuZ3RoKTtyZXR1cm4gbD8hIShyPWwubWF0Y2goL15cXFsoMHxbMS05XVswLTldKilcXF0oXFwuKC4rKSk/JC8pKSYme2FycmF5OmUsaW5kZXg6TnVtYmVyKHJbMV0pLHByb3BlcnR5OnJbM118fFwiXCJ9OnthcnJheTplLGluZGV4OlwiXCIscHJvcGVydHk6XCJcIn19fSx7XCIuLi9yZWdpc3RyeVwiOjgyOX1dLDczMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9saWJcIiksaT1uLmV4dGVuZEZsYXQsYT1uLmlzUGxhaW5PYmplY3Qsbz17dmFsVHlwZTpcImZsYWdsaXN0XCIsZXh0cmFzOltcIm5vbmVcIl0sZmxhZ3M6W1wiY2FsY1wiLFwiY2xlYXJBeGlzVHlwZXNcIixcInBsb3RcIixcInN0eWxlXCIsXCJtYXJrZXJTaXplXCIsXCJjb2xvcmJhcnNcIl19LHM9e3ZhbFR5cGU6XCJmbGFnbGlzdFwiLGV4dHJhczpbXCJub25lXCJdLGZsYWdzOltcImNhbGNcIixcInBsb3RcIixcImxlZ2VuZFwiLFwidGlja3NcIixcImF4cmFuZ2VcIixcImxheW91dHN0eWxlXCIsXCJtb2RlYmFyXCIsXCJjYW1lcmFcIixcImFycmF5ZHJhd1wiXX0sbD1vLmZsYWdzLnNsaWNlKCkuY29uY2F0KFtcImZ1bGxSZXBsb3RcIl0pLGM9cy5mbGFncy5zbGljZSgpLmNvbmNhdChcImxheW91dFJlcGxvdFwiKTtmdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT17fSxyPTA7cjx0Lmxlbmd0aDtyKyspZVt0W3JdXT0hMTtyZXR1cm4gZX1mdW5jdGlvbiBoKHQsZSxyKXt2YXIgbj1pKHt9LHQpO2Zvcih2YXIgbyBpbiBuKXt2YXIgcz1uW29dO2EocykmJihuW29dPWYocyxlLHIsbykpfXJldHVyblwiZnJvbS1yb290XCI9PT1yJiYobi5lZGl0VHlwZT1lKSxufWZ1bmN0aW9uIGYodCxlLHIsbil7aWYodC52YWxUeXBlKXt2YXIgYT1pKHt9LHQpO2lmKGEuZWRpdFR5cGU9ZSxBcnJheS5pc0FycmF5KHQuaXRlbXMpKXthLml0ZW1zPW5ldyBBcnJheSh0Lml0ZW1zLmxlbmd0aCk7Zm9yKHZhciBvPTA7bzx0Lml0ZW1zLmxlbmd0aDtvKyspYS5pdGVtc1tvXT1mKHQuaXRlbXNbb10sZSxcImZyb20tcm9vdFwiKX1yZXR1cm4gYX1yZXR1cm4gaCh0LGUsXCJfXCI9PT1uLmNoYXJBdCgwKT9cIm5lc3RlZFwiOlwiZnJvbS1yb290XCIpfWUuZXhwb3J0cz17dHJhY2VzOm8sbGF5b3V0OnMsdHJhY2VGbGFnczpmdW5jdGlvbigpe3JldHVybiB1KGwpfSxsYXlvdXRGbGFnczpmdW5jdGlvbigpe3JldHVybiB1KGMpfSx1cGRhdGU6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmVkaXRUeXBlO2lmKHImJlwibm9uZVwiIT09cilmb3IodmFyIG49ci5zcGxpdChcIitcIiksaT0wO2k8bi5sZW5ndGg7aSsrKXRbbltpXV09ITB9LG92ZXJyaWRlQWxsOmh9fSx7XCIuLi9saWJcIjo3MDF9XSw3MzM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiZ2wtbWF0NC9mcm9tUXVhdFwiKSxhPXQoXCIuLi9yZWdpc3RyeVwiKSxvPXQoXCIuLi9saWJcIikscz10KFwiLi4vcGxvdHMvcGxvdHNcIiksbD10KFwiLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCIpLGM9dChcIi4uL2NvbXBvbmVudHMvY29sb3JcIiksdT1sLmNsZWFuSWQsaD1sLmdldEZyb21UcmFjZSxmPWEudHJhY2VJcztmdW5jdGlvbiBwKHQsZSl7dmFyIHI9dFtlXSxuPWUuY2hhckF0KDApO3ImJlwicGFwZXJcIiE9PXImJih0W2VdPXUocixuKSl9ZnVuY3Rpb24gZCh0KXtmdW5jdGlvbiBlKGUscil7dmFyIG49dFtlXSxpPXQudGl0bGUmJnQudGl0bGVbcl07biYmIWkmJih0LnRpdGxlfHwodC50aXRsZT17fSksdC50aXRsZVtyXT10W2VdLGRlbGV0ZSB0W2VdKX10JiYoXCJzdHJpbmdcIiE9dHlwZW9mIHQudGl0bGUmJlwibnVtYmVyXCIhPXR5cGVvZiB0LnRpdGxlfHwodC50aXRsZT17dGV4dDp0LnRpdGxlfSksZShcInRpdGxlZm9udFwiLFwiZm9udFwiKSxlKFwidGl0bGVwb3NpdGlvblwiLFwicG9zaXRpb25cIiksZShcInRpdGxlc2lkZVwiLFwic2lkZVwiKSxlKFwidGl0bGVvZmZzZXRcIixcIm9mZnNldFwiKSl9ZnVuY3Rpb24gZyh0KXtpZighby5pc1BsYWluT2JqZWN0KHQpKXJldHVybiExO3ZhciBlPXQubmFtZTtyZXR1cm4gZGVsZXRlIHQubmFtZSxkZWxldGUgdC5zaG93bGVnZW5kLChcInN0cmluZ1wiPT10eXBlb2YgZXx8XCJudW1iZXJcIj09dHlwZW9mIGUpJiZTdHJpbmcoZSl9ZnVuY3Rpb24gdih0LGUscixuKXtpZihyJiYhbilyZXR1cm4gdDtpZihuJiYhcilyZXR1cm4gZTtpZighdC50cmltKCkpcmV0dXJuIGU7aWYoIWUudHJpbSgpKXJldHVybiB0O3ZhciBpLGE9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpO2ZvcihpPTA7aTxhJiZ0LmNoYXJBdChpKT09PWUuY2hhckF0KGkpO2krKyk7cmV0dXJuIHQuc3Vic3RyKDAsaSkudHJpbSgpfWZ1bmN0aW9uIG0odCl7dmFyIGU9XCJtaWRkbGVcIixyPVwiY2VudGVyXCI7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQmJigtMSE9PXQuaW5kZXhPZihcInRvcFwiKT9lPVwidG9wXCI6LTEhPT10LmluZGV4T2YoXCJib3R0b21cIikmJihlPVwiYm90dG9tXCIpLC0xIT09dC5pbmRleE9mKFwibGVmdFwiKT9yPVwibGVmdFwiOi0xIT09dC5pbmRleE9mKFwicmlnaHRcIikmJihyPVwicmlnaHRcIikpLGUrXCIgXCIrcn1mdW5jdGlvbiB5KHQsZSl7cmV0dXJuIGUgaW4gdCYmXCJvYmplY3RcIj09dHlwZW9mIHRbZV0mJjA9PT1PYmplY3Qua2V5cyh0W2VdKS5sZW5ndGh9ci5jbGVhclByb21pc2VRdWV1ZT1mdW5jdGlvbih0KXtBcnJheS5pc0FycmF5KHQuX3Byb21pc2VzKSYmdC5fcHJvbWlzZXMubGVuZ3RoPjAmJm8ubG9nKFwiQ2xlYXJpbmcgcHJldmlvdXMgcmVqZWN0ZWQgcHJvbWlzZXMgZnJvbSBxdWV1ZS5cIiksdC5fcHJvbWlzZXM9W119LHIuY2xlYW5MYXlvdXQ9ZnVuY3Rpb24odCl7dmFyIGUsbjt0fHwodD17fSksdC54YXhpczEmJih0LnhheGlzfHwodC54YXhpcz10LnhheGlzMSksZGVsZXRlIHQueGF4aXMxKSx0LnlheGlzMSYmKHQueWF4aXN8fCh0LnlheGlzPXQueWF4aXMxKSxkZWxldGUgdC55YXhpczEpLHQuc2NlbmUxJiYodC5zY2VuZXx8KHQuc2NlbmU9dC5zY2VuZTEpLGRlbGV0ZSB0LnNjZW5lMSk7dmFyIGE9KHMuc3VicGxvdHNSZWdpc3RyeS5jYXJ0ZXNpYW58fHt9KS5hdHRyUmVnZXgsbD0ocy5zdWJwbG90c1JlZ2lzdHJ5LnBvbGFyfHx7fSkuYXR0clJlZ2V4LGg9KHMuc3VicGxvdHNSZWdpc3RyeS50ZXJuYXJ5fHx7fSkuYXR0clJlZ2V4LGY9KHMuc3VicGxvdHNSZWdpc3RyeS5nbDNkfHx7fSkuYXR0clJlZ2V4LGc9T2JqZWN0LmtleXModCk7Zm9yKGU9MDtlPGcubGVuZ3RoO2UrKyl7dmFyIHY9Z1tlXTtpZihhJiZhLnRlc3Qodikpe3ZhciBtPXRbdl07bS5hbmNob3ImJlwiZnJlZVwiIT09bS5hbmNob3ImJihtLmFuY2hvcj11KG0uYW5jaG9yKSksbS5vdmVybGF5aW5nJiYobS5vdmVybGF5aW5nPXUobS5vdmVybGF5aW5nKSksbS50eXBlfHwobS5pc2RhdGU/bS50eXBlPVwiZGF0ZVwiOm0uaXNsb2c/bS50eXBlPVwibG9nXCI6ITE9PT1tLmlzZGF0ZSYmITE9PT1tLmlzbG9nJiYobS50eXBlPVwibGluZWFyXCIpKSxcIndpdGh6ZXJvXCIhPT1tLmF1dG9yYW5nZSYmXCJ0b3plcm9cIiE9PW0uYXV0b3JhbmdlfHwobS5hdXRvcmFuZ2U9ITAsbS5yYW5nZW1vZGU9XCJ0b3plcm9cIiksZGVsZXRlIG0uaXNsb2csZGVsZXRlIG0uaXNkYXRlLGRlbGV0ZSBtLmNhdGVnb3JpZXMseShtLFwiZG9tYWluXCIpJiZkZWxldGUgbS5kb21haW4sdm9pZCAwIT09bS5hdXRvdGljayYmKHZvaWQgMD09PW0udGlja21vZGUmJihtLnRpY2ttb2RlPW0uYXV0b3RpY2s/XCJhdXRvXCI6XCJsaW5lYXJcIiksZGVsZXRlIG0uYXV0b3RpY2spLGQobSl9ZWxzZSBpZihsJiZsLnRlc3Qodikpe2QodFt2XS5yYWRpYWxheGlzKX1lbHNlIGlmKGgmJmgudGVzdCh2KSl7dmFyIHg9dFt2XTtkKHguYWF4aXMpLGQoeC5iYXhpcyksZCh4LmNheGlzKX1lbHNlIGlmKGYmJmYudGVzdCh2KSl7dmFyIGI9dFt2XSxfPWIuY2FtZXJhcG9zaXRpb247aWYoQXJyYXkuaXNBcnJheShfKSYmND09PV9bMF0ubGVuZ3RoKXt2YXIgdz1fWzBdLGs9X1sxXSxBPV9bMl0sVD1pKFtdLHcpLE09W107Zm9yKG49MDtuPDM7KytuKU1bbl09a1tuXStBKlRbMis0Km5dO2IuY2FtZXJhPXtleWU6e3g6TVswXSx5Ok1bMV0sejpNWzJdfSxjZW50ZXI6e3g6a1swXSx5OmtbMV0sejprWzJdfSx1cDp7eDowLHk6MCx6OjF9fSxkZWxldGUgYi5jYW1lcmFwb3NpdGlvbn1kKGIueGF4aXMpLGQoYi55YXhpcyksZChiLnpheGlzKX19dmFyIFM9QXJyYXkuaXNBcnJheSh0LmFubm90YXRpb25zKT90LmFubm90YXRpb25zLmxlbmd0aDowO2ZvcihlPTA7ZTxTO2UrKyl7dmFyIEU9dC5hbm5vdGF0aW9uc1tlXTtvLmlzUGxhaW5PYmplY3QoRSkmJihFLnJlZiYmKFwicGFwZXJcIj09PUUucmVmPyhFLnhyZWY9XCJwYXBlclwiLEUueXJlZj1cInBhcGVyXCIpOlwiZGF0YVwiPT09RS5yZWYmJihFLnhyZWY9XCJ4XCIsRS55cmVmPVwieVwiKSxkZWxldGUgRS5yZWYpLHAoRSxcInhyZWZcIikscChFLFwieXJlZlwiKSl9dmFyIEM9QXJyYXkuaXNBcnJheSh0LnNoYXBlcyk/dC5zaGFwZXMubGVuZ3RoOjA7Zm9yKGU9MDtlPEM7ZSsrKXt2YXIgTD10LnNoYXBlc1tlXTtvLmlzUGxhaW5PYmplY3QoTCkmJihwKEwsXCJ4cmVmXCIpLHAoTCxcInlyZWZcIikpfXZhciB6PXQubGVnZW5kO3JldHVybiB6JiYoei54PjM/KHoueD0xLjAyLHoueGFuY2hvcj1cImxlZnRcIik6ei54PC0yJiYoei54PS0uMDIsei54YW5jaG9yPVwicmlnaHRcIiksei55PjM/KHoueT0xLjAyLHoueWFuY2hvcj1cImJvdHRvbVwiKTp6Lnk8LTImJih6Lnk9LS4wMix6LnlhbmNob3I9XCJ0b3BcIikpLGQodCksXCJyb3RhdGVcIj09PXQuZHJhZ21vZGUmJih0LmRyYWdtb2RlPVwib3JiaXRcIiksYy5jbGVhbih0KSx0LnRlbXBsYXRlJiZ0LnRlbXBsYXRlLmxheW91dCYmci5jbGVhbkxheW91dCh0LnRlbXBsYXRlLmxheW91dCksdH0sci5jbGVhbkRhdGE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciBuLGk9dFtlXTtpZihcImhpc3RvZ3JhbXlcIj09PWkudHlwZSYmXCJ4Ymluc1wiaW4gaSYmIShcInliaW5zXCJpbiBpKSYmKGkueWJpbnM9aS54YmlucyxkZWxldGUgaS54YmlucyksaS5lcnJvcl95JiZcIm9wYWNpdHlcImluIGkuZXJyb3JfeSl7dmFyIGw9Yy5kZWZhdWx0cyxoPWkuZXJyb3JfeS5jb2xvcnx8KGYoaSxcImJhclwiKT9jLmRlZmF1bHRMaW5lOmxbZSVsLmxlbmd0aF0pO2kuZXJyb3JfeS5jb2xvcj1jLmFkZE9wYWNpdHkoYy5yZ2IoaCksYy5vcGFjaXR5KGgpKmkuZXJyb3JfeS5vcGFjaXR5KSxkZWxldGUgaS5lcnJvcl95Lm9wYWNpdHl9aWYoXCJiYXJkaXJcImluIGkmJihcImhcIiE9PWkuYmFyZGlyfHwhZihpLFwiYmFyXCIpJiZcImhpc3RvZ3JhbVwiIT09aS50eXBlLnN1YnN0cigwLDkpfHwoaS5vcmllbnRhdGlvbj1cImhcIixyLnN3YXBYWURhdGEoaSkpLGRlbGV0ZSBpLmJhcmRpciksXCJoaXN0b2dyYW15XCI9PT1pLnR5cGUmJnIuc3dhcFhZRGF0YShpKSxcImhpc3RvZ3JhbXhcIiE9PWkudHlwZSYmXCJoaXN0b2dyYW15XCIhPT1pLnR5cGV8fChpLnR5cGU9XCJoaXN0b2dyYW1cIiksXCJzY2xcImluIGkmJiEoXCJjb2xvcnNjYWxlXCJpbiBpKSYmKGkuY29sb3JzY2FsZT1pLnNjbCxkZWxldGUgaS5zY2wpLFwicmV2ZXJzZXNjbFwiaW4gaSYmIShcInJldmVyc2VzY2FsZVwiaW4gaSkmJihpLnJldmVyc2VzY2FsZT1pLnJldmVyc2VzY2wsZGVsZXRlIGkucmV2ZXJzZXNjbCksaS54YXhpcyYmKGkueGF4aXM9dShpLnhheGlzLFwieFwiKSksaS55YXhpcyYmKGkueWF4aXM9dShpLnlheGlzLFwieVwiKSksZihpLFwiZ2wzZFwiKSYmaS5zY2VuZSYmKGkuc2NlbmU9cy5zdWJwbG90c1JlZ2lzdHJ5LmdsM2QuY2xlYW5JZChpLnNjZW5lKSksIWYoaSxcInBpZVwiKSYmIWYoaSxcImJhclwiKSYmXCJ3YXRlcmZhbGxcIiE9PWkudHlwZSlpZihBcnJheS5pc0FycmF5KGkudGV4dHBvc2l0aW9uKSlmb3Iobj0wO248aS50ZXh0cG9zaXRpb24ubGVuZ3RoO24rKylpLnRleHRwb3NpdGlvbltuXT1tKGkudGV4dHBvc2l0aW9uW25dKTtlbHNlIGkudGV4dHBvc2l0aW9uJiYoaS50ZXh0cG9zaXRpb249bShpLnRleHRwb3NpdGlvbikpO3ZhciBwPWEuZ2V0TW9kdWxlKGkpO2lmKHAmJnAuY29sb3JiYXIpe3ZhciB4PXAuY29sb3JiYXIuY29udGFpbmVyLGI9eD9pW3hdOmk7YiYmYi5jb2xvcnNjYWxlJiYoXCJZSUduQnVcIj09PWIuY29sb3JzY2FsZSYmKGIuY29sb3JzY2FsZT1cIllsR25CdVwiKSxcIllJT3JSZFwiPT09Yi5jb2xvcnNjYWxlJiYoYi5jb2xvcnNjYWxlPVwiWWxPclJkXCIpKX1pZihcInN1cmZhY2VcIj09PWkudHlwZSYmby5pc1BsYWluT2JqZWN0KGkuY29udG91cnMpKXt2YXIgXz1bXCJ4XCIsXCJ5XCIsXCJ6XCJdO2ZvcihuPTA7bjxfLmxlbmd0aDtuKyspe3ZhciB3PWkuY29udG91cnNbX1tuXV07by5pc1BsYWluT2JqZWN0KHcpJiYody5oaWdobGlnaHRDb2xvciYmKHcuaGlnaGxpZ2h0Y29sb3I9dy5oaWdobGlnaHRDb2xvcixkZWxldGUgdy5oaWdobGlnaHRDb2xvciksdy5oaWdobGlnaHRXaWR0aCYmKHcuaGlnaGxpZ2h0d2lkdGg9dy5oaWdobGlnaHRXaWR0aCxkZWxldGUgdy5oaWdobGlnaHRXaWR0aCkpfX1pZihcImNhbmRsZXN0aWNrXCI9PT1pLnR5cGV8fFwib2hsY1wiPT09aS50eXBlKXt2YXIgaz0hMSE9PShpLmluY3JlYXNpbmd8fHt9KS5zaG93bGVnZW5kLEE9ITEhPT0oaS5kZWNyZWFzaW5nfHx7fSkuc2hvd2xlZ2VuZCxUPWcoaS5pbmNyZWFzaW5nKSxNPWcoaS5kZWNyZWFzaW5nKTtpZighMSE9PVQmJiExIT09TSl7dmFyIFM9dihULE0sayxBKTtTJiYoaS5uYW1lPVMpfWVsc2UhVCYmIU18fGkubmFtZXx8KGkubmFtZT1UfHxNKX1pZihBcnJheS5pc0FycmF5KGkudHJhbnNmb3Jtcykpe3ZhciBFPWkudHJhbnNmb3Jtcztmb3Iobj0wO248RS5sZW5ndGg7bisrKXt2YXIgQz1FW25dO2lmKG8uaXNQbGFpbk9iamVjdChDKSlzd2l0Y2goQy50eXBlKXtjYXNlXCJmaWx0ZXJcIjpDLmZpbHRlcnNyYyYmKEMudGFyZ2V0PUMuZmlsdGVyc3JjLGRlbGV0ZSBDLmZpbHRlcnNyYyksQy5jYWxlbmRhciYmKEMudmFsdWVjYWxlbmRhcnx8KEMudmFsdWVjYWxlbmRhcj1DLmNhbGVuZGFyKSxkZWxldGUgQy5jYWxlbmRhcik7YnJlYWs7Y2FzZVwiZ3JvdXBieVwiOmlmKEMuc3R5bGVzPUMuc3R5bGVzfHxDLnN0eWxlLEMuc3R5bGVzJiYhQXJyYXkuaXNBcnJheShDLnN0eWxlcykpe3ZhciBMPUMuc3R5bGVzLHo9T2JqZWN0LmtleXMoTCk7Qy5zdHlsZXM9W107Zm9yKHZhciBPPTA7Tzx6Lmxlbmd0aDtPKyspQy5zdHlsZXMucHVzaCh7dGFyZ2V0OnpbT10sdmFsdWU6TFt6W09dXX0pfX19fXkoaSxcImxpbmVcIikmJmRlbGV0ZSBpLmxpbmUsXCJtYXJrZXJcImluIGkmJih5KGkubWFya2VyLFwibGluZVwiKSYmZGVsZXRlIGkubWFya2VyLmxpbmUseShpLFwibWFya2VyXCIpJiZkZWxldGUgaS5tYXJrZXIpLGMuY2xlYW4oaSksaS5hdXRvYmlueCYmKGRlbGV0ZSBpLmF1dG9iaW54LGRlbGV0ZSBpLnhiaW5zKSxpLmF1dG9iaW55JiYoZGVsZXRlIGkuYXV0b2JpbnksZGVsZXRlIGkueWJpbnMpLGQoaSksaS5jb2xvcmJhciYmZChpLmNvbG9yYmFyKSxpLm1hcmtlciYmaS5tYXJrZXIuY29sb3JiYXImJmQoaS5tYXJrZXIuY29sb3JiYXIpLGkubGluZSYmaS5saW5lLmNvbG9yYmFyJiZkKGkubGluZS5jb2xvcmJhciksaS5hYXhpcyYmZChpLmFheGlzKSxpLmJheGlzJiZkKGkuYmF4aXMpfX0sci5zd2FwWFlEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKG8uc3dhcEF0dHJzKHQsW1wiP1wiLFwiPzBcIixcImQ/XCIsXCI/Ymluc1wiLFwibmJpbnM/XCIsXCJhdXRvYmluP1wiLFwiP3NyY1wiLFwiZXJyb3JfP1wiXSksQXJyYXkuaXNBcnJheSh0LnopJiZBcnJheS5pc0FycmF5KHQuelswXSkmJih0LnRyYW5zcG9zZT9kZWxldGUgdC50cmFuc3Bvc2U6dC50cmFuc3Bvc2U9ITApLHQuZXJyb3JfeCYmdC5lcnJvcl95KXt2YXIgcj10LmVycm9yX3ksbj1cImNvcHlfeXN0eWxlXCJpbiByP3IuY29weV95c3R5bGU6IShyLmNvbG9yfHxyLnRoaWNrbmVzc3x8ci53aWR0aCk7by5zd2FwQXR0cnModCxbXCJlcnJvcl8/LmNvcHlfeXN0eWxlXCJdKSxuJiZvLnN3YXBBdHRycyh0LFtcImVycm9yXz8uY29sb3JcIixcImVycm9yXz8udGhpY2tuZXNzXCIsXCJlcnJvcl8/LndpZHRoXCJdKX1pZihcInN0cmluZ1wiPT10eXBlb2YgdC5ob3ZlcmluZm8pe3ZhciBpPXQuaG92ZXJpbmZvLnNwbGl0KFwiK1wiKTtmb3IoZT0wO2U8aS5sZW5ndGg7ZSsrKVwieFwiPT09aVtlXT9pW2VdPVwieVwiOlwieVwiPT09aVtlXSYmKGlbZV09XCJ4XCIpO3QuaG92ZXJpbmZvPWkuam9pbihcIitcIil9fSxyLmNvZXJjZVRyYWNlSW5kaWNlcz1mdW5jdGlvbih0LGUpe2lmKG4oZSkpcmV0dXJuW2VdO2lmKCFBcnJheS5pc0FycmF5KGUpfHwhZS5sZW5ndGgpcmV0dXJuIHQuZGF0YS5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pO2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgcj1bXSxpPTA7aTxlLmxlbmd0aDtpKyspby5pc0luZGV4KGVbaV0sdC5kYXRhLmxlbmd0aCk/ci5wdXNoKGVbaV0pOm8ud2FybihcInRyYWNlIGluZGV4IChcIixlW2ldLFwiKSBpcyBub3QgYSBudW1iZXIgb3IgaXMgb3V0IG9mIGJvdW5kc1wiKTtyZXR1cm4gcn1yZXR1cm4gZX0sci5tYW5hZ2VBcnJheUNvbnRhaW5lcnM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQub2JqLGE9dC5wYXJ0cyxzPWEubGVuZ3RoLGw9YVtzLTFdLGM9bihsKTtpZihjJiZudWxsPT09ZSl7dmFyIHU9YS5zbGljZSgwLHMtMSkuam9pbihcIi5cIik7by5uZXN0ZWRQcm9wZXJ0eShpLHUpLmdldCgpLnNwbGljZShsLDEpfWVsc2UgYyYmdm9pZCAwPT09dC5nZXQoKT8odm9pZCAwPT09dC5nZXQoKSYmKHJbdC5hc3RyXT1udWxsKSx0LnNldChlKSk6dC5zZXQoZSl9O3ZhciB4PS8oXFwuW15cXFtcXF1cXC5dK3xcXFtbXlxcW1xcXVxcLl0rXFxdKSQvO2Z1bmN0aW9uIGIodCl7dmFyIGU9dC5zZWFyY2goeCk7aWYoZT4wKXJldHVybiB0LnN1YnN0cigwLGUpfXIuaGFzUGFyZW50PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWIoZSk7cjspe2lmKHIgaW4gdClyZXR1cm4hMDtyPWIocil9cmV0dXJuITF9O3ZhciBfPVtcInhcIixcInlcIixcInpcIl07ci5jbGVhckF4aXNUeXBlcz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspZm9yKHZhciBpPXQuX2Z1bGxEYXRhW25dLGE9MDthPDM7YSsrKXt2YXIgcz1oKHQsaSxfW2FdKTtpZihzJiZcImxvZ1wiIT09cy50eXBlKXt2YXIgbD1zLl9uYW1lLGM9cy5faWQuc3Vic3RyKDEpO2lmKFwic2NlbmVcIj09PWMuc3Vic3RyKDAsNSkpe2lmKHZvaWQgMCE9PXJbY10pY29udGludWU7bD1jK1wiLlwiK2x9dmFyIHU9bCtcIi50eXBlXCI7dm9pZCAwPT09cltsXSYmdm9pZCAwPT09clt1XSYmby5uZXN0ZWRQcm9wZXJ0eSh0LmxheW91dCx1KS5zZXQobnVsbCl9fX19LHtcIi4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi9saWJcIjo3MDEsXCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIjo3NTIsXCIuLi9wbG90cy9wbG90c1wiOjgxMCxcIi4uL3JlZ2lzdHJ5XCI6ODI5LFwiZmFzdC1pc251bWVyaWNcIjoyMjIsXCJnbC1tYXQ0L2Zyb21RdWF0XCI6MjU5fV0sNzM0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vcGxvdF9hcGlcIik7ci5wbG90PW4ucGxvdCxyLm5ld1Bsb3Q9bi5uZXdQbG90LHIucmVzdHlsZT1uLnJlc3R5bGUsci5yZWxheW91dD1uLnJlbGF5b3V0LHIucmVkcmF3PW4ucmVkcmF3LHIudXBkYXRlPW4udXBkYXRlLHIuX2d1aVJlc3R5bGU9bi5fZ3VpUmVzdHlsZSxyLl9ndWlSZWxheW91dD1uLl9ndWlSZWxheW91dCxyLl9ndWlVcGRhdGU9bi5fZ3VpVXBkYXRlLHIuX3N0b3JlRGlyZWN0R1VJRWRpdD1uLl9zdG9yZURpcmVjdEdVSUVkaXQsci5yZWFjdD1uLnJlYWN0LHIuZXh0ZW5kVHJhY2VzPW4uZXh0ZW5kVHJhY2VzLHIucHJlcGVuZFRyYWNlcz1uLnByZXBlbmRUcmFjZXMsci5hZGRUcmFjZXM9bi5hZGRUcmFjZXMsci5kZWxldGVUcmFjZXM9bi5kZWxldGVUcmFjZXMsci5tb3ZlVHJhY2VzPW4ubW92ZVRyYWNlcyxyLnB1cmdlPW4ucHVyZ2Usci5hZGRGcmFtZXM9bi5hZGRGcmFtZXMsci5kZWxldGVGcmFtZXM9bi5kZWxldGVGcmFtZXMsci5hbmltYXRlPW4uYW5pbWF0ZSxyLnNldFBsb3RDb25maWc9bi5zZXRQbG90Q29uZmlnLHIudG9JbWFnZT10KFwiLi90b19pbWFnZVwiKSxyLnZhbGlkYXRlPXQoXCIuL3ZhbGlkYXRlXCIpLHIuZG93bmxvYWRJbWFnZT10KFwiLi4vc25hcHNob3QvZG93bmxvYWRcIik7dmFyIGk9dChcIi4vdGVtcGxhdGVfYXBpXCIpO3IubWFrZVRlbXBsYXRlPWkubWFrZVRlbXBsYXRlLHIudmFsaWRhdGVUZW1wbGF0ZT1pLnZhbGlkYXRlVGVtcGxhdGV9LHtcIi4uL3NuYXBzaG90L2Rvd25sb2FkXCI6ODMxLFwiLi9wbG90X2FwaVwiOjczNixcIi4vdGVtcGxhdGVfYXBpXCI6NzQxLFwiLi90b19pbWFnZVwiOjc0MixcIi4vdmFsaWRhdGVcIjo3NDN9XSw3MzU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vbGliL2lzX3BsYWluX29iamVjdFwiKSxpPXQoXCIuLi9saWIvbm9vcFwiKSxhPXQoXCIuLi9saWIvbG9nZ2Vyc1wiKSxvPXQoXCIuLi9saWIvc2VhcmNoXCIpLnNvcnRlckFzYyxzPXQoXCIuLi9yZWdpc3RyeVwiKTtyLmNvbnRhaW5lckFycmF5TWF0Y2g9dChcIi4vY29udGFpbmVyX2FycmF5X21hdGNoXCIpO3ZhciBsPXIuaXNBZGRWYWw9ZnVuY3Rpb24odCl7cmV0dXJuXCJhZGRcIj09PXR8fG4odCl9LGM9ci5pc1JlbW92ZVZhbD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09PXR8fFwicmVtb3ZlXCI9PT10fTtyLmFwcGx5Q29udGFpbmVyQXJyYXlDaGFuZ2VzPWZ1bmN0aW9uKHQsZSxyLG4sdSl7dmFyIGg9ZS5hc3RyLGY9cy5nZXRDb21wb25lbnRNZXRob2QoaCxcInN1cHBseUxheW91dERlZmF1bHRzXCIpLHA9cy5nZXRDb21wb25lbnRNZXRob2QoaCxcImRyYXdcIiksZD1zLmdldENvbXBvbmVudE1ldGhvZChoLFwiZHJhd09uZVwiKSxnPW4ucmVwbG90fHxuLnJlY2FsY3x8Zj09PWl8fHA9PT1pLHY9dC5sYXlvdXQsbT10Ll9mdWxsTGF5b3V0O2lmKHJbXCJcIl0pe09iamVjdC5rZXlzKHIpLmxlbmd0aD4xJiZhLndhcm4oXCJGdWxsIGFycmF5IGVkaXRzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBvdGhlciBlZGl0c1wiLGgpO3ZhciB5PXJbXCJcIl1bXCJcIl07aWYoYyh5KSllLnNldChudWxsKTtlbHNle2lmKCFBcnJheS5pc0FycmF5KHkpKXJldHVybiBhLndhcm4oXCJVbnJlY29nbml6ZWQgZnVsbCBhcnJheSBlZGl0IHZhbHVlXCIsaCx5KSwhMDtlLnNldCh5KX1yZXR1cm4hZyYmKGYodixtKSxwKHQpLCEwKX12YXIgeCxiLF8sdyxrLEEsVCxNLFM9T2JqZWN0LmtleXMocikubWFwKE51bWJlcikuc29ydChvKSxFPWUuZ2V0KCksQz1FfHxbXSxMPXUobSxoKS5nZXQoKSx6PVtdLE89LTEsST1DLmxlbmd0aDtmb3IoeD0wO3g8Uy5sZW5ndGg7eCsrKWlmKHc9cltfPVNbeF1dLGs9T2JqZWN0LmtleXModyksQT13W1wiXCJdLFQ9bChBKSxfPDB8fF8+Qy5sZW5ndGgtKFQ/MDoxKSlhLndhcm4oXCJpbmRleCBvdXQgb2YgcmFuZ2VcIixoLF8pO2Vsc2UgaWYodm9pZCAwIT09QSlrLmxlbmd0aD4xJiZhLndhcm4oXCJJbnNlcnRpb24gJiByZW1vdmFsIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBlZGl0cyB0byB0aGUgc2FtZSBpbmRleC5cIixoLF8pLGMoQSk/ei5wdXNoKF8pOlQ/KFwiYWRkXCI9PT1BJiYoQT17fSksQy5zcGxpY2UoXywwLEEpLEwmJkwuc3BsaWNlKF8sMCx7fSkpOmEud2FybihcIlVucmVjb2duaXplZCBmdWxsIG9iamVjdCBlZGl0IHZhbHVlXCIsaCxfLEEpLC0xPT09TyYmKE89Xyk7ZWxzZSBmb3IoYj0wO2I8ay5sZW5ndGg7YisrKU09aCtcIltcIitfK1wiXS5cIix1KENbX10sa1tiXSxNKS5zZXQod1trW2JdXSk7Zm9yKHg9ei5sZW5ndGgtMTt4Pj0wO3gtLSlDLnNwbGljZSh6W3hdLDEpLEwmJkwuc3BsaWNlKHpbeF0sMSk7aWYoQy5sZW5ndGg/RXx8ZS5zZXQoQyk6ZS5zZXQobnVsbCksZylyZXR1cm4hMTtpZihmKHYsbSksZCE9PWkpe3ZhciBEO2lmKC0xPT09TylEPVM7ZWxzZXtmb3IoST1NYXRoLm1heChDLmxlbmd0aCxJKSxEPVtdLHg9MDt4PFMubGVuZ3RoJiYhKChfPVNbeF0pPj1PKTt4KyspRC5wdXNoKF8pO2Zvcih4PU87eDxJO3grKylELnB1c2goeCl9Zm9yKHg9MDt4PEQubGVuZ3RoO3grKylkKHQsRFt4XSl9ZWxzZSBwKHQpO3JldHVybiEwfX0se1wiLi4vbGliL2lzX3BsYWluX29iamVjdFwiOjcwMixcIi4uL2xpYi9sb2dnZXJzXCI6NzA1LFwiLi4vbGliL25vb3BcIjo3MTAsXCIuLi9saWIvc2VhcmNoXCI6NzIwLFwiLi4vcmVnaXN0cnlcIjo4MjksXCIuL2NvbnRhaW5lcl9hcnJheV9tYXRjaFwiOjczMX1dLDczNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxhPXQoXCJoYXMtaG92ZXJcIiksbz10KFwiLi4vbGliXCIpLHM9by5uZXN0ZWRQcm9wZXJ0eSxsPXQoXCIuLi9saWIvZXZlbnRzXCIpLGM9dChcIi4uL2xpYi9xdWV1ZVwiKSx1PXQoXCIuLi9yZWdpc3RyeVwiKSxoPXQoXCIuL3Bsb3Rfc2NoZW1hXCIpLGY9dChcIi4uL3Bsb3RzL3Bsb3RzXCIpLHA9dChcIi4uL3Bsb3RzL3BvbGFyL2xlZ2FjeVwiKSxkPXQoXCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxnPXQoXCIuLi9jb21wb25lbnRzL2RyYXdpbmdcIiksdj10KFwiLi4vY29tcG9uZW50cy9jb2xvclwiKSxtPXQoXCIuLi9jb21wb25lbnRzL2NvbG9yYmFyL2Nvbm5lY3RcIikseT10KFwiLi4vcGxvdHMvY2FydGVzaWFuL2dyYXBoX2ludGVyYWN0XCIpLmluaXRJbnRlcmFjdGlvbnMseD10KFwiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIiksYj10KFwiLi4vbGliL3N2Z190ZXh0X3V0aWxzXCIpLF89dChcIi4uL3Bsb3RzL2NhcnRlc2lhbi9zZWxlY3RcIikuY2xlYXJTZWxlY3Qsdz10KFwiLi9wbG90X2NvbmZpZ1wiKS5kZmx0Q29uZmlnLGs9dChcIi4vbWFuYWdlX2FycmF5c1wiKSxBPXQoXCIuL2hlbHBlcnNcIiksVD10KFwiLi9zdWJyb3V0aW5lc1wiKSxNPXQoXCIuL2VkaXRfdHlwZXNcIiksUz10KFwiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50c1wiKS5BWF9OQU1FX1BBVFRFUk4sRT0wO2Z1bmN0aW9uIEModCl7dmFyIGU9dC5fZnVsbExheW91dDtlLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50P2UuX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnQtLTp0LmVtaXQoXCJwbG90bHlfYWZ0ZXJwbG90XCIpfWZ1bmN0aW9uIEwodCxlKXt0cnl7dC5fZnVsbExheW91dC5fcGFwZXIuc3R5bGUoXCJiYWNrZ3JvdW5kXCIsZSl9Y2F0Y2godCl7by5lcnJvcih0KX19ZnVuY3Rpb24geih0LGUpe0wodCx2LmNvbWJpbmUoZSxcIndoaXRlXCIpKX1mdW5jdGlvbiBPKHQsZSl7aWYoIXQuX2NvbnRleHQpe3QuX2NvbnRleHQ9by5leHRlbmREZWVwKHt9LHcpO3ZhciByPW4uc2VsZWN0KFwiYmFzZVwiKTt0Ll9jb250ZXh0Ll9iYXNlVXJsPXIuc2l6ZSgpJiZyLmF0dHIoXCJocmVmXCIpP3dpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiI1wiKVswXTpcIlwifXZhciBpLHMsbCxjPXQuX2NvbnRleHQ7aWYoZSl7Zm9yKHM9T2JqZWN0LmtleXMoZSksaT0wO2k8cy5sZW5ndGg7aSsrKVwiZWRpdGFibGVcIiE9PShsPXNbaV0pJiZcImVkaXRzXCIhPT1sJiZsIGluIGMmJihcInNldEJhY2tncm91bmRcIj09PWwmJlwib3BhcXVlXCI9PT1lW2xdP2NbbF09ejpjW2xdPWVbbF0pO2UucGxvdDNkUGl4ZWxSYXRpbyYmIWMucGxvdEdsUGl4ZWxSYXRpbyYmKGMucGxvdEdsUGl4ZWxSYXRpbz1jLnBsb3QzZFBpeGVsUmF0aW8pO3ZhciB1PWUuZWRpdGFibGU7aWYodm9pZCAwIT09dSlmb3IoYy5lZGl0YWJsZT11LHM9T2JqZWN0LmtleXMoYy5lZGl0cyksaT0wO2k8cy5sZW5ndGg7aSsrKWMuZWRpdHNbc1tpXV09dTtpZihlLmVkaXRzKWZvcihzPU9iamVjdC5rZXlzKGUuZWRpdHMpLGk9MDtpPHMubGVuZ3RoO2krKykobD1zW2ldKWluIGMuZWRpdHMmJihjLmVkaXRzW2xdPWUuZWRpdHNbbF0pO2MuX2V4cG9ydGVkUGxvdD1lLl9leHBvcnRlZFBsb3R9Yy5zdGF0aWNQbG90JiYoYy5lZGl0YWJsZT0hMSxjLmVkaXRzPXt9LGMuYXV0b3NpemFibGU9ITEsYy5zY3JvbGxab29tPSExLGMuZG91YmxlQ2xpY2s9ITEsYy5zaG93VGlwcz0hMSxjLnNob3dMaW5rPSExLGMuZGlzcGxheU1vZGVCYXI9ITEpLFwiaG92ZXJcIiE9PWMuZGlzcGxheU1vZGVCYXJ8fGF8fChjLmRpc3BsYXlNb2RlQmFyPSEwKSxcInRyYW5zcGFyZW50XCIhPT1jLnNldEJhY2tncm91bmQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGMuc2V0QmFja2dyb3VuZHx8KGMuc2V0QmFja2dyb3VuZD1MKSxjLl9oYXNaZXJvSGVpZ2h0PWMuX2hhc1plcm9IZWlnaHR8fDA9PT10LmNsaWVudEhlaWdodCxjLl9oYXNaZXJvV2lkdGg9Yy5faGFzWmVyb1dpZHRofHwwPT09dC5jbGllbnRXaWR0aDt2YXIgaD1jLnNjcm9sbFpvb20sZj1jLl9zY3JvbGxab29tPXt9O2lmKCEwPT09aClmLmNhcnRlc2lhbj0xLGYuZ2wzZD0xLGYuZ2VvPTEsZi5tYXBib3g9MTtlbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiBoKXt2YXIgcD1oLnNwbGl0KFwiK1wiKTtmb3IoaT0wO2k8cC5sZW5ndGg7aSsrKWZbcFtpXV09MX1lbHNlITEhPT1oJiYoZi5nbDNkPTEsZi5nZW89MSxmLm1hcGJveD0xKX1mdW5jdGlvbiBJKHQsZSl7dmFyIHIsbixpPWUrMSxhPVtdO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspKG49dFtyXSk8MD9hLnB1c2goaStuKTphLnB1c2gobik7cmV0dXJuIGF9ZnVuY3Rpb24gRCh0LGUscil7dmFyIG4saTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKXtpZigoaT1lW25dKSE9PXBhcnNlSW50KGksMTApKXRocm93IG5ldyBFcnJvcihcImFsbCB2YWx1ZXMgaW4gXCIrcitcIiBtdXN0IGJlIGludGVnZXJzXCIpO2lmKGk+PXQuZGF0YS5sZW5ndGh8fGk8LXQuZGF0YS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKHIrXCIgbXVzdCBiZSB2YWxpZCBpbmRpY2VzIGZvciBnZC5kYXRhLlwiKTtpZihlLmluZGV4T2YoaSxuKzEpPi0xfHxpPj0wJiZlLmluZGV4T2YoLXQuZGF0YS5sZW5ndGgraSk+LTF8fGk8MCYmZS5pbmRleE9mKHQuZGF0YS5sZW5ndGgraSk+LTEpdGhyb3cgbmV3IEVycm9yKFwiZWFjaCBpbmRleCBpbiBcIityK1wiIG11c3QgYmUgdW5pcXVlLlwiKX19ZnVuY3Rpb24gUCh0LGUscil7aWYoIUFycmF5LmlzQXJyYXkodC5kYXRhKSl0aHJvdyBuZXcgRXJyb3IoXCJnZC5kYXRhIG11c3QgYmUgYW4gYXJyYXkuXCIpO2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcihcImN1cnJlbnRJbmRpY2VzIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQuXCIpO2lmKEFycmF5LmlzQXJyYXkoZSl8fChlPVtlXSksRCh0LGUsXCJjdXJyZW50SW5kaWNlc1wiKSxcInVuZGVmaW5lZFwiPT10eXBlb2Ygcnx8QXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgciYmRCh0LHIsXCJuZXdJbmRpY2VzXCIpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiByJiZlLmxlbmd0aCE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImN1cnJlbnQgYW5kIG5ldyBpbmRpY2VzIG11c3QgYmUgb2YgZXF1YWwgbGVuZ3RoLlwiKX1mdW5jdGlvbiBSKHQsZSxyLG4sYSl7IWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW8uaXNQbGFpbk9iamVjdChuKTtpZighQXJyYXkuaXNBcnJheSh0LmRhdGEpKXRocm93IG5ldyBFcnJvcihcImdkLmRhdGEgbXVzdCBiZSBhbiBhcnJheVwiKTtpZighby5pc1BsYWluT2JqZWN0KGUpKXRocm93IG5ldyBFcnJvcihcInVwZGF0ZSBtdXN0IGJlIGEga2V5OnZhbHVlIG9iamVjdFwiKTtpZihcInVuZGVmaW5lZFwiPT10eXBlb2Ygcil0aHJvdyBuZXcgRXJyb3IoXCJpbmRpY2VzIG11c3QgYmUgYW4gaW50ZWdlciBvciBhcnJheSBvZiBpbnRlZ2Vyc1wiKTtmb3IodmFyIGEgaW4gRCh0LHIsXCJpbmRpY2VzXCIpLGUpe2lmKCFBcnJheS5pc0FycmF5KGVbYV0pfHxlW2FdLmxlbmd0aCE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImF0dHJpYnV0ZSBcIithK1wiIG11c3QgYmUgYW4gYXJyYXkgb2YgbGVuZ3RoIGVxdWFsIHRvIGluZGljZXMgYXJyYXkgbGVuZ3RoXCIpO2lmKGkmJighKGEgaW4gbil8fCFBcnJheS5pc0FycmF5KG5bYV0pfHxuW2FdLmxlbmd0aCE9PWVbYV0ubGVuZ3RoKSl0aHJvdyBuZXcgRXJyb3IoXCJ3aGVuIG1heFBvaW50cyBpcyBzZXQgYXMgYSBrZXk6dmFsdWUgb2JqZWN0IGl0IG11c3QgY29udGFpbiBhIDE6MSBjb3JyaXNwb25kZW5jZSB3aXRoIHRoZSBrZXlzIGFuZCBudW1iZXIgb2YgdHJhY2VzIGluIHRoZSB1cGRhdGUgb2JqZWN0XCIpfX0odCxlLHIsbik7Zm9yKHZhciBsPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhLGwsYyx1LGgsZj1vLmlzUGxhaW5PYmplY3QobikscD1bXTtmb3IodmFyIGQgaW4gQXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSxyPUkocix0LmRhdGEubGVuZ3RoLTEpLGUpZm9yKHZhciBnPTA7ZzxyLmxlbmd0aDtnKyspe2lmKGE9dC5kYXRhW3JbZ11dLGw9KGM9cyhhLGQpKS5nZXQoKSx1PWVbZF1bZ10sIW8uaXNBcnJheU9yVHlwZWRBcnJheSh1KSl0aHJvdyBuZXcgRXJyb3IoXCJhdHRyaWJ1dGU6IFwiK2QrXCIgaW5kZXg6IFwiK2crXCIgbXVzdCBiZSBhbiBhcnJheVwiKTtpZighby5pc0FycmF5T3JUeXBlZEFycmF5KGwpKXRocm93IG5ldyBFcnJvcihcImNhbm5vdCBleHRlbmQgbWlzc2luZyBvciBub24tYXJyYXkgYXR0cmlidXRlOiBcIitkKTtpZihsLmNvbnN0cnVjdG9yIT09dS5jb25zdHJ1Y3Rvcil0aHJvdyBuZXcgRXJyb3IoXCJjYW5ub3QgZXh0ZW5kIGFycmF5IHdpdGggYW4gYXJyYXkgb2YgYSBkaWZmZXJlbnQgdHlwZTogXCIrZCk7aD1mP25bZF1bZ106bixpKGgpfHwoaD0tMSkscC5wdXNoKHtwcm9wOmMsdGFyZ2V0OmwsaW5zZXJ0OnUsbWF4cDpNYXRoLmZsb29yKGgpfSl9cmV0dXJuIHB9KHQsZSxyLG4pLGM9e30sdT17fSxoPTA7aDxsLmxlbmd0aDtoKyspe3ZhciBmPWxbaF0ucHJvcCxwPWxbaF0ubWF4cCxkPWEobFtoXS50YXJnZXQsbFtoXS5pbnNlcnQscCk7Zi5zZXQoZFswXSksQXJyYXkuaXNBcnJheShjW2YuYXN0cl0pfHwoY1tmLmFzdHJdPVtdKSxjW2YuYXN0cl0ucHVzaChkWzFdKSxBcnJheS5pc0FycmF5KHVbZi5hc3RyXSl8fCh1W2YuYXN0cl09W10pLHVbZi5hc3RyXS5wdXNoKGxbaF0udGFyZ2V0Lmxlbmd0aCl9cmV0dXJue3VwZGF0ZTpjLG1heFBvaW50czp1fX1mdW5jdGlvbiBGKHQsZSl7dmFyIHI9bmV3IHQuY29uc3RydWN0b3IodC5sZW5ndGgrZS5sZW5ndGgpO3JldHVybiByLnNldCh0KSxyLnNldChlLHQubGVuZ3RoKSxyfWZ1bmN0aW9uIEIodCxlLG4saSl7dD1vLmdldEdyYXBoRGl2KHQpLEEuY2xlYXJQcm9taXNlUXVldWUodCk7dmFyIGE9e307aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpYVtlXT1uO2Vsc2V7aWYoIW8uaXNQbGFpbk9iamVjdChlKSlyZXR1cm4gby53YXJuKFwiUmVzdHlsZSBmYWlsLlwiLGUsbixpKSxQcm9taXNlLnJlamVjdCgpO2E9by5leHRlbmRGbGF0KHt9LGUpLHZvaWQgMD09PWkmJihpPW4pfU9iamVjdC5rZXlzKGEpLmxlbmd0aCYmKHQuY2hhbmdlZD0hMCk7dmFyIHM9QS5jb2VyY2VUcmFjZUluZGljZXModCxpKSxsPVUodCxhLHMpLHU9bC5mbGFnczt1LmNhbGMmJih0LmNhbGNkYXRhPXZvaWQgMCksdS5jbGVhckF4aXNUeXBlcyYmQS5jbGVhckF4aXNUeXBlcyh0LHMse30pO3ZhciBoPVtdO3UuZnVsbFJlcGxvdD9oLnB1c2goci5wbG90KTooaC5wdXNoKGYucHJldmlvdXNQcm9taXNlcyksZi5zdXBwbHlEZWZhdWx0cyh0KSx1Lm1hcmtlclNpemUmJihmLmRvQ2FsY2RhdGEodCksWShoKSksdS5zdHlsZSYmaC5wdXNoKFQuZG9UcmFjZVN0eWxlKSx1LmNvbG9yYmFycyYmaC5wdXNoKFQuZG9Db2xvckJhcnMpLGgucHVzaChDKSksaC5wdXNoKGYucmVob3ZlcixmLnJlZHJhZyksYy5hZGQodCxCLFt0LGwudW5kb2l0LGwudHJhY2VzXSxCLFt0LGwucmVkb2l0LGwudHJhY2VzXSk7dmFyIHA9by5zeW5jT3JBc3luYyhoLHQpO3JldHVybiBwJiZwLnRoZW58fChwPVByb21pc2UucmVzb2x2ZSgpKSxwLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdC5lbWl0KFwicGxvdGx5X3Jlc3R5bGVcIixsLmV2ZW50RGF0YSksdH0pfWZ1bmN0aW9uIE4odCl7cmV0dXJuIHZvaWQgMD09PXQ/bnVsbDp0fWZ1bmN0aW9uIGoodCxlKXtyZXR1cm4gZT9mdW5jdGlvbihlLHIsbil7dmFyIGk9cyhlLHIpLGE9aS5zZXQ7cmV0dXJuIGkuc2V0PWZ1bmN0aW9uKGUpe1YoKG58fFwiXCIpK3IsaS5nZXQoKSxlLHQpLGEoZSl9LGl9OnN9ZnVuY3Rpb24gVih0LGUscixuKXtpZihBcnJheS5pc0FycmF5KGUpfHxBcnJheS5pc0FycmF5KHIpKWZvcih2YXIgaT1BcnJheS5pc0FycmF5KGUpP2U6W10sYT1BcnJheS5pc0FycmF5KHIpP3I6W10scz1NYXRoLm1heChpLmxlbmd0aCxhLmxlbmd0aCksbD0wO2w8cztsKyspVih0K1wiW1wiK2wrXCJdXCIsaVtsXSxhW2xdLG4pO2Vsc2UgaWYoby5pc1BsYWluT2JqZWN0KGUpfHxvLmlzUGxhaW5PYmplY3Qocikpe3ZhciBjPW8uaXNQbGFpbk9iamVjdChlKT9lOnt9LHU9by5pc1BsYWluT2JqZWN0KHIpP3I6e30saD1vLmV4dGVuZEZsYXQoe30sYyx1KTtmb3IodmFyIGYgaW4gaClWKHQrXCIuXCIrZixjW2ZdLHVbZl0sbil9ZWxzZSB2b2lkIDA9PT1uW3RdJiYoblt0XT1OKGUpKX1mdW5jdGlvbiBVKHQsZSxyKXt2YXIgbixpPXQuX2Z1bGxMYXlvdXQsYT10Ll9mdWxsRGF0YSxsPXQuZGF0YSxjPWkuX2d1aUVkaXRpbmcscD1qKGkuX3ByZUdVSSxjKSxnPW8uZXh0ZW5kRGVlcEFsbCh7fSxlKTtxKGUpO3ZhciB2LG09TS50cmFjZUZsYWdzKCkseT17fSx4PXt9O2Z1bmN0aW9uIGIoKXtyZXR1cm4gci5tYXAoZnVuY3Rpb24oKXt9KX1mdW5jdGlvbiBfKHQpe3ZhciBlPWQuaWQybmFtZSh0KTstMT09PXYuaW5kZXhPZihlKSYmdi5wdXNoKGUpfWZ1bmN0aW9uIHcodCl7cmV0dXJuXCJMQVlPVVRcIit0K1wiLmF1dG9yYW5nZVwifWZ1bmN0aW9uIGsodCl7cmV0dXJuXCJMQVlPVVRcIit0K1wiLnJhbmdlXCJ9ZnVuY3Rpb24gVCh0KXtmb3IodmFyIGU9dDtlPGEubGVuZ3RoO2UrKylpZihhW2VdLl9pbnB1dD09PWxbdF0pcmV0dXJuIGFbZV19ZnVuY3Rpb24gUyhuLGEsbyl7aWYoQXJyYXkuaXNBcnJheShuKSluLmZvckVhY2goZnVuY3Rpb24odCl7Uyh0LGEsbyl9KTtlbHNlIGlmKCEobiBpbiBlfHxBLmhhc1BhcmVudChlLG4pKSl7dmFyIHM7aWYoXCJMQVlPVVRcIj09PW4uc3Vic3RyKDAsNikpcz1wKHQubGF5b3V0LG4ucmVwbGFjZShcIkxBWU9VVFwiLFwiXCIpKTtlbHNle3ZhciB1PXJbb107cz1qKGkuX3RyYWNlUHJlR1VJW1QodSkuX2Z1bGxJbnB1dC51aWRdLGMpKGxbdV0sbil9biBpbiB4fHwoeFtuXT1iKCkpLHZvaWQgMD09PXhbbl1bb10mJih4W25dW29dPU4ocy5nZXQoKSkpLHZvaWQgMCE9PWEmJnMuc2V0KGEpfX1mdW5jdGlvbiBFKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gYVtlXVt0XX19ZnVuY3Rpb24gQyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4hMT09PWU/YVtyW25dXVt0XTpudWxsfX1mb3IodmFyIEwgaW4gZSl7aWYoQS5oYXNQYXJlbnQoZSxMKSl0aHJvdyBuZXcgRXJyb3IoXCJjYW5ub3Qgc2V0IFwiK0wrXCIgYW5kIGEgcGFyZW50IGF0dHJpYnV0ZSBzaW11bHRhbmVvdXNseVwiKTt2YXIgeixPLEksRCxQLFIsRj1lW0xdO2lmKFwiYXV0b2JpbnhcIiE9PUwmJlwiYXV0b2JpbnlcIiE9PUx8fChMPUwuY2hhckF0KEwubGVuZ3RoLTEpK1wiYmluc1wiLEY9QXJyYXkuaXNBcnJheShGKT9GLm1hcChDKEwpKTohMT09PUY/ci5tYXAoRShMKSk6bnVsbCkseVtMXT1GLFwiTEFZT1VUXCIhPT1MLnN1YnN0cigwLDYpKXtmb3IoeFtMXT1iKCksbj0wO248ci5sZW5ndGg7bisrKXtpZih6PWxbcltuXV0sTz1UKHJbbl0pLEQ9KEk9aihpLl90cmFjZVByZUdVSVtPLl9mdWxsSW5wdXQudWlkXSxjKSh6LEwpKS5nZXQoKSx2b2lkIDAhPT0oUD1BcnJheS5pc0FycmF5KEYpP0ZbbiVGLmxlbmd0aF06Rikpe3ZhciBCPUkucGFydHNbSS5wYXJ0cy5sZW5ndGgtMV0sVj1MLnN1YnN0cigwLEwubGVuZ3RoLUIubGVuZ3RoLTEpLFU9Vj9WK1wiLlwiOlwiXCIsSD1WP3MoTyxWKS5nZXQoKTpPO2lmKChSPWguZ2V0VHJhY2VWYWxPYmplY3QoTyxJLnBhcnRzKSkmJlIuaW1wbGllZEVkaXRzJiZudWxsIT09UClmb3IodmFyIEcgaW4gUi5pbXBsaWVkRWRpdHMpUyhvLnJlbGF0aXZlQXR0cihMLEcpLFIuaW1wbGllZEVkaXRzW0ddLG4pO2Vsc2UgaWYoXCJ0aGlja25lc3Ntb2RlXCIhPT1CJiZcImxlbm1vZGVcIiE9PUJ8fEQ9PT1QfHxcImZyYWN0aW9uXCIhPT1QJiZcInBpeGVsc1wiIT09UHx8IUgpe2lmKFwidHlwZVwiPT09TCYmXCJwaWVcIj09PVAhPShcInBpZVwiPT09RCkpe3ZhciBZPVwieFwiLFc9XCJ5XCI7XCJiYXJcIiE9PVAmJlwiYmFyXCIhPT1EfHxcImhcIiE9PXoub3JpZW50YXRpb258fChZPVwieVwiLFc9XCJ4XCIpLG8uc3dhcEF0dHJzKHosW1wiP1wiLFwiP3NyY1wiXSxcImxhYmVsc1wiLFkpLG8uc3dhcEF0dHJzKHosW1wiZD9cIixcIj8wXCJdLFwibGFiZWxcIixZKSxvLnN3YXBBdHRycyh6LFtcIj9cIixcIj9zcmNcIl0sXCJ2YWx1ZXNcIixXKSxcInBpZVwiPT09RD8ocyh6LFwibWFya2VyLmNvbG9yXCIpLnNldChzKHosXCJtYXJrZXIuY29sb3JzXCIpLmdldCgpKSxpLl9waWVsYXllci5zZWxlY3RBbGwoXCJnLnRyYWNlXCIpLnJlbW92ZSgpKTp1LnRyYWNlSXMoeixcImNhcnRlc2lhblwiKSYmcyh6LFwibWFya2VyLmNvbG9yc1wiKS5zZXQocyh6LFwibWFya2VyLmNvbG9yXCIpLmdldCgpKX19ZWxzZXt2YXIgWD1pLl9zaXplLFo9SC5vcmllbnQsJD1cInRvcFwiPT09Wnx8XCJib3R0b21cIj09PVo7aWYoXCJ0aGlja25lc3Ntb2RlXCI9PT1CKXt2YXIgSj0kP1guaDpYLnc7UyhVK1widGhpY2tuZXNzXCIsSC50aGlja25lc3MqKFwiZnJhY3Rpb25cIj09PVA/MS9KOkopLG4pfWVsc2V7dmFyIEs9JD9YLnc6WC5oO1MoVStcImxlblwiLEgubGVuKihcImZyYWN0aW9uXCI9PT1QPzEvSzpLKSxuKX19eFtMXVtuXT1OKEQpO2lmKC0xIT09W1wic3dhcHh5XCIsXCJzd2FweHlheGVzXCIsXCJvcmllbnRhdGlvblwiLFwib3JpZW50YXRpb25heGVzXCJdLmluZGV4T2YoTCkpe2lmKFwib3JpZW50YXRpb25cIj09PUwpe0kuc2V0KFApO3ZhciBRPXoueCYmIXoueT9cImhcIjpcInZcIjtpZigoSS5nZXQoKXx8USk9PT1PLm9yaWVudGF0aW9uKWNvbnRpbnVlfWVsc2VcIm9yaWVudGF0aW9uYXhlc1wiPT09TCYmKHoub3JpZW50YXRpb249e3Y6XCJoXCIsaDpcInZcIn1bTy5vcmllbnRhdGlvbl0pO0Euc3dhcFhZRGF0YSh6KSxtLmNhbGM9bS5jbGVhckF4aXNUeXBlcz0hMH1lbHNlLTEhPT1mLmRhdGFBcnJheUNvbnRhaW5lcnMuaW5kZXhPZihJLnBhcnRzWzBdKT8oQS5tYW5hZ2VBcnJheUNvbnRhaW5lcnMoSSxQLHgpLG0uY2FsYz0hMCk6KFI/Ui5hcnJheU9rJiYhdS50cmFjZUlzKE8sXCJyZWdsXCIpJiYoby5pc0FycmF5T3JUeXBlZEFycmF5KFApfHxvLmlzQXJyYXlPclR5cGVkQXJyYXkoRCkpP20uY2FsYz0hMDpNLnVwZGF0ZShtLFIpOm0uY2FsYz0hMCxJLnNldChQKSl9fWlmKC0xIT09W1wic3dhcHh5YXhlc1wiLFwib3JpZW50YXRpb25heGVzXCJdLmluZGV4T2YoTCkmJmQuc3dhcCh0LHIpLFwib3JpZW50YXRpb25heGVzXCI9PT1MKXt2YXIgdHQ9cyh0LmxheW91dCxcImhvdmVybW9kZVwiKTtcInhcIj09PXR0LmdldCgpP3R0LnNldChcInlcIik6XCJ5XCI9PT10dC5nZXQoKSYmdHQuc2V0KFwieFwiKX1pZigtMSE9PVtcIm9yaWVudGF0aW9uXCIsXCJ0eXBlXCJdLmluZGV4T2YoTCkpe2Zvcih2PVtdLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGV0PWxbcltuXV07dS50cmFjZUlzKGV0LFwiY2FydGVzaWFuXCIpJiYoXyhldC54YXhpc3x8XCJ4XCIpLF8oZXQueWF4aXN8fFwieVwiKSl9Uyh2Lm1hcCh3KSwhMCwwKSxTKHYubWFwKGspLFswLDFdLDApfX1lbHNlIEk9cCh0LmxheW91dCxMLnJlcGxhY2UoXCJMQVlPVVRcIixcIlwiKSkseFtMXT1bTihJLmdldCgpKV0sSS5zZXQoQXJyYXkuaXNBcnJheShGKT9GWzBdOkYpLG0uY2FsYz0hMH1yZXR1cm4obS5jYWxjfHxtLnBsb3QpJiYobS5mdWxsUmVwbG90PSEwKSx7ZmxhZ3M6bSx1bmRvaXQ6eCxyZWRvaXQ6eSx0cmFjZXM6cixldmVudERhdGE6by5leHRlbmREZWVwTm9BcnJheXMoW10sW2cscl0pfX1mdW5jdGlvbiBxKHQpe3ZhciBlLHIsbixpPW8uY291bnRlclJlZ2V4KFwiYXhpc1wiLFwiLnRpdGxlXCIsITEsITEpLGE9L2NvbG9yYmFyXFwudGl0bGUkLyxzPU9iamVjdC5rZXlzKHQpO2ZvcihlPTA7ZTxzLmxlbmd0aDtlKyspcj1zW2VdLG49dFtyXSxcInRpdGxlXCIhPT1yJiYhaS50ZXN0KHIpJiYhYS50ZXN0KHIpfHxcInN0cmluZ1wiIT10eXBlb2YgbiYmXCJudW1iZXJcIiE9dHlwZW9mIG4/ci5pbmRleE9mKFwidGl0bGVmb250XCIpPi0xP2wocixyLnJlcGxhY2UoXCJ0aXRsZWZvbnRcIixcInRpdGxlLmZvbnRcIikpOnIuaW5kZXhPZihcInRpdGxlcG9zaXRpb25cIik+LTE/bChyLHIucmVwbGFjZShcInRpdGxlcG9zaXRpb25cIixcInRpdGxlLnBvc2l0aW9uXCIpKTpyLmluZGV4T2YoXCJ0aXRsZXNpZGVcIik+LTE/bChyLHIucmVwbGFjZShcInRpdGxlc2lkZVwiLFwidGl0bGUuc2lkZVwiKSk6ci5pbmRleE9mKFwidGl0bGVvZmZzZXRcIik+LTEmJmwocixyLnJlcGxhY2UoXCJ0aXRsZW9mZnNldFwiLFwidGl0bGUub2Zmc2V0XCIpKTpsKHIsci5yZXBsYWNlKFwidGl0bGVcIixcInRpdGxlLnRleHRcIikpO2Z1bmN0aW9uIGwoZSxyKXt0W3JdPXRbZV0sZGVsZXRlIHRbZV19fWZ1bmN0aW9uIEgodCxlLHIpe2lmKHQ9by5nZXRHcmFwaERpdih0KSxBLmNsZWFyUHJvbWlzZVF1ZXVlKHQpLHQuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5pc1BvbGFyKXJldHVybiBQcm9taXNlLnJlc29sdmUodCk7dmFyIG49e307aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpbltlXT1yO2Vsc2V7aWYoIW8uaXNQbGFpbk9iamVjdChlKSlyZXR1cm4gby53YXJuKFwiUmVsYXlvdXQgZmFpbC5cIixlLHIpLFByb21pc2UucmVqZWN0KCk7bj1vLmV4dGVuZEZsYXQoe30sZSl9T2JqZWN0LmtleXMobikubGVuZ3RoJiYodC5jaGFuZ2VkPSEwKTt2YXIgaT0kKHQsbiksYT1pLmZsYWdzO2EuY2FsYyYmKHQuY2FsY2RhdGE9dm9pZCAwKTt2YXIgcz1bZi5wcmV2aW91c1Byb21pc2VzXTthLmxheW91dFJlcGxvdD9zLnB1c2goVC5sYXlvdXRSZXBsb3QpOk9iamVjdC5rZXlzKG4pLmxlbmd0aCYmKEcodCxhLGkpfHxmLnN1cHBseURlZmF1bHRzKHQpLGEubGVnZW5kJiZzLnB1c2goVC5kb0xlZ2VuZCksYS5sYXlvdXRzdHlsZSYmcy5wdXNoKFQubGF5b3V0U3R5bGVzKSxhLmF4cmFuZ2UmJlkocyxpLnJhbmdlc0FsdGVyZWQpLGEudGlja3MmJnMucHVzaChULmRvVGlja3NSZWxheW91dCksYS5tb2RlYmFyJiZzLnB1c2goVC5kb01vZGVCYXIpLGEuY2FtZXJhJiZzLnB1c2goVC5kb0NhbWVyYSkscy5wdXNoKEMpKSxzLnB1c2goZi5yZWhvdmVyLGYucmVkcmFnKSxjLmFkZCh0LEgsW3QsaS51bmRvaXRdLEgsW3QsaS5yZWRvaXRdKTt2YXIgbD1vLnN5bmNPckFzeW5jKHMsdCk7cmV0dXJuIGwmJmwudGhlbnx8KGw9UHJvbWlzZS5yZXNvbHZlKHQpKSxsLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdC5lbWl0KFwicGxvdGx5X3JlbGF5b3V0XCIsaS5ldmVudERhdGEpLHR9KX1mdW5jdGlvbiBHKHQsZSxyKXt2YXIgbj10Ll9mdWxsTGF5b3V0O2lmKCFlLmF4cmFuZ2UpcmV0dXJuITE7Zm9yKHZhciBpIGluIGUpaWYoXCJheHJhbmdlXCIhPT1pJiZlW2ldKXJldHVybiExO2Zvcih2YXIgYSBpbiByLnJhbmdlc0FsdGVyZWQpe3ZhciBvPWQuaWQybmFtZShhKSxzPXQubGF5b3V0W29dLGw9bltvXTtpZihsLmF1dG9yYW5nZT1zLmF1dG9yYW5nZSxsLnJhbmdlPXMucmFuZ2Uuc2xpY2UoKSxsLmNsZWFuUmFuZ2UoKSxsLl9tYXRjaEdyb3VwKWZvcih2YXIgYyBpbiBsLl9tYXRjaEdyb3VwKWlmKGMhPT1hKXt2YXIgdT1uW2QuaWQybmFtZShjKV07dS5hdXRvcmFuZ2U9bC5hdXRvcmFuZ2UsdS5yYW5nZT1sLnJhbmdlLnNsaWNlKCksdS5faW5wdXQucmFuZ2U9bC5yYW5nZS5zbGljZSgpfX1yZXR1cm4hMH1mdW5jdGlvbiBZKHQsZSl7dmFyIHI9ZT9mdW5jdGlvbih0KXt2YXIgcj1bXSxuPSEwO2Zvcih2YXIgaSBpbiBlKXt2YXIgYT1kLmdldEZyb21JZCh0LGkpO2lmKHIucHVzaChpKSxhLl9tYXRjaEdyb3VwKWZvcih2YXIgbyBpbiBhLl9tYXRjaEdyb3VwKWVbb118fHIucHVzaChvKTthLmF1dG9tYXJnaW4mJihuPSExKX1yZXR1cm4gZC5kcmF3KHQscix7c2tpcFRpdGxlOm59KX06ZnVuY3Rpb24odCl7cmV0dXJuIGQuZHJhdyh0LFwicmVkcmF3XCIpfTt0LnB1c2goXyxULmRvQXV0b1JhbmdlQW5kQ29uc3RyYWludHMscixULmRyYXdEYXRhLFQuZmluYWxEcmF3KX1yLnBsb3Q9ZnVuY3Rpb24odCxlLGksYSl7dmFyIHM7aWYodD1vLmdldEdyYXBoRGl2KHQpLGwuaW5pdCh0KSxvLmlzUGxhaW5PYmplY3QoZSkpe3ZhciBjPWU7ZT1jLmRhdGEsaT1jLmxheW91dCxhPWMuY29uZmlnLHM9Yy5mcmFtZXN9aWYoITE9PT1sLnRyaWdnZXJIYW5kbGVyKHQsXCJwbG90bHlfYmVmb3JlcGxvdFwiLFtlLGksYV0pKXJldHVybiBQcm9taXNlLnJlamVjdCgpO2V8fGl8fG8uaXNQbG90RGl2KHQpfHxvLndhcm4oXCJDYWxsaW5nIFBsb3RseS5wbG90IGFzIGlmIHJlZHJhd2luZyBidXQgdGhpcyBjb250YWluZXIgZG9lc24ndCB5ZXQgaGF2ZSBhIHBsb3QuXCIsdCksTyh0LGEpLGl8fChpPXt9KSxuLnNlbGVjdCh0KS5jbGFzc2VkKFwianMtcGxvdGx5LXBsb3RcIiwhMCksZy5tYWtlVGVzdGVyKCksQXJyYXkuaXNBcnJheSh0Ll9wcm9taXNlcyl8fCh0Ll9wcm9taXNlcz1bXSk7dmFyIGg9MD09PSh0LmRhdGF8fFtdKS5sZW5ndGgmJkFycmF5LmlzQXJyYXkoZSk7QXJyYXkuaXNBcnJheShlKSYmKEEuY2xlYW5EYXRhKGUpLGg/dC5kYXRhPWU6dC5kYXRhLnB1c2guYXBwbHkodC5kYXRhLGUpLHQuZW1wdHk9ITEpLHQubGF5b3V0JiYhaHx8KHQubGF5b3V0PUEuY2xlYW5MYXlvdXQoaSkpLGYuc3VwcGx5RGVmYXVsdHModCk7dmFyIHY9dC5fZnVsbExheW91dCx4PXYuX2hhcyhcImNhcnRlc2lhblwiKTtpZighdi5faGFzKFwicG9sYXJcIikmJmUmJmVbMF0mJmVbMF0ucilyZXR1cm4gby5sb2coXCJMZWdhY3kgcG9sYXIgY2hhcnRzIGFyZSBkZXByZWNhdGVkIVwiKSxmdW5jdGlvbih0LGUscil7dmFyIGk9bi5zZWxlY3QodCkuc2VsZWN0QWxsKFwiLnBsb3QtY29udGFpbmVyXCIpLmRhdGEoWzBdKTtpLmVudGVyKCkuaW5zZXJ0KFwiZGl2XCIsXCI6Zmlyc3QtY2hpbGRcIikuY2xhc3NlZChcInBsb3QtY29udGFpbmVyIHBsb3RseVwiLCEwKTt2YXIgYT1pLnNlbGVjdEFsbChcIi5zdmctY29udGFpbmVyXCIpLmRhdGEoWzBdKTthLmVudGVyKCkuYXBwZW5kKFwiZGl2XCIpLmNsYXNzZWQoXCJzdmctY29udGFpbmVyXCIsITApLnN0eWxlKFwicG9zaXRpb25cIixcInJlbGF0aXZlXCIpLGEuaHRtbChcIlwiKSxlJiYodC5kYXRhPWUpO3ImJih0LmxheW91dD1yKTtwLm1hbmFnZXIuZmlsbExheW91dCh0KSxhLnN0eWxlKHt3aWR0aDp0Ll9mdWxsTGF5b3V0LndpZHRoK1wicHhcIixoZWlnaHQ6dC5fZnVsbExheW91dC5oZWlnaHQrXCJweFwifSksdC5mcmFtZXdvcms9cC5tYW5hZ2VyLmZyYW1ld29yayh0KSx0LmZyYW1ld29yayh7ZGF0YTp0LmRhdGEsbGF5b3V0OnQubGF5b3V0fSxhLm5vZGUoKSksdC5mcmFtZXdvcmsuc2V0VW5kb1BvaW50KCk7dmFyIHM9dC5mcmFtZXdvcmsuc3ZnKCksbD0xLGM9dC5fZnVsbExheW91dC50aXRsZT90Ll9mdWxsTGF5b3V0LnRpdGxlLnRleHQ6XCJcIjtcIlwiIT09YyYmY3x8KGw9MCk7dmFyIHU9ZnVuY3Rpb24oKXt0aGlzLmNhbGwoYi5jb252ZXJ0VG9Uc3BhbnMsdCl9LGg9cy5zZWxlY3QoXCIudGl0bGUtZ3JvdXAgdGV4dFwiKS5jYWxsKHUpO2lmKHQuX2NvbnRleHQuZWRpdHMudGl0bGVUZXh0KXt2YXIgZD1vLl8odCxcIkNsaWNrIHRvIGVudGVyIFBsb3QgdGl0bGVcIik7YyYmYyE9PWR8fChsPS4yLGguYXR0cih7XCJkYXRhLXVuZm9ybWF0dGVkXCI6ZH0pLnRleHQoZCkuc3R5bGUoe29wYWNpdHk6bH0pLm9uKFwibW91c2VvdmVyLm9wYWNpdHlcIixmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxMDApLnN0eWxlKFwib3BhY2l0eVwiLDEpfSkub24oXCJtb3VzZW91dC5vcGFjaXR5XCIsZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMWUzKS5zdHlsZShcIm9wYWNpdHlcIiwwKX0pKTt2YXIgZz1mdW5jdGlvbigpe3RoaXMuY2FsbChiLm1ha2VFZGl0YWJsZSx7Z2Q6dH0pLm9uKFwiZWRpdFwiLGZ1bmN0aW9uKGUpe3QuZnJhbWV3b3JrKHtsYXlvdXQ6e3RpdGxlOnt0ZXh0OmV9fX0pLHRoaXMudGV4dChlKS5jYWxsKHUpLHRoaXMuY2FsbChnKX0pLm9uKFwiY2FuY2VsXCIsZnVuY3Rpb24oKXt2YXIgdD10aGlzLmF0dHIoXCJkYXRhLXVuZm9ybWF0dGVkXCIpO3RoaXMudGV4dCh0KS5jYWxsKHUpfSl9O2guY2FsbChnKX1yZXR1cm4gdC5fY29udGV4dC5zZXRCYWNrZ3JvdW5kKHQsdC5fZnVsbExheW91dC5wYXBlcl9iZ2NvbG9yKSxmLmFkZExpbmtzKHQpLFByb21pc2UucmVzb2x2ZSgpfSh0LGUsaSk7di5fcmVwbG90dGluZz0hMCxoJiZsdCh0KSx0LmZyYW1ld29yayE9PWx0JiYodC5mcmFtZXdvcms9bHQsbHQodCkpLGcuaW5pdEdyYWRpZW50cyh0KSxoJiZkLnNhdmVTaG93U3Bpa2VJbml0aWFsKHQpO3ZhciBfPSF0LmNhbGNkYXRhfHx0LmNhbGNkYXRhLmxlbmd0aCE9PSh0Ll9mdWxsRGF0YXx8W10pLmxlbmd0aDtfJiZmLmRvQ2FsY2RhdGEodCk7Zm9yKHZhciB3PTA7dzx0LmNhbGNkYXRhLmxlbmd0aDt3KyspdC5jYWxjZGF0YVt3XVswXS50cmFjZT10Ll9mdWxsRGF0YVt3XTt0Ll9jb250ZXh0LnJlc3BvbnNpdmU/dC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlcnx8KHQuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXI9ZnVuY3Rpb24oKXtmLnJlc2l6ZSh0KX0sd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0Ll9yZXNwb25zaXZlQ2hhcnRIYW5kbGVyKSk6by5jbGVhclJlc3BvbnNpdmUodCk7dmFyIGs9SlNPTi5zdHJpbmdpZnkodi5fc2l6ZSksTT0wO2Z1bmN0aW9uIFMoKXt2YXIgZSxyLG4saT10LmNhbGNkYXRhO2ZvcihmLmNsZWFyQXV0b01hcmdpbklkcyh0KSxULmRyYXdNYXJnaW5QdXNoZXJzKHQpLGQuYWxsb3dBdXRvTWFyZ2luKHQpLGU9MDtlPGkubGVuZ3RoO2UrKyl7dmFyIGE9KG49KHI9aVtlXSlbMF0udHJhY2UpLl9tb2R1bGUuY29sb3JiYXI7ITA9PT1uLnZpc2libGUmJmE/bSh0LHIsYSk6Zi5hdXRvTWFyZ2luKHQsXCJjYlwiK24udWlkKX1yZXR1cm4gZi5kb0F1dG9NYXJnaW4odCksZi5wcmV2aW91c1Byb21pc2VzKHQpfWZ1bmN0aW9uIEUoKXt0Ll90cmFuc2l0aW9uaW5nfHwoVC5kb0F1dG9SYW5nZUFuZENvbnN0cmFpbnRzKHQpLGgmJmQuc2F2ZVJhbmdlSW5pdGlhbCh0KSx1LmdldENvbXBvbmVudE1ldGhvZChcInJhbmdlc2xpZGVyXCIsXCJjYWxjQXV0b3JhbmdlXCIpKHQpKX12YXIgTD1bZi5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7aWYocylyZXR1cm4gci5hZGRGcmFtZXModCxzKX0sZnVuY3Rpb24gZSgpe2Zvcih2YXIgcj12Ll9iYXNlUGxvdE1vZHVsZXMsbj0wO248ci5sZW5ndGg7bisrKXJbbl0uZHJhd0ZyYW1ld29yayYmcltuXS5kcmF3RnJhbWV3b3JrKHQpO2lmKCF2Ll9nbGNhbnZhcyYmdi5faGFzKFwiZ2xcIikmJih2Ll9nbGNhbnZhcz12Ll9nbGNvbnRhaW5lci5zZWxlY3RBbGwoXCIuZ2wtY2FudmFzXCIpLmRhdGEoW3trZXk6XCJjb250ZXh0TGF5ZXJcIixjb250ZXh0OiEwLHBpY2s6ITF9LHtrZXk6XCJmb2N1c0xheWVyXCIsY29udGV4dDohMSxwaWNrOiExfSx7a2V5OlwicGlja0xheWVyXCIsY29udGV4dDohMSxwaWNrOiEwfV0sZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5fSksdi5fZ2xjYW52YXMuZW50ZXIoKS5hcHBlbmQoXCJjYW52YXNcIikuYXR0cihcImNsYXNzXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJnbC1jYW52YXMgZ2wtY2FudmFzLVwiK3Qua2V5LnJlcGxhY2UoXCJMYXllclwiLFwiXCIpfSkuc3R5bGUoe3Bvc2l0aW9uOlwiYWJzb2x1dGVcIix0b3A6MCxsZWZ0OjAsb3ZlcmZsb3c6XCJ2aXNpYmxlXCIsXCJwb2ludGVyLWV2ZW50c1wiOlwibm9uZVwifSkpLHYuX2dsY2FudmFzKXt2Ll9nbGNhbnZhcy5hdHRyKFwid2lkdGhcIix2LndpZHRoKS5hdHRyKFwiaGVpZ2h0XCIsdi5oZWlnaHQpO3ZhciBpPXYuX2dsY2FudmFzLmRhdGEoKVswXS5yZWdsO2lmKGkmJihNYXRoLmZsb29yKHYud2lkdGgpIT09aS5fZ2wuZHJhd2luZ0J1ZmZlcldpZHRofHxNYXRoLmZsb29yKHYuaGVpZ2h0KSE9PWkuX2dsLmRyYXdpbmdCdWZmZXJIZWlnaHQpKXt2YXIgYT1cIldlYkdMIGNvbnRleHQgYnVmZmVyIGFuZCBjYW52YXMgZGltZW5zaW9ucyBkbyBub3QgbWF0Y2ggZHVlIHRvIGJyb3dzZXIvV2ViR0wgYnVnLlwiO2lmKCFNKXJldHVybiBvLmxvZyhhK1wiIENsZWFyaW5nIGdyYXBoIGFuZCBwbG90dGluZyBhZ2Fpbi5cIiksZi5jbGVhblBsb3QoW10se30sdC5fZnVsbERhdGEsdiksZi5zdXBwbHlEZWZhdWx0cyh0KSx2PXQuX2Z1bGxMYXlvdXQsZi5kb0NhbGNkYXRhKHQpLE0rKyxlKCk7by5lcnJvcihhKX19cmV0dXJuXCJoXCI9PT12Lm1vZGViYXIub3JpZW50YXRpb24/di5fbW9kZWJhcmRpdi5zdHlsZShcImhlaWdodFwiLG51bGwpLnN0eWxlKFwid2lkdGhcIixcIjEwMCVcIik6di5fbW9kZWJhcmRpdi5zdHlsZShcIndpZHRoXCIsbnVsbCkuc3R5bGUoXCJoZWlnaHRcIix2LmhlaWdodCtcInB4XCIpLGYucHJldmlvdXNQcm9taXNlcyh0KX0sUyxmdW5jdGlvbigpe2lmKEpTT04uc3RyaW5naWZ5KHYuX3NpemUpIT09aylyZXR1cm4gby5zeW5jT3JBc3luYyhbUyxULmxheW91dFN0eWxlc10sdCl9XTt4JiZMLnB1c2goZnVuY3Rpb24oKXtpZihfKXJldHVybiBvLnN5bmNPckFzeW5jKFt1LmdldENvbXBvbmVudE1ldGhvZChcInNoYXBlc1wiLFwiY2FsY0F1dG9yYW5nZVwiKSx1LmdldENvbXBvbmVudE1ldGhvZChcImFubm90YXRpb25zXCIsXCJjYWxjQXV0b3JhbmdlXCIpLEVdLHQpO0UoKX0pLEwucHVzaChULmxheW91dFN0eWxlcykseCYmTC5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIGQuZHJhdyh0LGg/XCJcIjpcInJlZHJhd1wiKX0pLEwucHVzaChULmRyYXdEYXRhLFQuZmluYWxEcmF3LHksZi5hZGRMaW5rcyxmLnJlaG92ZXIsZi5yZWRyYWcsZi5kb0F1dG9NYXJnaW4sZi5wcmV2aW91c1Byb21pc2VzKTt2YXIgej1vLnN5bmNPckFzeW5jKEwsdCk7cmV0dXJuIHomJnoudGhlbnx8KHo9UHJvbWlzZS5yZXNvbHZlKCkpLHoudGhlbihmdW5jdGlvbigpe3JldHVybiBDKHQpLHR9KX0sci5zZXRQbG90Q29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybiBvLmV4dGVuZEZsYXQodyx0KX0sci5yZWRyYXc9ZnVuY3Rpb24odCl7aWYodD1vLmdldEdyYXBoRGl2KHQpLCFvLmlzUGxvdERpdih0KSl0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6IFwiK3QpO3JldHVybiBBLmNsZWFuRGF0YSh0LmRhdGEpLEEuY2xlYW5MYXlvdXQodC5sYXlvdXQpLHQuY2FsY2RhdGE9dm9pZCAwLHIucGxvdCh0KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdChcInBsb3RseV9yZWRyYXdcIiksdH0pfSxyLm5ld1Bsb3Q9ZnVuY3Rpb24odCxlLG4saSl7cmV0dXJuIHQ9by5nZXRHcmFwaERpdih0KSxmLmNsZWFuUGxvdChbXSx7fSx0Ll9mdWxsRGF0YXx8W10sdC5fZnVsbExheW91dHx8e30pLGYucHVyZ2UodCksci5wbG90KHQsZSxuLGkpfSxyLmV4dGVuZFRyYWNlcz1mdW5jdGlvbiB0KGUsbixpLGEpe3ZhciBzPVIoZT1vLmdldEdyYXBoRGl2KGUpLG4saSxhLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpO2lmKG8uaXNUeXBlZEFycmF5KHQpKWlmKHI8MCl7dmFyIGE9bmV3IHQuY29uc3RydWN0b3IoMCkscz1GKHQsZSk7cjwwPyhuPXMsaT1hKToobj1hLGk9cyl9ZWxzZSBpZihuPW5ldyB0LmNvbnN0cnVjdG9yKHIpLGk9bmV3IHQuY29uc3RydWN0b3IodC5sZW5ndGgrZS5sZW5ndGgtcikscj09PWUubGVuZ3RoKW4uc2V0KGUpLGkuc2V0KHQpO2Vsc2UgaWYocjxlLmxlbmd0aCl7dmFyIGw9ZS5sZW5ndGgtcjtuLnNldChlLnN1YmFycmF5KGwpKSxpLnNldCh0KSxpLnNldChlLnN1YmFycmF5KDAsbCksdC5sZW5ndGgpfWVsc2V7dmFyIGM9ci1lLmxlbmd0aCx1PXQubGVuZ3RoLWM7bi5zZXQodC5zdWJhcnJheSh1KSksbi5zZXQoZSxjKSxpLnNldCh0LnN1YmFycmF5KDAsdSkpfWVsc2Ugbj10LmNvbmNhdChlKSxpPXI+PTAmJnI8bi5sZW5ndGg/bi5zcGxpY2UoMCxuLmxlbmd0aC1yKTpbXTtyZXR1cm5bbixpXX0pLGw9ci5yZWRyYXcoZSksdT1bZSxzLnVwZGF0ZSxpLHMubWF4UG9pbnRzXTtyZXR1cm4gYy5hZGQoZSxyLnByZXBlbmRUcmFjZXMsdSx0LGFyZ3VtZW50cyksbH0sci5wcmVwZW5kVHJhY2VzPWZ1bmN0aW9uIHQoZSxuLGksYSl7dmFyIHM9UihlPW8uZ2V0R3JhcGhEaXYoZSksbixpLGEsZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk7aWYoby5pc1R5cGVkQXJyYXkodCkpaWYocjw9MCl7dmFyIGE9bmV3IHQuY29uc3RydWN0b3IoMCkscz1GKGUsdCk7cjwwPyhuPXMsaT1hKToobj1hLGk9cyl9ZWxzZSBpZihuPW5ldyB0LmNvbnN0cnVjdG9yKHIpLGk9bmV3IHQuY29uc3RydWN0b3IodC5sZW5ndGgrZS5sZW5ndGgtcikscj09PWUubGVuZ3RoKW4uc2V0KGUpLGkuc2V0KHQpO2Vsc2UgaWYocjxlLmxlbmd0aCl7dmFyIGw9ZS5sZW5ndGgtcjtuLnNldChlLnN1YmFycmF5KDAsbCkpLGkuc2V0KGUuc3ViYXJyYXkobCkpLGkuc2V0KHQsbCl9ZWxzZXt2YXIgYz1yLWUubGVuZ3RoO24uc2V0KGUpLG4uc2V0KHQuc3ViYXJyYXkoMCxjKSxlLmxlbmd0aCksaS5zZXQodC5zdWJhcnJheShjKSl9ZWxzZSBuPWUuY29uY2F0KHQpLGk9cj49MCYmcjxuLmxlbmd0aD9uLnNwbGljZShyLG4ubGVuZ3RoKTpbXTtyZXR1cm5bbixpXX0pLGw9ci5yZWRyYXcoZSksdT1bZSxzLnVwZGF0ZSxpLHMubWF4UG9pbnRzXTtyZXR1cm4gYy5hZGQoZSxyLmV4dGVuZFRyYWNlcyx1LHQsYXJndW1lbnRzKSxsfSxyLmFkZFRyYWNlcz1mdW5jdGlvbiB0KGUsbixpKXtlPW8uZ2V0R3JhcGhEaXYoZSk7dmFyIGEscyxsPVtdLHU9ci5kZWxldGVUcmFjZXMsaD10LGY9W2UsbF0scD1bZSxuXTtmb3IoZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk7aWYoIUFycmF5LmlzQXJyYXkodC5kYXRhKSl0aHJvdyBuZXcgRXJyb3IoXCJnZC5kYXRhIG11c3QgYmUgYW4gYXJyYXkuXCIpO2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcihcInRyYWNlcyBtdXN0IGJlIGRlZmluZWQuXCIpO2ZvcihBcnJheS5pc0FycmF5KGUpfHwoZT1bZV0pLG49MDtuPGUubGVuZ3RoO24rKylpZihcIm9iamVjdFwiIT10eXBlb2YoaT1lW25dKXx8QXJyYXkuaXNBcnJheShpKXx8bnVsbD09PWkpdGhyb3cgbmV3IEVycm9yKFwiYWxsIHZhbHVlcyBpbiB0cmFjZXMgYXJyYXkgbXVzdCBiZSBub24tYXJyYXkgb2JqZWN0c1wiKTtpZihcInVuZGVmaW5lZFwiPT10eXBlb2Ygcnx8QXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgciYmci5sZW5ndGghPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJpZiBpbmRpY2VzIGlzIHNwZWNpZmllZCwgdHJhY2VzLmxlbmd0aCBtdXN0IGVxdWFsIGluZGljZXMubGVuZ3RoXCIpfShlLG4saSksQXJyYXkuaXNBcnJheShuKXx8KG49W25dKSxuPW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBvLmV4dGVuZEZsYXQoe30sdCl9KSxBLmNsZWFuRGF0YShuKSxhPTA7YTxuLmxlbmd0aDthKyspZS5kYXRhLnB1c2goblthXSk7Zm9yKGE9MDthPG4ubGVuZ3RoO2ErKylsLnB1c2goLW4ubGVuZ3RoK2EpO2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBpKXJldHVybiBzPXIucmVkcmF3KGUpLGMuYWRkKGUsdSxmLGgscCkscztBcnJheS5pc0FycmF5KGkpfHwoaT1baV0pO3RyeXtQKGUsbCxpKX1jYXRjaCh0KXt0aHJvdyBlLmRhdGEuc3BsaWNlKGUuZGF0YS5sZW5ndGgtbi5sZW5ndGgsbi5sZW5ndGgpLHR9cmV0dXJuIGMuc3RhcnRTZXF1ZW5jZShlKSxjLmFkZChlLHUsZixoLHApLHM9ci5tb3ZlVHJhY2VzKGUsbCxpKSxjLnN0b3BTZXF1ZW5jZShlKSxzfSxyLmRlbGV0ZVRyYWNlcz1mdW5jdGlvbiB0KGUsbil7ZT1vLmdldEdyYXBoRGl2KGUpO3ZhciBpLGEscz1bXSxsPXIuYWRkVHJhY2VzLHU9dCxoPVtlLHMsbl0sZj1bZSxuXTtpZihcInVuZGVmaW5lZFwiPT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoXCJpbmRpY2VzIG11c3QgYmUgYW4gaW50ZWdlciBvciBhcnJheSBvZiBpbnRlZ2Vycy5cIik7Zm9yKEFycmF5LmlzQXJyYXkobil8fChuPVtuXSksRChlLG4sXCJpbmRpY2VzXCIpLChuPUkobixlLmRhdGEubGVuZ3RoLTEpKS5zb3J0KG8uc29ydGVyRGVzKSxpPTA7aTxuLmxlbmd0aDtpKz0xKWE9ZS5kYXRhLnNwbGljZShuW2ldLDEpWzBdLHMucHVzaChhKTt2YXIgcD1yLnJlZHJhdyhlKTtyZXR1cm4gYy5hZGQoZSxsLGgsdSxmKSxwfSxyLm1vdmVUcmFjZXM9ZnVuY3Rpb24gdChlLG4saSl7dmFyIGEscz1bXSxsPVtdLHU9dCxoPXQsZj1bZT1vLmdldEdyYXBoRGl2KGUpLGksbl0scD1bZSxuLGldO2lmKFAoZSxuLGkpLG49QXJyYXkuaXNBcnJheShuKT9uOltuXSxcInVuZGVmaW5lZFwiPT10eXBlb2YgaSlmb3IoaT1bXSxhPTA7YTxuLmxlbmd0aDthKyspaS5wdXNoKC1uLmxlbmd0aCthKTtmb3IoaT1BcnJheS5pc0FycmF5KGkpP2k6W2ldLG49SShuLGUuZGF0YS5sZW5ndGgtMSksaT1JKGksZS5kYXRhLmxlbmd0aC0xKSxhPTA7YTxlLmRhdGEubGVuZ3RoO2ErKyktMT09PW4uaW5kZXhPZihhKSYmcy5wdXNoKGUuZGF0YVthXSk7Zm9yKGE9MDthPG4ubGVuZ3RoO2ErKylsLnB1c2goe25ld0luZGV4OmlbYV0sdHJhY2U6ZS5kYXRhW25bYV1dfSk7Zm9yKGwuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0Lm5ld0luZGV4LWUubmV3SW5kZXh9KSxhPTA7YTxsLmxlbmd0aDthKz0xKXMuc3BsaWNlKGxbYV0ubmV3SW5kZXgsMCxsW2FdLnRyYWNlKTtlLmRhdGE9czt2YXIgZD1yLnJlZHJhdyhlKTtyZXR1cm4gYy5hZGQoZSx1LGYsaCxwKSxkfSxyLnJlc3R5bGU9QixyLl9zdG9yZURpcmVjdEdVSUVkaXQ9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbiBpbiByKXtWKG4scyh0LG4pLmdldCgpLHJbbl0sZSl9fSxyLnJlbGF5b3V0PUg7dmFyIFc9L15beHl6XWF4aXNbMC05XSpcXC5yYW5nZShcXFtbMHwxXVxcXSk/JC8sWD0vXlt4eXpdYXhpc1swLTldKlxcLmF1dG9yYW5nZSQvLFo9L15beHl6XWF4aXNbMC05XSpcXC5kb21haW4oXFxbWzB8MV1cXF0pPyQvO2Z1bmN0aW9uICQodCxlKXt2YXIgcixuLGksYT10LmxheW91dCxsPXQuX2Z1bGxMYXlvdXQsYz1sLl9ndWlFZGl0aW5nLGY9aihsLl9wcmVHVUksYykscD1PYmplY3Qua2V5cyhlKSxnPWQubGlzdCh0KSx2PW8uZXh0ZW5kRGVlcEFsbCh7fSxlKSxtPXt9O2ZvcihxKGUpLHA9T2JqZWN0LmtleXMoZSksbj0wO248cC5sZW5ndGg7bisrKWlmKDA9PT1wW25dLmluZGV4T2YoXCJhbGxheGVzXCIpKXtmb3IoaT0wO2k8Zy5sZW5ndGg7aSsrKXt2YXIgeT1nW2ldLl9pZC5zdWJzdHIoMSkseD0tMSE9PXkuaW5kZXhPZihcInNjZW5lXCIpP3krXCIuXCI6XCJcIixiPXBbbl0ucmVwbGFjZShcImFsbGF4ZXNcIix4K2dbaV0uX25hbWUpO2VbYl18fChlW2JdPWVbcFtuXV0pfWRlbGV0ZSBlW3Bbbl1dfXZhciBfPU0ubGF5b3V0RmxhZ3MoKSx3PXt9LFQ9e307ZnVuY3Rpb24gRSh0LHIpe2lmKEFycmF5LmlzQXJyYXkodCkpdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe0UodCxyKX0pO2Vsc2UgaWYoISh0IGluIGV8fEEuaGFzUGFyZW50KGUsdCkpKXt2YXIgbj1mKGEsdCk7dCBpbiBUfHwoVFt0XT1OKG4uZ2V0KCkpKSx2b2lkIDAhPT1yJiZuLnNldChyKX19dmFyIEMsTD17fTtmdW5jdGlvbiB6KHQpe3ZhciBlPWQubmFtZTJpZCh0LnNwbGl0KFwiLlwiKVswXSk7cmV0dXJuIExbZV09MSxlfWZvcih2YXIgTyBpbiBlKXtpZihBLmhhc1BhcmVudChlLE8pKXRocm93IG5ldyBFcnJvcihcImNhbm5vdCBzZXQgXCIrTytcIiBhbmQgYSBwYXJlbnQgYXR0cmlidXRlIHNpbXVsdGFuZW91c2x5XCIpO2Zvcih2YXIgST1mKGEsTyksRD1lW09dLFA9SS5wYXJ0cy5sZW5ndGgtMTtQPjAmJlwic3RyaW5nXCIhPXR5cGVvZiBJLnBhcnRzW1BdOylQLS07dmFyIFI9SS5wYXJ0c1tQXSxGPUkucGFydHNbUC0xXStcIi5cIitSLEI9SS5wYXJ0cy5zbGljZSgwLFApLmpvaW4oXCIuXCIpLFY9cyh0LmxheW91dCxCKS5nZXQoKSxVPXMobCxCKS5nZXQoKSxIPUkuZ2V0KCk7aWYodm9pZCAwIT09RCl7d1tPXT1ELFRbT109XCJyZXZlcnNlXCI9PT1SP0Q6TihIKTt2YXIgRz1oLmdldExheW91dFZhbE9iamVjdChsLEkucGFydHMpO2lmKEcmJkcuaW1wbGllZEVkaXRzJiZudWxsIT09RClmb3IodmFyIFkgaW4gRy5pbXBsaWVkRWRpdHMpRShvLnJlbGF0aXZlQXR0cihPLFkpLEcuaW1wbGllZEVkaXRzW1ldKTtpZigtMSE9PVtcIndpZHRoXCIsXCJoZWlnaHRcIl0uaW5kZXhPZihPKSlpZihEKXtFKFwiYXV0b3NpemVcIixudWxsKTt2YXIgJD1cImhlaWdodFwiPT09Tz9cIndpZHRoXCI6XCJoZWlnaHRcIjtFKCQsbFskXSl9ZWxzZSBsW09dPXQuX2luaXRpYWxBdXRvU2l6ZVtPXTtlbHNlIGlmKFwiYXV0b3NpemVcIj09PU8pRShcIndpZHRoXCIsRD9udWxsOmwud2lkdGgpLEUoXCJoZWlnaHRcIixEP251bGw6bC5oZWlnaHQpO2Vsc2UgaWYoRi5tYXRjaChXKSl6KEYpLHMobCxCK1wiLl9pbnB1dFJhbmdlXCIpLnNldChudWxsKTtlbHNlIGlmKEYubWF0Y2goWCkpe3ooRikscyhsLEIrXCIuX2lucHV0UmFuZ2VcIikuc2V0KG51bGwpO3ZhciBLPXMobCxCKS5nZXQoKTtLLl9pbnB1dERvbWFpbiYmKEsuX2lucHV0LmRvbWFpbj1LLl9pbnB1dERvbWFpbi5zbGljZSgpKX1lbHNlIEYubWF0Y2goWikmJnMobCxCK1wiLl9pbnB1dERvbWFpblwiKS5zZXQobnVsbCk7aWYoXCJ0eXBlXCI9PT1SKXt2YXIgUT1WLHR0PVwibGluZWFyXCI9PT1VLnR5cGUmJlwibG9nXCI9PT1ELGV0PVwibG9nXCI9PT1VLnR5cGUmJlwibGluZWFyXCI9PT1EO2lmKHR0fHxldCl7aWYoUSYmUS5yYW5nZSlpZihVLmF1dG9yYW5nZSl0dCYmKFEucmFuZ2U9US5yYW5nZVsxXT5RLnJhbmdlWzBdP1sxLDJdOlsyLDFdKTtlbHNle3ZhciBydD1RLnJhbmdlWzBdLG50PVEucmFuZ2VbMV07dHQ/KHJ0PD0wJiZudDw9MCYmRShCK1wiLmF1dG9yYW5nZVwiLCEwKSxydDw9MD9ydD1udC8xZTY6bnQ8PTAmJihudD1ydC8xZTYpLEUoQitcIi5yYW5nZVswXVwiLE1hdGgubG9nKHJ0KS9NYXRoLkxOMTApLEUoQitcIi5yYW5nZVsxXVwiLE1hdGgubG9nKG50KS9NYXRoLkxOMTApKTooRShCK1wiLnJhbmdlWzBdXCIsTWF0aC5wb3coMTAscnQpKSxFKEIrXCIucmFuZ2VbMV1cIixNYXRoLnBvdygxMCxudCkpKX1lbHNlIEUoQitcIi5hdXRvcmFuZ2VcIiwhMCk7QXJyYXkuaXNBcnJheShsLl9zdWJwbG90cy5wb2xhcikmJmwuX3N1YnBsb3RzLnBvbGFyLmxlbmd0aCYmbFtJLnBhcnRzWzBdXSYmXCJyYWRpYWxheGlzXCI9PT1JLnBhcnRzWzFdJiZkZWxldGUgbFtJLnBhcnRzWzBdXS5fc3VicGxvdC52aWV3SW5pdGlhbFtcInJhZGlhbGF4aXMucmFuZ2VcIl0sdS5nZXRDb21wb25lbnRNZXRob2QoXCJhbm5vdGF0aW9uc1wiLFwiY29udmVydENvb3Jkc1wiKSh0LFUsRCxFKSx1LmdldENvbXBvbmVudE1ldGhvZChcImltYWdlc1wiLFwiY29udmVydENvb3Jkc1wiKSh0LFUsRCxFKX1lbHNlIEUoQitcIi5hdXRvcmFuZ2VcIiwhMCksRShCK1wiLnJhbmdlXCIsbnVsbCk7cyhsLEIrXCIuX2lucHV0UmFuZ2VcIikuc2V0KG51bGwpfWVsc2UgaWYoUi5tYXRjaChTKSl7dmFyIGl0PXMobCxPKS5nZXQoKSxhdD0oRHx8e30pLnR5cGU7YXQmJlwiLVwiIT09YXR8fChhdD1cImxpbmVhclwiKSx1LmdldENvbXBvbmVudE1ldGhvZChcImFubm90YXRpb25zXCIsXCJjb252ZXJ0Q29vcmRzXCIpKHQsaXQsYXQsRSksdS5nZXRDb21wb25lbnRNZXRob2QoXCJpbWFnZXNcIixcImNvbnZlcnRDb29yZHNcIikodCxpdCxhdCxFKX12YXIgb3Q9ay5jb250YWluZXJBcnJheU1hdGNoKE8pO2lmKG90KXtyPW90LmFycmF5LG49b3QuaW5kZXg7dmFyIHN0PW90LnByb3BlcnR5LGx0PUd8fHtlZGl0VHlwZTpcImNhbGNcIn07XCJcIiE9PW4mJlwiXCI9PT1zdCYmKGsuaXNBZGRWYWwoRCk/VFtPXT1udWxsOmsuaXNSZW1vdmVWYWwoRCk/VFtPXT0ocyhhLHIpLmdldCgpfHxbXSlbbl06by53YXJuKFwidW5yZWNvZ25pemVkIGZ1bGwgb2JqZWN0IHZhbHVlXCIsZSkpLE0udXBkYXRlKF8sbHQpLG1bcl18fChtW3JdPXt9KTt2YXIgY3Q9bVtyXVtuXTtjdHx8KGN0PW1bcl1bbl09e30pLGN0W3N0XT1ELGRlbGV0ZSBlW09dfWVsc2VcInJldmVyc2VcIj09PVI/KFYucmFuZ2U/Vi5yYW5nZS5yZXZlcnNlKCk6KEUoQitcIi5hdXRvcmFuZ2VcIiwhMCksVi5yYW5nZT1bMSwwXSksVS5hdXRvcmFuZ2U/Xy5jYWxjPSEwOl8ucGxvdD0hMCk6KGwuX2hhcyhcInNjYXR0ZXItbGlrZVwiKSYmbC5faGFzKFwicmVnbFwiKSYmXCJkcmFnbW9kZVwiPT09TyYmKFwibGFzc29cIj09PUR8fFwic2VsZWN0XCI9PT1EKSYmXCJsYXNzb1wiIT09SCYmXCJzZWxlY3RcIiE9PUg/Xy5wbG90PSEwOmwuX2hhcyhcImdsMmRcIik/Xy5wbG90PSEwOkc/TS51cGRhdGUoXyxHKTpfLmNhbGM9ITAsSS5zZXQoRCkpfX1mb3IociBpbiBtKXtrLmFwcGx5Q29udGFpbmVyQXJyYXlDaGFuZ2VzKHQsZihhLHIpLG1bcl0sXyxmKXx8KF8ucGxvdD0hMCl9dmFyIHV0PWwuX2F4aXNDb25zdHJhaW50R3JvdXBzfHxbXTtmb3IoQyBpbiBMKWZvcihuPTA7bjx1dC5sZW5ndGg7bisrKXt2YXIgaHQ9dXRbbl07aWYoaHRbQ10pZm9yKHZhciBmdCBpbiBfLmNhbGM9ITAsaHQpTFtmdF18fChkLmdldEZyb21JZCh0LGZ0KS5fY29uc3RyYWludFNocmlua2FibGU9ITApfXJldHVybihKKHQpfHxlLmhlaWdodHx8ZS53aWR0aCkmJihfLnBsb3Q9ITApLChfLnBsb3R8fF8uY2FsYykmJihfLmxheW91dFJlcGxvdD0hMCkse2ZsYWdzOl8scmFuZ2VzQWx0ZXJlZDpMLHVuZG9pdDpULHJlZG9pdDp3LGV2ZW50RGF0YTp2fX1mdW5jdGlvbiBKKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLndpZHRoLG49ZS5oZWlnaHQ7cmV0dXJuIHQubGF5b3V0LmF1dG9zaXplJiZmLnBsb3RBdXRvU2l6ZSh0LHQubGF5b3V0LGUpLGUud2lkdGghPT1yfHxlLmhlaWdodCE9PW59ZnVuY3Rpb24gSyh0LGUsbixpKXtpZih0PW8uZ2V0R3JhcGhEaXYodCksQS5jbGVhclByb21pc2VRdWV1ZSh0KSx0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHQpO28uaXNQbGFpbk9iamVjdChlKXx8KGU9e30pLG8uaXNQbGFpbk9iamVjdChuKXx8KG49e30pLE9iamVjdC5rZXlzKGUpLmxlbmd0aCYmKHQuY2hhbmdlZD0hMCksT2JqZWN0LmtleXMobikubGVuZ3RoJiYodC5jaGFuZ2VkPSEwKTt2YXIgYT1BLmNvZXJjZVRyYWNlSW5kaWNlcyh0LGkpLHM9VSh0LG8uZXh0ZW5kRmxhdCh7fSxlKSxhKSxsPXMuZmxhZ3MsdT0kKHQsby5leHRlbmRGbGF0KHt9LG4pKSxoPXUuZmxhZ3M7KGwuY2FsY3x8aC5jYWxjKSYmKHQuY2FsY2RhdGE9dm9pZCAwKSxsLmNsZWFyQXhpc1R5cGVzJiZBLmNsZWFyQXhpc1R5cGVzKHQsYSxuKTt2YXIgcD1bXTtpZihsLmZ1bGxSZXBsb3QmJmgubGF5b3V0UmVwbG90KXt2YXIgZD10LmRhdGEsZz10LmxheW91dDt0LmRhdGE9dm9pZCAwLHQubGF5b3V0PXZvaWQgMCxwLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gci5wbG90KHQsZCxnKX0pfWVsc2UgbC5mdWxsUmVwbG90P3AucHVzaChyLnBsb3QpOmgubGF5b3V0UmVwbG90P3AucHVzaChULmxheW91dFJlcGxvdCk6KHAucHVzaChmLnByZXZpb3VzUHJvbWlzZXMpLEcodCxoLHUpfHxmLnN1cHBseURlZmF1bHRzKHQpLGwuc3R5bGUmJnAucHVzaChULmRvVHJhY2VTdHlsZSksbC5jb2xvcmJhcnMmJnAucHVzaChULmRvQ29sb3JCYXJzKSxoLmxlZ2VuZCYmcC5wdXNoKFQuZG9MZWdlbmQpLGgubGF5b3V0c3R5bGUmJnAucHVzaChULmxheW91dFN0eWxlcyksaC5heHJhbmdlJiZZKHAsdS5yYW5nZXNBbHRlcmVkKSxoLnRpY2tzJiZwLnB1c2goVC5kb1RpY2tzUmVsYXlvdXQpLGgubW9kZWJhciYmcC5wdXNoKFQuZG9Nb2RlQmFyKSxoLmNhbWVyYSYmcC5wdXNoKFQuZG9DYW1lcmEpLHAucHVzaChDKSk7cC5wdXNoKGYucmVob3ZlcixmLnJlZHJhZyksYy5hZGQodCxLLFt0LHMudW5kb2l0LHUudW5kb2l0LHMudHJhY2VzXSxLLFt0LHMucmVkb2l0LHUucmVkb2l0LHMudHJhY2VzXSk7dmFyIHY9by5zeW5jT3JBc3luYyhwLHQpO3JldHVybiB2JiZ2LnRoZW58fCh2PVByb21pc2UucmVzb2x2ZSh0KSksdi50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdChcInBsb3RseV91cGRhdGVcIix7ZGF0YTpzLmV2ZW50RGF0YSxsYXlvdXQ6dS5ldmVudERhdGF9KSx0fSl9ZnVuY3Rpb24gUSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5fZnVsbExheW91dC5fZ3VpRWRpdGluZz0hMDt2YXIgcj10LmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gZS5fZnVsbExheW91dC5fZ3VpRWRpdGluZz0hMSxyfX1yLnVwZGF0ZT1LLHIuX2d1aVJlc3R5bGU9UShCKSxyLl9ndWlSZWxheW91dD1RKEgpLHIuX2d1aVVwZGF0ZT1RKEspO3ZhciB0dD1be3BhdHRlcm46L15oaWRkZW5sYWJlbHMvLGF0dHI6XCJsZWdlbmQudWlyZXZpc2lvblwifSx7cGF0dGVybjovXigoeHx5KWF4aXNcXGQqKVxcLigoYXV0byk/cmFuZ2V8dGl0bGVcXC50ZXh0KS99LHtwYXR0ZXJuOi9heGlzXFxkKlxcLnNob3dzcGlrZXMkLyxhdHRyOlwibW9kZWJhci51aXJldmlzaW9uXCJ9LHtwYXR0ZXJuOi8oaG92ZXJ8ZHJhZyltb2RlJC8sYXR0cjpcIm1vZGViYXIudWlyZXZpc2lvblwifSx7cGF0dGVybjovXihzY2VuZVxcZCopXFwuY2FtZXJhL30se3BhdHRlcm46L14oZ2VvXFxkKilcXC4ocHJvamVjdGlvbnxjZW50ZXIpL30se3BhdHRlcm46L14odGVybmFyeVxcZCpcXC5bYWJjXWF4aXMpXFwuKG1pbnx0aXRsZVxcLnRleHQpJC99LHtwYXR0ZXJuOi9eKHBvbGFyXFxkKlxcLnJhZGlhbGF4aXMpXFwuKChhdXRvKT9yYW5nZXxhbmdsZXx0aXRsZVxcLnRleHQpL30se3BhdHRlcm46L14ocG9sYXJcXGQqXFwuYW5ndWxhcmF4aXMpXFwucm90YXRpb24vfSx7cGF0dGVybjovXihtYXBib3hcXGQqKVxcLihjZW50ZXJ8em9vbXxiZWFyaW5nfHBpdGNoKS99LHtwYXR0ZXJuOi9ebGVnZW5kXFwuKHh8eSkkLyxhdHRyOlwiZWRpdHJldmlzaW9uXCJ9LHtwYXR0ZXJuOi9eKHNoYXBlc3xhbm5vdGF0aW9ucykvLGF0dHI6XCJlZGl0cmV2aXNpb25cIn0se3BhdHRlcm46L150aXRsZVxcLnRleHQkLyxhdHRyOlwiZWRpdHJldmlzaW9uXCJ9XSxldD1be3BhdHRlcm46L15zZWxlY3RlZHBvaW50cyQvLGF0dHI6XCJzZWxlY3Rpb25yZXZpc2lvblwifSx7cGF0dGVybjovKF58dmFsdWVcXC4pdmlzaWJsZSQvLGF0dHI6XCJsZWdlbmQudWlyZXZpc2lvblwifSx7cGF0dGVybjovXmRpbWVuc2lvbnNcXFtcXGQrXFxdXFwuY29uc3RyYWludHJhbmdlL30se3BhdHRlcm46L15ub2RlXFwuKHh8eXxncm91cHMpL30se3BhdHRlcm46L15sZXZlbCQvfSx7cGF0dGVybjovKF58dmFsdWVcXC4pbmFtZSQvfSx7cGF0dGVybjovY29sb3JiYXJcXC50aXRsZVxcLnRleHQkL30se3BhdHRlcm46L2NvbG9yYmFyXFwuKHh8eSkkLyxhdHRyOlwiZWRpdHJldmlzaW9uXCJ9XTtmdW5jdGlvbiBydCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdLGk9dC5tYXRjaChuLnBhdHRlcm4pO2lmKGkpcmV0dXJue2hlYWQ6aVsxXSxhdHRyOm4uYXR0cn19fWZ1bmN0aW9uIG50KHQsZSl7dmFyIHI9cyhlLHQpLmdldCgpO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHI7dmFyIG49dC5zcGxpdChcIi5cIik7Zm9yKG4ucG9wKCk7bi5sZW5ndGg+MTspaWYobi5wb3AoKSx2b2lkIDAhPT0ocj1zKGUsbi5qb2luKFwiLlwiKStcIi51aXJldmlzaW9uXCIpLmdldCgpKSlyZXR1cm4gcjtyZXR1cm4gZS51aXJldmlzaW9ufWZ1bmN0aW9uIGl0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXS5fZnVsbElucHV0LnVpZD09PXQpcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gYXQodCxlLHIpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKGVbbl0udWlkPT09dClyZXR1cm4gbjtyZXR1cm4hZVtyXXx8ZVtyXS51aWQ/LTE6cn1mdW5jdGlvbiBvdCh0LGUpe3ZhciByPW8uaXNQbGFpbk9iamVjdCh0KSxuPUFycmF5LmlzQXJyYXkodCk7cmV0dXJuIHJ8fG4/KHImJm8uaXNQbGFpbk9iamVjdChlKXx8biYmQXJyYXkuaXNBcnJheShlKSkmJkpTT04uc3RyaW5naWZ5KHQpPT09SlNPTi5zdHJpbmdpZnkoZSk6dD09PWV9ZnVuY3Rpb24gc3QodCxlLHIsbil7dmFyIGksYSxsLGM9bi5nZXRWYWxPYmplY3QsdT1uLmZsYWdzLGg9bi5pbW11dGFibGUsZj1uLmluQXJyYXkscD1uLmFycmF5SW5kZXg7ZnVuY3Rpb24gZCgpe3ZhciB0PWkuZWRpdFR5cGU7ZiYmLTEhPT10LmluZGV4T2YoXCJhcnJheWRyYXdcIik/by5wdXNoVW5pcXVlKHUuYXJyYXlzW2ZdLHApOihNLnVwZGF0ZSh1LGkpLFwibm9uZVwiIT09dCYmdS5uQ2hhbmdlcysrLG4udHJhbnNpdGlvbiYmaS5hbmltJiZ1Lm5DaGFuZ2VzQW5pbSsrLChXLnRlc3QobCl8fFgudGVzdChsKSkmJih1LnJhbmdlc0FsdGVyZWRbclswXV09MSksWi50ZXN0KGwpJiZzKGUsXCJfaW5wdXREb21haW5cIikuc2V0KG51bGwpLFwiZGF0YXJldmlzaW9uXCI9PT1hJiYodS5uZXdEYXRhUmV2aXNpb249MSkpfWZ1bmN0aW9uIGcodCl7cmV0dXJuXCJkYXRhX2FycmF5XCI9PT10LnZhbFR5cGV8fHQuYXJyYXlPa31mb3IoYSBpbiB0KXtpZih1LmNhbGMmJiFuLnRyYW5zaXRpb24pcmV0dXJuO3ZhciB2PXRbYV0sbT1lW2FdLHk9ci5jb25jYXQoYSk7aWYobD15LmpvaW4oXCIuXCIpLFwiX1wiIT09YS5jaGFyQXQoMCkmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHYmJnYhPT1tKXtpZigoXCJ0aWNrMFwiPT09YXx8XCJkdGlja1wiPT09YSkmJlwiZ2VvXCIhPT1yWzBdKXt2YXIgeD1lLnRpY2ttb2RlO2lmKFwiYXV0b1wiPT09eHx8XCJhcnJheVwiPT09eHx8IXgpY29udGludWV9aWYoKFwicmFuZ2VcIiE9PWF8fCFlLmF1dG9yYW5nZSkmJihcInptaW5cIiE9PWEmJlwiem1heFwiIT09YXx8XCJjb250b3VyY2FycGV0XCIhPT1lLnR5cGUpJiYoaT1jKHkpKSYmKCFpLl9jb21wYXJlQXNKU09OfHxKU09OLnN0cmluZ2lmeSh2KSE9PUpTT04uc3RyaW5naWZ5KG0pKSl7dmFyIGIsXz1pLnZhbFR5cGUsdz1nKGkpLGs9QXJyYXkuaXNBcnJheSh2KSxBPUFycmF5LmlzQXJyYXkobSk7aWYoayYmQSl7dmFyIFQ9XCJfaW5wdXRfXCIrYSxTPXRbVF0sRT1lW1RdO2lmKEFycmF5LmlzQXJyYXkoUykmJlM9PT1FKWNvbnRpbnVlfWlmKHZvaWQgMD09PW0pdyYmaz91LmNhbGM9ITA6ZCgpO2Vsc2UgaWYoaS5faXNMaW5rZWRUb0FycmF5KXt2YXIgQz1bXSxMPSExO2Z8fCh1LmFycmF5c1thXT1DKTt2YXIgej1NYXRoLm1pbih2Lmxlbmd0aCxtLmxlbmd0aCksTz1NYXRoLm1heCh2Lmxlbmd0aCxtLmxlbmd0aCk7aWYoeiE9PU8pe2lmKFwiYXJyYXlkcmF3XCIhPT1pLmVkaXRUeXBlKXtkKCk7Y29udGludWV9TD0hMH1mb3IoYj0wO2I8ejtiKyspc3QodltiXSxtW2JdLHkuY29uY2F0KGIpLG8uZXh0ZW5kRmxhdCh7aW5BcnJheTphLGFycmF5SW5kZXg6Yn0sbikpO2lmKEwpZm9yKGI9ejtiPE87YisrKUMucHVzaChiKX1lbHNlIV8mJm8uaXNQbGFpbk9iamVjdCh2KT9zdCh2LG0seSxuKTp3P2smJkE/KGgmJih1LmNhbGM9ITApLChofHxuLm5ld0RhdGFSZXZpc2lvbikmJmQoKSk6ayE9PUE/dS5jYWxjPSEwOmQoKTprJiZBJiZ2Lmxlbmd0aD09PW0ubGVuZ3RoJiZTdHJpbmcodik9PT1TdHJpbmcobSl8fGQoKX19fWZvcihhIGluIGUpaWYoIShhIGluIHR8fFwiX1wiPT09YS5jaGFyQXQoMCl8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGVbYV0pKXtpZihnKGk9YyhyLmNvbmNhdChhKSkpJiZBcnJheS5pc0FycmF5KGVbYV0pKXJldHVybiB2b2lkKHUuY2FsYz0hMCk7ZCgpfX1mdW5jdGlvbiBsdCh0KXt2YXIgZT1uLnNlbGVjdCh0KSxyPXQuX2Z1bGxMYXlvdXQ7aWYoci5fY29udGFpbmVyPWUuc2VsZWN0QWxsKFwiLnBsb3QtY29udGFpbmVyXCIpLmRhdGEoWzBdKSxyLl9jb250YWluZXIuZW50ZXIoKS5pbnNlcnQoXCJkaXZcIixcIjpmaXJzdC1jaGlsZFwiKS5jbGFzc2VkKFwicGxvdC1jb250YWluZXJcIiwhMCkuY2xhc3NlZChcInBsb3RseVwiLCEwKSxyLl9wYXBlcmRpdj1yLl9jb250YWluZXIuc2VsZWN0QWxsKFwiLnN2Zy1jb250YWluZXJcIikuZGF0YShbMF0pLHIuX3BhcGVyZGl2LmVudGVyKCkuYXBwZW5kKFwiZGl2XCIpLmNsYXNzZWQoXCJzdmctY29udGFpbmVyXCIsITApLnN0eWxlKFwicG9zaXRpb25cIixcInJlbGF0aXZlXCIpLHIuX2dsY29udGFpbmVyPXIuX3BhcGVyZGl2LnNlbGVjdEFsbChcIi5nbC1jb250YWluZXJcIikuZGF0YShbe31dKSxyLl9nbGNvbnRhaW5lci5lbnRlcigpLmFwcGVuZChcImRpdlwiKS5jbGFzc2VkKFwiZ2wtY29udGFpbmVyXCIsITApLHIuX3BhcGVyZGl2LnNlbGVjdEFsbChcIi5tYWluLXN2Z1wiKS5yZW1vdmUoKSxyLl9wYXBlcmRpdi5zZWxlY3QoXCIubW9kZWJhci1jb250YWluZXJcIikucmVtb3ZlKCksci5fcGFwZXI9ci5fcGFwZXJkaXYuaW5zZXJ0KFwic3ZnXCIsXCI6Zmlyc3QtY2hpbGRcIikuY2xhc3NlZChcIm1haW4tc3ZnXCIsITApLHIuX3RvcHBhcGVyPXIuX3BhcGVyZGl2LmFwcGVuZChcInN2Z1wiKS5jbGFzc2VkKFwibWFpbi1zdmdcIiwhMCksci5fbW9kZWJhcmRpdj1yLl9wYXBlcmRpdi5hcHBlbmQoXCJkaXZcIiksci5faG92ZXJwYXBlcj1yLl9wYXBlcmRpdi5hcHBlbmQoXCJzdmdcIikuY2xhc3NlZChcIm1haW4tc3ZnXCIsITApLCFyLl91aWQpe3ZhciBpPXt9O24uc2VsZWN0QWxsKFwiZGVmc1wiKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5pZCYmKGlbdGhpcy5pZC5zcGxpdChcIi1cIilbMV1dPTEpfSksci5fdWlkPW8ucmFuZHN0cihpKX1yLl9wYXBlcmRpdi5zZWxlY3RBbGwoXCIubWFpbi1zdmdcIikuYXR0cih4LnN2Z0F0dHJzKSxyLl9kZWZzPXIuX3BhcGVyLmFwcGVuZChcImRlZnNcIikuYXR0cihcImlkXCIsXCJkZWZzLVwiK3IuX3VpZCksci5fY2xpcHM9ci5fZGVmcy5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJjbGlwc1wiLCEwKSxyLl90b3BkZWZzPXIuX3RvcHBhcGVyLmFwcGVuZChcImRlZnNcIikuYXR0cihcImlkXCIsXCJ0b3BkZWZzLVwiK3IuX3VpZCksci5fdG9wY2xpcHM9ci5fdG9wZGVmcy5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJjbGlwc1wiLCEwKSxyLl9iZ0xheWVyPXIuX3BhcGVyLmFwcGVuZChcImdcIikuY2xhc3NlZChcImJnbGF5ZXJcIiwhMCksci5fZHJhZ2dlcnM9ci5fcGFwZXIuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiZHJhZ2xheWVyXCIsITApO3ZhciBhPXIuX3BhcGVyLmFwcGVuZChcImdcIikuY2xhc3NlZChcImxheWVyLWJlbG93XCIsITApO3IuX2ltYWdlTG93ZXJMYXllcj1hLmFwcGVuZChcImdcIikuY2xhc3NlZChcImltYWdlbGF5ZXJcIiwhMCksci5fc2hhcGVMb3dlckxheWVyPWEuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwic2hhcGVsYXllclwiLCEwKSxyLl9jYXJ0ZXNpYW5sYXllcj1yLl9wYXBlci5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJjYXJ0ZXNpYW5sYXllclwiLCEwKSxyLl9wb2xhcmxheWVyPXIuX3BhcGVyLmFwcGVuZChcImdcIikuY2xhc3NlZChcInBvbGFybGF5ZXJcIiwhMCksci5fdGVybmFyeWxheWVyPXIuX3BhcGVyLmFwcGVuZChcImdcIikuY2xhc3NlZChcInRlcm5hcnlsYXllclwiLCEwKSxyLl9nZW9sYXllcj1yLl9wYXBlci5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJnZW9sYXllclwiLCEwKSxyLl9waWVsYXllcj1yLl9wYXBlci5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJwaWVsYXllclwiLCEwKSxyLl9zdW5idXJzdGxheWVyPXIuX3BhcGVyLmFwcGVuZChcImdcIikuY2xhc3NlZChcInN1bmJ1cnN0bGF5ZXJcIiwhMCksci5fZ2xpbWFnZXM9ci5fcGFwZXIuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiZ2xpbWFnZXNcIiwhMCk7dmFyIHM9ci5fdG9wcGFwZXIuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwibGF5ZXItYWJvdmVcIiwhMCk7ci5faW1hZ2VVcHBlckxheWVyPXMuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiaW1hZ2VsYXllclwiLCEwKSxyLl9zaGFwZVVwcGVyTGF5ZXI9cy5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJzaGFwZWxheWVyXCIsITApLHIuX2luZm9sYXllcj1yLl90b3BwYXBlci5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJpbmZvbGF5ZXJcIiwhMCksci5fbWVudWxheWVyPXIuX3RvcHBhcGVyLmFwcGVuZChcImdcIikuY2xhc3NlZChcIm1lbnVsYXllclwiLCEwKSxyLl96b29tbGF5ZXI9ci5fdG9wcGFwZXIuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiem9vbWxheWVyXCIsITApLHIuX2hvdmVybGF5ZXI9ci5faG92ZXJwYXBlci5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJob3ZlcmxheWVyXCIsITApLHIuX21vZGViYXJkaXYuY2xhc3NlZChcIm1vZGViYXItY29udGFpbmVyXCIsITApLnN0eWxlKFwicG9zaXRpb25cIixcImFic29sdXRlXCIpLnN0eWxlKFwidG9wXCIsXCIwcHhcIikuc3R5bGUoXCJyaWdodFwiLFwiMHB4XCIpLHQuZW1pdChcInBsb3RseV9mcmFtZXdvcmtcIil9ci5yZWFjdD1mdW5jdGlvbih0LGUsbixpKXt2YXIgYSxsO3ZhciBjPSh0PW8uZ2V0R3JhcGhEaXYodCkpLl9mdWxsRGF0YSxwPXQuX2Z1bGxMYXlvdXQ7aWYoby5pc1Bsb3REaXYodCkmJmMmJnApe2lmKG8uaXNQbGFpbk9iamVjdChlKSl7dmFyIGQ9ZTtlPWQuZGF0YSxuPWQubGF5b3V0LGk9ZC5jb25maWcsYT1kLmZyYW1lc312YXIgZz0hMTtpZihpKXt2YXIgdj1vLmV4dGVuZERlZXAoe30sdC5fY29udGV4dCk7dC5fY29udGV4dD12b2lkIDAsTyh0LGkpLGc9ZnVuY3Rpb24gdChlLHIpe3ZhciBuO2ZvcihuIGluIGUpaWYoXCJfXCIhPT1uLmNoYXJBdCgwKSl7dmFyIGk9ZVtuXSxhPXJbbl07aWYoaSE9PWEpaWYoby5pc1BsYWluT2JqZWN0KGkpJiZvLmlzUGxhaW5PYmplY3QoYSkpe2lmKHQoaSxhKSlyZXR1cm4hMH1lbHNle2lmKCFBcnJheS5pc0FycmF5KGkpfHwhQXJyYXkuaXNBcnJheShhKSlyZXR1cm4hMDtpZihpLmxlbmd0aCE9PWEubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgcz0wO3M8aS5sZW5ndGg7cysrKWlmKGlbc10hPT1hW3NdKXtpZighby5pc1BsYWluT2JqZWN0KGlbc10pfHwhby5pc1BsYWluT2JqZWN0KGFbc10pKXJldHVybiEwO2lmKHQoaVtzXSxhW3NdKSlyZXR1cm4hMH19fX0odix0Ll9jb250ZXh0KX10LmRhdGE9ZXx8W10sQS5jbGVhbkRhdGEodC5kYXRhKSx0LmxheW91dD1ufHx7fSxBLmNsZWFuTGF5b3V0KHQubGF5b3V0KSxmdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLGwsYyx1LGgsZixwLGQ9bi5fcHJlR1VJLGc9W10sdj17fTtmb3IoaSBpbiBkKXtpZih1PXJ0KGksdHQpKXtpZihhPXUuYXR0cnx8dS5oZWFkK1wiLnVpcmV2aXNpb25cIiwoYz0obD1zKG4sYSkuZ2V0KCkpJiZudChhLGUpKSYmYz09PWwmJihudWxsPT09KGg9ZFtpXSkmJihoPXZvaWQgMCksb3QocD0oZj1zKGUsaSkpLmdldCgpLGgpKSl7dm9pZCAwPT09cCYmXCJhdXRvcmFuZ2VcIj09PWkuc3Vic3RyKGkubGVuZ3RoLTkpJiZnLnB1c2goaS5zdWJzdHIoMCxpLmxlbmd0aC0xMCkpLGYuc2V0KE4ocyhuLGkpLmdldCgpKSk7Y29udGludWV9fWVsc2Ugby53YXJuKFwidW5yZWNvZ25pemVkIEdVSSBlZGl0OiBcIitpKTtkZWxldGUgZFtpXSxcInJhbmdlW1wiPT09aS5zdWJzdHIoaS5sZW5ndGgtOCw2KSYmKHZbaS5zdWJzdHIoMCxpLmxlbmd0aC05KV09MSl9Zm9yKHZhciBtPTA7bTxnLmxlbmd0aDttKyspe3ZhciB5PWdbbV07aWYodlt5XSl7dmFyIHg9cyhlLHkpLmdldCgpO3gmJmRlbGV0ZSB4LmF1dG9yYW5nZX19dmFyIGI9bi5fdHJhY2VQcmVHVUk7Zm9yKHZhciBfIGluIGIpe3ZhciB3LGs9YltfXSxBPW51bGw7Zm9yKGkgaW4gayl7aWYoIUEpe3ZhciBUPWl0KF8scik7aWYoVDwwKXtkZWxldGUgYltfXTticmVha312YXIgTT1hdChfLHQsKHc9cltUXS5fZnVsbElucHV0KS5pbmRleCk7aWYoTTwwKXtkZWxldGUgYltfXTticmVha31BPXRbTV19aWYodT1ydChpLGV0KSl7aWYodS5hdHRyP2M9KGw9cyhuLHUuYXR0cikuZ2V0KCkpJiZudCh1LmF0dHIsZSk6KGw9dy51aXJldmlzaW9uLHZvaWQgMD09PShjPUEudWlyZXZpc2lvbikmJihjPWUudWlyZXZpc2lvbikpLGMmJmM9PT1sJiYobnVsbD09PShoPWtbaV0pJiYoaD12b2lkIDApLG90KHA9KGY9cyhBLGkpKS5nZXQoKSxoKSkpe2Yuc2V0KE4ocyh3LGkpLmdldCgpKSk7Y29udGludWV9fWVsc2Ugby53YXJuKFwidW5yZWNvZ25pemVkIEdVSSBlZGl0OiBcIitpK1wiIGluIHRyYWNlIHVpZCBcIitfKTtkZWxldGUga1tpXX19fSh0LmRhdGEsdC5sYXlvdXQsYyxwKSxmLnN1cHBseURlZmF1bHRzKHQse3NraXBVcGRhdGVDYWxjOiEwfSk7dmFyIG09dC5fZnVsbERhdGEseT10Ll9mdWxsTGF5b3V0LHg9dm9pZCAwPT09eS5kYXRhcmV2aXNpb24sYj15LnRyYW5zaXRpb24sXz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPU0ubGF5b3V0RmxhZ3MoKTthLmFycmF5cz17fSxhLnJhbmdlc0FsdGVyZWQ9e30sYS5uQ2hhbmdlcz0wLGEubkNoYW5nZXNBbmltPTAsc3QoZSxyLFtdLHtnZXRWYWxPYmplY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIGguZ2V0TGF5b3V0VmFsT2JqZWN0KHIsdCl9LGZsYWdzOmEsaW1tdXRhYmxlOm4sdHJhbnNpdGlvbjppLGdkOnR9KSwoYS5wbG90fHxhLmNhbGMpJiYoYS5sYXlvdXRSZXBsb3Q9ITApO2kmJmEubkNoYW5nZXMmJmEubkNoYW5nZXNBbmltJiYoYS5hbmltPWEubkNoYW5nZXM9PT1hLm5DaGFuZ2VzQW5pbT9cImFsbFwiOlwic29tZVwiKTtyZXR1cm4gYX0odCxwLHkseCxiKSx3PV8ubmV3RGF0YVJldmlzaW9uLGs9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPWUubGVuZ3RoPT09ci5sZW5ndGg7aWYoIWkmJiFvKXJldHVybntmdWxsUmVwbG90OiEwLGNhbGM6ITB9O3ZhciBzLGwsYz1NLnRyYWNlRmxhZ3MoKTtjLmFycmF5cz17fSxjLm5DaGFuZ2VzPTAsYy5uQ2hhbmdlc0FuaW09MDt2YXIgdT17Z2V0VmFsT2JqZWN0OmZ1bmN0aW9uKHQpe3JldHVybiBoLmdldFRyYWNlVmFsT2JqZWN0KGwsdCl9LGZsYWdzOmMsaW1tdXRhYmxlOm4sdHJhbnNpdGlvbjppLG5ld0RhdGFSZXZpc2lvbjphLGdkOnR9LHA9e307Zm9yKHM9MDtzPGUubGVuZ3RoO3MrKylpZihyW3NdKXtpZihsPXJbc10uX2Z1bGxJbnB1dCxmLmhhc01ha2VzRGF0YVRyYW5zZm9ybShsKSYmKGw9cltzXSkscFtsLnVpZF0pY29udGludWU7cFtsLnVpZF09MSxzdChlW3NdLl9mdWxsSW5wdXQsbCxbXSx1KX0oYy5jYWxjfHxjLnBsb3QpJiYoYy5mdWxsUmVwbG90PSEwKTtpJiZjLm5DaGFuZ2VzJiZjLm5DaGFuZ2VzQW5pbSYmKGMuYW5pbT1jLm5DaGFuZ2VzPT09Yy5uQ2hhbmdlc0FuaW0mJm8/XCJhbGxcIjpcInNvbWVcIik7cmV0dXJuIGN9KHQsYyxtLHgsYix3KTtKKHQpJiYoXy5sYXlvdXRSZXBsb3Q9ITApLGsuY2FsY3x8Xy5jYWxjP3QuY2FsY2RhdGE9dm9pZCAwOmYuc3VwcGx5RGVmYXVsdHNVcGRhdGVDYWxjKHQuY2FsY2RhdGEsbSk7dmFyIFM9W107aWYoYSYmKHQuX3RyYW5zaXRpb25EYXRhPXt9LGYuY3JlYXRlVHJhbnNpdGlvbkRhdGEodCksUy5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIHIuYWRkRnJhbWVzKHQsYSl9KSkseS50cmFuc2l0aW9uJiYhZyYmKGsuYW5pbXx8Xy5hbmltKSlmLmRvQ2FsY2RhdGEodCksVC5kb0F1dG9SYW5nZUFuZENvbnN0cmFpbnRzKHQpLFMucHVzaChmdW5jdGlvbigpe3JldHVybiBmLnRyYW5zaXRpb25Gcm9tUmVhY3QodCxrLF8scCl9KTtlbHNlIGlmKGsuZnVsbFJlcGxvdHx8Xy5sYXlvdXRSZXBsb3R8fGcpdC5fZnVsbExheW91dC5fc2tpcERlZmF1bHRzPSEwLFMucHVzaChyLnBsb3QpO2Vsc2V7Zm9yKHZhciBFIGluIF8uYXJyYXlzKXt2YXIgTD1fLmFycmF5c1tFXTtpZihMLmxlbmd0aCl7dmFyIHo9dS5nZXRDb21wb25lbnRNZXRob2QoRSxcImRyYXdPbmVcIik7aWYoeiE9PW8ubm9vcClmb3IodmFyIEk9MDtJPEwubGVuZ3RoO0krKyl6KHQsTFtJXSk7ZWxzZXt2YXIgRD11LmdldENvbXBvbmVudE1ldGhvZChFLFwiZHJhd1wiKTtpZihEPT09by5ub29wKXRocm93IG5ldyBFcnJvcihcImNhbm5vdCBkcmF3IGNvbXBvbmVudHM6IFwiK0UpO0QodCl9fX1TLnB1c2goZi5wcmV2aW91c1Byb21pc2VzKSxrLnN0eWxlJiZTLnB1c2goVC5kb1RyYWNlU3R5bGUpLGsuY29sb3JiYXJzJiZTLnB1c2goVC5kb0NvbG9yQmFycyksXy5sZWdlbmQmJlMucHVzaChULmRvTGVnZW5kKSxfLmxheW91dHN0eWxlJiZTLnB1c2goVC5sYXlvdXRTdHlsZXMpLF8uYXhyYW5nZSYmWShTKSxfLnRpY2tzJiZTLnB1c2goVC5kb1RpY2tzUmVsYXlvdXQpLF8ubW9kZWJhciYmUy5wdXNoKFQuZG9Nb2RlQmFyKSxfLmNhbWVyYSYmUy5wdXNoKFQuZG9DYW1lcmEpLFMucHVzaChDKX1TLnB1c2goZi5yZWhvdmVyLGYucmVkcmFnKSwobD1vLnN5bmNPckFzeW5jKFMsdCkpJiZsLnRoZW58fChsPVByb21pc2UucmVzb2x2ZSh0KSl9ZWxzZSBsPXIubmV3UGxvdCh0LGUsbixpKTtyZXR1cm4gbC50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdChcInBsb3RseV9yZWFjdFwiLHtkYXRhOmUsbGF5b3V0Om59KSx0fSl9LHIuYW5pbWF0ZT1mdW5jdGlvbih0LGUscil7aWYodD1vLmdldEdyYXBoRGl2KHQpLCFvLmlzUGxvdERpdih0KSl0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6IFwiK3QrXCIuIEl0J3MgbGlrZWx5IHRoYXQgeW91J3ZlIGZhaWxlZCB0byBjcmVhdGUgYSBwbG90IGJlZm9yZSBhbmltYXRpbmcgaXQuIEZvciBtb3JlIGRldGFpbHMsIHNlZSBodHRwczovL3Bsb3QubHkvamF2YXNjcmlwdC9hbmltYXRpb25zL1wiKTt2YXIgbj10Ll90cmFuc2l0aW9uRGF0YTtuLl9mcmFtZVF1ZXVlfHwobi5fZnJhbWVRdWV1ZT1bXSk7dmFyIGk9KHI9Zi5zdXBwbHlBbmltYXRpb25EZWZhdWx0cyhyKSkudHJhbnNpdGlvbixhPXIuZnJhbWU7ZnVuY3Rpb24gcyh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShpKT90Pj1pLmxlbmd0aD9pWzBdOmlbdF06aX1mdW5jdGlvbiBsKHQpe3JldHVybiBBcnJheS5pc0FycmF5KGEpP3Q+PWEubGVuZ3RoP2FbMF06YVt0XTphfWZ1bmN0aW9uIGModCxlKXt2YXIgcj0wO3JldHVybiBmdW5jdGlvbigpe2lmKHQmJisrcj09PWUpcmV0dXJuIHQoKX19cmV0dXJuIHZvaWQgMD09PW4uX2ZyYW1lV2FpdGluZ0NudCYmKG4uX2ZyYW1lV2FpdGluZ0NudD0wKSxuZXcgUHJvbWlzZShmdW5jdGlvbihhLHUpe2Z1bmN0aW9uIGgoKXtuLl9jdXJyZW50RnJhbWUmJm4uX2N1cnJlbnRGcmFtZS5vbkNvbXBsZXRlJiZuLl9jdXJyZW50RnJhbWUub25Db21wbGV0ZSgpO3ZhciBlPW4uX2N1cnJlbnRGcmFtZT1uLl9mcmFtZVF1ZXVlLnNoaWZ0KCk7aWYoZSl7dmFyIHI9ZS5uYW1lP2UubmFtZS50b1N0cmluZygpOm51bGw7dC5fZnVsbExheW91dC5fY3VycmVudEZyYW1lPXIsbi5fbGFzdEZyYW1lQXQ9RGF0ZS5ub3coKSxuLl90aW1lVG9OZXh0PWUuZnJhbWVPcHRzLmR1cmF0aW9uLGYudHJhbnNpdGlvbih0LGUuZnJhbWUuZGF0YSxlLmZyYW1lLmxheW91dCxBLmNvZXJjZVRyYWNlSW5kaWNlcyh0LGUuZnJhbWUudHJhY2VzKSxlLmZyYW1lT3B0cyxlLnRyYW5zaXRpb25PcHRzKS50aGVuKGZ1bmN0aW9uKCl7ZS5vbkNvbXBsZXRlJiZlLm9uQ29tcGxldGUoKX0pLHQuZW1pdChcInBsb3RseV9hbmltYXRpbmdmcmFtZVwiLHtuYW1lOnIsZnJhbWU6ZS5mcmFtZSxhbmltYXRpb246e2ZyYW1lOmUuZnJhbWVPcHRzLHRyYW5zaXRpb246ZS50cmFuc2l0aW9uT3B0c319KX1lbHNlIHQuZW1pdChcInBsb3RseV9hbmltYXRlZFwiKSx3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUobi5fYW5pbWF0aW9uUmFmKSxuLl9hbmltYXRpb25SYWY9bnVsbH1mdW5jdGlvbiBwKCl7dC5lbWl0KFwicGxvdGx5X2FuaW1hdGluZ1wiKSxuLl9sYXN0RnJhbWVBdD0tMS8wLG4uX3RpbWVUb05leHQ9MCxuLl9ydW5uaW5nVHJhbnNpdGlvbnM9MCxuLl9jdXJyZW50RnJhbWU9bnVsbDt2YXIgZT1mdW5jdGlvbigpe24uX2FuaW1hdGlvblJhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpLERhdGUubm93KCktbi5fbGFzdEZyYW1lQXQ+bi5fdGltZVRvTmV4dCYmaCgpfTtlKCl9dmFyIGQsZyx2PTA7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShpKT92Pj1pLmxlbmd0aD90LnRyYW5zaXRpb25PcHRzPWlbdl06dC50cmFuc2l0aW9uT3B0cz1pWzBdOnQudHJhbnNpdGlvbk9wdHM9aSx2KyssdH12YXIgeT1bXSx4PW51bGw9PWUsYj1BcnJheS5pc0FycmF5KGUpO2lmKCF4JiYhYiYmby5pc1BsYWluT2JqZWN0KGUpKXkucHVzaCh7dHlwZTpcIm9iamVjdFwiLGRhdGE6bShvLmV4dGVuZEZsYXQoe30sZSkpfSk7ZWxzZSBpZih4fHwtMSE9PVtcInN0cmluZ1wiLFwibnVtYmVyXCJdLmluZGV4T2YodHlwZW9mIGUpKWZvcihkPTA7ZDxuLl9mcmFtZXMubGVuZ3RoO2QrKykoZz1uLl9mcmFtZXNbZF0pJiYoeHx8U3RyaW5nKGcuZ3JvdXApPT09U3RyaW5nKGUpKSYmeS5wdXNoKHt0eXBlOlwiYnluYW1lXCIsbmFtZTpTdHJpbmcoZy5uYW1lKSxkYXRhOm0oe25hbWU6Zy5uYW1lfSl9KTtlbHNlIGlmKGIpZm9yKGQ9MDtkPGUubGVuZ3RoO2QrKyl7dmFyIF89ZVtkXTstMSE9PVtcIm51bWJlclwiLFwic3RyaW5nXCJdLmluZGV4T2YodHlwZW9mIF8pPyhfPVN0cmluZyhfKSx5LnB1c2goe3R5cGU6XCJieW5hbWVcIixuYW1lOl8sZGF0YTptKHtuYW1lOl99KX0pKTpvLmlzUGxhaW5PYmplY3QoXykmJnkucHVzaCh7dHlwZTpcIm9iamVjdFwiLGRhdGE6bShvLmV4dGVuZEZsYXQoe30sXykpfSl9Zm9yKGQ9MDtkPHkubGVuZ3RoO2QrKylpZihcImJ5bmFtZVwiPT09KGc9eVtkXSkudHlwZSYmIW4uX2ZyYW1lSGFzaFtnLmRhdGEubmFtZV0pcmV0dXJuIG8ud2FybignYW5pbWF0ZSBmYWlsdXJlOiBmcmFtZSBub3QgZm91bmQ6IFwiJytnLmRhdGEubmFtZSsnXCInKSx2b2lkIHUoKTstMSE9PVtcIm5leHRcIixcImltbWVkaWF0ZVwiXS5pbmRleE9mKHIubW9kZSkmJmZ1bmN0aW9uKCl7aWYoMCE9PW4uX2ZyYW1lUXVldWUubGVuZ3RoKXtmb3IoO24uX2ZyYW1lUXVldWUubGVuZ3RoOyl7dmFyIGU9bi5fZnJhbWVRdWV1ZS5wb3AoKTtlLm9uSW50ZXJydXB0JiZlLm9uSW50ZXJydXB0KCl9dC5lbWl0KFwicGxvdGx5X2FuaW1hdGlvbmludGVycnVwdGVkXCIsW10pfX0oKSxcInJldmVyc2VcIj09PXIuZGlyZWN0aW9uJiZ5LnJldmVyc2UoKTt2YXIgdz10Ll9mdWxsTGF5b3V0Ll9jdXJyZW50RnJhbWU7aWYodyYmci5mcm9tY3VycmVudCl7dmFyIGs9LTE7Zm9yKGQ9MDtkPHkubGVuZ3RoO2QrKylpZihcImJ5bmFtZVwiPT09KGc9eVtkXSkudHlwZSYmZy5uYW1lPT09dyl7az1kO2JyZWFrfWlmKGs+MCYmazx5Lmxlbmd0aC0xKXt2YXIgVD1bXTtmb3IoZD0wO2Q8eS5sZW5ndGg7ZCsrKWc9eVtkXSwoXCJieW5hbWVcIiE9PXlbZF0udHlwZXx8ZD5rKSYmVC5wdXNoKGcpO3k9VH19eS5sZW5ndGg+MD9mdW5jdGlvbihlKXtpZigwIT09ZS5sZW5ndGgpe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbztvPVwiYnluYW1lXCI9PT1lW2ldLnR5cGU/Zi5jb21wdXRlRnJhbWUodCxlW2ldLm5hbWUpOmVbaV0uZGF0YTt2YXIgaD1sKGkpLGQ9cyhpKTtkLmR1cmF0aW9uPU1hdGgubWluKGQuZHVyYXRpb24saC5kdXJhdGlvbik7dmFyIGc9e2ZyYW1lOm8sbmFtZTplW2ldLm5hbWUsZnJhbWVPcHRzOmgsdHJhbnNpdGlvbk9wdHM6ZH07aT09PWUubGVuZ3RoLTEmJihnLm9uQ29tcGxldGU9YyhhLDIpLGcub25JbnRlcnJ1cHQ9dSksbi5fZnJhbWVRdWV1ZS5wdXNoKGcpfVwiaW1tZWRpYXRlXCI9PT1yLm1vZGUmJihuLl9sYXN0RnJhbWVBdD0tMS8wKSxuLl9hbmltYXRpb25SYWZ8fHAoKX19KHkpOih0LmVtaXQoXCJwbG90bHlfYW5pbWF0ZWRcIiksYSgpKX0pfSxyLmFkZEZyYW1lcz1mdW5jdGlvbih0LGUscil7aWYodD1vLmdldEdyYXBoRGl2KHQpLG51bGw9PWUpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO2lmKCFvLmlzUGxvdERpdih0KSl0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6IFwiK3QrXCIuIEl0J3MgbGlrZWx5IHRoYXQgeW91J3ZlIGZhaWxlZCB0byBjcmVhdGUgYSBwbG90IGJlZm9yZSBhZGRpbmcgZnJhbWVzLiBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9wbG90Lmx5L2phdmFzY3JpcHQvYW5pbWF0aW9ucy9cIik7dmFyIG4saSxhLHMsbD10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLHU9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaDtpZighQXJyYXkuaXNBcnJheShlKSl0aHJvdyBuZXcgRXJyb3IoXCJhZGRGcmFtZXMgZmFpbHVyZTogZnJhbWVMaXN0IG11c3QgYmUgYW4gQXJyYXkgb2YgZnJhbWUgZGVmaW5pdGlvbnNcIitlKTt2YXIgaD1sLmxlbmd0aCsyKmUubGVuZ3RoLHA9W10sZD17fTtmb3Iobj1lLmxlbmd0aC0xO24+PTA7bi0tKWlmKG8uaXNQbGFpbk9iamVjdChlW25dKSl7dmFyIGc9ZVtuXS5uYW1lLHY9KHVbZ118fGRbZ118fHt9KS5uYW1lLG09ZVtuXS5uYW1lLHk9dVt2XXx8ZFt2XTt2JiZtJiZcIm51bWJlclwiPT10eXBlb2YgbSYmeSYmRTw1JiYoRSsrLG8ud2FybignYWRkRnJhbWVzOiBvdmVyd3JpdGluZyBmcmFtZSBcIicrKHVbdl18fGRbdl0pLm5hbWUrJ1wiIHdpdGggYSBmcmFtZSB3aG9zZSBuYW1lIG9mIHR5cGUgXCJudW1iZXJcIiBhbHNvIGVxdWF0ZXMgdG8gXCInK3YrJ1wiLiBUaGlzIGlzIHZhbGlkIGJ1dCBtYXkgcG90ZW50aWFsbHkgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIHNpbmNlIGFsbCBwbG90bHkuanMgZnJhbWUgbmFtZXMgYXJlIHN0b3JlZCBpbnRlcm5hbGx5IGFzIHN0cmluZ3MuJyksNT09PUUmJm8ud2FybihcImFkZEZyYW1lczogVGhpcyBBUEkgY2FsbCBoYXMgeWllbGRlZCB0b28gbWFueSBvZiB0aGVzZSB3YXJuaW5ncy4gRm9yIHRoZSByZXN0IG9mIHRoaXMgY2FsbCwgZnVydGhlciB3YXJuaW5ncyBhYm91dCBudW1lcmljIGZyYW1lIG5hbWVzIHdpbGwgYmUgc3VwcHJlc3NlZC5cIikpLGRbZ109e25hbWU6Z30scC5wdXNoKHtmcmFtZTpmLnN1cHBseUZyYW1lRGVmYXVsdHMoZVtuXSksaW5kZXg6ciYmdm9pZCAwIT09cltuXSYmbnVsbCE9PXJbbl0/cltuXTpoK259KX1wLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbmRleD5lLmluZGV4Py0xOnQuaW5kZXg8ZS5pbmRleD8xOjB9KTt2YXIgeD1bXSxiPVtdLF89bC5sZW5ndGg7Zm9yKG49cC5sZW5ndGgtMTtuPj0wO24tLSl7aWYoXCJudW1iZXJcIj09dHlwZW9mKGk9cFtuXS5mcmFtZSkubmFtZSYmby53YXJuKFwiV2FybmluZzogYWRkRnJhbWVzIGFjY2VwdHMgZnJhbWVzIHdpdGggbnVtZXJpYyBuYW1lcywgYnV0IHRoZSBudW1iZXJzIGFyZWltcGxpY2l0bHkgY2FzdCB0byBzdHJpbmdzXCIpLCFpLm5hbWUpZm9yKDt1W2kubmFtZT1cImZyYW1lIFwiK3QuX3RyYW5zaXRpb25EYXRhLl9jb3VudGVyKytdOyk7aWYodVtpLm5hbWVdKXtmb3IoYT0wO2E8bC5sZW5ndGgmJihsW2FdfHx7fSkubmFtZSE9PWkubmFtZTthKyspO3gucHVzaCh7dHlwZTpcInJlcGxhY2VcIixpbmRleDphLHZhbHVlOml9KSxiLnVuc2hpZnQoe3R5cGU6XCJyZXBsYWNlXCIsaW5kZXg6YSx2YWx1ZTpsW2FdfSl9ZWxzZSBzPU1hdGgubWF4KDAsTWF0aC5taW4ocFtuXS5pbmRleCxfKSkseC5wdXNoKHt0eXBlOlwiaW5zZXJ0XCIsaW5kZXg6cyx2YWx1ZTppfSksYi51bnNoaWZ0KHt0eXBlOlwiZGVsZXRlXCIsaW5kZXg6c30pLF8rK312YXIgdz1mLm1vZGlmeUZyYW1lcyxrPWYubW9kaWZ5RnJhbWVzLEE9W3QsYl0sVD1bdCx4XTtyZXR1cm4gYyYmYy5hZGQodCx3LEEsayxUKSxmLm1vZGlmeUZyYW1lcyh0LHgpfSxyLmRlbGV0ZUZyYW1lcz1mdW5jdGlvbih0LGUpe2lmKHQ9by5nZXRHcmFwaERpdih0KSwhby5pc1Bsb3REaXYodCkpdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBlbGVtZW50IGlzIG5vdCBhIFBsb3RseSBwbG90OiBcIit0KTt2YXIgcixuLGk9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyxhPVtdLHM9W107aWYoIWUpZm9yKGU9W10scj0wO3I8aS5sZW5ndGg7cisrKWUucHVzaChyKTtmb3IoKGU9ZS5zbGljZSgwKSkuc29ydCgpLHI9ZS5sZW5ndGgtMTtyPj0wO3ItLSluPWVbcl0sYS5wdXNoKHt0eXBlOlwiZGVsZXRlXCIsaW5kZXg6bn0pLHMudW5zaGlmdCh7dHlwZTpcImluc2VydFwiLGluZGV4Om4sdmFsdWU6aVtuXX0pO3ZhciBsPWYubW9kaWZ5RnJhbWVzLHU9Zi5tb2RpZnlGcmFtZXMsaD1bdCxzXSxwPVt0LGFdO3JldHVybiBjJiZjLmFkZCh0LGwsaCx1LHApLGYubW9kaWZ5RnJhbWVzKHQsYSl9LHIucHVyZ2U9ZnVuY3Rpb24odCl7dmFyIGU9KHQ9by5nZXRHcmFwaERpdih0KSkuX2Z1bGxMYXlvdXR8fHt9LHI9dC5fZnVsbERhdGF8fFtdO3JldHVybiBmLmNsZWFuUGxvdChbXSx7fSxyLGUpLGYucHVyZ2UodCksbC5wdXJnZSh0KSxlLl9jb250YWluZXImJmUuX2NvbnRhaW5lci5yZW1vdmUoKSxkZWxldGUgdC5fY29udGV4dCx0fX0se1wiLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uL2NvbXBvbmVudHMvY29sb3JiYXIvY29ubmVjdFwiOjU4MCxcIi4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzXCI6Njc5LFwiLi4vbGliXCI6NzAxLFwiLi4vbGliL2V2ZW50c1wiOjY5MCxcIi4uL2xpYi9xdWV1ZVwiOjcxNixcIi4uL2xpYi9zdmdfdGV4dF91dGlsc1wiOjcyNSxcIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50c1wiOjc1NSxcIi4uL3Bsb3RzL2NhcnRlc2lhbi9ncmFwaF9pbnRlcmFjdFwiOjc1OCxcIi4uL3Bsb3RzL2NhcnRlc2lhbi9zZWxlY3RcIjo3NjYsXCIuLi9wbG90cy9wbG90c1wiOjgxMCxcIi4uL3Bsb3RzL3BvbGFyL2xlZ2FjeVwiOjgxOCxcIi4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9lZGl0X3R5cGVzXCI6NzMyLFwiLi9oZWxwZXJzXCI6NzMzLFwiLi9tYW5hZ2VfYXJyYXlzXCI6NzM1LFwiLi9wbG90X2NvbmZpZ1wiOjczNyxcIi4vcGxvdF9zY2hlbWFcIjo3MzgsXCIuL3N1YnJvdXRpbmVzXCI6NzQwLGQzOjE1NSxcImZhc3QtaXNudW1lcmljXCI6MjIyLFwiaGFzLWhvdmVyXCI6NDAzfV0sNzM3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e3N0YXRpY1Bsb3Q6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0scGxvdGx5U2VydmVyVVJMOnt2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcImh0dHBzOi8vcGxvdC5seVwifSxlZGl0YWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxlZGl0czp7YW5ub3RhdGlvblBvc2l0aW9uOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LGFubm90YXRpb25UYWlsOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LGFubm90YXRpb25UZXh0Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LGF4aXNUaXRsZVRleHQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sY29sb3JiYXJQb3NpdGlvbjp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxjb2xvcmJhclRpdGxlVGV4dDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxsZWdlbmRQb3NpdGlvbjp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxsZWdlbmRUZXh0Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LHNoYXBlUG9zaXRpb246e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sdGl0bGVUZXh0Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9fSxhdXRvc2l6YWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxyZXNwb25zaXZlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LGZpbGxGcmFtZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxmcmFtZU1hcmdpbnM6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjAsbWluOjAsbWF4Oi41fSxzY3JvbGxab29tOnt2YWxUeXBlOlwiZmxhZ2xpc3RcIixmbGFnczpbXCJjYXJ0ZXNpYW5cIixcImdsM2RcIixcImdlb1wiLFwibWFwYm94XCJdLGV4dHJhczpbITAsITFdLGRmbHQ6XCJnbDNkK2dlbyttYXBib3hcIn0sZG91YmxlQ2xpY2s6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOlshMSxcInJlc2V0XCIsXCJhdXRvc2l6ZVwiLFwicmVzZXQrYXV0b3NpemVcIl0sZGZsdDpcInJlc2V0K2F1dG9zaXplXCJ9LHNob3dBeGlzRHJhZ0hhbmRsZXM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMH0sc2hvd0F4aXNSYW5nZUVudHJ5Qm94ZXM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMH0sc2hvd1RpcHM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMH0sc2hvd0xpbms6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sbGlua1RleHQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiRWRpdCBjaGFydFwiLG5vQmxhbms6ITB9LHNlbmREYXRhOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITB9LHNob3dTb3VyY2VzOnt2YWxUeXBlOlwiYW55XCIsZGZsdDohMX0sZGlzcGxheU1vZGVCYXI6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImhvdmVyXCIsITAsITFdLGRmbHQ6XCJob3ZlclwifSxzaG93U2VuZFRvQ2xvdWQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sbW9kZUJhckJ1dHRvbnNUb1JlbW92ZTp7dmFsVHlwZTpcImFueVwiLGRmbHQ6W119LG1vZGVCYXJCdXR0b25zVG9BZGQ6e3ZhbFR5cGU6XCJhbnlcIixkZmx0OltdfSxtb2RlQmFyQnV0dG9uczp7dmFsVHlwZTpcImFueVwiLGRmbHQ6ITF9LHRvSW1hZ2VCdXR0b25PcHRpb25zOnt2YWxUeXBlOlwiYW55XCIsZGZsdDp7fX0sZGlzcGxheWxvZ286e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMH0sd2F0ZXJtYXJrOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LHBsb3RHbFBpeGVsUmF0aW86e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjIsbWluOjEsbWF4OjR9LHNldEJhY2tncm91bmQ6e3ZhbFR5cGU6XCJhbnlcIixkZmx0OlwidHJhbnNwYXJlbnRcIn0sdG9wb2pzb25VUkw6e3ZhbFR5cGU6XCJzdHJpbmdcIixub0JsYW5rOiEwLGRmbHQ6XCJodHRwczovL2Nkbi5wbG90Lmx5L1wifSxtYXBib3hBY2Nlc3NUb2tlbjp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6bnVsbH0sbG9nZ2luZzp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OjF9LHF1ZXVlTGVuZ3RoOnt2YWxUeXBlOlwiaW50ZWdlclwiLG1pbjowLGRmbHQ6MH0sZ2xvYmFsVHJhbnNmb3Jtczp7dmFsVHlwZTpcImFueVwiLGRmbHQ6W119LGxvY2FsZTp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJlbi1VU1wifSxsb2NhbGVzOnt2YWxUeXBlOlwiYW55XCIsZGZsdDp7fX19LGk9e307IWZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIG4gaW4gZSl7dmFyIGk9ZVtuXTtpLnZhbFR5cGU/cltuXT1pLmRmbHQ6KHJbbl18fChyW25dPXt9KSx0KGkscltuXSkpfX0obixpKSxlLmV4cG9ydHM9e2NvbmZpZ0F0dHJpYnV0ZXM6bixkZmx0Q29uZmlnOml9fSx7fV0sNzM4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uL2xpYlwiKSxhPXQoXCIuLi9wbG90cy9hdHRyaWJ1dGVzXCIpLG89dChcIi4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uL3Bsb3RzL2ZyYW1lX2F0dHJpYnV0ZXNcIiksbD10KFwiLi4vcGxvdHMvYW5pbWF0aW9uX2F0dHJpYnV0ZXNcIiksYz10KFwiLi9wbG90X2NvbmZpZ1wiKS5jb25maWdBdHRyaWJ1dGVzLHU9dChcIi4uL3Bsb3RzL3BvbGFyL2xlZ2FjeS9hcmVhX2F0dHJpYnV0ZXNcIiksaD10KFwiLi4vcGxvdHMvcG9sYXIvbGVnYWN5L2F4aXNfYXR0cmlidXRlc1wiKSxmPXQoXCIuL2VkaXRfdHlwZXNcIikscD1pLmV4dGVuZEZsYXQsZD1pLmV4dGVuZERlZXBBbGwsZz1pLmlzUGxhaW5PYmplY3Qsdj1cIl9pc1N1YnBsb3RPYmpcIixtPVwiX2lzTGlua2VkVG9BcnJheVwiLHk9W3YsbSxcIl9hcnJheUF0dHJSZWdleHBzXCIsXCJfZGVwcmVjYXRlZFwiXTtmdW5jdGlvbiB4KHQsZSxyKXtpZighdClyZXR1cm4hMTtpZih0Ll9pc0xpbmtlZFRvQXJyYXkpaWYoYihlW3JdKSlyKys7ZWxzZSBpZihyPGUubGVuZ3RoKXJldHVybiExO2Zvcig7cjxlLmxlbmd0aDtyKyspe3ZhciBuPXRbZVtyXV07aWYoIWcobikpYnJlYWs7aWYodD1uLHI9PT1lLmxlbmd0aC0xKWJyZWFrO2lmKHQuX2lzTGlua2VkVG9BcnJheSl7aWYoIWIoZVsrK3JdKSlyZXR1cm4hMX1lbHNlIGlmKFwiaW5mb19hcnJheVwiPT09dC52YWxUeXBlKXt2YXIgaT1lWysrcl07aWYoIWIoaSkpcmV0dXJuITE7dmFyIGE9dC5pdGVtcztpZihBcnJheS5pc0FycmF5KGEpKXtpZihpPj1hLmxlbmd0aClyZXR1cm4hMTtpZigyPT09dC5kaW1lbnNpb25zKXtpZihyKyssZS5sZW5ndGg9PT1yKXJldHVybiB0O3ZhciBvPWVbcl07aWYoIWIobykpcmV0dXJuITE7dD1hW2ldW29dfWVsc2UgdD1hW2ldfWVsc2UgdD1hfX1yZXR1cm4gdH1mdW5jdGlvbiBiKHQpe3JldHVybiB0PT09TWF0aC5yb3VuZCh0KSYmdD49MH1mdW5jdGlvbiBfKHQpe3JldHVybiBmdW5jdGlvbih0KXtyLmNyYXdsKHQsZnVuY3Rpb24odCxlLG4pe3IuaXNWYWxPYmplY3QodCk/XCJkYXRhX2FycmF5XCI9PT10LnZhbFR5cGU/KHQucm9sZT1cImRhdGFcIixuW2UrXCJzcmNcIl09e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcIm5vbmVcIn0pOiEwPT09dC5hcnJheU9rJiYobltlK1wic3JjXCJdPXt2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJub25lXCJ9KTpnKHQpJiYodC5yb2xlPVwib2JqZWN0XCIpfSl9KHQpLGZ1bmN0aW9uKHQpe3IuY3Jhd2wodCxmdW5jdGlvbih0LGUscil7aWYoIXQpcmV0dXJuO3ZhciBuPXRbbV07aWYoIW4pcmV0dXJuO2RlbGV0ZSB0W21dLHJbZV09e2l0ZW1zOnt9fSxyW2VdLml0ZW1zW25dPXQscltlXS5yb2xlPVwib2JqZWN0XCJ9KX0odCksZnVuY3Rpb24odCl7IWZ1bmN0aW9uIHQoZSl7Zm9yKHZhciByIGluIGUpaWYoZyhlW3JdKSl0KGVbcl0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlW3JdKSlmb3IodmFyIG49MDtuPGVbcl0ubGVuZ3RoO24rKyl0KGVbcl1bbl0pO2Vsc2UgZVtyXWluc3RhbmNlb2YgUmVnRXhwJiYoZVtyXT1lW3JdLnRvU3RyaW5nKCkpfSh0KX0odCksdH1mdW5jdGlvbiB3KHQsZSxyKXt2YXIgbj1pLm5lc3RlZFByb3BlcnR5KHQsciksYT1kKHt9LGUubGF5b3V0QXR0cmlidXRlcyk7YVt2XT0hMCxuLnNldChhKX1mdW5jdGlvbiBrKHQsZSxyKXt2YXIgbj1pLm5lc3RlZFByb3BlcnR5KHQscik7bi5zZXQoZChuLmdldCgpfHx7fSxlKSl9ci5JU19TVUJQTE9UX09CSj12LHIuSVNfTElOS0VEX1RPX0FSUkFZPW0sci5ERVBSRUNBVEVEPVwiX2RlcHJlY2F0ZWRcIixyLlVOREVSU0NPUkVfQVRUUlM9eSxyLmdldD1mdW5jdGlvbigpe3ZhciB0PXt9O24uYWxsVHlwZXMuY29uY2F0KFwiYXJlYVwiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RbZV09ZnVuY3Rpb24odCl7dmFyIGUsbztcImFyZWFcIj09PXQ/KGU9e2F0dHJpYnV0ZXM6dX0sbz17fSk6KGU9bi5tb2R1bGVzW3RdLl9tb2R1bGUsbz1lLmJhc2VQbG90TW9kdWxlKTt2YXIgcz17dHlwZTpudWxsfSxsPWQoe30sYSksYz1kKHt9LGUuYXR0cmlidXRlcyk7ci5jcmF3bChjLGZ1bmN0aW9uKHQsZSxyLG4sYSl7aS5uZXN0ZWRQcm9wZXJ0eShsLGEpLnNldCh2b2lkIDApLHZvaWQgMD09PXQmJmkubmVzdGVkUHJvcGVydHkoYyxhKS5zZXQodm9pZCAwKX0pLGQocyxsKSxuLnRyYWNlSXModCxcIm5vT3BhY2l0eVwiKSYmZGVsZXRlIHMub3BhY2l0eTtuLnRyYWNlSXModCxcInNob3dMZWdlbmRcIil8fChkZWxldGUgcy5zaG93bGVnZW5kLGRlbGV0ZSBzLmxlZ2VuZGdyb3VwKTtuLnRyYWNlSXModCxcIm5vSG92ZXJcIikmJihkZWxldGUgcy5ob3ZlcmluZm8sZGVsZXRlIHMuaG92ZXJsYWJlbCk7ZS5zZWxlY3RQb2ludHN8fGRlbGV0ZSBzLnNlbGVjdGVkcG9pbnRzO2QocyxjKSxvLmF0dHJpYnV0ZXMmJmQocyxvLmF0dHJpYnV0ZXMpO3MudHlwZT10O3ZhciBoPXttZXRhOmUubWV0YXx8e30sYXR0cmlidXRlczpfKHMpfTtpZihlLmxheW91dEF0dHJpYnV0ZXMpe3ZhciBmPXt9O2QoZixlLmxheW91dEF0dHJpYnV0ZXMpLGgubGF5b3V0QXR0cmlidXRlcz1fKGYpfXJldHVybiBofShlKX0pO3ZhciBlLGc9e307cmV0dXJuIE9iamVjdC5rZXlzKG4udHJhbnNmb3Jtc1JlZ2lzdHJ5KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2dbdF09ZnVuY3Rpb24odCl7dmFyIGU9bi50cmFuc2Zvcm1zUmVnaXN0cnlbdF0scj1kKHt9LGUuYXR0cmlidXRlcyk7cmV0dXJuIE9iamVjdC5rZXlzKG4uY29tcG9uZW50c1JlZ2lzdHJ5KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPW4uY29tcG9uZW50c1JlZ2lzdHJ5W2VdO2kuc2NoZW1hJiZpLnNjaGVtYS50cmFuc2Zvcm1zJiZpLnNjaGVtYS50cmFuc2Zvcm1zW3RdJiZPYmplY3Qua2V5cyhpLnNjaGVtYS50cmFuc2Zvcm1zW3RdKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2socixpLnNjaGVtYS50cmFuc2Zvcm1zW3RdW2VdLGUpfSl9KSx7YXR0cmlidXRlczpfKHIpfX0odCl9KSx7ZGVmczp7dmFsT2JqZWN0czppLnZhbE9iamVjdE1ldGEsbWV0YUtleXM6eS5jb25jYXQoW1wiZGVzY3JpcHRpb25cIixcInJvbGVcIixcImVkaXRUeXBlXCIsXCJpbXBsaWVkRWRpdHNcIl0pLGVkaXRUeXBlOnt0cmFjZXM6Zi50cmFjZXMsbGF5b3V0OmYubGF5b3V0fSxpbXBsaWVkRWRpdHM6e319LHRyYWNlczp0LGxheW91dDpmdW5jdGlvbigpe3ZhciB0LGUscj17fTtmb3IodCBpbiBkKHIsbyksbi5zdWJwbG90c1JlZ2lzdHJ5KWlmKChlPW4uc3VicGxvdHNSZWdpc3RyeVt0XSkubGF5b3V0QXR0cmlidXRlcylpZihBcnJheS5pc0FycmF5KGUuYXR0cikpZm9yKHZhciBpPTA7aTxlLmF0dHIubGVuZ3RoO2krKyl3KHIsZSxlLmF0dHJbaV0pO2Vsc2V7dmFyIGE9XCJzdWJwbG90XCI9PT1lLmF0dHI/ZS5uYW1lOmUuYXR0cjt3KHIsZSxhKX1mb3IodCBpbiByPWZ1bmN0aW9uKHQpe3JldHVybiBwKHQse3JhZGlhbGF4aXM6aC5yYWRpYWxheGlzLGFuZ3VsYXJheGlzOmguYW5ndWxhcmF4aXN9KSxwKHQsaC5sYXlvdXQpLHR9KHIpLG4uY29tcG9uZW50c1JlZ2lzdHJ5KXt2YXIgcz0oZT1uLmNvbXBvbmVudHNSZWdpc3RyeVt0XSkuc2NoZW1hO2lmKHMmJihzLnN1YnBsb3RzfHxzLmxheW91dCkpe3ZhciBsPXMuc3VicGxvdHM7aWYobCYmbC54YXhpcyYmIWwueWF4aXMpZm9yKHZhciBjIGluIGwueGF4aXMpZGVsZXRlIHIueWF4aXNbY119ZWxzZSBlLmxheW91dEF0dHJpYnV0ZXMmJmsocixlLmxheW91dEF0dHJpYnV0ZXMsZS5uYW1lKX1yZXR1cm57bGF5b3V0QXR0cmlidXRlczpfKHIpfX0oKSx0cmFuc2Zvcm1zOmcsZnJhbWVzOihlPXtmcmFtZXM6aS5leHRlbmREZWVwQWxsKHt9LHMpfSxfKGUpLGUuZnJhbWVzKSxhbmltYXRpb246XyhsKSxjb25maWc6XyhjKX19LHIuY3Jhd2w9ZnVuY3Rpb24odCxlLG4saSl7dmFyIGE9bnx8MDtpPWl8fFwiXCIsT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgbz10W25dO2lmKC0xPT09eS5pbmRleE9mKG4pKXt2YXIgcz0oaT9pK1wiLlwiOlwiXCIpK247ZShvLG4sdCxhLHMpLHIuaXNWYWxPYmplY3Qobyl8fGcobykmJlwiaW1wbGllZEVkaXRzXCIhPT1uJiZyLmNyYXdsKG8sZSxhKzEscyl9fSl9LHIuaXNWYWxPYmplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnZvaWQgMCE9PXQudmFsVHlwZX0sci5maW5kQXJyYXlBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQpe3ZhciBlLG4sbz1bXSxzPVtdLGw9W107ZnVuY3Rpb24gYyh0LHIsYSxjKXtzPXMuc2xpY2UoMCxjKS5jb25jYXQoW3JdKSxsPWwuc2xpY2UoMCxjKS5jb25jYXQoW3QmJnQuX2lzTGlua2VkVG9BcnJheV0pLHQmJihcImRhdGFfYXJyYXlcIj09PXQudmFsVHlwZXx8ITA9PT10LmFycmF5T2spJiYhKFwiY29sb3JiYXJcIj09PXNbYy0xXSYmKFwidGlja3RleHRcIj09PXJ8fFwidGlja3ZhbHNcIj09PXIpKSYmZnVuY3Rpb24gdChlLHIsYSl7dmFyIGM9ZVtzW3JdXTt2YXIgdT1hK3Nbcl07aWYocj09PXMubGVuZ3RoLTEpaS5pc0FycmF5T3JUeXBlZEFycmF5KGMpJiZvLnB1c2gobit1KTtlbHNlIGlmKGxbcl0pe2lmKEFycmF5LmlzQXJyYXkoYykpZm9yKHZhciBoPTA7aDxjLmxlbmd0aDtoKyspaS5pc1BsYWluT2JqZWN0KGNbaF0pJiZ0KGNbaF0scisxLHUrXCJbXCIraCtcIl0uXCIpfWVsc2UgaS5pc1BsYWluT2JqZWN0KGMpJiZ0KGMscisxLHUrXCIuXCIpfShlLDAsXCJcIil9ZT10LG49XCJcIixyLmNyYXdsKGEsYyksdC5fbW9kdWxlJiZ0Ll9tb2R1bGUuYXR0cmlidXRlcyYmci5jcmF3bCh0Ll9tb2R1bGUuYXR0cmlidXRlcyxjKTt2YXIgdT10LnRyYW5zZm9ybXM7aWYodSlmb3IodmFyIGg9MDtoPHUubGVuZ3RoO2grKyl7dmFyIGY9dVtoXSxwPWYuX21vZHVsZTtwJiYobj1cInRyYW5zZm9ybXNbXCIraCtcIl0uXCIsZT1mLHIuY3Jhd2wocC5hdHRyaWJ1dGVzLGMpKX1yZXR1cm4gb30sci5nZXRUcmFjZVZhbE9iamVjdD1mdW5jdGlvbih0LGUpe3ZhciByLGksbz1lWzBdLHM9MTtpZihcInRyYW5zZm9ybXNcIj09PW8pe2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gYS50cmFuc2Zvcm1zO3ZhciBsPXQudHJhbnNmb3JtcztpZighQXJyYXkuaXNBcnJheShsKXx8IWwubGVuZ3RoKXJldHVybiExO3ZhciBjPWVbMV07aWYoIWIoYyl8fGM+PWwubGVuZ3RoKXJldHVybiExO2k9KHI9KG4udHJhbnNmb3Jtc1JlZ2lzdHJ5W2xbY10udHlwZV18fHt9KS5hdHRyaWJ1dGVzKSYmcltlWzJdXSxzPTN9ZWxzZSBpZihcImFyZWFcIj09PXQudHlwZSlpPXVbb107ZWxzZXt2YXIgaD10Ll9tb2R1bGU7aWYoaHx8KGg9KG4ubW9kdWxlc1t0LnR5cGV8fGEudHlwZS5kZmx0XXx8e30pLl9tb2R1bGUpLCFoKXJldHVybiExO2lmKCEoaT0ocj1oLmF0dHJpYnV0ZXMpJiZyW29dKSl7dmFyIGY9aC5iYXNlUGxvdE1vZHVsZTtmJiZmLmF0dHJpYnV0ZXMmJihpPWYuYXR0cmlidXRlc1tvXSl9aXx8KGk9YVtvXSl9cmV0dXJuIHgoaSxlLHMpfSxyLmdldExheW91dFZhbE9iamVjdD1mdW5jdGlvbih0LGUpe3JldHVybiB4KGZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLHMsbD10Ll9iYXNlUGxvdE1vZHVsZXM7aWYobCl7dmFyIGM7Zm9yKHI9MDtyPGwubGVuZ3RoO3IrKyl7aWYoKGE9bFtyXSkuYXR0clJlZ2V4JiZhLmF0dHJSZWdleC50ZXN0KGUpKXtpZihhLmxheW91dEF0dHJPdmVycmlkZXMpcmV0dXJuIGEubGF5b3V0QXR0ck92ZXJyaWRlczshYyYmYS5sYXlvdXRBdHRyaWJ1dGVzJiYoYz1hLmxheW91dEF0dHJpYnV0ZXMpfXZhciB1PWEuYmFzZUxheW91dEF0dHJPdmVycmlkZXM7aWYodSYmZSBpbiB1KXJldHVybiB1W2VdfWlmKGMpcmV0dXJuIGN9dmFyIGY9dC5fbW9kdWxlcztpZihmKWZvcihyPTA7cjxmLmxlbmd0aDtyKyspaWYoKHM9ZltyXS5sYXlvdXRBdHRyaWJ1dGVzKSYmZSBpbiBzKXJldHVybiBzW2VdO2ZvcihpIGluIG4uY29tcG9uZW50c1JlZ2lzdHJ5KWlmKCEoYT1uLmNvbXBvbmVudHNSZWdpc3RyeVtpXSkuc2NoZW1hJiZlPT09YS5uYW1lKXJldHVybiBhLmxheW91dEF0dHJpYnV0ZXM7aWYoZSBpbiBvKXJldHVybiBvW2VdO2lmKFwicmFkaWFsYXhpc1wiPT09ZXx8XCJhbmd1bGFyYXhpc1wiPT09ZSlyZXR1cm4gaFtlXTtyZXR1cm4gaC5sYXlvdXRbZV18fCExfSh0LGVbMF0pLGUsMSl9fSx7XCIuLi9saWJcIjo3MDEsXCIuLi9wbG90cy9hbmltYXRpb25fYXR0cmlidXRlc1wiOjc0NCxcIi4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDYsXCIuLi9wbG90cy9mcmFtZV9hdHRyaWJ1dGVzXCI6Nzc2LFwiLi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXNcIjo4MDEsXCIuLi9wbG90cy9wb2xhci9sZWdhY3kvYXJlYV9hdHRyaWJ1dGVzXCI6ODE2LFwiLi4vcGxvdHMvcG9sYXIvbGVnYWN5L2F4aXNfYXR0cmlidXRlc1wiOjgxNyxcIi4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9lZGl0X3R5cGVzXCI6NzMyLFwiLi9wbG90X2NvbmZpZ1wiOjczN31dLDczOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9saWJcIiksaT10KFwiLi4vcGxvdHMvYXR0cmlidXRlc1wiKSxhPVwidGVtcGxhdGVpdGVtbmFtZVwiLG89e25hbWU6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcIm5vbmVcIn19O2Z1bmN0aW9uIHModCl7cmV0dXJuIHQmJlwic3RyaW5nXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIGwodCl7dmFyIGU9dC5sZW5ndGgtMTtyZXR1cm5cInNcIiE9PXQuY2hhckF0KGUpJiZuLndhcm4oXCJiYWQgYXJndW1lbnQgdG8gYXJyYXlEZWZhdWx0S2V5OiBcIit0KSx0LnN1YnN0cigwLHQubGVuZ3RoLTEpK1wiZGVmYXVsdHNcIn1vW2FdPXt2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHIudGVtcGxhdGVkQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5faXNMaW5rZWRUb0FycmF5PXQsZS5uYW1lPW8ubmFtZSxlW2FdPW9bYV0sZX0sci50cmFjZVRlbXBsYXRlcj1mdW5jdGlvbih0KXt2YXIgZSxyLGE9e307Zm9yKGUgaW4gdClyPXRbZV0sQXJyYXkuaXNBcnJheShyKSYmci5sZW5ndGgmJihhW2VdPTApO3JldHVybntuZXdUcmFjZTpmdW5jdGlvbihvKXt2YXIgcz17dHlwZTplPW4uY29lcmNlKG8se30saSxcInR5cGVcIiksX3RlbXBsYXRlOm51bGx9O2lmKGUgaW4gYSl7cj10W2VdO3ZhciBsPWFbZV0lci5sZW5ndGg7YVtlXSsrLHMuX3RlbXBsYXRlPXJbbF19cmV0dXJuIHN9fX0sci5uZXdDb250YWluZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQuX3RlbXBsYXRlLGE9aSYmKGlbZV18fHImJmlbcl0pO3JldHVybiBuLmlzUGxhaW5PYmplY3QoYSl8fChhPW51bGwpLHRbZV09e190ZW1wbGF0ZTphfX0sci5hcnJheVRlbXBsYXRlcj1mdW5jdGlvbih0LGUscil7dmFyIG49dC5fdGVtcGxhdGUsaT1uJiZuW2woZSldLG89biYmbltlXTtBcnJheS5pc0FycmF5KG8pJiZvLmxlbmd0aHx8KG89W10pO3ZhciBjPXt9O3JldHVybntuZXdJdGVtOmZ1bmN0aW9uKHQpe3ZhciBlPXtuYW1lOnQubmFtZSxfaW5wdXQ6dH0sbj1lW2FdPXRbYV07aWYoIXMobikpcmV0dXJuIGUuX3RlbXBsYXRlPWksZTtmb3IodmFyIGw9MDtsPG8ubGVuZ3RoO2wrKyl7dmFyIHU9b1tsXTtpZih1Lm5hbWU9PT1uKXJldHVybiBjW25dPTEsZS5fdGVtcGxhdGU9dSxlfXJldHVybiBlW3JdPXRbcl18fCExLGUuX3RlbXBsYXRlPSExLGV9LGRlZmF1bHRJdGVtczpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxvLmxlbmd0aDtlKyspe3ZhciByPW9bZV0sbj1yLm5hbWU7aWYocyhuKSYmIWNbbl0pe3ZhciBpPXtfdGVtcGxhdGU6cixuYW1lOm4sX2lucHV0OntfdGVtcGxhdGVpdGVtbmFtZTpufX07aVthXT1yW2FdLHQucHVzaChpKSxjW25dPTF9fXJldHVybiB0fX19LHIuYXJyYXlEZWZhdWx0S2V5PWwsci5hcnJheUVkaXRvcj1mdW5jdGlvbih0LGUscil7dmFyIGk9KG4ubmVzdGVkUHJvcGVydHkodCxlKS5nZXQoKXx8W10pLmxlbmd0aCxvPXIuX2luZGV4LHM9bz49aSYmKHIuX2lucHV0fHx7fSkuX3RlbXBsYXRlaXRlbW5hbWU7cyYmKG89aSk7dmFyIGwsYz1lK1wiW1wiK28rXCJdXCI7ZnVuY3Rpb24gdSgpe2w9e30scyYmKGxbY109e30sbFtjXVthXT1zKX1mdW5jdGlvbiBoKHQsZSl7cz9uLm5lc3RlZFByb3BlcnR5KGxbY10sdCkuc2V0KGUpOmxbYytcIi5cIit0XT1lfWZ1bmN0aW9uIGYoKXt2YXIgdD1sO3JldHVybiB1KCksdH1yZXR1cm4gdSgpLHttb2RpZnlCYXNlOmZ1bmN0aW9uKHQsZSl7bFt0XT1lfSxtb2RpZnlJdGVtOmgsZ2V0VXBkYXRlT2JqOmYsYXBwbHlVcGRhdGU6ZnVuY3Rpb24oZSxyKXtlJiZoKGUscik7dmFyIGk9ZigpO2Zvcih2YXIgYSBpbiBpKW4ubmVzdGVkUHJvcGVydHkodCxhKS5zZXQoaVthXSl9fX19LHtcIi4uL2xpYlwiOjcwMSxcIi4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDZ9XSw3NDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vcmVnaXN0cnlcIiksYT10KFwiLi4vcGxvdHMvcGxvdHNcIiksbz10KFwiLi4vbGliXCIpLHM9dChcIi4uL2xpYi9jbGVhcl9nbF9jYW52YXNlc1wiKSxsPXQoXCIuLi9jb21wb25lbnRzL2NvbG9yXCIpLGM9dChcIi4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSx1PXQoXCIuLi9jb21wb25lbnRzL3RpdGxlc1wiKSxoPXQoXCIuLi9jb21wb25lbnRzL21vZGViYXJcIiksZj10KFwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIikscD10KFwiLi4vY29uc3RhbnRzL2FsaWdubWVudFwiKSxkPXQoXCIuLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RyYWludHNcIiksZz1kLmVuZm9yY2Usdj1kLmNsZWFuLG09dChcIi4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2VcIikuZG9BdXRvUmFuZ2UseT1cInN0YXJ0XCIseD1cIm1pZGRsZVwiLGI9XCJlbmRcIjtmdW5jdGlvbiBfKHQsZSxyKXtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXVswXSxhPXJbbl1bMV07aWYoIShpWzBdPj10WzFdfHxpWzFdPD10WzBdKSYmKGFbMF08ZVsxXSYmYVsxXT5lWzBdKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiB3KHQpe3ZhciBlLGksYSxzLHUsZCxnPXQuX2Z1bGxMYXlvdXQsdj1nLl9zaXplLG09di5wLHk9Zi5saXN0KHQsXCJcIiwhMCk7aWYoZy5fcGFwZXJkaXYuc3R5bGUoe3dpZHRoOnQuX2NvbnRleHQucmVzcG9uc2l2ZSYmZy5hdXRvc2l6ZSYmIXQuX2NvbnRleHQuX2hhc1plcm9XaWR0aCYmIXQubGF5b3V0LndpZHRoP1wiMTAwJVwiOmcud2lkdGgrXCJweFwiLGhlaWdodDp0Ll9jb250ZXh0LnJlc3BvbnNpdmUmJmcuYXV0b3NpemUmJiF0Ll9jb250ZXh0Ll9oYXNaZXJvSGVpZ2h0JiYhdC5sYXlvdXQuaGVpZ2h0P1wiMTAwJVwiOmcuaGVpZ2h0K1wicHhcIn0pLnNlbGVjdEFsbChcIi5tYWluLXN2Z1wiKS5jYWxsKGMuc2V0U2l6ZSxnLndpZHRoLGcuaGVpZ2h0KSx0Ll9jb250ZXh0LnNldEJhY2tncm91bmQodCxnLnBhcGVyX2JnY29sb3IpLHIuZHJhd01haW5UaXRsZSh0KSxoLm1hbmFnZSh0KSwhZy5faGFzKFwiY2FydGVzaWFuXCIpKXJldHVybiB0Ll9wcm9taXNlcy5sZW5ndGgmJlByb21pc2UuYWxsKHQuX3Byb21pc2VzKTtmdW5jdGlvbiB4KHQsZSxyKXt2YXIgbj10Ll9sdy8yO3JldHVyblwieFwiPT09dC5faWQuY2hhckF0KDApP2U/XCJ0b3BcIj09PXI/ZS5fb2Zmc2V0LW0tbjplLl9vZmZzZXQrZS5fbGVuZ3RoK20rbjp2LnQrdi5oKigxLSh0LnBvc2l0aW9ufHwwKSkrbiUxOmU/XCJyaWdodFwiPT09cj9lLl9vZmZzZXQrZS5fbGVuZ3RoK20rbjplLl9vZmZzZXQtbS1uOnYubCt2LncqKHQucG9zaXRpb258fDApK24lMX1mb3IoZT0wO2U8eS5sZW5ndGg7ZSsrKXt2YXIgYj0ocz15W2VdKS5fYW5jaG9yQXhpcztzLl9saW5lcG9zaXRpb25zPXt9LHMuX2x3PWMuY3Jpc3BSb3VuZCh0LHMubGluZXdpZHRoLDEpLHMuX21haW5MaW5lUG9zaXRpb249eChzLGIscy5zaWRlKSxzLl9tYWluTWlycm9yUG9zaXRpb249cy5taXJyb3ImJmI/eChzLGIscC5PUFBPU0lURV9TSURFW3Muc2lkZV0pOm51bGx9dmFyIHc9W10sQT1bXSxNPVtdLFM9MT09PWwub3BhY2l0eShnLnBhcGVyX2JnY29sb3IpJiYxPT09bC5vcGFjaXR5KGcucGxvdF9iZ2NvbG9yKSYmZy5wYXBlcl9iZ2NvbG9yPT09Zy5wbG90X2JnY29sb3I7Zm9yKGkgaW4gZy5fcGxvdHMpaWYoKGE9Zy5fcGxvdHNbaV0pLm1haW5wbG90KWEuYmcmJmEuYmcucmVtb3ZlKCksYS5iZz12b2lkIDA7ZWxzZXt2YXIgRT1hLnhheGlzLmRvbWFpbixDPWEueWF4aXMuZG9tYWluLEw9YS5wbG90Z3JvdXA7aWYoXyhFLEMsTSkpe3ZhciB6PUwubm9kZSgpLE89YS5iZz1vLmVuc3VyZVNpbmdsZShMLFwicmVjdFwiLFwiYmdcIik7ei5pbnNlcnRCZWZvcmUoTy5ub2RlKCksei5jaGlsZE5vZGVzWzBdKSxBLnB1c2goaSl9ZWxzZSBMLnNlbGVjdChcInJlY3QuYmdcIikucmVtb3ZlKCksTS5wdXNoKFtFLENdKSxTfHwody5wdXNoKGkpLEEucHVzaChpKSl9dmFyIEksRCxQLFIsRixCLE4saixWLFUscSxILEcsWT1nLl9iZ0xheWVyLnNlbGVjdEFsbChcIi5iZ1wiKS5kYXRhKHcpO2ZvcihZLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKS5jbGFzc2VkKFwiYmdcIiwhMCksWS5leGl0KCkucmVtb3ZlKCksWS5lYWNoKGZ1bmN0aW9uKHQpe2cuX3Bsb3RzW3RdLmJnPW4uc2VsZWN0KHRoaXMpfSksZT0wO2U8QS5sZW5ndGg7ZSsrKWE9Zy5fcGxvdHNbQVtlXV0sdT1hLnhheGlzLGQ9YS55YXhpcyxhLmJnJiZhLmJnLmNhbGwoYy5zZXRSZWN0LHUuX29mZnNldC1tLGQuX29mZnNldC1tLHUuX2xlbmd0aCsyKm0sZC5fbGVuZ3RoKzIqbSkuY2FsbChsLmZpbGwsZy5wbG90X2JnY29sb3IpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsMCk7aWYoIWcuX2hhc09ubHlMYXJnZVNwbG9tcylmb3IoaSBpbiBnLl9wbG90cyl7YT1nLl9wbG90c1tpXSx1PWEueGF4aXMsZD1hLnlheGlzO3ZhciBXLFgsWj1hLmNsaXBJZD1cImNsaXBcIitnLl91aWQraStcInBsb3RcIiwkPW8uZW5zdXJlU2luZ2xlQnlJZChnLl9jbGlwcyxcImNsaXBQYXRoXCIsWixmdW5jdGlvbih0KXt0LmNsYXNzZWQoXCJwbG90Y2xpcFwiLCEwKS5hcHBlbmQoXCJyZWN0XCIpfSk7YS5jbGlwUmVjdD0kLnNlbGVjdChcInJlY3RcIikuYXR0cih7d2lkdGg6dS5fbGVuZ3RoLGhlaWdodDpkLl9sZW5ndGh9KSxjLnNldFRyYW5zbGF0ZShhLnBsb3QsdS5fb2Zmc2V0LGQuX29mZnNldCksYS5faGFzQ2xpcE9uQXhpc0ZhbHNlPyhXPW51bGwsWD1aKTooVz1aLFg9bnVsbCksYy5zZXRDbGlwVXJsKGEucGxvdCxXLHQpLGEubGF5ZXJDbGlwSWQ9WH1mdW5jdGlvbiBKKHQpe3JldHVyblwiTVwiK0krXCIsXCIrdCtcIkhcIitEfWZ1bmN0aW9uIEsodCl7cmV0dXJuXCJNXCIrdS5fb2Zmc2V0K1wiLFwiK3QrXCJoXCIrdS5fbGVuZ3RofWZ1bmN0aW9uIFEodCl7cmV0dXJuXCJNXCIrdCtcIixcIitqK1wiVlwiK059ZnVuY3Rpb24gdHQodCl7cmV0dXJuXCJNXCIrdCtcIixcIitkLl9vZmZzZXQrXCJ2XCIrZC5fbGVuZ3RofWZ1bmN0aW9uIGV0KHQsZSxyKXtpZighdC5zaG93bGluZXx8aSE9PXQuX21haW5TdWJwbG90KXJldHVyblwiXCI7aWYoIXQuX2FuY2hvckF4aXMpcmV0dXJuIHIodC5fbWFpbkxpbmVQb3NpdGlvbik7dmFyIG49ZSh0Ll9tYWluTGluZVBvc2l0aW9uKTtyZXR1cm4gdC5taXJyb3ImJihuKz1lKHQuX21haW5NaXJyb3JQb3NpdGlvbikpLG59Zm9yKGkgaW4gZy5fcGxvdHMpe2E9Zy5fcGxvdHNbaV0sdT1hLnhheGlzLGQ9YS55YXhpczt2YXIgcnQ9XCJNMCwwXCI7ayh1LGkpJiYoRj1UKHUsXCJsZWZ0XCIsZCx5KSxJPXUuX29mZnNldC0oRj9tK0Y6MCksQj1UKHUsXCJyaWdodFwiLGQseSksRD11Ll9vZmZzZXQrdS5fbGVuZ3RoKyhCP20rQjowKSxQPXgodSxkLFwiYm90dG9tXCIpLFI9eCh1LGQsXCJ0b3BcIiksIShHPSF1Ll9hbmNob3JBeGlzfHxpIT09dS5fbWFpblN1YnBsb3QpfHxcImFsbHRpY2tzXCIhPT11Lm1pcnJvciYmXCJhbGxcIiE9PXUubWlycm9yfHwodS5fbGluZXBvc2l0aW9uc1tpXT1bUCxSXSkscnQ9ZXQodSxKLEspLEcmJnUuc2hvd2xpbmUmJihcImFsbFwiPT09dS5taXJyb3J8fFwiYWxsdGlja3NcIj09PXUubWlycm9yKSYmKHJ0Kz1KKFApK0ooUikpLGEueGxpbmVzLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsdS5fbHcrXCJweFwiKS5jYWxsKGwuc3Ryb2tlLHUuc2hvd2xpbmU/dS5saW5lY29sb3I6XCJyZ2JhKDAsMCwwLDApXCIpKSxhLnhsaW5lcy5hdHRyKFwiZFwiLHJ0KTt2YXIgbnQ9XCJNMCwwXCI7ayhkLGkpJiYocT1UKGQsXCJib3R0b21cIix1LHkpLE49ZC5fb2Zmc2V0K2QuX2xlbmd0aCsocT9tOjApLEg9VChkLFwidG9wXCIsdSx5KSxqPWQuX29mZnNldC0oSD9tOjApLFY9eChkLHUsXCJsZWZ0XCIpLFU9eChkLHUsXCJyaWdodFwiKSwhKEc9IWQuX2FuY2hvckF4aXN8fGkhPT1kLl9tYWluU3VicGxvdCl8fFwiYWxsdGlja3NcIiE9PWQubWlycm9yJiZcImFsbFwiIT09ZC5taXJyb3J8fChkLl9saW5lcG9zaXRpb25zW2ldPVtWLFVdKSxudD1ldChkLFEsdHQpLEcmJmQuc2hvd2xpbmUmJihcImFsbFwiPT09ZC5taXJyb3J8fFwiYWxsdGlja3NcIj09PWQubWlycm9yKSYmKG50Kz1RKFYpK1EoVSkpLGEueWxpbmVzLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsZC5fbHcrXCJweFwiKS5jYWxsKGwuc3Ryb2tlLGQuc2hvd2xpbmU/ZC5saW5lY29sb3I6XCJyZ2JhKDAsMCwwLDApXCIpKSxhLnlsaW5lcy5hdHRyKFwiZFwiLG50KX1yZXR1cm4gZi5tYWtlQ2xpcFBhdGhzKHQpLHQuX3Byb21pc2VzLmxlbmd0aCYmUHJvbWlzZS5hbGwodC5fcHJvbWlzZXMpfWZ1bmN0aW9uIGsodCxlKXtyZXR1cm4odC50aWNrc3x8dC5zaG93bGluZSkmJihlPT09dC5fbWFpblN1YnBsb3R8fFwiYWxsXCI9PT10Lm1pcnJvcnx8XCJhbGx0aWNrc1wiPT09dC5taXJyb3IpfWZ1bmN0aW9uIEEodCxlLHIpe2lmKCFyLnNob3dsaW5lfHwhci5fbHcpcmV0dXJuITE7aWYoXCJhbGxcIj09PXIubWlycm9yfHxcImFsbHRpY2tzXCI9PT1yLm1pcnJvcilyZXR1cm4hMDt2YXIgbj1yLl9hbmNob3JBeGlzO2lmKCFuKXJldHVybiExO3ZhciBpPXAuRlJPTV9CTFtlXTtyZXR1cm4gci5zaWRlPT09ZT9uLmRvbWFpbltpXT09PXQuZG9tYWluW2ldOnIubWlycm9yJiZuLmRvbWFpblsxLWldPT09dC5kb21haW5bMS1pXX1mdW5jdGlvbiBUKHQsZSxyLG4pe2lmKEEodCxlLHIpKXJldHVybiByLl9sdztmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIGE9bltpXTtpZihhLl9tYWluQXhpcz09PXIuX21haW5BeGlzJiZBKHQsZSxhKSlyZXR1cm4gYS5fbHd9cmV0dXJuIDB9ci5sYXlvdXRTdHlsZXM9ZnVuY3Rpb24odCl7cmV0dXJuIG8uc3luY09yQXN5bmMoW2EuZG9BdXRvTWFyZ2luLHddLHQpfSxyLmRyYXdNYWluVGl0bGU9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWZ1bmN0aW9uKHQpe3ZhciBlPXQudGl0bGUscj14O28uaXNSaWdodEFuY2hvcihlKT9yPWI6by5pc0xlZnRBbmNob3IoZSkmJihyPXkpO3JldHVybiByfShlKSxuPWZ1bmN0aW9uKHQpe3ZhciBlPXQudGl0bGUscj1cIjBlbVwiO28uaXNUb3BBbmNob3IoZSk/cj1wLkNBUF9TSElGVCtcImVtXCI6by5pc01pZGRsZUFuY2hvcihlKSYmKHI9cC5NSURfU0hJRlQrXCJlbVwiKTtyZXR1cm4gcn0oZSk7dS5kcmF3KHQsXCJndGl0bGVcIix7cHJvcENvbnRhaW5lcjplLHByb3BOYW1lOlwidGl0bGUudGV4dFwiLHBsYWNlaG9sZGVyOmUuX2RmbHRUaXRsZS5wbG90LGF0dHJpYnV0ZXM6e3g6ZnVuY3Rpb24odCxlKXt2YXIgcj10LnRpdGxlLG49dC5fc2l6ZSxpPTA7ZT09PXk/aT1yLnBhZC5sOmU9PT1iJiYoaT0tci5wYWQucik7c3dpdGNoKHIueHJlZil7Y2FzZVwicGFwZXJcIjpyZXR1cm4gbi5sK24udypyLngraTtjYXNlXCJjb250YWluZXJcIjpkZWZhdWx0OnJldHVybiB0LndpZHRoKnIueCtpfX0oZSxyKSx5OmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC50aXRsZSxuPXQuX3NpemUsaT0wO1wiMGVtXCIhPT1lJiZlP2U9PT1wLkNBUF9TSElGVCtcImVtXCImJihpPXIucGFkLnQpOmk9LXIucGFkLmI7aWYoXCJhdXRvXCI9PT1yLnkpcmV0dXJuIG4udC8yO3N3aXRjaChyLnlyZWYpe2Nhc2VcInBhcGVyXCI6cmV0dXJuIG4udCtuLmgtbi5oKnIueStpO2Nhc2VcImNvbnRhaW5lclwiOmRlZmF1bHQ6cmV0dXJuIHQuaGVpZ2h0LXQuaGVpZ2h0KnIueStpfX0oZSxuKSxcInRleHQtYW5jaG9yXCI6cixkeTpufX0pfSxyLmRvVHJhY2VTdHlsZT1mdW5jdGlvbih0KXt2YXIgZSxuPXQuY2FsY2RhdGEsbz1bXTtmb3IoZT0wO2U8bi5sZW5ndGg7ZSsrKXt2YXIgbD1uW2VdLGM9bFswXXx8e30sdT1jLnRyYWNlfHx7fSxoPXUuX21vZHVsZXx8e30sZj1oLmFycmF5c1RvQ2FsY2RhdGE7ZiYmZihsLHUpO3ZhciBwPWguZWRpdFN0eWxlO3AmJm8ucHVzaCh7Zm46cCxjZDA6Y30pfWlmKG8ubGVuZ3RoKXtmb3IoZT0wO2U8by5sZW5ndGg7ZSsrKXt2YXIgZD1vW2VdO2QuZm4odCxkLmNkMCl9cyh0KSxyLnJlZHJhd1JlZ2xUcmFjZXModCl9cmV0dXJuIGEuc3R5bGUodCksaS5nZXRDb21wb25lbnRNZXRob2QoXCJsZWdlbmRcIixcImRyYXdcIikodCksYS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmRvQ29sb3JCYXJzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5jYWxjZGF0YS5sZW5ndGg7ZSsrKXt2YXIgcj10LmNhbGNkYXRhW2VdWzBdO2lmKChyLnR8fHt9KS5jYil7dmFyIG49ci50cmFjZSxvPXIudC5jYjtpLnRyYWNlSXMobixcImNvbnRvdXJcIikmJm8ubGluZSh7d2lkdGg6ITEhPT1uLmNvbnRvdXJzLnNob3dsaW5lcz9uLmxpbmUud2lkdGg6MCxkYXNoOm4ubGluZS5kYXNoLGNvbG9yOlwibGluZVwiPT09bi5jb250b3Vycy5jb2xvcmluZz9vLl9vcHRzLmxpbmUuY29sb3I6bi5saW5lLmNvbG9yfSk7dmFyIHM9bi5fbW9kdWxlLmNvbG9yYmFyLmNvbnRhaW5lcixsPShzP25bc106bikuY29sb3JiYXI7by5vcHRpb25zKGwpKCl9fXJldHVybiBhLnByZXZpb3VzUHJvbWlzZXModCl9LHIubGF5b3V0UmVwbG90PWZ1bmN0aW9uKHQpe3ZhciBlPXQubGF5b3V0O3JldHVybiB0LmxheW91dD12b2lkIDAsaS5jYWxsKFwicGxvdFwiLHQsXCJcIixlKX0sci5kb0xlZ2VuZD1mdW5jdGlvbih0KXtyZXR1cm4gaS5nZXRDb21wb25lbnRNZXRob2QoXCJsZWdlbmRcIixcImRyYXdcIikodCksYS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmRvVGlja3NSZWxheW91dD1mdW5jdGlvbih0KXtyZXR1cm4gZi5kcmF3KHQsXCJyZWRyYXdcIiksdC5fZnVsbExheW91dC5faGFzT25seUxhcmdlU3Bsb21zJiYoaS5zdWJwbG90c1JlZ2lzdHJ5LnNwbG9tLnVwZGF0ZUdyaWQodCkscyh0KSxyLnJlZHJhd1JlZ2xUcmFjZXModCkpLHIuZHJhd01haW5UaXRsZSh0KSxhLnByZXZpb3VzUHJvbWlzZXModCl9LHIuZG9Nb2RlQmFyPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7aC5tYW5hZ2UodCk7Zm9yKHZhciByPTA7cjxlLl9iYXNlUGxvdE1vZHVsZXMubGVuZ3RoO3IrKyl7dmFyIG49ZS5fYmFzZVBsb3RNb2R1bGVzW3JdLnVwZGF0ZUZ4O24mJm4odCl9cmV0dXJuIGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5kb0NhbWVyYT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLmdsM2Qsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1lW3Jbbl1dLGE9aS5fc2NlbmUsbz1pLmNhbWVyYTthLnNldENhbWVyYShvKX19LHIuZHJhd0RhdGE9ZnVuY3Rpb24odCl7dmFyIGUsbj10Ll9mdWxsTGF5b3V0LG89dC5jYWxjZGF0YTtmb3IoZT0wO2U8by5sZW5ndGg7ZSsrKXt2YXIgbD1vW2VdWzBdLnRyYWNlOyEwPT09bC52aXNpYmxlJiZsLl9tb2R1bGUuY29sb3JiYXJ8fG4uX2luZm9sYXllci5zZWxlY3QoXCIuY2JcIitsLnVpZCkucmVtb3ZlKCl9cyh0KTt2YXIgYz1uLl9iYXNlUGxvdE1vZHVsZXM7Zm9yKGU9MDtlPGMubGVuZ3RoO2UrKyljW2VdLnBsb3QodCk7cmV0dXJuIHIucmVkcmF3UmVnbFRyYWNlcyh0KSxhLnN0eWxlKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKFwic2hhcGVzXCIsXCJkcmF3XCIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKFwiYW5ub3RhdGlvbnNcIixcImRyYXdcIikodCksbi5fcmVwbG90dGluZz0hMSxhLnByZXZpb3VzUHJvbWlzZXModCl9LHIucmVkcmF3UmVnbFRyYWNlcz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2lmKGUuX2hhcyhcInJlZ2xcIikpe3ZhciByLG4saT10Ll9mdWxsRGF0YSxhPVtdLHM9W107Zm9yKGUuX2hhc09ubHlMYXJnZVNwbG9tcyYmZS5fc3Bsb21HcmlkLmRyYXcoKSxyPTA7cjxpLmxlbmd0aDtyKyspe3ZhciBsPWlbcl07ITA9PT1sLnZpc2libGUmJihcInNwbG9tXCI9PT1sLnR5cGU/ZS5fc3Bsb21TY2VuZXNbbC51aWRdLmRyYXcoKTpcInNjYXR0ZXJnbFwiPT09bC50eXBlP28ucHVzaFVuaXF1ZShhLGwueGF4aXMrbC55YXhpcyk6XCJzY2F0dGVycG9sYXJnbFwiPT09bC50eXBlJiZvLnB1c2hVbmlxdWUocyxsLnN1YnBsb3QpKX1mb3Iocj0wO3I8YS5sZW5ndGg7cisrKShuPWUuX3Bsb3RzW2Fbcl1dKS5fc2NlbmUmJm4uX3NjZW5lLmRyYXcoKTtmb3Iocj0wO3I8cy5sZW5ndGg7cisrKShuPWVbc1tyXV0uX3N1YnBsb3QpLl9zY2VuZSYmbi5fc2NlbmUuZHJhdygpfX0sci5kb0F1dG9SYW5nZUFuZENvbnN0cmFpbnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPXQuX2Z1bGxMYXlvdXQsbj1mLmxpc3QodCxcIlwiLCEwKSxpPXIuX2F4aXNNYXRjaEdyb3Vwc3x8W10sYT0wO2E8bi5sZW5ndGg7YSsrKWU9blthXSx2KHQsZSksbSh0LGUpO2codCk7dDpmb3IodmFyIG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHMsbD1pW29dLGM9bnVsbDtmb3IocyBpbiBsKXtpZighMT09PShlPWYuZ2V0RnJvbUlkKHQscykpLmF1dG9yYW5nZSljb250aW51ZSB0O2M/Y1swXTxjWzFdPyhjWzBdPU1hdGgubWluKGNbMF0sZS5yYW5nZVswXSksY1sxXT1NYXRoLm1heChjWzFdLGUucmFuZ2VbMV0pKTooY1swXT1NYXRoLm1heChjWzBdLGUucmFuZ2VbMF0pLGNbMV09TWF0aC5taW4oY1sxXSxlLnJhbmdlWzFdKSk6Yz1lLnJhbmdlfWZvcihzIGluIGwpKGU9Zi5nZXRGcm9tSWQodCxzKSkucmFuZ2U9Yy5zbGljZSgpLGUuX2lucHV0LnJhbmdlPWMuc2xpY2UoKSxlLnNldFNjYWxlKCl9fSxyLmZpbmFsRHJhdz1mdW5jdGlvbih0KXtpLmdldENvbXBvbmVudE1ldGhvZChcInNoYXBlc1wiLFwiZHJhd1wiKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZChcImltYWdlc1wiLFwiZHJhd1wiKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZChcImFubm90YXRpb25zXCIsXCJkcmF3XCIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKFwicmFuZ2VzbGlkZXJcIixcImRyYXdcIikodCksaS5nZXRDb21wb25lbnRNZXRob2QoXCJyYW5nZXNlbGVjdG9yXCIsXCJkcmF3XCIpKHQpfSxyLmRyYXdNYXJnaW5QdXNoZXJzPWZ1bmN0aW9uKHQpe2kuZ2V0Q29tcG9uZW50TWV0aG9kKFwibGVnZW5kXCIsXCJkcmF3XCIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKFwicmFuZ2VzZWxlY3RvclwiLFwiZHJhd1wiKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZChcInNsaWRlcnNcIixcImRyYXdcIikodCksaS5nZXRDb21wb25lbnRNZXRob2QoXCJ1cGRhdGVtZW51c1wiLFwiZHJhd1wiKSh0KX19LHtcIi4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi9jb21wb25lbnRzL21vZGViYXJcIjo2MzcsXCIuLi9jb21wb25lbnRzL3RpdGxlc1wiOjY2NixcIi4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIjo2NzMsXCIuLi9saWJcIjo3MDEsXCIuLi9saWIvY2xlYXJfZ2xfY2FudmFzZXNcIjo2ODYsXCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlXCI6NzQ4LFwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RyYWludHNcIjo3NTYsXCIuLi9wbG90cy9wbG90c1wiOjgxMCxcIi4uL3JlZ2lzdHJ5XCI6ODI5LGQzOjE1NX1dLDc0MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9saWJcIiksaT1uLmlzUGxhaW5PYmplY3QsYT10KFwiLi9wbG90X3NjaGVtYVwiKSxvPXQoXCIuLi9wbG90cy9wbG90c1wiKSxzPXQoXCIuLi9wbG90cy9hdHRyaWJ1dGVzXCIpLGw9dChcIi4vcGxvdF90ZW1wbGF0ZVwiKSxjPXQoXCIuL3Bsb3RfY29uZmlnXCIpLmRmbHRDb25maWc7ZnVuY3Rpb24gdSh0LGUpe3Q9bi5leHRlbmREZWVwKHt9LHQpO3ZhciByLGEsbz1PYmplY3Qua2V5cyh0KS5zb3J0KCk7ZnVuY3Rpb24gcyhlLHIsbil7aWYoaShyKSYmaShlKSl1KGUscik7ZWxzZSBpZihBcnJheS5pc0FycmF5KHIpJiZBcnJheS5pc0FycmF5KGUpKXt2YXIgbz1sLmFycmF5VGVtcGxhdGVyKHtfdGVtcGxhdGU6dH0sbik7Zm9yKGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIHM9clthXSxjPW8ubmV3SXRlbShzKS5fdGVtcGxhdGU7YyYmdShjLHMpfXZhciBoPW8uZGVmYXVsdEl0ZW1zKCk7Zm9yKGE9MDthPGgubGVuZ3RoO2ErKylyLnB1c2goaFthXS5fdGVtcGxhdGUpO2ZvcihhPTA7YTxyLmxlbmd0aDthKyspZGVsZXRlIHJbYV0udGVtcGxhdGVpdGVtbmFtZX19Zm9yKHI9MDtyPG8ubGVuZ3RoO3IrKyl7dmFyIGM9b1tyXSxmPXRbY107aWYoYyBpbiBlP3MoZixlW2NdLGMpOmVbY109ZixoKGMpPT09Yylmb3IodmFyIHAgaW4gZSl7dmFyIGQ9aChwKTtwPT09ZHx8ZCE9PWN8fHAgaW4gdHx8cyhmLGVbcF0sYyl9fX1mdW5jdGlvbiBoKHQpe3JldHVybiB0LnJlcGxhY2UoL1swLTldKyQvLFwiXCIpfWZ1bmN0aW9uIGYodCxlLHIsYSxvKXt2YXIgcz1vJiZyKG8pO2Zvcih2YXIgYyBpbiB0KXt2YXIgdT10W2NdLGQ9cCh0LGMsYSksZz1wKHQsYyxvKSx2PXIoZyk7aWYoIXYpe3ZhciBtPWgoYyk7bSE9PWMmJih2PXIoZz1wKHQsbSxvKSkpfWlmKCghc3x8cyE9PXYpJiYhKCF2fHx2Ll9ub1RlbXBsYXRpbmd8fFwiZGF0YV9hcnJheVwiPT09di52YWxUeXBlfHx2LmFycmF5T2smJkFycmF5LmlzQXJyYXkodSkpKWlmKCF2LnZhbFR5cGUmJmkodSkpZih1LGUscixkLGcpO2Vsc2UgaWYodi5faXNMaW5rZWRUb0FycmF5JiZBcnJheS5pc0FycmF5KHUpKWZvcih2YXIgeT0hMSx4PTAsYj17fSxfPTA7Xzx1Lmxlbmd0aDtfKyspe3ZhciB3PXVbX107aWYoaSh3KSl7dmFyIGs9dy5uYW1lO2lmKGspYltrXXx8KGYodyxlLHIscCh1LHgsZCkscCh1LHgsZykpLHgrKyxiW2tdPTEpO2Vsc2UgaWYoIXkpe3ZhciBBPXAodCxsLmFycmF5RGVmYXVsdEtleShjKSxhKSxUPXAodSx4LGQpO2YodyxlLHIsVCxwKHUseCxnKSk7dmFyIE09bi5uZXN0ZWRQcm9wZXJ0eShlLFQpO24ubmVzdGVkUHJvcGVydHkoZSxBKS5zZXQoTS5nZXQoKSksTS5zZXQobnVsbCkseT0hMH19fWVsc2V7bi5uZXN0ZWRQcm9wZXJ0eShlLGQpLnNldCh1KX19fWZ1bmN0aW9uIHAodCxlLHIpe3JldHVybiByP0FycmF5LmlzQXJyYXkodCk/citcIltcIitlK1wiXVwiOnIrXCIuXCIrZTplfWZ1bmN0aW9uIGQodCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYoaSh0W2VdKSlyZXR1cm4hMH1mdW5jdGlvbiBnKHQpe3ZhciBlO3N3aXRjaCh0LmNvZGUpe2Nhc2VcImRhdGFcIjplPVwiVGhlIHRlbXBsYXRlIGhhcyBubyBrZXkgZGF0YS5cIjticmVhaztjYXNlXCJsYXlvdXRcIjplPVwiVGhlIHRlbXBsYXRlIGhhcyBubyBrZXkgbGF5b3V0LlwiO2JyZWFrO2Nhc2VcIm1pc3NpbmdcIjplPXQucGF0aD9cIlRoZXJlIGFyZSBubyB0ZW1wbGF0ZXMgZm9yIGl0ZW0gXCIrdC5wYXRoK1wiIHdpdGggbmFtZSBcIit0LnRlbXBsYXRlaXRlbW5hbWU6XCJUaGVyZSBhcmUgbm8gdGVtcGxhdGVzIGZvciB0cmFjZSBcIit0LmluZGV4K1wiLCBvZiB0eXBlIFwiK3QudHJhY2VUeXBlK1wiLlwiO2JyZWFrO2Nhc2VcInVudXNlZFwiOmU9dC5wYXRoP1wiVGhlIHRlbXBsYXRlIGl0ZW0gYXQgXCIrdC5wYXRoK1wiIHdhcyBub3QgdXNlZCBpbiBjb25zdHJ1Y3RpbmcgdGhlIHBsb3QuXCI6dC5kYXRhQ291bnQ/XCJTb21lIG9mIHRoZSB0ZW1wbGF0ZXMgb2YgdHlwZSBcIit0LnRyYWNlVHlwZStcIiB3ZXJlIG5vdCB1c2VkLiBUaGUgdGVtcGxhdGUgaGFzIFwiK3QudGVtcGxhdGVDb3VudCtcIiB0cmFjZXMsIHRoZSBkYXRhIG9ubHkgaGFzIFwiK3QuZGF0YUNvdW50K1wiIG9mIHRoaXMgdHlwZS5cIjpcIlRoZSB0ZW1wbGF0ZSBoYXMgXCIrdC50ZW1wbGF0ZUNvdW50K1wiIHRyYWNlcyBvZiB0eXBlIFwiK3QudHJhY2VUeXBlK1wiIGJ1dCB0aGVyZSBhcmUgbm9uZSBpbiB0aGUgZGF0YS5cIjticmVhaztjYXNlXCJyZXVzZWRcIjplPVwiU29tZSBvZiB0aGUgdGVtcGxhdGVzIG9mIHR5cGUgXCIrdC50cmFjZVR5cGUrXCIgd2VyZSB1c2VkIG1vcmUgdGhhbiBvbmNlLiBUaGUgdGVtcGxhdGUgaGFzIFwiK3QudGVtcGxhdGVDb3VudCtcIiB0cmFjZXMsIHRoZSBkYXRhIGhhcyBcIit0LmRhdGFDb3VudCtcIiBvZiB0aGlzIHR5cGUuXCJ9cmV0dXJuIHQubXNnPWUsdH1yLm1ha2VUZW1wbGF0ZT1mdW5jdGlvbih0KXt0PW4uaXNQbGFpbk9iamVjdCh0KT90Om4uZ2V0R3JhcGhEaXYodCksdD1uLmV4dGVuZERlZXAoe19jb250ZXh0OmN9LHtkYXRhOnQuZGF0YSxsYXlvdXQ6dC5sYXlvdXR9KSxvLnN1cHBseURlZmF1bHRzKHQpO3ZhciBlPXQuZGF0YXx8W10scj10LmxheW91dHx8e307ci5fYmFzZVBsb3RNb2R1bGVzPXQuX2Z1bGxMYXlvdXQuX2Jhc2VQbG90TW9kdWxlcyxyLl9tb2R1bGVzPXQuX2Z1bGxMYXlvdXQuX21vZHVsZXM7dmFyIGw9e2RhdGE6e30sbGF5b3V0Ont9fTtlLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9e307Zih0LGUsZnVuY3Rpb24odCxlKXtyZXR1cm4gYS5nZXRUcmFjZVZhbE9iamVjdCh0LG4ubmVzdGVkUHJvcGVydHkoe30sZSkucGFydHMpfS5iaW5kKG51bGwsdCkpO3ZhciByPW4uY29lcmNlKHQse30scyxcInR5cGVcIiksaT1sLmRhdGFbcl07aXx8KGk9bC5kYXRhW3JdPVtdKSxpLnB1c2goZSl9KSxmKHIsbC5sYXlvdXQsZnVuY3Rpb24odCxlKXtyZXR1cm4gYS5nZXRMYXlvdXRWYWxPYmplY3QodCxuLm5lc3RlZFByb3BlcnR5KHt9LGUpLnBhcnRzKX0uYmluZChudWxsLHIpKSxkZWxldGUgbC5sYXlvdXQudGVtcGxhdGU7dmFyIGg9ci50ZW1wbGF0ZTtpZihpKGgpKXt2YXIgcCxkLGcsdixtLHkseD1oLmxheW91dDtpKHgpJiZ1KHgsbC5sYXlvdXQpO3ZhciBiPWguZGF0YTtpZihpKGIpKXtmb3IoZCBpbiBsLmRhdGEpaWYoZz1iW2RdLEFycmF5LmlzQXJyYXkoZykpe2Zvcih5PShtPWwuZGF0YVtkXSkubGVuZ3RoLHY9Zy5sZW5ndGgscD0wO3A8eTtwKyspdShnW3Aldl0sbVtwXSk7Zm9yKHA9eTtwPHY7cCsrKW0ucHVzaChuLmV4dGVuZERlZXAoe30sZ1twXSkpfWZvcihkIGluIGIpZCBpbiBsLmRhdGF8fChsLmRhdGFbZF09bi5leHRlbmREZWVwKFtdLGJbZF0pKX19cmV0dXJuIGx9LHIudmFsaWRhdGVUZW1wbGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPW4uZXh0ZW5kRGVlcCh7fSx7X2NvbnRleHQ6YyxkYXRhOnQuZGF0YSxsYXlvdXQ6dC5sYXlvdXR9KSxhPXIubGF5b3V0fHx7fTtpKGUpfHwoZT1hLnRlbXBsYXRlfHx7fSk7dmFyIHM9ZS5sYXlvdXQsbD1lLmRhdGEsdT1bXTtyLmxheW91dD1hLHIubGF5b3V0LnRlbXBsYXRlPWUsby5zdXBwbHlEZWZhdWx0cyhyKTt2YXIgZj1yLl9mdWxsTGF5b3V0LHY9ci5fZnVsbERhdGEsbT17fTtpZihpKHMpPyghZnVuY3Rpb24gdChlLHIpe2Zvcih2YXIgbiBpbiBlKWlmKFwiX1wiIT09bi5jaGFyQXQoMCkmJmkoZVtuXSkpe3ZhciBhLG89aChuKSxzPVtdO2ZvcihhPTA7YTxyLmxlbmd0aDthKyspcy5wdXNoKHAoZSxuLHJbYV0pKSxvIT09biYmcy5wdXNoKHAoZSxvLHJbYV0pKTtmb3IoYT0wO2E8cy5sZW5ndGg7YSsrKW1bc1thXV09MTt0KGVbbl0scyl9fShmLFtcImxheW91dFwiXSksZnVuY3Rpb24gdChlLHIpe2Zvcih2YXIgbiBpbiBlKWlmKC0xPT09bi5pbmRleE9mKFwiZGVmYXVsdHNcIikmJmkoZVtuXSkpe3ZhciBhPXAoZSxuLHIpO21bYV0/dChlW25dLGEpOnUucHVzaCh7Y29kZTpcInVudXNlZFwiLHBhdGg6YX0pfX0ocyxcImxheW91dFwiKSk6dS5wdXNoKHtjb2RlOlwibGF5b3V0XCJ9KSxpKGwpKXtmb3IodmFyIHkseD17fSxiPTA7Yjx2Lmxlbmd0aDtiKyspe3ZhciBfPXZbYl07eFt5PV8udHlwZV09KHhbeV18fDApKzEsXy5fZnVsbElucHV0Ll90ZW1wbGF0ZXx8dS5wdXNoKHtjb2RlOlwibWlzc2luZ1wiLGluZGV4Ol8uX2Z1bGxJbnB1dC5pbmRleCx0cmFjZVR5cGU6eX0pfWZvcih5IGluIGwpe3ZhciB3PWxbeV0ubGVuZ3RoLGs9eFt5XXx8MDt3Pms/dS5wdXNoKHtjb2RlOlwidW51c2VkXCIsdHJhY2VUeXBlOnksdGVtcGxhdGVDb3VudDp3LGRhdGFDb3VudDprfSk6az53JiZ1LnB1c2goe2NvZGU6XCJyZXVzZWRcIix0cmFjZVR5cGU6eSx0ZW1wbGF0ZUNvdW50OncsZGF0YUNvdW50Omt9KX19ZWxzZSB1LnB1c2goe2NvZGU6XCJkYXRhXCJ9KTtpZihmdW5jdGlvbiB0KGUscil7Zm9yKHZhciBuIGluIGUpaWYoXCJfXCIhPT1uLmNoYXJBdCgwKSl7dmFyIGE9ZVtuXSxvPXAoZSxuLHIpO2koYSk/KEFycmF5LmlzQXJyYXkoZSkmJiExPT09YS5fdGVtcGxhdGUmJmEudGVtcGxhdGVpdGVtbmFtZSYmdS5wdXNoKHtjb2RlOlwibWlzc2luZ1wiLHBhdGg6byx0ZW1wbGF0ZWl0ZW1uYW1lOmEudGVtcGxhdGVpdGVtbmFtZX0pLHQoYSxvKSk6QXJyYXkuaXNBcnJheShhKSYmZChhKSYmdChhLG8pfX0oe2RhdGE6dixsYXlvdXQ6Zn0sXCJcIiksdS5sZW5ndGgpcmV0dXJuIHUubWFwKGcpfX0se1wiLi4vbGliXCI6NzAxLFwiLi4vcGxvdHMvYXR0cmlidXRlc1wiOjc0NixcIi4uL3Bsb3RzL3Bsb3RzXCI6ODEwLFwiLi9wbG90X2NvbmZpZ1wiOjczNyxcIi4vcGxvdF9zY2hlbWFcIjo3MzgsXCIuL3Bsb3RfdGVtcGxhdGVcIjo3Mzl9XSw3NDI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi9wbG90X2FwaVwiKSxhPXQoXCIuLi9saWJcIiksbz10KFwiLi4vc25hcHNob3QvaGVscGVyc1wiKSxzPXQoXCIuLi9zbmFwc2hvdC90b3N2Z1wiKSxsPXQoXCIuLi9zbmFwc2hvdC9zdmd0b2ltZ1wiKSxjPXtmb3JtYXQ6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInBuZ1wiLFwianBlZ1wiLFwid2VicFwiLFwic3ZnXCJdLGRmbHQ6XCJwbmdcIn0sd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MX0saGVpZ2h0Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjF9LHNjYWxlOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxfSxzZXRCYWNrZ3JvdW5kOnt2YWxUeXBlOlwiYW55XCIsZGZsdDohMX0saW1hZ2VEYXRhT25seTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfX0sdT0vXmRhdGE6aW1hZ2VcXC9cXHcrO2Jhc2U2NCwvO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGgsZixwO2Z1bmN0aW9uIGQodCl7cmV0dXJuISh0IGluIGUpfHxhLnZhbGlkYXRlKGVbdF0sY1t0XSl9aWYoZT1lfHx7fSxhLmlzUGxhaW5PYmplY3QodCk/KHI9dC5kYXRhfHxbXSxoPXQubGF5b3V0fHx7fSxmPXQuY29uZmlnfHx7fSxwPXt9KToodD1hLmdldEdyYXBoRGl2KHQpLHI9YS5leHRlbmREZWVwKFtdLHQuZGF0YSksaD1hLmV4dGVuZERlZXAoe30sdC5sYXlvdXQpLGY9dC5fY29udGV4dCxwPXQuX2Z1bGxMYXlvdXR8fHt9KSwhZChcIndpZHRoXCIpJiZudWxsIT09ZS53aWR0aHx8IWQoXCJoZWlnaHRcIikmJm51bGwhPT1lLmhlaWdodCl0aHJvdyBuZXcgRXJyb3IoXCJIZWlnaHQgYW5kIHdpZHRoIHNob3VsZCBiZSBwaXhlbCB2YWx1ZXMuXCIpO2lmKCFkKFwiZm9ybWF0XCIpKXRocm93IG5ldyBFcnJvcihcIkltYWdlIGZvcm1hdCBpcyBub3QganBlZywgcG5nLCBzdmcgb3Igd2VicC5cIik7dmFyIGc9e307ZnVuY3Rpb24gdih0LHIpe3JldHVybiBhLmNvZXJjZShlLGcsYyx0LHIpfXZhciBtPXYoXCJmb3JtYXRcIikseT12KFwid2lkdGhcIikseD12KFwiaGVpZ2h0XCIpLGI9dihcInNjYWxlXCIpLF89dihcInNldEJhY2tncm91bmRcIiksdz12KFwiaW1hZ2VEYXRhT25seVwiKSxrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7ay5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsay5zdHlsZS5sZWZ0PVwiLTUwMDBweFwiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoayk7dmFyIEE9YS5leHRlbmRGbGF0KHt9LGgpO3k/QS53aWR0aD15Om51bGw9PT1lLndpZHRoJiZuKHAud2lkdGgpJiYoQS53aWR0aD1wLndpZHRoKSx4P0EuaGVpZ2h0PXg6bnVsbD09PWUuaGVpZ2h0JiZuKHAuaGVpZ2h0KSYmKEEuaGVpZ2h0PXAuaGVpZ2h0KTt2YXIgVD1hLmV4dGVuZEZsYXQoe30sZix7X2V4cG9ydGVkUGxvdDohMCxzdGF0aWNQbG90OiEwLHNldEJhY2tncm91bmQ6X30pLE09by5nZXRSZWRyYXdGdW5jKGspO2Z1bmN0aW9uIFMoKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LG8uZ2V0RGVsYXkoay5fZnVsbExheW91dCkpfSl9ZnVuY3Rpb24gRSgpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LGUpe3ZhciByPXMoayxtLGIpLG49ay5fZnVsbExheW91dC53aWR0aCxvPWsuX2Z1bGxMYXlvdXQuaGVpZ2h0O2lmKGkucHVyZ2UoayksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChrKSxcInN2Z1wiPT09bSlyZXR1cm4gdCh3P3I6XCJkYXRhOmltYWdlL3N2Zyt4bWwsXCIrZW5jb2RlVVJJQ29tcG9uZW50KHIpKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO2MuaWQ9YS5yYW5kc3RyKCksbCh7Zm9ybWF0Om0sd2lkdGg6bixoZWlnaHQ6byxzY2FsZTpiLGNhbnZhczpjLHN2ZzpyLHByb21pc2U6ITB9KS50aGVuKHQpLmNhdGNoKGUpfSl9cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsZSl7aS5wbG90KGsscixBLFQpLnRoZW4oTSkudGhlbihTKS50aGVuKEUpLnRoZW4oZnVuY3Rpb24oZSl7dChmdW5jdGlvbih0KXtyZXR1cm4gdz90LnJlcGxhY2UodSxcIlwiKTp0fShlKSl9KS5jYXRjaChmdW5jdGlvbih0KXtlKHQpfSl9KX19LHtcIi4uL2xpYlwiOjcwMSxcIi4uL3NuYXBzaG90L2hlbHBlcnNcIjo4MzMsXCIuLi9zbmFwc2hvdC9zdmd0b2ltZ1wiOjgzNSxcIi4uL3NuYXBzaG90L3Rvc3ZnXCI6ODM3LFwiLi9wbG90X2FwaVwiOjczNixcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sNzQzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2xpYlwiKSxpPXQoXCIuLi9wbG90cy9wbG90c1wiKSxhPXQoXCIuL3Bsb3Rfc2NoZW1hXCIpLG89dChcIi4vcGxvdF9jb25maWdcIikuZGZsdENvbmZpZyxzPW4uaXNQbGFpbk9iamVjdCxsPUFycmF5LmlzQXJyYXksYz1uLmlzQXJyYXlPclR5cGVkQXJyYXk7ZnVuY3Rpb24gdSh0LGUscixpLGEsbyl7bz1vfHxbXTtmb3IodmFyIGg9T2JqZWN0LmtleXModCksZj0wO2Y8aC5sZW5ndGg7ZisrKXt2YXIgdj1oW2ZdO2lmKFwidHJhbnNmb3Jtc1wiIT09dil7dmFyIG09by5zbGljZSgpO20ucHVzaCh2KTt2YXIgeT10W3ZdLHg9ZVt2XSxiPWcocix2KSxfPVwiaW5mb19hcnJheVwiPT09KGJ8fHt9KS52YWxUeXBlLHc9XCJjb2xvcnNjYWxlXCI9PT0oYnx8e30pLnZhbFR5cGUsaz0oYnx8e30pLml0ZW1zO2lmKGQocix2KSlpZihzKHkpJiZzKHgpKXUoeSx4LGIsaSxhLG0pO2Vsc2UgaWYoXyYmbCh5KSl7eS5sZW5ndGg+eC5sZW5ndGgmJmkucHVzaChwKFwidW51c2VkXCIsYSxtLmNvbmNhdCh4Lmxlbmd0aCkpKTt2YXIgQSxULE0sUyxFLEM9eC5sZW5ndGgsTD1BcnJheS5pc0FycmF5KGspO2lmKEwmJihDPU1hdGgubWluKEMsay5sZW5ndGgpKSwyPT09Yi5kaW1lbnNpb25zKWZvcihUPTA7VDxDO1QrKylpZihsKHlbVF0pKXt5W1RdLmxlbmd0aD54W1RdLmxlbmd0aCYmaS5wdXNoKHAoXCJ1bnVzZWRcIixhLG0uY29uY2F0KFQseFtUXS5sZW5ndGgpKSk7dmFyIHo9eFtUXS5sZW5ndGg7Zm9yKEE9MDtBPChMP01hdGgubWluKHosa1tUXS5sZW5ndGgpOnopO0ErKylNPUw/a1tUXVtBXTprLFM9eVtUXVtBXSxFPXhbVF1bQV0sbi52YWxpZGF0ZShTLE0pP0UhPT1TJiZFIT09K1MmJmkucHVzaChwKFwiZHluYW1pY1wiLGEsbS5jb25jYXQoVCxBKSxTLEUpKTppLnB1c2gocChcInZhbHVlXCIsYSxtLmNvbmNhdChULEEpLFMpKX1lbHNlIGkucHVzaChwKFwiYXJyYXlcIixhLG0uY29uY2F0KFQpLHlbVF0pKTtlbHNlIGZvcihUPTA7VDxDO1QrKylNPUw/a1tUXTprLFM9eVtUXSxFPXhbVF0sbi52YWxpZGF0ZShTLE0pP0UhPT1TJiZFIT09K1MmJmkucHVzaChwKFwiZHluYW1pY1wiLGEsbS5jb25jYXQoVCksUyxFKSk6aS5wdXNoKHAoXCJ2YWx1ZVwiLGEsbS5jb25jYXQoVCksUykpfWVsc2UgaWYoYi5pdGVtcyYmIV8mJmwoeSkpe3ZhciBPLEksRD1rW09iamVjdC5rZXlzKGspWzBdXSxQPVtdO2ZvcihPPTA7Tzx4Lmxlbmd0aDtPKyspe3ZhciBSPXhbT10uX2luZGV4fHxPO2lmKChJPW0uc2xpY2UoKSkucHVzaChSKSxzKHlbUl0pJiZzKHhbT10pKXtQLnB1c2goUik7dmFyIEY9eVtSXSxCPXhbT107cyhGKSYmITEhPT1GLnZpc2libGUmJiExPT09Qi52aXNpYmxlP2kucHVzaChwKFwiaW52aXNpYmxlXCIsYSxJKSk6dShGLEIsRCxpLGEsSSl9fWZvcihPPTA7Tzx5Lmxlbmd0aDtPKyspKEk9bS5zbGljZSgpKS5wdXNoKE8pLHMoeVtPXSk/LTE9PT1QLmluZGV4T2YoTykmJmkucHVzaChwKFwidW51c2VkXCIsYSxJKSk6aS5wdXNoKHAoXCJvYmplY3RcIixhLEkseVtPXSkpfWVsc2Uhcyh5KSYmcyh4KT9pLnB1c2gocChcIm9iamVjdFwiLGEsbSx5KSk6Yyh5KXx8IWMoeCl8fF98fHc/diBpbiBlP24udmFsaWRhdGUoeSxiKT9cImVudW1lcmF0ZWRcIj09PWIudmFsVHlwZSYmKGIuY29lcmNlTnVtYmVyJiZ5IT09K3h8fHkhPT14KSYmaS5wdXNoKHAoXCJkeW5hbWljXCIsYSxtLHkseCkpOmkucHVzaChwKFwidmFsdWVcIixhLG0seSkpOmkucHVzaChwKFwidW51c2VkXCIsYSxtLHkpKTppLnB1c2gocChcImFycmF5XCIsYSxtLHkpKTtlbHNlIGkucHVzaChwKFwic2NoZW1hXCIsYSxtKSl9fXJldHVybiBpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGMsaD1hLmdldCgpLGY9W10sZD17X2NvbnRleHQ6bi5leHRlbmRGbGF0KHt9LG8pfTtsKHQpPyhkLmRhdGE9bi5leHRlbmREZWVwKFtdLHQpLHI9dCk6KGQuZGF0YT1bXSxyPVtdLGYucHVzaChwKFwiYXJyYXlcIixcImRhdGFcIikpKSxzKGUpPyhkLmxheW91dD1uLmV4dGVuZERlZXAoe30sZSksYz1lKTooZC5sYXlvdXQ9e30sYz17fSxhcmd1bWVudHMubGVuZ3RoPjEmJmYucHVzaChwKFwib2JqZWN0XCIsXCJsYXlvdXRcIikpKSxpLnN1cHBseURlZmF1bHRzKGQpO2Zvcih2YXIgZz1kLl9mdWxsRGF0YSx2PXIubGVuZ3RoLG09MDttPHY7bSsrKXt2YXIgeT1yW21dLHg9W1wiZGF0YVwiLG1dO2lmKHMoeSkpe3ZhciBiPWdbbV0sXz1iLnR5cGUsdz1oLnRyYWNlc1tfXS5hdHRyaWJ1dGVzO3cudHlwZT17dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W19dfSwhMT09PWIudmlzaWJsZSYmITEhPT15LnZpc2libGUmJmYucHVzaChwKFwiaW52aXNpYmxlXCIseCkpLHUoeSxiLHcsZix4KTt2YXIgaz15LnRyYW5zZm9ybXMsQT1iLnRyYW5zZm9ybXM7aWYoayl7bChrKXx8Zi5wdXNoKHAoXCJhcnJheVwiLHgsW1widHJhbnNmb3Jtc1wiXSkpLHgucHVzaChcInRyYW5zZm9ybXNcIik7Zm9yKHZhciBUPTA7VDxrLmxlbmd0aDtUKyspe3ZhciBNPVtcInRyYW5zZm9ybXNcIixUXSxTPWtbVF0udHlwZTtpZihzKGtbVF0pKXt2YXIgRT1oLnRyYW5zZm9ybXNbU10/aC50cmFuc2Zvcm1zW1NdLmF0dHJpYnV0ZXM6e307RS50eXBlPXt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpPYmplY3Qua2V5cyhoLnRyYW5zZm9ybXMpfSx1KGtbVF0sQVtUXSxFLGYseCxNKX1lbHNlIGYucHVzaChwKFwib2JqZWN0XCIseCxNKSl9fX1lbHNlIGYucHVzaChwKFwib2JqZWN0XCIseCkpfXJldHVybiB1KGMsZC5fZnVsbExheW91dCxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmxheW91dC5sYXlvdXRBdHRyaWJ1dGVzLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXSxvPXQudHJhY2VzW2EudHlwZV0scz1vLmxheW91dEF0dHJpYnV0ZXM7cyYmKGEuc3VicGxvdD9uLmV4dGVuZEZsYXQocltvLmF0dHJpYnV0ZXMuc3VicGxvdC5kZmx0XSxzKTpuLmV4dGVuZEZsYXQocixzKSl9cmV0dXJuIHJ9KGgsZyksZixcImxheW91dFwiKSwwPT09Zi5sZW5ndGg/dm9pZCAwOmZ9O3ZhciBoPXtvYmplY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4oXCJsYXlvdXRcIj09PXQmJlwiXCI9PT1lP1wiVGhlIGxheW91dCBhcmd1bWVudFwiOlwiZGF0YVwiPT09dFswXSYmXCJcIj09PWU/XCJUcmFjZSBcIit0WzFdK1wiIGluIHRoZSBkYXRhIGFyZ3VtZW50XCI6Zih0KStcImtleSBcIitlKStcIiBtdXN0IGJlIGxpbmtlZCB0byBhbiBvYmplY3QgY29udGFpbmVyXCJ9LGFycmF5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuKFwiZGF0YVwiPT09dD9cIlRoZSBkYXRhIGFyZ3VtZW50XCI6Zih0KStcImtleSBcIitlKStcIiBtdXN0IGJlIGxpbmtlZCB0byBhbiBhcnJheSBjb250YWluZXJcIn0sc2NoZW1hOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYodCkrXCJrZXkgXCIrZStcIiBpcyBub3QgcGFydCBvZiB0aGUgc2NoZW1hXCJ9LHVudXNlZDpmdW5jdGlvbih0LGUscil7dmFyIG49cyhyKT9cImNvbnRhaW5lclwiOlwia2V5XCI7cmV0dXJuIGYodCkrbitcIiBcIitlK1wiIGRpZCBub3QgZ2V0IGNvZXJjZWRcIn0sZHluYW1pYzpmdW5jdGlvbih0LGUscixuKXtyZXR1cm5bZih0KStcImtleVwiLGUsXCIoc2V0IHRvICdcIityK1wiJylcIixcImdvdCByZXNldCB0b1wiLFwiJ1wiK24rXCInXCIsXCJkdXJpbmcgZGVmYXVsdHMuXCJdLmpvaW4oXCIgXCIpfSxpbnZpc2libGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4oZT9mKHQpK1wiaXRlbSBcIitlOlwiVHJhY2UgXCIrdFsxXSkrXCIgZ290IGRlZmF1bHRlZCB0byBiZSBub3QgdmlzaWJsZVwifSx2YWx1ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuW2YodCkrXCJrZXkgXCIrZSxcImlzIHNldCB0byBhbiBpbnZhbGlkIHZhbHVlIChcIityK1wiKVwiXS5qb2luKFwiIFwiKX19O2Z1bmN0aW9uIGYodCl7cmV0dXJuIGwodCk/XCJJbiBkYXRhIHRyYWNlIFwiK3RbMV0rXCIsIFwiOlwiSW4gXCIrdCtcIiwgXCJ9ZnVuY3Rpb24gcCh0LGUscixpLGEpe3ZhciBvLHM7cj1yfHxcIlwiLGwoZSk/KG89ZVswXSxzPWVbMV0pOihvPWUscz1udWxsKTt2YXIgYz1mdW5jdGlvbih0KXtpZighbCh0KSlyZXR1cm4gU3RyaW5nKHQpO2Zvcih2YXIgZT1cIlwiLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtcIm51bWJlclwiPT10eXBlb2Ygbj9lPWUuc3Vic3RyKDAsZS5sZW5ndGgtMSkrXCJbXCIrbitcIl1cIjplKz1uLHI8dC5sZW5ndGgtMSYmKGUrPVwiLlwiKX1yZXR1cm4gZX0ociksdT1oW3RdKGUsYyxpLGEpO3JldHVybiBuLmxvZyh1KSx7Y29kZTp0LGNvbnRhaW5lcjpvLHRyYWNlOnMscGF0aDpyLGFzdHI6Yyxtc2c6dX19ZnVuY3Rpb24gZCh0LGUpe3ZhciByPW0oZSksbj1yLmtleU1pbnVzSWQsaT1yLmlkO3JldHVybiEhKG4gaW4gdCYmdFtuXS5faXNTdWJwbG90T2JqJiZpKXx8ZSBpbiB0fWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gZSBpbiB0P3RbZV06dFttKGUpLmtleU1pbnVzSWRdfXZhciB2PW4uY291bnRlclJlZ2V4KFwiKFthLXpdKylcIik7ZnVuY3Rpb24gbSh0KXt2YXIgZT10Lm1hdGNoKHYpO3JldHVybntrZXlNaW51c0lkOmUmJmVbMV0saWQ6ZSYmZVsyXX19fSx7XCIuLi9saWJcIjo3MDEsXCIuLi9wbG90cy9wbG90c1wiOjgxMCxcIi4vcGxvdF9jb25maWdcIjo3MzcsXCIuL3Bsb3Rfc2NoZW1hXCI6NzM4fV0sNzQ0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXttb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLGRmbHQ6XCJhZnRlcmFsbFwiLHZhbHVlczpbXCJpbW1lZGlhdGVcIixcIm5leHRcIixcImFmdGVyYWxsXCJdfSxkaXJlY3Rpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImZvcndhcmRcIixcInJldmVyc2VcIl0sZGZsdDpcImZvcndhcmRcIn0sZnJvbWN1cnJlbnQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sZnJhbWU6e2R1cmF0aW9uOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDo1MDB9LHJlZHJhdzp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfX0sdHJhbnNpdGlvbjp7ZHVyYXRpb246e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjUwMCxlZGl0VHlwZTpcIm5vbmVcIn0sZWFzaW5nOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLGRmbHQ6XCJjdWJpYy1pbi1vdXRcIix2YWx1ZXM6W1wibGluZWFyXCIsXCJxdWFkXCIsXCJjdWJpY1wiLFwic2luXCIsXCJleHBcIixcImNpcmNsZVwiLFwiZWxhc3RpY1wiLFwiYmFja1wiLFwiYm91bmNlXCIsXCJsaW5lYXItaW5cIixcInF1YWQtaW5cIixcImN1YmljLWluXCIsXCJzaW4taW5cIixcImV4cC1pblwiLFwiY2lyY2xlLWluXCIsXCJlbGFzdGljLWluXCIsXCJiYWNrLWluXCIsXCJib3VuY2UtaW5cIixcImxpbmVhci1vdXRcIixcInF1YWQtb3V0XCIsXCJjdWJpYy1vdXRcIixcInNpbi1vdXRcIixcImV4cC1vdXRcIixcImNpcmNsZS1vdXRcIixcImVsYXN0aWMtb3V0XCIsXCJiYWNrLW91dFwiLFwiYm91bmNlLW91dFwiLFwibGluZWFyLWluLW91dFwiLFwicXVhZC1pbi1vdXRcIixcImN1YmljLWluLW91dFwiLFwic2luLWluLW91dFwiLFwiZXhwLWluLW91dFwiLFwiY2lyY2xlLWluLW91dFwiLFwiZWxhc3RpYy1pbi1vdXRcIixcImJhY2staW4tb3V0XCIsXCJib3VuY2UtaW4tb3V0XCJdLGVkaXRUeXBlOlwibm9uZVwifSxvcmRlcmluZzp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibGF5b3V0IGZpcnN0XCIsXCJ0cmFjZXMgZmlyc3RcIl0sZGZsdDpcImxheW91dCBmaXJzdFwiLGVkaXRUeXBlOlwibm9uZVwifX19fSx7fV0sNzQ1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2xpYlwiKSxpPXQoXCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGEsbyxzPXIubmFtZSxsPXIuaW5jbHVzaW9uQXR0cnx8XCJ2aXNpYmxlXCIsYz1lW3NdLHU9bi5pc0FycmF5T3JUeXBlZEFycmF5KHRbc10pP3Rbc106W10saD1lW3NdPVtdLGY9aS5hcnJheVRlbXBsYXRlcihlLHMsbCk7Zm9yKGE9MDthPHUubGVuZ3RoO2ErKyl7dmFyIHA9dVthXTtuLmlzUGxhaW5PYmplY3QocCk/bz1mLm5ld0l0ZW0ocCk6KG89Zi5uZXdJdGVtKHt9KSlbbF09ITEsby5faW5kZXg9YSwhMSE9PW9bbF0mJnIuaGFuZGxlSXRlbURlZmF1bHRzKHAsbyxlLHIpLGgucHVzaChvKX12YXIgZD1mLmRlZmF1bHRJdGVtcygpO2ZvcihhPTA7YTxkLmxlbmd0aDthKyspKG89ZFthXSkuX2luZGV4PWgubGVuZ3RoLHIuaGFuZGxlSXRlbURlZmF1bHRzKHt9LG8sZSxyLHt9KSxoLnB1c2gobyk7aWYobi5pc0FycmF5T3JUeXBlZEFycmF5KGMpKXt2YXIgZz1NYXRoLm1pbihjLmxlbmd0aCxoLmxlbmd0aCk7Zm9yKGE9MDthPGc7YSsrKW4ucmVsaW5rUHJpdmF0ZUtleXMoaFthXSxjW2FdKX1yZXR1cm4gaH19LHtcIi4uL2xpYlwiOjcwMSxcIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3Mzl9XSw3NDY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz17dHlwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W10sZGZsdDpcInNjYXR0ZXJcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIixfbm9UZW1wbGF0aW5nOiEwfSx2aXNpYmxlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbITAsITEsXCJsZWdlbmRvbmx5XCJdLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LHNob3dsZWdlbmQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcInN0eWxlXCJ9LGxlZ2VuZGdyb3VwOnt2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwic3R5bGVcIn0sb3BhY2l0eTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZTpcInN0eWxlXCJ9LG5hbWU6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcInN0eWxlXCJ9LHVpZDp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwicGxvdFwiLGFuaW06ITB9LGlkczp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIixhbmltOiEwfSxjdXN0b21kYXRhOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxzZWxlY3RlZHBvaW50czp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsY1wifSxob3ZlcmluZm86e3ZhbFR5cGU6XCJmbGFnbGlzdFwiLGZsYWdzOltcInhcIixcInlcIixcInpcIixcInRleHRcIixcIm5hbWVcIl0sZXh0cmFzOltcImFsbFwiLFwibm9uZVwiLFwic2tpcFwiXSxhcnJheU9rOiEwLGRmbHQ6XCJhbGxcIixlZGl0VHlwZTpcIm5vbmVcIn0saG92ZXJsYWJlbDpuLmhvdmVybGFiZWwsc3RyZWFtOnt0b2tlbjp7dmFsVHlwZTpcInN0cmluZ1wiLG5vQmxhbms6ITAsc3RyaWN0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSxtYXhwb2ludHM6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MWU0LGRmbHQ6NTAwLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0sdHJhbnNmb3Jtczp7X2lzTGlua2VkVG9BcnJheTpcInRyYW5zZm9ybVwiLGVkaXRUeXBlOlwiY2FsY1wifSx1aXJldmlzaW9uOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJub25lXCJ9fX0se1wiLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzXCI6NjA4fV0sNzQ3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXt4YXhpczp7dmFsVHlwZTpcInN1YnBsb3RpZFwiLGRmbHQ6XCJ4XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LHlheGlzOnt2YWxUeXBlOlwic3VicGxvdGlkXCIsZGZsdDpcInlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn19fSx7fV0sNzQ4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkZQX1NBRkUsbz10KFwiLi4vLi4vcmVnaXN0cnlcIik7ZnVuY3Rpb24gcyh0LGUpe3ZhciByLG4sYT1bXSxvPWwoZSkscz1jKHQsZSksdT1zLm1pbixoPXMubWF4O2lmKDA9PT11Lmxlbmd0aHx8MD09PWgubGVuZ3RoKXJldHVybiBpLnNpbXBsZU1hcChlLnJhbmdlLGUucjJsKTt2YXIgZj11WzBdLnZhbCxwPWhbMF0udmFsO2ZvcihyPTE7cjx1Lmxlbmd0aCYmZj09PXA7cisrKWY9TWF0aC5taW4oZix1W3JdLnZhbCk7Zm9yKHI9MTtyPGgubGVuZ3RoJiZmPT09cDtyKyspcD1NYXRoLm1heChwLGhbcl0udmFsKTt2YXIgZD0hMTtpZihlLnJhbmdlKXt2YXIgZz1pLnNpbXBsZU1hcChlLnJhbmdlLGUucjJsKTtkPWdbMV08Z1swXX1cInJldmVyc2VkXCI9PT1lLmF1dG9yYW5nZSYmKGQ9ITAsZS5hdXRvcmFuZ2U9ITApO3ZhciB2LG0seSx4LGIsXyx3PWUucmFuZ2Vtb2RlLGs9XCJ0b3plcm9cIj09PXcsQT1cIm5vbm5lZ2F0aXZlXCI9PT13LFQ9ZS5fbGVuZ3RoLE09VC8xMCxTPTA7Zm9yKHI9MDtyPHUubGVuZ3RoO3IrKylmb3Iodj11W3JdLG49MDtuPGgubGVuZ3RoO24rKykoXz0obT1oW25dKS52YWwtdi52YWwpPjAmJigoYj1ULW8odiktbyhtKSk+TT9fL2I+UyYmKHk9dix4PW0sUz1fL2IpOl8vVD5TJiYoeT17dmFsOnYudmFsLHBhZDowfSx4PXt2YWw6bS52YWwscGFkOjB9LFM9Xy9UKSk7aWYoZj09PXApe3ZhciBFPWYtMSxDPWYrMTtpZihrKWlmKDA9PT1mKWE9WzAsMV07ZWxzZXt2YXIgTD0oZj4wP2g6dSkucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsbyhlKSl9LDApLHo9Zi8oMS1NYXRoLm1pbiguNSxML1QpKTthPWY+MD9bMCx6XTpbeiwwXX1lbHNlIGE9QT9bTWF0aC5tYXgoMCxFKSxNYXRoLm1heCgxLEMpXTpbRSxDXX1lbHNlIGs/KHkudmFsPj0wJiYoeT17dmFsOjAscGFkOjB9KSx4LnZhbDw9MCYmKHg9e3ZhbDowLHBhZDowfSkpOkEmJih5LnZhbC1TKm8oeSk8MCYmKHk9e3ZhbDowLHBhZDowfSkseC52YWw8PTAmJih4PXt2YWw6MSxwYWQ6MH0pKSxTPSh4LnZhbC15LnZhbCkvKFQtbyh5KS1vKHgpKSxhPVt5LnZhbC1TKm8oeSkseC52YWwrUypvKHgpXTtyZXR1cm4gZCYmYS5yZXZlcnNlKCksaS5zaW1wbGVNYXAoYSxlLmwycnx8TnVtYmVyKX1mdW5jdGlvbiBsKHQpe3ZhciBlPXQuX2xlbmd0aC8yMDtyZXR1cm5cImRvbWFpblwiPT09dC5jb25zdHJhaW4mJnQuX2lucHV0RG9tYWluJiYoZSo9KHQuX2lucHV0RG9tYWluWzFdLXQuX2lucHV0RG9tYWluWzBdKS8odC5kb21haW5bMV0tdC5kb21haW5bMF0pKSxmdW5jdGlvbih0KXtyZXR1cm4gdC5wYWQrKHQuZXh0cmFwYWQ/ZTowKX19ZnVuY3Rpb24gYyh0LGUpe3ZhciByLG4saSxhPWUuX2lkLG89dC5fZnVsbERhdGEscz10Ll9mdWxsTGF5b3V0LGw9W10sYz1bXTtmdW5jdGlvbiBmKHQsZSl7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG89dFtlW3JdXSxzPShvLl9leHRyZW1lc3x8e30pW2FdO2lmKCEwPT09by52aXNpYmxlJiZzKXtmb3Iobj0wO248cy5taW4ubGVuZ3RoO24rKylpPXMubWluW25dLHUobCxpLnZhbCxpLnBhZCx7ZXh0cmFwYWQ6aS5leHRyYXBhZH0pO2ZvcihuPTA7bjxzLm1heC5sZW5ndGg7bisrKWk9cy5tYXhbbl0saChjLGkudmFsLGkucGFkLHtleHRyYXBhZDppLmV4dHJhcGFkfSl9fX1yZXR1cm4gZihvLGUuX3RyYWNlSW5kaWNlcyksZihzLmFubm90YXRpb25zfHxbXSxlLl9hbm5JbmRpY2VzfHxbXSksZihzLnNoYXBlc3x8W10sZS5fc2hhcGVJbmRpY2VzfHxbXSkse21pbjpsLG1heDpjfX1mdW5jdGlvbiB1KHQsZSxyLG4pe2YodCxlLHIsbixkKX1mdW5jdGlvbiBoKHQsZSxyLG4pe2YodCxlLHIsbixnKX1mdW5jdGlvbiBmKHQsZSxyLG4saSl7Zm9yKHZhciBhPW4udG96ZXJvLG89bi5leHRyYXBhZCxzPSEwLGw9MDtsPHQubGVuZ3RoJiZzO2wrKyl7dmFyIGM9dFtsXTtpZihpKGMudmFsLGUpJiZjLnBhZD49ciYmKGMuZXh0cmFwYWR8fCFvKSl7cz0hMTticmVha31pKGUsYy52YWwpJiZjLnBhZDw9ciYmKG98fCFjLmV4dHJhcGFkKSYmKHQuc3BsaWNlKGwsMSksbC0tKX1pZihzKXt2YXIgdT1hJiYwPT09ZTt0LnB1c2goe3ZhbDplLHBhZDp1PzA6cixleHRyYXBhZDohdSYmb30pfX1mdW5jdGlvbiBwKHQpe3JldHVybiBuKHQpJiZNYXRoLmFicyh0KTxhfWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4gdDw9ZX1mdW5jdGlvbiBnKHQsZSl7cmV0dXJuIHQ+PWV9ZS5leHBvcnRzPXtnZXRBdXRvUmFuZ2U6cyxtYWtlUGFkRm46bCxkb0F1dG9SYW5nZTpmdW5jdGlvbih0LGUpe2lmKGUuc2V0U2NhbGUoKSxlLmF1dG9yYW5nZSl7ZS5yYW5nZT1zKHQsZSksZS5fcj1lLnJhbmdlLnNsaWNlKCksZS5fcmw9aS5zaW1wbGVNYXAoZS5fcixlLnIybCk7dmFyIHI9ZS5faW5wdXQsbj17fTtuW2UuX2F0dHIrXCIucmFuZ2VcIl09ZS5yYW5nZSxuW2UuX2F0dHIrXCIuYXV0b3JhbmdlXCJdPWUuYXV0b3JhbmdlLG8uY2FsbChcIl9zdG9yZURpcmVjdEdVSUVkaXRcIix0LmxheW91dCx0Ll9mdWxsTGF5b3V0Ll9wcmVHVUksbiksci5yYW5nZT1lLnJhbmdlLnNsaWNlKCksci5hdXRvcmFuZ2U9ZS5hdXRvcmFuZ2V9dmFyIGE9ZS5fYW5jaG9yQXhpcztpZihhJiZhLnJhbmdlc2xpZGVyKXt2YXIgbD1hLnJhbmdlc2xpZGVyW2UuX25hbWVdO2wmJlwiYXV0b1wiPT09bC5yYW5nZW1vZGUmJihsLnJhbmdlPXModCxlKSksYS5faW5wdXQucmFuZ2VzbGlkZXJbZS5fbmFtZV09aS5leHRlbmRGbGF0KHt9LGwpfX0sZmluZEV4dHJlbWVzOmZ1bmN0aW9uKHQsZSxyKXtyfHwocj17fSk7dC5fbXx8dC5zZXRTY2FsZSgpO3ZhciBpLG8scyxsLGMsZixkLGcsdixtPVtdLHk9W10seD1lLmxlbmd0aCxiPXIucGFkZGVkfHwhMSxfPXIudG96ZXJvJiYoXCJsaW5lYXJcIj09PXQudHlwZXx8XCItXCI9PT10LnR5cGUpLHc9XCJsb2dcIj09PXQudHlwZSxrPSExO2Z1bmN0aW9uIEEodCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gaz0hMCxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5tYXgoTnVtYmVyKHRbZV18fDApLDApfTt2YXIgZT1NYXRoLm1heChOdW1iZXIodHx8MCksMCk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBUPUEoKHQuX20+MD9yLnBwYWRwbHVzOnIucHBhZG1pbnVzKXx8ci5wcGFkfHwwKSxNPUEoKHQuX20+MD9yLnBwYWRtaW51czpyLnBwYWRwbHVzKXx8ci5wcGFkfHwwKSxTPUEoci52cGFkcGx1c3x8ci52cGFkKSxFPUEoci52cGFkbWludXN8fHIudnBhZCk7aWYoIWspe2lmKGc9MS8wLHY9LTEvMCx3KWZvcihpPTA7aTx4O2krKykobz1lW2ldKTxnJiZvPjAmJihnPW8pLG8+diYmbzxhJiYodj1vKTtlbHNlIGZvcihpPTA7aTx4O2krKykobz1lW2ldKTxnJiZvPi1hJiYoZz1vKSxvPnYmJm88YSYmKHY9byk7ZT1bZyx2XSx4PTJ9dmFyIEM9e3RvemVybzpfLGV4dHJhcGFkOmJ9O2Z1bmN0aW9uIEwocil7cz1lW3JdLG4ocykmJihmPVQociksZD1NKHIpLGc9cy1FKHIpLHY9cytTKHIpLHcmJmc8di8xMCYmKGc9di8xMCksbD10LmMybChnKSxjPXQuYzJsKHYpLF8mJihsPU1hdGgubWluKDAsbCksYz1NYXRoLm1heCgwLGMpKSxwKGwpJiZ1KG0sbCxkLEMpLHAoYykmJmgoeSxjLGYsQykpfXZhciB6PU1hdGgubWluKDYseCk7Zm9yKGk9MDtpPHo7aSsrKUwoaSk7Zm9yKGk9eC0xO2k+PXo7aS0tKUwoaSk7cmV0dXJue21pbjptLG1heDp5LG9wdHM6cn19LGNvbmNhdEV4dHJlbWVzOmN9fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDc0OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxhPXQoXCIuLi8uLi9wbG90cy9wbG90c1wiKSxvPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxzPXQoXCIuLi8uLi9saWJcIiksbD10KFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCIpLGM9dChcIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzXCIpLHU9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksaD10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLGY9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIikscD10KFwiLi9jbGVhbl90aWNrc1wiKSxkPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLGc9ZC5PTkVBVkdZRUFSLHY9ZC5PTkVBVkdNT05USCxtPWQuT05FREFZLHk9ZC5PTkVIT1VSLHg9ZC5PTkVNSU4sYj1kLk9ORVNFQyxfPWQuTUlOVVNfU0lHTix3PWQuQkFETlVNLGs9dChcIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIikuTUlEX1NISUZULEE9dChcIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIikuTElORV9TUEFDSU5HLFQ9ZS5leHBvcnRzPXt9O1Quc2V0Q29udmVydD10KFwiLi9zZXRfY29udmVydFwiKTt2YXIgTT10KFwiLi9heGlzX2F1dG90eXBlXCIpLFM9dChcIi4vYXhpc19pZHNcIik7VC5pZDJuYW1lPVMuaWQybmFtZSxULm5hbWUyaWQ9Uy5uYW1lMmlkLFQuY2xlYW5JZD1TLmNsZWFuSWQsVC5saXN0PVMubGlzdCxULmxpc3RJZHM9Uy5saXN0SWRzLFQuZ2V0RnJvbUlkPVMuZ2V0RnJvbUlkLFQuZ2V0RnJvbVRyYWNlPVMuZ2V0RnJvbVRyYWNlO3ZhciBFPXQoXCIuL2F1dG9yYW5nZVwiKTtULmdldEF1dG9SYW5nZT1FLmdldEF1dG9SYW5nZSxULmZpbmRFeHRyZW1lcz1FLmZpbmRFeHRyZW1lcyxULmNvZXJjZVJlZj1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89bi5jaGFyQXQobi5sZW5ndGgtMSksbD1yLl9mdWxsTGF5b3V0Ll9zdWJwbG90c1tvK1wiYXhpc1wiXSxjPW4rXCJyZWZcIix1PXt9O3JldHVybiBpfHwoaT1sWzBdfHxhKSxhfHwoYT1pKSx1W2NdPXt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpsLmNvbmNhdChhP1thXTpbXSksZGZsdDppfSxzLmNvZXJjZSh0LGUsdSxjKX0sVC5jb2VyY2VQb3NpdGlvbj1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8sbDtpZihcInBhcGVyXCI9PT1ufHxcInBpeGVsXCI9PT1uKW89cy5lbnN1cmVOdW1iZXIsbD1yKGksYSk7ZWxzZXt2YXIgYz1ULmdldEZyb21JZChlLG4pO2w9cihpLGE9Yy5mcmFjdGlvbjJyKGEpKSxvPWMuY2xlYW5Qb3N9dFtpXT1vKGwpfSxULmNsZWFuUG9zaXRpb249ZnVuY3Rpb24odCxlLHIpe3JldHVybihcInBhcGVyXCI9PT1yfHxcInBpeGVsXCI9PT1yP3MuZW5zdXJlTnVtYmVyOlQuZ2V0RnJvbUlkKGUscikuY2xlYW5Qb3MpKHQpfSxULnJlZHJhd0NvbXBvbmVudHM9ZnVuY3Rpb24odCxlKXtlPWV8fFQubGlzdElkcyh0KTt2YXIgcj10Ll9mdWxsTGF5b3V0O2Z1bmN0aW9uIG4obixpLGEscyl7Zm9yKHZhciBsPW8uZ2V0Q29tcG9uZW50TWV0aG9kKG4saSksYz17fSx1PTA7dTxlLmxlbmd0aDt1KyspZm9yKHZhciBoPXJbVC5pZDJuYW1lKGVbdV0pXVthXSxmPTA7ZjxoLmxlbmd0aDtmKyspe3ZhciBwPWhbZl07aWYoIWNbcF0mJihsKHQscCksY1twXT0xLHMpKXJldHVybn19bihcImFubm90YXRpb25zXCIsXCJkcmF3T25lXCIsXCJfYW5uSW5kaWNlc1wiKSxuKFwic2hhcGVzXCIsXCJkcmF3T25lXCIsXCJfc2hhcGVJbmRpY2VzXCIpLG4oXCJpbWFnZXNcIixcImRyYXdcIixcIl9pbWdJbmRpY2VzXCIsITApfTt2YXIgQz1ULmdldERhdGFDb252ZXJzaW9ucz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPVwieFwiPT09cnx8XCJ5XCI9PT1yfHxcInpcIj09PXI/cjpuO2lmKEFycmF5LmlzQXJyYXkoYSkpe2lmKGk9e3R5cGU6TShuKSxfY2F0ZWdvcmllczpbXX0sVC5zZXRDb252ZXJ0KGkpLFwiY2F0ZWdvcnlcIj09PWkudHlwZSlmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKylpLmQyYyhuW29dKX1lbHNlIGk9VC5nZXRGcm9tVHJhY2UodCxlLGEpO3JldHVybiBpP3tkMmM6aS5kMmMsYzJkOmkuYzJkfTpcImlkc1wiPT09YT97ZDJjOnosYzJkOnp9OntkMmM6TCxjMmQ6TH19O2Z1bmN0aW9uIEwodCl7cmV0dXJuK3R9ZnVuY3Rpb24geih0KXtyZXR1cm4gU3RyaW5nKHQpfVQuZ2V0RGF0YVRvQ29vcmRGdW5jPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBDKHQsZSxyLG4pLmQyY30sVC5jb3VudGVyTGV0dGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckF0KDApO3JldHVyblwieFwiPT09ZT9cInlcIjpcInlcIj09PWU/XCJ4XCI6dm9pZCAwfSxULm1pbkR0aWNrPWZ1bmN0aW9uKHQsZSxyLG4pey0xPT09W1wibG9nXCIsXCJjYXRlZ29yeVwiLFwibXVsdGljYXRlZ29yeVwiXS5pbmRleE9mKHQudHlwZSkmJm4/dm9pZCAwPT09dC5fbWluRHRpY2s/KHQuX21pbkR0aWNrPWUsdC5fZm9yY2VUaWNrMD1yKTp0Ll9taW5EdGljayYmKCh0Ll9taW5EdGljay9lKzFlLTYpJTE8MmUtNiYmKChyLXQuX2ZvcmNlVGljazApL2UlMSsxLjAwMDAwMSklMTwyZS02Pyh0Ll9taW5EdGljaz1lLHQuX2ZvcmNlVGljazA9cik6KChlL3QuX21pbkR0aWNrKzFlLTYpJTE+MmUtNnx8KChyLXQuX2ZvcmNlVGljazApL3QuX21pbkR0aWNrJTErMS4wMDAwMDEpJTE+MmUtNikmJih0Ll9taW5EdGljaz0wKSk6dC5fbWluRHRpY2s9MH0sVC5zYXZlUmFuZ2VJbml0aWFsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVQubGlzdCh0LFwiXCIsITApLG49ITEsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldLG89dm9pZCAwPT09YS5fcmFuZ2VJbml0aWFsLHM9b3x8IShhLnJhbmdlWzBdPT09YS5fcmFuZ2VJbml0aWFsWzBdJiZhLnJhbmdlWzFdPT09YS5fcmFuZ2VJbml0aWFsWzFdKTsobyYmITE9PT1hLmF1dG9yYW5nZXx8ZSYmcykmJihhLl9yYW5nZUluaXRpYWw9YS5yYW5nZS5zbGljZSgpLG49ITApfXJldHVybiBufSxULnNhdmVTaG93U3Bpa2VJbml0aWFsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVQubGlzdCh0LFwiXCIsITApLG49ITEsaT1cIm9uXCIsYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgbz1yW2FdLHM9dm9pZCAwPT09by5fc2hvd1NwaWtlSW5pdGlhbCxsPXN8fCEoby5zaG93c3Bpa2VzPT09by5fc2hvd3NwaWtlcyk7KHN8fGUmJmwpJiYoby5fc2hvd1NwaWtlSW5pdGlhbD1vLnNob3dzcGlrZXMsbj0hMCksXCJvblwiIT09aXx8by5zaG93c3Bpa2VzfHwoaT1cIm9mZlwiKX1yZXR1cm4gdC5fZnVsbExheW91dC5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD1pLG59LFQuYXV0b0Jpbj1mdW5jdGlvbih0LGUscixuLGEsbyl7dmFyIGwsYz1zLmFnZ051bXMoTWF0aC5taW4sbnVsbCx0KSx1PXMuYWdnTnVtcyhNYXRoLm1heCxudWxsLHQpO2lmKFwiY2F0ZWdvcnlcIj09PWUudHlwZXx8XCJtdWx0aWNhdGVnb3J5XCI9PT1lLnR5cGUpcmV0dXJue3N0YXJ0OmMtLjUsZW5kOnUrLjUsc2l6ZTpNYXRoLm1heCgxLE1hdGgucm91bmQobyl8fDEpLF9kYXRhU3Bhbjp1LWN9O2lmKGF8fChhPWUuY2FsZW5kYXIpLGw9XCJsb2dcIj09PWUudHlwZT97dHlwZTpcImxpbmVhclwiLHJhbmdlOltjLHVdfTp7dHlwZTplLnR5cGUscmFuZ2U6cy5zaW1wbGVNYXAoW2MsdV0sZS5jMnIsMCxhKSxjYWxlbmRhcjphfSxULnNldENvbnZlcnQobCksbz1vJiZwLmR0aWNrKG8sbC50eXBlKSlsLmR0aWNrPW8sbC50aWNrMD1wLnRpY2swKHZvaWQgMCxsLnR5cGUsYSk7ZWxzZXt2YXIgaDtpZihyKWg9KHUtYykvcjtlbHNle3ZhciBmPXMuZGlzdGluY3RWYWxzKHQpLGQ9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhmLm1pbkRpZmYpL01hdGguTE4xMCkpLGc9ZCpzLnJvdW5kVXAoZi5taW5EaWZmL2QsWy45LDEuOSw0LjksOS45XSwhMCk7aD1NYXRoLm1heChnLDIqcy5zdGRldih0KS9NYXRoLnBvdyh0Lmxlbmd0aCxuPy4yNTouNCkpLGkoaCl8fChoPTEpfVQuYXV0b1RpY2tzKGwsaCl9dmFyIHYseT1sLmR0aWNrLHg9VC50aWNrSW5jcmVtZW50KFQudGlja0ZpcnN0KGwpLHksXCJyZXZlcnNlXCIsYSk7aWYoXCJudW1iZXJcIj09dHlwZW9mIHkpdj0oeD1mdW5jdGlvbih0LGUscixuLGEpe3ZhciBvPTAscz0wLGw9MCxjPTA7ZnVuY3Rpb24gdShlKXtyZXR1cm4oMSsxMDAqKGUtdCkvci5kdGljayklMTAwPDJ9Zm9yKHZhciBoPTA7aDxlLmxlbmd0aDtoKyspZVtoXSUxPT0wP2wrKzppKGVbaF0pfHxjKyssdShlW2hdKSYmbysrLHUoZVtoXStyLmR0aWNrLzIpJiZzKys7dmFyIGY9ZS5sZW5ndGgtYztpZihsPT09ZiYmXCJkYXRlXCIhPT1yLnR5cGUpci5kdGljazwxP3Q9bi0uNSpyLmR0aWNrOih0LT0uNSkrci5kdGljazxuJiYodCs9ci5kdGljayk7ZWxzZSBpZihzPC4xKmYmJihvPi4zKmZ8fHUobil8fHUoYSkpKXt2YXIgcD1yLmR0aWNrLzI7dCs9dCtwPG4/cDotcH1yZXR1cm4gdH0oeCx0LGwsYyx1KSkrKDErTWF0aC5mbG9vcigodS14KS95KSkqeTtlbHNlIGZvcihcIk1cIj09PWwuZHRpY2suY2hhckF0KDApJiYoeD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXMuZmluZEV4YWN0RGF0ZXMoZSxpKTtpZihhLmV4YWN0RGF5cz4uOCl7dmFyIG89TnVtYmVyKHIuc3Vic3RyKDEpKTthLmV4YWN0WWVhcnM+LjgmJm8lMTI9PTA/dD1ULnRpY2tJbmNyZW1lbnQodCxcIk02XCIsXCJyZXZlcnNlXCIpKzEuNSptOmEuZXhhY3RNb250aHM+Ljg/dD1ULnRpY2tJbmNyZW1lbnQodCxcIk0xXCIsXCJyZXZlcnNlXCIpKzE1LjUqbTp0LT1tLzI7dmFyIGw9VC50aWNrSW5jcmVtZW50KHQscik7aWYobDw9bilyZXR1cm4gbH1yZXR1cm4gdH0oeCx0LHksYyxhKSksdj14LDA7djw9dTspdj1ULnRpY2tJbmNyZW1lbnQodix5LCExLGEpLDA7cmV0dXJue3N0YXJ0OmUuYzJyKHgsMCxhKSxlbmQ6ZS5jMnIodiwwLGEpLHNpemU6eSxfZGF0YVNwYW46dS1jfX0sVC5wcmVwVGlja3M9ZnVuY3Rpb24odCl7dmFyIGU9cy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCk7aWYoXCJhdXRvXCI9PT10LnRpY2ttb2RlfHwhdC5kdGljayl7dmFyIHIsbj10Lm50aWNrcztufHwoXCJjYXRlZ29yeVwiPT09dC50eXBlfHxcIm11bHRpY2F0ZWdvcnlcIj09PXQudHlwZT8ocj10LnRpY2tmb250PzEuMioodC50aWNrZm9udC5zaXplfHwxMik6MTUsbj10Ll9sZW5ndGgvcik6KHI9XCJ5XCI9PT10Ll9pZC5jaGFyQXQoMCk/NDA6ODAsbj1zLmNvbnN0cmFpbih0Ll9sZW5ndGgvciw0LDkpKzEpLFwicmFkaWFsYXhpc1wiPT09dC5fbmFtZSYmKG4qPTIpKSxcImFycmF5XCI9PT10LnRpY2ttb2RlJiYobio9MTAwKSxULmF1dG9UaWNrcyh0LE1hdGguYWJzKGVbMV0tZVswXSkvbiksdC5fbWluRHRpY2s+MCYmdC5kdGljazwyKnQuX21pbkR0aWNrJiYodC5kdGljaz10Ll9taW5EdGljayx0LnRpY2swPXQubDJyKHQuX2ZvcmNlVGljazApKX10LnRpY2swfHwodC50aWNrMD1cImRhdGVcIj09PXQudHlwZT9cIjIwMDAtMDEtMDFcIjowKSxcImRhdGVcIj09PXQudHlwZSYmdC5kdGljazwuMSYmKHQuZHRpY2s9LjEpLGoodCl9LFQuY2FsY1RpY2tzPWZ1bmN0aW9uKHQpe1QucHJlcFRpY2tzKHQpO3ZhciBlPXMuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpO2lmKFwiYXJyYXlcIj09PXQudGlja21vZGUpcmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQudGlja3ZhbHMscj10LnRpY2t0ZXh0LG49bmV3IEFycmF5KGUubGVuZ3RoKSxpPXMuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpLGE9MS4wMDAxKmlbMF0tMWUtNCppWzFdLG89MS4wMDAxKmlbMV0tMWUtNCppWzBdLGw9TWF0aC5taW4oYSxvKSxjPU1hdGgubWF4KGEsbyksdT0wO0FycmF5LmlzQXJyYXkocil8fChyPVtdKTt2YXIgaD1cImNhdGVnb3J5XCI9PT10LnR5cGU/dC5kMmxfbm9hZGQ6dC5kMmw7XCJsb2dcIj09PXQudHlwZSYmXCJMXCIhPT1TdHJpbmcodC5kdGljaykuY2hhckF0KDApJiYodC5kdGljaz1cIkxcIitNYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubWluKHQucmFuZ2VbMF0sdC5yYW5nZVsxXSkpLTEpKTtmb3IodmFyIGY9MDtmPGUubGVuZ3RoO2YrKyl7dmFyIHA9aChlW2ZdKTtwPmwmJnA8YyYmKHZvaWQgMD09PXJbZl0/blt1XT1ULnRpY2tUZXh0KHQscCk6blt1XT1WKHQscCxTdHJpbmcocltmXSkpLHUrKyl9dTxlLmxlbmd0aCYmbi5zcGxpY2UodSxlLmxlbmd0aC11KTtyZXR1cm4gbn0odCk7dC5fdG1pbj1ULnRpY2tGaXJzdCh0KTt2YXIgcj0xLjAwMDEqZVswXS0xZS00KmVbMV0sbj0xLjAwMDEqZVsxXS0xZS00KmVbMF0saT1lWzFdPGVbMF07aWYodC5fdG1pbjxyIT09aSlyZXR1cm5bXTt2YXIgYT1bXTtcImNhdGVnb3J5XCIhPT10LnR5cGUmJlwibXVsdGljYXRlZ29yeVwiIT09dC50eXBlfHwobj1pP01hdGgubWF4KC0uNSxuKTpNYXRoLm1pbih0Ll9jYXRlZ29yaWVzLmxlbmd0aC0uNSxuKSk7Zm9yKHZhciBvPW51bGwsbD1NYXRoLm1heCgxZTMsdC5fbGVuZ3RofHwwKSxjPXQuX3RtaW47KGk/Yz49bjpjPD1uKSYmIShhLmxlbmd0aD5sfHxjPT09byk7Yz1ULnRpY2tJbmNyZW1lbnQoYyx0LmR0aWNrLGksdC5jYWxlbmRhcikpbz1jLGEucHVzaChjKTtydCh0KSYmMzYwPT09TWF0aC5hYnMoZVsxXS1lWzBdKSYmYS5wb3AoKSx0Ll90bWF4PWFbYS5sZW5ndGgtMV0sdC5fcHJldkRhdGVIZWFkPVwiXCIsdC5faW5DYWxjVGlja3M9ITA7Zm9yKHZhciB1PW5ldyBBcnJheShhLmxlbmd0aCksaD0wO2g8YS5sZW5ndGg7aCsrKXVbaF09VC50aWNrVGV4dCh0LGFbaF0pO3JldHVybiB0Ll9pbkNhbGNUaWNrcz0hMSx1fTt2YXIgTz1bMiw1LDEwXSxJPVsxLDIsMyw2LDEyXSxEPVsxLDIsNSwxMCwxNSwzMF0sUD1bMSwyLDMsNywxNF0sUj1bLS4wNDYsMCwuMzAxLC40NzcsLjYwMiwuNjk5LC43NzgsLjg0NSwuOTAzLC45NTQsMV0sRj1bLS4zMDEsMCwuMzAxLC42OTksMV0sQj1bMTUsMzAsNDUsOTAsMTgwXTtmdW5jdGlvbiBOKHQsZSxyKXtyZXR1cm4gZSpzLnJvdW5kVXAodC9lLHIpfWZ1bmN0aW9uIGoodCl7dmFyIGU9dC5kdGljaztpZih0Ll90aWNrZXhwb25lbnQ9MCxpKGUpfHxcInN0cmluZ1wiPT10eXBlb2YgZXx8KGU9MSksXCJjYXRlZ29yeVwiIT09dC50eXBlJiZcIm11bHRpY2F0ZWdvcnlcIiE9PXQudHlwZXx8KHQuX3RpY2tyb3VuZD1udWxsKSxcImRhdGVcIj09PXQudHlwZSl7dmFyIHI9dC5yMmwodC50aWNrMCksbj10LmwycihyKS5yZXBsYWNlKC8oXi18aSkvZyxcIlwiKSxhPW4ubGVuZ3RoO2lmKFwiTVwiPT09U3RyaW5nKGUpLmNoYXJBdCgwKSlhPjEwfHxcIjAxLTAxXCIhPT1uLnN1YnN0cig1KT90Ll90aWNrcm91bmQ9XCJkXCI6dC5fdGlja3JvdW5kPStlLnN1YnN0cigxKSUxMj09MD9cInlcIjpcIm1cIjtlbHNlIGlmKGU+PW0mJmE8PTEwfHxlPj0xNSptKXQuX3RpY2tyb3VuZD1cImRcIjtlbHNlIGlmKGU+PXgmJmE8PTE2fHxlPj15KXQuX3RpY2tyb3VuZD1cIk1cIjtlbHNlIGlmKGU+PWImJmE8PTE5fHxlPj14KXQuX3RpY2tyb3VuZD1cIlNcIjtlbHNle3ZhciBvPXQubDJyKHIrZSkucmVwbGFjZSgvXi0vLFwiXCIpLmxlbmd0aDt0Ll90aWNrcm91bmQ9TWF0aC5tYXgoYSxvKS0yMCx0Ll90aWNrcm91bmQ8MCYmKHQuX3RpY2tyb3VuZD00KX19ZWxzZSBpZihpKGUpfHxcIkxcIj09PWUuY2hhckF0KDApKXt2YXIgcz10LnJhbmdlLm1hcCh0LnIyZHx8TnVtYmVyKTtpKGUpfHwoZT1OdW1iZXIoZS5zdWJzdHIoMSkpKSx0Ll90aWNrcm91bmQ9Mi1NYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4xMCsuMDEpO3ZhciBsPU1hdGgubWF4KE1hdGguYWJzKHNbMF0pLE1hdGguYWJzKHNbMV0pKSxjPU1hdGguZmxvb3IoTWF0aC5sb2cobCkvTWF0aC5MTjEwKy4wMSk7TWF0aC5hYnMoYyk+MyYmKHEodC5leHBvbmVudGZvcm1hdCkmJiFIKGMpP3QuX3RpY2tleHBvbmVudD0zKk1hdGgucm91bmQoKGMtMSkvMyk6dC5fdGlja2V4cG9uZW50PWMpfWVsc2UgdC5fdGlja3JvdW5kPW51bGx9ZnVuY3Rpb24gVih0LGUscil7dmFyIG49dC50aWNrZm9udHx8e307cmV0dXJue3g6ZSxkeDowLGR5OjAsdGV4dDpyfHxcIlwiLGZvbnRTaXplOm4uc2l6ZSxmb250Om4uZmFtaWx5LGZvbnRDb2xvcjpuLmNvbG9yfX1ULmF1dG9UaWNrcz1mdW5jdGlvbih0LGUpe3ZhciByO2Z1bmN0aW9uIG4odCl7cmV0dXJuIE1hdGgucG93KHQsTWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMTApKX1pZihcImRhdGVcIj09PXQudHlwZSl7dC50aWNrMD1zLmRhdGVUaWNrMCh0LmNhbGVuZGFyKTt2YXIgYT0yKmU7YT5nPyhlLz1nLHI9bigxMCksdC5kdGljaz1cIk1cIisxMipOKGUscixPKSk6YT52PyhlLz12LHQuZHRpY2s9XCJNXCIrTihlLDEsSSkpOmE+bT8odC5kdGljaz1OKGUsbSxQKSx0LnRpY2swPXMuZGF0ZVRpY2swKHQuY2FsZW5kYXIsITApKTphPnk/dC5kdGljaz1OKGUseSxJKTphPng/dC5kdGljaz1OKGUseCxEKTphPmI/dC5kdGljaz1OKGUsYixEKToocj1uKDEwKSx0LmR0aWNrPU4oZSxyLE8pKX1lbHNlIGlmKFwibG9nXCI9PT10LnR5cGUpe3QudGljazA9MDt2YXIgbz1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKTtpZihlPi43KXQuZHRpY2s9TWF0aC5jZWlsKGUpO2Vsc2UgaWYoTWF0aC5hYnMob1sxXS1vWzBdKTwxKXt2YXIgbD0xLjUqTWF0aC5hYnMoKG9bMV0tb1swXSkvZSk7ZT1NYXRoLmFicyhNYXRoLnBvdygxMCxvWzFdKS1NYXRoLnBvdygxMCxvWzBdKSkvbCxyPW4oMTApLHQuZHRpY2s9XCJMXCIrTihlLHIsTyl9ZWxzZSB0LmR0aWNrPWU+LjM/XCJEMlwiOlwiRDFcIn1lbHNlXCJjYXRlZ29yeVwiPT09dC50eXBlfHxcIm11bHRpY2F0ZWdvcnlcIj09PXQudHlwZT8odC50aWNrMD0wLHQuZHRpY2s9TWF0aC5jZWlsKE1hdGgubWF4KGUsMSkpKTpydCh0KT8odC50aWNrMD0wLHI9MSx0LmR0aWNrPU4oZSxyLEIpKToodC50aWNrMD0wLHI9bigxMCksdC5kdGljaz1OKGUscixPKSk7aWYoMD09PXQuZHRpY2smJih0LmR0aWNrPTEpLCFpKHQuZHRpY2spJiZcInN0cmluZ1wiIT10eXBlb2YgdC5kdGljayl7dmFyIGM9dC5kdGljazt0aHJvdyB0LmR0aWNrPTEsXCJheC5kdGljayBlcnJvcjogXCIrU3RyaW5nKGMpfX0sVC50aWNrSW5jcmVtZW50PWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPXI/LTE6MTtpZihpKGUpKXJldHVybiB0K28qZTt2YXIgbD1lLmNoYXJBdCgwKSxjPW8qTnVtYmVyKGUuc3Vic3RyKDEpKTtpZihcIk1cIj09PWwpcmV0dXJuIHMuaW5jcmVtZW50TW9udGgodCxjLGEpO2lmKFwiTFwiPT09bClyZXR1cm4gTWF0aC5sb2coTWF0aC5wb3coMTAsdCkrYykvTWF0aC5MTjEwO2lmKFwiRFwiPT09bCl7dmFyIHU9XCJEMlwiPT09ZT9GOlIsaD10Ky4wMSpvLGY9cy5yb3VuZFVwKHMubW9kKGgsMSksdSxyKTtyZXR1cm4gTWF0aC5mbG9vcihoKStNYXRoLmxvZyhuLnJvdW5kKE1hdGgucG93KDEwLGYpLDEpKS9NYXRoLkxOMTB9dGhyb3dcInVucmVjb2duaXplZCBkdGljayBcIitTdHJpbmcoZSl9LFQudGlja0ZpcnN0PWZ1bmN0aW9uKHQpe3ZhciBlPXQucjJsfHxOdW1iZXIscj1zLnNpbXBsZU1hcCh0LnJhbmdlLGUpLGE9clsxXTxyWzBdLG89YT9NYXRoLmZsb29yOk1hdGguY2VpbCxsPTEuMDAwMSpyWzBdLTFlLTQqclsxXSxjPXQuZHRpY2ssdT1lKHQudGljazApO2lmKGkoYykpe3ZhciBoPW8oKGwtdSkvYykqYyt1O3JldHVyblwiY2F0ZWdvcnlcIiE9PXQudHlwZSYmXCJtdWx0aWNhdGVnb3J5XCIhPT10LnR5cGV8fChoPXMuY29uc3RyYWluKGgsMCx0Ll9jYXRlZ29yaWVzLmxlbmd0aC0xKSksaH12YXIgZj1jLmNoYXJBdCgwKSxwPU51bWJlcihjLnN1YnN0cigxKSk7aWYoXCJNXCI9PT1mKXtmb3IodmFyIGQsZyx2LG09MCx5PXU7bTwxMDspe2lmKCgoZD1ULnRpY2tJbmNyZW1lbnQoeSxjLGEsdC5jYWxlbmRhcikpLWwpKih5LWwpPD0wKXJldHVybiBhP01hdGgubWluKHksZCk6TWF0aC5tYXgoeSxkKTtnPShsLSh5K2QpLzIpLyhkLXkpLHY9ZisoTWF0aC5hYnMoTWF0aC5yb3VuZChnKSl8fDEpKnAseT1ULnRpY2tJbmNyZW1lbnQoeSx2LGc8MD8hYTphLHQuY2FsZW5kYXIpLG0rK31yZXR1cm4gcy5lcnJvcihcInRpY2tGaXJzdCBkaWQgbm90IGNvbnZlcmdlXCIsdCkseX1pZihcIkxcIj09PWYpcmV0dXJuIE1hdGgubG9nKG8oKE1hdGgucG93KDEwLGwpLXUpL3ApKnArdSkvTWF0aC5MTjEwO2lmKFwiRFwiPT09Zil7dmFyIHg9XCJEMlwiPT09Yz9GOlIsYj1zLnJvdW5kVXAocy5tb2QobCwxKSx4LGEpO3JldHVybiBNYXRoLmZsb29yKGwpK01hdGgubG9nKG4ucm91bmQoTWF0aC5wb3coMTAsYiksMSkpL01hdGguTE4xMH10aHJvd1widW5yZWNvZ25pemVkIGR0aWNrIFwiK1N0cmluZyhjKX0sVC50aWNrVGV4dD1mdW5jdGlvbih0LGUscil7dmFyIG4sYT1WKHQsZSksbz1cImFycmF5XCI9PT10LnRpY2ttb2RlLGw9cnx8byxjPXQudHlwZSx1PVwiY2F0ZWdvcnlcIj09PWM/dC5kMmxfbm9hZGQ6dC5kMmw7aWYobyYmQXJyYXkuaXNBcnJheSh0LnRpY2t0ZXh0KSl7dmFyIGg9cy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCksZj1NYXRoLmFicyhoWzFdLWhbMF0pLzFlNDtmb3Iobj0wO248dC50aWNrdGV4dC5sZW5ndGgmJiEoTWF0aC5hYnMoZS11KHQudGlja3ZhbHNbbl0pKTxmKTtuKyspO2lmKG48dC50aWNrdGV4dC5sZW5ndGgpcmV0dXJuIGEudGV4dD1TdHJpbmcodC50aWNrdGV4dFtuXSksYX1mdW5jdGlvbiBwKG4pe2lmKHZvaWQgMD09PW4pcmV0dXJuITA7aWYocilyZXR1cm5cIm5vbmVcIj09PW47dmFyIGk9e2ZpcnN0OnQuX3RtaW4sbGFzdDp0Ll90bWF4fVtuXTtyZXR1cm5cImFsbFwiIT09biYmZSE9PWl9dmFyIGQ9cj9cIm5ldmVyXCI6XCJub25lXCIhPT10LmV4cG9uZW50Zm9ybWF0JiZwKHQuc2hvd2V4cG9uZW50KT9cImhpZGVcIjpcIlwiO2lmKFwiZGF0ZVwiPT09Yz9mdW5jdGlvbih0LGUscixuKXt2YXIgYT10Ll90aWNrcm91bmQsbz1yJiZ0LmhvdmVyZm9ybWF0fHxULmdldFRpY2tGb3JtYXQodCk7biYmKGE9aShhKT80Ont5OlwibVwiLG06XCJkXCIsZDpcIk1cIixNOlwiU1wiLFM6NH1bYV0pO3ZhciBsLGM9cy5mb3JtYXREYXRlKGUueCxvLGEsdC5fZGF0ZUZvcm1hdCx0LmNhbGVuZGFyLHQuX2V4dHJhRm9ybWF0KSx1PWMuaW5kZXhPZihcIlxcblwiKTstMSE9PXUmJihsPWMuc3Vic3RyKHUrMSksYz1jLnN1YnN0cigwLHUpKTtuJiYoXCIwMDowMDowMFwiPT09Y3x8XCIwMDowMFwiPT09Yz8oYz1sLGw9XCJcIik6OD09PWMubGVuZ3RoJiYoYz1jLnJlcGxhY2UoLzowMCQvLFwiXCIpKSk7bCYmKHI/XCJkXCI9PT1hP2MrPVwiLCBcIitsOmM9bCsoYz9cIiwgXCIrYzpcIlwiKTp0Ll9pbkNhbGNUaWNrcyYmbD09PXQuX3ByZXZEYXRlSGVhZHx8KGMrPVwiPGJyPlwiK2wsdC5fcHJldkRhdGVIZWFkPWwpKTtlLnRleHQ9Y30odCxhLHIsbCk6XCJsb2dcIj09PWM/ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbz10LmR0aWNrLGw9ZS54LGM9dC50aWNrZm9ybWF0LHU9XCJzdHJpbmdcIj09dHlwZW9mIG8mJm8uY2hhckF0KDApO1wibmV2ZXJcIj09PWEmJihhPVwiXCIpO24mJlwiTFwiIT09dSYmKG89XCJMM1wiLHU9XCJMXCIpO2lmKGN8fFwiTFwiPT09dSllLnRleHQ9RyhNYXRoLnBvdygxMCxsKSx0LGEsbik7ZWxzZSBpZihpKG8pfHxcIkRcIj09PXUmJnMubW9kKGwrLjAxLDEpPC4xKXt2YXIgaD1NYXRoLnJvdW5kKGwpLGY9TWF0aC5hYnMoaCkscD10LmV4cG9uZW50Zm9ybWF0O1wicG93ZXJcIj09PXB8fHEocCkmJkgoaCk/KGUudGV4dD0wPT09aD8xOjE9PT1oP1wiMTBcIjpcIjEwPHN1cD5cIisoaD4xP1wiXCI6XykrZitcIjwvc3VwPlwiLGUuZm9udFNpemUqPTEuMjUpOihcImVcIj09PXB8fFwiRVwiPT09cCkmJmY+Mj9lLnRleHQ9XCIxXCIrcCsoaD4wP1wiK1wiOl8pK2Y6KGUudGV4dD1HKE1hdGgucG93KDEwLGwpLHQsXCJcIixcImZha2Vob3ZlclwiKSxcIkQxXCI9PT1vJiZcInlcIj09PXQuX2lkLmNoYXJBdCgwKSYmKGUuZHktPWUuZm9udFNpemUvNikpfWVsc2V7aWYoXCJEXCIhPT11KXRocm93XCJ1bnJlY29nbml6ZWQgZHRpY2sgXCIrU3RyaW5nKG8pO2UudGV4dD1TdHJpbmcoTWF0aC5yb3VuZChNYXRoLnBvdygxMCxzLm1vZChsLDEpKSkpLGUuZm9udFNpemUqPS43NX1pZihcIkQxXCI9PT10LmR0aWNrKXt2YXIgZD1TdHJpbmcoZS50ZXh0KS5jaGFyQXQoMCk7XCIwXCIhPT1kJiZcIjFcIiE9PWR8fChcInlcIj09PXQuX2lkLmNoYXJBdCgwKT9lLmR4LT1lLmZvbnRTaXplLzQ6KGUuZHkrPWUuZm9udFNpemUvMixlLmR4Kz0odC5yYW5nZVsxXT50LnJhbmdlWzBdPzE6LTEpKmUuZm9udFNpemUqKGw8MD8uNTouMjUpKSl9fSh0LGEsMCxsLGQpOlwiY2F0ZWdvcnlcIj09PWM/ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9jYXRlZ29yaWVzW01hdGgucm91bmQoZS54KV07dm9pZCAwPT09ciYmKHI9XCJcIik7ZS50ZXh0PVN0cmluZyhyKX0odCxhKTpcIm11bHRpY2F0ZWdvcnlcIj09PWM/ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGgucm91bmQoZS54KSxpPXQuX2NhdGVnb3JpZXNbbl18fFtdLGE9dm9pZCAwPT09aVsxXT9cIlwiOlN0cmluZyhpWzFdKSxvPXZvaWQgMD09PWlbMF0/XCJcIjpTdHJpbmcoaVswXSk7cj9lLnRleHQ9bytcIiAtIFwiK2E6KGUudGV4dD1hLGUudGV4dDI9byl9KHQsYSxyKTpydCh0KT9mdW5jdGlvbih0LGUscixuLGkpe2lmKFwicmFkaWFuc1wiIT09dC50aGV0YXVuaXR8fHIpZS50ZXh0PUcoZS54LHQsaSxuKTtlbHNle3ZhciBhPWUueC8xODA7aWYoMD09PWEpZS50ZXh0PVwiMFwiO2Vsc2V7dmFyIG89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiBNYXRoLmFicyh0LWUpPD0xZS02fXZhciByPWZ1bmN0aW9uKHQpe3ZhciByPTE7Zm9yKDshZShNYXRoLnJvdW5kKHQqcikvcix0KTspcio9MTA7cmV0dXJuIHJ9KHQpLG49dCpyLGk9TWF0aC5hYnMoZnVuY3Rpb24gdChyLG4pe3JldHVybiBlKG4sMCk/cjp0KG4sciVuKX0obixyKSk7cmV0dXJuW01hdGgucm91bmQobi9pKSxNYXRoLnJvdW5kKHIvaSldfShhKTtpZihvWzFdPj0xMDApZS50ZXh0PUcocy5kZWcycmFkKGUueCksdCxpLG4pO2Vsc2V7dmFyIGw9ZS54PDA7MT09PW9bMV0/MT09PW9bMF0/ZS50ZXh0PVwiXFx1MDNjMFwiOmUudGV4dD1vWzBdK1wiXFx1MDNjMFwiOmUudGV4dD1bXCI8c3VwPlwiLG9bMF0sXCI8L3N1cD5cIixcIlxcdTIwNDRcIixcIjxzdWI+XCIsb1sxXSxcIjwvc3ViPlwiLFwiXFx1MDNjMFwiXS5qb2luKFwiXCIpLGwmJihlLnRleHQ9XytlLnRleHQpfX19fSh0LGEscixsLGQpOmZ1bmN0aW9uKHQsZSxyLG4saSl7XCJuZXZlclwiPT09aT9pPVwiXCI6XCJhbGxcIj09PXQuc2hvd2V4cG9uZW50JiZNYXRoLmFicyhlLngvdC5kdGljayk8MWUtNiYmKGk9XCJoaWRlXCIpO2UudGV4dD1HKGUueCx0LGksbil9KHQsYSwwLGwsZCksdC50aWNrcHJlZml4JiYhcCh0LnNob3d0aWNrcHJlZml4KSYmKGEudGV4dD10LnRpY2twcmVmaXgrYS50ZXh0KSx0LnRpY2tzdWZmaXgmJiFwKHQuc2hvd3RpY2tzdWZmaXgpJiYoYS50ZXh0Kz10LnRpY2tzdWZmaXgpLFwiYm91bmRhcmllc1wiPT09dC50aWNrc29ufHx0LnNob3dkaXZpZGVycyl7dmFyIGc9ZnVuY3Rpb24oZSl7dmFyIHI9dC5sMnAoZSk7cmV0dXJuIHI+PTAmJnI8PXQuX2xlbmd0aD9lOm51bGx9O2EueGJuZD1bZyhhLngtLjUpLGcoYS54K3QuZHRpY2stLjUpXX1yZXR1cm4gYX0sVC5ob3ZlckxhYmVsVGV4dD1mdW5jdGlvbih0LGUscil7aWYociE9PXcmJnIhPT1lKXJldHVybiBULmhvdmVyTGFiZWxUZXh0KHQsZSkrXCIgLSBcIitULmhvdmVyTGFiZWxUZXh0KHQscik7dmFyIG49XCJsb2dcIj09PXQudHlwZSYmZTw9MCxpPVQudGlja1RleHQodCx0LmMybChuPy1lOmUpLFwiaG92ZXJcIikudGV4dDtyZXR1cm4gbj8wPT09ZT9cIjBcIjpfK2k6aX07dmFyIFU9W1wiZlwiLFwicFwiLFwiblwiLFwiXFx1MDNiY1wiLFwibVwiLFwiXCIsXCJrXCIsXCJNXCIsXCJHXCIsXCJUXCJdO2Z1bmN0aW9uIHEodCl7cmV0dXJuXCJTSVwiPT09dHx8XCJCXCI9PT10fWZ1bmN0aW9uIEgodCl7cmV0dXJuIHQ+MTR8fHQ8LTE1fWZ1bmN0aW9uIEcodCxlLHIsbil7dmFyIGE9dDwwLG89ZS5fdGlja3JvdW5kLGw9cnx8ZS5leHBvbmVudGZvcm1hdHx8XCJCXCIsYz1lLl90aWNrZXhwb25lbnQsdT1ULmdldFRpY2tGb3JtYXQoZSksaD1lLnNlcGFyYXRldGhvdXNhbmRzO2lmKG4pe3ZhciBmPXtleHBvbmVudGZvcm1hdDpsLGR0aWNrOlwibm9uZVwiPT09ZS5zaG93ZXhwb25lbnQ/ZS5kdGljazppKHQpJiZNYXRoLmFicyh0KXx8MSxyYW5nZTpcIm5vbmVcIj09PWUuc2hvd2V4cG9uZW50P2UucmFuZ2UubWFwKGUucjJkKTpbMCx0fHwxXX07aihmKSxvPShOdW1iZXIoZi5fdGlja3JvdW5kKXx8MCkrNCxjPWYuX3RpY2tleHBvbmVudCxlLmhvdmVyZm9ybWF0JiYodT1lLmhvdmVyZm9ybWF0KX1pZih1KXJldHVybiBlLl9udW1Gb3JtYXQodSkodCkucmVwbGFjZSgvLS9nLF8pO3ZhciBwLGQ9TWF0aC5wb3coMTAsLW8pLzI7aWYoXCJub25lXCI9PT1sJiYoYz0wKSwodD1NYXRoLmFicyh0KSk8ZCl0PVwiMFwiLGE9ITE7ZWxzZXtpZih0Kz1kLGMmJih0Kj1NYXRoLnBvdygxMCwtYyksbys9YyksMD09PW8pdD1TdHJpbmcoTWF0aC5mbG9vcih0KSk7ZWxzZSBpZihvPDApe3Q9KHQ9U3RyaW5nKE1hdGgucm91bmQodCkpKS5zdWJzdHIoMCx0Lmxlbmd0aCtvKTtmb3IodmFyIGc9bztnPDA7ZysrKXQrPVwiMFwifWVsc2V7dmFyIHY9KHQ9U3RyaW5nKHQpKS5pbmRleE9mKFwiLlwiKSsxO3YmJih0PXQuc3Vic3RyKDAsditvKS5yZXBsYWNlKC9cXC4/MCskLyxcIlwiKSl9dD1zLm51bVNlcGFyYXRlKHQsZS5fc2VwYXJhdG9ycyxoKX1jJiZcImhpZGVcIiE9PWwmJihxKGwpJiZIKGMpJiYobD1cInBvd2VyXCIpLHA9YzwwP18rLWM6XCJwb3dlclwiIT09bD9cIitcIitjOlN0cmluZyhjKSxcImVcIj09PWx8fFwiRVwiPT09bD90Kz1sK3A6XCJwb3dlclwiPT09bD90Kz1cIlxceGQ3MTA8c3VwPlwiK3ArXCI8L3N1cD5cIjpcIkJcIj09PWwmJjk9PT1jP3QrPVwiQlwiOnEobCkmJih0Kz1VW2MvMys1XSkpO3JldHVybiBhP18rdDp0fWZ1bmN0aW9uIFkodCxlKXt2YXIgcj10Ll9pZC5jaGFyQXQoMCksbj10Ll90aWNrQW5nbGVzW2VdfHwwLGk9cy5kZWcycmFkKG4pLGE9TWF0aC5zaW4oaSksbz1NYXRoLmNvcyhpKSxsPTAsYz0wO3JldHVybiB0Ll9zZWxlY3Rpb25zW2VdLmVhY2goZnVuY3Rpb24oKXt2YXIgdD0kKHRoaXMpLGU9aC5iQm94KHQubm9kZSgpKSxyPWUud2lkdGgsbj1lLmhlaWdodDtsPU1hdGgubWF4KGwsbypyLGEqbiksYz1NYXRoLm1heChjLGEqcixvKm4pfSkse3g6Yyx5Omx9W3JdfWZ1bmN0aW9uIFcodCl7cmV0dXJuW3QudGV4dCx0LngsdC5heEluZm8sdC5mb250LHQuZm9udFNpemUsdC5mb250Q29sb3JdLmpvaW4oXCJfXCIpfWZ1bmN0aW9uIFgodCxlKXt2YXIgcixuPXQuX2Z1bGxMYXlvdXQuX3NpemUsaT1lLl9pZC5jaGFyQXQoMCksYT1lLnNpZGU7cmV0dXJuXCJmcmVlXCIhPT1lLmFuY2hvcj9yPVMuZ2V0RnJvbUlkKHQsZS5hbmNob3IpOlwieFwiPT09aT9yPXtfb2Zmc2V0Om4udCsoMS0oZS5wb3NpdGlvbnx8MCkpKm4uaCxfbGVuZ3RoOjB9OlwieVwiPT09aSYmKHI9e19vZmZzZXQ6bi5sKyhlLnBvc2l0aW9ufHwwKSpuLncsX2xlbmd0aDowfSksXCJ0b3BcIj09PWF8fFwibGVmdFwiPT09YT9yLl9vZmZzZXQ6XCJib3R0b21cIj09PWF8fFwicmlnaHRcIj09PWE/ci5fb2Zmc2V0K3IuX2xlbmd0aDp2b2lkIDB9ZnVuY3Rpb24gWih0LGUpe3ZhciByPXQubDJwKGUpO3JldHVybiByPjEmJnI8dC5fbGVuZ3RoLTF9ZnVuY3Rpb24gJCh0KXt2YXIgZT1uLnNlbGVjdCh0KSxyPWUuc2VsZWN0KFwiLnRleHQtbWF0aC1ncm91cFwiKTtyZXR1cm4gci5lbXB0eSgpP2Uuc2VsZWN0KFwidGV4dFwiKTpyfWZ1bmN0aW9uIEoodCl7cmV0dXJuIHQuX2lkK1wiLmF1dG9tYXJnaW5cIn1mdW5jdGlvbiBLKHQpe3JldHVybiB0Ll9pZCtcIi5yYW5nZXNsaWRlclwifWZ1bmN0aW9uIFEodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyktMT09PXQuaW5kZXhPZihlW3JdKSYmdC5wdXNoKGVbcl0pfWZ1bmN0aW9uIHR0KHQsZSxyKXt2YXIgbixpLGE9W10sbz1bXSxsPXQubGF5b3V0O2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspYS5wdXNoKFQuZ2V0RnJvbUlkKHQsZVtuXSkpO2ZvcihuPTA7bjxyLmxlbmd0aDtuKyspby5wdXNoKFQuZ2V0RnJvbUlkKHQscltuXSkpO3ZhciBjPU9iamVjdC5rZXlzKGYpLHU9W1wiYW5jaG9yXCIsXCJkb21haW5cIixcIm92ZXJsYXlpbmdcIixcInBvc2l0aW9uXCIsXCJzaWRlXCIsXCJ0aWNrYW5nbGVcIixcImVkaXRUeXBlXCJdLGg9W1wibGluZWFyXCIsXCJsb2dcIl07Zm9yKG49MDtuPGMubGVuZ3RoO24rKyl7dmFyIHA9Y1tuXSxkPWFbMF1bcF0sZz1vWzBdW3BdLHY9ITAsbT0hMSx5PSExO2lmKFwiX1wiIT09cC5jaGFyQXQoMCkmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGQmJi0xPT09dS5pbmRleE9mKHApKXtmb3IoaT0xO2k8YS5sZW5ndGgmJnY7aSsrKXt2YXIgeD1hW2ldW3BdO1widHlwZVwiPT09cCYmLTEhPT1oLmluZGV4T2YoZCkmJi0xIT09aC5pbmRleE9mKHgpJiZkIT09eD9tPSEwOnghPT1kJiYodj0hMSl9Zm9yKGk9MTtpPG8ubGVuZ3RoJiZ2O2krKyl7dmFyIGI9b1tpXVtwXTtcInR5cGVcIj09PXAmJi0xIT09aC5pbmRleE9mKGcpJiYtMSE9PWguaW5kZXhPZihiKSYmZyE9PWI/eT0hMDpvW2ldW3BdIT09ZyYmKHY9ITEpfXYmJihtJiYobFthWzBdLl9uYW1lXS50eXBlPVwibGluZWFyXCIpLHkmJihsW29bMF0uX25hbWVdLnR5cGU9XCJsaW5lYXJcIiksZXQobCxwLGEsbyx0Ll9mdWxsTGF5b3V0Ll9kZmx0VGl0bGUpKX19Zm9yKG49MDtuPHQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnMubGVuZ3RoO24rKyl7dmFyIF89dC5fZnVsbExheW91dC5hbm5vdGF0aW9uc1tuXTstMSE9PWUuaW5kZXhPZihfLnhyZWYpJiYtMSE9PXIuaW5kZXhPZihfLnlyZWYpJiZzLnN3YXBBdHRycyhsLmFubm90YXRpb25zW25dLFtcIj9cIl0pfX1mdW5jdGlvbiBldCh0LGUscixuLGkpe3ZhciBhLG89cy5uZXN0ZWRQcm9wZXJ0eSxsPW8odFtyWzBdLl9uYW1lXSxlKS5nZXQoKSxjPW8odFtuWzBdLl9uYW1lXSxlKS5nZXQoKTtmb3IoXCJ0aXRsZVwiPT09ZSYmKGwmJmwudGV4dD09PWkueCYmKGwudGV4dD1pLnkpLGMmJmMudGV4dD09PWkueSYmKGMudGV4dD1pLngpKSxhPTA7YTxyLmxlbmd0aDthKyspbyh0LHJbYV0uX25hbWUrXCIuXCIrZSkuc2V0KGMpO2ZvcihhPTA7YTxuLmxlbmd0aDthKyspbyh0LG5bYV0uX25hbWUrXCIuXCIrZSkuc2V0KGwpfWZ1bmN0aW9uIHJ0KHQpe3JldHVyblwiYW5ndWxhcmF4aXNcIj09PXQuX2lkfVQuZ2V0VGlja0Zvcm1hdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scyxsO2Z1bmN0aW9uIGModCl7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIHQ/dDpOdW1iZXIodC5yZXBsYWNlKFwiTVwiLFwiXCIpKSp2fWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1bXCJMXCIsXCJEXCJdO2lmKHR5cGVvZiB0PT10eXBlb2YgZSl7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQpcmV0dXJuIHQtZTt2YXIgbj1yLmluZGV4T2YodC5jaGFyQXQoMCkpLGk9ci5pbmRleE9mKGUuY2hhckF0KDApKTtyZXR1cm4gbj09PWk/TnVtYmVyKHQucmVwbGFjZSgvKEx8RCkvZyxcIlwiKSktTnVtYmVyKGUucmVwbGFjZSgvKEx8RCkvZyxcIlwiKSk6bi1pfXJldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0PzE6LTF9ZnVuY3Rpb24gaCh0LGUpe3ZhciByPW51bGw9PT1lWzBdLG49bnVsbD09PWVbMV0saT11KHQsZVswXSk+PTAsYT11KHQsZVsxXSk8PTA7cmV0dXJuKHJ8fGkpJiYobnx8YSl9aWYodC50aWNrZm9ybWF0c3RvcHMmJnQudGlja2Zvcm1hdHN0b3BzLmxlbmd0aD4wKXN3aXRjaCh0LnR5cGUpe2Nhc2VcImRhdGVcIjpjYXNlXCJsaW5lYXJcIjpmb3IoZT0wO2U8dC50aWNrZm9ybWF0c3RvcHMubGVuZ3RoO2UrKylpZigobj10LnRpY2tmb3JtYXRzdG9wc1tlXSkuZW5hYmxlZCYmKGk9dC5kdGljayxhPW4uZHRpY2tyYW5nZSxvPXZvaWQgMCx2b2lkIDAsdm9pZCAwLG89Y3x8ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHM9YVswXSxsPWFbMV0sKCFzJiZcIm51bWJlclwiIT10eXBlb2Ygc3x8byhzKTw9byhpKSkmJighbCYmXCJudW1iZXJcIiE9dHlwZW9mIGx8fG8obCk+PW8oaSkpKSl7cj1uO2JyZWFrfWJyZWFrO2Nhc2VcImxvZ1wiOmZvcihlPTA7ZTx0LnRpY2tmb3JtYXRzdG9wcy5sZW5ndGg7ZSsrKWlmKChuPXQudGlja2Zvcm1hdHN0b3BzW2VdKS5lbmFibGVkJiZoKHQuZHRpY2ssbi5kdGlja3JhbmdlKSl7cj1uO2JyZWFrfX1yZXR1cm4gcj9yLnZhbHVlOnQudGlja2Zvcm1hdH0sVC5nZXRTdWJwbG90cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQuX3N1YnBsb3RzLG49ci5jYXJ0ZXNpYW4uY29uY2F0KHIuZ2wyZHx8W10pLGk9ZT9ULmZpbmRTdWJwbG90c1dpdGhBeGlzKG4sZSk6bjtyZXR1cm4gaS5zb3J0KGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdWJzdHIoMSkuc3BsaXQoXCJ5XCIpLG49ZS5zdWJzdHIoMSkuc3BsaXQoXCJ5XCIpO3JldHVybiByWzBdPT09blswXT8rclsxXS0rblsxXTorclswXS0rblswXX0pLGl9LFQuZmluZFN1YnBsb3RzV2l0aEF4aXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IFJlZ0V4cChcInhcIj09PWUuX2lkLmNoYXJBdCgwKT9cIl5cIitlLl9pZCtcInlcIjplLl9pZCtcIiRcIiksbj1bXSxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPXRbaV07ci50ZXN0KGEpJiZuLnB1c2goYSl9cmV0dXJuIG59LFQubWFrZUNsaXBQYXRocz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2lmKCFlLl9oYXNPbmx5TGFyZ2VTcGxvbXMpe3ZhciByLGksYT17X29mZnNldDowLF9sZW5ndGg6ZS53aWR0aCxfaWQ6XCJcIn0sbz17X29mZnNldDowLF9sZW5ndGg6ZS5oZWlnaHQsX2lkOlwiXCJ9LHM9VC5saXN0KHQsXCJ4XCIsITApLGw9VC5saXN0KHQsXCJ5XCIsITApLGM9W107Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKylmb3IoYy5wdXNoKHt4OnNbcl0seTpvfSksaT0wO2k8bC5sZW5ndGg7aSsrKTA9PT1yJiZjLnB1c2goe3g6YSx5OmxbaV19KSxjLnB1c2goe3g6c1tyXSx5OmxbaV19KTt2YXIgdT1lLl9jbGlwcy5zZWxlY3RBbGwoXCIuYXhlc2NsaXBcIikuZGF0YShjLGZ1bmN0aW9uKHQpe3JldHVybiB0LnguX2lkK3QueS5faWR9KTt1LmVudGVyKCkuYXBwZW5kKFwiY2xpcFBhdGhcIikuY2xhc3NlZChcImF4ZXNjbGlwXCIsITApLmF0dHIoXCJpZFwiLGZ1bmN0aW9uKHQpe3JldHVyblwiY2xpcFwiK2UuX3VpZCt0LnguX2lkK3QueS5faWR9KS5hcHBlbmQoXCJyZWN0XCIpLHUuZXhpdCgpLnJlbW92ZSgpLHUuZWFjaChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5zZWxlY3QoXCJyZWN0XCIpLmF0dHIoe3g6dC54Ll9vZmZzZXR8fDAseTp0LnkuX29mZnNldHx8MCx3aWR0aDp0LnguX2xlbmd0aHx8MSxoZWlnaHQ6dC55Ll9sZW5ndGh8fDF9KX0pfX0sVC5kcmF3PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Ll9mdWxsTGF5b3V0O1wicmVkcmF3XCI9PT1lJiZuLl9wYXBlci5zZWxlY3RBbGwoXCJnLnN1YnBsb3RcIikuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9bi5fcGxvdHNbZV0saT1yLnhheGlzLGE9ci55YXhpcztyLnhheGlzbGF5ZXIuc2VsZWN0QWxsKFwiLlwiK2kuX2lkK1widGlja1wiKS5yZW1vdmUoKSxyLnlheGlzbGF5ZXIuc2VsZWN0QWxsKFwiLlwiK2EuX2lkK1widGlja1wiKS5yZW1vdmUoKSxyLnhheGlzbGF5ZXIuc2VsZWN0QWxsKFwiLlwiK2kuX2lkK1widGljazJcIikucmVtb3ZlKCksci55YXhpc2xheWVyLnNlbGVjdEFsbChcIi5cIithLl9pZCtcInRpY2syXCIpLnJlbW92ZSgpLHIueGF4aXNsYXllci5zZWxlY3RBbGwoXCIuXCIraS5faWQrXCJkaXZpZGVyXCIpLnJlbW92ZSgpLHIueWF4aXNsYXllci5zZWxlY3RBbGwoXCIuXCIrYS5faWQrXCJkaXZpZGVyXCIpLnJlbW92ZSgpLHIuZ3JpZGxheWVyJiZyLmdyaWRsYXllci5zZWxlY3RBbGwoXCJwYXRoXCIpLnJlbW92ZSgpLHIuemVyb2xpbmVsYXllciYmci56ZXJvbGluZWxheWVyLnNlbGVjdEFsbChcInBhdGhcIikucmVtb3ZlKCksbi5faW5mb2xheWVyLnNlbGVjdChcIi5nLVwiK2kuX2lkK1widGl0bGVcIikucmVtb3ZlKCksbi5faW5mb2xheWVyLnNlbGVjdChcIi5nLVwiK2EuX2lkK1widGl0bGVcIikucmVtb3ZlKCl9KTt2YXIgaT1lJiZcInJlZHJhd1wiIT09ZT9lOlQubGlzdElkcyh0KTtyZXR1cm4gcy5zeW5jT3JBc3luYyhpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtpZihlKXt2YXIgbj1ULmdldEZyb21JZCh0LGUpLGk9VC5kcmF3T25lKHQsbixyKTtyZXR1cm4gbi5fcj1uLnJhbmdlLnNsaWNlKCksbi5fcmw9cy5zaW1wbGVNYXAobi5fcixuLnIybCksaX19fSkpfSxULmRyYXdPbmU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksbDtyPXJ8fHt9LGUuc2V0U2NhbGUoKTt2YXIgZj10Ll9mdWxsTGF5b3V0LHA9ZS5faWQsZD1wLmNoYXJBdCgwKSxnPVQuY291bnRlckxldHRlcihwKSx2PWUuX21haW5TdWJwbG90LG09ZS5fbWFpbkxpbmVQb3NpdGlvbix5PWUuX21haW5NaXJyb3JQb3NpdGlvbix4PWYuX3Bsb3RzW3ZdW2QrXCJheGlzbGF5ZXJcIl0sYj1lLl9zdWJwbG90c1dpdGgsXz1lLl92YWxzPVQuY2FsY1RpY2tzKGUpLHc9W2UubWlycm9yLG0seV0uam9pbihcIl9cIik7Zm9yKG49MDtuPF8ubGVuZ3RoO24rKylfW25dLmF4SW5mbz13O2lmKGUudmlzaWJsZSl7ZS5fc2VsZWN0aW9ucz17fSxlLl90aWNrQW5nbGVzPXt9O3ZhciBrLE0sUz1ULm1ha2VUcmFuc0ZuKGUpO2lmKFwiYm91bmRhcmllc1wiPT09ZS50aWNrc29uKXt2YXIgRT1mdW5jdGlvbih0LGUpe3ZhciByLG49W10saT1mdW5jdGlvbih0LGUpe3ZhciByPXQueGJuZFtlXTtudWxsIT09ciYmbi5wdXNoKHMuZXh0ZW5kRmxhdCh7fSx0LHt4OnJ9KSl9O2lmKGUubGVuZ3RoKXtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKWkoZVtyXSwwKTtpKGVbci0xXSwxKX1yZXR1cm4gbn0oMCxfKTtNPVQuY2xpcEVuZHMoZSxFKSxrPVwiaW5zaWRlXCI9PT1lLnRpY2tzP006RX1lbHNlIE09VC5jbGlwRW5kcyhlLF8pLGs9XCJpbnNpZGVcIj09PWUudGlja3M/TTpfO3ZhciBDPWUuX2dyaWRWYWxzPU0sTD1mdW5jdGlvbih0LGUpe3ZhciByLG4saT1bXSxhPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC54Ym5kW2VdO251bGwhPT1yJiZpLnB1c2gocy5leHRlbmRGbGF0KHt9LHQse3g6cn0pKX07aWYodC5zaG93ZGl2aWRlcnMmJmUubGVuZ3RoKXtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbz1lW3JdO28udGV4dDIhPT1uJiZhKG8sMCksbj1vLnRleHQyfWEoZVtyLTFdLDEpfXJldHVybiBpfShlLF8pO2lmKCFmLl9oYXNPbmx5TGFyZ2VTcGxvbXMpe3ZhciB6PXt9O2ZvcihuPTA7bjxiLmxlbmd0aDtuKyspe2k9YltuXTt2YXIgTz0obD1mLl9wbG90c1tpXSlbZytcImF4aXNcIl0sST1PLl9tYWluQXhpcy5faWQ7aWYoIXpbSV0pe3pbSV09MTt2YXIgRD1cInhcIj09PWQ/XCJNMCxcIitPLl9vZmZzZXQrXCJ2XCIrTy5fbGVuZ3RoOlwiTVwiK08uX29mZnNldCtcIiwwaFwiK08uX2xlbmd0aDtULmRyYXdHcmlkKHQsZSx7dmFsczpDLGNvdW50ZXJBeGlzOk8sbGF5ZXI6bC5ncmlkbGF5ZXIuc2VsZWN0KFwiLlwiK3ApLHBhdGg6RCx0cmFuc0ZuOlN9KSxULmRyYXdaZXJvTGluZSh0LGUse2NvdW50ZXJBeGlzOk8sbGF5ZXI6bC56ZXJvbGluZWxheWVyLHBhdGg6RCx0cmFuc0ZuOlN9KX19fXZhciBQPVQuZ2V0VGlja1NpZ25zKGUpLFI9W107aWYoZS50aWNrcyl7dmFyIEYsQixOLGo9VC5tYWtlVGlja1BhdGgoZSxtLFBbMl0pO2lmKGUuX2FuY2hvckF4aXMmJmUubWlycm9yJiYhMCE9PWUubWlycm9yPyhGPVQubWFrZVRpY2tQYXRoKGUseSxQWzNdKSxCPWorRik6KEY9XCJcIixCPWopLGUuc2hvd2RpdmlkZXJzJiZcIm91dHNpZGVcIj09PWUudGlja3MmJlwiYm91bmRhcmllc1wiPT09ZS50aWNrc29uKXt2YXIgVT17fTtmb3Iobj0wO248TC5sZW5ndGg7bisrKVVbTFtuXS54XT0xO049ZnVuY3Rpb24odCl7cmV0dXJuIFVbdC54XT9GOkJ9fWVsc2UgTj1CO1QuZHJhd1RpY2tzKHQsZSx7dmFsczprLGxheWVyOngscGF0aDpOLHRyYW5zRm46U30pLFI9T2JqZWN0LmtleXMoZS5fbGluZXBvc2l0aW9uc3x8e30pfWZvcihuPTA7bjxSLmxlbmd0aDtuKyspe2k9UltuXSxsPWYuX3Bsb3RzW2ldO3ZhciBxPWUuX2xpbmVwb3NpdGlvbnNbaV18fFtdLEg9VC5tYWtlVGlja1BhdGgoZSxxWzBdLFBbMF0pK1QubWFrZVRpY2tQYXRoKGUscVsxXSxQWzFdKTtULmRyYXdUaWNrcyh0LGUse3ZhbHM6ayxsYXllcjpsW2QrXCJheGlzbGF5ZXJcIl0scGF0aDpILHRyYW5zRm46U30pfXZhciBHPVtdO2lmKEcucHVzaChmdW5jdGlvbigpe3JldHVybiBULmRyYXdMYWJlbHModCxlLHt2YWxzOl8sbGF5ZXI6eCx0cmFuc0ZuOlMsbGFiZWxGbnM6VC5tYWtlTGFiZWxGbnMoZSxtKX0pfSksXCJtdWx0aWNhdGVnb3J5XCI9PT1lLnR5cGUpe3ZhciBaPTAsJD17eDoyLHk6MTB9W2RdLFE9UFsyXSooXCJpbnNpZGVcIj09PWUudGlja3M/LTE6MSk7Ry5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIForPVkoZSxwK1widGlja1wiKSskLForPWUuX3RpY2tBbmdsZXNbcCtcInRpY2tcIl0/ZS50aWNrZm9udC5zaXplKkE6MCxULmRyYXdMYWJlbHModCxlLHt2YWxzOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49e30saT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1lW2ldO25bYS50ZXh0Ml0/blthLnRleHQyXS5wdXNoKGEueCk6blthLnRleHQyXT1bYS54XX1mb3IodmFyIG8gaW4gbilyLnB1c2goVih0LHMuaW50ZXJwKG5bb10sLjUpLG8pKTtyZXR1cm4gcn0oZSxfKSxsYXllcjp4LGNsczpwK1widGljazJcIixyZXBvc2l0aW9uT25VcGRhdGU6ITAsc2Vjb25kYXJ5OiEwLHRyYW5zRm46UyxsYWJlbEZuczpULm1ha2VMYWJlbEZucyhlLG0rWipRKX0pfSksRy5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIForPVkoZSxwK1widGljazJcIiksZS5fbGFiZWxMZW5ndGg9WixmdW5jdGlvbih0LGUscil7dmFyIG49ZS5faWQrXCJkaXZpZGVyXCIsaT1yLnZhbHMsYT1yLmxheWVyLnNlbGVjdEFsbChcInBhdGguXCIrbikuZGF0YShpLFcpO2EuZXhpdCgpLnJlbW92ZSgpLGEuZW50ZXIoKS5pbnNlcnQoXCJwYXRoXCIsXCI6Zmlyc3QtY2hpbGRcIikuY2xhc3NlZChuLDEpLmNsYXNzZWQoXCJjcmlzcFwiLDEpLmNhbGwodS5zdHJva2UsZS5kaXZpZGVyY29sb3IpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsaC5jcmlzcFJvdW5kKHQsZS5kaXZpZGVyd2lkdGgsMSkrXCJweFwiKSxhLmF0dHIoXCJ0cmFuc2Zvcm1cIixyLnRyYW5zRm4pLmF0dHIoXCJkXCIsci5wYXRoKX0odCxlLHt2YWxzOkwsbGF5ZXI6eCxwYXRoOlQubWFrZVRpY2tQYXRoKGUsbSxRLFopLHRyYW5zRm46U30pfSl9dmFyIHR0PW8uZ2V0Q29tcG9uZW50TWV0aG9kKFwicmFuZ2VzbGlkZXJcIixcImlzVmlzaWJsZVwiKShlKTtyZXR1cm4gRy5wdXNoKGZ1bmN0aW9uKCl7aWYoZS5zaG93dGlja2xhYmVscyl7dmFyIHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXgubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2UuX2JvdW5kaW5nQm94PXt3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCxsZWZ0Om4ubGVmdC1yLmxlZnQscmlnaHQ6bi5yaWdodC1yLmxlZnQsdG9wOm4udG9wLXIudG9wLGJvdHRvbTpuLmJvdHRvbS1yLnRvcH19ZWxzZXt2YXIgaSxhPWYuX3NpemU7XCJ4XCI9PT1kPyhpPVwiZnJlZVwiPT09ZS5hbmNob3I/YS50K2EuaCooMS1lLnBvc2l0aW9uKTphLnQrYS5oKigxLWUuX2FuY2hvckF4aXMuZG9tYWluW3tib3R0b206MCx0b3A6MX1bZS5zaWRlXV0pLGUuX2JvdW5kaW5nQm94PXt0b3A6aSxib3R0b206aSxsZWZ0OmUuX29mZnNldCxyaWdodDplLl9vZmZzZXQrZS5fbGVuZ3RoLHdpZHRoOmUuX2xlbmd0aCxoZWlnaHQ6MH0pOihpPVwiZnJlZVwiPT09ZS5hbmNob3I/YS5sK2EudyplLnBvc2l0aW9uOmEubCthLncqZS5fYW5jaG9yQXhpcy5kb21haW5be2xlZnQ6MCxyaWdodDoxfVtlLnNpZGVdXSxlLl9ib3VuZGluZ0JveD17bGVmdDppLHJpZ2h0OmksYm90dG9tOmUuX29mZnNldCtlLl9sZW5ndGgsdG9wOmUuX29mZnNldCxoZWlnaHQ6ZS5fbGVuZ3RoLHdpZHRoOjB9KX1pZihiKXtmb3IodmFyIG89ZS5fY291bnRlclNwYW49WzEvMCwtMS8wXSxzPTA7czxiLmxlbmd0aDtzKyspe3ZhciBsPWYuX3Bsb3RzW2Jbc11dW1wieFwiPT09ZD9cInlheGlzXCI6XCJ4YXhpc1wiXTtldChvLFtsLl9vZmZzZXQsbC5fb2Zmc2V0K2wuX2xlbmd0aF0pfVwiZnJlZVwiPT09ZS5hbmNob3ImJmV0KG8sXCJ4XCI9PT1kP1tlLl9ib3VuZGluZ0JveC5ib3R0b20sZS5fYm91bmRpbmdCb3gudG9wXTpbZS5fYm91bmRpbmdCb3gucmlnaHQsZS5fYm91bmRpbmdCb3gubGVmdF0pfX0sZnVuY3Rpb24oKXt2YXIgcixuLGk9ZS5zaWRlLmNoYXJBdCgwKTtpZih0dCYmKG49by5nZXRDb21wb25lbnRNZXRob2QoXCJyYW5nZXNsaWRlclwiLFwiYXV0b01hcmdpbk9wdHNcIikodCxlKSksYS5hdXRvTWFyZ2luKHQsSyhlKSxuKSxlLmF1dG9tYXJnaW4mJighdHR8fFwiYlwiIT09aSkpe3I9e3g6MCx5OjAscjowLGw6MCx0OjAsYjowfTt2YXIgcyxsLGM9ZS5fYm91bmRpbmdCb3gsdT1YKHQsZSk7c3dpdGNoKGQraSl7Y2FzZVwieGJcIjpzPTAsbD1jLnRvcC11LHJbaV09Yy5oZWlnaHQ7YnJlYWs7Y2FzZVwieHRcIjpzPTEsbD11LWMuYm90dG9tLHJbaV09Yy5oZWlnaHQ7YnJlYWs7Y2FzZVwieWxcIjpzPTAsbD11LWMucmlnaHQscltpXT1jLndpZHRoO2JyZWFrO2Nhc2VcInlyXCI6cz0xLGw9Yy5sZWZ0LXUscltpXT1jLndpZHRofWlmKHJbZ109XCJmcmVlXCI9PT1lLmFuY2hvcj9lLnBvc2l0aW9uOmUuX2FuY2hvckF4aXMuZG9tYWluW3NdLHJbaV0+MCYmKHJbaV0rPWwpLGUudGl0bGUudGV4dCE9PWYuX2RmbHRUaXRsZVtkXSYmKHJbaV0rPWUudGl0bGUuZm9udC5zaXplKSxcInhcIj09PWQmJmMud2lkdGg+MCl7dmFyIGg9Yy5yaWdodC0oZS5fb2Zmc2V0K2UuX2xlbmd0aCk7aD4wJiYoci54PTEsci5yPWgpO3ZhciBwPWUuX29mZnNldC1jLmxlZnQ7cD4wJiYoci54PTAsci5sPXApfWVsc2UgaWYoXCJ5XCI9PT1kJiZjLmhlaWdodD4wKXt2YXIgdj1jLmJvdHRvbS0oZS5fb2Zmc2V0K2UuX2xlbmd0aCk7dj4wJiYoci55PTAsci5iPXYpO3ZhciBtPWUuX29mZnNldC1jLnRvcDttPjAmJihyLnk9MSxyLnQ9bSl9fWEuYXV0b01hcmdpbih0LEooZSkscil9KSxyLnNraXBUaXRsZXx8dHQmJmUuX2JvdW5kaW5nQm94JiZcImJvdHRvbVwiPT09ZS5zaWRlfHxHLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcixuPXQuX2Z1bGxMYXlvdXQsaT1lLl9pZCxhPWkuY2hhckF0KDApLG89ZS50aXRsZS5mb250LnNpemU7aWYoXCJtdWx0aWNhdGVnb3J5XCI9PT1lLnR5cGUpcj1lLl9sYWJlbExlbmd0aDtlbHNle3I9MTArMS41Km8rKGUubGluZXdpZHRoP2UubGluZXdpZHRoLTE6MCl9dmFyIHMsbCx1LGYscD1YKHQsZSk7XCJ4XCI9PT1hPyhsPWUuX29mZnNldCtlLl9sZW5ndGgvMix1PVwidG9wXCI9PT1lLnNpZGU/LXItbyooZS5zaG93dGlja2xhYmVscz8xOjApOnIrbyooZS5zaG93dGlja2xhYmVscz8xLjU6LjUpLHUrPXApOih1PWUuX29mZnNldCtlLl9sZW5ndGgvMixsPVwicmlnaHRcIj09PWUuc2lkZT9yK28qKGUuc2hvd3RpY2tsYWJlbHM/MTouNSk6LXItbyooZS5zaG93dGlja2xhYmVscz8uNTowKSxsKz1wLHM9e3JvdGF0ZTpcIi05MFwiLG9mZnNldDowfSk7aWYoXCJtdWx0aWNhdGVnb3J5XCIhPT1lLnR5cGUpe3ZhciBkPWUuX3NlbGVjdGlvbnNbZS5faWQrXCJ0aWNrXCJdO2lmKGY9e3NlbGVjdGlvbjpkLHNpZGU6ZS5zaWRlfSxkJiZkLm5vZGUoKSYmZC5ub2RlKCkucGFyZW50Tm9kZSl7dmFyIGc9aC5nZXRUcmFuc2xhdGUoZC5ub2RlKCkucGFyZW50Tm9kZSk7Zi5vZmZzZXRMZWZ0PWcueCxmLm9mZnNldFRvcD1nLnl9fXJldHVybiBjLmRyYXcodCxpK1widGl0bGVcIix7cHJvcENvbnRhaW5lcjplLHByb3BOYW1lOmUuX25hbWUrXCIudGl0bGUudGV4dFwiLHBsYWNlaG9sZGVyOm4uX2RmbHRUaXRsZVthXSxhdm9pZDpmLHRyYW5zZm9ybTpzLGF0dHJpYnV0ZXM6e3g6bCx5OnUsXCJ0ZXh0LWFuY2hvclwiOlwibWlkZGxlXCJ9fSl9KHQsZSl9KSxzLnN5bmNPckFzeW5jKEcpfWZ1bmN0aW9uIGV0KHQsZSl7dFswXT1NYXRoLm1pbih0WzBdLGVbMF0pLHRbMV09TWF0aC5tYXgodFsxXSxlWzFdKX19LFQuZ2V0VGlja1NpZ25zPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2lkLmNoYXJBdCgwKSxyPXt4OlwidG9wXCIseTpcInJpZ2h0XCJ9W2VdLG49dC5zaWRlPT09cj8xOi0xLGk9Wy0xLDEsbiwtbl07cmV0dXJuXCJpbnNpZGVcIiE9PXQudGlja3M9PShcInhcIj09PWUpJiYoaT1pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4tdH0pKSxpfSxULm1ha2VUcmFuc0ZuPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2lkLmNoYXJBdCgwKSxyPXQuX29mZnNldDtyZXR1cm5cInhcIj09PWU/ZnVuY3Rpb24oZSl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrKHIrdC5sMnAoZS54KSkrXCIsMClcIn06ZnVuY3Rpb24oZSl7cmV0dXJuXCJ0cmFuc2xhdGUoMCxcIisocit0LmwycChlLngpKStcIilcIn19LFQubWFrZVRpY2tQYXRoPWZ1bmN0aW9uKHQsZSxyLG4pe249dm9pZCAwIT09bj9uOnQudGlja2xlbjt2YXIgaT10Ll9pZC5jaGFyQXQoMCksYT0odC5saW5ld2lkdGh8fDEpLzI7cmV0dXJuXCJ4XCI9PT1pP1wiTTAsXCIrKGUrYSpyKStcInZcIituKnI6XCJNXCIrKGUrYSpyKStcIiwwaFwiK24qcn0sVC5tYWtlTGFiZWxGbnM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuX2lkLmNoYXJBdCgwKSxhPVwiYm91bmRhcmllc1wiIT09dC50aWNrc29uJiZcIm91dHNpZGVcIj09PXQudGlja3Msbz0wLGw9MDtpZihhJiYobys9dC50aWNrbGVuKSxyJiZcIm91dHNpZGVcIj09PXQudGlja3Mpe3ZhciBjPXMuZGVnMnJhZChyKTtvPXQudGlja2xlbipNYXRoLmNvcyhjKSsxLGw9dC50aWNrbGVuKk1hdGguc2luKGMpfXQuc2hvd3RpY2tsYWJlbHMmJihhfHx0LnNob3dsaW5lKSYmKG8rPS4yKnQudGlja2ZvbnQuc2l6ZSk7dmFyIHUsaCxmLHAsZD17bGFiZWxTdGFuZG9mZjpvKz0odC5saW5ld2lkdGh8fDEpLzIsbGFiZWxTaGlmdDpsfTtyZXR1cm5cInhcIj09PW4/KHA9XCJib3R0b21cIj09PXQuc2lkZT8xOi0xLHU9bCpwLGg9ZStvKnAsZj1cImJvdHRvbVwiPT09dC5zaWRlPzE6LS4yLGQueEZuPWZ1bmN0aW9uKHQpe3JldHVybiB0LmR4K3V9LGQueUZuPWZ1bmN0aW9uKHQpe3JldHVybiB0LmR5K2grdC5mb250U2l6ZSpmfSxkLmFuY2hvckZuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkoZSkmJjAhPT1lJiYxODAhPT1lP2UqcDwwP1wiZW5kXCI6XCJzdGFydFwiOlwibWlkZGxlXCJ9LGQuaGVpZ2h0Rm49ZnVuY3Rpb24oZSxyLG4pe3JldHVybiByPC02MHx8cj42MD8tLjUqbjpcInRvcFwiPT09dC5zaWRlPy1uOjB9KTpcInlcIj09PW4mJihwPVwicmlnaHRcIj09PXQuc2lkZT8xOi0xLHU9byxoPS1sKnAsZj05MD09PU1hdGguYWJzKHQudGlja2FuZ2xlKT8uNTowLGQueEZuPWZ1bmN0aW9uKHQpe3JldHVybiB0LmR4K2UrKHUrdC5mb250U2l6ZSpmKSpwfSxkLnlGbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5keStoK3QuZm9udFNpemUqa30sZC5hbmNob3JGbj1mdW5jdGlvbihlLHIpe3JldHVybiBpKHIpJiY5MD09PU1hdGguYWJzKHIpP1wibWlkZGxlXCI6XCJyaWdodFwiPT09dC5zaWRlP1wic3RhcnRcIjpcImVuZFwifSxkLmhlaWdodEZuPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4ocio9XCJsZWZ0XCI9PT10LnNpZGU/MTotMSk8LTMwPy1uOnI8MzA/LS41Km46MH0pLGR9LFQuZHJhd1RpY2tzPWZ1bmN0aW9uKHQsZSxyKXtyPXJ8fHt9O3ZhciBuPWUuX2lkK1widGlja1wiLGk9ci5sYXllci5zZWxlY3RBbGwoXCJwYXRoLlwiK24pLmRhdGEoZS50aWNrcz9yLnZhbHM6W10sVyk7aS5leGl0KCkucmVtb3ZlKCksaS5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChuLDEpLmNsYXNzZWQoXCJ0aWNrc1wiLDEpLmNsYXNzZWQoXCJjcmlzcFwiLCExIT09ci5jcmlzcCkuY2FsbCh1LnN0cm9rZSxlLnRpY2tjb2xvcikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixoLmNyaXNwUm91bmQodCxlLnRpY2t3aWR0aCwxKStcInB4XCIpLmF0dHIoXCJkXCIsci5wYXRoKSxpLmF0dHIoXCJ0cmFuc2Zvcm1cIixyLnRyYW5zRm4pfSxULmRyYXdHcmlkPWZ1bmN0aW9uKHQsZSxyKXtyPXJ8fHt9O3ZhciBuPWUuX2lkK1wiZ3JpZFwiLGk9ci52YWxzLGE9ci5jb3VudGVyQXhpcztpZighMT09PWUuc2hvd2dyaWQpaT1bXTtlbHNlIGlmKGEmJlQuc2hvdWxkU2hvd1plcm9MaW5lKHQsZSxhKSlmb3IodmFyIG89XCJhcnJheVwiPT09ZS50aWNrbW9kZSxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBsPWlbc10ueDtpZihvPyFsOk1hdGguYWJzKGwpPGUuZHRpY2svMTAwKXtpZihpPWkuc2xpY2UoMCxzKS5jb25jYXQoaS5zbGljZShzKzEpKSwhbylicmVhaztzLS19fXZhciBjPXIubGF5ZXIuc2VsZWN0QWxsKFwicGF0aC5cIituKS5kYXRhKGksVyk7Yy5leGl0KCkucmVtb3ZlKCksYy5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChuLDEpLmNsYXNzZWQoXCJjcmlzcFwiLCExIT09ci5jcmlzcCksZS5fZ3c9aC5jcmlzcFJvdW5kKHQsZS5ncmlkd2lkdGgsMSksYy5hdHRyKFwidHJhbnNmb3JtXCIsci50cmFuc0ZuKS5hdHRyKFwiZFwiLHIucGF0aCkuY2FsbCh1LnN0cm9rZSxlLmdyaWRjb2xvcnx8XCIjZGRkXCIpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsZS5fZ3crXCJweFwiKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiByLnBhdGgmJmMuYXR0cihcImRcIixyLnBhdGgpfSxULmRyYXdaZXJvTGluZT1mdW5jdGlvbih0LGUscil7cj1yfHxyO3ZhciBuPWUuX2lkK1wiemxcIixpPVQuc2hvdWxkU2hvd1plcm9MaW5lKHQsZSxyLmNvdW50ZXJBeGlzKSxhPXIubGF5ZXIuc2VsZWN0QWxsKFwicGF0aC5cIituKS5kYXRhKGk/W3t4OjAsaWQ6ZS5faWR9XTpbXSk7YS5leGl0KCkucmVtb3ZlKCksYS5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChuLDEpLmNsYXNzZWQoXCJ6bFwiLDEpLmNsYXNzZWQoXCJjcmlzcFwiLCExIT09ci5jcmlzcCkuZWFjaChmdW5jdGlvbigpe3IubGF5ZXIuc2VsZWN0QWxsKFwicGF0aFwiKS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFMuaWRTb3J0KHQuaWQsZS5pZCl9KX0pLGEuYXR0cihcInRyYW5zZm9ybVwiLHIudHJhbnNGbikuYXR0cihcImRcIixyLnBhdGgpLmNhbGwodS5zdHJva2UsZS56ZXJvbGluZWNvbG9yfHx1LmRlZmF1bHRMaW5lKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLGguY3Jpc3BSb3VuZCh0LGUuemVyb2xpbmV3aWR0aCxlLl9nd3x8MSkrXCJweFwiKX0sVC5kcmF3TGFiZWxzPWZ1bmN0aW9uKHQsZSxyKXtyPXJ8fHt9O3ZhciBhPWUuX2lkLG89YS5jaGFyQXQoMCksYz1yLmNsc3x8YStcInRpY2tcIix1PXIudmFscyxmPXIubGFiZWxGbnMscD1yLnNlY29uZGFyeT8wOmUudGlja2FuZ2xlLGQ9KGUuX3RpY2tBbmdsZXN8fHt9KVtjXSxnPXIubGF5ZXIuc2VsZWN0QWxsKFwiZy5cIitjKS5kYXRhKGUuc2hvd3RpY2tsYWJlbHM/dTpbXSxXKSx2PVtdO2Z1bmN0aW9uIG0odCxlKXt0LmVhY2goZnVuY3Rpb24odCl7dmFyIGE9bi5zZWxlY3QodGhpcyksbz1hLnNlbGVjdChcIi50ZXh0LW1hdGgtZ3JvdXBcIikscz1mLmFuY2hvckZuKHQsZSksYz1yLnRyYW5zRm4uY2FsbChhLm5vZGUoKSx0KSsoaShlKSYmMCE9K2U/XCIgcm90YXRlKFwiK2UrXCIsXCIrZi54Rm4odCkrXCIsXCIrKGYueUZuKHQpLXQuZm9udFNpemUvMikrXCIpXCI6XCJcIiksdT1sLmxpbmVDb3VudChhKSxwPUEqdC5mb250U2l6ZSxkPWYuaGVpZ2h0Rm4odCxpKGUpPytlOjAsKHUtMSkqcCk7aWYoZCYmKGMrPVwiIHRyYW5zbGF0ZSgwLCBcIitkK1wiKVwiKSxvLmVtcHR5KCkpYS5zZWxlY3QoXCJ0ZXh0XCIpLmF0dHIoe3RyYW5zZm9ybTpjLFwidGV4dC1hbmNob3JcIjpzfSk7ZWxzZXt2YXIgZz1oLmJCb3goby5ub2RlKCkpLndpZHRoKntlbmQ6LS41LHN0YXJ0Oi41fVtzXTtvLmF0dHIoXCJ0cmFuc2Zvcm1cIixjKyhnP1widHJhbnNsYXRlKFwiK2crXCIsMClcIjpcIlwiKSl9fSl9Zy5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChjLDEpLmFwcGVuZChcInRleHRcIikuYXR0cihcInRleHQtYW5jaG9yXCIsXCJtaWRkbGVcIikuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxpPXQuX3Byb21pc2VzLmxlbmd0aDtyLmNhbGwobC5wb3NpdGlvblRleHQsZi54Rm4oZSksZi55Rm4oZSkpLmNhbGwoaC5mb250LGUuZm9udCxlLmZvbnRTaXplLGUuZm9udENvbG9yKS50ZXh0KGUudGV4dCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyx0KSx0Ll9wcm9taXNlc1tpXT92LnB1c2godC5fcHJvbWlzZXMucG9wKCkudGhlbihmdW5jdGlvbigpe20ocixwKX0pKTptKHIscCl9KSxnLmV4aXQoKS5yZW1vdmUoKSxyLnJlcG9zaXRpb25PblVwZGF0ZSYmZy5lYWNoKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLnNlbGVjdChcInRleHRcIikuY2FsbChsLnBvc2l0aW9uVGV4dCxmLnhGbih0KSxmLnlGbih0KSl9KSxtKGcsZHx8cCksZS5fc2VsZWN0aW9ucyYmKGUuX3NlbGVjdGlvbnNbY109Zyk7dmFyIHk9cy5zeW5jT3JBc3luYyhbZnVuY3Rpb24oKXtyZXR1cm4gdi5sZW5ndGgmJlByb21pc2UuYWxsKHYpfSxmdW5jdGlvbigpe20oZyxwKTt2YXIgdD1udWxsO2lmKHUubGVuZ3RoJiZcInhcIj09PW8mJiFpKHApJiYoXCJsb2dcIiE9PWUudHlwZXx8XCJEXCIhPT1TdHJpbmcoZS5kdGljaykuY2hhckF0KDApKSl7dD0wO3ZhciBuLGE9MCxsPVtdO2lmKGcuZWFjaChmdW5jdGlvbih0KXthPU1hdGgubWF4KGEsdC5mb250U2l6ZSk7dmFyIHI9ZS5sMnAodC54KSxuPSQodGhpcyksaT1oLmJCb3gobi5ub2RlKCkpO2wucHVzaCh7dG9wOjAsYm90dG9tOjEwLGhlaWdodDoxMCxsZWZ0OnItaS53aWR0aC8yLHJpZ2h0OnIraS53aWR0aC8yKzIsd2lkdGg6aS53aWR0aCsyfSl9KSxcImJvdW5kYXJpZXNcIiE9PWUudGlja3NvbiYmIWUuc2hvd2RpdmlkZXJzfHxyLnNlY29uZGFyeSl7dmFyIGY9dS5sZW5ndGgsZD1NYXRoLmFicygodVtmLTFdLngtdVswXS54KSplLl9tKS8oZi0xKTwyLjUqYXx8XCJtdWx0aWNhdGVnb3J5XCI9PT1lLnR5cGU7Zm9yKG49MDtuPGwubGVuZ3RoLTE7bisrKWlmKHMuYkJveEludGVyc2VjdChsW25dLGxbbisxXSkpe3Q9ZD85MDozMDticmVha319ZWxzZXt2YXIgdj0yO2ZvcihlLnRpY2tzJiYodis9ZS50aWNrd2lkdGgvMiksbj0wO248bC5sZW5ndGg7bisrKXt2YXIgeT11W25dLnhibmQseD1sW25dO2lmKG51bGwhPT15WzBdJiZ4LmxlZnQtZS5sMnAoeVswXSk8dnx8bnVsbCE9PXlbMV0mJmUubDJwKHlbMV0pLXgucmlnaHQ8dil7dD05MDticmVha319fXQmJm0oZyx0KX1lLl90aWNrQW5nbGVzJiYoZS5fdGlja0FuZ2xlc1tjXT1udWxsPT09dD9pKHApP3A6MDp0KX1dKTtyZXR1cm4geSYmeS50aGVuJiZ0Ll9wcm9taXNlcy5wdXNoKHkpLHl9LFQuc2hvdWxkU2hvd1plcm9MaW5lPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1zLnNpbXBsZU1hcChlLnJhbmdlLGUucjJsKTtyZXR1cm4gblswXSpuWzFdPD0wJiZlLnplcm9saW5lJiYoXCJsaW5lYXJcIj09PWUudHlwZXx8XCItXCI9PT1lLnR5cGUpJiZlLl9ncmlkVmFscy5sZW5ndGgmJihaKGUsMCl8fCFmdW5jdGlvbih0LGUscixuKXt2YXIgaT1yLl9tYWluQXhpcztpZighaSlyZXR1cm47dmFyIGE9dC5fZnVsbExheW91dCxvPWUuX2lkLmNoYXJBdCgwKSxzPVQuY291bnRlckxldHRlcihlLl9pZCksbD1lLl9vZmZzZXQrKE1hdGguYWJzKG5bMF0pPE1hdGguYWJzKG5bMV0pPT0oXCJ4XCI9PT1vKT8wOmUuX2xlbmd0aCk7ZnVuY3Rpb24gYyh0KXtpZighdC5zaG93bGluZXx8IXQubGluZXdpZHRoKXJldHVybiExO3ZhciByPU1hdGgubWF4KCh0LmxpbmV3aWR0aCtlLnplcm9saW5ld2lkdGgpLzIsMSk7ZnVuY3Rpb24gbih0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdCYmTWF0aC5hYnModC1sKTxyfWlmKG4odC5fbWFpbkxpbmVQb3NpdGlvbil8fG4odC5fbWFpbk1pcnJvclBvc2l0aW9uKSlyZXR1cm4hMDt2YXIgaT10Ll9saW5lcG9zaXRpb25zfHx7fTtmb3IodmFyIGEgaW4gaSlpZihuKGlbYV1bMF0pfHxuKGlbYV1bMV0pKXJldHVybiEwfXZhciB1PWEuX3Bsb3RzW3IuX21haW5TdWJwbG90XTtpZighKHUubWFpbnBsb3RpbmZvfHx1KS5vdmVybGF5cy5sZW5ndGgpcmV0dXJuIGMocik7Zm9yKHZhciBoPVQubGlzdCh0LHMpLGY9MDtmPGgubGVuZ3RoO2YrKyl7dmFyIHA9aFtmXTtpZihwLl9tYWluQXhpcz09PWkmJmMocCkpcmV0dXJuITB9fSh0LGUscixuKXx8ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5fZnVsbERhdGEsbj1lLl9tYWluU3VicGxvdCxpPWUuX2lkLmNoYXJBdCgwKSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV07aWYoITA9PT1zLnZpc2libGUmJnMueGF4aXMrcy55YXhpcz09PW4pe2lmKChvLnRyYWNlSXMocyxcImJhclwiKXx8XCJ3YXRlcmZhbGxcIj09PXMudHlwZSkmJnMub3JpZW50YXRpb249PT17eDpcImhcIix5OlwidlwifVtpXSlyZXR1cm4hMDtpZihzLmZpbGwmJnMuZmlsbC5jaGFyQXQocy5maWxsLmxlbmd0aC0xKT09PWkpcmV0dXJuITB9fXJldHVybiExfSh0LGUpKX0sVC5jbGlwRW5kcz1mdW5jdGlvbih0LGUpe3JldHVybiBlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gWih0LGUueCl9KX0sVC5hbGxvd0F1dG9NYXJnaW49ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVQubGlzdCh0LFwiXCIsITApLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmF1dG9tYXJnaW4mJmEuYWxsb3dBdXRvTWFyZ2luKHQsSihuKSksby5nZXRDb21wb25lbnRNZXRob2QoXCJyYW5nZXNsaWRlclwiLFwiaXNWaXNpYmxlXCIpKG4pJiZhLmFsbG93QXV0b01hcmdpbih0LEsobikpfX0sVC5zd2FwPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPVtdO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBhPVtdLG89dC5fZnVsbERhdGFbZVtyXV0ueGF4aXMscz10Ll9mdWxsRGF0YVtlW3JdXS55YXhpcztpZihvJiZzKXtmb3Iobj0wO248aS5sZW5ndGg7bisrKS0xPT09aVtuXS54LmluZGV4T2YobykmJi0xPT09aVtuXS55LmluZGV4T2Yocyl8fGEucHVzaChuKTtpZihhLmxlbmd0aCl7dmFyIGwsYz1pW2FbMF1dO2lmKGEubGVuZ3RoPjEpZm9yKG49MTtuPGEubGVuZ3RoO24rKylsPWlbYVtuXV0sUShjLngsbC54KSxRKGMueSxsLnkpO1EoYy54LFtvXSksUShjLnksW3NdKX1lbHNlIGkucHVzaCh7eDpbb10seTpbc119KX19cmV0dXJuIGl9KHQsZSksbj0wO248ci5sZW5ndGg7bisrKXR0KHQscltuXS54LHJbbl0ueSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vY29tcG9uZW50cy90aXRsZXNcIjo2NjYsXCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCI6NjczLFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiOjcyNSxcIi4uLy4uL3Bsb3RzL3Bsb3RzXCI6ODEwLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2F1dG9yYW5nZVwiOjc0OCxcIi4vYXhpc19hdXRvdHlwZVwiOjc1MCxcIi4vYXhpc19pZHNcIjo3NTIsXCIuL2NsZWFuX3RpY2tzXCI6NzU0LFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjc2MSxcIi4vc2V0X2NvbnZlcnRcIjo3NjcsZDM6MTU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw3NTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIShyPXJ8fHt9KS5ub011bHRpQ2F0ZWdvcnkmJihvPXQsaS5pc0FycmF5T3JUeXBlZEFycmF5KG9bMF0pJiZpLmlzQXJyYXlPclR5cGVkQXJyYXkob1sxXSkpP1wibXVsdGljYXRlZ29yeVwiOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPU1hdGgubWF4KDEsKHQubGVuZ3RoLTEpLzFlMyksYT0wLG89MCxzPXt9LGw9MDtsPHQubGVuZ3RoO2wrPXIpe3ZhciBjPXRbTWF0aC5yb3VuZChsKV0sdT1TdHJpbmcoYyk7c1t1XXx8KHNbdV09MSxpLmlzRGF0ZVRpbWUoYyxlKSYmKGErPTEpLG4oYykmJihvKz0xKSl9cmV0dXJuIGE+MipvfSh0LGUpP1wiZGF0ZVwiOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1NYXRoLm1heCgxLCh0Lmxlbmd0aC0xKS8xZTMpLHI9MCxuPTAsbz17fSxzPTA7czx0Lmxlbmd0aDtzKz1lKXt2YXIgbD10W01hdGgucm91bmQocyldLGM9U3RyaW5nKGwpO29bY118fChvW2NdPTEsXCJib29sZWFuXCI9PXR5cGVvZiBsP24rKzppLmNsZWFuTnVtYmVyKGwpIT09YT9yKys6XCJzdHJpbmdcIj09dHlwZW9mIGwmJm4rKyl9cmV0dXJuIG4+MipyfSh0KT9cImNhdGVnb3J5XCI6ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuITE7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYobih0W2VdKSlyZXR1cm4hMDtyZXR1cm4hMX0odCk/XCJsaW5lYXJcIjpcIi1cIjt2YXIgb319LHtcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDc1MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxvPXQoXCIuL3RpY2tfdmFsdWVfZGVmYXVsdHNcIikscz10KFwiLi90aWNrX21hcmtfZGVmYXVsdHNcIiksbD10KFwiLi90aWNrX2xhYmVsX2RlZmF1bHRzXCIpLGM9dChcIi4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHNcIiksdT10KFwiLi9saW5lX2dyaWRfZGVmYXVsdHNcIiksaD10KFwiLi9zZXRfY29udmVydFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsZixwKXt2YXIgZD1mLmxldHRlcixnPWYuZm9udHx8e30sdj1mLnNwbG9tU3Rhc2h8fHt9LG09cihcInZpc2libGVcIiwhZi5jaGVhdGVyb25seSkseT1lLnR5cGU7XCJkYXRlXCI9PT15JiZuLmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiaGFuZGxlRGVmYXVsdHNcIikodCxlLFwiY2FsZW5kYXJcIixmLmNhbGVuZGFyKTtpZihoKGUscCksIXIoXCJhdXRvcmFuZ2VcIiwhZS5pc1ZhbGlkUmFuZ2UodC5yYW5nZSkpfHxcImxpbmVhclwiIT09eSYmXCItXCIhPT15fHxyKFwicmFuZ2Vtb2RlXCIpLHIoXCJyYW5nZVwiKSxlLmNsZWFuUmFuZ2UoKSxjKHQsZSxyLGYpLFwiY2F0ZWdvcnlcIj09PXl8fGYubm9Ib3Zlcnx8cihcImhvdmVyZm9ybWF0XCIpLCFtKXJldHVybiBlO3ZhciB4PXIoXCJjb2xvclwiKSxiPXghPT1hLmNvbG9yLmRmbHQ/eDpnLmNvbG9yO3IoXCJ0aXRsZS50ZXh0XCIsdi5sYWJlbHx8cC5fZGZsdFRpdGxlW2RdKSxpLmNvZXJjZUZvbnQocixcInRpdGxlLmZvbnRcIix7ZmFtaWx5OmcuZmFtaWx5LHNpemU6TWF0aC5yb3VuZCgxLjIqZy5zaXplKSxjb2xvcjpifSksbyh0LGUscix5KSxsKHQsZSxyLHksZikscyh0LGUscixmKSx1KHQsZSxyLHtkZmx0Q29sb3I6eCxiZ0NvbG9yOmYuYmdDb2xvcixzaG93R3JpZDpmLnNob3dHcmlkLGF0dHJpYnV0ZXM6YX0pLChlLnNob3dsaW5lfHxlLnRpY2tzKSYmcihcIm1pcnJvclwiKSxmLmF1dG9tYXJnaW4mJnIoXCJhdXRvbWFyZ2luXCIpO3ZhciBfLHc9XCJtdWx0aWNhdGVnb3J5XCI9PT1lLnR5cGU7Zi5ub1RpY2tzb258fFwiY2F0ZWdvcnlcIiE9PWUudHlwZSYmIXd8fCFlLnRpY2tzJiYhZS5zaG93Z3JpZHx8KHcmJihfPVwiYm91bmRhcmllc1wiKSxyKFwidGlja3NvblwiLF8pKTt3JiYocihcInNob3dkaXZpZGVyc1wiKSYmKHIoXCJkaXZpZGVyY29sb3JcIikscihcImRpdmlkZXJ3aWR0aFwiKSkpO3JldHVybiBlfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzXCI6NzUzLFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjc2MSxcIi4vbGluZV9ncmlkX2RlZmF1bHRzXCI6NzYzLFwiLi9zZXRfY29udmVydFwiOjc2NyxcIi4vdGlja19sYWJlbF9kZWZhdWx0c1wiOjc2OCxcIi4vdGlja19tYXJrX2RlZmF1bHRzXCI6NzY5LFwiLi90aWNrX3ZhbHVlX2RlZmF1bHRzXCI6NzcwfV0sNzUyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4vY29uc3RhbnRzXCIpO3IuaWQybmFtZT1mdW5jdGlvbih0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCYmdC5tYXRjaChpLkFYX0lEX1BBVFRFUk4pKXt2YXIgZT10LnN1YnN0cigxKTtyZXR1cm5cIjFcIj09PWUmJihlPVwiXCIpLHQuY2hhckF0KDApK1wiYXhpc1wiK2V9fSxyLm5hbWUyaWQ9ZnVuY3Rpb24odCl7aWYodC5tYXRjaChpLkFYX05BTUVfUEFUVEVSTikpe3ZhciBlPXQuc3Vic3RyKDUpO3JldHVyblwiMVwiPT09ZSYmKGU9XCJcIiksdC5jaGFyQXQoMCkrZX19LHIuY2xlYW5JZD1mdW5jdGlvbih0LGUpe2lmKHQubWF0Y2goaS5BWF9JRF9QQVRURVJOKSYmKCFlfHx0LmNoYXJBdCgwKT09PWUpKXt2YXIgcj10LnN1YnN0cigxKS5yZXBsYWNlKC9eMCsvLFwiXCIpO3JldHVyblwiMVwiPT09ciYmKHI9XCJcIiksdC5jaGFyQXQoMCkrcn19LHIubGlzdD1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC5fZnVsbExheW91dDtpZighaSlyZXR1cm5bXTt2YXIgYSxvPXIubGlzdElkcyh0LGUpLHM9bmV3IEFycmF5KG8ubGVuZ3RoKTtmb3IoYT0wO2E8by5sZW5ndGg7YSsrKXt2YXIgbD1vW2FdO3NbYV09aVtsLmNoYXJBdCgwKStcImF4aXNcIitsLnN1YnN0cigxKV19aWYoIW4pe3ZhciBjPWkuX3N1YnBsb3RzLmdsM2R8fFtdO2ZvcihhPTA7YTxjLmxlbmd0aDthKyspe3ZhciB1PWlbY1thXV07ZT9zLnB1c2godVtlK1wiYXhpc1wiXSk6cy5wdXNoKHUueGF4aXMsdS55YXhpcyx1LnpheGlzKX19cmV0dXJuIHN9LHIubGlzdElkcz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQ7aWYoIXIpcmV0dXJuW107dmFyIG49ci5fc3VicGxvdHM7cmV0dXJuIGU/bltlK1wiYXhpc1wiXTpuLnhheGlzLmNvbmNhdChuLnlheGlzKX0sci5nZXRGcm9tSWQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXQuX2Z1bGxMYXlvdXQ7cmV0dXJuXCJ4XCI9PT1uP2U9ZS5yZXBsYWNlKC95WzAtOV0qLyxcIlwiKTpcInlcIj09PW4mJihlPWUucmVwbGFjZSgveFswLTldKi8sXCJcIikpLGlbci5pZDJuYW1lKGUpXX0sci5nZXRGcm9tVHJhY2U9ZnVuY3Rpb24odCxlLGkpe3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz1udWxsO2lmKG4udHJhY2VJcyhlLFwiZ2wzZFwiKSl7dmFyIHM9ZS5zY2VuZTtcInNjZW5lXCI9PT1zLnN1YnN0cigwLDUpJiYobz1hW3NdW2krXCJheGlzXCJdKX1lbHNlIG89ci5nZXRGcm9tSWQodCxlW2krXCJheGlzXCJdfHxpKTtyZXR1cm4gb30sci5pZFNvcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmNoYXJBdCgwKSxuPWUuY2hhckF0KDApO3JldHVybiByIT09bj9yPm4/MTotMTorKHQuc3Vic3RyKDEpfHwxKS0rKGUuc3Vic3RyKDEpfHwxKX0sci5nZXRBeGlzR3JvdXA9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5fYXhpc01hdGNoR3JvdXBzLG49MDtuPHIubGVuZ3RoO24rKyl7aWYocltuXVtlXSlyZXR1cm5cImdcIitufXJldHVybiBlfX0se1wiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2NvbnN0YW50c1wiOjc1NX1dLDc1MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtpZihcImNhdGVnb3J5XCI9PT1lLnR5cGUpe3ZhciBpLGE9dC5jYXRlZ29yeWFycmF5LG89QXJyYXkuaXNBcnJheShhKSYmYS5sZW5ndGg+MDtvJiYoaT1cImFycmF5XCIpO3ZhciBzLGw9cihcImNhdGVnb3J5b3JkZXJcIixpKTtcImFycmF5XCI9PT1sJiYocz1yKFwiY2F0ZWdvcnlhcnJheVwiKSksb3x8XCJhcnJheVwiIT09bHx8KGw9ZS5jYXRlZ29yeW9yZGVyPVwidHJhY2VcIiksXCJ0cmFjZVwiPT09bD9lLl9pbml0aWFsQ2F0ZWdvcmllcz1bXTpcImFycmF5XCI9PT1sP2UuX2luaXRpYWxDYXRlZ29yaWVzPXMuc2xpY2UoKToocz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPWUuZGF0YUF0dHJ8fHQuX2lkLmNoYXJBdCgwKSxvPXt9O2lmKGUuYXhEYXRhKXI9ZS5heERhdGE7ZWxzZSBmb3Iocj1bXSxuPTA7bjxlLmRhdGEubGVuZ3RoO24rKyl7dmFyIHM9ZS5kYXRhW25dO3NbYStcImF4aXNcIl09PT10Ll9pZCYmci5wdXNoKHMpfWZvcihuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBsPXJbbl1bYV07Zm9yKGk9MDtpPGwubGVuZ3RoO2krKyl7dmFyIGM9bFtpXTtudWxsIT1jJiYob1tjXT0xKX19cmV0dXJuIE9iamVjdC5rZXlzKG8pfShlLG4pLnNvcnQoKSxcImNhdGVnb3J5IGFzY2VuZGluZ1wiPT09bD9lLl9pbml0aWFsQ2F0ZWdvcmllcz1zOlwiY2F0ZWdvcnkgZGVzY2VuZGluZ1wiPT09bCYmKGUuX2luaXRpYWxDYXRlZ29yaWVzPXMucmV2ZXJzZSgpKSl9fX0se31dLDc1NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKS5PTkVEQVk7ci5kdGljaz1mdW5jdGlvbih0LGUpe3ZhciByPVwibG9nXCI9PT1lLGk9XCJkYXRlXCI9PT1lLG89XCJjYXRlZ29yeVwiPT09ZSxzPWk/YToxO2lmKCF0KXJldHVybiBzO2lmKG4odCkpcmV0dXJuKHQ9TnVtYmVyKHQpKTw9MD9zOm8/TWF0aC5tYXgoMSxNYXRoLnJvdW5kKHQpKTppP01hdGgubWF4KC4xLHQpOnQ7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHR8fCFpJiYhcilyZXR1cm4gczt2YXIgbD10LmNoYXJBdCgwKSxjPXQuc3Vic3RyKDEpO3JldHVybihjPW4oYyk/TnVtYmVyKGMpOjApPD0wfHwhKGkmJlwiTVwiPT09bCYmYz09PU1hdGgucm91bmQoYyl8fHImJlwiTFwiPT09bHx8ciYmXCJEXCI9PT1sJiYoMT09PWN8fDI9PT1jKSk/czp0fSxyLnRpY2swPWZ1bmN0aW9uKHQsZSxyLGEpe3JldHVyblwiZGF0ZVwiPT09ZT9pLmNsZWFuRGF0ZSh0LGkuZGF0ZVRpY2swKHIpKTpcIkQxXCIhPT1hJiZcIkQyXCIhPT1hP24odCk/TnVtYmVyKHQpOjA6dm9pZCAwfX0se1wiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sNzU1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYi9yZWdleFwiKS5jb3VudGVyO2UuZXhwb3J0cz17aWRSZWdleDp7eDpuKFwieFwiKSx5Om4oXCJ5XCIpfSxhdHRyUmVnZXg6bihcIlt4eV1heGlzXCIpLHhBeGlzTWF0Y2g6bihcInhheGlzXCIpLHlBeGlzTWF0Y2g6bihcInlheGlzXCIpLEFYX0lEX1BBVFRFUk46L15beHl6XVswLTldKiQvLEFYX05BTUVfUEFUVEVSTjovXlt4eXpdYXhpc1swLTldKiQvLFNVQlBMT1RfUEFUVEVSTjovXngoWzAtOV0qKXkoWzAtOV0qKSQvLE1JTkRSQUc6OCxNSU5TRUxFQ1Q6MTIsTUlOWk9PTToyMCxEUkFHR0VSU0laRToyMCxCRU5EUFg6MS41LFJFRFJBV0RFTEFZOjUwLFNFTEVDVERFTEFZOjEwMCxTRUxFQ1RJRDpcIi1zZWxlY3RcIixERkxUUkFOR0VYOlstMSw2XSxERkxUUkFOR0VZOlstMSw0XSx0cmFjZUxheWVyQ2xhc3NlczpbXCJoZWF0bWFwbGF5ZXJcIixcImNvbnRvdXJjYXJwZXRsYXllclwiLFwiY29udG91cmxheWVyXCIsXCJ3YXRlcmZhbGxsYXllclwiLFwiYmFybGF5ZXJcIixcImNhcnBldGxheWVyXCIsXCJ2aW9saW5sYXllclwiLFwiYm94bGF5ZXJcIixcIm9obGNsYXllclwiLFwic2NhdHRlcmNhcnBldGxheWVyXCIsXCJzY2F0dGVybGF5ZXJcIl0sbGF5ZXJWYWx1ZTJsYXllckNsYXNzOntcImFib3ZlIHRyYWNlc1wiOlwiYWJvdmVcIixcImJlbG93IHRyYWNlc1wiOlwiYmVsb3dcIn19fSx7XCIuLi8uLi9saWIvcmVnZXhcIjo3MTd9XSw3NTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vYXhpc19pZHNcIikuaWQybmFtZSxhPXQoXCIuL3NjYWxlX3pvb21cIiksbz10KFwiLi9hdXRvcmFuZ2VcIikubWFrZVBhZEZuLHM9dChcIi4vYXV0b3JhbmdlXCIpLmNvbmNhdEV4dHJlbWVzLGw9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQUxNT1NUX0VRVUFMLGM9dChcIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIikuRlJPTV9CTDtmdW5jdGlvbiB1KHQsZSxyLG4sYSl7dmFyIG8scyxsLGMsdT1cInJhbmdlXCIhPT1hLGg9bltpKGUpXS50eXBlLGY9W107Zm9yKHM9MDtzPHIubGVuZ3RoO3MrKylpZigobD1yW3NdKSE9PWUmJihjPW5baShsKV0pLnR5cGU9PT1oKWlmKGMuZml4ZWRyYW5nZSl7aWYodSYmYy5hbmNob3Ipe25baShjLmFuY2hvcildLmZpeGVkcmFuZ2UmJmYucHVzaChsKX19ZWxzZSBmLnB1c2gobCk7Zm9yKG89MDtvPHQubGVuZ3RoO28rKylpZih0W29dW2VdKXt2YXIgcD10W29dLGQ9W107Zm9yKHM9MDtzPGYubGVuZ3RoO3MrKylwW2w9ZltzXV18fGQucHVzaChsKTtyZXR1cm57bGlua2FibGVBeGVzOmQsdGhpc0dyb3VwOnB9fXJldHVybntsaW5rYWJsZUF4ZXM6Zix0aGlzR3JvdXA6bnVsbH19ZnVuY3Rpb24gaCh0LGUscixuLGkpe3ZhciBhLG8scyxsLGM7bnVsbD09PWU/KChlPXt9KVtyXT0xLGM9dC5sZW5ndGgsdC5wdXNoKGUpKTpjPXQuaW5kZXhPZihlKTt2YXIgdT1PYmplY3Qua2V5cyhlKTtmb3IoYT0wO2E8dC5sZW5ndGg7YSsrKWlmKHM9dFthXSxhIT09YyYmc1tuXSl7dmFyIGg9c1tuXTtmb3Iobz0wO288dS5sZW5ndGg7bysrKXNbbD11W29dXT1oKmkqZVtsXTtyZXR1cm4gdm9pZCB0LnNwbGljZShjLDEpfWlmKDEhPT1pKWZvcihvPTA7bzx1Lmxlbmd0aDtvKyspZVt1W29dXSo9aTtlW25dPTF9ZnVuY3Rpb24gZih0LGUpe3ZhciByPXQuX2lucHV0RG9tYWluLG49Y1t0LmNvbnN0cmFpbnRvd2FyZF0saT1yWzBdKyhyWzFdLXJbMF0pKm47dC5kb21haW49dC5faW5wdXQuZG9tYWluPVtpKyhyWzBdLWkpL2UsaSsoclsxXS1pKS9lXSx0LnNldFNjYWxlKCl9ci5oYW5kbGVDb25zdHJhaW50RGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsaSxhKXt2YXIgbyxzLGwsYyxmPWEuX2F4aXNDb25zdHJhaW50R3JvdXBzLHA9YS5fYXhpc01hdGNoR3JvdXBzLGQ9ZS5faWQsZz1kLmNoYXJBdCgwKSx2PSgoYS5fc3Bsb21BeGVzfHx7fSlbZ118fHt9KVtkXXx8e30sbT1lLl9pZCx5PW0uY2hhckF0KDApLHg9cihcImNvbnN0cmFpblwiKTtpZihuLmNvZXJjZSh0LGUse2NvbnN0cmFpbnRvd2FyZDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6XCJ4XCI9PT15P1tcImxlZnRcIixcImNlbnRlclwiLFwicmlnaHRcIl06W1wiYm90dG9tXCIsXCJtaWRkbGVcIixcInRvcFwiXSxkZmx0OlwieFwiPT09eT9cImNlbnRlclwiOlwibWlkZGxlXCJ9fSxcImNvbnN0cmFpbnRvd2FyZFwiKSwhdC5tYXRjaGVzJiYhdi5tYXRjaGVzfHxlLmZpeGVkcmFuZ2V8fChzPXUocCxtLGksYSksbz1uLmNvZXJjZSh0LGUse21hdGNoZXM6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOnMubGlua2FibGVBeGVzfHxbXSxkZmx0OnYubWF0Y2hlc319LFwibWF0Y2hlc1wiKSksb3x8IXQuc2NhbGVhbmNob3J8fGUuZml4ZWRyYW5nZSYmXCJkb21haW5cIiE9PXh8fChjPXUoZixtLGksYSx4KSxsPW4uY29lcmNlKHQsZSx7c2NhbGVhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOmMubGlua2FibGVBeGVzfHxbXX19LFwic2NhbGVhbmNob3JcIikpLG8/KGRlbGV0ZSBlLmNvbnN0cmFpbixoKHAscy50aGlzR3JvdXAsbSxvLDEpKTotMSE9PWkuaW5kZXhPZih0Lm1hdGNoZXMpJiZuLndhcm4oXCJpZ25vcmVkIFwiK2UuX25hbWUrJy5tYXRjaGVzOiBcIicrdC5tYXRjaGVzKydcIiB0byBhdm9pZCBlaXRoZXIgYW4gaW5maW5pdGUgbG9vcCBvciBiZWNhdXNlIHRoZSB0YXJnZXQgYXhpcyBoYXMgZml4ZWQgcmFuZ2UuJyksbCl7dmFyIGI9cihcInNjYWxlcmF0aW9cIik7Ynx8KGI9ZS5zY2FsZXJhdGlvPTEpLGgoZixjLnRoaXNHcm91cCxtLGwsYil9ZWxzZS0xIT09aS5pbmRleE9mKHQuc2NhbGVhbmNob3IpJiZuLndhcm4oXCJpZ25vcmVkIFwiK2UuX25hbWUrJy5zY2FsZWFuY2hvcjogXCInK3Quc2NhbGVhbmNob3IrJ1wiIHRvIGF2b2lkIGVpdGhlciBhbiBpbmZpbml0ZSBsb29wIGFuZCBwb3NzaWJseSBpbmNvbnNpc3RlbnQgc2NhbGVyYXRpb3MsIG9yIGJlY2F1c2UgdGhlIHRhcmdldCBheGlzIGhhcyBmaXhlZCByYW5nZSBvciB0aGlzIGF4aXMgZGVjbGFyZXMgYSAqbWF0Y2hlcyogY29uc3RyYWludC4nKX0sci5lbmZvcmNlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixjLHUsaCxwLGQ9dC5fZnVsbExheW91dCxnPWQuX2F4aXNDb25zdHJhaW50R3JvdXBzfHxbXTtmb3IoZT0wO2U8Zy5sZW5ndGg7ZSsrKXt2YXIgdj1nW2VdLG09T2JqZWN0LmtleXModikseT0xLzAseD0wLGI9MS8wLF89e30sdz17fSxrPSExO2ZvcihyPTA7cjxtLmxlbmd0aDtyKyspd1tuPW1bcl1dPWM9ZFtpKG4pXSxjLl9pbnB1dERvbWFpbj9jLmRvbWFpbj1jLl9pbnB1dERvbWFpbi5zbGljZSgpOmMuX2lucHV0RG9tYWluPWMuZG9tYWluLnNsaWNlKCksYy5faW5wdXRSYW5nZXx8KGMuX2lucHV0UmFuZ2U9Yy5yYW5nZS5zbGljZSgpKSxjLnNldFNjYWxlKCksX1tuXT11PU1hdGguYWJzKGMuX20pL3Zbbl0seT1NYXRoLm1pbih5LHUpLFwiZG9tYWluXCIhPT1jLmNvbnN0cmFpbiYmYy5fY29uc3RyYWludFNocmlua2FibGV8fChiPU1hdGgubWluKGIsdSkpLGRlbGV0ZSBjLl9jb25zdHJhaW50U2hyaW5rYWJsZSx4PU1hdGgubWF4KHgsdSksXCJkb21haW5cIj09PWMuY29uc3RyYWluJiYoaz0hMCk7aWYoISh5PmwqeCl8fGspZm9yKHI9MDtyPG0ubGVuZ3RoO3IrKylpZih1PV9bbj1tW3JdXSxoPShjPXdbbl0pLmNvbnN0cmFpbix1IT09Ynx8XCJkb21haW5cIj09PWgpaWYocD11L2IsXCJyYW5nZVwiPT09aClhKGMscCk7ZWxzZXt2YXIgQT1jLl9pbnB1dERvbWFpbixUPShjLmRvbWFpblsxXS1jLmRvbWFpblswXSkvKEFbMV0tQVswXSksTT0oYy5yMmwoYy5yYW5nZVsxXSktYy5yMmwoYy5yYW5nZVswXSkpLyhjLnIybChjLl9pbnB1dFJhbmdlWzFdKS1jLnIybChjLl9pbnB1dFJhbmdlWzBdKSk7aWYoKHAvPVQpKk08MSl7Yy5kb21haW49Yy5faW5wdXQuZG9tYWluPUEuc2xpY2UoKSxhKGMscCk7Y29udGludWV9aWYoTTwxJiYoYy5yYW5nZT1jLl9pbnB1dC5yYW5nZT1jLl9pbnB1dFJhbmdlLnNsaWNlKCkscCo9TSksYy5hdXRvcmFuZ2Upe3ZhciBTPWMucjJsKGMucmFuZ2VbMF0pLEU9Yy5yMmwoYy5yYW5nZVsxXSksQz0oUytFKS8yLEw9Qyx6PUMsTz1NYXRoLmFicyhFLUMpLEk9Qy1PKnAqMS4wMDAxLEQ9QytPKnAqMS4wMDAxLFA9byhjKTtmKGMscCk7dmFyIFIsRixCPU1hdGguYWJzKGMuX20pLE49cyh0LGMpLGo9Ti5taW4sVj1OLm1heDtmb3IoRj0wO0Y8ai5sZW5ndGg7RisrKShSPWpbRl0udmFsLVAoaltGXSkvQik+SSYmUjxMJiYoTD1SKTtmb3IoRj0wO0Y8Vi5sZW5ndGg7RisrKShSPVZbRl0udmFsK1AoVltGXSkvQik8RCYmUj56JiYoej1SKTtwLz0oei1MKS8oMipPKSxMPWMubDJyKEwpLHo9Yy5sMnIoeiksYy5yYW5nZT1jLl9pbnB1dC5yYW5nZT1TPEU/W0wsel06W3osTF19ZihjLHApfX19LHIuY2xlYW49ZnVuY3Rpb24odCxlKXtpZihlLl9pbnB1dERvbWFpbil7Zm9yKHZhciByPSExLG49ZS5faWQsaT10Ll9mdWxsTGF5b3V0Ll9heGlzQ29uc3RyYWludEdyb3VwcyxhPTA7YTxpLmxlbmd0aDthKyspaWYoaVthXVtuXSl7cj0hMDticmVha31yJiZcImRvbWFpblwiPT09ZS5jb25zdHJhaW58fChlLl9pbnB1dC5kb21haW49ZS5kb21haW49ZS5faW5wdXREb21haW4sZGVsZXRlIGUuX2lucHV0RG9tYWluKX19fSx7XCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCI6NjczLFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4vYXV0b3JhbmdlXCI6NzQ4LFwiLi9heGlzX2lkc1wiOjc1MixcIi4vc2NhbGVfem9vbVwiOjc2NX1dLDc1NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJ0aW55Y29sb3IyXCIpLGE9dChcImhhcy1wYXNzaXZlLWV2ZW50c1wiKSxvPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxzPXQoXCIuLi8uLi9saWJcIiksbD10KFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCIpLGM9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksdT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLGg9dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIiksZj10KFwiLi9heGVzXCIpLHA9dChcIi4uLy4uL2xpYi9zZXRjdXJzb3JcIiksZD10KFwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudFwiKSxnPXQoXCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCIpLkZST01fVEwsdj10KFwiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzXCIpLG09dChcIi4uLy4uL3Bsb3RfYXBpL3N1YnJvdXRpbmVzXCIpLnJlZHJhd1JlZ2xUcmFjZXMseT10KFwiLi4vcGxvdHNcIikseD10KFwiLi9heGlzX2lkc1wiKS5nZXRGcm9tSWQsYj10KFwiLi9zZWxlY3RcIikucHJlcFNlbGVjdCxfPXQoXCIuL3NlbGVjdFwiKS5jbGVhclNlbGVjdCx3PXQoXCIuL3NlbGVjdFwiKS5zZWxlY3RPbkNsaWNrLGs9dChcIi4vc2NhbGVfem9vbVwiKSxBPXQoXCIuL2NvbnN0YW50c1wiKSxUPUEuTUlORFJBRyxNPUEuTUlOWk9PTSxTPSEwO2Z1bmN0aW9uIEUodCxlLHIsbil7dmFyIGk9cy5lbnN1cmVTaW5nbGUodC5kcmFnbGF5ZXIsZSxyLGZ1bmN0aW9uKGUpe2UuY2xhc3NlZChcImRyYWdcIiwhMCkuc3R5bGUoe2ZpbGw6XCJ0cmFuc3BhcmVudFwiLFwic3Ryb2tlLXdpZHRoXCI6MH0pLmF0dHIoXCJkYXRhLXN1YnBsb3RcIix0LmlkKX0pO3JldHVybiBpLmNhbGwocCxuKSxpLm5vZGUoKX1mdW5jdGlvbiBDKHQsZSxyLGksYSxvLHMpe3ZhciBsPUUodCxcInJlY3RcIixlLHIpO3JldHVybiBuLnNlbGVjdChsKS5jYWxsKHUuc2V0UmVjdCxpLGEsbyxzKSxsfWZ1bmN0aW9uIEwodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZighdFtyXS5maXhlZHJhbmdlKXJldHVybiBlO3JldHVyblwiXCJ9ZnVuY3Rpb24geih0LGUscixuLGkpe2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz10W2FdO2lmKCFvLmZpeGVkcmFuZ2Upe3ZhciBzPW8uX3JsWzBdLGw9by5fcmxbMV0tcztvLnJhbmdlPVtvLmwycihzK2wqZSksby5sMnIocytsKnIpXSxuW28uX25hbWUrXCIucmFuZ2VbMF1cIl09by5yYW5nZVswXSxuW28uX25hbWUrXCIucmFuZ2VbMV1cIl09by5yYW5nZVsxXX19aWYoaSYmaS5sZW5ndGgpe3ZhciBjPShlKygxLXIpKS8yO3ooaSxjLDEtYyxuLFtdKX19ZnVuY3Rpb24gTyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZml4ZWRyYW5nZXx8KG4ucmFuZ2U9W24ubDJyKG4uX3JsWzBdLWUvbi5fbSksbi5sMnIobi5fcmxbMV0tZS9uLl9tKV0pfX1mdW5jdGlvbiBJKHQpe3JldHVybiAxLSh0Pj0wP01hdGgubWluKHQsLjkpOjEvKDEvTWF0aC5tYXgodCwtLjMpKzMuMjIyKSl9ZnVuY3Rpb24gRCh0LGUscixuLGkpe3JldHVybiB0LmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsXCJ6b29tYm94XCIpLnN0eWxlKHtmaWxsOmU+LjI/XCJyZ2JhKDAsMCwwLDApXCI6XCJyZ2JhKDI1NSwyNTUsMjU1LDApXCIsXCJzdHJva2Utd2lkdGhcIjowfSkuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK3IrXCIsIFwiK24rXCIpXCIpLmF0dHIoXCJkXCIsaStcIlpcIil9ZnVuY3Rpb24gUCh0LGUscil7cmV0dXJuIHQuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiY2xhc3NcIixcInpvb21ib3gtY29ybmVyc1wiKS5zdHlsZSh7ZmlsbDpjLmJhY2tncm91bmQsc3Ryb2tlOmMuZGVmYXVsdExpbmUsXCJzdHJva2Utd2lkdGhcIjoxLG9wYWNpdHk6MH0pLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIitlK1wiLCBcIityK1wiKVwiKS5hdHRyKFwiZFwiLFwiTTAsMFpcIil9ZnVuY3Rpb24gUih0LGUscixuLGksYSl7dC5hdHRyKFwiZFwiLG4rXCJNXCIrci5sK1wiLFwiK3IudCtcInZcIityLmgrXCJoXCIrci53K1widi1cIityLmgrXCJoLVwiK3IudytcIlpcIiksRih0LGUsaSxhKX1mdW5jdGlvbiBGKHQsZSxyLG4pe3J8fCh0LnRyYW5zaXRpb24oKS5zdHlsZShcImZpbGxcIixuPi4yP1wicmdiYSgwLDAsMCwwLjQpXCI6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuMylcIikuZHVyYXRpb24oMjAwKSxlLnRyYW5zaXRpb24oKS5zdHlsZShcIm9wYWNpdHlcIiwxKS5kdXJhdGlvbigyMDApKX1mdW5jdGlvbiBCKHQpe24uc2VsZWN0KHQpLnNlbGVjdEFsbChcIi56b29tYm94LC5qcy16b29tYm94LWJhY2tkcm9wLC5qcy16b29tYm94LW1lbnUsLnpvb21ib3gtY29ybmVyc1wiKS5yZW1vdmUoKX1mdW5jdGlvbiBOKHQpe1MmJnQuZGF0YSYmdC5fY29udGV4dC5zaG93VGlwcyYmKHMubm90aWZpZXIocy5fKHQsXCJEb3VibGUtY2xpY2sgdG8gem9vbSBiYWNrIG91dFwiKSxcImxvbmdcIiksUz0hMSl9ZnVuY3Rpb24gaih0KXtyZXR1cm5cImxhc3NvXCI9PT10fHxcInNlbGVjdFwiPT09dH1mdW5jdGlvbiBWKHQpe3ZhciBlPU1hdGguZmxvb3IoTWF0aC5taW4odC5iLXQudCx0LnItdC5sLE0pLzIpO3JldHVyblwiTVwiKyh0LmwtMy41KStcIixcIisodC50LS41K2UpK1wiaDN2XCIrLWUrXCJoXCIrZStcInYtM2gtXCIrKGUrMykrXCJaTVwiKyh0LnIrMy41KStcIixcIisodC50LS41K2UpK1wiaC0zdlwiKy1lK1wiaFwiKy1lK1widi0zaFwiKyhlKzMpK1wiWk1cIisodC5yKzMuNSkrXCIsXCIrKHQuYisuNS1lKStcImgtM3ZcIitlK1wiaFwiKy1lK1widjNoXCIrKGUrMykrXCJaTVwiKyh0LmwtMy41KStcIixcIisodC5iKy41LWUpK1wiaDN2XCIrZStcImhcIitlK1widjNoLVwiKyhlKzMpK1wiWlwifWZ1bmN0aW9uIFUodCxlLHIsbil7Zm9yKHZhciBpLGEsbyxsLGM9ITEsdT17fSxoPXt9LGY9MDtmPGUubGVuZ3RoO2YrKyl7dmFyIHA9ZVtmXTtmb3IoaSBpbiByKWlmKHBbaV0pe2ZvcihvIGluIHApKFwieFwiPT09by5jaGFyQXQoMCk/cjpuKVtvXXx8KHVbb109aSk7Zm9yKGEgaW4gbilwW2FdJiYoYz0hMCl9Zm9yKGEgaW4gbilpZihwW2FdKWZvcihsIGluIHApKFwieFwiPT09bC5jaGFyQXQoMCk/cjpuKVtsXXx8KGhbbF09YSl9YyYmKHMuZXh0ZW5kRmxhdCh1LGgpLGg9e30pO3ZhciBkPXt9LGc9W107Zm9yKG8gaW4gdSl7dmFyIHY9eCh0LG8pO2cucHVzaCh2KSxkW3YuX2lkXT12fXZhciBtPXt9LHk9W107Zm9yKGwgaW4gaCl7dmFyIGI9eCh0LGwpO3kucHVzaChiKSxtW2IuX2lkXT1ifXJldHVybnt4YUhhc2g6ZCx5YUhhc2g6bSx4YXhlczpnLHlheGVzOnkseExpbmtzOnUseUxpbmtzOmgsaXNTdWJwbG90Q29uc3RyYWluZWQ6Y319ZnVuY3Rpb24gcSh0LGUpe2lmKGEpe3ZhciByPXZvaWQgMCE9PXQub253aGVlbD9cIndoZWVsXCI6XCJtb3VzZXdoZWVsXCI7dC5fb253aGVlbCYmdC5yZW1vdmVFdmVudExpc3RlbmVyKHIsdC5fb253aGVlbCksdC5fb253aGVlbD1lLHQuYWRkRXZlbnRMaXN0ZW5lcihyLGUse3Bhc3NpdmU6ITF9KX1lbHNlIHZvaWQgMCE9PXQub253aGVlbD90Lm9ud2hlZWw9ZTp2b2lkIDAhPT10Lm9ubW91c2V3aGVlbCYmKHQub25tb3VzZXdoZWVsPWUpfWZ1bmN0aW9uIEgodCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHRbcl0pO3JldHVybiBlfWUuZXhwb3J0cz17bWFrZURyYWdCb3g6ZnVuY3Rpb24odCxlLHIsYSxjLHAsUyxFKXt2YXIgRixHLFksVyxYLFosJCxKLEssUSx0dCxldCxydCxudCxpdCxhdCxvdCxzdCxsdCxjdCx1dCxodD10Ll9mdWxsTGF5b3V0Ll96b29tbGF5ZXIsZnQ9UytFPT09XCJuc2V3XCIscHQ9MT09PShTK0UpLmxlbmd0aDtmdW5jdGlvbiBkdCgpe2lmKEY9ZS54YXhpcyxHPWUueWF4aXMsSz1GLl9sZW5ndGgsUT1HLl9sZW5ndGgsJD1GLl9vZmZzZXQsSj1HLl9vZmZzZXQsKFk9e30pW0YuX2lkXT1GLChXPXt9KVtHLl9pZF09RyxTJiZFKWZvcih2YXIgcj1lLm92ZXJsYXlzLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXS54YXhpcztZW2kuX2lkXT1pO3ZhciBhPXJbbl0ueWF4aXM7V1thLl9pZF09YX1YPUgoWSksWj1IKFcpLHJ0PUwoWCxFKSxudD1MKFosUyksaXQ9IW50JiYhcnQsdHQ9VSh0LHQuX2Z1bGxMYXlvdXQuX2F4aXNDb25zdHJhaW50R3JvdXBzLFksVyksZXQ9VSh0LHQuX2Z1bGxMYXlvdXQuX2F4aXNNYXRjaEdyb3VwcyxZLFcpLGF0PUV8fHR0LmlzU3VicGxvdENvbnN0cmFpbmVkfHxldC5pc1N1YnBsb3RDb25zdHJhaW5lZCxvdD1TfHx0dC5pc1N1YnBsb3RDb25zdHJhaW5lZHx8ZXQuaXNTdWJwbG90Q29uc3RyYWluZWQ7dmFyIG89dC5fZnVsbExheW91dDtzdD1vLl9oYXMoXCJzY2F0dGVyZ2xcIiksbHQ9by5faGFzKFwic3Bsb21cIiksY3Q9by5faGFzKFwic3ZnXCIpfWR0KCk7dmFyIGd0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD9cIm5zZXdcIj09PXQ/cj9cIlwiOlwicGFuXCI9PT1lP1wibW92ZVwiOlwiY3Jvc3NoYWlyXCI6dC50b0xvd2VyQ2FzZSgpK1wiLXJlc2l6ZVwiOlwicG9pbnRlclwifShudCtydCx0Ll9mdWxsTGF5b3V0LmRyYWdtb2RlLGZ0KSx2dD1DKGUsUytFK1wiZHJhZ1wiLGd0LHIsYSxjLHApO2lmKGl0JiYhZnQpcmV0dXJuIHZ0Lm9ubW91c2Vkb3duPW51bGwsdnQuc3R5bGUucG9pbnRlckV2ZW50cz1cIm5vbmVcIix2dDt2YXIgbXQseXQseHQsYnQsX3Qsd3Qsa3QsQXQsVHQsTXQsU3Q9e2VsZW1lbnQ6dnQsZ2Q6dCxwbG90aW5mbzplfTtmdW5jdGlvbiBFdCgpe1N0LnBsb3RpbmZvLnNlbGVjdGlvbj0hMSxfKHQpfWZ1bmN0aW9uIEN0KHIsaSl7dmFyIGE9dC5fZnVsbExheW91dC5jbGlja21vZGU7aWYoQih0KSwyIT09cnx8cHR8fGZ1bmN0aW9uKCl7aWYoIXQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pe3ZhciBlPXQuX2NvbnRleHQuZG91YmxlQ2xpY2sscj1bXTtydCYmKHI9ci5jb25jYXQoWCkpLG50JiYocj1yLmNvbmNhdChaKSksZXQueGF4ZXMmJihyPXIuY29uY2F0KGV0LnhheGVzKSksZXQueWF4ZXMmJihyPXIuY29uY2F0KGV0LnlheGVzKSk7dmFyIG4saSxhLHM9e307aWYoXCJyZXNldCthdXRvc2l6ZVwiPT09ZSlmb3IoZT1cImF1dG9zaXplXCIsaT0wO2k8ci5sZW5ndGg7aSsrKWlmKChuPXJbaV0pLl9yYW5nZUluaXRpYWwmJihuLnJhbmdlWzBdIT09bi5fcmFuZ2VJbml0aWFsWzBdfHxuLnJhbmdlWzFdIT09bi5fcmFuZ2VJbml0aWFsWzFdKXx8IW4uX3JhbmdlSW5pdGlhbCYmIW4uYXV0b3JhbmdlKXtlPVwicmVzZXRcIjticmVha31pZihcImF1dG9zaXplXCI9PT1lKWZvcihpPTA7aTxyLmxlbmd0aDtpKyspKG49cltpXSkuZml4ZWRyYW5nZXx8KHNbbi5fbmFtZStcIi5hdXRvcmFuZ2VcIl09ITApO2Vsc2UgaWYoXCJyZXNldFwiPT09ZSlmb3IoKHJ0fHx0dC5pc1N1YnBsb3RDb25zdHJhaW5lZCkmJihyPXIuY29uY2F0KHR0LnhheGVzKSksbnQmJiF0dC5pc1N1YnBsb3RDb25zdHJhaW5lZCYmKHI9ci5jb25jYXQodHQueWF4ZXMpKSx0dC5pc1N1YnBsb3RDb25zdHJhaW5lZCYmKHJ0P250fHwocj1yLmNvbmNhdChaKSk6cj1yLmNvbmNhdChYKSksaT0wO2k8ci5sZW5ndGg7aSsrKShuPXJbaV0pLmZpeGVkcmFuZ2V8fChuLl9yYW5nZUluaXRpYWw/KGE9bi5fcmFuZ2VJbml0aWFsLHNbbi5fbmFtZStcIi5yYW5nZVswXVwiXT1hWzBdLHNbbi5fbmFtZStcIi5yYW5nZVsxXVwiXT1hWzFdKTpzW24uX25hbWUrXCIuYXV0b3JhbmdlXCJdPSEwKTt0LmVtaXQoXCJwbG90bHlfZG91YmxlY2xpY2tcIixudWxsKSxvLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix0LHMpfX0oKSxmdClhLmluZGV4T2YoXCJzZWxlY3RcIik+LTEmJncoaSx0LFgsWixlLmlkLFN0KSxhLmluZGV4T2YoXCJldmVudFwiKT4tMSYmaC5jbGljayh0LGksZS5pZCk7ZWxzZSBpZigxPT09ciYmcHQpe3ZhciBzPVM/RzpGLGM9XCJzXCI9PT1TfHxcIndcIj09PUU/MDoxLHU9cy5fbmFtZStcIi5yYW5nZVtcIitjK1wiXVwiLGY9ZnVuY3Rpb24odCxlKXt2YXIgcixpPXQucmFuZ2VbZV0sYT1NYXRoLmFicyhpLXQucmFuZ2VbMS1lXSk7cmV0dXJuXCJkYXRlXCI9PT10LnR5cGU/aTpcImxvZ1wiPT09dC50eXBlPyhyPU1hdGguY2VpbChNYXRoLm1heCgwLC1NYXRoLmxvZyhhKS9NYXRoLkxOMTApKSszLG4uZm9ybWF0KFwiLlwiK3IrXCJnXCIpKE1hdGgucG93KDEwLGkpKSk6KHI9TWF0aC5mbG9vcihNYXRoLmxvZyhNYXRoLmFicyhpKSkvTWF0aC5MTjEwKS1NYXRoLmZsb29yKE1hdGgubG9nKGEpL01hdGguTE4xMCkrNCxuLmZvcm1hdChcIi5cIitTdHJpbmcocikrXCJnXCIpKGkpKX0ocyxjKSxwPVwibGVmdFwiLGQ9XCJtaWRkbGVcIjtpZihzLmZpeGVkcmFuZ2UpcmV0dXJuO1M/KGQ9XCJuXCI9PT1TP1widG9wXCI6XCJib3R0b21cIixcInJpZ2h0XCI9PT1zLnNpZGUmJihwPVwicmlnaHRcIikpOlwiZVwiPT09RSYmKHA9XCJyaWdodFwiKSx0Ll9jb250ZXh0LnNob3dBeGlzUmFuZ2VFbnRyeUJveGVzJiZuLnNlbGVjdCh2dCkuY2FsbChsLm1ha2VFZGl0YWJsZSx7Z2Q6dCxpbW1lZGlhdGU6ITAsYmFja2dyb3VuZDp0Ll9mdWxsTGF5b3V0LnBhcGVyX2JnY29sb3IsdGV4dDpTdHJpbmcoZiksZmlsbDpzLnRpY2tmb250P3MudGlja2ZvbnQuY29sb3I6XCIjNDQ0XCIsaG9yaXpvbnRhbEFsaWduOnAsdmVydGljYWxBbGlnbjpkfSkub24oXCJlZGl0XCIsZnVuY3Rpb24oZSl7dmFyIHI9cy5kMnIoZSk7dm9pZCAwIT09ciYmby5jYWxsKFwiX2d1aVJlbGF5b3V0XCIsdCx1LHIpfSl9fWZ1bmN0aW9uIEx0KGUscil7aWYodC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbilyZXR1cm4hMTt2YXIgbj1NYXRoLm1heCgwLE1hdGgubWluKEssZSttdCkpLGk9TWF0aC5tYXgoMCxNYXRoLm1pbihRLHIreXQpKSxhPU1hdGguYWJzKG4tbXQpLG89TWF0aC5hYnMoaS15dCk7ZnVuY3Rpb24gcygpe2t0PVwiXCIseHQucj14dC5sLHh0LnQ9eHQuYixUdC5hdHRyKFwiZFwiLFwiTTAsMFpcIil9aWYoeHQubD1NYXRoLm1pbihtdCxuKSx4dC5yPU1hdGgubWF4KG10LG4pLHh0LnQ9TWF0aC5taW4oeXQsaSkseHQuYj1NYXRoLm1heCh5dCxpKSx0dC5pc1N1YnBsb3RDb25zdHJhaW5lZClhPk18fG8+TT8oa3Q9XCJ4eVwiLGEvSz5vL1E/KG89YSpRL0sseXQ+aT94dC50PXl0LW86eHQuYj15dCtvKTooYT1vKksvUSxtdD5uP3h0Lmw9bXQtYTp4dC5yPW10K2EpLFR0LmF0dHIoXCJkXCIsVih4dCkpKTpzKCk7ZWxzZSBpZihldC5pc1N1YnBsb3RDb25zdHJhaW5lZClpZihhPk18fG8+TSl7a3Q9XCJ4eVwiO3ZhciBsPU1hdGgubWluKHh0LmwvSywoUS14dC5iKS9RKSxjPU1hdGgubWF4KHh0LnIvSywoUS14dC50KS9RKTt4dC5sPWwqSyx4dC5yPWMqSyx4dC5iPSgxLWwpKlEseHQudD0oMS1jKSpRLFR0LmF0dHIoXCJkXCIsVih4dCkpfWVsc2UgcygpO2Vsc2UhbnR8fG88TWF0aC5taW4oTWF0aC5tYXgoLjYqYSxUKSxNKT9hPFR8fCFydD9zKCk6KHh0LnQ9MCx4dC5iPVEsa3Q9XCJ4XCIsVHQuYXR0cihcImRcIixmdW5jdGlvbih0LGUpe3JldHVyblwiTVwiKyh0LmwtLjUpK1wiLFwiKyhlLU0tLjUpK1wiaC0zdlwiKygyKk0rMSkrXCJoM1pNXCIrKHQucisuNSkrXCIsXCIrKGUtTS0uNSkrXCJoM3ZcIisoMipNKzEpK1wiaC0zWlwifSh4dCx5dCkpKTohcnR8fGE8TWF0aC5taW4oLjYqbyxNKT8oeHQubD0wLHh0LnI9SyxrdD1cInlcIixUdC5hdHRyKFwiZFwiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJNXCIrKGUtTS0uNSkrXCIsXCIrKHQudC0uNSkrXCJ2LTNoXCIrKDIqTSsxKStcInYzWk1cIisoZS1NLS41KStcIixcIisodC5iKy41KStcInYzaFwiKygyKk0rMSkrXCJ2LTNaXCJ9KHh0LG10KSkpOihrdD1cInh5XCIsVHQuYXR0cihcImRcIixWKHh0KSkpO3h0Lnc9eHQuci14dC5sLHh0Lmg9eHQuYi14dC50LGt0JiYoTXQ9ITApLHQuX2RyYWdnZWQ9TXQsUihBdCxUdCx4dCxfdCx3dCxidCksd3Q9ITB9ZnVuY3Rpb24genQoKXtpZih1dD17fSxNYXRoLm1pbih4dC5oLHh0LncpPDIqVClyZXR1cm4gQih0KTtcInh5XCIhPT1rdCYmXCJ4XCIhPT1rdHx8KHooWCx4dC5sL0sseHQuci9LLHV0LHR0LnhheGVzKSxGdChcInhcIix1dCkpLFwieHlcIiE9PWt0JiZcInlcIiE9PWt0fHwoeihaLChRLXh0LmIpL1EsKFEteHQudCkvUSx1dCx0dC55YXhlcyksRnQoXCJ5XCIsdXQpKSxCKHQpLE50KCksTih0KX1TdC5wcmVwRm49ZnVuY3Rpb24oZSxyLG4pe3ZhciBhPVN0LmRyYWdtb2RlLG89dC5fZnVsbExheW91dC5kcmFnbW9kZTtvIT09YSYmKFN0LmRyYWdtb2RlPW8pLGR0KCksaXR8fChmdD9lLnNoaWZ0S2V5P1wicGFuXCI9PT1vP289XCJ6b29tXCI6aihvKXx8KG89XCJwYW5cIik6ZS5jdHJsS2V5JiYobz1cInBhblwiKTpvPVwicGFuXCIpLFN0Lm1pbkRyYWc9XCJsYXNzb1wiPT09bz8xOnZvaWQgMCxqKG8pPyhTdC54YXhlcz1YLFN0LnlheGVzPVosYihlLHIsbixTdCxvKSk6KFN0LmNsaWNrRm49Q3QsaihhKSYmRXQoKSxpdHx8KFwiem9vbVwiPT09bz8oU3QubW92ZUZuPUx0LFN0LmRvbmVGbj16dCxTdC5taW5EcmFnPTEsZnVuY3Rpb24oZSxyLG4pe3ZhciBhPXZ0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO210PXItYS5sZWZ0LHl0PW4tYS50b3AseHQ9e2w6bXQscjptdCx3OjAsdDp5dCxiOnl0LGg6MH0sYnQ9dC5faG1waXhjb3VudD90Ll9obWx1bWNvdW50L3QuX2htcGl4Y291bnQ6aSh0Ll9mdWxsTGF5b3V0LnBsb3RfYmdjb2xvcikuZ2V0THVtaW5hbmNlKCksd3Q9ITEsa3Q9XCJ4eVwiLE10PSExLEF0PUQoaHQsYnQsJCxKLF90PVwiTTAsMEhcIitLK1wiVlwiK1ErXCJIMFYwXCIpLFR0PVAoaHQsJCxKKX0oMCxyLG4pKTpcInBhblwiPT09byYmKFN0Lm1vdmVGbj1SdCxTdC5kb25lRm49TnQpKSksdC5fZnVsbExheW91dC5fcmVkcmFnPWZ1bmN0aW9uKCl7dmFyIGU9dC5fZHJhZ2RhdGE7ZSYmZS5lbGVtZW50PT09dnQmJihqKHQuX2Z1bGxMYXlvdXQuZHJhZ21vZGUpfHwoZHQoKSxqdChbMCwwLEssUV0pLFN0Lm1vdmVGbihlLmR4LGUuZHkpKSl9fSxkLmluaXQoU3QpO3ZhciBPdD1bMCwwLEssUV0sSXQ9bnVsbCxEdD1BLlJFRFJBV0RFTEFZLFB0PWUubWFpbnBsb3Q/dC5fZnVsbExheW91dC5fcGxvdHNbZS5tYWlucGxvdF06ZTtmdW5jdGlvbiBSdChlLHIpe2lmKCF0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uKXtpZih0Ll9mdWxsTGF5b3V0Ll9yZXBsb3R0aW5nPSEwLFwiZXdcIj09PXJ0fHxcIm5zXCI9PT1udClyZXR1cm4gcnQmJihPKFgsZSksRnQoXCJ4XCIpKSxudCYmKE8oWixyKSxGdChcInlcIikpLGp0KFtydD8tZTowLG50Py1yOjAsSyxRXSksdm9pZCBCdCgpO2lmKHR0LmlzU3VicGxvdENvbnN0cmFpbmVkJiZydCYmbnQpe3ZhciBuPVwid1wiPT09cnQ9PShcIm5cIj09PW50KT8xOi0xLGk9KGUvSytuKnIvUSkvMjtlPWkqSyxyPW4qaSpRfVwid1wiPT09cnQ/ZT1sKFgsMCxlKTpcImVcIj09PXJ0P2U9bChYLDEsLWUpOnJ0fHwoZT0wKSxcIm5cIj09PW50P3I9bChaLDEscik6XCJzXCI9PT1udD9yPWwoWiwwLC1yKTpudHx8KHI9MCk7dmFyIGE9XCJ3XCI9PT1ydD9lOjAsbz1cIm5cIj09PW50P3I6MDtpZih0dC5pc1N1YnBsb3RDb25zdHJhaW5lZCl7dmFyIHM7aWYoIXJ0JiYxPT09bnQubGVuZ3RoKXtmb3Iocz0wO3M8WC5sZW5ndGg7cysrKVhbc10ucmFuZ2U9WFtzXS5fci5zbGljZSgpLGsoWFtzXSwxLXIvUSk7YT0oZT1yKksvUSkvMn1pZighbnQmJjE9PT1ydC5sZW5ndGgpe2ZvcihzPTA7czxaLmxlbmd0aDtzKyspWltzXS5yYW5nZT1aW3NdLl9yLnNsaWNlKCksayhaW3NdLDEtZS9LKTtvPShyPWUqUS9LKS8yfX1GdChcInhcIiksRnQoXCJ5XCIpLGp0KFthLG8sSy1lLFEtcl0pLEJ0KCl9ZnVuY3Rpb24gbCh0LGUscil7Zm9yKHZhciBuLGksYT0xLWUsbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dO2lmKCFzLmZpeGVkcmFuZ2Upe249cyxpPXMuX3JsW2FdKyhzLl9ybFtlXS1zLl9ybFthXSkvSShyL3MuX2xlbmd0aCk7dmFyIGw9cy5sMnIoaSk7ITEhPT1sJiZ2b2lkIDAhPT1sJiYocy5yYW5nZVtlXT1sKX19cmV0dXJuIG4uX2xlbmd0aCoobi5fcmxbZV0taSkvKG4uX3JsW2VdLW4uX3JsW2FdKX19ZnVuY3Rpb24gRnQodCxlKXtmb3IodmFyIHI9ZXQuaXNTdWJwbG90Q29uc3RyYWluZWQ/e3g6Wix5Olh9W3RdOmV0W3QrXCJheGVzXCJdLG49ZXQuaXNTdWJwbG90Q29uc3RyYWluZWQ/e3g6WCx5Olp9W3RdOltdLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXSxvPWEuX2lkLHM9ZXQueExpbmtzW29dfHxldC55TGlua3Nbb10sbD1uWzBdfHxZW3NdfHxXW3NdO2lmKGwpe3ZhciBjPWwucmFuZ2U7ZT8oZVthLl9uYW1lK1wiLnJhbmdlWzBdXCJdPWNbMF0sZVthLl9uYW1lK1wiLnJhbmdlWzFdXCJdPWNbMV0pOmEucmFuZ2U9Y319fWZ1bmN0aW9uIEJ0KCl7dmFyIGUscj1bXTtmdW5jdGlvbiBuKHQpe2ZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5maXhlZHJhbmdlfHxyLnB1c2godFtlXS5faWQpfWZvcihhdCYmKG4oWCksbih0dC54YXhlcyksbihldC54YXhlcykpLG90JiYobihaKSxuKHR0LnlheGVzKSxuKGV0LnlheGVzKSksdXQ9e30sZT0wO2U8ci5sZW5ndGg7ZSsrKXt2YXIgaT1yW2VdLGE9eCh0LGkpO2YuZHJhd09uZSh0LGEse3NraXBUaXRsZTohMH0pLHV0W2EuX25hbWUrXCIucmFuZ2VbMF1cIl09YS5yYW5nZVswXSx1dFthLl9uYW1lK1wiLnJhbmdlWzFdXCJdPWEucmFuZ2VbMV19Zi5yZWRyYXdDb21wb25lbnRzKHQscil9ZnVuY3Rpb24gTnQoKXtqdChbMCwwLEssUV0pLHMuc3luY09yQXN5bmMoW3kucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe3QuX2Z1bGxMYXlvdXQuX3JlcGxvdHRpbmc9ITEsby5jYWxsKFwiX2d1aVJlbGF5b3V0XCIsdCx1dCl9XSx0KX1mdW5jdGlvbiBqdChlKXt2YXIgcixuLGksYSxsPXQuX2Z1bGxMYXlvdXQsYz1sLl9wbG90cyxoPWwuX3N1YnBsb3RzLmNhcnRlc2lhbjtpZihsdCYmby5zdWJwbG90c1JlZ2lzdHJ5LnNwbG9tLmRyYWcodCksc3QpZm9yKHI9MDtyPGgubGVuZ3RoO3IrKylpZihpPShuPWNbaFtyXV0pLnhheGlzLGE9bi55YXhpcyxuLl9zY2VuZSl7dmFyIGY9cy5zaW1wbGVNYXAoaS5yYW5nZSxpLnIybCkscD1zLnNpbXBsZU1hcChhLnJhbmdlLGEucjJsKTtuLl9zY2VuZS51cGRhdGUoe3JhbmdlOltmWzBdLHBbMF0sZlsxXSxwWzFdXX0pfWlmKChsdHx8c3QpJiYodih0KSxtKHQpKSxjdCl7dmFyIGQ9ZVsyXS9GLl9sZW5ndGgsZz1lWzNdL0cuX2xlbmd0aDtmb3Iocj0wO3I8aC5sZW5ndGg7cisrKXtpPShuPWNbaFtyXV0pLnhheGlzLGE9bi55YXhpczt2YXIgeSx4LGIsXyx3PWF0JiYhaS5maXhlZHJhbmdlJiZZW2kuX2lkXSxrPW90JiYhYS5maXhlZHJhbmdlJiZXW2EuX2lkXTtpZih3Pyh5PWQsYj1FP2VbMF06cXQoaSx5KSk6ZXQueGFIYXNoW2kuX2lkXT8oeT1kLGI9ZVswXSppLl9sZW5ndGgvRi5fbGVuZ3RoKTpldC55YUhhc2hbaS5faWRdPyh5PWcsYj1cIm5zXCI9PT1udD8tZVsxXSppLl9sZW5ndGgvRy5fbGVuZ3RoOnF0KGkseSx7bjpcInRvcFwiLHM6XCJib3R0b21cIn1bbnRdKSk6Yj1VdChpLHk9VnQoaSxkLGcpKSxrPyh4PWcsXz1TP2VbMV06cXQoYSx4KSk6ZXQueWFIYXNoW2EuX2lkXT8oeD1nLF89ZVsxXSphLl9sZW5ndGgvRy5fbGVuZ3RoKTpldC54YUhhc2hbYS5faWRdPyh4PWQsXz1cImV3XCI9PT1ydD8tZVswXSphLl9sZW5ndGgvRi5fbGVuZ3RoOnF0KGEseCx7ZTpcInJpZ2h0XCIsdzpcImxlZnRcIn1bcnRdKSk6Xz1VdChhLHg9VnQoYSxkLGcpKSx5fHx4KXt5fHwoeT0xKSx4fHwoeD0xKTt2YXIgQT1pLl9vZmZzZXQtYi95LFQ9YS5fb2Zmc2V0LV8veDtuLmNsaXBSZWN0LmNhbGwodS5zZXRUcmFuc2xhdGUsYixfKS5jYWxsKHUuc2V0U2NhbGUseSx4KSxuLnBsb3QuY2FsbCh1LnNldFRyYW5zbGF0ZSxBLFQpLmNhbGwodS5zZXRTY2FsZSwxL3ksMS94KSx5PT09bi54U2NhbGVGYWN0b3ImJng9PT1uLnlTY2FsZUZhY3Rvcnx8KHUuc2V0UG9pbnRHcm91cFNjYWxlKG4uem9vbVNjYWxlUHRzLHkseCksdS5zZXRUZXh0UG9pbnRzU2NhbGUobi56b29tU2NhbGVUeHQseSx4KSksdS5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzKG4uY2xpcE9uQXhpc0ZhbHNlVHJhY2VzLG4pLG4ueFNjYWxlRmFjdG9yPXksbi55U2NhbGVGYWN0b3I9eH19fX1mdW5jdGlvbiBWdCh0LGUscil7cmV0dXJuIHQuZml4ZWRyYW5nZT8wOmF0JiZ0dC54YUhhc2hbdC5faWRdP2U6b3QmJih0dC5pc1N1YnBsb3RDb25zdHJhaW5lZD90dC54YUhhc2g6dHQueWFIYXNoKVt0Ll9pZF0/cjowfWZ1bmN0aW9uIFV0KHQsZSl7cmV0dXJuIGU/KHQucmFuZ2U9dC5fci5zbGljZSgpLGsodCxlKSxxdCh0LGUpKTowfWZ1bmN0aW9uIHF0KHQsZSxyKXtyZXR1cm4gdC5fbGVuZ3RoKigxLWUpKmdbcnx8dC5jb25zdHJhaW50b3dhcmR8fFwibWlkZGxlXCJdfXJldHVybiBTLmxlbmd0aCpFLmxlbmd0aCE9MSYmcSh2dCxmdW5jdGlvbihlKXtpZih0Ll9jb250ZXh0Ll9zY3JvbGxab29tLmNhcnRlc2lhbnx8dC5fZnVsbExheW91dC5fZW5hYmxlc2Nyb2xsem9vbSl7aWYoRXQoKSx0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uKXJldHVybiBlLnByZXZlbnREZWZhdWx0KCksdm9pZCBlLnN0b3BQcm9wYWdhdGlvbigpO2R0KCksY2xlYXJUaW1lb3V0KEl0KTt2YXIgcj0tZS5kZWx0YVk7aWYoaXNGaW5pdGUocil8fChyPWUud2hlZWxEZWx0YS8xMCksaXNGaW5pdGUocikpe3ZhciBuLGk9TWF0aC5leHAoLU1hdGgubWluKE1hdGgubWF4KHIsLTIwKSwyMCkvMjAwKSxhPVB0LmRyYWdsYXllci5zZWxlY3QoXCIubnNld2RyYWdcIikubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89KGUuY2xpZW50WC1hLmxlZnQpL2Eud2lkdGgsbD0oYS5ib3R0b20tZS5jbGllbnRZKS9hLmhlaWdodDtpZihhdCl7Zm9yKEV8fChvPS41KSxuPTA7bjxYLmxlbmd0aDtuKyspYyhYW25dLG8saSk7RnQoXCJ4XCIpLE90WzJdKj1pLE90WzBdKz1PdFsyXSpvKigxL2ktMSl9aWYob3Qpe2ZvcihTfHwobD0uNSksbj0wO248Wi5sZW5ndGg7bisrKWMoWltuXSxsLGkpO0Z0KFwieVwiKSxPdFszXSo9aSxPdFsxXSs9T3RbM10qKDEtbCkqKDEvaS0xKX1qdChPdCksQnQoKSxJdD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7T3Q9WzAsMCxLLFFdLE50KCl9LER0KSxlLnByZXZlbnREZWZhdWx0KCl9ZWxzZSBzLmxvZyhcIkRpZCBub3QgZmluZCB3aGVlbCBtb3Rpb24gYXR0cmlidXRlczogXCIsZSl9ZnVuY3Rpb24gYyh0LGUscil7aWYoIXQuZml4ZWRyYW5nZSl7dmFyIG49cy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCksaT1uWzBdKyhuWzFdLW5bMF0pKmU7dC5yYW5nZT1uLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdC5sMnIoaSsoZS1pKSpyKX0pfX19KSx2dH0sbWFrZURyYWdnZXI6RSxtYWtlUmVjdERyYWdnZXI6QyxtYWtlWm9vbWJveDpELG1ha2VDb3JuZXJzOlAsdXBkYXRlWm9vbWJveDpSLHh5Q29ybmVyczpWLHRyYW5zaXRpb25ab29tYm94OkYscmVtb3ZlWm9vbWJveDpCLHNob3dEb3VibGVDbGlja05vdGlmaWVyOk4sYXR0YWNoV2hlZWxFdmVudEhhbmRsZXI6cX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50XCI6NTk2LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIjo2NzMsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvY2xlYXJfZ2xfY2FudmFzZXNcIjo2ODYsXCIuLi8uLi9saWIvc2V0Y3Vyc29yXCI6NzIxLFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCI6NzI1LFwiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXNcIjo3NDAsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL3Bsb3RzXCI6ODEwLFwiLi9heGVzXCI6NzQ5LFwiLi9heGlzX2lkc1wiOjc1MixcIi4vY29uc3RhbnRzXCI6NzU1LFwiLi9zY2FsZV96b29tXCI6NzY1LFwiLi9zZWxlY3RcIjo3NjYsZDM6MTU1LFwiaGFzLXBhc3NpdmUtZXZlbnRzXCI6NDA0LHRpbnljb2xvcjI6NTIyfV0sNzU4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudFwiKSxvPXQoXCIuLi8uLi9saWIvc2V0Y3Vyc29yXCIpLHM9dChcIi4vZHJhZ2JveFwiKS5tYWtlRHJhZ0JveCxsPXQoXCIuL2NvbnN0YW50c1wiKS5EUkFHR0VSU0laRTtyLmluaXRJbnRlcmFjdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtpZih0Ll9jb250ZXh0LnN0YXRpY1Bsb3Qpbi5zZWxlY3QodCkuc2VsZWN0QWxsKFwiLmRyYWdcIikucmVtb3ZlKCk7ZWxzZSBpZihlLl9oYXMoXCJjYXJ0ZXNpYW5cIil8fGUuX2hhcyhcInNwbG9tXCIpKXtPYmplY3Qua2V5cyhlLl9wbG90c3x8e30pLnNvcnQoZnVuY3Rpb24odCxyKXtpZigoZS5fcGxvdHNbdF0ubWFpbnBsb3QmJiEwKT09PShlLl9wbG90c1tyXS5tYWlucGxvdCYmITApKXt2YXIgbj10LnNwbGl0KFwieVwiKSxpPXIuc3BsaXQoXCJ5XCIpO3JldHVybiBuWzBdPT09aVswXT9OdW1iZXIoblsxXXx8MSktTnVtYmVyKGlbMV18fDEpOk51bWJlcihuWzBdfHwxKS1OdW1iZXIoaVswXXx8MSl9cmV0dXJuIGUuX3Bsb3RzW3RdLm1haW5wbG90PzE6LTF9KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBuPWUuX3Bsb3RzW3JdLG89bi54YXhpcyxjPW4ueWF4aXM7aWYoIW4ubWFpbnBsb3Qpe3ZhciB1PXModCxuLG8uX29mZnNldCxjLl9vZmZzZXQsby5fbGVuZ3RoLGMuX2xlbmd0aCxcIm5zXCIsXCJld1wiKTt1Lm9ubW91c2Vtb3ZlPWZ1bmN0aW9uKGUpe3QuX2Z1bGxMYXlvdXQuX3JlaG92ZXI9ZnVuY3Rpb24oKXt0Ll9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9PT1yJiZpLmhvdmVyKHQsZSxyKX0saS5ob3Zlcih0LGUsciksdC5fZnVsbExheW91dC5fbGFzdGhvdmVyPXUsdC5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PXJ9LHUub25tb3VzZW91dD1mdW5jdGlvbihlKXt0Ll9kcmFnZ2luZ3x8KHQuX2Z1bGxMYXlvdXQuX2hvdmVyc3VicGxvdD1udWxsLGEudW5ob3Zlcih0LGUpKX0sdC5fY29udGV4dC5zaG93QXhpc0RyYWdIYW5kbGVzJiYocyh0LG4sby5fb2Zmc2V0LWwsYy5fb2Zmc2V0LWwsbCxsLFwiblwiLFwid1wiKSxzKHQsbixvLl9vZmZzZXQrby5fbGVuZ3RoLGMuX29mZnNldC1sLGwsbCxcIm5cIixcImVcIikscyh0LG4sby5fb2Zmc2V0LWwsYy5fb2Zmc2V0K2MuX2xlbmd0aCxsLGwsXCJzXCIsXCJ3XCIpLHModCxuLG8uX29mZnNldCtvLl9sZW5ndGgsYy5fb2Zmc2V0K2MuX2xlbmd0aCxsLGwsXCJzXCIsXCJlXCIpKX1pZih0Ll9jb250ZXh0LnNob3dBeGlzRHJhZ0hhbmRsZXMpe2lmKHI9PT1vLl9tYWluU3VicGxvdCl7dmFyIGg9by5fbWFpbkxpbmVQb3NpdGlvbjtcInRvcFwiPT09by5zaWRlJiYoaC09bCkscyh0LG4sby5fb2Zmc2V0Ky4xKm8uX2xlbmd0aCxoLC44Km8uX2xlbmd0aCxsLFwiXCIsXCJld1wiKSxzKHQsbixvLl9vZmZzZXQsaCwuMSpvLl9sZW5ndGgsbCxcIlwiLFwid1wiKSxzKHQsbixvLl9vZmZzZXQrLjkqby5fbGVuZ3RoLGgsLjEqby5fbGVuZ3RoLGwsXCJcIixcImVcIil9aWYocj09PWMuX21haW5TdWJwbG90KXt2YXIgZj1jLl9tYWluTGluZVBvc2l0aW9uO1wicmlnaHRcIiE9PWMuc2lkZSYmKGYtPWwpLHModCxuLGYsYy5fb2Zmc2V0Ky4xKmMuX2xlbmd0aCxsLC44KmMuX2xlbmd0aCxcIm5zXCIsXCJcIikscyh0LG4sZixjLl9vZmZzZXQrLjkqYy5fbGVuZ3RoLGwsLjEqYy5fbGVuZ3RoLFwic1wiLFwiXCIpLHModCxuLGYsYy5fb2Zmc2V0LGwsLjEqYy5fbGVuZ3RoLFwiblwiLFwiXCIpfX19KTt2YXIgbz1lLl9ob3ZlcmxheWVyLm5vZGUoKTtvLm9ubW91c2Vtb3ZlPWZ1bmN0aW9uKHIpe3IudGFyZ2V0PXQuX2Z1bGxMYXlvdXQuX2xhc3Rob3ZlcixpLmhvdmVyKHQscixlLl9ob3ZlcnN1YnBsb3QpfSxvLm9uY2xpY2s9ZnVuY3Rpb24oZSl7ZS50YXJnZXQ9dC5fZnVsbExheW91dC5fbGFzdGhvdmVyLGkuY2xpY2sodCxlKX0sby5vbm1vdXNlZG93bj1mdW5jdGlvbihlKXt0Ll9mdWxsTGF5b3V0Ll9sYXN0aG92ZXIub25tb3VzZWRvd24oZSl9LHIudXBkYXRlRngodCl9fSxyLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1cInBhblwiPT09ZS5kcmFnbW9kZT9cIm1vdmVcIjpcImNyb3NzaGFpclwiO28oZS5fZHJhZ2dlcnMscil9fSx7XCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50XCI6NTk2LFwiLi4vLi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4uLy4uL2xpYi9zZXRjdXJzb3JcIjo3MjEsXCIuL2NvbnN0YW50c1wiOjc1NSxcIi4vZHJhZ2JveFwiOjc1NyxkMzoxNTV9XSw3NTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIiksaT10KFwiLi4vLi4vbGliXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgYT1lW3RdO2lmKEFycmF5LmlzQXJyYXkoYSkpZm9yKHZhciBvPW4uc3VicGxvdHNSZWdpc3RyeS5jYXJ0ZXNpYW4scz1vLmlkUmVnZXgsbD1yLl9zdWJwbG90cyxjPWwueGF4aXMsdT1sLnlheGlzLGg9bC5jYXJ0ZXNpYW4sZj1yLl9oYXMoXCJjYXJ0ZXNpYW5cIil8fHIuX2hhcyhcImdsMmRcIikscD0wO3A8YS5sZW5ndGg7cCsrKXt2YXIgZD1hW3BdO2lmKGkuaXNQbGFpbk9iamVjdChkKSl7dmFyIGc9ZC54cmVmLHY9ZC55cmVmLG09cy54LnRlc3QoZykseT1zLnkudGVzdCh2KTtpZihtfHx5KXtmfHxpLnB1c2hVbmlxdWUoci5fYmFzZVBsb3RNb2R1bGVzLG8pO3ZhciB4PSExO20mJi0xPT09Yy5pbmRleE9mKGcpJiYoYy5wdXNoKGcpLHg9ITApLHkmJi0xPT09dS5pbmRleE9mKHYpJiYodS5wdXNoKHYpLHg9ITApLHgmJm0mJnkmJmgucHVzaChnK3YpfX19fX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5fV0sNzYwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGE9dChcIi4uLy4uL2xpYlwiKSxvPXQoXCIuLi9wbG90c1wiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksbD10KFwiLi4vZ2V0X2RhdGFcIikuZ2V0TW9kdWxlQ2FsY0RhdGEsYz10KFwiLi9heGlzX2lkc1wiKSx1PXQoXCIuL2NvbnN0YW50c1wiKSxoPXQoXCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiKSxmPWEuZW5zdXJlU2luZ2xlO2Z1bmN0aW9uIHAodCxlLHIpe3JldHVybiBhLmVuc3VyZVNpbmdsZSh0LGUscixmdW5jdGlvbih0KXt0LmRhdHVtKHIpfSl9ZnVuY3Rpb24gZCh0LGUscixhLG8pe2Zvcih2YXIgYyxoLGYscD11LnRyYWNlTGF5ZXJDbGFzc2VzLGQ9dC5fZnVsbExheW91dCxnPWQuX21vZHVsZXMsdj1bXSxtPVtdLHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIHg9KGM9Z1t5XSkubmFtZSxiPWkubW9kdWxlc1t4XS5jYXRlZ29yaWVzO2lmKGIuc3ZnKXt2YXIgXz1jLmxheWVyTmFtZXx8eCtcImxheWVyXCIsdz1jLnBsb3Q7Zj0oaD1sKHIsdykpWzBdLHI9aFsxXSxmLmxlbmd0aCYmdi5wdXNoKHtpOnAuaW5kZXhPZihfKSxjbGFzc05hbWU6XyxwbG90TWV0aG9kOncsY2RNb2R1bGU6Zn0pLGIuem9vbVNjYWxlJiZtLnB1c2goXCIuXCIrXyl9fXYuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmktZS5pfSk7dmFyIGs9ZS5wbG90LnNlbGVjdEFsbChcImcubWxheWVyXCIpLmRhdGEodixmdW5jdGlvbih0KXtyZXR1cm4gdC5jbGFzc05hbWV9KTtpZihrLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5jbGFzc05hbWV9KS5jbGFzc2VkKFwibWxheWVyXCIsITApLGsuZXhpdCgpLnJlbW92ZSgpLGsub3JkZXIoKSxrLmVhY2goZnVuY3Rpb24ocil7dmFyIGk9bi5zZWxlY3QodGhpcyksbD1yLmNsYXNzTmFtZTtyLnBsb3RNZXRob2QodCxlLHIuY2RNb2R1bGUsaSxhLG8pLFwic2NhdHRlcmxheWVyXCIhPT1sJiZcImJhcmxheWVyXCIhPT1sJiZcIndhdGVyZmFsbGxheWVyXCIhPT1sJiZzLnNldENsaXBVcmwoaSxlLmxheWVyQ2xpcElkLHQpfSksZC5faGFzKFwic2NhdHRlcmdsXCIpJiYoYz1pLmdldE1vZHVsZShcInNjYXR0ZXJnbFwiKSxmPWwocixjKVswXSxjLnBsb3QodCxlLGYpKSwhdC5fY29udGV4dC5zdGF0aWNQbG90JiYoZS5faGFzQ2xpcE9uQXhpc0ZhbHNlJiYoZS5jbGlwT25BeGlzRmFsc2VUcmFjZXM9ZS5wbG90LnNlbGVjdEFsbChcIi5zY2F0dGVybGF5ZXIsIC5iYXJsYXllciwgLndhdGVyZmFsbGxheWVyXCIpLnNlbGVjdEFsbChcIi50cmFjZVwiKSksbS5sZW5ndGgpKXt2YXIgQT1lLnBsb3Quc2VsZWN0QWxsKG0uam9pbihcIixcIikpLnNlbGVjdEFsbChcIi50cmFjZVwiKTtlLnpvb21TY2FsZVB0cz1BLnNlbGVjdEFsbChcInBhdGgucG9pbnRcIiksZS56b29tU2NhbGVUeHQ9QS5zZWxlY3RBbGwoXCIudGV4dHBvaW50XCIpfX1mdW5jdGlvbiBnKHQsZSl7dmFyIHI9ZS5wbG90Z3JvdXAsbj1lLmlkLGk9dS5sYXllclZhbHVlMmxheWVyQ2xhc3NbZS54YXhpcy5sYXllcl0sYT11LmxheWVyVmFsdWUybGF5ZXJDbGFzc1tlLnlheGlzLmxheWVyXSxvPXQuX2Z1bGxMYXlvdXQuX2hhc09ubHlMYXJnZVNwbG9tcztpZihlLm1haW5wbG90KXt2YXIgcz1lLm1haW5wbG90aW5mbyxsPXMucGxvdGdyb3VwLGg9bitcIi14XCIsZD1uK1wiLXlcIjtlLmdyaWRsYXllcj1zLmdyaWRsYXllcixlLnplcm9saW5lbGF5ZXI9cy56ZXJvbGluZWxheWVyLGYocy5vdmVybGluZXNCZWxvdyxcInBhdGhcIixoKSxmKHMub3ZlcmxpbmVzQmVsb3csXCJwYXRoXCIsZCksZihzLm92ZXJheGVzQmVsb3csXCJnXCIsaCksZihzLm92ZXJheGVzQmVsb3csXCJnXCIsZCksZS5wbG90PWYocy5vdmVycGxvdCxcImdcIixuKSxmKHMub3ZlcmxpbmVzQWJvdmUsXCJwYXRoXCIsaCksZihzLm92ZXJsaW5lc0Fib3ZlLFwicGF0aFwiLGQpLGYocy5vdmVyYXhlc0Fib3ZlLFwiZ1wiLGgpLGYocy5vdmVyYXhlc0Fib3ZlLFwiZ1wiLGQpLGUueGxpbmVzPWwuc2VsZWN0KFwiLm92ZXJsaW5lcy1cIitpKS5zZWxlY3QoXCIuXCIraCksZS55bGluZXM9bC5zZWxlY3QoXCIub3ZlcmxpbmVzLVwiK2EpLnNlbGVjdChcIi5cIitkKSxlLnhheGlzbGF5ZXI9bC5zZWxlY3QoXCIub3ZlcmF4ZXMtXCIraSkuc2VsZWN0KFwiLlwiK2gpLGUueWF4aXNsYXllcj1sLnNlbGVjdChcIi5vdmVyYXhlcy1cIithKS5zZWxlY3QoXCIuXCIrZCl9ZWxzZSBpZihvKWUueGxpbmVzPWYocixcInBhdGhcIixcInhsaW5lcy1hYm92ZVwiKSxlLnlsaW5lcz1mKHIsXCJwYXRoXCIsXCJ5bGluZXMtYWJvdmVcIiksZS54YXhpc2xheWVyPWYocixcImdcIixcInhheGlzbGF5ZXItYWJvdmVcIiksZS55YXhpc2xheWVyPWYocixcImdcIixcInlheGlzbGF5ZXItYWJvdmVcIik7ZWxzZXt2YXIgZz1mKHIsXCJnXCIsXCJsYXllci1zdWJwbG90XCIpO2Uuc2hhcGVsYXllcj1mKGcsXCJnXCIsXCJzaGFwZWxheWVyXCIpLGUuaW1hZ2VsYXllcj1mKGcsXCJnXCIsXCJpbWFnZWxheWVyXCIpLGUuZ3JpZGxheWVyPWYocixcImdcIixcImdyaWRsYXllclwiKSxlLnplcm9saW5lbGF5ZXI9ZihyLFwiZ1wiLFwiemVyb2xpbmVsYXllclwiKSxmKHIsXCJwYXRoXCIsXCJ4bGluZXMtYmVsb3dcIiksZihyLFwicGF0aFwiLFwieWxpbmVzLWJlbG93XCIpLGUub3ZlcmxpbmVzQmVsb3c9ZihyLFwiZ1wiLFwib3ZlcmxpbmVzLWJlbG93XCIpLGYocixcImdcIixcInhheGlzbGF5ZXItYmVsb3dcIiksZihyLFwiZ1wiLFwieWF4aXNsYXllci1iZWxvd1wiKSxlLm92ZXJheGVzQmVsb3c9ZihyLFwiZ1wiLFwib3ZlcmF4ZXMtYmVsb3dcIiksZS5wbG90PWYocixcImdcIixcInBsb3RcIiksZS5vdmVycGxvdD1mKHIsXCJnXCIsXCJvdmVycGxvdFwiKSxlLnhsaW5lcz1mKHIsXCJwYXRoXCIsXCJ4bGluZXMtYWJvdmVcIiksZS55bGluZXM9ZihyLFwicGF0aFwiLFwieWxpbmVzLWFib3ZlXCIpLGUub3ZlcmxpbmVzQWJvdmU9ZihyLFwiZ1wiLFwib3ZlcmxpbmVzLWFib3ZlXCIpLGYocixcImdcIixcInhheGlzbGF5ZXItYWJvdmVcIiksZihyLFwiZ1wiLFwieWF4aXNsYXllci1hYm92ZVwiKSxlLm92ZXJheGVzQWJvdmU9ZihyLFwiZ1wiLFwib3ZlcmF4ZXMtYWJvdmVcIiksZS54bGluZXM9ci5zZWxlY3QoXCIueGxpbmVzLVwiK2kpLGUueWxpbmVzPXIuc2VsZWN0KFwiLnlsaW5lcy1cIithKSxlLnhheGlzbGF5ZXI9ci5zZWxlY3QoXCIueGF4aXNsYXllci1cIitpKSxlLnlheGlzbGF5ZXI9ci5zZWxlY3QoXCIueWF4aXNsYXllci1cIithKX1vfHwocChlLmdyaWRsYXllcixcImdcIixlLnhheGlzLl9pZCkscChlLmdyaWRsYXllcixcImdcIixlLnlheGlzLl9pZCksZS5ncmlkbGF5ZXIuc2VsZWN0QWxsKFwiZ1wiKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KS5zb3J0KGMuaWRTb3J0KSksZS54bGluZXMuc3R5bGUoXCJmaWxsXCIsXCJub25lXCIpLmNsYXNzZWQoXCJjcmlzcFwiLCEwKSxlLnlsaW5lcy5zdHlsZShcImZpbGxcIixcIm5vbmVcIikuY2xhc3NlZChcImNyaXNwXCIsITApfWZ1bmN0aW9uIHYodCxlKXtpZih0KXt2YXIgcj17fTtmb3IodmFyIGkgaW4gdC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBpPXRbMF07bi5zZWxlY3QodGhpcykucmVtb3ZlKCksbShpLGUpLHJbaV09ITB9KSxlLl9wbG90cylmb3IodmFyIGE9ZS5fcGxvdHNbaV0ub3ZlcmxheXN8fFtdLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXTtyW3MuaWRdJiZzLnBsb3Quc2VsZWN0QWxsKFwiLnRyYWNlXCIpLnJlbW92ZSgpfX19ZnVuY3Rpb24gbSh0LGUpe2UuX2RyYWdnZXJzLnNlbGVjdEFsbChcImcuXCIrdCkucmVtb3ZlKCksZS5fZGVmcy5zZWxlY3QoXCIjY2xpcFwiK2UuX3VpZCt0K1wicGxvdFwiKS5yZW1vdmUoKX1yLm5hbWU9XCJjYXJ0ZXNpYW5cIixyLmF0dHI9W1wieGF4aXNcIixcInlheGlzXCJdLHIuaWRSb290PVtcInhcIixcInlcIl0sci5pZFJlZ2V4PXUuaWRSZWdleCxyLmF0dHJSZWdleD11LmF0dHJSZWdleCxyLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxyLmxheW91dEF0dHJpYnV0ZXM9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksci5zdXBwbHlMYXlvdXREZWZhdWx0cz10KFwiLi9sYXlvdXRfZGVmYXVsdHNcIiksci50cmFuc2l0aW9uQXhlcz10KFwiLi90cmFuc2l0aW9uX2F4ZXNcIiksci5maW5hbGl6ZVN1YnBsb3RzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLG89ZS5fc3VicGxvdHMscz1vLnhheGlzLGw9by55YXhpcyxoPW8uY2FydGVzaWFuLGY9aC5jb25jYXQoby5nbDJkfHxbXSkscD17fSxkPXt9O2ZvcihyPTA7cjxmLmxlbmd0aDtyKyspe3ZhciBnPWZbcl0uc3BsaXQoXCJ5XCIpO3BbZ1swXV09MSxkW1wieVwiK2dbMV1dPTF9Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKylwW249c1tyXV18fChpPSh0W2MuaWQybmFtZShuKV18fHt9KS5hbmNob3IsdS5pZFJlZ2V4LnkudGVzdChpKXx8KGk9XCJ5XCIpLGgucHVzaChuK2kpLGYucHVzaChuK2kpLGRbaV18fChkW2ldPTEsYS5wdXNoVW5pcXVlKGwsaSkpKTtmb3Iocj0wO3I8bC5sZW5ndGg7cisrKWRbaT1sW3JdXXx8KG49KHRbYy5pZDJuYW1lKGkpXXx8e30pLmFuY2hvcix1LmlkUmVnZXgueC50ZXN0KG4pfHwobj1cInhcIiksaC5wdXNoKG4raSksZi5wdXNoKG4raSkscFtuXXx8KHBbbl09MSxhLnB1c2hVbmlxdWUocyxuKSkpO2lmKCFmLmxlbmd0aCl7Zm9yKHZhciB2IGluIG49XCJcIixpPVwiXCIsdCl7aWYodS5hdHRyUmVnZXgudGVzdCh2KSlcInhcIj09PXYuY2hhckF0KDApPyghbnx8K3Yuc3Vic3RyKDUpPCtuLnN1YnN0cig1KSkmJihuPXYpOighaXx8K3Yuc3Vic3RyKDUpPCtpLnN1YnN0cig1KSkmJihpPXYpfW49bj9jLm5hbWUyaWQobik6XCJ4XCIsaT1pP2MubmFtZTJpZChpKTpcInlcIixzLnB1c2gobiksbC5wdXNoKGkpLGgucHVzaChuK2kpfX0sci5wbG90PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9dC5fZnVsbExheW91dCxvPWEuX3N1YnBsb3RzLmNhcnRlc2lhbixzPXQuY2FsY2RhdGE7aWYobnVsbCE9PWUpe2lmKCFBcnJheS5pc0FycmF5KGUpKWZvcihlPVtdLGk9MDtpPHMubGVuZ3RoO2krKyllLnB1c2goaSk7Zm9yKGk9MDtpPG8ubGVuZ3RoO2krKyl7Zm9yKHZhciBsLGM9b1tpXSx1PWEuX3Bsb3RzW2NdLGg9W10sZj0wO2Y8cy5sZW5ndGg7ZisrKXt2YXIgcD1zW2ZdLGc9cFswXS50cmFjZTtnLnhheGlzK2cueWF4aXM9PT1jJiYoKC0xIT09ZS5pbmRleE9mKGcuaW5kZXgpfHxnLmNhcnBldCkmJihsJiZsWzBdLnRyYWNlLnhheGlzK2xbMF0udHJhY2UueWF4aXM9PT1jJiYtMSE9PVtcInRvbmV4dHhcIixcInRvbmV4dHlcIixcInRvbmV4dFwiXS5pbmRleE9mKGcuZmlsbCkmJi0xPT09aC5pbmRleE9mKGwpJiZoLnB1c2gobCksaC5wdXNoKHApKSxsPXApfWQodCx1LGgscixuKX19fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzPW4uX3Bsb3RzfHx7fSxsPWUuX3Bsb3RzfHx7fSx1PW4uX3N1YnBsb3RzfHx7fTtpZihuLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJiFlLl9oYXNPbmx5TGFyZ2VTcGxvbXMpZm9yKG8gaW4gcykoaT1zW29dKS5wbG90Z3JvdXAmJmkucGxvdGdyb3VwLnJlbW92ZSgpO3ZhciBoPW4uX2hhcyYmbi5faGFzKFwiZ2xcIiksZj1lLl9oYXMmJmUuX2hhcyhcImdsXCIpO2lmKGgmJiFmKWZvcihvIGluIHMpKGk9c1tvXSkuX3NjZW5lJiZpLl9zY2VuZS5kZXN0cm95KCk7aWYodS54YXhpcyYmdS55YXhpcyl7dmFyIHA9Yy5saXN0SWRzKHtfZnVsbExheW91dDpufSk7Zm9yKGE9MDthPHAubGVuZ3RoO2ErKyl7dmFyIGQ9cFthXTtlW2MuaWQybmFtZShkKV18fG4uX2luZm9sYXllci5zZWxlY3RBbGwoXCIuZy1cIitkK1widGl0bGVcIikucmVtb3ZlKCl9fXZhciBnPW4uX2hhcyYmbi5faGFzKFwiY2FydGVzaWFuXCIpLHk9ZS5faGFzJiZlLl9oYXMoXCJjYXJ0ZXNpYW5cIik7aWYoZyYmIXkpdihuLl9jYXJ0ZXNpYW5sYXllci5zZWxlY3RBbGwoXCIuc3VicGxvdFwiKSxuKSxuLl9kZWZzLnNlbGVjdEFsbChcIi5heGVzY2xpcFwiKS5yZW1vdmUoKSxkZWxldGUgbi5fYXhpc0NvbnN0cmFpbnRHcm91cHM7ZWxzZSBpZih1LmNhcnRlc2lhbilmb3IoYT0wO2E8dS5jYXJ0ZXNpYW4ubGVuZ3RoO2ErKyl7dmFyIHg9dS5jYXJ0ZXNpYW5bYV07aWYoIWxbeF0pe3ZhciBiPVwiLlwiK3grXCIsLlwiK3grXCIteCwuXCIreCtcIi15XCI7bi5fY2FydGVzaWFubGF5ZXIuc2VsZWN0QWxsKGIpLnJlbW92ZSgpLG0oeCxuKX19fSxyLmRyYXdGcmFtZXdvcms9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbyxzPXQuX2Z1bGxMYXlvdXQsbD1zLl9zdWJwbG90cy5jYXJ0ZXNpYW4sYz1sLmxlbmd0aCx1PVtdLGg9W107Zm9yKGU9MDtlPGM7ZSsrKXtuPWxbZV0saT1zLl9wbG90c1tuXSxhPWkueGF4aXMsbz1pLnlheGlzO3ZhciBmPWEuX21haW5BeGlzLHA9by5fbWFpbkF4aXMsZD1mLl9pZCtwLl9pZCxnPXMuX3Bsb3RzW2RdO2kub3ZlcmxheXM9W10sZCE9PW4mJmc/KGkubWFpbnBsb3Q9ZCxpLm1haW5wbG90aW5mbz1nLGgucHVzaChuKSk6KGkubWFpbnBsb3Q9dm9pZCAwLGkubWFpblBsb3RpbmZvPXZvaWQgMCx1LnB1c2gobikpfWZvcihlPTA7ZTxoLmxlbmd0aDtlKyspbj1oW2VdLChpPXMuX3Bsb3RzW25dKS5tYWlucGxvdGluZm8ub3ZlcmxheXMucHVzaChpKTt2YXIgdj11LmNvbmNhdChoKSxtPW5ldyBBcnJheShjKTtmb3IoZT0wO2U8YztlKyspe249dltlXSxpPXMuX3Bsb3RzW25dLGE9aS54YXhpcyxvPWkueWF4aXM7dmFyIHk9W24sYS5sYXllcixvLmxheWVyLGEub3ZlcmxheWluZ3x8XCJcIixvLm92ZXJsYXlpbmd8fFwiXCJdO2ZvcihyPTA7cjxpLm92ZXJsYXlzLmxlbmd0aDtyKyspeS5wdXNoKGkub3ZlcmxheXNbcl0uaWQpO21bZV09eX1yZXR1cm4gbX0odCksaT1lLl9jYXJ0ZXNpYW5sYXllci5zZWxlY3RBbGwoXCIuc3VicGxvdFwiKS5kYXRhKHIsU3RyaW5nKTtpLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIixmdW5jdGlvbih0KXtyZXR1cm5cInN1YnBsb3QgXCIrdFswXX0pLGkub3JkZXIoKSxpLmV4aXQoKS5jYWxsKHYsZSksaS5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBpPXJbMF0sYT1lLl9wbG90c1tpXTthLnBsb3Rncm91cD1uLnNlbGVjdCh0aGlzKSxnKHQsYSksYS5kcmFnbGF5ZXI9ZihlLl9kcmFnZ2VycyxcImdcIixpKX0pfSxyLnJhbmdlUGxvdD1mdW5jdGlvbih0LGUscil7Zyh0LGUpLGQodCxlLHIpLG8uc3R5bGUodCl9LHIudG9TVkc9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5fZ2xpbWFnZXMscj1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoXCIuc3ZnLWNvbnRhaW5lclwiKTtyLmZpbHRlcihmdW5jdGlvbih0LGUpe3JldHVybiBlPT09ci5zaXplKCktMX0pLnNlbGVjdEFsbChcIi5nbC1jYW52YXMtY29udGV4dCwgLmdsLWNhbnZhcy1mb2N1c1wiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50b0RhdGFVUkwoXCJpbWFnZS9wbmdcIik7ZS5hcHBlbmQoXCJzdmc6aW1hZ2VcIikuYXR0cih7eG1sbnM6aC5zdmcsXCJ4bGluazpocmVmXCI6dCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwibm9uZVwiLHg6MCx5OjAsd2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHR9KX0pfSxyLnVwZGF0ZUZ4PXQoXCIuL2dyYXBoX2ludGVyYWN0XCIpLnVwZGF0ZUZ4fSx7XCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiOjY3OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vZ2V0X2RhdGFcIjo3ODQsXCIuLi9wbG90c1wiOjgxMCxcIi4vYXR0cmlidXRlc1wiOjc0NyxcIi4vYXhpc19pZHNcIjo3NTIsXCIuL2NvbnN0YW50c1wiOjc1NSxcIi4vZ3JhcGhfaW50ZXJhY3RcIjo3NTgsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6NzYxLFwiLi9sYXlvdXRfZGVmYXVsdHNcIjo3NjIsXCIuL3RyYW5zaXRpb25fYXhlc1wiOjc3MSxkMzoxNTV9XSw3NjE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vZm9udF9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlc1wiKS5kYXNoLG89dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxzPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLnRlbXBsYXRlZEFycmF5LGw9dChcIi4vY29uc3RhbnRzXCIpO2UuZXhwb3J0cz17dmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixlZGl0VHlwZTpcInBsb3RcIn0sY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZTpcInRpY2tzXCJ9LHRpdGxlOnt0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJ0aWNrc1wifSxmb250Om4oe2VkaXRUeXBlOlwidGlja3NcIn0pLGVkaXRUeXBlOlwidGlja3NcIn0sdHlwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiLVwiLFwibGluZWFyXCIsXCJsb2dcIixcImRhdGVcIixcImNhdGVnb3J5XCIsXCJtdWx0aWNhdGVnb3J5XCJdLGRmbHQ6XCItXCIsZWRpdFR5cGU6XCJjYWxjXCIsX25vVGVtcGxhdGluZzohMH0sYXV0b3JhbmdlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbITAsITEsXCJyZXZlcnNlZFwiXSxkZmx0OiEwLGVkaXRUeXBlOlwiYXhyYW5nZVwiLGltcGxpZWRFZGl0czp7XCJyYW5nZVswXVwiOnZvaWQgMCxcInJhbmdlWzFdXCI6dm9pZCAwfX0scmFuZ2Vtb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJub3JtYWxcIixcInRvemVyb1wiLFwibm9ubmVnYXRpdmVcIl0sZGZsdDpcIm5vcm1hbFwiLGVkaXRUeXBlOlwicGxvdFwifSxyYW5nZTp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixpdGVtczpbe3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImF4cmFuZ2VcIixpbXBsaWVkRWRpdHM6e1wiXmF1dG9yYW5nZVwiOiExfSxhbmltOiEwfSx7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiYXhyYW5nZVwiLGltcGxpZWRFZGl0czp7XCJeYXV0b3JhbmdlXCI6ITF9LGFuaW06ITB9XSxlZGl0VHlwZTpcImF4cmFuZ2VcIixpbXBsaWVkRWRpdHM6e2F1dG9yYW5nZTohMX0sYW5pbTohMH0sZml4ZWRyYW5nZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwiY2FsY1wifSxzY2FsZWFuY2hvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W2wuaWRSZWdleC54LnRvU3RyaW5nKCksbC5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6XCJwbG90XCJ9LHNjYWxlcmF0aW86e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6XCJwbG90XCJ9LGNvbnN0cmFpbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wicmFuZ2VcIixcImRvbWFpblwiXSxkZmx0OlwicmFuZ2VcIixlZGl0VHlwZTpcInBsb3RcIn0sY29uc3RyYWludG93YXJkOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJsZWZ0XCIsXCJjZW50ZXJcIixcInJpZ2h0XCIsXCJ0b3BcIixcIm1pZGRsZVwiLFwiYm90dG9tXCJdLGVkaXRUeXBlOlwicGxvdFwifSxtYXRjaGVzOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbbC5pZFJlZ2V4LngudG9TdHJpbmcoKSxsLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZTpcImNhbGNcIn0sdGlja21vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImF1dG9cIixcImxpbmVhclwiLFwiYXJyYXlcIl0sZWRpdFR5cGU6XCJ0aWNrc1wiLGltcGxpZWRFZGl0czp7dGljazA6dm9pZCAwLGR0aWNrOnZvaWQgMH19LG50aWNrczp7dmFsVHlwZTpcImludGVnZXJcIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6XCJ0aWNrc1wifSx0aWNrMDp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwidGlja3NcIixpbXBsaWVkRWRpdHM6e3RpY2ttb2RlOlwibGluZWFyXCJ9fSxkdGljazp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwidGlja3NcIixpbXBsaWVkRWRpdHM6e3RpY2ttb2RlOlwibGluZWFyXCJ9fSx0aWNrdmFsczp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcInRpY2tzXCJ9LHRpY2t0ZXh0Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwidGlja3NcIn0sdGlja3M6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcIm91dHNpZGVcIixcImluc2lkZVwiLFwiXCJdLGVkaXRUeXBlOlwidGlja3NcIn0sdGlja3Nvbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibGFiZWxzXCIsXCJib3VuZGFyaWVzXCJdLGRmbHQ6XCJsYWJlbHNcIixlZGl0VHlwZTpcInRpY2tzXCJ9LG1pcnJvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6WyEwLFwidGlja3NcIiwhMSxcImFsbFwiLFwiYWxsdGlja3NcIl0sZGZsdDohMSxlZGl0VHlwZTpcInRpY2tzK2xheW91dHN0eWxlXCJ9LHRpY2tsZW46e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjUsZWRpdFR5cGU6XCJ0aWNrc1wifSx0aWNrd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6XCJ0aWNrc1wifSx0aWNrY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZTpcInRpY2tzXCJ9LHNob3d0aWNrbGFiZWxzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJ0aWNrc1wifSxhdXRvbWFyZ2luOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEsZWRpdFR5cGU6XCJ0aWNrc1wifSxzaG93c3Bpa2VzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEsZWRpdFR5cGU6XCJtb2RlYmFyXCJ9LHNwaWtlY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6bnVsbCxlZGl0VHlwZTpcIm5vbmVcIn0sc3Bpa2V0aGlja25lc3M6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjMsZWRpdFR5cGU6XCJub25lXCJ9LHNwaWtlZGFzaDpvKHt9LGEse2RmbHQ6XCJkYXNoXCIsZWRpdFR5cGU6XCJub25lXCJ9KSxzcGlrZW1vZGU6e3ZhbFR5cGU6XCJmbGFnbGlzdFwiLGZsYWdzOltcInRvYXhpc1wiLFwiYWNyb3NzXCIsXCJtYXJrZXJcIl0sZGZsdDpcInRvYXhpc1wiLGVkaXRUeXBlOlwibm9uZVwifSxzcGlrZXNuYXA6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImRhdGFcIixcImN1cnNvclwiXSxkZmx0OlwiZGF0YVwiLGVkaXRUeXBlOlwibm9uZVwifSx0aWNrZm9udDpuKHtlZGl0VHlwZTpcInRpY2tzXCJ9KSx0aWNrYW5nbGU6e3ZhbFR5cGU6XCJhbmdsZVwiLGRmbHQ6XCJhdXRvXCIsZWRpdFR5cGU6XCJ0aWNrc1wifSx0aWNrcHJlZml4Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwidGlja3NcIn0sc2hvd3RpY2twcmVmaXg6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImFsbFwiLFwiZmlyc3RcIixcImxhc3RcIixcIm5vbmVcIl0sZGZsdDpcImFsbFwiLGVkaXRUeXBlOlwidGlja3NcIn0sdGlja3N1ZmZpeDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcInRpY2tzXCJ9LHNob3d0aWNrc3VmZml4Ont2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhbGxcIixcImZpcnN0XCIsXCJsYXN0XCIsXCJub25lXCJdLGRmbHQ6XCJhbGxcIixlZGl0VHlwZTpcInRpY2tzXCJ9LHNob3dleHBvbmVudDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYWxsXCIsXCJmaXJzdFwiLFwibGFzdFwiLFwibm9uZVwiXSxkZmx0OlwiYWxsXCIsZWRpdFR5cGU6XCJ0aWNrc1wifSxleHBvbmVudGZvcm1hdDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibm9uZVwiLFwiZVwiLFwiRVwiLFwicG93ZXJcIixcIlNJXCIsXCJCXCJdLGRmbHQ6XCJCXCIsZWRpdFR5cGU6XCJ0aWNrc1wifSxzZXBhcmF0ZXRob3VzYW5kczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwidGlja3NcIn0sdGlja2Zvcm1hdDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcInRpY2tzXCJ9LHRpY2tmb3JtYXRzdG9wczpzKFwidGlja2Zvcm1hdHN0b3BcIix7ZW5hYmxlZDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwidGlja3NcIn0sZHRpY2tyYW5nZTp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixpdGVtczpbe3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcInRpY2tzXCJ9LHt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJ0aWNrc1wifV0sZWRpdFR5cGU6XCJ0aWNrc1wifSx2YWx1ZTp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcInRpY2tzXCJ9LGVkaXRUeXBlOlwidGlja3NcIn0pLGhvdmVyZm9ybWF0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwibm9uZVwifSxzaG93bGluZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwidGlja3MrbGF5b3V0c3R5bGVcIn0sbGluZWNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6XCJsYXlvdXRzdHlsZVwifSxsaW5ld2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6XCJ0aWNrcytsYXlvdXRzdHlsZVwifSxzaG93Z3JpZDp7dmFsVHlwZTpcImJvb2xlYW5cIixlZGl0VHlwZTpcInRpY2tzXCJ9LGdyaWRjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDppLmxpZ2h0TGluZSxlZGl0VHlwZTpcInRpY2tzXCJ9LGdyaWR3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZTpcInRpY2tzXCJ9LHplcm9saW5lOnt2YWxUeXBlOlwiYm9vbGVhblwiLGVkaXRUeXBlOlwidGlja3NcIn0semVyb2xpbmVjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOlwidGlja3NcIn0semVyb2xpbmV3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MSxlZGl0VHlwZTpcInRpY2tzXCJ9LHNob3dkaXZpZGVyczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwidGlja3NcIn0sZGl2aWRlcmNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6XCJ0aWNrc1wifSxkaXZpZGVyd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjEsZWRpdFR5cGU6XCJ0aWNrc1wifSxhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImZyZWVcIixsLmlkUmVnZXgueC50b1N0cmluZygpLGwuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOlwicGxvdFwifSxzaWRlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ0b3BcIixcImJvdHRvbVwiLFwibGVmdFwiLFwicmlnaHRcIl0sZWRpdFR5cGU6XCJwbG90XCJ9LG92ZXJsYXlpbmc6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImZyZWVcIixsLmlkUmVnZXgueC50b1N0cmluZygpLGwuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOlwicGxvdFwifSxsYXllcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYWJvdmUgdHJhY2VzXCIsXCJiZWxvdyB0cmFjZXNcIl0sZGZsdDpcImFib3ZlIHRyYWNlc1wiLGVkaXRUeXBlOlwicGxvdFwifSxkb21haW46e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsaXRlbXM6W3t2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZWRpdFR5cGU6XCJwbG90XCJ9LHt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZWRpdFR5cGU6XCJwbG90XCJ9XSxkZmx0OlswLDFdLGVkaXRUeXBlOlwicGxvdFwifSxwb3NpdGlvbjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZTpcInBsb3RcIn0sY2F0ZWdvcnlvcmRlcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1widHJhY2VcIixcImNhdGVnb3J5IGFzY2VuZGluZ1wiLFwiY2F0ZWdvcnkgZGVzY2VuZGluZ1wiLFwiYXJyYXlcIl0sZGZsdDpcInRyYWNlXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGNhdGVnb3J5YXJyYXk6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHVpcmV2aXNpb246e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcIm5vbmVcIn0sZWRpdFR5cGU6XCJjYWxjXCIsX2RlcHJlY2F0ZWQ6e2F1dG90aWNrOnt2YWxUeXBlOlwiYm9vbGVhblwiLGVkaXRUeXBlOlwidGlja3NcIn0sdGl0bGU6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcInRpY2tzXCJ9LHRpdGxlZm9udDpuKHtlZGl0VHlwZTpcInRpY2tzXCJ9KX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIjo1NzcsXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlc1wiOjU5OCxcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vZm9udF9hdHRyaWJ1dGVzXCI6Nzc1LFwiLi9jb25zdGFudHNcIjo3NTV9XSw3NjI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksYT10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKSxvPXQoXCIuLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxzPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLGw9dChcIi4vdHlwZV9kZWZhdWx0c1wiKSxjPXQoXCIuL2F4aXNfZGVmYXVsdHNcIiksdT10KFwiLi9jb25zdHJhaW50c1wiKS5oYW5kbGVDb25zdHJhaW50RGVmYXVsdHMsaD10KFwiLi9wb3NpdGlvbl9kZWZhdWx0c1wiKSxmPXQoXCIuL2F4aXNfaWRzXCIpLHA9Zi5pZDJuYW1lLGQ9Zi5uYW1lMmlkLGc9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLHY9Zy50cmFjZUlzLG09Zy5nZXRDb21wb25lbnRNZXRob2Q7ZnVuY3Rpb24geSh0LGUscil7QXJyYXkuaXNBcnJheSh0W2VdKT90W2VdLnB1c2gocik6dFtlXT1bcl19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgZixnLHg9e30sYj17fSxfPXt9LHc9e30saz17fTtmb3IoZj0wO2Y8ci5sZW5ndGg7ZisrKXt2YXIgQT1yW2ZdO2lmKHYoQSxcImNhcnRlc2lhblwiKXx8dihBLFwiZ2wyZFwiKSl7dmFyIFQsTTtpZihBLnhheGlzKXkoeCxUPXAoQS54YXhpcyksQSk7ZWxzZSBpZihBLnhheGVzKWZvcihnPTA7ZzxBLnhheGVzLmxlbmd0aDtnKyspeSh4LHAoQS54YXhlc1tnXSksQSk7aWYoQS55YXhpcyl5KHgsTT1wKEEueWF4aXMpLEEpO2Vsc2UgaWYoQS55YXhlcylmb3IoZz0wO2c8QS55YXhlcy5sZW5ndGg7ZysrKXkoeCxwKEEueWF4ZXNbZ10pLEEpO2lmKHYoQSxcImNhcnBldFwiKSYmKFwiY2FycGV0XCIhPT1BLnR5cGV8fEEuX2NoZWF0ZXIpfHxUJiYoX1tUXT0xKSxcImNhcnBldFwiPT09QS50eXBlJiZBLl9jaGVhdGVyJiZUJiYoYltUXT0xKSx2KEEsXCIyZE1hcFwiKSYmKHdbVF09MSx3W01dPTEpLHYoQSxcIm9yaWVudGVkXCIpKWtbXCJoXCI9PT1BLm9yaWVudGF0aW9uP006VF09MX19dmFyIFM9ZS5fc3VicGxvdHMsRT1TLnhheGlzLEM9Uy55YXhpcyxMPW4uc2ltcGxlTWFwKEUscCksej1uLnNpbXBsZU1hcChDLHApLE89TC5jb25jYXQoeiksST1pLmJhY2tncm91bmQ7RS5sZW5ndGgmJkMubGVuZ3RoJiYoST1uLmNvZXJjZSh0LGUsbyxcInBsb3RfYmdjb2xvclwiKSk7dmFyIEQsUCxSLEYsQj1pLmNvbWJpbmUoSSxlLnBhcGVyX2JnY29sb3IpO2Z1bmN0aW9uIE4odCxlKXtyZXR1cm4gbi5jb2VyY2UoUixGLHMsdCxlKX1mdW5jdGlvbiBqKHQsZSl7cmV0dXJuIG4uY29lcmNlMihSLEYscyx0LGUpfWZ1bmN0aW9uIFYodCl7cmV0dXJuXCJ4XCI9PT10P0M6RX12YXIgVT17eDpWKFwieFwiKSx5OlYoXCJ5XCIpfSxxPVUueC5jb25jYXQoVS55KTtmdW5jdGlvbiBIKGUscil7Zm9yKHZhciBuPVwieFwiPT09ZT9MOnosaT1bXSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBvPW5bYV07bz09PXJ8fCh0W29dfHx7fSkub3ZlcmxheWluZ3x8aS5wdXNoKGQobykpfXJldHVybiBpfWZvcihmPTA7ZjxPLmxlbmd0aDtmKyspe1A9KEQ9T1tmXSkuY2hhckF0KDApLG4uaXNQbGFpbk9iamVjdCh0W0RdKXx8KHRbRF09e30pLFI9dFtEXSxGPWEubmV3Q29udGFpbmVyKGUsRCxQK1wiYXhpc1wiKTt2YXIgRz14W0RdfHxbXTtGLl90cmFjZUluZGljZXM9Ry5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuX2V4cGFuZGVkSW5kZXh9KSxGLl9hbm5JbmRpY2VzPVtdLEYuX3NoYXBlSW5kaWNlcz1bXSxGLl9pbWdJbmRpY2VzPVtdLEYuX3N1YnBsb3RzV2l0aD1bXSxGLl9jb3VudGVyQXhlcz1bXSxGLl9uYW1lPUYuX2F0dHI9RDt2YXIgWT1GLl9pZD1kKEQpLFc9SChQLEQpLFg9e2xldHRlcjpQLGZvbnQ6ZS5mb250LG91dGVyVGlja3M6d1tEXSxzaG93R3JpZDoha1tEXSxkYXRhOkcsYmdDb2xvcjpCLGNhbGVuZGFyOmUuY2FsZW5kYXIsYXV0b21hcmdpbjohMCxjaGVhdGVyb25seTpcInhcIj09PVAmJmJbRF0mJiFfW0RdLHNwbG9tU3Rhc2g6KChlLl9zcGxvbUF4ZXN8fHt9KVtQXXx8e30pW1ldfTtOKFwidWlyZXZpc2lvblwiLGUudWlyZXZpc2lvbiksbChSLEYsTixYKSxjKFIsRixOLFgsZSk7dmFyIFo9aihcInNwaWtlY29sb3JcIiksJD1qKFwic3Bpa2V0aGlja25lc3NcIiksSj1qKFwic3Bpa2VkYXNoXCIpLEs9aihcInNwaWtlbW9kZVwiKSxRPWooXCJzcGlrZXNuYXBcIik7TihcInNob3dzcGlrZXNcIiwhIShafHwkfHxKfHxLfHxRKSl8fChkZWxldGUgRi5zcGlrZWNvbG9yLGRlbGV0ZSBGLnNwaWtldGhpY2tuZXNzLGRlbGV0ZSBGLnNwaWtlZGFzaCxkZWxldGUgRi5zcGlrZW1vZGUsZGVsZXRlIEYuc3Bpa2VzbmFwKSxoKFIsRixOLHtsZXR0ZXI6UCxjb3VudGVyQXhlczpVW1BdLG92ZXJsYXlhYmxlQXhlczpXLGdyaWQ6ZS5ncmlkfSksRi5faW5wdXQ9Un12YXIgdHQ9bShcInJhbmdlc2xpZGVyXCIsXCJoYW5kbGVEZWZhdWx0c1wiKSxldD1tKFwicmFuZ2VzZWxlY3RvclwiLFwiaGFuZGxlRGVmYXVsdHNcIik7Zm9yKGY9MDtmPEwubGVuZ3RoO2YrKylEPUxbZl0sUj10W0RdLEY9ZVtEXSx0dCh0LGUsRCksXCJkYXRlXCI9PT1GLnR5cGUmJmV0KFIsRixlLHosRi5jYWxlbmRhciksTihcImZpeGVkcmFuZ2VcIik7Zm9yKGY9MDtmPHoubGVuZ3RoO2YrKyl7RD16W2ZdLFI9dFtEXSxGPWVbRF07dmFyIHJ0PWVbcChGLmFuY2hvcildO04oXCJmaXhlZHJhbmdlXCIsbShcInJhbmdlc2xpZGVyXCIsXCJpc1Zpc2libGVcIikocnQpKX12YXIgbnQ9ZS5fYXhpc0NvbnN0cmFpbnRHcm91cHM9W10saXQ9ZS5fYXhpc01hdGNoR3JvdXBzPVtdO2ZvcihmPTA7ZjxPLmxlbmd0aDtmKyspUD0oRD1PW2ZdKS5jaGFyQXQoMCksUj10W0RdLEY9ZVtEXSx1KFIsRixOLHEsZSk7Zm9yKGY9MDtmPGl0Lmxlbmd0aDtmKyspe3ZhciBhdCxvdD1pdFtmXSxzdD1udWxsLGx0PW51bGw7Zm9yKGF0IGluIG90KShGPWVbcChhdCldKS5tYXRjaGVzfHwoc3Q9Ri5yYW5nZSxsdD1GLmF1dG9yYW5nZSk7aWYobnVsbD09PXN0fHxudWxsPT09bHQpZm9yKGF0IGluIG90KXtzdD0oRj1lW3AoYXQpXSkucmFuZ2UsbHQ9Ri5hdXRvcmFuZ2U7YnJlYWt9Zm9yKGF0IGluIG90KShGPWVbcChhdCldKS5tYXRjaGVzJiYoRi5yYW5nZT1zdC5zbGljZSgpLEYuYXV0b3JhbmdlPWx0KSxGLl9tYXRjaEdyb3VwPW90O2lmKG50Lmxlbmd0aClmb3IoYXQgaW4gb3QpZm9yKGc9MDtnPG50Lmxlbmd0aDtnKyspe3ZhciBjdD1udFtnXTtmb3IodmFyIHV0IGluIGN0KWF0PT09dXQmJihuLndhcm4oXCJBeGlzIFwiK3V0K1wiIGlzIHNldCB3aXRoIGJvdGggYSAqc2NhbGVhbmNob3IqIGFuZCAqbWF0Y2hlcyogY29uc3RyYWludDsgaWdub3JpbmcgdGhlIHNjYWxlIGNvbnN0cmFpbnQuXCIpLGRlbGV0ZSBjdFt1dF0sT2JqZWN0LmtleXMoY3QpLmxlbmd0aDwyJiZudC5zcGxpY2UoZywxKSl9fX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9sYXlvdXRfYXR0cmlidXRlc1wiOjgwMSxcIi4vYXhpc19kZWZhdWx0c1wiOjc1MSxcIi4vYXhpc19pZHNcIjo3NTIsXCIuL2NvbnN0cmFpbnRzXCI6NzU2LFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjc2MSxcIi4vcG9zaXRpb25fZGVmYXVsdHNcIjo3NjQsXCIuL3R5cGVfZGVmYXVsdHNcIjo3NzJ9XSw3NjM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwidGlueWNvbG9yMlwiKS5taXgsaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzXCIpLmxpZ2h0RnJhY3Rpb24sYT10KFwiLi4vLi4vbGliXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcz0obz1vfHx7fSkuZGZsdENvbG9yO2Z1bmN0aW9uIGwocixuKXtyZXR1cm4gYS5jb2VyY2UyKHQsZSxvLmF0dHJpYnV0ZXMscixuKX12YXIgYz1sKFwibGluZWNvbG9yXCIscyksdT1sKFwibGluZXdpZHRoXCIpO3IoXCJzaG93bGluZVwiLG8uc2hvd0xpbmV8fCEhY3x8ISF1KXx8KGRlbGV0ZSBlLmxpbmVjb2xvcixkZWxldGUgZS5saW5ld2lkdGgpO3ZhciBoPWwoXCJncmlkY29sb3JcIixuKHMsby5iZ0NvbG9yLG8uYmxlbmR8fGkpLnRvUmdiU3RyaW5nKCkpLGY9bChcImdyaWR3aWR0aFwiKTtpZihyKFwic2hvd2dyaWRcIixvLnNob3dHcmlkfHwhIWh8fCEhZil8fChkZWxldGUgZS5ncmlkY29sb3IsZGVsZXRlIGUuZ3JpZHdpZHRoKSwhby5ub1plcm9MaW5lKXt2YXIgcD1sKFwiemVyb2xpbmVjb2xvclwiLHMpLGQ9bChcInplcm9saW5ld2lkdGhcIik7cihcInplcm9saW5lXCIsby5zaG93R3JpZHx8ISFwfHwhIWQpfHwoZGVsZXRlIGUuemVyb2xpbmVjb2xvcixkZWxldGUgZS56ZXJvbGluZXdpZHRoKX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIjo1NzcsXCIuLi8uLi9saWJcIjo3MDEsdGlueWNvbG9yMjo1MjJ9XSw3NjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vLi4vbGliXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbyxzLGwsYyx1PWEuY291bnRlckF4ZXN8fFtdLGg9YS5vdmVybGF5YWJsZUF4ZXN8fFtdLGY9YS5sZXR0ZXIscD1hLmdyaWQ7cCYmKHM9cC5fZG9tYWluc1tmXVtwLl9heGlzTWFwW2UuX2lkXV0sbz1wLl9hbmNob3JzW2UuX2lkXSxzJiYobD1wW2YrXCJzaWRlXCJdLnNwbGl0KFwiIFwiKVswXSxjPXAuZG9tYWluW2ZdW1wicmlnaHRcIj09PWx8fFwidG9wXCI9PT1sPzE6MF0pKSxzPXN8fFswLDFdLG89b3x8KG4odC5wb3NpdGlvbik/XCJmcmVlXCI6dVswXXx8XCJmcmVlXCIpLGw9bHx8KFwieFwiPT09Zj9cImJvdHRvbVwiOlwibGVmdFwiKSxjPWN8fDAsXCJmcmVlXCI9PT1pLmNvZXJjZSh0LGUse2FuY2hvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiZnJlZVwiXS5jb25jYXQodSksZGZsdDpvfX0sXCJhbmNob3JcIikmJnIoXCJwb3NpdGlvblwiLGMpLGkuY29lcmNlKHQsZSx7c2lkZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6XCJ4XCI9PT1mP1tcImJvdHRvbVwiLFwidG9wXCJdOltcImxlZnRcIixcInJpZ2h0XCJdLGRmbHQ6bH19LFwic2lkZVwiKTt2YXIgZD0hMTtpZihoLmxlbmd0aCYmKGQ9aS5jb2VyY2UodCxlLHtvdmVybGF5aW5nOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbITFdLmNvbmNhdChoKSxkZmx0OiExfX0sXCJvdmVybGF5aW5nXCIpKSwhZCl7dmFyIGc9cihcImRvbWFpblwiLHMpO2dbMF0+Z1sxXS0xLzQwOTYmJihlLmRvbWFpbj1zKSxpLm5vbmVPckFsbCh0LmRvbWFpbixlLmRvbWFpbixzKX1yZXR1cm4gcihcImxheWVyXCIpLGV9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDc2NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCIpLkZST01fQkw7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2b2lkIDA9PT1yJiYocj1uW3QuY29uc3RyYWludG93YXJkfHxcImNlbnRlclwiXSk7dmFyIGk9W3QucjJsKHQucmFuZ2VbMF0pLHQucjJsKHQucmFuZ2VbMV0pXSxhPWlbMF0rKGlbMV0taVswXSkqcjt0LnJhbmdlPXQuX2lucHV0LnJhbmdlPVt0LmwycihhKyhpWzBdLWEpKmUpLHQubDJyKGErKGlbMV0tYSkqZSldfX0se1wiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiOjY3M31dLDc2NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJwb2x5Ym9vbGpzXCIpLGk9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxzPXQoXCIuLi8uLi9saWJcIiksbD10KFwiLi4vLi4vbGliL3BvbHlnb25cIiksYz10KFwiLi4vLi4vbGliL3Rocm90dGxlXCIpLHU9dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVyc1wiKS5tYWtlRXZlbnREYXRhLGg9dChcIi4vYXhpc19pZHNcIikuZ2V0RnJvbUlkLGY9dChcIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlc1wiKSxwPXQoXCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lc1wiKS5yZWRyYXdSZWdsVHJhY2VzLGQ9dChcIi4vY29uc3RhbnRzXCIpLGc9ZC5NSU5TRUxFQ1Qsdj1sLmZpbHRlcixtPWwudGVzdGVyO2Z1bmN0aW9uIHkodCl7cmV0dXJuIHQuX2lkfWZ1bmN0aW9uIHgodCxlLHIsbixpLGEsbyl7dmFyIHMsbCxjLHUsaCxmLHAsZCxnLHY9ZS5faG92ZXJkYXRhLG09ZS5fZnVsbExheW91dC5jbGlja21vZGUuaW5kZXhPZihcImV2ZW50XCIpPi0xLHk9W107aWYoZnVuY3Rpb24odCl7cmV0dXJuIHQmJkFycmF5LmlzQXJyYXkodCkmJiEwIT09dFswXS5ob3Zlck9uQm94fSh2KSl7ayh0LGUsYSk7dmFyIHg9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dFswXSxhPS0xLG89W107Zm9yKG49MDtuPGUubGVuZ3RoO24rKylpZihyPWVbbl0saS5mdWxsRGF0YS5fZXhwYW5kZWRJbmRleD09PXIuY2RbMF0udHJhY2UuX2V4cGFuZGVkSW5kZXgpe2lmKCEwPT09aS5ob3Zlck9uQm94KWJyZWFrO3ZvaWQgMCE9PWkucG9pbnROdW1iZXI/YT1pLnBvaW50TnVtYmVyOnZvaWQgMCE9PWkuYmluTnVtYmVyJiYoYT1pLmJpbk51bWJlcixvPWkucG9pbnROdW1iZXJzKTticmVha31yZXR1cm57cG9pbnROdW1iZXI6YSxwb2ludE51bWJlcnM6byxzZWFyY2hJbmZvOnJ9fSh2LHM9VChlLHIsbixpKSk7aWYoeC5wb2ludE51bWJlcnMubGVuZ3RoPjA/ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT1bXTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKShyPXRbaV0pLmNkWzBdLnRyYWNlLnNlbGVjdGVkcG9pbnRzJiZyLmNkWzBdLnRyYWNlLnNlbGVjdGVkcG9pbnRzLmxlbmd0aD4wJiZhLnB1c2gocik7aWYoMT09PWEubGVuZ3RoJiZhWzBdPT09ZS5zZWFyY2hJbmZvJiYobj1lLnNlYXJjaEluZm8uY2RbMF0udHJhY2UpLnNlbGVjdGVkcG9pbnRzLmxlbmd0aD09PWUucG9pbnROdW1iZXJzLmxlbmd0aCl7Zm9yKGk9MDtpPGUucG9pbnROdW1iZXJzLmxlbmd0aDtpKyspaWYobi5zZWxlY3RlZHBvaW50cy5pbmRleE9mKGUucG9pbnROdW1iZXJzW2ldKTwwKXJldHVybiExO3JldHVybiEwfXJldHVybiExfShzLHgpOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPTA7Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpZihlPXRbbl0sKHI9ZS5jZFswXS50cmFjZSkuc2VsZWN0ZWRwb2ludHMpe2lmKHIuc2VsZWN0ZWRwb2ludHMubGVuZ3RoPjEpcmV0dXJuITE7aWYoKGkrPXIuc2VsZWN0ZWRwb2ludHMubGVuZ3RoKT4xKXJldHVybiExfXJldHVybiAxPT09aX0ocykmJihmPVMoeCkpKXtmb3IobyYmby5yZW1vdmUoKSxnPTA7ZzxzLmxlbmd0aDtnKyspKGw9c1tnXSkuX21vZHVsZS5zZWxlY3RQb2ludHMobCwhMSk7RShlLHMpLEEoYSksbSYmZS5lbWl0KFwicGxvdGx5X2Rlc2VsZWN0XCIsbnVsbCl9ZWxzZXtmb3IocD10LnNoaWZ0S2V5JiYodm9pZCAwIT09Zj9mOlMoeCkpLGM9ZnVuY3Rpb24odCxlLHIpe3JldHVybntwb2ludE51bWJlcjp0LHNlYXJjaEluZm86ZSxzdWJ0cmFjdDpyfX0oeC5wb2ludE51bWJlcix4LnNlYXJjaEluZm8scCksdT13KGEuc2VsZWN0aW9uRGVmcy5jb25jYXQoW2NdKSksZz0wO2c8cy5sZW5ndGg7ZysrKWlmKGg9QyhzW2ddLl9tb2R1bGUuc2VsZWN0UG9pbnRzKHNbZ10sdSksc1tnXSkseS5sZW5ndGgpZm9yKHZhciBiPTA7YjxoLmxlbmd0aDtiKyspeS5wdXNoKGhbYl0pO2Vsc2UgeT1oO0UoZSxzLGQ9e3BvaW50czp5fSksYyYmYSYmYS5zZWxlY3Rpb25EZWZzLnB1c2goYyksbyYmTShhLm1lcmdlZFBvbHlnb25zLG8pLG0mJmUuZW1pdChcInBsb3RseV9zZWxlY3RlZFwiLGQpfX19ZnVuY3Rpb24gYih0KXtyZXR1cm5cInBvaW50TnVtYmVyXCJpbiB0JiZcInNlYXJjaEluZm9cImluIHR9ZnVuY3Rpb24gXyh0KXtyZXR1cm57eG1pbjowLHhtYXg6MCx5bWluOjAseW1heDowLHB0czpbXSxjb250YWluczpmdW5jdGlvbihlLHIsbixpKXt2YXIgYT10LnNlYXJjaEluZm8uY2RbMF0udHJhY2UuX2V4cGFuZGVkSW5kZXg7cmV0dXJuIGkuY2RbMF0udHJhY2UuX2V4cGFuZGVkSW5kZXg9PT1hJiZuPT09dC5wb2ludE51bWJlcn0saXNSZWN0OiExLGRlZ2VuZXJhdGU6ITEsc3VidHJhY3Q6dC5zdWJ0cmFjdH19ZnVuY3Rpb24gdyh0KXtmb3IodmFyIGU9W10scj1iKHRbMF0pPzA6dFswXVswXVswXSxuPXIsaT1iKHRbMF0pPzA6dFswXVswXVsxXSxhPWksbz0wO288dC5sZW5ndGg7bysrKWlmKGIodFtvXSkpZS5wdXNoKF8odFtvXSkpO2Vsc2V7dmFyIHM9bC50ZXN0ZXIodFtvXSk7cy5zdWJ0cmFjdD10W29dLnN1YnRyYWN0LGUucHVzaChzKSxyPU1hdGgubWluKHIscy54bWluKSxuPU1hdGgubWF4KG4scy54bWF4KSxpPU1hdGgubWluKGkscy55bWluKSxhPU1hdGgubWF4KGEscy55bWF4KX1yZXR1cm57eG1pbjpyLHhtYXg6bix5bWluOmkseW1heDphLHB0czpbXSxjb250YWluczpmdW5jdGlvbih0LHIsbixpKXtmb3IodmFyIGE9ITEsbz0wO288ZS5sZW5ndGg7bysrKWVbb10uY29udGFpbnModCxyLG4saSkmJihhPSExPT09ZVtvXS5zdWJ0cmFjdCk7cmV0dXJuIGF9LGlzUmVjdDohMSxkZWdlbmVyYXRlOiExfX1mdW5jdGlvbiBrKHQsZSxyKXt2YXIgbj1lLl9mdWxsTGF5b3V0LGk9ci5wbG90aW5mbyxhPW4uX2xhc3RTZWxlY3RlZFN1YnBsb3QmJm4uX2xhc3RTZWxlY3RlZFN1YnBsb3Q9PT1pLmlkLG89dC5zaGlmdEtleXx8dC5hbHRLZXk7YSYmbyYmaS5zZWxlY3Rpb24mJmkuc2VsZWN0aW9uLnNlbGVjdGlvbkRlZnMmJiFyLnNlbGVjdGlvbkRlZnM/KHIuc2VsZWN0aW9uRGVmcz1pLnNlbGVjdGlvbi5zZWxlY3Rpb25EZWZzLHIubWVyZ2VkUG9seWdvbnM9aS5zZWxlY3Rpb24ubWVyZ2VkUG9seWdvbnMpOm8mJmkuc2VsZWN0aW9ufHxBKHIpLGF8fChMKGUpLG4uX2xhc3RTZWxlY3RlZFN1YnBsb3Q9aS5pZCl9ZnVuY3Rpb24gQSh0KXt2YXIgZT10LnBsb3RpbmZvO2Uuc2VsZWN0aW9uPXt9LGUuc2VsZWN0aW9uLnNlbGVjdGlvbkRlZnM9dC5zZWxlY3Rpb25EZWZzPVtdLGUuc2VsZWN0aW9uLm1lcmdlZFBvbHlnb25zPXQubWVyZ2VkUG9seWdvbnM9W119ZnVuY3Rpb24gVCh0LGUscixuKXt2YXIgaSxhLG8scz1bXSxsPWUubWFwKHkpLGM9ci5tYXAoeSk7Zm9yKG89MDtvPHQuY2FsY2RhdGEubGVuZ3RoO28rKylpZighMD09PShhPShpPXQuY2FsY2RhdGFbb10pWzBdLnRyYWNlKS52aXNpYmxlJiZhLl9tb2R1bGUmJmEuX21vZHVsZS5zZWxlY3RQb2ludHMpaWYoIW58fGEuc3VicGxvdCE9PW4mJmEuZ2VvIT09bilpZihcInNwbG9tXCI9PT1hLnR5cGUmJmEuX3hheGVzW2xbMF1dJiZhLl95YXhlc1tjWzBdXSl7dmFyIHU9cChhLl9tb2R1bGUsaSxlWzBdLHJbMF0pO3Uuc2NlbmU9dC5fZnVsbExheW91dC5fc3Bsb21TY2VuZXNbYS51aWRdLHMucHVzaCh1KX1lbHNlIGlmKFwic2Fua2V5XCI9PT1hLnR5cGUpe3ZhciBmPXAoYS5fbW9kdWxlLGksZVswXSxyWzBdKTtzLnB1c2goZil9ZWxzZXtpZigtMT09PWwuaW5kZXhPZihhLnhheGlzKSljb250aW51ZTtpZigtMT09PWMuaW5kZXhPZihhLnlheGlzKSljb250aW51ZTtzLnB1c2gocChhLl9tb2R1bGUsaSxoKHQsYS54YXhpcyksaCh0LGEueWF4aXMpKSl9ZWxzZSBzLnB1c2gocChhLl9tb2R1bGUsaSxlWzBdLHJbMF0pKTtyZXR1cm4gcztmdW5jdGlvbiBwKHQsZSxyLG4pe3JldHVybntfbW9kdWxlOnQsY2Q6ZSx4YXhpczpyLHlheGlzOm59fX1mdW5jdGlvbiBNKHQsZSl7dmFyIHIsbixpPVtdO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07aS5wdXNoKGEuam9pbihcIkxcIikrXCJMXCIrYVswXSl9bj10Lmxlbmd0aD4wP1wiTVwiK2kuam9pbihcIk1cIikrXCJaXCI6XCJNMCwwWlwiLGUuYXR0cihcImRcIixuKX1mdW5jdGlvbiBTKHQpe3ZhciBlPXQuc2VhcmNoSW5mby5jZFswXS50cmFjZSxyPXQucG9pbnROdW1iZXIsbj10LnBvaW50TnVtYmVycyxpPW4ubGVuZ3RoPjA/blswXTpyO3JldHVybiEhZS5zZWxlY3RlZHBvaW50cyYmZS5zZWxlY3RlZHBvaW50cy5pbmRleE9mKGkpPi0xfWZ1bmN0aW9uIEUodCxlLHIpe3ZhciBuLGEsbyxzO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBsPWVbbl0uY2RbMF0udHJhY2UuX2Z1bGxJbnB1dCxjPXQuX2Z1bGxMYXlvdXQuX3RyYWNlUHJlR1VJW2wudWlkXXx8e307dm9pZCAwPT09Yy5zZWxlY3RlZHBvaW50cyYmKGMuc2VsZWN0ZWRwb2ludHM9bC5faW5wdXQuc2VsZWN0ZWRwb2ludHN8fG51bGwpfWlmKHIpe3ZhciB1PXIucG9pbnRzfHxbXTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKShzPWVbbl0uY2RbMF0udHJhY2UpLl9pbnB1dC5zZWxlY3RlZHBvaW50cz1zLl9mdWxsSW5wdXQuc2VsZWN0ZWRwb2ludHM9W10scy5fZnVsbElucHV0IT09cyYmKHMuc2VsZWN0ZWRwb2ludHM9W10pO2ZvcihuPTA7bjx1Lmxlbmd0aDtuKyspe3ZhciBoPXVbbl0sZD1oLmRhdGEsZz1oLmZ1bGxEYXRhO2gucG9pbnRJbmRpY2VzPyhbXS5wdXNoLmFwcGx5KGQuc2VsZWN0ZWRwb2ludHMsaC5wb2ludEluZGljZXMpLHMuX2Z1bGxJbnB1dCE9PXMmJltdLnB1c2guYXBwbHkoZy5zZWxlY3RlZHBvaW50cyxoLnBvaW50SW5kaWNlcykpOihkLnNlbGVjdGVkcG9pbnRzLnB1c2goaC5wb2ludEluZGV4KSxzLl9mdWxsSW5wdXQhPT1zJiZnLnNlbGVjdGVkcG9pbnRzLnB1c2goaC5wb2ludEluZGV4KSl9fWVsc2UgZm9yKG49MDtuPGUubGVuZ3RoO24rKylkZWxldGUocz1lW25dLmNkWzBdLnRyYWNlKS5zZWxlY3RlZHBvaW50cyxkZWxldGUgcy5faW5wdXQuc2VsZWN0ZWRwb2ludHMscy5fZnVsbElucHV0IT09cyYmZGVsZXRlIHMuX2Z1bGxJbnB1dC5zZWxlY3RlZHBvaW50czt2YXIgdj0hMTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKXtzPShvPShhPWVbbl0pLmNkKVswXS50cmFjZSxpLnRyYWNlSXMocyxcInJlZ2xcIikmJih2PSEwKTt2YXIgbT1hLl9tb2R1bGUseT1tLnN0eWxlT25TZWxlY3R8fG0uc3R5bGU7eSYmeSh0LG8pfXYmJihmKHQpLHAodCkpfWZ1bmN0aW9uIEModCxlKXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgcj1lLmNkLG49ZS5jZFswXS50cmFjZSxpPTA7aTx0Lmxlbmd0aDtpKyspdFtpXT11KHRbaV0sbixyKTtyZXR1cm4gdH1mdW5jdGlvbiBMKHQpe3ZhciBlPSh0Ll9mdWxsTGF5b3V0fHx7fSkuX3pvb21sYXllcjtlJiZlLnNlbGVjdEFsbChcIi5zZWxlY3Qtb3V0bGluZVwiKS5yZW1vdmUoKX1lLmV4cG9ydHM9e3ByZXBTZWxlY3Q6ZnVuY3Rpb24odCxlLHIsaSxsKXt2YXIgdSxoLGYscCx5LGIsXyxTPWkuZ2QsTD1TLl9mdWxsTGF5b3V0LHo9TC5fem9vbWxheWVyLE89aS5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEk9aS5wbG90aW5mbyxEPUkueGF4aXMuX29mZnNldCxQPUkueWF4aXMuX29mZnNldCxSPWUtTy5sZWZ0LEY9ci1PLnRvcCxCPVIsTj1GLGo9XCJNXCIrUitcIixcIitGLFY9aS54YXhlc1swXS5fbGVuZ3RoLFU9aS55YXhlc1swXS5fbGVuZ3RoLHE9aS54YXhlcy5jb25jYXQoaS55YXhlcyksSD10LmFsdEtleTtrKHQsUyxpKSxcImxhc3NvXCI9PT1sJiYodT12KFtbUixGXV0sZC5CRU5EUFgpKTt2YXIgRz16LnNlbGVjdEFsbChcInBhdGguc2VsZWN0LW91dGxpbmUtXCIrSS5pZCkuZGF0YShbMSwyXSk7Ry5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJzZWxlY3Qtb3V0bGluZSBzZWxlY3Qtb3V0bGluZS1cIit0K1wiIHNlbGVjdC1vdXRsaW5lLVwiK0kuaWR9KS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrRCtcIiwgXCIrUCtcIilcIikuYXR0cihcImRcIixqK1wiWlwiKTt2YXIgWSxXPXouYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiY2xhc3NcIixcInpvb21ib3gtY29ybmVyc1wiKS5zdHlsZSh7ZmlsbDphLmJhY2tncm91bmQsc3Ryb2tlOmEuZGVmYXVsdExpbmUsXCJzdHJva2Utd2lkdGhcIjoxfSkuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK0QrXCIsIFwiK1ArXCIpXCIpLmF0dHIoXCJkXCIsXCJNMCwwWlwiKSxYPUwuX3VpZCtkLlNFTEVDVElELFo9W10sJD1UKFMsaS54YXhlcyxpLnlheGVzLGkuc3VicGxvdCk7ZnVuY3Rpb24gSih0KXt2YXIgZT1cInlcIj09PXQuX2lkLmNoYXJBdCgwKT8xOjA7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0LnAyZChyW2VdKX19ZnVuY3Rpb24gSyh0LGUpe3JldHVybiB0LWV9WT1JLmZpbGxSYW5nZUl0ZW1zP0kuZmlsbFJhbmdlSXRlbXM6XCJzZWxlY3RcIj09PWw/ZnVuY3Rpb24odCxlKXt2YXIgcj10LnJhbmdlPXt9O2Zvcih5PTA7eTxxLmxlbmd0aDt5Kyspe3ZhciBuPXFbeV0saT1uLl9pZC5jaGFyQXQoMCk7cltuLl9pZF09W24ucDJkKGVbaStcIm1pblwiXSksbi5wMmQoZVtpK1wibWF4XCJdKV0uc29ydChLKX19OmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Lmxhc3NvUG9pbnRzPXt9O2Zvcih5PTA7eTxxLmxlbmd0aDt5Kyspe3ZhciBpPXFbeV07bltpLl9pZF09ci5maWx0ZXJlZC5tYXAoSihpKSl9fSxpLm1vdmVGbj1mdW5jdGlvbih0LGUpe0I9TWF0aC5tYXgoMCxNYXRoLm1pbihWLHQrUikpLE49TWF0aC5tYXgoMCxNYXRoLm1pbihVLGUrRikpO3ZhciByPU1hdGguYWJzKEItUiksYT1NYXRoLmFicyhOLUYpO2lmKFwic2VsZWN0XCI9PT1sKXt2YXIgbz1MLnNlbGVjdGRpcmVjdGlvbjtcImhcIj09PShvPVwiYW55XCI9PT1MLnNlbGVjdGRpcmVjdGlvbj9hPE1hdGgubWluKC42KnIsZyk/XCJoXCI6cjxNYXRoLm1pbiguNiphLGcpP1widlwiOlwiZFwiOkwuc2VsZWN0ZGlyZWN0aW9uKT8oKHA9W1tSLDBdLFtSLFVdLFtCLFVdLFtCLDBdXSkueG1pbj1NYXRoLm1pbihSLEIpLHAueG1heD1NYXRoLm1heChSLEIpLHAueW1pbj1NYXRoLm1pbigwLFUpLHAueW1heD1NYXRoLm1heCgwLFUpLFcuYXR0cihcImRcIixcIk1cIitwLnhtaW4rXCIsXCIrKEYtZykrXCJoLTR2XCIrMipnK1wiaDRaTVwiKyhwLnhtYXgtMSkrXCIsXCIrKEYtZykrXCJoNHZcIisyKmcrXCJoLTRaXCIpKTpcInZcIj09PW8/KChwPVtbMCxGXSxbMCxOXSxbVixOXSxbVixGXV0pLnhtaW49TWF0aC5taW4oMCxWKSxwLnhtYXg9TWF0aC5tYXgoMCxWKSxwLnltaW49TWF0aC5taW4oRixOKSxwLnltYXg9TWF0aC5tYXgoRixOKSxXLmF0dHIoXCJkXCIsXCJNXCIrKFItZykrXCIsXCIrcC55bWluK1widi00aFwiKzIqZytcInY0Wk1cIisoUi1nKStcIixcIisocC55bWF4LTEpK1widjRoXCIrMipnK1widi00WlwiKSk6XCJkXCI9PT1vJiYoKHA9W1tSLEZdLFtSLE5dLFtCLE5dLFtCLEZdXSkueG1pbj1NYXRoLm1pbihSLEIpLHAueG1heD1NYXRoLm1heChSLEIpLHAueW1pbj1NYXRoLm1pbihGLE4pLHAueW1heD1NYXRoLm1heChGLE4pLFcuYXR0cihcImRcIixcIk0wLDBaXCIpKX1lbHNlXCJsYXNzb1wiPT09bCYmKHUuYWRkUHQoW0IsTl0pLHA9dS5maWx0ZXJlZCk7aS5zZWxlY3Rpb25EZWZzJiZpLnNlbGVjdGlvbkRlZnMubGVuZ3RoPyhmPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gcj9uLmRpZmZlcmVuY2Uoe3JlZ2lvbnM6dCxpbnZlcnRlZDohMX0se3JlZ2lvbnM6W2VdLGludmVydGVkOiExfSkucmVnaW9uczpuLnVuaW9uKHtyZWdpb25zOnQsaW52ZXJ0ZWQ6ITF9LHtyZWdpb25zOltlXSxpbnZlcnRlZDohMX0pLnJlZ2lvbnN9KGkubWVyZ2VkUG9seWdvbnMscCxIKSxwLnN1YnRyYWN0PUgsaD13KGkuc2VsZWN0aW9uRGVmcy5jb25jYXQoW3BdKSkpOihmPVtwXSxoPW0ocCkpLE0oZixHKSxjLnRocm90dGxlKFgsZC5TRUxFQ1RERUxBWSxmdW5jdGlvbigpe3ZhciB0O1o9W107dmFyIGUscj1bXTtmb3IoeT0wO3k8JC5sZW5ndGg7eSsrKWlmKGU9KGI9JFt5XSkuX21vZHVsZS5zZWxlY3RQb2ludHMoYixoKSxyLnB1c2goZSksdD1DKGUsYiksWi5sZW5ndGgpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspWi5wdXNoKHRbbl0pO2Vsc2UgWj10O0UoUywkLF89e3BvaW50czpafSksWShfLHAsdSksaS5nZC5lbWl0KFwicGxvdGx5X3NlbGVjdGluZ1wiLF8pfSl9LGkuY2xpY2tGbj1mdW5jdGlvbih0LGUpe3ZhciByPUwuY2xpY2ttb2RlO1cucmVtb3ZlKCksYy5kb25lKFgpLnRoZW4oZnVuY3Rpb24oKXtpZihjLmNsZWFyKFgpLDI9PT10KXtmb3IoRy5yZW1vdmUoKSx5PTA7eTwkLmxlbmd0aDt5KyspKGI9JFt5XSkuX21vZHVsZS5zZWxlY3RQb2ludHMoYiwhMSk7RShTLCQpLEEoaSksUy5lbWl0KFwicGxvdGx5X2Rlc2VsZWN0XCIsbnVsbCl9ZWxzZSByLmluZGV4T2YoXCJzZWxlY3RcIik+LTEmJngoZSxTLGkueGF4ZXMsaS55YXhlcyxpLnN1YnBsb3QsaSxHKSxcImV2ZW50XCI9PT1yJiZTLmVtaXQoXCJwbG90bHlfc2VsZWN0ZWRcIix2b2lkIDApO28uY2xpY2soUyxlKX0pLmNhdGNoKHMuZXJyb3IpfSxpLmRvbmVGbj1mdW5jdGlvbigpe1cucmVtb3ZlKCksYy5kb25lKFgpLnRoZW4oZnVuY3Rpb24oKXtjLmNsZWFyKFgpLGkuZ2QuZW1pdChcInBsb3RseV9zZWxlY3RlZFwiLF8pLHAmJmkuc2VsZWN0aW9uRGVmcyYmKHAuc3VidHJhY3Q9SCxpLnNlbGVjdGlvbkRlZnMucHVzaChwKSxpLm1lcmdlZFBvbHlnb25zLmxlbmd0aD0wLFtdLnB1c2guYXBwbHkoaS5tZXJnZWRQb2x5Z29ucyxmKSksaS5kb25lRm5Db21wbGV0ZWQmJmkuZG9uZUZuQ29tcGxldGVkKFopfSkuY2F0Y2gocy5lcnJvcil9fSxjbGVhclNlbGVjdDpMLHNlbGVjdE9uQ2xpY2s6eH19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2Z4XCI6NjE3LFwiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzXCI6NjEzLFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzXCI6Njg2LFwiLi4vLi4vbGliL3BvbHlnb25cIjo3MTMsXCIuLi8uLi9saWIvdGhyb3R0bGVcIjo3MjYsXCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lc1wiOjc0MCxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9heGlzX2lkc1wiOjc1MixcIi4vY29uc3RhbnRzXCI6NzU1LHBvbHlib29sanM6NDY2fV0sNzY3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcImZhc3QtaXNudW1lcmljXCIpLGE9dChcIi4uLy4uL2xpYlwiKSxvPWEuY2xlYW5OdW1iZXIscz1hLm1zMkRhdGVUaW1lLGw9YS5kYXRlVGltZTJtcyxjPWEuZW5zdXJlTnVtYmVyLHU9YS5pc0FycmF5T3JUeXBlZEFycmF5LGg9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIiksZj1oLkZQX1NBRkUscD1oLkJBRE5VTSxkPWguTE9HX0NMSVAsZz10KFwiLi9jb25zdGFudHNcIiksdj10KFwiLi9heGlzX2lkc1wiKTtmdW5jdGlvbiBtKHQpe3JldHVybiBNYXRoLnBvdygxMCx0KX1mdW5jdGlvbiB5KHQpe3JldHVybiBudWxsIT10fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2U9ZXx8e307dmFyIHI9dC5faWR8fFwieFwiLGg9ci5jaGFyQXQoMCk7ZnVuY3Rpb24geChlLHIpe2lmKGU+MClyZXR1cm4gTWF0aC5sb2coZSkvTWF0aC5MTjEwO2lmKGU8PTAmJnImJnQucmFuZ2UmJjI9PT10LnJhbmdlLmxlbmd0aCl7dmFyIG49dC5yYW5nZVswXSxpPXQucmFuZ2VbMV07cmV0dXJuLjUqKG4raS0yKmQqTWF0aC5hYnMobi1pKSl9cmV0dXJuIHB9ZnVuY3Rpb24gYihlLHIsbil7dmFyIG89bChlLG58fHQuY2FsZW5kYXIpO2lmKG89PT1wKXtpZighaShlKSlyZXR1cm4gcDtlPStlO3ZhciBzPU1hdGguZmxvb3IoMTAqYS5tb2QoZSsuMDUsMSkpLGM9TWF0aC5yb3VuZChlLXMvMTApO289bChuZXcgRGF0ZShjKSkrcy8xMH1yZXR1cm4gb31mdW5jdGlvbiBfKGUscixuKXtyZXR1cm4gcyhlLHIsbnx8dC5jYWxlbmRhcil9ZnVuY3Rpb24gdyhlKXtyZXR1cm4gdC5fY2F0ZWdvcmllc1tNYXRoLnJvdW5kKGUpXX1mdW5jdGlvbiBrKGUpe2lmKHkoZSkpe2lmKHZvaWQgMD09PXQuX2NhdGVnb3JpZXNNYXAmJih0Ll9jYXRlZ29yaWVzTWFwPXt9KSx2b2lkIDAhPT10Ll9jYXRlZ29yaWVzTWFwW2VdKXJldHVybiB0Ll9jYXRlZ29yaWVzTWFwW2VdO3QuX2NhdGVnb3JpZXMucHVzaChlKTt2YXIgcj10Ll9jYXRlZ29yaWVzLmxlbmd0aC0xO3JldHVybiB0Ll9jYXRlZ29yaWVzTWFwW2VdPXIscn1yZXR1cm4gcH1mdW5jdGlvbiBBKGUpe2lmKHQuX2NhdGVnb3JpZXNNYXApcmV0dXJuIHQuX2NhdGVnb3JpZXNNYXBbZV19ZnVuY3Rpb24gVCh0KXt2YXIgZT1BKHQpO3JldHVybiB2b2lkIDAhPT1lP2U6aSh0KT8rdDp2b2lkIDB9ZnVuY3Rpb24gTShlKXtyZXR1cm4gaShlKT9uLnJvdW5kKHQuX2IrdC5fbSplLDIpOnB9ZnVuY3Rpb24gUyhlKXtyZXR1cm4oZS10Ll9iKS90Ll9tfXQuYzJsPVwibG9nXCI9PT10LnR5cGU/eDpjLHQubDJjPVwibG9nXCI9PT10LnR5cGU/bTpjLHQubDJwPU0sdC5wMmw9Uyx0LmMycD1cImxvZ1wiPT09dC50eXBlP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIE0oeCh0LGUpKX06TSx0LnAyYz1cImxvZ1wiPT09dC50eXBlP2Z1bmN0aW9uKHQpe3JldHVybiBtKFModCkpfTpTLC0xIT09W1wibGluZWFyXCIsXCItXCJdLmluZGV4T2YodC50eXBlKT8odC5kMnI9dC5yMmQ9dC5kMmM9dC5yMmM9dC5kMmw9dC5yMmw9byx0LmMyZD10LmMycj10LmwyZD10Lmwycj1jLHQuZDJwPXQucjJwPWZ1bmN0aW9uKGUpe3JldHVybiB0LmwycChvKGUpKX0sdC5wMmQ9dC5wMnI9Uyx0LmNsZWFuUG9zPWMpOlwibG9nXCI9PT10LnR5cGU/KHQuZDJyPXQuZDJsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHgobyh0KSxlKX0sdC5yMmQ9dC5yMmM9ZnVuY3Rpb24odCl7cmV0dXJuIG0obyh0KSl9LHQuZDJjPXQucjJsPW8sdC5jMmQ9dC5sMnI9Yyx0LmMycj14LHQubDJkPW0sdC5kMnA9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5sMnAodC5kMnIoZSxyKSl9LHQucDJkPWZ1bmN0aW9uKHQpe3JldHVybiBtKFModCkpfSx0LnIycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5sMnAobyhlKSl9LHQucDJyPVMsdC5jbGVhblBvcz1jKTpcImRhdGVcIj09PXQudHlwZT8odC5kMnI9dC5yMmQ9YS5pZGVudGl0eSx0LmQyYz10LnIyYz10LmQybD10LnIybD1iLHQuYzJkPXQuYzJyPXQubDJkPXQubDJyPV8sdC5kMnA9dC5yMnA9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmwycChiKGUsMCxuKSl9LHQucDJkPXQucDJyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gXyhTKHQpLGUscil9LHQuY2xlYW5Qb3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGEuY2xlYW5EYXRlKGUscCx0LmNhbGVuZGFyKX0pOlwiY2F0ZWdvcnlcIj09PXQudHlwZT8odC5kMmM9dC5kMmw9ayx0LnIyZD10LmMyZD10LmwyZD13LHQuZDJyPXQuZDJsX25vYWRkPVQsdC5yMmM9ZnVuY3Rpb24oZSl7dmFyIHI9VChlKTtyZXR1cm4gdm9pZCAwIT09cj9yOnQuZnJhY3Rpb24yciguNSl9LHQubDJyPXQuYzJyPWMsdC5yMmw9VCx0LmQycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5sMnAodC5yMmMoZSkpfSx0LnAyZD1mdW5jdGlvbih0KXtyZXR1cm4gdyhTKHQpKX0sdC5yMnA9dC5kMnAsdC5wMnI9Uyx0LmNsZWFuUG9zPWZ1bmN0aW9uKHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiZcIlwiIT09dD90OmModCl9KTpcIm11bHRpY2F0ZWdvcnlcIj09PXQudHlwZSYmKHQucjJkPXQuYzJkPXQubDJkPXcsdC5kMnI9dC5kMmxfbm9hZGQ9VCx0LnIyYz1mdW5jdGlvbihlKXt2YXIgcj1UKGUpO3JldHVybiB2b2lkIDAhPT1yP3I6dC5mcmFjdGlvbjJyKC41KX0sdC5yMmNfanVzdF9pbmRpY2VzPUEsdC5sMnI9dC5jMnI9Yyx0LnIybD1ULHQuZDJwPWZ1bmN0aW9uKGUpe3JldHVybiB0LmwycCh0LnIyYyhlKSl9LHQucDJkPWZ1bmN0aW9uKHQpe3JldHVybiB3KFModCkpfSx0LnIycD10LmQycCx0LnAycj1TLHQuY2xlYW5Qb3M9ZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl8fFwic3RyaW5nXCI9PXR5cGVvZiB0JiZcIlwiIT09dD90OmModCl9LHQuc2V0dXBNdWx0aUNhdGVnb3J5PWZ1bmN0aW9uKG4pe3ZhciBpLG8scz10Ll90cmFjZUluZGljZXMsbD1lLl9heGlzTWF0Y2hHcm91cHM7aWYobCYmbC5sZW5ndGgmJjA9PT10Ll9jYXRlZ29yaWVzLmxlbmd0aClmb3IoaT0wO2k8bC5sZW5ndGg7aSsrKXt2YXIgYz1sW2ldO2lmKGNbcl0pZm9yKHZhciBmIGluIGMpaWYoZiE9PXIpe3ZhciBwPWVbdi5pZDJuYW1lKGYpXTtzPXMuY29uY2F0KHAuX3RyYWNlSW5kaWNlcyl9fXZhciBkPVtbMCx7fV0sWzAse31dXSxnPVtdO2ZvcihpPTA7aTxzLmxlbmd0aDtpKyspe3ZhciBtPW5bc1tpXV07aWYoaCBpbiBtKXt2YXIgeD1tW2hdLGI9bS5fbGVuZ3RofHxhLm1pblJvd0xlbmd0aCh4KTtpZih1KHhbMF0pJiZ1KHhbMV0pKWZvcihvPTA7bzxiO28rKyl7dmFyIF89eFswXVtvXSx3PXhbMV1bb107eShfKSYmeSh3KSYmKGcucHVzaChbXyx3XSksXyBpbiBkWzBdWzFdfHwoZFswXVsxXVtfXT1kWzBdWzBdKyspLHcgaW4gZFsxXVsxXXx8KGRbMV1bMV1bd109ZFsxXVswXSsrKSl9fX1mb3IoZy5zb3J0KGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZFswXVsxXSxuPXJbdFswXV0tcltlWzBdXTtpZihuKXJldHVybiBuO3ZhciBpPWRbMV1bMV07cmV0dXJuIGlbdFsxXV0taVtlWzFdXX0pLGk9MDtpPGcubGVuZ3RoO2krKylrKGdbaV0pfSksdC5mcmFjdGlvbjJyPWZ1bmN0aW9uKGUpe3ZhciByPXQucjJsKHQucmFuZ2VbMF0pLG49dC5yMmwodC5yYW5nZVsxXSk7cmV0dXJuIHQubDJyKHIrZSoobi1yKSl9LHQucjJmcmFjdGlvbj1mdW5jdGlvbihlKXt2YXIgcj10LnIybCh0LnJhbmdlWzBdKSxuPXQucjJsKHQucmFuZ2VbMV0pO3JldHVybih0LnIybChlKS1yKS8obi1yKX0sdC5jbGVhblJhbmdlPWZ1bmN0aW9uKGUscil7cnx8KHI9e30pLGV8fChlPVwicmFuZ2VcIik7dmFyIG4sbyxzPWEubmVzdGVkUHJvcGVydHkodCxlKS5nZXQoKTtpZihvPShvPVwiZGF0ZVwiPT09dC50eXBlP2EuZGZsdFJhbmdlKHQuY2FsZW5kYXIpOlwieVwiPT09aD9nLkRGTFRSQU5HRVk6ci5kZmx0UmFuZ2V8fGcuREZMVFJBTkdFWCkuc2xpY2UoKSxzJiYyPT09cy5sZW5ndGgpZm9yKFwiZGF0ZVwiPT09dC50eXBlJiYoc1swXT1hLmNsZWFuRGF0ZShzWzBdLHAsdC5jYWxlbmRhciksc1sxXT1hLmNsZWFuRGF0ZShzWzFdLHAsdC5jYWxlbmRhcikpLG49MDtuPDI7bisrKWlmKFwiZGF0ZVwiPT09dC50eXBlKXtpZighYS5pc0RhdGVUaW1lKHNbbl0sdC5jYWxlbmRhcikpe3RbZV09bzticmVha31pZih0LnIybChzWzBdKT09PXQucjJsKHNbMV0pKXt2YXIgbD1hLmNvbnN0cmFpbih0LnIybChzWzBdKSxhLk1JTl9NUysxZTMsYS5NQVhfTVMtMWUzKTtzWzBdPXQubDJyKGwtMWUzKSxzWzFdPXQubDJyKGwrMWUzKTticmVha319ZWxzZXtpZighaShzW25dKSl7aWYoIWkoc1sxLW5dKSl7dFtlXT1vO2JyZWFrfXNbbl09c1sxLW5dKihuPzEwOi4xKX1pZihzW25dPC1mP3Nbbl09LWY6c1tuXT5mJiYoc1tuXT1mKSxzWzBdPT09c1sxXSl7dmFyIGM9TWF0aC5tYXgoMSxNYXRoLmFicygxZS02KnNbMF0pKTtzWzBdLT1jLHNbMV0rPWN9fWVsc2UgYS5uZXN0ZWRQcm9wZXJ0eSh0LGUpLnNldChvKX0sdC5zZXRTY2FsZT1mdW5jdGlvbihyKXt2YXIgbj1lLl9zaXplO2lmKHQub3ZlcmxheWluZyl7dmFyIGk9di5nZXRGcm9tSWQoe19mdWxsTGF5b3V0OmV9LHQub3ZlcmxheWluZyk7dC5kb21haW49aS5kb21haW59dmFyIGE9ciYmdC5fcj9cIl9yXCI6XCJyYW5nZVwiLG89dC5jYWxlbmRhcjt0LmNsZWFuUmFuZ2UoYSk7dmFyIHM9dC5yMmwodFthXVswXSxvKSxsPXQucjJsKHRbYV1bMV0sbyk7aWYoXCJ5XCI9PT1oPyh0Ll9vZmZzZXQ9bi50KygxLXQuZG9tYWluWzFdKSpuLmgsdC5fbGVuZ3RoPW4uaCoodC5kb21haW5bMV0tdC5kb21haW5bMF0pLHQuX209dC5fbGVuZ3RoLyhzLWwpLHQuX2I9LXQuX20qbCk6KHQuX29mZnNldD1uLmwrdC5kb21haW5bMF0qbi53LHQuX2xlbmd0aD1uLncqKHQuZG9tYWluWzFdLXQuZG9tYWluWzBdKSx0Ll9tPXQuX2xlbmd0aC8obC1zKSx0Ll9iPS10Ll9tKnMpLCFpc0Zpbml0ZSh0Ll9tKXx8IWlzRmluaXRlKHQuX2IpfHx0Ll9sZW5ndGg8MCl0aHJvdyBlLl9yZXBsb3R0aW5nPSExLG5ldyBFcnJvcihcIlNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggYXhpcyBzY2FsaW5nXCIpfSx0Lm1ha2VDYWxjZGF0YT1mdW5jdGlvbihlLHIpe3ZhciBuLGksbyxzLGw9dC50eXBlLGM9XCJkYXRlXCI9PT1sJiZlW3IrXCJjYWxlbmRhclwiXTtpZihyIGluIGUpe2lmKG49ZVtyXSxzPWUuX2xlbmd0aHx8YS5taW5Sb3dMZW5ndGgobiksYS5pc1R5cGVkQXJyYXkobikmJihcImxpbmVhclwiPT09bHx8XCJsb2dcIj09PWwpKXtpZihzPT09bi5sZW5ndGgpcmV0dXJuIG47aWYobi5zdWJhcnJheSlyZXR1cm4gbi5zdWJhcnJheSgwLHMpfWlmKFwibXVsdGljYXRlZ29yeVwiPT09bClyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXt2YXIgaT0odFswXXx8W10pW25dLGE9KHRbMV18fFtdKVtuXTtyW25dPUEoW2ksYV0pfXJldHVybiByfShuLHMpO2ZvcihpPW5ldyBBcnJheShzKSxvPTA7bzxzO28rKylpW29dPXQuZDJjKG5bb10sMCxjKX1lbHNle3ZhciB1PXIrXCIwXCJpbiBlP3QuZDJjKGVbcitcIjBcIl0sMCxjKTowLGg9ZVtcImRcIityXT9OdW1iZXIoZVtcImRcIityXSk6MTtmb3Iobj1lW3t4OlwieVwiLHk6XCJ4XCJ9W3JdXSxzPWUuX2xlbmd0aHx8bi5sZW5ndGgsaT1uZXcgQXJyYXkocyksbz0wO288cztvKyspaVtvXT11K28qaH1yZXR1cm4gaX0sdC5pc1ZhbGlkUmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJjI9PT1lLmxlbmd0aCYmaSh0LnIybChlWzBdKSkmJmkodC5yMmwoZVsxXSkpfSx0LmlzUHRXaXRoaW5SYW5nZT1mdW5jdGlvbihlLHIpe3ZhciBuPXQuYzJsKGVbaF0sbnVsbCxyKSxpPXQucjJsKHQucmFuZ2VbMF0pLGE9dC5yMmwodC5yYW5nZVsxXSk7cmV0dXJuIGk8YT9pPD1uJiZuPD1hOmE8PW4mJm48PWl9LHQuY2xlYXJDYWxjPWZ1bmN0aW9uKCl7dmFyIG49ZnVuY3Rpb24oKXt0Ll9jYXRlZ29yaWVzPVtdLHQuX2NhdGVnb3JpZXNNYXA9e319LGk9ZS5fYXhpc01hdGNoR3JvdXBzO2lmKGkmJmkubGVuZ3RoKXtmb3IodmFyIGE9ITEsbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz1pW29dO2lmKHNbcl0pe2E9ITA7dmFyIGw9bnVsbCxjPW51bGw7Zm9yKHZhciB1IGluIHMpe3ZhciBoPWVbdi5pZDJuYW1lKHUpXTtpZihoLl9jYXRlZ29yaWVzKXtsPWguX2NhdGVnb3JpZXMsYz1oLl9jYXRlZ29yaWVzTWFwO2JyZWFrfX1sJiZjPyh0Ll9jYXRlZ29yaWVzPWwsdC5fY2F0ZWdvcmllc01hcD1jKTpuKCk7YnJlYWt9fWF8fG4oKX1lbHNlIG4oKTtpZih0Ll9pbml0aWFsQ2F0ZWdvcmllcylmb3IodmFyIGY9MDtmPHQuX2luaXRpYWxDYXRlZ29yaWVzLmxlbmd0aDtmKyspayh0Ll9pbml0aWFsQ2F0ZWdvcmllc1tmXSl9O3ZhciBFPWUuX2QzbG9jYWxlO1wiZGF0ZVwiPT09dC50eXBlJiYodC5fZGF0ZUZvcm1hdD1FP0UudGltZUZvcm1hdC51dGM6bi50aW1lLmZvcm1hdC51dGMsdC5fZXh0cmFGb3JtYXQ9ZS5fZXh0cmFGb3JtYXQpLHQuX3NlcGFyYXRvcnM9ZS5zZXBhcmF0b3JzLHQuX251bUZvcm1hdD1FP0UubnVtYmVyRm9ybWF0Om4uZm9ybWF0LGRlbGV0ZSB0Ll9taW5EdGljayxkZWxldGUgdC5fZm9yY2VUaWNrMH19LHtcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuL2F4aXNfaWRzXCI6NzUyLFwiLi9jb25zdGFudHNcIjo3NTUsZDM6MTU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw3Njg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCIpO2Z1bmN0aW9uIG8odCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLnRpY2tmb3JtYXRzdG9wcyxyLGEpfXIoXCJlbmFibGVkXCIpJiYocihcImR0aWNrcmFuZ2VcIikscihcInZhbHVlXCIpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyxsKXt2YXIgYz1mdW5jdGlvbih0KXt2YXIgZT1bXCJzaG93ZXhwb25lbnRcIixcInNob3d0aWNrcHJlZml4XCIsXCJzaG93dGlja3N1ZmZpeFwiXS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXRbZV19KTtpZihlLmV2ZXJ5KGZ1bmN0aW9uKHIpe3JldHVybiB0W3JdPT09dFtlWzBdXX0pfHwxPT09ZS5sZW5ndGgpcmV0dXJuIHRbZVswXV19KHQpO2lmKHIoXCJ0aWNrcHJlZml4XCIpJiZyKFwic2hvd3RpY2twcmVmaXhcIixjKSxyKFwidGlja3N1ZmZpeFwiLGwudGlja1N1ZmZpeERmbHQpJiZyKFwic2hvd3RpY2tzdWZmaXhcIixjKSxyKFwic2hvd3RpY2tsYWJlbHNcIikpe3ZhciB1PWwuZm9udHx8e30saD1lLmNvbG9yLGY9aCYmaCE9PWkuY29sb3IuZGZsdD9oOnUuY29sb3I7aWYobi5jb2VyY2VGb250KHIsXCJ0aWNrZm9udFwiLHtmYW1pbHk6dS5mYW1pbHksc2l6ZTp1LnNpemUsY29sb3I6Zn0pLHIoXCJ0aWNrYW5nbGVcIiksXCJjYXRlZ29yeVwiIT09cyl7dmFyIHA9cihcInRpY2tmb3JtYXRcIiksZD10LnRpY2tmb3JtYXRzdG9wcztBcnJheS5pc0FycmF5KGQpJiZkLmxlbmd0aCYmYSh0LGUse25hbWU6XCJ0aWNrZm9ybWF0c3RvcHNcIixpbmNsdXNpb25BdHRyOlwiZW5hYmxlZFwiLGhhbmRsZUl0ZW1EZWZhdWx0czpvfSkscHx8XCJkYXRlXCI9PT1zfHwocihcInNob3dleHBvbmVudFwiLGMpLHIoXCJleHBvbmVudGZvcm1hdFwiKSxyKFwic2VwYXJhdGV0aG91c2FuZHNcIikpfX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIjo3NDUsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6NzYxfV0sNzY5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1uLmNvZXJjZTIodCxlLGksXCJ0aWNrbGVuXCIpLHM9bi5jb2VyY2UyKHQsZSxpLFwidGlja3dpZHRoXCIpLGw9bi5jb2VyY2UyKHQsZSxpLFwidGlja2NvbG9yXCIsZS5jb2xvcik7cihcInRpY2tzXCIsYS5vdXRlclRpY2tzfHxvfHxzfHxsP1wib3V0c2lkZVwiOlwiXCIpfHwoZGVsZXRlIGUudGlja2xlbixkZWxldGUgZS50aWNrd2lkdGgsZGVsZXRlIGUudGlja2NvbG9yKX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo3NjF9XSw3NzA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9jbGVhbl90aWNrc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE7XCJhcnJheVwiIT09dC50aWNrbW9kZXx8XCJsb2dcIiE9PWkmJlwiZGF0ZVwiIT09aT9hPXIoXCJ0aWNrbW9kZVwiLEFycmF5LmlzQXJyYXkodC50aWNrdmFscyk/XCJhcnJheVwiOnQuZHRpY2s/XCJsaW5lYXJcIjpcImF1dG9cIik6YT1lLnRpY2ttb2RlPVwiYXV0b1wiO2lmKFwiYXV0b1wiPT09YSlyKFwibnRpY2tzXCIpO2Vsc2UgaWYoXCJsaW5lYXJcIj09PWEpe3ZhciBvPWUuZHRpY2s9bi5kdGljayh0LmR0aWNrLGkpO2UudGljazA9bi50aWNrMCh0LnRpY2swLGksZS5jYWxlbmRhcixvKX1lbHNlIGlmKFwibXVsdGljYXRlZ29yeVwiIT09aSl7dm9pZCAwPT09cihcInRpY2t2YWxzXCIpP2UudGlja21vZGU9XCJhdXRvXCI6cihcInRpY2t0ZXh0XCIpfX19LHtcIi4vY2xlYW5fdGlja3NcIjo3NTR9XSw3NzE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vcmVnaXN0cnlcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLG89dChcIi4vYXhlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7dmFyIGw9dC5fZnVsbExheW91dDtpZigwIT09ZS5sZW5ndGgpe3ZhciBjLHUsaCxmO3MmJihjPXMoKSk7dmFyIHA9bi5lYXNlKHIuZWFzaW5nKTtyZXR1cm4gdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShmKSxmPW51bGwsZnVuY3Rpb24oKXtmb3IodmFyIHI9e30sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgYT1lW25dO2EueHIwJiYoclthLnBsb3RpbmZvLnhheGlzLl9uYW1lK1wiLnJhbmdlXCJdPWEueHIwLnNsaWNlKCkpLGEueXIwJiYoclthLnBsb3RpbmZvLnlheGlzLl9uYW1lK1wiLnJhbmdlXCJdPWEueXIwLnNsaWNlKCkpfXJldHVybiBpLmNhbGwoXCJyZWxheW91dFwiLHQscikudGhlbihmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWQoZVt0XS5wbG90aW5mbyl9KX0oKX0pLHU9RGF0ZS5ub3coKSxmPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gbigpe2g9RGF0ZS5ub3coKTtmb3IodmFyIGE9TWF0aC5taW4oMSwoaC11KS9yLmR1cmF0aW9uKSxvPXAoYSkscz0wO3M8ZS5sZW5ndGg7cysrKWcoZVtzXSxvKTtoLXU+ci5kdXJhdGlvbj8oZnVuY3Rpb24oKXtmb3IodmFyIHI9e30sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgYT1lW25dO2EueHIxJiYoclthLnBsb3RpbmZvLnhheGlzLl9uYW1lK1wiLnJhbmdlXCJdPWEueHIxLnNsaWNlKCkpLGEueXIxJiYoclthLnBsb3RpbmZvLnlheGlzLl9uYW1lK1wiLnJhbmdlXCJdPWEueXIxLnNsaWNlKCkpfWMmJmMoKSxpLmNhbGwoXCJyZWxheW91dFwiLHQscikudGhlbihmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWQoZVt0XS5wbG90aW5mbyl9KX0oKSxmPXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShuKSk6Zj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG4pfSksUHJvbWlzZS5yZXNvbHZlKCl9ZnVuY3Rpb24gZCh0KXt2YXIgZT10LnhheGlzLHI9dC55YXhpcztsLl9kZWZzLnNlbGVjdChcIiNcIit0LmNsaXBJZCtcIj4gcmVjdFwiKS5jYWxsKGEuc2V0VHJhbnNsYXRlLDAsMCkuY2FsbChhLnNldFNjYWxlLDEsMSksdC5wbG90LmNhbGwoYS5zZXRUcmFuc2xhdGUsZS5fb2Zmc2V0LHIuX29mZnNldCkuY2FsbChhLnNldFNjYWxlLDEsMSk7dmFyIG49dC5wbG90LnNlbGVjdEFsbChcIi5zY2F0dGVybGF5ZXIgLnRyYWNlXCIpO24uc2VsZWN0QWxsKFwiLnBvaW50XCIpLmNhbGwoYS5zZXRQb2ludEdyb3VwU2NhbGUsMSwxKSxuLnNlbGVjdEFsbChcIi50ZXh0cG9pbnRcIikuY2FsbChhLnNldFRleHRQb2ludHNTY2FsZSwxLDEpLG4uY2FsbChhLmhpZGVPdXRzaWRlUmFuZ2VQb2ludHMsdCl9ZnVuY3Rpb24gZyhlLHIpe3ZhciBuPWUucGxvdGluZm8saT1uLnhheGlzLHM9bi55YXhpcyxsPWUueHIwLGM9ZS54cjEsdT1pLl9sZW5ndGgsaD1lLnlyMCxmPWUueXIxLHA9cy5fbGVuZ3RoLGQ9ISFjLGc9ISFmLHY9W107aWYoZCl7dmFyIG09bFsxXS1sWzBdLHk9Y1sxXS1jWzBdO3ZbMF09KGxbMF0qKDEtcikrcipjWzBdLWxbMF0pLyhsWzFdLWxbMF0pKnUsdlsyXT11KigxLXIrcip5L20pLGkucmFuZ2VbMF09bFswXSooMS1yKStyKmNbMF0saS5yYW5nZVsxXT1sWzFdKigxLXIpK3IqY1sxXX1lbHNlIHZbMF09MCx2WzJdPXU7aWYoZyl7dmFyIHg9aFsxXS1oWzBdLGI9ZlsxXS1mWzBdO3ZbMV09KGhbMV0qKDEtcikrcipmWzFdLWhbMV0pLyhoWzBdLWhbMV0pKnAsdlszXT1wKigxLXIrcipiL3gpLHMucmFuZ2VbMF09aFswXSooMS1yKStyKmZbMF0scy5yYW5nZVsxXT1oWzFdKigxLXIpK3IqZlsxXX1lbHNlIHZbMV09MCx2WzNdPXA7by5kcmF3T25lKHQsaSx7c2tpcFRpdGxlOiEwfSksby5kcmF3T25lKHQscyx7c2tpcFRpdGxlOiEwfSksby5yZWRyYXdDb21wb25lbnRzKHQsW2kuX2lkLHMuX2lkXSk7dmFyIF89ZD91L3ZbMl06MSx3PWc/cC92WzNdOjEsaz1kP3ZbMF06MCxBPWc/dlsxXTowLFQ9ZD92WzBdL3ZbMl0qdTowLE09Zz92WzFdL3ZbM10qcDowLFM9aS5fb2Zmc2V0LVQsRT1zLl9vZmZzZXQtTTtuLmNsaXBSZWN0LmNhbGwoYS5zZXRUcmFuc2xhdGUsayxBKS5jYWxsKGEuc2V0U2NhbGUsMS9fLDEvdyksbi5wbG90LmNhbGwoYS5zZXRUcmFuc2xhdGUsUyxFKS5jYWxsKGEuc2V0U2NhbGUsXyx3KSxhLnNldFBvaW50R3JvdXBTY2FsZShuLnpvb21TY2FsZVB0cywxL18sMS93KSxhLnNldFRleHRQb2ludHNTY2FsZShuLnpvb21TY2FsZVR4dCwxL18sMS93KX1vLnJlZHJhd0NvbXBvbmVudHModCl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vYXhlc1wiOjc0OSxkMzoxNTV9XSw3NzI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIikudHJhY2VJcyxpPXQoXCIuL2F4aXNfYXV0b3R5cGVcIik7ZnVuY3Rpb24gYSh0KXtyZXR1cm57djpcInhcIixoOlwieVwifVt0Lm9yaWVudGF0aW9ufHxcInZcIl19ZnVuY3Rpb24gbyh0LGUpe3ZhciByPWEodCksaT1uKHQsXCJib3gtdmlvbGluXCIpLG89bih0Ll9mdWxsSW5wdXR8fHt9LFwiY2FuZGxlc3RpY2tcIik7cmV0dXJuIGkmJiFvJiZlPT09ciYmdm9pZCAwPT09dFtyXSYmdm9pZCAwPT09dFtyK1wiMFwiXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7XCItXCI9PT1yKFwidHlwZVwiLChzLnNwbG9tU3Rhc2h8fHt9KS50eXBlKSYmKCFmdW5jdGlvbih0LGUpe2lmKFwiLVwiIT09dC50eXBlKXJldHVybjt2YXIgcj10Ll9pZCxzPXIuY2hhckF0KDApOy0xIT09ci5pbmRleE9mKFwic2NlbmVcIikmJihyPXMpO3ZhciBsPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXTtpZihcInNwbG9tXCI9PT1pLnR5cGUmJmkuX2xlbmd0aD4wJiYoaVtcIl9cIityK1wiYXhlc1wiXXx8e30pW2VdKXJldHVybiBpO2lmKChpW3IrXCJheGlzXCJdfHxyKT09PWUpe2lmKG8oaSxyKSlyZXR1cm4gaTtpZigoaVtyXXx8W10pLmxlbmd0aHx8aVtyK1wiMFwiXSlyZXR1cm4gaX19fShlLHIscyk7aWYoIWwpcmV0dXJuO2lmKFwiaGlzdG9ncmFtXCI9PT1sLnR5cGUmJnM9PT17djpcInlcIixoOlwieFwifVtsLm9yaWVudGF0aW9ufHxcInZcIl0pcmV0dXJuIHZvaWQodC50eXBlPVwibGluZWFyXCIpO3ZhciBjLHU9cytcImNhbGVuZGFyXCIsaD1sW3VdLGY9e25vTXVsdGlDYXRlZ29yeTohbihsLFwiY2FydGVzaWFuXCIpfHxuKGwsXCJub011bHRpQ2F0ZWdvcnlcIil9O2lmKG8obCxzKSl7dmFyIHA9YShsKSxkPVtdO2ZvcihjPTA7YzxlLmxlbmd0aDtjKyspe3ZhciBnPWVbY107bihnLFwiYm94LXZpb2xpblwiKSYmKGdbcytcImF4aXNcIl18fHMpPT09ciYmKHZvaWQgMCE9PWdbcF0/ZC5wdXNoKGdbcF1bMF0pOnZvaWQgMCE9PWcubmFtZT9kLnB1c2goZy5uYW1lKTpkLnB1c2goXCJ0ZXh0XCIpLGdbdV0hPT1oJiYoaD12b2lkIDApKX10LnR5cGU9aShkLGgsZil9ZWxzZSBpZihcInNwbG9tXCI9PT1sLnR5cGUpe3ZhciB2PWwuZGltZW5zaW9ucyxtPWwuX2RpYWc7Zm9yKGM9MDtjPHYubGVuZ3RoO2MrKyl7dmFyIHk9dltjXTtpZih5LnZpc2libGUmJihtW2NdWzBdPT09cnx8bVtjXVsxXT09PXIpKXt0LnR5cGU9aSh5LnZhbHVlcyxoLGYpO2JyZWFrfX19ZWxzZSB0LnR5cGU9aShsW3NdfHxbbFtzK1wiMFwiXV0saCxmKX0oZSxzLmRhdGEpLFwiLVwiPT09ZS50eXBlP2UudHlwZT1cImxpbmVhclwiOnQudHlwZT1lLnR5cGUpfX0se1wiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2F4aXNfYXV0b3R5cGVcIjo3NTB9XSw3NzM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vcmVnaXN0cnlcIiksaT10KFwiLi4vbGliXCIpO2Z1bmN0aW9uIGEodCxlLHIpe3ZhciBuLGEsbyxzPSExO2lmKFwiZGF0YVwiPT09ZS50eXBlKW49dC5fZnVsbERhdGFbbnVsbCE9PWUudHJhY2VzP2UudHJhY2VzWzBdOjBdO2Vsc2V7aWYoXCJsYXlvdXRcIiE9PWUudHlwZSlyZXR1cm4hMTtuPXQuX2Z1bGxMYXlvdXR9cmV0dXJuIGE9aS5uZXN0ZWRQcm9wZXJ0eShuLGUucHJvcCkuZ2V0KCksKG89cltlLnR5cGVdPXJbZS50eXBlXXx8e30pLmhhc093blByb3BlcnR5KGUucHJvcCkmJm9bZS5wcm9wXSE9PWEmJihzPSEwKSxvW2UucHJvcF09YSx7Y2hhbmdlZDpzLHZhbHVlOmF9fWZ1bmN0aW9uIG8odCxlKXt2YXIgcj1bXSxuPWVbMF0sYT17fTtpZihcInN0cmluZ1wiPT10eXBlb2YgbilhW25dPWVbMV07ZWxzZXtpZighaS5pc1BsYWluT2JqZWN0KG4pKXJldHVybiByO2E9bn1yZXR1cm4gbChhLGZ1bmN0aW9uKHQsZSxuKXtyLnB1c2goe3R5cGU6XCJsYXlvdXRcIixwcm9wOnQsdmFsdWU6bn0pfSxcIlwiLDApLHJ9ZnVuY3Rpb24gcyh0LGUpe3ZhciByLG4sYSxvLHM9W107aWYobj1lWzBdLGE9ZVsxXSxyPWVbMl0sbz17fSxcInN0cmluZ1wiPT10eXBlb2YgbilvW25dPWE7ZWxzZXtpZighaS5pc1BsYWluT2JqZWN0KG4pKXJldHVybiBzO289bix2b2lkIDA9PT1yJiYocj1hKX1yZXR1cm4gdm9pZCAwPT09ciYmKHI9bnVsbCksbChvLGZ1bmN0aW9uKGUsbixpKXt2YXIgYTtpZihBcnJheS5pc0FycmF5KGkpKXt2YXIgbz1NYXRoLm1pbihpLmxlbmd0aCx0LmRhdGEubGVuZ3RoKTtyJiYobz1NYXRoLm1pbihvLHIubGVuZ3RoKSksYT1bXTtmb3IodmFyIGw9MDtsPG87bCsrKWFbbF09cj9yW2xdOmx9ZWxzZSBhPXI/ci5zbGljZSgwKTpudWxsO2lmKG51bGw9PT1hKUFycmF5LmlzQXJyYXkoaSkmJihpPWlbMF0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShhKSl7aWYoIUFycmF5LmlzQXJyYXkoaSkpe3ZhciBjPWk7aT1bXTtmb3IodmFyIHU9MDt1PGEubGVuZ3RoO3UrKylpW3VdPWN9aS5sZW5ndGg9TWF0aC5taW4oYS5sZW5ndGgsaS5sZW5ndGgpfXMucHVzaCh7dHlwZTpcImRhdGFcIixwcm9wOmUsdHJhY2VzOmEsdmFsdWU6aX0pfSxcIlwiLDApLHN9ZnVuY3Rpb24gbCh0LGUscixuKXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBvPXRbYV07aWYoXCJfXCIhPT1hWzBdKXt2YXIgcz1yKyhuPjA/XCIuXCI6XCJcIikrYTtpLmlzUGxhaW5PYmplY3Qobyk/bChvLGUscyxuKzEpOmUocyxhLG8pfX0pfXIubWFuYWdlQ29tbWFuZE9ic2VydmVyPWZ1bmN0aW9uKHQsZSxuLG8pe3ZhciBzPXt9LGw9ITA7ZSYmZS5fY29tbWFuZE9ic2VydmVyJiYocz1lLl9jb21tYW5kT2JzZXJ2ZXIpLHMuY2FjaGV8fChzLmNhY2hlPXt9KSxzLmxvb2t1cFRhYmxlPXt9O3ZhciBjPXIuaGFzU2ltcGxlQVBJQ29tbWFuZEJpbmRpbmdzKHQsbixzLmxvb2t1cFRhYmxlKTtpZihlJiZlLl9jb21tYW5kT2JzZXJ2ZXIpe2lmKGMpcmV0dXJuIHM7aWYoZS5fY29tbWFuZE9ic2VydmVyLnJlbW92ZSlyZXR1cm4gZS5fY29tbWFuZE9ic2VydmVyLnJlbW92ZSgpLGUuX2NvbW1hbmRPYnNlcnZlcj1udWxsLHN9aWYoYyl7YSh0LGMscy5jYWNoZSkscy5jaGVjaz1mdW5jdGlvbigpe2lmKGwpe3ZhciBlPWEodCxjLHMuY2FjaGUpO3JldHVybiBlLmNoYW5nZWQmJm8mJnZvaWQgMCE9PXMubG9va3VwVGFibGVbZS52YWx1ZV0mJihzLmRpc2FibGUoKSxQcm9taXNlLnJlc29sdmUobyh7dmFsdWU6ZS52YWx1ZSx0eXBlOmMudHlwZSxwcm9wOmMucHJvcCx0cmFjZXM6Yy50cmFjZXMsaW5kZXg6cy5sb29rdXBUYWJsZVtlLnZhbHVlXX0pKS50aGVuKHMuZW5hYmxlLHMuZW5hYmxlKSksZS5jaGFuZ2VkfX07Zm9yKHZhciB1PVtcInBsb3RseV9yZWxheW91dFwiLFwicGxvdGx5X3JlZHJhd1wiLFwicGxvdGx5X3Jlc3R5bGVcIixcInBsb3RseV91cGRhdGVcIixcInBsb3RseV9hbmltYXRpbmdmcmFtZVwiLFwicGxvdGx5X2FmdGVycGxvdFwiXSxoPTA7aDx1Lmxlbmd0aDtoKyspdC5faW50ZXJuYWxPbih1W2hdLHMuY2hlY2spO3MucmVtb3ZlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx1Lmxlbmd0aDtlKyspdC5fcmVtb3ZlSW50ZXJuYWxMaXN0ZW5lcih1W2VdLHMuY2hlY2spfX1lbHNlIGkubG9nKFwiVW5hYmxlIHRvIGF1dG9tYXRpY2FsbHkgYmluZCBwbG90IHVwZGF0ZXMgdG8gQVBJIGNvbW1hbmRcIikscy5sb29rdXBUYWJsZT17fSxzLnJlbW92ZT1mdW5jdGlvbigpe307cmV0dXJuIHMuZGlzYWJsZT1mdW5jdGlvbigpe2w9ITF9LHMuZW5hYmxlPWZ1bmN0aW9uKCl7bD0hMH0sZSYmKGUuX2NvbW1hbmRPYnNlcnZlcj1zKSxzfSxyLmhhc1NpbXBsZUFQSUNvbW1hbmRCaW5kaW5ncz1mdW5jdGlvbih0LGUsbil7dmFyIGksYSxvPWUubGVuZ3RoO2ZvcihpPTA7aTxvO2krKyl7dmFyIHMsbD1lW2ldLGM9bC5tZXRob2QsdT1sLmFyZ3M7aWYoQXJyYXkuaXNBcnJheSh1KXx8KHU9W10pLCFjKXJldHVybiExO3ZhciBoPXIuY29tcHV0ZUFQSUNvbW1hbmRCaW5kaW5ncyh0LGMsdSk7aWYoMSE9PWgubGVuZ3RoKXJldHVybiExO2lmKGEpe2lmKChzPWhbMF0pLnR5cGUhPT1hLnR5cGUpcmV0dXJuITE7aWYocy5wcm9wIT09YS5wcm9wKXJldHVybiExO2lmKEFycmF5LmlzQXJyYXkoYS50cmFjZXMpKXtpZighQXJyYXkuaXNBcnJheShzLnRyYWNlcykpcmV0dXJuITE7cy50cmFjZXMuc29ydCgpO2Zvcih2YXIgZj0wO2Y8YS50cmFjZXMubGVuZ3RoO2YrKylpZihhLnRyYWNlc1tmXSE9PXMudHJhY2VzW2ZdKXJldHVybiExfWVsc2UgaWYocy5wcm9wIT09YS5wcm9wKXJldHVybiExfWVsc2UgYT1oWzBdLEFycmF5LmlzQXJyYXkoYS50cmFjZXMpJiZhLnRyYWNlcy5zb3J0KCk7dmFyIHA9KHM9aFswXSkudmFsdWU7aWYoQXJyYXkuaXNBcnJheShwKSl7aWYoMSE9PXAubGVuZ3RoKXJldHVybiExO3A9cFswXX1uJiYobltwXT1pKX1yZXR1cm4gYX0sci5leGVjdXRlQVBJQ29tbWFuZD1mdW5jdGlvbih0LGUscil7aWYoXCJza2lwXCI9PT1lKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTt2YXIgYT1uLmFwaU1ldGhvZFJlZ2lzdHJ5W2VdLG89W3RdO0FycmF5LmlzQXJyYXkocil8fChyPVtdKTtmb3IodmFyIHM9MDtzPHIubGVuZ3RoO3MrKylvLnB1c2gocltzXSk7cmV0dXJuIGEuYXBwbHkobnVsbCxvKS5jYXRjaChmdW5jdGlvbih0KXtyZXR1cm4gaS53YXJuKFwiQVBJIGNhbGwgdG8gUGxvdGx5LlwiK2UrXCIgcmVqZWN0ZWQuXCIsdCksUHJvbWlzZS5yZWplY3QodCl9KX0sci5jb21wdXRlQVBJQ29tbWFuZEJpbmRpbmdzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjtzd2l0Y2goQXJyYXkuaXNBcnJheShyKXx8KHI9W10pLGUpe2Nhc2VcInJlc3R5bGVcIjpuPXModCxyKTticmVhaztjYXNlXCJyZWxheW91dFwiOm49byh0LHIpO2JyZWFrO2Nhc2VcInVwZGF0ZVwiOm49cyh0LFtyWzBdLHJbMl1dKS5jb25jYXQobyh0LFtyWzFdXSkpO2JyZWFrO2Nhc2VcImFuaW1hdGVcIjpuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZVswXSkmJjE9PT1lWzBdLmxlbmd0aCYmLTEhPT1bXCJzdHJpbmdcIixcIm51bWJlclwiXS5pbmRleE9mKHR5cGVvZiBlWzBdWzBdKT9be3R5cGU6XCJsYXlvdXRcIixwcm9wOlwiX2N1cnJlbnRGcmFtZVwiLHZhbHVlOmVbMF1bMF0udG9TdHJpbmcoKX1dOltdfSgwLHIpO2JyZWFrO2RlZmF1bHQ6bj1bXX1yZXR1cm4gbn19LHtcIi4uL2xpYlwiOjcwMSxcIi4uL3JlZ2lzdHJ5XCI6ODI5fV0sNzc0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdDtyLmF0dHJpYnV0ZXM9ZnVuY3Rpb24odCxlKXtlPWV8fHt9O3ZhciByPXt2YWxUeXBlOlwiaW5mb19hcnJheVwiLGVkaXRUeXBlOih0PXR8fHt9KS5lZGl0VHlwZSxpdGVtczpbe3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxlZGl0VHlwZTp0LmVkaXRUeXBlfSx7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGVkaXRUeXBlOnQuZWRpdFR5cGV9XSxkZmx0OlswLDFdfSxpPSh0Lm5hbWUmJnQubmFtZSx0LnRyYWNlLGUuZGVzY3JpcHRpb24mJmUuZGVzY3JpcHRpb24se3g6bih7fSxyLHt9KSx5Om4oe30scix7fSksZWRpdFR5cGU6dC5lZGl0VHlwZX0pO3JldHVybiB0Lm5vR3JpZENlbGx8fChpLnJvdz17dmFsVHlwZTpcImludGVnZXJcIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6dC5lZGl0VHlwZX0saS5jb2x1bW49e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsbWluOjAsZGZsdDowLGVkaXRUeXBlOnQuZWRpdFR5cGV9KSxpfSxyLmRlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4mJm4ueHx8WzAsMV0sYT1uJiZuLnl8fFswLDFdLG89ZS5ncmlkO2lmKG8pe3ZhciBzPXIoXCJkb21haW4uY29sdW1uXCIpO3ZvaWQgMCE9PXMmJihzPG8uY29sdW1ucz9pPW8uX2RvbWFpbnMueFtzXTpkZWxldGUgdC5kb21haW4uY29sdW1uKTt2YXIgbD1yKFwiZG9tYWluLnJvd1wiKTt2b2lkIDAhPT1sJiYobDxvLnJvd3M/YT1vLl9kb21haW5zLnlbbF06ZGVsZXRlIHQuZG9tYWluLnJvdyl9cihcImRvbWFpbi54XCIsaSkscihcImRvbWFpbi55XCIsYSl9fSx7XCIuLi9saWIvZXh0ZW5kXCI6NjkxfV0sNzc1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZWRpdFR5cGUscj10LmNvbG9yRWRpdFR5cGU7dm9pZCAwPT09ciYmKHI9ZSk7dmFyIG49e2ZhbWlseTp7dmFsVHlwZTpcInN0cmluZ1wiLG5vQmxhbms6ITAsc3RyaWN0OiEwLGVkaXRUeXBlOmV9LHNpemU6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MSxlZGl0VHlwZTplfSxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6cn0sZWRpdFR5cGU6ZX07cmV0dXJuIHQuYXJyYXlPayYmKG4uZmFtaWx5LmFycmF5T2s9ITAsbi5zaXplLmFycmF5T2s9ITAsbi5jb2xvci5hcnJheU9rPSEwKSxufX0se31dLDc3NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17X2lzTGlua2VkVG9BcnJheTpcImZyYW1lc19lbnRyeVwiLGdyb3VwOnt2YWxUeXBlOlwic3RyaW5nXCJ9LG5hbWU6e3ZhbFR5cGU6XCJzdHJpbmdcIn0sdHJhY2VzOnt2YWxUeXBlOlwiYW55XCJ9LGJhc2VmcmFtZTp7dmFsVHlwZTpcInN0cmluZ1wifSxkYXRhOnt2YWxUeXBlOlwiYW55XCJ9LGxheW91dDp7dmFsVHlwZTpcImFueVwifX19LHt9XSw3Nzc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLnByb2pOYW1lcz17ZXF1aXJlY3Rhbmd1bGFyOlwiZXF1aXJlY3Rhbmd1bGFyXCIsbWVyY2F0b3I6XCJtZXJjYXRvclwiLG9ydGhvZ3JhcGhpYzpcIm9ydGhvZ3JhcGhpY1wiLFwibmF0dXJhbCBlYXJ0aFwiOlwibmF0dXJhbEVhcnRoXCIsa2F2cmF5c2tpeTc6XCJrYXZyYXlza2l5N1wiLG1pbGxlcjpcIm1pbGxlclwiLHJvYmluc29uOlwicm9iaW5zb25cIixlY2tlcnQ0OlwiZWNrZXJ0NFwiLFwiYXppbXV0aGFsIGVxdWFsIGFyZWFcIjpcImF6aW11dGhhbEVxdWFsQXJlYVwiLFwiYXppbXV0aGFsIGVxdWlkaXN0YW50XCI6XCJhemltdXRoYWxFcXVpZGlzdGFudFwiLFwiY29uaWMgZXF1YWwgYXJlYVwiOlwiY29uaWNFcXVhbEFyZWFcIixcImNvbmljIGNvbmZvcm1hbFwiOlwiY29uaWNDb25mb3JtYWxcIixcImNvbmljIGVxdWlkaXN0YW50XCI6XCJjb25pY0VxdWlkaXN0YW50XCIsZ25vbW9uaWM6XCJnbm9tb25pY1wiLHN0ZXJlb2dyYXBoaWM6XCJzdGVyZW9ncmFwaGljXCIsbW9sbHdlaWRlOlwibW9sbHdlaWRlXCIsaGFtbWVyOlwiaGFtbWVyXCIsXCJ0cmFuc3ZlcnNlIG1lcmNhdG9yXCI6XCJ0cmFuc3ZlcnNlTWVyY2F0b3JcIixcImFsYmVycyB1c2FcIjpcImFsYmVyc1VzYVwiLFwid2lua2VsIHRyaXBlbFwiOlwid2lua2VsM1wiLGFpdG9mZjpcImFpdG9mZlwiLHNpbnVzb2lkYWw6XCJzaW51c29pZGFsXCJ9LHIuYXhlc05hbWVzPVtcImxvbmF4aXNcIixcImxhdGF4aXNcIl0sci5sb25heGlzU3Bhbj17b3J0aG9ncmFwaGljOjE4MCxcImF6aW11dGhhbCBlcXVhbCBhcmVhXCI6MzYwLFwiYXppbXV0aGFsIGVxdWlkaXN0YW50XCI6MzYwLFwiY29uaWMgY29uZm9ybWFsXCI6MTgwLGdub21vbmljOjE2MCxzdGVyZW9ncmFwaGljOjE4MCxcInRyYW5zdmVyc2UgbWVyY2F0b3JcIjoxODAsXCIqXCI6MzYwfSxyLmxhdGF4aXNTcGFuPXtcImNvbmljIGNvbmZvcm1hbFwiOjE1MCxzdGVyZW9ncmFwaGljOjE3OS41LFwiKlwiOjE4MH0sci5zY29wZURlZmF1bHRzPXt3b3JsZDp7bG9uYXhpc1JhbmdlOlstMTgwLDE4MF0sbGF0YXhpc1JhbmdlOlstOTAsOTBdLHByb2pUeXBlOlwiZXF1aXJlY3Rhbmd1bGFyXCIscHJvalJvdGF0ZTpbMCwwLDBdfSx1c2E6e2xvbmF4aXNSYW5nZTpbLTE4MCwtNTBdLGxhdGF4aXNSYW5nZTpbMTUsODBdLHByb2pUeXBlOlwiYWxiZXJzIHVzYVwifSxldXJvcGU6e2xvbmF4aXNSYW5nZTpbLTMwLDYwXSxsYXRheGlzUmFuZ2U6WzMwLDg1XSxwcm9qVHlwZTpcImNvbmljIGNvbmZvcm1hbFwiLHByb2pSb3RhdGU6WzE1LDAsMF0scHJvalBhcmFsbGVsczpbMCw2MF19LGFzaWE6e2xvbmF4aXNSYW5nZTpbMjIsMTYwXSxsYXRheGlzUmFuZ2U6Wy0xNSw1NV0scHJvalR5cGU6XCJtZXJjYXRvclwiLHByb2pSb3RhdGU6WzAsMCwwXX0sYWZyaWNhOntsb25heGlzUmFuZ2U6Wy0zMCw2MF0sbGF0YXhpc1JhbmdlOlstNDAsNDBdLHByb2pUeXBlOlwibWVyY2F0b3JcIixwcm9qUm90YXRlOlswLDAsMF19LFwibm9ydGggYW1lcmljYVwiOntsb25heGlzUmFuZ2U6Wy0xODAsLTQ1XSxsYXRheGlzUmFuZ2U6WzUsODVdLHByb2pUeXBlOlwiY29uaWMgY29uZm9ybWFsXCIscHJvalJvdGF0ZTpbLTEwMCwwLDBdLHByb2pQYXJhbGxlbHM6WzI5LjUsNDUuNV19LFwic291dGggYW1lcmljYVwiOntsb25heGlzUmFuZ2U6Wy0xMDAsLTMwXSxsYXRheGlzUmFuZ2U6Wy02MCwxNV0scHJvalR5cGU6XCJtZXJjYXRvclwiLHByb2pSb3RhdGU6WzAsMCwwXX19LHIuY2xpcFBhZD0uMDAxLHIucHJlY2lzaW9uPS4xLHIubGFuZENvbG9yPVwiI0YwREM4MlwiLHIud2F0ZXJDb2xvcj1cIiMzMzk5RkZcIixyLmxvY2F0aW9ubW9kZVRvTGF5ZXI9e1wiSVNPLTNcIjpcImNvdW50cmllc1wiLFwiVVNBLXN0YXRlc1wiOlwic3VidW5pdHNcIixcImNvdW50cnkgbmFtZXNcIjpcImNvdW50cmllc1wifSxyLnNwaGVyZVNWRz17dHlwZTpcIlNwaGVyZVwifSxyLmZpbGxMYXllcnM9e29jZWFuOjEsbGFuZDoxLGxha2VzOjF9LHIubGluZUxheWVycz17c3VidW5pdHM6MSxjb3VudHJpZXM6MSxjb2FzdGxpbmVzOjEscml2ZXJzOjEsZnJhbWU6MX0sci5sYXllcnM9W1wiYmdcIixcIm9jZWFuXCIsXCJsYW5kXCIsXCJsYWtlc1wiLFwic3VidW5pdHNcIixcImNvdW50cmllc1wiLFwiY29hc3RsaW5lc1wiLFwicml2ZXJzXCIsXCJsYXRheGlzXCIsXCJsb25heGlzXCIsXCJmcmFtZVwiLFwiYmFja3Bsb3RcIixcImZyb250cGxvdFwiXSxyLmxheWVyc0ZvckNob3JvcGxldGg9W1wiYmdcIixcIm9jZWFuXCIsXCJsYW5kXCIsXCJzdWJ1bml0c1wiLFwiY291bnRyaWVzXCIsXCJjb2FzdGxpbmVzXCIsXCJsYXRheGlzXCIsXCJsb25heGlzXCIsXCJmcmFtZVwiLFwiYmFja3Bsb3RcIixcInJpdmVyc1wiLFwibGFrZXNcIixcImZyb250cGxvdFwiXSxyLmxheWVyTmFtZVRvQWRqZWN0aXZlPXtvY2VhbjpcIm9jZWFuXCIsbGFuZDpcImxhbmRcIixsYWtlczpcImxha2VcIixzdWJ1bml0czpcInN1YnVuaXRcIixjb3VudHJpZXM6XCJjb3VudHJ5XCIsY29hc3RsaW5lczpcImNvYXN0bGluZVwiLHJpdmVyczpcInJpdmVyXCIsZnJhbWU6XCJmcmFtZVwifX0se31dLDc3ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxhPXQoXCIuLi8uLi9saWJcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksbD10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxjPXQoXCIuLi9wbG90c1wiKSx1PXQoXCIuLi9jYXJ0ZXNpYW4vYXhlc1wiKSxoPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50XCIpLGY9dChcIi4uL2NhcnRlc2lhbi9zZWxlY3RcIikucHJlcFNlbGVjdCxwPXQoXCIuLi9jYXJ0ZXNpYW4vc2VsZWN0XCIpLnNlbGVjdE9uQ2xpY2ssZD10KFwiLi96b29tXCIpLGc9dChcIi4vY29uc3RhbnRzXCIpLHY9dChcIi4uLy4uL2xpYi90b3BvanNvbl91dGlsc1wiKSxtPXQoXCJ0b3BvanNvbi1jbGllbnRcIikuZmVhdHVyZTtmdW5jdGlvbiB5KHQpe3RoaXMuaWQ9dC5pZCx0aGlzLmdyYXBoRGl2PXQuZ3JhcGhEaXYsdGhpcy5jb250YWluZXI9dC5jb250YWluZXIsdGhpcy50b3BvanNvblVSTD10LnRvcG9qc29uVVJMLHRoaXMuaXNTdGF0aWM9dC5zdGF0aWNQbG90LHRoaXMudG9wb2pzb25OYW1lPW51bGwsdGhpcy50b3BvanNvbj1udWxsLHRoaXMucHJvamVjdGlvbj1udWxsLHRoaXMudmlld0luaXRpYWw9bnVsbCx0aGlzLmZpdFNjYWxlPW51bGwsdGhpcy5ib3VuZHM9bnVsbCx0aGlzLm1pZFB0PW51bGwsdGhpcy5oYXNDaG9yb3BsZXRoPSExLHRoaXMudHJhY2VIYXNoPXt9LHRoaXMubGF5ZXJzPXt9LHRoaXMuYmFzZVBhdGhzPXt9LHRoaXMuZGF0YVBhdGhzPXt9LHRoaXMuZGF0YVBvaW50cz17fSx0aGlzLmNsaXBEZWY9bnVsbCx0aGlzLmNsaXBSZWN0PW51bGwsdGhpcy5iZ1JlY3Q9bnVsbCx0aGlzLm1ha2VGcmFtZXdvcmsoKX10KFwiLi9wcm9qZWN0aW9uc1wiKShuKTt2YXIgeD15LnByb3RvdHlwZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB5KHQpfSx4LnBsb3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMsaT1lW3RoaXMuaWRdLGE9di5nZXRUb3BvanNvbk5hbWUoaSk7bnVsbD09PW4udG9wb2pzb258fGEhPT1uLnRvcG9qc29uTmFtZT8obi50b3BvanNvbk5hbWU9YSx2b2lkIDA9PT1QbG90bHlHZW9Bc3NldHMudG9wb2pzb25bbi50b3BvanNvbk5hbWVdP3IucHVzaChuLmZldGNoVG9wb2pzb24oKS50aGVuKGZ1bmN0aW9uKHIpe1Bsb3RseUdlb0Fzc2V0cy50b3BvanNvbltuLnRvcG9qc29uTmFtZV09cixuLnRvcG9qc29uPXIsbi51cGRhdGUodCxlKX0pKToobi50b3BvanNvbj1QbG90bHlHZW9Bc3NldHMudG9wb2pzb25bbi50b3BvanNvbk5hbWVdLG4udXBkYXRlKHQsZSkpKTpuLnVwZGF0ZSh0LGUpfSx4LmZldGNoVG9wb2pzb249ZnVuY3Rpb24oKXt2YXIgdD12LmdldFRvcG9qc29uUGF0aCh0aGlzLnRvcG9qc29uVVJMLHRoaXMudG9wb2pzb25OYW1lKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSxyKXtuLmpzb24odCxmdW5jdGlvbihuLGkpe2lmKG4pcmV0dXJuIDQwND09PW4uc3RhdHVzP3IobmV3IEVycm9yKFtcInBsb3RseS5qcyBjb3VsZCBub3QgZmluZCB0b3BvanNvbiBmaWxlIGF0XCIsdCxcIi5cIixcIk1ha2Ugc3VyZSB0aGUgKnRvcG9qc29uVVJMKiBwbG90IGNvbmZpZyBvcHRpb25cIixcImlzIHNldCBwcm9wZXJseS5cIl0uam9pbihcIiBcIikpKTpyKG5ldyBFcnJvcihbXCJ1bmV4cGVjdGVkIGVycm9yIHdoaWxlIGZldGNoaW5nIHRvcG9qc29uIGZpbGUgYXRcIix0XS5qb2luKFwiIFwiKSkpO2UoaSl9KX0pfSx4LnVwZGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPWVbdGhpcy5pZF07aWYoIXRoaXMudXBkYXRlUHJvamVjdGlvbihlLHIpKXt0aGlzLmhhc0Nob3JvcGxldGg9ITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspaWYoXCJjaG9yb3BsZXRoXCI9PT10W25dWzBdLnRyYWNlLnR5cGUpe3RoaXMuaGFzQ2hvcm9wbGV0aD0hMDticmVha310aGlzLnZpZXdJbml0aWFsfHx0aGlzLnNhdmVWaWV3SW5pdGlhbChyKSx0aGlzLnVwZGF0ZUJhc2VMYXllcnMoZSxyKSx0aGlzLnVwZGF0ZURpbXMoZSxyKSx0aGlzLnVwZGF0ZUZ4KGUsciksYy5nZW5lcmFsVXBkYXRlUGVyVHJhY2VNb2R1bGUodGhpcy5ncmFwaERpdix0aGlzLHQscik7dmFyIGk9dGhpcy5sYXllcnMuZnJvbnRwbG90LnNlbGVjdChcIi5zY2F0dGVybGF5ZXJcIik7dGhpcy5kYXRhUG9pbnRzLnBvaW50PWkuc2VsZWN0QWxsKFwiLnBvaW50XCIpLHRoaXMuZGF0YVBvaW50cy50ZXh0PWkuc2VsZWN0QWxsKFwidGV4dFwiKSx0aGlzLmRhdGFQYXRocy5saW5lPWkuc2VsZWN0QWxsKFwiLmpzLWxpbmVcIik7dmFyIGE9dGhpcy5sYXllcnMuYmFja3Bsb3Quc2VsZWN0KFwiLmNob3JvcGxldGhsYXllclwiKTt0aGlzLmRhdGFQYXRocy5jaG9yb3BsZXRoPWEuc2VsZWN0QWxsKFwicGF0aFwiKSx0aGlzLnJlbmRlcigpfX0seC51cGRhdGVQcm9qZWN0aW9uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fc2l6ZSxvPWUuZG9tYWluLHM9ZS5wcm9qZWN0aW9uLGw9cy5yb3RhdGlvbnx8e30sYz1lLmNlbnRlcnx8e30sdT10aGlzLnByb2plY3Rpb249ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQucHJvamVjdGlvbi50eXBlLHI9bi5nZW9bZy5wcm9qTmFtZXNbZV1dKCksaT10Ll9pc0NsaXBwZWQ/Zy5sb25heGlzU3BhbltlXS8yOm51bGwsYT1bXCJjZW50ZXJcIixcInJvdGF0ZVwiLFwicGFyYWxsZWxzXCIsXCJjbGlwRXh0ZW50XCJdLG89ZnVuY3Rpb24odCl7cmV0dXJuIHQ/cjpbXX0scz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdO1wiZnVuY3Rpb25cIiE9dHlwZW9mIHJbbF0mJihyW2xdPW8pfXIuaXNMb25MYXRPdmVyRWRnZXM9ZnVuY3Rpb24odCl7aWYobnVsbD09PXIodCkpcmV0dXJuITA7aWYoaSl7dmFyIGU9ci5yb3RhdGUoKTtyZXR1cm4gbi5nZW8uZGlzdGFuY2UodCxbLWVbMF0sLWVbMV1dKT5pKk1hdGguUEkvMTgwfXJldHVybiExfSxyLmdldFBhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gbi5nZW8ucGF0aCgpLnByb2plY3Rpb24ocil9LHIuZ2V0Qm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiByLmdldFBhdGgoKS5ib3VuZHModCl9LHIuZml0RXh0ZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dFsxXVswXS10WzBdWzBdLGk9dFsxXVsxXS10WzBdWzFdLGE9ci5jbGlwRXh0ZW50JiZyLmNsaXBFeHRlbnQoKTtyLnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxhJiZyLmNsaXBFeHRlbnQobnVsbCk7dmFyIG89ci5nZXRCb3VuZHMoZSkscz1NYXRoLm1pbihuLyhvWzFdWzBdLW9bMF1bMF0pLGkvKG9bMV1bMV0tb1swXVsxXSkpLGw9K3RbMF1bMF0rKG4tcyoob1sxXVswXStvWzBdWzBdKSkvMixjPSt0WzBdWzFdKyhpLXMqKG9bMV1bMV0rb1swXVsxXSkpLzI7cmV0dXJuIGEmJnIuY2xpcEV4dGVudChhKSxyLnNjYWxlKDE1MCpzKS50cmFuc2xhdGUoW2wsY10pfSxyLnByZWNpc2lvbihnLnByZWNpc2lvbiksaSYmci5jbGlwQW5nbGUoaS1nLmNsaXBQYWQpO3JldHVybiByfShlKTt1LmNlbnRlcihbYy5sb24tbC5sb24sYy5sYXQtbC5sYXRdKS5yb3RhdGUoWy1sLmxvbiwtbC5sYXQsbC5yb2xsXSkucGFyYWxsZWxzKHMucGFyYWxsZWxzKTt2YXIgaD1bW3IubCtyLncqby54WzBdLHIudCtyLmgqKDEtby55WzFdKV0sW3IubCtyLncqby54WzFdLHIudCtyLmgqKDEtby55WzBdKV1dLGY9ZS5sb25heGlzLHA9ZS5sYXRheGlzLGQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1nLmNsaXBQYWQsbj10WzBdK3IsaT10WzFdLXIsYT1lWzBdK3Isbz1lWzFdLXI7bj4wJiZpPDAmJihpKz0zNjApO3ZhciBzPShpLW4pLzQ7cmV0dXJue3R5cGU6XCJQb2x5Z29uXCIsY29vcmRpbmF0ZXM6W1tbbixhXSxbbixvXSxbbitzLG9dLFtuKzIqcyxvXSxbbiszKnMsb10sW2ksb10sW2ksYV0sW2ktcyxhXSxbaS0yKnMsYV0sW2ktMypzLGFdLFtuLGFdXV19fShmLnJhbmdlLHAucmFuZ2UpO3UuZml0RXh0ZW50KGgsZCk7dmFyIHY9dGhpcy5ib3VuZHM9dS5nZXRCb3VuZHMoZCksbT10aGlzLmZpdFNjYWxlPXUuc2NhbGUoKSx5PXUudHJhbnNsYXRlKCk7aWYoIWlzRmluaXRlKHZbMF1bMF0pfHwhaXNGaW5pdGUodlswXVsxXSl8fCFpc0Zpbml0ZSh2WzFdWzBdKXx8IWlzRmluaXRlKHZbMV1bMV0pfHxpc05hTih5WzBdKXx8aXNOYU4oeVswXSkpe2Zvcih2YXIgeD10aGlzLmdyYXBoRGl2LGI9W1wicHJvamVjdGlvbi5yb3RhdGlvblwiLFwiY2VudGVyXCIsXCJsb25heGlzLnJhbmdlXCIsXCJsYXRheGlzLnJhbmdlXCJdLF89XCJJbnZhbGlkIGdlbyBzZXR0aW5ncywgcmVsYXlvdXQnaW5nIHRvIGRlZmF1bHQgdmlldy5cIix3PXt9LGs9MDtrPGIubGVuZ3RoO2srKyl3W3RoaXMuaWQrXCIuXCIrYltrXV09bnVsbDtyZXR1cm4gdGhpcy52aWV3SW5pdGlhbD1udWxsLGEud2FybihfKSx4Ll9wcm9taXNlcy5wdXNoKGkuY2FsbChcInJlbGF5b3V0XCIseCx3KSksX312YXIgQT10aGlzLm1pZFB0PVsodlswXVswXSt2WzFdWzBdKS8yLCh2WzBdWzFdK3ZbMV1bMV0pLzJdO2lmKHUuc2NhbGUocy5zY2FsZSptKS50cmFuc2xhdGUoW3lbMF0rKEFbMF0teVswXSkseVsxXSsoQVsxXS15WzFdKV0pLmNsaXBFeHRlbnQodiksZS5faXNBbGJlcnNVc2Epe3ZhciBUPXUoW2MubG9uLGMubGF0XSksTT11LnRyYW5zbGF0ZSgpO3UudHJhbnNsYXRlKFtNWzBdLShUWzBdLU1bMF0pLE1bMV0tKFRbMV0tTVsxXSldKX19LHgudXBkYXRlQmFzZUxheWVycz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsaT1yLnRvcG9qc29uLGE9ci5sYXllcnMsbD1yLmJhc2VQYXRocztmdW5jdGlvbiBjKHQpe3JldHVyblwibG9uYXhpc1wiPT09dHx8XCJsYXRheGlzXCI9PT10fWZ1bmN0aW9uIGgodCl7cmV0dXJuIEJvb2xlYW4oZy5saW5lTGF5ZXJzW3RdKX1mdW5jdGlvbiBmKHQpe3JldHVybiBCb29sZWFuKGcuZmlsbExheWVyc1t0XSl9dmFyIHA9KHRoaXMuaGFzQ2hvcm9wbGV0aD9nLmxheWVyc0ZvckNob3JvcGxldGg6Zy5sYXllcnMpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gaCh0KXx8Zih0KT9lW1wic2hvd1wiK3RdOiFjKHQpfHxlW3RdLnNob3dncmlkfSksZD1yLmZyYW1ld29yay5zZWxlY3RBbGwoXCIubGF5ZXJcIikuZGF0YShwLFN0cmluZyk7ZC5leGl0KCkuZWFjaChmdW5jdGlvbih0KXtkZWxldGUgYVt0XSxkZWxldGUgbFt0XSxuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKX0pLGQuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLGZ1bmN0aW9uKHQpe3JldHVyblwibGF5ZXIgXCIrdH0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9YVt0XT1uLnNlbGVjdCh0aGlzKTtcImJnXCI9PT10P3IuYmdSZWN0PWUuYXBwZW5kKFwicmVjdFwiKS5zdHlsZShcInBvaW50ZXItZXZlbnRzXCIsXCJhbGxcIik6Yyh0KT9sW3RdPWUuYXBwZW5kKFwicGF0aFwiKS5zdHlsZShcImZpbGxcIixcIm5vbmVcIik6XCJiYWNrcGxvdFwiPT09dD9lLmFwcGVuZChcImdcIikuY2xhc3NlZChcImNob3JvcGxldGhsYXllclwiLCEwKTpcImZyb250cGxvdFwiPT09dD9lLmFwcGVuZChcImdcIikuY2xhc3NlZChcInNjYXR0ZXJsYXllclwiLCEwKTpoKHQpP2xbdF09ZS5hcHBlbmQoXCJwYXRoXCIpLnN0eWxlKFwiZmlsbFwiLFwibm9uZVwiKS5zdHlsZShcInN0cm9rZS1taXRlcmxpbWl0XCIsMik6Zih0KSYmKGxbdF09ZS5hcHBlbmQoXCJwYXRoXCIpLnN0eWxlKFwic3Ryb2tlXCIsXCJub25lXCIpKX0pLGQub3JkZXIoKSxkLmVhY2goZnVuY3Rpb24ocil7dmFyIG49bFtyXSxhPWcubGF5ZXJOYW1lVG9BZGplY3RpdmVbcl07XCJmcmFtZVwiPT09cj9uLmRhdHVtKGcuc3BoZXJlU1ZHKTpoKHIpfHxmKHIpP24uZGF0dW0obShpLGkub2JqZWN0c1tyXSkpOmMocikmJm4uZGF0dW0oZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvPWVbdF0scz1nLnNjb3BlRGVmYXVsdHNbZS5zY29wZV07XCJsb25heGlzXCI9PT10PyhuPXMubG9uYXhpc1JhbmdlLGk9cy5sYXRheGlzUmFuZ2UsYT1mdW5jdGlvbih0LGUpe3JldHVyblt0LGVdfSk6XCJsYXRheGlzXCI9PT10JiYobj1zLmxhdGF4aXNSYW5nZSxpPXMubG9uYXhpc1JhbmdlLGE9ZnVuY3Rpb24odCxlKXtyZXR1cm5bZSx0XX0pO3ZhciBsPXt0eXBlOlwibGluZWFyXCIscmFuZ2U6W25bMF0sblsxXS0xZS02XSx0aWNrMDpvLnRpY2swLGR0aWNrOm8uZHRpY2t9O3Uuc2V0Q29udmVydChsLHIpO3ZhciBjPXUuY2FsY1RpY2tzKGwpO2UuaXNTY29wZWR8fFwibG9uYXhpc1wiIT09dHx8Yy5wb3AoKTtmb3IodmFyIGg9Yy5sZW5ndGgsZj1uZXcgQXJyYXkoaCkscD0wO3A8aDtwKyspZm9yKHZhciBkPWNbcF0ueCx2PWZbcF09W10sbT1pWzBdO208aVsxXSsyLjU7bSs9Mi41KXYucHVzaChhKGQsbSkpO3JldHVybnt0eXBlOlwiTXVsdGlMaW5lU3RyaW5nXCIsY29vcmRpbmF0ZXM6Zn19KHIsZSx0KSkuY2FsbChvLnN0cm9rZSxlW3JdLmdyaWRjb2xvcikuY2FsbChzLmRhc2hMaW5lLFwiXCIsZVtyXS5ncmlkd2lkdGgpLGgocik/bi5jYWxsKG8uc3Ryb2tlLGVbYStcImNvbG9yXCJdKS5jYWxsKHMuZGFzaExpbmUsXCJcIixlW2ErXCJ3aWR0aFwiXSk6ZihyKSYmbi5jYWxsKG8uZmlsbCxlW2ErXCJjb2xvclwiXSl9KX0seC51cGRhdGVEaW1zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5ib3VuZHMsbj0oZS5mcmFtZXdpZHRofHwwKS8yLGk9clswXVswXS1uLGE9clswXVsxXS1uLGw9clsxXVswXS1pK24sYz1yWzFdWzFdLWErbjtzLnNldFJlY3QodGhpcy5jbGlwUmVjdCxpLGEsbCxjKSx0aGlzLmJnUmVjdC5jYWxsKHMuc2V0UmVjdCxpLGEsbCxjKS5jYWxsKG8uZmlsbCxlLmJnY29sb3IpLHRoaXMueGF4aXMuX29mZnNldD1pLHRoaXMueGF4aXMuX2xlbmd0aD1sLHRoaXMueWF4aXMuX29mZnNldD1hLHRoaXMueWF4aXMuX2xlbmd0aD1jfSx4LnVwZGF0ZUZ4PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxhPXIuZ3JhcGhEaXYsbz1yLmJnUmVjdCxzPXQuZHJhZ21vZGUsYz10LmNsaWNrbW9kZTtpZighci5pc1N0YXRpYyl7dmFyIHU7XCJzZWxlY3RcIj09PXM/dT1mdW5jdGlvbih0LGUpeyh0LnJhbmdlPXt9KVtyLmlkXT1bdihbZS54bWluLGUueW1pbl0pLHYoW2UueG1heCxlLnltYXhdKV19OlwibGFzc29cIj09PXMmJih1PWZ1bmN0aW9uKHQsZSxuKXsodC5sYXNzb1BvaW50cz17fSlbci5pZF09bi5maWx0ZXJlZC5tYXAodil9KTt2YXIgZz17ZWxlbWVudDpyLmJnUmVjdC5ub2RlKCksZ2Q6YSxwbG90aW5mbzp7aWQ6ci5pZCx4YXhpczpyLnhheGlzLHlheGlzOnIueWF4aXMsZmlsbFJhbmdlSXRlbXM6dX0seGF4ZXM6W3IueGF4aXNdLHlheGVzOltyLnlheGlzXSxzdWJwbG90OnIuaWQsY2xpY2tGbjpmdW5jdGlvbihlKXsyPT09ZSYmdC5fem9vbWxheWVyLnNlbGVjdEFsbChcIi5zZWxlY3Qtb3V0bGluZVwiKS5yZW1vdmUoKX19O1wicGFuXCI9PT1zPyhvLm5vZGUoKS5vbm1vdXNlZG93bj1udWxsLG8uY2FsbChkKHIsZSkpLG8ub24oXCJkYmxjbGljay56b29tXCIsZnVuY3Rpb24oKXt2YXIgdD1yLnZpZXdJbml0aWFsLGU9e307Zm9yKHZhciBuIGluIHQpZVtyLmlkK1wiLlwiK25dPXRbbl07aS5jYWxsKFwiX2d1aVJlbGF5b3V0XCIsYSxlKSxhLmVtaXQoXCJwbG90bHlfZG91YmxlY2xpY2tcIixudWxsKX0pLGEuX2NvbnRleHQuX3Njcm9sbFpvb20uZ2VvfHxvLm9uKFwid2hlZWwuem9vbVwiLG51bGwpKTpcInNlbGVjdFwiIT09cyYmXCJsYXNzb1wiIT09c3x8KG8ub24oXCIuem9vbVwiLG51bGwpLGcucHJlcEZuPWZ1bmN0aW9uKHQsZSxyKXtmKHQsZSxyLGcscyl9LGguaW5pdChnKSksby5vbihcIm1vdXNlbW92ZVwiLGZ1bmN0aW9uKCl7dmFyIHQ9ci5wcm9qZWN0aW9uLmludmVydChuLm1vdXNlKHRoaXMpKTtpZighdHx8aXNOYU4odFswXSl8fGlzTmFOKHRbMV0pKXJldHVybiBoLnVuaG92ZXIoYSxuLmV2ZW50KTtyLnhheGlzLnAyYz1mdW5jdGlvbigpe3JldHVybiB0WzBdfSxyLnlheGlzLnAyYz1mdW5jdGlvbigpe3JldHVybiB0WzFdfSxsLmhvdmVyKGEsbi5ldmVudCxyLmlkKX0pLG8ub24oXCJtb3VzZW91dFwiLGZ1bmN0aW9uKCl7YS5fZHJhZ2dpbmd8fGgudW5ob3ZlcihhLG4uZXZlbnQpfSksby5vbihcImNsaWNrXCIsZnVuY3Rpb24oKXtcInNlbGVjdFwiIT09cyYmXCJsYXNzb1wiIT09cyYmKGMuaW5kZXhPZihcInNlbGVjdFwiKT4tMSYmcChuLmV2ZW50LGEsW3IueGF4aXNdLFtyLnlheGlzXSxyLmlkLGcpLGMuaW5kZXhPZihcImV2ZW50XCIpPi0xJiZsLmNsaWNrKGEsbi5ldmVudCkpfSl9ZnVuY3Rpb24gdih0KXtyZXR1cm4gci5wcm9qZWN0aW9uLmludmVydChbdFswXStyLnhheGlzLl9vZmZzZXQsdFsxXStyLnlheGlzLl9vZmZzZXRdKX19LHgubWFrZUZyYW1ld29yaz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10LmdyYXBoRGl2LHI9ZS5fZnVsbExheW91dCxpPVwiY2xpcFwiK3IuX3VpZCt0LmlkO3QuY2xpcERlZj1yLl9jbGlwcy5hcHBlbmQoXCJjbGlwUGF0aFwiKS5hdHRyKFwiaWRcIixpKSx0LmNsaXBSZWN0PXQuY2xpcERlZi5hcHBlbmQoXCJyZWN0XCIpLHQuZnJhbWV3b3JrPW4uc2VsZWN0KHQuY29udGFpbmVyKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLFwiZ2VvIFwiK3QuaWQpLmNhbGwocy5zZXRDbGlwVXJsLGksZSksdC5wcm9qZWN0PWZ1bmN0aW9uKGUpe3ZhciByPXQucHJvamVjdGlvbihlKTtyZXR1cm4gcj9bclswXS10LnhheGlzLl9vZmZzZXQsclsxXS10LnlheGlzLl9vZmZzZXRdOltudWxsLG51bGxdfSx0LnhheGlzPXtfaWQ6XCJ4XCIsYzJwOmZ1bmN0aW9uKGUpe3JldHVybiB0LnByb2plY3QoZSlbMF19fSx0LnlheGlzPXtfaWQ6XCJ5XCIsYzJwOmZ1bmN0aW9uKGUpe3JldHVybiB0LnByb2plY3QoZSlbMV19fSx0Lm1vY2tBeGlzPXt0eXBlOlwibGluZWFyXCIsc2hvd2V4cG9uZW50OlwiYWxsXCIsZXhwb25lbnRmb3JtYXQ6XCJCXCJ9LHUuc2V0Q29udmVydCh0Lm1vY2tBeGlzLHIpfSx4LnNhdmVWaWV3SW5pdGlhbD1mdW5jdGlvbih0KXt2YXIgZT10LmNlbnRlcnx8e30scj10LnByb2plY3Rpb24sbj1yLnJvdGF0aW9ufHx7fTt0Ll9pc1Njb3BlZD90aGlzLnZpZXdJbml0aWFsPXtcImNlbnRlci5sb25cIjplLmxvbixcImNlbnRlci5sYXRcIjplLmxhdCxcInByb2plY3Rpb24uc2NhbGVcIjpyLnNjYWxlfTp0Ll9pc0NsaXBwZWQ/dGhpcy52aWV3SW5pdGlhbD17XCJwcm9qZWN0aW9uLnNjYWxlXCI6ci5zY2FsZSxcInByb2plY3Rpb24ucm90YXRpb24ubG9uXCI6bi5sb24sXCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxhdFwiOm4ubGF0fTp0aGlzLnZpZXdJbml0aWFsPXtcImNlbnRlci5sb25cIjplLmxvbixcImNlbnRlci5sYXRcIjplLmxhdCxcInByb2plY3Rpb24uc2NhbGVcIjpyLnNjYWxlLFwicHJvamVjdGlvbi5yb3RhdGlvbi5sb25cIjpuLmxvbn19LHgucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLnByb2plY3Rpb24scj1lLmdldFBhdGgoKTtmdW5jdGlvbiBuKHQpe3ZhciByPWUodC5sb25sYXQpO3JldHVybiByP1widHJhbnNsYXRlKFwiK3JbMF0rXCIsXCIrclsxXStcIilcIjpudWxsfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGUuaXNMb25MYXRPdmVyRWRnZXModC5sb25sYXQpP1wibm9uZVwiOm51bGx9Zm9yKHQgaW4gdGhpcy5iYXNlUGF0aHMpdGhpcy5iYXNlUGF0aHNbdF0uYXR0cihcImRcIixyKTtmb3IodCBpbiB0aGlzLmRhdGFQYXRocyl0aGlzLmRhdGFQYXRoc1t0XS5hdHRyKFwiZFwiLGZ1bmN0aW9uKHQpe3JldHVybiByKHQuZ2VvanNvbil9KTtmb3IodCBpbiB0aGlzLmRhdGFQb2ludHMpdGhpcy5kYXRhUG9pbnRzW3RdLmF0dHIoXCJkaXNwbGF5XCIsaSkuYXR0cihcInRyYW5zZm9ybVwiLG4pfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnRcIjo1OTYsXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9jb21wb25lbnRzL2Z4XCI6NjE3LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3RvcG9qc29uX3V0aWxzXCI6NzI4LFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL2NhcnRlc2lhbi9zZWxlY3RcIjo3NjYsXCIuLi9wbG90c1wiOjgxMCxcIi4vY29uc3RhbnRzXCI6Nzc3LFwiLi9wcm9qZWN0aW9uc1wiOjc4MixcIi4vem9vbVwiOjc4MyxkMzoxNTUsXCJ0b3BvanNvbi1jbGllbnRcIjo1MjV9XSw3Nzk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvZ2V0X2RhdGFcIikuZ2V0U3VicGxvdENhbGNEYXRhLGk9dChcIi4uLy4uL2xpYlwiKS5jb3VudGVyUmVnZXgsYT10KFwiLi9nZW9cIiksbz1cImdlb1wiLHM9aShvKSxsPXt9O2xbb109e3ZhbFR5cGU6XCJzdWJwbG90aWRcIixkZmx0Om8sZWRpdFR5cGU6XCJjYWxjXCJ9LGUuZXhwb3J0cz17YXR0cjpvLG5hbWU6byxpZFJvb3Q6byxpZFJlZ2V4OnMsYXR0clJlZ2V4OnMsYXR0cmlidXRlczpsLGxheW91dEF0dHJpYnV0ZXM6dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dChcIi4vbGF5b3V0X2RlZmF1bHRzXCIpLHBsb3Q6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsaT1lLl9zdWJwbG90c1tvXTt2b2lkIDA9PT13aW5kb3cuUGxvdGx5R2VvQXNzZXRzJiYod2luZG93LlBsb3RseUdlb0Fzc2V0cz17dG9wb2pzb246e319KTtmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXSxjPW4ocixvLGwpLHU9ZVtsXS5fc3VicGxvdDt1fHwodT1hKHtpZDpsLGdyYXBoRGl2OnQsY29udGFpbmVyOmUuX2dlb2xheWVyLm5vZGUoKSx0b3BvanNvblVSTDp0Ll9jb250ZXh0LnRvcG9qc29uVVJMLHN0YXRpY1Bsb3Q6dC5fY29udGV4dC5zdGF0aWNQbG90fSksZVtsXS5fc3VicGxvdD11KSx1LnBsb3QoYyxlLHQuX3Byb21pc2VzKX19LHVwZGF0ZUZ4OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fc3VicGxvdHNbb10sbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1lW3Jbbl1dO2kuX3N1YnBsb3QudXBkYXRlRngoZSxpKX19LGNsZWFuOmZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1uLl9zdWJwbG90c1tvXXx8W10sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgcz1pW2FdLGw9bltzXS5fc3VicGxvdDshZVtzXSYmbCYmKGwuZnJhbWV3b3JrLnJlbW92ZSgpLGwuY2xpcERlZi5yZW1vdmUoKSl9fX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCI6Nzg0LFwiLi9nZW9cIjo3NzgsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6NzgwLFwiLi9sYXlvdXRfZGVmYXVsdHNcIjo3ODF9XSw3ODA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uL2RvbWFpblwiKS5hdHRyaWJ1dGVzLGE9dChcIi4vY29uc3RhbnRzXCIpLG89dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGwscz17cmFuZ2U6e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsaXRlbXM6W3t2YWxUeXBlOlwibnVtYmVyXCJ9LHt2YWxUeXBlOlwibnVtYmVyXCJ9XX0sc2hvd2dyaWQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sdGljazA6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjB9LGR0aWNrOnt2YWxUeXBlOlwibnVtYmVyXCJ9LGdyaWRjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDpuLmxpZ2h0TGluZX0sZ3JpZHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxfX07KGUuZXhwb3J0cz1vKHtkb21haW46aSh7bmFtZTpcImdlb1wifSx7fSkscmVzb2x1dGlvbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6WzExMCw1MF0sZGZsdDoxMTAsY29lcmNlTnVtYmVyOiEwfSxzY29wZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6T2JqZWN0LmtleXMoYS5zY29wZURlZmF1bHRzKSxkZmx0Olwid29ybGRcIn0scHJvamVjdGlvbjp7dHlwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6T2JqZWN0LmtleXMoYS5wcm9qTmFtZXMpfSxyb3RhdGlvbjp7bG9uOnt2YWxUeXBlOlwibnVtYmVyXCJ9LGxhdDp7dmFsVHlwZTpcIm51bWJlclwifSxyb2xsOnt2YWxUeXBlOlwibnVtYmVyXCJ9fSxwYXJhbGxlbHM6e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsaXRlbXM6W3t2YWxUeXBlOlwibnVtYmVyXCJ9LHt2YWxUeXBlOlwibnVtYmVyXCJ9XX0sc2NhbGU6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjF9fSxjZW50ZXI6e2xvbjp7dmFsVHlwZTpcIm51bWJlclwifSxsYXQ6e3ZhbFR5cGU6XCJudW1iZXJcIn19LHNob3djb2FzdGxpbmVzOnt2YWxUeXBlOlwiYm9vbGVhblwifSxjb2FzdGxpbmVjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDpuLmRlZmF1bHRMaW5lfSxjb2FzdGxpbmV3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MX0sc2hvd2xhbmQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sbGFuZGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmEubGFuZENvbG9yfSxzaG93b2NlYW46e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sb2NlYW5jb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDphLndhdGVyQ29sb3J9LHNob3dsYWtlczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxsYWtlY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6YS53YXRlckNvbG9yfSxzaG93cml2ZXJzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LHJpdmVyY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6YS53YXRlckNvbG9yfSxyaXZlcndpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxfSxzaG93Y291bnRyaWVzOnt2YWxUeXBlOlwiYm9vbGVhblwifSxjb3VudHJ5Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6bi5kZWZhdWx0TGluZX0sY291bnRyeXdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxfSxzaG93c3VidW5pdHM6e3ZhbFR5cGU6XCJib29sZWFuXCJ9LHN1YnVuaXRjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDpuLmRlZmF1bHRMaW5lfSxzdWJ1bml0d2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjF9LHNob3dmcmFtZTp7dmFsVHlwZTpcImJvb2xlYW5cIn0sZnJhbWVjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDpuLmRlZmF1bHRMaW5lfSxmcmFtZXdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxfSxiZ2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0Om4uYmFja2dyb3VuZH0sbG9uYXhpczpzLGxhdGF4aXM6c30sXCJwbG90XCIsXCJmcm9tLXJvb3RcIikpLnVpcmV2aXNpb249e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcIm5vbmVcIn19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiOjU3NyxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi9kb21haW5cIjo3NzQsXCIuL2NvbnN0YW50c1wiOjc3N31dLDc4MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9zdWJwbG90X2RlZmF1bHRzXCIpLGk9dChcIi4vY29uc3RhbnRzXCIpLGE9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksbz1pLmF4ZXNOYW1lcztmdW5jdGlvbiBzKHQsZSxyKXt2YXIgbj1yKFwicmVzb2x1dGlvblwiKSxhPXIoXCJzY29wZVwiKSxzPWkuc2NvcGVEZWZhdWx0c1thXSxsPXIoXCJwcm9qZWN0aW9uLnR5cGVcIixzLnByb2pUeXBlKSxjPWUuX2lzQWxiZXJzVXNhPVwiYWxiZXJzIHVzYVwiPT09bDtjJiYoYT1lLnNjb3BlPVwidXNhXCIpO3ZhciB1PWUuX2lzU2NvcGVkPVwid29ybGRcIiE9PWEsaD1lLl9pc0NvbmljPS0xIT09bC5pbmRleE9mKFwiY29uaWNcIik7ZS5faXNDbGlwcGVkPSEhaS5sb25heGlzU3BhbltsXTtmb3IodmFyIGY9MDtmPG8ubGVuZ3RoO2YrKyl7dmFyIHAsZD1vW2ZdLGc9WzMwLDEwXVtmXTtpZih1KXA9c1tkK1wiUmFuZ2VcIl07ZWxzZXt2YXIgdj1pW2QrXCJTcGFuXCJdLG09KHZbbF18fHZbXCIqXCJdKS8yLHk9cihcInByb2plY3Rpb24ucm90YXRpb24uXCIrZC5zdWJzdHIoMCwzKSxzLnByb2pSb3RhdGVbZl0pO3A9W3ktbSx5K21dfXIoZCtcIi5yYW5nZVwiLHApLHIoZCtcIi50aWNrMFwiKSxyKGQrXCIuZHRpY2tcIixnKSxyKGQrXCIuc2hvd2dyaWRcIikmJihyKGQrXCIuZ3JpZGNvbG9yXCIpLHIoZCtcIi5ncmlkd2lkdGhcIikpfXZhciB4PWUubG9uYXhpcy5yYW5nZSxiPWUubGF0YXhpcy5yYW5nZSxfPXhbMF0sdz14WzFdO18+MCYmdzwwJiYodys9MzYwKTt2YXIgayxBLFQsTT0oXyt3KS8yO2lmKCFjKXt2YXIgUz11P3MucHJvalJvdGF0ZTpbTSwwLDBdO2s9cihcInByb2plY3Rpb24ucm90YXRpb24ubG9uXCIsU1swXSkscihcInByb2plY3Rpb24ucm90YXRpb24ubGF0XCIsU1sxXSkscihcInByb2plY3Rpb24ucm90YXRpb24ucm9sbFwiLFNbMl0pLHIoXCJzaG93Y29hc3RsaW5lc1wiLCF1KSYmKHIoXCJjb2FzdGxpbmVjb2xvclwiKSxyKFwiY29hc3RsaW5ld2lkdGhcIikpLHIoXCJzaG93b2NlYW5cIikmJnIoXCJvY2VhbmNvbG9yXCIpfShjPyhBPS05Ni42LFQ9MzguNyk6KEE9dT9NOmssVD0oYlswXStiWzFdKS8yKSxyKFwiY2VudGVyLmxvblwiLEEpLHIoXCJjZW50ZXIubGF0XCIsVCksaCkmJnIoXCJwcm9qZWN0aW9uLnBhcmFsbGVsc1wiLHMucHJvalBhcmFsbGVsc3x8WzAsNjBdKTtyKFwicHJvamVjdGlvbi5zY2FsZVwiKSxyKFwic2hvd2xhbmRcIikmJnIoXCJsYW5kY29sb3JcIikscihcInNob3dsYWtlc1wiKSYmcihcImxha2Vjb2xvclwiKSxyKFwic2hvd3JpdmVyc1wiKSYmKHIoXCJyaXZlcmNvbG9yXCIpLHIoXCJyaXZlcndpZHRoXCIpKSxyKFwic2hvd2NvdW50cmllc1wiLHUmJlwidXNhXCIhPT1hKSYmKHIoXCJjb3VudHJ5Y29sb3JcIikscihcImNvdW50cnl3aWR0aFwiKSksKFwidXNhXCI9PT1hfHxcIm5vcnRoIGFtZXJpY2FcIj09PWEmJjUwPT09bikmJihyKFwic2hvd3N1YnVuaXRzXCIsITApLHIoXCJzdWJ1bml0Y29sb3JcIikscihcInN1YnVuaXR3aWR0aFwiKSksdXx8cihcInNob3dmcmFtZVwiLCEwKSYmKHIoXCJmcmFtZWNvbG9yXCIpLHIoXCJmcmFtZXdpZHRoXCIpKSxyKFwiYmdjb2xvclwiKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe24odCxlLHIse3R5cGU6XCJnZW9cIixhdHRyaWJ1dGVzOmEsaGFuZGxlRGVmYXVsdHM6cyxwYXJ0aXRpb246XCJ5XCJ9KX19LHtcIi4uL3N1YnBsb3RfZGVmYXVsdHNcIjo4MjQsXCIuL2NvbnN0YW50c1wiOjc3NyxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo3ODB9XSw3ODI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe3JldHVybnt0eXBlOlwiRmVhdHVyZVwiLGlkOnQuaWQscHJvcGVydGllczp0LnByb3BlcnRpZXMsZ2VvbWV0cnk6cih0Lmdlb21ldHJ5LGUpfX1mdW5jdGlvbiByKGUsbil7aWYoIWUpcmV0dXJuIG51bGw7aWYoXCJHZW9tZXRyeUNvbGxlY3Rpb25cIj09PWUudHlwZSlyZXR1cm57dHlwZTpcIkdlb21ldHJ5Q29sbGVjdGlvblwiLGdlb21ldHJpZXM6b2JqZWN0Lmdlb21ldHJpZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiByKHQsbil9KX07aWYoIWMuaGFzT3duUHJvcGVydHkoZS50eXBlKSlyZXR1cm4gbnVsbDt2YXIgaT1jW2UudHlwZV07cmV0dXJuIHQuZ2VvLnN0cmVhbShlLG4oaSkpLGkucmVzdWx0KCl9dC5nZW8ucHJvamVjdD1mdW5jdGlvbih0LGUpe3ZhciBpPWUuc3RyZWFtO2lmKCFpKXRocm93IG5ldyBFcnJvcihcIm5vdCB5ZXQgc3VwcG9ydGVkXCIpO3JldHVybih0JiZuLmhhc093blByb3BlcnR5KHQudHlwZSk/blt0LnR5cGVdOnIpKHQsaSl9O3ZhciBuPXtGZWF0dXJlOmUsRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxyKXtyZXR1cm57dHlwZTpcIkZlYXR1cmVDb2xsZWN0aW9uXCIsZmVhdHVyZXM6dC5mZWF0dXJlcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGUodCxyKX0pfX19LGk9W10sYT1bXSxvPXtwb2ludDpmdW5jdGlvbih0LGUpe2kucHVzaChbdCxlXSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PWkubGVuZ3RoP2kubGVuZ3RoPDI/e3R5cGU6XCJQb2ludFwiLGNvb3JkaW5hdGVzOmlbMF19Ont0eXBlOlwiTXVsdGlQb2ludFwiLGNvb3JkaW5hdGVzOml9Om51bGw7cmV0dXJuIGk9W10sdH19LHM9e2xpbmVTdGFydDp1LHBvaW50OmZ1bmN0aW9uKHQsZSl7aS5wdXNoKFt0LGVdKX0sbGluZUVuZDpmdW5jdGlvbigpe2kubGVuZ3RoJiYoYS5wdXNoKGkpLGk9W10pfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1hLmxlbmd0aD9hLmxlbmd0aDwyP3t0eXBlOlwiTGluZVN0cmluZ1wiLGNvb3JkaW5hdGVzOmFbMF19Ont0eXBlOlwiTXVsdGlMaW5lU3RyaW5nXCIsY29vcmRpbmF0ZXM6YX06bnVsbDtyZXR1cm4gYT1bXSx0fX0sbD17cG9seWdvblN0YXJ0OnUsbGluZVN0YXJ0OnUscG9pbnQ6ZnVuY3Rpb24odCxlKXtpLnB1c2goW3QsZV0pfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9aS5sZW5ndGg7aWYodCl7ZG97aS5wdXNoKGlbMF0uc2xpY2UoKSl9d2hpbGUoKyt0PDQpO2EucHVzaChpKSxpPVtdfX0scG9seWdvbkVuZDp1LHJlc3VsdDpmdW5jdGlvbigpe2lmKCFhLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgdD1bXSxlPVtdO3JldHVybiBhLmZvckVhY2goZnVuY3Rpb24ocil7IWZ1bmN0aW9uKHQpe2lmKChlPXQubGVuZ3RoKTw0KXJldHVybiExO2Zvcih2YXIgZSxyPTAsbj10W2UtMV1bMV0qdFswXVswXS10W2UtMV1bMF0qdFswXVsxXTsrK3I8ZTspbis9dFtyLTFdWzFdKnRbcl1bMF0tdFtyLTFdWzBdKnRbcl1bMV07cmV0dXJuIG48PTB9KHIpP2UucHVzaChyKTp0LnB1c2goW3JdKX0pLGUuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcj1lWzBdO3Quc29tZShmdW5jdGlvbih0KXtpZihmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lWzBdLG49ZVsxXSxpPSExLGE9MCxvPXQubGVuZ3RoLHM9by0xO2E8bztzPWErKyl7dmFyIGw9dFthXSxjPWxbMF0sdT1sWzFdLGg9dFtzXSxmPWhbMF0scD1oWzFdO3U+bl5wPm4mJnI8KGYtYykqKG4tdSkvKHAtdSkrYyYmKGk9IWkpfXJldHVybiBpfSh0WzBdLHIpKXJldHVybiB0LnB1c2goZSksITB9KXx8dC5wdXNoKFtlXSl9KSxhPVtdLHQubGVuZ3RoP3QubGVuZ3RoPjE/e3R5cGU6XCJNdWx0aVBvbHlnb25cIixjb29yZGluYXRlczp0fTp7dHlwZTpcIlBvbHlnb25cIixjb29yZGluYXRlczp0WzBdfTpudWxsfX0sYz17UG9pbnQ6byxNdWx0aVBvaW50Om8sTGluZVN0cmluZzpzLE11bHRpTGluZVN0cmluZzpzLFBvbHlnb246bCxNdWx0aVBvbHlnb246bCxTcGhlcmU6bH07ZnVuY3Rpb24gdSgpe312YXIgaD0xZS02LGY9aCpoLHA9TWF0aC5QSSxkPXAvMixnPShNYXRoLnNxcnQocCkscC8xODApLHY9MTgwL3A7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdD4xP2Q6dDwtMT8tZDpNYXRoLmFzaW4odCl9ZnVuY3Rpb24geSh0KXtyZXR1cm4gdD4xPzA6dDwtMT9wOk1hdGguYWNvcyh0KX12YXIgeD10Lmdlby5wcm9qZWN0aW9uLGI9dC5nZW8ucHJvamVjdGlvbk11dGF0b3I7ZnVuY3Rpb24gXyh0LGUpe3ZhciByPSgyK2QpKk1hdGguc2luKGUpO2UvPTI7Zm9yKHZhciBuPTAsaT0xLzA7bjwxMCYmTWF0aC5hYnMoaSk+aDtuKyspe3ZhciBhPU1hdGguY29zKGUpO2UtPWk9KGUrTWF0aC5zaW4oZSkqKGErMiktcikvKDIqYSooMSthKSl9cmV0dXJuWzIvTWF0aC5zcXJ0KHAqKDQrcCkpKnQqKDErTWF0aC5jb3MoZSkpLDIqTWF0aC5zcXJ0KHAvKDQrcCkpKk1hdGguc2luKGUpXX10Lmdlby5pbnRlcnJ1cHQ9ZnVuY3Rpb24oZSl7dmFyIHIsbj1bW1tbLXAsMF0sWzAsZF0sW3AsMF1dXSxbW1stcCwwXSxbMCwtZF0sW3AsMF1dXV07ZnVuY3Rpb24gaSh0LHIpe2Zvcih2YXIgaT1yPDA/LTE6MSxhPW5bKyhyPDApXSxvPTAscz1hLmxlbmd0aC0xO288cyYmdD5hW29dWzJdWzBdOysrbyk7dmFyIGw9ZSh0LWFbb11bMV1bMF0scik7cmV0dXJuIGxbMF0rPWUoYVtvXVsxXVswXSxpKnI+aSphW29dWzBdWzFdP2Fbb11bMF1bMV06cilbMF0sbH1lLmludmVydCYmKGkuaW52ZXJ0PWZ1bmN0aW9uKHQsYSl7Zm9yKHZhciBvPXJbKyhhPDApXSxzPW5bKyhhPDApXSxjPTAsdT1vLmxlbmd0aDtjPHU7KytjKXt2YXIgaD1vW2NdO2lmKGhbMF1bMF08PXQmJnQ8aFsxXVswXSYmaFswXVsxXTw9YSYmYTxoWzFdWzFdKXt2YXIgZj1lLmludmVydCh0LWUoc1tjXVsxXVswXSwwKVswXSxhKTtyZXR1cm4gZlswXSs9c1tjXVsxXVswXSxsKGkoZlswXSxmWzFdKSxbdCxhXSk/ZjpudWxsfX19KTt2YXIgYT10Lmdlby5wcm9qZWN0aW9uKGkpLG89YS5zdHJlYW07ZnVuY3Rpb24gcyh0LGUpe2Zvcih2YXIgcixuLGksYT0tMSxvPXQubGVuZ3RoLHM9dFswXSxsPVtdOysrYTxvOyl7bj0oKHI9dFthXSlbMF0tc1swXSkvZSxpPShyWzFdLXNbMV0pL2U7Zm9yKHZhciBjPTA7YzxlOysrYylsLnB1c2goW3NbMF0rYypuLHNbMV0rYyppXSk7cz1yfXJldHVybiBsLnB1c2gociksbH1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIE1hdGguYWJzKHRbMF0tZVswXSk8aCYmTWF0aC5hYnModFsxXS1lWzFdKTxofXJldHVybiBhLnN0cmVhbT1mdW5jdGlvbihlKXt2YXIgcj1hLnJvdGF0ZSgpLGk9byhlKSxsPShhLnJvdGF0ZShbMCwwXSksbyhlKSk7cmV0dXJuIGEucm90YXRlKHIpLGkuc3BoZXJlPWZ1bmN0aW9uKCl7dC5nZW8uc3RyZWFtKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTFlLTYscj1bXSxpPTAsYT1uWzBdLmxlbmd0aDtpPGE7KytpKXt2YXIgbz1uWzBdW2ldLGw9MTgwKm9bMF1bMF0vcCxjPTE4MCpvWzBdWzFdL3AsdT0xODAqb1sxXVsxXS9wLGg9MTgwKm9bMl1bMF0vcCxmPTE4MCpvWzJdWzFdL3A7ci5wdXNoKHMoW1tsK2UsYytlXSxbbCtlLHUtZV0sW2gtZSx1LWVdLFtoLWUsZitlXV0sMzApKX1mb3IodmFyIGk9blsxXS5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIG89blsxXVtpXSxsPTE4MCpvWzBdWzBdL3AsYz0xODAqb1swXVsxXS9wLHU9MTgwKm9bMV1bMV0vcCxoPTE4MCpvWzJdWzBdL3AsZj0xODAqb1syXVsxXS9wO3IucHVzaChzKFtbaC1lLGYtZV0sW2gtZSx1K2VdLFtsK2UsdStlXSxbbCtlLGMtZV1dLDMwKSl9cmV0dXJue3R5cGU6XCJQb2x5Z29uXCIsY29vcmRpbmF0ZXM6W3QubWVyZ2UocildfX0oKSxsKX0saX0sYS5sb2Jlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW1t0WzBdWzBdKnAvMTgwLHRbMF1bMV0qcC8xODBdLFt0WzFdWzBdKnAvMTgwLHRbMV1bMV0qcC8xODBdLFt0WzJdWzBdKnAvMTgwLHRbMl1bMV0qcC8xODBdXX0pfSkscj1uLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7dmFyIHIsbj1lKHRbMF1bMF0sdFswXVsxXSlbMF0saT1lKHRbMl1bMF0sdFsyXVsxXSlbMF0sYT1lKHRbMV1bMF0sdFswXVsxXSlbMV0sbz1lKHRbMV1bMF0sdFsxXVsxXSlbMV07cmV0dXJuIGE+byYmKHI9YSxhPW8sbz1yKSxbW24sYV0sW2ksb11dfSl9KSxhKTpuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW1sxODAqdFswXVswXS9wLDE4MCp0WzBdWzFdL3BdLFsxODAqdFsxXVswXS9wLDE4MCp0WzFdWzFdL3BdLFsxODAqdFsyXVswXS9wLDE4MCp0WzJdWzFdL3BdXX0pfSl9LGF9LF8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9LjUqZSpNYXRoLnNxcnQoKDQrcCkvcCksbj1tKHIpLGk9TWF0aC5jb3Mobik7cmV0dXJuW3QvKDIvTWF0aC5zcXJ0KHAqKDQrcCkpKigxK2kpKSxtKChuK3IqKGkrMikpLygyK2QpKV19LCh0Lmdlby5lY2tlcnQ0PWZ1bmN0aW9uKCl7cmV0dXJuIHgoXyl9KS5yYXc9Xzt2YXIgdz10Lmdlby5hemltdXRoYWxFcXVhbEFyZWEucmF3O2Z1bmN0aW9uIGsodCxlKXtpZihhcmd1bWVudHMubGVuZ3RoPDImJihlPXQpLDE9PT1lKXJldHVybiB3O2lmKGU9PT0xLzApcmV0dXJuIEE7ZnVuY3Rpb24gcihyLG4pe3ZhciBpPXcoci9lLG4pO3JldHVybiBpWzBdKj10LGl9cmV0dXJuIHIuaW52ZXJ0PWZ1bmN0aW9uKHIsbil7dmFyIGk9dy5pbnZlcnQoci90LG4pO3JldHVybiBpWzBdKj1lLGl9LHJ9ZnVuY3Rpb24gQSh0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpL01hdGguY29zKGUvPTIpLDIqTWF0aC5zaW4oZSldfWZ1bmN0aW9uIFQodCxlKXtyZXR1cm5bMyp0LygyKnApKk1hdGguc3FydChwKnAvMy1lKmUpLGVdfWZ1bmN0aW9uIE0odCxlKXtyZXR1cm5bdCwxLjI1Kk1hdGgubG9nKE1hdGgudGFuKHAvNCsuNCplKSldfWZ1bmN0aW9uIFModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByLG49dCpNYXRoLnNpbihlKSxpPTMwO2Rve2UtPXI9KGUrTWF0aC5zaW4oZSktbikvKDErTWF0aC5jb3MoZSkpfXdoaWxlKE1hdGguYWJzKHIpPmgmJi0taT4wKTtyZXR1cm4gZS8yfX1BLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPTIqbShlLzIpO3JldHVyblt0Kk1hdGguY29zKHIvMikvTWF0aC5jb3Mocikscl19LCh0Lmdlby5oYW1tZXI9ZnVuY3Rpb24oKXt2YXIgdD0yLGU9YihrKSxyPWUodCk7cmV0dXJuIHIuY29lZmZpY2llbnQ9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZSh0PStyKTp0fSxyfSkucmF3PWssVC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bMi8zKnAqdC9NYXRoLnNxcnQocCpwLzMtZSplKSxlXX0sKHQuZ2VvLmthdnJheXNraXk3PWZ1bmN0aW9uKCl7cmV0dXJuIHgoVCl9KS5yYXc9VCxNLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0LDIuNSpNYXRoLmF0YW4oTWF0aC5leHAoLjgqZSkpLS42MjUqcF19LCh0Lmdlby5taWxsZXI9ZnVuY3Rpb24oKXtyZXR1cm4geChNKX0pLnJhdz1NLFMocCk7dmFyIEU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVMocik7ZnVuY3Rpb24gaShyLGkpe3JldHVyblt0KnIqTWF0aC5jb3MoaT1uKGkpKSxlKk1hdGguc2luKGkpXX1yZXR1cm4gaS5pbnZlcnQ9ZnVuY3Rpb24obixpKXt2YXIgYT1tKGkvZSk7cmV0dXJuW24vKHQqTWF0aC5jb3MoYSkpLG0oKDIqYStNYXRoLnNpbigyKmEpKS9yKV19LGl9KE1hdGguU1FSVDIvZCxNYXRoLlNRUlQyLHApO2Z1bmN0aW9uIEModCxlKXt2YXIgcj1lKmUsbj1yKnI7cmV0dXJuW3QqKC44NzA3LS4xMzE5NzkqcituKihuKiguMDAzOTcxKnItLjAwMTUyOSpuKS0uMDEzNzkxKSksZSooMS4wMDcyMjYrciooLjAxNTA4NStuKiguMDI4ODc0KnItLjA0NDQ3NS0uMDA1OTE2Km4pKSldfSh0Lmdlby5tb2xsd2VpZGU9ZnVuY3Rpb24oKXtyZXR1cm4geChFKX0pLnJhdz1FLEMuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1lLGk9MjU7ZG97dmFyIGE9bipuLG89YSphO24tPXI9KG4qKDEuMDA3MjI2K2EqKC4wMTUwODUrbyooLjAyODg3NCphLS4wNDQ0NzUtLjAwNTkxNipvKSkpLWUpLygxLjAwNzIyNithKiguMDQ1MjU1K28qKC4yNTk4NjYqYS0uMzExMzI1LS4wMDU5MTYqMTEqbykpKX13aGlsZShNYXRoLmFicyhyKT5oJiYtLWk+MCk7cmV0dXJuW3QvKC44NzA3KyhhPW4qbikqKGEqKGEqYSphKiguMDAzOTcxLS4wMDE1MjkqYSktLjAxMzc5MSktLjEzMTk3OSkpLG5dfSwodC5nZW8ubmF0dXJhbEVhcnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHgoQyl9KS5yYXc9Qzt2YXIgTD1bWy45OTg2LC0uMDYyXSxbMSwwXSxbLjk5ODYsLjA2Ml0sWy45OTU0LC4xMjRdLFsuOTksLjE4Nl0sWy45ODIyLC4yNDhdLFsuOTczLC4zMV0sWy45NiwuMzcyXSxbLjk0MjcsLjQzNF0sWy45MjE2LC40OTU4XSxbLjg5NjIsLjU1NzFdLFsuODY3OSwuNjE3Nl0sWy44MzUsLjY3NjldLFsuNzk4NiwuNzM0Nl0sWy43NTk3LC43OTAzXSxbLjcxODYsLjg0MzVdLFsuNjczMiwuODkzNl0sWy42MjEzLC45Mzk0XSxbLjU3MjIsLjk3NjFdLFsuNTMyMiwxXV07ZnVuY3Rpb24geih0LGUpe3ZhciByLG49TWF0aC5taW4oMTgsMzYqTWF0aC5hYnMoZSkvcCksaT1NYXRoLmZsb29yKG4pLGE9bi1pLG89KHI9TFtpXSlbMF0scz1yWzFdLGw9KHI9TFsrK2ldKVswXSxjPXJbMV0sdT0ocj1MW01hdGgubWluKDE5LCsraSldKVswXSxoPXJbMV07cmV0dXJuW3QqKGwrYSoodS1vKS8yK2EqYSoodS0yKmwrbykvMiksKGU+MD9kOi1kKSooYythKihoLXMpLzIrYSphKihoLTIqYytzKS8yKV19ZnVuY3Rpb24gTyh0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpLGVdfWZ1bmN0aW9uIEkodCxlKXt2YXIgcixuPU1hdGguY29zKGUpLGk9KHI9eShuKk1hdGguY29zKHQvPTIpKSk/ci9NYXRoLnNpbihyKToxO3JldHVyblsyKm4qTWF0aC5zaW4odCkqaSxNYXRoLnNpbihlKSppXX1mdW5jdGlvbiBEKHQsZSl7dmFyIHI9SSh0LGUpO3JldHVyblsoclswXSt0L2QpLzIsKHJbMV0rZSkvMl19TC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RbMV0qPTEuMDE0NH0pLHouaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS9kLG49OTAqcixpPU1hdGgubWluKDE4LE1hdGguYWJzKG4vNSkpLGE9TWF0aC5tYXgoMCxNYXRoLmZsb29yKGkpKTtkb3t2YXIgbz1MW2FdWzFdLHM9TFthKzFdWzFdLGw9TFtNYXRoLm1pbigxOSxhKzIpXVsxXSxjPWwtbyx1PWwtMipzK28saD0yKihNYXRoLmFicyhyKS1zKS9jLHA9dS9jLG09aCooMS1wKmgqKDEtMipwKmgpKTtpZihtPj0wfHwxPT09YSl7bj0oZT49MD81Oi01KSoobStpKTt2YXIgeSx4PTUwO2Rve209KGk9TWF0aC5taW4oMTgsTWF0aC5hYnMobikvNSkpLShhPU1hdGguZmxvb3IoaSkpLG89TFthXVsxXSxzPUxbYSsxXVsxXSxsPUxbTWF0aC5taW4oMTksYSsyKV1bMV0sbi09KHk9KGU+PTA/ZDotZCkqKHMrbSoobC1vKS8yK20qbSoobC0yKnMrbykvMiktZSkqdn13aGlsZShNYXRoLmFicyh5KT5mJiYtLXg+MCk7YnJlYWt9fXdoaWxlKC0tYT49MCk7dmFyIGI9TFthXVswXSxfPUxbYSsxXVswXSx3PUxbTWF0aC5taW4oMTksYSsyKV1bMF07cmV0dXJuW3QvKF8rbSoody1iKS8yK20qbSoody0yKl8rYikvMiksbipnXX0sKHQuZ2VvLnJvYmluc29uPWZ1bmN0aW9uKCl7cmV0dXJuIHgoeil9KS5yYXc9eixPLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0L01hdGguY29zKGUpLGVdfSwodC5nZW8uc2ludXNvaWRhbD1mdW5jdGlvbigpe3JldHVybiB4KE8pfSkucmF3PU8sSS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtpZighKHQqdCs0KmUqZT5wKnAraCkpe3ZhciByPXQsbj1lLGk9MjU7ZG97dmFyIGEsbz1NYXRoLnNpbihyKSxzPU1hdGguc2luKHIvMiksbD1NYXRoLmNvcyhyLzIpLGM9TWF0aC5zaW4obiksdT1NYXRoLmNvcyhuKSxmPU1hdGguc2luKDIqbiksZD1jKmMsZz11KnUsdj1zKnMsbT0xLWcqbCpsLHg9bT95KHUqbCkqTWF0aC5zcXJ0KGE9MS9tKTphPTAsYj0yKngqdSpzLXQsXz14KmMtZSx3PWEqKGcqdit4KnUqbCpkKSxrPWEqKC41Km8qZi0yKngqYypzKSxBPS4yNSphKihmKnMteCpjKmcqbyksVD1hKihkKmwreCp2KnUpLE09aypBLVQqdztpZighTSlicmVhazt2YXIgUz0oXyprLWIqVCkvTSxFPShiKkEtXyp3KS9NO3ItPVMsbi09RX13aGlsZSgoTWF0aC5hYnMoUyk+aHx8TWF0aC5hYnMoRSk+aCkmJi0taT4wKTtyZXR1cm5bcixuXX19LCh0Lmdlby5haXRvZmY9ZnVuY3Rpb24oKXtyZXR1cm4geChJKX0pLnJhdz1JLEQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dCxuPWUsaT0yNTtkb3t2YXIgYSxvPU1hdGguY29zKG4pLHM9TWF0aC5zaW4obiksbD1NYXRoLnNpbigyKm4pLGM9cypzLHU9bypvLGY9TWF0aC5zaW4ocikscD1NYXRoLmNvcyhyLzIpLGc9TWF0aC5zaW4oci8yKSx2PWcqZyxtPTEtdSpwKnAseD1tP3kobypwKSpNYXRoLnNxcnQoYT0xL20pOmE9MCxiPS41KigyKngqbypnK3IvZCktdCxfPS41Kih4KnMrbiktZSx3PS41KmEqKHUqdit4Km8qcCpjKSsuNS9kLGs9YSooZipsLzQteCpzKmcpLEE9LjEyNSphKihsKmcteCpzKnUqZiksVD0uNSphKihjKnAreCp2Km8pKy41LE09aypBLVQqdyxTPShfKmstYipUKS9NLEU9KGIqQS1fKncpL007ci09UyxuLT1FfXdoaWxlKChNYXRoLmFicyhTKT5ofHxNYXRoLmFicyhFKT5oKSYmLS1pPjApO3JldHVybltyLG5dfSwodC5nZW8ud2lua2VsMz1mdW5jdGlvbigpe3JldHVybiB4KEQpfSkucmF3PUR9fSx7fV0sNzgzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxvPU1hdGguUEkvMTgwLHM9MTgwL01hdGguUEksbD17Y3Vyc29yOlwicG9pbnRlclwifSxjPXtjdXJzb3I6XCJhdXRvXCJ9O2Z1bmN0aW9uIHUodCxlKXtyZXR1cm4gbi5iZWhhdmlvci56b29tKCkudHJhbnNsYXRlKGUudHJhbnNsYXRlKCkpLnNjYWxlKGUuc2NhbGUoKSl9ZnVuY3Rpb24gaCh0LGUscil7dmFyIG49dC5pZCxvPXQuZ3JhcGhEaXYscz1vLmxheW91dCxsPXNbbl0sYz1vLl9mdWxsTGF5b3V0LHU9Y1tuXSxoPXt9LGY9e307ZnVuY3Rpb24gcCh0LGUpe2hbbitcIi5cIit0XT1pLm5lc3RlZFByb3BlcnR5KGwsdCkuZ2V0KCksYS5jYWxsKFwiX3N0b3JlRGlyZWN0R1VJRWRpdFwiLHMsYy5fcHJlR1VJLGgpO3ZhciByPWkubmVzdGVkUHJvcGVydHkodSx0KTtyLmdldCgpIT09ZSYmKHIuc2V0KGUpLGkubmVzdGVkUHJvcGVydHkobCx0KS5zZXQoZSksZltuK1wiLlwiK3RdPWUpfXIocCkscChcInByb2plY3Rpb24uc2NhbGVcIixlLnNjYWxlKCkvdC5maXRTY2FsZSksby5lbWl0KFwicGxvdGx5X3JlbGF5b3V0XCIsZil9ZnVuY3Rpb24gZih0LGUpe3ZhciByPXUoMCxlKTtmdW5jdGlvbiBpKHIpe3ZhciBuPWUuaW52ZXJ0KHQubWlkUHQpO3IoXCJjZW50ZXIubG9uXCIsblswXSkscihcImNlbnRlci5sYXRcIixuWzFdKX1yZXR1cm4gci5vbihcInpvb21zdGFydFwiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUobCl9KS5vbihcInpvb21cIixmdW5jdGlvbigpe2Uuc2NhbGUobi5ldmVudC5zY2FsZSkudHJhbnNsYXRlKG4uZXZlbnQudHJhbnNsYXRlKSx0LnJlbmRlcigpfSkub24oXCJ6b29tZW5kXCIsZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5zdHlsZShjKSxoKHQsZSxpKX0pLHJ9ZnVuY3Rpb24gcCh0LGUpe3ZhciByLGksYSxvLHMsZixwLGQsZyx2PXUoMCxlKSxtPTI7ZnVuY3Rpb24geSh0KXtyZXR1cm4gZS5pbnZlcnQodCl9ZnVuY3Rpb24geChyKXt2YXIgbj1lLnJvdGF0ZSgpLGk9ZS5pbnZlcnQodC5taWRQdCk7cihcInByb2plY3Rpb24ucm90YXRpb24ubG9uXCIsLW5bMF0pLHIoXCJjZW50ZXIubG9uXCIsaVswXSkscihcImNlbnRlci5sYXRcIixpWzFdKX1yZXR1cm4gdi5vbihcInpvb21zdGFydFwiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUobCkscj1uLm1vdXNlKHRoaXMpLGk9ZS5yb3RhdGUoKSxhPWUudHJhbnNsYXRlKCksbz1pLHM9eShyKX0pLm9uKFwiem9vbVwiLGZ1bmN0aW9uKCl7aWYoZj1uLm1vdXNlKHRoaXMpLGZ1bmN0aW9uKHQpe3ZhciByPXkodCk7aWYoIXIpcmV0dXJuITA7dmFyIG49ZShyKTtyZXR1cm4gTWF0aC5hYnMoblswXS10WzBdKT5tfHxNYXRoLmFicyhuWzFdLXRbMV0pPm19KHIpKXJldHVybiB2LnNjYWxlKGUuc2NhbGUoKSksdm9pZCB2LnRyYW5zbGF0ZShlLnRyYW5zbGF0ZSgpKTtlLnNjYWxlKG4uZXZlbnQuc2NhbGUpLGUudHJhbnNsYXRlKFthWzBdLG4uZXZlbnQudHJhbnNsYXRlWzFdXSkscz95KGYpJiYoZD15KGYpLHA9W29bMF0rKGRbMF0tc1swXSksaVsxXSxpWzJdXSxlLnJvdGF0ZShwKSxvPXApOnM9eShyPWYpLGc9ITAsdC5yZW5kZXIoKX0pLm9uKFwiem9vbWVuZFwiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUoYyksZyYmaCh0LGUseCl9KSx2fWZ1bmN0aW9uIGQodCxlKXt2YXIgcixpPXtyOmUucm90YXRlKCksazplLnNjYWxlKCl9LGE9dSgwLGUpLGY9ZnVuY3Rpb24odCl7dmFyIGU9MCxyPWFyZ3VtZW50cy5sZW5ndGgsaT1bXTtmb3IoOysrZTxyOylpLnB1c2goYXJndW1lbnRzW2VdKTt2YXIgYT1uLmRpc3BhdGNoLmFwcGx5KG51bGwsaSk7cmV0dXJuIGEub2Y9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIG87dHJ5e289aS5zb3VyY2VFdmVudD1uLmV2ZW50LGkudGFyZ2V0PXQsbi5ldmVudD1pLGFbaS50eXBlXS5hcHBseShlLHIpfWZpbmFsbHl7bi5ldmVudD1vfX19LGF9KGEsXCJ6b29tc3RhcnRcIixcInpvb21cIixcInpvb21lbmRcIikscD0wLGQ9YS5vbjtmdW5jdGlvbiBtKHQpe3ZhciByPWUucm90YXRlKCk7dChcInByb2plY3Rpb24ucm90YXRpb24ubG9uXCIsLXJbMF0pLHQoXCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxhdFwiLC1yWzFdKX1yZXR1cm4gYS5vbihcInpvb21zdGFydFwiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUobCk7dmFyIHQsYyx1LGgsbSxiLF8sdyxrLEEsVCxNPW4ubW91c2UodGhpcyksUz1lLnJvdGF0ZSgpLEU9UyxDPWUudHJhbnNsYXRlKCksTD0oYz0uNSoodD1TKVswXSpvLHU9LjUqdFsxXSpvLGg9LjUqdFsyXSpvLG09TWF0aC5zaW4oYyksYj1NYXRoLmNvcyhjKSxfPU1hdGguc2luKHUpLHc9TWF0aC5jb3ModSksaz1NYXRoLnNpbihoKSxBPU1hdGguY29zKGgpLFtiKncqQSttKl8qayxtKncqQS1iKl8qayxiKl8qQSttKncqayxiKncqay1tKl8qQV0pO3I9ZyhlLE0pLGQuY2FsbChhLFwiem9vbVwiLGZ1bmN0aW9uKCl7dmFyIHQsYSxvLGwsYyx1LGgscCxkLG0sYj1uLm1vdXNlKHRoaXMpO2lmKGUuc2NhbGUoaS5rPW4uZXZlbnQuc2NhbGUpLHIpe2lmKGcoZSxiKSl7ZS5yb3RhdGUoUykudHJhbnNsYXRlKEMpO3ZhciBfPWcoZSxiKSx3PWZ1bmN0aW9uKHQsZSl7aWYoIXR8fCFlKXJldHVybjt2YXIgcj1mdW5jdGlvbih0LGUpe3JldHVyblt0WzFdKmVbMl0tdFsyXSplWzFdLHRbMl0qZVswXS10WzBdKmVbMl0sdFswXSplWzFdLXRbMV0qZVswXV19KHQsZSksbj1NYXRoLnNxcnQoeChyLHIpKSxpPS41Kk1hdGguYWNvcyhNYXRoLm1heCgtMSxNYXRoLm1pbigxLHgodCxlKSkpKSxhPU1hdGguc2luKGkpL247cmV0dXJuIG4mJltNYXRoLmNvcyhpKSxyWzJdKmEsLXJbMV0qYSxyWzBdKmFdfShyLF8pLGs9ZnVuY3Rpb24odCl7cmV0dXJuW01hdGguYXRhbjIoMioodFswXSp0WzFdK3RbMl0qdFszXSksMS0yKih0WzFdKnRbMV0rdFsyXSp0WzJdKSkqcyxNYXRoLmFzaW4oTWF0aC5tYXgoLTEsTWF0aC5taW4oMSwyKih0WzBdKnRbMl0tdFszXSp0WzFdKSkpKSpzLE1hdGguYXRhbjIoMioodFswXSp0WzNdK3RbMV0qdFsyXSksMS0yKih0WzJdKnRbMl0rdFszXSp0WzNdKSkqc119KChhPXcsbz0odD1MKVswXSxsPXRbMV0sYz10WzJdLHU9dFszXSxoPWFbMF0scD1hWzFdLGQ9YVsyXSxtPWFbM10sW28qaC1sKnAtYypkLXUqbSxvKnArbCpoK2MqbS11KmQsbypkLWwqbStjKmgrdSpwLG8qbStsKmQtYypwK3UqaF0pKSxBPWkucj1mdW5jdGlvbih0LGUscil7dmFyIG49eShlLDIsdFswXSk7bj15KG4sMSx0WzFdKSxuPXkobiwwLHRbMl0tclsyXSk7dmFyIGksYSxvPWVbMF0sbD1lWzFdLGM9ZVsyXSx1PW5bMF0saD1uWzFdLGY9blsyXSxwPU1hdGguYXRhbjIobCxvKSpzLGQ9TWF0aC5zcXJ0KG8qbytsKmwpO01hdGguYWJzKGgpPmQ/KGE9KGg+MD85MDotOTApLXAsaT0wKTooYT1NYXRoLmFzaW4oaC9kKSpzLXAsaT1NYXRoLnNxcnQoZCpkLWgqaCkpO3ZhciBnPTE4MC1hLTIqcCxtPShNYXRoLmF0YW4yKGYsdSktTWF0aC5hdGFuMihjLGkpKSpzLHg9KE1hdGguYXRhbjIoZix1KS1NYXRoLmF0YW4yKGMsLWkpKSpzLGI9dihyWzBdLHJbMV0sYSxtKSxfPXYoclswXSxyWzFdLGcseCk7cmV0dXJuIGI8PV8/W2EsbSxyWzJdXTpbZyx4LHJbMl1dfShrLHIsRSk7aXNGaW5pdGUoQVswXSkmJmlzRmluaXRlKEFbMV0pJiZpc0Zpbml0ZShBWzJdKXx8KEE9RSksZS5yb3RhdGUoQSksRT1BfX1lbHNlIHI9ZyhlLE09Yik7Zi5vZih0aGlzLGFyZ3VtZW50cykoe3R5cGU6XCJ6b29tXCJ9KX0pLFQ9Zi5vZih0aGlzLGFyZ3VtZW50cykscCsrfHxUKHt0eXBlOlwiem9vbXN0YXJ0XCJ9KX0pLm9uKFwiem9vbWVuZFwiLGZ1bmN0aW9uKCl7dmFyIHI7bi5zZWxlY3QodGhpcykuc3R5bGUoYyksZC5jYWxsKGEsXCJ6b29tXCIsbnVsbCkscj1mLm9mKHRoaXMsYXJndW1lbnRzKSwtLXB8fHIoe3R5cGU6XCJ6b29tZW5kXCJ9KSxoKHQsZSxtKX0pLm9uKFwiem9vbS5yZWRyYXdcIixmdW5jdGlvbigpe3QucmVuZGVyKCl9KSxuLnJlYmluZChhLGYsXCJvblwiKX1mdW5jdGlvbiBnKHQsZSl7dmFyIHI9dC5pbnZlcnQoZSk7cmV0dXJuIHImJmlzRmluaXRlKHJbMF0pJiZpc0Zpbml0ZShyWzFdKSYmZnVuY3Rpb24odCl7dmFyIGU9dFswXSpvLHI9dFsxXSpvLG49TWF0aC5jb3Mocik7cmV0dXJuW24qTWF0aC5jb3MoZSksbipNYXRoLnNpbihlKSxNYXRoLnNpbihyKV19KHIpfWZ1bmN0aW9uIHYodCxlLHIsbil7dmFyIGk9bShyLXQpLGE9bShuLWUpO3JldHVybiBNYXRoLnNxcnQoaSppK2EqYSl9ZnVuY3Rpb24gbSh0KXtyZXR1cm4odCUzNjArNTQwKSUzNjAtMTgwfWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBuPXIqbyxpPXQuc2xpY2UoKSxhPTA9PT1lPzE6MCxzPTI9PT1lPzE6MixsPU1hdGguY29zKG4pLGM9TWF0aC5zaW4obik7cmV0dXJuIGlbYV09dFthXSpsLXRbc10qYyxpW3NdPXRbc10qbCt0W2FdKmMsaX1mdW5jdGlvbiB4KHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9dC5sZW5ndGg7bjxpOysrbilyKz10W25dKmVbbl07cmV0dXJuIHJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5wcm9qZWN0aW9uO3JldHVybihlLl9pc1Njb3BlZD9mOmUuX2lzQ2xpcHBlZD9kOnApKHQscil9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxkMzoxNTV9XSw3ODQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vcmVnaXN0cnlcIiksaT10KFwiLi9jYXJ0ZXNpYW4vY29uc3RhbnRzXCIpLlNVQlBMT1RfUEFUVEVSTjtyLmdldFN1YnBsb3RDYWxjRGF0YT1mdW5jdGlvbih0LGUscil7dmFyIGk9bi5zdWJwbG90c1JlZ2lzdHJ5W2VdO2lmKCFpKXJldHVybltdO2Zvcih2YXIgYT1pLmF0dHIsbz1bXSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPXRbc107bFswXS50cmFjZVthXT09PXImJm8ucHVzaChsKX1yZXR1cm4gb30sci5nZXRNb2R1bGVDYWxjRGF0YT1mdW5jdGlvbih0LGUpe3ZhciByLGk9W10sYT1bXTtpZighKHI9XCJzdHJpbmdcIj09dHlwZW9mIGU/bi5nZXRNb2R1bGUoZSkucGxvdDpcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6ZS5wbG90KSlyZXR1cm5baSx0XTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9dFtvXSxsPXNbMF0udHJhY2U7ITA9PT1sLnZpc2libGUmJihsLl9tb2R1bGUucGxvdD09PXI/aS5wdXNoKHMpOmEucHVzaChzKSl9cmV0dXJuW2ksYV19LHIuZ2V0U3VicGxvdERhdGE9ZnVuY3Rpb24odCxlLHIpe2lmKCFuLnN1YnBsb3RzUmVnaXN0cnlbZV0pcmV0dXJuW107dmFyIGEsbyxzLGw9bi5zdWJwbG90c1JlZ2lzdHJ5W2VdLmF0dHIsYz1bXTtpZihcImdsMmRcIj09PWUpe3ZhciB1PXIubWF0Y2goaSk7bz1cInhcIit1WzFdLHM9XCJ5XCIrdVsyXX1mb3IodmFyIGg9MDtoPHQubGVuZ3RoO2grKylhPXRbaF0sXCJnbDJkXCI9PT1lJiZuLnRyYWNlSXMoYSxcImdsMmRcIik/YVtsWzBdXT09PW8mJmFbbFsxXV09PT1zJiZjLnB1c2goYSk6YVtsXT09PXImJmMucHVzaChhKTtyZXR1cm4gY319LHtcIi4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9jYXJ0ZXNpYW4vY29uc3RhbnRzXCI6NzU1fV0sNzg1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIm1vdXNlLWNoYW5nZVwiKSxpPXQoXCJtb3VzZS13aGVlbFwiKSxhPXQoXCJtb3VzZS1ldmVudC1vZmZzZXRcIiksbz10KFwiLi4vY2FydGVzaWFuL2NvbnN0YW50c1wiKSxzPXQoXCJoYXMtcGFzc2l2ZS1ldmVudHNcIik7ZnVuY3Rpb24gbCh0LGUpe3RoaXMuZWxlbWVudD10LHRoaXMucGxvdD1lLHRoaXMubW91c2VMaXN0ZW5lcj1udWxsLHRoaXMud2hlZWxMaXN0ZW5lcj1udWxsLHRoaXMubGFzdElucHV0VGltZT1EYXRlLm5vdygpLHRoaXMubGFzdFBvcz1bMCwwXSx0aGlzLmJveEVuYWJsZWQ9ITEsdGhpcy5ib3hJbml0ZWQ9ITEsdGhpcy5ib3hTdGFydD1bMCwwXSx0aGlzLmJveEVuZD1bMCwwXSx0aGlzLmRyYWdTdGFydD1bMCwwXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5tb3VzZUNvbnRhaW5lcixyPXQuZ2xwbG90LGM9bmV3IGwoZSxyKTtmdW5jdGlvbiB1KCl7dC54YXhpcy5hdXRvcmFuZ2U9ITEsdC55YXhpcy5hdXRvcmFuZ2U9ITF9ZnVuY3Rpb24gaChlLG4saSl7dmFyIGEscyxsPXQuY2FsY0RhdGFCb3goKSxoPXIudmlld0JveCxmPWMubGFzdFBvc1swXSxwPWMubGFzdFBvc1sxXSxkPW8uTUlORFJBRypyLnBpeGVsUmF0aW8sZz1vLk1JTlpPT00qci5waXhlbFJhdGlvO2Z1bmN0aW9uIHYoZSxyLG4pe3ZhciBpPU1hdGgubWluKHIsbiksYT1NYXRoLm1heChyLG4pO2khPT1hPyhsW2VdPWksbFtlKzJdPWEsYy5kYXRhQm94PWwsdC5zZXRSYW5nZXMobCkpOih0LnNlbGVjdEJveC5zZWxlY3RCb3g9WzAsMCwxLDFdLHQuZ2xwbG90LnNldERpcnR5KCkpfXN3aXRjaChuKj1yLnBpeGVsUmF0aW8saSo9ci5waXhlbFJhdGlvLGk9aFszXS1oWzFdLWksdC5mdWxsTGF5b3V0LmRyYWdtb2RlKXtjYXNlXCJ6b29tXCI6aWYoZSl7dmFyIG09bi8oaFsyXS1oWzBdKSoobFsyXS1sWzBdKStsWzBdLHk9aS8oaFszXS1oWzFdKSoobFszXS1sWzFdKStsWzFdO2MuYm94SW5pdGVkfHwoYy5ib3hTdGFydFswXT1tLGMuYm94U3RhcnRbMV09eSxjLmRyYWdTdGFydFswXT1uLGMuZHJhZ1N0YXJ0WzFdPWkpLGMuYm94RW5kWzBdPW0sYy5ib3hFbmRbMV09eSxjLmJveEluaXRlZD0hMCxjLmJveEVuYWJsZWR8fGMuYm94U3RhcnRbMF09PT1jLmJveEVuZFswXSYmYy5ib3hTdGFydFsxXT09PWMuYm94RW5kWzFdfHwoYy5ib3hFbmFibGVkPSEwKTt2YXIgeD1NYXRoLmFicyhjLmRyYWdTdGFydFswXS1uKTxnLGI9TWF0aC5hYnMoYy5kcmFnU3RhcnRbMV0taSk8ZztpZighZnVuY3Rpb24oKXtmb3IodmFyIGU9dC5ncmFwaERpdi5fZnVsbExheW91dC5fYXhpc0NvbnN0cmFpbnRHcm91cHMscj10LnhheGlzLl9pZCxuPXQueWF4aXMuX2lkLGk9MDtpPGUubGVuZ3RoO2krKylpZigtMSE9PWVbaV1bcl0pe2lmKC0xIT09ZVtpXVtuXSlyZXR1cm4hMDticmVha31yZXR1cm4hMX0oKXx8eCYmYil4JiYoYy5ib3hFbmRbMF09Yy5ib3hTdGFydFswXSksYiYmKGMuYm94RW5kWzFdPWMuYm94U3RhcnRbMV0pO2Vsc2V7YT1jLmJveEVuZFswXS1jLmJveFN0YXJ0WzBdLHM9Yy5ib3hFbmRbMV0tYy5ib3hTdGFydFsxXTt2YXIgXz0obFszXS1sWzFdKS8obFsyXS1sWzBdKTtNYXRoLmFicyhhKl8pPk1hdGguYWJzKHMpPyhjLmJveEVuZFsxXT1jLmJveFN0YXJ0WzFdK01hdGguYWJzKGEpKl8qKHM+PTA/MTotMSksYy5ib3hFbmRbMV08bFsxXT8oYy5ib3hFbmRbMV09bFsxXSxjLmJveEVuZFswXT1jLmJveFN0YXJ0WzBdKyhsWzFdLWMuYm94U3RhcnRbMV0pL01hdGguYWJzKF8pKTpjLmJveEVuZFsxXT5sWzNdJiYoYy5ib3hFbmRbMV09bFszXSxjLmJveEVuZFswXT1jLmJveFN0YXJ0WzBdKyhsWzNdLWMuYm94U3RhcnRbMV0pL01hdGguYWJzKF8pKSk6KGMuYm94RW5kWzBdPWMuYm94U3RhcnRbMF0rTWF0aC5hYnMocykvXyooYT49MD8xOi0xKSxjLmJveEVuZFswXTxsWzBdPyhjLmJveEVuZFswXT1sWzBdLGMuYm94RW5kWzFdPWMuYm94U3RhcnRbMV0rKGxbMF0tYy5ib3hTdGFydFswXSkqTWF0aC5hYnMoXykpOmMuYm94RW5kWzBdPmxbMl0mJihjLmJveEVuZFswXT1sWzJdLGMuYm94RW5kWzFdPWMuYm94U3RhcnRbMV0rKGxbMl0tYy5ib3hTdGFydFswXSkqTWF0aC5hYnMoXykpKX19ZWxzZSBjLmJveEVuYWJsZWQ/KGE9Yy5ib3hTdGFydFswXSE9PWMuYm94RW5kWzBdLHM9Yy5ib3hTdGFydFsxXSE9PWMuYm94RW5kWzFdLGF8fHM/KGEmJih2KDAsYy5ib3hTdGFydFswXSxjLmJveEVuZFswXSksdC54YXhpcy5hdXRvcmFuZ2U9ITEpLHMmJih2KDEsYy5ib3hTdGFydFsxXSxjLmJveEVuZFsxXSksdC55YXhpcy5hdXRvcmFuZ2U9ITEpLHQucmVsYXlvdXRDYWxsYmFjaygpKTp0LmdscGxvdC5zZXREaXJ0eSgpLGMuYm94RW5hYmxlZD0hMSxjLmJveEluaXRlZD0hMSk6Yy5ib3hJbml0ZWQmJihjLmJveEluaXRlZD0hMSk7YnJlYWs7Y2FzZVwicGFuXCI6Yy5ib3hFbmFibGVkPSExLGMuYm94SW5pdGVkPSExLGU/KGMucGFubmluZ3x8KGMuZHJhZ1N0YXJ0WzBdPW4sYy5kcmFnU3RhcnRbMV09aSksTWF0aC5hYnMoYy5kcmFnU3RhcnRbMF0tbik8ZCYmKG49Yy5kcmFnU3RhcnRbMF0pLE1hdGguYWJzKGMuZHJhZ1N0YXJ0WzFdLWkpPGQmJihpPWMuZHJhZ1N0YXJ0WzFdKSxhPShmLW4pKihsWzJdLWxbMF0pLyhyLnZpZXdCb3hbMl0tci52aWV3Qm94WzBdKSxzPShwLWkpKihsWzNdLWxbMV0pLyhyLnZpZXdCb3hbM10tci52aWV3Qm94WzFdKSxsWzBdKz1hLGxbMl0rPWEsbFsxXSs9cyxsWzNdKz1zLHQuc2V0UmFuZ2VzKGwpLGMucGFubmluZz0hMCxjLmxhc3RJbnB1dFRpbWU9RGF0ZS5ub3coKSx1KCksdC5jYW1lcmFDaGFuZ2VkKCksdC5oYW5kbGVBbm5vdGF0aW9ucygpKTpjLnBhbm5pbmcmJihjLnBhbm5pbmc9ITEsdC5yZWxheW91dENhbGxiYWNrKCkpfWMubGFzdFBvc1swXT1uLGMubGFzdFBvc1sxXT1pfXJldHVybiBjLm1vdXNlTGlzdGVuZXI9bihlLGgpLGUuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIixmdW5jdGlvbih0KXt2YXIgcj1hKHQuY2hhbmdlZFRvdWNoZXNbMF0sZSk7aCgwLHJbMF0sclsxXSksaCgxLHJbMF0sclsxXSksdC5wcmV2ZW50RGVmYXVsdCgpfSwhIXMmJntwYXNzaXZlOiExfSksZS5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpO3ZhciByPWEodC5jaGFuZ2VkVG91Y2hlc1swXSxlKTtoKDEsclswXSxyWzFdKSx0LnByZXZlbnREZWZhdWx0KCl9LCEhcyYme3Bhc3NpdmU6ITF9KSxlLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLGZ1bmN0aW9uKHQpe2goMCxjLmxhc3RQb3NbMF0sYy5sYXN0UG9zWzFdKSx0LnByZXZlbnREZWZhdWx0KCl9LCEhcyYme3Bhc3NpdmU6ITF9KSxjLndoZWVsTGlzdGVuZXI9aShlLGZ1bmN0aW9uKGUsbil7aWYoIXQuc2Nyb2xsWm9vbSlyZXR1cm4hMTt2YXIgaT10LmNhbGNEYXRhQm94KCksYT1yLnZpZXdCb3gsbz1jLmxhc3RQb3NbMF0scz1jLmxhc3RQb3NbMV0sbD1NYXRoLmV4cCg1Km4vKGFbM10tYVsxXSkpLGg9by8oYVsyXS1hWzBdKSooaVsyXS1pWzBdKStpWzBdLGY9cy8oYVszXS1hWzFdKSooaVszXS1pWzFdKStpWzFdO3JldHVybiBpWzBdPShpWzBdLWgpKmwraCxpWzJdPShpWzJdLWgpKmwraCxpWzFdPShpWzFdLWYpKmwrZixpWzNdPShpWzNdLWYpKmwrZix0LnNldFJhbmdlcyhpKSxjLmxhc3RJbnB1dFRpbWU9RGF0ZS5ub3coKSx1KCksdC5jYW1lcmFDaGFuZ2VkKCksdC5oYW5kbGVBbm5vdGF0aW9ucygpLHQucmVsYXlvdXRDYWxsYmFjaygpLCEwfSwhMCksY319LHtcIi4uL2NhcnRlc2lhbi9jb25zdGFudHNcIjo3NTUsXCJoYXMtcGFzc2l2ZS1ldmVudHNcIjo0MDQsXCJtb3VzZS1jaGFuZ2VcIjo0MjgsXCJtb3VzZS1ldmVudC1vZmZzZXRcIjo0MjksXCJtb3VzZS13aGVlbFwiOjQzMX1dLDc4NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9jYXJ0ZXNpYW4vYXhlc1wiKSxpPXQoXCIuLi8uLi9saWIvc3RyMnJnYmFycmF5XCIpO2Z1bmN0aW9uIGEodCl7dGhpcy5zY2VuZT10LHRoaXMuZ2w9dC5nbCx0aGlzLnBpeGVsUmF0aW89dC5waXhlbFJhdGlvLHRoaXMuc2NyZWVuQm94PVswLDAsMSwxXSx0aGlzLnZpZXdCb3g9WzAsMCwxLDFdLHRoaXMuZGF0YUJveD1bLTEsLTEsMSwxXSx0aGlzLmJvcmRlckxpbmVFbmFibGU9WyExLCExLCExLCExXSx0aGlzLmJvcmRlckxpbmVXaWR0aD1bMSwxLDEsMV0sdGhpcy5ib3JkZXJMaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aWNrcz1bW10sW11dLHRoaXMudGlja0VuYWJsZT1bITAsITAsITEsITFdLHRoaXMudGlja1BhZD1bMTUsMTUsMTUsMTVdLHRoaXMudGlja0FuZ2xlPVswLDAsMCwwXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tNYXJrTGVuZ3RoPVswLDAsMCwwXSx0aGlzLnRpY2tNYXJrV2lkdGg9WzAsMCwwLDBdLHRoaXMudGlja01hcmtDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVscz1bXCJ4XCIsXCJ5XCJdLHRoaXMubGFiZWxFbmFibGU9WyEwLCEwLCExLCExXSx0aGlzLmxhYmVsQW5nbGU9WzAsTWF0aC5QSS8yLDAsMypNYXRoLlBJLzJdLHRoaXMubGFiZWxQYWQ9WzE1LDE1LDE1LDE1XSx0aGlzLmxhYmVsU2l6ZT1bMTIsMTJdLHRoaXMubGFiZWxGb250PVtcInNhbnMtc2VyaWZcIixcInNhbnMtc2VyaWZcIl0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGl0bGU9XCJcIix0aGlzLnRpdGxlRW5hYmxlPSEwLHRoaXMudGl0bGVDZW50ZXI9WzAsMCwwLDBdLHRoaXMudGl0bGVBbmdsZT0wLHRoaXMudGl0bGVDb2xvcj1bMCwwLDAsMV0sdGhpcy50aXRsZUZvbnQ9XCJzYW5zLXNlcmlmXCIsdGhpcy50aXRsZVNpemU9MTgsdGhpcy5ncmlkTGluZUVuYWJsZT1bITAsITBdLHRoaXMuZ3JpZExpbmVDb2xvcj1bWzAsMCwwLC41XSxbMCwwLDAsLjVdXSx0aGlzLmdyaWRMaW5lV2lkdGg9WzEsMV0sdGhpcy56ZXJvTGluZUVuYWJsZT1bITAsITBdLHRoaXMuemVyb0xpbmVXaWR0aD1bMSwxXSx0aGlzLnplcm9MaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDBdLHRoaXMuYmFja2dyb3VuZENvbG9yPVswLDAsMCwwXSx0aGlzLnN0YXRpYz10aGlzLnNjZW5lLnN0YXRpY1Bsb3R9dmFyIG89YS5wcm90b3R5cGUscz1bXCJ4YXhpc1wiLFwieWF4aXNcIl07by5tZXJnZT1mdW5jdGlvbih0KXt2YXIgZSxyLG4sYSxvLGwsYyx1LGgsZixwO2Zvcih0aGlzLnRpdGxlRW5hYmxlPSExLHRoaXMuYmFja2dyb3VuZENvbG9yPWkodC5wbG90X2JnY29sb3IpLGY9MDtmPDI7KytmKXt2YXIgZD0oZT1zW2ZdKS5jaGFyQXQoMCk7Zm9yKG49KHI9dFt0aGlzLnNjZW5lW2VdLl9uYW1lXSkudGl0bGUudGV4dD09PXRoaXMuc2NlbmUuZnVsbExheW91dC5fZGZsdFRpdGxlW2RdP1wiXCI6ci50aXRsZS50ZXh0LHA9MDtwPD0yO3ArPTIpdGhpcy5sYWJlbEVuYWJsZVtmK3BdPSExLHRoaXMubGFiZWxzW2YrcF09bix0aGlzLmxhYmVsQ29sb3JbZitwXT1pKHIudGl0bGUuZm9udC5jb2xvciksdGhpcy5sYWJlbEZvbnRbZitwXT1yLnRpdGxlLmZvbnQuZmFtaWx5LHRoaXMubGFiZWxTaXplW2YrcF09ci50aXRsZS5mb250LnNpemUsdGhpcy5sYWJlbFBhZFtmK3BdPXRoaXMuZ2V0TGFiZWxQYWQoZSxyKSx0aGlzLnRpY2tFbmFibGVbZitwXT0hMSx0aGlzLnRpY2tDb2xvcltmK3BdPWkoKHIudGlja2ZvbnR8fHt9KS5jb2xvciksdGhpcy50aWNrQW5nbGVbZitwXT1cImF1dG9cIj09PXIudGlja2FuZ2xlPzA6TWF0aC5QSSotci50aWNrYW5nbGUvMTgwLHRoaXMudGlja1BhZFtmK3BdPXRoaXMuZ2V0VGlja1BhZChyKSx0aGlzLnRpY2tNYXJrTGVuZ3RoW2YrcF09MCx0aGlzLnRpY2tNYXJrV2lkdGhbZitwXT1yLnRpY2t3aWR0aHx8MCx0aGlzLnRpY2tNYXJrQ29sb3JbZitwXT1pKHIudGlja2NvbG9yKSx0aGlzLmJvcmRlckxpbmVFbmFibGVbZitwXT0hMSx0aGlzLmJvcmRlckxpbmVDb2xvcltmK3BdPWkoci5saW5lY29sb3IpLHRoaXMuYm9yZGVyTGluZVdpZHRoW2YrcF09ci5saW5ld2lkdGh8fDA7Yz10aGlzLmhhc1NoYXJlZEF4aXMociksbz10aGlzLmhhc0F4aXNJbkRmbHRQb3MoZSxyKSYmIWMsbD10aGlzLmhhc0F4aXNJbkFsdHJQb3MoZSxyKSYmIWMsYT1yLm1pcnJvcnx8ITEsdT1jPy0xIT09U3RyaW5nKGEpLmluZGV4T2YoXCJhbGxcIik6ISFhLGg9Yz9cImFsbHRpY2tzXCI9PT1hOi0xIT09U3RyaW5nKGEpLmluZGV4T2YoXCJ0aWNrc1wiKSxvP3RoaXMubGFiZWxFbmFibGVbZl09ITA6bCYmKHRoaXMubGFiZWxFbmFibGVbZisyXT0hMCksbz90aGlzLnRpY2tFbmFibGVbZl09ci5zaG93dGlja2xhYmVsczpsJiYodGhpcy50aWNrRW5hYmxlW2YrMl09ci5zaG93dGlja2xhYmVscyksKG98fHUpJiYodGhpcy5ib3JkZXJMaW5lRW5hYmxlW2ZdPXIuc2hvd2xpbmUpLChsfHx1KSYmKHRoaXMuYm9yZGVyTGluZUVuYWJsZVtmKzJdPXIuc2hvd2xpbmUpLChvfHxoKSYmKHRoaXMudGlja01hcmtMZW5ndGhbZl09dGhpcy5nZXRUaWNrTWFya0xlbmd0aChyKSksKGx8fGgpJiYodGhpcy50aWNrTWFya0xlbmd0aFtmKzJdPXRoaXMuZ2V0VGlja01hcmtMZW5ndGgocikpLHRoaXMuZ3JpZExpbmVFbmFibGVbZl09ci5zaG93Z3JpZCx0aGlzLmdyaWRMaW5lQ29sb3JbZl09aShyLmdyaWRjb2xvciksdGhpcy5ncmlkTGluZVdpZHRoW2ZdPXIuZ3JpZHdpZHRoLHRoaXMuemVyb0xpbmVFbmFibGVbZl09ci56ZXJvbGluZSx0aGlzLnplcm9MaW5lQ29sb3JbZl09aShyLnplcm9saW5lY29sb3IpLHRoaXMuemVyb0xpbmVXaWR0aFtmXT1yLnplcm9saW5ld2lkdGh9fSxvLmhhc1NoYXJlZEF4aXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zY2VuZSxyPWUuZnVsbExheW91dC5fc3VicGxvdHMuZ2wyZDtyZXR1cm4gMCE9PW4uZmluZFN1YnBsb3RzV2l0aEF4aXMocix0KS5pbmRleE9mKGUuaWQpfSxvLmhhc0F4aXNJbkRmbHRQb3M9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnNpZGU7cmV0dXJuXCJ4YXhpc1wiPT09dD9cImJvdHRvbVwiPT09cjpcInlheGlzXCI9PT10P1wibGVmdFwiPT09cjp2b2lkIDB9LG8uaGFzQXhpc0luQWx0clBvcz1mdW5jdGlvbih0LGUpe3ZhciByPWUuc2lkZTtyZXR1cm5cInhheGlzXCI9PT10P1widG9wXCI9PT1yOlwieWF4aXNcIj09PXQ/XCJyaWdodFwiPT09cjp2b2lkIDB9LG8uZ2V0TGFiZWxQYWQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnRpdGxlLmZvbnQuc2l6ZSxuPWUuc2hvd3RpY2tsYWJlbHM7cmV0dXJuXCJ4YXhpc1wiPT09dD9cInRvcFwiPT09ZS5zaWRlP3IqKDEuNSsobj8xOjApKS0xMDpyKigxLjUrKG4/LjU6MCkpLTEwOlwieWF4aXNcIj09PXQ/XCJyaWdodFwiPT09ZS5zaWRlPzEwK3IqKDEuNSsobj8xOi41KSk6MTArciooMS41KyhuPy41OjApKTp2b2lkIDB9LG8uZ2V0VGlja1BhZD1mdW5jdGlvbih0KXtyZXR1cm5cIm91dHNpZGVcIj09PXQudGlja3M/MTArdC50aWNrbGVuOjE1fSxvLmdldFRpY2tNYXJrTGVuZ3RoPWZ1bmN0aW9uKHQpe2lmKCF0LnRpY2tzKXJldHVybiAwO3ZhciBlPXQudGlja2xlbjtyZXR1cm5cImluc2lkZVwiPT09dC50aWNrcz8tZTplfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhKHQpfX0se1wiLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiOjcyNCxcIi4uL2NhcnRlc2lhbi9heGVzXCI6NzQ5fV0sNzg3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGwsaT10KFwiLi9zY2VuZTJkXCIpLGE9dChcIi4uL2xheW91dF9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzXCIpLHM9dChcIi4uL2NhcnRlc2lhbi9jb25zdGFudHNcIiksbD10KFwiLi4vY2FydGVzaWFuXCIpLGM9dChcIi4uLy4uL2NvbXBvbmVudHMvZngvbGF5b3V0X2F0dHJpYnV0ZXNcIiksdT10KFwiLi4vZ2V0X2RhdGFcIikuZ2V0U3VicGxvdERhdGE7ci5uYW1lPVwiZ2wyZFwiLHIuYXR0cj1bXCJ4YXhpc1wiLFwieWF4aXNcIl0sci5pZFJvb3Q9W1wieFwiLFwieVwiXSxyLmlkUmVnZXg9cy5pZFJlZ2V4LHIuYXR0clJlZ2V4PXMuYXR0clJlZ2V4LHIuYXR0cmlidXRlcz10KFwiLi4vY2FydGVzaWFuL2F0dHJpYnV0ZXNcIiksci5zdXBwbHlMYXlvdXREZWZhdWx0cz1mdW5jdGlvbih0LGUscil7ZS5faGFzKFwiY2FydGVzaWFuXCIpfHxsLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyKX0sci5sYXlvdXRBdHRyT3ZlcnJpZGVzPW4obC5sYXlvdXRBdHRyaWJ1dGVzLFwicGxvdFwiLFwiZnJvbS1yb290XCIpLHIuYmFzZUxheW91dEF0dHJPdmVycmlkZXM9bih7cGxvdF9iZ2NvbG9yOmEucGxvdF9iZ2NvbG9yLGhvdmVybGFiZWw6Yy5ob3ZlcmxhYmVsfSxcInBsb3RcIixcIm5lc3RlZFwiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj10Ll9mdWxsRGF0YSxuPWUuX3N1YnBsb3RzLmdsMmQsYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1uW2FdLHM9ZS5fcGxvdHNbb10sbD11KHIsXCJnbDJkXCIsbyksYz1zLl9zY2VuZTJkO3ZvaWQgMD09PWMmJihjPW5ldyBpKHtpZDpvLGdyYXBoRGl2OnQsY29udGFpbmVyOnQucXVlcnlTZWxlY3RvcihcIi5nbC1jb250YWluZXJcIiksc3RhdGljUGxvdDp0Ll9jb250ZXh0LnN0YXRpY1Bsb3QscGxvdEdsUGl4ZWxSYXRpbzp0Ll9jb250ZXh0LnBsb3RHbFBpeGVsUmF0aW99LGUpLHMuX3NjZW5lMmQ9YyksYy5wbG90KGwsdC5jYWxjZGF0YSxlLHQubGF5b3V0KX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLmdsMmR8fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXSxzPW4uX3Bsb3RzW29dO2lmKHMuX3NjZW5lMmQpMD09PXUodCxcImdsMmRcIixvKS5sZW5ndGgmJihzLl9zY2VuZTJkLmRlc3Ryb3koKSxkZWxldGUgbi5fcGxvdHNbb10pfWwuY2xlYW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxyLmRyYXdGcmFtZXdvcms9ZnVuY3Rpb24odCl7dC5fY29udGV4dC5zdGF0aWNQbG90fHxsLmRyYXdGcmFtZXdvcmsodCl9LHIudG9TVkc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDJkLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9ZS5fcGxvdHNbcltuXV0uX3NjZW5lMmQsYT1pLnRvSW1hZ2UoXCJwbmdcIik7ZS5fZ2xpbWFnZXMuYXBwZW5kKFwic3ZnOmltYWdlXCIpLmF0dHIoe3htbG5zOm8uc3ZnLFwieGxpbms6aHJlZlwiOmEseDowLHk6MCx3aWR0aDpcIjEwMCVcIixoZWlnaHQ6XCIxMDAlXCIscHJlc2VydmVBc3BlY3RSYXRpbzpcIm5vbmVcIn0pLGkuZGVzdHJveSgpfX0sci51cGRhdGVGeD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLmdsMmQsbj0wO248ci5sZW5ndGg7bisrKXtlLl9wbG90c1tyW25dXS5fc2NlbmUyZC51cGRhdGVGeChlLmRyYWdtb2RlKX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzXCI6NjE4LFwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIjo2NzksXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi4vY2FydGVzaWFuXCI6NzYwLFwiLi4vY2FydGVzaWFuL2F0dHJpYnV0ZXNcIjo3NDcsXCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzXCI6NzU1LFwiLi4vZ2V0X2RhdGFcIjo3ODQsXCIuLi9sYXlvdXRfYXR0cmlidXRlc1wiOjgwMSxcIi4vc2NlbmUyZFwiOjc4OH1dLDc4ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuLGksYT10KFwiLi4vLi4vcmVnaXN0cnlcIiksbz10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIikscz10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxsPXQoXCJnbC1wbG90MmRcIiksYz10KFwiZ2wtc3Bpa2VzMmRcIiksdT10KFwiZ2wtc2VsZWN0LWJveFwiKSxoPXQoXCJ3ZWJnbC1jb250ZXh0XCIpLGY9dChcIi4vY29udmVydFwiKSxwPXQoXCIuL2NhbWVyYVwiKSxkPXQoXCIuLi8uLi9saWIvc2hvd19ub193ZWJnbF9tc2dcIiksZz10KFwiLi4vY2FydGVzaWFuL2NvbnN0cmFpbnRzXCIpLHY9Zy5lbmZvcmNlLG09Zy5jbGVhbix5PXQoXCIuLi9jYXJ0ZXNpYW4vYXV0b3JhbmdlXCIpLmRvQXV0b1JhbmdlLHg9W1wieGF4aXNcIixcInlheGlzXCJdLGI9dChcIi4uL2NhcnRlc2lhbi9jb25zdGFudHNcIikuU1VCUExPVF9QQVRURVJOO2Z1bmN0aW9uIF8odCxlKXt0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLmdyYXBoRGl2PXQuZ3JhcGhEaXYsdGhpcy5waXhlbFJhdGlvPXQucGxvdEdsUGl4ZWxSYXRpb3x8d2luZG93LmRldmljZVBpeGVsUmF0aW8sdGhpcy5pZD10LmlkLHRoaXMuc3RhdGljUGxvdD0hIXQuc3RhdGljUGxvdCx0aGlzLnNjcm9sbFpvb209dGhpcy5ncmFwaERpdi5fY29udGV4dC5fc2Nyb2xsWm9vbS5jYXJ0ZXNpYW4sdGhpcy5mdWxsRGF0YT1udWxsLHRoaXMudXBkYXRlUmVmcyhlKSx0aGlzLm1ha2VGcmFtZXdvcmsoKSx0aGlzLnN0b3BwZWR8fCh0aGlzLmdscGxvdE9wdGlvbnM9Zih0aGlzKSx0aGlzLmdscGxvdE9wdGlvbnMubWVyZ2UoZSksdGhpcy5nbHBsb3Q9bCh0aGlzLmdscGxvdE9wdGlvbnMpLHRoaXMuY2FtZXJhPXAodGhpcyksdGhpcy50cmFjZXM9e30sdGhpcy5zcGlrZXM9Yyh0aGlzLmdscGxvdCksdGhpcy5zZWxlY3RCb3g9dSh0aGlzLmdscGxvdCx7aW5uZXJGaWxsOiExLG91dGVyRmlsbDohMH0pLHRoaXMubGFzdEJ1dHRvblN0YXRlPTAsdGhpcy5waWNrUmVzdWx0PW51bGwsdGhpcy5pc01vdXNlT3Zlcj0hMCx0aGlzLnN0b3BwZWQ9ITEsdGhpcy5yZWRyYXc9dGhpcy5kcmF3LmJpbmQodGhpcyksdGhpcy5yZWRyYXcoKSl9ZS5leHBvcnRzPV87dmFyIHc9Xy5wcm90b3R5cGU7dy5tYWtlRnJhbWV3b3JrPWZ1bmN0aW9uKCl7aWYodGhpcy5zdGF0aWNQbG90KXtpZighKGl8fChuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksaT1oKHtjYW52YXM6bixwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITEscHJlbXVsdGlwbGllZEFscGhhOiEwLGFudGlhbGlhczohMH0pKSkpdGhyb3cgbmV3IEVycm9yKFwiRXJyb3IgY3JlYXRpbmcgc3RhdGljIGNhbnZhcy9jb250ZXh0IGZvciBpbWFnZSBzZXJ2ZXJcIik7dGhpcy5jYW52YXM9bix0aGlzLmdsPWl9ZWxzZXt2YXIgdD10aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLmdsLWNhbnZhcy1mb2N1c1wiKSxlPWgoe2NhbnZhczp0LHByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMCxwcmVtdWx0aXBsaWVkQWxwaGE6ITB9KTtpZighZSlyZXR1cm4gZCh0aGlzKSx2b2lkKHRoaXMuc3RvcHBlZD0hMCk7dGhpcy5jYW52YXM9dCx0aGlzLmdsPWV9dmFyIHI9dGhpcy5jYW52YXM7ci5zdHlsZS53aWR0aD1cIjEwMCVcIixyLnN0eWxlLmhlaWdodD1cIjEwMCVcIixyLnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixyLnN0eWxlLnRvcD1cIjBweFwiLHIuc3R5bGUubGVmdD1cIjBweFwiLHIuc3R5bGVbXCJwb2ludGVyLWV2ZW50c1wiXT1cIm5vbmVcIix0aGlzLnVwZGF0ZVNpemUociksci5jbGFzc05hbWUrPVwiIHVzZXItc2VsZWN0LW5vbmVcIjt2YXIgYT10aGlzLnN2Z0NvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwic3ZnXCIpO2Euc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwiLGEuc3R5bGUudG9wPWEuc3R5bGUubGVmdD1cIjBweFwiLGEuc3R5bGUud2lkdGg9YS5zdHlsZS5oZWlnaHQ9XCIxMDAlXCIsYS5zdHlsZVtcInotaW5kZXhcIl09MjAsYS5zdHlsZVtcInBvaW50ZXItZXZlbnRzXCJdPVwibm9uZVwiO3ZhciBvPXRoaXMubW91c2VDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtvLnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixvLnN0eWxlW1wicG9pbnRlci1ldmVudHNcIl09XCJhdXRvXCIsdGhpcy5waWNrQ2FudmFzPXRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuZ2wtY2FudmFzLXBpY2tcIik7dmFyIHM9dGhpcy5jb250YWluZXI7cy5hcHBlbmRDaGlsZChhKSxzLmFwcGVuZENoaWxkKG8pO3ZhciBsPXRoaXM7by5hZGRFdmVudExpc3RlbmVyKFwibW91c2VvdXRcIixmdW5jdGlvbigpe2wuaXNNb3VzZU92ZXI9ITEsbC51bmhvdmVyKCl9KSxvLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIixmdW5jdGlvbigpe2wuaXNNb3VzZU92ZXI9ITB9KX0sdy50b0ltYWdlPWZ1bmN0aW9uKHQpe3R8fCh0PVwicG5nXCIpLHRoaXMuc3RvcHBlZD0hMCx0aGlzLnN0YXRpY1Bsb3QmJnRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKG4pLHRoaXMudXBkYXRlU2l6ZSh0aGlzLmNhbnZhcyk7dmFyIGU9dGhpcy5nbHBsb3QuZ2wscj1lLmRyYXdpbmdCdWZmZXJXaWR0aCxpPWUuZHJhd2luZ0J1ZmZlckhlaWdodDtlLmNsZWFyQ29sb3IoMSwxLDEsMCksZS5jbGVhcihlLkNPTE9SX0JVRkZFUl9CSVR8ZS5ERVBUSF9CVUZGRVJfQklUKSx0aGlzLmdscGxvdC5zZXREaXJ0eSgpLHRoaXMuZ2xwbG90LmRyYXcoKSxlLmJpbmRGcmFtZWJ1ZmZlcihlLkZSQU1FQlVGRkVSLG51bGwpO3ZhciBhPW5ldyBVaW50OEFycmF5KHIqaSo0KTtlLnJlYWRQaXhlbHMoMCwwLHIsaSxlLlJHQkEsZS5VTlNJR05FRF9CWVRFLGEpO2Zvcih2YXIgbz0wLHM9aS0xO288czsrK28sLS1zKWZvcih2YXIgbD0wO2w8cjsrK2wpZm9yKHZhciBjPTA7Yzw0OysrYyl7dmFyIHU9YVs0KihyKm8rbCkrY107YVs0KihyKm8rbCkrY109YVs0KihyKnMrbCkrY10sYVs0KihyKnMrbCkrY109dX12YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO2gud2lkdGg9cixoLmhlaWdodD1pO3ZhciBmLHA9aC5nZXRDb250ZXh0KFwiMmRcIiksZD1wLmNyZWF0ZUltYWdlRGF0YShyLGkpO3N3aXRjaChkLmRhdGEuc2V0KGEpLHAucHV0SW1hZ2VEYXRhKGQsMCwwKSx0KXtjYXNlXCJqcGVnXCI6Zj1oLnRvRGF0YVVSTChcImltYWdlL2pwZWdcIik7YnJlYWs7Y2FzZVwid2VicFwiOmY9aC50b0RhdGFVUkwoXCJpbWFnZS93ZWJwXCIpO2JyZWFrO2RlZmF1bHQ6Zj1oLnRvRGF0YVVSTChcImltYWdlL3BuZ1wiKX1yZXR1cm4gdGhpcy5zdGF0aWNQbG90JiZ0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZChuKSxmfSx3LnVwZGF0ZVNpemU9ZnVuY3Rpb24odCl7dHx8KHQ9dGhpcy5jYW52YXMpO3ZhciBlPXRoaXMucGl4ZWxSYXRpbyxyPXRoaXMuZnVsbExheW91dCxuPXIud2lkdGgsaT1yLmhlaWdodCxhPTB8TWF0aC5jZWlsKGUqbiksbz0wfE1hdGguY2VpbChlKmkpO3JldHVybiB0LndpZHRoPT09YSYmdC5oZWlnaHQ9PT1vfHwodC53aWR0aD1hLHQuaGVpZ2h0PW8pLHR9LHcuY29tcHV0ZVRpY2tNYXJrcz1mdW5jdGlvbigpe3RoaXMueGF4aXMuc2V0U2NhbGUoKSx0aGlzLnlheGlzLnNldFNjYWxlKCk7Zm9yKHZhciB0PVtvLmNhbGNUaWNrcyh0aGlzLnhheGlzKSxvLmNhbGNUaWNrcyh0aGlzLnlheGlzKV0sZT0wO2U8MjsrK2UpZm9yKHZhciByPTA7cjx0W2VdLmxlbmd0aDsrK3IpdFtlXVtyXS50ZXh0PXRbZV1bcl0udGV4dCtcIlwiO3JldHVybiB0fSx3LnVwZGF0ZVJlZnM9ZnVuY3Rpb24odCl7dGhpcy5mdWxsTGF5b3V0PXQ7dmFyIGU9dGhpcy5pZC5tYXRjaChiKSxyPVwieGF4aXNcIitlWzFdLG49XCJ5YXhpc1wiK2VbMl07dGhpcy54YXhpcz10aGlzLmZ1bGxMYXlvdXRbcl0sdGhpcy55YXhpcz10aGlzLmZ1bGxMYXlvdXRbbl19LHcucmVsYXlvdXRDYWxsYmFjaz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ3JhcGhEaXYsZT10aGlzLnhheGlzLHI9dGhpcy55YXhpcyxuPXQubGF5b3V0LGk9e30sbz1pW2UuX25hbWUrXCIucmFuZ2VcIl09ZS5yYW5nZS5zbGljZSgpLHM9aVtyLl9uYW1lK1wiLnJhbmdlXCJdPXIucmFuZ2Uuc2xpY2UoKTtpW2UuX25hbWUrXCIuYXV0b3JhbmdlXCJdPWUuYXV0b3JhbmdlLGlbci5fbmFtZStcIi5hdXRvcmFuZ2VcIl09ci5hdXRvcmFuZ2UsYS5jYWxsKFwiX3N0b3JlRGlyZWN0R1VJRWRpdFwiLHQubGF5b3V0LHQuX2Z1bGxMYXlvdXQuX3ByZUdVSSxpKTt2YXIgbD1uW2UuX25hbWVdO2wucmFuZ2U9byxsLmF1dG9yYW5nZT1lLmF1dG9yYW5nZTt2YXIgYz1uW3IuX25hbWVdO2MucmFuZ2U9cyxjLmF1dG9yYW5nZT1yLmF1dG9yYW5nZSxpLmxhc3RJbnB1dFRpbWU9dGhpcy5jYW1lcmEubGFzdElucHV0VGltZSx0LmVtaXQoXCJwbG90bHlfcmVsYXlvdXRcIixpKX0sdy5jYW1lcmFDaGFuZ2VkPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jYW1lcmE7dGhpcy5nbHBsb3Quc2V0RGF0YUJveCh0aGlzLmNhbGNEYXRhQm94KCkpO3ZhciBlPXRoaXMuY29tcHV0ZVRpY2tNYXJrcygpOyhmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8MjsrK3Ipe3ZhciBuPXRbcl0saT1lW3JdO2lmKG4ubGVuZ3RoIT09aS5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDsrK2EpaWYoblthXS54IT09aVthXS54KXJldHVybiEwfXJldHVybiExfSkoZSx0aGlzLmdscGxvdE9wdGlvbnMudGlja3MpJiYodGhpcy5nbHBsb3RPcHRpb25zLnRpY2tzPWUsdGhpcy5nbHBsb3RPcHRpb25zLmRhdGFCb3g9dC5kYXRhQm94LHRoaXMuZ2xwbG90LnVwZGF0ZSh0aGlzLmdscGxvdE9wdGlvbnMpLHRoaXMuaGFuZGxlQW5ub3RhdGlvbnMoKSl9LHcuaGFuZGxlQW5ub3RhdGlvbnM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5ncmFwaERpdixlPXRoaXMuZnVsbExheW91dC5hbm5vdGF0aW9ucyxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi54cmVmPT09dGhpcy54YXhpcy5faWQmJm4ueXJlZj09PXRoaXMueWF4aXMuX2lkJiZhLmdldENvbXBvbmVudE1ldGhvZChcImFubm90YXRpb25zXCIsXCJkcmF3T25lXCIpKHQscil9fSx3LmRlc3Ryb3k9ZnVuY3Rpb24oKXtpZih0aGlzLmdscGxvdCl7dmFyIHQ9dGhpcy50cmFjZXM7dCYmT2JqZWN0LmtleXModCkubWFwKGZ1bmN0aW9uKGUpe3RbZV0uZGlzcG9zZSgpLGRlbGV0ZSB0W2VdfSksdGhpcy5nbHBsb3QuZGlzcG9zZSgpLHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMuc3ZnQ29udGFpbmVyKSx0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLm1vdXNlQ29udGFpbmVyKSx0aGlzLmZ1bGxEYXRhPW51bGwsdGhpcy5nbHBsb3Q9bnVsbCx0aGlzLnN0b3BwZWQ9ITAsdGhpcy5jYW1lcmEubW91c2VMaXN0ZW5lci5lbmFibGVkPSExLHRoaXMubW91c2VDb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsdGhpcy5jYW1lcmEud2hlZWxMaXN0ZW5lciksdGhpcy5jYW1lcmE9bnVsbH19LHcucGxvdD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5nbHBsb3Q7dGhpcy51cGRhdGVSZWZzKHIpLHRoaXMueGF4aXMuY2xlYXJDYWxjKCksdGhpcy55YXhpcy5jbGVhckNhbGMoKSx0aGlzLnVwZGF0ZVRyYWNlcyh0LGUpLHRoaXMudXBkYXRlRngoci5kcmFnbW9kZSk7dmFyIGk9ci53aWR0aCxhPXIuaGVpZ2h0O3RoaXMudXBkYXRlU2l6ZSh0aGlzLmNhbnZhcyk7dmFyIG89dGhpcy5nbHBsb3RPcHRpb25zO28ubWVyZ2Uociksby5zY3JlZW5Cb3g9WzAsMCxpLGFdO3ZhciBzPXtfZnVsbExheW91dDp7X2F4aXNDb25zdHJhaW50R3JvdXBzOnRoaXMuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQuX2F4aXNDb25zdHJhaW50R3JvdXBzLHhheGlzOnRoaXMueGF4aXMseWF4aXM6dGhpcy55YXhpc319O20ocyx0aGlzLnhheGlzKSxtKHMsdGhpcy55YXhpcyk7dmFyIGwsYyx1PXIuX3NpemUsaD10aGlzLnhheGlzLmRvbWFpbixmPXRoaXMueWF4aXMuZG9tYWluO2ZvcihvLnZpZXdCb3g9W3UubCtoWzBdKnUudyx1LmIrZlswXSp1LmgsaS11LnItKDEtaFsxXSkqdS53LGEtdS50LSgxLWZbMV0pKnUuaF0sdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS53aWR0aD11LncqKGhbMV0taFswXSkrXCJweFwiLHRoaXMubW91c2VDb250YWluZXIuc3R5bGUuaGVpZ2h0PXUuaCooZlsxXS1mWzBdKStcInB4XCIsdGhpcy5tb3VzZUNvbnRhaW5lci5oZWlnaHQ9dS5oKihmWzFdLWZbMF0pLHRoaXMubW91c2VDb250YWluZXIuc3R5bGUubGVmdD11LmwraFswXSp1LncrXCJweFwiLHRoaXMubW91c2VDb250YWluZXIuc3R5bGUudG9wPXUudCsoMS1mWzFdKSp1LmgrXCJweFwiLGM9MDtjPDI7KytjKShsPXRoaXNbeFtjXV0pLl9sZW5ndGg9by52aWV3Qm94W2MrMl0tby52aWV3Qm94W2NdLHkodGhpcy5ncmFwaERpdixsKSxsLnNldFNjYWxlKCk7dihzKSxvLnRpY2tzPXRoaXMuY29tcHV0ZVRpY2tNYXJrcygpLG8uZGF0YUJveD10aGlzLmNhbGNEYXRhQm94KCksby5tZXJnZShyKSxuLnVwZGF0ZShvKSx0aGlzLmdscGxvdC5kcmF3KCl9LHcuY2FsY0RhdGFCb3g9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnhheGlzLGU9dGhpcy55YXhpcyxyPXQucmFuZ2Usbj1lLnJhbmdlLGk9dC5yMmwsYT1lLnIybDtyZXR1cm5baShyWzBdKSxhKG5bMF0pLGkoclsxXSksYShuWzFdKV19LHcuc2V0UmFuZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMueGF4aXMscj10aGlzLnlheGlzLG49ZS5sMnIsaT1yLmwycjtlLnJhbmdlPVtuKHRbMF0pLG4odFsyXSldLHIucmFuZ2U9W2kodFsxXSksaSh0WzNdKV19LHcudXBkYXRlVHJhY2VzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9T2JqZWN0LmtleXModGhpcy50cmFjZXMpO3RoaXMuZnVsbERhdGE9dDt0OmZvcihyPTA7cjxhLmxlbmd0aDtyKyspe3ZhciBvPWFbcl0scz10aGlzLnRyYWNlc1tvXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKWlmKChpPXRbbl0pLnVpZD09PW8mJmkudHlwZT09PXMudHlwZSljb250aW51ZSB0O3MuZGlzcG9zZSgpLGRlbGV0ZSB0aGlzLnRyYWNlc1tvXX1mb3Iocj0wO3I8dC5sZW5ndGg7cisrKXtpPXRbcl07dmFyIGw9ZVtyXSxjPXRoaXMudHJhY2VzW2kudWlkXTtjP2MudXBkYXRlKGksbCk6KGM9aS5fbW9kdWxlLnBsb3QodGhpcyxpLGwpLHRoaXMudHJhY2VzW2kudWlkXT1jKX10aGlzLmdscGxvdC5vYmplY3RzLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fdHJhY2UuaW5kZXgtZS5fdHJhY2UuaW5kZXh9KX0sdy51cGRhdGVGeD1mdW5jdGlvbih0KXtcImxhc3NvXCI9PT10fHxcInNlbGVjdFwiPT09dD8odGhpcy5waWNrQ2FudmFzLnN0eWxlW1wicG9pbnRlci1ldmVudHNcIl09XCJub25lXCIsdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZVtcInBvaW50ZXItZXZlbnRzXCJdPVwibm9uZVwiKToodGhpcy5waWNrQ2FudmFzLnN0eWxlW1wicG9pbnRlci1ldmVudHNcIl09XCJhdXRvXCIsdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZVtcInBvaW50ZXItZXZlbnRzXCJdPVwiYXV0b1wiKSx0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLmN1cnNvcj1cInBhblwiPT09dD9cIm1vdmVcIjpcInpvb21cIj09PXQ/XCJjcm9zc2hhaXJcIjpudWxsfSx3LmVtaXRQb2ludEFjdGlvbj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuPXQudHJhY2UudWlkLGk9dC5wb2ludEluZGV4LGE9MDthPHRoaXMuZnVsbERhdGEubGVuZ3RoO2ErKyl0aGlzLmZ1bGxEYXRhW2FdLnVpZD09PW4mJihyPXRoaXMuZnVsbERhdGFbYV0pO3ZhciBvPXt4OnQudHJhY2VDb29yZFswXSx5OnQudHJhY2VDb29yZFsxXSxjdXJ2ZU51bWJlcjpyLmluZGV4LHBvaW50TnVtYmVyOmksZGF0YTpyLl9pbnB1dCxmdWxsRGF0YTp0aGlzLmZ1bGxEYXRhLHhheGlzOnRoaXMueGF4aXMseWF4aXM6dGhpcy55YXhpc307cy5hcHBlbmRBcnJheVBvaW50VmFsdWUobyxyLGkpLHRoaXMuZ3JhcGhEaXYuZW1pdChlLHtwb2ludHM6W29dfSl9LHcuZHJhdz1mdW5jdGlvbigpe2lmKCF0aGlzLnN0b3BwZWQpe3JlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnJlZHJhdyk7dmFyIHQ9dGhpcy5nbHBsb3QsZT10aGlzLmNhbWVyYSxyPWUubW91c2VMaXN0ZW5lcixuPTE9PT10aGlzLmxhc3RCdXR0b25TdGF0ZSYmMD09PXIuYnV0dG9ucyxpPXRoaXMuZnVsbExheW91dDt0aGlzLmxhc3RCdXR0b25TdGF0ZT1yLmJ1dHRvbnMsdGhpcy5jYW1lcmFDaGFuZ2VkKCk7dmFyIGEsbz1yLngqdC5waXhlbFJhdGlvLGw9dGhpcy5jYW52YXMuaGVpZ2h0LXQucGl4ZWxSYXRpbypyLnk7aWYoZS5ib3hFbmFibGVkJiZcInpvb21cIj09PWkuZHJhZ21vZGUpe3RoaXMuc2VsZWN0Qm94LmVuYWJsZWQ9ITA7Zm9yKHZhciBjPXRoaXMuc2VsZWN0Qm94LnNlbGVjdEJveD1bTWF0aC5taW4oZS5ib3hTdGFydFswXSxlLmJveEVuZFswXSksTWF0aC5taW4oZS5ib3hTdGFydFsxXSxlLmJveEVuZFsxXSksTWF0aC5tYXgoZS5ib3hTdGFydFswXSxlLmJveEVuZFswXSksTWF0aC5tYXgoZS5ib3hTdGFydFsxXSxlLmJveEVuZFsxXSldLHU9MDt1PDI7dSsrKWUuYm94U3RhcnRbdV09PT1lLmJveEVuZFt1XSYmKGNbdV09dC5kYXRhQm94W3VdLGNbdSsyXT10LmRhdGFCb3hbdSsyXSk7dC5zZXREaXJ0eSgpfWVsc2UgaWYoIWUucGFubmluZyYmdGhpcy5pc01vdXNlT3Zlcil7dGhpcy5zZWxlY3RCb3guZW5hYmxlZD0hMTt2YXIgaD1pLl9zaXplLGY9dGhpcy54YXhpcy5kb21haW4scD10aGlzLnlheGlzLmRvbWFpbixkPShhPXQucGljayhvL3QucGl4ZWxSYXRpbytoLmwrZlswXSpoLncsbC90LnBpeGVsUmF0aW8tKGgudCsoMS1wWzFdKSpoLmgpKSkmJmEub2JqZWN0Ll90cmFjZS5oYW5kbGVQaWNrKGEpO2lmKGQmJm4mJnRoaXMuZW1pdFBvaW50QWN0aW9uKGQsXCJwbG90bHlfY2xpY2tcIiksYSYmXCJza2lwXCIhPT1hLm9iamVjdC5fdHJhY2UuaG92ZXJpbmZvJiZpLmhvdmVybW9kZSYmZCYmKCF0aGlzLmxhc3RQaWNrUmVzdWx0fHx0aGlzLmxhc3RQaWNrUmVzdWx0LnRyYWNlVWlkIT09ZC50cmFjZS51aWR8fHRoaXMubGFzdFBpY2tSZXN1bHQuZGF0YUNvb3JkWzBdIT09ZC5kYXRhQ29vcmRbMF18fHRoaXMubGFzdFBpY2tSZXN1bHQuZGF0YUNvb3JkWzFdIT09ZC5kYXRhQ29vcmRbMV0pKXt2YXIgZz1kO3RoaXMubGFzdFBpY2tSZXN1bHQ9e3RyYWNlVWlkOmQudHJhY2U/ZC50cmFjZS51aWQ6bnVsbCxkYXRhQ29vcmQ6ZC5kYXRhQ29vcmQuc2xpY2UoKX0sdGhpcy5zcGlrZXMudXBkYXRlKHtjZW50ZXI6YS5kYXRhQ29vcmR9KSxnLnNjcmVlbkNvb3JkPVsoKHQudmlld0JveFsyXS10LnZpZXdCb3hbMF0pKihhLmRhdGFDb29yZFswXS10LmRhdGFCb3hbMF0pLyh0LmRhdGFCb3hbMl0tdC5kYXRhQm94WzBdKSt0LnZpZXdCb3hbMF0pL3QucGl4ZWxSYXRpbywodGhpcy5jYW52YXMuaGVpZ2h0LSh0LnZpZXdCb3hbM10tdC52aWV3Qm94WzFdKSooYS5kYXRhQ29vcmRbMV0tdC5kYXRhQm94WzFdKS8odC5kYXRhQm94WzNdLXQuZGF0YUJveFsxXSktdC52aWV3Qm94WzFdKS90LnBpeGVsUmF0aW9dLHRoaXMuZW1pdFBvaW50QWN0aW9uKGQsXCJwbG90bHlfaG92ZXJcIik7dmFyIHY9dGhpcy5mdWxsRGF0YVtnLnRyYWNlLmluZGV4XXx8e30sbT1nLnBvaW50SW5kZXgseT1zLmNhc3RIb3ZlcmluZm8odixpLG0pO2lmKHkmJlwiYWxsXCIhPT15KXt2YXIgeD15LnNwbGl0KFwiK1wiKTstMT09PXguaW5kZXhPZihcInhcIikmJihnLnRyYWNlQ29vcmRbMF09dm9pZCAwKSwtMT09PXguaW5kZXhPZihcInlcIikmJihnLnRyYWNlQ29vcmRbMV09dm9pZCAwKSwtMT09PXguaW5kZXhPZihcInpcIikmJihnLnRyYWNlQ29vcmRbMl09dm9pZCAwKSwtMT09PXguaW5kZXhPZihcInRleHRcIikmJihnLnRleHRMYWJlbD12b2lkIDApLC0xPT09eC5pbmRleE9mKFwibmFtZVwiKSYmKGcubmFtZT12b2lkIDApfXMubG9uZUhvdmVyKHt4Omcuc2NyZWVuQ29vcmRbMF0seTpnLnNjcmVlbkNvb3JkWzFdLHhMYWJlbDp0aGlzLmhvdmVyRm9ybWF0dGVyKFwieGF4aXNcIixnLnRyYWNlQ29vcmRbMF0pLHlMYWJlbDp0aGlzLmhvdmVyRm9ybWF0dGVyKFwieWF4aXNcIixnLnRyYWNlQ29vcmRbMV0pLHpMYWJlbDpnLnRyYWNlQ29vcmRbMl0sdGV4dDpnLnRleHRMYWJlbCxuYW1lOmcubmFtZSxjb2xvcjpzLmNhc3RIb3Zlck9wdGlvbih2LG0sXCJiZ2NvbG9yXCIpfHxnLmNvbG9yLGJvcmRlckNvbG9yOnMuY2FzdEhvdmVyT3B0aW9uKHYsbSxcImJvcmRlcmNvbG9yXCIpLGZvbnRGYW1pbHk6cy5jYXN0SG92ZXJPcHRpb24odixtLFwiZm9udC5mYW1pbHlcIiksZm9udFNpemU6cy5jYXN0SG92ZXJPcHRpb24odixtLFwiZm9udC5zaXplXCIpLGZvbnRDb2xvcjpzLmNhc3RIb3Zlck9wdGlvbih2LG0sXCJmb250LmNvbG9yXCIpLG5hbWVMZW5ndGg6cy5jYXN0SG92ZXJPcHRpb24odixtLFwibmFtZWxlbmd0aFwiKSx0ZXh0QWxpZ246cy5jYXN0SG92ZXJPcHRpb24odixtLFwiYWxpZ25cIil9LHtjb250YWluZXI6dGhpcy5zdmdDb250YWluZXIsZ2Q6dGhpcy5ncmFwaERpdn0pfX1hfHx0aGlzLnVuaG92ZXIoKSx0LmRyYXcoKX19LHcudW5ob3Zlcj1mdW5jdGlvbigpe3RoaXMubGFzdFBpY2tSZXN1bHQmJih0aGlzLnNwaWtlcy51cGRhdGUoe30pLHRoaXMubGFzdFBpY2tSZXN1bHQ9bnVsbCx0aGlzLmdyYXBoRGl2LmVtaXQoXCJwbG90bHlfdW5ob3ZlclwiKSxzLmxvbmVVbmhvdmVyKHRoaXMuc3ZnQ29udGFpbmVyKSl9LHcuaG92ZXJGb3JtYXR0ZXI9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDAhPT1lKXt2YXIgcj10aGlzW3RdO3JldHVybiBvLnRpY2tUZXh0KHIsci5jMmwoZSksXCJob3ZlclwiKS50ZXh0fX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9saWIvc2hvd19ub193ZWJnbF9tc2dcIjo3MjIsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vY2FydGVzaWFuL2F1dG9yYW5nZVwiOjc0OCxcIi4uL2NhcnRlc2lhbi9jb25zdGFudHNcIjo3NTUsXCIuLi9jYXJ0ZXNpYW4vY29uc3RyYWludHNcIjo3NTYsXCIuL2NhbWVyYVwiOjc4NSxcIi4vY29udmVydFwiOjc4NixcImdsLXBsb3QyZFwiOjI4NCxcImdsLXNlbGVjdC1ib3hcIjoyOTYsXCJnbC1zcGlrZXMyZFwiOjMwNSxcIndlYmdsLWNvbnRleHRcIjo1NDF9XSw3ODk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbCxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzXCIpLGE9dChcIi4vc2NlbmVcIiksbz10KFwiLi4vZ2V0X2RhdGFcIikuZ2V0U3VicGxvdERhdGEscz10KFwiLi4vLi4vbGliXCIpLGw9dChcIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzXCIpO3IubmFtZT1cImdsM2RcIixyLmF0dHI9XCJzY2VuZVwiLHIuaWRSb290PVwic2NlbmVcIixyLmlkUmVnZXg9ci5hdHRyUmVnZXg9cy5jb3VudGVyUmVnZXgoXCJzY2VuZVwiKSxyLmF0dHJpYnV0ZXM9dChcIi4vbGF5b3V0L2F0dHJpYnV0ZXNcIiksci5sYXlvdXRBdHRyaWJ1dGVzPXQoXCIuL2xheW91dC9sYXlvdXRfYXR0cmlidXRlc1wiKSxyLmJhc2VMYXlvdXRBdHRyT3ZlcnJpZGVzPW4oe2hvdmVybGFiZWw6aS5ob3ZlcmxhYmVsfSxcInBsb3RcIixcIm5lc3RlZFwiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPXQoXCIuL2xheW91dC9kZWZhdWx0c1wiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj10Ll9mdWxsRGF0YSxuPWUuX3N1YnBsb3RzLmdsM2QsaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgcz1uW2ldLGw9byhyLFwiZ2wzZFwiLHMpLGM9ZVtzXSx1PWMuY2FtZXJhLGg9Yy5fc2NlbmU7aHx8KGg9bmV3IGEoe2lkOnMsZ3JhcGhEaXY6dCxjb250YWluZXI6dC5xdWVyeVNlbGVjdG9yKFwiLmdsLWNvbnRhaW5lclwiKSxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdCxwbG90R2xQaXhlbFJhdGlvOnQuX2NvbnRleHQucGxvdEdsUGl4ZWxSYXRpbyxjYW1lcmE6dX0sZSksYy5fc2NlbmU9aCksaC52aWV3SW5pdGlhbHx8KGgudmlld0luaXRpYWw9e3VwOnt4OnUudXAueCx5OnUudXAueSx6OnUudXAuen0sZXllOnt4OnUuZXllLngseTp1LmV5ZS55LHo6dS5leWUuen0sY2VudGVyOnt4OnUuY2VudGVyLngseTp1LmNlbnRlci55LHo6dS5jZW50ZXIuen19KSxoLnBsb3QobCxlLHQubGF5b3V0KX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLmdsM2R8fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTshZVtvXSYmbltvXS5fc2NlbmUmJihuW29dLl9zY2VuZS5kZXN0cm95KCksbi5faW5mb2xheWVyJiZuLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKFwiLmFubm90YXRpb24tXCIrbykucmVtb3ZlKCkpfX0sci50b1NWRz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLmdsM2Qsbj1lLl9zaXplLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9ZVtyW2ldXSxvPWEuZG9tYWluLHM9YS5fc2NlbmUsYz1zLnRvSW1hZ2UoXCJwbmdcIik7ZS5fZ2xpbWFnZXMuYXBwZW5kKFwic3ZnOmltYWdlXCIpLmF0dHIoe3htbG5zOmwuc3ZnLFwieGxpbms6aHJlZlwiOmMseDpuLmwrbi53Km8ueFswXSx5Om4udCtuLmgqKDEtby55WzFdKSx3aWR0aDpuLncqKG8ueFsxXS1vLnhbMF0pLGhlaWdodDpuLmgqKG8ueVsxXS1vLnlbMF0pLHByZXNlcnZlQXNwZWN0UmF0aW86XCJub25lXCJ9KSxzLmRlc3Ryb3koKX19LHIuY2xlYW5JZD1mdW5jdGlvbih0KXtpZih0Lm1hdGNoKC9ec2NlbmVbMC05XSokLykpe3ZhciBlPXQuc3Vic3RyKDUpO3JldHVyblwiMVwiPT09ZSYmKGU9XCJcIiksXCJzY2VuZVwiK2V9fSxyLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fc3VicGxvdHMuZ2wzZCxuPTA7bjxyLmxlbmd0aDtuKyspe2VbcltuXV0uX3NjZW5lLnVwZGF0ZUZ4KGUuZHJhZ21vZGUsZS5ob3Zlcm1vZGUpfX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZngvbGF5b3V0X2F0dHJpYnV0ZXNcIjo2MTgsXCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiOjY3OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi9nZXRfZGF0YVwiOjc4NCxcIi4vbGF5b3V0L2F0dHJpYnV0ZXNcIjo3OTAsXCIuL2xheW91dC9kZWZhdWx0c1wiOjc5NCxcIi4vbGF5b3V0L2xheW91dF9hdHRyaWJ1dGVzXCI6Nzk1LFwiLi9zY2VuZVwiOjc5OX1dLDc5MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17c2NlbmU6e3ZhbFR5cGU6XCJzdWJwbG90aWRcIixkZmx0Olwic2NlbmVcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn19fSx7fV0sNzkxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksaT10KFwiLi4vLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxvPXQoXCIuLi8uLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsO2UuZXhwb3J0cz1vKHt2aXNpYmxlOmkudmlzaWJsZSxzaG93c3Bpa2VzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITB9LHNwaWtlc2lkZXM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMH0sc3Bpa2V0aGlja25lc3M6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjJ9LHNwaWtlY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6bi5kZWZhdWx0TGluZX0sc2hvd2JhY2tncm91bmQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sYmFja2dyb3VuZGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OlwicmdiYSgyMDQsIDIwNCwgMjA0LCAwLjUpXCJ9LHNob3dheGVzbGFiZWxzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITB9LGNvbG9yOmkuY29sb3IsY2F0ZWdvcnlvcmRlcjppLmNhdGVnb3J5b3JkZXIsY2F0ZWdvcnlhcnJheTppLmNhdGVnb3J5YXJyYXksdGl0bGU6aS50aXRsZSx0eXBlOmEoe30saS50eXBlLHt2YWx1ZXM6W1wiLVwiLFwibGluZWFyXCIsXCJsb2dcIixcImRhdGVcIixcImNhdGVnb3J5XCJdfSksYXV0b3JhbmdlOmkuYXV0b3JhbmdlLHJhbmdlbW9kZTppLnJhbmdlbW9kZSxyYW5nZTphKHt9LGkucmFuZ2Use2l0ZW1zOlt7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwicGxvdFwiLGltcGxpZWRFZGl0czp7XCJeYXV0b3JhbmdlXCI6ITF9fSx7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwicGxvdFwiLGltcGxpZWRFZGl0czp7XCJeYXV0b3JhbmdlXCI6ITF9fV0sYW5pbTohMX0pLHRpY2ttb2RlOmkudGlja21vZGUsbnRpY2tzOmkubnRpY2tzLHRpY2swOmkudGljazAsZHRpY2s6aS5kdGljayx0aWNrdmFsczppLnRpY2t2YWxzLHRpY2t0ZXh0OmkudGlja3RleHQsdGlja3M6aS50aWNrcyxtaXJyb3I6aS5taXJyb3IsdGlja2xlbjppLnRpY2tsZW4sdGlja3dpZHRoOmkudGlja3dpZHRoLHRpY2tjb2xvcjppLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczppLnNob3d0aWNrbGFiZWxzLHRpY2tmb250OmkudGlja2ZvbnQsdGlja2FuZ2xlOmkudGlja2FuZ2xlLHRpY2twcmVmaXg6aS50aWNrcHJlZml4LHNob3d0aWNrcHJlZml4Omkuc2hvd3RpY2twcmVmaXgsdGlja3N1ZmZpeDppLnRpY2tzdWZmaXgsc2hvd3RpY2tzdWZmaXg6aS5zaG93dGlja3N1ZmZpeCxzaG93ZXhwb25lbnQ6aS5zaG93ZXhwb25lbnQsZXhwb25lbnRmb3JtYXQ6aS5leHBvbmVudGZvcm1hdCxzZXBhcmF0ZXRob3VzYW5kczppLnNlcGFyYXRldGhvdXNhbmRzLHRpY2tmb3JtYXQ6aS50aWNrZm9ybWF0LHRpY2tmb3JtYXRzdG9wczppLnRpY2tmb3JtYXRzdG9wcyxob3ZlcmZvcm1hdDppLmhvdmVyZm9ybWF0LHNob3dsaW5lOmkuc2hvd2xpbmUsbGluZWNvbG9yOmkubGluZWNvbG9yLGxpbmV3aWR0aDppLmxpbmV3aWR0aCxzaG93Z3JpZDppLnNob3dncmlkLGdyaWRjb2xvcjphKHt9LGkuZ3JpZGNvbG9yLHtkZmx0OlwicmdiKDIwNCwgMjA0LCAyMDQpXCJ9KSxncmlkd2lkdGg6aS5ncmlkd2lkdGgsemVyb2xpbmU6aS56ZXJvbGluZSx6ZXJvbGluZWNvbG9yOmkuemVyb2xpbmVjb2xvcix6ZXJvbGluZXdpZHRoOmkuemVyb2xpbmV3aWR0aCxfZGVwcmVjYXRlZDp7dGl0bGU6aS5fZGVwcmVjYXRlZC50aXRsZSx0aXRsZWZvbnQ6aS5fZGVwcmVjYXRlZC50aXRsZWZvbnR9fSxcInBsb3RcIixcImZyb20tcm9vdFwiKX0se1wiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi4vLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzXCI6NzYxfV0sNzkyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInRpbnljb2xvcjJcIikubWl4LGk9dChcIi4uLy4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLG89dChcIi4vYXhpc19hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL2NhcnRlc2lhbi90eXBlX2RlZmF1bHRzXCIpLGw9dChcIi4uLy4uL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzXCIpLGM9W1wieGF4aXNcIixcInlheGlzXCIsXCJ6YXhpc1wiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciB1LGg7ZnVuY3Rpb24gZih0LGUpe3JldHVybiBpLmNvZXJjZSh1LGgsbyx0LGUpfWZvcih2YXIgcD0wO3A8Yy5sZW5ndGg7cCsrKXt2YXIgZD1jW3BdO3U9dFtkXXx8e30sKGg9YS5uZXdDb250YWluZXIoZSxkKSkuX2lkPWRbMF0rci5zY2VuZSxoLl9uYW1lPWQscyh1LGgsZixyKSxsKHUsaCxmLHtmb250OnIuZm9udCxsZXR0ZXI6ZFswXSxkYXRhOnIuZGF0YSxzaG93R3JpZDohMCxub1RpY2tzb246ITAsYmdDb2xvcjpyLmJnQ29sb3IsY2FsZW5kYXI6ci5jYWxlbmRhcn0sci5mdWxsTGF5b3V0KSxmKFwiZ3JpZGNvbG9yXCIsbihoLmNvbG9yLHIuYmdDb2xvciwxMzYwMC8xODcpLnRvUmdiU3RyaW5nKCkpLGYoXCJ0aXRsZS50ZXh0XCIsZFswXSksaC5zZXRTY2FsZT1pLm5vb3AsZihcInNob3dzcGlrZXNcIikmJihmKFwic3Bpa2VzaWRlc1wiKSxmKFwic3Bpa2V0aGlja25lc3NcIiksZihcInNwaWtlY29sb3JcIixoLmNvbG9yKSksZihcInNob3dheGVzbGFiZWxzXCIpLGYoXCJzaG93YmFja2dyb3VuZFwiKSYmZihcImJhY2tncm91bmRjb2xvclwiKX19fSx7XCIuLi8uLi8uLi9saWJcIjo3MDEsXCIuLi8uLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vY2FydGVzaWFuL2F4aXNfZGVmYXVsdHNcIjo3NTEsXCIuLi8uLi9jYXJ0ZXNpYW4vdHlwZV9kZWZhdWx0c1wiOjc3MixcIi4vYXhpc19hdHRyaWJ1dGVzXCI6NzkxLHRpbnljb2xvcjI6NTIyfV0sNzkzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIiksaT10KFwiLi4vLi4vLi4vbGliXCIpLGE9W1wieGF4aXNcIixcInlheGlzXCIsXCJ6YXhpc1wiXTtmdW5jdGlvbiBvKCl7dGhpcy5ib3VuZHM9W1stMTAsLTEwLC0xMF0sWzEwLDEwLDEwXV0sdGhpcy50aWNrcz1bW10sW10sW11dLHRoaXMudGlja0VuYWJsZT1bITAsITAsITBdLHRoaXMudGlja0ZvbnQ9W1wic2Fucy1zZXJpZlwiLFwic2Fucy1zZXJpZlwiLFwic2Fucy1zZXJpZlwiXSx0aGlzLnRpY2tTaXplPVsxMiwxMiwxMl0sdGhpcy50aWNrQW5nbGU9WzAsMCwwXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja1BhZD1bMTgsMTgsMThdLHRoaXMubGFiZWxzPVtcInhcIixcInlcIixcInpcIl0sdGhpcy5sYWJlbEVuYWJsZT1bITAsITAsITBdLHRoaXMubGFiZWxGb250PVtcIk9wZW4gU2Fuc1wiLFwiT3BlbiBTYW5zXCIsXCJPcGVuIFNhbnNcIl0sdGhpcy5sYWJlbFNpemU9WzIwLDIwLDIwXSx0aGlzLmxhYmVsQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVsUGFkPVszMCwzMCwzMF0sdGhpcy5saW5lRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5saW5lTWlycm9yPVshMSwhMSwhMV0sdGhpcy5saW5lV2lkdGg9WzEsMSwxXSx0aGlzLmxpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGluZVRpY2tFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxpbmVUaWNrTWlycm9yPVshMSwhMSwhMV0sdGhpcy5saW5lVGlja0xlbmd0aD1bMTAsMTAsMTBdLHRoaXMubGluZVRpY2tXaWR0aD1bMSwxLDFdLHRoaXMubGluZVRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZ3JpZEVuYWJsZT1bITAsITAsITBdLHRoaXMuZ3JpZFdpZHRoPVsxLDEsMV0sdGhpcy5ncmlkQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnplcm9FbmFibGU9WyEwLCEwLCEwXSx0aGlzLnplcm9MaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnplcm9MaW5lV2lkdGg9WzIsMiwyXSx0aGlzLmJhY2tncm91bmRFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmJhY2tncm91bmRDb2xvcj1bWy44LC44LC44LC41XSxbLjgsLjgsLjgsLjVdLFsuOCwuOCwuOCwuNV1dLHRoaXMuX2RlZmF1bHRUaWNrUGFkPXRoaXMudGlja1BhZC5zbGljZSgpLHRoaXMuX2RlZmF1bHRMYWJlbFBhZD10aGlzLmxhYmVsUGFkLnNsaWNlKCksdGhpcy5fZGVmYXVsdExpbmVUaWNrTGVuZ3RoPXRoaXMubGluZVRpY2tMZW5ndGguc2xpY2UoKX1vLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8MzsrK3Ipe3ZhciBvPWVbYVtyXV07by52aXNpYmxlPyh0aGlzLmxhYmVsc1tyXT10Lm1ldGE/aS50ZW1wbGF0ZVN0cmluZyhvLnRpdGxlLnRleHQse21ldGE6dC5tZXRhfSk6by50aXRsZS50ZXh0LFwiZm9udFwiaW4gby50aXRsZSYmKG8udGl0bGUuZm9udC5jb2xvciYmKHRoaXMubGFiZWxDb2xvcltyXT1uKG8udGl0bGUuZm9udC5jb2xvcikpLG8udGl0bGUuZm9udC5mYW1pbHkmJih0aGlzLmxhYmVsRm9udFtyXT1vLnRpdGxlLmZvbnQuZmFtaWx5KSxvLnRpdGxlLmZvbnQuc2l6ZSYmKHRoaXMubGFiZWxTaXplW3JdPW8udGl0bGUuZm9udC5zaXplKSksXCJzaG93bGluZVwiaW4gbyYmKHRoaXMubGluZUVuYWJsZVtyXT1vLnNob3dsaW5lKSxcImxpbmVjb2xvclwiaW4gbyYmKHRoaXMubGluZUNvbG9yW3JdPW4oby5saW5lY29sb3IpKSxcImxpbmV3aWR0aFwiaW4gbyYmKHRoaXMubGluZVdpZHRoW3JdPW8ubGluZXdpZHRoKSxcInNob3dncmlkXCJpbiBvJiYodGhpcy5ncmlkRW5hYmxlW3JdPW8uc2hvd2dyaWQpLFwiZ3JpZGNvbG9yXCJpbiBvJiYodGhpcy5ncmlkQ29sb3Jbcl09bihvLmdyaWRjb2xvcikpLFwiZ3JpZHdpZHRoXCJpbiBvJiYodGhpcy5ncmlkV2lkdGhbcl09by5ncmlkd2lkdGgpLFwibG9nXCI9PT1vLnR5cGU/dGhpcy56ZXJvRW5hYmxlW3JdPSExOlwiemVyb2xpbmVcImluIG8mJih0aGlzLnplcm9FbmFibGVbcl09by56ZXJvbGluZSksXCJ6ZXJvbGluZWNvbG9yXCJpbiBvJiYodGhpcy56ZXJvTGluZUNvbG9yW3JdPW4oby56ZXJvbGluZWNvbG9yKSksXCJ6ZXJvbGluZXdpZHRoXCJpbiBvJiYodGhpcy56ZXJvTGluZVdpZHRoW3JdPW8uemVyb2xpbmV3aWR0aCksXCJ0aWNrc1wiaW4gbyYmby50aWNrcz90aGlzLmxpbmVUaWNrRW5hYmxlW3JdPSEwOnRoaXMubGluZVRpY2tFbmFibGVbcl09ITEsXCJ0aWNrbGVuXCJpbiBvJiYodGhpcy5saW5lVGlja0xlbmd0aFtyXT10aGlzLl9kZWZhdWx0TGluZVRpY2tMZW5ndGhbcl09by50aWNrbGVuKSxcInRpY2tjb2xvclwiaW4gbyYmKHRoaXMubGluZVRpY2tDb2xvcltyXT1uKG8udGlja2NvbG9yKSksXCJ0aWNrd2lkdGhcImluIG8mJih0aGlzLmxpbmVUaWNrV2lkdGhbcl09by50aWNrd2lkdGgpLFwidGlja2FuZ2xlXCJpbiBvJiYodGhpcy50aWNrQW5nbGVbcl09XCJhdXRvXCI9PT1vLnRpY2thbmdsZT8tMzYwMDpNYXRoLlBJKi1vLnRpY2thbmdsZS8xODApLFwic2hvd3RpY2tsYWJlbHNcImluIG8mJih0aGlzLnRpY2tFbmFibGVbcl09by5zaG93dGlja2xhYmVscyksXCJ0aWNrZm9udFwiaW4gbyYmKG8udGlja2ZvbnQuY29sb3ImJih0aGlzLnRpY2tDb2xvcltyXT1uKG8udGlja2ZvbnQuY29sb3IpKSxvLnRpY2tmb250LmZhbWlseSYmKHRoaXMudGlja0ZvbnRbcl09by50aWNrZm9udC5mYW1pbHkpLG8udGlja2ZvbnQuc2l6ZSYmKHRoaXMudGlja1NpemVbcl09by50aWNrZm9udC5zaXplKSksXCJtaXJyb3JcImluIG8/LTEhPT1bXCJ0aWNrc1wiLFwiYWxsXCIsXCJhbGx0aWNrc1wiXS5pbmRleE9mKG8ubWlycm9yKT8odGhpcy5saW5lVGlja01pcnJvcltyXT0hMCx0aGlzLmxpbmVNaXJyb3Jbcl09ITApOiEwPT09by5taXJyb3I/KHRoaXMubGluZVRpY2tNaXJyb3Jbcl09ITEsdGhpcy5saW5lTWlycm9yW3JdPSEwKToodGhpcy5saW5lVGlja01pcnJvcltyXT0hMSx0aGlzLmxpbmVNaXJyb3Jbcl09ITEpOnRoaXMubGluZU1pcnJvcltyXT0hMSxcInNob3diYWNrZ3JvdW5kXCJpbiBvJiYhMSE9PW8uc2hvd2JhY2tncm91bmQ/KHRoaXMuYmFja2dyb3VuZEVuYWJsZVtyXT0hMCx0aGlzLmJhY2tncm91bmRDb2xvcltyXT1uKG8uYmFja2dyb3VuZGNvbG9yKSk6dGhpcy5iYWNrZ3JvdW5kRW5hYmxlW3JdPSExKToodGhpcy50aWNrRW5hYmxlW3JdPSExLHRoaXMubGFiZWxFbmFibGVbcl09ITEsdGhpcy5saW5lRW5hYmxlW3JdPSExLHRoaXMubGluZVRpY2tFbmFibGVbcl09ITEsdGhpcy5ncmlkRW5hYmxlW3JdPSExLHRoaXMuemVyb0VuYWJsZVtyXT0hMSx0aGlzLmJhY2tncm91bmRFbmFibGVbcl09ITEpfX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IG87cmV0dXJuIHIubWVyZ2UodCxlKSxyfX0se1wiLi4vLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiOjcyNH1dLDc5NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi8uLi9saWJcIiksaT10KFwiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxhPXQoXCIuLi8uLi8uLi9yZWdpc3RyeVwiKSxvPXQoXCIuLi8uLi9zdWJwbG90X2RlZmF1bHRzXCIpLHM9dChcIi4vYXhpc19kZWZhdWx0c1wiKSxsPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLGM9dChcIi4uLy4uL2dldF9kYXRhXCIpLmdldFN1YnBsb3REYXRhLHU9XCJnbDNkXCI7ZnVuY3Rpb24gaCh0LGUscixuKXtmb3IodmFyIG89cihcImJnY29sb3JcIiksbD1pLmNvbWJpbmUobyxuLnBhcGVyX2JnY29sb3IpLGg9W1widXBcIixcImNlbnRlclwiLFwiZXllXCJdLGY9MDtmPGgubGVuZ3RoO2YrKylyKFwiY2FtZXJhLlwiK2hbZl0rXCIueFwiKSxyKFwiY2FtZXJhLlwiK2hbZl0rXCIueVwiKSxyKFwiY2FtZXJhLlwiK2hbZl0rXCIuelwiKTtyKFwiY2FtZXJhLnByb2plY3Rpb24udHlwZVwiKTt2YXIgcD0hIXIoXCJhc3BlY3RyYXRpby54XCIpJiYhIXIoXCJhc3BlY3RyYXRpby55XCIpJiYhIXIoXCJhc3BlY3RyYXRpby56XCIpLGQ9cihcImFzcGVjdG1vZGVcIixwP1wibWFudWFsXCI6XCJhdXRvXCIpO3B8fCh0LmFzcGVjdHJhdGlvPWUuYXNwZWN0cmF0aW89e3g6MSx5OjEsejoxfSxcIm1hbnVhbFwiPT09ZCYmKGUuYXNwZWN0bW9kZT1cImF1dG9cIiksdC5hc3BlY3Rtb2RlPWUuYXNwZWN0bW9kZSk7dmFyIGc9YyhuLmZ1bGxEYXRhLHUsbi5pZCk7cyh0LGUse2ZvbnQ6bi5mb250LHNjZW5lOm4uaWQsZGF0YTpnLGJnQ29sb3I6bCxjYWxlbmRhcjpuLmNhbGVuZGFyLGZ1bGxMYXlvdXQ6bi5mdWxsTGF5b3V0fSksYS5nZXRDb21wb25lbnRNZXRob2QoXCJhbm5vdGF0aW9uczNkXCIsXCJoYW5kbGVEZWZhdWx0c1wiKSh0LGUsbik7dmFyIHY9bi5nZXREZmx0RnJvbUxheW91dChcImRyYWdtb2RlXCIpO2lmKCExIT09diYmIXYpaWYodj1cIm9yYml0XCIsdC5jYW1lcmEmJnQuY2FtZXJhLnVwKXt2YXIgbT10LmNhbWVyYS51cC54LHk9dC5jYW1lcmEudXAueSx4PXQuY2FtZXJhLnVwLno7MCE9PXgmJihtJiZ5JiZ4P3gvTWF0aC5zcXJ0KG0qbSt5KnkreCp4KT4uOTk5JiYodj1cInR1cm50YWJsZVwiKTp2PVwidHVybnRhYmxlXCIpfWVsc2Ugdj1cInR1cm50YWJsZVwiO3IoXCJkcmFnbW9kZVwiLHYpLHIoXCJob3Zlcm1vZGVcIixuLmdldERmbHRGcm9tTGF5b3V0KFwiaG92ZXJtb2RlXCIpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUuX2Jhc2VQbG90TW9kdWxlcy5sZW5ndGg+MTtvKHQsZSxyLHt0eXBlOnUsYXR0cmlidXRlczpsLGhhbmRsZURlZmF1bHRzOmgsZnVsbExheW91dDplLGZvbnQ6ZS5mb250LGZ1bGxEYXRhOnIsZ2V0RGZsdEZyb21MYXlvdXQ6ZnVuY3Rpb24oZSl7aWYoIWkpcmV0dXJuIG4udmFsaWRhdGUodFtlXSxsW2VdKT90W2VdOnZvaWQgMH0scGFwZXJfYmdjb2xvcjplLnBhcGVyX2JnY29sb3IsY2FsZW5kYXI6ZS5jYWxlbmRhcn0pfX0se1wiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vLi4vZ2V0X2RhdGFcIjo3ODQsXCIuLi8uLi9zdWJwbG90X2RlZmF1bHRzXCI6ODI0LFwiLi9heGlzX2RlZmF1bHRzXCI6NzkyLFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjc5NX1dLDc5NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2F4aXNfYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9kb21haW5cIikuYXR0cmlidXRlcyxhPXQoXCIuLi8uLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsbz10KFwiLi4vLi4vLi4vbGliXCIpLmNvdW50ZXJSZWdleDtmdW5jdGlvbiBzKHQsZSxyKXtyZXR1cm57eDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6dCxlZGl0VHlwZTpcImNhbWVyYVwifSx5Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDplLGVkaXRUeXBlOlwiY2FtZXJhXCJ9LHo6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OnIsZWRpdFR5cGU6XCJjYW1lcmFcIn0sZWRpdFR5cGU6XCJjYW1lcmFcIn19ZS5leHBvcnRzPXtfYXJyYXlBdHRyUmVnZXhwczpbbyhcInNjZW5lXCIsXCIuYW5ub3RhdGlvbnNcIiwhMCldLGJnY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6XCJyZ2JhKDAsMCwwLDApXCIsZWRpdFR5cGU6XCJwbG90XCJ9LGNhbWVyYTp7dXA6YShzKDAsMCwxKSx7fSksY2VudGVyOmEocygwLDAsMCkse30pLGV5ZTphKHMoMS4yNSwxLjI1LDEuMjUpLHt9KSxwcm9qZWN0aW9uOnt0eXBlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJwZXJzcGVjdGl2ZVwiLFwib3J0aG9ncmFwaGljXCJdLGRmbHQ6XCJwZXJzcGVjdGl2ZVwiLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYW1lcmFcIn0sZG9tYWluOmkoe25hbWU6XCJzY2VuZVwiLGVkaXRUeXBlOlwicGxvdFwifSksYXNwZWN0bW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYXV0b1wiLFwiY3ViZVwiLFwiZGF0YVwiLFwibWFudWFsXCJdLGRmbHQ6XCJhdXRvXCIsZWRpdFR5cGU6XCJwbG90XCIsaW1wbGllZEVkaXRzOntcImFzcGVjdHJhdGlvLnhcIjp2b2lkIDAsXCJhc3BlY3RyYXRpby55XCI6dm9pZCAwLFwiYXNwZWN0cmF0aW8uelwiOnZvaWQgMH19LGFzcGVjdHJhdGlvOnt4Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZWRpdFR5cGU6XCJwbG90XCIsaW1wbGllZEVkaXRzOntcIl5hc3BlY3Rtb2RlXCI6XCJtYW51YWxcIn19LHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxlZGl0VHlwZTpcInBsb3RcIixpbXBsaWVkRWRpdHM6e1wiXmFzcGVjdG1vZGVcIjpcIm1hbnVhbFwifX0sejp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGVkaXRUeXBlOlwicGxvdFwiLGltcGxpZWRFZGl0czp7XCJeYXNwZWN0bW9kZVwiOlwibWFudWFsXCJ9fSxlZGl0VHlwZTpcInBsb3RcIixpbXBsaWVkRWRpdHM6e2FzcGVjdG1vZGU6XCJtYW51YWxcIn19LHhheGlzOm4seWF4aXM6bix6YXhpczpuLGRyYWdtb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJvcmJpdFwiLFwidHVybnRhYmxlXCIsXCJ6b29tXCIsXCJwYW5cIiwhMV0sZWRpdFR5cGU6XCJwbG90XCJ9LGhvdmVybW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiY2xvc2VzdFwiLCExXSxkZmx0OlwiY2xvc2VzdFwiLGVkaXRUeXBlOlwibW9kZWJhclwifSx1aXJldmlzaW9uOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJub25lXCJ9LGVkaXRUeXBlOlwicGxvdFwiLF9kZXByZWNhdGVkOntjYW1lcmFwb3NpdGlvbjp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixlZGl0VHlwZTpcImNhbWVyYVwifX19fSx7XCIuLi8uLi8uLi9saWJcIjo3MDEsXCIuLi8uLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vZG9tYWluXCI6Nzc0LFwiLi9heGlzX2F0dHJpYnV0ZXNcIjo3OTF9XSw3OTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiKSxpPVtcInhheGlzXCIsXCJ5YXhpc1wiLFwiemF4aXNcIl07ZnVuY3Rpb24gYSgpe3RoaXMuZW5hYmxlZD1bITAsITAsITBdLHRoaXMuY29sb3JzPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5kcmF3U2lkZXM9WyEwLCEwLCEwXSx0aGlzLmxpbmVXaWR0aD1bMSwxLDFdfWEucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8MzsrK2Upe3ZhciByPXRbaVtlXV07ci52aXNpYmxlPyh0aGlzLmVuYWJsZWRbZV09ci5zaG93c3Bpa2VzLHRoaXMuY29sb3JzW2VdPW4oci5zcGlrZWNvbG9yKSx0aGlzLmRyYXdTaWRlc1tlXT1yLnNwaWtlc2lkZXMsdGhpcy5saW5lV2lkdGhbZV09ci5zcGlrZXRoaWNrbmVzcyk6KHRoaXMuZW5hYmxlZFtlXT0hMSx0aGlzLmRyYXdTaWRlc1tlXT0hMSl9fSxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGE7cmV0dXJuIGUubWVyZ2UodCksZX19LHtcIi4uLy4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIjo3MjR9XSw3OTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuYXhlc09wdGlvbnMscj10LmdscGxvdC5heGVzUGl4ZWxzLHM9dC5mdWxsU2NlbmVMYXlvdXQsbD1bW10sW10sW11dLGM9MDtjPDM7KytjKXt2YXIgdT1zW2FbY11dO2lmKHUuX2xlbmd0aD0ocltjXS5oaS1yW2NdLmxvKSpyW2NdLnBpeGVsc1BlckRhdGFVbml0L3QuZGF0YVNjYWxlW2NdLE1hdGguYWJzKHUuX2xlbmd0aCk9PT0xLzB8fGlzTmFOKHUuX2xlbmd0aCkpbFtjXT1bXTtlbHNle3UuX2lucHV0X3JhbmdlPXUucmFuZ2Uuc2xpY2UoKSx1LnJhbmdlWzBdPXJbY10ubG8vdC5kYXRhU2NhbGVbY10sdS5yYW5nZVsxXT1yW2NdLmhpL3QuZGF0YVNjYWxlW2NdLHUuX209MS8odC5kYXRhU2NhbGVbY10qcltjXS5waXhlbHNQZXJEYXRhVW5pdCksdS5yYW5nZVswXT09PXUucmFuZ2VbMV0mJih1LnJhbmdlWzBdLT0xLHUucmFuZ2VbMV0rPTEpO3ZhciBoPXUudGlja21vZGU7aWYoXCJhdXRvXCI9PT11LnRpY2ttb2RlKXt1LnRpY2ttb2RlPVwibGluZWFyXCI7dmFyIGY9dS5udGlja3N8fGkuY29uc3RyYWluKHUuX2xlbmd0aC80MCw0LDkpO24uYXV0b1RpY2tzKHUsTWF0aC5hYnModS5yYW5nZVsxXS11LnJhbmdlWzBdKS9mKX1mb3IodmFyIHA9bi5jYWxjVGlja3ModSksZD0wO2Q8cC5sZW5ndGg7KytkKXBbZF0ueD1wW2RdLngqdC5kYXRhU2NhbGVbY10sXCJkYXRlXCI9PT11LnR5cGUmJihwW2RdLnRleHQ9cFtkXS50ZXh0LnJlcGxhY2UoL1xcPGJyXFw+L2csXCIgXCIpKTtsW2NdPXAsdS50aWNrbW9kZT1ofX1lLnRpY2tzPWw7Zm9yKHZhciBjPTA7YzwzOysrYyl7b1tjXT0uNSoodC5nbHBsb3QuYm91bmRzWzBdW2NdK3QuZ2xwbG90LmJvdW5kc1sxXVtjXSk7Zm9yKHZhciBkPTA7ZDwyOysrZCllLmJvdW5kc1tkXVtjXT10LmdscGxvdC5ib3VuZHNbZF1bY119dC5jb250b3VyTGV2ZWxzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkoMykscj0wO3I8MzsrK3Ipe2Zvcih2YXIgbj10W3JdLGk9bmV3IEFycmF5KG4ubGVuZ3RoKSxhPTA7YTxuLmxlbmd0aDsrK2EpaVthXT1uW2FdLng7ZVtyXT1pfXJldHVybiBlfShsKX07dmFyIG49dChcIi4uLy4uL2NhcnRlc2lhbi9heGVzXCIpLGk9dChcIi4uLy4uLy4uL2xpYlwiKSxhPVtcInhheGlzXCIsXCJ5YXhpc1wiLFwiemF4aXNcIl0sbz1bMCwwLDBdfSx7XCIuLi8uLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9jYXJ0ZXNpYW4vYXhlc1wiOjc0OX1dLDc5ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcixuLGk9WzAsMCwwLDBdO2ZvcihyPTA7cjw0Oysrcilmb3Iobj0wO248NDsrK24paVtuXSs9dFs0KnIrbl0qZVtyXTtyZXR1cm4gaX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LnByb2plY3Rpb24sbih0LnZpZXcsbih0Lm1vZGVsLFtlWzBdLGVbMV0sZVsyXSwxXSkpKX19LHt9XSw3OTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbixpLGE9dChcImdsLXBsb3QzZFwiKS5jcmVhdGVDYW1lcmEsbz10KFwiZ2wtcGxvdDNkXCIpLmNyZWF0ZVNjZW5lLHM9dChcIndlYmdsLWNvbnRleHRcIiksbD10KFwiaGFzLXBhc3NpdmUtZXZlbnRzXCIpLGM9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLHU9dChcIi4uLy4uL2xpYlwiKSxoPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxmPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4XCIpLHA9dChcIi4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIiksZD10KFwiLi4vLi4vbGliL3Nob3dfbm9fd2ViZ2xfbXNnXCIpLGc9dChcIi4vcHJvamVjdFwiKSx2PXQoXCIuL2xheW91dC9jb252ZXJ0XCIpLG09dChcIi4vbGF5b3V0L3NwaWtlc1wiKSx5PXQoXCIuL2xheW91dC90aWNrX21hcmtzXCIpO2Z1bmN0aW9uIHgodCxlLHIsYSl7aWYodC5pbml0aWFsaXplR0xDYW1lcmEoKSwhZnVuY3Rpb24odCxlLHIsYSxsKXt2YXIgYz17Y2FudmFzOmEsZ2w6bCxjb250YWluZXI6dC5jb250YWluZXIsYXhlczp0LmF4ZXNPcHRpb25zLHNwaWtlczp0LnNwaWtlT3B0aW9ucyxwaWNrUmFkaXVzOjEwLHNuYXBUb0RhdGE6ITAsYXV0b1NjYWxlOiEwLGF1dG9Cb3VuZHM6ITEsY2FtZXJhT2JqZWN0OmUscGl4ZWxSYXRpbzpyfTtpZih0LnN0YXRpY01vZGUpe2lmKCEoaXx8KG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSxpPXMoe2NhbnZhczpuLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMCxwcmVtdWx0aXBsaWVkQWxwaGE6ITAsYW50aWFsaWFzOiEwfSkpKSl0aHJvdyBuZXcgRXJyb3IoXCJlcnJvciBjcmVhdGluZyBzdGF0aWMgY2FudmFzL2NvbnRleHQgZm9yIGltYWdlIHNlcnZlclwiKTtjLnBpeGVsUmF0aW89dC5waXhlbFJhdGlvLGMuZ2w9aSxjLmNhbnZhcz1ufXRyeXt0LmdscGxvdD1vKGMpfWNhdGNoKHQpe3JldHVybiExfXJldHVybiEwfSh0LHQuY2FtZXJhLGUscixhKSlyZXR1cm4gZCh0KTt2YXIgYz10LmdyYXBoRGl2LHA9ZnVuY3Rpb24odCl7aWYoITEhPT10LmZ1bGxTY2VuZUxheW91dC5kcmFnbW9kZSl7dmFyIGU9e307ZVt0LmlkK1wiLmNhbWVyYVwiXT1BKHQuY2FtZXJhKSx0LnNhdmVDYW1lcmEoYy5sYXlvdXQpLHQuZ3JhcGhEaXYuZW1pdChcInBsb3RseV9yZWxheW91dFwiLGUpfX07cmV0dXJuIHQuZ2xwbG90LmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLGZ1bmN0aW9uKCl7cCh0KX0pLHQuZ2xwbG90LmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKFwid2hlZWxcIixmdW5jdGlvbigpe2MuX2NvbnRleHQuX3Njcm9sbFpvb20uZ2wzZCYmcCh0KX0sISFsJiZ7cGFzc2l2ZTohMX0pLHQuc3RhdGljTW9kZXx8dC5nbHBsb3QuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoXCJ3ZWJnbGNvbnRleHRsb3N0XCIsZnVuY3Rpb24oZSl7YyYmYy5lbWl0JiZjLmVtaXQoXCJwbG90bHlfd2ViZ2xjb250ZXh0bG9zdFwiLHtldmVudDplLGxheWVyOnQuaWR9KX0sITEpLHQuZ2xwbG90LmNhbWVyYT10LmNhbWVyYSx0LmdscGxvdC5vbmNvbnRleHRsb3NzPWZ1bmN0aW9uKCl7dC5yZWNvdmVyQ29udGV4dCgpfSx0LmdscGxvdC5vbnJlbmRlcj1mdW5jdGlvbih0KXt2YXIgZSxyPXQuZ3JhcGhEaXYsbj10LnN2Z0NvbnRhaW5lcixpPXQuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGE9aS53aWR0aCxvPWkuaGVpZ2h0O24uc2V0QXR0cmlidXRlTlMobnVsbCxcInZpZXdCb3hcIixcIjAgMCBcIithK1wiIFwiK28pLG4uc2V0QXR0cmlidXRlTlMobnVsbCxcIndpZHRoXCIsYSksbi5zZXRBdHRyaWJ1dGVOUyhudWxsLFwiaGVpZ2h0XCIsbykseSh0KSx0LmdscGxvdC5heGVzLnVwZGF0ZSh0LmF4ZXNPcHRpb25zKTtmb3IodmFyIHMsbD1PYmplY3Qua2V5cyh0LnRyYWNlcyksYz1udWxsLHA9dC5nbHBsb3Quc2VsZWN0aW9uLGQ9MDtkPGwubGVuZ3RoOysrZClcInNraXBcIiE9PShlPXQudHJhY2VzW2xbZF1dKS5kYXRhLmhvdmVyaW5mbyYmZS5oYW5kbGVQaWNrKHApJiYoYz1lKSxlLnNldENvbnRvdXJMZXZlbHMmJmUuc2V0Q29udG91ckxldmVscygpO2Z1bmN0aW9uIHYoZSxyKXt2YXIgbj10LmZ1bGxTY2VuZUxheW91dFtlXTtyZXR1cm4gaC50aWNrVGV4dChuLG4uZDJsKHIpLFwiaG92ZXJcIikudGV4dH1pZihudWxsIT09Yyl7dmFyIG09Zyh0LmdscGxvdC5jYW1lcmFQYXJhbXMscC5kYXRhQ29vcmRpbmF0ZSk7ZT1jLmRhdGE7dmFyIHgsYj1yLl9mdWxsRGF0YVtlLmluZGV4XSxfPXAuaW5kZXgsdz17eExhYmVsOnYoXCJ4YXhpc1wiLHAudHJhY2VDb29yZGluYXRlWzBdKSx5TGFiZWw6dihcInlheGlzXCIscC50cmFjZUNvb3JkaW5hdGVbMV0pLHpMYWJlbDp2KFwiemF4aXNcIixwLnRyYWNlQ29vcmRpbmF0ZVsyXSl9LGs9Zi5jYXN0SG92ZXJpbmZvKGIsdC5mdWxsTGF5b3V0LF8pLEE9KGt8fFwiXCIpLnNwbGl0KFwiK1wiKSxUPWsmJlwiYWxsXCI9PT1rO2IuaG92ZXJ0ZW1wbGF0ZXx8VHx8KC0xPT09QS5pbmRleE9mKFwieFwiKSYmKHcueExhYmVsPXZvaWQgMCksLTE9PT1BLmluZGV4T2YoXCJ5XCIpJiYody55TGFiZWw9dm9pZCAwKSwtMT09PUEuaW5kZXhPZihcInpcIikmJih3LnpMYWJlbD12b2lkIDApLC0xPT09QS5pbmRleE9mKFwidGV4dFwiKSYmKHAudGV4dExhYmVsPXZvaWQgMCksLTE9PT1BLmluZGV4T2YoXCJuYW1lXCIpJiYoYy5uYW1lPXZvaWQgMCkpO3ZhciBNPVtdO1wiY29uZVwiPT09ZS50eXBlfHxcInN0cmVhbXR1YmVcIj09PWUudHlwZT8ody51TGFiZWw9dihcInhheGlzXCIscC50cmFjZUNvb3JkaW5hdGVbM10pLChUfHwtMSE9PUEuaW5kZXhPZihcInVcIikpJiZNLnB1c2goXCJ1OiBcIit3LnVMYWJlbCksdy52TGFiZWw9dihcInlheGlzXCIscC50cmFjZUNvb3JkaW5hdGVbNF0pLChUfHwtMSE9PUEuaW5kZXhPZihcInZcIikpJiZNLnB1c2goXCJ2OiBcIit3LnZMYWJlbCksdy53TGFiZWw9dihcInpheGlzXCIscC50cmFjZUNvb3JkaW5hdGVbNV0pLChUfHwtMSE9PUEuaW5kZXhPZihcIndcIikpJiZNLnB1c2goXCJ3OiBcIit3LndMYWJlbCksdy5ub3JtTGFiZWw9cC50cmFjZUNvb3JkaW5hdGVbNl0udG9QcmVjaXNpb24oMyksKFR8fC0xIT09QS5pbmRleE9mKFwibm9ybVwiKSkmJk0ucHVzaChcIm5vcm06IFwiK3cubm9ybUxhYmVsKSxcInN0cmVhbXR1YmVcIj09PWUudHlwZSYmKHcuZGl2ZXJnZW5jZUxhYmVsPXAudHJhY2VDb29yZGluYXRlWzddLnRvUHJlY2lzaW9uKDMpLChUfHwtMSE9PUEuaW5kZXhPZihcImRpdmVyZ2VuY2VcIikpJiZNLnB1c2goXCJkaXZlcmdlbmNlOiBcIit3LmRpdmVyZ2VuY2VMYWJlbCkpLHAudGV4dExhYmVsJiZNLnB1c2gocC50ZXh0TGFiZWwpLHg9TS5qb2luKFwiPGJyPlwiKSk6XCJpc29zdXJmYWNlXCI9PT1lLnR5cGV8fFwidm9sdW1lXCI9PT1lLnR5cGU/KHcudmFsdWVMYWJlbD1oLnRpY2tUZXh0KHQubW9ja0F4aXMsdC5tb2NrQXhpcy5kMmwocC50cmFjZUNvb3JkaW5hdGVbM10pLFwiaG92ZXJcIikudGV4dCxNLnB1c2goXCJ2YWx1ZTogXCIrdy52YWx1ZUxhYmVsKSxwLnRleHRMYWJlbCYmTS5wdXNoKHAudGV4dExhYmVsKSx4PU0uam9pbihcIjxicj5cIikpOng9cC50ZXh0TGFiZWw7dmFyIFM9e3g6cC50cmFjZUNvb3JkaW5hdGVbMF0seTpwLnRyYWNlQ29vcmRpbmF0ZVsxXSx6OnAudHJhY2VDb29yZGluYXRlWzJdLGRhdGE6Yi5faW5wdXQsZnVsbERhdGE6YixjdXJ2ZU51bWJlcjpiLmluZGV4LHBvaW50TnVtYmVyOl99O2YuYXBwZW5kQXJyYXlQb2ludFZhbHVlKFMsYixfKSxlLl9tb2R1bGUuZXZlbnREYXRhJiYoUz1iLl9tb2R1bGUuZXZlbnREYXRhKFMscCxiLHt9LF8pKTt2YXIgRT17cG9pbnRzOltTXX07dC5mdWxsU2NlbmVMYXlvdXQuaG92ZXJtb2RlJiZmLmxvbmVIb3Zlcih7dHJhY2U6Yix4OiguNSsuNSptWzBdL21bM10pKmEseTooLjUtLjUqbVsxXS9tWzNdKSpvLHhMYWJlbDp3LnhMYWJlbCx5TGFiZWw6dy55TGFiZWwsekxhYmVsOncuekxhYmVsLHRleHQ6eCxuYW1lOmMubmFtZSxjb2xvcjpmLmNhc3RIb3Zlck9wdGlvbihiLF8sXCJiZ2NvbG9yXCIpfHxjLmNvbG9yLGJvcmRlckNvbG9yOmYuY2FzdEhvdmVyT3B0aW9uKGIsXyxcImJvcmRlcmNvbG9yXCIpLGZvbnRGYW1pbHk6Zi5jYXN0SG92ZXJPcHRpb24oYixfLFwiZm9udC5mYW1pbHlcIiksZm9udFNpemU6Zi5jYXN0SG92ZXJPcHRpb24oYixfLFwiZm9udC5zaXplXCIpLGZvbnRDb2xvcjpmLmNhc3RIb3Zlck9wdGlvbihiLF8sXCJmb250LmNvbG9yXCIpLG5hbWVMZW5ndGg6Zi5jYXN0SG92ZXJPcHRpb24oYixfLFwibmFtZWxlbmd0aFwiKSx0ZXh0QWxpZ246Zi5jYXN0SG92ZXJPcHRpb24oYixfLFwiYWxpZ25cIiksaG92ZXJ0ZW1wbGF0ZTp1LmNhc3RPcHRpb24oYixfLFwiaG92ZXJ0ZW1wbGF0ZVwiKSxob3ZlcnRlbXBsYXRlTGFiZWxzOnUuZXh0ZW5kRmxhdCh7fSxTLHcpLGV2ZW50RGF0YTpbU119LHtjb250YWluZXI6bixnZDpyfSkscC5idXR0b25zJiZwLmRpc3RhbmNlPDU/ci5lbWl0KFwicGxvdGx5X2NsaWNrXCIsRSk6ci5lbWl0KFwicGxvdGx5X2hvdmVyXCIsRSkscz1FfWVsc2UgZi5sb25lVW5ob3ZlcihuKSxyLmVtaXQoXCJwbG90bHlfdW5ob3ZlclwiLHMpO3QuZHJhd0Fubm90YXRpb25zKHQpfS5iaW5kKG51bGwsdCksdC50cmFjZXM9e30sdC5tYWtlNHRoRGltZW5zaW9uKCksITB9ZnVuY3Rpb24gYih0LGUpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksbj10LmNvbnRhaW5lcjt0aGlzLmdyYXBoRGl2PXQuZ3JhcGhEaXY7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcInN2Z1wiKTtpLnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixpLnN0eWxlLnRvcD1pLnN0eWxlLmxlZnQ9XCIwcHhcIixpLnN0eWxlLndpZHRoPWkuc3R5bGUuaGVpZ2h0PVwiMTAwJVwiLGkuc3R5bGVbXCJ6LWluZGV4XCJdPTIwLGkuc3R5bGVbXCJwb2ludGVyLWV2ZW50c1wiXT1cIm5vbmVcIixyLmFwcGVuZENoaWxkKGkpLHRoaXMuc3ZnQ29udGFpbmVyPWksci5pZD10LmlkLHIuc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwiLHIuc3R5bGUudG9wPXIuc3R5bGUubGVmdD1cIjBweFwiLHIuc3R5bGUud2lkdGg9ci5zdHlsZS5oZWlnaHQ9XCIxMDAlXCIsbi5hcHBlbmRDaGlsZChyKSx0aGlzLmZ1bGxMYXlvdXQ9ZSx0aGlzLmlkPXQuaWR8fFwic2NlbmVcIix0aGlzLmZ1bGxTY2VuZUxheW91dD1lW3RoaXMuaWRdLHRoaXMucGxvdEFyZ3M9W1tdLHt9LHt9XSx0aGlzLmF4ZXNPcHRpb25zPXYoZSxlW3RoaXMuaWRdKSx0aGlzLnNwaWtlT3B0aW9ucz1tKGVbdGhpcy5pZF0pLHRoaXMuY29udGFpbmVyPXIsdGhpcy5zdGF0aWNNb2RlPSEhdC5zdGF0aWNQbG90LHRoaXMucGl4ZWxSYXRpbz10aGlzLnBpeGVsUmF0aW98fHQucGxvdEdsUGl4ZWxSYXRpb3x8Mix0aGlzLmRhdGFTY2FsZT1bMSwxLDFdLHRoaXMuY29udG91ckxldmVscz1bW10sW10sW11dLHRoaXMuY29udmVydEFubm90YXRpb25zPWMuZ2V0Q29tcG9uZW50TWV0aG9kKFwiYW5ub3RhdGlvbnMzZFwiLFwiY29udmVydFwiKSx0aGlzLmRyYXdBbm5vdGF0aW9ucz1jLmdldENvbXBvbmVudE1ldGhvZChcImFubm90YXRpb25zM2RcIixcImRyYXdcIikseCh0aGlzLHRoaXMucGl4ZWxSYXRpbyl9dmFyIF89Yi5wcm90b3R5cGU7Xy5pbml0aWFsaXplR0xDYW1lcmE9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmZ1bGxTY2VuZUxheW91dC5jYW1lcmEsZT1cIm9ydGhvZ3JhcGhpY1wiPT09dC5wcm9qZWN0aW9uLnR5cGU7dGhpcy5jYW1lcmE9YSh0aGlzLmNvbnRhaW5lcix7Y2VudGVyOlt0LmNlbnRlci54LHQuY2VudGVyLnksdC5jZW50ZXIuel0sZXllOlt0LmV5ZS54LHQuZXllLnksdC5leWUuel0sdXA6W3QudXAueCx0LnVwLnksdC51cC56XSxfb3J0aG86ZSx6b29tTWluOi4wMSx6b29tTWF4OjEwMCxtb2RlOlwib3JiaXRcIn0pfSxfLnJlY292ZXJDb250ZXh0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMuZ2xwbG90LmdsLHI9dGhpcy5nbHBsb3QuY2FudmFzLG49dGhpcy5nbHBsb3QuY2FtZXJhLGk9dGhpcy5nbHBsb3QucGl4ZWxSYXRpbzt0aGlzLmdscGxvdC5kaXNwb3NlKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIGEoKXtlLmlzQ29udGV4dExvc3QoKT9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYSk6eCh0LG4saSxyKT90LnBsb3QuYXBwbHkodCx0LnBsb3RBcmdzKTp1LmVycm9yKFwiQ2F0YXN0cm9waGljIGFuZCB1bnJlY292ZXJhYmxlIFdlYkdMIGVycm9yLiBDb250ZXh0IGxvc3QuXCIpfSl9O3ZhciB3PVtcInhheGlzXCIsXCJ5YXhpc1wiLFwiemF4aXNcIl07ZnVuY3Rpb24gayh0LGUscil7Zm9yKHZhciBuPXQuZnVsbFNjZW5lTGF5b3V0LGk9MDtpPDM7aSsrKXt2YXIgYT13W2ldLG89YS5jaGFyQXQoMCkscz1uW2FdLGw9ZVtvXSxjPWVbbytcImNhbGVuZGFyXCJdLGg9ZVtcIl9cIitvK1wibGVuZ3RoXCJdO2lmKHUuaXNBcnJheU9yVHlwZWRBcnJheShsKSlmb3IodmFyIGYscD0wO3A8KGh8fGwubGVuZ3RoKTtwKyspaWYodS5pc0FycmF5T3JUeXBlZEFycmF5KGxbcF0pKWZvcih2YXIgZD0wO2Q8bFtwXS5sZW5ndGg7KytkKWY9cy5kMmwobFtwXVtkXSwwLGMpLCFpc05hTihmKSYmaXNGaW5pdGUoZikmJihyWzBdW2ldPU1hdGgubWluKHJbMF1baV0sZiksclsxXVtpXT1NYXRoLm1heChyWzFdW2ldLGYpKTtlbHNlIGY9cy5kMmwobFtwXSwwLGMpLCFpc05hTihmKSYmaXNGaW5pdGUoZikmJihyWzBdW2ldPU1hdGgubWluKHJbMF1baV0sZiksclsxXVtpXT1NYXRoLm1heChyWzFdW2ldLGYpKTtlbHNlIHJbMF1baV09TWF0aC5taW4oclswXVtpXSwwKSxyWzFdW2ldPU1hdGgubWF4KHJbMV1baV0saC0xKX19ZnVuY3Rpb24gQSh0KXtyZXR1cm57dXA6e3g6dC51cFswXSx5OnQudXBbMV0sejp0LnVwWzJdfSxjZW50ZXI6e3g6dC5jZW50ZXJbMF0seTp0LmNlbnRlclsxXSx6OnQuY2VudGVyWzJdfSxleWU6e3g6dC5leWVbMF0seTp0LmV5ZVsxXSx6OnQuZXllWzJdfSxwcm9qZWN0aW9uOnt0eXBlOiEwPT09dC5fb3J0aG8/XCJvcnRob2dyYXBoaWNcIjpcInBlcnNwZWN0aXZlXCJ9fX1fLnBsb3Q9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMucGxvdEFyZ3M9W3QsZSxyXSwhdGhpcy5nbHBsb3QuY29udGV4dExvc3Qpe3ZhciBuLGksYSxvLHMsbCxjPWVbdGhpcy5pZF0sdT1yW3RoaXMuaWRdO2MuYmdjb2xvcj90aGlzLmdscGxvdC5jbGVhckNvbG9yPXAoYy5iZ2NvbG9yKTp0aGlzLmdscGxvdC5jbGVhckNvbG9yPVswLDAsMCwwXSx0aGlzLmdscGxvdC5zbmFwVG9EYXRhPSEwLHRoaXMuZnVsbExheW91dD1lLHRoaXMuZnVsbFNjZW5lTGF5b3V0PWMsdGhpcy5nbHBsb3RMYXlvdXQ9Yyx0aGlzLmF4ZXNPcHRpb25zLm1lcmdlKGUsYyksdGhpcy5zcGlrZU9wdGlvbnMubWVyZ2UoYyksdGhpcy5zZXRDYW1lcmEoYy5jYW1lcmEpLHRoaXMudXBkYXRlRngoYy5kcmFnbW9kZSxjLmhvdmVybW9kZSksdGhpcy5jYW1lcmEuZW5hYmxlV2hlZWw9dGhpcy5ncmFwaERpdi5fY29udGV4dC5fc2Nyb2xsWm9vbS5nbDNkLHRoaXMuZ2xwbG90LnVwZGF0ZSh7fSksdGhpcy5zZXRDb252ZXJ0KHMpLHQ/QXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKTp0PVtdO3ZhciBoPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dO2ZvcihhPTA7YTx0Lmxlbmd0aDsrK2EpITA9PT0obj10W2FdKS52aXNpYmxlJiZrKHRoaXMsbixoKTshZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5mdWxsU2NlbmVMYXlvdXQsbj1yLmFubm90YXRpb25zfHxbXSxpPTA7aTwzO2krKylmb3IodmFyIGE9d1tpXSxvPWEuY2hhckF0KDApLHM9clthXSxsPTA7bDxuLmxlbmd0aDtsKyspe3ZhciBjPW5bbF07aWYoYy52aXNpYmxlKXt2YXIgdT1zLnIybChjW29dKTshaXNOYU4odSkmJmlzRmluaXRlKHUpJiYoZVswXVtpXT1NYXRoLm1pbihlWzBdW2ldLHUpLGVbMV1baV09TWF0aC5tYXgoZVsxXVtpXSx1KSl9fX0odGhpcyxoKTt2YXIgZj1bMSwxLDFdO2ZvcihvPTA7bzwzOysrbyloWzFdW29dPT09aFswXVtvXT9mW29dPTE6ZltvXT0xLyhoWzFdW29dLWhbMF1bb10pO2Zvcih0aGlzLmRhdGFTY2FsZT1mLHRoaXMuY29udmVydEFubm90YXRpb25zKHRoaXMpLGE9MDthPHQubGVuZ3RoOysrYSkhMD09PShuPXRbYV0pLnZpc2libGUmJigoaT10aGlzLnRyYWNlc1tuLnVpZF0pP2kuZGF0YS50eXBlPT09bi50eXBlP2kudXBkYXRlKG4pOihpLmRpc3Bvc2UoKSxpPW4uX21vZHVsZS5wbG90KHRoaXMsbiksdGhpcy50cmFjZXNbbi51aWRdPWkpOihpPW4uX21vZHVsZS5wbG90KHRoaXMsbiksdGhpcy50cmFjZXNbbi51aWRdPWkpLGkubmFtZT1uLm5hbWUpO3ZhciBkPU9iamVjdC5rZXlzKHRoaXMudHJhY2VzKTt0OmZvcihhPTA7YTxkLmxlbmd0aDsrK2Epe2ZvcihvPTA7bzx0Lmxlbmd0aDsrK28paWYodFtvXS51aWQ9PT1kW2FdJiYhMD09PXRbb10udmlzaWJsZSljb250aW51ZSB0OyhpPXRoaXMudHJhY2VzW2RbYV1dKS5kaXNwb3NlKCksZGVsZXRlIHRoaXMudHJhY2VzW2RbYV1dfXRoaXMuZ2xwbG90Lm9iamVjdHMuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0Ll90cmFjZS5kYXRhLmluZGV4LWUuX3RyYWNlLmRhdGEuaW5kZXh9KTt2YXIgZz1bWzAsMCwwXSxbMCwwLDBdXSx2PVtdLG09e307Zm9yKGE9MDthPDM7KythKXtpZigobD0ocz1jW3dbYV1dKS50eXBlKWluIG0/KG1bbF0uYWNjKj1mW2FdLG1bbF0uY291bnQrPTEpOm1bbF09e2FjYzpmW2FdLGNvdW50OjF9LHMuYXV0b3JhbmdlKXtnWzBdW2FdPTEvMCxnWzFdW2FdPS0xLzA7dmFyIHk9dGhpcy5nbHBsb3Qub2JqZWN0cyx4PXRoaXMuZnVsbFNjZW5lTGF5b3V0LmFubm90YXRpb25zfHxbXSxiPXMuX25hbWUuY2hhckF0KDApO2ZvcihvPTA7bzx5Lmxlbmd0aDtvKyspe3ZhciBfPXlbb10sQT1fLmJvdW5kcyxUPV8uX3RyYWNlLmRhdGEuX3BhZHx8MDtcIkVycm9yQmFyc1wiPT09Xy5jb25zdHJ1Y3Rvci5uYW1lJiZzLl9sb3dlckxvZ0Vycm9yQm91bmQ/Z1swXVthXT1NYXRoLm1pbihnWzBdW2FdLHMuX2xvd2VyTG9nRXJyb3JCb3VuZCk6Z1swXVthXT1NYXRoLm1pbihnWzBdW2FdLEFbMF1bYV0vZlthXS1UKSxnWzFdW2FdPU1hdGgubWF4KGdbMV1bYV0sQVsxXVthXS9mW2FdK1QpfWZvcihvPTA7bzx4Lmxlbmd0aDtvKyspe3ZhciBNPXhbb107aWYoTS52aXNpYmxlKXt2YXIgUz1zLnIybChNW2JdKTtnWzBdW2FdPU1hdGgubWluKGdbMF1bYV0sUyksZ1sxXVthXT1NYXRoLm1heChnWzFdW2FdLFMpfX1pZihcInJhbmdlbW9kZVwiaW4gcyYmXCJ0b3plcm9cIj09PXMucmFuZ2Vtb2RlJiYoZ1swXVthXT1NYXRoLm1pbihnWzBdW2FdLDApLGdbMV1bYV09TWF0aC5tYXgoZ1sxXVthXSwwKSksZ1swXVthXT5nWzFdW2FdKWdbMF1bYV09LTEsZ1sxXVthXT0xO2Vsc2V7dmFyIEU9Z1sxXVthXS1nWzBdW2FdO2dbMF1bYV0tPUUvMzIsZ1sxXVthXSs9RS8zMn1pZihcInJldmVyc2VkXCI9PT1zLmF1dG9yYW5nZSl7dmFyIEM9Z1swXVthXTtnWzBdW2FdPWdbMV1bYV0sZ1sxXVthXT1DfX1lbHNle3ZhciBMPXMucmFuZ2U7Z1swXVthXT1zLnIybChMWzBdKSxnWzFdW2FdPXMucjJsKExbMV0pfWdbMF1bYV09PT1nWzFdW2FdJiYoZ1swXVthXS09MSxnWzFdW2FdKz0xKSx2W2FdPWdbMV1bYV0tZ1swXVthXSx0aGlzLmdscGxvdC5ib3VuZHNbMF1bYV09Z1swXVthXSpmW2FdLHRoaXMuZ2xwbG90LmJvdW5kc1sxXVthXT1nWzFdW2FdKmZbYV19dmFyIHo9WzEsMSwxXTtmb3IoYT0wO2E8MzsrK2Epe3ZhciBPPW1bbD0ocz1jW3dbYV1dKS50eXBlXTt6W2FdPU1hdGgucG93KE8uYWNjLDEvTy5jb3VudCkvZlthXX12YXIgSTtpZihcImF1dG9cIj09PWMuYXNwZWN0bW9kZSlJPU1hdGgubWF4LmFwcGx5KG51bGwseikvTWF0aC5taW4uYXBwbHkobnVsbCx6KTw9ND96OlsxLDEsMV07ZWxzZSBpZihcImN1YmVcIj09PWMuYXNwZWN0bW9kZSlJPVsxLDEsMV07ZWxzZSBpZihcImRhdGFcIj09PWMuYXNwZWN0bW9kZSlJPXo7ZWxzZXtpZihcIm1hbnVhbFwiIT09Yy5hc3BlY3Rtb2RlKXRocm93IG5ldyBFcnJvcihcInNjZW5lLmpzIGFzcGVjdFJhdGlvIHdhcyBub3Qgb25lIG9mIHRoZSBlbnVtZXJhdGVkIHR5cGVzXCIpO3ZhciBEPWMuYXNwZWN0cmF0aW87ST1bRC54LEQueSxELnpdfWMuYXNwZWN0cmF0aW8ueD11LmFzcGVjdHJhdGlvLng9SVswXSxjLmFzcGVjdHJhdGlvLnk9dS5hc3BlY3RyYXRpby55PUlbMV0sYy5hc3BlY3RyYXRpby56PXUuYXNwZWN0cmF0aW8uej1JWzJdLHRoaXMuZ2xwbG90LmFzcGVjdD1JO3ZhciBQPWMuZG9tYWlufHxudWxsLFI9ZS5fc2l6ZXx8bnVsbDtpZihQJiZSKXt2YXIgRj10aGlzLmNvbnRhaW5lci5zdHlsZTtGLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixGLmxlZnQ9Ui5sK1AueFswXSpSLncrXCJweFwiLEYudG9wPVIudCsoMS1QLnlbMV0pKlIuaCtcInB4XCIsRi53aWR0aD1SLncqKFAueFsxXS1QLnhbMF0pK1wicHhcIixGLmhlaWdodD1SLmgqKFAueVsxXS1QLnlbMF0pK1wicHhcIn10aGlzLmdscGxvdC5yZWRyYXcoKX19LF8uZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZ2xwbG90JiYodGhpcy5jYW1lcmEubW91c2VMaXN0ZW5lci5lbmFibGVkPSExLHRoaXMuY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ3aGVlbFwiLHRoaXMuY2FtZXJhLndoZWVsTGlzdGVuZXIpLHRoaXMuY2FtZXJhPXRoaXMuZ2xwbG90LmNhbWVyYT1udWxsLHRoaXMuZ2xwbG90LmRpc3Bvc2UoKSx0aGlzLmNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyKSx0aGlzLmdscGxvdD1udWxsKX0sXy5nZXRDYW1lcmE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbHBsb3QuY2FtZXJhLnZpZXcucmVjYWxjTWF0cml4KHRoaXMuY2FtZXJhLnZpZXcubGFzdFQoKSksQSh0aGlzLmdscGxvdC5jYW1lcmEpfSxfLnNldENhbWVyYT1mdW5jdGlvbih0KXt2YXIgZTt0aGlzLmdscGxvdC5jYW1lcmEubG9va0F0LmFwcGx5KHRoaXMsW1soZT10KS5leWUueCxlLmV5ZS55LGUuZXllLnpdLFtlLmNlbnRlci54LGUuY2VudGVyLnksZS5jZW50ZXIuel0sW2UudXAueCxlLnVwLnksZS51cC56XV0pO3ZhciByPVwib3J0aG9ncmFwaGljXCI9PT10LnByb2plY3Rpb24udHlwZTtpZihyIT09dGhpcy5nbHBsb3QuY2FtZXJhLl9vcnRobyl7dGhpcy5nbHBsb3QucmVkcmF3KCk7dmFyIG49dGhpcy5nbHBsb3QucGl4ZWxSYXRpbyxpPXRoaXMuZ2xwbG90LmNsZWFyQ29sb3I7dGhpcy5nbHBsb3QuZ2wuY2xlYXJDb2xvcihpWzBdLGlbMV0saVsyXSxpWzNdKSx0aGlzLmdscGxvdC5nbC5jbGVhcih0aGlzLmdscGxvdC5nbC5ERVBUSF9CVUZGRVJfQklUfHRoaXMuZ2xwbG90LmdsLkNPTE9SX0JVRkZFUl9CSVQpLHRoaXMuZ2xwbG90LmRpc3Bvc2UoKSx4KHRoaXMsbiksdGhpcy5nbHBsb3QuY2FtZXJhLl9vcnRobz1yfX0sXy5zYXZlQ2FtZXJhPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZnVsbExheW91dCxyPXRoaXMuZ2V0Q2FtZXJhKCksbj11Lm5lc3RlZFByb3BlcnR5KHQsdGhpcy5pZCtcIi5jYW1lcmFcIiksaT1uLmdldCgpLGE9ITE7ZnVuY3Rpb24gbyh0LGUscixuKXt2YXIgaT1bXCJ1cFwiLFwiY2VudGVyXCIsXCJleWVcIl0sYT1bXCJ4XCIsXCJ5XCIsXCJ6XCJdO3JldHVybiBlW2lbcl1dJiZ0W2lbcl1dW2Fbbl1dPT09ZVtpW3JdXVthW25dXX1pZih2b2lkIDA9PT1pKWE9ITA7ZWxzZXtmb3IodmFyIHM9MDtzPDM7cysrKWZvcih2YXIgbD0wO2w8MztsKyspaWYoIW8ocixpLHMsbCkpe2E9ITA7YnJlYWt9KCFpLnByb2plY3Rpb258fHIucHJvamVjdGlvbiYmci5wcm9qZWN0aW9uLnR5cGUhPT1pLnByb2plY3Rpb24udHlwZSkmJihhPSEwKX1pZihhKXt2YXIgaD17fTtoW3RoaXMuaWQrXCIuY2FtZXJhXCJdPWksYy5jYWxsKFwiX3N0b3JlRGlyZWN0R1VJRWRpdFwiLHQsZS5fcHJlR1VJLGgpLG4uc2V0KHIpLHUubmVzdGVkUHJvcGVydHkoZSx0aGlzLmlkK1wiLmNhbWVyYVwiKS5zZXQocil9cmV0dXJuIGF9LF8udXBkYXRlRng9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmNhbWVyYTtpZihyKWlmKFwib3JiaXRcIj09PXQpci5tb2RlPVwib3JiaXRcIixyLmtleUJpbmRpbmdNb2RlPVwicm90YXRlXCI7ZWxzZSBpZihcInR1cm50YWJsZVwiPT09dCl7ci51cD1bMCwwLDFdLHIubW9kZT1cInR1cm50YWJsZVwiLHIua2V5QmluZGluZ01vZGU9XCJyb3RhdGVcIjt2YXIgbj10aGlzLmdyYXBoRGl2LGk9bi5fZnVsbExheW91dCxhPXRoaXMuZnVsbFNjZW5lTGF5b3V0LmNhbWVyYSxvPWEudXAueCxzPWEudXAueSxsPWEudXAuejtpZihsL01hdGguc3FydChvKm8rcypzK2wqbCk8Ljk5OSl7dmFyIGg9dGhpcy5pZCtcIi5jYW1lcmEudXBcIixmPXt4OjAseTowLHo6MX0scD17fTtwW2hdPWY7dmFyIGQ9bi5sYXlvdXQ7Yy5jYWxsKFwiX3N0b3JlRGlyZWN0R1VJRWRpdFwiLGQsaS5fcHJlR1VJLHApLGEudXA9Zix1Lm5lc3RlZFByb3BlcnR5KGQsaCkuc2V0KGYpfX1lbHNlIHIua2V5QmluZGluZ01vZGU9dDt0aGlzLmZ1bGxTY2VuZUxheW91dC5ob3Zlcm1vZGU9ZX0sXy50b0ltYWdlPWZ1bmN0aW9uKHQpe3R8fCh0PVwicG5nXCIpLHRoaXMuc3RhdGljTW9kZSYmdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQobiksdGhpcy5nbHBsb3QucmVkcmF3KCk7dmFyIGU9dGhpcy5nbHBsb3QuZ2wscj1lLmRyYXdpbmdCdWZmZXJXaWR0aCxpPWUuZHJhd2luZ0J1ZmZlckhlaWdodDtlLmJpbmRGcmFtZWJ1ZmZlcihlLkZSQU1FQlVGRkVSLG51bGwpO3ZhciBhPW5ldyBVaW50OEFycmF5KHIqaSo0KTtlLnJlYWRQaXhlbHMoMCwwLHIsaSxlLlJHQkEsZS5VTlNJR05FRF9CWVRFLGEpO2Zvcih2YXIgbz0wLHM9aS0xO288czsrK28sLS1zKWZvcih2YXIgbD0wO2w8cjsrK2wpZm9yKHZhciBjPTA7Yzw0OysrYyl7dmFyIHU9YVs0KihyKm8rbCkrY107YVs0KihyKm8rbCkrY109YVs0KihyKnMrbCkrY10sYVs0KihyKnMrbCkrY109dX12YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO2gud2lkdGg9cixoLmhlaWdodD1pO3ZhciBmLHA9aC5nZXRDb250ZXh0KFwiMmRcIiksZD1wLmNyZWF0ZUltYWdlRGF0YShyLGkpO3N3aXRjaChkLmRhdGEuc2V0KGEpLHAucHV0SW1hZ2VEYXRhKGQsMCwwKSx0KXtjYXNlXCJqcGVnXCI6Zj1oLnRvRGF0YVVSTChcImltYWdlL2pwZWdcIik7YnJlYWs7Y2FzZVwid2VicFwiOmY9aC50b0RhdGFVUkwoXCJpbWFnZS93ZWJwXCIpO2JyZWFrO2RlZmF1bHQ6Zj1oLnRvRGF0YVVSTChcImltYWdlL3BuZ1wiKX1yZXR1cm4gdGhpcy5zdGF0aWNNb2RlJiZ0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZChuKSxmfSxfLnNldENvbnZlcnQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PDM7dCsrKXt2YXIgZT10aGlzLmZ1bGxTY2VuZUxheW91dFt3W3RdXTtoLnNldENvbnZlcnQoZSx0aGlzLmZ1bGxMYXlvdXQpLGUuc2V0U2NhbGU9dS5ub29wfX0sXy5tYWtlNHRoRGltZW5zaW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5ncmFwaERpdi5fZnVsbExheW91dDt0aGlzLm1vY2tBeGlzPXt0eXBlOlwibGluZWFyXCIsc2hvd2V4cG9uZW50OlwiYWxsXCIsZXhwb25lbnRmb3JtYXQ6XCJCXCJ9LGguc2V0Q29udmVydCh0aGlzLm1vY2tBeGlzLHQpfSxlLmV4cG9ydHM9Yn0se1wiLi4vLi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9zaG93X25vX3dlYmdsX21zZ1wiOjcyMixcIi4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIjo3MjQsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9sYXlvdXQvY29udmVydFwiOjc5MyxcIi4vbGF5b3V0L3NwaWtlc1wiOjc5NixcIi4vbGF5b3V0L3RpY2tfbWFya3NcIjo3OTcsXCIuL3Byb2plY3RcIjo3OTgsXCJnbC1wbG90M2RcIjoyODcsXCJoYXMtcGFzc2l2ZS1ldmVudHNcIjo0MDQsXCJ3ZWJnbC1jb250ZXh0XCI6NTQxfV0sODAwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe249bnx8dC5sZW5ndGg7Zm9yKHZhciBpPW5ldyBBcnJheShuKSxhPTA7YTxuO2ErKylpW2FdPVt0W2FdLGVbYV0sclthXV07cmV0dXJuIGl9fSx7fV0sODAxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vZm9udF9hdHRyaWJ1dGVzXCIpLGk9dChcIi4vYW5pbWF0aW9uX2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzXCIpLG89dChcIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9sYXlvdXRfYXR0cmlidXRlc1wiKSxzPXQoXCIuL3BhZF9hdHRyaWJ1dGVzXCIpLGw9dChcIi4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxjPW4oe2VkaXRUeXBlOlwiY2FsY1wifSk7Yy5mYW1pbHkuZGZsdD0nXCJPcGVuIFNhbnNcIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLGMuc2l6ZS5kZmx0PTEyLGMuY29sb3IuZGZsdD1hLmRlZmF1bHRMaW5lLGUuZXhwb3J0cz17Zm9udDpjLHRpdGxlOnt0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJsYXlvdXRzdHlsZVwifSxmb250Om4oe2VkaXRUeXBlOlwibGF5b3V0c3R5bGVcIn0pLHhyZWY6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsZGZsdDpcImNvbnRhaW5lclwiLHZhbHVlczpbXCJjb250YWluZXJcIixcInBhcGVyXCJdLGVkaXRUeXBlOlwibGF5b3V0c3R5bGVcIn0seXJlZjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIixkZmx0OlwiY29udGFpbmVyXCIsdmFsdWVzOltcImNvbnRhaW5lclwiLFwicGFwZXJcIl0sZWRpdFR5cGU6XCJsYXlvdXRzdHlsZVwifSx4Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDouNSxlZGl0VHlwZTpcImxheW91dHN0eWxlXCJ9LHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OlwiYXV0b1wiLGVkaXRUeXBlOlwibGF5b3V0c3R5bGVcIn0seGFuY2hvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIixkZmx0OlwiYXV0b1wiLHZhbHVlczpbXCJhdXRvXCIsXCJsZWZ0XCIsXCJjZW50ZXJcIixcInJpZ2h0XCJdLGVkaXRUeXBlOlwibGF5b3V0c3R5bGVcIn0seWFuY2hvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIixkZmx0OlwiYXV0b1wiLHZhbHVlczpbXCJhdXRvXCIsXCJ0b3BcIixcIm1pZGRsZVwiLFwiYm90dG9tXCJdLGVkaXRUeXBlOlwibGF5b3V0c3R5bGVcIn0scGFkOmwocyh7ZWRpdFR5cGU6XCJsYXlvdXRzdHlsZVwifSkse30pLGVkaXRUeXBlOlwibGF5b3V0c3R5bGVcIn0sYXV0b3NpemU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMSxlZGl0VHlwZTpcIm5vbmVcIn0sd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MTAsZGZsdDo3MDAsZWRpdFR5cGU6XCJwbG90XCJ9LGhlaWdodDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjoxMCxkZmx0OjQ1MCxlZGl0VHlwZTpcInBsb3RcIn0sbWFyZ2luOntsOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDo4MCxlZGl0VHlwZTpcInBsb3RcIn0scjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6ODAsZWRpdFR5cGU6XCJwbG90XCJ9LHQ6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjEwMCxlZGl0VHlwZTpcInBsb3RcIn0sYjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6ODAsZWRpdFR5cGU6XCJwbG90XCJ9LHBhZDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTpcInBsb3RcIn0sYXV0b2V4cGFuZDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwicGxvdFwifSxlZGl0VHlwZTpcInBsb3RcIn0scGFwZXJfYmdjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDphLmJhY2tncm91bmQsZWRpdFR5cGU6XCJwbG90XCJ9LHBsb3RfYmdjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDphLmJhY2tncm91bmQsZWRpdFR5cGU6XCJsYXlvdXRzdHlsZVwifSxzZXBhcmF0b3JzOnt2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJwbG90XCJ9LGhpZGVzb3VyY2VzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEsZWRpdFR5cGU6XCJwbG90XCJ9LHNob3dsZWdlbmQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZWRpdFR5cGU6XCJsZWdlbmRcIn0sY29sb3J3YXk6e3ZhbFR5cGU6XCJjb2xvcmxpc3RcIixkZmx0OmEuZGVmYXVsdHMsZWRpdFR5cGU6XCJjYWxjXCJ9LGNvbG9yc2NhbGU6byxkYXRhcmV2aXNpb246e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImNhbGNcIn0sdWlyZXZpc2lvbjp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwibm9uZVwifSxlZGl0cmV2aXNpb246e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcIm5vbmVcIn0sc2VsZWN0aW9ucmV2aXNpb246e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcIm5vbmVcIn0sdGVtcGxhdGU6e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImNhbGNcIn0sbW9kZWJhcjp7b3JpZW50YXRpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInZcIixcImhcIl0sZGZsdDpcImhcIixlZGl0VHlwZTpcIm1vZGViYXJcIn0sYmdjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJtb2RlYmFyXCJ9LGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcIm1vZGViYXJcIn0sYWN0aXZlY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwibW9kZWJhclwifSx1aXJldmlzaW9uOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJub25lXCJ9LGVkaXRUeXBlOlwibW9kZWJhclwifSxtZXRhOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwicGxvdFwifSx0cmFuc2l0aW9uOmwoe30saS50cmFuc2l0aW9uLHtlZGl0VHlwZTpcIm5vbmVcIn0pLF9kZXByZWNhdGVkOnt0aXRsZTp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwibGF5b3V0c3R5bGVcIn0sdGl0bGVmb250Om4oe2VkaXRUeXBlOlwibGF5b3V0c3R5bGVcIn0pfX19LHtcIi4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiOjU3NyxcIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9sYXlvdXRfYXR0cmlidXRlc1wiOjU5MSxcIi4uL2xpYi9leHRlbmRcIjo2OTEsXCIuL2FuaW1hdGlvbl9hdHRyaWJ1dGVzXCI6NzQ0LFwiLi9mb250X2F0dHJpYnV0ZXNcIjo3NzUsXCIuL3BhZF9hdHRyaWJ1dGVzXCI6ODA5fV0sODAyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtyZXF1aXJlZFZlcnNpb246XCIwLjQ1LjBcIixzdHlsZVVybFByZWZpeDpcIm1hcGJveDovL3N0eWxlcy9tYXBib3gvXCIsc3R5bGVVcmxTdWZmaXg6XCJ2OVwiLGNvbnRyb2xDb250YWluZXJDbGFzc05hbWU6XCJtYXBib3hnbC1jb250cm9sLWNvbnRhaW5lclwiLHdyb25nVmVyc2lvbkVycm9yTXNnOltcIllvdXIgY3VzdG9tIHBsb3RseS5qcyBidW5kbGUgaXMgbm90IHVzaW5nIHRoZSBjb3JyZWN0IG1hcGJveC1nbCB2ZXJzaW9uXCIsXCJQbGVhc2UgaW5zdGFsbCBtYXBib3gtZ2xAMC40NS4wLlwiXS5qb2luKFwiXFxuXCIpLG5vQWNjZXNzVG9rZW5FcnJvck1zZzpbXCJNaXNzaW5nIE1hcGJveCBhY2Nlc3MgdG9rZW4uXCIsXCJNYXBib3ggdHJhY2UgdHlwZSByZXF1aXJlIGEgTWFwYm94IGFjY2VzcyB0b2tlbiB0byBiZSByZWdpc3RlcmVkLlwiLFwiRm9yIGV4YW1wbGU6XCIsXCIgIFBsb3RseS5wbG90KGdkLCBkYXRhLCBsYXlvdXQsIHsgbWFwYm94QWNjZXNzVG9rZW46ICdteS1hY2Nlc3MtdG9rZW4nIH0pO1wiLFwiTW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vaGVscC9kZWZpbmUtYWNjZXNzLXRva2VuL1wiXS5qb2luKFwiXFxuXCIpLG1hcE9uRXJyb3JNc2c6XCJNYXBib3ggZXJyb3IuXCIsc3R5bGVSdWxlczp7bWFwOlwib3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO1wiLFwibWlzc2luZy1jc3NcIjpcImRpc3BsYXk6bm9uZVwifX19LHt9XSw4MDM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuc3BsaXQoXCIgXCIpLGk9clswXSxhPXJbMV0sbz1uLmlzQXJyYXlPclR5cGVkQXJyYXkoZSk/bi5tZWFuKGUpOmUscz0uNStvLzEwMCxsPTEuNStvLzEwMCxjPVtcIlwiLFwiXCJdLHU9WzAsMF07c3dpdGNoKGkpe2Nhc2VcInRvcFwiOmNbMF09XCJ0b3BcIix1WzFdPS1sO2JyZWFrO2Nhc2VcImJvdHRvbVwiOmNbMF09XCJib3R0b21cIix1WzFdPWx9c3dpdGNoKGEpe2Nhc2VcImxlZnRcIjpjWzFdPVwicmlnaHRcIix1WzBdPS1zO2JyZWFrO2Nhc2VcInJpZ2h0XCI6Y1sxXT1cImxlZnRcIix1WzBdPXN9cmV0dXJue2FuY2hvcjpjWzBdJiZjWzFdP2Muam9pbihcIi1cIik6Y1swXT9jWzBdOmNbMV0/Y1sxXTpcImNlbnRlclwiLG9mZnNldDp1fX19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDgwNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJtYXBib3gtZ2xcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCIpLmdldFN1YnBsb3RDYWxjRGF0YSxvPXQoXCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiKSxzPXQoXCIuL21hcGJveFwiKSxsPXQoXCIuL2NvbnN0YW50c1wiKTtmb3IodmFyIGMgaW4gbC5zdHlsZVJ1bGVzKWkuYWRkU3R5bGVSdWxlKFwiLm1hcGJveGdsLVwiK2MsbC5zdHlsZVJ1bGVzW2NdKTtyLm5hbWU9XCJtYXBib3hcIixyLmF0dHI9XCJzdWJwbG90XCIsci5pZFJvb3Q9XCJtYXBib3hcIixyLmlkUmVnZXg9ci5hdHRyUmVnZXg9aS5jb3VudGVyUmVnZXgoXCJtYXBib3hcIiksci5hdHRyaWJ1dGVzPXtzdWJwbG90Ont2YWxUeXBlOlwic3VicGxvdGlkXCIsZGZsdDpcIm1hcGJveFwiLGVkaXRUeXBlOlwiY2FsY1wifX0sci5sYXlvdXRBdHRyaWJ1dGVzPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9dChcIi4vbGF5b3V0X2RlZmF1bHRzXCIpLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxvPWUuX3N1YnBsb3RzLm1hcGJveDtpZihuLnZlcnNpb24hPT1sLnJlcXVpcmVkVmVyc2lvbil0aHJvdyBuZXcgRXJyb3IobC53cm9uZ1ZlcnNpb25FcnJvck1zZyk7dmFyIGM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0O2lmKFwiXCI9PT10Ll9jb250ZXh0Lm1hcGJveEFjY2Vzc1Rva2VuKXJldHVyblwiXCI7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPXJbZVtuXV07aWYoaS5hY2Nlc3N0b2tlbilyZXR1cm4gaS5hY2Nlc3N0b2tlbn10aHJvdyBuZXcgRXJyb3IobC5ub0FjY2Vzc1Rva2VuRXJyb3JNc2cpfSh0LG8pO24uYWNjZXNzVG9rZW49Yztmb3IodmFyIHU9MDt1PG8ubGVuZ3RoO3UrKyl7dmFyIGg9b1t1XSxmPWEocixcIm1hcGJveFwiLGgpLHA9ZVtoXSxkPXAuX3N1YnBsb3Q7ZHx8KGQ9cyh7Z2Q6dCxjb250YWluZXI6ZS5fZ2xjb250YWluZXIubm9kZSgpLGlkOmgsZnVsbExheW91dDplLHN0YXRpY1Bsb3Q6dC5fY29udGV4dC5zdGF0aWNQbG90fSksZVtoXS5fc3VicGxvdD1kKSxkLnZpZXdJbml0aWFsfHwoZC52aWV3SW5pdGlhbD17Y2VudGVyOmkuZXh0ZW5kRmxhdCh7fSxwLmNlbnRlciksem9vbTpwLnpvb20sYmVhcmluZzpwLmJlYXJpbmcscGl0Y2g6cC5waXRjaH0pLGQucGxvdChmLGUsdC5fcHJvbWlzZXMpfX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9bi5fc3VicGxvdHMubWFwYm94fHxbXSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV07IWVbb10mJm5bb10uX3N1YnBsb3QmJm5bb10uX3N1YnBsb3QuZGVzdHJveSgpfX0sci50b1NWRz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLm1hcGJveCxuPWUuX3NpemUsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1lW3JbaV1dLHM9YS5kb21haW4sbD1hLl9zdWJwbG90LGM9bC50b0ltYWdlKFwicG5nXCIpO2UuX2dsaW1hZ2VzLmFwcGVuZChcInN2ZzppbWFnZVwiKS5hdHRyKHt4bWxuczpvLnN2ZyxcInhsaW5rOmhyZWZcIjpjLHg6bi5sK24udypzLnhbMF0seTpuLnQrbi5oKigxLXMueVsxXSksd2lkdGg6bi53KihzLnhbMV0tcy54WzBdKSxoZWlnaHQ6bi5oKihzLnlbMV0tcy55WzBdKSxwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwibm9uZVwifSksbC5kZXN0cm95KCl9fSxyLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fc3VicGxvdHMubWFwYm94LG49MDtuPHIubGVuZ3RoO24rKyl7ZVtyW25dXS5fc3VicGxvdC51cGRhdGVGeChlKX19fSx7XCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiOjY3OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCI6Nzg0LFwiLi9jb25zdGFudHNcIjo4MDIsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6ODA2LFwiLi9sYXlvdXRfZGVmYXVsdHNcIjo4MDcsXCIuL21hcGJveFwiOjgwOCxcIm1hcGJveC1nbFwiOjQxOX1dLDgwNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9jb252ZXJ0X3RleHRfb3B0c1wiKTtmdW5jdGlvbiBhKHQsZSl7dGhpcy5tYXBib3g9dCx0aGlzLm1hcD10Lm1hcCx0aGlzLnVpZD10LnVpZCtcIi1sYXllclwiK2UsdGhpcy5pZFNvdXJjZT10aGlzLnVpZCtcIi1zb3VyY2VcIix0aGlzLmlkTGF5ZXI9dGhpcy51aWQrXCItbGF5ZXJcIix0aGlzLnNvdXJjZVR5cGU9bnVsbCx0aGlzLnNvdXJjZT1udWxsLHRoaXMubGF5ZXJUeXBlPW51bGwsdGhpcy5iZWxvdz1udWxsLHRoaXMudmlzaWJsZT0hMX12YXIgbz1hLnByb3RvdHlwZTtmdW5jdGlvbiBzKHQpe3ZhciBlPXQuc291cmNlO3JldHVybiB0LnZpc2libGUmJihuLmlzUGxhaW5PYmplY3QoZSl8fFwic3RyaW5nXCI9PXR5cGVvZiBlJiZlLmxlbmd0aD4wKX1mdW5jdGlvbiBsKHQpe3ZhciBlPXt9LHI9e307c3dpdGNoKHQudHlwZSl7Y2FzZVwiY2lyY2xlXCI6bi5leHRlbmRGbGF0KHIse1wiY2lyY2xlLXJhZGl1c1wiOnQuY2lyY2xlLnJhZGl1cyxcImNpcmNsZS1jb2xvclwiOnQuY29sb3IsXCJjaXJjbGUtb3BhY2l0eVwiOnQub3BhY2l0eX0pO2JyZWFrO2Nhc2VcImxpbmVcIjpuLmV4dGVuZEZsYXQocix7XCJsaW5lLXdpZHRoXCI6dC5saW5lLndpZHRoLFwibGluZS1jb2xvclwiOnQuY29sb3IsXCJsaW5lLW9wYWNpdHlcIjp0Lm9wYWNpdHksXCJsaW5lLWRhc2hhcnJheVwiOnQubGluZS5kYXNofSk7YnJlYWs7Y2FzZVwiZmlsbFwiOm4uZXh0ZW5kRmxhdChyLHtcImZpbGwtY29sb3JcIjp0LmNvbG9yLFwiZmlsbC1vdXRsaW5lLWNvbG9yXCI6dC5maWxsLm91dGxpbmVjb2xvcixcImZpbGwtb3BhY2l0eVwiOnQub3BhY2l0eX0pO2JyZWFrO2Nhc2VcInN5bWJvbFwiOnZhciBhPXQuc3ltYm9sLG89aShhLnRleHRwb3NpdGlvbixhLmljb25zaXplKTtuLmV4dGVuZEZsYXQoZSx7XCJpY29uLWltYWdlXCI6YS5pY29uK1wiLTE1XCIsXCJpY29uLXNpemVcIjphLmljb25zaXplLzEwLFwidGV4dC1maWVsZFwiOmEudGV4dCxcInRleHQtc2l6ZVwiOmEudGV4dGZvbnQuc2l6ZSxcInRleHQtYW5jaG9yXCI6by5hbmNob3IsXCJ0ZXh0LW9mZnNldFwiOm8ub2Zmc2V0LFwic3ltYm9sLXBsYWNlbWVudFwiOmEucGxhY2VtZW50fSksbi5leHRlbmRGbGF0KHIse1wiaWNvbi1jb2xvclwiOnQuY29sb3IsXCJ0ZXh0LWNvbG9yXCI6YS50ZXh0Zm9udC5jb2xvcixcInRleHQtb3BhY2l0eVwiOnQub3BhY2l0eX0pfXJldHVybntsYXlvdXQ6ZSxwYWludDpyfX1vLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLnZpc2libGU/dGhpcy5uZWVkc05ld1NvdXJjZSh0KT8odGhpcy5yZW1vdmVMYXllcigpLHRoaXMudXBkYXRlU291cmNlKHQpLHRoaXMudXBkYXRlTGF5ZXIodCkpOnRoaXMubmVlZHNOZXdMYXllcih0KT90aGlzLnVwZGF0ZUxheWVyKHQpOnRoaXMudXBkYXRlU3R5bGUodCk6KHRoaXMudXBkYXRlU291cmNlKHQpLHRoaXMudXBkYXRlTGF5ZXIodCkpLHRoaXMudmlzaWJsZT1zKHQpfSxvLm5lZWRzTmV3U291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNvdXJjZVR5cGUhPT10LnNvdXJjZXR5cGV8fHRoaXMuc291cmNlIT09dC5zb3VyY2V8fHRoaXMubGF5ZXJUeXBlIT09dC50eXBlfSxvLm5lZWRzTmV3TGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGF5ZXJUeXBlIT09dC50eXBlfHx0aGlzLmJlbG93IT09dC5iZWxvd30sby51cGRhdGVTb3VyY2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tYXA7aWYoZS5nZXRTb3VyY2UodGhpcy5pZFNvdXJjZSkmJmUucmVtb3ZlU291cmNlKHRoaXMuaWRTb3VyY2UpLHRoaXMuc291cmNlVHlwZT10LnNvdXJjZXR5cGUsdGhpcy5zb3VyY2U9dC5zb3VyY2Uscyh0KSl7dmFyIHI9ZnVuY3Rpb24odCl7dmFyIGUscj10LnNvdXJjZXR5cGUsbj10LnNvdXJjZSxpPXt0eXBlOnJ9O1wiZ2VvanNvblwiPT09cj9lPVwiZGF0YVwiOlwidmVjdG9yXCI9PT1yJiYoZT1cInN0cmluZ1wiPT10eXBlb2Ygbj9cInVybFwiOlwidGlsZXNcIik7cmV0dXJuIGlbZV09bixpfSh0KTtlLmFkZFNvdXJjZSh0aGlzLmlkU291cmNlLHIpfX0sby51cGRhdGVMYXllcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm1hcCxyPWwodCk7dGhpcy5yZW1vdmVMYXllcigpLHRoaXMubGF5ZXJUeXBlPXQudHlwZSxzKHQpJiZlLmFkZExheWVyKHtpZDp0aGlzLmlkTGF5ZXIsc291cmNlOnRoaXMuaWRTb3VyY2UsXCJzb3VyY2UtbGF5ZXJcIjp0LnNvdXJjZWxheWVyfHxcIlwiLHR5cGU6dC50eXBlLG1pbnpvb206dC5taW56b29tLG1heHpvb206dC5tYXh6b29tLGxheW91dDpyLmxheW91dCxwYWludDpyLnBhaW50fSx0LmJlbG93KX0sby51cGRhdGVTdHlsZT1mdW5jdGlvbih0KXtpZihzKHQpKXt2YXIgZT1sKHQpO3RoaXMubWFwYm94LnNldE9wdGlvbnModGhpcy5pZExheWVyLFwic2V0TGF5b3V0UHJvcGVydHlcIixlLmxheW91dCksdGhpcy5tYXBib3guc2V0T3B0aW9ucyh0aGlzLmlkTGF5ZXIsXCJzZXRQYWludFByb3BlcnR5XCIsZS5wYWludCl9fSxvLnJlbW92ZUxheWVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXA7dC5nZXRMYXllcih0aGlzLmlkTGF5ZXIpJiZ0LnJlbW92ZUxheWVyKHRoaXMuaWRMYXllcil9LG8uZGlzcG9zZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMubWFwO3QucmVtb3ZlTGF5ZXIodGhpcy5pZExheWVyKSx0LnJlbW92ZVNvdXJjZSh0aGlzLmlkU291cmNlKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1uZXcgYSh0LGUpO3JldHVybiBuLnVwZGF0ZShyKSxufX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi9jb252ZXJ0X3RleHRfb3B0c1wiOjgwM31dLDgwNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKS5kZWZhdWx0TGluZSxhPXQoXCIuLi9kb21haW5cIikuYXR0cmlidXRlcyxvPXQoXCIuLi9mb250X2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlc1wiKS50ZXh0cG9zaXRpb24sbD10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbCxjPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLnRlbXBsYXRlZEFycmF5LHU9byh7fSk7dS5mYW1pbHkuZGZsdD1cIk9wZW4gU2FucyBSZWd1bGFyLCBBcmlhbCBVbmljb2RlIE1TIFJlZ3VsYXJcIiwoZS5leHBvcnRzPWwoe19hcnJheUF0dHJSZWdleHBzOltuLmNvdW50ZXJSZWdleChcIm1hcGJveFwiLFwiLmxheWVyc1wiLCEwKV0sZG9tYWluOmEoe25hbWU6XCJtYXBib3hcIn0pLGFjY2Vzc3Rva2VuOnt2YWxUeXBlOlwic3RyaW5nXCIsbm9CbGFuazohMCxzdHJpY3Q6ITB9LHN0eWxlOnt2YWxUeXBlOlwiYW55XCIsdmFsdWVzOltcImJhc2ljXCIsXCJzdHJlZXRzXCIsXCJvdXRkb29yc1wiLFwibGlnaHRcIixcImRhcmtcIixcInNhdGVsbGl0ZVwiLFwic2F0ZWxsaXRlLXN0cmVldHNcIl0sZGZsdDpcImJhc2ljXCJ9LGNlbnRlcjp7bG9uOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowfSxsYXQ6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjB9fSx6b29tOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxfSxiZWFyaW5nOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowfSxwaXRjaDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MH0sbGF5ZXJzOmMoXCJsYXllclwiLHt2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITB9LHNvdXJjZXR5cGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImdlb2pzb25cIixcInZlY3RvclwiXSxkZmx0OlwiZ2VvanNvblwifSxzb3VyY2U6e3ZhbFR5cGU6XCJhbnlcIn0sc291cmNlbGF5ZXI6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCJ9LHR5cGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImNpcmNsZVwiLFwibGluZVwiLFwiZmlsbFwiLFwic3ltYm9sXCJdLGRmbHQ6XCJjaXJjbGVcIn0sYmVsb3c6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCJ9LGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0Oml9LG9wYWNpdHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjF9LG1pbnpvb206e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MjQsZGZsdDowfSxtYXh6b29tOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjI0LGRmbHQ6MjR9LGNpcmNsZTp7cmFkaXVzOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxNX19LGxpbmU6e3dpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoyfSxkYXNoOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwifX0sZmlsbDp7b3V0bGluZWNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0Oml9fSxzeW1ib2w6e2ljb246e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwibWFya2VyXCJ9LGljb25zaXplOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxMH0sdGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIn0scGxhY2VtZW50Ont2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJwb2ludFwiLFwibGluZVwiLFwibGluZS1jZW50ZXJcIl0sZGZsdDpcInBvaW50XCJ9LHRleHRmb250OnUsdGV4dHBvc2l0aW9uOm4uZXh0ZW5kRmxhdCh7fSxzLHthcnJheU9rOiExfSl9fSl9LFwicGxvdFwiLFwiZnJvbS1yb290XCIpKS51aXJldmlzaW9uPXt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJub25lXCJ9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzXCI6MTA1MixcIi4uL2RvbWFpblwiOjc3NCxcIi4uL2ZvbnRfYXR0cmlidXRlc1wiOjc3NX1dLDgwNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vc3VicGxvdF9kZWZhdWx0c1wiKSxhPXQoXCIuLi9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIiksbz10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKTtmdW5jdGlvbiBzKHQsZSxyLG4pe3IoXCJhY2Nlc3N0b2tlblwiLG4uYWNjZXNzVG9rZW4pLHIoXCJzdHlsZVwiKSxyKFwiY2VudGVyLmxvblwiKSxyKFwiY2VudGVyLmxhdFwiKSxyKFwiem9vbVwiKSxyKFwiYmVhcmluZ1wiKSxyKFwicGl0Y2hcIiksYSh0LGUse25hbWU6XCJsYXllcnNcIixoYW5kbGVJdGVtRGVmYXVsdHM6bH0pLGUuX2lucHV0PXR9ZnVuY3Rpb24gbCh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8ubGF5ZXJzLHIsaSl9aWYocihcInZpc2libGVcIikpe3ZhciBpPXIoXCJzb3VyY2V0eXBlXCIpO3IoXCJzb3VyY2VcIiksXCJ2ZWN0b3JcIj09PWkmJnIoXCJzb3VyY2VsYXllclwiKTt2YXIgYT1yKFwidHlwZVwiKTtyKFwiYmVsb3dcIikscihcImNvbG9yXCIpLHIoXCJvcGFjaXR5XCIpLHIoXCJtaW56b29tXCIpLHIoXCJtYXh6b29tXCIpLFwiY2lyY2xlXCI9PT1hJiZyKFwiY2lyY2xlLnJhZGl1c1wiKSxcImxpbmVcIj09PWEmJihyKFwibGluZS53aWR0aFwiKSxyKFwibGluZS5kYXNoXCIpKSxcImZpbGxcIj09PWEmJnIoXCJmaWxsLm91dGxpbmVjb2xvclwiKSxcInN5bWJvbFwiPT09YSYmKHIoXCJzeW1ib2wuaWNvblwiKSxyKFwic3ltYm9sLmljb25zaXplXCIpLHIoXCJzeW1ib2wudGV4dFwiKSxuLmNvZXJjZUZvbnQocixcInN5bWJvbC50ZXh0Zm9udFwiKSxyKFwic3ltYm9sLnRleHRwb3NpdGlvblwiKSxyKFwic3ltYm9sLnBsYWNlbWVudFwiKSl9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aSh0LGUscix7dHlwZTpcIm1hcGJveFwiLGF0dHJpYnV0ZXM6byxoYW5kbGVEZWZhdWx0czpzLHBhcnRpdGlvbjpcInlcIixhY2Nlc3NUb2tlbjplLl9tYXBib3hBY2Nlc3NUb2tlbn0pfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCI6NzQ1LFwiLi4vc3VicGxvdF9kZWZhdWx0c1wiOjgyNCxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo4MDZ9XSw4MDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwibWFwYm94LWdsXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIiksYT10KFwiLi4vLi4vbGliXCIpLG89dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLHM9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnRcIiksbD10KFwiLi4vY2FydGVzaWFuL3NlbGVjdFwiKS5wcmVwU2VsZWN0LGM9dChcIi4uL2NhcnRlc2lhbi9zZWxlY3RcIikuc2VsZWN0T25DbGljayx1PXQoXCIuL2NvbnN0YW50c1wiKSxoPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLGY9dChcIi4vbGF5ZXJzXCIpO2Z1bmN0aW9uIHAodCl7dGhpcy5pZD10LmlkLHRoaXMuZ2Q9dC5nZCx0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLmlzU3RhdGljPXQuc3RhdGljUGxvdDt2YXIgZT10LmZ1bGxMYXlvdXQ7dGhpcy51aWQ9ZS5fdWlkK1wiLVwiK3RoaXMuaWQsdGhpcy5kaXY9bnVsbCx0aGlzLnhheGlzPW51bGwsdGhpcy55YXhpcz1udWxsLHRoaXMuY3JlYXRlRnJhbWV3b3JrKGUpLHRoaXMubWFwPW51bGwsdGhpcy5hY2Nlc3NUb2tlbj1udWxsLHRoaXMuc3R5bGVPYmo9bnVsbCx0aGlzLnRyYWNlSGFzaD17fSx0aGlzLmxheWVyTGlzdD1bXX12YXIgZD1wLnByb3RvdHlwZTtmdW5jdGlvbiBnKHQpe3ZhciBlPWguc3R5bGUudmFsdWVzLHI9aC5zdHlsZS5kZmx0LG49e307cmV0dXJuIGEuaXNQbGFpbk9iamVjdCh0KT8obi5pZD10LmlkLG4uc3R5bGU9dCk6XCJzdHJpbmdcIj09dHlwZW9mIHQ/KG4uaWQ9dCxuLnN0eWxlPS0xIT09ZS5pbmRleE9mKHQpP3YodCk6dCk6KG4uaWQ9cixuLnN0eWxlPXYocikpLG4udHJhbnNpdGlvbj17ZHVyYXRpb246MCxkZWxheTowfSxufWZ1bmN0aW9uIHYodCl7cmV0dXJuIHUuc3R5bGVVcmxQcmVmaXgrdCtcIi1cIit1LnN0eWxlVXJsU3VmZml4fWZ1bmN0aW9uIG0odCl7cmV0dXJuW3QubG9uLHQubGF0XX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBwKHQpfSxkLnBsb3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9dGhpcyxhPWVbaS5pZF07aS5tYXAmJmEuYWNjZXNzdG9rZW4hPT1pLmFjY2Vzc1Rva2VuJiYoaS5tYXAucmVtb3ZlKCksaS5tYXA9bnVsbCxpLnN0eWxlT2JqPW51bGwsaS50cmFjZUhhc2g9W10saS5sYXllckxpc3Q9e30pLG49aS5tYXA/bmV3IFByb21pc2UoZnVuY3Rpb24ocixuKXtpLnVwZGF0ZU1hcCh0LGUscixuKX0pOm5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbil7aS5jcmVhdGVNYXAodCxlLHIsbil9KSxyLnB1c2gobil9LGQuY3JlYXRlTWFwPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBzPXRoaXMsbD1zLmdkLGg9ZVtzLmlkXSxmPXMuc3R5bGVPYmo9ZyhoLnN0eWxlKTtzLmFjY2Vzc1Rva2VuPWguYWNjZXNzdG9rZW47dmFyIHA9cy5tYXA9bmV3IG4uTWFwKHtjb250YWluZXI6cy5kaXYsc3R5bGU6Zi5zdHlsZSxjZW50ZXI6bShoLmNlbnRlciksem9vbTpoLnpvb20sYmVhcmluZzpoLmJlYXJpbmcscGl0Y2g6aC5waXRjaCxpbnRlcmFjdGl2ZTohcy5pc1N0YXRpYyxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6cy5pc1N0YXRpYyxkb3VibGVDbGlja1pvb206ITEsYm94Wm9vbTohMX0pLGQ9dS5jb250cm9sQ29udGFpbmVyQ2xhc3NOYW1lLHY9cy5kaXYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShkKVswXTtpZihzLmRpdi5yZW1vdmVDaGlsZCh2KSxwLl9jYW52YXMuc3R5bGUubGVmdD1cIjBweFwiLHAuX2NhbnZhcy5zdHlsZS50b3A9XCIwcHhcIixzLnJlamVjdE9uRXJyb3IoYSkscC5vbmNlKFwibG9hZFwiLGZ1bmN0aW9uKCl7cy51cGRhdGVEYXRhKHQpLHMudXBkYXRlTGF5b3V0KGUpLHMucmVzb2x2ZU9uUmVuZGVyKHIpfSksIXMuaXNTdGF0aWMpe3ZhciB5PSExO3Aub24oXCJtb3ZlZW5kXCIsZnVuY3Rpb24odCl7aWYocy5tYXApe2lmKHQub3JpZ2luYWxFdmVudHx8eSl7dmFyIGU9bC5fZnVsbExheW91dFtzLmlkXTtvLmNhbGwoXCJfc3RvcmVEaXJlY3RHVUlFZGl0XCIsbC5sYXlvdXQsbC5fZnVsbExheW91dC5fcHJlR1VJLHMuZ2V0Vmlld0VkaXRzKGUpKTt2YXIgcj1zLmdldFZpZXcoKTtlLl9pbnB1dC5jZW50ZXI9ZS5jZW50ZXI9ci5jZW50ZXIsZS5faW5wdXQuem9vbT1lLnpvb209ci56b29tLGUuX2lucHV0LmJlYXJpbmc9ZS5iZWFyaW5nPXIuYmVhcmluZyxlLl9pbnB1dC5waXRjaD1lLnBpdGNoPXIucGl0Y2gsbC5lbWl0KFwicGxvdGx5X3JlbGF5b3V0XCIscy5nZXRWaWV3RWRpdHMocikpfXk9ITF9fSkscC5vbihcIndoZWVsXCIsZnVuY3Rpb24oKXt5PSEwfSkscC5vbihcIm1vdXNlbW92ZVwiLGZ1bmN0aW9uKHQpe3ZhciBlPXMuZGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3QuY2xpZW50WD10LnBvaW50LngrZS5sZWZ0LHQuY2xpZW50WT10LnBvaW50LnkrZS50b3AsdC50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGV9LHMueGF4aXMucDJjPWZ1bmN0aW9uKCl7cmV0dXJuIHQubG5nTGF0LmxuZ30scy55YXhpcy5wMmM9ZnVuY3Rpb24oKXtyZXR1cm4gdC5sbmdMYXQubGF0fSxpLmhvdmVyKGwsdCxzLmlkKX0pLHAub24oXCJkcmFnc3RhcnRcIix4KSxwLm9uKFwiem9vbXN0YXJ0XCIseCkscC5vbihcImRibGNsaWNrXCIsZnVuY3Rpb24oKXt2YXIgdD1sLl9mdWxsTGF5b3V0W3MuaWRdO28uY2FsbChcIl9zdG9yZURpcmVjdEdVSUVkaXRcIixsLmxheW91dCxsLl9mdWxsTGF5b3V0Ll9wcmVHVUkscy5nZXRWaWV3RWRpdHModCkpO3ZhciBlPXMudmlld0luaXRpYWw7cC5zZXRDZW50ZXIobShlLmNlbnRlcikpLHAuc2V0Wm9vbShlLnpvb20pLHAuc2V0QmVhcmluZyhlLmJlYXJpbmcpLHAuc2V0UGl0Y2goZS5waXRjaCk7dmFyIHI9cy5nZXRWaWV3KCk7dC5faW5wdXQuY2VudGVyPXQuY2VudGVyPXIuY2VudGVyLHQuX2lucHV0Lnpvb209dC56b29tPXIuem9vbSx0Ll9pbnB1dC5iZWFyaW5nPXQuYmVhcmluZz1yLmJlYXJpbmcsdC5faW5wdXQucGl0Y2g9dC5waXRjaD1yLnBpdGNoLGwuZW1pdChcInBsb3RseV9kb3VibGVjbGlja1wiLG51bGwpLGwuZW1pdChcInBsb3RseV9yZWxheW91dFwiLHMuZ2V0Vmlld0VkaXRzKHIpKX0pLHMuY2xlYXJTZWxlY3Q9ZnVuY3Rpb24oKXtsLl9mdWxsTGF5b3V0Ll96b29tbGF5ZXIuc2VsZWN0QWxsKFwiLnNlbGVjdC1vdXRsaW5lXCIpLnJlbW92ZSgpfSxzLm9uQ2xpY2tJblBhbkZuPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1sLl9mdWxsTGF5b3V0LmNsaWNrbW9kZTtyLmluZGV4T2YoXCJzZWxlY3RcIik+LTEmJmMoZS5vcmlnaW5hbEV2ZW50LGwsW3MueGF4aXNdLFtzLnlheGlzXSxzLmlkLHQpLHIuaW5kZXhPZihcImV2ZW50XCIpPi0xJiZpLmNsaWNrKGwsZS5vcmlnaW5hbEV2ZW50KX19fWZ1bmN0aW9uIHgoKXtpLmxvbmVVbmhvdmVyKGUuX3RvcHBhcGVyKX19LGQudXBkYXRlTWFwPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMsYT1pLm1hcCxvPWVbdGhpcy5pZF07aS5yZWplY3RPbkVycm9yKG4pO3ZhciBzPWcoby5zdHlsZSk7aS5zdHlsZU9iai5pZCE9PXMuaWQ/KGkuc3R5bGVPYmo9cyxhLnNldFN0eWxlKHMuc3R5bGUpLGEub25jZShcInN0eWxlZGF0YVwiLGZ1bmN0aW9uKCl7aS50cmFjZUhhc2g9e30saS51cGRhdGVEYXRhKHQpLGkudXBkYXRlTGF5b3V0KGUpLGkucmVzb2x2ZU9uUmVuZGVyKHIpfSkpOihpLnVwZGF0ZURhdGEodCksaS51cGRhdGVMYXlvdXQoZSksaS5yZXNvbHZlT25SZW5kZXIocikpfSxkLnVwZGF0ZURhdGE9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYT10aGlzLnRyYWNlSGFzaDtmb3Iobj0wO248dC5sZW5ndGg7bisrKXt2YXIgbz10W25dOyhlPWFbKHI9b1swXS50cmFjZSkudWlkXSk/ZS51cGRhdGUobyk6ci5fbW9kdWxlJiYoYVtyLnVpZF09ci5fbW9kdWxlLnBsb3QodGhpcyxvKSl9dmFyIHM9T2JqZWN0LmtleXMoYSk7dDpmb3Iobj0wO248cy5sZW5ndGg7bisrKXt2YXIgbD1zW25dO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspaWYobD09PShyPXRbaV1bMF0udHJhY2UpLnVpZCljb250aW51ZSB0OyhlPWFbbF0pLmRpc3Bvc2UoKSxkZWxldGUgYVtsXX19LGQudXBkYXRlTGF5b3V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWFwLHI9dFt0aGlzLmlkXTtlLnNldENlbnRlcihtKHIuY2VudGVyKSksZS5zZXRab29tKHIuem9vbSksZS5zZXRCZWFyaW5nKHIuYmVhcmluZyksZS5zZXRQaXRjaChyLnBpdGNoKSx0aGlzLnVwZGF0ZUxheWVycyh0KSx0aGlzLnVwZGF0ZUZyYW1ld29yayh0KSx0aGlzLnVwZGF0ZUZ4KHQpLHRoaXMubWFwLnJlc2l6ZSgpLHRoaXMuZ2QuX2NvbnRleHQuX3Njcm9sbFpvb20ubWFwYm94P2Uuc2Nyb2xsWm9vbS5lbmFibGUoKTplLnNjcm9sbFpvb20uZGlzYWJsZSgpfSxkLnJlc29sdmVPblJlbmRlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm1hcDtlLm9uKFwicmVuZGVyXCIsZnVuY3Rpb24gcigpe2UubG9hZGVkKCkmJihlLm9mZihcInJlbmRlclwiLHIpLHNldFRpbWVvdXQodCwwKSl9KX0sZC5yZWplY3RPbkVycm9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWFwO2Z1bmN0aW9uIHIoKXt0KG5ldyBFcnJvcih1Lm1hcE9uRXJyb3JNc2cpKX1lLm9uY2UoXCJlcnJvclwiLHIpLGUub25jZShcInN0eWxlLmVycm9yXCIsciksZS5vbmNlKFwic291cmNlLmVycm9yXCIsciksZS5vbmNlKFwidGlsZS5lcnJvclwiLHIpLGUub25jZShcImxheWVyLmVycm9yXCIscil9LGQuY3JlYXRlRnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLmRpdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3IuaWQ9ZS51aWQsci5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsZS5jb250YWluZXIuYXBwZW5kQ2hpbGQociksZS54YXhpcz17X2lkOlwieFwiLGMycDpmdW5jdGlvbih0KXtyZXR1cm4gZS5wcm9qZWN0KHQpLnh9fSxlLnlheGlzPXtfaWQ6XCJ5XCIsYzJwOmZ1bmN0aW9uKHQpe3JldHVybiBlLnByb2plY3QodCkueX19LGUudXBkYXRlRnJhbWV3b3JrKHQpfSxkLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLm1hcCxuPWUuZ2Q7aWYoIWUuaXNTdGF0aWMpe3ZhciBpLG89dC5kcmFnbW9kZTtpPVwic2VsZWN0XCI9PT1vP2Z1bmN0aW9uKHQscil7KHQucmFuZ2U9e30pW2UuaWRdPVt1KFtyLnhtaW4sci55bWluXSksdShbci54bWF4LHIueW1heF0pXX06ZnVuY3Rpb24odCxyLG4peyh0Lmxhc3NvUG9pbnRzPXt9KVtlLmlkXT1uLmZpbHRlcmVkLm1hcCh1KX07dmFyIGM9ZS5kcmFnT3B0aW9ucztlLmRyYWdPcHRpb25zPWEuZXh0ZW5kRGVlcChjfHx7fSx7ZWxlbWVudDplLmRpdixnZDpuLHBsb3RpbmZvOntpZDplLmlkLHhheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpcyxmaWxsUmFuZ2VJdGVtczppfSx4YXhlczpbZS54YXhpc10seWF4ZXM6W2UueWF4aXNdLHN1YnBsb3Q6ZS5pZH0pLHIub2ZmKFwiY2xpY2tcIixlLm9uQ2xpY2tJblBhbkhhbmRsZXIpLFwic2VsZWN0XCI9PT1vfHxcImxhc3NvXCI9PT1vPyhyLmRyYWdQYW4uZGlzYWJsZSgpLHIub24oXCJ6b29tc3RhcnRcIixlLmNsZWFyU2VsZWN0KSxlLmRyYWdPcHRpb25zLnByZXBGbj1mdW5jdGlvbih0LHIsbil7bCh0LHIsbixlLmRyYWdPcHRpb25zLG8pfSxzLmluaXQoZS5kcmFnT3B0aW9ucykpOihyLmRyYWdQYW4uZW5hYmxlKCksci5vZmYoXCJ6b29tc3RhcnRcIixlLmNsZWFyU2VsZWN0KSxlLmRpdi5vbm1vdXNlZG93bj1udWxsLGUub25DbGlja0luUGFuSGFuZGxlcj1lLm9uQ2xpY2tJblBhbkZuKGUuZHJhZ09wdGlvbnMpLHIub24oXCJjbGlja1wiLGUub25DbGlja0luUGFuSGFuZGxlcikpfWZ1bmN0aW9uIHUodCl7dmFyIHI9ZS5tYXAudW5wcm9qZWN0KHQpO3JldHVybltyLmxuZyxyLmxhdF19fSxkLnVwZGF0ZUZyYW1ld29yaz1mdW5jdGlvbih0KXt2YXIgZT10W3RoaXMuaWRdLmRvbWFpbixyPXQuX3NpemUsbj10aGlzLmRpdi5zdHlsZTtuLndpZHRoPXIudyooZS54WzFdLWUueFswXSkrXCJweFwiLG4uaGVpZ2h0PXIuaCooZS55WzFdLWUueVswXSkrXCJweFwiLG4ubGVmdD1yLmwrZS54WzBdKnIudytcInB4XCIsbi50b3A9ci50KygxLWUueVsxXSkqci5oK1wicHhcIix0aGlzLnhheGlzLl9vZmZzZXQ9ci5sK2UueFswXSpyLncsdGhpcy54YXhpcy5fbGVuZ3RoPXIudyooZS54WzFdLWUueFswXSksdGhpcy55YXhpcy5fb2Zmc2V0PXIudCsoMS1lLnlbMV0pKnIuaCx0aGlzLnlheGlzLl9sZW5ndGg9ci5oKihlLnlbMV0tZS55WzBdKX0sZC51cGRhdGVMYXllcnM9ZnVuY3Rpb24odCl7dmFyIGUscj10W3RoaXMuaWRdLmxheWVycyxuPXRoaXMubGF5ZXJMaXN0O2lmKHIubGVuZ3RoIT09bi5sZW5ndGgpe2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspbltlXS5kaXNwb3NlKCk7Zm9yKG49dGhpcy5sYXllckxpc3Q9W10sZT0wO2U8ci5sZW5ndGg7ZSsrKW4ucHVzaChmKHRoaXMsZSxyW2VdKSl9ZWxzZSBmb3IoZT0wO2U8ci5sZW5ndGg7ZSsrKW5bZV0udXBkYXRlKHJbZV0pfSxkLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLm1hcCYmKHRoaXMubWFwLnJlbW92ZSgpLHRoaXMubWFwPW51bGwsdGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5kaXYpKX0sZC50b0ltYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwLnN0b3AoKSx0aGlzLm1hcC5nZXRDYW52YXMoKS50b0RhdGFVUkwoKX0sZC5zZXRPcHRpb25zPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4gaW4gcil0aGlzLm1hcFtlXSh0LG4scltuXSl9LGQucHJvamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tYXAucHJvamVjdChuZXcgbi5MbmdMYXQodFswXSx0WzFdKSl9LGQuZ2V0Vmlldz1mdW5jdGlvbigpe3ZhciB0PXRoaXMubWFwLGU9dC5nZXRDZW50ZXIoKTtyZXR1cm57Y2VudGVyOntsb246ZS5sbmcsbGF0OmUubGF0fSx6b29tOnQuZ2V0Wm9vbSgpLGJlYXJpbmc6dC5nZXRCZWFyaW5nKCkscGl0Y2g6dC5nZXRQaXRjaCgpfX0sZC5nZXRWaWV3RWRpdHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuaWQscj1bXCJjZW50ZXJcIixcInpvb21cIixcImJlYXJpbmdcIixcInBpdGNoXCJdLG49e30saT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldO25bZStcIi5cIithXT10W2FdfXJldHVybiBufX0se1wiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudFwiOjU5NixcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL2NhcnRlc2lhbi9zZWxlY3RcIjo3NjYsXCIuL2NvbnN0YW50c1wiOjgwMixcIi4vbGF5ZXJzXCI6ODA1LFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjgwNixcIm1hcGJveC1nbFwiOjQxOX1dLDgwOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmVkaXRUeXBlO3JldHVybnt0Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLGVkaXRUeXBlOmV9LHI6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjAsZWRpdFR5cGU6ZX0sYjp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MCxlZGl0VHlwZTplfSxsOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLGVkaXRUeXBlOmV9LGVkaXRUeXBlOmV9fX0se31dLDgxMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxhPXQoXCIuLi9yZWdpc3RyeVwiKSxvPXQoXCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYVwiKSxzPXQoXCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLGw9dChcIi4uL2xpYlwiKSxjPXQoXCIuLi9jb21wb25lbnRzL2NvbG9yXCIpLHU9dChcIi4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNLGg9dChcIi4vY2FydGVzaWFuL2F4aXNfaWRzXCIpLGY9dChcIi4vYW5pbWF0aW9uX2F0dHJpYnV0ZXNcIikscD10KFwiLi9mcmFtZV9hdHRyaWJ1dGVzXCIpLGQ9bC5yZWxpbmtQcml2YXRlS2V5cyxnPWwuXyx2PWUuZXhwb3J0cz17fTtsLmV4dGVuZEZsYXQodixhKSx2LmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSx2LmF0dHJpYnV0ZXMudHlwZS52YWx1ZXM9di5hbGxUeXBlcyx2LmZvbnRBdHRycz10KFwiLi9mb250X2F0dHJpYnV0ZXNcIiksdi5sYXlvdXRBdHRyaWJ1dGVzPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLHYuZm9udFdlaWdodD1cIm5vcm1hbFwiO3ZhciBtPXYudHJhbnNmb3Jtc1JlZ2lzdHJ5LHk9dChcIi4vY29tbWFuZFwiKTt2LmV4ZWN1dGVBUElDb21tYW5kPXkuZXhlY3V0ZUFQSUNvbW1hbmQsdi5jb21wdXRlQVBJQ29tbWFuZEJpbmRpbmdzPXkuY29tcHV0ZUFQSUNvbW1hbmRCaW5kaW5ncyx2Lm1hbmFnZUNvbW1hbmRPYnNlcnZlcj15Lm1hbmFnZUNvbW1hbmRPYnNlcnZlcix2Lmhhc1NpbXBsZUFQSUNvbW1hbmRCaW5kaW5ncz15Lmhhc1NpbXBsZUFQSUNvbW1hbmRCaW5kaW5ncyx2LnJlZHJhd1RleHQ9ZnVuY3Rpb24odCl7aWYoISgodD1sLmdldEdyYXBoRGl2KHQpKS5kYXRhJiZ0LmRhdGFbMF0mJnQuZGF0YVswXS5yKSlyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSl7c2V0VGltZW91dChmdW5jdGlvbigpe2EuZ2V0Q29tcG9uZW50TWV0aG9kKFwiYW5ub3RhdGlvbnNcIixcImRyYXdcIikodCksYS5nZXRDb21wb25lbnRNZXRob2QoXCJsZWdlbmRcIixcImRyYXdcIikodCksKHQuY2FsY2RhdGF8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RbMF0mJnRbMF0udCYmdFswXS50LmNiJiZ0WzBdLnQuY2IoKX0pLGUodi5wcmV2aW91c1Byb21pc2VzKHQpKX0sMzAwKX0pfSx2LnJlc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdD1sLmdldEdyYXBoRGl2KHQpLG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbih0KXt2YXIgZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS5kaXNwbGF5O3JldHVybiFlfHxcIm5vbmVcIj09PWV9dCYmIW4odCl8fHIobmV3IEVycm9yKFwiUmVzaXplIG11c3QgYmUgcGFzc2VkIGEgZGlzcGxheWVkIHBsb3QgZGl2IGVsZW1lbnQuXCIpKSx0Ll9yZWRyYXdUaW1lciYmY2xlYXJUaW1lb3V0KHQuX3JlZHJhd1RpbWVyKSx0Ll9yZWRyYXdUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoIXQubGF5b3V0fHx0LmxheW91dC53aWR0aCYmdC5sYXlvdXQuaGVpZ2h0fHxuKHQpKWUodCk7ZWxzZXtkZWxldGUgdC5sYXlvdXQud2lkdGgsZGVsZXRlIHQubGF5b3V0LmhlaWdodDt2YXIgcj10LmNoYW5nZWQ7dC5hdXRvcGxheT0hMCxhLmNhbGwoXCJyZWxheW91dFwiLHQse2F1dG9zaXplOiEwfSkudGhlbihmdW5jdGlvbigpe3QuY2hhbmdlZD1yLGUodCl9KX19LDEwMCl9KX0sdi5wcmV2aW91c1Byb21pc2VzPWZ1bmN0aW9uKHQpe2lmKCh0Ll9wcm9taXNlc3x8W10pLmxlbmd0aClyZXR1cm4gUHJvbWlzZS5hbGwodC5fcHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24oKXt0Ll9wcm9taXNlcz1bXX0pfSx2LmFkZExpbmtzPWZ1bmN0aW9uKHQpe2lmKHQuX2NvbnRleHQuc2hvd0xpbmt8fHQuX2NvbnRleHQuc2hvd1NvdXJjZXMpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1sLmVuc3VyZVNpbmdsZShlLl9wYXBlcixcInRleHRcIixcImpzLXBsb3QtbGluay1jb250YWluZXJcIixmdW5jdGlvbih0KXt0LnN0eWxlKHtcImZvbnQtZmFtaWx5XCI6J1wiT3BlbiBTYW5zXCIsIEFyaWFsLCBzYW5zLXNlcmlmJyxcImZvbnQtc2l6ZVwiOlwiMTJweFwiLGZpbGw6Yy5kZWZhdWx0TGluZSxcInBvaW50ZXItZXZlbnRzXCI6XCJhbGxcIn0pLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTt0LmFwcGVuZChcInRzcGFuXCIpLmNsYXNzZWQoXCJqcy1saW5rLXRvLXRvb2xcIiwhMCksdC5hcHBlbmQoXCJ0c3BhblwiKS5jbGFzc2VkKFwianMtbGluay1zcGFjZXJcIiwhMCksdC5hcHBlbmQoXCJ0c3BhblwiKS5jbGFzc2VkKFwianMtc291cmNlbGlua3NcIiwhMCl9KX0pLGk9ci5ub2RlKCksYT17eTplLl9wYXBlci5hdHRyKFwiaGVpZ2h0XCIpLTl9O2RvY3VtZW50LmJvZHkuY29udGFpbnMoaSkmJmkuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCk+PWUud2lkdGgtMjA/KGFbXCJ0ZXh0LWFuY2hvclwiXT1cInN0YXJ0XCIsYS54PTUpOihhW1widGV4dC1hbmNob3JcIl09XCJlbmRcIixhLng9ZS5fcGFwZXIuYXR0cihcIndpZHRoXCIpLTcpLHIuYXR0cihhKTt2YXIgbz1yLnNlbGVjdChcIi5qcy1saW5rLXRvLXRvb2xcIikscz1yLnNlbGVjdChcIi5qcy1saW5rLXNwYWNlclwiKSx1PXIuc2VsZWN0KFwiLmpzLXNvdXJjZWxpbmtzXCIpO3QuX2NvbnRleHQuc2hvd1NvdXJjZXMmJnQuX2NvbnRleHQuc2hvd1NvdXJjZXModCksdC5fY29udGV4dC5zaG93TGluayYmZnVuY3Rpb24odCxlKXtlLnRleHQoXCJcIik7dmFyIHI9ZS5hcHBlbmQoXCJhXCIpLmF0dHIoe1wieGxpbms6eGxpbms6aHJlZlwiOlwiI1wiLGNsYXNzOlwibGluay0taW1wdCBsaW5rLS1lbWJlZHZpZXdcIixcImZvbnQtd2VpZ2h0XCI6XCJib2xkXCJ9KS50ZXh0KHQuX2NvbnRleHQubGlua1RleHQrXCIgXCIrU3RyaW5nLmZyb21DaGFyQ29kZSgxODcpKTtpZih0Ll9jb250ZXh0LnNlbmREYXRhKXIub24oXCJjbGlja1wiLGZ1bmN0aW9uKCl7di5zZW5kRGF0YVRvQ2xvdWQodCl9KTtlbHNle3ZhciBuPXdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zcGxpdChcIi9cIiksaT13aW5kb3cubG9jYXRpb24uc2VhcmNoO3IuYXR0cih7XCJ4bGluazp4bGluazpzaG93XCI6XCJuZXdcIixcInhsaW5rOnhsaW5rOmhyZWZcIjpcIi9cIituWzJdLnNwbGl0KFwiLlwiKVswXStcIi9cIituWzFdK2l9KX19KHQsbykscy50ZXh0KG8udGV4dCgpJiZ1LnRleHQoKT9cIiAtIFwiOlwiXCIpfX0sdi5zZW5kRGF0YVRvQ2xvdWQ9ZnVuY3Rpb24odCl7dC5lbWl0KFwicGxvdGx5X2JlZm9yZWV4cG9ydFwiKTt2YXIgZT0od2luZG93LlBMT1RMWUVOVnx8e30pLkJBU0VfVVJMfHx0Ll9jb250ZXh0LnBsb3RseVNlcnZlclVSTCxyPW4uc2VsZWN0KHQpLmFwcGVuZChcImRpdlwiKS5hdHRyKFwiaWRcIixcImhpZGRlbmZvcm1cIikuc3R5bGUoXCJkaXNwbGF5XCIsXCJub25lXCIpLGk9ci5hcHBlbmQoXCJmb3JtXCIpLmF0dHIoe2FjdGlvbjplK1wiL2V4dGVybmFsXCIsbWV0aG9kOlwicG9zdFwiLHRhcmdldDpcIl9ibGFua1wifSk7cmV0dXJuIGkuYXBwZW5kKFwiaW5wdXRcIikuYXR0cih7dHlwZTpcInRleHRcIixuYW1lOlwiZGF0YVwifSkubm9kZSgpLnZhbHVlPXYuZ3JhcGhKc29uKHQsITEsXCJrZWVwZGF0YVwiKSxpLm5vZGUoKS5zdWJtaXQoKSxyLnJlbW92ZSgpLHQuZW1pdChcInBsb3RseV9hZnRlcmV4cG9ydFwiKSwhMX07dmFyIHg9W1wiZGF5c1wiLFwic2hvcnREYXlzXCIsXCJtb250aHNcIixcInNob3J0TW9udGhzXCIsXCJwZXJpb2RzXCIsXCJkYXRlVGltZVwiLFwiZGF0ZVwiLFwidGltZVwiLFwiZGVjaW1hbFwiLFwidGhvdXNhbmRzXCIsXCJncm91cGluZ1wiLFwiY3VycmVuY3lcIl0sYj1bXCJ5ZWFyXCIsXCJtb250aFwiLFwiZGF5TW9udGhcIixcImRheU1vbnRoWWVhclwiXTtmdW5jdGlvbiBfKHQsZSl7dmFyIHI9dC5fY29udGV4dC5sb2NhbGUsbj0hMSxpPXt9O2Z1bmN0aW9uIG8odCl7Zm9yKHZhciByPSEwLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIG89ZVthXTtpW29dfHwodFtvXT9pW29dPXRbb106cj0hMSl9ciYmKG49ITApfWZvcih2YXIgcz0wO3M8MjtzKyspe2Zvcih2YXIgbD10Ll9jb250ZXh0LmxvY2FsZXMsYz0wO2M8MjtjKyspe3ZhciB1PShsW3JdfHx7fSkuZm9ybWF0O2lmKHUmJihvKHUpLG4pKWJyZWFrO2w9YS5sb2NhbGVSZWdpc3RyeX12YXIgaD1yLnNwbGl0KFwiLVwiKVswXTtpZihufHxoPT09cilicmVhaztyPWh9cmV0dXJuIG58fG8oYS5sb2NhbGVSZWdpc3RyeS5lbi5mb3JtYXQpLGl9ZnVuY3Rpb24gdyh0LGUpe3ZhciByPXtfZnVsbExheW91dDplfSxuPVwieFwiPT09dC5faWQuY2hhckF0KDApLGk9dC5fbWFpbkF4aXMuX2FuY2hvckF4aXMsYT1cIlwiLG89XCJcIixzPVwiXCI7aWYoaSYmKHM9aS5fbWFpbkF4aXMuX2lkLGE9bj90Ll9pZCtzOnMrdC5faWQpLCFhfHwhZS5fcGxvdHNbYV0pe2E9XCJcIjtmb3IodmFyIGw9dC5fY291bnRlckF4ZXMsYz0wO2M8bC5sZW5ndGg7YysrKXt2YXIgdT1sW2NdLGY9bj90Ll9pZCt1OnUrdC5faWQ7b3x8KG89Zik7dmFyIHA9aC5nZXRGcm9tSWQocix1KTtpZihzJiZwLm92ZXJsYXlpbmc9PT1zKXthPWY7YnJlYWt9fX1yZXR1cm4gYXx8b31mdW5jdGlvbiBrKHQpe3ZhciBlPXQudHJhbnNmb3JtcztpZihBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aClmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXSxpPW4uX21vZHVsZXx8bVtuLnR5cGVdO2lmKGkmJmkubWFrZXNEYXRhKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIEEodCxlLHIsbil7Zm9yKHZhciBpPXQudHJhbnNmb3JtcyxhPVt0XSxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBzPWlbb10sbD1tW3MudHlwZV07bCYmbC50cmFuc2Zvcm0mJihhPWwudHJhbnNmb3JtKGEse3RyYW5zZm9ybTpzLGZ1bGxUcmFjZTp0LGZ1bGxEYXRhOmUsbGF5b3V0OnIsZnVsbExheW91dDpuLHRyYW5zZm9ybUluZGV4Om99KSl9cmV0dXJuIGF9ZnVuY3Rpb24gVCh0KXt2YXIgZT10Lm1hcmdpbjtpZighdC5fc2l6ZSl7dmFyIHI9dC5fc2l6ZT17bDpNYXRoLnJvdW5kKGUubCkscjpNYXRoLnJvdW5kKGUuciksdDpNYXRoLnJvdW5kKGUudCksYjpNYXRoLnJvdW5kKGUuYikscDpNYXRoLnJvdW5kKGUucGFkKX07ci53PU1hdGgucm91bmQodC53aWR0aCktci5sLXIucixyLmg9TWF0aC5yb3VuZCh0LmhlaWdodCktci50LXIuYn10Ll9wdXNobWFyZ2lufHwodC5fcHVzaG1hcmdpbj17fSksdC5fcHVzaG1hcmdpbklkc3x8KHQuX3B1c2htYXJnaW5JZHM9e30pfWZ1bmN0aW9uIE0odCxlLHIpe3ZhciBuPSExO3ZhciBpPVt2LnByZXZpb3VzUHJvbWlzZXMsZnVuY3Rpb24oKXtpZih0Ll90cmFuc2l0aW9uRGF0YSlyZXR1cm4gdC5fdHJhbnNpdGlvbmluZz0hMSxmdW5jdGlvbih0KXt2YXIgZT1Qcm9taXNlLnJlc29sdmUoKTtpZighdClyZXR1cm4gZTtmb3IoO3QubGVuZ3RoOyllPWUudGhlbih0LnNoaWZ0KCkpO3JldHVybiBlfSh0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzKX0sci5wcmVwYXJlRm4sdi5yZWhvdmVyLGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdChcInBsb3RseV90cmFuc2l0aW9uaW5nXCIsW10pLG5ldyBQcm9taXNlKGZ1bmN0aW9uKGkpe3QuX3RyYW5zaXRpb25pbmc9ITAsZS5kdXJhdGlvbj4wJiYodC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbj0hMCksdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uKCl7bj0hMH0pLHIucmVkcmF3JiZ0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gYS5jYWxsKFwicmVkcmF3XCIsdCl9KSx0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLnB1c2goZnVuY3Rpb24oKXt0LmVtaXQoXCJwbG90bHlfdHJhbnNpdGlvbmludGVycnVwdGVkXCIsW10pfSk7dmFyIG89MCxzPTA7ZnVuY3Rpb24gbCgpe3JldHVybiBvKyssZnVuY3Rpb24oKXt2YXIgZTtzKyssbnx8cyE9PW98fChlPWksdC5fdHJhbnNpdGlvbkRhdGEmJihmdW5jdGlvbih0KXtpZih0KWZvcig7dC5sZW5ndGg7KXQuc2hpZnQoKX0odC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcyksUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe2lmKHIucmVkcmF3KXJldHVybiBhLmNhbGwoXCJyZWRyYXdcIix0KX0pLnRoZW4oZnVuY3Rpb24oKXt0Ll90cmFuc2l0aW9uaW5nPSExLHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb249ITEsdC5lbWl0KFwicGxvdGx5X3RyYW5zaXRpb25lZFwiLFtdKX0pLnRoZW4oZSkpKX19ci5ydW5GbihsKSxzZXRUaW1lb3V0KGwoKSl9KX1dLG89bC5zeW5jT3JBc3luYyhpLHQpO3JldHVybiBvJiZvLnRoZW58fChvPVByb21pc2UucmVzb2x2ZSgpKSxvLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdH0pfWZ1bmN0aW9uIFModCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmNsZWFyQ2FsYygpLFwibXVsdGljYXRlZ29yeVwiPT09bi50eXBlJiZuLnNldHVwTXVsdGlDYXRlZ29yeShlKX19di5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUmJmUuc2tpcFVwZGF0ZUNhbGMsaT10Ll9mdWxsTGF5b3V0fHx7fTtpZihpLl9za2lwRGVmYXVsdHMpZGVsZXRlIGkuX3NraXBEZWZhdWx0cztlbHNle3ZhciBvLHM9dC5fZnVsbExheW91dD17fSxjPXQubGF5b3V0fHx7fSx1PXQuX2Z1bGxEYXRhfHxbXSxoPXQuX2Z1bGxEYXRhPVtdLGY9dC5kYXRhfHxbXSxwPXQuY2FsY2RhdGF8fFtdLG09dC5fY29udGV4dHx8e307dC5fdHJhbnNpdGlvbkRhdGF8fHYuY3JlYXRlVHJhbnNpdGlvbkRhdGEodCkscy5fZGZsdFRpdGxlPXtwbG90OmcodCxcIkNsaWNrIHRvIGVudGVyIFBsb3QgdGl0bGVcIikseDpnKHQsXCJDbGljayB0byBlbnRlciBYIGF4aXMgdGl0bGVcIikseTpnKHQsXCJDbGljayB0byBlbnRlciBZIGF4aXMgdGl0bGVcIiksY29sb3JiYXI6Zyh0LFwiQ2xpY2sgdG8gZW50ZXIgQ29sb3JzY2FsZSB0aXRsZVwiKSxhbm5vdGF0aW9uOmcodCxcIm5ldyB0ZXh0XCIpfSxzLl90cmFjZVdvcmQ9Zyh0LFwidHJhY2VcIik7dmFyIHk9Xyh0LHgpO2lmKHMuX21hcGJveEFjY2Vzc1Rva2VuPW0ubWFwYm94QWNjZXNzVG9rZW4saS5faW5pdGlhbEF1dG9TaXplSXNEb25lKXt2YXIgdz1pLndpZHRoLGs9aS5oZWlnaHQ7di5zdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0cyhjLHMseSksYy53aWR0aHx8KHMud2lkdGg9dyksYy5oZWlnaHR8fChzLmhlaWdodD1rKSx2LnNhbml0aXplTWFyZ2lucyhzKX1lbHNle3Yuc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHMoYyxzLHkpO3ZhciBBPSFjLndpZHRofHwhYy5oZWlnaHQsTT1zLmF1dG9zaXplLFM9bS5hdXRvc2l6YWJsZTtBJiYoTXx8Uyk/di5wbG90QXV0b1NpemUodCxjLHMpOkEmJnYuc2FuaXRpemVNYXJnaW5zKHMpLCFNJiZBJiYoYy53aWR0aD1zLndpZHRoLGMuaGVpZ2h0PXMuaGVpZ2h0KX1zLl9kM2xvY2FsZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmRlY2ltYWw9ZS5jaGFyQXQoMCksdC50aG91c2FuZHM9ZS5jaGFyQXQoMSksbi5sb2NhbGUodCl9KHkscy5zZXBhcmF0b3JzKSxzLl9leHRyYUZvcm1hdD1fKHQsYikscy5faW5pdGlhbEF1dG9TaXplSXNEb25lPSEwLHMuX2RhdGFMZW5ndGg9Zi5sZW5ndGgscy5fbW9kdWxlcz1bXSxzLl92aXNpYmxlTW9kdWxlcz1bXSxzLl9iYXNlUGxvdE1vZHVsZXM9W107dmFyIEU9cy5fc3VicGxvdHM9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9YS5jb2xsZWN0YWJsZVN1YnBsb3RUeXBlcyxuPXt9O2lmKCFyKXtyPVtdO3ZhciBpPWEuc3VicGxvdHNSZWdpc3RyeTtmb3IodmFyIG8gaW4gaSl7dmFyIHM9aVtvXSxjPXMuYXR0cjtpZihjJiYoci5wdXNoKG8pLEFycmF5LmlzQXJyYXkoYykpKWZvcihlPTA7ZTxjLmxlbmd0aDtlKyspbC5wdXNoVW5pcXVlKHIsY1tlXSl9fWZvcih0PTA7dDxyLmxlbmd0aDt0KyspbltyW3RdXT1bXTtyZXR1cm4gbn0oKSxDPXMuX3NwbG9tQXhlcz17eDp7fSx5Ont9fSxMPXMuX3NwbG9tU3VicGxvdHM9e307cy5fc3Bsb21HcmlkRGZsdD17fSxzLl9zY2F0dGVyU3RhY2tPcHRzPXt9LHMuX2ZpcnN0U2NhdHRlcj17fSxzLl9hbGlnbm1lbnRPcHRzPXt9LHMuX3JlcXVlc3RSYW5nZXNsaWRlcj17fSxzLl90cmFjZVVpZHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9ZS5sZW5ndGgsYT1bXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbz10W3JdLl9mdWxsSW5wdXQ7byE9PW4mJmEucHVzaChvKSxuPW99dmFyIHM9YS5sZW5ndGgsYz1uZXcgQXJyYXkoaSksdT17fTtmdW5jdGlvbiBoKHQsZSl7Y1tlXT10LHVbdF09MX1mdW5jdGlvbiBmKHQsZSl7aWYodCYmXCJzdHJpbmdcIj09dHlwZW9mIHQmJiF1W3RdKXJldHVybiBoKHQsZSksITB9Zm9yKHI9MDtyPGk7cisrKXt2YXIgcD1lW3JdLnVpZDtcIm51bWJlclwiPT10eXBlb2YgcCYmKHA9U3RyaW5nKHApKSxmKHAscil8fChyPHMmJmYoYVtyXS51aWQscil8fGgobC5yYW5kc3RyKHUpLHIpKX1yZXR1cm4gY30odSxmKSxzLl9nbG9iYWxUcmFuc2Zvcm1zPSh0Ll9jb250ZXh0fHx7fSkuZ2xvYmFsVHJhbnNmb3Jtcyx2LnN1cHBseURhdGFEZWZhdWx0cyhmLGgsYyxzKTt2YXIgej1PYmplY3Qua2V5cyhDLngpLE89T2JqZWN0LmtleXMoQy55KTtpZih6Lmxlbmd0aD4xJiZPLmxlbmd0aD4xKXtmb3IoYS5nZXRDb21wb25lbnRNZXRob2QoXCJncmlkXCIsXCJzaXplRGVmYXVsdHNcIikoYyxzKSxvPTA7bzx6Lmxlbmd0aDtvKyspbC5wdXNoVW5pcXVlKEUueGF4aXMseltvXSk7Zm9yKG89MDtvPE8ubGVuZ3RoO28rKylsLnB1c2hVbmlxdWUoRS55YXhpcyxPW29dKTtmb3IodmFyIEkgaW4gTClsLnB1c2hVbmlxdWUoRS5jYXJ0ZXNpYW4sSSl9aWYocy5faGFzPXYuX2hhc1Bsb3RUeXBlLmJpbmQocyksdS5sZW5ndGg9PT1oLmxlbmd0aClmb3Iobz0wO288aC5sZW5ndGg7bysrKWQoaFtvXSx1W29dKTt2LnN1cHBseUxheW91dE1vZHVsZURlZmF1bHRzKGMscyxoLHQuX3RyYW5zaXRpb25EYXRhKTt2YXIgRD1zLl92aXNpYmxlTW9kdWxlcyxQPVtdO2ZvcihvPTA7bzxELmxlbmd0aDtvKyspe3ZhciBSPURbb10uY3Jvc3NUcmFjZURlZmF1bHRzO1ImJmwucHVzaFVuaXF1ZShQLFIpfWZvcihvPTA7bzxQLmxlbmd0aDtvKyspUFtvXShoLHMpO2EuZ2V0Q29tcG9uZW50TWV0aG9kKFwiY29sb3JzY2FsZVwiLFwiY3Jvc3NUcmFjZURlZmF1bHRzXCIpKGgscykscy5faGFzT25seUxhcmdlU3Bsb21zPTE9PT1zLl9iYXNlUGxvdE1vZHVsZXMubGVuZ3RoJiZcInNwbG9tXCI9PT1zLl9iYXNlUGxvdE1vZHVsZXNbMF0ubmFtZSYmei5sZW5ndGg+MTUmJk8ubGVuZ3RoPjE1JiYwPT09cy5zaGFwZXMubGVuZ3RoJiYwPT09cy5pbWFnZXMubGVuZ3RoLHMuX2hhc0NhcnRlc2lhbj1zLl9oYXMoXCJjYXJ0ZXNpYW5cIikscy5faGFzR2VvPXMuX2hhcyhcImdlb1wiKSxzLl9oYXNHTDNEPXMuX2hhcyhcImdsM2RcIikscy5faGFzR0wyRD1zLl9oYXMoXCJnbDJkXCIpLHMuX2hhc1Rlcm5hcnk9cy5faGFzKFwidGVybmFyeVwiKSxzLl9oYXNQaWU9cy5faGFzKFwicGllXCIpLHYubGlua1N1YnBsb3RzKGgscyx1LGkpLHYuY2xlYW5QbG90KGgscyx1LGkpLGkuX3pvb21sYXllciYmIXQuX2RyYWdnaW5nJiZpLl96b29tbGF5ZXIuc2VsZWN0QWxsKFwiLnNlbGVjdC1vdXRsaW5lXCIpLnJlbW92ZSgpLGQocyxpKSxzLl9wcmVHVUl8fChzLl9wcmVHVUk9e30pLHMuX3RyYWNlUHJlR1VJfHwocy5fdHJhY2VQcmVHVUk9e30pO3ZhciBGLEI9cy5fdHJhY2VQcmVHVUksTj17fTtmb3IoRiBpbiBCKU5bRl09XCJvbGRcIjtmb3Iobz0wO288aC5sZW5ndGg7bysrKU5bRj1oW29dLl9mdWxsSW5wdXQudWlkXXx8KEJbRl09e30pLE5bRl09XCJuZXdcIjtmb3IoRiBpbiBOKVwib2xkXCI9PT1OW0ZdJiZkZWxldGUgQltGXTtUKHMpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKFwicmFuZ2VzbGlkZXJcIixcIm1ha2VEYXRhXCIpKHMpLHJ8fHAubGVuZ3RoIT09aC5sZW5ndGh8fHYuc3VwcGx5RGVmYXVsdHNVcGRhdGVDYWxjKHAsaCl9fSx2LnN1cHBseURlZmF1bHRzVXBkYXRlQ2FsYz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdLGk9KHRbcl18fFtdKVswXTtpZihpJiZpLnRyYWNlKXt2YXIgYT1pLnRyYWNlO2lmKGEuX2hhc0NhbGNUcmFuc2Zvcm0pe3ZhciBvLHMsYyx1PWEuX2FycmF5QXR0cnM7Zm9yKG89MDtvPHUubGVuZ3RoO28rKylzPXVbb10sYz1sLm5lc3RlZFByb3BlcnR5KGEscykuZ2V0KCkuc2xpY2UoKSxsLm5lc3RlZFByb3BlcnR5KG4scykuc2V0KGMpfWkudHJhY2U9bn19fSx2LmNyZWF0ZVRyYW5zaXRpb25EYXRhPWZ1bmN0aW9uKHQpe3QuX3RyYW5zaXRpb25EYXRhfHwodC5fdHJhbnNpdGlvbkRhdGE9e30pLHQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXN8fCh0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzPVtdKSx0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNofHwodC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaD17fSksdC5fdHJhbnNpdGlvbkRhdGEuX2NvdW50ZXJ8fCh0Ll90cmFuc2l0aW9uRGF0YS5fY291bnRlcj0wKSx0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzfHwodC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcz1bXSl9LHYuX2hhc1Bsb3RUeXBlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5fYmFzZVBsb3RNb2R1bGVzfHxbXTtmb3IoZT0wO2U8ci5sZW5ndGg7ZSsrKWlmKHJbZV0ubmFtZT09PXQpcmV0dXJuITA7dmFyIG49dGhpcy5fbW9kdWxlc3x8W107Zm9yKGU9MDtlPG4ubGVuZ3RoO2UrKyl7dmFyIGk9bltlXS5uYW1lO2lmKGk9PT10KXJldHVybiEwO3ZhciBvPWEubW9kdWxlc1tpXTtpZihvJiZvLmNhdGVnb3JpZXNbdF0pcmV0dXJuITB9cmV0dXJuITF9LHYuY2xlYW5QbG90PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbz1uLl9iYXNlUGxvdE1vZHVsZXN8fFtdO2ZvcihpPTA7aTxvLmxlbmd0aDtpKyspe3ZhciBzPW9baV07cy5jbGVhbiYmcy5jbGVhbih0LGUscixuKX12YXIgbD1uLl9oYXMmJm4uX2hhcyhcImdsXCIpLGM9ZS5faGFzJiZlLl9oYXMoXCJnbFwiKTtsJiYhYyYmdm9pZCAwIT09bi5fZ2xjb250YWluZXImJihuLl9nbGNvbnRhaW5lci5zZWxlY3RBbGwoXCIuZ2wtY2FudmFzXCIpLnJlbW92ZSgpLG4uX2dsY29udGFpbmVyLnNlbGVjdEFsbChcIi5uby13ZWJnbFwiKS5yZW1vdmUoKSxuLl9nbGNhbnZhcz1udWxsKTt2YXIgdT0hIW4uX2luZm9sYXllcjt0OmZvcihpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBoPXJbaV0udWlkO2ZvcihhPTA7YTx0Lmxlbmd0aDthKyspe2lmKGg9PT10W2FdLnVpZCljb250aW51ZSB0fXUmJm4uX2luZm9sYXllci5zZWxlY3QoXCIuY2JcIitoKS5yZW1vdmUoKX19LHYubGlua1N1YnBsb3RzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbz1uLl9wbG90c3x8e30scz1lLl9wbG90cz17fSxjPWUuX3N1YnBsb3RzLHU9e19mdWxsRGF0YTp0LF9mdWxsTGF5b3V0OmV9LGY9Yy5jYXJ0ZXNpYW4uY29uY2F0KGMuZ2wyZHx8W10pO2ZvcihpPTA7aTxmLmxlbmd0aDtpKyspe3ZhciBwLGQ9ZltpXSxnPW9bZF0sdj1oLmdldEZyb21JZCh1LGQsXCJ4XCIpLG09aC5nZXRGcm9tSWQodSxkLFwieVwiKTtmb3IoZz9wPXNbZF09ZzoocD1zW2RdPXt9KS5pZD1kLHYuX2NvdW50ZXJBeGVzLnB1c2gobS5faWQpLG0uX2NvdW50ZXJBeGVzLnB1c2godi5faWQpLHYuX3N1YnBsb3RzV2l0aC5wdXNoKGQpLG0uX3N1YnBsb3RzV2l0aC5wdXNoKGQpLHAueGF4aXM9dixwLnlheGlzPW0scC5faGFzQ2xpcE9uQXhpc0ZhbHNlPSExLGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIHk9dFthXTtpZih5LnhheGlzPT09cC54YXhpcy5faWQmJnkueWF4aXM9PT1wLnlheGlzLl9pZCYmITE9PT15LmNsaXBvbmF4aXMpe3AuX2hhc0NsaXBPbkF4aXNGYWxzZT0hMDticmVha319fXZhciB4LGI9aC5saXN0KHUsbnVsbCwhMCk7Zm9yKGk9MDtpPGIubGVuZ3RoO2krKyl7dmFyIF89bnVsbDsoeD1iW2ldKS5vdmVybGF5aW5nJiYoXz1oLmdldEZyb21JZCh1LHgub3ZlcmxheWluZykpJiZfLm92ZXJsYXlpbmcmJih4Lm92ZXJsYXlpbmc9ITEsXz1udWxsKSx4Ll9tYWluQXhpcz1ffHx4LF8mJih4LmRvbWFpbj1fLmRvbWFpbi5zbGljZSgpKSx4Ll9hbmNob3JBeGlzPVwiZnJlZVwiPT09eC5hbmNob3I/bnVsbDpoLmdldEZyb21JZCh1LHguYW5jaG9yKX1mb3IoaT0wO2k8Yi5sZW5ndGg7aSsrKSh4PWJbaV0pLl9jb3VudGVyQXhlcy5zb3J0KGguaWRTb3J0KSx4Ll9zdWJwbG90c1dpdGguc29ydChsLnN1YnBsb3RTb3J0KSx4Ll9tYWluU3VicGxvdD13KHgsZSl9LHYuY2xlYXJFeHBhbmRlZFRyYWNlRGVmYXVsdENvbG9ycz1mdW5jdGlvbih0KXt2YXIgZSxyLG47Zm9yKHI9W10sKGU9dC5fbW9kdWxlLl9jb2xvckF0dHJzKXx8KHQuX21vZHVsZS5fY29sb3JBdHRycz1lPVtdLG8uY3Jhd2wodC5fbW9kdWxlLmF0dHJpYnV0ZXMsZnVuY3Rpb24odCxuLGksYSl7clthXT1uLHIubGVuZ3RoPWErMSxcImNvbG9yXCI9PT10LnZhbFR5cGUmJnZvaWQgMD09PXQuZGZsdCYmZS5wdXNoKHIuam9pbihcIi5cIikpfSkpLG49MDtuPGUubGVuZ3RoO24rKyl7bC5uZXN0ZWRQcm9wZXJ0eSh0LFwiX2lucHV0LlwiK2Vbbl0pLmdldCgpfHxsLm5lc3RlZFByb3BlcnR5KHQsZVtuXSkuc2V0KG51bGwpfX0sdi5zdXBwbHlEYXRhRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksbyxjLHU9bi5fbW9kdWxlcyxoPW4uX3Zpc2libGVNb2R1bGVzLGY9bi5fYmFzZVBsb3RNb2R1bGVzLHA9MCxnPTA7ZnVuY3Rpb24gbSh0KXtlLnB1c2godCk7dmFyIHI9dC5fbW9kdWxlO3ImJihsLnB1c2hVbmlxdWUodSxyKSwhMD09PXQudmlzaWJsZSYmbC5wdXNoVW5pcXVlKGgsciksbC5wdXNoVW5pcXVlKGYsdC5fbW9kdWxlLmJhc2VQbG90TW9kdWxlKSxwKyssITEhPT10Ll9pbnB1dC52aXNpYmxlJiZnKyspfW4uX3RyYW5zZm9ybU1vZHVsZXM9W107dmFyIHk9e30seD1bXSxiPShyLnRlbXBsYXRlfHx7fSkuZGF0YXx8e30sXz1zLnRyYWNlVGVtcGxhdGVyKGIpO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe2lmKGM9dFtpXSwobz1fLm5ld1RyYWNlKGMpKS51aWQ9bi5fdHJhY2VVaWRzW2ldLHYuc3VwcGx5VHJhY2VEZWZhdWx0cyhjLG8sZyxuLGkpLG8uaW5kZXg9aSxvLl9pbnB1dD1jLG8uX2V4cGFuZGVkSW5kZXg9cCxvLnRyYW5zZm9ybXMmJm8udHJhbnNmb3Jtcy5sZW5ndGgpZm9yKHZhciB3PSExIT09Yy52aXNpYmxlJiYhMT09PW8udmlzaWJsZSxrPUEobyxlLHIsbiksVD0wO1Q8ay5sZW5ndGg7VCsrKXt2YXIgTT1rW1RdLFM9e190ZW1wbGF0ZTpvLl90ZW1wbGF0ZSx0eXBlOm8udHlwZSx1aWQ6by51aWQrVH07dyYmITE9PT1NLnZpc2libGUmJmRlbGV0ZSBNLnZpc2libGUsdi5zdXBwbHlUcmFjZURlZmF1bHRzKE0sUyxwLG4saSksZChTLE0pLFMuaW5kZXg9aSxTLl9pbnB1dD1jLFMuX2Z1bGxJbnB1dD1vLFMuX2V4cGFuZGVkSW5kZXg9cCxTLl9leHBhbmRlZElucHV0PU0sbShTKX1lbHNlIG8uX2Z1bGxJbnB1dD1vLG8uX2V4cGFuZGVkSW5wdXQ9byxtKG8pO2EudHJhY2VJcyhvLFwiY2FycGV0QXhpc1wiKSYmKHlbby5jYXJwZXRdPW8pLGEudHJhY2VJcyhvLFwiY2FycGV0RGVwZW5kZW50XCIpJiZ4LnB1c2goaSl9Zm9yKGk9MDtpPHgubGVuZ3RoO2krKylpZigobz1lW3hbaV1dKS52aXNpYmxlKXt2YXIgRT15W28uY2FycGV0XTtvLl9jYXJwZXQ9RSxFJiZFLnZpc2libGU/KG8ueGF4aXM9RS54YXhpcyxvLnlheGlzPUUueWF4aXMpOm8udmlzaWJsZT0hMX19LHYuc3VwcGx5QW5pbWF0aW9uRGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU7dD10fHx7fTt2YXIgcj17fTtmdW5jdGlvbiBuKGUsbil7cmV0dXJuIGwuY29lcmNlKHR8fHt9LHIsZixlLG4pfWlmKG4oXCJtb2RlXCIpLG4oXCJkaXJlY3Rpb25cIiksbihcImZyb21jdXJyZW50XCIpLEFycmF5LmlzQXJyYXkodC5mcmFtZSkpZm9yKHIuZnJhbWU9W10sZT0wO2U8dC5mcmFtZS5sZW5ndGg7ZSsrKXIuZnJhbWVbZV09di5zdXBwbHlBbmltYXRpb25GcmFtZURlZmF1bHRzKHQuZnJhbWVbZV18fHt9KTtlbHNlIHIuZnJhbWU9di5zdXBwbHlBbmltYXRpb25GcmFtZURlZmF1bHRzKHQuZnJhbWV8fHt9KTtpZihBcnJheS5pc0FycmF5KHQudHJhbnNpdGlvbikpZm9yKHIudHJhbnNpdGlvbj1bXSxlPTA7ZTx0LnRyYW5zaXRpb24ubGVuZ3RoO2UrKylyLnRyYW5zaXRpb25bZV09di5zdXBwbHlBbmltYXRpb25UcmFuc2l0aW9uRGVmYXVsdHModC50cmFuc2l0aW9uW2VdfHx7fSk7ZWxzZSByLnRyYW5zaXRpb249di5zdXBwbHlBbmltYXRpb25UcmFuc2l0aW9uRGVmYXVsdHModC50cmFuc2l0aW9ufHx7fSk7cmV0dXJuIHJ9LHYuc3VwcGx5QW5pbWF0aW9uRnJhbWVEZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiByKHIsbil7cmV0dXJuIGwuY29lcmNlKHR8fHt9LGUsZi5mcmFtZSxyLG4pfXJldHVybiByKFwiZHVyYXRpb25cIikscihcInJlZHJhd1wiKSxlfSx2LnN1cHBseUFuaW1hdGlvblRyYW5zaXRpb25EZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiByKHIsbil7cmV0dXJuIGwuY29lcmNlKHR8fHt9LGUsZi50cmFuc2l0aW9uLHIsbil9cmV0dXJuIHIoXCJkdXJhdGlvblwiKSxyKFwiZWFzaW5nXCIpLGV9LHYuc3VwcGx5RnJhbWVEZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiByKHIsbil7cmV0dXJuIGwuY29lcmNlKHQsZSxwLHIsbil9cmV0dXJuIHIoXCJncm91cFwiKSxyKFwibmFtZVwiKSxyKFwidHJhY2VzXCIpLHIoXCJiYXNlZnJhbWVcIikscihcImRhdGFcIikscihcImxheW91dFwiKSxlfSx2LnN1cHBseVRyYWNlRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbyxzPW4uY29sb3J3YXl8fGMuZGVmYXVsdHMsdT1zW3Ilcy5sZW5ndGhdO2Z1bmN0aW9uIGgocixuKXtyZXR1cm4gbC5jb2VyY2UodCxlLHYuYXR0cmlidXRlcyxyLG4pfXZhciBmPWgoXCJ2aXNpYmxlXCIpO2goXCJ0eXBlXCIpLGgoXCJuYW1lXCIsbi5fdHJhY2VXb3JkK1wiIFwiK2kpLGgoXCJ1aXJldmlzaW9uXCIsbi51aXJldmlzaW9uKTt2YXIgcD12LmdldE1vZHVsZShlKTtpZihlLl9tb2R1bGU9cCxwKXt2YXIgZD1wLmJhc2VQbG90TW9kdWxlLGc9ZC5hdHRyLG09ZC5hdHRyaWJ1dGVzO2lmKGcmJm0pe3ZhciB5PW4uX3N1YnBsb3RzLHg9XCJcIjtpZihcImdsMmRcIiE9PWQubmFtZXx8Zil7aWYoQXJyYXkuaXNBcnJheShnKSlmb3Iobz0wO288Zy5sZW5ndGg7bysrKXt2YXIgYj1nW29dLF89bC5jb2VyY2UodCxlLG0sYik7eVtiXSYmbC5wdXNoVW5pcXVlKHlbYl0sXykseCs9X31lbHNlIHg9bC5jb2VyY2UodCxlLG0sZyk7eVtkLm5hbWVdJiZsLnB1c2hVbmlxdWUoeVtkLm5hbWVdLHgpfX19cmV0dXJuIGYmJihoKFwiY3VzdG9tZGF0YVwiKSxoKFwiaWRzXCIpLGEudHJhY2VJcyhlLFwic2hvd0xlZ2VuZFwiKT8oZS5fZGZsdFNob3dMZWdlbmQ9ITAsaChcInNob3dsZWdlbmRcIiksaChcImxlZ2VuZGdyb3VwXCIpKTplLl9kZmx0U2hvd0xlZ2VuZD0hMSxwJiZwLnN1cHBseURlZmF1bHRzKHQsZSx1LG4pLGEudHJhY2VJcyhlLFwibm9PcGFjaXR5XCIpfHxoKFwib3BhY2l0eVwiKSxhLnRyYWNlSXMoZSxcIm5vdExlZ2VuZElzb2xhdGFibGVcIikmJihlLnZpc2libGU9ISFlLnZpc2libGUpLGEudHJhY2VJcyhlLFwibm9Ib3ZlclwiKXx8KGUuaG92ZXJ0ZW1wbGF0ZXx8bC5jb2VyY2VIb3ZlcmluZm8odCxlLG4pLFwicGFyY2F0c1wiIT09ZS50eXBlJiZhLmdldENvbXBvbmVudE1ldGhvZChcImZ4XCIsXCJzdXBwbHlEZWZhdWx0c1wiKSh0LGUsdSxuKSkscCYmcC5zZWxlY3RQb2ludHMmJmgoXCJzZWxlY3RlZHBvaW50c1wiKSx2LnN1cHBseVRyYW5zZm9ybURlZmF1bHRzKHQsZSxuKSksZX0sdi5oYXNNYWtlc0RhdGFUcmFuc2Zvcm09ayx2LnN1cHBseVRyYW5zZm9ybURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyKXtpZihlLl9sZW5ndGh8fGsodCkpe3ZhciBuPXIuX2dsb2JhbFRyYW5zZm9ybXN8fFtdLGk9ci5fdHJhbnNmb3JtTW9kdWxlc3x8W107aWYoQXJyYXkuaXNBcnJheSh0LnRyYW5zZm9ybXMpfHwwIT09bi5sZW5ndGgpZm9yKHZhciBhPXQudHJhbnNmb3Jtc3x8W10sbz1uLmNvbmNhdChhKSxzPWUudHJhbnNmb3Jtcz1bXSxjPTA7YzxvLmxlbmd0aDtjKyspe3ZhciB1LGg9b1tjXSxmPWgudHlwZSxwPW1bZl0sZD0hKGguX21vZHVsZSYmaC5fbW9kdWxlPT09cCksZz1wJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBwLnRyYW5zZm9ybTtwfHxsLndhcm4oXCJVbnJlY29nbml6ZWQgdHJhbnNmb3JtIHR5cGUgXCIrZitcIi5cIikscCYmcC5zdXBwbHlEZWZhdWx0cyYmKGR8fGcpPygodT1wLnN1cHBseURlZmF1bHRzKGgsZSxyLHQpKS50eXBlPWYsdS5fbW9kdWxlPXAsbC5wdXNoVW5pcXVlKGkscCkpOnU9bC5leHRlbmRGbGF0KHt9LGgpLHMucHVzaCh1KX19fSx2LnN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHIsbil7cmV0dXJuIGwuY29lcmNlKHQsZSx2LmxheW91dEF0dHJpYnV0ZXMscixuKX12YXIgaT10LnRlbXBsYXRlO2wuaXNQbGFpbk9iamVjdChpKSYmKGUudGVtcGxhdGU9aSxlLl90ZW1wbGF0ZT1pLmxheW91dCxlLl9kYXRhVGVtcGxhdGU9aS5kYXRhKTt2YXIgbz1sLmNvZXJjZUZvbnQobixcImZvbnRcIik7bihcInRpdGxlLnRleHRcIixlLl9kZmx0VGl0bGUucGxvdCksbC5jb2VyY2VGb250KG4sXCJ0aXRsZS5mb250XCIse2ZhbWlseTpvLmZhbWlseSxzaXplOk1hdGgucm91bmQoMS40Km8uc2l6ZSksY29sb3I6by5jb2xvcn0pLG4oXCJ0aXRsZS54cmVmXCIpLG4oXCJ0aXRsZS55cmVmXCIpLG4oXCJ0aXRsZS54XCIpLG4oXCJ0aXRsZS55XCIpLG4oXCJ0aXRsZS54YW5jaG9yXCIpLG4oXCJ0aXRsZS55YW5jaG9yXCIpLG4oXCJ0aXRsZS5wYWQudFwiKSxuKFwidGl0bGUucGFkLnJcIiksbihcInRpdGxlLnBhZC5iXCIpLG4oXCJ0aXRsZS5wYWQubFwiKSxuKFwiYXV0b3NpemVcIiwhKHQud2lkdGgmJnQuaGVpZ2h0KSksbihcIndpZHRoXCIpLG4oXCJoZWlnaHRcIiksbihcIm1hcmdpbi5sXCIpLG4oXCJtYXJnaW4uclwiKSxuKFwibWFyZ2luLnRcIiksbihcIm1hcmdpbi5iXCIpLG4oXCJtYXJnaW4ucGFkXCIpLG4oXCJtYXJnaW4uYXV0b2V4cGFuZFwiKSx0LndpZHRoJiZ0LmhlaWdodCYmdi5zYW5pdGl6ZU1hcmdpbnMoZSksYS5nZXRDb21wb25lbnRNZXRob2QoXCJncmlkXCIsXCJzaXplRGVmYXVsdHNcIikodCxlKSxuKFwicGFwZXJfYmdjb2xvclwiKSxuKFwic2VwYXJhdG9yc1wiLHIuZGVjaW1hbCtyLnRob3VzYW5kcyksbihcImhpZGVzb3VyY2VzXCIpLG4oXCJjb2xvcndheVwiKSxuKFwiZGF0YXJldmlzaW9uXCIpO3ZhciBzPW4oXCJ1aXJldmlzaW9uXCIpO24oXCJlZGl0cmV2aXNpb25cIixzKSxuKFwic2VsZWN0aW9ucmV2aXNpb25cIixzKSxuKFwibW9kZWJhci5vcmllbnRhdGlvblwiKSxuKFwibW9kZWJhci5iZ2NvbG9yXCIsYy5hZGRPcGFjaXR5KGUucGFwZXJfYmdjb2xvciwuNSkpO3ZhciB1PWMuY29udHJhc3QoYy5yZ2IoZS5tb2RlYmFyLmJnY29sb3IpKTtuKFwibW9kZWJhci5jb2xvclwiLGMuYWRkT3BhY2l0eSh1LC4zKSksbihcIm1vZGViYXIuYWN0aXZlY29sb3JcIixjLmFkZE9wYWNpdHkodSwuNykpLG4oXCJtb2RlYmFyLnVpcmV2aXNpb25cIixzKSxuKFwibWV0YVwiKSxsLmlzUGxhaW5PYmplY3QodC50cmFuc2l0aW9uKSYmKG4oXCJ0cmFuc2l0aW9uLmR1cmF0aW9uXCIpLG4oXCJ0cmFuc2l0aW9uLmVhc2luZ1wiKSxuKFwidHJhbnNpdGlvbi5vcmRlcmluZ1wiKSksYS5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcImhhbmRsZURlZmF1bHRzXCIpKHQsZSxcImNhbGVuZGFyXCIpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKFwiZnhcIixcInN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzXCIpKHQsZSxuKX0sdi5wbG90QXV0b1NpemU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGEsbz10Ll9jb250ZXh0fHx7fSxzPW8uZnJhbWVNYXJnaW5zLGM9bC5pc1Bsb3REaXYodCk7aWYoYyYmdC5lbWl0KFwicGxvdGx5X2F1dG9zaXplXCIpLG8uZmlsbEZyYW1lKW49d2luZG93LmlubmVyV2lkdGgsYT13aW5kb3cuaW5uZXJIZWlnaHQsZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz1cImhpZGRlblwiO2Vsc2V7dmFyIHU9Yz93aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KTp7fTtpZihuPXBhcnNlRmxvYXQodS53aWR0aCl8fHBhcnNlRmxvYXQodS5tYXhXaWR0aCl8fHIud2lkdGgsYT1wYXJzZUZsb2F0KHUuaGVpZ2h0KXx8cGFyc2VGbG9hdCh1Lm1heEhlaWdodCl8fHIuaGVpZ2h0LGkocykmJnM+MCl7dmFyIGg9MS0yKnM7bj1NYXRoLnJvdW5kKGgqbiksYT1NYXRoLnJvdW5kKGgqYSl9fXZhciBmPXYubGF5b3V0QXR0cmlidXRlcy53aWR0aC5taW4scD12LmxheW91dEF0dHJpYnV0ZXMuaGVpZ2h0Lm1pbjtuPGYmJihuPWYpLGE8cCYmKGE9cCk7dmFyIGQ9IWUud2lkdGgmJk1hdGguYWJzKHIud2lkdGgtbik+MSxnPSFlLmhlaWdodCYmTWF0aC5hYnMoci5oZWlnaHQtYSk+MTsoZ3x8ZCkmJihkJiYoci53aWR0aD1uKSxnJiYoci5oZWlnaHQ9YSkpLHQuX2luaXRpYWxBdXRvU2l6ZXx8KHQuX2luaXRpYWxBdXRvU2l6ZT17d2lkdGg6bixoZWlnaHQ6YX0pLHYuc2FuaXRpemVNYXJnaW5zKHIpfSx2LnN1cHBseUxheW91dE1vZHVsZURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLG8scyxjPWEuY29tcG9uZW50c1JlZ2lzdHJ5LHU9ZS5fYmFzZVBsb3RNb2R1bGVzLGg9YS5zdWJwbG90c1JlZ2lzdHJ5LmNhcnRlc2lhbjtmb3IoaSBpbiBjKShzPWNbaV0pLmluY2x1ZGVCYXNlUGxvdCYmcy5pbmNsdWRlQmFzZVBsb3QodCxlKTtmb3IodmFyIGYgaW4gdS5sZW5ndGh8fHUucHVzaChoKSxlLl9oYXMoXCJjYXJ0ZXNpYW5cIikmJihhLmdldENvbXBvbmVudE1ldGhvZChcImdyaWRcIixcImNvbnRlbnREZWZhdWx0c1wiKSh0LGUpLGguZmluYWxpemVTdWJwbG90cyh0LGUpKSxlLl9zdWJwbG90cyllLl9zdWJwbG90c1tmXS5zb3J0KGwuc3VicGxvdFNvcnQpO2ZvcihvPTA7bzx1Lmxlbmd0aDtvKyspKHM9dVtvXSkuc3VwcGx5TGF5b3V0RGVmYXVsdHMmJnMuc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIpO3ZhciBwPWUuX21vZHVsZXM7Zm9yKG89MDtvPHAubGVuZ3RoO28rKykocz1wW29dKS5zdXBwbHlMYXlvdXREZWZhdWx0cyYmcy5zdXBwbHlMYXlvdXREZWZhdWx0cyh0LGUscik7dmFyIGQ9ZS5fdHJhbnNmb3JtTW9kdWxlcztmb3Iobz0wO288ZC5sZW5ndGg7bysrKShzPWRbb10pLnN1cHBseUxheW91dERlZmF1bHRzJiZzLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyLG4pO2ZvcihpIGluIGMpKHM9Y1tpXSkuc3VwcGx5TGF5b3V0RGVmYXVsdHMmJnMuc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIpfSx2LnB1cmdlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXR8fHt9O3ZvaWQgMCE9PWUuX2dsY29udGFpbmVyJiYoZS5fZ2xjb250YWluZXIuc2VsZWN0QWxsKFwiLmdsLWNhbnZhc1wiKS5yZW1vdmUoKSxlLl9nbGNvbnRhaW5lci5yZW1vdmUoKSxlLl9nbGNhbnZhcz1udWxsKSx2b2lkIDAhPT1lLl9nZW9jb250YWluZXImJmUuX2dlb2NvbnRhaW5lci5yZW1vdmUoKSxlLl9tb2RlQmFyJiZlLl9tb2RlQmFyLmRlc3Ryb3koKSx0Ll90cmFuc2l0aW9uRGF0YSYmKHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MmJih0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLmxlbmd0aD0wKSx0Ll90cmFuc2l0aW9uRGF0YS5fYW5pbWF0aW9uUmFmJiZ3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodC5fdHJhbnNpdGlvbkRhdGEuX2FuaW1hdGlvblJhZikpLGwuY2xlYXJUaHJvdHRsZSgpLGwuY2xlYXJSZXNwb25zaXZlKHQpLGRlbGV0ZSB0LmRhdGEsZGVsZXRlIHQubGF5b3V0LGRlbGV0ZSB0Ll9mdWxsRGF0YSxkZWxldGUgdC5fZnVsbExheW91dCxkZWxldGUgdC5jYWxjZGF0YSxkZWxldGUgdC5mcmFtZXdvcmssZGVsZXRlIHQuZW1wdHksZGVsZXRlIHQuZmlkLGRlbGV0ZSB0LnVuZG9xdWV1ZSxkZWxldGUgdC51bmRvbnVtLGRlbGV0ZSB0LmF1dG9wbGF5LGRlbGV0ZSB0LmNoYW5nZWQsZGVsZXRlIHQuX3Byb21pc2VzLGRlbGV0ZSB0Ll9yZWRyYXdUaW1lcixkZWxldGUgdC5faG1sdW1jb3VudCxkZWxldGUgdC5faG1waXhjb3VudCxkZWxldGUgdC5fdHJhbnNpdGlvbkRhdGEsZGVsZXRlIHQuX3RyYW5zaXRpb25pbmcsZGVsZXRlIHQuX2luaXRpYWxBdXRvU2l6ZSxkZWxldGUgdC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbixkZWxldGUgdC5fZHJhZ2dpbmcsZGVsZXRlIHQuX2RyYWdnZWQsZGVsZXRlIHQuX2RyYWdkYXRhLGRlbGV0ZSB0Ll9ob3ZlcmRhdGEsZGVsZXRlIHQuX3NuYXBzaG90SW5Qcm9ncmVzcyxkZWxldGUgdC5fZWRpdGluZyxkZWxldGUgdC5fbW91c2VEb3duVGltZSxkZWxldGUgdC5fbGVnZW5kTW91c2VEb3duVGltZSx0LnJlbW92ZUFsbExpc3RlbmVycyYmdC5yZW1vdmVBbGxMaXN0ZW5lcnMoKX0sdi5zdHlsZT1mdW5jdGlvbih0KXt2YXIgZSxyPXQuX2Z1bGxMYXlvdXQuX3Zpc2libGVNb2R1bGVzLG49W107Zm9yKGU9MDtlPHIubGVuZ3RoO2UrKyl7dmFyIGk9cltlXTtpLnN0eWxlJiZsLnB1c2hVbmlxdWUobixpLnN0eWxlKX1mb3IoZT0wO2U8bi5sZW5ndGg7ZSsrKW5bZV0odCl9LHYuc2FuaXRpemVNYXJnaW5zPWZ1bmN0aW9uKHQpe2lmKHQmJnQubWFyZ2luKXt2YXIgZSxyPXQud2lkdGgsbj10LmhlaWdodCxpPXQubWFyZ2luLGE9ci0oaS5sK2kuciksbz1uLShpLnQraS5iKTthPDAmJihlPShyLTEpLyhpLmwraS5yKSxpLmw9TWF0aC5mbG9vcihlKmkubCksaS5yPU1hdGguZmxvb3IoZSppLnIpKSxvPDAmJihlPShuLTEpLyhpLnQraS5iKSxpLnQ9TWF0aC5mbG9vcihlKmkudCksaS5iPU1hdGguZmxvb3IoZSppLmIpKX19LHYuY2xlYXJBdXRvTWFyZ2luSWRzPWZ1bmN0aW9uKHQpe3QuX2Z1bGxMYXlvdXQuX3B1c2htYXJnaW5JZHM9e319LHYuYWxsb3dBdXRvTWFyZ2luPWZ1bmN0aW9uKHQsZSl7dC5fZnVsbExheW91dC5fcHVzaG1hcmdpbklkc1tlXT0xfSx2LmF1dG9NYXJnaW49ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuX2Z1bGxMYXlvdXQsaT1uLl9wdXNobWFyZ2luLGE9bi5fcHVzaG1hcmdpbklkcztpZighMSE9PW4ubWFyZ2luLmF1dG9leHBhbmQpe2lmKHIpe3ZhciBvPXIucGFkO2lmKHZvaWQgMD09PW8pe3ZhciBzPW4ubWFyZ2luO289TWF0aC5taW4oMTIscy5sLHMucixzLnQscy5iKX1yLmwrci5yPi41Km4ud2lkdGgmJihyLmw9ci5yPTApLHIuYityLnQ+LjUqbi5oZWlnaHQmJihyLmI9ci50PTApO3ZhciBsPXZvaWQgMCE9PXIueGw/ci54bDpyLngsYz12b2lkIDAhPT1yLnhyP3IueHI6ci54LHU9dm9pZCAwIT09ci55dD9yLnl0OnIueSxoPXZvaWQgMCE9PXIueWI/ci55YjpyLnk7aVtlXT17bDp7dmFsOmwsc2l6ZTpyLmwrb30scjp7dmFsOmMsc2l6ZTpyLnIrb30sYjp7dmFsOmgsc2l6ZTpyLmIrb30sdDp7dmFsOnUsc2l6ZTpyLnQrb319LGFbZV09MX1lbHNlIGRlbGV0ZSBpW2VdLGRlbGV0ZSBhW2VdO24uX3JlcGxvdHRpbmd8fHYuZG9BdXRvTWFyZ2luKHQpfX0sdi5kb0F1dG9NYXJnaW49ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtlLl9zaXplfHwoZS5fc2l6ZT17fSksVChlKTt2YXIgcj1lLl9zaXplLG49SlNPTi5zdHJpbmdpZnkociksbz1lLm1hcmdpbixzPW8ubCxsPW8ucixjPW8udCx1PW8uYixoPWUud2lkdGgsZj1lLmhlaWdodCxwPWUuX3B1c2htYXJnaW4sZD1lLl9wdXNobWFyZ2luSWRzO2lmKCExIT09ZS5tYXJnaW4uYXV0b2V4cGFuZCl7Zm9yKHZhciBnIGluIHApZFtnXXx8ZGVsZXRlIHBbZ107Zm9yKHZhciB2IGluIHAuYmFzZT17bDp7dmFsOjAsc2l6ZTpzfSxyOnt2YWw6MSxzaXplOmx9LHQ6e3ZhbDoxLHNpemU6Y30sYjp7dmFsOjAsc2l6ZTp1fX0scCl7dmFyIG09cFt2XS5sfHx7fSx5PXBbdl0uYnx8e30seD1tLnZhbCxiPW0uc2l6ZSxfPXkudmFsLHc9eS5zaXplO2Zvcih2YXIgayBpbiBwKXtpZihpKGIpJiZwW2tdLnIpe3ZhciBBPXBba10uci52YWwsTT1wW2tdLnIuc2l6ZTtpZihBPngpe3ZhciBTPShiKkErKE0taCkqeCkvKEEteCksRT0oTSooMS14KSsoYi1oKSooMS1BKSkvKEEteCk7Uz49MCYmRT49MCYmaC0oUytFKT4wJiZTK0U+cytsJiYocz1TLGw9RSl9fWlmKGkodykmJnBba10udCl7dmFyIEM9cFtrXS50LnZhbCxMPXBba10udC5zaXplO2lmKEM+Xyl7dmFyIHo9KHcqQysoTC1mKSpfKS8oQy1fKSxPPShMKigxLV8pKyh3LWYpKigxLUMpKS8oQy1fKTt6Pj0wJiZPPj0wJiZmLShPK3opPjAmJnorTz51K2MmJih1PXosYz1PKX19fX19aWYoci5sPU1hdGgucm91bmQocyksci5yPU1hdGgucm91bmQobCksci50PU1hdGgucm91bmQoYyksci5iPU1hdGgucm91bmQodSksci5wPU1hdGgucm91bmQoby5wYWQpLHIudz1NYXRoLnJvdW5kKGgpLXIubC1yLnIsci5oPU1hdGgucm91bmQoZiktci50LXIuYiwhZS5fcmVwbG90dGluZyYmXCJ7fVwiIT09biYmbiE9PUpTT04uc3RyaW5naWZ5KGUuX3NpemUpKXJldHVyblwiX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnRcImluIGU/ZS5fcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudCsrOmUuX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnQ9MSxhLmNhbGwoXCJwbG90XCIsdCl9LHYuZ3JhcGhKc29uPWZ1bmN0aW9uKHQsZSxyLG4saSl7KGkmJmUmJiF0Ll9mdWxsRGF0YXx8aSYmIWUmJiF0Ll9mdWxsTGF5b3V0KSYmdi5zdXBwbHlEZWZhdWx0cyh0KTt2YXIgYT1pP3QuX2Z1bGxEYXRhOnQuZGF0YSxvPWk/dC5fZnVsbExheW91dDp0LmxheW91dCxzPSh0Ll90cmFuc2l0aW9uRGF0YXx8e30pLl9mcmFtZXM7ZnVuY3Rpb24gYyh0KXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KXJldHVybiBudWxsO2lmKGwuaXNQbGFpbk9iamVjdCh0KSl7dmFyIGUsbixpPXt9O2ZvcihlIGluIHQpaWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdFtlXSYmLTE9PT1bXCJfXCIsXCJbXCJdLmluZGV4T2YoZS5jaGFyQXQoMCkpKXtpZihcImtlZXBkYXRhXCI9PT1yKXtpZihcInNyY1wiPT09ZS5zdWJzdHIoZS5sZW5ndGgtMykpY29udGludWV9ZWxzZSBpZihcImtlZXBzdHJlYW1cIj09PXIpe2lmKFwic3RyaW5nXCI9PXR5cGVvZihuPXRbZStcInNyY1wiXSkmJm4uaW5kZXhPZihcIjpcIik+MCYmIWwuaXNQbGFpbk9iamVjdCh0LnN0cmVhbSkpY29udGludWV9ZWxzZSBpZihcImtlZXBhbGxcIiE9PXImJlwic3RyaW5nXCI9PXR5cGVvZihuPXRbZStcInNyY1wiXSkmJm4uaW5kZXhPZihcIjpcIik+MCljb250aW51ZTtpW2VdPWModFtlXSl9cmV0dXJuIGl9cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5tYXAoYyk6bC5pc1R5cGVkQXJyYXkodCk/bC5zaW1wbGVNYXAodCxsLmlkZW50aXR5KTpsLmlzSlNEYXRlKHQpP2wubXMyRGF0ZVRpbWVMb2NhbCgrdCk6dH12YXIgdT17ZGF0YTooYXx8W10pLm1hcChmdW5jdGlvbih0KXt2YXIgcj1jKHQpO3JldHVybiBlJiZkZWxldGUgci5maXQscn0pfTtyZXR1cm4gZXx8KHUubGF5b3V0PWMobykpLHQuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5pc1BvbGFyJiYodT10LmZyYW1ld29yay5nZXRDb25maWcoKSkscyYmKHUuZnJhbWVzPWMocykpLFwib2JqZWN0XCI9PT1uP3U6SlNPTi5zdHJpbmdpZnkodSl9LHYubW9kaWZ5RnJhbWVzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyxvPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKylzd2l0Y2goKG49ZVtyXSkudHlwZSl7Y2FzZVwicmVwbGFjZVwiOmk9bi52YWx1ZTt2YXIgcz0oYVtuLmluZGV4XXx8e30pLm5hbWUsbD1pLm5hbWU7YVtuLmluZGV4XT1vW2xdPWksbCE9PXMmJihkZWxldGUgb1tzXSxvW2xdPWkpO2JyZWFrO2Nhc2VcImluc2VydFwiOm9bKGk9bi52YWx1ZSkubmFtZV09aSxhLnNwbGljZShuLmluZGV4LDAsaSk7YnJlYWs7Y2FzZVwiZGVsZXRlXCI6ZGVsZXRlIG9bKGk9YVtuLmluZGV4XSkubmFtZV0sYS5zcGxpY2Uobi5pbmRleCwxKX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9LHYuY29tcHV0ZUZyYW1lPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbz10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoO2lmKCFlKXRocm93IG5ldyBFcnJvcihcImNvbXB1dGVGcmFtZSBtdXN0IGJlIGdpdmVuIGEgc3RyaW5nIGZyYW1lIG5hbWVcIik7dmFyIHM9b1tlLnRvU3RyaW5nKCldO2lmKCFzKXJldHVybiExO2Zvcih2YXIgbD1bc10sYz1bcy5uYW1lXTtzLmJhc2VmcmFtZSYmKHM9b1tzLmJhc2VmcmFtZS50b1N0cmluZygpXSkmJi0xPT09Yy5pbmRleE9mKHMubmFtZSk7KWwucHVzaChzKSxjLnB1c2gocy5uYW1lKTtmb3IodmFyIHU9e307cz1sLnBvcCgpOylpZihzLmxheW91dCYmKHUubGF5b3V0PXYuZXh0ZW5kTGF5b3V0KHUubGF5b3V0LHMubGF5b3V0KSkscy5kYXRhKXtpZih1LmRhdGF8fCh1LmRhdGE9W10pLCEobj1zLnRyYWNlcykpZm9yKG49W10scj0wO3I8cy5kYXRhLmxlbmd0aDtyKyspbltyXT1yO2Zvcih1LnRyYWNlc3x8KHUudHJhY2VzPVtdKSxyPTA7cjxzLmRhdGEubGVuZ3RoO3IrKyludWxsIT0oaT1uW3JdKSYmKC0xPT09KGE9dS50cmFjZXMuaW5kZXhPZihpKSkmJihhPXUuZGF0YS5sZW5ndGgsdS50cmFjZXNbYV09aSksdS5kYXRhW2FdPXYuZXh0ZW5kVHJhY2UodS5kYXRhW2FdLHMuZGF0YVtyXSkpfXJldHVybiB1fSx2LnJlY29tcHV0ZUZyYW1lSGFzaD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaD17fSxyPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2kmJmkubmFtZSYmKGVbaS5uYW1lXT1pKX19LHYuZXh0ZW5kT2JqZWN0V2l0aENvbnRhaW5lcnM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHMsYyx1LGg9bC5leHRlbmREZWVwTm9BcnJheXMoe30sZXx8e30pLGY9bC5leHBhbmRPYmplY3RQYXRocyhoKSxwPXt9O2lmKHImJnIubGVuZ3RoKWZvcihhPTA7YTxyLmxlbmd0aDthKyspdm9pZCAwPT09KGk9KG49bC5uZXN0ZWRQcm9wZXJ0eShmLHJbYV0pKS5nZXQoKSk/bC5uZXN0ZWRQcm9wZXJ0eShwLHJbYV0pLnNldChudWxsKToobi5zZXQobnVsbCksbC5uZXN0ZWRQcm9wZXJ0eShwLHJbYV0pLnNldChpKSk7aWYodD1sLmV4dGVuZERlZXBOb0FycmF5cyh0fHx7fSxmKSxyJiZyLmxlbmd0aClmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKWlmKGM9bC5uZXN0ZWRQcm9wZXJ0eShwLHJbYV0pLmdldCgpKXtmb3IodT0ocz1sLm5lc3RlZFByb3BlcnR5KHQsclthXSkpLmdldCgpLEFycmF5LmlzQXJyYXkodSl8fCh1PVtdLHMuc2V0KHUpKSxvPTA7bzxjLmxlbmd0aDtvKyspe3ZhciBkPWNbb107dVtvXT1udWxsPT09ZD9udWxsOnYuZXh0ZW5kT2JqZWN0V2l0aENvbnRhaW5lcnModVtvXSxkKX1zLnNldCh1KX1yZXR1cm4gdH0sdi5kYXRhQXJyYXlDb250YWluZXJzPVtcInRyYW5zZm9ybXNcIixcImRpbWVuc2lvbnNcIl0sdi5sYXlvdXRBcnJheUNvbnRhaW5lcnM9YS5sYXlvdXRBcnJheUNvbnRhaW5lcnMsdi5leHRlbmRUcmFjZT1mdW5jdGlvbih0LGUpe3JldHVybiB2LmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzKHQsZSx2LmRhdGFBcnJheUNvbnRhaW5lcnMpfSx2LmV4dGVuZExheW91dD1mdW5jdGlvbih0LGUpe3JldHVybiB2LmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzKHQsZSx2LmxheW91dEFycmF5Q29udGFpbmVycyl9LHYudHJhbnNpdGlvbj1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89e3JlZHJhdzppLnJlZHJhd30scz1bXSxjPVtdO3JldHVybiBvLnByZXBhcmVGbj1mdW5jdGlvbigpe2Zvcih2YXIgaT1BcnJheS5pc0FycmF5KGUpP2UubGVuZ3RoOjAsYT1uLnNsaWNlKDAsaSksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgdT1hW29dLGg9dC5fZnVsbERhdGFbdV0uX21vZHVsZTtoJiYoaC5hbmltYXRhYmxlJiZzLnB1c2godSksdC5kYXRhW2Fbb11dPXYuZXh0ZW5kVHJhY2UodC5kYXRhW2Fbb11dLGVbb10pKX12YXIgZj1sLmV4cGFuZE9iamVjdFBhdGhzKGwuZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LHIpKSxwPS9eW3h5XWF4aXNbMC05XSokLztmb3IodmFyIGQgaW4gZilwLnRlc3QoZCkmJmRlbGV0ZSBmW2RdLnJhbmdlO3YuZXh0ZW5kTGF5b3V0KHQubGF5b3V0LGYpLGRlbGV0ZSB0LmNhbGNkYXRhLHYuc3VwcGx5RGVmYXVsdHModCksdi5kb0NhbGNkYXRhKHQpO3ZhciBnPWwuZXhwYW5kT2JqZWN0UGF0aHMocik7aWYoZyl7dmFyIG09dC5fZnVsbExheW91dC5fcGxvdHM7Zm9yKHZhciB5IGluIG0pe3ZhciB4LGIsXyx3LGs9bVt5XSxBPWsueGF4aXMsVD1rLnlheGlzLE09QS5yYW5nZS5zbGljZSgpLFM9VC5yYW5nZS5zbGljZSgpO0FycmF5LmlzQXJyYXkoZ1tBLl9uYW1lK1wiLnJhbmdlXCJdKT94PWdbQS5fbmFtZStcIi5yYW5nZVwiXS5zbGljZSgpOkFycmF5LmlzQXJyYXkoKGdbQS5fbmFtZV18fHt9KS5yYW5nZSkmJih4PWdbQS5fbmFtZV0ucmFuZ2Uuc2xpY2UoKSksQXJyYXkuaXNBcnJheShnW1QuX25hbWUrXCIucmFuZ2VcIl0pP2I9Z1tULl9uYW1lK1wiLnJhbmdlXCJdLnNsaWNlKCk6QXJyYXkuaXNBcnJheSgoZ1tULl9uYW1lXXx8e30pLnJhbmdlKSYmKGI9Z1tULl9uYW1lXS5yYW5nZS5zbGljZSgpKSxNJiZ4JiYoTVswXSE9PXhbMF18fE1bMV0hPT14WzFdKSYmKF89e3hyMDpNLHhyMTp4fSksUyYmYiYmKFNbMF0hPT1iWzBdfHxTWzFdIT09YlsxXSkmJih3PXt5cjA6Uyx5cjE6Yn0pLChffHx3KSYmYy5wdXNoKGwuZXh0ZW5kRmxhdCh7cGxvdGluZm86a30sXyx3KSl9fXJldHVybiBQcm9taXNlLnJlc29sdmUoKX0sby5ydW5Gbj1mdW5jdGlvbihlKXt2YXIgbixpLG89dC5fZnVsbExheW91dC5fYmFzZVBsb3RNb2R1bGVzLHU9Yy5sZW5ndGg7aWYocilmb3IoaT0wO2k8by5sZW5ndGg7aSsrKW9baV0udHJhbnNpdGlvbkF4ZXMmJm9baV0udHJhbnNpdGlvbkF4ZXModCxjLGEsZSk7Zm9yKHU/KChuPWwuZXh0ZW5kRmxhdCh7fSxhKSkuZHVyYXRpb249MCxzPW51bGwpOm49YSxpPTA7aTxvLmxlbmd0aDtpKyspb1tpXS5wbG90KHQscyxuLGUpfSxNKHQsYSxvKX0sdi50cmFuc2l0aW9uRnJvbVJlYWN0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuX2Z1bGxMYXlvdXQsYT1pLnRyYW5zaXRpb24sbz17fSxzPVtdO3JldHVybiBvLnByZXBhcmVGbj1mdW5jdGlvbigpe3ZhciB0PWkuX3Bsb3RzO2Zvcih2YXIgYSBpbiBvLnJlZHJhdz0hMSxcInNvbWVcIj09PWUuYW5pbSYmKG8ucmVkcmF3PSEwKSxcInNvbWVcIj09PXIuYW5pbSYmKG8ucmVkcmF3PSEwKSx0KXt2YXIgYyx1LGg9dFthXSxmPWgueGF4aXMscD1oLnlheGlzLGQ9bltmLl9uYW1lXS5yYW5nZS5zbGljZSgpLGc9bltwLl9uYW1lXS5yYW5nZS5zbGljZSgpLHY9Zi5yYW5nZS5zbGljZSgpLG09cC5yYW5nZS5zbGljZSgpO2Yuc2V0U2NhbGUoKSxwLnNldFNjYWxlKCksZFswXT09PXZbMF0mJmRbMV09PT12WzFdfHwoYz17eHIwOmQseHIxOnZ9KSxnWzBdPT09bVswXSYmZ1sxXT09PW1bMV18fCh1PXt5cjA6Zyx5cjE6bX0pLChjfHx1KSYmcy5wdXNoKGwuZXh0ZW5kRmxhdCh7cGxvdGluZm86aH0sYyx1KSl9cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSxvLnJ1bkZuPWZ1bmN0aW9uKHIpe2Zvcih2YXIgbixpLG8sYz10Ll9mdWxsRGF0YSx1PXQuX2Z1bGxMYXlvdXQuX2Jhc2VQbG90TW9kdWxlcyxoPVtdLGY9MDtmPGMubGVuZ3RoO2YrKyloLnB1c2goZik7ZnVuY3Rpb24gcCgpe2Zvcih2YXIgZT0wO2U8dS5sZW5ndGg7ZSsrKXVbZV0udHJhbnNpdGlvbkF4ZXMmJnVbZV0udHJhbnNpdGlvbkF4ZXModCxzLG4scil9ZnVuY3Rpb24gZCgpe2Zvcih2YXIgZT0wO2U8dS5sZW5ndGg7ZSsrKXVbZV0ucGxvdCh0LG8saSxyKX1zLmxlbmd0aCYmZS5hbmltP1widHJhY2VzIGZpcnN0XCI9PT1hLm9yZGVyaW5nPyhuPWwuZXh0ZW5kRmxhdCh7fSxhLHtkdXJhdGlvbjowfSksbz1oLGk9YSxkKCksc2V0VGltZW91dChwLGEuZHVyYXRpb24pKToobj1hLG89bnVsbCxpPWwuZXh0ZW5kRmxhdCh7fSxhLHtkdXJhdGlvbjowfSkscCgpLGQoKSk6cy5sZW5ndGg/KG49YSxwKCkpOmUuYW5pbSYmKG89aCxpPWEsZCgpKX0sTSh0LGEsbyl9LHYuZG9DYWxjZGF0YT1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxzLGM9aC5saXN0KHQpLGY9dC5fZnVsbERhdGEscD10Ll9mdWxsTGF5b3V0LGQ9bmV3IEFycmF5KGYubGVuZ3RoKSxnPSh0LmNhbGNkYXRhfHxbXSkuc2xpY2UoMCk7Zm9yKHQuY2FsY2RhdGE9ZCxwLl9udW1Cb3hlcz0wLHAuX251bVZpb2xpbnM9MCxwLl92aW9saW5TY2FsZUdyb3VwU3RhdHM9e30sdC5faG1waXhjb3VudD0wLHQuX2htbHVtY291bnQ9MCxwLl9waWVjb2xvcm1hcD17fSxwLl9zdW5idXJzdGNvbG9ybWFwPXt9LGk9MDtpPGYubGVuZ3RoO2krKylBcnJheS5pc0FycmF5KGUpJiYtMT09PWUuaW5kZXhPZihpKSYmKGRbaV09Z1tpXSk7Zm9yKGk9MDtpPGYubGVuZ3RoO2krKykocj1mW2ldKS5fYXJyYXlBdHRycz1vLmZpbmRBcnJheUF0dHJpYnV0ZXMociksci5fZXh0cmVtZXM9e307dmFyIHY9cC5fc3VicGxvdHMucG9sYXJ8fFtdO2ZvcihpPTA7aTx2Lmxlbmd0aDtpKyspYy5wdXNoKHBbdltpXV0ucmFkaWFsYXhpcyxwW3ZbaV1dLmFuZ3VsYXJheGlzKTtTKGMsZik7dmFyIHk9ITE7Zm9yKGk9MDtpPGYubGVuZ3RoO2krKylpZighMD09PShyPWZbaV0pLnZpc2libGUmJnIudHJhbnNmb3Jtcyl7aWYoKG49ci5fbW9kdWxlKSYmbi5jYWxjKXt2YXIgeD1uLmNhbGModCxyKTt4WzBdJiZ4WzBdLnQmJnhbMF0udC5fc2NlbmUmJmRlbGV0ZSB4WzBdLnQuX3NjZW5lLmRpcnR5fWZvcihzPTA7czxyLnRyYW5zZm9ybXMubGVuZ3RoO3MrKyl7dmFyIGI9ci50cmFuc2Zvcm1zW3NdOyhuPW1bYi50eXBlXSkmJm4uY2FsY1RyYW5zZm9ybSYmKHIuX2hhc0NhbGNUcmFuc2Zvcm09ITAseT0hMCxuLmNhbGNUcmFuc2Zvcm0odCxyLGIpKX19ZnVuY3Rpb24gXyhlLGkpe2lmKHI9ZltlXSwhIShuPXIuX21vZHVsZSkuaXNDb250YWluZXI9PT1pKXt2YXIgYT1bXTtpZighMD09PXIudmlzaWJsZSl7ZGVsZXRlIHIuX2luZGV4VG9Qb2ludHM7dmFyIG89ci50cmFuc2Zvcm1zfHxbXTtmb3Iocz1vLmxlbmd0aC0xO3M+PTA7cy0tKWlmKG9bc10uZW5hYmxlZCl7ci5faW5kZXhUb1BvaW50cz1vW3NdLl9pbmRleFRvUG9pbnRzO2JyZWFrfW4mJm4uY2FsYyYmKGE9bi5jYWxjKHQscikpfUFycmF5LmlzQXJyYXkoYSkmJmFbMF18fChhPVt7eDp1LHk6dX1dKSxhWzBdLnR8fChhWzBdLnQ9e30pLGFbMF0udHJhY2U9cixkW2VdPWF9fWZvcih5JiZTKGMsZiksaT0wO2k8Zi5sZW5ndGg7aSsrKV8oaSwhMCk7Zm9yKGk9MDtpPGYubGVuZ3RoO2krKylfKGksITEpOyFmdW5jdGlvbih0KXt2YXIgZSxyLG4saT10Ll9mdWxsTGF5b3V0LGE9aS5fdmlzaWJsZU1vZHVsZXMsbz17fTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXt2YXIgcz1hW3JdLGM9cy5jcm9zc1RyYWNlQ2FsYztpZihjKXt2YXIgdT1zLmJhc2VQbG90TW9kdWxlLm5hbWU7b1t1XT9sLnB1c2hVbmlxdWUob1t1XSxjKTpvW3VdPVtjXX19Zm9yKG4gaW4gbyl7dmFyIGg9b1tuXSxmPWkuX3N1YnBsb3RzW25dO2lmKEFycmF5LmlzQXJyYXkoZikpZm9yKGU9MDtlPGYubGVuZ3RoO2UrKyl7dmFyIHA9ZltlXSxkPVwiY2FydGVzaWFuXCI9PT1uP2kuX3Bsb3RzW3BdOmlbcF07Zm9yKHI9MDtyPGgubGVuZ3RoO3IrKyloW3JdKHQsZCxwKX1lbHNlIGZvcihyPTA7cjxoLmxlbmd0aDtyKyspaFtyXSh0KX19KHQpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKFwiZnhcIixcImNhbGNcIikodCksYS5nZXRDb21wb25lbnRNZXRob2QoXCJlcnJvcmJhcnNcIixcImNhbGNcIikodCl9LHYucmVob3Zlcj1mdW5jdGlvbih0KXt0Ll9mdWxsTGF5b3V0Ll9yZWhvdmVyJiZ0Ll9mdWxsTGF5b3V0Ll9yZWhvdmVyKCl9LHYucmVkcmFnPWZ1bmN0aW9uKHQpe3QuX2Z1bGxMYXlvdXQuX3JlZHJhZyYmdC5fZnVsbExheW91dC5fcmVkcmFnKCl9LHYuZ2VuZXJhbFVwZGF0ZVBlclRyYWNlTW9kdWxlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9ZS50cmFjZUhhc2gsbz17fTtmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgcz1yW2ldLGM9c1swXS50cmFjZTtjLnZpc2libGUmJihvW2MudHlwZV09b1tjLnR5cGVdfHxbXSxvW2MudHlwZV0ucHVzaChzKSl9Zm9yKHZhciB1IGluIGEpaWYoIW9bdV0pe3ZhciBoPWFbdV1bMF07aFswXS50cmFjZS52aXNpYmxlPSExLG9bdV09W2hdfWZvcih2YXIgZiBpbiBvKXt2YXIgcD1vW2ZdO3BbMF1bMF0udHJhY2UuX21vZHVsZS5wbG90KHQsZSxsLmZpbHRlclZpc2libGUocCksbil9ZS50cmFjZUhhc2g9b319LHtcIi4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vbGliXCI6NzAxLFwiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWFcIjo3MzgsXCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vcmVnaXN0cnlcIjo4MjksXCIuL2FuaW1hdGlvbl9hdHRyaWJ1dGVzXCI6NzQ0LFwiLi9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi9jYXJ0ZXNpYW4vYXhpc19pZHNcIjo3NTIsXCIuL2NvbW1hbmRcIjo3NzMsXCIuL2ZvbnRfYXR0cmlidXRlc1wiOjc3NSxcIi4vZnJhbWVfYXR0cmlidXRlc1wiOjc3NixcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo4MDEsZDM6MTU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw4MTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e2F0dHI6XCJzdWJwbG90XCIsbmFtZTpcInBvbGFyXCIsYXhpc05hbWVzOltcImFuZ3VsYXJheGlzXCIsXCJyYWRpYWxheGlzXCJdLGF4aXNOYW1lMmRhdGFBcnJheTp7YW5ndWxhcmF4aXM6XCJ0aGV0YVwiLHJhZGlhbGF4aXM6XCJyXCJ9LGxheWVyTmFtZXM6W1wiZHJhZ2xheWVyXCIsXCJwbG90YmdcIixcImJhY2twbG90XCIsXCJhbmd1bGFyLWdyaWRcIixcInJhZGlhbC1ncmlkXCIsXCJmcm9udHBsb3RcIixcImFuZ3VsYXItbGluZVwiLFwicmFkaWFsLWxpbmVcIixcImFuZ3VsYXItYXhpc1wiLFwicmFkaWFsLWF4aXNcIl0scmFkaWFsRHJhZ0JveFNpemU6NTAsYW5ndWxhckRyYWdCb3hTaXplOjMwLGNvcm5lckxlbjoyNSxjb3JuZXJIYWxmV2lkdGg6MixNSU5EUkFHOjgsTUlOWk9PTToyMCxPRkZFREdFOjIwfX0se31dLDgxMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vbGliL3BvbHlnb25cIikudGVzdGVyLGE9bi5maW5kSW5kZXhPZk1pbixvPW4uaXNBbmdsZUluc2lkZVNlY3RvcixzPW4uYW5nbGVEZWx0YSxsPW4uYW5nbGVEaXN0O2Z1bmN0aW9uIGModCxlLHIsbil7dmFyIGksYSxvPW5bMF0scz1uWzFdLGw9aChNYXRoLnNpbihlKS1NYXRoLnNpbih0KSksYz1oKE1hdGguY29zKGUpLU1hdGguY29zKHQpKSx1PU1hdGgudGFuKHIpLGY9aCgxL3UpLHA9bC9jLGQ9cy1wKm87cmV0dXJuIGY/bCYmYz9hPXUqKGk9ZC8odS1wKSk6Yz8oaT1zKmYsYT1zKTooaT1vLGE9byp1KTpsJiZjPyhpPTAsYT1kKTpjPyhpPTAsYT1zKTppPWE9TmFOLFtpLGFdfWZ1bmN0aW9uIHUodCxlLHIsaSl7cmV0dXJuIG4uaXNGdWxsQ2lyY2xlKFtlLHJdKT9mdW5jdGlvbih0LGUpe3ZhciByLG49ZS5sZW5ndGgsaT1uZXcgQXJyYXkobisxKTtmb3Iocj0wO3I8bjtyKyspe3ZhciBhPWVbcl07aVtyXT1bdCpNYXRoLmNvcyhhKSx0Kk1hdGguc2luKGEpXX1yZXR1cm4gaVtyXT1pWzBdLnNsaWNlKCksaX0odCxpKTpmdW5jdGlvbih0LGUscixpKXt2YXIgcyx1LGg9aS5sZW5ndGgsZj1bXTtmdW5jdGlvbiBwKGUpe3JldHVyblt0Kk1hdGguY29zKGUpLHQqTWF0aC5zaW4oZSldfWZ1bmN0aW9uIGQodCxlLHIpe3JldHVybiBjKHQsZSxyLHAodCkpfWZ1bmN0aW9uIGcodCl7cmV0dXJuIG4ubW9kKHQsaCl9ZnVuY3Rpb24gdih0KXtyZXR1cm4gbyh0LFtlLHJdKX12YXIgbT1hKGksZnVuY3Rpb24odCl7cmV0dXJuIHYodCk/bCh0LGUpOjEvMH0pLHk9ZChpW21dLGlbZyhtLTEpXSxlKTtmb3IoZi5wdXNoKHkpLHM9bSx1PTA7dTxoO3MrKyx1Kyspe3ZhciB4PWlbZyhzKV07aWYoIXYoeCkpYnJlYWs7Zi5wdXNoKHAoeCkpfXZhciBiPWEoaSxmdW5jdGlvbih0KXtyZXR1cm4gdih0KT9sKHQscik6MS8wfSksXz1kKGlbYl0saVtnKGIrMSldLHIpO3JldHVybiBmLnB1c2goXyksZi5wdXNoKFswLDBdKSxmLnB1c2goZlswXS5zbGljZSgpKSxmfSh0LGUscixpKX1mdW5jdGlvbiBoKHQpe3JldHVybiBNYXRoLmFicyh0KT4xZS0xMD90OjB9ZnVuY3Rpb24gZih0LGUscil7ZT1lfHwwLHI9cnx8MDtmb3IodmFyIG49dC5sZW5ndGgsaT1uZXcgQXJyYXkobiksYT0wO2E8bjthKyspe3ZhciBvPXRbYV07aVthXT1bZStvWzBdLHItb1sxXV19cmV0dXJuIGl9ZS5leHBvcnRzPXtpc1B0SW5zaWRlUG9seWdvbjpmdW5jdGlvbih0LGUscixuLGEpe2lmKCFvKGUsbikpcmV0dXJuITE7dmFyIHMsbDtyWzBdPHJbMV0/KHM9clswXSxsPXJbMV0pOihzPXJbMV0sbD1yWzBdKTt2YXIgYz1pKHUocyxuWzBdLG5bMV0sYSkpLGg9aSh1KGwsblswXSxuWzFdLGEpKSxmPVt0Kk1hdGguY29zKGUpLHQqTWF0aC5zaW4oZSldO3JldHVybiBoLmNvbnRhaW5zKGYpJiYhYy5jb250YWlucyhmKX0sZmluZFBvbHlnb25PZmZzZXQ6ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTEvMCxhPTEvMCxvPXUodCxlLHIsbikscz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdO2k9TWF0aC5taW4oaSxsWzBdKSxhPU1hdGgubWluKGEsLWxbMV0pfXJldHVybltpLGFdfSxmaW5kRW5jbG9zaW5nVmVydGV4QW5nbGVzOmZ1bmN0aW9uKHQsZSl7dmFyIHI9YShlLGZ1bmN0aW9uKGUpe3ZhciByPXMoZSx0KTtyZXR1cm4gcj4wP3I6MS8wfSksaT1uLm1vZChyKzEsZS5sZW5ndGgpO3JldHVybltlW3JdLGVbaV1dfSxmaW5kSW50ZXJzZWN0aW9uWFk6YyxmaW5kWFlhdExlbmd0aDpmdW5jdGlvbih0LGUscixuKXt2YXIgaT0tZSpyLGE9ZSplKzEsbz0yKihlKmktcikscz1pKmkrcipyLXQqdCxsPU1hdGguc3FydChvKm8tNCphKnMpLGM9KC1vK2wpLygyKmEpLHU9KC1vLWwpLygyKmEpO3JldHVybltbYyxlKmMraStuXSxbdSxlKnUraStuXV19LGNsYW1wVGlueTpoLHBhdGhQb2x5Z29uOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXtyZXR1cm5cIk1cIitmKHUodCxlLHIsbiksaSxhKS5qb2luKFwiTFwiKX0scGF0aFBvbHlnb25Bbm51bHVzOmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzLGw7dDxlPyhzPXQsbD1lKToocz1lLGw9dCk7dmFyIGM9Zih1KHMscixuLGkpLGEsbyk7cmV0dXJuXCJNXCIrZih1KGwscixuLGkpLGEsbykucmV2ZXJzZSgpLmpvaW4oXCJMXCIpK1wiTVwiK2Muam9pbihcIkxcIil9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3BvbHlnb25cIjo3MTN9XSw4MTM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vZ2V0X2RhdGFcIikuZ2V0U3VicGxvdENhbGNEYXRhLGk9dChcIi4uLy4uL2xpYlwiKS5jb3VudGVyUmVnZXgsYT10KFwiLi9wb2xhclwiKSxvPXQoXCIuL2NvbnN0YW50c1wiKSxzPW8uYXR0cixsPW8ubmFtZSxjPWkobCksdT17fTt1W3NdPXt2YWxUeXBlOlwic3VicGxvdGlkXCIsZGZsdDpsLGVkaXRUeXBlOlwiY2FsY1wifSxlLmV4cG9ydHM9e2F0dHI6cyxuYW1lOmwsaWRSb290OmwsaWRSZWdleDpjLGF0dHJSZWdleDpjLGF0dHJpYnV0ZXM6dSxsYXlvdXRBdHRyaWJ1dGVzOnQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoXCIuL2xheW91dF9kZWZhdWx0c1wiKSxwbG90OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxpPWUuX3N1YnBsb3RzW2xdLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9aVtvXSxjPW4ocixsLHMpLHU9ZVtzXS5fc3VicGxvdDt1fHwodT1hKHQscyksZVtzXS5fc3VicGxvdD11KSx1LnBsb3QoYyxlLHQuX3Byb21pc2VzKX19LGNsZWFuOmZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1uLl9zdWJwbG90c1tsXXx8W10sYT1uLl9oYXMmJm4uX2hhcyhcImdsXCIpLG89ZS5faGFzJiZlLl9oYXMoXCJnbFwiKSxzPWEmJiFvLGM9MDtjPGkubGVuZ3RoO2MrKyl7dmFyIHU9aVtjXSxoPW5bdV0uX3N1YnBsb3Q7aWYoIWVbdV0mJmgpZm9yKHZhciBmIGluIGguZnJhbWV3b3JrLnJlbW92ZSgpLGgubGF5ZXJzW1wicmFkaWFsLWF4aXMtdGl0bGVcIl0ucmVtb3ZlKCksaC5jbGlwUGF0aHMpaC5jbGlwUGF0aHNbZl0ucmVtb3ZlKCk7cyYmaC5fc2NlbmUmJihoLl9zY2VuZS5kZXN0cm95KCksaC5fc2NlbmU9bnVsbCl9fSx0b1NWRzp0KFwiLi4vY2FydGVzaWFuXCIpLnRvU1ZHfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vY2FydGVzaWFuXCI6NzYwLFwiLi4vZ2V0X2RhdGFcIjo3ODQsXCIuL2NvbnN0YW50c1wiOjgxMSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo4MTQsXCIuL2xheW91dF9kZWZhdWx0c1wiOjgxNSxcIi4vcG9sYXJcIjo4MjJ9XSw4MTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlc1wiKSxhPXQoXCIuLi9kb21haW5cIikuYXR0cmlidXRlcyxvPXQoXCIuLi8uLi9saWJcIikuZXh0ZW5kRmxhdCxzPXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsLGw9cyh7Y29sb3I6aS5jb2xvcixzaG93bGluZTpvKHt9LGkuc2hvd2xpbmUse2RmbHQ6ITB9KSxsaW5lY29sb3I6aS5saW5lY29sb3IsbGluZXdpZHRoOmkubGluZXdpZHRoLHNob3dncmlkOm8oe30saS5zaG93Z3JpZCx7ZGZsdDohMH0pLGdyaWRjb2xvcjppLmdyaWRjb2xvcixncmlkd2lkdGg6aS5ncmlkd2lkdGh9LFwicGxvdFwiLFwiZnJvbS1yb290XCIpLGM9cyh7dGlja21vZGU6aS50aWNrbW9kZSxudGlja3M6aS5udGlja3MsdGljazA6aS50aWNrMCxkdGljazppLmR0aWNrLHRpY2t2YWxzOmkudGlja3ZhbHMsdGlja3RleHQ6aS50aWNrdGV4dCx0aWNrczppLnRpY2tzLHRpY2tsZW46aS50aWNrbGVuLHRpY2t3aWR0aDppLnRpY2t3aWR0aCx0aWNrY29sb3I6aS50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6aS5zaG93dGlja2xhYmVscyxzaG93dGlja3ByZWZpeDppLnNob3d0aWNrcHJlZml4LHRpY2twcmVmaXg6aS50aWNrcHJlZml4LHNob3d0aWNrc3VmZml4Omkuc2hvd3RpY2tzdWZmaXgsdGlja3N1ZmZpeDppLnRpY2tzdWZmaXgsc2hvd2V4cG9uZW50Omkuc2hvd2V4cG9uZW50LGV4cG9uZW50Zm9ybWF0OmkuZXhwb25lbnRmb3JtYXQsc2VwYXJhdGV0aG91c2FuZHM6aS5zZXBhcmF0ZXRob3VzYW5kcyx0aWNrZm9udDppLnRpY2tmb250LHRpY2thbmdsZTppLnRpY2thbmdsZSx0aWNrZm9ybWF0OmkudGlja2Zvcm1hdCx0aWNrZm9ybWF0c3RvcHM6aS50aWNrZm9ybWF0c3RvcHMsbGF5ZXI6aS5sYXllcn0sXCJwbG90XCIsXCJmcm9tLXJvb3RcIiksdT17dmlzaWJsZTpvKHt9LGkudmlzaWJsZSx7ZGZsdDohMH0pLHR5cGU6byh7fSxpLnR5cGUse3ZhbHVlczpbXCItXCIsXCJsaW5lYXJcIixcImxvZ1wiLFwiZGF0ZVwiLFwiY2F0ZWdvcnlcIl19KSxhdXRvcmFuZ2U6byh7fSxpLmF1dG9yYW5nZSx7ZWRpdFR5cGU6XCJwbG90XCJ9KSxyYW5nZW1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInRvemVyb1wiLFwibm9ubmVnYXRpdmVcIixcIm5vcm1hbFwiXSxkZmx0OlwidG96ZXJvXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHJhbmdlOm8oe30saS5yYW5nZSx7aXRlbXM6W3t2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJwbG90XCIsaW1wbGllZEVkaXRzOntcIl5hdXRvcmFuZ2VcIjohMX19LHt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJwbG90XCIsaW1wbGllZEVkaXRzOntcIl5hdXRvcmFuZ2VcIjohMX19XSxlZGl0VHlwZTpcInBsb3RcIn0pLGNhdGVnb3J5b3JkZXI6aS5jYXRlZ29yeW9yZGVyLGNhdGVnb3J5YXJyYXk6aS5jYXRlZ29yeWFycmF5LGFuZ2xlOnt2YWxUeXBlOlwiYW5nbGVcIixlZGl0VHlwZTpcInBsb3RcIn0sc2lkZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiY2xvY2t3aXNlXCIsXCJjb3VudGVyY2xvY2t3aXNlXCJdLGRmbHQ6XCJjbG9ja3dpc2VcIixlZGl0VHlwZTpcInBsb3RcIn0sdGl0bGU6cyhpLnRpdGxlLFwicGxvdFwiLFwiZnJvbS1yb290XCIpLGhvdmVyZm9ybWF0OmkuaG92ZXJmb3JtYXQsdWlyZXZpc2lvbjp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwibm9uZVwifSxlZGl0VHlwZTpcImNhbGNcIixfZGVwcmVjYXRlZDp7dGl0bGU6aS5fZGVwcmVjYXRlZC50aXRsZSx0aXRsZWZvbnQ6aS5fZGVwcmVjYXRlZC50aXRsZWZvbnR9fTt1LnRpdGxlLnRleHQuZGZsdD1cIlwiLG8odSxsLGMpO3ZhciBoPXt2aXNpYmxlOm8oe30saS52aXNpYmxlLHtkZmx0OiEwfSksdHlwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiLVwiLFwibGluZWFyXCIsXCJjYXRlZ29yeVwiXSxkZmx0OlwiLVwiLGVkaXRUeXBlOlwiY2FsY1wiLF9ub1RlbXBsYXRpbmc6ITB9LGNhdGVnb3J5b3JkZXI6aS5jYXRlZ29yeW9yZGVyLGNhdGVnb3J5YXJyYXk6aS5jYXRlZ29yeWFycmF5LHRoZXRhdW5pdDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wicmFkaWFuc1wiLFwiZGVncmVlc1wiXSxkZmx0OlwiZGVncmVlc1wiLGVkaXRUeXBlOlwiY2FsY1wifSxwZXJpb2Q6e3ZhbFR5cGU6XCJudW1iZXJcIixlZGl0VHlwZTpcImNhbGNcIixtaW46MH0sZGlyZWN0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJjb3VudGVyY2xvY2t3aXNlXCIsXCJjbG9ja3dpc2VcIl0sZGZsdDpcImNvdW50ZXJjbG9ja3dpc2VcIixlZGl0VHlwZTpcImNhbGNcIn0scm90YXRpb246e3ZhbFR5cGU6XCJhbmdsZVwiLGVkaXRUeXBlOlwiY2FsY1wifSxob3ZlcmZvcm1hdDppLmhvdmVyZm9ybWF0LHVpcmV2aXNpb246e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcIm5vbmVcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9O28oaCxsLGMpLGUuZXhwb3J0cz17ZG9tYWluOmEoe25hbWU6XCJwb2xhclwiLGVkaXRUeXBlOlwicGxvdFwifSksc2VjdG9yOnt2YWxUeXBlOlwiaW5mb19hcnJheVwiLGl0ZW1zOlt7dmFsVHlwZTpcIm51bWJlclwiLGVkaXRUeXBlOlwicGxvdFwifSx7dmFsVHlwZTpcIm51bWJlclwiLGVkaXRUeXBlOlwicGxvdFwifV0sZGZsdDpbMCwzNjBdLGVkaXRUeXBlOlwicGxvdFwifSxob2xlOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOlwicGxvdFwifSxiZ2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcInBsb3RcIixkZmx0Om4uYmFja2dyb3VuZH0scmFkaWFsYXhpczp1LGFuZ3VsYXJheGlzOmgsZ3JpZHNoYXBlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJjaXJjdWxhclwiLFwibGluZWFyXCJdLGRmbHQ6XCJjaXJjdWxhclwiLGVkaXRUeXBlOlwicGxvdFwifSx1aXJldmlzaW9uOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJub25lXCJ9LGVkaXRUeXBlOlwiY2FsY1wifX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzXCI6NTc3LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlc1wiOjc2MSxcIi4uL2RvbWFpblwiOjc3NH1dLDgxNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxhPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLG89dChcIi4uL3N1YnBsb3RfZGVmYXVsdHNcIikscz10KFwiLi4vZ2V0X2RhdGFcIikuZ2V0U3VicGxvdERhdGEsbD10KFwiLi4vY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHNcIiksYz10KFwiLi4vY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0c1wiKSx1PXQoXCIuLi9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0c1wiKSxoPXQoXCIuLi9jYXJ0ZXNpYW4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHNcIiksZj10KFwiLi4vY2FydGVzaWFuL2xpbmVfZ3JpZF9kZWZhdWx0c1wiKSxwPXQoXCIuLi9jYXJ0ZXNpYW4vYXhpc19hdXRvdHlwZVwiKSxkPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLGc9dChcIi4vc2V0X2NvbnZlcnRcIiksdj10KFwiLi9jb25zdGFudHNcIiksbT12LmF4aXNOYW1lcztmdW5jdGlvbiB5KHQsZSxyLG8pe3ZhciBwPXIoXCJiZ2NvbG9yXCIpO28uYmdDb2xvcj1pLmNvbWJpbmUocCxvLnBhcGVyX2JnY29sb3IpO3ZhciB5PXIoXCJzZWN0b3JcIik7cihcImhvbGVcIik7dmFyIGIsXz1zKG8uZnVsbERhdGEsdi5uYW1lLG8uaWQpLHc9by5sYXlvdXRPdXQ7ZnVuY3Rpb24gayh0LGUpe3JldHVybiByKGIrXCIuXCIrdCxlKX1mb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyl7Yj1tW0FdLG4uaXNQbGFpbk9iamVjdCh0W2JdKXx8KHRbYl09e30pO3ZhciBUPXRbYl0sTT1hLm5ld0NvbnRhaW5lcihlLGIpO00uX2lkPU0uX25hbWU9YixNLl9hdHRyPW8uaWQrXCIuXCIrYixNLl90cmFjZUluZGljZXM9Xy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuX2V4cGFuZGVkSW5kZXh9KTt2YXIgUz12LmF4aXNOYW1lMmRhdGFBcnJheVtiXSxFPXgoVCxNLGssXyxTKTtoKFQsTSxrLHtheERhdGE6XyxkYXRhQXR0cjpTfSk7dmFyIEMsTCx6PWsoXCJ2aXNpYmxlXCIpO3N3aXRjaChnKE0sZSx3KSxrKFwidWlyZXZpc2lvblwiLGUudWlyZXZpc2lvbikseiYmKEw9KEM9ayhcImNvbG9yXCIpKT09PVQuY29sb3I/QzpvLmZvbnQuY29sb3IpLE0uX209MSxiKXtjYXNlXCJyYWRpYWxheGlzXCI6dmFyIE89ayhcImF1dG9yYW5nZVwiLCFNLmlzVmFsaWRSYW5nZShULnJhbmdlKSk7VC5hdXRvcmFuZ2U9TywhT3x8XCJsaW5lYXJcIiE9PUUmJlwiLVwiIT09RXx8ayhcInJhbmdlbW9kZVwiKSxcInJldmVyc2VkXCI9PT1PJiYoTS5fbT0tMSksayhcInJhbmdlXCIpLE0uY2xlYW5SYW5nZShcInJhbmdlXCIse2RmbHRSYW5nZTpbMCwxXX0pLHomJihrKFwic2lkZVwiKSxrKFwiYW5nbGVcIix5WzBdKSxrKFwidGl0bGUudGV4dFwiKSxuLmNvZXJjZUZvbnQoayxcInRpdGxlLmZvbnRcIix7ZmFtaWx5Om8uZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKDEuMipvLmZvbnQuc2l6ZSksY29sb3I6TH0pKTticmVhaztjYXNlXCJhbmd1bGFyYXhpc1wiOmlmKFwiZGF0ZVwiPT09RSl7bi5sb2coXCJQb2xhciBwbG90cyBkbyBub3Qgc3VwcG9ydCBkYXRlIGFuZ3VsYXIgYXhlcyB5ZXQuXCIpO2Zvcih2YXIgST0wO0k8Xy5sZW5ndGg7SSsrKV9bSV0udmlzaWJsZT0hMTtFPVQudHlwZT1NLnR5cGU9XCJsaW5lYXJcIn1rKFwibGluZWFyXCI9PT1FP1widGhldGF1bml0XCI6XCJwZXJpb2RcIik7dmFyIEQ9ayhcImRpcmVjdGlvblwiKTtrKFwicm90YXRpb25cIix7Y291bnRlcmNsb2Nrd2lzZTowLGNsb2Nrd2lzZTo5MH1bRF0pfWlmKHopbChULE0sayxNLnR5cGUpLHUoVCxNLGssTS50eXBlLHt0aWNrU3VmZml4RGZsdDpcImRlZ3JlZXNcIj09PU0udGhldGF1bml0P1wiXFx4YjBcIjp2b2lkIDB9KSxjKFQsTSxrLHtvdXRlclRpY2tzOiEwfSksayhcInNob3d0aWNrbGFiZWxzXCIpJiYobi5jb2VyY2VGb250KGssXCJ0aWNrZm9udFwiLHtmYW1pbHk6by5mb250LmZhbWlseSxzaXplOm8uZm9udC5zaXplLGNvbG9yOkx9KSxrKFwidGlja2FuZ2xlXCIpLGsoXCJ0aWNrZm9ybWF0XCIpKSxmKFQsTSxrLHtkZmx0Q29sb3I6QyxiZ0NvbG9yOm8uYmdDb2xvcixibGVuZDo2MCxzaG93TGluZTohMCxzaG93R3JpZDohMCxub1plcm9MaW5lOiEwLGF0dHJpYnV0ZXM6ZFtiXX0pLGsoXCJsYXllclwiKTtcImNhdGVnb3J5XCIhPT1FJiZrKFwiaG92ZXJmb3JtYXRcIiksTS5faW5wdXQ9VH1cImNhdGVnb3J5XCI9PT1lLmFuZ3VsYXJheGlzLnR5cGUmJnIoXCJncmlkc2hhcGVcIil9ZnVuY3Rpb24geCh0LGUscixuLGkpe2lmKFwiLVwiPT09cihcInR5cGVcIikpe2Zvcih2YXIgYSxvPTA7bzxuLmxlbmd0aDtvKyspaWYobltvXS52aXNpYmxlKXthPW5bb107YnJlYWt9YSYmYVtpXSYmKGUudHlwZT1wKGFbaV0sXCJncmVnb3JpYW5cIikpLFwiLVwiPT09ZS50eXBlP2UudHlwZT1cImxpbmVhclwiOnQudHlwZT1lLnR5cGV9cmV0dXJuIGUudHlwZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe28odCxlLHIse3R5cGU6di5uYW1lLGF0dHJpYnV0ZXM6ZCxoYW5kbGVEZWZhdWx0czp5LGZvbnQ6ZS5mb250LHBhcGVyX2JnY29sb3I6ZS5wYXBlcl9iZ2NvbG9yLGZ1bGxEYXRhOnIsbGF5b3V0T3V0OmV9KX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vY2FydGVzaWFuL2F4aXNfYXV0b3R5cGVcIjo3NTAsXCIuLi9jYXJ0ZXNpYW4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHNcIjo3NTMsXCIuLi9jYXJ0ZXNpYW4vbGluZV9ncmlkX2RlZmF1bHRzXCI6NzYzLFwiLi4vY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHNcIjo3NjgsXCIuLi9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzXCI6NzY5LFwiLi4vY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHNcIjo3NzAsXCIuLi9nZXRfZGF0YVwiOjc4NCxcIi4uL3N1YnBsb3RfZGVmYXVsdHNcIjo4MjQsXCIuL2NvbnN0YW50c1wiOjgxMSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo4MTQsXCIuL3NldF9jb252ZXJ0XCI6ODIzfV0sODE2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXNcIiksaT1uLm1hcmtlcixhPXQoXCIuLi8uLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQ7W1wiQXJlYSB0cmFjZXMgYXJlIGRlcHJlY2F0ZWQhXCIsXCJQbGVhc2Ugc3dpdGNoIHRvIHRoZSAqYmFycG9sYXIqIHRyYWNlIHR5cGUuXCJdLmpvaW4oXCIgXCIpO2UuZXhwb3J0cz17cjphKHt9LG4ucix7fSksdDphKHt9LG4udCx7fSksbWFya2VyOntjb2xvcjphKHt9LGkuY29sb3Ise30pLHNpemU6YSh7fSxpLnNpemUse30pLHN5bWJvbDphKHt9LGkuc3ltYm9sLHt9KSxvcGFjaXR5OmEoe30saS5vcGFjaXR5LHt9KSxlZGl0VHlwZTpcImNhbGNcIn19fSx7XCIuLi8uLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlc1wiOjEwNTJ9XSw4MTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxhPXQoXCIuLi8uLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsLG89W1wiTGVnYWN5IHBvbGFyIGNoYXJ0cyBhcmUgZGVwcmVjYXRlZCFcIixcIlBsZWFzZSBzd2l0Y2ggdG8gKnBvbGFyKiBzdWJwbG90cy5cIl0uam9pbihcIiBcIikscz1pKHt9LG4uZG9tYWluLHt9KTtmdW5jdGlvbiBsKHQsZSl7cmV0dXJuIGkoe30sZSx7c2hvd2xpbmU6e3ZhbFR5cGU6XCJib29sZWFuXCJ9LHNob3d0aWNrbGFiZWxzOnt2YWxUeXBlOlwiYm9vbGVhblwifSx0aWNrb3JpZW50YXRpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImhvcml6b250YWxcIixcInZlcnRpY2FsXCJdfSx0aWNrbGVuOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjB9LHRpY2tjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCJ9LHRpY2tzdWZmaXg6e3ZhbFR5cGU6XCJzdHJpbmdcIn0sZW5kcGFkZGluZzp7dmFsVHlwZTpcIm51bWJlclwiLGRlc2NyaXB0aW9uOm99LHZpc2libGU6e3ZhbFR5cGU6XCJib29sZWFuXCJ9fSl9ZS5leHBvcnRzPWEoe3JhZGlhbGF4aXM6bCgwLHtyYW5nZTp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixpdGVtczpbe3ZhbFR5cGU6XCJudW1iZXJcIn0se3ZhbFR5cGU6XCJudW1iZXJcIn1dfSxkb21haW46cyxvcmllbnRhdGlvbjp7dmFsVHlwZTpcIm51bWJlclwifX0pLGFuZ3VsYXJheGlzOmwoMCx7cmFuZ2U6e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsaXRlbXM6W3t2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowfSx7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MzYwfV19LGRvbWFpbjpzfSksbGF5b3V0OntkaXJlY3Rpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImNsb2Nrd2lzZVwiLFwiY291bnRlcmNsb2Nrd2lzZVwiXX0sb3JpZW50YXRpb246e3ZhbFR5cGU6XCJhbmdsZVwifX19LFwicGxvdFwiLFwibmVzdGVkXCIpfSx7XCIuLi8uLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uLy4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlc1wiOjc2MX1dLDgxODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhlLmV4cG9ydHM9dChcIi4vbWljcm9wb2xhclwiKSkubWFuYWdlcj10KFwiLi9taWNyb3BvbGFyX21hbmFnZXJcIil9LHtcIi4vbWljcm9wb2xhclwiOjgxOSxcIi4vbWljcm9wb2xhcl9tYW5hZ2VyXCI6ODIwfV0sODE5OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uLy4uL2xpYlwiKS5leHRlbmREZWVwQWxsLGE9dChcIi4uLy4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIikuTUlEX1NISUZULG89ZS5leHBvcnRzPXt2ZXJzaW9uOlwiMC4yLjJcIn07by5BeGlzPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLHMsbD17ZGF0YTpbXSxsYXlvdXQ6e319LGM9e30sdT17fSxoPW4uZGlzcGF0Y2goXCJob3ZlclwiKSxmPXt9O3JldHVybiBmLnJlbmRlcj1mdW5jdGlvbihjKXtyZXR1cm4gZnVuY3Rpb24oYyl7ZT1jfHxlO3ZhciBoPWwuZGF0YSxmPWwubGF5b3V0OyhcInN0cmluZ1wiPT10eXBlb2YgZXx8ZS5ub2RlTmFtZSkmJihlPW4uc2VsZWN0KGUpKSxlLmRhdHVtKGgpLmVhY2goZnVuY3Rpb24oZSxsKXt2YXIgYz1lLnNsaWNlKCk7dT17ZGF0YTpvLnV0aWwuY2xvbmVKc29uKGMpLGxheW91dDpvLnV0aWwuY2xvbmVKc29uKGYpfTt2YXIgaD0wO2MuZm9yRWFjaChmdW5jdGlvbih0LGUpe3QuY29sb3J8fCh0LmNvbG9yPWYuZGVmYXVsdENvbG9yUmFuZ2VbaF0saD0oaCsxKSVmLmRlZmF1bHRDb2xvclJhbmdlLmxlbmd0aCksdC5zdHJva2VDb2xvcnx8KHQuc3Ryb2tlQ29sb3I9XCJMaW5lUGxvdFwiPT09dC5nZW9tZXRyeT90LmNvbG9yOm4ucmdiKHQuY29sb3IpLmRhcmtlcigpLnRvU3RyaW5nKCkpLHUuZGF0YVtlXS5jb2xvcj10LmNvbG9yLHUuZGF0YVtlXS5zdHJva2VDb2xvcj10LnN0cm9rZUNvbG9yLHUuZGF0YVtlXS5zdHJva2VEYXNoPXQuc3Ryb2tlRGFzaCx1LmRhdGFbZV0uc3Ryb2tlU2l6ZT10LnN0cm9rZVNpemV9KTt2YXIgcD1jLmZpbHRlcihmdW5jdGlvbih0LGUpe3ZhciByPXQudmlzaWJsZTtyZXR1cm5cInVuZGVmaW5lZFwiPT10eXBlb2Ygcnx8ITA9PT1yfSksZD0hMSxnPXAubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQ9ZHx8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHQuZ3JvdXBJZCx0fSk7aWYoZCl7dmFyIHY9bi5uZXN0KCkua2V5KGZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHQuZ3JvdXBJZD90Lmdyb3VwSWQ6XCJ1bnN0YWNrZWRcIn0pLmVudHJpZXMoZyksbT1bXSx5PXYubWFwKGZ1bmN0aW9uKHQsZSl7aWYoXCJ1bnN0YWNrZWRcIj09PXQua2V5KXJldHVybiB0LnZhbHVlczt2YXIgcj10LnZhbHVlc1swXS5yLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiAwfSk7cmV0dXJuIHQudmFsdWVzLmZvckVhY2goZnVuY3Rpb24odCxlLG4pe3QueVN0YWNrPVtyXSxtLnB1c2gocikscj1vLnV0aWwuc3VtQXJyYXlzKHQucixyKX0pLHQudmFsdWVzfSk7cD1uLm1lcmdlKHkpfXAuZm9yRWFjaChmdW5jdGlvbih0LGUpe3QudD1BcnJheS5pc0FycmF5KHQudFswXSk/dC50Olt0LnRdLHQucj1BcnJheS5pc0FycmF5KHQuclswXSk/dC5yOlt0LnJdfSk7dmFyIHg9TWF0aC5taW4oZi53aWR0aC1mLm1hcmdpbi5sZWZ0LWYubWFyZ2luLnJpZ2h0LGYuaGVpZ2h0LWYubWFyZ2luLnRvcC1mLm1hcmdpbi5ib3R0b20pLzI7eD1NYXRoLm1heCgxMCx4KTt2YXIgYixfPVtmLm1hcmdpbi5sZWZ0K3gsZi5tYXJnaW4udG9wK3hdO2I9ZD9bMCxuLm1heChvLnV0aWwuc3VtQXJyYXlzKG8udXRpbC5hcnJheUxhc3QocCkuclswXSxvLnV0aWwuYXJyYXlMYXN0KG0pKSldOm4uZXh0ZW50KG8udXRpbC5mbGF0dGVuQXJyYXkocC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5yfSkpKSxmLnJhZGlhbEF4aXMuZG9tYWluIT1vLkRBVEFFWFRFTlQmJihiWzBdPTApLHI9bi5zY2FsZS5saW5lYXIoKS5kb21haW4oZi5yYWRpYWxBeGlzLmRvbWFpbiE9by5EQVRBRVhURU5UJiZmLnJhZGlhbEF4aXMuZG9tYWluP2YucmFkaWFsQXhpcy5kb21haW46YikucmFuZ2UoWzAseF0pLHUubGF5b3V0LnJhZGlhbEF4aXMuZG9tYWluPXIuZG9tYWluKCk7dmFyIHcsaz1vLnV0aWwuZmxhdHRlbkFycmF5KHAubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudH0pKSxBPVwic3RyaW5nXCI9PXR5cGVvZiBrWzBdO0EmJihrPW8udXRpbC5kZWR1cGxpY2F0ZShrKSx3PWsuc2xpY2UoKSxrPW4ucmFuZ2Uoay5sZW5ndGgpLHA9cC5tYXAoZnVuY3Rpb24odCxlKXt2YXIgcj10O3JldHVybiB0LnQ9W2tdLGQmJihyLnlTdGFjaz10LnlTdGFjaykscn0pKTt2YXIgVD1wLmZpbHRlcihmdW5jdGlvbih0LGUpe3JldHVyblwiTGluZVBsb3RcIj09PXQuZ2VvbWV0cnl8fFwiRG90UGxvdFwiPT09dC5nZW9tZXRyeX0pLmxlbmd0aD09PXAubGVuZ3RoLE09bnVsbD09PWYubmVlZHNFbmRTcGFjaW5nP0F8fCFUOmYubmVlZHNFbmRTcGFjaW5nLFM9Zi5hbmd1bGFyQXhpcy5kb21haW4mJmYuYW5ndWxhckF4aXMuZG9tYWluIT1vLkRBVEFFWFRFTlQmJiFBJiZmLmFuZ3VsYXJBeGlzLmRvbWFpblswXT49MD9mLmFuZ3VsYXJBeGlzLmRvbWFpbjpuLmV4dGVudChrKSxFPU1hdGguYWJzKGtbMV0ta1swXSk7VCYmIUEmJihFPTApO3ZhciBDPVMuc2xpY2UoKTtNJiZBJiYoQ1sxXSs9RSk7dmFyIEw9Zi5hbmd1bGFyQXhpcy50aWNrc0NvdW50fHw0O0w+OCYmKEw9TC8oTC84KStMJTgpLGYuYW5ndWxhckF4aXMudGlja3NTdGVwJiYoTD0oQ1sxXS1DWzBdKS9MKTt2YXIgej1mLmFuZ3VsYXJBeGlzLnRpY2tzU3RlcHx8KENbMV0tQ1swXSkvKEwqKGYubWlub3JUaWNrcysxKSk7dyYmKHo9TWF0aC5tYXgoTWF0aC5yb3VuZCh6KSwxKSksQ1syXXx8KENbMl09eik7dmFyIE89bi5yYW5nZS5hcHBseSh0aGlzLEMpO2lmKE89Ty5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gcGFyc2VGbG9hdCh0LnRvUHJlY2lzaW9uKDEyKSl9KSxzPW4uc2NhbGUubGluZWFyKCkuZG9tYWluKEMuc2xpY2UoMCwyKSkucmFuZ2UoXCJjbG9ja3dpc2VcIj09PWYuZGlyZWN0aW9uP1swLDM2MF06WzM2MCwwXSksdS5sYXlvdXQuYW5ndWxhckF4aXMuZG9tYWluPXMuZG9tYWluKCksdS5sYXlvdXQuYW5ndWxhckF4aXMuZW5kUGFkZGluZz1NP0U6MCxcInVuZGVmaW5lZFwiPT10eXBlb2YodD1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoXCJzdmcuY2hhcnQtcm9vdFwiKSl8fHQuZW1wdHkoKSl7dmFyIEk9KG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhcIjxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyBjbGFzcz0nY2hhcnQtcm9vdCc+JyArICc8ZyBjbGFzcz0nb3V0ZXItZ3JvdXAnPicgKyAnPGcgY2xhc3M9J2NoYXJ0LWdyb3VwJz4nICsgJzxjaXJjbGUgY2xhc3M9J2JhY2tncm91bmQtY2lyY2xlJz48L2NpcmNsZT4nICsgJzxnIGNsYXNzPSdnZW9tZXRyeS1ncm91cCc+PC9nPicgKyAnPGcgY2xhc3M9J3JhZGlhbCBheGlzLWdyb3VwJz4nICsgJzxjaXJjbGUgY2xhc3M9J291dHNpZGUtY2lyY2xlJz48L2NpcmNsZT4nICsgJzwvZz4nICsgJzxnIGNsYXNzPSdhbmd1bGFyIGF4aXMtZ3JvdXAnPjwvZz4nICsgJzxnIGNsYXNzPSdndWlkZXMtZ3JvdXAnPjxsaW5lPjwvbGluZT48Y2lyY2xlIHI9JzAnPjwvY2lyY2xlPjwvZz4nICsgJzwvZz4nICsgJzxnIGNsYXNzPSdsZWdlbmQtZ3JvdXAnPjwvZz4nICsgJzxnIGNsYXNzPSd0b29sdGlwcy1ncm91cCc+PC9nPicgKyAnPGcgY2xhc3M9J3RpdGxlLWdyb3VwJz48dGV4dD48L3RleHQ+PC9nPicgKyAnPC9nPicgKyAnPC9zdmc+XCIsXCJhcHBsaWNhdGlvbi94bWxcIiksRD10aGlzLmFwcGVuZENoaWxkKHRoaXMub3duZXJEb2N1bWVudC5pbXBvcnROb2RlKEkuZG9jdW1lbnRFbGVtZW50LCEwKSk7dD1uLnNlbGVjdChEKX10LnNlbGVjdChcIi5ndWlkZXMtZ3JvdXBcIikuc3R5bGUoe1wicG9pbnRlci1ldmVudHNcIjpcIm5vbmVcIn0pLHQuc2VsZWN0KFwiLmFuZ3VsYXIuYXhpcy1ncm91cFwiKS5zdHlsZSh7XCJwb2ludGVyLWV2ZW50c1wiOlwibm9uZVwifSksdC5zZWxlY3QoXCIucmFkaWFsLmF4aXMtZ3JvdXBcIikuc3R5bGUoe1wicG9pbnRlci1ldmVudHNcIjpcIm5vbmVcIn0pO3ZhciBQLFI9dC5zZWxlY3QoXCIuY2hhcnQtZ3JvdXBcIiksRj17ZmlsbDpcIm5vbmVcIixzdHJva2U6Zi50aWNrQ29sb3J9LEI9e1wiZm9udC1zaXplXCI6Zi5mb250LnNpemUsXCJmb250LWZhbWlseVwiOmYuZm9udC5mYW1pbHksZmlsbDpmLmZvbnQuY29sb3IsXCJ0ZXh0LXNoYWRvd1wiOltcIi0xcHggMHB4XCIsXCIxcHggLTFweFwiLFwiLTFweCAxcHhcIixcIjFweCAxcHhcIl0ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuXCIgXCIrdCtcIiAwIFwiK2YuZm9udC5vdXRsaW5lQ29sb3J9KS5qb2luKFwiLFwiKX07aWYoZi5zaG93TGVnZW5kKXtQPXQuc2VsZWN0KFwiLmxlZ2VuZC1ncm91cFwiKS5hdHRyKHt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoXCIrW3gsZi5tYXJnaW4udG9wXStcIilcIn0pLnN0eWxlKHtkaXNwbGF5OlwiYmxvY2tcIn0pO3ZhciBOPXAubWFwKGZ1bmN0aW9uKHQsZSl7dmFyIHI9by51dGlsLmNsb25lSnNvbih0KTtyZXR1cm4gci5zeW1ib2w9XCJEb3RQbG90XCI9PT10Lmdlb21ldHJ5P3QuZG90VHlwZXx8XCJjaXJjbGVcIjpcIkxpbmVQbG90XCIhPXQuZ2VvbWV0cnk/XCJzcXVhcmVcIjpcImxpbmVcIixyLnZpc2libGVJbkxlZ2VuZD1cInVuZGVmaW5lZFwiPT10eXBlb2YgdC52aXNpYmxlSW5MZWdlbmR8fHQudmlzaWJsZUluTGVnZW5kLHIuY29sb3I9XCJMaW5lUGxvdFwiPT09dC5nZW9tZXRyeT90LnN0cm9rZUNvbG9yOnQuY29sb3Iscn0pO28uTGVnZW5kKCkuY29uZmlnKHtkYXRhOnAubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubmFtZXx8XCJFbGVtZW50XCIrZX0pLGxlZ2VuZENvbmZpZzppKHt9LG8uTGVnZW5kLmRlZmF1bHRDb25maWcoKS5sZWdlbmRDb25maWcse2NvbnRhaW5lcjpQLGVsZW1lbnRzOk4scmV2ZXJzZU9yZGVyOmYubGVnZW5kLnJldmVyc2VPcmRlcn0pfSkoKTt2YXIgaj1QLm5vZGUoKS5nZXRCQm94KCk7eD1NYXRoLm1pbihmLndpZHRoLWoud2lkdGgtZi5tYXJnaW4ubGVmdC1mLm1hcmdpbi5yaWdodCxmLmhlaWdodC1mLm1hcmdpbi50b3AtZi5tYXJnaW4uYm90dG9tKS8yLHg9TWF0aC5tYXgoMTAseCksXz1bZi5tYXJnaW4ubGVmdCt4LGYubWFyZ2luLnRvcCt4XSxyLnJhbmdlKFswLHhdKSx1LmxheW91dC5yYWRpYWxBeGlzLmRvbWFpbj1yLmRvbWFpbigpLFAuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK1tfWzBdK3gsX1sxXS14XStcIilcIil9ZWxzZSBQPXQuc2VsZWN0KFwiLmxlZ2VuZC1ncm91cFwiKS5zdHlsZSh7ZGlzcGxheTpcIm5vbmVcIn0pO3QuYXR0cih7d2lkdGg6Zi53aWR0aCxoZWlnaHQ6Zi5oZWlnaHR9KS5zdHlsZSh7b3BhY2l0eTpmLm9wYWNpdHl9KSxSLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIitfK1wiKVwiKS5zdHlsZSh7Y3Vyc29yOlwiY3Jvc3NoYWlyXCJ9KTt2YXIgVj1bKGYud2lkdGgtKGYubWFyZ2luLmxlZnQrZi5tYXJnaW4ucmlnaHQrMip4KyhqP2oud2lkdGg6MCkpKS8yLChmLmhlaWdodC0oZi5tYXJnaW4udG9wK2YubWFyZ2luLmJvdHRvbSsyKngpKS8yXTtpZihWWzBdPU1hdGgubWF4KDAsVlswXSksVlsxXT1NYXRoLm1heCgwLFZbMV0pLHQuc2VsZWN0KFwiLm91dGVyLWdyb3VwXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIitWK1wiKVwiKSxmLnRpdGxlJiZmLnRpdGxlLnRleHQpe3ZhciBVPXQuc2VsZWN0KFwiZy50aXRsZS1ncm91cCB0ZXh0XCIpLnN0eWxlKEIpLnRleHQoZi50aXRsZS50ZXh0KSxxPVUubm9kZSgpLmdldEJCb3goKTtVLmF0dHIoe3g6X1swXS1xLndpZHRoLzIseTpfWzFdLXgtMjB9KX12YXIgSD10LnNlbGVjdChcIi5yYWRpYWwuYXhpcy1ncm91cFwiKTtpZihmLnJhZGlhbEF4aXMuZ3JpZExpbmVzVmlzaWJsZSl7dmFyIEc9SC5zZWxlY3RBbGwoXCJjaXJjbGUuZ3JpZC1jaXJjbGVcIikuZGF0YShyLnRpY2tzKDUpKTtHLmVudGVyKCkuYXBwZW5kKFwiY2lyY2xlXCIpLmF0dHIoe2NsYXNzOlwiZ3JpZC1jaXJjbGVcIn0pLnN0eWxlKEYpLEcuYXR0cihcInJcIixyKSxHLmV4aXQoKS5yZW1vdmUoKX1ILnNlbGVjdChcImNpcmNsZS5vdXRzaWRlLWNpcmNsZVwiKS5hdHRyKHtyOnh9KS5zdHlsZShGKTt2YXIgWT10LnNlbGVjdChcImNpcmNsZS5iYWNrZ3JvdW5kLWNpcmNsZVwiKS5hdHRyKHtyOnh9KS5zdHlsZSh7ZmlsbDpmLmJhY2tncm91bmRDb2xvcixzdHJva2U6Zi5zdHJva2V9KTtmdW5jdGlvbiBXKHQsZSl7cmV0dXJuIHModCklMzYwK2Yub3JpZW50YXRpb259aWYoZi5yYWRpYWxBeGlzLnZpc2libGUpe3ZhciBYPW4uc3ZnLmF4aXMoKS5zY2FsZShyKS50aWNrcyg1KS50aWNrU2l6ZSg1KTtILmNhbGwoWCkuYXR0cih7dHJhbnNmb3JtOlwicm90YXRlKFwiK2YucmFkaWFsQXhpcy5vcmllbnRhdGlvbitcIilcIn0pLEguc2VsZWN0QWxsKFwiLmRvbWFpblwiKS5zdHlsZShGKSxILnNlbGVjdEFsbChcImc+dGV4dFwiKS50ZXh0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudGV4dENvbnRlbnQrZi5yYWRpYWxBeGlzLnRpY2tzU3VmZml4fSkuc3R5bGUoQikuc3R5bGUoe1widGV4dC1hbmNob3JcIjpcInN0YXJ0XCJ9KS5hdHRyKHt4OjAseTowLGR4OjAsZHk6MCx0cmFuc2Zvcm06ZnVuY3Rpb24odCxlKXtyZXR1cm5cImhvcml6b250YWxcIj09PWYucmFkaWFsQXhpcy50aWNrT3JpZW50YXRpb24/XCJyb3RhdGUoXCIrLWYucmFkaWFsQXhpcy5vcmllbnRhdGlvbitcIikgdHJhbnNsYXRlKFwiK1swLEJbXCJmb250LXNpemVcIl1dK1wiKVwiOlwidHJhbnNsYXRlKFwiK1swLEJbXCJmb250LXNpemVcIl1dK1wiKVwifX0pLEguc2VsZWN0QWxsKFwiZz5saW5lXCIpLnN0eWxlKHtzdHJva2U6XCJibGFja1wifSl9dmFyIFo9dC5zZWxlY3QoXCIuYW5ndWxhci5heGlzLWdyb3VwXCIpLnNlbGVjdEFsbChcImcuYW5ndWxhci10aWNrXCIpLmRhdGEoTyksJD1aLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiYW5ndWxhci10aWNrXCIsITApO1ouYXR0cih7dHJhbnNmb3JtOmZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJyb3RhdGUoXCIrVyh0KStcIilcIn19KS5zdHlsZSh7ZGlzcGxheTpmLmFuZ3VsYXJBeGlzLnZpc2libGU/XCJibG9ja1wiOlwibm9uZVwifSksWi5leGl0KCkucmVtb3ZlKCksJC5hcHBlbmQoXCJsaW5lXCIpLmNsYXNzZWQoXCJncmlkLWxpbmVcIiwhMCkuY2xhc3NlZChcIm1ham9yXCIsZnVuY3Rpb24odCxlKXtyZXR1cm4gZSUoZi5taW5vclRpY2tzKzEpPT0wfSkuY2xhc3NlZChcIm1pbm9yXCIsZnVuY3Rpb24odCxlKXtyZXR1cm4hKGUlKGYubWlub3JUaWNrcysxKT09MCl9KS5zdHlsZShGKSwkLnNlbGVjdEFsbChcIi5taW5vclwiKS5zdHlsZSh7c3Ryb2tlOmYubWlub3JUaWNrQ29sb3J9KSxaLnNlbGVjdChcImxpbmUuZ3JpZC1saW5lXCIpLmF0dHIoe3gxOmYudGlja0xlbmd0aD94LWYudGlja0xlbmd0aDowLHgyOnh9KS5zdHlsZSh7ZGlzcGxheTpmLmFuZ3VsYXJBeGlzLmdyaWRMaW5lc1Zpc2libGU/XCJibG9ja1wiOlwibm9uZVwifSksJC5hcHBlbmQoXCJ0ZXh0XCIpLmNsYXNzZWQoXCJheGlzLXRleHRcIiwhMCkuc3R5bGUoQik7dmFyIEo9Wi5zZWxlY3QoXCJ0ZXh0LmF4aXMtdGV4dFwiKS5hdHRyKHt4OngrZi5sYWJlbE9mZnNldCxkeTphK1wiZW1cIix0cmFuc2Zvcm06ZnVuY3Rpb24odCxlKXt2YXIgcj1XKHQpLG49eCtmLmxhYmVsT2Zmc2V0LGk9Zi5hbmd1bGFyQXhpcy50aWNrT3JpZW50YXRpb247cmV0dXJuXCJob3Jpem9udGFsXCI9PWk/XCJyb3RhdGUoXCIrLXIrXCIgXCIrbitcIiAwKVwiOlwicmFkaWFsXCI9PWk/cjwyNzAmJnI+OTA/XCJyb3RhdGUoMTgwIFwiK24rXCIgMClcIjpudWxsOlwicm90YXRlKFwiKyhyPD0xODAmJnI+MD8tOTA6OTApK1wiIFwiK24rXCIgMClcIn19KS5zdHlsZSh7XCJ0ZXh0LWFuY2hvclwiOlwibWlkZGxlXCIsZGlzcGxheTpmLmFuZ3VsYXJBeGlzLmxhYmVsc1Zpc2libGU/XCJibG9ja1wiOlwibm9uZVwifSkudGV4dChmdW5jdGlvbih0LGUpe3JldHVybiBlJShmLm1pbm9yVGlja3MrMSkhPTA/XCJcIjp3P3dbdF0rZi5hbmd1bGFyQXhpcy50aWNrc1N1ZmZpeDp0K2YuYW5ndWxhckF4aXMudGlja3NTdWZmaXh9KS5zdHlsZShCKTtmLmFuZ3VsYXJBeGlzLnJld3JpdGVUaWNrcyYmSi50ZXh0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUlKGYubWlub3JUaWNrcysxKSE9MD9cIlwiOmYuYW5ndWxhckF4aXMucmV3cml0ZVRpY2tzKHRoaXMudGV4dENvbnRlbnQsZSl9KTt2YXIgSz1uLm1heChSLnNlbGVjdEFsbChcIi5hbmd1bGFyLXRpY2sgdGV4dFwiKVswXS5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5nZXRDVE0oKS5lK3QuZ2V0QkJveCgpLndpZHRofSkpO1AuYXR0cih7dHJhbnNmb3JtOlwidHJhbnNsYXRlKFwiK1t4K0ssZi5tYXJnaW4udG9wXStcIilcIn0pO3ZhciBRPXQuc2VsZWN0KFwiZy5nZW9tZXRyeS1ncm91cFwiKS5zZWxlY3RBbGwoXCJnXCIpLnNpemUoKT4wLHR0PXQuc2VsZWN0KFwiZy5nZW9tZXRyeS1ncm91cFwiKS5zZWxlY3RBbGwoXCJnLmdlb21ldHJ5XCIpLmRhdGEocCk7aWYodHQuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoe2NsYXNzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJnZW9tZXRyeSBnZW9tZXRyeVwiK2V9fSksdHQuZXhpdCgpLnJlbW92ZSgpLHBbMF18fFEpe3ZhciBldD1bXTtwLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj17fTtuLnJhZGlhbFNjYWxlPXIsbi5hbmd1bGFyU2NhbGU9cyxuLmNvbnRhaW5lcj10dC5maWx0ZXIoZnVuY3Rpb24odCxyKXtyZXR1cm4gcj09ZX0pLG4uZ2VvbWV0cnk9dC5nZW9tZXRyeSxuLm9yaWVudGF0aW9uPWYub3JpZW50YXRpb24sbi5kaXJlY3Rpb249Zi5kaXJlY3Rpb24sbi5pbmRleD1lLGV0LnB1c2goe2RhdGE6dCxnZW9tZXRyeUNvbmZpZzpufSl9KTt2YXIgcnQ9bi5uZXN0KCkua2V5KGZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHQuZGF0YS5ncm91cElkfHxcInVuc3RhY2tlZFwifSkuZW50cmllcyhldCksbnQ9W107cnQuZm9yRWFjaChmdW5jdGlvbih0LGUpe1widW5zdGFja2VkXCI9PT10LmtleT9udD1udC5jb25jYXQodC52YWx1ZXMubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RdfSkpOm50LnB1c2godC52YWx1ZXMpfSksbnQuZm9yRWFjaChmdW5jdGlvbih0LGUpe3ZhciByO3I9QXJyYXkuaXNBcnJheSh0KT90WzBdLmdlb21ldHJ5Q29uZmlnLmdlb21ldHJ5OnQuZ2VvbWV0cnlDb25maWcuZ2VvbWV0cnk7dmFyIG49dC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gaShvW3JdLmRlZmF1bHRDb25maWcoKSx0KX0pO29bcl0oKS5jb25maWcobikoKX0pfXZhciBpdCxhdCxvdD10LnNlbGVjdChcIi5ndWlkZXMtZ3JvdXBcIiksc3Q9dC5zZWxlY3QoXCIudG9vbHRpcHMtZ3JvdXBcIiksbHQ9by50b29sdGlwUGFuZWwoKS5jb25maWcoe2NvbnRhaW5lcjpzdCxmb250U2l6ZTo4fSkoKSxjdD1vLnRvb2x0aXBQYW5lbCgpLmNvbmZpZyh7Y29udGFpbmVyOnN0LGZvbnRTaXplOjh9KSgpLHV0PW8udG9vbHRpcFBhbmVsKCkuY29uZmlnKHtjb250YWluZXI6c3QsaGFzVGljazohMH0pKCk7aWYoIUEpe3ZhciBodD1vdC5zZWxlY3QoXCJsaW5lXCIpLmF0dHIoe3gxOjAseTE6MCx5MjowfSkuc3R5bGUoe3N0cm9rZTpcImdyZXlcIixcInBvaW50ZXItZXZlbnRzXCI6XCJub25lXCJ9KTtSLm9uKFwibW91c2Vtb3ZlLmFuZ3VsYXItZ3VpZGVcIixmdW5jdGlvbih0LGUpe3ZhciByPW8udXRpbC5nZXRNb3VzZVBvcyhZKS5hbmdsZTtodC5hdHRyKHt4MjoteCx0cmFuc2Zvcm06XCJyb3RhdGUoXCIrcitcIilcIn0pLnN0eWxlKHtvcGFjaXR5Oi41fSk7dmFyIG49KHIrMTgwKzM2MC1mLm9yaWVudGF0aW9uKSUzNjA7aXQ9cy5pbnZlcnQobik7dmFyIGk9by51dGlsLmNvbnZlcnRUb0NhcnRlc2lhbih4KzEyLHIrMTgwKTtsdC50ZXh0KG8udXRpbC5yb3VuZChpdCkpLm1vdmUoW2lbMF0rX1swXSxpWzFdK19bMV1dKX0pLm9uKFwibW91c2VvdXQuYW5ndWxhci1ndWlkZVwiLGZ1bmN0aW9uKHQsZSl7b3Quc2VsZWN0KFwibGluZVwiKS5zdHlsZSh7b3BhY2l0eTowfSl9KX12YXIgZnQ9b3Quc2VsZWN0KFwiY2lyY2xlXCIpLnN0eWxlKHtzdHJva2U6XCJncmV5XCIsZmlsbDpcIm5vbmVcIn0pO1Iub24oXCJtb3VzZW1vdmUucmFkaWFsLWd1aWRlXCIsZnVuY3Rpb24odCxlKXt2YXIgbj1vLnV0aWwuZ2V0TW91c2VQb3MoWSkucmFkaXVzO2Z0LmF0dHIoe3I6bn0pLnN0eWxlKHtvcGFjaXR5Oi41fSksYXQ9ci5pbnZlcnQoby51dGlsLmdldE1vdXNlUG9zKFkpLnJhZGl1cyk7dmFyIGk9by51dGlsLmNvbnZlcnRUb0NhcnRlc2lhbihuLGYucmFkaWFsQXhpcy5vcmllbnRhdGlvbik7Y3QudGV4dChvLnV0aWwucm91bmQoYXQpKS5tb3ZlKFtpWzBdK19bMF0saVsxXStfWzFdXSl9KS5vbihcIm1vdXNlb3V0LnJhZGlhbC1ndWlkZVwiLGZ1bmN0aW9uKHQsZSl7ZnQuc3R5bGUoe29wYWNpdHk6MH0pLHV0LmhpZGUoKSxsdC5oaWRlKCksY3QuaGlkZSgpfSksdC5zZWxlY3RBbGwoXCIuZ2VvbWV0cnktZ3JvdXAgLm1hcmtcIikub24oXCJtb3VzZW92ZXIudG9vbHRpcFwiLGZ1bmN0aW9uKGUscil7dmFyIGk9bi5zZWxlY3QodGhpcyksYT10aGlzLnN0eWxlLmZpbGwscz1cImJsYWNrXCIsbD10aGlzLnN0eWxlLm9wYWNpdHl8fDE7aWYoaS5hdHRyKHtcImRhdGEtb3BhY2l0eVwiOmx9KSxhJiZcIm5vbmVcIiE9PWEpe2kuYXR0cih7XCJkYXRhLWZpbGxcIjphfSkscz1uLmhzbChhKS5kYXJrZXIoKS50b1N0cmluZygpLGkuc3R5bGUoe2ZpbGw6cyxvcGFjaXR5OjF9KTt2YXIgYz17dDpvLnV0aWwucm91bmQoZVswXSkscjpvLnV0aWwucm91bmQoZVsxXSl9O0EmJihjLnQ9d1tlWzBdXSk7dmFyIHU9XCJ0OiBcIitjLnQrXCIsIHI6IFwiK2MucixoPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZj10Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxwPVtoLmxlZnQraC53aWR0aC8yLVZbMF0tZi5sZWZ0LGgudG9wK2guaGVpZ2h0LzItVlsxXS1mLnRvcF07dXQuY29uZmlnKHtjb2xvcjpzfSkudGV4dCh1KSx1dC5tb3ZlKHApfWVsc2UgYT10aGlzLnN0eWxlLnN0cm9rZXx8XCJibGFja1wiLGkuYXR0cih7XCJkYXRhLXN0cm9rZVwiOmF9KSxzPW4uaHNsKGEpLmRhcmtlcigpLnRvU3RyaW5nKCksaS5zdHlsZSh7c3Ryb2tlOnMsb3BhY2l0eToxfSl9KS5vbihcIm1vdXNlbW92ZS50b29sdGlwXCIsZnVuY3Rpb24odCxlKXtpZigwIT1uLmV2ZW50LndoaWNoKXJldHVybiExO24uc2VsZWN0KHRoaXMpLmF0dHIoXCJkYXRhLWZpbGxcIikmJnV0LnNob3coKX0pLm9uKFwibW91c2VvdXQudG9vbHRpcFwiLGZ1bmN0aW9uKHQsZSl7dXQuaGlkZSgpO3ZhciByPW4uc2VsZWN0KHRoaXMpLGk9ci5hdHRyKFwiZGF0YS1maWxsXCIpO2k/ci5zdHlsZSh7ZmlsbDppLG9wYWNpdHk6ci5hdHRyKFwiZGF0YS1vcGFjaXR5XCIpfSk6ci5zdHlsZSh7c3Ryb2tlOnIuYXR0cihcImRhdGEtc3Ryb2tlXCIpLG9wYWNpdHk6ci5hdHRyKFwiZGF0YS1vcGFjaXR5XCIpfSl9KX0pfShjKSx0aGlzfSxmLmNvbmZpZz1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbDt2YXIgZT1vLnV0aWwuY2xvbmVKc29uKHQpO3JldHVybiBlLmRhdGEuZm9yRWFjaChmdW5jdGlvbih0LGUpe2wuZGF0YVtlXXx8KGwuZGF0YVtlXT17fSksaShsLmRhdGFbZV0sby5BeGlzLmRlZmF1bHRDb25maWcoKS5kYXRhWzBdKSxpKGwuZGF0YVtlXSx0KX0pLGkobC5sYXlvdXQsby5BeGlzLmRlZmF1bHRDb25maWcoKS5sYXlvdXQpLGkobC5sYXlvdXQsZS5sYXlvdXQpLHRoaXN9LGYuZ2V0TGl2ZUNvbmZpZz1mdW5jdGlvbigpe3JldHVybiB1fSxmLmdldGlucHV0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIGN9LGYucmFkaWFsU2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHJ9LGYuYW5ndWxhclNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBzfSxmLnN2Zz1mdW5jdGlvbigpe3JldHVybiB0fSxuLnJlYmluZChmLGgsXCJvblwiKSxmfSxvLkF4aXMuZGVmYXVsdENvbmZpZz1mdW5jdGlvbih0LGUpe3JldHVybntkYXRhOlt7dDpbMSwyLDMsNF0scjpbMTAsMTEsMTIsMTNdLG5hbWU6XCJMaW5lMVwiLGdlb21ldHJ5OlwiTGluZVBsb3RcIixjb2xvcjpudWxsLHN0cm9rZURhc2g6XCJzb2xpZFwiLHN0cm9rZUNvbG9yOm51bGwsc3Ryb2tlU2l6ZTpcIjFcIix2aXNpYmxlSW5MZWdlbmQ6ITAsb3BhY2l0eToxfV0sbGF5b3V0OntkZWZhdWx0Q29sb3JSYW5nZTpuLnNjYWxlLmNhdGVnb3J5MTAoKS5yYW5nZSgpLHRpdGxlOm51bGwsaGVpZ2h0OjQ1MCx3aWR0aDo1MDAsbWFyZ2luOnt0b3A6NDAscmlnaHQ6NDAsYm90dG9tOjQwLGxlZnQ6NDB9LGZvbnQ6e3NpemU6MTIsY29sb3I6XCJncmF5XCIsb3V0bGluZUNvbG9yOlwid2hpdGVcIixmYW1pbHk6XCJUYWhvbWEsIHNhbnMtc2VyaWZcIn0sZGlyZWN0aW9uOlwiY2xvY2t3aXNlXCIsb3JpZW50YXRpb246MCxsYWJlbE9mZnNldDoxMCxyYWRpYWxBeGlzOntkb21haW46bnVsbCxvcmllbnRhdGlvbjotNDUsdGlja3NTdWZmaXg6XCJcIix2aXNpYmxlOiEwLGdyaWRMaW5lc1Zpc2libGU6ITAsdGlja09yaWVudGF0aW9uOlwiaG9yaXpvbnRhbFwiLHJld3JpdGVUaWNrczpudWxsfSxhbmd1bGFyQXhpczp7ZG9tYWluOlswLDM2MF0sdGlja3NTdWZmaXg6XCJcIix2aXNpYmxlOiEwLGdyaWRMaW5lc1Zpc2libGU6ITAsbGFiZWxzVmlzaWJsZTohMCx0aWNrT3JpZW50YXRpb246XCJob3Jpem9udGFsXCIscmV3cml0ZVRpY2tzOm51bGwsdGlja3NDb3VudDpudWxsLHRpY2tzU3RlcDpudWxsfSxtaW5vclRpY2tzOjAsdGlja0xlbmd0aDpudWxsLHRpY2tDb2xvcjpcInNpbHZlclwiLG1pbm9yVGlja0NvbG9yOlwiI2VlZVwiLGJhY2tncm91bmRDb2xvcjpcIm5vbmVcIixuZWVkc0VuZFNwYWNpbmc6bnVsbCxzaG93TGVnZW5kOiEwLGxlZ2VuZDp7cmV2ZXJzZU9yZGVyOiExfSxvcGFjaXR5OjF9fX0sby51dGlsPXt9LG8uREFUQUVYVEVOVD1cImRhdGFFeHRlbnRcIixvLkFSRUE9XCJBcmVhQ2hhcnRcIixvLkxJTkU9XCJMaW5lUGxvdFwiLG8uRE9UPVwiRG90UGxvdFwiLG8uQkFSPVwiQmFyQ2hhcnRcIixvLnV0aWwuX292ZXJyaWRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIHQpciBpbiBlJiYoZVtyXT10W3JdKX0sby51dGlsLl9leHRlbmQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdCllW3JdPXRbcl19LG8udXRpbC5fcm5kU25kPWZ1bmN0aW9uKCl7cmV0dXJuIDIqTWF0aC5yYW5kb20oKS0xKygyKk1hdGgucmFuZG9tKCktMSkrKDIqTWF0aC5yYW5kb20oKS0xKX0sby51dGlsLmRhdGFGcm9tRXF1YXRpb24yPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZXx8NjtyZXR1cm4gbi5yYW5nZSgwLDM2MCtyLHIpLm1hcChmdW5jdGlvbihlLHIpe3ZhciBuPWUqTWF0aC5QSS8xODA7cmV0dXJuW2UsdChuKV19KX0sby51dGlsLmRhdGFGcm9tRXF1YXRpb249ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWV8fDYsYT1bXSxvPVtdO24ucmFuZ2UoMCwzNjAraSxpKS5mb3JFYWNoKGZ1bmN0aW9uKGUscil7dmFyIG49ZSpNYXRoLlBJLzE4MCxpPXQobik7YS5wdXNoKGUpLG8ucHVzaChpKX0pO3ZhciBzPXt0OmEscjpvfTtyZXR1cm4gciYmKHMubmFtZT1yKSxzfSxvLnV0aWwuZW5zdXJlQXJyYXk9ZnVuY3Rpb24odCxlKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgdClyZXR1cm4gbnVsbDt2YXIgcj1bXS5jb25jYXQodCk7cmV0dXJuIG4ucmFuZ2UoZSkubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHJbZV18fHJbMF19KX0sby51dGlsLmZpbGxBcnJheXM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSxuKXt0W2VdPW8udXRpbC5lbnN1cmVBcnJheSh0W2VdLHIpfSksdH0sby51dGlsLmNsb25lSnNvbj1mdW5jdGlvbih0KXtyZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0KSl9LG8udXRpbC52YWxpZGF0ZUtleXM9ZnVuY3Rpb24odCxlKXtcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9ZS5zcGxpdChcIi5cIikpO3ZhciByPWUuc2hpZnQoKTtyZXR1cm4gdFtyXSYmKCFlLmxlbmd0aHx8b2JqSGFzS2V5cyh0W3JdLGUpKX0sby51dGlsLnN1bUFycmF5cz1mdW5jdGlvbih0LGUpe3JldHVybiBuLnppcCh0LGUpLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBuLnN1bSh0KX0pfSxvLnV0aWwuYXJyYXlMYXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0W3QubGVuZ3RoLTFdfSxvLnV0aWwuYXJyYXlFcXVhbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1NYXRoLm1heCh0Lmxlbmd0aCxlLmxlbmd0aCwxKTtyLS0gPj0wJiZ0W3JdPT09ZVtyXTspO3JldHVybi0yPT09cn0sby51dGlsLmZsYXR0ZW5BcnJheT1mdW5jdGlvbih0KXtmb3IodmFyIGU9W107IW8udXRpbC5hcnJheUVxdWFsKGUsdCk7KWU9dCx0PVtdLmNvbmNhdC5hcHBseShbXSx0KTtyZXR1cm4gdH0sby51dGlsLmRlZHVwbGljYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0LmZpbHRlcihmdW5jdGlvbih0LGUscil7cmV0dXJuIHIuaW5kZXhPZih0KT09ZX0pfSxvLnV0aWwuY29udmVydFRvQ2FydGVzaWFuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZSpNYXRoLlBJLzE4MDtyZXR1cm5bdCpNYXRoLmNvcyhyKSx0Kk1hdGguc2luKHIpXX0sby51dGlsLnJvdW5kPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZXx8MixuPU1hdGgucG93KDEwLHIpO3JldHVybiBNYXRoLnJvdW5kKHQqbikvbn0sby51dGlsLmdldE1vdXNlUG9zPWZ1bmN0aW9uKHQpe3ZhciBlPW4ubW91c2UodC5ub2RlKCkpLHI9ZVswXSxpPWVbMV0sYT17fTtyZXR1cm4gYS54PXIsYS55PWksYS5wb3M9ZSxhLmFuZ2xlPTE4MCooTWF0aC5hdGFuMihpLHIpK01hdGguUEkpL01hdGguUEksYS5yYWRpdXM9TWF0aC5zcXJ0KHIqcitpKmkpLGF9LG8udXRpbC5kdXBsaWNhdGVzQ291bnQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9e30sbj17fSxpPTAsYT10Lmxlbmd0aDtpPGE7aSsrKShlPXRbaV0paW4gcj8ocltlXSsrLG5bZV09cltlXSk6cltlXT0xO3JldHVybiBufSxvLnV0aWwuZHVwbGljYXRlcz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXMoby51dGlsLmR1cGxpY2F0ZXNDb3VudCh0KSl9LG8udXRpbC50cmFuc2xhdG9yPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKG4pe3ZhciBpPXIuc2xpY2UoKTtyPWUsZT1pfXZhciBhPWUucmVkdWNlKGZ1bmN0aW9uKHQsZSl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHQpcmV0dXJuIHRbZV19LHQpO1widW5kZWZpbmVkXCIhPXR5cGVvZiBhJiYoZS5yZWR1Y2UoZnVuY3Rpb24odCxyLG4pe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB0KXJldHVybiBuPT09ZS5sZW5ndGgtMSYmZGVsZXRlIHRbcl0sdFtyXX0sdCksci5yZWR1Y2UoZnVuY3Rpb24odCxlLG4pe3JldHVyblwidW5kZWZpbmVkXCI9PXR5cGVvZiB0W2VdJiYodFtlXT17fSksbj09PXIubGVuZ3RoLTEmJih0W2VdPWEpLHRbZV19LHQpKX0sby5Qb2x5Q2hhcnQ9ZnVuY3Rpb24oKXt2YXIgdD1bby5Qb2x5Q2hhcnQuZGVmYXVsdENvbmZpZygpXSxlPW4uZGlzcGF0Y2goXCJob3ZlclwiKSxyPXtzb2xpZDpcIm5vbmVcIixkYXNoOls1LDJdLGRvdDpbMiw1XX07ZnVuY3Rpb24gYSgpe3ZhciBlPXRbMF0uZ2VvbWV0cnlDb25maWcsaT1lLmNvbnRhaW5lcjtcInN0cmluZ1wiPT10eXBlb2YgaSYmKGk9bi5zZWxlY3QoaSkpLGkuZGF0dW0odCkuZWFjaChmdW5jdGlvbih0LGkpe3ZhciBhPSEhdFswXS5kYXRhLnlTdGFjayxvPXQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGE/bi56aXAodC5kYXRhLnRbMF0sdC5kYXRhLnJbMF0sdC5kYXRhLnlTdGFja1swXSk6bi56aXAodC5kYXRhLnRbMF0sdC5kYXRhLnJbMF0pfSkscz1lLmFuZ3VsYXJTY2FsZSxsPWUucmFkaWFsU2NhbGUuZG9tYWluKClbMF0sYz17YmFyOmZ1bmN0aW9uKHIsaSxhKXt2YXIgbz10W2FdLmRhdGEsbD1lLnJhZGlhbFNjYWxlKHJbMV0pLWUucmFkaWFsU2NhbGUoMCksYz1lLnJhZGlhbFNjYWxlKHJbMl18fDApLHU9by5iYXJXaWR0aDtuLnNlbGVjdCh0aGlzKS5hdHRyKHtjbGFzczpcIm1hcmsgYmFyXCIsZDpcIk1cIitbW2wrYywtdS8yXSxbbCtjLHUvMl0sW2MsdS8yXSxbYywtdS8yXV0uam9pbihcIkxcIikrXCJaXCIsdHJhbnNmb3JtOmZ1bmN0aW9uKHQscil7cmV0dXJuXCJyb3RhdGUoXCIrKGUub3JpZW50YXRpb24rcyh0WzBdKSkrXCIpXCJ9fSl9fTtjLmRvdD1mdW5jdGlvbihyLGksYSl7dmFyIG89clsyXT9bclswXSxyWzFdK3JbMl1dOnIscz1uLnN2Zy5zeW1ib2woKS5zaXplKHRbYV0uZGF0YS5kb3RTaXplKS50eXBlKHRbYV0uZGF0YS5kb3RUeXBlKShyLGkpO24uc2VsZWN0KHRoaXMpLmF0dHIoe2NsYXNzOlwibWFyayBkb3RcIixkOnMsdHJhbnNmb3JtOmZ1bmN0aW9uKHQscil7dmFyIG4saSxhLHM9KG49ZnVuY3Rpb24odCxyKXt2YXIgbj1lLnJhZGlhbFNjYWxlKHRbMV0pLGk9KGUuYW5ndWxhclNjYWxlKHRbMF0pK2Uub3JpZW50YXRpb24pKk1hdGguUEkvMTgwO3JldHVybntyOm4sdDppfX0obyksaT1uLnIqTWF0aC5jb3Mobi50KSxhPW4ucipNYXRoLnNpbihuLnQpLHt4OmkseTphfSk7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrW3MueCxzLnldK1wiKVwifX0pfTt2YXIgdT1uLnN2Zy5saW5lLnJhZGlhbCgpLmludGVycG9sYXRlKHRbMF0uZGF0YS5saW5lSW50ZXJwb2xhdGlvbikucmFkaXVzKGZ1bmN0aW9uKHQpe3JldHVybiBlLnJhZGlhbFNjYWxlKHRbMV0pfSkuYW5nbGUoZnVuY3Rpb24odCl7cmV0dXJuIGUuYW5ndWxhclNjYWxlKHRbMF0pKk1hdGguUEkvMTgwfSk7Yy5saW5lPWZ1bmN0aW9uKHIsaSxhKXt2YXIgcz1yWzJdP29bYV0ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RbMF0sdFsxXSt0WzJdXX0pOm9bYV07aWYobi5zZWxlY3QodGhpcykuZWFjaChjLmRvdCkuc3R5bGUoe29wYWNpdHk6ZnVuY3Rpb24oZSxyKXtyZXR1cm4rdFthXS5kYXRhLmRvdFZpc2libGV9LGZpbGw6ZC5zdHJva2UocixpLGEpfSkuYXR0cih7Y2xhc3M6XCJtYXJrIGRvdFwifSksIShpPjApKXt2YXIgbD1uLnNlbGVjdCh0aGlzLnBhcmVudE5vZGUpLnNlbGVjdEFsbChcInBhdGgubGluZVwiKS5kYXRhKFswXSk7bC5lbnRlcigpLmluc2VydChcInBhdGhcIiksbC5hdHRyKHtjbGFzczpcImxpbmVcIixkOnUocyksdHJhbnNmb3JtOmZ1bmN0aW9uKHQscil7cmV0dXJuXCJyb3RhdGUoXCIrKGUub3JpZW50YXRpb24rOTApK1wiKVwifSxcInBvaW50ZXItZXZlbnRzXCI6XCJub25lXCJ9KS5zdHlsZSh7ZmlsbDpmdW5jdGlvbih0LGUpe3JldHVybiBkLmZpbGwocixpLGEpfSxcImZpbGwtb3BhY2l0eVwiOjAsc3Ryb2tlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQuc3Ryb2tlKHIsaSxhKX0sXCJzdHJva2Utd2lkdGhcIjpmdW5jdGlvbih0LGUpe3JldHVybiBkW1wic3Ryb2tlLXdpZHRoXCJdKHIsaSxhKX0sXCJzdHJva2UtZGFzaGFycmF5XCI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZFtcInN0cm9rZS1kYXNoYXJyYXlcIl0ocixpLGEpfSxvcGFjaXR5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQub3BhY2l0eShyLGksYSl9LGRpc3BsYXk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZC5kaXNwbGF5KHIsaSxhKX19KX19O3ZhciBoPWUuYW5ndWxhclNjYWxlLnJhbmdlKCksZj1NYXRoLmFicyhoWzFdLWhbMF0pL29bMF0ubGVuZ3RoKk1hdGguUEkvMTgwLHA9bi5zdmcuYXJjKCkuc3RhcnRBbmdsZShmdW5jdGlvbih0KXtyZXR1cm4tZi8yfSkuZW5kQW5nbGUoZnVuY3Rpb24odCl7cmV0dXJuIGYvMn0pLmlubmVyUmFkaXVzKGZ1bmN0aW9uKHQpe3JldHVybiBlLnJhZGlhbFNjYWxlKGwrKHRbMl18fDApKX0pLm91dGVyUmFkaXVzKGZ1bmN0aW9uKHQpe3JldHVybiBlLnJhZGlhbFNjYWxlKGwrKHRbMl18fDApKStlLnJhZGlhbFNjYWxlKHRbMV0pfSk7Yy5hcmM9ZnVuY3Rpb24odCxyLGkpe24uc2VsZWN0KHRoaXMpLmF0dHIoe2NsYXNzOlwibWFyayBhcmNcIixkOnAsdHJhbnNmb3JtOmZ1bmN0aW9uKHQscil7cmV0dXJuXCJyb3RhdGUoXCIrKGUub3JpZW50YXRpb24rcyh0WzBdKSs5MCkrXCIpXCJ9fSl9O3ZhciBkPXtmaWxsOmZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdFtuXS5kYXRhLmNvbG9yfSxzdHJva2U6ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0W25dLmRhdGEuc3Ryb2tlQ29sb3J9LFwic3Ryb2tlLXdpZHRoXCI6ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0W25dLmRhdGEuc3Ryb2tlU2l6ZStcInB4XCJ9LFwic3Ryb2tlLWRhc2hhcnJheVwiOmZ1bmN0aW9uKGUsbixpKXtyZXR1cm4gclt0W2ldLmRhdGEuc3Ryb2tlRGFzaF19LG9wYWNpdHk6ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0W25dLmRhdGEub3BhY2l0eX0sZGlzcGxheTpmdW5jdGlvbihlLHIsbil7cmV0dXJuXCJ1bmRlZmluZWRcIj09dHlwZW9mIHRbbl0uZGF0YS52aXNpYmxlfHx0W25dLmRhdGEudmlzaWJsZT9cImJsb2NrXCI6XCJub25lXCJ9fSxnPW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbChcImcubGF5ZXJcIikuZGF0YShvKTtnLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKHtjbGFzczpcImxheWVyXCJ9KTt2YXIgdj1nLnNlbGVjdEFsbChcInBhdGgubWFya1wiKS5kYXRhKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR9KTt2LmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5hdHRyKHtjbGFzczpcIm1hcmtcIn0pLHYuc3R5bGUoZCkuZWFjaChjW2UuZ2VvbWV0cnlUeXBlXSksdi5leGl0KCkucmVtb3ZlKCksZy5leGl0KCkucmVtb3ZlKCl9KX1yZXR1cm4gYS5jb25maWc9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGUuZm9yRWFjaChmdW5jdGlvbihlLHIpe3Rbcl18fCh0W3JdPXt9KSxpKHRbcl0sby5Qb2x5Q2hhcnQuZGVmYXVsdENvbmZpZygpKSxpKHRbcl0sZSl9KSx0aGlzKTp0fSxhLmdldENvbG9yU2NhbGU9ZnVuY3Rpb24oKXt9LG4ucmViaW5kKGEsZSxcIm9uXCIpLGF9LG8uUG9seUNoYXJ0LmRlZmF1bHRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57ZGF0YTp7bmFtZTpcImdlb20xXCIsdDpbWzEsMiwzLDRdXSxyOltbMSwyLDMsNF1dLGRvdFR5cGU6XCJjaXJjbGVcIixkb3RTaXplOjY0LGRvdFZpc2libGU6ITEsYmFyV2lkdGg6MjAsY29sb3I6XCIjZmZhNTAwXCIsc3Ryb2tlU2l6ZToxLHN0cm9rZUNvbG9yOlwic2lsdmVyXCIsc3Ryb2tlRGFzaDpcInNvbGlkXCIsb3BhY2l0eToxLGluZGV4OjAsdmlzaWJsZTohMCx2aXNpYmxlSW5MZWdlbmQ6ITB9LGdlb21ldHJ5Q29uZmlnOntnZW9tZXRyeTpcIkxpbmVQbG90XCIsZ2VvbWV0cnlUeXBlOlwiYXJjXCIsZGlyZWN0aW9uOlwiY2xvY2t3aXNlXCIsb3JpZW50YXRpb246MCxjb250YWluZXI6XCJib2R5XCIscmFkaWFsU2NhbGU6bnVsbCxhbmd1bGFyU2NhbGU6bnVsbCxjb2xvclNjYWxlOm4uc2NhbGUuY2F0ZWdvcnkyMCgpfX19LG8uQmFyQ2hhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gby5Qb2x5Q2hhcnQoKX0sby5CYXJDaGFydC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJue2dlb21ldHJ5Q29uZmlnOntnZW9tZXRyeVR5cGU6XCJiYXJcIn19fSxvLkFyZWFDaGFydD1mdW5jdGlvbigpe3JldHVybiBvLlBvbHlDaGFydCgpfSxvLkFyZWFDaGFydC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJue2dlb21ldHJ5Q29uZmlnOntnZW9tZXRyeVR5cGU6XCJhcmNcIn19fSxvLkRvdFBsb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gby5Qb2x5Q2hhcnQoKX0sby5Eb3RQbG90LmRlZmF1bHRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57Z2VvbWV0cnlDb25maWc6e2dlb21ldHJ5VHlwZTpcImRvdFwiLGRvdFR5cGU6XCJjaXJjbGVcIn19fSxvLkxpbmVQbG90PWZ1bmN0aW9uKCl7cmV0dXJuIG8uUG9seUNoYXJ0KCl9LG8uTGluZVBsb3QuZGVmYXVsdENvbmZpZz1mdW5jdGlvbigpe3JldHVybntnZW9tZXRyeUNvbmZpZzp7Z2VvbWV0cnlUeXBlOlwibGluZVwifX19LG8uTGVnZW5kPWZ1bmN0aW9uKCl7dmFyIHQ9by5MZWdlbmQuZGVmYXVsdENvbmZpZygpLGU9bi5kaXNwYXRjaChcImhvdmVyXCIpO2Z1bmN0aW9uIHIoKXt2YXIgZT10LmxlZ2VuZENvbmZpZyxhPXQuZGF0YS5tYXAoZnVuY3Rpb24odCxyKXtyZXR1cm5bXS5jb25jYXQodCkubWFwKGZ1bmN0aW9uKHQsbil7dmFyIGE9aSh7fSxlLmVsZW1lbnRzW3JdKTtyZXR1cm4gYS5uYW1lPXQsYS5jb2xvcj1bXS5jb25jYXQoZS5lbGVtZW50c1tyXS5jb2xvcilbbl0sYX0pfSksbz1uLm1lcmdlKGEpO289by5maWx0ZXIoZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5lbGVtZW50c1tyXSYmKGUuZWxlbWVudHNbcl0udmlzaWJsZUluTGVnZW5kfHxcInVuZGVmaW5lZFwiPT10eXBlb2YgZS5lbGVtZW50c1tyXS52aXNpYmxlSW5MZWdlbmQpfSksZS5yZXZlcnNlT3JkZXImJihvPW8ucmV2ZXJzZSgpKTt2YXIgcz1lLmNvbnRhaW5lcjsoXCJzdHJpbmdcIj09dHlwZW9mIHN8fHMubm9kZU5hbWUpJiYocz1uLnNlbGVjdChzKSk7dmFyIGw9by5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jb2xvcn0pLGM9ZS5mb250U2l6ZSx1PW51bGw9PWUuaXNDb250aW51b3VzP1wibnVtYmVyXCI9PXR5cGVvZiBvWzBdOmUuaXNDb250aW51b3VzLGg9dT9lLmhlaWdodDpjKm8ubGVuZ3RoLGY9cy5jbGFzc2VkKFwibGVnZW5kLWdyb3VwXCIsITApLnNlbGVjdEFsbChcInN2Z1wiKS5kYXRhKFswXSkscD1mLmVudGVyKCkuYXBwZW5kKFwic3ZnXCIpLmF0dHIoe3dpZHRoOjMwMCxoZWlnaHQ6aCtjLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcInhtbG5zOnhsaW5rXCI6XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsdmVyc2lvbjpcIjEuMVwifSk7cC5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJsZWdlbmQtYXhpc1wiLCEwKSxwLmFwcGVuZChcImdcIikuY2xhc3NlZChcImxlZ2VuZC1tYXJrc1wiLCEwKTt2YXIgZD1uLnJhbmdlKG8ubGVuZ3RoKSxnPW4uc2NhbGVbdT9cImxpbmVhclwiOlwib3JkaW5hbFwiXSgpLmRvbWFpbihkKS5yYW5nZShsKSx2PW4uc2NhbGVbdT9cImxpbmVhclwiOlwib3JkaW5hbFwiXSgpLmRvbWFpbihkKVt1P1wicmFuZ2VcIjpcInJhbmdlUG9pbnRzXCJdKFswLGhdKTtpZih1KXt2YXIgbT1mLnNlbGVjdChcIi5sZWdlbmQtbWFya3NcIikuYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJsaW5lYXJHcmFkaWVudFwiKS5hdHRyKHtpZDpcImdyYWQxXCIseDE6XCIwJVwiLHkxOlwiMCVcIix4MjpcIjAlXCIseTI6XCIxMDAlXCJ9KS5zZWxlY3RBbGwoXCJzdG9wXCIpLmRhdGEobCk7bS5lbnRlcigpLmFwcGVuZChcInN0b3BcIiksbS5hdHRyKHtvZmZzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS8obC5sZW5ndGgtMSkqMTAwK1wiJVwifX0pLnN0eWxlKHtcInN0b3AtY29sb3JcIjpmdW5jdGlvbih0LGUpe3JldHVybiB0fX0pLGYuYXBwZW5kKFwicmVjdFwiKS5jbGFzc2VkKFwibGVnZW5kLW1hcmtcIiwhMCkuYXR0cih7aGVpZ2h0OmUuaGVpZ2h0LHdpZHRoOmUuY29sb3JCYW5kV2lkdGgsZmlsbDpcInVybCgjZ3JhZDEpXCJ9KX1lbHNle3ZhciB5PWYuc2VsZWN0KFwiLmxlZ2VuZC1tYXJrc1wiKS5zZWxlY3RBbGwoXCJwYXRoLmxlZ2VuZC1tYXJrXCIpLmRhdGEobyk7eS5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChcImxlZ2VuZC1tYXJrXCIsITApLHkuYXR0cih7dHJhbnNmb3JtOmZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrW2MvMix2KGUpK2MvMl0rXCIpXCJ9LGQ6ZnVuY3Rpb24odCxlKXt2YXIgcixpLGEsbz10LnN5bWJvbDtyZXR1cm4gYT0zKihpPWMpLFwibGluZVwiPT09KHI9byk/XCJNXCIrW1staS8yLC1pLzEyXSxbaS8yLC1pLzEyXSxbaS8yLGkvMTJdLFstaS8yLGkvMTJdXStcIlpcIjotMSE9bi5zdmcuc3ltYm9sVHlwZXMuaW5kZXhPZihyKT9uLnN2Zy5zeW1ib2woKS50eXBlKHIpLnNpemUoYSkoKTpuLnN2Zy5zeW1ib2woKS50eXBlKFwic3F1YXJlXCIpLnNpemUoYSkoKX0sZmlsbDpmdW5jdGlvbih0LGUpe3JldHVybiBnKGUpfX0pLHkuZXhpdCgpLnJlbW92ZSgpfXZhciB4PW4uc3ZnLmF4aXMoKS5zY2FsZSh2KS5vcmllbnQoXCJyaWdodFwiKSxiPWYuc2VsZWN0KFwiZy5sZWdlbmQtYXhpc1wiKS5hdHRyKHt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoXCIrW3U/ZS5jb2xvckJhbmRXaWR0aDpjLGMvMl0rXCIpXCJ9KS5jYWxsKHgpO3JldHVybiBiLnNlbGVjdEFsbChcIi5kb21haW5cIikuc3R5bGUoe2ZpbGw6XCJub25lXCIsc3Ryb2tlOlwibm9uZVwifSksYi5zZWxlY3RBbGwoXCJsaW5lXCIpLnN0eWxlKHtmaWxsOlwibm9uZVwiLHN0cm9rZTp1P2UudGV4dENvbG9yOlwibm9uZVwifSksYi5zZWxlY3RBbGwoXCJ0ZXh0XCIpLnN0eWxlKHtmaWxsOmUudGV4dENvbG9yLFwiZm9udC1zaXplXCI6ZS5mb250U2l6ZX0pLnRleHQoZnVuY3Rpb24odCxlKXtyZXR1cm4gb1tlXS5uYW1lfSkscn1yZXR1cm4gci5jb25maWc9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkodCxlKSx0aGlzKTp0fSxuLnJlYmluZChyLGUsXCJvblwiKSxyfSxvLkxlZ2VuZC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKHQsZSl7cmV0dXJue2RhdGE6W1wiYVwiLFwiYlwiLFwiY1wiXSxsZWdlbmRDb25maWc6e2VsZW1lbnRzOlt7c3ltYm9sOlwibGluZVwiLGNvbG9yOlwicmVkXCJ9LHtzeW1ib2w6XCJzcXVhcmVcIixjb2xvcjpcInllbGxvd1wifSx7c3ltYm9sOlwiZGlhbW9uZFwiLGNvbG9yOlwibGltZWdyZWVuXCJ9XSxoZWlnaHQ6MTUwLGNvbG9yQmFuZFdpZHRoOjMwLGZvbnRTaXplOjEyLGNvbnRhaW5lcjpcImJvZHlcIixpc0NvbnRpbnVvdXM6bnVsbCx0ZXh0Q29sb3I6XCJncmV5XCIscmV2ZXJzZU9yZGVyOiExfX19LG8udG9vbHRpcFBhbmVsPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLGE9e2NvbnRhaW5lcjpudWxsLGhhc1RpY2s6ITEsZm9udFNpemU6MTIsY29sb3I6XCJ3aGl0ZVwiLHBhZGRpbmc6NX0scz1cInRvb2x0aXAtXCIrby50b29sdGlwUGFuZWwudWlkKyssbD0xMCxjPWZ1bmN0aW9uKCl7dmFyIG49KHQ9YS5jb250YWluZXIuc2VsZWN0QWxsKFwiZy5cIitzKS5kYXRhKFswXSkpLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKHMsITApLnN0eWxlKHtcInBvaW50ZXItZXZlbnRzXCI6XCJub25lXCIsZGlzcGxheTpcIm5vbmVcIn0pO3JldHVybiByPW4uYXBwZW5kKFwicGF0aFwiKS5zdHlsZSh7ZmlsbDpcIndoaXRlXCIsXCJmaWxsLW9wYWNpdHlcIjouOX0pLmF0dHIoe2Q6XCJNMCAwXCJ9KSxlPW4uYXBwZW5kKFwidGV4dFwiKS5hdHRyKHtkeDphLnBhZGRpbmcrbCxkeTouMyorYS5mb250U2l6ZX0pLGN9O3JldHVybiBjLnRleHQ9ZnVuY3Rpb24oaSl7dmFyIG89bi5oc2woYS5jb2xvcikubCxzPW8+PS41P1wiI2FhYVwiOlwid2hpdGVcIix1PW8+PS41P1wiYmxhY2tcIjpcIndoaXRlXCIsaD1pfHxcIlwiO2Uuc3R5bGUoe2ZpbGw6dSxcImZvbnQtc2l6ZVwiOmEuZm9udFNpemUrXCJweFwifSkudGV4dChoKTt2YXIgZj1hLnBhZGRpbmcscD1lLm5vZGUoKS5nZXRCQm94KCksZD17ZmlsbDphLmNvbG9yLHN0cm9rZTpzLFwic3Ryb2tlLXdpZHRoXCI6XCIycHhcIn0sZz1wLndpZHRoKzIqZitsLHY9cC5oZWlnaHQrMipmO3JldHVybiByLmF0dHIoe2Q6XCJNXCIrW1tsLC12LzJdLFtsLC12LzRdLFthLmhhc1RpY2s/MDpsLDBdLFtsLHYvNF0sW2wsdi8yXSxbZyx2LzJdLFtnLC12LzJdXS5qb2luKFwiTFwiKStcIlpcIn0pLnN0eWxlKGQpLHQuYXR0cih7dHJhbnNmb3JtOlwidHJhbnNsYXRlKFwiK1tsLC12LzIrMipmXStcIilcIn0pLHQuc3R5bGUoe2Rpc3BsYXk6XCJibG9ja1wifSksY30sYy5tb3ZlPWZ1bmN0aW9uKGUpe2lmKHQpcmV0dXJuIHQuYXR0cih7dHJhbnNmb3JtOlwidHJhbnNsYXRlKFwiK1tlWzBdLGVbMV1dK1wiKVwifSkuc3R5bGUoe2Rpc3BsYXk6XCJibG9ja1wifSksY30sYy5oaWRlPWZ1bmN0aW9uKCl7aWYodClyZXR1cm4gdC5zdHlsZSh7ZGlzcGxheTpcIm5vbmVcIn0pLGN9LGMuc2hvdz1mdW5jdGlvbigpe2lmKHQpcmV0dXJuIHQuc3R5bGUoe2Rpc3BsYXk6XCJibG9ja1wifSksY30sYy5jb25maWc9ZnVuY3Rpb24odCl7cmV0dXJuIGkoYSx0KSxjfSxjfSxvLnRvb2x0aXBQYW5lbC51aWQ9MSxvLmFkYXB0ZXI9e30sby5hZGFwdGVyLnBsb3RseT1mdW5jdGlvbigpe3ZhciB0PXtjb252ZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIHI9e307aWYodC5kYXRhJiYoci5kYXRhPXQuZGF0YS5tYXAoZnVuY3Rpb24odCxyKXt2YXIgbj1pKHt9LHQpO3JldHVybltbbixbXCJtYXJrZXJcIixcImNvbG9yXCJdLFtcImNvbG9yXCJdXSxbbixbXCJtYXJrZXJcIixcIm9wYWNpdHlcIl0sW1wib3BhY2l0eVwiXV0sW24sW1wibWFya2VyXCIsXCJsaW5lXCIsXCJjb2xvclwiXSxbXCJzdHJva2VDb2xvclwiXV0sW24sW1wibWFya2VyXCIsXCJsaW5lXCIsXCJkYXNoXCJdLFtcInN0cm9rZURhc2hcIl1dLFtuLFtcIm1hcmtlclwiLFwibGluZVwiLFwid2lkdGhcIl0sW1wic3Ryb2tlU2l6ZVwiXV0sW24sW1wibWFya2VyXCIsXCJzeW1ib2xcIl0sW1wiZG90VHlwZVwiXV0sW24sW1wibWFya2VyXCIsXCJzaXplXCJdLFtcImRvdFNpemVcIl1dLFtuLFtcIm1hcmtlclwiLFwiYmFyV2lkdGhcIl0sW1wiYmFyV2lkdGhcIl1dLFtuLFtcImxpbmVcIixcImludGVycG9sYXRpb25cIl0sW1wibGluZUludGVycG9sYXRpb25cIl1dLFtuLFtcInNob3dsZWdlbmRcIl0sW1widmlzaWJsZUluTGVnZW5kXCJdXV0uZm9yRWFjaChmdW5jdGlvbih0LHIpe28udXRpbC50cmFuc2xhdG9yLmFwcGx5KG51bGwsdC5jb25jYXQoZSkpfSksZXx8ZGVsZXRlIG4ubWFya2VyLGUmJmRlbGV0ZSBuLmdyb3VwSWQsZT8oXCJMaW5lUGxvdFwiPT09bi5nZW9tZXRyeT8obi50eXBlPVwic2NhdHRlclwiLCEwPT09bi5kb3RWaXNpYmxlPyhkZWxldGUgbi5kb3RWaXNpYmxlLG4ubW9kZT1cImxpbmVzK21hcmtlcnNcIik6bi5tb2RlPVwibGluZXNcIik6XCJEb3RQbG90XCI9PT1uLmdlb21ldHJ5PyhuLnR5cGU9XCJzY2F0dGVyXCIsbi5tb2RlPVwibWFya2Vyc1wiKTpcIkFyZWFDaGFydFwiPT09bi5nZW9tZXRyeT9uLnR5cGU9XCJhcmVhXCI6XCJCYXJDaGFydFwiPT09bi5nZW9tZXRyeSYmKG4udHlwZT1cImJhclwiKSxkZWxldGUgbi5nZW9tZXRyeSk6KFwic2NhdHRlclwiPT09bi50eXBlP1wibGluZXNcIj09PW4ubW9kZT9uLmdlb21ldHJ5PVwiTGluZVBsb3RcIjpcIm1hcmtlcnNcIj09PW4ubW9kZT9uLmdlb21ldHJ5PVwiRG90UGxvdFwiOlwibGluZXMrbWFya2Vyc1wiPT09bi5tb2RlJiYobi5nZW9tZXRyeT1cIkxpbmVQbG90XCIsbi5kb3RWaXNpYmxlPSEwKTpcImFyZWFcIj09PW4udHlwZT9uLmdlb21ldHJ5PVwiQXJlYUNoYXJ0XCI6XCJiYXJcIj09PW4udHlwZSYmKG4uZ2VvbWV0cnk9XCJCYXJDaGFydFwiKSxkZWxldGUgbi5tb2RlLGRlbGV0ZSBuLnR5cGUpLG59KSwhZSYmdC5sYXlvdXQmJlwic3RhY2tcIj09PXQubGF5b3V0LmJhcm1vZGUpKXt2YXIgYT1vLnV0aWwuZHVwbGljYXRlcyhyLmRhdGEubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZ2VvbWV0cnl9KSk7ci5kYXRhLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1hLmluZGV4T2YodC5nZW9tZXRyeSk7LTEhPW4mJihyLmRhdGFbZV0uZ3JvdXBJZD1uKX0pfWlmKHQubGF5b3V0KXt2YXIgcz1pKHt9LHQubGF5b3V0KTtpZihbW3MsW1wicGxvdF9iZ2NvbG9yXCJdLFtcImJhY2tncm91bmRDb2xvclwiXV0sW3MsW1wic2hvd2xlZ2VuZFwiXSxbXCJzaG93TGVnZW5kXCJdXSxbcyxbXCJyYWRpYWxheGlzXCJdLFtcInJhZGlhbEF4aXNcIl1dLFtzLFtcImFuZ3VsYXJheGlzXCJdLFtcImFuZ3VsYXJBeGlzXCJdXSxbcy5hbmd1bGFyYXhpcyxbXCJzaG93bGluZVwiXSxbXCJncmlkTGluZXNWaXNpYmxlXCJdXSxbcy5hbmd1bGFyYXhpcyxbXCJzaG93dGlja2xhYmVsc1wiXSxbXCJsYWJlbHNWaXNpYmxlXCJdXSxbcy5hbmd1bGFyYXhpcyxbXCJudGlja3NcIl0sW1widGlja3NDb3VudFwiXV0sW3MuYW5ndWxhcmF4aXMsW1widGlja29yaWVudGF0aW9uXCJdLFtcInRpY2tPcmllbnRhdGlvblwiXV0sW3MuYW5ndWxhcmF4aXMsW1widGlja3N1ZmZpeFwiXSxbXCJ0aWNrc1N1ZmZpeFwiXV0sW3MuYW5ndWxhcmF4aXMsW1wicmFuZ2VcIl0sW1wiZG9tYWluXCJdXSxbcy5hbmd1bGFyYXhpcyxbXCJlbmRwYWRkaW5nXCJdLFtcImVuZFBhZGRpbmdcIl1dLFtzLnJhZGlhbGF4aXMsW1wic2hvd2xpbmVcIl0sW1wiZ3JpZExpbmVzVmlzaWJsZVwiXV0sW3MucmFkaWFsYXhpcyxbXCJ0aWNrb3JpZW50YXRpb25cIl0sW1widGlja09yaWVudGF0aW9uXCJdXSxbcy5yYWRpYWxheGlzLFtcInRpY2tzdWZmaXhcIl0sW1widGlja3NTdWZmaXhcIl1dLFtzLnJhZGlhbGF4aXMsW1wicmFuZ2VcIl0sW1wiZG9tYWluXCJdXSxbcy5hbmd1bGFyQXhpcyxbXCJzaG93bGluZVwiXSxbXCJncmlkTGluZXNWaXNpYmxlXCJdXSxbcy5hbmd1bGFyQXhpcyxbXCJzaG93dGlja2xhYmVsc1wiXSxbXCJsYWJlbHNWaXNpYmxlXCJdXSxbcy5hbmd1bGFyQXhpcyxbXCJudGlja3NcIl0sW1widGlja3NDb3VudFwiXV0sW3MuYW5ndWxhckF4aXMsW1widGlja29yaWVudGF0aW9uXCJdLFtcInRpY2tPcmllbnRhdGlvblwiXV0sW3MuYW5ndWxhckF4aXMsW1widGlja3N1ZmZpeFwiXSxbXCJ0aWNrc1N1ZmZpeFwiXV0sW3MuYW5ndWxhckF4aXMsW1wicmFuZ2VcIl0sW1wiZG9tYWluXCJdXSxbcy5hbmd1bGFyQXhpcyxbXCJlbmRwYWRkaW5nXCJdLFtcImVuZFBhZGRpbmdcIl1dLFtzLnJhZGlhbEF4aXMsW1wic2hvd2xpbmVcIl0sW1wiZ3JpZExpbmVzVmlzaWJsZVwiXV0sW3MucmFkaWFsQXhpcyxbXCJ0aWNrb3JpZW50YXRpb25cIl0sW1widGlja09yaWVudGF0aW9uXCJdXSxbcy5yYWRpYWxBeGlzLFtcInRpY2tzdWZmaXhcIl0sW1widGlja3NTdWZmaXhcIl1dLFtzLnJhZGlhbEF4aXMsW1wicmFuZ2VcIl0sW1wiZG9tYWluXCJdXSxbcy5mb250LFtcIm91dGxpbmVjb2xvclwiXSxbXCJvdXRsaW5lQ29sb3JcIl1dLFtzLmxlZ2VuZCxbXCJ0cmFjZW9yZGVyXCJdLFtcInJldmVyc2VPcmRlclwiXV0sW3MsW1wibGFiZWxvZmZzZXRcIl0sW1wibGFiZWxPZmZzZXRcIl1dLFtzLFtcImRlZmF1bHRjb2xvcnJhbmdlXCJdLFtcImRlZmF1bHRDb2xvclJhbmdlXCJdXV0uZm9yRWFjaChmdW5jdGlvbih0LHIpe28udXRpbC50cmFuc2xhdG9yLmFwcGx5KG51bGwsdC5jb25jYXQoZSkpfSksZT8oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHMudGlja0xlbmd0aCYmKHMuYW5ndWxhcmF4aXMudGlja2xlbj1zLnRpY2tMZW5ndGgsZGVsZXRlIHMudGlja0xlbmd0aCkscy50aWNrQ29sb3ImJihzLmFuZ3VsYXJheGlzLnRpY2tjb2xvcj1zLnRpY2tDb2xvcixkZWxldGUgcy50aWNrQ29sb3IpKToocy5hbmd1bGFyQXhpcyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHMuYW5ndWxhckF4aXMudGlja2xlbiYmKHMudGlja0xlbmd0aD1zLmFuZ3VsYXJBeGlzLnRpY2tsZW4pLHMuYW5ndWxhckF4aXMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzLmFuZ3VsYXJBeGlzLnRpY2tjb2xvciYmKHMudGlja0NvbG9yPXMuYW5ndWxhckF4aXMudGlja2NvbG9yKSkscy5sZWdlbmQmJlwiYm9vbGVhblwiIT10eXBlb2Ygcy5sZWdlbmQucmV2ZXJzZU9yZGVyJiYocy5sZWdlbmQucmV2ZXJzZU9yZGVyPVwibm9ybWFsXCIhPXMubGVnZW5kLnJldmVyc2VPcmRlcikscy5sZWdlbmQmJlwiYm9vbGVhblwiPT10eXBlb2Ygcy5sZWdlbmQudHJhY2VvcmRlciYmKHMubGVnZW5kLnRyYWNlb3JkZXI9cy5sZWdlbmQudHJhY2VvcmRlcj9cInJldmVyc2VkXCI6XCJub3JtYWxcIixkZWxldGUgcy5sZWdlbmQucmV2ZXJzZU9yZGVyKSxzLm1hcmdpbiYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHMubWFyZ2luLnQpe3ZhciBsPVtcInRcIixcInJcIixcImJcIixcImxcIixcInBhZFwiXSxjPVtcInRvcFwiLFwicmlnaHRcIixcImJvdHRvbVwiLFwibGVmdFwiLFwicGFkXCJdLHU9e307bi5lbnRyaWVzKHMubWFyZ2luKS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dVtjW2wuaW5kZXhPZih0LmtleSldXT10LnZhbHVlfSkscy5tYXJnaW49dX1lJiYoZGVsZXRlIHMubmVlZHNFbmRTcGFjaW5nLGRlbGV0ZSBzLm1pbm9yVGlja0NvbG9yLGRlbGV0ZSBzLm1pbm9yVGlja3MsZGVsZXRlIHMuYW5ndWxhcmF4aXMudGlja3NDb3VudCxkZWxldGUgcy5hbmd1bGFyYXhpcy50aWNrc0NvdW50LGRlbGV0ZSBzLmFuZ3VsYXJheGlzLnRpY2tzU3RlcCxkZWxldGUgcy5hbmd1bGFyYXhpcy5yZXdyaXRlVGlja3MsZGVsZXRlIHMuYW5ndWxhcmF4aXMubnRpY2tzLGRlbGV0ZSBzLnJhZGlhbGF4aXMudGlja3NDb3VudCxkZWxldGUgcy5yYWRpYWxheGlzLnRpY2tzQ291bnQsZGVsZXRlIHMucmFkaWFsYXhpcy50aWNrc1N0ZXAsZGVsZXRlIHMucmFkaWFsYXhpcy5yZXdyaXRlVGlja3MsZGVsZXRlIHMucmFkaWFsYXhpcy5udGlja3MpLHIubGF5b3V0PXN9cmV0dXJuIHJ9fTtyZXR1cm4gdH19LHtcIi4uLy4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIjo2NzMsXCIuLi8uLi8uLi9saWJcIjo3MDEsZDM6MTU1fV0sODIwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLG89dChcIi4vbWljcm9wb2xhclwiKSxzPXQoXCIuL3VuZG9fbWFuYWdlclwiKSxsPWkuZXh0ZW5kRGVlcEFsbCxjPWUuZXhwb3J0cz17fTtjLmZyYW1ld29yaz1mdW5jdGlvbih0KXt2YXIgZSxyLGksYSx1LGg9bmV3IHM7ZnVuY3Rpb24gZihyLHMpe3JldHVybiBzJiYodT1zKSxuLnNlbGVjdChuLnNlbGVjdCh1KS5ub2RlKCkucGFyZW50Tm9kZSkuc2VsZWN0QWxsKFwiLnN2Zy1jb250YWluZXI+Kjpub3QoLmNoYXJ0LXJvb3QpXCIpLnJlbW92ZSgpLGU9ZT9sKGUscik6cixpfHwoaT1vLkF4aXMoKSksYT1vLmFkYXB0ZXIucGxvdGx5KCkuY29udmVydChlKSxpLmNvbmZpZyhhKS5yZW5kZXIodSksdC5kYXRhPWUuZGF0YSx0LmxheW91dD1lLmxheW91dCxjLmZpbGxMYXlvdXQodCksZX1yZXR1cm4gZi5pc1BvbGFyPSEwLGYuc3ZnPWZ1bmN0aW9uKCl7cmV0dXJuIGkuc3ZnKCl9LGYuZ2V0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LGYuZ2V0TGl2ZUNvbmZpZz1mdW5jdGlvbigpe3JldHVybiBvLmFkYXB0ZXIucGxvdGx5KCkuY29udmVydChpLmdldExpdmVDb25maWcoKSwhMCl9LGYuZ2V0TGl2ZVNjYWxlcz1mdW5jdGlvbigpe3JldHVybnt0OmkuYW5ndWxhclNjYWxlKCkscjppLnJhZGlhbFNjYWxlKCl9fSxmLnNldFVuZG9Qb2ludD1mdW5jdGlvbigpe3ZhciB0LG4saT10aGlzLGE9by51dGlsLmNsb25lSnNvbihlKTt0PWEsbj1yLGguYWRkKHt1bmRvOmZ1bmN0aW9uKCl7biYmaShuKX0scmVkbzpmdW5jdGlvbigpe2kodCl9fSkscj1vLnV0aWwuY2xvbmVKc29uKGEpfSxmLnVuZG89ZnVuY3Rpb24oKXtoLnVuZG8oKX0sZi5yZWRvPWZ1bmN0aW9uKCl7aC5yZWRvKCl9LGZ9LGMuZmlsbExheW91dD1mdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoXCIucGxvdC1jb250YWluZXJcIikscj1lLnNlbGVjdEFsbChcIi5zdmctY29udGFpbmVyXCIpLGk9dC5mcmFtZXdvcmsmJnQuZnJhbWV3b3JrLnN2ZyYmdC5mcmFtZXdvcmsuc3ZnKCksbz17d2lkdGg6ODAwLGhlaWdodDo2MDAscGFwZXJfYmdjb2xvcjphLmJhY2tncm91bmQsX2NvbnRhaW5lcjplLF9wYXBlcmRpdjpyLF9wYXBlcjppfTt0Ll9mdWxsTGF5b3V0PWwobyx0LmxheW91dCl9fSx7XCIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vLi4vbGliXCI6NzAxLFwiLi9taWNyb3BvbGFyXCI6ODE5LFwiLi91bmRvX21hbmFnZXJcIjo4MjEsZDM6MTU1fV0sODIxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQsZT1bXSxyPS0xLG49ITE7ZnVuY3Rpb24gaSh0LGUpe3JldHVybiB0PyhuPSEwLHRbZV0oKSxuPSExLHRoaXMpOnRoaXN9cmV0dXJue2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gbj90aGlzOihlLnNwbGljZShyKzEsZS5sZW5ndGgtciksZS5wdXNoKHQpLHI9ZS5sZW5ndGgtMSx0aGlzKX0sc2V0Q2FsbGJhY2s6ZnVuY3Rpb24oZSl7dD1lfSx1bmRvOmZ1bmN0aW9uKCl7dmFyIG49ZVtyXTtyZXR1cm4gbj8oaShuLFwidW5kb1wiKSxyLT0xLHQmJnQobi51bmRvKSx0aGlzKTp0aGlzfSxyZWRvOmZ1bmN0aW9uKCl7dmFyIG49ZVtyKzFdO3JldHVybiBuPyhpKG4sXCJyZWRvXCIpLHIrPTEsdCYmdChuLnJlZG8pLHRoaXMpOnRoaXN9LGNsZWFyOmZ1bmN0aW9uKCl7ZT1bXSxyPS0xfSxoYXNVbmRvOmZ1bmN0aW9uKCl7cmV0dXJuLTEhPT1yfSxoYXNSZWRvOmZ1bmN0aW9uKCl7cmV0dXJuIHI8ZS5sZW5ndGgtMX0sZ2V0Q29tbWFuZHM6ZnVuY3Rpb24oKXtyZXR1cm4gZX0sZ2V0UHJldmlvdXNDb21tYW5kOmZ1bmN0aW9uKCl7cmV0dXJuIGVbci0xXX0sZ2V0SW5kZXg6ZnVuY3Rpb24oKXtyZXR1cm4gcn19fX0se31dLDgyMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJ0aW55Y29sb3IyXCIpLGE9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLG89dChcIi4uLy4uL2xpYlwiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGw9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxjPXQoXCIuLi9wbG90c1wiKSx1PXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxoPXQoXCIuLi9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnRcIiksZj10KFwiLi9zZXRfY29udmVydFwiKSxwPXQoXCIuLi9jYXJ0ZXNpYW4vYXV0b3JhbmdlXCIpLmRvQXV0b1JhbmdlLGQ9dChcIi4uL2NhcnRlc2lhbi9kcmFnYm94XCIpLGc9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnRcIiksdj10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxtPXQoXCIuLi8uLi9jb21wb25lbnRzL3RpdGxlc1wiKSx5PXQoXCIuLi9jYXJ0ZXNpYW4vc2VsZWN0XCIpLnByZXBTZWxlY3QseD10KFwiLi4vY2FydGVzaWFuL3NlbGVjdFwiKS5zZWxlY3RPbkNsaWNrLGI9dChcIi4uL2NhcnRlc2lhbi9zZWxlY3RcIikuY2xlYXJTZWxlY3QsXz10KFwiLi4vLi4vbGliL3NldGN1cnNvclwiKSx3PXQoXCIuLi8uLi9saWIvY2xlYXJfZ2xfY2FudmFzZXNcIiksaz10KFwiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXNcIikucmVkcmF3UmVnbFRyYWNlcyxBPXQoXCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCIpLk1JRF9TSElGVCxUPXQoXCIuL2NvbnN0YW50c1wiKSxNPXQoXCIuL2hlbHBlcnNcIiksUz1vLl8sRT1vLm1vZCxDPW8uZGVnMnJhZCxMPW8ucmFkMmRlZztmdW5jdGlvbiB6KHQsZSl7dGhpcy5pZD1lLHRoaXMuZ2Q9dCx0aGlzLl9oYXNDbGlwT25BeGlzRmFsc2U9bnVsbCx0aGlzLnZhbmdsZXM9bnVsbCx0aGlzLnJhZGlhbEF4aXNBbmdsZT1udWxsLHRoaXMudHJhY2VIYXNoPXt9LHRoaXMubGF5ZXJzPXt9LHRoaXMuY2xpcFBhdGhzPXt9LHRoaXMuY2xpcElkcz17fSx0aGlzLnZpZXdJbml0aWFsPXt9O3ZhciByPXQuX2Z1bGxMYXlvdXQsbj1cImNsaXBcIityLl91aWQrZTt0aGlzLmNsaXBJZHMuZm9yVHJhY2VzPW4rXCItZm9yLXRyYWNlc1wiLHRoaXMuY2xpcFBhdGhzLmZvclRyYWNlcz1yLl9jbGlwcy5hcHBlbmQoXCJjbGlwUGF0aFwiKS5hdHRyKFwiaWRcIix0aGlzLmNsaXBJZHMuZm9yVHJhY2VzKSx0aGlzLmNsaXBQYXRocy5mb3JUcmFjZXMuYXBwZW5kKFwicGF0aFwiKSx0aGlzLmZyYW1ld29yaz1yLl9wb2xhcmxheWVyLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsZSksdGhpcy5yYWRpYWxUaWNrTGF5b3V0PW51bGwsdGhpcy5hbmd1bGFyVGlja0xheW91dD1udWxsfXZhciBPPXoucHJvdG90eXBlO2Z1bmN0aW9uIEkodCl7dmFyIGU9dC50aWNrcytTdHJpbmcodC50aWNrbGVuKStTdHJpbmcodC5zaG93dGlja2xhYmVscyk7cmV0dXJuXCJzaWRlXCJpbiB0JiYoZSs9dC5zaWRlKSxlfWZ1bmN0aW9uIEQodCxlKXtyZXR1cm4gZVtvLmZpbmRJbmRleE9mTWluKGUsZnVuY3Rpb24oZSl7cmV0dXJuIG8uYW5nbGVEaXN0KHQsZSl9KV19ZnVuY3Rpb24gUCh0LGUscil7cmV0dXJuIGU/KHQuYXR0cihcImRpc3BsYXlcIixudWxsKSx0LmF0dHIocikpOnQmJnQuYXR0cihcImRpc3BsYXlcIixcIm5vbmVcIiksdH1mdW5jdGlvbiBSKHQsZSl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrdCtcIixcIitlK1wiKVwifWZ1bmN0aW9uIEYodCl7cmV0dXJuXCJyb3RhdGUoXCIrdCtcIilcIn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IHoodCxlKX0sTy5wbG90PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVt0aGlzLmlkXTt0aGlzLl9oYXNDbGlwT25BeGlzRmFsc2U9ITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe2lmKCExPT09dFtuXVswXS50cmFjZS5jbGlwb25heGlzKXt0aGlzLl9oYXNDbGlwT25BeGlzRmFsc2U9ITA7YnJlYWt9fXRoaXMudXBkYXRlTGF5ZXJzKGUsciksdGhpcy51cGRhdGVMYXlvdXQoZSxyKSxjLmdlbmVyYWxVcGRhdGVQZXJUcmFjZU1vZHVsZSh0aGlzLmdkLHRoaXMsdCxyKSx0aGlzLnVwZGF0ZUZ4KGUscil9LE8udXBkYXRlTGF5ZXJzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sYXllcnMsaT1lLnJhZGlhbGF4aXMsYT1lLmFuZ3VsYXJheGlzLG89VC5sYXllck5hbWVzLHM9by5pbmRleE9mKFwiZnJvbnRwbG90XCIpLGw9by5zbGljZSgwLHMpLGM9XCJiZWxvdyB0cmFjZXNcIj09PWEubGF5ZXIsdT1cImJlbG93IHRyYWNlc1wiPT09aS5sYXllcjtjJiZsLnB1c2goXCJhbmd1bGFyLWxpbmVcIiksdSYmbC5wdXNoKFwicmFkaWFsLWxpbmVcIiksYyYmbC5wdXNoKFwiYW5ndWxhci1heGlzXCIpLHUmJmwucHVzaChcInJhZGlhbC1heGlzXCIpLGwucHVzaChcImZyb250cGxvdFwiKSxjfHxsLnB1c2goXCJhbmd1bGFyLWxpbmVcIiksdXx8bC5wdXNoKFwicmFkaWFsLWxpbmVcIiksY3x8bC5wdXNoKFwiYW5ndWxhci1heGlzXCIpLHV8fGwucHVzaChcInJhZGlhbC1heGlzXCIpO3ZhciBoPXRoaXMuZnJhbWV3b3JrLnNlbGVjdEFsbChcIi5wb2xhcnN1YmxheWVyXCIpLmRhdGEobCxTdHJpbmcpO2guZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLGZ1bmN0aW9uKHQpe3JldHVyblwicG9sYXJzdWJsYXllciBcIit0fSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1yW3RdPW4uc2VsZWN0KHRoaXMpO3N3aXRjaCh0KXtjYXNlXCJmcm9udHBsb3RcIjplLmFwcGVuZChcImdcIikuY2xhc3NlZChcImJhcmxheWVyXCIsITApLGUuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwic2NhdHRlcmxheWVyXCIsITApO2JyZWFrO2Nhc2VcImJhY2twbG90XCI6ZS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJtYXBsYXllclwiLCEwKTticmVhaztjYXNlXCJwbG90YmdcIjpyLmJnPWUuYXBwZW5kKFwicGF0aFwiKTticmVhaztjYXNlXCJyYWRpYWwtZ3JpZFwiOmNhc2VcImFuZ3VsYXItZ3JpZFwiOmUuc3R5bGUoXCJmaWxsXCIsXCJub25lXCIpO2JyZWFrO2Nhc2VcInJhZGlhbC1saW5lXCI6ZS5hcHBlbmQoXCJsaW5lXCIpLnN0eWxlKFwiZmlsbFwiLFwibm9uZVwiKTticmVhaztjYXNlXCJhbmd1bGFyLWxpbmVcIjplLmFwcGVuZChcInBhdGhcIikuc3R5bGUoXCJmaWxsXCIsXCJub25lXCIpfX0pLGgub3JkZXIoKX0sTy51cGRhdGVMYXlvdXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxheWVycyxuPXQuX3NpemUsaT1lLnJhZGlhbGF4aXMsYT1lLmFuZ3VsYXJheGlzLG89ZS5kb21haW4ueCxjPWUuZG9tYWluLnk7dGhpcy54T2Zmc2V0PW4ubCtuLncqb1swXSx0aGlzLnlPZmZzZXQ9bi50K24uaCooMS1jWzFdKTt2YXIgdT10aGlzLnhMZW5ndGg9bi53KihvWzFdLW9bMF0pLGg9dGhpcy55TGVuZ3RoPW4uaCooY1sxXS1jWzBdKSxmPWUuc2VjdG9yO3RoaXMuc2VjdG9ySW5SYWQ9Zi5tYXAoQyk7dmFyIHAsZCxnLHYsbSx5PXRoaXMuc2VjdG9yQkJveD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhPXRbMF0sbz10WzFdLWEscz1FKGEsMzYwKSxsPXMrbyxjPU1hdGguY29zKEMocykpLHU9TWF0aC5zaW4oQyhzKSksaD1NYXRoLmNvcyhDKGwpKSxmPU1hdGguc2luKEMobCkpO2k9czw9OTAmJmw+PTkwfHxzPjkwJiZsPj00NTA/MTp1PD0wJiZmPD0wPzA6TWF0aC5tYXgodSxmKTtlPXM8PTE4MCYmbD49MTgwfHxzPjE4MCYmbD49NTQwPy0xOmM+PTAmJmg+PTA/MDpNYXRoLm1pbihjLGgpO3I9czw9MjcwJiZsPj0yNzB8fHM+MjcwJiZsPj02MzA/LTE6dT49MCYmZj49MD8wOk1hdGgubWluKHUsZik7bj1sPj0zNjA/MTpjPD0wJiZoPD0wPzA6TWF0aC5tYXgoYyxoKTtyZXR1cm5bZSxyLG4saV19KGYpLHg9eVsyXS15WzBdLGI9eVszXS15WzFdLF89aC91LHc9TWF0aC5hYnMoYi94KTtfPnc/KHA9dSxtPShoLShkPXUqdykpL24uaC8yLGc9W29bMF0sb1sxXV0sdj1bY1swXSttLGNbMV0tbV0pOihkPWgsbT0odS0ocD1oL3cpKS9uLncvMixnPVtvWzBdK20sb1sxXS1tXSx2PVtjWzBdLGNbMV1dKSx0aGlzLnhMZW5ndGgyPXAsdGhpcy55TGVuZ3RoMj1kLHRoaXMueERvbWFpbjI9Zyx0aGlzLnlEb21haW4yPXY7dmFyIGs9dGhpcy54T2Zmc2V0Mj1uLmwrbi53KmdbMF0sQT10aGlzLnlPZmZzZXQyPW4udCtuLmgqKDEtdlsxXSksVD10aGlzLnJhZGl1cz1wL3gsTT10aGlzLmlubmVyUmFkaXVzPWUuaG9sZSpULFM9dGhpcy5jeD1rLVQqeVswXSxMPXRoaXMuY3k9QStUKnlbM10sej10aGlzLmN4eD1TLWssTz10aGlzLmN5eT1MLUE7dGhpcy5yYWRpYWxBeGlzPXRoaXMubW9ja0F4aXModCxlLGkse19pZDpcInhcIixzaWRlOntjb3VudGVyY2xvY2t3aXNlOlwidG9wXCIsY2xvY2t3aXNlOlwiYm90dG9tXCJ9W2kuc2lkZV0sZG9tYWluOltNL24udyxUL24ud119KSx0aGlzLmFuZ3VsYXJBeGlzPXRoaXMubW9ja0F4aXModCxlLGEse3NpZGU6XCJyaWdodFwiLGRvbWFpbjpbMCxNYXRoLlBJXSxhdXRvcmFuZ2U6ITF9KSx0aGlzLmRvQXV0b1JhbmdlKHQsZSksdGhpcy51cGRhdGVBbmd1bGFyQXhpcyh0LGUpLHRoaXMudXBkYXRlUmFkaWFsQXhpcyh0LGUpLHRoaXMudXBkYXRlUmFkaWFsQXhpc1RpdGxlKHQsZSksdGhpcy54YXhpcz10aGlzLm1vY2tDYXJ0ZXNpYW5BeGlzKHQsZSx7X2lkOlwieFwiLGRvbWFpbjpnfSksdGhpcy55YXhpcz10aGlzLm1vY2tDYXJ0ZXNpYW5BeGlzKHQsZSx7X2lkOlwieVwiLGRvbWFpbjp2fSk7dmFyIEk9dGhpcy5wYXRoU3VicGxvdCgpO3RoaXMuY2xpcFBhdGhzLmZvclRyYWNlcy5zZWxlY3QoXCJwYXRoXCIpLmF0dHIoXCJkXCIsSSkuYXR0cihcInRyYW5zZm9ybVwiLFIoeixPKSksci5mcm9udHBsb3QuYXR0cihcInRyYW5zZm9ybVwiLFIoayxBKSkuY2FsbChsLnNldENsaXBVcmwsdGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlP251bGw6dGhpcy5jbGlwSWRzLmZvclRyYWNlcyx0aGlzLmdkKSxyLmJnLmF0dHIoXCJkXCIsSSkuYXR0cihcInRyYW5zZm9ybVwiLFIoUyxMKSkuY2FsbChzLmZpbGwsZS5iZ2NvbG9yKX0sTy5tb2NrQXhpcz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1vLmV4dGVuZEZsYXQoe2FuY2hvcjpcImZyZWVcIixwb3NpdGlvbjowfSxyLG4pO3JldHVybiBmKGksZSx0KSxpfSxPLm1vY2tDYXJ0ZXNpYW5BeGlzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLGk9ci5faWQsYT1vLmV4dGVuZEZsYXQoe3R5cGU6XCJsaW5lYXJcIn0scik7aChhLHQpO3ZhciBzPXt4OlswLDJdLHk6WzEsM119O3JldHVybiBhLnNldFJhbmdlPWZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWN0b3JCQm94LHI9c1tpXSxvPW4ucmFkaWFsQXhpcy5fcmwsbD0ob1sxXS1vWzBdKS8oMS1lLmhvbGUpO2EucmFuZ2U9W3RbclswXV0qbCx0W3JbMV1dKmxdfSxhLmlzUHRXaXRoaW5SYW5nZT1cInhcIj09PWk/ZnVuY3Rpb24odCl7cmV0dXJuIG4uaXNQdEluc2lkZSh0KX06ZnVuY3Rpb24oKXtyZXR1cm4hMH0sYS5zZXRSYW5nZSgpLGEuc2V0U2NhbGUoKSxhfSxPLmRvQXV0b1JhbmdlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5nZCxuPXRoaXMucmFkaWFsQXhpcyxpPWUucmFkaWFsYXhpcztuLnNldFNjYWxlKCkscChyLG4pO3ZhciBhPW4ucmFuZ2U7aS5yYW5nZT1hLnNsaWNlKCksaS5faW5wdXQucmFuZ2U9YS5zbGljZSgpLG4uX3JsPVtuLnIybChhWzBdLG51bGwsXCJncmVnb3JpYW5cIiksbi5yMmwoYVsxXSxudWxsLFwiZ3JlZ29yaWFuXCIpXX0sTy51cGRhdGVSYWRpYWxBeGlzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuZ2QsaT1yLmxheWVycyxhPXIucmFkaXVzLGw9ci5pbm5lclJhZGl1cyxjPXIuY3gsaD1yLmN5LGY9ZS5yYWRpYWxheGlzLHA9RShlLnNlY3RvclswXSwzNjApLGQ9ci5yYWRpYWxBeGlzLGc9bDxhO3IuZmlsbFZpZXdJbml0aWFsS2V5KFwicmFkaWFsYXhpcy5hbmdsZVwiLGYuYW5nbGUpLHIuZmlsbFZpZXdJbml0aWFsS2V5KFwicmFkaWFsYXhpcy5yYW5nZVwiLGQucmFuZ2Uuc2xpY2UoKSksZC5zZXRHZW9tZXRyeSgpLFwiYXV0b1wiPT09ZC50aWNrYW5nbGUmJnA+OTAmJnA8PTI3MCYmKGQudGlja2FuZ2xlPTE4MCk7dmFyIHY9ZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrKGQubDJwKHQueCkrbCkrXCIsMClcIn0sbT1JKGYpO2lmKHIucmFkaWFsVGlja0xheW91dCE9PW0mJihpW1wicmFkaWFsLWF4aXNcIl0uc2VsZWN0QWxsKFwiLnh0aWNrXCIpLnJlbW92ZSgpLHIucmFkaWFsVGlja0xheW91dD1tKSxnKXtkLnNldFNjYWxlKCk7dmFyIHk9dS5jYWxjVGlja3MoZCkseD11LmNsaXBFbmRzKGQseSksYj11LmdldFRpY2tTaWducyhkKVsyXTt1LmRyYXdUaWNrcyhuLGQse3ZhbHM6eSxsYXllcjppW1wicmFkaWFsLWF4aXNcIl0scGF0aDp1Lm1ha2VUaWNrUGF0aChkLDAsYiksdHJhbnNGbjp2LGNyaXNwOiExfSksdS5kcmF3R3JpZChuLGQse3ZhbHM6eCxsYXllcjppW1wicmFkaWFsLWdyaWRcIl0scGF0aDpmdW5jdGlvbih0KXtyZXR1cm4gci5wYXRoQXJjKGQucjJwKHQueCkrbCl9LHRyYW5zRm46by5ub29wLGNyaXNwOiExfSksdS5kcmF3TGFiZWxzKG4sZCx7dmFsczp5LGxheWVyOmlbXCJyYWRpYWwtYXhpc1wiXSx0cmFuc0ZuOnYsbGFiZWxGbnM6dS5tYWtlTGFiZWxGbnMoZCwwKX0pfXZhciBfPXIucmFkaWFsQXhpc0FuZ2xlPXIudmFuZ2xlcz9MKEQoQyhmLmFuZ2xlKSxyLnZhbmdsZXMpKTpmLmFuZ2xlLHc9UihjLGgpLGs9dytGKC1fKTtQKGlbXCJyYWRpYWwtYXhpc1wiXSxnJiYoZi5zaG93dGlja2xhYmVsc3x8Zi50aWNrcykse3RyYW5zZm9ybTprfSksUChpW1wicmFkaWFsLWdyaWRcIl0sZyYmZi5zaG93Z3JpZCx7dHJhbnNmb3JtOnd9KSxQKGlbXCJyYWRpYWwtbGluZVwiXS5zZWxlY3QoXCJsaW5lXCIpLGcmJmYuc2hvd2xpbmUse3gxOmwseTE6MCx4MjphLHkyOjAsdHJhbnNmb3JtOmt9KS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsZi5saW5ld2lkdGgpLmNhbGwocy5zdHJva2UsZi5saW5lY29sb3IpfSxPLnVwZGF0ZVJhZGlhbEF4aXNUaXRsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5nZCxpPXRoaXMucmFkaXVzLGE9dGhpcy5jeCxvPXRoaXMuY3kscz1lLnJhZGlhbGF4aXMsYz10aGlzLmlkK1widGl0bGVcIix1PXZvaWQgMCE9PXI/cjp0aGlzLnJhZGlhbEF4aXNBbmdsZSxoPUModSksZj1NYXRoLmNvcyhoKSxwPU1hdGguc2luKGgpLGQ9MDtpZihzLnRpdGxlKXt2YXIgZz1sLmJCb3godGhpcy5sYXllcnNbXCJyYWRpYWwtYXhpc1wiXS5ub2RlKCkpLmhlaWdodCx2PXMudGl0bGUuZm9udC5zaXplO2Q9XCJjb3VudGVyY2xvY2t3aXNlXCI9PT1zLnNpZGU/LWctLjQqdjpnKy44KnZ9dGhpcy5sYXllcnNbXCJyYWRpYWwtYXhpcy10aXRsZVwiXT1tLmRyYXcobixjLHtwcm9wQ29udGFpbmVyOnMscHJvcE5hbWU6dGhpcy5pZCtcIi5yYWRpYWxheGlzLnRpdGxlXCIscGxhY2Vob2xkZXI6UyhuLFwiQ2xpY2sgdG8gZW50ZXIgcmFkaWFsIGF4aXMgdGl0bGVcIiksYXR0cmlidXRlczp7eDphK2kvMipmK2QqcCx5Om8taS8yKnArZCpmLFwidGV4dC1hbmNob3JcIjpcIm1pZGRsZVwifSx0cmFuc2Zvcm06e3JvdGF0ZTotdX19KX0sTy51cGRhdGVBbmd1bGFyQXhpcz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj1yLmdkLGk9ci5sYXllcnMsYT1yLnJhZGl1cyxsPXIuaW5uZXJSYWRpdXMsYz1yLmN4LGg9ci5jeSxmPWUuYW5ndWxhcmF4aXMscD1yLmFuZ3VsYXJBeGlzO3IuZmlsbFZpZXdJbml0aWFsS2V5KFwiYW5ndWxhcmF4aXMucm90YXRpb25cIixmLnJvdGF0aW9uKSxwLnNldEdlb21ldHJ5KCkscC5zZXRTY2FsZSgpO3ZhciBkPWZ1bmN0aW9uKHQpe3JldHVybiBwLnQyZyh0LngpfTtcImxpbmVhclwiPT09cC50eXBlJiZcInJhZGlhbnNcIj09PXAudGhldGF1bml0JiYocC50aWNrMD1MKHAudGljazApLHAuZHRpY2s9TChwLmR0aWNrKSk7dmFyIGc9ZnVuY3Rpb24odCl7cmV0dXJuIFIoYythKk1hdGguY29zKHQpLGgtYSpNYXRoLnNpbih0KSl9LHY9dS5tYWtlTGFiZWxGbnMocCwwKS5sYWJlbFN0YW5kb2ZmLG09e3hGbjpmdW5jdGlvbih0KXt2YXIgZT1kKHQpO3JldHVybiBNYXRoLmNvcyhlKSp2fSx5Rm46ZnVuY3Rpb24odCl7dmFyIGU9ZCh0KSxyPU1hdGguc2luKGUpPjA/LjI6MTtyZXR1cm4tTWF0aC5zaW4oZSkqKHYrdC5mb250U2l6ZSpyKStNYXRoLmFicyhNYXRoLmNvcyhlKSkqKHQuZm9udFNpemUqQSl9LGFuY2hvckZuOmZ1bmN0aW9uKHQpe3ZhciBlPWQodCkscj1NYXRoLmNvcyhlKTtyZXR1cm4gTWF0aC5hYnMocik8LjE/XCJtaWRkbGVcIjpyPjA/XCJzdGFydFwiOlwiZW5kXCJ9LGhlaWdodEZuOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1kKHQpO3JldHVybi0uNSooMStNYXRoLnNpbihuKSkqcn19LHk9SShmKTtyLmFuZ3VsYXJUaWNrTGF5b3V0IT09eSYmKGlbXCJhbmd1bGFyLWF4aXNcIl0uc2VsZWN0QWxsKFwiLlwiK3AuX2lkK1widGlja1wiKS5yZW1vdmUoKSxyLmFuZ3VsYXJUaWNrTGF5b3V0PXkpO3ZhciB4LGI9dS5jYWxjVGlja3MocCk7aWYoXCJsaW5lYXJcIj09PWUuZ3JpZHNoYXBlPyh4PWIubWFwKGQpLG8uYW5nbGVEZWx0YSh4WzBdLHhbMV0pPDAmJih4PXguc2xpY2UoKS5yZXZlcnNlKCkpKTp4PW51bGwsci52YW5nbGVzPXgsXCJjYXRlZ29yeVwiPT09cC50eXBlJiYoYj1iLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gby5pc0FuZ2xlSW5zaWRlU2VjdG9yKGQodCksci5zZWN0b3JJblJhZCl9KSkscC52aXNpYmxlKXt2YXIgXz1cImluc2lkZVwiPT09cC50aWNrcz8tMToxLHc9KHAubGluZXdpZHRofHwxKS8yO3UuZHJhd1RpY2tzKG4scCx7dmFsczpiLGxheWVyOmlbXCJhbmd1bGFyLWF4aXNcIl0scGF0aDpcIk1cIitfKncrXCIsMGhcIitfKnAudGlja2xlbix0cmFuc0ZuOmZ1bmN0aW9uKHQpe3ZhciBlPWQodCk7cmV0dXJuIGcoZSkrRigtTChlKSl9LGNyaXNwOiExfSksdS5kcmF3R3JpZChuLHAse3ZhbHM6YixsYXllcjppW1wiYW5ndWxhci1ncmlkXCJdLHBhdGg6ZnVuY3Rpb24odCl7dmFyIGU9ZCh0KSxyPU1hdGguY29zKGUpLG49TWF0aC5zaW4oZSk7cmV0dXJuXCJNXCIrW2MrbCpyLGgtbCpuXStcIkxcIitbYythKnIsaC1hKm5dfSx0cmFuc0ZuOm8ubm9vcCxjcmlzcDohMX0pLHUuZHJhd0xhYmVscyhuLHAse3ZhbHM6YixsYXllcjppW1wiYW5ndWxhci1heGlzXCJdLHJlcG9zaXRpb25PblVwZGF0ZTohMCx0cmFuc0ZuOmZ1bmN0aW9uKHQpe3JldHVybiBnKGQodCkpfSxsYWJlbEZuczptfSl9UChpW1wiYW5ndWxhci1saW5lXCJdLnNlbGVjdChcInBhdGhcIiksZi5zaG93bGluZSx7ZDpyLnBhdGhTdWJwbG90KCksdHJhbnNmb3JtOlIoYyxoKX0pLmF0dHIoXCJzdHJva2Utd2lkdGhcIixmLmxpbmV3aWR0aCkuY2FsbChzLnN0cm9rZSxmLmxpbmVjb2xvcil9LE8udXBkYXRlRng9ZnVuY3Rpb24odCxlKXt0aGlzLmdkLl9jb250ZXh0LnN0YXRpY1Bsb3R8fCh0aGlzLnVwZGF0ZUFuZ3VsYXJEcmFnKHQpLHRoaXMudXBkYXRlUmFkaWFsRHJhZyh0LGUsMCksdGhpcy51cGRhdGVSYWRpYWxEcmFnKHQsZSwxKSx0aGlzLnVwZGF0ZU1haW5EcmFnKHQpKX0sTy51cGRhdGVNYWluRHJhZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5nZCxvPWUubGF5ZXJzLHM9dC5fem9vbWxheWVyLGw9VC5NSU5aT09NLGM9VC5PRkZFREdFLHU9ZS5yYWRpdXMsaD1lLmlubmVyUmFkaXVzLGY9ZS5jeCxwPWUuY3ksbT1lLmN4eCxfPWUuY3l5LHc9ZS5zZWN0b3JJblJhZCxrPWUudmFuZ2xlcyxBPWUucmFkaWFsQXhpcyxTPU0uY2xhbXBUaW55LEU9TS5maW5kWFlhdExlbmd0aCxDPU0uZmluZEVuY2xvc2luZ1ZlcnRleEFuZ2xlcyxMPVQuY29ybmVySGFsZldpZHRoLHo9VC5jb3JuZXJMZW4vMixPPWQubWFrZURyYWdnZXIobyxcInBhdGhcIixcIm1haW5kcmFnXCIsXCJjcm9zc2hhaXJcIik7bi5zZWxlY3QoTykuYXR0cihcImRcIixlLnBhdGhTdWJwbG90KCkpLmF0dHIoXCJ0cmFuc2Zvcm1cIixSKGYscCkpO3ZhciBJLEQsUCxGLEIsTixqLFYsVSxxPXtlbGVtZW50Ok8sZ2Q6cixzdWJwbG90OmUuaWQscGxvdGluZm86e2lkOmUuaWQseGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzfSx4YXhlczpbZS54YXhpc10seWF4ZXM6W2UueWF4aXNdfTtmdW5jdGlvbiBIKHQsZSl7cmV0dXJuIE1hdGguc3FydCh0KnQrZSplKX1mdW5jdGlvbiBHKHQsZSl7cmV0dXJuIEgodC1tLGUtXyl9ZnVuY3Rpb24gWSh0LGUpe3JldHVybiBNYXRoLmF0YW4yKF8tZSx0LW0pfWZ1bmN0aW9uIFcodCxlKXtyZXR1cm5bdCpNYXRoLmNvcyhlKSx0Kk1hdGguc2luKC1lKV19ZnVuY3Rpb24gWCh0LHIpe2lmKDA9PT10KXJldHVybiBlLnBhdGhTZWN0b3IoMipMKTt2YXIgbj16L3QsaT1yLW4sYT1yK24sbz1NYXRoLm1heCgwLE1hdGgubWluKHQsdSkpLHM9by1MLGw9bytMO3JldHVyblwiTVwiK1cocyxpKStcIkFcIitbcyxzXStcIiAwLDAsMCBcIitXKHMsYSkrXCJMXCIrVyhsLGEpK1wiQVwiK1tsLGxdK1wiIDAsMCwxIFwiK1cobCxpKStcIlpcIn1mdW5jdGlvbiBaKHQscixuKXtpZigwPT09dClyZXR1cm4gZS5wYXRoU2VjdG9yKDIqTCk7dmFyIGksYSxvPVcodCxyKSxzPVcodCxuKSxsPVMoKG9bMF0rc1swXSkvMiksYz1TKChvWzFdK3NbMV0pLzIpO2lmKGwmJmMpe3ZhciB1PWMvbCxoPS0xL3UsZj1FKEwsdSxsLGMpO2k9RSh6LGgsZlswXVswXSxmWzBdWzFdKSxhPUUoeixoLGZbMV1bMF0sZlsxXVsxXSl9ZWxzZXt2YXIgcCxkO2M/KHA9eixkPUwpOihwPUwsZD16KSxpPVtbbC1wLGMtZF0sW2wrcCxjLWRdXSxhPVtbbC1wLGMrZF0sW2wrcCxjK2RdXX1yZXR1cm5cIk1cIitpLmpvaW4oXCJMXCIpK1wiTFwiK2EucmV2ZXJzZSgpLmpvaW4oXCJMXCIpK1wiWlwifWZ1bmN0aW9uICQodCxlKXtyZXR1cm4gZT1NYXRoLm1heChNYXRoLm1pbihlLHUpLGgpLHQ8Yz90PTA6dS10PGM/dD11OmU8Yz9lPTA6dS1lPGMmJihlPXUpLE1hdGguYWJzKGUtdCk+bD8odDxlPyhQPXQsRj1lKTooUD1lLEY9dCksITApOihQPW51bGwsRj1udWxsLCExKX1mdW5jdGlvbiBKKHQsZSl7dD10fHxCLGU9ZXx8XCJNMCwwWlwiLFYuYXR0cihcImRcIix0KSxVLmF0dHIoXCJkXCIsZSksZC50cmFuc2l0aW9uWm9vbWJveChWLFUsTixqKSxOPSEwfWZ1bmN0aW9uIEsodCxyKXt2YXIgbixpLGE9SSt0LG89RCtyLHM9RyhJLEQpLGw9TWF0aC5taW4oRyhhLG8pLHUpLGM9WShJLEQpOyQocyxsKSYmKG49QitlLnBhdGhTZWN0b3IoRiksUCYmKG4rPWUucGF0aFNlY3RvcihQKSksaT1YKFAsYykrWChGLGMpKSxKKG4saSl9ZnVuY3Rpb24gUSh0LGUscixuKXt2YXIgaT1NLmZpbmRJbnRlcnNlY3Rpb25YWShyLG4scixbdC1tLF8tZV0pO3JldHVybiBIKGlbMF0saVsxXSl9ZnVuY3Rpb24gdHQodCxyKXt2YXIgbixpLGE9SSt0LG89RCtyLHM9WShJLEQpLGw9WShhLG8pLGM9QyhzLGspLGg9QyhsLGspOyQoUShJLEQsY1swXSxjWzFdKSxNYXRoLm1pbihRKGEsbyxoWzBdLGhbMV0pLHUpKSYmKG49QitlLnBhdGhTZWN0b3IoRiksUCYmKG4rPWUucGF0aFNlY3RvcihQKSksaT1bWihQLGNbMF0sY1sxXSksWihGLGNbMF0sY1sxXSldLmpvaW4oXCIgXCIpKSxKKG4saSl9ZnVuY3Rpb24gZXQoKXtpZihkLnJlbW92ZVpvb21ib3gociksbnVsbCE9PVAmJm51bGwhPT1GKXtkLnNob3dEb3VibGVDbGlja05vdGlmaWVyKHIpO3ZhciB0PUEuX3JsLG49KHRbMV0tdFswXSkvKDEtaC91KS91LGk9W3RbMF0rKFAtaCkqbix0WzBdKyhGLWgpKm5dO2EuY2FsbChcIl9ndWlSZWxheW91dFwiLHIsZS5pZCtcIi5yYWRpYWxheGlzLnJhbmdlXCIsaSl9fWZ1bmN0aW9uIHJ0KHQsbil7dmFyIGk9ci5fZnVsbExheW91dC5jbGlja21vZGU7aWYoZC5yZW1vdmVab29tYm94KHIpLDI9PT10KXt2YXIgbz17fTtmb3IodmFyIHMgaW4gZS52aWV3SW5pdGlhbClvW2UuaWQrXCIuXCIrc109ZS52aWV3SW5pdGlhbFtzXTtyLmVtaXQoXCJwbG90bHlfZG91YmxlY2xpY2tcIixudWxsKSxhLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIixyLG8pfWkuaW5kZXhPZihcInNlbGVjdFwiKT4tMSYmMT09PXQmJngobixyLFtlLnhheGlzXSxbZS55YXhpc10sZS5pZCxxKSxpLmluZGV4T2YoXCJldmVudFwiKT4tMSYmdi5jbGljayhyLG4sZS5pZCl9cS5wcmVwRm49ZnVuY3Rpb24odCxuLGEpe3ZhciBvPXIuX2Z1bGxMYXlvdXQuZHJhZ21vZGUsbD1PLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKEk9bi1sLmxlZnQsRD1hLWwudG9wLGspe3ZhciBjPU0uZmluZFBvbHlnb25PZmZzZXQodSx3WzBdLHdbMV0sayk7SSs9bStjWzBdLEQrPV8rY1sxXX1zd2l0Y2gobyl7Y2FzZVwiem9vbVwiOnEubW92ZUZuPWs/dHQ6SyxxLmNsaWNrRm49cnQscS5kb25lRm49ZXQsZnVuY3Rpb24oKXtQPW51bGwsRj1udWxsLEI9ZS5wYXRoU3VicGxvdCgpLE49ITE7dmFyIHQ9ci5fZnVsbExheW91dFtlLmlkXTtqPWkodC5iZ2NvbG9yKS5nZXRMdW1pbmFuY2UoKSwoVj1kLm1ha2Vab29tYm94KHMsaixmLHAsQikpLmF0dHIoXCJmaWxsLXJ1bGVcIixcImV2ZW5vZGRcIiksVT1kLm1ha2VDb3JuZXJzKHMsZixwKSxiKHIpfSgpO2JyZWFrO2Nhc2VcInNlbGVjdFwiOmNhc2VcImxhc3NvXCI6eSh0LG4sYSxxLG8pfX0sTy5vbm1vdXNlbW92ZT1mdW5jdGlvbih0KXt2LmhvdmVyKHIsdCxlLmlkKSxyLl9mdWxsTGF5b3V0Ll9sYXN0aG92ZXI9TyxyLl9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9ZS5pZH0sTy5vbm1vdXNlb3V0PWZ1bmN0aW9uKHQpe3IuX2RyYWdnaW5nfHxnLnVuaG92ZXIocix0KX0sZy5pbml0KHEpfSxPLnVwZGF0ZVJhZGlhbERyYWc9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMscz1pLmdkLGw9aS5sYXllcnMsYz1pLnJhZGl1cyx1PWkuaW5uZXJSYWRpdXMsaD1pLmN4LGY9aS5jeSxwPWkucmFkaWFsQXhpcyx2PVQucmFkaWFsRHJhZ0JveFNpemUsbT12LzI7aWYocC52aXNpYmxlKXt2YXIgeSx4LF8sQT1DKGkucmFkaWFsQXhpc0FuZ2xlKSxNPXAuX3JsLFM9TVswXSxFPU1bMV0sej1NW3JdLE89Ljc1KihNWzFdLU1bMF0pLygxLWUuaG9sZSkvYztyPyh5PWgrKGMrbSkqTWF0aC5jb3MoQSkseD1mLShjK20pKk1hdGguc2luKEEpLF89XCJyYWRpYWxkcmFnXCIpOih5PWgrKHUtbSkqTWF0aC5jb3MoQSkseD1mLSh1LW0pKk1hdGguc2luKEEpLF89XCJyYWRpYWxkcmFnLWlubmVyXCIpO3ZhciBJLEIsTixqPWQubWFrZVJlY3REcmFnZ2VyKGwsXyxcImNyb3NzaGFpclwiLC1tLC1tLHYsdiksVj17ZWxlbWVudDpqLGdkOnN9O1Aobi5zZWxlY3QoaikscC52aXNpYmxlJiZ1PGMse3RyYW5zZm9ybTpSKHkseCl9KSxWLnByZXBGbj1mdW5jdGlvbigpe0k9bnVsbCxCPW51bGwsTj1udWxsLFYubW92ZUZuPVUsVi5kb25lRm49cSxiKHMpfSxWLmNsYW1wRm49ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5zcXJ0KHQqdCtlKmUpPFQuTUlORFJBRyYmKHQ9MCxlPTApLFt0LGVdfSxnLmluaXQoVil9ZnVuY3Rpb24gVSh0LGUpe2lmKEkpSSh0LGUpO2Vsc2V7dmFyIHI9W3QsLWVdLG49W01hdGguY29zKEEpLE1hdGguc2luKEEpXSxpPU1hdGguYWJzKG8uZG90KHIsbikvTWF0aC5zcXJ0KG8uZG90KHIscikpKTtpc05hTihpKXx8KEk9aTwuNT9IOkcpfX1mdW5jdGlvbiBxKCl7bnVsbCE9PUI/YS5jYWxsKFwiX2d1aVJlbGF5b3V0XCIscyxpLmlkK1wiLnJhZGlhbGF4aXMuYW5nbGVcIixCKTpudWxsIT09TiYmYS5jYWxsKFwiX2d1aVJlbGF5b3V0XCIscyxpLmlkK1wiLnJhZGlhbGF4aXMucmFuZ2VbXCIrcitcIl1cIixOKX1mdW5jdGlvbiBIKHQsZSl7aWYoMCE9PXIpe3ZhciBuPXkrdCxhPXgrZTtCPU1hdGguYXRhbjIoZi1hLG4taCksaS52YW5nbGVzJiYoQj1EKEIsaS52YW5nbGVzKSksQj1MKEIpO3ZhciBvPVIoaCxmKStGKC1CKTtsW1wicmFkaWFsLWF4aXNcIl0uYXR0cihcInRyYW5zZm9ybVwiLG8pLGxbXCJyYWRpYWwtbGluZVwiXS5zZWxlY3QoXCJsaW5lXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIixvKTt2YXIgcz1pLmdkLl9mdWxsTGF5b3V0LGM9c1tpLmlkXTtpLnVwZGF0ZVJhZGlhbEF4aXNUaXRsZShzLGMsQil9fWZ1bmN0aW9uIEcodCxlKXt2YXIgbj1vLmRvdChbdCwtZV0sW01hdGguY29zKEEpLE1hdGguc2luKEEpXSk7aWYoTj16LU8qbixPPjA9PShyP04+UzpOPEUpKXt2YXIgbD1zLl9mdWxsTGF5b3V0LGM9bFtpLmlkXTtwLnJhbmdlW3JdPU4scC5fcmxbcl09TixpLnVwZGF0ZVJhZGlhbEF4aXMobCxjKSxpLnhheGlzLnNldFJhbmdlKCksaS54YXhpcy5zZXRTY2FsZSgpLGkueWF4aXMuc2V0UmFuZ2UoKSxpLnlheGlzLnNldFNjYWxlKCk7dmFyIHU9ITE7Zm9yKHZhciBoIGluIGkudHJhY2VIYXNoKXt2YXIgZj1pLnRyYWNlSGFzaFtoXSxkPW8uZmlsdGVyVmlzaWJsZShmKTtmWzBdWzBdLnRyYWNlLl9tb2R1bGUucGxvdChzLGksZCxjKSxhLnRyYWNlSXMoaCxcImdsXCIpJiZkLmxlbmd0aCYmKHU9ITApfXUmJih3KHMpLGsocykpfWVsc2UgTj1udWxsfX0sTy51cGRhdGVBbmd1bGFyRHJhZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5nZCxpPWUubGF5ZXJzLHM9ZS5yYWRpdXMsYz1lLmFuZ3VsYXJBeGlzLHU9ZS5jeCxoPWUuY3ksZj1lLmN4eCxwPWUuY3l5LHY9VC5hbmd1bGFyRHJhZ0JveFNpemUsbT1kLm1ha2VEcmFnZ2VyKGksXCJwYXRoXCIsXCJhbmd1bGFyZHJhZ1wiLFwibW92ZVwiKSx5PXtlbGVtZW50Om0sZ2Q6cn07ZnVuY3Rpb24geCh0LGUpe3JldHVybiBNYXRoLmF0YW4yKHArdi1lLHQtZi12KX1uLnNlbGVjdChtKS5hdHRyKFwiZFwiLGUucGF0aEFubnVsdXMocyxzK3YpKS5hdHRyKFwidHJhbnNmb3JtXCIsUih1LGgpKS5jYWxsKF8sXCJtb3ZlXCIpO3ZhciBBLE0sUyxFLEMseixPPWkuZnJvbnRwbG90LnNlbGVjdChcIi5zY2F0dGVybGF5ZXJcIikuc2VsZWN0QWxsKFwiLnRyYWNlXCIpLEk9Ty5zZWxlY3RBbGwoXCIucG9pbnRcIiksRD1PLnNlbGVjdEFsbChcIi50ZXh0cG9pbnRcIik7ZnVuY3Rpb24gUCh0LHMpe3ZhciBkPWUuZ2QuX2Z1bGxMYXlvdXQsZz1kW2UuaWRdLHY9eChBK3QsTStzKSxtPUwodi16KTtpZihFPVMrbSxpLmZyb250cGxvdC5hdHRyKFwidHJhbnNmb3JtXCIsUihlLnhPZmZzZXQyLGUueU9mZnNldDIpK0YoWy1tLGYscF0pKSxlLnZhbmdsZXMpe0M9ZS5yYWRpYWxBeGlzQW5nbGUrbTt2YXIgeT1SKHUsaCkrRigtbSksYj1SKHUsaCkrRigtQyk7aS5iZy5hdHRyKFwidHJhbnNmb3JtXCIseSksaVtcInJhZGlhbC1ncmlkXCJdLmF0dHIoXCJ0cmFuc2Zvcm1cIix5KSxpW1wicmFkaWFsLWF4aXNcIl0uYXR0cihcInRyYW5zZm9ybVwiLGIpLGlbXCJyYWRpYWwtbGluZVwiXS5zZWxlY3QoXCJsaW5lXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIixiKSxlLnVwZGF0ZVJhZGlhbEF4aXNUaXRsZShkLGcsQyl9ZWxzZSBlLmNsaXBQYXRocy5mb3JUcmFjZXMuc2VsZWN0KFwicGF0aFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsUihmLHApK0YobSkpO0kuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9bC5nZXRUcmFuc2xhdGUodCk7dC5hdHRyKFwidHJhbnNmb3JtXCIsUihlLngsZS55KStGKFttXSkpfSksRC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT10LnNlbGVjdChcInRleHRcIikscj1sLmdldFRyYW5zbGF0ZSh0KTt0LmF0dHIoXCJ0cmFuc2Zvcm1cIixGKFttLGUuYXR0cihcInhcIiksZS5hdHRyKFwieVwiKV0pK1Ioci54LHIueSkpfSksYy5yb3RhdGlvbj1vLm1vZEhhbGYoRSwzNjApLGUudXBkYXRlQW5ndWxhckF4aXMoZCxnKSxlLl9oYXNDbGlwT25BeGlzRmFsc2UmJiFvLmlzRnVsbENpcmNsZShlLnNlY3RvckluUmFkKSYmTy5jYWxsKGwuaGlkZU91dHNpZGVSYW5nZVBvaW50cyxlKTt2YXIgXz0hMTtmb3IodmFyIFQgaW4gZS50cmFjZUhhc2gpaWYoYS50cmFjZUlzKFQsXCJnbFwiKSl7dmFyIFA9ZS50cmFjZUhhc2hbVF0sQj1vLmZpbHRlclZpc2libGUoUCk7UFswXVswXS50cmFjZS5fbW9kdWxlLnBsb3QocixlLEIsZyksQi5sZW5ndGgmJihfPSEwKX1fJiYodyhyKSxrKHIpKX1mdW5jdGlvbiBCKCl7RC5zZWxlY3QoXCJ0ZXh0XCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIixudWxsKTt2YXIgdD17fTt0W2UuaWQrXCIuYW5ndWxhcmF4aXMucm90YXRpb25cIl09RSxlLnZhbmdsZXMmJih0W2UuaWQrXCIucmFkaWFsYXhpcy5hbmdsZVwiXT1DKSxhLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIixyLHQpfXkucHJlcEZuPWZ1bmN0aW9uKG4saSxhKXt2YXIgbz10W2UuaWRdO1M9by5hbmd1bGFyYXhpcy5yb3RhdGlvbjt2YXIgcz1tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO0E9aS1zLmxlZnQsTT1hLXMudG9wLHo9eChBLE0pLHkubW92ZUZuPVAseS5kb25lRm49QixiKHIpfSxlLnZhbmdsZXMmJiFvLmlzRnVsbENpcmNsZShlLnNlY3RvckluUmFkKSYmKHkucHJlcEZuPW8ubm9vcCxfKG4uc2VsZWN0KG0pLG51bGwpKSxnLmluaXQoeSl9LE8uaXNQdEluc2lkZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNlY3RvckluUmFkLHI9dGhpcy52YW5nbGVzLG49dGhpcy5hbmd1bGFyQXhpcy5jMmcodC50aGV0YSksaT10aGlzLnJhZGlhbEF4aXMsYT1pLmMybCh0LnIpLHM9aS5fcmw7cmV0dXJuKHI/TS5pc1B0SW5zaWRlUG9seWdvbjpvLmlzUHRJbnNpZGVTZWN0b3IpKGEsbixzLGUscil9LE8ucGF0aEFyYz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNlY3RvckluUmFkLHI9dGhpcy52YW5nbGVzO3JldHVybihyP00ucGF0aFBvbHlnb246by5wYXRoQXJjKSh0LGVbMF0sZVsxXSxyKX0sTy5wYXRoU2VjdG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2VjdG9ySW5SYWQscj10aGlzLnZhbmdsZXM7cmV0dXJuKHI/TS5wYXRoUG9seWdvbjpvLnBhdGhTZWN0b3IpKHQsZVswXSxlWzFdLHIpfSxPLnBhdGhBbm51bHVzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5zZWN0b3JJblJhZCxuPXRoaXMudmFuZ2xlcztyZXR1cm4obj9NLnBhdGhQb2x5Z29uQW5udWx1czpvLnBhdGhBbm51bHVzKSh0LGUsclswXSxyWzFdLG4pfSxPLnBhdGhTdWJwbG90PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5pbm5lclJhZGl1cyxlPXRoaXMucmFkaXVzO3JldHVybiB0P3RoaXMucGF0aEFubnVsdXModCxlKTp0aGlzLnBhdGhTZWN0b3IoZSl9LE8uZmlsbFZpZXdJbml0aWFsS2V5PWZ1bmN0aW9uKHQsZSl7dCBpbiB0aGlzLnZpZXdJbml0aWFsfHwodGhpcy52aWV3SW5pdGlhbFt0XT1lKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50XCI6NTk2LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzXCI6NjY2LFwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiOjY3MyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlc1wiOjY4NixcIi4uLy4uL2xpYi9zZXRjdXJzb3JcIjo3MjEsXCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lc1wiOjc0MCxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9jYXJ0ZXNpYW4vYXV0b3JhbmdlXCI6NzQ4LFwiLi4vY2FydGVzaWFuL2RyYWdib3hcIjo3NTcsXCIuLi9jYXJ0ZXNpYW4vc2VsZWN0XCI6NzY2LFwiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0XCI6NzY3LFwiLi4vcGxvdHNcIjo4MTAsXCIuL2NvbnN0YW50c1wiOjgxMSxcIi4vaGVscGVyc1wiOjgxMixcIi4vc2V0X2NvbnZlcnRcIjo4MjMsZDM6MTU1LHRpbnljb2xvcjI6NTIyfV0sODIzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnRcIiksYT1uLmRlZzJyYWQsbz1uLnJhZDJkZWc7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtzd2l0Y2goaSh0LHIpLHQuX2lkKXtjYXNlXCJ4XCI6Y2FzZVwicmFkaWFsYXhpc1wiOiFmdW5jdGlvbih0LGUpe3ZhciByPWUuX3N1YnBsb3Q7dC5zZXRHZW9tZXRyeT1mdW5jdGlvbigpe3ZhciBlPXQuX3JsWzBdLG49dC5fcmxbMV0saT1yLmlubmVyUmFkaXVzLGE9KHIucmFkaXVzLWkpLyhuLWUpLG89aS9hLHM9ZT5uP2Z1bmN0aW9uKHQpe3JldHVybiB0PD0wfTpmdW5jdGlvbih0KXtyZXR1cm4gdD49MH07dC5jMmc9ZnVuY3Rpb24ocil7dmFyIG49dC5jMmwociktZTtyZXR1cm4ocyhuKT9uOjApK299LHQuZzJjPWZ1bmN0aW9uKHIpe3JldHVybiB0LmwyYyhyK2Utbyl9LHQuZzJwPWZ1bmN0aW9uKHQpe3JldHVybiB0KmF9LHQuYzJwPWZ1bmN0aW9uKGUpe3JldHVybiB0LmcycCh0LmMyZyhlKSl9fX0odCxlKTticmVhaztjYXNlXCJhbmd1bGFyYXhpc1wiOiFmdW5jdGlvbih0LGUpe3ZhciByPXQudHlwZTtpZihcImxpbmVhclwiPT09cil7dmFyIGk9dC5kMmMscz10LmMyZDt0LmQyYz1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVyblwiZGVncmVlc1wiPT09ZT9hKHQpOnR9KGkodCksZSl9LHQuYzJkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHMoZnVuY3Rpb24odCxlKXtyZXR1cm5cImRlZ3JlZXNcIj09PWU/byh0KTp0fSh0LGUpKX19dC5tYWtlQ2FsY2RhdGE9ZnVuY3Rpb24oZSxpKXt2YXIgYSxvLHM9ZVtpXSxsPWUuX2xlbmd0aCxjPWZ1bmN0aW9uKHIpe3JldHVybiB0LmQyYyhyLGUudGhldGF1bml0KX07aWYocyl7aWYobi5pc1R5cGVkQXJyYXkocykmJlwibGluZWFyXCI9PT1yKXtpZihsPT09cy5sZW5ndGgpcmV0dXJuIHM7aWYocy5zdWJhcnJheSlyZXR1cm4gcy5zdWJhcnJheSgwLGwpfWZvcihhPW5ldyBBcnJheShsKSxvPTA7bzxsO28rKylhW29dPWMoc1tvXSl9ZWxzZXt2YXIgdT1pK1wiMFwiLGg9XCJkXCIraSxmPXUgaW4gZT9jKGVbdV0pOjAscD1lW2hdP2MoZVtoXSk6KHQucGVyaW9kfHwyKk1hdGguUEkpL2w7Zm9yKGE9bmV3IEFycmF5KGwpLG89MDtvPGw7bysrKWFbb109ZitvKnB9cmV0dXJuIGF9LHQuc2V0R2VvbWV0cnk9ZnVuY3Rpb24oKXt2YXIgaSxzLGwsYyx1PWUuc2VjdG9yLGg9dS5tYXAoYSksZj17Y2xvY2t3aXNlOi0xLGNvdW50ZXJjbG9ja3dpc2U6MX1bdC5kaXJlY3Rpb25dLHA9YSh0LnJvdGF0aW9uKSxkPWZ1bmN0aW9uKHQpe3JldHVybiBmKnQrcH0sZz1mdW5jdGlvbih0KXtyZXR1cm4odC1wKS9mfTtzd2l0Y2gocil7Y2FzZVwibGluZWFyXCI6cz1pPW4uaWRlbnRpdHksYz1hLGw9byx0LnJhbmdlPW4uaXNGdWxsQ2lyY2xlKGgpP1t1WzBdLHVbMF0rMzYwXTpoLm1hcChnKS5tYXAobyk7YnJlYWs7Y2FzZVwiY2F0ZWdvcnlcIjp2YXIgdj10Ll9jYXRlZ29yaWVzLmxlbmd0aCxtPXQucGVyaW9kP01hdGgubWF4KHQucGVyaW9kLHYpOnY7cz1jPWZ1bmN0aW9uKHQpe3JldHVybiAyKnQqTWF0aC5QSS9tfSxpPWw9ZnVuY3Rpb24odCl7cmV0dXJuIHQqbS9NYXRoLlBJLzJ9LHQucmFuZ2U9WzAsbV19dC5jMmc9ZnVuY3Rpb24odCl7cmV0dXJuIGQocyh0KSl9LHQuZzJjPWZ1bmN0aW9uKHQpe3JldHVybiBpKGcodCkpfSx0LnQyZz1mdW5jdGlvbih0KXtyZXR1cm4gZChjKHQpKX0sdC5nMnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGwoZyh0KSl9fX0odCxlKX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnRcIjo3Njd9XSw4MjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vbGliXCIpLGk9dChcIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIiksYT10KFwiLi9kb21haW5cIikuZGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzLGwsYz1vLnR5cGUsdT1vLmF0dHJpYnV0ZXMsaD1vLmhhbmRsZURlZmF1bHRzLGY9by5wYXJ0aXRpb258fFwieFwiLHA9ZS5fc3VicGxvdHNbY10sZD1wLmxlbmd0aCxnPWQmJnBbMF0ucmVwbGFjZSgvXFxkKyQvLFwiXCIpO2Z1bmN0aW9uIHYodCxlKXtyZXR1cm4gbi5jb2VyY2UocyxsLHUsdCxlKX1mb3IodmFyIG09MDttPGQ7bSsrKXt2YXIgeT1wW21dO3M9dFt5XT90W3ldOnRbeV09e30sbD1pLm5ld0NvbnRhaW5lcihlLHksZyksdihcInVpcmV2aXNpb25cIixlLnVpcmV2aXNpb24pO3ZhciB4PXt9O3hbZl09W20vZCwobSsxKS9kXSxhKGwsZSx2LHgpLG8uaWQ9eSxoKHMsbCx2LG8pfX19LHtcIi4uL2xpYlwiOjcwMSxcIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuL2RvbWFpblwiOjc3NH1dLDgyNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL3Rlcm5hcnlcIiksaT10KFwiLi4vLi4vcGxvdHMvZ2V0X2RhdGFcIikuZ2V0U3VicGxvdENhbGNEYXRhLGE9dChcIi4uLy4uL2xpYlwiKS5jb3VudGVyUmVnZXg7ci5uYW1lPVwidGVybmFyeVwiO3ZhciBvPXIuYXR0cj1cInN1YnBsb3RcIjtyLmlkUm9vdD1cInRlcm5hcnlcIixyLmlkUmVnZXg9ci5hdHRyUmVnZXg9YShcInRlcm5hcnlcIiksKHIuYXR0cmlidXRlcz17fSlbb109e3ZhbFR5cGU6XCJzdWJwbG90aWRcIixkZmx0OlwidGVybmFyeVwiLGVkaXRUeXBlOlwiY2FsY1wifSxyLmxheW91dEF0dHJpYnV0ZXM9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksci5zdXBwbHlMYXlvdXREZWZhdWx0cz10KFwiLi9sYXlvdXRfZGVmYXVsdHNcIiksci5wbG90PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxhPWUuX3N1YnBsb3RzLnRlcm5hcnksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dLGw9aShyLFwidGVybmFyeVwiLHMpLGM9ZVtzXS5fc3VicGxvdDtjfHwoYz1uZXcgbih7aWQ6cyxncmFwaERpdjp0LGNvbnRhaW5lcjplLl90ZXJuYXJ5bGF5ZXIubm9kZSgpfSxlKSxlW3NdLl9zdWJwbG90PWMpLGMucGxvdChsLGUsdC5fcHJvbWlzZXMpfX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9bi5fc3VicGxvdHMudGVybmFyeXx8W10sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdLHM9bltvXS5fc3VicGxvdDshZVtvXSYmcyYmKHMucGxvdENvbnRhaW5lci5yZW1vdmUoKSxzLmNsaXBEZWYucmVtb3ZlKCkscy5jbGlwRGVmUmVsYXRpdmUucmVtb3ZlKCkscy5sYXllcnNbXCJhLXRpdGxlXCJdLnJlbW92ZSgpLHMubGF5ZXJzW1wiYi10aXRsZVwiXS5yZW1vdmUoKSxzLmxheWVyc1tcImMtdGl0bGVcIl0ucmVtb3ZlKCkpfX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCI6Nzg0LFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjgyNixcIi4vbGF5b3V0X2RlZmF1bHRzXCI6ODI3LFwiLi90ZXJuYXJ5XCI6ODI4fV0sODI2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi9kb21haW5cIikuYXR0cmlidXRlcyxhPXQoXCIuLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbCxzPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsbD17dGl0bGU6YS50aXRsZSxjb2xvcjphLmNvbG9yLHRpY2ttb2RlOmEudGlja21vZGUsbnRpY2tzOnMoe30sYS5udGlja3Mse2RmbHQ6NixtaW46MX0pLHRpY2swOmEudGljazAsZHRpY2s6YS5kdGljayx0aWNrdmFsczphLnRpY2t2YWxzLHRpY2t0ZXh0OmEudGlja3RleHQsdGlja3M6YS50aWNrcyx0aWNrbGVuOmEudGlja2xlbix0aWNrd2lkdGg6YS50aWNrd2lkdGgsdGlja2NvbG9yOmEudGlja2NvbG9yLHNob3d0aWNrbGFiZWxzOmEuc2hvd3RpY2tsYWJlbHMsc2hvd3RpY2twcmVmaXg6YS5zaG93dGlja3ByZWZpeCx0aWNrcHJlZml4OmEudGlja3ByZWZpeCxzaG93dGlja3N1ZmZpeDphLnNob3d0aWNrc3VmZml4LHRpY2tzdWZmaXg6YS50aWNrc3VmZml4LHNob3dleHBvbmVudDphLnNob3dleHBvbmVudCxleHBvbmVudGZvcm1hdDphLmV4cG9uZW50Zm9ybWF0LHNlcGFyYXRldGhvdXNhbmRzOmEuc2VwYXJhdGV0aG91c2FuZHMsdGlja2ZvbnQ6YS50aWNrZm9udCx0aWNrYW5nbGU6YS50aWNrYW5nbGUsdGlja2Zvcm1hdDphLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOmEudGlja2Zvcm1hdHN0b3BzLGhvdmVyZm9ybWF0OmEuaG92ZXJmb3JtYXQsc2hvd2xpbmU6cyh7fSxhLnNob3dsaW5lLHtkZmx0OiEwfSksbGluZWNvbG9yOmEubGluZWNvbG9yLGxpbmV3aWR0aDphLmxpbmV3aWR0aCxzaG93Z3JpZDpzKHt9LGEuc2hvd2dyaWQse2RmbHQ6ITB9KSxncmlkY29sb3I6YS5ncmlkY29sb3IsZ3JpZHdpZHRoOmEuZ3JpZHdpZHRoLGxheWVyOmEubGF5ZXIsbWluOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLG1pbjowfSxfZGVwcmVjYXRlZDp7dGl0bGU6YS5fZGVwcmVjYXRlZC50aXRsZSx0aXRsZWZvbnQ6YS5fZGVwcmVjYXRlZC50aXRsZWZvbnR9fSxjPWUuZXhwb3J0cz1vKHtkb21haW46aSh7bmFtZTpcInRlcm5hcnlcIn0pLGJnY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6bi5iYWNrZ3JvdW5kfSxzdW06e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjEsbWluOjB9LGFheGlzOmwsYmF4aXM6bCxjYXhpczpsfSxcInBsb3RcIixcImZyb20tcm9vdFwiKTtjLnVpcmV2aXNpb249e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcIm5vbmVcIn0sYy5hYXhpcy51aXJldmlzaW9uPWMuYmF4aXMudWlyZXZpc2lvbj1jLmNheGlzLnVpcmV2aXNpb249e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcIm5vbmVcIn19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiOjU3NyxcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzXCI6NzYxLFwiLi4vZG9tYWluXCI6Nzc0fV0sODI3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksaT10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKSxhPXQoXCIuLi8uLi9saWJcIiksbz10KFwiLi4vc3VicGxvdF9kZWZhdWx0c1wiKSxzPXQoXCIuLi9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0c1wiKSxsPXQoXCIuLi9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzXCIpLGM9dChcIi4uL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzXCIpLHU9dChcIi4uL2NhcnRlc2lhbi9saW5lX2dyaWRfZGVmYXVsdHNcIiksaD10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxmPVtcImFheGlzXCIsXCJiYXhpc1wiLFwiY2F4aXNcIl07ZnVuY3Rpb24gcCh0LGUscixhKXt2YXIgbyxzLGwsYz1yKFwiYmdjb2xvclwiKSx1PXIoXCJzdW1cIik7YS5iZ0NvbG9yPW4uY29tYmluZShjLGEucGFwZXJfYmdjb2xvcik7Zm9yKHZhciBoPTA7aDxmLmxlbmd0aDtoKyspcz10W289ZltoXV18fHt9LChsPWkubmV3Q29udGFpbmVyKGUsbykpLl9uYW1lPW8sZChzLGwsYSxlKTt2YXIgcD1lLmFheGlzLGc9ZS5iYXhpcyx2PWUuY2F4aXM7cC5taW4rZy5taW4rdi5taW4+PXUmJihwLm1pbj0wLGcubWluPTAsdi5taW49MCx0LmFheGlzJiZkZWxldGUgdC5hYXhpcy5taW4sdC5iYXhpcyYmZGVsZXRlIHQuYmF4aXMubWluLHQuY2F4aXMmJmRlbGV0ZSB0LmNheGlzLm1pbil9ZnVuY3Rpb24gZCh0LGUscixuKXt2YXIgaT1oW2UuX25hbWVdO2Z1bmN0aW9uIG8ocixuKXtyZXR1cm4gYS5jb2VyY2UodCxlLGkscixuKX1vKFwidWlyZXZpc2lvblwiLG4udWlyZXZpc2lvbiksZS50eXBlPVwibGluZWFyXCI7dmFyIGY9byhcImNvbG9yXCIpLHA9ZiE9PWkuY29sb3IuZGZsdD9mOnIuZm9udC5jb2xvcixkPWUuX25hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCksZz1cIkNvbXBvbmVudCBcIitkLHY9byhcInRpdGxlLnRleHRcIixnKTtlLl9ob3ZlcnRpdGxlPXY9PT1nP3Y6ZCxhLmNvZXJjZUZvbnQobyxcInRpdGxlLmZvbnRcIix7ZmFtaWx5OnIuZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKDEuMipyLmZvbnQuc2l6ZSksY29sb3I6cH0pLG8oXCJtaW5cIiksYyh0LGUsbyxcImxpbmVhclwiKSxzKHQsZSxvLFwibGluZWFyXCIse30pLGwodCxlLG8se291dGVyVGlja3M6ITB9KSxvKFwic2hvd3RpY2tsYWJlbHNcIikmJihhLmNvZXJjZUZvbnQobyxcInRpY2tmb250XCIse2ZhbWlseTpyLmZvbnQuZmFtaWx5LHNpemU6ci5mb250LnNpemUsY29sb3I6cH0pLG8oXCJ0aWNrYW5nbGVcIiksbyhcInRpY2tmb3JtYXRcIikpLHUodCxlLG8se2RmbHRDb2xvcjpmLGJnQ29sb3I6ci5iZ0NvbG9yLGJsZW5kOjYwLHNob3dMaW5lOiEwLHNob3dHcmlkOiEwLG5vWmVyb0xpbmU6ITAsYXR0cmlidXRlczppfSksbyhcImhvdmVyZm9ybWF0XCIpLG8oXCJsYXllclwiKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe28odCxlLHIse3R5cGU6XCJ0ZXJuYXJ5XCIsYXR0cmlidXRlczpoLGhhbmRsZURlZmF1bHRzOnAsZm9udDplLmZvbnQscGFwZXJfYmdjb2xvcjplLnBhcGVyX2JnY29sb3J9KX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vY2FydGVzaWFuL2xpbmVfZ3JpZF9kZWZhdWx0c1wiOjc2MyxcIi4uL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzXCI6NzY4LFwiLi4vY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0c1wiOjc2OSxcIi4uL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzXCI6NzcwLFwiLi4vc3VicGxvdF9kZWZhdWx0c1wiOjgyNCxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo4MjZ9XSw4Mjg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwidGlueWNvbG9yMlwiKSxhPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxvPXQoXCIuLi8uLi9saWJcIikscz1vLl8sbD10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxjPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksdT10KFwiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0XCIpLGg9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxmPXQoXCIuLi9wbG90c1wiKSxwPXQoXCIuLi9jYXJ0ZXNpYW4vYXhlc1wiKSxkPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50XCIpLGc9dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIiksdj10KFwiLi4vLi4vY29tcG9uZW50cy90aXRsZXNcIiksbT10KFwiLi4vY2FydGVzaWFuL3NlbGVjdFwiKS5wcmVwU2VsZWN0LHk9dChcIi4uL2NhcnRlc2lhbi9zZWxlY3RcIikuc2VsZWN0T25DbGljayx4PXQoXCIuLi9jYXJ0ZXNpYW4vc2VsZWN0XCIpLmNsZWFyU2VsZWN0LGI9dChcIi4uL2NhcnRlc2lhbi9jb25zdGFudHNcIik7ZnVuY3Rpb24gXyh0LGUpe3RoaXMuaWQ9dC5pZCx0aGlzLmdyYXBoRGl2PXQuZ3JhcGhEaXYsdGhpcy5pbml0KGUpLHRoaXMubWFrZUZyYW1ld29yayhlKSx0aGlzLmFUaWNrTGF5b3V0PW51bGwsdGhpcy5iVGlja0xheW91dD1udWxsLHRoaXMuY1RpY2tMYXlvdXQ9bnVsbH1lLmV4cG9ydHM9Xzt2YXIgdz1fLnByb3RvdHlwZTt3LmluaXQ9ZnVuY3Rpb24odCl7dGhpcy5jb250YWluZXI9dC5fdGVybmFyeWxheWVyLHRoaXMuZGVmcz10Ll9kZWZzLHRoaXMubGF5b3V0SWQ9dC5fdWlkLHRoaXMudHJhY2VIYXNoPXt9LHRoaXMubGF5ZXJzPXt9fSx3LnBsb3Q9ZnVuY3Rpb24odCxlKXt2YXIgcj1lW3RoaXMuaWRdLG49ZS5fc2l6ZTt0aGlzLl9oYXNDbGlwT25BeGlzRmFsc2U9ITE7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspe2lmKCExPT09dFtpXVswXS50cmFjZS5jbGlwb25heGlzKXt0aGlzLl9oYXNDbGlwT25BeGlzRmFsc2U9ITA7YnJlYWt9fXRoaXMudXBkYXRlTGF5ZXJzKHIpLHRoaXMuYWRqdXN0TGF5b3V0KHIsbiksZi5nZW5lcmFsVXBkYXRlUGVyVHJhY2VNb2R1bGUodGhpcy5ncmFwaERpdix0aGlzLHQsciksdGhpcy5sYXllcnMucGxvdGJnLnNlbGVjdChcInBhdGhcIikuY2FsbChsLmZpbGwsci5iZ2NvbG9yKX0sdy5tYWtlRnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ3JhcGhEaXYscj10W3RoaXMuaWRdLG49dGhpcy5jbGlwSWQ9XCJjbGlwXCIrdGhpcy5sYXlvdXRJZCt0aGlzLmlkLGk9dGhpcy5jbGlwSWRSZWxhdGl2ZT1cImNsaXAtcmVsYXRpdmVcIit0aGlzLmxheW91dElkK3RoaXMuaWQ7dGhpcy5jbGlwRGVmPW8uZW5zdXJlU2luZ2xlQnlJZCh0Ll9jbGlwcyxcImNsaXBQYXRoXCIsbixmdW5jdGlvbih0KXt0LmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIixcIk0wLDBaXCIpfSksdGhpcy5jbGlwRGVmUmVsYXRpdmU9by5lbnN1cmVTaW5nbGVCeUlkKHQuX2NsaXBzLFwiY2xpcFBhdGhcIixpLGZ1bmN0aW9uKHQpe3QuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLFwiTTAsMFpcIil9KSx0aGlzLnBsb3RDb250YWluZXI9by5lbnN1cmVTaW5nbGUodGhpcy5jb250YWluZXIsXCJnXCIsdGhpcy5pZCksdGhpcy51cGRhdGVMYXllcnMociksYy5zZXRDbGlwVXJsKHRoaXMubGF5ZXJzLmJhY2twbG90LG4sZSksYy5zZXRDbGlwVXJsKHRoaXMubGF5ZXJzLmdyaWRzLG4sZSl9LHcudXBkYXRlTGF5ZXJzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGF5ZXJzLHI9W1wiZHJhZ2xheWVyXCIsXCJwbG90YmdcIixcImJhY2twbG90XCIsXCJncmlkc1wiXTtcImJlbG93IHRyYWNlc1wiPT09dC5hYXhpcy5sYXllciYmci5wdXNoKFwiYWF4aXNcIixcImFsaW5lXCIpLFwiYmVsb3cgdHJhY2VzXCI9PT10LmJheGlzLmxheWVyJiZyLnB1c2goXCJiYXhpc1wiLFwiYmxpbmVcIiksXCJiZWxvdyB0cmFjZXNcIj09PXQuY2F4aXMubGF5ZXImJnIucHVzaChcImNheGlzXCIsXCJjbGluZVwiKSxyLnB1c2goXCJmcm9udHBsb3RcIiksXCJhYm92ZSB0cmFjZXNcIj09PXQuYWF4aXMubGF5ZXImJnIucHVzaChcImFheGlzXCIsXCJhbGluZVwiKSxcImFib3ZlIHRyYWNlc1wiPT09dC5iYXhpcy5sYXllciYmci5wdXNoKFwiYmF4aXNcIixcImJsaW5lXCIpLFwiYWJvdmUgdHJhY2VzXCI9PT10LmNheGlzLmxheWVyJiZyLnB1c2goXCJjYXhpc1wiLFwiY2xpbmVcIik7dmFyIGk9dGhpcy5wbG90Q29udGFpbmVyLnNlbGVjdEFsbChcImcudG9wbGV2ZWxcIikuZGF0YShyLFN0cmluZyksYT1bXCJhZ3JpZFwiLFwiYmdyaWRcIixcImNncmlkXCJdO2kuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLGZ1bmN0aW9uKHQpe3JldHVyblwidG9wbGV2ZWwgXCIrdH0pLmVhY2goZnVuY3Rpb24odCl7dmFyIHI9bi5zZWxlY3QodGhpcyk7ZVt0XT1yLFwiZnJvbnRwbG90XCI9PT10P3IuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwic2NhdHRlcmxheWVyXCIsITApOlwiYmFja3Bsb3RcIj09PXQ/ci5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJtYXBsYXllclwiLCEwKTpcInBsb3RiZ1wiPT09dD9yLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIixcIk0wLDBaXCIpOlwiYWxpbmVcIj09PXR8fFwiYmxpbmVcIj09PXR8fFwiY2xpbmVcIj09PXQ/ci5hcHBlbmQoXCJwYXRoXCIpOlwiZ3JpZHNcIj09PXQmJmEuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPXIuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiZ3JpZCBcIit0LCEwKX0pfSksaS5vcmRlcigpfTt2YXIgaz1NYXRoLnNxcnQoNC8zKTt3LmFkanVzdExheW91dD1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyxmPXRoaXMscD10LmRvbWFpbixkPShwLnhbMF0rcC54WzFdKS8yLGc9KHAueVswXStwLnlbMV0pLzIsdj1wLnhbMV0tcC54WzBdLG09cC55WzFdLXAueVswXSx5PXYqZS53LHg9bSplLmgsYj10LnN1bSxfPXQuYWF4aXMubWluLHc9dC5iYXhpcy5taW4sQT10LmNheGlzLm1pbjt5PmsqeD9pPShhPXgpKms6YT0oaT15KS9rLG89dippL3kscz1tKmEveCxyPWUubCtlLncqZC1pLzIsbj1lLnQrZS5oKigxLWcpLWEvMixmLngwPXIsZi55MD1uLGYudz1pLGYuaD1hLGYuc3VtPWIsZi54YXhpcz17dHlwZTpcImxpbmVhclwiLHJhbmdlOltfKzIqQS1iLGItXy0yKnddLGRvbWFpbjpbZC1vLzIsZCtvLzJdLF9pZDpcInhcIn0sdShmLnhheGlzLGYuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQpLGYueGF4aXMuc2V0U2NhbGUoKSxmLnhheGlzLmlzUHRXaXRoaW5SYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5hPj1mLmFheGlzLnJhbmdlWzBdJiZ0LmE8PWYuYWF4aXMucmFuZ2VbMV0mJnQuYj49Zi5iYXhpcy5yYW5nZVsxXSYmdC5iPD1mLmJheGlzLnJhbmdlWzBdJiZ0LmM+PWYuY2F4aXMucmFuZ2VbMV0mJnQuYzw9Zi5jYXhpcy5yYW5nZVswXX0sZi55YXhpcz17dHlwZTpcImxpbmVhclwiLHJhbmdlOltfLGItdy1BXSxkb21haW46W2ctcy8yLGcrcy8yXSxfaWQ6XCJ5XCJ9LHUoZi55YXhpcyxmLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxmLnlheGlzLnNldFNjYWxlKCksZi55YXhpcy5pc1B0V2l0aGluUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4hMH07dmFyIFQ9Zi55YXhpcy5kb21haW5bMF0sTT1mLmFheGlzPWgoe30sdC5hYXhpcyx7cmFuZ2U6W18sYi13LUFdLHNpZGU6XCJsZWZ0XCIsdGlja2FuZ2xlOigrdC5hYXhpcy50aWNrYW5nbGV8fDApLTMwLGRvbWFpbjpbVCxUK3Mqa10sYW5jaG9yOlwiZnJlZVwiLHBvc2l0aW9uOjAsX2lkOlwieVwiLF9sZW5ndGg6aX0pO3UoTSxmLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxNLnNldFNjYWxlKCk7dmFyIFM9Zi5iYXhpcz1oKHt9LHQuYmF4aXMse3JhbmdlOltiLV8tQSx3XSxzaWRlOlwiYm90dG9tXCIsZG9tYWluOmYueGF4aXMuZG9tYWluLGFuY2hvcjpcImZyZWVcIixwb3NpdGlvbjowLF9pZDpcInhcIixfbGVuZ3RoOml9KTt1KFMsZi5ncmFwaERpdi5fZnVsbExheW91dCksUy5zZXRTY2FsZSgpO3ZhciBFPWYuY2F4aXM9aCh7fSx0LmNheGlzLHtyYW5nZTpbYi1fLXcsQV0sc2lkZTpcInJpZ2h0XCIsdGlja2FuZ2xlOigrdC5jYXhpcy50aWNrYW5nbGV8fDApKzMwLGRvbWFpbjpbVCxUK3Mqa10sYW5jaG9yOlwiZnJlZVwiLHBvc2l0aW9uOjAsX2lkOlwieVwiLF9sZW5ndGg6aX0pO3UoRSxmLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxFLnNldFNjYWxlKCk7dmFyIEM9XCJNXCIrcitcIixcIisobithKStcImhcIitpK1wibC1cIitpLzIrXCIsLVwiK2ErXCJaXCI7Zi5jbGlwRGVmLnNlbGVjdChcInBhdGhcIikuYXR0cihcImRcIixDKSxmLmxheWVycy5wbG90Ymcuc2VsZWN0KFwicGF0aFwiKS5hdHRyKFwiZFwiLEMpO3ZhciBMPVwiTTAsXCIrYStcImhcIitpK1wibC1cIitpLzIrXCIsLVwiK2ErXCJaXCI7Zi5jbGlwRGVmUmVsYXRpdmUuc2VsZWN0KFwicGF0aFwiKS5hdHRyKFwiZFwiLEwpO3ZhciB6PVwidHJhbnNsYXRlKFwiK3IrXCIsXCIrbitcIilcIjtmLnBsb3RDb250YWluZXIuc2VsZWN0QWxsKFwiLnNjYXR0ZXJsYXllciwubWFwbGF5ZXJcIikuYXR0cihcInRyYW5zZm9ybVwiLHopLGYuY2xpcERlZlJlbGF0aXZlLnNlbGVjdChcInBhdGhcIikuYXR0cihcInRyYW5zZm9ybVwiLG51bGwpO3ZhciBPPVwidHJhbnNsYXRlKFwiKyhyLVMuX29mZnNldCkrXCIsXCIrKG4rYSkrXCIpXCI7Zi5sYXllcnMuYmF4aXMuYXR0cihcInRyYW5zZm9ybVwiLE8pLGYubGF5ZXJzLmJncmlkLmF0dHIoXCJ0cmFuc2Zvcm1cIixPKTt2YXIgST1cInRyYW5zbGF0ZShcIisocitpLzIpK1wiLFwiK24rXCIpcm90YXRlKDMwKXRyYW5zbGF0ZSgwLFwiKy1NLl9vZmZzZXQrXCIpXCI7Zi5sYXllcnMuYWF4aXMuYXR0cihcInRyYW5zZm9ybVwiLEkpLGYubGF5ZXJzLmFncmlkLmF0dHIoXCJ0cmFuc2Zvcm1cIixJKTt2YXIgRD1cInRyYW5zbGF0ZShcIisocitpLzIpK1wiLFwiK24rXCIpcm90YXRlKC0zMCl0cmFuc2xhdGUoMCxcIistRS5fb2Zmc2V0K1wiKVwiO2YubGF5ZXJzLmNheGlzLmF0dHIoXCJ0cmFuc2Zvcm1cIixEKSxmLmxheWVycy5jZ3JpZC5hdHRyKFwidHJhbnNmb3JtXCIsRCksZi5kcmF3QXhlcyghMCksZi5sYXllcnMuYWxpbmUuc2VsZWN0KFwicGF0aFwiKS5hdHRyKFwiZFwiLE0uc2hvd2xpbmU/XCJNXCIrcitcIixcIisobithKStcImxcIitpLzIrXCIsLVwiK2E6XCJNMCwwXCIpLmNhbGwobC5zdHJva2UsTS5saW5lY29sb3J8fFwiIzAwMFwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLChNLmxpbmV3aWR0aHx8MCkrXCJweFwiKSxmLmxheWVycy5ibGluZS5zZWxlY3QoXCJwYXRoXCIpLmF0dHIoXCJkXCIsUy5zaG93bGluZT9cIk1cIityK1wiLFwiKyhuK2EpK1wiaFwiK2k6XCJNMCwwXCIpLmNhbGwobC5zdHJva2UsUy5saW5lY29sb3J8fFwiIzAwMFwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLChTLmxpbmV3aWR0aHx8MCkrXCJweFwiKSxmLmxheWVycy5jbGluZS5zZWxlY3QoXCJwYXRoXCIpLmF0dHIoXCJkXCIsRS5zaG93bGluZT9cIk1cIisocitpLzIpK1wiLFwiK24rXCJsXCIraS8yK1wiLFwiK2E6XCJNMCwwXCIpLmNhbGwobC5zdHJva2UsRS5saW5lY29sb3J8fFwiIzAwMFwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLChFLmxpbmV3aWR0aHx8MCkrXCJweFwiKSxmLmdyYXBoRGl2Ll9jb250ZXh0LnN0YXRpY1Bsb3R8fGYuaW5pdEludGVyYWN0aW9ucygpLGMuc2V0Q2xpcFVybChmLmxheWVycy5mcm9udHBsb3QsZi5faGFzQ2xpcE9uQXhpc0ZhbHNlP251bGw6Zi5jbGlwSWQsZi5ncmFwaERpdil9LHcuZHJhd0F4ZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5ncmFwaERpdixyPXRoaXMuaWQuc3Vic3RyKDcpK1widGl0bGVcIixuPXRoaXMubGF5ZXJzLGk9dGhpcy5hYXhpcyxhPXRoaXMuYmF4aXMsbz10aGlzLmNheGlzO2lmKHRoaXMuZHJhd0F4KGkpLHRoaXMuZHJhd0F4KGEpLHRoaXMuZHJhd0F4KG8pLHQpe3ZhciBsPU1hdGgubWF4KGkuc2hvd3RpY2tsYWJlbHM/aS50aWNrZm9udC5zaXplLzI6MCwoby5zaG93dGlja2xhYmVscz8uNzUqby50aWNrZm9udC5zaXplOjApKyhcIm91dHNpZGVcIj09PW8udGlja3M/Ljg3Km8udGlja2xlbjowKSksYz0oYS5zaG93dGlja2xhYmVscz9hLnRpY2tmb250LnNpemU6MCkrKFwib3V0c2lkZVwiPT09YS50aWNrcz9hLnRpY2tsZW46MCkrMztuW1wiYS10aXRsZVwiXT12LmRyYXcoZSxcImFcIityLHtwcm9wQ29udGFpbmVyOmkscHJvcE5hbWU6dGhpcy5pZCtcIi5hYXhpcy50aXRsZVwiLHBsYWNlaG9sZGVyOnMoZSxcIkNsaWNrIHRvIGVudGVyIENvbXBvbmVudCBBIHRpdGxlXCIpLGF0dHJpYnV0ZXM6e3g6dGhpcy54MCt0aGlzLncvMix5OnRoaXMueTAtaS50aXRsZS5mb250LnNpemUvMy1sLFwidGV4dC1hbmNob3JcIjpcIm1pZGRsZVwifX0pLG5bXCJiLXRpdGxlXCJdPXYuZHJhdyhlLFwiYlwiK3Ise3Byb3BDb250YWluZXI6YSxwcm9wTmFtZTp0aGlzLmlkK1wiLmJheGlzLnRpdGxlXCIscGxhY2Vob2xkZXI6cyhlLFwiQ2xpY2sgdG8gZW50ZXIgQ29tcG9uZW50IEIgdGl0bGVcIiksYXR0cmlidXRlczp7eDp0aGlzLngwLWMseTp0aGlzLnkwK3RoaXMuaCsuODMqYS50aXRsZS5mb250LnNpemUrYyxcInRleHQtYW5jaG9yXCI6XCJtaWRkbGVcIn19KSxuW1wiYy10aXRsZVwiXT12LmRyYXcoZSxcImNcIityLHtwcm9wQ29udGFpbmVyOm8scHJvcE5hbWU6dGhpcy5pZCtcIi5jYXhpcy50aXRsZVwiLHBsYWNlaG9sZGVyOnMoZSxcIkNsaWNrIHRvIGVudGVyIENvbXBvbmVudCBDIHRpdGxlXCIpLGF0dHJpYnV0ZXM6e3g6dGhpcy54MCt0aGlzLncrYyx5OnRoaXMueTArdGhpcy5oKy44MypvLnRpdGxlLmZvbnQuc2l6ZStjLFwidGV4dC1hbmNob3JcIjpcIm1pZGRsZVwifX0pfX0sdy5kcmF3QXg9ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLmdyYXBoRGl2LG49dC5fbmFtZSxpPW4uY2hhckF0KDApLGE9dC5faWQscz10aGlzLmxheWVyc1tuXSxsPWkrXCJ0aWNrTGF5b3V0XCIsYz0oZT10KS50aWNrcytTdHJpbmcoZS50aWNrbGVuKStTdHJpbmcoZS5zaG93dGlja2xhYmVscyk7dGhpc1tsXSE9PWMmJihzLnNlbGVjdEFsbChcIi5cIithK1widGlja1wiKS5yZW1vdmUoKSx0aGlzW2xdPWMpLHQuc2V0U2NhbGUoKTt2YXIgdT1wLmNhbGNUaWNrcyh0KSxoPXAuY2xpcEVuZHModCx1KSxmPXAubWFrZVRyYW5zRm4odCksZD1wLmdldFRpY2tTaWducyh0KVsyXSxnPW8uZGVnMnJhZCgzMCksdj1kKih0LmxpbmV3aWR0aHx8MSkvMixtPWQqdC50aWNrbGVuLHk9dGhpcy53LHg9dGhpcy5oLGI9XCJiXCI9PT1pP1wiTTAsXCIrditcImxcIitNYXRoLnNpbihnKSptK1wiLFwiK01hdGguY29zKGcpKm06XCJNXCIrditcIiwwbFwiK01hdGguY29zKGcpKm0rXCIsXCIrLU1hdGguc2luKGcpKm0sXz17YTpcIk0wLDBsXCIreCtcIiwtXCIreS8yLGI6XCJNMCwwbC1cIit5LzIrXCIsLVwiK3gsYzpcIk0wLDBsLVwiK3grXCIsXCIreS8yfVtpXTtwLmRyYXdUaWNrcyhyLHQse3ZhbHM6XCJpbnNpZGVcIj09PXQudGlja3M/aDp1LGxheWVyOnMscGF0aDpiLHRyYW5zRm46ZixjcmlzcDohMX0pLHAuZHJhd0dyaWQocix0LHt2YWxzOmgsbGF5ZXI6dGhpcy5sYXllcnNbaStcImdyaWRcIl0scGF0aDpfLHRyYW5zRm46ZixjcmlzcDohMX0pLHAuZHJhd0xhYmVscyhyLHQse3ZhbHM6dSxsYXllcjpzLHRyYW5zRm46ZixsYWJlbEZuczpwLm1ha2VMYWJlbEZucyh0LDAsMzApfSl9O3ZhciBBPWIuTUlOWk9PTS8yKy44NyxUPVwibS0wLjg3LC41aFwiK0ErXCJ2M2gtXCIrKEErNS4yKStcImxcIisoQS8yKzIuNikrXCIsLVwiKyguODcqQSs0LjUpK1wibDIuNiwxLjVsLVwiK0EvMitcIixcIisuODcqQStcIlpcIixNPVwibTAuODcsLjVoLVwiK0ErXCJ2M2hcIisoQSs1LjIpK1wibC1cIisoQS8yKzIuNikrXCIsLVwiKyguODcqQSs0LjUpK1wibC0yLjYsMS41bFwiK0EvMitcIixcIisuODcqQStcIlpcIixTPVwibTAsMWxcIitBLzIrXCIsXCIrLjg3KkErXCJsMi42LC0xLjVsLVwiKyhBLzIrMi42KStcIiwtXCIrKC44NypBKzQuNSkrXCJsLVwiKyhBLzIrMi42KStcIixcIisoLjg3KkErNC41KStcImwyLjYsMS41bFwiK0EvMitcIiwtXCIrLjg3KkErXCJaXCIsRT1cIm0wLjUsMC41aDV2LTJoLTV2LTVoLTJ2NWgtNXYyaDV2NWgyWlwiLEM9ITA7ZnVuY3Rpb24gTCh0KXtuLnNlbGVjdCh0KS5zZWxlY3RBbGwoXCIuem9vbWJveCwuanMtem9vbWJveC1iYWNrZHJvcCwuanMtem9vbWJveC1tZW51LC56b29tYm94LWNvcm5lcnNcIikucmVtb3ZlKCl9dy5pbml0SW50ZXJhY3Rpb25zPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG4sdSxoLGYscCx2LF8sdz10aGlzLEE9dy5sYXllcnMucGxvdGJnLnNlbGVjdChcInBhdGhcIikubm9kZSgpLHo9dy5ncmFwaERpdixPPXouX2Z1bGxMYXlvdXQuX3pvb21sYXllcixJPXtlbGVtZW50OkEsZ2Q6eixwbG90aW5mbzp7aWQ6dy5pZCx4YXhpczp3LnhheGlzLHlheGlzOncueWF4aXN9LHN1YnBsb3Q6dy5pZCxwcmVwRm46ZnVuY3Rpb24oYSxvLHMpe0kueGF4ZXM9W3cueGF4aXNdLEkueWF4ZXM9W3cueWF4aXNdO3ZhciBjPXouX2Z1bGxMYXlvdXQuZHJhZ21vZGU7SS5taW5EcmFnPVwibGFzc29cIj09PWM/MTp2b2lkIDAsXCJ6b29tXCI9PT1jPyhJLm1vdmVGbj1OLEkuY2xpY2tGbj1QLEkuZG9uZUZuPWosZnVuY3Rpb24oYSxvLHMpe3ZhciBjPUEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dD1vLWMubGVmdCxlPXMtYy50b3Ascj17YTp3LmFheGlzLnJhbmdlWzBdLGI6dy5iYXhpcy5yYW5nZVsxXSxjOncuY2F4aXMucmFuZ2VbMV19LHU9cixuPXcuYWF4aXMucmFuZ2VbMV0tci5hLGg9aSh3LmdyYXBoRGl2Ll9mdWxsTGF5b3V0W3cuaWRdLmJnY29sb3IpLmdldEx1bWluYW5jZSgpLGY9XCJNMCxcIit3LmgrXCJMXCIrdy53LzIrXCIsIDBMXCIrdy53K1wiLFwiK3cuaCtcIlpcIixwPSExLHY9Ty5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJjbGFzc1wiLFwiem9vbWJveFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrdy54MCtcIiwgXCIrdy55MCtcIilcIikuc3R5bGUoe2ZpbGw6aD4uMj9cInJnYmEoMCwwLDAsMClcIjpcInJnYmEoMjU1LDI1NSwyNTUsMClcIixcInN0cm9rZS13aWR0aFwiOjB9KS5hdHRyKFwiZFwiLGYpLF89Ty5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJjbGFzc1wiLFwiem9vbWJveC1jb3JuZXJzXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIit3LngwK1wiLCBcIit3LnkwK1wiKVwiKS5zdHlsZSh7ZmlsbDpsLmJhY2tncm91bmQsc3Ryb2tlOmwuZGVmYXVsdExpbmUsXCJzdHJva2Utd2lkdGhcIjoxLG9wYWNpdHk6MH0pLmF0dHIoXCJkXCIsXCJNMCwwWlwiKSx4KHopfSgwLG8scykpOlwicGFuXCI9PT1jPyhJLm1vdmVGbj1WLEkuY2xpY2tGbj1QLEkuZG9uZUZuPVUscj17YTp3LmFheGlzLnJhbmdlWzBdLGI6dy5iYXhpcy5yYW5nZVsxXSxjOncuY2F4aXMucmFuZ2VbMV19LHU9cix4KHopKTpcInNlbGVjdFwiIT09YyYmXCJsYXNzb1wiIT09Y3x8bShhLG8scyxJLGMpfX07ZnVuY3Rpb24gRCh0KXt2YXIgZT17fTtyZXR1cm4gZVt3LmlkK1wiLmFheGlzLm1pblwiXT10LmEsZVt3LmlkK1wiLmJheGlzLm1pblwiXT10LmIsZVt3LmlkK1wiLmNheGlzLm1pblwiXT10LmMsZX1mdW5jdGlvbiBQKHQsZSl7dmFyIHI9ei5fZnVsbExheW91dC5jbGlja21vZGU7TCh6KSwyPT09dCYmKHouZW1pdChcInBsb3RseV9kb3VibGVjbGlja1wiLG51bGwpLGEuY2FsbChcIl9ndWlSZWxheW91dFwiLHosRCh7YTowLGI6MCxjOjB9KSkpLHIuaW5kZXhPZihcInNlbGVjdFwiKT4tMSYmMT09PXQmJnkoZSx6LFt3LnhheGlzXSxbdy55YXhpc10sdy5pZCxJKSxyLmluZGV4T2YoXCJldmVudFwiKT4tMSYmZy5jbGljayh6LGUsdy5pZCl9ZnVuY3Rpb24gUih0LGUpe3JldHVybiAxLWUvdy5ofWZ1bmN0aW9uIEYodCxlKXtyZXR1cm4gMS0odCsody5oLWUpL01hdGguc3FydCgzKSkvdy53fWZ1bmN0aW9uIEIodCxlKXtyZXR1cm4odC0ody5oLWUpL01hdGguc3FydCgzKSkvdy53fWZ1bmN0aW9uIE4oaSxhKXt2YXIgbz10K2kscz1lK2EsbD1NYXRoLm1heCgwLE1hdGgubWluKDEsUigwLGUpLFIoMCxzKSkpLGM9TWF0aC5tYXgoMCxNYXRoLm1pbigxLEYodCxlKSxGKG8scykpKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oMSxCKHQsZSksQihvLHMpKSksZz0obC8yK2QpKncudyxtPSgxLWwvMi1jKSp3LncseT0oZyttKS8yLHg9bS1nLEE9KDEtbCkqdy5oLEM9QS14L2s7eDxiLk1JTlpPT00/KHU9cix2LmF0dHIoXCJkXCIsZiksXy5hdHRyKFwiZFwiLFwiTTAsMFpcIikpOih1PXthOnIuYStsKm4sYjpyLmIrYypuLGM6ci5jK2Qqbn0sdi5hdHRyKFwiZFwiLGYrXCJNXCIrZytcIixcIitBK1wiSFwiK20rXCJMXCIreStcIixcIitDK1wiTFwiK2crXCIsXCIrQStcIlpcIiksXy5hdHRyKFwiZFwiLFwiTVwiK3QrXCIsXCIrZStFK1wiTVwiK2crXCIsXCIrQStUK1wiTVwiK20rXCIsXCIrQStNK1wiTVwiK3krXCIsXCIrQytTKSkscHx8KHYudHJhbnNpdGlvbigpLnN0eWxlKFwiZmlsbFwiLGg+LjI/XCJyZ2JhKDAsMCwwLDAuNClcIjpcInJnYmEoMjU1LDI1NSwyNTUsMC4zKVwiKS5kdXJhdGlvbigyMDApLF8udHJhbnNpdGlvbigpLnN0eWxlKFwib3BhY2l0eVwiLDEpLmR1cmF0aW9uKDIwMCkscD0hMCl9ZnVuY3Rpb24gaigpe0woeiksdSE9PXImJihhLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix6LEQodSkpLEMmJnouZGF0YSYmei5fY29udGV4dC5zaG93VGlwcyYmKG8ubm90aWZpZXIocyh6LFwiRG91YmxlLWNsaWNrIHRvIHpvb20gYmFjayBvdXRcIiksXCJsb25nXCIpLEM9ITEpKX1mdW5jdGlvbiBWKHQsZSl7dmFyIG49dC93LnhheGlzLl9tLGk9ZS93LnlheGlzLl9tLGE9Wyh1PXthOnIuYS1pLGI6ci5iKyhuK2kpLzIsYzpyLmMtKG4taSkvMn0pLmEsdS5iLHUuY10uc29ydCgpLG89YS5pbmRleE9mKHUuYSkscz1hLmluZGV4T2YodS5iKSxsPWEuaW5kZXhPZih1LmMpO2FbMF08MCYmKGFbMV0rYVswXS8yPDA/KGFbMl0rPWFbMF0rYVsxXSxhWzBdPWFbMV09MCk6KGFbMl0rPWFbMF0vMixhWzFdKz1hWzBdLzIsYVswXT0wKSx1PXthOmFbb10sYjphW3NdLGM6YVtsXX0sZT0oci5hLXUuYSkqdy55YXhpcy5fbSx0PShyLmMtdS5jLXIuYit1LmIpKncueGF4aXMuX20pO3ZhciBoPVwidHJhbnNsYXRlKFwiKyh3LngwK3QpK1wiLFwiKyh3LnkwK2UpK1wiKVwiO3cucGxvdENvbnRhaW5lci5zZWxlY3RBbGwoXCIuc2NhdHRlcmxheWVyLC5tYXBsYXllclwiKS5hdHRyKFwidHJhbnNmb3JtXCIsaCk7dmFyIGY9XCJ0cmFuc2xhdGUoXCIrLXQrXCIsXCIrLWUrXCIpXCI7dy5jbGlwRGVmUmVsYXRpdmUuc2VsZWN0KFwicGF0aFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsZiksdy5hYXhpcy5yYW5nZT1bdS5hLHcuc3VtLXUuYi11LmNdLHcuYmF4aXMucmFuZ2U9W3cuc3VtLXUuYS11LmMsdS5iXSx3LmNheGlzLnJhbmdlPVt3LnN1bS11LmEtdS5iLHUuY10sdy5kcmF3QXhlcyghMSksdy5faGFzQ2xpcE9uQXhpc0ZhbHNlJiZ3LnBsb3RDb250YWluZXIuc2VsZWN0KFwiLnNjYXR0ZXJsYXllclwiKS5zZWxlY3RBbGwoXCIudHJhY2VcIikuY2FsbChjLmhpZGVPdXRzaWRlUmFuZ2VQb2ludHMsdyl9ZnVuY3Rpb24gVSgpe2EuY2FsbChcIl9ndWlSZWxheW91dFwiLHosRCh1KSl9QS5vbm1vdXNlbW92ZT1mdW5jdGlvbih0KXtnLmhvdmVyKHosdCx3LmlkKSx6Ll9mdWxsTGF5b3V0Ll9sYXN0aG92ZXI9QSx6Ll9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9dy5pZH0sQS5vbm1vdXNlb3V0PWZ1bmN0aW9uKHQpe3ouX2RyYWdnaW5nfHxkLnVuaG92ZXIoeix0KX0sZC5pbml0KEkpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnRcIjo1OTYsXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9jb21wb25lbnRzL2Z4XCI6NjE3LFwiLi4vLi4vY29tcG9uZW50cy90aXRsZXNcIjo2NjYsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL2NhcnRlc2lhbi9jb25zdGFudHNcIjo3NTUsXCIuLi9jYXJ0ZXNpYW4vc2VsZWN0XCI6NzY2LFwiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0XCI6NzY3LFwiLi4vcGxvdHNcIjo4MTAsZDM6MTU1LHRpbnljb2xvcjI6NTIyfV0sODI5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vbGliL2xvZ2dlcnNcIiksaT10KFwiLi9saWIvbm9vcFwiKSxhPXQoXCIuL2xpYi9wdXNoX3VuaXF1ZVwiKSxvPXQoXCIuL2xpYi9pc19wbGFpbl9vYmplY3RcIikscz10KFwiLi9saWIvZXh0ZW5kXCIpLGw9dChcIi4vcGxvdHMvYXR0cmlidXRlc1wiKSxjPXQoXCIuL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzXCIpLHU9cy5leHRlbmRGbGF0LGg9cy5leHRlbmREZWVwQWxsO2Z1bmN0aW9uIGYodCl7dmFyIGU9dC5uYW1lLGk9dC5jYXRlZ29yaWVzLGE9dC5tZXRhO2lmKHIubW9kdWxlc1tlXSluLmxvZyhcIlR5cGUgXCIrZStcIiBhbHJlYWR5IHJlZ2lzdGVyZWRcIik7ZWxzZXtyLnN1YnBsb3RzUmVnaXN0cnlbdC5iYXNlUGxvdE1vZHVsZS5uYW1lXXx8ZnVuY3Rpb24odCl7dmFyIGU9dC5uYW1lO2lmKHIuc3VicGxvdHNSZWdpc3RyeVtlXSlyZXR1cm4gdm9pZCBuLmxvZyhcIlBsb3QgdHlwZSBcIitlK1wiIGFscmVhZHkgcmVnaXN0ZXJlZC5cIik7Zm9yKHZhciBpIGluIHYodCksci5zdWJwbG90c1JlZ2lzdHJ5W2VdPXQsci5jb21wb25lbnRzUmVnaXN0cnkpeChpLHQubmFtZSl9KHQuYmFzZVBsb3RNb2R1bGUpO2Zvcih2YXIgbz17fSxzPTA7czxpLmxlbmd0aDtzKyspb1tpW3NdXT0hMCxyLmFsbENhdGVnb3JpZXNbaVtzXV09ITA7Zm9yKHZhciBsIGluIHIubW9kdWxlc1tlXT17X21vZHVsZTp0LGNhdGVnb3JpZXM6b30sYSYmT2JqZWN0LmtleXMoYSkubGVuZ3RoJiYoci5tb2R1bGVzW2VdLm1ldGE9YSksci5hbGxUeXBlcy5wdXNoKGUpLHIuY29tcG9uZW50c1JlZ2lzdHJ5KW0obCxlKTt0LmxheW91dEF0dHJpYnV0ZXMmJnUoci50cmFjZUxheW91dEF0dHJpYnV0ZXMsdC5sYXlvdXRBdHRyaWJ1dGVzKX19ZnVuY3Rpb24gcCh0KXtpZihcInN0cmluZ1wiIT10eXBlb2YgdC5uYW1lKXRocm93IG5ldyBFcnJvcihcIkNvbXBvbmVudCBtb2R1bGUgKm5hbWUqIG11c3QgYmUgYSBzdHJpbmcuXCIpO3ZhciBlPXQubmFtZTtmb3IodmFyIG4gaW4gci5jb21wb25lbnRzUmVnaXN0cnlbZV09dCx0LmxheW91dEF0dHJpYnV0ZXMmJih0LmxheW91dEF0dHJpYnV0ZXMuX2lzTGlua2VkVG9BcnJheSYmYShyLmxheW91dEFycmF5Q29udGFpbmVycyxlKSx2KHQpKSxyLm1vZHVsZXMpbShlLG4pO2Zvcih2YXIgaSBpbiByLnN1YnBsb3RzUmVnaXN0cnkpeChlLGkpO2Zvcih2YXIgbyBpbiByLnRyYW5zZm9ybXNSZWdpc3RyeSl5KGUsbyk7dC5zY2hlbWEmJnQuc2NoZW1hLmxheW91dCYmaChjLHQuc2NoZW1hLmxheW91dCl9ZnVuY3Rpb24gZCh0KXtpZihcInN0cmluZ1wiIT10eXBlb2YgdC5uYW1lKXRocm93IG5ldyBFcnJvcihcIlRyYW5zZm9ybSBtb2R1bGUgKm5hbWUqIG11c3QgYmUgYSBzdHJpbmcuXCIpO3ZhciBlPVwiVHJhbnNmb3JtIG1vZHVsZSBcIit0Lm5hbWUsaT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnRyYW5zZm9ybSxhPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQuY2FsY1RyYW5zZm9ybTtpZighaSYmIWEpdGhyb3cgbmV3IEVycm9yKGUrXCIgaXMgbWlzc2luZyBhICp0cmFuc2Zvcm0qIG9yICpjYWxjVHJhbnNmb3JtKiBtZXRob2QuXCIpO2Zvcih2YXIgcyBpbiBpJiZhJiZuLmxvZyhbZStcIiBoYXMgYm90aCBhICp0cmFuc2Zvcm0qIGFuZCAqY2FsY1RyYW5zZm9ybSogbWV0aG9kcy5cIixcIlBsZWFzZSBub3RlIHRoYXQgYWxsICp0cmFuc2Zvcm0qIG1ldGhvZHMgYXJlIGV4ZWN1dGVkXCIsXCJiZWZvcmUgYWxsICpjYWxjVHJhbnNmb3JtKiBtZXRob2RzLlwiXS5qb2luKFwiIFwiKSksbyh0LmF0dHJpYnV0ZXMpfHxuLmxvZyhlK1wiIHJlZ2lzdGVyZWQgd2l0aG91dCBhbiAqYXR0cmlidXRlcyogb2JqZWN0LlwiKSxcImZ1bmN0aW9uXCIhPXR5cGVvZiB0LnN1cHBseURlZmF1bHRzJiZuLmxvZyhlK1wiIHJlZ2lzdGVyZWQgd2l0aG91dCBhICpzdXBwbHlEZWZhdWx0cyogbWV0aG9kLlwiKSxyLnRyYW5zZm9ybXNSZWdpc3RyeVt0Lm5hbWVdPXQsci5jb21wb25lbnRzUmVnaXN0cnkpeShzLHQubmFtZSl9ZnVuY3Rpb24gZyh0KXt2YXIgZT10Lm5hbWUsbj1lLnNwbGl0KFwiLVwiKVswXSxpPXQuZGljdGlvbmFyeSxhPXQuZm9ybWF0LG89aSYmT2JqZWN0LmtleXMoaSkubGVuZ3RoLHM9YSYmT2JqZWN0LmtleXMoYSkubGVuZ3RoLGw9ci5sb2NhbGVSZWdpc3RyeSxjPWxbZV07aWYoY3x8KGxbZV09Yz17fSksbiE9PWUpe3ZhciB1PWxbbl07dXx8KGxbbl09dT17fSksbyYmdS5kaWN0aW9uYXJ5PT09Yy5kaWN0aW9uYXJ5JiYodS5kaWN0aW9uYXJ5PWkpLHMmJnUuZm9ybWF0PT09Yy5mb3JtYXQmJih1LmZvcm1hdD1hKX1vJiYoYy5kaWN0aW9uYXJ5PWkpLHMmJihjLmZvcm1hdD1hKX1mdW5jdGlvbiB2KHQpe2lmKHQubGF5b3V0QXR0cmlidXRlcyl7dmFyIGU9dC5sYXlvdXRBdHRyaWJ1dGVzLl9hcnJheUF0dHJSZWdleHBzO2lmKGUpZm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspYShyLmxheW91dEFycmF5UmVnZXhlcyxlW25dKX19ZnVuY3Rpb24gbSh0LGUpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W3RdLnNjaGVtYTtpZihuJiZuLnRyYWNlcyl7dmFyIGk9bi50cmFjZXNbZV07aSYmaChyLm1vZHVsZXNbZV0uX21vZHVsZS5hdHRyaWJ1dGVzLGkpfX1mdW5jdGlvbiB5KHQsZSl7dmFyIG49ci5jb21wb25lbnRzUmVnaXN0cnlbdF0uc2NoZW1hO2lmKG4mJm4udHJhbnNmb3Jtcyl7dmFyIGk9bi50cmFuc2Zvcm1zW2VdO2kmJmgoci50cmFuc2Zvcm1zUmVnaXN0cnlbZV0uYXR0cmlidXRlcyxpKX19ZnVuY3Rpb24geCh0LGUpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W3RdLnNjaGVtYTtpZihuJiZuLnN1YnBsb3RzKXt2YXIgaT1yLnN1YnBsb3RzUmVnaXN0cnlbZV0sYT1pLmxheW91dEF0dHJpYnV0ZXMsbz1cInN1YnBsb3RcIj09PWkuYXR0cj9pLm5hbWU6aS5hdHRyO0FycmF5LmlzQXJyYXkobykmJihvPW9bMF0pO3ZhciBzPW4uc3VicGxvdHNbb107YSYmcyYmaChhLHMpfX1mdW5jdGlvbiBiKHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0JiYodD10LnR5cGUpLHR9ci5tb2R1bGVzPXt9LHIuYWxsQ2F0ZWdvcmllcz17fSxyLmFsbFR5cGVzPVtdLHIuc3VicGxvdHNSZWdpc3RyeT17fSxyLnRyYW5zZm9ybXNSZWdpc3RyeT17fSxyLmNvbXBvbmVudHNSZWdpc3RyeT17fSxyLmxheW91dEFycmF5Q29udGFpbmVycz1bXSxyLmxheW91dEFycmF5UmVnZXhlcz1bXSxyLnRyYWNlTGF5b3V0QXR0cmlidXRlcz17fSxyLmxvY2FsZVJlZ2lzdHJ5PXt9LHIuYXBpTWV0aG9kUmVnaXN0cnk9e30sci5jb2xsZWN0YWJsZVN1YnBsb3RUeXBlcz1udWxsLHIucmVnaXN0ZXI9ZnVuY3Rpb24odCl7aWYoci5jb2xsZWN0YWJsZVN1YnBsb3RUeXBlcz1udWxsLCF0KXRocm93IG5ldyBFcnJvcihcIk5vIGFyZ3VtZW50IHBhc3NlZCB0byBQbG90bHkucmVnaXN0ZXIuXCIpO3QmJiFBcnJheS5pc0FycmF5KHQpJiYodD1bdF0pO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgbj10W2VdO2lmKCFuKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbW9kdWxlIHdhcyBhdHRlbXB0ZWQgdG8gYmUgcmVnaXN0ZXJlZCFcIik7c3dpdGNoKG4ubW9kdWxlVHlwZSl7Y2FzZVwidHJhY2VcIjpmKG4pO2JyZWFrO2Nhc2VcInRyYW5zZm9ybVwiOmQobik7YnJlYWs7Y2FzZVwiY29tcG9uZW50XCI6cChuKTticmVhaztjYXNlXCJsb2NhbGVcIjpnKG4pO2JyZWFrO2Nhc2VcImFwaU1ldGhvZFwiOnZhciBpPW4ubmFtZTtyLmFwaU1ldGhvZFJlZ2lzdHJ5W2ldPW4uZm47YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIG1vZHVsZSB3YXMgYXR0ZW1wdGVkIHRvIGJlIHJlZ2lzdGVyZWQhXCIpfX19LHIuZ2V0TW9kdWxlPWZ1bmN0aW9uKHQpe3ZhciBlPXIubW9kdWxlc1tiKHQpXTtyZXR1cm4hIWUmJmUuX21vZHVsZX0sci50cmFjZUlzPWZ1bmN0aW9uKHQsZSl7aWYoXCJ2YXJpb3VzXCI9PT0odD1iKHQpKSlyZXR1cm4hMTt2YXIgaT1yLm1vZHVsZXNbdF07cmV0dXJuIGl8fCh0JiZcImFyZWFcIiE9PXQmJm4ubG9nKFwiVW5yZWNvZ25pemVkIHRyYWNlIHR5cGUgXCIrdCtcIi5cIiksaT1yLm1vZHVsZXNbbC50eXBlLmRmbHRdKSwhIWkuY2F0ZWdvcmllc1tlXX0sci5nZXRUcmFuc2Zvcm1JbmRpY2VzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49dC50cmFuc2Zvcm1zfHxbXSxpPTA7aTxuLmxlbmd0aDtpKyspbltpXS50eXBlPT09ZSYmci5wdXNoKGkpO3JldHVybiByfSxyLmhhc1RyYW5zZm9ybT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LnRyYW5zZm9ybXN8fFtdLG49MDtuPHIubGVuZ3RoO24rKylpZihyW25dLnR5cGU9PT1lKXJldHVybiEwO3JldHVybiExfSxyLmdldENvbXBvbmVudE1ldGhvZD1mdW5jdGlvbih0LGUpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W3RdO3JldHVybiBuJiZuW2VdfHxpfSxyLmNhbGw9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHNbMF0sZT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gci5hcGlNZXRob2RSZWdpc3RyeVt0XS5hcHBseShudWxsLGUpfX0se1wiLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi9saWIvaXNfcGxhaW5fb2JqZWN0XCI6NzAyLFwiLi9saWIvbG9nZ2Vyc1wiOjcwNSxcIi4vbGliL25vb3BcIjo3MTAsXCIuL2xpYi9wdXNoX3VuaXF1ZVwiOjcxNSxcIi4vcGxvdHMvYXR0cmlidXRlc1wiOjc0NixcIi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXNcIjo4MDF9XSw4MzA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vbGliXCIpLGk9bi5leHRlbmRGbGF0LGE9bi5leHRlbmREZWVwO2Z1bmN0aW9uIG8odCl7dmFyIGU7c3dpdGNoKHQpe2Nhc2VcInRoZW1lc19fdGh1bWJcIjplPXthdXRvc2l6ZTohMCx3aWR0aDoxNTAsaGVpZ2h0OjE1MCx0aXRsZTp7dGV4dDpcIlwifSxzaG93bGVnZW5kOiExLG1hcmdpbjp7bDo1LHI6NSx0OjUsYjo1LHBhZDowfSxhbm5vdGF0aW9uczpbXX07YnJlYWs7Y2FzZVwidGh1bWJuYWlsXCI6ZT17dGl0bGU6e3RleHQ6XCJcIn0saGlkZXNvdXJjZXM6ITAsc2hvd2xlZ2VuZDohMSxib3JkZXJ3aWR0aDowLGJvcmRlcmNvbG9yOlwiXCIsbWFyZ2luOntsOjEscjoxLHQ6MSxiOjEscGFkOjB9LGFubm90YXRpb25zOltdfTticmVhaztkZWZhdWx0OmU9e319cmV0dXJuIGV9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI7dC5mcmFtZXdvcmsmJnQuZnJhbWV3b3JrLmlzUG9sYXImJih0PXQuZnJhbWV3b3JrLmdldENvbmZpZygpKTt2YXIgbixzPXQuZGF0YSxsPXQubGF5b3V0LGM9YShbXSxzKSx1PWEoe30sbCxvKGUudGlsZUNsYXNzKSksaD10Ll9jb250ZXh0fHx7fTtpZihlLndpZHRoJiYodS53aWR0aD1lLndpZHRoKSxlLmhlaWdodCYmKHUuaGVpZ2h0PWUuaGVpZ2h0KSxcInRodW1ibmFpbFwiPT09ZS50aWxlQ2xhc3N8fFwidGhlbWVzX190aHVtYlwiPT09ZS50aWxlQ2xhc3Mpe3UuYW5ub3RhdGlvbnM9W107dmFyIGY9T2JqZWN0LmtleXModSk7Zm9yKHI9MDtyPGYubGVuZ3RoO3IrKyluPWZbcl0sW1wieGF4aXNcIixcInlheGlzXCIsXCJ6YXhpc1wiXS5pbmRleE9mKG4uc2xpY2UoMCw1KSk+LTEmJih1W2Zbcl1dLnRpdGxlPXt0ZXh0OlwiXCJ9KTtmb3Iocj0wO3I8Yy5sZW5ndGg7cisrKXt2YXIgcD1jW3JdO3Auc2hvd3NjYWxlPSExLHAubWFya2VyJiYocC5tYXJrZXIuc2hvd3NjYWxlPSExKSxcInBpZVwiPT09cC50eXBlJiYocC50ZXh0cG9zaXRpb249XCJub25lXCIpfX1pZihBcnJheS5pc0FycmF5KGUuYW5ub3RhdGlvbnMpKWZvcihyPTA7cjxlLmFubm90YXRpb25zLmxlbmd0aDtyKyspdS5hbm5vdGF0aW9ucy5wdXNoKGUuYW5ub3RhdGlvbnNbcl0pO3ZhciBkPU9iamVjdC5rZXlzKHUpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXRjaCgvXnNjZW5lXFxkKiQvKX0pO2lmKGQubGVuZ3RoKXt2YXIgZz17fTtmb3IoXCJ0aHVtYm5haWxcIj09PWUudGlsZUNsYXNzJiYoZz17dGl0bGU6e3RleHQ6XCJcIn0sc2hvd2F4ZXNsYWJlbHM6ITEsc2hvd3RpY2tsYWJlbHM6ITEsbGluZXRpY2tlbmFibGU6ITF9KSxyPTA7cjxkLmxlbmd0aDtyKyspe3ZhciB2PXVbZFtyXV07di54YXhpc3x8KHYueGF4aXM9e30pLHYueWF4aXN8fCh2LnlheGlzPXt9KSx2LnpheGlzfHwodi56YXhpcz17fSksaSh2LnhheGlzLGcpLGkodi55YXhpcyxnKSxpKHYuemF4aXMsZyksdi5fc2NlbmU9bnVsbH19dmFyIG09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtlLnRpbGVDbGFzcyYmKG0uY2xhc3NOYW1lPWUudGlsZUNsYXNzKTt2YXIgeT17Z2Q6bSx0ZDptLGxheW91dDp1LGRhdGE6Yyxjb25maWc6e3N0YXRpY1Bsb3Q6dm9pZCAwPT09ZS5zdGF0aWNQbG90fHxlLnN0YXRpY1Bsb3QscGxvdEdsUGl4ZWxSYXRpbzp2b2lkIDA9PT1lLnBsb3RHbFBpeGVsUmF0aW8/MjplLnBsb3RHbFBpeGVsUmF0aW8sZGlzcGxheWxvZ286ZS5kaXNwbGF5bG9nb3x8ITEsc2hvd0xpbms6ZS5zaG93TGlua3x8ITEsc2hvd1RpcHM6ZS5zaG93VGlwc3x8ITEsbWFwYm94QWNjZXNzVG9rZW46aC5tYXBib3hBY2Nlc3NUb2tlbn19O3JldHVyblwidHJhbnNwYXJlbnRcIiE9PWUuc2V0QmFja2dyb3VuZCYmKHkuY29uZmlnLnNldEJhY2tncm91bmQ9ZS5zZXRCYWNrZ3JvdW5kfHxcIm9wYXF1ZVwiKSx5LmdkLmRlZmF1bHRMYXlvdXQ9byhlLnRpbGVDbGFzcykseX19LHtcIi4uL2xpYlwiOjcwMX1dLDgzMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9wbG90X2FwaS90b19pbWFnZVwiKSxpPXQoXCIuLi9saWJcIiksYT10KFwiLi9maWxlc2F2ZXJcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI7cmV0dXJuIGkuaXNQbGFpbk9iamVjdCh0KXx8KHI9aS5nZXRHcmFwaERpdih0KSksKGU9ZXx8e30pLmZvcm1hdD1lLmZvcm1hdHx8XCJwbmdcIixuZXcgUHJvbWlzZShmdW5jdGlvbihvLHMpe3ImJnIuX3NuYXBzaG90SW5Qcm9ncmVzcyYmcyhuZXcgRXJyb3IoXCJTbmFwc2hvdHRpbmcgYWxyZWFkeSBpbiBwcm9ncmVzcy5cIikpLGkuaXNJRSgpJiZcInN2Z1wiIT09ZS5mb3JtYXQmJnMobmV3IEVycm9yKFwiU29ycnkgSUUgZG9lcyBub3Qgc3VwcG9ydCBkb3dubG9hZGluZyBmcm9tIGNhbnZhcy4gVHJ5IHtmb3JtYXQ6J3N2Zyd9IGluc3RlYWQuXCIpKSxyJiYoci5fc25hcHNob3RJblByb2dyZXNzPSEwKTt2YXIgbD1uKHQsZSksYz1lLmZpbGVuYW1lfHx0LmZufHxcIm5ld3Bsb3RcIjtjKz1cIi5cIitlLmZvcm1hdCxsLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIHImJihyLl9zbmFwc2hvdEluUHJvZ3Jlc3M9ITEpLGEodCxjKX0pLnRoZW4oZnVuY3Rpb24odCl7byh0KX0pLmNhdGNoKGZ1bmN0aW9uKHQpe3ImJihyLl9zbmFwc2hvdEluUHJvZ3Jlc3M9ITEpLHModCl9KX0pfX0se1wiLi4vbGliXCI6NzAxLFwiLi4vcGxvdF9hcGkvdG9faW1hZ2VcIjo3NDIsXCIuL2ZpbGVzYXZlclwiOjgzMn1dLDgzMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpLG49XCJkb3dubG9hZFwiaW4gcixpPS9WZXJzaW9uXFwvW1xcZFxcLl0rLipTYWZhcmkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGEsbyl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvciYmL01TSUUgWzEtOV1cXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJm8obmV3IEVycm9yKFwiSUUgPCAxMCB1bnN1cHBvcnRlZFwiKSksaSYmKGRvY3VtZW50LmxvY2F0aW9uLmhyZWY9XCJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiK3Quc2xpY2UodC5zZWFyY2goL1ssO10vKSksYShlKSksZXx8KGU9XCJkb3dubG9hZFwiKSxuJiYoci5ocmVmPXQsci5kb3dubG9hZD1lLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQociksci5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQociksYShlKSksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvciYmbmF2aWdhdG9yLm1zU2F2ZUJsb2Ipe3ZhciBzPXQuc3BsaXQoL15kYXRhOmltYWdlXFwvc3ZnXFwreG1sLC8pWzFdLGw9ZGVjb2RlVVJJQ29tcG9uZW50KHMpO25hdmlnYXRvci5tc1NhdmVCbG9iKG5ldyBCbG9iKFtsXSksZSksYShlKX1vKG5ldyBFcnJvcihcImRvd25sb2FkIGVycm9yXCIpKX0pfX0se31dLDgzMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IuZ2V0RGVsYXk9ZnVuY3Rpb24odCl7cmV0dXJuIHQuX2hhcyYmKHQuX2hhcyhcImdsM2RcIil8fHQuX2hhcyhcImdsMmRcIil8fHQuX2hhcyhcIm1hcGJveFwiKSk/NTAwOjB9LHIuZ2V0UmVkcmF3RnVuYz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0fHx7fTtpZighKCEoZS5faGFzJiZlLl9oYXMoXCJwb2xhclwiKSkmJnQuZGF0YSYmdC5kYXRhWzBdJiZ0LmRhdGFbMF0ucikpcmV0dXJuIGZ1bmN0aW9uKCl7KHQuY2FsY2RhdGF8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RbMF0mJnRbMF0udCYmdFswXS50LmNiJiZ0WzBdLnQuY2IoKX0pfX19LHt9XSw4MzQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9oZWxwZXJzXCIpLGk9e2dldERlbGF5Om4uZ2V0RGVsYXksZ2V0UmVkcmF3RnVuYzpuLmdldFJlZHJhd0Z1bmMsY2xvbmU6dChcIi4vY2xvbmVwbG90XCIpLHRvU1ZHOnQoXCIuL3Rvc3ZnXCIpLHN2Z1RvSW1nOnQoXCIuL3N2Z3RvaW1nXCIpLHRvSW1hZ2U6dChcIi4vdG9pbWFnZVwiKSxkb3dubG9hZEltYWdlOnQoXCIuL2Rvd25sb2FkXCIpfTtlLmV4cG9ydHM9aX0se1wiLi9jbG9uZXBsb3RcIjo4MzAsXCIuL2Rvd25sb2FkXCI6ODMxLFwiLi9oZWxwZXJzXCI6ODMzLFwiLi9zdmd0b2ltZ1wiOjgzNSxcIi4vdG9pbWFnZVwiOjgzNixcIi4vdG9zdmdcIjo4Mzd9XSw4MzU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vbGliXCIpLGk9dChcImV2ZW50c1wiKS5FdmVudEVtaXR0ZXI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZW1pdHRlcnx8bmV3IGkscj1uZXcgUHJvbWlzZShmdW5jdGlvbihpLGEpe3ZhciBvPXdpbmRvdy5JbWFnZSxzPXQuc3ZnLGw9dC5mb3JtYXR8fFwicG5nXCI7aWYobi5pc0lFKCkmJlwic3ZnXCIhPT1sKXt2YXIgYz1uZXcgRXJyb3IoXCJTb3JyeSBJRSBkb2VzIG5vdCBzdXBwb3J0IGRvd25sb2FkaW5nIGZyb20gY2FudmFzLiBUcnkge2Zvcm1hdDonc3ZnJ30gaW5zdGVhZC5cIik7cmV0dXJuIGEoYyksdC5wcm9taXNlP3I6ZS5lbWl0KFwiZXJyb3JcIixjKX12YXIgdT10LmNhbnZhcyxoPXQuc2NhbGV8fDEsZj10LndpZHRofHwzMDAscD10LmhlaWdodHx8MTUwLGQ9aCpmLGc9aCpwLHY9dS5nZXRDb250ZXh0KFwiMmRcIiksbT1uZXcgbyx5PVwiZGF0YTppbWFnZS9zdmcreG1sLFwiK2VuY29kZVVSSUNvbXBvbmVudChzKTt1LndpZHRoPWQsdS5oZWlnaHQ9ZyxtLm9ubG9hZD1mdW5jdGlvbigpe3ZhciByO3N3aXRjaChcInN2Z1wiIT09bCYmdi5kcmF3SW1hZ2UobSwwLDAsZCxnKSxsKXtjYXNlXCJqcGVnXCI6cj11LnRvRGF0YVVSTChcImltYWdlL2pwZWdcIik7YnJlYWs7Y2FzZVwicG5nXCI6cj11LnRvRGF0YVVSTChcImltYWdlL3BuZ1wiKTticmVhaztjYXNlXCJ3ZWJwXCI6cj11LnRvRGF0YVVSTChcImltYWdlL3dlYnBcIik7YnJlYWs7Y2FzZVwic3ZnXCI6cj15O2JyZWFrO2RlZmF1bHQ6dmFyIG49XCJJbWFnZSBmb3JtYXQgaXMgbm90IGpwZWcsIHBuZywgc3ZnIG9yIHdlYnAuXCI7aWYoYShuZXcgRXJyb3IobikpLCF0LnByb21pc2UpcmV0dXJuIGUuZW1pdChcImVycm9yXCIsbil9aShyKSx0LnByb21pc2V8fGUuZW1pdChcInN1Y2Nlc3NcIixyKX0sbS5vbmVycm9yPWZ1bmN0aW9uKHIpe2lmKGEociksIXQucHJvbWlzZSlyZXR1cm4gZS5lbWl0KFwiZXJyb3JcIixyKX0sbS5zcmM9eX0pO3JldHVybiB0LnByb21pc2U/cjplfX0se1wiLi4vbGliXCI6NzAxLGV2ZW50czo5NX1dLDgzNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJldmVudHNcIikuRXZlbnRFbWl0dGVyLGk9dChcIi4uL3JlZ2lzdHJ5XCIpLGE9dChcIi4uL2xpYlwiKSxvPXQoXCIuL2hlbHBlcnNcIikscz10KFwiLi9jbG9uZXBsb3RcIiksbD10KFwiLi90b3N2Z1wiKSxjPXQoXCIuL3N2Z3RvaW1nXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBuLHU9cyh0LHtmb3JtYXQ6XCJwbmdcIn0pLGg9dS5nZDtoLnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixoLnN0eWxlLmxlZnQ9XCItNTAwMHB4XCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoKTt2YXIgZj1vLmdldFJlZHJhd0Z1bmMoaCk7cmV0dXJuIGkuY2FsbChcInBsb3RcIixoLHUuZGF0YSx1LmxheW91dCx1LmNvbmZpZykudGhlbihmKS50aGVuKGZ1bmN0aW9uKCl7dmFyIHQ9by5nZXREZWxheShoLl9mdWxsTGF5b3V0KTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIHQ9bChoKSxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7bi5pZD1hLnJhbmRzdHIoKSwocj1jKHtmb3JtYXQ6ZS5mb3JtYXQsd2lkdGg6aC5fZnVsbExheW91dC53aWR0aCxoZWlnaHQ6aC5fZnVsbExheW91dC5oZWlnaHQsY2FudmFzOm4sZW1pdHRlcjpyLHN2Zzp0fSkpLmNsZWFuPWZ1bmN0aW9uKCl7aCYmZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChoKX19LHQpfSkuY2F0Y2goZnVuY3Rpb24odCl7ci5lbWl0KFwiZXJyb3JcIix0KX0pLHJ9fSx7XCIuLi9saWJcIjo3MDEsXCIuLi9yZWdpc3RyeVwiOjgyOSxcIi4vY2xvbmVwbG90XCI6ODMwLFwiLi9oZWxwZXJzXCI6ODMzLFwiLi9zdmd0b2ltZ1wiOjgzNSxcIi4vdG9zdmdcIjo4MzcsZXZlbnRzOjk1fV0sODM3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uL2xpYlwiKSxhPXQoXCIuLi9jb21wb25lbnRzL2RyYXdpbmdcIiksbz10KFwiLi4vY29tcG9uZW50cy9jb2xvclwiKSxzPXQoXCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiKSxsPS9cIi9nLGM9bmV3IFJlZ0V4cCgnKFwiVE9CRVNUUklQUEVEKXwoVE9CRVNUUklQUEVEXCIpJyxcImdcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgdSxoPXQuX2Z1bGxMYXlvdXQsZj1oLl9wYXBlcixwPWguX3RvcHBhcGVyLGQ9aC53aWR0aCxnPWguaGVpZ2h0O2YuaW5zZXJ0KFwicmVjdFwiLFwiOmZpcnN0LWNoaWxkXCIpLmNhbGwoYS5zZXRSZWN0LDAsMCxkLGcpLmNhbGwoby5maWxsLGgucGFwZXJfYmdjb2xvcik7dmFyIHY9aC5fYmFzZVBsb3RNb2R1bGVzfHxbXTtmb3IodT0wO3U8di5sZW5ndGg7dSsrKXt2YXIgbT12W3VdO20udG9TVkcmJm0udG9TVkcodCl9aWYocCl7dmFyIHk9cC5ub2RlKCkuY2hpbGROb2Rlcyx4PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHkpO2Zvcih1PTA7dTx4Lmxlbmd0aDt1Kyspe3ZhciBiPXhbdV07Yi5jaGlsZE5vZGVzLmxlbmd0aCYmZi5ub2RlKCkuYXBwZW5kQ2hpbGQoYil9fWguX2RyYWdnZXJzJiZoLl9kcmFnZ2Vycy5yZW1vdmUoKSxmLm5vZGUoKS5zdHlsZS5iYWNrZ3JvdW5kPVwiXCIsZi5zZWxlY3RBbGwoXCJ0ZXh0XCIpLmF0dHIoe1wiZGF0YS11bmZvcm1hdHRlZFwiOm51bGwsXCJkYXRhLW1hdGhcIjpudWxsfSkuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO2lmKFwiaGlkZGVuXCIhPT10aGlzLnN0eWxlLnZpc2liaWxpdHkmJlwibm9uZVwiIT09dGhpcy5zdHlsZS5kaXNwbGF5KXt0LnN0eWxlKHt2aXNpYmlsaXR5Om51bGwsZGlzcGxheTpudWxsfSk7dmFyIGU9dGhpcy5zdHlsZS5mb250RmFtaWx5O2UmJi0xIT09ZS5pbmRleE9mKCdcIicpJiZ0LnN0eWxlKFwiZm9udC1mYW1pbHlcIixlLnJlcGxhY2UobCxcIlRPQkVTVFJJUFBFRFwiKSl9ZWxzZSB0LnJlbW92ZSgpfSksZi5zZWxlY3RBbGwoXCIucG9pbnQsIC5zY2F0dGVycHRzLCAubGVnZW5kZmlsbD5wYXRoLCAubGVnZW5kbGluZXM+cGF0aCwgLmNiZmlsbFwiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT10aGlzLnN0eWxlLmZpbGw7ZSYmLTEhPT1lLmluZGV4T2YoXCJ1cmwoXCIpJiZ0LnN0eWxlKFwiZmlsbFwiLGUucmVwbGFjZShsLFwiVE9CRVNUUklQUEVEXCIpKTt2YXIgcj10aGlzLnN0eWxlLnN0cm9rZTtyJiYtMSE9PXIuaW5kZXhPZihcInVybChcIikmJnQuc3R5bGUoXCJzdHJva2VcIixyLnJlcGxhY2UobCxcIlRPQkVTVFJJUFBFRFwiKSl9KSxcInBkZlwiIT09ZSYmXCJlcHNcIiE9PWV8fGYuc2VsZWN0QWxsKFwiI01hdGhKYXhfU1ZHX2dseXBocyBwYXRoXCIpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwwKSxmLm5vZGUoKS5zZXRBdHRyaWJ1dGVOUyhzLnhtbG5zLFwieG1sbnNcIixzLnN2ZyksZi5ub2RlKCkuc2V0QXR0cmlidXRlTlMocy54bWxucyxcInhtbG5zOnhsaW5rXCIscy54bGluayksXCJzdmdcIj09PWUmJnImJihmLmF0dHIoXCJ3aWR0aFwiLHIqZCksZi5hdHRyKFwiaGVpZ2h0XCIscipnKSxmLmF0dHIoXCJ2aWV3Qm94XCIsXCIwIDAgXCIrZCtcIiBcIitnKSk7dmFyIF89KG5ldyB3aW5kb3cuWE1MU2VyaWFsaXplcikuc2VyaWFsaXplVG9TdHJpbmcoZi5ub2RlKCkpO3JldHVybiBfPWZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KFwiYm9keVwiKS5hcHBlbmQoXCJkaXZcIikuc3R5bGUoe2Rpc3BsYXk6XCJub25lXCJ9KS5odG1sKFwiXCIpLHI9dC5yZXBsYWNlKC8oJlteO10qOykvZ2ksZnVuY3Rpb24odCl7cmV0dXJuXCImbHQ7XCI9PT10P1wiJiM2MDtcIjpcIiZydDtcIj09PXQ/XCImIzYyO1wiOi0xIT09dC5pbmRleE9mKFwiPFwiKXx8LTEhPT10LmluZGV4T2YoXCI+XCIpP1wiXCI6ZS5odG1sKHQpLnRleHQoKX0pO3JldHVybiBlLnJlbW92ZSgpLHJ9KF8pLF89KF89Xy5yZXBsYWNlKC8mKD8hXFx3Kzt8XFwjWzAtOV0rO3wgXFwjeFswLTlBLUZdKzspL2csXCImYW1wO1wiKSkucmVwbGFjZShjLFwiJ1wiKSxpLmlzSUUoKSYmKF89KF89KF89Xy5yZXBsYWNlKC9cIi9naSxcIidcIikpLnJlcGxhY2UoLyhcXCgnIykoW14nXSopKCdcXCkpL2dpLCcoXCIjJDJcIiknKSkucmVwbGFjZSgvKFxcXFwnKS9naSwnXCInKSksX319LHtcIi4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiOjY3OSxcIi4uL2xpYlwiOjcwMSxkMzoxNTV9XSw4Mzg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLm1lcmdlQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspdFtyXS5pPXI7bihlLnRleHQsdCxcInR4XCIpLG4oZS5ob3ZlcnRleHQsdCxcImh0eFwiKTt2YXIgaT1lLm1hcmtlcjtpZihpKXtuKGkub3BhY2l0eSx0LFwibW9cIiksbihpLmNvbG9yLHQsXCJtY1wiKTt2YXIgYT1pLmxpbmU7YSYmKG4oYS5jb2xvcix0LFwibWxjXCIpLG4oYS53aWR0aCx0LFwibWx3XCIpKX19fSx7XCIuLi8uLi9saWJcIjo3MDF9XSw4Mzk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIiksbD10KFwiLi9jb25zdGFudHMuanNcIiksYz10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LHU9cyh7ZWRpdFR5cGU6XCJjYWxjXCIsYXJyYXlPazohMCxjb2xvckVkaXRUeXBlOlwic3R5bGVcIn0pLGg9Yyh7fSxuLm1hcmtlci5saW5lLndpZHRoLHtkZmx0OjB9KSxmPWMoe3dpZHRoOmgsZWRpdFR5cGU6XCJjYWxjXCJ9LGEoXCJtYXJrZXIubGluZVwiKSkscD1jKHtsaW5lOmYsZWRpdFR5cGU6XCJjYWxjXCJ9LGEoXCJtYXJrZXJcIikse2NvbG9yYmFyOm8sb3BhY2l0eTp7dmFsVHlwZTpcIm51bWJlclwiLGFycmF5T2s6ITAsZGZsdDoxLG1pbjowLG1heDoxLGVkaXRUeXBlOlwic3R5bGVcIn19KTtlLmV4cG9ydHM9e3g6bi54LHgwOm4ueDAsZHg6bi5keCx5Om4ueSx5MDpuLnkwLGR5Om4uZHksdGV4dDpuLnRleHQsaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LGhvdmVydGVtcGxhdGU6aSh7fSx7a2V5czpsLmV2ZW50RGF0YUtleXN9KSx0ZXh0cG9zaXRpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImluc2lkZVwiLFwib3V0c2lkZVwiLFwiYXV0b1wiLFwibm9uZVwiXSxkZmx0Olwibm9uZVwiLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LHRleHRmb250OmMoe30sdSx7fSksaW5zaWRldGV4dGZvbnQ6Yyh7fSx1LHt9KSxvdXRzaWRldGV4dGZvbnQ6Yyh7fSx1LHt9KSxjb25zdHJhaW50ZXh0Ont2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJpbnNpZGVcIixcIm91dHNpZGVcIixcImJvdGhcIixcIm5vbmVcIl0sZGZsdDpcImJvdGhcIixlZGl0VHlwZTpcImNhbGNcIn0sY2xpcG9uYXhpczpjKHt9LG4uY2xpcG9uYXhpcyx7fSksb3JpZW50YXRpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInZcIixcImhcIl0sZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LGJhc2U6e3ZhbFR5cGU6XCJhbnlcIixkZmx0Om51bGwsYXJyYXlPazohMCxlZGl0VHlwZTpcImNhbGNcIn0sb2Zmc2V0Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDpudWxsLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDpudWxsLG1pbjowLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LG1hcmtlcjpwLG9mZnNldGdyb3VwOnt2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwiY2FsY1wifSxhbGlnbm1lbnRncm91cDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcImNhbGNcIn0sc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTpuLnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LGNvbG9yOm4uc2VsZWN0ZWQubWFya2VyLmNvbG9yLGVkaXRUeXBlOlwic3R5bGVcIn0sdGV4dGZvbnQ6bi5zZWxlY3RlZC50ZXh0Zm9udCxlZGl0VHlwZTpcInN0eWxlXCJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTpuLnVuc2VsZWN0ZWQubWFya2VyLm9wYWNpdHksY29sb3I6bi51bnNlbGVjdGVkLm1hcmtlci5jb2xvcixlZGl0VHlwZTpcInN0eWxlXCJ9LHRleHRmb250Om4udW5zZWxlY3RlZC50ZXh0Zm9udCxlZGl0VHlwZTpcInN0eWxlXCJ9LHI6bi5yLHQ6bi50LF9kZXByZWNhdGVkOntiYXJkaXI6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsZWRpdFR5cGU6XCJjYWxjXCIsdmFsdWVzOltcInZcIixcImhcIl19fX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCI6Nzc1LFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCI6MTA1MixcIi4vY29uc3RhbnRzLmpzXCI6ODQxfV0sODQwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzXCIpLmhhc0NvbG9yc2NhbGUsYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIiksbz10KFwiLi9hcnJheXNfdG9fY2FsY2RhdGFcIikscz10KFwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvblwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixsLGM9bi5nZXRGcm9tSWQodCxlLnhheGlzfHxcInhcIiksdT1uLmdldEZyb21JZCh0LGUueWF4aXN8fFwieVwiKTtcImhcIj09PWUub3JpZW50YXRpb24/KHI9Yy5tYWtlQ2FsY2RhdGEoZSxcInhcIiksbD11Lm1ha2VDYWxjZGF0YShlLFwieVwiKSk6KHI9dS5tYWtlQ2FsY2RhdGEoZSxcInlcIiksbD1jLm1ha2VDYWxjZGF0YShlLFwieFwiKSk7Zm9yKHZhciBoPU1hdGgubWluKGwubGVuZ3RoLHIubGVuZ3RoKSxmPW5ldyBBcnJheShoKSxwPTA7cDxoO3ArKylmW3BdPXtwOmxbcF0sczpyW3BdfSxlLmlkcyYmKGZbcF0uaWQ9U3RyaW5nKGUuaWRzW3BdKSk7cmV0dXJuIGkoZSxcIm1hcmtlclwiKSYmYSh0LGUse3ZhbHM6ZS5tYXJrZXIuY29sb3IsY29udGFpbmVyU3RyOlwibWFya2VyXCIsY0xldHRlcjpcImNcIn0pLGkoZSxcIm1hcmtlci5saW5lXCIpJiZhKHQsZSx7dmFsczplLm1hcmtlci5saW5lLmNvbG9yLGNvbnRhaW5lclN0cjpcIm1hcmtlci5saW5lXCIsY0xldHRlcjpcImNcIn0pLG8oZixlKSxzKGYsZSksZn19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCI6NTg2LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnNcIjo1ODksXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIjoxMDU0LFwiLi9hcnJheXNfdG9fY2FsY2RhdGFcIjo4Mzh9XSw4NDE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e2V2ZW50RGF0YUtleXM6W119fSx7fV0sODQyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL2xpYlwiKS5pc0FycmF5T3JUeXBlZEFycmF5LGE9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNLG89dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLHM9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGw9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiKS5nZXRBeGlzR3JvdXAsYz10KFwiLi9zaWV2ZS5qc1wiKTtmdW5jdGlvbiB1KHQsZSxyLG8pe2lmKG8ubGVuZ3RoKXt2YXIgdSxiLF8sdyxrPXQuX2Z1bGxMYXlvdXQuYmFybW9kZTtzd2l0Y2goZnVuY3Rpb24odCxlLHIsYSl7dmFyIG8scztmb3Iobz0wO288YS5sZW5ndGg7bysrKXt2YXIgbCxjPWFbb10sdT1jWzBdLnRyYWNlLGg9dS5iYXNlLGY9XCJoXCI9PT11Lm9yaWVudGF0aW9uP3UueGNhbGVuZGFyOnUueWNhbGVuZGFyLHA9XCJjYXRlZ29yeVwiPT09ci50eXBlfHxcIm11bHRpY2F0ZWdvcnlcIj09PXIudHlwZT9mdW5jdGlvbigpe3JldHVybiBudWxsfTpyLmQyYztpZihpKGgpKXtmb3Iocz0wO3M8TWF0aC5taW4oaC5sZW5ndGgsYy5sZW5ndGgpO3MrKylsPXAoaFtzXSwwLGYpLG4obCk/KGNbc10uYj0rbCxjW3NdLmhhc0I9MSk6Y1tzXS5iPTA7Zm9yKDtzPGMubGVuZ3RoO3MrKyljW3NdLmI9MH1lbHNle2w9cChoLDAsZik7dmFyIGQ9bihsKTtmb3IobD1kP2w6MCxzPTA7czxjLmxlbmd0aDtzKyspY1tzXS5iPWwsZCYmKGNbc10uaGFzQj0xKX19fSgwLDAscixvKSxrKXtjYXNlXCJvdmVybGF5XCI6aCh0LGUscixvKTticmVhaztjYXNlXCJncm91cFwiOmZvcih1PVtdLGI9W10sXz0wO188by5sZW5ndGg7XysrKXZvaWQgMD09PSh3PW9bX10pWzBdLnRyYWNlLm9mZnNldD9iLnB1c2godyk6dS5wdXNoKHcpO2IubGVuZ3RoJiZmdW5jdGlvbih0LGUscixuKXt2YXIgaT10Ll9mdWxsTGF5b3V0LmJhcm5vcm0sbz1uZXcgYyhuLHtzZXBOZWdWYWw6ITEsb3ZlcmxhcE5vTWVyZ2U6IWl9KTsoZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj10Ll9mdWxsTGF5b3V0LGk9bi5iYXJnYXAsYT1uLmJhcmdyb3VwZ2FwfHwwLG89ci5wb3NpdGlvbnMscz1yLmRpc3RpbmN0UG9zaXRpb25zLGM9ci5taW5EaWZmLHU9ci50cmFjZXMsaD11Lmxlbmd0aCxmPW8ubGVuZ3RoIT09cy5sZW5ndGgsdj1jKigxLWkpLG09bChuLGUuX2lkKSt1WzBdWzBdLnRyYWNlLm9yaWVudGF0aW9uLHk9bi5fYWxpZ25tZW50T3B0c1ttXXx8e30seD0wO3g8aDt4Kyspe3ZhciBiLF8sdz11W3hdLGs9d1swXS50cmFjZSxBPXlbay5hbGlnbm1lbnRncm91cF18fHt9LFQ9T2JqZWN0LmtleXMoQS5vZmZzZXRHcm91cHN8fHt9KS5sZW5ndGgsTT0oYj1UP3YvVDpmP3YvaDp2KSooMS1hKTtfPVQ/KCgyKmsuX29mZnNldEluZGV4KzEtVCkqYi1NKS8yOmY/KCgyKngrMS1oKSpiLU0pLzI6LU0vMjt2YXIgUz13WzBdLnQ7Uy5iYXJ3aWR0aD1NLFMucG9mZnNldD1fLFMuYmFyZ3JvdXB3aWR0aD12LFMuYmFyZGVsdGE9Y31yLmJpbldpZHRoPXVbMF1bMF0udC5iYXJ3aWR0aC8xMDAscChyKSxkKHQsZSxyKSxnKHQsZSxyLGYpfSkodCxlLG8pLGZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ci50cmFjZXMsaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz1uW2ldLHM9b1swXS50cmFjZTtpZih2b2lkIDA9PT1zLmJhc2UpZm9yKHZhciBsPW5ldyBjKFtvXSx7c2VwTmVnVmFsOiEwLG92ZXJsYXBOb01lcmdlOiEwfSksdT0wO3U8by5sZW5ndGg7dSsrKXt2YXIgaD1vW3VdO2lmKGgucCE9PWEpe3ZhciBmPWwucHV0KGgucCxoLmIraC5zKTtmJiYoaC5iPWYpfX19fSgwLDAsbyksaT8obSh0LHIsbykseSh0LHIsbykpOnYodCxyLG8pfSh0LGUscixiKSx1Lmxlbmd0aCYmaCh0LGUscix1KTticmVhaztjYXNlXCJzdGFja1wiOmNhc2VcInJlbGF0aXZlXCI6Zm9yKHU9W10sYj1bXSxfPTA7XzxvLmxlbmd0aDtfKyspdm9pZCAwPT09KHc9b1tfXSlbMF0udHJhY2UuYmFzZT9iLnB1c2godyk6dS5wdXNoKHcpO2IubGVuZ3RoJiZmdW5jdGlvbih0LGUscixuKXt2YXIgaT10Ll9mdWxsTGF5b3V0LG89aS5iYXJtb2RlLGw9aS5iYXJub3JtLHU9bmV3IGMobix7c2VwTmVnVmFsOlwicmVsYXRpdmVcIj09PW8sb3ZlcmxhcE5vTWVyZ2U6IShsfHxcInN0YWNrXCI9PT1vfHxcInJlbGF0aXZlXCI9PT1vKX0pO2YodCxlLHUpLGZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC5fZnVsbExheW91dC5iYXJub3JtLGk9eChlKSxvPXIudHJhY2VzLGw9MDtsPG8ubGVuZ3RoO2wrKyl7Zm9yKHZhciBjPW9bbF0sdT1jWzBdLnRyYWNlLGg9W10sZj0wO2Y8Yy5sZW5ndGg7ZisrKXt2YXIgcD1jW2ZdO2lmKHAucyE9PWEpe3ZhciBkPXIucHV0KHAucCxwLmIrcC5zKSxnPWQrcC5iK3AucztwLmI9ZCxwW2ldPWcsbnx8KGgucHVzaChnKSxwLmhhc0ImJmgucHVzaChkKSl9fW58fCh1Ll9leHRyZW1lc1tlLl9pZF09cy5maW5kRXh0cmVtZXMoZSxoLHt0b3plcm86ITAscGFkZGVkOiEwfSkpfX0odCxyLHUpO2Zvcih2YXIgaD0wO2g8bi5sZW5ndGg7aCsrKWZvcih2YXIgcD1uW2hdLGQ9MDtkPHAubGVuZ3RoO2QrKyl7dmFyIGc9cFtkXTtpZihnLnMhPT1hKXt2YXIgdj1nLmIrZy5zPT09dS5nZXQoZy5wLGcucyk7diYmKGcuX291dG1vc3Q9ITApfX1sJiZ5KHQscix1KX0odCxlLHIsYiksdS5sZW5ndGgmJmgodCxlLHIsdSl9IWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLG89eChlKSxzPXt9LGw9MS8wLGM9LTEvMDtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKWZvcihhPXRbcl0saT0wO2k8YS5sZW5ndGg7aSsrKXt2YXIgdT1hW2ldLnA7bih1KSYmKGw9TWF0aC5taW4obCx1KSxjPU1hdGgubWF4KGMsdSkpfXZhciBoPTFlNC8oYy1sKSxmPXMucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyhNYXRoLnJvdW5kKGgqKHQtbCkpKX07Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7KGE9dFtyXSlbMF0udC5leHRlbnRzPXM7dmFyIHA9YVswXS50LnBvZmZzZXQsZD1BcnJheS5pc0FycmF5KHApO2ZvcihpPTA7aTxhLmxlbmd0aDtpKyspe3ZhciBnPWFbaV0sdj1nW29dLWcudy8yO2lmKG4odikpe3ZhciBtPWdbb10rZy53LzIseT1mKGcucCk7c1t5XT9zW3ldPVtNYXRoLm1pbih2LHNbeV1bMF0pLE1hdGgubWF4KG0sc1t5XVsxXSldOnNbeV09W3YsbV19Zy5wMD1nLnArKGQ/cFtpXTpwKSxnLnAxPWcucDArZy53LGcuczA9Zy5iLGcuczE9Zy5zMCtnLnN9fX0obyxlKX19ZnVuY3Rpb24gaCh0LGUscixuKXtmb3IodmFyIGk9dC5fZnVsbExheW91dC5iYXJub3JtLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXSxzPW5ldyBjKFtvXSx7c2VwTmVnVmFsOiExLG92ZXJsYXBOb01lcmdlOiFpfSk7Zih0LGUscyksaT8obSh0LHIscykseSh0LHIscykpOnYodCxyLHMpfX1mdW5jdGlvbiBmKHQsZSxyKXtmb3IodmFyIG49dC5fZnVsbExheW91dCxpPW4uYmFyZ2FwLGE9bi5iYXJncm91cGdhcHx8MCxvPXIubWluRGlmZixzPXIudHJhY2VzLGw9byooMS1pKSxjPWwqKDEtYSksdT0tYy8yLGg9MDtoPHMubGVuZ3RoO2grKyl7dmFyIGY9c1toXVswXS50O2YuYmFyd2lkdGg9YyxmLnBvZmZzZXQ9dSxmLmJhcmdyb3Vwd2lkdGg9bCxmLmJhcmRlbHRhPW99ci5iaW5XaWR0aD1zWzBdWzBdLnQuYmFyd2lkdGgvMTAwLHAociksZCh0LGUsciksZyh0LGUscil9ZnVuY3Rpb24gcCh0KXt2YXIgZSxyLGE9dC50cmFjZXM7Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKyl7dmFyIG8scz1hW2VdLGw9c1swXSxjPWwudHJhY2UsdT1sLnQsaD1jLl9vZmZzZXR8fGMub2Zmc2V0LGY9dS5wb2Zmc2V0O2lmKGkoaCkpe2ZvcihvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGgsMCxzLmxlbmd0aCkscj0wO3I8by5sZW5ndGg7cisrKW4ob1tyXSl8fChvW3JdPWYpO2ZvcihyPW8ubGVuZ3RoO3I8cy5sZW5ndGg7cisrKW8ucHVzaChmKTt1LnBvZmZzZXQ9b31lbHNlIHZvaWQgMCE9PWgmJih1LnBvZmZzZXQ9aCk7dmFyIHA9Yy5fd2lkdGh8fGMud2lkdGgsZD11LmJhcndpZHRoO2lmKGkocCkpe3ZhciBnPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHAsMCxzLmxlbmd0aCk7Zm9yKHI9MDtyPGcubGVuZ3RoO3IrKyluKGdbcl0pfHwoZ1tyXT1kKTtmb3Iocj1nLmxlbmd0aDtyPHMubGVuZ3RoO3IrKylnLnB1c2goZCk7aWYodS5iYXJ3aWR0aD1nLHZvaWQgMD09PWgpe2ZvcihvPVtdLHI9MDtyPHMubGVuZ3RoO3IrKylvLnB1c2goZisoZC1nW3JdKS8yKTt1LnBvZmZzZXQ9b319ZWxzZSB2b2lkIDAhPT1wJiYodS5iYXJ3aWR0aD1wLHZvaWQgMD09PWgmJih1LnBvZmZzZXQ9ZisoZC1wKS8yKSl9fWZ1bmN0aW9uIGQodCxlLHIpe2Zvcih2YXIgbj1yLnRyYWNlcyxpPXgoZSksYT0wO2E8bi5sZW5ndGg7YSsrKWZvcih2YXIgbz1uW2FdLHM9b1swXS50LGw9cy5wb2Zmc2V0LGM9QXJyYXkuaXNBcnJheShsKSx1PXMuYmFyd2lkdGgsaD1BcnJheS5pc0FycmF5KHUpLGY9MDtmPG8ubGVuZ3RoO2YrKyl7dmFyIHA9b1tmXSxkPXAudz1oP3VbZl06dTtwW2ldPXAucCsoYz9sW2ZdOmwpK2QvMn19ZnVuY3Rpb24gZyh0LGUscixuKXt2YXIgaT1yLnRyYWNlcyxhPXIubWluRGlmZi8yO3MubWluRHRpY2soZSxyLm1pbkRpZmYsci5kaXN0aW5jdFBvc2l0aW9uc1swXSxuKTtmb3IodmFyIG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIGwsYyx1LGgsZj1pW29dLHA9ZlswXSxkPXAudHJhY2UsZz1bXTtmb3IoaD0wO2g8Zi5sZW5ndGg7aCsrKWM9KGw9ZltoXSkucC1hLHU9bC5wK2EsZy5wdXNoKGMsdSk7aWYoZC53aWR0aHx8ZC5vZmZzZXQpe3ZhciB2PXAudCxtPXYucG9mZnNldCx5PXYuYmFyd2lkdGgseD1BcnJheS5pc0FycmF5KG0pLGI9QXJyYXkuaXNBcnJheSh5KTtmb3IoaD0wO2g8Zi5sZW5ndGg7aCsrKXtsPWZbaF07dmFyIF89eD9tW2hdOm0sdz1iP3lbaF06eTt1PShjPWwucCtfKSt3LGcucHVzaChjLHUpfX1kLl9leHRyZW1lc1tlLl9pZF09cy5maW5kRXh0cmVtZXMoZSxnLHtwYWRkZWQ6ITF9KX19ZnVuY3Rpb24gdih0LGUscil7Zm9yKHZhciBuPXIudHJhY2VzLGk9eChlKSxhPTA7YTxuLmxlbmd0aDthKyspe2Zvcih2YXIgbz1uW2FdLGw9b1swXS50cmFjZSxjPVtdLHU9ITAsaD0wO2g8by5sZW5ndGg7aCsrKXt2YXIgZj1vW2hdLHA9Zi5iLGQ9cCtmLnM7ZltpXT1kLGMucHVzaChkKSxmLmhhc0ImJmMucHVzaChwKSxmLmhhc0ImJmYuYj4wJiZmLnM+MHx8KHU9ITEpfWwuX2V4dHJlbWVzW2UuX2lkXT1zLmZpbmRFeHRyZW1lcyhlLGMse3RvemVybzohdSxwYWRkZWQ6ITB9KX19ZnVuY3Rpb24gbSh0LGUscil7Zm9yKHZhciBuPXIudHJhY2VzLGk9MDtpPG4ubGVuZ3RoO2krKylmb3IodmFyIG89bltpXSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107bC5zIT09YSYmci5wdXQobC5wLGwuYitsLnMpfX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgaT10Ll9mdWxsTGF5b3V0LG89ci50cmFjZXMsbD14KGUpLGM9XCJmcmFjdGlvblwiPT09aS5iYXJub3JtPzE6MTAwLHU9Yy8xZTksaD1lLmwyYyhlLmMybCgwKSksZj1cInN0YWNrXCI9PT1pLmJhcm1vZGU/YzpoO2Z1bmN0aW9uIHAodCl7cmV0dXJuIG4oZS5jMmwodCkpJiYodDxoLXV8fHQ+Zit1fHwhbihoKSl9Zm9yKHZhciBkPTA7ZDxvLmxlbmd0aDtkKyspe2Zvcih2YXIgZz1vW2RdLHY9Z1swXS50cmFjZSxtPVtdLHk9ITAsYj0hMSxfPTA7XzxnLmxlbmd0aDtfKyspe3ZhciB3PWdbX107aWYody5zIT09YSl7dmFyIGs9TWF0aC5hYnMoYy9yLmdldCh3LnAsdy5zKSk7dy5iKj1rLHcucyo9azt2YXIgQT13LmIsVD1BK3cuczt3W2xdPVQsbS5wdXNoKFQpLGI9Ynx8cChUKSx3Lmhhc0ImJihtLnB1c2goQSksYj1ifHxwKEEpKSx3Lmhhc0ImJncuYj4wJiZ3LnM+MHx8KHk9ITEpfX12Ll9leHRyZW1lc1tlLl9pZF09cy5maW5kRXh0cmVtZXMoZSxtLHt0b3plcm86IXkscGFkZGVkOmJ9KX19ZnVuY3Rpb24geCh0KXtyZXR1cm4gdC5faWQuY2hhckF0KDApfWUuZXhwb3J0cz17Y3Jvc3NUcmFjZUNhbGM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS54YXhpcyxuPWUueWF4aXMsaT10Ll9mdWxsRGF0YSxhPXQuY2FsY2RhdGEscz1bXSxsPVtdLGM9MDtjPGkubGVuZ3RoO2MrKyl7dmFyIGg9aVtjXTshMD09PWgudmlzaWJsZSYmby50cmFjZUlzKGgsXCJiYXJcIikmJmgueGF4aXM9PT1yLl9pZCYmaC55YXhpcz09PW4uX2lkJiYoXCJoXCI9PT1oLm9yaWVudGF0aW9uP3MucHVzaChhW2NdKTpsLnB1c2goYVtjXSkpfXUodCxyLG4sbCksdSh0LG4scixzKX0sc2V0R3JvdXBQb3NpdGlvbnM6dX19LHtcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiOjc1MixcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9zaWV2ZS5qc1wiOjg1MSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sODQzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGE9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLG89dChcIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHNcIikscz10KFwiLi9zdHlsZV9kZWZhdWx0c1wiKSxsPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIikuZ2V0QXhpc0dyb3VwLGM9dChcIi4vYXR0cmlidXRlc1wiKSx1PW4uY29lcmNlRm9udDtmdW5jdGlvbiBoKHQsZSxyLG4pe3ZhciBpPWUub3JpZW50YXRpb24sYT1lW3t2OlwieFwiLGg6XCJ5XCJ9W2ldK1wiYXhpc1wiXSxvPWwocixhKStpLHM9ci5fYWxpZ25tZW50T3B0c3x8e30sYz1uKFwiYWxpZ25tZW50Z3JvdXBcIiksdT1zW29dO3V8fCh1PXNbb109e30pO3ZhciBoPXVbY107aD9oLnRyYWNlcy5wdXNoKGUpOmg9dVtjXT17dHJhY2VzOltlXSxhbGlnbm1lbnRJbmRleDpPYmplY3Qua2V5cyh1KS5sZW5ndGgsb2Zmc2V0R3JvdXBzOnt9fTt2YXIgZj1uKFwib2Zmc2V0Z3JvdXBcIikscD1oLm9mZnNldEdyb3VwcyxkPXBbZl07ZiYmKGR8fChkPXBbZl09e29mZnNldEluZGV4Ok9iamVjdC5rZXlzKHApLmxlbmd0aH0pLGUuX29mZnNldEluZGV4PWQub2Zmc2V0SW5kZXgpfWZ1bmN0aW9uIGYodCxlLHIsaSxhKXt2YXIgbz1pKFwidGV4dHBvc2l0aW9uXCIpLHM9QXJyYXkuaXNBcnJheShvKXx8XCJhdXRvXCI9PT1vLGw9c3x8XCJvdXRzaWRlXCI9PT1vO2lmKHN8fFwiaW5zaWRlXCI9PT1vfHxsKXt2YXIgYz11KGksXCJ0ZXh0Zm9udFwiLHIuZm9udCksaD1uLmV4dGVuZEZsYXQoe30sYyk7ISh0LnRleHRmb250JiZ0LnRleHRmb250LmNvbG9yKSYmZGVsZXRlIGguY29sb3IsdShpLFwiaW5zaWRldGV4dGZvbnRcIixoKSxsJiZ1KGksXCJvdXRzaWRldGV4dGZvbnRcIixjKSxpKFwiY29uc3RyYWludGV4dFwiKSxhJiYoaShcInNlbGVjdGVkLnRleHRmb250LmNvbG9yXCIpLGkoXCJ1bnNlbGVjdGVkLnRleHRmb250LmNvbG9yXCIpKSxpKFwiY2xpcG9uYXhpc1wiKX19ZS5leHBvcnRzPXtzdXBwbHlEZWZhdWx0czpmdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiB1KHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxjLHIsaSl9aWYobyh0LGUsbCx1KSl7dShcIm9yaWVudGF0aW9uXCIsZS54JiYhZS55P1wiaFwiOlwidlwiKSx1KFwiYmFzZVwiKSx1KFwib2Zmc2V0XCIpLHUoXCJ3aWR0aFwiKSx1KFwidGV4dFwiKSx1KFwiaG92ZXJ0ZXh0XCIpLHUoXCJob3ZlcnRlbXBsYXRlXCIpLGYodCwwLGwsdSwhMCkscyh0LGUsdSxyLGwpO3ZhciBoPShlLm1hcmtlci5saW5lfHx7fSkuY29sb3IscD1hLmdldENvbXBvbmVudE1ldGhvZChcImVycm9yYmFyc1wiLFwic3VwcGx5RGVmYXVsdHNcIik7cCh0LGUsaHx8aS5kZWZhdWx0TGluZSx7YXhpczpcInlcIn0pLHAodCxlLGh8fGkuZGVmYXVsdExpbmUse2F4aXM6XCJ4XCIsaW5oZXJpdDpcInlcIn0pLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHUpfWVsc2UgZS52aXNpYmxlPSExfSxjcm9zc1RyYWNlRGVmYXVsdHM6ZnVuY3Rpb24odCxlKXt2YXIgcjtmdW5jdGlvbiBpKHQpe3JldHVybiBuLmNvZXJjZShyLl9pbnB1dCxyLGMsdCl9aWYoXCJncm91cFwiPT09ZS5iYXJtb2RlKWZvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKVwiYmFyXCI9PT0ocj10W2FdKS50eXBlJiYoci5faW5wdXQsaCgwLHIsZSxpKSl9LGhhbmRsZUdyb3VwaW5nRGVmYXVsdHM6aCxoYW5kbGVUZXh0OmZ9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCI6NzUyLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzXCI6MTA3OCxcIi4vYXR0cmlidXRlc1wiOjgzOSxcIi4vc3R5bGVfZGVmYXVsdHNcIjo4NTN9XSw4NDQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwidGlueWNvbG9yMlwiKTtyLmNvZXJjZVN0cmluZz1mdW5jdGlvbih0LGUscil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpe2lmKGV8fCF0Lm5vQmxhbmspcmV0dXJuIGV9ZWxzZSBpZihcIm51bWJlclwiPT10eXBlb2YgZSYmIXQuc3RyaWN0KXJldHVybiBTdHJpbmcoZSk7cmV0dXJuIHZvaWQgMCE9PXI/cjp0LmRmbHR9LHIuY29lcmNlTnVtYmVyPWZ1bmN0aW9uKHQsZSxyKXtpZihuKGUpKXtlPStlO3ZhciBpPXQubWluLGE9dC5tYXg7aWYoISh2b2lkIDAhPT1pJiZlPGl8fHZvaWQgMCE9PWEmJmU+YSkpcmV0dXJuIGV9cmV0dXJuIHZvaWQgMCE9PXI/cjp0LmRmbHR9LHIuY29lcmNlQ29sb3I9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBpKGUpLmlzVmFsaWQoKT9lOnZvaWQgMCE9PXI/cjp0LmRmbHR9LHIuY29lcmNlRW51bWVyYXRlZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQuY29lcmNlTnVtYmVyJiYoZT0rZSksLTEhPT10LnZhbHVlcy5pbmRleE9mKGUpP2U6dm9pZCAwIT09cj9yOnQuZGZsdH0sci5nZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBBcnJheS5pc0FycmF5KHQpP2U8dC5sZW5ndGgmJihyPXRbZV0pOnI9dCxyfX0se1wiZmFzdC1pc251bWVyaWNcIjoyMjIsdGlueWNvbG9yMjo1MjJ9XSw4NDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxpPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLG89dChcIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0XCIpO2Z1bmN0aW9uIHModCxlLHIsaSl7dmFyIGEscyxsLGMsdSxoLGYscD10LmNkLGQ9cFswXS50cmFjZSxnPXBbMF0udCx2PVwiY2xvc2VzdFwiPT09aSxtPXQubWF4SG92ZXJEaXN0YW5jZSx5PXQubWF4U3Bpa2VEaXN0YW5jZTtmdW5jdGlvbiB4KHQpe3JldHVybiB0W2xdLXQudy8yfWZ1bmN0aW9uIGIodCl7cmV0dXJuIHRbbF0rdC53LzJ9dmFyIF89dj94OmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1pbih4KHQpLHQucC1nLmJhcmRlbHRhLzIpfSx3PXY/YjpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoYih0KSx0LnArZy5iYXJkZWx0YS8yKX07ZnVuY3Rpb24gayh0LGUpe3JldHVybiBuLmluYm94KHQtYSxlLWEsbStNYXRoLm1pbigxLE1hdGguYWJzKGUtdCkvZiktMSl9ZnVuY3Rpb24gQSh0KXtyZXR1cm4gayhfKHQpLHcodCkpfWZ1bmN0aW9uIFQodCl7cmV0dXJuIG4uaW5ib3godC5iLXMsdFtjXS1zLG0rKHRbY10tcykvKHRbY10tdC5iKS0xKX1cImhcIj09PWQub3JpZW50YXRpb24/KGE9cixzPWUsbD1cInlcIixjPVwieFwiLHU9VCxoPUEpOihhPWUscz1yLGw9XCJ4XCIsYz1cInlcIixoPVQsdT1BKTt2YXIgTT10W2wrXCJhXCJdLFM9dFtjK1wiYVwiXTtmPU1hdGguYWJzKE0ucjJjKE0ucmFuZ2VbMV0pLU0ucjJjKE0ucmFuZ2VbMF0pKTt2YXIgRT1uLmdldERpc3RhbmNlRnVuY3Rpb24oaSx1LGgsZnVuY3Rpb24odCl7cmV0dXJuKHUodCkraCh0KSkvMn0pO2lmKG4uZ2V0Q2xvc2VzdChwLEUsdCksITEhPT10LmluZGV4KXt2fHwoXz1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5taW4oeCh0KSx0LnAtZy5iYXJncm91cHdpZHRoLzIpfSx3PWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heChiKHQpLHQucCtnLmJhcmdyb3Vwd2lkdGgvMil9KTt2YXIgQz1wW3QuaW5kZXhdLEw9ZC5iYXNlP0MuYitDLnM6Qy5zO3RbYytcIjBcIl09dFtjK1wiMVwiXT1TLmMycChDW2NdLCEwKSx0W2MrXCJMYWJlbFZhbFwiXT1MO3ZhciB6PWcuZXh0ZW50c1tnLmV4dGVudHMucm91bmQoQy5wKV07cmV0dXJuIHRbbCtcIjBcIl09TS5jMnAodj9fKEMpOnpbMF0sITApLHRbbCtcIjFcIl09TS5jMnAodj93KEMpOnpbMV0sITApLHRbbCtcIkxhYmVsVmFsXCJdPUMucCx0LnNwaWtlRGlzdGFuY2U9KFQoQykrZnVuY3Rpb24odCl7cmV0dXJuIGsoeCh0KSxiKHQpKX0oQykpLzIreS1tLHRbbCtcIlNwaWtlXCJdPU0uYzJwKEMucCwhMCksbyhDLGQsdCksdC5ob3ZlcnRlbXBsYXRlPWQuaG92ZXJ0ZW1wbGF0ZSx0fX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9ZS5tY2N8fHQubWFya2VyLmNvbG9yLG49ZS5tbGNjfHx0Lm1hcmtlci5saW5lLmNvbG9yLGk9ZS5tbHd8fHQubWFya2VyLmxpbmUud2lkdGg7cmV0dXJuIGEub3BhY2l0eShyKT9yOmEub3BhY2l0eShuKSYmaT9uOnZvaWQgMH1lLmV4cG9ydHM9e2hvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXModCxlLHIsbik7aWYoYSl7dmFyIG89YS5jZCxjPW9bMF0udHJhY2UsdT1vW2EuaW5kZXhdO3JldHVybiBhLmNvbG9yPWwoYyx1KSxpLmdldENvbXBvbmVudE1ldGhvZChcImVycm9yYmFyc1wiLFwiaG92ZXJJbmZvXCIpKHUsYyxhKSxbYV19fSxob3Zlck9uQmFyczpzLGdldFRyYWNlQ29sb3I6bH19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2Z4XCI6NjE3LFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dFwiOjEwNjB9XSw4NDY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLmxheW91dEF0dHJpYnV0ZXM9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKS5zdXBwbHlEZWZhdWx0cyxuLmNyb3NzVHJhY2VEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKS5jcm9zc1RyYWNlRGVmYXVsdHMsbi5zdXBwbHlMYXlvdXREZWZhdWx0cz10KFwiLi9sYXlvdXRfZGVmYXVsdHNcIiksbi5jYWxjPXQoXCIuL2NhbGNcIiksbi5jcm9zc1RyYWNlQ2FsYz10KFwiLi9jcm9zc190cmFjZV9jYWxjXCIpLmNyb3NzVHJhY2VDYWxjLG4uY29sb3JiYXI9dChcIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyXCIpLG4uYXJyYXlzVG9DYWxjZGF0YT10KFwiLi9hcnJheXNfdG9fY2FsY2RhdGFcIiksbi5wbG90PXQoXCIuL3Bsb3RcIiksbi5zdHlsZT10KFwiLi9zdHlsZVwiKS5zdHlsZSxuLnN0eWxlT25TZWxlY3Q9dChcIi4vc3R5bGVcIikuc3R5bGVPblNlbGVjdCxuLmhvdmVyUG9pbnRzPXQoXCIuL2hvdmVyXCIpLmhvdmVyUG9pbnRzLG4uc2VsZWN0UG9pbnRzPXQoXCIuL3NlbGVjdFwiKSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cImJhclwiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiKSxuLmNhdGVnb3JpZXM9W1wiY2FydGVzaWFuXCIsXCJzdmdcIixcImJhclwiLFwib3JpZW50ZWRcIixcImVycm9yQmFyc09LXCIsXCJzaG93TGVnZW5kXCIsXCJ6b29tU2NhbGVcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIjo3NjAsXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiOjEwNzAsXCIuL2FycmF5c190b19jYWxjZGF0YVwiOjgzOCxcIi4vYXR0cmlidXRlc1wiOjgzOSxcIi4vY2FsY1wiOjg0MCxcIi4vY3Jvc3NfdHJhY2VfY2FsY1wiOjg0MixcIi4vZGVmYXVsdHNcIjo4NDMsXCIuL2hvdmVyXCI6ODQ1LFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjg0NyxcIi4vbGF5b3V0X2RlZmF1bHRzXCI6ODQ4LFwiLi9wbG90XCI6ODQ5LFwiLi9zZWxlY3RcIjo4NTAsXCIuL3N0eWxlXCI6ODUyfV0sODQ3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtiYXJtb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJzdGFja1wiLFwiZ3JvdXBcIixcIm92ZXJsYXlcIixcInJlbGF0aXZlXCJdLGRmbHQ6XCJncm91cFwiLGVkaXRUeXBlOlwiY2FsY1wifSxiYXJub3JtOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJcIixcImZyYWN0aW9uXCIsXCJwZXJjZW50XCJdLGRmbHQ6XCJcIixlZGl0VHlwZTpcImNhbGNcIn0sYmFyZ2FwOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZWRpdFR5cGU6XCJjYWxjXCJ9LGJhcmdyb3VwZ2FwOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifX19LHt9XSw4NDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksYT10KFwiLi4vLi4vbGliXCIpLG89dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBzKHIsbil7cmV0dXJuIGEuY29lcmNlKHQsZSxvLHIsbil9Zm9yKHZhciBsPSExLGM9ITEsdT0hMSxoPXt9LGY9cyhcImJhcm1vZGVcIikscD0wO3A8ci5sZW5ndGg7cCsrKXt2YXIgZD1yW3BdO2lmKG4udHJhY2VJcyhkLFwiYmFyXCIpJiZkLnZpc2libGUpe2lmKGw9ITAsXCJncm91cFwiPT09Zil7dmFyIGc9ZC54YXhpcytkLnlheGlzO2hbZ10mJih1PSEwKSxoW2ddPSEwfWlmKGQudmlzaWJsZSYmXCJoaXN0b2dyYW1cIj09PWQudHlwZSlcImNhdGVnb3J5XCIhPT1pLmdldEZyb21JZCh7X2Z1bGxMYXlvdXQ6ZX0sZFtcInZcIj09PWQub3JpZW50YXRpb24/XCJ4YXhpc1wiOlwieWF4aXNcIl0pLnR5cGUmJihjPSEwKX19bD8oXCJvdmVybGF5XCIhPT1mJiZzKFwiYmFybm9ybVwiKSxzKFwiYmFyZ2FwXCIsYyYmIXU/MDouMikscyhcImJhcmdyb3VwZ2FwXCIpKTpkZWxldGUgZS5iYXJtb2RlfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo4NDd9XSw4NDk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiZmFzdC1pc251bWVyaWNcIiksYT10KFwiLi4vLi4vbGliXCIpLG89dChcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGw9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxjPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSx1PXQoXCIuL2F0dHJpYnV0ZXNcIiksaD11LnRleHQsZj11LnRleHRwb3NpdGlvbixwPXQoXCIuL2hlbHBlcnNcIiksZD10KFwiLi9zdHlsZVwiKSxnPTM7ZnVuY3Rpb24gdih0LGUscixuLGksYSl7dmFyIG87cmV0dXJuIGk8MT9vPVwic2NhbGUoXCIraStcIikgXCI6KGk9MSxvPVwiXCIpLFwidHJhbnNsYXRlKFwiKyhyLWkqdCkrXCIgXCIrKG4taSplKStcIilcIitvKyhhP1wicm90YXRlKFwiK2ErXCIgXCIrdCtcIiBcIitlK1wiKSBcIjpcIlwiKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7dmFyIG09ZS54YXhpcyx5PWUueWF4aXMseD10Ll9mdWxsTGF5b3V0LGI9YS5tYWtlVHJhY2VHcm91cHModSxyLFwidHJhY2UgYmFyc1wiKS5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBjLHU9bi5zZWxlY3QodGhpcyksYj1yWzBdLF89Yi50cmFjZSx3PTA7XCJ3YXRlcmZhbGxcIj09PV8udHlwZSYmXy5jb25uZWN0b3IudmlzaWJsZSYmXCJiZXR3ZWVuXCI9PT1fLmNvbm5lY3Rvci5tb2RlJiYodz1fLmNvbm5lY3Rvci5saW5lLndpZHRoLzIpO3ZhciBrPVwiaFwiPT09Xy5vcmllbnRhdGlvbjtlLmlzUmFuZ2VQbG90fHwoYi5ub2RlMz11KTt2YXIgQT1hLmVuc3VyZVNpbmdsZSh1LFwiZ1wiLFwicG9pbnRzXCIpLnNlbGVjdEFsbChcImcucG9pbnRcIikuZGF0YShhLmlkZW50aXR5KTtBLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwicG9pbnRcIiwhMCksQS5leGl0KCkucmVtb3ZlKCksQS5lYWNoKGZ1bmN0aW9uKHUsYil7dmFyIEEsVCxNLFMsRT1uLnNlbGVjdCh0aGlzKTtrPyhNPXkuYzJwKHUucDAsITApLFM9eS5jMnAodS5wMSwhMCksQT1tLmMycCh1LnMwLCEwKSxUPW0uYzJwKHUuczEsITApLHUuY3Q9W1QsKE0rUykvMl0pOihBPW0uYzJwKHUucDAsITApLFQ9bS5jMnAodS5wMSwhMCksTT15LmMycCh1LnMwLCEwKSxTPXkuYzJwKHUuczEsITApLHUuY3Q9WyhBK1QpLzIsU10pO3ZhciBDLEwseixPPXUuaXNCbGFuaz0hKGkoQSkmJmkoVCkmJmkoTSkmJmkoUykmJkEhPT1UJiZNIT09Uyk7aWYodyYmKGs/KEEtPShjPVQ8QT8tMToxKSp3LFQrPWMqdyk6KE0tPShjPVM8TT8tMToxKSp3LFMrPWMqdykpLFwid2F0ZXJmYWxsXCI9PT1fLnR5cGUpe2lmKCFPKXt2YXIgST1fW3UuZGlyXS5tYXJrZXI7Qz1JLmxpbmUud2lkdGgsTD1JLmNvbG9yfXo9XCJ3YXRlcmZhbGxcIn1lbHNlIEM9KHUubWx3KzF8fF8ubWFya2VyLmxpbmUud2lkdGgrMXx8KHUudHJhY2U/dS50cmFjZS5tYXJrZXIubGluZS53aWR0aDowKSsxKS0xLEw9dS5tY3x8Xy5tYXJrZXIuY29sb3Isej1cImJhclwiO3ZhciBEPW4ucm91bmQoQy8yJTEsMiksUD14W3orXCJnYXBcIl0sUj14W3orXCJncm91cGdhcFwiXTtmdW5jdGlvbiBGKHQpe3JldHVybiAwPT09UCYmMD09PVI/bi5yb3VuZChNYXRoLnJvdW5kKHQpLUQsMik6dH1pZighdC5fY29udGV4dC5zdGF0aWNQbG90KXt2YXIgQj1zLm9wYWNpdHkoTCk8MXx8Qz4uMDE/RjpmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmFicyh0LWUpPj0yP0YodCk6dD5lP01hdGguY2VpbCh0KTpNYXRoLmZsb29yKHQpfTtBPUIoQSxUKSxUPUIoVCxBKSxNPUIoTSxTKSxTPUIoUyxNKX1hLmVuc3VyZVNpbmdsZShFLFwicGF0aFwiKS5zdHlsZShcInZlY3Rvci1lZmZlY3RcIixcIm5vbi1zY2FsaW5nLXN0cm9rZVwiKS5hdHRyKFwiZFwiLE8/XCJNMCwwWlwiOlwiTVwiK0ErXCIsXCIrTStcIlZcIitTK1wiSFwiK1QrXCJWXCIrTStcIlpcIikuY2FsbChsLnNldENsaXBVcmwsZS5sYXllckNsaXBJZCx0KSxmdW5jdGlvbih0LGUscixuLGkscyxjLHUpe3ZhciBtLHk9dC5fZnVsbExheW91dDtmdW5jdGlvbiB4KGUscixuKXt2YXIgaT1hLmVuc3VyZVNpbmdsZShlLFwidGV4dFwiKS50ZXh0KHIpLmF0dHIoe2NsYXNzOlwiYmFydGV4dCBiYXJ0ZXh0LVwiK20sdHJhbnNmb3JtOlwiXCIsXCJ0ZXh0LWFuY2hvclwiOlwibWlkZGxlXCIsXCJkYXRhLW5vdGV4XCI6MX0pLmNhbGwobC5mb250LG4pLmNhbGwoby5jb252ZXJ0VG9Uc3BhbnMsdCk7cmV0dXJuIGl9dmFyIGI9clswXS50cmFjZSxfPWIub3JpZW50YXRpb24sdz1mdW5jdGlvbih0LGUpe3ZhciByPXAuZ2V0VmFsdWUodC50ZXh0LGUpO3JldHVybiBwLmNvZXJjZVN0cmluZyhoLHIpfShiLG4pO209ZnVuY3Rpb24odCxlKXt2YXIgcj1wLmdldFZhbHVlKHQudGV4dHBvc2l0aW9uLGUpO3JldHVybiBwLmNvZXJjZUVudW1lcmF0ZWQoZixyKX0oYixuKTt2YXIgaz1cIndhdGVyZmFsbFwiPT09Yi50eXBlP1wid2F0ZXJmYWxsXCI6XCJiYXJcIixBPXlbaytcIm1vZGVcIl0sVD1cInN0YWNrXCI9PT1BfHxcInJlbGF0aXZlXCI9PT1BLE09cltuXSxTPSFUfHxNLl9vdXRtb3N0O2lmKCF3fHxcIm5vbmVcIj09PW18fE0uaXNCbGFuayYmKFwiYXV0b1wiPT09bXx8XCJpbnNpZGVcIj09PW0pKXJldHVybiB2b2lkIGUuc2VsZWN0KFwidGV4dFwiKS5yZW1vdmUoKTt2YXIgRSxDLEwseixPLEksRD15LmZvbnQsUD1kLmdldEJhckNvbG9yKHJbbl0sYiksUj1kLmdldEluc2lkZVRleHRGb250KGIsbixELFApLEY9ZC5nZXRPdXRzaWRlVGV4dEZvbnQoYixuLEQpLEI9TWF0aC5hYnMocy1pKS0yKmcsTj1NYXRoLmFicyh1LWMpLTIqZztcIm91dHNpZGVcIj09PW0mJihTfHxNLmhhc0J8fChtPVwiaW5zaWRlXCIpKTtpZihcImF1dG9cIj09PW0paWYoUyl7bT1cImluc2lkZVwiLEU9eChlLHcsUiksQz1sLmJCb3goRS5ub2RlKCkpLEw9Qy53aWR0aCx6PUMuaGVpZ2h0O3ZhciBqPUw+MCYmej4wLFY9TDw9QiYmejw9TixVPUw8PU4mJno8PUIscT1cImhcIj09PV8/Qj49TCooTi96KTpOPj16KihCL0wpO2omJihWfHxVfHxxKT9tPVwiaW5zaWRlXCI6KG09XCJvdXRzaWRlXCIsRS5yZW1vdmUoKSxFPW51bGwpfWVsc2UgbT1cImluc2lkZVwiO2lmKCFFJiYoRT14KGUsdyxcIm91dHNpZGVcIj09PW0/RjpSKSxDPWwuYkJveChFLm5vZGUoKSksTD1DLndpZHRoLHo9Qy5oZWlnaHQsTDw9MHx8ejw9MCkpcmV0dXJuIHZvaWQgRS5yZW1vdmUoKTtcIm91dHNpZGVcIj09PW0/KEk9XCJib3RoXCI9PT1iLmNvbnN0cmFpbnRleHR8fFwib3V0c2lkZVwiPT09Yi5jb25zdHJhaW50ZXh0LE89ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHMsbD1cImhcIj09PWE/TWF0aC5hYnMobi1yKTpNYXRoLmFicyhlLXQpO2w+MipnJiYocz1nKTt2YXIgYz0xO28mJihjPVwiaFwiPT09YT9NYXRoLm1pbigxLGwvaS5oZWlnaHQpOk1hdGgubWluKDEsbC9pLndpZHRoKSk7dmFyIHUsaCxmLHAsZD0oaS5sZWZ0K2kucmlnaHQpLzIsbT0oaS50b3AraS5ib3R0b20pLzI7dT1jKmkud2lkdGgsaD1jKmkuaGVpZ2h0LFwiaFwiPT09YT9lPHQ/KGY9ZS1zLXUvMixwPShyK24pLzIpOihmPWUrcyt1LzIscD0ocituKS8yKTpuPnI/KGY9KHQrZSkvMixwPW4rcytoLzIpOihmPSh0K2UpLzIscD1uLXMtaC8yKTtyZXR1cm4gdihkLG0sZixwLGMsITEpfShpLHMsYyx1LEMsXyxJKSk6KEk9XCJib3RoXCI9PT1iLmNvbnN0cmFpbnRleHR8fFwiaW5zaWRlXCI9PT1iLmNvbnN0cmFpbnRleHQsTz1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcyxsLGMsdSxoLGYscCxkPWkud2lkdGgsbT1pLmhlaWdodCx5PShpLmxlZnQraS5yaWdodCkvMix4PShpLnRvcCtpLmJvdHRvbSkvMixiPU1hdGguYWJzKGUtdCksXz1NYXRoLmFicyhuLXIpO2I+MipnJiZfPjIqZz8oYi09MiooaD1nKSxfLT0yKmgpOmg9MDtkPD1iJiZtPD1fPyhmPSExLHA9MSk6ZDw9XyYmbTw9Yj8oZj0hMCxwPTEpOmQ8bT09YjxfPyhmPSExLHA9bz9NYXRoLm1pbihiL2QsXy9tKToxKTooZj0hMCxwPW8/TWF0aC5taW4oXy9kLGIvbSk6MSk7ZiYmKGY9OTApO2Y/KHM9cCptLGw9cCpkKToocz1wKmQsbD1wKm0pO1wiaFwiPT09YT9lPHQ/KGM9ZStoK3MvMix1PShyK24pLzIpOihjPWUtaC1zLzIsdT0ocituKS8yKTpuPnI/KGM9KHQrZSkvMix1PW4taC1sLzIpOihjPSh0K2UpLzIsdT1uK2grbC8yKTtyZXR1cm4gdih5LHgsYyx1LHAsZil9KGkscyxjLHUsQyxfLEkpKTtFLmF0dHIoXCJ0cmFuc2Zvcm1cIixPKX0odCxFLHIsYixBLFQsTSxTKSxlLmxheWVyQ2xpcElkJiZsLmhpZGVPdXRzaWRlUmFuZ2VQb2ludCh1LEUuc2VsZWN0KFwidGV4dFwiKSxtLHksXy54Y2FsZW5kYXIsXy55Y2FsZW5kYXIpfSk7dmFyIFQ9ITE9PT1iLnRyYWNlLmNsaXBvbmF4aXM7bC5zZXRDbGlwVXJsKHUsVD9udWxsOmUubGF5ZXJDbGlwSWQsdCl9KTtjLmdldENvbXBvbmVudE1ldGhvZChcImVycm9yYmFyc1wiLFwicGxvdFwiKSh0LGIsZSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCI6NzI1LFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2F0dHJpYnV0ZXNcIjo4MzksXCIuL2hlbHBlcnNcIjo4NDQsXCIuL3N0eWxlXCI6ODUyLGQzOjE1NSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sODUwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10LmNkLGk9dC54YXhpcyxhPXQueWF4aXMsbz1bXTtpZighMT09PWUpZm9yKHI9MDtyPG4ubGVuZ3RoO3IrKyluW3JdLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgcz1uW3JdO2UuY29udGFpbnMocy5jdCwhMSxyLHQpPyhvLnB1c2goe3BvaW50TnVtYmVyOnIseDppLmMyZChzLngpLHk6YS5jMmQocy55KX0pLHMuc2VsZWN0ZWQ9MSk6cy5zZWxlY3RlZD0wfXJldHVybiBvfX0se31dLDg1MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1hO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKS5CQUROVU07ZnVuY3Rpb24gYSh0LGUpe3RoaXMudHJhY2VzPXQsdGhpcy5zZXBOZWdWYWw9ZS5zZXBOZWdWYWwsdGhpcy5vdmVybGFwTm9NZXJnZT1lLm92ZXJsYXBOb01lcmdlO2Zvcih2YXIgcj0xLzAsYT1bXSxvPTA7bzx0Lmxlbmd0aDtvKyspe2Zvcih2YXIgcz10W29dLGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIGM9c1tsXTtjLnAhPT1pJiZhLnB1c2goYy5wKX1zWzBdJiZzWzBdLndpZHRoMSYmKHI9TWF0aC5taW4oc1swXS53aWR0aDEscikpfXRoaXMucG9zaXRpb25zPWE7dmFyIHU9bi5kaXN0aW5jdFZhbHMoYSk7dGhpcy5kaXN0aW5jdFBvc2l0aW9ucz11LnZhbHMsMT09PXUudmFscy5sZW5ndGgmJnIhPT0xLzA/dGhpcy5taW5EaWZmPXI6dGhpcy5taW5EaWZmPU1hdGgubWluKHUubWluRGlmZixyKSx0aGlzLmJpbldpZHRoPXRoaXMubWluRGlmZix0aGlzLmJpbnM9e319YS5wcm90b3R5cGUucHV0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5nZXRMYWJlbCh0LGUpLG49dGhpcy5iaW5zW3JdfHwwO3JldHVybiB0aGlzLmJpbnNbcl09bitlLG59LGEucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2V0TGFiZWwodCxlKTtyZXR1cm4gdGhpcy5iaW5zW3JdfHwwfSxhLnByb3RvdHlwZS5nZXRMYWJlbD1mdW5jdGlvbih0LGUpe3JldHVybihlPDAmJnRoaXMuc2VwTmVnVmFsP1widlwiOlwiXlwiKSsodGhpcy5vdmVybGFwTm9NZXJnZT90Ok1hdGgucm91bmQodC90aGlzLmJpbldpZHRoKSl9fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vbGliXCI6NzAxfV0sODUyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLG89dChcIi4uLy4uL2xpYlwiKSxzPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxsPXQoXCIuL2F0dHJpYnV0ZXNcIiksYz1sLnRleHRmb250LHU9bC5pbnNpZGV0ZXh0Zm9udCxoPWwub3V0c2lkZXRleHRmb250LGY9dChcIi4vaGVscGVyc1wiKTtmdW5jdGlvbiBwKHQsZSxyKXthLnBvaW50U3R5bGUodC5zZWxlY3RBbGwoXCJwYXRoXCIpLGUsciksZCh0LGUscil9ZnVuY3Rpb24gZCh0LGUscil7dC5zZWxlY3RBbGwoXCJ0ZXh0XCIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGk9bi5zZWxlY3QodGhpcyksbz1nKGksdCxlLHIpO2EuZm9udChpLG8pfSl9ZnVuY3Rpb24gZyh0LGUscixuKXt2YXIgaT1uLl9mdWxsTGF5b3V0LmZvbnQsYT1yLnRleHRmb250O2lmKHQuY2xhc3NlZChcImJhcnRleHQtaW5zaWRlXCIpKXt2YXIgbz1iKGUscik7YT1tKHIsZS5pLGksbyl9ZWxzZSB0LmNsYXNzZWQoXCJiYXJ0ZXh0LW91dHNpZGVcIikmJihhPXkocixlLmksaSkpO3JldHVybiBhfWZ1bmN0aW9uIHYodCxlLHIpe3JldHVybiB4KGMsdC50ZXh0Zm9udCxlLHIpfWZ1bmN0aW9uIG0odCxlLHIsbil7dmFyIGE9dih0LGUscik7cmV0dXJuKHZvaWQgMD09PXQuX2lucHV0LnRleHRmb250fHx2b2lkIDA9PT10Ll9pbnB1dC50ZXh0Zm9udC5jb2xvcnx8QXJyYXkuaXNBcnJheSh0LnRleHRmb250LmNvbG9yKSYmdm9pZCAwPT09dC50ZXh0Zm9udC5jb2xvcltlXSkmJihhPXtjb2xvcjppLmNvbnRyYXN0KG4pLGZhbWlseTphLmZhbWlseSxzaXplOmEuc2l6ZX0pLHgodSx0Lmluc2lkZXRleHRmb250LGUsYSl9ZnVuY3Rpb24geSh0LGUscil7dmFyIG49dih0LGUscik7cmV0dXJuIHgoaCx0Lm91dHNpZGV0ZXh0Zm9udCxlLG4pfWZ1bmN0aW9uIHgodCxlLHIsbil7ZT1lfHx7fTt2YXIgaT1mLmdldFZhbHVlKGUuZmFtaWx5LHIpLGE9Zi5nZXRWYWx1ZShlLnNpemUsciksbz1mLmdldFZhbHVlKGUuY29sb3Iscik7cmV0dXJue2ZhbWlseTpmLmNvZXJjZVN0cmluZyh0LmZhbWlseSxpLG4uZmFtaWx5KSxzaXplOmYuY29lcmNlTnVtYmVyKHQuc2l6ZSxhLG4uc2l6ZSksY29sb3I6Zi5jb2VyY2VDb2xvcih0LmNvbG9yLG8sbi5jb2xvcil9fWZ1bmN0aW9uIGIodCxlKXtyZXR1cm5cIndhdGVyZmFsbFwiPT09ZS50eXBlP2VbdC5kaXJdLm1hcmtlci5jb2xvcjp0Lm1jfHxlLm1hcmtlci5jb2xvcn1lLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZT9lWzBdLm5vZGUzOm4uc2VsZWN0KHQpLnNlbGVjdEFsbChcImcuYmFybGF5ZXJcIikuc2VsZWN0QWxsKFwiZy50cmFjZVwiKSxpPXIuc2l6ZSgpLGE9dC5fZnVsbExheW91dDtyLnN0eWxlKFwib3BhY2l0eVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KS5lYWNoKGZ1bmN0aW9uKHQpeyhcInN0YWNrXCI9PT1hLmJhcm1vZGUmJmk+MXx8MD09PWEuYmFyZ2FwJiYwPT09YS5iYXJncm91cGdhcCYmIXRbMF0udHJhY2UubWFya2VyLmxpbmUud2lkdGgpJiZuLnNlbGVjdCh0aGlzKS5hdHRyKFwic2hhcGUtcmVuZGVyaW5nXCIsXCJjcmlzcEVkZ2VzXCIpfSksci5zZWxlY3RBbGwoXCJnLnBvaW50c1wiKS5lYWNoKGZ1bmN0aW9uKGUpe3Aobi5zZWxlY3QodGhpcyksZVswXS50cmFjZSx0KX0pLHMuZ2V0Q29tcG9uZW50TWV0aG9kKFwiZXJyb3JiYXJzXCIsXCJzdHlsZVwiKShyKX0sc3R5bGVUZXh0UG9pbnRzOmQsc3R5bGVPblNlbGVjdDpmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0ubm9kZTMsaT1lWzBdLnRyYWNlO2kuc2VsZWN0ZWRwb2ludHM/ZnVuY3Rpb24odCxlLHIpe2Euc2VsZWN0ZWRQb2ludFN0eWxlKHQuc2VsZWN0QWxsKFwicGF0aFwiKSxlKSxmdW5jdGlvbih0LGUscil7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBpLHM9bi5zZWxlY3QodGhpcyk7aWYodC5zZWxlY3RlZCl7aT1vLmV4dGVuZEZsYXQoe30sZyhzLHQsZSxyKSk7dmFyIGw9ZS5zZWxlY3RlZC50ZXh0Zm9udCYmZS5zZWxlY3RlZC50ZXh0Zm9udC5jb2xvcjtsJiYoaS5jb2xvcj1sKSxhLmZvbnQocyxpKX1lbHNlIGEuc2VsZWN0ZWRUZXh0U3R5bGUocyxlKX0pfSh0LnNlbGVjdEFsbChcInRleHRcIiksZSxyKX0ocixpLHQpOnAocixpLHQpfSxnZXRJbnNpZGVUZXh0Rm9udDptLGdldE91dHNpZGVUZXh0Rm9udDp5LGdldEJhckNvbG9yOmJ9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2F0dHJpYnV0ZXNcIjo4MzksXCIuL2hlbHBlcnNcIjo4NDQsZDM6MTU1fV0sODUzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnNcIikuaGFzQ29sb3JzY2FsZSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyl7cihcIm1hcmtlci5jb2xvclwiLG8pLGkodCxcIm1hcmtlclwiKSYmYSh0LGUscyxyLHtwcmVmaXg6XCJtYXJrZXIuXCIsY0xldHRlcjpcImNcIn0pLHIoXCJtYXJrZXIubGluZS5jb2xvclwiLG4uZGVmYXVsdExpbmUpLGkodCxcIm1hcmtlci5saW5lXCIpJiZhKHQsZSxzLHIse3ByZWZpeDpcIm1hcmtlci5saW5lLlwiLGNMZXR0ZXI6XCJjXCJ9KSxyKFwibWFya2VyLmxpbmUud2lkdGhcIikscihcIm1hcmtlci5vcGFjaXR5XCIpLHIoXCJzZWxlY3RlZC5tYXJrZXIuY29sb3JcIikscihcInVuc2VsZWN0ZWQubWFya2VyLmNvbG9yXCIpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiOjU4OCxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzXCI6NTg5fV0sODU0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxhPXQoXCIuLi9zY2F0dGVycG9sYXIvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi9iYXIvYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9e3I6YS5yLHRoZXRhOmEudGhldGEscjA6YS5yMCxkcjphLmRyLHRoZXRhMDphLnRoZXRhMCxkdGhldGE6YS5kdGhldGEsdGhldGF1bml0OmEudGhldGF1bml0LGJhc2U6aSh7fSxvLmJhc2Use30pLG9mZnNldDppKHt9LG8ub2Zmc2V0LHt9KSx3aWR0aDppKHt9LG8ud2lkdGgse30pLHRleHQ6aSh7fSxvLnRleHQse30pLGhvdmVydGV4dDppKHt9LG8uaG92ZXJ0ZXh0LHt9KSxtYXJrZXI6by5tYXJrZXIsaG92ZXJpbmZvOmEuaG92ZXJpbmZvLGhvdmVydGVtcGxhdGU6bigpLHNlbGVjdGVkOm8uc2VsZWN0ZWQsdW5zZWxlY3RlZDpvLnVuc2VsZWN0ZWR9fSx7XCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi9iYXIvYXR0cmlidXRlc1wiOjgzOSxcIi4uL3NjYXR0ZXJwb2xhci9hdHRyaWJ1dGVzXCI6MTExNH1dLDg1NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVyc1wiKS5oYXNDb2xvcnNjYWxlLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCIpLGE9dChcIi4uL2Jhci9hcnJheXNfdG9fY2FsY2RhdGFcIiksbz10KFwiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGNcIikuc2V0R3JvdXBQb3NpdGlvbnMscz10KFwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvblwiKSxsPXQoXCIuLi8uLi9yZWdpc3RyeVwiKS50cmFjZUlzLGM9dChcIi4uLy4uL2xpYlwiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17Y2FsYzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Ll9mdWxsTGF5b3V0LG89ZS5zdWJwbG90LGw9cltvXS5yYWRpYWxheGlzLGM9cltvXS5hbmd1bGFyYXhpcyx1PWwubWFrZUNhbGNkYXRhKGUsXCJyXCIpLGg9Yy5tYWtlQ2FsY2RhdGEoZSxcInRoZXRhXCIpLGY9ZS5fbGVuZ3RoLHA9bmV3IEFycmF5KGYpLGQ9dSxnPWgsdj0wO3Y8Zjt2KyspcFt2XT17cDpnW3ZdLHM6ZFt2XX07ZnVuY3Rpb24gbSh0KXt2YXIgcj1lW3RdO3ZvaWQgMCE9PXImJihlW1wiX1wiK3RdPUFycmF5LmlzQXJyYXkocik/Yy5tYWtlQ2FsY2RhdGEoZSx0KTpjLmQyYyhyLGUudGhldGF1bml0KSl9cmV0dXJuXCJsaW5lYXJcIj09PWMudHlwZSYmKG0oXCJ3aWR0aFwiKSxtKFwib2Zmc2V0XCIpKSxuKGUsXCJtYXJrZXJcIikmJmkodCxlLHt2YWxzOmUubWFya2VyLmNvbG9yLGNvbnRhaW5lclN0cjpcIm1hcmtlclwiLGNMZXR0ZXI6XCJjXCJ9KSxuKGUsXCJtYXJrZXIubGluZVwiKSYmaSh0LGUse3ZhbHM6ZS5tYXJrZXIubGluZS5jb2xvcixjb250YWluZXJTdHI6XCJtYXJrZXIubGluZVwiLGNMZXR0ZXI6XCJjXCJ9KSxhKHAsZSkscyhwLGUpLHB9LGNyb3NzVHJhY2VDYWxjOmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC5jYWxjZGF0YSxpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIHM9blthXSx1PXNbMF0udHJhY2U7ITA9PT11LnZpc2libGUmJmwodSxcImJhclwiKSYmdS5zdWJwbG90PT09ciYmaS5wdXNoKHMpfXZhciBoPWMoe30sZS5yYWRpYWxheGlzLHtfaWQ6XCJ4XCJ9KSxmPWUuYW5ndWxhcmF4aXM7byh7X2Z1bGxMYXlvdXQ6ZX0sZixoLGkpfX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCI6NTg2LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnNcIjo1ODksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL2Jhci9hcnJheXNfdG9fY2FsY2RhdGFcIjo4MzgsXCIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsY1wiOjg0MixcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIjoxMDU0fV0sODU2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi9zY2F0dGVycG9sYXIvZGVmYXVsdHNcIikuaGFuZGxlUlRoZXRhRGVmYXVsdHMsYT10KFwiLi4vYmFyL3N0eWxlX2RlZmF1bHRzXCIpLG89dChcIi4vYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWkodCxlLHMsbCk/KGwoXCJ0aGV0YXVuaXRcIiksbChcImJhc2VcIiksbChcIm9mZnNldFwiKSxsKFwid2lkdGhcIiksbChcInRleHRcIiksbChcImhvdmVydGV4dFwiKSxsKFwiaG92ZXJ0ZW1wbGF0ZVwiKSxhKHQsZSxsLHIscyksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsbCkpOmUudmlzaWJsZT0hMX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2Jhci9zdHlsZV9kZWZhdWx0c1wiOjg1MyxcIi4uL3NjYXR0ZXJwb2xhci9kZWZhdWx0c1wiOjExMTYsXCIuL2F0dHJpYnV0ZXNcIjo4NTR9XSw4NTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vYmFyL2hvdmVyXCIpLmdldFRyYWNlQ29sb3Isbz10KFwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHRcIikscz10KFwiLi4vc2NhdHRlcnBvbGFyL2hvdmVyXCIpLm1ha2VIb3ZlclBvaW50VGV4dCxsPXQoXCIuLi8uLi9wbG90cy9wb2xhci9oZWxwZXJzXCIpLmlzUHRJbnNpZGVQb2x5Z29uO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGM9dC5jZCx1PWNbMF0udHJhY2UsaD10LnN1YnBsb3QsZj1oLnJhZGlhbEF4aXMscD1oLmFuZ3VsYXJBeGlzLGQ9aC52YW5nbGVzLGc9ZD9sOmkuaXNQdEluc2lkZVNlY3Rvcix2PXQubWF4SG92ZXJEaXN0YW5jZSxtPXAuX3BlcmlvZHx8MipNYXRoLlBJLHk9TWF0aC5hYnMoZi5nMnAoTWF0aC5zcXJ0KGUqZStyKnIpKSkseD1NYXRoLmF0YW4yKHIsZSk7Zi5yYW5nZVswXT5mLnJhbmdlWzFdJiYoeCs9TWF0aC5QSSk7aWYobi5nZXRDbG9zZXN0KGMsZnVuY3Rpb24odCl7cmV0dXJuIGcoeSx4LFt0LnJwMCx0LnJwMV0sW3QudGhldGFnMCx0LnRoZXRhZzFdLGQpP3YrTWF0aC5taW4oMSxNYXRoLmFicyh0LnRoZXRhZzEtdC50aGV0YWcwKS9tKS0xKyh0LnJwMS15KS8odC5ycDEtdC5ycDApLTE6MS8wfSx0KSwhMSE9PXQuaW5kZXgpe3ZhciBiPWNbdC5pbmRleF07dC54MD10LngxPWIuY3RbMF0sdC55MD10LnkxPWIuY3RbMV07dmFyIF89aS5leHRlbmRGbGF0KHt9LGIse3I6Yi5zLHRoZXRhOmIucH0pO3JldHVybiBvKGIsdSx0KSxzKF8sdSxoLHQpLHQuaG92ZXJ0ZW1wbGF0ZT11LmhvdmVydGVtcGxhdGUsdC5jb2xvcj1hKHUsYiksdC54TGFiZWxWYWw9dC55TGFiZWxWYWw9dm9pZCAwLGIuczwwJiYodC5pZGVhbEFsaWduPVwibGVmdFwiKSxbdF19fX0se1wiLi4vLi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL3BvbGFyL2hlbHBlcnNcIjo4MTIsXCIuLi9iYXIvaG92ZXJcIjo4NDUsXCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dFwiOjEwNjAsXCIuLi9zY2F0dGVycG9sYXIvaG92ZXJcIjoxMTE3fV0sODU4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwidHJhY2VcIixuYW1lOlwiYmFycG9sYXJcIixiYXNlUGxvdE1vZHVsZTp0KFwiLi4vLi4vcGxvdHMvcG9sYXJcIiksY2F0ZWdvcmllczpbXCJwb2xhclwiLFwiYmFyXCIsXCJzaG93TGVnZW5kXCJdLGF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLHN1cHBseURlZmF1bHRzOnQoXCIuL2RlZmF1bHRzXCIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoXCIuL2xheW91dF9kZWZhdWx0c1wiKSxjYWxjOnQoXCIuL2NhbGNcIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KFwiLi9jYWxjXCIpLmNyb3NzVHJhY2VDYWxjLHBsb3Q6dChcIi4vcGxvdFwiKSxjb2xvcmJhcjp0KFwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXJcIiksc3R5bGU6dChcIi4uL2Jhci9zdHlsZVwiKS5zdHlsZSxob3ZlclBvaW50czp0KFwiLi9ob3ZlclwiKSxzZWxlY3RQb2ludHM6dChcIi4uL2Jhci9zZWxlY3RcIiksbWV0YTp7fX19LHtcIi4uLy4uL3Bsb3RzL3BvbGFyXCI6ODEzLFwiLi4vYmFyL3NlbGVjdFwiOjg1MCxcIi4uL2Jhci9zdHlsZVwiOjg1MixcIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyXCI6MTA3MCxcIi4vYXR0cmlidXRlc1wiOjg1NCxcIi4vY2FsY1wiOjg1NSxcIi4vZGVmYXVsdHNcIjo4NTYsXCIuL2hvdmVyXCI6ODU3LFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjg1OSxcIi4vbGF5b3V0X2RlZmF1bHRzXCI6ODYwLFwiLi9wbG90XCI6ODYxfV0sODU5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtiYXJtb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJzdGFja1wiLFwib3ZlcmxheVwiXSxkZmx0Olwic3RhY2tcIixlZGl0VHlwZTpcImNhbGNcIn0sYmFyZ2FwOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDouMSxtaW46MCxtYXg6MSxlZGl0VHlwZTpcImNhbGNcIn19fSx7fV0sODYwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGEsbz17fTtmdW5jdGlvbiBzKHIsbyl7cmV0dXJuIG4uY29lcmNlKHRbYV18fHt9LGVbYV0saSxyLG8pfWZvcih2YXIgbD0wO2w8ci5sZW5ndGg7bCsrKXt2YXIgYz1yW2xdO1wiYmFycG9sYXJcIj09PWMudHlwZSYmITA9PT1jLnZpc2libGUmJihvW2E9Yy5zdWJwbG90XXx8KHMoXCJiYXJtb2RlXCIpLHMoXCJiYXJnYXBcIiksb1thXT0xKSl9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjg1OX1dLDg2MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxhPXQoXCIuLi8uLi9saWJcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLHM9dChcIi4uLy4uL3Bsb3RzL3BvbGFyL2hlbHBlcnNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbD1lLnhheGlzLGM9ZS55YXhpcyx1PWUucmFkaWFsQXhpcyxoPWUuYW5ndWxhckF4aXMsZj1mdW5jdGlvbih0KXt2YXIgZT10LmN4eCxyPXQuY3l5O2lmKHQudmFuZ2xlcylyZXR1cm4gZnVuY3Rpb24obixpLG8sbCl7dmFyIGMsdTthLmFuZ2xlRGVsdGEobyxsKT4wPyhjPW8sdT1sKTooYz1sLHU9byk7dmFyIGg9cy5maW5kRW5jbG9zaW5nVmVydGV4QW5nbGVzKGMsdC52YW5nbGVzKVswXSxmPXMuZmluZEVuY2xvc2luZ1ZlcnRleEFuZ2xlcyh1LHQudmFuZ2xlcylbMV0scD1baCwoYyt1KS8yLGZdO3JldHVybiBzLnBhdGhQb2x5Z29uQW5udWx1cyhuLGksYyx1LHAsZSxyKX07cmV0dXJuIGZ1bmN0aW9uKHQsbixpLG8pe3JldHVybiBhLnBhdGhBbm51bHVzKHQsbixpLG8sZSxyKX19KGUpLHA9ZS5sYXllcnMuZnJvbnRwbG90LnNlbGVjdChcImcuYmFybGF5ZXJcIik7YS5tYWtlVHJhY2VHcm91cHMocCxyLFwidHJhY2UgYmFyc1wiKS5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBzPXJbMF0ubm9kZTM9bi5zZWxlY3QodGhpcykscD1hLmVuc3VyZVNpbmdsZShzLFwiZ1wiLFwicG9pbnRzXCIpLnNlbGVjdEFsbChcImcucG9pbnRcIikuZGF0YShhLmlkZW50aXR5KTtwLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5zdHlsZShcInZlY3Rvci1lZmZlY3RcIixcIm5vbi1zY2FsaW5nLXN0cm9rZVwiKS5zdHlsZShcInN0cm9rZS1taXRlcmxpbWl0XCIsMikuY2xhc3NlZChcInBvaW50XCIsITApLHAuZXhpdCgpLnJlbW92ZSgpLHAuZWFjaChmdW5jdGlvbih0KXt2YXIgZSxyPW4uc2VsZWN0KHRoaXMpLG89dC5ycDA9dS5jMnAodC5zMCkscz10LnJwMT11LmMycCh0LnMxKSxwPXQudGhldGFnMD1oLmMyZyh0LnAwKSxkPXQudGhldGFnMT1oLmMyZyh0LnAxKTtpZihpKG8pJiZpKHMpJiZpKHApJiZpKGQpJiZvIT09cyYmcCE9PWQpe3ZhciBnPXUuYzJnKHQuczEpLHY9KHArZCkvMjt0LmN0PVtsLmMycChnKk1hdGguY29zKHYpKSxjLmMycChnKk1hdGguc2luKHYpKV0sZT1mKG8scyxwLGQpfWVsc2UgZT1cIk0wLDBaXCI7YS5lbnN1cmVTaW5nbGUocixcInBhdGhcIikuYXR0cihcImRcIixlKX0pLG8uc2V0Q2xpcFVybChzLGUuX2hhc0NsaXBPbkF4aXNGYWxzZT9lLmNsaXBJZHMuZm9yVHJhY2VzOm51bGwsdCl9KX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL3BvbGFyL2hlbHBlcnNcIjo4MTIsZDM6MTU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw4NjI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uL2Jhci9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsbD1uLm1hcmtlcixjPWwubGluZTtlLmV4cG9ydHM9e3k6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LHg6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LHgwOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LHkwOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LG5hbWU6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0sdGV4dDpzKHt9LG4udGV4dCx7fSksaG92ZXJ0ZXh0OnMoe30sbi5ob3ZlcnRleHQse30pLGhvdmVydGVtcGxhdGU6byh7fSksd2hpc2tlcndpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDouNSxlZGl0VHlwZTpcImNhbGNcIn0sbm90Y2hlZDp7dmFsVHlwZTpcImJvb2xlYW5cIixlZGl0VHlwZTpcImNhbGNcIn0sbm90Y2h3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDouNSxkZmx0Oi4yNSxlZGl0VHlwZTpcImNhbGNcIn0sYm94cG9pbnRzOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhbGxcIixcIm91dGxpZXJzXCIsXCJzdXNwZWN0ZWRvdXRsaWVyc1wiLCExXSxkZmx0Olwib3V0bGllcnNcIixlZGl0VHlwZTpcImNhbGNcIn0sYm94bWVhbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6WyEwLFwic2RcIiwhMV0sZGZsdDohMSxlZGl0VHlwZTpcImNhbGNcIn0saml0dGVyOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZWRpdFR5cGU6XCJjYWxjXCJ9LHBvaW50cG9zOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOi0yLG1heDoyLGVkaXRUeXBlOlwiY2FsY1wifSxvcmllbnRhdGlvbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1widlwiLFwiaFwiXSxlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0sd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6XCJjYWxjXCJ9LG1hcmtlcjp7b3V0bGllcmNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OlwicmdiYSgwLCAwLCAwLCAwKVwiLGVkaXRUeXBlOlwic3R5bGVcIn0sc3ltYm9sOnMoe30sbC5zeW1ib2wse2FycmF5T2s6ITEsZWRpdFR5cGU6XCJwbG90XCJ9KSxvcGFjaXR5OnMoe30sbC5vcGFjaXR5LHthcnJheU9rOiExLGRmbHQ6MSxlZGl0VHlwZTpcInN0eWxlXCJ9KSxzaXplOnMoe30sbC5zaXplLHthcnJheU9rOiExLGVkaXRUeXBlOlwiY2FsY1wifSksY29sb3I6cyh7fSxsLmNvbG9yLHthcnJheU9rOiExLGVkaXRUeXBlOlwic3R5bGVcIn0pLGxpbmU6e2NvbG9yOnMoe30sYy5jb2xvcix7YXJyYXlPazohMSxkZmx0OmEuZGVmYXVsdExpbmUsZWRpdFR5cGU6XCJzdHlsZVwifSksd2lkdGg6cyh7fSxjLndpZHRoLHthcnJheU9rOiExLGRmbHQ6MCxlZGl0VHlwZTpcInN0eWxlXCJ9KSxvdXRsaWVyY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwic3R5bGVcIn0sb3V0bGllcndpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOlwic3R5bGVcIn0sZWRpdFR5cGU6XCJzdHlsZVwifSxlZGl0VHlwZTpcInBsb3RcIn0sbGluZTp7Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwic3R5bGVcIn0sd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjIsZWRpdFR5cGU6XCJzdHlsZVwifSxlZGl0VHlwZTpcInBsb3RcIn0sZmlsbGNvbG9yOm4uZmlsbGNvbG9yLG9mZnNldGdyb3VwOmkub2Zmc2V0Z3JvdXAsYWxpZ25tZW50Z3JvdXA6aS5hbGlnbm1lbnRncm91cCxzZWxlY3RlZDp7bWFya2VyOm4uc2VsZWN0ZWQubWFya2VyLGVkaXRUeXBlOlwic3R5bGVcIn0sdW5zZWxlY3RlZDp7bWFya2VyOm4udW5zZWxlY3RlZC5tYXJrZXIsZWRpdFR5cGU6XCJzdHlsZVwifSxob3Zlcm9uOnt2YWxUeXBlOlwiZmxhZ2xpc3RcIixmbGFnczpbXCJib3hlc1wiLFwicG9pbnRzXCJdLGRmbHQ6XCJib3hlcytwb2ludHNcIixlZGl0VHlwZTpcInN0eWxlXCJ9fX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzXCI6NTc3LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vYmFyL2F0dHJpYnV0ZXNcIjo4MzksXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIjoxMDUyfV0sODYzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPWkuXyxvPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKTtmdW5jdGlvbiBzKHQsZSxyKXt2YXIgbj17dGV4dDpcInR4XCIsaG92ZXJ0ZXh0OlwiaHR4XCJ9O2Zvcih2YXIgaSBpbiBuKUFycmF5LmlzQXJyYXkoZVtpXSkmJih0W25baV1dPWVbaV1bcl0pfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gdC52LWUudn1mdW5jdGlvbiBjKHQpe3JldHVybiB0LnZ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsdSxoLGYscCxkPXQuX2Z1bGxMYXlvdXQsZz1vLmdldEZyb21JZCh0LGUueGF4aXN8fFwieFwiKSx2PW8uZ2V0RnJvbUlkKHQsZS55YXhpc3x8XCJ5XCIpLG09W10seT1cInZpb2xpblwiPT09ZS50eXBlP1wiX251bVZpb2xpbnNcIjpcIl9udW1Cb3hlc1wiO1wiaFwiPT09ZS5vcmllbnRhdGlvbj8odT1nLGg9XCJ4XCIsZj12LHA9XCJ5XCIpOih1PXYsaD1cInlcIixmPWcscD1cInhcIik7dmFyIHgsYj11Lm1ha2VDYWxjZGF0YShlLGgpLF89ZnVuY3Rpb24odCxlLHIsYSxvKXtpZihlIGluIHQpcmV0dXJuIHIubWFrZUNhbGNkYXRhKHQsZSk7dmFyIHM7cz1lK1wiMFwiaW4gdD90W2UrXCIwXCJdOlwibmFtZVwiaW4gdCYmKFwiY2F0ZWdvcnlcIj09PXIudHlwZXx8bih0Lm5hbWUpJiYtMSE9PVtcImxpbmVhclwiLFwibG9nXCJdLmluZGV4T2Yoci50eXBlKXx8aS5pc0RhdGVUaW1lKHQubmFtZSkmJlwiZGF0ZVwiPT09ci50eXBlKT90Lm5hbWU6bzt2YXIgbD1cIm11bHRpY2F0ZWdvcnlcIj09PXIudHlwZT9yLnIyY19qdXN0X2luZGljZXMocyk6ci5kMmMocywwLHRbZStcImNhbGVuZGFyXCJdKTtyZXR1cm4gYS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbH0pfShlLHAsZixiLGRbeV0pLHc9aS5kaXN0aW5jdFZhbHMoXyksaz13LnZhbHMsQT13Lm1pbkRpZmYvMixUPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49bmV3IEFycmF5KHIrMSksaT0wO2k8cjtpKyspbltpXT10W2ldLWU7cmV0dXJuIG5bcl09dFtyLTFdK2Usbn0oayxBKSxNPWsubGVuZ3RoLFM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPVtdO3JldHVybiBlfShNKTtmb3Iocj0wO3I8ZS5fbGVuZ3RoO3IrKyl7dmFyIEU9YltyXTtpZihuKEUpKXt2YXIgQz1pLmZpbmRCaW4oX1tyXSxUKTtpZihDPj0wJiZDPE0pe3ZhciBMPXt2OkUsaTpyfTtzKEwsZSxyKSxTW0NdLnB1c2goTCl9fX12YXIgej1cImFsbFwiPT09KGUuYm94cG9pbnRzfHxlLnBvaW50cyk/aS5pZGVudGl0eTpmdW5jdGlvbih0KXtyZXR1cm4gdC52PHgubGZ8fHQudj54LnVmfTtmb3Iocj0wO3I8TTtyKyspaWYoU1tyXS5sZW5ndGg+MCl7dmFyIE89U1tyXS5zb3J0KGwpLEk9Ty5tYXAoYyksRD1JLmxlbmd0aDsoeD17fSkucG9zPWtbcl0seC5wdHM9Tyx4Lm1pbj1JWzBdLHgubWF4PUlbRC0xXSx4Lm1lYW49aS5tZWFuKEksRCkseC5zZD1pLnN0ZGV2KEksRCx4Lm1lYW4pLHgucTE9aS5pbnRlcnAoSSwuMjUpLHgubWVkPWkuaW50ZXJwKEksLjUpLHgucTM9aS5pbnRlcnAoSSwuNzUpLHgubGY9TWF0aC5taW4oeC5xMSxJW01hdGgubWluKGkuZmluZEJpbigyLjUqeC5xMS0xLjUqeC5xMyxJLCEwKSsxLEQtMSldKSx4LnVmPU1hdGgubWF4KHgucTMsSVtNYXRoLm1heChpLmZpbmRCaW4oMi41KngucTMtMS41KngucTEsSSksMCldKSx4LmxvPTQqeC5xMS0zKngucTMseC51bz00KngucTMtMyp4LnExO3ZhciBQPTEuNTcqKHgucTMteC5xMSkvTWF0aC5zcXJ0KEQpO3gubG49eC5tZWQtUCx4LnVuPXgubWVkK1AseC5wdHMyPU8uZmlsdGVyKHopLG0ucHVzaCh4KX0hZnVuY3Rpb24odCxlKXtpZihpLmlzQXJyYXlPclR5cGVkQXJyYXkoZS5zZWxlY3RlZHBvaW50cykpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe2Zvcih2YXIgbj10W3JdLnB0c3x8W10sYT17fSxvPTA7bzxuLmxlbmd0aDtvKyspYVtuW29dLmldPW87aS50YWdTZWxlY3RlZChuLGUsYSl9fShtLGUpO3ZhciBSPW8uZmluZEV4dHJlbWVzKHUsYix7cGFkZGVkOiEwfSk7cmV0dXJuIGUuX2V4dHJlbWVzW3UuX2lkXT1SLG0ubGVuZ3RoPjA/KG1bMF0udD17bnVtOmRbeV0sZFBvczpBLHBvc0xldHRlcjpwLHZhbExldHRlcjpoLGxhYmVsczp7bWVkOmEodCxcIm1lZGlhbjpcIiksbWluOmEodCxcIm1pbjpcIikscTE6YSh0LFwicTE6XCIpLHEzOmEodCxcInEzOlwiKSxtYXg6YSh0LFwibWF4OlwiKSxtZWFuOlwic2RcIj09PWUuYm94bWVhbj9hKHQsXCJtZWFuIFxceGIxIFxcdTAzYzM6XCIpOmEodCxcIm1lYW46XCIpLGxmOmEodCxcImxvd2VyIGZlbmNlOlwiKSx1ZjphKHQsXCJ1cHBlciBmZW5jZTpcIil9fSxkW3ldKyssbSk6W3t0OntlbXB0eTohMH19XX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw4NjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiKS5nZXRBeGlzR3JvdXAsbz1bXCJ2XCIsXCJoXCJdO2Z1bmN0aW9uIHModCxlLHIsbyl7dmFyIHMsbCxjLHU9ZS5jYWxjZGF0YSxoPWUuX2Z1bGxMYXlvdXQsZj1vLl9pZCxwPWYuY2hhckF0KDApLGQ9W10sZz0wO2ZvcihzPTA7czxyLmxlbmd0aDtzKyspZm9yKGM9dVtyW3NdXSxsPTA7bDxjLmxlbmd0aDtsKyspZC5wdXNoKGNbbF0ucG9zKSxnKz0oY1tsXS5wdHMyfHxbXSkubGVuZ3RoO2lmKGQubGVuZ3RoKXt2YXIgdj1pLmRpc3RpbmN0VmFscyhkKSxtPXYubWluRGlmZi8yO24ubWluRHRpY2sobyx2Lm1pbkRpZmYsdi52YWxzWzBdLCEwKTt2YXIgeT1oW1widmlvbGluXCI9PT10P1wiX251bVZpb2xpbnNcIjpcIl9udW1Cb3hlc1wiXSx4PVwiZ3JvdXBcIj09PWhbdCtcIm1vZGVcIl0mJnk+MSxiPTEtaFt0K1wiZ2FwXCJdLF89MS1oW3QrXCJncm91cGdhcFwiXTtmb3Iocz0wO3M8ci5sZW5ndGg7cysrKXt2YXIgdyxrLEEsVCxNLFMsRT0oYz11W3Jbc11dKVswXS50cmFjZSxDPWNbMF0udCxMPUUud2lkdGgsej1FLnNpZGU7aWYoTCl3PWs9VD1MLzIsQT0wO2Vsc2UgaWYodz1tLHgpe3ZhciBPPWEoaCxvLl9pZCkrRS5vcmllbnRhdGlvbixJPShoLl9hbGlnbm1lbnRPcHRzW09dfHx7fSlbRS5hbGlnbm1lbnRncm91cF18fHt9LEQ9T2JqZWN0LmtleXMoSS5vZmZzZXRHcm91cHN8fHt9KS5sZW5ndGgsUD1EfHx5O2s9dypiKl8vUCxBPTIqdyooKChEP0UuX29mZnNldEluZGV4OkMubnVtKSsuNSkvUC0uNSkqYixUPXcqYi9QfWVsc2Ugaz13KmIqXyxBPTAsVD13O0MuZFBvcz13LEMuYlBvcz1BLEMuYmRQb3M9ayxDLndIb3Zlcj1UO3ZhciBSLEYsQixOLGosVixVPUEraztcInBvc2l0aXZlXCI9PT16PyhNPXcqKEw/MTouNSksUj1VLFM9Uj1BKTpcIm5lZ2F0aXZlXCI9PT16PyhNPVI9QSxTPXcqKEw/MTouNSksRj1VKTooTT1TPXcsUj1GPVUpO3ZhciBxPSExO2lmKChFLmJveHBvaW50c3x8RS5wb2ludHMpJiZnPjApe3ZhciBIPUUucG9pbnRwb3MsRz1FLmppdHRlcixZPUUubWFya2VyLnNpemUvMixXPTA7SCtHPj0wJiYoKFc9VSooSCtHKSk+TT8ocT0hMCxqPVksQj1XKTpXPlImJihqPVksQj1NKSksVzw9TSYmKEI9TSk7dmFyIFg9MDtILUc8PTAmJigoWD0tVSooSC1HKSk+Uz8ocT0hMCxWPVksTj1YKTpYPkYmJihWPVksTj1TKSksWDw9UyYmKE49Uyl9ZWxzZSBCPU0sTj1TO3ZhciBaPW5ldyBBcnJheShjLmxlbmd0aCk7Zm9yKGw9MDtsPGMubGVuZ3RoO2wrKylaW2xdPWNbbF0ucG9zO0UuX2V4dHJlbWVzW2ZdPW4uZmluZEV4dHJlbWVzKG8sWix7cGFkZGVkOnEsdnBhZG1pbnVzOk4sdnBhZHBsdXM6QixwcGFkbWludXM6e3g6Vix5Omp9W3BdLHBwYWRwbHVzOnt4OmoseTpWfVtwXX0pfX19ZS5leHBvcnRzPXtjcm9zc1RyYWNlQ2FsYzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNhbGNkYXRhLG49ZS54YXhpcyxpPWUueWF4aXMsYT0wO2E8by5sZW5ndGg7YSsrKXtmb3IodmFyIGw9b1thXSxjPVwiaFwiPT09bD9pOm4sdT1bXSxoPTA7aDxyLmxlbmd0aDtoKyspe3ZhciBmPXJbaF0scD1mWzBdLnQsZD1mWzBdLnRyYWNlOyEwIT09ZC52aXNpYmxlfHxcImJveFwiIT09ZC50eXBlJiZcImNhbmRsZXN0aWNrXCIhPT1kLnR5cGV8fHAuZW1wdHl8fChkLm9yaWVudGF0aW9ufHxcInZcIikhPT1sfHxkLnhheGlzIT09bi5faWR8fGQueWF4aXMhPT1pLl9pZHx8dS5wdXNoKGgpfXMoXCJib3hcIix0LHUsYyl9fSxzZXRQb3NpdGlvbk9mZnNldDpzfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIjo3NTJ9XSw4NjU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksbz10KFwiLi4vYmFyL2RlZmF1bHRzXCIpLmhhbmRsZUdyb3VwaW5nRGVmYXVsdHMscz10KFwiLi9hdHRyaWJ1dGVzXCIpO2Z1bmN0aW9uIGwodCxlLHIsYSl7dmFyIG8scyxsPXIoXCJ5XCIpLGM9cihcInhcIiksdT1jJiZjLmxlbmd0aDtpZihsJiZsLmxlbmd0aClvPVwidlwiLHU/cz1NYXRoLm1pbihuLm1pblJvd0xlbmd0aChjKSxuLm1pblJvd0xlbmd0aChsKSk6KHIoXCJ4MFwiKSxzPW4ubWluUm93TGVuZ3RoKGwpKTtlbHNle2lmKCF1KXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7bz1cImhcIixyKFwieTBcIikscz1uLm1pblJvd0xlbmd0aChjKX1lLl9sZW5ndGg9cyxpLmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiaGFuZGxlVHJhY2VEZWZhdWx0c1wiKSh0LGUsW1wieFwiLFwieVwiXSxhKSxyKFwib3JpZW50YXRpb25cIixvKX1mdW5jdGlvbiBjKHQsZSxyLGkpe3ZhciBhPWkucHJlZml4LG89bi5jb2VyY2UyKHQsZSxzLFwibWFya2VyLm91dGxpZXJjb2xvclwiKSxsPXIoXCJtYXJrZXIubGluZS5vdXRsaWVyY29sb3JcIiksYz1yKGErXCJwb2ludHNcIixvfHxsP1wic3VzcGVjdGVkb3V0bGllcnNcIjp2b2lkIDApO2M/KHIoXCJqaXR0ZXJcIixcImFsbFwiPT09Yz8uMzowKSxyKFwicG9pbnRwb3NcIixcImFsbFwiPT09Yz8tMS41OjApLHIoXCJtYXJrZXIuc3ltYm9sXCIpLHIoXCJtYXJrZXIub3BhY2l0eVwiKSxyKFwibWFya2VyLnNpemVcIikscihcIm1hcmtlci5jb2xvclwiLGUubGluZS5jb2xvcikscihcIm1hcmtlci5saW5lLmNvbG9yXCIpLHIoXCJtYXJrZXIubGluZS53aWR0aFwiKSxcInN1c3BlY3RlZG91dGxpZXJzXCI9PT1jJiYocihcIm1hcmtlci5saW5lLm91dGxpZXJjb2xvclwiLGUubWFya2VyLmNvbG9yKSxyKFwibWFya2VyLmxpbmUub3V0bGllcndpZHRoXCIpKSxyKFwic2VsZWN0ZWQubWFya2VyLmNvbG9yXCIpLHIoXCJ1bnNlbGVjdGVkLm1hcmtlci5jb2xvclwiKSxyKFwic2VsZWN0ZWQubWFya2VyLnNpemVcIikscihcInVuc2VsZWN0ZWQubWFya2VyLnNpemVcIikscihcInRleHRcIikscihcImhvdmVydGV4dFwiKSk6ZGVsZXRlIGUubWFya2VyO3ZhciB1PXIoXCJob3Zlcm9uXCIpO1wiYWxsXCIhPT11JiYtMT09PXUuaW5kZXhPZihcInBvaW50c1wiKXx8cihcImhvdmVydGVtcGxhdGVcIiksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUscil9ZS5leHBvcnRzPXtzdXBwbHlEZWZhdWx0czpmdW5jdGlvbih0LGUscixpKXtmdW5jdGlvbiBvKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9bCh0LGUsbyxpKSwhMSE9PWUudmlzaWJsZSYmKG8oXCJsaW5lLmNvbG9yXCIsKHQubWFya2VyfHx7fSkuY29sb3J8fHIpLG8oXCJsaW5lLndpZHRoXCIpLG8oXCJmaWxsY29sb3JcIixhLmFkZE9wYWNpdHkoZS5saW5lLmNvbG9yLC41KSksbyhcIndoaXNrZXJ3aWR0aFwiKSxvKFwiYm94bWVhblwiKSxvKFwid2lkdGhcIiksbyhcIm5vdGNoZWRcIix2b2lkIDAhPT10Lm5vdGNod2lkdGgpJiZvKFwibm90Y2h3aWR0aFwiKSxjKHQsZSxvLHtwcmVmaXg6XCJib3hcIn0pKX0sY3Jvc3NUcmFjZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHIsaTtmdW5jdGlvbiBhKHQpe3JldHVybiBuLmNvZXJjZShpLl9pbnB1dCxpLHMsdCl9Zm9yKHZhciBsPTA7bDx0Lmxlbmd0aDtsKyspe3ZhciBjPShpPXRbbF0pLnR5cGU7XCJib3hcIiE9PWMmJlwidmlvbGluXCIhPT1jfHwocj1pLl9pbnB1dCxcImdyb3VwXCI9PT1lW2MrXCJtb2RlXCJdJiZvKHIsaSxlLGEpKX19LGhhbmRsZVNhbXBsZURlZmF1bHRzOmwsaGFuZGxlUG9pbnRzRGVmYXVsdHM6Y319LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL2Jhci9kZWZhdWx0c1wiOjg0MyxcIi4vYXR0cmlidXRlc1wiOjg2Mn1dLDg2NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBlLmhvdmVyT25Cb3gmJih0LmhvdmVyT25Cb3g9ZS5ob3Zlck9uQm94KSxcInhWYWxcImluIGUmJih0Lng9ZS54VmFsKSxcInlWYWxcImluIGUmJih0Lnk9ZS55VmFsKSxlLnhhJiYodC54YXhpcz1lLnhhKSxlLnlhJiYodC55YXhpcz1lLnlhKSx0fX0se31dLDg2NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLHM9dChcIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0XCIpO2Z1bmN0aW9uIGwodCxlLHIscyl7dmFyIGwsYyx1LGgsZixwLGQsZyx2LG0seSx4LGI9dC5jZCxfPXQueGEsdz10LnlhLGs9YlswXS50cmFjZSxBPWJbMF0udCxUPVwidmlvbGluXCI9PT1rLnR5cGUsTT1bXSxTPUEuYmRQb3MsRT1BLndIb3ZlcixDPWZ1bmN0aW9uKHQpe3JldHVybiB0LnBvcytBLmJQb3MtcH07VCYmXCJib3RoXCIhPT1rLnNpZGU/KFwicG9zaXRpdmVcIj09PWsuc2lkZSYmKHY9ZnVuY3Rpb24odCl7dmFyIGU9Qyh0KTtyZXR1cm4gYS5pbmJveChlLGUrRSxtKX0pLFwibmVnYXRpdmVcIj09PWsuc2lkZSYmKHY9ZnVuY3Rpb24odCl7dmFyIGU9Qyh0KTtyZXR1cm4gYS5pbmJveChlLUUsZSxtKX0pKTp2PWZ1bmN0aW9uKHQpe3ZhciBlPUModCk7cmV0dXJuIGEuaW5ib3goZS1FLGUrRSxtKX0seD1UP2Z1bmN0aW9uKHQpe3JldHVybiBhLmluYm94KHQuc3BhblswXS1mLHQuc3BhblsxXS1mLG0pfTpmdW5jdGlvbih0KXtyZXR1cm4gYS5pbmJveCh0Lm1pbi1mLHQubWF4LWYsbSl9LFwiaFwiPT09ay5vcmllbnRhdGlvbj8oZj1lLHA9cixkPXgsZz12LGw9XCJ5XCIsdT13LGM9XCJ4XCIsaD1fKTooZj1yLHA9ZSxkPXYsZz14LGw9XCJ4XCIsdT1fLGM9XCJ5XCIsaD13KTt2YXIgTD1NYXRoLm1pbigxLFMvTWF0aC5hYnModS5yMmModS5yYW5nZVsxXSktdS5yMmModS5yYW5nZVswXSkpKTtmdW5jdGlvbiB6KHQpe3JldHVybihkKHQpK2codCkpLzJ9bT10Lm1heEhvdmVyRGlzdGFuY2UtTCx5PXQubWF4U3Bpa2VEaXN0YW5jZS1MO3ZhciBPPWEuZ2V0RGlzdGFuY2VGdW5jdGlvbihzLGQsZyx6KTtpZihhLmdldENsb3Nlc3QoYixPLHQpLCExPT09dC5pbmRleClyZXR1cm5bXTt2YXIgST1iW3QuaW5kZXhdLEQ9ay5saW5lLmNvbG9yLFA9KGsubWFya2VyfHx7fSkuY29sb3I7by5vcGFjaXR5KEQpJiZrLmxpbmUud2lkdGg/dC5jb2xvcj1EOm8ub3BhY2l0eShQKSYmay5ib3hwb2ludHM/dC5jb2xvcj1QOnQuY29sb3I9ay5maWxsY29sb3IsdFtsK1wiMFwiXT11LmMycChJLnBvcytBLmJQb3MtUywhMCksdFtsK1wiMVwiXT11LmMycChJLnBvcytBLmJQb3MrUywhMCksdFtsK1wiTGFiZWxWYWxcIl09SS5wb3M7dmFyIFI9bCtcIlNwaWtlXCI7dC5zcGlrZURpc3RhbmNlPXooSSkqeS9tLHRbUl09dS5jMnAoSS5wb3MsITApO3ZhciBGPXt9LEI9W1wibWVkXCIsXCJtaW5cIixcInExXCIsXCJxM1wiLFwibWF4XCJdOyhrLmJveG1lYW58fChrLm1lYW5saW5lfHx7fSkudmlzaWJsZSkmJkIucHVzaChcIm1lYW5cIiksKGsuYm94cG9pbnRzfHxrLnBvaW50cykmJkIucHVzaChcImxmXCIsXCJ1ZlwiKTtmb3IodmFyIE49MDtOPEIubGVuZ3RoO04rKyl7dmFyIGo9QltOXTtpZihqIGluIEkmJiEoSVtqXWluIEYpKXtGW0lbal1dPSEwO3ZhciBWPUlbal0sVT1oLmMycChWLCEwKSxxPWkuZXh0ZW5kRmxhdCh7fSx0KTtxW2MrXCIwXCJdPXFbYytcIjFcIl09VSxxW2MrXCJMYWJlbFZhbFwiXT1WLHFbYytcIkxhYmVsXCJdPShBLmxhYmVscz9BLmxhYmVsc1tqXStcIiBcIjpcIlwiKStuLmhvdmVyTGFiZWxUZXh0KGgsVikscS5ob3Zlck9uQm94PSEwLFwibWVhblwiPT09aiYmXCJzZFwiaW4gSSYmXCJzZFwiPT09ay5ib3htZWFuJiYocVtjK1wiZXJyXCJdPUkuc2QpLHQubmFtZT1cIlwiLHQuc3Bpa2VEaXN0YW5jZT12b2lkIDAsdFtSXT12b2lkIDAscS5ob3ZlcnRlbXBsYXRlPSExLE0ucHVzaChxKX19cmV0dXJuIE19ZnVuY3Rpb24gYyh0LGUscil7Zm9yKHZhciBuLG8sbCxjPXQuY2QsdT10LnhhLGg9dC55YSxmPWNbMF0udHJhY2UscD11LmMycChlKSxkPWguYzJwKHIpLGc9YS5xdWFkcmF0dXJlKGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDMsdC5tcmN8fDApO3JldHVybiBNYXRoLm1heChNYXRoLmFicyh1LmMycCh0LngpLXApLWUsMS0zL2UpfSxmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnMoaC5jMnAodC55KS1kKS1lLDEtMy9lKX0pLHY9ITEsbT0wO208Yy5sZW5ndGg7bSsrKXtvPWNbbV07Zm9yKHZhciB5PTA7eTwoby5wdHN8fFtdKS5sZW5ndGg7eSsrKXt2YXIgeD1nKGw9by5wdHNbeV0pO3g8PXQuZGlzdGFuY2UmJih0LmRpc3RhbmNlPXgsdj1bbSx5XSl9fWlmKCF2KXJldHVybiExO2w9KG89Y1t2WzBdXSkucHRzW3ZbMV1dO3ZhciBiLF89dS5jMnAobC54LCEwKSx3PWguYzJwKGwueSwhMCksaz1sLm1yY3x8MTtyZXR1cm4gbj1pLmV4dGVuZEZsYXQoe30sdCx7aW5kZXg6bC5pLGNvbG9yOihmLm1hcmtlcnx8e30pLmNvbG9yLG5hbWU6Zi5uYW1lLHgwOl8tayx4MTpfK2sseTA6dy1rLHkxOncrayxzcGlrZURpc3RhbmNlOnQuZGlzdGFuY2UsaG92ZXJ0ZW1wbGF0ZTpmLmhvdmVydGVtcGxhdGV9KSxcImhcIj09PWYub3JpZW50YXRpb24/KGI9aCxuLnhMYWJlbFZhbD1sLngsbi55TGFiZWxWYWw9by5wb3MpOihiPXUsbi54TGFiZWxWYWw9by5wb3Msbi55TGFiZWxWYWw9bC55KSxuW2IuX2lkLmNoYXJBdCgwKStcIlNwaWtlXCJdPWIuYzJwKG8ucG9zLCEwKSxzKGwsZixuKSxufWUuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT10LmNkWzBdLnRyYWNlLmhvdmVyb24sbz1bXTtyZXR1cm4tMSE9PWEuaW5kZXhPZihcImJveGVzXCIpJiYobz1vLmNvbmNhdChsKHQsZSxyLG4pKSksLTEhPT1hLmluZGV4T2YoXCJwb2ludHNcIikmJihpPWModCxlLHIpKSxcImNsb3Nlc3RcIj09PW4/aT9baV06bzppPyhvLnB1c2goaSksbyk6b30saG92ZXJPbkJveGVzOmwsaG92ZXJPblBvaW50czpjfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0XCI6MTA2MH1dLDg2ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4ubGF5b3V0QXR0cmlidXRlcz10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLnN1cHBseURlZmF1bHRzLG4uY3Jvc3NUcmFjZURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLmNyb3NzVHJhY2VEZWZhdWx0cyxuLnN1cHBseUxheW91dERlZmF1bHRzPXQoXCIuL2xheW91dF9kZWZhdWx0c1wiKS5zdXBwbHlMYXlvdXREZWZhdWx0cyxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLmNyb3NzVHJhY2VDYWxjPXQoXCIuL2Nyb3NzX3RyYWNlX2NhbGNcIikuY3Jvc3NUcmFjZUNhbGMsbi5wbG90PXQoXCIuL3Bsb3RcIikucGxvdCxuLnN0eWxlPXQoXCIuL3N0eWxlXCIpLnN0eWxlLG4uc3R5bGVPblNlbGVjdD10KFwiLi9zdHlsZVwiKS5zdHlsZU9uU2VsZWN0LG4uaG92ZXJQb2ludHM9dChcIi4vaG92ZXJcIikuaG92ZXJQb2ludHMsbi5ldmVudERhdGE9dChcIi4vZXZlbnRfZGF0YVwiKSxuLnNlbGVjdFBvaW50cz10KFwiLi9zZWxlY3RcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJib3hcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIiksbi5jYXRlZ29yaWVzPVtcImNhcnRlc2lhblwiLFwic3ZnXCIsXCJzeW1ib2xzXCIsXCJvcmllbnRlZFwiLFwiYm94LXZpb2xpblwiLFwic2hvd0xlZ2VuZFwiLFwiYm94TGF5b3V0XCIsXCJ6b29tU2NhbGVcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIjo3NjAsXCIuL2F0dHJpYnV0ZXNcIjo4NjIsXCIuL2NhbGNcIjo4NjMsXCIuL2Nyb3NzX3RyYWNlX2NhbGNcIjo4NjQsXCIuL2RlZmF1bHRzXCI6ODY1LFwiLi9ldmVudF9kYXRhXCI6ODY2LFwiLi9ob3ZlclwiOjg2NyxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo4NjksXCIuL2xheW91dF9kZWZhdWx0c1wiOjg3MCxcIi4vcGxvdFwiOjg3MSxcIi4vc2VsZWN0XCI6ODcyLFwiLi9zdHlsZVwiOjg3M31dLDg2OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17Ym94bW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiZ3JvdXBcIixcIm92ZXJsYXlcIl0sZGZsdDpcIm92ZXJsYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sYm94Z2FwOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDouMyxlZGl0VHlwZTpcImNhbGNcIn0sYm94Z3JvdXBnYXA6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0Oi4zLGVkaXRUeXBlOlwiY2FsY1wifX19LHt9XSw4NzA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIik7ZnVuY3Rpb24gbyh0LGUscixpLGEpe2Zvcih2YXIgbz1hK1wiTGF5b3V0XCIscz0hMSxsPTA7bDxyLmxlbmd0aDtsKyspe3ZhciBjPXJbbF07aWYobi50cmFjZUlzKGMsbykpe3M9ITA7YnJlYWt9fXMmJihpKGErXCJtb2RlXCIpLGkoYStcImdhcFwiKSxpKGErXCJncm91cGdhcFwiKSl9ZS5leHBvcnRzPXtzdXBwbHlMYXlvdXREZWZhdWx0czpmdW5jdGlvbih0LGUscil7bygwLDAscixmdW5jdGlvbihyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsYSxyLG4pfSxcImJveFwiKX0sX3N1cHBseTpvfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6ODY5fV0sODcxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksbz01LHM9LjAxO2Z1bmN0aW9uIGwodCxlLHIsYSl7dmFyIG8scyxsPWUucG9zLGM9ZS52YWwsdT1hLmJQb3MsaD1hLndkUG9zfHwwLGY9YS5iUG9zUHhPZmZzZXR8fDAscD1yLndoaXNrZXJ3aWR0aHx8MCxkPXIubm90Y2hlZHx8ITEsZz1kPzEtMipyLm5vdGNod2lkdGg6MTtBcnJheS5pc0FycmF5KGEuYmRQb3MpPyhvPWEuYmRQb3NbMF0scz1hLmJkUG9zWzFdKToobz1hLmJkUG9zLHM9YS5iZFBvcyk7dmFyIHY9dC5zZWxlY3RBbGwoXCJwYXRoLmJveFwiKS5kYXRhKFwidmlvbGluXCIhPT1yLnR5cGV8fHIuYm94LnZpc2libGU/aS5pZGVudGl0eTpbXSk7di5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuc3R5bGUoXCJ2ZWN0b3ItZWZmZWN0XCIsXCJub24tc2NhbGluZy1zdHJva2VcIikuYXR0cihcImNsYXNzXCIsXCJib3hcIiksdi5leGl0KCkucmVtb3ZlKCksdi5lYWNoKGZ1bmN0aW9uKHQpe2lmKHQuZW1wdHkpcmV0dXJuXCJNMCwwWlwiO3ZhciBlPXQucG9zLGE9bC5jMnAoZSt1LCEwKStmLHY9bC5jMnAoZSt1LW8sITApK2YsbT1sLmMycChlK3UrcywhMCkrZix5PWwuYzJwKGUrdS1oLCEwKStmLHg9bC5jMnAoZSt1K2gsITApK2YsYj1sLmMycChlK3UtbypnLCEwKStmLF89bC5jMnAoZSt1K3MqZywhMCkrZix3PWMuYzJwKHQucTEsITApLGs9Yy5jMnAodC5xMywhMCksQT1pLmNvbnN0cmFpbihjLmMycCh0Lm1lZCwhMCksTWF0aC5taW4odyxrKSsxLE1hdGgubWF4KHcsayktMSksVD12b2lkIDA9PT10LmxmfHwhMT09PXIuYm94cG9pbnRzLE09Yy5jMnAoVD90Lm1pbjp0LmxmLCEwKSxTPWMuYzJwKFQ/dC5tYXg6dC51ZiwhMCksRT1jLmMycCh0LmxuLCEwKSxDPWMuYzJwKHQudW4sITApO1wiaFwiPT09ci5vcmllbnRhdGlvbj9uLnNlbGVjdCh0aGlzKS5hdHRyKFwiZFwiLFwiTVwiK0ErXCIsXCIrYitcIlZcIitfK1wiTVwiK3crXCIsXCIrditcIlZcIittKyhkP1wiSFwiK0UrXCJMXCIrQStcIixcIitfK1wiTFwiK0MrXCIsXCIrbTpcIlwiKStcIkhcIitrK1wiVlwiK3YrKGQ/XCJIXCIrQytcIkxcIitBK1wiLFwiK2IrXCJMXCIrRStcIixcIit2OlwiXCIpK1wiWk1cIit3K1wiLFwiK2ErXCJIXCIrTStcIk1cIitrK1wiLFwiK2ErXCJIXCIrUysoMD09PXA/XCJcIjpcIk1cIitNK1wiLFwiK3krXCJWXCIreCtcIk1cIitTK1wiLFwiK3krXCJWXCIreCkpOm4uc2VsZWN0KHRoaXMpLmF0dHIoXCJkXCIsXCJNXCIrYitcIixcIitBK1wiSFwiK18rXCJNXCIrditcIixcIit3K1wiSFwiK20rKGQ/XCJWXCIrRStcIkxcIitfK1wiLFwiK0ErXCJMXCIrbStcIixcIitDOlwiXCIpK1wiVlwiK2srXCJIXCIrdisoZD9cIlZcIitDK1wiTFwiK2IrXCIsXCIrQStcIkxcIit2K1wiLFwiK0U6XCJcIikrXCJaTVwiK2ErXCIsXCIrdytcIlZcIitNK1wiTVwiK2ErXCIsXCIraytcIlZcIitTKygwPT09cD9cIlwiOlwiTVwiK3krXCIsXCIrTStcIkhcIit4K1wiTVwiK3krXCIsXCIrUytcIkhcIit4KSl9KX1mdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBsPWUueCxjPWUueSx1PW4uYmRQb3MsaD1uLmJQb3MsZj1yLmJveHBvaW50c3x8ci5wb2ludHM7aS5zZWVkUHNldWRvUmFuZG9tKCk7dmFyIHA9dC5zZWxlY3RBbGwoXCJnLnBvaW50c1wiKS5kYXRhKGY/ZnVuY3Rpb24odCl7cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXt0LnQ9bix0LnRyYWNlPXJ9KSx0fTpbXSk7cC5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsXCJwb2ludHNcIikscC5leGl0KCkucmVtb3ZlKCk7dmFyIGQ9cC5zZWxlY3RBbGwoXCJwYXRoXCIpLmRhdGEoZnVuY3Rpb24odCl7dmFyIGUsbixhPXQucHRzMixsPU1hdGgubWF4KCh0Lm1heC10Lm1pbikvMTAsdC5xMy10LnExKSxjPTFlLTkqbCxwPWwqcyxkPVtdLGc9MDtpZihyLmppdHRlcil7aWYoMD09PWwpZm9yKGc9MSxkPW5ldyBBcnJheShhLmxlbmd0aCksZT0wO2U8YS5sZW5ndGg7ZSsrKWRbZV09MTtlbHNlIGZvcihlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciB2PU1hdGgubWF4KDAsZS1vKSxtPWFbdl0udix5PU1hdGgubWluKGEubGVuZ3RoLTEsZStvKSx4PWFbeV0udjtcImFsbFwiIT09ZiYmKGFbZV0udjx0LmxmP3g9TWF0aC5taW4oeCx0LmxmKTptPU1hdGgubWF4KG0sdC51ZikpO3ZhciBiPU1hdGguc3FydChwKih5LXYpLyh4LW0rYykpfHwwO2I9aS5jb25zdHJhaW4oTWF0aC5hYnMoYiksMCwxKSxkLnB1c2goYiksZz1NYXRoLm1heChiLGcpfW49MipyLmppdHRlci8oZ3x8MSl9Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKyl7dmFyIF89YVtlXSx3PV8udixrPXIuaml0dGVyP24qZFtlXSooaS5wc2V1ZG9SYW5kb20oKS0uNSk6MCxBPXQucG9zK2grdSooci5wb2ludHBvcytrKTtcImhcIj09PXIub3JpZW50YXRpb24/KF8ueT1BLF8ueD13KTooXy54PUEsXy55PXcpLFwic3VzcGVjdGVkb3V0bGllcnNcIj09PWYmJnc8dC51byYmdz50LmxvJiYoXy5zbz0hMCl9cmV0dXJuIGF9KTtkLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5jbGFzc2VkKFwicG9pbnRcIiwhMCksZC5leGl0KCkucmVtb3ZlKCksZC5jYWxsKGEudHJhbnNsYXRlUG9pbnRzLGwsYyl9ZnVuY3Rpb24gdSh0LGUscixhKXt2YXIgbyxzLGw9ZS5wb3MsYz1lLnZhbCx1PWEuYlBvcyxoPWEuYlBvc1B4T2Zmc2V0fHwwLGY9ci5ib3htZWFufHwoci5tZWFubGluZXx8e30pLnZpc2libGU7QXJyYXkuaXNBcnJheShhLmJkUG9zKT8obz1hLmJkUG9zWzBdLHM9YS5iZFBvc1sxXSk6KG89YS5iZFBvcyxzPWEuYmRQb3MpO3ZhciBwPXQuc2VsZWN0QWxsKFwicGF0aC5tZWFuXCIpLmRhdGEoXCJib3hcIj09PXIudHlwZSYmci5ib3htZWFufHxcInZpb2xpblwiPT09ci50eXBlJiZyLmJveC52aXNpYmxlJiZyLm1lYW5saW5lLnZpc2libGU/aS5pZGVudGl0eTpbXSk7cC5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsXCJtZWFuXCIpLnN0eWxlKHtmaWxsOlwibm9uZVwiLFwidmVjdG9yLWVmZmVjdFwiOlwibm9uLXNjYWxpbmctc3Ryb2tlXCJ9KSxwLmV4aXQoKS5yZW1vdmUoKSxwLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9bC5jMnAodC5wb3MrdSwhMCkraCxpPWwuYzJwKHQucG9zK3UtbywhMCkraCxhPWwuYzJwKHQucG9zK3UrcywhMCkraCxwPWMuYzJwKHQubWVhbiwhMCksZD1jLmMycCh0Lm1lYW4tdC5zZCwhMCksZz1jLmMycCh0Lm1lYW4rdC5zZCwhMCk7XCJoXCI9PT1yLm9yaWVudGF0aW9uP24uc2VsZWN0KHRoaXMpLmF0dHIoXCJkXCIsXCJNXCIrcCtcIixcIitpK1wiVlwiK2ErKFwic2RcIj09PWY/XCJtMCwwTFwiK2QrXCIsXCIrZStcIkxcIitwK1wiLFwiK2krXCJMXCIrZytcIixcIitlK1wiWlwiOlwiXCIpKTpuLnNlbGVjdCh0aGlzKS5hdHRyKFwiZFwiLFwiTVwiK2krXCIsXCIrcCtcIkhcIithKyhcInNkXCI9PT1mP1wibTAsMExcIitlK1wiLFwiK2QrXCJMXCIraStcIixcIitwK1wiTFwiK2UrXCIsXCIrZytcIlpcIjpcIlwiKSl9KX1lLmV4cG9ydHM9e3Bsb3Q6ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89ZS54YXhpcyxzPWUueWF4aXM7aS5tYWtlVHJhY2VHcm91cHMoYSxyLFwidHJhY2UgYm94ZXNcIikuZWFjaChmdW5jdGlvbih0KXt2YXIgcixpLGE9bi5zZWxlY3QodGhpcyksaD10WzBdLGY9aC50LHA9aC50cmFjZTtlLmlzUmFuZ2VQbG90fHwoaC5ub2RlMz1hKSxmLndkUG9zPWYuYmRQb3MqcC53aGlza2Vyd2lkdGgsITAhPT1wLnZpc2libGV8fGYuZW1wdHk/YS5yZW1vdmUoKTooXCJoXCI9PT1wLm9yaWVudGF0aW9uPyhyPXMsaT1vKToocj1vLGk9cyksbChhLHtwb3M6cix2YWw6aX0scCxmKSxjKGEse3g6byx5OnN9LHAsZiksdShhLHtwb3M6cix2YWw6aX0scCxmKSl9KX0scGxvdEJveEFuZFdoaXNrZXJzOmwscGxvdFBvaW50czpjLHBsb3RCb3hNZWFuOnV9fSx7XCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9saWJcIjo3MDEsZDM6MTU1fV0sODcyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXQuY2QsYT10LnhheGlzLG89dC55YXhpcyxzPVtdO2lmKCExPT09ZSlmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWZvcihuPTA7bjwoaVtyXS5wdHN8fFtdKS5sZW5ndGg7bisrKWlbcl0ucHRzW25dLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWZvcihuPTA7bjwoaVtyXS5wdHN8fFtdKS5sZW5ndGg7bisrKXt2YXIgbD1pW3JdLnB0c1tuXSxjPWEuYzJwKGwueCksdT1vLmMycChsLnkpO2UuY29udGFpbnMoW2MsdV0sbnVsbCxsLmksdCk/KHMucHVzaCh7cG9pbnROdW1iZXI6bC5pLHg6YS5jMmQobC54KSx5Om8uYzJkKGwueSl9KSxsLnNlbGVjdGVkPTEpOmwuc2VsZWN0ZWQ9MH1yZXR1cm4gc319LHt9XSw4NzM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIik7ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUpe3ZhciByPWU/ZVswXS5ub2RlMzpuLnNlbGVjdCh0KS5zZWxlY3RBbGwoXCJnLnRyYWNlLmJveGVzXCIpO3Iuc3R5bGUoXCJvcGFjaXR5XCIsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pLHIuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxvPWVbMF0udHJhY2Uscz1vLmxpbmUud2lkdGg7ZnVuY3Rpb24gbCh0LGUscixuKXt0LnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsZStcInB4XCIpLmNhbGwoaS5zdHJva2UscikuY2FsbChpLmZpbGwsbil9dmFyIGM9ci5zZWxlY3RBbGwoXCJwYXRoLmJveFwiKTtpZihcImNhbmRsZXN0aWNrXCI9PT1vLnR5cGUpYy5lYWNoKGZ1bmN0aW9uKHQpe2lmKCF0LmVtcHR5KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPW9bdC5kaXJdO2woZSxyLmxpbmUud2lkdGgsci5saW5lLmNvbG9yLHIuZmlsbGNvbG9yKSxlLnN0eWxlKFwib3BhY2l0eVwiLG8uc2VsZWN0ZWRwb2ludHMmJiF0LnNlbGVjdGVkPy4zOjEpfX0pO2Vsc2V7bChjLHMsby5saW5lLmNvbG9yLG8uZmlsbGNvbG9yKSxyLnNlbGVjdEFsbChcInBhdGgubWVhblwiKS5zdHlsZSh7XCJzdHJva2Utd2lkdGhcIjpzLFwic3Ryb2tlLWRhc2hhcnJheVwiOjIqcytcInB4LFwiK3MrXCJweFwifSkuY2FsbChpLnN0cm9rZSxvLmxpbmUuY29sb3IpO3ZhciB1PXIuc2VsZWN0QWxsKFwicGF0aC5wb2ludFwiKTthLnBvaW50U3R5bGUodSxvLHQpfX0pfSxzdHlsZU9uU2VsZWN0OmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS5ub2RlMyxuPWVbMF0udHJhY2UsaT1yLnNlbGVjdEFsbChcInBhdGgucG9pbnRcIik7bi5zZWxlY3RlZHBvaW50cz9hLnNlbGVjdGVkUG9pbnRTdHlsZShpLG4pOmEucG9pbnRTdHlsZShpLG4sdCl9fX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxkMzoxNTV9XSw4NzQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLmV4dGVuZEZsYXQsaT10KFwiLi4vb2hsYy9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uL2JveC9hdHRyaWJ1dGVzXCIpO2Z1bmN0aW9uIG8odCl7cmV0dXJue2xpbmU6e2NvbG9yOm4oe30sYS5saW5lLmNvbG9yLHtkZmx0OnR9KSx3aWR0aDphLmxpbmUud2lkdGgsZWRpdFR5cGU6XCJzdHlsZVwifSxmaWxsY29sb3I6YS5maWxsY29sb3IsZWRpdFR5cGU6XCJzdHlsZVwifX1lLmV4cG9ydHM9e3g6aS54LG9wZW46aS5vcGVuLGhpZ2g6aS5oaWdoLGxvdzppLmxvdyxjbG9zZTppLmNsb3NlLGxpbmU6e3dpZHRoOm4oe30sYS5saW5lLndpZHRoLHt9KSxlZGl0VHlwZTpcInN0eWxlXCJ9LGluY3JlYXNpbmc6byhpLmluY3JlYXNpbmcubGluZS5jb2xvci5kZmx0KSxkZWNyZWFzaW5nOm8oaS5kZWNyZWFzaW5nLmxpbmUuY29sb3IuZGZsdCksdGV4dDppLnRleHQsaG92ZXJ0ZXh0OmkuaG92ZXJ0ZXh0LHdoaXNrZXJ3aWR0aDpuKHt9LGEud2hpc2tlcndpZHRoLHtkZmx0OjB9KSxob3ZlcmxhYmVsOmkuaG92ZXJsYWJlbH19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2JveC9hdHRyaWJ1dGVzXCI6ODYyLFwiLi4vb2hsYy9hdHRyaWJ1dGVzXCI6OTk5fV0sODc1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxhPXQoXCIuLi9vaGxjL2NhbGNcIikuY2FsY0NvbW1vbjtmdW5jdGlvbiBvKHQsZSxyLG4pe3JldHVybnttaW46cixxMTpNYXRoLm1pbih0LG4pLG1lZDpuLHEzOk1hdGgubWF4KHQsbiksbWF4OmV9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQscz1pLmdldEZyb21JZCh0LGUueGF4aXMpLGw9aS5nZXRGcm9tSWQodCxlLnlheGlzKSxjPXMubWFrZUNhbGNkYXRhKGUsXCJ4XCIpLHU9YSh0LGUsYyxsLG8pO3JldHVybiB1Lmxlbmd0aD8obi5leHRlbmRGbGF0KHVbMF0udCx7bnVtOnIuX251bUJveGVzLGRQb3M6bi5kaXN0aW5jdFZhbHMoYykubWluRGlmZi8yLHBvc0xldHRlcjpcInhcIix2YWxMZXR0ZXI6XCJ5XCJ9KSxyLl9udW1Cb3hlcysrLHUpOlt7dDp7ZW1wdHk6ITB9fV19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL29obGMvY2FsY1wiOjFlM31dLDg3NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxhPXQoXCIuLi9vaGxjL29obGNfZGVmYXVsdHNcIiksbz10KFwiLi9hdHRyaWJ1dGVzXCIpO2Z1bmN0aW9uIHModCxlLHIsbil7dmFyIGE9cihuK1wiLmxpbmUuY29sb3JcIik7cihuK1wiLmxpbmUud2lkdGhcIixlLmxpbmUud2lkdGgpLHIobitcIi5maWxsY29sb3JcIixpLmFkZE9wYWNpdHkoYSwuNSkpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXtmdW5jdGlvbiBsKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxvLHIsaSl9YSh0LGUsbCxpKT8obChcImxpbmUud2lkdGhcIikscyh0LGUsbCxcImluY3JlYXNpbmdcIikscyh0LGUsbCxcImRlY3JlYXNpbmdcIiksbChcInRleHRcIiksbChcImhvdmVydGV4dFwiKSxsKFwid2hpc2tlcndpZHRoXCIpLGkuX3JlcXVlc3RSYW5nZXNsaWRlcltlLnhheGlzXT0hMCk6ZS52aXNpYmxlPSExfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL29obGMvb2hsY19kZWZhdWx0c1wiOjEwMDQsXCIuL2F0dHJpYnV0ZXNcIjo4NzR9XSw4Nzc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6XCJ0cmFjZVwiLG5hbWU6XCJjYW5kbGVzdGlja1wiLGJhc2VQbG90TW9kdWxlOnQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIiksY2F0ZWdvcmllczpbXCJjYXJ0ZXNpYW5cIixcInN2Z1wiLFwic2hvd0xlZ2VuZFwiLFwiY2FuZGxlc3RpY2tcIixcImJveExheW91dFwiXSxtZXRhOnt9LGF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoXCIuLi9ib3gvbGF5b3V0X2F0dHJpYnV0ZXNcIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dChcIi4uL2JveC9sYXlvdXRfZGVmYXVsdHNcIikuc3VwcGx5TGF5b3V0RGVmYXVsdHMsY3Jvc3NUcmFjZUNhbGM6dChcIi4uL2JveC9jcm9zc190cmFjZV9jYWxjXCIpLmNyb3NzVHJhY2VDYWxjLHN1cHBseURlZmF1bHRzOnQoXCIuL2RlZmF1bHRzXCIpLGNhbGM6dChcIi4vY2FsY1wiKSxwbG90OnQoXCIuLi9ib3gvcGxvdFwiKS5wbG90LGxheWVyTmFtZTpcImJveGxheWVyXCIsc3R5bGU6dChcIi4uL2JveC9zdHlsZVwiKS5zdHlsZSxob3ZlclBvaW50czp0KFwiLi4vb2hsYy9ob3ZlclwiKS5ob3ZlclBvaW50cyxzZWxlY3RQb2ludHM6dChcIi4uL29obGMvc2VsZWN0XCIpfX0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi4vYm94L2Nyb3NzX3RyYWNlX2NhbGNcIjo4NjQsXCIuLi9ib3gvbGF5b3V0X2F0dHJpYnV0ZXNcIjo4NjksXCIuLi9ib3gvbGF5b3V0X2RlZmF1bHRzXCI6ODcwLFwiLi4vYm94L3Bsb3RcIjo4NzEsXCIuLi9ib3gvc3R5bGVcIjo4NzMsXCIuLi9vaGxjL2hvdmVyXCI6MTAwMixcIi4uL29obGMvc2VsZWN0XCI6MTAwNixcIi4vYXR0cmlidXRlc1wiOjg3NCxcIi4vY2FsY1wiOjg3NSxcIi4vZGVmYXVsdHNcIjo4NzZ9XSw4Nzg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9heGlzX2RlZmF1bHRzXCIpLGk9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyl7YShcImFcIil8fChhKFwiZGFcIiksYShcImEwXCIpKSxhKFwiYlwiKXx8KGEoXCJkYlwiKSxhKFwiYjBcIikpLGZ1bmN0aW9uKHQsZSxyLGEpe1tcImFheGlzXCIsXCJiYXhpc1wiXS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3ZhciBzPW8uY2hhckF0KDApLGw9dFtvXXx8e30sYz1pLm5ld0NvbnRhaW5lcihlLG8pLHU9e3RpY2tmb250OlwieFwiLGlkOnMrXCJheGlzXCIsbGV0dGVyOnMsZm9udDplLmZvbnQsbmFtZTpvLGRhdGE6dFtzXSxjYWxlbmRhcjplLmNhbGVuZGFyLGRmbHRDb2xvcjphLGJnQ29sb3I6ci5wYXBlcl9iZ2NvbG9yLGZ1bGxMYXlvdXQ6cn07bihsLGMsdSksYy5fY2F0ZWdvcmllcz1jLl9jYXRlZ29yaWVzfHxbXSx0W29dfHxcIi1cIj09PWwudHlwZXx8KHRbb109e3R5cGU6bC50eXBlfSl9KX0odCxlLHIsbyl9fSx7XCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi9heGlzX2RlZmF1bHRzXCI6ODgzfV0sODc5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24gdChlLHIpe2lmKCFuKGUpfHxyPj0xMClyZXR1cm4gbnVsbDt2YXIgaT0xLzA7dmFyIGE9LTEvMDt2YXIgbz1lLmxlbmd0aDtmb3IodmFyIHM9MDtzPG87cysrKXt2YXIgbD1lW3NdO2lmKG4obCkpe3ZhciBjPXQobCxyKzEpO2MmJihpPU1hdGgubWluKGNbMF0saSksYT1NYXRoLm1heChjWzFdLGEpKX1lbHNlIGk9TWF0aC5taW4obCxpKSxhPU1hdGgubWF4KGwsYSl9cmV0dXJuW2ksYV19KHQsMCl9fSx7XCIuLi8uLi9saWJcIjo3MDF9XSw4ODA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCIpLGk9dChcIi4vYXhpc19hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiKSxvPW4oe2VkaXRUeXBlOlwiY2FsY1wifSk7by5mYW1pbHkuZGZsdD0nXCJPcGVuIFNhbnNcIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLG8uc2l6ZS5kZmx0PTEyLG8uY29sb3IuZGZsdD1hLmRlZmF1bHRMaW5lLGUuZXhwb3J0cz17Y2FycGV0Ont2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHg6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LHk6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LGE6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGEwOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifSxkYTp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MSxlZGl0VHlwZTpcImNhbGNcIn0sYjp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sYjA6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjAsZWRpdFR5cGU6XCJjYWxjXCJ9LGRiOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxLGVkaXRUeXBlOlwiY2FsY1wifSxjaGVhdGVyc2xvcGU6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjEsZWRpdFR5cGU6XCJjYWxjXCJ9LGFheGlzOmksYmF4aXM6aSxmb250Om8sY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6YS5kZWZhdWx0TGluZSxlZGl0VHlwZTpcInBsb3RcIn0sdHJhbnNmb3Jtczp2b2lkIDB9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIjo1NzcsXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIjo3NzUsXCIuL2F4aXNfYXR0cmlidXRlc1wiOjg4Mn1dLDg4MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbyxzLGwsYyx1LGgsZixwLGQsZyx2LG0seT1uKHIpP1wiYVwiOlwiYlwiLHg9KFwiYVwiPT09eT90LmFheGlzOnQuYmF4aXMpLnNtb290aGluZyxiPVwiYVwiPT09eT90LmEyaTp0LmIyaixfPVwiYVwiPT09eT9yOmksdz1cImFcIj09PXk/aTpyLGs9XCJhXCI9PT15P2UuYS5sZW5ndGg6ZS5iLmxlbmd0aCxBPVwiYVwiPT09eT9lLmIubGVuZ3RoOmUuYS5sZW5ndGgsVD1NYXRoLmZsb29yKFwiYVwiPT09eT90LmIyaih3KTp0LmEyaSh3KSksTT1cImFcIj09PXk/ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLGUsVCl9OmZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxULGUpfTt4JiYocz1NYXRoLm1heCgwLE1hdGgubWluKEEtMixUKSksbD1ULXMsbz1cImFcIj09PXk/ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaShbXSxlLHMscixsKX06ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaihbXSxzLGUsbCxyKX0pO3ZhciBTPWIoX1swXSksRT1iKF9bMV0pLEM9UzxFPzE6LTEsTD0xZS04KihFLVMpLHo9Qz4wP01hdGguZmxvb3I6TWF0aC5jZWlsLE89Qz4wP01hdGguY2VpbDpNYXRoLmZsb29yLEk9Qz4wP01hdGgubWluOk1hdGgubWF4LEQ9Qz4wP01hdGgubWF4Ok1hdGgubWluLFA9eihTK0wpLFI9TyhFLUwpLEY9W1toPU0oUyldXTtmb3IoYT1QO2EqQzxSKkM7YSs9QyljPVtdLGc9RChTLGEpLG09KHY9SShFLGErQykpLWcsdT1NYXRoLm1heCgwLE1hdGgubWluKGstMixNYXRoLmZsb29yKC41KihnK3YpKSkpLGY9TSh2KSx4JiYocD1vKHUsZy11KSxkPW8odSx2LXUpLGMucHVzaChbaFswXStwWzBdLzMqbSxoWzFdK3BbMV0vMyptXSksYy5wdXNoKFtmWzBdLWRbMF0vMyptLGZbMV0tZFsxXS8zKm1dKSksYy5wdXNoKGYpLEYucHVzaChjKSxoPWY7cmV0dXJuIEZ9fSx7XCIuLi8uLi9saWJcIjo3MDF9XSw4ODI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbDtlLmV4cG9ydHM9e2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcImNhbGNcIn0sc21vb3RoaW5nOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxLG1pbjowLG1heDoxLjMsZWRpdFR5cGU6XCJjYWxjXCJ9LHRpdGxlOnt0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwiY2FsY1wifSxmb250Om4oe2VkaXRUeXBlOlwiY2FsY1wifSksb2Zmc2V0Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxMCxlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LHR5cGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcIi1cIixcImxpbmVhclwiLFwiZGF0ZVwiLFwiY2F0ZWdvcnlcIl0sZGZsdDpcIi1cIixlZGl0VHlwZTpcImNhbGNcIn0sYXV0b3JhbmdlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbITAsITEsXCJyZXZlcnNlZFwiXSxkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSxyYW5nZW1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcIm5vcm1hbFwiLFwidG96ZXJvXCIsXCJub25uZWdhdGl2ZVwiXSxkZmx0Olwibm9ybWFsXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHJhbmdlOnt2YWxUeXBlOlwiaW5mb19hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wiLGl0ZW1zOlt7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsY1wifSx7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsY1wifV19LGZpeGVkcmFuZ2U6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMSxlZGl0VHlwZTpcImNhbGNcIn0sY2hlYXRlcnR5cGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImluZGV4XCIsXCJ2YWx1ZVwiXSxkZmx0OlwidmFsdWVcIixlZGl0VHlwZTpcImNhbGNcIn0sdGlja21vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImxpbmVhclwiLFwiYXJyYXlcIl0sZGZsdDpcImFycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LG50aWNrczp7dmFsVHlwZTpcImludGVnZXJcIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6XCJjYWxjXCJ9LHRpY2t2YWxzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx0aWNrdGV4dDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sc2hvd3RpY2tsYWJlbHM6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInN0YXJ0XCIsXCJlbmRcIixcImJvdGhcIixcIm5vbmVcIl0sZGZsdDpcInN0YXJ0XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHRpY2tmb250Om4oe2VkaXRUeXBlOlwiY2FsY1wifSksdGlja2FuZ2xlOnt2YWxUeXBlOlwiYW5nbGVcIixkZmx0OlwiYXV0b1wiLGVkaXRUeXBlOlwiY2FsY1wifSx0aWNrcHJlZml4Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwiY2FsY1wifSxzaG93dGlja3ByZWZpeDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYWxsXCIsXCJmaXJzdFwiLFwibGFzdFwiLFwibm9uZVwiXSxkZmx0OlwiYWxsXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHRpY2tzdWZmaXg6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHNob3d0aWNrc3VmZml4Ont2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhbGxcIixcImZpcnN0XCIsXCJsYXN0XCIsXCJub25lXCJdLGRmbHQ6XCJhbGxcIixlZGl0VHlwZTpcImNhbGNcIn0sc2hvd2V4cG9uZW50Ont2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhbGxcIixcImZpcnN0XCIsXCJsYXN0XCIsXCJub25lXCJdLGRmbHQ6XCJhbGxcIixlZGl0VHlwZTpcImNhbGNcIn0sZXhwb25lbnRmb3JtYXQ6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcIm5vbmVcIixcImVcIixcIkVcIixcInBvd2VyXCIsXCJTSVwiLFwiQlwiXSxkZmx0OlwiQlwiLGVkaXRUeXBlOlwiY2FsY1wifSxzZXBhcmF0ZXRob3VzYW5kczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwiY2FsY1wifSx0aWNrZm9ybWF0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwiY2FsY1wifSx0aWNrZm9ybWF0c3RvcHM6byhhLnRpY2tmb3JtYXRzdG9wcyxcImNhbGNcIixcImZyb20tcm9vdFwiKSxjYXRlZ29yeW9yZGVyOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ0cmFjZVwiLFwiY2F0ZWdvcnkgYXNjZW5kaW5nXCIsXCJjYXRlZ29yeSBkZXNjZW5kaW5nXCIsXCJhcnJheVwiXSxkZmx0OlwidHJhY2VcIixlZGl0VHlwZTpcImNhbGNcIn0sY2F0ZWdvcnlhcnJheTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sbGFiZWxwYWRkaW5nOnt2YWxUeXBlOlwiaW50ZWdlclwiLGRmbHQ6MTAsZWRpdFR5cGU6XCJjYWxjXCJ9LGxhYmVscHJlZml4Ont2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGxhYmVsc3VmZml4Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwiY2FsY1wifSxzaG93bGluZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwiY2FsY1wifSxsaW5lY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZTpcImNhbGNcIn0sbGluZXdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOlwiY2FsY1wifSxncmlkY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwiY2FsY1wifSxncmlkd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6XCJjYWxjXCJ9LHNob3dncmlkOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LG1pbm9yZ3JpZGNvdW50Ont2YWxUeXBlOlwiaW50ZWdlclwiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTpcImNhbGNcIn0sbWlub3Jncmlkd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6XCJjYWxjXCJ9LG1pbm9yZ3JpZGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmkubGlnaHRMaW5lLGVkaXRUeXBlOlwiY2FsY1wifSxzdGFydGxpbmU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHN0YXJ0bGluZWNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcImNhbGNcIn0sc3RhcnRsaW5ld2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjEsZWRpdFR5cGU6XCJjYWxjXCJ9LGVuZGxpbmU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGVuZGxpbmV3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MSxlZGl0VHlwZTpcImNhbGNcIn0sZW5kbGluZWNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcImNhbGNcIn0sdGljazA6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6XCJjYWxjXCJ9LGR0aWNrOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOlwiY2FsY1wifSxhcnJheXRpY2swOnt2YWxUeXBlOlwiaW50ZWdlclwiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTpcImNhbGNcIn0sYXJyYXlkdGljazp7dmFsVHlwZTpcImludGVnZXJcIixtaW46MSxkZmx0OjEsZWRpdFR5cGU6XCJjYWxjXCJ9LF9kZXByZWNhdGVkOnt0aXRsZTp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwiY2FsY1wifSx0aXRsZWZvbnQ6bih7ZWRpdFR5cGU6XCJjYWxjXCJ9KSx0aXRsZW9mZnNldDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MTAsZWRpdFR5cGU6XCJjYWxjXCJ9fSxlZGl0VHlwZTpcImNhbGNcIn19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiOjU3NyxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo3NjEsXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIjo3NzV9XSw4ODM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIikuYWRkT3BhY2l0eSxhPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxvPXQoXCIuLi8uLi9saWJcIikscz10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHNcIiksbD10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHNcIiksYz10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzXCIpLHU9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZXRfY29udmVydFwiKSxoPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19hdXRvdHlwZVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBmPXIubGV0dGVyLHA9ci5mb250fHx7fSxkPW5bZitcImF4aXNcIl07ZnVuY3Rpb24gZyhyLG4pe3JldHVybiBvLmNvZXJjZSh0LGUsZCxyLG4pfWZ1bmN0aW9uIHYocixuKXtyZXR1cm4gby5jb2VyY2UyKHQsZSxkLHIsbil9ci5uYW1lJiYoZS5fbmFtZT1yLm5hbWUsZS5faWQ9ci5uYW1lKTt2YXIgbT1nKFwidHlwZVwiKTsoXCItXCI9PT1tJiYoci5kYXRhJiZmdW5jdGlvbih0LGUpe2lmKFwiLVwiIT09dC50eXBlKXJldHVybjt2YXIgcj10Ll9pZC5jaGFyQXQoMCksbj10W3IrXCJjYWxlbmRhclwiXTt0LnR5cGU9aChlLG4pfShlLHIuZGF0YSksXCItXCI9PT1lLnR5cGU/ZS50eXBlPVwibGluZWFyXCI6bT10LnR5cGU9ZS50eXBlKSxnKFwic21vb3RoaW5nXCIpLGcoXCJjaGVhdGVydHlwZVwiKSxnKFwic2hvd3RpY2tsYWJlbHNcIiksZyhcImxhYmVscHJlZml4XCIsZitcIiA9IFwiKSxnKFwibGFiZWxzdWZmaXhcIiksZyhcInNob3d0aWNrcHJlZml4XCIpLGcoXCJzaG93dGlja3N1ZmZpeFwiKSxnKFwic2VwYXJhdGV0aG91c2FuZHNcIiksZyhcInRpY2tmb3JtYXRcIiksZyhcImV4cG9uZW50Zm9ybWF0XCIpLGcoXCJzaG93ZXhwb25lbnRcIiksZyhcImNhdGVnb3J5b3JkZXJcIiksZyhcInRpY2ttb2RlXCIpLGcoXCJ0aWNrdmFsc1wiKSxnKFwidGlja3RleHRcIiksZyhcInRpY2swXCIpLGcoXCJkdGlja1wiKSxcImFycmF5XCI9PT1lLnRpY2ttb2RlJiYoZyhcImFycmF5dGljazBcIiksZyhcImFycmF5ZHRpY2tcIikpLGcoXCJsYWJlbHBhZGRpbmdcIiksZS5faG92ZXJ0aXRsZT1mLFwiZGF0ZVwiPT09bSkmJmEuZ2V0Q29tcG9uZW50TWV0aG9kKFwiY2FsZW5kYXJzXCIsXCJoYW5kbGVEZWZhdWx0c1wiKSh0LGUsXCJjYWxlbmRhclwiLHIuY2FsZW5kYXIpO3UoZSxyLmZ1bGxMYXlvdXQpLGUuYzJwPW8uaWRlbnRpdHk7dmFyIHk9ZyhcImNvbG9yXCIsci5kZmx0Q29sb3IpLHg9eT09PXQuY29sb3I/eTpwLmNvbG9yO2coXCJ0aXRsZS50ZXh0XCIpJiYoby5jb2VyY2VGb250KGcsXCJ0aXRsZS5mb250XCIse2ZhbWlseTpwLmZhbWlseSxzaXplOk1hdGgucm91bmQoMS4yKnAuc2l6ZSksY29sb3I6eH0pLGcoXCJ0aXRsZS5vZmZzZXRcIikpLGcoXCJ0aWNrYW5nbGVcIiksZyhcImF1dG9yYW5nZVwiLCFlLmlzVmFsaWRSYW5nZSh0LnJhbmdlKSkmJmcoXCJyYW5nZW1vZGVcIiksZyhcInJhbmdlXCIpLGUuY2xlYW5SYW5nZSgpLGcoXCJmaXhlZHJhbmdlXCIpLHModCxlLGcsbSksbCh0LGUsZyxtLHIpLGModCxlLGcse2RhdGE6ci5kYXRhLGRhdGFBdHRyOmZ9KTt2YXIgYj12KFwiZ3JpZGNvbG9yXCIsaSh5LC4zKSksXz12KFwiZ3JpZHdpZHRoXCIpLHc9ZyhcInNob3dncmlkXCIpO3d8fChkZWxldGUgZS5ncmlkY29sb3IsZGVsZXRlIGUuZ3JpZHdpZHRoKTt2YXIgaz12KFwic3RhcnRsaW5lY29sb3JcIix5KSxBPXYoXCJzdGFydGxpbmV3aWR0aFwiLF8pO2coXCJzdGFydGxpbmVcIixlLnNob3dncmlkfHwhIWt8fCEhQSl8fChkZWxldGUgZS5zdGFydGxpbmVjb2xvcixkZWxldGUgZS5zdGFydGxpbmV3aWR0aCk7dmFyIFQ9dihcImVuZGxpbmVjb2xvclwiLHkpLE09dihcImVuZGxpbmV3aWR0aFwiLF8pO3JldHVybiBnKFwiZW5kbGluZVwiLGUuc2hvd2dyaWR8fCEhVHx8ISFNKXx8KGRlbGV0ZSBlLmVuZGxpbmVjb2xvcixkZWxldGUgZS5lbmRsaW5ld2lkdGgpLHc/KGcoXCJtaW5vcmdyaWRjb3VudFwiKSxnKFwibWlub3Jncmlkd2lkdGhcIixfKSxnKFwibWlub3JncmlkY29sb3JcIixpKGIsLjA2KSksZS5taW5vcmdyaWRjb3VudHx8KGRlbGV0ZSBlLm1pbm9yZ3JpZHdpZHRoLGRlbGV0ZSBlLm1pbm9yZ3JpZGNvbG9yKSk6KGRlbGV0ZSBlLmdyaWRjb2xvcixkZWxldGUgZS5ncmlkV2lkdGgpLFwibm9uZVwiPT09ZS5zaG93dGlja2xhYmVscyYmKGRlbGV0ZSBlLnRpY2tmb250LGRlbGV0ZSBlLnRpY2thbmdsZSxkZWxldGUgZS5zaG93ZXhwb25lbnQsZGVsZXRlIGUuZXhwb25lbnRmb3JtYXQsZGVsZXRlIGUudGlja2Zvcm1hdCxkZWxldGUgZS5zaG93dGlja3N1ZmZpeCxkZWxldGUgZS5zaG93dGlja3ByZWZpeCksZS5zaG93dGlja3N1ZmZpeHx8ZGVsZXRlIGUudGlja3N1ZmZpeCxlLnNob3d0aWNrcHJlZml4fHxkZWxldGUgZS50aWNrcHJlZml4LGcoXCJ0aWNrbW9kZVwiKSxlfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlXCI6NzUwLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzXCI6NzUzLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3NldF9jb252ZXJ0XCI6NzY3LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHNcIjo3NjgsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0c1wiOjc3MCxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9hdHRyaWJ1dGVzXCI6ODgwfV0sODg0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGk9dChcIi4uLy4uL2xpYlwiKS5pc0FycmF5MUQsYT10KFwiLi9jaGVhdGVyX2Jhc2lzXCIpLG89dChcIi4vYXJyYXlfbWlubWF4XCIpLHM9dChcIi4vY2FsY19ncmlkbGluZXNcIiksbD10KFwiLi9jYWxjX2xhYmVsc1wiKSxjPXQoXCIuL2NhbGNfY2xpcHBhdGhcIiksdT10KFwiLi4vaGVhdG1hcC9jbGVhbl8yZF9hcnJheVwiKSxoPXQoXCIuL3Ntb290aF9maWxsXzJkX2FycmF5XCIpLGY9dChcIi4uL2hlYXRtYXAvY29udmVydF9jb2x1bW5feHl6XCIpLHA9dChcIi4vc2V0X2NvbnZlcnRcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5nZXRGcm9tSWQodCxlLnhheGlzKSxkPW4uZ2V0RnJvbUlkKHQsZS55YXhpcyksZz1lLmFheGlzLHY9ZS5iYXhpcyxtPWUueCx5PWUueSx4PVtdO20mJmkobSkmJngucHVzaChcInhcIikseSYmaSh5KSYmeC5wdXNoKFwieVwiKSx4Lmxlbmd0aCYmZihlLGcsdixcImFcIixcImJcIix4KTt2YXIgYj1lLl9hPWUuX2F8fGUuYSxfPWUuX2I9ZS5fYnx8ZS5iO209ZS5feHx8ZS54LHk9ZS5feXx8ZS55O3ZhciB3PXt9O2lmKGUuX2NoZWF0ZXIpe3ZhciBrPVwiaW5kZXhcIj09PWcuY2hlYXRlcnR5cGU/Yi5sZW5ndGg6YixBPVwiaW5kZXhcIj09PXYuY2hlYXRlcnR5cGU/Xy5sZW5ndGg6XzttPWEoayxBLGUuY2hlYXRlcnNsb3BlKX1lLl94PW09dShtKSxlLl95PXk9dSh5KSxoKG0sYixfKSxoKHksYixfKSxwKGUpLGUuc2V0U2NhbGUoKTt2YXIgVD1vKG0pLE09byh5KSxTPS41KihUWzFdLVRbMF0pLEU9LjUqKFRbMV0rVFswXSksQz0uNSooTVsxXS1NWzBdKSxMPS41KihNWzFdK01bMF0pO3JldHVybiBUPVtFLTEuMypTLEUrMS4zKlNdLE09W0wtMS4zKkMsTCsxLjMqQ10sZS5fZXh0cmVtZXNbci5faWRdPW4uZmluZEV4dHJlbWVzKHIsVCx7cGFkZGVkOiEwfSksZS5fZXh0cmVtZXNbZC5faWRdPW4uZmluZEV4dHJlbWVzKGQsTSx7cGFkZGVkOiEwfSkscyhlLFwiYVwiLFwiYlwiKSxzKGUsXCJiXCIsXCJhXCIpLGwoZSxnKSxsKGUsdiksdy5jbGlwc2VnbWVudHM9YyhlLl94Y3RybCxlLl95Y3RybCxnLHYpLHcueD1tLHcueT15LHcuYT1iLHcuYj1fLFt3XX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vaGVhdG1hcC9jbGVhbl8yZF9hcnJheVwiOjk1MCxcIi4uL2hlYXRtYXAvY29udmVydF9jb2x1bW5feHl6XCI6OTUyLFwiLi9hcnJheV9taW5tYXhcIjo4NzksXCIuL2NhbGNfY2xpcHBhdGhcIjo4ODUsXCIuL2NhbGNfZ3JpZGxpbmVzXCI6ODg2LFwiLi9jYWxjX2xhYmVsc1wiOjg4NyxcIi4vY2hlYXRlcl9iYXNpc1wiOjg4OSxcIi4vc2V0X2NvbnZlcnRcIjo5MDIsXCIuL3Ntb290aF9maWxsXzJkX2FycmF5XCI6OTAzfV0sODg1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzPVtdLGw9ISFyLnNtb290aGluZyxjPSEhbi5zbW9vdGhpbmcsdT10WzBdLmxlbmd0aC0xLGg9dC5sZW5ndGgtMTtmb3IoaT0wLGE9W10sbz1bXTtpPD11O2krKylhW2ldPXRbMF1baV0sb1tpXT1lWzBdW2ldO2ZvcihzLnB1c2goe3g6YSx5Om8sYmljdWJpYzpsfSksaT0wLGE9W10sbz1bXTtpPD1oO2krKylhW2ldPXRbaV1bdV0sb1tpXT1lW2ldW3VdO2ZvcihzLnB1c2goe3g6YSx5Om8sYmljdWJpYzpjfSksaT11LGE9W10sbz1bXTtpPj0wO2ktLSlhW3UtaV09dFtoXVtpXSxvW3UtaV09ZVtoXVtpXTtmb3Iocy5wdXNoKHt4OmEseTpvLGJpY3ViaWM6bH0pLGk9aCxhPVtdLG89W107aT49MDtpLS0pYVtoLWldPXRbaV1bMF0sb1toLWldPWVbaV1bMF07cmV0dXJuIHMucHVzaCh7eDphLHk6byxiaWN1YmljOmN9KSxzfX0se31dLDg4NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxpPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxvLHMsbCxjLHUsaCxmLHAsZCxnLHYsbSx5LHg9dFtcIl9cIitlXSxiPXRbZStcImF4aXNcIl0sXz1iLl9ncmlkbGluZXM9W10sdz1iLl9taW5vcmdyaWRsaW5lcz1bXSxrPWIuX2JvdW5kYXJ5bGluZXM9W10sQT10W1wiX1wiK3JdLFQ9dFtyK1wiYXhpc1wiXTtcImFycmF5XCI9PT1iLnRpY2ttb2RlJiYoYi50aWNrdmFscz14LnNsaWNlKCkpO3ZhciBNPXQuX3hjdHJsLFM9dC5feWN0cmwsRT1NWzBdLmxlbmd0aCxDPU0ubGVuZ3RoLEw9dC5fYS5sZW5ndGgsej10Ll9iLmxlbmd0aDtuLnByZXBUaWNrcyhiKSxcImFycmF5XCI9PT1iLnRpY2ttb2RlJiZkZWxldGUgYi50aWNrdmFsczt2YXIgTz1iLnNtb290aGluZz8zOjE7ZnVuY3Rpb24gSShuKXt2YXIgaSxhLG8scyxsLGMsdSxoLHAsZCxnLHYsbT1bXSx5PVtdLHg9e307aWYoXCJiXCI9PT1lKWZvcihhPXQuYjJqKG4pLG89TWF0aC5mbG9vcihNYXRoLm1heCgwLE1hdGgubWluKHotMixhKSkpLHM9YS1vLHgubGVuZ3RoPXoseC5jcm9zc0xlbmd0aD1MLHgueHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLGUsYSl9LHguZHh5PWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGkoW10sZSxvLHIscyl9LGk9MDtpPEw7aSsrKWM9TWF0aC5taW4oTC0yLGkpLHU9aS1jLGg9dC5ldmFseHkoW10saSxhKSxULnNtb290aGluZyYmaT4wJiYocD10LmR4eWRpKFtdLGktMSxvLDAscyksbS5wdXNoKGxbMF0rcFswXS8zKSx5LnB1c2gobFsxXStwWzFdLzMpLGQ9dC5keHlkaShbXSxpLTEsbywxLHMpLG0ucHVzaChoWzBdLWRbMF0vMykseS5wdXNoKGhbMV0tZFsxXS8zKSksbS5wdXNoKGhbMF0pLHkucHVzaChoWzFdKSxsPWg7ZWxzZSBmb3IoaT10LmEyaShuKSxjPU1hdGguZmxvb3IoTWF0aC5tYXgoMCxNYXRoLm1pbihMLTIsaSkpKSx1PWktYyx4Lmxlbmd0aD1MLHguY3Jvc3NMZW5ndGg9eix4Lnh5PWZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxpLGUpfSx4LmR4eT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmR4eWRqKFtdLGMsZSx1LHIpfSxhPTA7YTx6O2ErKylvPU1hdGgubWluKHotMixhKSxzPWEtbyxoPXQuZXZhbHh5KFtdLGksYSksVC5zbW9vdGhpbmcmJmE+MCYmKGc9dC5keHlkaihbXSxjLGEtMSx1LDApLG0ucHVzaChsWzBdK2dbMF0vMykseS5wdXNoKGxbMV0rZ1sxXS8zKSx2PXQuZHh5ZGooW10sYyxhLTEsdSwxKSxtLnB1c2goaFswXS12WzBdLzMpLHkucHVzaChoWzFdLXZbMV0vMykpLG0ucHVzaChoWzBdKSx5LnB1c2goaFsxXSksbD1oO3JldHVybiB4LmF4aXNMZXR0ZXI9ZSx4LmF4aXM9Yix4LmNyb3NzQXhpcz1ULHgudmFsdWU9bix4LmNvbnN0dmFyPXIseC5pbmRleD1mLHgueD1tLHgueT15LHguc21vb3RoaW5nPVQuc21vb3RoaW5nLHh9ZnVuY3Rpb24gRChuKXt2YXIgaSxhLG8scyxsLGM9W10sdT1bXSxoPXt9O2lmKGgubGVuZ3RoPXgubGVuZ3RoLGguY3Jvc3NMZW5ndGg9QS5sZW5ndGgsXCJiXCI9PT1lKWZvcihvPU1hdGgubWF4KDAsTWF0aC5taW4oei0yLG4pKSxsPU1hdGgubWluKDEsTWF0aC5tYXgoMCxuLW8pKSxoLnh5PWZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxlLG4pfSxoLmR4eT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmR4eWRpKFtdLGUsbyxyLGwpfSxpPTA7aTxFO2krKyljW2ldPU1bbipPXVtpXSx1W2ldPVNbbipPXVtpXTtlbHNlIGZvcihhPU1hdGgubWF4KDAsTWF0aC5taW4oTC0yLG4pKSxzPU1hdGgubWluKDEsTWF0aC5tYXgoMCxuLWEpKSxoLnh5PWZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxuLGUpfSxoLmR4eT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmR4eWRqKFtdLGEsZSxzLHIpfSxpPTA7aTxDO2krKyljW2ldPU1baV1bbipPXSx1W2ldPVNbaV1bbipPXTtyZXR1cm4gaC5heGlzTGV0dGVyPWUsaC5heGlzPWIsaC5jcm9zc0F4aXM9VCxoLnZhbHVlPXhbbl0saC5jb25zdHZhcj1yLGguaW5kZXg9bixoLng9YyxoLnk9dSxoLnNtb290aGluZz1ULnNtb290aGluZyxofWlmKFwiYXJyYXlcIj09PWIudGlja21vZGUpe2ZvcihsPTVlLTE1LHU9KGM9W01hdGguZmxvb3IoKHgubGVuZ3RoLTEtYi5hcnJheXRpY2swKS9iLmFycmF5ZHRpY2sqKDErbCkpLE1hdGguY2VpbCgtYi5hcnJheXRpY2swL2IuYXJyYXlkdGljay8oMStsKSldLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpWzBdLTEsaD1jWzFdKzEsZj11O2Y8aDtmKyspKG89Yi5hcnJheXRpY2swK2IuYXJyYXlkdGljaypmKTwwfHxvPngubGVuZ3RoLTF8fF8ucHVzaChpKEQobykse2NvbG9yOmIuZ3JpZGNvbG9yLHdpZHRoOmIuZ3JpZHdpZHRofSkpO2ZvcihmPXU7ZjxoO2YrKylpZihzPWIuYXJyYXl0aWNrMCtiLmFycmF5ZHRpY2sqZixnPU1hdGgubWluKHMrYi5hcnJheWR0aWNrLHgubGVuZ3RoLTEpLCEoczwwfHxzPngubGVuZ3RoLTF8fGc8MHx8Zz54Lmxlbmd0aC0xKSlmb3Iodj14W3NdLG09eFtnXSxhPTA7YTxiLm1pbm9yZ3JpZGNvdW50O2ErKykoeT1nLXMpPD0wfHwoZD12KyhtLXYpKihhKzEpLyhiLm1pbm9yZ3JpZGNvdW50KzEpKihiLmFycmF5ZHRpY2sveSkpPHhbMF18fGQ+eFt4Lmxlbmd0aC0xXXx8dy5wdXNoKGkoSShkKSx7Y29sb3I6Yi5taW5vcmdyaWRjb2xvcix3aWR0aDpiLm1pbm9yZ3JpZHdpZHRofSkpO2Iuc3RhcnRsaW5lJiZrLnB1c2goaShEKDApLHtjb2xvcjpiLnN0YXJ0bGluZWNvbG9yLHdpZHRoOmIuc3RhcnRsaW5ld2lkdGh9KSksYi5lbmRsaW5lJiZrLnB1c2goaShEKHgubGVuZ3RoLTEpLHtjb2xvcjpiLmVuZGxpbmVjb2xvcix3aWR0aDpiLmVuZGxpbmV3aWR0aH0pKX1lbHNle2ZvcihsPTVlLTE1LHU9KGM9W01hdGguZmxvb3IoKHhbeC5sZW5ndGgtMV0tYi50aWNrMCkvYi5kdGljayooMStsKSksTWF0aC5jZWlsKCh4WzBdLWIudGljazApL2IuZHRpY2svKDErbCkpXS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKVswXSxoPWNbMV0sZj11O2Y8PWg7ZisrKXA9Yi50aWNrMCtiLmR0aWNrKmYsXy5wdXNoKGkoSShwKSx7Y29sb3I6Yi5ncmlkY29sb3Isd2lkdGg6Yi5ncmlkd2lkdGh9KSk7Zm9yKGY9dS0xO2Y8aCsxO2YrKylmb3IocD1iLnRpY2swK2IuZHRpY2sqZixhPTA7YTxiLm1pbm9yZ3JpZGNvdW50O2ErKykoZD1wK2IuZHRpY2sqKGErMSkvKGIubWlub3JncmlkY291bnQrMSkpPHhbMF18fGQ+eFt4Lmxlbmd0aC0xXXx8dy5wdXNoKGkoSShkKSx7Y29sb3I6Yi5taW5vcmdyaWRjb2xvcix3aWR0aDpiLm1pbm9yZ3JpZHdpZHRofSkpO2Iuc3RhcnRsaW5lJiZrLnB1c2goaShJKHhbMF0pLHtjb2xvcjpiLnN0YXJ0bGluZWNvbG9yLHdpZHRoOmIuc3RhcnRsaW5ld2lkdGh9KSksYi5lbmRsaW5lJiZrLnB1c2goaShJKHhbeC5sZW5ndGgtMV0pLHtjb2xvcjpiLmVuZGxpbmVjb2xvcix3aWR0aDpiLmVuZGxpbmV3aWR0aH0pKX19fSx7XCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDl9XSw4ODc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksaT10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGEsbyxzPWUuX2xhYmVscz1bXSxsPWUuX2dyaWRsaW5lcztmb3Iocj0wO3I8bC5sZW5ndGg7cisrKW89bFtyXSwtMSE9PVtcInN0YXJ0XCIsXCJib3RoXCJdLmluZGV4T2YoZS5zaG93dGlja2xhYmVscykmJihhPW4udGlja1RleHQoZSxvLnZhbHVlKSxpKGEse3ByZWZpeDp2b2lkIDAsc3VmZml4OnZvaWQgMCxlbmRBbmNob3I6ITAseHk6by54eSgwKSxkeHk6by5keHkoMCwwKSxheGlzOm8uYXhpcyxsZW5ndGg6by5jcm9zc0F4aXMubGVuZ3RoLGZvbnQ6by5heGlzLnRpY2tmb250LGlzRmlyc3Q6MD09PXIsaXNMYXN0OnI9PT1sLmxlbmd0aC0xfSkscy5wdXNoKGEpKSwtMSE9PVtcImVuZFwiLFwiYm90aFwiXS5pbmRleE9mKGUuc2hvd3RpY2tsYWJlbHMpJiYoYT1uLnRpY2tUZXh0KGUsby52YWx1ZSksaShhLHtlbmRBbmNob3I6ITEseHk6by54eShvLmNyb3NzTGVuZ3RoLTEpLGR4eTpvLmR4eShvLmNyb3NzTGVuZ3RoLTIsMSksYXhpczpvLmF4aXMsbGVuZ3RoOm8uY3Jvc3NBeGlzLmxlbmd0aCxmb250Om8uYXhpcy50aWNrZm9udCxpc0ZpcnN0OjA9PT1yLGlzTGFzdDpyPT09bC5sZW5ndGgtMX0pLHMucHVzaChhKSl9fSx7XCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDl9XSw4ODg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dFswXS1lWzBdLGE9dFsxXS1lWzFdLG89clswXS1lWzBdLHM9clsxXS1lWzFdLGw9TWF0aC5wb3coaSppK2EqYSwuMjUpLGM9TWF0aC5wb3cobypvK3MqcywuMjUpLHU9KGMqYyppLWwqbCpvKSpuLGg9KGMqYyphLWwqbCpzKSpuLGY9YyoobCtjKSozLHA9bCoobCtjKSozO3JldHVybltbZVswXSsoZiYmdS9mKSxlWzFdKyhmJiZoL2YpXSxbZVswXS0ocCYmdS9wKSxlWzFdLShwJiZoL3ApXV19fSx7fV0sODg5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGksYSxvLHMsbCxjLHU9W10saD1uKHQpP3QubGVuZ3RoOnQsZj1uKGUpP2UubGVuZ3RoOmUscD1uKHQpP3Q6bnVsbCxkPW4oZSk/ZTpudWxsO3AmJihvPShwLmxlbmd0aC0xKS8ocFtwLmxlbmd0aC0xXS1wWzBdKS8oaC0xKSksZCYmKHM9KGQubGVuZ3RoLTEpLyhkW2QubGVuZ3RoLTFdLWRbMF0pLyhmLTEpKTt2YXIgZz0xLzAsdj0tMS8wO2ZvcihhPTA7YTxmO2ErKylmb3IodVthXT1bXSxsPWQ/KGRbYV0tZFswXSkqczphLyhmLTEpLGk9MDtpPGg7aSsrKWM9KHA/KHBbaV0tcFswXSkqbzppLyhoLTEpKS1sKnIsZz1NYXRoLm1pbihjLGcpLHY9TWF0aC5tYXgoYyx2KSx1W2FdW2ldPWM7dmFyIG09MS8odi1nKSx5PS1nKm07Zm9yKGE9MDthPGY7YSsrKWZvcihpPTA7aTxoO2krKyl1W2FdW2ldPW0qdVthXVtpXSt5O3JldHVybiB1fX0se1wiLi4vLi4vbGliXCI6NzAxfV0sODkwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vY2F0bXVsbF9yb21cIiksaT10KFwiLi4vLi4vbGliXCIpLmVuc3VyZUFycmF5O2Z1bmN0aW9uIGEodCxlLHIpe3ZhciBuPS0uNSpyWzBdKzEuNSplWzBdLGk9LS41KnJbMV0rMS41KmVbMV07cmV0dXJuWygyKm4rdFswXSkvMywoMippK3RbMV0pLzNdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMsbCl7dmFyIGMsdSxoLGYscCxkLGcsdixtLHkseD1yWzBdLmxlbmd0aCxiPXIubGVuZ3RoLF89cz8zKngtMjp4LHc9bD8zKmItMjpiO2Zvcih0PWkodCx3KSxlPWkoZSx3KSxoPTA7aDx3O2grKyl0W2hdPWkodFtoXSxfKSxlW2hdPWkoZVtoXSxfKTtmb3IodT0wLGY9MDt1PGI7dSsrLGYrPWw/MzoxKWZvcihwPXRbZl0sZD1lW2ZdLGc9clt1XSx2PW9bdV0sYz0wLGg9MDtjPHg7YysrLGgrPXM/MzoxKXBbaF09Z1tjXSxkW2hdPXZbY107aWYocylmb3IodT0wLGY9MDt1PGI7dSsrLGYrPWw/MzoxKXtmb3IoYz0xLGg9MztjPHgtMTtjKyssaCs9MyltPW4oW3JbdV1bYy0xXSxvW3VdW2MtMV1dLFtyW3VdW2NdLG9bdV1bY11dLFtyW3VdW2MrMV0sb1t1XVtjKzFdXSxzKSx0W2ZdW2gtMV09bVswXVswXSxlW2ZdW2gtMV09bVswXVsxXSx0W2ZdW2grMV09bVsxXVswXSxlW2ZdW2grMV09bVsxXVsxXTt5PWEoW3RbZl1bMF0sZVtmXVswXV0sW3RbZl1bMl0sZVtmXVsyXV0sW3RbZl1bM10sZVtmXVszXV0pLHRbZl1bMV09eVswXSxlW2ZdWzFdPXlbMV0seT1hKFt0W2ZdW18tMV0sZVtmXVtfLTFdXSxbdFtmXVtfLTNdLGVbZl1bXy0zXV0sW3RbZl1bXy00XSxlW2ZdW18tNF1dKSx0W2ZdW18tMl09eVswXSxlW2ZdW18tMl09eVsxXX1pZihsKWZvcihoPTA7aDxfO2grKyl7Zm9yKGY9MztmPHctMztmKz0zKW09bihbdFtmLTNdW2hdLGVbZi0zXVtoXV0sW3RbZl1baF0sZVtmXVtoXV0sW3RbZiszXVtoXSxlW2YrM11baF1dLGwpLHRbZi0xXVtoXT1tWzBdWzBdLGVbZi0xXVtoXT1tWzBdWzFdLHRbZisxXVtoXT1tWzFdWzBdLGVbZisxXVtoXT1tWzFdWzFdO3k9YShbdFswXVtoXSxlWzBdW2hdXSxbdFsyXVtoXSxlWzJdW2hdXSxbdFszXVtoXSxlWzNdW2hdXSksdFsxXVtoXT15WzBdLGVbMV1baF09eVsxXSx5PWEoW3Rbdy0xXVtoXSxlW3ctMV1baF1dLFt0W3ctM11baF0sZVt3LTNdW2hdXSxbdFt3LTRdW2hdLGVbdy00XVtoXV0pLHRbdy0yXVtoXT15WzBdLGVbdy0yXVtoXT15WzFdfWlmKHMmJmwpZm9yKGY9MTtmPHc7Zis9KGYrMSklMz09MD8yOjEpe2ZvcihoPTM7aDxfLTM7aCs9MyltPW4oW3RbZl1baC0zXSxlW2ZdW2gtM11dLFt0W2ZdW2hdLGVbZl1baF1dLFt0W2ZdW2grM10sZVtmXVtoKzNdXSxzKSx0W2ZdW2gtMV09LjUqKHRbZl1baC0xXSttWzBdWzBdKSxlW2ZdW2gtMV09LjUqKGVbZl1baC0xXSttWzBdWzFdKSx0W2ZdW2grMV09LjUqKHRbZl1baCsxXSttWzFdWzBdKSxlW2ZdW2grMV09LjUqKGVbZl1baCsxXSttWzFdWzFdKTt5PWEoW3RbZl1bMF0sZVtmXVswXV0sW3RbZl1bMl0sZVtmXVsyXV0sW3RbZl1bM10sZVtmXVszXV0pLHRbZl1bMV09LjUqKHRbZl1bMV0reVswXSksZVtmXVsxXT0uNSooZVtmXVsxXSt5WzFdKSx5PWEoW3RbZl1bXy0xXSxlW2ZdW18tMV1dLFt0W2ZdW18tM10sZVtmXVtfLTNdXSxbdFtmXVtfLTRdLGVbZl1bXy00XV0pLHRbZl1bXy0yXT0uNSoodFtmXVtfLTJdK3lbMF0pLGVbZl1bXy0yXT0uNSooZVtmXVtfLTJdK3lbMV0pfXJldHVyblt0LGVdfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi9jYXRtdWxsX3JvbVwiOjg4OH1dLDg5MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17UkVMQVRJVkVfQ1VMTF9UT0xFUkFOQ0U6MWUtNn19LHt9XSw4OTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlJiZyP2Z1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGMsdSxoO2V8fChlPVtdKSxyKj0zLG4qPTM7dmFyIGY9aSppLHA9MS1pLGQ9cCpwLGc9cCppKjIsdj0tMypkLG09MyooZC1nKSx5PTMqKGctZikseD0zKmYsYj1hKmEsXz1iKmEsdz0xLWEsaz13KncsQT1rKnc7Zm9yKGg9MDtoPHQubGVuZ3RoO2grKylvPXYqKHU9dFtoXSlbbl1bcl0rbSp1W25dW3IrMV0reSp1W25dW3IrMl0reCp1W25dW3IrM10scz12KnVbbisxXVtyXSttKnVbbisxXVtyKzFdK3kqdVtuKzFdW3IrMl0reCp1W24rMV1bciszXSxsPXYqdVtuKzJdW3JdK20qdVtuKzJdW3IrMV0reSp1W24rMl1bcisyXSt4KnVbbisyXVtyKzNdLGM9dip1W24rM11bcl0rbSp1W24rM11bcisxXSt5KnVbbiszXVtyKzJdK3gqdVtuKzNdW3IrM10sZVtoXT1BKm8rMyooayphKnMrdypiKmwpK18qYztyZXR1cm4gZX06ZT9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjO2V8fChlPVtdKSxyKj0zO3ZhciB1PWkqaSxoPTEtaSxmPWgqaCxwPWgqaSoyLGQ9LTMqZixnPTMqKGYtcCksdj0zKihwLXUpLG09Myp1LHk9MS1hO2ZvcihsPTA7bDx0Lmxlbmd0aDtsKyspbz1kKihjPXRbbF0pW25dW3JdK2cqY1tuXVtyKzFdK3YqY1tuXVtyKzJdK20qY1tuXVtyKzNdLHM9ZCpjW24rMV1bcl0rZypjW24rMV1bcisxXSt2KmNbbisxXVtyKzJdK20qY1tuKzFdW3IrM10sZVtsXT15Km8rYSpzO3JldHVybiBlfTpyP2Z1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGMsdSxoO2V8fChlPVtdKSxuKj0zO3ZhciBmPWEqYSxwPWYqYSxkPTEtYSxnPWQqZCx2PWcqZDtmb3IodT0wO3U8dC5sZW5ndGg7dSsrKW89KGg9dFt1XSlbbl1bcisxXS1oW25dW3JdLHM9aFtuKzFdW3IrMV0taFtuKzFdW3JdLGw9aFtuKzJdW3IrMV0taFtuKzJdW3JdLGM9aFtuKzNdW3IrMV0taFtuKzNdW3JdLGVbdV09dipvKzMqKGcqYSpzK2QqZipsKStwKmM7cmV0dXJuIGV9OmZ1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGM7ZXx8KGU9W10pO3ZhciB1PTEtYTtmb3IobD0wO2w8dC5sZW5ndGg7bCsrKW89KGM9dFtsXSlbbl1bcisxXS1jW25dW3JdLHM9Y1tuKzFdW3IrMV0tY1tuKzFdW3JdLGVbbF09dSpvK2EqcztyZXR1cm4gZX19fSx7fV0sODkzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSYmcj9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjLHUsaDtlfHwoZT1bXSkscio9MyxuKj0zO3ZhciBmPWkqaSxwPWYqaSxkPTEtaSxnPWQqZCx2PWcqZCxtPWEqYSx5PTEtYSx4PXkqeSxiPXkqYSoyLF89LTMqeCx3PTMqKHgtYiksaz0zKihiLW0pLEE9MyptO2ZvcihoPTA7aDx0Lmxlbmd0aDtoKyspbz1fKih1PXRbaF0pW25dW3JdK3cqdVtuKzFdW3JdK2sqdVtuKzJdW3JdK0EqdVtuKzNdW3JdLHM9Xyp1W25dW3IrMV0rdyp1W24rMV1bcisxXStrKnVbbisyXVtyKzFdK0EqdVtuKzNdW3IrMV0sbD1fKnVbbl1bcisyXSt3KnVbbisxXVtyKzJdK2sqdVtuKzJdW3IrMl0rQSp1W24rM11bcisyXSxjPV8qdVtuXVtyKzNdK3cqdVtuKzFdW3IrM10rayp1W24rMl1bciszXStBKnVbbiszXVtyKzNdLGVbaF09dipvKzMqKGcqaSpzK2QqZipsKStwKmM7cmV0dXJuIGV9OmU/ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbyxzLGwsYyx1LGg7ZXx8KGU9W10pLHIqPTM7dmFyIGY9YSphLHA9ZiphLGQ9MS1hLGc9ZCpkLHY9ZypkO2Zvcih1PTA7dTx0Lmxlbmd0aDt1Kyspbz0oaD10W3VdKVtuKzFdW3JdLWhbbl1bcl0scz1oW24rMV1bcisxXS1oW25dW3IrMV0sbD1oW24rMV1bcisyXS1oW25dW3IrMl0sYz1oW24rMV1bciszXS1oW25dW3IrM10sZVt1XT12Km8rMyooZyphKnMrZCpmKmwpK3AqYztyZXR1cm4gZX06cj9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjO2V8fChlPVtdKSxuKj0zO3ZhciB1PTEtaSxoPWEqYSxmPTEtYSxwPWYqZixkPWYqYSoyLGc9LTMqcCx2PTMqKHAtZCksbT0zKihkLWgpLHk9MypoO2ZvcihsPTA7bDx0Lmxlbmd0aDtsKyspbz1nKihjPXRbbF0pW25dW3JdK3YqY1tuKzFdW3JdK20qY1tuKzJdW3JdK3kqY1tuKzNdW3JdLHM9ZypjW25dW3IrMV0rdipjW24rMV1bcisxXSttKmNbbisyXVtyKzFdK3kqY1tuKzNdW3IrMV0sZVtsXT11Km8raSpzO3JldHVybiBlfTpmdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjO2V8fChlPVtdKTt2YXIgdT0xLWk7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylvPShjPXRbbF0pW24rMV1bcl0tY1tuXVtyXSxzPWNbbisxXVtyKzFdLWNbbl1bcisxXSxlW2xdPXUqbytpKnM7cmV0dXJuIGV9fX0se31dLDg5NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPWUtMixvPXItMjtyZXR1cm4gbiYmaT9mdW5jdGlvbihlLHIsbil7dmFyIGkscyxsLGMsdSxoO2V8fChlPVtdKTt2YXIgZj1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IociksYSkpLHA9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKG4pLG8pKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oMSxyLWYpKSxnPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuLXApKTtmKj0zLHAqPTM7dmFyIHY9ZCpkLG09dipkLHk9MS1kLHg9eSp5LGI9eCp5LF89ZypnLHc9XypnLGs9MS1nLEE9ayprLFQ9QSprO2ZvcihoPTA7aDx0Lmxlbmd0aDtoKyspaT1iKih1PXRbaF0pW3BdW2ZdKzMqKHgqZCp1W3BdW2YrMV0reSp2KnVbcF1bZisyXSkrbSp1W3BdW2YrM10scz1iKnVbcCsxXVtmXSszKih4KmQqdVtwKzFdW2YrMV0reSp2KnVbcCsxXVtmKzJdKSttKnVbcCsxXVtmKzNdLGw9Yip1W3ArMl1bZl0rMyooeCpkKnVbcCsyXVtmKzFdK3kqdip1W3ArMl1bZisyXSkrbSp1W3ArMl1bZiszXSxjPWIqdVtwKzNdW2ZdKzMqKHgqZCp1W3ArM11bZisxXSt5KnYqdVtwKzNdW2YrMl0pK20qdVtwKzNdW2YrM10sZVtoXT1UKmkrMyooQSpnKnMraypfKmwpK3cqYztyZXR1cm4gZX06bj9mdW5jdGlvbihlLHIsbil7ZXx8KGU9W10pO3ZhciBpLHMsbCxjLHUsaCxmPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihyKSxhKSkscD1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IobiksbykpLGQ9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHItZikpLGc9TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4tcCkpO2YqPTM7dmFyIHY9ZCpkLG09dipkLHk9MS1kLHg9eSp5LGI9eCp5LF89MS1nO2Zvcih1PTA7dTx0Lmxlbmd0aDt1KyspaT1fKihoPXRbdV0pW3BdW2ZdK2cqaFtwKzFdW2ZdLHM9XypoW3BdW2YrMV0rZypoW3ArMV1bZisxXSxsPV8qaFtwXVtmKzJdK2cqaFtwKzFdW2YrMV0sYz1fKmhbcF1bZiszXStnKmhbcCsxXVtmKzFdLGVbdV09YippKzMqKHgqZCpzK3kqdipsKSttKmM7cmV0dXJuIGV9Omk/ZnVuY3Rpb24oZSxyLG4pe2V8fChlPVtdKTt2YXIgaSxzLGwsYyx1LGgsZj1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IociksYSkpLHA9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKG4pLG8pKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oMSxyLWYpKSxnPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuLXApKTtwKj0zO3ZhciB2PWcqZyxtPXYqZyx5PTEtZyx4PXkqeSxiPXgqeSxfPTEtZDtmb3IodT0wO3U8dC5sZW5ndGg7dSsrKWk9XyooaD10W3VdKVtwXVtmXStkKmhbcF1bZisxXSxzPV8qaFtwKzFdW2ZdK2QqaFtwKzFdW2YrMV0sbD1fKmhbcCsyXVtmXStkKmhbcCsyXVtmKzFdLGM9XypoW3ArM11bZl0rZCpoW3ArM11bZisxXSxlW3VdPWIqaSszKih4Kmcqcyt5KnYqbCkrbSpjO3JldHVybiBlfTpmdW5jdGlvbihlLHIsbil7ZXx8KGU9W10pO3ZhciBpLHMsbCxjLHU9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKHIpLGEpKSxoPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihuKSxvKSksZj1NYXRoLm1heCgwLE1hdGgubWluKDEsci11KSkscD1NYXRoLm1heCgwLE1hdGgubWluKDEsbi1oKSksZD0xLXAsZz0xLWY7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylpPWcqKGM9dFtsXSlbaF1bdV0rZipjW2hdW3UrMV0scz1nKmNbaCsxXVt1XStmKmNbaCsxXVt1KzFdLGVbbF09ZCppK3AqcztyZXR1cm4gZX19fSx7fV0sODk1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL3h5X2RlZmF1bHRzXCIpLGE9dChcIi4vYWJfZGVmYXVsdHNcIiksbz10KFwiLi9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7ZnVuY3Rpb24gYyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWUuX2NsaXBQYXRoSWQ9XCJjbGlwXCIrZS51aWQrXCJjYXJwZXRcIjt2YXIgdT1jKFwiY29sb3JcIixzLmRlZmF1bHRMaW5lKTsobi5jb2VyY2VGb250KGMsXCJmb250XCIpLGMoXCJjYXJwZXRcIiksYSh0LGUsbCxjLHUpLGUuYSYmZS5iKT8oZS5hLmxlbmd0aDwzJiYoZS5hYXhpcy5zbW9vdGhpbmc9MCksZS5iLmxlbmd0aDwzJiYoZS5iYXhpcy5zbW9vdGhpbmc9MCksaSh0LGUsYyl8fChlLnZpc2libGU9ITEpLGUuX2NoZWF0ZXImJmMoXCJjaGVhdGVyc2xvcGVcIikpOmUudmlzaWJsZT0hMX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiOjU3NyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4vYWJfZGVmYXVsdHNcIjo4NzgsXCIuL2F0dHJpYnV0ZXNcIjo4ODAsXCIuL3h5X2RlZmF1bHRzXCI6OTA0fV0sODk2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLnBsb3Q9dChcIi4vcGxvdFwiKSxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLmFuaW1hdGFibGU9ITAsbi5pc0NvbnRhaW5lcj0hMCxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cImNhcnBldFwiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiKSxuLmNhdGVnb3JpZXM9W1wiY2FydGVzaWFuXCIsXCJzdmdcIixcImNhcnBldFwiLFwiY2FycGV0QXhpc1wiLFwibm90TGVnZW5kSXNvbGF0YWJsZVwiLFwibm9NdWx0aUNhdGVnb3J5XCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi9hdHRyaWJ1dGVzXCI6ODgwLFwiLi9jYWxjXCI6ODg0LFwiLi9kZWZhdWx0c1wiOjg5NSxcIi4vcGxvdFwiOjkwMX1dLDg5NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuPXQuX2Z1bGxEYXRhLmxlbmd0aCxpPTA7aTxuO2krKyl7dmFyIGE9dC5fZnVsbERhdGFbaV07aWYoYS5pbmRleCE9PWUuaW5kZXgmJihcImNhcnBldFwiPT09YS50eXBlJiYocnx8KHI9YSksYS5jYXJwZXQ9PT1lLmNhcnBldCkpKXJldHVybiBhfXJldHVybiByfX0se31dLDg5ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoMD09PXQubGVuZ3RoKXJldHVyblwiXCI7dmFyIG4saT1bXSxhPXI/MzoxO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKz1hKWkucHVzaCh0W25dK1wiLFwiK2Vbbl0pLHImJm48dC5sZW5ndGgtYSYmKGkucHVzaChcIkNcIiksaS5wdXNoKFt0W24rMV0rXCIsXCIrZVtuKzFdLHRbbisyXStcIixcIitlW24rMl0rXCIgXCJdLmpvaW4oXCIgXCIpKSk7cmV0dXJuIGkuam9pbihyP1wiXCI6XCJMXCIpfX0se31dLDg5OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpO2ZvcihuKHQpP3QubGVuZ3RoPmUubGVuZ3RoJiYodD10LnNsaWNlKDAsZS5sZW5ndGgpKTp0PVtdLGk9MDtpPGUubGVuZ3RoO2krKyl0W2ldPXIoZVtpXSk7cmV0dXJuIHR9fSx7XCIuLi8uLi9saWJcIjo3MDF9XSw5MDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPWlbMF0qdC5kcGR4KGUpLHM9aVsxXSp0LmRwZHkociksbD0xLGM9MTtpZihhKXt2YXIgdT1NYXRoLnNxcnQoaVswXSppWzBdK2lbMV0qaVsxXSksaD1NYXRoLnNxcnQoYVswXSphWzBdK2FbMV0qYVsxXSksZj0oaVswXSphWzBdK2lbMV0qYVsxXSkvdS9oO2M9TWF0aC5tYXgoMCxmKX12YXIgcD0xODAqTWF0aC5hdGFuMihzLG8pL01hdGguUEk7cmV0dXJuIHA8LTkwPyhwKz0xODAsbD0tbCk6cD45MCYmKHAtPTE4MCxsPS1sKSx7YW5nbGU6cCxmbGlwOmwscDp0LmMycChuLGUsciksb2Zmc2V0TXVsdHBsaWVyOmN9fX0se31dLDkwMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksYT10KFwiLi9tYXBfMWRfYXJyYXlcIiksbz10KFwiLi9tYWtlcGF0aFwiKSxzPXQoXCIuL29yaWVudF90ZXh0XCIpLGw9dChcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiKSxjPXQoXCIuLi8uLi9saWJcIiksdT10KFwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiKTtmdW5jdGlvbiBoKHQsZSxyLGkscyxsKXt2YXIgYz1cImNvbnN0LVwiK3MrXCItbGluZXNcIix1PXIuc2VsZWN0QWxsKFwiLlwiK2MpLmRhdGEobCk7dS5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChjLCEwKS5zdHlsZShcInZlY3Rvci1lZmZlY3RcIixcIm5vbi1zY2FsaW5nLXN0cm9rZVwiKSx1LmVhY2goZnVuY3Rpb24ocil7dmFyIGk9cixzPWkueCxsPWkueSxjPWEoW10scyx0LmMycCksdT1hKFtdLGwsZS5jMnApLGg9XCJNXCIrbyhjLHUsaS5zbW9vdGhpbmcpO24uc2VsZWN0KHRoaXMpLmF0dHIoXCJkXCIsaCkuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixpLndpZHRoKS5zdHlsZShcInN0cm9rZVwiLGkuY29sb3IpLnN0eWxlKFwiZmlsbFwiLFwibm9uZVwiKX0pLHUuZXhpdCgpLnJlbW92ZSgpfWZ1bmN0aW9uIGYodCxlLHIsYSxvLGMsdSxoKXt2YXIgZj1jLnNlbGVjdEFsbChcInRleHQuXCIraCkuZGF0YSh1KTtmLmVudGVyKCkuYXBwZW5kKFwidGV4dFwiKS5jbGFzc2VkKGgsITApO3ZhciBwPTAsZD17fTtyZXR1cm4gZi5lYWNoKGZ1bmN0aW9uKG8sYyl7dmFyIHU7aWYoXCJhdXRvXCI9PT1vLmF4aXMudGlja2FuZ2xlKXU9cyhhLGUscixvLnh5LG8uZHh5KTtlbHNle3ZhciBoPShvLmF4aXMudGlja2FuZ2xlKzE4MCkqTWF0aC5QSS8xODA7dT1zKGEsZSxyLG8ueHksW01hdGguY29zKGgpLE1hdGguc2luKGgpXSl9Y3x8KGQ9e2FuZ2xlOnUuYW5nbGUsZmxpcDp1LmZsaXB9KTt2YXIgZj0oby5lbmRBbmNob3I/LTE6MSkqdS5mbGlwLGc9bi5zZWxlY3QodGhpcykuYXR0cih7XCJ0ZXh0LWFuY2hvclwiOmY+MD9cInN0YXJ0XCI6XCJlbmRcIixcImRhdGEtbm90ZXhcIjoxfSkuY2FsbChpLmZvbnQsby5mb250KS50ZXh0KG8udGV4dCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyx0KSx2PWkuYkJveCh0aGlzKTtnLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIit1LnBbMF0rXCIsXCIrdS5wWzFdK1wiKSByb3RhdGUoXCIrdS5hbmdsZStcIil0cmFuc2xhdGUoXCIrby5heGlzLmxhYmVscGFkZGluZypmK1wiLFwiKy4zKnYuaGVpZ2h0K1wiKVwiKSxwPU1hdGgubWF4KHAsdi53aWR0aCtvLmF4aXMubGFiZWxwYWRkaW5nKX0pLGYuZXhpdCgpLnJlbW92ZSgpLGQubWF4RXh0ZW50PXAsZH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGw9ZS54YXhpcyx1PWUueWF4aXMscD10Ll9mdWxsTGF5b3V0Ll9jbGlwcztjLm1ha2VUcmFjZUdyb3VwcyhpLHIsXCJ0cmFjZVwiKS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGk9ZVswXSxkPWkudHJhY2Usdj1kLmFheGlzLG09ZC5iYXhpcyx5PWMuZW5zdXJlU2luZ2xlKHIsXCJnXCIsXCJtaW5vcmxheWVyXCIpLHg9Yy5lbnN1cmVTaW5nbGUocixcImdcIixcIm1ham9ybGF5ZXJcIiksYj1jLmVuc3VyZVNpbmdsZShyLFwiZ1wiLFwiYm91bmRhcnlsYXllclwiKSxfPWMuZW5zdXJlU2luZ2xlKHIsXCJnXCIsXCJsYWJlbGxheWVyXCIpO3Iuc3R5bGUoXCJvcGFjaXR5XCIsZC5vcGFjaXR5KSxoKGwsdSx4LHYsXCJhXCIsdi5fZ3JpZGxpbmVzKSxoKGwsdSx4LG0sXCJiXCIsbS5fZ3JpZGxpbmVzKSxoKGwsdSx5LHYsXCJhXCIsdi5fbWlub3JncmlkbGluZXMpLGgobCx1LHksbSxcImJcIixtLl9taW5vcmdyaWRsaW5lcyksaChsLHUsYix2LFwiYS1ib3VuZGFyeVwiLHYuX2JvdW5kYXJ5bGluZXMpLGgobCx1LGIsbSxcImItYm91bmRhcnlcIixtLl9ib3VuZGFyeWxpbmVzKTt2YXIgdz1mKHQsbCx1LGQsaSxfLHYuX2xhYmVscyxcImEtbGFiZWxcIiksaz1mKHQsbCx1LGQsaSxfLG0uX2xhYmVscyxcImItbGFiZWxcIik7IWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8sbCl7dmFyIHUsaCxmLHA7dT0uNSooci5hWzBdK3IuYVtyLmEubGVuZ3RoLTFdKSxoPXIuYlswXSxmPXIuYWIyeHkodSxoLCEwKSxwPXIuZHh5ZGFfcm91Z2godSxoKSx2b2lkIDA9PT1vLmFuZ2xlJiZjLmV4dGVuZEZsYXQobyxzKHIsaSxhLGYsci5keHlkYl9yb3VnaCh1LGgpKSk7Zyh0LGUscixuLGYscCxyLmFheGlzLGksYSxvLFwiYS10aXRsZVwiKSx1PXIuYVswXSxoPS41KihyLmJbMF0rci5iW3IuYi5sZW5ndGgtMV0pLGY9ci5hYjJ4eSh1LGgsITApLHA9ci5keHlkYl9yb3VnaCh1LGgpLHZvaWQgMD09PWwuYW5nbGUmJmMuZXh0ZW5kRmxhdChsLHMocixpLGEsZixyLmR4eWRhX3JvdWdoKHUsaCkpKTtnKHQsZSxyLG4sZixwLHIuYmF4aXMsaSxhLGwsXCJiLXRpdGxlXCIpfSh0LF8sZCxpLGwsdSx3LGspLGZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIHMsbCx1LGgsZj1yLnNlbGVjdChcIiNcIit0Ll9jbGlwUGF0aElkKTtmLnNpemUoKXx8KGY9ci5hcHBlbmQoXCJjbGlwUGF0aFwiKS5jbGFzc2VkKFwiY2FycGV0Y2xpcFwiLCEwKSk7dmFyIHA9Yy5lbnN1cmVTaW5nbGUoZixcInBhdGhcIixcImNhcnBldGJvdW5kYXJ5XCIpLGQ9ZS5jbGlwc2VnbWVudHMsZz1bXTtmb3IoaD0wO2g8ZC5sZW5ndGg7aCsrKXM9ZFtoXSxsPWEoW10scy54LG4uYzJwKSx1PWEoW10scy55LGkuYzJwKSxnLnB1c2gobyhsLHUscy5iaWN1YmljKSk7dmFyIHY9XCJNXCIrZy5qb2luKFwiTFwiKStcIlpcIjtmLmF0dHIoXCJpZFwiLHQuX2NsaXBQYXRoSWQpLHAuYXR0cihcImRcIix2KX0oZCxpLHAsbCx1KX0pfTt2YXIgcD11LkxJTkVfU1BBQ0lORyxkPSgxLXUuTUlEX1NISUZUKS9wKzE7ZnVuY3Rpb24gZyh0LGUscixhLG8sYyx1LGgsZixnLHYpe3ZhciBtPVtdO3UudGl0bGUudGV4dCYmbS5wdXNoKHUudGl0bGUudGV4dCk7dmFyIHk9ZS5zZWxlY3RBbGwoXCJ0ZXh0LlwiK3YpLmRhdGEobSkseD1nLm1heEV4dGVudDt5LmVudGVyKCkuYXBwZW5kKFwidGV4dFwiKS5jbGFzc2VkKHYsITApLHkuZWFjaChmdW5jdGlvbigpe3ZhciBlPXMocixoLGYsbyxjKTstMT09PVtcInN0YXJ0XCIsXCJib3RoXCJdLmluZGV4T2YodS5zaG93dGlja2xhYmVscykmJih4PTApO3ZhciBhPXUudGl0bGUuZm9udC5zaXplO3grPWErdS50aXRsZS5vZmZzZXQ7dmFyIHY9KGcuYW5nbGUrKGcuZmxpcDwwPzE4MDowKS1lLmFuZ2xlKzQ1MCklMzYwLG09dj45MCYmdjwyNzAseT1uLnNlbGVjdCh0aGlzKTt5LnRleHQodS50aXRsZS50ZXh0KS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHQpLG0mJih4PSgtbC5saW5lQ291bnQoeSkrZCkqcCphLXgpLHkuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK2UucFswXStcIixcIitlLnBbMV0rXCIpIHJvdGF0ZShcIitlLmFuZ2xlK1wiKSB0cmFuc2xhdGUoMCxcIit4K1wiKVwiKS5jbGFzc2VkKFwidXNlci1zZWxlY3Qtbm9uZVwiLCEwKS5hdHRyKFwidGV4dC1hbmNob3JcIixcIm1pZGRsZVwiKS5jYWxsKGkuZm9udCx1LnRpdGxlLmZvbnQpfSkseS5leGl0KCkucmVtb3ZlKCl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCI6NjczLFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCI6NzI1LFwiLi9tYWtlcGF0aFwiOjg5OCxcIi4vbWFwXzFkX2FycmF5XCI6ODk5LFwiLi9vcmllbnRfdGV4dFwiOjkwMCxkMzoxNTV9XSw5MDI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9jb25zdGFudHNcIiksaT10KFwiLi4vLi4vbGliL3NlYXJjaFwiKS5maW5kQmluLGE9dChcIi4vY29tcHV0ZV9jb250cm9sX3BvaW50c1wiKSxvPXQoXCIuL2NyZWF0ZV9zcGxpbmVfZXZhbHVhdG9yXCIpLHM9dChcIi4vY3JlYXRlX2lfZGVyaXZhdGl2ZV9ldmFsdWF0b3JcIiksbD10KFwiLi9jcmVhdGVfal9kZXJpdmF0aXZlX2V2YWx1YXRvclwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fYSxyPXQuX2IsYz1lLmxlbmd0aCx1PXIubGVuZ3RoLGg9dC5hYXhpcyxmPXQuYmF4aXMscD1lWzBdLGQ9ZVtjLTFdLGc9clswXSx2PXJbdS0xXSxtPWVbZS5sZW5ndGgtMV0tZVswXSx5PXJbci5sZW5ndGgtMV0tclswXSx4PW0qbi5SRUxBVElWRV9DVUxMX1RPTEVSQU5DRSxiPXkqbi5SRUxBVElWRV9DVUxMX1RPTEVSQU5DRTtwLT14LGQrPXgsZy09Yix2Kz1iLHQuaXNWaXNpYmxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+cCYmdDxkJiZlPmcmJmU8dn0sdC5pc09jY2x1ZGVkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8cHx8dD5kfHxlPGd8fGU+dn0sdC5zZXRTY2FsZT1mdW5jdGlvbigpe3ZhciBlPXQuX3gscj10Ll95LG49YSh0Ll94Y3RybCx0Ll95Y3RybCxlLHIsaC5zbW9vdGhpbmcsZi5zbW9vdGhpbmcpO3QuX3hjdHJsPW5bMF0sdC5feWN0cmw9blsxXSx0LmV2YWx4eT1vKFt0Ll94Y3RybCx0Ll95Y3RybF0sYyx1LGguc21vb3RoaW5nLGYuc21vb3RoaW5nKSx0LmR4eWRpPXMoW3QuX3hjdHJsLHQuX3ljdHJsXSxoLnNtb290aGluZyxmLnNtb290aGluZyksdC5keHlkaj1sKFt0Ll94Y3RybCx0Ll95Y3RybF0saC5zbW9vdGhpbmcsZi5zbW9vdGhpbmcpfSx0LmkyYT1mdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1heCgwLE1hdGguZmxvb3IodFswXSksYy0yKSxuPXRbMF0tcjtyZXR1cm4oMS1uKSplW3JdK24qZVtyKzFdfSx0LmoyYj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGguZmxvb3IodFsxXSksYy0yKSxuPXRbMV0tZTtyZXR1cm4oMS1uKSpyW2VdK24qcltlKzFdfSx0LmlqMmFiPWZ1bmN0aW9uKGUpe3JldHVyblt0LmkyYShlWzBdKSx0LmoyYihlWzFdKV19LHQuYTJpPWZ1bmN0aW9uKHQpe3ZhciByPU1hdGgubWF4KDAsTWF0aC5taW4oaSh0LGUpLGMtMikpLG49ZVtyXSxhPWVbcisxXTtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbihjLTEscisodC1uKS8oYS1uKSkpfSx0LmIyaj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKGkodCxyKSx1LTIpKSxuPXJbZV0sYT1yW2UrMV07cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odS0xLGUrKHQtbikvKGEtbikpKX0sdC5hYjJpaj1mdW5jdGlvbihlKXtyZXR1cm5bdC5hMmkoZVswXSksdC5iMmooZVsxXSldfSx0LmkyYz1mdW5jdGlvbihlLHIpe3JldHVybiB0LmV2YWx4eShbXSxlLHIpfSx0LmFiMnh5PWZ1bmN0aW9uKG4saSxhKXtpZighYSYmKG48ZVswXXx8bj5lW2MtMV18aTxyWzBdfHxpPnJbdS0xXSkpcmV0dXJuWyExLCExXTt2YXIgbz10LmEyaShuKSxzPXQuYjJqKGkpLGw9dC5ldmFseHkoW10sbyxzKTtpZihhKXt2YXIgaCxmLHAsZCxnPTAsdj0wLG09W107bjxlWzBdPyhoPTAsZj0wLGc9KG4tZVswXSkvKGVbMV0tZVswXSkpOm4+ZVtjLTFdPyhoPWMtMixmPTEsZz0obi1lW2MtMV0pLyhlW2MtMV0tZVtjLTJdKSk6Zj1vLShoPU1hdGgubWF4KDAsTWF0aC5taW4oYy0yLE1hdGguZmxvb3IobykpKSksaTxyWzBdPyhwPTAsZD0wLHY9KGktclswXSkvKHJbMV0tclswXSkpOmk+clt1LTFdPyhwPXUtMixkPTEsdj0oaS1yW3UtMV0pLyhyW3UtMV0tclt1LTJdKSk6ZD1zLShwPU1hdGgubWF4KDAsTWF0aC5taW4odS0yLE1hdGguZmxvb3IocykpKSksZyYmKHQuZHh5ZGkobSxoLHAsZixkKSxsWzBdKz1tWzBdKmcsbFsxXSs9bVsxXSpnKSx2JiYodC5keHlkaihtLGgscCxmLGQpLGxbMF0rPW1bMF0qdixsWzFdKz1tWzFdKnYpfXJldHVybiBsfSx0LmMycD1mdW5jdGlvbih0LGUscil7cmV0dXJuW2UuYzJwKHRbMF0pLHIuYzJwKHRbMV0pXX0sdC5wMng9ZnVuY3Rpb24odCxlLHIpe3JldHVybltlLnAyYyh0WzBdKSxyLnAyYyh0WzFdKV19LHQuZGFkaT1mdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1heCgwLE1hdGgubWluKGUubGVuZ3RoLTIsdCkpO3JldHVybiBlW3IrMV0tZVtyXX0sdC5kYmRqPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5taW4oci5sZW5ndGgtMix0KSk7cmV0dXJuIHJbZSsxXS1yW2VdfSx0LmR4eWRhPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXQuZHh5ZGkobnVsbCxlLHIsbixpKSxvPXQuZGFkaShlLG4pO3JldHVyblthWzBdL28sYVsxXS9vXX0sdC5keHlkYj1mdW5jdGlvbihlLHIsbixpKXt2YXIgYT10LmR4eWRqKG51bGwsZSxyLG4saSksbz10LmRiZGoocixpKTtyZXR1cm5bYVswXS9vLGFbMV0vb119LHQuZHh5ZGFfcm91Z2g9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPW0qKG58fC4xKSxhPXQuYWIyeHkoZStpLHIsITApLG89dC5hYjJ4eShlLWksciwhMCk7cmV0dXJuWy41KihhWzBdLW9bMF0pL2ksLjUqKGFbMV0tb1sxXSkvaV19LHQuZHh5ZGJfcm91Z2g9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXkqKG58fC4xKSxhPXQuYWIyeHkoZSxyK2ksITApLG89dC5hYjJ4eShlLHItaSwhMCk7cmV0dXJuWy41KihhWzBdLW9bMF0pL2ksLjUqKGFbMV0tb1sxXSkvaV19LHQuZHBkeD1mdW5jdGlvbih0KXtyZXR1cm4gdC5fbX0sdC5kcGR5PWZ1bmN0aW9uKHQpe3JldHVybiB0Ll9tfX19LHtcIi4uLy4uL2xpYi9zZWFyY2hcIjo3MjAsXCIuL2NvbXB1dGVfY29udHJvbF9wb2ludHNcIjo4OTAsXCIuL2NvbnN0YW50c1wiOjg5MSxcIi4vY3JlYXRlX2lfZGVyaXZhdGl2ZV9ldmFsdWF0b3JcIjo4OTIsXCIuL2NyZWF0ZV9qX2Rlcml2YXRpdmVfZXZhbHVhdG9yXCI6ODkzLFwiLi9jcmVhdGVfc3BsaW5lX2V2YWx1YXRvclwiOjg5NH1dLDkwMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLG8scz1bXSxsPVtdLGM9dFswXS5sZW5ndGgsdT10Lmxlbmd0aDtmdW5jdGlvbiBoKGUscil7dmFyIG4saT0wLGE9MDtyZXR1cm4gZT4wJiZ2b2lkIDAhPT0obj10W3JdW2UtMV0pJiYoYSsrLGkrPW4pLGU8Yy0xJiZ2b2lkIDAhPT0obj10W3JdW2UrMV0pJiYoYSsrLGkrPW4pLHI+MCYmdm9pZCAwIT09KG49dFtyLTFdW2VdKSYmKGErKyxpKz1uKSxyPHUtMSYmdm9pZCAwIT09KG49dFtyKzFdW2VdKSYmKGErKyxpKz1uKSxpL01hdGgubWF4KDEsYSl9dmFyIGYscCxkLGcsdixtLHkseCxiLF8sdyxrPTA7Zm9yKGk9MDtpPGM7aSsrKWZvcihhPTA7YTx1O2ErKyl2b2lkIDA9PT10W2FdW2ldJiYocy5wdXNoKGkpLGwucHVzaChhKSx0W2FdW2ldPWgoaSxhKSksaz1NYXRoLm1heChrLE1hdGguYWJzKHRbYV1baV0pKTtpZighcy5sZW5ndGgpcmV0dXJuIHQ7dmFyIEE9MCxUPTAsTT1zLmxlbmd0aDtkb3tmb3IoQT0wLG89MDtvPE07bysrKXtpPXNbb10sYT1sW29dO3ZhciBTLEUsQyxMLHosTyxJPTAsRD0wOzA9PT1pPyhDPWVbej1NYXRoLm1pbihjLTEsMildLEw9ZVsxXSxTPXRbYV1bel0sRCs9KEU9dFthXVsxXSkrKEUtUykqKGVbMF0tTCkvKEwtQyksSSsrKTppPT09Yy0xJiYoQz1lW3o9TWF0aC5tYXgoMCxjLTMpXSxMPWVbYy0yXSxTPXRbYV1bel0sRCs9KEU9dFthXVtjLTJdKSsoRS1TKSooZVtjLTFdLUwpLyhMLUMpLEkrKyksKDA9PT1pfHxpPT09Yy0xKSYmYT4wJiZhPHUtMSYmKGY9clthKzFdLXJbYV0sRCs9KChwPXJbYV0tclthLTFdKSp0W2ErMV1baV0rZip0W2EtMV1baV0pLyhwK2YpLEkrKyksMD09PWE/KEM9cltPPU1hdGgubWluKHUtMSwyKV0sTD1yWzFdLFM9dFtPXVtpXSxEKz0oRT10WzFdW2ldKSsoRS1TKSooclswXS1MKS8oTC1DKSxJKyspOmE9PT11LTEmJihDPXJbTz1NYXRoLm1heCgwLHUtMyldLEw9clt1LTJdLFM9dFtPXVtpXSxEKz0oRT10W3UtMl1baV0pKyhFLVMpKihyW3UtMV0tTCkvKEwtQyksSSsrKSwoMD09PWF8fGE9PT11LTEpJiZpPjAmJmk8Yy0xJiYoZj1lW2krMV0tZVtpXSxEKz0oKHA9ZVtpXS1lW2ktMV0pKnRbYV1baSsxXStmKnRbYV1baS0xXSkvKHArZiksSSsrKSxJP0QvPUk6KGQ9ZVtpKzFdLWVbaV0sZz1lW2ldLWVbaS0xXSx4PSh2PXJbYSsxXS1yW2FdKSoobT1yW2FdLXJbYS0xXSkqKHYrbSksRD0oKHk9ZCpnKihkK2cpKSoobSp0W2ErMV1baV0rdip0W2EtMV1baV0pK3gqKGcqdFthXVtpKzFdK2QqdFthXVtpLTFdKSkvKHgqKGcrZCkreSoobSt2KSkpLEErPShfPShiPUQtdFthXVtpXSkvaykqXyx3PUk/MDouODUsdFthXVtpXSs9YiooMSt3KX1BPU1hdGguc3FydChBKX13aGlsZShUKys8MTAwJiZBPjFlLTUpO3JldHVybiBuLmxvZyhcIlNtb290aGVyIGNvbnZlcmdlZCB0b1wiLEEsXCJhZnRlclwiLFQsXCJpdGVyYXRpb25zXCIpLHR9fSx7XCIuLi8uLi9saWJcIjo3MDF9XSw5MDQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLmlzQXJyYXkxRDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXIoXCJ4XCIpLGE9aSYmaS5sZW5ndGgsbz1yKFwieVwiKSxzPW8mJm8ubGVuZ3RoO2lmKCFhJiYhcylyZXR1cm4hMTtpZihlLl9jaGVhdGVyPSFpLGEmJiFuKGkpfHxzJiYhbihvKSllLl9sZW5ndGg9bnVsbDtlbHNle3ZhciBsPWE/aS5sZW5ndGg6MS8wO3MmJihsPU1hdGgubWluKGwsby5sZW5ndGgpKSxlLmEmJmUuYS5sZW5ndGgmJihsPU1hdGgubWluKGwsZS5hLmxlbmd0aCkpLGUuYiYmZS5iLmxlbmd0aCYmKGw9TWF0aC5taW4obCxlLmIubGVuZ3RoKSksZS5fbGVuZ3RoPWx9cmV0dXJuITB9fSx7XCIuLi8uLi9saWJcIjo3MDF9XSw5MDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vc2NhdHRlcmdlby9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCIpLGw9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxjPWkubWFya2VyLmxpbmU7ZS5leHBvcnRzPWwoe2xvY2F0aW9uczp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sbG9jYXRpb25tb2RlOmkubG9jYXRpb25tb2RlLHo6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHRleHQ6bCh7fSxpLnRleHQse30pLGhvdmVydGV4dDpsKHt9LGkuaG92ZXJ0ZXh0LHt9KSxtYXJrZXI6e2xpbmU6e2NvbG9yOmMuY29sb3Isd2lkdGg6bCh7fSxjLndpZHRoLHtkZmx0OjF9KSxlZGl0VHlwZTpcImNhbGNcIn0sb3BhY2l0eTp7dmFsVHlwZTpcIm51bWJlclwiLGFycmF5T2s6ITAsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOlwic3R5bGVcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LHNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6aS5zZWxlY3RlZC5tYXJrZXIub3BhY2l0eSxlZGl0VHlwZTpcInBsb3RcIn0sZWRpdFR5cGU6XCJwbG90XCJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTppLnVuc2VsZWN0ZWQubWFya2VyLm9wYWNpdHksZWRpdFR5cGU6XCJwbG90XCJ9LGVkaXRUeXBlOlwicGxvdFwifSxob3ZlcmluZm86bCh7fSxzLmhvdmVyaW5mbyx7ZWRpdFR5cGU6XCJjYWxjXCIsZmxhZ3M6W1wibG9jYXRpb25cIixcInpcIixcInRleHRcIixcIm5hbWVcIl19KSxob3ZlcnRlbXBsYXRlOm4oKX0sYShcIlwiLHtjTGV0dGVyOlwielwiLGVkaXRUeXBlT3ZlcnJpZGU6XCJjYWxjXCJ9KSx7Y29sb3JiYXI6b30pfSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIjo1NzksXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDYsXCIuLi9zY2F0dGVyZ2VvL2F0dHJpYnV0ZXNcIjoxMDkyfV0sOTA2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCIpLG89dChcIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhXCIpLHM9dChcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUuX2xlbmd0aCxsPW5ldyBBcnJheShyKSxjPTA7YzxyO2MrKyl7dmFyIHU9bFtjXT17fSxoPWUubG9jYXRpb25zW2NdLGY9ZS56W2NdO3UubG9jPVwic3RyaW5nXCI9PXR5cGVvZiBoP2g6bnVsbCx1Lno9bihmKT9mOml9cmV0dXJuIG8obCxlKSxhKHQsZSx7dmFsczplLnosY29udGFpbmVyU3RyOlwiXCIsY0xldHRlcjpcInpcIn0pLHMobCxlKSxsfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIjo1ODYsXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGFcIjoxMDUxLFwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvblwiOjEwNTQsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDkwNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCIpLGE9dChcIi4vYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7ZnVuY3Rpb24gcyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfXZhciBsPXMoXCJsb2NhdGlvbnNcIiksYz1zKFwielwiKTtsJiZsLmxlbmd0aCYmbi5pc0FycmF5T3JUeXBlZEFycmF5KGMpJiZjLmxlbmd0aD8oZS5fbGVuZ3RoPU1hdGgubWluKGwubGVuZ3RoLGMubGVuZ3RoKSxzKFwibG9jYXRpb25tb2RlXCIpLHMoXCJ0ZXh0XCIpLHMoXCJob3ZlcnRleHRcIikscyhcImhvdmVydGVtcGxhdGVcIikscyhcIm1hcmtlci5saW5lLmNvbG9yXCIpLHMoXCJtYXJrZXIubGluZS53aWR0aFwiKSxzKFwibWFya2VyLm9wYWNpdHlcIiksaSh0LGUsbyxzLHtwcmVmaXg6XCJcIixjTGV0dGVyOlwielwifSksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUscykpOmUudmlzaWJsZT0hMX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiOjU4OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4vYXR0cmlidXRlc1wiOjkwNX1dLDkwODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0LmxvY2F0aW9uPWUubG9jYXRpb24sdC56PWUueix0fX0se31dLDkwOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxpPXQoXCIuL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHRcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbyxzLGwsYyx1PXQuY2QsaD11WzBdLnRyYWNlLGY9dC5zdWJwbG90O2ZvcihzPTA7czx1Lmxlbmd0aDtzKyspaWYoYz0hMSwobz11W3NdKS5fcG9seWdvbnMpe2ZvcihsPTA7bDxvLl9wb2x5Z29ucy5sZW5ndGg7bCsrKW8uX3BvbHlnb25zW2xdLmNvbnRhaW5zKFtlLHJdKSYmKGM9IWMpLG8uX3BvbHlnb25zW2xdLmNvbnRhaW5zKFtlKzM2MCxyXSkmJihjPSFjKTtpZihjKWJyZWFrfWlmKGMmJm8pcmV0dXJuIHQueDA9dC54MT10LnhhLmMycChvLmN0KSx0LnkwPXQueTE9dC55YS5jMnAoby5jdCksdC5pbmRleD1vLmluZGV4LHQubG9jYXRpb249by5sb2MsdC56PW8ueix0LmhvdmVydGVtcGxhdGU9by5ob3ZlcnRlbXBsYXRlLGZ1bmN0aW9uKHQsZSxyLG8pe2lmKGUuaG92ZXJ0ZW1wbGF0ZSlyZXR1cm47dmFyIHM9ci5oaXx8ZS5ob3ZlcmluZm8sbD1cImFsbFwiPT09cz9pLmhvdmVyaW5mby5mbGFnczpzLnNwbGl0KFwiK1wiKSxjPS0xIT09bC5pbmRleE9mKFwibmFtZVwiKSx1PS0xIT09bC5pbmRleE9mKFwibG9jYXRpb25cIiksaD0tMSE9PWwuaW5kZXhPZihcInpcIiksZj0tMSE9PWwuaW5kZXhPZihcInRleHRcIikscD1bXTshYyYmdT90Lm5hbWVPdmVycmlkZT1yLmxvYzooYyYmKHQubmFtZU92ZXJyaWRlPWUubmFtZSksdSYmcC5wdXNoKHIubG9jKSk7aCYmcC5wdXNoKChkPXIueixuLnRpY2tUZXh0KG8sby5jMmwoZCksXCJob3ZlclwiKS50ZXh0KSk7dmFyIGQ7ZiYmYShyLGUscCk7dC5leHRyYVRleHQ9cC5qb2luKFwiPGJyPlwiKX0odCxoLG8sZi5tb2NrQXhpcyksW3RdfX0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dFwiOjEwNjAsXCIuL2F0dHJpYnV0ZXNcIjo5MDV9XSw5MTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLG4uY29sb3JiYXI9dChcIi4uL2hlYXRtYXAvY29sb3JiYXJcIiksbi5jYWxjPXQoXCIuL2NhbGNcIiksbi5wbG90PXQoXCIuL3Bsb3RcIiksbi5zdHlsZT10KFwiLi9zdHlsZVwiKS5zdHlsZSxuLnN0eWxlT25TZWxlY3Q9dChcIi4vc3R5bGVcIikuc3R5bGVPblNlbGVjdCxuLmhvdmVyUG9pbnRzPXQoXCIuL2hvdmVyXCIpLG4uZXZlbnREYXRhPXQoXCIuL2V2ZW50X2RhdGFcIiksbi5zZWxlY3RQb2ludHM9dChcIi4vc2VsZWN0XCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwiY2hvcm9wbGV0aFwiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4uLy4uL3Bsb3RzL2dlb1wiKSxuLmNhdGVnb3JpZXM9W1wiZ2VvXCIsXCJub09wYWNpdHlcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9nZW9cIjo3NzksXCIuLi9oZWF0bWFwL2NvbG9yYmFyXCI6OTUxLFwiLi9hdHRyaWJ1dGVzXCI6OTA1LFwiLi9jYWxjXCI6OTA2LFwiLi9kZWZhdWx0c1wiOjkwNyxcIi4vZXZlbnRfZGF0YVwiOjkwOCxcIi4vaG92ZXJcIjo5MDksXCIuL3Bsb3RcIjo5MTEsXCIuL3NlbGVjdFwiOjkxMixcIi4vc3R5bGVcIjo5MTN9XSw5MTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL2xpYi9wb2x5Z29uXCIpLG89dChcIi4uLy4uL2xpYi90b3BvanNvbl91dGlsc1wiKS5nZXRUb3BvanNvbkZlYXR1cmVzLHM9dChcIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHNcIikubG9jYXRpb25Ub0ZlYXR1cmUsbD10KFwiLi9zdHlsZVwiKS5zdHlsZTtmdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciByPXRbMF0udHJhY2Usbj10Lmxlbmd0aCxpPW8ocixlKSxhPTA7YTxuO2ErKyl7dmFyIGw9dFthXSxjPXMoci5sb2NhdGlvbm1vZGUsbC5sb2MsaSk7Yz8obC5nZW9qc29uPWMsbC5jdD1jLnByb3BlcnRpZXMuY3QsbC5pbmRleD1hLGwuX3BvbHlnb25zPXUoYykpOmwuZ2VvanNvbj1udWxsfX1mdW5jdGlvbiB1KHQpe3ZhciBlLHIsbixpLG89dC5nZW9tZXRyeSxzPW8uY29vcmRpbmF0ZXMsbD10LmlkLGM9W107ZnVuY3Rpb24gdSh0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoLTE7ZSsrKWlmKHRbZV1bMF0+MCYmdFtlKzFdWzBdPDApcmV0dXJuIGU7cmV0dXJuIG51bGx9c3dpdGNoKGU9XCJSVVNcIj09PWx8fFwiRkpJXCI9PT1sP2Z1bmN0aW9uKHQpe3ZhciBlO2lmKG51bGw9PT11KHQpKWU9dDtlbHNlIGZvcihlPW5ldyBBcnJheSh0Lmxlbmd0aCksaT0wO2k8dC5sZW5ndGg7aSsrKWVbaV09W3RbaV1bMF08MD90W2ldWzBdKzM2MDp0W2ldWzBdLHRbaV1bMV1dO2MucHVzaChhLnRlc3RlcihlKSl9OlwiQVRBXCI9PT1sP2Z1bmN0aW9uKHQpe3ZhciBlPXUodCk7aWYobnVsbD09PWUpcmV0dXJuIGMucHVzaChhLnRlc3Rlcih0KSk7dmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoKzEpLG49MDtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKWk+ZT9yW24rK109W3RbaV1bMF0rMzYwLHRbaV1bMV1dOmk9PT1lPyhyW24rK109dFtpXSxyW24rK109W3RbaV1bMF0sLTkwXSk6cltuKytdPXRbaV07dmFyIG89YS50ZXN0ZXIocik7by5wdHMucG9wKCksYy5wdXNoKG8pfTpmdW5jdGlvbih0KXtjLnB1c2goYS50ZXN0ZXIodCkpfSxvLnR5cGUpe2Nhc2VcIk11bHRpUG9seWdvblwiOmZvcihyPTA7cjxzLmxlbmd0aDtyKyspZm9yKG49MDtuPHNbcl0ubGVuZ3RoO24rKyllKHNbcl1bbl0pO2JyZWFrO2Nhc2VcIlBvbHlnb25cIjpmb3Iocj0wO3I8cy5sZW5ndGg7cisrKWUoc1tyXSl9cmV0dXJuIGN9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGE9MDthPHIubGVuZ3RoO2ErKyljKHJbYV0sZS50b3BvanNvbik7dmFyIG89ZS5sYXllcnMuYmFja3Bsb3Quc2VsZWN0KFwiLmNob3JvcGxldGhsYXllclwiKTtpLm1ha2VUcmFjZUdyb3VwcyhvLHIsXCJ0cmFjZSBjaG9yb3BsZXRoXCIpLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9KGVbMF0ubm9kZTM9bi5zZWxlY3QodGhpcykpLnNlbGVjdEFsbChcInBhdGguY2hvcm9wbGV0aGxvY2F0aW9uXCIpLmRhdGEoaS5pZGVudGl0eSk7ci5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChcImNob3JvcGxldGhsb2NhdGlvblwiLCEwKSxyLmV4aXQoKS5yZW1vdmUoKSxsKHQsZSl9KX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHNcIjo2OTQsXCIuLi8uLi9saWIvcG9seWdvblwiOjcxMyxcIi4uLy4uL2xpYi90b3BvanNvbl91dGlsc1wiOjcyOCxcIi4vc3R5bGVcIjo5MTMsZDM6MTU1fV0sOTEyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxzPXQuY2QsbD10LnhheGlzLGM9dC55YXhpcyx1PVtdO2lmKCExPT09ZSlmb3Iocj0wO3I8cy5sZW5ndGg7cisrKXNbcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxzLmxlbmd0aDtyKyspKGk9KG49c1tyXSkuY3QpJiYoYT1sLmMycChpKSxvPWMuYzJwKGkpLGUuY29udGFpbnMoW2Esb10sbnVsbCxyLHQpPyh1LnB1c2goe3BvaW50TnVtYmVyOnIsbG9uOmlbMF0sbGF0OmlbMV19KSxuLnNlbGVjdGVkPTEpOm4uc2VsZWN0ZWQ9MCk7cmV0dXJuIHV9fSx7fV0sOTEzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZVwiKTtmdW5jdGlvbiBzKHQsZSl7dmFyIHI9ZVswXS50cmFjZSxzPWVbMF0ubm9kZTMuc2VsZWN0QWxsKFwiLmNob3JvcGxldGhsb2NhdGlvblwiKSxsPXIubWFya2VyfHx7fSxjPWwubGluZXx8e30sdT1vLm1ha2VDb2xvclNjYWxlRnVuYyhvLmV4dHJhY3RTY2FsZShyLHtjTGV0dGVyOlwielwifSkpO3MuZWFjaChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5hdHRyKFwiZmlsbFwiLHUodC56KSkuY2FsbChpLnN0cm9rZSx0Lm1sY3x8Yy5jb2xvcikuY2FsbChhLmRhc2hMaW5lLFwiXCIsdC5tbHd8fGMud2lkdGh8fDApLnN0eWxlKFwib3BhY2l0eVwiLGwub3BhY2l0eSl9KSxhLnNlbGVjdGVkUG9pbnRTdHlsZShzLHIsdCl9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUpe2UmJnModCxlKX0sc3R5bGVPblNlbGVjdDpmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0ubm9kZTMsbj1lWzBdLnRyYWNlO24uc2VsZWN0ZWRwb2ludHM/YS5zZWxlY3RlZFBvaW50U3R5bGUoci5zZWxlY3RBbGwoXCIuY2hvcm9wbGV0aGxvY2F0aW9uXCIpLG4sdCk6cyh0LGUpfX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGVcIjo1OTAsXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksZDM6MTU1fV0sOTE0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxvPXQoXCIuLi9tZXNoM2QvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCIpLGw9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxjPXt4Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx5Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx6Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx1Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx2Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx3Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxzaXplbW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wic2NhbGVkXCIsXCJhYnNvbHV0ZVwiXSxlZGl0VHlwZTpcImNhbGNcIixkZmx0Olwic2NhbGVkXCJ9LHNpemVyZWY6e3ZhbFR5cGU6XCJudW1iZXJcIixlZGl0VHlwZTpcImNhbGNcIixtaW46MH0sYW5jaG9yOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLGVkaXRUeXBlOlwiY2FsY1wiLHZhbHVlczpbXCJ0aXBcIixcInRhaWxcIixcImNtXCIsXCJjZW50ZXJcIl0sZGZsdDpcImNtXCJ9LHRleHQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsYXJyYXlPazohMCxlZGl0VHlwZTpcImNhbGNcIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LGhvdmVydGVtcGxhdGU6YSh7ZWRpdFR5cGU6XCJjYWxjXCJ9LHtrZXlzOltcIm5vcm1cIl19KX07bChjLG4oXCJcIix7Y29sb3JBdHRyOlwidS92L3cgbm9ybVwiLHNob3dTY2FsZURmbHQ6ITAsZWRpdFR5cGVPdmVycmlkZTpcImNhbGNcIn0pLHtjb2xvcmJhcjppfSk7W1wib3BhY2l0eVwiLFwibGlnaHRwb3NpdGlvblwiLFwibGlnaHRpbmdcIl0uZm9yRWFjaChmdW5jdGlvbih0KXtjW3RdPW9bdF19KSxjLmhvdmVyaW5mbz1sKHt9LHMuaG92ZXJpbmZvLHtlZGl0VHlwZTpcImNhbGNcIixmbGFnczpbXCJ4XCIsXCJ5XCIsXCJ6XCIsXCJ1XCIsXCJ2XCIsXCJ3XCIsXCJub3JtXCIsXCJ0ZXh0XCIsXCJuYW1lXCJdLGRmbHQ6XCJ4K3kreitub3JtK3RleHQrbmFtZVwifSksYy50cmFuc2Zvcm1zPXZvaWQgMCxlLmV4cG9ydHM9Y30se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCI6NTc5LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIjo1ODUsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi4vbWVzaDNkL2F0dHJpYnV0ZXNcIjo5OTR9XSw5MTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUudSxpPWUudixhPWUudyxvPU1hdGgubWluKGUueC5sZW5ndGgsZS55Lmxlbmd0aCxlLnoubGVuZ3RoLHIubGVuZ3RoLGkubGVuZ3RoLGEubGVuZ3RoKSxzPS0xLzAsbD0xLzAsYz0wO2M8bztjKyspe3ZhciB1PXJbY10saD1pW2NdLGY9YVtjXSxwPU1hdGguc3FydCh1KnUraCpoK2YqZik7cz1NYXRoLm1heChzLHApLGw9TWF0aC5taW4obCxwKX1lLl9sZW49byxlLl9ub3JtTWF4PXMsbih0LGUse3ZhbHM6W2wsc10sY29udGFpbmVyU3RyOlwiXCIsY0xldHRlcjpcImNcIn0pfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIjo1ODZ9XSw5MTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2wtY29uZTNkXCIpLGk9dChcImdsLWNvbmUzZFwiKS5jcmVhdGVDb25lTWVzaCxhPXQoXCIuLi8uLi9saWJcIikuc2ltcGxlTWFwLG89dChcIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3JcIikucGFyc2VDb2xvclNjYWxlLHM9dChcIi4uLy4uL3Bsb3RzL2dsM2QvemlwM1wiKTtmdW5jdGlvbiBsKHQsZSl7dGhpcy5zY2VuZT10LHRoaXMudWlkPWUsdGhpcy5tZXNoPW51bGwsdGhpcy5kYXRhPW51bGx9dmFyIGM9bC5wcm90b3R5cGU7Yy5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0PT09dGhpcy5tZXNoKXt2YXIgZT10LmluZGV4PXQuZGF0YS5pbmRleCxyPXRoaXMuZGF0YS54W2VdLG49dGhpcy5kYXRhLnlbZV0saT10aGlzLmRhdGEueltlXSxhPXRoaXMuZGF0YS51W2VdLG89dGhpcy5kYXRhLnZbZV0scz10aGlzLmRhdGEud1tlXTt0LnRyYWNlQ29vcmRpbmF0ZT1bcixuLGksYSxvLHMsTWF0aC5zcXJ0KGEqYStvKm8rcypzKV07dmFyIGw9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQ7cmV0dXJuIEFycmF5LmlzQXJyYXkobCkmJnZvaWQgMCE9PWxbZV0/dC50ZXh0TGFiZWw9bFtlXTpsJiYodC50ZXh0TGFiZWw9bCksITB9fTt2YXIgdT17eGF4aXM6MCx5YXhpczoxLHpheGlzOjJ9LGg9e3RpcDoxLHRhaWw6MCxjbTouMjUsY2VudGVyOi41fSxmPXt0aXA6MSx0YWlsOjEsY206Ljc1LGNlbnRlcjouNX07ZnVuY3Rpb24gcCh0LGUpe3ZhciByPXQuZnVsbFNjZW5lTGF5b3V0LGk9dC5kYXRhU2NhbGUsbD17fTtmdW5jdGlvbiBjKHQsZSl7dmFyIG49cltlXSxvPWlbdVtlXV07cmV0dXJuIGEodCxmdW5jdGlvbih0KXtyZXR1cm4gbi5kMmwodCkqb30pfWwudmVjdG9ycz1zKGMoZS51LFwieGF4aXNcIiksYyhlLnYsXCJ5YXhpc1wiKSxjKGUudyxcInpheGlzXCIpLGUuX2xlbiksbC5wb3NpdGlvbnM9cyhjKGUueCxcInhheGlzXCIpLGMoZS55LFwieWF4aXNcIiksYyhlLnosXCJ6YXhpc1wiKSxlLl9sZW4pLGwuY29sb3JtYXA9byhlKSxsLnZlcnRleEludGVuc2l0eUJvdW5kcz1bZS5jbWluL2UuX25vcm1NYXgsZS5jbWF4L2UuX25vcm1NYXhdLGwuY29uZU9mZnNldD1oW2UuYW5jaG9yXSxcInNjYWxlZFwiPT09ZS5zaXplbW9kZT9sLmNvbmVTaXplPWUuc2l6ZXJlZnx8LjU6bC5jb25lU2l6ZT1lLnNpemVyZWYmJmUuX25vcm1NYXg/ZS5zaXplcmVmL2UuX25vcm1NYXg6LjU7dmFyIHA9bihsKSxkPWUubGlnaHRwb3NpdGlvbjtyZXR1cm4gcC5saWdodFBvc2l0aW9uPVtkLngsZC55LGQuel0scC5hbWJpZW50PWUubGlnaHRpbmcuYW1iaWVudCxwLmRpZmZ1c2U9ZS5saWdodGluZy5kaWZmdXNlLHAuc3BlY3VsYXI9ZS5saWdodGluZy5zcGVjdWxhcixwLnJvdWdobmVzcz1lLmxpZ2h0aW5nLnJvdWdobmVzcyxwLmZyZXNuZWw9ZS5saWdodGluZy5mcmVzbmVsLHAub3BhY2l0eT1lLm9wYWNpdHksZS5fcGFkPWZbZS5hbmNob3JdKnAudmVjdG9yU2NhbGUqcC5jb25lU2NhbGUqZS5fbm9ybU1heCxwfWMudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuZGF0YT10O3ZhciBlPXAodGhpcy5zY2VuZSx0KTt0aGlzLm1lc2gudXBkYXRlKGUpfSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5tZXNoKSx0aGlzLm1lc2guZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxuPXAodCxlKSxhPWkocixuKSxvPW5ldyBsKHQsZS51aWQpO3JldHVybiBvLm1lc2g9YSxvLmRhdGE9ZSxhLl90cmFjZT1vLHQuZ2xwbG90LmFkZChhKSxvfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvclwiOjY5OCxcIi4uLy4uL3Bsb3RzL2dsM2QvemlwM1wiOjgwMCxcImdsLWNvbmUzZFwiOjIzOX1dLDkxNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCIpLGE9dChcIi4vYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7ZnVuY3Rpb24gcyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfXZhciBsPXMoXCJ1XCIpLGM9cyhcInZcIiksdT1zKFwid1wiKSxoPXMoXCJ4XCIpLGY9cyhcInlcIikscD1zKFwielwiKTtsJiZsLmxlbmd0aCYmYyYmYy5sZW5ndGgmJnUmJnUubGVuZ3RoJiZoJiZoLmxlbmd0aCYmZiYmZi5sZW5ndGgmJnAmJnAubGVuZ3RoPyhzKFwic2l6ZXJlZlwiKSxzKFwic2l6ZW1vZGVcIikscyhcImFuY2hvclwiKSxzKFwibGlnaHRpbmcuYW1iaWVudFwiKSxzKFwibGlnaHRpbmcuZGlmZnVzZVwiKSxzKFwibGlnaHRpbmcuc3BlY3VsYXJcIikscyhcImxpZ2h0aW5nLnJvdWdobmVzc1wiKSxzKFwibGlnaHRpbmcuZnJlc25lbFwiKSxzKFwibGlnaHRwb3NpdGlvbi54XCIpLHMoXCJsaWdodHBvc2l0aW9uLnlcIikscyhcImxpZ2h0cG9zaXRpb24uelwiKSxpKHQsZSxvLHMse3ByZWZpeDpcIlwiLGNMZXR0ZXI6XCJjXCJ9KSxzKFwidGV4dFwiKSxzKFwiaG92ZXJ0ZXh0XCIpLHMoXCJob3ZlcnRlbXBsYXRlXCIpLGUuX2xlbmd0aD1udWxsKTplLnZpc2libGU9ITF9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIjo1ODgsXCIuLi8uLi9saWJcIjo3MDEsXCIuL2F0dHJpYnV0ZXNcIjo5MTR9XSw5MTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6XCJ0cmFjZVwiLG5hbWU6XCJjb25lXCIsYmFzZVBsb3RNb2R1bGU6dChcIi4uLy4uL3Bsb3RzL2dsM2RcIiksY2F0ZWdvcmllczpbXCJnbDNkXCJdLGF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxzdXBwbHlEZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxjb2xvcmJhcjp7bWluOlwiY21pblwiLG1heDpcImNtYXhcIn0sY2FsYzp0KFwiLi9jYWxjXCIpLHBsb3Q6dChcIi4vY29udmVydFwiKSxldmVudERhdGE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5ub3JtPWUudHJhY2VDb29yZGluYXRlWzZdLHR9LG1ldGE6e319fSx7XCIuLi8uLi9wbG90cy9nbDNkXCI6Nzg5LFwiLi9hdHRyaWJ1dGVzXCI6OTE0LFwiLi9jYWxjXCI6OTE1LFwiLi9jb252ZXJ0XCI6OTE2LFwiLi9kZWZhdWx0c1wiOjkxN31dLDkxOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlc1wiKS5kYXNoLGw9dChcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiKSxjPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsdT10KFwiLi4vLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHNcIiksaD11LkNPTVBBUklTT05fT1BTMixmPXUuSU5URVJWQUxfT1BTLHA9aS5saW5lO2UuZXhwb3J0cz1jKHt6Om4ueix4Om4ueCx4MDpuLngwLGR4Om4uZHgseTpuLnkseTA6bi55MCxkeTpuLmR5LHRleHQ6bi50ZXh0LGhvdmVydGV4dDpuLmhvdmVydGV4dCx0cmFuc3Bvc2U6bi50cmFuc3Bvc2UseHR5cGU6bi54dHlwZSx5dHlwZTpuLnl0eXBlLHpob3ZlcmZvcm1hdDpuLnpob3ZlcmZvcm1hdCxob3ZlcnRlbXBsYXRlOm4uaG92ZXJ0ZW1wbGF0ZSxjb25uZWN0Z2FwczpuLmNvbm5lY3RnYXBzLGZpbGxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGF1dG9jb250b3VyOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjXCIsaW1wbGllZEVkaXRzOntcImNvbnRvdXJzLnN0YXJ0XCI6dm9pZCAwLFwiY29udG91cnMuZW5kXCI6dm9pZCAwLFwiY29udG91cnMuc2l6ZVwiOnZvaWQgMH19LG5jb250b3Vyczp7dmFsVHlwZTpcImludGVnZXJcIixkZmx0OjE1LG1pbjoxLGVkaXRUeXBlOlwiY2FsY1wifSxjb250b3Vyczp7dHlwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibGV2ZWxzXCIsXCJjb25zdHJhaW50XCJdLGRmbHQ6XCJsZXZlbHNcIixlZGl0VHlwZTpcImNhbGNcIn0sc3RhcnQ6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0Om51bGwsZWRpdFR5cGU6XCJwbG90XCIsaW1wbGllZEVkaXRzOntcIl5hdXRvY29udG91clwiOiExfX0sZW5kOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDpudWxsLGVkaXRUeXBlOlwicGxvdFwiLGltcGxpZWRFZGl0czp7XCJeYXV0b2NvbnRvdXJcIjohMX19LHNpemU6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0Om51bGwsbWluOjAsZWRpdFR5cGU6XCJwbG90XCIsaW1wbGllZEVkaXRzOntcIl5hdXRvY29udG91clwiOiExfX0sY29sb3Jpbmc6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImZpbGxcIixcImhlYXRtYXBcIixcImxpbmVzXCIsXCJub25lXCJdLGRmbHQ6XCJmaWxsXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHNob3dsaW5lczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwicGxvdFwifSxzaG93bGFiZWxzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEsZWRpdFR5cGU6XCJwbG90XCJ9LGxhYmVsZm9udDpsKHtlZGl0VHlwZTpcInBsb3RcIixjb2xvckVkaXRUeXBlOlwic3R5bGVcIn0pLGxhYmVsZm9ybWF0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwicGxvdFwifSxvcGVyYXRpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltdLmNvbmNhdChoKS5jb25jYXQoZiksZGZsdDpcIj1cIixlZGl0VHlwZTpcImNhbGNcIn0sdmFsdWU6e3ZhbFR5cGU6XCJhbnlcIixkZmx0OjAsZWRpdFR5cGU6XCJjYWxjXCJ9LGVkaXRUeXBlOlwiY2FsY1wiLGltcGxpZWRFZGl0czp7YXV0b2NvbnRvdXI6ITF9fSxsaW5lOntjb2xvcjpjKHt9LHAuY29sb3Ise2VkaXRUeXBlOlwic3R5bGUrY29sb3JiYXJzXCJ9KSx3aWR0aDpjKHt9LHAud2lkdGgse2VkaXRUeXBlOlwic3R5bGUrY29sb3JiYXJzXCJ9KSxkYXNoOnMsc21vb3RoaW5nOmMoe30scC5zbW9vdGhpbmcse30pLGVkaXRUeXBlOlwicGxvdFwifX0sYShcIlwiLHtjTGV0dGVyOlwielwiLGF1dG9Db2xvckRmbHQ6ITEsZWRpdFR5cGVPdmVycmlkZTpcImNhbGNcIn0pLHtjb2xvcmJhcjpvfSl9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXNcIjo1OTgsXCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wc1wiOjY3NCxcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIjo3NzUsXCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXNcIjo5NDgsXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIjoxMDUyfV0sOTIwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2hlYXRtYXAvY2FsY1wiKSxpPXQoXCIuL3NldF9jb250b3Vyc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKHQsZSk7cmV0dXJuIGkoZSkscn19LHtcIi4uL2hlYXRtYXAvY2FsY1wiOjk0OSxcIi4vc2V0X2NvbnRvdXJzXCI6OTM4fV0sOTIxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzPXRbMF0sbD1zLngubGVuZ3RoLGM9cy55Lmxlbmd0aCx1PXMueixoPW4uY29udG91cnMsZj0tMS8wLHA9MS8wO2ZvcihpPTA7aTxjO2krKylwPU1hdGgubWluKHAsdVtpXVswXSkscD1NYXRoLm1pbihwLHVbaV1bbC0xXSksZj1NYXRoLm1heChmLHVbaV1bMF0pLGY9TWF0aC5tYXgoZix1W2ldW2wtMV0pO2ZvcihpPTE7aTxsLTE7aSsrKXA9TWF0aC5taW4ocCx1WzBdW2ldKSxwPU1hdGgubWluKHAsdVtjLTFdW2ldKSxmPU1hdGgubWF4KGYsdVswXVtpXSksZj1NYXRoLm1heChmLHVbYy0xXVtpXSk7c3dpdGNoKHMucHJlZml4Qm91bmRhcnk9ITEsZSl7Y2FzZVwiPlwiOmgudmFsdWU+ZiYmKHMucHJlZml4Qm91bmRhcnk9ITApO2JyZWFrO2Nhc2VcIjxcIjpoLnZhbHVlPHAmJihzLnByZWZpeEJvdW5kYXJ5PSEwKTticmVhaztjYXNlXCJbXVwiOmE9TWF0aC5taW4uYXBwbHkobnVsbCxoLnZhbHVlKSwoKG89TWF0aC5tYXguYXBwbHkobnVsbCxoLnZhbHVlKSk8cHx8YT5mKSYmKHMucHJlZml4Qm91bmRhcnk9ITApO2JyZWFrO2Nhc2VcIl1bXCI6YT1NYXRoLm1pbi5hcHBseShudWxsLGgudmFsdWUpLG89TWF0aC5tYXguYXBwbHkobnVsbCxoLnZhbHVlKSxhPHAmJm8+ZiYmKHMucHJlZml4Qm91bmRhcnk9ITApfX19LHt9XSw5MjI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9kcmF3XCIpLGk9dChcIi4vbWFrZV9jb2xvcl9tYXBcIiksYT10KFwiLi9lbmRfcGx1c1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLnRyYWNlLG89XCJjYlwiK3IudWlkO2lmKHQuX2Z1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3RBbGwoXCIuXCIrbykucmVtb3ZlKCksci5zaG93c2NhbGUpe3ZhciBzPWVbMF0udC5jYj1uKHQsbyksbD1yLmNvbnRvdXJzLGM9ci5saW5lLHU9bC5zaXplfHwxLGg9bC5jb2xvcmluZyxmPWkocix7aXNDb2xvcmJhcjohMH0pO3MuZmlsbGdyYWRpZW50KFwiaGVhdG1hcFwiPT09aD9yLmNvbG9yc2NhbGU6XCJcIikuenJhbmdlKFwiaGVhdG1hcFwiPT09aD9bci56bWluLHIuem1heF06XCJcIikuZmlsbGNvbG9yKFwiZmlsbFwiPT09aD9mOlwiXCIpLmxpbmUoe2NvbG9yOlwibGluZXNcIj09PWg/ZjpjLmNvbG9yLHdpZHRoOiExIT09bC5zaG93bGluZXM/Yy53aWR0aDowLGRhc2g6Yy5kYXNofSkubGV2ZWxzKHtzdGFydDpsLnN0YXJ0LGVuZDphKGwpLHNpemU6dX0pLm9wdGlvbnMoci5jb2xvcmJhcikoKX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2RyYXdcIjo1ODMsXCIuL2VuZF9wbHVzXCI6OTMwLFwiLi9tYWtlX2NvbG9yX21hcFwiOjkzNX1dLDkyMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17Qk9UVE9NU1RBUlQ6WzEsOSwxMywxMDQsNzEzXSxUT1BTVEFSVDpbNCw2LDcsMTA0LDcxM10sTEVGVFNUQVJUOls4LDEyLDE0LDIwOCwxMTE0XSxSSUdIVFNUQVJUOlsyLDMsMTEsMjA4LDExMTRdLE5FV0RFTFRBOltudWxsLFstMSwwXSxbMCwtMV0sWy0xLDBdLFsxLDBdLG51bGwsWzAsLTFdLFstMSwwXSxbMCwxXSxbMCwxXSxudWxsLFswLDFdLFsxLDBdLFsxLDBdLFswLC0xXV0sQ0hPT1NFU0FERExFOnsxMDQ6WzQsMV0sMjA4OlsyLDhdLDcxMzpbNywxM10sMTExNDpbMTEsMTRdfSxTQURETEVSRU1BSU5ERVI6ezE6NCwyOjgsNDoxLDc6MTMsODoyLDExOjE0LDEzOjcsMTQ6MTF9LExBQkVMRElTVEFOQ0U6MixMQUJFTElOQ1JFQVNFOjEwLExBQkVMTUlOOjMsTEFCRUxNQVg6MTAsTEFCRUxPUFRJTUlaRVI6e0VER0VDT1NUOjEsQU5HTEVDT1NUOjEsTkVJR0hCT1JDT1NUOjUsU0FNRUxFVkVMRkFDVE9SOjEwLFNBTUVMRVZFTERJU1RBTkNFOjUsTUFYQ09TVDoxMDAsSU5JVElBTFNFQVJDSFBPSU5UUzoxMCxJVEVSQVRJT05TOjV9fX0se31dLDkyNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuL2xhYmVsX2RlZmF1bHRzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksbz1hLmFkZE9wYWNpdHkscz1hLm9wYWNpdHksbD10KFwiLi4vLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHNcIiksYz1sLkNPTlNUUkFJTlRfUkVEVUNUSU9OLHU9bC5DT01QQVJJU09OX09QUzI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbCxoKXt2YXIgZixwLGQsZz1lLmNvbnRvdXJzLHY9cihcImNvbnRvdXJzLm9wZXJhdGlvblwiKTsoZy5fb3BlcmF0aW9uPWNbdl0sZnVuY3Rpb24odCxlKXt2YXIgcjstMT09PXUuaW5kZXhPZihlLm9wZXJhdGlvbik/KHQoXCJjb250b3Vycy52YWx1ZVwiLFswLDFdKSxBcnJheS5pc0FycmF5KGUudmFsdWUpP2UudmFsdWUubGVuZ3RoPjI/ZS52YWx1ZT1lLnZhbHVlLnNsaWNlKDIpOjA9PT1lLmxlbmd0aD9lLnZhbHVlPVswLDFdOmUubGVuZ3RoPDI/KHI9cGFyc2VGbG9hdChlLnZhbHVlWzBdKSxlLnZhbHVlPVtyLHIrMV0pOmUudmFsdWU9W3BhcnNlRmxvYXQoZS52YWx1ZVswXSkscGFyc2VGbG9hdChlLnZhbHVlWzFdKV06bihlLnZhbHVlKSYmKHI9cGFyc2VGbG9hdChlLnZhbHVlKSxlLnZhbHVlPVtyLHIrMV0pKToodChcImNvbnRvdXJzLnZhbHVlXCIsMCksbihlLnZhbHVlKXx8KEFycmF5LmlzQXJyYXkoZS52YWx1ZSk/ZS52YWx1ZT1wYXJzZUZsb2F0KGUudmFsdWVbMF0pOmUudmFsdWU9MCkpfShyLGcpLFwiPVwiPT09dj9mPWcuc2hvd2xpbmVzPSEwOihmPXIoXCJjb250b3Vycy5zaG93bGluZXNcIiksZD1yKFwiZmlsbGNvbG9yXCIsbygodC5saW5lfHx7fSkuY29sb3J8fGwsLjUpKSksZikmJihwPXIoXCJsaW5lLmNvbG9yXCIsZCYmcyhkKT9vKGUuZmlsbGNvbG9yLDEpOmwpLHIoXCJsaW5lLndpZHRoXCIsMikscihcImxpbmUuZGFzaFwiKSk7cihcImxpbmUuc21vb3RoaW5nXCIpLGkocixhLHAsaCl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHNcIjo2NzQsXCIuL2xhYmVsX2RlZmF1bHRzXCI6OTM0LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw5MjU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHNcIiksaT10KFwiZmFzdC1pc251bWVyaWNcIik7ZnVuY3Rpb24gYSh0LGUpe3ZhciByLGE9QXJyYXkuaXNBcnJheShlKTtmdW5jdGlvbiBvKHQpe3JldHVybiBpKHQpPyt0Om51bGx9cmV0dXJuLTEhPT1uLkNPTVBBUklTT05fT1BTMi5pbmRleE9mKHQpP3I9byhhP2VbMF06ZSk6LTEhPT1uLklOVEVSVkFMX09QUy5pbmRleE9mKHQpP3I9YT9bbyhlWzBdKSxvKGVbMV0pXTpbbyhlKSxvKGUpXTotMSE9PW4uU0VUX09QUy5pbmRleE9mKHQpJiYocj1hP2UubWFwKG8pOltvKGUpXSkscn1mdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbihlKXtlPWEodCxlKTt2YXIgcj1NYXRoLm1pbihlWzBdLGVbMV0pLG49TWF0aC5tYXgoZVswXSxlWzFdKTtyZXR1cm57c3RhcnQ6cixlbmQ6bixzaXplOm4tcn19fWZ1bmN0aW9uIHModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybntzdGFydDplPWEodCxlKSxlbmQ6MS8wLHNpemU6MS8wfX19ZS5leHBvcnRzPXtcIltdXCI6byhcIltdXCIpLFwiXVtcIjpvKFwiXVtcIiksXCI+XCI6cyhcIj5cIiksXCI8XCI6cyhcIjxcIiksXCI9XCI6cyhcIj1cIil9fSx7XCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wc1wiOjY3NCxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sOTI2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4oXCJjb250b3Vycy5zdGFydFwiKSxhPW4oXCJjb250b3Vycy5lbmRcIiksbz0hMT09PWl8fCExPT09YSxzPXIoXCJjb250b3Vycy5zaXplXCIpOyEobz9lLmF1dG9jb250b3VyPSEwOnIoXCJhdXRvY29udG91clwiLCExKSkmJnN8fHIoXCJuY29udG91cnNcIil9fSx7fV0sOTI3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKTtmdW5jdGlvbiBpKHQpe3JldHVybiBuLmV4dGVuZEZsYXQoe30sdCx7ZWRnZXBhdGhzOm4uZXh0ZW5kRGVlcChbXSx0LmVkZ2VwYXRocykscGF0aHM6bi5leHRlbmREZWVwKFtdLHQucGF0aHMpfSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmV2ZXJzZSgpfSxsPWZ1bmN0aW9uKHQpe3JldHVybiB0fTtzd2l0Y2goZSl7Y2FzZVwiPVwiOmNhc2VcIjxcIjpyZXR1cm4gdDtjYXNlXCI+XCI6Zm9yKDEhPT10Lmxlbmd0aCYmbi53YXJuKFwiQ29udG91ciBkYXRhIGludmFsaWQgZm9yIHRoZSBzcGVjaWZpZWQgaW5lcXVhbGl0eSBvcGVyYXRpb24uXCIpLGE9dFswXSxyPTA7cjxhLmVkZ2VwYXRocy5sZW5ndGg7cisrKWEuZWRnZXBhdGhzW3JdPXMoYS5lZGdlcGF0aHNbcl0pO2ZvcihyPTA7cjxhLnBhdGhzLmxlbmd0aDtyKyspYS5wYXRoc1tyXT1zKGEucGF0aHNbcl0pO3JldHVybiB0O2Nhc2VcIl1bXCI6dmFyIGM9cztzPWwsbD1jO2Nhc2VcIltdXCI6Zm9yKDIhPT10Lmxlbmd0aCYmbi53YXJuKFwiQ29udG91ciBkYXRhIGludmFsaWQgZm9yIHRoZSBzcGVjaWZpZWQgaW5lcXVhbGl0eSByYW5nZSBvcGVyYXRpb24uXCIpLGE9aSh0WzBdKSxvPWkodFsxXSkscj0wO3I8YS5lZGdlcGF0aHMubGVuZ3RoO3IrKylhLmVkZ2VwYXRoc1tyXT1zKGEuZWRnZXBhdGhzW3JdKTtmb3Iocj0wO3I8YS5wYXRocy5sZW5ndGg7cisrKWEucGF0aHNbcl09cyhhLnBhdGhzW3JdKTtmb3IoO28uZWRnZXBhdGhzLmxlbmd0aDspYS5lZGdlcGF0aHMucHVzaChsKG8uZWRnZXBhdGhzLnNoaWZ0KCkpKTtmb3IoO28ucGF0aHMubGVuZ3RoOylhLnBhdGhzLnB1c2gobChvLnBhdGhzLnNoaWZ0KCkpKTtyZXR1cm5bYV19fX0se1wiLi4vLi4vbGliXCI6NzAxfV0sOTI4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi9oZWF0bWFwL3h5el9kZWZhdWx0c1wiKSxhPXQoXCIuL2NvbnN0cmFpbnRfZGVmYXVsdHNcIiksbz10KFwiLi9jb250b3Vyc19kZWZhdWx0c1wiKSxzPXQoXCIuL3N0eWxlX2RlZmF1bHRzXCIpLGw9dChcIi4vYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7ZnVuY3Rpb24gdShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbCxyLGkpfWlmKGkodCxlLHUsYykpe3UoXCJ0ZXh0XCIpLHUoXCJob3ZlcnRleHRcIiksdShcImhvdmVydGVtcGxhdGVcIik7dmFyIGg9XCJjb25zdHJhaW50XCI9PT11KFwiY29udG91cnMudHlwZVwiKTt1KFwiY29ubmVjdGdhcHNcIixuLmlzQXJyYXkxRChlLnopKSxoP2EodCxlLHUsYyxyKToobyh0LGUsdSxmdW5jdGlvbihyKXtyZXR1cm4gbi5jb2VyY2UyKHQsZSxsLHIpfSkscyh0LGUsdSxjKSl9ZWxzZSBlLnZpc2libGU9ITF9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9oZWF0bWFwL3h5el9kZWZhdWx0c1wiOjk2MixcIi4vYXR0cmlidXRlc1wiOjkxOSxcIi4vY29uc3RyYWludF9kZWZhdWx0c1wiOjkyNCxcIi4vY29udG91cnNfZGVmYXVsdHNcIjo5MjYsXCIuL3N0eWxlX2RlZmF1bHRzXCI6OTQwfV0sOTI5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2NvbnN0cmFpbnRfbWFwcGluZ1wiKSxhPXQoXCIuL2VuZF9wbHVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBvPVwiY29uc3RyYWludFwiPT09dC50eXBlP2lbdC5fb3BlcmF0aW9uXSh0LnZhbHVlKTp0LHM9by5zaXplLGw9W10sYz1hKG8pLHU9ci50cmFjZS5fY2FycGV0VHJhY2UsaD11P3t4YXhpczp1LmFheGlzLHlheGlzOnUuYmF4aXMseDpyLmEseTpyLmJ9Ont4YXhpczplLnhheGlzLHlheGlzOmUueWF4aXMseDpyLngseTpyLnl9LGY9by5zdGFydDtmPGM7Zis9cylpZihsLnB1c2gobi5leHRlbmRGbGF0KHtsZXZlbDpmLGNyb3NzaW5nczp7fSxzdGFydHM6W10sZWRnZXBhdGhzOltdLHBhdGhzOltdLHo6ci56LHNtb290aGluZzpyLnRyYWNlLmxpbmUuc21vb3RoaW5nfSxoKSksbC5sZW5ndGg+MWUzKXtuLndhcm4oXCJUb28gbWFueSBjb250b3VycywgY2xpcHBpbmcgYXQgMTAwMFwiLHQpO2JyZWFrfXJldHVybiBsfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi9jb25zdHJhaW50X21hcHBpbmdcIjo5MjUsXCIuL2VuZF9wbHVzXCI6OTMwfV0sOTMwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0LmVuZCt0LnNpemUvMWU2fX0se31dLDkzMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9jb25zdGFudHNcIik7ZnVuY3Rpb24gYSh0LGUscixuKXtyZXR1cm4gTWF0aC5hYnModFswXS1lWzBdKTxyJiZNYXRoLmFicyh0WzFdLWVbMV0pPG59ZnVuY3Rpb24gbyh0LGUscixvLGwpe3ZhciBjLHU9ZS5qb2luKFwiLFwiKSxoPXUsZj10LmNyb3NzaW5nc1toXSxwPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0wLGE9MDt0PjIwJiZlPzIwOD09PXR8fDExMTQ9PT10P249MD09PXJbMF0/MTotMTphPTA9PT1yWzFdPzE6LTE6LTEhPT1pLkJPVFRPTVNUQVJULmluZGV4T2YodCk/YT0xOi0xIT09aS5MRUZUU1RBUlQuaW5kZXhPZih0KT9uPTE6LTEhPT1pLlRPUFNUQVJULmluZGV4T2YodCk/YT0tMTpuPS0xO3JldHVybltuLGFdfShmLHIsZSksZD1bcyh0LGUsWy1wWzBdLC1wWzFdXSldLGc9cC5qb2luKFwiLFwiKSx2PXQuei5sZW5ndGgsbT10LnpbMF0ubGVuZ3RoO2ZvcihjPTA7YzwxZTQ7YysrKXtpZihmPjIwPyhmPWkuQ0hPT1NFU0FERExFW2ZdWyhwWzBdfHxwWzFdKTwwPzA6MV0sdC5jcm9zc2luZ3NbaF09aS5TQURETEVSRU1BSU5ERVJbZl0pOmRlbGV0ZSB0LmNyb3NzaW5nc1toXSwhKHA9aS5ORVdERUxUQVtmXSkpe24ubG9nKFwiRm91bmQgYmFkIG1hcmNoaW5nIGluZGV4OlwiLGYsZSx0LmxldmVsKTticmVha31kLnB1c2gocyh0LGUscCkpLGVbMF0rPXBbMF0sZVsxXSs9cFsxXSxhKGRbZC5sZW5ndGgtMV0sZFtkLmxlbmd0aC0yXSxvLGwpJiZkLnBvcCgpLGg9ZS5qb2luKFwiLFwiKTt2YXIgeT1wWzBdJiYoZVswXTwwfHxlWzBdPm0tMil8fHBbMV0mJihlWzFdPDB8fGVbMV0+di0yKTtpZihoPT09dSYmcC5qb2luKFwiLFwiKT09PWd8fHImJnkpYnJlYWs7Zj10LmNyb3NzaW5nc1toXX0xZTQ9PT1jJiZuLmxvZyhcIkluZmluaXRlIGxvb3AgaW4gY29udG91cj9cIik7dmFyIHgsYixfLHcsayxBLFQsTSxTLEUsQyxMLHosTyxJLEQ9YShkWzBdLGRbZC5sZW5ndGgtMV0sbyxsKSxQPTAsUj0uMip0LnNtb290aGluZyxGPVtdLEI9MDtmb3IoYz0xO2M8ZC5sZW5ndGg7YysrKUw9ZFtjXSx6PWRbYy0xXSx2b2lkIDAsdm9pZCAwLE89TFsyXS16WzJdLEk9TFszXS16WzNdLFArPVQ9TWF0aC5zcXJ0KE8qTytJKkkpLEYucHVzaChUKTt2YXIgTj1QL0YubGVuZ3RoKlI7ZnVuY3Rpb24gaih0KXtyZXR1cm4gZFt0JWQubGVuZ3RoXX1mb3IoYz1kLmxlbmd0aC0yO2M+PUI7Yy0tKWlmKCh4PUZbY10pPE4pe2ZvcihfPTAsYj1jLTE7Yj49QiYmeCtGW2JdPE47Yi0tKXgrPUZbYl07aWYoRCYmYz09PWQubGVuZ3RoLTIpZm9yKF89MDtfPGImJngrRltfXTxOO18rKyl4Kz1GW19dO2s9Yy1iK18rMSxBPU1hdGguZmxvb3IoKGMrYitfKzIpLzIpLHc9RHx8YyE9PWQubGVuZ3RoLTI/RHx8LTEhPT1iP2slMj9qKEEpOlsoaihBKVswXStqKEErMSlbMF0pLzIsKGooQSlbMV0raihBKzEpWzFdKS8yXTpkWzBdOmRbZC5sZW5ndGgtMV0sZC5zcGxpY2UoYisxLGMtYisxLHcpLGM9YisxLF8mJihCPV8pLEQmJihjPT09ZC5sZW5ndGgtMj9kW19dPWRbZC5sZW5ndGgtMV06MD09PWMmJihkW2QubGVuZ3RoLTFdPWRbMF0pKX1mb3IoZC5zcGxpY2UoMCxCKSxjPTA7YzxkLmxlbmd0aDtjKyspZFtjXS5sZW5ndGg9MjtpZighKGQubGVuZ3RoPDIpKWlmKEQpZC5wb3AoKSx0LnBhdGhzLnB1c2goZCk7ZWxzZXtyfHxuLmxvZyhcIlVuY2xvc2VkIGludGVyaW9yIGNvbnRvdXI/XCIsdC5sZXZlbCx1LGQuam9pbihcIkxcIikpO3ZhciBWPSExO2ZvcihNPTA7TTx0LmVkZ2VwYXRocy5sZW5ndGg7TSsrKWlmKEU9dC5lZGdlcGF0aHNbTV0sIVYmJmEoRVswXSxkW2QubGVuZ3RoLTFdLG8sbCkpe2QucG9wKCksVj0hMDt2YXIgVT0hMTtmb3IoUz0wO1M8dC5lZGdlcGF0aHMubGVuZ3RoO1MrKylpZihhKChDPXQuZWRnZXBhdGhzW1NdKVtDLmxlbmd0aC0xXSxkWzBdLG8sbCkpe1U9ITAsZC5zaGlmdCgpLHQuZWRnZXBhdGhzLnNwbGljZShNLDEpLFM9PT1NP3QucGF0aHMucHVzaChkLmNvbmNhdChDKSk6KFM+TSYmUy0tLHQuZWRnZXBhdGhzW1NdPUMuY29uY2F0KGQsRSkpO2JyZWFrfVV8fCh0LmVkZ2VwYXRoc1tNXT1kLmNvbmNhdChFKSl9Zm9yKE09MDtNPHQuZWRnZXBhdGhzLmxlbmd0aCYmIVY7TSsrKWEoKEU9dC5lZGdlcGF0aHNbTV0pW0UubGVuZ3RoLTFdLGRbMF0sbyxsKSYmKGQuc2hpZnQoKSx0LmVkZ2VwYXRoc1tNXT1FLmNvbmNhdChkKSxWPSEwKTtWfHx0LmVkZ2VwYXRocy5wdXNoKGQpfX1mdW5jdGlvbiBzKHQsZSxyKXt2YXIgbj1lWzBdK01hdGgubWF4KHJbMF0sMCksaT1lWzFdK01hdGgubWF4KHJbMV0sMCksYT10LnpbaV1bbl0sbz10LnhheGlzLHM9dC55YXhpcztpZihyWzFdKXt2YXIgbD0odC5sZXZlbC1hKS8odC56W2ldW24rMV0tYSk7cmV0dXJuW28uYzJwKCgxLWwpKnQueFtuXStsKnQueFtuKzFdLCEwKSxzLmMycCh0LnlbaV0sITApLG4rbCxpXX12YXIgYz0odC5sZXZlbC1hKS8odC56W2krMV1bbl0tYSk7cmV0dXJuW28uYzJwKHQueFtuXSwhMCkscy5jMnAoKDEtYykqdC55W2ldK2MqdC55W2krMV0sITApLG4saStjXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEscyxsO2ZvcihlPWV8fC4wMSxyPXJ8fC4wMSxhPTA7YTx0Lmxlbmd0aDthKyspe2ZvcihzPXRbYV0sbD0wO2w8cy5zdGFydHMubGVuZ3RoO2wrKylvKHMscy5zdGFydHNbbF0sXCJlZGdlXCIsZSxyKTtmb3IoaT0wO09iamVjdC5rZXlzKHMuY3Jvc3NpbmdzKS5sZW5ndGgmJmk8MWU0OylpKyssbyhzLE9iamVjdC5rZXlzKHMuY3Jvc3NpbmdzKVswXS5zcGxpdChcIixcIikubWFwKE51bWJlciksdm9pZCAwLGUscik7MWU0PT09aSYmbi5sb2coXCJJbmZpbml0ZSBsb29wIGluIGNvbnRvdXI/XCIpfX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4vY29uc3RhbnRzXCI6OTIzfV0sOTMyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksaT10KFwiLi4vaGVhdG1hcC9ob3ZlclwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxvKXt2YXIgcz1pKHQsZSxyLGEsbywhMCk7cmV0dXJuIHMmJnMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LnRyYWNlO1wiY29uc3RyYWludFwiPT09ZS5jb250b3Vycy50eXBlJiYoZS5maWxsY29sb3ImJm4ub3BhY2l0eShlLmZpbGxjb2xvcik/dC5jb2xvcj1uLmFkZE9wYWNpdHkoZS5maWxsY29sb3IsMSk6ZS5jb250b3Vycy5zaG93bGluZXMmJm4ub3BhY2l0eShlLmxpbmUuY29sb3IpJiYodC5jb2xvcj1uLmFkZE9wYWNpdHkoZS5saW5lLmNvbG9yLDEpKSl9KSxzfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uL2hlYXRtYXAvaG92ZXJcIjo5NTV9XSw5MzM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLG4uY2FsYz10KFwiLi9jYWxjXCIpLG4ucGxvdD10KFwiLi9wbG90XCIpLnBsb3Qsbi5zdHlsZT10KFwiLi9zdHlsZVwiKSxuLmNvbG9yYmFyPXQoXCIuL2NvbG9yYmFyXCIpLG4uaG92ZXJQb2ludHM9dChcIi4vaG92ZXJcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJjb250b3VyXCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCIpLG4uY2F0ZWdvcmllcz1bXCJjYXJ0ZXNpYW5cIixcInN2Z1wiLFwiMmRNYXBcIixcImNvbnRvdXJcIixcInNob3dMZWdlbmRcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIjo3NjAsXCIuL2F0dHJpYnV0ZXNcIjo5MTksXCIuL2NhbGNcIjo5MjAsXCIuL2NvbG9yYmFyXCI6OTIyLFwiLi9kZWZhdWx0c1wiOjkyOCxcIi4vaG92ZXJcIjo5MzIsXCIuL3Bsb3RcIjo5MzcsXCIuL3N0eWxlXCI6OTM5fV0sOTM0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7aWYoaXx8KGk9e30pLHQoXCJjb250b3Vycy5zaG93bGFiZWxzXCIpKXt2YXIgYT1lLmZvbnQ7bi5jb2VyY2VGb250KHQsXCJjb250b3Vycy5sYWJlbGZvbnRcIix7ZmFtaWx5OmEuZmFtaWx5LHNpemU6YS5zaXplLGNvbG9yOnJ9KSx0KFwiY29udG91cnMubGFiZWxmb3JtYXRcIil9ITEhPT1pLmhhc0hvdmVyJiZ0KFwiemhvdmVyZm9ybWF0XCIpfX0se1wiLi4vLi4vbGliXCI6NzAxfV0sOTM1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZVwiKSxhPXQoXCIuL2VuZF9wbHVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmNvbnRvdXJzLHI9ZS5zdGFydCxvPWEoZSkscz1lLnNpemV8fDEsbD1NYXRoLmZsb29yKChvLXIpL3MpKzEsYz1cImxpbmVzXCI9PT1lLmNvbG9yaW5nPzA6MTtpc0Zpbml0ZShzKXx8KHM9MSxsPTEpO3ZhciB1LGgsZj10LnJldmVyc2VzY2FsZT9pLmZsaXBTY2FsZSh0LmNvbG9yc2NhbGUpOnQuY29sb3JzY2FsZSxwPWYubGVuZ3RoLGQ9bmV3IEFycmF5KHApLGc9bmV3IEFycmF5KHApO2lmKFwiaGVhdG1hcFwiPT09ZS5jb2xvcmluZyl7Zm9yKHQuemF1dG8mJiExPT09dC5hdXRvY29udG91ciYmKHQuem1pbj1yLXMvMix0LnptYXg9dC56bWluK2wqcyksaD0wO2g8cDtoKyspdT1mW2hdLGRbaF09dVswXSoodC56bWF4LXQuem1pbikrdC56bWluLGdbaF09dVsxXTt2YXIgdj1uLmV4dGVudChbdC56bWluLHQuem1heCxlLnN0YXJ0LGUuc3RhcnQrcyoobC0xKV0pLG09dlt0LnptaW48dC56bWF4PzA6MV0seT12W3Quem1pbjx0LnptYXg/MTowXTttIT09dC56bWluJiYoZC5zcGxpY2UoMCwwLG0pLGcuc3BsaWNlKDAsMCxSYW5nZVswXSkpLHkhPT10LnptYXgmJihkLnB1c2goeSksZy5wdXNoKGdbZy5sZW5ndGgtMV0pKX1lbHNlIGZvcihoPTA7aDxwO2grKyl1PWZbaF0sZFtoXT0odVswXSoobCtjLTEpLWMvMikqcytyLGdbaF09dVsxXTtyZXR1cm4gaS5tYWtlQ29sb3JTY2FsZUZ1bmMoe2RvbWFpbjpkLHJhbmdlOmd9LHtub051bWVyaWNDaGVjazohMH0pfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlXCI6NTkwLFwiLi9lbmRfcGx1c1wiOjkzMCxkMzoxNTV9XSw5MzY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9jb25zdGFudHNcIik7ZnVuY3Rpb24gaSh0LGUpe3ZhciByPShlWzBdWzBdPnQ/MDoxKSsoZVswXVsxXT50PzA6MikrKGVbMV1bMV0+dD8wOjQpKyhlWzFdWzBdPnQ/MDo4KTtyZXR1cm4gNT09PXJ8fDEwPT09cj90PihlWzBdWzBdK2VbMF1bMV0rZVsxXVswXStlWzFdWzFdKS80PzU9PT1yPzcxMzoxMTE0OjU9PT1yPzEwNDoyMDg6MTU9PT1yPzA6cn1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixhLG8scyxsLGMsdSxoLGY9dFswXS56LHA9Zi5sZW5ndGgsZD1mWzBdLmxlbmd0aCxnPTI9PT1wfHwyPT09ZDtmb3Iocj0wO3I8cC0xO3IrKylmb3Iobz1bXSwwPT09ciYmKG89by5jb25jYXQobi5CT1RUT01TVEFSVCkpLHI9PT1wLTImJihvPW8uY29uY2F0KG4uVE9QU1RBUlQpKSxlPTA7ZTxkLTE7ZSsrKWZvcihhPW8uc2xpY2UoKSwwPT09ZSYmKGE9YS5jb25jYXQobi5MRUZUU1RBUlQpKSxlPT09ZC0yJiYoYT1hLmNvbmNhdChuLlJJR0hUU1RBUlQpKSxzPWUrXCIsXCIrcixsPVtbZltyXVtlXSxmW3JdW2UrMV1dLFtmW3IrMV1bZV0sZltyKzFdW2UrMV1dXSxoPTA7aDx0Lmxlbmd0aDtoKyspKGM9aSgodT10W2hdKS5sZXZlbCxsKSkmJih1LmNyb3NzaW5nc1tzXT1jLC0xIT09YS5pbmRleE9mKGMpJiYodS5zdGFydHMucHVzaChbZSxyXSksZyYmLTEhPT1hLmluZGV4T2YoYyxhLmluZGV4T2YoYykrMSkmJnUuc3RhcnRzLnB1c2goW2Uscl0pKSl9fSx7XCIuL2NvbnN0YW50c1wiOjkyM31dLDkzNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLG89dChcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiKSxzPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxsPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnRcIiksYz10KFwiLi4vaGVhdG1hcC9wbG90XCIpLHU9dChcIi4vbWFrZV9jcm9zc2luZ3NcIiksaD10KFwiLi9maW5kX2FsbF9wYXRoc1wiKSxmPXQoXCIuL2VtcHR5X3BhdGhpbmZvXCIpLHA9dChcIi4vY29udmVydF90b19jb25zdHJhaW50c1wiKSxkPXQoXCIuL2Nsb3NlX2JvdW5kYXJpZXNcIiksZz10KFwiLi9jb25zdGFudHNcIiksdj1nLkxBQkVMT1BUSU1JWkVSO2Z1bmN0aW9uIG0odCxlKXt2YXIgcixuLG8scyxsLGMsdSxoPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5wcmVmaXhCb3VuZGFyeTtpZih2b2lkIDA9PT1yKXt2YXIgbj1NYXRoLm1pbih0LnpbMF1bMF0sdC56WzBdWzFdKTtyPSF0LmVkZ2VwYXRocy5sZW5ndGgmJm4+dC5sZXZlbH1yZXR1cm4gcj9cIk1cIitlLmpvaW4oXCJMXCIpK1wiWlwiOlwiXCJ9KHQsZSksZj0wLHA9dC5lZGdlcGF0aHMubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KSxkPSEwO2Z1bmN0aW9uIGcodCl7cmV0dXJuIE1hdGguYWJzKHRbMV0tZVsyXVsxXSk8LjAxfWZ1bmN0aW9uIHYodCl7cmV0dXJuIE1hdGguYWJzKHRbMF0tZVswXVswXSk8LjAxfWZ1bmN0aW9uIG0odCl7cmV0dXJuIE1hdGguYWJzKHRbMF0tZVsyXVswXSk8LjAxfWZvcig7cC5sZW5ndGg7KXtmb3IoYz1hLnNtb290aG9wZW4odC5lZGdlcGF0aHNbZl0sdC5zbW9vdGhpbmcpLGgrPWQ/YzpjLnJlcGxhY2UoL15NLyxcIkxcIikscC5zcGxpY2UocC5pbmRleE9mKGYpLDEpLHI9dC5lZGdlcGF0aHNbZl1bdC5lZGdlcGF0aHNbZl0ubGVuZ3RoLTFdLHM9LTEsbz0wO288NDtvKyspe2lmKCFyKXtpLmxvZyhcIk1pc3NpbmcgZW5kP1wiLGYsdCk7YnJlYWt9Zm9yKHU9cixNYXRoLmFicyh1WzFdLWVbMF1bMV0pPC4wMSYmIW0ocik/bj1lWzFdOnYocik/bj1lWzBdOmcocik/bj1lWzNdOm0ocikmJihuPWVbMl0pLGw9MDtsPHQuZWRnZXBhdGhzLmxlbmd0aDtsKyspe3ZhciB5PXQuZWRnZXBhdGhzW2xdWzBdO01hdGguYWJzKHJbMF0tblswXSk8LjAxP01hdGguYWJzKHJbMF0teVswXSk8LjAxJiYoeVsxXS1yWzFdKSooblsxXS15WzFdKT49MCYmKG49eSxzPWwpOk1hdGguYWJzKHJbMV0tblsxXSk8LjAxP01hdGguYWJzKHJbMV0teVsxXSk8LjAxJiYoeVswXS1yWzBdKSooblswXS15WzBdKT49MCYmKG49eSxzPWwpOmkubG9nKFwiZW5kcHQgdG8gbmV3ZW5kcHQgaXMgbm90IHZlcnQuIG9yIGhvcnouXCIscixuLHkpfWlmKHI9bixzPj0wKWJyZWFrO2grPVwiTFwiK259aWYocz09PXQuZWRnZXBhdGhzLmxlbmd0aCl7aS5sb2coXCJ1bmNsb3NlZCBwZXJpbWV0ZXIgcGF0aFwiKTticmVha31mPXMsKGQ9LTE9PT1wLmluZGV4T2YoZikpJiYoZj1wWzBdLGgrPVwiWlwiKX1mb3IoZj0wO2Y8dC5wYXRocy5sZW5ndGg7ZisrKWgrPWEuc21vb3RoY2xvc2VkKHQucGF0aHNbZl0sdC5zbW9vdGhpbmcpO3JldHVybiBofWZ1bmN0aW9uIHkodCxlLHIsbil7dmFyIGE9ZS53aWR0aC8yLG89ZS5oZWlnaHQvMixzPXQueCxsPXQueSxjPXQudGhldGEsdT1NYXRoLmNvcyhjKSphLGg9TWF0aC5zaW4oYykqYSxmPShzPm4uY2VudGVyP24ucmlnaHQtczpzLW4ubGVmdCkvKHUrTWF0aC5hYnMoTWF0aC5zaW4oYykqbykpLHA9KGw+bi5taWRkbGU/bi5ib3R0b20tbDpsLW4udG9wKS8oTWF0aC5hYnMoaCkrTWF0aC5jb3MoYykqbyk7aWYoZjwxfHxwPDEpcmV0dXJuIDEvMDt2YXIgZD12LkVER0VDT1NUKigxLyhmLTEpKzEvKHAtMSkpO2QrPXYuQU5HTEVDT1NUKmMqYztmb3IodmFyIGc9cy11LG09bC1oLHk9cyt1LHg9bCtoLGI9MDtiPHIubGVuZ3RoO2IrKyl7dmFyIF89cltiXSx3PU1hdGguY29zKF8udGhldGEpKl8ud2lkdGgvMixrPU1hdGguc2luKF8udGhldGEpKl8ud2lkdGgvMixBPTIqaS5zZWdtZW50RGlzdGFuY2UoZyxtLHkseCxfLngtdyxfLnktayxfLngrdyxfLnkraykvKGUuaGVpZ2h0K18uaGVpZ2h0KSxUPV8ubGV2ZWw9PT1lLmxldmVsLE09VD92LlNBTUVMRVZFTERJU1RBTkNFOjE7aWYoQTw9TSlyZXR1cm4gMS8wO2QrPXYuTkVJR0hCT1JDT1NUKihUP3YuU0FNRUxFVkVMRkFDVE9SOjEpLyhBLU0pfXJldHVybiBkfXIucGxvdD1mdW5jdGlvbih0LGUsbyxzKXt2YXIgbD1lLnhheGlzLHY9ZS55YXhpcztpLm1ha2VUcmFjZUdyb3VwcyhzLG8sXCJjb250b3VyXCIpLmVhY2goZnVuY3Rpb24obyl7dmFyIHM9bi5zZWxlY3QodGhpcykseT1vWzBdLHg9eS50cmFjZSxiPXkueCxfPXkueSx3PXguY29udG91cnMsaz1mKHcsZSx5KSxBPWkuZW5zdXJlU2luZ2xlKHMsXCJnXCIsXCJoZWF0bWFwY29sb3JpbmdcIiksVD1bXTtcImhlYXRtYXBcIj09PXcuY29sb3JpbmcmJih4LnphdXRvJiYhMT09PXguYXV0b2NvbnRvdXImJih4Ll9pbnB1dC56bWluPXguem1pbj13LnN0YXJ0LXcuc2l6ZS8yLHguX2lucHV0LnptYXg9eC56bWF4PXguem1pbitrLmxlbmd0aCp3LnNpemUpLFQ9W29dKSxjKHQsZSxULEEpLHUoayksaChrKTt2YXIgTT1sLmMycChiWzBdLCEwKSxTPWwuYzJwKGJbYi5sZW5ndGgtMV0sITApLEU9di5jMnAoX1swXSwhMCksQz12LmMycChfW18ubGVuZ3RoLTFdLCEwKSxMPVtbTSxDXSxbUyxDXSxbUyxFXSxbTSxFXV0sej1rO1wiY29uc3RyYWludFwiPT09dy50eXBlJiYoej1wKGssdy5fb3BlcmF0aW9uKSxkKHosdy5fb3BlcmF0aW9uLEwseCkpLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1pLmVuc3VyZVNpbmdsZSh0LFwiZ1wiLFwiY29udG91cmJnXCIpLnNlbGVjdEFsbChcInBhdGhcIikuZGF0YShcImZpbGxcIj09PXIuY29sb3Jpbmc/WzBdOltdKTtuLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKSxuLmV4aXQoKS5yZW1vdmUoKSxuLmF0dHIoXCJkXCIsXCJNXCIrZS5qb2luKFwiTFwiKStcIlpcIikuc3R5bGUoXCJzdHJva2VcIixcIm5vbmVcIil9KHMsTCx3KSxmdW5jdGlvbih0LGUscixhKXt2YXIgbz1pLmVuc3VyZVNpbmdsZSh0LFwiZ1wiLFwiY29udG91cmZpbGxcIikuc2VsZWN0QWxsKFwicGF0aFwiKS5kYXRhKFwiZmlsbFwiPT09YS5jb2xvcmluZ3x8XCJjb25zdHJhaW50XCI9PT1hLnR5cGUmJlwiPVwiIT09YS5fb3BlcmF0aW9uP2U6W10pO28uZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLG8uZXhpdCgpLnJlbW92ZSgpLG8uZWFjaChmdW5jdGlvbih0KXt2YXIgZT1tKHQscik7ZT9uLnNlbGVjdCh0aGlzKS5hdHRyKFwiZFwiLGUpLnN0eWxlKFwic3Ryb2tlXCIsXCJub25lXCIpOm4uc2VsZWN0KHRoaXMpLnJlbW92ZSgpfSl9KHMseixMLHcpLGZ1bmN0aW9uKHQsZSxvLHMsbCxjKXt2YXIgdT1pLmVuc3VyZVNpbmdsZSh0LFwiZ1wiLFwiY29udG91cmxpbmVzXCIpLGg9ITEhPT1sLnNob3dsaW5lcyxmPWwuc2hvd2xhYmVscyxwPWgmJmYsZD1yLmNyZWF0ZUxpbmVzKHUsaHx8ZixlKSx2PXIuY3JlYXRlTGluZUNsaXAodSxwLG8scy50cmFjZS51aWQpLG09dC5zZWxlY3RBbGwoXCJnLmNvbnRvdXJsYWJlbHNcIikuZGF0YShmP1swXTpbXSk7aWYobS5leGl0KCkucmVtb3ZlKCksbS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcImNvbnRvdXJsYWJlbHNcIiwhMCksZil7dmFyIHk9W10seD1bXTtpLmNsZWFyTG9jYXRpb25DYWNoZSgpO3ZhciBiPXIubGFiZWxGb3JtYXR0ZXIobCxzLnQuY2Isby5fZnVsbExheW91dCksXz1hLnRlc3Rlci5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJkYXRhLW5vdGV4XCIsMSkuY2FsbChhLmZvbnQsbC5sYWJlbGZvbnQpLHc9ZVswXS54YXhpcyxrPWVbMF0ueWF4aXMsQT13Ll9sZW5ndGgsVD1rLl9sZW5ndGgsTT13LnJhbmdlLFM9ay5yYW5nZSxFPU1hdGgubWF4KGNbMF1bMF0sMCksQz1NYXRoLm1pbihjWzJdWzBdLEEpLEw9TWF0aC5tYXgoY1swXVsxXSwwKSx6PU1hdGgubWluKGNbMl1bMV0sVCksTz17fTtNWzBdPE1bMV0/KE8ubGVmdD1FLE8ucmlnaHQ9Qyk6KE8ubGVmdD1DLE8ucmlnaHQ9RSksU1swXTxTWzFdPyhPLnRvcD1MLE8uYm90dG9tPXopOihPLnRvcD16LE8uYm90dG9tPUwpLE8ubWlkZGxlPShPLnRvcCtPLmJvdHRvbSkvMixPLmNlbnRlcj0oTy5sZWZ0K08ucmlnaHQpLzIseS5wdXNoKFtbTy5sZWZ0LE8udG9wXSxbTy5yaWdodCxPLnRvcF0sW08ucmlnaHQsTy5ib3R0b21dLFtPLmxlZnQsTy5ib3R0b21dXSk7dmFyIEk9TWF0aC5zcXJ0KEEqQStUKlQpLEQ9Zy5MQUJFTERJU1RBTkNFKkkvTWF0aC5tYXgoMSxlLmxlbmd0aC9nLkxBQkVMSU5DUkVBU0UpO2QuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1yLmNhbGNUZXh0T3B0cyh0LmxldmVsLGIsXyxvKTtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoXCJwYXRoXCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1pLmdldFZpc2libGVTZWdtZW50KHRoaXMsTyxlLmhlaWdodC8yKTtpZih0JiYhKHQubGVuPChlLndpZHRoK2UuaGVpZ2h0KSpnLkxBQkVMTUlOKSlmb3IodmFyIG49TWF0aC5taW4oTWF0aC5jZWlsKHQubGVuL0QpLGcuTEFCRUxNQVgpLGE9MDthPG47YSsrKXt2YXIgbz1yLmZpbmRCZXN0VGV4dExvY2F0aW9uKHRoaXMsdCxlLHgsTyk7aWYoIW8pYnJlYWs7ci5hZGRMYWJlbERhdGEobyxlLHgseSl9fSl9KSxfLnJlbW92ZSgpLHIuZHJhd0xhYmVscyhtLHgsbyx2LHA/eTpudWxsKX1mJiYhaCYmZC5yZW1vdmUoKX0ocyxrLHQseSx3LEwpLGZ1bmN0aW9uKHQsZSxyLG4sbyl7dmFyIHM9ci5fZnVsbExheW91dC5fY2xpcHMsbD1cImNsaXBcIituLnRyYWNlLnVpZCxjPXMuc2VsZWN0QWxsKFwiI1wiK2wpLmRhdGEobi50cmFjZS5jb25uZWN0Z2Fwcz9bXTpbMF0pO2lmKGMuZW50ZXIoKS5hcHBlbmQoXCJjbGlwUGF0aFwiKS5jbGFzc2VkKFwiY29udG91cmNsaXBcIiwhMCkuYXR0cihcImlkXCIsbCksYy5leGl0KCkucmVtb3ZlKCksITE9PT1uLnRyYWNlLmNvbm5lY3RnYXBzKXt2YXIgZj17bGV2ZWw6LjksY3Jvc3NpbmdzOnt9LHN0YXJ0czpbXSxlZGdlcGF0aHM6W10scGF0aHM6W10seGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLHg6bi54LHk6bi55LHo6ZnVuY3Rpb24odCl7dmFyIGUscixuPXQudHJhY2UuX2VtcHR5cG9pbnRzLGk9W10sYT10LnoubGVuZ3RoLG89dC56WzBdLmxlbmd0aCxzPVtdO2ZvcihlPTA7ZTxvO2UrKylzLnB1c2goMSk7Zm9yKGU9MDtlPGE7ZSsrKWkucHVzaChzLnNsaWNlKCkpO2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspcj1uW2VdLGlbclswXV1bclsxXV09MDtyZXR1cm4gdC56bWFzaz1pLGl9KG4pLHNtb290aGluZzowfTt1KFtmXSksaChbZl0pO3ZhciBwPW0oZixvKSxkPWkuZW5zdXJlU2luZ2xlKGMsXCJwYXRoXCIsXCJcIik7ZC5hdHRyKFwiZFwiLHApfWVsc2UgbD1udWxsO2Euc2V0Q2xpcFVybCh0LGwscil9KHMsZSx0LHksTCl9KX0sci5jcmVhdGVMaW5lcz1mdW5jdGlvbih0LGUscil7dmFyIG49clswXS5zbW9vdGhpbmcsaT10LnNlbGVjdEFsbChcImcuY29udG91cmxldmVsXCIpLmRhdGEoZT9yOltdKTtpZihpLmV4aXQoKS5yZW1vdmUoKSxpLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiY29udG91cmxldmVsXCIsITApLGUpe3ZhciBvPWkuc2VsZWN0QWxsKFwicGF0aC5vcGVubGluZVwiKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBlZGdlcGF0aHN8fHQuZWRnZXBhdGhzfSk7by5leGl0KCkucmVtb3ZlKCksby5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChcIm9wZW5saW5lXCIsITApLG8uYXR0cihcImRcIixmdW5jdGlvbih0KXtyZXR1cm4gYS5zbW9vdGhvcGVuKHQsbil9KS5zdHlsZShcInN0cm9rZS1taXRlcmxpbWl0XCIsMSkuc3R5bGUoXCJ2ZWN0b3ItZWZmZWN0XCIsXCJub24tc2NhbGluZy1zdHJva2VcIik7dmFyIHM9aS5zZWxlY3RBbGwoXCJwYXRoLmNsb3NlZGxpbmVcIikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5wcGF0aHN8fHQucGF0aHN9KTtzLmV4aXQoKS5yZW1vdmUoKSxzLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5jbGFzc2VkKFwiY2xvc2VkbGluZVwiLCEwKSxzLmF0dHIoXCJkXCIsZnVuY3Rpb24odCl7cmV0dXJuIGEuc21vb3RoY2xvc2VkKHQsbil9KS5zdHlsZShcInN0cm9rZS1taXRlcmxpbWl0XCIsMSkuc3R5bGUoXCJ2ZWN0b3ItZWZmZWN0XCIsXCJub24tc2NhbGluZy1zdHJva2VcIil9cmV0dXJuIGl9LHIuY3JlYXRlTGluZUNsaXA9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZT9cImNsaXBsaW5lXCIrbjpudWxsLG89ci5fZnVsbExheW91dC5fY2xpcHMuc2VsZWN0QWxsKFwiI1wiK2kpLmRhdGEoZT9bMF06W10pO3JldHVybiBvLmV4aXQoKS5yZW1vdmUoKSxvLmVudGVyKCkuYXBwZW5kKFwiY2xpcFBhdGhcIikuY2xhc3NlZChcImNvbnRvdXJsaW5lY2xpcFwiLCEwKS5hdHRyKFwiaWRcIixpKSxhLnNldENsaXBVcmwodCxpLHIpLG99LHIubGFiZWxGb3JtYXR0ZXI9ZnVuY3Rpb24odCxlLHIpe2lmKHQubGFiZWxmb3JtYXQpcmV0dXJuIHIuX2QzbG9jYWxlLm51bWJlckZvcm1hdCh0LmxhYmVsZm9ybWF0KTt2YXIgbjtpZihlKW49ZS5heGlzO2Vsc2V7aWYobj17dHlwZTpcImxpbmVhclwiLF9pZDpcInljb250b3VyXCIsc2hvd2V4cG9uZW50OlwiYWxsXCIsZXhwb25lbnRmb3JtYXQ6XCJCXCJ9LFwiY29uc3RyYWludFwiPT09dC50eXBlKXt2YXIgaT10LnZhbHVlO0FycmF5LmlzQXJyYXkoaSk/bi5yYW5nZT1baVswXSxpW2kubGVuZ3RoLTFdXTpuLnJhbmdlPVtpLGldfWVsc2Ugbi5yYW5nZT1bdC5zdGFydCx0LmVuZF0sbi5udGlja3M9KHQuZW5kLXQuc3RhcnQpL3Quc2l6ZTtuLnJhbmdlWzBdPT09bi5yYW5nZVsxXSYmKG4ucmFuZ2VbMV0rPW4ucmFuZ2VbMF18fDEpLG4ubnRpY2tzfHwobi5udGlja3M9MWUzKSxsKG4scikscy5wcmVwVGlja3Mobiksbi5fdG1pbj1udWxsLG4uX3RtYXg9bnVsbH1yZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHMudGlja1RleHQobix0KS50ZXh0fX0sci5jYWxjVGV4dE9wdHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZSh0KTtyLnRleHQoaSkuY2FsbChvLmNvbnZlcnRUb1RzcGFucyxuKTt2YXIgcz1hLmJCb3goci5ub2RlKCksITApO3JldHVybnt0ZXh0Omksd2lkdGg6cy53aWR0aCxoZWlnaHQ6cy5oZWlnaHQsbGV2ZWw6dCxkeToocy50b3Arcy5ib3R0b20pLzJ9fSxyLmZpbmRCZXN0VGV4dExvY2F0aW9uPWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIG8scyxsLGMsdSxoPXIud2lkdGg7ZS5pc0Nsb3NlZD8ocz1lLmxlbi92LklOSVRJQUxTRUFSQ0hQT0lOVFMsbz1lLm1pbitzLzIsbD1lLm1heCk6KHM9KGUubGVuLWgpLyh2LklOSVRJQUxTRUFSQ0hQT0lOVFMrMSksbz1lLm1pbitzK2gvMixsPWUubWF4LShzK2gpLzIpO2Zvcih2YXIgZj0xLzAscD0wO3A8di5JVEVSQVRJT05TO3ArKyl7Zm9yKHZhciBkPW87ZDxsO2QrPXMpe3ZhciBnPWkuZ2V0VGV4dExvY2F0aW9uKHQsZS50b3RhbCxkLGgpLG09eShnLHIsbixhKTttPGYmJihmPW0sdT1nLGM9ZCl9aWYoZj4yKnYuTUFYQ09TVClicmVhaztwJiYocy89MiksbD0obz1jLXMvMikrMS41KnN9aWYoZjw9di5NQVhDT1NUKXJldHVybiB1fSxyLmFkZExhYmVsRGF0YT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lLndpZHRoLzIsYT1lLmhlaWdodC8yLG89dC54LHM9dC55LGw9dC50aGV0YSxjPU1hdGguc2luKGwpLHU9TWF0aC5jb3MobCksaD1pKnUsZj1hKmMscD1pKmMsZD0tYSp1LGc9W1tvLWgtZixzLXAtZF0sW28raC1mLHMrcC1kXSxbbytoK2YscytwK2RdLFtvLWgrZixzLXArZF1dO3IucHVzaCh7dGV4dDplLnRleHQseDpvLHk6cyxkeTplLmR5LHRoZXRhOmwsbGV2ZWw6ZS5sZXZlbCx3aWR0aDplLndpZHRoLGhlaWdodDplLmhlaWdodH0pLG4ucHVzaChnKX0sci5kcmF3TGFiZWxzPWZ1bmN0aW9uKHQsZSxyLGEscyl7dmFyIGw9dC5zZWxlY3RBbGwoXCJ0ZXh0XCIpLmRhdGEoZSxmdW5jdGlvbih0KXtyZXR1cm4gdC50ZXh0K1wiLFwiK3QueCtcIixcIit0LnkrXCIsXCIrdC50aGV0YX0pO2lmKGwuZXhpdCgpLnJlbW92ZSgpLGwuZW50ZXIoKS5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoe1wiZGF0YS1ub3RleFwiOjEsXCJ0ZXh0LWFuY2hvclwiOlwibWlkZGxlXCJ9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQueCtNYXRoLnNpbih0LnRoZXRhKSp0LmR5LGk9dC55LU1hdGguY29zKHQudGhldGEpKnQuZHk7bi5zZWxlY3QodGhpcykudGV4dCh0LnRleHQpLmF0dHIoe3g6ZSx5OmksdHJhbnNmb3JtOlwicm90YXRlKFwiKzE4MCp0LnRoZXRhL01hdGguUEkrXCIgXCIrZStcIiBcIitpK1wiKVwifSkuY2FsbChvLmNvbnZlcnRUb1RzcGFucyxyKX0pLHMpe2Zvcih2YXIgYz1cIlwiLHU9MDt1PHMubGVuZ3RoO3UrKyljKz1cIk1cIitzW3VdLmpvaW4oXCJMXCIpK1wiWlwiO2kuZW5zdXJlU2luZ2xlKGEsXCJwYXRoXCIsXCJcIikuYXR0cihcImRcIixjKX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIjo3MjUsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZXRfY29udmVydFwiOjc2NyxcIi4uL2hlYXRtYXAvcGxvdFwiOjk1OSxcIi4vY2xvc2VfYm91bmRhcmllc1wiOjkyMSxcIi4vY29uc3RhbnRzXCI6OTIzLFwiLi9jb252ZXJ0X3RvX2NvbnN0cmFpbnRzXCI6OTI3LFwiLi9lbXB0eV9wYXRoaW5mb1wiOjkyOSxcIi4vZmluZF9hbGxfcGF0aHNcIjo5MzEsXCIuL21ha2VfY3Jvc3NpbmdzXCI6OTM2LGQzOjE1NX1dLDkzODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxpPXQoXCIuLi8uLi9saWJcIik7ZnVuY3Rpb24gYSh0LGUscil7dmFyIGk9e3R5cGU6XCJsaW5lYXJcIixyYW5nZTpbdCxlXX07cmV0dXJuIG4uYXV0b1RpY2tzKGksKGUtdCkvKHJ8fDE1KSksaX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5jb250b3VycztpZih0LmF1dG9jb250b3VyKXt2YXIgcj10LnptaW4sbz10LnptYXg7dm9pZCAwIT09ciYmdm9pZCAwIT09b3x8KHI9aS5hZ2dOdW1zKE1hdGgubWluLG51bGwsdC5feiksbz1pLmFnZ051bXMoTWF0aC5tYXgsbnVsbCx0Ll96KSk7dmFyIHM9YShyLG8sdC5uY29udG91cnMpO2Uuc2l6ZT1zLmR0aWNrLGUuc3RhcnQ9bi50aWNrRmlyc3Qocykscy5yYW5nZS5yZXZlcnNlKCksZS5lbmQ9bi50aWNrRmlyc3QocyksZS5zdGFydD09PXImJihlLnN0YXJ0Kz1lLnNpemUpLGUuZW5kPT09byYmKGUuZW5kLT1lLnNpemUpLGUuc3RhcnQ+ZS5lbmQmJihlLnN0YXJ0PWUuZW5kPShlLnN0YXJ0K2UuZW5kKS8yKSx0Ll9pbnB1dC5jb250b3Vyc3x8KHQuX2lucHV0LmNvbnRvdXJzPXt9KSxpLmV4dGVuZEZsYXQodC5faW5wdXQuY29udG91cnMse3N0YXJ0OmUuc3RhcnQsZW5kOmUuZW5kLHNpemU6ZS5zaXplfSksdC5faW5wdXQuYXV0b2NvbnRvdXI9ITB9ZWxzZSBpZihcImNvbnN0cmFpbnRcIiE9PWUudHlwZSl7dmFyIGwsYz1lLnN0YXJ0LHU9ZS5lbmQsaD10Ll9pbnB1dC5jb250b3VycztpZihjPnUmJihlLnN0YXJ0PWguc3RhcnQ9dSx1PWUuZW5kPWguZW5kPWMsYz1lLnN0YXJ0KSwhKGUuc2l6ZT4wKSlsPWM9PT11PzE6YShjLHUsdC5uY29udG91cnMpLmR0aWNrLGguc2l6ZT1lLnNpemU9bH19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OX1dLDkzOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksYT10KFwiLi4vaGVhdG1hcC9zdHlsZVwiKSxvPXQoXCIuL21ha2VfY29sb3JfbWFwXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoXCJnLmNvbnRvdXJcIik7ZS5zdHlsZShcIm9wYWNpdHlcIixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSksZS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9dFswXS50cmFjZSxhPXIuY29udG91cnMscz1yLmxpbmUsbD1hLnNpemV8fDEsYz1hLnN0YXJ0LHU9XCJjb25zdHJhaW50XCI9PT1hLnR5cGUsaD0hdSYmXCJsaW5lc1wiPT09YS5jb2xvcmluZyxmPSF1JiZcImZpbGxcIj09PWEuY29sb3JpbmcscD1ofHxmP28ocik6bnVsbDtlLnNlbGVjdEFsbChcImcuY29udG91cmxldmVsXCIpLmVhY2goZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKFwicGF0aFwiKS5jYWxsKGkubGluZUdyb3VwU3R5bGUscy53aWR0aCxoP3AodC5sZXZlbCk6cy5jb2xvcixzLmRhc2gpfSk7dmFyIGQ9YS5sYWJlbGZvbnQ7aWYoZS5zZWxlY3RBbGwoXCJnLmNvbnRvdXJsYWJlbHMgdGV4dFwiKS5lYWNoKGZ1bmN0aW9uKHQpe2kuZm9udChuLnNlbGVjdCh0aGlzKSx7ZmFtaWx5OmQuZmFtaWx5LHNpemU6ZC5zaXplLGNvbG9yOmQuY29sb3J8fChoP3AodC5sZXZlbCk6cy5jb2xvcil9KX0pLHUpZS5zZWxlY3RBbGwoXCJnLmNvbnRvdXJmaWxsIHBhdGhcIikuc3R5bGUoXCJmaWxsXCIsci5maWxsY29sb3IpO2Vsc2UgaWYoZil7dmFyIGc7ZS5zZWxlY3RBbGwoXCJnLmNvbnRvdXJmaWxsIHBhdGhcIikuc3R5bGUoXCJmaWxsXCIsZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PWcmJihnPXQubGV2ZWwpLHAodC5sZXZlbCsuNSpsKX0pLHZvaWQgMD09PWcmJihnPWMpLGUuc2VsZWN0QWxsKFwiZy5jb250b3VyYmcgcGF0aFwiKS5zdHlsZShcImZpbGxcIixwKGctLjUqbCkpfX0pLGEodCl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi9oZWF0bWFwL3N0eWxlXCI6OTYwLFwiLi9tYWtlX2NvbG9yX21hcFwiOjkzNSxkMzoxNTV9XSw5NDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCIpLGk9dChcIi4vbGFiZWxfZGVmYXVsdHNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyl7dmFyIHMsbD1yKFwiY29udG91cnMuY29sb3JpbmdcIiksYz1cIlwiO1wiZmlsbFwiPT09bCYmKHM9cihcImNvbnRvdXJzLnNob3dsaW5lc1wiKSksITEhPT1zJiYoXCJsaW5lc1wiIT09bCYmKGM9cihcImxpbmUuY29sb3JcIixcIiMwMDBcIikpLHIoXCJsaW5lLndpZHRoXCIsLjUpLHIoXCJsaW5lLmRhc2hcIikpLFwibm9uZVwiIT09bCYmKCEwIT09dC5zaG93bGVnZW5kJiYoZS5zaG93bGVnZW5kPSExKSxlLl9kZmx0U2hvd0xlZ2VuZD0hMSxuKHQsZSxhLHIse3ByZWZpeDpcIlwiLGNMZXR0ZXI6XCJ6XCJ9KSkscihcImxpbmUuc21vb3RoaW5nXCIpLGkocixhLGMsbyl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIjo1ODgsXCIuL2xhYmVsX2RlZmF1bHRzXCI6OTM0fV0sOTQxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2hlYXRtYXAvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi9jb250b3VyL2F0dHJpYnV0ZXNcIiksYT1pLmNvbnRvdXJzLG89dChcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxsPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIiksYz10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LHU9by5saW5lO2UuZXhwb3J0cz1jKHtjYXJwZXQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcImNhbGNcIn0sejpuLnosYTpuLngsYTA6bi54MCxkYTpuLmR4LGI6bi55LGIwOm4ueTAsZGI6bi5keSx0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsdHJhbnNwb3NlOm4udHJhbnNwb3NlLGF0eXBlOm4ueHR5cGUsYnR5cGU6bi55dHlwZSxmaWxsY29sb3I6aS5maWxsY29sb3IsYXV0b2NvbnRvdXI6aS5hdXRvY29udG91cixuY29udG91cnM6aS5uY29udG91cnMsY29udG91cnM6e3R5cGU6YS50eXBlLHN0YXJ0OmEuc3RhcnQsZW5kOmEuZW5kLHNpemU6YS5zaXplLGNvbG9yaW5nOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJmaWxsXCIsXCJsaW5lc1wiLFwibm9uZVwiXSxkZmx0OlwiZmlsbFwiLGVkaXRUeXBlOlwiY2FsY1wifSxzaG93bGluZXM6YS5zaG93bGluZXMsc2hvd2xhYmVsczphLnNob3dsYWJlbHMsbGFiZWxmb250OmEubGFiZWxmb250LGxhYmVsZm9ybWF0OmEubGFiZWxmb3JtYXQsb3BlcmF0aW9uOmEub3BlcmF0aW9uLHZhbHVlOmEudmFsdWUsZWRpdFR5cGU6XCJjYWxjXCIsaW1wbGllZEVkaXRzOnthdXRvY29udG91cjohMX19LGxpbmU6e2NvbG9yOmMoe30sdS5jb2xvcix7fSksd2lkdGg6dS53aWR0aCxkYXNoOnUuZGFzaCxzbW9vdGhpbmc6Yyh7fSx1LnNtb290aGluZyx7fSksZWRpdFR5cGU6XCJwbG90XCJ9LHRyYW5zZm9ybXM6dm9pZCAwfSxzKFwiXCIse2NMZXR0ZXI6XCJ6XCIsYXV0b0NvbG9yRGZsdDohMX0pLHtjb2xvcmJhcjpsfSl9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uL2NvbnRvdXIvYXR0cmlidXRlc1wiOjkxOSxcIi4uL2hlYXRtYXAvYXR0cmlidXRlc1wiOjk0OCxcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiOjEwNTJ9XSw5NDI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uL2hlYXRtYXAvY29udmVydF9jb2x1bW5feHl6XCIpLG89dChcIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXlcIikscz10KFwiLi4vaGVhdG1hcC9pbnRlcnAyZFwiKSxsPXQoXCIuLi9oZWF0bWFwL2ZpbmRfZW1wdGllc1wiKSxjPXQoXCIuLi9oZWF0bWFwL21ha2VfYm91bmRfYXJyYXlcIiksdT10KFwiLi9kZWZhdWx0c1wiKSxoPXQoXCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkXCIpLGY9dChcIi4uL2NvbnRvdXIvc2V0X2NvbnRvdXJzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUuX2NhcnBldFRyYWNlPWgodCxlKTtpZihyJiZyLnZpc2libGUmJlwibGVnZW5kb25seVwiIT09ci52aXNpYmxlKXtpZighZS5hfHwhZS5iKXt2YXIgcD10LmRhdGFbci5pbmRleF0sZD10LmRhdGFbZS5pbmRleF07ZC5hfHwoZC5hPXAuYSksZC5ifHwoZC5iPXAuYiksdShkLGUsZS5fZGVmYXVsdENvbG9yLHQuX2Z1bGxMYXlvdXQpfXZhciBnPWZ1bmN0aW9uKHQsZSl7dmFyIHIsdSxoLGYscCxkLGcsdj1lLl9jYXJwZXRUcmFjZSxtPXYuYWF4aXMseT12LmJheGlzO20uX21pbkR0aWNrPTAseS5fbWluRHRpY2s9MCxpLmlzQXJyYXkxRChlLnopJiZhKGUsbSx5LFwiYVwiLFwiYlwiLFtcInpcIl0pO3I9ZS5fYT1lLl9hfHxlLmEsZj1lLl9iPWUuX2J8fGUuYixyPXI/bS5tYWtlQ2FsY2RhdGEoZSxcIl9hXCIpOltdLGY9Zj95Lm1ha2VDYWxjZGF0YShlLFwiX2JcIik6W10sdT1lLmEwfHwwLGg9ZS5kYXx8MSxwPWUuYjB8fDAsZD1lLmRifHwxLGc9ZS5fej1vKGUuX3p8fGUueixlLnRyYW5zcG9zZSksZS5fZW1wdHlwb2ludHM9bChnKSxzKGcsZS5fZW1wdHlwb2ludHMpO3ZhciB4PWkubWF4Um93TGVuZ3RoKGcpLGI9XCJzY2FsZWRcIj09PWUueHR5cGU/XCJcIjpyLF89YyhlLGIsdSxoLHgsbSksdz1cInNjYWxlZFwiPT09ZS55dHlwZT9cIlwiOmYsaz1jKGUsdyxwLGQsZy5sZW5ndGgseSksQT17YTpfLGI6ayx6Omd9O1wibGV2ZWxzXCI9PT1lLmNvbnRvdXJzLnR5cGUmJlwibm9uZVwiIT09ZS5jb250b3Vycy5jb2xvcmluZyYmbih0LGUse3ZhbHM6Zyxjb250YWluZXJTdHI6XCJcIixjTGV0dGVyOlwielwifSk7cmV0dXJuW0FdfSh0LGUpO3JldHVybiBmKGUpLGd9fX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIjo1ODYsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkXCI6ODk3LFwiLi4vY29udG91ci9zZXRfY29udG91cnNcIjo5MzgsXCIuLi9oZWF0bWFwL2NsZWFuXzJkX2FycmF5XCI6OTUwLFwiLi4vaGVhdG1hcC9jb252ZXJ0X2NvbHVtbl94eXpcIjo5NTIsXCIuLi9oZWF0bWFwL2ZpbmRfZW1wdGllc1wiOjk1NCxcIi4uL2hlYXRtYXAvaW50ZXJwMmRcIjo5NTcsXCIuLi9oZWF0bWFwL21ha2VfYm91bmRfYXJyYXlcIjo5NTgsXCIuL2RlZmF1bHRzXCI6OTQzfV0sOTQzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi9oZWF0bWFwL3h5el9kZWZhdWx0c1wiKSxhPXQoXCIuL2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vY29udG91ci9jb25zdHJhaW50X2RlZmF1bHRzXCIpLHM9dChcIi4uL2NvbnRvdXIvY29udG91cnNfZGVmYXVsdHNcIiksbD10KFwiLi4vY29udG91ci9zdHlsZV9kZWZhdWx0c1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7ZnVuY3Rpb24gdShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfWlmKHUoXCJjYXJwZXRcIiksdC5hJiZ0LmIpe2lmKCFpKHQsZSx1LGMsXCJhXCIsXCJiXCIpKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7dShcInRleHRcIiksXCJjb25zdHJhaW50XCI9PT11KFwiY29udG91cnMudHlwZVwiKT9vKHQsZSx1LGMscix7aGFzSG92ZXI6ITF9KToocyh0LGUsdSxmdW5jdGlvbihyKXtyZXR1cm4gbi5jb2VyY2UyKHQsZSxhLHIpfSksbCh0LGUsdSxjLHtoYXNIb3ZlcjohMX0pKX1lbHNlIGUuX2RlZmF1bHRDb2xvcj1yLGUuX2xlbmd0aD1udWxsfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vY29udG91ci9jb25zdHJhaW50X2RlZmF1bHRzXCI6OTI0LFwiLi4vY29udG91ci9jb250b3Vyc19kZWZhdWx0c1wiOjkyNixcIi4uL2NvbnRvdXIvc3R5bGVfZGVmYXVsdHNcIjo5NDAsXCIuLi9oZWF0bWFwL3h5el9kZWZhdWx0c1wiOjk2MixcIi4vYXR0cmlidXRlc1wiOjk0MX1dLDk0NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIiksbi5jb2xvcmJhcj10KFwiLi4vY29udG91ci9jb2xvcmJhclwiKSxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLnBsb3Q9dChcIi4vcGxvdFwiKSxuLnN0eWxlPXQoXCIuLi9jb250b3VyL3N0eWxlXCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwiY29udG91cmNhcnBldFwiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiKSxuLmNhdGVnb3JpZXM9W1wiY2FydGVzaWFuXCIsXCJzdmdcIixcImNhcnBldFwiLFwiY29udG91clwiLFwic3ltYm9sc1wiLFwic2hvd0xlZ2VuZFwiLFwiaGFzTGluZXNcIixcImNhcnBldERlcGVuZGVudFwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiOjc2MCxcIi4uL2NvbnRvdXIvY29sb3JiYXJcIjo5MjIsXCIuLi9jb250b3VyL3N0eWxlXCI6OTM5LFwiLi9hdHRyaWJ1dGVzXCI6OTQxLFwiLi9jYWxjXCI6OTQyLFwiLi9kZWZhdWx0c1wiOjk0MyxcIi4vcGxvdFwiOjk0N31dLDk0NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksaT10KFwiLi4vY2FycGV0L2F4aXNfYWxpZ25lZF9saW5lXCIpLGE9dChcIi4uLy4uL2xpYlwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzLGwsYyx1KXt2YXIgaCxmLHAsZCxnLHYsbSx5PVwiXCIseD1lLmVkZ2VwYXRocy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pLGI9ITAsXz0xZS00Kk1hdGguYWJzKHJbMF1bMF0tclsyXVswXSksdz0xZS00Kk1hdGguYWJzKHJbMF1bMV0tclsyXVsxXSk7ZnVuY3Rpb24gayh0KXtyZXR1cm4gTWF0aC5hYnModFsxXS1yWzBdWzFdKTx3fWZ1bmN0aW9uIEEodCl7cmV0dXJuIE1hdGguYWJzKHRbMV0tclsyXVsxXSk8d31mdW5jdGlvbiBUKHQpe3JldHVybiBNYXRoLmFicyh0WzBdLXJbMF1bMF0pPF99ZnVuY3Rpb24gTSh0KXtyZXR1cm4gTWF0aC5hYnModFswXS1yWzJdWzBdKTxffWZ1bmN0aW9uIFModCxlKXt2YXIgcixuLGEsbyxoPVwiXCI7Zm9yKGsodCkmJiFNKHQpfHxBKHQpJiYhVCh0KT8obz1zLmFheGlzLGE9aShzLGwsW3RbMF0sZVswXV0sLjUqKHRbMV0rZVsxXSkpKToobz1zLmJheGlzLGE9aShzLGwsLjUqKHRbMF0rZVswXSksW3RbMV0sZVsxXV0pKSxyPTE7cjxhLmxlbmd0aDtyKyspZm9yKGgrPW8uc21vb3RoaW5nP1wiQ1wiOlwiTFwiLG49MDtuPGFbcl0ubGVuZ3RoO24rKyl7dmFyIGY9YVtyXVtuXTtoKz1bYy5jMnAoZlswXSksdS5jMnAoZlsxXSldK1wiIFwifXJldHVybiBofWZvcihoPTAsZj1udWxsO3gubGVuZ3RoOyl7dmFyIEU9ZS5lZGdlcGF0aHNbaF1bMF07Zm9yKGYmJih5Kz1TKGYsRSkpLG09bi5zbW9vdGhvcGVuKGUuZWRnZXBhdGhzW2hdLm1hcChvKSxlLnNtb290aGluZykseSs9Yj9tOm0ucmVwbGFjZSgvXk0vLFwiTFwiKSx4LnNwbGljZSh4LmluZGV4T2YoaCksMSksZj1lLmVkZ2VwYXRoc1toXVtlLmVkZ2VwYXRoc1toXS5sZW5ndGgtMV0sZz0tMSxkPTA7ZDw0O2QrKyl7aWYoIWYpe2EubG9nKFwiTWlzc2luZyBlbmQ/XCIsaCxlKTticmVha31mb3IoayhmKSYmIU0oZik/cD1yWzFdOlQoZik/cD1yWzBdOkEoZik/cD1yWzNdOk0oZikmJihwPXJbMl0pLHY9MDt2PGUuZWRnZXBhdGhzLmxlbmd0aDt2Kyspe3ZhciBDPWUuZWRnZXBhdGhzW3ZdWzBdO01hdGguYWJzKGZbMF0tcFswXSk8Xz9NYXRoLmFicyhmWzBdLUNbMF0pPF8mJihDWzFdLWZbMV0pKihwWzFdLUNbMV0pPj0wJiYocD1DLGc9dik6TWF0aC5hYnMoZlsxXS1wWzFdKTx3P01hdGguYWJzKGZbMV0tQ1sxXSk8dyYmKENbMF0tZlswXSkqKHBbMF0tQ1swXSk+PTAmJihwPUMsZz12KTphLmxvZyhcImVuZHB0IHRvIG5ld2VuZHB0IGlzIG5vdCB2ZXJ0LiBvciBob3J6LlwiLGYscCxDKX1pZihnPj0wKWJyZWFrO3krPVMoZixwKSxmPXB9aWYoZz09PWUuZWRnZXBhdGhzLmxlbmd0aCl7YS5sb2coXCJ1bmNsb3NlZCBwZXJpbWV0ZXIgcGF0aFwiKTticmVha31oPWcsKGI9LTE9PT14LmluZGV4T2YoaCkpJiYoaD14WzBdLHkrPVMoZixwKStcIlpcIixmPW51bGwpfWZvcihoPTA7aDxlLnBhdGhzLmxlbmd0aDtoKyspeSs9bi5zbW9vdGhjbG9zZWQoZS5wYXRoc1toXS5tYXAobyksZS5zbW9vdGhpbmcpO3JldHVybiB5fX0se1wiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vY2FycGV0L2F4aXNfYWxpZ25lZF9saW5lXCI6ODgxfV0sOTQ2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxzLGwsYyx1O2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe2ZvcihvPShhPXRbcl0pLnBlZGdlcGF0aHM9W10scz1hLnBwYXRocz1bXSxuPTA7bjxhLmVkZ2VwYXRocy5sZW5ndGg7bisrKXtmb3IodT1hLmVkZ2VwYXRoc1tuXSxsPVtdLGk9MDtpPHUubGVuZ3RoO2krKylsW2ldPWUodVtpXSk7by5wdXNoKGwpfWZvcihuPTA7bjxhLnBhdGhzLmxlbmd0aDtuKyspe2Zvcih1PWEucGF0aHNbbl0sYz1bXSxpPTA7aTx1Lmxlbmd0aDtpKyspY1tpXT1lKHVbaV0pO3MucHVzaChjKX19fX0se31dLDk0NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi9jYXJwZXQvbWFwXzFkX2FycmF5XCIpLGE9dChcIi4uL2NhcnBldC9tYWtlcGF0aFwiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIikscz10KFwiLi4vLi4vbGliXCIpLGw9dChcIi4uL2NvbnRvdXIvbWFrZV9jcm9zc2luZ3NcIiksYz10KFwiLi4vY29udG91ci9maW5kX2FsbF9wYXRoc1wiKSx1PXQoXCIuLi9jb250b3VyL3Bsb3RcIiksaD10KFwiLi4vY29udG91ci9jb25zdGFudHNcIiksZj10KFwiLi4vY29udG91ci9jb252ZXJ0X3RvX2NvbnN0cmFpbnRzXCIpLHA9dChcIi4vam9pbl9hbGxfcGF0aHNcIiksZD10KFwiLi4vY29udG91ci9lbXB0eV9wYXRoaW5mb1wiKSxnPXQoXCIuL21hcF9wYXRoaW5mb1wiKSx2PXQoXCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkXCIpLG09dChcIi4uL2NvbnRvdXIvY2xvc2VfYm91bmRhcmllc1wiKTtmdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj10LmdldFBvaW50QXRMZW5ndGgoZSksaT10LmdldFBvaW50QXRMZW5ndGgociksYT1pLngtbi54LG89aS55LW4ueSxzPU1hdGguc3FydChhKmErbypvKTtyZXR1cm5bYS9zLG8vc119ZnVuY3Rpb24geCh0KXt2YXIgZT1NYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSk7cmV0dXJuW3RbMF0vZSx0WzFdL2VdfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj1NYXRoLmFicyh0WzBdKmVbMF0rdFsxXSplWzFdKTtyZXR1cm4gTWF0aC5zcXJ0KDEtcipyKS9yfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixfKXt2YXIgdz1lLnhheGlzLGs9ZS55YXhpcztzLm1ha2VUcmFjZUdyb3VwcyhfLHIsXCJjb250b3VyXCIpLmVhY2goZnVuY3Rpb24ocil7dmFyIF89bi5zZWxlY3QodGhpcyksQT1yWzBdLFQ9QS50cmFjZSxNPVQuX2NhcnBldFRyYWNlPXYodCxUKSxTPXQuY2FsY2RhdGFbTS5pbmRleF1bMF07aWYoTS52aXNpYmxlJiZcImxlZ2VuZG9ubHlcIiE9PU0udmlzaWJsZSl7dmFyIEU9QS5hLEM9QS5iLEw9VC5jb250b3Vycyx6PWQoTCxlLEEpLE89XCJjb25zdHJhaW50XCI9PT1MLnR5cGUsST1MLl9vcGVyYXRpb24sRD1PP1wiPVwiPT09ST9cImxpbmVzXCI6XCJmaWxsXCI6TC5jb2xvcmluZyxQPVtbRVswXSxDW0MubGVuZ3RoLTFdXSxbRVtFLmxlbmd0aC0xXSxDW0MubGVuZ3RoLTFdXSxbRVtFLmxlbmd0aC0xXSxDWzBdXSxbRVswXSxDWzBdXV07bCh6KTt2YXIgUj0xZS04KihFW0UubGVuZ3RoLTFdLUVbMF0pLEY9MWUtOCooQ1tDLmxlbmd0aC0xXS1DWzBdKTtjKHosUixGKTt2YXIgQixOLGosVixVPXo7XCJjb25zdHJhaW50XCI9PT1MLnR5cGUmJihVPWYoeixJKSxtKFUsSSxQLFQpKSxnKHosRyk7dmFyIHE9W107Zm9yKFY9Uy5jbGlwc2VnbWVudHMubGVuZ3RoLTE7Vj49MDtWLS0pQj1TLmNsaXBzZWdtZW50c1tWXSxOPWkoW10sQi54LHcuYzJwKSxqPWkoW10sQi55LGsuYzJwKSxOLnJldmVyc2UoKSxqLnJldmVyc2UoKSxxLnB1c2goYShOLGosQi5iaWN1YmljKSk7dmFyIEg9XCJNXCIrcS5qb2luKFwiTFwiKStcIlpcIjshZnVuY3Rpb24odCxlLHIsbixvLGwpe3ZhciBjLHUsaCxmLHA9cy5lbnN1cmVTaW5nbGUodCxcImdcIixcImNvbnRvdXJiZ1wiKS5zZWxlY3RBbGwoXCJwYXRoXCIpLmRhdGEoXCJmaWxsXCIhPT1sfHxvP1tdOlswXSk7cC5lbnRlcigpLmFwcGVuZChcInBhdGhcIikscC5leGl0KCkucmVtb3ZlKCk7dmFyIGQ9W107Zm9yKGY9MDtmPGUubGVuZ3RoO2YrKyljPWVbZl0sdT1pKFtdLGMueCxyLmMycCksaD1pKFtdLGMueSxuLmMycCksZC5wdXNoKGEodSxoLGMuYmljdWJpYykpO3AuYXR0cihcImRcIixcIk1cIitkLmpvaW4oXCJMXCIpK1wiWlwiKS5zdHlsZShcInN0cm9rZVwiLFwibm9uZVwiKX0oXyxTLmNsaXBzZWdtZW50cyx3LGssTyxEKSxmdW5jdGlvbih0LGUscixpLGEsbyxsLGMsdSxoLGYpe3ZhciBkPXMuZW5zdXJlU2luZ2xlKGUsXCJnXCIsXCJjb250b3VyZmlsbFwiKS5zZWxlY3RBbGwoXCJwYXRoXCIpLmRhdGEoXCJmaWxsXCI9PT1oP2E6W10pO2QuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLGQuZXhpdCgpLnJlbW92ZSgpLGQuZWFjaChmdW5jdGlvbihlKXt2YXIgYT1wKHQsZSxvLGwsYyx1LHIsaSk7ZS5wcmVmaXhCb3VuZGFyeSYmKGE9ZithKSxhP24uc2VsZWN0KHRoaXMpLmF0dHIoXCJkXCIsYSkuc3R5bGUoXCJzdHJva2VcIixcIm5vbmVcIik6bi5zZWxlY3QodGhpcykucmVtb3ZlKCl9KX0oVCxfLHcsayxVLFAsRyxNLFMsRCxIKSxmdW5jdGlvbih0LGUscixpLGEsbCxjKXt2YXIgZj1zLmVuc3VyZVNpbmdsZSh0LFwiZ1wiLFwiY29udG91cmxpbmVzXCIpLHA9ITEhPT1hLnNob3dsaW5lcyxkPWEuc2hvd2xhYmVscyxnPXAmJmQsdj11LmNyZWF0ZUxpbmVzKGYscHx8ZCxlKSxtPXUuY3JlYXRlTGluZUNsaXAoZixnLHIsaS50cmFjZS51aWQpLF89dC5zZWxlY3RBbGwoXCJnLmNvbnRvdXJsYWJlbHNcIikuZGF0YShkP1swXTpbXSk7aWYoXy5leGl0KCkucmVtb3ZlKCksXy5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcImNvbnRvdXJsYWJlbHNcIiwhMCksZCl7dmFyIHc9bC54YXhpcyxrPWwueWF4aXMsQT13Ll9sZW5ndGgsVD1rLl9sZW5ndGgsTT1bW1swLDBdLFtBLDBdLFtBLFRdLFswLFRdXV0sUz1bXTtzLmNsZWFyTG9jYXRpb25DYWNoZSgpO3ZhciBFPXUubGFiZWxGb3JtYXR0ZXIoYSxpLnQuY2Isci5fZnVsbExheW91dCksQz1vLnRlc3Rlci5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJkYXRhLW5vdGV4XCIsMSkuY2FsbChvLmZvbnQsYS5sYWJlbGZvbnQpLEw9e2xlZnQ6MCxyaWdodDpBLGNlbnRlcjpBLzIsdG9wOjAsYm90dG9tOlQsbWlkZGxlOlQvMn0sej1NYXRoLnNxcnQoQSpBK1QqVCksTz1oLkxBQkVMRElTVEFOQ0Uqei9NYXRoLm1heCgxLGUubGVuZ3RoL2guTEFCRUxJTkNSRUFTRSk7di5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXUuY2FsY1RleHRPcHRzKHQubGV2ZWwsRSxDLHIpO24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbChcInBhdGhcIikuZWFjaChmdW5jdGlvbihyKXt2YXIgbj1zLmdldFZpc2libGVTZWdtZW50KHRoaXMsTCxlLmhlaWdodC8yKTtpZihuJiYoZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbyxzPTA7czxyLnBlZGdlcGF0aHMubGVuZ3RoO3MrKyllPT09ci5wZWRnZXBhdGhzW3NdJiYobz1yLmVkZ2VwYXRoc1tzXSk7aWYoIW8pcmV0dXJuO3ZhciBsPWkuYVswXSxjPWkuYVtpLmEubGVuZ3RoLTFdLHU9aS5iWzBdLGg9aS5iW2kuYi5sZW5ndGgtMV07ZnVuY3Rpb24gZih0LGUpe3ZhciByLG49MDtyZXR1cm4oTWF0aC5hYnModFswXS1sKTwuMXx8TWF0aC5hYnModFswXS1jKTwuMSkmJihyPXgoaS5keHlkYl9yb3VnaCh0WzBdLHRbMV0sLjEpKSxuPU1hdGgubWF4KG4sYSpiKGUscikvMikpLChNYXRoLmFicyh0WzFdLXUpPC4xfHxNYXRoLmFicyh0WzFdLWgpPC4xKSYmKHI9eChpLmR4eWRhX3JvdWdoKHRbMF0sdFsxXSwuMSkpLG49TWF0aC5tYXgobixhKmIoZSxyKS8yKSksbn12YXIgcD15KHQsMCwxKSxkPXkodCxuLnRvdGFsLG4udG90YWwtMSksZz1mKG9bMF0scCksdj1uLnRvdGFsLWYob1tvLmxlbmd0aC0xXSxkKTtuLm1pbjxnJiYobi5taW49Zyk7bi5tYXg+diYmKG4ubWF4PXYpO24ubGVuPW4ubWF4LW4ubWlufSh0aGlzLHIsdCxuLGMsZS5oZWlnaHQpLCEobi5sZW48KGUud2lkdGgrZS5oZWlnaHQpKmguTEFCRUxNSU4pKSlmb3IodmFyIGk9TWF0aC5taW4oTWF0aC5jZWlsKG4ubGVuL08pLGguTEFCRUxNQVgpLGE9MDthPGk7YSsrKXt2YXIgbz11LmZpbmRCZXN0VGV4dExvY2F0aW9uKHRoaXMsbixlLFMsTCk7aWYoIW8pYnJlYWs7dS5hZGRMYWJlbERhdGEobyxlLFMsTSl9fSl9KSxDLnJlbW92ZSgpLHUuZHJhd0xhYmVscyhfLFMscixtLGc/TTpudWxsKX1kJiYhcCYmdi5yZW1vdmUoKX0oXyx6LHQsQSxMLGUsTSksby5zZXRDbGlwVXJsKF8sTS5fY2xpcFBhdGhJZCx0KX1mdW5jdGlvbiBHKHQpe3ZhciBlPU0uYWIyeHkodFswXSx0WzFdLCEwKTtyZXR1cm5bdy5jMnAoZVswXSksay5jMnAoZVsxXSldfX0pfX0se1wiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZFwiOjg5NyxcIi4uL2NhcnBldC9tYWtlcGF0aFwiOjg5OCxcIi4uL2NhcnBldC9tYXBfMWRfYXJyYXlcIjo4OTksXCIuLi9jb250b3VyL2Nsb3NlX2JvdW5kYXJpZXNcIjo5MjEsXCIuLi9jb250b3VyL2NvbnN0YW50c1wiOjkyMyxcIi4uL2NvbnRvdXIvY29udmVydF90b19jb25zdHJhaW50c1wiOjkyNyxcIi4uL2NvbnRvdXIvZW1wdHlfcGF0aGluZm9cIjo5MjksXCIuLi9jb250b3VyL2ZpbmRfYWxsX3BhdGhzXCI6OTMxLFwiLi4vY29udG91ci9tYWtlX2Nyb3NzaW5nc1wiOjkzNixcIi4uL2NvbnRvdXIvcGxvdFwiOjkzNyxcIi4vam9pbl9hbGxfcGF0aHNcIjo5NDUsXCIuL21hcF9wYXRoaW5mb1wiOjk0NixkMzoxNTV9XSw5NDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXMoe3o6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHg6cyh7fSxuLngse2ltcGxpZWRFZGl0czp7eHR5cGU6XCJhcnJheVwifX0pLHgwOnMoe30sbi54MCx7aW1wbGllZEVkaXRzOnt4dHlwZTpcInNjYWxlZFwifX0pLGR4OnMoe30sbi5keCx7aW1wbGllZEVkaXRzOnt4dHlwZTpcInNjYWxlZFwifX0pLHk6cyh7fSxuLnkse2ltcGxpZWRFZGl0czp7eXR5cGU6XCJhcnJheVwifX0pLHkwOnMoe30sbi55MCx7aW1wbGllZEVkaXRzOnt5dHlwZTpcInNjYWxlZFwifX0pLGR5OnMoe30sbi5keSx7aW1wbGllZEVkaXRzOnt5dHlwZTpcInNjYWxlZFwifX0pLHRleHQ6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGhvdmVydGV4dDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sdHJhbnNwb3NlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEsZWRpdFR5cGU6XCJjYWxjXCJ9LHh0eXBlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhcnJheVwiLFwic2NhbGVkXCJdLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx5dHlwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYXJyYXlcIixcInNjYWxlZFwiXSxlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0senNtb290aDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiZmFzdFwiLFwiYmVzdFwiLCExXSxkZmx0OiExLGVkaXRUeXBlOlwiY2FsY1wifSxjb25uZWN0Z2Fwczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwiY2FsY1wifSx4Z2FwOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLG1pbjowLGVkaXRUeXBlOlwicGxvdFwifSx5Z2FwOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLG1pbjowLGVkaXRUeXBlOlwicGxvdFwifSx6aG92ZXJmb3JtYXQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsZWRpdFR5cGU6XCJub25lXCJ9LGhvdmVydGVtcGxhdGU6aSgpfSx7dHJhbnNmb3Jtczp2b2lkIDB9LGEoXCJcIix7Y0xldHRlcjpcInpcIixhdXRvQ29sb3JEZmx0OiExfSkse2NvbG9yYmFyOm99KX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCI6NTc5LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIjo1ODUsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIjoxMDUyfV0sOTQ5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxvPXQoXCIuLi9oaXN0b2dyYW0yZC9jYWxjXCIpLHM9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCIpLGw9dChcIi4vY29udmVydF9jb2x1bW5feHl6XCIpLGM9dChcIi4vY2xlYW5fMmRfYXJyYXlcIiksdT10KFwiLi9pbnRlcnAyZFwiKSxoPXQoXCIuL2ZpbmRfZW1wdGllc1wiKSxmPXQoXCIuL21ha2VfYm91bmRfYXJyYXlcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIscCxkLGcsdixtLHkseCxiLF89YS5nZXRGcm9tSWQodCxlLnhheGlzfHxcInhcIiksdz1hLmdldEZyb21JZCh0LGUueWF4aXN8fFwieVwiKSxrPW4udHJhY2VJcyhlLFwiY29udG91clwiKSxBPW4udHJhY2VJcyhlLFwiaGlzdG9ncmFtXCIpLFQ9bi50cmFjZUlzKGUsXCJnbDJkXCIpLE09az9cImJlc3RcIjplLnpzbW9vdGg7aWYoXy5fbWluRHRpY2s9MCx3Ll9taW5EdGljaz0wLEEpcj0oYj1vKHQsZSkpLngscD1iLngwLGQ9Yi5keCxnPWIueSx2PWIueTAsbT1iLmR5LHk9Yi56O2Vsc2V7dmFyIFM9ZS56O2kuaXNBcnJheTFEKFMpPyhsKGUsXyx3LFwieFwiLFwieVwiLFtcInpcIl0pLHI9ZS5feCxnPWUuX3ksUz1lLl96KToocj1lLng/Xy5tYWtlQ2FsY2RhdGEoZSxcInhcIik6W10sZz1lLnk/dy5tYWtlQ2FsY2RhdGEoZSxcInlcIik6W10pLHA9ZS54MCxkPWUuZHgsdj1lLnkwLG09ZS5keSx5PWMoUyxlLnRyYW5zcG9zZSksKGt8fGUuY29ubmVjdGdhcHMpJiYoZS5fZW1wdHlwb2ludHM9aCh5KSx1KHksZS5fZW1wdHlwb2ludHMpKX1mdW5jdGlvbiBFKHQpe009ZS5faW5wdXQuenNtb290aD1lLnpzbW9vdGg9ITEsaS53YXJuKCdjYW5ub3QgdXNlIHpzbW9vdGg6IFwiZmFzdFwiOiAnK3QpfWlmKFwiZmFzdFwiPT09TSlpZihcImxvZ1wiPT09Xy50eXBlfHxcImxvZ1wiPT09dy50eXBlKUUoXCJsb2cgYXhpcyBmb3VuZFwiKTtlbHNlIGlmKCFBKXtpZihyLmxlbmd0aCl7dmFyIEM9KHJbci5sZW5ndGgtMV0tclswXSkvKHIubGVuZ3RoLTEpLEw9TWF0aC5hYnMoQy8xMDApO2Zvcih4PTA7eDxyLmxlbmd0aC0xO3grKylpZihNYXRoLmFicyhyW3grMV0tclt4XS1DKT5MKXtFKFwieCBzY2FsZSBpcyBub3QgbGluZWFyXCIpO2JyZWFrfX1pZihnLmxlbmd0aCYmXCJmYXN0XCI9PT1NKXt2YXIgej0oZ1tnLmxlbmd0aC0xXS1nWzBdKS8oZy5sZW5ndGgtMSksTz1NYXRoLmFicyh6LzEwMCk7Zm9yKHg9MDt4PGcubGVuZ3RoLTE7eCsrKWlmKE1hdGguYWJzKGdbeCsxXS1nW3hdLXopPk8pe0UoXCJ5IHNjYWxlIGlzIG5vdCBsaW5lYXJcIik7YnJlYWt9fX12YXIgST1pLm1heFJvd0xlbmd0aCh5KSxEPVwic2NhbGVkXCI9PT1lLnh0eXBlP1wiXCI6cixQPWYoZSxELHAsZCxJLF8pLFI9XCJzY2FsZWRcIj09PWUueXR5cGU/XCJcIjpnLEY9ZihlLFIsdixtLHkubGVuZ3RoLHcpO1R8fChlLl9leHRyZW1lc1tfLl9pZF09YS5maW5kRXh0cmVtZXMoXyxQKSxlLl9leHRyZW1lc1t3Ll9pZF09YS5maW5kRXh0cmVtZXModyxGKSk7dmFyIEI9e3g6UCx5OkYsejp5LHRleHQ6ZS5fdGV4dHx8ZS50ZXh0LGhvdmVydGV4dDplLl9ob3ZlcnRleHR8fGUuaG92ZXJ0ZXh0fTtpZihEJiZELmxlbmd0aD09PVAubGVuZ3RoLTEmJihCLnhDZW50ZXI9RCksUiYmUi5sZW5ndGg9PT1GLmxlbmd0aC0xJiYoQi55Q2VudGVyPVIpLEEmJihCLnhSYW5nZXM9Yi54UmFuZ2VzLEIueVJhbmdlcz1iLnlSYW5nZXMsQi5wdHM9Yi5wdHMpLGsmJlwiY29uc3RyYWludFwiPT09ZS5jb250b3Vycy50eXBlfHxzKHQsZSx7dmFsczp5LGNvbnRhaW5lclN0cjpcIlwiLGNMZXR0ZXI6XCJ6XCJ9KSxrJiZlLmNvbnRvdXJzJiZcImhlYXRtYXBcIj09PWUuY29udG91cnMuY29sb3Jpbmcpe3ZhciBOPXt0eXBlOlwiY29udG91clwiPT09ZS50eXBlP1wiaGVhdG1hcFwiOlwiaGlzdG9ncmFtMmRcIix4Y2FsZW5kYXI6ZS54Y2FsZW5kYXIseWNhbGVuZGFyOmUueWNhbGVuZGFyfTtCLnhmaWxsPWYoTixELHAsZCxJLF8pLEIueWZpbGw9ZihOLFIsdixtLHkubGVuZ3RoLHcpfXJldHVybltCXX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCI6NTg2LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL2hpc3RvZ3JhbTJkL2NhbGNcIjo5ODAsXCIuL2NsZWFuXzJkX2FycmF5XCI6OTUwLFwiLi9jb252ZXJ0X2NvbHVtbl94eXpcIjo5NTIsXCIuL2ZpbmRfZW1wdGllc1wiOjk1NCxcIi4vaW50ZXJwMmRcIjo5NTcsXCIuL21ha2VfYm91bmRfYXJyYXlcIjo5NTh9XSw5NTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLG8scyxsO2Z1bmN0aW9uIGModCl7aWYobih0KSlyZXR1cm4rdH1pZihlKXtmb3Iocj0wLHM9MDtzPHQubGVuZ3RoO3MrKylyPU1hdGgubWF4KHIsdFtzXS5sZW5ndGgpO2lmKDA9PT1yKXJldHVybiExO2E9ZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RofSxvPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtyXVtlXX19ZWxzZSByPXQubGVuZ3RoLGE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtlXS5sZW5ndGh9LG89ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0W2VdW3JdfTt2YXIgdT1uZXcgQXJyYXkocik7Zm9yKHM9MDtzPHI7cysrKWZvcihpPWEodCxzKSx1W3NdPW5ldyBBcnJheShpKSxsPTA7bDxpO2wrKyl1W3NdW2xdPWMobyh0LHMsbCkpO3JldHVybiB1fX0se1wiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw5NTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e21pbjpcInptaW5cIixtYXg6XCJ6bWF4XCJ9fSx7fV0sOTUyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxvLHMpe3ZhciBsLGMsdSxoLGY9dC5fbGVuZ3RoLHA9ZS5tYWtlQ2FsY2RhdGEodCxhKSxkPXIubWFrZUNhbGNkYXRhKHQsbyksZz10LnRleHQsdj12b2lkIDAhPT1nJiZuLmlzQXJyYXkxRChnKSxtPXQuaG92ZXJ0ZXh0LHk9dm9pZCAwIT09bSYmbi5pc0FycmF5MUQobSkseD1uLmRpc3RpbmN0VmFscyhwKSxiPXgudmFscyxfPW4uZGlzdGluY3RWYWxzKGQpLHc9Xy52YWxzLGs9W107Zm9yKGw9MDtsPHMubGVuZ3RoO2wrKylrW2xdPW4uaW5pdDJkQXJyYXkody5sZW5ndGgsYi5sZW5ndGgpO2Zvcih2JiYodT1uLmluaXQyZEFycmF5KHcubGVuZ3RoLGIubGVuZ3RoKSkseSYmKGg9bi5pbml0MmRBcnJheSh3Lmxlbmd0aCxiLmxlbmd0aCkpLGw9MDtsPGY7bCsrKWlmKHBbbF0hPT1pJiZkW2xdIT09aSl7dmFyIEE9bi5maW5kQmluKHBbbF0reC5taW5EaWZmLzIsYiksVD1uLmZpbmRCaW4oZFtsXStfLm1pbkRpZmYvMix3KTtmb3IoYz0wO2M8cy5sZW5ndGg7YysrKXt2YXIgTT10W3NbY11dO2tbY11bVF1bQV09TVtsXX12JiYodVtUXVtBXT1nW2xdKSx5JiYoaFtUXVtBXT1tW2xdKX1mb3IodFtcIl9cIithXT1iLHRbXCJfXCIrb109dyxjPTA7YzxzLmxlbmd0aDtjKyspdFtcIl9cIitzW2NdXT1rW2NdO3YmJih0Ll90ZXh0PXUpLHkmJih0Ll9ob3ZlcnRleHQ9aCl9fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vbGliXCI6NzAxfV0sOTUzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL3h5el9kZWZhdWx0c1wiKSxhPXQoXCIuL3N0eWxlX2RlZmF1bHRzXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiKSxzPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1pKHQsZSxjLGwpPyhjKFwidGV4dFwiKSxjKFwiaG92ZXJ0ZXh0XCIpLGMoXCJob3ZlcnRlbXBsYXRlXCIpLGEodCxlLGMsbCksYyhcImNvbm5lY3RnYXBzXCIsbi5pc0FycmF5MUQoZS56KSYmITEhPT1lLnpzbW9vdGgpLG8odCxlLGwsYyx7cHJlZml4OlwiXCIsY0xldHRlcjpcInpcIn0pKTplLnZpc2libGU9ITF9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIjo1ODgsXCIuLi8uLi9saWJcIjo3MDEsXCIuL2F0dHJpYnV0ZXNcIjo5NDgsXCIuL3N0eWxlX2RlZmF1bHRzXCI6OTYxLFwiLi94eXpfZGVmYXVsdHNcIjo5NjJ9XSw5NTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLm1heFJvd0xlbmd0aDtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixpLGEsbyxzLGwsYyx1PVtdLGg9e30sZj1bXSxwPXRbMF0sZD1bXSxnPVswLDAsMF0sdj1uKHQpO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspZm9yKGU9ZCxkPXAscD10W3IrMV18fFtdLGk9MDtpPHY7aSsrKXZvaWQgMD09PWRbaV0mJigocz0odm9pZCAwIT09ZFtpLTFdPzE6MCkrKHZvaWQgMCE9PWRbaSsxXT8xOjApKyh2b2lkIDAhPT1lW2ldPzE6MCkrKHZvaWQgMCE9PXBbaV0/MTowKSk/KDA9PT1yJiZzKyssMD09PWkmJnMrKyxyPT09dC5sZW5ndGgtMSYmcysrLGk9PT1kLmxlbmd0aC0xJiZzKyssczw0JiYoaFtbcixpXV09W3IsaSxzXSksdS5wdXNoKFtyLGksc10pKTpmLnB1c2goW3IsaV0pKTtmb3IoO2YubGVuZ3RoOyl7Zm9yKGw9e30sYz0hMSxvPWYubGVuZ3RoLTE7bz49MDtvLS0pKHM9KChoW1socj0oYT1mW29dKVswXSktMSxpPWFbMV1dXXx8ZylbMl0rKGhbW3IrMSxpXV18fGcpWzJdKyhoW1tyLGktMV1dfHxnKVsyXSsoaFtbcixpKzFdXXx8ZylbMl0pLzIwKSYmKGxbYV09W3IsaSxzXSxmLnNwbGljZShvLDEpLGM9ITApO2lmKCFjKXRocm93XCJmaW5kRW1wdGllcyBpdGVyYXRlZCB3aXRoIG5vIG5ldyBuZWlnaGJvcnNcIjtmb3IoYSBpbiBsKWhbYV09bFthXSx1LnB1c2gobFthXSl9cmV0dXJuIHUuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBlWzJdLXRbMl19KX19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDk1NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4XCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzLGwpe3ZhciBjLHUsaCxmLHA9dC5jZFswXSxkPXAudHJhY2UsZz10LnhhLHY9dC55YSxtPXAueCx5PXAueSx4PXAueixiPXAueENlbnRlcixfPXAueUNlbnRlcix3PXAuem1hc2ssaz1bZC56bWluLGQuem1heF0sQT1kLnpob3ZlcmZvcm1hdCxUPW0sTT15O2lmKCExIT09dC5pbmRleCl7dHJ5e2g9TWF0aC5yb3VuZCh0LmluZGV4WzFdKSxmPU1hdGgucm91bmQodC5pbmRleFswXSl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgaS5lcnJvcihcIkVycm9yIGhvdmVyaW5nIG9uIGhlYXRtYXAsIHBvaW50TnVtYmVyIG11c3QgYmUgW3Jvdyxjb2xdLCBmb3VuZDpcIix0LmluZGV4KX1pZihoPDB8fGg+PXhbMF0ubGVuZ3RofHxmPDB8fGY+eC5sZW5ndGgpcmV0dXJufWVsc2V7aWYobi5pbmJveChlLW1bMF0sZS1tW20ubGVuZ3RoLTFdLDApPjB8fG4uaW5ib3goci15WzBdLHIteVt5Lmxlbmd0aC0xXSwwKT4wKXJldHVybjtpZihsKXt2YXIgUztmb3IoVD1bMiptWzBdLW1bMV1dLFM9MTtTPG0ubGVuZ3RoO1MrKylULnB1c2goKG1bU10rbVtTLTFdKS8yKTtmb3IoVC5wdXNoKFsyKm1bbS5sZW5ndGgtMV0tbVttLmxlbmd0aC0yXV0pLE09WzIqeVswXS15WzFdXSxTPTE7Uzx5Lmxlbmd0aDtTKyspTS5wdXNoKCh5W1NdK3lbUy0xXSkvMik7TS5wdXNoKFsyKnlbeS5sZW5ndGgtMV0teVt5Lmxlbmd0aC0yXV0pfWg9TWF0aC5tYXgoMCxNYXRoLm1pbihULmxlbmd0aC0yLGkuZmluZEJpbihlLFQpKSksZj1NYXRoLm1heCgwLE1hdGgubWluKE0ubGVuZ3RoLTIsaS5maW5kQmluKHIsTSkpKX12YXIgRT1nLmMycChtW2hdKSxDPWcuYzJwKG1baCsxXSksTD12LmMycCh5W2ZdKSx6PXYuYzJwKHlbZisxXSk7bD8oQz1FLGM9bVtoXSx6PUwsdT15W2ZdKTooYz1iP2JbaF06KG1baF0rbVtoKzFdKS8yLHU9Xz9fW2ZdOih5W2ZdK3lbZisxXSkvMixkLnpzbW9vdGgmJihFPUM9Zy5jMnAoYyksTD16PXYuYzJwKHUpKSk7dmFyIE8sSSxEPXhbZl1baF07dyYmIXdbZl1baF0mJihEPXZvaWQgMCksQXJyYXkuaXNBcnJheShwLmhvdmVydGV4dCkmJkFycmF5LmlzQXJyYXkocC5ob3ZlcnRleHRbZl0pP089cC5ob3ZlcnRleHRbZl1baF06QXJyYXkuaXNBcnJheShwLnRleHQpJiZBcnJheS5pc0FycmF5KHAudGV4dFtmXSkmJihPPXAudGV4dFtmXVtoXSk7dmFyIFA9e3R5cGU6XCJsaW5lYXJcIixyYW5nZTprLGhvdmVyZm9ybWF0OkEsX3NlcGFyYXRvcnM6Zy5fc2VwYXJhdG9ycyxfbnVtRm9ybWF0OmcuX251bUZvcm1hdH07cmV0dXJuIEk9YS50aWNrVGV4dChQLEQsXCJob3ZlclwiKS50ZXh0LFtpLmV4dGVuZEZsYXQodCx7aW5kZXg6W2YsaF0sZGlzdGFuY2U6dC5tYXhIb3ZlckRpc3RhbmNlLHNwaWtlRGlzdGFuY2U6dC5tYXhTcGlrZURpc3RhbmNlLHgwOkUseDE6Qyx5MDpMLHkxOnoseExhYmVsVmFsOmMseUxhYmVsVmFsOnUsekxhYmVsVmFsOkQsekxhYmVsOkksdGV4dDpPfSldfX0se1wiLi4vLi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5fV0sOTU2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLnBsb3Q9dChcIi4vcGxvdFwiKSxuLmNvbG9yYmFyPXQoXCIuL2NvbG9yYmFyXCIpLG4uc3R5bGU9dChcIi4vc3R5bGVcIiksbi5ob3ZlclBvaW50cz10KFwiLi9ob3ZlclwiKSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cImhlYXRtYXBcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIiksbi5jYXRlZ29yaWVzPVtcImNhcnRlc2lhblwiLFwic3ZnXCIsXCIyZE1hcFwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiOjc2MCxcIi4vYXR0cmlidXRlc1wiOjk0OCxcIi4vY2FsY1wiOjk0OSxcIi4vY29sb3JiYXJcIjo5NTEsXCIuL2RlZmF1bHRzXCI6OTUzLFwiLi9ob3ZlclwiOjk1NSxcIi4vcGxvdFwiOjk1OSxcIi4vc3R5bGVcIjo5NjB9XSw5NTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9W1stMSwwXSxbMSwwXSxbMCwtMV0sWzAsMV1dO2Z1bmN0aW9uIGEodCl7cmV0dXJuLjUtLjI1Kk1hdGgubWluKDEsLjUqdCl9ZnVuY3Rpb24gbyh0LGUscil7dmFyIG4sYSxvLHMsbCxjLHUsaCxmLHAsZCxnLHYsbT0wO2ZvcihzPTA7czxlLmxlbmd0aDtzKyspe2ZvcihhPShuPWVbc10pWzBdLG89blsxXSxkPXRbYV1bb10scD0wLGY9MCxsPTA7bDw0O2wrKykodT10W2ErKGM9aVtsXSlbMF1dKSYmdm9pZCAwIT09KGg9dVtvK2NbMV1dKSYmKDA9PT1wP2c9dj1oOihnPU1hdGgubWluKGcsaCksdj1NYXRoLm1heCh2LGgpKSxmKysscCs9aCk7aWYoMD09PWYpdGhyb3dcIml0ZXJhdGVJbnRlcnAyZCBvcmRlciBpcyB3cm9uZzogbm8gZGVmaW5lZCBuZWlnaGJvcnNcIjt0W2FdW29dPXAvZix2b2lkIDA9PT1kP2Y8NCYmKG09MSk6KHRbYV1bb109KDErcikqdFthXVtvXS1yKmQsdj5nJiYobT1NYXRoLm1heChtLE1hdGguYWJzKHRbYV1bb10tZCkvKHYtZykpKSl9cmV0dXJuIG19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaT0xO2ZvcihvKHQsZSkscj0wO3I8ZS5sZW5ndGgmJiEoZVtyXVsyXTw0KTtyKyspO2ZvcihlPWUuc2xpY2Uocikscj0wO3I8MTAwJiZpPi4wMTtyKyspaT1vKHQsZSxhKGkpKTtyZXR1cm4gaT4uMDEmJm4ubG9nKFwiaW50ZXJwMmQgZGlkbid0IGNvbnZlcmdlIHF1aWNrbHlcIixpKSx0fX0se1wiLi4vLi4vbGliXCI6NzAxfV0sOTU4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uLy4uL2xpYlwiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8scyl7dmFyIGwsYyx1LGg9W10sZj1uLnRyYWNlSXModCxcImNvbnRvdXJcIikscD1uLnRyYWNlSXModCxcImhpc3RvZ3JhbVwiKSxkPW4udHJhY2VJcyh0LFwiZ2wyZFwiKTtpZihpKGUpJiZlLmxlbmd0aD4xJiYhcCYmXCJjYXRlZ29yeVwiIT09cy50eXBlKXt2YXIgZz1lLmxlbmd0aDtpZighKGc8PW8pKXJldHVybiBmP2Uuc2xpY2UoMCxvKTplLnNsaWNlKDAsbysxKTtpZihmfHxkKWg9ZS5zbGljZSgwLG8pO2Vsc2UgaWYoMT09PW8paD1bZVswXS0uNSxlWzBdKy41XTtlbHNle2ZvcihoPVsxLjUqZVswXS0uNSplWzFdXSx1PTE7dTxnO3UrKyloLnB1c2goLjUqKGVbdS0xXStlW3VdKSk7aC5wdXNoKDEuNSplW2ctMV0tLjUqZVtnLTJdKX1pZihnPG8pe3ZhciB2PWhbaC5sZW5ndGgtMV0sbT12LWhbaC5sZW5ndGgtMl07Zm9yKHU9Zzt1PG87dSsrKXYrPW0saC5wdXNoKHYpfX1lbHNle3ZhciB5PXRbcy5faWQuY2hhckF0KDApK1wiY2FsZW5kYXJcIl07Zm9yKGw9aShlKSYmMT09PWUubGVuZ3RoP2VbMF06dm9pZCAwPT09cj8wOnB8fFwiY2F0ZWdvcnlcIj09PXMudHlwZXx8XCJtdWx0aWNhdGVnb3J5XCI9PT1zLnR5cGU/cy5yMmMociwwLHkpOnMuZDJjKHIsMCx5KSxjPWF8fDEsdT1mfHxkPzA6LS41O3U8bzt1KyspaC5wdXNoKGwrYyp1KX1yZXR1cm4gaH19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5fV0sOTU5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcInRpbnljb2xvcjJcIiksYT10KFwiLi4vLi4vcmVnaXN0cnlcIiksbz10KFwiLi4vLi4vbGliXCIpLHM9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZVwiKSxsPXQoXCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiKTtmdW5jdGlvbiBjKHQsZSl7dmFyIHI9ZS5sZW5ndGgtMixuPW8uY29uc3RyYWluKG8uZmluZEJpbih0LGUpLDAsciksaT1lW25dLGE9ZVtuKzFdLHM9by5jb25zdHJhaW4obisodC1pKS8oYS1pKS0uNSwwLHIpLGw9TWF0aC5yb3VuZChzKSxjPU1hdGguYWJzKHMtbCk7cmV0dXJuIHMmJnMhPT1yJiZjP3tiaW4wOmwsZnJhYzpjLGJpbjE6TWF0aC5yb3VuZChsK2MvKHMtbCkpfTp7YmluMDpsLGJpbjE6bCxmcmFjOjB9fWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1lLmxlbmd0aC0xLG49by5jb25zdHJhaW4oby5maW5kQmluKHQsZSksMCxyKSxpPWVbbl0sYT0odC1pKS8oZVtuKzFdLWkpfHwwO3JldHVybiBhPD0wP3tiaW4wOm4sYmluMTpuLGZyYWM6MH06YTwuNT97YmluMDpuLGJpbjE6bisxLGZyYWM6YX06e2JpbjA6bisxLGJpbjE6bixmcmFjOjEtYX19ZnVuY3Rpb24gaCh0LGUscil7dFtlXT1yWzBdLHRbZSsxXT1yWzFdLHRbZSsyXT1yWzJdLHRbZSszXT1NYXRoLnJvdW5kKDI1NSpyWzNdKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsZil7dmFyIHA9ZS54YXhpcyxkPWUueWF4aXM7by5tYWtlVHJhY2VHcm91cHMoZixyLFwiaG1cIikuZWFjaChmdW5jdGlvbihlKXt2YXIgcixmLGcsdixtLHkseD1uLnNlbGVjdCh0aGlzKSxiPWVbMF0sXz1iLnRyYWNlLHc9Yi56LGs9Yi54LEE9Yi55LFQ9Yi54Q2VudGVyLE09Yi55Q2VudGVyLFM9YS50cmFjZUlzKF8sXCJjb250b3VyXCIpLEU9Uz9cImJlc3RcIjpfLnpzbW9vdGgsQz13Lmxlbmd0aCxMPW8ubWF4Um93TGVuZ3RoKHcpLHo9ITEsTz0hMTtmb3IoeT0wO3ZvaWQgMD09PXImJnk8ay5sZW5ndGgtMTspcj1wLmMycChrW3ldKSx5Kys7Zm9yKHk9ay5sZW5ndGgtMTt2b2lkIDA9PT1mJiZ5PjA7KWY9cC5jMnAoa1t5XSkseS0tO2ZvcihmPHImJihnPWYsZj1yLHI9Zyx6PSEwKSx5PTA7dm9pZCAwPT09diYmeTxBLmxlbmd0aC0xOyl2PWQuYzJwKEFbeV0pLHkrKztmb3IoeT1BLmxlbmd0aC0xO3ZvaWQgMD09PW0mJnk+MDspbT1kLmMycChBW3ldKSx5LS07aWYobTx2JiYoZz12LHY9bSxtPWcsTz0hMCksUyYmKFQ9ayxNPUEsaz1iLnhmaWxsLEE9Yi55ZmlsbCksXCJmYXN0XCIhPT1FKXt2YXIgST1cImJlc3RcIj09PUU/MDouNTtyPU1hdGgubWF4KC1JKnAuX2xlbmd0aCxyKSxmPU1hdGgubWluKCgxK0kpKnAuX2xlbmd0aCxmKSx2PU1hdGgubWF4KC1JKmQuX2xlbmd0aCx2KSxtPU1hdGgubWluKCgxK0kpKmQuX2xlbmd0aCxtKX12YXIgRD1NYXRoLnJvdW5kKGYtciksUD1NYXRoLnJvdW5kKG0tdik7aWYoRDw9MHx8UDw9MCl7eC5zZWxlY3RBbGwoXCJpbWFnZVwiKS5kYXRhKFtdKS5leGl0KCkucmVtb3ZlKCl9ZWxzZXt2YXIgUixGO1wiZmFzdFwiPT09RT8oUj1MLEY9Qyk6KFI9RCxGPVApO3ZhciBCPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7Qi53aWR0aD1SLEIuaGVpZ2h0PUY7dmFyIE4saixWPUIuZ2V0Q29udGV4dChcIjJkXCIpLFU9cy5tYWtlQ29sb3JTY2FsZUZ1bmMocy5leHRyYWN0U2NhbGUoXyx7Y0xldHRlcjpcInpcIn0pLHtub051bWVyaWNDaGVjazohMCxyZXR1cm5BcnJheTohMH0pO1wiZmFzdFwiPT09RT8oTj16P2Z1bmN0aW9uKHQpe3JldHVybiBMLTEtdH06by5pZGVudGl0eSxqPU8/ZnVuY3Rpb24odCl7cmV0dXJuIEMtMS10fTpvLmlkZW50aXR5KTooTj1mdW5jdGlvbih0KXtyZXR1cm4gby5jb25zdHJhaW4oTWF0aC5yb3VuZChwLmMycChrW3RdKS1yKSwwLEQpfSxqPWZ1bmN0aW9uKHQpe3JldHVybiBvLmNvbnN0cmFpbihNYXRoLnJvdW5kKGQuYzJwKEFbdF0pLXYpLDAsUCl9KTt2YXIgcSxILEcsWSxXLFg9aigwKSxaPVtYLFhdLCQ9ej8wOjEsSj1PPzA6MSxLPTAsUT0wLHR0PTAsZXQ9MDtpZihFKXt2YXIgcnQsbnQ9MDt0cnl7cnQ9bmV3IFVpbnQ4QXJyYXkoRCpQKjQpfWNhdGNoKHQpe3J0PW5ldyBBcnJheShEKlAqNCl9aWYoXCJiZXN0XCI9PT1FKXt2YXIgaXQsYXQsb3Qsc3Q9VHx8ayxsdD1NfHxBLGN0PW5ldyBBcnJheShzdC5sZW5ndGgpLHV0PW5ldyBBcnJheShsdC5sZW5ndGgpLGh0PW5ldyBBcnJheShEKSxmdD1UP3U6YyxwdD1NP3U6Yztmb3IoeT0wO3k8c3QubGVuZ3RoO3krKyljdFt5XT1NYXRoLnJvdW5kKHAuYzJwKHN0W3ldKS1yKTtmb3IoeT0wO3k8bHQubGVuZ3RoO3krKyl1dFt5XT1NYXRoLnJvdW5kKGQuYzJwKGx0W3ldKS12KTtmb3IoeT0wO3k8RDt5KyspaHRbeV09ZnQoeSxjdCk7Zm9yKEg9MDtIPFA7SCsrKWZvcihhdD13WyhpdD1wdChILHV0KSkuYmluMF0sb3Q9d1tpdC5iaW4xXSx5PTA7eTxEO3krKyxudCs9NCloKHJ0LG50LFc9QXQoYXQsb3QsaHRbeV0saXQpKX1lbHNlIGZvcihIPTA7SDxDO0grKylmb3IoWT13W0hdLFo9aihIKSx5PTA7eTxEO3krKylXPWt0KFlbeV0sMSksaChydCxudD00KihaKkQrTih5KSksVyk7dmFyIGR0PVYuY3JlYXRlSW1hZ2VEYXRhKEQsUCk7dHJ5e2R0LmRhdGEuc2V0KHJ0KX1jYXRjaCh0KXt2YXIgZ3Q9ZHQuZGF0YSx2dD1ndC5sZW5ndGg7Zm9yKEg9MDtIPHZ0O0grKylndFtIXT1ydFtIXX1WLnB1dEltYWdlRGF0YShkdCwwLDApfWVsc2V7dmFyIG10PV8ueGdhcCx5dD1fLnlnYXAseHQ9TWF0aC5mbG9vcihtdC8yKSxidD1NYXRoLmZsb29yKHl0LzIpO2ZvcihIPTA7SDxDO0grKylpZihZPXdbSF0sWi5yZXZlcnNlKCksWltKXT1qKEgrMSksWlswXSE9PVpbMV0mJnZvaWQgMCE9PVpbMF0mJnZvaWQgMCE9PVpbMV0pZm9yKHE9W0c9TigwKSxHXSx5PTA7eTxMO3krKylxLnJldmVyc2UoKSxxWyRdPU4oeSsxKSxxWzBdIT09cVsxXSYmdm9pZCAwIT09cVswXSYmdm9pZCAwIT09cVsxXSYmKFc9a3QoWVt5XSwocVsxXS1xWzBdKSooWlsxXS1aWzBdKSksVi5maWxsU3R5bGU9XCJyZ2JhKFwiK1cuam9pbihcIixcIikrXCIpXCIsVi5maWxsUmVjdChxWzBdK3h0LFpbMF0rYnQscVsxXS1xWzBdLW10LFpbMV0tWlswXS15dCkpfVE9TWF0aC5yb3VuZChRL0spLHR0PU1hdGgucm91bmQodHQvSyksZXQ9TWF0aC5yb3VuZChldC9LKTt2YXIgX3Q9aShcInJnYihcIitRK1wiLFwiK3R0K1wiLFwiK2V0K1wiKVwiKTt0Ll9obXBpeGNvdW50PSh0Ll9obXBpeGNvdW50fHwwKStLLHQuX2htbHVtY291bnQ9KHQuX2htbHVtY291bnR8fDApK0sqX3QuZ2V0THVtaW5hbmNlKCk7dmFyIHd0PXguc2VsZWN0QWxsKFwiaW1hZ2VcIikuZGF0YShlKTt3dC5lbnRlcigpLmFwcGVuZChcInN2ZzppbWFnZVwiKS5hdHRyKHt4bWxuczpsLnN2ZyxwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwibm9uZVwifSksd3QuYXR0cih7aGVpZ2h0OlAsd2lkdGg6RCx4OnIseTp2LFwieGxpbms6aHJlZlwiOkIudG9EYXRhVVJMKFwiaW1hZ2UvcG5nXCIpfSl9ZnVuY3Rpb24ga3QodCxlKXtpZih2b2lkIDAhPT10KXt2YXIgcj1VKHQpO3JldHVybiByWzBdPU1hdGgucm91bmQoclswXSksclsxXT1NYXRoLnJvdW5kKHJbMV0pLHJbMl09TWF0aC5yb3VuZChyWzJdKSxLKz1lLFErPXJbMF0qZSx0dCs9clsxXSplLGV0Kz1yWzJdKmUscn1yZXR1cm5bMCwwLDAsMF19ZnVuY3Rpb24gQXQodCxlLHIsbil7dmFyIGk9dFtyLmJpbjBdO2lmKHZvaWQgMD09PWkpcmV0dXJuIGt0KHZvaWQgMCwxKTt2YXIgYSxvPXRbci5iaW4xXSxzPWVbci5iaW4wXSxsPWVbci5iaW4xXSxjPW8taXx8MCx1PXMtaXx8MDtyZXR1cm4gYT12b2lkIDA9PT1vP3ZvaWQgMD09PWw/MDp2b2lkIDA9PT1zPzIqKGwtaSk6MiooMipsLXMtaSkvMzp2b2lkIDA9PT1sP3ZvaWQgMD09PXM/MDoyKigyKmktby1zKS8zOnZvaWQgMD09PXM/MiooMipsLW8taSkvMzpsK2ktby1zLGt0KGkrci5mcmFjKmMrbi5mcmFjKih1K3IuZnJhYyphKSl9fSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGVcIjo1OTAsXCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiOjY3OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LGQzOjE1NSx0aW55Y29sb3IyOjUyMn1dLDk2MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7bi5zZWxlY3QodCkuc2VsZWN0QWxsKFwiLmhtIGltYWdlXCIpLnN0eWxlKFwib3BhY2l0eVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnRyYWNlLm9wYWNpdHl9KX19LHtkMzoxNTV9XSw5NjE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyExPT09cihcInpzbW9vdGhcIikmJihyKFwieGdhcFwiKSxyKFwieWdhcFwiKSkscihcInpob3ZlcmZvcm1hdFwiKX19LHt9XSw5NjI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpO2Z1bmN0aW9uIG8odCxlKXt2YXIgcj1lKHQpO3JldHVyblwic2NhbGVkXCI9PT0ocj9lKHQrXCJ0eXBlXCIsXCJhcnJheVwiKTpcInNjYWxlZFwiKSYmKGUodCtcIjBcIiksZShcImRcIit0KSkscn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyxsLGMpe3ZhciB1LGgsZj1yKFwielwiKTtpZihsPWx8fFwieFwiLGM9Y3x8XCJ5XCIsdm9pZCAwPT09Znx8IWYubGVuZ3RoKXJldHVybiAwO2lmKGkuaXNBcnJheTFEKHQueikpe3U9cihsKSxoPXIoYyk7dmFyIHA9aS5taW5Sb3dMZW5ndGgodSksZD1pLm1pblJvd0xlbmd0aChoKTtpZigwPT09cHx8MD09PWQpcmV0dXJuIDA7ZS5fbGVuZ3RoPU1hdGgubWluKHAsZCxmLmxlbmd0aCl9ZWxzZXtpZih1PW8obCxyKSxoPW8oYyxyKSwhZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9ITAsYT0hMSxvPSExLHM9MDtzPHQubGVuZ3RoO3MrKyl7aWYoZT10W3NdLCFpLmlzQXJyYXlPclR5cGVkQXJyYXkoZSkpe3I9ITE7YnJlYWt9ZS5sZW5ndGg+MCYmKGE9ITApO2Zvcih2YXIgbD0wO2w8ZS5sZW5ndGg7bCsrKWlmKG4oZVtsXSkpe289ITA7YnJlYWt9fXJldHVybiByJiZhJiZvfShmKSlyZXR1cm4gMDtyKFwidHJhbnNwb3NlXCIpLGUuX2xlbmd0aD1udWxsfXJldHVybiBhLmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiaGFuZGxlVHJhY2VEZWZhdWx0c1wiKSh0LGUsW2wsY10scyksITB9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sOTYzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7Zm9yKHZhciBuPXQoXCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxzPXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsLGw9W1wielwiLFwieFwiLFwieDBcIixcImR4XCIsXCJ5XCIsXCJ5MFwiLFwiZHlcIixcInRleHRcIixcInRyYW5zcG9zZVwiLFwieHR5cGVcIixcInl0eXBlXCJdLGM9e30sdT0wO3U8bC5sZW5ndGg7dSsrKXt2YXIgaD1sW3VdO2NbaF09bltoXX1vKGMsaShcIlwiLHtjTGV0dGVyOlwielwiLGF1dG9Db2xvckRmbHQ6ITF9KSx7Y29sb3JiYXI6YX0pLGUuZXhwb3J0cz1zKGMsXCJjYWxjXCIsXCJuZXN0ZWRcIil9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXNcIjo5NDh9XSw5NjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2wtaGVhdG1hcDJkXCIpLGk9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGE9dChcIi4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIik7ZnVuY3Rpb24gbyh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMudHlwZT1cImhlYXRtYXBnbFwiLHRoaXMubmFtZT1cIlwiLHRoaXMuaG92ZXJpbmZvPVwiYWxsXCIsdGhpcy54RGF0YT1bXSx0aGlzLnlEYXRhPVtdLHRoaXMuekRhdGE9W10sdGhpcy50ZXh0TGFiZWxzPVtdLHRoaXMuaWRUb0luZGV4PVtdLHRoaXMuYm91bmRzPVswLDAsMCwwXSx0aGlzLm9wdGlvbnM9e3o6W10seDpbXSx5OltdLHNoYXBlOlswLDBdLGNvbG9yTGV2ZWxzOlswXSxjb2xvclZhbHVlczpbMCwwLDAsMV19LHRoaXMuaGVhdG1hcD1uKHQuZ2xwbG90LHRoaXMub3B0aW9ucyksdGhpcy5oZWF0bWFwLl90cmFjZT10aGlzfXZhciBzPW8ucHJvdG90eXBlO3MuaGFuZGxlUGljaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMscj1lLnNoYXBlLG49dC5wb2ludElkLGk9biVyWzBdLGE9TWF0aC5mbG9vcihuL3JbMF0pLG89bjtyZXR1cm57dHJhY2U6dGhpcyxkYXRhQ29vcmQ6dC5kYXRhQ29vcmQsdHJhY2VDb29yZDpbZS54W2ldLGUueVthXSxlLnpbb11dLHRleHRMYWJlbDp0aGlzLnRleHRMYWJlbHNbbl0sbmFtZTp0aGlzLm5hbWUscG9pbnRJbmRleDpbYSxpXSxob3ZlcmluZm86dGhpcy5ob3ZlcmluZm99fSxzLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF07dGhpcy5pbmRleD10LmluZGV4LHRoaXMubmFtZT10Lm5hbWUsdGhpcy5ob3ZlcmluZm89dC5ob3ZlcmluZm87dmFyIG49ci56O3RoaXMub3B0aW9ucy56PVtdLmNvbmNhdC5hcHBseShbXSxuKTt2YXIgbz1uWzBdLmxlbmd0aCxzPW4ubGVuZ3RoO3RoaXMub3B0aW9ucy5zaGFwZT1bbyxzXSx0aGlzLm9wdGlvbnMueD1yLngsdGhpcy5vcHRpb25zLnk9ci55O3ZhciBsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmNvbG9yc2NhbGUscj10LnptaW4sbj10LnptYXgsaT1lLmxlbmd0aCxvPW5ldyBBcnJheShpKSxzPW5ldyBBcnJheSg0KmkpLGw9MDtsPGk7bCsrKXt2YXIgYz1lW2xdLHU9YShjWzFdKTtvW2xdPXIrY1swXSoobi1yKTtmb3IodmFyIGg9MDtoPDQ7aCsrKXNbNCpsK2hdPXVbaF19cmV0dXJue2NvbG9yTGV2ZWxzOm8sY29sb3JWYWx1ZXM6c319KHQpO3RoaXMub3B0aW9ucy5jb2xvckxldmVscz1sLmNvbG9yTGV2ZWxzLHRoaXMub3B0aW9ucy5jb2xvclZhbHVlcz1sLmNvbG9yVmFsdWVzLHRoaXMudGV4dExhYmVscz1bXS5jb25jYXQuYXBwbHkoW10sdC50ZXh0KSx0aGlzLmhlYXRtYXAudXBkYXRlKHRoaXMub3B0aW9ucyk7dmFyIGM9dGhpcy5zY2VuZS54YXhpcyx1PXRoaXMuc2NlbmUueWF4aXM7dC5fZXh0cmVtZXNbYy5faWRdPWkuZmluZEV4dHJlbWVzKGMsci54KSx0Ll9leHRyZW1lc1t1Ll9pZF09aS5maW5kRXh0cmVtZXModSxyLnkpfSxzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmhlYXRtYXAuZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW5ldyBvKHQsZS51aWQpO3JldHVybiBuLnVwZGF0ZShlLHIpLG59fSx7XCIuLi8uLi9saWIvc3RyMnJnYmFycmF5XCI6NzI0LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCJnbC1oZWF0bWFwMmRcIjoyNDh9XSw5NjU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuLi9oZWF0bWFwL2RlZmF1bHRzXCIpLG4uY29sb3JiYXI9dChcIi4uL2hlYXRtYXAvY29sb3JiYXJcIiksbi5jYWxjPXQoXCIuLi9oZWF0bWFwL2NhbGNcIiksbi5wbG90PXQoXCIuL2NvbnZlcnRcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJoZWF0bWFwZ2xcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9nbDJkXCIpLG4uY2F0ZWdvcmllcz1bXCJnbFwiLFwiZ2wyZFwiLFwiMmRNYXBcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9nbDJkXCI6Nzg3LFwiLi4vaGVhdG1hcC9jYWxjXCI6OTQ5LFwiLi4vaGVhdG1hcC9jb2xvcmJhclwiOjk1MSxcIi4uL2hlYXRtYXAvZGVmYXVsdHNcIjo5NTMsXCIuL2F0dHJpYnV0ZXNcIjo5NjMsXCIuL2NvbnZlcnRcIjo5NjR9XSw5NjY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vYmFyL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIiksYT10KFwiLi9iaW5fYXR0cmlidXRlc1wiKSxvPXQoXCIuL2NvbnN0YW50c1wiKSxzPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXt4Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx5Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx0ZXh0OnMoe30sbi50ZXh0LHt9KSxob3ZlcnRleHQ6cyh7fSxuLmhvdmVydGV4dCx7fSksb3JpZW50YXRpb246bi5vcmllbnRhdGlvbixoaXN0ZnVuYzp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiY291bnRcIixcInN1bVwiLFwiYXZnXCIsXCJtaW5cIixcIm1heFwiXSxkZmx0OlwiY291bnRcIixlZGl0VHlwZTpcImNhbGNcIn0saGlzdG5vcm06e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcIlwiLFwicGVyY2VudFwiLFwicHJvYmFiaWxpdHlcIixcImRlbnNpdHlcIixcInByb2JhYmlsaXR5IGRlbnNpdHlcIl0sZGZsdDpcIlwiLGVkaXRUeXBlOlwiY2FsY1wifSxjdW11bGF0aXZlOntlbmFibGVkOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEsZWRpdFR5cGU6XCJjYWxjXCJ9LGRpcmVjdGlvbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiaW5jcmVhc2luZ1wiLFwiZGVjcmVhc2luZ1wiXSxkZmx0OlwiaW5jcmVhc2luZ1wiLGVkaXRUeXBlOlwiY2FsY1wifSxjdXJyZW50YmluOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJpbmNsdWRlXCIsXCJleGNsdWRlXCIsXCJoYWxmXCJdLGRmbHQ6XCJpbmNsdWRlXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGVkaXRUeXBlOlwiY2FsY1wifSxuYmluc3g6e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsbWluOjAsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifSx4YmluczphKFwieFwiLCEwKSxuYmluc3k6e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsbWluOjAsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifSx5YmluczphKFwieVwiLCEwKSxhdXRvYmlueDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0Om51bGwsZWRpdFR5cGU6XCJjYWxjXCJ9LGF1dG9iaW55Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6bnVsbCxlZGl0VHlwZTpcImNhbGNcIn0saG92ZXJ0ZW1wbGF0ZTppKHt9LHtrZXlzOm8uZXZlbnREYXRhS2V5c30pLG1hcmtlcjpuLm1hcmtlcixvZmZzZXRncm91cDpuLm9mZnNldGdyb3VwLGFsaWdubWVudGdyb3VwOm4uYWxpZ25tZW50Z3JvdXAsc2VsZWN0ZWQ6bi5zZWxlY3RlZCx1bnNlbGVjdGVkOm4udW5zZWxlY3RlZCxfZGVwcmVjYXRlZDp7YmFyZGlyOm4uX2RlcHJlY2F0ZWQuYmFyZGlyfX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uL2Jhci9hdHRyaWJ1dGVzXCI6ODM5LFwiLi9iaW5fYXR0cmlidXRlc1wiOjk2OCxcIi4vY29uc3RhbnRzXCI6OTcyfV0sOTY3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49MCxpPTA7aTxyO2krKyllW2ldPyh0W2ldLz1lW2ldLG4rPXRbaV0pOnRbaV09bnVsbDtyZXR1cm4gbn19LHt9XSw5Njg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm57c3RhcnQ6e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImNhbGNcIn0sZW5kOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHNpemU6e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9fX0se31dLDk2OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKTtlLmV4cG9ydHM9e2NvdW50OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gclt0XSsrLDF9LHN1bTpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1pW2VdO3JldHVybiBuKGEpPyhhPU51bWJlcihhKSxyW3RdKz1hLGEpOjB9LGF2ZzpmdW5jdGlvbih0LGUscixpLGEpe3ZhciBvPWlbZV07cmV0dXJuIG4obykmJihvPU51bWJlcihvKSxyW3RdKz1vLGFbdF0rKyksMH0sbWluOmZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPWlbZV07aWYobihhKSl7aWYoYT1OdW1iZXIoYSksIW4oclt0XSkpcmV0dXJuIHJbdF09YSxhO2lmKHJbdF0+YSl7dmFyIG89YS1yW3RdO3JldHVybiByW3RdPWEsb319cmV0dXJuIDB9LG1heDpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1pW2VdO2lmKG4oYSkpe2lmKGE9TnVtYmVyKGEpLCFuKHJbdF0pKXJldHVybiByW3RdPWEsYTtpZihyW3RdPGEpe3ZhciBvPWEtclt0XTtyZXR1cm4gclt0XT1hLG99fXJldHVybiAwfX19LHtcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sOTcwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIiksaT1uLk9ORUFWR1lFQVIsYT1uLk9ORUFWR01PTlRILG89bi5PTkVEQVkscz1uLk9ORUhPVVIsbD1uLk9ORU1JTixjPW4uT05FU0VDLHU9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLnRpY2tJbmNyZW1lbnQ7ZnVuY3Rpb24gaCh0LGUscixuKXtpZih0KmU8PTApcmV0dXJuIDEvMDtmb3IodmFyIGk9TWF0aC5hYnMoZS10KSxhPVwiZGF0ZVwiPT09ci50eXBlLG89ZihpLGEpLHM9MDtzPDEwO3MrKyl7dmFyIGw9Zig4MCpvLGEpO2lmKG89PT1sKWJyZWFrO2lmKCFwKGwsdCxlLGEscixuKSlicmVhaztvPWx9cmV0dXJuIG99ZnVuY3Rpb24gZih0LGUpe3JldHVybiBlJiZ0PmM/dD5vP3Q+MS4xKmk/aTp0PjEuMSphP2E6bzp0PnM/czp0Pmw/bDpjOk1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjEwKSl9ZnVuY3Rpb24gcCh0LGUscixuLGEscyl7aWYobiYmdD5vKXt2YXIgbD1kKGUsYSxzKSxjPWQocixhLHMpLHU9dD09PWk/MDoxO3JldHVybiBsW3VdIT09Y1t1XX1yZXR1cm4gTWF0aC5mbG9vcihyL3QpLU1hdGguZmxvb3IoZS90KT4uMX1mdW5jdGlvbiBkKHQsZSxyKXt2YXIgbj1lLmMyZCh0LGkscikuc3BsaXQoXCItXCIpO3JldHVyblwiXCI9PT1uWzBdJiYobi51bnNoaWZ0KCksblswXT1cIi1cIituWzBdKSxufWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGEpe3ZhciBzLGwsYz0tMS4xKmUsZj0tLjEqZSxwPXQtZixkPXJbMF0sZz1yWzFdLHY9TWF0aC5taW4oaChkK2YsZCtwLG4sYSksaChnK2YsZytwLG4sYSkpLG09TWF0aC5taW4oaChkK2MsZCtmLG4sYSksaChnK2MsZytmLG4sYSkpO2lmKHY+bSYmbTxNYXRoLmFicyhnLWQpLzRlMz8ocz12LGw9ITEpOihzPU1hdGgubWluKHYsbSksbD0hMCksXCJkYXRlXCI9PT1uLnR5cGUmJnM+byl7dmFyIHk9cz09PWk/MTo2LHg9cz09PWk/XCJNMTJcIjpcIk0xXCI7cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIG89bi5jMmQoZSxpLGEpLHM9by5pbmRleE9mKFwiLVwiLHkpO3M+MCYmKG89by5zdWJzdHIoMCxzKSk7dmFyIGM9bi5kMmMobywwLGEpO2lmKGM8ZSl7dmFyIGg9dShjLHgsITEsYSk7KGMraCkvMjxlK3QmJihjPWgpfXJldHVybiByJiZsP3UoYyx4LCEwLGEpOmN9fXJldHVybiBmdW5jdGlvbihlLHIpe3ZhciBuPXMqTWF0aC5yb3VuZChlL3MpO3JldHVybiBuK3MvMTA8ZSYmbisuOSpzPGUrdCYmKG4rPXMpLHImJmwmJihuLT1zKSxufX19LHtcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OX1dLDk3MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksbz10KFwiLi4vYmFyL2FycmF5c190b19jYWxjZGF0YVwiKSxzPXQoXCIuL2Jpbl9mdW5jdGlvbnNcIiksbD10KFwiLi9ub3JtX2Z1bmN0aW9uc1wiKSxjPXQoXCIuL2F2ZXJhZ2VcIiksdT10KFwiLi9iaW5fbGFiZWxfdmFsc1wiKTtmdW5jdGlvbiBoKHQsZSxyLG8scyl7dmFyIGwsYyx1LGYscCxkLGcsdj1vK1wiYmluc1wiLG09dC5fZnVsbExheW91dCx5PVwib3ZlcmxheVwiPT09bS5iYXJtb2RlLHg9XCJkYXRlXCI9PT1yLnR5cGU/ZnVuY3Rpb24odCl7cmV0dXJuIHR8fDA9PT10P2kuY2xlYW5EYXRlKHQsbnVsbCxyLmNhbGVuZGFyKTpudWxsfTpmdW5jdGlvbih0KXtyZXR1cm4gbih0KT9OdW1iZXIodCk6bnVsbH07ZnVuY3Rpb24gYih0LGUscil7ZVt0K1wiRm91bmRcIl0/KGVbdF09eChlW3RdKSxudWxsPT09ZVt0XSYmKGVbdF09clt0XSkpOihkW3RdPWVbdF09clt0XSxpLm5lc3RlZFByb3BlcnR5KGNbMF0sditcIi5cIit0KS5zZXQoclt0XSkpfXZhciBfPW0uX2hpc3RvZ3JhbUJpbk9wdHNbZS5fZ3JvdXBOYW1lXTtpZihlLl9hdXRvQmluRmluaXNoZWQpZGVsZXRlIGUuX2F1dG9CaW5GaW5pc2hlZDtlbHNle2M9Xy50cmFjZXM7dmFyIHc9Xy5zaXplRm91bmQsaz1bXTtkPWNbMF0uX2F1dG9CaW49e307dmFyIEE9ITA7Zm9yKGw9MDtsPGMubGVuZ3RoO2wrKykodT1jW2xdKS52aXNpYmxlJiYocD11Ll9wb3MwPXIubWFrZUNhbGNkYXRhKHUsbyksaz1pLmNvbmNhdChrLHApLGRlbGV0ZSB1Ll9hdXRvQmluRmluaXNoZWQsITA9PT1lLnZpc2libGUmJihBP0E9ITE6KGRlbGV0ZSB1Ll9hdXRvQmluLHUuX2F1dG9CaW5GaW5pc2hlZD0xKSkpO2Y9Y1swXVtvK1wiY2FsZW5kYXJcIl07dmFyIFQ9YS5hdXRvQmluKGsscixfLm5iaW5zLCExLGYsdyYmXy5zaXplKTtpZih5JiYwPT09VC5fZGF0YVNwYW4mJlwiY2F0ZWdvcnlcIiE9PXIudHlwZSYmXCJtdWx0aWNhdGVnb3J5XCIhPT1yLnR5cGUpe2lmKHMpcmV0dXJuW1QscCwhMF07VD1mdW5jdGlvbih0LGUscixuLGEpe3ZhciBvLHMsbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLnhheGlzLG49ZS55YXhpcyxpPWUub3JpZW50YXRpb24sYT1bXSxvPXQuX2Z1bGxEYXRhLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTtcImhpc3RvZ3JhbVwiPT09bC50eXBlJiYhMD09PWwudmlzaWJsZSYmbC5vcmllbnRhdGlvbj09PWkmJmwueGF4aXM9PT1yJiZsLnlheGlzPT09biYmYS5wdXNoKGwpfXJldHVybiBhfSh0LGUpLGM9ITEsdT0xLzAsZj1bZV07Zm9yKG89MDtvPGwubGVuZ3RoO28rKylpZigocz1sW29dKT09PWUpYz0hMDtlbHNlIGlmKGMpe3ZhciBwPWgodCxzLHIsbiwhMCksZD1wWzBdLGc9cFsyXTtzLl9hdXRvQmluRmluaXNoZWQ9MSxzLl9wb3MwPXBbMV0sZz9mLnB1c2gocyk6dT1NYXRoLm1pbih1LGQuc2l6ZSl9ZWxzZSB1PU1hdGgubWluKHUsc1thXS5zaXplKTt2YXIgdj1uZXcgQXJyYXkoZi5sZW5ndGgpO2ZvcihvPTA7bzxmLmxlbmd0aDtvKyspZm9yKHZhciBtPWZbb10uX3BvczAseT0wO3k8bS5sZW5ndGg7eSsrKWlmKHZvaWQgMCE9PW1beV0pe3Zbb109bVt5XTticmVha31pc0Zpbml0ZSh1KXx8KHU9aS5kaXN0aW5jdFZhbHModikubWluRGlmZik7Zm9yKG89MDtvPGYubGVuZ3RoO28rKyl7dmFyIHg9KHM9ZltvXSlbbitcImNhbGVuZGFyXCJdO3MuX2lucHV0W2FdPXNbYV09e3N0YXJ0OnIuYzJyKHZbb10tdS8yLDAseCksZW5kOnIuYzJyKHZbb10rdS8yLDAseCksc2l6ZTp1fX1yZXR1cm4gZVthXX0odCxlLHIsbyx2KX0oZz11LmN1bXVsYXRpdmUpLmVuYWJsZWQmJlwiaW5jbHVkZVwiIT09Zy5jdXJyZW50YmluJiYoXCJkZWNyZWFzaW5nXCI9PT1nLmRpcmVjdGlvbj9ULnN0YXJ0PXIuYzJyKGEudGlja0luY3JlbWVudChyLnIyYyhULnN0YXJ0LDAsZiksVC5zaXplLCEwLGYpKTpULmVuZD1yLmMycihhLnRpY2tJbmNyZW1lbnQoci5yMmMoVC5lbmQsMCxmKSxULnNpemUsITEsZikpKSxfLnNpemU9VC5zaXplLHd8fChkLnNpemU9VC5zaXplLGkubmVzdGVkUHJvcGVydHkoY1swXSx2K1wiLnNpemVcIikuc2V0KFQuc2l6ZSkpLGIoXCJzdGFydFwiLF8sVCksYihcImVuZFwiLF8sVCl9cD1lLl9wb3MwLGRlbGV0ZSBlLl9wb3MwO3ZhciBNPWUuX2lucHV0W3ZdfHx7fSxTPWkuZXh0ZW5kRmxhdCh7fSxfKSxFPV8uc3RhcnQsQz1yLnIybChNLnN0YXJ0KSxMPXZvaWQgMCE9PUM7aWYoKF8uc3RhcnRGb3VuZHx8TCkmJkMhPT1yLnIybChFKSl7dmFyIHo9TD9DOmkuYWdnTnVtcyhNYXRoLm1pbixudWxsLHApLE89e3R5cGU6XCJjYXRlZ29yeVwiPT09ci50eXBlfHxcIm11bHRpY2F0ZWdvcnlcIj09PXIudHlwZT9cImxpbmVhclwiOnIudHlwZSxyMmw6ci5yMmwsZHRpY2s6Xy5zaXplLHRpY2swOkUsY2FsZW5kYXI6ZixyYW5nZTpbeixhLnRpY2tJbmNyZW1lbnQoeixfLnNpemUsITEsZildLm1hcChyLmwycil9LEk9YS50aWNrRmlyc3QoTyk7ST5yLnIybCh6KSYmKEk9YS50aWNrSW5jcmVtZW50KEksXy5zaXplLCEwLGYpKSxTLnN0YXJ0PXIubDJyKEkpLEx8fGkubmVzdGVkUHJvcGVydHkoZSx2K1wiLnN0YXJ0XCIpLnNldChTLnN0YXJ0KX12YXIgRD1fLmVuZCxQPXIucjJsKE0uZW5kKSxSPXZvaWQgMCE9PVA7aWYoKF8uZW5kRm91bmR8fFIpJiZQIT09ci5yMmwoRCkpe3ZhciBGPVI/UDppLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxwKTtTLmVuZD1yLmwycihGKSxSfHxpLm5lc3RlZFByb3BlcnR5KGUsditcIi5zdGFydFwiKS5zZXQoUy5lbmQpfXZhciBCPVwiYXV0b2JpblwiK287cmV0dXJuITE9PT1lLl9pbnB1dFtCXSYmKGUuX2lucHV0W3ZdPWkuZXh0ZW5kRmxhdCh7fSxlW3ZdfHx7fSksZGVsZXRlIGUuX2lucHV0W0JdLGRlbGV0ZSBlW0JdKSxbUyxwXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZighMD09PWUudmlzaWJsZSl7dmFyIHIsZixwLGQsZz1bXSx2PVtdLG09YS5nZXRGcm9tSWQodCxcImhcIj09PWUub3JpZW50YXRpb24/ZS55YXhpc3x8XCJ5XCI6ZS54YXhpc3x8XCJ4XCIpLHk9XCJoXCI9PT1lLm9yaWVudGF0aW9uP1wieVwiOlwieFwiLHg9e3g6XCJ5XCIseTpcInhcIn1beV0sYj1lW3krXCJjYWxlbmRhclwiXSxfPWUuY3VtdWxhdGl2ZSx3PWgodCxlLG0seSksaz13WzBdLEE9d1sxXSxUPVwic3RyaW5nXCI9PXR5cGVvZiBrLnNpemUsTT1bXSxTPVQ/TTprLEU9W10sQz1bXSxMPVtdLHo9MCxPPWUuaGlzdG5vcm0sST1lLmhpc3RmdW5jLEQ9LTEhPT1PLmluZGV4T2YoXCJkZW5zaXR5XCIpO18uZW5hYmxlZCYmRCYmKE89Ty5yZXBsYWNlKC8gP2RlbnNpdHkkLyxcIlwiKSxEPSExKTt2YXIgUCxSPVwibWF4XCI9PT1JfHxcIm1pblwiPT09ST9udWxsOjAsRj1zLmNvdW50LEI9bFtPXSxOPSExLGo9ZnVuY3Rpb24odCl7cmV0dXJuIG0ucjJjKHQsMCxiKX07Zm9yKGkuaXNBcnJheU9yVHlwZWRBcnJheShlW3hdKSYmXCJjb3VudFwiIT09SSYmKFA9ZVt4XSxOPVwiYXZnXCI9PT1JLEY9c1tJXSkscj1qKGsuc3RhcnQpLHA9aihrLmVuZCkrKHItYS50aWNrSW5jcmVtZW50KHIsay5zaXplLCExLGIpKS8xZTY7cjxwJiZnLmxlbmd0aDwxZTYmJihmPWEudGlja0luY3JlbWVudChyLGsuc2l6ZSwhMSxiKSxnLnB1c2goKHIrZikvMiksdi5wdXNoKFIpLEwucHVzaChbXSksTS5wdXNoKHIpLEQmJkUucHVzaCgxLyhmLXIpKSxOJiZDLnB1c2goMCksIShmPD1yKSk7KXI9ZjtNLnB1c2gociksVHx8XCJkYXRlXCIhPT1tLnR5cGV8fChTPXtzdGFydDpqKFMuc3RhcnQpLGVuZDpqKFMuZW5kKSxzaXplOlMuc2l6ZX0pO3ZhciBWLFU9di5sZW5ndGgscT0hMCxIPTEvMCxHPTEvMCxZPXt9O2ZvcihyPTA7cjxBLmxlbmd0aDtyKyspe3ZhciBXPUFbcl07KGQ9aS5maW5kQmluKFcsUykpPj0wJiZkPFUmJih6Kz1GKGQscix2LFAsQykscSYmTFtkXS5sZW5ndGgmJlchPT1BW0xbZF1bMF1dJiYocT0hMSksTFtkXS5wdXNoKHIpLFlbcl09ZCxIPU1hdGgubWluKEgsVy1NW2RdKSxHPU1hdGgubWluKEcsTVtkKzFdLVcpKX1xfHwoVj11KEgsRyxNLG0sYikpLE4mJih6PWModixDKSksQiYmQih2LHosRSksXy5lbmFibGVkJiZmdW5jdGlvbih0LGUscil7dmFyIG4saSxhO2Z1bmN0aW9uIG8oZSl7YT10W2VdLHRbZV0vPTJ9ZnVuY3Rpb24gcyhlKXtpPXRbZV0sdFtlXT1hK2kvMixhKz1pfWlmKFwiaGFsZlwiPT09cilpZihcImluY3JlYXNpbmdcIj09PWUpZm9yKG8oMCksbj0xO248dC5sZW5ndGg7bisrKXMobik7ZWxzZSBmb3Iobyh0Lmxlbmd0aC0xKSxuPXQubGVuZ3RoLTI7bj49MDtuLS0pcyhuKTtlbHNlIGlmKFwiaW5jcmVhc2luZ1wiPT09ZSl7Zm9yKG49MTtuPHQubGVuZ3RoO24rKyl0W25dKz10W24tMV07XCJleGNsdWRlXCI9PT1yJiYodC51bnNoaWZ0KDApLHQucG9wKCkpfWVsc2V7Zm9yKG49dC5sZW5ndGgtMjtuPj0wO24tLSl0W25dKz10W24rMV07XCJleGNsdWRlXCI9PT1yJiYodC5wdXNoKDApLHQuc2hpZnQoKSl9fSh2LF8uZGlyZWN0aW9uLF8uY3VycmVudGJpbik7dmFyIFg9TWF0aC5taW4oZy5sZW5ndGgsdi5sZW5ndGgpLFo9W10sJD0wLEo9WC0xO2ZvcihyPTA7cjxYO3IrKylpZih2W3JdKXskPXI7YnJlYWt9Zm9yKHI9WC0xO3I+PSQ7ci0tKWlmKHZbcl0pe0o9cjticmVha31mb3Iocj0kO3I8PUo7cisrKWlmKG4oZ1tyXSkmJm4odltyXSkpe3ZhciBLPXtwOmdbcl0sczp2W3JdLGI6MH07Xy5lbmFibGVkfHwoSy5wdHM9TFtyXSxxP0sucGgwPUsucGgxPUxbcl0ubGVuZ3RoP0FbTFtyXVswXV06Z1tyXTooSy5waDA9VihNW3JdKSxLLnBoMT1WKE1bcisxXSwhMCkpKSxaLnB1c2goSyl9cmV0dXJuIDE9PT1aLmxlbmd0aCYmKFpbMF0ud2lkdGgxPWEudGlja0luY3JlbWVudChaWzBdLnAsay5zaXplLCExLGIpLVpbMF0ucCksbyhaLGUpLGkuaXNBcnJheU9yVHlwZWRBcnJheShlLnNlbGVjdGVkcG9pbnRzKSYmaS50YWdTZWxlY3RlZChaLGUsWSksWn19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL2Jhci9hcnJheXNfdG9fY2FsY2RhdGFcIjo4MzgsXCIuL2F2ZXJhZ2VcIjo5NjcsXCIuL2Jpbl9mdW5jdGlvbnNcIjo5NjksXCIuL2Jpbl9sYWJlbF92YWxzXCI6OTcwLFwiLi9ub3JtX2Z1bmN0aW9uc1wiOjk3OCxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sOTcyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtldmVudERhdGFLZXlzOltcImJpbk51bWJlclwiXX19LHt9XSw5NzM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9bi5uZXN0ZWRQcm9wZXJ0eSxhPXQoXCIuLi9iYXIvZGVmYXVsdHNcIikuaGFuZGxlR3JvdXBpbmdEZWZhdWx0cyxvPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIikuZ2V0QXhpc0dyb3VwLHM9dChcIi4vYXR0cmlidXRlc1wiKSxsPXt4Olt7YVN0cjpcInhiaW5zLnN0YXJ0XCIsbmFtZTpcInN0YXJ0XCJ9LHthU3RyOlwieGJpbnMuZW5kXCIsbmFtZTpcImVuZFwifSx7YVN0cjpcInhiaW5zLnNpemVcIixuYW1lOlwic2l6ZVwifSx7YVN0cjpcIm5iaW5zeFwiLG5hbWU6XCJuYmluc1wifV0seTpbe2FTdHI6XCJ5Ymlucy5zdGFydFwiLG5hbWU6XCJzdGFydFwifSx7YVN0cjpcInliaW5zLmVuZFwiLG5hbWU6XCJlbmRcIn0se2FTdHI6XCJ5Ymlucy5zaXplXCIsbmFtZTpcInNpemVcIn0se2FTdHI6XCJuYmluc3lcIixuYW1lOlwibmJpbnNcIn1dfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixjLHUsaCxmLHAsZCxnPWUuX2hpc3RvZ3JhbUJpbk9wdHM9e30sdj1cIm92ZXJsYXlcIj09PWUuYmFybW9kZTtmdW5jdGlvbiBtKHQpe3JldHVybiBuLmNvZXJjZSh1Ll9pbnB1dCx1LHMsdCl9Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKylcImhpc3RvZ3JhbVwiPT09KHU9dFtyXSkudHlwZSYmKGRlbGV0ZSB1Ll9hdXRvQmluRmluaXNoZWQsZj1cInZcIj09PXUub3JpZW50YXRpb24/XCJ4XCI6XCJ5XCIsKGQ9Z1twPXUuX2dyb3VwTmFtZT12P3UudWlkOm8oZSx1LnhheGlzKStvKGUsdS55YXhpcykrZl0pP2QudHJhY2VzLnB1c2godSk6ZD1nW3BdPXt0cmFjZXM6W3VdLGRpcmVjdGlvbjpmfSxhKHUuX2lucHV0LHUsZSxtKSk7Zm9yKHAgaW4gZyl7Zj0oZD1nW3BdKS5kaXJlY3Rpb247dmFyIHk9bFtmXTtmb3IoYz0wO2M8eS5sZW5ndGg7YysrKXt2YXIgeD15W2NdLGI9eC5uYW1lO2lmKFwibmJpbnNcIiE9PWJ8fCFkLnNpemVGb3VuZCl7dmFyIF89eC5hU3RyO2ZvcihyPTA7cjxkLnRyYWNlcy5sZW5ndGg7cisrKXtpZihoPSh1PWQudHJhY2VzW3JdKS5faW5wdXQsdm9pZCAwIT09aShoLF8pLmdldCgpKXtkW2JdPW0oXyksZFtiK1wiRm91bmRcIl09ITA7YnJlYWt9dmFyIHc9dS5fYXV0b0Jpbjt3JiZ3W2JdJiZpKHUsXykuc2V0KHdbYl0pfWlmKFwic3RhcnRcIj09PWJ8fFwiZW5kXCI9PT1iKWZvcig7cjxkLnRyYWNlcy5sZW5ndGg7cisrKW0oXywoKHU9ZC50cmFjZXNbcl0pLl9hdXRvQmlufHx7fSlbYl0pO1wibmJpbnNcIiE9PWJ8fGQuc2l6ZUZvdW5kfHxkLm5iaW5zRm91bmR8fCh1PWQudHJhY2VzWzBdLGRbYl09bShfKSl9fX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIjo3NTIsXCIuLi9iYXIvZGVmYXVsdHNcIjo4NDMsXCIuL2F0dHJpYnV0ZXNcIjo5NjZ9XSw5NzQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksbz10KFwiLi4vYmFyL3N0eWxlX2RlZmF1bHRzXCIpLHM9dChcIi4vYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7ZnVuY3Rpb24gYyhyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUscyxyLG4pfXZhciB1PWMoXCJ4XCIpLGg9YyhcInlcIik7YyhcImN1bXVsYXRpdmUuZW5hYmxlZFwiKSYmKGMoXCJjdW11bGF0aXZlLmRpcmVjdGlvblwiKSxjKFwiY3VtdWxhdGl2ZS5jdXJyZW50YmluXCIpKSxjKFwidGV4dFwiKSxjKFwiaG92ZXJ0ZXh0XCIpLGMoXCJob3ZlcnRlbXBsYXRlXCIpO3ZhciBmPWMoXCJvcmllbnRhdGlvblwiLGgmJiF1P1wiaFwiOlwidlwiKSxwPVwidlwiPT09Zj9cInhcIjpcInlcIixkPVwidlwiPT09Zj9cInlcIjpcInhcIixnPXUmJmg/TWF0aC5taW4oaS5taW5Sb3dMZW5ndGgodSkmJmkubWluUm93TGVuZ3RoKGgpKTppLm1pblJvd0xlbmd0aChlW3BdfHxbXSk7aWYoZyl7ZS5fbGVuZ3RoPWcsbi5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcImhhbmRsZVRyYWNlRGVmYXVsdHNcIikodCxlLFtcInhcIixcInlcIl0sbCksZVtkXSYmYyhcImhpc3RmdW5jXCIpLGMoXCJoaXN0bm9ybVwiKSxjKFwiYXV0b2JpblwiK3ApLG8odCxlLGMscixsKSxpLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxjKTt2YXIgdj0oZS5tYXJrZXIubGluZXx8e30pLmNvbG9yLG09bi5nZXRDb21wb25lbnRNZXRob2QoXCJlcnJvcmJhcnNcIixcInN1cHBseURlZmF1bHRzXCIpO20odCxlLHZ8fGEuZGVmYXVsdExpbmUse2F4aXM6XCJ5XCJ9KSxtKHQsZSx2fHxhLmRlZmF1bHRMaW5lLHtheGlzOlwieFwiLGluaGVyaXQ6XCJ5XCJ9KX1lbHNlIGUudmlzaWJsZT0hMX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL2Jhci9zdHlsZV9kZWZhdWx0c1wiOjg1MyxcIi4vYXR0cmlidXRlc1wiOjk2Nn1dLDk3NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe2lmKHQueD1cInhWYWxcImluIGU/ZS54VmFsOmUueCx0Lnk9XCJ5VmFsXCJpbiBlP2UueVZhbDplLnksXCJ6TGFiZWxWYWxcImluIGUmJih0Lno9ZS56TGFiZWxWYWwpLGUueGEmJih0LnhheGlzPWUueGEpLGUueWEmJih0LnlheGlzPWUueWEpLCEoci5jdW11bGF0aXZlfHx7fSkuZW5hYmxlZCl7dmFyIGEsbz1BcnJheS5pc0FycmF5KGkpP25bMF0ucHRzW2lbMF1dW2lbMV1dOm5baV0ucHRzO2lmKHQucG9pbnROdW1iZXJzPW8sdC5iaW5OdW1iZXI9dC5wb2ludE51bWJlcixkZWxldGUgdC5wb2ludE51bWJlcixkZWxldGUgdC5wb2ludEluZGV4LHIuX2luZGV4VG9Qb2ludHMpe2E9W107Zm9yKHZhciBzPTA7czxvLmxlbmd0aDtzKyspYT1hLmNvbmNhdChyLl9pbmRleFRvUG9pbnRzW29bc11dKX1lbHNlIGE9bzt0LnBvaW50SW5kaWNlcz1hfXJldHVybiB0fX0se31dLDk3NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9iYXIvaG92ZXJcIikuaG92ZXJQb2ludHMsaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIikuaG92ZXJMYWJlbFRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4odCxlLHIsYSk7aWYobyl7dmFyIHM9KHQ9b1swXSkuY2RbdC5pbmRleF0sbD10LmNkWzBdLnRyYWNlO2lmKCFsLmN1bXVsYXRpdmUuZW5hYmxlZCl7dmFyIGM9XCJoXCI9PT1sLm9yaWVudGF0aW9uP1wieVwiOlwieFwiO3RbYytcIkxhYmVsXCJdPWkodFtjK1wiYVwiXSxzLnBoMCxzLnBoMSl9cmV0dXJuIGwuaG92ZXJtcGxhdGUmJih0LmhvdmVydGVtcGxhdGU9bC5ob3ZlcnRlbXBsYXRlKSxvfX19LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vYmFyL2hvdmVyXCI6ODQ1fV0sOTc3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5sYXlvdXRBdHRyaWJ1dGVzPXQoXCIuLi9iYXIvbGF5b3V0X2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNyb3NzVHJhY2VEZWZhdWx0cz10KFwiLi9jcm9zc190cmFjZV9kZWZhdWx0c1wiKSxuLnN1cHBseUxheW91dERlZmF1bHRzPXQoXCIuLi9iYXIvbGF5b3V0X2RlZmF1bHRzXCIpLG4uY2FsYz10KFwiLi9jYWxjXCIpLG4uY3Jvc3NUcmFjZUNhbGM9dChcIi4uL2Jhci9jcm9zc190cmFjZV9jYWxjXCIpLmNyb3NzVHJhY2VDYWxjLG4ucGxvdD10KFwiLi4vYmFyL3Bsb3RcIiksbi5sYXllck5hbWU9XCJiYXJsYXllclwiLG4uc3R5bGU9dChcIi4uL2Jhci9zdHlsZVwiKS5zdHlsZSxuLnN0eWxlT25TZWxlY3Q9dChcIi4uL2Jhci9zdHlsZVwiKS5zdHlsZU9uU2VsZWN0LG4uY29sb3JiYXI9dChcIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyXCIpLG4uaG92ZXJQb2ludHM9dChcIi4vaG92ZXJcIiksbi5zZWxlY3RQb2ludHM9dChcIi4uL2Jhci9zZWxlY3RcIiksbi5ldmVudERhdGE9dChcIi4vZXZlbnRfZGF0YVwiKSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cImhpc3RvZ3JhbVwiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiKSxuLmNhdGVnb3JpZXM9W1wiY2FydGVzaWFuXCIsXCJzdmdcIixcImJhclwiLFwiaGlzdG9ncmFtXCIsXCJvcmllbnRlZFwiLFwiZXJyb3JCYXJzT0tcIixcInNob3dMZWdlbmRcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIjo3NjAsXCIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsY1wiOjg0MixcIi4uL2Jhci9sYXlvdXRfYXR0cmlidXRlc1wiOjg0NyxcIi4uL2Jhci9sYXlvdXRfZGVmYXVsdHNcIjo4NDgsXCIuLi9iYXIvcGxvdFwiOjg0OSxcIi4uL2Jhci9zZWxlY3RcIjo4NTAsXCIuLi9iYXIvc3R5bGVcIjo4NTIsXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiOjEwNzAsXCIuL2F0dHJpYnV0ZXNcIjo5NjYsXCIuL2NhbGNcIjo5NzEsXCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzXCI6OTczLFwiLi9kZWZhdWx0c1wiOjk3NCxcIi4vZXZlbnRfZGF0YVwiOjk3NSxcIi4vaG92ZXJcIjo5NzZ9XSw5Nzg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e3BlcmNlbnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj0xMDAvZSxpPTA7aTxyO2krKyl0W2ldKj1ufSxwcm9iYWJpbGl0eTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPTA7bjxyO24rKyl0W25dLz1lfSxkZW5zaXR5OmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQubGVuZ3RoO249bnx8MTtmb3IodmFyIGE9MDthPGk7YSsrKXRbYV0qPXJbYV0qbn0sXCJwcm9iYWJpbGl0eSBkZW5zaXR5XCI6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5sZW5ndGg7biYmKGUvPW4pO2Zvcih2YXIgYT0wO2E8aTthKyspdFthXSo9clthXS9lfX19LHt9XSw5Nzk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vaGlzdG9ncmFtL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vaGlzdG9ncmFtL2Jpbl9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uL2hlYXRtYXAvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxsPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIiksYz10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1jKHt4Om4ueCx5Om4ueSx6Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxtYXJrZXI6e2NvbG9yOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0saGlzdG5vcm06bi5oaXN0bm9ybSxoaXN0ZnVuYzpuLmhpc3RmdW5jLG5iaW5zeDpuLm5iaW5zeCx4YmluczppKFwieFwiKSxuYmluc3k6bi5uYmluc3kseWJpbnM6aShcInlcIiksYXV0b2Jpbng6bi5hdXRvYmlueCxhdXRvYmlueTpuLmF1dG9iaW55LHhnYXA6YS54Z2FwLHlnYXA6YS55Z2FwLHpzbW9vdGg6YS56c21vb3RoLHpob3ZlcmZvcm1hdDphLnpob3ZlcmZvcm1hdCxob3ZlcnRlbXBsYXRlOm8oe30se2tleXM6XCJ6XCJ9KX0scyhcIlwiLHtjTGV0dGVyOlwielwiLGF1dG9Db2xvckRmbHQ6ITF9KSx7Y29sb3JiYXI6bH0pfSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIjo1NzksXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uL2hlYXRtYXAvYXR0cmlidXRlc1wiOjk0OCxcIi4uL2hpc3RvZ3JhbS9hdHRyaWJ1dGVzXCI6OTY2LFwiLi4vaGlzdG9ncmFtL2Jpbl9hdHRyaWJ1dGVzXCI6OTY4fV0sOTgwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxhPXQoXCIuLi9oaXN0b2dyYW0vYmluX2Z1bmN0aW9uc1wiKSxvPXQoXCIuLi9oaXN0b2dyYW0vbm9ybV9mdW5jdGlvbnNcIikscz10KFwiLi4vaGlzdG9ncmFtL2F2ZXJhZ2VcIiksbD10KFwiLi4vaGlzdG9ncmFtL2Jpbl9sYWJlbF92YWxzXCIpO2Z1bmN0aW9uIGModCxlLHIsYSxvLHMsbCl7dmFyIGM9ZStcImJpbnNcIix1PXRbY107dXx8KHU9dFtjXT17fSk7dmFyIGg9dC5faW5wdXRbY118fHt9LGY9dC5fYXV0b0Jpbj17fTtoLnNpemV8fGRlbGV0ZSB1LnNpemUsdm9pZCAwPT09aC5zdGFydCYmZGVsZXRlIHUuc3RhcnQsdm9pZCAwPT09aC5lbmQmJmRlbGV0ZSB1LmVuZDt2YXIgcD0hdS5zaXplLGQ9dm9pZCAwPT09dS5zdGFydCxnPXZvaWQgMD09PXUuZW5kO2lmKHB8fGR8fGcpe3ZhciB2PWkuYXV0b0JpbihyLGEsdFtcIm5iaW5zXCIrZV0sXCIyZFwiLGwsdS5zaXplKTtcImhpc3RvZ3JhbTJkY29udG91clwiPT09dC50eXBlJiYoZCYmKHYuc3RhcnQ9cyhpLnRpY2tJbmNyZW1lbnQobyh2LnN0YXJ0KSx2LnNpemUsITAsbCkpKSxnJiYodi5lbmQ9cyhpLnRpY2tJbmNyZW1lbnQobyh2LmVuZCksdi5zaXplLCExLGwpKSkpLHAmJih1LnNpemU9Zi5zaXplPXYuc2l6ZSksZCYmKHUuc3RhcnQ9Zi5zdGFydD12LnN0YXJ0KSxnJiYodS5lbmQ9Zi5lbmQ9di5lbmQpfXZhciBtPVwiYXV0b2JpblwiK2U7ITE9PT10Ll9pbnB1dFttXSYmKHQuX2lucHV0W2NdPW4uZXh0ZW5kRmxhdCh7fSx1KSxkZWxldGUgdC5faW5wdXRbbV0sZGVsZXRlIHRbbV0pfWZ1bmN0aW9uIHUodCxlLHIsbil7dmFyIGksYT1uZXcgQXJyYXkodCk7aWYobilmb3IoaT0wO2k8dDtpKyspYVtpXT0xLyhlW2krMV0tZVtpXSk7ZWxzZXt2YXIgbz0xL3I7Zm9yKGk9MDtpPHQ7aSsrKWFbaV09b31yZXR1cm4gYX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJue3N0YXJ0OnQoZS5zdGFydCksZW5kOnQoZS5lbmQpLHNpemU6ZS5zaXplfX1mdW5jdGlvbiBmKHQsZSxyLG4saSxhKXt2YXIgbyxzPXQubGVuZ3RoLTEsYz1uZXcgQXJyYXkocyk7aWYoZSlmb3Iobz0wO288cztvKyspY1tvXT1bZVtvXSxlW29dXTtlbHNle3ZhciB1PWwocixuLHQsaSxhKTtmb3Iobz0wO288cztvKyspY1tvXT1bdSh0W29dKSx1KHRbbysxXSwhMCldfXJldHVybiBjfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGwscCxkLGc9aS5nZXRGcm9tSWQodCxlLnhheGlzfHxcInhcIiksdj1lLng/Zy5tYWtlQ2FsY2RhdGEoZSxcInhcIik6W10sbT1pLmdldEZyb21JZCh0LGUueWF4aXN8fFwieVwiKSx5PWUueT9tLm1ha2VDYWxjZGF0YShlLFwieVwiKTpbXSx4PWUueGNhbGVuZGFyLGI9ZS55Y2FsZW5kYXIsXz1mdW5jdGlvbih0KXtyZXR1cm4gZy5yMmModCwwLHgpfSx3PWZ1bmN0aW9uKHQpe3JldHVybiBtLnIyYyh0LDAsYil9LGs9ZnVuY3Rpb24odCl7cmV0dXJuIGcuYzJyKHQsMCx4KX0sQT1mdW5jdGlvbih0KXtyZXR1cm4gbS5jMnIodCwwLGIpfSxUPWUuX2xlbmd0aDt2Lmxlbmd0aD5UJiZ2LnNwbGljZShULHYubGVuZ3RoLVQpLHkubGVuZ3RoPlQmJnkuc3BsaWNlKFQseS5sZW5ndGgtVCksYyhlLFwieFwiLHYsZyxfLGsseCksYyhlLFwieVwiLHksbSx3LEEsYik7dmFyIE09W10sUz1bXSxFPVtdLEM9XCJzdHJpbmdcIj09dHlwZW9mIGUueGJpbnMuc2l6ZSxMPVwic3RyaW5nXCI9PXR5cGVvZiBlLnliaW5zLnNpemUsej1bXSxPPVtdLEk9Qz96OmUueGJpbnMsRD1MP086ZS55YmlucyxQPTAsUj1bXSxGPVtdLEI9ZS5oaXN0bm9ybSxOPWUuaGlzdGZ1bmMsaj0tMSE9PUIuaW5kZXhPZihcImRlbnNpdHlcIiksVj1cIm1heFwiPT09Tnx8XCJtaW5cIj09PU4/bnVsbDowLFU9YS5jb3VudCxxPW9bQl0sSD0hMSxHPVtdLFk9W10sVz1cInpcImluIGU/ZS56OlwibWFya2VyXCJpbiBlJiZBcnJheS5pc0FycmF5KGUubWFya2VyLmNvbG9yKT9lLm1hcmtlci5jb2xvcjpcIlwiO1cmJlwiY291bnRcIiE9PU4mJihIPVwiYXZnXCI9PT1OLFU9YVtOXSk7dmFyIFg9ZS54YmlucyxaPV8oWC5zdGFydCksJD1fKFguZW5kKSsoWi1pLnRpY2tJbmNyZW1lbnQoWixYLnNpemUsITEseCkpLzFlNjtmb3Iocj1aO3I8JDtyPWkudGlja0luY3JlbWVudChyLFguc2l6ZSwhMSx4KSlTLnB1c2goViksei5wdXNoKHIpLEgmJkUucHVzaCgwKTt6LnB1c2gocik7dmFyIEo9Uy5sZW5ndGgsSz1fKGUueGJpbnMuc3RhcnQpLFE9KHItSykvSix0dD1rKEsrUS8yKTtmb3IoWj13KChYPWUueWJpbnMpLnN0YXJ0KSwkPXcoWC5lbmQpKyhaLWkudGlja0luY3JlbWVudChaLFguc2l6ZSwhMSxiKSkvMWU2LHI9WjtyPCQ7cj1pLnRpY2tJbmNyZW1lbnQocixYLnNpemUsITEsYikpe00ucHVzaChTLnNsaWNlKCkpLE8ucHVzaChyKTt2YXIgZXQ9bmV3IEFycmF5KEopO2ZvcihsPTA7bDxKO2wrKylldFtsXT1bXTtGLnB1c2goZXQpLEgmJlIucHVzaChFLnNsaWNlKCkpfU8ucHVzaChyKTt2YXIgcnQ9TS5sZW5ndGgsbnQ9dyhlLnliaW5zLnN0YXJ0KSxpdD0oci1udCkvcnQsYXQ9QShudCtpdC8yKTtqJiYoRz11KFMubGVuZ3RoLEksUSxDKSxZPXUoTS5sZW5ndGgsRCxpdCxMKSksQ3x8XCJkYXRlXCIhPT1nLnR5cGV8fChJPWgoXyxJKSksTHx8XCJkYXRlXCIhPT1tLnR5cGV8fChEPWgodyxEKSk7dmFyIG90PSEwLHN0PSEwLGx0PW5ldyBBcnJheShKKSxjdD1uZXcgQXJyYXkocnQpLHV0PTEvMCxodD0xLzAsZnQ9MS8wLHB0PTEvMDtmb3Iocj0wO3I8VDtyKyspe3ZhciBkdD12W3JdLGd0PXlbcl07cD1uLmZpbmRCaW4oZHQsSSksZD1uLmZpbmRCaW4oZ3QsRCkscD49MCYmcDxKJiZkPj0wJiZkPHJ0JiYoUCs9VShwLHIsTVtkXSxXLFJbZF0pLEZbZF1bcF0ucHVzaChyKSxvdCYmKHZvaWQgMD09PWx0W3BdP2x0W3BdPWR0Omx0W3BdIT09ZHQmJihvdD0hMSkpLHN0JiYodm9pZCAwPT09Y3RbcF0/Y3RbcF09Z3Q6Y3RbcF0hPT1ndCYmKHN0PSExKSksdXQ9TWF0aC5taW4odXQsZHQteltwXSksaHQ9TWF0aC5taW4oaHQseltwKzFdLWR0KSxmdD1NYXRoLm1pbihmdCxndC1PW2RdKSxwdD1NYXRoLm1pbihwdCxPW2QrMV0tZ3QpKX1pZihIKWZvcihkPTA7ZDxydDtkKyspUCs9cyhNW2RdLFJbZF0pO2lmKHEpZm9yKGQ9MDtkPHJ0O2QrKylxKE1bZF0sUCxHLFlbZF0pO3JldHVybnt4OnYseFJhbmdlczpmKHosb3QmJmx0LHV0LGh0LGcseCkseDA6dHQsZHg6USx5OnkseVJhbmdlczpmKE8sc3QmJmN0LGZ0LHB0LG0sYikseTA6YXQsZHk6aXQsejpNLHB0czpGfX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vaGlzdG9ncmFtL2F2ZXJhZ2VcIjo5NjcsXCIuLi9oaXN0b2dyYW0vYmluX2Z1bmN0aW9uc1wiOjk2OSxcIi4uL2hpc3RvZ3JhbS9iaW5fbGFiZWxfdmFsc1wiOjk3MCxcIi4uL2hpc3RvZ3JhbS9ub3JtX2Z1bmN0aW9uc1wiOjk3OH1dLDk4MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTSxhPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIiksbz10KFwiLi4vLi4vbGliXCIpLHM9dChcIi4vYXR0cmlidXRlc1wiKSxsPVtcInhcIixcInlcIl07ZnVuY3Rpb24gYyh0LGUscixzKXt2YXIgbD1yW2EuaWQybmFtZSh0W2UrXCJheGlzXCJdKV0udHlwZSxjPWUrXCJiaW5zXCIsdT10W2NdLGg9dFtlK1wiY2FsZW5kYXJcIl07dXx8KHU9dFtjXT17fSk7dmFyIGY9XCJkYXRlXCI9PT1sP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHR8fDA9PT10P28uY2xlYW5EYXRlKHQsaSxoKTplfTpmdW5jdGlvbih0LGUpe3JldHVybiBuKHQpP051bWJlcih0KTplfTt1LnN0YXJ0PWYodS5zdGFydCxzLnN0YXJ0KSx1LmVuZD1mKHUuZW5kLHMuZW5kKTt2YXIgcD1zLnNpemUsZD11LnNpemU7aWYobihkKSl1LnNpemU9ZD4wP051bWJlcihkKTpwO2Vsc2UgaWYoXCJzdHJpbmdcIiE9dHlwZW9mIGQpdS5zaXplPXA7ZWxzZXt2YXIgZz1kLmNoYXJBdCgwKSx2PWQuc3Vic3RyKDEpOygodj1uKHYpP051bWJlcih2KTowKTw9MHx8XCJkYXRlXCIhPT1sfHxcIk1cIiE9PWd8fHYhPT1NYXRoLnJvdW5kKHYpKSYmKHUuc2l6ZT1wKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE7ZnVuY3Rpb24gdSh0KXtyZXR1cm4gby5jb2VyY2UoaS5faW5wdXQsaSxzLHQpfWZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBoPShpPXRbcl0pLnR5cGU7aWYoXCJoaXN0b2dyYW0yZFwiPT09aHx8XCJoaXN0b2dyYW0yZGNvbnRvdXJcIj09PWgpZm9yKG49MDtuPGwubGVuZ3RoO24rKyl7dmFyIGY9KGE9bFtuXSkrXCJiaW5zXCIscD0oaS5fYXV0b0Jpbnx8e30pW2FdfHx7fTt1KGYrXCIuc3RhcnRcIixwLnN0YXJ0KSx1KGYrXCIuZW5kXCIscC5lbmQpLHUoZitcIi5zaXplXCIscC5zaXplKSxjKGksYSxlLHApLChpW2ZdfHx7fSkuc2l6ZXx8dShcIm5iaW5zXCIrYSl9fX19LHtcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIjo3NTIsXCIuL2F0dHJpYnV0ZXNcIjo5NzksXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDk4MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9zYW1wbGVfZGVmYXVsdHNcIiksYT10KFwiLi4vaGVhdG1hcC9zdHlsZV9kZWZhdWx0c1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIikscz10KFwiLi9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiBjKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9aSh0LGUsYyxsKSwhMSE9PWUudmlzaWJsZSYmKGEodCxlLGMsbCksbyh0LGUsbCxjLHtwcmVmaXg6XCJcIixjTGV0dGVyOlwielwifSksYyhcImhvdmVydGVtcGxhdGVcIikpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCI6NTg4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vaGVhdG1hcC9zdHlsZV9kZWZhdWx0c1wiOjk2MSxcIi4vYXR0cmlidXRlc1wiOjk3OSxcIi4vc2FtcGxlX2RlZmF1bHRzXCI6OTg1fV0sOTgzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2hlYXRtYXAvaG92ZXJcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIikuaG92ZXJMYWJlbFRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyxzKXt2YXIgbD1uKHQsZSxyLGEsbyxzKTtpZihsKXt2YXIgYz0odD1sWzBdKS5pbmRleCx1PWNbMF0saD1jWzFdLGY9dC5jZFswXSxwPWYueFJhbmdlc1toXSxkPWYueVJhbmdlc1t1XTtyZXR1cm4gdC54TGFiZWw9aSh0LnhhLHBbMF0scFsxXSksdC55TGFiZWw9aSh0LnlhLGRbMF0sZFsxXSksbH19fSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL2hlYXRtYXAvaG92ZXJcIjo5NTV9XSw5ODQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLG4uY3Jvc3NUcmFjZURlZmF1bHRzPXQoXCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzXCIpLG4uY2FsYz10KFwiLi4vaGVhdG1hcC9jYWxjXCIpLG4ucGxvdD10KFwiLi4vaGVhdG1hcC9wbG90XCIpLG4ubGF5ZXJOYW1lPVwiaGVhdG1hcGxheWVyXCIsbi5jb2xvcmJhcj10KFwiLi4vaGVhdG1hcC9jb2xvcmJhclwiKSxuLnN0eWxlPXQoXCIuLi9oZWF0bWFwL3N0eWxlXCIpLG4uaG92ZXJQb2ludHM9dChcIi4vaG92ZXJcIiksbi5ldmVudERhdGE9dChcIi4uL2hpc3RvZ3JhbS9ldmVudF9kYXRhXCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwiaGlzdG9ncmFtMmRcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIiksbi5jYXRlZ29yaWVzPVtcImNhcnRlc2lhblwiLFwic3ZnXCIsXCIyZE1hcFwiLFwiaGlzdG9ncmFtXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi4vaGVhdG1hcC9jYWxjXCI6OTQ5LFwiLi4vaGVhdG1hcC9jb2xvcmJhclwiOjk1MSxcIi4uL2hlYXRtYXAvcGxvdFwiOjk1OSxcIi4uL2hlYXRtYXAvc3R5bGVcIjo5NjAsXCIuLi9oaXN0b2dyYW0vZXZlbnRfZGF0YVwiOjk3NSxcIi4vYXR0cmlidXRlc1wiOjk3OSxcIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHNcIjo5ODEsXCIuL2RlZmF1bHRzXCI6OTgyLFwiLi9ob3ZlclwiOjk4M31dLDk4NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxpPXQoXCIuLi8uLi9saWJcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPXIoXCJ4XCIpLHM9cihcInlcIiksbD1pLm1pblJvd0xlbmd0aChvKSxjPWkubWluUm93TGVuZ3RoKHMpO2wmJmM/KGUuX2xlbmd0aD1NYXRoLm1pbihsLGMpLG4uZ2V0Q29tcG9uZW50TWV0aG9kKFwiY2FsZW5kYXJzXCIsXCJoYW5kbGVUcmFjZURlZmF1bHRzXCIpKHQsZSxbXCJ4XCIsXCJ5XCJdLGEpLChyKFwielwiKXx8cihcIm1hcmtlci5jb2xvclwiKSkmJnIoXCJoaXN0ZnVuY1wiKSxyKFwiaGlzdG5vcm1cIikscihcImF1dG9iaW54XCIpLHIoXCJhdXRvYmlueVwiKSk6ZS52aXNpYmxlPSExfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4Mjl9XSw5ODY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vaGlzdG9ncmFtMmQvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi9jb250b3VyL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9cyh7eDpuLngseTpuLnksejpuLnosbWFya2VyOm4ubWFya2VyLGhpc3Rub3JtOm4uaGlzdG5vcm0saGlzdGZ1bmM6bi5oaXN0ZnVuYyxuYmluc3g6bi5uYmluc3gseGJpbnM6bi54YmlucyxuYmluc3k6bi5uYmluc3kseWJpbnM6bi55YmlucyxhdXRvYmlueDpuLmF1dG9iaW54LGF1dG9iaW55Om4uYXV0b2JpbnksYXV0b2NvbnRvdXI6aS5hdXRvY29udG91cixuY29udG91cnM6aS5uY29udG91cnMsY29udG91cnM6aS5jb250b3VycyxsaW5lOmkubGluZSx6aG92ZXJmb3JtYXQ6bi56aG92ZXJmb3JtYXQsaG92ZXJ0ZW1wbGF0ZTpuLmhvdmVydGVtcGxhdGV9LGEoXCJcIix7Y0xldHRlcjpcInpcIixlZGl0VHlwZU92ZXJyaWRlOlwiY2FsY1wifSkse2NvbG9yYmFyOm99KX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCI6NTc5LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIjo1ODUsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vY29udG91ci9hdHRyaWJ1dGVzXCI6OTE5LFwiLi4vaGlzdG9ncmFtMmQvYXR0cmlidXRlc1wiOjk3OX1dLDk4NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vaGlzdG9ncmFtMmQvc2FtcGxlX2RlZmF1bHRzXCIpLGE9dChcIi4uL2NvbnRvdXIvY29udG91cnNfZGVmYXVsdHNcIiksbz10KFwiLi4vY29udG91ci9zdHlsZV9kZWZhdWx0c1wiKSxzPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1pKHQsZSxjLGwpLCExIT09ZS52aXNpYmxlJiYoYSh0LGUsYyxmdW5jdGlvbihyKXtyZXR1cm4gbi5jb2VyY2UyKHQsZSxzLHIpfSksbyh0LGUsYyxsKSxjKFwiaG92ZXJ0ZW1wbGF0ZVwiKSl9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9jb250b3VyL2NvbnRvdXJzX2RlZmF1bHRzXCI6OTI2LFwiLi4vY29udG91ci9zdHlsZV9kZWZhdWx0c1wiOjk0MCxcIi4uL2hpc3RvZ3JhbTJkL3NhbXBsZV9kZWZhdWx0c1wiOjk4NSxcIi4vYXR0cmlidXRlc1wiOjk4Nn1dLDk4ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIiksbi5jcm9zc1RyYWNlRGVmYXVsdHM9dChcIi4uL2hpc3RvZ3JhbTJkL2Nyb3NzX3RyYWNlX2RlZmF1bHRzXCIpLG4uY2FsYz10KFwiLi4vY29udG91ci9jYWxjXCIpLG4ucGxvdD10KFwiLi4vY29udG91ci9wbG90XCIpLnBsb3Qsbi5sYXllck5hbWU9XCJjb250b3VybGF5ZXJcIixuLnN0eWxlPXQoXCIuLi9jb250b3VyL3N0eWxlXCIpLG4uY29sb3JiYXI9dChcIi4uL2NvbnRvdXIvY29sb3JiYXJcIiksbi5ob3ZlclBvaW50cz10KFwiLi4vY29udG91ci9ob3ZlclwiKSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cImhpc3RvZ3JhbTJkY29udG91clwiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiKSxuLmNhdGVnb3JpZXM9W1wiY2FydGVzaWFuXCIsXCJzdmdcIixcIjJkTWFwXCIsXCJjb250b3VyXCIsXCJoaXN0b2dyYW1cIixcInNob3dMZWdlbmRcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIjo3NjAsXCIuLi9jb250b3VyL2NhbGNcIjo5MjAsXCIuLi9jb250b3VyL2NvbG9yYmFyXCI6OTIyLFwiLi4vY29udG91ci9ob3ZlclwiOjkzMixcIi4uL2NvbnRvdXIvcGxvdFwiOjkzNyxcIi4uL2NvbnRvdXIvc3R5bGVcIjo5MzksXCIuLi9oaXN0b2dyYW0yZC9jcm9zc190cmFjZV9kZWZhdWx0c1wiOjk4MSxcIi4vYXR0cmlidXRlc1wiOjk4NixcIi4vZGVmYXVsdHNcIjo5ODd9XSw5ODk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLG89dChcIi4uL21lc2gzZC9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIiksbD10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LGM9dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGw7dmFyIHU9ZS5leHBvcnRzPWMobCh7eDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIn0seTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIn0sejp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIn0sdmFsdWU6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCJ9LGlzb21pbjp7dmFsVHlwZTpcIm51bWJlclwifSxpc29tYXg6e3ZhbFR5cGU6XCJudW1iZXJcIn0sc3VyZmFjZTp7c2hvdzp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfSxjb3VudDp7dmFsVHlwZTpcImludGVnZXJcIixkZmx0OjIsbWluOjF9LGZpbGw6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjF9LHBhdHRlcm46e3ZhbFR5cGU6XCJmbGFnbGlzdFwiLGZsYWdzOltcIkFcIixcIkJcIixcIkNcIixcIkRcIixcIkVcIl0sZXh0cmFzOltcImFsbFwiLFwib2RkXCIsXCJldmVuXCJdLGRmbHQ6XCJhbGxcIn19LHNwYWNlZnJhbWU6e3Nob3c6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sZmlsbDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6LjE1fX0sc2xpY2VzOnt4OntzaG93Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LGxvY2F0aW9uczp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixkZmx0OltdfSxmaWxsOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDoxfX0seTp7c2hvdzp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxsb2NhdGlvbnM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZGZsdDpbXX0sZmlsbDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MX19LHo6e3Nob3c6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sbG9jYXRpb25zOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGRmbHQ6W119LGZpbGw6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjF9fX0sY2Fwczp7eDp7c2hvdzp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfSxmaWxsOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDoxfX0seTp7c2hvdzp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfSxmaWxsOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDoxfX0sejp7c2hvdzp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfSxmaWxsOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDoxfX19LHRleHQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsYXJyYXlPazohMH0saG92ZXJ0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGFycmF5T2s6ITB9LGhvdmVydGVtcGxhdGU6YSgpfSxuKFwiXCIse2NvbG9yQXR0cjpcImB2YWx1ZWBcIixzaG93U2NhbGVEZmx0OiEwLGVkaXRUeXBlT3ZlcnJpZGU6XCJjYWxjXCJ9KSx7Y29sb3JiYXI6aSxvcGFjaXR5Om8ub3BhY2l0eSxsaWdodHBvc2l0aW9uOm8ubGlnaHRwb3NpdGlvbixsaWdodGluZzpvLmxpZ2h0aW5nLGZsYXRzaGFkaW5nOm8uZmxhdHNoYWRpbmcsY29udG91cjpvLmNvbnRvdXIsaG92ZXJpbmZvOmwoe30scy5ob3ZlcmluZm8pfSksXCJjYWxjXCIsXCJuZXN0ZWRcIik7dS5mbGF0c2hhZGluZy5kZmx0PSEwLHUubGlnaHRpbmcuZmFjZW5vcm1hbHNlcHNpbG9uLmRmbHQ9MCx1LnguZWRpdFR5cGU9dS55LmVkaXRUeXBlPXUuei5lZGl0VHlwZT11LnZhbHVlLmVkaXRUeXBlPVwiY2FsYytjbGVhckF4aXNUeXBlc1wiLHUudHJhbnNmb3Jtcz12b2lkIDB9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDYsXCIuLi9tZXNoM2QvYXR0cmlidXRlc1wiOjk5NH1dLDk5MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsY1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlLl9sZW49TWF0aC5taW4oZS54Lmxlbmd0aCxlLnkubGVuZ3RoLGUuei5sZW5ndGgsZS52YWx1ZS5sZW5ndGgpO2Zvcih2YXIgcj0xLzAsaT0tMS8wLGE9ZS52YWx1ZS5sZW5ndGgsbz0wO288YTtvKyspe3ZhciBzPWUudmFsdWVbb107cj1NYXRoLm1pbihyLHMpLGk9TWF0aC5tYXgoaSxzKX1lLl9taW5WYWx1ZXM9cixlLl9tYXhWYWx1ZXM9aSxlLl92TWluPXZvaWQgMD09PWUuaXNvbWlufHxudWxsPT09ZS5pc29taW4/cjplLmlzb21pbixlLl92TWF4PXZvaWQgMD09PWUuaXNvbWF4fHxudWxsPT09ZS5pc29taW4/aTplLmlzb21heCxuKHQsZSx7dmFsczpbZS5fdk1pbixlLl92TWF4XSxjb250YWluZXJTdHI6XCJcIixjTGV0dGVyOlwiY1wifSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsY1wiOjU4Nn1dLDk5MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbC1tZXNoM2RcIiksaT10KFwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvclwiKS5wYXJzZUNvbG9yU2NhbGUsYT10KFwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiKSxvPXQoXCIuLi8uLi9wbG90cy9nbDNkL3ppcDNcIikscz10KFwiLi4vLi4vbGliXCIpO2Z1bmN0aW9uIGwodCl7cmV0dXJuIHMuZGlzdGluY3RWYWxzKHQpLnZhbHN9dmFyIGM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5sZW5ndGgtMTtyPjA7ci0tKXt2YXIgbj1NYXRoLm1pbihlW3JdLGVbci0xXSksaT1NYXRoLm1heChlW3JdLGVbci0xXSk7aWYoaT5uJiZuPHQmJnQ8PWkpcmV0dXJue2lkOnIsZGlzdFJhdGlvOihpLXQpLyhpLW4pfX1yZXR1cm57aWQ6MCxkaXN0UmF0aW86MH19O2Z1bmN0aW9uIHUodCxlLHIpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1yLHRoaXMubWVzaD1lLHRoaXMubmFtZT1cIlwiLHRoaXMuZGF0YT1udWxsLHRoaXMuc2hvd0NvbnRvdXI9ITF9dmFyIGg9dS5wcm90b3R5cGU7ZnVuY3Rpb24gZih0KXt0Ll9pPVtdLHQuX2o9W10sdC5faz1bXTt2YXIgZSxyLG49dC5zdXJmYWNlLnNob3csaT10LnNwYWNlZnJhbWUuc2hvdyxhPXQuc3VyZmFjZS5maWxsLG89dC5zcGFjZWZyYW1lLmZpbGwscz0hMSx1PSExLGg9MCxmPWwodC54LnNsaWNlKDAsdC5fbGVuKSkscD1sKHQueS5zbGljZSgwLHQuX2xlbikpLGQ9bCh0Lnouc2xpY2UoMCx0Ll9sZW4pKSxnPWYubGVuZ3RoLHY9cC5sZW5ndGgsbT1kLmxlbmd0aDtmdW5jdGlvbiB5KHQsZSxyKXtyZXR1cm4gcittKmUrbSp2KnR9dmFyIHgsYixfLHcsayxBPXQuX21pblZhbHVlcyxUPXQuX21heFZhbHVlcyxNPXQuX3ZNaW4sUz10Ll92TWF4O2Z1bmN0aW9uIEUodCxlLG4pe2Zvcih2YXIgaT13Lmxlbmd0aCxhPXI7YTxpO2ErKylpZih0PT09eFthXSYmZT09PWJbYV0mJm49PT1fW2FdKXJldHVybiBhO3JldHVybi0xfWZ1bmN0aW9uIEMoKXtyPWV9ZnVuY3Rpb24gTCgpe3g9W10sYj1bXSxfPVtdLHc9W10sZT0wLEMoKX1mdW5jdGlvbiB6KHQscixuLGkpe3JldHVybiB4LnB1c2godCksYi5wdXNoKHIpLF8ucHVzaChuKSx3LnB1c2goaSksKytlLTF9ZnVuY3Rpb24gTyh0LGUscil7Zm9yKHZhciBuPVtdLGk9MDtpPHQubGVuZ3RoO2krKyluW2ldPXRbaV0qKDEtcikrciplW2ldO3JldHVybiBufWZ1bmN0aW9uIEkodCl7az10fWZ1bmN0aW9uIEQodCxlKXtyZXR1cm5cImFsbFwiPT09dHx8bnVsbD09PXR8fHQuaW5kZXhPZihlKT4tMX1mdW5jdGlvbiBQKHQsZSl7cmV0dXJuIG51bGw9PT10P2U6dH1mdW5jdGlvbiBSKGUscixuKXtDKCk7dmFyIGksYSxvLHM9W3JdLGw9W25dO2lmKGs+PTEpcz1bcl0sbD1bbl07ZWxzZSBpZihrPjApe3ZhciBjPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxuPXRbMV0saT10WzJdLGE9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1bXSxpPTA7aTx0Lmxlbmd0aDtpKyspbltpXT0odFtpXStlW2ldK3JbaV0pLzM7cmV0dXJuIG59KHIsbixpKSxvPU1hdGguc3FydCgxLWspLHM9TyhhLHIsbyksbD1PKGEsbixvKSxjPU8oYSxpLG8pLHU9ZVswXSxoPWVbMV0sZj1lWzJdO3JldHVybnt4eXp2OltbcixuLGxdLFtsLHMscl0sW24saSxjXSxbYyxsLG5dLFtpLHIsc10sW3MsYyxpXV0sYWJjOltbdSxoLC0xXSxbLTEsLTEsdV0sW2gsZiwtMV0sWy0xLC0xLGhdLFtmLHUsLTFdLFstMSwtMSxmXV19fShyLG4pO3M9Yy54eXp2LGw9Yy5hYmN9Zm9yKHZhciB1PTA7dTxzLmxlbmd0aDt1Kyspe3I9c1t1XSxuPWxbdV07Zm9yKHZhciBmPVtdLHA9MDtwPDM7cCsrKXt2YXIgZD1yW3BdWzBdLGc9cltwXVsxXSx2PXJbcF1bMl0sbT1yW3BdWzNdLHk9bltwXT4tMT9uW3BdOkUoZCxnLHYpO2ZbcF09eT4tMT95OnooZCxnLHYsUChlLG0pKX1pPWZbMF0sYT1mWzFdLG89ZlsyXSx0Ll9pLnB1c2goaSksdC5fai5wdXNoKGEpLHQuX2sucHVzaChvKSwrK2h9fWZ1bmN0aW9uIEYodCxlLHIsbil7dmFyIGk9dFszXTtpPHImJihpPXIpLGk+biYmKGk9bik7Zm9yKHZhciBhPSh0WzNdLWkpLyh0WzNdLWVbM10rMWUtOSksbz1bXSxzPTA7czw0O3MrKylvW3NdPSgxLWEpKnRbc10rYSplW3NdO3JldHVybiBvfWZ1bmN0aW9uIEIodCxlLHIpe3JldHVybiB0Pj1lJiZ0PD1yfWZ1bmN0aW9uIE4odCl7dmFyIGU9LjAwMSooUy1NKTtyZXR1cm4gdD49TS1lJiZ0PD1TK2V9ZnVuY3Rpb24gaihlKXtmb3IodmFyIHI9W10sbj0wO248NDtuKyspe3ZhciBpPWVbbl07ci5wdXNoKFt0LnhbaV0sdC55W2ldLHQueltpXSx0LnZhbHVlW2ldXSl9cmV0dXJuIHJ9dmFyIFY9MztmdW5jdGlvbiBVKHQsZSxyLG4saSxhKXthfHwoYT0xKSxyPVstMSwtMSwtMV07dmFyIG89ITEscz1bQihlWzBdWzNdLG4saSksQihlWzFdWzNdLG4saSksQihlWzJdWzNdLG4saSldO2lmKCFzWzBdJiYhc1sxXSYmIXNbMl0pcmV0dXJuITE7dmFyIGw9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBOKGVbMF1bM10pJiZOKGVbMV1bM10pJiZOKGVbMl1bM10pPyhSKHQsZSxyKSwhMCk6YTxWJiZVKHQsZSxyLE0sUywrK2EpfTtpZihzWzBdJiZzWzFdJiZzWzJdKXJldHVybiBsKHQsZSxyKXx8bzt2YXIgYz0hMTtyZXR1cm5bWzAsMSwyXSxbMiwwLDFdLFsxLDIsMF1dLmZvckVhY2goZnVuY3Rpb24oYSl7aWYoc1thWzBdXSYmc1thWzFdXSYmIXNbYVsyXV0pe3ZhciB1PWVbYVswXV0saD1lW2FbMV1dLGY9ZVthWzJdXSxwPUYoZix1LG4saSksZD1GKGYsaCxuLGkpO289bCh0LFtkLHAsdV0sWy0xLC0xLHJbYVswXV1dKXx8byxvPWwodCxbdSxoLGRdLFtyW2FbMF1dLHJbYVsxXV0sLTFdKXx8byxjPSEwfX0pLGM/bzooW1swLDEsMl0sWzEsMiwwXSxbMiwwLDFdXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2lmKHNbYVswXV0mJiFzW2FbMV1dJiYhc1thWzJdXSl7dmFyIHU9ZVthWzBdXSxoPWVbYVsxXV0sZj1lW2FbMl1dLHA9RihoLHUsbixpKSxkPUYoZix1LG4saSk7bz1sKHQsW2QscCx1XSxbLTEsLTEsclthWzBdXV0pfHxvLGM9ITB9fSksbyl9ZnVuY3Rpb24gcSh0LGUscixuKXt2YXIgaT0hMSxhPWooZSksbz1bQihhWzBdWzNdLHIsbiksQihhWzFdWzNdLHIsbiksQihhWzJdWzNdLHIsbiksQihhWzNdWzNdLHIsbildO2lmKCEob1swXXx8b1sxXXx8b1syXXx8b1szXSkpcmV0dXJuIGk7aWYob1swXSYmb1sxXSYmb1syXSYmb1szXSlyZXR1cm4gdSYmKGk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWZ1bmN0aW9uKG4saSxhKXtSKHQsW2Vbbl0sZVtpXSxlW2FdXSxbcltuXSxyW2ldLHJbYV1dKX07bigwLDEsMiksbigzLDAsMSksbigyLDMsMCksbigxLDIsMyl9KHQsYSxlKXx8aSksaTt2YXIgcz0hMTtyZXR1cm5bWzAsMSwyLDNdLFszLDAsMSwyXSxbMiwzLDAsMV0sWzEsMiwzLDBdXS5mb3JFYWNoKGZ1bmN0aW9uKGwpe2lmKG9bbFswXV0mJm9bbFsxXV0mJm9bbFsyXV0mJiFvW2xbM11dKXt2YXIgYz1hW2xbMF1dLGg9YVtsWzFdXSxmPWFbbFsyXV0scD1hW2xbM11dO2lmKHUpaT1SKHQsW2MsaCxmXSxbZVtsWzBdXSxlW2xbMV1dLGVbbFsyXV1dKXx8aTtlbHNle3ZhciBkPUYocCxjLHIsbiksZz1GKHAsaCxyLG4pLHY9RihwLGYscixuKTtpPVIobnVsbCxbZCxnLHZdLFstMSwtMSwtMV0pfHxpfXM9ITB9fSkscz9pOihbWzAsMSwyLDNdLFsxLDIsMywwXSxbMiwzLDAsMV0sWzMsMCwxLDJdLFswLDIsMywxXSxbMSwzLDIsMF1dLmZvckVhY2goZnVuY3Rpb24obCl7aWYob1tsWzBdXSYmb1tsWzFdXSYmIW9bbFsyXV0mJiFvW2xbM11dKXt2YXIgYz1hW2xbMF1dLGg9YVtsWzFdXSxmPWFbbFsyXV0scD1hW2xbM11dLGQ9RihmLGMscixuKSxnPUYoZixoLHIsbiksdj1GKHAsaCxyLG4pLG09RihwLGMscixuKTt1PyhpPVIodCxbYyxtLGRdLFtlW2xbMF1dLC0xLC0xXSl8fGksaT1SKHQsW2gsZyx2XSxbZVtsWzFdXSwtMSwtMV0pfHxpKTppPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1mdW5jdGlvbihuLGksYSl7Uih0LFtlW25dLGVbaV0sZVthXV0sW3Jbbl0scltpXSxyW2FdXSl9O24oMCwxLDIpLG4oMiwzLDApfShudWxsLFtkLGcsdixtXSxbLTEsLTEsLTEsLTFdKXx8aSxzPSEwfX0pLHM/aTooW1swLDEsMiwzXSxbMSwyLDMsMF0sWzIsMywwLDFdLFszLDAsMSwyXV0uZm9yRWFjaChmdW5jdGlvbihsKXtpZihvW2xbMF1dJiYhb1tsWzFdXSYmIW9bbFsyXV0mJiFvW2xbM11dKXt2YXIgYz1hW2xbMF1dLGg9YVtsWzFdXSxmPWFbbFsyXV0scD1hW2xbM11dLGQ9RihoLGMscixuKSxnPUYoZixjLHIsbiksdj1GKHAsYyxyLG4pO3U/KGk9Uih0LFtjLGQsZ10sW2VbbFswXV0sLTEsLTFdKXx8aSxpPVIodCxbYyxnLHZdLFtlW2xbMF1dLC0xLC0xXSl8fGksaT1SKHQsW2MsdixkXSxbZVtsWzBdXSwtMSwtMV0pfHxpKTppPVIobnVsbCxbZCxnLHZdLFstMSwtMSwtMV0pfHxpLHM9ITB9fSksaSkpfWZ1bmN0aW9uIEgodCxlLHIsbixpLGEsbyxsLGMsaCxmKXt2YXIgcD0hMTtyZXR1cm4gcyYmKEQodCxcIkFcIikmJihwPXEobnVsbCxbZSxyLG4sYV0saCxmKXx8cCksRCh0LFwiQlwiKSYmKHA9cShudWxsLFtyLG4saSxjXSxoLGYpfHxwKSxEKHQsXCJDXCIpJiYocD1xKG51bGwsW3IsYSxvLGNdLGgsZil8fHApLEQodCxcIkRcIikmJihwPXEobnVsbCxbbixhLGwsY10saCxmKXx8cCksRCh0LFwiRVwiKSYmKHA9cShudWxsLFtyLG4sYSxjXSxoLGYpfHxwKSksdSYmKHA9cSh0LFtyLG4sYSxjXSxoLGYpfHxwKSxwfWZ1bmN0aW9uIEcodCxlLHIsbixpLGEsbyxzKXtyZXR1cm5bITA9PT1zWzBdfHxVKHQsaihbZSxyLG5dKSxbZSxyLG5dLGEsbyksITA9PT1zWzFdfHxVKHQsaihbbixpLGVdKSxbbixpLGVdLGEsbyldfWZ1bmN0aW9uIFkodCxlLHIsbixpLGEsbyxzLGwpe3JldHVybiBzP0codCxlLHIsaSxuLGEsbyxsKTpHKHQscixpLG4sZSxhLG8sbCl9ZnVuY3Rpb24gVyh0LGUscixuLGksYSxvKXt2YXIgcyxsLGMsdSxoPSExLGY9ZnVuY3Rpb24oKXtoPVUodCxbcyxsLGNdLFstMSwtMSwtMV0saSxhKXx8aCxoPVUodCxbYyx1LHNdLFstMSwtMSwtMV0saSxhKXx8aH0scD1vWzBdLGQ9b1sxXSxnPW9bMl07cmV0dXJuIHAmJihzPU8oaihbeShlLHItMCxuLTApXSlbMF0saihbeShlLTEsci0wLG4tMCldKVswXSxwKSxsPU8oaihbeShlLHItMCxuLTEpXSlbMF0saihbeShlLTEsci0wLG4tMSldKVswXSxwKSxjPU8oaihbeShlLHItMSxuLTEpXSlbMF0saihbeShlLTEsci0xLG4tMSldKVswXSxwKSx1PU8oaihbeShlLHItMSxuLTApXSlbMF0saihbeShlLTEsci0xLG4tMCldKVswXSxwKSxmKCkpLGQmJihzPU8oaihbeShlLTAscixuLTApXSlbMF0saihbeShlLTAsci0xLG4tMCldKVswXSxkKSxsPU8oaihbeShlLTAscixuLTEpXSlbMF0saihbeShlLTAsci0xLG4tMSldKVswXSxkKSxjPU8oaihbeShlLTEscixuLTEpXSlbMF0saihbeShlLTEsci0xLG4tMSldKVswXSxkKSx1PU8oaihbeShlLTEscixuLTApXSlbMF0saihbeShlLTEsci0xLG4tMCldKVswXSxkKSxmKCkpLGcmJihzPU8oaihbeShlLTAsci0wLG4pXSlbMF0saihbeShlLTAsci0wLG4tMSldKVswXSxnKSxsPU8oaihbeShlLTAsci0xLG4pXSlbMF0saihbeShlLTAsci0xLG4tMSldKVswXSxnKSxjPU8oaihbeShlLTEsci0xLG4pXSlbMF0saihbeShlLTEsci0xLG4tMSldKVswXSxnKSx1PU8oaihbeShlLTEsci0wLG4pXSlbMF0saihbeShlLTEsci0wLG4tMSldKVswXSxnKSxmKCkpLGh9ZnVuY3Rpb24gWCh0LGUscixuLGksYSxvLGwsYyx1LGgsZil7dmFyIHA9dDtyZXR1cm4gZj8ocyYmXCJldmVuXCI9PT10JiYocD1udWxsKSxIKHAsZSxyLG4saSxhLG8sbCxjLHUsaCkpOihzJiZcIm9kZFwiPT09dCYmKHA9bnVsbCksSChwLGMsbCxvLGEsaSxuLHIsZSx1LGgpKX1mdW5jdGlvbiBaKHQsZSxyLG4saSl7Zm9yKHZhciBhPVtdLG89MCxzPTA7czxlLmxlbmd0aDtzKyspZm9yKHZhciBsPWVbc10sYz0xO2M8bTtjKyspZm9yKHZhciB1PTE7dTx2O3UrKylhLnB1c2goWSh0LHkobCx1LTEsYy0xKSx5KGwsdS0xLGMpLHkobCx1LGMtMSkseShsLHUsYykscixuLChsK3UrYyklMixpJiZpW29dP2lbb106W10pKSxvKys7cmV0dXJuIGF9ZnVuY3Rpb24gJCh0LGUscixuLGkpe2Zvcih2YXIgYT1bXSxvPTAscz0wO3M8ZS5sZW5ndGg7cysrKWZvcih2YXIgbD1lW3NdLGM9MTtjPGc7YysrKWZvcih2YXIgdT0xO3U8bTt1KyspYS5wdXNoKFkodCx5KGMtMSxsLHUtMSkseShjLGwsdS0xKSx5KGMtMSxsLHUpLHkoYyxsLHUpLHIsbiwoYytsK3UpJTIsaSYmaVtvXT9pW29dOltdKSksbysrO3JldHVybiBhfWZ1bmN0aW9uIEoodCxlLHIsbixpKXtmb3IodmFyIGE9W10sbz0wLHM9MDtzPGUubGVuZ3RoO3MrKylmb3IodmFyIGw9ZVtzXSxjPTE7Yzx2O2MrKylmb3IodmFyIHU9MTt1PGc7dSsrKWEucHVzaChZKHQseSh1LTEsYy0xLGwpLHkodS0xLGMsbCkseSh1LGMtMSxsKSx5KHUsYyxsKSxyLG4sKHUrYytsKSUyLGkmJmlbb10/aVtvXTpbXSkpLG8rKztyZXR1cm4gYX1mdW5jdGlvbiBLKHQsZSxyKXtmb3IodmFyIG49MTtuPG07bisrKWZvcih2YXIgaT0xO2k8djtpKyspZm9yKHZhciBhPTE7YTxnO2ErKylYKHQseShhLTEsaS0xLG4tMSkseShhLTEsaS0xLG4pLHkoYS0xLGksbi0xKSx5KGEtMSxpLG4pLHkoYSxpLTEsbi0xKSx5KGEsaS0xLG4pLHkoYSxpLG4tMSkseShhLGksbiksZSxyLChhK2krbiklMil9ZnVuY3Rpb24gUSh0LGUscil7cz0hMCxLKHQsZSxyKSxzPSExfWZ1bmN0aW9uIHR0KHQsZSxyLG4saSxhKXtmb3IodmFyIG89W10scz0wLGw9MDtsPGUubGVuZ3RoO2wrKylmb3IodmFyIGM9ZVtsXSx1PTE7dTxtO3UrKylmb3IodmFyIGg9MTtoPHY7aCsrKW8ucHVzaChXKHQsYyxoLHUscixuLGlbbF0sYSYmYVtzXSYmYVtzXSkpLHMrKztyZXR1cm4gb31mdW5jdGlvbiBldCh0LGUscixuLGksYSl7Zm9yKHZhciBvPVtdLHM9MCxsPTA7bDxlLmxlbmd0aDtsKyspZm9yKHZhciBjPWVbbF0sdT0xO3U8Zzt1KyspZm9yKHZhciBoPTE7aDxtO2grKylvLnB1c2goVyh0LHUsYyxoLHIsbixpW2xdLGEmJmFbc10mJmFbc10pKSxzKys7cmV0dXJuIG99ZnVuY3Rpb24gcnQodCxlLHIsbixpLGEpe2Zvcih2YXIgbz1bXSxzPTAsbD0wO2w8ZS5sZW5ndGg7bCsrKWZvcih2YXIgYz1lW2xdLHU9MTt1PHY7dSsrKWZvcih2YXIgaD0xO2g8ZztoKyspby5wdXNoKFcodCxoLHUsYyxyLG4saVtsXSxhJiZhW3NdJiZhW3NdKSkscysrO3JldHVybiBvfWZ1bmN0aW9uIG50KHQsZSl7Zm9yKHZhciByPVtdLG49dDtuPGU7bisrKXIucHVzaChuKTtyZXR1cm4gcn1yZXR1cm4gZnVuY3Rpb24oKXtpZihMKCksZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPGc7ZSsrKWZvcih2YXIgcj0wO3I8djtyKyspZm9yKHZhciBuPTA7bjxtO24rKyl7dmFyIGk9eShlLHIsbik7eih0LnhbaV0sdC55W2ldLHQueltpXSx0LnZhbHVlW2ldKX19KCksaSYmbyYmKEkobyksdT0hMCxLKG51bGwsTSxTKSx1PSExKSxuJiZhKXtJKGEpO2Zvcih2YXIgZT10LnN1cmZhY2UucGF0dGVybixyPXQuc3VyZmFjZS5jb3VudCxzPTA7czxyO3MrKyl7dmFyIGw9MT09PXI/LjU6cy8oci0xKSxrPSgxLWwpKk0rbCpTLEU9TWF0aC5hYnMoay1BKT5NYXRoLmFicyhrLVQpP1tBLGtdOltrLFRdO1EoZSxFWzBdLEVbMV0pfX12YXIgQz1bW01hdGgubWluKE0sVCksTWF0aC5tYXgoTSxUKV0sW01hdGgubWluKEEsUyksTWF0aC5tYXgoQSxTKV1dO1tcInhcIixcInlcIixcInpcIl0uZm9yRWFjaChmdW5jdGlvbihlKXtmb3IodmFyIHI9W10sbj0wO248Qy5sZW5ndGg7bisrKXt2YXIgaT0wLGE9Q1tuXVswXSxvPUNbbl1bMV0scz10LnNsaWNlc1tlXTtpZihzLnNob3cmJnMuZmlsbCl7SShzLmZpbGwpO3ZhciBsPVtdLHU9W10saD1bXTtpZihzLmxvY2F0aW9ucy5sZW5ndGgpZm9yKHZhciB5PTA7eTxzLmxvY2F0aW9ucy5sZW5ndGg7eSsrKXt2YXIgeD1jKHMubG9jYXRpb25zW3ldLFwieFwiPT09ZT9mOlwieVwiPT09ZT9wOmQpOzA9PT14LmRpc3RSYXRpbz9sLnB1c2goeC5pZCk6eC5pZD4wJiYodS5wdXNoKHguaWQpLFwieFwiPT09ZT9oLnB1c2goW3guZGlzdFJhdGlvLDAsMF0pOlwieVwiPT09ZT9oLnB1c2goWzAseC5kaXN0UmF0aW8sMF0pOmgucHVzaChbMCwwLHguZGlzdFJhdGlvXSkpfWVsc2UgbD1udCgxLFwieFwiPT09ZT9nLTE6XCJ5XCI9PT1lP3YtMTptLTEpO3UubGVuZ3RoPjAmJihyW2ldPVwieFwiPT09ZT90dChudWxsLHUsYSxvLGgscltpXSk6XCJ5XCI9PT1lP2V0KG51bGwsdSxhLG8saCxyW2ldKTpydChudWxsLHUsYSxvLGgscltpXSksaSsrKSxsLmxlbmd0aD4wJiYocltpXT1cInhcIj09PWU/WihudWxsLGwsYSxvLHJbaV0pOlwieVwiPT09ZT8kKG51bGwsbCxhLG8scltpXSk6SihudWxsLGwsYSxvLHJbaV0pLGkrKyl9dmFyIGI9dC5jYXBzW2VdO2Iuc2hvdyYmYi5maWxsJiYoSShiLmZpbGwpLHJbaV09XCJ4XCI9PT1lP1oobnVsbCxbMCxnLTFdLGEsbyxyW2ldKTpcInlcIj09PWU/JChudWxsLFswLHYtMV0sYSxvLHJbaV0pOkoobnVsbCxbMCxtLTFdLGEsbyxyW2ldKSxpKyspfX0pLDA9PT1oJiZMKCksdC5feD14LHQuX3k9Yix0Ll96PV8sdC5faW50ZW5zaXR5PXcsdC5fWHM9Zix0Ll9Zcz1wLHQuX1pzPWR9KCksdH1oLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLm1lc2gpe3ZhciBlPXQuZGF0YS5pbmRleCxyPXRoaXMuZGF0YS5feFtlXSxuPXRoaXMuZGF0YS5feVtlXSxpPXRoaXMuZGF0YS5feltlXSxhPXRoaXMuZGF0YS5fWXMubGVuZ3RoLG89dGhpcy5kYXRhLl9acy5sZW5ndGgscz1jKHIsdGhpcy5kYXRhLl9YcykuaWQsbD1jKG4sdGhpcy5kYXRhLl9ZcykuaWQsdT1jKGksdGhpcy5kYXRhLl9acykuaWQsaD10LmluZGV4PXUrbypsK28qYSpzO3QudHJhY2VDb29yZGluYXRlPVt0aGlzLmRhdGEuX3hbaF0sdGhpcy5kYXRhLl95W2hdLHRoaXMuZGF0YS5feltoXSx0aGlzLmRhdGEudmFsdWVbaF1dO3ZhciBmPXRoaXMuZGF0YS5ob3ZlcnRleHR8fHRoaXMuZGF0YS50ZXh0O3JldHVybiBBcnJheS5pc0FycmF5KGYpJiZ2b2lkIDAhPT1mW2hdP3QudGV4dExhYmVsPWZbaF06ZiYmKHQudGV4dExhYmVsPWYpLCEwfX0saC51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zY2VuZSxyPWUuZnVsbFNjZW5lTGF5b3V0O2Z1bmN0aW9uIG4odCxlLHIsbil7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0LmQybChlLDAsbikqcn0pfXRoaXMuZGF0YT1mKHQpO3ZhciBzPXtwb3NpdGlvbnM6byhuKHIueGF4aXMsdC5feCxlLmRhdGFTY2FsZVswXSx0LnhjYWxlbmRhciksbihyLnlheGlzLHQuX3ksZS5kYXRhU2NhbGVbMV0sdC55Y2FsZW5kYXIpLG4oci56YXhpcyx0Ll96LGUuZGF0YVNjYWxlWzJdLHQuemNhbGVuZGFyKSksY2VsbHM6byh0Ll9pLHQuX2osdC5fayksbGlnaHRQb3NpdGlvbjpbdC5saWdodHBvc2l0aW9uLngsdC5saWdodHBvc2l0aW9uLnksdC5saWdodHBvc2l0aW9uLnpdLGFtYmllbnQ6dC5saWdodGluZy5hbWJpZW50LGRpZmZ1c2U6dC5saWdodGluZy5kaWZmdXNlLHNwZWN1bGFyOnQubGlnaHRpbmcuc3BlY3VsYXIscm91Z2huZXNzOnQubGlnaHRpbmcucm91Z2huZXNzLGZyZXNuZWw6dC5saWdodGluZy5mcmVzbmVsLHZlcnRleE5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24sZmFjZU5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcuZmFjZW5vcm1hbHNlcHNpbG9uLG9wYWNpdHk6dC5vcGFjaXR5LGNvbnRvdXJFbmFibGU6dC5jb250b3VyLnNob3csY29udG91ckNvbG9yOmEodC5jb250b3VyLmNvbG9yKS5zbGljZSgwLDMpLGNvbnRvdXJXaWR0aDp0LmNvbnRvdXIud2lkdGgsdXNlRmFjZXROb3JtYWxzOnQuZmxhdHNoYWRpbmd9O3MudmVydGV4SW50ZW5zaXR5PXQuX2ludGVuc2l0eSxzLnZlcnRleEludGVuc2l0eUJvdW5kcz1bdC5jbWluLHQuY21heF0scy5jb2xvcm1hcD1pKHQpLHRoaXMubWVzaC51cGRhdGUocyl9LGguZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLm1lc2gpLHRoaXMubWVzaC5kaXNwb3NlKCl9LGUuZXhwb3J0cz17ZmluZE5lYXJlc3RPbkF4aXM6YyxnZW5lcmF0ZUlzb01lc2hlczpmLGNyZWF0ZUlzb3N1cmZhY2VUcmFjZTpmdW5jdGlvbih0LGUpe3ZhciByPXQuZ2xwbG90LmdsLGk9bih7Z2w6cn0pLGE9bmV3IHUodCxpLGUudWlkKTtyZXR1cm4gaS5fdHJhY2U9YSxhLnVwZGF0ZShlKSx0LmdscGxvdC5hZGQoaSksYX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yXCI6Njk4LFwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiOjcyNCxcIi4uLy4uL3Bsb3RzL2dsM2QvemlwM1wiOjgwMCxcImdsLW1lc2gzZFwiOjI3N31dLDk5MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcmVnaXN0cnlcIiksYT10KFwiLi9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiKTtmdW5jdGlvbiBzKHQsZSxyLG4sYSl7dmFyIHM9YShcImlzb21pblwiKSxsPWEoXCJpc29tYXhcIik7bnVsbCE9bCYmbnVsbCE9cyYmcz5sJiYoZS5pc29taW49bnVsbCxlLmlzb21heD1udWxsKTt2YXIgYz1hKFwieFwiKSx1PWEoXCJ5XCIpLGg9YShcInpcIiksZj1hKFwidmFsdWVcIik7YyYmYy5sZW5ndGgmJnUmJnUubGVuZ3RoJiZoJiZoLmxlbmd0aCYmZiYmZi5sZW5ndGg/KGkuZ2V0Q29tcG9uZW50TWV0aG9kKFwiY2FsZW5kYXJzXCIsXCJoYW5kbGVUcmFjZURlZmF1bHRzXCIpKHQsZSxbXCJ4XCIsXCJ5XCIsXCJ6XCJdLG4pLFtcInhcIixcInlcIixcInpcIl0uZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1cImNhcHMuXCIrdDthKGUrXCIuc2hvd1wiKSYmYShlK1wiLmZpbGxcIik7dmFyIHI9XCJzbGljZXMuXCIrdDthKHIrXCIuc2hvd1wiKSYmKGEocitcIi5maWxsXCIpLGEocitcIi5sb2NhdGlvbnNcIikpfSksYShcInNwYWNlZnJhbWUuc2hvd1wiKSYmYShcInNwYWNlZnJhbWUuZmlsbFwiKSxhKFwic3VyZmFjZS5zaG93XCIpJiYoYShcInN1cmZhY2UuY291bnRcIiksYShcInN1cmZhY2UuZmlsbFwiKSxhKFwic3VyZmFjZS5wYXR0ZXJuXCIpKSxhKFwiY29udG91ci5zaG93XCIpJiYoYShcImNvbnRvdXIuY29sb3JcIiksYShcImNvbnRvdXIud2lkdGhcIikpLFtcInRleHRcIixcImhvdmVydGV4dFwiLFwiaG92ZXJ0ZW1wbGF0ZVwiLFwibGlnaHRpbmcuYW1iaWVudFwiLFwibGlnaHRpbmcuZGlmZnVzZVwiLFwibGlnaHRpbmcuc3BlY3VsYXJcIixcImxpZ2h0aW5nLnJvdWdobmVzc1wiLFwibGlnaHRpbmcuZnJlc25lbFwiLFwibGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb25cIixcImxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvblwiLFwibGlnaHRwb3NpdGlvbi54XCIsXCJsaWdodHBvc2l0aW9uLnlcIixcImxpZ2h0cG9zaXRpb24uelwiLFwiZmxhdHNoYWRpbmdcIixcIm9wYWNpdHlcIl0uZm9yRWFjaChmdW5jdGlvbih0KXthKHQpfSksbyh0LGUsbixhLHtwcmVmaXg6XCJcIixjTGV0dGVyOlwiY1wifSksZS5fbGVuZ3RoPW51bGwpOmUudmlzaWJsZT0hMX1lLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLGkpe3ModCxlLDAsaSxmdW5jdGlvbihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfSl9LHN1cHBseUlzb0RlZmF1bHRzOnN9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIjo1ODgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vYXR0cmlidXRlc1wiOjk4OX1dLDk5MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIikuc3VwcGx5RGVmYXVsdHMsbi5jYWxjPXQoXCIuL2NhbGNcIiksbi5jb2xvcmJhcj17bWluOlwiY21pblwiLG1heDpcImNtYXhcIn0sbi5wbG90PXQoXCIuL2NvbnZlcnRcIikuY3JlYXRlSXNvc3VyZmFjZVRyYWNlLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwiaXNvc3VyZmFjZVwiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4uLy4uL3Bsb3RzL2dsM2RcIiksbi5jYXRlZ29yaWVzPVtcImdsM2RcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9nbDNkXCI6Nzg5LFwiLi9hdHRyaWJ1dGVzXCI6OTg5LFwiLi9jYWxjXCI6OTkwLFwiLi9jb252ZXJ0XCI6OTkxLFwiLi9kZWZhdWx0c1wiOjk5Mn1dLDk5NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vc3VyZmFjZS9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIiksbD10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1sKHt4Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx5Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx6Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSxpOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxqOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxrOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LGhvdmVydGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixhcnJheU9rOiEwLGVkaXRUeXBlOlwiY2FsY1wifSxob3ZlcnRlbXBsYXRlOmEoe2VkaXRUeXBlOlwiY2FsY1wifSksZGVsYXVuYXlheGlzOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ4XCIsXCJ5XCIsXCJ6XCJdLGRmbHQ6XCJ6XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGFscGhhaHVsbDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6LTEsZWRpdFR5cGU6XCJjYWxjXCJ9LGludGVuc2l0eTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwiY2FsY1wifSx2ZXJ0ZXhjb2xvcjp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sZmFjZWNvbG9yOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx0cmFuc2Zvcm1zOnZvaWQgMH0sbihcIlwiLHtjb2xvckF0dHI6XCJgaW50ZW5zaXR5YFwiLHNob3dTY2FsZURmbHQ6ITAsZWRpdFR5cGVPdmVycmlkZTpcImNhbGNcIn0pLHtjb2xvcmJhcjppLG9wYWNpdHk6by5vcGFjaXR5LGZsYXRzaGFkaW5nOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEsZWRpdFR5cGU6XCJjYWxjXCJ9LGNvbnRvdXI6e3Nob3c6bCh7fSxvLmNvbnRvdXJzLnguc2hvdyx7fSksY29sb3I6by5jb250b3Vycy54LmNvbG9yLHdpZHRoOm8uY29udG91cnMueC53aWR0aCxlZGl0VHlwZTpcImNhbGNcIn0sbGlnaHRwb3NpdGlvbjp7eDpsKHt9LG8ubGlnaHRwb3NpdGlvbi54LHtkZmx0OjFlNX0pLHk6bCh7fSxvLmxpZ2h0cG9zaXRpb24ueSx7ZGZsdDoxZTV9KSx6Omwoe30sby5saWdodHBvc2l0aW9uLnose2RmbHQ6MH0pLGVkaXRUeXBlOlwiY2FsY1wifSxsaWdodGluZzpsKHt2ZXJ0ZXhub3JtYWxzZXBzaWxvbjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MWUtMTIsZWRpdFR5cGU6XCJjYWxjXCJ9LGZhY2Vub3JtYWxzZXBzaWxvbjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MWUtNixlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LG8ubGlnaHRpbmcpLGhvdmVyaW5mbzpsKHt9LHMuaG92ZXJpbmZvLHtlZGl0VHlwZTpcImNhbGNcIn0pfSl9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiOjc0NixcIi4uL3N1cmZhY2UvYXR0cmlidXRlc1wiOjExNDl9XSw5OTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZS5pbnRlbnNpdHkmJm4odCxlLHt2YWxzOmUuaW50ZW5zaXR5LGNvbnRhaW5lclN0cjpcIlwiLGNMZXR0ZXI6XCJjXCJ9KX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCI6NTg2fV0sOTk2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsLW1lc2gzZFwiKSxpPXQoXCJkZWxhdW5heS10cmlhbmd1bGF0ZVwiKSxhPXQoXCJhbHBoYS1zaGFwZVwiKSxvPXQoXCJjb252ZXgtaHVsbFwiKSxzPXQoXCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yXCIpLnBhcnNlQ29sb3JTY2FsZSxsPXQoXCIuLi8uLi9saWIvc3RyMnJnYmFycmF5XCIpLGM9dChcIi4uLy4uL3Bsb3RzL2dsM2QvemlwM1wiKTtmdW5jdGlvbiB1KHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLm1lc2g9ZSx0aGlzLm5hbWU9XCJcIix0aGlzLmNvbG9yPVwiI2ZmZlwiLHRoaXMuZGF0YT1udWxsLHRoaXMuc2hvd0NvbnRvdXI9ITF9dmFyIGg9dS5wcm90b3R5cGU7ZnVuY3Rpb24gZih0KXtmb3IodmFyIGU9W10scj10Lmxlbmd0aCxuPTA7bjxyO24rKyllW25dPWwodFtuXSk7cmV0dXJuIGV9ZnVuY3Rpb24gcCh0LGUscixuKXtmb3IodmFyIGk9W10sYT1lLmxlbmd0aCxvPTA7bzxhO28rKylpW29dPXQuZDJsKGVbb10sMCxuKSpyO3JldHVybiBpfWZ1bmN0aW9uIGQodCl7Zm9yKHZhciBlPVtdLHI9dC5sZW5ndGgsbj0wO248cjtuKyspZVtuXT1NYXRoLnJvdW5kKHRbbl0pO3JldHVybiBlfWZ1bmN0aW9uIGcodCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj0wO248cjtuKyspaWYodFtuXTw9LS41fHx0W25dPj1lLS41KXJldHVybiExO3JldHVybiEwfWguaGFuZGxlUGljaz1mdW5jdGlvbih0KXtpZih0Lm9iamVjdD09PXRoaXMubWVzaCl7dmFyIGU9dC5pbmRleD10LmRhdGEuaW5kZXg7dC50cmFjZUNvb3JkaW5hdGU9W3RoaXMuZGF0YS54W2VdLHRoaXMuZGF0YS55W2VdLHRoaXMuZGF0YS56W2VdXTt2YXIgcj10aGlzLmRhdGEuaG92ZXJ0ZXh0fHx0aGlzLmRhdGEudGV4dDtyZXR1cm4gQXJyYXkuaXNBcnJheShyKSYmdm9pZCAwIT09cltlXT90LnRleHRMYWJlbD1yW2VdOnImJih0LnRleHRMYWJlbD1yKSwhMH19LGgudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUscj1lLmZ1bGxTY2VuZUxheW91dDt0aGlzLmRhdGE9dDt2YXIgbix1PXQueC5sZW5ndGgsaD1jKHAoci54YXhpcyx0LngsZS5kYXRhU2NhbGVbMF0sdC54Y2FsZW5kYXIpLHAoci55YXhpcyx0LnksZS5kYXRhU2NhbGVbMV0sdC55Y2FsZW5kYXIpLHAoci56YXhpcyx0LnosZS5kYXRhU2NhbGVbMl0sdC56Y2FsZW5kYXIpKTtpZih0LmkmJnQuaiYmdC5rKXtpZih0LmkubGVuZ3RoIT09dC5qLmxlbmd0aHx8dC5qLmxlbmd0aCE9PXQuay5sZW5ndGh8fCFnKHQuaSx1KXx8IWcodC5qLHUpfHwhZyh0LmssdSkpcmV0dXJuO249YyhkKHQuaSksZCh0LmopLGQodC5rKSl9ZWxzZSBuPTA9PT10LmFscGhhaHVsbD9vKGgpOnQuYWxwaGFodWxsPjA/YSh0LmFscGhhaHVsbCxoKTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXCJ4XCIsXCJ5XCIsXCJ6XCJdLmluZGV4T2YodCksbj1bXSxhPWUubGVuZ3RoLG89MDtvPGE7bysrKW5bb109W2Vbb11bKHIrMSklM10sZVtvXVsocisyKSUzXV07cmV0dXJuIGkobil9KHQuZGVsYXVuYXlheGlzLGgpO3ZhciB2PXtwb3NpdGlvbnM6aCxjZWxsczpuLGxpZ2h0UG9zaXRpb246W3QubGlnaHRwb3NpdGlvbi54LHQubGlnaHRwb3NpdGlvbi55LHQubGlnaHRwb3NpdGlvbi56XSxhbWJpZW50OnQubGlnaHRpbmcuYW1iaWVudCxkaWZmdXNlOnQubGlnaHRpbmcuZGlmZnVzZSxzcGVjdWxhcjp0LmxpZ2h0aW5nLnNwZWN1bGFyLHJvdWdobmVzczp0LmxpZ2h0aW5nLnJvdWdobmVzcyxmcmVzbmVsOnQubGlnaHRpbmcuZnJlc25lbCx2ZXJ0ZXhOb3JtYWxzRXBzaWxvbjp0LmxpZ2h0aW5nLnZlcnRleG5vcm1hbHNlcHNpbG9uLGZhY2VOb3JtYWxzRXBzaWxvbjp0LmxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvbixvcGFjaXR5OnQub3BhY2l0eSxjb250b3VyRW5hYmxlOnQuY29udG91ci5zaG93LGNvbnRvdXJDb2xvcjpsKHQuY29udG91ci5jb2xvcikuc2xpY2UoMCwzKSxjb250b3VyV2lkdGg6dC5jb250b3VyLndpZHRoLHVzZUZhY2V0Tm9ybWFsczp0LmZsYXRzaGFkaW5nfTt0LmludGVuc2l0eT8odGhpcy5jb2xvcj1cIiNmZmZcIix2LnZlcnRleEludGVuc2l0eT10LmludGVuc2l0eSx2LnZlcnRleEludGVuc2l0eUJvdW5kcz1bdC5jbWluLHQuY21heF0sdi5jb2xvcm1hcD1zKHQpKTp0LnZlcnRleGNvbG9yPyh0aGlzLmNvbG9yPXQudmVydGV4Y29sb3JbMF0sdi52ZXJ0ZXhDb2xvcnM9Zih0LnZlcnRleGNvbG9yKSk6dC5mYWNlY29sb3I/KHRoaXMuY29sb3I9dC5mYWNlY29sb3JbMF0sdi5jZWxsQ29sb3JzPWYodC5mYWNlY29sb3IpKToodGhpcy5jb2xvcj10LmNvbG9yLHYubWVzaENvbG9yPWwodC5jb2xvcikpLHRoaXMubWVzaC51cGRhdGUodil9LGguZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLm1lc2gpLHRoaXMubWVzaC5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2xwbG90LmdsLGk9bih7Z2w6cn0pLGE9bmV3IHUodCxpLGUudWlkKTtyZXR1cm4gaS5fdHJhY2U9YSxhLnVwZGF0ZShlKSx0LmdscGxvdC5hZGQoaSksYX19LHtcIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3JcIjo2OTgsXCIuLi8uLi9saWIvc3RyMnJnYmFycmF5XCI6NzI0LFwiLi4vLi4vcGxvdHMvZ2wzZC96aXAzXCI6ODAwLFwiYWxwaGEtc2hhcGVcIjo1NSxcImNvbnZleC1odWxsXCI6MTIxLFwiZGVsYXVuYXktdHJpYW5ndWxhdGVcIjoxNTcsXCJnbC1tZXNoM2RcIjoyNzd9XSw5OTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiKSxvPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLG8scixuKX1mdW5jdGlvbiBjKHQpe3ZhciBlPXQubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPWwodCk7cmV0dXJuIGUmJmkuaXNBcnJheU9yVHlwZWRBcnJheShlKT9lOm51bGx9KTtyZXR1cm4gZS5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5sZW5ndGg9PT1lWzBdLmxlbmd0aH0pJiZlfWMoW1wieFwiLFwieVwiLFwielwiXSk/KGMoW1wiaVwiLFwialwiLFwia1wiXSksKCFlLml8fGUuaiYmZS5rKSYmKCFlLmp8fGUuayYmZS5pKSYmKCFlLmt8fGUuaSYmZS5qKT8obi5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcImhhbmRsZVRyYWNlRGVmYXVsdHNcIikodCxlLFtcInhcIixcInlcIixcInpcIl0scyksW1wibGlnaHRpbmcuYW1iaWVudFwiLFwibGlnaHRpbmcuZGlmZnVzZVwiLFwibGlnaHRpbmcuc3BlY3VsYXJcIixcImxpZ2h0aW5nLnJvdWdobmVzc1wiLFwibGlnaHRpbmcuZnJlc25lbFwiLFwibGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb25cIixcImxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvblwiLFwibGlnaHRwb3NpdGlvbi54XCIsXCJsaWdodHBvc2l0aW9uLnlcIixcImxpZ2h0cG9zaXRpb24uelwiLFwiY29udG91ci5zaG93XCIsXCJjb250b3VyLmNvbG9yXCIsXCJjb250b3VyLndpZHRoXCIsXCJjb2xvcnNjYWxlXCIsXCJyZXZlcnNlc2NhbGVcIixcImZsYXRzaGFkaW5nXCIsXCJhbHBoYWh1bGxcIixcImRlbGF1bmF5YXhpc1wiLFwib3BhY2l0eVwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2wodCl9KSxcImludGVuc2l0eVwiaW4gdD8obChcImludGVuc2l0eVwiKSxhKHQsZSxzLGwse3ByZWZpeDpcIlwiLGNMZXR0ZXI6XCJjXCJ9KSk6KGUuc2hvd3NjYWxlPSExLFwiZmFjZWNvbG9yXCJpbiB0P2woXCJmYWNlY29sb3JcIik6XCJ2ZXJ0ZXhjb2xvclwiaW4gdD9sKFwidmVydGV4Y29sb3JcIik6bChcImNvbG9yXCIscikpLGwoXCJ0ZXh0XCIpLGwoXCJob3ZlcnRleHRcIiksbChcImhvdmVydGVtcGxhdGVcIiksZS5fbGVuZ3RoPW51bGwpOmUudmlzaWJsZT0hMSk6ZS52aXNpYmxlPSExfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCI6NTg4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2F0dHJpYnV0ZXNcIjo5OTR9XSw5OTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLG4uY2FsYz10KFwiLi9jYWxjXCIpLG4uY29sb3JiYXI9e21pbjpcImNtaW5cIixtYXg6XCJjbWF4XCJ9LG4ucGxvdD10KFwiLi9jb252ZXJ0XCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwibWVzaDNkXCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvZ2wzZFwiKSxuLmNhdGVnb3JpZXM9W1wiZ2wzZFwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4uLy4uL3Bsb3RzL2dsM2RcIjo3ODksXCIuL2F0dHJpYnV0ZXNcIjo5OTQsXCIuL2NhbGNcIjo5OTUsXCIuL2NvbnZlcnRcIjo5OTYsXCIuL2RlZmF1bHRzXCI6OTk3fV0sOTk5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKS5leHRlbmRGbGF0LGk9dChcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlc1wiKS5kYXNoLG89dChcIi4uLy4uL2NvbXBvbmVudHMvZngvYXR0cmlidXRlc1wiKSxzPWkubGluZTtmdW5jdGlvbiBsKHQpe3JldHVybntsaW5lOntjb2xvcjpuKHt9LHMuY29sb3Ise2RmbHQ6dH0pLHdpZHRoOnMud2lkdGgsZGFzaDphLGVkaXRUeXBlOlwic3R5bGVcIn0sZWRpdFR5cGU6XCJzdHlsZVwifX1lLmV4cG9ydHM9e3g6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LG9wZW46e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGhpZ2g6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGxvdzp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sY2xvc2U6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGxpbmU6e3dpZHRoOm4oe30scy53aWR0aCx7fSksZGFzaDpuKHt9LGEse30pLGVkaXRUeXBlOlwic3R5bGVcIn0saW5jcmVhc2luZzpsKFwiIzNEOTk3MFwiKSxkZWNyZWFzaW5nOmwoXCIjRkY0MTM2XCIpLHRleHQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsYXJyYXlPazohMCxlZGl0VHlwZTpcImNhbGNcIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LHRpY2t3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDouNSxkZmx0Oi4zLGVkaXRUeXBlOlwiY2FsY1wifSxob3ZlcmxhYmVsOm4oe30sby5ob3ZlcmxhYmVsLHtzcGxpdDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwic3R5bGVcIn19KX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzXCI6NTk4LFwiLi4vLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzXCI6NjA4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCI6MTA1Mn1dLDEwMDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9bi5fLGE9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLG89dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNO2Z1bmN0aW9uIHModCxlLHIsbil7cmV0dXJue286dCxoOmUsbDpyLGM6bn19ZnVuY3Rpb24gbCh0LGUscixzLGwpe2Zvcih2YXIgYz1zLm1ha2VDYWxjZGF0YShlLFwib3BlblwiKSx1PXMubWFrZUNhbGNkYXRhKGUsXCJoaWdoXCIpLGg9cy5tYWtlQ2FsY2RhdGEoZSxcImxvd1wiKSxmPXMubWFrZUNhbGNkYXRhKGUsXCJjbG9zZVwiKSxwPUFycmF5LmlzQXJyYXkoZS50ZXh0KSxkPUFycmF5LmlzQXJyYXkoZS5ob3ZlcnRleHQpLGc9ITAsdj1udWxsLG09W10seT0wO3k8ci5sZW5ndGg7eSsrKXt2YXIgeD1yW3ldLGI9Y1t5XSxfPXVbeV0sdz1oW3ldLGs9Zlt5XTtpZih4IT09byYmYiE9PW8mJl8hPT1vJiZ3IT09byYmayE9PW8pe2s9PT1iP251bGwhPT12JiZrIT09diYmKGc9az52KTpnPWs+Yix2PWs7dmFyIEE9bChiLF8sdyxrKTtBLnBvcz14LEEueWM9KGIraykvMixBLmk9eSxBLmRpcj1nP1wiaW5jcmVhc2luZ1wiOlwiZGVjcmVhc2luZ1wiLHAmJihBLnR4PWUudGV4dFt5XSksZCYmKEEuaHR4PWUuaG92ZXJ0ZXh0W3ldKSxtLnB1c2goQSl9ZWxzZSBtLnB1c2goe3Bvczp4LGVtcHR5OiEwfSl9cmV0dXJuIGUuX2V4dHJlbWVzW3MuX2lkXT1hLmZpbmRFeHRyZW1lcyhzLG4uY29uY2F0KGgsdSkse3BhZGRlZDohMH0pLG0ubGVuZ3RoJiYobVswXS50PXtsYWJlbHM6e29wZW46aSh0LFwib3BlbjpcIikrXCIgXCIsaGlnaDppKHQsXCJoaWdoOlwiKStcIiBcIixsb3c6aSh0LFwibG93OlwiKStcIiBcIixjbG9zZTppKHQsXCJjbG9zZTpcIikrXCIgXCJ9fSksbX1lLmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24odCxlKXt2YXIgcj1hLmdldEZyb21JZCh0LGUueGF4aXMpLGk9YS5nZXRGcm9tSWQodCxlLnlheGlzKSxvPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1yLl9taW5EaWZmO2lmKCFpKXt2YXIgYSxvPXQuX2Z1bGxEYXRhLHM9W107Zm9yKGk9MS8wLGE9MDthPG8ubGVuZ3RoO2ErKyl7dmFyIGw9b1thXTtpZihcIm9obGNcIj09PWwudHlwZSYmITA9PT1sLnZpc2libGUmJmwueGF4aXM9PT1lLl9pZCl7cy5wdXNoKGwpO3ZhciBjPWUubWFrZUNhbGNkYXRhKGwsXCJ4XCIpO2wuX3hjYWxjPWM7dmFyIHU9bi5kaXN0aW5jdFZhbHMoYykubWluRGlmZjt1JiZpc0Zpbml0ZSh1KSYmKGk9TWF0aC5taW4oaSx1KSl9fWZvcihpPT09MS8wJiYoaT0xKSxhPTA7YTxzLmxlbmd0aDthKyspc1thXS5fbWluRGlmZj1pfXJldHVybiBpKnIudGlja3dpZHRofSh0LHIsZSksYz1lLl9taW5EaWZmO2UuX21pbkRpZmY9bnVsbDt2YXIgdT1lLl94Y2FsYztlLl94Y2FsYz1udWxsO3ZhciBoPWwodCxlLHUsaSxzKTtyZXR1cm4gZS5fZXh0cmVtZXNbci5faWRdPWEuZmluZEV4dHJlbWVzKHIsdSx7dnBhZDpjLzJ9KSxoLmxlbmd0aD8obi5leHRlbmRGbGF0KGhbMF0udCx7d0hvdmVyOmMvMix0aWNrTGVuOm99KSxoKTpbe3Q6e2VtcHR5OiEwfX1dfSxjYWxjQ29tbW9uOmx9fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDl9XSwxMDAxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL29obGNfZGVmYXVsdHNcIiksYT10KFwiLi9hdHRyaWJ1dGVzXCIpO2Z1bmN0aW9uIG8odCxlLHIsbil7cihuK1wiLmxpbmUuY29sb3JcIikscihuK1wiLmxpbmUud2lkdGhcIixlLmxpbmUud2lkdGgpLHIobitcIi5saW5lLmRhc2hcIixlLmxpbmUuZGFzaCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX1pKHQsZSxsLHMpPyhsKFwibGluZS53aWR0aFwiKSxsKFwibGluZS5kYXNoXCIpLG8odCxlLGwsXCJpbmNyZWFzaW5nXCIpLG8odCxlLGwsXCJkZWNyZWFzaW5nXCIpLGwoXCJ0ZXh0XCIpLGwoXCJob3ZlcnRleHRcIiksbChcInRpY2t3aWR0aFwiKSxzLl9yZXF1ZXN0UmFuZ2VzbGlkZXJbZS54YXhpc109ITApOmUudmlzaWJsZT0hMX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4vYXR0cmlidXRlc1wiOjk5OSxcIi4vb2hsY19kZWZhdWx0c1wiOjEwMDR9XSwxMDAyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4XCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIikscz10KFwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHRcIiksbD17aW5jcmVhc2luZzpcIlxcdTI1YjJcIixkZWNyZWFzaW5nOlwiXFx1MjViY1wifTtmdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBpLHMsbD10LmNkLGM9dC54YSx1PWxbMF0udHJhY2UsaD1sWzBdLnQsZj11LnR5cGUscD1cIm9obGNcIj09PWY/XCJsXCI6XCJtaW5cIixkPVwib2hsY1wiPT09Zj9cImhcIjpcIm1heFwiLGc9aC5iUG9zfHwwLHY9ZnVuY3Rpb24odCl7cmV0dXJuIHQucG9zK2ctZX0sbT1oLmJkUG9zfHxoLnRpY2tMZW4seT1oLndIb3Zlcix4PU1hdGgubWluKDEsbS9NYXRoLmFicyhjLnIyYyhjLnJhbmdlWzFdKS1jLnIyYyhjLnJhbmdlWzBdKSkpO2Z1bmN0aW9uIGIodCl7dmFyIGU9dih0KTtyZXR1cm4gYS5pbmJveChlLXksZSt5LGkpfWZ1bmN0aW9uIF8odCl7dmFyIGU9dFtwXSxuPXRbZF07cmV0dXJuIGU9PT1ufHxhLmluYm94KGUtcixuLXIsaSl9ZnVuY3Rpb24gdyh0KXtyZXR1cm4oYih0KStfKHQpKS8yfWk9dC5tYXhIb3ZlckRpc3RhbmNlLXgscz10Lm1heFNwaWtlRGlzdGFuY2UteDt2YXIgaz1hLmdldERpc3RhbmNlRnVuY3Rpb24obixiLF8sdyk7aWYoYS5nZXRDbG9zZXN0KGwsayx0KSwhMT09PXQuaW5kZXgpcmV0dXJuIG51bGw7dmFyIEE9bFt0LmluZGV4XTtpZihBLmVtcHR5KXJldHVybiBudWxsO3ZhciBUPXVbQS5kaXJdLE09VC5saW5lLmNvbG9yO3JldHVybiBvLm9wYWNpdHkoTSkmJlQubGluZS53aWR0aD90LmNvbG9yPU06dC5jb2xvcj1ULmZpbGxjb2xvcix0LngwPWMuYzJwKEEucG9zK2ctbSwhMCksdC54MT1jLmMycChBLnBvcytnK20sITApLHQueExhYmVsVmFsPUEucG9zLHQuc3Bpa2VEaXN0YW5jZT13KEEpKnMvaSx0LnhTcGlrZT1jLmMycChBLnBvcywhMCksdH1mdW5jdGlvbiB1KHQsZSxyLGEpe3ZhciBvPXQuY2Qscz10LnlhLGw9b1swXS50cmFjZSx1PW9bMF0udCxoPVtdLGY9Yyh0LGUscixhKTtpZighZilyZXR1cm5bXTt2YXIgcD1vW2YuaW5kZXhdLmhpfHxsLmhvdmVyaW5mbyxkPXAuc3BsaXQoXCIrXCIpO2lmKCEoXCJhbGxcIj09PXB8fC0xIT09ZC5pbmRleE9mKFwieVwiKSkpcmV0dXJuW107Zm9yKHZhciBnPVtcImhpZ2hcIixcIm9wZW5cIixcImNsb3NlXCIsXCJsb3dcIl0sdj17fSxtPTA7bTxnLmxlbmd0aDttKyspe3ZhciB5LHg9Z1ttXSxiPWxbeF1bZi5pbmRleF0sXz1zLmMycChiLCEwKTtiIGluIHY/KHk9dltiXSkueUxhYmVsKz1cIjxicj5cIit1LmxhYmVsc1t4XStuLmhvdmVyTGFiZWxUZXh0KHMsYik6KCh5PWkuZXh0ZW5kRmxhdCh7fSxmKSkueTA9eS55MT1fLHkueUxhYmVsVmFsPWIseS55TGFiZWw9dS5sYWJlbHNbeF0rbi5ob3ZlckxhYmVsVGV4dChzLGIpLHkubmFtZT1cIlwiLGgucHVzaCh5KSx2W2JdPXkpfXJldHVybiBofWZ1bmN0aW9uIGgodCxlLHIsaSl7dmFyIGE9dC5jZCxvPXQueWEsdT1hWzBdLnRyYWNlLGg9YVswXS50LGY9Yyh0LGUscixpKTtpZighZilyZXR1cm5bXTt2YXIgcD1hW2YuaW5kZXhdLGQ9Zi5pbmRleD1wLmksZz1wLmRpcjtmdW5jdGlvbiB2KHQpe3JldHVybiBoLmxhYmVsc1t0XStuLmhvdmVyTGFiZWxUZXh0KG8sdVt0XVtkXSl9dmFyIG09cC5oaXx8dS5ob3ZlcmluZm8seT1tLnNwbGl0KFwiK1wiKSx4PVwiYWxsXCI9PT1tLGI9eHx8LTEhPT15LmluZGV4T2YoXCJ5XCIpLF89eHx8LTEhPT15LmluZGV4T2YoXCJ0ZXh0XCIpLHc9Yj9bdihcIm9wZW5cIiksdihcImhpZ2hcIiksdihcImxvd1wiKSx2KFwiY2xvc2VcIikrXCIgIFwiK2xbZ11dOltdO3JldHVybiBfJiZzKHAsdSx3KSxmLmV4dHJhVGV4dD13LmpvaW4oXCI8YnI+XCIpLGYueTA9Zi55MT1vLmMycChwLnljLCEwKSxbZl19ZS5leHBvcnRzPXtob3ZlclBvaW50czpmdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdC5jZFswXS50cmFjZS5ob3ZlcmxhYmVsLnNwbGl0P3UodCxlLHIsbik6aCh0LGUscixuKX0saG92ZXJTcGxpdDp1LGhvdmVyT25Qb2ludHM6aH19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2Z4XCI6NjE3LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dFwiOjEwNjB9XSwxMDAzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwidHJhY2VcIixuYW1lOlwib2hsY1wiLGJhc2VQbG90TW9kdWxlOnQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIiksY2F0ZWdvcmllczpbXCJjYXJ0ZXNpYW5cIixcInN2Z1wiLFwic2hvd0xlZ2VuZFwiXSxtZXRhOnt9LGF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxzdXBwbHlEZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxjYWxjOnQoXCIuL2NhbGNcIikuY2FsYyxwbG90OnQoXCIuL3Bsb3RcIiksc3R5bGU6dChcIi4vc3R5bGVcIiksaG92ZXJQb2ludHM6dChcIi4vaG92ZXJcIikuaG92ZXJQb2ludHMsc2VsZWN0UG9pbnRzOnQoXCIuL3NlbGVjdFwiKX19LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiOjc2MCxcIi4vYXR0cmlidXRlc1wiOjk5OSxcIi4vY2FsY1wiOjFlMyxcIi4vZGVmYXVsdHNcIjoxMDAxLFwiLi9ob3ZlclwiOjEwMDIsXCIuL3Bsb3RcIjoxMDA1LFwiLi9zZWxlY3RcIjoxMDA2LFwiLi9zdHlsZVwiOjEwMDd9XSwxMDA0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uLy4uL2xpYlwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89cihcInhcIikscz1yKFwib3BlblwiKSxsPXIoXCJoaWdoXCIpLGM9cihcImxvd1wiKSx1PXIoXCJjbG9zZVwiKTtpZihyKFwiaG92ZXJsYWJlbC5zcGxpdFwiKSxuLmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiaGFuZGxlVHJhY2VEZWZhdWx0c1wiKSh0LGUsW1wieFwiXSxhKSxzJiZsJiZjJiZ1KXt2YXIgaD1NYXRoLm1pbihzLmxlbmd0aCxsLmxlbmd0aCxjLmxlbmd0aCx1Lmxlbmd0aCk7cmV0dXJuIG8mJihoPU1hdGgubWluKGgsaS5taW5Sb3dMZW5ndGgobykpKSxlLl9sZW5ndGg9aCxofX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5fV0sMTAwNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9saWJcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPWUueGF4aXMscz1lLnlheGlzO2kubWFrZVRyYWNlR3JvdXBzKGEscixcInRyYWNlIG9obGNcIikuZWFjaChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxhPXRbMF0sbD1hLnQsYz1hLnRyYWNlO2lmKGUuaXNSYW5nZVBsb3R8fChhLm5vZGUzPXIpLCEwIT09Yy52aXNpYmxlfHxsLmVtcHR5KXIucmVtb3ZlKCk7ZWxzZXt2YXIgdT1sLnRpY2tMZW4saD1yLnNlbGVjdEFsbChcInBhdGhcIikuZGF0YShpLmlkZW50aXR5KTtoLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKSxoLmV4aXQoKS5yZW1vdmUoKSxoLmF0dHIoXCJkXCIsZnVuY3Rpb24odCl7aWYodC5lbXB0eSlyZXR1cm5cIk0wLDBaXCI7dmFyIGU9by5jMnAodC5wb3MsITApLHI9by5jMnAodC5wb3MtdSwhMCksbj1vLmMycCh0LnBvcyt1LCEwKTtyZXR1cm5cIk1cIityK1wiLFwiK3MuYzJwKHQubywhMCkrXCJIXCIrZStcIk1cIitlK1wiLFwiK3MuYzJwKHQuaCwhMCkrXCJWXCIrcy5jMnAodC5sLCEwKStcIk1cIituK1wiLFwiK3MuYzJwKHQuYywhMCkrXCJIXCIrZX0pfX0pfX0se1wiLi4vLi4vbGliXCI6NzAxLGQzOjE1NX1dLDEwMDY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQuY2QsaT10LnhheGlzLGE9dC55YXhpcyxvPVtdLHM9blswXS50LmJQb3N8fDA7aWYoITE9PT1lKWZvcihyPTA7cjxuLmxlbmd0aDtyKyspbltyXS5zZWxlY3RlZD0wO2Vsc2UgZm9yKHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGw9bltyXTtlLmNvbnRhaW5zKFtpLmMycChsLnBvcytzKSxhLmMycChsLnljKV0sbnVsbCxsLmksdCk/KG8ucHVzaCh7cG9pbnROdW1iZXI6bC5pLHg6aS5jMmQobC5wb3MpLHk6YS5jMmQobC55Yyl9KSxsLnNlbGVjdGVkPTEpOmwuc2VsZWN0ZWQ9MH1yZXR1cm4gb319LHt9XSwxMDA3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWU/ZVswXS5ub2RlMzpuLnNlbGVjdCh0KS5zZWxlY3RBbGwoXCJnLm9obGNsYXllclwiKS5zZWxlY3RBbGwoXCJnLnRyYWNlXCIpO3Iuc3R5bGUoXCJvcGFjaXR5XCIsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pLHIuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlO24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbChcInBhdGhcIikuZWFjaChmdW5jdGlvbih0KXtpZighdC5lbXB0eSl7dmFyIHI9ZVt0LmRpcl0ubGluZTtuLnNlbGVjdCh0aGlzKS5zdHlsZShcImZpbGxcIixcIm5vbmVcIikuY2FsbChhLnN0cm9rZSxyLmNvbG9yKS5jYWxsKGkuZGFzaExpbmUsci5kYXNoLHIud2lkdGgpLnN0eWxlKFwib3BhY2l0eVwiLGUuc2VsZWN0ZWRwb2ludHMmJiF0LnNlbGVjdGVkPy4zOjEpfX0pfSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LGQzOjE1NX1dLDEwMDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LGk9dChcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLGw9dChcIi4uLy4uL3Bsb3RzL2RvbWFpblwiKS5hdHRyaWJ1dGVzLGM9dChcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiKS5saW5lLHU9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiKSxoPW4oe2VkaXRUeXBlOlwiY2FsY1wifSxvKFwibGluZVwiLHtlZGl0VHlwZTpcImNhbGNcIn0pLHtzaG93c2NhbGU6Yy5zaG93c2NhbGUsY29sb3JiYXI6dSxzaGFwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibGluZWFyXCIsXCJoc3BsaW5lXCJdLGRmbHQ6XCJsaW5lYXJcIixlZGl0VHlwZTpcInBsb3RcIn0saG92ZXJ0ZW1wbGF0ZTpzKHtlZGl0VHlwZTpcInBsb3RcIixhcnJheU9rOiExfSx7a2V5czpbXCJjb3VudFwiLFwicHJvYmFiaWxpdHlcIl19KX0pO2UuZXhwb3J0cz17ZG9tYWluOmwoe25hbWU6XCJwYXJjYXRzXCIsdHJhY2U6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9KSxob3ZlcmluZm86bih7fSxpLmhvdmVyaW5mbyx7ZmxhZ3M6W1wiY291bnRcIixcInByb2JhYmlsaXR5XCJdLGVkaXRUeXBlOlwicGxvdFwiLGFycmF5T2s6ITF9KSxob3Zlcm9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJjYXRlZ29yeVwiLFwiY29sb3JcIixcImRpbWVuc2lvblwiXSxkZmx0OlwiY2F0ZWdvcnlcIixlZGl0VHlwZTpcInBsb3RcIn0saG92ZXJ0ZW1wbGF0ZTpzKHtlZGl0VHlwZTpcInBsb3RcIixhcnJheU9rOiExfSx7a2V5czpbXCJjb3VudFwiLFwicHJvYmFiaWxpdHlcIixcImNhdGVnb3J5XCIsXCJjYXRlZ29yeWNvdW50XCIsXCJjb2xvcmNvdW50XCIsXCJiYW5kY29sb3Jjb3VudFwiXX0pLGFycmFuZ2VtZW50Ont2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJwZXJwZW5kaWN1bGFyXCIsXCJmcmVlZm9ybVwiLFwiZml4ZWRcIl0sZGZsdDpcInBlcnBlbmRpY3VsYXJcIixlZGl0VHlwZTpcInBsb3RcIn0sYnVuZGxlY29sb3JzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJwbG90XCJ9LHNvcnRwYXRoczp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiZm9yd2FyZFwiLFwiYmFja3dhcmRcIl0sZGZsdDpcImZvcndhcmRcIixlZGl0VHlwZTpcInBsb3RcIn0sbGFiZWxmb250OmEoe2VkaXRUeXBlOlwiY2FsY1wifSksdGlja2ZvbnQ6YSh7ZWRpdFR5cGU6XCJjYWxjXCJ9KSxkaW1lbnNpb25zOntfaXNMaW5rZWRUb0FycmF5OlwiZGltZW5zaW9uXCIsbGFiZWw6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcImNhbGNcIn0sY2F0ZWdvcnlvcmRlcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1widHJhY2VcIixcImNhdGVnb3J5IGFzY2VuZGluZ1wiLFwiY2F0ZWdvcnkgZGVzY2VuZGluZ1wiLFwiYXJyYXlcIl0sZGZsdDpcInRyYWNlXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGNhdGVnb3J5YXJyYXk6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHRpY2t0ZXh0Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx2YWx1ZXM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZGZsdDpbXSxlZGl0VHlwZTpcImNhbGNcIn0sZGlzcGxheWluZGV4Ont2YWxUeXBlOlwiaW50ZWdlclwiLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIix2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9fSxsaW5lOmgsY291bnRzOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LGN1c3RvbWRhdGE6dm9pZCAwLGhvdmVybGFiZWw6dm9pZCAwLGlkczp2b2lkIDAsbGVnZW5kZ3JvdXA6dm9pZCAwLG9wYWNpdHk6dm9pZCAwLHNlbGVjdGVkcG9pbnRzOnZvaWQgMCxzaG93bGVnZW5kOnZvaWQgMH19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiOjc0NixcIi4uLy4uL3Bsb3RzL2RvbWFpblwiOjc3NCxcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiOjc3NSxcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiOjEwNTJ9XSwxMDA5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCIpLmdldE1vZHVsZUNhbGNEYXRhLGk9dChcIi4vcGxvdFwiKTtyLm5hbWU9XCJwYXJjYXRzXCIsci5wbG90PWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4odC5jYWxjZGF0YSxcInBhcmNhdHNcIik7aWYoby5sZW5ndGgpe3ZhciBzPW9bMF07aSh0LHMscixhKX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5faGFzJiZuLl9oYXMoXCJwYXJjYXRzXCIpLGE9ZS5faGFzJiZlLl9oYXMoXCJwYXJjYXRzXCIpO2kmJiFhJiZuLl9wYXBlcmRpdi5zZWxlY3RBbGwoXCIucGFyY2F0c1wiKS5yZW1vdmUoKX19LHtcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCI6Nzg0LFwiLi9wbG90XCI6MTAxNH1dLDEwMTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliL2d1cFwiKS53cmFwLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzXCIpLmhhc0NvbG9yc2NhbGUsYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIiksbz10KFwiLi4vLi4vbGliL2ZpbHRlcl91bmlxdWUuanNcIikscz10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLGw9dChcIi4uLy4uL2xpYlwiKTtmdW5jdGlvbiBjKHQsZSxyKXt0LnZhbHVlSW5kcy5wdXNoKGUpLHQuY291bnQrPXJ9ZnVuY3Rpb24gdSh0LGUscil7dC52YWx1ZUluZHMucHVzaChlKSx0LmNvdW50Kz1yfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWwuZmlsdGVyVmlzaWJsZShlLmRpbWVuc2lvbnMpO2lmKDA9PT1yLmxlbmd0aClyZXR1cm5bXTt2YXIgaCxmLHAsZD1yLm1hcChmdW5jdGlvbih0KXt2YXIgZTtyZXR1cm5cInRyYWNlXCI9PT10LmNhdGVnb3J5b3JkZXI/ZT1udWxsOlwiYXJyYXlcIj09PXQuY2F0ZWdvcnlvcmRlcj9lPXQuY2F0ZWdvcnlhcnJheTooZT1vKHQudmFsdWVzKS5zb3J0KCksXCJjYXRlZ29yeSBkZXNjZW5kaW5nXCI9PT10LmNhdGVnb3J5b3JkZXImJihlPWUucmV2ZXJzZSgpKSksZnVuY3Rpb24odCxlKXtlPW51bGw9PWU/W106ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHR9KTt2YXIgcj17fSxuPXt9LGk9W107ZS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7clt0XT0wLG5bdF09ZX0pO2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbyxzPXRbYV07dm9pZCAwPT09cltzXT8ocltzXT0xLG89ZS5wdXNoKHMpLTEsbltzXT1vKToocltzXSsrLG89bltzXSksaS5wdXNoKG8pfXZhciBsPWUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiByW3RdfSk7cmV0dXJue3VuaXF1ZVZhbHVlczplLHVuaXF1ZUNvdW50czpsLGluZHM6aX19KHQudmFsdWVzLGUpfSk7aD1sLmlzQXJyYXlPclR5cGVkQXJyYXkoZS5jb3VudHMpP2UuY291bnRzOltlLmNvdW50c10sZnVuY3Rpb24odCl7dmFyIGU7aWYoZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wO3I8dC5sZW5ndGg7cisrKXtpZih0W3JdPDB8fHRbcl0+PXQubGVuZ3RoKXJldHVybiExO2lmKHZvaWQgMCE9PWVbdFtyXV0pcmV0dXJuITE7ZVt0W3JdXT0hMH1yZXR1cm4hMH0odC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheWluZGV4fSkpKWZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5fZGlzcGxheWluZGV4PXRbZV0uZGlzcGxheWluZGV4O2Vsc2UgZm9yKGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLl9kaXNwbGF5aW5kZXg9ZX0ociksci5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7IWZ1bmN0aW9uKHQsZSl7dC5fY2F0ZWdvcnlhcnJheT1lLnVuaXF1ZVZhbHVlcyxudWxsPT09dC50aWNrdGV4dHx8dm9pZCAwPT09dC50aWNrdGV4dD90Ll90aWNrdGV4dD1bXTp0Ll90aWNrdGV4dD10LnRpY2t0ZXh0LnNsaWNlKCk7Zm9yKHZhciByPXQuX3RpY2t0ZXh0Lmxlbmd0aDtyPGUudW5pcXVlVmFsdWVzLmxlbmd0aDtyKyspdC5fdGlja3RleHQucHVzaChlLnVuaXF1ZVZhbHVlc1tyXSl9KHQsZFtlXSl9KTt2YXIgZyx2PWUubGluZTt2PyhpKGUsXCJsaW5lXCIpJiZhKHQsZSx7dmFsczplLmxpbmUuY29sb3IsY29udGFpbmVyU3RyOlwibGluZVwiLGNMZXR0ZXI6XCJjXCJ9KSxnPXMudHJ5Q29sb3JzY2FsZSh2KSk6Zz1sLmlkZW50aXR5O3ZhciBtLHkseCxiLF89clswXS52YWx1ZXMubGVuZ3RoLHc9e30saz1kLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pbmRzfSk7Zm9yKHA9MCxtPTA7bTxfO20rKyl7dmFyIEE9W107Zm9yKHk9MDt5PGsubGVuZ3RoO3krKylBLnB1c2goa1t5XVttXSk7Zj1oW20laC5sZW5ndGhdLHArPWY7dmFyIFQ9KHg9bSxiPXZvaWQgMCxiPWwuaXNBcnJheU9yVHlwZWRBcnJheSh2LmNvbG9yKT92LmNvbG9yW3gldi5jb2xvci5sZW5ndGhdOnYuY29sb3Ise2NvbG9yOmcoYikscmF3Q29sb3I6Yn0pLE09QStcIi1cIitULnJhd0NvbG9yO3ZvaWQgMD09PXdbTV0mJih3W01dPXtjYXRlZ29yeUluZHM6QSxjb2xvcjpULmNvbG9yLHJhd0NvbG9yOlQucmF3Q29sb3IsdmFsdWVJbmRzOltdLGNvdW50OjB9KSx1KHdbTV0sbSxmKX12YXIgUyxFPXIubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHI9ZSxuPXQuX2luZGV4LGk9dC5fZGlzcGxheWluZGV4LGE9dC5sYWJlbCx7ZGltZW5zaW9uSW5kOnIsY29udGFpbmVySW5kOm4sZGlzcGxheUluZDppLGRpbWVuc2lvbkxhYmVsOmEsY291bnQ6cCxjYXRlZ29yaWVzOltdLGRyYWdYOm51bGx9O3ZhciByLG4saSxhfSk7Zm9yKG09MDttPF87bSsrKWZvcihmPWhbbSVoLmxlbmd0aF0seT0wO3k8RS5sZW5ndGg7eSsrKXt2YXIgQz1FW3ldLmNvbnRhaW5lckluZCxMPWRbeV0uaW5kc1ttXSx6PUVbeV0uY2F0ZWdvcmllcztpZih2b2lkIDA9PT16W0xdKXt2YXIgTz1lLmRpbWVuc2lvbnNbQ10uX2NhdGVnb3J5YXJyYXlbTF0sST1lLmRpbWVuc2lvbnNbQ10uX3RpY2t0ZXh0W0xdO3pbTF09e2RpbWVuc2lvbkluZDp5LGNhdGVnb3J5SW5kOlM9TCxjYXRlZ29yeVZhbHVlOk8sZGlzcGxheUluZDpTLGNhdGVnb3J5TGFiZWw6SSx2YWx1ZUluZHM6W10sY291bnQ6MCxkcmFnWTpudWxsfX1jKHpbTF0sbSxmKX1yZXR1cm4gbihmdW5jdGlvbih0LGUscil7dmFyIG49dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcmllcy5sZW5ndGh9KS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgodCxlKX0pO3JldHVybntkaW1lbnNpb25zOnQscGF0aHM6ZSx0cmFjZTp2b2lkIDAsbWF4Q2F0czpuLGNvdW50OnJ9fShFLHcscCkpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIjo1ODYsXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVyc1wiOjU4OSxcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9maWx0ZXJfdW5pcXVlLmpzXCI6NjkyLFwiLi4vLi4vbGliL2d1cFwiOjY5OX1dLDEwMTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzXCIpLmhhc0NvbG9yc2NhbGUsYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCIpLG89dChcIi4uLy4uL3Bsb3RzL2RvbWFpblwiKS5kZWZhdWx0cyxzPXQoXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIiksbD10KFwiLi9hdHRyaWJ1dGVzXCIpLGM9dChcIi4uL3BhcmNvb3Jkcy9tZXJnZV9sZW5ndGhcIik7ZnVuY3Rpb24gdSh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwuZGltZW5zaW9ucyxyLGkpfXZhciBpPXIoXCJ2YWx1ZXNcIiksYT1yKFwidmlzaWJsZVwiKTtpZihpJiZpLmxlbmd0aHx8KGE9ZS52aXNpYmxlPSExKSxhKXtyKFwibGFiZWxcIikscihcImRpc3BsYXlpbmRleFwiLGUuX2luZGV4KTt2YXIgbyxzPXQuY2F0ZWdvcnlhcnJheSxjPUFycmF5LmlzQXJyYXkocykmJnMubGVuZ3RoPjA7YyYmKG89XCJhcnJheVwiKTt2YXIgdT1yKFwiY2F0ZWdvcnlvcmRlclwiLG8pO1wiYXJyYXlcIj09PXU/KHIoXCJjYXRlZ29yeWFycmF5XCIpLHIoXCJ0aWNrdGV4dFwiKSk6KGRlbGV0ZSB0LmNhdGVnb3J5YXJyYXksZGVsZXRlIHQudGlja3RleHQpLGN8fFwiYXJyYXlcIiE9PXV8fChlLmNhdGVnb3J5b3JkZXI9XCJ0cmFjZVwiKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGgpe2Z1bmN0aW9uIGYocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwscixpKX12YXIgcD1zKHQsZSx7bmFtZTpcImRpbWVuc2lvbnNcIixoYW5kbGVJdGVtRGVmYXVsdHM6dX0pLGQ9ZnVuY3Rpb24odCxlLHIsbyxzKXtzKFwibGluZS5zaGFwZVwiKSxzKFwibGluZS5ob3ZlcnRlbXBsYXRlXCIpO3ZhciBsPXMoXCJsaW5lLmNvbG9yXCIsby5jb2xvcndheVswXSk7aWYoaSh0LFwibGluZVwiKSYmbi5pc0FycmF5T3JUeXBlZEFycmF5KGwpKXtpZihsLmxlbmd0aClyZXR1cm4gcyhcImxpbmUuY29sb3JzY2FsZVwiKSxhKHQsZSxvLHMse3ByZWZpeDpcImxpbmUuXCIsY0xldHRlcjpcImNcIn0pLGwubGVuZ3RoO2UubGluZS5jb2xvcj1yfXJldHVybiAxLzB9KHQsZSxyLGgsZik7byhlLGgsZiksQXJyYXkuaXNBcnJheShwKSYmcC5sZW5ndGh8fChlLnZpc2libGU9ITEpLGMoZSxwLFwidmFsdWVzXCIsZCksZihcImhvdmVyb25cIiksZihcImhvdmVydGVtcGxhdGVcIiksZihcImFycmFuZ2VtZW50XCIpLGYoXCJidW5kbGVjb2xvcnNcIiksZihcInNvcnRwYXRoc1wiKSxmKFwiY291bnRzXCIpO3ZhciBnPXtmYW1pbHk6aC5mb250LmZhbWlseSxzaXplOk1hdGgucm91bmQoaC5mb250LnNpemUpLGNvbG9yOmguZm9udC5jb2xvcn07bi5jb2VyY2VGb250KGYsXCJsYWJlbGZvbnRcIixnKTt2YXIgdj17ZmFtaWx5OmguZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKGguZm9udC5zaXplLzEuMiksY29sb3I6aC5mb250LmNvbG9yfTtuLmNvZXJjZUZvbnQoZixcInRpY2tmb250XCIsdil9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIjo1ODgsXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVyc1wiOjU4OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0c1wiOjc0NSxcIi4uLy4uL3Bsb3RzL2RvbWFpblwiOjc3NCxcIi4uL3BhcmNvb3Jkcy9tZXJnZV9sZW5ndGhcIjoxMDIzLFwiLi9hdHRyaWJ1dGVzXCI6MTAwOH1dLDEwMTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLG4uY2FsYz10KFwiLi9jYWxjXCIpLG4ucGxvdD10KFwiLi9wbG90XCIpLG4uY29sb3JiYXI9e2NvbnRhaW5lcjpcImxpbmVcIixtaW46XCJjbWluXCIsbWF4OlwiY21heFwifSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cInBhcmNhdHNcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuL2Jhc2VfcGxvdFwiKSxuLmNhdGVnb3JpZXM9W1wibm9PcGFjaXR5XCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi9hdHRyaWJ1dGVzXCI6MTAwOCxcIi4vYmFzZV9wbG90XCI6MTAwOSxcIi4vY2FsY1wiOjEwMTAsXCIuL2RlZmF1bHRzXCI6MTAxMSxcIi4vcGxvdFwiOjEwMTR9XSwxMDEzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfYXBpXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIiksbz10KFwiLi4vLi4vbGliXCIpLHM9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxsPXQoXCJ0aW55Y29sb3IyXCIpLGM9dChcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiKTtmdW5jdGlvbiB1KHQsZSxyLGkpe3ZhciBhPXQubWFwKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPXJbMF0sYT1lLm1hcmdpbnx8e2w6ODAscjo4MCx0OjEwMCxiOjgwfSxvPWkudHJhY2Uscz1vLmRvbWFpbixsPWUud2lkdGgsYz1lLmhlaWdodCx1PU1hdGguZmxvb3IobCoocy54WzFdLXMueFswXSkpLGg9TWF0aC5mbG9vcihjKihzLnlbMV0tcy55WzBdKSksZj1zLnhbMF0qbCthLmwscD1lLmhlaWdodC1zLnlbMV0qZS5oZWlnaHQrYS50LGQ9by5saW5lLnNoYXBlO249XCJhbGxcIj09PW8uaG92ZXJpbmZvP1tcImNvdW50XCIsXCJwcm9iYWJpbGl0eVwiXTooby5ob3ZlcmluZm98fFwiXCIpLnNwbGl0KFwiK1wiKTt2YXIgZz17dHJhY2U6byxrZXk6by51aWQsbW9kZWw6aSx4OmYseTpwLHdpZHRoOnUsaGVpZ2h0OmgsaG92ZXJvbjpvLmhvdmVyb24saG92ZXJpbmZvSXRlbXM6bixhcnJhbmdlbWVudDpvLmFycmFuZ2VtZW50LGJ1bmRsZWNvbG9yczpvLmJ1bmRsZWNvbG9ycyxzb3J0cGF0aHM6by5zb3J0cGF0aHMsbGFiZWxmb250Om8ubGFiZWxmb250LGNhdGVnb3J5bGFiZWxmb250Om8udGlja2ZvbnQscGF0aFNoYXBlOmQsZHJhZ0RpbWVuc2lvbjpudWxsLG1hcmdpbjphLHBhdGhzOltdLGRpbWVuc2lvbnM6W10sZ3JhcGhEaXY6dCx0cmFjZVNlbGVjdGlvbjpudWxsLHBhdGhTZWxlY3Rpb246bnVsbCxkaW1lbnNpb25TZWxlY3Rpb246bnVsbH07aS5kaW1lbnNpb25zJiYoUihnKSxQKGcpKTtyZXR1cm4gZ30uYmluZCgwLGUscikpLGw9aS5zZWxlY3RBbGwoXCJnLnBhcmNhdHNsYXllclwiKS5kYXRhKFtudWxsXSk7bC5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsXCJwYXJjYXRzbGF5ZXJcIikuc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpO3ZhciB1PWwuc2VsZWN0QWxsKFwiZy50cmFjZS5wYXJjYXRzXCIpLmRhdGEoYSxoKSx2PXUuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLFwidHJhY2UgcGFyY2F0c1wiKTt1LmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXtyZXR1cm5cInRyYW5zbGF0ZShcIit0LngrXCIsIFwiK3QueStcIilcIn0pLHYuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIixcInBhdGhzXCIpO3ZhciB4PXUuc2VsZWN0KFwiZy5wYXRoc1wiKS5zZWxlY3RBbGwoXCJwYXRoLnBhdGhcIikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5wYXRoc30saCk7eC5hdHRyKFwiZmlsbFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmNvbG9yfSk7dmFyIHc9eC5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsXCJwYXRoXCIpLmF0dHIoXCJzdHJva2Utb3BhY2l0eVwiLDApLmF0dHIoXCJmaWxsXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQubW9kZWwuY29sb3J9KS5hdHRyKFwiZmlsbC1vcGFjaXR5XCIsMCk7eSh3KSx4LmF0dHIoXCJkXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuc3ZnRH0pLHcuZW1wdHkoKXx8eC5zb3J0KHApLHguZXhpdCgpLnJlbW92ZSgpLHgub24oXCJtb3VzZW92ZXJcIixkKS5vbihcIm1vdXNlb3V0XCIsZykub24oXCJjbGlja1wiLG0pLHYuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIixcImRpbWVuc2lvbnNcIik7dmFyIGs9dS5zZWxlY3QoXCJnLmRpbWVuc2lvbnNcIikuc2VsZWN0QWxsKFwiZy5kaW1lbnNpb25cIikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5kaW1lbnNpb25zfSxoKTtrLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIixcImRpbWVuc2lvblwiKSxrLmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXtyZXR1cm5cInRyYW5zbGF0ZShcIit0LngrXCIsIDApXCJ9KSxrLmV4aXQoKS5yZW1vdmUoKTt2YXIgQT1rLnNlbGVjdEFsbChcImcuY2F0ZWdvcnlcIikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yaWVzfSxoKSxUPUEuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLFwiY2F0ZWdvcnlcIik7QS5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoMCwgXCIrdC55K1wiKVwifSksVC5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoXCJjbGFzc1wiLFwiY2F0cmVjdFwiKS5hdHRyKFwicG9pbnRlci1ldmVudHNcIixcIm5vbmVcIiksQS5zZWxlY3QoXCJyZWN0LmNhdHJlY3RcIikuYXR0cihcImZpbGxcIixcIm5vbmVcIikuYXR0cihcIndpZHRoXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGh9KS5hdHRyKFwiaGVpZ2h0XCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSksYihUKTt2YXIgej1BLnNlbGVjdEFsbChcInJlY3QuYmFuZHJlY3RcIikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5iYW5kc30saCk7ei5lYWNoKGZ1bmN0aW9uKCl7by5yYWlzZVRvVG9wKHRoaXMpfSksei5hdHRyKFwiZmlsbFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yfSk7dmFyIE89ei5lbnRlcigpLmFwcGVuZChcInJlY3RcIikuYXR0cihcImNsYXNzXCIsXCJiYW5kcmVjdFwiKS5hdHRyKFwic3Ryb2tlLW9wYWNpdHlcIiwwKS5hdHRyKFwiZmlsbFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yfSkuYXR0cihcImZpbGwtb3BhY2l0eVwiLDApO3ouYXR0cihcImZpbGxcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2xvcn0pLmF0dHIoXCJ3aWR0aFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRofSkuYXR0cihcImhlaWdodFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodH0pLmF0dHIoXCJ5XCIsZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pLmF0dHIoXCJjdXJzb3JcIixmdW5jdGlvbih0KXtyZXR1cm5cImZpeGVkXCI9PT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQ/XCJkZWZhdWx0XCI6XCJwZXJwZW5kaWN1bGFyXCI9PT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQ/XCJucy1yZXNpemVcIjpcIm1vdmVcIn0pLF8oTyksei5leGl0KCkucmVtb3ZlKCksVC5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJjbGFzc1wiLFwiY2F0bGFiZWxcIikuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsXCJub25lXCIpO3ZhciBJPWUuX2Z1bGxMYXlvdXQucGFwZXJfYmdjb2xvcjtBLnNlbGVjdChcInRleHQuY2F0bGFiZWxcIikuYXR0cihcInRleHQtYW5jaG9yXCIsZnVuY3Rpb24odCl7cmV0dXJuIGYodCk/XCJzdGFydFwiOlwiZW5kXCJ9KS5hdHRyKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsXCJtaWRkbGVcIikuc3R5bGUoXCJ0ZXh0LXNoYWRvd1wiLEkrXCIgLTFweCAgMXB4IDJweCwgXCIrSStcIiAxcHggIDFweCAycHgsIFwiK0krXCIgIDFweCAtMXB4IDJweCwgXCIrSStcIiAtMXB4IC0xcHggMnB4XCIpLnN0eWxlKFwiZmlsbFwiLFwicmdiKDAsIDAsIDApXCIpLmF0dHIoXCJ4XCIsZnVuY3Rpb24odCl7cmV0dXJuIGYodCk/dC53aWR0aCs1Oi01fSkuYXR0cihcInlcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHQvMn0pLnRleHQoZnVuY3Rpb24odCl7cmV0dXJuIHQubW9kZWwuY2F0ZWdvcnlMYWJlbH0pLmVhY2goZnVuY3Rpb24odCl7cy5mb250KG4uc2VsZWN0KHRoaXMpLHQucGFyY2F0c1ZpZXdNb2RlbC5jYXRlZ29yeWxhYmVsZm9udCksYy5jb252ZXJ0VG9Uc3BhbnMobi5zZWxlY3QodGhpcyksZSl9KSxULmFwcGVuZChcInRleHRcIikuYXR0cihcImNsYXNzXCIsXCJkaW1sYWJlbFwiKSxBLnNlbGVjdChcInRleHQuZGltbGFiZWxcIikuYXR0cihcInRleHQtYW5jaG9yXCIsXCJtaWRkbGVcIikuYXR0cihcImFsaWdubWVudC1iYXNlbGluZVwiLFwiYmFzZWxpbmVcIikuYXR0cihcImN1cnNvclwiLGZ1bmN0aW9uKHQpe3JldHVyblwiZml4ZWRcIj09PXQucGFyY2F0c1ZpZXdNb2RlbC5hcnJhbmdlbWVudD9cImRlZmF1bHRcIjpcImV3LXJlc2l6ZVwifSkuYXR0cihcInhcIixmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aC8yfSkuYXR0cihcInlcIiwtNSkudGV4dChmdW5jdGlvbih0LGUpe3JldHVybiAwPT09ZT90LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9uc1t0Lm1vZGVsLmRpbWVuc2lvbkluZF0uZGltZW5zaW9uTGFiZWw6bnVsbH0pLmVhY2goZnVuY3Rpb24odCl7cy5mb250KG4uc2VsZWN0KHRoaXMpLHQucGFyY2F0c1ZpZXdNb2RlbC5sYWJlbGZvbnQpfSksQS5zZWxlY3RBbGwoXCJyZWN0LmJhbmRyZWN0XCIpLm9uKFwibW91c2VvdmVyXCIsTSkub24oXCJtb3VzZW91dFwiLFMpLEEuZXhpdCgpLnJlbW92ZSgpLGsuY2FsbChuLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oZnVuY3Rpb24odCl7cmV0dXJue3g6dC54LHk6MH19KS5vbihcImRyYWdzdGFydFwiLEUpLm9uKFwiZHJhZ1wiLEMpLm9uKFwiZHJhZ2VuZFwiLEwpKSx1LmVhY2goZnVuY3Rpb24odCl7dC50cmFjZVNlbGVjdGlvbj1uLnNlbGVjdCh0aGlzKSx0LnBhdGhTZWxlY3Rpb249bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKFwiZy5wYXRoc1wiKS5zZWxlY3RBbGwoXCJwYXRoLnBhdGhcIiksdC5kaW1lbnNpb25TZWxlY3Rpb249bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKFwiZy5kaW1lbnNpb25zXCIpLnNlbGVjdEFsbChcImcuZGltZW5zaW9uXCIpfSksdS5leGl0KCkucmVtb3ZlKCl9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdC5rZXl9ZnVuY3Rpb24gZih0KXt2YXIgZT10LnBhcmNhdHNWaWV3TW9kZWwuZGltZW5zaW9ucy5sZW5ndGgscj10LnBhcmNhdHNWaWV3TW9kZWwuZGltZW5zaW9uc1tlLTFdLm1vZGVsLmRpbWVuc2lvbkluZDtyZXR1cm4gdC5tb2RlbC5kaW1lbnNpb25JbmQ9PT1yfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gdC5tb2RlbC5yYXdDb2xvcj5lLm1vZGVsLnJhd0NvbG9yPzE6dC5tb2RlbC5yYXdDb2xvcjxlLm1vZGVsLnJhd0NvbG9yPy0xOjB9ZnVuY3Rpb24gZCh0KXtpZighdC5wYXJjYXRzVmlld01vZGVsLmRyYWdEaW1lbnNpb24mJi0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoXCJza2lwXCIpKXtvLnJhaXNlVG9Ub3AodGhpcykseChuLnNlbGVjdCh0aGlzKSk7dmFyIGU9dih0KTtpZih0LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYuZW1pdChcInBsb3RseV9ob3ZlclwiLHtwb2ludHM6ZSxldmVudDpuLmV2ZW50fSksLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZihcIm5vbmVcIikpe3ZhciByLGkscyxjPW4ubW91c2UodGhpcylbMF0sdT10LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYsaD10LnBhcmNhdHNWaWV3TW9kZWwudHJhY2UsZj11Ll9mdWxsTGF5b3V0LHA9Zi5fcGFwZXJkaXYubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQ9dC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2ZvcihzPTA7czx0LmxlZnRYcy5sZW5ndGgtMTtzKyspaWYodC5sZWZ0WHNbc10rdC5kaW1XaWR0aHNbc10tMjw9YyYmYzw9dC5sZWZ0WHNbcysxXSsyKXt2YXIgZz10LnBhcmNhdHNWaWV3TW9kZWwuZGltZW5zaW9uc1tzXSxtPXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW3MrMV07cj0oZy54K2cud2lkdGgrbS54KS8yLGk9KHQudG9wWXNbc10rdC50b3BZc1tzKzFdK3QuaGVpZ2h0KS8yO2JyZWFrfXZhciB5PXQucGFyY2F0c1ZpZXdNb2RlbC54K3IsYj10LnBhcmNhdHNWaWV3TW9kZWwueStpLF89bC5tb3N0UmVhZGFibGUodC5tb2RlbC5jb2xvcixbXCJibGFja1wiLFwid2hpdGVcIl0pLHc9dC5tb2RlbC5jb3VudCxrPXcvdC5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmNvdW50LEE9e2NvdW50TGFiZWw6dyxwcm9iYWJpbGl0eUxhYmVsOmsudG9GaXhlZCgzKX0sVD1bXTstMSE9PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKFwiY291bnRcIikmJlQucHVzaChbXCJDb3VudDpcIixBLmNvdW50TGFiZWxdLmpvaW4oXCIgXCIpKSwtMSE9PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKFwicHJvYmFiaWxpdHlcIikmJlQucHVzaChbXCJQOlwiLEEucHJvYmFiaWxpdHlMYWJlbF0uam9pbihcIiBcIikpO3ZhciBNPVQuam9pbihcIjxicj5cIiksUz1uLm1vdXNlKHUpWzBdO2EubG9uZUhvdmVyKHt0cmFjZTpoLHg6eS1wLmxlZnQrZC5sZWZ0LHk6Yi1wLnRvcCtkLnRvcCx0ZXh0Ok0sY29sb3I6dC5tb2RlbC5jb2xvcixib3JkZXJDb2xvcjpcImJsYWNrXCIsZm9udEZhbWlseTonTW9uYWNvLCBcIkNvdXJpZXIgTmV3XCIsIG1vbm9zcGFjZScsZm9udFNpemU6MTAsZm9udENvbG9yOl8saWRlYWxBbGlnbjpTPHk/XCJyaWdodFwiOlwibGVmdFwiLGhvdmVydGVtcGxhdGU6KGgubGluZXx8e30pLmhvdmVydGVtcGxhdGUsaG92ZXJ0ZW1wbGF0ZUxhYmVsczpBLGV2ZW50RGF0YTpbe2RhdGE6aC5faW5wdXQsZnVsbERhdGE6aCxjb3VudDp3LHByb2JhYmlsaXR5Omt9XX0se2NvbnRhaW5lcjpmLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpmLl9wYXBlci5ub2RlKCksZ2Q6dX0pfX19ZnVuY3Rpb24gZyh0KXtpZighdC5wYXJjYXRzVmlld01vZGVsLmRyYWdEaW1lbnNpb24mJih5KG4uc2VsZWN0KHRoaXMpKSxhLmxvbmVVbmhvdmVyKHQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdi5fZnVsbExheW91dC5faG92ZXJsYXllci5ub2RlKCkpLHQucGFyY2F0c1ZpZXdNb2RlbC5wYXRoU2VsZWN0aW9uLnNvcnQocCksLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZihcInNraXBcIikpKXt2YXIgZT12KHQpO3QucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdi5lbWl0KFwicGxvdGx5X3VuaG92ZXJcIix7cG9pbnRzOmUsZXZlbnQ6bi5ldmVudH0pfX1mdW5jdGlvbiB2KHQpe2Zvcih2YXIgZT1bXSxyPXoodC5wYXJjYXRzVmlld01vZGVsKSxuPTA7bjx0Lm1vZGVsLnZhbHVlSW5kcy5sZW5ndGg7bisrKXt2YXIgaT10Lm1vZGVsLnZhbHVlSW5kc1tuXTtlLnB1c2goe2N1cnZlTnVtYmVyOnIscG9pbnROdW1iZXI6aX0pfXJldHVybiBlfWZ1bmN0aW9uIG0odCl7aWYoLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZihcInNraXBcIikpe3ZhciBlPXYodCk7dC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LmVtaXQoXCJwbG90bHlfY2xpY2tcIix7cG9pbnRzOmUsZXZlbnQ6bi5ldmVudH0pfX1mdW5jdGlvbiB5KHQpe3QuYXR0cihcImZpbGxcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5tb2RlbC5jb2xvcn0pLmF0dHIoXCJmaWxsLW9wYWNpdHlcIiwuNikuYXR0cihcInN0cm9rZVwiLFwibGlnaHRncmF5XCIpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwuMikuYXR0cihcInN0cm9rZS1vcGFjaXR5XCIsMSl9ZnVuY3Rpb24geCh0KXt0LmF0dHIoXCJmaWxsLW9wYWNpdHlcIiwuOCkuYXR0cihcInN0cm9rZVwiLGZ1bmN0aW9uKHQpe3JldHVybiBsLm1vc3RSZWFkYWJsZSh0Lm1vZGVsLmNvbG9yLFtcImJsYWNrXCIsXCJ3aGl0ZVwiXSl9KS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsLjMpfWZ1bmN0aW9uIGIodCl7dC5zZWxlY3QoXCJyZWN0LmNhdHJlY3RcIikuYXR0cihcInN0cm9rZVwiLFwiYmxhY2tcIikuYXR0cihcInN0cm9rZS13aWR0aFwiLDEpLmF0dHIoXCJzdHJva2Utb3BhY2l0eVwiLDEpfWZ1bmN0aW9uIF8odCl7dC5hdHRyKFwic3Ryb2tlXCIsXCJibGFja1wiKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsLjIpLmF0dHIoXCJzdHJva2Utb3BhY2l0eVwiLDEpLmF0dHIoXCJmaWxsLW9wYWNpdHlcIiwxKX1mdW5jdGlvbiB3KHQpe3ZhciBlPXQucGFyY2F0c1ZpZXdNb2RlbC5wYXRoU2VsZWN0aW9uLHI9dC5jYXRlZ29yeVZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25JbmQsbj10LmNhdGVnb3J5Vmlld01vZGVsLm1vZGVsLmNhdGVnb3J5SW5kO3JldHVybiBlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5tb2RlbC5jYXRlZ29yeUluZHNbcl09PT1uJiZlLm1vZGVsLmNvbG9yPT09dC5jb2xvcn0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBpPW4uc2VsZWN0KHQpLmRhdHVtKCkucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdixhPW4uc2VsZWN0KHQucGFyZW50Tm9kZSkuc2VsZWN0QWxsKFwicmVjdC5iYW5kcmVjdFwiKSxvPVtdO2EuZWFjaChmdW5jdGlvbih0KXt3KHQpLmVhY2goZnVuY3Rpb24odCl7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobyx2KHQpKX0pfSksaS5lbWl0KGUse3BvaW50czpvLGV2ZW50OnJ9KX1mdW5jdGlvbiBBKHQsZSxyKXt2YXIgaT1uLnNlbGVjdCh0KS5kYXR1bSgpLGE9aS5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LG89dyhpKSxzPVtdO28uZWFjaChmdW5jdGlvbih0KXtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShzLHYodCkpfSksYS5lbWl0KGUse3BvaW50czpzLGV2ZW50OnJ9KX1mdW5jdGlvbiBUKHQsZSl7dmFyIHIsaSxhPW4uc2VsZWN0KGUucGFyZW50Tm9kZSkuc2VsZWN0KFwicmVjdC5jYXRyZWN0XCIpLG89YS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz1hLmRhdHVtKCksbD1zLnBhcmNhdHNWaWV3TW9kZWwsYz1sLm1vZGVsLmRpbWVuc2lvbnNbcy5tb2RlbC5kaW1lbnNpb25JbmRdLHU9bC50cmFjZSxoPW8udG9wK28uaGVpZ2h0LzI7bC5kaW1lbnNpb25zLmxlbmd0aD4xJiZjLmRpc3BsYXlJbmQ9PT1sLmRpbWVuc2lvbnMubGVuZ3RoLTE/KHI9by5sZWZ0LGk9XCJsZWZ0XCIpOihyPW8ubGVmdCtvLndpZHRoLGk9XCJyaWdodFwiKTt2YXIgZj1zLm1vZGVsLmNvdW50LHA9cy5tb2RlbC5jYXRlZ29yeUxhYmVsLGQ9Zi9zLnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuY291bnQsZz17Y291bnRMYWJlbDpmLGNhdGVnb3J5TGFiZWw6cCxwcm9iYWJpbGl0eUxhYmVsOmQudG9GaXhlZCgzKX0sdj1bXTstMSE9PXMucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKFwiY291bnRcIikmJnYucHVzaChbXCJDb3VudDpcIixnLmNvdW50TGFiZWxdLmpvaW4oXCIgXCIpKSwtMSE9PXMucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKFwicHJvYmFiaWxpdHlcIikmJnYucHVzaChbXCJQKFwiK2cuY2F0ZWdvcnlMYWJlbCtcIik6XCIsZy5wcm9iYWJpbGl0eUxhYmVsXS5qb2luKFwiIFwiKSk7dmFyIG09di5qb2luKFwiPGJyPlwiKTtyZXR1cm57dHJhY2U6dSx4OnItdC5sZWZ0LHk6aC10LnRvcCx0ZXh0Om0sY29sb3I6XCJsaWdodGdyYXlcIixib3JkZXJDb2xvcjpcImJsYWNrXCIsZm9udEZhbWlseTonTW9uYWNvLCBcIkNvdXJpZXIgTmV3XCIsIG1vbm9zcGFjZScsZm9udFNpemU6MTIsZm9udENvbG9yOlwiYmxhY2tcIixpZGVhbEFsaWduOmksaG92ZXJ0ZW1wbGF0ZTp1LmhvdmVydGVtcGxhdGUsaG92ZXJ0ZW1wbGF0ZUxhYmVsczpnLGV2ZW50RGF0YTpbe2RhdGE6dS5faW5wdXQsZnVsbERhdGE6dSxjb3VudDpmLGNhdGVnb3J5OnAscHJvYmFiaWxpdHk6ZH1dfX1mdW5jdGlvbiBNKHQpe2lmKCF0LnBhcmNhdHNWaWV3TW9kZWwuZHJhZ0RpbWVuc2lvbiYmLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZihcInNraXBcIikpe2lmKG4ubW91c2UodGhpcylbMV08LTEpcmV0dXJuO3ZhciBlLHI9dC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LGk9ci5fZnVsbExheW91dCxzPWkuX3BhcGVyZGl2Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjPXQucGFyY2F0c1ZpZXdNb2RlbC5ob3Zlcm9uO2lmKFwiY29sb3JcIj09PWM/KCFmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KS5kYXR1bSgpLHI9dyhlKTt4KHIpLHIuZWFjaChmdW5jdGlvbigpe28ucmFpc2VUb1RvcCh0aGlzKX0pLG4uc2VsZWN0KHQucGFyZW50Tm9kZSkuc2VsZWN0QWxsKFwicmVjdC5iYW5kcmVjdFwiKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sb3I9PT1lLmNvbG9yfSkuZWFjaChmdW5jdGlvbigpe28ucmFpc2VUb1RvcCh0aGlzKSxuLnNlbGVjdCh0aGlzKS5hdHRyKFwic3Ryb2tlXCIsXCJibGFja1wiKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsMS41KX0pfSh0aGlzKSxBKHRoaXMsXCJwbG90bHlfaG92ZXJcIixuLmV2ZW50KSk6KCFmdW5jdGlvbih0KXtuLnNlbGVjdCh0LnBhcmVudE5vZGUpLnNlbGVjdEFsbChcInJlY3QuYmFuZHJlY3RcIikuZWFjaChmdW5jdGlvbih0KXt2YXIgZT13KHQpO3goZSksZS5lYWNoKGZ1bmN0aW9uKCl7by5yYWlzZVRvVG9wKHRoaXMpfSl9KSxuLnNlbGVjdCh0LnBhcmVudE5vZGUpLnNlbGVjdChcInJlY3QuY2F0cmVjdFwiKS5hdHRyKFwic3Ryb2tlXCIsXCJibGFja1wiKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsMi41KX0odGhpcyksayh0aGlzLFwicGxvdGx5X2hvdmVyXCIsbi5ldmVudCkpLC0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoXCJub25lXCIpKVwiY2F0ZWdvcnlcIj09PWM/ZT1UKHMsdGhpcyk6XCJjb2xvclwiPT09Yz9lPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1uLnNlbGVjdChlKS5kYXR1bSgpLHM9by5jYXRlZ29yeVZpZXdNb2RlbCxjPXMucGFyY2F0c1ZpZXdNb2RlbCx1PWMubW9kZWwuZGltZW5zaW9uc1tzLm1vZGVsLmRpbWVuc2lvbkluZF0saD1jLnRyYWNlLGY9YS55K2EuaGVpZ2h0LzI7Yy5kaW1lbnNpb25zLmxlbmd0aD4xJiZ1LmRpc3BsYXlJbmQ9PT1jLmRpbWVuc2lvbnMubGVuZ3RoLTE/KHI9YS5sZWZ0LGk9XCJsZWZ0XCIpOihyPWEubGVmdCthLndpZHRoLGk9XCJyaWdodFwiKTt2YXIgcD1zLm1vZGVsLmNhdGVnb3J5TGFiZWwsZD1vLnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuY291bnQsZz0wO28uY2F0ZWdvcnlWaWV3TW9kZWwuYmFuZHMuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNvbG9yPT09by5jb2xvciYmKGcrPXQuY291bnQpfSk7dmFyIHY9cy5tb2RlbC5jb3VudCxtPTA7Yy5wYXRoU2VsZWN0aW9uLmVhY2goZnVuY3Rpb24odCl7dC5tb2RlbC5jb2xvcj09PW8uY29sb3ImJihtKz10Lm1vZGVsLmNvdW50KX0pO3ZhciB5PWcvZCx4PWcvbSxiPWcvdixfPXtjb3VudExhYmVsOmQsY2F0ZWdvcnlMYWJlbDpwLHByb2JhYmlsaXR5TGFiZWw6eS50b0ZpeGVkKDMpfSx3PVtdOy0xIT09cy5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoXCJjb3VudFwiKSYmdy5wdXNoKFtcIkNvdW50OlwiLF8uY291bnRMYWJlbF0uam9pbihcIiBcIikpLC0xIT09cy5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoXCJwcm9iYWJpbGl0eVwiKSYmKHcucHVzaChcIlAoY29sb3IgXFx1MjIyOSBcIitwK1wiKTogXCIrXy5wcm9iYWJpbGl0eUxhYmVsKSx3LnB1c2goXCJQKFwiK3ArXCIgfCBjb2xvcik6IFwiK3gudG9GaXhlZCgzKSksdy5wdXNoKFwiUChjb2xvciB8IFwiK3ArXCIpOiBcIitiLnRvRml4ZWQoMykpKTt2YXIgaz13LmpvaW4oXCI8YnI+XCIpLEE9bC5tb3N0UmVhZGFibGUoby5jb2xvcixbXCJibGFja1wiLFwid2hpdGVcIl0pO3JldHVybnt0cmFjZTpoLHg6ci10LmxlZnQseTpmLXQudG9wLHRleHQ6ayxjb2xvcjpvLmNvbG9yLGJvcmRlckNvbG9yOlwiYmxhY2tcIixmb250RmFtaWx5OidNb25hY28sIFwiQ291cmllciBOZXdcIiwgbW9ub3NwYWNlJyxmb250Q29sb3I6QSxmb250U2l6ZToxMCxpZGVhbEFsaWduOmksaG92ZXJ0ZW1wbGF0ZTpoLmhvdmVydGVtcGxhdGUsaG92ZXJ0ZW1wbGF0ZUxhYmVsczpfLGV2ZW50RGF0YTpbe2RhdGE6aC5faW5wdXQsZnVsbERhdGE6aCxjYXRlZ29yeTpwLGNvdW50OmQscHJvYmFiaWxpdHk6eSxjYXRlZ29yeWNvdW50OnYsY29sb3Jjb3VudDptLGJhbmRjb2xvcmNvdW50Omd9XX19KHMsdGhpcyk6XCJkaW1lbnNpb25cIj09PWMmJihlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107cmV0dXJuIG4uc2VsZWN0KGUucGFyZW50Tm9kZS5wYXJlbnROb2RlKS5zZWxlY3RBbGwoXCJnLmNhdGVnb3J5XCIpLnNlbGVjdChcInJlY3QuY2F0cmVjdFwiKS5lYWNoKGZ1bmN0aW9uKCl7ci5wdXNoKFQodCx0aGlzKSl9KSxyfShzLHRoaXMpKSxlJiZhLm11bHRpSG92ZXJzKGUse2NvbnRhaW5lcjppLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjppLl9wYXBlci5ub2RlKCksZ2Q6cn0pfX1mdW5jdGlvbiBTKHQpe3ZhciBlPXQucGFyY2F0c1ZpZXdNb2RlbDtpZighZS5kcmFnRGltZW5zaW9uJiYoeShlLnBhdGhTZWxlY3Rpb24pLGIoZS5kaW1lbnNpb25TZWxlY3Rpb24uc2VsZWN0QWxsKFwiZy5jYXRlZ29yeVwiKSksXyhlLmRpbWVuc2lvblNlbGVjdGlvbi5zZWxlY3RBbGwoXCJnLmNhdGVnb3J5XCIpLnNlbGVjdEFsbChcInJlY3QuYmFuZHJlY3RcIikpLGEubG9uZVVuaG92ZXIoZS5ncmFwaERpdi5fZnVsbExheW91dC5faG92ZXJsYXllci5ub2RlKCkpLGUucGF0aFNlbGVjdGlvbi5zb3J0KHApLC0xPT09ZS5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKFwic2tpcFwiKSkpe1wiY29sb3JcIj09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3Zlcm9uP0EodGhpcyxcInBsb3RseV91bmhvdmVyXCIsbi5ldmVudCk6ayh0aGlzLFwicGxvdGx5X3VuaG92ZXJcIixuLmV2ZW50KX19ZnVuY3Rpb24gRSh0KXtcImZpeGVkXCIhPT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQmJih0LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kPXQubW9kZWwuZGlzcGxheUluZCx0LmluaXRpYWxEcmFnRGltZW5zaW9uRGlzcGxheUluZHM9dC5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmRpbWVuc2lvbnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3BsYXlJbmR9KSx0LmRyYWdIYXNNb3ZlZD0hMSx0LmRyYWdDYXRlZ29yeURpc3BsYXlJbmQ9bnVsbCxuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoXCJnLmNhdGVnb3J5XCIpLnNlbGVjdChcInJlY3QuY2F0cmVjdFwiKS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4ubW91c2UodGhpcylbMF0saT1uLm1vdXNlKHRoaXMpWzFdOy0yPD1yJiZyPD1lLndpZHRoKzImJi0yPD1pJiZpPD1lLmhlaWdodCsyJiYodC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kPWUubW9kZWwuZGlzcGxheUluZCx0LmluaXRpYWxEcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kcz10Lm1vZGVsLmNhdGVnb3JpZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3BsYXlJbmR9KSxlLm1vZGVsLmRyYWdZPWUueSxvLnJhaXNlVG9Ub3AodGhpcy5wYXJlbnROb2RlKSxuLnNlbGVjdCh0aGlzLnBhcmVudE5vZGUpLnNlbGVjdEFsbChcInJlY3QuYmFuZHJlY3RcIikuZWFjaChmdW5jdGlvbihlKXtlLnk8aSYmaTw9ZS55K2UuaGVpZ2h0JiYodC5wb3RlbnRpYWxDbGlja0JhbmQ9dGhpcyl9KSl9KSx0LnBhcmNhdHNWaWV3TW9kZWwuZHJhZ0RpbWVuc2lvbj10LGEubG9uZVVuaG92ZXIodC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2Ll9mdWxsTGF5b3V0Ll9ob3ZlcmxheWVyLm5vZGUoKSkpfWZ1bmN0aW9uIEModCl7aWYoXCJmaXhlZFwiIT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50JiYodC5kcmFnSGFzTW92ZWQ9ITAsbnVsbCE9PXQuZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmQpKXt2YXIgZT10LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kLHI9ZS0xLGk9ZSsxLGE9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbZV07aWYobnVsbCE9PXQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZCl7dmFyIG89YS5jYXRlZ29yaWVzW3QuZHJhZ0NhdGVnb3J5RGlzcGxheUluZF07by5tb2RlbC5kcmFnWSs9bi5ldmVudC5keTt2YXIgcz1vLm1vZGVsLmRyYWdZLGw9by5tb2RlbC5kaXNwbGF5SW5kLGM9YS5jYXRlZ29yaWVzLHU9Y1tsLTFdLGg9Y1tsKzFdO3ZvaWQgMCE9PXUmJnM8dS55K3UuaGVpZ2h0LzImJihvLm1vZGVsLmRpc3BsYXlJbmQ9dS5tb2RlbC5kaXNwbGF5SW5kLHUubW9kZWwuZGlzcGxheUluZD1sKSx2b2lkIDAhPT1oJiZzK28uaGVpZ2h0PmgueStoLmhlaWdodC8yJiYoby5tb2RlbC5kaXNwbGF5SW5kPWgubW9kZWwuZGlzcGxheUluZCxoLm1vZGVsLmRpc3BsYXlJbmQ9bCksdC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kPW8ubW9kZWwuZGlzcGxheUluZH1pZihudWxsPT09dC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kfHxcImZyZWVmb3JtXCI9PT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQpe2EubW9kZWwuZHJhZ1g9bi5ldmVudC54O3ZhciBmPXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW3JdLHA9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbaV07dm9pZCAwIT09ZiYmYS5tb2RlbC5kcmFnWDxmLngrZi53aWR0aCYmKGEubW9kZWwuZGlzcGxheUluZD1mLm1vZGVsLmRpc3BsYXlJbmQsZi5tb2RlbC5kaXNwbGF5SW5kPWUpLHZvaWQgMCE9PXAmJmEubW9kZWwuZHJhZ1grYS53aWR0aD5wLngmJihhLm1vZGVsLmRpc3BsYXlJbmQ9cC5tb2RlbC5kaXNwbGF5SW5kLHAubW9kZWwuZGlzcGxheUluZD10LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kKSx0LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kPWEubW9kZWwuZGlzcGxheUluZH1SKHQucGFyY2F0c1ZpZXdNb2RlbCksUCh0LnBhcmNhdHNWaWV3TW9kZWwpLEkodC5wYXJjYXRzVmlld01vZGVsKSxPKHQucGFyY2F0c1ZpZXdNb2RlbCl9fWZ1bmN0aW9uIEwodCl7aWYoXCJmaXhlZFwiIT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50JiZudWxsIT09dC5kcmFnRGltZW5zaW9uRGlzcGxheUluZCl7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKFwidGV4dFwiKS5hdHRyKFwiZm9udC13ZWlnaHRcIixcIm5vcm1hbFwiKTt2YXIgZT17fSxyPXoodC5wYXJjYXRzVmlld01vZGVsKSxhPXQucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5SW5kfSksbz10LmluaXRpYWxEcmFnRGltZW5zaW9uRGlzcGxheUluZHMuc29tZShmdW5jdGlvbih0LGUpe3JldHVybiB0IT09YVtlXX0pO28mJmEuZm9yRWFjaChmdW5jdGlvbihyLG4pe3ZhciBpPXQucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25zW25dLmNvbnRhaW5lckluZDtlW1wiZGltZW5zaW9uc1tcIitpK1wiXS5kaXNwbGF5aW5kZXhcIl09cn0pO3ZhciBzPSExO2lmKG51bGwhPT10LmRyYWdDYXRlZ29yeURpc3BsYXlJbmQpe3ZhciBsPXQubW9kZWwuY2F0ZWdvcmllcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheUluZH0pO2lmKHM9dC5pbml0aWFsRHJhZ0NhdGVnb3J5RGlzcGxheUluZHMuc29tZShmdW5jdGlvbih0LGUpe3JldHVybiB0IT09bFtlXX0pKXt2YXIgYz10Lm1vZGVsLmNhdGVnb3JpZXMuc2xpY2UoKS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGlzcGxheUluZC1lLmRpc3BsYXlJbmR9KSx1PWMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3J5VmFsdWV9KSxoPWMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3J5TGFiZWx9KTtlW1wiZGltZW5zaW9uc1tcIit0Lm1vZGVsLmNvbnRhaW5lckluZCtcIl0uY2F0ZWdvcnlhcnJheVwiXT1bdV0sZVtcImRpbWVuc2lvbnNbXCIrdC5tb2RlbC5jb250YWluZXJJbmQrXCJdLnRpY2t0ZXh0XCJdPVtoXSxlW1wiZGltZW5zaW9uc1tcIit0Lm1vZGVsLmNvbnRhaW5lckluZCtcIl0uY2F0ZWdvcnlvcmRlclwiXT1cImFycmF5XCJ9fWlmKC0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoXCJza2lwXCIpJiYhdC5kcmFnSGFzTW92ZWQmJnQucG90ZW50aWFsQ2xpY2tCYW5kJiYoXCJjb2xvclwiPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyb24/QSh0LnBvdGVudGlhbENsaWNrQmFuZCxcInBsb3RseV9jbGlja1wiLG4uZXZlbnQuc291cmNlRXZlbnQpOmsodC5wb3RlbnRpYWxDbGlja0JhbmQsXCJwbG90bHlfY2xpY2tcIixuLmV2ZW50LnNvdXJjZUV2ZW50KSksdC5tb2RlbC5kcmFnWD1udWxsLG51bGwhPT10LmRyYWdDYXRlZ29yeURpc3BsYXlJbmQpdC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbdC5kcmFnRGltZW5zaW9uRGlzcGxheUluZF0uY2F0ZWdvcmllc1t0LmRyYWdDYXRlZ29yeURpc3BsYXlJbmRdLm1vZGVsLmRyYWdZPW51bGwsdC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kPW51bGw7dC5kcmFnRGltZW5zaW9uRGlzcGxheUluZD1udWxsLHQucGFyY2F0c1ZpZXdNb2RlbC5kcmFnRGltZW5zaW9uPW51bGwsdC5kcmFnSGFzTW92ZWQ9bnVsbCx0LnBvdGVudGlhbENsaWNrQmFuZD1udWxsLFIodC5wYXJjYXRzVmlld01vZGVsKSxQKHQucGFyY2F0c1ZpZXdNb2RlbCksbi50cmFuc2l0aW9uKCkuZHVyYXRpb24oMzAwKS5lYXNlKFwiY3ViaWMtaW4tb3V0XCIpLmVhY2goZnVuY3Rpb24oKXtJKHQucGFyY2F0c1ZpZXdNb2RlbCwhMCksTyh0LnBhcmNhdHNWaWV3TW9kZWwsITApfSkuZWFjaChcImVuZFwiLGZ1bmN0aW9uKCl7KG98fHMpJiZpLnJlc3R5bGUodC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LGUsW3JdKX0pfX1mdW5jdGlvbiB6KHQpe2Zvcih2YXIgZSxyPXQuZ3JhcGhEaXYuX2Z1bGxEYXRhLG49MDtuPHIubGVuZ3RoO24rKylpZih0LmtleT09PXJbbl0udWlkKXtlPW47YnJlYWt9cmV0dXJuIGV9ZnVuY3Rpb24gTyh0LGUpe3ZhciByO3ZvaWQgMD09PWUmJihlPSExKSx0LnBhdGhTZWxlY3Rpb24uZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5wYXRoc30saCksKHI9dC5wYXRoU2VsZWN0aW9uLGU/ci50cmFuc2l0aW9uKCk6cikuYXR0cihcImRcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5zdmdEfSl9ZnVuY3Rpb24gSSh0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGU/dC50cmFuc2l0aW9uKCk6dH12b2lkIDA9PT1lJiYoZT0hMSksdC5kaW1lbnNpb25TZWxlY3Rpb24uZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5kaW1lbnNpb25zfSxoKTt2YXIgaT10LmRpbWVuc2lvblNlbGVjdGlvbi5zZWxlY3RBbGwoXCJnLmNhdGVnb3J5XCIpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcmllc30saCk7cih0LmRpbWVuc2lvblNlbGVjdGlvbikuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKFwiK3QueCtcIiwgMClcIn0pLHIoaSkuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKDAsIFwiK3QueStcIilcIn0pLGkuc2VsZWN0KFwiLmRpbWxhYmVsXCIpLnRleHQoZnVuY3Rpb24odCxlKXtyZXR1cm4gMD09PWU/dC5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmRpbWVuc2lvbnNbdC5tb2RlbC5kaW1lbnNpb25JbmRdLmRpbWVuc2lvbkxhYmVsOm51bGx9KSxpLnNlbGVjdChcIi5jYXRsYWJlbFwiKS5hdHRyKFwidGV4dC1hbmNob3JcIixmdW5jdGlvbih0KXtyZXR1cm4gZih0KT9cInN0YXJ0XCI6XCJlbmRcIn0pLmF0dHIoXCJ4XCIsZnVuY3Rpb24odCl7cmV0dXJuIGYodCk/dC53aWR0aCs1Oi01fSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZSxyO2YodCk/KGU9dC53aWR0aCs1LHI9XCJzdGFydFwiKTooZT0tNSxyPVwiZW5kXCIpLG4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbChcInRzcGFuXCIpLmF0dHIoXCJ4XCIsZSkuYXR0cihcInRleHQtYW5jaG9yXCIscil9KTt2YXIgYT1pLnNlbGVjdEFsbChcInJlY3QuYmFuZHJlY3RcIikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5iYW5kc30saCkscz1hLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKS5hdHRyKFwiY2xhc3NcIixcImJhbmRyZWN0XCIpLmF0dHIoXCJjdXJzb3JcIixcIm1vdmVcIikuYXR0cihcInN0cm9rZS1vcGFjaXR5XCIsMCkuYXR0cihcImZpbGxcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2xvcn0pLmF0dHIoXCJmaWxsLW9wYWNpdHlcIiwwKTthLmF0dHIoXCJmaWxsXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sb3J9KS5hdHRyKFwid2lkdGhcIixmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aH0pLmF0dHIoXCJoZWlnaHRcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KS5hdHRyKFwieVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSxfKHMpLGEuZWFjaChmdW5jdGlvbigpe28ucmFpc2VUb1RvcCh0aGlzKX0pLGEuZXhpdCgpLnJlbW92ZSgpfWZ1bmN0aW9uIEQodCxlLHIsaSxhKXt2YXIgbyxzLGw9W10sYz1bXTtmb3Iocz0wO3M8ci5sZW5ndGgtMTtzKyspbz1uLmludGVycG9sYXRlTnVtYmVyKHJbc10rdFtzXSx0W3MrMV0pLGwucHVzaChvKGEpKSxjLnB1c2gobygxLWEpKTt2YXIgdT1cIk0gXCIrdFswXStcIixcIitlWzBdO2Zvcih1Kz1cImxcIityWzBdK1wiLDAgXCIscz0xO3M8ci5sZW5ndGg7cysrKXUrPVwiQ1wiK2xbcy0xXStcIixcIitlW3MtMV0rXCIgXCIrY1tzLTFdK1wiLFwiK2Vbc10rXCIgXCIrdFtzXStcIixcIitlW3NdLHUrPVwibFwiK3Jbc10rXCIsMCBcIjtmb3IodSs9XCJsMCxcIitpK1wiIFwiLHUrPVwibCAtXCIrcltyLmxlbmd0aC0xXStcIiwwIFwiLHM9ci5sZW5ndGgtMjtzPj0wO3MtLSl1Kz1cIkNcIitjW3NdK1wiLFwiKyhlW3MrMV0raSkrXCIgXCIrbFtzXStcIixcIisoZVtzXStpKStcIiBcIisodFtzXStyW3NdKStcIixcIisoZVtzXStpKSx1Kz1cImwtXCIrcltzXStcIiwwIFwiO3JldHVybiB1Kz1cIlpcIn1mdW5jdGlvbiBQKHQpe3ZhciBlPXQuZGltZW5zaW9ucyxyPXQubW9kZWwsbj1lLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yaWVzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC55fSl9KSxpPXQubW9kZWwuZGltZW5zaW9ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcmllcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheUluZH0pfSksYT10Lm1vZGVsLmRpbWVuc2lvbnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3BsYXlJbmR9KSxvPXQuZGltZW5zaW9ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubW9kZWwuZGltZW5zaW9uSW5kfSkscz1lLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC54fSksbD1lLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aH0pLGM9W107Zm9yKHZhciB1IGluIHIucGF0aHMpci5wYXRocy5oYXNPd25Qcm9wZXJ0eSh1KSYmYy5wdXNoKHIucGF0aHNbdV0pO2Z1bmN0aW9uIGgodCl7dmFyIGU9dC5jYXRlZ29yeUluZHMubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGlbZV1bdF19KTtyZXR1cm4gby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KX1jLnNvcnQoZnVuY3Rpb24oZSxyKXt2YXIgbj1oKGUpLGk9aChyKTtyZXR1cm5cImJhY2t3YXJkXCI9PT10LnNvcnRwYXRocyYmKG4ucmV2ZXJzZSgpLGkucmV2ZXJzZSgpKSxuLnB1c2goZS52YWx1ZUluZHNbMF0pLGkucHVzaChyLnZhbHVlSW5kc1swXSksdC5idW5kbGVjb2xvcnMmJihuLnVuc2hpZnQoZS5yYXdDb2xvciksaS51bnNoaWZ0KHIucmF3Q29sb3IpKSxuPGk/LTE6bj5pPzE6MH0pO2Zvcih2YXIgZj1uZXcgQXJyYXkoYy5sZW5ndGgpLHA9ZVswXS5tb2RlbC5jb3VudCxkPWVbMF0uY2F0ZWdvcmllcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pLGc9MDtnPGMubGVuZ3RoO2crKyl7dmFyIHYsbT1jW2ddO3Y9cD4wP2QqKG0uY291bnQvcCk6MDtmb3IodmFyIHkseD1uZXcgQXJyYXkobi5sZW5ndGgpLGI9MDtiPG0uY2F0ZWdvcnlJbmRzLmxlbmd0aDtiKyspe3ZhciBfPW0uY2F0ZWdvcnlJbmRzW2JdLHc9aVtiXVtfXSxrPWFbYl07eFtrXT1uW2tdW3ddLG5ba11bd10rPXY7dmFyIEE9dC5kaW1lbnNpb25zW2tdLmNhdGVnb3JpZXNbd10sVD1BLmJhbmRzLmxlbmd0aCxNPUEuYmFuZHNbVC0xXTtpZih2b2lkIDA9PT1NfHxtLnJhd0NvbG9yIT09TS5yYXdDb2xvcil7dmFyIFM9dm9pZCAwPT09TT8wOk0ueStNLmhlaWdodDtBLmJhbmRzLnB1c2goe2tleTpTLGNvbG9yOm0uY29sb3IscmF3Q29sb3I6bS5yYXdDb2xvcixoZWlnaHQ6dix3aWR0aDpBLndpZHRoLGNvdW50Om0uY291bnQseTpTLGNhdGVnb3J5Vmlld01vZGVsOkEscGFyY2F0c1ZpZXdNb2RlbDp0fSl9ZWxzZXt2YXIgRT1BLmJhbmRzW1QtMV07RS5oZWlnaHQrPXYsRS5jb3VudCs9bS5jb3VudH19eT1cImhzcGxpbmVcIj09PXQucGF0aFNoYXBlP0Qocyx4LGwsdiwuNSk6RChzLHgsbCx2LDApLGZbZ109e2tleTptLnZhbHVlSW5kc1swXSxtb2RlbDptLGhlaWdodDp2LGxlZnRYczpzLHRvcFlzOngsZGltV2lkdGhzOmwsc3ZnRDp5LHBhcmNhdHNWaWV3TW9kZWw6dH19dC5wYXRocz1mfWZ1bmN0aW9uIFIodCl7dmFyIGU9dC5tb2RlbC5kaW1lbnNpb25zLm1hcChmdW5jdGlvbih0KXtyZXR1cm57ZGlzcGxheUluZDp0LmRpc3BsYXlJbmQsZGltZW5zaW9uSW5kOnQuZGltZW5zaW9uSW5kfX0pO2Uuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmRpc3BsYXlJbmQtZS5kaXNwbGF5SW5kfSk7dmFyIHI9W107Zm9yKHZhciBuIGluIGUpe3ZhciBpPWVbbl0uZGltZW5zaW9uSW5kLGE9dC5tb2RlbC5kaW1lbnNpb25zW2ldO3IucHVzaChGKHQsYSkpfXQuZGltZW5zaW9ucz1yfWZ1bmN0aW9uIEYodCxlKXt2YXIgcixuPXQubW9kZWwuZGltZW5zaW9ucy5sZW5ndGgsaT1lLmRpc3BsYXlJbmQ7cj00MCsobj4xPyh0LndpZHRoLTgwLTE2KS8obi0xKTowKSppO3ZhciBhLG8scyxsLGMsdT1bXSxoPXQubW9kZWwubWF4Q2F0cyxmPWUuY2F0ZWdvcmllcy5sZW5ndGgscD1lLmNvdW50LGQ9dC5oZWlnaHQtOCooaC0xKSxnPTgqKGgtZikvMix2PWUuY2F0ZWdvcmllcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJue2Rpc3BsYXlJbmQ6dC5kaXNwbGF5SW5kLGNhdGVnb3J5SW5kOnQuY2F0ZWdvcnlJbmR9fSk7Zm9yKHYuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmRpc3BsYXlJbmQtZS5kaXNwbGF5SW5kfSksYz0wO2M8ZjtjKyspbD12W2NdLmNhdGVnb3J5SW5kLG89ZS5jYXRlZ29yaWVzW2xdLGE9cD4wP28uY291bnQvcCpkOjAscz17a2V5Om8udmFsdWVJbmRzWzBdLG1vZGVsOm8sd2lkdGg6MTYsaGVpZ2h0OmEseTpudWxsIT09by5kcmFnWT9vLmRyYWdZOmcsYmFuZHM6W10scGFyY2F0c1ZpZXdNb2RlbDp0fSxnPWcrYSs4LHUucHVzaChzKTtyZXR1cm57a2V5OmUuZGltZW5zaW9uSW5kLHg6bnVsbCE9PWUuZHJhZ1g/ZS5kcmFnWDpyLHk6MCx3aWR0aDoxNixtb2RlbDplLGNhdGVnb3JpZXM6dSxwYXJjYXRzVmlld01vZGVsOnQsZHJhZ0NhdGVnb3J5RGlzcGxheUluZDpudWxsLGRyYWdEaW1lbnNpb25EaXNwbGF5SW5kOm51bGwsaW5pdGlhbERyYWdEaW1lbnNpb25EaXNwbGF5SW5kczpudWxsLGluaXRpYWxEcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kczpudWxsLGRyYWdIYXNNb3ZlZDpudWxsLHBvdGVudGlhbENsaWNrQmFuZDpudWxsfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dShyLHQsbixlKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIjo3MjUsXCIuLi8uLi9wbG90X2FwaS9wbG90X2FwaVwiOjczNixkMzoxNTUsdGlueWNvbG9yMjo1MjJ9XSwxMDE0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vcGFyY2F0c1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9dC5fZnVsbExheW91dCxvPWEuX3BhcGVyLHM9YS5fc2l6ZTtuKHQsbyxlLHt3aWR0aDpzLncsaGVpZ2h0OnMuaCxtYXJnaW46e3Q6cy50LHI6cy5yLGI6cy5iLGw6cy5sfX0scixpKX19LHtcIi4vcGFyY2F0c1wiOjEwMTN9XSwxMDE1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL3Bsb3RzL2RvbWFpblwiKS5hdHRyaWJ1dGVzLGw9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxjPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLnRlbXBsYXRlZEFycmF5O2UuZXhwb3J0cz17ZG9tYWluOnMoe25hbWU6XCJwYXJjb29yZHNcIix0cmFjZTohMCxlZGl0VHlwZTpcImNhbGNcIn0pLGxhYmVsZm9udDpvKHtlZGl0VHlwZTpcImNhbGNcIn0pLHRpY2tmb250Om8oe2VkaXRUeXBlOlwiY2FsY1wifSkscmFuZ2Vmb250Om8oe2VkaXRUeXBlOlwiY2FsY1wifSksZGltZW5zaW9uczpjKFwiZGltZW5zaW9uXCIse2xhYmVsOnt2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHRpY2t2YWxzOmwoe30sYS50aWNrdmFscyx7ZWRpdFR5cGU6XCJjYWxjXCJ9KSx0aWNrdGV4dDpsKHt9LGEudGlja3RleHQse2VkaXRUeXBlOlwiY2FsY1wifSksdGlja2Zvcm1hdDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCIzc1wiLGVkaXRUeXBlOlwiY2FsY1wifSx2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LHJhbmdlOnt2YWxUeXBlOlwiaW5mb19hcnJheVwiLGl0ZW1zOlt7dmFsVHlwZTpcIm51bWJlclwiLGVkaXRUeXBlOlwiY2FsY1wifSx7dmFsVHlwZTpcIm51bWJlclwiLGVkaXRUeXBlOlwiY2FsY1wifV0sZWRpdFR5cGU6XCJjYWxjXCJ9LGNvbnN0cmFpbnRyYW5nZTp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixmcmVlTGVuZ3RoOiEwLGRpbWVuc2lvbnM6XCIxLTJcIixpdGVtczpbe3ZhbFR5cGU6XCJudW1iZXJcIixlZGl0VHlwZTpcImNhbGNcIn0se3ZhbFR5cGU6XCJudW1iZXJcIixlZGl0VHlwZTpcImNhbGNcIn1dLGVkaXRUeXBlOlwiY2FsY1wifSxtdWx0aXNlbGVjdDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSx2YWx1ZXM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGVkaXRUeXBlOlwiY2FsY1wifSksbGluZTpsKG4oXCJsaW5lXCIse2NvbG9yc2NhbGVEZmx0OlwiVmlyaWRpc1wiLGF1dG9Db2xvckRmbHQ6ITEsZWRpdFR5cGVPdmVycmlkZTpcImNhbGNcIn0pLHtjb2xvcmJhcjppLGVkaXRUeXBlOlwiY2FsY1wifSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIjo1NzksXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzXCI6NzYxLFwiLi4vLi4vcGxvdHMvZG9tYWluXCI6Nzc0LFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCI6Nzc1fV0sMTAxNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2NvbnN0YW50c1wiKSxpPXQoXCJkM1wiKSxhPXQoXCIuLi8uLi9saWIvZ3VwXCIpLmtleUZ1bixvPXQoXCIuLi8uLi9saWIvZ3VwXCIpLnJlcGVhdCxzPXQoXCIuLi8uLi9saWJcIikuc29ydGVyQXNjLGw9bi5iYXIuc25hcFJhdGlvO2Z1bmN0aW9uIGModCxlKXtyZXR1cm4gdCooMS1sKStlKmx9dmFyIHU9bi5iYXIuc25hcENsb3NlO2Z1bmN0aW9uIGgodCxlKXtyZXR1cm4gdCooMS11KStlKnV9ZnVuY3Rpb24gZih0LGUscil7aWYoZChlLHIpKXJldHVybiBlO2Zvcih2YXIgbj10WzBdLGk9bixhPTE7YTx0Lmxlbmd0aDthKyspe3ZhciBvPXRbYV07aWYoZTxoKG4sbykpcmV0dXJuIGMobixpKTtpZihlPG98fGE9PT10Lmxlbmd0aC0xKXJldHVybiBjKG8sbik7aT1uLG49b319ZnVuY3Rpb24gcCh0LGUscil7aWYoZChlLHIpKXJldHVybiBlO2Zvcih2YXIgbj10W3QubGVuZ3RoLTFdLGk9bixhPXQubGVuZ3RoLTI7YT49MDthLS0pe3ZhciBvPXRbYV07aWYoZT5oKG4sbykpcmV0dXJuIGMobixpKTtpZihlPm98fGE9PT10Lmxlbmd0aC0xKXJldHVybiBjKG8sbik7aT1uLG49b319ZnVuY3Rpb24gZCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKHQ+PWVbcl1bMF0mJnQ8PWVbcl1bMV0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZyh0KXt0LmF0dHIoXCJ4XCIsLW4uYmFyLmNhcHR1cmVXaWR0aC8yKS5hdHRyKFwid2lkdGhcIixuLmJhci5jYXB0dXJlV2lkdGgpfWZ1bmN0aW9uIHYodCl7dC5hdHRyKFwidmlzaWJpbGl0eVwiLFwidmlzaWJsZVwiKS5zdHlsZShcInZpc2liaWxpdHlcIixcInZpc2libGVcIikuYXR0cihcImZpbGxcIixcInllbGxvd1wiKS5hdHRyKFwib3BhY2l0eVwiLDApfWZ1bmN0aW9uIG0odCl7aWYoIXQuYnJ1c2guZmlsdGVyU3BlY2lmaWVkKXJldHVyblwiMCxcIit0LmhlaWdodDtmb3IodmFyIGUscixuLGk9eSh0LmJydXNoLmZpbHRlci5nZXRDb25zb2xpZGF0ZWQoKSx0LmhlaWdodCksYT1bMF0sbz1pLmxlbmd0aD9pWzBdWzBdOm51bGwscz0wO3M8aS5sZW5ndGg7cysrKXI9KGU9aVtzXSlbMV0tZVswXSxhLnB1c2gobyksYS5wdXNoKHIpLChuPXMrMSk8aS5sZW5ndGgmJihvPWlbbl1bMF0tZVsxXSk7cmV0dXJuIGEucHVzaCh0LmhlaWdodCksYX1mdW5jdGlvbiB5KHQsZSl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdCplfSkuc29ydChzKX0pfWZ1bmN0aW9uIHgoKXtpLnNlbGVjdChkb2N1bWVudC5ib2R5KS5zdHlsZShcImN1cnNvclwiLG51bGwpfWZ1bmN0aW9uIGIodCl7dC5hdHRyKFwic3Ryb2tlLWRhc2hhcnJheVwiLG0pfWZ1bmN0aW9uIF8odCxlKXt2YXIgcj1pLnNlbGVjdCh0KS5zZWxlY3RBbGwoXCIuaGlnaGxpZ2h0LCAuaGlnaGxpZ2h0LXNoYWRvd1wiKTtiKGU/ci50cmFuc2l0aW9uKCkuZHVyYXRpb24obi5iYXIuc25hcER1cmF0aW9uKS5lYWNoKFwiZW5kXCIsZSk6cil9ZnVuY3Rpb24gdyh0LGUpe3ZhciByLGk9dC5icnVzaCxhPU5hTixvPXt9O2lmKGkuZmlsdGVyU3BlY2lmaWVkKXt2YXIgcz10LmhlaWdodCxsPWkuZmlsdGVyLmdldENvbnNvbGlkYXRlZCgpLGM9eShsLHMpLHU9TmFOLGg9TmFOLGY9TmFOO2ZvcihyPTA7cjw9Yy5sZW5ndGg7cisrKXt2YXIgcD1jW3JdO2lmKHAmJnBbMF08PWUmJmU8PXBbMV0pe3U9cjticmVha31pZihoPXI/ci0xOk5hTixwJiZwWzBdPmUpe2Y9cjticmVha319aWYoYT11LGlzTmFOKGEpJiYoYT1pc05hTihoKXx8aXNOYU4oZik/aXNOYU4oaCk/ZjpoOmUtY1toXVsxXTxjW2ZdWzBdLWU/aDpmKSwhaXNOYU4oYSkpe3ZhciBkPWNbYV0sZz1mdW5jdGlvbih0LGUpe3ZhciByPW4uYmFyLmhhbmRsZUhlaWdodDtpZighKGU+dFsxXStyfHxlPHRbMF0tcikpcmV0dXJuIGU+PS45KnRbMV0rLjEqdFswXT9cIm5cIjplPD0uOSp0WzBdKy4xKnRbMV0/XCJzXCI6XCJuc1wifShkLGUpO2cmJihvLmludGVydmFsPWxbYV0sby5pbnRlcnZhbFBpeD1kLG8ucmVnaW9uPWcpfX1pZih0Lm9yZGluYWwmJiFvLnJlZ2lvbil7dmFyIHY9dC51bml0VGlja3ZhbHMsbT10LnVuaXRUb1BhZGRlZFB4LmludmVydChlKTtmb3Iocj0wO3I8di5sZW5ndGg7cisrKXt2YXIgeD1bLjI1KnZbTWF0aC5tYXgoci0xLDApXSsuNzUqdltyXSwuMjUqdltNYXRoLm1pbihyKzEsdi5sZW5ndGgtMSldKy43NSp2W3JdXTtpZihtPj14WzBdJiZtPD14WzFdKXtvLmNsaWNrYWJsZU9yZGluYWxSYW5nZT14O2JyZWFrfX19cmV0dXJuIG99ZnVuY3Rpb24gayh0KXt0Lm9uKFwibW91c2Vtb3ZlXCIsZnVuY3Rpb24odCl7aWYoaS5ldmVudC5wcmV2ZW50RGVmYXVsdCgpLCF0LnBhcmVudC5pbkJydXNoRHJhZyl7dmFyIGU9dyh0LHQuaGVpZ2h0LWkubW91c2UodGhpcylbMV0tMipuLnZlcnRpY2FsUGFkZGluZykscj1cImNyb3NzaGFpclwiO2UuY2xpY2thYmxlT3JkaW5hbFJhbmdlP3I9XCJwb2ludGVyXCI6ZS5yZWdpb24mJihyPWUucmVnaW9uK1wiLXJlc2l6ZVwiKSxpLnNlbGVjdChkb2N1bWVudC5ib2R5KS5zdHlsZShcImN1cnNvclwiLHIpfX0pLm9uKFwibW91c2VsZWF2ZVwiLGZ1bmN0aW9uKHQpe3QucGFyZW50LmluQnJ1c2hEcmFnfHx4KCl9KS5jYWxsKGkuYmVoYXZpb3IuZHJhZygpLm9uKFwiZHJhZ3N0YXJ0XCIsZnVuY3Rpb24odCl7aS5ldmVudC5zb3VyY2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKTt2YXIgZT10LmhlaWdodC1pLm1vdXNlKHRoaXMpWzFdLTIqbi52ZXJ0aWNhbFBhZGRpbmcscj10LnVuaXRUb1BhZGRlZFB4LmludmVydChlKSxhPXQuYnJ1c2gsbz13KHQsZSkscz1vLmludGVydmFsLGw9YS5zdmdCcnVzaDtpZihsLndhc0RyYWdnZWQ9ITEsbC5ncmFiYmluZ0Jhcj1cIm5zXCI9PT1vLnJlZ2lvbixsLmdyYWJiaW5nQmFyKXt2YXIgYz1zLm1hcCh0LnVuaXRUb1BhZGRlZFB4KTtsLmdyYWJQb2ludD1lLWNbMF0tbi52ZXJ0aWNhbFBhZGRpbmcsbC5iYXJMZW5ndGg9Y1sxXS1jWzBdfWwuY2xpY2thYmxlT3JkaW5hbFJhbmdlPW8uY2xpY2thYmxlT3JkaW5hbFJhbmdlLGwuc3RheWluZ0ludGVydmFscz10Lm11bHRpc2VsZWN0JiZhLmZpbHRlclNwZWNpZmllZD9hLmZpbHRlci5nZXRDb25zb2xpZGF0ZWQoKTpbXSxzJiYobC5zdGF5aW5nSW50ZXJ2YWxzPWwuc3RheWluZ0ludGVydmFscy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0hPT1zWzBdJiZ0WzFdIT09c1sxXX0pKSxsLnN0YXJ0RXh0ZW50PW8ucmVnaW9uP3NbXCJzXCI9PT1vLnJlZ2lvbj8xOjBdOnIsdC5wYXJlbnQuaW5CcnVzaERyYWc9ITAsbC5icnVzaFN0YXJ0Q2FsbGJhY2soKX0pLm9uKFwiZHJhZ1wiLGZ1bmN0aW9uKHQpe2kuZXZlbnQuc291cmNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7dmFyIGU9dC5oZWlnaHQtaS5tb3VzZSh0aGlzKVsxXS0yKm4udmVydGljYWxQYWRkaW5nLHI9dC5icnVzaC5zdmdCcnVzaDtyLndhc0RyYWdnZWQ9ITAsci5ncmFiYmluZ0Jhcj9yLm5ld0V4dGVudD1bZS1yLmdyYWJQb2ludCxlK3IuYmFyTGVuZ3RoLXIuZ3JhYlBvaW50XS5tYXAodC51bml0VG9QYWRkZWRQeC5pbnZlcnQpOnIubmV3RXh0ZW50PVtyLnN0YXJ0RXh0ZW50LHQudW5pdFRvUGFkZGVkUHguaW52ZXJ0KGUpXS5zb3J0KHMpO3ZhciBhPU1hdGgubWF4KDAsLXIubmV3RXh0ZW50WzBdKSxvPU1hdGgubWF4KDAsci5uZXdFeHRlbnRbMV0tMSk7ci5uZXdFeHRlbnRbMF0rPWEsci5uZXdFeHRlbnRbMV0tPW8sci5ncmFiYmluZ0JhciYmKHIubmV3RXh0ZW50WzFdKz1hLHIubmV3RXh0ZW50WzBdLT1vKSx0LmJydXNoLmZpbHRlclNwZWNpZmllZD0hMCxyLmV4dGVudD1yLnN0YXlpbmdJbnRlcnZhbHMuY29uY2F0KFtyLm5ld0V4dGVudF0pLHIuYnJ1c2hDYWxsYmFjayh0KSxfKHRoaXMucGFyZW50Tm9kZSl9KS5vbihcImRyYWdlbmRcIixmdW5jdGlvbih0KXtpLmV2ZW50LnNvdXJjZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3ZhciBlPXQuYnJ1c2gscj1lLmZpbHRlcixuPWUuc3ZnQnJ1c2gsYT1uLmdyYWJiaW5nQmFyO2lmKG4uZ3JhYmJpbmdCYXI9ITEsbi5ncmFiTG9jYXRpb249dm9pZCAwLHQucGFyZW50LmluQnJ1c2hEcmFnPSExLHgoKSwhbi53YXNEcmFnZ2VkKXJldHVybiBuLndhc0RyYWdnZWQ9dm9pZCAwLG4uY2xpY2thYmxlT3JkaW5hbFJhbmdlP2UuZmlsdGVyU3BlY2lmaWVkJiZ0Lm11bHRpc2VsZWN0P24uZXh0ZW50LnB1c2gobi5jbGlja2FibGVPcmRpbmFsUmFuZ2UpOihuLmV4dGVudD1bbi5jbGlja2FibGVPcmRpbmFsUmFuZ2VdLGUuZmlsdGVyU3BlY2lmaWVkPSEwKTphPyhuLmV4dGVudD1uLnN0YXlpbmdJbnRlcnZhbHMsMD09PW4uZXh0ZW50Lmxlbmd0aCYmVChlKSk6VChlKSxuLmJydXNoQ2FsbGJhY2sodCksXyh0aGlzLnBhcmVudE5vZGUpLHZvaWQgbi5icnVzaEVuZENhbGxiYWNrKGUuZmlsdGVyU3BlY2lmaWVkP3IuZ2V0Q29uc29saWRhdGVkKCk6W10pO3ZhciBvPWZ1bmN0aW9uKCl7ci5zZXQoci5nZXRDb25zb2xpZGF0ZWQoKSl9O2lmKHQub3JkaW5hbCl7dmFyIHM9dC51bml0VGlja3ZhbHM7c1tzLmxlbmd0aC0xXTxzWzBdJiZzLnJldmVyc2UoKSxuLm5ld0V4dGVudD1bZihzLG4ubmV3RXh0ZW50WzBdLG4uc3RheWluZ0ludGVydmFscykscChzLG4ubmV3RXh0ZW50WzFdLG4uc3RheWluZ0ludGVydmFscyldO3ZhciBsPW4ubmV3RXh0ZW50WzFdPm4ubmV3RXh0ZW50WzBdO24uZXh0ZW50PW4uc3RheWluZ0ludGVydmFscy5jb25jYXQobD9bbi5uZXdFeHRlbnRdOltdKSxuLmV4dGVudC5sZW5ndGh8fFQoZSksbi5icnVzaENhbGxiYWNrKHQpLGw/Xyh0aGlzLnBhcmVudE5vZGUsbyk6KG8oKSxfKHRoaXMucGFyZW50Tm9kZSkpfWVsc2UgbygpO24uYnJ1c2hFbmRDYWxsYmFjayhlLmZpbHRlclNwZWNpZmllZD9yLmdldENvbnNvbGlkYXRlZCgpOltdKX0pKX1mdW5jdGlvbiBBKHQsZSl7cmV0dXJuIHRbMF0tZVswXX1mdW5jdGlvbiBUKHQpe3QuZmlsdGVyU3BlY2lmaWVkPSExLHQuc3ZnQnJ1c2guZXh0ZW50PVtbMCwxXV19ZnVuY3Rpb24gTSh0KXtmb3IodmFyIGUscj10LnNsaWNlKCksbj1bXSxpPXIuc2hpZnQoKTtpOyl7Zm9yKGU9aS5zbGljZSgpOyhpPXIuc2hpZnQoKSkmJmlbMF08PWVbMV07KWVbMV09TWF0aC5tYXgoZVsxXSxpWzFdKTtuLnB1c2goZSl9cmV0dXJuIG59ZS5leHBvcnRzPXttYWtlQnJ1c2g6ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvLGw9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9W107cmV0dXJue3NldDpmdW5jdGlvbihuKXtyPW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKCkuc29ydChzKX0pLnNvcnQoQSksdD1NKHIpLGU9ci5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm5bTWF0aC5taW4odFswXSxlWzBdKSxNYXRoLm1heCh0WzFdLGVbMV0pXX0sWzEvMCwtMS8wXSl9LGdldDpmdW5jdGlvbigpe3JldHVybiByLnNsaWNlKCl9LGdldENvbnNvbGlkYXRlZDpmdW5jdGlvbigpe3JldHVybiB0fSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm4gZX19fSgpO3JldHVybiBsLnNldChyKSx7ZmlsdGVyOmwsZmlsdGVyU3BlY2lmaWVkOmUsc3ZnQnJ1c2g6e2V4dGVudDpbXSxicnVzaFN0YXJ0Q2FsbGJhY2s6bixicnVzaENhbGxiYWNrOihvPWksZnVuY3Rpb24odCl7dmFyIGU9dC5icnVzaCxyPWZ1bmN0aW9uKHQpe3JldHVybiB0LnN2Z0JydXNoLmV4dGVudC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoKX0pfShlKS5zbGljZSgpO2UuZmlsdGVyLnNldChyKSxvKCl9KSxicnVzaEVuZENhbGxiYWNrOmF9fX0sZW5zdXJlQXhpc0JydXNoOmZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0QWxsKFwiLlwiK24uY24uYXhpc0JydXNoKS5kYXRhKG8sYSk7ZS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChuLmNuLmF4aXNCcnVzaCwhMCksZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoXCIuYmFja2dyb3VuZFwiKS5kYXRhKG8pO2UuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpLmNsYXNzZWQoXCJiYWNrZ3JvdW5kXCIsITApLmNhbGwoZykuY2FsbCh2KS5zdHlsZShcInBvaW50ZXItZXZlbnRzXCIsXCJhdXRvXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZSgwIFwiK24udmVydGljYWxQYWRkaW5nK1wiKVwiKSxlLmNhbGwoaykuYXR0cihcImhlaWdodFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodC1uLnZlcnRpY2FsUGFkZGluZ30pO3ZhciByPXQuc2VsZWN0QWxsKFwiLmhpZ2hsaWdodC1zaGFkb3dcIikuZGF0YShvKTtyLmVudGVyKCkuYXBwZW5kKFwibGluZVwiKS5jbGFzc2VkKFwiaGlnaGxpZ2h0LXNoYWRvd1wiLCEwKS5hdHRyKFwieFwiLC1uLmJhci53aWR0aC8yKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsbi5iYXIud2lkdGgrbi5iYXIuc3Ryb2tlV2lkdGgpLmF0dHIoXCJzdHJva2VcIixuLmJhci5zdHJva2VDb2xvcikuYXR0cihcIm9wYWNpdHlcIixuLmJhci5zdHJva2VPcGFjaXR5KS5hdHRyKFwic3Ryb2tlLWxpbmVjYXBcIixcImJ1dHRcIiksci5hdHRyKFwieTFcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KS5jYWxsKGIpO3ZhciBpPXQuc2VsZWN0QWxsKFwiLmhpZ2hsaWdodFwiKS5kYXRhKG8pO2kuZW50ZXIoKS5hcHBlbmQoXCJsaW5lXCIpLmNsYXNzZWQoXCJoaWdobGlnaHRcIiwhMCkuYXR0cihcInhcIiwtbi5iYXIud2lkdGgvMikuYXR0cihcInN0cm9rZS13aWR0aFwiLG4uYmFyLndpZHRoLW4uYmFyLnN0cm9rZVdpZHRoKS5hdHRyKFwic3Ryb2tlXCIsbi5iYXIuZmlsbENvbG9yKS5hdHRyKFwib3BhY2l0eVwiLG4uYmFyLmZpbGxPcGFjaXR5KS5hdHRyKFwic3Ryb2tlLWxpbmVjYXBcIixcImJ1dHRcIiksaS5hdHRyKFwieTFcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KS5jYWxsKGIpfShlKX0sY2xlYW5SYW5nZXM6ZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KHRbMF0pPyh0PXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNvcnQocyl9KSx0PWUubXVsdGlzZWxlY3Q/TSh0LnNvcnQoQSkpOlt0WzBdXSk6dD1bdC5zb3J0KHMpXSxlLnRpY2t2YWxzKXt2YXIgcj1lLnRpY2t2YWxzLnNsaWNlKCkuc29ydChzKTtpZighKHQ9dC5tYXAoZnVuY3Rpb24odCl7dmFyIGU9W2Yocix0WzBdLFtdKSxwKHIsdFsxXSxbXSldO2lmKGVbMV0+ZVswXSlyZXR1cm4gZX0pLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdH0pKS5sZW5ndGgpcmV0dXJufXJldHVybiB0Lmxlbmd0aD4xP3Q6dFswXX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvZ3VwXCI6Njk5LFwiLi9jb25zdGFudHNcIjoxMDE5LGQzOjE1NX1dLDEwMTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vcGxvdHMvZ2V0X2RhdGFcIikuZ2V0TW9kdWxlQ2FsY0RhdGEsYT10KFwiLi9wbG90XCIpLG89dChcIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzXCIpO3IubmFtZT1cInBhcmNvb3Jkc1wiLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT1pKHQuY2FsY2RhdGEsXCJwYXJjb29yZHNcIilbMF07ZS5sZW5ndGgmJmEodCxlKX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLl9oYXMmJm4uX2hhcyhcInBhcmNvb3Jkc1wiKSxhPWUuX2hhcyYmZS5faGFzKFwicGFyY29vcmRzXCIpO2kmJiFhJiYobi5fcGFwZXJkaXYuc2VsZWN0QWxsKFwiLnBhcmNvb3Jkc1wiKS5yZW1vdmUoKSxuLl9nbGltYWdlcy5zZWxlY3RBbGwoXCIqXCIpLnJlbW92ZSgpKX0sci50b1NWRz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll9nbGltYWdlcyxyPW4uc2VsZWN0KHQpLnNlbGVjdEFsbChcIi5zdmctY29udGFpbmVyXCIpO3IuZmlsdGVyKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9PT1yLnNpemUoKS0xfSkuc2VsZWN0QWxsKFwiLmdsLWNhbnZhcy1jb250ZXh0LCAuZ2wtY2FudmFzLWZvY3VzXCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRvRGF0YVVSTChcImltYWdlL3BuZ1wiKTtlLmFwcGVuZChcInN2ZzppbWFnZVwiKS5hdHRyKHt4bWxuczpvLnN2ZyxcInhsaW5rOmhyZWZcIjp0LHByZXNlcnZlQXNwZWN0UmF0aW86XCJub25lXCIseDowLHk6MCx3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodH0pfSksd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtuLnNlbGVjdEFsbChcIiNmaWx0ZXJCYXJQYXR0ZXJuXCIpLmF0dHIoXCJpZFwiLFwiZmlsdGVyQmFyUGF0dGVyblwiKX0sNjApfX0se1wiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIjo2NzksXCIuLi8uLi9wbG90cy9nZXRfZGF0YVwiOjc4NCxcIi4vcGxvdFwiOjEwMjUsZDM6MTU1fV0sMTAxODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVyc1wiKS5oYXNDb2xvcnNjYWxlLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCIpLGE9dChcIi4uLy4uL2xpYlwiKSxvPXQoXCIuLi8uLi9saWIvZ3VwXCIpLndyYXA7ZnVuY3Rpb24gcyh0KXtyZXR1cm4gYS5pc1R5cGVkQXJyYXkodCk/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCk6dH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPGUuZGltZW5zaW9ucy5sZW5ndGg7cisrKWUuZGltZW5zaW9uc1tyXS52YWx1ZXM9cyhlLmRpbWVuc2lvbnNbcl0udmFsdWVzKTtlLmxpbmUuY29sb3I9cyhlLmxpbmUuY29sb3IpO3ZhciBhPSEhZS5saW5lLmNvbG9yc2NhbGUmJkFycmF5LmlzQXJyYXkoZS5saW5lLmNvbG9yKSxsPWE/ZS5saW5lLmNvbG9yOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT0uNTtyZXR1cm4gZX0oZS5fbGVuZ3RoKSxjPWE/ZS5saW5lLmNvbG9yc2NhbGU6W1swLGUubGluZS5jb2xvcl0sWzEsZS5saW5lLmNvbG9yXV07cmV0dXJuIG4oZSxcImxpbmVcIikmJmkodCxlLHt2YWxzOmwsY29udGFpbmVyU3RyOlwibGluZVwiLGNMZXR0ZXI6XCJjXCJ9KSxvKHtsaW5lQ29sb3I6bCxjc2NhbGU6Y30pfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIjo1ODYsXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVyc1wiOjU4OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9ndXBcIjo2OTl9XSwxMDE5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXttYXhEaW1lbnNpb25Db3VudDo2MCxvdmVyZHJhZzo0NSx2ZXJ0aWNhbFBhZGRpbmc6Mix0aWNrRGlzdGFuY2U6NTAsY2FudmFzUGl4ZWxSYXRpbzoxLGJsb2NrTGluZUNvdW50OjVlMyxsYXllcnM6W1wiY29udGV4dExpbmVMYXllclwiLFwiZm9jdXNMaW5lTGF5ZXJcIixcInBpY2tMaW5lTGF5ZXJcIl0sYXhpc1RpdGxlT2Zmc2V0OjI4LGF4aXNFeHRlbnRPZmZzZXQ6MTAsYmFyOnt3aWR0aDo0LGNhcHR1cmVXaWR0aDoxMCxmaWxsQ29sb3I6XCJtYWdlbnRhXCIsZmlsbE9wYWNpdHk6MSxzbmFwRHVyYXRpb246MTUwLHNuYXBSYXRpbzouMjUsc25hcENsb3NlOi4wMSxzdHJva2VDb2xvcjpcIndoaXRlXCIsc3Ryb2tlT3BhY2l0eToxLHN0cm9rZVdpZHRoOjEsaGFuZGxlSGVpZ2h0OjgsaGFuZGxlT3BhY2l0eToxLGhhbmRsZU92ZXJsYXA6MH0sY246e2F4aXNFeHRlbnRUZXh0OlwiYXhpcy1leHRlbnQtdGV4dFwiLHBhcmNvb3Jkc0xpbmVMYXllcnM6XCJwYXJjb29yZHMtbGluZS1sYXllcnNcIixwYXJjb29yZHNMaW5lTGF5ZXI6XCJwYXJjb29yZHMtbGluZXNcIixwYXJjb29yZHM6XCJwYXJjb29yZHNcIixwYXJjb29yZHNDb250cm9sVmlldzpcInBhcmNvb3Jkcy1jb250cm9sLXZpZXdcIix5QXhpczpcInktYXhpc1wiLGF4aXNPdmVybGF5czpcImF4aXMtb3ZlcmxheXNcIixheGlzOlwiYXhpc1wiLGF4aXNIZWFkaW5nOlwiYXhpcy1oZWFkaW5nXCIsYXhpc1RpdGxlOlwiYXhpcy10aXRsZVwiLGF4aXNFeHRlbnQ6XCJheGlzLWV4dGVudFwiLGF4aXNFeHRlbnRUb3A6XCJheGlzLWV4dGVudC10b3BcIixheGlzRXh0ZW50VG9wVGV4dDpcImF4aXMtZXh0ZW50LXRvcC10ZXh0XCIsYXhpc0V4dGVudEJvdHRvbTpcImF4aXMtZXh0ZW50LWJvdHRvbVwiLGF4aXNFeHRlbnRCb3R0b21UZXh0OlwiYXhpcy1leHRlbnQtYm90dG9tLXRleHRcIixheGlzQnJ1c2g6XCJheGlzLWJydXNoXCJ9LGlkOntmaWx0ZXJCYXJQYXR0ZXJuOlwiZmlsdGVyLWJhci1wYXR0ZXJuXCJ9fX0se31dLDEwMjA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzXCIpLmhhc0NvbG9yc2NhbGUsYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCIpLG89dChcIi4uLy4uL3Bsb3RzL2RvbWFpblwiKS5kZWZhdWx0cyxzPXQoXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIiksbD10KFwiLi9hdHRyaWJ1dGVzXCIpLGM9dChcIi4vYXhpc2JydXNoXCIpLHU9dChcIi4vY29uc3RhbnRzXCIpLm1heERpbWVuc2lvbkNvdW50LGg9dChcIi4vbWVyZ2VfbGVuZ3RoXCIpO2Z1bmN0aW9uIGYodCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxsLmRpbWVuc2lvbnMscixpKX12YXIgaT1yKFwidmFsdWVzXCIpLGE9cihcInZpc2libGVcIik7aWYoaSYmaS5sZW5ndGh8fChhPWUudmlzaWJsZT0hMSksYSl7cihcImxhYmVsXCIpLHIoXCJ0aWNrdmFsc1wiKSxyKFwidGlja3RleHRcIikscihcInRpY2tmb3JtYXRcIikscihcInJhbmdlXCIpLHIoXCJtdWx0aXNlbGVjdFwiKTt2YXIgbz1yKFwiY29uc3RyYWludHJhbmdlXCIpO28mJihlLmNvbnN0cmFpbnRyYW5nZT1jLmNsZWFuUmFuZ2VzKG8sZSkpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7ZnVuY3Rpb24gcChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbCxyLGkpfXZhciBkPXQuZGltZW5zaW9ucztBcnJheS5pc0FycmF5KGQpJiZkLmxlbmd0aD51JiYobi5sb2coXCJwYXJjb29yZHMgdHJhY2VzIHN1cHBvcnQgdXAgdG8gXCIrdStcIiBkaW1lbnNpb25zIGF0IHRoZSBtb21lbnRcIiksZC5zcGxpY2UodSkpO3ZhciBnPXModCxlLHtuYW1lOlwiZGltZW5zaW9uc1wiLGhhbmRsZUl0ZW1EZWZhdWx0czpmfSksdj1mdW5jdGlvbih0LGUscixvLHMpe3ZhciBsPXMoXCJsaW5lLmNvbG9yXCIscik7aWYoaSh0LFwibGluZVwiKSYmbi5pc0FycmF5T3JUeXBlZEFycmF5KGwpKXtpZihsLmxlbmd0aClyZXR1cm4gcyhcImxpbmUuY29sb3JzY2FsZVwiKSxhKHQsZSxvLHMse3ByZWZpeDpcImxpbmUuXCIsY0xldHRlcjpcImNcIn0pLGwubGVuZ3RoO2UubGluZS5jb2xvcj1yfXJldHVybiAxLzB9KHQsZSxyLGMscCk7byhlLGMscCksQXJyYXkuaXNBcnJheShnKSYmZy5sZW5ndGh8fChlLnZpc2libGU9ITEpLGgoZSxnLFwidmFsdWVzXCIsdik7dmFyIG09e2ZhbWlseTpjLmZvbnQuZmFtaWx5LHNpemU6TWF0aC5yb3VuZChjLmZvbnQuc2l6ZS8xLjIpLGNvbG9yOmMuZm9udC5jb2xvcn07bi5jb2VyY2VGb250KHAsXCJsYWJlbGZvbnRcIixtKSxuLmNvZXJjZUZvbnQocCxcInRpY2tmb250XCIsbSksbi5jb2VyY2VGb250KHAsXCJyYW5nZWZvbnRcIixtKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiOjU4OCxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzXCI6NTg5LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCI6NzQ1LFwiLi4vLi4vcGxvdHMvZG9tYWluXCI6Nzc0LFwiLi9hdHRyaWJ1dGVzXCI6MTAxNSxcIi4vYXhpc2JydXNoXCI6MTAxNixcIi4vY29uc3RhbnRzXCI6MTAxOSxcIi4vbWVyZ2VfbGVuZ3RoXCI6MTAyM31dLDEwMjE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLG4uY2FsYz10KFwiLi9jYWxjXCIpLG4ucGxvdD10KFwiLi9wbG90XCIpLG4uY29sb3JiYXI9e2NvbnRhaW5lcjpcImxpbmVcIixtaW46XCJjbWluXCIsbWF4OlwiY21heFwifSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cInBhcmNvb3Jkc1wiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4vYmFzZV9wbG90XCIpLG4uY2F0ZWdvcmllcz1bXCJnbFwiLFwicmVnbFwiLFwibm9PcGFjaXR5XCIsXCJub0hvdmVyXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi9hdHRyaWJ1dGVzXCI6MTAxNSxcIi4vYmFzZV9wbG90XCI6MTAxNyxcIi4vY2FsY1wiOjEwMTgsXCIuL2RlZmF1bHRzXCI6MTAyMCxcIi4vcGxvdFwiOjEwMjV9XSwxMDIyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsc2xpZnlcIiksaT1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWM0IHAwLCBwMSwgcDIsIHAzLFxcbiAgICAgICAgICAgICAgIHA0LCBwNSwgcDYsIHA3LFxcbiAgICAgICAgICAgICAgIHA4LCBwOSwgcGEsIHBiLFxcbiAgICAgICAgICAgICAgIHBjLCBwZCwgcGU7XFxuXFxuYXR0cmlidXRlIHZlYzQgcGY7XFxuXFxudW5pZm9ybSBtYXQ0IGRpbTFBLCBkaW0yQSwgZGltMUIsIGRpbTJCLCBkaW0xQywgZGltMkMsIGRpbTFELCBkaW0yRCxcXG4gICAgICAgICAgICAgbG9BLCBoaUEsIGxvQiwgaGlCLCBsb0MsIGhpQywgbG9ELCBoaUQ7XFxuXFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb24sXFxuICAgICAgICAgICAgIHZpZXdCb3hQb3NpdGlvbixcXG4gICAgICAgICAgICAgdmlld0JveFNpemU7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgcGFsZXR0ZTtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXNrO1xcbnVuaWZvcm0gZmxvYXQgbWFza0hlaWdodDtcXG5cXG51bmlmb3JtIHZlYzIgY29sb3JDbGFtcDtcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xcblxcbnZlYzQgdW5pdF8xID0gdmVjNCgxLCAxLCAxLCAxKTtcXG5cXG5mbG9hdCB2YWwobWF0NCBwLCBtYXQ0IHYpIHtcXG4gICAgcmV0dXJuIGRvdChtYXRyaXhDb21wTXVsdChwLCB2KSAqIHVuaXRfMSwgdW5pdF8xKTtcXG59XFxuXFxuZmxvYXQgYXhpc1koXFxuICAgICAgICBmbG9hdCB4LFxcbiAgICAgICAgbWF0NCBkWzRdLFxcbiAgICAgICAgbWF0NCBkaW0xQSwgbWF0NCBkaW0yQSwgbWF0NCBkaW0xQiwgbWF0NCBkaW0yQiwgbWF0NCBkaW0xQywgbWF0NCBkaW0yQywgbWF0NCBkaW0xRCwgbWF0NCBkaW0yRFxcbiAgICApIHtcXG5cXG4gICAgZmxvYXQgeTEgPSB2YWwoZFswXSwgZGltMUEpICsgdmFsKGRbMV0sIGRpbTFCKSArIHZhbChkWzJdLCBkaW0xQykgKyB2YWwoZFszXSwgZGltMUQpO1xcbiAgICBmbG9hdCB5MiA9IHZhbChkWzBdLCBkaW0yQSkgKyB2YWwoZFsxXSwgZGltMkIpICsgdmFsKGRbMl0sIGRpbTJDKSArIHZhbChkWzNdLCBkaW0yRCk7XFxuICAgIHJldHVybiB5MSAqICgxLjAgLSB4KSArIHkyICogeDtcXG59XFxuXFxuY29uc3QgaW50IGJpdHNQZXJCeXRlID0gODtcXG5cXG5pbnQgbW9kMihpbnQgYSkge1xcbiAgICByZXR1cm4gYSAtIDIgKiAoYSAvIDIpO1xcbn1cXG5cXG5pbnQgbW9kOChpbnQgYSkge1xcbiAgICByZXR1cm4gYSAtIDggKiAoYSAvIDgpO1xcbn1cXG5cXG52ZWM0IHplcm8gPSB2ZWM0KDAsIDAsIDAsIDApO1xcbnZlYzQgdW5pdF8wID0gdmVjNCgxLCAxLCAxLCAxKTtcXG52ZWMyIHh5UHJvamVjdGlvbiA9IHZlYzIoMSwgMSk7XFxuXFxubWF0NCBtY2xhbXAobWF0NCBtLCBtYXQ0IGxvLCBtYXQ0IGhpKSB7XFxuICAgIHJldHVybiBtYXQ0KGNsYW1wKG1bMF0sIGxvWzBdLCBoaVswXSksXFxuICAgICAgICAgICAgICAgIGNsYW1wKG1bMV0sIGxvWzFdLCBoaVsxXSksXFxuICAgICAgICAgICAgICAgIGNsYW1wKG1bMl0sIGxvWzJdLCBoaVsyXSksXFxuICAgICAgICAgICAgICAgIGNsYW1wKG1bM10sIGxvWzNdLCBoaVszXSkpO1xcbn1cXG5cXG5ib29sIG1zaG93KG1hdDQgcCwgbWF0NCBsbywgbWF0NCBoaSkge1xcbiAgICByZXR1cm4gbWNsYW1wKHAsIGxvLCBoaSkgPT0gcDtcXG59XFxuXFxuYm9vbCB3aXRoaW5Cb3VuZGluZ0JveChcXG4gICAgICAgIG1hdDQgZFs0XSxcXG4gICAgICAgIG1hdDQgbG9BLCBtYXQ0IGhpQSwgbWF0NCBsb0IsIG1hdDQgaGlCLCBtYXQ0IGxvQywgbWF0NCBoaUMsIG1hdDQgbG9ELCBtYXQ0IGhpRFxcbiAgICApIHtcXG5cXG4gICAgcmV0dXJuIG1zaG93KGRbMF0sIGxvQSwgaGlBKSAmJlxcbiAgICAgICAgICAgbXNob3coZFsxXSwgbG9CLCBoaUIpICYmXFxuICAgICAgICAgICBtc2hvdyhkWzJdLCBsb0MsIGhpQykgJiZcXG4gICAgICAgICAgIG1zaG93KGRbM10sIGxvRCwgaGlEKTtcXG59XFxuXFxuYm9vbCB3aXRoaW5SYXN0ZXJNYXNrKG1hdDQgZFs0XSwgc2FtcGxlcjJEIG1hc2ssIGZsb2F0IGhlaWdodCkge1xcbiAgICBib29sIHJlc3VsdCA9IHRydWU7XFxuICAgIGludCBiaXRJbkJ5dGVTdGVwcGVyO1xcbiAgICBmbG9hdCB2YWxZLCB2YWx1ZVksIHNjYWxlWDtcXG4gICAgaW50IGhpdCwgYml0bWFzaywgdmFsWDtcXG4gICAgZm9yKGludCBpID0gMDsgaSA8IDQ7IGkrKykge1xcbiAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IDQ7IGorKykge1xcbiAgICAgICAgICAgIGZvcihpbnQgayA9IDA7IGsgPCA0OyBrKyspIHtcXG4gICAgICAgICAgICAgICAgYml0SW5CeXRlU3RlcHBlciA9IG1vZDgoaiAqIDQgKyBrKTtcXG4gICAgICAgICAgICAgICAgdmFsWCA9IGkgKiAyICsgaiAvIDI7XFxuICAgICAgICAgICAgICAgIHZhbFkgPSBkW2ldW2pdW2tdO1xcbiAgICAgICAgICAgICAgICB2YWx1ZVkgPSB2YWxZICogKGhlaWdodCAtIDEuMCkgKyAwLjU7XFxuICAgICAgICAgICAgICAgIHNjYWxlWCA9IChmbG9hdCh2YWxYKSArIDAuNSkgLyA4LjA7XFxuICAgICAgICAgICAgICAgIGhpdCA9IGludCh0ZXh0dXJlMkQobWFzaywgdmVjMihzY2FsZVgsICh2YWx1ZVkgKyAwLjUpIC8gaGVpZ2h0KSlbM10gKiAyNTUuMCkgLyBpbnQocG93KDIuMCwgZmxvYXQoYml0SW5CeXRlU3RlcHBlcikpKTtcXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIG1vZDIoaGl0KSA9PSAxO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG52ZWM0IHBvc2l0aW9uKFxcbiAgICAgICAgZmxvYXQgZGVwdGgsXFxuICAgICAgICB2ZWMyIHJlc29sdXRpb24sIHZlYzIgdmlld0JveFBvc2l0aW9uLCB2ZWMyIHZpZXdCb3hTaXplLFxcbiAgICAgICAgbWF0NCBkaW1zWzRdLFxcbiAgICAgICAgZmxvYXQgc2lnbnVtLFxcbiAgICAgICAgbWF0NCBkaW0xQSwgbWF0NCBkaW0yQSwgbWF0NCBkaW0xQiwgbWF0NCBkaW0yQiwgbWF0NCBkaW0xQywgbWF0NCBkaW0yQywgbWF0NCBkaW0xRCwgbWF0NCBkaW0yRCxcXG4gICAgICAgIG1hdDQgbG9BLCBtYXQ0IGhpQSwgbWF0NCBsb0IsIG1hdDQgaGlCLCBtYXQ0IGxvQywgbWF0NCBoaUMsIG1hdDQgbG9ELCBtYXQ0IGhpRCxcXG4gICAgICAgIHNhbXBsZXIyRCBtYXNrLCBmbG9hdCBtYXNrSGVpZ2h0XFxuICAgICkge1xcblxcbiAgICBmbG9hdCB4ID0gMC41ICogc2lnbnVtICsgMC41O1xcbiAgICBmbG9hdCB5ID0gYXhpc1koeCwgZGltcywgZGltMUEsIGRpbTJBLCBkaW0xQiwgZGltMkIsIGRpbTFDLCBkaW0yQywgZGltMUQsIGRpbTJEKTtcXG5cXG4gICAgZmxvYXQgc2hvdyA9IGZsb2F0KFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoaW5Cb3VuZGluZ0JveChkaW1zLCBsb0EsIGhpQSwgbG9CLCBoaUIsIGxvQywgaGlDLCBsb0QsIGhpRClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgJiYgd2l0aGluUmFzdGVyTWFzayhkaW1zLCBtYXNrLCBtYXNrSGVpZ2h0KVxcbiAgICAgICAgICAgICAgICAgICAgICApO1xcblxcbiAgICB2ZWMyIHZpZXdCb3hYWSA9IHZpZXdCb3hQb3NpdGlvbiArIHZpZXdCb3hTaXplICogdmVjMih4LCB5KTtcXG4gICAgZmxvYXQgZGVwdGhPckhpZGUgPSBkZXB0aCArIDIuMCAqICgxLjAgLSBzaG93KTtcXG5cXG4gICAgcmV0dXJuIHZlYzQoXFxuICAgICAgICB4eVByb2plY3Rpb24gKiAoMi4wICogdmlld0JveFhZIC8gcmVzb2x1dGlvbiAtIDEuMCksXFxuICAgICAgICBkZXB0aE9ySGlkZSxcXG4gICAgICAgIDEuMFxcbiAgICApO1xcbn1cXG5cXG52b2lkIG1haW4oKSB7XFxuXFxuICAgIGZsb2F0IHByb21pbmVuY2UgPSBhYnMocGZbM10pO1xcblxcbiAgICBtYXQ0IHBbNF07XFxuICAgIHBbMF0gPSBtYXQ0KHAwLCBwMSwgcDIsIHAzKTtcXG4gICAgcFsxXSA9IG1hdDQocDQsIHA1LCBwNiwgcDcpO1xcbiAgICBwWzJdID0gbWF0NChwOCwgcDksIHBhLCBwYik7XFxuICAgIHBbM10gPSBtYXQ0KHBjLCBwZCwgcGUsIGFicyhwZikpO1xcblxcbiAgICBnbF9Qb3NpdGlvbiA9IHBvc2l0aW9uKFxcbiAgICAgICAgMS4wIC0gcHJvbWluZW5jZSxcXG4gICAgICAgIHJlc29sdXRpb24sIHZpZXdCb3hQb3NpdGlvbiwgdmlld0JveFNpemUsXFxuICAgICAgICBwLFxcbiAgICAgICAgc2lnbihwZlszXSksXFxuICAgICAgICBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkQsXFxuICAgICAgICBsb0EsIGhpQSwgbG9CLCBoaUIsIGxvQywgaGlDLCBsb0QsIGhpRCxcXG4gICAgICAgIG1hc2ssIG1hc2tIZWlnaHRcXG4gICAgKTtcXG5cXG4gICAgZmxvYXQgY2xhbXBlZENvbG9ySW5kZXggPSBjbGFtcCgocHJvbWluZW5jZSAtIGNvbG9yQ2xhbXBbMF0pIC8gKGNvbG9yQ2xhbXBbMV0gLSBjb2xvckNsYW1wWzBdKSwgMC4wLCAxLjApO1xcbiAgICBmcmFnQ29sb3IgPSB0ZXh0dXJlMkQocGFsZXR0ZSwgdmVjMigoY2xhbXBlZENvbG9ySW5kZXggKiAyNTUuMCArIDAuNSkgLyAyNTYuMCwgMC41KSk7XFxufVxcblwiXSksYT1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWM0IHAwLCBwMSwgcDIsIHAzLFxcbiAgICAgICAgICAgICAgIHA0LCBwNSwgcDYsIHA3LFxcbiAgICAgICAgICAgICAgIHA4LCBwOSwgcGEsIHBiLFxcbiAgICAgICAgICAgICAgIHBjLCBwZCwgcGU7XFxuXFxuYXR0cmlidXRlIHZlYzQgcGY7XFxuXFxudW5pZm9ybSBtYXQ0IGRpbTFBLCBkaW0yQSwgZGltMUIsIGRpbTJCLCBkaW0xQywgZGltMkMsIGRpbTFELCBkaW0yRDtcXG5cXG51bmlmb3JtIHZlYzIgcmVzb2x1dGlvbixcXG4gICAgICAgICAgICAgdmlld0JveFBvc2l0aW9uLFxcbiAgICAgICAgICAgICB2aWV3Qm94U2l6ZTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCBwYWxldHRlO1xcblxcbnVuaWZvcm0gdmVjMiBjb2xvckNsYW1wO1xcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxuXFxudmVjMiB4eVByb2plY3Rpb24gPSB2ZWMyKDEsIDEpO1xcblxcbnZlYzQgdW5pdCA9IHZlYzQoMSwgMSwgMSwgMSk7XFxuXFxuZmxvYXQgdmFsKG1hdDQgcCwgbWF0NCB2KSB7XFxuICAgIHJldHVybiBkb3QobWF0cml4Q29tcE11bHQocCwgdikgKiB1bml0LCB1bml0KTtcXG59XFxuXFxuZmxvYXQgYXhpc1koXFxuICAgICAgICBmbG9hdCB4LFxcbiAgICAgICAgbWF0NCBkWzRdLFxcbiAgICAgICAgbWF0NCBkaW0xQSwgbWF0NCBkaW0yQSwgbWF0NCBkaW0xQiwgbWF0NCBkaW0yQiwgbWF0NCBkaW0xQywgbWF0NCBkaW0yQywgbWF0NCBkaW0xRCwgbWF0NCBkaW0yRFxcbiAgICApIHtcXG5cXG4gICAgZmxvYXQgeTEgPSB2YWwoZFswXSwgZGltMUEpICsgdmFsKGRbMV0sIGRpbTFCKSArIHZhbChkWzJdLCBkaW0xQykgKyB2YWwoZFszXSwgZGltMUQpO1xcbiAgICBmbG9hdCB5MiA9IHZhbChkWzBdLCBkaW0yQSkgKyB2YWwoZFsxXSwgZGltMkIpICsgdmFsKGRbMl0sIGRpbTJDKSArIHZhbChkWzNdLCBkaW0yRCk7XFxuICAgIHJldHVybiB5MSAqICgxLjAgLSB4KSArIHkyICogeDtcXG59XFxuXFxudmVjNCBwb3NpdGlvbihcXG4gICAgICAgIGZsb2F0IGRlcHRoLFxcbiAgICAgICAgdmVjMiByZXNvbHV0aW9uLCB2ZWMyIHZpZXdCb3hQb3NpdGlvbiwgdmVjMiB2aWV3Qm94U2l6ZSxcXG4gICAgICAgIG1hdDQgZGltc1s0XSxcXG4gICAgICAgIGZsb2F0IHNpZ251bSxcXG4gICAgICAgIG1hdDQgZGltMUEsIG1hdDQgZGltMkEsIG1hdDQgZGltMUIsIG1hdDQgZGltMkIsIG1hdDQgZGltMUMsIG1hdDQgZGltMkMsIG1hdDQgZGltMUQsIG1hdDQgZGltMkRcXG4gICAgKSB7XFxuXFxuICAgIGZsb2F0IHggPSAwLjUgKiBzaWdudW0gKyAwLjU7XFxuICAgIGZsb2F0IHkgPSBheGlzWSh4LCBkaW1zLCBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkQpO1xcblxcbiAgICB2ZWMyIHZpZXdCb3hYWSA9IHZpZXdCb3hQb3NpdGlvbiArIHZpZXdCb3hTaXplICogdmVjMih4LCB5KTtcXG5cXG4gICAgcmV0dXJuIHZlYzQoXFxuICAgICAgICB4eVByb2plY3Rpb24gKiAoMi4wICogdmlld0JveFhZIC8gcmVzb2x1dGlvbiAtIDEuMCksXFxuICAgICAgICBkZXB0aCxcXG4gICAgICAgIDEuMFxcbiAgICApO1xcbn1cXG5cXG52b2lkIG1haW4oKSB7XFxuXFxuICAgIGZsb2F0IHByb21pbmVuY2UgPSBhYnMocGZbM10pO1xcblxcbiAgICBtYXQ0IHBbNF07XFxuICAgIHBbMF0gPSBtYXQ0KHAwLCBwMSwgcDIsIHAzKTtcXG4gICAgcFsxXSA9IG1hdDQocDQsIHA1LCBwNiwgcDcpO1xcbiAgICBwWzJdID0gbWF0NChwOCwgcDksIHBhLCBwYik7XFxuICAgIHBbM10gPSBtYXQ0KHBjLCBwZCwgcGUsIGFicyhwZikpO1xcblxcbiAgICBnbF9Qb3NpdGlvbiA9IHBvc2l0aW9uKFxcbiAgICAgICAgMS4wIC0gcHJvbWluZW5jZSxcXG4gICAgICAgIHJlc29sdXRpb24sIHZpZXdCb3hQb3NpdGlvbiwgdmlld0JveFNpemUsXFxuICAgICAgICBwLFxcbiAgICAgICAgc2lnbihwZlszXSksXFxuICAgICAgICBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkRcXG4gICAgKTtcXG5cXG4gICAgZmxvYXQgY2xhbXBlZENvbG9ySW5kZXggPSBjbGFtcCgocHJvbWluZW5jZSAtIGNvbG9yQ2xhbXBbMF0pIC8gKGNvbG9yQ2xhbXBbMV0gLSBjb2xvckNsYW1wWzBdKSwgMC4wLCAxLjApO1xcbiAgICBmcmFnQ29sb3IgPSB0ZXh0dXJlMkQocGFsZXR0ZSwgdmVjMigoY2xhbXBlZENvbG9ySW5kZXggKiAyNTUuMCArIDAuNSkgLyAyNTYuMCwgMC41KSk7XFxufVxcblwiXSksbz1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWM0IHAwLCBwMSwgcDIsIHAzLFxcbiAgICAgICAgICAgICAgIHA0LCBwNSwgcDYsIHA3LFxcbiAgICAgICAgICAgICAgIHA4LCBwOSwgcGEsIHBiLFxcbiAgICAgICAgICAgICAgIHBjLCBwZCwgcGU7XFxuXFxuYXR0cmlidXRlIHZlYzQgcGY7XFxuXFxudW5pZm9ybSBtYXQ0IGRpbTFBLCBkaW0yQSwgZGltMUIsIGRpbTJCLCBkaW0xQywgZGltMkMsIGRpbTFELCBkaW0yRCxcXG4gICAgICAgICAgICAgbG9BLCBoaUEsIGxvQiwgaGlCLCBsb0MsIGhpQywgbG9ELCBoaUQ7XFxuXFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb24sXFxuICAgICAgICAgICAgIHZpZXdCb3hQb3NpdGlvbixcXG4gICAgICAgICAgICAgdmlld0JveFNpemU7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcXG51bmlmb3JtIGZsb2F0IG1hc2tIZWlnaHQ7XFxuXFxudW5pZm9ybSB2ZWMyIGNvbG9yQ2xhbXA7XFxuXFxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcXG5cXG52ZWM0IHVuaXRfMSA9IHZlYzQoMSwgMSwgMSwgMSk7XFxuXFxuZmxvYXQgdmFsKG1hdDQgcCwgbWF0NCB2KSB7XFxuICAgIHJldHVybiBkb3QobWF0cml4Q29tcE11bHQocCwgdikgKiB1bml0XzEsIHVuaXRfMSk7XFxufVxcblxcbmZsb2F0IGF4aXNZKFxcbiAgICAgICAgZmxvYXQgeCxcXG4gICAgICAgIG1hdDQgZFs0XSxcXG4gICAgICAgIG1hdDQgZGltMUEsIG1hdDQgZGltMkEsIG1hdDQgZGltMUIsIG1hdDQgZGltMkIsIG1hdDQgZGltMUMsIG1hdDQgZGltMkMsIG1hdDQgZGltMUQsIG1hdDQgZGltMkRcXG4gICAgKSB7XFxuXFxuICAgIGZsb2F0IHkxID0gdmFsKGRbMF0sIGRpbTFBKSArIHZhbChkWzFdLCBkaW0xQikgKyB2YWwoZFsyXSwgZGltMUMpICsgdmFsKGRbM10sIGRpbTFEKTtcXG4gICAgZmxvYXQgeTIgPSB2YWwoZFswXSwgZGltMkEpICsgdmFsKGRbMV0sIGRpbTJCKSArIHZhbChkWzJdLCBkaW0yQykgKyB2YWwoZFszXSwgZGltMkQpO1xcbiAgICByZXR1cm4geTEgKiAoMS4wIC0geCkgKyB5MiAqIHg7XFxufVxcblxcbmNvbnN0IGludCBiaXRzUGVyQnl0ZSA9IDg7XFxuXFxuaW50IG1vZDIoaW50IGEpIHtcXG4gICAgcmV0dXJuIGEgLSAyICogKGEgLyAyKTtcXG59XFxuXFxuaW50IG1vZDgoaW50IGEpIHtcXG4gICAgcmV0dXJuIGEgLSA4ICogKGEgLyA4KTtcXG59XFxuXFxudmVjNCB6ZXJvID0gdmVjNCgwLCAwLCAwLCAwKTtcXG52ZWM0IHVuaXRfMCA9IHZlYzQoMSwgMSwgMSwgMSk7XFxudmVjMiB4eVByb2plY3Rpb24gPSB2ZWMyKDEsIDEpO1xcblxcbm1hdDQgbWNsYW1wKG1hdDQgbSwgbWF0NCBsbywgbWF0NCBoaSkge1xcbiAgICByZXR1cm4gbWF0NChjbGFtcChtWzBdLCBsb1swXSwgaGlbMF0pLFxcbiAgICAgICAgICAgICAgICBjbGFtcChtWzFdLCBsb1sxXSwgaGlbMV0pLFxcbiAgICAgICAgICAgICAgICBjbGFtcChtWzJdLCBsb1syXSwgaGlbMl0pLFxcbiAgICAgICAgICAgICAgICBjbGFtcChtWzNdLCBsb1szXSwgaGlbM10pKTtcXG59XFxuXFxuYm9vbCBtc2hvdyhtYXQ0IHAsIG1hdDQgbG8sIG1hdDQgaGkpIHtcXG4gICAgcmV0dXJuIG1jbGFtcChwLCBsbywgaGkpID09IHA7XFxufVxcblxcbmJvb2wgd2l0aGluQm91bmRpbmdCb3goXFxuICAgICAgICBtYXQ0IGRbNF0sXFxuICAgICAgICBtYXQ0IGxvQSwgbWF0NCBoaUEsIG1hdDQgbG9CLCBtYXQ0IGhpQiwgbWF0NCBsb0MsIG1hdDQgaGlDLCBtYXQ0IGxvRCwgbWF0NCBoaURcXG4gICAgKSB7XFxuXFxuICAgIHJldHVybiBtc2hvdyhkWzBdLCBsb0EsIGhpQSkgJiZcXG4gICAgICAgICAgIG1zaG93KGRbMV0sIGxvQiwgaGlCKSAmJlxcbiAgICAgICAgICAgbXNob3coZFsyXSwgbG9DLCBoaUMpICYmXFxuICAgICAgICAgICBtc2hvdyhkWzNdLCBsb0QsIGhpRCk7XFxufVxcblxcbmJvb2wgd2l0aGluUmFzdGVyTWFzayhtYXQ0IGRbNF0sIHNhbXBsZXIyRCBtYXNrLCBmbG9hdCBoZWlnaHQpIHtcXG4gICAgYm9vbCByZXN1bHQgPSB0cnVlO1xcbiAgICBpbnQgYml0SW5CeXRlU3RlcHBlcjtcXG4gICAgZmxvYXQgdmFsWSwgdmFsdWVZLCBzY2FsZVg7XFxuICAgIGludCBoaXQsIGJpdG1hc2ssIHZhbFg7XFxuICAgIGZvcihpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHtcXG4gICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCA0OyBqKyspIHtcXG4gICAgICAgICAgICBmb3IoaW50IGsgPSAwOyBrIDwgNDsgaysrKSB7XFxuICAgICAgICAgICAgICAgIGJpdEluQnl0ZVN0ZXBwZXIgPSBtb2Q4KGogKiA0ICsgayk7XFxuICAgICAgICAgICAgICAgIHZhbFggPSBpICogMiArIGogLyAyO1xcbiAgICAgICAgICAgICAgICB2YWxZID0gZFtpXVtqXVtrXTtcXG4gICAgICAgICAgICAgICAgdmFsdWVZID0gdmFsWSAqIChoZWlnaHQgLSAxLjApICsgMC41O1xcbiAgICAgICAgICAgICAgICBzY2FsZVggPSAoZmxvYXQodmFsWCkgKyAwLjUpIC8gOC4wO1xcbiAgICAgICAgICAgICAgICBoaXQgPSBpbnQodGV4dHVyZTJEKG1hc2ssIHZlYzIoc2NhbGVYLCAodmFsdWVZICsgMC41KSAvIGhlaWdodCkpWzNdICogMjU1LjApIC8gaW50KHBvdygyLjAsIGZsb2F0KGJpdEluQnl0ZVN0ZXBwZXIpKSk7XFxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBtb2QyKGhpdCkgPT0gMTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxudmVjNCBwb3NpdGlvbihcXG4gICAgICAgIGZsb2F0IGRlcHRoLFxcbiAgICAgICAgdmVjMiByZXNvbHV0aW9uLCB2ZWMyIHZpZXdCb3hQb3NpdGlvbiwgdmVjMiB2aWV3Qm94U2l6ZSxcXG4gICAgICAgIG1hdDQgZGltc1s0XSxcXG4gICAgICAgIGZsb2F0IHNpZ251bSxcXG4gICAgICAgIG1hdDQgZGltMUEsIG1hdDQgZGltMkEsIG1hdDQgZGltMUIsIG1hdDQgZGltMkIsIG1hdDQgZGltMUMsIG1hdDQgZGltMkMsIG1hdDQgZGltMUQsIG1hdDQgZGltMkQsXFxuICAgICAgICBtYXQ0IGxvQSwgbWF0NCBoaUEsIG1hdDQgbG9CLCBtYXQ0IGhpQiwgbWF0NCBsb0MsIG1hdDQgaGlDLCBtYXQ0IGxvRCwgbWF0NCBoaUQsXFxuICAgICAgICBzYW1wbGVyMkQgbWFzaywgZmxvYXQgbWFza0hlaWdodFxcbiAgICApIHtcXG5cXG4gICAgZmxvYXQgeCA9IDAuNSAqIHNpZ251bSArIDAuNTtcXG4gICAgZmxvYXQgeSA9IGF4aXNZKHgsIGRpbXMsIGRpbTFBLCBkaW0yQSwgZGltMUIsIGRpbTJCLCBkaW0xQywgZGltMkMsIGRpbTFELCBkaW0yRCk7XFxuXFxuICAgIGZsb2F0IHNob3cgPSBmbG9hdChcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluQm91bmRpbmdCb3goZGltcywgbG9BLCBoaUEsIGxvQiwgaGlCLCBsb0MsIGhpQywgbG9ELCBoaUQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICYmIHdpdGhpblJhc3Rlck1hc2soZGltcywgbWFzaywgbWFza0hlaWdodClcXG4gICAgICAgICAgICAgICAgICAgICAgKTtcXG5cXG4gICAgdmVjMiB2aWV3Qm94WFkgPSB2aWV3Qm94UG9zaXRpb24gKyB2aWV3Qm94U2l6ZSAqIHZlYzIoeCwgeSk7XFxuICAgIGZsb2F0IGRlcHRoT3JIaWRlID0gZGVwdGggKyAyLjAgKiAoMS4wIC0gc2hvdyk7XFxuXFxuICAgIHJldHVybiB2ZWM0KFxcbiAgICAgICAgeHlQcm9qZWN0aW9uICogKDIuMCAqIHZpZXdCb3hYWSAvIHJlc29sdXRpb24gLSAxLjApLFxcbiAgICAgICAgZGVwdGhPckhpZGUsXFxuICAgICAgICAxLjBcXG4gICAgKTtcXG59XFxuXFxudm9pZCBtYWluKCkge1xcblxcbiAgICBmbG9hdCBwcm9taW5lbmNlID0gYWJzKHBmWzNdKTtcXG5cXG4gICAgbWF0NCBwWzRdO1xcbiAgICBwWzBdID0gbWF0NChwMCwgcDEsIHAyLCBwMyk7XFxuICAgIHBbMV0gPSBtYXQ0KHA0LCBwNSwgcDYsIHA3KTtcXG4gICAgcFsyXSA9IG1hdDQocDgsIHA5LCBwYSwgcGIpO1xcbiAgICBwWzNdID0gbWF0NChwYywgcGQsIHBlLCBhYnMocGYpKTtcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSBwb3NpdGlvbihcXG4gICAgICAgIDEuMCAtIHByb21pbmVuY2UsXFxuICAgICAgICByZXNvbHV0aW9uLCB2aWV3Qm94UG9zaXRpb24sIHZpZXdCb3hTaXplLFxcbiAgICAgICAgcCxcXG4gICAgICAgIHNpZ24ocGZbM10pLFxcbiAgICAgICAgZGltMUEsIGRpbTJBLCBkaW0xQiwgZGltMkIsIGRpbTFDLCBkaW0yQywgZGltMUQsIGRpbTJELFxcbiAgICAgICAgbG9BLCBoaUEsIGxvQiwgaGlCLCBsb0MsIGhpQywgbG9ELCBoaUQsXFxuICAgICAgICBtYXNrLCBtYXNrSGVpZ2h0XFxuICAgICk7XFxuXFxuICAgIGZyYWdDb2xvciA9IHZlYzQocGYucmdiLCAxLjApO1xcbn1cXG5cIl0pLHM9bihbXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICBnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XFxufVxcblwiXSksbD10KFwiLi4vLi4vbGliXCIpLGM9MWUtNix1PTFlLTcsaD0yMDQ4LGY9NjQscD0yLGQ9NCxnPTgsdj1mL2csbT1bMTE5LDExOSwxMTldLHk9bmV3IFVpbnQ4QXJyYXkoNCkseD1uZXcgVWludDhBcnJheSg0KSxiPXtzaGFwZTpbMjU2LDFdLGZvcm1hdDpcInJnYmFcIix0eXBlOlwidWludDhcIixtYWc6XCJuZWFyZXN0XCIsbWluOlwibmVhcmVzdFwifTtmdW5jdGlvbiBfKHQsZSxyLG4saSl7dmFyIGE9dC5fZ2w7YS5lbmFibGUoYS5TQ0lTU09SX1RFU1QpLGEuc2Npc3NvcihlLHIsbixpKSx0LmNsZWFyKHtjb2xvcjpbMCwwLDAsMF0sZGVwdGg6MX0pfWZ1bmN0aW9uIHcodCxlLHIsbixpLGEpe3ZhciBvPWEua2V5O3IuZHJhd0NvbXBsZXRlZHx8KCFmdW5jdGlvbih0KXt0LnJlYWQoe3g6MCx5OjAsd2lkdGg6MSxoZWlnaHQ6MSxkYXRhOnl9KX0odCksci5kcmF3Q29tcGxldGVkPSEwKSxmdW5jdGlvbiBzKGwpe3ZhciBjO2M9TWF0aC5taW4obixpLWwqbiksYS5vZmZzZXQ9cCpsKm4sYS5jb3VudD1wKmMsMD09PWwmJih3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoci5jdXJyZW50UmFmc1tvXSksZGVsZXRlIHIuY3VycmVudFJhZnNbb10sXyh0LGEuc2Npc3NvclgsYS5zY2lzc29yWSxhLnNjaXNzb3JXaWR0aCxhLnZpZXdCb3hTaXplWzFdKSksci5jbGVhck9ubHl8fChlKGEpLGwqbitjPGkmJihyLmN1cnJlbnRSYWZzW29dPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtzKGwrMSl9KSksci5kcmF3Q29tcGxldGVkPSExKX0oMCl9ZnVuY3Rpb24gayh0LGUpe3JldHVybih0Pj4+OCplKSUyNTYvMjU1fWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBuLGksYSxvPVtdO2ZvcihpPTA7aTx0O2krKylmb3IoYT0wO2E8cDthKyspZm9yKG49MDtuPGQ7bisrKW8ucHVzaChlW2kqZityKmQrbl0pLHIqZCtuPT09Zi0xJiZhJTI9PTAmJihvW28ubGVuZ3RoLTFdKj0tMSk7cmV0dXJuIG99ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixwLGQseSxUPWUuY29udGV4dCxNPWUucGljayxTPWUucmVnbCxFPXtjdXJyZW50UmFmczp7fSxkcmF3Q29tcGxldGVkOiEwLGNsZWFyT25seTohMX0sQz1mdW5jdGlvbih0KXtmb3IodmFyIGU9e30scj0wO3I8MTY7cisrKWVbXCJwXCIrci50b1N0cmluZygxNildPXQuYnVmZmVyKHt1c2FnZTpcImR5bmFtaWNcIix0eXBlOlwiZmxvYXRcIixkYXRhOm5ldyBVaW50OEFycmF5KDApfSk7cmV0dXJuIGV9KFMpLEw9Uy50ZXh0dXJlKGIpO08oZSk7dmFyIHo9Uyh7cHJvZmlsZTohMSxibGVuZDp7ZW5hYmxlOlQsZnVuYzp7c3JjUkdCOlwic3JjIGFscGhhXCIsZHN0UkdCOlwib25lIG1pbnVzIHNyYyBhbHBoYVwiLHNyY0FscGhhOjEsZHN0QWxwaGE6MX0sZXF1YXRpb246e3JnYjpcImFkZFwiLGFscGhhOlwiYWRkXCJ9LGNvbG9yOlswLDAsMCwwXX0sZGVwdGg6e2VuYWJsZTohVCxtYXNrOiEwLGZ1bmM6XCJsZXNzXCIscmFuZ2U6WzAsMV19LGN1bGw6e2VuYWJsZTohMCxmYWNlOlwiYmFja1wifSxzY2lzc29yOntlbmFibGU6ITAsYm94Ont4OlMucHJvcChcInNjaXNzb3JYXCIpLHk6Uy5wcm9wKFwic2Npc3NvcllcIiksd2lkdGg6Uy5wcm9wKFwic2Npc3NvcldpZHRoXCIpLGhlaWdodDpTLnByb3AoXCJzY2lzc29ySGVpZ2h0XCIpfX0sdmlld3BvcnQ6e3g6Uy5wcm9wKFwidmlld3BvcnRYXCIpLHk6Uy5wcm9wKFwidmlld3BvcnRZXCIpLHdpZHRoOlMucHJvcChcInZpZXdwb3J0V2lkdGhcIiksaGVpZ2h0OlMucHJvcChcInZpZXdwb3J0SGVpZ2h0XCIpfSxkaXRoZXI6ITEsdmVydDpNP286VD9hOmksZnJhZzpzLHByaW1pdGl2ZTpcImxpbmVzXCIsbGluZVdpZHRoOjEsYXR0cmlidXRlczpDLHVuaWZvcm1zOntyZXNvbHV0aW9uOlMucHJvcChcInJlc29sdXRpb25cIiksdmlld0JveFBvc2l0aW9uOlMucHJvcChcInZpZXdCb3hQb3NpdGlvblwiKSx2aWV3Qm94U2l6ZTpTLnByb3AoXCJ2aWV3Qm94U2l6ZVwiKSxkaW0xQTpTLnByb3AoXCJkaW0xQVwiKSxkaW0yQTpTLnByb3AoXCJkaW0yQVwiKSxkaW0xQjpTLnByb3AoXCJkaW0xQlwiKSxkaW0yQjpTLnByb3AoXCJkaW0yQlwiKSxkaW0xQzpTLnByb3AoXCJkaW0xQ1wiKSxkaW0yQzpTLnByb3AoXCJkaW0yQ1wiKSxkaW0xRDpTLnByb3AoXCJkaW0xRFwiKSxkaW0yRDpTLnByb3AoXCJkaW0yRFwiKSxsb0E6Uy5wcm9wKFwibG9BXCIpLGhpQTpTLnByb3AoXCJoaUFcIiksbG9COlMucHJvcChcImxvQlwiKSxoaUI6Uy5wcm9wKFwiaGlCXCIpLGxvQzpTLnByb3AoXCJsb0NcIiksaGlDOlMucHJvcChcImhpQ1wiKSxsb0Q6Uy5wcm9wKFwibG9EXCIpLGhpRDpTLnByb3AoXCJoaURcIikscGFsZXR0ZTpMLG1hc2s6Uy5wcm9wKFwibWFza1RleHR1cmVcIiksbWFza0hlaWdodDpTLnByb3AoXCJtYXNrSGVpZ2h0XCIpLGNvbG9yQ2xhbXA6Uy5wcm9wKFwiY29sb3JDbGFtcFwiKX0sb2Zmc2V0OlMucHJvcChcIm9mZnNldFwiKSxjb3VudDpTLnByb3AoXCJjb3VudFwiKX0pO2Z1bmN0aW9uIE8odCl7cj10Lm1vZGVsLG49dC52aWV3TW9kZWwscD1uLmRpbWVuc2lvbnMuc2xpY2UoKSxkPXBbMF0/cFswXS52YWx1ZXMubGVuZ3RoOjA7dmFyIGU9ci5saW5lcyxpPU0/ZS5jb2xvci5tYXAoZnVuY3Rpb24odCxyKXtyZXR1cm4gci9lLmNvbG9yLmxlbmd0aH0pOmUuY29sb3IsYT1NYXRoLm1heCgxLzI1NSxNYXRoLnBvdygxL2kubGVuZ3RoLDEvMykpLG89ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpPWUubGVuZ3RoLGE9W10sbz0wO288dDtvKyspZm9yKHZhciBzPTA7czxmO3MrKylhLnB1c2goczxpP2Vbc10ucGFkZGVkVW5pdFZhbHVlc1tvXTpzPT09Zi0xPyhuPXJbb10sTWF0aC5tYXgoYyxNYXRoLm1pbigxLWMsbikpKTpzPj1mLTQ/ayhvLGYtMi1zKTouNSk7cmV0dXJuIGF9KGQscCxpKTshZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248MTY7bisrKXRbXCJwXCIrbi50b1N0cmluZygxNildKEEoZSxyLG4pKX0oQyxkLG8pLEw9Uy50ZXh0dXJlKGwuZXh0ZW5kRmxhdCh7ZGF0YTpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPVtdLGk9MDtpPDI1NjtpKyspe3ZhciBhPXQoaS8yNTUpO24ucHVzaCgoZT9tOmEpLmNvbmNhdChyKSl9cmV0dXJuIG59KHIudW5pdFRvQ29sb3IsVCxNYXRoLnJvdW5kKDI1NSooVD9hOjEpKSl9LGIpKX12YXIgST1bMCwxXTt2YXIgRD1bXTtmdW5jdGlvbiBQKHQsZSxuLGksYSxvLHMsYyx1LGgsZil7dmFyIHAsZCxnLHYsbT1bdCxlXSx5PVswLDFdLm1hcChmdW5jdGlvbigpe3JldHVyblswLDEsMiwzXS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgxNil9KX0pO2ZvcihwPTA7cDwyO3ArKylmb3Iodj1tW3BdLGQ9MDtkPDQ7ZCsrKWZvcihnPTA7ZzwxNjtnKyspeVtwXVtkXVtnXT1nKzE2KmQ9PT12PzE6MDt2YXIgeD1yLmxpbmVzLmNhbnZhc092ZXJkcmFnLGI9ci5kb21haW4sXz1yLmNhbnZhc1dpZHRoLHc9ci5jYW52YXNIZWlnaHQ7cmV0dXJuIGwuZXh0ZW5kRmxhdCh7a2V5OnMscmVzb2x1dGlvbjpbXyx3XSx2aWV3Qm94UG9zaXRpb246W24reCxpXSx2aWV3Qm94U2l6ZTpbYSxvXSxpOnQsaWk6ZSxkaW0xQTp5WzBdWzBdLGRpbTFCOnlbMF1bMV0sZGltMUM6eVswXVsyXSxkaW0xRDp5WzBdWzNdLGRpbTJBOnlbMV1bMF0sZGltMkI6eVsxXVsxXSxkaW0yQzp5WzFdWzJdLGRpbTJEOnlbMV1bM10sY29sb3JDbGFtcDpJLHNjaXNzb3JYOihjPT09dT8wOm4reCkrKHIucGFkLmwteCkrci5sYXlvdXRXaWR0aCpiLnhbMF0sc2Npc3NvcldpZHRoOihjPT09aD9fLW4reDphKy41KSsoYz09PXU/bit4OjApLHNjaXNzb3JZOmkrci5wYWQuYityLmxheW91dEhlaWdodCpiLnlbMF0sc2Npc3NvckhlaWdodDpvLHZpZXdwb3J0WDpyLnBhZC5sLXgrci5sYXlvdXRXaWR0aCpiLnhbMF0sdmlld3BvcnRZOnIucGFkLmIrci5sYXlvdXRIZWlnaHQqYi55WzBdLHZpZXdwb3J0V2lkdGg6Xyx2aWV3cG9ydEhlaWdodDp3fSxmKX1yZXR1cm57c2V0Q29sb3JEb21haW46ZnVuY3Rpb24odCl7SVswXT10WzBdLElbMV09dFsxXX0scmVuZGVyOmZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhLG8scz10Lmxlbmd0aCxsPTEvMCxjPS0xLzA7Zm9yKGk9MDtpPHM7aSsrKXRbaV0uZGltMi5jYW52YXNYPmMmJihjPXRbaV0uZGltMi5jYW52YXNYLG89aSksdFtpXS5kaW0xLmNhbnZhc1g8bCYmKGw9dFtpXS5kaW0xLmNhbnZhc1gsYT1pKTswPT09cyYmXyhTLDAsMCxyLmNhbnZhc1dpZHRoLHIuY2FudmFzSGVpZ2h0KTt2YXIgZj1UP3t9OmZ1bmN0aW9uKCl7dmFyIHQsZSxyLG49WzAsMV0ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuWzAsMSwyLDNdLm1hcChmdW5jdGlvbigpe3JldHVybiBuZXcgRmxvYXQzMkFycmF5KDE2KX0pfSk7Zm9yKHQ9MDt0PDI7dCsrKWZvcihlPTA7ZTw0O2UrKylmb3Iocj0wO3I8MTY7cisrKXt2YXIgaSxhPXIrMTYqZTtpPWE8cC5sZW5ndGg/cFthXS5icnVzaC5maWx0ZXIuZ2V0Qm91bmRzKClbdF06dCxuW3RdW2VdW3JdPWkrKDIqdC0xKSp1fWZ1bmN0aW9uIG8odCxlKXt2YXIgcj1oLTE7cmV0dXJuW01hdGgubWF4KDAsTWF0aC5mbG9vcihlWzBdKnIpKSxNYXRoLm1pbihyLE1hdGguY2VpbChlWzFdKnIpKV19Zm9yKHZhciBzPUFycmF5LmFwcGx5KG51bGwsbmV3IEFycmF5KGgqdikpLm1hcChmdW5jdGlvbigpe3JldHVybiAyNTV9KSxsPTA7bDxwLmxlbmd0aDtsKyspe3ZhciBjPWwlZyxmPShsLWMpL2csZD1NYXRoLnBvdygyLGMpLG09cFtsXSx4PW0uYnJ1c2guZmlsdGVyLmdldCgpO2lmKCEoeC5sZW5ndGg8MikpZm9yKHZhciBiPW8oMCx4WzBdKVsxXSxfPTE7Xzx4Lmxlbmd0aDtfKyspe2Zvcih2YXIgdz1vKDAseFtfXSksaz1iKzE7azx3WzBdO2srKylzW2sqditmXSY9fmQ7Yj1NYXRoLm1heChiLHdbMV0pfX12YXIgQT17c2hhcGU6W3YsaF0sZm9ybWF0OlwiYWxwaGFcIix0eXBlOlwidWludDhcIixtYWc6XCJuZWFyZXN0XCIsbWluOlwibmVhcmVzdFwiLGRhdGE6c307cmV0dXJuIHk/eShBKTp5PVMudGV4dHVyZShBKSx7bWFza1RleHR1cmU6eSxtYXNrSGVpZ2h0OmgsbG9BOm5bMF1bMF0sbG9COm5bMF1bMV0sbG9DOm5bMF1bMl0sbG9EOm5bMF1bM10saGlBOm5bMV1bMF0saGlCOm5bMV1bMV0saGlDOm5bMV1bMl0saGlEOm5bMV1bM119fSgpO2ZvcihpPTA7aTxzO2krKyl7dmFyIG09dFtpXSx4PW0uZGltMSxiPXguY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleCxrPW0uY2FudmFzWCxBPW0uY2FudmFzWSxNPW0uZGltMi5jcm9zc2ZpbHRlckRpbWVuc2lvbkluZGV4LEM9bS5wYW5lbFNpemVYLEw9bS5wYW5lbFNpemVZLE89aytDO2lmKGV8fCFEW2JdfHxEW2JdWzBdIT09a3x8RFtiXVsxXSE9PU8pe0RbYl09W2ssT107dmFyIEk9UChiLE0sayxBLEMsTCx4LmNyb3NzZmlsdGVyRGltZW5zaW9uSW5kZXgsaSxhLG8sZik7RS5jbGVhck9ubHk9bix3KFMseixFLGU/ci5saW5lcy5ibG9ja0xpbmVDb3VudDpkLGQsSSl9fX0scmVhZFBpeGVsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFMucmVhZCh7eDp0LHk6ZSx3aWR0aDoxLGhlaWdodDoxLGRhdGE6eH0pLHh9LHJlYWRQaXhlbHM6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bmV3IFVpbnQ4QXJyYXkoNCpyKm4pO3JldHVybiBTLnJlYWQoe3g6dCx5OmUsd2lkdGg6cixoZWlnaHQ6bixkYXRhOml9KSxpfSxkZXN0cm95OmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHQuc3R5bGVbXCJwb2ludGVyLWV2ZW50c1wiXT1cIm5vbmVcIixMLmRlc3Ryb3koKSx5JiZ5LmRlc3Ryb3koKSxDKUNbZV0uZGVzdHJveSgpfSx1cGRhdGU6T319fSx7XCIuLi8uLi9saWJcIjo3MDEsZ2xzbGlmeTo0MDJ9XSwxMDIzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE7Zm9yKG58fChuPTEvMCksaT0wO2k8ZS5sZW5ndGg7aSsrKShhPWVbaV0pLnZpc2libGUmJihuPU1hdGgubWluKG4sYVtyXS5sZW5ndGgpKTtmb3Iobj09PTEvMCYmKG49MCksdC5fbGVuZ3RoPW4saT0wO2k8ZS5sZW5ndGg7aSsrKShhPWVbaV0pLnZpc2libGUmJihhLl9sZW5ndGg9bik7cmV0dXJuIG59fSx7fV0sMTAyNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZVwiKSxzPXQoXCIuLi8uLi9saWIvZ3VwXCIpLGw9cy5rZXlGdW4sYz1zLnJlcGVhdCx1PXMudW53cmFwLGg9dChcIi4vY29uc3RhbnRzXCIpLGY9dChcIi4vYXhpc2JydXNoXCIpLHA9dChcIi4vbGluZXNcIik7ZnVuY3Rpb24gZCh0KXtyZXR1cm4hKFwidmlzaWJsZVwiaW4gdCl8fHQudmlzaWJsZX1mdW5jdGlvbiBnKHQpe3ZhciBlPXQucmFuZ2U/dC5yYW5nZVswXTppLmFnZ051bXMoTWF0aC5taW4sbnVsbCx0LnZhbHVlcyx0Ll9sZW5ndGgpLHI9dC5yYW5nZT90LnJhbmdlWzFdOmkuYWdnTnVtcyhNYXRoLm1heCxudWxsLHQudmFsdWVzLHQuX2xlbmd0aCk7cmV0dXJuIWlzTmFOKGUpJiZpc0Zpbml0ZShlKXx8KGU9MCksIWlzTmFOKHIpJiZpc0Zpbml0ZShyKXx8KHI9MCksZT09PXImJigwPT09ZT8oZS09MSxyKz0xKTooZSo9Ljkscio9MS4xKSksW2Uscl19ZnVuY3Rpb24gdih0KXtyZXR1cm4gdC5kaW1lbnNpb25zLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHQuYnJ1c2guZmlsdGVyU3BlY2lmaWVkfSl9ZnVuY3Rpb24gbSh0LGUscil7dmFyIGE9dShlKSxzPWEudHJhY2UsbD1hLmxpbmVDb2xvcixjPXMubGluZSxmPWMucmV2ZXJzZXNjYWxlP28uZmxpcFNjYWxlKGEuY3NjYWxlKTphLmNzY2FsZSxwPXMuZG9tYWluLHY9cy5kaW1lbnNpb25zLG09dC53aWR0aCx5PXMubGFiZWxmb250LHg9cy50aWNrZm9udCxiPXMucmFuZ2Vmb250LF89aS5leHRlbmREZWVwTm9BcnJheXMoe30sYyx7Y29sb3I6bC5tYXAobi5zY2FsZS5saW5lYXIoKS5kb21haW4oZyh7dmFsdWVzOmwscmFuZ2U6W2MuY21pbixjLmNtYXhdLF9sZW5ndGg6cy5fbGVuZ3RofSkpKSxibG9ja0xpbmVDb3VudDpoLmJsb2NrTGluZUNvdW50LGNhbnZhc092ZXJkcmFnOmgub3ZlcmRyYWcqaC5jYW52YXNQaXhlbFJhdGlvfSksdz1NYXRoLmZsb29yKG0qKHAueFsxXS1wLnhbMF0pKSxrPU1hdGguZmxvb3IodC5oZWlnaHQqKHAueVsxXS1wLnlbMF0pKSxBPXQubWFyZ2lufHx7bDo4MCxyOjgwLHQ6MTAwLGI6ODB9LFQ9dyxNPWs7cmV0dXJue2tleTpyLGNvbENvdW50OnYuZmlsdGVyKGQpLmxlbmd0aCxkaW1lbnNpb25zOnYsdGlja0Rpc3RhbmNlOmgudGlja0Rpc3RhbmNlLHVuaXRUb0NvbG9yOmZ1bmN0aW9uKHQpe3ZhciBlPXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkscj10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbi5yZ2IodFsxXSl9KSxpPVwicmdiXCIuc3BsaXQoXCJcIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBuLnNjYWxlLmxpbmVhcigpLmNsYW1wKCEwKS5kb21haW4oZSkucmFuZ2Uoci5tYXAoKGk9dCxmdW5jdGlvbih0KXtyZXR1cm4gdFtpXX0pKSk7dmFyIGl9KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlKHQpfSl9fShmKSxsaW5lczpfLGxhYmVsRm9udDp5LHRpY2tGb250OngscmFuZ2VGb250OmIsbGF5b3V0V2lkdGg6bSxsYXlvdXRIZWlnaHQ6dC5oZWlnaHQsZG9tYWluOnAsdHJhbnNsYXRlWDpwLnhbMF0qbSx0cmFuc2xhdGVZOnQuaGVpZ2h0LXAueVsxXSp0LmhlaWdodCxwYWQ6QSxjYW52YXNXaWR0aDpUKmguY2FudmFzUGl4ZWxSYXRpbysyKl8uY2FudmFzT3ZlcmRyYWcsY2FudmFzSGVpZ2h0Ok0qaC5jYW52YXNQaXhlbFJhdGlvLHdpZHRoOlQsaGVpZ2h0Ok0sY2FudmFzUGl4ZWxSYXRpbzpoLmNhbnZhc1BpeGVsUmF0aW99fWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBhPXIud2lkdGgsbz1yLmhlaWdodCxzPXIuZGltZW5zaW9ucyxsPXIuY2FudmFzUGl4ZWxSYXRpbyxjPWZ1bmN0aW9uKHQpe3JldHVybiBhKnQvTWF0aC5tYXgoMSxyLmNvbENvdW50LTEpfSx1PWgudmVydGljYWxQYWRkaW5nL28scD1mdW5jdGlvbih0LGUpe3JldHVybiBuLnNjYWxlLmxpbmVhcigpLnJhbmdlKFtlLHQtZV0pfShvLGgudmVydGljYWxQYWRkaW5nKSxtPXtrZXk6ci5rZXkseFNjYWxlOmMsbW9kZWw6cixpbkJydXNoRHJhZzohMX0seT17fTtyZXR1cm4gbS5kaW1lbnNpb25zPXMuZmlsdGVyKGQpLm1hcChmdW5jdGlvbihhLHMpe3ZhciBkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uc2NhbGUubGluZWFyKCkuZG9tYWluKGcodCkpLnJhbmdlKFtlLDEtZV0pfShhLHUpLHg9eVthLmxhYmVsXTt5W2EubGFiZWxdPSh4fHwwKSsxO3ZhciBiPWEubGFiZWwrKHg/XCJfX1wiK3g6XCJcIiksXz1hLmNvbnN0cmFpbnRyYW5nZSx3PV8mJl8ubGVuZ3RoO3cmJiFBcnJheS5pc0FycmF5KF9bMF0pJiYoXz1bX10pO3ZhciBrPXc/Xy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGQpfSk6W1swLDFdXSxBPWEudmFsdWVzO0EubGVuZ3RoPmEuX2xlbmd0aCYmKEE9QS5zbGljZSgwLGEuX2xlbmd0aCkpO3ZhciBULE09YS50aWNrdmFscztmdW5jdGlvbiBTKHQsZSl7cmV0dXJue3ZhbDp0LHRleHQ6VFtlXX19ZnVuY3Rpb24gRSh0LGUpe3JldHVybiB0LnZhbC1lLnZhbH1pZihBcnJheS5pc0FycmF5KE0pJiZNLmxlbmd0aCl7VD1hLnRpY2t0ZXh0LEFycmF5LmlzQXJyYXkoVCkmJlQubGVuZ3RoP1QubGVuZ3RoPk0ubGVuZ3RoP1Q9VC5zbGljZSgwLE0ubGVuZ3RoKTpNLmxlbmd0aD5ULmxlbmd0aCYmKE09TS5zbGljZSgwLFQubGVuZ3RoKSk6VD1NLm1hcChuLmZvcm1hdChhLnRpY2tmb3JtYXQpKTtmb3IodmFyIEM9MTtDPE0ubGVuZ3RoO0MrKylpZihNW0NdPE1bQy0xXSl7Zm9yKHZhciBMPU0ubWFwKFMpLnNvcnQoRSksej0wO3o8TS5sZW5ndGg7eisrKU1bel09TFt6XS52YWwsVFt6XT1MW3pdLnRleHQ7YnJlYWt9fWVsc2UgTT12b2lkIDA7cmV0dXJue2tleTpiLGxhYmVsOmEubGFiZWwsdGlja0Zvcm1hdDphLnRpY2tmb3JtYXQsdGlja3ZhbHM6TSx0aWNrdGV4dDpULG9yZGluYWw6ISFNLG11bHRpc2VsZWN0OmEubXVsdGlzZWxlY3QseEluZGV4OnMsY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleDpzLHZpc2libGVJbmRleDphLl9pbmRleCxoZWlnaHQ6byx2YWx1ZXM6QSxwYWRkZWRVbml0VmFsdWVzOkEubWFwKGQpLHVuaXRUaWNrdmFsczpNJiZNLm1hcChkKSx4U2NhbGU6Yyx4OmMocyksY2FudmFzWDpjKHMpKmwsdW5pdFRvUGFkZGVkUHg6cCxkb21haW5TY2FsZTpmdW5jdGlvbih0LGUscixpLGEpe3ZhciBvLHMsbD1nKHIpO3JldHVybiBpP24uc2NhbGUub3JkaW5hbCgpLmRvbWFpbihpLm1hcCgobz1uLmZvcm1hdChyLnRpY2tmb3JtYXQpLHM9YSxzP2Z1bmN0aW9uKHQsZSl7dmFyIHI9c1tlXTtyZXR1cm4gbnVsbD09cj9vKHQpOnJ9Om8pKSkucmFuZ2UoaS5tYXAoZnVuY3Rpb24ocil7dmFyIG49KHItbFswXSkvKGxbMV0tbFswXSk7cmV0dXJuIHQtZStuKigyKmUtdCl9KSk6bi5zY2FsZS5saW5lYXIoKS5kb21haW4obCkucmFuZ2UoW3QtZSxlXSl9KG8saC52ZXJ0aWNhbFBhZGRpbmcsYSxNLFQpLG9yZGluYWxTY2FsZTpmdW5jdGlvbih0KXtpZih0LnRpY2t2YWxzKXt2YXIgZT1nKHQpO3JldHVybiBuLnNjYWxlLm9yZGluYWwoKS5kb21haW4odC50aWNrdmFscykucmFuZ2UodC50aWNrdmFscy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuKHQtZVswXSkvKGVbMV0tZVswXSl9KSl9fShhKSxwYXJlbnQ6bSxtb2RlbDpyLGJydXNoOmYubWFrZUJydXNoKHQsdyxrLGZ1bmN0aW9uKCl7dC5saW5lUGlja0FjdGl2ZSghMSl9LGZ1bmN0aW9uKCl7dmFyIGU9bTtlLmZvY3VzTGF5ZXImJmUuZm9jdXNMYXllci5yZW5kZXIoZS5wYW5lbHMsITApO3ZhciByPXYoZSk7IXQuY29udGV4dFNob3duKCkmJnI/KGUuY29udGV4dExheWVyJiZlLmNvbnRleHRMYXllci5yZW5kZXIoZS5wYW5lbHMsITApLHQuY29udGV4dFNob3duKCEwKSk6dC5jb250ZXh0U2hvd24oKSYmIXImJihlLmNvbnRleHRMYXllciYmZS5jb250ZXh0TGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwLCEwKSx0LmNvbnRleHRTaG93bighMSkpfSxmdW5jdGlvbihyKXt2YXIgbj1tO2lmKG4uZm9jdXNMYXllci5yZW5kZXIobi5wYW5lbHMsITApLG4ucGlja0xheWVyJiZuLnBpY2tMYXllci5yZW5kZXIobi5wYW5lbHMsITApLHQubGluZVBpY2tBY3RpdmUoITApLGUmJmUuZmlsdGVyQ2hhbmdlZCl7dmFyIG89ZC5pbnZlcnQscz1yLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAobykuc29ydChpLnNvcnRlckFzYyl9KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0tZVswXX0pO2UuZmlsdGVyQ2hhbmdlZChuLmtleSxhLl9pbmRleCxzKX19KX19KSxtfWZ1bmN0aW9uIHgodCl7dC5jbGFzc2VkKGguY24uYXhpc0V4dGVudFRleHQsITApLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLFwibWlkZGxlXCIpLnN0eWxlKFwiY3Vyc29yXCIsXCJkZWZhdWx0XCIpLnN0eWxlKFwidXNlci1zZWxlY3RcIixcIm5vbmVcIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyxkKXt2YXIgZyxiLF89KGc9ITAsYj0hMSx7bGluZVBpY2tBY3RpdmU6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/Zz0hIXQ6Z30sY29udGV4dFNob3duOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2I9ISF0OmJ9fSksdz1vLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdSh0KS50cmFjZS52aXNpYmxlfSkubWFwKG0uYmluZCgwLHMpKS5tYXAoeS5iaW5kKDAsXyxkKSk7ci5lYWNoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkuZXh0ZW5kRmxhdCh0LHdbZV0pfSk7dmFyIGs9ci5zZWxlY3RBbGwoXCIuZ2wtY2FudmFzXCIpLmVhY2goZnVuY3Rpb24odCl7dC52aWV3TW9kZWw9d1swXSx0Lm1vZGVsPXQudmlld01vZGVsP3Qudmlld01vZGVsLm1vZGVsOm51bGx9KSxBPW51bGw7ay5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQucGlja30pLnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixcImF1dG9cIikub24oXCJtb3VzZW1vdmVcIixmdW5jdGlvbih0KXtpZihfLmxpbmVQaWNrQWN0aXZlKCkmJnQubGluZUxheWVyJiZkJiZkLmhvdmVyKXt2YXIgZT1uLmV2ZW50LHI9dGhpcy53aWR0aCxpPXRoaXMuaGVpZ2h0LGE9bi5tb3VzZSh0aGlzKSxvPWFbMF0scz1hWzFdO2lmKG88MHx8czwwfHxvPj1yfHxzPj1pKXJldHVybjt2YXIgbD10LmxpbmVMYXllci5yZWFkUGl4ZWwobyxpLTEtcyksYz0wIT09bFszXSx1PWM/bFsyXSsyNTYqKGxbMV0rMjU2KmxbMF0pOm51bGwsaD17eDpvLHk6cyxjbGllbnRYOmUuY2xpZW50WCxjbGllbnRZOmUuY2xpZW50WSxkYXRhSW5kZXg6dC5tb2RlbC5rZXksY3VydmVOdW1iZXI6dX07dSE9PUEmJihjP2QuaG92ZXIoaCk6ZC51bmhvdmVyJiZkLnVuaG92ZXIoaCksQT11KX19KSxrLnN0eWxlKFwib3BhY2l0eVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnBpY2s/LjAxOjF9KSxlLnN0eWxlKFwiYmFja2dyb3VuZFwiLFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwKVwiKTt2YXIgVD1lLnNlbGVjdEFsbChcIi5cIitoLmNuLnBhcmNvb3JkcykuZGF0YSh3LGwpO1QuZXhpdCgpLnJlbW92ZSgpLFQuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoaC5jbi5wYXJjb29yZHMsITApLnN0eWxlKFwic2hhcGUtcmVuZGVyaW5nXCIsXCJjcmlzcEVkZ2VzXCIpLnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixcIm5vbmVcIiksVC5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrdC5tb2RlbC50cmFuc2xhdGVYK1wiLFwiK3QubW9kZWwudHJhbnNsYXRlWStcIilcIn0pO3ZhciBNPVQuc2VsZWN0QWxsKFwiLlwiK2guY24ucGFyY29vcmRzQ29udHJvbFZpZXcpLmRhdGEoYyxsKTtNLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKGguY24ucGFyY29vcmRzQ29udHJvbFZpZXcsITApLE0uYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKFwiK3QubW9kZWwucGFkLmwrXCIsXCIrdC5tb2RlbC5wYWQudCtcIilcIn0pO3ZhciBTPU0uc2VsZWN0QWxsKFwiLlwiK2guY24ueUF4aXMpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGltZW5zaW9uc30sbCk7ZnVuY3Rpb24gRSh0LGUpe2Zvcih2YXIgcj1lLnBhbmVsc3x8KGUucGFuZWxzPVtdKSxuPXQuZGF0YSgpLGk9bi5sZW5ndGgtMSxhPTA7YTxpO2ErKyl7dmFyIG89clthXXx8KHJbYV09e30pLHM9blthXSxsPW5bYSsxXTtvLmRpbTE9cyxvLmRpbTI9bCxvLmNhbnZhc1g9cy5jYW52YXNYLG8ucGFuZWxTaXplWD1sLmNhbnZhc1gtcy5jYW52YXNYLG8ucGFuZWxTaXplWT1lLm1vZGVsLmNhbnZhc0hlaWdodCxvLnk9MCxvLmNhbnZhc1k9MH19Uy5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChoLmNuLnlBeGlzLCEwKSxNLmVhY2goZnVuY3Rpb24odCl7RShTLHQpfSksay5lYWNoKGZ1bmN0aW9uKHQpe2lmKHQudmlld01vZGVsKXshdC5saW5lTGF5ZXJ8fGQ/dC5saW5lTGF5ZXI9cCh0aGlzLHQpOnQubGluZUxheWVyLnVwZGF0ZSh0KSwodC5rZXl8fDA9PT10LmtleSkmJih0LnZpZXdNb2RlbFt0LmtleV09dC5saW5lTGF5ZXIpO3ZhciBlPSF0LmNvbnRleHR8fGQ7dC5saW5lTGF5ZXIucmVuZGVyKHQudmlld01vZGVsLnBhbmVscyxlKX19KSxTLmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXtyZXR1cm5cInRyYW5zbGF0ZShcIit0LnhTY2FsZSh0LnhJbmRleCkrXCIsIDApXCJ9KSxTLmNhbGwobi5iZWhhdmlvci5kcmFnKCkub3JpZ2luKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkub24oXCJkcmFnXCIsZnVuY3Rpb24odCl7dmFyIGU9dC5wYXJlbnQ7Xy5saW5lUGlja0FjdGl2ZSghMSksdC54PU1hdGgubWF4KC1oLm92ZXJkcmFnLE1hdGgubWluKHQubW9kZWwud2lkdGgraC5vdmVyZHJhZyxuLmV2ZW50LngpKSx0LmNhbnZhc1g9dC54KnQubW9kZWwuY2FudmFzUGl4ZWxSYXRpbyxTLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54LWUueH0pLmVhY2goZnVuY3Rpb24oZSxyKXtlLnhJbmRleD1yLGUueD10PT09ZT9lLng6ZS54U2NhbGUoZS54SW5kZXgpLGUuY2FudmFzWD1lLngqZS5tb2RlbC5jYW52YXNQaXhlbFJhdGlvfSksRShTLGUpLFMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiAwIT09TWF0aC5hYnModC54SW5kZXgtZS54SW5kZXgpfSkuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKFwiK3QueFNjYWxlKHQueEluZGV4KStcIiwgMClcIn0pLG4uc2VsZWN0KHRoaXMpLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIit0LngrXCIsIDApXCIpLFMuZWFjaChmdW5jdGlvbihyLG4saSl7aT09PXQucGFyZW50LmtleSYmKGUuZGltZW5zaW9uc1tuXT1yKX0pLGUuY29udGV4dExheWVyJiZlLmNvbnRleHRMYXllci5yZW5kZXIoZS5wYW5lbHMsITEsIXYoZSkpLGUuZm9jdXNMYXllci5yZW5kZXImJmUuZm9jdXNMYXllci5yZW5kZXIoZS5wYW5lbHMpfSkub24oXCJkcmFnZW5kXCIsZnVuY3Rpb24odCl7dmFyIGU9dC5wYXJlbnQ7dC54PXQueFNjYWxlKHQueEluZGV4KSx0LmNhbnZhc1g9dC54KnQubW9kZWwuY2FudmFzUGl4ZWxSYXRpbyxFKFMsZSksbi5zZWxlY3QodGhpcykuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKFwiK3QueCtcIiwgMClcIn0pLGUuY29udGV4dExheWVyJiZlLmNvbnRleHRMYXllci5yZW5kZXIoZS5wYW5lbHMsITEsIXYoZSkpLGUuZm9jdXNMYXllciYmZS5mb2N1c0xheWVyLnJlbmRlcihlLnBhbmVscyksZS5waWNrTGF5ZXImJmUucGlja0xheWVyLnJlbmRlcihlLnBhbmVscywhMCksXy5saW5lUGlja0FjdGl2ZSghMCksZCYmZC5heGVzTW92ZWQmJmQuYXhlc01vdmVkKGUua2V5LGUuZGltZW5zaW9ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleH0pKX0pKSxTLmV4aXQoKS5yZW1vdmUoKTt2YXIgQz1TLnNlbGVjdEFsbChcIi5cIitoLmNuLmF4aXNPdmVybGF5cykuZGF0YShjLGwpO0MuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoaC5jbi5heGlzT3ZlcmxheXMsITApLEMuc2VsZWN0QWxsKFwiLlwiK2guY24uYXhpcykucmVtb3ZlKCk7dmFyIEw9Qy5zZWxlY3RBbGwoXCIuXCIraC5jbi5heGlzKS5kYXRhKGMsbCk7TC5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChoLmNuLmF4aXMsITApLEwuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10Lm1vZGVsLmhlaWdodC90Lm1vZGVsLnRpY2tEaXN0YW5jZSxyPXQuZG9tYWluU2NhbGUsaT1yLmRvbWFpbigpO24uc2VsZWN0KHRoaXMpLmNhbGwobi5zdmcuYXhpcygpLm9yaWVudChcImxlZnRcIikudGlja1NpemUoNCkub3V0ZXJUaWNrU2l6ZSgyKS50aWNrcyhlLHQudGlja0Zvcm1hdCkudGlja1ZhbHVlcyh0Lm9yZGluYWw/aTpudWxsKS50aWNrRm9ybWF0KHQub3JkaW5hbD9mdW5jdGlvbih0KXtyZXR1cm4gdH06bnVsbCkuc2NhbGUocikpLGEuZm9udChMLnNlbGVjdEFsbChcInRleHRcIiksdC5tb2RlbC50aWNrRm9udCl9KSxMLnNlbGVjdEFsbChcIi5kb21haW4sIC50aWNrPmxpbmVcIikuYXR0cihcImZpbGxcIixcIm5vbmVcIikuYXR0cihcInN0cm9rZVwiLFwiYmxhY2tcIikuYXR0cihcInN0cm9rZS1vcGFjaXR5XCIsLjI1KS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsXCIxcHhcIiksTC5zZWxlY3RBbGwoXCJ0ZXh0XCIpLnN0eWxlKFwidGV4dC1zaGFkb3dcIixcIjFweCAxcHggMXB4ICNmZmYsIC0xcHggLTFweCAxcHggI2ZmZiwgMXB4IC0xcHggMXB4ICNmZmYsIC0xcHggMXB4IDFweCAjZmZmXCIpLnN0eWxlKFwiY3Vyc29yXCIsXCJkZWZhdWx0XCIpLnN0eWxlKFwidXNlci1zZWxlY3RcIixcIm5vbmVcIik7dmFyIHo9Qy5zZWxlY3RBbGwoXCIuXCIraC5jbi5heGlzSGVhZGluZykuZGF0YShjLGwpO3ouZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoaC5jbi5heGlzSGVhZGluZywhMCk7dmFyIE89ei5zZWxlY3RBbGwoXCIuXCIraC5jbi5heGlzVGl0bGUpLmRhdGEoYyxsKTtPLmVudGVyKCkuYXBwZW5kKFwidGV4dFwiKS5jbGFzc2VkKGguY24uYXhpc1RpdGxlLCEwKS5hdHRyKFwidGV4dC1hbmNob3JcIixcIm1pZGRsZVwiKS5zdHlsZShcImN1cnNvclwiLFwiZXctcmVzaXplXCIpLnN0eWxlKFwidXNlci1zZWxlY3RcIixcIm5vbmVcIikuc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwiYXV0b1wiKSxPLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZSgwLFwiKy1oLmF4aXNUaXRsZU9mZnNldCtcIilcIikudGV4dChmdW5jdGlvbih0KXtyZXR1cm4gdC5sYWJlbH0pLmVhY2goZnVuY3Rpb24odCl7YS5mb250KG4uc2VsZWN0KHRoaXMpLHQubW9kZWwubGFiZWxGb250KX0pO3ZhciBJPUMuc2VsZWN0QWxsKFwiLlwiK2guY24uYXhpc0V4dGVudCkuZGF0YShjLGwpO0kuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoaC5jbi5heGlzRXh0ZW50LCEwKTt2YXIgRD1JLnNlbGVjdEFsbChcIi5cIitoLmNuLmF4aXNFeHRlbnRUb3ApLmRhdGEoYyxsKTtELmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKGguY24uYXhpc0V4dGVudFRvcCwhMCksRC5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoMCxcIistaC5heGlzRXh0ZW50T2Zmc2V0K1wiKVwiKTt2YXIgUD1ELnNlbGVjdEFsbChcIi5cIitoLmNuLmF4aXNFeHRlbnRUb3BUZXh0KS5kYXRhKGMsbCk7ZnVuY3Rpb24gUih0LGUpe2lmKHQub3JkaW5hbClyZXR1cm5cIlwiO3ZhciByPXQuZG9tYWluU2NhbGUuZG9tYWluKCk7cmV0dXJuIG4uZm9ybWF0KHQudGlja0Zvcm1hdCkocltlP3IubGVuZ3RoLTE6MF0pfVAuZW50ZXIoKS5hcHBlbmQoXCJ0ZXh0XCIpLmNsYXNzZWQoaC5jbi5heGlzRXh0ZW50VG9wVGV4dCwhMCkuY2FsbCh4KSxQLnRleHQoZnVuY3Rpb24odCl7cmV0dXJuIFIodCwhMCl9KS5lYWNoKGZ1bmN0aW9uKHQpe2EuZm9udChuLnNlbGVjdCh0aGlzKSx0Lm1vZGVsLnJhbmdlRm9udCl9KTt2YXIgRj1JLnNlbGVjdEFsbChcIi5cIitoLmNuLmF4aXNFeHRlbnRCb3R0b20pLmRhdGEoYyxsKTtGLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKGguY24uYXhpc0V4dGVudEJvdHRvbSwhMCksRi5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoMCxcIisodC5tb2RlbC5oZWlnaHQraC5heGlzRXh0ZW50T2Zmc2V0KStcIilcIn0pO3ZhciBCPUYuc2VsZWN0QWxsKFwiLlwiK2guY24uYXhpc0V4dGVudEJvdHRvbVRleHQpLmRhdGEoYyxsKTtCLmVudGVyKCkuYXBwZW5kKFwidGV4dFwiKS5jbGFzc2VkKGguY24uYXhpc0V4dGVudEJvdHRvbVRleHQsITApLmF0dHIoXCJkeVwiLFwiMC43NWVtXCIpLmNhbGwoeCksQi50ZXh0KGZ1bmN0aW9uKHQpe3JldHVybiBSKHQpfSkuZWFjaChmdW5jdGlvbih0KXthLmZvbnQobi5zZWxlY3QodGhpcyksdC5tb2RlbC5yYW5nZUZvbnQpfSksZi5lbnN1cmVBeGlzQnJ1c2goQyl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGVcIjo1OTAsXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvZ3VwXCI6Njk5LFwiLi9heGlzYnJ1c2hcIjoxMDE2LFwiLi9jb25zdGFudHNcIjoxMDE5LFwiLi9saW5lc1wiOjEwMjIsZDM6MTU1fV0sMTAyNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL3BhcmNvb3Jkc1wiKSxpPXQoXCIuLi8uLi9saWIvcHJlcGFyZV9yZWdsXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsYT1yLl90b3BwYXBlcixvPXIuX3BhcGVyZGl2LHM9ci5fZ2xjb250YWluZXI7aWYoaSh0KSl7dmFyIGw9e30sYz17fSx1PXt9LGg9e30sZj1yLl9zaXplO2UuZm9yRWFjaChmdW5jdGlvbihlLHIpe3ZhciBuPWVbMF0udHJhY2U7dVtyXT1uLmluZGV4O3ZhciBpPWhbcl09bi5fZnVsbElucHV0LmluZGV4O2xbcl09dC5kYXRhW2ldLmRpbWVuc2lvbnMsY1tyXT10LmRhdGFbaV0uZGltZW5zaW9ucy5zbGljZSgpfSk7bihvLGEscyxlLHt3aWR0aDpmLncsaGVpZ2h0OmYuaCxtYXJnaW46e3Q6Zi50LHI6Zi5yLGI6Zi5iLGw6Zi5sfX0se2ZpbHRlckNoYW5nZWQ6ZnVuY3Rpb24oZSxuLGkpe3ZhciBhPWNbZV1bbl0sbz1pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgpfSkscz1cImRpbWVuc2lvbnNbXCIrbitcIl0uY29uc3RyYWludHJhbmdlXCIsbD1yLl90cmFjZVByZUdVSVt0Ll9mdWxsRGF0YVt1W2VdXS5fZnVsbElucHV0LnVpZF07aWYodm9pZCAwPT09bFtzXSl7dmFyIGY9YS5jb25zdHJhaW50cmFuZ2U7bFtzXT1mfHxudWxsfXZhciBwPXQuX2Z1bGxEYXRhW3VbZV1dLmRpbWVuc2lvbnNbbl07by5sZW5ndGg/KDE9PT1vLmxlbmd0aCYmKG89b1swXSksYS5jb25zdHJhaW50cmFuZ2U9byxwLmNvbnN0cmFpbnRyYW5nZT1vLnNsaWNlKCksbz1bb10pOihkZWxldGUgYS5jb25zdHJhaW50cmFuZ2UsZGVsZXRlIHAuY29uc3RyYWludHJhbmdlLG89bnVsbCk7dmFyIGQ9e307ZFtzXT1vLHQuZW1pdChcInBsb3RseV9yZXN0eWxlXCIsW2QsW2hbZV1dXSl9LGhvdmVyOmZ1bmN0aW9uKGUpe3QuZW1pdChcInBsb3RseV9ob3ZlclwiLGUpfSx1bmhvdmVyOmZ1bmN0aW9uKGUpe3QuZW1pdChcInBsb3RseV91bmhvdmVyXCIsZSl9LGF4ZXNNb3ZlZDpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIShcInZpc2libGVcImluIHQpfHx0LnZpc2libGV9ZnVuY3Rpb24gaSh0LGUscil7dmFyIG49ZS5pbmRleE9mKHIpLGk9dC5pbmRleE9mKG4pO3JldHVybi0xPT09aSYmKGkrPWUubGVuZ3RoKSxpfXZhciBhPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiBpKHIsdCxlKS1pKHIsdCxuKX19KGNbZV0uZmlsdGVyKG4pKTtsW2VdLnNvcnQoYSksY1tlXS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIW4odCl9KS5zb3J0KGZ1bmN0aW9uKHQpe3JldHVybiBjW2VdLmluZGV4T2YodCl9KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2xbZV0uc3BsaWNlKGxbZV0uaW5kZXhPZih0KSwxKSxsW2VdLnNwbGljZShjW2VdLmluZGV4T2YodCksMCx0KX0pLHQuZW1pdChcInBsb3RseV9yZXN0eWxlXCIsW3tkaW1lbnNpb25zOltsW2VdXX0sW2hbZV1dXSl9fSl9fX0se1wiLi4vLi4vbGliL3ByZXBhcmVfcmVnbFwiOjcxNCxcIi4vcGFyY29vcmRzXCI6MTAyNH1dLDEwMjY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL3Bsb3RzL2RvbWFpblwiKS5hdHRyaWJ1dGVzLGw9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxjPWkoe2VkaXRUeXBlOlwiY2FsY1wiLGFycmF5T2s6ITAsY29sb3JFZGl0VHlwZTpcInBsb3RcIn0pO2UuZXhwb3J0cz17bGFiZWxzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxsYWJlbDA6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjAsZWRpdFR5cGU6XCJjYWxjXCJ9LGRsYWJlbDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MSxlZGl0VHlwZTpcImNhbGNcIn0sdmFsdWVzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxtYXJrZXI6e2NvbG9yczp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sbGluZTp7Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6bi5kZWZhdWx0TGluZSxhcnJheU9rOiEwLGVkaXRUeXBlOlwic3R5bGVcIn0sd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjAsYXJyYXlPazohMCxlZGl0VHlwZTpcInN0eWxlXCJ9LGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0sdGV4dDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJzdHlsZVwifSxzY2FsZWdyb3VwOnt2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwiY2FsY1wifSx0ZXh0aW5mbzp7dmFsVHlwZTpcImZsYWdsaXN0XCIsZmxhZ3M6W1wibGFiZWxcIixcInRleHRcIixcInZhbHVlXCIsXCJwZXJjZW50XCJdLGV4dHJhczpbXCJub25lXCJdLGVkaXRUeXBlOlwiY2FsY1wifSxob3ZlcmluZm86bCh7fSxhLmhvdmVyaW5mbyx7ZmxhZ3M6W1wibGFiZWxcIixcInRleHRcIixcInZhbHVlXCIsXCJwZXJjZW50XCIsXCJuYW1lXCJdfSksaG92ZXJ0ZW1wbGF0ZTpvKHt9LHtrZXlzOltcImxhYmVsXCIsXCJjb2xvclwiLFwidmFsdWVcIixcInBlcmNlbnRcIixcInRleHRcIl19KSx0ZXh0cG9zaXRpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImluc2lkZVwiLFwib3V0c2lkZVwiLFwiYXV0b1wiLFwibm9uZVwiXSxkZmx0OlwiYXV0b1wiLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LHRleHRmb250Omwoe30sYyx7fSksaW5zaWRldGV4dGZvbnQ6bCh7fSxjLHt9KSxvdXRzaWRldGV4dGZvbnQ6bCh7fSxjLHt9KSx0aXRsZTp7dGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcImNhbGNcIn0sZm9udDpsKHt9LGMse30pLHBvc2l0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ0b3AgbGVmdFwiLFwidG9wIGNlbnRlclwiLFwidG9wIHJpZ2h0XCIsXCJtaWRkbGUgY2VudGVyXCIsXCJib3R0b20gbGVmdFwiLFwiYm90dG9tIGNlbnRlclwiLFwiYm90dG9tIHJpZ2h0XCJdLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0sZG9tYWluOnMoe25hbWU6XCJwaWVcIix0cmFjZTohMCxlZGl0VHlwZTpcImNhbGNcIn0pLGhvbGU6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6XCJjYWxjXCJ9LHNvcnQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcImNhbGNcIn0sZGlyZWN0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJjbG9ja3dpc2VcIixcImNvdW50ZXJjbG9ja3dpc2VcIl0sZGZsdDpcImNvdW50ZXJjbG9ja3dpc2VcIixlZGl0VHlwZTpcImNhbGNcIn0scm90YXRpb246e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46LTM2MCxtYXg6MzYwLGRmbHQ6MCxlZGl0VHlwZTpcImNhbGNcIn0scHVsbDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MCxhcnJheU9rOiEwLGVkaXRUeXBlOlwiY2FsY1wifSxfZGVwcmVjYXRlZDp7dGl0bGU6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHRpdGxlZm9udDpsKHt9LGMse30pLHRpdGxlcG9zaXRpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInRvcCBsZWZ0XCIsXCJ0b3AgY2VudGVyXCIsXCJ0b3AgcmlnaHRcIixcIm1pZGRsZSBjZW50ZXJcIixcImJvdHRvbSBsZWZ0XCIsXCJib3R0b20gY2VudGVyXCIsXCJib3R0b20gcmlnaHRcIl0sZWRpdFR5cGU6XCJjYWxjXCJ9fX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiOjU3NyxcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDYsXCIuLi8uLi9wbG90cy9kb21haW5cIjo3NzQsXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIjo3NzV9XSwxMDI3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCIpLmdldE1vZHVsZUNhbGNEYXRhO3IubmFtZT1cInBpZVwiLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT1uLmdldE1vZHVsZShcInBpZVwiKSxyPWkodC5jYWxjZGF0YSxlKVswXTtlLnBsb3QodCxyKX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLl9oYXMmJm4uX2hhcyhcInBpZVwiKSxhPWUuX2hhcyYmZS5faGFzKFwicGllXCIpO2kmJiFhJiZuLl9waWVsYXllci5zZWxlY3RBbGwoXCJnLnRyYWNlXCIpLnJlbW92ZSgpfX0se1wiLi4vLi4vcGxvdHMvZ2V0X2RhdGFcIjo3ODQsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOX1dLDEwMjg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vLi4vbGliXCIpLmlzQXJyYXlPclR5cGVkQXJyYXksYT10KFwidGlueWNvbG9yMlwiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLHM9dChcIi4vaGVscGVyc1wiKSxsPXt9O2Z1bmN0aW9uIGModCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7cmV0dXJuISFlJiYoISEoZT1hKGUpKS5pc1ZhbGlkKCkmJihlPW8uYWRkT3BhY2l0eShlLGUuZ2V0QWxwaGEoKSksdFtyXXx8KHRbcl09ZSksZSkpfX1mdW5jdGlvbiB1KHQsZSl7dmFyIHIsbj1KU09OLnN0cmluZ2lmeSh0KSxpPWVbbl07aWYoIWkpe2ZvcihpPXQuc2xpY2UoKSxyPTA7cjx0Lmxlbmd0aDtyKyspaS5wdXNoKGEodFtyXSkubGlnaHRlbigyMCkudG9IZXhTdHJpbmcoKSk7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKylpLnB1c2goYSh0W3JdKS5kYXJrZW4oMjApLnRvSGV4U3RyaW5nKCkpO2Vbbl09aX1yZXR1cm4gaX1lLmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24odCxlKXt2YXIgcixhLG8sbCx1LGg9ZS52YWx1ZXMsZj1pKGgpJiZoLmxlbmd0aCxwPWUubGFiZWxzLGQ9ZS5tYXJrZXIuY29sb3JzfHxbXSxnPVtdLHY9dC5fZnVsbExheW91dCxtPXt9LHk9MCx4PXYuaGlkZGVubGFiZWxzfHxbXTtpZihlLmRsYWJlbClmb3IocD1uZXcgQXJyYXkoaC5sZW5ndGgpLHI9MDtyPGgubGVuZ3RoO3IrKylwW3JdPVN0cmluZyhlLmxhYmVsMCtyKmUuZGxhYmVsKTt2YXIgYj1jKHYuX3BpZWNvbG9ybWFwKSxfPShmP2g6cCkubGVuZ3RoO2ZvcihyPTA7cjxfO3IrKyl7aWYoZil7aWYoYT1oW3JdLCFuKGEpKWNvbnRpbnVlO2lmKChhPSthKTwwKWNvbnRpbnVlfWVsc2UgYT0xO3ZvaWQgMCE9PShvPXBbcl0pJiZcIlwiIT09b3x8KG89cik7dmFyIHc9bVtvPVN0cmluZyhvKV07dm9pZCAwPT09dz8obVtvXT1nLmxlbmd0aCwobD0tMSE9PXguaW5kZXhPZihvKSl8fCh5Kz1hKSxnLnB1c2goe3Y6YSxsYWJlbDpvLGNvbG9yOmIoZFtyXSxvKSxpOnIscHRzOltyXSxoaWRkZW46bH0pKTooKHU9Z1t3XSkudis9YSx1LnB0cy5wdXNoKHIpLHUuaGlkZGVufHwoeSs9YSksITE9PT11LmNvbG9yJiZkW3JdJiYodS5jb2xvcj1iKGRbcl0sbykpKX1pZihlLnNvcnQmJmcuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBlLnYtdC52fSksZ1swXSYmKGdbMF0udlRvdGFsPXkpLGUudGV4dGluZm8mJlwibm9uZVwiIT09ZS50ZXh0aW5mbyl7dmFyIGssQT0tMSE9PWUudGV4dGluZm8uaW5kZXhPZihcImxhYmVsXCIpLFQ9LTEhPT1lLnRleHRpbmZvLmluZGV4T2YoXCJ0ZXh0XCIpLE09LTEhPT1lLnRleHRpbmZvLmluZGV4T2YoXCJ2YWx1ZVwiKSxTPS0xIT09ZS50ZXh0aW5mby5pbmRleE9mKFwicGVyY2VudFwiKSxFPXYuc2VwYXJhdG9ycztmb3Iocj0wO3I8Zy5sZW5ndGg7cisrKXtpZih1PWdbcl0saz1BP1t1LmxhYmVsXTpbXSxUKXt2YXIgQz1zLmdldEZpcnN0RmlsbGVkKGUudGV4dCx1LnB0cyk7QyYmay5wdXNoKEMpfU0mJmsucHVzaChzLmZvcm1hdFBpZVZhbHVlKHUudixFKSksUyYmay5wdXNoKHMuZm9ybWF0UGllUGVyY2VudCh1LnYveSxFKSksdS50ZXh0PWsuam9pbihcIjxicj5cIil9fXJldHVybiBnfSxjcm9zc1RyYWNlQ2FsYzpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxuPWUucGllY29sb3J3YXksaT1lLl9waWVjb2xvcm1hcDtlLmV4dGVuZHBpZWNvbG9ycyYmKG49dShuLGwpKTtmb3IodmFyIGE9MCxvPTA7bzxyLmxlbmd0aDtvKyspe3ZhciBzPXJbb107aWYoXCJwaWVcIj09PXNbMF0udHJhY2UudHlwZSlmb3IodmFyIGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIGg9c1tjXTshMT09PWguY29sb3ImJihpW2gubGFiZWxdP2guY29sb3I9aVtoLmxhYmVsXTooaVtoLmxhYmVsXT1oLmNvbG9yPW5bYSVuLmxlbmd0aF0sYSsrKSl9fX0sbWFrZVB1bGxDb2xvckZuOmMsZ2VuZXJhdGVFeHRlbmRlZENvbG9yczp1fX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4vaGVscGVyc1wiOjEwMzEsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMix0aW55Y29sb3IyOjUyMn1dLDEwMjk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9wbG90cy9kb21haW5cIikuZGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHMocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX12YXIgbCxjPW4uY29lcmNlRm9udCx1PXMoXCJ2YWx1ZXNcIiksaD1uLmlzQXJyYXlPclR5cGVkQXJyYXkodSksZj1zKFwibGFiZWxzXCIpO2lmKEFycmF5LmlzQXJyYXkoZik/KGw9Zi5sZW5ndGgsaCYmKGw9TWF0aC5taW4obCx1Lmxlbmd0aCkpKTpoJiYobD11Lmxlbmd0aCxzKFwibGFiZWwwXCIpLHMoXCJkbGFiZWxcIikpLGwpe2UuX2xlbmd0aD1sLHMoXCJtYXJrZXIubGluZS53aWR0aFwiKSYmcyhcIm1hcmtlci5saW5lLmNvbG9yXCIpLHMoXCJtYXJrZXIuY29sb3JzXCIpLHMoXCJzY2FsZWdyb3VwXCIpO3ZhciBwPXMoXCJ0ZXh0XCIpLGQ9cyhcInRleHRpbmZvXCIsQXJyYXkuaXNBcnJheShwKT9cInRleHQrcGVyY2VudFwiOlwicGVyY2VudFwiKTtpZihzKFwiaG92ZXJ0ZXh0XCIpLHMoXCJob3ZlcnRlbXBsYXRlXCIpLGQmJlwibm9uZVwiIT09ZCl7dmFyIGc9cyhcInRleHRwb3NpdGlvblwiKSx2PUFycmF5LmlzQXJyYXkoZyl8fFwiYXV0b1wiPT09ZyxtPXZ8fFwiaW5zaWRlXCI9PT1nLHk9dnx8XCJvdXRzaWRlXCI9PT1nO2lmKG18fHkpe3ZhciB4PWMocyxcInRleHRmb250XCIsby5mb250KTtpZihtKXt2YXIgYj1uLmV4dGVuZEZsYXQoe30seCk7ISh0LnRleHRmb250JiZ0LnRleHRmb250LmNvbG9yKSYmZGVsZXRlIGIuY29sb3IsYyhzLFwiaW5zaWRldGV4dGZvbnRcIixiKX15JiZjKHMsXCJvdXRzaWRldGV4dGZvbnRcIix4KX19YShlLG8scyk7dmFyIF89cyhcImhvbGVcIik7aWYocyhcInRpdGxlLnRleHRcIikpe3ZhciB3PXMoXCJ0aXRsZS5wb3NpdGlvblwiLF8/XCJtaWRkbGUgY2VudGVyXCI6XCJ0b3AgY2VudGVyXCIpO198fFwibWlkZGxlIGNlbnRlclwiIT09d3x8KGUudGl0bGUucG9zaXRpb249XCJ0b3AgY2VudGVyXCIpLGMocyxcInRpdGxlLmZvbnRcIixvLmZvbnQpfXMoXCJzb3J0XCIpLHMoXCJkaXJlY3Rpb25cIikscyhcInJvdGF0aW9uXCIpLHMoXCJwdWxsXCIpfWVsc2UgZS52aXNpYmxlPSExfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvZG9tYWluXCI6Nzc0LFwiLi9hdHRyaWJ1dGVzXCI6MTAyNn1dLDEwMzA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzXCIpLmFwcGVuZEFycmF5TXVsdGlQb2ludFZhbHVlcztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17Y3VydmVOdW1iZXI6ZS5pbmRleCxwb2ludE51bWJlcnM6dC5wdHMsZGF0YTplLl9pbnB1dCxmdWxsRGF0YTplLGxhYmVsOnQubGFiZWwsY29sb3I6dC5jb2xvcix2YWx1ZTp0LnYscGVyY2VudDp0LnBlcmNlbnQsdGV4dDp0LnRleHQsdjp0LnZ9O3JldHVybiAxPT09dC5wdHMubGVuZ3RoJiYoci5wb2ludE51bWJlcj1yLmk9dC5wdHNbMF0pLG4ocixlLHQucHRzKSxyfX0se1wiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzXCI6NjEzfV0sMTAzMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIik7ci5mb3JtYXRQaWVQZXJjZW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9KDEwMCp0KS50b1ByZWNpc2lvbigzKTtyZXR1cm4tMSE9PXIubGFzdEluZGV4T2YoXCIuXCIpJiYocj1yLnJlcGxhY2UoL1suXT8wKyQvLFwiXCIpKSxuLm51bVNlcGFyYXRlKHIsZSkrXCIlXCJ9LHIuZm9ybWF0UGllVmFsdWU9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnRvUHJlY2lzaW9uKDEwKTtyZXR1cm4tMSE9PXIubGFzdEluZGV4T2YoXCIuXCIpJiYocj1yLnJlcGxhY2UoL1suXT8wKyQvLFwiXCIpKSxuLm51bVNlcGFyYXRlKHIsZSl9LHIuZ2V0Rmlyc3RGaWxsZWQ9ZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj10W2Vbcl1dO2lmKG58fDA9PT1uKXJldHVybiBufX0sci5jYXN0T3B0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/ci5nZXRGaXJzdEZpbGxlZCh0LGUpOnR8fHZvaWQgMH19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDEwMzI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLG4uc3VwcGx5TGF5b3V0RGVmYXVsdHM9dChcIi4vbGF5b3V0X2RlZmF1bHRzXCIpLG4ubGF5b3V0QXR0cmlidXRlcz10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKTt2YXIgaT10KFwiLi9jYWxjXCIpO24uY2FsYz1pLmNhbGMsbi5jcm9zc1RyYWNlQ2FsYz1pLmNyb3NzVHJhY2VDYWxjLG4ucGxvdD10KFwiLi9wbG90XCIpLnBsb3Qsbi5zdHlsZT10KFwiLi9zdHlsZVwiKSxuLnN0eWxlT25lPXQoXCIuL3N0eWxlX29uZVwiKSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cInBpZVwiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4vYmFzZV9wbG90XCIpLG4uY2F0ZWdvcmllcz1bXCJwaWVcIixcInNob3dMZWdlbmRcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuL2F0dHJpYnV0ZXNcIjoxMDI2LFwiLi9iYXNlX3Bsb3RcIjoxMDI3LFwiLi9jYWxjXCI6MTAyOCxcIi4vZGVmYXVsdHNcIjoxMDI5LFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjEwMzMsXCIuL2xheW91dF9kZWZhdWx0c1wiOjEwMzQsXCIuL3Bsb3RcIjoxMDM1LFwiLi9zdHlsZVwiOjEwMzYsXCIuL3N0eWxlX29uZVwiOjEwMzd9XSwxMDMzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtoaWRkZW5sYWJlbHM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHBpZWNvbG9yd2F5Ont2YWxUeXBlOlwiY29sb3JsaXN0XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGV4dGVuZHBpZWNvbG9yczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifX19LHt9XSwxMDM0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1yKFwiaGlkZGVubGFiZWxzXCIpLHIoXCJwaWVjb2xvcndheVwiLGUuY29sb3J3YXkpLHIoXCJleHRlbmRwaWVjb2xvcnNcIil9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6MTAzM31dLDEwMzU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxzPXQoXCIuLi8uLi9saWJcIiksbD10KFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCIpLGM9dChcIi4vaGVscGVyc1wiKSx1PXQoXCIuL2V2ZW50X2RhdGFcIik7ZnVuY3Rpb24gaCh0LGUscil7dmFyIGE9clswXSxvPWEudHJhY2Uscz1hLmN4LGw9YS5jeTtcIl9oYXNIb3ZlckxhYmVsXCJpbiBvfHwoby5faGFzSG92ZXJMYWJlbD0hMSksXCJfaGFzSG92ZXJFdmVudFwiaW4gb3x8KG8uX2hhc0hvdmVyRXZlbnQ9ITEpLHQub24oXCJtb3VzZW92ZXJcIixmdW5jdGlvbih0KXt2YXIgcj1lLl9mdWxsTGF5b3V0LGg9ZS5fZnVsbERhdGFbby5pbmRleF07aWYoIWUuX2RyYWdnaW5nJiYhMSE9PXIuaG92ZXJtb2RlKXt2YXIgZj1oLmhvdmVyaW5mbztpZihBcnJheS5pc0FycmF5KGYpJiYoZj1pLmNhc3RIb3ZlcmluZm8oe2hvdmVyaW5mbzpbYy5jYXN0T3B0aW9uKGYsdC5wdHMpXSxfbW9kdWxlOm8uX21vZHVsZX0sciwwKSksXCJhbGxcIj09PWYmJihmPVwibGFiZWwrdGV4dCt2YWx1ZStwZXJjZW50K25hbWVcIiksaC5ob3ZlcnRlbXBsYXRlfHxcIm5vbmVcIiE9PWYmJlwic2tpcFwiIT09ZiYmZil7dmFyIHA9dC5ySW5zY3JpYmVkLGQ9cyt0LnB4bWlkWzBdKigxLXApLGc9bCt0LnB4bWlkWzFdKigxLXApLHY9ci5zZXBhcmF0b3JzLG09W107aWYoZiYmLTEhPT1mLmluZGV4T2YoXCJsYWJlbFwiKSYmbS5wdXNoKHQubGFiZWwpLHQudGV4dD1jLmNhc3RPcHRpb24oaC5ob3ZlcnRleHR8fGgudGV4dCx0LnB0cyksZiYmLTEhPT1mLmluZGV4T2YoXCJ0ZXh0XCIpKXt2YXIgeT10LnRleHQ7eSYmbS5wdXNoKHkpfXQudmFsdWU9dC52LHQudmFsdWVMYWJlbD1jLmZvcm1hdFBpZVZhbHVlKHQudix2KSxmJiYtMSE9PWYuaW5kZXhPZihcInZhbHVlXCIpJiZtLnB1c2godC52YWx1ZUxhYmVsKSx0LnBlcmNlbnQ9dC52L2EudlRvdGFsLHQucGVyY2VudExhYmVsPWMuZm9ybWF0UGllUGVyY2VudCh0LnBlcmNlbnQsdiksZiYmLTEhPT1mLmluZGV4T2YoXCJwZXJjZW50XCIpJiZtLnB1c2godC5wZXJjZW50TGFiZWwpO3ZhciB4PWguaG92ZXJsYWJlbCxiPXguZm9udDtpLmxvbmVIb3Zlcih7dHJhY2U6byx4MDpkLXAqYS5yLHgxOmQrcCphLnIseTpnLHRleHQ6bS5qb2luKFwiPGJyPlwiKSxuYW1lOmguaG92ZXJ0ZW1wbGF0ZXx8LTEhPT1mLmluZGV4T2YoXCJuYW1lXCIpP2gubmFtZTp2b2lkIDAsaWRlYWxBbGlnbjp0LnB4bWlkWzBdPDA/XCJsZWZ0XCI6XCJyaWdodFwiLGNvbG9yOmMuY2FzdE9wdGlvbih4LmJnY29sb3IsdC5wdHMpfHx0LmNvbG9yLGJvcmRlckNvbG9yOmMuY2FzdE9wdGlvbih4LmJvcmRlcmNvbG9yLHQucHRzKSxmb250RmFtaWx5OmMuY2FzdE9wdGlvbihiLmZhbWlseSx0LnB0cyksZm9udFNpemU6Yy5jYXN0T3B0aW9uKGIuc2l6ZSx0LnB0cyksZm9udENvbG9yOmMuY2FzdE9wdGlvbihiLmNvbG9yLHQucHRzKSxuYW1lTGVuZ3RoOmMuY2FzdE9wdGlvbih4Lm5hbWVsZW5ndGgsdC5wdHMpLHRleHRBbGlnbjpjLmNhc3RPcHRpb24oeC5hbGlnbix0LnB0cyksaG92ZXJ0ZW1wbGF0ZTpjLmNhc3RPcHRpb24oaC5ob3ZlcnRlbXBsYXRlLHQucHRzKSxob3ZlcnRlbXBsYXRlTGFiZWxzOnQsZXZlbnREYXRhOlt1KHQsaCldfSx7Y29udGFpbmVyOnIuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOnIuX3BhcGVyLm5vZGUoKSxnZDplfSksby5faGFzSG92ZXJMYWJlbD0hMH1vLl9oYXNIb3ZlckV2ZW50PSEwLGUuZW1pdChcInBsb3RseV9ob3ZlclwiLHtwb2ludHM6W3UodCxoKV0sZXZlbnQ6bi5ldmVudH0pfX0pLHQub24oXCJtb3VzZW91dFwiLGZ1bmN0aW9uKHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQsYT1lLl9mdWxsRGF0YVtvLmluZGV4XSxzPW4uc2VsZWN0KHRoaXMpLmRhdHVtKCk7by5faGFzSG92ZXJFdmVudCYmKHQub3JpZ2luYWxFdmVudD1uLmV2ZW50LGUuZW1pdChcInBsb3RseV91bmhvdmVyXCIse3BvaW50czpbdShzLGEpXSxldmVudDpuLmV2ZW50fSksby5faGFzSG92ZXJFdmVudD0hMSksby5faGFzSG92ZXJMYWJlbCYmKGkubG9uZVVuaG92ZXIoci5faG92ZXJsYXllci5ub2RlKCkpLG8uX2hhc0hvdmVyTGFiZWw9ITEpfSksdC5vbihcImNsaWNrXCIsZnVuY3Rpb24odCl7dmFyIHI9ZS5fZnVsbExheW91dCxhPWUuX2Z1bGxEYXRhW28uaW5kZXhdO2UuX2RyYWdnaW5nfHwhMT09PXIuaG92ZXJtb2RlfHwoZS5faG92ZXJkYXRhPVt1KHQsYSldLGkuY2xpY2soZSxuLmV2ZW50KSl9KX1mdW5jdGlvbiBmKHQsZSxyKXt2YXIgbj1NYXRoLnNxcnQodC53aWR0aCp0LndpZHRoK3QuaGVpZ2h0KnQuaGVpZ2h0KSxpPXQud2lkdGgvdC5oZWlnaHQsYT1lLmhhbGZhbmdsZSxvPWUucmluZyxzPWUuckluc2NyaWJlZCxsPXIucnx8ZS5ycHgxLGM9e3NjYWxlOnMqbCoyL24sckNlbnRlcjoxLXMscm90YXRlOjB9O2lmKGMuc2NhbGU+PTEpcmV0dXJuIGM7dmFyIHU9aSsxLygyKk1hdGgudGFuKGEpKSxoPWwqTWF0aC5taW4oMS8oTWF0aC5zcXJ0KHUqdSsuNSkrdSksby8oTWF0aC5zcXJ0KGkqaStvLzIpK2kpKSxmPXtzY2FsZToyKmgvdC5oZWlnaHQsckNlbnRlcjpNYXRoLmNvcyhoL2wpLWgqaS9sLHJvdGF0ZTooMTgwL01hdGguUEkqZS5taWRhbmdsZSs3MjApJTE4MC05MH0scD0xL2ksZD1wKzEvKDIqTWF0aC50YW4oYSkpLGc9bCpNYXRoLm1pbigxLyhNYXRoLnNxcnQoZCpkKy41KStkKSxvLyhNYXRoLnNxcnQocCpwK28vMikrcCkpLHY9e3NjYWxlOjIqZy90LndpZHRoLHJDZW50ZXI6TWF0aC5jb3MoZy9sKS1nL2kvbCxyb3RhdGU6KDE4MC9NYXRoLlBJKmUubWlkYW5nbGUrODEwKSUxODAtOTB9LG09di5zY2FsZT5mLnNjYWxlP3Y6ZjtyZXR1cm4gYy5zY2FsZTwxJiZtLnNjYWxlPmMuc2NhbGU/bTpjfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gdC52IT09ZS52VG90YWx8fGUudHJhY2UuaG9sZT9NYXRoLm1pbigxLygxKzEvTWF0aC5zaW4odC5oYWxmYW5nbGUpKSx0LnJpbmcvMik6MX1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9ZS5weG1pZFswXSxuPWUucHhtaWRbMV0saT10LndpZHRoLzIsYT10LmhlaWdodC8yO3JldHVybiByPDAmJihpKj0tMSksbjwwJiYoYSo9LTEpLHtzY2FsZToxLHJDZW50ZXI6MSxyb3RhdGU6MCx4OmkrTWF0aC5hYnMoYSkqKGk+MD8xOi0xKS8yLHk6YS8oMStyKnIvKG4qbikpLG91dHNpZGU6ITB9fWZ1bmN0aW9uIGcodCxlKXt2YXIgcj10LnRyYWNlLG49ZS5oKihyLmRvbWFpbi55WzFdLXIuZG9tYWluLnlbMF0pO3JldHVybiBNYXRoLm1pbih0LnRpdGxlQm94LmhlaWdodCxuLzIpfWZ1bmN0aW9uIHYodCl7dmFyIGUscj10LnB1bGw7aWYoQXJyYXkuaXNBcnJheShyKSlmb3Iocj0wLGU9MDtlPHQucHVsbC5sZW5ndGg7ZSsrKXQucHVsbFtlXT5yJiYocj10LnB1bGxbZV0pO3JldHVybiByfWUuZXhwb3J0cz17cGxvdDpmdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQ7IWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG4saT1lLl9mdWxsTGF5b3V0LGE9MDthPHQubGVuZ3RoO2ErKylpZihyPXRbYV1bMF0sKG49ci50cmFjZSkudGl0bGUudGV4dCl7dmFyIGM9aS5tZXRhP3MudGVtcGxhdGVTdHJpbmcobi50aXRsZS50ZXh0LHttZXRhOmkubWV0YX0pOm4udGl0bGUudGV4dCx1PW8udGVzdGVyLmFwcGVuZChcInRleHRcIikuYXR0cihcImRhdGEtbm90ZXhcIiwxKS50ZXh0KGMpLmNhbGwoby5mb250LG4udGl0bGUuZm9udCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyxlKSxoPW8uYkJveCh1Lm5vZGUoKSwhMCk7ci50aXRsZUJveD17d2lkdGg6aC53aWR0aCxoZWlnaHQ6aC5oZWlnaHR9LHUucmVtb3ZlKCl9fShlLHQpLGZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxzLGwsYyx1LGg9W107Zm9yKGk9MDtpPHQubGVuZ3RoO2krKylvPXRbaV1bMF0scz1vLnRyYWNlLHI9ZS53KihzLmRvbWFpbi54WzFdLXMuZG9tYWluLnhbMF0pLG49ZS5oKihzLmRvbWFpbi55WzFdLXMuZG9tYWluLnlbMF0pLHMudGl0bGUudGV4dCYmXCJtaWRkbGUgY2VudGVyXCIhPT1zLnRpdGxlLnBvc2l0aW9uJiYobi09ZyhvLGUpKSxsPXYocyksby5yPU1hdGgubWluKHIsbikvKDIrMipsKSxvLmN4PWUubCtlLncqKHMuZG9tYWluLnhbMV0rcy5kb21haW4ueFswXSkvMixvLmN5PWUudCtlLmgqKDEtcy5kb21haW4ueVswXSktbi8yLHMudGl0bGUudGV4dCYmLTEhPT1zLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoXCJib3R0b21cIikmJihvLmN5LT1nKG8sZSkpLHMuc2NhbGVncm91cCYmLTE9PT1oLmluZGV4T2Yocy5zY2FsZWdyb3VwKSYmaC5wdXNoKHMuc2NhbGVncm91cCk7Zm9yKGE9MDthPGgubGVuZ3RoO2ErKyl7Zm9yKHU9MS8wLGM9aFthXSxpPTA7aTx0Lmxlbmd0aDtpKyspKG89dFtpXVswXSkudHJhY2Uuc2NhbGVncm91cD09PWMmJih1PU1hdGgubWluKHUsby5yKm8uci9vLnZUb3RhbCkpO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspKG89dFtpXVswXSkudHJhY2Uuc2NhbGVncm91cD09PWMmJihvLnI9TWF0aC5zcXJ0KHUqby52VG90YWwpKX19KGUsci5fc2l6ZSk7dmFyIGk9cy5tYWtlVHJhY2VHcm91cHMoci5fcGllbGF5ZXIsZSxcInRyYWNlXCIpLmVhY2goZnVuY3Rpb24oZSl7dmFyIGk9bi5zZWxlY3QodGhpcyksdT1lWzBdLG09dS50cmFjZTshZnVuY3Rpb24odCl7dmFyIGUscixuLGk9dFswXSxhPWkudHJhY2Usbz1hLnJvdGF0aW9uKk1hdGguUEkvMTgwLHM9MipNYXRoLlBJL2kudlRvdGFsLGw9XCJweDBcIixjPVwicHgxXCI7aWYoXCJjb3VudGVyY2xvY2t3aXNlXCI9PT1hLmRpcmVjdGlvbil7Zm9yKGU9MDtlPHQubGVuZ3RoJiZ0W2VdLmhpZGRlbjtlKyspO2lmKGU9PT10Lmxlbmd0aClyZXR1cm47bys9cyp0W2VdLnYscyo9LTEsbD1cInB4MVwiLGM9XCJweDBcIn1mdW5jdGlvbiB1KHQpe3JldHVybltpLnIqTWF0aC5zaW4odCksLWkucipNYXRoLmNvcyh0KV19Zm9yKG49dShvKSxlPTA7ZTx0Lmxlbmd0aDtlKyspKHI9dFtlXSkuaGlkZGVufHwocltsXT1uLG8rPXMqci52LzIsci5weG1pZD11KG8pLHIubWlkYW5nbGU9byxvKz1zKnIudi8yLG49dShvKSxyW2NdPW4sci5sYXJnZUFyYz1yLnY+aS52VG90YWwvMj8xOjAsci5oYWxmYW5nbGU9TWF0aC5QSSpNYXRoLm1pbihyLnYvaS52VG90YWwsLjUpLHIucmluZz0xLWEuaG9sZSxyLnJJbnNjcmliZWQ9cChyLGkpKX0oZSksaS5hdHRyKFwic3Ryb2tlLWxpbmVqb2luXCIsXCJyb3VuZFwiKSxpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoXCJnLnNsaWNlXCIpLmRhdGEoZSk7aS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcInNsaWNlXCIsITApLGkuZXhpdCgpLnJlbW92ZSgpO3ZhciBwPVtbW10sW11dLFtbXSxbXV1dLHk9ITE7aS5lYWNoKGZ1bmN0aW9uKHIpe2lmKHIuaGlkZGVuKW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbChcInBhdGgsZ1wiKS5yZW1vdmUoKTtlbHNle3IucG9pbnROdW1iZXI9ci5pLHIuY3VydmVOdW1iZXI9bS5pbmRleCxwW3IucHhtaWRbMV08MD8wOjFdW3IucHhtaWRbMF08MD8wOjFdLnB1c2gocik7dmFyIGk9dS5jeCxnPXUuY3ksdj1uLnNlbGVjdCh0aGlzKSx4PXYuc2VsZWN0QWxsKFwicGF0aC5zdXJmYWNlXCIpLmRhdGEoW3JdKTtpZih4LmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5jbGFzc2VkKFwic3VyZmFjZVwiLCEwKS5zdHlsZSh7XCJwb2ludGVyLWV2ZW50c1wiOlwiYWxsXCJ9KSx2LmNhbGwoaCx0LGUpLG0ucHVsbCl7dmFyIGI9K2MuY2FzdE9wdGlvbihtLnB1bGwsci5wdHMpfHwwO2I+MCYmKGkrPWIqci5weG1pZFswXSxnKz1iKnIucHhtaWRbMV0pfXIuY3hGaW5hbD1pLHIuY3lGaW5hbD1nO3ZhciBfPW0uaG9sZTtpZihyLnY9PT11LnZUb3RhbCl7dmFyIHc9XCJNXCIrKGkrci5weDBbMF0pK1wiLFwiKyhnK3IucHgwWzFdKStTKHIucHgwLHIucHhtaWQsITAsMSkrUyhyLnB4bWlkLHIucHgwLCEwLDEpK1wiWlwiO18/eC5hdHRyKFwiZFwiLFwiTVwiKyhpK18qci5weDBbMF0pK1wiLFwiKyhnK18qci5weDBbMV0pK1Moci5weDAsci5weG1pZCwhMSxfKStTKHIucHhtaWQsci5weDAsITEsXykrXCJaXCIrdyk6eC5hdHRyKFwiZFwiLHcpfWVsc2V7dmFyIGs9UyhyLnB4MCxyLnB4MSwhMCwxKTtpZihfKXt2YXIgQT0xLV87eC5hdHRyKFwiZFwiLFwiTVwiKyhpK18qci5weDFbMF0pK1wiLFwiKyhnK18qci5weDFbMV0pK1Moci5weDEsci5weDAsITEsXykrXCJsXCIrQSpyLnB4MFswXStcIixcIitBKnIucHgwWzFdK2srXCJaXCIpfWVsc2UgeC5hdHRyKFwiZFwiLFwiTVwiK2krXCIsXCIrZytcImxcIityLnB4MFswXStcIixcIityLnB4MFsxXStrK1wiWlwiKX12YXIgVD1jLmNhc3RPcHRpb24obS50ZXh0cG9zaXRpb24sci5wdHMpLE09di5zZWxlY3RBbGwoXCJnLnNsaWNldGV4dFwiKS5kYXRhKHIudGV4dCYmXCJub25lXCIhPT1UP1swXTpbXSk7TS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcInNsaWNldGV4dFwiLCEwKSxNLmV4aXQoKS5yZW1vdmUoKSxNLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1zLmVuc3VyZVNpbmdsZShuLnNlbGVjdCh0aGlzKSxcInRleHRcIixcIlwiLGZ1bmN0aW9uKHQpe3QuYXR0cihcImRhdGEtbm90ZXhcIiwxKX0pO2UudGV4dChyLnRleHQpLmF0dHIoe2NsYXNzOlwic2xpY2V0ZXh0XCIsdHJhbnNmb3JtOlwiXCIsXCJ0ZXh0LWFuY2hvclwiOlwibWlkZGxlXCJ9KS5jYWxsKG8uZm9udCxcIm91dHNpZGVcIj09PVQ/ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWMuY2FzdE9wdGlvbih0Lm91dHNpZGV0ZXh0Zm9udC5jb2xvcixlLnB0cyl8fGMuY2FzdE9wdGlvbih0LnRleHRmb250LmNvbG9yLGUucHRzKXx8ci5jb2xvcixpPWMuY2FzdE9wdGlvbih0Lm91dHNpZGV0ZXh0Zm9udC5mYW1pbHksZS5wdHMpfHxjLmNhc3RPcHRpb24odC50ZXh0Zm9udC5mYW1pbHksZS5wdHMpfHxyLmZhbWlseSxhPWMuY2FzdE9wdGlvbih0Lm91dHNpZGV0ZXh0Zm9udC5zaXplLGUucHRzKXx8Yy5jYXN0T3B0aW9uKHQudGV4dGZvbnQuc2l6ZSxlLnB0cyl8fHIuc2l6ZTtyZXR1cm57Y29sb3I6bixmYW1pbHk6aSxzaXplOmF9fShtLHIsdC5fZnVsbExheW91dC5mb250KTpmdW5jdGlvbih0LGUscil7dmFyIG49Yy5jYXN0T3B0aW9uKHQuaW5zaWRldGV4dGZvbnQuY29sb3IsZS5wdHMpOyFuJiZ0Ll9pbnB1dC50ZXh0Zm9udCYmKG49Yy5jYXN0T3B0aW9uKHQuX2lucHV0LnRleHRmb250LmNvbG9yLGUucHRzKSk7dmFyIGk9Yy5jYXN0T3B0aW9uKHQuaW5zaWRldGV4dGZvbnQuZmFtaWx5LGUucHRzKXx8Yy5jYXN0T3B0aW9uKHQudGV4dGZvbnQuZmFtaWx5LGUucHRzKXx8ci5mYW1pbHksbz1jLmNhc3RPcHRpb24odC5pbnNpZGV0ZXh0Zm9udC5zaXplLGUucHRzKXx8Yy5jYXN0T3B0aW9uKHQudGV4dGZvbnQuc2l6ZSxlLnB0cyl8fHIuc2l6ZTtyZXR1cm57Y29sb3I6bnx8YS5jb250cmFzdChlLmNvbG9yKSxmYW1pbHk6aSxzaXplOm99fShtLHIsdC5fZnVsbExheW91dC5mb250KSkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyx0KTt2YXIgaCxwPW8uYkJveChlLm5vZGUoKSk7XCJvdXRzaWRlXCI9PT1UP2g9ZChwLHIpOihoPWYocCxyLHUpLFwiYXV0b1wiPT09VCYmaC5zY2FsZTwxJiYoZS5jYWxsKG8uZm9udCxtLm91dHNpZGV0ZXh0Zm9udCksbS5vdXRzaWRldGV4dGZvbnQuZmFtaWx5PT09bS5pbnNpZGV0ZXh0Zm9udC5mYW1pbHkmJm0ub3V0c2lkZXRleHRmb250LnNpemU9PT1tLmluc2lkZXRleHRmb250LnNpemV8fChwPW8uYkJveChlLm5vZGUoKSkpLGg9ZChwLHIpKSk7dmFyIHY9aStyLnB4bWlkWzBdKmguckNlbnRlcisoaC54fHwwKSx4PWcrci5weG1pZFsxXSpoLnJDZW50ZXIrKGgueXx8MCk7aC5vdXRzaWRlJiYoci55TGFiZWxNaW49eC1wLmhlaWdodC8yLHIueUxhYmVsTWlkPXgsci55TGFiZWxNYXg9eCtwLmhlaWdodC8yLHIubGFiZWxFeHRyYVg9MCxyLmxhYmVsRXh0cmFZPTAseT0hMCksZS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrditcIixcIit4K1wiKVwiKyhoLnNjYWxlPDE/XCJzY2FsZShcIitoLnNjYWxlK1wiKVwiOlwiXCIpKyhoLnJvdGF0ZT9cInJvdGF0ZShcIitoLnJvdGF0ZStcIilcIjpcIlwiKStcInRyYW5zbGF0ZShcIistKHAubGVmdCtwLnJpZ2h0KS8yK1wiLFwiKy0ocC50b3ArcC5ib3R0b20pLzIrXCIpXCIpfSl9ZnVuY3Rpb24gUyh0LGUsbixpKXtyZXR1cm5cImFcIitpKnUucitcIixcIitpKnUucitcIiAwIFwiK3IubGFyZ2VBcmMrKG4/XCIgMSBcIjpcIiAwIFwiKStpKihlWzBdLXRbMF0pK1wiLFwiK2kqKGVbMV0tdFsxXSl9fSk7dmFyIHg9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKFwiZy50aXRsZXRleHRcIikuZGF0YShtLnRpdGxlLnRleHQ/WzBdOltdKTt4LmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwidGl0bGV0ZXh0XCIsITApLHguZXhpdCgpLnJlbW92ZSgpLHguZWFjaChmdW5jdGlvbigpe3ZhciBlLGk9cy5lbnN1cmVTaW5nbGUobi5zZWxlY3QodGhpcyksXCJ0ZXh0XCIsXCJcIixmdW5jdGlvbih0KXt0LmF0dHIoXCJkYXRhLW5vdGV4XCIsMSl9KSxhPXIubWV0YT9zLnRlbXBsYXRlU3RyaW5nKG0udGl0bGUudGV4dCx7bWV0YTpyLm1ldGF9KTptLnRpdGxlLnRleHQ7aS50ZXh0KGEpLmF0dHIoe2NsYXNzOlwidGl0bGV0ZXh0XCIsdHJhbnNmb3JtOlwiXCIsXCJ0ZXh0LWFuY2hvclwiOlwibWlkZGxlXCJ9KS5jYWxsKG8uZm9udCxtLnRpdGxlLmZvbnQpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsdCksZT1cIm1pZGRsZSBjZW50ZXJcIj09PW0udGl0bGUucG9zaXRpb24/ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQudGl0bGVCb3gud2lkdGgqdC50aXRsZUJveC53aWR0aCt0LnRpdGxlQm94LmhlaWdodCp0LnRpdGxlQm94LmhlaWdodCk7cmV0dXJue3g6dC5jeCx5OnQuY3ksc2NhbGU6dC50cmFjZS5ob2xlKnQucioyL2UsdHg6MCx0eTotdC50aXRsZUJveC5oZWlnaHQvMit0LnRyYWNlLnRpdGxlLmZvbnQuc2l6ZX19KHUpOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPTEsYT0xLG89dC50cmFjZSxzPXt4OnQuY3gseTp0LmN5fSxsPXt0eDowLHR5OjB9O3JldHVybiBsLnR5Kz1vLnRpdGxlLmZvbnQuc2l6ZSxuPXYobyksLTEhPT1vLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoXCJ0b3BcIik/KHMueS09KDErbikqdC5yLGwudHktPXQudGl0bGVCb3guaGVpZ2h0KTotMSE9PW8udGl0bGUucG9zaXRpb24uaW5kZXhPZihcImJvdHRvbVwiKSYmKHMueSs9KDErbikqdC5yKSwtMSE9PW8udGl0bGUucG9zaXRpb24uaW5kZXhPZihcImxlZnRcIik/KHI9ZS53KihvLmRvbWFpbi54WzFdLW8uZG9tYWluLnhbMF0pLzIrdC5yLHMueC09KDErbikqdC5yLGwudHgrPXQudGl0bGVCb3gud2lkdGgvMik6LTEhPT1vLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoXCJjZW50ZXJcIik/cj1lLncqKG8uZG9tYWluLnhbMV0tby5kb21haW4ueFswXSk6LTEhPT1vLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoXCJyaWdodFwiKSYmKHI9ZS53KihvLmRvbWFpbi54WzFdLW8uZG9tYWluLnhbMF0pLzIrdC5yLHMueCs9KDErbikqdC5yLGwudHgtPXQudGl0bGVCb3gud2lkdGgvMiksaT1yL3QudGl0bGVCb3gud2lkdGgsYT1nKHQsZSkvdC50aXRsZUJveC5oZWlnaHQse3g6cy54LHk6cy55LHNjYWxlOk1hdGgubWluKGksYSksdHg6bC50eCx0eTpsLnR5fX0odSxyLl9zaXplKSxpLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIitlLngrXCIsXCIrZS55K1wiKVwiKyhlLnNjYWxlPDE/XCJzY2FsZShcIitlLnNjYWxlK1wiKVwiOlwiXCIpK1widHJhbnNsYXRlKFwiK2UudHgrXCIsXCIrZS50eStcIilcIil9KSx5JiZmdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyxsLHUsaCxmLHAsZCxnO2Z1bmN0aW9uIHYodCxlKXtyZXR1cm4gdC5weG1pZFsxXS1lLnB4bWlkWzFdfWZ1bmN0aW9uIG0odCxlKXtyZXR1cm4gZS5weG1pZFsxXS10LnB4bWlkWzFdfWZ1bmN0aW9uIHkodCxyKXtyfHwocj17fSk7dmFyIGksdSxoLHAsZCxnLHY9ci5sYWJlbEV4dHJhWSsobj9yLnlMYWJlbE1heDpyLnlMYWJlbE1pbiksbT1uP3QueUxhYmVsTWluOnQueUxhYmVsTWF4LHk9bj90LnlMYWJlbE1heDp0LnlMYWJlbE1pbix4PXQuY3lGaW5hbCtvKHQucHgwWzFdLHQucHgxWzFdKSxiPXYtbTtpZihiKmw+MCYmKHQubGFiZWxFeHRyYVk9YiksQXJyYXkuaXNBcnJheShlLnB1bGwpKWZvcih1PTA7dTxmLmxlbmd0aDt1KyspKGg9Zlt1XSk9PT10fHwoYy5jYXN0T3B0aW9uKGUucHVsbCx0LnB0cyl8fDApPj0oYy5jYXN0T3B0aW9uKGUucHVsbCxoLnB0cyl8fDApfHwoKHQucHhtaWRbMV0taC5weG1pZFsxXSkqbD4wPyhwPWguY3lGaW5hbCtvKGgucHgwWzFdLGgucHgxWzFdKSwoYj1wLW0tdC5sYWJlbEV4dHJhWSkqbD4wJiYodC5sYWJlbEV4dHJhWSs9YikpOih5K3QubGFiZWxFeHRyYVkteCkqbD4wJiYoaT0zKnMqTWF0aC5hYnModS1mLmluZGV4T2YodCkpLGQ9aC5jeEZpbmFsK2EoaC5weDBbMF0saC5weDFbMF0pLChnPWQraS0odC5jeEZpbmFsK3QucHhtaWRbMF0pLXQubGFiZWxFeHRyYVgpKnM+MCYmKHQubGFiZWxFeHRyYVgrPWcpKSl9Zm9yKG49MDtuPDI7bisrKWZvcihpPW4/djptLG89bj9NYXRoLm1heDpNYXRoLm1pbixsPW4/MTotMSxyPTA7cjwyO3IrKyl7Zm9yKGE9cj9NYXRoLm1heDpNYXRoLm1pbixzPXI/MTotMSwodT10W25dW3JdKS5zb3J0KGkpLGg9dFsxLW5dW3JdLGY9aC5jb25jYXQodSksZD1bXSxwPTA7cDx1Lmxlbmd0aDtwKyspdm9pZCAwIT09dVtwXS55TGFiZWxNaWQmJmQucHVzaCh1W3BdKTtmb3IoZz0hMSxwPTA7biYmcDxoLmxlbmd0aDtwKyspaWYodm9pZCAwIT09aFtwXS55TGFiZWxNaWQpe2c9aFtwXTticmVha31mb3IocD0wO3A8ZC5sZW5ndGg7cCsrKXt2YXIgeD1wJiZkW3AtMV07ZyYmIXAmJih4PWcpLHkoZFtwXSx4KX19fShwLG0pLGZ1bmN0aW9uKHQsZSl7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHQubGFiZWxFeHRyYVh8fHQubGFiZWxFeHRyYVkpe3ZhciBpPXIuc2VsZWN0KFwiZy5zbGljZXRleHQgdGV4dFwiKTtpLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIit0LmxhYmVsRXh0cmFYK1wiLFwiK3QubGFiZWxFeHRyYVkrXCIpXCIraS5hdHRyKFwidHJhbnNmb3JtXCIpKTt2YXIgbz10LmN4RmluYWwrdC5weG1pZFswXSxsPXQuY3lGaW5hbCt0LnB4bWlkWzFdLGM9XCJNXCIrbytcIixcIitsLHU9KHQueUxhYmVsTWF4LXQueUxhYmVsTWluKSoodC5weG1pZFswXTwwPy0xOjEpLzQ7aWYodC5sYWJlbEV4dHJhWCl7dmFyIGg9dC5sYWJlbEV4dHJhWCp0LnB4bWlkWzFdL3QucHhtaWRbMF0sZj10LnlMYWJlbE1pZCt0LmxhYmVsRXh0cmFZLSh0LmN5RmluYWwrdC5weG1pZFsxXSk7TWF0aC5hYnMoaCk+TWF0aC5hYnMoZik/Yys9XCJsXCIrZip0LnB4bWlkWzBdL3QucHhtaWRbMV0rXCIsXCIrZitcIkhcIisobyt0LmxhYmVsRXh0cmFYK3UpOmMrPVwibFwiK3QubGFiZWxFeHRyYVgrXCIsXCIraCtcInZcIisoZi1oKStcImhcIit1fWVsc2UgYys9XCJWXCIrKHQueUxhYmVsTWlkK3QubGFiZWxFeHRyYVkpK1wiaFwiK3U7cy5lbnN1cmVTaW5nbGUocixcInBhdGhcIixcInRleHRsaW5lXCIpLmNhbGwoYS5zdHJva2UsZS5vdXRzaWRldGV4dGZvbnQuY29sb3IpLmF0dHIoe1wic3Ryb2tlLXdpZHRoXCI6TWF0aC5taW4oMixlLm91dHNpZGV0ZXh0Zm9udC5zaXplLzgpLGQ6YyxmaWxsOlwibm9uZVwifSl9ZWxzZSByLnNlbGVjdChcInBhdGgudGV4dGxpbmVcIikucmVtb3ZlKCl9KX0oaSxtKX0pfSk7c2V0VGltZW91dChmdW5jdGlvbigpe2kuc2VsZWN0QWxsKFwidHNwYW5cIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO3QuYXR0cihcImR5XCIpJiZ0LmF0dHIoXCJkeVwiLHQuYXR0cihcImR5XCIpKX0pfSwwKX0sdHJhbnNmb3JtSW5zaWRlVGV4dDpmfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIjo3MjUsXCIuL2V2ZW50X2RhdGFcIjoxMDMwLFwiLi9oZWxwZXJzXCI6MTAzMSxkMzoxNTV9XSwxMDM2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4vc3R5bGVfb25lXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt0Ll9mdWxsTGF5b3V0Ll9waWVsYXllci5zZWxlY3RBbGwoXCIudHJhY2VcIikuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9bi5zZWxlY3QodGhpcyk7ci5zdHlsZSh7b3BhY2l0eTplLm9wYWNpdHl9KSxyLnNlbGVjdEFsbChcInBhdGguc3VyZmFjZVwiKS5lYWNoKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmNhbGwoaSx0LGUpfSl9KX19LHtcIi4vc3R5bGVfb25lXCI6MTAzNyxkMzoxNTV9XSwxMDM3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksaT10KFwiLi9oZWxwZXJzXCIpLmNhc3RPcHRpb247ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1yLm1hcmtlci5saW5lLG89aShhLmNvbG9yLGUucHRzKXx8bi5kZWZhdWx0TGluZSxzPWkoYS53aWR0aCxlLnB0cyl8fDA7dC5zdHlsZShcInN0cm9rZS13aWR0aFwiLHMpLmNhbGwobi5maWxsLGUuY29sb3IpLmNhbGwobi5zdHJva2Usbyl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi9oZWxwZXJzXCI6MTAzMX1dLDEwMzg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz17eDpuLngseTpuLnkseHk6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGluZGljZXM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHhib3VuZHM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHlib3VuZHM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHRleHQ6bi50ZXh0LG1hcmtlcjp7Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGFycmF5T2s6ITEsZWRpdFR5cGU6XCJjYWxjXCJ9LG9wYWNpdHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjEsYXJyYXlPazohMSxlZGl0VHlwZTpcImNhbGNcIn0sYmxlbmQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDpudWxsLGVkaXRUeXBlOlwiY2FsY1wifSxzaXplbWluOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOi4xLG1heDoyLGRmbHQ6LjUsZWRpdFR5cGU6XCJjYWxjXCJ9LHNpemVtYXg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46LjEsZGZsdDoyMCxlZGl0VHlwZTpcImNhbGNcIn0sYm9yZGVyOntjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsYXJyYXlPazohMSxlZGl0VHlwZTpcImNhbGNcIn0sYXJlYXJhdGlvOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LHRyYW5zZm9ybXM6dm9pZCAwfX0se1wiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCI6MTA1Mn1dLDEwMzk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2wtcG9pbnRjbG91ZDJkXCIpLGk9dChcIi4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIiksYT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZVwiKS5maW5kRXh0cmVtZXMsbz10KFwiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3JcIik7ZnVuY3Rpb24gcyh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMudHlwZT1cInBvaW50Y2xvdWRcIix0aGlzLnBpY2tYRGF0YT1bXSx0aGlzLnBpY2tZRGF0YT1bXSx0aGlzLnhEYXRhPVtdLHRoaXMueURhdGE9W10sdGhpcy50ZXh0TGFiZWxzPVtdLHRoaXMuY29sb3I9XCJyZ2IoMCwgMCwgMClcIix0aGlzLm5hbWU9XCJcIix0aGlzLmhvdmVyaW5mbz1cImFsbFwiLHRoaXMuaWRUb0luZGV4PW5ldyBJbnQzMkFycmF5KDApLHRoaXMuYm91bmRzPVswLDAsMCwwXSx0aGlzLnBvaW50Y2xvdWRPcHRpb25zPXtwb3NpdGlvbnM6bmV3IEZsb2F0MzJBcnJheSgwKSxpZFRvSW5kZXg6dGhpcy5pZFRvSW5kZXgsc2l6ZW1pbjouNSxzaXplbWF4OjEyLGNvbG9yOlswLDAsMCwxXSxhcmVhUmF0aW86MSxib3JkZXJDb2xvcjpbMCwwLDAsMV19LHRoaXMucG9pbnRjbG91ZD1uKHQuZ2xwbG90LHRoaXMucG9pbnRjbG91ZE9wdGlvbnMpLHRoaXMucG9pbnRjbG91ZC5fdHJhY2U9dGhpc312YXIgbD1zLnByb3RvdHlwZTtsLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pZFRvSW5kZXhbdC5wb2ludElkXTtyZXR1cm57dHJhY2U6dGhpcyxkYXRhQ29vcmQ6dC5kYXRhQ29vcmQsdHJhY2VDb29yZDp0aGlzLnBpY2tYWURhdGE/W3RoaXMucGlja1hZRGF0YVsyKmVdLHRoaXMucGlja1hZRGF0YVsyKmUrMV1dOlt0aGlzLnBpY2tYRGF0YVtlXSx0aGlzLnBpY2tZRGF0YVtlXV0sdGV4dExhYmVsOkFycmF5LmlzQXJyYXkodGhpcy50ZXh0TGFiZWxzKT90aGlzLnRleHRMYWJlbHNbZV06dGhpcy50ZXh0TGFiZWxzLGNvbG9yOnRoaXMuY29sb3IsbmFtZTp0aGlzLm5hbWUscG9pbnRJbmRleDplLGhvdmVyaW5mbzp0aGlzLmhvdmVyaW5mb319LGwudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuaW5kZXg9dC5pbmRleCx0aGlzLnRleHRMYWJlbHM9dC50ZXh0LHRoaXMubmFtZT10Lm5hbWUsdGhpcy5ob3ZlcmluZm89dC5ob3ZlcmluZm8sdGhpcy5ib3VuZHM9WzEvMCwxLzAsLTEvMCwtMS8wXSx0aGlzLnVwZGF0ZUZhc3QodCksdGhpcy5jb2xvcj1vKHQse30pfSxsLnVwZGF0ZUZhc3Q9ZnVuY3Rpb24odCl7dmFyIGUscixuLG8scyxsLGM9dGhpcy54RGF0YT10aGlzLnBpY2tYRGF0YT10LngsdT10aGlzLnlEYXRhPXRoaXMucGlja1lEYXRhPXQueSxoPXRoaXMucGlja1hZRGF0YT10Lnh5LGY9dC54Ym91bmRzJiZ0Lnlib3VuZHMscD10LmluZGljZXMsZD10aGlzLmJvdW5kcztpZihoKXtpZihuPWgsZT1oLmxlbmd0aD4+PjEsZilkWzBdPXQueGJvdW5kc1swXSxkWzJdPXQueGJvdW5kc1sxXSxkWzFdPXQueWJvdW5kc1swXSxkWzNdPXQueWJvdW5kc1sxXTtlbHNlIGZvcihsPTA7bDxlO2wrKylvPW5bMipsXSxzPW5bMipsKzFdLG88ZFswXSYmKGRbMF09byksbz5kWzJdJiYoZFsyXT1vKSxzPGRbMV0mJihkWzFdPXMpLHM+ZFszXSYmKGRbM109cyk7aWYocClyPXA7ZWxzZSBmb3Iocj1uZXcgSW50MzJBcnJheShlKSxsPTA7bDxlO2wrKylyW2xdPWx9ZWxzZSBmb3IoZT1jLmxlbmd0aCxuPW5ldyBGbG9hdDMyQXJyYXkoMiplKSxyPW5ldyBJbnQzMkFycmF5KGUpLGw9MDtsPGU7bCsrKW89Y1tsXSxzPXVbbF0scltsXT1sLG5bMipsXT1vLG5bMipsKzFdPXMsbzxkWzBdJiYoZFswXT1vKSxvPmRbMl0mJihkWzJdPW8pLHM8ZFsxXSYmKGRbMV09cykscz5kWzNdJiYoZFszXT1zKTt0aGlzLmlkVG9JbmRleD1yLHRoaXMucG9pbnRjbG91ZE9wdGlvbnMuaWRUb0luZGV4PXIsdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5wb3NpdGlvbnM9bjt2YXIgZz1pKHQubWFya2VyLmNvbG9yKSx2PWkodC5tYXJrZXIuYm9yZGVyLmNvbG9yKSxtPXQub3BhY2l0eSp0Lm1hcmtlci5vcGFjaXR5O2dbM10qPW0sdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5jb2xvcj1nO3ZhciB5PXQubWFya2VyLmJsZW5kO2lmKG51bGw9PT15KXt5PWMubGVuZ3RoPDEwMHx8dS5sZW5ndGg8MTAwfXRoaXMucG9pbnRjbG91ZE9wdGlvbnMuYmxlbmQ9eSx2WzNdKj1tLHRoaXMucG9pbnRjbG91ZE9wdGlvbnMuYm9yZGVyQ29sb3I9djt2YXIgeD10Lm1hcmtlci5zaXplbWluLGI9TWF0aC5tYXgodC5tYXJrZXIuc2l6ZW1heCx0Lm1hcmtlci5zaXplbWluKTt0aGlzLnBvaW50Y2xvdWRPcHRpb25zLnNpemVNaW49eCx0aGlzLnBvaW50Y2xvdWRPcHRpb25zLnNpemVNYXg9Yix0aGlzLnBvaW50Y2xvdWRPcHRpb25zLmFyZWFSYXRpbz10Lm1hcmtlci5ib3JkZXIuYXJlYXJhdGlvLHRoaXMucG9pbnRjbG91ZC51cGRhdGUodGhpcy5wb2ludGNsb3VkT3B0aW9ucyk7dmFyIF89dGhpcy5zY2VuZS54YXhpcyx3PXRoaXMuc2NlbmUueWF4aXMsaz1iLzJ8fC41O3QuX2V4dHJlbWVzW18uX2lkXT1hKF8sW2RbMF0sZFsyXV0se3BwYWQ6a30pLHQuX2V4dHJlbWVzW3cuX2lkXT1hKHcsW2RbMV0sZFszXV0se3BwYWQ6a30pfSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnBvaW50Y2xvdWQuZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgcyh0LGUudWlkKTtyZXR1cm4gci51cGRhdGUoZSkscn19LHtcIi4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIjo3MjQsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlXCI6NzQ4LFwiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3JcIjoxMDYyLFwiZ2wtcG9pbnRjbG91ZDJkXCI6Mjg5fV0sMTA0MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gYShyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfWEoXCJ4XCIpLGEoXCJ5XCIpLGEoXCJ4Ym91bmRzXCIpLGEoXCJ5Ym91bmRzXCIpLHQueHkmJnQueHkgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkmJihlLnh5PXQueHkpLHQuaW5kaWNlcyYmdC5pbmRpY2VzIGluc3RhbmNlb2YgSW50MzJBcnJheSYmKGUuaW5kaWNlcz10LmluZGljZXMpLGEoXCJ0ZXh0XCIpLGEoXCJtYXJrZXIuY29sb3JcIixyKSxhKFwibWFya2VyLm9wYWNpdHlcIiksYShcIm1hcmtlci5ibGVuZFwiKSxhKFwibWFya2VyLnNpemVtaW5cIiksYShcIm1hcmtlci5zaXplbWF4XCIpLGEoXCJtYXJrZXIuYm9yZGVyLmNvbG9yXCIsciksYShcIm1hcmtlci5ib3JkZXIuYXJlYXJhdGlvXCIpLGUuX2xlbmd0aD1udWxsfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi9hdHRyaWJ1dGVzXCI6MTAzOH1dLDEwNDE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLG4uY2FsYz10KFwiLi4vc2NhdHRlcjNkL2NhbGNcIiksbi5wbG90PXQoXCIuL2NvbnZlcnRcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJwb2ludGNsb3VkXCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvZ2wyZFwiKSxuLmNhdGVnb3JpZXM9W1wiZ2xcIixcImdsMmRcIixcInNob3dMZWdlbmRcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9nbDJkXCI6Nzg3LFwiLi4vc2NhdHRlcjNkL2NhbGNcIjoxMDgwLFwiLi9hdHRyaWJ1dGVzXCI6MTAzOCxcIi4vY29udmVydFwiOjEwMzksXCIuL2RlZmF1bHRzXCI6MTA0MH1dLDEwNDI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvZngvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9wbG90cy9kb21haW5cIikuYXR0cmlidXRlcyxsPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxjPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSx1PXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLnRlbXBsYXRlZEFycmF5LGg9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxmPXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsOyhlLmV4cG9ydHM9Zih7aG92ZXJpbmZvOmgoe30saS5ob3ZlcmluZm8se2ZsYWdzOltdLGFycmF5T2s6ITF9KSxob3ZlcmxhYmVsOm8uaG92ZXJsYWJlbCxkb21haW46cyh7bmFtZTpcInNhbmtleVwiLHRyYWNlOiEwfSksb3JpZW50YXRpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInZcIixcImhcIl0sZGZsdDpcImhcIn0sdmFsdWVmb3JtYXQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiLjNzXCJ9LHZhbHVlc3VmZml4Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwifSxhcnJhbmdlbWVudDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wic25hcFwiLFwicGVycGVuZGljdWxhclwiLFwiZnJlZWZvcm1cIixcImZpeGVkXCJdLGRmbHQ6XCJzbmFwXCJ9LHRleHRmb250Om4oe30pLG5vZGU6e2xhYmVsOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGRmbHQ6W119LGdyb3Vwczp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixpbXBsaWVkRWRpdHM6e3g6W10seTpbXX0sZGltZW5zaW9uczoyLGZyZWVMZW5ndGg6ITAsZGZsdDpbXSxpdGVtczp7dmFsVHlwZTpcIm51bWJlclwiLGVkaXRUeXBlOlwiY2FsY1wifX0seDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixkZmx0OltdfSx5Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGRmbHQ6W119LGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixhcnJheU9rOiEwfSxsaW5lOntjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDphLmRlZmF1bHRMaW5lLGFycmF5T2s6ITB9LHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDouNSxhcnJheU9rOiEwfX0scGFkOnt2YWxUeXBlOlwibnVtYmVyXCIsYXJyYXlPazohMSxtaW46MCxkZmx0OjIwfSx0aGlja25lc3M6e3ZhbFR5cGU6XCJudW1iZXJcIixhcnJheU9rOiExLG1pbjoxLGRmbHQ6MjB9LGhvdmVyaW5mbzp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYWxsXCIsXCJub25lXCIsXCJza2lwXCJdLGRmbHQ6XCJhbGxcIn0saG92ZXJsYWJlbDpvLmhvdmVybGFiZWwsaG92ZXJ0ZW1wbGF0ZTpsKHt9LHtrZXlzOltcInZhbHVlXCIsXCJsYWJlbFwiXX0pfSxsaW5rOntsYWJlbDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixkZmx0OltdfSxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsYXJyYXlPazohMH0sbGluZTp7Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6YS5kZWZhdWx0TGluZSxhcnJheU9rOiEwfSx3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MCxhcnJheU9rOiEwfX0sc291cmNlOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGRmbHQ6W119LHRhcmdldDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixkZmx0OltdfSx2YWx1ZTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixkZmx0OltdfSxob3ZlcmluZm86e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImFsbFwiLFwibm9uZVwiLFwic2tpcFwiXSxkZmx0OlwiYWxsXCJ9LGhvdmVybGFiZWw6by5ob3ZlcmxhYmVsLGhvdmVydGVtcGxhdGU6bCh7fSx7a2V5czpbXCJ2YWx1ZVwiLFwibGFiZWxcIl19KSxjb2xvcnNjYWxlczp1KFwiY29uY2VudHJhdGlvbnNjYWxlc1wiLHtlZGl0VHlwZTpcImNhbGNcIixsYWJlbDp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwiY2FsY1wiLGRmbHQ6XCJcIn0sY21heDp7dmFsVHlwZTpcIm51bWJlclwiLGVkaXRUeXBlOlwiY2FsY1wiLGRmbHQ6MX0sY21pbjp7dmFsVHlwZTpcIm51bWJlclwiLGVkaXRUeXBlOlwiY2FsY1wiLGRmbHQ6MH0sY29sb3JzY2FsZTpoKGMoKS5jb2xvcnNjYWxlLHtkZmx0OltbMCxcIndoaXRlXCJdLFsxLFwiYmxhY2tcIl1dfSl9KX19LFwiY2FsY1wiLFwibmVzdGVkXCIpKS50cmFuc2Zvcm1zPXZvaWQgMH0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzXCI6NTc3LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIjo1ODUsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXNcIjo2MDgsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDYsXCIuLi8uLi9wbG90cy9kb21haW5cIjo3NzQsXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIjo3NzV9XSwxMDQzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGwsaT10KFwiLi4vLi4vcGxvdHMvZ2V0X2RhdGFcIikuZ2V0TW9kdWxlQ2FsY0RhdGEsYT10KFwiLi9wbG90XCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvZngvbGF5b3V0X2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vbGliL3NldGN1cnNvclwiKSxsPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50XCIpLGM9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZWxlY3RcIikucHJlcFNlbGVjdCx1PXQoXCIuLi8uLi9saWJcIiksaD10KFwiLi4vLi4vcmVnaXN0cnlcIik7ZnVuY3Rpb24gZih0LGUpe3ZhciByPXQuX2Z1bGxEYXRhW2VdLG49dC5fZnVsbExheW91dCxpPW4uZHJhZ21vZGUsYT1cInBhblwiPT09bi5kcmFnbW9kZT9cIm1vdmVcIjpcImNyb3NzaGFpclwiLG89ci5fYmdSZWN0O2lmKFwicGFuXCIhPT1pJiZcInpvb21cIiE9PWkpe3MobyxhKTt2YXIgZj17X2lkOlwieFwiLGMycDp1LmlkZW50aXR5LF9vZmZzZXQ6ci5fc2Fua2V5LnRyYW5zbGF0ZVgsX2xlbmd0aDpyLl9zYW5rZXkud2lkdGh9LHA9e19pZDpcInlcIixjMnA6dS5pZGVudGl0eSxfb2Zmc2V0OnIuX3NhbmtleS50cmFuc2xhdGVZLF9sZW5ndGg6ci5fc2Fua2V5LmhlaWdodH0sZD17Z2Q6dCxlbGVtZW50Om8ubm9kZSgpLHBsb3RpbmZvOntpZDplLHhheGlzOmYseWF4aXM6cCxmaWxsUmFuZ2VJdGVtczp1Lm5vb3B9LHN1YnBsb3Q6ZSx4YXhlczpbZl0seWF4ZXM6W3BdLGRvbmVGbkNvbXBsZXRlZDpmdW5jdGlvbihyKXt2YXIgbixpPXQuX2Z1bGxEYXRhW2VdLGE9aS5ub2RlLmdyb3Vwcy5zbGljZSgpLG89W107ZnVuY3Rpb24gcyh0KXtmb3IodmFyIGU9aS5fc2Fua2V5LmdyYXBoLm5vZGVzLHI9MDtyPGUubGVuZ3RoO3IrKylpZihlW3JdLnBvaW50TnVtYmVyPT09dClyZXR1cm4gZVtyXX1mb3IodmFyIGw9MDtsPHIubGVuZ3RoO2wrKyl7dmFyIGM9cyhyW2xdLnBvaW50TnVtYmVyKTtpZihjKWlmKGMuZ3JvdXApe2Zvcih2YXIgdT0wO3U8Yy5jaGlsZHJlbk5vZGVzLmxlbmd0aDt1Kyspby5wdXNoKGMuY2hpbGRyZW5Ob2Rlc1t1XS5wb2ludE51bWJlcik7YVtjLnBvaW50TnVtYmVyLWkubm9kZS5fY291bnRdPSExfWVsc2Ugby5wdXNoKGMucG9pbnROdW1iZXIpfW49YS5maWx0ZXIoQm9vbGVhbikuY29uY2F0KFtvXSksaC5jYWxsKFwiX2d1aVJlc3R5bGVcIix0LHtcIm5vZGUuZ3JvdXBzXCI6W25dfSxlKX0scHJlcEZuOmZ1bmN0aW9uKHQsZSxyKXtjKHQsZSxyLGQsaSl9fTtsLmluaXQoZCl9fXIubmFtZT1cInNhbmtleVwiLHIuYmFzZUxheW91dEF0dHJPdmVycmlkZXM9bih7aG92ZXJsYWJlbDpvLmhvdmVybGFiZWx9LFwicGxvdFwiLFwibmVzdGVkXCIpLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT1pKHQuY2FsY2RhdGEsXCJzYW5rZXlcIilbMF07YSh0LGUpLHIudXBkYXRlRngodCl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5faGFzJiZuLl9oYXMoXCJzYW5rZXlcIiksYT1lLl9oYXMmJmUuX2hhcyhcInNhbmtleVwiKTtpJiYhYSYmKG4uX3BhcGVyZGl2LnNlbGVjdEFsbChcIi5zYW5rZXlcIikucmVtb3ZlKCksbi5fcGFwZXJkaXYuc2VsZWN0QWxsKFwiLmJnc2Fua2V5XCIpLnJlbW92ZSgpKX0sci51cGRhdGVGeD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQuX2Z1bGxEYXRhLmxlbmd0aDtlKyspZih0LGUpfX0se1wiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudFwiOjU5NixcIi4uLy4uL2NvbXBvbmVudHMvZngvbGF5b3V0X2F0dHJpYnV0ZXNcIjo2MTgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvc2V0Y3Vyc29yXCI6NzIxLFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZWxlY3RcIjo3NjYsXCIuLi8uLi9wbG90cy9nZXRfZGF0YVwiOjc4NCxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9wbG90XCI6MTA0OH1dLDEwNDQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwic3Ryb25nbHktY29ubmVjdGVkLWNvbXBvbmVudHNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL2xpYi9ndXBcIikud3JhcCxvPWkuaXNBcnJheU9yVHlwZWRBcnJheSxzPWkuaXNJbmRleCxsPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGVcIik7ZnVuY3Rpb24gYyh0KXt2YXIgZSxyPXQubm9kZSxhPXQubGluayxjPVtdLHU9byhhLmNvbG9yKSxoPXt9LGY9e30scD1hLmNvbG9yc2NhbGVzLmxlbmd0aDtmb3IoZT0wO2U8cDtlKyspe3ZhciBkPWEuY29sb3JzY2FsZXNbZV0sZz1sLmV4dHJhY3RTY2FsZShkLHtjTGV0dGVyOlwiY1wifSksdj1sLm1ha2VDb2xvclNjYWxlRnVuYyhnKTtmW2QubGFiZWxdPXZ9dmFyIG09MDtmb3IoZT0wO2U8YS52YWx1ZS5sZW5ndGg7ZSsrKWEuc291cmNlW2VdPm0mJihtPWEuc291cmNlW2VdKSxhLnRhcmdldFtlXT5tJiYobT1hLnRhcmdldFtlXSk7dmFyIHkseD1tKzE7dC5ub2RlLl9jb3VudD14O3ZhciBiPXQubm9kZS5ncm91cHMsXz17fTtmb3IoZT0wO2U8Yi5sZW5ndGg7ZSsrKXt2YXIgdz1iW2VdO2Zvcih5PTA7eTx3Lmxlbmd0aDt5Kyspe3ZhciBrPXdbeV0sQT14K2U7Xy5oYXNPd25Qcm9wZXJ0eShrKT9pLndhcm4oXCJOb2RlIFwiK2srXCIgaXMgYWxyZWFkeSBwYXJ0IG9mIGEgZ3JvdXAuXCIpOl9ba109QX19dmFyIFQ9e3NvdXJjZTpbXSx0YXJnZXQ6W119O2ZvcihlPTA7ZTxhLnZhbHVlLmxlbmd0aDtlKyspe3ZhciBNPWEudmFsdWVbZV0sUz1hLnNvdXJjZVtlXSxFPWEudGFyZ2V0W2VdO2lmKE0+MCYmcyhTLHgpJiZzKEUseCkmJighXy5oYXNPd25Qcm9wZXJ0eShTKXx8IV8uaGFzT3duUHJvcGVydHkoRSl8fF9bU10hPT1fW0VdKSl7Xy5oYXNPd25Qcm9wZXJ0eShFKSYmKEU9X1tFXSksXy5oYXNPd25Qcm9wZXJ0eShTKSYmKFM9X1tTXSksRT0rRSxoW1M9K1NdPWhbRV09ITA7dmFyIEM9XCJcIjthLmxhYmVsJiZhLmxhYmVsW2VdJiYoQz1hLmxhYmVsW2VdKTt2YXIgTD1udWxsO0MmJmYuaGFzT3duUHJvcGVydHkoQykmJihMPWZbQ10pLGMucHVzaCh7cG9pbnROdW1iZXI6ZSxsYWJlbDpDLGNvbG9yOnU/YS5jb2xvcltlXTphLmNvbG9yLGNvbmNlbnRyYXRpb25zY2FsZTpMLHNvdXJjZTpTLHRhcmdldDpFLHZhbHVlOitNfSksVC5zb3VyY2UucHVzaChTKSxULnRhcmdldC5wdXNoKEUpfX12YXIgej14K2IubGVuZ3RoLE89byhyLmNvbG9yKSxJPVtdO2ZvcihlPTA7ZTx6O2UrKylpZihoW2VdKXt2YXIgRD1yLmxhYmVsW2VdO0kucHVzaCh7Z3JvdXA6ZT54LTEsY2hpbGRyZW5Ob2RlczpbXSxwb2ludE51bWJlcjplLGxhYmVsOkQsY29sb3I6Tz9yLmNvbG9yW2VdOnIuY29sb3J9KX12YXIgUD0hMTtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgYT1pLmluaXQyZEFycmF5KHQsMCksbz0wO288TWF0aC5taW4oZS5sZW5ndGgsci5sZW5ndGgpO28rKylpZihpLmlzSW5kZXgoZVtvXSx0KSYmaS5pc0luZGV4KHJbb10sdCkpe2lmKGVbb109PT1yW29dKXJldHVybiEwO2FbZVtvXV0ucHVzaChyW29dKX1yZXR1cm4gbihhKS5jb21wb25lbnRzLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RoPjF9KX0oeixULnNvdXJjZSxULnRhcmdldCkmJihQPSEwKSx7Y2lyY3VsYXI6UCxsaW5rczpjLG5vZGVzOkksZ3JvdXBzOmIsZ3JvdXBMb29rdXA6X319ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9YyhlKTtyZXR1cm4gYSh7Y2lyY3VsYXI6ci5jaXJjdWxhcixfbm9kZXM6ci5ub2RlcyxfbGlua3M6ci5saW5rcyxfZ3JvdXBzOnIuZ3JvdXBzLF9ncm91cExvb2t1cDpyLmdyb3VwTG9va3VwfSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGVcIjo1OTAsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvZ3VwXCI6Njk5LFwic3Ryb25nbHktY29ubmVjdGVkLWNvbXBvbmVudHNcIjo1MTV9XSwxMDQ1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtub2RlVGV4dE9mZnNldEhvcml6b250YWw6NCxub2RlVGV4dE9mZnNldFZlcnRpY2FsOjMsbm9kZVBhZEFjcm9zczoxMCxzYW5rZXlJdGVyYXRpb25zOjUwLGZvcmNlSXRlcmF0aW9uczo1LGZvcmNlVGlja3NQZXJGcmFtZToxMCxkdXJhdGlvbjo1MDAsZWFzZTpcImxpbmVhclwiLGNuOntzYW5rZXk6XCJzYW5rZXlcIixzYW5rZXlMaW5rczpcInNhbmtleS1saW5rc1wiLHNhbmtleUxpbms6XCJzYW5rZXktbGlua1wiLHNhbmtleU5vZGVTZXQ6XCJzYW5rZXktbm9kZS1zZXRcIixzYW5rZXlOb2RlOlwic2Fua2V5LW5vZGVcIixub2RlUmVjdDpcIm5vZGUtcmVjdFwiLG5vZGVDYXB0dXJlOlwibm9kZS1jYXB0dXJlXCIsbm9kZUNlbnRlcmVkOlwibm9kZS1lbnRlcmVkXCIsbm9kZUxhYmVsR3VpZGU6XCJub2RlLWxhYmVsLWd1aWRlXCIsbm9kZUxhYmVsOlwibm9kZS1sYWJlbFwiLG5vZGVMYWJlbFRleHRQYXRoOlwibm9kZS1sYWJlbC10ZXh0LXBhdGhcIn19fSx7fV0sMTA0NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksbz10KFwidGlueWNvbG9yMlwiKSxzPXQoXCIuLi8uLi9wbG90cy9kb21haW5cIikuZGVmYXVsdHMsbD10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcmxhYmVsX2RlZmF1bHRzXCIpLGM9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIiksdT10KFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCIpO2Z1bmN0aW9uIGgodCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLmxpbmsuY29sb3JzY2FsZXMscixhKX1yKFwibGFiZWxcIikscihcImNtaW5cIikscihcImNtYXhcIikscihcImNvbG9yc2NhbGVcIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYpe2Z1bmN0aW9uIHAocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX12YXIgZD1uLmV4dGVuZERlZXAoZi5ob3ZlcmxhYmVsLHQuaG92ZXJsYWJlbCksZz10Lm5vZGUsdj1jLm5ld0NvbnRhaW5lcihlLFwibm9kZVwiKTtmdW5jdGlvbiBtKHQsZSl7cmV0dXJuIG4uY29lcmNlKGcsdixpLm5vZGUsdCxlKX1tKFwibGFiZWxcIiksbShcImdyb3Vwc1wiKSxtKFwieFwiKSxtKFwieVwiKSxtKFwicGFkXCIpLG0oXCJ0aGlja25lc3NcIiksbShcImxpbmUuY29sb3JcIiksbShcImxpbmUud2lkdGhcIiksbShcImhvdmVyaW5mb1wiLHQuaG92ZXJpbmZvKSxsKGcsdixtLGQpLG0oXCJob3ZlcnRlbXBsYXRlXCIpO3ZhciB5PWYuY29sb3J3YXk7bShcImNvbG9yXCIsdi5sYWJlbC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gYS5hZGRPcGFjaXR5KGZ1bmN0aW9uKHQpe3JldHVybiB5W3QleS5sZW5ndGhdfShlKSwuOCl9KSk7dmFyIHg9dC5saW5rfHx7fSxiPWMubmV3Q29udGFpbmVyKGUsXCJsaW5rXCIpO2Z1bmN0aW9uIF8odCxlKXtyZXR1cm4gbi5jb2VyY2UoeCxiLGkubGluayx0LGUpfV8oXCJsYWJlbFwiKSxfKFwic291cmNlXCIpLF8oXCJ0YXJnZXRcIiksXyhcInZhbHVlXCIpLF8oXCJsaW5lLmNvbG9yXCIpLF8oXCJsaW5lLndpZHRoXCIpLF8oXCJob3ZlcmluZm9cIix0LmhvdmVyaW5mbyksbCh4LGIsXyxkKSxfKFwiaG92ZXJ0ZW1wbGF0ZVwiKTt2YXIgdyxrPW8oZi5wYXBlcl9iZ2NvbG9yKS5nZXRMdW1pbmFuY2UoKTwuMzMzP1wicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpXCI6XCJyZ2JhKDAsIDAsIDAsIDAuMilcIjtfKFwiY29sb3JcIixuLnJlcGVhdChrLGIudmFsdWUubGVuZ3RoKSksdSh4LGIse25hbWU6XCJjb2xvcnNjYWxlc1wiLGhhbmRsZUl0ZW1EZWZhdWx0czpofSkscyhlLGYscCkscChcIm9yaWVudGF0aW9uXCIpLHAoXCJ2YWx1ZWZvcm1hdFwiKSxwKFwidmFsdWVzdWZmaXhcIiksdi54Lmxlbmd0aCYmdi55Lmxlbmd0aCYmKHc9XCJmcmVlZm9ybVwiKSxwKFwiYXJyYW5nZW1lbnRcIix3KSxuLmNvZXJjZUZvbnQocCxcInRleHRmb250XCIsbi5leHRlbmRGbGF0KHt9LGYuZm9udCkpLGUuX2xlbmd0aD1udWxsfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJsYWJlbF9kZWZhdWx0c1wiOjYxNSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIjo3NDUsXCIuLi8uLi9wbG90cy9kb21haW5cIjo3NzQsXCIuL2F0dHJpYnV0ZXNcIjoxMDQyLHRpbnljb2xvcjI6NTIyfV0sMTA0NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIiksbi5jYWxjPXQoXCIuL2NhbGNcIiksbi5wbG90PXQoXCIuL3Bsb3RcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJzYW5rZXlcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuL2Jhc2VfcGxvdFwiKSxuLnNlbGVjdFBvaW50cz10KFwiLi9zZWxlY3QuanNcIiksbi5jYXRlZ29yaWVzPVtcIm5vT3BhY2l0eVwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4vYXR0cmlidXRlc1wiOjEwNDIsXCIuL2Jhc2VfcGxvdFwiOjEwNDMsXCIuL2NhbGNcIjoxMDQ0LFwiLi9kZWZhdWx0c1wiOjEwNDYsXCIuL3Bsb3RcIjoxMDQ4LFwiLi9zZWxlY3QuanNcIjoxMDUwfV0sMTA0ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuL3JlbmRlclwiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4XCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIikscz10KFwiLi4vLi4vbGliXCIpLGw9dChcIi4vY29uc3RhbnRzXCIpLmNuLGM9cy5fO2Z1bmN0aW9uIHUodCl7cmV0dXJuXCJcIiE9PXR9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXk9PT1lLnRyYWNlSWR9KX1mdW5jdGlvbiBmKHQsZSl7bi5zZWxlY3QodCkuc2VsZWN0KFwicGF0aFwiKS5zdHlsZShcImZpbGwtb3BhY2l0eVwiLGUpLG4uc2VsZWN0KHQpLnNlbGVjdChcInJlY3RcIikuc3R5bGUoXCJmaWxsLW9wYWNpdHlcIixlKX1mdW5jdGlvbiBwKHQpe24uc2VsZWN0KHQpLnNlbGVjdChcInRleHQubmFtZVwiKS5zdHlsZShcImZpbGxcIixcImJsYWNrXCIpfWZ1bmN0aW9uIGQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi0xIT09dC5ub2RlLnNvdXJjZUxpbmtzLmluZGV4T2YoZS5saW5rKXx8LTEhPT10Lm5vZGUudGFyZ2V0TGlua3MuaW5kZXhPZihlLmxpbmspfX1mdW5jdGlvbiBnKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4tMSE9PWUubm9kZS5zb3VyY2VMaW5rcy5pbmRleE9mKHQubGluayl8fC0xIT09ZS5ub2RlLnRhcmdldExpbmtzLmluZGV4T2YodC5saW5rKX19ZnVuY3Rpb24gdih0LGUscil7ZSYmciYmaChyLGUpLnNlbGVjdEFsbChcIi5cIitsLnNhbmtleUxpbmspLmZpbHRlcihkKGUpKS5jYWxsKHkuYmluZCgwLGUsciwhMSkpfWZ1bmN0aW9uIG0odCxlLHIpe2UmJnImJmgocixlKS5zZWxlY3RBbGwoXCIuXCIrbC5zYW5rZXlMaW5rKS5maWx0ZXIoZChlKSkuY2FsbCh4LmJpbmQoMCxlLHIsITEpKX1mdW5jdGlvbiB5KHQsZSxyLG4pe3ZhciBpPW4uZGF0dW0oKS5saW5rLmxhYmVsO24uc3R5bGUoXCJmaWxsLW9wYWNpdHlcIixmdW5jdGlvbih0KXtpZighdC5saW5rLmNvbmNlbnRyYXRpb25zY2FsZSlyZXR1cm4uNH0pLGkmJmgoZSx0KS5zZWxlY3RBbGwoXCIuXCIrbC5zYW5rZXlMaW5rKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQubGluay5sYWJlbD09PWl9KS5zdHlsZShcImZpbGwtb3BhY2l0eVwiLGZ1bmN0aW9uKHQpe2lmKCF0LmxpbmsuY29uY2VudHJhdGlvbnNjYWxlKXJldHVybi40fSksciYmaChlLHQpLnNlbGVjdEFsbChcIi5cIitsLnNhbmtleU5vZGUpLmZpbHRlcihnKHQpKS5jYWxsKHYpfWZ1bmN0aW9uIHgodCxlLHIsbil7dmFyIGk9bi5kYXR1bSgpLmxpbmsubGFiZWw7bi5zdHlsZShcImZpbGwtb3BhY2l0eVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbnlDb2xvckFscGhhfSksaSYmaChlLHQpLnNlbGVjdEFsbChcIi5cIitsLnNhbmtleUxpbmspLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5rLmxhYmVsPT09aX0pLnN0eWxlKFwiZmlsbC1vcGFjaXR5XCIsZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9yQWxwaGF9KSxyJiZoKGUsdCkuc2VsZWN0QWxsKGwuc2Fua2V5Tm9kZSkuZmlsdGVyKGcodCkpLmNhbGwobSl9ZnVuY3Rpb24gYih0LGUpe3ZhciByPXQuaG92ZXJsYWJlbHx8e30sbj1zLm5lc3RlZFByb3BlcnR5KHIsZSkuZ2V0KCk7cmV0dXJuIUFycmF5LmlzQXJyYXkobikmJm59ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuX2Z1bGxMYXlvdXQscz1yLl9wYXBlcixoPXIuX3NpemUsZD0wO2Q8ZS5sZW5ndGg7ZCsrKWlmKCF0Ll9mdWxsRGF0YVtkXS5fdmlld0luaXRpYWwpe3ZhciBnPXQuX2Z1bGxEYXRhW2RdLm5vZGU7dC5fZnVsbERhdGFbZF0uX3ZpZXdJbml0aWFsPXtub2RlOntncm91cHM6Zy5ncm91cHMuc2xpY2UoKSx4OmcueC5zbGljZSgpLHk6Zy55LnNsaWNlKCl9fX12YXIgXz1jKHQsXCJzb3VyY2U6XCIpK1wiIFwiLHc9Yyh0LFwidGFyZ2V0OlwiKStcIiBcIixrPWModCxcImNvbmNlbnRyYXRpb246XCIpK1wiIFwiLEE9Yyh0LFwiaW5jb21pbmcgZmxvdyBjb3VudDpcIikrXCIgXCIsVD1jKHQsXCJvdXRnb2luZyBmbG93IGNvdW50OlwiKStcIiBcIjtpKHQscyxlLHt3aWR0aDpoLncsaGVpZ2h0OmguaCxtYXJnaW46e3Q6aC50LHI6aC5yLGI6aC5iLGw6aC5sfX0se2xpbmtFdmVudHM6e2hvdmVyOmZ1bmN0aW9uKGUscixpKXshMSE9PXQuX2Z1bGxMYXlvdXQuaG92ZXJtb2RlJiYobi5zZWxlY3QoZSkuY2FsbCh5LmJpbmQoMCxyLGksITApKSxcInNraXBcIiE9PXIubGluay50cmFjZS5saW5rLmhvdmVyaW5mbyYmKHIubGluay5mdWxsRGF0YT1yLmxpbmsudHJhY2UsdC5lbWl0KFwicGxvdGx5X2hvdmVyXCIse2V2ZW50Om4uZXZlbnQscG9pbnRzOltyLmxpbmtdfSkpKX0sZm9sbG93OmZ1bmN0aW9uKGUsaSl7aWYoITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSl7dmFyIHM9aS5saW5rLnRyYWNlLmxpbms7aWYoXCJub25lXCIhPT1zLmhvdmVyaW5mbyYmXCJza2lwXCIhPT1zLmhvdmVyaW5mbyl7Zm9yKHZhciBsPVtdLGM9MCxoPTA7aDxpLmZsb3cubGlua3MubGVuZ3RoO2grKyl7dmFyIGQ9aS5mbG93LmxpbmtzW2hdO2lmKFwiY2xvc2VzdFwiIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGV8fGkubGluay5wb2ludE51bWJlcj09PWQucG9pbnROdW1iZXIpe2kubGluay5wb2ludE51bWJlcj09PWQucG9pbnROdW1iZXImJihjPWgpLGQuZnVsbERhdGE9ZC50cmFjZSxzPWkubGluay50cmFjZS5saW5rO3ZhciBnPW0oZCksdj17dmFsdWVMYWJlbDpuLmZvcm1hdChpLnZhbHVlRm9ybWF0KShkLnZhbHVlKStpLnZhbHVlU3VmZml4fTtsLnB1c2goe3g6Z1swXSx5OmdbMV0sbmFtZTp2LnZhbHVlTGFiZWwsdGV4dDpbZC5sYWJlbHx8XCJcIixfK2Quc291cmNlLmxhYmVsLHcrZC50YXJnZXQubGFiZWwsZC5jb25jZW50cmF0aW9uc2NhbGU/aytuLmZvcm1hdChcIiUwLjJmXCIpKGQuZmxvdy5sYWJlbENvbmNlbnRyYXRpb24pOlwiXCJdLmZpbHRlcih1KS5qb2luKFwiPGJyPlwiKSxjb2xvcjpiKHMsXCJiZ2NvbG9yXCIpfHxvLmFkZE9wYWNpdHkoZC5jb2xvciwxKSxib3JkZXJDb2xvcjpiKHMsXCJib3JkZXJjb2xvclwiKSxmb250RmFtaWx5OmIocyxcImZvbnQuZmFtaWx5XCIpLGZvbnRTaXplOmIocyxcImZvbnQuc2l6ZVwiKSxmb250Q29sb3I6YihzLFwiZm9udC5jb2xvclwiKSxuYW1lTGVuZ3RoOmIocyxcIm5hbWVsZW5ndGhcIiksdGV4dEFsaWduOmIocyxcImFsaWduXCIpLGlkZWFsQWxpZ246bi5ldmVudC54PGdbMF0/XCJyaWdodFwiOlwibGVmdFwiLGhvdmVydGVtcGxhdGU6cy5ob3ZlcnRlbXBsYXRlLGhvdmVydGVtcGxhdGVMYWJlbHM6dixldmVudERhdGE6W2RdfSl9fWEubXVsdGlIb3ZlcnMobCx7Y29udGFpbmVyOnIuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOnIuX3BhcGVyLm5vZGUoKSxnZDp0LGFuY2hvckluZGV4OmN9KS5lYWNoKGZ1bmN0aW9uKCl7aS5saW5rLmNvbmNlbnRyYXRpb25zY2FsZXx8Zih0aGlzLC42NSkscCh0aGlzKX0pfX1mdW5jdGlvbiBtKHQpe3ZhciBlLHI7cmV0dXJuIHQuY2lyY3VsYXI/KGU9KHQuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0SW5uZXJFeHRlbnQrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQpLzIraS5wYXJlbnQudHJhbnNsYXRlWCxyPXQuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQraS5wYXJlbnQudHJhbnNsYXRlWSk6KGU9KHQuc291cmNlLngxK3QudGFyZ2V0LngwKS8yK2kucGFyZW50LnRyYW5zbGF0ZVgscj0odC55MCt0LnkxKS8yK2kucGFyZW50LnRyYW5zbGF0ZVkpLFtlLHJdfX0sdW5ob3ZlcjpmdW5jdGlvbihlLGksbyl7ITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSYmKG4uc2VsZWN0KGUpLmNhbGwoeC5iaW5kKDAsaSxvLCEwKSksXCJza2lwXCIhPT1pLmxpbmsudHJhY2UubGluay5ob3ZlcmluZm8mJihpLmxpbmsuZnVsbERhdGE9aS5saW5rLnRyYWNlLHQuZW1pdChcInBsb3RseV91bmhvdmVyXCIse2V2ZW50Om4uZXZlbnQscG9pbnRzOltpLmxpbmtdfSkpLGEubG9uZVVuaG92ZXIoci5faG92ZXJsYXllci5ub2RlKCkpKX0sc2VsZWN0OmZ1bmN0aW9uKGUscil7dmFyIGk9ci5saW5rO2kub3JpZ2luYWxFdmVudD1uLmV2ZW50LHQuX2hvdmVyZGF0YT1baV0sYS5jbGljayh0LHt0YXJnZXQ6ITB9KX19LG5vZGVFdmVudHM6e2hvdmVyOmZ1bmN0aW9uKGUscixpKXshMSE9PXQuX2Z1bGxMYXlvdXQuaG92ZXJtb2RlJiYobi5zZWxlY3QoZSkuY2FsbCh2LHIsaSksXCJza2lwXCIhPT1yLm5vZGUudHJhY2Uubm9kZS5ob3ZlcmluZm8mJihyLm5vZGUuZnVsbERhdGE9ci5ub2RlLnRyYWNlLHQuZW1pdChcInBsb3RseV9ob3ZlclwiLHtldmVudDpuLmV2ZW50LHBvaW50czpbci5ub2RlXX0pKSl9LGZvbGxvdzpmdW5jdGlvbihlLGkpe2lmKCExIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGUpe3ZhciBvPWkubm9kZS50cmFjZS5ub2RlO2lmKFwibm9uZVwiIT09by5ob3ZlcmluZm8mJlwic2tpcFwiIT09by5ob3ZlcmluZm8pe3ZhciBzPW4uc2VsZWN0KGUpLnNlbGVjdChcIi5cIitsLm5vZGVSZWN0KSxjPXQuX2Z1bGxMYXlvdXQuX3BhcGVyZGl2Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPXMubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQ9aC5sZWZ0LTItYy5sZWZ0LGc9aC5yaWdodCsyLWMubGVmdCx2PWgudG9wK2guaGVpZ2h0LzQtYy50b3AsbT17dmFsdWVMYWJlbDpuLmZvcm1hdChpLnZhbHVlRm9ybWF0KShpLm5vZGUudmFsdWUpK2kudmFsdWVTdWZmaXh9O2kubm9kZS5mdWxsRGF0YT1pLm5vZGUudHJhY2U7dmFyIHk9YS5sb25lSG92ZXIoe3gwOmQseDE6Zyx5OnYsbmFtZTpuLmZvcm1hdChpLnZhbHVlRm9ybWF0KShpLm5vZGUudmFsdWUpK2kudmFsdWVTdWZmaXgsdGV4dDpbaS5ub2RlLmxhYmVsLEEraS5ub2RlLnRhcmdldExpbmtzLmxlbmd0aCxUK2kubm9kZS5zb3VyY2VMaW5rcy5sZW5ndGhdLmZpbHRlcih1KS5qb2luKFwiPGJyPlwiKSxjb2xvcjpiKG8sXCJiZ2NvbG9yXCIpfHxpLnRpbnlDb2xvckh1ZSxib3JkZXJDb2xvcjpiKG8sXCJib3JkZXJjb2xvclwiKSxmb250RmFtaWx5OmIobyxcImZvbnQuZmFtaWx5XCIpLGZvbnRTaXplOmIobyxcImZvbnQuc2l6ZVwiKSxmb250Q29sb3I6YihvLFwiZm9udC5jb2xvclwiKSxuYW1lTGVuZ3RoOmIobyxcIm5hbWVsZW5ndGhcIiksdGV4dEFsaWduOmIobyxcImFsaWduXCIpLGlkZWFsQWxpZ246XCJsZWZ0XCIsaG92ZXJ0ZW1wbGF0ZTpvLmhvdmVydGVtcGxhdGUsaG92ZXJ0ZW1wbGF0ZUxhYmVsczptLGV2ZW50RGF0YTpbaS5ub2RlXX0se2NvbnRhaW5lcjpyLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpyLl9wYXBlci5ub2RlKCksZ2Q6dH0pO2YoeSwuODUpLHAoeSl9fX0sdW5ob3ZlcjpmdW5jdGlvbihlLGksbyl7ITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSYmKG4uc2VsZWN0KGUpLmNhbGwobSxpLG8pLFwic2tpcFwiIT09aS5ub2RlLnRyYWNlLm5vZGUuaG92ZXJpbmZvJiYoaS5ub2RlLmZ1bGxEYXRhPWkubm9kZS50cmFjZSx0LmVtaXQoXCJwbG90bHlfdW5ob3ZlclwiLHtldmVudDpuLmV2ZW50LHBvaW50czpbaS5ub2RlXX0pKSxhLmxvbmVVbmhvdmVyKHIuX2hvdmVybGF5ZXIubm9kZSgpKSl9LHNlbGVjdDpmdW5jdGlvbihlLHIsaSl7dmFyIG89ci5ub2RlO28ub3JpZ2luYWxFdmVudD1uLmV2ZW50LHQuX2hvdmVyZGF0YT1bb10sbi5zZWxlY3QoZSkuY2FsbChtLHIsaSksYS5jbGljayh0LHt0YXJnZXQ6ITB9KX19fSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4vY29uc3RhbnRzXCI6MTA0NSxcIi4vcmVuZGVyXCI6MTA0OSxkMzoxNTV9XSwxMDQ5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vY29uc3RhbnRzXCIpLGk9dChcImQzXCIpLGE9dChcInRpbnljb2xvcjJcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksbD10KFwiQHBsb3RseS9kMy1zYW5rZXlcIiksYz10KFwiZDMtc2Fua2V5LWNpcmN1bGFyXCIpLHU9dChcImQzLWZvcmNlXCIpLGg9dChcIi4uLy4uL2xpYlwiKSxmPXQoXCIuLi8uLi9saWIvZ3VwXCIpLHA9Zi5rZXlGdW4sZD1mLnJlcGVhdCxnPWYudW53cmFwLHY9dChcImQzLWludGVycG9sYXRlXCIpLmludGVycG9sYXRlTnVtYmVyLG09dChcIi4uLy4uL3JlZ2lzdHJ5XCIpO2Z1bmN0aW9uIHkoKXt2YXIgdD0uNTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoZS5saW5rLmNpcmN1bGFyKXJldHVybiByPWUubGluayxuPXIud2lkdGgvMixpPXIuY2lyY3VsYXJQYXRoRGF0YSxcInRvcFwiPT09ci5jaXJjdWxhckxpbmtUeXBlP1wiTSBcIitpLnRhcmdldFgrXCIgXCIrKGkudGFyZ2V0WStuKStcIiBMXCIraS5yaWdodElubmVyRXh0ZW50K1wiIFwiKyhpLnRhcmdldFkrbikrXCJBXCIrKGkucmlnaHRMYXJnZUFyY1JhZGl1cytuKStcIiBcIisoaS5yaWdodFNtYWxsQXJjUmFkaXVzK24pK1wiIDAgMCAxIFwiKyhpLnJpZ2h0RnVsbEV4dGVudC1uKStcIiBcIisoaS50YXJnZXRZLWkucmlnaHRTbWFsbEFyY1JhZGl1cykrXCJMXCIrKGkucmlnaHRGdWxsRXh0ZW50LW4pK1wiIFwiK2kudmVydGljYWxSaWdodElubmVyRXh0ZW50K1wiQVwiKyhpLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrbikrXCIgXCIrKGkucmlnaHRMYXJnZUFyY1JhZGl1cytuKStcIiAwIDAgMSBcIitpLnJpZ2h0SW5uZXJFeHRlbnQrXCIgXCIrKGkudmVydGljYWxGdWxsRXh0ZW50LW4pK1wiTFwiK2kubGVmdElubmVyRXh0ZW50K1wiIFwiKyhpLnZlcnRpY2FsRnVsbEV4dGVudC1uKStcIkFcIisoaS5sZWZ0TGFyZ2VBcmNSYWRpdXMrbikrXCIgXCIrKGkubGVmdExhcmdlQXJjUmFkaXVzK24pK1wiIDAgMCAxIFwiKyhpLmxlZnRGdWxsRXh0ZW50K24pK1wiIFwiK2kudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQrXCJMXCIrKGkubGVmdEZ1bGxFeHRlbnQrbikrXCIgXCIrKGkuc291cmNlWS1pLmxlZnRTbWFsbEFyY1JhZGl1cykrXCJBXCIrKGkubGVmdExhcmdlQXJjUmFkaXVzK24pK1wiIFwiKyhpLmxlZnRTbWFsbEFyY1JhZGl1cytuKStcIiAwIDAgMSBcIitpLmxlZnRJbm5lckV4dGVudCtcIiBcIisoaS5zb3VyY2VZK24pK1wiTFwiK2kuc291cmNlWCtcIiBcIisoaS5zb3VyY2VZK24pK1wiTFwiK2kuc291cmNlWCtcIiBcIisoaS5zb3VyY2VZLW4pK1wiTFwiK2kubGVmdElubmVyRXh0ZW50K1wiIFwiKyhpLnNvdXJjZVktbikrXCJBXCIrKGkubGVmdExhcmdlQXJjUmFkaXVzLW4pK1wiIFwiKyhpLmxlZnRTbWFsbEFyY1JhZGl1cy1uKStcIiAwIDAgMCBcIisoaS5sZWZ0RnVsbEV4dGVudC1uKStcIiBcIisoaS5zb3VyY2VZLWkubGVmdFNtYWxsQXJjUmFkaXVzKStcIkxcIisoaS5sZWZ0RnVsbEV4dGVudC1uKStcIiBcIitpLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50K1wiQVwiKyhpLmxlZnRMYXJnZUFyY1JhZGl1cy1uKStcIiBcIisoaS5sZWZ0TGFyZ2VBcmNSYWRpdXMtbikrXCIgMCAwIDAgXCIraS5sZWZ0SW5uZXJFeHRlbnQrXCIgXCIrKGkudmVydGljYWxGdWxsRXh0ZW50K24pK1wiTFwiK2kucmlnaHRJbm5lckV4dGVudCtcIiBcIisoaS52ZXJ0aWNhbEZ1bGxFeHRlbnQrbikrXCJBXCIrKGkucmlnaHRMYXJnZUFyY1JhZGl1cy1uKStcIiBcIisoaS5yaWdodExhcmdlQXJjUmFkaXVzLW4pK1wiIDAgMCAwIFwiKyhpLnJpZ2h0RnVsbEV4dGVudCtuKStcIiBcIitpLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudCtcIkxcIisoaS5yaWdodEZ1bGxFeHRlbnQrbikrXCIgXCIrKGkudGFyZ2V0WS1pLnJpZ2h0U21hbGxBcmNSYWRpdXMpK1wiQVwiKyhpLnJpZ2h0TGFyZ2VBcmNSYWRpdXMtbikrXCIgXCIrKGkucmlnaHRTbWFsbEFyY1JhZGl1cy1uKStcIiAwIDAgMCBcIitpLnJpZ2h0SW5uZXJFeHRlbnQrXCIgXCIrKGkudGFyZ2V0WS1uKStcIkxcIitpLnRhcmdldFgrXCIgXCIrKGkudGFyZ2V0WS1uKStcIlpcIjpcIk0gXCIraS50YXJnZXRYK1wiIFwiKyhpLnRhcmdldFktbikrXCIgTFwiK2kucmlnaHRJbm5lckV4dGVudCtcIiBcIisoaS50YXJnZXRZLW4pK1wiQVwiKyhpLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrbikrXCIgXCIrKGkucmlnaHRTbWFsbEFyY1JhZGl1cytuKStcIiAwIDAgMCBcIisoaS5yaWdodEZ1bGxFeHRlbnQtbikrXCIgXCIrKGkudGFyZ2V0WStpLnJpZ2h0U21hbGxBcmNSYWRpdXMpK1wiTFwiKyhpLnJpZ2h0RnVsbEV4dGVudC1uKStcIiBcIitpLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudCtcIkFcIisoaS5yaWdodExhcmdlQXJjUmFkaXVzK24pK1wiIFwiKyhpLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrbikrXCIgMCAwIDAgXCIraS5yaWdodElubmVyRXh0ZW50K1wiIFwiKyhpLnZlcnRpY2FsRnVsbEV4dGVudCtuKStcIkxcIitpLmxlZnRJbm5lckV4dGVudCtcIiBcIisoaS52ZXJ0aWNhbEZ1bGxFeHRlbnQrbikrXCJBXCIrKGkubGVmdExhcmdlQXJjUmFkaXVzK24pK1wiIFwiKyhpLmxlZnRMYXJnZUFyY1JhZGl1cytuKStcIiAwIDAgMCBcIisoaS5sZWZ0RnVsbEV4dGVudCtuKStcIiBcIitpLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50K1wiTFwiKyhpLmxlZnRGdWxsRXh0ZW50K24pK1wiIFwiKyhpLnNvdXJjZVkraS5sZWZ0U21hbGxBcmNSYWRpdXMpK1wiQVwiKyhpLmxlZnRMYXJnZUFyY1JhZGl1cytuKStcIiBcIisoaS5sZWZ0U21hbGxBcmNSYWRpdXMrbikrXCIgMCAwIDAgXCIraS5sZWZ0SW5uZXJFeHRlbnQrXCIgXCIrKGkuc291cmNlWS1uKStcIkxcIitpLnNvdXJjZVgrXCIgXCIrKGkuc291cmNlWS1uKStcIkxcIitpLnNvdXJjZVgrXCIgXCIrKGkuc291cmNlWStuKStcIkxcIitpLmxlZnRJbm5lckV4dGVudCtcIiBcIisoaS5zb3VyY2VZK24pK1wiQVwiKyhpLmxlZnRMYXJnZUFyY1JhZGl1cy1uKStcIiBcIisoaS5sZWZ0U21hbGxBcmNSYWRpdXMtbikrXCIgMCAwIDEgXCIrKGkubGVmdEZ1bGxFeHRlbnQtbikrXCIgXCIrKGkuc291cmNlWStpLmxlZnRTbWFsbEFyY1JhZGl1cykrXCJMXCIrKGkubGVmdEZ1bGxFeHRlbnQtbikrXCIgXCIraS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudCtcIkFcIisoaS5sZWZ0TGFyZ2VBcmNSYWRpdXMtbikrXCIgXCIrKGkubGVmdExhcmdlQXJjUmFkaXVzLW4pK1wiIDAgMCAxIFwiK2kubGVmdElubmVyRXh0ZW50K1wiIFwiKyhpLnZlcnRpY2FsRnVsbEV4dGVudC1uKStcIkxcIitpLnJpZ2h0SW5uZXJFeHRlbnQrXCIgXCIrKGkudmVydGljYWxGdWxsRXh0ZW50LW4pK1wiQVwiKyhpLnJpZ2h0TGFyZ2VBcmNSYWRpdXMtbikrXCIgXCIrKGkucmlnaHRMYXJnZUFyY1JhZGl1cy1uKStcIiAwIDAgMSBcIisoaS5yaWdodEZ1bGxFeHRlbnQrbikrXCIgXCIraS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQrXCJMXCIrKGkucmlnaHRGdWxsRXh0ZW50K24pK1wiIFwiKyhpLnRhcmdldFkraS5yaWdodFNtYWxsQXJjUmFkaXVzKStcIkFcIisoaS5yaWdodExhcmdlQXJjUmFkaXVzLW4pK1wiIFwiKyhpLnJpZ2h0U21hbGxBcmNSYWRpdXMtbikrXCIgMCAwIDEgXCIraS5yaWdodElubmVyRXh0ZW50K1wiIFwiKyhpLnRhcmdldFkrbikrXCJMXCIraS50YXJnZXRYK1wiIFwiKyhpLnRhcmdldFkrbikrXCJaXCI7dmFyIHIsbixpLGE9ZS5saW5rLnNvdXJjZS54MSxvPWUubGluay50YXJnZXQueDAscz12KGEsbyksbD1zKHQpLGM9cygxLXQpLHU9ZS5saW5rLnkwLWUubGluay53aWR0aC8yLGg9ZS5saW5rLnkwK2UubGluay53aWR0aC8yLGY9ZS5saW5rLnkxLWUubGluay53aWR0aC8yLHA9ZS5saW5rLnkxK2UubGluay53aWR0aC8yO3JldHVyblwiTVwiK2ErXCIsXCIrdStcIkNcIitsK1wiLFwiK3UrXCIgXCIrYytcIixcIitmK1wiIFwiK28rXCIsXCIrZitcIkxcIitvK1wiLFwiK3ArXCJDXCIrYytcIixcIitwK1wiIFwiK2wrXCIsXCIraCtcIiBcIithK1wiLFwiK2grXCJaXCJ9fWZ1bmN0aW9uIHgodCl7dC5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrdC5ub2RlLngwLnRvRml4ZWQoMykrXCIsIFwiK3Qubm9kZS55MC50b0ZpeGVkKDMpK1wiKVwifSl9ZnVuY3Rpb24gYih0KXt0LmNhbGwoeCl9ZnVuY3Rpb24gXyh0LGUpe3QuY2FsbChiKSxlLmF0dHIoXCJkXCIseSgpKX1mdW5jdGlvbiB3KHQpe3QuYXR0cihcIndpZHRoXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZS54MS10Lm5vZGUueDB9KS5hdHRyKFwiaGVpZ2h0XCIsZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZUhlaWdodH0pfWZ1bmN0aW9uIGsodCl7cmV0dXJuIHQubGluay53aWR0aD4xfHx0LmxpbmtMaW5lV2lkdGg+MH1mdW5jdGlvbiBBKHQpe3JldHVyblwidHJhbnNsYXRlKFwiK3QudHJhbnNsYXRlWCtcIixcIit0LnRyYW5zbGF0ZVkrXCIpXCIrKHQuaG9yaXpvbnRhbD9cIm1hdHJpeCgxIDAgMCAxIDAgMClcIjpcIm1hdHJpeCgwIDEgMSAwIDAgMClcIil9ZnVuY3Rpb24gVCh0KXtyZXR1cm5cInRyYW5zbGF0ZShcIisodC5ob3Jpem9udGFsPzA6dC5sYWJlbFkpK1wiIFwiKyh0Lmhvcml6b250YWw/dC5sYWJlbFk6MCkrXCIpXCJ9ZnVuY3Rpb24gTSh0KXtyZXR1cm4gaS5zdmcubGluZSgpKFtbdC5ob3Jpem9udGFsP3QubGVmdD8tdC5zaXplQWNyb3NzOnQudmlzaWJsZVdpZHRoK24ubm9kZVRleHRPZmZzZXRIb3Jpem9udGFsOm4ubm9kZVRleHRPZmZzZXRIb3Jpem9udGFsLDBdLFt0Lmhvcml6b250YWw/dC5sZWZ0Py1uLm5vZGVUZXh0T2Zmc2V0SG9yaXpvbnRhbDp0LnNpemVBY3Jvc3M6dC52aXNpYmxlSGVpZ2h0LW4ubm9kZVRleHRPZmZzZXRIb3Jpem9udGFsLDBdXSl9ZnVuY3Rpb24gUyh0KXtyZXR1cm4gdC5ob3Jpem9udGFsP1wibWF0cml4KDEgMCAwIDEgMCAwKVwiOlwibWF0cml4KDAgMSAxIDAgMCAwKVwifWZ1bmN0aW9uIEUodCl7cmV0dXJuIHQuaG9yaXpvbnRhbD9cInNjYWxlKDEgMSlcIjpcInNjYWxlKC0xIDEpXCJ9ZnVuY3Rpb24gQyh0KXtyZXR1cm4gdC5kYXJrQmFja2dyb3VuZCYmIXQuaG9yaXpvbnRhbD9cInJnYigyNTUsMjU1LDI1NSlcIjpcInJnYigwLDAsMClcIn1mdW5jdGlvbiBMKHQpe3JldHVybiB0Lmhvcml6b250YWwmJnQubGVmdD9cIjEwMCVcIjpcIjAlXCJ9ZnVuY3Rpb24geih0LGUscil7dC5vbihcIi5iYXNpY1wiLG51bGwpLm9uKFwibW91c2VvdmVyLmJhc2ljXCIsZnVuY3Rpb24odCl7dC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzfHx0LnBhcnRPZkdyb3VwfHwoci5ob3Zlcih0aGlzLHQsZSksdC5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQ9W3RoaXMsdF0pfSkub24oXCJtb3VzZW1vdmUuYmFzaWNcIixmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3N8fHQucGFydE9mR3JvdXB8fChyLmZvbGxvdyh0aGlzLHQpLHQuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkPVt0aGlzLHRdKX0pLm9uKFwibW91c2VvdXQuYmFzaWNcIixmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3N8fHQucGFydE9mR3JvdXB8fChyLnVuaG92ZXIodGhpcyx0LGUpLHQuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkPSExKX0pLm9uKFwiY2xpY2suYmFzaWNcIixmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZCYmKHIudW5ob3Zlcih0aGlzLHQsZSksdC5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQ9ITEpLHQuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzc3x8dC5wYXJ0T2ZHcm91cHx8ci5zZWxlY3QodGhpcyx0LGUpfSl9ZnVuY3Rpb24gTyh0LGUscixhKXt2YXIgbz1pLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oZnVuY3Rpb24odCl7cmV0dXJue3g6dC5ub2RlLngwK3QudmlzaWJsZVdpZHRoLzIseTp0Lm5vZGUueTArdC52aXNpYmxlSGVpZ2h0LzJ9fSkub24oXCJkcmFnc3RhcnRcIixmdW5jdGlvbihpKXtpZihcImZpeGVkXCIhPT1pLmFycmFuZ2VtZW50JiYoaC5lbnN1cmVTaW5nbGUoYS5fZnVsbExheW91dC5faW5mb2xheWVyLFwiZ1wiLFwiZHJhZ2NvdmVyXCIsZnVuY3Rpb24odCl7YS5fZnVsbExheW91dC5fZHJhZ0NvdmVyPXR9KSxoLnJhaXNlVG9Ub3AodGhpcyksaS5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzPWkubm9kZSxEKGkubm9kZSksaS5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQmJihyLm5vZGVFdmVudHMudW5ob3Zlci5hcHBseSgwLGkuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkKSxpLmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD0hMSksXCJzbmFwXCI9PT1pLmFycmFuZ2VtZW50KSl7dmFyIG89aS50cmFjZUlkK1wifFwiK2kua2V5O2kuZm9yY2VMYXlvdXRzW29dP2kuZm9yY2VMYXlvdXRzW29dLmFscGhhKDEpOmZ1bmN0aW9uKHQsZSxyLGkpeyFmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLnk9KHRbZV0ueTArdFtlXS55MSkvMix0W2VdLng9KHRbZV0ueDArdFtlXS54MSkvMn0oci5ncmFwaC5ub2Rlcyk7dmFyIGE9ci5ncmFwaC5ub2Rlcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQub3JpZ2luYWxYPT09ci5ub2RlLm9yaWdpbmFsWH0pLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hdC5wYXJ0T2ZHcm91cH0pO3IuZm9yY2VMYXlvdXRzW2VdPXUuZm9yY2VTaW11bGF0aW9uKGEpLmFscGhhRGVjYXkoMCkuZm9yY2UoXCJjb2xsaWRlXCIsdS5mb3JjZUNvbGxpZGUoKS5yYWRpdXMoZnVuY3Rpb24odCl7cmV0dXJuIHQuZHkvMityLm5vZGVQYWQvMn0pLnN0cmVuZ3RoKDEpLml0ZXJhdGlvbnMobi5mb3JjZUl0ZXJhdGlvbnMpKS5mb3JjZShcImNvbnN0cmFpblwiLGZ1bmN0aW9uKHQsZSxyLGkpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD0wLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIG89clthXTtvPT09aS5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzPyhvLng9by5sYXN0RHJhZ2dlZFgsby55PW8ubGFzdERyYWdnZWRZKTooby52eD0oby5vcmlnaW5hbFgtby54KS9uLmZvcmNlVGlja3NQZXJGcmFtZSxvLnk9TWF0aC5taW4oaS5zaXplLW8uZHkvMixNYXRoLm1heChvLmR5LzIsby55KSkpLHQ9TWF0aC5tYXgodCxNYXRoLmFicyhvLnZ4KSxNYXRoLmFicyhvLnZ5KSl9IWkuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzcyYmdDwuMSYmaS5mb3JjZUxheW91dHNbZV0uYWxwaGEoKT4wJiZpLmZvcmNlTGF5b3V0c1tlXS5hbHBoYSgwKX19KDAsZSxhLHIpKS5zdG9wKCl9KDAsbyxpKSxmdW5jdGlvbih0LGUscixpLGEpe3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gbygpe3ZhciBzO2ZvcihzPTA7czxuLmZvcmNlVGlja3NQZXJGcmFtZTtzKyspci5mb3JjZUxheW91dHNbaV0udGljaygpO3ZhciBsPXIuZ3JhcGgubm9kZXM7aWYoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS55MD10W2VdLnktdFtlXS5keS8yLHRbZV0ueTE9dFtlXS55MCt0W2VdLmR5LHRbZV0ueDA9dFtlXS54LXRbZV0uZHgvMix0W2VdLngxPXRbZV0ueDArdFtlXS5keH0obCksci5zYW5rZXkudXBkYXRlKHIuZ3JhcGgpLF8odC5maWx0ZXIoUChyKSksZSksci5mb3JjZUxheW91dHNbaV0uYWxwaGEoKT4wKXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobyk7ZWxzZXt2YXIgYz1yLm5vZGUub3JpZ2luYWxYO3Iubm9kZS54MD1jLXIudmlzaWJsZVdpZHRoLzIsci5ub2RlLngxPWMrci52aXNpYmxlV2lkdGgvMixJKHIsYSl9fSl9KHQsZSxpLG8sYSl9fSkub24oXCJkcmFnXCIsZnVuY3Rpb24ocil7aWYoXCJmaXhlZFwiIT09ci5hcnJhbmdlbWVudCl7dmFyIG49aS5ldmVudC54LGE9aS5ldmVudC55O1wic25hcFwiPT09ci5hcnJhbmdlbWVudD8oci5ub2RlLngwPW4tci52aXNpYmxlV2lkdGgvMixyLm5vZGUueDE9bityLnZpc2libGVXaWR0aC8yLHIubm9kZS55MD1hLXIudmlzaWJsZUhlaWdodC8yLHIubm9kZS55MT1hK3IudmlzaWJsZUhlaWdodC8yKTooXCJmcmVlZm9ybVwiPT09ci5hcnJhbmdlbWVudCYmKHIubm9kZS54MD1uLXIudmlzaWJsZVdpZHRoLzIsci5ub2RlLngxPW4rci52aXNpYmxlV2lkdGgvMiksYT1NYXRoLm1heCgwLE1hdGgubWluKHIuc2l6ZS1yLnZpc2libGVIZWlnaHQvMixhKSksci5ub2RlLnkwPWEtci52aXNpYmxlSGVpZ2h0LzIsci5ub2RlLnkxPWErci52aXNpYmxlSGVpZ2h0LzIpLEQoci5ub2RlKSxcInNuYXBcIiE9PXIuYXJyYW5nZW1lbnQmJihyLnNhbmtleS51cGRhdGUoci5ncmFwaCksXyh0LmZpbHRlcihQKHIpKSxlKSl9fSkub24oXCJkcmFnZW5kXCIsZnVuY3Rpb24odCl7aWYoXCJmaXhlZFwiIT09dC5hcnJhbmdlbWVudCl7dC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzPSExO2Zvcih2YXIgZT0wO2U8dC5ub2RlLmNoaWxkcmVuTm9kZXMubGVuZ3RoO2UrKyl0Lm5vZGUuY2hpbGRyZW5Ob2Rlc1tlXS54PXQubm9kZS54LHQubm9kZS5jaGlsZHJlbk5vZGVzW2VdLnk9dC5ub2RlLnk7XCJzbmFwXCIhPT10LmFycmFuZ2VtZW50JiZJKHQsYSl9fSk7dC5vbihcIi5kcmFnXCIsbnVsbCkuY2FsbChvKX1mdW5jdGlvbiBJKHQsZSl7Zm9yKHZhciByPVtdLG49W10saT0wO2k8dC5ncmFwaC5ub2Rlcy5sZW5ndGg7aSsrKXt2YXIgYT0odC5ncmFwaC5ub2Rlc1tpXS54MCt0LmdyYXBoLm5vZGVzW2ldLngxKS8yLG89KHQuZ3JhcGgubm9kZXNbaV0ueTArdC5ncmFwaC5ub2Rlc1tpXS55MSkvMjtyLnB1c2goYS90LmZpZ3VyZS53aWR0aCksbi5wdXNoKG8vdC5maWd1cmUuaGVpZ2h0KX1tLmNhbGwoXCJfZ3VpUmVzdHlsZVwiLGUse1wibm9kZS54XCI6W3JdLFwibm9kZS55XCI6W25dfSx0LnRyYWNlLmluZGV4KS50aGVuKGZ1bmN0aW9uKCl7ZS5fZnVsbExheW91dC5fZHJhZ0NvdmVyJiZlLl9mdWxsTGF5b3V0Ll9kcmFnQ292ZXIucmVtb3ZlKCl9KX1mdW5jdGlvbiBEKHQpe3QubGFzdERyYWdnZWRYPXQueDArdC5keC8yLHQubGFzdERyYWdnZWRZPXQueTArdC5keS8yfWZ1bmN0aW9uIFAodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLm5vZGUub3JpZ2luYWxYPT09dC5ub2RlLm9yaWdpbmFsWH19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUsZil7dmFyIHY9ITE7aC5lbnN1cmVTaW5nbGUodC5fZnVsbExheW91dC5faW5mb2xheWVyLFwiZ1wiLFwiZmlyc3QtcmVuZGVyXCIsZnVuY3Rpb24oKXt2PSEwfSk7dmFyIG09dC5fZnVsbExheW91dC5fZHJhZ0NvdmVyLGI9ci5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGcodCkudHJhY2UudmlzaWJsZX0pLm1hcChmdW5jdGlvbih0LGUscil7dmFyIGksbz1nKGUpLHM9by50cmFjZSx1PXMuZG9tYWluLGY9XCJoXCI9PT1zLm9yaWVudGF0aW9uLHA9cy5ub2RlLnBhZCxkPXMubm9kZS50aGlja25lc3Msdj10LndpZHRoKih1LnhbMV0tdS54WzBdKSxtPXQuaGVpZ2h0Kih1LnlbMV0tdS55WzBdKSx5PW8uX25vZGVzLHg9by5fbGlua3MsYj1vLmNpcmN1bGFyOyhpPWI/Yy5zYW5rZXlDaXJjdWxhcigpLmNpcmN1bGFyTGlua0dhcCgwKTpsLnNhbmtleSgpKS5pdGVyYXRpb25zKG4uc2Fua2V5SXRlcmF0aW9ucykuc2l6ZShmP1t2LG1dOlttLHZdKS5ub2RlV2lkdGgoZCkubm9kZVBhZGRpbmcocCkubm9kZUlkKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBvaW50TnVtYmVyfSkubm9kZXMoeSkubGlua3MoeCk7dmFyIF8sdyxrLEE9aSgpO2Zvcih2YXIgVCBpbiBpLm5vZGVQYWRkaW5nKCk8cCYmaC53YXJuKFwibm9kZS5wYWQgd2FzIHJlZHVjZWQgdG8gXCIsaS5ub2RlUGFkZGluZygpLFwiIHRvIGZpdCB3aXRoaW4gdGhlIGZpZ3VyZS5cIiksby5fZ3JvdXBMb29rdXApe3ZhciBNLFM9cGFyc2VJbnQoby5fZ3JvdXBMb29rdXBbVF0pO2ZvcihfPTA7XzxBLm5vZGVzLmxlbmd0aDtfKyspaWYoQS5ub2Rlc1tfXS5wb2ludE51bWJlcj09PVMpe009QS5ub2Rlc1tfXTticmVha31pZihNKXt2YXIgRT17cG9pbnROdW1iZXI6cGFyc2VJbnQoVCkseDA6TS54MCx4MTpNLngxLHkwOk0ueTAseTE6TS55MSxwYXJ0T2ZHcm91cDohMCxzb3VyY2VMaW5rczpbXSx0YXJnZXRMaW5rczpbXX07QS5ub2Rlcy51bnNoaWZ0KEUpLE0uY2hpbGRyZW5Ob2Rlcy51bnNoaWZ0KEUpfX1pZihmdW5jdGlvbigpe2ZvcihfPTA7XzxBLm5vZGVzLmxlbmd0aDtfKyspe3ZhciB0LGUscj1BLm5vZGVzW19dLG49e307Zm9yKHc9MDt3PHIudGFyZ2V0TGlua3MubGVuZ3RoO3crKyl0PShlPXIudGFyZ2V0TGlua3Nbd10pLnNvdXJjZS5wb2ludE51bWJlcitcIjpcIitlLnRhcmdldC5wb2ludE51bWJlcixuLmhhc093blByb3BlcnR5KHQpfHwoblt0XT1bXSksblt0XS5wdXNoKGUpO3ZhciBpPU9iamVjdC5rZXlzKG4pO2Zvcih3PTA7dzxpLmxlbmd0aDt3Kyspe3ZhciBvPW5bdD1pW3ddXSxzPTAsbD17fTtmb3Ioaz0wO2s8by5sZW5ndGg7aysrKWxbKGU9b1trXSkubGFiZWxdfHwobFtlLmxhYmVsXT0wKSxsW2UubGFiZWxdKz1lLnZhbHVlLHMrPWUudmFsdWU7Zm9yKGs9MDtrPG8ubGVuZ3RoO2srKykoZT1vW2tdKS5mbG93PXt2YWx1ZTpzLGxhYmVsQ29uY2VudHJhdGlvbjpsW2UubGFiZWxdL3MsY29uY2VudHJhdGlvbjplLnZhbHVlL3MsbGlua3M6b30sZS5jb25jZW50cmF0aW9uc2NhbGUmJihlLmNvbG9yPWEoZS5jb25jZW50cmF0aW9uc2NhbGUoZS5mbG93LmxhYmVsQ29uY2VudHJhdGlvbikpKX12YXIgYz0wO2Zvcih3PTA7dzxyLnNvdXJjZUxpbmtzLmxlbmd0aDt3KyspYys9ci5zb3VyY2VMaW5rc1t3XS52YWx1ZTtmb3Iodz0wO3c8ci5zb3VyY2VMaW5rcy5sZW5ndGg7dysrKShlPXIuc291cmNlTGlua3Nbd10pLmNvbmNlbnRyYXRpb25PdXQ9ZS52YWx1ZS9jO3ZhciB1PTA7Zm9yKHc9MDt3PHIudGFyZ2V0TGlua3MubGVuZ3RoO3crKyl1Kz1yLnRhcmdldExpbmtzW3ddLnZhbHVlO2Zvcih3PTA7dzxyLnRhcmdldExpbmtzLmxlbmd0aDt3KyspKGU9ci50YXJnZXRMaW5rc1t3XSkuY29uY2VucmF0aW9uSW49ZS52YWx1ZS91fX0oKSxzLm5vZGUueC5sZW5ndGgmJnMubm9kZS55Lmxlbmd0aCl7Zm9yKF89MDtfPE1hdGgubWluKHMubm9kZS54Lmxlbmd0aCxzLm5vZGUueS5sZW5ndGgsQS5ub2Rlcy5sZW5ndGgpO18rKylpZihzLm5vZGUueFtfXSYmcy5ub2RlLnlbX10pe3ZhciBDPVtzLm5vZGUueFtfXSp2LHMubm9kZS55W19dKm1dO0Eubm9kZXNbX10ueDA9Q1swXS1kLzIsQS5ub2Rlc1tfXS54MT1DWzBdK2QvMjt2YXIgTD1BLm5vZGVzW19dLnkxLUEubm9kZXNbX10ueTA7QS5ub2Rlc1tfXS55MD1DWzFdLUwvMixBLm5vZGVzW19dLnkxPUNbMV0rTC8yfVwic25hcFwiPT09cy5hcnJhbmdlbWVudCYmZnVuY3Rpb24odCl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPTAsYT10Lmxlbmd0aDtmb3IodC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueTAtZS55MH0pLG49MDtuPGE7KytuKShlPXRbbl0pLnkwPj1pfHwocj1pLWUueTApPjFlLTYmJihlLnkwKz1yLGUueTErPXIpLGk9ZS55MStwfSl9KGZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybnt4MDp0LngwLGluZGV4OmV9fSkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LngwLWUueDB9KSxpPVtdLGE9LTEsbz0tMS8wO2ZvcihfPTA7XzxuLmxlbmd0aDtfKyspe3ZhciBzPXRbbltfXS5pbmRleF07cy54MD5vK2QmJihhKz0xLGU9cy54MCksbz1zLngwLGlbYV18fChpW2FdPVtdKSxpW2FdLnB1c2gocykscj1lLXMueDAscy54MCs9cixzLngxKz1yfXJldHVybiBpfSh5PUEubm9kZXMpKSxpLnVwZGF0ZShBKX1yZXR1cm57Y2lyY3VsYXI6YixrZXk6cix0cmFjZTpzLGd1aWQ6aC5yYW5kc3RyKCksaG9yaXpvbnRhbDpmLHdpZHRoOnYsaGVpZ2h0Om0sbm9kZVBhZDpzLm5vZGUucGFkLG5vZGVMaW5lQ29sb3I6cy5ub2RlLmxpbmUuY29sb3Isbm9kZUxpbmVXaWR0aDpzLm5vZGUubGluZS53aWR0aCxsaW5rTGluZUNvbG9yOnMubGluay5saW5lLmNvbG9yLGxpbmtMaW5lV2lkdGg6cy5saW5rLmxpbmUud2lkdGgsdmFsdWVGb3JtYXQ6cy52YWx1ZWZvcm1hdCx2YWx1ZVN1ZmZpeDpzLnZhbHVlc3VmZml4LHRleHRGb250OnMudGV4dGZvbnQsdHJhbnNsYXRlWDp1LnhbMF0qdC53aWR0aCt0Lm1hcmdpbi5sLHRyYW5zbGF0ZVk6dC5oZWlnaHQtdS55WzFdKnQuaGVpZ2h0K3QubWFyZ2luLnQsZHJhZ1BhcmFsbGVsOmY/bTp2LGRyYWdQZXJwZW5kaWN1bGFyOmY/djptLGFycmFuZ2VtZW50OnMuYXJyYW5nZW1lbnQsc2Fua2V5OmksZ3JhcGg6QSxmb3JjZUxheW91dHM6e30saW50ZXJhY3Rpb25TdGF0ZTp7ZHJhZ0luUHJvZ3Jlc3M6ITEsaG92ZXJlZDohMX19fS5iaW5kKG51bGwsdSkpLF89ZS5zZWxlY3RBbGwoXCIuXCIrbi5jbi5zYW5rZXkpLmRhdGEoYixwKTtfLmV4aXQoKS5yZW1vdmUoKSxfLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKG4uY24uc2Fua2V5LCEwKS5zdHlsZShcImJveC1zaXppbmdcIixcImNvbnRlbnQtYm94XCIpLnN0eWxlKFwicG9zaXRpb25cIixcImFic29sdXRlXCIpLnN0eWxlKFwibGVmdFwiLDApLnN0eWxlKFwic2hhcGUtcmVuZGVyaW5nXCIsXCJnZW9tZXRyaWNQcmVjaXNpb25cIikuc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwiYXV0b1wiKS5hdHRyKFwidHJhbnNmb3JtXCIsQSksXy5lYWNoKGZ1bmN0aW9uKGUscil7dC5fZnVsbERhdGFbcl0uX3NhbmtleT1lO3ZhciBuPVwiYmdzYW5rZXktXCIrZS50cmFjZS51aWQrXCItXCIrcjtoLmVuc3VyZVNpbmdsZSh0Ll9mdWxsTGF5b3V0Ll9kcmFnZ2VycyxcInJlY3RcIixuKSx0Ll9mdWxsRGF0YVtyXS5fYmdSZWN0PWkuc2VsZWN0KFwiLlwiK24pLHQuX2Z1bGxEYXRhW3JdLl9iZ1JlY3Quc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpLmF0dHIoXCJ3aWR0aFwiLGUud2lkdGgpLmF0dHIoXCJoZWlnaHRcIixlLmhlaWdodCkuYXR0cihcInhcIixlLnRyYW5zbGF0ZVgpLmF0dHIoXCJ5XCIsZS50cmFuc2xhdGVZKS5jbGFzc2VkKFwiYmdzYW5rZXlcIiwhMCkuc3R5bGUoe2ZpbGw6XCJ0cmFuc3BhcmVudFwiLFwic3Ryb2tlLXdpZHRoXCI6MH0pfSksXy50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLmF0dHIoXCJ0cmFuc2Zvcm1cIixBKTt2YXIgST1fLnNlbGVjdEFsbChcIi5cIituLmNuLnNhbmtleUxpbmtzKS5kYXRhKGQscCk7SS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChuLmNuLnNhbmtleUxpbmtzLCEwKS5zdHlsZShcImZpbGxcIixcIm5vbmVcIik7dmFyIEQ9SS5zZWxlY3RBbGwoXCIuXCIrbi5jbi5zYW5rZXlMaW5rKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdyYXBoLmxpbmtzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pLm1hcChmdW5jdGlvbih0LGUscil7dmFyIG49YShlLmNvbG9yKSxpPWUuc291cmNlLmxhYmVsK1wifFwiK2UudGFyZ2V0LmxhYmVsK1wiX19cIityO3JldHVybiBlLnRyYWNlPXQudHJhY2UsZS5jdXJ2ZU51bWJlcj10LnRyYWNlLmluZGV4LHtjaXJjdWxhcjp0LmNpcmN1bGFyLGtleTppLHRyYWNlSWQ6dC5rZXkscG9pbnROdW1iZXI6ZS5wb2ludE51bWJlcixsaW5rOmUsdGlueUNvbG9ySHVlOm8udGlueVJHQihuKSx0aW55Q29sb3JBbHBoYTpuLmdldEFscGhhKCksbGlua1BhdGg6eSxsaW5rTGluZUNvbG9yOnQubGlua0xpbmVDb2xvcixsaW5rTGluZVdpZHRoOnQubGlua0xpbmVXaWR0aCx2YWx1ZUZvcm1hdDp0LnZhbHVlRm9ybWF0LHZhbHVlU3VmZml4OnQudmFsdWVTdWZmaXgsc2Fua2V5OnQuc2Fua2V5LHBhcmVudDp0LGludGVyYWN0aW9uU3RhdGU6dC5pbnRlcmFjdGlvblN0YXRlLGZsb3c6ZS5mbG93fX0uYmluZChudWxsLHQpKX0scCk7RC5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChuLmNuLnNhbmtleUxpbmssITApLmNhbGwoeixfLGYubGlua0V2ZW50cyksRC5zdHlsZShcInN0cm9rZVwiLGZ1bmN0aW9uKHQpe3JldHVybiBrKHQpP28udGlueVJHQihhKHQubGlua0xpbmVDb2xvcikpOnQudGlueUNvbG9ySHVlfSkuc3R5bGUoXCJzdHJva2Utb3BhY2l0eVwiLGZ1bmN0aW9uKHQpe3JldHVybiBrKHQpP28ub3BhY2l0eSh0LmxpbmtMaW5lQ29sb3IpOnQudGlueUNvbG9yQWxwaGF9KS5zdHlsZShcImZpbGxcIixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JIdWV9KS5zdHlsZShcImZpbGwtb3BhY2l0eVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbnlDb2xvckFscGhhfSkuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixmdW5jdGlvbih0KXtyZXR1cm4gayh0KT90LmxpbmtMaW5lV2lkdGg6MX0pLmF0dHIoXCJkXCIseSgpKSxELnN0eWxlKFwib3BhY2l0eVwiLGZ1bmN0aW9uKCl7cmV0dXJuIHQuX2NvbnRleHQuc3RhdGljUGxvdHx8dnx8bT8xOjB9KS50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLnN0eWxlKFwib3BhY2l0eVwiLDEpLEQuZXhpdCgpLnRyYW5zaXRpb24oKS5lYXNlKG4uZWFzZSkuZHVyYXRpb24obi5kdXJhdGlvbikuc3R5bGUoXCJvcGFjaXR5XCIsMCkucmVtb3ZlKCk7dmFyIFA9Xy5zZWxlY3RBbGwoXCIuXCIrbi5jbi5zYW5rZXlOb2RlU2V0KS5kYXRhKGQscCk7UC5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChuLmNuLnNhbmtleU5vZGVTZXQsITApLFAuc3R5bGUoXCJjdXJzb3JcIixmdW5jdGlvbih0KXtzd2l0Y2godC5hcnJhbmdlbWVudCl7Y2FzZVwiZml4ZWRcIjpyZXR1cm5cImRlZmF1bHRcIjtjYXNlXCJwZXJwZW5kaWN1bGFyXCI6cmV0dXJuXCJucy1yZXNpemVcIjtkZWZhdWx0OnJldHVyblwibW92ZVwifX0pO3ZhciBSPVAuc2VsZWN0QWxsKFwiLlwiK24uY24uc2Fua2V5Tm9kZSkuZGF0YShmdW5jdGlvbih0KXt2YXIgZT10LmdyYXBoLm5vZGVzO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZSxyPVtdO2ZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5vcmlnaW5hbFg9KHRbZV0ueDArdFtlXS54MSkvMix0W2VdLm9yaWdpbmFsWT0odFtlXS55MCt0W2VdLnkxKS8yLC0xPT09ci5pbmRleE9mKHRbZV0ub3JpZ2luYWxYKSYmci5wdXNoKHRbZV0ub3JpZ2luYWxYKTtmb3Ioci5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pLGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLm9yaWdpbmFsTGF5ZXJJbmRleD1yLmluZGV4T2YodFtlXS5vcmlnaW5hbFgpLHRbZV0ub3JpZ2luYWxMYXllcj10W2VdLm9yaWdpbmFsTGF5ZXJJbmRleC8oci5sZW5ndGgtMSl9KGUpLGUubWFwKGZ1bmN0aW9uKHQsZSl7dmFyIHI9YShlLmNvbG9yKSxpPW4ubm9kZVBhZEFjcm9zcyxzPXQubm9kZVBhZC8yO2UuZHg9ZS54MS1lLngwLGUuZHk9ZS55MS1lLnkwO3ZhciBsPWUuZHgsYz1NYXRoLm1heCguNSxlLmR5KSx1PVwibm9kZV9cIitlLnBvaW50TnVtYmVyO3JldHVybiBlLmdyb3VwJiYodT1oLnJhbmRzdHIoKSksZS50cmFjZT10LnRyYWNlLGUuY3VydmVOdW1iZXI9dC50cmFjZS5pbmRleCx7aW5kZXg6ZS5wb2ludE51bWJlcixrZXk6dSxwYXJ0T2ZHcm91cDplLnBhcnRPZkdyb3VwfHwhMSxncm91cDplLmdyb3VwLHRyYWNlSWQ6dC5rZXksdHJhY2U6dC50cmFjZSxub2RlOmUsbm9kZVBhZDp0Lm5vZGVQYWQsbm9kZUxpbmVDb2xvcjp0Lm5vZGVMaW5lQ29sb3Isbm9kZUxpbmVXaWR0aDp0Lm5vZGVMaW5lV2lkdGgsdGV4dEZvbnQ6dC50ZXh0Rm9udCxzaXplOnQuaG9yaXpvbnRhbD90LmhlaWdodDp0LndpZHRoLHZpc2libGVXaWR0aDpNYXRoLmNlaWwobCksdmlzaWJsZUhlaWdodDpjLHpvbmVYOi1pLHpvbmVZOi1zLHpvbmVXaWR0aDpsKzIqaSx6b25lSGVpZ2h0OmMrMipzLGxhYmVsWTp0Lmhvcml6b250YWw/ZS5keS8yKzE6ZS5keC8yKzEsbGVmdDoxPT09ZS5vcmlnaW5hbExheWVyLHNpemVBY3Jvc3M6dC53aWR0aCxmb3JjZUxheW91dHM6dC5mb3JjZUxheW91dHMsaG9yaXpvbnRhbDp0Lmhvcml6b250YWwsZGFya0JhY2tncm91bmQ6ci5nZXRCcmlnaHRuZXNzKCk8PTEyOCx0aW55Q29sb3JIdWU6by50aW55UkdCKHIpLHRpbnlDb2xvckFscGhhOnIuZ2V0QWxwaGEoKSx2YWx1ZUZvcm1hdDp0LnZhbHVlRm9ybWF0LHZhbHVlU3VmZml4OnQudmFsdWVTdWZmaXgsc2Fua2V5OnQuc2Fua2V5LGdyYXBoOnQuZ3JhcGgsYXJyYW5nZW1lbnQ6dC5hcnJhbmdlbWVudCx1bmlxdWVOb2RlTGFiZWxQYXRoSWQ6W3QuZ3VpZCx0LmtleSx1XS5qb2luKFwiX1wiKSxpbnRlcmFjdGlvblN0YXRlOnQuaW50ZXJhY3Rpb25TdGF0ZSxmaWd1cmU6dH19LmJpbmQobnVsbCx0KSl9LHApO1IuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQobi5jbi5zYW5rZXlOb2RlLCEwKS5jYWxsKHgpLnN0eWxlKFwib3BhY2l0eVwiLGZ1bmN0aW9uKGUpe3JldHVybiF0Ll9jb250ZXh0LnN0YXRpY1Bsb3QmJiF2fHxlLnBhcnRPZkdyb3VwPzA6MX0pLFIuY2FsbCh6LF8sZi5ub2RlRXZlbnRzKS5jYWxsKE8sRCxmLHQpLFIudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5jYWxsKHgpLnN0eWxlKFwib3BhY2l0eVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnBhcnRPZkdyb3VwPzA6MX0pLFIuZXhpdCgpLnRyYW5zaXRpb24oKS5lYXNlKG4uZWFzZSkuZHVyYXRpb24obi5kdXJhdGlvbikuc3R5bGUoXCJvcGFjaXR5XCIsMCkucmVtb3ZlKCk7dmFyIEY9Ui5zZWxlY3RBbGwoXCIuXCIrbi5jbi5ub2RlUmVjdCkuZGF0YShkKTtGLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKS5jbGFzc2VkKG4uY24ubm9kZVJlY3QsITApLmNhbGwodyksRi5zdHlsZShcInN0cm9rZS13aWR0aFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVMaW5lV2lkdGh9KS5zdHlsZShcInN0cm9rZVwiLGZ1bmN0aW9uKHQpe3JldHVybiBvLnRpbnlSR0IoYSh0Lm5vZGVMaW5lQ29sb3IpKX0pLnN0eWxlKFwic3Ryb2tlLW9wYWNpdHlcIixmdW5jdGlvbih0KXtyZXR1cm4gby5vcGFjaXR5KHQubm9kZUxpbmVDb2xvcil9KS5zdHlsZShcImZpbGxcIixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JIdWV9KS5zdHlsZShcImZpbGwtb3BhY2l0eVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbnlDb2xvckFscGhhfSksRi50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLmNhbGwodyk7dmFyIEI9Ui5zZWxlY3RBbGwoXCIuXCIrbi5jbi5ub2RlQ2FwdHVyZSkuZGF0YShkKTtCLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKS5jbGFzc2VkKG4uY24ubm9kZUNhcHR1cmUsITApLnN0eWxlKFwiZmlsbC1vcGFjaXR5XCIsMCksQi5hdHRyKFwieFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnpvbmVYfSkuYXR0cihcInlcIixmdW5jdGlvbih0KXtyZXR1cm4gdC56b25lWX0pLmF0dHIoXCJ3aWR0aFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnpvbmVXaWR0aH0pLmF0dHIoXCJoZWlnaHRcIixmdW5jdGlvbih0KXtyZXR1cm4gdC56b25lSGVpZ2h0fSk7dmFyIE49Ui5zZWxlY3RBbGwoXCIuXCIrbi5jbi5ub2RlQ2VudGVyZWQpLmRhdGEoZCk7Ti5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChuLmNuLm5vZGVDZW50ZXJlZCwhMCkuYXR0cihcInRyYW5zZm9ybVwiLFQpLE4udHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5hdHRyKFwidHJhbnNmb3JtXCIsVCk7dmFyIGo9Ti5zZWxlY3RBbGwoXCIuXCIrbi5jbi5ub2RlTGFiZWxHdWlkZSkuZGF0YShkKTtqLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5jbGFzc2VkKG4uY24ubm9kZUxhYmVsR3VpZGUsITApLmF0dHIoXCJpZFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnVuaXF1ZU5vZGVMYWJlbFBhdGhJZH0pLmF0dHIoXCJkXCIsTSkuYXR0cihcInRyYW5zZm9ybVwiLFMpLGoudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5hdHRyKFwiZFwiLE0pLmF0dHIoXCJ0cmFuc2Zvcm1cIixTKTt2YXIgVj1OLnNlbGVjdEFsbChcIi5cIituLmNuLm5vZGVMYWJlbCkuZGF0YShkKTtWLmVudGVyKCkuYXBwZW5kKFwidGV4dFwiKS5jbGFzc2VkKG4uY24ubm9kZUxhYmVsLCEwKS5hdHRyKFwidHJhbnNmb3JtXCIsRSkuc3R5bGUoXCJ1c2VyLXNlbGVjdFwiLFwibm9uZVwiKS5zdHlsZShcImN1cnNvclwiLFwiZGVmYXVsdFwiKS5zdHlsZShcImZpbGxcIixcImJsYWNrXCIpLFYuc3R5bGUoXCJ0ZXh0LXNoYWRvd1wiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmhvcml6b250YWw/XCItMXB4IDFweCAxcHggI2ZmZiwgMXB4IDFweCAxcHggI2ZmZiwgMXB4IC0xcHggMXB4ICNmZmYsIC0xcHggLTFweCAxcHggI2ZmZlwiOlwibm9uZVwifSkuZWFjaChmdW5jdGlvbih0KXtzLmZvbnQoVix0LnRleHRGb250KX0pLFYudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5hdHRyKFwidHJhbnNmb3JtXCIsRSk7dmFyIFU9Vi5zZWxlY3RBbGwoXCIuXCIrbi5jbi5ub2RlTGFiZWxUZXh0UGF0aCkuZGF0YShkKTtVLmVudGVyKCkuYXBwZW5kKFwidGV4dFBhdGhcIikuY2xhc3NlZChuLmNuLm5vZGVMYWJlbFRleHRQYXRoLCEwKS5hdHRyKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsXCJtaWRkbGVcIikuYXR0cihcInhsaW5rOmhyZWZcIixmdW5jdGlvbih0KXtyZXR1cm5cIiNcIit0LnVuaXF1ZU5vZGVMYWJlbFBhdGhJZH0pLmF0dHIoXCJzdGFydE9mZnNldFwiLEwpLnN0eWxlKFwiZmlsbFwiLEMpLFUudGV4dChmdW5jdGlvbih0KXtyZXR1cm4gdC5ob3Jpem9udGFsfHx0Lm5vZGUuZHk+NT90Lm5vZGUubGFiZWw6XCJcIn0pLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmhvcml6b250YWwmJnQubGVmdD9cImVuZFwiOlwic3RhcnRcIn0pLFUudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5hdHRyKFwic3RhcnRPZmZzZXRcIixMKS5zdHlsZShcImZpbGxcIixDKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvZ3VwXCI6Njk5LFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2NvbnN0YW50c1wiOjEwNDUsXCJAcGxvdGx5L2QzLXNhbmtleVwiOjQ5LGQzOjE1NSxcImQzLWZvcmNlXCI6MTQ3LFwiZDMtaW50ZXJwb2xhdGVcIjoxNDksXCJkMy1zYW5rZXktY2lyY3VsYXJcIjoxNTIsdGlueWNvbG9yMjo1MjJ9XSwxMDUwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49dC5jZFswXS50cmFjZSxpPW4uX3NhbmtleS5ncmFwaC5ub2RlcyxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV07aWYoIW8ucGFydE9mR3JvdXApe3ZhciBzPVsoby54MCtvLngxKS8yLChvLnkwK28ueTEpLzJdO1widlwiPT09bi5vcmllbnRhdGlvbiYmcy5yZXZlcnNlKCksZSYmZS5jb250YWlucyhzLCExLGEsdCkmJnIucHVzaCh7cG9pbnROdW1iZXI6by5wb2ludE51bWJlcn0pfX1yZXR1cm4gcn19LHt9XSwxMDUxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl0W3JdLmk9cjtuLm1lcmdlQXJyYXkoZS50ZXh0LHQsXCJ0eFwiKSxuLm1lcmdlQXJyYXkoZS5ob3ZlcnRleHQsdCxcImh0eFwiKSxuLm1lcmdlQXJyYXkoZS5jdXN0b21kYXRhLHQsXCJkYXRhXCIpLG4ubWVyZ2VBcnJheShlLnRleHRwb3NpdGlvbix0LFwidHBcIiksZS50ZXh0Zm9udCYmKG4ubWVyZ2VBcnJheShlLnRleHRmb250LnNpemUsdCxcInRzXCIpLG4ubWVyZ2VBcnJheShlLnRleHRmb250LmNvbG9yLHQsXCJ0Y1wiKSxuLm1lcmdlQXJyYXkoZS50ZXh0Zm9udC5mYW1pbHksdCxcInRmXCIpKTt2YXIgaT1lLm1hcmtlcjtpZihpKXtuLm1lcmdlQXJyYXkoaS5zaXplLHQsXCJtc1wiKSxuLm1lcmdlQXJyYXkoaS5vcGFjaXR5LHQsXCJtb1wiKSxuLm1lcmdlQXJyYXkoaS5zeW1ib2wsdCxcIm14XCIpLG4ubWVyZ2VBcnJheShpLmNvbG9yLHQsXCJtY1wiKTt2YXIgYT1pLmxpbmU7aS5saW5lJiYobi5tZXJnZUFycmF5KGEuY29sb3IsdCxcIm1sY1wiKSxuLm1lcmdlQXJyYXkoYS53aWR0aCx0LFwibWx3XCIpKTt2YXIgbz1pLmdyYWRpZW50O28mJlwibm9uZVwiIT09by50eXBlJiYobi5tZXJnZUFycmF5KG8udHlwZSx0LFwibWd0XCIpLG4ubWVyZ2VBcnJheShvLmNvbG9yLHQsXCJtZ2NcIikpfX19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDEwNTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlc1wiKS5kYXNoLGw9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxjPXQoXCIuL2NvbnN0YW50c1wiKSx1PXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXt4Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wiLGFuaW06ITB9LHgwOnt2YWxUeXBlOlwiYW55XCIsZGZsdDowLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wiLGFuaW06ITB9LGR4Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxLGVkaXRUeXBlOlwiY2FsY1wiLGFuaW06ITB9LHk6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCIsYW5pbTohMH0seTA6e3ZhbFR5cGU6XCJhbnlcIixkZmx0OjAsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCIsYW5pbTohMH0sZHk6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjEsZWRpdFR5cGU6XCJjYWxjXCIsYW5pbTohMH0sc3RhY2tncm91cDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcImNhbGNcIn0sb3JpZW50YXRpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInZcIixcImhcIl0sZWRpdFR5cGU6XCJjYWxjXCJ9LGdyb3Vwbm9ybTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiXCIsXCJmcmFjdGlvblwiLFwicGVyY2VudFwiXSxkZmx0OlwiXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHN0YWNrZ2Fwczp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiaW5mZXIgemVyb1wiLFwiaW50ZXJwb2xhdGVcIl0sZGZsdDpcImluZmVyIHplcm9cIixlZGl0VHlwZTpcImNhbGNcIn0sdGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixhcnJheU9rOiEwLGVkaXRUeXBlOlwiY2FsY1wifSxob3ZlcnRleHQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsYXJyYXlPazohMCxlZGl0VHlwZTpcInN0eWxlXCJ9LG1vZGU6e3ZhbFR5cGU6XCJmbGFnbGlzdFwiLGZsYWdzOltcImxpbmVzXCIsXCJtYXJrZXJzXCIsXCJ0ZXh0XCJdLGV4dHJhczpbXCJub25lXCJdLGVkaXRUeXBlOlwiY2FsY1wifSxob3Zlcm9uOnt2YWxUeXBlOlwiZmxhZ2xpc3RcIixmbGFnczpbXCJwb2ludHNcIixcImZpbGxzXCJdLGVkaXRUeXBlOlwic3R5bGVcIn0saG92ZXJ0ZW1wbGF0ZTpuKHt9LHtrZXlzOmMuZXZlbnREYXRhS2V5c30pLGxpbmU6e2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcInN0eWxlXCIsYW5pbTohMH0sd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjIsZWRpdFR5cGU6XCJzdHlsZVwiLGFuaW06ITB9LHNoYXBlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJsaW5lYXJcIixcInNwbGluZVwiLFwiaHZcIixcInZoXCIsXCJodmhcIixcInZodlwiXSxkZmx0OlwibGluZWFyXCIsZWRpdFR5cGU6XCJwbG90XCJ9LHNtb290aGluZzp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLjMsZGZsdDoxLGVkaXRUeXBlOlwicGxvdFwifSxkYXNoOnUoe30scyx7ZWRpdFR5cGU6XCJzdHlsZVwifSksc2ltcGxpZnk6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcInBsb3RcIn0sZWRpdFR5cGU6XCJwbG90XCJ9LGNvbm5lY3RnYXBzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEsZWRpdFR5cGU6XCJjYWxjXCJ9LGNsaXBvbmF4aXM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcInBsb3RcIn0sZmlsbDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibm9uZVwiLFwidG96ZXJveVwiLFwidG96ZXJveFwiLFwidG9uZXh0eVwiLFwidG9uZXh0eFwiLFwidG9zZWxmXCIsXCJ0b25leHRcIl0sZWRpdFR5cGU6XCJjYWxjXCJ9LGZpbGxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJzdHlsZVwiLGFuaW06ITB9LG1hcmtlcjp1KHtzeW1ib2w6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOmwuc3ltYm9sTGlzdCxkZmx0OlwiY2lyY2xlXCIsYXJyYXlPazohMCxlZGl0VHlwZTpcInN0eWxlXCJ9LG9wYWNpdHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxhcnJheU9rOiEwLGVkaXRUeXBlOlwic3R5bGVcIixhbmltOiEwfSxzaXplOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDo2LGFycmF5T2s6ITAsZWRpdFR5cGU6XCJjYWxjXCIsYW5pbTohMH0sbWF4ZGlzcGxheWVkOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDowLGVkaXRUeXBlOlwicGxvdFwifSxzaXplcmVmOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxLGVkaXRUeXBlOlwiY2FsY1wifSxzaXplbWluOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifSxzaXplbW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiZGlhbWV0ZXJcIixcImFyZWFcIl0sZGZsdDpcImRpYW1ldGVyXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGNvbG9yYmFyOmEsbGluZTp1KHt3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJzdHlsZVwiLGFuaW06ITB9LGVkaXRUeXBlOlwiY2FsY1wifSxpKFwibWFya2VyLmxpbmVcIix7YW5pbTohMH0pKSxncmFkaWVudDp7dHlwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wicmFkaWFsXCIsXCJob3Jpem9udGFsXCIsXCJ2ZXJ0aWNhbFwiLFwibm9uZVwiXSxhcnJheU9rOiEwLGRmbHQ6XCJub25lXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixhcnJheU9rOiEwLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LGkoXCJtYXJrZXJcIix7YW5pbTohMH0pKSxzZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZWRpdFR5cGU6XCJzdHlsZVwifSxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJzdHlsZVwifSxzaXplOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZWRpdFR5cGU6XCJzdHlsZVwifSxlZGl0VHlwZTpcInN0eWxlXCJ9LHRleHRmb250Ontjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJzdHlsZVwifSxlZGl0VHlwZTpcInN0eWxlXCJ9LGVkaXRUeXBlOlwic3R5bGVcIn0sdW5zZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZWRpdFR5cGU6XCJzdHlsZVwifSxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJzdHlsZVwifSxzaXplOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZWRpdFR5cGU6XCJzdHlsZVwifSxlZGl0VHlwZTpcInN0eWxlXCJ9LHRleHRmb250Ontjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJzdHlsZVwifSxlZGl0VHlwZTpcInN0eWxlXCJ9LGVkaXRUeXBlOlwic3R5bGVcIn0sdGV4dHBvc2l0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ0b3AgbGVmdFwiLFwidG9wIGNlbnRlclwiLFwidG9wIHJpZ2h0XCIsXCJtaWRkbGUgbGVmdFwiLFwibWlkZGxlIGNlbnRlclwiLFwibWlkZGxlIHJpZ2h0XCIsXCJib3R0b20gbGVmdFwiLFwiYm90dG9tIGNlbnRlclwiLFwiYm90dG9tIHJpZ2h0XCJdLGRmbHQ6XCJtaWRkbGUgY2VudGVyXCIsYXJyYXlPazohMCxlZGl0VHlwZTpcImNhbGNcIn0sdGV4dGZvbnQ6byh7ZWRpdFR5cGU6XCJjYWxjXCIsY29sb3JFZGl0VHlwZTpcInN0eWxlXCIsYXJyYXlPazohMH0pLHI6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHQ6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9fX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCI6NTc5LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIjo1ODUsXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlc1wiOjU5OCxcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiOjc3NSxcIi4vY29uc3RhbnRzXCI6MTA1Nn1dLDEwNTM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLG89dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNLHM9dChcIi4vc3VidHlwZXNcIiksbD10KFwiLi9jb2xvcnNjYWxlX2NhbGNcIiksYz10KFwiLi9hcnJheXNfdG9fY2FsY2RhdGFcIiksdT10KFwiLi9jYWxjX3NlbGVjdGlvblwiKTtmdW5jdGlvbiBoKHQsZSxyLG4saSxvLGwpe3ZhciBjPWUuX2xlbmd0aCx1PXQuX2Z1bGxMYXlvdXQsaD1yLl9pZCxmPW4uX2lkLHA9dS5fZmlyc3RTY2F0dGVyW2QoZSldPT09ZS51aWQsdj0oZyhlLHUscixuKXx8e30pLm9yaWVudGF0aW9uLG09ZS5maWxsO3IuX21pbkR0aWNrPTAsbi5fbWluRHRpY2s9MDt2YXIgeT17cGFkZGVkOiEwfSx4PXtwYWRkZWQ6ITB9O2wmJih5LnBwYWQ9eC5wcGFkPWwpO3ZhciBiPWM8Mnx8aVswXSE9PWlbYy0xXXx8b1swXSE9PW9bYy0xXTtiJiYoXCJ0b3plcm94XCI9PT1tfHxcInRvbmV4dHhcIj09PW0mJihwfHxcImhcIj09PXYpKT95LnRvemVybz0hMDooZS5lcnJvcl95fHx7fSkudmlzaWJsZXx8XCJ0b25leHR5XCIhPT1tJiZcInRvemVyb3lcIiE9PW0mJihzLmhhc01hcmtlcnMoZSl8fHMuaGFzVGV4dChlKSl8fCh5LnBhZGRlZD0hMSx5LnBwYWQ9MCksYiYmKFwidG96ZXJveVwiPT09bXx8XCJ0b25leHR5XCI9PT1tJiYocHx8XCJ2XCI9PT12KSk/eC50b3plcm89ITA6XCJ0b25leHR4XCIhPT1tJiZcInRvemVyb3hcIiE9PW18fCh4LnBhZGRlZD0hMSksaCYmKGUuX2V4dHJlbWVzW2hdPWEuZmluZEV4dHJlbWVzKHIsaSx5KSksZiYmKGUuX2V4dHJlbWVzW2ZdPWEuZmluZEV4dHJlbWVzKG4sbyx4KSl9ZnVuY3Rpb24gZih0LGUpe2lmKHMuaGFzTWFya2Vycyh0KSl7dmFyIHIsbj10Lm1hcmtlcixvPTEuNioodC5tYXJrZXIuc2l6ZXJlZnx8MSk7aWYocj1cImFyZWFcIj09PXQubWFya2VyLnNpemVtb2RlP2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heChNYXRoLnNxcnQoKHR8fDApL28pLDMpfTpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoKHR8fDApL28sMyl9LGkuaXNBcnJheU9yVHlwZWRBcnJheShuLnNpemUpKXt2YXIgbD17dHlwZTpcImxpbmVhclwifTthLnNldENvbnZlcnQobCk7Zm9yKHZhciBjPWwubWFrZUNhbGNkYXRhKHQubWFya2VyLFwic2l6ZVwiKSx1PW5ldyBBcnJheShlKSxoPTA7aDxlO2grKyl1W2hdPXIoY1toXSk7cmV0dXJuIHV9cmV0dXJuIHIobi5zaXplKX19ZnVuY3Rpb24gcCh0LGUpe3ZhciByPWQoZSksbj10Ll9maXJzdFNjYXR0ZXI7bltyXXx8KG5bcl09ZS51aWQpfWZ1bmN0aW9uIGQodCl7dmFyIGU9dC5zdGFja2dyb3VwO3JldHVybiB0LnhheGlzK3QueWF4aXMrdC50eXBlKyhlP1wiLVwiK2U6XCJcIil9ZnVuY3Rpb24gZyh0LGUscixuKXt2YXIgaT10LnN0YWNrZ3JvdXA7aWYoaSl7dmFyIGE9ZS5fc2NhdHRlclN0YWNrT3B0c1tyLl9pZCtuLl9pZF1baV0sbz1cInZcIj09PWEub3JpZW50YXRpb24/bjpyO3JldHVyblwibGluZWFyXCI9PT1vLnR5cGV8fFwibG9nXCI9PT1vLnR5cGU/YTp2b2lkIDB9fWUuZXhwb3J0cz17Y2FsYzpmdW5jdGlvbih0LGUpe3ZhciByLHMsZCx2LG0seSx4PXQuX2Z1bGxMYXlvdXQsYj1hLmdldEZyb21JZCh0LGUueGF4aXN8fFwieFwiKSxfPWEuZ2V0RnJvbUlkKHQsZS55YXhpc3x8XCJ5XCIpLHc9Yi5tYWtlQ2FsY2RhdGEoZSxcInhcIiksaz1fLm1ha2VDYWxjZGF0YShlLFwieVwiKSxBPWUuX2xlbmd0aCxUPW5ldyBBcnJheShBKSxNPWUuaWRzLFM9ZyhlLHgsYixfKSxFPSExO3AoeCxlKTt2YXIgQyxMPVwieFwiLHo9XCJ5XCI7Zm9yKFM/KGkucHVzaFVuaXF1ZShTLnRyYWNlSW5kaWNlcyxlLl9leHBhbmRlZEluZGV4KSwocj1cInZcIj09PVMub3JpZW50YXRpb24pPyh6PVwic1wiLEM9XCJ4XCIpOihMPVwic1wiLEM9XCJ5XCIpLG09XCJpbnRlcnBvbGF0ZVwiPT09Uy5zdGFja2dhcHMpOmgodCxlLGIsXyx3LGssZihlLEEpKSxzPTA7czxBO3MrKyl7dmFyIE89VFtzXT17fSxJPW4od1tzXSksRD1uKGtbc10pO0kmJkQ/KE9bTF09d1tzXSxPW3pdPWtbc10pOlMmJihyP0k6RCk/KE9bQ109cj93W3NdOmtbc10sTy5nYXA9ITAsbT8oTy5zPW8sRT0hMCk6Ty5zPTApOk9bTF09T1t6XT1vLE0mJihPLmlkPVN0cmluZyhNW3NdKSl9aWYoYyhULGUpLGwodCxlKSx1KFQsZSksUyl7Zm9yKHM9MDtzPFQubGVuZ3RoOylUW3NdW0NdPT09bz9ULnNwbGljZShzLDEpOnMrKztpZihpLnNvcnQoVCxmdW5jdGlvbih0LGUpe3JldHVybiB0W0NdLWVbQ118fHQuaS1lLml9KSxFKXtmb3Iocz0wO3M8VC5sZW5ndGgtMSYmVFtzXS5nYXA7KXMrKztmb3IoKHk9VFtzXS5zKXx8KHk9VFtzXS5zPTApLGQ9MDtkPHM7ZCsrKVRbZF0ucz15O2Zvcih2PVQubGVuZ3RoLTE7dj5zJiZUW3ZdLmdhcDspdi0tO2Zvcih5PVRbdl0ucyxkPVQubGVuZ3RoLTE7ZD52O2QtLSlUW2RdLnM9eTtmb3IoO3M8djspaWYoVFsrK3NdLmdhcCl7Zm9yKGQ9cysxO1RbZF0uZ2FwOylkKys7Zm9yKHZhciBQPVRbcy0xXVtDXSxSPVRbcy0xXS5zLEY9KFRbZF0ucy1SKS8oVFtkXVtDXS1QKTtzPGQ7KVRbc10ucz1SKyhUW3NdW0NdLVApKkYscysrfX19cmV0dXJuIFR9LGNhbGNNYXJrZXJTaXplOmYsY2FsY0F4aXNFeHBhbnNpb246aCxzZXRGaXJzdFNjYXR0ZXI6cCxnZXRTdGFja09wdHM6Z319LHtcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4vYXJyYXlzX3RvX2NhbGNkYXRhXCI6MTA1MSxcIi4vY2FsY19zZWxlY3Rpb25cIjoxMDU0LFwiLi9jb2xvcnNjYWxlX2NhbGNcIjoxMDU1LFwiLi9zdWJ0eXBlc1wiOjEwNzYsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDEwNTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe24uaXNBcnJheU9yVHlwZWRBcnJheShlLnNlbGVjdGVkcG9pbnRzKSYmbi50YWdTZWxlY3RlZCh0LGUpfX0se1wiLi4vLi4vbGliXCI6NzAxfV0sMTA1NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVyc1wiKS5oYXNDb2xvcnNjYWxlLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCIpLGE9dChcIi4vc3VidHlwZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7YS5oYXNMaW5lcyhlKSYmbihlLFwibGluZVwiKSYmaSh0LGUse3ZhbHM6ZS5saW5lLmNvbG9yLGNvbnRhaW5lclN0cjpcImxpbmVcIixjTGV0dGVyOlwiY1wifSksYS5oYXNNYXJrZXJzKGUpJiYobihlLFwibWFya2VyXCIpJiZpKHQsZSx7dmFsczplLm1hcmtlci5jb2xvcixjb250YWluZXJTdHI6XCJtYXJrZXJcIixjTGV0dGVyOlwiY1wifSksbihlLFwibWFya2VyLmxpbmVcIikmJmkodCxlLHt2YWxzOmUubWFya2VyLmxpbmUuY29sb3IsY29udGFpbmVyU3RyOlwibWFya2VyLmxpbmVcIixjTGV0dGVyOlwiY1wifSkpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIjo1ODYsXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVyc1wiOjU4OSxcIi4vc3VidHlwZXNcIjoxMDc2fV0sMTA1NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17UFRTX0xJTkVTT05MWToyMCxtaW5Ub2xlcmFuY2U6LjIsdG9sZXJhbmNlR3Jvd3RoOjEwLG1heFNjcmVlbnNBd2F5OjIwLGV2ZW50RGF0YUtleXM6W119fSx7fV0sMTA1NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2NhbGNcIik7ZnVuY3Rpb24gaSh0LGUscixuLGksYSxvKXtpW25dPSEwO3ZhciBzPXtpOm51bGwsZ2FwOiEwLHM6MH07aWYoc1tvXT1yLHQuc3BsaWNlKGUsMCxzKSxlJiZyPT09dFtlLTFdW29dKXt2YXIgbD10W2UtMV07cy5zPWwucyxzLmk9bC5pLHMuZ2FwPWwuZ2FwfWVsc2UgYSYmKHMucz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10W2UtMV0sYT10W2UrMV07cmV0dXJuIGE/aT9pLnMrKGEucy1pLnMpKihyLWlbbl0pLyhhW25dLWlbbl0pOmEuczppLnN9KHQsZSxyLG8pKTtlfHwodFswXS50PXRbMV0udCx0WzBdLnRyYWNlPXRbMV0udHJhY2UsZGVsZXRlIHRbMV0udCxkZWxldGUgdFsxXS50cmFjZSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS54YXhpcyxhPWUueWF4aXMsbz1yLl9pZCthLl9pZCxzPXQuX2Z1bGxMYXlvdXQuX3NjYXR0ZXJTdGFja09wdHNbb107aWYocyl7dmFyIGwsYyx1LGgsZixwLGQsZyx2LG0seSx4LGIsXyx3LGs9dC5jYWxjZGF0YTtmb3IodmFyIEEgaW4gcyl7dmFyIFQ9KG09c1tBXSkudHJhY2VJbmRpY2VzO2lmKFQubGVuZ3RoKXtmb3IoeT1cImludGVycG9sYXRlXCI9PT1tLnN0YWNrZ2Fwcyx4PW0uZ3JvdXBub3JtLFwidlwiPT09bS5vcmllbnRhdGlvbj8oYj1cInhcIixfPVwieVwiKTooYj1cInlcIixfPVwieFwiKSx3PW5ldyBBcnJheShULmxlbmd0aCksbD0wO2w8dy5sZW5ndGg7bCsrKXdbbF09ITE7cD1rW1RbMF1dO3ZhciBNPW5ldyBBcnJheShwLmxlbmd0aCk7Zm9yKGw9MDtsPHAubGVuZ3RoO2wrKylNW2xdPXBbbF1bYl07Zm9yKGw9MTtsPFQubGVuZ3RoO2wrKyl7Zm9yKGY9a1tUW2xdXSxjPXU9MDtjPGYubGVuZ3RoO2MrKyl7Zm9yKGQ9ZltjXVtiXTtkPk1bdV0mJnU8TS5sZW5ndGg7dSsrKWkoZixjLE1bdV0sbCx3LHksYiksYysrO2lmKGQhPT1NW3VdKXtmb3IoaD0wO2g8bDtoKyspaShrW1RbaF1dLHUsZCxoLHcseSxiKTtNLnNwbGljZSh1LDAsZCl9dSsrfWZvcig7dTxNLmxlbmd0aDt1KyspaShmLGMsTVt1XSxsLHcseSxiKSxjKyt9dmFyIFM9TS5sZW5ndGg7Zm9yKGM9MDtjPHAubGVuZ3RoO2MrKyl7Zm9yKGc9cFtjXVtfXT1wW2NdLnMsbD0xO2w8VC5sZW5ndGg7bCsrKShmPWtbVFtsXV0pWzBdLnRyYWNlLl9yYXdMZW5ndGg9ZlswXS50cmFjZS5fbGVuZ3RoLGZbMF0udHJhY2UuX2xlbmd0aD1TLGcrPWZbY10ucyxmW2NdW19dPWc7aWYoeClmb3Iodj0oXCJmcmFjdGlvblwiPT09eD9nOmcvMTAwKXx8MSxsPTA7bDxULmxlbmd0aDtsKyspe3ZhciBFPWtbVFtsXV1bY107RVtfXS89dixFLnNOb3JtPUUucy92fX1mb3IobD0wO2w8VC5sZW5ndGg7bCsrKXt2YXIgQz0oZj1rW1RbbF1dKVswXS50cmFjZSxMPW4uY2FsY01hcmtlclNpemUoQyxDLl9yYXdMZW5ndGgpLHo9QXJyYXkuaXNBcnJheShMKTtpZihMJiZ3W2xdfHx6KXt2YXIgTz1MO2ZvcihMPW5ldyBBcnJheShTKSxjPTA7YzxTO2MrKylMW2NdPWZbY10uZ2FwPzA6ej9PW2ZbY10uaV06T312YXIgST1uZXcgQXJyYXkoUyksRD1uZXcgQXJyYXkoUyk7Zm9yKGM9MDtjPFM7YysrKUlbY109ZltjXS54LERbY109ZltjXS55O24uY2FsY0F4aXNFeHBhbnNpb24odCxDLHIsYSxJLEQsTCksZlswXS50Lm9yaWVudGF0aW9uPW0ub3JpZW50YXRpb259fX19fX0se1wiLi9jYWxjXCI6MTA1M31dLDEwNTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRbZV07aWYoXCJzY2F0dGVyXCI9PT1yLnR5cGUpe3ZhciBuPXIuZmlsbDtpZihcIm5vbmVcIiE9PW4mJlwidG9zZWxmXCIhPT1uJiYoci5vcGFjaXR5PXZvaWQgMCxcInRvbmV4dHlcIj09PW58fFwidG9uZXh0eFwiPT09bikpZm9yKHZhciBpPWUtMTtpPj0wO2ktLSl7dmFyIGE9dFtpXTtpZihcInNjYXR0ZXJcIj09PWEudHlwZSYmYS54YXhpcz09PXIueGF4aXMmJmEueWF4aXM9PT1yLnlheGlzKXthLm9wYWNpdHk9dm9pZCAwO2JyZWFrfX19fX19LHt9XSwxMDU5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxhPXQoXCIuL2F0dHJpYnV0ZXNcIiksbz10KFwiLi9jb25zdGFudHNcIikscz10KFwiLi9zdWJ0eXBlc1wiKSxsPXQoXCIuL3h5X2RlZmF1bHRzXCIpLGM9dChcIi4vc3RhY2tfZGVmYXVsdHNcIiksdT10KFwiLi9tYXJrZXJfZGVmYXVsdHNcIiksaD10KFwiLi9saW5lX2RlZmF1bHRzXCIpLGY9dChcIi4vbGluZV9zaGFwZV9kZWZhdWx0c1wiKSxwPXQoXCIuL3RleHRfZGVmYXVsdHNcIiksZD10KFwiLi9maWxsY29sb3JfZGVmYXVsdHNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGcpe2Z1bmN0aW9uIHYocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgbT1sKHQsZSxnLHYpO2lmKG18fChlLnZpc2libGU9ITEpLGUudmlzaWJsZSl7dmFyIHk9Yyh0LGUsZyx2KSx4PSF5JiZtPG8uUFRTX0xJTkVTT05MWT9cImxpbmVzK21hcmtlcnNcIjpcImxpbmVzXCI7dihcInRleHRcIiksdihcImhvdmVydGV4dFwiKSx2KFwibW9kZVwiLHgpLHMuaGFzTGluZXMoZSkmJihoKHQsZSxyLGcsdiksZih0LGUsdiksdihcImNvbm5lY3RnYXBzXCIpLHYoXCJsaW5lLnNpbXBsaWZ5XCIpKSxzLmhhc01hcmtlcnMoZSkmJnUodCxlLHIsZyx2LHtncmFkaWVudDohMH0pLHMuaGFzVGV4dChlKSYmcCh0LGUsZyx2KTt2YXIgYj1bXTsocy5oYXNNYXJrZXJzKGUpfHxzLmhhc1RleHQoZSkpJiYodihcImNsaXBvbmF4aXNcIiksdihcIm1hcmtlci5tYXhkaXNwbGF5ZWRcIiksYi5wdXNoKFwicG9pbnRzXCIpKSx2KFwiZmlsbFwiLHk/eS5maWxsRGZsdDpcIm5vbmVcIiksXCJub25lXCIhPT1lLmZpbGwmJihkKHQsZSxyLHYpLHMuaGFzTGluZXMoZSl8fGYodCxlLHYpKTt2YXIgXz0oZS5saW5lfHx7fSkuY29sb3Isdz0oZS5tYXJrZXJ8fHt9KS5jb2xvcjtcInRvbmV4dFwiIT09ZS5maWxsJiZcInRvc2VsZlwiIT09ZS5maWxsfHxiLnB1c2goXCJmaWxsc1wiKSx2KFwiaG92ZXJvblwiLGIuam9pbihcIitcIil8fFwicG9pbnRzXCIpLFwiZmlsbHNcIiE9PWUuaG92ZXJvbiYmdihcImhvdmVydGVtcGxhdGVcIik7dmFyIGs9aS5nZXRDb21wb25lbnRNZXRob2QoXCJlcnJvcmJhcnNcIixcInN1cHBseURlZmF1bHRzXCIpO2sodCxlLF98fHd8fHIse2F4aXM6XCJ5XCJ9KSxrKHQsZSxffHx3fHxyLHtheGlzOlwieFwiLGluaGVyaXQ6XCJ5XCJ9KSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSx2KX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vYXR0cmlidXRlc1wiOjEwNTIsXCIuL2NvbnN0YW50c1wiOjEwNTYsXCIuL2ZpbGxjb2xvcl9kZWZhdWx0c1wiOjEwNjEsXCIuL2xpbmVfZGVmYXVsdHNcIjoxMDY1LFwiLi9saW5lX3NoYXBlX2RlZmF1bHRzXCI6MTA2NyxcIi4vbWFya2VyX2RlZmF1bHRzXCI6MTA3MSxcIi4vc3RhY2tfZGVmYXVsdHNcIjoxMDc0LFwiLi9zdWJ0eXBlc1wiOjEwNzYsXCIuL3RleHRfZGVmYXVsdHNcIjoxMDc3LFwiLi94eV9kZWZhdWx0c1wiOjEwNzh9XSwxMDYwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKTtmdW5jdGlvbiBpKHQpe3JldHVybiB0fHwwPT09dH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPUFycmF5LmlzQXJyYXkocik/ZnVuY3Rpb24odCl7ci5wdXNoKHQpfTpmdW5jdGlvbih0KXtyLnRleHQ9dH0sbz1uLmV4dHJhY3RPcHRpb24odCxlLFwiaHR4XCIsXCJob3ZlcnRleHRcIik7aWYoaShvKSlyZXR1cm4gYShvKTt2YXIgcz1uLmV4dHJhY3RPcHRpb24odCxlLFwidHhcIixcInRleHRcIik7cmV0dXJuIGkocyk/YShzKTp2b2lkIDB9fSx7XCIuLi8uLi9saWJcIjo3MDF9XSwxMDYxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksaT10KFwiLi4vLi4vbGliXCIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPSExO2lmKGUubWFya2VyKXt2YXIgcz1lLm1hcmtlci5jb2xvcixsPShlLm1hcmtlci5saW5lfHx7fSkuY29sb3I7cyYmIWkocyk/bz1zOmwmJiFpKGwpJiYobz1sKX1hKFwiZmlsbGNvbG9yXCIsbi5hZGRPcGFjaXR5KChlLmxpbmV8fHt9KS5jb2xvcnx8b3x8ciwuNSkpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2xpYlwiOjcwMX1dLDEwNjI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxpPXQoXCIuL3N1YnR5cGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGE7aWYoXCJsaW5lc1wiPT09dC5tb2RlKXJldHVybihyPXQubGluZS5jb2xvcikmJm4ub3BhY2l0eShyKT9yOnQuZmlsbGNvbG9yO2lmKFwibm9uZVwiPT09dC5tb2RlKXJldHVybiB0LmZpbGw/dC5maWxsY29sb3I6XCJcIjt2YXIgbz1lLm1jY3x8KHQubWFya2VyfHx7fSkuY29sb3Iscz1lLm1sY2N8fCgodC5tYXJrZXJ8fHt9KS5saW5lfHx7fSkuY29sb3I7cmV0dXJuKGE9byYmbi5vcGFjaXR5KG8pP286cyYmbi5vcGFjaXR5KHMpJiYoZS5tbHd8fCgodC5tYXJrZXJ8fHt9KS5saW5lfHx7fSkud2lkdGgpP3M6XCJcIik/bi5vcGFjaXR5KGEpPC4zP24uYWRkT3BhY2l0eShhLC4zKTphOihyPSh0LmxpbmV8fHt9KS5jb2xvcikmJm4ub3BhY2l0eShyKSYmaS5oYXNMaW5lcyh0KSYmdC5saW5lLndpZHRoP3I6dC5maWxsY29sb3J9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi9zdWJ0eXBlc1wiOjEwNzZ9XSwxMDYzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4XCIpLGE9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLG89dChcIi4vZ2V0X3RyYWNlX2NvbG9yXCIpLHM9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksbD10KFwiLi9maWxsX2hvdmVyX3RleHRcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe3ZhciB1PXQuY2QsaD11WzBdLnRyYWNlLGY9dC54YSxwPXQueWEsZD1mLmMycChlKSxnPXAuYzJwKHIpLHY9W2QsZ10sbT1oLmhvdmVyb258fFwiXCIseT0tMSE9PWgubW9kZS5pbmRleE9mKFwibWFya2Vyc1wiKT8zOi41O2lmKC0xIT09bS5pbmRleE9mKFwicG9pbnRzXCIpKXt2YXIgeD1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCh5LHQubXJjfHwwKSxyPWYuYzJwKHQueCktZCxuPXAuYzJwKHQueSktZztyZXR1cm4gTWF0aC5tYXgoTWF0aC5zcXJ0KHIqcituKm4pLWUsMS15L2UpfSxiPWkuZ2V0RGlzdGFuY2VGdW5jdGlvbihjLGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDMsdC5tcmN8fDApLHI9MS0xL2Usbj1NYXRoLmFicyhmLmMycCh0LngpLWQpO3JldHVybiBuPGU/cipuL2U6bi1lK3J9LGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDMsdC5tcmN8fDApLHI9MS0xL2Usbj1NYXRoLmFicyhwLmMycCh0LnkpLWcpO3JldHVybiBuPGU/cipuL2U6bi1lK3J9LHgpO2lmKGkuZ2V0Q2xvc2VzdCh1LGIsdCksITEhPT10LmluZGV4KXt2YXIgXz11W3QuaW5kZXhdLHc9Zi5jMnAoXy54LCEwKSxrPXAuYzJwKF8ueSwhMCksQT1fLm1yY3x8MTt0LmluZGV4PV8uaTt2YXIgVD11WzBdLnQub3JpZW50YXRpb24sTT1UJiYoXy5zTm9ybXx8Xy5zKSxTPVwiaFwiPT09VD9NOl8ueCxFPVwidlwiPT09VD9NOl8ueTtyZXR1cm4gbi5leHRlbmRGbGF0KHQse2NvbG9yOm8oaCxfKSx4MDp3LUEseDE6dytBLHhMYWJlbFZhbDpTLHkwOmstQSx5MTprK0EseUxhYmVsVmFsOkUsc3Bpa2VEaXN0YW5jZTp4KF8pLGhvdmVydGVtcGxhdGU6aC5ob3ZlcnRlbXBsYXRlfSksbChfLGgsdCksYS5nZXRDb21wb25lbnRNZXRob2QoXCJlcnJvcmJhcnNcIixcImhvdmVySW5mb1wiKShfLGgsdCksW3RdfX1pZigtMSE9PW0uaW5kZXhPZihcImZpbGxzXCIpJiZoLl9wb2x5Z29ucyl7dmFyIEMsTCx6LE8sSSxELFAsUixGLEI9aC5fcG9seWdvbnMsTj1bXSxqPSExLFY9MS8wLFU9LTEvMCxxPTEvMCxIPS0xLzA7Zm9yKEM9MDtDPEIubGVuZ3RoO0MrKykoej1CW0NdKS5jb250YWlucyh2KSYmKGo9IWosTi5wdXNoKHopLHE9TWF0aC5taW4ocSx6LnltaW4pLEg9TWF0aC5tYXgoSCx6LnltYXgpKTtpZihqKXt2YXIgRz0oKHE9TWF0aC5tYXgocSwwKSkrKEg9TWF0aC5taW4oSCxwLl9sZW5ndGgpKSkvMjtmb3IoQz0wO0M8Ti5sZW5ndGg7QysrKWZvcihPPU5bQ10ucHRzLEw9MTtMPE8ubGVuZ3RoO0wrKykoUj1PW0wtMV1bMV0pPkchPShGPU9bTF1bMV0pPj1HJiYoRD1PW0wtMV1bMF0sUD1PW0xdWzBdLEYtUiYmKEk9RCsoUC1EKSooRy1SKS8oRi1SKSxWPU1hdGgubWluKFYsSSksVT1NYXRoLm1heChVLEkpKSk7Vj1NYXRoLm1heChWLDApLFU9TWF0aC5taW4oVSxmLl9sZW5ndGgpO3ZhciBZPXMuZGVmYXVsdExpbmU7cmV0dXJuIHMub3BhY2l0eShoLmZpbGxjb2xvcik/WT1oLmZpbGxjb2xvcjpzLm9wYWNpdHkoKGgubGluZXx8e30pLmNvbG9yKSYmKFk9aC5saW5lLmNvbG9yKSxuLmV4dGVuZEZsYXQodCx7ZGlzdGFuY2U6dC5tYXhIb3ZlckRpc3RhbmNlLHgwOlYseDE6VSx5MDpHLHkxOkcsY29sb3I6WSxob3ZlcnRlbXBsYXRlOiExfSksZGVsZXRlIHQuaW5kZXgsaC50ZXh0JiYhQXJyYXkuaXNBcnJheShoLnRleHQpP3QudGV4dD1TdHJpbmcoaC50ZXh0KTp0LnRleHQ9aC5uYW1lLFt0XX19fX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vZmlsbF9ob3Zlcl90ZXh0XCI6MTA2MCxcIi4vZ2V0X3RyYWNlX2NvbG9yXCI6MTA2Mn1dLDEwNjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fSxpPXQoXCIuL3N1YnR5cGVzXCIpO24uaGFzTGluZXM9aS5oYXNMaW5lcyxuLmhhc01hcmtlcnM9aS5oYXNNYXJrZXJzLG4uaGFzVGV4dD1pLmhhc1RleHQsbi5pc0J1YmJsZT1pLmlzQnViYmxlLG4uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIiksbi5jcm9zc1RyYWNlRGVmYXVsdHM9dChcIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHNcIiksbi5jYWxjPXQoXCIuL2NhbGNcIikuY2FsYyxuLmNyb3NzVHJhY2VDYWxjPXQoXCIuL2Nyb3NzX3RyYWNlX2NhbGNcIiksbi5hcnJheXNUb0NhbGNkYXRhPXQoXCIuL2FycmF5c190b19jYWxjZGF0YVwiKSxuLnBsb3Q9dChcIi4vcGxvdFwiKSxuLmNvbG9yYmFyPXQoXCIuL21hcmtlcl9jb2xvcmJhclwiKSxuLnN0eWxlPXQoXCIuL3N0eWxlXCIpLnN0eWxlLG4uc3R5bGVPblNlbGVjdD10KFwiLi9zdHlsZVwiKS5zdHlsZU9uU2VsZWN0LG4uaG92ZXJQb2ludHM9dChcIi4vaG92ZXJcIiksbi5zZWxlY3RQb2ludHM9dChcIi4vc2VsZWN0XCIpLG4uYW5pbWF0YWJsZT0hMCxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cInNjYXR0ZXJcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIiksbi5jYXRlZ29yaWVzPVtcImNhcnRlc2lhblwiLFwic3ZnXCIsXCJzeW1ib2xzXCIsXCJlcnJvckJhcnNPS1wiLFwic2hvd0xlZ2VuZFwiLFwic2NhdHRlci1saWtlXCIsXCJ6b29tU2NhbGVcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIjo3NjAsXCIuL2FycmF5c190b19jYWxjZGF0YVwiOjEwNTEsXCIuL2F0dHJpYnV0ZXNcIjoxMDUyLFwiLi9jYWxjXCI6MTA1MyxcIi4vY3Jvc3NfdHJhY2VfY2FsY1wiOjEwNTcsXCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzXCI6MTA1OCxcIi4vZGVmYXVsdHNcIjoxMDU5LFwiLi9ob3ZlclwiOjEwNjMsXCIuL21hcmtlcl9jb2xvcmJhclwiOjEwNzAsXCIuL3Bsb3RcIjoxMDcyLFwiLi9zZWxlY3RcIjoxMDczLFwiLi9zdHlsZVwiOjEwNzUsXCIuL3N1YnR5cGVzXCI6MTA3Nn1dLDEwNjU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLmlzQXJyYXlPclR5cGVkQXJyYXksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnNcIikuaGFzQ29sb3JzY2FsZSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyxsKXt2YXIgYz0odC5tYXJrZXJ8fHt9KS5jb2xvcjsocyhcImxpbmUuY29sb3JcIixyKSxpKHQsXCJsaW5lXCIpKT9hKHQsZSxvLHMse3ByZWZpeDpcImxpbmUuXCIsY0xldHRlcjpcImNcIn0pOnMoXCJsaW5lLmNvbG9yXCIsIW4oYykmJmN8fHIpO3MoXCJsaW5lLndpZHRoXCIpLChsfHx7fSkubm9EYXNofHxzKFwibGluZS5kYXNoXCIpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCI6NTg4LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnNcIjo1ODksXCIuLi8uLi9saWJcIjo3MDF9XSwxMDY2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIiksaT1uLkJBRE5VTSxhPW4uTE9HX0NMSVAsbz1hKy41LHM9YS0uNSxsPXQoXCIuLi8uLi9saWJcIiksYz1sLnNlZ21lbnRzSW50ZXJzZWN0LHU9bC5jb25zdHJhaW4saD10KFwiLi9jb25zdGFudHNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixhLGYscCxkLGcsdixtLHkseCxiLF8sdyxrLEEsVCxNLFM9ZS54YXhpcyxFPWUueWF4aXMsQz1cImxvZ1wiPT09Uy50eXBlLEw9XCJsb2dcIj09PUUudHlwZSx6PVMuX2xlbmd0aCxPPUUuX2xlbmd0aCxJPWUuY29ubmVjdEdhcHMsRD1lLmJhc2VUb2xlcmFuY2UsUD1lLnNoYXBlLFI9XCJsaW5lYXJcIj09PVAsRj1lLmZpbGwmJlwibm9uZVwiIT09ZS5maWxsLEI9W10sTj1oLm1pblRvbGVyYW5jZSxqPXQubGVuZ3RoLFY9bmV3IEFycmF5KGopLFU9MDtmdW5jdGlvbiBxKGUpe3ZhciByPXRbZV07aWYoIXIpcmV0dXJuITE7dmFyIG49Uy5jMnAoci54KSxhPUUuYzJwKHIueSk7aWYobj09PWkpe2lmKEMmJihuPVMuYzJwKHIueCwhMCkpLG49PT1pKXJldHVybiExO0wmJmE9PT1pJiYobio9TWF0aC5hYnMoUy5fbSpPKihTLl9tPjA/bzpzKS8oRS5fbSp6KihFLl9tPjA/bzpzKSkpKSxuKj0xZTN9aWYoYT09PWkpe2lmKEwmJihhPUUuYzJwKHIueSwhMCkpLGE9PT1pKXJldHVybiExO2EqPTFlM31yZXR1cm5bbixhXX1mdW5jdGlvbiBIKHQsZSxyLG4pe3ZhciBpPXItdCxhPW4tZSxvPS41LXQscz0uNS1lLGw9aSppK2EqYSxjPWkqbythKnM7aWYoYz4wJiZjPGwpe3ZhciB1PW8qYS1zKmk7aWYodSp1PGwpcmV0dXJuITB9fWZ1bmN0aW9uIEcodCxlKXt2YXIgcj10WzBdL3osbj10WzFdL08saT1NYXRoLm1heCgwLC1yLHItMSwtbixuLTEpO3JldHVybiBpJiZ2b2lkIDAhPT1UJiZIKHIsbixULE0pJiYoaT0wKSxpJiZlJiZIKHIsbixlWzBdL3osZVsxXS9PKSYmKGk9MCksKDEraC50b2xlcmFuY2VHcm93dGgqaSkqRH1mdW5jdGlvbiBZKHQsZSl7dmFyIHI9dFswXS1lWzBdLG49dFsxXS1lWzFdO3JldHVybiBNYXRoLnNxcnQocipyK24qbil9dmFyIFcsWCxaLCQsSixLLFEsdHQ9aC5tYXhTY3JlZW5zQXdheSxldD0teip0dCxydD16KigxK3R0KSxudD0tTyp0dCxpdD1PKigxK3R0KSxhdD1bW2V0LG50LHJ0LG50XSxbcnQsbnQscnQsaXRdLFtydCxpdCxldCxpdF0sW2V0LGl0LGV0LG50XV07ZnVuY3Rpb24gb3QodCl7aWYodFswXTxldHx8dFswXT5ydHx8dFsxXTxudHx8dFsxXT5pdClyZXR1cm5bdSh0WzBdLGV0LHJ0KSx1KHRbMV0sbnQsaXQpXX1mdW5jdGlvbiBzdCh0LGUpe3JldHVybiB0WzBdPT09ZVswXSYmKHRbMF09PT1ldHx8dFswXT09PXJ0KXx8KHRbMV09PT1lWzFdJiYodFsxXT09PW50fHx0WzFdPT09aXQpfHx2b2lkIDApfWZ1bmN0aW9uIGx0KHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24obixpKXt2YXIgYT1vdChuKSxvPW90KGkpLHM9W107aWYoYSYmbyYmc3QoYSxvKSlyZXR1cm4gczthJiZzLnB1c2goYSksbyYmcy5wdXNoKG8pO3ZhciBjPTIqbC5jb25zdHJhaW4oKG5bdF0raVt0XSkvMixlLHIpLSgoYXx8bilbdF0rKG98fGkpW3RdKTtjJiYoKGEmJm8/Yz4wPT1hW3RdPm9bdF0/YTpvOmF8fG8pW3RdKz1jKTtyZXR1cm4gc319ZnVuY3Rpb24gY3QodCl7dmFyIGU9dFswXSxyPXRbMV0sbj1lPT09VltVLTFdWzBdLGk9cj09PVZbVS0xXVsxXTtpZighbnx8IWkpaWYoVT4xKXt2YXIgYT1lPT09VltVLTJdWzBdLG89cj09PVZbVS0yXVsxXTtuJiYoZT09PWV0fHxlPT09cnQpJiZhP28/VS0tOlZbVS0xXT10OmkmJihyPT09bnR8fHI9PT1pdCkmJm8/YT9VLS06VltVLTFdPXQ6VltVKytdPXR9ZWxzZSBWW1UrK109dH1mdW5jdGlvbiB1dCh0KXtWW1UtMV1bMF0hPT10WzBdJiZWW1UtMV1bMV0hPT10WzFdJiZjdChbWiwkXSksY3QodCksSj1udWxsLFo9JD0wfWZ1bmN0aW9uIGh0KHQpe2lmKFQ9dFswXS96LE09dFsxXS9PLFc9dFswXTxldD9ldDp0WzBdPnJ0P3J0OjAsWD10WzFdPG50P250OnRbMV0+aXQ/aXQ6MCxXfHxYKXtpZihVKWlmKEope3ZhciBlPVEoSix0KTtlLmxlbmd0aD4xJiYodXQoZVswXSksVltVKytdPWVbMV0pfWVsc2UgSz1RKFZbVS0xXSx0KVswXSxWW1UrK109SztlbHNlIFZbVSsrXT1bV3x8dFswXSxYfHx0WzFdXTt2YXIgcj1WW1UtMV07VyYmWCYmKHJbMF0hPT1XfHxyWzFdIT09WCk/KEomJihaIT09VyYmJCE9PVg/Y3QoWiYmJD8obj1KLGE9KGk9dClbMF0tblswXSxvPShpWzFdLW5bMV0pL2EsKG5bMV0qaVswXS1pWzFdKm5bMF0pL2E+MD9bbz4wP2V0OnJ0LGl0XTpbbz4wP3J0OmV0LG50XSk6W1p8fFcsJHx8WF0pOlomJiQmJmN0KFtaLCRdKSksY3QoW1csWF0pKTpaLVcmJiQtWCYmY3QoW1d8fFosWHx8JF0pLEo9dCxaPVcsJD1YfWVsc2UgSiYmdXQoUShKLHQpWzBdKSxWW1UrK109dDt2YXIgbixpLGEsb31mb3IoXCJsaW5lYXJcIj09PVB8fFwic3BsaW5lXCI9PT1QP1E9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj0wLGk9MDtpPDQ7aSsrKXt2YXIgYT1hdFtpXSxvPWModFswXSx0WzFdLGVbMF0sZVsxXSxhWzBdLGFbMV0sYVsyXSxhWzNdKTtvJiYoIW58fE1hdGguYWJzKG8ueC1yWzBdWzBdKT4xfHxNYXRoLmFicyhvLnktclswXVsxXSk+MSkmJihvPVtvLngsby55XSxuJiZZKG8sdCk8WShyWzBdLHQpP3IudW5zaGlmdChvKTpyLnB1c2gobyksbisrKX1yZXR1cm4gcn06XCJodlwiPT09UHx8XCJ2aFwiPT09UD9RPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W10sbj1vdCh0KSxpPW90KGUpO3JldHVybiBuJiZpJiZzdChuLGkpP3I6KG4mJnIucHVzaChuKSxpJiZyLnB1c2goaSkscil9OlwiaHZoXCI9PT1QP1E9bHQoMCxldCxydCk6XCJ2aHZcIj09PVAmJihRPWx0KDEsbnQsaXQpKSxyPTA7cjxqO3IrKylpZihuPXEocikpe2ZvcihVPTAsSj1udWxsLGh0KG4pLHIrKztyPGo7cisrKXtpZighKGY9cShyKSkpe2lmKEkpY29udGludWU7YnJlYWt9aWYoUiYmZS5zaW1wbGlmeSl7dmFyIGZ0PXEocisxKTtpZih5PVkoZixuKSxGJiYoMD09PVV8fFU9PT1qLTEpfHwhKHk8RyhmLGZ0KSpOKSl7Zm9yKHY9WyhmWzBdLW5bMF0pL3ksKGZbMV0tblsxXSkveV0scD1uLHg9eSxiPXc9az0wLGc9ITEsYT1mLHIrKztyPHQubGVuZ3RoO3IrKyl7aWYoZD1mdCxmdD1xKHIrMSksIWQpe2lmKEkpY29udGludWU7YnJlYWt9aWYoQT0obT1bZFswXS1uWzBdLGRbMV0tblsxXV0pWzBdKnZbMV0tbVsxXSp2WzBdLHc9TWF0aC5taW4odyxBKSwoaz1NYXRoLm1heChrLEEpKS13PkcoZCxmdCkpYnJlYWs7YT1kLChfPW1bMF0qdlswXSttWzFdKnZbMV0pPng/KHg9XyxmPWQsZz0hMSk6XzxiJiYoYj1fLHA9ZCxnPSEwKX1pZihnPyhodChmKSxhIT09cCYmaHQocCkpOihwIT09biYmaHQocCksYSE9PWYmJmh0KGYpKSxodChhKSxyPj10Lmxlbmd0aHx8IWQpYnJlYWs7aHQoZCksbj1kfX1lbHNlIGh0KGYpfUomJmN0KFtafHxKWzBdLCR8fEpbMV1dKSxCLnB1c2goVi5zbGljZSgwLFUpKX1yZXR1cm4gQn19LHtcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuL2NvbnN0YW50c1wiOjEwNTZ9XSwxMDY3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtcInNwbGluZVwiPT09cihcImxpbmUuc2hhcGVcIikmJnIoXCJsaW5lLnNtb290aGluZ1wiKX19LHt9XSwxMDY4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e3RvbmV4dHg6MSx0b25leHR5OjEsdG9uZXh0OjF9O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGksYSxvLHMsbCxjPXt9LHU9ITEsaD0tMSxmPTAscD0tMTtmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKShvPShpPXJbYV1bMF0udHJhY2UpLnN0YWNrZ3JvdXB8fFwiXCIpP28gaW4gYz9sPWNbb106KGw9Y1tvXT1mLGYrKyk6aS5maWxsIGluIG4mJnA+PTA/bD1wOihsPXA9ZixmKyspLGw8aCYmKHU9ITApLGkuX2dyb3VwSW5kZXg9aD1sO3ZhciBkPXIuc2xpY2UoKTt1JiZkLnNvcnQoZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLnRyYWNlLG49ZVswXS50cmFjZTtyZXR1cm4gci5fZ3JvdXBJbmRleC1uLl9ncm91cEluZGV4fHxyLmluZGV4LW4uaW5kZXh9KTt2YXIgZz17fTtmb3IoYT0wO2E8ZC5sZW5ndGg7YSsrKW89KGk9ZFthXVswXS50cmFjZSkuc3RhY2tncm91cHx8XCJcIiwhMD09PWkudmlzaWJsZT8oaS5fbmV4dHRyYWNlPW51bGwsaS5maWxsIGluIG4mJihzPWdbb10saS5fcHJldnRyYWNlPXN8fG51bGwscyYmKHMuX25leHR0cmFjZT1pKSksaS5fb3duZmlsbD1pLmZpbGwmJihcInRvemVyb1wiPT09aS5maWxsLnN1YnN0cigwLDYpfHxcInRvc2VsZlwiPT09aS5maWxsfHxcInRvXCI9PT1pLmZpbGwuc3Vic3RyKDAsMikmJiFpLl9wcmV2dHJhY2UpLGdbb109aSk6aS5fcHJldnRyYWNlPWkuX25leHR0cmFjZT1pLl9vd25maWxsPW51bGw7cmV0dXJuIGR9fSx7fV0sMTA2OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXJrZXIscj1lLnNpemVyZWZ8fDEsaT1lLnNpemVtaW58fDAsYT1cImFyZWFcIj09PWUuc2l6ZW1vZGU/ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydCh0L3IpfTpmdW5jdGlvbih0KXtyZXR1cm4gdC9yfTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9YSh0LzIpO3JldHVybiBuKGUpJiZlPjA/TWF0aC5tYXgoZSxpKTowfX19LHtcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sMTA3MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17Y29udGFpbmVyOlwibWFya2VyXCIsbWluOlwiY21pblwiLG1heDpcImNtYXhcIn19LHt9XSwxMDcxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnNcIikuaGFzQ29sb3JzY2FsZSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIiksbz10KFwiLi9zdWJ0eXBlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyxsLGMpe3ZhciB1PW8uaXNCdWJibGUodCksaD0odC5saW5lfHx7fSkuY29sb3I7KGM9Y3x8e30saCYmKHI9aCksbChcIm1hcmtlci5zeW1ib2xcIiksbChcIm1hcmtlci5vcGFjaXR5XCIsdT8uNzoxKSxsKFwibWFya2VyLnNpemVcIiksbChcIm1hcmtlci5jb2xvclwiLHIpLGkodCxcIm1hcmtlclwiKSYmYSh0LGUscyxsLHtwcmVmaXg6XCJtYXJrZXIuXCIsY0xldHRlcjpcImNcIn0pLGMubm9TZWxlY3R8fChsKFwic2VsZWN0ZWQubWFya2VyLmNvbG9yXCIpLGwoXCJ1bnNlbGVjdGVkLm1hcmtlci5jb2xvclwiKSxsKFwic2VsZWN0ZWQubWFya2VyLnNpemVcIiksbChcInVuc2VsZWN0ZWQubWFya2VyLnNpemVcIikpLGMubm9MaW5lfHwobChcIm1hcmtlci5saW5lLmNvbG9yXCIsaCYmIUFycmF5LmlzQXJyYXkoaCkmJmUubWFya2VyLmNvbG9yIT09aD9oOnU/bi5iYWNrZ3JvdW5kOm4uZGVmYXVsdExpbmUpLGkodCxcIm1hcmtlci5saW5lXCIpJiZhKHQsZSxzLGwse3ByZWZpeDpcIm1hcmtlci5saW5lLlwiLGNMZXR0ZXI6XCJjXCJ9KSxsKFwibWFya2VyLmxpbmUud2lkdGhcIix1PzE6MCkpLHUmJihsKFwibWFya2VyLnNpemVyZWZcIiksbChcIm1hcmtlci5zaXplbWluXCIpLGwoXCJtYXJrZXIuc2l6ZW1vZGVcIikpLGMuZ3JhZGllbnQpJiYoXCJub25lXCIhPT1sKFwibWFya2VyLmdyYWRpZW50LnR5cGVcIikmJmwoXCJtYXJrZXIuZ3JhZGllbnQuY29sb3JcIikpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiOjU4OCxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzXCI6NTg5LFwiLi9zdWJ0eXBlc1wiOjEwNzZ9XSwxMDcyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGE9dChcIi4uLy4uL2xpYlwiKSxvPWEuZW5zdXJlU2luZ2xlLHM9YS5pZGVudGl0eSxsPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksYz10KFwiLi9zdWJ0eXBlc1wiKSx1PXQoXCIuL2xpbmVfcG9pbnRzXCIpLGg9dChcIi4vbGlua190cmFjZXNcIiksZj10KFwiLi4vLi4vbGliL3BvbHlnb25cIikudGVzdGVyO2Z1bmN0aW9uIHAodCxlLHIsaCxwLGQsZyl7dmFyIHY7IWZ1bmN0aW9uKHQsZSxyLGksbyl7dmFyIHM9ci54YXhpcyxsPXIueWF4aXMsdT1uLmV4dGVudChhLnNpbXBsZU1hcChzLnJhbmdlLHMucjJjKSksaD1uLmV4dGVudChhLnNpbXBsZU1hcChsLnJhbmdlLGwucjJjKSksZj1pWzBdLnRyYWNlO2lmKCFjLmhhc01hcmtlcnMoZikpcmV0dXJuO3ZhciBwPWYubWFya2VyLm1heGRpc3BsYXllZDtpZigwPT09cClyZXR1cm47dmFyIGQ9aS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQueD49dVswXSYmdC54PD11WzFdJiZ0Lnk+PWhbMF0mJnQueTw9aFsxXX0pLGc9TWF0aC5jZWlsKGQubGVuZ3RoL3ApLHY9MDtvLmZvckVhY2goZnVuY3Rpb24odCxyKXt2YXIgbj10WzBdLnRyYWNlO2MuaGFzTWFya2VycyhuKSYmbi5tYXJrZXIubWF4ZGlzcGxheWVkPjAmJnI8ZSYmdisrfSk7dmFyIG09TWF0aC5yb3VuZCh2KmcvMytNYXRoLmZsb29yKHYvMykqZy83LjEpO2kuZm9yRWFjaChmdW5jdGlvbih0KXtkZWxldGUgdC52aXN9KSxkLmZvckVhY2goZnVuY3Rpb24odCxlKXswPT09TWF0aC5yb3VuZCgoZSttKSVnKSYmKHQudmlzPSEwKX0pfSgwLGUscixoLHApO3ZhciBtPSEhZyYmZy5kdXJhdGlvbj4wO2Z1bmN0aW9uIHkodCl7cmV0dXJuIG0/dC50cmFuc2l0aW9uKCk6dH12YXIgeD1yLnhheGlzLGI9ci55YXhpcyxfPWhbMF0udHJhY2Usdz1fLmxpbmUsaz1uLnNlbGVjdChkKSxBPW8oayxcImdcIixcImVycm9yYmFyc1wiKSxUPW8oayxcImdcIixcImxpbmVzXCIpLE09byhrLFwiZ1wiLFwicG9pbnRzXCIpLFM9byhrLFwiZ1wiLFwidGV4dFwiKTtpZihpLmdldENvbXBvbmVudE1ldGhvZChcImVycm9yYmFyc1wiLFwicGxvdFwiKSh0LEEscixnKSwhMD09PV8udmlzaWJsZSl7dmFyIEUsQzt5KGspLnN0eWxlKFwib3BhY2l0eVwiLF8ub3BhY2l0eSk7dmFyIEw9Xy5maWxsLmNoYXJBdChfLmZpbGwubGVuZ3RoLTEpO1wieFwiIT09TCYmXCJ5XCIhPT1MJiYoTD1cIlwiKSxyLmlzUmFuZ2VQbG90fHwoaFswXS5ub2RlMz1rKTt2YXIgeixPLEk9XCJcIixEPVtdLFA9Xy5fcHJldnRyYWNlO1AmJihJPVAuX3ByZXZSZXZwYXRofHxcIlwiLEM9UC5fbmV4dEZpbGwsRD1QLl9wb2x5Z29ucyk7dmFyIFIsRixCLE4saixWLFUscT1cIlwiLEg9XCJcIixHPVtdLFk9YS5ub29wO2lmKEU9Xy5fb3duRmlsbCxjLmhhc0xpbmVzKF8pfHxcIm5vbmVcIiE9PV8uZmlsbCl7Zm9yKEMmJkMuZGF0dW0oaCksLTEhPT1bXCJodlwiLFwidmhcIixcImh2aFwiLFwidmh2XCJdLmluZGV4T2Yody5zaGFwZSk/KFI9bC5zdGVwcyh3LnNoYXBlKSxGPWwuc3RlcHMody5zaGFwZS5zcGxpdChcIlwiKS5yZXZlcnNlKCkuam9pbihcIlwiKSkpOlI9Rj1cInNwbGluZVwiPT09dy5zaGFwZT9mdW5jdGlvbih0KXt2YXIgZT10W3QubGVuZ3RoLTFdO3JldHVybiB0Lmxlbmd0aD4xJiZ0WzBdWzBdPT09ZVswXSYmdFswXVsxXT09PWVbMV0/bC5zbW9vdGhjbG9zZWQodC5zbGljZSgxKSx3LnNtb290aGluZyk6bC5zbW9vdGhvcGVuKHQsdy5zbW9vdGhpbmcpfTpmdW5jdGlvbih0KXtyZXR1cm5cIk1cIit0LmpvaW4oXCJMXCIpfSxCPWZ1bmN0aW9uKHQpe3JldHVybiBGKHQucmV2ZXJzZSgpKX0sRz11KGgse3hheGlzOngseWF4aXM6Yixjb25uZWN0R2FwczpfLmNvbm5lY3RnYXBzLGJhc2VUb2xlcmFuY2U6TWF0aC5tYXgody53aWR0aHx8MSwzKS80LHNoYXBlOncuc2hhcGUsc2ltcGxpZnk6dy5zaW1wbGlmeSxmaWxsOl8uZmlsbH0pLFU9Xy5fcG9seWdvbnM9bmV3IEFycmF5KEcubGVuZ3RoKSx2PTA7djxHLmxlbmd0aDt2KyspXy5fcG9seWdvbnNbdl09ZihHW3ZdKTtHLmxlbmd0aCYmKE49R1swXVswXSxWPShqPUdbRy5sZW5ndGgtMV0pW2oubGVuZ3RoLTFdKSxZPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtpZih6PVIoZSksTz1CKGUpLHE/TD8ocSs9XCJMXCIrei5zdWJzdHIoMSksSD1PK1wiTFwiK0guc3Vic3RyKDEpKToocSs9XCJaXCIreixIPU8rXCJaXCIrSCk6KHE9eixIPU8pLGMuaGFzTGluZXMoXykmJmUubGVuZ3RoPjEpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHIuZGF0dW0oaCksdCl5KHIuc3R5bGUoXCJvcGFjaXR5XCIsMCkuYXR0cihcImRcIix6KS5jYWxsKGwubGluZUdyb3VwU3R5bGUpKS5zdHlsZShcIm9wYWNpdHlcIiwxKTtlbHNle3ZhciBpPXkocik7aS5hdHRyKFwiZFwiLHopLGwuc2luZ2xlTGluZVN0eWxlKGgsaSl9fX19fXZhciBXPVQuc2VsZWN0QWxsKFwiLmpzLWxpbmVcIikuZGF0YShHKTt5KFcuZXhpdCgpKS5zdHlsZShcIm9wYWNpdHlcIiwwKS5yZW1vdmUoKSxXLmVhY2goWSghMSkpLFcuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoXCJqcy1saW5lXCIsITApLnN0eWxlKFwidmVjdG9yLWVmZmVjdFwiLFwibm9uLXNjYWxpbmctc3Ryb2tlXCIpLmNhbGwobC5saW5lR3JvdXBTdHlsZSkuZWFjaChZKCEwKSksbC5zZXRDbGlwVXJsKFcsci5sYXllckNsaXBJZCx0KSxHLmxlbmd0aD8oRT8oRS5kYXR1bShoKSxOJiZWJiYoTD8oXCJ5XCI9PT1MP05bMV09VlsxXT1iLmMycCgwLCEwKTpcInhcIj09PUwmJihOWzBdPVZbMF09eC5jMnAoMCwhMCkpLHkoRSkuYXR0cihcImRcIixcIk1cIitWK1wiTFwiK04rXCJMXCIrcS5zdWJzdHIoMSkpLmNhbGwobC5zaW5nbGVGaWxsU3R5bGUpKTp5KEUpLmF0dHIoXCJkXCIscStcIlpcIikuY2FsbChsLnNpbmdsZUZpbGxTdHlsZSkpKTpDJiYoXCJ0b25leHRcIj09PV8uZmlsbC5zdWJzdHIoMCw2KSYmcSYmST8oXCJ0b25leHRcIj09PV8uZmlsbD95KEMpLmF0dHIoXCJkXCIscStcIlpcIitJK1wiWlwiKS5jYWxsKGwuc2luZ2xlRmlsbFN0eWxlKTp5KEMpLmF0dHIoXCJkXCIscStcIkxcIitJLnN1YnN0cigxKStcIlpcIikuY2FsbChsLnNpbmdsZUZpbGxTdHlsZSksXy5fcG9seWdvbnM9Xy5fcG9seWdvbnMuY29uY2F0KEQpKTooWihDKSxfLl9wb2x5Z29ucz1udWxsKSksXy5fcHJldlJldnBhdGg9SCxfLl9wcmV2UG9seWdvbnM9VSk6KEU/WihFKTpDJiZaKEMpLF8uX3BvbHlnb25zPV8uX3ByZXZSZXZwYXRoPV8uX3ByZXZQb2x5Z29ucz1udWxsKSxNLmRhdHVtKGgpLFMuZGF0dW0oaCksZnVuY3Rpb24oZSxpLGEpe3ZhciBvLHU9YVswXS50cmFjZSxoPWMuaGFzTWFya2Vycyh1KSxmPWMuaGFzVGV4dCh1KSxwPXR0KHUpLGQ9ZXQsZz1ldDtpZihofHxmKXt2YXIgdj1zLF89dS5zdGFja2dyb3VwLHc9XyYmXCJpbmZlciB6ZXJvXCI9PT10Ll9mdWxsTGF5b3V0Ll9zY2F0dGVyU3RhY2tPcHRzW3guX2lkK2IuX2lkXVtfXS5zdGFja2dhcHM7dS5tYXJrZXIubWF4ZGlzcGxheWVkfHx1Ll9uZWVkc0N1bGw/dj13P0o6JDpfJiYhdyYmKHY9SyksaCYmKGQ9diksZiYmKGc9dil9dmFyIGssQT0obz1lLnNlbGVjdEFsbChcInBhdGgucG9pbnRcIikuZGF0YShkLHApKS5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChcInBvaW50XCIsITApO20mJkEuY2FsbChsLnBvaW50U3R5bGUsdSx0KS5jYWxsKGwudHJhbnNsYXRlUG9pbnRzLHgsYikuc3R5bGUoXCJvcGFjaXR5XCIsMCkudHJhbnNpdGlvbigpLnN0eWxlKFwib3BhY2l0eVwiLDEpLG8ub3JkZXIoKSxoJiYoaz1sLm1ha2VQb2ludFN0eWxlRm5zKHUpKSxvLmVhY2goZnVuY3Rpb24oZSl7dmFyIGk9bi5zZWxlY3QodGhpcyksYT15KGkpO2wudHJhbnNsYXRlUG9pbnQoZSxhLHgsYik/KGwuc2luZ2xlUG9pbnRTdHlsZShlLGEsdSxrLHQpLHIubGF5ZXJDbGlwSWQmJmwuaGlkZU91dHNpZGVSYW5nZVBvaW50KGUsYSx4LGIsdS54Y2FsZW5kYXIsdS55Y2FsZW5kYXIpLHUuY3VzdG9tZGF0YSYmaS5jbGFzc2VkKFwicGxvdGx5LWN1c3RvbWRhdGFcIixudWxsIT09ZS5kYXRhJiZ2b2lkIDAhPT1lLmRhdGEpKTphLnJlbW92ZSgpfSksbT9vLmV4aXQoKS50cmFuc2l0aW9uKCkuc3R5bGUoXCJvcGFjaXR5XCIsMCkucmVtb3ZlKCk6by5leGl0KCkucmVtb3ZlKCksKG89aS5zZWxlY3RBbGwoXCJnXCIpLmRhdGEoZyxwKSkuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJ0ZXh0cG9pbnRcIiwhMCkuYXBwZW5kKFwidGV4dFwiKSxvLm9yZGVyKCksby5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLGk9eShlLnNlbGVjdChcInRleHRcIikpO2wudHJhbnNsYXRlUG9pbnQodCxpLHgsYik/ci5sYXllckNsaXBJZCYmbC5oaWRlT3V0c2lkZVJhbmdlUG9pbnQodCxlLHgsYix1LnhjYWxlbmRhcix1LnljYWxlbmRhcik6ZS5yZW1vdmUoKX0pLG8uc2VsZWN0QWxsKFwidGV4dFwiKS5jYWxsKGwudGV4dFBvaW50U3R5bGUsdSx0KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXguYzJwKHQueCkscj1iLmMycCh0LnkpO24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbChcInRzcGFuLmxpbmVcIikuZWFjaChmdW5jdGlvbigpe3kobi5zZWxlY3QodGhpcykpLmF0dHIoe3g6ZSx5OnJ9KX0pfSksby5leGl0KCkucmVtb3ZlKCl9KE0sUyxoKTt2YXIgWD0hMT09PV8uY2xpcG9uYXhpcz9udWxsOnIubGF5ZXJDbGlwSWQ7bC5zZXRDbGlwVXJsKE0sWCx0KSxsLnNldENsaXBVcmwoUyxYLHQpfWZ1bmN0aW9uIFoodCl7eSh0KS5hdHRyKFwiZFwiLFwiTTAsMFpcIil9ZnVuY3Rpb24gJCh0KXtyZXR1cm4gdC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuZ2FwJiZ0LnZpc30pfWZ1bmN0aW9uIEoodCl7cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc30pfWZ1bmN0aW9uIEsodCl7cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiF0LmdhcH0pfWZ1bmN0aW9uIFEodCl7cmV0dXJuIHQuaWR9ZnVuY3Rpb24gdHQodCl7aWYodC5pZHMpcmV0dXJuIFF9ZnVuY3Rpb24gZXQoKXtyZXR1cm4hMX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksYSxjKXt2YXIgdSxmLGQ9IWEsZz0hIWEmJmEuZHVyYXRpb24+MCx2PWgodCxlLHIpOygodT1pLnNlbGVjdEFsbChcImcudHJhY2VcIikuZGF0YSh2LGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLnVpZH0pKS5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFjZSBzY2F0dGVyIHRyYWNlXCIrdFswXS50cmFjZS51aWR9KS5zdHlsZShcInN0cm9rZS1taXRlcmxpbWl0XCIsMiksdS5vcmRlcigpLGZ1bmN0aW9uKHQsZSxyKXtlLmVhY2goZnVuY3Rpb24oZSl7dmFyIGk9byhuLnNlbGVjdCh0aGlzKSxcImdcIixcImZpbGxzXCIpO2wuc2V0Q2xpcFVybChpLHIubGF5ZXJDbGlwSWQsdCk7dmFyIGE9ZVswXS50cmFjZSxjPVtdO2EuX293bmZpbGwmJmMucHVzaChcIl9vd25GaWxsXCIpLGEuX25leHR0cmFjZSYmYy5wdXNoKFwiX25leHRGaWxsXCIpO3ZhciB1PWkuc2VsZWN0QWxsKFwiZ1wiKS5kYXRhKGMscyk7dS5lbnRlcigpLmFwcGVuZChcImdcIiksdS5leGl0KCkuZWFjaChmdW5jdGlvbih0KXthW3RdPW51bGx9KS5yZW1vdmUoKSx1Lm9yZGVyKCkuZWFjaChmdW5jdGlvbih0KXthW3RdPW8obi5zZWxlY3QodGhpcyksXCJwYXRoXCIsXCJqcy1maWxsXCIpfSl9KX0odCx1LGUpLGcpPyhjJiYoZj1jKCkpLG4udHJhbnNpdGlvbigpLmR1cmF0aW9uKGEuZHVyYXRpb24pLmVhc2UoYS5lYXNpbmcpLmVhY2goXCJlbmRcIixmdW5jdGlvbigpe2YmJmYoKX0pLmVhY2goXCJpbnRlcnJ1cHRcIixmdW5jdGlvbigpe2YmJmYoKX0pLmVhY2goZnVuY3Rpb24oKXtpLnNlbGVjdEFsbChcImcudHJhY2VcIikuZWFjaChmdW5jdGlvbihyLG4pe3AodCxuLGUscix2LHRoaXMsYSl9KX0pKTp1LmVhY2goZnVuY3Rpb24ocixuKXtwKHQsbixlLHIsdix0aGlzLGEpfSk7ZCYmdS5leGl0KCkucmVtb3ZlKCksaS5zZWxlY3RBbGwoXCJwYXRoOm5vdChbZF0pXCIpLnJlbW92ZSgpfX0se1wiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3BvbHlnb25cIjo3MTMsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vbGluZV9wb2ludHNcIjoxMDY2LFwiLi9saW5rX3RyYWNlc1wiOjEwNjgsXCIuL3N1YnR5cGVzXCI6MTA3NixkMzoxNTV9XSwxMDczOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vc3VidHlwZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLG8scz10LmNkLGw9dC54YXhpcyxjPXQueWF4aXMsdT1bXSxoPXNbMF0udHJhY2U7aWYoIW4uaGFzTWFya2VycyhoKSYmIW4uaGFzVGV4dChoKSlyZXR1cm5bXTtpZighMT09PWUpZm9yKHI9MDtyPHMubGVuZ3RoO3IrKylzW3JdLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8cy5sZW5ndGg7cisrKWk9c1tyXSxhPWwuYzJwKGkueCksbz1jLmMycChpLnkpLG51bGwhPT1pLmkmJmUuY29udGFpbnMoW2Esb10sITEscix0KT8odS5wdXNoKHtwb2ludE51bWJlcjppLmkseDpsLmMyZChpLngpLHk6Yy5jMmQoaS55KX0pLGkuc2VsZWN0ZWQ9MSk6aS5zZWxlY3RlZD0wO3JldHVybiB1fX0se1wiLi9zdWJ0eXBlc1wiOjEwNzZ9XSwxMDc0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49W1wib3JpZW50YXRpb25cIixcImdyb3Vwbm9ybVwiLFwic3RhY2tnYXBzXCJdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYT1yLl9zY2F0dGVyU3RhY2tPcHRzLG89aShcInN0YWNrZ3JvdXBcIik7aWYobyl7dmFyIHM9ZS54YXhpcytlLnlheGlzLGw9YVtzXTtsfHwobD1hW3NdPXt9KTt2YXIgYz1sW29dLHU9ITE7Yz9jLnRyYWNlcy5wdXNoKGUpOihjPWxbb109e3RyYWNlSW5kaWNlczpbXSx0cmFjZXM6W2VdfSx1PSEwKTtmb3IodmFyIGg9e29yaWVudGF0aW9uOmUueCYmIWUueT9cImhcIjpcInZcIn0sZj0wO2Y8bi5sZW5ndGg7ZisrKXt2YXIgcD1uW2ZdLGQ9cCtcIkZvdW5kXCI7aWYoIWNbZF0pe3ZhciBnPXZvaWQgMCE9PXRbcF0sdj1cIm9yaWVudGF0aW9uXCI9PT1wO2lmKChnfHx1KSYmKGNbcF09aShwLGhbcF0pLHYmJihjLmZpbGxEZmx0PVwiaFwiPT09Y1twXT9cInRvbmV4dHhcIjpcInRvbmV4dHlcIiksZyYmKGNbZF09ITAsIXUmJihkZWxldGUgYy50cmFjZXNbMF1bcF0sdikpKSlmb3IodmFyIG09MDttPGMudHJhY2VzLmxlbmd0aC0xO20rKyl7dmFyIHk9Yy50cmFjZXNbbV07eS5faW5wdXQuZmlsbCE9PXkuZmlsbCYmKHkuZmlsbD1jLmZpbGxEZmx0KX19fXJldHVybiBjfX19LHt9XSwxMDc1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxhPXQoXCIuLi8uLi9yZWdpc3RyeVwiKTtmdW5jdGlvbiBvKHQsZSxyKXtpLnBvaW50U3R5bGUodC5zZWxlY3RBbGwoXCJwYXRoLnBvaW50XCIpLGUscil9ZnVuY3Rpb24gcyh0LGUscil7aS50ZXh0UG9pbnRTdHlsZSh0LnNlbGVjdEFsbChcInRleHRcIiksZSxyKX1lLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZT9lWzBdLm5vZGUzOm4uc2VsZWN0KHQpLnNlbGVjdEFsbChcImcudHJhY2Uuc2NhdHRlclwiKTtyLnN0eWxlKFwib3BhY2l0eVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSxyLnNlbGVjdEFsbChcImcucG9pbnRzXCIpLmVhY2goZnVuY3Rpb24oZSl7byhuLnNlbGVjdCh0aGlzKSxlLnRyYWNlfHxlWzBdLnRyYWNlLHQpfSksci5zZWxlY3RBbGwoXCJnLnRleHRcIikuZWFjaChmdW5jdGlvbihlKXtzKG4uc2VsZWN0KHRoaXMpLGUudHJhY2V8fGVbMF0udHJhY2UsdCl9KSxyLnNlbGVjdEFsbChcImcudHJhY2UgcGF0aC5qcy1saW5lXCIpLmNhbGwoaS5saW5lR3JvdXBTdHlsZSksci5zZWxlY3RBbGwoXCJnLnRyYWNlIHBhdGguanMtZmlsbFwiKS5jYWxsKGkuZmlsbEdyb3VwU3R5bGUpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKFwiZXJyb3JiYXJzXCIsXCJzdHlsZVwiKShyKX0sc3R5bGVQb2ludHM6byxzdHlsZVRleHQ6cyxzdHlsZU9uU2VsZWN0OmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS5ub2RlMyxuPWVbMF0udHJhY2U7bi5zZWxlY3RlZHBvaW50cz8oaS5zZWxlY3RlZFBvaW50U3R5bGUoci5zZWxlY3RBbGwoXCJwYXRoLnBvaW50XCIpLG4pLGkuc2VsZWN0ZWRUZXh0U3R5bGUoci5zZWxlY3RBbGwoXCJ0ZXh0XCIpLG4pKToobyhyLG4sdCkscyhyLG4sdCkpfX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LGQzOjE1NX1dLDEwNzY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpO2UuZXhwb3J0cz17aGFzTGluZXM6ZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZSYmdC5tb2RlJiYtMSE9PXQubW9kZS5pbmRleE9mKFwibGluZXNcIil9LGhhc01hcmtlcnM6ZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZSYmKHQubW9kZSYmLTEhPT10Lm1vZGUuaW5kZXhPZihcIm1hcmtlcnNcIil8fFwic3Bsb21cIj09PXQudHlwZSl9LGhhc1RleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZSYmdC5tb2RlJiYtMSE9PXQubW9kZS5pbmRleE9mKFwidGV4dFwiKX0saXNCdWJibGU6ZnVuY3Rpb24odCl7cmV0dXJuIG4uaXNQbGFpbk9iamVjdCh0Lm1hcmtlcikmJm4uaXNBcnJheU9yVHlwZWRBcnJheSh0Lm1hcmtlci5zaXplKX19fSx7XCIuLi8uLi9saWJcIjo3MDF9XSwxMDc3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSxhKXthPWF8fHt9LGkoXCJ0ZXh0cG9zaXRpb25cIiksbi5jb2VyY2VGb250KGksXCJ0ZXh0Zm9udFwiLHIuZm9udCksYS5ub1NlbGVjdHx8KGkoXCJzZWxlY3RlZC50ZXh0Zm9udC5jb2xvclwiKSxpKFwidW5zZWxlY3RlZC50ZXh0Zm9udC5jb2xvclwiKSl9fSx7XCIuLi8uLi9saWJcIjo3MDF9XSwxMDc4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9yZWdpc3RyeVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG8scz1hKFwieFwiKSxsPWEoXCJ5XCIpO2lmKGkuZ2V0Q29tcG9uZW50TWV0aG9kKFwiY2FsZW5kYXJzXCIsXCJoYW5kbGVUcmFjZURlZmF1bHRzXCIpKHQsZSxbXCJ4XCIsXCJ5XCJdLHIpLHMpe3ZhciBjPW4ubWluUm93TGVuZ3RoKHMpO2w/bz1NYXRoLm1pbihjLG4ubWluUm93TGVuZ3RoKGwpKToobz1jLGEoXCJ5MFwiKSxhKFwiZHlcIikpfWVsc2V7aWYoIWwpcmV0dXJuIDA7bz1uLm1pblJvd0xlbmd0aChsKSxhKFwieDBcIiksYShcImR4XCIpfXJldHVybiBlLl9sZW5ndGg9byxvfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4Mjl9XSwxMDc5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL2NvbnN0YW50cy9nbDNkX2Rhc2hlc1wiKSxsPXQoXCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzXCIpLGM9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCx1PXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsLGg9bi5saW5lLGY9bi5tYXJrZXIscD1mLmxpbmUsZD1jKHt3aWR0aDpoLndpZHRoLGRhc2g6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOk9iamVjdC5rZXlzKHMpLGRmbHQ6XCJzb2xpZFwifX0saShcImxpbmVcIikpO3ZhciBnPWUuZXhwb3J0cz11KHt4Om4ueCx5Om4ueSx6Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwifSx0ZXh0OmMoe30sbi50ZXh0LHt9KSxob3ZlcnRleHQ6Yyh7fSxuLmhvdmVydGV4dCx7fSksaG92ZXJ0ZW1wbGF0ZTphKCksbW9kZTpjKHt9LG4ubW9kZSx7ZGZsdDpcImxpbmVzK21hcmtlcnNcIn0pLHN1cmZhY2VheGlzOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbLTEsMCwxLDJdLGRmbHQ6LTF9LHN1cmZhY2Vjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCJ9LHByb2plY3Rpb246e3g6e3Nob3c6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sb3BhY2l0eTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MX0sc2NhbGU6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MTAsZGZsdDoyLzN9fSx5OntzaG93Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LG9wYWNpdHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjF9LHNjYWxlOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEwLGRmbHQ6Mi8zfX0sejp7c2hvdzp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxvcGFjaXR5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDoxfSxzY2FsZTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxMCxkZmx0OjIvM319fSxjb25uZWN0Z2FwczpuLmNvbm5lY3RnYXBzLGxpbmU6ZCxtYXJrZXI6Yyh7c3ltYm9sOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpPYmplY3Qua2V5cyhsKSxkZmx0OlwiY2lyY2xlXCIsYXJyYXlPazohMH0sc2l6ZTpjKHt9LGYuc2l6ZSx7ZGZsdDo4fSksc2l6ZXJlZjpmLnNpemVyZWYsc2l6ZW1pbjpmLnNpemVtaW4sc2l6ZW1vZGU6Zi5zaXplbW9kZSxvcGFjaXR5OmMoe30sZi5vcGFjaXR5LHthcnJheU9rOiExfSksY29sb3JiYXI6Zi5jb2xvcmJhcixsaW5lOmMoe3dpZHRoOmMoe30scC53aWR0aCx7YXJyYXlPazohMX0pfSxpKFwibWFya2VyLmxpbmVcIikpfSxpKFwibWFya2VyXCIpKSx0ZXh0cG9zaXRpb246Yyh7fSxuLnRleHRwb3NpdGlvbix7ZGZsdDpcInRvcCBjZW50ZXJcIn0pLHRleHRmb250Ontjb2xvcjpuLnRleHRmb250LmNvbG9yLHNpemU6bi50ZXh0Zm9udC5zaXplLGZhbWlseTpjKHt9LG4udGV4dGZvbnQuZmFtaWx5LHthcnJheU9rOiExfSl9LGhvdmVyaW5mbzpjKHt9LG8uaG92ZXJpbmZvKX0sXCJjYWxjXCIsXCJuZXN0ZWRcIik7Zy54LmVkaXRUeXBlPWcueS5lZGl0VHlwZT1nLnouZWRpdFR5cGU9XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9jb25zdGFudHMvZ2wzZF9kYXNoZXNcIjo2NzUsXCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzXCI6Njc2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCI6MTA1Mn1dLDEwODA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGFcIiksaT10KFwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W3t4OiExLHk6ITEsdHJhY2U6ZSx0Ont9fV07cmV0dXJuIG4ocixlKSxpKHQsZSkscn19LHtcIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhXCI6MTA1MSxcIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjXCI6MTA1NX1dLDEwODE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIik7ZnVuY3Rpb24gaSh0LGUscixpKXtpZighZXx8IWUudmlzaWJsZSlyZXR1cm4gbnVsbDtmb3IodmFyIGE9bi5nZXRDb21wb25lbnRNZXRob2QoXCJlcnJvcmJhcnNcIixcIm1ha2VDb21wdXRlRXJyb3JcIikoZSksbz1uZXcgQXJyYXkodC5sZW5ndGgpLHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIGw9YSgrdFtzXSxzKTtpZihcImxvZ1wiPT09aS50eXBlKXt2YXIgYz1pLmMybCh0W3NdKSx1PXRbc10tbFswXSxoPXRbc10rbFsxXTtpZihvW3NdPVsoaS5jMmwodSwhMCktYykqciwoaS5jMmwoaCwhMCktYykqcl0sdT4wKXt2YXIgZj1pLmMybCh1KTtpLl9sb3dlckxvZ0Vycm9yQm91bmR8fChpLl9sb3dlckxvZ0Vycm9yQm91bmQ9ZiksaS5fbG93ZXJFcnJvckJvdW5kPU1hdGgubWluKGkuX2xvd2VyTG9nRXJyb3JCb3VuZCxmKX19ZWxzZSBvW3NdPVstbFswXSpyLGxbMV0qcl19cmV0dXJuIG99ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1baSh0LngsdC5lcnJvcl94LGVbMF0sci54YXhpcyksaSh0LnksdC5lcnJvcl95LGVbMV0sci55YXhpcyksaSh0LnosdC5lcnJvcl96LGVbMl0sci56YXhpcyldLGE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYodFtlXSlyZXR1cm4gdFtlXS5sZW5ndGg7cmV0dXJuIDB9KG4pO2lmKDA9PT1hKXJldHVybiBudWxsO2Zvcih2YXIgbz1uZXcgQXJyYXkoYSkscz0wO3M8YTtzKyspe2Zvcih2YXIgbD1bWzAsMCwwXSxbMCwwLDBdXSxjPTA7YzwzO2MrKylpZihuW2NdKWZvcih2YXIgdT0wO3U8Mjt1KyspbFt1XVtjXT1uW2NdW3NdW3VdO29bc109bH1yZXR1cm4gb319LHtcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5fV0sMTA4MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbC1saW5lM2RcIiksaT10KFwiZ2wtc2NhdHRlcjNkXCIpLGE9dChcImdsLWVycm9yM2RcIiksbz10KFwiZ2wtbWVzaDNkXCIpLHM9dChcImRlbGF1bmF5LXRyaWFuZ3VsYXRlXCIpLGw9dChcIi4uLy4uL2xpYlwiKSxjPXQoXCIuLi8uLi9saWIvc3RyMnJnYmFycmF5XCIpLHU9dChcIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3JcIikuZm9ybWF0Q29sb3IsaD10KFwiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmNcIiksZj10KFwiLi4vLi4vY29uc3RhbnRzL2dsM2RfZGFzaGVzXCIpLHA9dChcIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnNcIiksZD10KFwiLi9jYWxjX2Vycm9yc1wiKTtmdW5jdGlvbiBnKHQsZSl7dGhpcy5zY2VuZT10LHRoaXMudWlkPWUsdGhpcy5saW5lUGxvdD1udWxsLHRoaXMuc2NhdHRlclBsb3Q9bnVsbCx0aGlzLmVycm9yQmFycz1udWxsLHRoaXMudGV4dE1hcmtlcnM9bnVsbCx0aGlzLmRlbGF1bmF5TWVzaD1udWxsLHRoaXMuY29sb3I9bnVsbCx0aGlzLm1vZGU9XCJcIix0aGlzLmRhdGFQb2ludHM9W10sdGhpcy5heGVzQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMudGV4dExhYmVscz1udWxsLHRoaXMuZGF0YT1udWxsfXZhciB2PWcucHJvdG90eXBlO2Z1bmN0aW9uIG0odCl7cmV0dXJuIG51bGw9PXQ/MDp0LmluZGV4T2YoXCJsZWZ0XCIpPi0xPy0xOnQuaW5kZXhPZihcInJpZ2h0XCIpPi0xPzE6MH1mdW5jdGlvbiB5KHQpe3JldHVybiBudWxsPT10PzA6dC5pbmRleE9mKFwidG9wXCIpPi0xPy0xOnQuaW5kZXhPZihcImJvdHRvbVwiKT4tMT8xOjB9ZnVuY3Rpb24geCh0LGUpe3JldHVybiBlKDQqdCl9ZnVuY3Rpb24gYih0KXtyZXR1cm4gcFt0XX1mdW5jdGlvbiBfKHQsZSxyLG4saSl7dmFyIGE9bnVsbDtpZihsLmlzQXJyYXlPclR5cGVkQXJyYXkodCkpe2E9W107Zm9yKHZhciBvPTA7bzxlO28rKyl2b2lkIDA9PT10W29dP2Fbb109bjphW29dPXIodFtvXSxpKX1lbHNlIGE9cih0LGwuaWRlbnRpdHkpO3JldHVybiBhfWZ1bmN0aW9uIHcodCxlKXt2YXIgcixuLGksYSxvLHMsZj1bXSxwPXQuZnVsbFNjZW5lTGF5b3V0LGc9dC5kYXRhU2NhbGUsdj1wLnhheGlzLHc9cC55YXhpcyxrPXAuemF4aXMsQT1lLm1hcmtlcixUPWUubGluZSxNPWUueHx8W10sUz1lLnl8fFtdLEU9ZS56fHxbXSxDPU0ubGVuZ3RoLEw9ZS54Y2FsZW5kYXIsej1lLnljYWxlbmRhcixPPWUuemNhbGVuZGFyO2ZvcihvPTA7bzxDO28rKylyPXYuZDJsKE1bb10sMCxMKSpnWzBdLG49dy5kMmwoU1tvXSwwLHopKmdbMV0saT1rLmQybChFW29dLDAsTykqZ1syXSxmW29dPVtyLG4saV07aWYoQXJyYXkuaXNBcnJheShlLnRleHQpKXM9ZS50ZXh0O2Vsc2UgaWYodm9pZCAwIT09ZS50ZXh0KWZvcihzPW5ldyBBcnJheShDKSxvPTA7bzxDO28rKylzW29dPWUudGV4dDtpZihhPXtwb3NpdGlvbjpmLG1vZGU6ZS5tb2RlLHRleHQ6c30sXCJsaW5lXCJpbiBlJiYoYS5saW5lQ29sb3I9dShULDEsQyksYS5saW5lV2lkdGg9VC53aWR0aCxhLmxpbmVEYXNoZXM9VC5kYXNoKSxcIm1hcmtlclwiaW4gZSl7dmFyIEk9aChlKTthLnNjYXR0ZXJDb2xvcj11KEEsMSxDKSxhLnNjYXR0ZXJTaXplPV8oQS5zaXplLEMseCwyMCxJKSxhLnNjYXR0ZXJNYXJrZXI9XyhBLnN5bWJvbCxDLGIsXCJcXHUyNWNmXCIpLGEuc2NhdHRlckxpbmVXaWR0aD1BLmxpbmUud2lkdGgsYS5zY2F0dGVyTGluZUNvbG9yPXUoQS5saW5lLDEsQyksYS5zY2F0dGVyQW5nbGU9MH1cInRleHRwb3NpdGlvblwiaW4gZSYmKGEudGV4dE9mZnNldD1mdW5jdGlvbih0KXt2YXIgZT1bMCwwXTtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWVbcl09WzAsMF0sdFtyXSYmKGVbcl1bMF09bSh0W3JdKSxlW3JdWzFdPXkodFtyXSkpO2Vsc2UgZVswXT1tKHQpLGVbMV09eSh0KTtyZXR1cm4gZX0oZS50ZXh0cG9zaXRpb24pLGEudGV4dENvbG9yPXUoZS50ZXh0Zm9udCwxLEMpLGEudGV4dFNpemU9XyhlLnRleHRmb250LnNpemUsQyxsLmlkZW50aXR5LDEyKSxhLnRleHRGb250PWUudGV4dGZvbnQuZmFtaWx5LGEudGV4dEFuZ2xlPTApO3ZhciBEPVtcInhcIixcInlcIixcInpcIl07Zm9yKGEucHJvamVjdD1bITEsITEsITFdLGEucHJvamVjdFNjYWxlPVsxLDEsMV0sYS5wcm9qZWN0T3BhY2l0eT1bMSwxLDFdLG89MDtvPDM7KytvKXt2YXIgUD1lLnByb2plY3Rpb25bRFtvXV07KGEucHJvamVjdFtvXT1QLnNob3cpJiYoYS5wcm9qZWN0T3BhY2l0eVtvXT1QLm9wYWNpdHksYS5wcm9qZWN0U2NhbGVbb109UC5zY2FsZSl9YS5lcnJvckJvdW5kcz1kKGUsZyxwKTt2YXIgUj1mdW5jdGlvbih0KXtmb3IodmFyIGU9WzAsMCwwXSxyPVtbMCwwLDBdLFswLDAsMF0sWzAsMCwwXV0sbj1bMSwxLDFdLGk9MDtpPDM7aSsrKXt2YXIgYT10W2ldO2EmJiExIT09YS5jb3B5X3pzdHlsZSYmITEhPT10WzJdLnZpc2libGUmJihhPXRbMl0pLGEmJmEudmlzaWJsZSYmKGVbaV09YS53aWR0aC8yLHJbaV09YyhhLmNvbG9yKSxuW2ldPWEudGhpY2tuZXNzKX1yZXR1cm57Y2FwU2l6ZTplLGNvbG9yOnIsbGluZVdpZHRoOm59fShbZS5lcnJvcl94LGUuZXJyb3JfeSxlLmVycm9yX3pdKTtyZXR1cm4gYS5lcnJvckNvbG9yPVIuY29sb3IsYS5lcnJvckxpbmVXaWR0aD1SLmxpbmVXaWR0aCxhLmVycm9yQ2FwU2l6ZT1SLmNhcFNpemUsYS5kZWxhdW5heUF4aXM9ZS5zdXJmYWNlYXhpcyxhLmRlbGF1bmF5Q29sb3I9YyhlLnN1cmZhY2Vjb2xvciksYX1mdW5jdGlvbiBrKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBlPXRbMF07cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJih0PWUpLFwicmdiKFwiK3Quc2xpY2UoMCwzKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQoMjU1KnQpfSkrXCIpXCJ9cmV0dXJuIG51bGx9di5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0JiYodC5vYmplY3Q9PT10aGlzLmxpbmVQbG90fHx0Lm9iamVjdD09PXRoaXMuZGVsYXVuYXlNZXNofHx0Lm9iamVjdD09PXRoaXMudGV4dE1hcmtlcnN8fHQub2JqZWN0PT09dGhpcy5zY2F0dGVyUGxvdCkpe3ZhciBlPXQuaW5kZXg9dC5kYXRhLmluZGV4O3JldHVybiB0Lm9iamVjdC5oaWdobGlnaHQmJnQub2JqZWN0LmhpZ2hsaWdodChudWxsKSx0aGlzLnNjYXR0ZXJQbG90JiYodC5vYmplY3Q9dGhpcy5zY2F0dGVyUGxvdCx0aGlzLnNjYXR0ZXJQbG90LmhpZ2hsaWdodCh0LmRhdGEpKSx0LnRleHRMYWJlbD1cIlwiLHRoaXMudGV4dExhYmVscyYmKEFycmF5LmlzQXJyYXkodGhpcy50ZXh0TGFiZWxzKT8odGhpcy50ZXh0TGFiZWxzW2VdfHwwPT09dGhpcy50ZXh0TGFiZWxzW2VdKSYmKHQudGV4dExhYmVsPXRoaXMudGV4dExhYmVsc1tlXSk6dC50ZXh0TGFiZWw9dGhpcy50ZXh0TGFiZWxzKSx0LnRyYWNlQ29vcmRpbmF0ZT1bdGhpcy5kYXRhLnhbZV0sdGhpcy5kYXRhLnlbZV0sdGhpcy5kYXRhLnpbZV1dLCEwfX0sdi51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGUscixsLGMsdT10aGlzLnNjZW5lLmdscGxvdC5nbCxoPWYuc29saWQ7dGhpcy5kYXRhPXQ7dmFyIHA9dyh0aGlzLnNjZW5lLHQpO1wibW9kZVwiaW4gcCYmKHRoaXMubW9kZT1wLm1vZGUpLFwibGluZURhc2hlc1wiaW4gcCYmcC5saW5lRGFzaGVzIGluIGYmJihoPWZbcC5saW5lRGFzaGVzXSksdGhpcy5jb2xvcj1rKHAuc2NhdHRlckNvbG9yKXx8ayhwLmxpbmVDb2xvciksdGhpcy5kYXRhUG9pbnRzPXAucG9zaXRpb24sZT17Z2w6dGhpcy5zY2VuZS5nbHBsb3QuZ2wscG9zaXRpb246cC5wb3NpdGlvbixjb2xvcjpwLmxpbmVDb2xvcixsaW5lV2lkdGg6cC5saW5lV2lkdGh8fDEsZGFzaGVzOmhbMF0sZGFzaFNjYWxlOmhbMV0sb3BhY2l0eTp0Lm9wYWNpdHksY29ubmVjdEdhcHM6dC5jb25uZWN0Z2Fwc30sLTEhPT10aGlzLm1vZGUuaW5kZXhPZihcImxpbmVzXCIpP3RoaXMubGluZVBsb3Q/dGhpcy5saW5lUGxvdC51cGRhdGUoZSk6KHRoaXMubGluZVBsb3Q9bihlKSx0aGlzLmxpbmVQbG90Ll90cmFjZT10aGlzLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLmxpbmVQbG90KSk6dGhpcy5saW5lUGxvdCYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmxpbmVQbG90KSx0aGlzLmxpbmVQbG90LmRpc3Bvc2UoKSx0aGlzLmxpbmVQbG90PW51bGwpO3ZhciBkPXQub3BhY2l0eTtpZih0Lm1hcmtlciYmdC5tYXJrZXIub3BhY2l0eSYmKGQqPXQubWFya2VyLm9wYWNpdHkpLHI9e2dsOnRoaXMuc2NlbmUuZ2xwbG90LmdsLHBvc2l0aW9uOnAucG9zaXRpb24sY29sb3I6cC5zY2F0dGVyQ29sb3Isc2l6ZTpwLnNjYXR0ZXJTaXplLGdseXBoOnAuc2NhdHRlck1hcmtlcixvcGFjaXR5OmQsb3J0aG9ncmFwaGljOiEwLGxpbmVXaWR0aDpwLnNjYXR0ZXJMaW5lV2lkdGgsbGluZUNvbG9yOnAuc2NhdHRlckxpbmVDb2xvcixwcm9qZWN0OnAucHJvamVjdCxwcm9qZWN0U2NhbGU6cC5wcm9qZWN0U2NhbGUscHJvamVjdE9wYWNpdHk6cC5wcm9qZWN0T3BhY2l0eX0sLTEhPT10aGlzLm1vZGUuaW5kZXhPZihcIm1hcmtlcnNcIik/dGhpcy5zY2F0dGVyUGxvdD90aGlzLnNjYXR0ZXJQbG90LnVwZGF0ZShyKToodGhpcy5zY2F0dGVyUGxvdD1pKHIpLHRoaXMuc2NhdHRlclBsb3QuX3RyYWNlPXRoaXMsdGhpcy5zY2F0dGVyUGxvdC5oaWdobGlnaHRTY2FsZT0xLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLnNjYXR0ZXJQbG90KSk6dGhpcy5zY2F0dGVyUGxvdCYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLnNjYXR0ZXJQbG90KSx0aGlzLnNjYXR0ZXJQbG90LmRpc3Bvc2UoKSx0aGlzLnNjYXR0ZXJQbG90PW51bGwpLGM9e2dsOnRoaXMuc2NlbmUuZ2xwbG90LmdsLHBvc2l0aW9uOnAucG9zaXRpb24sZ2x5cGg6cC50ZXh0LGNvbG9yOnAudGV4dENvbG9yLHNpemU6cC50ZXh0U2l6ZSxhbmdsZTpwLnRleHRBbmdsZSxhbGlnbm1lbnQ6cC50ZXh0T2Zmc2V0LGZvbnQ6cC50ZXh0Rm9udCxvcnRob2dyYXBoaWM6ITAsbGluZVdpZHRoOjAscHJvamVjdDohMSxvcGFjaXR5OnQub3BhY2l0eX0sdGhpcy50ZXh0TGFiZWxzPXQuaG92ZXJ0ZXh0fHx0LnRleHQsLTEhPT10aGlzLm1vZGUuaW5kZXhPZihcInRleHRcIik/dGhpcy50ZXh0TWFya2Vycz90aGlzLnRleHRNYXJrZXJzLnVwZGF0ZShjKToodGhpcy50ZXh0TWFya2Vycz1pKGMpLHRoaXMudGV4dE1hcmtlcnMuX3RyYWNlPXRoaXMsdGhpcy50ZXh0TWFya2Vycy5oaWdobGlnaHRTY2FsZT0xLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLnRleHRNYXJrZXJzKSk6dGhpcy50ZXh0TWFya2VycyYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLnRleHRNYXJrZXJzKSx0aGlzLnRleHRNYXJrZXJzLmRpc3Bvc2UoKSx0aGlzLnRleHRNYXJrZXJzPW51bGwpLGw9e2dsOnRoaXMuc2NlbmUuZ2xwbG90LmdsLHBvc2l0aW9uOnAucG9zaXRpb24sY29sb3I6cC5lcnJvckNvbG9yLGVycm9yOnAuZXJyb3JCb3VuZHMsbGluZVdpZHRoOnAuZXJyb3JMaW5lV2lkdGgsY2FwU2l6ZTpwLmVycm9yQ2FwU2l6ZSxvcGFjaXR5OnQub3BhY2l0eX0sdGhpcy5lcnJvckJhcnM/cC5lcnJvckJvdW5kcz90aGlzLmVycm9yQmFycy51cGRhdGUobCk6KHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmVycm9yQmFycyksdGhpcy5lcnJvckJhcnMuZGlzcG9zZSgpLHRoaXMuZXJyb3JCYXJzPW51bGwpOnAuZXJyb3JCb3VuZHMmJih0aGlzLmVycm9yQmFycz1hKGwpLHRoaXMuZXJyb3JCYXJzLl90cmFjZT10aGlzLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLmVycm9yQmFycykpLHAuZGVsYXVuYXlBeGlzPj0wKXt2YXIgZz1mdW5jdGlvbih0LGUscil7dmFyIG4saT0ocisxKSUzLGE9KHIrMiklMyxvPVtdLGw9W107Zm9yKG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGM9dFtuXTshaXNOYU4oY1tpXSkmJmlzRmluaXRlKGNbaV0pJiYhaXNOYU4oY1thXSkmJmlzRmluaXRlKGNbYV0pJiYoby5wdXNoKFtjW2ldLGNbYV1dKSxsLnB1c2gobikpfXZhciB1PXMobyk7Zm9yKG49MDtuPHUubGVuZ3RoOysrbilmb3IodmFyIGg9dVtuXSxmPTA7ZjxoLmxlbmd0aDsrK2YpaFtmXT1sW2hbZl1dO3JldHVybntwb3NpdGlvbnM6dCxjZWxsczp1LG1lc2hDb2xvcjplfX0ocC5wb3NpdGlvbixwLmRlbGF1bmF5Q29sb3IscC5kZWxhdW5heUF4aXMpO2cub3BhY2l0eT10Lm9wYWNpdHksdGhpcy5kZWxhdW5heU1lc2g/dGhpcy5kZWxhdW5heU1lc2gudXBkYXRlKGcpOihnLmdsPXUsdGhpcy5kZWxhdW5heU1lc2g9byhnKSx0aGlzLmRlbGF1bmF5TWVzaC5fdHJhY2U9dGhpcyx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5kZWxhdW5heU1lc2gpKX1lbHNlIHRoaXMuZGVsYXVuYXlNZXNoJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZGVsYXVuYXlNZXNoKSx0aGlzLmRlbGF1bmF5TWVzaC5kaXNwb3NlKCksdGhpcy5kZWxhdW5heU1lc2g9bnVsbCl9LHYuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMubGluZVBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5saW5lUGxvdCksdGhpcy5saW5lUGxvdC5kaXNwb3NlKCkpLHRoaXMuc2NhdHRlclBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5zY2F0dGVyUGxvdCksdGhpcy5zY2F0dGVyUGxvdC5kaXNwb3NlKCkpLHRoaXMuZXJyb3JCYXJzJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZXJyb3JCYXJzKSx0aGlzLmVycm9yQmFycy5kaXNwb3NlKCkpLHRoaXMudGV4dE1hcmtlcnMmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy50ZXh0TWFya2VycyksdGhpcy50ZXh0TWFya2Vycy5kaXNwb3NlKCkpLHRoaXMuZGVsYXVuYXlNZXNoJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZGVsYXVuYXlNZXNoKSx0aGlzLmRlbGF1bmF5TWVzaC5kaXNwb3NlKCkpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgZyh0LGUudWlkKTtyZXR1cm4gci51cGRhdGUoZSkscn19LHtcIi4uLy4uL2NvbnN0YW50cy9nbDNkX2Rhc2hlc1wiOjY3NSxcIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnNcIjo2NzYsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yXCI6Njk4LFwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiOjcyNCxcIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jXCI6MTA2OSxcIi4vY2FsY19lcnJvcnNcIjoxMDgxLFwiZGVsYXVuYXktdHJpYW5ndWxhdGVcIjoxNTcsXCJnbC1lcnJvcjNkXCI6MjQ0LFwiZ2wtbGluZTNkXCI6MjUyLFwiZ2wtbWVzaDNkXCI6Mjc3LFwiZ2wtc2NhdHRlcjNkXCI6Mjk0fV0sMTA4MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiKSxvPXQoXCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0c1wiKSxzPXQoXCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHNcIiksbD10KFwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzXCIpLGM9dChcIi4vYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7ZnVuY3Rpb24gaChyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsYyxyLG4pfWlmKGZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPTAsbz1yKFwieFwiKSxzPXIoXCJ5XCIpLGw9cihcInpcIik7bi5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcImhhbmRsZVRyYWNlRGVmYXVsdHNcIikodCxlLFtcInhcIixcInlcIixcInpcIl0saSksbyYmcyYmbCYmKGE9TWF0aC5taW4oby5sZW5ndGgscy5sZW5ndGgsbC5sZW5ndGgpLGUuX2xlbmd0aD1lLl94bGVuZ3RoPWUuX3lsZW5ndGg9ZS5femxlbmd0aD1hKTtyZXR1cm4gYX0odCxlLGgsdSkpe2goXCJ0ZXh0XCIpLGgoXCJob3ZlcnRleHRcIiksaChcImhvdmVydGVtcGxhdGVcIiksaChcIm1vZGVcIiksYS5oYXNMaW5lcyhlKSYmKGgoXCJjb25uZWN0Z2Fwc1wiKSxzKHQsZSxyLHUsaCkpLGEuaGFzTWFya2VycyhlKSYmbyh0LGUscix1LGgse25vU2VsZWN0OiEwfSksYS5oYXNUZXh0KGUpJiZsKHQsZSx1LGgse25vU2VsZWN0OiEwfSk7dmFyIGY9KGUubGluZXx8e30pLmNvbG9yLHA9KGUubWFya2VyfHx7fSkuY29sb3I7aChcInN1cmZhY2VheGlzXCIpPj0wJiZoKFwic3VyZmFjZWNvbG9yXCIsZnx8cCk7Zm9yKHZhciBkPVtcInhcIixcInlcIixcInpcIl0sZz0wO2c8MzsrK2cpe3ZhciB2PVwicHJvamVjdGlvbi5cIitkW2ddO2goditcIi5zaG93XCIpJiYoaCh2K1wiLm9wYWNpdHlcIiksaCh2K1wiLnNjYWxlXCIpKX12YXIgbT1uLmdldENvbXBvbmVudE1ldGhvZChcImVycm9yYmFyc1wiLFwic3VwcGx5RGVmYXVsdHNcIik7bSh0LGUsZnx8cHx8cix7YXhpczpcInpcIn0pLG0odCxlLGZ8fHB8fHIse2F4aXM6XCJ5XCIsaW5oZXJpdDpcInpcIn0pLG0odCxlLGZ8fHB8fHIse2F4aXM6XCJ4XCIsaW5oZXJpdDpcInpcIn0pfWVsc2UgZS52aXNpYmxlPSExfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHNcIjoxMDY1LFwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHNcIjoxMDcxLFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiOjEwNzYsXCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHNcIjoxMDc3LFwiLi9hdHRyaWJ1dGVzXCI6MTA3OX1dLDEwODQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLnBsb3Q9dChcIi4vY29udmVydFwiKSxuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLm1hcmtlclN5bWJvbHM9dChcIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNvbG9yYmFyPVt7Y29udGFpbmVyOlwibWFya2VyXCIsbWluOlwiY21pblwiLG1heDpcImNtYXhcIn0se2NvbnRhaW5lcjpcImxpbmVcIixtaW46XCJjbWluXCIsbWF4OlwiY21heFwifV0sbi5jYWxjPXQoXCIuL2NhbGNcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJzY2F0dGVyM2RcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9nbDNkXCIpLG4uY2F0ZWdvcmllcz1bXCJnbDNkXCIsXCJzeW1ib2xzXCIsXCJzaG93TGVnZW5kXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2Vyc1wiOjY3NixcIi4uLy4uL3Bsb3RzL2dsM2RcIjo3ODksXCIuL2F0dHJpYnV0ZXNcIjoxMDc5LFwiLi9jYWxjXCI6MTA4MCxcIi4vY29udmVydFwiOjEwODIsXCIuL2RlZmF1bHRzXCI6MTA4M31dLDEwODU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCIpLGw9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxjPW4ubWFya2VyLHU9bi5saW5lLGg9Yy5saW5lO2UuZXhwb3J0cz17Y2FycGV0Ont2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGE6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGI6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LG1vZGU6bCh7fSxuLm1vZGUse2RmbHQ6XCJtYXJrZXJzXCJ9KSx0ZXh0Omwoe30sbi50ZXh0LHt9KSxob3ZlcnRleHQ6bCh7fSxuLmhvdmVydGV4dCx7fSksbGluZTp7Y29sb3I6dS5jb2xvcix3aWR0aDp1LndpZHRoLGRhc2g6dS5kYXNoLHNoYXBlOmwoe30sdS5zaGFwZSx7dmFsdWVzOltcImxpbmVhclwiLFwic3BsaW5lXCJdfSksc21vb3RoaW5nOnUuc21vb3RoaW5nLGVkaXRUeXBlOlwiY2FsY1wifSxjb25uZWN0Z2FwczpuLmNvbm5lY3RnYXBzLGZpbGw6bCh7fSxuLmZpbGwse3ZhbHVlczpbXCJub25lXCIsXCJ0b3NlbGZcIixcInRvbmV4dFwiXSxkZmx0Olwibm9uZVwifSksZmlsbGNvbG9yOm4uZmlsbGNvbG9yLG1hcmtlcjpsKHtzeW1ib2w6Yy5zeW1ib2wsb3BhY2l0eTpjLm9wYWNpdHksbWF4ZGlzcGxheWVkOmMubWF4ZGlzcGxheWVkLHNpemU6Yy5zaXplLHNpemVyZWY6Yy5zaXplcmVmLHNpemVtaW46Yy5zaXplbWluLHNpemVtb2RlOmMuc2l6ZW1vZGUsbGluZTpsKHt3aWR0aDpoLndpZHRoLGVkaXRUeXBlOlwiY2FsY1wifSxvKFwibWFya2VyLmxpbmVcIikpLGdyYWRpZW50OmMuZ3JhZGllbnQsZWRpdFR5cGU6XCJjYWxjXCJ9LG8oXCJtYXJrZXJcIikse2NvbG9yYmFyOnN9KSx0ZXh0Zm9udDpuLnRleHRmb250LHRleHRwb3NpdGlvbjpuLnRleHRwb3NpdGlvbixzZWxlY3RlZDpuLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6bi51bnNlbGVjdGVkLGhvdmVyaW5mbzpsKHt9LGkuaG92ZXJpbmZvLHtmbGFnczpbXCJhXCIsXCJiXCIsXCJ0ZXh0XCIsXCJuYW1lXCJdfSksaG92ZXJvbjpuLmhvdmVyb24saG92ZXJ0ZW1wbGF0ZTphKCl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIjo1NzksXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDYsXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIjoxMDUyfV0sMTA4NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsY1wiKSxhPXQoXCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YVwiKSxvPXQoXCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uXCIpLHM9dChcIi4uL3NjYXR0ZXIvY2FsY1wiKS5jYWxjTWFya2VyU2l6ZSxsPXQoXCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUuX2NhcnBldFRyYWNlPWwodCxlKTtpZihyJiZyLnZpc2libGUmJlwibGVnZW5kb25seVwiIT09ci52aXNpYmxlKXt2YXIgYztlLnhheGlzPXIueGF4aXMsZS55YXhpcz1yLnlheGlzO3ZhciB1LGgsZj1lLl9sZW5ndGgscD1uZXcgQXJyYXkoZiksZD0hMTtmb3IoYz0wO2M8ZjtjKyspaWYodT1lLmFbY10saD1lLmJbY10sbih1KSYmbihoKSl7dmFyIGc9ci5hYjJ4eSgrdSwraCwhMCksdj1yLmlzVmlzaWJsZSgrdSwraCk7dnx8KGQ9ITApLHBbY109e3g6Z1swXSx5OmdbMV0sYTp1LGI6aCx2aXM6dn19ZWxzZSBwW2NdPXt4OiExLHk6ITF9O3JldHVybiBlLl9uZWVkc0N1bGw9ZCxwWzBdLmNhcnBldD1yLHBbMF0udHJhY2U9ZSxzKGUsZiksaSh0LGUpLGEocCxlKSxvKHAsZSkscH19fSx7XCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkXCI6ODk3LFwiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGFcIjoxMDUxLFwiLi4vc2NhdHRlci9jYWxjXCI6MTA1MyxcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIjoxMDU0LFwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGNcIjoxMDU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSwxMDg3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi9zY2F0dGVyL2NvbnN0YW50c1wiKSxhPXQoXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCIpLG89dChcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCIpLHM9dChcIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0c1wiKSxsPXQoXCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHNcIiksYz10KFwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzXCIpLHU9dChcIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzXCIpLGg9dChcIi4vYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsZil7ZnVuY3Rpb24gcChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsaCxyLGkpfXAoXCJjYXJwZXRcIiksZS54YXhpcz1cInhcIixlLnlheGlzPVwieVwiO3ZhciBkPXAoXCJhXCIpLGc9cChcImJcIiksdj1NYXRoLm1pbihkLmxlbmd0aCxnLmxlbmd0aCk7aWYodil7ZS5fbGVuZ3RoPXYscChcInRleHRcIikscChcImhvdmVydGV4dFwiKSxwKFwibW9kZVwiLHY8aS5QVFNfTElORVNPTkxZP1wibGluZXMrbWFya2Vyc1wiOlwibGluZXNcIiksYS5oYXNMaW5lcyhlKSYmKHModCxlLHIsZixwKSxsKHQsZSxwKSxwKFwiY29ubmVjdGdhcHNcIikpLGEuaGFzTWFya2VycyhlKSYmbyh0LGUscixmLHAse2dyYWRpZW50OiEwfSksYS5oYXNUZXh0KGUpJiZjKHQsZSxmLHApO3ZhciBtPVtdOyhhLmhhc01hcmtlcnMoZSl8fGEuaGFzVGV4dChlKSkmJihwKFwibWFya2VyLm1heGRpc3BsYXllZFwiKSxtLnB1c2goXCJwb2ludHNcIikpLHAoXCJmaWxsXCIpLFwibm9uZVwiIT09ZS5maWxsJiYodSh0LGUscixwKSxhLmhhc0xpbmVzKGUpfHxsKHQsZSxwKSksXCJ0b25leHRcIiE9PWUuZmlsbCYmXCJ0b3NlbGZcIiE9PWUuZmlsbHx8bS5wdXNoKFwiZmlsbHNcIiksXCJmaWxsc1wiIT09cChcImhvdmVyb25cIixtLmpvaW4oXCIrXCIpfHxcInBvaW50c1wiKSYmcChcImhvdmVydGVtcGxhdGVcIiksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUscCl9ZWxzZSBlLnZpc2libGU9ITF9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9zY2F0dGVyL2NvbnN0YW50c1wiOjEwNTYsXCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0c1wiOjEwNjEsXCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHNcIjoxMDY1LFwiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzXCI6MTA2NyxcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCI6MTA3MSxcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzXCI6MTA3NyxcIi4vYXR0cmlidXRlc1wiOjEwODV9XSwxMDg4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9bltpXTtyZXR1cm4gdC5hPWEuYSx0LmI9YS5iLHQueT1hLnksdH19LHt9XSwxMDg5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3NjYXR0ZXIvaG92ZXJcIiksaT10KFwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHRcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4odCxlLHIsYSk7aWYobyYmITEhPT1vWzBdLmluZGV4KXt2YXIgcz1vWzBdO2lmKHZvaWQgMD09PXMuaW5kZXgpe3ZhciBsPTEtcy55MC90LnlhLl9sZW5ndGgsYz10LnhhLl9sZW5ndGgsdT1jKmwvMixoPWMtdTtyZXR1cm4gcy54MD1NYXRoLm1heChNYXRoLm1pbihzLngwLGgpLHUpLHMueDE9TWF0aC5tYXgoTWF0aC5taW4ocy54MSxoKSx1KSxvfXZhciBmPXMuY2Rbcy5pbmRleF07cy5hPWYuYSxzLmI9Zi5iLHMueExhYmVsVmFsPXZvaWQgMCxzLnlMYWJlbFZhbD12b2lkIDA7dmFyIHA9cy50cmFjZSxkPXAuX2NhcnBldCxnPWQuYWIyaWooW2YuYSxmLmJdKSx2PU1hdGguZmxvb3IoZ1swXSksbT1nWzBdLXYseT1NYXRoLmZsb29yKGdbMV0pLHg9Z1sxXS15LGI9ZC5ldmFseHkoW10sdix5LG0seCk7cy55TGFiZWw9YlsxXS50b0ZpeGVkKDMpLGRlbGV0ZSBzLnRleHQ7dmFyIF89W107aWYoIXAuaG92ZXJ0ZW1wbGF0ZSl7dmFyIHc9KGYuaGl8fHAuaG92ZXJpbmZvKS5zcGxpdChcIitcIik7LTEhPT13LmluZGV4T2YoXCJhbGxcIikmJih3PVtcImFcIixcImJcIixcInRleHRcIl0pLC0xIT09dy5pbmRleE9mKFwiYVwiKSYmayhkLmFheGlzLGYuYSksLTEhPT13LmluZGV4T2YoXCJiXCIpJiZrKGQuYmF4aXMsZi5iKSxfLnB1c2goXCJ5OiBcIitzLnlMYWJlbCksLTEhPT13LmluZGV4T2YoXCJ0ZXh0XCIpJiZpKGYscCxfKSxzLmV4dHJhVGV4dD1fLmpvaW4oXCI8YnI+XCIpfXJldHVybiBvfWZ1bmN0aW9uIGsodCxlKXt2YXIgcjtyPXQubGFiZWxwcmVmaXgmJnQubGFiZWxwcmVmaXgubGVuZ3RoPjA/dC5sYWJlbHByZWZpeC5yZXBsYWNlKC8gPSAkLyxcIlwiKTp0Ll9ob3ZlcnRpdGxlLF8ucHVzaChyK1wiOiBcIitlLnRvRml4ZWQoMykrdC5sYWJlbHN1ZmZpeCl9fX0se1wiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHRcIjoxMDYwLFwiLi4vc2NhdHRlci9ob3ZlclwiOjEwNjN9XSwxMDkwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNvbG9yYmFyPXQoXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiKSxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLnBsb3Q9dChcIi4vcGxvdFwiKSxuLnN0eWxlPXQoXCIuLi9zY2F0dGVyL3N0eWxlXCIpLnN0eWxlLG4uc3R5bGVPblNlbGVjdD10KFwiLi4vc2NhdHRlci9zdHlsZVwiKS5zdHlsZU9uU2VsZWN0LG4uaG92ZXJQb2ludHM9dChcIi4vaG92ZXJcIiksbi5zZWxlY3RQb2ludHM9dChcIi4uL3NjYXR0ZXIvc2VsZWN0XCIpLG4uZXZlbnREYXRhPXQoXCIuL2V2ZW50X2RhdGFcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJzY2F0dGVyY2FycGV0XCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCIpLG4uY2F0ZWdvcmllcz1bXCJzdmdcIixcImNhcnBldFwiLFwic3ltYm9sc1wiLFwic2hvd0xlZ2VuZFwiLFwiY2FycGV0RGVwZW5kZW50XCIsXCJ6b29tU2NhbGVcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIjo3NjAsXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiOjEwNzAsXCIuLi9zY2F0dGVyL3NlbGVjdFwiOjEwNzMsXCIuLi9zY2F0dGVyL3N0eWxlXCI6MTA3NSxcIi4vYXR0cmlidXRlc1wiOjEwODUsXCIuL2NhbGNcIjoxMDg2LFwiLi9kZWZhdWx0c1wiOjEwODcsXCIuL2V2ZW50X2RhdGFcIjoxMDg4LFwiLi9ob3ZlclwiOjEwODksXCIuL3Bsb3RcIjoxMDkxfV0sMTA5MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9zY2F0dGVyL3Bsb3RcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcyxsLGMsdT1yWzBdWzBdLmNhcnBldCxoPXt4YXhpczppLmdldEZyb21JZCh0LHUueGF4aXN8fFwieFwiKSx5YXhpczppLmdldEZyb21JZCh0LHUueWF4aXN8fFwieVwiKSxwbG90OmUucGxvdH07Zm9yKG4odCxoLHIsbykscz0wO3M8ci5sZW5ndGg7cysrKWw9cltzXVswXS50cmFjZSxjPW8uc2VsZWN0QWxsKFwiZy50cmFjZVwiK2wudWlkK1wiIC5qcy1saW5lXCIpLGEuc2V0Q2xpcFVybChjLHJbc11bMF0uY2FycGV0Ll9jbGlwUGF0aElkLHQpfX0se1wiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9zY2F0dGVyL3Bsb3RcIjoxMDcyfV0sMTA5MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxpPXQoXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlc1wiKS5kYXNoLGw9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxjPXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsLHU9aS5tYXJrZXIsaD1pLmxpbmUsZj11LmxpbmU7ZS5leHBvcnRzPWMoe2xvbjp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIn0sbGF0Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwifSxsb2NhdGlvbnM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCJ9LGxvY2F0aW9ubW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiSVNPLTNcIixcIlVTQS1zdGF0ZXNcIixcImNvdW50cnkgbmFtZXNcIl0sZGZsdDpcIklTTy0zXCJ9LG1vZGU6bCh7fSxpLm1vZGUse2RmbHQ6XCJtYXJrZXJzXCJ9KSx0ZXh0Omwoe30saS50ZXh0LHt9KSxob3ZlcnRleHQ6bCh7fSxpLmhvdmVydGV4dCx7fSksdGV4dGZvbnQ6aS50ZXh0Zm9udCx0ZXh0cG9zaXRpb246aS50ZXh0cG9zaXRpb24sbGluZTp7Y29sb3I6aC5jb2xvcix3aWR0aDpoLndpZHRoLGRhc2g6c30sY29ubmVjdGdhcHM6aS5jb25uZWN0Z2FwcyxtYXJrZXI6bCh7c3ltYm9sOnUuc3ltYm9sLG9wYWNpdHk6dS5vcGFjaXR5LHNpemU6dS5zaXplLHNpemVyZWY6dS5zaXplcmVmLHNpemVtaW46dS5zaXplbWluLHNpemVtb2RlOnUuc2l6ZW1vZGUsY29sb3JiYXI6dS5jb2xvcmJhcixsaW5lOmwoe3dpZHRoOmYud2lkdGh9LG8oXCJtYXJrZXIubGluZVwiKSksZ3JhZGllbnQ6dS5ncmFkaWVudH0sbyhcIm1hcmtlclwiKSksZmlsbDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibm9uZVwiLFwidG9zZWxmXCJdLGRmbHQ6XCJub25lXCJ9LGZpbGxjb2xvcjppLmZpbGxjb2xvcixzZWxlY3RlZDppLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6aS51bnNlbGVjdGVkLGhvdmVyaW5mbzpsKHt9LGEuaG92ZXJpbmZvLHtmbGFnczpbXCJsb25cIixcImxhdFwiLFwibG9jYXRpb25cIixcInRleHRcIixcIm5hbWVcIl19KSxob3ZlcnRlbXBsYXRlOm4oKX0sXCJjYWxjXCIsXCJuZXN0ZWRcIil9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXNcIjo1OTgsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiOjc0NixcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiOjEwNTJ9XSwxMDkzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNLGE9dChcIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjXCIpLG89dChcIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhXCIpLHM9dChcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIiksbD10KFwiLi4vLi4vbGliXCIpLl87ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPUFycmF5LmlzQXJyYXkoZS5sb2NhdGlvbnMpLGM9cj9lLmxvY2F0aW9ucy5sZW5ndGg6ZS5fbGVuZ3RoLHU9bmV3IEFycmF5KGMpLGg9MDtoPGM7aCsrKXt2YXIgZj11W2hdPXt9O2lmKHIpe3ZhciBwPWUubG9jYXRpb25zW2hdO2YubG9jPVwic3RyaW5nXCI9PXR5cGVvZiBwP3A6bnVsbH1lbHNle3ZhciBkPWUubG9uW2hdLGc9ZS5sYXRbaF07bihkKSYmbihnKT9mLmxvbmxhdD1bK2QsK2ddOmYubG9ubGF0PVtpLGldfX1yZXR1cm4gbyh1LGUpLGEodCxlKSxzKHUsZSksYyYmKHVbMF0udD17bGFiZWxzOntsYXQ6bCh0LFwibGF0OlwiKStcIiBcIixsb246bCh0LFwibG9uOlwiKStcIiBcIn19KSx1fX0se1wiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhXCI6MTA1MSxcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIjoxMDU0LFwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGNcIjoxMDU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSwxMDk0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCIpLGE9dChcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCIpLG89dChcIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0c1wiKSxzPXQoXCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHNcIiksbD10KFwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHNcIiksYz10KFwiLi9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1KXtmdW5jdGlvbiBoKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxjLHIsaSl9IWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9MCxvPXIoXCJsb2NhdGlvbnNcIik7aWYobylyZXR1cm4gcihcImxvY2F0aW9ubW9kZVwiKSxhPW8ubGVuZ3RoO3JldHVybiBuPXIoXCJsb25cIil8fFtdLGk9cihcImxhdFwiKXx8W10sYT1NYXRoLm1pbihuLmxlbmd0aCxpLmxlbmd0aCksZS5fbGVuZ3RoPWEsYX0oMCxlLGgpP2UudmlzaWJsZT0hMTooaChcInRleHRcIiksaChcImhvdmVydGV4dFwiKSxoKFwiaG92ZXJ0ZW1wbGF0ZVwiKSxoKFwibW9kZVwiKSxpLmhhc0xpbmVzKGUpJiYobyh0LGUscix1LGgpLGgoXCJjb25uZWN0Z2Fwc1wiKSksaS5oYXNNYXJrZXJzKGUpJiZhKHQsZSxyLHUsaCx7Z3JhZGllbnQ6ITB9KSxpLmhhc1RleHQoZSkmJnModCxlLHUsaCksaChcImZpbGxcIiksXCJub25lXCIhPT1lLmZpbGwmJmwodCxlLHIsaCksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsaCkpfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHNcIjoxMDYxLFwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzXCI6MTA2NSxcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCI6MTA3MSxcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzXCI6MTA3NyxcIi4vYXR0cmlidXRlc1wiOjEwOTJ9XSwxMDk1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubG9uPWUubG9uLHQubGF0PWUubGF0LHQubG9jYXRpb249ZS5sb2M/ZS5sb2M6bnVsbCx0fX0se31dLDEwOTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxpPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxhPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTSxvPXQoXCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvclwiKSxzPXQoXCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dFwiKSxsPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYz10LmNkLHU9Y1swXS50cmFjZSxoPXQueGEsZj10LnlhLHA9dC5zdWJwbG90LGQ9cC5wcm9qZWN0aW9uLmlzTG9uTGF0T3ZlckVkZ2VzLGc9cC5wcm9qZWN0O2lmKG4uZ2V0Q2xvc2VzdChjLGZ1bmN0aW9uKHQpe3ZhciBuPXQubG9ubGF0O2lmKG5bMF09PT1hKXJldHVybiAxLzA7aWYoZChuKSlyZXR1cm4gMS8wO3ZhciBpPWcobiksbz1nKFtlLHJdKSxzPU1hdGguYWJzKGlbMF0tb1swXSksbD1NYXRoLmFicyhpWzFdLW9bMV0pLGM9TWF0aC5tYXgoMyx0Lm1yY3x8MCk7cmV0dXJuIE1hdGgubWF4KE1hdGguc3FydChzKnMrbCpsKS1jLDEtMy9jKX0sdCksITEhPT10LmluZGV4KXt2YXIgdj1jW3QuaW5kZXhdLG09di5sb25sYXQseT1baC5jMnAobSksZi5jMnAobSldLHg9di5tcmN8fDE7cmV0dXJuIHQueDA9eVswXS14LHQueDE9eVswXSt4LHQueTA9eVsxXS14LHQueTE9eVsxXSt4LHQubG9jPXYubG9jLHQubG9uPW1bMF0sdC5sYXQ9bVsxXSx0LmNvbG9yPW8odSx2KSx0LmV4dHJhVGV4dD1mdW5jdGlvbih0LGUscixuKXtpZih0LmhvdmVydGVtcGxhdGUpcmV0dXJuO3ZhciBhPWUuaGl8fHQuaG92ZXJpbmZvLG89XCJhbGxcIj09PWE/bC5ob3ZlcmluZm8uZmxhZ3M6YS5zcGxpdChcIitcIiksYz0tMSE9PW8uaW5kZXhPZihcImxvY2F0aW9uXCIpJiZBcnJheS5pc0FycmF5KHQubG9jYXRpb25zKSx1PS0xIT09by5pbmRleE9mKFwibG9uXCIpLGg9LTEhPT1vLmluZGV4T2YoXCJsYXRcIiksZj0tMSE9PW8uaW5kZXhPZihcInRleHRcIikscD1bXTtmdW5jdGlvbiBkKHQpe3JldHVybiBpLnRpY2tUZXh0KHIsci5jMmwodCksXCJob3ZlclwiKS50ZXh0K1wiXFx4YjBcIn1jP3AucHVzaChlLmxvYyk6dSYmaD9wLnB1c2goXCIoXCIrZChlLmxvbmxhdFswXSkrXCIsIFwiK2QoZS5sb25sYXRbMV0pK1wiKVwiKTp1P3AucHVzaChuLmxvbitkKGUubG9ubGF0WzBdKSk6aCYmcC5wdXNoKG4ubGF0K2QoZS5sb25sYXRbMV0pKTtmJiZzKGUsdCxwKTtyZXR1cm4gcC5qb2luKFwiPGJyPlwiKX0odSx2LHAubW9ja0F4aXMsY1swXS50LmxhYmVscyksdC5ob3ZlcnRlbXBsYXRlPXUuaG92ZXJ0ZW1wbGF0ZSxbdF19fX0se1wiLi4vLi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0XCI6MTA2MCxcIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yXCI6MTA2MixcIi4vYXR0cmlidXRlc1wiOjEwOTJ9XSwxMDk3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNvbG9yYmFyPXQoXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiKSxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLnBsb3Q9dChcIi4vcGxvdFwiKSxuLnN0eWxlPXQoXCIuL3N0eWxlXCIpLG4uc3R5bGVPblNlbGVjdD10KFwiLi4vc2NhdHRlci9zdHlsZVwiKS5zdHlsZU9uU2VsZWN0LG4uaG92ZXJQb2ludHM9dChcIi4vaG92ZXJcIiksbi5ldmVudERhdGE9dChcIi4vZXZlbnRfZGF0YVwiKSxuLnNlbGVjdFBvaW50cz10KFwiLi9zZWxlY3RcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJzY2F0dGVyZ2VvXCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvZ2VvXCIpLG4uY2F0ZWdvcmllcz1bXCJnZW9cIixcInN5bWJvbHNcIixcInNob3dMZWdlbmRcIixcInNjYXR0ZXItbGlrZVwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4uLy4uL3Bsb3RzL2dlb1wiOjc3OSxcIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyXCI6MTA3MCxcIi4uL3NjYXR0ZXIvc3R5bGVcIjoxMDc1LFwiLi9hdHRyaWJ1dGVzXCI6MTA5MixcIi4vY2FsY1wiOjEwOTMsXCIuL2RlZmF1bHRzXCI6MTA5NCxcIi4vZXZlbnRfZGF0YVwiOjEwOTUsXCIuL2hvdmVyXCI6MTA5NixcIi4vcGxvdFwiOjEwOTgsXCIuL3NlbGVjdFwiOjEwOTksXCIuL3N0eWxlXCI6MTEwMH1dLDEwOTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNLG89dChcIi4uLy4uL2xpYi90b3BvanNvbl91dGlsc1wiKS5nZXRUb3BvanNvbkZlYXR1cmVzLHM9dChcIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHNcIikubG9jYXRpb25Ub0ZlYXR1cmUsbD10KFwiLi4vLi4vbGliL2dlb2pzb25fdXRpbHNcIiksYz10KFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiKSx1PXQoXCIuL3N0eWxlXCIpO2Z1bmN0aW9uIGgodCxlKXt2YXIgcj10WzBdLnRyYWNlO2lmKEFycmF5LmlzQXJyYXkoci5sb2NhdGlvbnMpKWZvcih2YXIgbj1vKHIsZSksaT1yLmxvY2F0aW9ubW9kZSxsPTA7bDx0Lmxlbmd0aDtsKyspe3ZhciBjPXRbbF0sdT1zKGksYy5sb2Msbik7Yy5sb25sYXQ9dT91LnByb3BlcnRpZXMuY3Q6W2EsYV19fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspaChyW29dLGUudG9wb2pzb24pO2Z1bmN0aW9uIHModCxlKXt0LmxvbmxhdFswXT09PWEmJm4uc2VsZWN0KGUpLnJlbW92ZSgpfXZhciBmPWUubGF5ZXJzLmZyb250cGxvdC5zZWxlY3QoXCIuc2NhdHRlcmxheWVyXCIpLHA9aS5tYWtlVHJhY2VHcm91cHMoZixyLFwidHJhY2Ugc2NhdHRlcmdlb1wiKTtwLnNlbGVjdEFsbChcIipcIikucmVtb3ZlKCkscC5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWVbMF0ubm9kZTM9bi5zZWxlY3QodGhpcyksYT1lWzBdLnRyYWNlO2lmKGMuaGFzTGluZXMoYSl8fFwibm9uZVwiIT09YS5maWxsKXt2YXIgbz1sLmNhbGNUcmFjZVRvTGluZUNvb3JkcyhlKSxoPVwibm9uZVwiIT09YS5maWxsP2wubWFrZVBvbHlnb24obyk6bC5tYWtlTGluZShvKTtyLnNlbGVjdEFsbChcInBhdGguanMtbGluZVwiKS5kYXRhKFt7Z2VvanNvbjpoLHRyYWNlOmF9XSkuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoXCJqcy1saW5lXCIsITApLnN0eWxlKFwic3Ryb2tlLW1pdGVybGltaXRcIiwyKX1jLmhhc01hcmtlcnMoYSkmJnIuc2VsZWN0QWxsKFwicGF0aC5wb2ludFwiKS5kYXRhKGkuaWRlbnRpdHkpLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5jbGFzc2VkKFwicG9pbnRcIiwhMCkuZWFjaChmdW5jdGlvbih0KXtzKHQsdGhpcyl9KSxjLmhhc1RleHQoYSkmJnIuc2VsZWN0QWxsKFwiZ1wiKS5kYXRhKGkuaWRlbnRpdHkpLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hcHBlbmQoXCJ0ZXh0XCIpLmVhY2goZnVuY3Rpb24odCl7cyh0LHRoaXMpfSksdSh0LGUpfSl9fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlsc1wiOjY5NCxcIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzXCI6Njk1LFwiLi4vLi4vbGliL3RvcG9qc29uX3V0aWxzXCI6NzI4LFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiOjEwNzYsXCIuL3N0eWxlXCI6MTEwMCxkMzoxNTV9XSwxMDk5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIiksaT10KFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKS5CQUROVU07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLHMsbCxjPXQuY2QsdT10LnhheGlzLGg9dC55YXhpcyxmPVtdLHA9Y1swXS50cmFjZTtpZighbi5oYXNNYXJrZXJzKHApJiYhbi5oYXNUZXh0KHApKXJldHVybltdO2lmKCExPT09ZSlmb3IobD0wO2w8Yy5sZW5ndGg7bCsrKWNbbF0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihsPTA7bDxjLmxlbmd0aDtsKyspKGE9KHI9Y1tsXSkubG9ubGF0KVswXSE9PWkmJihvPXUuYzJwKGEpLHM9aC5jMnAoYSksZS5jb250YWlucyhbbyxzXSxudWxsLGwsdCk/KGYucHVzaCh7cG9pbnROdW1iZXI6bCxsb246YVswXSxsYXQ6YVsxXX0pLHIuc2VsZWN0ZWQ9MSk6ci5zZWxlY3RlZD0wKTtyZXR1cm4gZn19LHtcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCI6MTA3Nn1dLDExMDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksbz10KFwiLi4vc2NhdHRlci9zdHlsZVwiKSxzPW8uc3R5bGVQb2ludHMsbD1vLnN0eWxlVGV4dDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlJiZmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0udHJhY2Usbz1lWzBdLm5vZGUzO28uc3R5bGUoXCJvcGFjaXR5XCIsZVswXS50cmFjZS5vcGFjaXR5KSxzKG8scix0KSxsKG8scix0KSxvLnNlbGVjdEFsbChcInBhdGguanMtbGluZVwiKS5zdHlsZShcImZpbGxcIixcIm5vbmVcIikuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPXQudHJhY2Usbz1yLmxpbmV8fHt9O2UuY2FsbChhLnN0cm9rZSxvLmNvbG9yKS5jYWxsKGkuZGFzaExpbmUsby5kYXNofHxcIlwiLG8ud2lkdGh8fDApLFwibm9uZVwiIT09ci5maWxsJiZlLmNhbGwoYS5maWxsLHIuZmlsbGNvbG9yKX0pfSh0LGUpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uL3NjYXR0ZXIvc3R5bGVcIjoxMDc1LGQzOjE1NX1dLDExMDE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LHM9dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGwsbD10KFwiLi9jb25zdGFudHNcIikuREFTSEVTLGM9aS5saW5lLHU9aS5tYXJrZXIsaD11LmxpbmUsZj1lLmV4cG9ydHM9cyh7eDppLngseDA6aS54MCxkeDppLmR4LHk6aS55LHkwOmkueTAsZHk6aS5keSx0ZXh0OmkudGV4dCxob3ZlcnRleHQ6aS5ob3ZlcnRleHQsdGV4dHBvc2l0aW9uOmkudGV4dHBvc2l0aW9uLHRleHRmb250OmkudGV4dGZvbnQsbW9kZTp7dmFsVHlwZTpcImZsYWdsaXN0XCIsZmxhZ3M6W1wibGluZXNcIixcIm1hcmtlcnNcIixcInRleHRcIl0sZXh0cmFzOltcIm5vbmVcIl19LGxpbmU6e2NvbG9yOmMuY29sb3Isd2lkdGg6Yy53aWR0aCxzaGFwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibGluZWFyXCIsXCJodlwiLFwidmhcIixcImh2aFwiLFwidmh2XCJdLGRmbHQ6XCJsaW5lYXJcIixlZGl0VHlwZTpcInBsb3RcIn0sZGFzaDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6T2JqZWN0LmtleXMobCksZGZsdDpcInNvbGlkXCJ9fSxtYXJrZXI6byh7fSxhKFwibWFya2VyXCIpLHtzeW1ib2w6dS5zeW1ib2wsc2l6ZTp1LnNpemUsc2l6ZXJlZjp1LnNpemVyZWYsc2l6ZW1pbjp1LnNpemVtaW4sc2l6ZW1vZGU6dS5zaXplbW9kZSxvcGFjaXR5OnUub3BhY2l0eSxjb2xvcmJhcjp1LmNvbG9yYmFyLGxpbmU6byh7fSxhKFwibWFya2VyLmxpbmVcIikse3dpZHRoOmgud2lkdGh9KX0pLGNvbm5lY3RnYXBzOmkuY29ubmVjdGdhcHMsZmlsbDpvKHt9LGkuZmlsbCx7ZGZsdDpcIm5vbmVcIn0pLGZpbGxjb2xvcjppLmZpbGxjb2xvcixzZWxlY3RlZDp7bWFya2VyOmkuc2VsZWN0ZWQubWFya2VyLHRleHRmb250Omkuc2VsZWN0ZWQudGV4dGZvbnR9LHVuc2VsZWN0ZWQ6e21hcmtlcjppLnVuc2VsZWN0ZWQubWFya2VyLHRleHRmb250OmkudW5zZWxlY3RlZC50ZXh0Zm9udH0sb3BhY2l0eTpuLm9wYWNpdHl9LFwiY2FsY1wiLFwibmVzdGVkXCIpO2YueC5lZGl0VHlwZT1mLnkuZWRpdFR5cGU9Zi54MC5lZGl0VHlwZT1mLnkwLmVkaXRUeXBlPVwiY2FsYytjbGVhckF4aXNUeXBlc1wiLGYuaG92ZXJ0ZW1wbGF0ZT1pLmhvdmVydGVtcGxhdGV9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCI6MTA1MixcIi4vY29uc3RhbnRzXCI6MTEwMn1dLDExMDI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e1RPT19NQU5ZX1BPSU5UUzoxZTUsU1lNQk9MX1NERl9TSVpFOjIwMCxTWU1CT0xfU0laRToyMCxTWU1CT0xfU1RST0tFOjEsRE9UX1JFOi8tZG90LyxPUEVOX1JFOi8tb3Blbi8sREFTSEVTOntzb2xpZDpbMV0sZG90OlsxLDFdLGRhc2g6WzQsMV0sbG9uZ2Rhc2g6WzgsMV0sZGFzaGRvdDpbNCwxLDEsMV0sbG9uZ2Rhc2hkb3Q6WzgsMSwxLDFdfX19LHt9XSwxMTAzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcInN2Zy1wYXRoLXNkZlwiKSxhPXQoXCJjb2xvci1ub3JtYWxpemVcIiksbz10KFwiLi4vLi4vcmVnaXN0cnlcIikscz10KFwiLi4vLi4vbGliXCIpLGw9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxjPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIiksdT10KFwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvclwiKS5mb3JtYXRDb2xvcixoPXQoXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCIpLGY9dChcIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jXCIpLHA9dChcIi4vY29uc3RhbnRzXCIpLGQ9dChcIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnNcIikuREVTRUxFQ1RESU0sZz17c3RhcnQ6MSxsZWZ0OjEsZW5kOi0xLHJpZ2h0Oi0xLG1pZGRsZTowLGNlbnRlcjowLGJvdHRvbToxLHRvcDotMX07ZnVuY3Rpb24gdih0KXt2YXIgZSxyPXQuX2xlbmd0aCxpPXQudGV4dGZvbnQsYT10LnRleHRwb3NpdGlvbixvPUFycmF5LmlzQXJyYXkoYSk/YTpbYV0scz1pLmNvbG9yLGw9aS5zaXplLGM9aS5mYW1pbHksdT17fTtmb3IodS50ZXh0PXQudGV4dCx1Lm9wYWNpdHk9dC5vcGFjaXR5LHUuZm9udD17fSx1LmFsaWduPVtdLHUuYmFzZWxpbmU9W10sZT0wO2U8by5sZW5ndGg7ZSsrKXt2YXIgaD1vW2VdLnNwbGl0KC9cXHMrLyk7c3dpdGNoKGhbMV0pe2Nhc2VcImxlZnRcIjp1LmFsaWduLnB1c2goXCJyaWdodFwiKTticmVhaztjYXNlXCJyaWdodFwiOnUuYWxpZ24ucHVzaChcImxlZnRcIik7YnJlYWs7ZGVmYXVsdDp1LmFsaWduLnB1c2goaFsxXSl9c3dpdGNoKGhbMF0pe2Nhc2VcInRvcFwiOnUuYmFzZWxpbmUucHVzaChcImJvdHRvbVwiKTticmVhaztjYXNlXCJib3R0b21cIjp1LmJhc2VsaW5lLnB1c2goXCJ0b3BcIik7YnJlYWs7ZGVmYXVsdDp1LmJhc2VsaW5lLnB1c2goaFswXSl9fWlmKEFycmF5LmlzQXJyYXkocykpZm9yKHUuY29sb3I9bmV3IEFycmF5KHIpLGU9MDtlPHI7ZSsrKXUuY29sb3JbZV09c1tlXTtlbHNlIHUuY29sb3I9cztpZihBcnJheS5pc0FycmF5KGwpfHxBcnJheS5pc0FycmF5KGMpKWZvcih1LmZvbnQ9bmV3IEFycmF5KHIpLGU9MDtlPHI7ZSsrKXt2YXIgZj11LmZvbnRbZV09e307Zi5zaXplPUFycmF5LmlzQXJyYXkobCk/bihsW2VdKT9sW2VdOjA6bCxmLmZhbWlseT1BcnJheS5pc0FycmF5KGMpP2NbZV06Y31lbHNlIHUuZm9udD17c2l6ZTpsLGZhbWlseTpjfTtyZXR1cm4gdX1mdW5jdGlvbiBtKHQpe3ZhciBlLHIsbj10Ll9sZW5ndGgsaT10Lm1hcmtlcixvPXt9LGw9QXJyYXkuaXNBcnJheShpLnN5bWJvbCksYz1zLmlzQXJyYXlPclR5cGVkQXJyYXkoaS5jb2xvciksaD1zLmlzQXJyYXlPclR5cGVkQXJyYXkoaS5saW5lLmNvbG9yKSxkPXMuaXNBcnJheU9yVHlwZWRBcnJheShpLm9wYWNpdHkpLGc9cy5pc0FycmF5T3JUeXBlZEFycmF5KGkuc2l6ZSksdj1zLmlzQXJyYXlPclR5cGVkQXJyYXkoaS5saW5lLndpZHRoKTtpZihsfHwocj1wLk9QRU5fUkUudGVzdChpLnN5bWJvbCkpLGx8fGN8fGh8fGQpe28uY29sb3JzPW5ldyBBcnJheShuKSxvLmJvcmRlckNvbG9ycz1uZXcgQXJyYXkobik7dmFyIG09dShpLGkub3BhY2l0eSxuKSx5PXUoaS5saW5lLGkub3BhY2l0eSxuKTtpZighQXJyYXkuaXNBcnJheSh5WzBdKSl7dmFyIHg9eTtmb3IoeT1BcnJheShuKSxlPTA7ZTxuO2UrKyl5W2VdPXh9aWYoIUFycmF5LmlzQXJyYXkobVswXSkpe3ZhciBiPW07Zm9yKG09QXJyYXkobiksZT0wO2U8bjtlKyspbVtlXT1ifWZvcihvLmNvbG9ycz1tLG8uYm9yZGVyQ29sb3JzPXksZT0wO2U8bjtlKyspe2lmKGwpe3ZhciBfPWkuc3ltYm9sW2VdO3I9cC5PUEVOX1JFLnRlc3QoXyl9ciYmKHlbZV09bVtlXS5zbGljZSgpLG1bZV09bVtlXS5zbGljZSgpLG1bZV1bM109MCl9by5vcGFjaXR5PXQub3BhY2l0eX1lbHNlIHI/KG8uY29sb3I9YShpLmNvbG9yLFwidWludDhcIiksby5jb2xvclszXT0wLG8uYm9yZGVyQ29sb3I9YShpLmNvbG9yLFwidWludDhcIikpOihvLmNvbG9yPWEoaS5jb2xvcixcInVpbnQ4XCIpLG8uYm9yZGVyQ29sb3I9YShpLmxpbmUuY29sb3IsXCJ1aW50OFwiKSksby5vcGFjaXR5PXQub3BhY2l0eSppLm9wYWNpdHk7aWYobClmb3Ioby5tYXJrZXJzPW5ldyBBcnJheShuKSxlPTA7ZTxuO2UrKylvLm1hcmtlcnNbZV09TShpLnN5bWJvbFtlXSk7ZWxzZSBvLm1hcmtlcj1NKGkuc3ltYm9sKTt2YXIgdyxrPWYodCk7aWYoZ3x8dil7dmFyIEEsVD1vLnNpemVzPW5ldyBBcnJheShuKSxTPW8uYm9yZGVyU2l6ZXM9bmV3IEFycmF5KG4pLEU9MDtpZihnKXtmb3IoZT0wO2U8bjtlKyspVFtlXT1rKGkuc2l6ZVtlXSksRSs9VFtlXTtBPUUvbn1lbHNlIGZvcih3PWsoaS5zaXplKSxlPTA7ZTxuO2UrKylUW2VdPXc7aWYodilmb3IoZT0wO2U8bjtlKyspU1tlXT1pLmxpbmUud2lkdGhbZV0vMjtlbHNlIGZvcih3PWkubGluZS53aWR0aC8yLGU9MDtlPG47ZSsrKVNbZV09dztvLnNpemVBdmc9QX1lbHNlIG8uc2l6ZT1rKGkmJmkuc2l6ZXx8MTApLG8uYm9yZGVyU2l6ZXM9ayhpLmxpbmUud2lkdGgpO3JldHVybiBvfWZ1bmN0aW9uIHkodCxlKXt2YXIgcj10Lm1hcmtlcixuPXt9O3JldHVybiBlPyhlLm1hcmtlciYmZS5tYXJrZXIuc3ltYm9sP249bShzLmV4dGVuZEZsYXQoe30scixlLm1hcmtlcikpOmUubWFya2VyJiYoZS5tYXJrZXIuc2l6ZSYmKG4uc2l6ZT1lLm1hcmtlci5zaXplLzIpLGUubWFya2VyLmNvbG9yJiYobi5jb2xvcnM9ZS5tYXJrZXIuY29sb3IpLHZvaWQgMCE9PWUubWFya2VyLm9wYWNpdHkmJihuLm9wYWNpdHk9ZS5tYXJrZXIub3BhY2l0eSkpLG4pOm59ZnVuY3Rpb24geCh0LGUpe3ZhciByPXt9O2lmKCFlKXJldHVybiByO2lmKGUudGV4dGZvbnQpe3ZhciBuPXtvcGFjaXR5OjEsdGV4dDp0LnRleHQsdGV4dHBvc2l0aW9uOnQudGV4dHBvc2l0aW9uLHRleHRmb250OnMuZXh0ZW5kRmxhdCh7fSx0LnRleHRmb250KX07ZS50ZXh0Zm9udCYmcy5leHRlbmRGbGF0KG4udGV4dGZvbnQsZS50ZXh0Zm9udCkscj12KG4pfXJldHVybiByfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj17Y2FwU2l6ZToyKmUud2lkdGgsbGluZVdpZHRoOmUudGhpY2tuZXNzLGNvbG9yOmUuY29sb3J9O3JldHVybiBlLmNvcHlfeXN0eWxlJiYocj10LmVycm9yX3kpLHJ9dmFyIF89cC5TWU1CT0xfU0RGX1NJWkUsdz1wLlNZTUJPTF9TSVpFLGs9cC5TWU1CT0xfU1RST0tFLEE9e30sVD1sLnN5bWJvbEZ1bmNzWzBdKC4wNSp3KTtmdW5jdGlvbiBNKHQpe2lmKFwiY2lyY2xlXCI9PT10KXJldHVybiBudWxsO3ZhciBlLHIsbj1sLnN5bWJvbE51bWJlcih0KSxhPWwuc3ltYm9sRnVuY3NbbiUxMDBdLG89ISFsLnN5bWJvbE5vRG90W24lMTAwXSxzPSEhbC5zeW1ib2xOb0ZpbGxbbiUxMDBdLGM9cC5ET1RfUkUudGVzdCh0KTtyZXR1cm4gQVt0XT9BW3RdOihlPWMmJiFvP2EoMS4xKncpK1Q6YSh3KSxyPWkoZSx7dzpfLGg6Xyx2aWV3Qm94Olstdywtdyx3LHddLHN0cm9rZTpzP2s6LWt9KSxBW3RdPXIscnx8bnVsbCl9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUpe3ZhciByLG49e21hcmtlcjp2b2lkIDAsbWFya2VyU2VsOnZvaWQgMCxtYXJrZXJVbnNlbDp2b2lkIDAsbGluZTp2b2lkIDAsZmlsbDp2b2lkIDAsZXJyb3JYOnZvaWQgMCxlcnJvclk6dm9pZCAwLHRleHQ6dm9pZCAwLHRleHRTZWw6dm9pZCAwLHRleHRVbnNlbDp2b2lkIDB9O2lmKCEwIT09ZS52aXNpYmxlKXJldHVybiBuO2lmKGguaGFzVGV4dChlKSYmKG4udGV4dD12KGUpLG4udGV4dFNlbD14KGUsZS5zZWxlY3RlZCksbi50ZXh0VW5zZWw9eChlLGUudW5zZWxlY3RlZCkpLGguaGFzTWFya2VycyhlKSYmKG4ubWFya2VyPW0oZSksbi5tYXJrZXJTZWw9eShlLGUuc2VsZWN0ZWQpLG4ubWFya2VyVW5zZWw9eShlLGUudW5zZWxlY3RlZCksIWUudW5zZWxlY3RlZCYmQXJyYXkuaXNBcnJheShlLm1hcmtlci5vcGFjaXR5KSkpe3ZhciBpPWUubWFya2VyLm9wYWNpdHk7Zm9yKG4ubWFya2VyVW5zZWwub3BhY2l0eT1uZXcgQXJyYXkoaS5sZW5ndGgpLHI9MDtyPGkubGVuZ3RoO3IrKyluLm1hcmtlclVuc2VsLm9wYWNpdHlbcl09ZCppW3JdfWlmKGguaGFzTGluZXMoZSkpe24ubGluZT17b3ZlcmxheTohMCx0aGlja25lc3M6ZS5saW5lLndpZHRoLGNvbG9yOmUubGluZS5jb2xvcixvcGFjaXR5OmUub3BhY2l0eX07dmFyIGE9KHAuREFTSEVTW2UubGluZS5kYXNoXXx8WzFdKS5zbGljZSgpO2ZvcihyPTA7cjxhLmxlbmd0aDsrK3IpYVtyXSo9ZS5saW5lLndpZHRoO24ubGluZS5kYXNoZXM9YX1yZXR1cm4gZS5lcnJvcl94JiZlLmVycm9yX3gudmlzaWJsZSYmKG4uZXJyb3JYPWIoZSxlLmVycm9yX3gpKSxlLmVycm9yX3kmJmUuZXJyb3JfeS52aXNpYmxlJiYobi5lcnJvclk9YihlLGUuZXJyb3JfeSkpLGUuZmlsbCYmXCJub25lXCIhPT1lLmZpbGwmJihuLmZpbGw9e2Nsb3NlZDohMCxmaWxsOmUuZmlsbGNvbG9yLHRoaWNrbmVzczowfSksbn0sbWFya2VyU3R5bGU6bSxtYXJrZXJTZWxlY3Rpb246eSxsaW5lUG9zaXRpb25zOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9ci5sZW5ndGgsbz1hLzI7aWYoaC5oYXNMaW5lcyhlKSYmbylpZihcImh2XCI9PT1lLmxpbmUuc2hhcGUpe2ZvcihuPVtdLGk9MDtpPG8tMTtpKyspaXNOYU4oclsyKmldKXx8aXNOYU4oclsyKmkrMV0pP24ucHVzaChOYU4sTmFOLE5hTixOYU4pOihuLnB1c2goclsyKmldLHJbMippKzFdKSxpc05hTihyWzIqaSsyXSl8fGlzTmFOKHJbMippKzNdKT9uLnB1c2goTmFOLE5hTik6bi5wdXNoKHJbMippKzJdLHJbMippKzFdKSk7bi5wdXNoKHJbYS0yXSxyW2EtMV0pfWVsc2UgaWYoXCJodmhcIj09PWUubGluZS5zaGFwZSl7Zm9yKG49W10saT0wO2k8by0xO2krKylpZihpc05hTihyWzIqaV0pfHxpc05hTihyWzIqaSsxXSl8fGlzTmFOKHJbMippKzJdKXx8aXNOYU4oclsyKmkrM10pKWlzTmFOKHJbMippXSl8fGlzTmFOKHJbMippKzFdKT9uLnB1c2goTmFOLE5hTik6bi5wdXNoKHJbMippXSxyWzIqaSsxXSksbi5wdXNoKE5hTixOYU4pO2Vsc2V7dmFyIHM9KHJbMippXStyWzIqaSsyXSkvMjtuLnB1c2goclsyKmldLHJbMippKzFdLHMsclsyKmkrMV0scyxyWzIqaSszXSl9bi5wdXNoKHJbYS0yXSxyW2EtMV0pfWVsc2UgaWYoXCJ2aHZcIj09PWUubGluZS5zaGFwZSl7Zm9yKG49W10saT0wO2k8by0xO2krKylpZihpc05hTihyWzIqaV0pfHxpc05hTihyWzIqaSsxXSl8fGlzTmFOKHJbMippKzJdKXx8aXNOYU4oclsyKmkrM10pKWlzTmFOKHJbMippXSl8fGlzTmFOKHJbMippKzFdKT9uLnB1c2goTmFOLE5hTik6bi5wdXNoKHJbMippXSxyWzIqaSsxXSksbi5wdXNoKE5hTixOYU4pO2Vsc2V7dmFyIGw9KHJbMippKzFdK3JbMippKzNdKS8yO24ucHVzaChyWzIqaV0sclsyKmkrMV0sclsyKmldLGwsclsyKmkrMl0sbCl9bi5wdXNoKHJbYS0yXSxyW2EtMV0pfWVsc2UgaWYoXCJ2aFwiPT09ZS5saW5lLnNoYXBlKXtmb3Iobj1bXSxpPTA7aTxvLTE7aSsrKWlzTmFOKHJbMippXSl8fGlzTmFOKHJbMippKzFdKT9uLnB1c2goTmFOLE5hTixOYU4sTmFOKToobi5wdXNoKHJbMippXSxyWzIqaSsxXSksaXNOYU4oclsyKmkrMl0pfHxpc05hTihyWzIqaSszXSk/bi5wdXNoKE5hTixOYU4pOm4ucHVzaChyWzIqaV0sclsyKmkrM10pKTtuLnB1c2goclthLTJdLHJbYS0xXSl9ZWxzZSBuPXI7dmFyIGM9ITE7Zm9yKGk9MDtpPG4ubGVuZ3RoO2krKylpZihpc05hTihuW2ldKSl7Yz0hMDticmVha312YXIgdT1jfHxuLmxlbmd0aD5wLlRPT19NQU5ZX1BPSU5UUz9cInJlY3RcIjpoLmhhc01hcmtlcnMoZSk/XCJyZWN0XCI6XCJyb3VuZFwiO2lmKGMmJmUuY29ubmVjdGdhcHMpe3ZhciBmPW5bMF0sZD1uWzFdO2ZvcihpPTA7aTxuLmxlbmd0aDtpKz0yKWlzTmFOKG5baV0pfHxpc05hTihuW2krMV0pPyhuW2ldPWYsbltpKzFdPWQpOihmPW5baV0sZD1uW2krMV0pfXJldHVybntqb2luOnUscG9zaXRpb25zOm59fSxlcnJvckJhclBvc2l0aW9uczpmdW5jdGlvbih0LGUscixpLGEpe3ZhciBzPW8uZ2V0Q29tcG9uZW50TWV0aG9kKFwiZXJyb3JiYXJzXCIsXCJtYWtlQ29tcHV0ZUVycm9yXCIpLGw9Yy5nZXRGcm9tSWQodCxlLnhheGlzKSx1PWMuZ2V0RnJvbUlkKHQsZS55YXhpcyksaD1yLmxlbmd0aC8yLGY9e307ZnVuY3Rpb24gcCh0LGkpe3ZhciBhPWkuX2lkLmNoYXJBdCgwKSxvPWVbXCJlcnJvcl9cIithXTtpZihvJiZvLnZpc2libGUmJihcImxpbmVhclwiPT09aS50eXBlfHxcImxvZ1wiPT09aS50eXBlKSl7Zm9yKHZhciBsPXMobyksYz17eDowLHk6MX1bYV0sdT17eDpbMCwxLDIsM10seTpbMiwzLDAsMV19W2FdLHA9bmV3IEZsb2F0NjRBcnJheSg0KmgpLGQ9MS8wLGc9LTEvMCx2PTAsbT0wO3Y8aDt2KyssbSs9NCl7dmFyIHk9dFt2XTtpZihuKHkpKXt2YXIgeD1yWzIqditjXSxiPWwoeSx2KSxfPWJbMF0sdz1iWzFdO2lmKG4oXykmJm4odykpe3ZhciBrPXktXyxBPXkrdztwW20rdVswXV09eC1pLmMybChrKSxwW20rdVsxXV09aS5jMmwoQSkteCxwW20rdVsyXV09MCxwW20rdVszXV09MCxkPU1hdGgubWluKGQseS1fKSxnPU1hdGgubWF4KGcseSt3KX19fWZbYV09e3Bvc2l0aW9uczpyLGVycm9yczpwLF9ibmRzOltkLGddfX19cmV0dXJuIHAoaSxsKSxwKGEsdSksZn0sdGV4dFBvc2l0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9ZS5fbGVuZ3RoLG89e307aWYoaC5oYXNNYXJrZXJzKGUpKXt2YXIgcz1yLmZvbnQsbD1yLmFsaWduLGM9ci5iYXNlbGluZTtmb3Ioby5vZmZzZXQ9bmV3IEFycmF5KGEpLGk9MDtpPGE7aSsrKXt2YXIgdT1uLnNpemVzP24uc2l6ZXNbaV06bi5zaXplLGY9QXJyYXkuaXNBcnJheShzKT9zW2ldLnNpemU6cy5zaXplLHA9QXJyYXkuaXNBcnJheShsKT9sLmxlbmd0aD4xP2xbaV06bFswXTpsLGQ9QXJyYXkuaXNBcnJheShjKT9jLmxlbmd0aD4xP2NbaV06Y1swXTpjLHY9Z1twXSxtPWdbZF0seT11P3UvLjgrMTowLHg9LW0qeS0uNSptO28ub2Zmc2V0W2ldPVt2KnkvZix4L2ZdfX1yZXR1cm4gb319fSx7XCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zXCI6Njc3LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvclwiOjY5OCxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiOjc1MixcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmNcIjoxMDY5LFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiOjEwNzYsXCIuL2NvbnN0YW50c1wiOjExMDIsXCJjb2xvci1ub3JtYWxpemVcIjoxMTEsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMixcInN2Zy1wYXRoLXNkZlwiOjUyMH1dLDExMDQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGE9dChcIi4vYXR0cmlidXRlc1wiKSxvPXQoXCIuLi9zY2F0dGVyL2NvbnN0YW50c1wiKSxzPXQoXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCIpLGw9dChcIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHNcIiksYz10KFwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHNcIiksdT10KFwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzXCIpLGg9dChcIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzXCIpLGY9dChcIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0c1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscCl7ZnVuY3Rpb24gZChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfXZhciBnPSEhdC5tYXJrZXImJi8tb3Blbi8udGVzdCh0Lm1hcmtlci5zeW1ib2wpLHY9cy5pc0J1YmJsZSh0KSxtPWwodCxlLHAsZCk7aWYobSl7dmFyIHk9bTxvLlBUU19MSU5FU09OTFk/XCJsaW5lcyttYXJrZXJzXCI6XCJsaW5lc1wiO2QoXCJ0ZXh0XCIpLGQoXCJob3ZlcnRleHRcIiksZChcImhvdmVydGVtcGxhdGVcIiksZChcIm1vZGVcIix5KSxzLmhhc0xpbmVzKGUpJiYoZChcImNvbm5lY3RnYXBzXCIpLHUodCxlLHIscCxkKSxkKFwibGluZS5zaGFwZVwiKSkscy5oYXNNYXJrZXJzKGUpJiYoYyh0LGUscixwLGQpLGQoXCJtYXJrZXIubGluZS53aWR0aFwiLGd8fHY/MTowKSkscy5oYXNUZXh0KGUpJiZmKHQsZSxwLGQpO3ZhciB4PShlLmxpbmV8fHt9KS5jb2xvcixiPShlLm1hcmtlcnx8e30pLmNvbG9yO2QoXCJmaWxsXCIpLFwibm9uZVwiIT09ZS5maWxsJiZoKHQsZSxyLGQpO3ZhciBfPWkuZ2V0Q29tcG9uZW50TWV0aG9kKFwiZXJyb3JiYXJzXCIsXCJzdXBwbHlEZWZhdWx0c1wiKTtfKHQsZSx4fHxifHxyLHtheGlzOlwieVwifSksXyh0LGUseHx8Ynx8cix7YXhpczpcInhcIixpbmhlcml0OlwieVwifSksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsZCl9ZWxzZSBlLnZpc2libGU9ITF9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL3NjYXR0ZXIvY29uc3RhbnRzXCI6MTA1NixcIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzXCI6MTA2MSxcIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0c1wiOjEwNjUsXCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0c1wiOjEwNzEsXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCI6MTA3NixcIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0c1wiOjEwNzcsXCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzXCI6MTA3OCxcIi4vYXR0cmlidXRlc1wiOjExMDF9XSwxMTA1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInJlZ2wtc2NhdHRlcjJkXCIpLGk9dChcInJlZ2wtbGluZTJkXCIpLGE9dChcInJlZ2wtZXJyb3IyZFwiKSxvPXQoXCJwb2ludC1jbHVzdGVyXCIpLHM9dChcImFycmF5LXJhbmdlXCIpLGw9dChcImdsLXRleHRcIiksYz10KFwiLi4vLi4vcmVnaXN0cnlcIiksdT10KFwiLi4vLi4vbGliXCIpLGg9dChcIi4uLy4uL2xpYi9wcmVwYXJlX3JlZ2xcIiksZj10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCIpLHA9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2VcIikuZmluZEV4dHJlbWVzLGQ9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksZz10KFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiKSx2PXQoXCIuLi9zY2F0dGVyL2NhbGNcIiksbT12LmNhbGNNYXJrZXJTaXplLHk9di5jYWxjQXhpc0V4cGFuc2lvbix4PXYuc2V0Rmlyc3RTY2F0dGVyLGI9dChcIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjXCIpLF89dChcIi4uL3NjYXR0ZXIvbGlua190cmFjZXNcIiksdz10KFwiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3JcIiksaz10KFwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHRcIiksQT10KFwiLi9jb252ZXJ0XCIpLFQ9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNLE09dChcIi4vY29uc3RhbnRzXCIpLlRPT19NQU5ZX1BPSU5UUyxTPXQoXCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zXCIpLkRFU0VMRUNURElNO2Z1bmN0aW9uIEUodCxlLHIpe3ZhciBuPXQuX2V4dHJlbWVzW2UuX2lkXSxpPXAoZSxyLl9ibmRzLHtwYWRkZWQ6ITB9KTtuLm1pbj1uLm1pbi5jb25jYXQoaS5taW4pLG4ubWF4PW4ubWF4LmNvbmNhdChpLm1heCl9ZnVuY3Rpb24gQyh0LGUpe3ZhciByPWUuX3NjZW5lLG49e2NvdW50OjAsZGlydHk6ITAsbGluZU9wdGlvbnM6W10sZmlsbE9wdGlvbnM6W10sbWFya2VyT3B0aW9uczpbXSxtYXJrZXJTZWxlY3RlZE9wdGlvbnM6W10sbWFya2VyVW5zZWxlY3RlZE9wdGlvbnM6W10sZXJyb3JYT3B0aW9uczpbXSxlcnJvcllPcHRpb25zOltdLHRleHRPcHRpb25zOltdLHRleHRTZWxlY3RlZE9wdGlvbnM6W10sdGV4dFVuc2VsZWN0ZWRPcHRpb25zOltdfSxpPXtzZWxlY3RCYXRjaDpudWxsLHVuc2VsZWN0QmF0Y2g6bnVsbCxmaWxsMmQ6ITEsc2NhdHRlcjJkOiExLGVycm9yMmQ6ITEsbGluZTJkOiExLGdsVGV4dDohMSxzZWxlY3QyZDpudWxsfTtyZXR1cm4gZS5fc2NlbmV8fCgocj1lLl9zY2VuZT17fSkuaW5pdD1mdW5jdGlvbigpe3UuZXh0ZW5kRmxhdChyLGksbil9LHIuaW5pdCgpLHIudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXUucmVwZWF0KHQsci5jb3VudCk7aWYoci5maWxsMmQmJnIuZmlsbDJkLnVwZGF0ZShlKSxyLnNjYXR0ZXIyZCYmci5zY2F0dGVyMmQudXBkYXRlKGUpLHIubGluZTJkJiZyLmxpbmUyZC51cGRhdGUoZSksci5lcnJvcjJkJiZyLmVycm9yMmQudXBkYXRlKGUuY29uY2F0KGUpKSxyLnNlbGVjdDJkJiZyLnNlbGVjdDJkLnVwZGF0ZShlKSxyLmdsVGV4dClmb3IodmFyIG49MDtuPHIuY291bnQ7bisrKXIuZ2xUZXh0W25dLnVwZGF0ZSh0KX0sci5kcmF3PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXIuY291bnQsZT1yLmZpbGwyZCxuPXIuZXJyb3IyZCxpPXIubGluZTJkLGE9ci5zY2F0dGVyMmQsbz1yLmdsVGV4dCxzPXIuc2VsZWN0MmQsbD1yLnNlbGVjdEJhdGNoLGM9ci51bnNlbGVjdEJhdGNoLHU9MDt1PHQ7dSsrKWUmJnIuZmlsbE9yZGVyW3VdJiZlLmRyYXcoci5maWxsT3JkZXJbdV0pLGkmJnIubGluZU9wdGlvbnNbdV0mJmkuZHJhdyh1KSxuJiYoci5lcnJvclhPcHRpb25zW3VdJiZuLmRyYXcodSksci5lcnJvcllPcHRpb25zW3VdJiZuLmRyYXcodSt0KSksIWF8fCFyLm1hcmtlck9wdGlvbnNbdV18fGwmJmxbdV18fGEuZHJhdyh1KSxvW3VdJiZyLnRleHRPcHRpb25zW3VdJiZvW3VdLnJlbmRlcigpO2EmJnMmJmwmJihzLmRyYXcobCksYS5kcmF3KGMpKSxyLmRpcnR5PSExfSxyLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyLmZpbGwyZCYmci5maWxsMmQuZGVzdHJveSYmci5maWxsMmQuZGVzdHJveSgpLHIuc2NhdHRlcjJkJiZyLnNjYXR0ZXIyZC5kZXN0cm95JiZyLnNjYXR0ZXIyZC5kZXN0cm95KCksci5lcnJvcjJkJiZyLmVycm9yMmQuZGVzdHJveSYmci5lcnJvcjJkLmRlc3Ryb3koKSxyLmxpbmUyZCYmci5saW5lMmQuZGVzdHJveSYmci5saW5lMmQuZGVzdHJveSgpLHIuc2VsZWN0MmQmJnIuc2VsZWN0MmQuZGVzdHJveSYmci5zZWxlY3QyZC5kZXN0cm95KCksci5nbFRleHQmJnIuZ2xUZXh0LmZvckVhY2goZnVuY3Rpb24odCl7dC5kZXN0cm95JiZ0LmRlc3Ryb3koKX0pLHIubGluZU9wdGlvbnM9bnVsbCxyLmZpbGxPcHRpb25zPW51bGwsci5tYXJrZXJPcHRpb25zPW51bGwsci5tYXJrZXJTZWxlY3RlZE9wdGlvbnM9bnVsbCxyLm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zPW51bGwsci5lcnJvclhPcHRpb25zPW51bGwsci5lcnJvcllPcHRpb25zPW51bGwsci50ZXh0T3B0aW9ucz1udWxsLHIudGV4dFNlbGVjdGVkT3B0aW9ucz1udWxsLHIudGV4dFVuc2VsZWN0ZWRPcHRpb25zPW51bGwsci5zZWxlY3RCYXRjaD1udWxsLHIudW5zZWxlY3RCYXRjaD1udWxsLGUuX3NjZW5lPW51bGx9KSxyLmRpcnR5fHx1LmV4dGVuZEZsYXQocixuKSxyfWZ1bmN0aW9uIEwodCxlLHIsbil7dmFyIGk9dC54YSxhPXQueWEsbz10LmRpc3RhbmNlLHM9dC5keHksbD10LmluZGV4LGg9e3BvaW50TnVtYmVyOmwseDplW2xdLHk6cltsXX07aC50eD1BcnJheS5pc0FycmF5KG4udGV4dCk/bi50ZXh0W2xdOm4udGV4dCxoLmh0eD1BcnJheS5pc0FycmF5KG4uaG92ZXJ0ZXh0KT9uLmhvdmVydGV4dFtsXTpuLmhvdmVydGV4dCxoLmRhdGE9QXJyYXkuaXNBcnJheShuLmN1c3RvbWRhdGEpP24uY3VzdG9tZGF0YVtsXTpuLmN1c3RvbWRhdGEsaC50cD1BcnJheS5pc0FycmF5KG4udGV4dHBvc2l0aW9uKT9uLnRleHRwb3NpdGlvbltsXTpuLnRleHRwb3NpdGlvbjt2YXIgZj1uLnRleHRmb250O2YmJihoLnRzPUFycmF5LmlzQXJyYXkoZi5zaXplKT9mLnNpemVbbF06Zi5zaXplLGgudGM9QXJyYXkuaXNBcnJheShmLmNvbG9yKT9mLmNvbG9yW2xdOmYuY29sb3IsaC50Zj1BcnJheS5pc0FycmF5KGYuZmFtaWx5KT9mLmZhbWlseVtsXTpmLmZhbWlseSk7dmFyIHA9bi5tYXJrZXI7cCYmKGgubXM9dS5pc0FycmF5T3JUeXBlZEFycmF5KHAuc2l6ZSk/cC5zaXplW2xdOnAuc2l6ZSxoLm1vPXUuaXNBcnJheU9yVHlwZWRBcnJheShwLm9wYWNpdHkpP3Aub3BhY2l0eVtsXTpwLm9wYWNpdHksaC5teD1BcnJheS5pc0FycmF5KHAuc3ltYm9sKT9wLnN5bWJvbFtsXTpwLnN5bWJvbCxoLm1jPXUuaXNBcnJheU9yVHlwZWRBcnJheShwLmNvbG9yKT9wLmNvbG9yW2xdOnAuY29sb3IpO3ZhciBkPXAmJnAubGluZTtkJiYoaC5tbGM9QXJyYXkuaXNBcnJheShkLmNvbG9yKT9kLmNvbG9yW2xdOmQuY29sb3IsaC5tbHc9dS5pc0FycmF5T3JUeXBlZEFycmF5KGQud2lkdGgpP2Qud2lkdGhbbF06ZC53aWR0aCk7dmFyIGc9cCYmcC5ncmFkaWVudDtnJiZcIm5vbmVcIiE9PWcudHlwZSYmKGgubWd0PUFycmF5LmlzQXJyYXkoZy50eXBlKT9nLnR5cGVbbF06Zy50eXBlLGgubWdjPUFycmF5LmlzQXJyYXkoZy5jb2xvcik/Zy5jb2xvcltsXTpnLmNvbG9yKTt2YXIgdj1pLmMycChoLngsITApLG09YS5jMnAoaC55LCEwKSx5PWgubXJjfHwxLHg9bi5ob3ZlcmxhYmVsO3gmJihoLmhiZz1BcnJheS5pc0FycmF5KHguYmdjb2xvcik/eC5iZ2NvbG9yW2xdOnguYmdjb2xvcixoLmhiYz1BcnJheS5pc0FycmF5KHguYm9yZGVyY29sb3IpP3guYm9yZGVyY29sb3JbbF06eC5ib3JkZXJjb2xvcixoLmh0cz1BcnJheS5pc0FycmF5KHguZm9udC5zaXplKT94LmZvbnQuc2l6ZVtsXTp4LmZvbnQuc2l6ZSxoLmh0Yz1BcnJheS5pc0FycmF5KHguZm9udC5jb2xvcik/eC5mb250LmNvbG9yW2xdOnguZm9udC5jb2xvcixoLmh0Zj1BcnJheS5pc0FycmF5KHguZm9udC5mYW1pbHkpP3guZm9udC5mYW1pbHlbbF06eC5mb250LmZhbWlseSxoLmhubD1BcnJheS5pc0FycmF5KHgubmFtZWxlbmd0aCk/eC5uYW1lbGVuZ3RoW2xdOngubmFtZWxlbmd0aCk7dmFyIGI9bi5ob3ZlcmluZm87YiYmKGguaGk9QXJyYXkuaXNBcnJheShiKT9iW2xdOmIpO3ZhciBfPW4uaG92ZXJ0ZW1wbGF0ZTtfJiYoaC5odD1BcnJheS5pc0FycmF5KF8pP19bbF06Xyk7dmFyIEE9e307cmV0dXJuIEFbdC5pbmRleF09aCx1LmV4dGVuZEZsYXQodCx7Y29sb3I6dyhuLGgpLHgwOnYteSx4MTp2K3kseExhYmVsVmFsOmgueCx5MDptLXkseTE6bSt5LHlMYWJlbFZhbDpoLnksY2Q6QSxkaXN0YW5jZTpvLHNwaWtlRGlzdGFuY2U6cyxob3ZlcnRlbXBsYXRlOmguaHR9KSxoLmh0eD90LnRleHQ9aC5odHg6aC50eD90LnRleHQ9aC50eDpuLnRleHQmJih0LnRleHQ9bi50ZXh0KSxrKGgsbix0KSxjLmdldENvbXBvbmVudE1ldGhvZChcImVycm9yYmFyc1wiLFwiaG92ZXJJbmZvXCIpKGgsbix0KSx0fWZ1bmN0aW9uIHoodCl7dmFyIGUscixuPXRbMF0saT1uLnRyYWNlLGE9bi50LG89YS5fc2NlbmUscz1hLmluZGV4LGw9by5zZWxlY3RCYXRjaFtzXSxjPW8udW5zZWxlY3RCYXRjaFtzXSxoPW8udGV4dE9wdGlvbnNbc10sZj1vLnRleHRTZWxlY3RlZE9wdGlvbnNbc118fHt9LHA9by50ZXh0VW5zZWxlY3RlZE9wdGlvbnNbc118fHt9LGc9dS5leHRlbmRGbGF0KHt9LGgpO2lmKGwmJmMpe3ZhciB2PWYuY29sb3IsbT1wLmNvbG9yLHk9aC5jb2xvcix4PUFycmF5LmlzQXJyYXkoeSk7Zm9yKGcuY29sb3I9bmV3IEFycmF5KGkuX2xlbmd0aCksZT0wO2U8bC5sZW5ndGg7ZSsrKXI9bFtlXSxnLmNvbG9yW3JdPXZ8fCh4P3lbcl06eSk7Zm9yKGU9MDtlPGMubGVuZ3RoO2UrKyl7cj1jW2VdO3ZhciBiPXg/eVtyXTp5O2cuY29sb3Jbcl09bXx8KHY/YjpkLmFkZE9wYWNpdHkoYixTKSl9fW8uZ2xUZXh0W3NdLnVwZGF0ZShnKX1lLmV4cG9ydHM9e21vZHVsZVR5cGU6XCJ0cmFjZVwiLG5hbWU6XCJzY2F0dGVyZ2xcIixiYXNlUGxvdE1vZHVsZTp0KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCIpLGNhdGVnb3JpZXM6W1wiZ2xcIixcInJlZ2xcIixcImNhcnRlc2lhblwiLFwic3ltYm9sc1wiLFwiZXJyb3JCYXJzT0tcIixcInNob3dMZWdlbmRcIixcInNjYXR0ZXItbGlrZVwiXSxhdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksc3VwcGx5RGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIiksY3Jvc3NUcmFjZURlZmF1bHRzOnQoXCIuLi9zY2F0dGVyL2Nyb3NzX3RyYWNlX2RlZmF1bHRzXCIpLGNvbG9yYmFyOnQoXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiKSxjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9dC5fZnVsbExheW91dCxzPWYuZ2V0RnJvbUlkKHQsZS54YXhpcyksbD1mLmdldEZyb21JZCh0LGUueWF4aXMpLGM9YS5fcGxvdHNbZS54YXhpcytlLnlheGlzXSxoPWUuX2xlbmd0aCxwPWg+PU0sZD0yKmgsZz17fSx2PXMubWFrZUNhbGNkYXRhKGUsXCJ4XCIpLF89bC5tYWtlQ2FsY2RhdGEoZSxcInlcIiksdz1uZXcgQXJyYXkoZCk7Zm9yKHI9MDtyPGg7cisrKW49dltyXSxpPV9bcl0sd1syKnJdPW49PT1UP05hTjpuLHdbMipyKzFdPWk9PT1UP05hTjppO2lmKFwibG9nXCI9PT1zLnR5cGUpZm9yKHI9MDtyPGQ7cis9Mil3W3JdPXMuYzJsKHdbcl0pO2lmKFwibG9nXCI9PT1sLnR5cGUpZm9yKHI9MTtyPGQ7cis9Mil3W3JdPWwuYzJsKHdbcl0pO2lmKHAmJlwibG9nXCIhPT1zLnR5cGUmJlwibG9nXCIhPT1sLnR5cGUpZy50cmVlPW8odyk7ZWxzZXt2YXIgaz1nLmlkcz1uZXcgQXJyYXkoaCk7Zm9yKHI9MDtyPGg7cisrKWtbcl09cn1iKHQsZSk7dmFyIFMsTD1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89QS5zdHlsZSh0LHIpO2lmKG8ubWFya2VyJiYoby5tYXJrZXIucG9zaXRpb25zPW4pLG8ubGluZSYmbi5sZW5ndGg+MSYmdS5leHRlbmRGbGF0KG8ubGluZSxBLmxpbmVQb3NpdGlvbnModCxyLG4pKSxvLmVycm9yWHx8by5lcnJvclkpe3ZhciBzPUEuZXJyb3JCYXJQb3NpdGlvbnModCxyLG4saSxhKTtvLmVycm9yWCYmdS5leHRlbmRGbGF0KG8uZXJyb3JYLHMueCksby5lcnJvclkmJnUuZXh0ZW5kRmxhdChvLmVycm9yWSxzLnkpfXJldHVybiBvLnRleHQmJih1LmV4dGVuZEZsYXQoby50ZXh0LHtwb3NpdGlvbnM6bn0sQS50ZXh0UG9zaXRpb24odCxyLG8udGV4dCxvLm1hcmtlcikpLHUuZXh0ZW5kRmxhdChvLnRleHRTZWwse3Bvc2l0aW9uczpufSxBLnRleHRQb3NpdGlvbih0LHIsby50ZXh0LG8ubWFya2VyU2VsKSksdS5leHRlbmRGbGF0KG8udGV4dFVuc2VsLHtwb3NpdGlvbnM6bn0sQS50ZXh0UG9zaXRpb24odCxyLG8udGV4dCxvLm1hcmtlclVuc2VsKSkpLG99KHQsMCxlLHcsdixfKSx6PUMoMCxjKTtyZXR1cm4geChhLGUpLHA/TC5tYXJrZXImJihTPTIqKEwubWFya2VyLnNpemVBdmd8fE1hdGgubWF4KEwubWFya2VyLnNpemUsMykpKTpTPW0oZSxoKSx5KHQsZSxzLGwsdixfLFMpLEwuZXJyb3JYJiZFKGUscyxMLmVycm9yWCksTC5lcnJvclkmJkUoZSxsLEwuZXJyb3JZKSxMLmZpbGwmJiF6LmZpbGwyZCYmKHouZmlsbDJkPSEwKSxMLm1hcmtlciYmIXouc2NhdHRlcjJkJiYoei5zY2F0dGVyMmQ9ITApLEwubGluZSYmIXoubGluZTJkJiYoei5saW5lMmQ9ITApLCFMLmVycm9yWCYmIUwuZXJyb3JZfHx6LmVycm9yMmR8fCh6LmVycm9yMmQ9ITApLEwudGV4dCYmIXouZ2xUZXh0JiYoei5nbFRleHQ9ITApLEwubWFya2VyJiYoTC5tYXJrZXIuc25hcD1nLnRyZWV8fE0pLHoubGluZU9wdGlvbnMucHVzaChMLmxpbmUpLHouZXJyb3JYT3B0aW9ucy5wdXNoKEwuZXJyb3JYKSx6LmVycm9yWU9wdGlvbnMucHVzaChMLmVycm9yWSksei5maWxsT3B0aW9ucy5wdXNoKEwuZmlsbCksei5tYXJrZXJPcHRpb25zLnB1c2goTC5tYXJrZXIpLHoubWFya2VyU2VsZWN0ZWRPcHRpb25zLnB1c2goTC5tYXJrZXJTZWwpLHoubWFya2VyVW5zZWxlY3RlZE9wdGlvbnMucHVzaChMLm1hcmtlclVuc2VsKSx6LnRleHRPcHRpb25zLnB1c2goTC50ZXh0KSx6LnRleHRTZWxlY3RlZE9wdGlvbnMucHVzaChMLnRleHRTZWwpLHoudGV4dFVuc2VsZWN0ZWRPcHRpb25zLnB1c2goTC50ZXh0VW5zZWwpLGcuX3NjZW5lPXosZy5pbmRleD16LmNvdW50LGcueD12LGcueT1fLGcucG9zaXRpb25zPXcsei5jb3VudCsrLFt7eDohMSx5OiExLHQ6Zyx0cmFjZTplfV19LHBsb3Q6ZnVuY3Rpb24odCxlLHIpe2lmKHIubGVuZ3RoKXt2YXIgbyxzLGM9dC5fZnVsbExheW91dCxmPWUuX3NjZW5lLHA9ZS54YXhpcyxkPWUueWF4aXM7aWYoZilpZihoKHQsW1wiQU5HTEVfaW5zdGFuY2VkX2FycmF5c1wiLFwiT0VTX2VsZW1lbnRfaW5kZXhfdWludFwiXSkpe3ZhciB2PWMuX2dsY2FudmFzLmRhdGEoKVswXS5yZWdsO2lmKF8odCxlLHIpLGYuZGlydHkpe2lmKCEwPT09Zi5lcnJvcjJkJiYoZi5lcnJvcjJkPWEodikpLCEwPT09Zi5saW5lMmQmJihmLmxpbmUyZD1pKHYpKSwhMD09PWYuc2NhdHRlcjJkJiYoZi5zY2F0dGVyMmQ9bih2KSksITA9PT1mLmZpbGwyZCYmKGYuZmlsbDJkPWkodikpLCEwPT09Zi5nbFRleHQpZm9yKGYuZ2xUZXh0PW5ldyBBcnJheShmLmNvdW50KSxvPTA7bzxmLmNvdW50O28rKylmLmdsVGV4dFtvXT1uZXcgbCh2KTtpZihmLmdsVGV4dCl7aWYoZi5jb3VudD5mLmdsVGV4dC5sZW5ndGgpe3ZhciBtPWYuY291bnQtZi5nbFRleHQubGVuZ3RoO2ZvcihvPTA7bzxtO28rKylmLmdsVGV4dC5wdXNoKG5ldyBsKHYpKX1lbHNlIGlmKGYuY291bnQ8Zi5nbFRleHQubGVuZ3RoKXt2YXIgeT1mLmdsVGV4dC5sZW5ndGgtZi5jb3VudDtmLmdsVGV4dC5zcGxpY2UoZi5jb3VudCx5KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZGVzdHJveSgpfSl9Zm9yKG89MDtvPGYuY291bnQ7bysrKWYuZ2xUZXh0W29dLnVwZGF0ZShmLnRleHRPcHRpb25zW29dKX1pZihmLmxpbmUyZCYmKGYubGluZTJkLnVwZGF0ZShmLmxpbmVPcHRpb25zKSxmLmxpbmVPcHRpb25zPWYubGluZU9wdGlvbnMubWFwKGZ1bmN0aW9uKHQpe2lmKHQmJnQucG9zaXRpb25zKXtmb3IodmFyIGU9dC5wb3NpdGlvbnMscj0wO3I8ZS5sZW5ndGgmJihpc05hTihlW3JdKXx8aXNOYU4oZVtyKzFdKSk7KXIrPTI7Zm9yKHZhciBuPWUubGVuZ3RoLTI7bj5yJiYoaXNOYU4oZVtuXSl8fGlzTmFOKGVbbisxXSkpOyluLT0yO3QucG9zaXRpb25zPWUuc2xpY2UocixuKzIpfXJldHVybiB0fSksZi5saW5lMmQudXBkYXRlKGYubGluZU9wdGlvbnMpKSxmLmVycm9yMmQpe3ZhciB4PShmLmVycm9yWE9wdGlvbnN8fFtdKS5jb25jYXQoZi5lcnJvcllPcHRpb25zfHxbXSk7Zi5lcnJvcjJkLnVwZGF0ZSh4KX1mLnNjYXR0ZXIyZCYmZi5zY2F0dGVyMmQudXBkYXRlKGYubWFya2VyT3B0aW9ucyksZi5maWxsT3JkZXI9dS5yZXBlYXQobnVsbCxmLmNvdW50KSxmLmZpbGwyZCYmKGYuZmlsbE9wdGlvbnM9Zi5maWxsT3B0aW9ucy5tYXAoZnVuY3Rpb24odCxlKXt2YXIgbj1yW2VdO2lmKHQmJm4mJm5bMF0mJm5bMF0udHJhY2Upe3ZhciBpLGEsbz1uWzBdLHM9by50cmFjZSxsPW8udCxjPWYubGluZU9wdGlvbnNbZV0sdT1bXTtzLl9vd25maWxsJiZ1LnB1c2goZSkscy5fbmV4dHRyYWNlJiZ1LnB1c2goZSsxKSx1Lmxlbmd0aCYmKGYuZmlsbE9yZGVyW2VdPXUpO3ZhciBoLHAsZD1bXSxnPWMmJmMucG9zaXRpb25zfHxsLnBvc2l0aW9ucztpZihcInRvemVyb3lcIj09PXMuZmlsbCl7Zm9yKGg9MDtoPGcubGVuZ3RoJiZpc05hTihnW2grMV0pOyloKz0yO2ZvcihwPWcubGVuZ3RoLTI7cD5oJiZpc05hTihnW3ArMV0pOylwLT0yOzAhPT1nW2grMV0mJihkPVtnW2hdLDBdKSxkPWQuY29uY2F0KGcuc2xpY2UoaCxwKzIpKSwwIT09Z1twKzFdJiYoZD1kLmNvbmNhdChbZ1twXSwwXSkpfWVsc2UgaWYoXCJ0b3plcm94XCI9PT1zLmZpbGwpe2ZvcihoPTA7aDxnLmxlbmd0aCYmaXNOYU4oZ1toXSk7KWgrPTI7Zm9yKHA9Zy5sZW5ndGgtMjtwPmgmJmlzTmFOKGdbcF0pOylwLT0yOzAhPT1nW2hdJiYoZD1bMCxnW2grMV1dKSxkPWQuY29uY2F0KGcuc2xpY2UoaCxwKzIpKSwwIT09Z1twXSYmKGQ9ZC5jb25jYXQoWzAsZ1twKzFdXSkpfWVsc2UgaWYoXCJ0b3NlbGZcIj09PXMuZmlsbHx8XCJ0b25leHRcIj09PXMuZmlsbCl7Zm9yKGQ9W10saT0wLGE9MDthPGcubGVuZ3RoO2ErPTIpKGlzTmFOKGdbYV0pfHxpc05hTihnW2ErMV0pKSYmKChkPWQuY29uY2F0KGcuc2xpY2UoaSxhKSkpLnB1c2goZ1tpXSxnW2krMV0pLGk9YSsyKTtkPWQuY29uY2F0KGcuc2xpY2UoaSkpLGkmJmQucHVzaChnW2ldLGdbaSsxXSl9ZWxzZXt2YXIgdj1zLl9uZXh0dHJhY2U7aWYodil7dmFyIG09Zi5saW5lT3B0aW9uc1tlKzFdO2lmKG0pe3ZhciB5PW0ucG9zaXRpb25zO2lmKFwidG9uZXh0eVwiPT09cy5maWxsKXtmb3IoZD1nLnNsaWNlKCksZT1NYXRoLmZsb29yKHkubGVuZ3RoLzIpO2UtLTspe3ZhciB4PXlbMiplXSxiPXlbMiplKzFdO2lzTmFOKHgpfHxpc05hTihiKXx8ZC5wdXNoKHgsYil9dC5maWxsPXYuZmlsbGNvbG9yfX19fWlmKHMuX3ByZXZ0cmFjZSYmXCJ0b25leHRcIj09PXMuX3ByZXZ0cmFjZS5maWxsKXt2YXIgXz1mLmxpbmVPcHRpb25zW2UtMV0ucG9zaXRpb25zLHc9ZC5sZW5ndGgvMixrPVtpPXddO2ZvcihhPTA7YTxfLmxlbmd0aDthKz0yKShpc05hTihfW2FdKXx8aXNOYU4oX1thKzFdKSkmJihrLnB1c2goYS8yK3crMSksaT1hKzIpO2Q9ZC5jb25jYXQoXyksdC5ob2xlPWt9cmV0dXJuIHQuZmlsbG1vZGU9cy5maWxsLHQub3BhY2l0eT1zLm9wYWNpdHksdC5wb3NpdGlvbnM9ZCx0fX0pLGYuZmlsbDJkLnVwZGF0ZShmLmZpbGxPcHRpb25zKSl9Zi5zZWxlY3RCYXRjaD1udWxsLGYudW5zZWxlY3RCYXRjaD1udWxsO3ZhciBiPWMuZHJhZ21vZGUsdz1cImxhc3NvXCI9PT1ifHxcInNlbGVjdFwiPT09YixrPWMuY2xpY2ttb2RlLmluZGV4T2YoXCJzZWxlY3RcIik+LTE7Zm9yKG89MDtvPHIubGVuZ3RoO28rKyl7dmFyIEE9cltvXVswXSxUPUEudHJhY2UsTT1BLnQsUz1NLmluZGV4LEU9VC5fbGVuZ3RoLEM9TS54LEw9TS55O2lmKFQuc2VsZWN0ZWRwb2ludHN8fHd8fGspe2lmKHd8fCh3PSEwKSxmLnNlbGVjdEJhdGNofHwoZi5zZWxlY3RCYXRjaD1bXSxmLnVuc2VsZWN0QmF0Y2g9W10pLFQuc2VsZWN0ZWRwb2ludHMpe3ZhciBPPWYuc2VsZWN0QmF0Y2hbU109dS5zZWxJbmRpY2VzMnNlbFBvaW50cyhUKSxJPXt9O2ZvcihzPTA7czxPLmxlbmd0aDtzKyspSVtPW3NdXT0xO3ZhciBEPVtdO2ZvcihzPTA7czxFO3MrKylJW3NdfHxELnB1c2gocyk7Zi51bnNlbGVjdEJhdGNoW1NdPUR9dmFyIFA9TS54cHg9bmV3IEFycmF5KEUpLFI9TS55cHg9bmV3IEFycmF5KEUpO2ZvcihzPTA7czxFO3MrKylQW3NdPXAuYzJwKENbc10pLFJbc109ZC5jMnAoTFtzXSl9ZWxzZSBNLnhweD1NLnlweD1udWxsfXc/KGYuc2VsZWN0MmR8fChmLnNlbGVjdDJkPW4oYy5fZ2xjYW52YXMuZGF0YSgpWzFdLnJlZ2wpKSxmLnNjYXR0ZXIyZCYmZi5zZWxlY3RCYXRjaCYmZi5zZWxlY3RCYXRjaC5sZW5ndGgmJmYuc2NhdHRlcjJkLnVwZGF0ZShmLm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBmLnNlbGVjdEJhdGNoW2VdP3Q6bnVsbH0pKSxmLnNlbGVjdDJkJiYoZi5zZWxlY3QyZC51cGRhdGUoZi5tYXJrZXJPcHRpb25zKSxmLnNlbGVjdDJkLnVwZGF0ZShmLm1hcmtlclNlbGVjdGVkT3B0aW9ucykpLGYuZ2xUZXh0JiZyLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9KCh0fHxbXSlbMF18fHt9KS50cmFjZXx8e307Zy5oYXNUZXh0KGUpJiZ6KHQpfSkpOmYuc2NhdHRlcjJkJiZmLnNjYXR0ZXIyZC51cGRhdGUoZi5tYXJrZXJPcHRpb25zKTt2YXIgRj17dmlld3BvcnQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuX3NpemUsaT10LndpZHRoLGE9dC5oZWlnaHQ7cmV0dXJuW24ubCtlLmRvbWFpblswXSpuLncsbi5iK3IuZG9tYWluWzBdKm4uaCxpLW4uci0oMS1lLmRvbWFpblsxXSkqbi53LGEtbi50LSgxLXIuZG9tYWluWzFdKSpuLmhdfShjLHAsZCkscmFuZ2U6WyhwLl9ybHx8cC5yYW5nZSlbMF0sKGQuX3JsfHxkLnJhbmdlKVswXSwocC5fcmx8fHAucmFuZ2UpWzFdLChkLl9ybHx8ZC5yYW5nZSlbMV1dfSxCPXUucmVwZWF0KEYsZi5jb3VudCk7Zi5maWxsMmQmJmYuZmlsbDJkLnVwZGF0ZShCKSxmLmxpbmUyZCYmZi5saW5lMmQudXBkYXRlKEIpLGYuZXJyb3IyZCYmZi5lcnJvcjJkLnVwZGF0ZShCLmNvbmNhdChCKSksZi5zY2F0dGVyMmQmJmYuc2NhdHRlcjJkLnVwZGF0ZShCKSxmLnNlbGVjdDJkJiZmLnNlbGVjdDJkLnVwZGF0ZShCKSxmLmdsVGV4dCYmZi5nbFRleHQuZm9yRWFjaChmdW5jdGlvbih0KXt0LnVwZGF0ZShGKX0pfWVsc2UgZi5pbml0KCl9fSxob3ZlclBvaW50czpmdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scyxsLGMsdSxoLGYscD10LmNkLGQ9cFswXS50LGc9cFswXS50cmFjZSx2PXQueGEsbT10LnlhLHk9ZC54LHg9ZC55LGI9di5jMnAoZSksXz1tLmMycChyKSx3PXQuZGlzdGFuY2U7aWYoZC50cmVlKXt2YXIgaz12LnAyYyhiLXcpLEE9di5wMmMoYit3KSxUPW0ucDJjKF8tdyksTT1tLnAyYyhfK3cpO2k9XCJ4XCI9PT1uP2QudHJlZS5yYW5nZShNYXRoLm1pbihrLEEpLE1hdGgubWluKG0uX3JsWzBdLG0uX3JsWzFdKSxNYXRoLm1heChrLEEpLE1hdGgubWF4KG0uX3JsWzBdLG0uX3JsWzFdKSk6ZC50cmVlLnJhbmdlKE1hdGgubWluKGssQSksTWF0aC5taW4oVCxNKSxNYXRoLm1heChrLEEpLE1hdGgubWF4KFQsTSkpfWVsc2V7aWYoIWQuaWRzKXJldHVyblt0XTtpPWQuaWRzfXZhciBTPXc7aWYoXCJ4XCI9PT1uKWZvcihsPTA7bDxpLmxlbmd0aDtsKyspbz15W2lbbF1dLChjPU1hdGguYWJzKHYuYzJwKG8pLWIpKTxTJiYoUz1jLHU9bS5jMnAoeFtpW2xdXSktXyxmPU1hdGguc3FydChjKmMrdSp1KSxhPWlbbF0pO2Vsc2UgZm9yKGw9MDtsPGkubGVuZ3RoO2wrKylvPXlbaVtsXV0scz14W2lbbF1dLGM9di5jMnAobyktYix1PW0uYzJwKHMpLV8sKGg9TWF0aC5zcXJ0KGMqYyt1KnUpKTxTJiYoUz1mPWgsYT1pW2xdKTtyZXR1cm4gdC5pbmRleD1hLHQuZGlzdGFuY2U9Uyx0LmR4eT1mLHZvaWQgMD09PWE/W3RdOihMKHQseSx4LGcpLFt0XSl9LHNlbGVjdFBvaW50czpmdW5jdGlvbih0LGUpe3ZhciByPXQuY2Qsbj1bXSxpPXJbMF0udHJhY2UsYT1yWzBdLnQsbz1pLl9sZW5ndGgsbD1hLngsYz1hLnksdT1hLl9zY2VuZTtpZighdSlyZXR1cm4gbjt2YXIgaD1nLmhhc1RleHQoaSksZj1nLmhhc01hcmtlcnMoaSkscD0hZiYmIWg7aWYoITAhPT1pLnZpc2libGV8fHApcmV0dXJuIG47dmFyIGQsdj1udWxsLG09bnVsbDtpZighMT09PWV8fGUuZGVnZW5lcmF0ZSltPXMobyk7ZWxzZSBmb3Iodj1bXSxtPVtdLGQ9MDtkPG87ZCsrKWUuY29udGFpbnMoW2EueHB4W2RdLGEueXB4W2RdXSwhMSxkLHQpPyh2LnB1c2goZCksbi5wdXNoKHtwb2ludE51bWJlcjpkLHg6bFtkXSx5OmNbZF19KSk6bS5wdXNoKGQpO2lmKHUuc2VsZWN0QmF0Y2h8fCh1LnNlbGVjdEJhdGNoPVtdLHUudW5zZWxlY3RCYXRjaD1bXSksIXUuc2VsZWN0QmF0Y2hbYS5pbmRleF0pe2ZvcihkPTA7ZDx1LmNvdW50O2QrKyl1LnNlbGVjdEJhdGNoW2RdPVtdLHUudW5zZWxlY3RCYXRjaFtkXT1bXTtmJiZ1LnNjYXR0ZXIyZC51cGRhdGUodS5tYXJrZXJVbnNlbGVjdGVkT3B0aW9ucyl9cmV0dXJuIHUuc2VsZWN0QmF0Y2hbYS5pbmRleF09dix1LnVuc2VsZWN0QmF0Y2hbYS5pbmRleF09bSxoJiZ6KHIpLG59LHNjZW5lVXBkYXRlOkMsY2FsY0hvdmVyOkwsbWV0YTp7fX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zXCI6Njc3LFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9wcmVwYXJlX3JlZ2xcIjo3MTQsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIjo3NjAsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlXCI6NzQ4LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCI6NzUyLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9zY2F0dGVyL2NhbGNcIjoxMDUzLFwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGNcIjoxMDU1LFwiLi4vc2NhdHRlci9jcm9zc190cmFjZV9kZWZhdWx0c1wiOjEwNTgsXCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dFwiOjEwNjAsXCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvclwiOjEwNjIsXCIuLi9zY2F0dGVyL2xpbmtfdHJhY2VzXCI6MTA2OCxcIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyXCI6MTA3MCxcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi9hdHRyaWJ1dGVzXCI6MTEwMSxcIi4vY29uc3RhbnRzXCI6MTEwMixcIi4vY29udmVydFwiOjExMDMsXCIuL2RlZmF1bHRzXCI6MTEwNCxcImFycmF5LXJhbmdlXCI6NTgsXCJnbC10ZXh0XCI6MzE0LFwicG9pbnQtY2x1c3RlclwiOjQ2MixcInJlZ2wtZXJyb3IyZFwiOjQ4MyxcInJlZ2wtbGluZTJkXCI6NDg0LFwicmVnbC1zY2F0dGVyMmRcIjo0ODV9XSwxMTA2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uL3NjYXR0ZXJnZW8vYXR0cmlidXRlc1wiKSxhPXQoXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vLi4vcGxvdHMvbWFwYm94L2xheW91dF9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIiksbD10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCIpLGM9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCx1PXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsLGg9aS5saW5lLGY9aS5tYXJrZXI7ZS5leHBvcnRzPXUoe2xvbjppLmxvbixsYXQ6aS5sYXQsbW9kZTpjKHt9LGEubW9kZSx7ZGZsdDpcIm1hcmtlcnNcIn0pLHRleHQ6Yyh7fSxhLnRleHQse30pLGhvdmVydGV4dDpjKHt9LGEuaG92ZXJ0ZXh0LHt9KSxsaW5lOntjb2xvcjpoLmNvbG9yLHdpZHRoOmgud2lkdGh9LGNvbm5lY3RnYXBzOmEuY29ubmVjdGdhcHMsbWFya2VyOntzeW1ib2w6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiY2lyY2xlXCIsYXJyYXlPazohMH0sb3BhY2l0eTpmLm9wYWNpdHksc2l6ZTpmLnNpemUsc2l6ZXJlZjpmLnNpemVyZWYsc2l6ZW1pbjpmLnNpemVtaW4sc2l6ZW1vZGU6Zi5zaXplbW9kZSxjb2xvcjpmLmNvbG9yLGNvbG9yc2NhbGU6Zi5jb2xvcnNjYWxlLGNhdXRvOmYuY2F1dG8sY21heDpmLmNtYXgsY21pbjpmLmNtaW4sY21pZDpmLmNtaWQsYXV0b2NvbG9yc2NhbGU6Zi5hdXRvY29sb3JzY2FsZSxyZXZlcnNlc2NhbGU6Zi5yZXZlcnNlc2NhbGUsc2hvd3NjYWxlOmYuc2hvd3NjYWxlLGNvbG9yYmFyOmx9LGZpbGw6aS5maWxsLGZpbGxjb2xvcjphLmZpbGxjb2xvcix0ZXh0Zm9udDpvLmxheWVycy5zeW1ib2wudGV4dGZvbnQsdGV4dHBvc2l0aW9uOm8ubGF5ZXJzLnN5bWJvbC50ZXh0cG9zaXRpb24sc2VsZWN0ZWQ6e21hcmtlcjphLnNlbGVjdGVkLm1hcmtlcn0sdW5zZWxlY3RlZDp7bWFya2VyOmEudW5zZWxlY3RlZC5tYXJrZXJ9LGhvdmVyaW5mbzpjKHt9LHMuaG92ZXJpbmZvLHtmbGFnczpbXCJsb25cIixcImxhdFwiLFwidGV4dFwiLFwibmFtZVwiXX0pLGhvdmVydGVtcGxhdGU6bigpfSxcImNhbGNcIixcIm5lc3RlZFwiKX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCI6NTc5LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDYsXCIuLi8uLi9wbG90cy9tYXBib3gvbGF5b3V0X2F0dHJpYnV0ZXNcIjo4MDYsXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIjoxMDUyLFwiLi4vc2NhdHRlcmdlby9hdHRyaWJ1dGVzXCI6MTA5Mn1dLDExMDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNLG89dChcIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzXCIpLHM9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZVwiKSxsPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksYz10KFwiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmNcIiksdT10KFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiKSxoPXQoXCIuLi8uLi9wbG90cy9tYXBib3gvY29udmVydF90ZXh0X29wdHNcIik7ZnVuY3Rpb24gZigpe3JldHVybntnZW9qc29uOm8ubWFrZUJsYW5rKCksbGF5b3V0Ont2aXNpYmlsaXR5Olwibm9uZVwifSxwYWludDp7fX19ZnVuY3Rpb24gcCh0KXtyZXR1cm4gaS5pc0FycmF5T3JUeXBlZEFycmF5KHQpP2Z1bmN0aW9uKHQpe3JldHVybiB0fTp0P2Z1bmN0aW9uKCl7cmV0dXJuIHR9OmR9ZnVuY3Rpb24gZCgpe3JldHVyblwiXCJ9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdFswXT09PWF9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dFswXS50cmFjZSxhPSEwPT09ci52aXNpYmxlLHY9XCJub25lXCIhPT1yLmZpbGwsbT11Lmhhc0xpbmVzKHIpLHk9dS5oYXNNYXJrZXJzKHIpLHg9dS5oYXNUZXh0KHIpLGI9eSYmXCJjaXJjbGVcIj09PXIubWFya2VyLnN5bWJvbCxfPXkmJlwiY2lyY2xlXCIhPT1yLm1hcmtlci5zeW1ib2wsdz1mKCksaz1mKCksQT1mKCksVD1mKCksTT17ZmlsbDp3LGxpbmU6ayxjaXJjbGU6QSxzeW1ib2w6VH07aWYoIWEpcmV0dXJuIE07aWYoKHZ8fG0pJiYoZT1vLmNhbGNUcmFjZVRvTGluZUNvb3Jkcyh0KSksdiYmKHcuZ2VvanNvbj1vLm1ha2VQb2x5Z29uKGUpLHcubGF5b3V0LnZpc2liaWxpdHk9XCJ2aXNpYmxlXCIsaS5leHRlbmRGbGF0KHcucGFpbnQse1wiZmlsbC1jb2xvclwiOnIuZmlsbGNvbG9yfSkpLG0mJihrLmdlb2pzb249by5tYWtlTGluZShlKSxrLmxheW91dC52aXNpYmlsaXR5PVwidmlzaWJsZVwiLGkuZXh0ZW5kRmxhdChrLnBhaW50LHtcImxpbmUtd2lkdGhcIjpyLmxpbmUud2lkdGgsXCJsaW5lLWNvbG9yXCI6ci5saW5lLmNvbG9yLFwibGluZS1vcGFjaXR5XCI6ci5vcGFjaXR5fSkpLGIpe3ZhciBTPWZ1bmN0aW9uKHQpe3ZhciBlLHIsYSxvLHU9dFswXS50cmFjZSxoPXUubWFya2VyLGY9dS5zZWxlY3RlZHBvaW50cyxwPWkuaXNBcnJheU9yVHlwZWRBcnJheShoLmNvbG9yKSxkPWkuaXNBcnJheU9yVHlwZWRBcnJheShoLnNpemUpLHY9aS5pc0FycmF5T3JUeXBlZEFycmF5KGgub3BhY2l0eSk7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdS5vcGFjaXR5KnR9cCYmKHI9cy5oYXNDb2xvcnNjYWxlKHUsXCJtYXJrZXJcIik/cy5tYWtlQ29sb3JTY2FsZUZ1bmMocy5leHRyYWN0U2NhbGUoaCx7Y0xldHRlcjpcImNcIn0pKTppLmlkZW50aXR5KTtkJiYoYT1jKHUpKTt2JiYobz1mdW5jdGlvbih0KXt2YXIgZT1uKHQpPytpLmNvbnN0cmFpbih0LDAsMSk6MDtyZXR1cm4gbShlKX0pO3ZhciB5LHg9W107Zm9yKGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIGI9dFtlXSxfPWIubG9ubGF0O2lmKCFnKF8pKXt2YXIgdz17fTtyJiYody5tY2M9Yi5tY2M9cihiLm1jKSksYSYmKHcubXJjPWIubXJjPWEoYi5tcykpLG8mJih3Lm1vPW8oYi5tbykpLGYmJih3LnNlbGVjdGVkPWIuc2VsZWN0ZWR8fDApLHgucHVzaCh7dHlwZTpcIkZlYXR1cmVcIixnZW9tZXRyeTp7dHlwZTpcIlBvaW50XCIsY29vcmRpbmF0ZXM6X30scHJvcGVydGllczp3fSl9fWlmKGYpZm9yKHk9bC5tYWtlU2VsZWN0ZWRQb2ludFN0eWxlRm5zKHUpLGU9MDtlPHgubGVuZ3RoO2UrKyl7dmFyIGs9eFtlXS5wcm9wZXJ0aWVzO3kuc2VsZWN0ZWRPcGFjaXR5Rm4mJihrLm1vPW0oeS5zZWxlY3RlZE9wYWNpdHlGbihrKSkpLHkuc2VsZWN0ZWRDb2xvckZuJiYoay5tY2M9eS5zZWxlY3RlZENvbG9yRm4oaykpLHkuc2VsZWN0ZWRTaXplRm4mJihrLm1yYz15LnNlbGVjdGVkU2l6ZUZuKGspKX1yZXR1cm57Z2VvanNvbjp7dHlwZTpcIkZlYXR1cmVDb2xsZWN0aW9uXCIsZmVhdHVyZXM6eH0sbWNjOnB8fHkmJnkuc2VsZWN0ZWRDb2xvckZuP3t0eXBlOlwiaWRlbnRpdHlcIixwcm9wZXJ0eTpcIm1jY1wifTpoLmNvbG9yLG1yYzpkfHx5JiZ5LnNlbGVjdGVkU2l6ZUZuP3t0eXBlOlwiaWRlbnRpdHlcIixwcm9wZXJ0eTpcIm1yY1wifTooQT1oLnNpemUsQS8yKSxtbzp2fHx5JiZ5LnNlbGVjdGVkT3BhY2l0eUZuP3t0eXBlOlwiaWRlbnRpdHlcIixwcm9wZXJ0eTpcIm1vXCJ9Om0oaC5vcGFjaXR5KX07dmFyIEF9KHQpO0EuZ2VvanNvbj1TLmdlb2pzb24sQS5sYXlvdXQudmlzaWJpbGl0eT1cInZpc2libGVcIixpLmV4dGVuZEZsYXQoQS5wYWludCx7XCJjaXJjbGUtY29sb3JcIjpTLm1jYyxcImNpcmNsZS1yYWRpdXNcIjpTLm1yYyxcImNpcmNsZS1vcGFjaXR5XCI6Uy5tb30pfWlmKChffHx4KSYmKFQuZ2VvanNvbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dFswXS50cmFjZSxyPShlLm1hcmtlcnx8e30pLnN5bWJvbCxuPWUudGV4dCxpPVwiY2lyY2xlXCIhPT1yP3Aocik6ZCxhPXUuaGFzVGV4dChlKT9wKG4pOmQsbz1bXSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPXRbc107ZyhsLmxvbmxhdCl8fG8ucHVzaCh7dHlwZTpcIkZlYXR1cmVcIixnZW9tZXRyeTp7dHlwZTpcIlBvaW50XCIsY29vcmRpbmF0ZXM6bC5sb25sYXR9LHByb3BlcnRpZXM6e3N5bWJvbDppKGwubXgpLHRleHQ6YShsLnR4KX19KX1yZXR1cm57dHlwZTpcIkZlYXR1cmVDb2xsZWN0aW9uXCIsZmVhdHVyZXM6b319KHQpLGkuZXh0ZW5kRmxhdChULmxheW91dCx7dmlzaWJpbGl0eTpcInZpc2libGVcIixcImljb24taW1hZ2VcIjpcIntzeW1ib2x9LTE1XCIsXCJ0ZXh0LWZpZWxkXCI6XCJ7dGV4dH1cIn0pLF8mJihpLmV4dGVuZEZsYXQoVC5sYXlvdXQse1wiaWNvbi1zaXplXCI6ci5tYXJrZXIuc2l6ZS8xMH0pLGkuZXh0ZW5kRmxhdChULnBhaW50LHtcImljb24tb3BhY2l0eVwiOnIub3BhY2l0eSpyLm1hcmtlci5vcGFjaXR5LFwiaWNvbi1jb2xvclwiOnIubWFya2VyLmNvbG9yfSkpLHgpKXt2YXIgRT0oci5tYXJrZXJ8fHt9KS5zaXplLEM9aChyLnRleHRwb3NpdGlvbixFKTtpLmV4dGVuZEZsYXQoVC5sYXlvdXQse1widGV4dC1zaXplXCI6ci50ZXh0Zm9udC5zaXplLFwidGV4dC1hbmNob3JcIjpDLmFuY2hvcixcInRleHQtb2Zmc2V0XCI6Qy5vZmZzZXR9KSxpLmV4dGVuZEZsYXQoVC5wYWludCx7XCJ0ZXh0LWNvbG9yXCI6ci50ZXh0Zm9udC5jb2xvcixcInRleHQtb3BhY2l0eVwiOnIub3BhY2l0eX0pfXJldHVybiBNfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlXCI6NTkwLFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzXCI6Njk1LFwiLi4vLi4vcGxvdHMvbWFwYm94L2NvbnZlcnRfdGV4dF9vcHRzXCI6ODAzLFwiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmNcIjoxMDY5LFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiOjEwNzYsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDExMDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIiksYT10KFwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHNcIiksbz10KFwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzXCIpLHM9dChcIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0c1wiKSxsPXQoXCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0c1wiKSxjPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUpe2Z1bmN0aW9uIGgocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGMscixpKX1pZihmdW5jdGlvbih0LGUscil7dmFyIG49cihcImxvblwiKXx8W10saT1yKFwibGF0XCIpfHxbXSxhPU1hdGgubWluKG4ubGVuZ3RoLGkubGVuZ3RoKTtyZXR1cm4gZS5fbGVuZ3RoPWEsYX0oMCxlLGgpKXtpZihoKFwidGV4dFwiKSxoKFwiaG92ZXJ0ZXh0XCIpLGgoXCJob3ZlcnRlbXBsYXRlXCIpLGgoXCJtb2RlXCIpLGkuaGFzTGluZXMoZSkmJihvKHQsZSxyLHUsaCx7bm9EYXNoOiEwfSksaChcImNvbm5lY3RnYXBzXCIpKSxpLmhhc01hcmtlcnMoZSkpe2EodCxlLHIsdSxoLHtub0xpbmU6ITB9KTt2YXIgZj1lLm1hcmtlcjtcImNpcmNsZVwiIT09Zi5zeW1ib2wmJihuLmlzQXJyYXlPclR5cGVkQXJyYXkoZi5zaXplKSYmKGYuc2l6ZT1mLnNpemVbMF0pLG4uaXNBcnJheU9yVHlwZWRBcnJheShmLmNvbG9yKSYmKGYuY29sb3I9Zi5jb2xvclswXSkpfWkuaGFzVGV4dChlKSYmcyh0LGUsdSxoLHtub1NlbGVjdDohMH0pLGgoXCJmaWxsXCIpLFwibm9uZVwiIT09ZS5maWxsJiZsKHQsZSxyLGgpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGgpfWVsc2UgZS52aXNpYmxlPSExfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHNcIjoxMDYxLFwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzXCI6MTA2NSxcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCI6MTA3MSxcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzXCI6MTA3NyxcIi4vYXR0cmlidXRlc1wiOjExMDZ9XSwxMTA5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubG9uPWUubG9uLHQubGF0PWUubGF0LHR9fSx7fV0sMTExMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4XCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvclwiKSxvPXQoXCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dFwiKSxzPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBsPXQuY2QsYz1sWzBdLnRyYWNlLHU9dC54YSxoPXQueWEsZj10LnN1YnBsb3QscD0zNjAqKGU+PTA/TWF0aC5mbG9vcigoZSsxODApLzM2MCk6TWF0aC5jZWlsKChlLTE4MCkvMzYwKSksZD1lLXA7aWYobi5nZXRDbG9zZXN0KGwsZnVuY3Rpb24odCl7dmFyIGU9dC5sb25sYXQ7aWYoZVswXT09PXMpcmV0dXJuIDEvMDt2YXIgbj1pLm1vZEhhbGYoZVswXSwzNjApLGE9ZVsxXSxvPWYucHJvamVjdChbbixhXSksbD1vLngtdS5jMnAoW2QsYV0pLGM9by55LWguYzJwKFtuLHJdKSxwPU1hdGgubWF4KDMsdC5tcmN8fDApO3JldHVybiBNYXRoLm1heChNYXRoLnNxcnQobCpsK2MqYyktcCwxLTMvcCl9LHQpLCExIT09dC5pbmRleCl7dmFyIGc9bFt0LmluZGV4XSx2PWcubG9ubGF0LG09W2kubW9kSGFsZih2WzBdLDM2MCkrcCx2WzFdXSx5PXUuYzJwKG0pLHg9aC5jMnAobSksYj1nLm1yY3x8MTtyZXR1cm4gdC54MD15LWIsdC54MT15K2IsdC55MD14LWIsdC55MT14K2IsdC5jb2xvcj1hKGMsZyksdC5leHRyYVRleHQ9ZnVuY3Rpb24odCxlLHIpe2lmKHQuaG92ZXJ0ZW1wbGF0ZSlyZXR1cm47dmFyIG49KGUuaGl8fHQuaG92ZXJpbmZvKS5zcGxpdChcIitcIiksaT0tMSE9PW4uaW5kZXhPZihcImFsbFwiKSxhPS0xIT09bi5pbmRleE9mKFwibG9uXCIpLHM9LTEhPT1uLmluZGV4T2YoXCJsYXRcIiksbD1lLmxvbmxhdCxjPVtdO2Z1bmN0aW9uIHUodCl7cmV0dXJuIHQrXCJcXHhiMFwifWl8fGEmJnM/Yy5wdXNoKFwiKFwiK3UobFswXSkrXCIsIFwiK3UobFsxXSkrXCIpXCIpOmE/Yy5wdXNoKHIubG9uK3UobFswXSkpOnMmJmMucHVzaChyLmxhdCt1KGxbMV0pKTsoaXx8LTEhPT1uLmluZGV4T2YoXCJ0ZXh0XCIpKSYmbyhlLHQsYyk7cmV0dXJuIGMuam9pbihcIjxicj5cIil9KGMsZyxsWzBdLnQubGFiZWxzKSx0LmhvdmVydGVtcGxhdGU9Yy5ob3ZlcnRlbXBsYXRlLFt0XX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2Z4XCI6NjE3LFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0XCI6MTA2MCxcIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yXCI6MTA2Mn1dLDExMTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLG4uY29sb3JiYXI9dChcIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyXCIpLG4uY2FsYz10KFwiLi4vc2NhdHRlcmdlby9jYWxjXCIpLG4ucGxvdD10KFwiLi9wbG90XCIpLG4uaG92ZXJQb2ludHM9dChcIi4vaG92ZXJcIiksbi5ldmVudERhdGE9dChcIi4vZXZlbnRfZGF0YVwiKSxuLnNlbGVjdFBvaW50cz10KFwiLi9zZWxlY3RcIiksbi5zdHlsZT1mdW5jdGlvbih0LGUpe2UmJmVbMF0udHJhY2UuX2dsVHJhY2UudXBkYXRlKGUpfSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cInNjYXR0ZXJtYXBib3hcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9tYXBib3hcIiksbi5jYXRlZ29yaWVzPVtcIm1hcGJveFwiLFwiZ2xcIixcInN5bWJvbHNcIixcInNob3dMZWdlbmRcIixcInNjYXR0ZXJsaWtlXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvbWFwYm94XCI6ODA0LFwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXJcIjoxMDcwLFwiLi4vc2NhdHRlcmdlby9jYWxjXCI6MTA5MyxcIi4vYXR0cmlidXRlc1wiOjExMDYsXCIuL2RlZmF1bHRzXCI6MTEwOCxcIi4vZXZlbnRfZGF0YVwiOjExMDksXCIuL2hvdmVyXCI6MTExMCxcIi4vcGxvdFwiOjExMTIsXCIuL3NlbGVjdFwiOjExMTN9XSwxMTEyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vY29udmVydFwiKTtmdW5jdGlvbiBpKHQsZSl7dGhpcy5zdWJwbG90PXQsdGhpcy51aWQ9ZSx0aGlzLnNvdXJjZUlkcz17ZmlsbDplK1wiLXNvdXJjZS1maWxsXCIsbGluZTplK1wiLXNvdXJjZS1saW5lXCIsY2lyY2xlOmUrXCItc291cmNlLWNpcmNsZVwiLHN5bWJvbDplK1wiLXNvdXJjZS1zeW1ib2xcIn0sdGhpcy5sYXllcklkcz17ZmlsbDplK1wiLWxheWVyLWZpbGxcIixsaW5lOmUrXCItbGF5ZXItbGluZVwiLGNpcmNsZTplK1wiLWxheWVyLWNpcmNsZVwiLHN5bWJvbDplK1wiLWxheWVyLXN5bWJvbFwifSx0aGlzLm9yZGVyPVtcImZpbGxcIixcImxpbmVcIixcImNpcmNsZVwiLFwic3ltYm9sXCJdfXZhciBhPWkucHJvdG90eXBlO2EuYWRkU291cmNlPWZ1bmN0aW9uKHQsZSl7dGhpcy5zdWJwbG90Lm1hcC5hZGRTb3VyY2UodGhpcy5zb3VyY2VJZHNbdF0se3R5cGU6XCJnZW9qc29uXCIsZGF0YTplLmdlb2pzb259KX0sYS5zZXRTb3VyY2VEYXRhPWZ1bmN0aW9uKHQsZSl7dGhpcy5zdWJwbG90Lm1hcC5nZXRTb3VyY2UodGhpcy5zb3VyY2VJZHNbdF0pLnNldERhdGEoZS5nZW9qc29uKX0sYS5hZGRMYXllcj1mdW5jdGlvbih0LGUpe3RoaXMuc3VicGxvdC5tYXAuYWRkTGF5ZXIoe3R5cGU6dCxpZDp0aGlzLmxheWVySWRzW3RdLHNvdXJjZTp0aGlzLnNvdXJjZUlkc1t0XSxsYXlvdXQ6ZS5sYXlvdXQscGFpbnQ6ZS5wYWludH0pfSxhLnVwZGF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5zdWJwbG90LHI9bih0KSxpPTA7aTx0aGlzLm9yZGVyLmxlbmd0aDtpKyspe3ZhciBhPXRoaXMub3JkZXJbaV0sbz1yW2FdO2Uuc2V0T3B0aW9ucyh0aGlzLmxheWVySWRzW2FdLFwic2V0TGF5b3V0UHJvcGVydHlcIixvLmxheW91dCksXCJ2aXNpYmxlXCI9PT1vLmxheW91dC52aXNpYmlsaXR5JiYodGhpcy5zZXRTb3VyY2VEYXRhKGEsbyksZS5zZXRPcHRpb25zKHRoaXMubGF5ZXJJZHNbYV0sXCJzZXRQYWludFByb3BlcnR5XCIsby5wYWludCkpfXRbMF0udHJhY2UuX2dsVHJhY2U9dGhpc30sYS5kaXNwb3NlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuc3VicGxvdC5tYXAsZT0wO2U8dGhpcy5vcmRlci5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLm9yZGVyW2VdO3QucmVtb3ZlTGF5ZXIodGhpcy5sYXllcklkc1tyXSksdC5yZW1vdmVTb3VyY2UodGhpcy5zb3VyY2VJZHNbcl0pfX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBpKHQsZVswXS50cmFjZS51aWQpLGE9bihlKSxvPTA7bzxyLm9yZGVyLmxlbmd0aDtvKyspe3ZhciBzPXIub3JkZXJbb10sbD1hW3NdO3IuYWRkU291cmNlKHMsbCksci5hZGRMYXllcihzLGwpfXJldHVybiBlWzBdLnRyYWNlLl9nbFRyYWNlPXIscn19LHtcIi4vY29udmVydFwiOjExMDd9XSwxMTEzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCIpLGE9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG89dC5jZCxzPXQueGF4aXMsbD10LnlheGlzLGM9W10sdT1vWzBdLnRyYWNlO2lmKCFpLmhhc01hcmtlcnModSkpcmV0dXJuW107aWYoITE9PT1lKWZvcihyPTA7cjxvLmxlbmd0aDtyKyspb1tyXS5zZWxlY3RlZD0wO2Vsc2UgZm9yKHI9MDtyPG8ubGVuZ3RoO3IrKyl7dmFyIGg9b1tyXSxmPWgubG9ubGF0O2lmKGZbMF0hPT1hKXt2YXIgcD1bbi5tb2RIYWxmKGZbMF0sMzYwKSxmWzFdXSxkPVtzLmMycChwKSxsLmMycChwKV07ZS5jb250YWlucyhkLG51bGwscix0KT8oYy5wdXNoKHtwb2ludE51bWJlcjpyLGxvbjpmWzBdLGxhdDpmWzFdfSksaC5zZWxlY3RlZD0xKTpoLnNlbGVjdGVkPTB9fXJldHVybiBjfX0se1wiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2fV0sMTExNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsYT10KFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIikscz1hLmxpbmU7ZS5leHBvcnRzPXttb2RlOmEubW9kZSxyOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx0aGV0YTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0scjA6e3ZhbFR5cGU6XCJhbnlcIixkZmx0OjAsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LGRyOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxLGVkaXRUeXBlOlwiY2FsY1wifSx0aGV0YTA6e3ZhbFR5cGU6XCJhbnlcIixkZmx0OjAsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LGR0aGV0YTp7dmFsVHlwZTpcIm51bWJlclwiLGVkaXRUeXBlOlwiY2FsY1wifSx0aGV0YXVuaXQ6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInJhZGlhbnNcIixcImRlZ3JlZXNcIixcImdyYWRpYW5zXCJdLGRmbHQ6XCJkZWdyZWVzXCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LHRleHQ6YS50ZXh0LGhvdmVydGV4dDphLmhvdmVydGV4dCxsaW5lOntjb2xvcjpzLmNvbG9yLHdpZHRoOnMud2lkdGgsZGFzaDpzLmRhc2gsc2hhcGU6aSh7fSxzLnNoYXBlLHt2YWx1ZXM6W1wibGluZWFyXCIsXCJzcGxpbmVcIl19KSxzbW9vdGhpbmc6cy5zbW9vdGhpbmcsZWRpdFR5cGU6XCJjYWxjXCJ9LGNvbm5lY3RnYXBzOmEuY29ubmVjdGdhcHMsbWFya2VyOmEubWFya2VyLGNsaXBvbmF4aXM6aSh7fSxhLmNsaXBvbmF4aXMse2RmbHQ6ITF9KSx0ZXh0cG9zaXRpb246YS50ZXh0cG9zaXRpb24sdGV4dGZvbnQ6YS50ZXh0Zm9udCxmaWxsOmkoe30sYS5maWxsLHt2YWx1ZXM6W1wibm9uZVwiLFwidG9zZWxmXCIsXCJ0b25leHRcIl0sZGZsdDpcIm5vbmVcIn0pLGZpbGxjb2xvcjphLmZpbGxjb2xvcixob3ZlcmluZm86aSh7fSxvLmhvdmVyaW5mbyx7ZmxhZ3M6W1wiclwiLFwidGhldGFcIixcInRleHRcIixcIm5hbWVcIl19KSxob3Zlcm9uOmEuaG92ZXJvbixob3ZlcnRlbXBsYXRlOm4oKSxzZWxlY3RlZDphLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6YS51bnNlbGVjdGVkfX0se1wiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiOjc0NixcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiOjEwNTJ9XSwxMTE1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNLGE9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLG89dChcIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjXCIpLHM9dChcIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhXCIpLGw9dChcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIiksYz10KFwiLi4vc2NhdHRlci9jYWxjXCIpLmNhbGNNYXJrZXJTaXplO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Ll9mdWxsTGF5b3V0LHU9ZS5zdWJwbG90LGg9clt1XS5yYWRpYWxheGlzLGY9clt1XS5hbmd1bGFyYXhpcyxwPWgubWFrZUNhbGNkYXRhKGUsXCJyXCIpLGQ9Zi5tYWtlQ2FsY2RhdGEoZSxcInRoZXRhXCIpLGc9ZS5fbGVuZ3RoLHY9bmV3IEFycmF5KGcpLG09MDttPGc7bSsrKXt2YXIgeT1wW21dLHg9ZFttXSxiPXZbbV09e307bih5KSYmbih4KT8oYi5yPXksYi50aGV0YT14KTpiLnI9aX12YXIgXz1jKGUsZyk7cmV0dXJuIGUuX2V4dHJlbWVzLng9YS5maW5kRXh0cmVtZXMoaCxwLHtwcGFkOl99KSxvKHQsZSkscyh2LGUpLGwodixlKSx2fX0se1wiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGFcIjoxMDUxLFwiLi4vc2NhdHRlci9jYWxjXCI6MTA1MyxcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIjoxMDU0LFwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGNcIjoxMDU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSwxMTE2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCIpLGE9dChcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCIpLG89dChcIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0c1wiKSxzPXQoXCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHNcIiksbD10KFwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzXCIpLGM9dChcIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzXCIpLHU9dChcIi4uL3NjYXR0ZXIvY29uc3RhbnRzXCIpLlBUU19MSU5FU09OTFksaD10KFwiLi9hdHRyaWJ1dGVzXCIpO2Z1bmN0aW9uIGYodCxlLHIsbil7dmFyIGksYT1uKFwiclwiKSxvPW4oXCJ0aGV0YVwiKTtpZihhKW8/aT1NYXRoLm1pbihhLmxlbmd0aCxvLmxlbmd0aCk6KGk9YS5sZW5ndGgsbihcInRoZXRhMFwiKSxuKFwiZHRoZXRhXCIpKTtlbHNle2lmKCFvKXJldHVybiAwO2k9ZS50aGV0YS5sZW5ndGgsbihcInIwXCIpLG4oXCJkclwiKX1yZXR1cm4gZS5fbGVuZ3RoPWksaX1lLmV4cG9ydHM9e2hhbmRsZVJUaGV0YURlZmF1bHRzOmYsc3VwcGx5RGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIscCl7ZnVuY3Rpb24gZChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsaCxyLGkpfXZhciBnPWYoMCxlLDAsZCk7aWYoZyl7ZChcInRoZXRhdW5pdFwiKSxkKFwibW9kZVwiLGc8dT9cImxpbmVzK21hcmtlcnNcIjpcImxpbmVzXCIpLGQoXCJ0ZXh0XCIpLGQoXCJob3ZlcnRleHRcIiksXCJmaWxsc1wiIT09ZS5ob3Zlcm9uJiZkKFwiaG92ZXJ0ZW1wbGF0ZVwiKSxpLmhhc0xpbmVzKGUpJiYobyh0LGUscixwLGQpLHModCxlLGQpLGQoXCJjb25uZWN0Z2Fwc1wiKSksaS5oYXNNYXJrZXJzKGUpJiZhKHQsZSxyLHAsZCx7Z3JhZGllbnQ6ITB9KSxpLmhhc1RleHQoZSkmJmwodCxlLHAsZCk7dmFyIHY9W107KGkuaGFzTWFya2VycyhlKXx8aS5oYXNUZXh0KGUpKSYmKGQoXCJjbGlwb25heGlzXCIpLGQoXCJtYXJrZXIubWF4ZGlzcGxheWVkXCIpLHYucHVzaChcInBvaW50c1wiKSksZChcImZpbGxcIiksXCJub25lXCIhPT1lLmZpbGwmJihjKHQsZSxyLGQpLGkuaGFzTGluZXMoZSl8fHModCxlLGQpKSxcInRvbmV4dFwiIT09ZS5maWxsJiZcInRvc2VsZlwiIT09ZS5maWxsfHx2LnB1c2goXCJmaWxsc1wiKSxkKFwiaG92ZXJvblwiLHYuam9pbihcIitcIil8fFwicG9pbnRzXCIpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGQpfWVsc2UgZS52aXNpYmxlPSExfX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL3NjYXR0ZXIvY29uc3RhbnRzXCI6MTA1NixcIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzXCI6MTA2MSxcIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0c1wiOjEwNjUsXCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHNcIjoxMDY3LFwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHNcIjoxMDcxLFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiOjEwNzYsXCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHNcIjoxMDc3LFwiLi9hdHRyaWJ1dGVzXCI6MTExNH1dLDExMTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vc2NhdHRlci9ob3ZlclwiKSxpPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxhPXQoXCIuLi8uLi9saWJcIik7ZnVuY3Rpb24gbyh0LGUscixuKXt2YXIgbz1yLnJhZGlhbEF4aXMscz1yLmFuZ3VsYXJBeGlzO28uX2hvdmVydGl0bGU9XCJyXCIscy5faG92ZXJ0aXRsZT1cIlxcdTAzYjhcIjt2YXIgbD10LmhpfHxlLmhvdmVyaW5mbyxjPVtdO2Z1bmN0aW9uIHUodCxlKXtjLnB1c2godC5faG92ZXJ0aXRsZStcIjogXCIraS50aWNrVGV4dCh0LGUsXCJob3ZlclwiKS50ZXh0KX1pZighZS5ob3ZlcnRlbXBsYXRlKXt2YXIgaD1sLnNwbGl0KFwiK1wiKTtpZigtMSE9PWguaW5kZXhPZihcImFsbFwiKSYmKGg9W1wiclwiLFwidGhldGFcIixcInRleHRcIl0pLC0xIT09aC5pbmRleE9mKFwiclwiKSYmdShvLG8uYzJsKHQucikpLC0xIT09aC5pbmRleE9mKFwidGhldGFcIikpe3ZhciBmPXQudGhldGE7dShzLFwiZGVncmVlc1wiPT09cy50aGV0YXVuaXQ/YS5yYWQyZGVnKGYpOmYpfS0xIT09aC5pbmRleE9mKFwidGV4dFwiKSYmbi50ZXh0JiYoYy5wdXNoKG4udGV4dCksZGVsZXRlIG4udGV4dCksbi5leHRyYVRleHQ9Yy5qb2luKFwiPGJyPlwiKX19ZS5leHBvcnRzPXtob3ZlclBvaW50czpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1uKHQsZSxyLGkpO2lmKGEmJiExIT09YVswXS5pbmRleCl7dmFyIHM9YVswXTtpZih2b2lkIDA9PT1zLmluZGV4KXJldHVybiBhO3ZhciBsPXQuc3VicGxvdCxjPXMuY2Rbcy5pbmRleF0sdT1zLnRyYWNlO2lmKGwuaXNQdEluc2lkZShjKSlyZXR1cm4gcy54TGFiZWxWYWw9dm9pZCAwLHMueUxhYmVsVmFsPXZvaWQgMCxvKGMsdSxsLHMpLHMuaG92ZXJ0ZW1wbGF0ZT11LmhvdmVydGVtcGxhdGUsYX19LG1ha2VIb3ZlclBvaW50VGV4dDpvfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9zY2F0dGVyL2hvdmVyXCI6MTA2M31dLDExMTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6XCJ0cmFjZVwiLG5hbWU6XCJzY2F0dGVycG9sYXJcIixiYXNlUGxvdE1vZHVsZTp0KFwiLi4vLi4vcGxvdHMvcG9sYXJcIiksY2F0ZWdvcmllczpbXCJwb2xhclwiLFwic3ltYm9sc1wiLFwic2hvd0xlZ2VuZFwiLFwic2NhdHRlci1saWtlXCJdLGF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxzdXBwbHlEZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKS5zdXBwbHlEZWZhdWx0cyxjb2xvcmJhcjp0KFwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXJcIiksY2FsYzp0KFwiLi9jYWxjXCIpLHBsb3Q6dChcIi4vcGxvdFwiKSxzdHlsZTp0KFwiLi4vc2NhdHRlci9zdHlsZVwiKS5zdHlsZSxob3ZlclBvaW50czp0KFwiLi9ob3ZlclwiKS5ob3ZlclBvaW50cyxzZWxlY3RQb2ludHM6dChcIi4uL3NjYXR0ZXIvc2VsZWN0XCIpLG1ldGE6e319fSx7XCIuLi8uLi9wbG90cy9wb2xhclwiOjgxMyxcIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyXCI6MTA3MCxcIi4uL3NjYXR0ZXIvc2VsZWN0XCI6MTA3MyxcIi4uL3NjYXR0ZXIvc3R5bGVcIjoxMDc1LFwiLi9hdHRyaWJ1dGVzXCI6MTExNCxcIi4vY2FsY1wiOjExMTUsXCIuL2RlZmF1bHRzXCI6MTExNixcIi4vaG92ZXJcIjoxMTE3LFwiLi9wbG90XCI6MTExOX1dLDExMTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vc2NhdHRlci9wbG90XCIpLGk9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBhPWUubGF5ZXJzLmZyb250cGxvdC5zZWxlY3QoXCJnLnNjYXR0ZXJsYXllclwiKSxvPXt4YXhpczplLnhheGlzLHlheGlzOmUueWF4aXMscGxvdDplLmZyYW1ld29yayxsYXllckNsaXBJZDplLl9oYXNDbGlwT25BeGlzRmFsc2U/ZS5jbGlwSWRzLmZvclRyYWNlczpudWxsfSxzPWUucmFkaWFsQXhpcyxsPWUuYW5ndWxhckF4aXMsYz0wO2M8ci5sZW5ndGg7YysrKWZvcih2YXIgdT1yW2NdLGg9MDtoPHUubGVuZ3RoO2grKyl7dmFyIGY9dVtoXSxwPWYucjtpZihwPT09aSlmLng9Zi55PWk7ZWxzZXt2YXIgZD1zLmMyZyhwKSxnPWwuYzJnKGYudGhldGEpO2YueD1kKk1hdGguY29zKGcpLGYueT1kKk1hdGguc2luKGcpfX1uKHQsbyxyLGEpfX0se1wiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uL3NjYXR0ZXIvcGxvdFwiOjEwNzJ9XSwxMTIwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3NjYXR0ZXJwb2xhci9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uL3NjYXR0ZXJnbC9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz17bW9kZTpuLm1vZGUscjpuLnIsdGhldGE6bi50aGV0YSxyMDpuLnIwLGRyOm4uZHIsdGhldGEwOm4udGhldGEwLGR0aGV0YTpuLmR0aGV0YSx0aGV0YXVuaXQ6bi50aGV0YXVuaXQsdGV4dDpuLnRleHQsaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LGhvdmVydGVtcGxhdGU6bi5ob3ZlcnRlbXBsYXRlLGxpbmU6aS5saW5lLGNvbm5lY3RnYXBzOmkuY29ubmVjdGdhcHMsbWFya2VyOmkubWFya2VyLGZpbGw6aS5maWxsLGZpbGxjb2xvcjppLmZpbGxjb2xvcix0ZXh0cG9zaXRpb246aS50ZXh0cG9zaXRpb24sdGV4dGZvbnQ6aS50ZXh0Zm9udCxob3ZlcmluZm86bi5ob3ZlcmluZm8sc2VsZWN0ZWQ6bi5zZWxlY3RlZCx1bnNlbGVjdGVkOm4udW5zZWxlY3RlZH19LHtcIi4uL3NjYXR0ZXJnbC9hdHRyaWJ1dGVzXCI6MTEwMSxcIi4uL3NjYXR0ZXJwb2xhci9hdHRyaWJ1dGVzXCI6MTExNH1dLDExMjE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIiksYT10KFwiLi4vc2NhdHRlcnBvbGFyL2RlZmF1bHRzXCIpLmhhbmRsZVJUaGV0YURlZmF1bHRzLG89dChcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCIpLHM9dChcIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0c1wiKSxsPXQoXCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHNcIiksYz10KFwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHNcIiksdT10KFwiLi4vc2NhdHRlci9jb25zdGFudHNcIikuUFRTX0xJTkVTT05MWSxoPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYpe2Z1bmN0aW9uIHAocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGgscixpKX12YXIgZD1hKHQsZSxmLHApO2Q/KHAoXCJ0aGV0YXVuaXRcIikscChcIm1vZGVcIixkPHU/XCJsaW5lcyttYXJrZXJzXCI6XCJsaW5lc1wiKSxwKFwidGV4dFwiKSxwKFwiaG92ZXJ0ZXh0XCIpLFwiZmlsbHNcIiE9PWUuaG92ZXJvbiYmcChcImhvdmVydGVtcGxhdGVcIiksaS5oYXNMaW5lcyhlKSYmKHModCxlLHIsZixwKSxwKFwiY29ubmVjdGdhcHNcIikpLGkuaGFzTWFya2VycyhlKSYmbyh0LGUscixmLHApLGkuaGFzVGV4dChlKSYmbCh0LGUsZixwKSxwKFwiZmlsbFwiKSxcIm5vbmVcIiE9PWUuZmlsbCYmYyh0LGUscixwKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxwKSk6ZS52aXNpYmxlPSExfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vc2NhdHRlci9jb25zdGFudHNcIjoxMDU2LFwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHNcIjoxMDYxLFwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzXCI6MTA2NSxcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCI6MTA3MSxcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzXCI6MTA3NyxcIi4uL3NjYXR0ZXJwb2xhci9kZWZhdWx0c1wiOjExMTYsXCIuL2F0dHJpYnV0ZXNcIjoxMTIwfV0sMTEyMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJwb2ludC1jbHVzdGVyXCIpLGk9dChcImZhc3QtaXNudW1lcmljXCIpLGE9dChcIi4uL3NjYXR0ZXJnbFwiKSxvPXQoXCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsY1wiKSxzPXQoXCIuLi9zY2F0dGVyL2NhbGNcIikuY2FsY01hcmtlclNpemUsbD10KFwiLi4vc2NhdHRlcmdsL2NvbnZlcnRcIiksYz10KFwiLi4vLi4vbGliXCIpLHU9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGg9dChcIi4uL3NjYXR0ZXJwb2xhci9ob3ZlclwiKS5tYWtlSG92ZXJQb2ludFRleHQsZj10KFwiLi4vc2NhdHRlcmdsL2NvbnN0YW50c1wiKS5UT09fTUFOWV9QT0lOVFM7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwidHJhY2VcIixuYW1lOlwic2NhdHRlcnBvbGFyZ2xcIixiYXNlUGxvdE1vZHVsZTp0KFwiLi4vLi4vcGxvdHMvcG9sYXJcIiksY2F0ZWdvcmllczpbXCJnbFwiLFwicmVnbFwiLFwicG9sYXJcIixcInN5bWJvbHNcIixcInNob3dMZWdlbmRcIixcInNjYXR0ZXItbGlrZVwiXSxhdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksc3VwcGx5RGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIiksY29sb3JiYXI6dChcIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyXCIpLGNhbGM6ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LG49ZS5zdWJwbG90LGk9cltuXS5yYWRpYWxheGlzLGE9cltuXS5hbmd1bGFyYXhpcyxjPWkubWFrZUNhbGNkYXRhKGUsXCJyXCIpLGg9YS5tYWtlQ2FsY2RhdGEoZSxcInRoZXRhXCIpLHA9ZS5fbGVuZ3RoLGQ9e307cDxjLmxlbmd0aCYmKGM9Yy5zbGljZSgwLHApKSxwPGgubGVuZ3RoJiYoaD1oLnNsaWNlKDAscCkpLGQucj1jLGQudGhldGE9aCxvKHQsZSk7dmFyIGcsdj1kLm9wdHM9bC5zdHlsZSh0LGUpO3JldHVybiBwPGY/Zz1zKGUscCk6di5tYXJrZXImJihnPTIqKHYubWFya2VyLnNpemVBdmd8fE1hdGgubWF4KHYubWFya2VyLnNpemUsMykpKSxlLl9leHRyZW1lcy54PXUuZmluZEV4dHJlbWVzKGksYyx7cHBhZDpnfSksW3t4OiExLHk6ITEsdDpkLHRyYWNlOmV9XX0scGxvdDpmdW5jdGlvbih0LGUscil7aWYoci5sZW5ndGgpe3ZhciBvPWUucmFkaWFsQXhpcyxzPWUuYW5ndWxhckF4aXMsdT1hLnNjZW5lVXBkYXRlKHQsZSk7cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihyKXtpZihyJiZyWzBdJiZyWzBdLnRyYWNlKXt2YXIgYSxoPXJbMF0scD1oLnRyYWNlLGQ9aC50LGc9cC5fbGVuZ3RoLHY9ZC5yLG09ZC50aGV0YSx5PWQub3B0cyx4PXYuc2xpY2UoKSxiPW0uc2xpY2UoKTtmb3IoYT0wO2E8di5sZW5ndGg7YSsrKWUuaXNQdEluc2lkZSh7cjp2W2FdLHRoZXRhOm1bYV19KXx8KHhbYV09TmFOLGJbYV09TmFOKTt2YXIgXz1uZXcgQXJyYXkoMipnKSx3PUFycmF5KGcpLGs9QXJyYXkoZyk7Zm9yKGE9MDthPGc7YSsrKXt2YXIgQSxULE09eFthXTtpZihpKE0pKXt2YXIgUz1vLmMyZyhNKSxFPXMuYzJnKGJbYV0scC50aGV0YXVuaXQpO0E9UypNYXRoLmNvcyhFKSxUPVMqTWF0aC5zaW4oRSl9ZWxzZSBBPVQ9TmFOO3dbYV09X1syKmFdPUEsa1thXT1fWzIqYSsxXT1UfWQudHJlZT1uKF8pLHkubWFya2VyJiZnPj1mJiYoeS5tYXJrZXIuY2x1c3Rlcj1kLnRyZWUpLHkubWFya2VyJiYoeS5tYXJrZXJTZWwucG9zaXRpb25zPXkubWFya2VyVW5zZWwucG9zaXRpb25zPXkubWFya2VyLnBvc2l0aW9ucz1fKSx5LmxpbmUmJl8ubGVuZ3RoPjEmJmMuZXh0ZW5kRmxhdCh5LmxpbmUsbC5saW5lUG9zaXRpb25zKHQscCxfKSkseS50ZXh0JiYoYy5leHRlbmRGbGF0KHkudGV4dCx7cG9zaXRpb25zOl99LGwudGV4dFBvc2l0aW9uKHQscCx5LnRleHQseS5tYXJrZXIpKSxjLmV4dGVuZEZsYXQoeS50ZXh0U2VsLHtwb3NpdGlvbnM6X30sbC50ZXh0UG9zaXRpb24odCxwLHkudGV4dCx5Lm1hcmtlclNlbCkpLGMuZXh0ZW5kRmxhdCh5LnRleHRVbnNlbCx7cG9zaXRpb25zOl99LGwudGV4dFBvc2l0aW9uKHQscCx5LnRleHQseS5tYXJrZXJVbnNlbCkpKSx5LmZpbGwmJiF1LmZpbGwyZCYmKHUuZmlsbDJkPSEwKSx5Lm1hcmtlciYmIXUuc2NhdHRlcjJkJiYodS5zY2F0dGVyMmQ9ITApLHkubGluZSYmIXUubGluZTJkJiYodS5saW5lMmQ9ITApLHkudGV4dCYmIXUuZ2xUZXh0JiYodS5nbFRleHQ9ITApLHUubGluZU9wdGlvbnMucHVzaCh5LmxpbmUpLHUuZmlsbE9wdGlvbnMucHVzaCh5LmZpbGwpLHUubWFya2VyT3B0aW9ucy5wdXNoKHkubWFya2VyKSx1Lm1hcmtlclNlbGVjdGVkT3B0aW9ucy5wdXNoKHkubWFya2VyU2VsKSx1Lm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zLnB1c2goeS5tYXJrZXJVbnNlbCksdS50ZXh0T3B0aW9ucy5wdXNoKHkudGV4dCksdS50ZXh0U2VsZWN0ZWRPcHRpb25zLnB1c2goeS50ZXh0U2VsKSx1LnRleHRVbnNlbGVjdGVkT3B0aW9ucy5wdXNoKHkudGV4dFVuc2VsKSxkLng9dyxkLnk9ayxkLnJhd3g9dyxkLnJhd3k9ayxkLnI9dixkLnRoZXRhPW0sZC5wb3NpdGlvbnM9XyxkLl9zY2VuZT11LGQuaW5kZXg9dS5jb3VudCx1LmNvdW50Kyt9fSksYS5wbG90KHQsZSxyKX19LGhvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuY2RbMF0udCxvPWkucixzPWkudGhldGEsbD1hLmhvdmVyUG9pbnRzKHQsZSxyLG4pO2lmKGwmJiExIT09bFswXS5pbmRleCl7dmFyIGM9bFswXTtpZih2b2lkIDA9PT1jLmluZGV4KXJldHVybiBsO3ZhciB1PXQuc3VicGxvdCxmPWMuY2RbYy5pbmRleF0scD1jLnRyYWNlO2lmKGYucj1vW2MuaW5kZXhdLGYudGhldGE9c1tjLmluZGV4XSx1LmlzUHRJbnNpZGUoZikpcmV0dXJuIGMueExhYmVsVmFsPXZvaWQgMCxjLnlMYWJlbFZhbD12b2lkIDAsaChmLHAsdSxjKSxsfX0sc2VsZWN0UG9pbnRzOmEuc2VsZWN0UG9pbnRzLG1ldGE6e319fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uLy4uL3Bsb3RzL3BvbGFyXCI6ODEzLFwiLi4vc2NhdHRlci9jYWxjXCI6MTA1MyxcIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjXCI6MTA1NSxcIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyXCI6MTA3MCxcIi4uL3NjYXR0ZXJnbFwiOjExMDUsXCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzXCI6MTEwMixcIi4uL3NjYXR0ZXJnbC9jb252ZXJ0XCI6MTEwMyxcIi4uL3NjYXR0ZXJwb2xhci9ob3ZlclwiOjExMTcsXCIuL2F0dHJpYnV0ZXNcIjoxMTIwLFwiLi9kZWZhdWx0c1wiOjExMjEsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMixcInBvaW50LWNsdXN0ZXJcIjo0NjJ9XSwxMTIzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiKSxsPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlc1wiKS5kYXNoLGM9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCx1PWkubWFya2VyLGg9aS5saW5lLGY9dS5saW5lO2UuZXhwb3J0cz17YTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sYjp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sYzp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sc3VtOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLG1pbjowLGVkaXRUeXBlOlwiY2FsY1wifSxtb2RlOmMoe30saS5tb2RlLHtkZmx0OlwibWFya2Vyc1wifSksdGV4dDpjKHt9LGkudGV4dCx7fSksaG92ZXJ0ZXh0OmMoe30saS5ob3ZlcnRleHQse30pLGxpbmU6e2NvbG9yOmguY29sb3Isd2lkdGg6aC53aWR0aCxkYXNoOmwsc2hhcGU6Yyh7fSxoLnNoYXBlLHt2YWx1ZXM6W1wibGluZWFyXCIsXCJzcGxpbmVcIl19KSxzbW9vdGhpbmc6aC5zbW9vdGhpbmcsZWRpdFR5cGU6XCJjYWxjXCJ9LGNvbm5lY3RnYXBzOmkuY29ubmVjdGdhcHMsY2xpcG9uYXhpczppLmNsaXBvbmF4aXMsZmlsbDpjKHt9LGkuZmlsbCx7dmFsdWVzOltcIm5vbmVcIixcInRvc2VsZlwiLFwidG9uZXh0XCJdLGRmbHQ6XCJub25lXCJ9KSxmaWxsY29sb3I6aS5maWxsY29sb3IsbWFya2VyOmMoe3N5bWJvbDp1LnN5bWJvbCxvcGFjaXR5OnUub3BhY2l0eSxtYXhkaXNwbGF5ZWQ6dS5tYXhkaXNwbGF5ZWQsc2l6ZTp1LnNpemUsc2l6ZXJlZjp1LnNpemVyZWYsc2l6ZW1pbjp1LnNpemVtaW4sc2l6ZW1vZGU6dS5zaXplbW9kZSxsaW5lOmMoe3dpZHRoOmYud2lkdGgsZWRpdFR5cGU6XCJjYWxjXCJ9LG8oXCJtYXJrZXIubGluZVwiKSksZ3JhZGllbnQ6dS5ncmFkaWVudCxlZGl0VHlwZTpcImNhbGNcIn0sbyhcIm1hcmtlclwiKSx7Y29sb3JiYXI6c30pLHRleHRmb250OmkudGV4dGZvbnQsdGV4dHBvc2l0aW9uOmkudGV4dHBvc2l0aW9uLHNlbGVjdGVkOmkuc2VsZWN0ZWQsdW5zZWxlY3RlZDppLnVuc2VsZWN0ZWQsaG92ZXJpbmZvOmMoe30sYS5ob3ZlcmluZm8se2ZsYWdzOltcImFcIixcImJcIixcImNcIixcInRleHRcIixcIm5hbWVcIl19KSxob3Zlcm9uOmkuaG92ZXJvbixob3ZlcnRlbXBsYXRlOm4oKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXNcIjo1OTgsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCI6MTA1Mn1dLDExMjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGNcIiksYT10KFwiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGFcIiksbz10KFwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvblwiKSxzPXQoXCIuLi9zY2F0dGVyL2NhbGNcIikuY2FsY01hcmtlclNpemUsbD1bXCJhXCIsXCJiXCIsXCJjXCJdLGM9e2E6W1wiYlwiLFwiY1wiXSxiOltcImFcIixcImNcIl0sYzpbXCJhXCIsXCJiXCJdfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcix1LGgsZixwLGQsZz10Ll9mdWxsTGF5b3V0W2Uuc3VicGxvdF0uc3VtLHY9ZS5zdW18fGcsbT17YTplLmEsYjplLmIsYzplLmN9O2ZvcihyPTA7cjxsLmxlbmd0aDtyKyspaWYoIW1baD1sW3JdXSl7Zm9yKHA9bVtjW2hdWzBdXSxkPW1bY1toXVsxXV0sZj1uZXcgQXJyYXkocC5sZW5ndGgpLHU9MDt1PHAubGVuZ3RoO3UrKylmW3VdPXYtcFt1XS1kW3VdO21baF09Zn12YXIgeSx4LGIsXyx3LGssQT1lLl9sZW5ndGgsVD1uZXcgQXJyYXkoQSk7Zm9yKHI9MDtyPEE7cisrKXk9bS5hW3JdLHg9bS5iW3JdLGI9bS5jW3JdLG4oeSkmJm4oeCkmJm4oYik/KDEhPT0oXz1nLygoeT0reSkrKHg9K3gpKyhiPStiKSkpJiYoeSo9Xyx4Kj1fLGIqPV8pLGs9eSx3PWIteCxUW3JdPXt4OncseTprLGE6eSxiOngsYzpifSk6VFtyXT17eDohMSx5OiExfTtyZXR1cm4gcyhlLEEpLGkodCxlKSxhKFQsZSksbyhULGUpLFR9fSx7XCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YVwiOjEwNTEsXCIuLi9zY2F0dGVyL2NhbGNcIjoxMDUzLFwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvblwiOjEwNTQsXCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsY1wiOjEwNTUsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDExMjU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uL3NjYXR0ZXIvY29uc3RhbnRzXCIpLGE9dChcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIiksbz10KFwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHNcIikscz10KFwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzXCIpLGw9dChcIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0c1wiKSxjPXQoXCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHNcIiksdT10KFwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHNcIiksaD10KFwiLi9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixmKXtmdW5jdGlvbiBwKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxoLHIsaSl9dmFyIGQsZz1wKFwiYVwiKSx2PXAoXCJiXCIpLG09cChcImNcIik7aWYoZz8oZD1nLmxlbmd0aCx2PyhkPU1hdGgubWluKGQsdi5sZW5ndGgpLG0mJihkPU1hdGgubWluKGQsbS5sZW5ndGgpKSk6ZD1tP01hdGgubWluKGQsbS5sZW5ndGgpOjApOnYmJm0mJihkPU1hdGgubWluKHYubGVuZ3RoLG0ubGVuZ3RoKSksZCl7ZS5fbGVuZ3RoPWQscChcInN1bVwiKSxwKFwidGV4dFwiKSxwKFwiaG92ZXJ0ZXh0XCIpLFwiZmlsbHNcIiE9PWUuaG92ZXJvbiYmcChcImhvdmVydGVtcGxhdGVcIikscChcIm1vZGVcIixkPGkuUFRTX0xJTkVTT05MWT9cImxpbmVzK21hcmtlcnNcIjpcImxpbmVzXCIpLGEuaGFzTGluZXMoZSkmJihzKHQsZSxyLGYscCksbCh0LGUscCkscChcImNvbm5lY3RnYXBzXCIpKSxhLmhhc01hcmtlcnMoZSkmJm8odCxlLHIsZixwLHtncmFkaWVudDohMH0pLGEuaGFzVGV4dChlKSYmYyh0LGUsZixwKTt2YXIgeT1bXTsoYS5oYXNNYXJrZXJzKGUpfHxhLmhhc1RleHQoZSkpJiYocChcImNsaXBvbmF4aXNcIikscChcIm1hcmtlci5tYXhkaXNwbGF5ZWRcIikseS5wdXNoKFwicG9pbnRzXCIpKSxwKFwiZmlsbFwiKSxcIm5vbmVcIiE9PWUuZmlsbCYmKHUodCxlLHIscCksYS5oYXNMaW5lcyhlKXx8bCh0LGUscCkpLFwidG9uZXh0XCIhPT1lLmZpbGwmJlwidG9zZWxmXCIhPT1lLmZpbGx8fHkucHVzaChcImZpbGxzXCIpLHAoXCJob3Zlcm9uXCIseS5qb2luKFwiK1wiKXx8XCJwb2ludHNcIiksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUscCl9ZWxzZSBlLnZpc2libGU9ITF9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9zY2F0dGVyL2NvbnN0YW50c1wiOjEwNTYsXCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0c1wiOjEwNjEsXCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHNcIjoxMDY1LFwiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzXCI6MTA2NyxcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCI6MTA3MSxcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzXCI6MTA3NyxcIi4vYXR0cmlidXRlc1wiOjExMjN9XSwxMTI2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYoZS54YSYmKHQueGF4aXM9ZS54YSksZS55YSYmKHQueWF4aXM9ZS55YSksbltpXSl7dmFyIGE9bltpXTt0LmE9YS5hLHQuYj1hLmIsdC5jPWEuY31lbHNlIHQuYT1lLmEsdC5iPWUuYix0LmM9ZS5jO3JldHVybiB0fX0se31dLDExMjc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vc2NhdHRlci9ob3ZlclwiKSxpPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89bih0LGUscixhKTtpZihvJiYhMSE9PW9bMF0uaW5kZXgpe3ZhciBzPW9bMF07aWYodm9pZCAwPT09cy5pbmRleCl7dmFyIGw9MS1zLnkwL3QueWEuX2xlbmd0aCxjPXQueGEuX2xlbmd0aCx1PWMqbC8yLGg9Yy11O3JldHVybiBzLngwPU1hdGgubWF4KE1hdGgubWluKHMueDAsaCksdSkscy54MT1NYXRoLm1heChNYXRoLm1pbihzLngxLGgpLHUpLG99dmFyIGY9cy5jZFtzLmluZGV4XTtzLmE9Zi5hLHMuYj1mLmIscy5jPWYuYyxzLnhMYWJlbFZhbD12b2lkIDAscy55TGFiZWxWYWw9dm9pZCAwO3ZhciBwPXMudHJhY2UsZD1zLnN1YnBsb3QsZz1mLmhpfHxwLmhvdmVyaW5mbyx2PVtdO2lmKCFwLmhvdmVydGVtcGxhdGUpe3ZhciBtPWcuc3BsaXQoXCIrXCIpOy0xIT09bS5pbmRleE9mKFwiYWxsXCIpJiYobT1bXCJhXCIsXCJiXCIsXCJjXCJdKSwtMSE9PW0uaW5kZXhPZihcImFcIikmJnkoZC5hYXhpcyxmLmEpLC0xIT09bS5pbmRleE9mKFwiYlwiKSYmeShkLmJheGlzLGYuYiksLTEhPT1tLmluZGV4T2YoXCJjXCIpJiZ5KGQuY2F4aXMsZi5jKX1yZXR1cm4gcy5leHRyYVRleHQ9di5qb2luKFwiPGJyPlwiKSxzLmhvdmVydGVtcGxhdGU9cC5ob3ZlcnRlbXBsYXRlLG99ZnVuY3Rpb24geSh0LGUpe3YucHVzaCh0Ll9ob3ZlcnRpdGxlK1wiOiBcIitpLnRpY2tUZXh0KHQsZSxcImhvdmVyXCIpLnRleHQpfX19LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vc2NhdHRlci9ob3ZlclwiOjEwNjN9XSwxMTI4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNvbG9yYmFyPXQoXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiKSxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLnBsb3Q9dChcIi4vcGxvdFwiKSxuLnN0eWxlPXQoXCIuLi9zY2F0dGVyL3N0eWxlXCIpLnN0eWxlLG4uc3R5bGVPblNlbGVjdD10KFwiLi4vc2NhdHRlci9zdHlsZVwiKS5zdHlsZU9uU2VsZWN0LG4uaG92ZXJQb2ludHM9dChcIi4vaG92ZXJcIiksbi5zZWxlY3RQb2ludHM9dChcIi4uL3NjYXR0ZXIvc2VsZWN0XCIpLG4uZXZlbnREYXRhPXQoXCIuL2V2ZW50X2RhdGFcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJzY2F0dGVydGVybmFyeVwiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4uLy4uL3Bsb3RzL3Rlcm5hcnlcIiksbi5jYXRlZ29yaWVzPVtcInRlcm5hcnlcIixcInN5bWJvbHNcIixcInNob3dMZWdlbmRcIixcInNjYXR0ZXItbGlrZVwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4uLy4uL3Bsb3RzL3Rlcm5hcnlcIjo4MjUsXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiOjEwNzAsXCIuLi9zY2F0dGVyL3NlbGVjdFwiOjEwNzMsXCIuLi9zY2F0dGVyL3N0eWxlXCI6MTA3NSxcIi4vYXR0cmlidXRlc1wiOjExMjMsXCIuL2NhbGNcIjoxMTI0LFwiLi9kZWZhdWx0c1wiOjExMjUsXCIuL2V2ZW50X2RhdGFcIjoxMTI2LFwiLi9ob3ZlclwiOjExMjcsXCIuL3Bsb3RcIjoxMTI5fV0sMTEyOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9zY2F0dGVyL3Bsb3RcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1lLnBsb3RDb250YWluZXI7aS5zZWxlY3QoXCIuc2NhdHRlcmxheWVyXCIpLnNlbGVjdEFsbChcIipcIikucmVtb3ZlKCk7dmFyIGE9e3hheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpcyxwbG90OmksbGF5ZXJDbGlwSWQ6ZS5faGFzQ2xpcE9uQXhpc0ZhbHNlP2UuY2xpcElkUmVsYXRpdmU6bnVsbH0sbz1lLmxheWVycy5mcm9udHBsb3Quc2VsZWN0KFwiZy5zY2F0dGVybGF5ZXJcIik7bih0LGEscixvKX19LHtcIi4uL3NjYXR0ZXIvcGxvdFwiOjEwNzJ9XSwxMTMwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxvPXQoXCIuLi9zY2F0dGVyZ2wvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzXCIpLmlkUmVnZXgsbD10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKS50ZW1wbGF0ZWRBcnJheSxjPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsdT1uLm1hcmtlcixoPXUubGluZSxmPWMoaShcIm1hcmtlci5saW5lXCIse2VkaXRUeXBlT3ZlcnJpZGU6XCJjYWxjXCJ9KSx7d2lkdGg6Yyh7fSxoLndpZHRoLHtlZGl0VHlwZTpcImNhbGNcIn0pLGVkaXRUeXBlOlwiY2FsY1wifSkscD1jKGkoXCJtYXJrZXJcIikse3N5bWJvbDp1LnN5bWJvbCxzaXplOmMoe30sdS5zaXplLHtlZGl0VHlwZTpcIm1hcmtlclNpemVcIn0pLHNpemVyZWY6dS5zaXplcmVmLHNpemVtaW46dS5zaXplbWluLHNpemVtb2RlOnUuc2l6ZW1vZGUsb3BhY2l0eTp1Lm9wYWNpdHksY29sb3JiYXI6dS5jb2xvcmJhcixsaW5lOmYsZWRpdFR5cGU6XCJjYWxjXCJ9KTtmdW5jdGlvbiBkKHQpe3JldHVybnt2YWxUeXBlOlwiaW5mb19hcnJheVwiLGZyZWVMZW5ndGg6ITAsZWRpdFR5cGU6XCJjYWxjXCIsaXRlbXM6e3ZhbFR5cGU6XCJzdWJwbG90aWRcIixyZWdleDpzW3RdLGVkaXRUeXBlOlwicGxvdFwifX19cC5jb2xvci5lZGl0VHlwZT1wLmNtaW4uZWRpdFR5cGU9cC5jbWF4LmVkaXRUeXBlPVwic3R5bGVcIixlLmV4cG9ydHM9e2RpbWVuc2lvbnM6bChcImRpbWVuc2lvblwiLHt2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LGxhYmVsOnt2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHZhbHVlczp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0sYXhpczp7dHlwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibGluZWFyXCIsXCJsb2dcIixcImRhdGVcIixcImNhdGVnb3J5XCJdLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSxtYXRjaGVzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEsZWRpdFR5cGU6XCJjYWxjXCJ9LGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSxlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0pLHRleHQ6Yyh7fSxvLnRleHQse30pLGhvdmVydGV4dDpjKHt9LG8uaG92ZXJ0ZXh0LHt9KSxob3ZlcnRlbXBsYXRlOmEoKSxtYXJrZXI6cCx4YXhlczpkKFwieFwiKSx5YXhlczpkKFwieVwiKSxkaWFnb25hbDp7dmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0sc2hvd3VwcGVyaGFsZjp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSxzaG93bG93ZXJoYWxmOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LHNlbGVjdGVkOnttYXJrZXI6by5zZWxlY3RlZC5tYXJrZXIsZWRpdFR5cGU6XCJjYWxjXCJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjpvLnVuc2VsZWN0ZWQubWFya2VyLGVkaXRUeXBlOlwiY2FsY1wifSxvcGFjaXR5Om8ub3BhY2l0eX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHNcIjo3NTUsXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIjoxMDUyLFwiLi4vc2NhdHRlcmdsL2F0dHJpYnV0ZXNcIjoxMTAxfV0sMTEzMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJyZWdsLWxpbmUyZFwiKSxpPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxhPXQoXCIuLi8uLi9saWIvcHJlcGFyZV9yZWdsXCIpLG89dChcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCIpLmdldE1vZHVsZUNhbGNEYXRhLHM9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiKSxsPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIikuZ2V0RnJvbUlkLGM9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLnNob3VsZFNob3daZXJvTGluZSx1PVwic3Bsb21cIjtmdW5jdGlvbiBoKHQsZSxyKXtmb3IodmFyIG49ci5tYXRyaXhPcHRpb25zLmRhdGEubGVuZ3RoLGk9ZS5fdmlzaWJsZURpbXMsYT1yLnZpZXdPcHRzLnJhbmdlcz1uZXcgQXJyYXkobiksbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz1pW29dLGM9YVtvXT1uZXcgQXJyYXkoNCksdT1sKHQsZS5fZGlhZ1tzXVswXSk7dSYmKGNbMF09dS5yMmwodS5yYW5nZVswXSksY1syXT11LnIybCh1LnJhbmdlWzFdKSk7dmFyIGg9bCh0LGUuX2RpYWdbc11bMV0pO2gmJihjWzFdPWgucjJsKGgucmFuZ2VbMF0pLGNbM109aC5yMmwoaC5yYW5nZVsxXSkpfXIuc2VsZWN0QmF0Y2g/ci5tYXRyaXgudXBkYXRlKHtyYW5nZXM6YX0se3JhbmdlczphfSk6ci5tYXRyaXgudXBkYXRlKHtyYW5nZXM6YX0pfWZ1bmN0aW9uIGYodCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWUuX2dsY2FudmFzLmRhdGEoKVswXS5yZWdsLGk9ZS5fc3Bsb21HcmlkO2l8fChpPWUuX3NwbG9tR3JpZD1uKHIpKSxpLnVwZGF0ZShmdW5jdGlvbih0KXt2YXIgZSxyPXQuX2Z1bGxMYXlvdXQsbj1yLl9zaXplLGk9WzAsMCxyLndpZHRoLHIuaGVpZ2h0XSxhPXt9O2Z1bmN0aW9uIG8odCxlLHIsbixvLHMpe3ZhciBsPWVbdCtcImNvbG9yXCJdLGM9ZVt0K1wid2lkdGhcIl0sdT1TdHJpbmcobCtjKTt1IGluIGE/YVt1XS5kYXRhLnB1c2goTmFOLE5hTixyLG4sbyxzKTphW3VdPXtkYXRhOltyLG4sbyxzXSxqb2luOlwicmVjdFwiLHRoaWNrbmVzczpjLGNvbG9yOmwsdmlld3BvcnQ6aSxyYW5nZTppLG92ZXJsYXk6ITF9fWZvcihlIGluIHIuX3NwbG9tU3VicGxvdHMpe3ZhciBzLGwsdT1yLl9wbG90c1tlXSxoPXUueGF4aXMsZj11LnlheGlzLHA9aC5fdmFscyxkPWYuX3ZhbHMsZz1uLmIrZi5kb21haW5bMF0qbi5oLHY9LWYuX20sbT0tdipmLnIybChmLnJhbmdlWzBdLGYuY2FsZW5kYXIpO2lmKGguc2hvd2dyaWQpZm9yKGU9MDtlPHAubGVuZ3RoO2UrKylzPWguX29mZnNldCtoLmwycChwW2VdLngpLG8oXCJncmlkXCIsaCxzLGcscyxnK2YuX2xlbmd0aCk7aWYoZi5zaG93Z3JpZClmb3IoZT0wO2U8ZC5sZW5ndGg7ZSsrKWw9ZyttK3YqZFtlXS54LG8oXCJncmlkXCIsZixoLl9vZmZzZXQsbCxoLl9vZmZzZXQraC5fbGVuZ3RoLGwpO2ModCxoLGYpJiYocz1oLl9vZmZzZXQraC5sMnAoMCksbyhcInplcm9saW5lXCIsaCxzLGcscyxnK2YuX2xlbmd0aCkpLGModCxmLGgpJiYobD1nK20rMCxvKFwiemVyb2xpbmVcIixmLGguX29mZnNldCxsLGguX29mZnNldCtoLl9sZW5ndGgsbCkpfXZhciB5PVtdO2ZvcihlIGluIGEpeS5wdXNoKGFbZV0pO3JldHVybiB5fSh0KSl9ZS5leHBvcnRzPXtuYW1lOnUsYXR0cjpzLmF0dHIsYXR0clJlZ2V4OnMuYXR0clJlZ2V4LGxheW91dEF0dHJpYnV0ZXM6cy5sYXlvdXRBdHRyaWJ1dGVzLHN1cHBseUxheW91dERlZmF1bHRzOnMuc3VwcGx5TGF5b3V0RGVmYXVsdHMsZHJhd0ZyYW1ld29yazpzLmRyYXdGcmFtZXdvcmsscGxvdDpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9aS5nZXRNb2R1bGUodSksbj1vKHQuY2FsY2RhdGEscilbMF07YSh0LFtcIkFOR0xFX2luc3RhbmNlZF9hcnJheXNcIixcIk9FU19lbGVtZW50X2luZGV4X3VpbnRcIl0pJiYoZS5faGFzT25seUxhcmdlU3Bsb21zJiZmKHQpLHIucGxvdCh0LHt9LG4pKX0sZHJhZzpmdW5jdGlvbih0KXt2YXIgZT10LmNhbGNkYXRhLHI9dC5fZnVsbExheW91dDtyLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJmYodCk7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl1bMF0udHJhY2UsYT1yLl9zcGxvbVNjZW5lc1tpLnVpZF07XCJzcGxvbVwiPT09aS50eXBlJiZhJiZhLm1hdHJpeCYmaCh0LGksYSl9fSx1cGRhdGVHcmlkOmYsY2xlYW46ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT17fTtpZihuLl9zcGxvbVNjZW5lcyl7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIG89dFtpXTtcInNwbG9tXCI9PT1vLnR5cGUmJihhW28udWlkXT0xKX1mb3IoaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbD1yW2ldO2lmKCFhW2wudWlkXSl7dmFyIGM9bi5fc3Bsb21TY2VuZXNbbC51aWRdO2MmJmMuZGVzdHJveSYmYy5kZXN0cm95KCksbi5fc3Bsb21TY2VuZXNbbC51aWRdPW51bGwsZGVsZXRlIG4uX3NwbG9tU2NlbmVzW2wudWlkXX19fTA9PT1PYmplY3Qua2V5cyhuLl9zcGxvbVNjZW5lc3x8e30pLmxlbmd0aCYmZGVsZXRlIG4uX3NwbG9tU2NlbmVzLG4uX3NwbG9tR3JpZCYmIWUuX2hhc09ubHlMYXJnZVNwbG9tcyYmbi5faGFzT25seUxhcmdlU3Bsb21zJiYobi5fc3Bsb21HcmlkLmRlc3Ryb3koKSxuLl9zcGxvbUdyaWQ9bnVsbCxkZWxldGUgbi5fc3Bsb21HcmlkKSxzLmNsZWFuKHQsZSxyLG4pfSx1cGRhdGVGeDpmdW5jdGlvbih0KXtzLnVwZGF0ZUZ4KHQpO3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLmRyYWdtb2RlO2lmKFwiem9vbVwiPT09cnx8XCJwYW5cIj09PXIpZm9yKHZhciBuPXQuY2FsY2RhdGEsaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT1uW2ldWzBdLnRyYWNlO2lmKFwic3Bsb21cIj09PWEudHlwZSl7dmFyIG89ZS5fc3Bsb21TY2VuZXNbYS51aWRdO251bGw9PT1vLnNlbGVjdEJhdGNoJiZvLm1hdHJpeC51cGRhdGUoby5tYXRyaXhPcHRpb25zLG51bGwpfX19LHRvU1ZHOnMudG9TVkd9fSx7XCIuLi8uLi9saWIvcHJlcGFyZV9yZWdsXCI6NzE0LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIjo3NTIsXCIuLi8uLi9wbG90cy9nZXRfZGF0YVwiOjc4NCxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwicmVnbC1saW5lMmRcIjo0ODR9XSwxMTMyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIiksYT10KFwiLi9hdHRyaWJ1dGVzXCIpLG89dChcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIikscz10KFwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHNcIiksbD10KFwiLi4vcGFyY29vcmRzL21lcmdlX2xlbmd0aFwiKSxjPS8tb3Blbi87ZnVuY3Rpb24gdSh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEuZGltZW5zaW9ucyxyLGkpfXIoXCJsYWJlbFwiKTt2YXIgaT1yKFwidmFsdWVzXCIpO2kmJmkubGVuZ3RoP3IoXCJ2aXNpYmxlXCIpOmUudmlzaWJsZT0hMSxyKFwiYXhpcy50eXBlXCIpLHIoXCJheGlzLm1hdGNoZXNcIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGgpe2Z1bmN0aW9uIGYocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgcD1pKHQsZSx7bmFtZTpcImRpbWVuc2lvbnNcIixoYW5kbGVJdGVtRGVmYXVsdHM6dX0pLGQ9ZihcImRpYWdvbmFsLnZpc2libGVcIiksZz1mKFwic2hvd3VwcGVyaGFsZlwiKSx2PWYoXCJzaG93bG93ZXJoYWxmXCIpO2lmKGwoZSxwLFwidmFsdWVzXCIpJiYoZHx8Z3x8dikpe2YoXCJ0ZXh0XCIpLGYoXCJob3ZlcnRleHRcIiksZihcImhvdmVydGVtcGxhdGVcIikscyh0LGUscixoLGYpO3ZhciBtPWMudGVzdChlLm1hcmtlci5zeW1ib2wpLHk9by5pc0J1YmJsZShlKTtmKFwibWFya2VyLmxpbmUud2lkdGhcIixtfHx5PzE6MCksZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvPWUuZGltZW5zaW9ucyxzPW8ubGVuZ3RoLGw9ZS5zaG93dXBwZXJoYWxmLGM9ZS5zaG93bG93ZXJoYWxmLHU9ZS5kaWFnb25hbC52aXNpYmxlLGg9bmV3IEFycmF5KHMpLGY9bmV3IEFycmF5KHMpO2ZvcihpPTA7aTxzO2krKyl7dmFyIHA9aT9pKzE6XCJcIjtoW2ldPVwieFwiK3AsZltpXT1cInlcIitwfXZhciBkPW4oXCJ4YXhlc1wiLGgpLGc9bihcInlheGVzXCIsZiksdj1lLl9kaWFnPW5ldyBBcnJheShzKTtlLl94YXhlcz17fSxlLl95YXhlcz17fTt2YXIgbT1bXSx5PVtdO2Z1bmN0aW9uIHgodCxuLGksYSl7aWYodCl7dmFyIG89dC5jaGFyQXQoMCkscz1yLl9zcGxvbUF4ZXNbb107aWYoZVtcIl9cIitvK1wiYXhlc1wiXVt0XT0xLGEucHVzaCh0KSwhKHQgaW4gcykpe3ZhciBsPXNbdF09e307aSYmKGwubGFiZWw9aS5sYWJlbHx8XCJcIixpLnZpc2libGUmJmkuYXhpcyYmKGkuYXhpcy50eXBlJiYobC50eXBlPWkuYXhpcy50eXBlKSxpLmF4aXMubWF0Y2hlcyYmKGwubWF0Y2hlcz1uKSkpfX19dmFyIGI9IXUmJiFjLF89IXUmJiFsO2ZvcihpPTA7aTxzO2krKyl7dmFyIHc9b1tpXSxrPTA9PT1pLEE9aT09PXMtMSxUPWsmJmJ8fEEmJl8/dm9pZCAwOmRbaV0sTT1rJiZffHxBJiZiP3ZvaWQgMDpnW2ldO3goVCxNLHcsbSkseChNLFQsdyx5KSx2W2ldPVtULE1dfWZvcihpPTA7aTxtLmxlbmd0aDtpKyspZm9yKGE9MDthPHkubGVuZ3RoO2ErKyl7dmFyIFM9bVtpXSt5W2FdO2k+YSYmbD9yLl9zcGxvbVN1YnBsb3RzW1NdPTE6aTxhJiZjP3IuX3NwbG9tU3VicGxvdHNbU109MTppIT09YXx8IXUmJmMmJmx8fChyLl9zcGxvbVN1YnBsb3RzW1NdPTEpfSghY3x8IXUmJmwmJmMpJiYoci5fc3Bsb21HcmlkRGZsdC54c2lkZT1cImJvdHRvbVwiLHIuX3NwbG9tR3JpZERmbHQueXNpZGU9XCJsZWZ0XCIpfSgwLGUsaCxmKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxmKX1lbHNlIGUudmlzaWJsZT0hMX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0c1wiOjc0NSxcIi4uL3BhcmNvb3Jkcy9tZXJnZV9sZW5ndGhcIjoxMDIzLFwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHNcIjoxMDcxLFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiOjEwNzYsXCIuL2F0dHJpYnV0ZXNcIjoxMTMwfV0sMTEzMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJyZWdsLXNwbG9tXCIpLGk9dChcImFycmF5LXJhbmdlXCIpLGE9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvZ3JpZFwiKSxzPXQoXCIuLi8uLi9saWJcIiksbD10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCIpLGM9dChcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIiksdT10KFwiLi4vc2NhdHRlci9jYWxjXCIpLmNhbGNNYXJrZXJTaXplLGg9dChcIi4uL3NjYXR0ZXIvY2FsY1wiKS5jYWxjQXhpc0V4cGFuc2lvbixmPXQoXCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsY1wiKSxwPXQoXCIuLi9zY2F0dGVyZ2wvY29udmVydFwiKS5tYXJrZXJTZWxlY3Rpb24sZD10KFwiLi4vc2NhdHRlcmdsL2NvbnZlcnRcIikubWFya2VyU3R5bGUsZz10KFwiLi4vc2NhdHRlcmdsXCIpLmNhbGNIb3Zlcix2PXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTSxtPXQoXCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzXCIpLlRPT19NQU5ZX1BPSU5UUztmdW5jdGlvbiB5KHQsZSl7dmFyIHIsaSxhLG8sYyx1PXQuX2Z1bGxMYXlvdXQsaD11Ll9zaXplLGY9ZS50cmFjZSxwPWUudCxkPXUuX3NwbG9tU2NlbmVzW2YudWlkXSxnPWQubWF0cml4T3B0aW9ucyx2PWcuY2RhdGEsbT11Ll9nbGNhbnZhcy5kYXRhKClbMF0ucmVnbCx5PXUuZHJhZ21vZGU7aWYoMCE9PXYubGVuZ3RoKXtnLmxvd2VyPWYuc2hvd3VwcGVyaGFsZixnLnVwcGVyPWYuc2hvd2xvd2VyaGFsZixnLmRpYWdvbmFsPWYuZGlhZ29uYWwudmlzaWJsZTt2YXIgeD1mLl92aXNpYmxlRGltcyxiPXYubGVuZ3RoLF89ZC52aWV3T3B0cz17fTtmb3IoXy5yYW5nZXM9bmV3IEFycmF5KGIpLF8uZG9tYWlucz1uZXcgQXJyYXkoYiksYz0wO2M8eC5sZW5ndGg7YysrKXthPXhbY107dmFyIHc9Xy5yYW5nZXNbY109bmV3IEFycmF5KDQpLGs9Xy5kb21haW5zW2NdPW5ldyBBcnJheSg0KTsocj1sLmdldEZyb21JZCh0LGYuX2RpYWdbYV1bMF0pKSYmKHdbMF09ci5fcmxbMF0sd1syXT1yLl9ybFsxXSxrWzBdPXIuZG9tYWluWzBdLGtbMl09ci5kb21haW5bMV0pLChpPWwuZ2V0RnJvbUlkKHQsZi5fZGlhZ1thXVsxXSkpJiYod1sxXT1pLl9ybFswXSx3WzNdPWkuX3JsWzFdLGtbMV09aS5kb21haW5bMF0sa1szXT1pLmRvbWFpblsxXSl9Xy52aWV3cG9ydD1baC5sLGguYixoLncraC5sLGguaCtoLmJdLCEwPT09ZC5tYXRyaXgmJihkLm1hdHJpeD1uKG0pKTt2YXIgQT11LmNsaWNrbW9kZS5pbmRleE9mKFwic2VsZWN0XCIpPi0xLFQ9XCJsYXNzb1wiPT09eXx8XCJzZWxlY3RcIj09PXl8fCEhZi5zZWxlY3RlZHBvaW50c3x8QTtpZihkLnNlbGVjdEJhdGNoPW51bGwsZC51bnNlbGVjdEJhdGNoPW51bGwsVCl7dmFyIE09Zi5fbGVuZ3RoO2lmKGQuc2VsZWN0QmF0Y2h8fChkLnNlbGVjdEJhdGNoPVtdLGQudW5zZWxlY3RCYXRjaD1bXSksZi5zZWxlY3RlZHBvaW50cyl7ZC5zZWxlY3RCYXRjaD1mLnNlbGVjdGVkcG9pbnRzO3ZhciBTPWYuc2VsZWN0ZWRwb2ludHMsRT17fTtmb3IoYT0wO2E8Uy5sZW5ndGg7YSsrKUVbU1thXV09ITA7dmFyIEM9W107Zm9yKGE9MDthPE07YSsrKUVbYV18fEMucHVzaChhKTtkLnVuc2VsZWN0QmF0Y2g9Q312YXIgTD1wLnhweD1uZXcgQXJyYXkoYiksej1wLnlweD1uZXcgQXJyYXkoYik7Zm9yKGM9MDtjPHgubGVuZ3RoO2MrKyl7aWYoYT14W2NdLHI9bC5nZXRGcm9tSWQodCxmLl9kaWFnW2FdWzBdKSlmb3IoTFtjXT1uZXcgQXJyYXkoTSksbz0wO288TTtvKyspTFtjXVtvXT1yLmMycCh2W2NdW29dKTtpZihpPWwuZ2V0RnJvbUlkKHQsZi5fZGlhZ1thXVsxXSkpZm9yKHpbY109bmV3IEFycmF5KE0pLG89MDtvPE07bysrKXpbY11bb109aS5jMnAodltjXVtvXSl9ZC5zZWxlY3RCYXRjaD8oZC5tYXRyaXgudXBkYXRlKGcsZyksZC5tYXRyaXgudXBkYXRlKGQudW5zZWxlY3RlZE9wdGlvbnMsZC5zZWxlY3RlZE9wdGlvbnMpLGQubWF0cml4LnVwZGF0ZShfLF8pKTpkLm1hdHJpeC51cGRhdGUoXyxudWxsKX1lbHNle3ZhciBPPXMuZXh0ZW5kRmxhdCh7fSxnLF8pO2QubWF0cml4LnVwZGF0ZShPLG51bGwpLHAueHB4PXAueXB4PW51bGx9fX1mdW5jdGlvbiB4KHQsZSl7Zm9yKHZhciByPWUuX2lkLG49e3g6MCx5OjF9W3IuY2hhckF0KDApXSxpPXQuX3Zpc2libGVEaW1zLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTtpZih0Ll9kaWFnW29dW25dPT09cilyZXR1cm4gYX1yZXR1cm4hMX1lLmV4cG9ydHM9e21vZHVsZVR5cGU6XCJ0cmFjZVwiLG5hbWU6XCJzcGxvbVwiLGJhc2VQbG90TW9kdWxlOnQoXCIuL2Jhc2VfcGxvdFwiKSxjYXRlZ29yaWVzOltcImdsXCIsXCJyZWdsXCIsXCJjYXJ0ZXNpYW5cIixcInN5bWJvbHNcIixcInNob3dMZWdlbmRcIixcInNjYXR0ZXItbGlrZVwiXSxhdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksc3VwcGx5RGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIiksY29sb3JiYXI6dChcIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyXCIpLGNhbGM6ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLGMsZz1lLmRpbWVuc2lvbnMseT1lLl9sZW5ndGgseD17fSxiPXguY2RhdGE9W10sXz14LmRhdGE9W10sdz1lLl92aXNpYmxlRGltcz1bXTtmdW5jdGlvbiBrKHQscil7Zm9yKHZhciBuPXQubWFrZUNhbGNkYXRhKHt2OnIudmFsdWVzLHZjYWxlbmRhcjplLmNhbGVuZGFyfSxcInZcIiksaT0wO2k8bi5sZW5ndGg7aSsrKW5baV09bltpXT09PXY/TmFOOm5baV07Yi5wdXNoKG4pLF8ucHVzaChcImxvZ1wiPT09dC50eXBlP3Muc2ltcGxlTWFwKG4sdC5jMmwpOm4pfWZvcihyPTA7cjxnLmxlbmd0aDtyKyspaWYoKGk9Z1tyXSkudmlzaWJsZSl7aWYoYT1sLmdldEZyb21JZCh0LGUuX2RpYWdbcl1bMF0pLG89bC5nZXRGcm9tSWQodCxlLl9kaWFnW3JdWzFdKSxhJiZvJiZhLnR5cGUhPT1vLnR5cGUpe3MubG9nKFwiU2tpcHBpbmcgc3Bsb20gZGltZW5zaW9uIFwiK3IrXCIgd2l0aCBjb25mbGljdGluZyBheGlzIHR5cGVzXCIpO2NvbnRpbnVlfWE/KGsoYSxpKSxvJiZcImNhdGVnb3J5XCI9PT1vLnR5cGUmJihvLl9jYXRlZ29yaWVzPWEuX2NhdGVnb3JpZXMuc2xpY2UoKSkpOmsobyxpKSx3LnB1c2gocil9Zm9yKGYodCxlKSxzLmV4dGVuZEZsYXQoeCxkKGUpKSxjPWIubGVuZ3RoKnk+bT8yKih4LnNpemVBdmd8fE1hdGgubWF4KHguc2l6ZSwzKSk6dShlLHkpLG49MDtuPHcubGVuZ3RoO24rKylpPWdbcj13W25dXSxhPWwuZ2V0RnJvbUlkKHQsZS5fZGlhZ1tyXVswXSl8fHt9LG89bC5nZXRGcm9tSWQodCxlLl9kaWFnW3JdWzFdKXx8e30saCh0LGUsYSxvLGJbbl0sYltuXSxjKTt2YXIgQT1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsbj1lLnVpZCxpPXIuX3NwbG9tU2NlbmVzO2l8fChpPXIuX3NwbG9tU2NlbmVzPXt9KTt2YXIgYT17ZGlydHk6ITB9LG89aVtlLnVpZF07cmV0dXJuIG98fCgobz1pW25dPXMuZXh0ZW5kRmxhdCh7fSxhLHtzZWxlY3RCYXRjaDpudWxsLHVuc2VsZWN0QmF0Y2g6bnVsbCxtYXRyaXg6ITEsc2VsZWN0Om51bGx9KSkuZHJhdz1mdW5jdGlvbigpe28ubWF0cml4JiZvLm1hdHJpeC5kcmF3JiYoby5zZWxlY3RCYXRjaD9vLm1hdHJpeC5kcmF3KG8udW5zZWxlY3RCYXRjaCxvLnNlbGVjdEJhdGNoKTpvLm1hdHJpeC5kcmF3KCkpLG8uZGlydHk9ITF9LG8uZGVzdHJveT1mdW5jdGlvbigpe28ubWF0cml4JiZvLm1hdHJpeC5kZXN0cm95JiZvLm1hdHJpeC5kZXN0cm95KCksby5tYXRyaXhPcHRpb25zPW51bGwsby5zZWxlY3RCYXRjaD1udWxsLG8udW5zZWxlY3RCYXRjaD1udWxsLG89bnVsbH0pLG8uZGlydHl8fHMuZXh0ZW5kRmxhdChvLGEpLG99KHQsZSk7cmV0dXJuIEEubWF0cml4fHwoQS5tYXRyaXg9ITApLEEubWF0cml4T3B0aW9ucz14LEEuc2VsZWN0ZWRPcHRpb25zPXAoZSxlLnNlbGVjdGVkKSxBLnVuc2VsZWN0ZWRPcHRpb25zPXAoZSxlLnVuc2VsZWN0ZWQpLFt7eDohMSx5OiExLHQ6e30sdHJhY2U6ZX1dfSxwbG90OmZ1bmN0aW9uKHQsZSxyKXtpZihyLmxlbmd0aClmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl5KHQscltuXVswXSl9LGhvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmNkWzBdLnRyYWNlLGk9dC5zY2VuZS5tYXRyaXhPcHRpb25zLmNkYXRhLGE9dC54YSxvPXQueWEscz1hLmMycChlKSxsPW8uYzJwKHIpLGM9dC5kaXN0YW5jZSx1PXgobixhKSxoPXgobixvKTtpZighMT09PXV8fCExPT09aClyZXR1cm5bdF07Zm9yKHZhciBmLHAsZD1pW3VdLHY9aVtoXSxtPWMseT0wO3k8ZC5sZW5ndGg7eSsrKXt2YXIgYj1kW3ldLF89dlt5XSx3PWEuYzJwKGIpLXMsaz1vLmMycChfKS1sLEE9TWF0aC5zcXJ0KHcqdytrKmspO0E8bSYmKG09cD1BLGY9eSl9cmV0dXJuIHQuaW5kZXg9Zix0LmRpc3RhbmNlPW0sdC5keHk9cCx2b2lkIDA9PT1mP1t0XTooZyh0LGQsdixuKSxbdF0pfSxzZWxlY3RQb2ludHM6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQuY2QsYT1uWzBdLnRyYWNlLG89blswXS50LHM9dC5zY2VuZSxsPXMubWF0cml4T3B0aW9ucy5jZGF0YSx1PXQueGF4aXMsaD10LnlheGlzLGY9W107aWYoIXMpcmV0dXJuIGY7dmFyIHA9IWMuaGFzTWFya2VycyhhKSYmIWMuaGFzVGV4dChhKTtpZighMCE9PWEudmlzaWJsZXx8cClyZXR1cm4gZjt2YXIgZD14KGEsdSksZz14KGEsaCk7aWYoITE9PT1kfHwhMT09PWcpcmV0dXJuIGY7dmFyIHY9by54cHhbZF0sbT1vLnlweFtnXSx5PWxbZF0sYj1sW2ddLF89bnVsbCx3PW51bGw7aWYoITE9PT1lfHxlLmRlZ2VuZXJhdGUpdz1pKG8uY291bnQpO2Vsc2UgZm9yKF89W10sdz1bXSxyPTA7cjx5Lmxlbmd0aDtyKyspZS5jb250YWlucyhbdltyXSxtW3JdXSxudWxsLHIsdCk/KF8ucHVzaChyKSxmLnB1c2goe3BvaW50TnVtYmVyOnIseDp5W3JdLHk6YltyXX0pKTp3LnB1c2gocik7aWYocy5zZWxlY3RCYXRjaHx8KHMuc2VsZWN0QmF0Y2g9W10scy51bnNlbGVjdEJhdGNoPVtdKSwhcy5zZWxlY3RCYXRjaCl7Zm9yKHI9MDtyPHMuY291bnQ7cisrKXMuc2VsZWN0QmF0Y2g9W10scy51bnNlbGVjdEJhdGNoPVtdO3MubWF0cml4LnVwZGF0ZShzLnVuc2VsZWN0ZWRPcHRpb25zLHMuc2VsZWN0ZWRPcHRpb25zKX1yZXR1cm4gcy5zZWxlY3RCYXRjaD1fLHMudW5zZWxlY3RCYXRjaD13LGZ9LGVkaXRTdHlsZTpmdW5jdGlvbih0LGUpe3ZhciByPWUudHJhY2Usbj10Ll9mdWxsTGF5b3V0Ll9zcGxvbVNjZW5lc1tyLnVpZF07aWYobil7Zih0LHIpLHMuZXh0ZW5kRmxhdChuLm1hdHJpeE9wdGlvbnMsZChyKSk7dmFyIGk9cy5leHRlbmRGbGF0KHt9LG4ubWF0cml4T3B0aW9ucyxuLnZpZXdPcHRzKTtuLm1hdHJpeC51cGRhdGUoaSxudWxsKX19LG1ldGE6e319LGEucmVnaXN0ZXIobyl9LHtcIi4uLy4uL2NvbXBvbmVudHMvZ3JpZFwiOjYyMSxcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIjo3NTIsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL3NjYXR0ZXIvY2FsY1wiOjEwNTMsXCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsY1wiOjEwNTUsXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiOjEwNzAsXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCI6MTA3NixcIi4uL3NjYXR0ZXJnbFwiOjExMDUsXCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzXCI6MTEwMixcIi4uL3NjYXR0ZXJnbC9jb252ZXJ0XCI6MTEwMyxcIi4vYXR0cmlidXRlc1wiOjExMzAsXCIuL2Jhc2VfcGxvdFwiOjExMzEsXCIuL2RlZmF1bHRzXCI6MTEzMixcImFycmF5LXJhbmdlXCI6NTgsXCJyZWdsLXNwbG9tXCI6NDg2fV0sMTEzNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vbWVzaDNkL2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiKSxsPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsYz17eDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0seTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0sejp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0sdTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sdjp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sdzp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sc3RhcnRzOnt4Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx5Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx6Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0sbWF4ZGlzcGxheWVkOnt2YWxUeXBlOlwiaW50ZWdlclwiLG1pbjowLGRmbHQ6MWUzLGVkaXRUeXBlOlwiY2FsY1wifSxzaXplcmVmOnt2YWxUeXBlOlwibnVtYmVyXCIsZWRpdFR5cGU6XCJjYWxjXCIsbWluOjAsZGZsdDoxfSx0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwiY2FsY1wifSxob3ZlcnRleHQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGhvdmVydGVtcGxhdGU6YSh7ZWRpdFR5cGU6XCJjYWxjXCJ9LHtrZXlzOltcInR1YmV4XCIsXCJ0dWJleVwiLFwidHViZXpcIixcInR1YmV1XCIsXCJ0dWJldlwiLFwidHViZXdcIixcIm5vcm1cIixcImRpdmVyZ2VuY2VcIl19KX07bChjLG4oXCJcIix7Y29sb3JBdHRyOlwidS92L3cgbm9ybVwiLHNob3dTY2FsZURmbHQ6ITAsZWRpdFR5cGVPdmVycmlkZTpcImNhbGNcIn0pLHtjb2xvcmJhcjppfSk7W1wib3BhY2l0eVwiLFwibGlnaHRwb3NpdGlvblwiLFwibGlnaHRpbmdcIl0uZm9yRWFjaChmdW5jdGlvbih0KXtjW3RdPW9bdF19KSxjLmhvdmVyaW5mbz1sKHt9LHMuaG92ZXJpbmZvLHtlZGl0VHlwZTpcImNhbGNcIixmbGFnczpbXCJ4XCIsXCJ5XCIsXCJ6XCIsXCJ1XCIsXCJ2XCIsXCJ3XCIsXCJub3JtXCIsXCJkaXZlcmdlbmNlXCIsXCJ0ZXh0XCIsXCJuYW1lXCJdLGRmbHQ6XCJ4K3kreitub3JtK3RleHQrbmFtZVwifSksYy50cmFuc2Zvcm1zPXZvaWQgMCxlLmV4cG9ydHM9Y30se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCI6NTc5LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIjo1ODUsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi4vbWVzaDNkL2F0dHJpYnV0ZXNcIjo5OTR9XSwxMTM1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYSxvLHM9ZS51LGw9ZS52LGM9ZS53LHU9ZS54LGg9ZS55LGY9ZS56LHA9TWF0aC5taW4odS5sZW5ndGgsaC5sZW5ndGgsZi5sZW5ndGgscy5sZW5ndGgsbC5sZW5ndGgsYy5sZW5ndGgpLGQ9MDtlLnN0YXJ0cyYmKGk9ZS5zdGFydHMueHx8W10sYT1lLnN0YXJ0cy55fHxbXSxvPWUuc3RhcnRzLnp8fFtdLGQ9TWF0aC5taW4oaS5sZW5ndGgsYS5sZW5ndGgsby5sZW5ndGgpKTt2YXIgZz0wLHY9MS8wO2ZvcihyPTA7cjxwO3IrKyl7dmFyIG09c1tyXSx5PWxbcl0seD1jW3JdLGI9TWF0aC5zcXJ0KG0qbSt5KnkreCp4KTtnPU1hdGgubWF4KGcsYiksdj1NYXRoLm1pbih2LGIpfW4odCxlLHt2YWxzOlt2LGddLGNvbnRhaW5lclN0cjpcIlwiLGNMZXR0ZXI6XCJjXCJ9KTt2YXIgXz0tMS8wLHc9MS8wLGs9LTEvMCxBPTEvMCxUPS0xLzAsTT0xLzA7Zm9yKHI9MDtyPHA7cisrKXt2YXIgUz11W3JdO189TWF0aC5tYXgoXyxTKSx3PU1hdGgubWluKHcsUyk7dmFyIEU9aFtyXTtrPU1hdGgubWF4KGssRSksQT1NYXRoLm1pbihBLEUpO3ZhciBDPWZbcl07VD1NYXRoLm1heChULEMpLE09TWF0aC5taW4oTSxDKX1mb3Iocj0wO3I8ZDtyKyspe3ZhciBMPWlbcl07Xz1NYXRoLm1heChfLEwpLHc9TWF0aC5taW4odyxMKTt2YXIgej1hW3JdO2s9TWF0aC5tYXgoayx6KSxBPU1hdGgubWluKEEseik7dmFyIE89b1tyXTtUPU1hdGgubWF4KFQsTyksTT1NYXRoLm1pbihNLE8pfWUuX2xlbj1wLGUuX3NsZW49ZCxlLl9ub3JtTWF4PWcsZS5feGJuZHM9W3csX10sZS5feWJuZHM9W0Esa10sZS5femJuZHM9W00sVF19fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsY1wiOjU4Nn1dLDExMzY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2wtc3RyZWFtdHViZTNkXCIpLGk9bi5jcmVhdGVUdWJlTWVzaCxhPXQoXCIuLi8uLi9saWJcIiksbz10KFwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvclwiKS5wYXJzZUNvbG9yU2NhbGUscz10KFwiLi4vLi4vcGxvdHMvZ2wzZC96aXAzXCIpLGw9e3hheGlzOjAseWF4aXM6MSx6YXhpczoyfTtmdW5jdGlvbiBjKHQsZSl7dGhpcy5zY2VuZT10LHRoaXMudWlkPWUsdGhpcy5tZXNoPW51bGwsdGhpcy5kYXRhPW51bGx9dmFyIHU9Yy5wcm90b3R5cGU7ZnVuY3Rpb24gaCh0KXtyZXR1cm4gYS5kaXN0aW5jdFZhbHModCkudmFsc31mdW5jdGlvbiBmKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBlPjI/dC5zbGljZSgxLGUtMSk6Mj09PWU/Wyh0WzBdK3RbMV0pLzJdOnR9ZnVuY3Rpb24gcCh0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gMT09PWU/Wy41LC41XTpbdFsxXS10WzBdLHRbZS0xXS10W2UtMl1dfWZ1bmN0aW9uIGQodCxlKXt2YXIgcj10LmZ1bGxTY2VuZUxheW91dCxpPXQuZGF0YVNjYWxlLGM9ZS5fbGVuLHU9e307ZnVuY3Rpb24gZCh0LGUpe3ZhciBuPXJbZV0sbz1pW2xbZV1dO3JldHVybiBhLnNpbXBsZU1hcCh0LGZ1bmN0aW9uKHQpe3JldHVybiBuLmQybCh0KSpvfSl9dS52ZWN0b3JzPXMoZChlLnUsXCJ4YXhpc1wiKSxkKGUudixcInlheGlzXCIpLGQoZS53LFwiemF4aXNcIiksYyk7dmFyIGc9aChlLnguc2xpY2UoMCxjKSksdj1oKGUueS5zbGljZSgwLGMpKSxtPWgoZS56LnNsaWNlKDAsYykpO2lmKGcubGVuZ3RoKnYubGVuZ3RoKm0ubGVuZ3RoPmMpcmV0dXJue3Bvc2l0aW9uczpbXSxjZWxsczpbXX07dmFyIHk9ZChnLFwieGF4aXNcIikseD1kKHYsXCJ5YXhpc1wiKSxiPWQobSxcInpheGlzXCIpO2lmKHUubWVzaGdyaWQ9W3kseCxiXSxlLnN0YXJ0cyl7dmFyIF89ZS5fc2xlbjt1LnN0YXJ0aW5nUG9zaXRpb25zPXMoZChlLnN0YXJ0cy54LnNsaWNlKDAsXyksXCJ4YXhpc1wiKSxkKGUuc3RhcnRzLnkuc2xpY2UoMCxfKSxcInlheGlzXCIpLGQoZS5zdGFydHMuei5zbGljZSgwLF8pLFwiemF4aXNcIikpfWVsc2V7Zm9yKHZhciB3PXhbMF0saz1mKHkpLEE9ZihiKSxUPW5ldyBBcnJheShrLmxlbmd0aCpBLmxlbmd0aCksTT0wLFM9MDtTPGsubGVuZ3RoO1MrKylmb3IodmFyIEU9MDtFPEEubGVuZ3RoO0UrKylUW00rK109W2tbU10sdyxBW0VdXTt1LnN0YXJ0aW5nUG9zaXRpb25zPVR9dS5jb2xvcm1hcD1vKGUpLHUudHViZVNpemU9ZS5zaXplcmVmLHUubWF4TGVuZ3RoPWUubWF4ZGlzcGxheWVkO3ZhciBDPWQoZS5feGJuZHMsXCJ4YXhpc1wiKSxMPWQoZS5feWJuZHMsXCJ5YXhpc1wiKSx6PWQoZS5femJuZHMsXCJ6YXhpc1wiKSxPPXAoeSksST1wKHgpLEQ9cChiKSxQPVtbQ1swXS1PWzBdLExbMF0tSVswXSx6WzBdLURbMF1dLFtDWzFdK09bMV0sTFsxXStJWzFdLHpbMV0rRFsxXV1dLFI9bih1LFApO1IudmVydGV4SW50ZW5zaXR5Qm91bmRzPVtlLmNtaW4vZS5fbm9ybU1heCxlLmNtYXgvZS5fbm9ybU1heF07dmFyIEY9ZS5saWdodHBvc2l0aW9uO3JldHVybiBSLmxpZ2h0UG9zaXRpb249W0YueCxGLnksRi56XSxSLmFtYmllbnQ9ZS5saWdodGluZy5hbWJpZW50LFIuZGlmZnVzZT1lLmxpZ2h0aW5nLmRpZmZ1c2UsUi5zcGVjdWxhcj1lLmxpZ2h0aW5nLnNwZWN1bGFyLFIucm91Z2huZXNzPWUubGlnaHRpbmcucm91Z2huZXNzLFIuZnJlc25lbD1lLmxpZ2h0aW5nLmZyZXNuZWwsUi5vcGFjaXR5PWUub3BhY2l0eSxlLl9wYWQ9Ui50dWJlU2NhbGUqZS5zaXplcmVmKjIsUn11LmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zY2VuZS5mdWxsU2NlbmVMYXlvdXQscj10aGlzLnNjZW5lLmRhdGFTY2FsZTtmdW5jdGlvbiBuKHQsbil7dmFyIGk9ZVtuXSxhPXJbbFtuXV07cmV0dXJuIGkubDJjKHQpL2F9aWYodC5vYmplY3Q9PT10aGlzLm1lc2gpe3ZhciBpPXQuZGF0YS5wb3NpdGlvbixhPXQuZGF0YS52ZWxvY2l0eTtyZXR1cm4gdC50cmFjZUNvb3JkaW5hdGU9W24oaVswXSxcInhheGlzXCIpLG4oaVsxXSxcInlheGlzXCIpLG4oaVsyXSxcInpheGlzXCIpLG4oYVswXSxcInhheGlzXCIpLG4oYVsxXSxcInlheGlzXCIpLG4oYVsyXSxcInpheGlzXCIpLHQuZGF0YS5pbnRlbnNpdHkqdGhpcy5kYXRhLl9ub3JtTWF4LHQuZGF0YS5kaXZlcmdlbmNlXSx0LnRleHRMYWJlbD10aGlzLmRhdGEuaG92ZXJ0ZXh0fHx0aGlzLmRhdGEudGV4dCwhMH19LHUudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuZGF0YT10O3ZhciBlPWQodGhpcy5zY2VuZSx0KTt0aGlzLm1lc2gudXBkYXRlKGUpfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5tZXNoKSx0aGlzLm1lc2guZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxuPWQodCxlKSxhPWkocixuKSxvPW5ldyBjKHQsZS51aWQpO3JldHVybiBvLm1lc2g9YSxvLmRhdGE9ZSxhLl90cmFjZT1vLHQuZ2xwbG90LmFkZChhKSxvfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvclwiOjY5OCxcIi4uLy4uL3Bsb3RzL2dsM2QvemlwM1wiOjgwMCxcImdsLXN0cmVhbXR1YmUzZFwiOjMxMH1dLDExMzc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiKSxhPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgbD1zKFwidVwiKSxjPXMoXCJ2XCIpLHU9cyhcIndcIiksaD1zKFwieFwiKSxmPXMoXCJ5XCIpLHA9cyhcInpcIik7bCYmbC5sZW5ndGgmJmMmJmMubGVuZ3RoJiZ1JiZ1Lmxlbmd0aCYmaCYmaC5sZW5ndGgmJmYmJmYubGVuZ3RoJiZwJiZwLmxlbmd0aD8ocyhcInN0YXJ0cy54XCIpLHMoXCJzdGFydHMueVwiKSxzKFwic3RhcnRzLnpcIikscyhcIm1heGRpc3BsYXllZFwiKSxzKFwic2l6ZXJlZlwiKSxzKFwibGlnaHRpbmcuYW1iaWVudFwiKSxzKFwibGlnaHRpbmcuZGlmZnVzZVwiKSxzKFwibGlnaHRpbmcuc3BlY3VsYXJcIikscyhcImxpZ2h0aW5nLnJvdWdobmVzc1wiKSxzKFwibGlnaHRpbmcuZnJlc25lbFwiKSxzKFwibGlnaHRwb3NpdGlvbi54XCIpLHMoXCJsaWdodHBvc2l0aW9uLnlcIikscyhcImxpZ2h0cG9zaXRpb24uelwiKSxpKHQsZSxvLHMse3ByZWZpeDpcIlwiLGNMZXR0ZXI6XCJjXCJ9KSxzKFwidGV4dFwiKSxzKFwiaG92ZXJ0ZXh0XCIpLHMoXCJob3ZlcnRlbXBsYXRlXCIpLGUuX2xlbmd0aD1udWxsKTplLnZpc2libGU9ITF9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIjo1ODgsXCIuLi8uLi9saWJcIjo3MDEsXCIuL2F0dHJpYnV0ZXNcIjoxMTM0fV0sMTEzODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17bW9kdWxlVHlwZTpcInRyYWNlXCIsbmFtZTpcInN0cmVhbXR1YmVcIixiYXNlUGxvdE1vZHVsZTp0KFwiLi4vLi4vcGxvdHMvZ2wzZFwiKSxjYXRlZ29yaWVzOltcImdsM2RcIl0sYXR0cmlidXRlczp0KFwiLi9hdHRyaWJ1dGVzXCIpLHN1cHBseURlZmF1bHRzOnQoXCIuL2RlZmF1bHRzXCIpLGNvbG9yYmFyOnttaW46XCJjbWluXCIsbWF4OlwiY21heFwifSxjYWxjOnQoXCIuL2NhbGNcIikscGxvdDp0KFwiLi9jb252ZXJ0XCIpLGV2ZW50RGF0YTpmdW5jdGlvbih0LGUpe3JldHVybiB0LnR1YmV4PXQueCx0LnR1YmV5PXQueSx0LnR1YmV6PXQueix0LnR1YmV1PWUudHJhY2VDb29yZGluYXRlWzNdLHQudHViZXY9ZS50cmFjZUNvb3JkaW5hdGVbNF0sdC50dWJldz1lLnRyYWNlQ29vcmRpbmF0ZVs1XSx0Lm5vcm09ZS50cmFjZUNvb3JkaW5hdGVbNl0sdC5kaXZlcmdlbmNlPWUudHJhY2VDb29yZGluYXRlWzddLGRlbGV0ZSB0LngsZGVsZXRlIHQueSxkZWxldGUgdC56LHR9LG1ldGE6e319fSx7XCIuLi8uLi9wbG90cy9nbDNkXCI6Nzg5LFwiLi9hdHRyaWJ1dGVzXCI6MTEzNCxcIi4vY2FsY1wiOjExMzUsXCIuL2NvbnZlcnRcIjoxMTM2LFwiLi9kZWZhdWx0c1wiOjExMzd9XSwxMTM5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vcGxvdHMvZG9tYWluXCIpLmF0dHJpYnV0ZXMsbz10KFwiLi4vcGllL2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17bGFiZWxzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxwYXJlbnRzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx2YWx1ZXM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGJyYW5jaHZhbHVlczp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wicmVtYWluZGVyXCIsXCJ0b3RhbFwiXSxkZmx0OlwicmVtYWluZGVyXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGxldmVsOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJwbG90XCJ9LG1heGRlcHRoOnt2YWxUeXBlOlwiaW50ZWdlclwiLGVkaXRUeXBlOlwicGxvdFwiLGRmbHQ6LTF9LG1hcmtlcjp7Y29sb3JzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxsaW5lOntjb2xvcjpzKHt9LG8ubWFya2VyLmxpbmUuY29sb3Ise2RmbHQ6bnVsbH0pLHdpZHRoOnMoe30sby5tYXJrZXIubGluZS53aWR0aCx7ZGZsdDoxfSksZWRpdFR5cGU6XCJjYWxjXCJ9LGVkaXRUeXBlOlwiY2FsY1wifSxsZWFmOntvcGFjaXR5Ont2YWxUeXBlOlwibnVtYmVyXCIsZWRpdFR5cGU6XCJzdHlsZVwiLG1pbjowLG1heDoxLGRmbHQ6Ljd9LGVkaXRUeXBlOlwicGxvdFwifSx0ZXh0Om8udGV4dCx0ZXh0aW5mbzpzKHt9LG8udGV4dGluZm8se2VkaXRUeXBlOlwicGxvdFwiLGZsYWdzOltcImxhYmVsXCIsXCJ0ZXh0XCIsXCJ2YWx1ZVwiXX0pLHRleHRmb250Om8udGV4dGZvbnQsaG92ZXJ0ZXh0Om8uaG92ZXJ0ZXh0LGhvdmVyaW5mbzpzKHt9LG4uaG92ZXJpbmZvLHtmbGFnczpbXCJsYWJlbFwiLFwidGV4dFwiLFwidmFsdWVcIixcIm5hbWVcIl19KSxob3ZlcnRlbXBsYXRlOmkoKSxpbnNpZGV0ZXh0Zm9udDpvLmluc2lkZXRleHRmb250LG91dHNpZGV0ZXh0Zm9udDpvLm91dHNpZGV0ZXh0Zm9udCxkb21haW46YSh7bmFtZTpcInN1bmJ1cnN0XCIsdHJhY2U6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9KX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDYsXCIuLi8uLi9wbG90cy9kb21haW5cIjo3NzQsXCIuLi9waWUvYXR0cmlidXRlc1wiOjEwMjZ9XSwxMTQwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCIpLmdldE1vZHVsZUNhbGNEYXRhLGE9ci5uYW1lPVwic3VuYnVyc3RcIjtyLnBsb3Q9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHM9bi5nZXRNb2R1bGUoYSksbD1pKHQuY2FsY2RhdGEscylbMF07cy5wbG90KHQsbCxyLG8pfSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4uX2hhcyYmbi5faGFzKGEpLG89ZS5faGFzJiZlLl9oYXMoYSk7aSYmIW8mJm4uX3N1bmJ1cnN0bGF5ZXIuc2VsZWN0QWxsKFwiZy50cmFjZVwiKS5yZW1vdmUoKX19LHtcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCI6Nzg0LFwiLi4vLi4vcmVnaXN0cnlcIjo4Mjl9XSwxMTQxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzLWhpZXJhcmNoeVwiKSxpPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxhPXQoXCIuLi8uLi9saWJcIiksbz10KFwiLi4vcGllL2NhbGNcIikubWFrZVB1bGxDb2xvckZuLHM9dChcIi4uL3BpZS9jYWxjXCIpLmdlbmVyYXRlRXh0ZW5kZWRDb2xvcnMsbD1hLmlzQXJyYXlPclR5cGVkQXJyYXksYz17fTtyLmNhbGM9ZnVuY3Rpb24odCxlKXt2YXIgcixzLGMsdSxoLGYscD10Ll9mdWxsTGF5b3V0LGQ9ZS5pZHMsZz1sKGQpLHY9ZS5sYWJlbHMsbT1lLnBhcmVudHMseT1lLnZhbHVlcyx4PWwoeSksYj1bXSxfPXt9LHc9e30saz1mdW5jdGlvbih0KXtyZXR1cm4heHx8aSh5W3RdKSYmeVt0XT49MH07Zz8ocj1NYXRoLm1pbihkLmxlbmd0aCxtLmxlbmd0aCkscz1mdW5jdGlvbih0KXtyZXR1cm4gZFt0XSYmayh0KX0sYz1mdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nKGRbdF0pfSk6KHI9TWF0aC5taW4odi5sZW5ndGgsbS5sZW5ndGgpLHM9ZnVuY3Rpb24odCl7cmV0dXJuIHZbdF0mJmsodCl9LGM9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh2W3RdKX0pLHgmJihyPU1hdGgubWluKHIseS5sZW5ndGgpKTtmb3IodmFyIEE9MDtBPHI7QSsrKWlmKHMoQSkpe3ZhciBUPWMoQSksTT1tW0FdP1N0cmluZyhtW0FdKTpcIlwiLFM9e2k6QSxpZDpULHBpZDpNLGxhYmVsOnZbQV0/U3RyaW5nKHZbQV0pOlwiXCJ9O3gmJihTLnY9K3lbQV0pLGIucHVzaChTKSxoPVQsX1t1PU1dP19bdV0ucHVzaChoKTpfW3VdPVtoXSx3W2hdPTF9aWYoX1tcIlwiXSl7aWYoX1tcIlwiXS5sZW5ndGg+MSl7Zm9yKHZhciBFPWEucmFuZHN0cigpLEM9MDtDPGIubGVuZ3RoO0MrKylcIlwiPT09YltDXS5waWQmJihiW0NdLnBpZD1FKTtiLnVuc2hpZnQoe2hhc011bHRpcGxlUm9vdHM6ITAsaWQ6RSxwaWQ6XCJcIn0pfX1lbHNle3ZhciBMLHo9W107Zm9yKEwgaW4gXyl3W0xdfHx6LnB1c2goTCk7aWYoMSE9PXoubGVuZ3RoKXJldHVybiBhLndhcm4oXCJNdWx0aXBsZSBpbXBsaWVkIHJvb3RzLCBjYW5ub3QgYnVpbGQgc3VuYnVyc3QgaGllcmFyY2h5LlwiKTtMPXpbMF0sYi51bnNoaWZ0KHtpZDpMLHBpZDpcIlwiLGxhYmVsOkx9KX10cnl7Zj1uLnN0cmF0aWZ5KCkuaWQoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KS5wYXJlbnRJZChmdW5jdGlvbih0KXtyZXR1cm4gdC5waWR9KShiKX1jYXRjaCh0KXtyZXR1cm4gYS53YXJuKFwiRmFpbGVkIHRvIGJ1aWxkIHN1bmJ1cnN0IGhpZXJhcmNoeS4gRXJyb3I6IFwiK3QubWVzc2FnZSl9dmFyIE89bi5oaWVyYXJjaHkoZiksST0hMTtpZih4KXN3aXRjaChlLmJyYW5jaHZhbHVlcyl7Y2FzZVwicmVtYWluZGVyXCI6Ty5zdW0oZnVuY3Rpb24odCl7cmV0dXJuIHQuZGF0YS52fSk7YnJlYWs7Y2FzZVwidG90YWxcIjpPLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRhLmRhdGEudjtpZih0LmNoaWxkcmVuJiZlPHQuY2hpbGRyZW4ucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZS5kYXRhLmRhdGEudn0sMCkpcmV0dXJuIEk9ITAsYS53YXJuKFtcIlRvdGFsIHZhbHVlIGZvciBub2RlXCIsdC5kYXRhLmRhdGEuaWQsXCJpcyBzbWFsbGVyIHRoYW4gdGhlIHN1bSBvZiBpdHMgY2hpbGRyZW4uXCJdLmpvaW4oXCIgXCIpKTt0LnZhbHVlPWV9KX1lbHNlIE8uY291bnQoKTtpZighSSl7Ty5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUudmFsdWUtdC52YWx1ZX0pO3ZhciBEPWUubWFya2VyLmNvbG9yc3x8W10sUD1vKHAuX3N1bmJ1cnN0Y29sb3JtYXApO3JldHVybiBPLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRhLmRhdGEscj1lLmlkO2UuY29sb3I9UChEW2UuaV0scil9KSxiWzBdLmhpZXJhcmNoeT1PLGJ9fSxyLmNyb3NzVHJhY2VDYWxjPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj10LmNhbGNkYXRhLG49ZS5zdW5idXJzdGNvbG9yd2F5LGk9ZS5fc3VuYnVyc3Rjb2xvcm1hcDtlLmV4dGVuZHN1bmJ1cnN0Y29sb3JzJiYobj1zKG4sYykpO3ZhciBhPTA7ZnVuY3Rpb24gbyh0KXt2YXIgZT10LmRhdGEuZGF0YSxyPWUuaWQ7ITE9PT1lLmNvbG9yJiYoaVtyXT9lLmNvbG9yPWlbcl06dC5wYXJlbnQ/dC5wYXJlbnQucGFyZW50P2UuY29sb3I9dC5wYXJlbnQuZGF0YS5kYXRhLmNvbG9yOihpW3JdPWUuY29sb3I9blthJW4ubGVuZ3RoXSxhKyspOmUuY29sb3I9XCJyZ2JhKDAsMCwwLDApXCIpfWZvcih2YXIgbD0wO2w8ci5sZW5ndGg7bCsrKXt2YXIgdT1yW2xdWzBdO1wic3VuYnVyc3RcIj09PXUudHJhY2UudHlwZSYmdS5oaWVyYXJjaHkmJnUuaGllcmFyY2h5LmVhY2gobyl9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vcGllL2NhbGNcIjoxMDI4LFwiZDMtaGllcmFyY2h5XCI6MTQ4LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSwxMTQyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtDTElDS19UUkFOU0lUSU9OX1RJTUU6NzUwLENMSUNLX1RSQU5TSVRJT05fRUFTSU5HOlwibGluZWFyXCJ9fSx7fV0sMTE0MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2RvbWFpblwiKS5kZWZhdWx0cyxvPW4uY29lcmNlRm9udDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXZhciBjPWwoXCJsYWJlbHNcIiksdT1sKFwicGFyZW50c1wiKTtpZihjJiZjLmxlbmd0aCYmdSYmdS5sZW5ndGgpe3ZhciBoPWwoXCJ2YWx1ZXNcIik7aCYmaC5sZW5ndGgmJmwoXCJicmFuY2h2YWx1ZXNcIiksbChcImxldmVsXCIpLGwoXCJtYXhkZXB0aFwiKSxsKFwibWFya2VyLmxpbmUud2lkdGhcIikmJmwoXCJtYXJrZXIubGluZS5jb2xvclwiLHMucGFwZXJfYmdjb2xvciksbChcIm1hcmtlci5jb2xvcnNcIiksbChcImxlYWYub3BhY2l0eVwiKTt2YXIgZj1sKFwidGV4dFwiKTtsKFwidGV4dGluZm9cIixBcnJheS5pc0FycmF5KGYpP1widGV4dCtsYWJlbFwiOlwibGFiZWxcIiksbChcImhvdmVydGV4dFwiKSxsKFwiaG92ZXJ0ZW1wbGF0ZVwiKTt2YXIgcD1vKGwsXCJ0ZXh0Zm9udFwiLHMuZm9udCksZD1uLmV4dGVuZEZsYXQoe30scCk7ISh0LnRleHRmb250JiZ0LnRleHRmb250LmNvbG9yKSYmZGVsZXRlIGQuY29sb3IsbyhsLFwiaW5zaWRldGV4dGZvbnRcIixkKSxvKGwsXCJvdXRzaWRldGV4dGZvbnRcIixwKSxhKGUscyxsKSxlLl9sZW5ndGg9bnVsbH1lbHNlIGUudmlzaWJsZT0hMX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2RvbWFpblwiOjc3NCxcIi4vYXR0cmlidXRlc1wiOjExMzl9XSwxMTQ0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwidHJhY2VcIixuYW1lOlwic3VuYnVyc3RcIixiYXNlUGxvdE1vZHVsZTp0KFwiLi9iYXNlX3Bsb3RcIiksY2F0ZWdvcmllczpbXSxhbmltYXRhYmxlOiEwLGF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLHN1cHBseURlZmF1bHRzOnQoXCIuL2RlZmF1bHRzXCIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoXCIuL2xheW91dF9kZWZhdWx0c1wiKSxjYWxjOnQoXCIuL2NhbGNcIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KFwiLi9jYWxjXCIpLmNyb3NzVHJhY2VDYWxjLHBsb3Q6dChcIi4vcGxvdFwiKSxzdHlsZTp0KFwiLi9zdHlsZVwiKS5zdHlsZSxtZXRhOnt9fX0se1wiLi9hdHRyaWJ1dGVzXCI6MTEzOSxcIi4vYmFzZV9wbG90XCI6MTE0MCxcIi4vY2FsY1wiOjExNDEsXCIuL2RlZmF1bHRzXCI6MTE0MyxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjoxMTQ1LFwiLi9sYXlvdXRfZGVmYXVsdHNcIjoxMTQ2LFwiLi9wbG90XCI6MTE0NyxcIi4vc3R5bGVcIjoxMTQ4fV0sMTE0NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17c3VuYnVyc3Rjb2xvcndheTp7dmFsVHlwZTpcImNvbG9ybGlzdFwiLGVkaXRUeXBlOlwiY2FsY1wifSxleHRlbmRzdW5idXJzdGNvbG9yczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifX19LHt9XSwxMTQ2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1yKFwic3VuYnVyc3Rjb2xvcndheVwiLGUuY29sb3J3YXkpLHIoXCJleHRlbmRzdW5idXJzdGNvbG9yc1wiKX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjoxMTQ1fV0sMTE0NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJkMy1oaWVyYXJjaHlcIiksYT10KFwiLi4vLi4vcmVnaXN0cnlcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGw9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxjPXQoXCIuLi8uLi9saWJcIiksdT10KFwiLi4vLi4vbGliL2V2ZW50c1wiKSxoPXQoXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIiksZj10KFwiLi4vLi4vbGliL3NldGN1cnNvclwiKSxwPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnNcIikuYXBwZW5kQXJyYXlQb2ludFZhbHVlLGQ9dChcIi4uL3BpZS9wbG90XCIpLnRyYW5zZm9ybUluc2lkZVRleHQsZz10KFwiLi4vcGllL2hlbHBlcnNcIikuZm9ybWF0UGllVmFsdWUsdj10KFwiLi9zdHlsZVwiKS5zdHlsZU9uZSxtPXQoXCIuL2NvbnN0YW50c1wiKTtmdW5jdGlvbiB5KHQsZSxyLGEpe3ZhciBvPXQuX2Z1bGxMYXlvdXQsdT1hJiZhLmR1cmF0aW9uPjAsZj1uLnNlbGVjdChyKS5zZWxlY3RBbGwoXCJnLnNsaWNlXCIpLHA9ZVswXSxtPXAudHJhY2UseT14KHAuaGllcmFyY2h5LG0ubGV2ZWwpLHc9bS5tYXhkZXB0aD49MD9tLm1heGRlcHRoOjEvMCxNPW8uX3NpemUsUz1tLmRvbWFpbixFPU0udyooUy54WzFdLVMueFswXSksQz1NLmgqKFMueVsxXS1TLnlbMF0pLEw9LjUqTWF0aC5taW4oRSxDKSx6PXAuY3g9TS5sK00udyooUy54WzFdK1MueFswXSkvMixPPXAuY3k9TS50K00uaCooMS1TLnlbMF0pLUMvMjtpZigheSlyZXR1cm4gZi5yZW1vdmUoKTt2YXIgST1udWxsLEQ9e307dSYmZi5lYWNoKGZ1bmN0aW9uKHQpe0Rbayh0KV09e3JweDA6dC5ycHgwLHJweDE6dC5ycHgxLHgwOnQueDAseDE6dC54MSx0cmFuc2Zvcm06dC50cmFuc2Zvcm19LCFJJiZfKHQpJiYoST10KX0pO3ZhciBQPWZ1bmN0aW9uKHQpe3JldHVybiBpLnBhcnRpdGlvbigpLnNpemUoWzIqTWF0aC5QSSx0LmhlaWdodCsxXSkodCl9KHkpLmRlc2NlbmRhbnRzKCksUj15LmhlaWdodCsxLEY9MCxCPXc7cC5oYXNNdWx0aXBsZVJvb3RzJiZiKHkpJiYoUD1QLnNsaWNlKDEpLFItPTEsRj0xLEIrPTEpLFA9UC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQueTE8PUJ9KTt2YXIgTj1NYXRoLm1pbihSLHcpLGo9ZnVuY3Rpb24odCl7cmV0dXJuKHQtRikvTipMfSxWPWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QqTWF0aC5jb3MoZSksLXQqTWF0aC5zaW4oZSldfSxVPWZ1bmN0aW9uKHQpe3JldHVybiBjLnBhdGhBbm51bHVzKHQucnB4MCx0LnJweDEsdC54MCx0LngxLHosTyl9LHE9ZnVuY3Rpb24odCl7cmV0dXJuIHordC5weG1pZFswXSp0LnRyYW5zZm9ybS5yQ2VudGVyKyh0LnRyYW5zZm9ybS54fHwwKX0sSD1mdW5jdGlvbih0KXtyZXR1cm4gTyt0LnB4bWlkWzFdKnQudHJhbnNmb3JtLnJDZW50ZXIrKHQudHJhbnNmb3JtLnl8fDApfTsoZj1mLmRhdGEoUCxmdW5jdGlvbih0KXtyZXR1cm4gayh0KX0pKS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcInNsaWNlXCIsITApLHU/Zi5leGl0KCkudHJhbnNpdGlvbigpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTt0LnNlbGVjdChcInBhdGguc3VyZmFjZVwiKS50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKFwiZFwiLGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9ayh0KSxpPURbcl0sYT1EW2soeSldO2lmKGEpe3ZhciBvPXQueDE+YS54MT8yKk1hdGguUEk6MDtlPXQucnB4MTxhLnJweDE/e3JweDA6MCxycHgxOjB9Ont4MDpvLHgxOm99fWVsc2V7dmFyIHMsbD1rKHQucGFyZW50KTtmLmVhY2goZnVuY3Rpb24odCl7aWYoayh0KT09PWwpcmV0dXJuIHM9dH0pO3ZhciBjLHU9cy5jaGlsZHJlbjt1LmZvckVhY2goZnVuY3Rpb24odCxlKXtpZihrKHQpPT09cilyZXR1cm4gYz1lfSk7dmFyIGg9dS5sZW5ndGgscD1uLmludGVycG9sYXRlKHMueDAscy54MSk7ZT17cnB4MDpMLHJweDE6TCx4MDpwKGMvaCkseDE6cCgoYysxKS9oKX19cmV0dXJuIG4uaW50ZXJwb2xhdGUoaSxlKX0odCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBVKGUodCkpfX0pLHQuc2VsZWN0KFwiZy5zbGljZXRleHRcIikuYXR0cihcIm9wYWNpdHlcIiwwKX0pLnJlbW92ZSgpOmYuZXhpdCgpLnJlbW92ZSgpLGYub3JkZXIoKTt2YXIgRz1udWxsO2lmKHUmJkkpe3ZhciBZPWsoSSk7Zi5lYWNoKGZ1bmN0aW9uKHQpe251bGw9PT1HJiZrKHQpPT09WSYmKEc9dC54MSl9KX12YXIgVz1mO2Z1bmN0aW9uIFgodCl7dmFyIGU9dC5wYXJlbnQscj1EW2soZSldLGk9e307aWYocil7dmFyIGE9ZS5jaGlsZHJlbixvPWEuaW5kZXhPZih0KSxzPWEubGVuZ3RoLGw9bi5pbnRlcnBvbGF0ZShyLngwLHIueDEpO2kueDA9bChvL3MpLGkueDE9bChvL3MpfWVsc2UgaS54MD1pLngxPTA7cmV0dXJuIGl9dSYmKFc9Vy50cmFuc2l0aW9uKCkuZWFjaChcImVuZFwiLGZ1bmN0aW9uKCl7QShuLnNlbGVjdCh0aGlzKSx0LHtpc1RyYW5zaXRpb25pbmc6ITF9KX0pKSxXLmVhY2goZnVuY3Rpb24ocil7dmFyIGk9bi5zZWxlY3QodGhpcyksYT1jLmVuc3VyZVNpbmdsZShpLFwicGF0aFwiLFwic3VyZmFjZVwiLGZ1bmN0aW9uKHQpe3Quc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpfSk7ci5ycHgwPWooci55MCksci5ycHgxPWooci55MSksci54bWlkPShyLngwK3IueDEpLzIsci5weG1pZD1WKHIucnB4MSxyLnhtaWQpLHIubWlkYW5nbGU9LShyLnhtaWQtTWF0aC5QSS8yKSxyLmhhbGZhbmdsZT0uNSpNYXRoLm1pbihjLmFuZ2xlRGVsdGEoci54MCxyLngxKXx8TWF0aC5QSSxNYXRoLlBJKSxyLnJpbmc9MS1yLnJweDAvci5ycHgxLHIuckluc2NyaWJlZD1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXQucnB4MCYmdC54bWlkPT09TWF0aC5QST8xOk1hdGgubWF4KDAsTWF0aC5taW4oMS8oMSsxL01hdGguc2luKHQuaGFsZmFuZ2xlKSksdC5yaW5nLzIpKX0ociksdT9hLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oXCJkXCIsZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7dmFyIGUscj1EW2sodCldLGk9e3gwOnQueDAseDE6dC54MSxycHgwOnQucnB4MCxycHgxOnQucnB4MX07aWYocillPXI7ZWxzZSBpZihJKWlmKHQucGFyZW50KWlmKEcpe3ZhciBhPXQueDE+Rz8yKk1hdGguUEk6MDtlPXt4MDphLHgxOmF9fWVsc2UgZT17cnB4MDpMLHJweDE6TH0sYy5leHRlbmRGbGF0KGUsWCh0KSk7ZWxzZSBlPXtycHgwOjAscnB4MTowfTtlbHNlIGU9e3gwOjAseDE6MH07cmV0dXJuIG4uaW50ZXJwb2xhdGUoZSxpKX0odCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBVKGUodCkpfX0pOmEuYXR0cihcImRcIixVKSxpLmNhbGwoVCx0LGUpLmNhbGwoQSx0LHtpc1RyYW5zaXRpb25pbmc6dC5fdHJhbnNpdGlvbmluZ30pLGEuY2FsbCh2LHIsbSk7dmFyIGY9Yy5lbnN1cmVTaW5nbGUoaSxcImdcIixcInNsaWNldGV4dFwiKSx5PWMuZW5zdXJlU2luZ2xlKGYsXCJ0ZXh0XCIsXCJcIixmdW5jdGlvbih0KXt0LmF0dHIoXCJkYXRhLW5vdGV4XCIsMSl9KTt5LnRleHQoZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUudGV4dGluZm87aWYoIW58fFwibm9uZVwiPT09bilyZXR1cm5cIlwiO3ZhciBpPXQuZGF0YS5kYXRhLGE9ci5zZXBhcmF0b3JzLG89bi5zcGxpdChcIitcIikscz1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PW8uaW5kZXhPZih0KX0sbD1bXTtzKFwibGFiZWxcIikmJmkubGFiZWwmJmwucHVzaChpLmxhYmVsKTtpLmhhc093blByb3BlcnR5KFwidlwiKSYmcyhcInZhbHVlXCIpJiZsLnB1c2goZyhpLnYsYSkpO2lmKHMoXCJ0ZXh0XCIpKXt2YXIgdT1jLmNhc3RPcHRpb24oZSxpLmksXCJ0ZXh0XCIpO3UmJmwucHVzaCh1KX1yZXR1cm4gbC5qb2luKFwiPGJyPlwiKX0ocixtLG8pKS5jbGFzc2VkKFwic2xpY2V0ZXh0XCIsITApLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLFwibWlkZGxlXCIpLmNhbGwobC5mb250LGIocik/ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuZGF0YS5kYXRhLmksaT1jLmNhc3RPcHRpb24odCxuLFwib3V0c2lkZXRleHRmb250LmNvbG9yXCIpfHxjLmNhc3RPcHRpb24odCxuLFwidGV4dGZvbnQuY29sb3JcIil8fHIuY29sb3IsYT1jLmNhc3RPcHRpb24odCxuLFwib3V0c2lkZXRleHRmb250LmZhbWlseVwiKXx8Yy5jYXN0T3B0aW9uKHQsbixcInRleHRmb250LmZhbWlseVwiKXx8ci5mYW1pbHksbz1jLmNhc3RPcHRpb24odCxuLFwib3V0c2lkZXRleHRmb250LnNpemVcIil8fGMuY2FzdE9wdGlvbih0LG4sXCJ0ZXh0Zm9udC5zaXplXCIpfHxyLnNpemU7cmV0dXJue2NvbG9yOmksZmFtaWx5OmEsc2l6ZTpvfX0obSxyLG8uZm9udCk6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuZGF0YS5kYXRhLGk9bi5pLGE9Yy5jYXN0T3B0aW9uKHQsaSxcImluc2lkZXRleHRmb250LmNvbG9yXCIpOyFhJiZ0Ll9pbnB1dC50ZXh0Zm9udCYmKGE9Yy5jYXN0T3B0aW9uKHQuX2lucHV0LGksXCJ0ZXh0Zm9udC5jb2xvclwiKSk7dmFyIG89Yy5jYXN0T3B0aW9uKHQsaSxcImluc2lkZXRleHRmb250LmZhbWlseVwiKXx8Yy5jYXN0T3B0aW9uKHQsaSxcInRleHRmb250LmZhbWlseVwiKXx8ci5mYW1pbHksbD1jLmNhc3RPcHRpb24odCxpLFwiaW5zaWRldGV4dGZvbnQuc2l6ZVwiKXx8Yy5jYXN0T3B0aW9uKHQsaSxcInRleHRmb250LnNpemVcIil8fHIuc2l6ZTtyZXR1cm57Y29sb3I6YXx8cy5jb250cmFzdChuLmNvbG9yKSxmYW1pbHk6byxzaXplOmx9fShtLHIsby5mb250KSkuY2FsbChoLmNvbnZlcnRUb1RzcGFucyx0KTt2YXIgeD1sLmJCb3goeS5ub2RlKCkpO3IudHJhbnNmb3JtPWQoeCxyLHApLHIudHJhbnNsYXRlWD1xKHIpLHIudHJhbnNsYXRlWT1IKHIpO3ZhciBfPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrdC50cmFuc2xhdGVYK1wiLFwiK3QudHJhbnNsYXRlWStcIilcIisodC50cmFuc2Zvcm0uc2NhbGU8MT9cInNjYWxlKFwiK3QudHJhbnNmb3JtLnNjYWxlK1wiKVwiOlwiXCIpKyh0LnRyYW5zZm9ybS5yb3RhdGU/XCJyb3RhdGUoXCIrdC50cmFuc2Zvcm0ucm90YXRlK1wiKVwiOlwiXCIpK1widHJhbnNsYXRlKFwiKy0oZS5sZWZ0K2UucmlnaHQpLzIrXCIsXCIrLShlLnRvcCtlLmJvdHRvbSkvMitcIilcIn07dT95LnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZSxyPURbayh0KV0saT10LnRyYW5zZm9ybTtpZihyKWU9cjtlbHNlIGlmKGU9e3JweDE6dC5ycHgxLHRyYW5zZm9ybTp7c2NhbGU6MCxyb3RhdGU6aS5yb3RhdGUsckNlbnRlcjppLnJDZW50ZXIseDppLngseTppLnl9fSxJKWlmKHQucGFyZW50KWlmKEcpe3ZhciBhPXQueDE+Rz8yKk1hdGguUEk6MDtlLngwPWUueDE9YX1lbHNlIGMuZXh0ZW5kRmxhdChlLFgodCkpO2Vsc2UgZS54MD1lLngxPTA7ZWxzZSBlLngwPWUueDE9MDt2YXIgbz1uLmludGVycG9sYXRlKGUucnB4MSx0LnJweDEpLHM9bi5pbnRlcnBvbGF0ZShlLngwLHQueDApLGw9bi5pbnRlcnBvbGF0ZShlLngxLHQueDEpLHU9bi5pbnRlcnBvbGF0ZShlLnRyYW5zZm9ybS5zY2FsZSxpLnNjYWxlKSxoPW4uaW50ZXJwb2xhdGUoZS50cmFuc2Zvcm0ucm90YXRlLGkucm90YXRlKSxmPTA9PT1pLnJDZW50ZXI/MzowPT09ZS50cmFuc2Zvcm0uckNlbnRlcj8xLzM6MSxwPW4uaW50ZXJwb2xhdGUoZS50cmFuc2Zvcm0uckNlbnRlcixpLnJDZW50ZXIpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1vKHQpLHI9cyh0KSxuPWwodCksYT1mdW5jdGlvbih0KXtyZXR1cm4gcChNYXRoLnBvdyh0LGYpKX0odCksYz17cHhtaWQ6VihlLChyK24pLzIpLHRyYW5zZm9ybTp7ckNlbnRlcjphLHg6aS54LHk6aS55fX0sZD17cnB4MTpvKHQpLHRyYW5zbGF0ZVg6cShjKSx0cmFuc2xhdGVZOkgoYyksdHJhbnNmb3JtOntzY2FsZTp1KHQpLHJvdGF0ZTpoKHQpLHJDZW50ZXI6YX19O3JldHVybiBkfX0odCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBfKGUodCkseCl9fSk6eS5hdHRyKFwidHJhbnNmb3JtXCIsXyhyLHgpKX0pfWZ1bmN0aW9uIHgodCxlKXt2YXIgcjtyZXR1cm4gZSYmdC5lYWNoQWZ0ZXIoZnVuY3Rpb24odCl7aWYoayh0KT09PWUpcmV0dXJuIHI9dC5jb3B5KCl9KSxyfHx0fWZ1bmN0aW9uIGIodCl7cmV0dXJuXCJcIj09PXQuZGF0YS5kYXRhLnBpZH1mdW5jdGlvbiBfKHQpe3JldHVybiF0LnBhcmVudH1mdW5jdGlvbiB3KHQpe3JldHVybiF0LmNoaWxkcmVufWZ1bmN0aW9uIGsodCl7cmV0dXJuIHQuZGF0YS5kYXRhLmlkfWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBuPXQuZGF0dW0oKSxpPShyfHx7fSkuaXNUcmFuc2l0aW9uaW5nO2YodCxpfHx3KG4pfHxiKG4pP251bGw6XCJwb2ludGVyXCIpfWZ1bmN0aW9uIFQodCxlLHIpe3ZhciBpPXJbMF0scz1pLnRyYWNlO1wiX2hhc0hvdmVyTGFiZWxcImluIHN8fChzLl9oYXNIb3ZlckxhYmVsPSExKSxcIl9oYXNIb3ZlckV2ZW50XCJpbiBzfHwocy5faGFzSG92ZXJFdmVudD0hMSksdC5vbihcIm1vdXNlb3ZlclwiLGZ1bmN0aW9uKHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQ7aWYoIWUuX2RyYWdnaW5nJiYhMSE9PXIuaG92ZXJtb2RlKXt2YXIgYT1lLl9mdWxsRGF0YVtzLmluZGV4XSxsPXQuZGF0YS5kYXRhLHU9bC5pLGg9ZnVuY3Rpb24odCl7cmV0dXJuIGMuY2FzdE9wdGlvbihhLHUsdCl9LGY9aChcImhvdmVydGVtcGxhdGVcIikscD1vLmNhc3RIb3ZlcmluZm8oYSxyLHUpLGQ9ci5zZXBhcmF0b3JzO2lmKGZ8fHAmJlwibm9uZVwiIT09cCYmXCJza2lwXCIhPT1wKXt2YXIgdj10LnJJbnNjcmliZWQsbT1pLmN4K3QucHhtaWRbMF0qKDEtdikseT1pLmN5K3QucHhtaWRbMV0qKDEtdikseD17fSxiPVtdLF89W10sdz1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PWIuaW5kZXhPZih0KX07cCYmKGI9XCJhbGxcIj09PXA/YS5fbW9kdWxlLmF0dHJpYnV0ZXMuaG92ZXJpbmZvLmZsYWdzOnAuc3BsaXQoXCIrXCIpKSx4LmxhYmVsPWwubGFiZWwsdyhcImxhYmVsXCIpJiZ4LmxhYmVsJiZfLnB1c2goeC5sYWJlbCksbC5oYXNPd25Qcm9wZXJ0eShcInZcIikmJih4LnZhbHVlPWwudix4LnZhbHVlTGFiZWw9Zyh4LnZhbHVlLGQpLHcoXCJ2YWx1ZVwiKSYmXy5wdXNoKHgudmFsdWVMYWJlbCkpLHgudGV4dD1oKFwiaG92ZXJ0ZXh0XCIpfHxoKFwidGV4dFwiKSx3KFwidGV4dFwiKSYmeC50ZXh0JiZfLnB1c2goeC50ZXh0KSxvLmxvbmVIb3Zlcih7dHJhY2U6YSx4MDptLXYqdC5ycHgxLHgxOm0rdip0LnJweDEseTp5LGlkZWFsQWxpZ246dC5weG1pZFswXTwwP1wibGVmdFwiOlwicmlnaHRcIix0ZXh0Ol8uam9pbihcIjxicj5cIiksbmFtZTpmfHx3KFwibmFtZVwiKT9hLm5hbWU6dm9pZCAwLGNvbG9yOmgoXCJob3ZlcmxhYmVsLmJnY29sb3JcIil8fGwuY29sb3IsYm9yZGVyQ29sb3I6aChcImhvdmVybGFiZWwuYm9yZGVyY29sb3JcIiksZm9udEZhbWlseTpoKFwiaG92ZXJsYWJlbC5mb250LmZhbWlseVwiKSxmb250U2l6ZTpoKFwiaG92ZXJsYWJlbC5mb250LnNpemVcIiksZm9udENvbG9yOmgoXCJob3ZlcmxhYmVsLmZvbnQuY29sb3JcIiksbmFtZUxlbmd0aDpoKFwiaG92ZXJsYWJlbC5uYW1lbGVuZ3RoXCIpLHRleHRBbGlnbjpoKFwiaG92ZXJsYWJlbC5hbGlnblwiKSxob3ZlcnRlbXBsYXRlOmYsaG92ZXJ0ZW1wbGF0ZUxhYmVsczp4LGV2ZW50RGF0YTpbTSh0LGEpXX0se2NvbnRhaW5lcjpyLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpyLl9wYXBlci5ub2RlKCksZ2Q6ZX0pLHMuX2hhc0hvdmVyTGFiZWw9ITB9cy5faGFzSG92ZXJFdmVudD0hMCxlLmVtaXQoXCJwbG90bHlfaG92ZXJcIix7cG9pbnRzOltNKHQsYSldLGV2ZW50Om4uZXZlbnR9KX19KSx0Lm9uKFwibW91c2VvdXRcIixmdW5jdGlvbih0KXt2YXIgcj1lLl9mdWxsTGF5b3V0LGk9ZS5fZnVsbERhdGFbcy5pbmRleF0sYT1uLnNlbGVjdCh0aGlzKS5kYXR1bSgpO3MuX2hhc0hvdmVyRXZlbnQmJih0Lm9yaWdpbmFsRXZlbnQ9bi5ldmVudCxlLmVtaXQoXCJwbG90bHlfdW5ob3ZlclwiLHtwb2ludHM6W00oYSxpKV0sZXZlbnQ6bi5ldmVudH0pLHMuX2hhc0hvdmVyRXZlbnQ9ITEpLHMuX2hhc0hvdmVyTGFiZWwmJihvLmxvbmVVbmhvdmVyKHIuX2hvdmVybGF5ZXIubm9kZSgpKSxzLl9oYXNIb3ZlckxhYmVsPSExKX0pLHQub24oXCJjbGlja1wiLGZ1bmN0aW9uKHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQsbD1lLl9mdWxsRGF0YVtzLmluZGV4XTtpZighMT09PXUudHJpZ2dlckhhbmRsZXIoZSxcInBsb3RseV9zdW5idXJzdGNsaWNrXCIse3BvaW50czpbTSh0LGwpXSxldmVudDpuLmV2ZW50fSl8fHcodCl8fGIodCkpci5ob3Zlcm1vZGUmJihlLl9ob3ZlcmRhdGE9W00odCxsKV0sby5jbGljayhlLG4uZXZlbnQpKTtlbHNlIGlmKCFlLl9kcmFnZ2luZyYmIWUuX3RyYW5zaXRpb25pbmcpe2EuY2FsbChcIl9zdG9yZURpcmVjdEdVSUVkaXRcIixsLHIuX3RyYWNlUHJlR1VJW2wudWlkXSx7bGV2ZWw6bC5sZXZlbH0pO3ZhciBjPWkuaGllcmFyY2h5LGg9ayh0KSxmPV8odCk/ZnVuY3Rpb24odCxlKXt2YXIgcjtyZXR1cm4gdC5lYWNoQWZ0ZXIoZnVuY3Rpb24odCl7Zm9yKHZhciBuPXQuY2hpbGRyZW58fFtdLGk9MDtpPG4ubGVuZ3RoO2krKylpZihrKG5baV0pPT09ZSlyZXR1cm4gcj10LmNvcHkoKX0pLHJ8fHR9KGMsaCk6eChjLGgpLHA9e2RhdGE6W3tsZXZlbDprKGYpfV0sdHJhY2VzOltzLmluZGV4XX0sZD17ZnJhbWU6e3JlZHJhdzohMSxkdXJhdGlvbjptLkNMSUNLX1RSQU5TSVRJT05fVElNRX0sdHJhbnNpdGlvbjp7ZHVyYXRpb246bS5DTElDS19UUkFOU0lUSU9OX1RJTUUsZWFzaW5nOm0uQ0xJQ0tfVFJBTlNJVElPTl9FQVNJTkd9LG1vZGU6XCJpbW1lZGlhdGVcIixmcm9tY3VycmVudDohMH07by5sb25lVW5ob3ZlcihyLl9ob3ZlcmxheWVyLm5vZGUoKSksYS5jYWxsKFwiYW5pbWF0ZVwiLGUscCxkKX19KX1mdW5jdGlvbiBNKHQsZSl7dmFyIHI9dC5kYXRhLmRhdGEsbj17Y3VydmVOdW1iZXI6ZS5pbmRleCxwb2ludE51bWJlcjpyLmksZGF0YTplLl9pbnB1dCxmdWxsRGF0YTplfTtyZXR1cm4gcChuLGUsci5pKSxufWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYSxvLHM9dC5fZnVsbExheW91dC5fc3VuYnVyc3RsYXllcixsPSFyLGM9ciYmci5kdXJhdGlvbj4wOygoYT1zLnNlbGVjdEFsbChcImcudHJhY2Uuc3VuYnVyc3RcIikuZGF0YShlLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLnVpZH0pKS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcInRyYWNlXCIsITApLmNsYXNzZWQoXCJzdW5idXJzdFwiLCEwKS5hdHRyKFwic3Ryb2tlLWxpbmVqb2luXCIsXCJyb3VuZFwiKSxhLm9yZGVyKCksYyk/KGkmJihvPWkoKSksbi50cmFuc2l0aW9uKCkuZHVyYXRpb24oci5kdXJhdGlvbikuZWFzZShyLmVhc2luZykuZWFjaChcImVuZFwiLGZ1bmN0aW9uKCl7byYmbygpfSkuZWFjaChcImludGVycnVwdFwiLGZ1bmN0aW9uKCl7byYmbygpfSkuZWFjaChmdW5jdGlvbigpe3Muc2VsZWN0QWxsKFwiZy50cmFjZVwiKS5lYWNoKGZ1bmN0aW9uKGUpe3kodCxlLHRoaXMscil9KX0pKTphLmVhY2goZnVuY3Rpb24oZSl7eSh0LGUsdGhpcyxyKX0pO2wmJmEuZXhpdCgpLnJlbW92ZSgpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnNcIjo2MTMsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvZXZlbnRzXCI6NjkwLFwiLi4vLi4vbGliL3NldGN1cnNvclwiOjcyMSxcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiOjcyNSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vcGllL2hlbHBlcnNcIjoxMDMxLFwiLi4vcGllL3Bsb3RcIjoxMDM1LFwiLi9jb25zdGFudHNcIjoxMTQyLFwiLi9zdHlsZVwiOjExNDgsZDM6MTU1LFwiZDMtaGllcmFyY2h5XCI6MTQ4fV0sMTE0ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGE9dChcIi4uLy4uL2xpYlwiKTtmdW5jdGlvbiBvKHQsZSxyKXt2YXIgbj1lLmRhdGEuZGF0YSxvPSFlLmNoaWxkcmVuLHM9bi5pLGw9YS5jYXN0T3B0aW9uKHIscyxcIm1hcmtlci5saW5lLmNvbG9yXCIpfHxpLmRlZmF1bHRMaW5lLGM9YS5jYXN0T3B0aW9uKHIscyxcIm1hcmtlci5saW5lLndpZHRoXCIpfHwwO3Quc3R5bGUoXCJzdHJva2Utd2lkdGhcIixjKS5jYWxsKGkuZmlsbCxuLmNvbG9yKS5jYWxsKGkuc3Ryb2tlLGwpLnN0eWxlKFwib3BhY2l0eVwiLG8/ci5sZWFmLm9wYWNpdHk6bnVsbCl9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0KXt0Ll9mdWxsTGF5b3V0Ll9zdW5idXJzdGxheWVyLnNlbGVjdEFsbChcIi50cmFjZVwiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9dFswXS50cmFjZTtlLnN0eWxlKFwib3BhY2l0eVwiLHIub3BhY2l0eSksZS5zZWxlY3RBbGwoXCJwYXRoLnN1cmZhY2VcIikuZWFjaChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5jYWxsKG8sdCxyKX0pfSl9LHN0eWxlT25lOm99fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vbGliXCI6NzAxLGQzOjE1NX1dLDExNDk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiKSxsPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsYz10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbDtmdW5jdGlvbiB1KHQpe3JldHVybntzaG93Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LHN0YXJ0Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDpudWxsLGVkaXRUeXBlOlwicGxvdFwifSxlbmQ6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0Om51bGwsZWRpdFR5cGU6XCJwbG90XCJ9LHNpemU6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0Om51bGwsbWluOjAsZWRpdFR5cGU6XCJwbG90XCJ9LHByb2plY3Q6e3g6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0seTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSx6Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9fSxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDpuLmRlZmF1bHRMaW5lfSx1c2Vjb2xvcm1hcDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSx3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjoxLG1heDoxNixkZmx0OjJ9LGhpZ2hsaWdodDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfSxoaWdobGlnaHRjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDpuLmRlZmF1bHRMaW5lfSxoaWdobGlnaHR3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjoxLG1heDoxNixkZmx0OjJ9fX12YXIgaD1lLmV4cG9ydHM9YyhsKHt6Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwifSx4Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwifSx5Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwifSx0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGFycmF5T2s6ITB9LGhvdmVydGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixhcnJheU9rOiEwfSxob3ZlcnRlbXBsYXRlOm8oKSxjb25uZWN0Z2Fwczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwiY2FsY1wifSxzdXJmYWNlY29sb3I6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCJ9fSxpKFwiXCIse2NvbG9yQXR0cjpcInogb3Igc3VyZmFjZWNvbG9yXCIsc2hvd1NjYWxlRGZsdDohMCxhdXRvQ29sb3JEZmx0OiExLGVkaXRUeXBlT3ZlcnJpZGU6XCJjYWxjXCJ9KSx7Y29sb3JiYXI6YSxjb250b3Vyczp7eDp1KCkseTp1KCksejp1KCl9LGhpZGVzdXJmYWNlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LGxpZ2h0cG9zaXRpb246e3g6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46LTFlNSxtYXg6MWU1LGRmbHQ6MTB9LHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46LTFlNSxtYXg6MWU1LGRmbHQ6MWU0fSx6Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOi0xZTUsbWF4OjFlNSxkZmx0OjB9fSxsaWdodGluZzp7YW1iaWVudDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6Ljh9LGRpZmZ1c2U6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0Oi44fSxzcGVjdWxhcjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoyLGRmbHQ6LjA1fSxyb3VnaG5lc3M6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0Oi41fSxmcmVzbmVsOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjUsZGZsdDouMn19LG9wYWNpdHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjF9LF9kZXByZWNhdGVkOnt6YXV0bzpsKHt9LGkuemF1dG8se30pLHptaW46bCh7fSxpLnptaW4se30pLHptYXg6bCh7fSxpLnptYXgse30pfSxob3ZlcmluZm86bCh7fSxzLmhvdmVyaW5mbyl9KSxcImNhbGNcIixcIm5lc3RlZFwiKTtoLnguZWRpdFR5cGU9aC55LmVkaXRUeXBlPWguei5lZGl0VHlwZT1cImNhbGMrY2xlYXJBeGlzVHlwZXNcIixoLnRyYW5zZm9ybXM9dm9pZCAwfSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCI6NTc5LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIjo1ODUsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiOjc0Nn1dLDExNTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZS5zdXJmYWNlY29sb3I/bih0LGUse3ZhbHM6ZS5zdXJmYWNlY29sb3IsY29udGFpbmVyU3RyOlwiXCIsY0xldHRlcjpcImNcIn0pOm4odCxlLHt2YWxzOmUueixjb250YWluZXJTdHI6XCJcIixjTGV0dGVyOlwiY1wifSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsY1wiOjU4Nn1dLDExNTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2wtc3VyZmFjZTNkXCIpLGk9dChcIm5kYXJyYXlcIiksYT10KFwibmRhcnJheS1ob21vZ3JhcGh5XCIpLG89dChcIm5kYXJyYXktZmlsbFwiKSxzPXQoXCIuLi8uLi9saWJcIikuaXNBcnJheU9yVHlwZWRBcnJheSxsPXQoXCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yXCIpLnBhcnNlQ29sb3JTY2FsZSxjPXQoXCIuLi8uLi9saWIvc3RyMnJnYmFycmF5XCIpLHU9dChcIi4uL2hlYXRtYXAvaW50ZXJwMmRcIiksaD10KFwiLi4vaGVhdG1hcC9maW5kX2VtcHRpZXNcIik7ZnVuY3Rpb24gZih0LGUscil7dGhpcy5zY2VuZT10LHRoaXMudWlkPXIsdGhpcy5zdXJmYWNlPWUsdGhpcy5kYXRhPW51bGwsdGhpcy5zaG93Q29udG91cj1bITEsITEsITFdLHRoaXMuY29udG91clN0YXJ0PVtudWxsLG51bGwsbnVsbF0sdGhpcy5jb250b3VyRW5kPVtudWxsLG51bGwsbnVsbF0sdGhpcy5jb250b3VyU2l6ZT1bMCwwLDBdLHRoaXMubWluVmFsdWVzPVsxLzAsMS8wLDEvMF0sdGhpcy5tYXhWYWx1ZXM9Wy0xLzAsLTEvMCwtMS8wXSx0aGlzLmRhdGFTY2FsZVg9MSx0aGlzLmRhdGFTY2FsZVk9MSx0aGlzLnJlZmluZURhdGE9ITAsdGhpcy5vYmplY3RPZmZzZXQ9WzAsMCwwXX12YXIgcD1mLnByb3RvdHlwZTtwLmdldFhhdD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1zKHRoaXMuZGF0YS54KT9zKHRoaXMuZGF0YS54WzBdKT90aGlzLmRhdGEueFtlXVt0XTp0aGlzLmRhdGEueFt0XTp0O3JldHVybiB2b2lkIDA9PT1yP2k6bi5kMmwoaSwwLHIpfSxwLmdldFlhdD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1zKHRoaXMuZGF0YS55KT9zKHRoaXMuZGF0YS55WzBdKT90aGlzLmRhdGEueVtlXVt0XTp0aGlzLmRhdGEueVtlXTplO3JldHVybiB2b2lkIDA9PT1yP2k6bi5kMmwoaSwwLHIpfSxwLmdldFphdD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmRhdGEueltlXVt0XTtyZXR1cm4gbnVsbD09PWkmJnRoaXMuZGF0YS5jb25uZWN0Z2FwcyYmdGhpcy5kYXRhLl9pbnRlcnBvbGF0ZWRaJiYoaT10aGlzLmRhdGEuX2ludGVycG9sYXRlZFpbZV1bdF0pLHZvaWQgMD09PXI/aTpuLmQybChpLDAscil9LHAuaGFuZGxlUGljaz1mdW5jdGlvbih0KXtpZih0Lm9iamVjdD09PXRoaXMuc3VyZmFjZSl7dmFyIGU9KHQuZGF0YS5pbmRleFswXS0xKS90aGlzLmRhdGFTY2FsZVgtMSxyPSh0LmRhdGEuaW5kZXhbMV0tMSkvdGhpcy5kYXRhU2NhbGVZLTEsbj1NYXRoLm1heChNYXRoLm1pbihNYXRoLnJvdW5kKGUpLHRoaXMuZGF0YS56WzBdLmxlbmd0aC0xKSwwKSxpPU1hdGgubWF4KE1hdGgubWluKE1hdGgucm91bmQociksdGhpcy5kYXRhLl95bGVuZ3RoLTEpLDApO3QuaW5kZXg9W24saV0sdC50cmFjZUNvb3JkaW5hdGU9W3RoaXMuZ2V0WGF0KG4saSksdGhpcy5nZXRZYXQobixpKSx0aGlzLmdldFphdChuLGkpXSx0LmRhdGFDb29yZGluYXRlPVt0aGlzLmdldFhhdChuLGksdGhpcy5kYXRhLnhjYWxlbmRhcix0aGlzLnNjZW5lLmZ1bGxTY2VuZUxheW91dC54YXhpcyksdGhpcy5nZXRZYXQobixpLHRoaXMuZGF0YS55Y2FsZW5kYXIsdGhpcy5zY2VuZS5mdWxsU2NlbmVMYXlvdXQueWF4aXMpLHRoaXMuZ2V0WmF0KG4saSx0aGlzLmRhdGEuemNhbGVuZGFyLHRoaXMuc2NlbmUuZnVsbFNjZW5lTGF5b3V0LnpheGlzKV07Zm9yKHZhciBhPTA7YTwzO2ErKyl7dmFyIG89dC5kYXRhQ29vcmRpbmF0ZVthXTtudWxsIT1vJiYodC5kYXRhQ29vcmRpbmF0ZVthXSo9dGhpcy5zY2VuZS5kYXRhU2NhbGVbYV0pfXZhciBzPXRoaXMuZGF0YS5ob3ZlcnRleHR8fHRoaXMuZGF0YS50ZXh0O3JldHVybiBBcnJheS5pc0FycmF5KHMpJiZzW2ldJiZ2b2lkIDAhPT1zW2ldW25dP3QudGV4dExhYmVsPXNbaV1bbl06dC50ZXh0TGFiZWw9c3x8XCJcIix0LmRhdGEuZGF0YUNvb3JkaW5hdGU9dC5kYXRhQ29vcmRpbmF0ZS5zbGljZSgpLHRoaXMuc3VyZmFjZS5oaWdobGlnaHQodC5kYXRhKSx0aGlzLnNjZW5lLmdscGxvdC5zcGlrZXMucG9zaXRpb249dC5kYXRhQ29vcmRpbmF0ZSwhMH19O3ZhciBkPVsyLDMsNSw3LDExLDEzLDE3LDE5LDIzLDI5LDMxLDM3LDQxLDQzLDQ3LDUzLDU5LDYxLDY3LDcxLDczLDc5LDgzLDg5LDk3LDEwMSwxMDMsMTA3LDEwOSwxMTMsMTI3LDEzMSwxMzcsMTM5LDE0OSwxNTEsMTU3LDE2MywxNjcsMTczLDE3OSwxODEsMTkxLDE5MywxOTcsMTk5LDIxMSwyMjMsMjI3LDIyOSwyMzMsMjM5LDI0MSwyNTEsMjU3LDI2MywyNjksMjcxLDI3NywyODEsMjgzLDI5MywzMDcsMzExLDMxMywzMTcsMzMxLDMzNywzNDcsMzQ5LDM1MywzNTksMzY3LDM3MywzNzksMzgzLDM4OSwzOTcsNDAxLDQwOSw0MTksNDIxLDQzMSw0MzMsNDM5LDQ0Myw0NDksNDU3LDQ2MSw0NjMsNDY3LDQ3OSw0ODcsNDkxLDQ5OSw1MDMsNTA5LDUyMSw1MjMsNTQxLDU0Nyw1NTcsNTYzLDU2OSw1NzEsNTc3LDU4Nyw1OTMsNTk5LDYwMSw2MDcsNjEzLDYxNyw2MTksNjMxLDY0MSw2NDMsNjQ3LDY1Myw2NTksNjYxLDY3Myw2NzcsNjgzLDY5MSw3MDEsNzA5LDcxOSw3MjcsNzMzLDczOSw3NDMsNzUxLDc1Nyw3NjEsNzY5LDc3Myw3ODcsNzk3LDgwOSw4MTEsODIxLDgyMyw4MjcsODI5LDgzOSw4NTMsODU3LDg1OSw4NjMsODc3LDg4MSw4ODMsODg3LDkwNyw5MTEsOTE5LDkyOSw5MzcsOTQxLDk0Nyw5NTMsOTY3LDk3MSw5NzcsOTgzLDk5MSw5OTcsMTAwOSwxMDEzLDEwMTksMTAyMSwxMDMxLDEwMzMsMTAzOSwxMDQ5LDEwNTEsMTA2MSwxMDYzLDEwNjksMTA4NywxMDkxLDEwOTMsMTA5NywxMTAzLDExMDksMTExNywxMTIzLDExMjksMTE1MSwxMTUzLDExNjMsMTE3MSwxMTgxLDExODcsMTE5MywxMjAxLDEyMTMsMTIxNywxMjIzLDEyMjksMTIzMSwxMjM3LDEyNDksMTI1OSwxMjc3LDEyNzksMTI4MywxMjg5LDEyOTEsMTI5NywxMzAxLDEzMDMsMTMwNywxMzE5LDEzMjEsMTMyNywxMzYxLDEzNjcsMTM3MywxMzgxLDEzOTksMTQwOSwxNDIzLDE0MjcsMTQyOSwxNDMzLDE0MzksMTQ0NywxNDUxLDE0NTMsMTQ1OSwxNDcxLDE0ODEsMTQ4MywxNDg3LDE0ODksMTQ5MywxNDk5LDE1MTEsMTUyMywxNTMxLDE1NDMsMTU0OSwxNTUzLDE1NTksMTU2NywxNTcxLDE1NzksMTU4MywxNTk3LDE2MDEsMTYwNywxNjA5LDE2MTMsMTYxOSwxNjIxLDE2MjcsMTYzNywxNjU3LDE2NjMsMTY2NywxNjY5LDE2OTMsMTY5NywxNjk5LDE3MDksMTcyMSwxNzIzLDE3MzMsMTc0MSwxNzQ3LDE3NTMsMTc1OSwxNzc3LDE3ODMsMTc4NywxNzg5LDE4MDEsMTgxMSwxODIzLDE4MzEsMTg0NywxODYxLDE4NjcsMTg3MSwxODczLDE4NzcsMTg3OSwxODg5LDE5MDEsMTkwNywxOTEzLDE5MzEsMTkzMywxOTQ5LDE5NTEsMTk3MywxOTc5LDE5ODcsMTk5MywxOTk3LDE5OTksMjAwMywyMDExLDIwMTcsMjAyNywyMDI5LDIwMzksMjA1MywyMDYzLDIwNjksMjA4MSwyMDgzLDIwODcsMjA4OSwyMDk5LDIxMTEsMjExMywyMTI5LDIxMzEsMjEzNywyMTQxLDIxNDMsMjE1MywyMTYxLDIxNzksMjIwMywyMjA3LDIyMTMsMjIyMSwyMjM3LDIyMzksMjI0MywyMjUxLDIyNjcsMjI2OSwyMjczLDIyODEsMjI4NywyMjkzLDIyOTcsMjMwOSwyMzExLDIzMzMsMjMzOSwyMzQxLDIzNDcsMjM1MSwyMzU3LDIzNzEsMjM3NywyMzgxLDIzODMsMjM4OSwyMzkzLDIzOTksMjQxMSwyNDE3LDI0MjMsMjQzNywyNDQxLDI0NDcsMjQ1OSwyNDY3LDI0NzMsMjQ3NywyNTAzLDI1MjEsMjUzMSwyNTM5LDI1NDMsMjU0OSwyNTUxLDI1NTcsMjU3OSwyNTkxLDI1OTMsMjYwOSwyNjE3LDI2MjEsMjYzMywyNjQ3LDI2NTcsMjY1OSwyNjYzLDI2NzEsMjY3NywyNjgzLDI2ODcsMjY4OSwyNjkzLDI2OTksMjcwNywyNzExLDI3MTMsMjcxOSwyNzI5LDI3MzEsMjc0MSwyNzQ5LDI3NTMsMjc2NywyNzc3LDI3ODksMjc5MSwyNzk3LDI4MDEsMjgwMywyODE5LDI4MzMsMjgzNywyODQzLDI4NTEsMjg1NywyODYxLDI4NzksMjg4NywyODk3LDI5MDMsMjkwOSwyOTE3LDI5MjcsMjkzOSwyOTUzLDI5NTcsMjk2MywyOTY5LDI5NzEsMjk5OV07ZnVuY3Rpb24gZyh0LGUpe2lmKHQ8ZSlyZXR1cm4gMDtmb3IodmFyIHI9MDswPT09TWF0aC5mbG9vcih0JWUpOyl0Lz1lLHIrKztyZXR1cm4gcn1mdW5jdGlvbiB2KHQpe2Zvcih2YXIgZT1bXSxyPTA7cjxkLmxlbmd0aDtyKyspe3ZhciBuPWRbcl07ZS5wdXNoKGcodCxuKSl9cmV0dXJuIGV9ZnVuY3Rpb24gbSh0KXtmb3IodmFyIGU9dih0KSxyPXQsbj0wO248ZC5sZW5ndGg7bisrKWlmKGVbbl0+MCl7cj1kW25dO2JyZWFrfXJldHVybiByfWZ1bmN0aW9uIHkodCxlKXtpZighKHQ8MXx8ZTwxKSl7Zm9yKHZhciByPXYodCksbj12KGUpLGk9MSxhPTA7YTxkLmxlbmd0aDthKyspaSo9TWF0aC5wb3coZFthXSxNYXRoLm1heChyW2FdLG5bYV0pKTtyZXR1cm4gaX19cC5jYWxjWG51bXM9ZnVuY3Rpb24odCl7dmFyIGUscj1bXTtmb3IoZT0xO2U8dDtlKyspe3ZhciBuPXRoaXMuZ2V0WGF0KGUtMSwwKSxpPXRoaXMuZ2V0WGF0KGUsMCk7cltlLTFdPWkhPT1uJiZudWxsIT1uJiZudWxsIT1pP01hdGguYWJzKGktbik6MH12YXIgYT0wO2ZvcihlPTE7ZTx0O2UrKylhKz1yW2UtMV07Zm9yKGU9MTtlPHQ7ZSsrKTA9PT1yW2UtMV0/cltlLTFdPTE6cltlLTFdPU1hdGgucm91bmQoYS9yW2UtMV0pO3JldHVybiByfSxwLmNhbGNZbnVtcz1mdW5jdGlvbih0KXt2YXIgZSxyPVtdO2ZvcihlPTE7ZTx0O2UrKyl7dmFyIG49dGhpcy5nZXRZYXQoMCxlLTEpLGk9dGhpcy5nZXRZYXQoMCxlKTtyW2UtMV09aSE9PW4mJm51bGwhPW4mJm51bGwhPWk/TWF0aC5hYnMoaS1uKTowfXZhciBhPTA7Zm9yKGU9MTtlPHQ7ZSsrKWErPXJbZS0xXTtmb3IoZT0xO2U8dDtlKyspMD09PXJbZS0xXT9yW2UtMV09MTpyW2UtMV09TWF0aC5yb3VuZChhL3JbZS0xXSk7cmV0dXJuIHJ9O3ZhciB4PVsxLDIsNCw2LDEyLDI0LDM2LDQ4LDYwLDEyMCwxODAsMjQwLDM2MCw3MjAsODQwLDEyNjBdLGI9eFs5XSxfPXhbMTNdO2Z1bmN0aW9uIHcodCxlKXtmb3IodmFyIHI9ITEsbj0wO248dC5sZW5ndGg7bisrKWlmKGU9PT10W25dKXtyPSEwO2JyZWFrfSExPT09ciYmdC5wdXNoKGUpfXAuZXN0aW1hdGVTY2FsZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xK2Z1bmN0aW9uKHQpe2lmKDAhPT10Lmxlbmd0aCl7Zm9yKHZhciBlPTEscj0wO3I8dC5sZW5ndGg7cisrKWU9eShlLHRbcl0pO3JldHVybiBlfX0oMD09PWU/dGhpcy5jYWxjWG51bXModCk6dGhpcy5jYWxjWW51bXModCkpO3I8Yjspcio9Mjtmb3IoO3I+Xzspci0tLHIvPW0ociksKytyPGImJihyPV8pO3ZhciBuPU1hdGgucm91bmQoci90KTtyZXR1cm4gbj4xP246MX0scC5yZWZpbmVDb29yZHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuZGF0YVNjYWxlWCxyPXRoaXMuZGF0YVNjYWxlWSxuPXRbMF0uc2hhcGVbMF0sbz10WzBdLnNoYXBlWzFdLHM9MHxNYXRoLmZsb29yKHRbMF0uc2hhcGVbMF0qZSsxKSxsPTB8TWF0aC5mbG9vcih0WzBdLnNoYXBlWzFdKnIrMSksYz0xK24rMSx1PTErbysxLGg9aShuZXcgRmxvYXQzMkFycmF5KGMqdSksW2MsdV0pLGY9MDtmPHQubGVuZ3RoOysrZil7dGhpcy5zdXJmYWNlLnBhZEZpZWxkKGgsdFtmXSk7dmFyIHA9aShuZXcgRmxvYXQzMkFycmF5KHMqbCksW3MsbF0pO2EocCxoLFtlLDAsMCwwLHIsMCwwLDAsMV0pLHRbZl09cH19LHAuc2V0Q29udG91ckxldmVscz1mdW5jdGlvbigpe3ZhciB0LGUscixuPVtbXSxbXSxbXV0saT1bITEsITEsITFdLGE9ITE7Zm9yKHQ9MDt0PDM7Kyt0KWlmKHRoaXMuc2hvd0NvbnRvdXJbdF0mJihhPSEwLHRoaXMuY29udG91clNpemVbdF0+MCYmbnVsbCE9PXRoaXMuY29udG91clN0YXJ0W3RdJiZudWxsIT09dGhpcy5jb250b3VyRW5kW3RdJiZ0aGlzLmNvbnRvdXJFbmRbdF0+dGhpcy5jb250b3VyU3RhcnRbdF0pKWZvcihpW3RdPSEwLGU9dGhpcy5jb250b3VyU3RhcnRbdF07ZTx0aGlzLmNvbnRvdXJFbmRbdF07ZSs9dGhpcy5jb250b3VyU2l6ZVt0XSlyPWUqdGhpcy5zY2VuZS5kYXRhU2NhbGVbdF0sdyhuW3RdLHIpO2lmKGEpe3ZhciBvPVtbXSxbXSxbXV07Zm9yKHQ9MDt0PDM7Kyt0KXRoaXMuc2hvd0NvbnRvdXJbdF0mJihvW3RdPWlbdF0/blt0XTp0aGlzLnNjZW5lLmNvbnRvdXJMZXZlbHNbdF0pO3RoaXMuc3VyZmFjZS51cGRhdGUoe2xldmVsczpvfSl9fSxwLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyLG4sYSxzPXRoaXMuc2NlbmUsZj1zLmZ1bGxTY2VuZUxheW91dCxwPXRoaXMuc3VyZmFjZSxkPXQub3BhY2l0eSxnPWwodCxkKSx2PXMuZGF0YVNjYWxlLG09dC56WzBdLmxlbmd0aCx5PXQuX3lsZW5ndGgseD1zLmNvbnRvdXJMZXZlbHM7dGhpcy5kYXRhPXQ7dmFyIGI9W107Zm9yKGU9MDtlPDM7ZSsrKWZvcihiW2VdPVtdLHI9MDtyPG07cisrKWJbZV1bcl09W107Zm9yKHI9MDtyPG07cisrKWZvcihuPTA7bjx5O24rKyliWzBdW3JdW25dPXRoaXMuZ2V0WGF0KHIsbix0LnhjYWxlbmRhcixmLnhheGlzKSxiWzFdW3JdW25dPXRoaXMuZ2V0WWF0KHIsbix0LnljYWxlbmRhcixmLnlheGlzKSxiWzJdW3JdW25dPXRoaXMuZ2V0WmF0KHIsbix0LnpjYWxlbmRhcixmLnpheGlzKTtpZih0LmNvbm5lY3RnYXBzKWZvcih0Ll9lbXB0eXBvaW50cz1oKGJbMl0pLHUoYlsyXSx0Ll9lbXB0eXBvaW50cyksdC5faW50ZXJwb2xhdGVkWj1bXSxyPTA7cjxtO3IrKylmb3IodC5faW50ZXJwb2xhdGVkWltyXT1bXSxuPTA7bjx5O24rKyl0Ll9pbnRlcnBvbGF0ZWRaW3JdW25dPWJbMl1bcl1bbl07Zm9yKGU9MDtlPDM7ZSsrKWZvcihyPTA7cjxtO3IrKylmb3Iobj0wO248eTtuKyspbnVsbD09KGE9YltlXVtyXVtuXSk/YltlXVtyXVtuXT1OYU46YT1iW2VdW3JdW25dKj12W2VdO2ZvcihlPTA7ZTwzO2UrKylmb3Iocj0wO3I8bTtyKyspZm9yKG49MDtuPHk7bisrKW51bGwhPShhPWJbZV1bcl1bbl0pJiYodGhpcy5taW5WYWx1ZXNbZV0+YSYmKHRoaXMubWluVmFsdWVzW2VdPWEpLHRoaXMubWF4VmFsdWVzW2VdPGEmJih0aGlzLm1heFZhbHVlc1tlXT1hKSk7Zm9yKGU9MDtlPDM7ZSsrKXRoaXMub2JqZWN0T2Zmc2V0W2VdPS41Kih0aGlzLm1pblZhbHVlc1tlXSt0aGlzLm1heFZhbHVlc1tlXSk7Zm9yKGU9MDtlPDM7ZSsrKWZvcihyPTA7cjxtO3IrKylmb3Iobj0wO248eTtuKyspbnVsbCE9KGE9YltlXVtyXVtuXSkmJihiW2VdW3JdW25dLT10aGlzLm9iamVjdE9mZnNldFtlXSk7dmFyIHc9W2kobmV3IEZsb2F0MzJBcnJheShtKnkpLFttLHldKSxpKG5ldyBGbG9hdDMyQXJyYXkobSp5KSxbbSx5XSksaShuZXcgRmxvYXQzMkFycmF5KG0qeSksW20seV0pXTtvKHdbMF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gYlswXVt0XVtlXX0pLG8od1sxXSxmdW5jdGlvbih0LGUpe3JldHVybiBiWzFdW3RdW2VdfSksbyh3WzJdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGJbMl1bdF1bZV19KSxiPVtdO3ZhciBrPXtjb2xvcm1hcDpnLGxldmVsczpbW10sW10sW11dLHNob3dDb250b3VyOlshMCwhMCwhMF0sc2hvd1N1cmZhY2U6IXQuaGlkZXN1cmZhY2UsY29udG91clByb2plY3Q6W1shMSwhMSwhMV0sWyExLCExLCExXSxbITEsITEsITFdXSxjb250b3VyV2lkdGg6WzEsMSwxXSxjb250b3VyQ29sb3I6W1sxLDEsMSwxXSxbMSwxLDEsMV0sWzEsMSwxLDFdXSxjb250b3VyVGludDpbMSwxLDFdLGR5bmFtaWNDb2xvcjpbWzEsMSwxLDFdLFsxLDEsMSwxXSxbMSwxLDEsMV1dLGR5bmFtaWNXaWR0aDpbMSwxLDFdLGR5bmFtaWNUaW50OlsxLDEsMV0sb3BhY2l0eTp0Lm9wYWNpdHl9O2lmKGsuaW50ZW5zaXR5Qm91bmRzPVt0LmNtaW4sdC5jbWF4XSx0LnN1cmZhY2Vjb2xvcil7dmFyIEE9aShuZXcgRmxvYXQzMkFycmF5KG0qeSksW20seV0pO28oQSxmdW5jdGlvbihlLHIpe3JldHVybiB0LnN1cmZhY2Vjb2xvcltyXVtlXX0pLHcucHVzaChBKX1lbHNlIGsuaW50ZW5zaXR5Qm91bmRzWzBdKj12WzJdLGsuaW50ZW5zaXR5Qm91bmRzWzFdKj12WzJdOyhfPHdbMF0uc2hhcGVbMF18fF88d1swXS5zaGFwZVsxXSkmJih0aGlzLnJlZmluZURhdGE9ITEpLCEwPT09dGhpcy5yZWZpbmVEYXRhJiYodGhpcy5kYXRhU2NhbGVYPXRoaXMuZXN0aW1hdGVTY2FsZSh3WzBdLnNoYXBlWzBdLDApLHRoaXMuZGF0YVNjYWxlWT10aGlzLmVzdGltYXRlU2NhbGUod1swXS5zaGFwZVsxXSwxKSwxPT09dGhpcy5kYXRhU2NhbGVYJiYxPT09dGhpcy5kYXRhU2NhbGVZfHx0aGlzLnJlZmluZUNvb3Jkcyh3KSksdC5zdXJmYWNlY29sb3ImJihrLmludGVuc2l0eT13LnBvcCgpKTt2YXIgVD1bITAsITAsITBdLE09W1wieFwiLFwieVwiLFwielwiXTtmb3IoZT0wO2U8MzsrK2Upe3ZhciBTPXQuY29udG91cnNbTVtlXV07VFtlXT1TLmhpZ2hsaWdodCxrLnNob3dDb250b3VyW2VdPVMuc2hvd3x8Uy5oaWdobGlnaHQsay5zaG93Q29udG91cltlXSYmKGsuY29udG91clByb2plY3RbZV09W1MucHJvamVjdC54LFMucHJvamVjdC55LFMucHJvamVjdC56XSxTLnNob3c/KHRoaXMuc2hvd0NvbnRvdXJbZV09ITAsay5sZXZlbHNbZV09eFtlXSxwLmhpZ2hsaWdodENvbG9yW2VdPWsuY29udG91ckNvbG9yW2VdPWMoUy5jb2xvciksUy51c2Vjb2xvcm1hcD9wLmhpZ2hsaWdodFRpbnRbZV09ay5jb250b3VyVGludFtlXT0wOnAuaGlnaGxpZ2h0VGludFtlXT1rLmNvbnRvdXJUaW50W2VdPTEsay5jb250b3VyV2lkdGhbZV09Uy53aWR0aCx0aGlzLmNvbnRvdXJTdGFydFtlXT1TLnN0YXJ0LHRoaXMuY29udG91ckVuZFtlXT1TLmVuZCx0aGlzLmNvbnRvdXJTaXplW2VdPVMuc2l6ZSk6KHRoaXMuc2hvd0NvbnRvdXJbZV09ITEsdGhpcy5jb250b3VyU3RhcnRbZV09bnVsbCx0aGlzLmNvbnRvdXJFbmRbZV09bnVsbCx0aGlzLmNvbnRvdXJTaXplW2VdPTApLFMuaGlnaGxpZ2h0JiYoay5keW5hbWljQ29sb3JbZV09YyhTLmhpZ2hsaWdodGNvbG9yKSxrLmR5bmFtaWNXaWR0aFtlXT1TLmhpZ2hsaWdodHdpZHRoKSl9KGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0ucmdiLHI9dFt0Lmxlbmd0aC0xXS5yZ2I7cmV0dXJuIGVbMF09PT1yWzBdJiZlWzFdPT09clsxXSYmZVsyXT09PXJbMl0mJmVbM109PT1yWzNdfSkoZykmJihrLnZlcnRleENvbG9yPSEwKSxrLm9iamVjdE9mZnNldD10aGlzLm9iamVjdE9mZnNldCxrLmNvb3Jkcz13LHAudXBkYXRlKGspLHAudmlzaWJsZT10LnZpc2libGUscC5lbmFibGVEeW5hbWljPVQscC5lbmFibGVIaWdobGlnaHQ9VCxwLnNuYXBUb0RhdGE9ITAsXCJsaWdodGluZ1wiaW4gdCYmKHAuYW1iaWVudExpZ2h0PXQubGlnaHRpbmcuYW1iaWVudCxwLmRpZmZ1c2VMaWdodD10LmxpZ2h0aW5nLmRpZmZ1c2UscC5zcGVjdWxhckxpZ2h0PXQubGlnaHRpbmcuc3BlY3VsYXIscC5yb3VnaG5lc3M9dC5saWdodGluZy5yb3VnaG5lc3MscC5mcmVzbmVsPXQubGlnaHRpbmcuZnJlc25lbCksXCJsaWdodHBvc2l0aW9uXCJpbiB0JiYocC5saWdodFBvc2l0aW9uPVt0LmxpZ2h0cG9zaXRpb24ueCx0LmxpZ2h0cG9zaXRpb24ueSx0LmxpZ2h0cG9zaXRpb24uel0pLGQmJmQ8MSYmKHAuc3VwcG9ydHNUcmFuc3BhcmVuY3k9ITApfSxwLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5zdXJmYWNlKSx0aGlzLnN1cmZhY2UuZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxpPW4oe2dsOnJ9KSxhPW5ldyBmKHQsaSxlLnVpZCk7cmV0dXJuIGkuX3RyYWNlPWEsYS51cGRhdGUoZSksdC5nbHBsb3QuYWRkKGkpLGF9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yXCI6Njk4LFwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiOjcyNCxcIi4uL2hlYXRtYXAvZmluZF9lbXB0aWVzXCI6OTU0LFwiLi4vaGVhdG1hcC9pbnRlcnAyZFwiOjk1NyxcImdsLXN1cmZhY2UzZFwiOjMxMyxuZGFycmF5OjQ0MyxcIm5kYXJyYXktZmlsbFwiOjQzMyxcIm5kYXJyYXktaG9tb2dyYXBoeVwiOjQzNX1dLDExNTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiKSxvPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZnVuY3Rpb24gcyh0LGUscil7ZSBpbiB0JiYhKHIgaW4gdCkmJih0W3JdPXRbZV0pfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXt2YXIgYyx1O2Z1bmN0aW9uIGgocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLG8scixuKX12YXIgZj1oKFwieFwiKSxwPWgoXCJ5XCIpLGQ9aChcInpcIik7aWYoIWR8fCFkLmxlbmd0aHx8ZiYmZi5sZW5ndGg8MXx8cCYmcC5sZW5ndGg8MSllLnZpc2libGU9ITE7ZWxzZXtlLl94bGVuZ3RoPUFycmF5LmlzQXJyYXkoZikmJmkuaXNBcnJheU9yVHlwZWRBcnJheShmWzBdKT9kLmxlbmd0aDpkWzBdLmxlbmd0aCxlLl95bGVuZ3RoPWQubGVuZ3RoLG4uZ2V0Q29tcG9uZW50TWV0aG9kKFwiY2FsZW5kYXJzXCIsXCJoYW5kbGVUcmFjZURlZmF1bHRzXCIpKHQsZSxbXCJ4XCIsXCJ5XCIsXCJ6XCJdLGwpLGgoXCJ0ZXh0XCIpLGgoXCJob3ZlcnRleHRcIiksaChcImhvdmVydGVtcGxhdGVcIiksW1wibGlnaHRpbmcuYW1iaWVudFwiLFwibGlnaHRpbmcuZGlmZnVzZVwiLFwibGlnaHRpbmcuc3BlY3VsYXJcIixcImxpZ2h0aW5nLnJvdWdobmVzc1wiLFwibGlnaHRpbmcuZnJlc25lbFwiLFwibGlnaHRwb3NpdGlvbi54XCIsXCJsaWdodHBvc2l0aW9uLnlcIixcImxpZ2h0cG9zaXRpb24uelwiLFwiaGlkZXN1cmZhY2VcIixcImNvbm5lY3RnYXBzXCIsXCJvcGFjaXR5XCJdLmZvckVhY2goZnVuY3Rpb24odCl7aCh0KX0pO3ZhciBnPWgoXCJzdXJmYWNlY29sb3JcIiksdj1bXCJ4XCIsXCJ5XCIsXCJ6XCJdO2ZvcihjPTA7YzwzOysrYyl7dmFyIG09XCJjb250b3Vycy5cIit2W2NdLHk9aChtK1wiLnNob3dcIikseD1oKG0rXCIuaGlnaGxpZ2h0XCIpO2lmKHl8fHgpZm9yKHU9MDt1PDM7Kyt1KWgobStcIi5wcm9qZWN0LlwiK3ZbdV0pO3kmJihoKG0rXCIuY29sb3JcIiksaChtK1wiLndpZHRoXCIpLGgobStcIi51c2Vjb2xvcm1hcFwiKSkseCYmKGgobStcIi5oaWdobGlnaHRjb2xvclwiKSxoKG0rXCIuaGlnaGxpZ2h0d2lkdGhcIikpLGgobStcIi5zdGFydFwiKSxoKG0rXCIuZW5kXCIpLGgobStcIi5zaXplXCIpfWd8fChzKHQsXCJ6bWluXCIsXCJjbWluXCIpLHModCxcInptYXhcIixcImNtYXhcIikscyh0LFwiemF1dG9cIixcImNhdXRvXCIpKSxhKHQsZSxsLGgse3ByZWZpeDpcIlwiLGNMZXR0ZXI6XCJjXCJ9KSxlLl9sZW5ndGg9bnVsbH19fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIjo1ODgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vYXR0cmlidXRlc1wiOjExNDl9XSwxMTUzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNvbG9yYmFyPXttaW46XCJjbWluXCIsbWF4OlwiY21heFwifSxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLnBsb3Q9dChcIi4vY29udmVydFwiKSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cInN1cmZhY2VcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9nbDNkXCIpLG4uY2F0ZWdvcmllcz1bXCJnbDNkXCIsXCIyZE1hcFwiLFwibm9PcGFjaXR5XCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvZ2wzZFwiOjc4OSxcIi4vYXR0cmlidXRlc1wiOjExNDksXCIuL2NhbGNcIjoxMTUwLFwiLi9jb252ZXJ0XCI6MTE1MSxcIi4vZGVmYXVsdHNcIjoxMTUyfV0sMTE1NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2Fubm90YXRpb25zL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LGE9dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGwsbz10KFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL3Bsb3RzL2RvbWFpblwiKS5hdHRyaWJ1dGVzOyhlLmV4cG9ydHM9YSh7ZG9tYWluOnMoe25hbWU6XCJ0YWJsZVwiLHRyYWNlOiEwfSksY29sdW1ud2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixhcnJheU9rOiEwLGRmbHQ6bnVsbH0sY29sdW1ub3JkZXI6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCJ9LGhlYWRlcjp7dmFsdWVzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGRmbHQ6W119LGZvcm1hdDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixkZmx0OltdfSxwcmVmaXg6e3ZhbFR5cGU6XCJzdHJpbmdcIixhcnJheU9rOiEwLGRmbHQ6bnVsbH0sc3VmZml4Ont2YWxUeXBlOlwic3RyaW5nXCIsYXJyYXlPazohMCxkZmx0Om51bGx9LGhlaWdodDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6Mjh9LGFsaWduOmkoe30sbi5hbGlnbix7YXJyYXlPazohMH0pLGxpbmU6e3dpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsYXJyYXlPazohMCxkZmx0OjF9LGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixhcnJheU9rOiEwLGRmbHQ6XCJncmV5XCJ9fSxmaWxsOntjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsYXJyYXlPazohMCxkZmx0Olwid2hpdGVcIn19LGZvbnQ6aSh7fSxvKHthcnJheU9rOiEwfSkpfSxjZWxsczp7dmFsdWVzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGRmbHQ6W119LGZvcm1hdDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixkZmx0OltdfSxwcmVmaXg6e3ZhbFR5cGU6XCJzdHJpbmdcIixhcnJheU9rOiEwLGRmbHQ6bnVsbH0sc3VmZml4Ont2YWxUeXBlOlwic3RyaW5nXCIsYXJyYXlPazohMCxkZmx0Om51bGx9LGhlaWdodDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MjB9LGFsaWduOmkoe30sbi5hbGlnbix7YXJyYXlPazohMH0pLGxpbmU6e3dpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsYXJyYXlPazohMCxkZmx0OjF9LGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixhcnJheU9rOiEwLGRmbHQ6XCJncmV5XCJ9fSxmaWxsOntjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsYXJyYXlPazohMCxkZmx0Olwid2hpdGVcIn19LGZvbnQ6aSh7fSxvKHthcnJheU9rOiEwfSkpfX0sXCJjYWxjXCIsXCJmcm9tLXJvb3RcIikpLnRyYW5zZm9ybXM9dm9pZCAwfSx7XCIuLi8uLi9jb21wb25lbnRzL2Fubm90YXRpb25zL2F0dHJpYnV0ZXNcIjo1NjEsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uLy4uL3Bsb3RzL2RvbWFpblwiOjc3NCxcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiOjc3NX1dLDExNTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvZ2V0X2RhdGFcIikuZ2V0TW9kdWxlQ2FsY0RhdGEsaT10KFwiLi9wbG90XCIpO3IubmFtZT1cInRhYmxlXCIsci5wbG90PWZ1bmN0aW9uKHQpe3ZhciBlPW4odC5jYWxjZGF0YSxcInRhYmxlXCIpWzBdO2UubGVuZ3RoJiZpKHQsZSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5faGFzJiZuLl9oYXMoXCJ0YWJsZVwiKSxhPWUuX2hhcyYmZS5faGFzKFwidGFibGVcIik7aSYmIWEmJm4uX3BhcGVyZGl2LnNlbGVjdEFsbChcIi50YWJsZVwiKS5yZW1vdmUoKX19LHtcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCI6Nzg0LFwiLi9wbG90XCI6MTE2Mn1dLDExNTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliL2d1cFwiKS53cmFwO2UuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBuKHt9KX19LHtcIi4uLy4uL2xpYi9ndXBcIjo2OTl9XSwxMTU3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtjZWxsUGFkOjgsY29sdW1uRXh0ZW50T2Zmc2V0OjEwLGNvbHVtblRpdGxlT2Zmc2V0OjI4LGVtcHR5SGVhZGVySGVpZ2h0OjE2LGxhdGV4Q2hlY2s6L15cXCQuKlxcJCQvLGdvbGRlblJhdGlvOjEuNjE4LGxpbmVCcmVha2VyOlwiPGJyPlwiLG1heERpbWVuc2lvbkNvdW50OjYwLG92ZXJkcmFnOjQ1LHJlbGVhc2VUcmFuc2l0aW9uRHVyYXRpb246MTIwLHJlbGVhc2VUcmFuc2l0aW9uRWFzZTpcImN1YmljLW91dFwiLHNjcm9sbGJhckNhcHR1cmVXaWR0aDoxOCxzY3JvbGxiYXJIaWRlRGVsYXk6MWUzLHNjcm9sbGJhckhpZGVEdXJhdGlvbjoxZTMsc2Nyb2xsYmFyT2Zmc2V0OjUsc2Nyb2xsYmFyV2lkdGg6OCx0cmFuc2l0aW9uRHVyYXRpb246MTAwLHRyYW5zaXRpb25FYXNlOlwiY3ViaWMtb3V0XCIsdXBsaWZ0OjUsd3JhcFNwYWNlcjpcIiBcIix3cmFwU3BsaXRDaGFyYWN0ZXI6XCIgXCIsY246e3RhYmxlOlwidGFibGVcIix0YWJsZUNvbnRyb2xWaWV3OlwidGFibGUtY29udHJvbC12aWV3XCIsc2Nyb2xsQmFja2dyb3VuZDpcInNjcm9sbC1iYWNrZ3JvdW5kXCIseUNvbHVtbjpcInktY29sdW1uXCIsY29sdW1uQmxvY2s6XCJjb2x1bW4tYmxvY2tcIixzY3JvbGxBcmVhQ2xpcDpcInNjcm9sbC1hcmVhLWNsaXBcIixzY3JvbGxBcmVhQ2xpcFJlY3Q6XCJzY3JvbGwtYXJlYS1jbGlwLXJlY3RcIixjb2x1bW5Cb3VuZGFyeTpcImNvbHVtbi1ib3VuZGFyeVwiLGNvbHVtbkJvdW5kYXJ5Q2xpcHBhdGg6XCJjb2x1bW4tYm91bmRhcnktY2xpcHBhdGhcIixjb2x1bW5Cb3VuZGFyeVJlY3Q6XCJjb2x1bW4tYm91bmRhcnktcmVjdFwiLGNvbHVtbkNlbGxzOlwiY29sdW1uLWNlbGxzXCIsY29sdW1uQ2VsbDpcImNvbHVtbi1jZWxsXCIsY2VsbFJlY3Q6XCJjZWxsLXJlY3RcIixjZWxsVGV4dDpcImNlbGwtdGV4dFwiLGNlbGxUZXh0SG9sZGVyOlwiY2VsbC10ZXh0LWhvbGRlclwiLHNjcm9sbGJhcktpdDpcInNjcm9sbGJhci1raXRcIixzY3JvbGxiYXI6XCJzY3JvbGxiYXJcIixzY3JvbGxiYXJTbGlkZXI6XCJzY3JvbGxiYXItc2xpZGVyXCIsc2Nyb2xsYmFyR2x5cGg6XCJzY3JvbGxiYXItZ2x5cGhcIixzY3JvbGxiYXJDYXB0dXJlWm9uZTpcInNjcm9sbGJhci1jYXB0dXJlLXpvbmVcIn19fSx7fV0sMTE1ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2NvbnN0YW50c1wiKSxpPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsYT10KFwiZmFzdC1pc251bWVyaWNcIik7ZnVuY3Rpb24gbyh0KXtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspZT1NYXRoLm1heChlLG8odFtyXSkpO3JldHVybiBlfXJldHVybiB0fWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gdCtlfWZ1bmN0aW9uIGwodCl7dmFyIGUscj10LnNsaWNlKCksbj0xLzAsaT0wO2ZvcihlPTA7ZTxyLmxlbmd0aDtlKyspQXJyYXkuaXNBcnJheShyW2VdKXx8KHJbZV09W3JbZV1dKSxuPU1hdGgubWluKG4scltlXS5sZW5ndGgpLGk9TWF0aC5tYXgoaSxyW2VdLmxlbmd0aCk7aWYobiE9PWkpZm9yKGU9MDtlPHIubGVuZ3RoO2UrKyl7dmFyIGE9aS1yW2VdLmxlbmd0aDthJiYocltlXT1yW2VdLmNvbmNhdChjKGEpKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gYyh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09XCJcIjtyZXR1cm4gZX1mdW5jdGlvbiB1KHQpe3JldHVybiB0LmNhbGNkYXRhLmNvbHVtbnMucmVkdWNlKGZ1bmN0aW9uKGUscil7cmV0dXJuIHIueEluZGV4PHQueEluZGV4P2Urci5jb2x1bW5XaWR0aDplfSwwKX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gaSh7fSx0W3JdLHthdXhpbGlhcnlCbG9ja3M6ZX0pfSl9ZnVuY3Rpb24gZih0LGUpe2Zvcih2YXIgcixuPXt9LGk9MCxhPTAsbz17Zmlyc3RSb3dJbmRleDpudWxsLGxhc3RSb3dJbmRleDpudWxsLHJvd3M6W119LHM9MCxsPTAsYz0wO2M8dC5sZW5ndGg7YysrKXI9dFtjXSxvLnJvd3MucHVzaCh7cm93SW5kZXg6Yyxyb3dIZWlnaHQ6cn0pLCgoYSs9cik+PWV8fGM9PT10Lmxlbmd0aC0xKSYmKG5baV09byxvLmtleT1sKyssby5maXJzdFJvd0luZGV4PXMsby5sYXN0Um93SW5kZXg9YyxvPXtmaXJzdFJvd0luZGV4Om51bGwsbGFzdFJvd0luZGV4Om51bGwscm93czpbXX0saSs9YSxzPWMrMSxhPTApO3JldHVybiBufWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWwoZS5jZWxscy52YWx1ZXMpLHA9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoZS5oZWFkZXIudmFsdWVzLmxlbmd0aCx0Lmxlbmd0aCl9LGQ9bChlLmhlYWRlci52YWx1ZXMpO2QubGVuZ3RoJiYhZFswXS5sZW5ndGgmJihkWzBdPVtcIlwiXSxkPWwoZCkpO3ZhciBnPWQuY29uY2F0KHAocikubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGMoKGRbMF18fFtcIlwiXSkubGVuZ3RoKX0pKSx2PWUuZG9tYWluLG09TWF0aC5mbG9vcih0Ll9mdWxsTGF5b3V0Ll9zaXplLncqKHYueFsxXS12LnhbMF0pKSx5PU1hdGguZmxvb3IodC5fZnVsbExheW91dC5fc2l6ZS5oKih2LnlbMV0tdi55WzBdKSkseD1lLmhlYWRlci52YWx1ZXMubGVuZ3RoP2dbMF0ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGUuaGVhZGVyLmhlaWdodH0pOltuLmVtcHR5SGVhZGVySGVpZ2h0XSxiPXIubGVuZ3RoP3JbMF0ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGUuY2VsbHMuaGVpZ2h0fSk6W10sXz14LnJlZHVjZShzLDApLHc9ZihiLHktXytuLnVwbGlmdCksaz1oKGYoeCxfKSxbXSksQT1oKHcsayksVD17fSxNPWUuX2Z1bGxJbnB1dC5jb2x1bW5vcmRlci5jb25jYXQocChyLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBlfSkpKSxTPWcubWFwKGZ1bmN0aW9uKHQscil7dmFyIG49QXJyYXkuaXNBcnJheShlLmNvbHVtbndpZHRoKT9lLmNvbHVtbndpZHRoW01hdGgubWluKHIsZS5jb2x1bW53aWR0aC5sZW5ndGgtMSldOmUuY29sdW1ud2lkdGg7cmV0dXJuIGEobik/TnVtYmVyKG4pOjF9KSxFPVMucmVkdWNlKHMsMCk7Uz1TLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC9FKm19KTt2YXIgQz1NYXRoLm1heChvKGUuaGVhZGVyLmxpbmUud2lkdGgpLG8oZS5jZWxscy5saW5lLndpZHRoKSksTD17a2V5OmUudWlkK3QuX2NvbnRleHQuc3RhdGljUGxvdCx0cmFuc2xhdGVYOnYueFswXSp0Ll9mdWxsTGF5b3V0Ll9zaXplLncsdHJhbnNsYXRlWTp0Ll9mdWxsTGF5b3V0Ll9zaXplLmgqKDEtdi55WzFdKSxzaXplOnQuX2Z1bGxMYXlvdXQuX3NpemUsd2lkdGg6bSxtYXhMaW5lV2lkdGg6QyxoZWlnaHQ6eSxjb2x1bW5PcmRlcjpNLGdyb3VwSGVpZ2h0Onkscm93QmxvY2tzOkEsaGVhZGVyUm93QmxvY2tzOmssc2Nyb2xsWTowLGNlbGxzOmkoe30sZS5jZWxscyx7dmFsdWVzOnJ9KSxoZWFkZXJDZWxsczppKHt9LGUuaGVhZGVyLHt2YWx1ZXM6Z30pLGdkQ29sdW1uczpnLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pLGdkQ29sdW1uc09yaWdpbmFsT3JkZXI6Zy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSxwcmV2UGFnZXM6WzAsMF0sc2Nyb2xsYmFyU3RhdGU6e3Njcm9sbGJhclNjcm9sbEluUHJvZ3Jlc3M6ITF9LGNvbHVtbnM6Zy5tYXAoZnVuY3Rpb24odCxlKXt2YXIgcj1UW3RdO3JldHVybiBUW3RdPShyfHwwKSsxLHtrZXk6dCtcIl9fXCIrVFt0XSxsYWJlbDp0LHNwZWNJbmRleDplLHhJbmRleDpNW2VdLHhTY2FsZTp1LHg6dm9pZCAwLGNhbGNkYXRhOnZvaWQgMCxjb2x1bW5XaWR0aDpTW2VdfX0pfTtyZXR1cm4gTC5jb2x1bW5zLmZvckVhY2goZnVuY3Rpb24odCl7dC5jYWxjZGF0YT1MLHQueD11KHQpfSksTH19LHtcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuL2NvbnN0YW50c1wiOjExNTcsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDExNTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0O3Iuc3BsaXRUb1BhbmVscz1mdW5jdGlvbih0KXt2YXIgZT1bMCwwXSxyPW4oe30sdCx7a2V5OlwiaGVhZGVyXCIsdHlwZTpcImhlYWRlclwiLHBhZ2U6MCxwcmV2UGFnZXM6ZSxjdXJyZW50UmVwYWludDpbbnVsbCxudWxsXSxkcmFnSGFuZGxlOiEwLHZhbHVlczp0LmNhbGNkYXRhLmhlYWRlckNlbGxzLnZhbHVlc1t0LnNwZWNJbmRleF0scm93QmxvY2tzOnQuY2FsY2RhdGEuaGVhZGVyUm93QmxvY2tzLGNhbGNkYXRhOm4oe30sdC5jYWxjZGF0YSx7Y2VsbHM6dC5jYWxjZGF0YS5oZWFkZXJDZWxsc30pfSk7cmV0dXJuW24oe30sdCx7a2V5OlwiY2VsbHMxXCIsdHlwZTpcImNlbGxzXCIscGFnZTowLHByZXZQYWdlczplLGN1cnJlbnRSZXBhaW50OltudWxsLG51bGxdLGRyYWdIYW5kbGU6ITEsdmFsdWVzOnQuY2FsY2RhdGEuY2VsbHMudmFsdWVzW3Quc3BlY0luZGV4XSxyb3dCbG9ja3M6dC5jYWxjZGF0YS5yb3dCbG9ja3N9KSxuKHt9LHQse2tleTpcImNlbGxzMlwiLHR5cGU6XCJjZWxsc1wiLHBhZ2U6MSxwcmV2UGFnZXM6ZSxjdXJyZW50UmVwYWludDpbbnVsbCxudWxsXSxkcmFnSGFuZGxlOiExLHZhbHVlczp0LmNhbGNkYXRhLmNlbGxzLnZhbHVlc1t0LnNwZWNJbmRleF0scm93QmxvY2tzOnQuY2FsY2RhdGEucm93QmxvY2tzfSkscl19LHIuc3BsaXRUb0NlbGxzPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlPXQucm93QmxvY2tzW3QucGFnZV0scj1lP2Uucm93c1swXS5yb3dJbmRleDowLG49ZT9yK2Uucm93cy5sZW5ndGg6MDtyZXR1cm5bcixuXX0odCk7cmV0dXJuKHQudmFsdWVzfHxbXSkuc2xpY2UoZVswXSxlWzFdKS5tYXAoZnVuY3Rpb24ocixuKXtyZXR1cm57a2V5V2l0aGluQmxvY2s6bisoXCJzdHJpbmdcIj09dHlwZW9mIHImJnIubWF0Y2goL1s8JCY+IF0vKT9cIl9rZXlidXN0ZXJfXCIrTWF0aC5yYW5kb20oKTpcIlwiKSxrZXk6ZVswXStuLGNvbHVtbjp0LGNhbGNkYXRhOnQuY2FsY2RhdGEscGFnZTp0LnBhZ2Uscm93QmxvY2tzOnQucm93QmxvY2tzLHZhbHVlOnJ9fSl9fSx7XCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxfV0sMTE2MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2RvbWFpblwiKS5kZWZhdWx0cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7ZnVuY3Rpb24gcyhyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfWEoZSxvLHMpLHMoXCJjb2x1bW53aWR0aFwiKSxzKFwiaGVhZGVyLnZhbHVlc1wiKSxzKFwiaGVhZGVyLmZvcm1hdFwiKSxzKFwiaGVhZGVyLmFsaWduXCIpLHMoXCJoZWFkZXIucHJlZml4XCIpLHMoXCJoZWFkZXIuc3VmZml4XCIpLHMoXCJoZWFkZXIuaGVpZ2h0XCIpLHMoXCJoZWFkZXIubGluZS53aWR0aFwiKSxzKFwiaGVhZGVyLmxpbmUuY29sb3JcIikscyhcImhlYWRlci5maWxsLmNvbG9yXCIpLG4uY29lcmNlRm9udChzLFwiaGVhZGVyLmZvbnRcIixuLmV4dGVuZEZsYXQoe30sby5mb250KSksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jb2x1bW5vcmRlcnx8W10sbj10LmhlYWRlci52YWx1ZXMubGVuZ3RoLGk9ci5zbGljZSgwLG4pLGE9aS5zbGljZSgpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSksbz1pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gYS5pbmRleE9mKHQpfSkscz1vLmxlbmd0aDtzPG47cysrKW8ucHVzaChzKTtlKFwiY29sdW1ub3JkZXJcIixvKX0oZSxzKSxzKFwiY2VsbHMudmFsdWVzXCIpLHMoXCJjZWxscy5mb3JtYXRcIikscyhcImNlbGxzLmFsaWduXCIpLHMoXCJjZWxscy5wcmVmaXhcIikscyhcImNlbGxzLnN1ZmZpeFwiKSxzKFwiY2VsbHMuaGVpZ2h0XCIpLHMoXCJjZWxscy5saW5lLndpZHRoXCIpLHMoXCJjZWxscy5saW5lLmNvbG9yXCIpLHMoXCJjZWxscy5maWxsLmNvbG9yXCIpLG4uY29lcmNlRm9udChzLFwiY2VsbHMuZm9udFwiLG4uZXh0ZW5kRmxhdCh7fSxvLmZvbnQpKSxlLl9sZW5ndGg9bnVsbH19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2RvbWFpblwiOjc3NCxcIi4vYXR0cmlidXRlc1wiOjExNTR9XSwxMTYxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLnBsb3Q9dChcIi4vcGxvdFwiKSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cInRhYmxlXCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi9iYXNlX3Bsb3RcIiksbi5jYXRlZ29yaWVzPVtcIm5vT3BhY2l0eVwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4vYXR0cmlidXRlc1wiOjExNTQsXCIuL2Jhc2VfcGxvdFwiOjExNTUsXCIuL2NhbGNcIjoxMTU2LFwiLi9kZWZhdWx0c1wiOjExNjAsXCIuL3Bsb3RcIjoxMTYyfV0sMTE2MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2NvbnN0YW50c1wiKSxpPXQoXCJkM1wiKSxhPXQoXCIuLi8uLi9saWIvZ3VwXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxzPXQoXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIiksbD10KFwiLi4vLi4vbGliXCIpLnJhaXNlVG9Ub3AsYz10KFwiLi4vLi4vbGliXCIpLmNhbmNlbFRyYW5zaXRpb24sdT10KFwiLi9kYXRhX3ByZXBhcmF0aW9uX2hlbHBlclwiKSxoPXQoXCIuL2RhdGFfc3BsaXRfaGVscGVyc1wiKSxmPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpO2Z1bmN0aW9uIHAodCl7cmV0dXJuIE1hdGguY2VpbCh0LmNhbGNkYXRhLm1heExpbmVXaWR0aC8yKX1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuXCJjbGlwXCIrdC5fZnVsbExheW91dC5fdWlkK1wiX3Njcm9sbEFyZWFCb3R0b21DbGlwX1wiK2Uua2V5fWZ1bmN0aW9uIGcodCxlKXtyZXR1cm5cImNsaXBcIit0Ll9mdWxsTGF5b3V0Ll91aWQrXCJfY29sdW1uQm91bmRhcnlDbGlwcGF0aF9cIitlLmNhbGNkYXRhLmtleStcIl9cIitlLnNwZWNJbmRleH1mdW5jdGlvbiB2KHQpe3JldHVybltdLmNvbmNhdC5hcHBseShbXSx0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuX19kYXRhX199KX1mdW5jdGlvbiBtKHQsZSxyKXt2YXIgbz10LnNlbGVjdEFsbChcIi5cIituLmNuLnNjcm9sbGJhcktpdCkuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7by5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChuLmNuLnNjcm9sbGJhcktpdCwhMCkuc3R5bGUoXCJzaGFwZS1yZW5kZXJpbmdcIixcImdlb21ldHJpY1ByZWNpc2lvblwiKSxvLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5zY3JvbGxiYXJTdGF0ZTtlLnRvdGFsSGVpZ2h0PWZ1bmN0aW9uKHQpe3ZhciBlPXQucm93QmxvY2tzO3JldHVybiBJKGUsZS5sZW5ndGgtMSkrKGUubGVuZ3RoP0QoZVtlLmxlbmd0aC0xXSwxLzApOjEpfSh0KSxlLnNjcm9sbGFibGVBcmVhSGVpZ2h0PXQuZ3JvdXBIZWlnaHQtVCh0KSxlLmN1cnJlbnRseVZpc2libGVIZWlnaHQ9TWF0aC5taW4oZS50b3RhbEhlaWdodCxlLnNjcm9sbGFibGVBcmVhSGVpZ2h0KSxlLnJhdGlvPWUuY3VycmVudGx5VmlzaWJsZUhlaWdodC9lLnRvdGFsSGVpZ2h0LGUuYmFyTGVuZ3RoPU1hdGgubWF4KGUucmF0aW8qZS5jdXJyZW50bHlWaXNpYmxlSGVpZ2h0LG4uZ29sZGVuUmF0aW8qbi5zY3JvbGxiYXJXaWR0aCksZS5iYXJXaWdnbGVSb29tPWUuY3VycmVudGx5VmlzaWJsZUhlaWdodC1lLmJhckxlbmd0aCxlLndpZ2dsZVJvb209TWF0aC5tYXgoMCxlLnRvdGFsSGVpZ2h0LWUuc2Nyb2xsYWJsZUFyZWFIZWlnaHQpLGUudG9wWT0wPT09ZS5iYXJXaWdnbGVSb29tPzA6dC5zY3JvbGxZL2Uud2lnZ2xlUm9vbSplLmJhcldpZ2dsZVJvb20sZS5ib3R0b21ZPWUudG9wWStlLmJhckxlbmd0aCxlLmRyYWdNdWx0aXBsaWVyPWUud2lnZ2xlUm9vbS9lLmJhcldpZ2dsZVJvb219KS5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrKHQud2lkdGgrbi5zY3JvbGxiYXJXaWR0aC8yK24uc2Nyb2xsYmFyT2Zmc2V0KStcIiBcIitUKHQpK1wiKVwifSk7dmFyIHM9by5zZWxlY3RBbGwoXCIuXCIrbi5jbi5zY3JvbGxiYXIpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO3MuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQobi5jbi5zY3JvbGxiYXIsITApO3ZhciBsPXMuc2VsZWN0QWxsKFwiLlwiK24uY24uc2Nyb2xsYmFyU2xpZGVyKS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKTtsLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKG4uY24uc2Nyb2xsYmFyU2xpZGVyLCEwKSxsLmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXtyZXR1cm5cInRyYW5zbGF0ZSgwIFwiKyh0LnNjcm9sbGJhclN0YXRlLnRvcFl8fDApK1wiKVwifSk7dmFyIGM9bC5zZWxlY3RBbGwoXCIuXCIrbi5jbi5zY3JvbGxiYXJHbHlwaCkuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7Yy5lbnRlcigpLmFwcGVuZChcImxpbmVcIikuY2xhc3NlZChuLmNuLnNjcm9sbGJhckdseXBoLCEwKS5hdHRyKFwic3Ryb2tlXCIsXCJibGFja1wiKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsbi5zY3JvbGxiYXJXaWR0aCkuYXR0cihcInN0cm9rZS1saW5lY2FwXCIsXCJyb3VuZFwiKS5hdHRyKFwieTFcIixuLnNjcm9sbGJhcldpZHRoLzIpLGMuYXR0cihcInkyXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuc2Nyb2xsYmFyU3RhdGUuYmFyTGVuZ3RoLW4uc2Nyb2xsYmFyV2lkdGgvMn0pLmF0dHIoXCJzdHJva2Utb3BhY2l0eVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbkRyYWdJblByb2dyZXNzfHwhdC5zY3JvbGxiYXJTdGF0ZS5iYXJXaWdnbGVSb29tfHxyPzA6LjR9KSxjLnRyYW5zaXRpb24oKS5kZWxheSgwKS5kdXJhdGlvbigwKSxjLnRyYW5zaXRpb24oKS5kZWxheShuLnNjcm9sbGJhckhpZGVEZWxheSkuZHVyYXRpb24obi5zY3JvbGxiYXJIaWRlRHVyYXRpb24pLmF0dHIoXCJzdHJva2Utb3BhY2l0eVwiLDApO3ZhciB1PXMuc2VsZWN0QWxsKFwiLlwiK24uY24uc2Nyb2xsYmFyQ2FwdHVyZVpvbmUpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO3UuZW50ZXIoKS5hcHBlbmQoXCJsaW5lXCIpLmNsYXNzZWQobi5jbi5zY3JvbGxiYXJDYXB0dXJlWm9uZSwhMCkuYXR0cihcInN0cm9rZVwiLFwid2hpdGVcIikuYXR0cihcInN0cm9rZS1vcGFjaXR5XCIsLjAxKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsbi5zY3JvbGxiYXJDYXB0dXJlV2lkdGgpLmF0dHIoXCJzdHJva2UtbGluZWNhcFwiLFwiYnV0dFwiKS5hdHRyKFwieTFcIiwwKS5vbihcIm1vdXNlZG93blwiLGZ1bmN0aW9uKHIpe3ZhciBuPWkuZXZlbnQueSxhPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1yLnNjcm9sbGJhclN0YXRlLHM9bi1hLnRvcCxsPWkuc2NhbGUubGluZWFyKCkuZG9tYWluKFswLG8uc2Nyb2xsYWJsZUFyZWFIZWlnaHRdKS5yYW5nZShbMCxvLnRvdGFsSGVpZ2h0XSkuY2xhbXAoITApO28udG9wWTw9cyYmczw9by5ib3R0b21ZfHxTKGUsdCxudWxsLGwocy1vLmJhckxlbmd0aC8yKSkocil9KS5jYWxsKGkuYmVoYXZpb3IuZHJhZygpLm9yaWdpbihmdW5jdGlvbih0KXtyZXR1cm4gaS5ldmVudC5zdG9wUHJvcGFnYXRpb24oKSx0LnNjcm9sbGJhclN0YXRlLnNjcm9sbGJhclNjcm9sbEluUHJvZ3Jlc3M9ITAsdH0pLm9uKFwiZHJhZ1wiLFMoZSx0KSkub24oXCJkcmFnZW5kXCIsZnVuY3Rpb24oKXt9KSksdS5hdHRyKFwieTJcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5zY3JvbGxiYXJTdGF0ZS5zY3JvbGxhYmxlQXJlYUhlaWdodH0pLGUuX2NvbnRleHQuc3RhdGljUGxvdCYmKGMucmVtb3ZlKCksdS5yZW1vdmUoKSl9ZnVuY3Rpb24geSh0LGUscixzKXt2YXIgbD1mdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbChcIi5cIituLmNuLmNvbHVtbkNlbGwpLmRhdGEoaC5zcGxpdFRvQ2VsbHMsZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5V2l0aGluQmxvY2t9KTtyZXR1cm4gZS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChuLmNuLmNvbHVtbkNlbGwsITApLGUuZXhpdCgpLnJlbW92ZSgpLGV9KGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0QWxsKFwiLlwiK24uY24uY29sdW1uQ2VsbHMpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKG4uY24uY29sdW1uQ2VsbHMsITApLGUuZXhpdCgpLnJlbW92ZSgpLGV9KHIpKTshZnVuY3Rpb24odCl7dC5lYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5jYWxjZGF0YS5jZWxscy5mb250LG49dC5jb2x1bW4uc3BlY0luZGV4LGk9e3NpemU6XyhyLnNpemUsbixlKSxjb2xvcjpfKHIuY29sb3IsbixlKSxmYW1pbHk6XyhyLmZhbWlseSxuLGUpfTt0LnJvd051bWJlcj10LmtleSx0LmFsaWduPV8odC5jYWxjZGF0YS5jZWxscy5hbGlnbixuLGUpLHQuY2VsbEJvcmRlcldpZHRoPV8odC5jYWxjZGF0YS5jZWxscy5saW5lLndpZHRoLG4sZSksdC5mb250PWl9KX0obCksZnVuY3Rpb24odCl7dC5hdHRyKFwid2lkdGhcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW4uY29sdW1uV2lkdGh9KS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuY2VsbEJvcmRlcldpZHRofSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1pLnNlbGVjdCh0aGlzKTtmLnN0cm9rZShlLF8odC5jYWxjZGF0YS5jZWxscy5saW5lLmNvbG9yLHQuY29sdW1uLnNwZWNJbmRleCx0LnJvd051bWJlcikpLGYuZmlsbChlLF8odC5jYWxjZGF0YS5jZWxscy5maWxsLmNvbG9yLHQuY29sdW1uLnNwZWNJbmRleCx0LnJvd051bWJlcikpfSl9KGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0QWxsKFwiLlwiK24uY24uY2VsbFJlY3QpLmRhdGEoYS5yZXBlYXQsZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5V2l0aGluQmxvY2t9KTtyZXR1cm4gZS5lbnRlcigpLmFwcGVuZChcInJlY3RcIikuY2xhc3NlZChuLmNuLmNlbGxSZWN0LCEwKSxlfShsKSk7dmFyIGM9ZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoXCIuXCIrbi5jbi5jZWxsVGV4dCkuZGF0YShhLnJlcGVhdCxmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXlXaXRoaW5CbG9ja30pO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKFwidGV4dFwiKS5jbGFzc2VkKG4uY24uY2VsbFRleHQsITApLnN0eWxlKFwiY3Vyc29yXCIsZnVuY3Rpb24oKXtyZXR1cm5cImF1dG9cIn0pLm9uKFwibW91c2Vkb3duXCIsZnVuY3Rpb24oKXtpLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSksZX0oZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoXCIuXCIrbi5jbi5jZWxsVGV4dEhvbGRlcikuZGF0YShhLnJlcGVhdCxmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXlXaXRoaW5CbG9ja30pO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKG4uY24uY2VsbFRleHRIb2xkZXIsITApLnN0eWxlKFwic2hhcGUtcmVuZGVyaW5nXCIsXCJnZW9tZXRyaWNQcmVjaXNpb25cIiksZX0obCkpOyFmdW5jdGlvbih0KXt0LmVhY2goZnVuY3Rpb24odCl7by5mb250KGkuc2VsZWN0KHRoaXMpLHQuZm9udCl9KX0oYykseChjLGUscyx0KSxPKGwpfWZ1bmN0aW9uIHgodCxlLHIsYSl7dC50ZXh0KGZ1bmN0aW9uKHQpe3ZhciBlPXQuY29sdW1uLnNwZWNJbmRleCxyPXQucm93TnVtYmVyLGE9dC52YWx1ZSxvPVwic3RyaW5nXCI9PXR5cGVvZiBhLHM9byYmYS5tYXRjaCgvPGJyPi9pKSxsPSFvfHxzO3QubWF5SGF2ZU1hcmt1cD1vJiZhLm1hdGNoKC9bPCY+XS8pO3ZhciBjLHU9XCJzdHJpbmdcIj09dHlwZW9mKGM9YSkmJmMubWF0Y2gobi5sYXRleENoZWNrKTt0LmxhdGV4PXU7dmFyIGgsZixwPXU/XCJcIjpfKHQuY2FsY2RhdGEuY2VsbHMucHJlZml4LGUscil8fFwiXCIsZD11P1wiXCI6Xyh0LmNhbGNkYXRhLmNlbGxzLnN1ZmZpeCxlLHIpfHxcIlwiLGc9dT9udWxsOl8odC5jYWxjZGF0YS5jZWxscy5mb3JtYXQsZSxyKXx8bnVsbCx2PXArKGc/aS5mb3JtYXQoZykodC52YWx1ZSk6dC52YWx1ZSkrZDtpZih0LndyYXBwaW5nTmVlZGVkPSF0LndyYXBwZWQmJiFsJiYhdSYmKGg9Yih2KSksdC5jZWxsSGVpZ2h0TWF5SW5jcmVhc2U9c3x8dXx8dC5tYXlIYXZlTWFya3VwfHwodm9pZCAwPT09aD9iKHYpOmgpLHQubmVlZHNDb252ZXJ0VG9Uc3BhbnM9dC5tYXlIYXZlTWFya3VwfHx0LndyYXBwaW5nTmVlZGVkfHx0LmxhdGV4LHQud3JhcHBpbmdOZWVkZWQpe3ZhciBtPShcIiBcIj09PW4ud3JhcFNwbGl0Q2hhcmFjdGVyP3YucmVwbGFjZSgvPGEgaHJlZj0vZ2ksXCI8YV9ocmVmPVwiKTp2KS5zcGxpdChuLndyYXBTcGxpdENoYXJhY3RlcikseT1cIiBcIj09PW4ud3JhcFNwbGl0Q2hhcmFjdGVyP20ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoLzxhX2hyZWY9L2dpLFwiPGEgaHJlZj1cIil9KTptO3QuZnJhZ21lbnRzPXkubWFwKGZ1bmN0aW9uKHQpe3JldHVybnt0ZXh0OnQsd2lkdGg6bnVsbH19KSx0LmZyYWdtZW50cy5wdXNoKHtmcmFnbWVudDpuLndyYXBTcGFjZXIsd2lkdGg6bnVsbH0pLGY9eS5qb2luKG4ubGluZUJyZWFrZXIpK24ubGluZUJyZWFrZXIrbi53cmFwU3BhY2VyfWVsc2UgZGVsZXRlIHQuZnJhZ21lbnRzLGY9djtyZXR1cm4gZn0pLmF0dHIoXCJkeVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5lZWRzQ29udmVydFRvVHNwYW5zPzA6XCIwLjc1ZW1cIn0pLmVhY2goZnVuY3Rpb24odCl7dmFyIG89aS5zZWxlY3QodGhpcyksbD10LndyYXBwaW5nTmVlZGVkP0M6TDt0Lm5lZWRzQ29udmVydFRvVHNwYW5zP3MuY29udmVydFRvVHNwYW5zKG8sYSxsKHIsdGhpcyxlLGEsdCkpOmkuc2VsZWN0KHRoaXMucGFyZW50Tm9kZSkuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKFwiK3oodCkrXCIgXCIrbi5jZWxsUGFkK1wiKVwifSkuYXR0cihcInRleHQtYW5jaG9yXCIsZnVuY3Rpb24odCl7cmV0dXJue2xlZnQ6XCJzdGFydFwiLGNlbnRlcjpcIm1pZGRsZVwiLHJpZ2h0OlwiZW5kXCJ9W3QuYWxpZ25dfSl9KX1mdW5jdGlvbiBiKHQpe3JldHVybi0xIT09dC5pbmRleE9mKG4ud3JhcFNwbGl0Q2hhcmFjdGVyKX1mdW5jdGlvbiBfKHQsZSxyKXtpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgbj10W01hdGgubWluKGUsdC5sZW5ndGgtMSldO3JldHVybiBBcnJheS5pc0FycmF5KG4pP25bTWF0aC5taW4ocixuLmxlbmd0aC0xKV06bn1yZXR1cm4gdH1mdW5jdGlvbiB3KHQsZSxyKXt0LnRyYW5zaXRpb24oKS5lYXNlKG4ucmVsZWFzZVRyYW5zaXRpb25FYXNlKS5kdXJhdGlvbihuLnJlbGVhc2VUcmFuc2l0aW9uRHVyYXRpb24pLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIitlLngrXCIgXCIrcitcIilcIil9ZnVuY3Rpb24gayh0KXtyZXR1cm5cImNlbGxzXCI9PT10LnR5cGV9ZnVuY3Rpb24gQSh0KXtyZXR1cm5cImhlYWRlclwiPT09dC50eXBlfWZ1bmN0aW9uIFQodCl7cmV0dXJuKHQucm93QmxvY2tzLmxlbmd0aD90LnJvd0Jsb2Nrc1swXS5hdXhpbGlhcnlCbG9ja3M6W10pLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0K0QoZSwxLzApfSwwKX1mdW5jdGlvbiBNKHQsZSxyKXt2YXIgbj12KGUpWzBdO2lmKHZvaWQgMCE9PW4pe3ZhciBpPW4ucm93QmxvY2tzLGE9bi5jYWxjZGF0YSxvPUkoaSxpLmxlbmd0aCkscz1uLmNhbGNkYXRhLmdyb3VwSGVpZ2h0LVQobiksbD1hLnNjcm9sbFk9TWF0aC5tYXgoMCxNYXRoLm1pbihvLXMsYS5zY3JvbGxZKSksYz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPVtdLGk9MCxhPTA7YTx0Lmxlbmd0aDthKyspe2Zvcih2YXIgbz10W2FdLHM9by5yb3dzLGw9MCxjPTA7YzxzLmxlbmd0aDtjKyspbCs9c1tjXS5yb3dIZWlnaHQ7by5hbGxSb3dzSGVpZ2h0PWwsZTxpK2wmJmUrcj5pJiZuLnB1c2goYSksaSs9bH1yZXR1cm4gbn0oaSxsLHMpOzE9PT1jLmxlbmd0aCYmKGNbMF09PT1pLmxlbmd0aC0xP2MudW5zaGlmdChjWzBdLTEpOmMucHVzaChjWzBdKzEpKSxjWzBdJTImJmMucmV2ZXJzZSgpLGUuZWFjaChmdW5jdGlvbih0LGUpe3QucGFnZT1jW2VdLHQuc2Nyb2xsWT1sfSksZS5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoMCBcIisoSSh0LnJvd0Jsb2Nrcyx0LnBhZ2UpLXQuc2Nyb2xsWSkrXCIpXCJ9KSx0JiYoRSh0LHIsZSxjLG4ucHJldlBhZ2VzLG4sMCksRSh0LHIsZSxjLG4ucHJldlBhZ2VzLG4sMSksbShyLHQpKX19ZnVuY3Rpb24gUyh0LGUscixhKXtyZXR1cm4gZnVuY3Rpb24obyl7dmFyIHM9by5jYWxjZGF0YT9vLmNhbGNkYXRhOm8sbD1lLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gcy5rZXk9PT10LmtleX0pLGM9cnx8cy5zY3JvbGxiYXJTdGF0ZS5kcmFnTXVsdGlwbGllcix1PXMuc2Nyb2xsWTtzLnNjcm9sbFk9dm9pZCAwPT09YT9zLnNjcm9sbFkrYyppLmV2ZW50LmR5OmE7dmFyIGg9bC5zZWxlY3RBbGwoXCIuXCIrbi5jbi55Q29sdW1uKS5zZWxlY3RBbGwoXCIuXCIrbi5jbi5jb2x1bW5CbG9jaykuZmlsdGVyKGspO3JldHVybiBNKHQsaCxsKSxzLnNjcm9sbFk9PT11fX1mdW5jdGlvbiBFKHQsZSxyLG4saSxhLG8pe25bb10hPT1pW29dJiYoY2xlYXJUaW1lb3V0KGEuY3VycmVudFJlcGFpbnRbb10pLGEuY3VycmVudFJlcGFpbnRbb109c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBhPXIuZmlsdGVyKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9PT1vJiZuW2VdIT09aVtlXX0pO3kodCxlLGEsciksaVtvXT1uW29dfSkpfWZ1bmN0aW9uIEModCxlLHIsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89aS5zZWxlY3QoZS5wYXJlbnROb2RlKTtvLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5mcmFnbWVudHM7by5zZWxlY3RBbGwoXCJ0c3Bhbi5saW5lXCIpLmVhY2goZnVuY3Rpb24odCxyKXtlW3JdLndpZHRoPXRoaXMuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCl9KTt2YXIgcixpLGE9ZVtlLmxlbmd0aC0xXS53aWR0aCxzPWUuc2xpY2UoMCwtMSksbD1bXSxjPTAsdT10LmNvbHVtbi5jb2x1bW5XaWR0aC0yKm4uY2VsbFBhZDtmb3IodC52YWx1ZT1cIlwiO3MubGVuZ3RoOyljKyhpPShyPXMuc2hpZnQoKSkud2lkdGgrYSk+dSYmKHQudmFsdWUrPWwuam9pbihuLndyYXBTcGFjZXIpK24ubGluZUJyZWFrZXIsbD1bXSxjPTApLGwucHVzaChyLnRleHQpLGMrPWk7YyYmKHQudmFsdWUrPWwuam9pbihuLndyYXBTcGFjZXIpKSx0LndyYXBwZWQ9ITB9KSxvLnNlbGVjdEFsbChcInRzcGFuLmxpbmVcIikucmVtb3ZlKCkseChvLnNlbGVjdChcIi5cIituLmNuLmNlbGxUZXh0KSxyLHQsYSksaS5zZWxlY3QoZS5wYXJlbnROb2RlLnBhcmVudE5vZGUpLmNhbGwoTyl9fWZ1bmN0aW9uIEwodCxlLHIsYSxvKXtyZXR1cm4gZnVuY3Rpb24oKXtpZighby5zZXR0bGVkWSl7dmFyIHM9aS5zZWxlY3QoZS5wYXJlbnROb2RlKSxsPVIobyksYz1vLmtleS1sLmZpcnN0Um93SW5kZXgsdT1sLnJvd3NbY10ucm93SGVpZ2h0LGg9by5jZWxsSGVpZ2h0TWF5SW5jcmVhc2U/ZS5wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCsyKm4uY2VsbFBhZDp1LGY9TWF0aC5tYXgoaCx1KTtmLWwucm93c1tjXS5yb3dIZWlnaHQmJihsLnJvd3NbY10ucm93SGVpZ2h0PWYsdC5zZWxlY3RBbGwoXCIuXCIrbi5jbi5jb2x1bW5DZWxsKS5jYWxsKE8pLE0obnVsbCx0LmZpbHRlcihrKSwwKSxtKHIsYSwhMCkpLHMuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGU9aS5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5zZWxlY3QoXCIuXCIrbi5jbi5jZWxsUmVjdCkubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9dGhpcy50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpLGE9ZS50b3AtdC50b3ArKHI/ci5tYXRyaXguZjpuLmNlbGxQYWQpO3JldHVyblwidHJhbnNsYXRlKFwiK3oobyxpLnNlbGVjdCh0aGlzLnBhcmVudE5vZGUpLnNlbGVjdChcIi5cIituLmNuLmNlbGxUZXh0SG9sZGVyKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpK1wiIFwiK2ErXCIpXCJ9KSxvLnNldHRsZWRZPSEwfX19ZnVuY3Rpb24geih0LGUpe3N3aXRjaCh0LmFsaWduKXtjYXNlXCJsZWZ0XCI6cmV0dXJuIG4uY2VsbFBhZDtjYXNlXCJyaWdodFwiOnJldHVybiB0LmNvbHVtbi5jb2x1bW5XaWR0aC0oZXx8MCktbi5jZWxsUGFkO2Nhc2VcImNlbnRlclwiOnJldHVybih0LmNvbHVtbi5jb2x1bW5XaWR0aC0oZXx8MCkpLzI7ZGVmYXVsdDpyZXR1cm4gbi5jZWxsUGFkfX1mdW5jdGlvbiBPKHQpe3QuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3ZhciBlPXQucm93QmxvY2tzWzBdLmF1eGlsaWFyeUJsb2Nrcy5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtEKGUsMS8wKX0sMCk7cmV0dXJuXCJ0cmFuc2xhdGUoMCBcIisoRChSKHQpLHQua2V5KStlKStcIilcIn0pLnNlbGVjdEFsbChcIi5cIituLmNuLmNlbGxSZWN0KS5hdHRyKFwiaGVpZ2h0XCIsZnVuY3Rpb24odCl7cmV0dXJuKGU9Uih0KSxyPXQua2V5LGUucm93c1tyLWUuZmlyc3RSb3dJbmRleF0pLnJvd0hlaWdodDt2YXIgZSxyfSl9ZnVuY3Rpb24gSSh0LGUpe2Zvcih2YXIgcj0wLG49ZS0xO24+PTA7bi0tKXIrPVAodFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gRCh0LGUpe2Zvcih2YXIgcj0wLG49MDtuPHQucm93cy5sZW5ndGgmJnQucm93c1tuXS5yb3dJbmRleDxlO24rKylyKz10LnJvd3Nbbl0ucm93SGVpZ2h0O3JldHVybiByfWZ1bmN0aW9uIFAodCl7dmFyIGU9dC5hbGxSb3dzSGVpZ2h0O2lmKHZvaWQgMCE9PWUpcmV0dXJuIGU7Zm9yKHZhciByPTAsbj0wO248dC5yb3dzLmxlbmd0aDtuKyspcis9dC5yb3dzW25dLnJvd0hlaWdodDtyZXR1cm4gdC5hbGxSb3dzSGVpZ2h0PXIscn1mdW5jdGlvbiBSKHQpe3JldHVybiB0LnJvd0Jsb2Nrc1t0LnBhZ2VdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPSF0Ll9jb250ZXh0LnN0YXRpY1Bsb3Qscz10Ll9mdWxsTGF5b3V0Ll9wYXBlci5zZWxlY3RBbGwoXCIuXCIrbi5jbi50YWJsZSkuZGF0YShlLm1hcChmdW5jdGlvbihlKXt2YXIgcj1hLnVud3JhcChlKS50cmFjZTtyZXR1cm4gdSh0LHIpfSksYS5rZXlGdW4pO3MuZXhpdCgpLnJlbW92ZSgpLHMuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQobi5jbi50YWJsZSwhMCkuYXR0cihcIm92ZXJmbG93XCIsXCJ2aXNpYmxlXCIpLnN0eWxlKFwiYm94LXNpemluZ1wiLFwiY29udGVudC1ib3hcIikuc3R5bGUoXCJwb3NpdGlvblwiLFwiYWJzb2x1dGVcIikuc3R5bGUoXCJsZWZ0XCIsMCkuc3R5bGUoXCJvdmVyZmxvd1wiLFwidmlzaWJsZVwiKS5zdHlsZShcInNoYXBlLXJlbmRlcmluZ1wiLFwiY3Jpc3BFZGdlc1wiKS5zdHlsZShcInBvaW50ZXItZXZlbnRzXCIsXCJhbGxcIikscy5hdHRyKFwid2lkdGhcIixmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aCt0LnNpemUubCt0LnNpemUucn0pLmF0dHIoXCJoZWlnaHRcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHQrdC5zaXplLnQrdC5zaXplLmJ9KS5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrdC50cmFuc2xhdGVYK1wiLFwiK3QudHJhbnNsYXRlWStcIilcIn0pO3ZhciBmPXMuc2VsZWN0QWxsKFwiLlwiK24uY24udGFibGVDb250cm9sVmlldykuZGF0YShhLnJlcGVhdCxhLmtleUZ1bikseD1mLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKG4uY24udGFibGVDb250cm9sVmlldywhMCkuc3R5bGUoXCJib3gtc2l6aW5nXCIsXCJjb250ZW50LWJveFwiKTtyJiZ4Lm9uKFwibW91c2Vtb3ZlXCIsZnVuY3Rpb24oZSl7Zi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGU9PT10fSkuY2FsbChtLHQpfSkub24oXCJtb3VzZXdoZWVsXCIsZnVuY3Rpb24oZSl7aWYoIWUuc2Nyb2xsYmFyU3RhdGUud2hlZWxpbmcpe2Uuc2Nyb2xsYmFyU3RhdGUud2hlZWxpbmc9ITA7dmFyIHI9ZS5zY3JvbGxZK2kuZXZlbnQuZGVsdGFZO1ModCxmLG51bGwscikoZSl8fChpLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLGkuZXZlbnQucHJldmVudERlZmF1bHQoKSksZS5zY3JvbGxiYXJTdGF0ZS53aGVlbGluZz0hMX19KS5jYWxsKG0sdCwhMCksZi5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrdC5zaXplLmwrXCIgXCIrdC5zaXplLnQrXCIpXCJ9KTt2YXIgYj1mLnNlbGVjdEFsbChcIi5cIituLmNuLnNjcm9sbEJhY2tncm91bmQpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO2IuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpLmNsYXNzZWQobi5jbi5zY3JvbGxCYWNrZ3JvdW5kLCEwKS5hdHRyKFwiZmlsbFwiLFwibm9uZVwiKSxiLmF0dHIoXCJ3aWR0aFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRofSkuYXR0cihcImhlaWdodFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodH0pLGYuZWFjaChmdW5jdGlvbihlKXtvLnNldENsaXBVcmwoaS5zZWxlY3QodGhpcyksZCh0LGUpLHQpfSk7dmFyIF89Zi5zZWxlY3RBbGwoXCIuXCIrbi5jbi55Q29sdW1uKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbnN9LGEua2V5RnVuKTtfLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKG4uY24ueUNvbHVtbiwhMCksXy5leGl0KCkucmVtb3ZlKCksXy5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrdC54K1wiIDApXCJ9KSxyJiZfLmNhbGwoaS5iZWhhdmlvci5kcmFnKCkub3JpZ2luKGZ1bmN0aW9uKGUpe3JldHVybiB3KGkuc2VsZWN0KHRoaXMpLGUsLW4udXBsaWZ0KSxsKHRoaXMpLGUuY2FsY2RhdGEuY29sdW1uRHJhZ0luUHJvZ3Jlc3M9ITAsbShmLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gZS5jYWxjZGF0YS5rZXk9PT10LmtleX0pLHQpLGV9KS5vbihcImRyYWdcIixmdW5jdGlvbih0KXt2YXIgZT1pLnNlbGVjdCh0aGlzKSxyPWZ1bmN0aW9uKGUpe3JldHVybih0PT09ZT9pLmV2ZW50Lng6ZS54KStlLmNvbHVtbldpZHRoLzJ9O3QueD1NYXRoLm1heCgtbi5vdmVyZHJhZyxNYXRoLm1pbih0LmNhbGNkYXRhLndpZHRoK24ub3ZlcmRyYWctdC5jb2x1bW5XaWR0aCxpLmV2ZW50LngpKSx2KF8pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5jYWxjZGF0YS5rZXk9PT10LmNhbGNkYXRhLmtleX0pLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gcih0KS1yKGUpfSkuZm9yRWFjaChmdW5jdGlvbihlLHIpe2UueEluZGV4PXIsZS54PXQ9PT1lP2UueDplLnhTY2FsZShlKX0pLF8uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0IT09ZX0pLnRyYW5zaXRpb24oKS5lYXNlKG4udHJhbnNpdGlvbkVhc2UpLmR1cmF0aW9uKG4udHJhbnNpdGlvbkR1cmF0aW9uKS5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrdC54K1wiIDApXCJ9KSxlLmNhbGwoYykuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK3QueCtcIiAtXCIrbi51cGxpZnQrXCIgKVwiKX0pLm9uKFwiZHJhZ2VuZFwiLGZ1bmN0aW9uKGUpe3ZhciByPWkuc2VsZWN0KHRoaXMpLG49ZS5jYWxjZGF0YTtlLng9ZS54U2NhbGUoZSksZS5jYWxjZGF0YS5jb2x1bW5EcmFnSW5Qcm9ncmVzcz0hMSx3KHIsZSwwKSxmdW5jdGlvbih0LGUscil7dmFyIG49ZS5nZENvbHVtbnNPcmlnaW5hbE9yZGVyO2UuZ2RDb2x1bW5zLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gcltuLmluZGV4T2YodCldLXJbbi5pbmRleE9mKGUpXX0pLGUuY29sdW1ub3JkZXI9cix0LmVtaXQoXCJwbG90bHlfcmVzdHlsZVwiKX0odCxuLG4uY29sdW1ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQueEluZGV4fSkpfSkpLF8uZWFjaChmdW5jdGlvbihlKXtvLnNldENsaXBVcmwoaS5zZWxlY3QodGhpcyksZyh0LGUpLHQpfSk7dmFyIFQ9Xy5zZWxlY3RBbGwoXCIuXCIrbi5jbi5jb2x1bW5CbG9jaykuZGF0YShoLnNwbGl0VG9QYW5lbHMsYS5rZXlGdW4pO1QuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQobi5jbi5jb2x1bW5CbG9jaywhMCkuYXR0cihcImlkXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5fSksVC5zdHlsZShcImN1cnNvclwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmRyYWdIYW5kbGU/XCJldy1yZXNpemVcIjp0LmNhbGNkYXRhLnNjcm9sbGJhclN0YXRlLmJhcldpZ2dsZVJvb20/XCJucy1yZXNpemVcIjpcImRlZmF1bHRcIn0pO3ZhciBFPVQuZmlsdGVyKEEpLEM9VC5maWx0ZXIoayk7ciYmQy5jYWxsKGkuYmVoYXZpb3IuZHJhZygpLm9yaWdpbihmdW5jdGlvbih0KXtyZXR1cm4gaS5ldmVudC5zdG9wUHJvcGFnYXRpb24oKSx0fSkub24oXCJkcmFnXCIsUyh0LGYsLTEpKS5vbihcImRyYWdlbmRcIixmdW5jdGlvbigpe30pKSx5KHQsZixFLFQpLHkodCxmLEMsVCk7dmFyIEw9Zi5zZWxlY3RBbGwoXCIuXCIrbi5jbi5zY3JvbGxBcmVhQ2xpcCkuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7TC5lbnRlcigpLmFwcGVuZChcImNsaXBQYXRoXCIpLmNsYXNzZWQobi5jbi5zY3JvbGxBcmVhQ2xpcCwhMCkuYXR0cihcImlkXCIsZnVuY3Rpb24oZSl7cmV0dXJuIGQodCxlKX0pO3ZhciB6PUwuc2VsZWN0QWxsKFwiLlwiK24uY24uc2Nyb2xsQXJlYUNsaXBSZWN0KS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKTt6LmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKS5jbGFzc2VkKG4uY24uc2Nyb2xsQXJlYUNsaXBSZWN0LCEwKS5hdHRyKFwieFwiLC1uLm92ZXJkcmFnKS5hdHRyKFwieVwiLC1uLnVwbGlmdCkuYXR0cihcImZpbGxcIixcIm5vbmVcIiksei5hdHRyKFwid2lkdGhcIixmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aCsyKm4ub3ZlcmRyYWd9KS5hdHRyKFwiaGVpZ2h0XCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0K24udXBsaWZ0fSksXy5zZWxlY3RBbGwoXCIuXCIrbi5jbi5jb2x1bW5Cb3VuZGFyeSkuZGF0YShhLnJlcGVhdCxhLmtleUZ1bikuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQobi5jbi5jb2x1bW5Cb3VuZGFyeSwhMCk7dmFyIE89Xy5zZWxlY3RBbGwoXCIuXCIrbi5jbi5jb2x1bW5Cb3VuZGFyeUNsaXBwYXRoKS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKTtPLmVudGVyKCkuYXBwZW5kKFwiY2xpcFBhdGhcIikuY2xhc3NlZChuLmNuLmNvbHVtbkJvdW5kYXJ5Q2xpcHBhdGgsITApLE8uYXR0cihcImlkXCIsZnVuY3Rpb24oZSl7cmV0dXJuIGcodCxlKX0pO3ZhciBJPU8uc2VsZWN0QWxsKFwiLlwiK24uY24uY29sdW1uQm91bmRhcnlSZWN0KS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKTtJLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKS5jbGFzc2VkKG4uY24uY29sdW1uQm91bmRhcnlSZWN0LCEwKS5hdHRyKFwiZmlsbFwiLFwibm9uZVwiKSxJLmF0dHIoXCJ3aWR0aFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbldpZHRoKzIqcCh0KX0pLmF0dHIoXCJoZWlnaHRcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5jYWxjZGF0YS5oZWlnaHQrMipwKHQpK24udXBsaWZ0fSkuYXR0cihcInhcIixmdW5jdGlvbih0KXtyZXR1cm4tcCh0KX0pLmF0dHIoXCJ5XCIsZnVuY3Rpb24odCl7cmV0dXJuLXAodCl9KSxNKG51bGwsQyxmKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvZ3VwXCI6Njk5LFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCI6NzI1LFwiLi9jb25zdGFudHNcIjoxMTU3LFwiLi9kYXRhX3ByZXBhcmF0aW9uX2hlbHBlclwiOjExNTgsXCIuL2RhdGFfc3BsaXRfaGVscGVyc1wiOjExNTksZDM6MTU1fV0sMTE2MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9ib3gvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXt5Om4ueSx4Om4ueCx4MDpuLngwLHkwOm4ueTAsbmFtZTppKHt9LG4ubmFtZSx7fSksb3JpZW50YXRpb246aSh7fSxuLm9yaWVudGF0aW9uLHt9KSxiYW5kd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxlZGl0VHlwZTpcImNhbGNcIn0sc2NhbGVncm91cDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcImNhbGNcIn0sc2NhbGVtb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ3aWR0aFwiLFwiY291bnRcIl0sZGZsdDpcIndpZHRoXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHNwYW5tb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJzb2Z0XCIsXCJoYXJkXCIsXCJtYW51YWxcIl0sZGZsdDpcInNvZnRcIixlZGl0VHlwZTpcImNhbGNcIn0sc3Bhbjp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixpdGVtczpbe3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImNhbGNcIn0se3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImNhbGNcIn1dLGVkaXRUeXBlOlwiY2FsY1wifSxsaW5lOntjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJzdHlsZVwifSx3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MixlZGl0VHlwZTpcInN0eWxlXCJ9LGVkaXRUeXBlOlwicGxvdFwifSxmaWxsY29sb3I6bi5maWxsY29sb3IscG9pbnRzOmkoe30sbi5ib3hwb2ludHMse30pLGppdHRlcjppKHt9LG4uaml0dGVyLHt9KSxwb2ludHBvczppKHt9LG4ucG9pbnRwb3Mse30pLHdpZHRoOmkoe30sbi53aWR0aCx7fSksbWFya2VyOm4ubWFya2VyLHRleHQ6bi50ZXh0LGhvdmVydGV4dDpuLmhvdmVydGV4dCxob3ZlcnRlbXBsYXRlOm4uaG92ZXJ0ZW1wbGF0ZSxib3g6e3Zpc2libGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMSxlZGl0VHlwZTpcInBsb3RcIn0sd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0Oi4yNSxlZGl0VHlwZTpcInBsb3RcIn0sZmlsbGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcInN0eWxlXCJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcInN0eWxlXCJ9LHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZWRpdFR5cGU6XCJzdHlsZVwifSxlZGl0VHlwZTpcInN0eWxlXCJ9LGVkaXRUeXBlOlwicGxvdFwifSxtZWFubGluZTp7dmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwicGxvdFwifSxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJzdHlsZVwifSx3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGVkaXRUeXBlOlwic3R5bGVcIn0sZWRpdFR5cGU6XCJwbG90XCJ9LHNpZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImJvdGhcIixcInBvc2l0aXZlXCIsXCJuZWdhdGl2ZVwiXSxkZmx0OlwiYm90aFwiLGVkaXRUeXBlOlwiY2FsY1wifSxvZmZzZXRncm91cDpuLm9mZnNldGdyb3VwLGFsaWdubWVudGdyb3VwOm4uYWxpZ25tZW50Z3JvdXAsc2VsZWN0ZWQ6bi5zZWxlY3RlZCx1bnNlbGVjdGVkOm4udW5zZWxlY3RlZCxob3Zlcm9uOnt2YWxUeXBlOlwiZmxhZ2xpc3RcIixmbGFnczpbXCJ2aW9saW5zXCIsXCJwb2ludHNcIixcImtkZVwiXSxkZmx0OlwidmlvbGlucytwb2ludHMra2RlXCIsZXh0cmFzOltcImFsbFwiXSxlZGl0VHlwZTpcInN0eWxlXCJ9fX0se1wiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uL2JveC9hdHRyaWJ1dGVzXCI6ODYyfV0sMTE2NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksYT10KFwiLi4vYm94L2NhbGNcIiksbz10KFwiLi9oZWxwZXJzXCIpLHM9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNO2Z1bmN0aW9uIGwodCxlLHIpe3ZhciBpPWUubWF4LWUubWluO2lmKCFpKXJldHVybiB0LmJhbmR3aWR0aD90LmJhbmR3aWR0aDowO2lmKHQuYmFuZHdpZHRoKXJldHVybiBNYXRoLm1heCh0LmJhbmR3aWR0aCxpLzFlNCk7dmFyIGE9ci5sZW5ndGgsbz1uLnN0ZGV2KHIsYS0xLGUubWVhbik7cmV0dXJuIE1hdGgubWF4KGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMS4wNTkqTWF0aC5taW4oZSxyLzEuMzQ5KSpNYXRoLnBvdyh0LC0uMil9KGEsbyxlLnEzLWUucTEpLGkvMTAwKX1mdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBhLG89dC5zcGFubW9kZSxsPXQuc3Bhbnx8W10sYz1bZS5taW4sZS5tYXhdLHU9W2UubWluLTIqbixlLm1heCsyKm5dO2Z1bmN0aW9uIGgobil7dmFyIGk9bFtuXSxhPVwibXVsdGljYXRlZ29yeVwiPT09ci50eXBlP3IucjJjKGkpOnIuZDJjKGksMCx0W2UudmFsTGV0dGVyK1wiY2FsZW5kYXJcIl0pO3JldHVybiBhPT09cz91W25dOmF9dmFyIGY9e3R5cGU6XCJsaW5lYXJcIixyYW5nZTphPVwic29mdFwiPT09bz91OlwiaGFyZFwiPT09bz9jOltoKDApLGgoMSldfTtyZXR1cm4gaS5zZXRDb252ZXJ0KGYpLGYuY2xlYW5SYW5nZSgpLGF9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9YSh0LGUpO2lmKHJbMF0udC5lbXB0eSlyZXR1cm4gcjtmb3IodmFyIHM9dC5fZnVsbExheW91dCx1PWkuZ2V0RnJvbUlkKHQsZVtcImhcIj09PWUub3JpZW50YXRpb24/XCJ4YXhpc1wiOlwieWF4aXNcIl0pLGg9MS8wLGY9LTEvMCxwPTAsZD0wLGc9MDtnPHIubGVuZ3RoO2crKyl7dmFyIHY9cltnXSxtPXYucHRzLm1hcChvLmV4dHJhY3RWYWwpLHk9di5iYW5kd2lkdGg9bChlLHYsbSkseD12LnNwYW49YyhlLHYsdSx5KTtpZih2Lm1pbj09PXYubWF4JiYwPT09eSl4PXYuc3Bhbj1bdi5taW4sdi5tYXhdLHYuZGVuc2l0eT1be3Y6MSx0OnhbMF19XSx2LmJhbmR3aWR0aD15LHA9TWF0aC5tYXgocCwxKTtlbHNle3ZhciBiPXhbMV0teFswXSxfPU1hdGguY2VpbChiLyh5LzMpKSx3PWIvXztpZighaXNGaW5pdGUodyl8fCFpc0Zpbml0ZShfKSlyZXR1cm4gbi5lcnJvcihcIlNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggY29tcHV0aW5nIHRoZSB2aW9saW4gc3BhblwiKSxyWzBdLnQuZW1wdHk9ITAscjt2YXIgaz1vLm1ha2VLREUodixlLG0pO3YuZGVuc2l0eT1uZXcgQXJyYXkoXyk7Zm9yKHZhciBBPTAsVD14WzBdO1Q8eFsxXSt3LzI7QSsrLFQrPXcpe3ZhciBNPWsoVCk7di5kZW5zaXR5W0FdPXt2Ok0sdDpUfSxwPU1hdGgubWF4KHAsTSl9fWQ9TWF0aC5tYXgoZCxtLmxlbmd0aCksaD1NYXRoLm1pbihoLHhbMF0pLGY9TWF0aC5tYXgoZix4WzFdKX12YXIgUz1pLmZpbmRFeHRyZW1lcyh1LFtoLGZdLHtwYWRkZWQ6ITB9KTtpZihlLl9leHRyZW1lc1t1Ll9pZF09UyxlLndpZHRoKXJbMF0udC5tYXhLREU9cDtlbHNle3ZhciBFPXMuX3Zpb2xpblNjYWxlR3JvdXBTdGF0cyxDPWUuc2NhbGVncm91cCxMPUVbQ107TD8oTC5tYXhLREU9TWF0aC5tYXgoTC5tYXhLREUscCksTC5tYXhDb3VudD1NYXRoLm1heChMLm1heENvdW50LGQpKTpFW0NdPXttYXhLREU6cCxtYXhDb3VudDpkfX1yZXR1cm4gclswXS50LmxhYmVscy5rZGU9bi5fKHQsXCJrZGU6XCIpLHJ9fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9ib3gvY2FsY1wiOjg2MyxcIi4vaGVscGVyc1wiOjExNjd9XSwxMTY1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2JveC9jcm9zc190cmFjZV9jYWxjXCIpLnNldFBvc2l0aW9uT2Zmc2V0LGk9W1widlwiLFwiaFwiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jYWxjZGF0YSxhPWUueGF4aXMsbz1lLnlheGlzLHM9MDtzPGkubGVuZ3RoO3MrKyl7Zm9yKHZhciBsPWlbc10sYz1cImhcIj09PWw/bzphLHU9W10saD0wO2g8ci5sZW5ndGg7aCsrKXt2YXIgZj1yW2hdLHA9ZlswXS50LGQ9ZlswXS50cmFjZTshMCE9PWQudmlzaWJsZXx8XCJ2aW9saW5cIiE9PWQudHlwZXx8cC5lbXB0eXx8ZC5vcmllbnRhdGlvbiE9PWx8fGQueGF4aXMhPT1hLl9pZHx8ZC55YXhpcyE9PW8uX2lkfHx1LnB1c2goaCl9bihcInZpb2xpblwiLHQsdSxjKX19fSx7XCIuLi9ib3gvY3Jvc3NfdHJhY2VfY2FsY1wiOjg2NH1dLDExNjY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksYT10KFwiLi4vYm94L2RlZmF1bHRzXCIpLG89dChcIi4vYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWZ1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UyKHQsZSxvLHIsaSl9aWYoYS5oYW5kbGVTYW1wbGVEZWZhdWx0cyh0LGUsbCxzKSwhMSE9PWUudmlzaWJsZSl7bChcImJhbmR3aWR0aFwiKSxsKFwic2lkZVwiKSxsKFwid2lkdGhcIil8fChsKFwic2NhbGVncm91cFwiLGUubmFtZSksbChcInNjYWxlbW9kZVwiKSk7dmFyIHUsaD1sKFwic3BhblwiKTtBcnJheS5pc0FycmF5KGgpJiYodT1cIm1hbnVhbFwiKSxsKFwic3Bhbm1vZGVcIix1KTt2YXIgZj1sKFwibGluZS5jb2xvclwiLCh0Lm1hcmtlcnx8e30pLmNvbG9yfHxyKSxwPWwoXCJsaW5lLndpZHRoXCIpLGQ9bChcImZpbGxjb2xvclwiLGkuYWRkT3BhY2l0eShlLmxpbmUuY29sb3IsLjUpKTthLmhhbmRsZVBvaW50c0RlZmF1bHRzKHQsZSxsLHtwcmVmaXg6XCJcIn0pO3ZhciBnPWMoXCJib3gud2lkdGhcIiksdj1jKFwiYm94LmZpbGxjb2xvclwiLGQpLG09YyhcImJveC5saW5lLmNvbG9yXCIsZikseT1jKFwiYm94LmxpbmUud2lkdGhcIixwKTtsKFwiYm94LnZpc2libGVcIixCb29sZWFuKGd8fHZ8fG18fHkpKXx8KGUuYm94PXt2aXNpYmxlOiExfSk7dmFyIHg9YyhcIm1lYW5saW5lLmNvbG9yXCIsZiksYj1jKFwibWVhbmxpbmUud2lkdGhcIixwKTtsKFwibWVhbmxpbmUudmlzaWJsZVwiLEJvb2xlYW4oeHx8YikpfHwoZS5tZWFubGluZT17dmlzaWJsZTohMX0pfX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi9ib3gvZGVmYXVsdHNcIjo4NjUsXCIuL2F0dHJpYnV0ZXNcIjoxMTYzfV0sMTE2NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT1mdW5jdGlvbih0KXtyZXR1cm4gMS9NYXRoLnNxcnQoMipNYXRoLlBJKSpNYXRoLmV4cCgtLjUqdCp0KX07ci5tYWtlS0RFPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yLmxlbmd0aCxhPWksbz10LmJhbmR3aWR0aCxzPTEvKG4qbyk7cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLGk9MDtpPG47aSsrKWUrPWEoKHQtcltpXSkvbyk7cmV0dXJuIHMqZX19LHIuZ2V0UG9zaXRpb25PbktkZVBhdGg9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGE7XCJoXCI9PT1lLm9yaWVudGF0aW9uPyhpPVwieVwiLGE9XCJ4XCIpOihpPVwieFwiLGE9XCJ5XCIpO3ZhciBvPW4uZmluZFBvaW50T25QYXRoKHQucGF0aCxyLGEse3BhdGhMZW5ndGg6dC5wYXRoTGVuZ3RofSkscz10LnBvc0NlbnRlclB4LGw9b1tpXTtyZXR1cm5bbCxcImJvdGhcIj09PWUuc2lkZT8yKnMtbDpzXX0sci5nZXRLZGVWYWx1ZT1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC5wdHMubWFwKHIuZXh0cmFjdFZhbCk7cmV0dXJuIHIubWFrZUtERSh0LGUsaSkobikvdC5wb3NEZW5zaXR5U2NhbGV9LHIuZXh0cmFjdFZhbD1mdW5jdGlvbih0KXtyZXR1cm4gdC52fX0se1wiLi4vLi4vbGliXCI6NzAxfV0sMTE2ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksYT10KFwiLi4vYm94L2hvdmVyXCIpLG89dChcIi4vaGVscGVyc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyxsKXt2YXIgYyx1LGg9dC5jZCxmPWhbMF0udHJhY2UscD1mLmhvdmVyb24sZD0tMSE9PXAuaW5kZXhPZihcInZpb2xpbnNcIiksZz0tMSE9PXAuaW5kZXhPZihcImtkZVwiKSx2PVtdO2lmKGR8fGcpe3ZhciBtPWEuaG92ZXJPbkJveGVzKHQsZSxyLHMpO2lmKGQmJih2PXYuY29uY2F0KG0pKSxnJiZtLmxlbmd0aD4wKXt2YXIgeSx4LGIsXyx3LGs9dC54YSxBPXQueWE7XCJoXCI9PT1mLm9yaWVudGF0aW9uPyh3PWUseT1cInlcIixiPUEseD1cInhcIixfPWspOih3PXIseT1cInhcIixiPWsseD1cInlcIixfPUEpO3ZhciBUPWhbdC5pbmRleF07aWYodz49VC5zcGFuWzBdJiZ3PD1ULnNwYW5bMV0pe3ZhciBNPW4uZXh0ZW5kRmxhdCh7fSx0KSxTPV8uYzJwKHcsITApLEU9by5nZXRLZGVWYWx1ZShULGYsdyksQz1vLmdldFBvc2l0aW9uT25LZGVQYXRoKFQsZixTKSxMPWIuX29mZnNldCx6PWIuX2xlbmd0aDtNW3krXCIwXCJdPUNbMF0sTVt5K1wiMVwiXT1DWzFdLE1beCtcIjBcIl09TVt4K1wiMVwiXT1TLE1beCtcIkxhYmVsXCJdPXgrXCI6IFwiK2kuaG92ZXJMYWJlbFRleHQoXyx3KStcIiwgXCIraFswXS50LmxhYmVscy5rZGUrXCIgXCIrRS50b0ZpeGVkKDMpLE0uc3Bpa2VEaXN0YW5jZT1tWzBdLnNwaWtlRGlzdGFuY2U7dmFyIE89eStcIlNwaWtlXCI7TVtPXT1tWzBdW09dLG1bMF0uc3Bpa2VEaXN0YW5jZT12b2lkIDAsbVswXVtPXT12b2lkIDAsTS5ob3ZlcnRlbXBsYXRlPSExLHYucHVzaChNKSwodT17c3Ryb2tlOnQuY29sb3J9KVt5K1wiMVwiXT1uLmNvbnN0cmFpbihMK0NbMF0sTCxMK3opLHVbeStcIjJcIl09bi5jb25zdHJhaW4oTCtDWzFdLEwsTCt6KSx1W3grXCIxXCJdPXVbeCtcIjJcIl09Xy5fb2Zmc2V0K1N9fX0tMSE9PXAuaW5kZXhPZihcInBvaW50c1wiKSYmKGM9YS5ob3Zlck9uUG9pbnRzKHQsZSxyKSk7dmFyIEk9bC5zZWxlY3RBbGwoXCIudmlvbGlubGluZS1cIitmLnVpZCkuZGF0YSh1P1swXTpbXSk7cmV0dXJuIEkuZW50ZXIoKS5hcHBlbmQoXCJsaW5lXCIpLmNsYXNzZWQoXCJ2aW9saW5saW5lLVwiK2YudWlkLCEwKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsMS41KSxJLmV4aXQoKS5yZW1vdmUoKSxJLmF0dHIodSksXCJjbG9zZXN0XCI9PT1zP2M/W2NdOnY6Yz8odi5wdXNoKGMpLHYpOnZ9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL2JveC9ob3ZlclwiOjg2NyxcIi4vaGVscGVyc1wiOjExNjd9XSwxMTY5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksbGF5b3V0QXR0cmlidXRlczp0KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxzdXBwbHlEZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxjcm9zc1RyYWNlRGVmYXVsdHM6dChcIi4uL2JveC9kZWZhdWx0c1wiKS5jcm9zc1RyYWNlRGVmYXVsdHMsc3VwcGx5TGF5b3V0RGVmYXVsdHM6dChcIi4vbGF5b3V0X2RlZmF1bHRzXCIpLGNhbGM6dChcIi4vY2FsY1wiKSxjcm9zc1RyYWNlQ2FsYzp0KFwiLi9jcm9zc190cmFjZV9jYWxjXCIpLHBsb3Q6dChcIi4vcGxvdFwiKSxzdHlsZTp0KFwiLi9zdHlsZVwiKSxzdHlsZU9uU2VsZWN0OnQoXCIuLi9zY2F0dGVyL3N0eWxlXCIpLnN0eWxlT25TZWxlY3QsaG92ZXJQb2ludHM6dChcIi4vaG92ZXJcIiksc2VsZWN0UG9pbnRzOnQoXCIuLi9ib3gvc2VsZWN0XCIpLG1vZHVsZVR5cGU6XCJ0cmFjZVwiLG5hbWU6XCJ2aW9saW5cIixiYXNlUGxvdE1vZHVsZTp0KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCIpLGNhdGVnb3JpZXM6W1wiY2FydGVzaWFuXCIsXCJzdmdcIixcInN5bWJvbHNcIixcIm9yaWVudGVkXCIsXCJib3gtdmlvbGluXCIsXCJzaG93TGVnZW5kXCIsXCJ2aW9saW5MYXlvdXRcIixcInpvb21TY2FsZVwiXSxtZXRhOnt9fX0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi4vYm94L2RlZmF1bHRzXCI6ODY1LFwiLi4vYm94L3NlbGVjdFwiOjg3MixcIi4uL3NjYXR0ZXIvc3R5bGVcIjoxMDc1LFwiLi9hdHRyaWJ1dGVzXCI6MTE2MyxcIi4vY2FsY1wiOjExNjQsXCIuL2Nyb3NzX3RyYWNlX2NhbGNcIjoxMTY1LFwiLi9kZWZhdWx0c1wiOjExNjYsXCIuL2hvdmVyXCI6MTE2OCxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjoxMTcwLFwiLi9sYXlvdXRfZGVmYXVsdHNcIjoxMTcxLFwiLi9wbG90XCI6MTE3MixcIi4vc3R5bGVcIjoxMTczfV0sMTE3MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9ib3gvbGF5b3V0X2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vbGliXCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXt2aW9saW5tb2RlOmkoe30sbi5ib3htb2RlLHt9KSx2aW9saW5nYXA6aSh7fSxuLmJveGdhcCx7fSksdmlvbGluZ3JvdXBnYXA6aSh7fSxuLmJveGdyb3VwZ2FwLHt9KX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2JveC9sYXlvdXRfYXR0cmlidXRlc1wiOjg2OX1dLDExNzE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vYm94L2xheW91dF9kZWZhdWx0c1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2EuX3N1cHBseSh0LGUscixmdW5jdGlvbihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfSxcInZpb2xpblwiKX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2JveC9sYXlvdXRfZGVmYXVsdHNcIjo4NzAsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6MTE3MH1dLDExNzI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxvPXQoXCIuLi9ib3gvcGxvdFwiKSxzPXQoXCIuLi9zY2F0dGVyL2xpbmVfcG9pbnRzXCIpLGw9dChcIi4vaGVscGVyc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7dmFyIHU9dC5fZnVsbExheW91dCxoPWUueGF4aXMsZj1lLnlheGlzO2Z1bmN0aW9uIHAodCl7dmFyIGU9cyh0LHt4YXhpczpoLHlheGlzOmYsY29ubmVjdEdhcHM6ITAsYmFzZVRvbGVyYW5jZTouNzUsc2hhcGU6XCJzcGxpbmVcIixzaW1wbGlmeTohMH0pO3JldHVybiBhLnNtb290aG9wZW4oZVswXSwxKX1pLm1ha2VUcmFjZUdyb3VwcyhjLHIsXCJ0cmFjZSB2aW9saW5zXCIpLmVhY2goZnVuY3Rpb24odCl7dmFyIHI9bi5zZWxlY3QodGhpcyksYT10WzBdLHM9YS50LGM9YS50cmFjZTtpZihlLmlzUmFuZ2VQbG90fHwoYS5ub2RlMz1yKSwhMCE9PWMudmlzaWJsZXx8cy5lbXB0eSlyLnJlbW92ZSgpO2Vsc2V7dmFyIGQ9cy5iUG9zLGc9cy5iZFBvcyx2PWVbcy52YWxMZXR0ZXIrXCJheGlzXCJdLG09ZVtzLnBvc0xldHRlcitcImF4aXNcIl0seT1cImJvdGhcIj09PWMuc2lkZSx4PXl8fFwicG9zaXRpdmVcIj09PWMuc2lkZSxiPXl8fFwibmVnYXRpdmVcIj09PWMuc2lkZSxfPXIuc2VsZWN0QWxsKFwicGF0aC52aW9saW5cIikuZGF0YShpLmlkZW50aXR5KTtfLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5zdHlsZShcInZlY3Rvci1lZmZlY3RcIixcIm5vbi1zY2FsaW5nLXN0cm9rZVwiKS5hdHRyKFwiY2xhc3NcIixcInZpb2xpblwiKSxfLmV4aXQoKS5yZW1vdmUoKSxfLmVhY2goZnVuY3Rpb24odCl7dmFyIGUscixpLGEsbyxsLGgsZixfPW4uc2VsZWN0KHRoaXMpLHc9dC5kZW5zaXR5LGs9dy5sZW5ndGgsQT10LnBvcytkLFQ9bS5jMnAoQSk7aWYoYy53aWR0aCllPXMubWF4S0RFL2c7ZWxzZXt2YXIgTT11Ll92aW9saW5TY2FsZUdyb3VwU3RhdHNbYy5zY2FsZWdyb3VwXTtlPVwiY291bnRcIj09PWMuc2NhbGVtb2RlP00ubWF4S0RFL2cqKE0ubWF4Q291bnQvdC5wdHMubGVuZ3RoKTpNLm1heEtERS9nfWlmKHgpe2ZvcihoPW5ldyBBcnJheShrKSxvPTA7bzxrO28rKykoZj1oW29dPXt9KVtzLnBvc0xldHRlcl09QSt3W29dLnYvZSxmW3MudmFsTGV0dGVyXT13W29dLnQ7cj1wKGgpfWlmKGIpe2ZvcihoPW5ldyBBcnJheShrKSxsPTAsbz1rLTE7bDxrO2wrKyxvLS0pKGY9aFtsXT17fSlbcy5wb3NMZXR0ZXJdPUEtd1tvXS52L2UsZltzLnZhbExldHRlcl09d1tvXS50O2k9cChoKX1pZih5KWE9citcIkxcIitpLnN1YnN0cigxKStcIlpcIjtlbHNle3ZhciBTPVtULHYuYzJwKHdbMF0udCldLEU9W1Qsdi5jMnAod1trLTFdLnQpXTtcImhcIj09PWMub3JpZW50YXRpb24mJihTLnJldmVyc2UoKSxFLnJldmVyc2UoKSksYT14P1wiTVwiK1MrXCJMXCIrci5zdWJzdHIoMSkrXCJMXCIrRTpcIk1cIitFK1wiTFwiK2kuc3Vic3RyKDEpK1wiTFwiK1N9Xy5hdHRyKFwiZFwiLGEpLHQucG9zQ2VudGVyUHg9VCx0LnBvc0RlbnNpdHlTY2FsZT1lKmcsdC5wYXRoPV8ubm9kZSgpLHQucGF0aExlbmd0aD10LnBhdGguZ2V0VG90YWxMZW5ndGgoKS8oeT8yOjEpfSk7dmFyIHcsayxBLFQ9Yy5ib3gsTT1ULndpZHRoLFM9KFQubGluZXx8e30pLndpZHRoO3k/KHc9ZypNLGs9MCk6eD8odz1bMCxnKk0vMl0saz0tUyk6KHc9W2cqTS8yLDBdLGs9Uyksby5wbG90Qm94QW5kV2hpc2tlcnMocix7cG9zOm0sdmFsOnZ9LGMse2JQb3M6ZCxiZFBvczp3LGJQb3NQeE9mZnNldDprfSksby5wbG90Qm94TWVhbihyLHtwb3M6bSx2YWw6dn0sYyx7YlBvczpkLGJkUG9zOncsYlBvc1B4T2Zmc2V0Omt9KSwhYy5ib3gudmlzaWJsZSYmYy5tZWFubGluZS52aXNpYmxlJiYoQT1pLmlkZW50aXR5KTt2YXIgRT1yLnNlbGVjdEFsbChcInBhdGgubWVhbmxpbmVcIikuZGF0YShBfHxbXSk7RS5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsXCJtZWFubGluZVwiKS5zdHlsZShcImZpbGxcIixcIm5vbmVcIikuc3R5bGUoXCJ2ZWN0b3ItZWZmZWN0XCIsXCJub24tc2NhbGluZy1zdHJva2VcIiksRS5leGl0KCkucmVtb3ZlKCksRS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXYuYzJwKHQubWVhbiwhMCkscj1sLmdldFBvc2l0aW9uT25LZGVQYXRoKHQsYyxlKTtuLnNlbGVjdCh0aGlzKS5hdHRyKFwiZFwiLFwiaFwiPT09Yy5vcmllbnRhdGlvbj9cIk1cIitlK1wiLFwiK3JbMF0rXCJWXCIrclsxXTpcIk1cIityWzBdK1wiLFwiK2UrXCJIXCIrclsxXSl9KSxvLnBsb3RQb2ludHMocix7eDpoLHk6Zn0sYyxzKX19KX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2JveC9wbG90XCI6ODcxLFwiLi4vc2NhdHRlci9saW5lX3BvaW50c1wiOjEwNjYsXCIuL2hlbHBlcnNcIjoxMTY3LGQzOjE1NX1dLDExNzM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxhPXQoXCIuLi9zY2F0dGVyL3N0eWxlXCIpLnN0eWxlUG9pbnRzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWU/ZVswXS5ub2RlMzpuLnNlbGVjdCh0KS5zZWxlY3RBbGwoXCJnLnRyYWNlLnZpb2xpbnNcIik7ci5zdHlsZShcIm9wYWNpdHlcIixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSksci5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWVbMF0udHJhY2Usbz1uLnNlbGVjdCh0aGlzKSxzPXIuYm94fHx7fSxsPXMubGluZXx8e30sYz1yLm1lYW5saW5lfHx7fSx1PWMud2lkdGg7by5zZWxlY3RBbGwoXCJwYXRoLnZpb2xpblwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLHIubGluZS53aWR0aCtcInB4XCIpLmNhbGwoaS5zdHJva2Usci5saW5lLmNvbG9yKS5jYWxsKGkuZmlsbCxyLmZpbGxjb2xvciksby5zZWxlY3RBbGwoXCJwYXRoLmJveFwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLGwud2lkdGgrXCJweFwiKS5jYWxsKGkuc3Ryb2tlLGwuY29sb3IpLmNhbGwoaS5maWxsLHMuZmlsbGNvbG9yKTt2YXIgaD17XCJzdHJva2Utd2lkdGhcIjp1K1wicHhcIixcInN0cm9rZS1kYXNoYXJyYXlcIjoyKnUrXCJweCxcIit1K1wicHhcIn07by5zZWxlY3RBbGwoXCJwYXRoLm1lYW5cIikuc3R5bGUoaCkuY2FsbChpLnN0cm9rZSxjLmNvbG9yKSxvLnNlbGVjdEFsbChcInBhdGgubWVhbmxpbmVcIikuc3R5bGUoaCkuY2FsbChpLnN0cm9rZSxjLmNvbG9yKSxhKG8scix0KX0pfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uL3NjYXR0ZXIvc3R5bGVcIjoxMDc1LGQzOjE1NX1dLDExNzQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vaXNvc3VyZmFjZS9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LHM9dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGwsbD1lLmV4cG9ydHM9cyhvKHt4OmkueCx5OmkueSx6Omkueix2YWx1ZTppLnZhbHVlLGlzb21pbjppLmlzb21pbixpc29tYXg6aS5pc29tYXgsc3VyZmFjZTppLnN1cmZhY2Usc3BhY2VmcmFtZTp7c2hvdzp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxmaWxsOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDoxfX0sc2xpY2VzOmkuc2xpY2VzLGNhcHM6aS5jYXBzLHRleHQ6aS50ZXh0LGhvdmVydGV4dDppLmhvdmVydGV4dCxob3ZlcnRlbXBsYXRlOmkuaG92ZXJ0ZW1wbGF0ZX0sbihcIlwiLHtjb2xvckF0dHI6XCJgdmFsdWVgXCIsc2hvd1NjYWxlRGZsdDohMCxlZGl0VHlwZU92ZXJyaWRlOlwiY2FsY1wifSkse2NvbG9yYmFyOmkuY29sb3JiYXIsb3BhY2l0eTppLm9wYWNpdHksb3BhY2l0eXNjYWxlOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGxpZ2h0cG9zaXRpb246aS5saWdodHBvc2l0aW9uLGxpZ2h0aW5nOmkubGlnaHRpbmcsZmxhdHNoYWRpbmc6aS5mbGF0c2hhZGluZyxjb250b3VyOmkuY29udG91cixob3ZlcmluZm86byh7fSxhLmhvdmVyaW5mbyl9KSxcImNhbGNcIixcIm5lc3RlZFwiKTtsLnguZWRpdFR5cGU9bC55LmVkaXRUeXBlPWwuei5lZGl0VHlwZT1sLnZhbHVlLmVkaXRUeXBlPVwiY2FsYytjbGVhckF4aXNUeXBlc1wiLGwudHJhbnNmb3Jtcz12b2lkIDB9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi4vaXNvc3VyZmFjZS9hdHRyaWJ1dGVzXCI6OTg5fV0sMTE3NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbC1tZXNoM2RcIiksaT10KFwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvclwiKS5wYXJzZUNvbG9yU2NhbGUsYT10KFwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiKSxvPXQoXCIuLi8uLi9wbG90cy9nbDNkL3ppcDNcIikscz10KFwiLi4vaXNvc3VyZmFjZS9jb252ZXJ0XCIpLmZpbmROZWFyZXN0T25BeGlzLGw9dChcIi4uL2lzb3N1cmZhY2UvY29udmVydFwiKS5nZW5lcmF0ZUlzb01lc2hlcztmdW5jdGlvbiBjKHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLm1lc2g9ZSx0aGlzLm5hbWU9XCJcIix0aGlzLmRhdGE9bnVsbCx0aGlzLnNob3dDb250b3VyPSExfXZhciB1PWMucHJvdG90eXBlO3UuaGFuZGxlUGljaz1mdW5jdGlvbih0KXtpZih0Lm9iamVjdD09PXRoaXMubWVzaCl7dmFyIGU9dC5kYXRhLmluZGV4LHI9dGhpcy5kYXRhLl94W2VdLG49dGhpcy5kYXRhLl95W2VdLGk9dGhpcy5kYXRhLl96W2VdLGE9dGhpcy5kYXRhLl9Zcy5sZW5ndGgsbz10aGlzLmRhdGEuX1pzLmxlbmd0aCxsPXMocix0aGlzLmRhdGEuX1hzKS5pZCxjPXMobix0aGlzLmRhdGEuX1lzKS5pZCx1PXMoaSx0aGlzLmRhdGEuX1pzKS5pZCxoPXQuaW5kZXg9dStvKmMrbyphKmw7dC50cmFjZUNvb3JkaW5hdGU9W3RoaXMuZGF0YS5feFtoXSx0aGlzLmRhdGEuX3lbaF0sdGhpcy5kYXRhLl96W2hdLHRoaXMuZGF0YS52YWx1ZVtoXV07dmFyIGY9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQ7cmV0dXJuIEFycmF5LmlzQXJyYXkoZikmJnZvaWQgMCE9PWZbaF0/dC50ZXh0TGFiZWw9ZltoXTpmJiYodC50ZXh0TGFiZWw9ZiksITB9fSx1LnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjZW5lLHI9ZS5mdWxsU2NlbmVMYXlvdXQ7ZnVuY3Rpb24gbih0LGUscixuKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZDJsKGUsMCxuKSpyfSl9dGhpcy5kYXRhPWwodCk7dmFyIHM9e3Bvc2l0aW9uczpvKG4oci54YXhpcyx0Ll94LGUuZGF0YVNjYWxlWzBdLHQueGNhbGVuZGFyKSxuKHIueWF4aXMsdC5feSxlLmRhdGFTY2FsZVsxXSx0LnljYWxlbmRhciksbihyLnpheGlzLHQuX3osZS5kYXRhU2NhbGVbMl0sdC56Y2FsZW5kYXIpKSxjZWxsczpvKHQuX2ksdC5faix0Ll9rKSxsaWdodFBvc2l0aW9uOlt0LmxpZ2h0cG9zaXRpb24ueCx0LmxpZ2h0cG9zaXRpb24ueSx0LmxpZ2h0cG9zaXRpb24uel0sYW1iaWVudDp0LmxpZ2h0aW5nLmFtYmllbnQsZGlmZnVzZTp0LmxpZ2h0aW5nLmRpZmZ1c2Usc3BlY3VsYXI6dC5saWdodGluZy5zcGVjdWxhcixyb3VnaG5lc3M6dC5saWdodGluZy5yb3VnaG5lc3MsZnJlc25lbDp0LmxpZ2h0aW5nLmZyZXNuZWwsdmVydGV4Tm9ybWFsc0Vwc2lsb246dC5saWdodGluZy52ZXJ0ZXhub3JtYWxzZXBzaWxvbixmYWNlTm9ybWFsc0Vwc2lsb246dC5saWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb24sb3BhY2l0eTp0Lm9wYWNpdHksb3BhY2l0eXNjYWxlOnQub3BhY2l0eXNjYWxlLGNvbnRvdXJFbmFibGU6dC5jb250b3VyLnNob3csY29udG91ckNvbG9yOmEodC5jb250b3VyLmNvbG9yKS5zbGljZSgwLDMpLGNvbnRvdXJXaWR0aDp0LmNvbnRvdXIud2lkdGgsdXNlRmFjZXROb3JtYWxzOnQuZmxhdHNoYWRpbmd9O3MudmVydGV4SW50ZW5zaXR5PXQuX2ludGVuc2l0eSxzLnZlcnRleEludGVuc2l0eUJvdW5kcz1bdC5jbWluLHQuY21heF0scy5jb2xvcm1hcD1pKHQpLHRoaXMubWVzaC51cGRhdGUocyl9LHUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLm1lc2gpLHRoaXMubWVzaC5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2xwbG90LmdsLGk9bih7Z2w6cn0pLGE9bmV3IGModCxpLGUudWlkKTtyZXR1cm4gaS5fdHJhY2U9YSxhLnVwZGF0ZShlKSx0LmdscGxvdC5hZGQoaSksYX19LHtcIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3JcIjo2OTgsXCIuLi8uLi9saWIvc3RyMnJnYmFycmF5XCI6NzI0LFwiLi4vLi4vcGxvdHMvZ2wzZC96aXAzXCI6ODAwLFwiLi4vaXNvc3VyZmFjZS9jb252ZXJ0XCI6OTkxLFwiZ2wtbWVzaDNkXCI6Mjc3fV0sMTE3NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uL2lzb3N1cmZhY2UvZGVmYXVsdHNcIikuc3VwcGx5SXNvRGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHMocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1hKHQsZSxyLG8scyk7dmFyIGw9cyhcIm9wYWNpdHlzY2FsZVwiKTtcIm1heFwiPT09bD9lLm9wYWNpdHlzY2FsZT1bWzAsLjFdLFsxLDFdXTpcIm1pblwiPT09bD9lLm9wYWNpdHlzY2FsZT1bWzAsMV0sWzEsLjFdXTpcImV4dHJlbWVzXCI9PT1sP2Uub3BhY2l0eXNjYWxlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49MDtuPDMyO24rKyl7dmFyIGk9bi8zMSxhPWUrKDEtZSkqKDEtTWF0aC5wb3coTWF0aC5zaW4odCppKk1hdGguUEkpLDIpKTtyLnB1c2goW2ksTWF0aC5tYXgoMSxNYXRoLm1pbigwLGEpKV0pfXJldHVybiByfSgxLC4xKTpmdW5jdGlvbih0KXt2YXIgZT0wO2lmKCFBcnJheS5pc0FycmF5KHQpfHx0Lmxlbmd0aDwyKXJldHVybiExO2lmKCF0WzBdfHwhdFt0Lmxlbmd0aC0xXSlyZXR1cm4hMTtpZigwIT0rdFswXVswXXx8MSE9K3RbdC5sZW5ndGgtMV1bMF0pcmV0dXJuITE7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07aWYoMiE9PW4ubGVuZ3RofHwrblswXTxlKXJldHVybiExO2U9K25bMF19cmV0dXJuITB9KGwpfHwoZS5vcGFjaXR5c2NhbGU9dm9pZCAwKX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2lzb3N1cmZhY2UvZGVmYXVsdHNcIjo5OTIsXCIuL2F0dHJpYnV0ZXNcIjoxMTc0fV0sMTE3NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIiksbi5jYWxjPXQoXCIuLi9pc29zdXJmYWNlL2NhbGNcIiksbi5jb2xvcmJhcj17bWluOlwiY21pblwiLG1heDpcImNtYXhcIn0sbi5wbG90PXQoXCIuL2NvbnZlcnRcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJ2b2x1bWVcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9nbDNkXCIpLG4uY2F0ZWdvcmllcz1bXCJnbDNkXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvZ2wzZFwiOjc4OSxcIi4uL2lzb3N1cmZhY2UvY2FsY1wiOjk5MCxcIi4vYXR0cmlidXRlc1wiOjExNzQsXCIuL2NvbnZlcnRcIjoxMTc1LFwiLi9kZWZhdWx0c1wiOjExNzZ9XSwxMTc4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2Jhci9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiKS5saW5lLGE9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdDtmdW5jdGlvbiBvKHQpe3JldHVybnttYXJrZXI6e2NvbG9yOmEoe30sbi5tYXJrZXIuY29sb3Ise2FycmF5T2s6ITEsZWRpdFR5cGU6XCJzdHlsZVwifSksbGluZTp7Y29sb3I6YSh7fSxuLm1hcmtlci5saW5lLmNvbG9yLHthcnJheU9rOiExLGVkaXRUeXBlOlwic3R5bGVcIn0pLHdpZHRoOmEoe30sbi5tYXJrZXIubGluZS53aWR0aCx7YXJyYXlPazohMSxlZGl0VHlwZTpcInN0eWxlXCJ9KSxlZGl0VHlwZTpcInN0eWxlXCJ9LGVkaXRUeXBlOlwic3R5bGVcIn0sZWRpdFR5cGU6XCJzdHlsZVwifX1lLmV4cG9ydHM9e21lYXN1cmU6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZGZsdDpbXSxlZGl0VHlwZTpcImNhbGNcIn0sYmFzZTp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6bnVsbCxhcnJheU9rOiExLGVkaXRUeXBlOlwiY2FsY1wifSx4Om4ueCx4MDpuLngwLGR4Om4uZHgseTpuLnkseTA6bi55MCxkeTpuLmR5LGhvdmVydGV4dDpuLmhvdmVydGV4dCxob3ZlcnRlbXBsYXRlOm4uaG92ZXJ0ZW1wbGF0ZSx0ZXh0Om4udGV4dCx0ZXh0cG9zaXRpb246bi50ZXh0cG9zaXRpb24sdGV4dGZvbnQ6bi50ZXh0Zm9udCxpbnNpZGV0ZXh0Zm9udDpuLmluc2lkZXRleHRmb250LG91dHNpZGV0ZXh0Zm9udDpuLm91dHNpZGV0ZXh0Zm9udCxjb25zdHJhaW50ZXh0Om4uY29uc3RyYWludGV4dCxjbGlwb25heGlzOm4uY2xpcG9uYXhpcyxvcmllbnRhdGlvbjpuLm9yaWVudGF0aW9uLG9mZnNldDpuLm9mZnNldCx3aWR0aDpuLndpZHRoLGluY3JlYXNpbmc6bygpLGRlY3JlYXNpbmc6bygpLHRvdGFsczpvKCksY29ubmVjdG9yOntsaW5lOntjb2xvcjppLmNvbG9yLHdpZHRoOmkud2lkdGgsZGFzaDppLmRhc2gsZWRpdFR5cGU6XCJwbG90XCJ9LG1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInNwYW5uaW5nXCIsXCJiZXR3ZWVuXCJdLGRmbHQ6XCJiZXR3ZWVuXCIsZWRpdFR5cGU6XCJwbG90XCJ9LHZpc2libGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcInBsb3RcIn0sZWRpdFR5cGU6XCJwbG90XCJ9LG9mZnNldGdyb3VwOm4ub2Zmc2V0Z3JvdXAsYWxpZ25tZW50Z3JvdXA6bi5vZmZzZXRncm91cH19LHtcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi9iYXIvYXR0cmlidXRlc1wiOjgzOSxcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiOjEwNTJ9XSwxMTc5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGk9dChcIi4uLy4uL2xpYlwiKS5tZXJnZUFycmF5LGE9dChcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIiksbz10KFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKS5CQUROVU07ZnVuY3Rpb24gcyh0KXtyZXR1cm5cImFcIj09PXR8fFwiYWJzb2x1dGVcIj09PXR9ZnVuY3Rpb24gbCh0KXtyZXR1cm5cInRcIj09PXR8fFwidG90YWxcIj09PXR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYyx1PW4uZ2V0RnJvbUlkKHQsZS54YXhpc3x8XCJ4XCIpLGg9bi5nZXRGcm9tSWQodCxlLnlheGlzfHxcInlcIik7XCJoXCI9PT1lLm9yaWVudGF0aW9uPyhyPXUubWFrZUNhbGNkYXRhKGUsXCJ4XCIpLGM9aC5tYWtlQ2FsY2RhdGEoZSxcInlcIikpOihyPWgubWFrZUNhbGNkYXRhKGUsXCJ5XCIpLGM9dS5tYWtlQ2FsY2RhdGEoZSxcInhcIikpO2Zvcih2YXIgZixwPU1hdGgubWluKGMubGVuZ3RoLHIubGVuZ3RoKSxkPW5ldyBBcnJheShwKSxnPTAsdj0hMSxtPTA7bTxwO20rKyl7dmFyIHk9clttXXx8MCx4PSExOyhyW21dIT09b3x8bChlLm1lYXN1cmVbbV0pfHxzKGUubWVhc3VyZVttXSkpJiZtKzE8cCYmKHJbbSsxXSE9PW98fGwoZS5tZWFzdXJlW20rMV0pfHxzKGUubWVhc3VyZVttKzFdKSkmJih4PSEwKTt2YXIgYj1kW21dPXtpOm0scDpjW21dLHM6eSxyYXdTOnksY05leHQ6eH07cyhlLm1lYXN1cmVbbV0pPyhnPWIucyxiLmlzU3VtPSEwLGIuZGlyPVwidG90YWxzXCIsYi5zPWcpOmwoZS5tZWFzdXJlW21dKT8oYi5pc1N1bT0hMCxiLmRpcj1cInRvdGFsc1wiLGIucz1nKTooYi5pc1N1bT0hMSxiLmRpcj1iLnJhd1M8MD9cImRlY3JlYXNpbmdcIjpcImluY3JlYXNpbmdcIixmPWIucyxiLnM9ZytmLGcrPWYpLFwidG90YWxzXCI9PT1iLmRpciYmKHY9ITApLGUuaWRzJiYoYi5pZD1TdHJpbmcoZS5pZHNbbV0pKX1yZXR1cm4gZC5sZW5ndGgmJihkWzBdLmhhc1RvdGFscz12KSxpKGUudGV4dCxkLFwidHhcIiksaShlLmhvdmVydGV4dCxkLFwiaHR4XCIpLGEoZCxlKSxkfX0se1wiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvblwiOjEwNTR9XSwxMTgwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2Jhci9jcm9zc190cmFjZV9jYWxjXCIpLnNldEdyb3VwUG9zaXRpb25zO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYT10Ll9mdWxsTGF5b3V0LG89dC5fZnVsbERhdGEscz10LmNhbGNkYXRhLGw9ZS54YXhpcyxjPWUueWF4aXMsdT1bXSxoPVtdLGY9W107Zm9yKGk9MDtpPG8ubGVuZ3RoO2krKyl7dmFyIHA9b1tpXTshMD09PXAudmlzaWJsZSYmcC54YXhpcz09PWwuX2lkJiZwLnlheGlzPT09Yy5faWQmJlwid2F0ZXJmYWxsXCI9PT1wLnR5cGUmJihyPXNbaV0sXCJoXCI9PT1wLm9yaWVudGF0aW9uP2YucHVzaChyKTpoLnB1c2gociksdS5wdXNoKHIpKX12YXIgZD17X2Z1bGxMYXlvdXQ6e19heGlzTWF0Y2hHcm91cHM6YS5fYXhpc01hdGNoR3JvdXBzLF9hbGlnbm1lbnRPcHRzOmEuX2FsaWdubWVudE9wdHMsYmFybW9kZTphLndhdGVyZmFsbG1vZGUsYmFyZ2FwOmEud2F0ZXJmYWxsZ2FwLGJhcmdyb3VwZ2FwOmEud2F0ZXJmYWxsZ3JvdXBnYXB9fTtmb3IobihkLGwsYyxoKSxuKGQsYyxsLGYpLGk9MDtpPHUubGVuZ3RoO2krKyl7cj11W2ldO2Zvcih2YXIgZz0wO2c8ci5sZW5ndGg7ZysrKXt2YXIgdj1yW2ddOyExPT09di5pc1N1bSYmKHYuczArPTA9PT1nPzA6cltnLTFdLnMpfX19fSx7XCIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsY1wiOjg0Mn1dLDExODE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uL2Jhci9kZWZhdWx0c1wiKS5oYW5kbGVHcm91cGluZ0RlZmF1bHRzLGE9dChcIi4uL2Jhci9kZWZhdWx0c1wiKS5oYW5kbGVUZXh0LG89dChcIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHNcIikscz10KFwiLi9hdHRyaWJ1dGVzXCIpLGw9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksYz1cIiMzRDk5NzBcIix1PVwiI0ZGNDEzNlwiLGg9XCIjNDQ5OUZGXCI7ZnVuY3Rpb24gZih0LGUscil7dChlK1wiLm1hcmtlci5jb2xvclwiLHIpLHQoZStcIi5tYXJrZXIubGluZS5jb2xvclwiLGwuZGVmYXVsdExpbmUpLHQoZStcIi5tYXJrZXIubGluZS53aWR0aFwiKX1lLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLGkpe2Z1bmN0aW9uIGwocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1vKHQsZSxpLGwpPyhsKFwibWVhc3VyZVwiKSxsKFwib3JpZW50YXRpb25cIixlLngmJiFlLnk/XCJoXCI6XCJ2XCIpLGwoXCJiYXNlXCIpLGwoXCJvZmZzZXRcIiksbChcIndpZHRoXCIpLGwoXCJ0ZXh0XCIpLGwoXCJob3ZlcnRleHRcIiksbChcImhvdmVydGVtcGxhdGVcIiksYSh0LGUsaSxsLCExKSxmKGwsXCJpbmNyZWFzaW5nXCIsYyksZihsLFwiZGVjcmVhc2luZ1wiLHUpLGYobCxcInRvdGFsc1wiLGgpLGwoXCJjb25uZWN0b3IudmlzaWJsZVwiKSYmKGwoXCJjb25uZWN0b3IubW9kZVwiKSxsKFwiY29ubmVjdG9yLmxpbmUud2lkdGhcIikmJihsKFwiY29ubmVjdG9yLmxpbmUuY29sb3JcIiksbChcImNvbm5lY3Rvci5saW5lLmRhc2hcIikpKSk6ZS52aXNpYmxlPSExfSxjcm9zc1RyYWNlRGVmYXVsdHM6ZnVuY3Rpb24odCxlKXt2YXIgcixhO2Z1bmN0aW9uIG8odCl7cmV0dXJuIG4uY29lcmNlKGEuX2lucHV0LGEscyx0KX1pZihcImdyb3VwXCI9PT1lLndhdGVyZmFsbG1vZGUpZm9yKHZhciBsPTA7bDx0Lmxlbmd0aDtsKyspcj0oYT10W2xdKS5faW5wdXQsaShyLGEsZSxvKX0saGFuZGxlR3JvdXBpbmdEZWZhdWx0czppfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2Jhci9kZWZhdWx0c1wiOjg0MyxcIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHNcIjoxMDc4LFwiLi9hdHRyaWJ1dGVzXCI6MTE3OH1dLDExODI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIikuaG92ZXJMYWJlbFRleHQsaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKS5vcGFjaXR5LGE9dChcIi4uL2Jhci9ob3ZlclwiKS5ob3Zlck9uQmFycyxvPVwiXFx1MjViMlwiLHM9XCJcXHUyNWJjXCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe3ZhciBjPWEodCxlLHIsbCk7aWYoYyl7dmFyIHU9Yy5jZCxoPXVbMF0udHJhY2UsZj1cImhcIj09PWgub3JpZW50YXRpb24scD1mP3QueGE6dC55YSxkPXVbYy5pbmRleF0sZz1mP1wieFwiOlwieVwiLHY9ZC5pc1N1bT9kLmIrZC5zOmQucmF3UztpZihkLmlzU3VtKWNbZytcIkxhYmVsVmFsXCJdPW0odik7ZWxzZXtpZih2PjApYy5leHRyYVRleHQ9bSh2KStcIiBcIitvO2Vsc2V7aWYoISh2PDApKXJldHVybjtjLmV4dHJhVGV4dD1cIihcIittKC12KStcIikgXCIrc31jLmV4dHJhVGV4dCs9XCI8YnI+SW5pdGlhbDogXCIrbShkLmIrZC5zLXYpfXJldHVybiBjLmNvbG9yPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFtlLmRpcl0ubWFya2VyLG49ci5jb2xvcixhPXIubGluZS5jb2xvcixvPXIubGluZS53aWR0aDtpZihpKG4pKXJldHVybiBuO2lmKGkoYSkmJm8pcmV0dXJuIGF9KGgsZCksW2NdfWZ1bmN0aW9uIG0odCl7cmV0dXJuIG4ocCx0KX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9iYXIvaG92ZXJcIjo4NDV9XSwxMTgzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5sYXlvdXRBdHRyaWJ1dGVzPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIikuc3VwcGx5RGVmYXVsdHMsbi5jcm9zc1RyYWNlRGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIikuY3Jvc3NUcmFjZURlZmF1bHRzLG4uc3VwcGx5TGF5b3V0RGVmYXVsdHM9dChcIi4vbGF5b3V0X2RlZmF1bHRzXCIpLG4uY2FsYz10KFwiLi9jYWxjXCIpLG4uY3Jvc3NUcmFjZUNhbGM9dChcIi4vY3Jvc3NfdHJhY2VfY2FsY1wiKSxuLnBsb3Q9dChcIi4vcGxvdFwiKSxuLnN0eWxlPXQoXCIuL3N0eWxlXCIpLnN0eWxlLG4uaG92ZXJQb2ludHM9dChcIi4vaG92ZXJcIiksbi5zZWxlY3RQb2ludHM9dChcIi4uL2Jhci9zZWxlY3RcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJ3YXRlcmZhbGxcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIiksbi5jYXRlZ29yaWVzPVtcImNhcnRlc2lhblwiLFwic3ZnXCIsXCJvcmllbnRlZFwiLFwic2hvd0xlZ2VuZFwiLFwiem9vbVNjYWxlXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi4vYmFyL3NlbGVjdFwiOjg1MCxcIi4vYXR0cmlidXRlc1wiOjExNzgsXCIuL2NhbGNcIjoxMTc5LFwiLi9jcm9zc190cmFjZV9jYWxjXCI6MTE4MCxcIi4vZGVmYXVsdHNcIjoxMTgxLFwiLi9ob3ZlclwiOjExODIsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6MTE4NCxcIi4vbGF5b3V0X2RlZmF1bHRzXCI6MTE4NSxcIi4vcGxvdFwiOjExODYsXCIuL3N0eWxlXCI6MTE4N31dLDExODQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e3dhdGVyZmFsbG1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImdyb3VwXCIsXCJvdmVybGF5XCJdLGRmbHQ6XCJncm91cFwiLGVkaXRUeXBlOlwiY2FsY1wifSx3YXRlcmZhbGxnYXA6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxlZGl0VHlwZTpcImNhbGNcIn0sd2F0ZXJmYWxsZ3JvdXBnYXA6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6XCJjYWxjXCJ9fX0se31dLDExODU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT0hMTtmdW5jdGlvbiBvKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9Zm9yKHZhciBzPTA7czxyLmxlbmd0aDtzKyspe3ZhciBsPXJbc107aWYobC52aXNpYmxlJiZcIndhdGVyZmFsbFwiPT09bC50eXBlKXthPSEwO2JyZWFrfX1hJiYobyhcIndhdGVyZmFsbG1vZGVcIiksbyhcIndhdGVyZmFsbGdhcFwiLC4yKSxvKFwid2F0ZXJmYWxsZ3JvdXBnYXBcIikpfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjExODR9XSwxMTg2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksbz10KFwiLi4vYmFyL3Bsb3RcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe28odCxlLHIscyksZnVuY3Rpb24odCxlLHIsbyl7dmFyIHM9ZS54YXhpcyxsPWUueWF4aXM7aS5tYWtlVHJhY2VHcm91cHMobyxyLFwidHJhY2UgYmFyc1wiKS5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBvPW4uc2VsZWN0KHRoaXMpLGM9clswXSx1PWMudHJhY2UsaD1pLmVuc3VyZVNpbmdsZShvLFwiZ1wiLFwibGluZXNcIik7aWYodS5jb25uZWN0b3ImJnUuY29ubmVjdG9yLnZpc2libGUpe3ZhciBmPVwiaFwiPT09dS5vcmllbnRhdGlvbixwPXUuY29ubmVjdG9yLm1vZGU7ZS5pc1JhbmdlUGxvdHx8KGMubm9kZTM9byk7dmFyIGQ9aC5zZWxlY3RBbGwoXCJnLmxpbmVcIikuZGF0YShpLmlkZW50aXR5KTtkLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwibGluZVwiLCEwKSxkLmV4aXQoKS5yZW1vdmUoKTt2YXIgZz1kLnNpemUoKTtkLmVhY2goZnVuY3Rpb24ocixvKXtpZihvPT09Zy0xfHxyLmNOZXh0KXt2YXIgYyxoLGQsdixtLHkseCxiLF89bi5zZWxlY3QodGhpcyksdz1cIlwiLGs9MDtvKzE8ZyYmQXJyYXkuaXNBcnJheSh1Lm9mZnNldCkmJihrLT11Lm9mZnNldFtvKzFdLXUub2Zmc2V0W29dKSxmPyhjPXMuYzJwKHIuczEsITApLGg9bC5jMnAoci5wMSwhMCksZD1zLmMycChyLnMwLCEwKSx2PWwuYzJwKHIucDAsITApLG09cy5jMnAoci5zMSwhMCkseT1sLmMycChyLnAxLCEwKSxvKzE8ZyYmKHg9cy5jMnAoci5zMCsxLWssITApLGI9bC5jMnAoci5wMCsxLWssITApKSk6KGM9cy5jMnAoci5wMSwhMCksaD1sLmMycChyLnMxLCEwKSxkPXMuYzJwKHIucDAsITApLHY9bC5jMnAoci5zMCwhMCksbT1zLmMycChyLnAxLCEwKSx5PWwuYzJwKHIuczEsITApLG8rMTxnJiYoeD1zLmMycChyLnAwKzEtaywhMCksYj1sLmMycChyLnMwKzEtaywhMCkpKSxcInNwYW5uaW5nXCI9PT1wJiYhci5pc1N1bSYmbz4wJiYodys9Zj9cIk1cIitkK1wiLFwiK2grXCJWXCIrdjpcIk1cIitjK1wiLFwiK3YrXCJIXCIrZCksXCJiZXR3ZWVuXCIhPT1wJiYoci5pc1N1bXx8bzxnLTEpJiYodys9Zj9cIk1cIittK1wiLFwiK3YrXCJWXCIreTpcIk1cIitkK1wiLFwiK3krXCJIXCIrbSksdm9pZCAwIT09eCYmdm9pZCAwIT09YiYmKHcrPWY/XCJNXCIrbStcIixcIit5K1wiVlwiK2I6XCJNXCIrbStcIixcIit5K1wiSFwiK3gpLGkuZW5zdXJlU2luZ2xlKF8sXCJwYXRoXCIpLmF0dHIoXCJkXCIsdykuY2FsbChhLnNldENsaXBVcmwsZS5sYXllckNsaXBJZCx0KX19KX1lbHNlIGgucmVtb3ZlKCl9KX0odCxlLHIscyl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi9iYXIvcGxvdFwiOjg0OSxkMzoxNTV9XSwxMTg3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLG89dChcIi4uL2Jhci9zdHlsZVwiKS5zdHlsZVRleHRQb2ludHM7ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUpe3ZhciByPWU/ZVswXS5ub2RlMzpuLnNlbGVjdCh0KS5zZWxlY3RBbGwoXCJnLndhdGVyZmFsbGxheWVyXCIpLnNlbGVjdEFsbChcImcudHJhY2VcIik7ci5zdHlsZShcIm9wYWNpdHlcIixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSksci5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLHM9ZVswXS50cmFjZTtyLnNlbGVjdEFsbChcIi5wb2ludCA+IHBhdGhcIikuZWFjaChmdW5jdGlvbih0KXtpZighdC5pc0JsYW5rKXt2YXIgZT1zW3QuZGlyXS5tYXJrZXI7bi5zZWxlY3QodGhpcykuY2FsbChhLmZpbGwsZS5jb2xvcikuY2FsbChhLnN0cm9rZSxlLmxpbmUuY29sb3IpLmNhbGwoaS5kYXNoTGluZSxlLmxpbmUuZGFzaCxlLmxpbmUud2lkdGgpLnN0eWxlKFwib3BhY2l0eVwiLHMuc2VsZWN0ZWRwb2ludHMmJiF0LnNlbGVjdGVkPy4zOjEpfX0pLG8ocixzLHQpLHIuc2VsZWN0QWxsKFwiLmxpbmVzXCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxlPXMuY29ubmVjdG9yLmxpbmU7aS5saW5lR3JvdXBTdHlsZSh0LnNlbGVjdEFsbChcInBhdGhcIiksZS53aWR0aCxlLmNvbG9yLGUuZGFzaCl9KX0pfX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi9iYXIvc3R5bGVcIjo4NTIsZDM6MTU1fV0sMTE4ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxpPXQoXCIuLi9saWJcIiksYT10KFwiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWFcIiksbz10KFwiLi9oZWxwZXJzXCIpLnBvaW50c0FjY2Vzc29yRnVuY3Rpb24scz10KFwiLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKS5CQUROVU07ci5tb2R1bGVUeXBlPVwidHJhbnNmb3JtXCIsci5uYW1lPVwiYWdncmVnYXRlXCI7dmFyIGw9ci5hdHRyaWJ1dGVzPXtlbmFibGVkOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LGdyb3Vwczp7dmFsVHlwZTpcInN0cmluZ1wiLHN0cmljdDohMCxub0JsYW5rOiEwLGFycmF5T2s6ITAsZGZsdDpcInhcIixlZGl0VHlwZTpcImNhbGNcIn0sYWdncmVnYXRpb25zOntfaXNMaW5rZWRUb0FycmF5OlwiYWdncmVnYXRpb25cIix0YXJnZXQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcImNhbGNcIn0sZnVuYzp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiY291bnRcIixcInN1bVwiLFwiYXZnXCIsXCJtZWRpYW5cIixcIm1vZGVcIixcInJtc1wiLFwic3RkZGV2XCIsXCJtaW5cIixcIm1heFwiLFwiZmlyc3RcIixcImxhc3RcIixcImNoYW5nZVwiLFwicmFuZ2VcIl0sZGZsdDpcImZpcnN0XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGZ1bmNtb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJzYW1wbGVcIixcInBvcHVsYXRpb25cIl0sZGZsdDpcInNhbXBsZVwiLGVkaXRUeXBlOlwiY2FsY1wifSxlbmFibGVkOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0sYz1sLmFnZ3JlZ2F0aW9ucztmdW5jdGlvbiB1KHQsZSxyLGEpe2lmKGEuZW5hYmxlZCl7Zm9yKHZhciBvPWEudGFyZ2V0LGw9aS5uZXN0ZWRQcm9wZXJ0eShlLG8pLGM9bC5nZXQoKSx1PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5mdW5jLG49ZS5kMmMsaT1lLmMyZDtzd2l0Y2gocil7Y2FzZVwiY291bnRcIjpyZXR1cm4gaDtjYXNlXCJmaXJzdFwiOnJldHVybiBmO2Nhc2VcImxhc3RcIjpyZXR1cm4gcDtjYXNlXCJzdW1cIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBvPW4odFtlW2FdXSk7byE9PXMmJihyKz1vKX1yZXR1cm4gaShyKX07Y2FzZVwiYXZnXCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsYT0wLG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIGw9bih0W2Vbb11dKTtsIT09cyYmKHIrPWwsYSsrKX1yZXR1cm4gYT9pKHIvYSk6c307Y2FzZVwibWluXCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTEvMCxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBvPW4odFtlW2FdXSk7byE9PXMmJihyPU1hdGgubWluKHIsbykpfXJldHVybiByPT09MS8wP3M6aShyKX07Y2FzZVwibWF4XCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPS0xLzAsYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1uKHRbZVthXV0pO28hPT1zJiYocj1NYXRoLm1heChyLG8pKX1yZXR1cm4gcj09PS0xLzA/czppKHIpfTtjYXNlXCJyYW5nZVwiOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xLzAsYT0tMS8wLG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIGw9bih0W2Vbb11dKTtsIT09cyYmKHI9TWF0aC5taW4ocixsKSxhPU1hdGgubWF4KGEsbCkpfXJldHVybiBhPT09LTEvMHx8cj09PTEvMD9zOmkoYS1yKX07Y2FzZVwiY2hhbmdlXCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0W2VbMF1dKSxhPW4odFtlW2UubGVuZ3RoLTFdXSk7cmV0dXJuIHI9PT1zfHxhPT09cz9zOmkoYS1yKX07Y2FzZVwibWVkaWFuXCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIG89bih0W2VbYV1dKTtvIT09cyYmci5wdXNoKG8pfWlmKCFyLmxlbmd0aClyZXR1cm4gcztyLnNvcnQoKTt2YXIgbD0oci5sZW5ndGgtMSkvMjtyZXR1cm4gaSgocltNYXRoLmZsb29yKGwpXStyW01hdGguY2VpbChsKV0pLzIpfTtjYXNlXCJtb2RlXCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LGE9MCxvPXMsbD0wO2w8ZS5sZW5ndGg7bCsrKXt2YXIgYz1uKHRbZVtsXV0pO2lmKGMhPT1zKXt2YXIgdT1yW2NdPShyW2NdfHwwKSsxO3U+YSYmKGE9dSxvPWMpfX1yZXR1cm4gYT9pKG8pOnN9O2Nhc2VcInJtc1wiOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLGE9MCxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBsPW4odFtlW29dXSk7bCE9PXMmJihyKz1sKmwsYSsrKX1yZXR1cm4gYT9pKE1hdGguc3FydChyL2EpKTpzfTtjYXNlXCJzdGRkZXZcIjpyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgaSxhPTAsbz0wLGw9MSxjPXM7Zm9yKGk9MDtpPHIubGVuZ3RoJiZjPT09cztpKyspYz1uKGVbcltpXV0pO2lmKGM9PT1zKXJldHVybiBzO2Zvcig7aTxyLmxlbmd0aDtpKyspe3ZhciB1PW4oZVtyW2ldXSk7aWYodSE9PXMpe3ZhciBoPXUtYzthKz1oLG8rPWgqaCxsKyt9fXZhciBmPVwic2FtcGxlXCI9PT10LmZ1bmNtb2RlP2wtMTpsO3JldHVybiBmP01hdGguc3FydCgoby1hKmEvbCkvZik6MH19fShhLG4uZ2V0RGF0YUNvbnZlcnNpb25zKHQsZSxvLGMpKSxkPW5ldyBBcnJheShyLmxlbmd0aCksZz0wO2c8ci5sZW5ndGg7ZysrKWRbZ109dShjLHJbZ10pO2wuc2V0KGQpLFwiY291bnRcIj09PWEuZnVuYyYmaS5wdXNoVW5pcXVlKGUuX2FycmF5QXR0cnMsbyl9fWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gZS5sZW5ndGh9ZnVuY3Rpb24gZih0LGUpe3JldHVybiB0W2VbMF1dfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gdFtlW2UubGVuZ3RoLTFdXX1yLnN1cHBseURlZmF1bHRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj17fTtmdW5jdGlvbiBvKGUscil7cmV0dXJuIGkuY29lcmNlKHQsbixsLGUscil9aWYoIW8oXCJlbmFibGVkXCIpKXJldHVybiBuO3ZhciBzPWEuZmluZEFycmF5QXR0cmlidXRlcyhlKSx1PXt9O2ZvcihyPTA7cjxzLmxlbmd0aDtyKyspdVtzW3JdXT0xO3ZhciBoPW8oXCJncm91cHNcIik7aWYoIUFycmF5LmlzQXJyYXkoaCkpe2lmKCF1W2hdKXJldHVybiBuLmVuYWJsZWQ9ITEsbjt1W2hdPTB9dmFyIGYscD10LmFnZ3JlZ2F0aW9uc3x8W10sZD1uLmFnZ3JlZ2F0aW9ucz1uZXcgQXJyYXkocC5sZW5ndGgpO2Z1bmN0aW9uIGcodCxlKXtyZXR1cm4gaS5jb2VyY2UocFtyXSxmLGMsdCxlKX1mb3Iocj0wO3I8cC5sZW5ndGg7cisrKXtmPXtfaW5kZXg6cn07dmFyIHY9ZyhcInRhcmdldFwiKSxtPWcoXCJmdW5jXCIpO2coXCJlbmFibGVkXCIpJiZ2JiYodVt2XXx8XCJjb3VudFwiPT09bSYmdm9pZCAwPT09dVt2XSk/KFwic3RkZGV2XCI9PT1tJiZnKFwiZnVuY21vZGVcIiksdVt2XT0wLGRbcl09Zik6ZFtyXT17ZW5hYmxlZDohMSxfaW5kZXg6cn19Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKyl1W3Nbcl1dJiZkLnB1c2goe3RhcmdldDpzW3JdLGZ1bmM6Yy5mdW5jLmRmbHQsZW5hYmxlZDohMCxfaW5kZXg6LTF9KTtyZXR1cm4gbn0sci5jYWxjVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXtpZihyLmVuYWJsZWQpe3ZhciBuPXIuZ3JvdXBzLGE9aS5nZXRUYXJnZXRBcnJheShlLHt0YXJnZXQ6bn0pO2lmKGEpe3ZhciBzLGwsYyxoLGY9e30scD17fSxkPVtdLGc9byhlLnRyYW5zZm9ybXMsciksdj1hLmxlbmd0aDtmb3IoZS5fbGVuZ3RoJiYodj1NYXRoLm1pbih2LGUuX2xlbmd0aCkpLHM9MDtzPHY7cysrKXZvaWQgMD09PShjPWZbbD1hW3NdXSk/KGZbbF09ZC5sZW5ndGgsaD1bc10sZC5wdXNoKGgpLHBbZltsXV09ZyhzKSk6KGRbY10ucHVzaChzKSxwW2ZbbF1dPShwW2ZbbF1dfHxbXSkuY29uY2F0KGcocykpKTtyLl9pbmRleFRvUG9pbnRzPXA7dmFyIG09ci5hZ2dyZWdhdGlvbnM7Zm9yKHM9MDtzPG0ubGVuZ3RoO3MrKyl1KHQsZSxkLG1bc10pO1wic3RyaW5nXCI9PXR5cGVvZiBuJiZ1KHQsZSxkLHt0YXJnZXQ6bixmdW5jOlwiZmlyc3RcIixlbmFibGVkOiEwfSksZS5fbGVuZ3RoPWQubGVuZ3RofX19fSx7XCIuLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vbGliXCI6NzAxLFwiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWFcIjo3MzgsXCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4vaGVscGVyc1wiOjExOTF9XSwxMTg5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2xpYlwiKSxpPXQoXCIuLi9yZWdpc3RyeVwiKSxhPXQoXCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxvPXQoXCIuL2hlbHBlcnNcIikucG9pbnRzQWNjZXNzb3JGdW5jdGlvbixzPXQoXCIuLi9jb25zdGFudHMvZmlsdGVyX29wc1wiKSxsPXMuQ09NUEFSSVNPTl9PUFMsYz1zLklOVEVSVkFMX09QUyx1PXMuU0VUX09QUztyLm1vZHVsZVR5cGU9XCJ0cmFuc2Zvcm1cIixyLm5hbWU9XCJmaWx0ZXJcIixyLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcImNhbGNcIn0sdGFyZ2V0Ont2YWxUeXBlOlwic3RyaW5nXCIsc3RyaWN0OiEwLG5vQmxhbms6ITAsYXJyYXlPazohMCxkZmx0OlwieFwiLGVkaXRUeXBlOlwiY2FsY1wifSxvcGVyYXRpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltdLmNvbmNhdChsKS5jb25jYXQoYykuY29uY2F0KHUpLGRmbHQ6XCI9XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHZhbHVlOnt2YWxUeXBlOlwiYW55XCIsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifSxwcmVzZXJ2ZWdhcHM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMSxlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LHIuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gYShpLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsci5hdHRyaWJ1dGVzLGksYSl9aWYoYShcImVuYWJsZWRcIikpe2EoXCJwcmVzZXJ2ZWdhcHNcIiksYShcIm9wZXJhdGlvblwiKSxhKFwidmFsdWVcIiksYShcInRhcmdldFwiKTt2YXIgbz1pLmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiaGFuZGxlRGVmYXVsdHNcIik7byh0LGUsXCJ2YWx1ZWNhbGVuZGFyXCIsbnVsbCksbyh0LGUsXCJ0YXJnZXRjYWxlbmRhclwiLG51bGwpfXJldHVybiBlfSxyLmNhbGNUcmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe2lmKHIuZW5hYmxlZCl7dmFyIGk9bi5nZXRUYXJnZXRBcnJheShlLHIpO2lmKGkpe3ZhciBzPXIudGFyZ2V0LGg9aS5sZW5ndGg7ZS5fbGVuZ3RoJiYoaD1NYXRoLm1pbihoLGUuX2xlbmd0aCkpO3ZhciBmPXIudGFyZ2V0Y2FsZW5kYXIscD1lLl9hcnJheUF0dHJzLGQ9ci5wcmVzZXJ2ZWdhcHM7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHMpe3ZhciBnPW4ubmVzdGVkUHJvcGVydHkoZSxzK1wiY2FsZW5kYXJcIikuZ2V0KCk7ZyYmKGY9Zyl9dmFyIHYsbSx5PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Lm9wZXJhdGlvbixpPXQudmFsdWUsYT1BcnJheS5pc0FycmF5KGkpO2Z1bmN0aW9uIG8odCl7cmV0dXJuLTEhPT10LmluZGV4T2Yobil9dmFyIHMsaD1mdW5jdGlvbihyKXtyZXR1cm4gZShyLDAsdC52YWx1ZWNhbGVuZGFyKX0sZj1mdW5jdGlvbih0KXtyZXR1cm4gZSh0LDAscil9O28obCk/cz1oKGE/aVswXTppKTpvKGMpP3M9YT9baChpWzBdKSxoKGlbMV0pXTpbaChpKSxoKGkpXTpvKHUpJiYocz1hP2kubWFwKGgpOltoKGkpXSk7c3dpdGNoKG4pe2Nhc2VcIj1cIjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGYodCk9PT1zfTtjYXNlXCIhPVwiOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZih0KSE9PXN9O2Nhc2VcIjxcIjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGYodCk8c307Y2FzZVwiPD1cIjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGYodCk8PXN9O2Nhc2VcIj5cIjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGYodCk+c307Y2FzZVwiPj1cIjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGYodCk+PXN9O2Nhc2VcIltdXCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWYodCk7cmV0dXJuIGU+PXNbMF0mJmU8PXNbMV19O2Nhc2VcIigpXCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWYodCk7cmV0dXJuIGU+c1swXSYmZTxzWzFdfTtjYXNlXCJbKVwiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPj1zWzBdJiZlPHNbMV19O2Nhc2VcIihdXCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWYodCk7cmV0dXJuIGU+c1swXSYmZTw9c1sxXX07Y2FzZVwiXVtcIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9Zih0KTtyZXR1cm4gZTw9c1swXXx8ZT49c1sxXX07Y2FzZVwiKShcIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9Zih0KTtyZXR1cm4gZTxzWzBdfHxlPnNbMV19O2Nhc2VcIl0oXCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWYodCk7cmV0dXJuIGU8PXNbMF18fGU+c1sxXX07Y2FzZVwiKVtcIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9Zih0KTtyZXR1cm4gZTxzWzBdfHxlPj1zWzFdfTtjYXNlXCJ7fVwiOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tMSE9PXMuaW5kZXhPZihmKHQpKX07Y2FzZVwifXtcIjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLTE9PT1zLmluZGV4T2YoZih0KSl9fX0ocixhLmdldERhdGFUb0Nvb3JkRnVuYyh0LGUscyxpKSxmKSx4PXt9LGI9e30sXz0wO2Q/KHY9ZnVuY3Rpb24odCl7eFt0LmFzdHJdPW4uZXh0ZW5kRGVlcChbXSx0LmdldCgpKSx0LnNldChuZXcgQXJyYXkoaCkpfSxtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9eFt0LmFzdHJdW2VdO3QuZ2V0KClbZV09cn0pOih2PWZ1bmN0aW9uKHQpe3hbdC5hc3RyXT1uLmV4dGVuZERlZXAoW10sdC5nZXQoKSksdC5zZXQoW10pfSxtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9eFt0LmFzdHJdW2VdO3QuZ2V0KCkucHVzaChyKX0pLEEodik7Zm9yKHZhciB3PW8oZS50cmFuc2Zvcm1zLHIpLGs9MDtrPGg7aysrKXt5KGlba10pPyhBKG0sayksYltfKytdPXcoaykpOmQmJl8rK31yLl9pbmRleFRvUG9pbnRzPWIsZS5fbGVuZ3RoPV99fWZ1bmN0aW9uIEEodCxyKXtmb3IodmFyIGk9MDtpPHAubGVuZ3RoO2krKyl7dChuLm5lc3RlZFByb3BlcnR5KGUscFtpXSkscil9fX19LHtcIi4uL2NvbnN0YW50cy9maWx0ZXJfb3BzXCI6Njc0LFwiLi4vbGliXCI6NzAxLFwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9yZWdpc3RyeVwiOjgyOSxcIi4vaGVscGVyc1wiOjExOTF9XSwxMTkwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2xpYlwiKSxpPXQoXCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYVwiKSxhPXQoXCIuLi9wbG90cy9wbG90c1wiKSxvPXQoXCIuL2hlbHBlcnNcIikucG9pbnRzQWNjZXNzb3JGdW5jdGlvbjtmdW5jdGlvbiBzKHQsZSl7dmFyIHIscyxsLGMsdSxoLGYscCxkLGcsdj1lLnRyYW5zZm9ybSxtPWUudHJhbnNmb3JtSW5kZXgseT10LnRyYW5zZm9ybXNbbV0uZ3JvdXBzLHg9byh0LnRyYW5zZm9ybXMsdik7aWYoIUFycmF5LmlzQXJyYXkoeSl8fDA9PT15Lmxlbmd0aClyZXR1cm5bdF07dmFyIGI9bi5maWx0ZXJVbmlxdWUoeSksXz1uZXcgQXJyYXkoYi5sZW5ndGgpLHc9eS5sZW5ndGgsaz1pLmZpbmRBcnJheUF0dHJpYnV0ZXModCksQT12LnN0eWxlc3x8W10sVD17fTtmb3Iocj0wO3I8QS5sZW5ndGg7cisrKVRbQVtyXS50YXJnZXRdPUFbcl0udmFsdWU7di5zdHlsZXMmJihnPW4ua2V5ZWRDb250YWluZXIodixcInN0eWxlc1wiLFwidGFyZ2V0XCIsXCJ2YWx1ZS5uYW1lXCIpKTt2YXIgTT17fSxTPXt9O2ZvcihyPTA7cjxiLmxlbmd0aDtyKyspe01baD1iW3JdXT1yLFNbaF09MCwoZj1fW3JdPW4uZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LHQpKS5fZ3JvdXA9aCxmLnRyYW5zZm9ybXNbbV0uX2luZGV4VG9Qb2ludHM9e307dmFyIEU9bnVsbDtmb3IoZyYmKEU9Zy5nZXQoaCkpLGYubmFtZT1FfHxcIlwiPT09RT9FOm4udGVtcGxhdGVTdHJpbmcodi5uYW1lZm9ybWF0LHt0cmFjZTp0Lm5hbWUsZ3JvdXA6aH0pLHA9Zi50cmFuc2Zvcm1zLGYudHJhbnNmb3Jtcz1bXSxzPTA7czxwLmxlbmd0aDtzKyspZi50cmFuc2Zvcm1zW3NdPW4uZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LHBbc10pO2ZvcihzPTA7czxrLmxlbmd0aDtzKyspbi5uZXN0ZWRQcm9wZXJ0eShmLGtbc10pLnNldChbXSl9Zm9yKGw9MDtsPGsubGVuZ3RoO2wrKyl7Zm9yKGM9a1tsXSxzPTAsZD1bXTtzPGIubGVuZ3RoO3MrKylkW3NdPW4ubmVzdGVkUHJvcGVydHkoX1tzXSxjKS5nZXQoKTtmb3IodT1uLm5lc3RlZFByb3BlcnR5KHQsYykuZ2V0KCkscz0wO3M8dztzKyspZFtNW3lbc11dXS5wdXNoKHVbc10pfWZvcihzPTA7czx3O3MrKyl7KGY9X1tNW3lbc11dXSkudHJhbnNmb3Jtc1ttXS5faW5kZXhUb1BvaW50c1tTW3lbc11dXT14KHMpLFNbeVtzXV0rK31mb3Iocj0wO3I8Yi5sZW5ndGg7cisrKWg9YltyXSxmPV9bcl0sYS5jbGVhckV4cGFuZGVkVHJhY2VEZWZhdWx0Q29sb3JzKGYpLGY9bi5leHRlbmREZWVwTm9BcnJheXMoZixUW2hdfHx7fSk7cmV0dXJuIF99ci5tb2R1bGVUeXBlPVwidHJhbnNmb3JtXCIsci5uYW1lPVwiZ3JvdXBieVwiLHIuYXR0cmlidXRlcz17ZW5hYmxlZDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSxncm91cHM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZGZsdDpbXSxlZGl0VHlwZTpcImNhbGNcIn0sbmFtZWZvcm1hdDp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwiY2FsY1wifSxzdHlsZXM6e19pc0xpbmtlZFRvQXJyYXk6XCJzdHlsZVwiLHRhcmdldDp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwiY2FsY1wifSx2YWx1ZTp7dmFsVHlwZTpcImFueVwiLGRmbHQ6e30sZWRpdFR5cGU6XCJjYWxjXCIsX2NvbXBhcmVBc0pTT046ITB9LGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0sci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0LGUsaSl7dmFyIGEsbz17fTtmdW5jdGlvbiBzKGUsaSl7cmV0dXJuIG4uY29lcmNlKHQsbyxyLmF0dHJpYnV0ZXMsZSxpKX1pZighcyhcImVuYWJsZWRcIikpcmV0dXJuIG87cyhcImdyb3Vwc1wiKSxzKFwibmFtZWZvcm1hdFwiLGkuX2RhdGFMZW5ndGg+MT9cIiV7Z3JvdXB9ICgle3RyYWNlfSlcIjpcIiV7Z3JvdXB9XCIpO3ZhciBsPXQuc3R5bGVzLGM9by5zdHlsZXM9W107aWYobClmb3IoYT0wO2E8bC5sZW5ndGg7YSsrKXt2YXIgdT1jW2FdPXt9O24uY29lcmNlKGxbYV0sY1thXSxyLmF0dHJpYnV0ZXMuc3R5bGVzLFwidGFyZ2V0XCIpO3ZhciBoPW4uY29lcmNlKGxbYV0sY1thXSxyLmF0dHJpYnV0ZXMuc3R5bGVzLFwidmFsdWVcIik7bi5pc1BsYWluT2JqZWN0KGgpP3UudmFsdWU9bi5leHRlbmREZWVwKHt9LGgpOmgmJmRlbGV0ZSB1LnZhbHVlfXJldHVybiBvfSxyLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPVtdO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspZm9yKHI9cyh0W25dLGUpLGk9MDtpPHIubGVuZ3RoO2krKylhLnB1c2gocltpXSk7cmV0dXJuIGF9fSx7XCIuLi9saWJcIjo3MDEsXCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYVwiOjczOCxcIi4uL3Bsb3RzL3Bsb3RzXCI6ODEwLFwiLi9oZWxwZXJzXCI6MTE5MX1dLDExOTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLnBvaW50c0FjY2Vzc29yRnVuY3Rpb249ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpPTA7aTx0Lmxlbmd0aCYmKHI9dFtpXSkhPT1lO2krKylyLl9pbmRleFRvUG9pbnRzJiYhMSE9PXIuZW5hYmxlZCYmKG49ci5faW5kZXhUb1BvaW50cyk7cmV0dXJuIG4/ZnVuY3Rpb24odCl7cmV0dXJuIG5bdF19OmZ1bmN0aW9uKHQpe3JldHVyblt0XX19fSx7fV0sMTE5MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9saWJcIiksaT10KFwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksYT10KFwiLi9oZWxwZXJzXCIpLnBvaW50c0FjY2Vzc29yRnVuY3Rpb247ci5tb2R1bGVUeXBlPVwidHJhbnNmb3JtXCIsci5uYW1lPVwic29ydFwiLHIuYXR0cmlidXRlcz17ZW5hYmxlZDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSx0YXJnZXQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixzdHJpY3Q6ITAsbm9CbGFuazohMCxhcnJheU9rOiEwLGRmbHQ6XCJ4XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LG9yZGVyOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhc2NlbmRpbmdcIixcImRlc2NlbmRpbmdcIl0sZGZsdDpcImFzY2VuZGluZ1wiLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0sci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiBpKGksYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxyLmF0dHJpYnV0ZXMsaSxhKX1yZXR1cm4gaShcImVuYWJsZWRcIikmJihpKFwidGFyZ2V0XCIpLGkoXCJvcmRlclwiKSksZX0sci5jYWxjVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXtpZihyLmVuYWJsZWQpe3ZhciBvPW4uZ2V0VGFyZ2V0QXJyYXkoZSxyKTtpZihvKXt2YXIgcz1yLnRhcmdldCxsPW8ubGVuZ3RoO2UuX2xlbmd0aCYmKGw9TWF0aC5taW4obCxlLl9sZW5ndGgpKTt2YXIgYyx1LGg9ZS5fYXJyYXlBdHRycyxmPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9bmV3IEFycmF5KG4pLG89bmV3IEFycmF5KG4pO2ZvcihpPTA7aTxuO2krKylhW2ldPXt2OmVbaV0saTppfTtmb3IoYS5zb3J0KGZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQub3JkZXIpe2Nhc2VcImFzY2VuZGluZ1wiOnJldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBlKHQudiktZShyLnYpfTtjYXNlXCJkZXNjZW5kaW5nXCI6cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIGUoci52KS1lKHQudil9fX0odCxyKSksaT0wO2k8bjtpKyspb1tpXT1hW2ldLmk7cmV0dXJuIG99KHIsbyxpLmdldERhdGFUb0Nvb3JkRnVuYyh0LGUscyxvKSxsKSxwPWEoZS50cmFuc2Zvcm1zLHIpLGQ9e307Zm9yKGM9MDtjPGgubGVuZ3RoO2MrKyl7dmFyIGc9bi5uZXN0ZWRQcm9wZXJ0eShlLGhbY10pLHY9Zy5nZXQoKSxtPW5ldyBBcnJheShsKTtmb3IodT0wO3U8bDt1KyspbVt1XT12W2ZbdV1dO2cuc2V0KG0pfWZvcih1PTA7dTxsO3UrKylkW3VdPXAoZlt1XSk7ci5faW5kZXhUb1BvaW50cz1kLGUuX2xlbmd0aD1sfX19fSx7XCIuLi9saWJcIjo3MDEsXCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4vaGVscGVyc1wiOjExOTF9XX0se30sWzIyXSkoMjIpfSk7IiwibGV0IGhlbHAgPSByZXF1aXJlKCcuL3BhZ2UtaGVscCcpXG5cbmxldCB0ZW1wbGF0ZXMgPSB7XG4gICAgICAgIGlucHV0IDogKG1vZGFsSUQsIGlucHV0SUQsIHRpdGxlLCBsYWJlbCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgICAgPGRpdiBpZD0ke21vZGFsSUR9IGNsYXNzPVwibW9kYWxcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+JHt0aXRsZX08L2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ke2lucHV0SUR9PiR7bGFiZWx9PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPSR7aW5wdXRJRH0gbmFtZT0ke2lucHV0SUR9IHNpemU9XCIzMFwiIGF1dG9mb2N1cyB2YWx1ZT1cIiR7dmFsdWV9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBvay1tb2RlbC1idG4gYm94LXNoYWRvd1wiPk9LPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IGJveC1zaGFkb3dcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPkNsb3NlPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+YFxuICAgICAgICB9LFxuICAgICAgICBtZXNzYWdlIDogKG1vZGFsSUQsIHRpdGxlLCBtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9JHttb2RhbElEfSBjbGFzcz1cIm1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+ICR7dGl0bGV9IDwvaDU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cD4gJHttZXNzYWdlfSA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBib3gtc2hhZG93XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5DbG9zZTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PmBcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlybWF0aW9uIDogKG1vZGFsSUQsIHRpdGxlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9JHttb2RhbElEfSBjbGFzcz1cIm1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+ICR7dGl0bGV9IDwvaDU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHllcy1tb2RhbC1idG4gYm94LXNoYWRvd1wiPlllczwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBib3gtc2hhZG93XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5ObzwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PmBcbiAgICAgICAgfSxcbiAgICAgICAgdXBsb2FkIDogKG1vZGFsSUQsIHRpdGxlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9JHttb2RhbElEfSBjbGFzcz1cIm1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+ICR7dGl0bGV9IDwvaDU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmVydGljbGUtc3BhY2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmxpbmVcIiBmb3I9XCJkYXRhZmlsZVwiPlBsZWFzZSBzcGVjaWZ5IGEgZmlsZSB0byBpbXBvcnQ6IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiZmlsZUZvclVwbG9hZFwiIHR5cGU9XCJmaWxlXCIgaWQ9XCJkYXRhZmlsZVwiIG5hbWU9XCJkYXRhZmlsZVwiIHNpemU9XCIzMFwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmVydGljbGUtc3BhY2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmxpbmVcIiBmb3I9XCJmaWxlTmFtZUlucHV0XCI+TmV3IGZpbGUgbmFtZSAob3B0aW9uYWwpOiA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiZmlsZU5hbWVJbnB1dFwiIG5hbWU9XCJmaWxlTmFtZUlucHV0XCIgc2l6ZT1cIjMwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBib3gtc2hhZG93IHVwbG9hZC1tb2RhbC1idG5cIiBkaXNhYmxlZD5VcGxvYWQ8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYm94LXNoYWRvd1wiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+YFxuICAgICAgICB9XG4gICAgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBkZWxldGVGaWxlSHRtbCA6IChmaWxlVHlwZSkgPT4ge1xuICAgICAgICBsZXQgbW9kYWxJRCA9IFwiZGVsZXRlRmlsZU1vZGFsXCJcbiAgICAgICAgbGV0IHRpdGxlID0gYFBlcm1hbmVudGx5IGRlbGV0ZSB0aGlzICR7ZmlsZVR5cGV9P2BcblxuICAgICAgICByZXR1cm4gdGVtcGxhdGVzLmNvbmZpcm1hdGlvbihtb2RhbElELCB0aXRsZSlcbiAgICB9LFxuICAgIG9wZXJhdGlvbkluZm9Nb2RhbEh0bWwgOiAocGFnZSkgPT4ge1xuICAgICAgICBsZXQgbW9kYWxJRCA9IFwib3BlcmF0aW9uSW5mb01vZGFsXCJcbiAgICAgICAgbGV0IHRpdGxlID0gXCJIZWxwXCJcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSBoZWxwW3BhZ2VdXG4gICAgICAgICAgXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZXMubWVzc2FnZShtb2RhbElELCB0aXRsZSwgbWVzc2FnZSlcbiAgICB9LFxuICAgIHJlbmRlckNyZWF0ZU1vZGFsSHRtbCA6IChpc01vZGVsLCBpc1NwYXRpYWwpID0+IHtcbiAgICAgICAgdmFyIHRpdGxlID0gJ0RpcmVjdG9yeSc7XG4gICAgICAgIGlmKGlzTW9kZWwpe1xuICAgICAgICAgICAgdGl0bGUgPSBpc1NwYXRpYWwgPyAnU3BhdGlhbCBNb2RlbCcgOiAnTm9uLVNwYXRpYWwgTW9kZWwnO1xuICAgICAgICB9XG4gICAgICAgIHRpdGxlID0gXCJOZXcgXCIgKyB0aXRsZVxuICAgICAgICBsZXQgbW9kYWxJRCA9IFwibmV3TW9kYWxNb2RlbFwiXG4gICAgICAgIGxldCBpbnB1dElEID0gXCJtb2RlbE5hbWVJbnB1dFwiXG4gICAgICAgIGxldCBsYWJlbCA9IFwiTmFtZTpcIlxuICAgICAgICBsZXQgdmFsdWUgPSBcIlwiXG4gICAgICAgIFxuICAgICAgICByZXR1cm4gdGVtcGxhdGVzLmlucHV0KG1vZGFsSUQsIGlucHV0SUQsIHRpdGxlLCBsYWJlbCwgdmFsdWUpXG4gICAgfSxcbiAgICBzYm1sVG9Nb2RlbEh0bWwgOiAodGl0bGUsIGVycm9ycykgPT4ge1xuICAgICAgICBsZXQgbW9kYWxJRCA9IFwic2JtbFRvTW9kZWxNb2RhbFwiXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBlcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmKGVycm9yc1tpXS5zdGFydHNXaXRoKFwiU0JNTCBFcnJvclwiKSB8fCBlcnJvcnNbaV0uc3RhcnRzV2l0aChcIkVycm9yXCIpKXtcbiAgICAgICAgICAgICAgICBlcnJvcnNbaV0gPSBcIjxiPkVycm9yPC9iPjogXCIgKyBlcnJvcnNbaV1cbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGVycm9yc1tpXSA9IFwiPGI+V2FybmluZzwvYj46IFwiICsgZXJyb3JzW2ldXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1lc3NhZ2UgPSBlcnJvcnMuam9pbihcIjxicj5cIilcblxuICAgICAgICByZXR1cm4gdGVtcGxhdGVzLm1lc3NhZ2UobW9kYWxJRCwgdGl0bGUsIG1lc3NhZ2UpXG4gICAgfSxcbiAgICB1cGxvYWRGaWxlRXJyb3JzSHRtbCA6IChmaWxlLCB0eXBlLCBzdGF0dXNNZXNzYWdlLCBlcnJvcnMpID0+IHtcbiAgICAgICAgbGV0IG1vZGFsSUQgPSBcInNibWxUb01vZGVsTW9kYWxcIlxuICAgICAgICBsZXQgdGl0bGUgPSBgRXJyb3JzIHVwbG9hZGluZyAke2ZpbGV9IGFzIGEgJHt0eXBlfSBmaWxlYFxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgZXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBlcnJvcnNbaV0gPSBcIjxiPkVycm9yPC9iPjogXCIgKyBlcnJvcnNbaV1cbiAgICAgICAgfVxuICAgICAgICBsZXQgbWVzc2FnZSA9IGA8cD4ke2Vycm9ycy5qb2luKFwiPGJyPlwiKX08L3A+PHA+PGI+VXBsb2FkIHN0YXR1czwvYj46ICR7c3RhdHVzTWVzc2FnZX08L3A+YFxuXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZXMubWVzc2FnZShtb2RhbElELCB0aXRsZSwgbWVzc2FnZSlcbiAgICB9LFxuICAgIHVwbG9hZEZpbGVIdG1sIDogKHR5cGUpID0+IHtcbiAgICAgICAgbGV0IG1vZGFsSUQgPSBcInVwbG9hZEZpbGVNb2RhbFwiXG4gICAgICAgIGxldCB0aXRsZSA9IGBVcGxvYWQgYSAke3R5cGV9YFxuXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZXMudXBsb2FkKG1vZGFsSUQsIHRpdGxlKVxuICAgIH0sXG4gICAgZHVwbGljYXRlV29ya2Zsb3dIdG1sIDogKHdrZmxGaWxlLCBib2R5KSA9PiB7XG4gICAgICAgIGxldCBtb2RhbElEID0gXCJkdXBsaWNhdGVXb3JrZmxvd01vZGFsXCJcbiAgICAgICAgbGV0IHRpdGxlID0gYE1vZGVsIGZvciAke3drZmxGaWxlfWBcblxuICAgICAgICByZXR1cm4gdGVtcGxhdGVzLm1lc3NhZ2UobW9kYWxJRCwgdGl0bGUsIGJvZHkpXG4gICAgfSxcbiAgICBtb2RlbE5vdEZvdW5kSHRtbCA6ICh0aXRsZSwgZXJyb3JNZXNzYWdlKSA9PiB7XG4gICAgICAgIGxldCBtb2RhbElEID0gXCJtb2RlbE5vdEZvdW5kTW9kYWxcIlxuICAgICAgICBsZXQgbWVzc2FnZSA9IGA8cD4ke2Vycm9yTWVzc2FnZX08L3A+PHA+UGxlYXNlIGNvcnJlY3QgdGhlIG1vZGVsIHBhdGggYW5kIHByZXNzIGVudGVyIHRvIHJlc2V0IHRoZSB3b3JrZmxvdy48L3A+YFxuXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZXMubWVzc2FnZShtb2RhbElELCB0aXRsZSwgbWVzc2FnZSlcbiAgICB9LFxuICAgIGFubm90YXRpb25Nb2RhbEh0bWwgOiAodHlwZSwgbmFtZSwgYW5ub3RhdGlvbikgPT4ge1xuICAgICAgICBsZXQgbW9kYWxJRCA9IGAke3R5cGV9QW5ub3RhdGlvbk1vZGFsYFxuICAgICAgICBsZXQgaW5wdXRJRCA9IGAke3R5cGV9QW5ub3RhdGlvbklucHV0YFxuICAgICAgICBsZXQgdGl0bGUgPSBgQW5ub3RhdGlvbiBmb3IgJHtuYW1lfWBcbiAgICAgICAgbGV0IGxhYmVsID0gXCJBbm5vdGF0aW9uOlwiXG5cbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlcy5pbnB1dChtb2RhbElELCBpbnB1dElELCB0aXRsZSwgbGFiZWwsIGFubm90YXRpb24pXG4gICAgfSxcbiAgICBtb2RlbFNhdmVFcnJvckh0bWwgOiAodGl0bGUsIGVycm9yKSA9PiB7XG4gICAgICAgIGxldCBtb2RhbElEID0gXCJtb2RlbFNhdmVFcnJvck1vZGFsXCJcblxuICAgICAgICByZXR1cm4gdGVtcGxhdGVzLm1lc3NhZ2UobW9kYWxJRCwgdGl0bGUsIGVycm9yKVxuICAgIH0sXG4gICAgbmV3RGlyZWN0b3J5RXJyb3JIdG1sIDogKHRpdGxlLCBlcnJvcikgPT4ge1xuICAgICAgICBsZXQgbW9kYWxJRCA9IFwibmV3RGlyZWN0b3J5RXJyb3JNb2RhbFwiXG5cbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlcy5tZXNzYWdlKG1vZGFsSUQsIHRpdGxlLCBlcnJvcilcbiAgICB9LFxuICAgIHJlbmRlckRlZmF1bHRNb2RlTW9kYWxIdG1sIDogKCkgPT4ge1xuICAgICAgICBsZXQgY29uY2VudHJhdGlvbkRlc2NpcHRpb24gPSBgU3BlY2llcyB3aWxsIG9ubHkgYmUgcmVwcmVzZW50ZWQgdXNpbmcgY29udGludW91cyAoZmxvYXRpbmcgcG9pbnQpIHZhbHVlcy5gO1xuICAgICAgICBsZXQgcG9wdWxhdGlvbkRlc2NyaXB0aW9uID0gYFBvcHVsYXRpb24gLSBTcGVjaWVzIHdpbGwgb25seSBiZSByZXByZXNlbnRlZCB1c2luZyBkaXNjcmV0ZSAoaW50ZWdlciBjb3VudCkgdmFsdWVzLmA7XG4gICAgICAgIGxldCBoeWJyaWREZXNjcmlwdGlvbiA9IGBBbGxvd3MgYSBzcGVjaWVzIHRvIGJlIHJlcHJlc2VudGVkIHVzaW5nIGNvbnRpbnVvdXMgYW5kL29yIGRpc2NyZXRlIHZhbHVlcy5gO1xuXG4gICAgICAgIHJldHVybiBgXG4gICAgICAgICAgICA8ZGl2IGlkPVwiZGVmYXVsdE1vZGVNb2RhbFwiIGNsYXNzPVwibW9kYWxcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPkRlZmF1bHQgU3BlY2llcyBNb2RlIChyZXF1aXJlZCk8L2g1PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlIGNsb3NlLW1vZGFsXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IG1vZGUgaXMgdXNlZCB0byBzZXQgdGhlIG1vZGUgb2YgYWxsIHNwZWNpZXMgYWRkZWQgdG8gdGhlIG1vZGVsLiAgXG4gICAgICAgICAgICAgICAgICAgICAgICBUaGUgbW9kZSBvZiBhIHNwZWNpZXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgaG93IGl0IHdpbGwgYmUgcmVwcmVzZW50ZWQgaW4gYSBIeWJyaWQgc2ltdWxhdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgPHA+U2VsZWN0IG9uZSBvZiB0aGUgZm9sbG93aW5nOiA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVmYXVsdC1tb2RlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgY29uY2VudHJhdGlvbi1idG4gYm94LXNoYWRvd1wiPkNvbmNlbnRyYXRpb248L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT1cIm1hcmdpbi10b3A6IDVweDtcIj4ke2NvbmNlbnRyYXRpb25EZXNjaXB0aW9ufTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWZhdWx0LW1vZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBwb3B1bGF0aW9uLWJ0biBib3gtc2hhZG93XCI+UG9wdWxhdGlvbjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPVwibWFyZ2luLXRvcDogNXB4O1wiPiR7cG9wdWxhdGlvbkRlc2NyaXB0aW9ufTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWZhdWx0LW1vZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBoeWJyaWQtYnRuIGJveC1zaGFkb3dcIj5IeWJyaWQgQ29uY2VudHJhdGlvbi9Qb3B1bGF0aW9uPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9XCJtYXJnaW4tdG9wOiA1cHg7XCI+JHtoeWJyaWREZXNjcmlwdGlvbn08L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5gXG4gICAgfVxufSIsIi8vbW9kZWxzXG52YXIgU3RhdGUgPSByZXF1aXJlKCdhbXBlcnNhbmQtc3RhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGF0ZS5leHRlbmQoe1xuICBwcm9wczoge1xuICAgIGV4cHJlc3Npb246ICdzdHJpbmcnLFxuICAgIHZhcmlhYmxlOiAnb2JqZWN0JyxcbiAgfSxcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKGF0dHJzLCBvcHRpb25zKSB7XG4gICAgU3RhdGUucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfSxcbn0pOyIsIi8vbW9kZWxzXG52YXIgRXZlbnRBc3NpZ25tZW50ID0gcmVxdWlyZSgnLi9ldmVudC1hc3NpZ25tZW50Jyk7XG4vL2NvbGxlY3Rpb25zXG52YXIgQ29sbGVjdGlvbiA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1jb2xsZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ29sbGVjdGlvbi5leHRlbmQoe1xuICBtb2RlbDogRXZlbnRBc3NpZ25tZW50LFxuICBhZGRFdmVudEFzc2lnbm1lbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFyaWFibGUgPSB0aGlzLmdldERlZmF1bHRWYXJpYWJsZSgpO1xuICAgIHZhciBldmVudEFzc2lnbm1lbnQgPSB0aGlzLmFkZCh7XG4gICAgICB2YXJpYWJsZTogdmFyaWFibGUsXG4gICAgICBleHByZXNzaW9uOiBcIlwiLFxuICAgIH0pO1xuICB9LFxuICBnZXREZWZhdWx0VmFyaWFibGU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3BlY2llcyA9IHRoaXMucGFyZW50LmNvbGxlY3Rpb24ucGFyZW50LnNwZWNpZXNcbiAgICBpZihzcGVjaWVzLmxlbmd0aCA+IDApe1xuICAgICAgcmV0dXJuIHNwZWNpZXMuYXQoMCk7XG4gICAgfWVsc2V7XG4gICAgICByZXR1cm4gdGhpcy5wYXJlbnQuY29sbGVjdGlvbi5wYXJlbnQucGFyYW1ldGVycy5hdCgwKVxuICAgIH1cbiAgfSxcbiAgcmVtb3ZlRXZlbnRBc3NpZ25tZW50OiBmdW5jdGlvbiAoZXZlbnRBc3NpZ25tZW50KSB7XG4gICAgdGhpcy5yZW1vdmUoZXZlbnRBc3NpZ25tZW50KTtcbiAgfSxcbn0pOyIsIi8vbW9kZWxzXG52YXIgU3RhdGUgPSByZXF1aXJlKCdhbXBlcnNhbmQtc3RhdGUnKTtcbi8vY29sbGVjdGlvbnNcbnZhciBFdmVudEFzc2lnbm1lbnRzID0gcmVxdWlyZSgnLi9ldmVudC1hc3NpZ25tZW50cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRlLmV4dGVuZCh7XG4gIHByb3BzOiB7XG4gICAgY29tcElEOiAnbnVtYmVyJyxcbiAgICBuYW1lOiAnc3RyaW5nJyxcbiAgICBhbm5vdGF0aW9uOiAnc3RyaW5nJyxcbiAgICBkZWxheTogJ3N0cmluZycsXG4gICAgcHJpb3JpdHk6ICdzdHJpbmcnLFxuICAgIHRyaWdnZXJFeHByZXNzaW9uOiAnc3RyaW5nJyxcbiAgICBpbml0aWFsVmFsdWU6ICdib29sZWFuJyxcbiAgICBwZXJzaXN0ZW50OiAnYm9vbGVhbicsXG4gICAgdXNlVmFsdWVzRnJvbVRyaWdnZXJUaW1lOiAnYm9vbGVhbicsXG4gIH0sXG4gIGNvbGxlY3Rpb25zOiB7XG4gICAgZXZlbnRBc3NpZ25tZW50czogRXZlbnRBc3NpZ25tZW50cyxcbiAgfSxcbiAgc2Vzc2lvbjoge1xuICAgIHNlbGVjdGVkOiB7XG4gICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICBkZWZhdWx0OiB0cnVlLFxuICAgIH0sXG4gIH0sXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uIChhdHRycywgb3B0aW9ucykge1xuICAgIFN0YXRlLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH0sXG59KTsiLCJ2YXIgXyA9IHJlcXVpcmUoJ3VuZGVyc2NvcmUnKTtcbi8vbW9kZWxzXG52YXIgRXZlbnQgPSByZXF1aXJlKCcuL2V2ZW50Jyk7XG4vL2NvbGxlY3Rpb25zXG52YXIgQ29sbGVjdGlvbiA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1jb2xsZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ29sbGVjdGlvbi5leHRlbmQoe1xuICBtb2RlbDogRXZlbnQsXG4gIGFkZEV2ZW50OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGlkID0gdGhpcy5wYXJlbnQuZ2V0RGVmYXVsdElEKCk7XG4gICAgdmFyIG5hbWUgPSB0aGlzLmdldERlZmF1bHROYW1lKCk7XG4gICAgdmFyIGV2ZW50ID0gdGhpcy5hZGQoe1xuICAgICAgY29tcElEOiBpZCxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICBhbm5vdGF0aW9uOiBcIlwiLFxuICAgICAgZGVsYXk6IFwiXCIsXG4gICAgICBwcmlvcml0eTogXCIwXCIsXG4gICAgICB0cmlnZ2VyRXhwcmVzc2lvbjogXCJcIixcbiAgICAgIGluaXRpYWxWYWx1ZTogZmFsc2UsXG4gICAgICBwZXJzaXN0ZW50OiBmYWxzZSxcbiAgICAgIHVzZVZhbHVlc0Zyb21UcmlnZ2VyVGltZTogZmFsc2UsXG4gICAgfSk7XG4gICAgZXZlbnQuZXZlbnRBc3NpZ25tZW50cy5hZGRFdmVudEFzc2lnbm1lbnQoKVxuICAgIHJldHVybiBldmVudFxuICB9LFxuICBnZXREZWZhdWx0TmFtZTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBpID0gdGhpcy5sZW5ndGggKyAxO1xuICAgIG5hbWUgPSAnZScgKyBpO1xuICAgIHZhciBuYW1lcyA9IHRoaXMubWFwKGZ1bmN0aW9uIChldmVudCkgeyByZXR1cm4gZXZlbnQubmFtZTsgfSk7XG4gICAgd2hpbGUoXy5jb250YWlucyhuYW1lcywgbmFtZSkpe1xuICAgICAgaSArPSAxO1xuICAgICAgbmFtZSA9ICdlJyArIGk7XG4gICAgfVxuICAgIHJldHVybiBuYW1lO1xuICB9LFxuICByZW1vdmVFdmVudDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdGhpcy5yZW1vdmUoZXZlbnQpO1xuICB9LFxufSk7IiwiLy9tb2RlbHNcbnZhciBTdGF0ZSA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1zdGF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRlLmV4dGVuZCh7XG4gIHByb3BzOiB7XG4gICAgY29tcElEOiAnbnVtYmVyJyxcbiAgICBuYW1lOiAnc3RyaW5nJyxcbiAgICBmdW5jdGlvbjogJ3N0cmluZycsXG4gICAgZXhwcmVzc2lvbjogJ3N0cmluZycsXG4gICAgdmFyaWFibGVzOiAnc3RyaW5nJyxcbiAgICBzaWduYXR1cmU6ICdzdHJpbmcnLFxuICAgIGFubm90YXRpb246ICdzdHJpbmcnLFxuICB9XG59KTsiLCIvL2NvbGxlY3Rpb25zXG52YXIgQ29sbGVjdGlvbiA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1jb2xsZWN0aW9uJyk7XG4vL21vZGVsc1xudmFyIEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHJlcXVpcmUoJy4vZnVuY3Rpb24tZGVmaW5pdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgbW9kZWw6IEZ1bmN0aW9uRGVmaW5pdGlvbixcbn0pOyIsIi8vIE1vZGVsc1xudmFyIFN0YXRlID0gcmVxdWlyZSgnYW1wZXJzYW5kLXN0YXRlJyk7XG52YXIgU3BlY2llID0gcmVxdWlyZSgnLi9zcGVjaWUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGF0ZS5leHRlbmQoe1xuICBwcm9wczoge1xuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGNvdW50OiAnbnVtYmVyJyxcbiAgICBzdWJkb21haW46ICdzdHJpbmcnLFxuICAgIHg6ICdudW1iZXInLFxuICAgIHk6ICdudW1iZXInLFxuICAgIHo6ICdudW1iZXInLFxuICB9LFxuICBjaGlsZHJlbjoge1xuICAgIHNwZWNpZTogU3BlY2llLFxuICB9LFxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYXR0cnMsIG9wdGlvbnMpIHtcbiAgICBTdGF0ZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gIH0sXG59KTsiLCIvLyBDb2xsZWN0aW9uc1xudmFyIENvbGxlY3Rpb24gPSByZXF1aXJlKCdhbXBlcnNhbmQtY29sbGVjdGlvbicpO1xuLy9Nb2RlbHNcbnZhciBJbml0aWFsQ29uZGl0aW9uID0gcmVxdWlyZSgnLi9pbml0aWFsLWNvbmRpdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgbW9kZWw6IEluaXRpYWxDb25kaXRpb24sXG4gIGFkZEluaXRpYWxDb25kaXRpb246IGZ1bmN0aW9uIChpbml0aWFsQ29uZGl0aW9uVHlwZSkge1xuICAgIHZhciBzdWJkb21haW4gPSB0aGlzLmdldERlZmF1bHRTdWJkb21haW4oKTtcbiAgICB2YXIgaW5pdGlhbENvbmRpdGlvbiA9IHRoaXMuYWRkKHtcbiAgICAgIHR5cGU6IGluaXRpYWxDb25kaXRpb25UeXBlLFxuICAgICAgc3ViZG9tYWluOiBzdWJkb21haW4sXG4gICAgICBjb3VudDogMCxcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwLFxuICAgICAgejogMCxcbiAgICB9KTtcbiAgICBpbml0aWFsQ29uZGl0aW9uLnNwZWNpZSA9IHRoaXMuZ2V0RGVmYXVsdFNwZWNpZXMoKTtcbiAgfSxcbiAgZ2V0RGVmYXVsdFNwZWNpZXM6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3BlY2llID0gdGhpcy5wYXJlbnQuc3BlY2llcy5hdCgwKTtcbiAgICByZXR1cm4gc3BlY2llO1xuICB9LFxuICBnZXREZWZhdWx0U3ViZG9tYWluOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHN1YmRvbWFpbiA9IHRoaXMucGFyZW50Lm1lc2hTZXR0aW5ncy51bmlxdWVTdWJkb21haW5zLmF0KDApO1xuICAgIHJldHVybiBzdWJkb21haW4ubmFtZTtcbiAgfSxcbiAgcmVtb3ZlSW5pdGlhbENvbmRpdGlvbjogZnVuY3Rpb24gKGluaXRpYWxDb25kaXRpb24pIHtcbiAgICB0aGlzLnJlbW92ZShpbml0aWFsQ29uZGl0aW9uKTtcbiAgfSxcbn0pOyIsIi8vbW9kZWxzXG52YXIgU3RhdGUgPSByZXF1aXJlKCdhbXBlcnNhbmQtc3RhdGUnKTtcbnZhciBTdWJkb21haW5zID0gcmVxdWlyZSgnLi9zdWJkb21haW5zJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhdGUuZXh0ZW5kKHtcbiAgcHJvcHM6IHtcbiAgICBjb3VudDoge1xuICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICBkZWZhdWx0OiAyLFxuICAgIH0sXG4gIH0sXG4gIGRlcml2ZWQ6IHtcbiAgICB1bmlxdWVTdWJkb21haW5zOiB7XG4gICAgICBkZXBzOiBbJ2NvdW50J10sXG4gICAgICBmbjogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdW5pcXVlU3ViZG9tYWlucyA9IG5ldyBTdWJkb21haW5zKCk7XG4gICAgICAgIGZvcih2YXIgaSA9IDE7IGkgPD0gdGhpcy5jb3VudDsgaSsrKXtcbiAgICAgICAgICB1bmlxdWVTdWJkb21haW5zLmFkZFN1YmRvbWFpbignc3ViZG9tYWluICcgKyBpICsgJzonKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5pcXVlU3ViZG9tYWlucztcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKGF0dHJzLCBvcHRpb25zKSB7XG4gICAgU3RhdGUucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfSxcbn0pOyIsIi8vbW9kZWxzXG52YXIgU3RhdGUgPSByZXF1aXJlKCdhbXBlcnNhbmQtc3RhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGF0ZS5leHRlbmQoe1xuICBwcm9wczoge1xuICAgIGVuZFNpbTogJ251bWJlcicsXG4gICAgdGltZVN0ZXA6ICdudW1iZXInLFxuICAgIHZvbHVtZTogJ251bWJlcicsXG4gICAgYWxnb3JpdGhtOiAnc3RyaW5nJyxcbiAgICByZWFsaXphdGlvbnM6ICdudW1iZXInLFxuICB9LFxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYXR0cnMsIG9wdGlvbnMpIHtcbiAgICBTdGF0ZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gIH0sXG59KTsiLCJ2YXIgYXBwID0gcmVxdWlyZSgnLi4vYXBwJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbnZhciB4aHIgPSByZXF1aXJlKCd4aHInKTtcbi8vbW9kZWxzXG52YXIgTW9kZWwgPSByZXF1aXJlKCdhbXBlcnNhbmQtbW9kZWwnKTtcbnZhciBNb2RlbFNldHRpbmdzID0gcmVxdWlyZSgnLi9tb2RlbC1zZXR0aW5ncycpO1xudmFyIFNpbXVsYXRpb25TZXR0aW5ncyA9IHJlcXVpcmUoJy4vc2ltdWxhdGlvbi1zZXR0aW5ncycpO1xudmFyIFBhcmFtZXRlclN3ZWVwU2V0dGluZ3MgPSByZXF1aXJlKCcuL3BhcmFtZXRlci1zd2VlcC1zZXR0aW5ncycpO1xudmFyIE1lc2hTZXR0aW5ncyA9IHJlcXVpcmUoJy4vbWVzaC1zZXR0aW5ncycpO1xuLy9jb2xsZWN0aW9uc1xudmFyIFNwZWNpZXMgPSByZXF1aXJlKCcuL3NwZWNpZXMnKTtcbnZhciBJbml0aWFsQ29uZGl0aW9ucyA9IHJlcXVpcmUoJy4vaW5pdGlhbC1jb25kaXRpb25zJyk7XG52YXIgUGFyYW1ldGVycyA9IHJlcXVpcmUoJy4vcGFyYW1ldGVycycpO1xudmFyIFJlYWN0aW9ucyA9IHJlcXVpcmUoJy4vcmVhY3Rpb25zJyk7XG52YXIgUnVsZXMgPSByZXF1aXJlKCcuL3J1bGVzJyk7XG52YXIgRXZlbnRzID0gcmVxdWlyZSgnLi9ldmVudHMnKTtcbnZhciBGdW5jdGlvbkRlZmluaXRpb25zID0gcmVxdWlyZSgnLi9mdW5jdGlvbi1kZWZpbml0aW9ucycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1vZGVsLmV4dGVuZCh7XG4gIHVybDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBwYXRoLmpvaW4oYXBwLmdldEFwaVBhdGgoKSwgXCJmaWxlL2pzb24tZGF0YVwiKStcIj9mb3I9XCIrdGhpcy5mb3IrXCImcGF0aD1cIit0aGlzLmRpcmVjdG9yeTtcbiAgfSxcbiAgcHJvcHM6IHtcbiAgICBpc19zcGF0aWFsOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdElEOiB7XG4gICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgIGRlZmF1bHQ6IDEsXG4gICAgfSxcbiAgICBkZWZhdWx0TW9kZToge1xuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICBkZWZhdWx0OiAnJyxcbiAgICB9LFxuICB9LFxuICBjb2xsZWN0aW9uczoge1xuICAgIHNwZWNpZXM6IFNwZWNpZXMsXG4gICAgaW5pdGlhbENvbmRpdGlvbnM6IEluaXRpYWxDb25kaXRpb25zLFxuICAgIHBhcmFtZXRlcnM6IFBhcmFtZXRlcnMsXG4gICAgcmVhY3Rpb25zOiBSZWFjdGlvbnMsXG4gICAgcnVsZXM6IFJ1bGVzLFxuICAgIGV2ZW50c0NvbGxlY3Rpb246IEV2ZW50cyxcbiAgICBmdW5jdGlvbkRlZmluaXRpb25zOiBGdW5jdGlvbkRlZmluaXRpb25zLFxuICB9LFxuICBjaGlsZHJlbjoge1xuICAgIG1vZGVsU2V0dGluZ3M6IE1vZGVsU2V0dGluZ3MsXG4gICAgc2ltdWxhdGlvblNldHRpbmdzOiBTaW11bGF0aW9uU2V0dGluZ3MsXG4gICAgcGFyYW1ldGVyU3dlZXBTZXR0aW5nczogUGFyYW1ldGVyU3dlZXBTZXR0aW5ncyxcbiAgICBtZXNoU2V0dGluZ3M6IE1lc2hTZXR0aW5nc1xuICB9LFxuICBzZXNzaW9uOiB7XG4gICAgbmFtZTogJ3N0cmluZycsXG4gICAgc2VsZWN0ZWRSZWFjdGlvbjogJ29iamVjdCcsXG4gICAgZGlyZWN0b3J5OiAnc3RyaW5nJyxcbiAgICBpc1ByZXZpZXc6ICdib29sZWFuJyxcbiAgICBmb3I6ICdzdHJpbmcnLFxuICB9LFxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYXR0cnMsIG9wdGlvbnMpe1xuICAgIE1vZGVsLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH0sXG4gIGdldERlZmF1bHRJRDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBpZCA9IHRoaXMuZGVmYXVsdElEO1xuICAgIHRoaXMuZGVmYXVsdElEICs9IDE7XG4gICAgcmV0dXJuIGlkO1xuICB9LFxuICBhdXRvU2F2ZTogZnVuY3Rpb24gKCkge1xuICAgIC8vVE9ETzogaW1wbGVtZW50IGF1dG8gc2F2ZVxuICB9LFxuICAvL2NhbGxlZCB3aGVuIHNhdmUgYnV0dG9uIGlzIGNsaWNrZWRcbiAgc2F2ZU1vZGVsOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuc3BlY2llcy5tYXAoZnVuY3Rpb24gKHNwZWNpZSkge1xuICAgICAgc2VsZi5zcGVjaWVzLnRyaWdnZXIoJ3VwZGF0ZS1zcGVjaWVzJywgc3BlY2llLmNvbXBJRCwgc3BlY2llLCBmYWxzZSk7XG4gICAgfSk7XG4gICAgdGhpcy5wYXJhbWV0ZXJzLm1hcChmdW5jdGlvbiAocGFyYW1ldGVyKSB7XG4gICAgICBzZWxmLnBhcmFtZXRlcnMudHJpZ2dlcigndXBkYXRlLXBhcmFtZXRlcnMnLCBwYXJhbWV0ZXIuY29tcElELCBwYXJhbWV0ZXIpO1xuICAgIH0pO1xuICAgIGlmKCFpc1ByZXZpZXcpe1xuICAgICAgdGhpcy5zaW11bGF0aW9uU2V0dGluZ3MubGV0VXNDaG9vc2VGb3JVc2UoKVxuICAgIH1cbiAgICB0aGlzLnNhdmUoKTtcbiAgfSxcbn0pO1xuIiwiLy9tb2RlbHNcbnZhciBTdGF0ZSA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1zdGF0ZScpO1xudmFyIFBhcmFtZXRlciA9IHJlcXVpcmUoJy4vcGFyYW1ldGVyJyk7XG52YXIgU3BlY2llcyA9IHJlcXVpcmUoJy4vc3BlY2llJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhdGUuZXh0ZW5kKHtcbiAgcHJvcHM6IHtcbiAgICBpczFEOiAnYm9vbGVhbicsXG4gICAgcDFNaW46ICdudW1iZXInLFxuICAgIHAxTWF4OiAnbnVtYmVyJyxcbiAgICBwMVN0ZXBzOiAnbnVtYmVyJyxcbiAgICBwMk1pbjogJ251bWJlcicsXG4gICAgcDJNYXg6ICdudW1iZXInLFxuICAgIHAyU3RlcHM6ICdudW1iZXInLFxuICB9LFxuICBjaGlsZHJlbjoge1xuICAgIHBhcmFtZXRlck9uZTogUGFyYW1ldGVyLFxuICAgIHBhcmFtZXRlclR3bzogUGFyYW1ldGVyLFxuICAgIHNwZWNpZXNPZkludGVyZXN0OiBTcGVjaWVzXG4gIH0sXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uKGF0dHJzLCBvcHRpb25zKSB7XG4gICAgU3RhdGUucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxufSk7ICIsInZhciBfID0gcmVxdWlyZSgndW5kZXJzY29yZScpO1xuLy9tb2RlbHNcbnZhciBTdGF0ZSA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1zdGF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRlLmV4dGVuZCh7XG4gIHByb3BzOiB7XG4gICAgY29tcElEOiAnbnVtYmVyJyxcbiAgICBuYW1lOiAnc3RyaW5nJyxcbiAgICBleHByZXNzaW9uOiAnc3RyaW5nJyxcbiAgICBhbm5vdGF0aW9uOiAnc3RyaW5nJyxcbiAgfSxcbiAgc2Vzc2lvbjoge1xuICAgIGluVXNlOiB7XG4gICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICB9LFxuICB9LFxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYXR0cnMsIG9wdGlvbnMpIHtcbiAgICBTdGF0ZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9LFxufSk7IiwidmFyIF8gPSByZXF1aXJlKCd1bmRlcnNjb3JlJyk7XG4vL21vZGVsc1xudmFyIFBhcmFtZXRlciA9IHJlcXVpcmUoJy4vcGFyYW1ldGVyJyk7XG4vL2NvbGxlY3Rpb25zXG52YXIgQ29sbGVjdGlvbiA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1jb2xsZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ29sbGVjdGlvbi5leHRlbmQoe1xuICBtb2RlbDogUGFyYW1ldGVyLFxuICBhZGRQYXJhbWV0ZXI6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaWQgPSB0aGlzLnBhcmVudC5nZXREZWZhdWx0SUQoKTtcbiAgICB2YXIgbmFtZSA9IHRoaXMuZ2V0RGVmYXVsdE5hbWUoKTtcbiAgICB2YXIgcGFyYW1ldGVyID0gdGhpcy5hZGQoe1xuICAgICAgY29tcElEOiBpZCxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICBleHByZXNzaW9uOiAnMC4wJyxcbiAgICAgIGFubm90YXRpb246IFwiXCIsXG4gICAgfSk7XG4gIH0sXG4gIGdldERlZmF1bHROYW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGkgPSB0aGlzLmxlbmd0aCArIDE7XG4gICAgdmFyIG5hbWUgPSAnaycgKyBpO1xuICAgIHZhciBuYW1lcyA9IHRoaXMubWFwKGZ1bmN0aW9uIChwYXJhbWV0ZXIpIHtyZXR1cm4gcGFyYW1ldGVyLm5hbWU7IH0pO1xuICAgIHdoaWxlKF8uY29udGFpbnMobmFtZXMsIG5hbWUpKSB7XG4gICAgICBpICs9IDE7XG4gICAgICBuYW1lID0gJ2snICsgaTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWU7XG4gIH0sXG4gIHJlbW92ZVBhcmFtZXRlcjogZnVuY3Rpb24gKHBhcmFtZXRlcikge1xuICAgIHRoaXMucmVtb3ZlKHBhcmFtZXRlcik7XG4gIH0sXG59KTsiLCJ2YXIgXyA9IHJlcXVpcmUoJ3VuZGVyc2NvcmUnKTtcbi8vbW9kZWxzXG52YXIgU3RhdGUgPSByZXF1aXJlKCdhbXBlcnNhbmQtc3RhdGUnKTtcbnZhciBQYXJhbWV0ZXIgPSByZXF1aXJlKCcuL3BhcmFtZXRlcicpO1xuLy9jb2xsZWN0aW9uc1xudmFyIFN0b2ljaFNwZWNpZXMgPSByZXF1aXJlKCcuL3N0b2ljaC1zcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhdGUuZXh0ZW5kKHtcbiAgcHJvcHM6IHtcbiAgICBjb21wSUQ6ICdudW1iZXInLFxuICAgIG5hbWU6ICdzdHJpbmcnLFxuICAgIHJlYWN0aW9uVHlwZTogJ3N0cmluZycsXG4gICAgc3VtbWFyeTogJ3N0cmluZycsXG4gICAgbWFzc2FjdGlvbjogJ2Jvb2xlYW4nLFxuICAgIHByb3BlbnNpdHk6ICdzdHJpbmcnLFxuICAgIGFubm90YXRpb246ICdzdHJpbmcnLFxuICAgIHN1YmRvbWFpbnM6IHtcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gKCkge3JldHVybiBbXTsgfSxcbiAgICB9LFxuICB9LFxuICBjaGlsZHJlbjoge1xuICAgIHJhdGU6IFBhcmFtZXRlcixcbiAgfSxcbiAgY29sbGVjdGlvbnM6IHtcbiAgICByZWFjdGFudHM6IFN0b2ljaFNwZWNpZXMsXG4gICAgcHJvZHVjdHM6IFN0b2ljaFNwZWNpZXMsXG4gIH0sXG4gIHNlc3Npb246IHtcbiAgICBzZWxlY3RlZDoge1xuICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB9LFxuICAgIGhhc0NvbmZsaWN0OiB7XG4gICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICB9LFxuICB9LFxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYXR0cnMsIG9wdGlvbnMpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgU3RhdGUucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0aGlzLm9uKCdjaGFuZ2UtcmVhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLmJ1aWxkU3VtbWFyeSgpO1xuICAgICAgc2VsZi5jaGVja01vZGVzKCk7XG4gICAgfSk7XG4gIH0sXG4gIGJ1aWxkU3VtbWFyeTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdW1tYXJ5ID0gXCJcIjtcblxuICAgIHZhciBudW1SZWFjdGFudHMgPSB0aGlzLnJlYWN0YW50cy5tb2RlbHMubGVuZ3RoO1xuICAgIHZhciBudW1Qcm9kdWN0cyA9IHRoaXMucHJvZHVjdHMubW9kZWxzLmxlbmd0aDtcblxuICAgIGlmKG51bVJlYWN0YW50cyA9PT0gMCl7XG4gICAgICBzdW1tYXJ5ID0gJ1xcXFxlbXB0eXNldCc7XG4gICAgfWVsc2V7XG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgbnVtUmVhY3RhbnRzOyBpKyspe1xuICAgICAgICB2YXIgcmVhY3RhbnQgPSB0aGlzLnJlYWN0YW50cy5tb2RlbHNbaV07XG4gICAgICAgIGlmKHJlYWN0YW50LnJhdGlvID4gMSl7XG4gICAgICAgICAgc3VtbWFyeSArPSByZWFjdGFudC5yYXRpbyArIHJlYWN0YW50LnNwZWNpZS5uYW1lO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICBzdW1tYXJ5ICs9IHJlYWN0YW50LnNwZWNpZS5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoaSA8IG51bVJlYWN0YW50cyAtIDEpe1xuICAgICAgICAgIHN1bW1hcnkgKz0gJysnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3VtbWFyeSArPSAnIFxcXFxyaWdodGFycm93ICc7XG5cbiAgICBpZihudW1Qcm9kdWN0cyA9PT0gMCl7XG4gICAgICBzdW1tYXJ5ICs9ICdcXFxcZW1wdHlzZXQnO1xuICAgIH1lbHNle1xuICAgICAgZm9yKHZhciBpID0gMDsgaSA8IG51bVByb2R1Y3RzOyBpKyspe1xuICAgICAgICB2YXIgcHJvZHVjdCA9IHRoaXMucHJvZHVjdHMubW9kZWxzW2ldO1xuICAgICAgICBpZihwcm9kdWN0LnJhdGlvID4gMSl7XG4gICAgICAgICAgc3VtbWFyeSArPSBwcm9kdWN0LnJhdGlvICsgcHJvZHVjdC5zcGVjaWUubmFtZTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgc3VtbWFyeSArPSBwcm9kdWN0LnNwZWNpZS5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoaSA8IG51bVByb2R1Y3RzIC0gMSl7XG4gICAgICAgICAgc3VtbWFyeSArPSAnKyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3VtbWFyeSA9IHN1bW1hcnkucmVwbGFjZSgvXy9nLCAnXFxcXF8nKTtcblxuICAgIHRoaXMuc3VtbWFyeSA9IHN1bW1hcnlcbiAgfSxcbiAgY2hlY2tNb2RlczogZnVuY3Rpb24gKCkge1xuICAgIHZhciBoYXNDb250aW51b3VzID0gZmFsc2U7XG4gICAgdmFyIGhhc0R5bmFtaWMgPSBmYWxzZTtcbiAgICB2YXIgaGFzRGlzY3JldGUgPSBmYWxzZTtcbiAgICB0aGlzLnJlYWN0YW50cy5tYXAoZnVuY3Rpb24gKHJlYWN0YW50KSB7IFxuICAgICAgaWYocmVhY3RhbnQuc3BlY2llLm1vZGUgPT09ICdjb250aW51b3VzJyAmJiAhaGFzQ29udGludW91cylcbiAgICAgICAgaGFzQ29udGludW91cyA9IHRydWU7XG4gICAgICBlbHNlIGlmKHJlYWN0YW50LnNwZWNpZS5tb2RlID09PSAnZHluYW1pYycgJiYgIWhhc0R5bmFtaWMpXG4gICAgICAgIGhhc0R5bmFtaWMgPSB0cnVlO1xuICAgICAgZWxzZSBpZihyZWFjdGFudC5zcGVjaWUubW9kZSA9PT0gJ2Rpc2NyZXRlJyAmJiAhaGFzRGlzY3JldGUpXG4gICAgICAgIGhhc0Rpc2NyZXRlID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBpZighaGFzQ29udGludW91cyB8fCAhaGFzRHluYW1pYykge1xuICAgICAgdGhpcy5wcm9kdWN0cy5tYXAoZnVuY3Rpb24gKHByb2R1Y3QpIHsgXG4gICAgICAgIGlmKHByb2R1Y3Quc3BlY2llLm1vZGUgPT09ICdjb250aW51b3VzJyAmJiAhaGFzQ29udGludW91cylcbiAgICAgICAgICBoYXNDb250aW51b3VzID0gdHJ1ZTtcbiAgICAgICAgZWxzZSBpZihwcm9kdWN0LnNwZWNpZS5tb2RlID09PSAnZHluYW1pYycgJiYgIWhhc0R5bmFtaWMpXG4gICAgICAgICAgaGFzRHluYW1pYyA9IHRydWU7XG4gICAgICAgIGVsc2UgaWYocHJvZHVjdC5zcGVjaWUubW9kZSA9PT0gJ2Rpc2NyZXRlJyAmJiAhaGFzRGlzY3JldGUpXG4gICAgICAgIGhhc0Rpc2NyZXRlID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmhhc0NvbmZsaWN0ID0gQm9vbGVhbihoYXNDb250aW51b3VzICYmIChoYXNEeW5hbWljIHx8IGhhc0Rpc2NyZXRlKSlcbiAgfSxcbn0pOyIsInZhciBfID0gcmVxdWlyZSgndW5kZXJzY29yZScpO1xudmFyIEV2ZW50cyA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1ldmVudHMnKTtcbi8vbW9kZWxzXG52YXIgUmVhY3Rpb24gPSByZXF1aXJlKCcuL3JlYWN0aW9uJyk7XG4vL2NvbGxlY3Rpb25zXG52YXIgQ29sbGVjdGlvbiA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1jb2xsZWN0aW9uJyk7XG5cblJlYWN0aW9ucyA9IENvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgbW9kZWw6IFJlYWN0aW9uLFxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYXR0cnMsIG9wdGlvbnMpIHtcbiAgICBDb2xsZWN0aW9uLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH0sXG4gIGFkZFJlYWN0aW9uOiBmdW5jdGlvbiAocmVhY3Rpb25UeXBlLCBzdG9pY2hBcmdzLCBzdWJkb21haW5zKSB7XG4gICAgdmFyIGlkID0gdGhpcy5wYXJlbnQuZ2V0RGVmYXVsdElEKCk7XG4gICAgdmFyIG5hbWUgPSB0aGlzLmdldERlZmF1bHROYW1lKCk7XG4gICAgdmFyIG1hc3NhY3Rpb24gPSByZWFjdGlvblR5cGUgPT09ICdjdXN0b20tbWFzc2FjdGlvbic7XG4gICAgdmFyIHJlYWN0aW9uID0gbmV3IFJlYWN0aW9uKHtcbiAgICAgIGNvbXBJRDogaWQsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgcmVhY3Rpb25UeXBlOiByZWFjdGlvblR5cGUsXG4gICAgICBtYXNzYWN0aW9uOiBtYXNzYWN0aW9uLFxuICAgICAgcHJvcGVuc2l0eTogJycsXG4gICAgICBhbm5vdGF0aW9uOiAnJyxcbiAgICAgIHN1YmRvbWFpbnM6IHN1YmRvbWFpbnMsXG4gICAgICByZWFjdGFudHM6IHN0b2ljaEFyZ3MucmVhY3RhbnRzLFxuICAgICAgcHJvZHVjdHM6IHN0b2ljaEFyZ3MucHJvZHVjdHMsXG4gICAgfSk7XG4gICAgdGhpcy5zZXREZWZhdWx0U3BlY2llRm9yU3RvaWNoU3BlY2llcyhyZWFjdGlvbi5yZWFjdGFudHMpO1xuICAgIHRoaXMuc2V0RGVmYXVsdFNwZWNpZUZvclN0b2ljaFNwZWNpZXMocmVhY3Rpb24ucHJvZHVjdHMpO1xuICAgIGlmKHJlYWN0aW9uVHlwZSAhPT0gJ2N1c3RvbS1wcm9wZW5zaXR5JylcbiAgICAgIHJlYWN0aW9uLnJhdGUgPSB0aGlzLmdldERlZmF1bHRSYXRlKCk7XG4gICAgcmVhY3Rpb24uYnVpbGRTdW1tYXJ5KClcbiAgICB0aGlzLmFkZChyZWFjdGlvbik7XG4gICAgcmV0dXJuIHJlYWN0aW9uO1xuICB9LFxuICBnZXREZWZhdWx0TmFtZTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBpID0gdGhpcy5sZW5ndGggKyAxO1xuICAgIHZhciBuYW1lID0gJ3InICsgaTtcbiAgICB2YXIgbmFtZXMgPSB0aGlzLm1hcChmdW5jdGlvbiAocmVhY3Rpb24pIHtyZXR1cm4gcmVhY3Rpb24ubmFtZTsgfSk7XG4gICAgd2hpbGUoXy5jb250YWlucyhuYW1lcywgbmFtZSkpe1xuICAgICAgaSArPSAxO1xuICAgICAgbmFtZSA9ICdyJyArIGk7XG4gICAgfVxuICAgIHJldHVybiBuYW1lO1xuICB9LFxuICBzZXREZWZhdWx0U3BlY2llRm9yU3RvaWNoU3BlY2llczogZnVuY3Rpb24gKHN0b2ljaFNwZWNpZXMpIHtcbiAgICBzdG9pY2hTcGVjaWVzLmZvckVhY2goZnVuY3Rpb24gKHN0b2ljaFNwZWNpZSkge1xuICAgICAgc3RvaWNoU3BlY2llLnNwZWNpZSA9IHRoaXMuZ2V0RGVmYXVsdFNwZWNpZSgpO1xuICAgIH0sIHRoaXMpO1xuICB9LFxuICBnZXREZWZhdWx0U3BlY2llOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNwZWNpZSA9IHRoaXMucGFyZW50LnNwZWNpZXMuYXQoMCk7XG4gICAgcmV0dXJuIHNwZWNpZTtcbiAgfSxcbiAgZ2V0RGVmYXVsdFJhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyYW1ldGVyID0gdGhpcy5wYXJlbnQucGFyYW1ldGVycy5hdCgwKTtcbiAgICByZXR1cm4gcGFyYW1ldGVyO1xuICB9LFxuICByZW1vdmVSZWFjdGlvbjogZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgdGhpcy5yZW1vdmUocmVhY3Rpb24pO1xuICB9LFxufSk7XG5cbkV2ZW50cy5jcmVhdGVFbWl0dGVyKFJlYWN0aW9ucyk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3Rpb25zOyIsIi8vbW9kZWxzXG52YXIgU3RhdGUgPSByZXF1aXJlKCdhbXBlcnNhbmQtc3RhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGF0ZS5leHRlbmQoe1xuICBwcm9wczoge1xuICAgIGNvbXBJRDogJ251bWJlcicsXG4gICAgbmFtZTogJ3N0cmluZycsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgdmFyaWFibGU6ICdvYmplY3QnLFxuICAgIGV4cHJlc3Npb246ICdzdHJpbmcnLFxuICAgIGFubm90YXRpb246ICdzdHJpbmcnLFxuICB9LFxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYXR0cnMsIG9wdGlvbnMpIHtcbiAgICBTdGF0ZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9LFxufSk7IiwidmFyIF8gPSByZXF1aXJlKCd1bmRlcnNjb3JlJyk7XG4vL21vZGVsc1xudmFyIFJ1bGUgPSByZXF1aXJlKCcuL3J1bGUnKTtcbi8vY29sbGVjdGlvbnNcbnZhciBDb2xsZWN0aW9uID0gcmVxdWlyZSgnYW1wZXJzYW5kLWNvbGxlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBDb2xsZWN0aW9uLmV4dGVuZCh7XG4gIG1vZGVsOiBSdWxlLFxuICBhZGRSdWxlOiBmdW5jdGlvbiAodHlwZSkge1xuICAgIHZhciBpZCA9IHRoaXMucGFyZW50LmdldERlZmF1bHRJRCgpO1xuICAgIHZhciBuYW1lID0gdGhpcy5nZXREZWZhdWx0TmFtZSgpO1xuICAgIHZhciB2YXJpYWJsZSA9IHRoaXMuZ2V0RGVmYXVsdFZhcmlhYmxlKCk7XG4gICAgdmFyIHJ1bGUgPSBuZXcgUnVsZSh7XG4gICAgICBjb21wSUQ6IGlkLFxuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBleHByZXNzaW9uOiAnJyxcbiAgICAgIGFubm90YXRpb246ICcnLFxuICAgIH0pO1xuICAgIHJ1bGUudmFyaWFibGUgPSB2YXJpYWJsZTtcbiAgICB0aGlzLmFkZChydWxlKTtcbiAgfSxcbiAgcmVtb3ZlUnVsZTogZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICB0aGlzLnJlbW92ZShydWxlKTtcbiAgfSxcbiAgZ2V0RGVmYXVsdE5hbWU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaSA9IHRoaXMubGVuZ3RoICsgMTtcbiAgICB2YXIgbmFtZSA9ICdycicgKyBpO1xuICAgIHZhciBuYW1lcyA9IHRoaXMubWFwKGZ1bmN0aW9uIChydWxlKSB7cmV0dXJuIHJ1bGUubmFtZTsgfSk7XG4gICAgd2hpbGUoXy5jb250YWlucyhuYW1lcywgbmFtZSkpe1xuICAgICAgaSArPSAxO1xuICAgICAgbmFtZSA9ICdycicgKyBpO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZTtcbiAgfSxcbiAgZ2V0RGVmYXVsdFZhcmlhYmxlOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNwZWNpZXMgPSB0aGlzLnBhcmVudC5zcGVjaWVzXG4gICAgaWYoc3BlY2llcy5sZW5ndGggPiAwKXtcbiAgICAgIHJldHVybiBzcGVjaWVzLmF0KDApO1xuICAgIH1lbHNle1xuICAgICAgcmV0dXJuIHRoaXMucGFyZW50LnBhcmFtZXRlcnMuYXQoMClcbiAgICB9XG4gIH0sXG59KTsiLCIvL21vZGVsc1xudmFyIFN0YXRlID0gcmVxdWlyZSgnYW1wZXJzYW5kLXN0YXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhdGUuZXh0ZW5kKHtcbiAgcHJvcHM6IHtcbiAgICBpc0F1dG9tYXRpYzogJ2Jvb2xlYW4nLFxuICAgIHJlbGF0aXZlVG9sOiAnbnVtYmVyJyxcbiAgICBhYnNvbHV0ZVRvbDogJ251bWJlcicsXG4gICAgcmVhbGl6YXRpb25zOiAnbnVtYmVyJyxcbiAgICBhbGdvcml0aG06ICdzdHJpbmcnLFxuICAgIHNlZWQ6ICdudW1iZXInLFxuICAgIHRhdVRvbDogJ251bWJlcicsXG4gIH0sXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uIChhdHRycywgb3B0aW9ucykge1xuICAgIFN0YXRlLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH0sXG4gIGxldFVzQ2hvb3NlRm9yWW91OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGRlZmF1bHRNb2RlID0gdGhpcy5wYXJlbnQuZGVmYXVsdE1vZGU7XG4gICAgaWYoZGVmYXVsdE1vZGUgPT09IFwiZHluYW1pY1wiKXtcbiAgICAgIHZhciBzcGVjaWVzID0gdGhpcy5wYXJlbnQuc3BlY2llc1xuICAgICAgdmFyIGRpc2NyZXRlU3BlY2llcyA9IHNwZWNpZXMuZmlsdGVyKGZ1bmN0aW9uIChzcGVjaWUpIHtcbiAgICAgICAgY29uc29sZS5sb2coc3BlY2llLm1vZGUpXG4gICAgICAgIGlmKHNwZWNpZS5tb2RlID09PSBcImRpc2NyZXRlXCIpXG4gICAgICAgICAgcmV0dXJuIHNwZWNpZVxuICAgICAgfSk7XG4gICAgICBpZihkaXNjcmV0ZVNwZWNpZXMubGVuZ3RoID09PSBzcGVjaWVzLmxlbmd0aClcbiAgICAgICAgZGVmYXVsdE1vZGUgPSBcImRpc2NyZXRlXCJcbiAgICB9XG4gICAgdmFyIG51bUV2ZW50cyA9IHRoaXMucGFyZW50LmV2ZW50c0NvbGxlY3Rpb24ubGVuZ3RoO1xuICAgIHZhciBudW1SdWxlcyA9IHRoaXMucGFyZW50LnJ1bGVzLmxlbmd0aDtcbiAgICB2YXIgbnVtRnVuY0RlZiA9IHRoaXMucGFyZW50LmZ1bmN0aW9uRGVmaW5pdGlvbnMubGVuZ3RoO1xuICAgIHZhciB0VG9sID0gdGhpcy50YXVUb2xcbiAgICB2YXIgYVRvbCA9IHRoaXMuYWJzb2x1dGVUb2xcbiAgICB2YXIgclRvbCA9IHRoaXMucmVsYXRpdmVUb2xcblxuICAgIGlmKG51bUV2ZW50cyB8fCBudW1SdWxlcyB8fCBudW1GdW5jRGVmIHx8IHJUb2wgIT09IDFlLTMgfHwgYVRvbCAhPT0gMWUtNiB8fCBkZWZhdWx0TW9kZSAhPT0gJ2Rpc2NyZXRlJyl7XG4gICAgICB0aGlzLmFsZ29yaXRobSA9IFwiSHlicmlkLVRhdS1MZWFwaW5nXCI7XG4gICAgfWVsc2UgaWYodFRvbCAhPT0gMC4wMyl7XG4gICAgICB0aGlzLmFsZ29yaXRobSA9IFwiVGF1LUxlYXBpbmdcIjtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMuYWxnb3JpdGhtID0gXCJTU0FcIlxuICAgIH1cbiAgfSxcbn0pOyIsInZhciBfID0gcmVxdWlyZSgndW5kZXJzY29yZScpO1xuLy9tb2RlbHNcbnZhciBTdGF0ZSA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1zdGF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRlLmV4dGVuZCh7XG4gIHByb3BzOiB7XG4gICAgY29tcElEOiAnbnVtYmVyJyxcbiAgICBuYW1lOiAnc3RyaW5nJyxcbiAgICB2YWx1ZTogJ251bWJlcicsXG4gICAgbW9kZTogJ3N0cmluZycsXG4gICAgc3dpdGNoVG9sOiAnbnVtYmVyJyxcbiAgICBzd2l0Y2hNaW46ICdudW1iZXInLFxuICAgIGlzU3dpdGNoVG9sOiAnYm9vbGVhbicsXG4gICAgYW5ub3RhdGlvbjogJ3N0cmluZycsXG4gICAgZGlmZnVzaW9uQ29lZmY6ICdudW1iZXInLFxuICAgIHN1YmRvbWFpbnM6IHtcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24oKSB7cmV0dXJuIFtdOyB9XG4gICAgfSxcbiAgfSxcbiAgc2Vzc2lvbjoge1xuICAgIGluVXNlOiB7XG4gICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICB9LFxuICB9LFxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYXR0cnMsIG9wdGlvbnMpIHtcbiAgICBTdGF0ZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9LFxufSk7IiwidmFyIF8gPSByZXF1aXJlKCd1bmRlcnNjb3JlJyk7XG4vL21vZGVsc1xudmFyIFNwZWNpZSA9IHJlcXVpcmUoJy4vc3BlY2llJyk7XG4vL2NvbGxlY3Rpb25zXG52YXIgQ29sbGVjdGlvbiA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1jb2xsZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ29sbGVjdGlvbi5leHRlbmQoe1xuICBtb2RlbDogU3BlY2llLFxuICBhZGRTcGVjaWU6IGZ1bmN0aW9uIChzdWJkb21haW5zKSB7XG4gICAgdmFyIGlkID0gdGhpcy5wYXJlbnQuZ2V0RGVmYXVsdElEKCk7XG4gICAgdmFyIG5hbWUgPSB0aGlzLmdldERlZmF1bHROYW1lKCk7XG4gICAgdmFyIHNwZWNpZSA9IHRoaXMuYWRkKHtcbiAgICAgIGNvbXBJRDogaWQsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6IDAsXG4gICAgICBtb2RlOiB0aGlzLnBhcmVudC5kZWZhdWx0TW9kZSxcbiAgICAgIHN3aXRjaFRvbDogMC4wMyxcbiAgICAgIHN3aXRjaE1pbjogMTAwLFxuICAgICAgaXNTd2l0Y2hUb2w6IHRydWUsXG4gICAgICBhbm5vdGF0aW9uOiBcIlwiLFxuICAgICAgZGlmZnVzaW9uQ29lZmY6IDAuMCxcbiAgICAgIHN1YmRvbWFpbnM6IHN1YmRvbWFpbnNcbiAgICB9KTtcbiAgfSxcbiAgZ2V0RGVmYXVsdE5hbWU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaSA9IHRoaXMubGVuZ3RoICsgMTtcbiAgICB2YXIgbmFtZSA9ICdzJyArIGk7XG4gICAgdmFyIG5hbWVzID0gdGhpcy5tYXAoZnVuY3Rpb24gKHNwZWNpZSkgeyByZXR1cm4gc3BlY2llLm5hbWU7IH0pO1xuICAgIHdoaWxlKF8uY29udGFpbnMobmFtZXMsIG5hbWUpKSB7XG4gICAgICBpICs9IDE7XG4gICAgICBuYW1lID0gJ3MnICsgaTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWU7XG4gIH0sXG4gIHJlbW92ZVNwZWNpZTogZnVuY3Rpb24gKHNwZWNpZSkge1xuICAgIHRoaXMucmVtb3ZlKHNwZWNpZSk7XG4gIH0sXG59KTsiLCJ2YXIgXyA9IHJlcXVpcmUoJ3VuZGVyc2NvcmUnKTtcbi8vbW9kZWxzXG52YXIgU3RhdGUgPSByZXF1aXJlKCdhbXBlcnNhbmQtc3RhdGUnKTtcbnZhciBTcGVjaWUgPSByZXF1aXJlKCcuL3NwZWNpZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRlLmV4dGVuZCh7XG4gIHByb3BzOiB7XG4gICAgcmF0aW86ICdudW1iZXInLFxuICB9LFxuICBjaGlsZHJlbjoge1xuICAgIHNwZWNpZTogU3BlY2llLFxuICB9LFxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYXR0cnMsIG9wdGlvbnMpIHtcbiAgICBTdGF0ZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9LFxufSk7IiwidmFyIF8gPSByZXF1aXJlKCd1bmRlcnNjb3JlJyk7XG4vL21vZGVsc1xudmFyIFN0b2ljaFNwZWNpZSA9IHJlcXVpcmUoJy4vc3RvaWNoLXNwZWNpZScpO1xuLy9jb2xsZWN0aW9uc1xudmFyIENvbGxlY3Rpb24gPSByZXF1aXJlKCdhbXBlcnNhbmQtY29sbGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgbW9kZWw6IFN0b2ljaFNwZWNpZSxcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKGF0dHJzLCBvcHRpb25zKSB7XG4gICAgQ29sbGVjdGlvbi5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHRoaXMub24oJ2FkZCByZW1vdmUnLCBfLmJpbmQodGhpcy50cmlnZ2VyQ2hhbmdlLCB0aGlzKSk7XG4gIH0sXG4gIHRyaWdnZXJDaGFuZ2U6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmJhc2VNb2RlbCA9IHRoaXMucGFyZW50LmNvbGxlY3Rpb24ucGFyZW50O1xuICAgIHRoaXMuYmFzZU1vZGVsLnNwZWNpZXMudHJpZ2dlcignc3RvaWNoLXNwZWNpZXMtY2hhbmdlJyk7XG4gIH0sXG4gIGFkZFN0b2ljaFNwZWNpZTogZnVuY3Rpb24gKHNwZWNpZU5hbWUpIHtcbiAgICB2YXIgc3BlY2llID0gdGhpcy5wYXJlbnQuY29sbGVjdGlvbi5wYXJlbnQuc3BlY2llcy5maWx0ZXIoZnVuY3Rpb24gKHNwZWNpZSkge1xuICAgICAgICByZXR1cm4gc3BlY2llLm5hbWUgPT09IHNwZWNpZU5hbWU7XG4gICAgfSlbMF07XG4gICAgdmFyIHN0b2ljaFNwZWNpZSA9IG5ldyBTdG9pY2hTcGVjaWUoe1xuICAgICAgICByYXRpbzogMVxuICAgIH0pO1xuICAgIHN0b2ljaFNwZWNpZS5zcGVjaWUgPSBzcGVjaWU7XG4gICAgdGhpcy5hZGQoc3RvaWNoU3BlY2llKTtcbiAgfSxcbiAgcmVtb3ZlU3RvaWNoU3BlY2llOiBmdW5jdGlvbiAoc3RvaWNoU3BlY2llKSB7XG4gICAgc3RvaWNoU3BlY2llLnN0b3BMaXN0ZW5pbmcoKTtcbiAgICB0aGlzLnJlbW92ZShzdG9pY2hTcGVjaWUpO1xuICB9LFxufSk7IiwiLy9tb2RlbFxudmFyIFN0YXRlID0gcmVxdWlyZSgnYW1wZXJzYW5kLXN0YXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhdGUuZXh0ZW5kKHtcbiAgcHJvcHM6IHtcbiAgICBuYW1lOiAnc3RyaW5nJyxcbiAgfSxcbn0pOyIsIi8vbW9kZWxzXG52YXIgU3ViZG9tYWluID0gcmVxdWlyZSgnLi9zdWJkb21haW4nKTtcbi8vY29sbGVjdGlvbnNcbnZhciBDb2xsZWN0aW9uID0gcmVxdWlyZSgnYW1wZXJzYW5kLWNvbGxlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBDb2xsZWN0aW9uLmV4dGVuZCh7XG4gIG1vZGVsOiBTdWJkb21haW4sXG4gIGFkZFN1YmRvbWFpbjogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aGlzLmFkZCh7bmFtZTogbmFtZX0pO1xuICB9LFxuICByZW1vdmVTdWJkb21haW5zOiBmdW5jdGlvbiAoc3ViZG9tYWluKSB7XG4gICAgdGhpcy5yZW1vdmUoc3ViZG9tYWluKTtcbiAgfSxcbn0pOyIsIm1vZHVsZS5leHBvcnRzID0ge1xuICAgICdmaWxlLWJyb3dzZXInIDogYFxuICAgICAgICA8cD48Yj5PcGVuL0VkaXQgYSBGaWxlPC9iPjogRG91YmxlLWNsaWNrIG9uIGEgZmlsZSBvciByaWdodC1jbGljayBvbiBhIGZpbGUgYW5kIGNsaWNrIE9wZW4vRWRpdC4gIFxuICAgICAgICA8Yj5Ob3RlPC9iPjogU29tZSBmaWxlcyB3aWxsIG9wZW4gaW4gYSBuZXcgdGFiIHNvIHlvdSBtYXkgd2FudCB0byB0dXJuIG9mZiB0aGUgcG9wLXVwIGJsb2NrZXIuPC9wPlxuICAgICAgICA8cD48Yj5PcGVuIERpcmVjdG9yeTwvYj46IENsaWNrIG9uIHRoZSBhcnJvdyBuZXh0IHRvIHRoZSBkaXJlY3Rvcnkgb3IgZG91YmxlLWNsaWNrIG9uIHRoZSBkaXJlY3RvcnkuPC9wPlxuICAgICAgICA8cD48Yj5DcmVhdGUgYSBEaXJlY3RvcnkvTW9kZWw8L2I+OiBSaWdodC1jbGljayBvbiBhIGRpcmVjdG9yeSwgY2xpY2sgTmV3IERpcmVjdG9yeS9OZXcgTW9kZWwsIGFuZCBlbnRlciB0aGUgbmFtZSBvZiBkaXJlY3RvcnkvbW9kZWwgb3IgcGF0aC4gIFxuICAgICAgICBGb3IgbW9kZWxzIHlvdSB3aWxsIG5lZWQgdG8gY2xpY2sgb24gdGhlIHR5cGUgb2YgbW9kZWwgeW91IHdpc2ggdG8gY3JlYXRlIGJlZm9yZSBlbnRlcmluZyB0aGUgbmFtZSBvciBwYXRoLjwvcD5cbiAgICAgICAgPHA+PGI+Q3JlYXRlIGEgV29ya2Zsb3c8L2I+OiBSaWdodC1jbGljayBvbiBhIG1vZGVsIGFuZCBjbGljayBOZXcgV29ya2Zsb3csIHRoaXMgdGFrZXMgeW91IHRvIHRoZSB3b3JrZmxvdyBzZWxlY3Rpb24gcGFnZS4gIFxuICAgICAgICBGcm9tIHRoZSB3b3JrZmxvdyBzZWxlY3Rpb24gcGFnZSwgY2xpY2sgb24gb25lIG9mIHRoZSBsaXN0ZWQgd29ya2Zsb3dzLjwvcD5cbiAgICAgICAgPHA+PGI+Q29udmVydCBhIEZpbGU8L2I+OiBSaWdodC1jbGljayBvbiBhIE1vZGVsL1NCTUwsIGNsaWNrIENvbnZlcnQsIGFuZCBjbGljayBvbiB0aGUgZGVzaXJlZCBDb252ZXJ0IHRvIG9wdGlvbi4gIFxuICAgICAgICBNb2RlbCBmaWxlcyBjYW4gYmUgY29udmVydGVkIHRvIFNwYXRpYWwgTW9kZWxzLCBOb3RlYm9va3MsIG9yIFNCTUwgZmlsZXMuICBcbiAgICAgICAgU3BhdGlhbCBNb2RlbHMgYW5kIFNCTUwgZmlsZSBjYW4gYmUgY29udmVydGVkIHRvIE1vZGVscy4gIFxuICAgICAgICA8Yj5Ob3RlPC9iPjogTm90ZWJvb2tzIHdpbGwgb3BlbiBpbiBhIG5ldyB0YWIgc28geW91IG1heSB3YW50IHRvIHR1cm4gb2ZmIHRoZSBwb3AtdXAgYmxvY2tlci48L3A+XG4gICAgICAgIDxwPjxiPk1vdmUgRmlsZSBvciBEaXJlY3Rvcnk8L2I+OiBDbGljayBhbmQgZHJhZyB0aGUgZmlsZSBvciBkaXJlY3RvcnkgdG8gdGhlIG5ldyBsb2NhdGlvbi4gIFxuICAgICAgICBZb3UgY2FuIG9ubHkgbW92ZSBhbiBpdGVtIHRvIGEgZGlyZWN0b3J5IGlmIHRoZXJlIGlzbid0IGEgZmlsZSBvciBkaXJlY3Rvcnkgd2l0aCB0aGUgc2FtZSBuYW1lIGluIHRoYXQgbG9jYXRpb24uPC9wPlxuICAgICAgICA8cD48Yj5Eb3dubG9hZCBhIE1vZGVsL05vdGVib29rL1NCTUwgRmlsZTwvYj46IFJpZ2h0LWNsaWNrIG9uIHRoZSBmaWxlIGFuZCBjbGljayBkb3dubG9hZC48L3A+XG4gICAgICAgIDxwPjxiPlJlbmFtZSBGaWxlL0RpcmVjdG9yeTwvYj46IFJpZ2h0LWNsaWNrIG9uIGEgZmlsZS9kaXJlY3RvcnksIGNsaWNrIHJlbmFtZSwgYW5kIGVudGVyIHRoZSBuZXcgbmFtZS48L3A+XG4gICAgICAgIDxwPjxiPkR1cGxpY2F0ZS9EZWxldGUgQSBGaWxlL0RpcmVjdG9yeTwvYj46IFJpZ2h0LWNsaWNrIG9uIHRoZSBmaWxlL2RpcmVjdG9yeSBhbmQgY2xpY2sgRHVwbGljYXRlL0RlbGV0ZS48L3A+XG4gICAgYCxcbiAgICAnbW9kZWwtZWRpdG9yJyA6IGBcbiAgICAgICAgPHA+PGI+U3BlY2llczwvYj46IEEgc3BlY2llcyByZWZlcnMgdG8gYSBwb29sIG9mIGVudGl0aWVzIHRoYXQgYXJlIGNvbnNpZGVyZWQgXG4gICAgICAgICAgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBlYWNoIG90aGVyIGZvciB0aGUgcHVycG9zZXMgb2YgdGhlIG1vZGVsIGFuZCBtYXkgcGFydGljaXBhdGUgXG4gICAgICAgICAgaW4gcmVhY3Rpb25zLjwvcD5cbiAgICAgICAgPHA+PGI+UGFyYW1ldGVyPC9iPjogQSBQYXJhbWV0ZXIgaXMgdXNlZCB0byBkZWZpbmUgYSBzeW1ib2wgYXNzb2NpYXRlZCB3aXRoIFxuICAgICAgICAgIGEgdmFsdWU7IHRoaXMgc3ltYm9sIGNhbiB0aGVuIGJlIHVzZWQgaW4gbWF0aGVtYXRpY2FsIGZvcm11bGFzIGluIGEgbW9kZWwuPC9wPlxuICAgICAgICA8cD48Yj5SZWFjdGlvbjwvYj46IEEgcmVhY3Rpb24gaW4gU0JNTCByZXByZXNlbnRzIGFueSBraW5kIG9mIHByb2Nlc3MgdGhhdCBjYW4gY2hhbmdlIFxuICAgICAgICAgIHRoZSBxdWFudGl0eSBvZiBvbmUgb3IgbW9yZSBzcGVjaWVzIGluIGEgbW9kZWwuICBBdCBsZWFzdCBvbmUgc3BlY2llcyBpcyByZXF1aXJlZCB0byBcbiAgICAgICAgICBhZGQgYSByZWFjdGlvbiBhbmQgYXQgbGVhc3Qgb25lIHBhcmFtZXRlciBpcyByZXF1aXJlZCB0byBhZGQgYSBtYXNzIGFjdGlvbiByZWFjdGlvbi48L3A+XG4gICAgICAgIDxwPjxiPkV2ZW50PC9iPjogRXZlbnRzIGRlc2NyaWJlIHRoZSB0aW1lIGFuZCBmb3JtIG9mIGluc3RhbnRhbmVvdXMsIGRpc2NvbnRpbnVvdXMgc3RhdGUgXG4gICAgICAgICAgY2hhbmdlcyBpbiB0aGUgbW9kZWwuICBBbiBFdmVudCBvYmplY3QgZGVmaW5lcyB3aGVuIHRoZSBldmVudCBjYW4gb2NjdXIsIHRoZSB2YXJpYWJsZXMgXG4gICAgICAgICAgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgaXQsIGhvdyB0aGUgdmFyaWFibGVzIGFyZSBhZmZlY3RlZCwgYW5kIHRoZSBldmVudOKAmXMgcmVsYXRpb25zaGlwIFxuICAgICAgICAgIHRvIG90aGVyIGV2ZW50cy4gIEF0IGxlYXN0IG9uZSBzcGVjaWVzIG9yIHBhcmFtZXRlciBpcyByZXF1aXJlZCB0byBhZGQgYW4gZXZlbnQuPC9wPlxuICAgICAgICA8cD48Yj5SdWxlPC9iPjogUnVsZXMgcHJvdmlkZSBhZGRpdGlvbmFsIHdheXMgdG8gZGVmaW5lIHRoZSB2YWx1ZXMgb2YgdmFyaWFibGVzIFxuICAgICAgICAgIGluIGEgbW9kZWwsIHRoZWlyIHJlbGF0aW9uc2hpcHMsIGFuZCB0aGUgZHluYW1pY2FsIGJlaGF2aW9ycyBvZiB0aG9zZSB2YXJpYWJsZXMuICBUaGUgXG4gICAgICAgICAgcnVsZSB0eXBlIEFzc2lnbm1lbnQgUnVsZSBpcyB1c2VkIHRvIGV4cHJlc3MgZXF1YXRpb25zIHRoYXQgc2V0IHRoZSB2YWx1ZXMgb2YgdmFyaWFibGVzLiAgXG4gICAgICAgICAgVGhlIHJ1bGUgdHlwZSBSYXRlIFJ1bGUgaXMgdXNlZCB0byBleHByZXNzIGVxdWF0aW9ucyB0aGF0IGRldGVybWluZSB0aGUgcmF0ZXMgb2YgY2hhbmdlIFxuICAgICAgICAgIG9mIHZhcmlhYmxlcy4gIEF0IGxlYXN0IG9uZSBzcGVjaWVzIG9yIHBhcmFtZXRlciBpcyByZXF1aXJlZCB0byBhZGQgYSBydWxlLjwvcD5cbiAgICAgICAgPHA+PGI+UHJldmlldzwvYj46IEEgcHJldmlldyBvZiB0aGUgbW9kZWwgc2hvd3MgdGhlIHJlc3VsdHMgb2YgdGhlIGZpcnN0IGZpdmUgc2Vjb25kcyBvZiBhIFxuICAgICAgICAgIHNpbmdsZSB0cmFqZWN0b3J5IG9mIHRoZSBtb2RlbCBzaW11bGF0aW9uLiAgQXQgbGVhc3Qgb25lIHNwZWNpZXMgYW5kIG9uZSByZWFjdGlvbiwgZXZlbnQsIFxuICAgICAgICAgIG9yIHJ1bGUgaXMgcmVxdWlyZWQgdG8gcnVuIGEgcHJldmlldy48L3A+XG4gICAgICAgIDxwPjxiPldvcmtmbG93PC9iPjogQSB3b3JrZmxvdyBhbGxvd3MgeW91IHRvIHJ1biBhIGZ1bGwgbW9kZWwgd2l0aCBtdWx0aXBsZSB0cmFqZWN0b3JpZXMgd2l0aCBcbiAgICAgICAgICBzZXR0aW5ncyB0aGUgd2lsbCBoZWxwIHJlZmluZSB0aGUgc2ltdWxhdGlvbi4gIEF0IGxlYXN0IG9uZSBzcGVjaWVzIGFuZCBvbmUgcmVhY3Rpb24sIGV2ZW50LCBcbiAgICAgICAgICBvciBydWxlIGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBhIG5ldyB3b3JrZmxvdy48L3A+XG4gICAgYCxcbiAgICAnd2tmbC1tYW5hZ2VyJyA6IGBcbiAgICAgICAgPHA+PGI+V29ya2Zsb3cgTmFtZS9QYXRoPC9iPjogWW91IG1heSBlZGl0IHRoZSBuYW1lL3BhdGggb2YgdGhlIHdvcmtmbG93IGFzIGxvbmcgYXMgdGhlIHdvcmtmbG93IGhhcyBub3QgYmVlbiBzYXZlZC4gIFxuICAgICAgICBXb3JrZmxvdyBOYW1lcyBhbHdheXMgZW5kIHdpdGggYSB0aW1lIHN0YW1wLjwvcD5cbiAgICAgICAgPHA+PGI+TW9kZWwgUGF0aDwvYj46IElmIHlvdSBtb3ZlIG9yIHJlbmFtZSB0aGUgbW9kZWwgbWFrZSBzdXJlIHRvIHVwZGF0ZSB0aGlzIHBhdGguPC9wPlxuICAgICAgICA8cD48Yj5TZXR0aW5nczwvYj46IFRoaXMgaXMgd2hlcmUgeW91IGNhbiBjdXN0b21pemUgdGhlIHNldHRpbmdzIGZvciB5b3VyIHdvcmtmbG93LlxuICAgICAgICBJZiB5b3UgbmVlZCB0byBlZGl0IG90aGVyIHBhcnQgb2YgeW91IG1vZGVsIGNsaWNrIG9uIHRoZSBlZGl0IG1vZGVsIGJ1dHRvbi4gIFxuICAgICAgICBUaGUgc2V0dGluZ3MgYXJlIG9ubHkgYXZhaWxhYmxlIGZvciB3b3JrZmxvd3MgdGhhdCBoYXZlIG5vdCBiZWVuIHJ1bi48L3A+XG4gICAgICAgIDxwPjxiPlN0YXR1czwvYj46IFRoaXMgc2VjdGlvbiBkaXNwbGF5cyB0aGUgc3RhdHVzIGFuZCBzdGFydCB0aW1lIG9mIHRoZSBXb3JrZmxvdy4gIElmIHRoZSB3b3JrZmxvdyBoYXNuJ3QgYmVlbiBzYXJ0ZWQgdGhpcyBzZWN0aW9uIGlzIGNsb3NlZC48L3A+XG4gICAgICAgIDxwPjxiPlJlc3VsdHM8L2I+OiBZb3UgbWF5IGNoYW5nZSB0aGUgdGl0bGUsIHgtYXhpcyBsYWJlbCwgYW5kIHktYXhpcyBsYWJlbCBieSBjbGlja2luZyBvbiB0aGUgZWRpdCBwbG90IGJ1dHRvbiB0aGVuIGVudGVyIHRoZSBuYW1lIGluIHRoZSBjb3JyZWN0IGZpZWxkLjwvcD5cbiAgICAgICAgPHA+PGI+SW5mbzwvYj46IFRoaXMgc2VjdGlvbiBkaXNwbGF5cyBhbnkgd2FybmluZ3MgYW5kL29yIGVycm9yIHRoYXQgYXJlIGxvZ2dlZCBieSB0aGUgcnVubmluZyB3b3JrZmxvdy48L3A+XG4gICAgICAgIDxwPjxiPk1vZGVsPC9iPjogVGhpcyBzZWN0aW9uIGxldHMgeW91IHZpZXcgdGhlIG1vZGVsIHRoYXQgd2FzIHVzZWQgd2hlbiB5b3UgcmFuIHRoZSB3b3JrZmxvdy48L3A+XG4gICAgYCxcbn0iLCJ2YXIgVmlldyA9IHJlcXVpcmUoJ2FtcGVyc2FuZC12aWV3Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gVmlldy5leHRlbmQoe1xuXG59KTtcbiIsImxldCBQYWdlVmlldyA9IHJlcXVpcmUoJy4vYmFzZScpO1xubGV0IE1haW5WaWV3ID0gcmVxdWlyZSgnLi4vdmlld3MvbWFpbicpO1xuLy92YXIgdGVtcGxhdGVzID0gcmVxdWlyZSgnLi4vdGVtcGxhdGVzJyk7XG5sZXQgdGVtcGxhdGUgPSByZXF1aXJlKCcuLi90ZW1wbGF0ZXMvcGFnZXMvaG9tZS5wdWcnKTtcbmxldCBkb21SZWFkeSA9IHJlcXVpcmUoJ2RvbXJlYWR5Jyk7XG5cbmxldCBib290c3RyYXAgPSByZXF1aXJlKCdib290c3RyYXAnKTtcblxubGV0IGFwcCA9IHJlcXVpcmUoJy4uL2FwcCcpO1xuXG5pbXBvcnQgYm9vdHN0cmFwU3R5bGVzIGZyb20gJy4uL3N0eWxlcy9ib290c3RyYXAuY3NzJztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi4vc3R5bGVzL3N0eWxlcy5jc3MnO1xuaW1wb3J0IGZvbnRhd2Vzb21lU3R5bGVzIGZyb20gJ0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1mcmVlL2Nzcy9zdmctd2l0aC1qcy5taW4uY3NzJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0UGFnZSAocGFnZSkge1xuICBkb21SZWFkeSgoKSA9PiB7XG4gICAgbGV0IG1haW5WaWV3ID0gbmV3IE1haW5WaWV3KHtcbiAgICAgIGVsOiBkb2N1bWVudC5ib2R5XG4gICAgfSk7XG4gICAgbGV0IHAgPSBuZXcgcGFnZSh7XG4gICAgICBlbDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtaG9vaz1cInBhZ2UtY29udGFpbmVyXCJdJyksXG4gICAgfSk7XG4gICAgcC5yZW5kZXIoKVxuICB9KVxufVxuIiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vYm9vdHN0cmFwLmNzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IHVuZGVmaW5lZDtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2FscztcblxuaWYobW9kdWxlLmhvdCkge1xuXHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9ib290c3RyYXAuY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9ib290c3RyYXAuY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59IiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGVzLmNzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IHVuZGVmaW5lZDtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2FscztcblxuaWYobW9kdWxlLmhvdCkge1xuXHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZXMuY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZXMuY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59IiwidmFyIHB1ZyA9IHJlcXVpcmUoXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3B1Zy1ydW50aW1lL2luZGV4LmpzXCIpO1xuXG5mdW5jdGlvbiB0ZW1wbGF0ZShsb2NhbHMpIHt2YXIgcHVnX2h0bWwgPSBcIlwiLCBwdWdfbWl4aW5zID0ge30sIHB1Z19pbnRlcnA7cHVnX2h0bWwgPSBwdWdfaHRtbCArIFwiXFx1MDAzQyFET0NUWVBFIGh0bWxcXHUwMDNFXFx1MDAzQ2h0bWxcXHUwMDNFXFx1MDAzQ2hlYWRcXHUwMDNFXFx1MDAzQ21ldGEgY2hhcnNldD1cXFwidXRmLThcXFwiXFx1MDAzRVxcdTAwM0N0aXRsZVxcdTAwM0VTdG9jaFNTOiBTdG9jaGFzdGljIFNpbWxhdGlvbiBTZXJ2aWNlXFx1MDAzQ1xcdTAwMkZ0aXRsZVxcdTAwM0VcXHUwMDNDbWV0YSBuYW1lPVxcXCJ2aWV3cG9ydFxcXCIgY29udGVudD1cXFwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMFxcXCJcXHUwMDNFXFx1MDAzQ21ldGEgbmFtZT1cXFwiZGVzY3JpcHRpb25cXFwiIGNvbnRlbnQ9XFxcIlxcXCJcXHUwMDNFXFx1MDAzQ21ldGEgbmFtZT1cXFwiYXV0aG9yXFxcIiBjb250ZW50PVxcXCJcXFwiXFx1MDAzRVxcdTAwM0NcXHUwMDJGaGVhZFxcdTAwM0VcXHUwMDNDYm9keVxcdTAwM0VcXHUwMDNDZGl2IGNsYXNzPVxcXCJjb250YWluZXIgY2FyZCBjYXJkLWJvZHlcXFwiIGlkPVxcXCJob21lLXdyYXBwZXJcXFwiXFx1MDAzRVxcdTAwM0NkaXYgY2xhc3M9XFxcImxvZ29cXFwiIGlkPVxcXCJzdG9jaHNzLWxvZ29cXFwiIGRhdGEtaG9vaz1cXFwic3RvY2hzcy1sb2dvXFxcIlxcdTAwM0VcXHUwMDNDaW1nIHNyYz1cXFwiXFx1MDAyRmh1YlxcdTAwMkZzdGF0aWNcXHUwMDJGc3RvY2hzcy1sb2dvLnBuZ1xcXCJcXHUwMDNFXFx1MDAzQ1xcdTAwMkZkaXZcXHUwMDNFXFx1MDAzQ2RpdiBjbGFzcz1cXFwiY2VudGVyZWRcXFwiXFx1MDAzRVxcdTAwM0NoMSBjbGFzcz1cXFwiZGlzcGxheS01XFxcIlxcdTAwM0VXZWxjb21lIHRvIHRoZSBTdG9jaGFzdGljIFNpbXVsYXRpb24gU2VydmljZSFcXHUwMDNDXFx1MDAyRmgxXFx1MDAzRVxcdTAwM0NwIGNsYXNzPVxcXCJob21lLXBcXFwiXFx1MDAzRVN0b2NoU1MgMi4wIGlzIGFuIGFjY2Vzc2libGUgcGxhdGZvcm0gZm9yIG1vZGVsaW5nIGJpb2NoZW1pY2FsIHN5c3RlbXMuXFx1MDAzQ1xcdTAwMkZwXFx1MDAzRVxcdTAwM0NcXHUwMDJGZGl2XFx1MDAzRVxcdTAwM0NkaXYgY2xhc3M9XFxcInJvdyBob21lLWhpZ2hsaWdodHNcXFwiXFx1MDAzRVxcdTAwM0NkaXYgY2xhc3M9XFxcImNvbC1tZC0yXFxcIlxcdTAwM0VcXHUwMDNDXFx1MDAyRmRpdlxcdTAwM0VcXHUwMDNDZGl2IGNsYXNzPVxcXCJjb2wtbWQtNVxcXCJcXHUwMDNFXFx1MDAzQ2g1XFx1MDAzRUZlYXR1cmVzXFx1MDAzQ1xcdTAwMkZoNVxcdTAwM0VcXHUwMDNDdWwgY2xhc3M9XFxcImhvbWUtbGlzdFxcXCJcXHUwMDNFXFx1MDAzQ2xpXFx1MDAzRURpc2NyZXRlIFN0b2NoYXN0aWMgTW9kZWxpbmdcXHUwMDNDXFx1MDAyRmxpXFx1MDAzRVxcdTAwM0NsaVxcdTAwM0VDb250aW51b3VzIE9ERSBNb2RlbGluZ1xcdTAwM0NcXHUwMDJGbGlcXHUwMDNFXFx1MDAzQ2xpXFx1MDAzRUNvbnZlcnQgQmV0d2VlbiBTdG9jaGFzdGljIGFuZCBPREUgTW9kZWxzXFx1MDAzQ1xcdTAwMkZsaVxcdTAwM0VcXHUwMDNDbGlcXHUwMDNFSW1wb3J0IFNCTUwgTW9kZWxzXFx1MDAzQ1xcdTAwMkZsaVxcdTAwM0VcXHUwMDNDbGlcXHUwMDNFUGFyYW1ldGVyIFN3ZWVwIFdvcmtmbG93c1xcdTAwM0NcXHUwMDJGbGlcXHUwMDNFXFx1MDAzQ1xcdTAwMkZ1bFxcdTAwM0VcXHUwMDNDXFx1MDAyRmRpdlxcdTAwM0VcXHUwMDNDZGl2IGNsYXNzPVxcXCJjb2wtbWQtNVxcXCJcXHUwMDNFXFx1MDAzQ2g1XFx1MDAzRUNvbWluZyBzb29uLi4uXFx1MDAzQ1xcdTAwMkZoNVxcdTAwM0VcXHUwMDNDdWwgY2xhc3M9XFxcImhvbWUtbGlzdFxcXCJcXHUwMDNFXFx1MDAzQ2xpXFx1MDAzRVNjaW9wZSBJbnRlZ3JhdGlvblxcdTAwM0NcXHUwMDJGbGlcXHUwMDNFXFx1MDAzQ2xpXFx1MDAzRVNwYXRpYWwgU2ltdWxhdGlvbnNcXHUwMDNDXFx1MDAyRmxpXFx1MDAzRVxcdTAwM0NsaVxcdTAwM0VCcmluZyBZb3VyIE93biBDbG91ZFxcdTAwM0NcXHUwMDJGbGlcXHUwMDNFXFx1MDAzQ1xcdTAwMkZ1bFxcdTAwM0VcXHUwMDNDXFx1MDAyRmRpdlxcdTAwM0VcXHUwMDNDXFx1MDAyRmRpdlxcdTAwM0VcXHUwMDNDZGl2IGNsYXNzPVxcXCJjZW50ZXJlZFxcXCJcXHUwMDNFXFx1MDAzQ2EgY2xhc3M9XFxcInRyeS1zdG9jaHNzLWJ0biBidG4gYnRuLXByaW1hcnkgYm94LXNoYWRvd1xcXCIgaHJlZj1cXFwiXFx1MDAyRmh1YlxcdTAwMkZzcGF3blxcXCIgcm9sZT1cXFwiYnV0dG9uXFxcIlxcdTAwM0VDbGljayBoZXJlIHRvIGxvZ2luXFx1MDAzQ1xcdTAwMkZhXFx1MDAzRVxcdTAwM0NcXHUwMDJGZGl2XFx1MDAzRVxcdTAwM0NcXHUwMDJGZGl2XFx1MDAzRVxcdTAwM0NkaXYgY2xhc3M9XFxcImNvbnRhaW5lciBjYXJkIGNhcmQtYm9keVxcXCIgaWQ9XFxcInJlZ2lzdHJhdGlvbi1ob21lXFxcIlxcdTAwM0VcXHUwMDNDZGl2IGNsYXNzPVxcXCJjZW50ZXJlZFxcXCJcXHUwMDNFXFx1MDAzQ3AgY2xhc3M9XFxcImhvbWUtcFxcXCJcXHUwMDNFU3RvY2hTUyBpcyBvcGVuLXNvdXJjZSBzb2Z0d2FyZS4gIFRvIG9idGFpbiBjb250aW51ZWQgZnVuZGluZyBmb3Igc3VzdGFpbmVkIGRldmVsb3BtZW50LCB3ZSBtdXN0IHNob3cgdGhhdCBTdG9jaFNTIGlzIG1ha2luZyBhbiBpbXBhY3QgaW4gdGhlIHNjaWVudGlmaWMgY29tbXVuaXR5LiAgRm9yIHRoaXMsIHdlIG5lZWQgdG8ga25vdyB3aG8gaXMgdXNpbmcgdGhlIHNvZnR3YXJlLCBhbmQgYSBiaXQgYWJvdXQgd2hhdCB0aGV5IGFyZSB1c2luZyBpdCBmb3IuICBQbGVhc2UgY29uc2lkZXIgcmVnaXN0ZXJpbmcgU3RvY2hTUyB0byBzaG93IHlvdXIgc3VwcG9ydC5cXHUwMDNDXFx1MDAyRnBcXHUwMDNFXFx1MDAzQ2RpdiBjbGFzcz1cXFwiY29sbGFwc2VcXFwiIGRhdGEtaG9vaz1cXFwicmVnaXN0cmF0aW9uLWxpbmtcXFwiXFx1MDAzRVxcdTAwM0NidXR0b24gY2xhc3M9XFxcImJ0biBidG4tcHJpbWFyeSBib3gtc2hhZG93XFxcIiBkYXRhLWhvb2s9XFxcInJlZ2lzdHJhdGlvbi1saW5rLWJ1dHRvblxcXCIgc3R5bGU9XFxcIm1hcmdpbjogMS41cmVtO1xcXCJcXHUwMDNFUmVnaXN0ZXIgU3RvY2hzc1xcdTAwM0NcXHUwMDJGYnV0dG9uXFx1MDAzRVxcdTAwM0NcXHUwMDJGZGl2XFx1MDAzRVxcdTAwM0NkaXYgY2xhc3M9XFxcImNvbGxhcHNlIHNob3dcXFwiIGRhdGEtaG9vaz1cXFwicmVnaXN0cmF0aW9uLWZvcm1cXFwiIGlkPVxcXCJyZWdpc3RyYXRpb24tZm9ybVxcXCJcXHUwMDNFXFx1MDAzQ2lmcmFtZSBzcmM9XFxcImh0dHBzOlxcdTAwMkZcXHUwMDJGZG9jcy5nb29nbGUuY29tXFx1MDAyRmZvcm1zXFx1MDAyRmRcXHUwMDJGMTJ0QUg0ZjhDSi0zRi1sSzQ0UTl1UUhGaW9fbUdvSzBvWTgyOXE1bEQ3aTRcXHUwMDJGdmlld2Zvcm0/ZW1iZWRkZWQ9dHJ1ZVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGhlaWdodD1cXFwiODAwXFxcIiBmcmFtZWJvcmRlcj1cXFwiMFxcXCJcXHUwMDNFXFx1MDAzQ1xcdTAwMkZpZnJhbWVcXHUwMDNFXFx1MDAzQ1xcdTAwMkZkaXZcXHUwMDNFXFx1MDAzQ1xcdTAwMkZkaXZcXHUwMDNFXFx1MDAzQ1xcdTAwMkZkaXZcXHUwMDNFXFx1MDAzQ1xcdTAwMkZib2R5XFx1MDAzRVxcdTAwM0NcXHUwMDJGaHRtbFxcdTAwM0VcIjs7cmV0dXJuIHB1Z19odG1sO307XG5tb2R1bGUuZXhwb3J0cyA9IHRlbXBsYXRlOyIsIm1vZHVsZS5leHBvcnRzID0ge1xuICBzcGVjaWVzRWRpdG9yOiB7XG4gICAgbmFtZTogXCJOYW1lcyBmb3Igc3BlY2llcywgcGFyYW1ldGVycywgcmVhY3Rpb25zLCBldmVudHMsIGFuZCBydWxlcyBtdXN0IGJlIHVuaXF1ZS5cIixcblxuICAgIGluaXRpYWxWYWx1ZTogXCJJbml0aWFsIHBvcHVsYXRpb24gb2YgYSBzcGVjaWVzLlwiLFxuXG4gICAgYW5ub3RhdGlvbjogXCJBbiBvcHRpb25hbCBub3RlIGFib3V0IHRoZSBzcGVjaWVzLlwiLFxuXG4gICAgcmVtb3ZlOiBcIkEgc3BlY2llcyBtYXkgb25seSBiZSByZW1vdmVkIGlmIGl0IGlzIG5vdCBhIHBhcnQgb2YgYW55IHJlYWN0aW9uLCBldmVudCBhc3NpZ25tZW50LCBvciBydWxlLlwiLFxuICAgIFxuICAgIHNwZWNpZXNNb2RlOiBcIkNvbmNlbnRyYXRpb24gLSBTcGVjaWVzIHdpbGwgb25seSBiZSByZXByZXNlbnRlZCB1c2luZyBjb250aW51b3VzIChmbG9hdGluZyBwb2ludCkgdmFsdWVzLjxicj5Qb3B1bGF0aW9uIC0gU3BlY2llcyB3aWxsIG9ubHkgYmUgcmVwcmVzZW50ZWQgXCIrXG4gICAgICAgIFwidXNpbmcgZGlzY3JldGUgKGludGVnZXIgY291bnQpIHZhbHVlcy48YnI+SHlicmlkIENvbmNlbnRyYXRpb24vUG9wdWxhdGlvbiAtIEFsbG93cyBhIHNwZWNpZXMgdG8gYmUgcmVwcmVzZW50ZWQgdXNpbmcgY29udGludW91cyBhbmQvb3IgZGlzY3JldGUgdmFsdWVzLlwiLFxuXG4gICAgbW9kZTogXCJDb25jZW50cmF0aW9uIC0gU3BlY2llcyB3aWxsIG9ubHkgYmUgcmVwcmVzZW50ZWQgdXNpbmcgY29udGludW91cyAoZmxvYXRpbmcgcG9pbnQpIHZhbHVlcy48YnI+UG9wdWxhdGlvbiAtIFNwZWNpZXMgd2lsbCBvbmx5IGJlIHJlcHJlc2VudGVkIFwiK1xuICAgICAgICBcInVzaW5nIGRpc2NyZXRlIChpbnRlZ2VyIGNvdW50KSB2YWx1ZXMuPGJyPkh5YnJpZCBDb25jZW50cmF0aW9uL1BvcHVsYXRpb24gLSBBbGxvd3MgYSBzcGVjaWVzIHRvIGJlIHJlcHJlc2VudGVkIHVzaW5nIGNvbnRpbnVvdXMgYW5kL29yIGRpc2NyZXRlIHZhbHVlcy5cIixcblxuICAgIHN3aXRjaFZhbHVlOiBcIlN3aXRjaGluZyBUb2xlcmFuY2UgLSBUb2xlcmFuY2UgbGV2ZWwgZm9yIGNvbnNpZGVyaW5nIGEgZHluYW1pYyBzcGVjaWVzIGRldGVybWluaXN0aWNhbGx5LCB2YWx1ZSBpcyBjb21wYXJlZCB0byBhbiBlc3RpbWF0ZWQgc2QvbWVhbiBwb3B1bGF0aW9uIFwiK1xuICAgICAgICBcIm9mIGEgc3BlY2llcyBhZnRlciBhIGdpdmVuIHRpbWUgc3RlcC4gVGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgaWYgYSAnTWluaW11bSBWYWx1ZScgbm90IHByb3ZpZGVkLjxicj5NaW5pbXVtIFZhbHVlIEZvciBTd2l0Y2hpbmcgLSBNaW5pbXVtIHBvcHVsYXRpb24gdmFsdWUgXCIrXG4gICAgICAgIFwiYXQgd2hpY2ggc3BlY2llcyB3aWxsIGJlIHJlcHJlc2VudGVkIGFzIENvbmNlbnRyYXRpb24uXCJcbiAgfSxcbiAgcGFyYW1ldGVyc0VkaXRvcjoge1xuICAgIG5hbWU6IFwiTmFtZXMgZm9yIHNwZWNpZXMsIHBhcmFtZXRlcnMsIHJlYWN0aW9ucywgZXZlbnRzLCBhbmQgcnVsZXMgbXVzdCBiZSB1bmlxdWUuXCIsXG4gICAgXG4gICAgZXhwcmVzc2lvbjogXCJBIHBhcmFtZXRlciB2YWx1ZSBvciBhIG1hdGhlbWF0aWNhbCBleHByZXNzaW9uIGNhbGN1bGF0aW5nIHRoZSBwYXJhbWV0ZXIgdmFsdWUuXCIsXG4gICAgXG4gICAgYW5ub3RhdGlvbjogXCJBbiBvcHRpb25hbCBub3RlIGFib3V0IGEgcGFyYW1ldGVyLlwiLFxuICAgIFxuICAgIHJlbW92ZTogXCJBIHBhcmFtZXRlciBtYXkgb25seSBiZSByZW1vdmVkIGlmIGl0IGlzIG5vdCB1c2VkIGluIGFueSByZWFjdGlvbiwgZXZlbnQgYXNzaWdubWVudCwgb3IgcnVsZS5cIlxuICB9LFxuICByZWFjdGlvbnNFZGl0b3I6IHtcbiAgICBuYW1lOiBcIk5hbWVzIGZvciBzcGVjaWVzLCBwYXJhbWV0ZXJzLCByZWFjdGlvbnMsIGV2ZW50cywgYW5kIHJ1bGVzIG11c3QgYmUgdW5pcXVlLlwiLFxuICAgIFxuICAgIGFubm90YXRpb246IFwiQW4gb3B0aW9uYWwgbm90ZSBhYm91dCB0aGUgcmVhY3Rpb24uXCIsXG4gICAgXG4gICAgcmF0ZTogXCJUaGUgcmF0ZSBvZiB0aGUgbWFzcy1hY3Rpb24gcmVhY3Rpb24uXCIsXG4gICAgXG4gICAgcHJvcGVuc2l0eTogXCJUaGUgY3VzdG9tIHByb3BlbnNpdHkgZXhwcmVzc2lvbiBmb3IgdGhlIHJlYWN0aW9uLlwiLFxuICAgIFxuICAgIHJlYWN0YW50OiBcIlRoZSByZWFjdGFudHMgdGhhdCBhcmUgY29uc3VtZWQgaW4gdGhlIHJlYWN0aW9uLCB3aXRoIHN0b2ljaGlvbWV0cnkuXCIsXG4gICAgXG4gICAgcHJvZHVjdDogXCJUaGUgc3BlY2llcyB0aGF0IGFyZSBjcmVhdGVkIGJ5IHRoZSByZWFjdGlvbiBldmVudCwgd2l0aCBzdG9pY2hpb21ldHJ5LlwiLFxuICB9LFxuICBldmVudHNFZGl0b3I6IHtcbiAgICBuYW1lOiBcIk5hbWVzIGZvciBzcGVjaWVzLCBwYXJhbWV0ZXJzLCByZWFjdGlvbnMsIGV2ZW50cywgYW5kIHJ1bGVzIG11c3QgYmUgdW5pcXVlLlwiLFxuICAgIFxuICAgIGFubm90YXRpb246IFwiQW4gb3B0aW9uYWwgbm90ZSBhYm91dCBhbiBldmVudC5cIixcbiAgICBcbiAgICB0cmlnZ2VyRXhwcmVzc2lvbjogXCJUaGUgdHJpZ2dlciBleHByZXNzaW9uIGNhbiBiZSBhbnkgbWF0aGVtYXRpY2FsIGV4cHJlc3Npb24gd2hpY2ggZXZhbHVhdGVzIHRvIGEgYm9vbGVhbiB2YWx1ZSBpbiBhIHB5dGhvbiBlbnZpcm9ubWVudCAoaS5lLiB0PT01MCkuICBUaGlzIFwiK1xuICAgICAgICBcImV4cHJlc3Npb24gaXMgZXZhbHVhYmxlIHdpdGhpbiB0aGUgbW9kZWwgbmFtZXNwYWNlLCBhbmQgYW55IHZhcmlhYmxlIChTcGVjaWVzLCBQYXJhbWV0ZXJzLCBldGMuKSBjYW4gYmUgcmVmZXJlbmNlZCBpbiB0aGUgZXhwcmVzc2lvbi4gIFRpbWUgaXMgcmVwcmVzZW50ZWQgXCIrXG4gICAgICAgIFwid2l0aCB0aGUgbG93ZXIgY2FzZSB2YXJpYWJsZSAndCcuIEFuIGV2ZW50IHdpbGwgYmVnaW4gZXhlY3V0aW9uIG9mIGFzc2lnbm1lbnRzIChvciBkZWxheSwgaWYgYW55KSBvbmNlIHRoaXMgZXhwcmVzc2lvbiBjaGFuZ2VzIGZyb20gJ0ZhbHNlJyB0byAnVHJ1ZS4nXCIsXG4gICAgXG4gICAgZGVsYXk6IFwiY29udGFpbnMgbWF0aCBleHByZXNzaW9uIGV2YWx1YWJsZSB3aXRoaW4gbW9kZWwgbmFtZXNwYWNlLiBUaGlzIGV4cHJlc3Npb24gZGVzaWduYXRlcyBhIGRlbGF5IGJldHdlZW4gdGhlIHRyaWdnZXIgb2YgYW4gZXZlbnQgYW5kIHRoZSBleGVjdXRpb24gb2YgaXRzIGFzc2lnbm1lbnRzLlwiLFxuICAgIFxuICAgIHByaW9yaXR5OiBcIlR5cGljYWxseSBhIG51bWJlcjogMSwgMiwgZXRjLiB0aGF0IGRlc2lnbmF0ZXMgdGhlIGV4ZWN1dGlvbiBvcmRlciBmb3IgZXZlbnRzIHdoaWNoIGFyZSBleGVjdXRlZCBzaW11bHRhbmVvdXNseS4gIENhbiBiZSBhIG1hdGggZXhwcmVzc2lvbiBldmFsdWFibGUgXCIrXG4gICAgICAgIFwid2l0aGluIHRoZSBtb2RlbCBuYW1lc3BhY2UuXCIsXG4gICAgXG4gICAgaW5pdGlhbFZhbHVlOiBcIklmIHRydWUsIHRoZSB0cmlnZ2VyIGV4cHJlc3Npb24gd2lsbCBiZSBldmFsdWF0ZWQgYXMgJ1RydWUnIGF0IHN0YXJ0IG9mIHNpbXVsYXRpb24uICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIHNvbWUgbW9kZWxzLCBzaW5jZSBhbiBldmVudCBpcyBvbmx5IFwiK1xuICAgICAgICBcImV4ZWN1dGVkIHdoZW4gdGhlIHRyaWdnZXIgZXhwcmVzc2lvbiBzdGF0ZSBjaGFuZ2VzIGZyb20gJ0ZhbHNlJyB0byAnVHJ1ZScuXCIsXG4gICAgXG4gICAgcGVyc2lzdGVudDogXCJJZiBwZXJzaXN0ZW50LCBhbiBldmVudCBhc3NpZ25tZW50IHdpbGwgYWx3YXlzIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGV2ZW50J3MgdHJpZ2dlciBleHByZXNzaW9uIGV2YWx1YXRlcyB0byB0cnVlLiAgSWYgbm90IHBlcnNpc3RlbnQsIHRoZSBldmVudCBcIitcbiAgICAgICAgXCJhc3NpZ25tZW50IHdpbGwgbm90IGJlIGV4ZWN1dGVkIGlmIHRoZSB0cmlnZ2VyIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGZhbHNlIGJldHdlZW4gdGhlIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZCBhbmQgdGhlIHRpbWUgdGhlIGFzc2lnbm1lbnQgaXMgZXhlY3V0ZWQuXCIsXG4gICAgXG4gICAgdXNlVmFsdWVzRnJvbVRyaWdnZXJUaW1lOiBcIklmIHNldCB0byB0cnVlLCBhc3NpZ25tZW50IGV4ZWN1dGlvbiB3aWxsIGJlIGJhc2VkIG9mZiBvZiB0aGUgbW9kZWwgc3RhdGUgYXQgdHJpZ2dlciB0aW1lLiBJZiBmYWxzZSAoZGVmYXVsdCksIHRoZSBhc3NpZ25tZW50IHdpbGwgYmUgXCIrXG4gICAgICAgIFwibWFkZSB1c2luZyB2YWx1ZXMgYXQgYXNzaWdubWVudCB0aW1lLlwiLFxuICAgIFxuICAgIGFzc2lnbm1lbnRzOiBcIkFuIEV2ZW50IEFzc2lnbm1lbnQgZGVzY3JpYmVzIGEgY2hhbmdlIHRvIGJlIHBlcmZvcm1lZCB0byB0aGUgY3VycmVudCBtb2RlbCBzaW11bGF0aW9uLiAgVGhpcyBhc3NpZ25tZW50IGNhbiBlaXRoZXIgYmUgZmlyZWQgYXQgdGhlIHRpbWUgaXRzIGFzc29jaWF0ZWQgXCIrXG4gICAgICAgIFwidHJpZ2dlciBjaGFuZ2VzIGZyb20gZmFsc2UgdG8gdHJ1ZSwgb3IgYWZ0ZXIgYSBzcGVjaWZpZWQgZGVsYXksIGRlcGVuZGluZyBvbiB0aGUgRXZlbnQgY29uZmlndXJhdGlvbi4gQW4gZXZlbnQgbWF5IGNvbnRhaW4gb25lIG9yIG1vcmUgYXNzaWdubWVudHMuXCIsXG4gICAgXG4gICAgdmFyaWFibGU6IFwiVGhlIHRhcmdldCBTcGVjaWVzIG9yIFBhcmFtZXRlciB0byBiZSBtb2RpZmllZCBieSB0aGUgZXZlbnQuXCIsXG4gICAgXG4gICAgYXNzaWdubWVudEV4cHJlc3Npb246IFwiQ2FuIGJlIGFueSBtYXRoZW1hdGljYWwgc3RhdGVtZW50IHdoaWNoIHJlc29sdmVzIHRvIGFuIGludGVnZXIgb3IgZmxvYXQgdmFsdWUuICBUaGlzIHZhbHVlIHdpbGwgYmUgYXNzaWduZWQgdG8gdGhlIGFzc2lnbm1lbnQncyB0YXJnZXQgdmFyaWFibGUgXCIrXG4gICAgICAgIFwidXBvbiBldmVudCBleGVjdXRpb24uXCJcbiAgfSxcbiAgcnVsZXNFZGl0b3I6IHtcbiAgICBuYW1lOiBcIk5hbWVzIGZvciBzcGVjaWVzLCBwYXJhbWV0ZXJzLCByZWFjdGlvbnMsIGV2ZW50cywgYW5kIHJ1bGVzIG11c3QgYmUgdW5pcXVlLlwiLFxuICAgIFxuICAgIHR5cGU6IFwiQXNzaWdubWVudCBSdWxlczogQW4gYXNzaWdubWVudCBydWxlIGRlc2NyaWJlcyBhIGNoYW5nZSB0byBhIFNwZWNpZXMgb3IgUGFyYW1ldGVyIGFzIGEgZnVuY3Rpb24gd2hvc2UgbGVmdC1oYW5kIHNpZGUgaXMgYSBzY2FsYXIgKGkuZS4geCA9IGYoViksIHdoZXJlIFYgaXMgYSBcIitcbiAgICAgICAgXCJ2ZWN0b3Igb2Ygc3ltYm9scywgbm90IGluY2x1ZGluZyB4KS48YnI+ICBSYXRlIFJ1bGVzOiBBIHJhdGUgcnVsZSBkZXNjcmliZXMgYSBjaGFuZ2UgdG8gYSBTcGVjaWVzIG9yIFBhcmFtZXRlciBhcyBhIGZ1bmN0aW9uIHdob3NlIGxlZnQtaGFuZCBzaWRlIGlzIGEgcmF0ZSBvZiBcIitcbiAgICAgICAgXCJjaGFuZ2UgKGkuZS4gZHgvZHQgPSBmKFcpLCB3aGVyZSBXIGlzIGEgdmVjdG9yIG9mIHN5bWJvbHMgd2hpY2ggbWF5IGluY2x1ZGUgeCkuXCIsXG4gICAgXG4gICAgdmFyaWFibGU6IFwiVGFyZ2V0IHZhcmlhYmxlIHRvIGJlIG1vZGlmaWVkIGJ5IHRoZSBSdWxlJ3MgZm9ybXVsYS5cIixcbiAgICBcbiAgICBleHByZXNzaW9uOiBcIkEgUHl0aG9uIGV2YWx1YWJsZSBtYXRoZW1hdGljYWwgZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiBhIHJ1bGUgZnVuY3Rpb24uPGJyPiAgRm9yIEFzc2lnbm1lbnQgUnVsZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgcmlnaHQgaGFuZCBcIitcbiAgICAgICAgXCJzaWRlIG9mIGEgc2NhbGFyIGVxdWF0aW9uLjxicj4gIEZvciBSYXRlIFJ1bGVzLCB0aGlzIHJlcHJlc2VudHMgdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiBhIHJhdGUtb2YtY2hhbmdlIGVxdWF0aW9uLlwiLFxuICAgIFxuICAgIGFubm90YXRpb246IFwiQW4gb3B0aW9uYWwgbm90ZSBhYm91dCBhIHJ1bGUuXCJcbiAgfSxcbiAgc2JtbENvbXBvbmVudHNFZGl0b3I6IHtcbiAgICBhbm5vdGF0aW9uOiBcIkFuIG9wdGlvbmFsIG5vdGUgYWJvdXQgdGhlIFNCTUwgQ29tcG9uZW50LlwiXG4gIH0sXG4gIG1vZGVsU2V0dGluZ3M6IHtcbiAgICBwcmV2aWV3U2V0dGluZ3M6IFwiUHJldmlldyBTZXR0aW5ncyBhcmUgYXBwbGllZCB0byB0aGUgbW9kZWwgYW5kIGFyZSB1c2VkIGZvciB0aGUgbW9kZWwgcHJldmlldyBhbmQgYWxsIHdvcmtmbG93cy5cIixcbiAgICBcbiAgICBwcmV2aWV3VGltZTogXCJFbmQgdGltZSBvZiBzaW11bGF0aW9uLlwiLFxuICAgIFxuICAgIHRpbWVVbml0czogXCJTYXZlIHBvaW50IGluY3JlbWVudCBmb3IgcmVjb3JkaW5nIGRhdGEuXCIsXG4gICAgXG4gICAgdm9sdW1lOiBcIlRoZSB2b2x1bWUgb2YgdGhlIHN5c3RlbSBtYXR0ZXJzIHdoZW4gY29udmVydGluZyB0byBmcm9tIHBvcHVsYXRpb24gdG8gY29uY2VudHJhdGlvbiBmb3JtLiBUaGlzIHdpbGwgYWxzbyBzZXQgYSBwYXJhbWV0ZXIgJ3ZvbCcgZm9yIHVzZSBpbiBjdXN0b20gKGkuZS4gXCIrXG4gICAgICAgIFwibm9uLW1hc3MtYWN0aW9uKSBwcm9wZW5zaXR5IGZ1bmN0aW9ucy5cIlxuICB9LFxuICBzaW11bGF0aW9uU2V0dGluZ3M6IHtcbiAgICBydG9sOiBcIlJlbGF0aXZlIHRvbGVyYW5jZSBmb3Igb2RlIHNvbHV0aW9ucywgY29udHJvbHMgYSByZWxhdGl2ZSBhY2N1cmFjeSAobnVtYmVyIG9mIGNvcnJlY3QgZGlnaXRzKS4gIFRoZSBzb2x2ZXIga2VlcHMgdGhlIGxvY2FsIGVycm9yIGVzdGltYXRlcyBsZXNzIHRoYW4gYXRvbCArIFwiK1xuICAgICAgICBcInJ0b2wgKiBhYnMoeSkuICBWYWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLjAuXCIsXG5cbiAgICBhdG9sOiBcIkFic29sdXRlIHRvbGVyYW5jZSBmb3Igb2RlIHNvbHV0aW9ucywgaWYgYSBjb21wb25lbnQgb2YgeSBpcyBhcHByb3hpbWF0ZWx5IGJlbG93IGF0b2wsIHRoZSBlcnJvciBvbmx5IG5lZWRzIHRvIGZhbGwgd2l0aGluIHRoZSBzYW1lIGF0b2wgdGhyZXNob2xkLCBhbmQgdGhlIFwiK1xuICAgICAgICBcIm51bWJlciBvZiBjb3JyZWN0IGRpZ2l0cyBpcyBub3QgZ3VhcmFudGVlZC4gIFRoZSBzb2x2ZXIga2VlcHMgdGhlIGxvY2FsIGVycm9yIGVzdGltYXRlcyBsZXNzIHRoYW4gYXRvbCArIHJ0b2wgKiBhYnMoeSkuICBWYWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLjAuXCIsXG5cbiAgICB0dG9sOiBcIkEgcmVsYXRpdmUgZXJyb3IgdG9sZXJhbmNlIHZhbHVlIGdvdmVybmluZyB0YXUtbGVhcGluZyB0YXUgc2VsZWN0aW9ucy4gIEJhc2VkIG9uIENhbywgWS47IEdpbGxlc3BpZSwgRC4gVC47IFBldHpvbGQsIEwuIFIuICgyMDA2KS4gJ0VmZmljaWVudCBzdGVwIHNpemUgXCIrXG4gICAgICAgIFwic2VsZWN0aW9uIGZvciB0aGUgdGF1LWxlYXBpbmcgc2ltdWxhdGlvbiBtZXRob2QnIChQREYpLiBUaGUgSm91cm5hbCBvZiBDaGVtaWNhbCBQaHlzaWNzLiAxMjQgKDQpOiAwNDQxMDkuIEJpYmNvZGU6MjAwNkpDaFBoLjEyNGQ0MTA5Qy4gZG9pOjEwLjEwNjMvMS4yMTU5NDY4LiBcIitcbiAgICAgICAgXCJQTUlEIDE2NDYwMTUxICBWYWx1ZSBtdXN0IGJlIGJldHdlZW4gMC4wIGFuZCAxLjAuXCIsXG5cbiAgICBzZWVkOiBcIlRoZSBzZWVkIGZvciB0aGUgc2ltdWxhdGlvbi4gIFNldCB0byAtMSBmb3IgYSByYW5kb20gc2VlZC5cIixcblxuICAgIHJlYWxpemF0aW9uczogXCJUaGUgbnVtYmVyIG9mIHNpbXVsYXRpb24gcmVhbGl6YXRpb25zIHRvIGJlIGV4ZWN1dGVkLiBBIHRpbWUtc2VyaWVzIHRyYWplY3RvcnkgZm9yIGVhY2ggcmVhbGl6YXRpb24gd2lsbCBiZSByZXR1cm5lZCB1cG9uIGNvbXBsZXRpb24gb2YgYWxsIFwiK1xuICAgICAgICBcInJlYWxpemF0aW9ucy5cIixcblxuICAgIGFsZ29yaXRobTpcIlRoZSBzb2x2ZXIgYnkgd2hpY2ggdG8gc2ltdWxhdGUgdGhlIG1vZGVsLlwiLFxuXG4gICAgb2RlOiBcIlRoaXMgYWxnb3JpdGhtIHByb2R1Y2VzIGEgJ2NvbnRpbnVvdXMtZGV0ZXJtaW5pc3RpYycgc29sdXRpb24gaW4gdGhlIHN0eWxlIG9mIE9yZGluYXJ5IERpZmZlcmVudGlhbCBFcXVhdGlvbnMgKE9ERSkuXCIsXG5cbiAgICBzc2E6IFwiVGhpcyBhbGdvcml0aG0gcHJvZHVjZXMgYSAnZGlzY3JldGUtc3RvY2hhc3RpYycgc29sdXRpb24gdXNpbmcgdGhlIFN0b2NoYXN0aWMgU2ltdWxhdGlvbiBBbGdvcml0aG0gKFNTQSwgYWxzbyBrbm93IGFzIHRoZSBHaWxsZXNwaWUgYWxnb3JpdGhtKS5cIixcblxuICAgIHRhdUxlYXBpbmc6IFwiVGhpcyBhbGdvcml0aG0gcHJvZHVjZXMgYSAnZGlzY3JldGUtc3RvY2hhc3RpYycgc29sdXRpb24gdXNpbmcgYSB2YXJpYW50IG9mIHRoZSBTU0EgdGhhdCBpcyBtb3JlIGVmZmljaWVudCwgYnV0IGxlc3MgYWNjdXJhdGUuXCIsXG5cbiAgICBoeWJyaWQ6IFwiVGhpcyBoeWJyaWQgZGV0ZXJtaW5pc3RpYy1zdG9jaGFzdGljIHdpbGwgcHJvZHVjZSBhIHNvbHV0aW9uIHRoYXQgaXMgJ2Rpc2NyZXRlLXN0b2NoYXN0aWMnIGZvciBzbWFsbCBwb3B1bGF0aW9uIHNpemVzIGFuZCAnY29udGludW91cy1kZXRlcm1pbmlzdGljJyBcIitcbiAgICAgICAgXCJmb3IgbGFyZ2UgcG9wdWxhdGlvbiBzaXplcy5cIixcblxuICAgIGNob29zZUZvck1lOiBcIkh5YnJpZCB3aWxsIGJlIHNlbGVjdGVkIGJhc2VkIG9uIEV2ZW50LCBSdWxlcywgYW5kIG90aGVyIFNCTUwgbW9kZWwgY29tcG9uZW50cyBvciBpZiB0aGUgbW9kZWwgaXMgcmVwcmVzZW50ZWQgYXMgQ29uY2VudHJhdGlvbiBvciBIeWJyaWQgXCIrXG4gICAgICAgIFwiQ29uY2VudHJhdGlvbi9Qb3B1bGF0aW9uLiAgSWYgdGhlIG1vZGVsIGlzIHJlcHJlc2VudGVkIGFzIHBvcHVsYXRpb24sIHRoZSBTU0Egd2lsbCBiZSBzZWxlY3RlZC4gIFRoaXMgY2FuIGJlIG1vZGlmaWVkIHRvIGEgVGF1LUxlYXBpbmcgYWxnb3JpdGhtIGJ5IFwiK1xuICAgICAgICBcImNoYW5naW5nIHRoZSBhdS10b2xlcmFuY2UgdmFsdWUgZnJvbSB0aGUgZGVmYXVsdCBvZiAwLjAzLlwiXG4gIH0sXG4gIHBhcmFtZXRlclN3ZWVwU2V0dGluZ3M6IHtcbiAgICBzd2VlcFR5cGU6IFwiVGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIHRvIHN3ZWVwIHRocm91Z2guXCIsXG5cbiAgICBzcGVjaWVzOiBcIlRoZSBpbml0aWFsIHNwZWNpZXMgdG8gdmlldyBzd2VlcCBkYXRhIGZvci5cIixcblxuICAgIHZhcmlhYmxlOiBcIlRoZSBwYXJhbWV0ZXIocykgdG8gc3dlZXAgdGhyb3VnaC5cIixcbiAgICBcbiAgICB2YWx1ZTogXCJUaGUgY3VycmVudCB2YWx1ZSBmb3IgdGhlIHBhcmFtZXRlciB5b3Ugd2l0aCB0byBzd2VlcCB0aHJvdWdoLlwiLFxuICAgIFxuICAgIG1pbjogXCJUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgc3dlZXAgcmFuZ2UuICBEZWZhdWx0cyB0byBoYWxmIG9mIHRoZSBjdXJyZW50IHZhbHVlLlwiLFxuICAgIFxuICAgIG1heDogXCJUaGUgZmluYWwgdmFsdWUgb2YgdGhlIHN3ZWVwIHJhbmdlLiAgRGVmYXVsdHMgdG8gMS41IHRpbWVzIHRoZSBjdXJyZW50IHZhbHVlLlwiLFxuICAgIFxuICAgIHN0ZXBzOiBcIlRoZSBudW1iZXIgb2Ygc3RlcHMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHN3ZWVwIHZhbHVlcyBhY3Jvc3MgdGhlIHN3ZWVwIHJhbmdlLlwiXG4gIH0sXG4gIHBhcmFtZXRlclN3ZWVwUmVzdWx0czoge1xuICAgIHNwZWNpZXM6IFwiVGhlIHNwZWNpZXMgdG8gdmlldyBzd2VlcCBkYXRhIGZvclwiLFxuXG4gICAgbWFwcGVyOiBcIlRoZSAnZmVhdHVyZSBleHRyYWN0b3InIHdoaWNoIGNhbGN1bGF0ZXMgYSBzaW5nbGUgdmFsdWUgZnJvbSB0aGUgc3BlY2llcyBwb3B1bGF0aW9uL2NvbmNlbnRyYXRpb24gZGF0YSBvZiBlYWNoIHNpbXVsYXRlZCB0cmFqZWN0b3J5LlwiLFxuICAgIFxuICAgIHJlZHVjZXI6IFwiVGhlIHN0YXRpc3RpY2FsIGZ1bmN0aW9uIGFwcGxpZWQgdG8gdGhlIGVuc2VtYmxlIG9mIHZhbHVlcyBleHRyYWN0ZWQgYnkgdGhlICdmZWF0dXJlIGV4dHJhY3RvcicgZnJvbSBlYWNoIHNpbXVsYXRpb24gdHJhamVjdG9yeS5cIlxuICB9LFxuICB3b3JrZmxvd1NlbGVjdGlvbjoge1xuICAgIGVuc2VtYmxlU2ltdWxhdGlvbjogXCJQcm9kdWNlIGEgdGltZS1zZXJpZXMgcmVzdWx0IGZvciBvbmUgb3IgbW9yZSBzaW11bGF0aW9uKHMpIG9mIHRoZSBtb2RlbC5cIixcblxuICAgIHBhcmFtZXRlclN3ZWVwOiBcIlByb2R1Y2VkIGFuZCBjb21wYXJlIHJlc3VsdHMgZnJvbSBtb2RlbCBzaW11bGF0aW9ucyBieSB2YXJ5aW5nIHBhcmFtZXRlcnMgb3ZlciBhIHJhbmdlLlwiXG4gIH1cbn0iLCJ2YXIgQW1wZXJzYW5kSW5wdXRWaWV3ID0gcmVxdWlyZSgnYW1wZXJzYW5kLWlucHV0LXZpZXcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBBbXBlcnNhbmRJbnB1dFZpZXcuZXh0ZW5kKHtcbiAgcHJvcHM6IHtcbiAgICBuYW1lOiAnc3RyaW5nJyxcbiAgICBsYWJlbDogJ3N0cmluZycsXG4gICAgbW9kZWxLZXk6ICdzdHJpbmcnLFxuICAgIHZhbHVlVHlwZTogJ3N0cmluZycsXG4gIH0sXG4gIGV2ZW50czoge1xuICAgICdjaGFuZ2UgaW5wdXQnIDogJ2NoYW5nZUlucHV0SGFuZGxlcicsXG4gIH0sXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uIChhdHRycywgb3B0aW9ucykge1xuICAgIEFtcGVyc2FuZElucHV0Vmlldy5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uICgpIHtcbiAgICBpZih0aGlzLmxhYmVsKVxuICAgICAgdGhpcy50ZW1wbGF0ZSA9IFtcbiAgICAgICAgJzxsYWJlbD4nLFxuICAgICAgICAgICAgJzxzcGFuIGRhdGEtaG9vaz1cImxhYmVsXCI+PC9zcGFuPicsXG4gICAgICAgICAgICAnPGlucHV0IGNsYXNzPVwiZm9ybS1pbnB1dCBsYWJlbGVkXCI+JyxcbiAgICAgICAgICAgICc8ZGl2IGRhdGEtaG9vaz1cIm1lc3NhZ2UtY29udGFpbmVyXCIgY2xhc3M9XCJtZXNzYWdlIG1lc3NhZ2UtYmVsb3cgbWVzc2FnZS1lcnJvclwiPicsXG4gICAgICAgICAgICAgICAgJzxwIGRhdGEtaG9vaz1cIm1lc3NhZ2UtdGV4dFwiPjwvcD4nLFxuICAgICAgICAgICAgJzwvZGl2PicsXG4gICAgICAgICc8L2xhYmVsPidcbiAgICAgIF0uam9pbignJylcbiAgICBBbXBlcnNhbmRJbnB1dFZpZXcucHJvdG90eXBlLnJlbmRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9LFxuICBjaGFuZ2VJbnB1dEhhbmRsZXI6IGZ1bmN0aW9uIChlKSB7XG4gICAgaWYodGhpcy5tb2RlbEtleSl7XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlVHlwZSA9PT0gJ251bWJlcicgPyBOdW1iZXIoZS50YXJnZXQudmFsdWUpIDogZS50YXJnZXQudmFsdWU7XG4gICAgICB0aGlzLnBhcmVudC5tb2RlbFt0aGlzLm1vZGVsS2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfSxcbn0pOyIsInZhciBfID0gcmVxdWlyZSgndW5kZXJzY29yZScpO1xudmFyICQgPSByZXF1aXJlKCdqcXVlcnknKTtcbi8vdmFyIHNldEZhdmljb24gPSByZXF1aXJlKCdmYXZpY29uLXNldHRlcicpO1xudmFyIGFwcCA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1hcHAnKTtcbnZhciBWaWV3ID0gcmVxdWlyZSgnYW1wZXJzYW5kLXZpZXcnKTtcbnZhciBWaWV3U3dpdGNoZXIgPSByZXF1aXJlKCdhbXBlcnNhbmQtdmlldy1zd2l0Y2hlcicpO1xudmFyIGxvY2FsTGlua3MgPSByZXF1aXJlKCdsb2NhbC1saW5rcycpO1xudmFyIGRvbWlmeSA9IHJlcXVpcmUoJ2RvbWlmeScpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cbnZhciBoZWFkVGVtcGxhdGUgPSByZXF1aXJlKCchcHVnLWxvYWRlciEuLi90ZW1wbGF0ZXMvaGVhZC5wdWcnKTtcbnZhciBib2R5VGVtcGxhdGUgPSByZXF1aXJlKCchcHVnLWxvYWRlciEuLi90ZW1wbGF0ZXMvYm9keS5wdWcnKTtcblxubGV0IG9wZXJhdGlvbkluZm9Nb2RhbEh0bWwgPSAoaW5mb0tleSkgPT4ge1xuICBsZXQgZmlsZUJyb3dzZXJJbmZvID0gYFxuICAgIDxwPkluIFN0b2NoU1Mgd2UgdXNlIGN1c3RvbSBmaWxlIGV4dGVuc2lvbnMgZm9yIGEgbnVtYmVyIG9mIGZpbGVzIHdlIHdvcmsgd2l0aC4gIEhlcmUgaXMgYSBsaXN0IG9mIG91ciBleHRlbnRpb25zIHdpdGggdGhlIGZpbGVzIHRoZXkgYXJlIGFzc29jaWF0ZWQgd2l0aDo8L3A+XG4gICAgPHRhYmxlIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDJlbTtcIj5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRkIHdpZHRoPTIwMD4gU3RvY2hTUyBNb2RlbCA8L3RkPlxuICAgICAgICA8dGQ+IC5tZGwgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHI+XG4gICAgICAgIDx0ZCB3aWR0aD0yMDA+IFN0b2NoU1MgU3BhdGlhbCBNb2RlbCA8L3RkPlxuICAgICAgICA8dGQ+IC5zbWRsIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgICAgPHRyPlxuICAgICAgICA8dGQgd2lkdGg9MjAwPiBTQk1MIE1vZGVsIDwvdGQ+XG4gICAgICAgIDx0ZD4gLnNibWwgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHI+XG4gICAgICAgIDx0ZCB3aWR0aD0yMDA+IFdvcmtmbG93cyA8L3RkPlxuICAgICAgICA8dGQ+IC53a2ZsIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvdGFibGU+XG4gICAgPGJyPlxuICAgIDxwPk90aGVyIHVzZWZ1bCBmaWxlIGV4dGVuc2lvbnMgaW5jbHVkZSB0aGUgZm9sbG93aW5nOjwvcD5cbiAgICA8dGFibGUgc3R5bGU9XCJtYXJnaW4tbGVmdDogMmVtO1wiPlxuICAgICAgPHRyPlxuICAgICAgICA8dGQgd2lkdGg9MjAwPiBKdXB5dGVyIE5vdGVib29rIDwvdGQ+XG4gICAgICAgIDx0ZD4gLmlweW5iIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvdGFibGU+XG4gIGA7XG4gIGxldCBtb2RlbEluZm8gPSBgXG4gICAgTW9kZWwgSW5mb3JtYXRpb25cbiAgYDtcbiAgbGV0IHdvcmtmbG93SW5mbyA9IGBcbiAgICBXb3JrZmxvdyBJbmZvcm1hdGlvblxuICBgO1xuXG4gIGxldCBpbmZvTGlzdCA9IHtcIkZpbGUgQnJvd3NlclwiOmZpbGVCcm93c2VySW5mbywgXCJNb2RlbHNcIjptb2RlbEluZm8sIFwiV29ya2Zsb3dzXCI6d29ya2Zsb3dJbmZvfVxuICBcbiAgcmV0dXJuIGBcbiAgICA8ZGl2IGlkPVwib3BlcmF0aW9uSW5mb01vZGFsXCIgY2xhc3M9XCJtb2RhbFwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50IGluZm9cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPiBXb3JraW5nIHdpdGggJHtpbmZvS2V5fSA8L2g1PlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgPHA+ICR7aW5mb0xpc3RbaW5mb0tleV19IDwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5DbG9zZTwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgIFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFZpZXcuZXh0ZW5kKHtcbiAgdGVtcGxhdGU6IGJvZHlUZW1wbGF0ZSxcbiAgYXV0b1JlbmRlcjogdHJ1ZSxcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5saXN0ZW5UbyhhcHAsICdwYWdlJywgdGhpcy5oYW5kbGVOZXdQYWdlKTtcbiAgfSxcbiAgZXZlbnRzOiB7XG4gICAgJ2NsaWNrIFtkYXRhLWhvb2s9cmVnaXN0cmF0aW9uLWxpbmstYnV0dG9uXScgOiAnaGFuZGxlUmVnaXN0cmF0aW9uTGlua0NsaWNrJyxcbiAgICAvLydjbGljayBhW2hyZWZdJzogJ2hhbmRsZUxpbmtDbGljaydcbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7XG5cbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGRvbWlmeShoZWFkVGVtcGxhdGUoKSkpO1xuXG4gICAgdGhpcy5yZW5kZXJXaXRoVGVtcGxhdGUodGhpcyk7XG4gICAgXG4gICAgdGhpcy5wYWdlQ29udGFpbmVyID0gdGhpcy5xdWVyeUJ5SG9vaygncGFnZS1jb250YWluZXInKTtcblxuICAgIHRoaXMucGFnZVN3aXRjaGVyID0gbmV3IFZpZXdTd2l0Y2hlcih7XG4gICAgICBlbDogdGhpcy5wYWdlQ29udGFpbmVyLFxuICAgICAgc2hvdzogZnVuY3Rpb24gKG5ld1ZpZXcsIG9sZFZpZXcpIHtcbiAgICAgICAgZG9jdW1lbnQudGl0bGUgPSBfLnJlc3VsdChuZXdWaWV3LCAncGFnZVRpdGxlJykgfHwgJ1N0b2NoU1MnO1xuICAgICAgICBkb2N1bWVudC5zY3JvbGxUb3AgPSAwO1xuICAgICAgICBcbiAgICAgICAgYXBwLmN1cnJlbnRQYWdlID0gbmV3VmlldztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBob21lUGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zdGFydHNXaXRoKFwiL3VzZXJcIikgPyBcIi9odWIvc3RvY2hzc1wiIDogXCJzdG9jaHNzL21vZGVsc1wiXG4gICAgJCh0aGlzLnF1ZXJ5QnlIb29rKFwiaG9tZS1saW5rXCIpKS5wcm9wKCdocmVmJywgaG9tZVBhdGgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIFxuICBoYW5kbGVOZXdQYWdlOiBmdW5jdGlvbiAodmlldykge1xuICAgIHRoaXMucGFnZVN3aXRjaGVyLnNldCh2aWV3KTtcbiAgICAvL3RoaXMudXBkYXRlQWN0aXZlTmF2KCk7XG4gIH0sXG5cbiAgaGFuZGxlTGlua0NsaWNrOiBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBsb2NhbFBhdGggPSBsb2NhbExpbmtzLnBhdGhuYW1lKGUpO1xuXG4gICAgaWYgKGxvY2FsUGF0aCkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5uYXZpZ2F0ZShsb2NhbFBhdGgpO1xuICAgIH1cbiAgfSxcblxuICBoYW5kbGVSZWdpc3RyYXRpb25MaW5rQ2xpY2s6IGZ1bmN0aW9uICgpIHtcbiAgICAkKHRoaXMucXVlcnlCeUhvb2soXCJyZWdpc3RyYXRpb24tZm9ybVwiKSkuY29sbGFwc2UoJ3Nob3cnKTtcbiAgICAkKHRoaXMucXVlcnlCeUhvb2soXCJyZWdpc3RyYXRpb24tbGlua1wiKSkuY29sbGFwc2UoKTtcbiAgfSxcblxuICBuYXZpZ2F0ZTogZnVuY3Rpb24gKHBhZ2UpIHtcbiAgICB3aW5kb3cubG9jYXRpb24gPSB1cmw7XG4gIH1cbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIG5hbWVUZXN0czogW1xuICAgIGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICBpZiAoL15bMC05XSsvLnRlc3QodGV4dCkpIHtcbiAgICAgICAgcmV0dXJuIFwiRmllbGQgY2Fubm90IHN0YXJ0IHdpdGggYSBudW1iZXIuIFN0YXJ0IHdpdGggbGV0dGVyIG9yIHVuZGVyc2NvcmUuXCIgXG4gICAgICB9XG4gICAgfSxcbiAgICBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgaWYgKCEvXlthLXpBLVowLTlfXSskLy50ZXN0KHRleHQpKSB7XG4gICAgICAgIHJldHVybiBcIkludmFsaWQgY2hhcmFjdGVycy4gUGxlYXNlIG9ubHkgdXNlIGxldHRlcnMsIG51bWJlcnMsIG9yIHVuZGVyc2NvcmVzLlwiXG4gICAgICB9XG4gICAgfSxcbiAgICBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgaWYodGhpcy5wYXJlbnQubW9kZWwgJiYgdGhpcy5wYXJlbnQubW9kZWwuY29sbGVjdGlvbil7XG4gICAgICAgIHZhciBpc0R1cGxpY2F0ZSA9IHRoaXMucGFyZW50Lm1vZGVsLmNvbGxlY3Rpb24uc29tZShmdW5jdGlvbiAobSkgeyByZXR1cm4gbS5uYW1lID09PSB0ZXh0ICYmIHRoaXMucGFyZW50Lm1vZGVsICE9PSBtO1xuICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgaWYgKGlzRHVwbGljYXRlKSB7XG4gICAgICAgICAgcmV0dXJuIFwiTm8gZHVwbGljYXRlIGVudHJpZXMuXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIF0sXG4gIHZhbHVlVGVzdHM6IFtcbiAgICBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmIChpc05hTihOdW1iZXIodmFsdWUpKSkge1xuICAgICAgICByZXR1cm4gXCJNdXN0IGJlIGEgbnVtYmVyLlwiXG4gICAgICB9XG4gICAgfSxcbiAgICBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmIChOdW1iZXIodmFsdWUpIDwgMCkge1xuICAgICAgICByZXR1cm4gXCJNdXN0IGJlIG5vbi1uZWdhdGl2ZS5cIlxuICAgICAgfVxuICAgIH0sXG4gIF0sXG59IiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdmctd2l0aC1qcy5taW4uY3NzXCIpO1xuXG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcblxudmFyIHRyYW5zZm9ybTtcbnZhciBpbnNlcnRJbnRvO1xuXG5cblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxuXG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxub3B0aW9ucy5pbnNlcnRJbnRvID0gdW5kZWZpbmVkO1xuXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi8uLi9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1wiKShjb250ZW50LCBvcHRpb25zKTtcblxuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG5cbmlmKG1vZHVsZS5ob3QpIHtcblx0bW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdmctd2l0aC1qcy5taW4uY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N2Zy13aXRoLWpzLm1pbi5jc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iLCIvKiRBTVBFUlNBTkRfVkVSU0lPTiovXG52YXIgRXZlbnRzID0gcmVxdWlyZSgnYW1wZXJzYW5kLWV2ZW50cycpO1xudmFyIHRvQXJyYXkgPSByZXF1aXJlKCdsb2Rhc2gvdG9BcnJheScpO1xudmFyIGV4dGVuZCA9IHJlcXVpcmUoJ2xvZGFzaC9hc3NpZ24nKTtcblxuXG4vLyBpbnN0YW5jZSBhcHAsIGNhbiBiZSB1c2VkIGp1c3QgYnkgaXRzZWxmXG4vLyBvciBieSBjYWxsaW5nIGFzIGZ1bmN0aW9uIHRvIHBhc3MgbGFiZWxzXG4vLyBieSBhdHRhY2hpbmcgYWxsIGluc3RhbmNlcyB0byB0aGlzLCB3ZSBjYW5cbi8vIGF2b2lkIGdsb2JhbHNcbnZhciBhcHAgPSB7XG4gICAgZXh0ZW5kOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gdG9BcnJheShhcmd1bWVudHMpO1xuICAgICAgICBhcmdzLnVuc2hpZnQodGhpcyk7XG4gICAgICAgIHJldHVybiBleHRlbmQuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSxcbiAgICByZXNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBjbGVhciBhbGwgZXZlbnRzXG4gICAgICAgIHRoaXMub2ZmKCk7XG4gICAgICAgIC8vIHJlbW92ZSBhbGwgYnV0IG1haW4gdHdvIG1ldGhvZHNcbiAgICAgICAgZm9yICh2YXIgaXRlbSBpbiB0aGlzKSB7XG4gICAgICAgICAgICBpZiAoaXRlbSAhPT0gJ2V4dGVuZCcgJiYgaXRlbSAhPT0gJ3Jlc2V0Jykge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzW2l0ZW1dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHJlbWl4IGV2ZW50c1xuICAgICAgICBFdmVudHMuY3JlYXRlRW1pdHRlcih0aGlzKTtcbiAgICB9XG59O1xuXG5FdmVudHMuY3JlYXRlRW1pdHRlcihhcHApO1xuXG4vLyBleHBvcnQgb3VyIHNpbmdsZXRvblxubW9kdWxlLmV4cG9ydHMgPSBhcHA7XG4iLCJ2YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpO1xuXG4vLy8gRm9sbG93aW5nIGNvZGUgaXMgbGFyZ2VseSBwYXN0ZWQgZnJvbSBCYWNrYm9uZS5qc1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29ycmVjdGx5IHNldCB1cCB0aGUgcHJvdG90eXBlIGNoYWluLCBmb3Igc3ViY2xhc3Nlcy5cbi8vIFNpbWlsYXIgdG8gYGdvb2cuaW5oZXJpdHNgLCBidXQgdXNlcyBhIGhhc2ggb2YgcHJvdG90eXBlIHByb3BlcnRpZXMgYW5kXG4vLyBjbGFzcyBwcm9wZXJ0aWVzIHRvIGJlIGV4dGVuZGVkLlxudmFyIGV4dGVuZCA9IGZ1bmN0aW9uKHByb3RvUHJvcHMpIHtcbiAgICB2YXIgcGFyZW50ID0gdGhpcztcbiAgICB2YXIgY2hpbGQ7XG4gICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cbiAgICAvLyBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBuZXcgc3ViY2xhc3MgaXMgZWl0aGVyIGRlZmluZWQgYnkgeW91XG4gICAgLy8gKHRoZSBcImNvbnN0cnVjdG9yXCIgcHJvcGVydHkgaW4geW91ciBgZXh0ZW5kYCBkZWZpbml0aW9uKSwgb3IgZGVmYXVsdGVkXG4gICAgLy8gYnkgdXMgdG8gc2ltcGx5IGNhbGwgdGhlIHBhcmVudCdzIGNvbnN0cnVjdG9yLlxuICAgIGlmIChwcm90b1Byb3BzICYmIHByb3RvUHJvcHMuaGFzT3duUHJvcGVydHkoJ2NvbnN0cnVjdG9yJykpIHtcbiAgICAgICAgY2hpbGQgPSBwcm90b1Byb3BzLmNvbnN0cnVjdG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIEFkZCBzdGF0aWMgcHJvcGVydGllcyB0byB0aGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZnJvbSBwYXJlbnRcbiAgICBhc3NpZ24oY2hpbGQsIHBhcmVudCk7XG5cbiAgICAvLyBTZXQgdGhlIHByb3RvdHlwZSBjaGFpbiB0byBpbmhlcml0IGZyb20gYHBhcmVudGAsIHdpdGhvdXQgY2FsbGluZ1xuICAgIC8vIGBwYXJlbnRgJ3MgY29uc3RydWN0b3IgZnVuY3Rpb24uXG4gICAgdmFyIFN1cnJvZ2F0ZSA9IGZ1bmN0aW9uKCl7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfTtcbiAgICBTdXJyb2dhdGUucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTtcbiAgICBjaGlsZC5wcm90b3R5cGUgPSBuZXcgU3Vycm9nYXRlKCk7XG5cbiAgICAvLyBNaXggaW4gYWxsIHByb3RvdHlwZSBwcm9wZXJ0aWVzIHRvIHRoZSBzdWJjbGFzcyBpZiBzdXBwbGllZC5cbiAgICBpZiAocHJvdG9Qcm9wcykge1xuICAgICAgICBhcmdzLnVuc2hpZnQoY2hpbGQucHJvdG90eXBlKTtcbiAgICAgICAgYXNzaWduLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH1cblxuICAgIC8vIFNldCBhIGNvbnZlbmllbmNlIHByb3BlcnR5IGluIGNhc2UgdGhlIHBhcmVudCdzIHByb3RvdHlwZSBpcyBuZWVkZWRcbiAgICAvLyBsYXRlci5cbiAgICBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlO1xuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLy8gRXhwb3NlIHRoZSBleHRlbmQgZnVuY3Rpb25cbm1vZHVsZS5leHBvcnRzID0gZXh0ZW5kO1xuIiwiLyokQU1QRVJTQU5EX1ZFUlNJT04qL1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ2xvZGFzaC9hc3NpZ24nKTtcbnZhciBpbnZva2VNYXAgPSByZXF1aXJlKCdsb2Rhc2gvaW52b2tlTWFwJyk7XG52YXIgcGljayA9IHJlcXVpcmUoJ2xvZGFzaC9waWNrJyk7XG52YXIgZmluZCA9IHJlcXVpcmUoJ2xvZGFzaC9maW5kJyk7XG52YXIgZGlmZmVyZW5jZSA9IHJlcXVpcmUoJ2xvZGFzaC9kaWZmZXJlbmNlJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJ2xvZGFzaC9iaW5kJyk7XG52YXIgRXZlbnRzID0gcmVxdWlyZSgnYW1wZXJzYW5kLWV2ZW50cycpO1xudmFyIGFtcEV4dGVuZCA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1jbGFzcy1leHRlbmQnKTtcblxuLy8gb3B0aW9uc1xudmFyIG9wdGlvbnMgPSBbJ2NvbGxlY3Rpb24nLCAnZWwnLCAndmlld09wdGlvbnMnLCAndmlldycsICdlbXB0eVZpZXcnLCAnZmlsdGVyJywgJ3JldmVyc2UnLCAncGFyZW50J107XG5cblxuZnVuY3Rpb24gQ29sbGVjdGlvblZpZXcoc3BlYykge1xuICAgIGlmICghc3BlYykge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ0NvbGxlY3Rpb24gdmlldyBtaXNzaW5nIHJlcXVpcmVkIHBhcmFtZXRlcnM6IGNvbGxlY3Rpb24sIGVsJyk7XG4gICAgfVxuICAgIGlmICghc3BlYy5jb2xsZWN0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignQ29sbGVjdGlvbiB2aWV3IHJlcXVpcmVzIGEgY29sbGVjdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIXNwZWMuZWwgJiYgIXRoaXMuaW5zZXJ0U2VsZikge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ0NvbGxlY3Rpb24gdmlldyByZXF1aXJlcyBhbiBlbCcpO1xuICAgIH1cbiAgICBhc3NpZ24odGhpcywgcGljayhzcGVjLCBvcHRpb25zKSk7XG4gICAgdGhpcy52aWV3cyA9IFtdO1xuICAgIHRoaXMubGlzdGVuVG8odGhpcy5jb2xsZWN0aW9uLCAnYWRkJywgdGhpcy5fYWRkVmlld0Zvck1vZGVsKTtcbiAgICB0aGlzLmxpc3RlblRvKHRoaXMuY29sbGVjdGlvbiwgJ3JlbW92ZScsIHRoaXMuX3JlbW92ZVZpZXdGb3JNb2RlbCk7XG4gICAgdGhpcy5saXN0ZW5Ubyh0aGlzLmNvbGxlY3Rpb24sICdzb3J0JywgdGhpcy5fcmVyZW5kZXJBbGwpO1xuICAgIHRoaXMubGlzdGVuVG8odGhpcy5jb2xsZWN0aW9uLCAncmVmcmVzaCByZXNldCcsIHRoaXMuX3Jlc2V0KTtcbn1cblxuYXNzaWduKENvbGxlY3Rpb25WaWV3LnByb3RvdHlwZSwgRXZlbnRzLCB7XG4gICAgLy8gZm9yIHZpZXcgY29udHJhY3QgY29tcGxpYW5jZVxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl9yZW5kZXJBbGwoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICByZW1vdmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaW52b2tlTWFwKHRoaXMudmlld3MsICdyZW1vdmUnKTtcbiAgICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nKCk7XG4gICAgfSxcbiAgICBfZ2V0Vmlld0J5TW9kZWw6IGZ1bmN0aW9uIChtb2RlbCkge1xuICAgICAgICByZXR1cm4gZmluZCh0aGlzLnZpZXdzLCBmdW5jdGlvbiAodmlldykge1xuICAgICAgICAgICAgcmV0dXJuIG1vZGVsID09PSB2aWV3Lm1vZGVsO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIF9jcmVhdGVWaWV3Rm9yTW9kZWw6IGZ1bmN0aW9uIChtb2RlbCwgcmVuZGVyT3B0cykge1xuICAgICAgICB2YXIgZGVmYXVsdFZpZXdPcHRpb25zID0ge21vZGVsOiBtb2RlbCwgY29sbGVjdGlvbjogdGhpcy5jb2xsZWN0aW9uLCBwYXJlbnQ6IHRoaXN9O1xuICAgICAgICB2YXIgdmlldyA9IG5ldyB0aGlzLnZpZXcoYXNzaWduKGRlZmF1bHRWaWV3T3B0aW9ucywgdGhpcy52aWV3T3B0aW9ucykpO1xuICAgICAgICB0aGlzLnZpZXdzLnB1c2godmlldyk7XG4gICAgICAgIHZpZXcucmVuZGVyZWRCeVBhcmVudFZpZXcgPSB0cnVlO1xuICAgICAgICB2aWV3LnJlbmRlcihyZW5kZXJPcHRzKTtcbiAgICAgICAgcmV0dXJuIHZpZXc7XG4gICAgfSxcbiAgICBfZ2V0T3JDcmVhdGVCeU1vZGVsOiBmdW5jdGlvbiAobW9kZWwsIHJlbmRlck9wdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFZpZXdCeU1vZGVsKG1vZGVsKSB8fCB0aGlzLl9jcmVhdGVWaWV3Rm9yTW9kZWwobW9kZWwsIHJlbmRlck9wdHMpO1xuICAgIH0sXG4gICAgX2FkZFZpZXdGb3JNb2RlbDogZnVuY3Rpb24gKG1vZGVsLCBjb2xsZWN0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBtYXRjaGVzID0gdGhpcy5maWx0ZXIgPyB0aGlzLmZpbHRlcihtb2RlbCkgOiB0cnVlO1xuICAgICAgICBpZiAoIW1hdGNoZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZW5kZXJlZEVtcHR5Vmlldykge1xuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlVmlldyh0aGlzLnJlbmRlcmVkRW1wdHlWaWV3KTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnJlbmRlcmVkRW1wdHlWaWV3O1xuICAgICAgICB9XG4gICAgICAgIHZhciB2aWV3ID0gdGhpcy5fZ2V0T3JDcmVhdGVCeU1vZGVsKG1vZGVsLCB7Y29udGFpbmVyRWw6IHRoaXMuZWx9KTtcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yZXJlbmRlcikge1xuICAgICAgICAgICAgdGhpcy5faW5zZXJ0Vmlldyh2aWV3KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2luc2VydFZpZXdBdEluZGV4KHZpZXcpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBfaW5zZXJ0Vmlld0F0SW5kZXg6IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgICAgIGlmICghdmlldy5pbnNlcnRTZWxmKSB7XG4gICAgICAgICAgICB2YXIgcG9zID0gdGhpcy5jb2xsZWN0aW9uLmluZGV4T2Yodmlldy5tb2RlbCk7XG4gICAgICAgICAgICBwb3MgPSB0aGlzLnJldmVyc2UgPyBwb3MgLSAxIDogcG9zICsgMTtcblxuICAgICAgICAgICAgdmFyIG1vZGVsVG9JbnNlcnRCZWZvcmUgPSB0aGlzLmNvbGxlY3Rpb24uYXQocG9zKTtcblxuICAgICAgICAgICAgdmFyIHZpZXdUb0luc2VydEJlZm9yZSA9IHRoaXMuX2dldFZpZXdCeU1vZGVsKG1vZGVsVG9JbnNlcnRCZWZvcmUpO1xuXG4gICAgICAgICAgICAvLyBGSVggSUUgYnVnIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTm9kZS5pbnNlcnRCZWZvcmUpXG4gICAgICAgICAgICAvLyBcIkluIEludGVybmV0IEV4cGxvcmVyIGFuIHVuZGVmaW5lZCB2YWx1ZSBhcyByZWZlcmVuY2VFbGVtZW50IHdpbGwgdGhyb3cgZXJyb3JzLCB3aGlsZSBpbiByZXN0IG9mIHRoZSBtb2Rlcm4gYnJvd3NlcnMsIHRoaXMgd29ya3MgZmluZS5cIlxuICAgICAgICAgICAgaWYgKHZpZXdUb0luc2VydEJlZm9yZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZWwuaW5zZXJ0QmVmb3JlKHZpZXcuZWwsIHZpZXdUb0luc2VydEJlZm9yZSAmJiB2aWV3VG9JbnNlcnRCZWZvcmUuZWwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsLmFwcGVuZENoaWxkKHZpZXcuZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBfaW5zZXJ0VmlldzogZnVuY3Rpb24gKHZpZXcpIHtcbiAgICAgICAgaWYgKCF2aWV3Lmluc2VydFNlbGYpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJldmVyc2UgJiYgdGhpcy5lbC5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5pbnNlcnRCZWZvcmUodmlldy5lbCwgdGhpcy5lbC5maXJzdENoaWxkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5hcHBlbmRDaGlsZCh2aWV3LmVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgX3JlbW92ZVZpZXdGb3JNb2RlbDogZnVuY3Rpb24gKG1vZGVsKSB7XG4gICAgICAgIHZhciB2aWV3ID0gdGhpcy5fZ2V0Vmlld0J5TW9kZWwobW9kZWwpO1xuICAgICAgICBpZiAoIXZpZXcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnZpZXdzLmluZGV4T2Yodmlldyk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSBpdCBpZiB3ZSBmb3VuZCBpdCBjYWxsaW5nIGFuaW1hdGVSZW1vdmVcbiAgICAgICAgICAgIC8vIHRvIGdpdmUgdXNlciBvcHRpb24gb2YgZ3JhY2VmdWxseSBkZXN0cm95aW5nLlxuICAgICAgICAgICAgdmlldyA9IHRoaXMudmlld3Muc3BsaWNlKGluZGV4LCAxKVswXTtcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZVZpZXcodmlldyk7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJFbXB0eVZpZXcoKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgX3JlbW92ZVZpZXc6IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgICAgIGlmICh2aWV3LmFuaW1hdGVSZW1vdmUpIHtcbiAgICAgICAgICAgIHZpZXcuYW5pbWF0ZVJlbW92ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmlldy5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgX3JlbmRlckFsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmNvbGxlY3Rpb24uZWFjaChiaW5kKHRoaXMuX2FkZFZpZXdGb3JNb2RlbCwgdGhpcykpO1xuICAgICAgICB0aGlzLl9yZW5kZXJFbXB0eVZpZXcoKTtcbiAgICB9LFxuICAgIF9yZXJlbmRlckFsbDogZnVuY3Rpb24gKGNvbGxlY3Rpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIHRoaXMuY29sbGVjdGlvbi5lYWNoKGJpbmQoZnVuY3Rpb24gKG1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLl9hZGRWaWV3Rm9yTW9kZWwobW9kZWwsIHRoaXMsIGFzc2lnbihvcHRpb25zLCB7cmVyZW5kZXI6IHRydWV9KSk7XG4gICAgICAgIH0sIHRoaXMpKTtcbiAgICB9LFxuICAgIF9yZW5kZXJFbXB0eVZpZXc6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy52aWV3cy5sZW5ndGggPT09IDAgJiYgdGhpcy5lbXB0eVZpZXcgJiYgIXRoaXMucmVuZGVyZWRFbXB0eVZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZWRFbXB0eVZpZXcgPSBuZXcgdGhpcy5lbXB0eVZpZXcoe3BhcmVudDogdGhpc30pO1xuICAgICAgICAgICAgdGhpcy5lbC5hcHBlbmRDaGlsZCh0aGlzLnJlbmRlcmVkRW1wdHlWaWV3LnJlbmRlcigpLmVsKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgX3Jlc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBuZXdWaWV3cyA9IHRoaXMuY29sbGVjdGlvbi5tYXAoYmluZCh0aGlzLl9nZXRPckNyZWF0ZUJ5TW9kZWwsIHRoaXMpKTtcblxuICAgICAgICAvL1JlbW92ZSBleGlzdGluZyB2aWV3cyBmcm9tIHRoZSB1aVxuICAgICAgICB2YXIgdG9SZW1vdmUgPSBkaWZmZXJlbmNlKHRoaXMudmlld3MsIG5ld1ZpZXdzKTtcbiAgICAgICAgdG9SZW1vdmUuZm9yRWFjaCh0aGlzLl9yZW1vdmVWaWV3LCB0aGlzKTtcblxuICAgICAgICAvL1JlcmVuZGVyIHRoZSBmdWxsIGxpc3Qgd2l0aCB0aGUgbmV3IHZpZXdzXG4gICAgICAgIHRoaXMudmlld3MgPSBuZXdWaWV3cztcbiAgICAgICAgdGhpcy5fcmVyZW5kZXJBbGwoKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyRW1wdHlWaWV3KCk7XG4gICAgfVxufSk7XG5cbkNvbGxlY3Rpb25WaWV3LmV4dGVuZCA9IGFtcEV4dGVuZDtcblxubW9kdWxlLmV4cG9ydHMgPSBDb2xsZWN0aW9uVmlldztcbiIsInZhciBBbXBlcnNhbmRFdmVudHMgPSByZXF1aXJlKCdhbXBlcnNhbmQtZXZlbnRzJyk7XG52YXIgY2xhc3NFeHRlbmQgPSByZXF1aXJlKCdhbXBlcnNhbmQtY2xhc3MtZXh0ZW5kJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJ2xvZGFzaC9pc0FycmF5Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJ2xvZGFzaC9iaW5kJyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpO1xudmFyIHNsaWNlID0gW10uc2xpY2U7XG5cbmZ1bmN0aW9uIENvbGxlY3Rpb24obW9kZWxzLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTtcbiAgICBpZiAob3B0aW9ucy5tb2RlbCkgdGhpcy5tb2RlbCA9IG9wdGlvbnMubW9kZWw7XG4gICAgaWYgKG9wdGlvbnMuY29tcGFyYXRvcikgdGhpcy5jb21wYXJhdG9yID0gb3B0aW9ucy5jb21wYXJhdG9yO1xuICAgIGlmIChvcHRpb25zLnBhcmVudCkgdGhpcy5wYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcbiAgICBpZiAoIXRoaXMubWFpbkluZGV4KSB7XG4gICAgICAgIHZhciBpZEF0dHJpYnV0ZSA9IHRoaXMubW9kZWwgJiYgdGhpcy5tb2RlbC5wcm90b3R5cGUgJiYgdGhpcy5tb2RlbC5wcm90b3R5cGUuaWRBdHRyaWJ1dGU7XG4gICAgICAgIHRoaXMubWFpbkluZGV4ID0gaWRBdHRyaWJ1dGUgfHwgJ2lkJztcbiAgICB9XG4gICAgdGhpcy5fcmVzZXQoKTtcbiAgICB0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAobW9kZWxzKSB0aGlzLnJlc2V0KG1vZGVscywgYXNzaWduKHtzaWxlbnQ6IHRydWV9LCBvcHRpb25zKSk7XG59XG5cbmFzc2lnbihDb2xsZWN0aW9uLnByb3RvdHlwZSwgQW1wZXJzYW5kRXZlbnRzLCB7XG4gICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKCkge30sXG5cbiAgICBpc01vZGVsOiBmdW5jdGlvbiAobW9kZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwgJiYgbW9kZWwgaW5zdGFuY2VvZiB0aGlzLm1vZGVsO1xuICAgIH0sXG5cbiAgICBhZGQ6IGZ1bmN0aW9uIChtb2RlbHMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0KG1vZGVscywgYXNzaWduKHttZXJnZTogZmFsc2UsIGFkZDogdHJ1ZSwgcmVtb3ZlOiBmYWxzZX0sIG9wdGlvbnMpKTtcbiAgICB9LFxuXG4gICAgLy8gb3ZlcnJpZGFibGUgcGFyc2UgbWV0aG9kXG4gICAgcGFyc2U6IGZ1bmN0aW9uIChyZXMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuXG4gICAgLy8gb3ZlcnJpZGFibGUgc2VyaWFsaXplIG1ldGhvZFxuICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKG1vZGVsKSB7XG4gICAgICAgICAgICBpZiAobW9kZWwuc2VyaWFsaXplKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZGVsLnNlcmlhbGl6ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgb3V0ID0ge307XG4gICAgICAgICAgICAgICAgYXNzaWduKG91dCwgbW9kZWwpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBvdXQuY29sbGVjdGlvbjtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgdG9KU09OOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZSgpO1xuICAgIH0sXG5cbiAgICBzZXQ6IGZ1bmN0aW9uIChtb2RlbHMsIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGFzc2lnbih7YWRkOiB0cnVlLCByZW1vdmU6IHRydWUsIG1lcmdlOiB0cnVlfSwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChvcHRpb25zLnBhcnNlKSBtb2RlbHMgPSB0aGlzLnBhcnNlKG1vZGVscywgb3B0aW9ucyk7XG4gICAgICAgIHZhciBzaW5ndWxhciA9ICFpc0FycmF5KG1vZGVscyk7XG4gICAgICAgIG1vZGVscyA9IHNpbmd1bGFyID8gKG1vZGVscyA/IFttb2RlbHNdIDogW10pIDogbW9kZWxzLnNsaWNlKCk7XG4gICAgICAgIHZhciBpZCwgbW9kZWwsIGF0dHJzLCBleGlzdGluZywgc29ydCwgaSwgbGVuZ3RoO1xuICAgICAgICB2YXIgYXQgPSBvcHRpb25zLmF0O1xuICAgICAgICB2YXIgc29ydGFibGUgPSB0aGlzLmNvbXBhcmF0b3IgJiYgKGF0ID09IG51bGwpICYmIG9wdGlvbnMuc29ydCAhPT0gZmFsc2U7XG4gICAgICAgIHZhciBzb3J0QXR0ciA9ICgnc3RyaW5nJyA9PT0gdHlwZW9mIHRoaXMuY29tcGFyYXRvcikgPyB0aGlzLmNvbXBhcmF0b3IgOiBudWxsO1xuICAgICAgICB2YXIgdG9BZGQgPSBbXSwgdG9SZW1vdmUgPSBbXSwgbW9kZWxNYXAgPSB7fTtcbiAgICAgICAgdmFyIGFkZCA9IG9wdGlvbnMuYWRkLCBtZXJnZSA9IG9wdGlvbnMubWVyZ2UsIHJlbW92ZSA9IG9wdGlvbnMucmVtb3ZlO1xuICAgICAgICB2YXIgb3JkZXIgPSAhc29ydGFibGUgJiYgYWRkICYmIHJlbW92ZSA/IFtdIDogZmFsc2U7XG4gICAgICAgIHZhciB0YXJnZXRQcm90byA9IHRoaXMubW9kZWwgJiYgdGhpcy5tb2RlbC5wcm90b3R5cGUgfHwgT2JqZWN0LnByb3RvdHlwZTtcblxuICAgICAgICAvLyBUdXJuIGJhcmUgb2JqZWN0cyBpbnRvIG1vZGVsIHJlZmVyZW5jZXMsIGFuZCBwcmV2ZW50IGludmFsaWQgbW9kZWxzXG4gICAgICAgIC8vIGZyb20gYmVpbmcgYWRkZWQuXG4gICAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IG1vZGVscy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXR0cnMgPSBtb2RlbHNbaV0gfHwge307XG4gICAgICAgICAgICBpZiAodGhpcy5pc01vZGVsKGF0dHJzKSkge1xuICAgICAgICAgICAgICAgIGlkID0gbW9kZWwgPSBhdHRycztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0UHJvdG8uZ2VuZXJhdGVJZCkge1xuICAgICAgICAgICAgICAgIGlkID0gdGFyZ2V0UHJvdG8uZ2VuZXJhdGVJZChhdHRycyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlkID0gYXR0cnNbdGhpcy5tYWluSW5kZXhdO1xuICAgICAgICAgICAgICAgIGlmIChpZCA9PT0gdW5kZWZpbmVkICYmIHRoaXMuX2lzRGVyaXZlZEluZGV4KHRhcmdldFByb3RvKSkge1xuICAgICAgICAgICAgICAgICAgICBpZCA9IHRhcmdldFByb3RvLl9kZXJpdmVkW3RoaXMubWFpbkluZGV4XS5mbi5jYWxsKGF0dHJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIGEgZHVwbGljYXRlIGlzIGZvdW5kLCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgYWRkZWQgYW5kXG4gICAgICAgICAgICAvLyBvcHRpb25hbGx5IG1lcmdlIGl0IGludG8gdGhlIGV4aXN0aW5nIG1vZGVsLlxuICAgICAgICAgICAgaWYgKGV4aXN0aW5nID0gdGhpcy5nZXQoaWQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlbW92ZSkgbW9kZWxNYXBbZXhpc3RpbmcuY2lkIHx8IGV4aXN0aW5nW3RoaXMubWFpbkluZGV4XV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChtZXJnZSkge1xuICAgICAgICAgICAgICAgICAgICBhdHRycyA9IGF0dHJzID09PSBtb2RlbCA/IG1vZGVsLmF0dHJpYnV0ZXMgOiBhdHRycztcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucGFyc2UpIGF0dHJzID0gZXhpc3RpbmcucGFyc2UoYXR0cnMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGlzIGlzIG1vZGVsXG4gICAgICAgICAgICAgICAgICAgIGlmIChleGlzdGluZy5zZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLnNldChhdHRycywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc29ydGFibGUgJiYgIXNvcnQgJiYgZXhpc3RpbmcuaGFzQ2hhbmdlZChzb3J0QXR0cikpIHNvcnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgbm90IGp1c3QgdXBkYXRlIHRoZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ24oZXhpc3RpbmcsIGF0dHJzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtb2RlbHNbaV0gPSBleGlzdGluZztcblxuICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIG5ldywgdmFsaWQgbW9kZWwsIHB1c2ggaXQgdG8gdGhlIGB0b0FkZGAgbGlzdC5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWRkKSB7XG4gICAgICAgICAgICAgICAgbW9kZWwgPSBtb2RlbHNbaV0gPSB0aGlzLl9wcmVwYXJlTW9kZWwoYXR0cnMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGlmICghbW9kZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHRvQWRkLnB1c2gobW9kZWwpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkZFJlZmVyZW5jZShtb2RlbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIERvIG5vdCBhZGQgbXVsdGlwbGUgbW9kZWxzIHdpdGggdGhlIHNhbWUgYGlkYC5cbiAgICAgICAgICAgIG1vZGVsID0gZXhpc3RpbmcgfHwgbW9kZWw7XG4gICAgICAgICAgICBpZiAoIW1vZGVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChvcmRlciAmJiAoKG1vZGVsLmlzTmV3ICYmIG1vZGVsLmlzTmV3KCkgfHwgIW1vZGVsW3RoaXMubWFpbkluZGV4XSkgfHwgIW1vZGVsTWFwW21vZGVsLmNpZCB8fCBtb2RlbFt0aGlzLm1haW5JbmRleF1dKSkgb3JkZXIucHVzaChtb2RlbCk7XG4gICAgICAgICAgICBtb2RlbE1hcFttb2RlbFt0aGlzLm1haW5JbmRleF1dID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlbW92ZSBub25leGlzdGVudCBtb2RlbHMgaWYgYXBwcm9wcmlhdGUuXG4gICAgICAgIGlmIChyZW1vdmUpIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IHRoaXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBtb2RlbCA9IHRoaXMubW9kZWxzW2ldO1xuICAgICAgICAgICAgICAgIGlmICghbW9kZWxNYXBbbW9kZWwuY2lkIHx8IG1vZGVsW3RoaXMubWFpbkluZGV4XV0pIHRvUmVtb3ZlLnB1c2gobW9kZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRvUmVtb3ZlLmxlbmd0aCkgdGhpcy5yZW1vdmUodG9SZW1vdmUsIG9wdGlvbnMpO1xuXG4gICAgICAgICAgICAvLyBBZGQgaW5kZXhlcyBhZ2FpbiB0byBtYWtlIHN1cmUgdGhleSB3ZXJlIG5vdCByZW1vdmVkIGFib3ZlLlxuICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9BZGQubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbmRleCh0b0FkZFtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZWUgaWYgc29ydGluZyBpcyBuZWVkZWQsIHVwZGF0ZSBgbGVuZ3RoYCBhbmQgc3BsaWNlIGluIG5ldyBtb2RlbHMuXG4gICAgICAgIGlmICh0b0FkZC5sZW5ndGggfHwgKG9yZGVyICYmIG9yZGVyLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIGlmIChzb3J0YWJsZSkgc29ydCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoYXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IHRvQWRkLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWxzLnNwbGljZShhdCArIGksIDAsIHRvQWRkW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBvcmRlcmVkTW9kZWxzID0gb3JkZXIgfHwgdG9BZGQ7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gb3JkZXJlZE1vZGVscy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVscy5wdXNoKG9yZGVyZWRNb2RlbHNbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNpbGVudGx5IHNvcnQgdGhlIGNvbGxlY3Rpb24gaWYgYXBwcm9wcmlhdGUuXG4gICAgICAgIGlmIChzb3J0KSB0aGlzLnNvcnQoe3NpbGVudDogdHJ1ZX0pO1xuXG4gICAgICAgIC8vIFVubGVzcyBzaWxlbmNlZCwgaXQncyB0aW1lIHRvIGZpcmUgYWxsIGFwcHJvcHJpYXRlIGFkZC9zb3J0IGV2ZW50cy5cbiAgICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9BZGQubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBtb2RlbCA9IHRvQWRkW2ldO1xuICAgICAgICAgICAgICAgIGlmIChtb2RlbC50cmlnZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGVsLnRyaWdnZXIoJ2FkZCcsIG1vZGVsLCB0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2FkZCcsIG1vZGVsLCB0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc29ydCB8fCAob3JkZXIgJiYgb3JkZXIubGVuZ3RoKSkgdGhpcy50cmlnZ2VyKCdzb3J0JywgdGhpcywgb3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gdGhlIGFkZGVkIChvciBtZXJnZWQpIG1vZGVsIChvciBtb2RlbHMpLlxuICAgICAgICByZXR1cm4gc2luZ3VsYXIgPyBtb2RlbHNbMF0gOiBtb2RlbHM7XG4gICAgfSxcblxuICAgIGdldDogZnVuY3Rpb24gKHF1ZXJ5LCBpbmRleE5hbWUpIHtcbiAgICAgICAgaWYgKHF1ZXJ5ID09IG51bGwpIHJldHVybjtcblxuICAgICAgICB2YXIgY29sbGVjdGlvbk1haW5JbmRleCA9IHRoaXMubWFpbkluZGV4O1xuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9pbmRleGVzW2luZGV4TmFtZSB8fCBjb2xsZWN0aW9uTWFpbkluZGV4XTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgIGluZGV4ICYmIChcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhbcXVlcnldIHx8IChcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5W2NvbGxlY3Rpb25NYWluSW5kZXhdICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4W3F1ZXJ5W2NvbGxlY3Rpb25NYWluSW5kZXhdXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB8fFxuICAgICAgICAgICAgdGhpcy5faW5kZXhlcy5jaWRbcXVlcnldIHx8XG4gICAgICAgICAgICB0aGlzLl9pbmRleGVzLmNpZFtxdWVyeS5jaWRdXG4gICAgICAgICk7XG4gICAgfSxcblxuICAgIC8vIEdldCB0aGUgbW9kZWwgYXQgdGhlIGdpdmVuIGluZGV4LlxuICAgIGF0OiBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWxzW2luZGV4XTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAobW9kZWxzLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBzaW5ndWxhciA9ICFpc0FycmF5KG1vZGVscyk7XG4gICAgICAgIHZhciBpLCBsZW5ndGgsIG1vZGVsLCBpbmRleDtcblxuICAgICAgICBtb2RlbHMgPSBzaW5ndWxhciA/IFttb2RlbHNdIDogc2xpY2UuY2FsbChtb2RlbHMpO1xuICAgICAgICBvcHRpb25zIHx8IChvcHRpb25zID0ge30pO1xuICAgICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBtb2RlbHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG1vZGVsID0gbW9kZWxzW2ldID0gdGhpcy5nZXQobW9kZWxzW2ldKTtcbiAgICAgICAgICAgIGlmICghbW9kZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGhpcy5fZGVJbmRleChtb2RlbCk7XG4gICAgICAgICAgICBpbmRleCA9IHRoaXMubW9kZWxzLmluZGV4T2YobW9kZWwpO1xuICAgICAgICAgICAgdGhpcy5tb2RlbHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgaWYgKG1vZGVsLnRyaWdnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWwudHJpZ2dlcigncmVtb3ZlJywgbW9kZWwsIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcigncmVtb3ZlJywgbW9kZWwsIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZVJlZmVyZW5jZShtb2RlbCwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNpbmd1bGFyID8gbW9kZWxzWzBdIDogbW9kZWxzO1xuICAgIH0sXG5cbiAgICAvLyBXaGVuIHlvdSBoYXZlIG1vcmUgaXRlbXMgdGhhbiB5b3Ugd2FudCB0byBhZGQgb3IgcmVtb3ZlIGluZGl2aWR1YWxseSxcbiAgICAvLyB5b3UgY2FuIHJlc2V0IHRoZSBlbnRpcmUgc2V0IHdpdGggYSBuZXcgbGlzdCBvZiBtb2RlbHMsIHdpdGhvdXQgZmlyaW5nXG4gICAgLy8gYW55IGdyYW51bGFyIGBhZGRgIG9yIGByZW1vdmVgIGV2ZW50cy4gRmlyZXMgYHJlc2V0YCB3aGVuIGZpbmlzaGVkLlxuICAgIC8vIFVzZWZ1bCBmb3IgYnVsayBvcGVyYXRpb25zIGFuZCBvcHRpbWl6YXRpb25zLlxuICAgIHJlc2V0OiBmdW5jdGlvbiAobW9kZWxzLCBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSB0aGlzLm1vZGVscy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlUmVmZXJlbmNlKHRoaXMubW9kZWxzW2ldLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLnByZXZpb3VzTW9kZWxzID0gdGhpcy5tb2RlbHM7XG4gICAgICAgIHRoaXMuX3Jlc2V0KCk7XG4gICAgICAgIG1vZGVscyA9IHRoaXMuYWRkKG1vZGVscywgYXNzaWduKHtzaWxlbnQ6IHRydWV9LCBvcHRpb25zKSk7XG4gICAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHRoaXMudHJpZ2dlcigncmVzZXQnLCB0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIG1vZGVscztcbiAgICB9LFxuXG4gICAgc29ydDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICBpZiAoIXRoaXMuY29tcGFyYXRvcikgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc29ydCBhIHNldCB3aXRob3V0IGEgY29tcGFyYXRvcicpO1xuICAgICAgICBvcHRpb25zIHx8IChvcHRpb25zID0ge30pO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb21wYXJhdG9yID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5tb2RlbHMuc29ydChmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgICAgICBpZiAobGVmdC5nZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGxlZnQuZ2V0KHNlbGYuY29tcGFyYXRvcik7XG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gcmlnaHQuZ2V0KHNlbGYuY29tcGFyYXRvcik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGxlZnRbc2VsZi5jb21wYXJhdG9yXTtcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSByaWdodFtzZWxmLmNvbXBhcmF0b3JdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobGVmdCA+IHJpZ2h0IHx8IGxlZnQgPT09IHZvaWQgMCkgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgaWYgKGxlZnQgPCByaWdodCB8fCByaWdodCA9PT0gdm9pZCAwKSByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbXBhcmF0b3IubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVscy5zb3J0KGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgIGxlZnQgPSBzZWxmLmNvbXBhcmF0b3IobGVmdCk7XG4gICAgICAgICAgICAgICAgcmlnaHQgPSBzZWxmLmNvbXBhcmF0b3IocmlnaHQpO1xuICAgICAgICAgICAgICAgIGlmIChsZWZ0ID4gcmlnaHQgfHwgbGVmdCA9PT0gdm9pZCAwKSByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICBpZiAobGVmdCA8IHJpZ2h0IHx8IHJpZ2h0ID09PSB2b2lkIDApIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tb2RlbHMuc29ydChiaW5kKHRoaXMuY29tcGFyYXRvcix0aGlzKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB0aGlzLnRyaWdnZXIoJ3NvcnQnLCB0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8vIFByaXZhdGUgbWV0aG9kIHRvIHJlc2V0IGFsbCBpbnRlcm5hbCBzdGF0ZS4gQ2FsbGVkIHdoZW4gdGhlIGNvbGxlY3Rpb25cbiAgICAvLyBpcyBmaXJzdCBpbml0aWFsaXplZCBvciByZXNldC5cbiAgICBfcmVzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGxpc3QgPSBzbGljZS5jYWxsKHRoaXMuaW5kZXhlcyB8fCBbXSk7XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgbGlzdC5wdXNoKHRoaXMubWFpbkluZGV4KTtcbiAgICAgICAgbGlzdC5wdXNoKCdjaWQnKTtcbiAgICAgICAgdmFyIGwgPSBsaXN0Lmxlbmd0aDtcbiAgICAgICAgdGhpcy5tb2RlbHMgPSBbXTtcbiAgICAgICAgdGhpcy5faW5kZXhlcyA9IHt9O1xuICAgICAgICBmb3IgKDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5faW5kZXhlc1tsaXN0W2ldXSA9IHt9O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIF9wcmVwYXJlTW9kZWw6IGZ1bmN0aW9uIChhdHRycywgb3B0aW9ucykge1xuICAgICAgICAvLyBpZiB3ZSBoYXZlbid0IGRlZmluZWQgYSBjb25zdHJ1Y3Rvciwgc2tpcCB0aGlzXG4gICAgICAgIGlmICghdGhpcy5tb2RlbCkgcmV0dXJuIGF0dHJzO1xuXG4gICAgICAgIGlmICh0aGlzLmlzTW9kZWwoYXR0cnMpKSB7XG4gICAgICAgICAgICBpZiAoIWF0dHJzLmNvbGxlY3Rpb24pIGF0dHJzLmNvbGxlY3Rpb24gPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIGF0dHJzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgPyBhc3NpZ24oe30sIG9wdGlvbnMpIDoge307XG4gICAgICAgICAgICBvcHRpb25zLmNvbGxlY3Rpb24gPSB0aGlzO1xuICAgICAgICAgICAgdmFyIG1vZGVsID0gbmV3IHRoaXMubW9kZWwoYXR0cnMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKCFtb2RlbC52YWxpZGF0aW9uRXJyb3IpIHJldHVybiBtb2RlbDtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcignaW52YWxpZCcsIHRoaXMsIG1vZGVsLnZhbGlkYXRpb25FcnJvciwgb3B0aW9ucyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX2RlSW5kZXg6IGZ1bmN0aW9uIChtb2RlbCwgYXR0cmlidXRlLCB2YWx1ZSkge1xuICAgICAgICB2YXIgaW5kZXhWYWw7XG4gICAgICAgIGlmIChhdHRyaWJ1dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHVuZGVmaW5lZCA9PT0gdGhpcy5faW5kZXhlc1thdHRyaWJ1dGVdKSB0aHJvdyBuZXcgRXJyb3IoJ0dpdmVuIGF0dHJpYnV0ZSBpcyBub3QgYW4gaW5kZXgnKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9pbmRleGVzW2F0dHJpYnV0ZV1bdmFsdWVdO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdCBhIHNwZWNpZmljIGF0dHJpYnV0ZVxuICAgICAgICBmb3IgKHZhciBpbmRleEF0dHIgaW4gdGhpcy5faW5kZXhlcykge1xuICAgICAgICAgICAgaW5kZXhWYWwgPSBtb2RlbC5oYXNPd25Qcm9wZXJ0eShpbmRleEF0dHIpID8gbW9kZWxbaW5kZXhBdHRyXSA6IChtb2RlbC5nZXQgJiYgbW9kZWwuZ2V0KGluZGV4QXR0cikpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2luZGV4ZXNbaW5kZXhBdHRyXVtpbmRleFZhbF07XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX2luZGV4OiBmdW5jdGlvbiAobW9kZWwsIGF0dHJpYnV0ZSkge1xuICAgICAgICB2YXIgaW5kZXhWYWw7XG4gICAgICAgIGlmIChhdHRyaWJ1dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHVuZGVmaW5lZCA9PT0gdGhpcy5faW5kZXhlc1thdHRyaWJ1dGVdKSB0aHJvdyBuZXcgRXJyb3IoJ0dpdmVuIGF0dHJpYnV0ZSBpcyBub3QgYW4gaW5kZXgnKTtcbiAgICAgICAgICAgIGluZGV4VmFsID0gbW9kZWxbYXR0cmlidXRlXSB8fCAobW9kZWwuZ2V0ICYmIG1vZGVsLmdldChhdHRyaWJ1dGUpKTtcbiAgICAgICAgICAgIGlmIChpbmRleFZhbCkgdGhpcy5faW5kZXhlc1thdHRyaWJ1dGVdW2luZGV4VmFsXSA9IG1vZGVsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdCBhIHNwZWNpZmljIGF0dHJpYnV0ZVxuICAgICAgICBmb3IgKHZhciBpbmRleEF0dHIgaW4gdGhpcy5faW5kZXhlcykge1xuICAgICAgICAgICAgaW5kZXhWYWwgPSBtb2RlbC5oYXNPd25Qcm9wZXJ0eShpbmRleEF0dHIpID8gbW9kZWxbaW5kZXhBdHRyXSA6IChtb2RlbC5nZXQgJiYgbW9kZWwuZ2V0KGluZGV4QXR0cikpO1xuICAgICAgICAgICAgaWYgKGluZGV4VmFsICE9IG51bGwpIHRoaXMuX2luZGV4ZXNbaW5kZXhBdHRyXVtpbmRleFZhbF0gPSBtb2RlbDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBfaXNEZXJpdmVkSW5kZXg6IGZ1bmN0aW9uKHByb3RvKSB7XG4gICAgICAgIGlmICghcHJvdG8gfHwgdHlwZW9mIHByb3RvLl9kZXJpdmVkICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm90by5fZGVyaXZlZCkuaW5kZXhPZih0aGlzLm1haW5JbmRleCkgPj0gMDtcbiAgICB9LFxuXG4gICAgLy8gSW50ZXJuYWwgbWV0aG9kIHRvIGNyZWF0ZSBhIG1vZGVsJ3MgdGllcyB0byBhIGNvbGxlY3Rpb24uXG4gICAgX2FkZFJlZmVyZW5jZTogZnVuY3Rpb24gKG1vZGVsLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX2luZGV4KG1vZGVsKTtcbiAgICAgICAgaWYgKCFtb2RlbC5jb2xsZWN0aW9uKSBtb2RlbC5jb2xsZWN0aW9uID0gdGhpcztcbiAgICAgICAgaWYgKG1vZGVsLm9uKSBtb2RlbC5vbignYWxsJywgdGhpcy5fb25Nb2RlbEV2ZW50LCB0aGlzKTtcbiAgICB9LFxuXG4gICAgICAgIC8vIEludGVybmFsIG1ldGhvZCB0byBzZXZlciBhIG1vZGVsJ3MgdGllcyB0byBhIGNvbGxlY3Rpb24uXG4gICAgX3JlbW92ZVJlZmVyZW5jZTogZnVuY3Rpb24gKG1vZGVsLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICh0aGlzID09PSBtb2RlbC5jb2xsZWN0aW9uKSBkZWxldGUgbW9kZWwuY29sbGVjdGlvbjtcbiAgICAgICAgdGhpcy5fZGVJbmRleChtb2RlbCk7XG4gICAgICAgIGlmIChtb2RlbC5vZmYpIG1vZGVsLm9mZignYWxsJywgdGhpcy5fb25Nb2RlbEV2ZW50LCB0aGlzKTtcbiAgICB9LFxuXG4gICAgX29uTW9kZWxFdmVudDogZnVuY3Rpb24gKGV2ZW50LCBtb2RlbCwgY29sbGVjdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB2YXIgZXZlbnROYW1lID0gZXZlbnQuc3BsaXQoJzonKVswXTtcbiAgICAgICAgdmFyIGF0dHJpYnV0ZSA9IGV2ZW50LnNwbGl0KCc6JylbMV07XG5cbiAgICAgICAgaWYgKChldmVudE5hbWUgPT09ICdhZGQnIHx8IGV2ZW50TmFtZSA9PT0gJ3JlbW92ZScpICYmIGNvbGxlY3Rpb24gIT09IHRoaXMpIHJldHVybjtcbiAgICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2Rlc3Ryb3knKSB0aGlzLnJlbW92ZShtb2RlbCwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChtb2RlbCAmJiBldmVudE5hbWUgPT09ICdjaGFuZ2UnICYmIGF0dHJpYnV0ZSAmJiB0aGlzLl9pbmRleGVzW2F0dHJpYnV0ZV0pIHtcbiAgICAgICAgICAgIHRoaXMuX2RlSW5kZXgobW9kZWwsIGF0dHJpYnV0ZSwgbW9kZWwucHJldmlvdXNBdHRyaWJ1dGVzKClbYXR0cmlidXRlXSk7XG4gICAgICAgICAgICB0aGlzLl9pbmRleChtb2RlbCwgYXR0cmlidXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRyaWdnZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sbGVjdGlvbi5wcm90b3R5cGUsIHtcbiAgICBsZW5ndGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlbHMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBpc0NvbGxlY3Rpb246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG52YXIgYXJyYXlNZXRob2RzID0gW1xuICAgICdpbmRleE9mJyxcbiAgICAnbGFzdEluZGV4T2YnLFxuICAgICdldmVyeScsXG4gICAgJ3NvbWUnLFxuICAgICdmb3JFYWNoJyxcbiAgICAnbWFwJyxcbiAgICAnZmlsdGVyJyxcbiAgICAncmVkdWNlJyxcbiAgICAncmVkdWNlUmlnaHQnXG5dO1xuXG5hcnJheU1ldGhvZHMuZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgQ29sbGVjdGlvbi5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWxzW21ldGhvZF0uYXBwbHkodGhpcy5tb2RlbHMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbn0pO1xuXG4vLyBhbGlhcyBlYWNoL2ZvckVhY2ggZm9yIG1heGltdW0gY29tcGF0aWJpbGl0eVxuQ29sbGVjdGlvbi5wcm90b3R5cGUuZWFjaCA9IENvbGxlY3Rpb24ucHJvdG90eXBlLmZvckVhY2g7XG5cbkNvbGxlY3Rpb24uZXh0ZW5kID0gY2xhc3NFeHRlbmQ7XG5cbm1vZHVsZS5leHBvcnRzID0gQ29sbGVjdGlvbjtcbiIsIi8qJEFNUEVSU0FORF9WRVJTSU9OKi9cbnZhciBTdG9yZSA9IHJlcXVpcmUoJ2tleS10cmVlLXN0b3JlJyk7XG52YXIgZG9tID0gcmVxdWlyZSgnYW1wZXJzYW5kLWRvbScpO1xudmFyIG1hdGNoZXNTZWxlY3RvciA9IHJlcXVpcmUoJ21hdGNoZXMtc2VsZWN0b3InKTtcbnZhciBwYXJ0aWFsID0gcmVxdWlyZSgnbG9kYXNoL3BhcnRpYWwnKTtcbnZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcblxuZnVuY3Rpb24gZ2V0TWF0Y2hlcyhlbCwgc2VsZWN0b3IsIGZpcnN0T25seSkge1xuICAgIGlmIChzZWxlY3RvciA9PT0gJycpIHJldHVybiBbZWxdO1xuICAgIHZhciBtYXRjaGVzID0gW107XG4gICAgaWYgKCFzZWxlY3RvcikgcmV0dXJuIG1hdGNoZXM7XG4gICAgaWYgKGZpcnN0T25seSkge1xuICAgICAgICBpZiAobWF0Y2hlc1NlbGVjdG9yKGVsLCBzZWxlY3RvcikpIHJldHVybiBbZWxdO1xuICAgICAgICByZXR1cm4gZWwucXVlcnlTZWxlY3RvcihzZWxlY3RvcikgPyBbZWwucXVlcnlTZWxlY3RvcihzZWxlY3RvcildIDogW107XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG1hdGNoZXNTZWxlY3RvcihlbCwgc2VsZWN0b3IpKSBtYXRjaGVzLnB1c2goZWwpO1xuICAgICAgICByZXR1cm4gbWF0Y2hlcy5jb25jYXQoc2xpY2UuY2FsbChlbC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZXMoZWwsIGF0dHJzKSB7XG4gICAgZm9yICh2YXIgbmFtZSBpbiBhdHRycykge1xuICAgICAgICBkb20uc2V0QXR0cmlidXRlKGVsLCBuYW1lLCBhdHRyc1tuYW1lXSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVBdHRyaWJ1dGVzKGVsLCBhdHRycykge1xuICAgIGZvciAodmFyIG5hbWUgaW4gYXR0cnMpIHtcbiAgICAgICAgZG9tLnJlbW92ZUF0dHJpYnV0ZShlbCwgbmFtZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBtYWtlQXJyYXkodmFsKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsKSA/IHZhbCA6IFt2YWxdO1xufVxuXG5mdW5jdGlvbiBzd2l0Y2hIYW5kbGVyKGJpbmRpbmcsIGVsLCB2YWx1ZSkge1xuICAgIC8vIHRoZSBlbGVtZW50IHNlbGVjdG9yIHRvIHNob3dcbiAgICB2YXIgc2hvd1ZhbHVlID0gYmluZGluZy5jYXNlc1t2YWx1ZV07XG5cbiAgICB2YXIgZmlyc3RNYXRjaE9ubHkgPSBiaW5kaW5nLmZpcnN0TWF0Y2hPbmx5O1xuXG4gICAgLy8gaGlkZSBhbGwgdGhlIG90aGVyIGVsZW1lbnRzIHdpdGggYSBkaWZmZXJlbnQgdmFsdWVcbiAgICBmb3IgKHZhciBpdGVtIGluIGJpbmRpbmcuY2FzZXMpIHtcbiAgICAgICAgdmFyIGN1clZhbHVlID0gYmluZGluZy5jYXNlc1tpdGVtXTtcblxuICAgICAgICBpZiAodmFsdWUgIT09IGl0ZW0gJiYgY3VyVmFsdWUgIT09IHNob3dWYWx1ZSkge1xuICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgY3VyVmFsdWUsIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIGRvbS5oaWRlKG1hdGNoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldE1hdGNoZXMoZWwsIHNob3dWYWx1ZSwgZmlyc3RNYXRjaE9ubHkpLmZvckVhY2goZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgIGRvbS5zaG93KG1hdGNoKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0b3IoYmluZGluZykge1xuICAgIGlmICh0eXBlb2YgYmluZGluZy5zZWxlY3RvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGJpbmRpbmcuc2VsZWN0b3I7XG4gICAgfSBlbHNlIGlmIChiaW5kaW5nLmhvb2spIHtcbiAgICAgICAgcmV0dXJuICdbZGF0YS1ob29rfj1cIicgKyBiaW5kaW5nLmhvb2sgKyAnXCJdJztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRCaW5kaW5nRnVuYyhiaW5kaW5nLCBjb250ZXh0KSB7XG4gICAgdmFyIHR5cGUgPSBiaW5kaW5nLnR5cGUgfHwgJ3RleHQnO1xuICAgIHZhciBpc0N1c3RvbUJpbmRpbmcgPSB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJztcbiAgICB2YXIgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihiaW5kaW5nKTtcbiAgICB2YXIgZmlyc3RNYXRjaE9ubHkgPSBiaW5kaW5nLmZpcnN0TWF0Y2hPbmx5O1xuICAgIHZhciB5ZXMgPSBiaW5kaW5nLnllcztcbiAgICB2YXIgbm8gPSBiaW5kaW5nLm5vO1xuICAgIHZhciBoYXNZZXNObyA9ICEhKHllcyB8fCBubyk7XG5cbiAgICAvLyBzdG9yYWdlIHZhcmlhYmxlIGZvciBwcmV2aW91cyBpZiByZWxldmFudFxuICAgIHZhciBwcmV2aW91c1ZhbHVlO1xuXG4gICAgaWYgKGlzQ3VzdG9tQmluZGluZykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVsLCB2YWx1ZSkge1xuICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgc2VsZWN0b3IsIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHR5cGUuY2FsbChjb250ZXh0LCBtYXRjaCwgdmFsdWUsIHByZXZpb3VzVmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcmV2aW91c1ZhbHVlID0gdmFsdWU7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlbCwgdmFsdWUpIHtcbiAgICAgICAgICAgIGdldE1hdGNoZXMoZWwsIHNlbGVjdG9yLCBmaXJzdE1hdGNoT25seSkuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBkb20udGV4dChtYXRjaCwgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnY2xhc3MnKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWwsIHZhbHVlKSB7XG4gICAgICAgICAgICBnZXRNYXRjaGVzKGVsLCBzZWxlY3RvciwgZmlyc3RNYXRjaE9ubHkpLmZvckVhY2goZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgZG9tLnN3aXRjaENsYXNzKG1hdGNoLCBwcmV2aW91c1ZhbHVlLCB2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHByZXZpb3VzVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdhdHRyaWJ1dGUnKSB7XG4gICAgICAgIGlmICghYmluZGluZy5uYW1lKSB0aHJvdyBFcnJvcignYXR0cmlidXRlIGJpbmRpbmdzIG11c3QgaGF2ZSBhIFwibmFtZVwiJyk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWwsIHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgbmFtZXMgPSBtYWtlQXJyYXkoYmluZGluZy5uYW1lKTtcbiAgICAgICAgICAgIGdldE1hdGNoZXMoZWwsIHNlbGVjdG9yLCBmaXJzdE1hdGNoT25seSkuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBuYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbS5zZXRBdHRyaWJ1dGUobWF0Y2gsIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcHJldmlvdXNWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3ZhbHVlJykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVsLCB2YWx1ZSkge1xuICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgc2VsZWN0b3IsIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIGlmICghdmFsdWUgJiYgdmFsdWUgIT09IDApIHZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgLy8gb25seSBhcHBseSBiaW5kaW5ncyBpZiBlbGVtZW50IGlzIG5vdCBjdXJyZW50bHkgZm9jdXNlZFxuICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBtYXRjaCkgbWF0Y2gudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcHJldmlvdXNWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2Jvb2xlYW5DbGFzcycpIHtcbiAgICAgICAgLy8gaWYgdGhlcmUncyBhIGBub2AgY2FzZSB0aGlzIGlzIGFjdHVhbGx5IGEgc3dpdGNoXG4gICAgICAgIGlmIChoYXNZZXNObykge1xuICAgICAgICAgICAgeWVzID0gbWFrZUFycmF5KHllcyB8fCAnJyk7XG4gICAgICAgICAgICBubyA9IG1ha2VBcnJheShubyB8fCAnJyk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVsLCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBwcmV2Q2xhc3MgPSB2YWx1ZSA/IG5vIDogeWVzO1xuICAgICAgICAgICAgICAgIHZhciBuZXdDbGFzcyA9IHZhbHVlID8geWVzIDogbm87XG4gICAgICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgc2VsZWN0b3IsIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBwcmV2Q2xhc3MuZm9yRWFjaChmdW5jdGlvbiAocGMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbS5yZW1vdmVDbGFzcyhtYXRjaCwgcGMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q2xhc3MuZm9yRWFjaChmdW5jdGlvbiAobmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbS5hZGRDbGFzcyhtYXRjaCwgbmMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVsLCB2YWx1ZSwga2V5TmFtZSkge1xuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gbWFrZUFycmF5KGJpbmRpbmcubmFtZSB8fCBrZXlOYW1lKTtcbiAgICAgICAgICAgICAgICB2YXIgaW52ZXJ0ID0gKGJpbmRpbmcuaW52ZXJ0IHx8IGZhbHNlKTtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IChpbnZlcnQgPyAodmFsdWUgPyBmYWxzZSA6IHRydWUpIDogdmFsdWUpO1xuICAgICAgICAgICAgICAgIGdldE1hdGNoZXMoZWwsIHNlbGVjdG9yLCBmaXJzdE1hdGNoT25seSkuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbVt2YWx1ZSA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnXShtYXRjaCwgY2xhc3NOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnYm9vbGVhbkF0dHJpYnV0ZScpIHtcbiAgICAgICAgLy8gaWYgdGhlcmUgYXJlIGB5ZXNgIGFuZCBgbm9gIHNlbGVjdG9ycywgdGhpcyBzd2FwcyBiZXR3ZWVuIHRoZW1cbiAgICAgICAgaWYgKGhhc1llc05vKSB7XG4gICAgICAgICAgICB5ZXMgPSBtYWtlQXJyYXkoeWVzIHx8ICcnKTtcbiAgICAgICAgICAgIG5vID0gbWFrZUFycmF5KG5vIHx8ICcnKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWwsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHByZXZBdHRyaWJ1dGUgPSB2YWx1ZSA/IG5vIDogeWVzO1xuICAgICAgICAgICAgICAgIHZhciBuZXdBdHRyaWJ1dGUgPSB2YWx1ZSA/IHllcyA6IG5vO1xuICAgICAgICAgICAgICAgIGdldE1hdGNoZXMoZWwsIHNlbGVjdG9yLCBmaXJzdE1hdGNoT25seSkuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldkF0dHJpYnV0ZS5mb3JFYWNoKGZ1bmN0aW9uIChwYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tLnJlbW92ZUF0dHJpYnV0ZShtYXRjaCwgcGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgbmV3QXR0cmlidXRlLmZvckVhY2goZnVuY3Rpb24gKG5hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb20uYWRkQXR0cmlidXRlKG1hdGNoLCBuYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWwsIHZhbHVlLCBrZXlOYW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBtYWtlQXJyYXkoYmluZGluZy5uYW1lIHx8IGtleU5hbWUpO1xuICAgICAgICAgICAgICAgIHZhciBpbnZlcnQgPSAoYmluZGluZy5pbnZlcnQgfHwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gKGludmVydCA/ICh2YWx1ZSA/IGZhbHNlIDogdHJ1ZSkgOiB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgc2VsZWN0b3IsIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBuYW1lLmZvckVhY2goZnVuY3Rpb24gKGF0dHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbVt2YWx1ZSA/ICdhZGRBdHRyaWJ1dGUnIDogJ3JlbW92ZUF0dHJpYnV0ZSddKG1hdGNoLCBhdHRyKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAndG9nZ2xlJykge1xuICAgICAgICB2YXIgbW9kZSA9IChiaW5kaW5nLm1vZGUgfHwgJ2Rpc3BsYXknKTtcbiAgICAgICAgdmFyIGludmVydCA9IChiaW5kaW5nLmludmVydCB8fCBmYWxzZSk7XG4gICAgICAgIC8vIHRoaXMgZG9lc24ndCByZXF1aXJlIGEgc2VsZWN0b3Igc2luY2Ugd2UgY2FuIHBhc3MgeWVzL25vIHNlbGVjdG9yc1xuICAgICAgICBpZiAoaGFzWWVzTm8pIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWwsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgeWVzLCBmaXJzdE1hdGNoT25seSkuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9tW3ZhbHVlID8gJ3Nob3cnIDogJ2hpZGUnXShtYXRjaCwgbW9kZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgbm8sIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBkb21bdmFsdWUgPyAnaGlkZScgOiAnc2hvdyddKG1hdGNoLCBtb2RlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVsLCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gKGludmVydCA/ICh2YWx1ZSA/IGZhbHNlIDogdHJ1ZSkgOiB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgc2VsZWN0b3IsIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBkb21bdmFsdWUgPyAnc2hvdycgOiAnaGlkZSddKG1hdGNoLCBtb2RlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzd2l0Y2gnKSB7XG4gICAgICAgIGlmICghYmluZGluZy5jYXNlcykgdGhyb3cgRXJyb3IoJ3N3aXRjaCBiaW5kaW5ncyBtdXN0IGhhdmUgXCJjYXNlc1wiJyk7XG4gICAgICAgIHJldHVybiBwYXJ0aWFsKHN3aXRjaEhhbmRsZXIsIGJpbmRpbmcpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2lubmVySFRNTCcpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlbCwgdmFsdWUpIHtcbiAgICAgICAgICAgIGdldE1hdGNoZXMoZWwsIHNlbGVjdG9yLCBmaXJzdE1hdGNoT25seSkuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBkb20uaHRtbChtYXRjaCwgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnc3dpdGNoQ2xhc3MnKSB7XG4gICAgICAgIGlmICghYmluZGluZy5jYXNlcykgdGhyb3cgRXJyb3IoJ3N3aXRjaENsYXNzIGJpbmRpbmdzIG11c3QgaGF2ZSBcImNhc2VzXCInKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlbCwgdmFsdWUsIGtleU5hbWUpIHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gbWFrZUFycmF5KGJpbmRpbmcubmFtZSB8fCBrZXlOYW1lKTtcbiAgICAgICAgICAgIGZvciAodmFyIGl0ZW0gaW4gYmluZGluZy5jYXNlcykge1xuICAgICAgICAgICAgICAgIGdldE1hdGNoZXMoZWwsIGJpbmRpbmcuY2FzZXNbaXRlbV0sIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBuYW1lLmZvckVhY2goZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9tW3ZhbHVlID09PSBpdGVtID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyddKG1hdGNoLCBjbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzd2l0Y2hBdHRyaWJ1dGUnKSB7XG4gICAgICAgIGlmICghYmluZGluZy5jYXNlcykgdGhyb3cgRXJyb3IoJ3N3aXRjaEF0dHJpYnV0ZSBiaW5kaW5ncyBtdXN0IGhhdmUgXCJjYXNlc1wiJyk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWwsIHZhbHVlLCBrZXlOYW1lKSB7XG4gICAgICAgICAgICBnZXRNYXRjaGVzKGVsLCBzZWxlY3RvciwgZmlyc3RNYXRjaE9ubHkpLmZvckVhY2goZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQXR0cmlidXRlcyhtYXRjaCwgcHJldmlvdXNWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlIGluIGJpbmRpbmcuY2FzZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJzID0gYmluZGluZy5jYXNlc1t2YWx1ZV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXR0cnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRycyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnNbYmluZGluZy5uYW1lIHx8IGtleU5hbWVdID0gYmluZGluZy5jYXNlc1t2YWx1ZV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2V0QXR0cmlidXRlcyhtYXRjaCwgYXR0cnMpO1xuXG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsdWUgPSBhdHRycztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIHN1Y2ggYmluZGluZyB0eXBlOiAnICsgdHlwZSk7XG4gICAgfVxufVxuXG4vLyByZXR1cm5zIGEga2V5LXRyZWUtc3RvcmUgb2YgZnVuY3Rpb25zXG4vLyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIGFueSBlbGVtZW50L21vZGVsLlxuXG4vLyBhbGwgcmVzdWx0aW5nIGZ1bmN0aW9ucyBzaG91bGQgYmUgY2FsbGVkXG4vLyBsaWtlIGZ1bmMoZWwsIHZhbHVlLCBsYXN0S2V5TmFtZSlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpbmRpbmdzLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0b3JlID0gbmV3IFN0b3JlKCk7XG4gICAgdmFyIGtleSwgY3VycmVudDtcblxuICAgIGZvciAoa2V5IGluIGJpbmRpbmdzKSB7XG4gICAgICAgIGN1cnJlbnQgPSBiaW5kaW5nc1trZXldO1xuICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBzdG9yZS5hZGQoa2V5LCBnZXRCaW5kaW5nRnVuYyh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiBjdXJyZW50XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5mb3JFYWNoKSB7XG4gICAgICAgICAgICBjdXJyZW50LmZvckVhY2goZnVuY3Rpb24gKGJpbmRpbmcpIHtcbiAgICAgICAgICAgICAgICBzdG9yZS5hZGQoa2V5LCBnZXRCaW5kaW5nRnVuYyhiaW5kaW5nLCBjb250ZXh0KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0b3JlLmFkZChrZXksIGdldEJpbmRpbmdGdW5jKGN1cnJlbnQsIGNvbnRleHQpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdG9yZTtcbn07XG4iLCIvKiRBTVBFUlNBTkRfVkVSU0lPTiovXG52YXIgZG9tID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgdGV4dDogZnVuY3Rpb24gKGVsLCB2YWwpIHtcbiAgICAgICAgZWwudGV4dENvbnRlbnQgPSBnZXRTdHJpbmcodmFsKTtcbiAgICB9LFxuICAgIC8vIG9wdGltaXplIGlmIHdlIGhhdmUgY2xhc3NMaXN0XG4gICAgYWRkQ2xhc3M6IGZ1bmN0aW9uIChlbCwgY2xzKSB7XG4gICAgICAgIGNscyA9IGdldFN0cmluZyhjbHMpO1xuICAgICAgICBpZiAoIWNscykgcmV0dXJuO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjbHMpKSB7XG4gICAgICAgICAgICBjbHMuZm9yRWFjaChmdW5jdGlvbihjKSB7XG4gICAgICAgICAgICAgICAgZG9tLmFkZENsYXNzKGVsLCBjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGVsLmNsYXNzTGlzdCkge1xuICAgICAgICAgICAgZWwuY2xhc3NMaXN0LmFkZChjbHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNDbGFzcyhlbCwgY2xzKSkge1xuICAgICAgICAgICAgICAgIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgZWwuY2xhc3NMaXN0LmFkZChjbHMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsLmNsYXNzTmFtZSArPSAnICcgKyBjbHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICByZW1vdmVDbGFzczogZnVuY3Rpb24gKGVsLCBjbHMpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2xzKSkge1xuICAgICAgICAgICAgY2xzLmZvckVhY2goZnVuY3Rpb24oYykge1xuICAgICAgICAgICAgICAgIGRvbS5yZW1vdmVDbGFzcyhlbCwgYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICAgICAgICAgIGNscyA9IGdldFN0cmluZyhjbHMpO1xuICAgICAgICAgICAgaWYgKGNscykgZWwuY2xhc3NMaXN0LnJlbW92ZShjbHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbWF5IGJlIGZhc3RlciB0byBub3QgZWRpdCB1bmxlc3Mgd2Uga25vdyB3ZSBoYXZlIGl0P1xuICAgICAgICAgICAgZWwuY2xhc3NOYW1lID0gZWwuY2xhc3NOYW1lLnJlcGxhY2UobmV3IFJlZ0V4cCgnKF58XFxcXGIpJyArIGNscy5zcGxpdCgnICcpLmpvaW4oJ3wnKSArICcoXFxcXGJ8JCknLCAnZ2knKSwgJyAnKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaGFzQ2xhc3M6IGhhc0NsYXNzLFxuICAgIHN3aXRjaENsYXNzOiBmdW5jdGlvbiAoZWwsIHByZXZDbHMsIG5ld0Nscykge1xuICAgICAgICBpZiAocHJldkNscykgdGhpcy5yZW1vdmVDbGFzcyhlbCwgcHJldkNscyk7XG4gICAgICAgIHRoaXMuYWRkQ2xhc3MoZWwsIG5ld0Nscyk7XG4gICAgfSxcbiAgICAvLyBtYWtlcyBzdXJlIGF0dHJpYnV0ZSAod2l0aCBubyBjb250ZW50KSBpcyBhZGRlZFxuICAgIC8vIGlmIGV4aXN0cyBpdCB3aWxsIGJlIGNsZWFyZWQgb2YgY29udGVudFxuICAgIGFkZEF0dHJpYnV0ZTogZnVuY3Rpb24gKGVsLCBhdHRyKSB7XG4gICAgICAgIC8vIHNldHRpbmcgdG8gZW1wdHkgc3RyaW5nIGRvZXMgc2FtZVxuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoYXR0ciwgJycpO1xuICAgICAgICAvLyBTb21lIGJyb3dzZXJzIHdvbid0IHVwZGF0ZSBVSSBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzIHVubGVzcyB5b3VcbiAgICAgICAgLy8gc2V0IGl0IGRpcmVjdGx5LiBTbyB3ZSBkbyBib3RoXG4gICAgICAgIGlmIChoYXNCb29sZWFuUHJvcGVydHkoZWwsIGF0dHIpKSBlbFthdHRyXSA9IHRydWU7XG4gICAgfSxcbiAgICAvLyBjb21wbGV0ZWx5IHJlbW92ZXMgYXR0cmlidXRlXG4gICAgcmVtb3ZlQXR0cmlidXRlOiBmdW5jdGlvbiAoZWwsIGF0dHIpIHtcbiAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGF0dHIpO1xuICAgICAgICBpZiAoaGFzQm9vbGVhblByb3BlcnR5KGVsLCBhdHRyKSkgZWxbYXR0cl0gPSBmYWxzZTtcbiAgICB9LFxuICAgIC8vIHNldHMgYXR0cmlidXRlIHRvIHN0cmluZyB2YWx1ZSBnaXZlbiwgY2xlYXJpbmcgYW55IGN1cnJlbnQgdmFsdWVcbiAgICBzZXRBdHRyaWJ1dGU6IGZ1bmN0aW9uIChlbCwgYXR0ciwgdmFsdWUpIHtcbiAgICAgICAgZWwuc2V0QXR0cmlidXRlKGF0dHIsIGdldFN0cmluZyh2YWx1ZSkpO1xuICAgIH0sXG4gICAgZ2V0QXR0cmlidXRlOiBmdW5jdGlvbiAoZWwsIGF0dHIpIHtcbiAgICAgICAgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShhdHRyKTtcbiAgICB9LFxuICAgIGhhc0F0dHJpYnV0ZTogZnVuY3Rpb24gKGVsLCBhdHRyKSB7XG4gICAgICAgIHJldHVybiBlbC5oYXNBdHRyaWJ1dGUoYXR0cik7XG4gICAgfSxcbiAgICBoaWRlOiBmdW5jdGlvbiAoZWwsIG1vZGUpIHtcbiAgICAgICAgaWYgKCFtb2RlKSBtb2RlID0gJ2Rpc3BsYXknO1xuICAgICAgICBpZiAoIWlzSGlkZGVuKGVsKSkge1xuICAgICAgICAgICAgc3RvcmVEaXNwbGF5U3R5bGUoZWwsIG1vZGUpO1xuICAgICAgICAgICAgaGlkZShlbCwgbW9kZSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8vIHNob3cgZWxlbWVudFxuICAgIHNob3c6IGZ1bmN0aW9uIChlbCwgbW9kZSkge1xuICAgICAgICBpZiAoIW1vZGUpIG1vZGUgPSAnZGlzcGxheSc7XG4gICAgICAgIHNob3coZWwsIG1vZGUpO1xuICAgIH0sXG4gICAgdG9nZ2xlOiBmdW5jdGlvbiAoZWwsIG1vZGUpIHtcbiAgICAgICAgaWYgKCFpc0hpZGRlbihlbCkpIHtcbiAgICAgICAgICAgIGRvbS5oaWRlKGVsLCBtb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvbS5zaG93KGVsLCBtb2RlKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaHRtbDogZnVuY3Rpb24gKGVsLCBjb250ZW50KSB7XG4gICAgICAgIGVsLmlubmVySFRNTCA9IGNvbnRlbnQ7XG4gICAgfVxufTtcblxuLy8gaGVscGVyc1xuZnVuY3Rpb24gZ2V0U3RyaW5nKHZhbCkge1xuICAgIGlmICghdmFsICYmIHZhbCAhPT0gMCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGhhc0NsYXNzKGVsLCBjbHMpIHtcbiAgICBpZiAoZWwuY2xhc3NMaXN0KSB7XG4gICAgICAgIHJldHVybiBlbC5jbGFzc0xpc3QuY29udGFpbnMoY2xzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCgnKF58ICknICsgY2xzICsgJyggfCQpJywgJ2dpJykudGVzdChlbC5jbGFzc05hbWUpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaGFzQm9vbGVhblByb3BlcnR5KGVsLCBwcm9wKSB7XG4gICAgdmFyIHZhbCA9IGVsW3Byb3BdO1xuICAgIHJldHVybiBwcm9wIGluIGVsICYmICh2YWwgPT09IHRydWUgfHwgdmFsID09PSBmYWxzZSk7XG59XG5cbmZ1bmN0aW9uIGlzSGlkZGVuIChlbCkge1xuICAgIHJldHVybiBkb20uZ2V0QXR0cmlidXRlKGVsLCAnZGF0YS1hbmRkb20taGlkZGVuJykgPT09ICd0cnVlJztcbn1cblxuZnVuY3Rpb24gc3RvcmVEaXNwbGF5U3R5bGUgKGVsLCBtb2RlKSB7XG4gICAgZG9tLnNldEF0dHJpYnV0ZShlbCwgJ2RhdGEtYW5kZG9tLScgKyBtb2RlLCBlbC5zdHlsZVttb2RlXSk7XG59XG5cbmZ1bmN0aW9uIHNob3cgKGVsLCBtb2RlKSB7XG4gICAgZWwuc3R5bGVbbW9kZV0gPSBkb20uZ2V0QXR0cmlidXRlKGVsLCAnZGF0YS1hbmRkb20tJyArIG1vZGUpIHx8ICcnO1xuICAgIGRvbS5yZW1vdmVBdHRyaWJ1dGUoZWwsICdkYXRhLWFuZGRvbS1oaWRkZW4nKTtcbn1cblxuZnVuY3Rpb24gaGlkZSAoZWwsIG1vZGUpIHtcbiAgICBkb20uc2V0QXR0cmlidXRlKGVsLCAnZGF0YS1hbmRkb20taGlkZGVuJywgJ3RydWUnKTtcbiAgICBlbC5zdHlsZVttb2RlXSA9IChtb2RlID09PSAndmlzaWJpbGl0eScgPyAnaGlkZGVuJyA6ICdub25lJyk7XG59XG4iLCIvKiRBTVBFUlNBTkRfVkVSU0lPTiovXG52YXIgcnVuT25jZSA9IHJlcXVpcmUoJ2xvZGFzaC9vbmNlJyk7XG52YXIga2V5cyA9IHJlcXVpcmUoJ2xvZGFzaC9rZXlzJyk7XG52YXIgaXNFbXB0eSA9IHJlcXVpcmUoJ2xvZGFzaC9pc0VtcHR5Jyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpO1xudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL2xpYnMvdXRpbHMnKTtcblxudmFyIEV2ZW50cyA9IHtcbiAgICAvLyBCaW5kIGFuIGV2ZW50IHRvIGEgYGNhbGxiYWNrYCBmdW5jdGlvbi4gUGFzc2luZyBgXCJhbGxcImAgd2lsbCBiaW5kXG4gICAgLy8gdGhlIGNhbGxiYWNrIHRvIGFsbCBldmVudHMgZmlyZWQuXG4gICAgb246IGZ1bmN0aW9uIChuYW1lLCBjYWxsYmFjaywgY29udGV4dCkge1xuICAgICAgICBpZiAoIXV0aWxzLmV2ZW50c0FwaSh0aGlzLCAnb24nLCBuYW1lLCBbY2FsbGJhY2ssIGNvbnRleHRdKSB8fCAhY2FsbGJhY2spIHJldHVybiB0aGlzO1xuICAgICAgICB0aGlzLl9ldmVudHMgfHwgKHRoaXMuX2V2ZW50cyA9IHt9KTtcbiAgICAgICAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50c1tuYW1lXSB8fCAodGhpcy5fZXZlbnRzW25hbWVdID0gW10pO1xuICAgICAgICBldmVudHMucHVzaCh7Y2FsbGJhY2s6IGNhbGxiYWNrLCBjb250ZXh0OiBjb250ZXh0LCBjdHg6IGNvbnRleHQgfHwgdGhpc30pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLy8gQmluZCBhbiBldmVudCB0byBvbmx5IGJlIHRyaWdnZXJlZCBhIHNpbmdsZSB0aW1lLiBBZnRlciB0aGUgZmlyc3QgdGltZVxuICAgIC8vIHRoZSBjYWxsYmFjayBpcyBpbnZva2VkLCBpdCB3aWxsIGJlIHJlbW92ZWQuXG4gICAgb25jZTogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gICAgICAgIGlmICghdXRpbHMuZXZlbnRzQXBpKHRoaXMsICdvbmNlJywgbmFtZSwgW2NhbGxiYWNrLCBjb250ZXh0XSkgfHwgIWNhbGxiYWNrKSByZXR1cm4gdGhpcztcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB2YXIgb25jZSA9IHJ1bk9uY2UoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2VsZi5vZmYobmFtZSwgb25jZSk7XG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9KTtcbiAgICAgICAgb25jZS5fY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgcmV0dXJuIHRoaXMub24obmFtZSwgb25jZSwgY29udGV4dCk7XG4gICAgfSxcblxuICAgIC8vIFJlbW92ZSBvbmUgb3IgbWFueSBjYWxsYmFja3MuIElmIGBjb250ZXh0YCBpcyBudWxsLCByZW1vdmVzIGFsbFxuICAgIC8vIGNhbGxiYWNrcyB3aXRoIHRoYXQgZnVuY3Rpb24uIElmIGBjYWxsYmFja2AgaXMgbnVsbCwgcmVtb3ZlcyBhbGxcbiAgICAvLyBjYWxsYmFja3MgZm9yIHRoZSBldmVudC4gSWYgYG5hbWVgIGlzIG51bGwsIHJlbW92ZXMgYWxsIGJvdW5kXG4gICAgLy8gY2FsbGJhY2tzIGZvciBhbGwgZXZlbnRzLlxuICAgIG9mZjogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gICAgICAgIHZhciByZXRhaW4sIGV2LCBldmVudHMsIG5hbWVzLCBpLCBsLCBqLCBrO1xuICAgICAgICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdXRpbHMuZXZlbnRzQXBpKHRoaXMsICdvZmYnLCBuYW1lLCBbY2FsbGJhY2ssIGNvbnRleHRdKSkgcmV0dXJuIHRoaXM7XG4gICAgICAgIGlmICghbmFtZSAmJiAhY2FsbGJhY2sgJiYgIWNvbnRleHQpIHtcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IHZvaWQgMDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIG5hbWVzID0gbmFtZSA/IFtuYW1lXSA6IGtleXModGhpcy5fZXZlbnRzKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IG5hbWVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgbmFtZSA9IG5hbWVzW2ldO1xuICAgICAgICAgICAgaWYgKGV2ZW50cyA9IHRoaXMuX2V2ZW50c1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1tuYW1lXSA9IHJldGFpbiA9IFtdO1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayB8fCBjb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDAsIGsgPSBldmVudHMubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldiA9IGV2ZW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY2FsbGJhY2sgJiYgY2FsbGJhY2sgIT09IGV2LmNhbGxiYWNrICYmIGNhbGxiYWNrICE9PSBldi5jYWxsYmFjay5fY2FsbGJhY2spIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb250ZXh0ICYmIGNvbnRleHQgIT09IGV2LmNvbnRleHQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0YWluLnB1c2goZXYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghcmV0YWluLmxlbmd0aCkgZGVsZXRlIHRoaXMuX2V2ZW50c1tuYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyBUcmlnZ2VyIG9uZSBvciBtYW55IGV2ZW50cywgZmlyaW5nIGFsbCBib3VuZCBjYWxsYmFja3MuIENhbGxiYWNrcyBhcmVcbiAgICAvLyBwYXNzZWQgdGhlIHNhbWUgYXJndW1lbnRzIGFzIGB0cmlnZ2VyYCBpcywgYXBhcnQgZnJvbSB0aGUgZXZlbnQgbmFtZVxuICAgIC8vICh1bmxlc3MgeW91J3JlIGxpc3RlbmluZyBvbiBgXCJhbGxcImAsIHdoaWNoIHdpbGwgY2F1c2UgeW91ciBjYWxsYmFjayB0b1xuICAgIC8vIHJlY2VpdmUgdGhlIHRydWUgbmFtZSBvZiB0aGUgZXZlbnQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50KS5cbiAgICB0cmlnZ2VyOiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBpZiAoIXRoaXMuX2V2ZW50cykgcmV0dXJuIHRoaXM7XG4gICAgICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICBpZiAoIXV0aWxzLmV2ZW50c0FwaSh0aGlzLCAndHJpZ2dlcicsIG5hbWUsIGFyZ3MpKSByZXR1cm4gdGhpcztcbiAgICAgICAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50c1tuYW1lXTtcbiAgICAgICAgdmFyIGFsbEV2ZW50cyA9IHRoaXMuX2V2ZW50cy5hbGw7XG4gICAgICAgIGlmIChldmVudHMpIHV0aWxzLnRyaWdnZXJFdmVudHMoZXZlbnRzLCBhcmdzKTtcbiAgICAgICAgaWYgKGFsbEV2ZW50cykgdXRpbHMudHJpZ2dlckV2ZW50cyhhbGxFdmVudHMsIGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyBUZWxsIHRoaXMgb2JqZWN0IHRvIHN0b3AgbGlzdGVuaW5nIHRvIGVpdGhlciBzcGVjaWZpYyBldmVudHMgLi4uIG9yXG4gICAgLy8gdG8gZXZlcnkgb2JqZWN0IGl0J3MgY3VycmVudGx5IGxpc3RlbmluZyB0by5cbiAgICBzdG9wTGlzdGVuaW5nOiBmdW5jdGlvbiAob2JqLCBuYW1lLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgbGlzdGVuaW5nVG8gPSB0aGlzLl9saXN0ZW5pbmdUbztcbiAgICAgICAgaWYgKCFsaXN0ZW5pbmdUbykgcmV0dXJuIHRoaXM7XG4gICAgICAgIHZhciByZW1vdmUgPSAhbmFtZSAmJiAhY2FsbGJhY2s7XG4gICAgICAgIGlmICghY2FsbGJhY2sgJiYgdHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSBjYWxsYmFjayA9IHRoaXM7XG4gICAgICAgIGlmIChvYmopIChsaXN0ZW5pbmdUbyA9IHt9KVtvYmouX2xpc3RlbklkXSA9IG9iajtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICBmb3JFYWNoKGxpc3RlbmluZ1RvLCBmdW5jdGlvbiAoaXRlbSwgaWQpIHtcbiAgICAgICAgICAgIGl0ZW0ub2ZmKG5hbWUsIGNhbGxiYWNrLCBzZWxmKTtcbiAgICAgICAgICAgIGlmIChyZW1vdmUgfHwgaXNFbXB0eShpdGVtLl9ldmVudHMpKSBkZWxldGUgc2VsZi5fbGlzdGVuaW5nVG9baWRdO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8vIGV4dGVuZCBhbiBvYmplY3Qgd2l0aCBldmVudCBjYXBhYmlsaXRpZXMgaWYgcGFzc2VkXG4gICAgLy8gb3IganVzdCByZXR1cm4gYSBuZXcgb25lLlxuICAgIGNyZWF0ZUVtaXR0ZXI6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIGFzc2lnbihvYmogfHwge30sIEV2ZW50cyk7XG4gICAgfSxcblxuICAgIGxpc3RlblRvOiB1dGlscy5jcmVhdGVMaXN0ZW5NZXRob2QoJ29uJyksXG5cbiAgICBsaXN0ZW5Ub09uY2U6IHV0aWxzLmNyZWF0ZUxpc3Rlbk1ldGhvZCgnb25jZScpLFxuXG4gICAgbGlzdGVuVG9BbmRSdW46IGZ1bmN0aW9uIChvYmosIG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMubGlzdGVuVG8uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgaWYgKCFjYWxsYmFjayAmJiB0eXBlb2YgbmFtZSA9PT0gJ29iamVjdCcpIGNhbGxiYWNrID0gdGhpcztcbiAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn07XG5cbi8vIHNldHVwIGFsaWFzZXNcbkV2ZW50cy5iaW5kID0gRXZlbnRzLm9uO1xuRXZlbnRzLnVuYmluZCA9IEV2ZW50cy5vZmY7XG5FdmVudHMucmVtb3ZlTGlzdGVuZXIgPSBFdmVudHMub2ZmO1xuRXZlbnRzLnJlbW92ZUFsbExpc3RlbmVycyA9IEV2ZW50cy5vZmY7XG5FdmVudHMuZW1pdCA9IEV2ZW50cy50cmlnZ2VyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50cztcbiIsInZhciB1bmlxdWVJZCA9IHJlcXVpcmUoJ2xvZGFzaC91bmlxdWVJZCcpO1xudmFyIGV2ZW50U3BsaXR0ZXIgPSAvXFxzKy87XG5cbi8vIEEgZGlmZmljdWx0LXRvLWJlbGlldmUsIGJ1dCBvcHRpbWl6ZWQgaW50ZXJuYWwgZGlzcGF0Y2ggZnVuY3Rpb24gZm9yXG4vLyB0cmlnZ2VyaW5nIGV2ZW50cy4gVHJpZXMgdG8ga2VlcCB0aGUgdXN1YWwgY2FzZXMgc3BlZWR5LlxuZXhwb3J0cy50cmlnZ2VyRXZlbnRzID0gZnVuY3Rpb24gdHJpZ2dlckV2ZW50cyhldmVudHMsIGFyZ3MpIHtcbiAgICB2YXIgZXY7XG4gICAgdmFyIGkgPSAtMTtcbiAgICB2YXIgbCA9IGV2ZW50cy5sZW5ndGg7XG4gICAgdmFyIGExID0gYXJnc1swXTtcbiAgICB2YXIgYTIgPSBhcmdzWzFdO1xuICAgIHZhciBhMyA9IGFyZ3NbMl07XG4gICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHdoaWxlICgrK2kgPCBsKSAoZXYgPSBldmVudHNbaV0pLmNhbGxiYWNrLmNhbGwoZXYuY3R4KTsgcmV0dXJuO1xuICAgICAgICBjYXNlIDE6IHdoaWxlICgrK2kgPCBsKSAoZXYgPSBldmVudHNbaV0pLmNhbGxiYWNrLmNhbGwoZXYuY3R4LCBhMSk7IHJldHVybjtcbiAgICAgICAgY2FzZSAyOiB3aGlsZSAoKytpIDwgbCkgKGV2ID0gZXZlbnRzW2ldKS5jYWxsYmFjay5jYWxsKGV2LmN0eCwgYTEsIGEyKTsgcmV0dXJuO1xuICAgICAgICBjYXNlIDM6IHdoaWxlICgrK2kgPCBsKSAoZXYgPSBldmVudHNbaV0pLmNhbGxiYWNrLmNhbGwoZXYuY3R4LCBhMSwgYTIsIGEzKTsgcmV0dXJuO1xuICAgICAgICBkZWZhdWx0OiB3aGlsZSAoKytpIDwgbCkgKGV2ID0gZXZlbnRzW2ldKS5jYWxsYmFjay5hcHBseShldi5jdHgsIGFyZ3MpOyByZXR1cm47XG4gICAgfVxufTtcblxuLy8gSW1wbGVtZW50IGZhbmN5IGZlYXR1cmVzIG9mIHRoZSBFdmVudHMgQVBJIHN1Y2ggYXMgbXVsdGlwbGUgZXZlbnRcbi8vIG5hbWVzIGBcImNoYW5nZSBibHVyXCJgIGFuZCBqUXVlcnktc3R5bGUgZXZlbnQgbWFwcyBge2NoYW5nZTogYWN0aW9ufWBcbi8vIGluIHRlcm1zIG9mIHRoZSBleGlzdGluZyBBUEkuXG5leHBvcnRzLmV2ZW50c0FwaSA9IGZ1bmN0aW9uIGV2ZW50c0FwaShvYmosIGFjdGlvbiwgbmFtZSwgcmVzdCkge1xuICAgIGlmICghbmFtZSkgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBIYW5kbGUgZXZlbnQgbWFwcy5cbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBuYW1lKSB7XG4gICAgICAgICAgICBvYmpbYWN0aW9uXS5hcHBseShvYmosIFtrZXksIG5hbWVba2V5XV0uY29uY2F0KHJlc3QpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHNwYWNlIHNlcGFyYXRlZCBldmVudCBuYW1lcy5cbiAgICBpZiAoZXZlbnRTcGxpdHRlci50ZXN0KG5hbWUpKSB7XG4gICAgICAgIHZhciBuYW1lcyA9IG5hbWUuc3BsaXQoZXZlbnRTcGxpdHRlcik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gbmFtZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICBvYmpbYWN0aW9uXS5hcHBseShvYmosIFtuYW1lc1tpXV0uY29uY2F0KHJlc3QpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vLyBJbnZlcnNpb24tb2YtY29udHJvbCB2ZXJzaW9ucyBvZiBgb25gIGFuZCBgb25jZWAuIFRlbGwgKnRoaXMqIG9iamVjdCB0b1xuLy8gbGlzdGVuIHRvIGFuIGV2ZW50IGluIGFub3RoZXIgb2JqZWN0IC4uLiBrZWVwaW5nIHRyYWNrIG9mIHdoYXQgaXQnc1xuLy8gbGlzdGVuaW5nIHRvLlxuZXhwb3J0cy5jcmVhdGVMaXN0ZW5NZXRob2QgPSBmdW5jdGlvbiBjcmVhdGVMaXN0ZW5NZXRob2QoaW1wbGVtZW50YXRpb24pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbGlzdGVuTWV0aG9kKG9iaiwgbmFtZSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFvYmopIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHJ5aW5nIHRvIGxpc3RlblRvIGV2ZW50OiBcXCcnICsgbmFtZSArICdcXCcgYnV0IHRoZSB0YXJnZXQgb2JqZWN0IGlzIHVuZGVmaW5lZCcpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBsaXN0ZW5pbmdUbyA9IHRoaXMuX2xpc3RlbmluZ1RvIHx8ICh0aGlzLl9saXN0ZW5pbmdUbyA9IHt9KTtcbiAgICAgICAgdmFyIGlkID0gb2JqLl9saXN0ZW5JZCB8fCAob2JqLl9saXN0ZW5JZCA9IHVuaXF1ZUlkKCdsJykpO1xuICAgICAgICBsaXN0ZW5pbmdUb1tpZF0gPSBvYmo7XG4gICAgICAgIGlmICghY2FsbGJhY2sgJiYgdHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSBjYWxsYmFjayA9IHRoaXM7XG4gICAgICAgIGlmICh0eXBlb2Ygb2JqW2ltcGxlbWVudGF0aW9uXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcnlpbmcgdG8gbGlzdGVuVG8gZXZlbnQ6IFxcJycgKyBuYW1lICsgJ1xcJyBvbiBvYmplY3Q6ICcgKyBvYmoudG9TdHJpbmcoKSArICcgYnV0IGl0IGRvZXMgbm90IGhhdmUgYW4gXFwnb25cXCcgbWV0aG9kIHNvIGlzIHVuYmluZGFibGUnKTtcbiAgICAgICAgfVxuICAgICAgICBvYmpbaW1wbGVtZW50YXRpb25dKG5hbWUsIGNhbGxiYWNrLCB0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbn07XG4iLCIvKiRBTVBFUlNBTkRfVkVSU0lPTiovXG52YXIgVmlldyA9IHJlcXVpcmUoJ2FtcGVyc2FuZC12aWV3Jyk7XG52YXIgZG9tID0gcmVxdWlyZSgnYW1wZXJzYW5kLWRvbScpO1xudmFyIG1hdGNoZXNTZWxlY3RvciA9IHJlcXVpcmUoJ21hdGNoZXMtc2VsZWN0b3InKTtcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG5mdW5jdGlvbiBnZXRNYXRjaGVzKGVsLCBzZWxlY3Rvcikge1xuICAgIGlmIChzZWxlY3RvciA9PT0gJycpIHJldHVybiBbZWxdO1xuICAgIHZhciBtYXRjaGVzID0gW107XG4gICAgaWYgKG1hdGNoZXNTZWxlY3RvcihlbCwgc2VsZWN0b3IpKSBtYXRjaGVzLnB1c2goZWwpO1xuICAgIHJldHVybiBtYXRjaGVzLmNvbmNhdChzbGljZS5jYWxsKGVsLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVmlldy5leHRlbmQoe1xuICAgIHRlbXBsYXRlOiBbXG4gICAgICAgICc8bGFiZWw+JyxcbiAgICAgICAgICAgICc8c3BhbiBkYXRhLWhvb2s9XCJsYWJlbFwiPjwvc3Bhbj4nLFxuICAgICAgICAgICAgJzxpbnB1dCBjbGFzcz1cImZvcm0taW5wdXRcIj4nLFxuICAgICAgICAgICAgJzxkaXYgZGF0YS1ob29rPVwibWVzc2FnZS1jb250YWluZXJcIiBjbGFzcz1cIm1lc3NhZ2UgbWVzc2FnZS1iZWxvdyBtZXNzYWdlLWVycm9yXCI+JyxcbiAgICAgICAgICAgICAgICAnPHAgZGF0YS1ob29rPVwibWVzc2FnZS10ZXh0XCI+PC9wPicsXG4gICAgICAgICAgICAnPC9kaXY+JyxcbiAgICAgICAgJzwvbGFiZWw+J1xuICAgIF0uam9pbignJyksXG4gICAgYmluZGluZ3M6IHtcbiAgICAgICAgJ25hbWUnOiB7XG4gICAgICAgICAgICB0eXBlOiAnYXR0cmlidXRlJyxcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnaW5wdXQsIHRleHRhcmVhJyxcbiAgICAgICAgICAgIG5hbWU6ICduYW1lJ1xuICAgICAgICB9LFxuICAgICAgICAndGFiaW5kZXgnOiB7XG4gICAgICAgICAgICB0eXBlOiAnYXR0cmlidXRlJyxcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnaW5wdXQsIHRleHRhcmVhJyxcbiAgICAgICAgICAgIG5hbWU6ICd0YWJpbmRleCdcbiAgICAgICAgfSxcbiAgICAgICAgJ2xhYmVsJzogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhvb2s6ICdsYWJlbCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3RvZ2dsZScsXG4gICAgICAgICAgICAgICAgaG9vazogJ2xhYmVsJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnbWVzc2FnZSc6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGhvb2s6ICdtZXNzYWdlLXRleHQnXG4gICAgICAgIH0sXG4gICAgICAgICdzaG93TWVzc2FnZSc6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0b2dnbGUnLFxuICAgICAgICAgICAgaG9vazogJ21lc3NhZ2UtY29udGFpbmVyJ1xuICAgICAgICB9LFxuICAgICAgICAncGxhY2Vob2xkZXInOiB7XG4gICAgICAgICAgICB0eXBlOiAnYXR0cmlidXRlJyxcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnaW5wdXQsIHRleHRhcmVhJyxcbiAgICAgICAgICAgIG5hbWU6ICdwbGFjZWhvbGRlcidcbiAgICAgICAgfSxcbiAgICAgICAgJ3JlYWRvbmx5Jzoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW5BdHRyaWJ1dGUnLFxuICAgICAgICAgICAgbmFtZTogJ3JlYWRvbmx5JyxcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnaW5wdXQsIHRleHRhcmVhJ1xuICAgICAgICB9LFxuICAgICAgICAnYXV0b2ZvY3VzJzoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW5BdHRyaWJ1dGUnLFxuICAgICAgICAgICAgbmFtZTogJ2F1dG9mb2N1cycsXG4gICAgICAgICAgICBzZWxlY3RvcjogJ2lucHV0LCB0ZXh0YXJlYSdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKHNwZWMpIHtcbiAgICAgICAgc3BlYyB8fCAoc3BlYyA9IHt9KTtcbiAgICAgICAgdGhpcy50ZXN0cyA9IHRoaXMudGVzdHMgfHwgc3BlYy50ZXN0cyB8fCBbXTtcbiAgICAgICAgdGhpcy5vbignY2hhbmdlOnR5cGUnLCB0aGlzLmhhbmRsZVR5cGVDaGFuZ2UsIHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2VkID0gdGhpcy5oYW5kbGVJbnB1dENoYW5nZWQuYmluZCh0aGlzKTtcbiAgICAgICAgdmFyIHZhbHVlID0gIXNwZWMudmFsdWUgJiYgc3BlYy52YWx1ZSAhPT0gMCA/ICcnIDogc3BlYy52YWx1ZTtcbiAgICAgICAgdGhpcy5zdGFydGluZ1ZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLm9uKCdjaGFuZ2U6dmFsaWQgY2hhbmdlOnZhbHVlJywgdGhpcy5yZXBvcnRUb1BhcmVudCwgdGhpcyk7XG4gICAgICAgIHRoaXMub24oJ2NoYW5nZTp2YWxpZGl0eUNsYXNzJywgdGhpcy52YWxpZGl0eUNsYXNzQ2hhbmdlZCwgdGhpcyk7XG4gICAgICAgIGlmIChzcGVjLmF1dG9SZW5kZXIpIHRoaXMuYXV0b1JlbmRlciA9IHNwZWMuYXV0b1JlbmRlcjtcbiAgICAgICAgaWYgKHNwZWMudGVtcGxhdGUpIHRoaXMudGVtcGxhdGUgPSBzcGVjLnRlbXBsYXRlO1xuICAgICAgICBpZiAoc3BlYy5iZWZvcmVTdWJtaXQpIHRoaXMuYmVmb3JlU3VibWl0ID0gc3BlYy5iZWZvcmVTdWJtaXQ7XG4gICAgfSxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJXaXRoVGVtcGxhdGUoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMucXVlcnkoJ2lucHV0JykgfHwgdGhpcy5xdWVyeSgndGV4dGFyZWEnKTtcbiAgICAgICAgLy8gc3dpdGNoZXMgb3V0IGlucHV0IGZvciB0ZXh0YXJlYSBpZiB0aGF0J3Mgd2hhdCB3ZSB3YW50XG4gICAgICAgIHRoaXMuaGFuZGxlVHlwZUNoYW5nZSgpO1xuICAgICAgICB0aGlzLmluaXRJbnB1dEJpbmRpbmdzKCk7XG4gICAgICAgIC8vIFNraXAgdmFsaWRhdGlvbiBvbiBpbml0aWFsIHNldFZhbHVlXG4gICAgICAgIC8vIGlmIHRoZSBmaWVsZCBpcyBub3QgcmVxdWlyZWRcbiAgICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLmlucHV0VmFsdWUsICF0aGlzLnJlcXVpcmVkKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgICBpbnB1dFZhbHVlOiAnYW55JyxcbiAgICAgICAgc3RhcnRpbmdWYWx1ZTogJ2FueScsXG4gICAgICAgIG5hbWU6ICdzdHJpbmcnLFxuICAgICAgICB0eXBlOiBbJ3N0cmluZycsIHRydWUsICd0ZXh0J10sXG4gICAgICAgIHBsYWNlaG9sZGVyOiBbJ3N0cmluZycsIHRydWUsICcnXSxcbiAgICAgICAgbGFiZWw6IFsnc3RyaW5nJywgdHJ1ZSwgJyddLFxuICAgICAgICByZXF1aXJlZDogWydib29sZWFuJywgdHJ1ZSwgdHJ1ZV0sXG4gICAgICAgIGRpcmVjdGx5RWRpdGVkOiBbJ2Jvb2xlYW4nLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgIHJlYWRvbmx5OiBbJ2Jvb2xlYW4nLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgIGF1dG9mb2N1czogWydib29sZWFuJywgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICBzaG91bGRWYWxpZGF0ZTogWydib29sZWFuJywgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICBtZXNzYWdlOiBbJ3N0cmluZycsIHRydWUsICcnXSxcbiAgICAgICAgcmVxdWlyZWRNZXNzYWdlOiBbJ3N0cmluZycsIHRydWUsICdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiddLFxuICAgICAgICB2YWxpZENsYXNzOiBbJ3N0cmluZycsIHRydWUsICdpbnB1dC12YWxpZCddLFxuICAgICAgICBpbnZhbGlkQ2xhc3M6IFsnc3RyaW5nJywgdHJ1ZSwgJ2lucHV0LWludmFsaWQnXSxcbiAgICAgICAgdmFsaWRpdHlDbGFzc1NlbGVjdG9yOiBbJ3N0cmluZycsIHRydWUsICdpbnB1dCwgdGV4dGFyZWEnXSxcbiAgICAgICAgdGFiaW5kZXg6IFsnbnVtYmVyJywgdHJ1ZSwgMF1cbiAgICB9LFxuICAgIGRlcml2ZWQ6IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIGRlcHM6IFsnaW5wdXRWYWx1ZSddLFxuICAgICAgICAgICAgZm46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB2YWxpZDoge1xuICAgICAgICAgICAgY2FjaGU6IGZhbHNlLFxuICAgICAgICAgICAgZGVwczogWydpbnB1dFZhbHVlJ10sXG4gICAgICAgICAgICBmbjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5ydW5UZXN0cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzaG93TWVzc2FnZToge1xuICAgICAgICAgICAgZGVwczogWydtZXNzYWdlJywgJ3Nob3VsZFZhbGlkYXRlJ10sXG4gICAgICAgICAgICBmbjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3VsZFZhbGlkYXRlICYmIHRoaXMubWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2hhbmdlZDoge1xuICAgICAgICAgICAgZGVwczogWydpbnB1dFZhbHVlJywgJ3N0YXJ0aW5nVmFsdWUnXSxcbiAgICAgICAgICAgIGZuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRWYWx1ZSAhPT0gdGhpcy5zdGFydGluZ1ZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB2YWxpZGl0eUNsYXNzOiB7XG4gICAgICAgICAgICBkZXBzOiBbJ3ZhbGlkJywgJ3ZhbGlkQ2xhc3MnLCAnaW52YWxpZENsYXNzJywgJ3Nob3VsZFZhbGlkYXRlJ10sXG4gICAgICAgICAgICBmbjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaG91bGRWYWxpZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsaWQgPyB0aGlzLnZhbGlkQ2xhc3MgOiB0aGlzLmludmFsaWRDbGFzcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHNldFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIHNraXBWYWxpZGF0aW9uKSB7XG4gICAgICAgIGlmICghdGhpcy5pbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dC52YWx1ZSA9ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnB1dC52YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5jbGVhbih0aGlzLmlucHV0LnZhbHVlKTtcbiAgICAgICAgaWYgKCFza2lwVmFsaWRhdGlvbiAmJiAhdGhpcy5nZXRFcnJvck1lc3NhZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5zaG91bGRWYWxpZGF0ZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoc2tpcFZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc2hvdWxkVmFsaWRhdGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZ2V0RXJyb3JNZXNzYWdlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBtZXNzYWdlID0gJyc7XG4gICAgICAgIGlmICh0aGlzLnJlcXVpcmVkICYmIHRoaXMudmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1aXJlZE1lc3NhZ2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAodGhpcy50ZXN0cyB8fCBbXSkuc29tZShmdW5jdGlvbiAodGVzdCkge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSB0ZXN0LmNhbGwodGhpcywgdGhpcy52YWx1ZSkgfHwgJyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVUeXBlQ2hhbmdlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICd0ZXh0YXJlYScgJiYgdGhpcy5pbnB1dC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICd0ZXh0YXJlYScpIHtcbiAgICAgICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLmlucHV0LnBhcmVudE5vZGU7XG4gICAgICAgICAgICB2YXIgdGV4dGFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgICAgICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZCh0ZXh0YXJlYSwgdGhpcy5pbnB1dCk7XG4gICAgICAgICAgICB0aGlzLmlucHV0ID0gdGV4dGFyZWE7XG4gICAgICAgICAgICB0aGlzLl9hcHBseUJpbmRpbmdzRm9yS2V5KCcnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQudHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgY2xlYW46IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnR5cGUgPT09ICdudW1iZXInKSA/IE51bWJlcih2YWwpIDogdmFsLnRyaW0oKTtcbiAgICB9LFxuICAgIC8vYGlucHV0YCBldmVudCBoYW5kbGVyXG4gICAgaGFuZGxlSW5wdXRDaGFuZ2VkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLmlucHV0KSB7XG4gICAgICAgICAgICB0aGlzLmRpcmVjdGx5RWRpdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmNsZWFuKHRoaXMuaW5wdXQudmFsdWUpO1xuICAgIH0sXG4gICAgLy9gY2hhbmdlYCBldmVudCBoYW5kbGVyXG4gICAgaGFuZGxlQ2hhbmdlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0VmFsdWUgJiYgdGhpcy5jaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLnNob3VsZFZhbGlkYXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJ1blRlc3RzKCk7XG4gICAgfSxcbiAgICBiZWZvcmVTdWJtaXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gY2F0Y2ggdW5kZXRlY3RlZCBpbnB1dCBjaGFuZ2VzIHRoYXQgd2VyZSBub3QgY2F1Z2h0IGR1ZSB0byBsYWNrIG9mXG4gICAgICAgIC8vIGJyb3dzZXIgZXZlbnQgZmlyaW5nIHNlZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0FtcGVyc2FuZEpTL2FtcGVyc2FuZC1pbnB1dC12aWV3L2lzc3Vlcy8yXG4gICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IHRoaXMuY2xlYW4odGhpcy5pbnB1dC52YWx1ZSk7XG5cbiAgICAgICAgLy8gYXQgdGhlIHBvaW50IHdoZXJlIHdlJ3ZlIHRyaWVkXG4gICAgICAgIC8vIHRvIHN1Ym1pdCwgd2Ugd2FudCB0byB2YWxpZGF0ZVxuICAgICAgICAvLyBldmVyeXRoaW5nIGZyb20gbm93IG9uLlxuICAgICAgICB0aGlzLnNob3VsZFZhbGlkYXRlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ydW5UZXN0cygpO1xuICAgIH0sXG4gICAgcnVuVGVzdHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSgpO1xuICAgICAgICBpZiAoIW1lc3NhZ2UgJiYgdGhpcy5pbnB1dFZhbHVlICYmIHRoaXMuY2hhbmdlZCkge1xuICAgICAgICAgICAgLy8gaWYgaXQncyBldmVyIGJlZW4gdmFsaWQsXG4gICAgICAgICAgICAvLyB3ZSB3YW50IHRvIHZhbGlkYXRlIGZyb20gbm93XG4gICAgICAgICAgICAvLyBvbi5cbiAgICAgICAgICAgIHRoaXMuc2hvdWxkVmFsaWRhdGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH0sXG4gICAgaW5pdElucHV0QmluZGluZ3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2VkLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5oYW5kbGVDaGFuZ2UsZmFsc2UpO1xuICAgIH0sXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignaW5wdXQnLCB0aGlzLmhhbmRsZUlucHV0Q2hhbmdlZCwgZmFsc2UpO1xuICAgICAgICB0aGlzLmlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuaGFuZGxlQ2hhbmdlLCBmYWxzZSk7XG4gICAgICAgIFZpZXcucHJvdG90eXBlLnJlbW92ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLnN0YXJ0aW5nVmFsdWUsIHRydWUpOyAvL1NraXAgdmFsaWRhdGlvbiBqdXN0IGxpa2Ugb24gaW5pdGlhbCByZW5kZXJcbiAgICB9LFxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUoJycsIHRydWUpO1xuICAgIH0sXG4gICAgdmFsaWRpdHlDbGFzc0NoYW5nZWQ6IGZ1bmN0aW9uICh2aWV3LCBuZXdDbGFzcykge1xuICAgICAgICB2YXIgb2xkQ2xhc3MgPSB2aWV3LnByZXZpb3VzQXR0cmlidXRlcygpLnZhbGlkaXR5Q2xhc3M7XG4gICAgICAgIGdldE1hdGNoZXModGhpcy5lbCwgdGhpcy52YWxpZGl0eUNsYXNzU2VsZWN0b3IpLmZvckVhY2goZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICBkb20uc3dpdGNoQ2xhc3MobWF0Y2gsIG9sZENsYXNzLCBuZXdDbGFzcyk7XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgcmVwb3J0VG9QYXJlbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB0aGlzLnBhcmVudC51cGRhdGUodGhpcyk7XG4gICAgfVxufSk7XG4iLCIvKiRBTVBFUlNBTkRfVkVSU0lPTiovXG52YXIgU3RhdGUgPSByZXF1aXJlKCdhbXBlcnNhbmQtc3RhdGUnKTtcbnZhciBzeW5jID0gcmVxdWlyZSgnYW1wZXJzYW5kLXN5bmMnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdsb2Rhc2gvYXNzaWduJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCdsb2Rhc2gvaXNPYmplY3QnKTtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJ2xvZGFzaC9jbG9uZScpO1xudmFyIHJlc3VsdCA9IHJlcXVpcmUoJ2xvZGFzaC9yZXN1bHQnKTtcblxuLy8gVGhyb3cgYW4gZXJyb3Igd2hlbiBhIFVSTCBpcyBuZWVkZWQsIGFuZCBub25lIGlzIHN1cHBsaWVkLlxudmFyIHVybEVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQSBcInVybFwiIHByb3BlcnR5IG9yIGZ1bmN0aW9uIG11c3QgYmUgc3BlY2lmaWVkJyk7XG59O1xuXG4vLyBXcmFwIGFuIG9wdGlvbmFsIGVycm9yIGNhbGxiYWNrIHdpdGggYSBmYWxsYmFjayBlcnJvciBldmVudC5cbnZhciB3cmFwRXJyb3IgPSBmdW5jdGlvbiAobW9kZWwsIG9wdGlvbnMpIHtcbiAgICB2YXIgZXJyb3IgPSBvcHRpb25zLmVycm9yO1xuICAgIG9wdGlvbnMuZXJyb3IgPSBmdW5jdGlvbiAocmVzcCkge1xuICAgICAgICBpZiAoZXJyb3IpIGVycm9yKG1vZGVsLCByZXNwLCBvcHRpb25zKTtcbiAgICAgICAgbW9kZWwudHJpZ2dlcignZXJyb3InLCBtb2RlbCwgcmVzcCwgb3B0aW9ucyk7XG4gICAgfTtcbn07XG5cbnZhciBNb2RlbCA9IFN0YXRlLmV4dGVuZCh7XG4gICAgc2F2ZTogZnVuY3Rpb24gKGtleSwgdmFsLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBhdHRycywgbWV0aG9kO1xuXG4gICAgICAgIC8vIEhhbmRsZSBib3RoIGBcImtleVwiLCB2YWx1ZWAgYW5kIGB7a2V5OiB2YWx1ZX1gIC1zdHlsZSBhcmd1bWVudHMuXG4gICAgICAgIGlmIChrZXkgPT0gbnVsbCB8fCB0eXBlb2Yga2V5ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgYXR0cnMgPSBrZXk7XG4gICAgICAgICAgICBvcHRpb25zID0gdmFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgKGF0dHJzID0ge30pW2tleV0gPSB2YWw7XG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zID0gYXNzaWduKHt2YWxpZGF0ZTogdHJ1ZX0sIG9wdGlvbnMpO1xuXG4gICAgICAgIC8vIElmIHdlJ3JlIG5vdCB3YWl0aW5nIGFuZCBhdHRyaWJ1dGVzIGV4aXN0LCBzYXZlIGFjdHMgYXNcbiAgICAgICAgLy8gYHNldChhdHRyKS5zYXZlKG51bGwsIG9wdHMpYCB3aXRoIHZhbGlkYXRpb24uIE90aGVyd2lzZSwgY2hlY2sgaWZcbiAgICAgICAgLy8gdGhlIG1vZGVsIHdpbGwgYmUgdmFsaWQgd2hlbiB0aGUgYXR0cmlidXRlcywgaWYgYW55LCBhcmUgc2V0LlxuICAgICAgICBpZiAoYXR0cnMgJiYgIW9wdGlvbnMud2FpdCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNldChhdHRycywgb3B0aW9ucykpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fdmFsaWRhdGUoYXR0cnMsIG9wdGlvbnMpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZnRlciBhIHN1Y2Nlc3NmdWwgc2VydmVyLXNpZGUgc2F2ZSwgdGhlIGNsaWVudCBpcyAob3B0aW9uYWxseSlcbiAgICAgICAgLy8gdXBkYXRlZCB3aXRoIHRoZSBzZXJ2ZXItc2lkZSBzdGF0ZS5cbiAgICAgICAgaWYgKG9wdGlvbnMucGFyc2UgPT09IHZvaWQgMCkgb3B0aW9ucy5wYXJzZSA9IHRydWU7XG4gICAgICAgIHZhciBtb2RlbCA9IHRoaXM7XG4gICAgICAgIHZhciBzdWNjZXNzID0gb3B0aW9ucy5zdWNjZXNzO1xuICAgICAgICBvcHRpb25zLnN1Y2Nlc3MgPSBmdW5jdGlvbiAocmVzcCkge1xuICAgICAgICAgICAgdmFyIHNlcnZlckF0dHJzID0gbW9kZWwucGFyc2UocmVzcCwgb3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy53YWl0KSBzZXJ2ZXJBdHRycyA9IGFzc2lnbihhdHRycyB8fCB7fSwgc2VydmVyQXR0cnMpO1xuICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHNlcnZlckF0dHJzKSAmJiAhbW9kZWwuc2V0KHNlcnZlckF0dHJzLCBvcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdWNjZXNzKSBzdWNjZXNzKG1vZGVsLCByZXNwLCBvcHRpb25zKTtcbiAgICAgICAgICAgIG1vZGVsLnRyaWdnZXIoJ3N5bmMnLCBtb2RlbCwgcmVzcCwgb3B0aW9ucyk7XG4gICAgICAgIH07XG4gICAgICAgIHdyYXBFcnJvcih0aGlzLCBvcHRpb25zKTtcblxuICAgICAgICBtZXRob2QgPSB0aGlzLmlzTmV3KCkgPyAnY3JlYXRlJyA6IChvcHRpb25zLnBhdGNoID8gJ3BhdGNoJyA6ICd1cGRhdGUnKTtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ3BhdGNoJykgb3B0aW9ucy5hdHRycyA9IGF0dHJzO1xuICAgICAgICAvLyBpZiB3ZSdyZSB3YWl0aW5nIHdlIGhhdmVuJ3QgYWN0dWFsbHkgc2V0IG91ciBhdHRyaWJ1dGVzIHlldCBzb1xuICAgICAgICAvLyB3ZSBuZWVkIHRvIGRvIG1ha2Ugc3VyZSB3ZSBzZW5kIHJpZ2h0IGRhdGFcbiAgICAgICAgaWYgKG9wdGlvbnMud2FpdCAmJiBtZXRob2QgIT09ICdwYXRjaCcpIG9wdGlvbnMuYXR0cnMgPSBhc3NpZ24obW9kZWwuc2VyaWFsaXplKCksIGF0dHJzKTtcbiAgICAgICAgdmFyIHN5bmMgPSB0aGlzLnN5bmMobWV0aG9kLCB0aGlzLCBvcHRpb25zKTtcblxuICAgICAgICAvLyBNYWtlIHRoZSByZXF1ZXN0IGF2YWlsYWJsZSBvbiB0aGUgb3B0aW9ucyBvYmplY3Qgc28gaXQgY2FuIGJlIGFjY2Vzc2VkXG4gICAgICAgIC8vIGZ1cnRoZXIgZG93biB0aGUgbGluZSBieSBgcGFyc2VgLCBhdHRhY2hlZCBsaXN0ZW5lcnMsIGV0Y1xuICAgICAgICAvLyBTYW1lIHRoaW5nIGlzIGRvbmUgYmVsb3cgZm9yIGZldGNoIGFuZCBkZXN0cm95XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9BbXBlcnNhbmRKUy9hbXBlcnNhbmQtY29sbGVjdGlvbi1yZXN0LW1peGluL2NvbW1pdC9kMzJkNzg4YWFmZjkxMjM4N2ViMTEwNmYyZDdhZDE4M2VjMzllMTFhI2RpZmYtODRjODQ3MDMxNjliZjUwMTdiMWJjMzIzNjUzYWNhYTNSMzJcbiAgICAgICAgb3B0aW9ucy54aHIgPSBzeW5jO1xuICAgICAgICByZXR1cm4gc3luYztcbiAgICB9LFxuXG4gICAgLy8gRmV0Y2ggdGhlIG1vZGVsIGZyb20gdGhlIHNlcnZlci4gSWYgdGhlIHNlcnZlcidzIHJlcHJlc2VudGF0aW9uIG9mIHRoZVxuICAgIC8vIG1vZGVsIGRpZmZlcnMgZnJvbSBpdHMgY3VycmVudCBhdHRyaWJ1dGVzLCB0aGV5IHdpbGwgYmUgb3ZlcnJpZGRlbixcbiAgICAvLyB0cmlnZ2VyaW5nIGEgYFwiY2hhbmdlXCJgIGV2ZW50LlxuICAgIGZldGNoOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyA/IGNsb25lKG9wdGlvbnMpIDoge307XG4gICAgICAgIGlmIChvcHRpb25zLnBhcnNlID09PSB2b2lkIDApIG9wdGlvbnMucGFyc2UgPSB0cnVlO1xuICAgICAgICB2YXIgbW9kZWwgPSB0aGlzO1xuICAgICAgICB2YXIgc3VjY2VzcyA9IG9wdGlvbnMuc3VjY2VzcztcbiAgICAgICAgb3B0aW9ucy5zdWNjZXNzID0gZnVuY3Rpb24gKHJlc3ApIHtcbiAgICAgICAgICAgIGlmICghbW9kZWwuc2V0KG1vZGVsLnBhcnNlKHJlc3AsIG9wdGlvbnMpLCBvcHRpb25zKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHN1Y2Nlc3MobW9kZWwsIHJlc3AsIG9wdGlvbnMpO1xuICAgICAgICAgICAgbW9kZWwudHJpZ2dlcignc3luYycsIG1vZGVsLCByZXNwLCBvcHRpb25zKTtcbiAgICAgICAgfTtcbiAgICAgICAgd3JhcEVycm9yKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICB2YXIgc3luYyA9IHRoaXMuc3luYygncmVhZCcsIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICBvcHRpb25zLnhociA9IHN5bmM7XG4gICAgICAgIHJldHVybiBzeW5jO1xuICAgIH0sXG5cbiAgICAvLyBEZXN0cm95IHRoaXMgbW9kZWwgb24gdGhlIHNlcnZlciBpZiBpdCB3YXMgYWxyZWFkeSBwZXJzaXN0ZWQuXG4gICAgLy8gT3B0aW1pc3RpY2FsbHkgcmVtb3ZlcyB0aGUgbW9kZWwgZnJvbSBpdHMgY29sbGVjdGlvbiwgaWYgaXQgaGFzIG9uZS5cbiAgICAvLyBJZiBgd2FpdDogdHJ1ZWAgaXMgcGFzc2VkLCB3YWl0cyBmb3IgdGhlIHNlcnZlciB0byByZXNwb25kIGJlZm9yZSByZW1vdmFsLlxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zID8gY2xvbmUob3B0aW9ucykgOiB7fTtcbiAgICAgICAgdmFyIG1vZGVsID0gdGhpcztcbiAgICAgICAgdmFyIHN1Y2Nlc3MgPSBvcHRpb25zLnN1Y2Nlc3M7XG5cbiAgICAgICAgdmFyIGRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBtb2RlbC50cmlnZ2VyKCdkZXN0cm95JywgbW9kZWwsIG1vZGVsLmNvbGxlY3Rpb24sIG9wdGlvbnMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIG9wdGlvbnMuc3VjY2VzcyA9IGZ1bmN0aW9uIChyZXNwKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy53YWl0IHx8IG1vZGVsLmlzTmV3KCkpIGRlc3Ryb3koKTtcbiAgICAgICAgICAgIGlmIChzdWNjZXNzKSBzdWNjZXNzKG1vZGVsLCByZXNwLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGlmICghbW9kZWwuaXNOZXcoKSkgbW9kZWwudHJpZ2dlcignc3luYycsIG1vZGVsLCByZXNwLCBvcHRpb25zKTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5pc05ldygpKSB7XG4gICAgICAgICAgICBvcHRpb25zLnN1Y2Nlc3MoKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwRXJyb3IodGhpcywgb3B0aW9ucyk7XG5cbiAgICAgICAgdmFyIHN5bmMgPSB0aGlzLnN5bmMoJ2RlbGV0ZScsIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICBvcHRpb25zLnhociA9IHN5bmM7XG4gICAgICAgIGlmICghb3B0aW9ucy53YWl0KSBkZXN0cm95KCk7XG4gICAgICAgIHJldHVybiBzeW5jO1xuICAgIH0sXG5cbiAgICAvLyBQcm94eSBgYW1wZXJzYW5kLXN5bmNgIGJ5IGRlZmF1bHQgLS0gYnV0IG92ZXJyaWRlIHRoaXMgaWYgeW91IG5lZWRcbiAgICAvLyBjdXN0b20gc3luY2luZyBzZW1hbnRpY3MgZm9yICp0aGlzKiBwYXJ0aWN1bGFyIG1vZGVsLlxuICAgIHN5bmM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHN5bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9LFxuXG4gICAgLy8gRGVmYXVsdCBVUkwgZm9yIHRoZSBtb2RlbCdzIHJlcHJlc2VudGF0aW9uIG9uIHRoZSBzZXJ2ZXIgLS0gaWYgeW91J3JlXG4gICAgLy8gdXNpbmcgQmFja2JvbmUncyByZXN0ZnVsIG1ldGhvZHMsIG92ZXJyaWRlIHRoaXMgdG8gY2hhbmdlIHRoZSBlbmRwb2ludFxuICAgIC8vIHRoYXQgd2lsbCBiZSBjYWxsZWQuXG4gICAgdXJsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBiYXNlID0gcmVzdWx0KHRoaXMsICd1cmxSb290JykgfHwgcmVzdWx0KHRoaXMuY29sbGVjdGlvbiwgJ3VybCcpIHx8IHVybEVycm9yKCk7XG4gICAgICAgIGlmICh0aGlzLmlzTmV3KCkpIHJldHVybiBiYXNlO1xuICAgICAgICByZXR1cm4gYmFzZSArIChiYXNlLmNoYXJBdChiYXNlLmxlbmd0aCAtIDEpID09PSAnLycgPyAnJyA6ICcvJykgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5nZXRJZCgpKTtcbiAgICB9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBNb2RlbDtcbiIsIi8qICRBTVBFUlNBTkRfVkVSU0lPTiAqL1xudmFyIGRvbWlmeSA9IHJlcXVpcmUoJ2RvbWlmeScpO1xudmFyIGRvbSA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1kb20nKTtcbnZhciBtYXRjaGVzID0gcmVxdWlyZSgnbWF0Y2hlcy1zZWxlY3RvcicpO1xudmFyIFZpZXcgPSByZXF1aXJlKCdhbXBlcnNhbmQtdmlldycpO1xuXG52YXIgY3JlYXRlT3B0aW9uID0gZnVuY3Rpb24odmFsdWUsIHRleHQsIGRpc2FibGVkKSB7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTtcblxuICAgIC8vU2V0IHRvIGVtcHR5LXN0cmluZyBpZiB1bmRlZmluZWQgb3IgbnVsbCwgYnV0IG5vdCBpZiAwLCBmYWxzZSwgZXRjXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHZhbHVlID0gJyc7XG5cbiAgICBpZiAoZGlzYWJsZWQpIG5vZGUuZGlzYWJsZWQgPSB0cnVlO1xuICAgIG5vZGUudGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgIG5vZGUudmFsdWUgPSB2YWx1ZTtcblxuICAgIHJldHVybiBub2RlO1xufTtcblxudmFyIGNyZWF0ZU9wdGdyb3VwID0gZnVuY3Rpb24odGV4dCkge1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0Z3JvdXAnKTtcbiAgICBub2RlLmxhYmVsID0gdGV4dDtcblxuICAgIHJldHVybiBub2RlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBWaWV3LmV4dGVuZCh7XG4gICAgLy9SZXBsYWNlYWJsZSB3aXRoIGFueXRoaW5nIHdpdGggbGFiZWwsIG1lc3NhZ2UtY29udGFpbmVyLCBtZXNzYWdlLXRleHQgZGF0YS1ob29rcyBhbmQgYSA8c2VsZWN0PlxuICAgIHRlbXBsYXRlOiBbXG4gICAgICAgICc8bGFiZWwgY2xhc3M9XCJzZWxlY3RcIj4nLFxuICAgICAgICAgICAgJzxzcGFuIGRhdGEtaG9vaz1cImxhYmVsXCI+PC9zcGFuPicsXG4gICAgICAgICAgICAnPHNlbGVjdD48L3NlbGVjdD4nLFxuICAgICAgICAgICAgJzxzcGFuIGRhdGEtaG9vaz1cIm1lc3NhZ2UtY29udGFpbmVyXCIgY2xhc3M9XCJtZXNzYWdlIG1lc3NhZ2UtYmVsb3cgbWVzc2FnZS1lcnJvclwiPicsXG4gICAgICAgICAgICAgICAgJzxwIGRhdGEtaG9vaz1cIm1lc3NhZ2UtdGV4dFwiPjwvcD4nLFxuICAgICAgICAgICAgJzwvc3Bhbj4nLFxuICAgICAgICAnPC9sYWJlbD4nXG4gICAgXS5qb2luKCdcXG4nKSxcbiAgICBpbml0aWFsaXplOiBmdW5jdGlvbihvcHRzKSB7XG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5uYW1lICE9PSAnc3RyaW5nJykgdGhyb3cgbmV3IEVycm9yKCdTZWxlY3RWaWV3IHJlcXVpcmVzIGEgbmFtZSBwcm9wZXJ0eS4nKTtcbiAgICAgICAgdGhpcy5uYW1lID0gb3B0cy5uYW1lO1xuXG4gICAgICAgIGlmIChvcHRzLmdyb3VwT3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdHMub3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRG9uXFwndCBwcm92aWRlIGFtcGVyc2FuZC1zZWxlY3QtdmlldyB3aXRoIGJvdGggb3B0aW9ucyBhbmQgZ3JvdXBPcHRpb25zIHByb3BlcnRpZXMsIGFzIG9wdGlvbiB3aWxsIGJlIGdlbmVyYXRlZCB3aXRoIHZhbHVlcyBmcm9tIGdyb3VwT3B0aW9ucy4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgb3B0aW9ucyBhcnJheSBmcm9tIHRoZSBncm91cE9wdGlvbnMgcHJvcGVydHksIGNvbnRhaW5pbmdcbiAgICAgICAgICAgIC8vIG9ubHkgdGhlIHZhbHVlcyB0aGF0IHdpbGwgcmVzdWx0IGluIGFuIDxvcHRpb24+IGVsZW1lbnRcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBPcHRpb25zID0gb3B0cy5ncm91cE9wdGlvbnM7XG4gICAgICAgICAgICBvcHRzLm9wdGlvbnMgPSBbXTtcblxuICAgICAgICAgICAgb3B0cy5ncm91cE9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbihvcHRncm91cCkge1xuICAgICAgICAgICAgICAgIG9wdGdyb3VwLm9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbihvcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0cy5vcHRpb25zLnB1c2gob3B0aW9uKTtcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvcHRzLm9wdGlvbnMpICYmICFvcHRzLm9wdGlvbnMuaXNDb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlbGVjdFZpZXcgcmVxdWlyZXMgc2VsZWN0IG9wdGlvbnMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0cy5vcHRpb25zO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaXNDb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmlkQXR0cmlidXRlID0gb3B0cy5pZEF0dHJpYnV0ZSB8fCB0aGlzLm9wdGlvbnMubWFpbkluZGV4IHx8ICdpZCc7XG4gICAgICAgICAgICB0aGlzLnRleHRBdHRyaWJ1dGUgPSBvcHRzLnRleHRBdHRyaWJ1dGUgfHwgJ3RleHQnO1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZEF0dHJpYnV0ZSA9IG9wdHMuZGlzYWJsZWRBdHRyaWJ1dGU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVsID0gb3B0cy5lbDtcbiAgICAgICAgdGhpcy5sYWJlbCA9IG9wdHMubGFiZWwgfHwgJyc7XG4gICAgICAgIHRoaXMucGFyZW50ID0gb3B0cy5wYXJlbnQgfHwgdGhpcy5wYXJlbnQ7XG4gICAgICAgIGlmIChvcHRzLnRlbXBsYXRlKSB0aGlzLnRlbXBsYXRlID0gb3B0cy50ZW1wbGF0ZTtcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkVGV4dCA9IG9wdHMudW5zZWxlY3RlZFRleHQ7XG4gICAgICAgIHRoaXMuc3RhcnRpbmdWYWx1ZSA9IG9wdHMudmFsdWU7XG4gICAgICAgIHRoaXMueWllbGRNb2RlbCA9IChvcHRzLnlpZWxkTW9kZWwgPT09IGZhbHNlKSA/IGZhbHNlIDogdHJ1ZTtcblxuICAgICAgICB0aGlzLnRhYmluZGV4ID0gb3B0cy50YWJpbmRleCB8fCAnMCc7XG5cbiAgICAgICAgdGhpcy5lYWdlclZhbGlkYXRlID0gb3B0cy5lYWdlclZhbGlkYXRlO1xuICAgICAgICB0aGlzLnJlcXVpcmVkID0gb3B0cy5yZXF1aXJlZCB8fCBmYWxzZTtcbiAgICAgICAgdGhpcy52YWxpZENsYXNzID0gb3B0cy52YWxpZENsYXNzIHx8ICdpbnB1dC12YWxpZCc7XG4gICAgICAgIHRoaXMuaW52YWxpZENsYXNzID0gb3B0cy5pbnZhbGlkQ2xhc3MgfHwgJ2lucHV0LWludmFsaWQnO1xuICAgICAgICBpZiAob3B0cy5yZXF1aXJlZE1lc3NhZ2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5yZXF1aXJlZE1lc3NhZ2UgPSAnU2VsZWN0aW9uIHJlcXVpcmVkJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVxdWlyZWRNZXNzYWdlID0gb3B0cy5yZXF1aXJlZE1lc3NhZ2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuc3RhcnRpbmdWYWx1ZSA9IHRoaXMuc2V0VmFsdWUob3B0cy52YWx1ZSwgdGhpcy5lYWdlclZhbGlkYXRlID8gZmFsc2UgOiB0cnVlLCB0cnVlKTtcblxuICAgICAgICBpZiAob3B0cy5iZWZvcmVTdWJtaXQpIHRoaXMuYmVmb3JlU3VibWl0ID0gb3B0cy5iZWZvcmVTdWJtaXQ7XG4gICAgICAgIGlmIChvcHRzLmF1dG9SZW5kZXIpIHRoaXMuYXV0b1JlbmRlciA9IG9wdHMuYXV0b1JlbmRlcjtcbiAgICB9LFxuXG4gICAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGVsRG9tLFxuICAgICAgICAgICAgbGFiZWxFbDtcbiAgICAgICAgaWYgKHRoaXMucmVuZGVyZWQpIHJldHVybjtcblxuICAgICAgICBlbERvbSA9IGRvbWlmeSh0aGlzLnRlbXBsYXRlKTtcbiAgICAgICAgaWYgKCF0aGlzLmVsKSB0aGlzLmVsID0gZWxEb207XG4gICAgICAgIGVsc2UgdGhpcy5lbC5hcHBlbmRDaGlsZChlbERvbSk7XG5cbiAgICAgICAgbGFiZWxFbCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignW2RhdGEtaG9va349bGFiZWxdJyk7XG4gICAgICAgIGlmIChsYWJlbEVsKSB7XG4gICAgICAgICAgICBsYWJlbEVsLnRleHRDb250ZW50ID0gdGhpcy5sYWJlbDtcbiAgICAgICAgICAgIHRoaXMubGFiZWwgPSBsYWJlbEVsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMubGFiZWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5lbC50YWdOYW1lID09PSAnU0VMRUNUJykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLmVsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoJ3NlbGVjdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3QpIHRocm93IG5ldyBFcnJvcignbm8gc2VsZWN0IGZvdW5kIGluIHRlbXBsYXRlJyk7XG4gICAgICAgIGlmIChtYXRjaGVzKHRoaXMuZWwsICdzZWxlY3QnKSkgdGhpcy5zZWxlY3QgPSB0aGlzLmVsO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3QpIHRoaXMuc2VsZWN0LnNldEF0dHJpYnV0ZSgnbmFtZScsIHRoaXMubmFtZSk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdCkgdGhpcy5zZWxlY3Quc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsIHRoaXMudGFiaW5kZXgpO1xuXG4gICAgICAgIHRoaXMuYmluZERPTUV2ZW50cygpO1xuICAgICAgICB0aGlzLnJlbmRlck9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZE9wdGlvbigpO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaXNDb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMub24oJ2FkZCByZW1vdmUgcmVzZXQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgc2V0VmFsdWVGaXJzdE1vZGVsID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy55aWVsZE1vZGVsKSB0aGlzLnNldFZhbHVlKHRoaXMub3B0aW9ucy5tb2RlbHNbMF0pO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHRoaXMuc2V0VmFsdWUodGhpcy5vcHRpb25zLm1vZGVsc1swXVt0aGlzLmlkQXR0cmlidXRlXSk7XG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJPcHRpb25zKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzT3B0aW9uQnlWYWx1ZSh0aGlzLnZhbHVlKSkgdGhpcy51cGRhdGVTZWxlY3RlZE9wdGlvbigpO1xuICAgICAgICAgICAgICAgIGVsc2Ugc2V0VmFsdWVGaXJzdE1vZGVsKCk7XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52YWxpZGF0ZSh0aGlzLmVhZ2VyVmFsaWRhdGUgPyBmYWxzZSA6IHRydWUsIHRydWUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cblxuICAgIG9uQ2hhbmdlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5zZWxlY3Qub3B0aW9uc1t0aGlzLnNlbGVjdC5zZWxlY3RlZEluZGV4XS52YWx1ZTtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlzQ29sbGVjdGlvbiAmJiB0aGlzLnlpZWxkTW9kZWwpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXRNb2RlbEZvcklkKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyBhIG1vZGVsIGluIHRoZSBvcHRpb25zIGNvbGxlY3Rpb24gcHJvdmlkZWQgYW4gSURcbiAgICAgKiBAcGFyYW0gIHthbnl9IGlkXG4gICAgICogQHJldHVybiB7U3RhdGV9XG4gICAgICogQHRocm93cyB7UmFuZ2VFcnJvcn0gSWYgbW9kZWwgbm90IGZvdW5kXG4gICAgICovXG4gICAgZ2V0TW9kZWxGb3JJZDogZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24obW9kZWwpIHtcbiAgICAgICAgICAgIC8vIGludGVudGlvbmFsbHkgY29lcmNlIGZvciAnMScgPT0gMVxuICAgICAgICAgICAgcmV0dXJuIG1vZGVsW3RoaXMuaWRBdHRyaWJ1dGVdID09IGlkO1xuICAgICAgICB9LmJpbmQodGhpcykpWzBdO1xuICAgIH0sXG5cbiAgICBiaW5kRE9NRXZlbnRzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5zZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5vbkNoYW5nZSwgZmFsc2UpO1xuICAgIH0sXG5cbiAgICByZW5kZXJPcHRpb25zOiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdCkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0LmlubmVySFRNTCA9ICcnO1xuICAgICAgICBpZiAodGhpcy51bnNlbGVjdGVkVGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdC5hcHBlbmRDaGlsZChcbiAgICAgICAgICAgICAgICBjcmVhdGVPcHRpb24obnVsbCwgdGhpcy51bnNlbGVjdGVkVGV4dClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5ncm91cE9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBPcHRpb25zLmZvckVhY2goZnVuY3Rpb24ob3B0Z3JvdXApIHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmdyb3VwT3B0aW9ucyBpcyBhbiBhcnJheSBvZiBPYmplY3RzIHJlcHJlc2VudGluZyA8b3B0Z3JvdXA+IGVsZW1lbnRzXG4gICAgICAgICAgICAgICAgdmFyIG9wdEdyb3VwRWxlbWVudCA9IGNyZWF0ZU9wdGdyb3VwKG9wdGdyb3VwLmdyb3VwTmFtZSk7XG4gICAgICAgICAgICAgICAgLy8gTG9vcCBvdmVyIHRoZSA8b3B0aW9ucz4gZnJvbSB0aGF0IDxvcHRncm91cD5cbiAgICAgICAgICAgICAgICBvcHRncm91cC5vcHRpb25zLmZvckVhY2goZnVuY3Rpb24ob3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgPG9wdGlvbj5zIHRvIHRoZSA8b3B0Z3JvdXA+XG4gICAgICAgICAgICAgICAgICAgIG9wdEdyb3VwRWxlbWVudC5hcHBlbmRDaGlsZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZU9wdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE9wdGlvblZhbHVlKG9wdGlvbiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRPcHRpb25UZXh0KG9wdGlvbiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRPcHRpb25EaXNhYmxlZChvcHRpb24pXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIDxvcHRncm91cD4gdG8gdGhlIDxzZWxlY3Q+XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QuYXBwZW5kQ2hpbGQob3B0R3JvdXBFbGVtZW50KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbihvcHRpb24pIHtcbiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYW5kIGFkZCB0aGUgPG9wdGlvbj4gdG8gdGhlIDxzZWxlY3Q+XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QuYXBwZW5kQ2hpbGQoXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZU9wdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uVmFsdWUob3B0aW9uKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uVGV4dChvcHRpb24pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRPcHRpb25EaXNhYmxlZChvcHRpb24pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSA8c2VsZWN0PiBjb250cm9sIHRvIHNldCB0aGUgc2VsZWN0IG9wdGlvbiB3aGVuIHRoZSBvcHRpb25cbiAgICAgKiBoYXMgY2hhbmdlZCBwcm9ncmFtYXRpY2FsbHkgKGkuZS4gbm90IHRocm91Z2ggZGlyZWN0IHVzZXIgc2VsZWN0aW9uKVxuICAgICAqIEByZXR1cm4ge1NlbGVjdFZpZXd9IHRoaXNcbiAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgbm8gb3B0aW9uIGV4aXN0cyBmb3IgdGhpcy52YWx1ZVxuICAgICAqL1xuICAgIHVwZGF0ZVNlbGVjdGVkT3B0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGxvb2t1cFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgaWYgKGxvb2t1cFZhbHVlID09PSBudWxsIHx8IGxvb2t1cFZhbHVlID09PSB1bmRlZmluZWQgfHwgbG9va3VwVmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy51bnNlbGVjdGVkVGV4dCAhPT0gdW5kZWZpbmVkIHx8ICghdGhpcy5zdGFydGluZ1ZhbHVlICYmICF0aGlzLnJlbmRlcmVkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0LnNlbGVjdGVkSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zLmxlbmd0aCAmJiB0aGlzLnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQdWxsIG91dCB0aGUgaWQgaWYgaXQncyBhIG1vZGVsXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaXNDb2xsZWN0aW9uICYmIHRoaXMueWllbGRNb2RlbCkge1xuICAgICAgICAgICAgbG9va3VwVmFsdWUgPSBsb29rdXBWYWx1ZSAmJiBsb29rdXBWYWx1ZVt0aGlzLmlkQXR0cmlidXRlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb29rdXBWYWx1ZSB8fCBsb29rdXBWYWx1ZSA9PT0gMCB8fCBsb29rdXBWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGxvb2t1cFZhbHVlID09PSBudWxsKSBsb29rdXBWYWx1ZSA9ICcnOyAvLyBET00gc2VlcyBvbmx5ICcnIGVtcHR5IHZhbHVlXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5zZWxlY3Qub3B0aW9ucy5sZW5ndGg7IGktLTsgaSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdC5vcHRpb25zW2ldLnZhbHVlID09IGxvb2t1cFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0LnNlbGVjdGVkSW5kZXggPSBpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBmYWlsZWQgdG8gbWF0Y2ggYW55XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gb3B0aW9uIGV4aXN0cyBmb3IgdmFsdWU6ICcgKyBsb29rdXBWYWx1ZSk7XG4gICAgfSxcblxuICAgIHJlbW92ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmVsICYmIHRoaXMuZWwucGFyZW50Tm9kZSkgdGhpcy5lbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWwpO1xuICAgICAgICB0aGlzLmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMub25DaGFuZ2UsIGZhbHNlKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyBjb250cm9sIHRvIHVuc2VsZWN0ZWRUZXh0IG9wdGlvbiwgb3IgdXNlciBzcGVjaWZpZWQgb3B0aW9uIHdpdGggYG51bGxgXG4gICAgICogdmFsdWVcbiAgICAgKiBAcmV0dXJuIHtTZWxlY3RWaWV3fSB0aGlzXG4gICAgICovXG4gICAgY2xlYXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnNldFZhbHVlKG51bGwsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc2VsZWN0ZWQgb3B0aW9uIGFuZCB2aWV3IHZhbHVlIHRvIHRoZSBvcmlnaW5hbCBvcHRpb24gdmFsdWUgcHJvdmlkZWRcbiAgICAgKiBkdXJpbmcgY29uc3RydWN0aW9uXG4gICAgICogQHJldHVybiB7U2VsZWN0Vmlld30gdGhpc1xuICAgICAqL1xuICAgIHJlc2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0VmFsdWUodGhpcy5zdGFydGluZ1ZhbHVlLCB0cnVlKTtcbiAgICB9LFxuXG4gICAgc2V0VmFsdWU6IGZ1bmN0aW9uKHZhbHVlLCBza2lwVmFsaWRhdGlvbk1lc3NhZ2UsIGluaXQpIHtcbiAgICAgICAgdmFyIG9wdGlvbiwgbW9kZWwsIG51bGxWYWxpZDtcblxuICAgICAgICAvLyBlbmZvcmNlIHRoZSA8c2VsZWN0PiBjb250cm9sIHRvIGNvbnRhaW4gb25seSBhIHNpbmd1bGFyIGZhbHN5XG4gICAgICAgIC8vIHZhbHVlIChleGNsdWRpbmcgMCksIGJlY2F1c2UgYnJvd3NlcnMgd2lsbCBzZXQgdGhlIHNlbGVjdC52YWx1ZVxuICAgICAgICAvLyBpbiBlYWNoIGNhc2UgdG8gYmUgdGhlIGVtcHR5IHN0cmluZ1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuXG4gICAgICAgICAgICAvLyB0ZXN0IGlmIG51bGwgaXMgYSB2YWxpZCBvcHRpb25cbiAgICAgICAgICAgIGlmICh0aGlzLnVuc2VsZWN0ZWRUZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBudWxsVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBudWxsVmFsaWQgPSB0aGlzLmhhc09wdGlvbkJ5VmFsdWUobnVsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGVtcHR5IHZhbHVlIHJlcXVlc3RlZCB0byBiZSBzZXQuICBUaGlzIG1heSBiZSBiZWNhdXNlIHRoZSBmaWVsZCBpcyBqdXN0XG4gICAgICAgICAgICAvLyBpbml0aWFsaXppbmcuICBJZiBpbml0aWFsaXppbmcgYW5kIGBudWxsYCBpc24ndCBpbiB0aGUgaG9ub3JlZCBvcHRpb24gc2V0XG4gICAgICAgICAgICAvLyBzZXQgdGhlIHNlbGVjdCB0byB0aGUgMC10aCBpbmRleFxuICAgICAgICAgICAgaWYgKGluaXQgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCAmJiAhbnVsbFZhbGlkKSB7XG4gICAgICAgICAgICAgICAgLy8gbm8gaW5pdGlhbCB2YWx1ZSBwYXNzZWQsIHNldCBpbml0aWFsIHZhbHVlIHRvIGZpcnN0IGl0ZW0gaW4gc2V0XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pc0NvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWwgPSB0aGlzLm9wdGlvbnMubW9kZWxzWzBdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy55aWVsZE1vZGVsID8gbW9kZWwgOiBtb2RlbFt0aGlzLmlkQXR0cmlidXRlXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnNbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5vcHRpb25zWzBdWzBdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMub3B0aW9uc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEVuc3VyZSBjb3JyZXNwb25kaW5nIG9wdGlvbiBleGlzdHMgYmVmb3JlIGFzc2lnbmluZyB2YWx1ZVxuICAgICAgICAgICAgb3B0aW9uID0gdGhpcy5nZXRPcHRpb25CeVZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBBcnJheS5pc0FycmF5KG9wdGlvbikgPyBvcHRpb25bMF0gOiBvcHRpb247XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWxpZGF0ZShza2lwVmFsaWRhdGlvbk1lc3NhZ2UpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3QpIHRoaXMudXBkYXRlU2VsZWN0ZWRPcHRpb24oKTtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50ICYmIHR5cGVvZiB0aGlzLnBhcmVudC51cGRhdGUgPT09ICdmdW5jdGlvbicpIHRoaXMucGFyZW50LnVwZGF0ZSh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfSxcblxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihza2lwVmFsaWRhdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICAvLyBzZWxlY3RlZCBvcHRpb24gYWx3YXlzIGtub3duIHRvIGJlIGluIG9wdGlvbiBzZXQsXG4gICAgICAgICAgICAvLyB0aHVzIGZpZWxkIGlzIGFsd2F5cyB2YWxpZCBpZiBub3QgcmVxdWlyZWRcbiAgICAgICAgICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0KSB0aGlzLnRvZ2dsZU1lc3NhZ2Uoc2tpcFZhbGlkYXRpb25NZXNzYWdlKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbGlkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgIXRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZSAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0KSB0aGlzLnRvZ2dsZU1lc3NhZ2Uoc2tpcFZhbGlkYXRpb25NZXNzYWdlLCB0aGlzLnJlcXVpcmVkTWVzc2FnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdCkgdGhpcy50b2dnbGVNZXNzYWdlKHNraXBWYWxpZGF0aW9uTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy52YWxpZDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIGJ5IEZvcm1WaWV3IG9uIHN1Ym1pdFxuICAgICAqIEByZXR1cm4ge1NlbGVjdFZpZXd9IHRoaXNcbiAgICAgKi9cbiAgICBiZWZvcmVTdWJtaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3QpIHRoaXMuc2V0VmFsdWUodGhpcy5zZWxlY3Qub3B0aW9uc1t0aGlzLnNlbGVjdC5zZWxlY3RlZEluZGV4XS52YWx1ZSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG9wdGlvbiBjb3JyZXNwb25kaW5nIHRvIHByb3ZpZGVkIHZhbHVlLlxuICAgICAqIEBwYXJhbSAgeyp9IHN0cmluZywgc3RhdGUsIG9yIG1vZGVsXG4gICAgICogQHJldHVybiB7Kn0gc3RyaW5nLCBhcnJheSwgc3RhdGUsIG9yIG1vZGVsXG4gICAgICovXG4gICAgZ2V0T3B0aW9uQnlWYWx1ZTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdmFyIG1vZGVsO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlzQ29sbGVjdGlvbikge1xuICAgICAgICAgICAgLy8gZmluZCB2YWx1ZSBpbiBjb2xsZWN0aW9uLCBlcnJvciBpZiBubyBtb2RlbCBmb3VuZFxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbmRleE9mKHZhbHVlKSA9PT0gLTEpIG1vZGVsID0gdGhpcy5nZXRNb2RlbEZvcklkKHZhbHVlKTtcbiAgICAgICAgICAgIGVsc2UgbW9kZWwgPSB2YWx1ZTtcbiAgICAgICAgICAgIGlmICghbW9kZWwpIHRocm93IG5ldyBFcnJvcignbW9kZWwgb3IgbW9kZWwgaWRBdHRyaWJ1dGUgbm90IGZvdW5kIGluIG9wdGlvbnMgY29sbGVjdGlvbicpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMueWllbGRNb2RlbCA/IG1vZGVsIDogbW9kZWxbdGhpcy5pZEF0dHJpYnV0ZV07XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnMpKSB7XG4gICAgICAgICAgICAvLyBmaW5kIHZhbHVlIHZhbHVlIGluIG9wdGlvbnMgYXJyYXlcbiAgICAgICAgICAgIC8vIGZpbmQgb3B0aW9uLCBmb3JtYXR0ZWQgW1sndmFsJywgJ3RleHQnXSwgLi4uXVxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sZW5ndGggJiYgQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnNbMF0pKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMub3B0aW9ucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zW2ldWzBdID09IHZhbHVlKSByZXR1cm4gdGhpcy5vcHRpb25zW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGZpbmQgb3B0aW9uLCBmb3JtYXR0ZWQgWyd2YWxBbmRUZXh0JywgLi4uXSBmb3JtYXRcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGVuZ3RoICYmIHRoaXMub3B0aW9ucy5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndmFsdWUgbm90IGluIHNldCBvZiBwcm92aWRlZCBvcHRpb25zJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZWxlY3Qgb3B0aW9uIHNldCBpbnZhbGlkJyk7XG4gICAgfSxcblxuXG5cbiAgICAvKipcbiAgICAgKiBUZXN0cyBpZiBvcHRpb24gc2V0IGhhcyBhbiBvcHRpb24gY29ycmVzcG9uZGluZyB0byB0aGUgcHJvdmlkZWQgdmFsdWVcbiAgICAgKiBAcGFyYW0gIHsqfSB2YWx1ZVxuICAgICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAgICovXG4gICAgaGFzT3B0aW9uQnlWYWx1ZTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uQnlWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG5cblxuICAgIGdldE9wdGlvblZhbHVlOiBmdW5jdGlvbihvcHRpb24pIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9uKSkgcmV0dXJuIG9wdGlvblswXTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pc0NvbGxlY3Rpb24pIHJldHVybiBvcHRpb25bdGhpcy5pZEF0dHJpYnV0ZV07XG4gICAgICAgIHJldHVybiBvcHRpb247XG4gICAgfSxcblxuICAgIGdldE9wdGlvblRleHQ6IGZ1bmN0aW9uKG9wdGlvbikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb24pKSByZXR1cm4gb3B0aW9uWzFdO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlzQ29sbGVjdGlvbikge1xuICAgICAgICAgICAgaWYgKHRoaXMudGV4dEF0dHJpYnV0ZSAmJiBvcHRpb25bdGhpcy50ZXh0QXR0cmlidXRlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvblt0aGlzLnRleHRBdHRyaWJ1dGVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICB9LFxuXG4gICAgZ2V0T3B0aW9uRGlzYWJsZWQ6IGZ1bmN0aW9uKG9wdGlvbikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb24pKSByZXR1cm4gb3B0aW9uWzJdO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlzQ29sbGVjdGlvbiAmJiB0aGlzLmRpc2FibGVkQXR0cmlidXRlKSByZXR1cm4gb3B0aW9uW3RoaXMuZGlzYWJsZWRBdHRyaWJ1dGVdO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgdG9nZ2xlTWVzc2FnZTogZnVuY3Rpb24oaGlkZSwgbWVzc2FnZSkge1xuICAgICAgICB2YXIgbUNvbnRhaW5lciA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignW2RhdGEtaG9va349bWVzc2FnZS1jb250YWluZXJdJyksXG4gICAgICAgICAgICBtVGV4dCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignW2RhdGEtaG9va349bWVzc2FnZS10ZXh0XScpO1xuXG4gICAgICAgIGlmICghbUNvbnRhaW5lciB8fCAhbVRleHQpIHJldHVybjtcblxuICAgICAgICBpZiAoaGlkZSkge1xuICAgICAgICAgICAgZG9tLmhpZGUobUNvbnRhaW5lcik7XG4gICAgICAgICAgICBtVGV4dC50ZXh0Q29udGVudCA9ICcnO1xuICAgICAgICAgICAgZG9tLnJlbW92ZUNsYXNzKHRoaXMuZWwsIHRoaXMudmFsaWRDbGFzcyk7XG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2xhc3ModGhpcy5lbCwgdGhpcy5pbnZhbGlkQ2xhc3MpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgIGRvbS5zaG93KG1Db250YWluZXIpO1xuICAgICAgICAgICAgbVRleHQudGV4dENvbnRlbnQgPSBtZXNzYWdlO1xuICAgICAgICAgICAgZG9tLmFkZENsYXNzKHRoaXMuZWwsIHRoaXMuaW52YWxpZENsYXNzKTtcbiAgICAgICAgICAgIGRvbS5yZW1vdmVDbGFzcyh0aGlzLmVsLCB0aGlzLnZhbGlkQ2xhc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZG9tLmhpZGUobUNvbnRhaW5lcik7XG4gICAgICAgICAgICBtVGV4dC50ZXh0Q29udGVudCA9ICcnO1xuICAgICAgICAgICAgZG9tLmFkZENsYXNzKHRoaXMuZWwsIHRoaXMudmFsaWRDbGFzcyk7XG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2xhc3ModGhpcy5lbCwgdGhpcy5pbnZhbGlkQ2xhc3MpO1xuICAgICAgICB9XG4gICAgfVxuXG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qJEFNUEVSU0FORF9WRVJTSU9OKi9cbnZhciB1bmlxdWVJZCA9IHJlcXVpcmUoJ2xvZGFzaC91bmlxdWVJZCcpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ2xvZGFzaC9hc3NpZ24nKTtcbnZhciBjbG9uZU9iaiA9IGZ1bmN0aW9uKG9iaikgeyByZXR1cm4gYXNzaWduKHt9LCBvYmopOyB9O1xudmFyIG9taXQgPSByZXF1aXJlKCdsb2Rhc2gvb21pdCcpO1xudmFyIGVzY2FwZSA9IHJlcXVpcmUoJ2xvZGFzaC9lc2NhcGUnKTtcbnZhciBmb3JPd24gPSByZXF1aXJlKCdsb2Rhc2gvZm9yT3duJyk7XG52YXIgaW5jbHVkZXMgPSByZXF1aXJlKCdsb2Rhc2gvaW5jbHVkZXMnKTtcbnZhciBpc1N0cmluZyA9IHJlcXVpcmUoJ2xvZGFzaC9pc1N0cmluZycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnbG9kYXNoL2lzT2JqZWN0Jyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnbG9kYXNoL2lzRGF0ZScpO1xudmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCdsb2Rhc2gvaXNGdW5jdGlvbicpO1xudmFyIF9pc0VxdWFsID0gcmVxdWlyZSgnbG9kYXNoL2lzRXF1YWwnKTsgLy8gdG8gYXZvaWQgc2hhZG93aW5nXG52YXIgaGFzID0gcmVxdWlyZSgnbG9kYXNoL2hhcycpO1xudmFyIHJlc3VsdCA9IHJlcXVpcmUoJ2xvZGFzaC9yZXN1bHQnKTtcbnZhciB1bmlvbiA9IHJlcXVpcmUoJ2xvZGFzaC91bmlvbicpO1xudmFyIEV2ZW50cyA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1ldmVudHMnKTtcbnZhciBLZXlUcmVlID0gcmVxdWlyZSgna2V5LXRyZWUtc3RvcmUnKTtcbnZhciBhcnJheU5leHQgPSByZXF1aXJlKCdhcnJheS1uZXh0Jyk7XG52YXIgY2hhbmdlUkUgPSAvXmNoYW5nZTovO1xudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7fTtcblxuZnVuY3Rpb24gQmFzZShhdHRycywgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7XG4gICAgdGhpcy5jaWQgfHwgKHRoaXMuY2lkID0gdW5pcXVlSWQoJ3N0YXRlJykpO1xuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuICAgIHRoaXMuX3ZhbHVlcyA9IHt9O1xuICAgIHRoaXMuX2V2ZW50QnViYmxpbmdIYW5kbGVyQ2FjaGUgPSB7fTtcbiAgICB0aGlzLl9kZWZpbml0aW9uID0gT2JqZWN0LmNyZWF0ZSh0aGlzLl9kZWZpbml0aW9uKTtcbiAgICBpZiAob3B0aW9ucy5wYXJzZSkgYXR0cnMgPSB0aGlzLnBhcnNlKGF0dHJzLCBvcHRpb25zKTtcbiAgICB0aGlzLnBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuICAgIHRoaXMuY29sbGVjdGlvbiA9IG9wdGlvbnMuY29sbGVjdGlvbjtcbiAgICB0aGlzLl9rZXlUcmVlID0gbmV3IEtleVRyZWUoKTtcbiAgICB0aGlzLl9pbml0Q29sbGVjdGlvbnMoKTtcbiAgICB0aGlzLl9pbml0Q2hpbGRyZW4oKTtcbiAgICB0aGlzLl9jYWNoZSA9IHt9O1xuICAgIHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcyA9IHt9O1xuICAgIGlmIChhdHRycykgdGhpcy5zZXQoYXR0cnMsIGFzc2lnbih7c2lsZW50OiB0cnVlLCBpbml0aWFsOiB0cnVlfSwgb3B0aW9ucykpO1xuICAgIHRoaXMuX2NoYW5nZWQgPSB7fTtcbiAgICBpZiAodGhpcy5fZGVyaXZlZCkgdGhpcy5faW5pdERlcml2ZWQoKTtcbiAgICBpZiAob3B0aW9ucy5pbml0ICE9PSBmYWxzZSkgdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmFzc2lnbihCYXNlLnByb3RvdHlwZSwgRXZlbnRzLCB7XG4gICAgLy8gY2FuIGJlIGFsbG93LCBpZ25vcmUsIHJlamVjdFxuICAgIGV4dHJhUHJvcGVydGllczogJ2lnbm9yZScsXG5cbiAgICBpZEF0dHJpYnV0ZTogJ2lkJyxcblxuICAgIG5hbWVzcGFjZUF0dHJpYnV0ZTogJ25hbWVzcGFjZScsXG5cbiAgICB0eXBlQXR0cmlidXRlOiAnbW9kZWxUeXBlJyxcblxuICAgIC8vIFN0dWJiZWQgb3V0IHRvIGJlIG92ZXJ3cml0dGVuXG4gICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLy8gR2V0IElEIG9mIG1vZGVsIHBlciBjb25maWd1cmF0aW9uLlxuICAgIC8vIFNob3VsZCAqYWx3YXlzKiBiZSBob3cgSUQgaXMgZGV0ZXJtaW5lZCBieSBvdGhlciBjb2RlLlxuICAgIGdldElkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW3RoaXMuaWRBdHRyaWJ1dGVdO1xuICAgIH0sXG5cbiAgICAvLyBHZXQgbmFtZXNwYWNlIG9mIG1vZGVsIHBlciBjb25maWd1cmF0aW9uLlxuICAgIC8vIFNob3VsZCAqYWx3YXlzKiBiZSBob3cgbmFtZXNwYWNlIGlzIGRldGVybWluZWQgYnkgb3RoZXIgY29kZS5cbiAgICBnZXROYW1lc3BhY2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbdGhpcy5uYW1lc3BhY2VBdHRyaWJ1dGVdO1xuICAgIH0sXG5cbiAgICAvLyBHZXQgdHlwZSBvZiBtb2RlbCBwZXIgY29uZmlndXJhdGlvbi5cbiAgICAvLyBTaG91bGQgKmFsd2F5cyogYmUgaG93IHR5cGUgaXMgZGV0ZXJtaW5lZCBieSBvdGhlciBjb2RlLlxuICAgIGdldFR5cGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbdGhpcy50eXBlQXR0cmlidXRlXTtcbiAgICB9LFxuXG4gICAgLy8gQSBtb2RlbCBpcyBuZXcgaWYgaXQgaGFzIG5ldmVyIGJlZW4gc2F2ZWQgdG8gdGhlIHNlcnZlciwgYW5kIGxhY2tzIGFuIGlkLlxuICAgIGlzTmV3OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldElkKCkgPT0gbnVsbDtcbiAgICB9LFxuXG4gICAgLy8gZ2V0IEhUTUwtZXNjYXBlZCB2YWx1ZSBvZiBhdHRyaWJ1dGVcbiAgICBlc2NhcGU6IGZ1bmN0aW9uIChhdHRyKSB7XG4gICAgICAgIHJldHVybiBlc2NhcGUodGhpcy5nZXQoYXR0cikpO1xuICAgIH0sXG5cbiAgICAvLyBDaGVjayBpZiB0aGUgbW9kZWwgaXMgY3VycmVudGx5IGluIGEgdmFsaWQgc3RhdGUuXG4gICAgaXNWYWxpZDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHt9LCBhc3NpZ24ob3B0aW9ucyB8fCB7fSwgeyB2YWxpZGF0ZTogdHJ1ZSB9KSk7XG4gICAgfSxcblxuICAgIC8vIFBhcnNlIGNhbiBiZSB1c2VkIHJlbWFwL3Jlc3RydWN0dXJlL3JlbmFtZSBpbmNvbWluZyBwcm9wZXJ0aWVzXG4gICAgLy8gYmVmb3JlIHRoZXkgYXJlIGFwcGxpZWQgdG8gYXR0cmlidXRlcy5cbiAgICBwYXJzZTogZnVuY3Rpb24gKHJlc3AsIG9wdGlvbnMpIHtcbiAgICAgICAgLy9qc2hpbnQgdW51c2VkOmZhbHNlXG4gICAgICAgIHJldHVybiByZXNwO1xuICAgIH0sXG5cbiAgICAvLyBTZXJpYWxpemUgaXMgdGhlIGludmVyc2Ugb2YgYHBhcnNlYCBpdCBsZXRzIHlvdSBtYXNzYWdlIGRhdGFcbiAgICAvLyBvbiB0aGUgd2F5IG91dC4gQmVmb3JlLCBzZW5kaW5nIHRvIHNlcnZlciwgZm9yIGV4YW1wbGUuXG4gICAgc2VyaWFsaXplOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICB2YXIgYXR0ck9wdHMgPSBhc3NpZ24oe3Byb3BzOiB0cnVlfSwgb3B0aW9ucyk7XG4gICAgICAgIHZhciByZXMgPSB0aGlzLmdldEF0dHJpYnV0ZXMoYXR0ck9wdHMsIHRydWUpO1xuICAgICAgICBcbiAgICAgICAgdmFyIHNldEZyb21TZXJpYWxpemVkVmFsdWUgPSBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuXHQgICAgICAgIHJlc1trZXldID0gdGhpc1trZXldLnNlcmlhbGl6ZSgpO1xuICAgICAgICB9LmJpbmQodGhpcyk7XG4gICAgICAgIFxuICAgICAgICBmb3JPd24odGhpcy5fY2hpbGRyZW4sIHNldEZyb21TZXJpYWxpemVkVmFsdWUpO1xuICAgICAgICBmb3JPd24odGhpcy5fY29sbGVjdGlvbnMsIHNldEZyb21TZXJpYWxpemVkVmFsdWUpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG5cbiAgICAvLyBNYWluIHNldCBtZXRob2QgdXNlZCBieSBnZW5lcmF0ZWQgc2V0dGVycy9nZXR0ZXJzIGFuZCBjYW5cbiAgICAvLyBiZSB1c2VkIGRpcmVjdGx5IGlmIHlvdSBuZWVkIHRvIHBhc3Mgb3B0aW9ucyBvciBzZXQgbXVsdGlwbGVcbiAgICAvLyBwcm9wZXJ0aWVzIGF0IG9uY2UuXG4gICAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHZhciBleHRyYVByb3BlcnRpZXMgPSB0aGlzLmV4dHJhUHJvcGVydGllcztcbiAgICAgICAgdmFyIHdhc0NoYW5naW5nLCBjaGFuZ2VFdmVudHMsIG5ld1R5cGUsIG5ld1ZhbCwgZGVmLCBjYXN0LCBlcnIsIGF0dHIsXG4gICAgICAgICAgICBhdHRycywgZGF0YVR5cGUsIHNpbGVudCwgdW5zZXQsIGN1cnJlbnRWYWwsIGluaXRpYWwsIGhhc0NoYW5nZWQsIGlzRXF1YWwsIG9uQ2hhbmdlO1xuXG4gICAgICAgIC8vIEhhbmRsZSBib3RoIGBcImtleVwiLCB2YWx1ZWAgYW5kIGB7a2V5OiB2YWx1ZX1gIC1zdHlsZSBhcmd1bWVudHMuXG4gICAgICAgIGlmIChpc09iamVjdChrZXkpIHx8IGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgYXR0cnMgPSBrZXk7XG4gICAgICAgICAgICBvcHRpb25zID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhdHRycyA9IHt9O1xuICAgICAgICAgICAgYXR0cnNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAgICAgaWYgKCF0aGlzLl92YWxpZGF0ZShhdHRycywgb3B0aW9ucykpIHJldHVybiBmYWxzZTtcblxuICAgICAgICAvLyBFeHRyYWN0IGF0dHJpYnV0ZXMgYW5kIG9wdGlvbnMuXG4gICAgICAgIHVuc2V0ID0gb3B0aW9ucy51bnNldDtcbiAgICAgICAgc2lsZW50ID0gb3B0aW9ucy5zaWxlbnQ7XG4gICAgICAgIGluaXRpYWwgPSBvcHRpb25zLmluaXRpYWw7XG5cbiAgICAgICAgLy8gSW5pdGlhbGl6ZSBjaGFuZ2UgdHJhY2tpbmcuXG4gICAgICAgIHdhc0NoYW5naW5nID0gdGhpcy5fY2hhbmdpbmc7XG4gICAgICAgIHRoaXMuX2NoYW5naW5nID0gdHJ1ZTtcbiAgICAgICAgY2hhbmdlRXZlbnRzID0gW107XG5cbiAgICAgICAgLy8gaWYgbm90IGFscmVhZHkgY2hhbmdpbmcsIHN0b3JlIHByZXZpb3VzXG4gICAgICAgIGlmIChpbml0aWFsKSB7XG4gICAgICAgICAgICB0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgfSBlbHNlIGlmICghd2FzQ2hhbmdpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZWQgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZvciBlYWNoIGBzZXRgIGF0dHJpYnV0ZS4uLlxuICAgICAgICBmb3IgKHZhciBpID0gMCwga2V5cyA9IE9iamVjdC5rZXlzKGF0dHJzKSwgbGVuID0ga2V5cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgYXR0ciA9IGtleXNbaV07XG4gICAgICAgICAgICBuZXdWYWwgPSBhdHRyc1thdHRyXTtcbiAgICAgICAgICAgIG5ld1R5cGUgPSB0eXBlb2YgbmV3VmFsO1xuICAgICAgICAgICAgY3VycmVudFZhbCA9IHRoaXMuX3ZhbHVlc1thdHRyXTtcbiAgICAgICAgICAgIGRlZiA9IHRoaXMuX2RlZmluaXRpb25bYXR0cl07XG5cbiAgICAgICAgICAgIGlmICghZGVmKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBhIGNoaWxkIG1vZGVsIG9yIGNvbGxlY3Rpb25cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hpbGRyZW5bYXR0cl0gfHwgdGhpcy5fY29sbGVjdGlvbnNbYXR0cl0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09iamVjdChuZXdWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdWYWwgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXNbYXR0cl0uc2V0KG5ld1ZhbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXh0cmFQcm9wZXJ0aWVzID09PSAnaWdub3JlJykge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV4dHJhUHJvcGVydGllcyA9PT0gJ3JlamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gXCInICsgYXR0ciArICdcIiBwcm9wZXJ0eSBkZWZpbmVkIG9uICcgKyAodGhpcy50eXBlIHx8ICd0aGlzJykgKyAnIG1vZGVsIGFuZCBleHRyYVByb3BlcnRpZXMgbm90IHNldCB0byBcImlnbm9yZVwiIG9yIFwiYWxsb3dcIicpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXh0cmFQcm9wZXJ0aWVzID09PSAnYWxsb3cnKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZiA9IHRoaXMuX2NyZWF0ZVByb3BlcnR5RGVmaW5pdGlvbihhdHRyLCAnYW55Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChleHRyYVByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCB2YWx1ZSBmb3IgZXh0cmFQcm9wZXJ0aWVzOiBcIicgKyBleHRyYVByb3BlcnRpZXMgKyAnXCInKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlzRXF1YWwgPSB0aGlzLl9nZXRDb21wYXJlRm9yVHlwZShkZWYudHlwZSk7XG4gICAgICAgICAgICBvbkNoYW5nZSA9IHRoaXMuX2dldE9uQ2hhbmdlRm9yVHlwZShkZWYudHlwZSk7XG4gICAgICAgICAgICBkYXRhVHlwZSA9IHRoaXMuX2RhdGFUeXBlc1tkZWYudHlwZV07XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIHR5cGUgaWYgd2UgaGF2ZSBvbmVcbiAgICAgICAgICAgIGlmIChkYXRhVHlwZSAmJiBkYXRhVHlwZS5zZXQpIHtcbiAgICAgICAgICAgICAgICBjYXN0ID0gZGF0YVR5cGUuc2V0KG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgbmV3VmFsID0gY2FzdC52YWw7XG4gICAgICAgICAgICAgICAgbmV3VHlwZSA9IGNhc3QudHlwZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgd2UndmUgZGVmaW5lZCBhIHRlc3QsIHJ1biBpdFxuICAgICAgICAgICAgaWYgKGRlZi50ZXN0KSB7XG4gICAgICAgICAgICAgICAgZXJyID0gZGVmLnRlc3QuY2FsbCh0aGlzLCBuZXdWYWwsIG5ld1R5cGUpO1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvcGVydHkgXFwnJyArIGF0dHIgKyAnXFwnIGZhaWxlZCB2YWxpZGF0aW9uIHdpdGggZXJyb3I6ICcgKyBlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgd2UgYXJlIHJlcXVpcmVkIGJ1dCB1bmRlZmluZWQsIHRocm93IGVycm9yLlxuICAgICAgICAgICAgLy8gSWYgd2UgYXJlIG51bGwgYW5kIGFyZSBub3QgYWxsb3dpbmcgbnVsbCwgdGhyb3cgZXJyb3JcbiAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBkZWZpbmVkIHR5cGUgYW5kIHRoZSBuZXcgdHlwZSBkb2Vzbid0IG1hdGNoLCBhbmQgd2UgYXJlIG5vdCBudWxsLCB0aHJvdyBlcnJvci5cbiAgICAgICAgICAgIC8vIElmIHdlIHJlcXVpcmUgc3BlY2lmaWMgdmFsdWUgYW5kIG5ldyBvbmUgaXMgbm90IG9uZSBvZiB0aGVtLCB0aHJvdyBlcnJvciAodW5sZXNzIGl0IGhhcyBkZWZhdWx0IHZhbHVlIG9yIHdlJ3JlIHVuc2V0dGluZyBpdCB3aXRoIHVuZGVmaW5lZCkuXG5cbiAgICAgICAgICAgIGlmIChuZXdWYWwgPT09IHVuZGVmaW5lZCAmJiBkZWYucmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1aXJlZCBwcm9wZXJ0eSBcXCcnICsgYXR0ciArICdcXCcgbXVzdCBiZSBvZiB0eXBlICcgKyBkZWYudHlwZSArICcuIFRyaWVkIHRvIHNldCAnICsgbmV3VmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXdWYWwgPT09IG51bGwgJiYgZGVmLnJlcXVpcmVkICYmICFkZWYuYWxsb3dOdWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvcGVydHkgXFwnJyArIGF0dHIgKyAnXFwnIG11c3QgYmUgb2YgdHlwZSAnICsgZGVmLnR5cGUgKyAnIChjYW5ub3QgYmUgbnVsbCkuIFRyaWVkIHRvIHNldCAnICsgbmV3VmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoZGVmLnR5cGUgJiYgZGVmLnR5cGUgIT09ICdhbnknICYmIGRlZi50eXBlICE9PSBuZXdUeXBlKSAmJiBuZXdWYWwgIT09IG51bGwgJiYgbmV3VmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9wZXJ0eSBcXCcnICsgYXR0ciArICdcXCcgbXVzdCBiZSBvZiB0eXBlICcgKyBkZWYudHlwZSArICcuIFRyaWVkIHRvIHNldCAnICsgbmV3VmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkZWYudmFsdWVzICYmICFpbmNsdWRlcyhkZWYudmFsdWVzLCBuZXdWYWwpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlZmF1bHRWYWx1ZSA9IHJlc3VsdChkZWYsICdkZWZhdWx0Jyk7XG4gICAgICAgICAgICAgICAgaWYgKHVuc2V0ICYmIGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbCA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF1bnNldCB8fCAodW5zZXQgJiYgbmV3VmFsICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3BlcnR5IFxcJycgKyBhdHRyICsgJ1xcJyBtdXN0IGJlIG9uZSBvZiB2YWx1ZXM6ICcgKyBkZWYudmFsdWVzLmpvaW4oJywgJykgKyAnLiBUcmllZCB0byBzZXQgJyArIG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBXZSBrbm93IHRoaXMgaGFzICdjaGFuZ2VkJyBpZiBpdCdzIHRoZSBpbml0aWFsIHNldCwgc28gc2tpcCBhIHBvdGVudGlhbGx5IGV4cGVuc2l2ZSBpc0VxdWFsIGNoZWNrLlxuICAgICAgICAgICAgaGFzQ2hhbmdlZCA9IGluaXRpYWwgfHwgIWlzRXF1YWwoY3VycmVudFZhbCwgbmV3VmFsLCBhdHRyKTtcblxuICAgICAgICAgICAgLy8gZW5mb3JjZSBgc2V0T25jZWAgZm9yIHByb3BlcnRpZXMgaWYgc2V0XG4gICAgICAgICAgICBpZiAoZGVmLnNldE9uY2UgJiYgY3VycmVudFZhbCAhPT0gdW5kZWZpbmVkICYmIGhhc0NoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9wZXJ0eSBcXCcnICsgYXR0ciArICdcXCcgY2FuIG9ubHkgYmUgc2V0IG9uY2UuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHNldC91bnNldCBhdHRyaWJ1dGVzLlxuICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBub3QgdGhlIGluaXRpYWwgc2V0LCBrZWVwIHRyYWNrIG9mIGNoYW5nZWQgYXR0cmlidXRlc1xuICAgICAgICAgICAgLy8gYW5kIHB1c2ggdG8gY2hhbmdlRXZlbnRzIGFycmF5IHNvIHdlIGNhbiBmaXJlIGV2ZW50cy5cbiAgICAgICAgICAgIGlmIChoYXNDaGFuZ2VkKSB7XG5cbiAgICAgICAgICAgICAgICAvLyBUaGlzIGZpcmVzIG5vIG1hdHRlciB3aGF0LCBldmVuIG9uIGluaXRpYWwgc2V0LlxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlKG5ld1ZhbCwgY3VycmVudFZhbCwgYXR0cik7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY2hhbmdlIChub3QgYW4gaW5pdGlhbCBzZXQpLCBtYXJrIHRoZSBjaGFuZ2UuXG4gICAgICAgICAgICAgICAgLy8gTm90ZSBpdCdzIGltcG9zc2libGUgdG8gdW5zZXQgb24gdGhlIGluaXRpYWwgc2V0IChpdCB3aWxsIGFscmVhZHkgYmUgdW5zZXQpLFxuICAgICAgICAgICAgICAgIC8vIHNvIHdlIG9ubHkgaW5jbHVkZSB0aGF0IGxvZ2ljIGhlcmUuXG4gICAgICAgICAgICAgICAgaWYgKCFpbml0aWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZWRbYXR0cl0gPSBuZXdWYWw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlc1thdHRyXSA9IGN1cnJlbnRWYWw7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1bnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUUgZGVsZXRlIGlzIHZlcnkgc2xvdy4gQ2FuIHdlIGdldCBhd2F5IHdpdGggc2V0dGluZyB0byB1bmRlZmluZWQ/XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fdmFsdWVzW2F0dHJdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2lsZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VFdmVudHMucHVzaCh7cHJldjogY3VycmVudFZhbCwgdmFsOiBuZXdWYWwsIGtleTogYXR0cn0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdW5zZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzW2F0dHJdID0gbmV3VmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTm90IGNoYW5nZWRcbiAgICAgICAgICAgICAgICAvLyBGSVhNRSBkZWxldGUgaXMgdmVyeSBzbG93LiBDYW4gd2UgZ2V0IGF3YXkgd2l0aCBzZXR0aW5nIHRvIHVuZGVmaW5lZD9cbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fY2hhbmdlZFthdHRyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpcmUgZXZlbnRzLiBUaGlzIGFycmF5IGlzIG5vdCBwb3B1bGF0ZWQgaWYgd2UgYXJlIHRvbGQgdG8gYmUgc2lsZW50LlxuICAgICAgICBpZiAoY2hhbmdlRXZlbnRzLmxlbmd0aCkgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIGNoYW5nZUV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChjaGFuZ2UpIHtcbiAgICAgICAgICAgIHNlbGYudHJpZ2dlcignY2hhbmdlOicgKyBjaGFuZ2Uua2V5LCBzZWxmLCBjaGFuZ2UudmFsLCBvcHRpb25zKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gWW91IG1pZ2h0IGJlIHdvbmRlcmluZyB3aHkgdGhlcmUncyBhIGB3aGlsZWAgbG9vcCBoZXJlLiBDaGFuZ2VzIGNhblxuICAgICAgICAvLyBiZSByZWN1cnNpdmVseSBuZXN0ZWQgd2l0aGluIGBcImNoYW5nZVwiYCBldmVudHMuXG4gICAgICAgIGlmICh3YXNDaGFuZ2luZykgcmV0dXJuIHRoaXM7XG4gICAgICAgIHdoaWxlICh0aGlzLl9wZW5kaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2NoYW5nZScsIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbmdpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIGdldDogZnVuY3Rpb24gKGF0dHIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbYXR0cl07XG4gICAgfSxcblxuICAgIC8vIFRvZ2dsZSBib29sZWFuIHByb3BlcnRpZXMgb3IgcHJvcGVydGllcyB0aGF0IGhhdmUgYSBgdmFsdWVzYFxuICAgIC8vIGFycmF5IGluIGl0cyBkZWZpbml0aW9uLlxuICAgIHRvZ2dsZTogZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICAgIHZhciBkZWYgPSB0aGlzLl9kZWZpbml0aW9uW3Byb3BlcnR5XTtcbiAgICAgICAgaWYgKGRlZi50eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIC8vIGlmIGl0J3MgYSBib29sLCBqdXN0IGZsaXAgaXRcbiAgICAgICAgICAgIHRoaXNbcHJvcGVydHldID0gIXRoaXNbcHJvcGVydHldO1xuICAgICAgICB9IGVsc2UgaWYgKGRlZiAmJiBkZWYudmFsdWVzKSB7XG4gICAgICAgICAgICAvLyBJZiBpdCdzIGEgcHJvcGVydHkgd2l0aCBhbiBhcnJheSBvZiB2YWx1ZXNcbiAgICAgICAgICAgIC8vIHNraXAgdG8gdGhlIG5leHQgb25lIGxvb3BpbmcgYmFjayBpZiBhdCBlbmQuXG4gICAgICAgICAgICB0aGlzW3Byb3BlcnR5XSA9IGFycmF5TmV4dChkZWYudmFsdWVzLCB0aGlzW3Byb3BlcnR5XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW4gb25seSB0b2dnbGUgcHJvcGVydGllcyB0aGF0IGFyZSB0eXBlIGBib29sZWFuYCBvciBoYXZlIGB2YWx1ZXNgIGFycmF5LicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyBHZXQgYWxsIG9mIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBtb2RlbCBhdCB0aGUgdGltZSBvZiB0aGUgcHJldmlvdXNcbiAgICAvLyBgXCJjaGFuZ2VcImAgZXZlbnQuXG4gICAgcHJldmlvdXNBdHRyaWJ1dGVzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBjbG9uZU9iaih0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXMpO1xuICAgIH0sXG5cbiAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIG1vZGVsIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IGBcImNoYW5nZVwiYCBldmVudC5cbiAgICAvLyBJZiB5b3Ugc3BlY2lmeSBhbiBhdHRyaWJ1dGUgbmFtZSwgZGV0ZXJtaW5lIGlmIHRoYXQgYXR0cmlidXRlIGhhcyBjaGFuZ2VkLlxuICAgIGhhc0NoYW5nZWQ6IGZ1bmN0aW9uIChhdHRyKSB7XG4gICAgICAgIGlmIChhdHRyID09IG51bGwpIHJldHVybiAhIU9iamVjdC5rZXlzKHRoaXMuX2NoYW5nZWQpLmxlbmd0aDtcbiAgICAgICAgaWYgKGhhcyh0aGlzLl9kZXJpdmVkLCBhdHRyKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rlcml2ZWRbYXR0cl0uZGVwTGlzdC5zb21lKGZ1bmN0aW9uIChkZXApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYXNDaGFuZ2VkKGRlcCk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFzKHRoaXMuX2NoYW5nZWQsIGF0dHIpO1xuICAgIH0sXG5cbiAgICAvLyBSZXR1cm4gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBjaGFuZ2VkLCBvclxuICAgIC8vIGZhbHNlIGlmIHRoZXJlIGFyZSBubyBjaGFuZ2VkIGF0dHJpYnV0ZXMuIFVzZWZ1bCBmb3IgZGV0ZXJtaW5pbmcgd2hhdFxuICAgIC8vIHBhcnRzIG9mIGEgdmlldyBuZWVkIHRvIGJlIHVwZGF0ZWQgYW5kL29yIHdoYXQgYXR0cmlidXRlcyBuZWVkIHRvIGJlXG4gICAgLy8gcGVyc2lzdGVkIHRvIHRoZSBzZXJ2ZXIuIFVuc2V0IGF0dHJpYnV0ZXMgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICAgIC8vIFlvdSBjYW4gYWxzbyBwYXNzIGFuIGF0dHJpYnV0ZXMgb2JqZWN0IHRvIGRpZmYgYWdhaW5zdCB0aGUgbW9kZWwsXG4gICAgLy8gZGV0ZXJtaW5pbmcgaWYgdGhlcmUgKndvdWxkIGJlKiBhIGNoYW5nZS5cbiAgICBjaGFuZ2VkQXR0cmlidXRlczogZnVuY3Rpb24gKGRpZmYpIHtcbiAgICAgICAgaWYgKCFkaWZmKSByZXR1cm4gdGhpcy5oYXNDaGFuZ2VkKCkgPyBjbG9uZU9iaih0aGlzLl9jaGFuZ2VkKSA6IGZhbHNlO1xuICAgICAgICB2YXIgdmFsLCBjaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIHZhciBvbGQgPSB0aGlzLl9jaGFuZ2luZyA/IHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcyA6IHRoaXMuYXR0cmlidXRlcztcbiAgICAgICAgdmFyIGRlZiwgaXNFcXVhbDtcbiAgICAgICAgZm9yICh2YXIgYXR0ciBpbiBkaWZmKSB7XG4gICAgICAgICAgICBkZWYgPSB0aGlzLl9kZWZpbml0aW9uW2F0dHJdO1xuICAgICAgICAgICAgaWYgKCFkZWYpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaXNFcXVhbCA9IHRoaXMuX2dldENvbXBhcmVGb3JUeXBlKGRlZi50eXBlKTtcbiAgICAgICAgICAgIGlmIChpc0VxdWFsKG9sZFthdHRyXSwgKHZhbCA9IGRpZmZbYXR0cl0pKSkgY29udGludWU7XG4gICAgICAgICAgICAoY2hhbmdlZCB8fCAoY2hhbmdlZCA9IHt9KSlbYXR0cl0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoYW5nZWQ7XG4gICAgfSxcblxuICAgIHRvSlNPTjogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXJpYWxpemUoKTtcbiAgICB9LFxuXG4gICAgdW5zZXQ6IGZ1bmN0aW9uIChhdHRycywgb3B0aW9ucykge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIGF0dHJzID0gQXJyYXkuaXNBcnJheShhdHRycykgPyBhdHRycyA6IFthdHRyc107XG4gICAgICAgIGF0dHJzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgdmFyIGRlZiA9IHNlbGYuX2RlZmluaXRpb25ba2V5XTtcbiAgICAgICAgICAgIGlmICghZGVmKSByZXR1cm47XG4gICAgICAgICAgICB2YXIgdmFsO1xuICAgICAgICAgICAgaWYgKGRlZi5yZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIHZhbCA9IHJlc3VsdChkZWYsICdkZWZhdWx0Jyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0KGtleSwgdmFsLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0KGtleSwgdmFsLCBhc3NpZ24oe30sIG9wdGlvbnMsIHt1bnNldDogdHJ1ZX0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGNsZWFyOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBzZWxmLnVuc2V0KGtleSwgb3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgcHJldmlvdXM6IGZ1bmN0aW9uIChhdHRyKSB7XG4gICAgICAgIGlmIChhdHRyID09IG51bGwgfHwgIU9iamVjdC5rZXlzKHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcykubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlc1thdHRyXTtcbiAgICB9LFxuXG4gICAgLy8gR2V0IGRlZmF1bHQgdmFsdWVzIGZvciBhIGNlcnRhaW4gdHlwZVxuICAgIF9nZXREZWZhdWx0Rm9yVHlwZTogZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgICAgdmFyIGRhdGFUeXBlID0gdGhpcy5fZGF0YVR5cGVzW3R5cGVdO1xuICAgICAgICByZXR1cm4gZGF0YVR5cGUgJiYgZGF0YVR5cGVbJ2RlZmF1bHQnXTtcbiAgICB9LFxuXG4gICAgLy8gRGV0ZXJtaW5lIHdoaWNoIGNvbXBhcmlzb24gYWxnb3JpdGhtIHRvIHVzZSBmb3IgY29tcGFyaW5nIGEgcHJvcGVydHlcbiAgICBfZ2V0Q29tcGFyZUZvclR5cGU6IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIHZhciBkYXRhVHlwZSA9IHRoaXMuX2RhdGFUeXBlc1t0eXBlXTtcbiAgICAgICAgaWYgKGRhdGFUeXBlICYmIGRhdGFUeXBlLmNvbXBhcmUpIHJldHVybiBkYXRhVHlwZS5jb21wYXJlLmJpbmQodGhpcyk7XG4gICAgICAgIHJldHVybiBfaXNFcXVhbDsgLy8gaWYgbm8gY29tcGFyZSBmdW5jdGlvbiBpcyBkZWZpbmVkLCB1c2UgXy5pc0VxdWFsXG4gICAgfSxcblxuICAgIF9nZXRPbkNoYW5nZUZvclR5cGUgOiBmdW5jdGlvbih0eXBlKXtcbiAgICAgICAgdmFyIGRhdGFUeXBlID0gdGhpcy5fZGF0YVR5cGVzW3R5cGVdO1xuICAgICAgICBpZiAoZGF0YVR5cGUgJiYgZGF0YVR5cGUub25DaGFuZ2UpIHJldHVybiBkYXRhVHlwZS5vbkNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICByZXR1cm4gbm9vcDtcbiAgICB9LFxuXG4gICAgLy8gUnVuIHZhbGlkYXRpb24gYWdhaW5zdCB0aGUgbmV4dCBjb21wbGV0ZSBzZXQgb2YgbW9kZWwgYXR0cmlidXRlcyxcbiAgICAvLyByZXR1cm5pbmcgYHRydWVgIGlmIGFsbCBpcyB3ZWxsLiBPdGhlcndpc2UsIGZpcmUgYW4gYFwiaW52YWxpZFwiYCBldmVudC5cbiAgICBfdmFsaWRhdGU6IGZ1bmN0aW9uIChhdHRycywgb3B0aW9ucykge1xuICAgICAgICBpZiAoIW9wdGlvbnMudmFsaWRhdGUgfHwgIXRoaXMudmFsaWRhdGUpIHJldHVybiB0cnVlO1xuICAgICAgICBhdHRycyA9IGFzc2lnbih7fSwgdGhpcy5hdHRyaWJ1dGVzLCBhdHRycyk7XG4gICAgICAgIHZhciBlcnJvciA9IHRoaXMudmFsaWRhdGlvbkVycm9yID0gdGhpcy52YWxpZGF0ZShhdHRycywgb3B0aW9ucykgfHwgbnVsbDtcbiAgICAgICAgaWYgKCFlcnJvcikgcmV0dXJuIHRydWU7XG4gICAgICAgIHRoaXMudHJpZ2dlcignaW52YWxpZCcsIHRoaXMsIGVycm9yLCBhc3NpZ24ob3B0aW9ucyB8fCB7fSwge3ZhbGlkYXRpb25FcnJvcjogZXJyb3J9KSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgX2NyZWF0ZVByb3BlcnR5RGVmaW5pdGlvbjogZnVuY3Rpb24gKG5hbWUsIGRlc2MsIGlzU2Vzc2lvbikge1xuICAgICAgICByZXR1cm4gY3JlYXRlUHJvcGVydHlEZWZpbml0aW9uKHRoaXMsIG5hbWUsIGRlc2MsIGlzU2Vzc2lvbik7XG4gICAgfSxcblxuICAgIC8vIGp1c3QgbWFrZXMgZnJpZW5kbGllciBlcnJvcnMgd2hlbiB0cnlpbmcgdG8gZGVmaW5lIGEgbmV3IG1vZGVsXG4gICAgLy8gb25seSB1c2VkIHdoZW4gc2V0dGluZyB1cCBvcmlnaW5hbCBwcm9wZXJ0eSBkZWZpbml0aW9uc1xuICAgIF9lbnN1cmVWYWxpZFR5cGU6IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIHJldHVybiBpbmNsdWRlcyhbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbicsICdhcnJheScsICdvYmplY3QnLCAnZGF0ZScsICdzdGF0ZScsICdhbnknXVxuICAgICAgICAgICAgLmNvbmNhdChPYmplY3Qua2V5cyh0aGlzLl9kYXRhVHlwZXMpKSwgdHlwZSkgPyB0eXBlIDogdW5kZWZpbmVkO1xuICAgIH0sXG5cbiAgICBnZXRBdHRyaWJ1dGVzOiBmdW5jdGlvbiAob3B0aW9ucywgcmF3KSB7XG4gICAgICAgIG9wdGlvbnMgPSBhc3NpZ24oe1xuICAgICAgICAgICAgc2Vzc2lvbjogZmFsc2UsXG4gICAgICAgICAgICBwcm9wczogZmFsc2UsXG4gICAgICAgICAgICBkZXJpdmVkOiBmYWxzZVxuICAgICAgICB9LCBvcHRpb25zIHx8IHt9KTtcbiAgICAgICAgdmFyIHJlcyA9IHt9O1xuICAgICAgICB2YXIgdmFsLCBkZWY7XG4gICAgICAgIGZvciAodmFyIGl0ZW0gaW4gdGhpcy5fZGVmaW5pdGlvbikge1xuICAgICAgICAgICAgZGVmID0gdGhpcy5fZGVmaW5pdGlvbltpdGVtXTtcbiAgICAgICAgICAgIGlmICgob3B0aW9ucy5zZXNzaW9uICYmIGRlZi5zZXNzaW9uKSB8fCAob3B0aW9ucy5wcm9wcyAmJiAhZGVmLnNlc3Npb24pKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gcmF3ID8gdGhpcy5fdmFsdWVzW2l0ZW1dIDogdGhpc1tpdGVtXTtcbiAgICAgICAgICAgICAgICBpZiAocmF3ICYmIHZhbCAmJiBpc0Z1bmN0aW9uKHZhbC5zZXJpYWxpemUpKSB2YWwgPSB2YWwuc2VyaWFsaXplKCk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnKSB2YWwgPSByZXN1bHQoZGVmLCAnZGVmYXVsdCcpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsICE9PSAndW5kZWZpbmVkJykgcmVzW2l0ZW1dID0gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmRlcml2ZWQpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGRlcml2ZWRJdGVtIGluIHRoaXMuX2Rlcml2ZWQpIHJlc1tkZXJpdmVkSXRlbV0gPSB0aGlzW2Rlcml2ZWRJdGVtXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG5cbiAgICBfaW5pdERlcml2ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIGZvck93bih0aGlzLl9kZXJpdmVkLCBmdW5jdGlvbiAodmFsdWUsIG5hbWUpIHtcbiAgICAgICAgICAgIHZhciBkZWYgPSBzZWxmLl9kZXJpdmVkW25hbWVdO1xuICAgICAgICAgICAgZGVmLmRlcHMgPSBkZWYuZGVwTGlzdDtcblxuICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgbmV3VmFsID0gZGVmLmZuLmNhbGwoc2VsZik7XG5cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5fY2FjaGVbbmFtZV0gIT09IG5ld1ZhbCB8fCAhZGVmLmNhY2hlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWYuY2FjaGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3ByZXZpb3VzQXR0cmlidXRlc1tuYW1lXSA9IHNlbGYuX2NhY2hlW25hbWVdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlW25hbWVdID0gbmV3VmFsO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ2NoYW5nZTonICsgbmFtZSwgc2VsZiwgc2VsZi5fY2FjaGVbbmFtZV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGRlZi5kZXBzLmZvckVhY2goZnVuY3Rpb24gKHByb3BTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9rZXlUcmVlLmFkZChwcm9wU3RyaW5nLCB1cGRhdGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub24oJ2FsbCcsIGZ1bmN0aW9uIChldmVudE5hbWUpIHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VSRS50ZXN0KGV2ZW50TmFtZSkpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9rZXlUcmVlLmdldChldmVudE5hbWUuc3BsaXQoJzonKVsxXSkuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfSxcblxuICAgIF9nZXREZXJpdmVkUHJvcGVydHk6IGZ1bmN0aW9uIChuYW1lLCBmbHVzaENhY2hlKSB7XG4gICAgICAgIC8vIGlzIHRoaXMgYSBkZXJpdmVkIHByb3BlcnR5IHRoYXQgaXMgY2FjaGVkXG4gICAgICAgIGlmICh0aGlzLl9kZXJpdmVkW25hbWVdLmNhY2hlKSB7XG4gICAgICAgICAgICAvL3NldCBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lLCBvciBmbHVzaENhY2hlIGlzIHNldFxuICAgICAgICAgICAgaWYgKGZsdXNoQ2FjaGUgfHwgIXRoaXMuX2NhY2hlLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVbbmFtZV0gPSB0aGlzLl9kZXJpdmVkW25hbWVdLmZuLmFwcGx5KHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlW25hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rlcml2ZWRbbmFtZV0uZm4uYXBwbHkodGhpcyk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX2luaXRDb2xsZWN0aW9uczogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY29sbDtcbiAgICAgICAgaWYgKCF0aGlzLl9jb2xsZWN0aW9ucykgcmV0dXJuO1xuICAgICAgICBmb3IgKGNvbGwgaW4gdGhpcy5fY29sbGVjdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuX3NhZmVTZXQoY29sbCwgbmV3IHRoaXMuX2NvbGxlY3Rpb25zW2NvbGxdKG51bGwsIHtwYXJlbnQ6IHRoaXN9KSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX2luaXRDaGlsZHJlbjogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY2hpbGQ7XG4gICAgICAgIGlmICghdGhpcy5fY2hpbGRyZW4pIHJldHVybjtcbiAgICAgICAgZm9yIChjaGlsZCBpbiB0aGlzLl9jaGlsZHJlbikge1xuICAgICAgICAgICAgdGhpcy5fc2FmZVNldChjaGlsZCwgbmV3IHRoaXMuX2NoaWxkcmVuW2NoaWxkXSh7fSwge3BhcmVudDogdGhpc30pKTtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuVG8odGhpc1tjaGlsZF0sICdhbGwnLCB0aGlzLl9nZXRDYWNoZWRFdmVudEJ1YmJsaW5nSGFuZGxlcihjaGlsZCkpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgYSBib3VuZCBoYW5kbGVyIGZvciBkb2luZyBldmVudCBidWJibGluZyB3aGlsZVxuICAgIC8vIGFkZGluZyBhIG5hbWUgdG8gdGhlIGNoYW5nZSBzdHJpbmcuXG4gICAgX2dldENhY2hlZEV2ZW50QnViYmxpbmdIYW5kbGVyOiBmdW5jdGlvbiAocHJvcGVydHlOYW1lKSB7XG4gICAgICAgIGlmICghdGhpcy5fZXZlbnRCdWJibGluZ0hhbmRsZXJDYWNoZVtwcm9wZXJ0eU5hbWVdKSB7XG4gICAgICAgICAgICB0aGlzLl9ldmVudEJ1YmJsaW5nSGFuZGxlckNhY2hlW3Byb3BlcnR5TmFtZV0gPSBmdW5jdGlvbiAobmFtZSwgbW9kZWwsIG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoYW5nZVJFLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdjaGFuZ2U6JyArIHByb3BlcnR5TmFtZSArICcuJyArIG5hbWUuc3BsaXQoJzonKVsxXSwgbW9kZWwsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdjaGFuZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignY2hhbmdlJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9ldmVudEJ1YmJsaW5nSGFuZGxlckNhY2hlW3Byb3BlcnR5TmFtZV07XG4gICAgfSxcblxuICAgIC8vIENoZWNrIHRoYXQgYWxsIHJlcXVpcmVkIGF0dHJpYnV0ZXMgYXJlIHByZXNlbnRcbiAgICBfdmVyaWZ5UmVxdWlyZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGF0dHJzID0gdGhpcy5hdHRyaWJ1dGVzOyAvLyBzaG91bGQgaW5jbHVkZSBzZXNzaW9uXG4gICAgICAgIGZvciAodmFyIGRlZiBpbiB0aGlzLl9kZWZpbml0aW9uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZGVmaW5pdGlvbltkZWZdLnJlcXVpcmVkICYmIHR5cGVvZiBhdHRyc1tkZWZdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuXG4gICAgLy8gZXhwb3NlIHNhZmVTZXQgbWV0aG9kXG4gICAgX3NhZmVTZXQ6IGZ1bmN0aW9uIHNhZmVTZXQocHJvcGVydHksIHZhbHVlKSB7XG4gICAgICAgIGlmIChwcm9wZXJ0eSBpbiB0aGlzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIG5hbWVzcGFjZSBjb2xsaXNpb24gd2hpbGUgc2V0dGluZyBpbnN0YW5jZSBwcm9wZXJ0eSBgJyArIHByb3BlcnR5ICsgJ2AnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzW3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59KTtcblxuLy8gZ2V0dGVyIGZvciBhdHRyaWJ1dGVzXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCYXNlLnByb3RvdHlwZSwge1xuICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVzKHtwcm9wczogdHJ1ZSwgc2Vzc2lvbjogdHJ1ZX0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBhbGw6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAgICAgICBzZXNzaW9uOiB0cnVlLFxuICAgICAgICAgICAgICAgIHByb3BzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGRlcml2ZWQ6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBpc1N0YXRlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZTsgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7IH1cbiAgICB9XG59KTtcblxuLy8gaGVscGVyIGZvciBjcmVhdGluZy9zdG9yaW5nIHByb3BlcnR5IGRlZmluaXRpb25zIGFuZCBjcmVhdGluZ1xuLy8gYXBwcm9wcmlhdGUgZ2V0dGVycy9zZXR0ZXJzXG5mdW5jdGlvbiBjcmVhdGVQcm9wZXJ0eURlZmluaXRpb24ob2JqZWN0LCBuYW1lLCBkZXNjLCBpc1Nlc3Npb24pIHtcbiAgICB2YXIgZGVmID0gb2JqZWN0Ll9kZWZpbml0aW9uW25hbWVdID0ge307XG4gICAgdmFyIHR5cGUsIGRlc2NBcnJheTtcblxuICAgIGlmIChpc1N0cmluZyhkZXNjKSkge1xuICAgICAgICAvLyBncmFiIG91ciB0eXBlIGlmIGFsbCB3ZSd2ZSBnb3QgaXMgYSBzdHJpbmdcbiAgICAgICAgdHlwZSA9IG9iamVjdC5fZW5zdXJlVmFsaWRUeXBlKGRlc2MpO1xuICAgICAgICBpZiAodHlwZSkgZGVmLnR5cGUgPSB0eXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vVHJhbnNmb3JtIGFycmF5IG9mIFsndHlwZScsIHJlcXVpcmVkLCBkZWZhdWx0XSB0byBvYmplY3QgZm9ybVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkZXNjKSkge1xuICAgICAgICAgICAgZGVzY0FycmF5ID0gZGVzYztcbiAgICAgICAgICAgIGRlc2MgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogZGVzY0FycmF5WzBdLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBkZXNjQXJyYXlbMV0sXG4gICAgICAgICAgICAgICAgJ2RlZmF1bHQnOiBkZXNjQXJyYXlbMl1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB0eXBlID0gb2JqZWN0Ll9lbnN1cmVWYWxpZFR5cGUoZGVzYy50eXBlKTtcbiAgICAgICAgaWYgKHR5cGUpIGRlZi50eXBlID0gdHlwZTtcblxuICAgICAgICBpZiAoZGVzYy5yZXF1aXJlZCkgZGVmLnJlcXVpcmVkID0gdHJ1ZTtcblxuICAgICAgICBpZiAoZGVzY1snZGVmYXVsdCddICYmIHR5cGVvZiBkZXNjWydkZWZhdWx0J10gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgJyArIG5hbWUgKyAnIGNhbm5vdCBiZSBhbiBvYmplY3QvYXJyYXksIG11c3QgYmUgYSB2YWx1ZSBvciBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYSB2YWx1ZS9vYmplY3QvYXJyYXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZlsnZGVmYXVsdCddID0gZGVzY1snZGVmYXVsdCddO1xuXG4gICAgICAgIGRlZi5hbGxvd051bGwgPSBkZXNjLmFsbG93TnVsbCA/IGRlc2MuYWxsb3dOdWxsIDogZmFsc2U7XG4gICAgICAgIGlmIChkZXNjLnNldE9uY2UpIGRlZi5zZXRPbmNlID0gdHJ1ZTtcbiAgICAgICAgaWYgKGRlZi5yZXF1aXJlZCAmJiBkZWZbJ2RlZmF1bHQnXSA9PT0gdW5kZWZpbmVkICYmICFkZWYuc2V0T25jZSkgZGVmWydkZWZhdWx0J10gPSBvYmplY3QuX2dldERlZmF1bHRGb3JUeXBlKHR5cGUpO1xuICAgICAgICBkZWYudGVzdCA9IGRlc2MudGVzdDtcbiAgICAgICAgZGVmLnZhbHVlcyA9IGRlc2MudmFsdWVzO1xuICAgIH1cbiAgICBpZiAoaXNTZXNzaW9uKSBkZWYuc2Vzc2lvbiA9IHRydWU7XG5cbiAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgdHlwZSA9IGlzU3RyaW5nKGRlc2MpID8gZGVzYyA6IGRlc2MudHlwZTtcbiAgICAgICAgLy8gVE9ETzogc3RhcnQgdGhyb3dpbmcgYSBUeXBlRXJyb3IgaW4gZnV0dXJlIG1ham9yIHZlcnNpb25zIGluc3RlYWQgb2Ygd2FybmluZ1xuICAgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgZGF0YSB0eXBlIG9mIGAnICsgdHlwZSArICdgIGZvciBgJyArIG5hbWUgKyAnYCBwcm9wZXJ0eS4gVXNlIG9uZSBvZiB0aGUgZGVmYXVsdCB0eXBlcyBvciBkZWZpbmUgeW91ciBvd24nKTtcbiAgICB9XG5cbiAgICAvLyBkZWZpbmUgYSBnZXR0ZXIvc2V0dGVyIG9uIHRoZSBwcm90b3R5cGVcbiAgICAvLyBidXQgdGhleSBnZXQvc2V0IG9uIHRoZSBpbnN0YW5jZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldChuYW1lLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1lvdSBtYXkgYmUgdHJ5aW5nIHRvIGBleHRlbmRgIGEgc3RhdGUgb2JqZWN0IHdpdGggXCInICsgbmFtZSArICdcIiB3aGljaCBoYXMgYmVlbiBkZWZpbmVkIGluIGBwcm9wc2Agb24gdGhlIG9iamVjdCBiZWluZyBleHRlbmRlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5fdmFsdWVzW25hbWVdO1xuICAgICAgICAgICAgdmFyIHR5cGVEZWYgPSB0aGlzLl9kYXRhVHlwZXNbZGVmLnR5cGVdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZURlZiAmJiB0eXBlRGVmLmdldCkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHR5cGVEZWYuZ2V0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRlZmF1bHRWYWx1ZSA9IHJlc3VsdChkZWYsICdkZWZhdWx0Jyk7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZXNbbmFtZV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAvLyBJZiB3ZSd2ZSBzZXQgYSBkZWZhdWx0VmFsdWUsIGZpcmUgYSBjaGFuZ2UgaGFuZGxlciBlZmZlY3RpdmVseSBtYXJraW5nXG4gICAgICAgICAgICAvLyBpdHMgY2hhbmdlIGZyb20gdW5kZWZpbmVkIHRvIHRoZSBkZWZhdWx0IHZhbHVlLlxuICAgICAgICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9uQ2hhbmdlID0gdGhpcy5fZ2V0T25DaGFuZ2VGb3JUeXBlKGRlZi50eXBlKTtcbiAgICAgICAgICAgICAgICBvbkNoYW5nZShkZWZhdWx0VmFsdWUsIHZhbHVlLCBuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBkZWY7XG59XG5cbi8vIGhlbHBlciBmb3IgY3JlYXRpbmcgZGVyaXZlZCBwcm9wZXJ0eSBkZWZpbml0aW9uc1xuZnVuY3Rpb24gY3JlYXRlRGVyaXZlZFByb3BlcnR5KG1vZGVsUHJvdG8sIG5hbWUsIGRlZmluaXRpb24pIHtcbiAgICB2YXIgZGVmID0gbW9kZWxQcm90by5fZGVyaXZlZFtuYW1lXSA9IHtcbiAgICAgICAgZm46IGlzRnVuY3Rpb24oZGVmaW5pdGlvbikgPyBkZWZpbml0aW9uIDogZGVmaW5pdGlvbi5mbixcbiAgICAgICAgY2FjaGU6IChkZWZpbml0aW9uLmNhY2hlICE9PSBmYWxzZSksXG4gICAgICAgIGRlcExpc3Q6IGRlZmluaXRpb24uZGVwcyB8fCBbXVxuICAgIH07XG5cbiAgICAvLyBhZGQgdG8gb3VyIHNoYXJlZCBkZXBlbmRlbmN5IGxpc3RcbiAgICBkZWYuZGVwTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChkZXApIHtcbiAgICAgICAgbW9kZWxQcm90by5fZGVwc1tkZXBdID0gdW5pb24obW9kZWxQcm90by5fZGVwc1tkZXBdIHx8IFtdLCBbbmFtZV0pO1xuICAgIH0pO1xuXG4gICAgLy8gZGVmaW5lZCBhIHRvcC1sZXZlbCBnZXR0ZXIgZm9yIGRlcml2ZWQgbmFtZXNcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kZWxQcm90bywgbmFtZSwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXREZXJpdmVkUHJvcGVydHkobmFtZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImBcIiArIG5hbWUgKyBcImAgaXMgYSBkZXJpdmVkIHByb3BlcnR5LCBpdCBjYW4ndCBiZSBzZXQgZGlyZWN0bHkuXCIpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbnZhciBkYXRhVHlwZXMgPSB7XG4gICAgc3RyaW5nOiB7XG4gICAgICAgICdkZWZhdWx0JzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBkYXRlOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ZhbCkge1xuICAgICAgICAgICAgdmFyIG5ld1R5cGU7XG4gICAgICAgICAgICBpZiAobmV3VmFsID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBuZXdUeXBlID0gdHlwZW9mIG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpc0RhdGUobmV3VmFsKSkge1xuICAgICAgICAgICAgICAgIHZhciBlcnIgPSBudWxsO1xuICAgICAgICAgICAgICAgIHZhciBkYXRlVmFsID0gbmV3IERhdGUobmV3VmFsKS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKGRhdGVWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBuZXdWYWwgY2FudCBiZSBwYXJzZWQsIHRoZW4gdHJ5IHBhcnNlSW50IGZpcnN0XG4gICAgICAgICAgICAgICAgICAgIGRhdGVWYWwgPSBuZXcgRGF0ZShwYXJzZUludChuZXdWYWwsIDEwKSkudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4oZGF0ZVZhbCkpIGVyciA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5ld1ZhbCA9IGRhdGVWYWw7XG4gICAgICAgICAgICAgICAgbmV3VHlwZSA9ICdkYXRlJztcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1R5cGUgPSB0eXBlb2YgbmV3VmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3VHlwZSA9ICdkYXRlJztcbiAgICAgICAgICAgICAgICBuZXdWYWwgPSBuZXdWYWwudmFsdWVPZigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHZhbDogbmV3VmFsLFxuICAgICAgICAgICAgICAgIHR5cGU6IG5ld1R5cGVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGdldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgaWYgKHZhbCA9PSBudWxsKSB7IHJldHVybiB2YWw7IH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWwpO1xuICAgICAgICB9LFxuICAgICAgICAnZGVmYXVsdCc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSgpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBhcnJheToge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdWYWwpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdmFsOiBuZXdWYWwsXG4gICAgICAgICAgICAgICAgdHlwZTogQXJyYXkuaXNBcnJheShuZXdWYWwpID8gJ2FycmF5JyA6IHR5cGVvZiBuZXdWYWxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgICdkZWZhdWx0JzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBvYmplY3Q6IHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3VmFsKSB7XG4gICAgICAgICAgICB2YXIgbmV3VHlwZSA9IHR5cGVvZiBuZXdWYWw7XG4gICAgICAgICAgICAvLyB3ZSBoYXZlIHRvIGhhdmUgYSB3YXkgb2Ygc3VwcG9ydGluZyBcIm1pc3NpbmdcIiBvYmplY3RzLlxuICAgICAgICAgICAgLy8gTnVsbCBpcyBhbiBvYmplY3QsIGJ1dCBzZXR0aW5nIGEgdmFsdWUgdG8gdW5kZWZpbmVkXG4gICAgICAgICAgICAvLyBzaG91bGQgd29yayB0b28sIElNTy4gV2UganVzdCBvdmVycmlkZSBpdCwgaW4gdGhhdCBjYXNlLlxuICAgICAgICAgICAgaWYgKG5ld1R5cGUgIT09ICdvYmplY3QnICYmIG5ld1ZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbmV3VmFsID0gbnVsbDtcbiAgICAgICAgICAgICAgICBuZXdUeXBlID0gJ29iamVjdCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHZhbDogbmV3VmFsLFxuICAgICAgICAgICAgICAgIHR5cGU6IG5ld1R5cGVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgICdkZWZhdWx0JzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvLyB0aGUgYHN0YXRlYCBkYXRhIHR5cGUgaXMgYSBiaXQgc3BlY2lhbCBpbiB0aGF0IHNldHRpbmcgaXQgc2hvdWxkXG4gICAgLy8gYWxzbyBidWJibGUgZXZlbnRzXG4gICAgc3RhdGU6IHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3VmFsKSB7XG4gICAgICAgICAgICB2YXIgaXNJbnN0YW5jZSA9IG5ld1ZhbCBpbnN0YW5jZW9mIEJhc2UgfHwgKG5ld1ZhbCAmJiBuZXdWYWwuaXNTdGF0ZSk7XG4gICAgICAgICAgICBpZiAoaXNJbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbDogbmV3VmFsLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3RhdGUnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsOiBuZXdWYWwsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVvZiBuZXdWYWxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb21wYXJlOiBmdW5jdGlvbiAoY3VycmVudFZhbCwgbmV3VmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFZhbCA9PT0gbmV3VmFsO1xuICAgICAgICB9LFxuXG4gICAgICAgIG9uQ2hhbmdlIDogZnVuY3Rpb24obmV3VmFsLCBwcmV2aW91c1ZhbCwgYXR0cmlidXRlTmFtZSl7XG4gICAgICAgICAgICAvLyBpZiB0aGlzIGhhcyBjaGFuZ2VkIHdlIHdhbnQgdG8gYWxzbyBoYW5kbGVcbiAgICAgICAgICAgIC8vIGV2ZW50IHByb3BhZ2F0aW9uXG4gICAgICAgICAgICBpZiAocHJldmlvdXNWYWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3BMaXN0ZW5pbmcocHJldmlvdXNWYWwsICdhbGwnLCB0aGlzLl9nZXRDYWNoZWRFdmVudEJ1YmJsaW5nSGFuZGxlcihhdHRyaWJ1dGVOYW1lKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuZXdWYWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuVG8obmV3VmFsLCAnYWxsJywgdGhpcy5fZ2V0Q2FjaGVkRXZlbnRCdWJibGluZ0hhbmRsZXIoYXR0cmlidXRlTmFtZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLy8gdGhlIGV4dGVuZCBtZXRob2QgdXNlZCB0byBleHRlbmQgcHJvdG90eXBlcywgbWFpbnRhaW4gaW5oZXJpdGFuY2UgY2hhaW5zIGZvciBpbnN0YW5jZW9mXG4vLyBhbmQgYWxsb3cgZm9yIGFkZGl0aW9ucyB0byB0aGUgbW9kZWwgZGVmaW5pdGlvbnMuXG5mdW5jdGlvbiBleHRlbmQocHJvdG9Qcm9wcykge1xuICAgIC8qanNoaW50IHZhbGlkdGhpczp0cnVlKi9cbiAgICB2YXIgcGFyZW50ID0gdGhpcztcbiAgICB2YXIgY2hpbGQ7XG5cbiAgICAvLyBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBuZXcgc3ViY2xhc3MgaXMgZWl0aGVyIGRlZmluZWQgYnkgeW91XG4gICAgLy8gKHRoZSBcImNvbnN0cnVjdG9yXCIgcHJvcGVydHkgaW4geW91ciBgZXh0ZW5kYCBkZWZpbml0aW9uKSwgb3IgZGVmYXVsdGVkXG4gICAgLy8gYnkgdXMgdG8gc2ltcGx5IGNhbGwgdGhlIHBhcmVudCdzIGNvbnN0cnVjdG9yLlxuICAgIGlmIChwcm90b1Byb3BzICYmIHByb3RvUHJvcHMuaGFzT3duUHJvcGVydHkoJ2NvbnN0cnVjdG9yJykpIHtcbiAgICAgICAgY2hpbGQgPSBwcm90b1Byb3BzLmNvbnN0cnVjdG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIEFkZCBzdGF0aWMgcHJvcGVydGllcyB0byB0aGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZnJvbSBwYXJlbnRcbiAgICBhc3NpZ24oY2hpbGQsIHBhcmVudCk7XG5cbiAgICAvLyBTZXQgdGhlIHByb3RvdHlwZSBjaGFpbiB0byBpbmhlcml0IGZyb20gYHBhcmVudGAsIHdpdGhvdXQgY2FsbGluZ1xuICAgIC8vIGBwYXJlbnRgJ3MgY29uc3RydWN0b3IgZnVuY3Rpb24uXG4gICAgdmFyIFN1cnJvZ2F0ZSA9IGZ1bmN0aW9uICgpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9O1xuICAgIFN1cnJvZ2F0ZS5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlO1xuICAgIGNoaWxkLnByb3RvdHlwZSA9IG5ldyBTdXJyb2dhdGUoKTtcblxuICAgIC8vIHNldCBwcm90b3R5cGUgbGV2ZWwgb2JqZWN0c1xuICAgIGNoaWxkLnByb3RvdHlwZS5fZGVyaXZlZCA9ICBhc3NpZ24oe30sIHBhcmVudC5wcm90b3R5cGUuX2Rlcml2ZWQpO1xuICAgIGNoaWxkLnByb3RvdHlwZS5fZGVwcyA9IGFzc2lnbih7fSwgcGFyZW50LnByb3RvdHlwZS5fZGVwcyk7XG4gICAgY2hpbGQucHJvdG90eXBlLl9kZWZpbml0aW9uID0gYXNzaWduKHt9LCBwYXJlbnQucHJvdG90eXBlLl9kZWZpbml0aW9uKTtcbiAgICBjaGlsZC5wcm90b3R5cGUuX2NvbGxlY3Rpb25zID0gYXNzaWduKHt9LCBwYXJlbnQucHJvdG90eXBlLl9jb2xsZWN0aW9ucyk7XG4gICAgY2hpbGQucHJvdG90eXBlLl9jaGlsZHJlbiA9IGFzc2lnbih7fSwgcGFyZW50LnByb3RvdHlwZS5fY2hpbGRyZW4pO1xuICAgIGNoaWxkLnByb3RvdHlwZS5fZGF0YVR5cGVzID0gYXNzaWduKHt9LCBwYXJlbnQucHJvdG90eXBlLl9kYXRhVHlwZXMgfHwgZGF0YVR5cGVzKTtcblxuICAgIC8vIE1peCBpbiBhbGwgcHJvdG90eXBlIHByb3BlcnRpZXMgdG8gdGhlIHN1YmNsYXNzIGlmIHN1cHBsaWVkLlxuICAgIGlmIChwcm90b1Byb3BzKSB7XG4gICAgICAgIHZhciBvbWl0RnJvbUV4dGVuZCA9IFtcbiAgICAgICAgICAgICdkYXRhVHlwZXMnLCAncHJvcHMnLCAnc2Vzc2lvbicsICdkZXJpdmVkJywgJ2NvbGxlY3Rpb25zJywgJ2NoaWxkcmVuJ1xuICAgICAgICBdO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgZGVmID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgaWYgKGRlZi5kYXRhVHlwZXMpIHtcbiAgICAgICAgICAgICAgICBmb3JPd24oZGVmLmRhdGFUeXBlcywgZnVuY3Rpb24gKGRlZiwgbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZC5wcm90b3R5cGUuX2RhdGFUeXBlc1tuYW1lXSA9IGRlZjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkZWYucHJvcHMpIHtcbiAgICAgICAgICAgICAgICBmb3JPd24oZGVmLnByb3BzLCBmdW5jdGlvbiAoZGVmLCBuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZVByb3BlcnR5RGVmaW5pdGlvbihjaGlsZC5wcm90b3R5cGUsIG5hbWUsIGRlZik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGVmLnNlc3Npb24pIHtcbiAgICAgICAgICAgICAgICBmb3JPd24oZGVmLnNlc3Npb24sIGZ1bmN0aW9uIChkZWYsIG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlUHJvcGVydHlEZWZpbml0aW9uKGNoaWxkLnByb3RvdHlwZSwgbmFtZSwgZGVmLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkZWYuZGVyaXZlZCkge1xuICAgICAgICAgICAgICAgIGZvck93bihkZWYuZGVyaXZlZCwgZnVuY3Rpb24gKGRlZiwgbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGVEZXJpdmVkUHJvcGVydHkoY2hpbGQucHJvdG90eXBlLCBuYW1lLCBkZWYpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRlZi5jb2xsZWN0aW9ucykge1xuICAgICAgICAgICAgICAgIGZvck93bihkZWYuY29sbGVjdGlvbnMsIGZ1bmN0aW9uIChjb25zdHJ1Y3RvciwgbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZC5wcm90b3R5cGUuX2NvbGxlY3Rpb25zW25hbWVdID0gY29uc3RydWN0b3I7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGVmLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgZm9yT3duKGRlZi5jaGlsZHJlbiwgZnVuY3Rpb24gKGNvbnN0cnVjdG9yLCBuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLnByb3RvdHlwZS5fY2hpbGRyZW5bbmFtZV0gPSBjb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzc2lnbihjaGlsZC5wcm90b3R5cGUsIG9taXQoZGVmLCBvbWl0RnJvbUV4dGVuZCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IGEgY29udmVuaWVuY2UgcHJvcGVydHkgaW4gY2FzZSB0aGUgcGFyZW50J3MgcHJvdG90eXBlIGlzIG5lZWRlZFxuICAgIC8vIGxhdGVyLlxuICAgIGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59XG5cbkJhc2UuZXh0ZW5kID0gZXh0ZW5kO1xuXG4vLyBPdXIgbWFpbiBleHBvcnRzXG5tb2R1bGUuZXhwb3J0cyA9IEJhc2U7XG4iLCJ2YXIgeGhyID0gcmVxdWlyZSgneGhyJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29yZScpKHhocik7XG4iLCIvKiRBTVBFUlNBTkRfVkVSU0lPTiovXG52YXIgcmVzdWx0ID0gcmVxdWlyZSgnbG9kYXNoL3Jlc3VsdCcpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnbG9kYXNoL2RlZmF1bHRzJyk7XG52YXIgaW5jbHVkZXMgPSByZXF1aXJlKCdsb2Rhc2gvaW5jbHVkZXMnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdsb2Rhc2gvYXNzaWduJyk7XG52YXIgcXMgPSByZXF1aXJlKCdxcycpO1xudmFyIG1lZGlhVHlwZSA9IHJlcXVpcmUoJ21lZGlhLXR5cGUnKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh4aHIpIHtcblxuICAvLyBUaHJvdyBhbiBlcnJvciB3aGVuIGEgVVJMIGlzIG5lZWRlZCwgYW5kIG5vbmUgaXMgc3VwcGxpZWQuXG4gIHZhciB1cmxFcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQSBcInVybFwiIHByb3BlcnR5IG9yIGZ1bmN0aW9uIG11c3QgYmUgc3BlY2lmaWVkJyk7XG4gIH07XG5cbiAgLy8gTWFwIGZyb20gQ1JVRCB0byBIVFRQIGZvciBvdXIgZGVmYXVsdCBgQmFja2JvbmUuc3luY2AgaW1wbGVtZW50YXRpb24uXG4gIHZhciBtZXRob2RNYXAgPSB7XG4gICAgICAnY3JlYXRlJzogJ1BPU1QnLFxuICAgICAgJ3VwZGF0ZSc6ICdQVVQnLFxuICAgICAgJ3BhdGNoJzogICdQQVRDSCcsXG4gICAgICAnZGVsZXRlJzogJ0RFTEVURScsXG4gICAgICAncmVhZCc6ICAgJ0dFVCdcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKG1ldGhvZCwgbW9kZWwsIG9wdGlvbnNJbnB1dCkge1xuICAgICAgLy9Db3B5IHRoZSBvcHRpb25zIG9iamVjdC4gSXQncyB1c2luZyBhc3NpZ24gaW5zdGVhZCBvZiBjbG9uZWRlZXAgYXMgYW4gb3B0aW1pemF0aW9uLlxuICAgICAgLy9UaGUgb25seSBvYmplY3Qgd2UgY291bGQgZXhwZWN0IGluIG9wdGlvbnMgaXMgaGVhZGVycywgd2hpY2ggaXMgc2FmZWx5IHRyYW5zZmVyZWQgYmVsb3cuXG4gICAgICB2YXIgb3B0aW9ucyA9IGFzc2lnbih7fSxvcHRpb25zSW5wdXQpO1xuICAgICAgdmFyIHR5cGUgPSBtZXRob2RNYXBbbWV0aG9kXTtcbiAgICAgIHZhciBoZWFkZXJzID0ge307XG5cbiAgICAgIC8vIERlZmF1bHQgb3B0aW9ucywgdW5sZXNzIHNwZWNpZmllZC5cbiAgICAgIGRlZmF1bHRzKG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSksIHtcbiAgICAgICAgICBlbXVsYXRlSFRUUDogZmFsc2UsXG4gICAgICAgICAgZW11bGF0ZUpTT046IGZhbHNlLFxuICAgICAgICAgIC8vIG92ZXJyaWRlYWJsZSBwcmltYXJpbHkgdG8gZW5hYmxlIHRlc3RpbmdcbiAgICAgICAgICB4aHJJbXBsZW1lbnRhdGlvbjogeGhyXG4gICAgICB9KTtcblxuICAgICAgLy8gRGVmYXVsdCByZXF1ZXN0IG9wdGlvbnMuXG4gICAgICB2YXIgcGFyYW1zID0ge3R5cGU6IHR5cGV9O1xuXG4gICAgICB2YXIgYWpheENvbmZpZyA9IHJlc3VsdChtb2RlbCwgJ2FqYXhDb25maWcnLCB7fSk7XG4gICAgICB2YXIga2V5O1xuICAgICAgLy8gQ29tYmluZSBnZW5lcmF0ZWQgaGVhZGVycyB3aXRoIHVzZXIncyBoZWFkZXJzLlxuICAgICAgaWYgKGFqYXhDb25maWcuaGVhZGVycykge1xuICAgICAgICAgIGZvciAoa2V5IGluIGFqYXhDb25maWcuaGVhZGVycykge1xuICAgICAgICAgICAgICBoZWFkZXJzW2tleS50b0xvd2VyQ2FzZSgpXSA9IGFqYXhDb25maWcuaGVhZGVyc1trZXldO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICBmb3IgKGtleSBpbiBvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgaGVhZGVyc1trZXkudG9Mb3dlckNhc2UoKV0gPSBvcHRpb25zLmhlYWRlcnNba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVsZXRlIG9wdGlvbnMuaGVhZGVycztcbiAgICAgIH1cbiAgICAgIC8vYWpheENvbmZpZyBoYXMgdG8gYmUgbWVyZ2VkIGludG8gcGFyYW1zIGJlZm9yZSBvdGhlciBvcHRpb25zIHRha2UgZWZmZWN0LCBzbyBpdCBpcyBpbiBmYWN0IGEgMmx2bCBkZWZhdWx0XG4gICAgICBhc3NpZ24ocGFyYW1zLCBhamF4Q29uZmlnKTtcbiAgICAgIHBhcmFtcy5oZWFkZXJzID0gaGVhZGVycztcblxuICAgICAgLy8gRW5zdXJlIHRoYXQgd2UgaGF2ZSBhIFVSTC5cbiAgICAgIGlmICghb3B0aW9ucy51cmwpIHtcbiAgICAgICAgICBvcHRpb25zLnVybCA9IHJlc3VsdChtb2RlbCwgJ3VybCcpIHx8IHVybEVycm9yKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IHdlIGhhdmUgdGhlIGFwcHJvcHJpYXRlIHJlcXVlc3QgZGF0YS5cbiAgICAgIGlmIChvcHRpb25zLmRhdGEgPT0gbnVsbCAmJiBtb2RlbCAmJiAobWV0aG9kID09PSAnY3JlYXRlJyB8fCBtZXRob2QgPT09ICd1cGRhdGUnIHx8IG1ldGhvZCA9PT0gJ3BhdGNoJykpIHtcbiAgICAgICAgICBwYXJhbXMuanNvbiA9IG9wdGlvbnMuYXR0cnMgfHwgbW9kZWwudG9KU09OKG9wdGlvbnMpO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBwYXNzZWQgYSBkYXRhIHBhcmFtLCB3ZSBhZGQgaXQgdG8gdGhlIFVSTCBvciBib2R5IGRlcGVuZGluZyBvbiByZXF1ZXN0IHR5cGVcbiAgICAgIGlmIChvcHRpb25zLmRhdGEgJiYgdHlwZSA9PT0gJ0dFVCcpIHtcbiAgICAgICAgICAvLyBtYWtlIHN1cmUgd2UndmUgZ290IGEgJz8nXG4gICAgICAgICAgb3B0aW9ucy51cmwgKz0gaW5jbHVkZXMob3B0aW9ucy51cmwsICc/JykgPyAnJicgOiAnPyc7XG4gICAgICAgICAgb3B0aW9ucy51cmwgKz0gcXMuc3RyaW5naWZ5KG9wdGlvbnMuZGF0YSk7XG4gICAgICAgICAgLy9kZWxldGUgYGRhdGFgIHNvIGB4aHJgIGRvZXNuJ3QgdXNlIGl0IGFzIGEgYm9keVxuICAgICAgICAgIGRlbGV0ZSBvcHRpb25zLmRhdGE7XG4gICAgICB9XG5cbiAgICAgIC8vIEZvciBvbGRlciBzZXJ2ZXJzLCBlbXVsYXRlIEpTT04gYnkgZW5jb2RpbmcgdGhlIHJlcXVlc3QgaW50byBhbiBIVE1MLWZvcm0uXG4gICAgICBpZiAob3B0aW9ucy5lbXVsYXRlSlNPTikge1xuICAgICAgICAgIHBhcmFtcy5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnO1xuICAgICAgICAgIHBhcmFtcy5ib2R5ID0gcGFyYW1zLmpzb24gPyB7bW9kZWw6IHBhcmFtcy5qc29ufSA6IHt9O1xuICAgICAgICAgIGRlbGV0ZSBwYXJhbXMuanNvbjtcbiAgICAgIH1cblxuICAgICAgLy8gRm9yIG9sZGVyIHNlcnZlcnMsIGVtdWxhdGUgSFRUUCBieSBtaW1pY2tpbmcgdGhlIEhUVFAgbWV0aG9kIHdpdGggYF9tZXRob2RgXG4gICAgICAvLyBBbmQgYW4gYFgtSFRUUC1NZXRob2QtT3ZlcnJpZGVgIGhlYWRlci5cbiAgICAgIGlmIChvcHRpb25zLmVtdWxhdGVIVFRQICYmICh0eXBlID09PSAnUFVUJyB8fCB0eXBlID09PSAnREVMRVRFJyB8fCB0eXBlID09PSAnUEFUQ0gnKSkge1xuICAgICAgICAgIHBhcmFtcy50eXBlID0gJ1BPU1QnO1xuICAgICAgICAgIGlmIChvcHRpb25zLmVtdWxhdGVKU09OKSBwYXJhbXMuYm9keS5fbWV0aG9kID0gdHlwZTtcbiAgICAgICAgICBwYXJhbXMuaGVhZGVyc1sneC1odHRwLW1ldGhvZC1vdmVycmlkZSddID0gdHlwZTtcbiAgICAgIH1cblxuICAgICAgLy8gV2hlbiBlbXVsYXRpbmcgSlNPTiwgd2UgdHVybiB0aGUgYm9keSBpbnRvIGEgcXVlcnlzdHJpbmcuXG4gICAgICAvLyBXZSBkbyB0aGlzIGxhdGVyIHRvIGxldCB0aGUgZW11bGF0ZUhUVFAgcnVuIGl0cyBjb3Vyc2UuXG4gICAgICBpZiAob3B0aW9ucy5lbXVsYXRlSlNPTikge1xuICAgICAgICAgIHBhcmFtcy5ib2R5ID0gcXMuc3RyaW5naWZ5KHBhcmFtcy5ib2R5KTtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IHJhdyBYTUxIdHRwUmVxdWVzdCBvcHRpb25zLlxuICAgICAgaWYgKGFqYXhDb25maWcueGhyRmllbGRzKSB7XG4gICAgICAgICAgdmFyIGJlZm9yZVNlbmQgPSBhamF4Q29uZmlnLmJlZm9yZVNlbmQ7XG4gICAgICAgICAgcGFyYW1zLmJlZm9yZVNlbmQgPSBmdW5jdGlvbiAocmVxKSB7XG4gICAgICAgICAgICAgIGFzc2lnbihyZXEsIGFqYXhDb25maWcueGhyRmllbGRzKTtcbiAgICAgICAgICAgICAgaWYgKGJlZm9yZVNlbmQpIHJldHVybiBiZWZvcmVTZW5kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBwYXJhbXMueGhyRmllbGRzID0gYWpheENvbmZpZy54aHJGaWVsZHM7XG4gICAgICB9XG5cbiAgICAgIC8vIFR1cm4gYSBqUXVlcnkuYWpheCBmb3JtYXR0ZWQgcmVxdWVzdCBpbnRvIHhociBjb21wYXRpYmxlXG4gICAgICBwYXJhbXMubWV0aG9kID0gcGFyYW1zLnR5cGU7XG5cbiAgICAgIHZhciBhamF4U2V0dGluZ3MgPSBhc3NpZ24ocGFyYW1zLCBvcHRpb25zKTtcblxuICAgICAgLy8gTWFrZSB0aGUgcmVxdWVzdC4gVGhlIGNhbGxiYWNrIGV4ZWN1dGVzIGZ1bmN0aW9ucyB0aGF0IGFyZSBjb21wYXRpYmxlXG4gICAgICAvLyBXaXRoIGpRdWVyeS5hamF4J3Mgc3ludGF4LlxuICAgICAgdmFyIHJlcXVlc3QgPSBvcHRpb25zLnhockltcGxlbWVudGF0aW9uKGFqYXhTZXR0aW5ncywgZnVuY3Rpb24gKGVyciwgcmVzcCwgYm9keSkge1xuICAgICAgICAgIGlmIChlcnIgfHwgcmVzcC5zdGF0dXNDb2RlID49IDQwMCkge1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gSlNPTi5wYXJzZShib2R5KTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSl7fVxuICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSAoZXJyPyBlcnIubWVzc2FnZSA6IChib2R5IHx8IFwiSFRUUFwiK3Jlc3Auc3RhdHVzQ29kZSkpO1xuICAgICAgICAgICAgICAgICAgb3B0aW9ucy5lcnJvcihyZXNwLCAnZXJyb3InLCBtZXNzYWdlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFBhcnNlIGJvZHkgYXMgSlNPTlxuICAgICAgICAgICAgICB2YXIgYWNjZXB0ID0gbWVkaWFUeXBlLmZyb21TdHJpbmcocGFyYW1zLmhlYWRlcnMuYWNjZXB0KTtcbiAgICAgICAgICAgICAgdmFyIHBhcnNlSnNvbiA9IGFjY2VwdC5pc1ZhbGlkKCkgJiYgYWNjZXB0LnR5cGUgPT09ICdhcHBsaWNhdGlvbicgJiYgKGFjY2VwdC5zdWJ0eXBlID09PSAnanNvbicgfHwgYWNjZXB0LnN1ZmZpeCA9PT0gJ2pzb24nKTtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyAmJiBib2R5ICE9PSAnJyAmJiAoIXBhcmFtcy5oZWFkZXJzLmFjY2VwdCB8fCBwYXJzZUpzb24pKSB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSBKU09OLnBhcnNlKGJvZHkpO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZXJyb3IpIG9wdGlvbnMuZXJyb3IocmVzcCwgJ2Vycm9yJywgZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFsd2F5cykgb3B0aW9ucy5hbHdheXMoZXJyLCByZXNwLCBib2R5KTtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3VjY2Vzcykgb3B0aW9ucy5zdWNjZXNzKGJvZHksICdzdWNjZXNzJywgcmVzcCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRpb25zLmFsd2F5cykgb3B0aW9ucy5hbHdheXMoZXJyLCByZXNwLCBib2R5KTtcbiAgICAgIH0pO1xuICAgICAgaWYgKG1vZGVsKSBtb2RlbC50cmlnZ2VyKCdyZXF1ZXN0JywgbW9kZWwsIHJlcXVlc3QsIG9wdGlvbnNJbnB1dCwgYWpheFNldHRpbmdzKTtcbiAgICAgIHJlcXVlc3QuYWpheFNldHRpbmdzID0gYWpheFNldHRpbmdzO1xuICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gIH07XG59O1xuIiwiLyokQU1QRVJTQU5EX1ZFUlNJT04qL1xuZnVuY3Rpb24gVmlld1N3aXRjaGVyKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zIHx8IChvcHRpb25zID0ge30pO1xuICAgIHRoaXMuZWwgPSBvcHRpb25zLmVsO1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgICBoaWRlOiBudWxsLFxuICAgICAgICBzaG93OiBudWxsLFxuICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgcHJlcGVuZDogZmFsc2UsXG4gICAgICAgIHdhaXRGb3JSZW1vdmU6IGZhbHNlLFxuICAgICAgICBhdXRvUmVuZGVyOiB0cnVlXG4gICAgfTtcbiAgICBmb3IgKHZhciBpdGVtIGluIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmhhc093blByb3BlcnR5KGl0ZW0pKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ1tpdGVtXSA9IG9wdGlvbnNbaXRlbV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdGhpcy5fc2V0Q3VycmVudChvcHRpb25zLnZpZXcpO1xuICAgIGlmICh0aGlzLmNvbmZpZy5hdXRvUmVuZGVyKSB0aGlzLnJlbmRlcigpO1xufVxuXG5WaWV3U3dpdGNoZXIucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBwcmV2ID0gdGhpcy5wcmV2aW91cyA9IHRoaXMuY3VycmVudDtcblxuICAgIGlmIChwcmV2ID09PSB2aWV3KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcud2FpdEZvclJlbW92ZSkge1xuICAgICAgICB0aGlzLm5leHQgPSB2aWV3O1xuICAgICAgICB0aGlzLl9oaWRlKHByZXYsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLm5leHQgPT09IHZpZXcpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgc2VsZi5uZXh0O1xuICAgICAgICAgICAgICAgIHNlbGYuX3Nob3codmlldyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2hpZGUocHJldik7XG4gICAgICAgIHRoaXMuX3Nob3codmlldyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuVmlld1N3aXRjaGVyLnByb3RvdHlwZS5fc2V0Q3VycmVudCA9IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgdGhpcy5jdXJyZW50ID0gdmlldztcbiAgICBpZiAodmlldykgdGhpcy5fcmVnaXN0ZXJSZW1vdmVMaXN0ZW5lcih2aWV3KTtcbiAgICB2YXIgZW1wdHlDYiA9IHRoaXMuY29uZmlnLmVtcHR5O1xuICAgIGlmIChlbXB0eUNiICYmICF0aGlzLmN1cnJlbnQpIHtcbiAgICAgICAgZW1wdHlDYigpO1xuICAgIH1cbiAgICByZXR1cm4gdmlldztcbn07XG5cblZpZXdTd2l0Y2hlci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB0aGlzLl9oaWRlKHRoaXMuY3VycmVudCwgY2IpO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLy8gSWYgdGhlIHZpZXcgc3dpdGNoZXIgaXRzZWxmIGlzIHJlbW92ZWQsIHJlbW92ZSBpdHMgY2hpbGQgdG8gYXZvaWQgbWVtb3J5IGxlYWtzXG5WaWV3U3dpdGNoZXIucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50KSB0aGlzLmN1cnJlbnQucmVtb3ZlKCk7XG4gICAgaWYgKHRoaXMucHJldmlvdXMpIHRoaXMucHJldmlvdXMucmVtb3ZlKCk7XG4gICAgaWYgKHRoaXMuZWwgJiYgdGhpcy5lbC5wYXJlbnROb2RlKSB0aGlzLmVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5lbCk7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5WaWV3U3dpdGNoZXIucHJvdG90eXBlLl9zaG93ID0gZnVuY3Rpb24gKHZpZXcpIHtcbiAgICB2YXIgY3VzdG9tU2hvdyA9IHRoaXMuY29uZmlnLnNob3c7XG4gICAgdGhpcy5fc2V0Q3VycmVudCh2aWV3KTtcbiAgICB0aGlzLl9yZW5kZXIodmlldyk7XG4gICAgaWYgKGN1c3RvbVNob3cpIGN1c3RvbVNob3codmlldyk7XG59O1xuXG5WaWV3U3dpdGNoZXIucHJvdG90eXBlLl9yZWdpc3RlclJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKHZpZXcpIHtcbiAgICBpZiAodmlldyAmJiB2aWV3Lm9uY2UpIHZpZXcub25jZSgncmVtb3ZlJywgdGhpcy5fb25WaWV3UmVtb3ZlLCB0aGlzKTtcbn07XG5cblZpZXdTd2l0Y2hlci5wcm90b3R5cGUuX29uVmlld1JlbW92ZSA9IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgdmFyIGVtcHR5Q2IgPSB0aGlzLmNvbmZpZy5lbXB0eTtcbiAgICBpZiAodGhpcy5jdXJyZW50ID09PSB2aWV3KSB7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICAgIGlmIChlbXB0eUNiICYmICF0aGlzLmN1cnJlbnQpIHtcbiAgICAgICAgZW1wdHlDYigpO1xuICAgIH1cbn07XG5cblZpZXdTd2l0Y2hlci5wcm90b3R5cGUuX3JlbmRlciA9IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgaWYgKCF0aGlzLmVsKSByZXR1cm47XG4gICAgaWYgKCF2aWV3LnJlbmRlcmVkKSB2aWV3LnJlbmRlcih7Y29udGFpbmVyRWw6IHRoaXMuZWx9KTtcbiAgICBpZiAoIXZpZXcuaW5zZXJ0U2VsZikge1xuICAgICAgICBpZiAodGhpcy5jb25maWcucHJlcGVuZCkge1xuICAgICAgICAgICAgdGhpcy5lbC5pbnNlcnRCZWZvcmUodmlldy5lbCwgdGhpcy5lbC5maXJzdENoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZWwuYXBwZW5kQ2hpbGQodmlldy5lbCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5WaWV3U3dpdGNoZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50ICYmICF0aGlzLl9yZW5kZXJlZCkge1xuICAgICAgICB0aGlzLl9yZW5kZXIodGhpcy5jdXJyZW50KTtcbiAgICB9XG4gICAgLy9zZXQgcmVuZGVyZWQsIGVsIGV4aXN0cyBldmVuIGlmIGEgY3VycmVudCB2aWV3IHdhcyBub3QgaW5zZXJ0ZWQvYXBwZW5kZWRcbiAgICB0aGlzLl9yZW5kZXJlZCA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5WaWV3U3dpdGNoZXIucHJvdG90eXBlLl9oaWRlID0gZnVuY3Rpb24gKHZpZXcsIGNiKSB7XG4gICAgdmFyIGN1c3RvbUhpZGUgPSB0aGlzLmNvbmZpZy5oaWRlO1xuICAgIGlmICghdmlldykgcmV0dXJuIGNiICYmIGNiKCk7XG4gICAgaWYgKGN1c3RvbUhpZGUpIHtcbiAgICAgICAgaWYgKGN1c3RvbUhpZGUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBjdXN0b21IaWRlKHZpZXcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2aWV3LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChjYikgY2IoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3VzdG9tSGlkZSh2aWV3KTtcbiAgICAgICAgICAgIHZpZXcucmVtb3ZlKCk7XG4gICAgICAgICAgICBpZiAoY2IpIGNiKCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB2aWV3LnJlbW92ZSgpO1xuICAgICAgICBpZiAoY2IpIGNiKCk7XG4gICAgfVxufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IFZpZXdTd2l0Y2hlcjtcbiIsIi8qJEFNUEVSU0FORF9WRVJTSU9OKi9cbnZhciBTdGF0ZSA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1zdGF0ZScpO1xudmFyIENvbGxlY3Rpb25WaWV3ID0gcmVxdWlyZSgnYW1wZXJzYW5kLWNvbGxlY3Rpb24tdmlldycpO1xudmFyIGRvbWlmeSA9IHJlcXVpcmUoJ2RvbWlmeScpO1xudmFyIHVuaXF1ZUlkID0gcmVxdWlyZShcImxvZGFzaC91bmlxdWVJZFwiKTtcbnZhciBwaWNrID0gcmVxdWlyZShcImxvZGFzaC9waWNrXCIpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCJsb2Rhc2gvYXNzaWduXCIpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKFwibG9kYXNoL2ZvckVhY2hcIik7XG52YXIgcmVzdWx0ID0gcmVxdWlyZShcImxvZGFzaC9yZXN1bHRcIik7XG52YXIgbGFzdCA9IHJlcXVpcmUoXCJsb2Rhc2gvbGFzdFwiKTtcbnZhciBpc1N0cmluZyA9IHJlcXVpcmUoXCJsb2Rhc2gvaXNTdHJpbmdcIik7XG52YXIgYmluZCA9IHJlcXVpcmUoXCJsb2Rhc2gvYmluZFwiKTtcbnZhciBmbGF0dGVuID0gcmVxdWlyZShcImxvZGFzaC9mbGF0dGVuXCIpO1xudmFyIGludm9rZU1hcCA9IHJlcXVpcmUoXCJsb2Rhc2gvaW52b2tlTWFwXCIpO1xudmFyIGV2ZW50cyA9IHJlcXVpcmUoJ2V2ZW50cy1taXhpbicpO1xudmFyIG1hdGNoZXMgPSByZXF1aXJlKCdtYXRjaGVzLXNlbGVjdG9yJyk7XG52YXIgYmluZGluZ3MgPSByZXF1aXJlKCdhbXBlcnNhbmQtZG9tLWJpbmRpbmdzJyk7XG52YXIgZ2V0UGF0aCA9IHJlcXVpcmUoJ2xvZGFzaC9nZXQnKTtcblxuZnVuY3Rpb24gVmlldyhhdHRycykge1xuICAgIHRoaXMuY2lkID0gdW5pcXVlSWQoJ3ZpZXcnKTtcbiAgICBhdHRycyB8fCAoYXR0cnMgPSB7fSk7XG4gICAgdmFyIHBhcmVudCA9IGF0dHJzLnBhcmVudDtcbiAgICBkZWxldGUgYXR0cnMucGFyZW50O1xuICAgIEJhc2VTdGF0ZS5jYWxsKHRoaXMsIGF0dHJzLCB7aW5pdDogZmFsc2UsIHBhcmVudDogcGFyZW50fSk7XG4gICAgdGhpcy5vbignY2hhbmdlOmVsJywgdGhpcy5faGFuZGxlRWxlbWVudENoYW5nZSwgdGhpcyk7XG4gICAgdGhpcy5fdXBzZXJ0QmluZGluZ3MoKTtcbiAgICB0aGlzLnRlbXBsYXRlID0gYXR0cnMudGVtcGxhdGUgfHwgdGhpcy50ZW1wbGF0ZTtcbiAgICB0aGlzLl9jYWNoZS5yZW5kZXJlZCA9IGZhbHNlOyAvLyBwcmVwIGByZW5kZXJlZGAgZGVyaXZlZCBjYWNoZSBpbW1lZGlhdGVseVxuICAgIHRoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh0aGlzLmF1dG9SZW5kZXIgJiYgdGhpcy50ZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cbn1cblxudmFyIEJhc2VTdGF0ZSA9IFN0YXRlLmV4dGVuZCh7XG4gICAgZGF0YVR5cGVzOiB7XG4gICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ZhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbDogbmV3VmFsLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBuZXdWYWwgaW5zdGFuY2VvZiBFbGVtZW50ID8gJ2VsZW1lbnQnIDogdHlwZW9mIG5ld1ZhbFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGFyZTogZnVuY3Rpb24gKGVsMSwgZWwyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsMSA9PT0gZWwyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb2xsZWN0aW9uOiB7XG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdWYWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB2YWw6IG5ld1ZhbCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogbmV3VmFsICYmIG5ld1ZhbC5pc0NvbGxlY3Rpb24gPyAnY29sbGVjdGlvbicgOiB0eXBlb2YgbmV3VmFsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wYXJlOiBmdW5jdGlvbiAoY3VycmVudFZhbCwgbmV3VmFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRWYWwgPT09IG5ld1ZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgbW9kZWw6ICdzdGF0ZScsXG4gICAgICAgIGVsOiAnZWxlbWVudCcsXG4gICAgICAgIGNvbGxlY3Rpb246ICdjb2xsZWN0aW9uJyxcbiAgICB9LFxuICAgIHNlc3Npb246IHtcbiAgICAgICAgX3JlbmRlcmVkOiBbJ2Jvb2xlYW4nLCB0cnVlLCBmYWxzZV1cbiAgICB9LFxuICAgIGRlcml2ZWQ6IHtcbiAgICAgICAgaGFzRGF0YToge1xuICAgICAgICAgICAgZGVwczogWydtb2RlbCddLFxuICAgICAgICAgICAgZm46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISF0aGlzLm1vZGVsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZW5kZXJlZDoge1xuICAgICAgICAgICAgZGVwczogWydfcmVuZGVyZWQnXSxcbiAgICAgICAgICAgIGZuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmVuZGVyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdyZW5kZXInLCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcigncmVtb3ZlJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cblZpZXcucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlU3RhdGUucHJvdG90eXBlKTtcblxudmFyIHF1ZXJ5Tm9FbE1zZyA9ICdRdWVyeSBjYW5ub3QgYmUgcGVyZm9ybWVkIGFzIHRoaXMuZWwgaXMgbm90IGRlZmluZWQuIEVuc3VyZSB0aGF0IHRoZSB2aWV3IGhhcyBiZWVuIHJlbmRlcmVkLic7XG5cbi8vIFNldCB1cCBhbGwgaW5oZXJpdGFibGUgcHJvcGVydGllcyBhbmQgbWV0aG9kcy5cbmFzc2lnbihWaWV3LnByb3RvdHlwZSwge1xuICAgIC8vICMjIHF1ZXJ5XG4gICAgLy8gR2V0IGFuIHNpbmdsZSBlbGVtZW50IGJhc2VkIG9uIENTUyBzZWxlY3RvciBzY29wZWQgdG8gdGhpcy5lbFxuICAgIC8vIGlmIHlvdSBwYXNzIGFuIGVtcHR5IHN0cmluZyBpdCByZXR1cm4gYHRoaXMuZWxgLlxuICAgIC8vIElmIHlvdSBwYXNzIGFuIGVsZW1lbnQgd2UganVzdCByZXR1cm4gaXQgYmFjay5cbiAgICAvLyBUaGlzIGxldHMgdXMgdXNlIGBnZXRgIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB1c2Vyc1xuICAgIC8vIGNhbiBwYXNzIGEgc2VsZWN0b3Igb3IgYW4gYWxyZWFkeSBzZWxlY3RlZCBlbGVtZW50LlxuICAgIHF1ZXJ5OiBmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocXVlcnlOb0VsTXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNlbGVjdG9yKSByZXR1cm4gdGhpcy5lbDtcbiAgICAgICAgaWYgKHR5cGVvZiBzZWxlY3RvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmIChtYXRjaGVzKHRoaXMuZWwsIHNlbGVjdG9yKSkgcmV0dXJuIHRoaXMuZWw7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKSB8fCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yO1xuICAgIH0sXG5cbiAgICAvLyAjIyBxdWVyeUFsbFxuICAgIC8vIFJldHVybnMgYW4gYXJyYXkgb2YgZWxlbWVudHMgYmFzZWQgb24gQ1NTIHNlbGVjdG9yIHNjb3BlZCB0byB0aGlzLmVsXG4gICAgLy8gaWYgeW91IHBhc3MgYW4gZW1wdHkgc3RyaW5nIGl0IHJldHVybiBgdGhpcy5lbGAuIEFsc28gaW5jbHVkZXMgcm9vdFxuICAgIC8vIGVsZW1lbnQuXG4gICAgcXVlcnlBbGw6IGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgICAgICBpZiAoIXRoaXMuZWwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihxdWVyeU5vRWxNc2cpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2VsZWN0b3IpIHJldHVybiBbdGhpcy5lbF07XG4gICAgICAgIHZhciByZXMgPSBbXTtcbiAgICAgICAgaWYgKG1hdGNoZXModGhpcy5lbCwgc2VsZWN0b3IpKSByZXMucHVzaCh0aGlzLmVsKTtcbiAgICAgICAgcmV0dXJuIHJlcy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5lbC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkpO1xuICAgIH0sXG5cbiAgICAvLyAjIyBxdWVyeUJ5SG9va1xuICAgIC8vIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgZmV0Y2hpbmcgZWxlbWVudCBieSBpdCdzIGBkYXRhLWhvb2tgIGF0dHJpYnV0ZS5cbiAgICAvLyBBbHNvIHRyaWVzIHRvIG1hdGNoIGFnYWluc3Qgcm9vdCBlbGVtZW50LlxuICAgIC8vIEFsc28gc3VwcG9ydHMgbWF0Y2hpbmcgJ29uZScgb2Ygc2V2ZXJhbCBzcGFjZSBzZXBhcmF0ZWQgaG9va3MuXG4gICAgcXVlcnlCeUhvb2s6IGZ1bmN0aW9uIChob29rKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5KCdbZGF0YS1ob29rfj1cIicgKyBob29rICsgJ1wiXScpO1xuICAgIH0sXG5cbiAgICAvLyAjIyBxdWVyeUFsbEJ5SG9va1xuICAgIC8vIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgZmV0Y2hpbmcgYWxsIGVsZW1lbnRzIGJ5IHRoZWlyJ3MgYGRhdGEtaG9va2AgYXR0cmlidXRlLlxuICAgIHF1ZXJ5QWxsQnlIb29rOiBmdW5jdGlvbiAoaG9vaykge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVyeUFsbCgnW2RhdGEtaG9va349XCInICsgaG9vayArICdcIl0nKTtcbiAgICB9LFxuXG4gICAgLy8gSW5pdGlhbGl6ZSBpcyBhbiBlbXB0eSBmdW5jdGlvbiBieSBkZWZhdWx0LiBPdmVycmlkZSBpdCB3aXRoIHlvdXIgb3duXG4gICAgLy8gaW5pdGlhbGl6YXRpb24gbG9naWMuXG4gICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKCkge30sXG5cbiAgICAvLyAqKnJlbmRlcioqIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIHRoYXQgeW91ciB2aWV3IGNhbiBvdmVycmlkZS4gSXRzIGpvYiBpc1xuICAgIC8vIHRvIHBvcHVsYXRlIGl0cyBlbGVtZW50IChgdGhpcy5lbGApLCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBIVE1MLlxuICAgIF9yZW5kZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fdXBzZXJ0QmluZGluZ3MoKTtcbiAgICAgICAgdGhpcy5yZW5kZXJXaXRoVGVtcGxhdGUodGhpcyk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8vIFJlbW92ZXMgdGhpcyB2aWV3IGJ5IHRha2luZyB0aGUgZWxlbWVudCBvdXQgb2YgdGhlIERPTSwgYW5kIHJlbW92aW5nIGFueVxuICAgIC8vIGFwcGxpY2FibGUgZXZlbnRzIGxpc3RlbmVycy5cbiAgICBfcmVtb3ZlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmVsICYmIHRoaXMuZWwucGFyZW50Tm9kZSkgdGhpcy5lbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWwpO1xuICAgICAgICB0aGlzLl9yZW5kZXJlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9kb3duc2VydEJpbmRpbmdzKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyBDaGFuZ2UgdGhlIHZpZXcncyBlbGVtZW50IChgdGhpcy5lbGAgcHJvcGVydHkpLCBpbmNsdWRpbmcgZXZlbnRcbiAgICAvLyByZS1kZWxlZ2F0aW9uLlxuICAgIF9oYW5kbGVFbGVtZW50Q2hhbmdlOiBmdW5jdGlvbiAoZWxlbWVudCwgZGVsZWdhdGUpIHtcbiAgICAgICAgaWYgKHRoaXMuZXZlbnRNYW5hZ2VyKSB0aGlzLmV2ZW50TWFuYWdlci51bmJpbmQoKTtcbiAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIgPSBldmVudHModGhpcy5lbCwgdGhpcyk7XG4gICAgICAgIHRoaXMuZGVsZWdhdGVFdmVudHMoKTtcbiAgICAgICAgdGhpcy5fYXBwbHlCaW5kaW5nc0ZvcktleSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLy8gU2V0IGNhbGxiYWNrcywgd2hlcmUgYHRoaXMuZXZlbnRzYCBpcyBhIGhhc2ggb2ZcbiAgICAvL1xuICAgIC8vICp7XCJldmVudCBzZWxlY3RvclwiOiBcImNhbGxiYWNrXCJ9KlxuICAgIC8vXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICAnbW91c2Vkb3duIC50aXRsZSc6ICAnZWRpdCcsXG4gICAgLy8gICAgICAgJ2NsaWNrIC5idXR0b24nOiAgICAgJ3NhdmUnLFxuICAgIC8vICAgICAgICdjbGljayAub3Blbic6ICAgICAgIGZ1bmN0aW9uIChlKSB7IC4uLiB9XG4gICAgLy8gICAgIH1cbiAgICAvL1xuICAgIC8vIHBhaXJzLiBDYWxsYmFja3Mgd2lsbCBiZSBib3VuZCB0byB0aGUgdmlldywgd2l0aCBgdGhpc2Agc2V0IHByb3Blcmx5LlxuICAgIC8vIFVzZXMgZXZlbnQgZGVsZWdhdGlvbiBmb3IgZWZmaWNpZW5jeS5cbiAgICAvLyBPbWl0dGluZyB0aGUgc2VsZWN0b3IgYmluZHMgdGhlIGV2ZW50IHRvIGB0aGlzLmVsYC5cbiAgICAvLyBUaGlzIG9ubHkgd29ya3MgZm9yIGRlbGVnYXRlLWFibGUgZXZlbnRzOiBub3QgYGZvY3VzYCwgYGJsdXJgLCBhbmRcbiAgICAvLyBub3QgYGNoYW5nZWAsIGBzdWJtaXRgLCBhbmQgYHJlc2V0YCBpbiBJbnRlcm5ldCBFeHBsb3Jlci5cbiAgICBkZWxlZ2F0ZUV2ZW50czogZnVuY3Rpb24gKGV2ZW50cykge1xuICAgICAgICBpZiAoIShldmVudHMgfHwgKGV2ZW50cyA9IHJlc3VsdCh0aGlzLCAnZXZlbnRzJykpKSkgcmV0dXJuIHRoaXM7XG4gICAgICAgIHRoaXMudW5kZWxlZ2F0ZUV2ZW50cygpO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gZXZlbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50TWFuYWdlci5iaW5kKGtleSwgZXZlbnRzW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyBDbGVhcnMgYWxsIGNhbGxiYWNrcyBwcmV2aW91c2x5IGJvdW5kIHRvIHRoZSB2aWV3IHdpdGggYGRlbGVnYXRlRXZlbnRzYC5cbiAgICAvLyBZb3UgdXN1YWxseSBkb24ndCBuZWVkIHRvIHVzZSB0aGlzLCBidXQgbWF5IHdpc2ggdG8gaWYgeW91IGhhdmUgbXVsdGlwbGVcbiAgICAvLyBCYWNrYm9uZSB2aWV3cyBhdHRhY2hlZCB0byB0aGUgc2FtZSBET00gZWxlbWVudC5cbiAgICB1bmRlbGVnYXRlRXZlbnRzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLnVuYmluZCgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLy8gIyMgcmVnaXN0ZXJTdWJ2aWV3XG4gICAgLy8gUGFzcyBpdCBhIHZpZXcuIFRoaXMgY2FuIGJlIGFueXRoaW5nIHdpdGggYSBgcmVtb3ZlYCBtZXRob2RcbiAgICByZWdpc3RlclN1YnZpZXc6IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgICAgIC8vIFN0b3JhZ2UgZm9yIG91ciBzdWJ2aWV3cy5cbiAgICAgICAgdGhpcy5fc3Vidmlld3MgPSB0aGlzLl9zdWJ2aWV3cyB8fCBbXTtcbiAgICAgICAgdGhpcy5fc3Vidmlld3MucHVzaCh2aWV3KTtcbiAgICAgICAgLy8gc2V0IHRoZSBwYXJlbnQgcmVmZXJlbmNlIGlmIGl0IGhhcyBub3QgYmVlbiBzZXRcbiAgICAgICAgaWYgKCF2aWV3LnBhcmVudCkgdmlldy5wYXJlbnQgPSB0aGlzO1xuICAgICAgICByZXR1cm4gdmlldztcbiAgICB9LFxuXG4gICAgLy8gIyMgcmVuZGVyU3Vidmlld1xuICAgIC8vIFBhc3MgaXQgYSB2aWV3IGluc3RhbmNlIGFuZCBhIGNvbnRhaW5lciBlbGVtZW50XG4gICAgLy8gdG8gcmVuZGVyIGl0IGluLiBJdCdzIGByZW1vdmVgIG1ldGhvZCB3aWxsIGJlIGNhbGxlZFxuICAgIC8vIHdoZW4gdGhlIHBhcmVudCB2aWV3IGlzIGRlc3Ryb3llZC5cbiAgICByZW5kZXJTdWJ2aWV3OiBmdW5jdGlvbiAodmlldywgY29udGFpbmVyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29udGFpbmVyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29udGFpbmVyID0gdGhpcy5xdWVyeShjb250YWluZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29udGFpbmVyKSBjb250YWluZXIgPSB0aGlzLmVsO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyU3Vidmlldyh2aWV3KTtcbiAgICAgICAgdmlldy5yZW5kZXIoKTtcbiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHZpZXcuZWwpO1xuICAgICAgICByZXR1cm4gdmlldztcbiAgICB9LFxuXG4gICAgX2FwcGx5QmluZGluZ3NGb3JLZXk6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIGlmICghdGhpcy5lbCkgcmV0dXJuO1xuICAgICAgICB2YXIgZm5zID0gdGhpcy5fcGFyc2VkQmluZGluZ3MuZ2V0R3JvdXBlZChuYW1lKTtcbiAgICAgICAgdmFyIGl0ZW07XG4gICAgICAgIGZvciAoaXRlbSBpbiBmbnMpIHtcbiAgICAgICAgICAgIGZuc1tpdGVtXS5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKHRoaXMuZWwsIGdldFBhdGgodGhpcywgaXRlbSksIGxhc3QoaXRlbS5zcGxpdCgnLicpKSk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdGlhbGl6ZUJpbmRpbmdzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5iaW5kaW5ncykgcmV0dXJuO1xuICAgICAgICB0aGlzLm9uKCdhbGwnLCBmdW5jdGlvbiAoZXZlbnROYW1lKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnROYW1lLnNsaWNlKDAsIDcpID09PSAnY2hhbmdlOicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBseUJpbmRpbmdzRm9yS2V5KGV2ZW50TmFtZS5zcGxpdCgnOicpWzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfSxcblxuICAgIC8vICMjIF9pbml0aWFsaXplU3Vidmlld3NcbiAgICAvLyB0aGlzIGlzIGNhbGxlZCBhdCBzZXR1cCBhbmQgZ3JhYnMgZGVjbGFyZWQgc3Vidmlld3NcbiAgICBfaW5pdGlhbGl6ZVN1YnZpZXdzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5zdWJ2aWV3cykgcmV0dXJuO1xuICAgICAgICBmb3IgKHZhciBpdGVtIGluIHRoaXMuc3Vidmlld3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcnNlU3Vidmlldyh0aGlzLnN1YnZpZXdzW2l0ZW1dLCBpdGVtKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyAjIyBfcGFyc2VTdWJ2aWV3XG4gICAgLy8gaGVscGVyIGZvciBwYXJzaW5nIG91dCB0aGUgc3VidmlldyBkZWNsYXJhdGlvbiBhbmQgcmVnaXN0ZXJpbmdcbiAgICAvLyB0aGUgYHdhaXRGb3JgIGlmIG5lZWQgYmUuXG4gICAgX3BhcnNlU3VidmlldzogZnVuY3Rpb24gKHN1YnZpZXcsIG5hbWUpIHtcbiAgICAgICAgLy9iYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zLCB3aGVuIGBjb250YWluZXJgIHdhcyBhIHZhbGlkIHByb3BlcnR5ICgjMTE0KVxuICAgICAgICBpZiAoc3Vidmlldy5jb250YWluZXIpIHtcbiAgICAgICAgICAgIHN1YnZpZXcuc2VsZWN0b3IgPSBzdWJ2aWV3LmNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb3B0cyA9IHRoaXMuX3BhcnNlU3Vidmlld09wdHMoc3Vidmlldyk7XG5cbiAgICAgICAgZnVuY3Rpb24gYWN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGVsLCBzdWJ2aWV3O1xuICAgICAgICAgICAgLy8gaWYgbm90IHJlbmRlcmVkIG9yIHdlIGNhbid0IGZpbmQgb3VyIGVsZW1lbnQsIHN0b3AgaGVyZS5cbiAgICAgICAgICAgIGlmICghdGhpcy5lbCB8fCAhKGVsID0gdGhpcy5xdWVyeShvcHRzLnNlbGVjdG9yKSkpIHJldHVybjtcbiAgICAgICAgICAgIGlmICghb3B0cy53YWl0Rm9yIHx8IGdldFBhdGgodGhpcywgb3B0cy53YWl0Rm9yKSkge1xuICAgICAgICAgICAgICAgIHN1YnZpZXcgPSB0aGlzW25hbWVdID0gb3B0cy5wcmVwYXJlVmlldy5jYWxsKHRoaXMsIGVsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXN1YnZpZXcuZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJTdWJ2aWV3KHN1YnZpZXcsIGVsKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdWJ2aWV3LnJlbmRlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyU3VidmlldyhzdWJ2aWV3KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoJ2NoYW5nZScsIGFjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2UgbGlzdGVuIGZvciBtYWluIGBjaGFuZ2VgIGl0ZW1zXG4gICAgICAgIHRoaXMub24oJ2NoYW5nZScsIGFjdGlvbiwgdGhpcyk7XG4gICAgfSxcblxuICAgIC8vIFBhcnNlcyB0aGUgZGVjbGFyYXRpdmUgc3VidmlldyBkZWZpbml0aW9uLlxuICAgIC8vIFlvdSBtYXkgb3ZlcmxvYWQgdGhpcyBtZXRob2QgdG8gY3JlYXRlIHlvdXIgb3duIGRlY2xhcmF0aXZlIHN1YnZpZXcgc3R5bGUuXG4gICAgLy8gWW91IG11c3QgcmV0dXJuIGFuIG9iamVjdCB3aXRoIG1lbWJlcnMgJ3NlbGVjdG9yJywgJ3dhaXRGb3InIGFuZCAncHJlcGFyZVZpZXcnLlxuICAgIC8vIHdhaXRGb3IgaXMgdHJpZ2dlZCBvbiB0aGUgdmlldyAnY2hhbmdlJyBldmVudCBhbmQgc28gb25lIHdheSB0byBleHRlbmQgdGhlIGRlZmVycmVkIHZpZXdcbiAgICAvLyBjb25zdHJ1Y3Rpb24gaXMgdG8gYWRkIGFuIGFkZGl0aW9uYWwgcHJvcGVydHkgKHByb3BzKSB0byB0aGUgdmlldy4gVGhlbiBzZXR0aW5nIHRoaXMgcHJvcGVydHlcbiAgICAvLyB3aWxsIHNhdGlzZnkgdGhlIHdhaXRGb3IgY29uZGl0aW9uLiBZb3UgY2FuIHRoZW4gZXh0ZW5kIHRoZSBwcmVwYXJlVmlldyBmdW5jdGlvbiB0byBwYXNzIGluXG4gICAgLy8gYWRkaXRpb25hbCBkYXRhIGZyb20gdGhlIHBhcmVudCB2aWV3LiBUaGlzIGNhbiBhbGxvdyB5b3UgdG8gaGF2ZSBtdWx0aS1zdGFnZSByZW5kZXJpbmcgb2ZcbiAgICAvLyBjdXN0b20gZGF0YSBmb3JtYXRzIGFuZCB0byBkZWNsYXJhdGl2ZWx5IGRlZmluZS5cbiAgICBfcGFyc2VTdWJ2aWV3T3B0czogZnVuY3Rpb24gKHN1YnZpZXcpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB2YXIgb3B0cyA9IHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiBzdWJ2aWV3LnNlbGVjdG9yIHx8ICdbZGF0YS1ob29rPVwiJyArIHN1YnZpZXcuaG9vayArICdcIl0nLFxuICAgICAgICAgICAgd2FpdEZvcjogc3Vidmlldy53YWl0Rm9yIHx8ICcnLFxuICAgICAgICAgICAgcHJlcGFyZVZpZXc6IHN1YnZpZXcucHJlcGFyZVZpZXcgfHwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgc3Vidmlldy5jb25zdHJ1Y3Rvcih7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogc2VsZlxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gb3B0cztcbiAgICB9LFxuXG4gICAgLy8gU2hvcnRjdXQgZm9yIGRvaW5nIGV2ZXJ5dGhpbmcgd2UgbmVlZCB0byBkbyB0b1xuICAgIC8vIHJlbmRlciBhbmQgZnVsbHkgcmVwbGFjZSBjdXJyZW50IHJvb3QgZWxlbWVudC5cbiAgICAvLyBFaXRoZXIgZGVmaW5lIGEgYHRlbXBsYXRlYCBwcm9wZXJ0eSBvZiB5b3VyIHZpZXdcbiAgICAvLyBvciBwYXNzIGluIGEgdGVtcGxhdGUgZGlyZWN0bHkuXG4gICAgLy8gVGhlIHRlbXBsYXRlIGNhbiBlaXRoZXIgYmUgYSBzdHJpbmcgb3IgYSBmdW5jdGlvbi5cbiAgICAvLyBJZiBpdCdzIGEgZnVuY3Rpb24gaXQgd2lsbCBiZSBwYXNzZWQgdGhlIGBjb250ZXh0YFxuICAgIC8vIGFyZ3VtZW50LlxuICAgIHJlbmRlcldpdGhUZW1wbGF0ZTogZnVuY3Rpb24gKGNvbnRleHQsIHRlbXBsYXRlQXJnKSB7XG4gICAgICAgIHZhciB0ZW1wbGF0ZSA9IHRlbXBsYXRlQXJnIHx8IHRoaXMudGVtcGxhdGU7XG4gICAgICAgIGlmICghdGVtcGxhdGUpIHRocm93IG5ldyBFcnJvcignVGVtcGxhdGUgc3RyaW5nIG9yIGZ1bmN0aW9uIG5lZWRlZC4nKTtcbiAgICAgICAgdmFyIG5ld0RvbSA9IGlzU3RyaW5nKHRlbXBsYXRlKSA/IHRlbXBsYXRlIDogdGVtcGxhdGUuY2FsbCh0aGlzLCBjb250ZXh0IHx8IHRoaXMpO1xuICAgICAgICBpZiAoaXNTdHJpbmcobmV3RG9tKSkgbmV3RG9tID0gZG9taWZ5KG5ld0RvbSk7XG4gICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLmVsICYmIHRoaXMuZWwucGFyZW50Tm9kZTtcbiAgICAgICAgaWYgKHBhcmVudCkgcGFyZW50LnJlcGxhY2VDaGlsZChuZXdEb20sIHRoaXMuZWwpO1xuICAgICAgICBpZiAobmV3RG9tLm5vZGVOYW1lID09PSAnI2RvY3VtZW50LWZyYWdtZW50JykgdGhyb3cgbmV3IEVycm9yKCdWaWV3cyBjYW4gb25seSBoYXZlIG9uZSByb290IGVsZW1lbnQsIGluY2x1ZGluZyBjb21tZW50IG5vZGVzLicpO1xuICAgICAgICB0aGlzLmVsID0gbmV3RG9tO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLy8gIyMgY2FjaGVFbGVtZW50c1xuICAgIC8vIFRoaXMgaXMgYSBzaG9ydGN1dCBmb3IgYWRkaW5nIHJlZmVyZW5jZSB0byBzcGVjaWZpYyBlbGVtZW50cyB3aXRoaW4geW91ciB2aWV3IGZvclxuICAgIC8vIGFjY2VzcyBsYXRlci4gVGhpcyBhdm9pZHMgZXhjZXNzaXZlIERPTSBxdWVyaWVzIGFuZCBtYWtlcyBpdCBlYXNpZXIgdG8gdXBkYXRlXG4gICAgLy8geW91ciB2aWV3IGlmIHlvdXIgdGVtcGxhdGUgY2hhbmdlcy5cbiAgICAvL1xuICAgIC8vIEluIHlvdXIgYHJlbmRlcmAgbWV0aG9kLiBVc2UgaXQgbGlrZSBzbzpcbiAgICAvL1xuICAgIC8vICAgICByZW5kZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAvLyAgICAgICB0aGlzLmJhc2ljUmVuZGVyKCk7XG4gICAgLy8gICAgICAgdGhpcy5jYWNoZUVsZW1lbnRzKHtcbiAgICAvLyAgICAgICAgIHBhZ2VzOiAnI3BhZ2VzJyxcbiAgICAvLyAgICAgICAgIGNoYXQ6ICcjdGVhbUNoYXQnLFxuICAgIC8vICAgICAgICAgbmF2OiAnbmF2I3ZpZXdzIHVsJyxcbiAgICAvLyAgICAgICAgIG1lOiAnI21lJyxcbiAgICAvLyAgICAgICAgIGNoZWF0U2hlZXQ6ICcjY2hlYXRTaGVldCcsXG4gICAgLy8gICAgICAgICBvbW5pQm94OiAnI2F3ZXNvbWVTYXVjZSdcbiAgICAvLyAgICAgICB9KTtcbiAgICAvLyAgICAgfVxuICAgIC8vXG4gICAgLy8gVGhlbiBsYXRlciB5b3UgY2FuIGFjY2VzcyBlbGVtZW50cyBieSByZWZlcmVuY2UgbGlrZSBzbzogYHRoaXMucGFnZXNgLCBvciBgdGhpcy5jaGF0YC5cbiAgICBjYWNoZUVsZW1lbnRzOiBmdW5jdGlvbiAoaGFzaCkge1xuICAgICAgICBmb3IgKHZhciBpdGVtIGluIGhhc2gpIHtcbiAgICAgICAgICAgIHRoaXNbaXRlbV0gPSB0aGlzLnF1ZXJ5KGhhc2hbaXRlbV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyAjIyBhbmltYXRlUmVtb3ZlXG4gICAgLy8gUGxhY2Vob2xkZXIgZm9yIGlmIHlvdSB3YW50IHRvIGRvIHNvbWV0aGluZyBzcGVjaWFsIHdoZW4gdGhleSdyZSByZW1vdmVkLlxuICAgIC8vIEZvciBleGFtcGxlIGZhZGUgaXQgb3V0LCBldGMuXG4gICAgLy8gQW55IG92ZXJyaWRlIGhlcmUgc2hvdWxkIGNhbGwgYC5yZW1vdmUoKWAgd2hlbiBkb25lLlxuICAgIGFuaW1hdGVSZW1vdmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5yZW1vdmUoKTtcbiAgICB9LFxuXG4gICAgLy8gIyMgcmVuZGVyQ29sbGVjdGlvblxuICAgIC8vIE1ldGhvZCBmb3IgcmVuZGVyaW5nIGEgY29sbGVjdGlvbnMgd2l0aCBpbmRpdmlkdWFsIHZpZXdzLlxuICAgIC8vIEp1c3QgcGFzcyBpdCB0aGUgY29sbGVjdGlvbiwgYW5kIHRoZSB2aWV3IHRvIHVzZSBmb3IgdGhlIGl0ZW1zIGluIHRoZVxuICAgIC8vIGNvbGxlY3Rpb24uIFRoZSBjb2xsZWN0aW9uVmlldyBpcyByZXR1cm5lZC5cbiAgICByZW5kZXJDb2xsZWN0aW9uOiBmdW5jdGlvbiAoY29sbGVjdGlvbiwgVmlld0NsYXNzLCBjb250YWluZXIsIG9wdHMpIHtcbiAgICAgICAgdmFyIGNvbnRhaW5lckVsID0gKHR5cGVvZiBjb250YWluZXIgPT09ICdzdHJpbmcnKSA/IHRoaXMucXVlcnkoY29udGFpbmVyKSA6IGNvbnRhaW5lcjtcbiAgICAgICAgdmFyIGNvbmZpZyA9IGFzc2lnbih7XG4gICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uLFxuICAgICAgICAgICAgZWw6IGNvbnRhaW5lckVsIHx8IHRoaXMuZWwsXG4gICAgICAgICAgICB2aWV3OiBWaWV3Q2xhc3MsXG4gICAgICAgICAgICBwYXJlbnQ6IHRoaXMsXG4gICAgICAgICAgICB2aWV3T3B0aW9uczoge1xuICAgICAgICAgICAgICAgIHBhcmVudDogdGhpc1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBvcHRzKTtcbiAgICAgICAgdmFyIGNvbGxlY3Rpb25WaWV3ID0gbmV3IENvbGxlY3Rpb25WaWV3KGNvbmZpZyk7XG4gICAgICAgIGNvbGxlY3Rpb25WaWV3LnJlbmRlcigpO1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RlclN1YnZpZXcoY29sbGVjdGlvblZpZXcpO1xuICAgIH0sXG5cbiAgICBfc2V0UmVuZGVyOiBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgJ3JlbmRlcicsIHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlcjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIF9zZXRSZW1vdmU6IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCAncmVtb3ZlJywge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVtb3ZlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIF9kb3duc2VydEJpbmRpbmdzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBhcnNlZEJpbmRpbmdzID0gdGhpcy5fcGFyc2VkQmluZGluZ3M7XG4gICAgICAgIGlmICghdGhpcy5iaW5kaW5nc1NldCkgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5fc3Vidmlld3Mpe1xuICAgICAgICAgIGludm9rZU1hcChmbGF0dGVuKHRoaXMuX3N1YnZpZXdzKSwgJ3JlbW92ZScpO1xuICAgICAgICAgIHRoaXMuX3N1YnZpZXdzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nKCk7XG4gICAgICAgIHRoaXMuYmluZGluZ3NTZXQgPSBmYWxzZTtcbiAgICB9LFxuXG4gICAgX3Vwc2VydEJpbmRpbmdzOiBmdW5jdGlvbihhdHRycykge1xuICAgICAgICBhdHRycyA9IGF0dHJzIHx8IHRoaXM7XG4gICAgICAgIGlmICh0aGlzLmJpbmRpbmdzU2V0KSByZXR1cm47XG4gICAgICAgIHRoaXMuX3BhcnNlZEJpbmRpbmdzID0gYmluZGluZ3ModGhpcy5iaW5kaW5ncywgdGhpcyk7XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVCaW5kaW5ncygpO1xuICAgICAgICBpZiAoYXR0cnMuZWwgJiYgIXRoaXMuYXV0b1JlbmRlcikge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlRWxlbWVudENoYW5nZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVTdWJ2aWV3cygpO1xuICAgICAgICB0aGlzLmJpbmRpbmdzU2V0ID0gdHJ1ZTtcbiAgICB9XG59KTtcblxuVmlldy5wcm90b3R5cGUuX3NldFJlbmRlcihWaWV3LnByb3RvdHlwZSk7XG5WaWV3LnByb3RvdHlwZS5fc2V0UmVtb3ZlKFZpZXcucHJvdG90eXBlKTtcblZpZXcuZXh0ZW5kID0gQmFzZVN0YXRlLmV4dGVuZDtcbm1vZHVsZS5leHBvcnRzID0gVmlldztcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYXJyYXlOZXh0KGFycmF5LCBjdXJyZW50SXRlbSkge1xuICAgIHZhciBsZW4gPSBhcnJheS5sZW5ndGg7XG4gICAgdmFyIG5ld0luZGV4ID0gYXJyYXkuaW5kZXhPZihjdXJyZW50SXRlbSkgKyAxO1xuICAgIGlmIChuZXdJbmRleCA+IChsZW4gLSAxKSkgbmV3SW5kZXggPSAwO1xuICAgIHJldHVybiBhcnJheVtuZXdJbmRleF07XG59O1xuIiwiLyohXG4gICogQm9vdHN0cmFwIHY0LjMuMSAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcbiAgKiBDb3B5cmlnaHQgMjAxMS0yMDE5IFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpXG4gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAgKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cywgcmVxdWlyZSgnanF1ZXJ5JyksIHJlcXVpcmUoJ3BvcHBlci5qcycpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnLCAnanF1ZXJ5JywgJ3BvcHBlci5qcyddLCBmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSBnbG9iYWwgfHwgc2VsZiwgZmFjdG9yeShnbG9iYWwuYm9vdHN0cmFwID0ge30sIGdsb2JhbC5qUXVlcnksIGdsb2JhbC5Qb3BwZXIpKTtcbn0odGhpcywgZnVuY3Rpb24gKGV4cG9ydHMsICQsIFBvcHBlcikgeyAndXNlIHN0cmljdCc7XG5cbiAgJCA9ICQgJiYgJC5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdCcpID8gJFsnZGVmYXVsdCddIDogJDtcbiAgUG9wcGVyID0gUG9wcGVyICYmIFBvcHBlci5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdCcpID8gUG9wcGVyWydkZWZhdWx0J10gOiBQb3BwZXI7XG5cbiAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9XG5cbiAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICAgIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG4gICAgICB2YXIgb3duS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG5cbiAgICAgIGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvd25LZXlzID0gb3duS2V5cy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBzeW0pLmVudW1lcmFibGU7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgb3duS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgICBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xuICB9XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCAodjQuMy4xKTogdXRpbC5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBQcml2YXRlIFRyYW5zaXRpb25FbmQgSGVscGVyc1xuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgdmFyIFRSQU5TSVRJT05fRU5EID0gJ3RyYW5zaXRpb25lbmQnO1xuICB2YXIgTUFYX1VJRCA9IDEwMDAwMDA7XG4gIHZhciBNSUxMSVNFQ09ORFNfTVVMVElQTElFUiA9IDEwMDA7IC8vIFNob3V0b3V0IEFuZ3VzQ3JvbGwgKGh0dHBzOi8vZ29vLmdsL3B4d1FHcClcblxuICBmdW5jdGlvbiB0b1R5cGUob2JqKSB7XG4gICAgcmV0dXJuIHt9LnRvU3RyaW5nLmNhbGwob2JqKS5tYXRjaCgvXFxzKFthLXpdKykvaSlbMV0udG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFNwZWNpYWxUcmFuc2l0aW9uRW5kRXZlbnQoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJpbmRUeXBlOiBUUkFOU0lUSU9OX0VORCxcbiAgICAgIGRlbGVnYXRlVHlwZTogVFJBTlNJVElPTl9FTkQsXG4gICAgICBoYW5kbGU6IGZ1bmN0aW9uIGhhbmRsZShldmVudCkge1xuICAgICAgICBpZiAoJChldmVudC50YXJnZXQpLmlzKHRoaXMpKSB7XG4gICAgICAgICAgcmV0dXJuIGV2ZW50LmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmaW5lZFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2l0aW9uRW5kRW11bGF0b3IoZHVyYXRpb24pIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICAgICQodGhpcykub25lKFV0aWwuVFJBTlNJVElPTl9FTkQsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgfSk7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgICBVdGlsLnRyaWdnZXJUcmFuc2l0aW9uRW5kKF90aGlzKTtcbiAgICAgIH1cbiAgICB9LCBkdXJhdGlvbik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uRW5kU3VwcG9ydCgpIHtcbiAgICAkLmZuLmVtdWxhdGVUcmFuc2l0aW9uRW5kID0gdHJhbnNpdGlvbkVuZEVtdWxhdG9yO1xuICAgICQuZXZlbnQuc3BlY2lhbFtVdGlsLlRSQU5TSVRJT05fRU5EXSA9IGdldFNwZWNpYWxUcmFuc2l0aW9uRW5kRXZlbnQoKTtcbiAgfVxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogUHVibGljIFV0aWwgQXBpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgdmFyIFV0aWwgPSB7XG4gICAgVFJBTlNJVElPTl9FTkQ6ICdic1RyYW5zaXRpb25FbmQnLFxuICAgIGdldFVJRDogZnVuY3Rpb24gZ2V0VUlEKHByZWZpeCkge1xuICAgICAgZG8ge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgICBwcmVmaXggKz0gfn4oTWF0aC5yYW5kb20oKSAqIE1BWF9VSUQpOyAvLyBcIn5+XCIgYWN0cyBsaWtlIGEgZmFzdGVyIE1hdGguZmxvb3IoKSBoZXJlXG4gICAgICB9IHdoaWxlIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcmVmaXgpKTtcblxuICAgICAgcmV0dXJuIHByZWZpeDtcbiAgICB9LFxuICAgIGdldFNlbGVjdG9yRnJvbUVsZW1lbnQ6IGZ1bmN0aW9uIGdldFNlbGVjdG9yRnJvbUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgdmFyIHNlbGVjdG9yID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGFyZ2V0Jyk7XG5cbiAgICAgIGlmICghc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09ICcjJykge1xuICAgICAgICB2YXIgaHJlZkF0dHIgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuICAgICAgICBzZWxlY3RvciA9IGhyZWZBdHRyICYmIGhyZWZBdHRyICE9PSAnIycgPyBocmVmQXR0ci50cmltKCkgOiAnJztcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpID8gc2VsZWN0b3IgOiBudWxsO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQ6IGZ1bmN0aW9uIGdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gLy8gR2V0IHRyYW5zaXRpb24tZHVyYXRpb24gb2YgdGhlIGVsZW1lbnRcblxuXG4gICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gJChlbGVtZW50KS5jc3MoJ3RyYW5zaXRpb24tZHVyYXRpb24nKTtcbiAgICAgIHZhciB0cmFuc2l0aW9uRGVsYXkgPSAkKGVsZW1lbnQpLmNzcygndHJhbnNpdGlvbi1kZWxheScpO1xuICAgICAgdmFyIGZsb2F0VHJhbnNpdGlvbkR1cmF0aW9uID0gcGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pO1xuICAgICAgdmFyIGZsb2F0VHJhbnNpdGlvbkRlbGF5ID0gcGFyc2VGbG9hdCh0cmFuc2l0aW9uRGVsYXkpOyAvLyBSZXR1cm4gMCBpZiBlbGVtZW50IG9yIHRyYW5zaXRpb24gZHVyYXRpb24gaXMgbm90IGZvdW5kXG5cbiAgICAgIGlmICghZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24gJiYgIWZsb2F0VHJhbnNpdGlvbkRlbGF5KSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfSAvLyBJZiBtdWx0aXBsZSBkdXJhdGlvbnMgYXJlIGRlZmluZWQsIHRha2UgdGhlIGZpcnN0XG5cblxuICAgICAgdHJhbnNpdGlvbkR1cmF0aW9uID0gdHJhbnNpdGlvbkR1cmF0aW9uLnNwbGl0KCcsJylbMF07XG4gICAgICB0cmFuc2l0aW9uRGVsYXkgPSB0cmFuc2l0aW9uRGVsYXkuc3BsaXQoJywnKVswXTtcbiAgICAgIHJldHVybiAocGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pICsgcGFyc2VGbG9hdCh0cmFuc2l0aW9uRGVsYXkpKSAqIE1JTExJU0VDT05EU19NVUxUSVBMSUVSO1xuICAgIH0sXG4gICAgcmVmbG93OiBmdW5jdGlvbiByZWZsb3coZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgIH0sXG4gICAgdHJpZ2dlclRyYW5zaXRpb25FbmQ6IGZ1bmN0aW9uIHRyaWdnZXJUcmFuc2l0aW9uRW5kKGVsZW1lbnQpIHtcbiAgICAgICQoZWxlbWVudCkudHJpZ2dlcihUUkFOU0lUSU9OX0VORCk7XG4gICAgfSxcbiAgICAvLyBUT0RPOiBSZW1vdmUgaW4gdjVcbiAgICBzdXBwb3J0c1RyYW5zaXRpb25FbmQ6IGZ1bmN0aW9uIHN1cHBvcnRzVHJhbnNpdGlvbkVuZCgpIHtcbiAgICAgIHJldHVybiBCb29sZWFuKFRSQU5TSVRJT05fRU5EKTtcbiAgICB9LFxuICAgIGlzRWxlbWVudDogZnVuY3Rpb24gaXNFbGVtZW50KG9iaikge1xuICAgICAgcmV0dXJuIChvYmpbMF0gfHwgb2JqKS5ub2RlVHlwZTtcbiAgICB9LFxuICAgIHR5cGVDaGVja0NvbmZpZzogZnVuY3Rpb24gdHlwZUNoZWNrQ29uZmlnKGNvbXBvbmVudE5hbWUsIGNvbmZpZywgY29uZmlnVHlwZXMpIHtcbiAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGNvbmZpZ1R5cGVzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29uZmlnVHlwZXMsIHByb3BlcnR5KSkge1xuICAgICAgICAgIHZhciBleHBlY3RlZFR5cGVzID0gY29uZmlnVHlwZXNbcHJvcGVydHldO1xuICAgICAgICAgIHZhciB2YWx1ZSA9IGNvbmZpZ1twcm9wZXJ0eV07XG4gICAgICAgICAgdmFyIHZhbHVlVHlwZSA9IHZhbHVlICYmIFV0aWwuaXNFbGVtZW50KHZhbHVlKSA/ICdlbGVtZW50JyA6IHRvVHlwZSh2YWx1ZSk7XG5cbiAgICAgICAgICBpZiAoIW5ldyBSZWdFeHAoZXhwZWN0ZWRUeXBlcykudGVzdCh2YWx1ZVR5cGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY29tcG9uZW50TmFtZS50b1VwcGVyQ2FzZSgpICsgXCI6IFwiICsgKFwiT3B0aW9uIFxcXCJcIiArIHByb3BlcnR5ICsgXCJcXFwiIHByb3ZpZGVkIHR5cGUgXFxcIlwiICsgdmFsdWVUeXBlICsgXCJcXFwiIFwiKSArIChcImJ1dCBleHBlY3RlZCB0eXBlIFxcXCJcIiArIGV4cGVjdGVkVHlwZXMgKyBcIlxcXCIuXCIpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGZpbmRTaGFkb3dSb290OiBmdW5jdGlvbiBmaW5kU2hhZG93Um9vdChlbGVtZW50KSB7XG4gICAgICBpZiAoIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hdHRhY2hTaGFkb3cpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IC8vIENhbiBmaW5kIHRoZSBzaGFkb3cgcm9vdCBvdGhlcndpc2UgaXQnbGwgcmV0dXJuIHRoZSBkb2N1bWVudFxuXG5cbiAgICAgIGlmICh0eXBlb2YgZWxlbWVudC5nZXRSb290Tm9kZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgcm9vdCA9IGVsZW1lbnQuZ2V0Um9vdE5vZGUoKTtcbiAgICAgICAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgIH0gLy8gd2hlbiB3ZSBkb24ndCBmaW5kIGEgc2hhZG93IHJvb3RcblxuXG4gICAgICBpZiAoIWVsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFV0aWwuZmluZFNoYWRvd1Jvb3QoZWxlbWVudC5wYXJlbnROb2RlKTtcbiAgICB9XG4gIH07XG4gIHNldFRyYW5zaXRpb25FbmRTdXBwb3J0KCk7XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBDb25zdGFudHNcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBOQU1FID0gJ2FsZXJ0JztcbiAgdmFyIFZFUlNJT04gPSAnNC4zLjEnO1xuICB2YXIgREFUQV9LRVkgPSAnYnMuYWxlcnQnO1xuICB2YXIgRVZFTlRfS0VZID0gXCIuXCIgKyBEQVRBX0tFWTtcbiAgdmFyIERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknO1xuICB2YXIgSlFVRVJZX05PX0NPTkZMSUNUID0gJC5mbltOQU1FXTtcbiAgdmFyIFNlbGVjdG9yID0ge1xuICAgIERJU01JU1M6ICdbZGF0YS1kaXNtaXNzPVwiYWxlcnRcIl0nXG4gIH07XG4gIHZhciBFdmVudCA9IHtcbiAgICBDTE9TRTogXCJjbG9zZVwiICsgRVZFTlRfS0VZLFxuICAgIENMT1NFRDogXCJjbG9zZWRcIiArIEVWRU5UX0tFWSxcbiAgICBDTElDS19EQVRBX0FQSTogXCJjbGlja1wiICsgRVZFTlRfS0VZICsgREFUQV9BUElfS0VZXG4gIH07XG4gIHZhciBDbGFzc05hbWUgPSB7XG4gICAgQUxFUlQ6ICdhbGVydCcsXG4gICAgRkFERTogJ2ZhZGUnLFxuICAgIFNIT1c6ICdzaG93J1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIENsYXNzIERlZmluaXRpb25cbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuICB9O1xuXG4gIHZhciBBbGVydCA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEFsZXJ0KGVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgIH0gLy8gR2V0dGVyc1xuXG5cbiAgICB2YXIgX3Byb3RvID0gQWxlcnQucHJvdG90eXBlO1xuXG4gICAgLy8gUHVibGljXG4gICAgX3Byb3RvLmNsb3NlID0gZnVuY3Rpb24gY2xvc2UoZWxlbWVudCkge1xuICAgICAgdmFyIHJvb3RFbGVtZW50ID0gdGhpcy5fZWxlbWVudDtcblxuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgcm9vdEVsZW1lbnQgPSB0aGlzLl9nZXRSb290RWxlbWVudChlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgdmFyIGN1c3RvbUV2ZW50ID0gdGhpcy5fdHJpZ2dlckNsb3NlRXZlbnQocm9vdEVsZW1lbnQpO1xuXG4gICAgICBpZiAoY3VzdG9tRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9yZW1vdmVFbGVtZW50KHJvb3RFbGVtZW50KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgJC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsIERBVEFfS0VZKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsO1xuICAgIH0gLy8gUHJpdmF0ZVxuICAgIDtcblxuICAgIF9wcm90by5fZ2V0Um9vdEVsZW1lbnQgPSBmdW5jdGlvbiBfZ2V0Um9vdEVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgdmFyIHNlbGVjdG9yID0gVXRpbC5nZXRTZWxlY3RvckZyb21FbGVtZW50KGVsZW1lbnQpO1xuICAgICAgdmFyIHBhcmVudCA9IGZhbHNlO1xuXG4gICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgcGFyZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICB9XG5cbiAgICAgIGlmICghcGFyZW50KSB7XG4gICAgICAgIHBhcmVudCA9ICQoZWxlbWVudCkuY2xvc2VzdChcIi5cIiArIENsYXNzTmFtZS5BTEVSVClbMF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfTtcblxuICAgIF9wcm90by5fdHJpZ2dlckNsb3NlRXZlbnQgPSBmdW5jdGlvbiBfdHJpZ2dlckNsb3NlRXZlbnQoZWxlbWVudCkge1xuICAgICAgdmFyIGNsb3NlRXZlbnQgPSAkLkV2ZW50KEV2ZW50LkNMT1NFKTtcbiAgICAgICQoZWxlbWVudCkudHJpZ2dlcihjbG9zZUV2ZW50KTtcbiAgICAgIHJldHVybiBjbG9zZUV2ZW50O1xuICAgIH07XG5cbiAgICBfcHJvdG8uX3JlbW92ZUVsZW1lbnQgPSBmdW5jdGlvbiBfcmVtb3ZlRWxlbWVudChlbGVtZW50KSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAkKGVsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZS5TSE9XKTtcblxuICAgICAgaWYgKCEkKGVsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZS5GQURFKSkge1xuICAgICAgICB0aGlzLl9kZXN0cm95RWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciB0cmFuc2l0aW9uRHVyYXRpb24gPSBVdGlsLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KGVsZW1lbnQpO1xuICAgICAgJChlbGVtZW50KS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5fZGVzdHJveUVsZW1lbnQoZWxlbWVudCwgZXZlbnQpO1xuICAgICAgfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9kZXN0cm95RWxlbWVudCA9IGZ1bmN0aW9uIF9kZXN0cm95RWxlbWVudChlbGVtZW50KSB7XG4gICAgICAkKGVsZW1lbnQpLmRldGFjaCgpLnRyaWdnZXIoRXZlbnQuQ0xPU0VEKS5yZW1vdmUoKTtcbiAgICB9IC8vIFN0YXRpY1xuICAgIDtcblxuICAgIEFsZXJ0Ll9qUXVlcnlJbnRlcmZhY2UgPSBmdW5jdGlvbiBfalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciAkZWxlbWVudCA9ICQodGhpcyk7XG4gICAgICAgIHZhciBkYXRhID0gJGVsZW1lbnQuZGF0YShEQVRBX0tFWSk7XG5cbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IG5ldyBBbGVydCh0aGlzKTtcbiAgICAgICAgICAkZWxlbWVudC5kYXRhKERBVEFfS0VZLCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcgPT09ICdjbG9zZScpIHtcbiAgICAgICAgICBkYXRhW2NvbmZpZ10odGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBBbGVydC5faGFuZGxlRGlzbWlzcyA9IGZ1bmN0aW9uIF9oYW5kbGVEaXNtaXNzKGFsZXJ0SW5zdGFuY2UpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFsZXJ0SW5zdGFuY2UuY2xvc2UodGhpcyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBfY3JlYXRlQ2xhc3MoQWxlcnQsIG51bGwsIFt7XG4gICAgICBrZXk6IFwiVkVSU0lPTlwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBWRVJTSU9OO1xuICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBBbGVydDtcbiAgfSgpO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuXG4gICQoZG9jdW1lbnQpLm9uKEV2ZW50LkNMSUNLX0RBVEFfQVBJLCBTZWxlY3Rvci5ESVNNSVNTLCBBbGVydC5faGFuZGxlRGlzbWlzcyhuZXcgQWxlcnQoKSkpO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIGpRdWVyeVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgJC5mbltOQU1FXSA9IEFsZXJ0Ll9qUXVlcnlJbnRlcmZhY2U7XG4gICQuZm5bTkFNRV0uQ29uc3RydWN0b3IgPSBBbGVydDtcblxuICAkLmZuW05BTUVdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbltOQU1FXSA9IEpRVUVSWV9OT19DT05GTElDVDtcbiAgICByZXR1cm4gQWxlcnQuX2pRdWVyeUludGVyZmFjZTtcbiAgfTtcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIENvbnN0YW50c1xuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgdmFyIE5BTUUkMSA9ICdidXR0b24nO1xuICB2YXIgVkVSU0lPTiQxID0gJzQuMy4xJztcbiAgdmFyIERBVEFfS0VZJDEgPSAnYnMuYnV0dG9uJztcbiAgdmFyIEVWRU5UX0tFWSQxID0gXCIuXCIgKyBEQVRBX0tFWSQxO1xuICB2YXIgREFUQV9BUElfS0VZJDEgPSAnLmRhdGEtYXBpJztcbiAgdmFyIEpRVUVSWV9OT19DT05GTElDVCQxID0gJC5mbltOQU1FJDFdO1xuICB2YXIgQ2xhc3NOYW1lJDEgPSB7XG4gICAgQUNUSVZFOiAnYWN0aXZlJyxcbiAgICBCVVRUT046ICdidG4nLFxuICAgIEZPQ1VTOiAnZm9jdXMnXG4gIH07XG4gIHZhciBTZWxlY3RvciQxID0ge1xuICAgIERBVEFfVE9HR0xFX0NBUlJPVDogJ1tkYXRhLXRvZ2dsZV49XCJidXR0b25cIl0nLFxuICAgIERBVEFfVE9HR0xFOiAnW2RhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiXScsXG4gICAgSU5QVVQ6ICdpbnB1dDpub3QoW3R5cGU9XCJoaWRkZW5cIl0pJyxcbiAgICBBQ1RJVkU6ICcuYWN0aXZlJyxcbiAgICBCVVRUT046ICcuYnRuJ1xuICB9O1xuICB2YXIgRXZlbnQkMSA9IHtcbiAgICBDTElDS19EQVRBX0FQSTogXCJjbGlja1wiICsgRVZFTlRfS0VZJDEgKyBEQVRBX0FQSV9LRVkkMSxcbiAgICBGT0NVU19CTFVSX0RBVEFfQVBJOiBcImZvY3VzXCIgKyBFVkVOVF9LRVkkMSArIERBVEFfQVBJX0tFWSQxICsgXCIgXCIgKyAoXCJibHVyXCIgKyBFVkVOVF9LRVkkMSArIERBVEFfQVBJX0tFWSQxKVxuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIENsYXNzIERlZmluaXRpb25cbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuICB9O1xuXG4gIHZhciBCdXR0b24gPVxuICAvKiNfX1BVUkVfXyovXG4gIGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBCdXR0b24oZWxlbWVudCkge1xuICAgICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgfSAvLyBHZXR0ZXJzXG5cblxuICAgIHZhciBfcHJvdG8gPSBCdXR0b24ucHJvdG90eXBlO1xuXG4gICAgLy8gUHVibGljXG4gICAgX3Byb3RvLnRvZ2dsZSA9IGZ1bmN0aW9uIHRvZ2dsZSgpIHtcbiAgICAgIHZhciB0cmlnZ2VyQ2hhbmdlRXZlbnQgPSB0cnVlO1xuICAgICAgdmFyIGFkZEFyaWFQcmVzc2VkID0gdHJ1ZTtcbiAgICAgIHZhciByb290RWxlbWVudCA9ICQodGhpcy5fZWxlbWVudCkuY2xvc2VzdChTZWxlY3RvciQxLkRBVEFfVE9HR0xFKVswXTtcblxuICAgICAgaWYgKHJvb3RFbGVtZW50KSB7XG4gICAgICAgIHZhciBpbnB1dCA9IHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcihTZWxlY3RvciQxLklOUFVUKTtcblxuICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICBpZiAoaW5wdXQudHlwZSA9PT0gJ3JhZGlvJykge1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoZWNrZWQgJiYgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ2xhc3NOYW1lJDEuQUNUSVZFKSkge1xuICAgICAgICAgICAgICB0cmlnZ2VyQ2hhbmdlRXZlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhciBhY3RpdmVFbGVtZW50ID0gcm9vdEVsZW1lbnQucXVlcnlTZWxlY3RvcihTZWxlY3RvciQxLkFDVElWRSk7XG5cbiAgICAgICAgICAgICAgaWYgKGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAkKGFjdGl2ZUVsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQxLkFDVElWRSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZUV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpIHx8IHJvb3RFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSB8fCBpbnB1dC5jbGFzc0xpc3QuY29udGFpbnMoJ2Rpc2FibGVkJykgfHwgcm9vdEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9ICF0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDbGFzc05hbWUkMS5BQ1RJVkUpO1xuICAgICAgICAgICAgJChpbnB1dCkudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICBhZGRBcmlhUHJlc3NlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhZGRBcmlhUHJlc3NlZCkge1xuICAgICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgIXRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENsYXNzTmFtZSQxLkFDVElWRSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHJpZ2dlckNoYW5nZUV2ZW50KSB7XG4gICAgICAgICQodGhpcy5fZWxlbWVudCkudG9nZ2xlQ2xhc3MoQ2xhc3NOYW1lJDEuQUNUSVZFKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgJC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsIERBVEFfS0VZJDEpO1xuICAgICAgdGhpcy5fZWxlbWVudCA9IG51bGw7XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBCdXR0b24uX2pRdWVyeUludGVyZmFjZSA9IGZ1bmN0aW9uIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAkKHRoaXMpLmRhdGEoREFUQV9LRVkkMSk7XG5cbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IG5ldyBCdXR0b24odGhpcyk7XG4gICAgICAgICAgJCh0aGlzKS5kYXRhKERBVEFfS0VZJDEsIGRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZyA9PT0gJ3RvZ2dsZScpIHtcbiAgICAgICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9jcmVhdGVDbGFzcyhCdXR0b24sIG51bGwsIFt7XG4gICAgICBrZXk6IFwiVkVSU0lPTlwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBWRVJTSU9OJDE7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIEJ1dHRvbjtcbiAgfSgpO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuXG4gICQoZG9jdW1lbnQpLm9uKEV2ZW50JDEuQ0xJQ0tfREFUQV9BUEksIFNlbGVjdG9yJDEuREFUQV9UT0dHTEVfQ0FSUk9ULCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHZhciBidXR0b24gPSBldmVudC50YXJnZXQ7XG5cbiAgICBpZiAoISQoYnV0dG9uKS5oYXNDbGFzcyhDbGFzc05hbWUkMS5CVVRUT04pKSB7XG4gICAgICBidXR0b24gPSAkKGJ1dHRvbikuY2xvc2VzdChTZWxlY3RvciQxLkJVVFRPTik7XG4gICAgfVxuXG4gICAgQnV0dG9uLl9qUXVlcnlJbnRlcmZhY2UuY2FsbCgkKGJ1dHRvbiksICd0b2dnbGUnKTtcbiAgfSkub24oRXZlbnQkMS5GT0NVU19CTFVSX0RBVEFfQVBJLCBTZWxlY3RvciQxLkRBVEFfVE9HR0xFX0NBUlJPVCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIGJ1dHRvbiA9ICQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFNlbGVjdG9yJDEuQlVUVE9OKVswXTtcbiAgICAkKGJ1dHRvbikudG9nZ2xlQ2xhc3MoQ2xhc3NOYW1lJDEuRk9DVVMsIC9eZm9jdXMoaW4pPyQvLnRlc3QoZXZlbnQudHlwZSkpO1xuICB9KTtcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBqUXVlcnlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gICQuZm5bTkFNRSQxXSA9IEJ1dHRvbi5falF1ZXJ5SW50ZXJmYWNlO1xuICAkLmZuW05BTUUkMV0uQ29uc3RydWN0b3IgPSBCdXR0b247XG5cbiAgJC5mbltOQU1FJDFdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbltOQU1FJDFdID0gSlFVRVJZX05PX0NPTkZMSUNUJDE7XG4gICAgcmV0dXJuIEJ1dHRvbi5falF1ZXJ5SW50ZXJmYWNlO1xuICB9O1xuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQ29uc3RhbnRzXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICB2YXIgTkFNRSQyID0gJ2Nhcm91c2VsJztcbiAgdmFyIFZFUlNJT04kMiA9ICc0LjMuMSc7XG4gIHZhciBEQVRBX0tFWSQyID0gJ2JzLmNhcm91c2VsJztcbiAgdmFyIEVWRU5UX0tFWSQyID0gXCIuXCIgKyBEQVRBX0tFWSQyO1xuICB2YXIgREFUQV9BUElfS0VZJDIgPSAnLmRhdGEtYXBpJztcbiAgdmFyIEpRVUVSWV9OT19DT05GTElDVCQyID0gJC5mbltOQU1FJDJdO1xuICB2YXIgQVJST1dfTEVGVF9LRVlDT0RFID0gMzc7IC8vIEtleWJvYXJkRXZlbnQud2hpY2ggdmFsdWUgZm9yIGxlZnQgYXJyb3cga2V5XG5cbiAgdmFyIEFSUk9XX1JJR0hUX0tFWUNPREUgPSAzOTsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3IgcmlnaHQgYXJyb3cga2V5XG5cbiAgdmFyIFRPVUNIRVZFTlRfQ09NUEFUX1dBSVQgPSA1MDA7IC8vIFRpbWUgZm9yIG1vdXNlIGNvbXBhdCBldmVudHMgdG8gZmlyZSBhZnRlciB0b3VjaFxuXG4gIHZhciBTV0lQRV9USFJFU0hPTEQgPSA0MDtcbiAgdmFyIERlZmF1bHQgPSB7XG4gICAgaW50ZXJ2YWw6IDUwMDAsXG4gICAga2V5Ym9hcmQ6IHRydWUsXG4gICAgc2xpZGU6IGZhbHNlLFxuICAgIHBhdXNlOiAnaG92ZXInLFxuICAgIHdyYXA6IHRydWUsXG4gICAgdG91Y2g6IHRydWVcbiAgfTtcbiAgdmFyIERlZmF1bHRUeXBlID0ge1xuICAgIGludGVydmFsOiAnKG51bWJlcnxib29sZWFuKScsXG4gICAga2V5Ym9hcmQ6ICdib29sZWFuJyxcbiAgICBzbGlkZTogJyhib29sZWFufHN0cmluZyknLFxuICAgIHBhdXNlOiAnKHN0cmluZ3xib29sZWFuKScsXG4gICAgd3JhcDogJ2Jvb2xlYW4nLFxuICAgIHRvdWNoOiAnYm9vbGVhbidcbiAgfTtcbiAgdmFyIERpcmVjdGlvbiA9IHtcbiAgICBORVhUOiAnbmV4dCcsXG4gICAgUFJFVjogJ3ByZXYnLFxuICAgIExFRlQ6ICdsZWZ0JyxcbiAgICBSSUdIVDogJ3JpZ2h0J1xuICB9O1xuICB2YXIgRXZlbnQkMiA9IHtcbiAgICBTTElERTogXCJzbGlkZVwiICsgRVZFTlRfS0VZJDIsXG4gICAgU0xJRDogXCJzbGlkXCIgKyBFVkVOVF9LRVkkMixcbiAgICBLRVlET1dOOiBcImtleWRvd25cIiArIEVWRU5UX0tFWSQyLFxuICAgIE1PVVNFRU5URVI6IFwibW91c2VlbnRlclwiICsgRVZFTlRfS0VZJDIsXG4gICAgTU9VU0VMRUFWRTogXCJtb3VzZWxlYXZlXCIgKyBFVkVOVF9LRVkkMixcbiAgICBUT1VDSFNUQVJUOiBcInRvdWNoc3RhcnRcIiArIEVWRU5UX0tFWSQyLFxuICAgIFRPVUNITU9WRTogXCJ0b3VjaG1vdmVcIiArIEVWRU5UX0tFWSQyLFxuICAgIFRPVUNIRU5EOiBcInRvdWNoZW5kXCIgKyBFVkVOVF9LRVkkMixcbiAgICBQT0lOVEVSRE9XTjogXCJwb2ludGVyZG93blwiICsgRVZFTlRfS0VZJDIsXG4gICAgUE9JTlRFUlVQOiBcInBvaW50ZXJ1cFwiICsgRVZFTlRfS0VZJDIsXG4gICAgRFJBR19TVEFSVDogXCJkcmFnc3RhcnRcIiArIEVWRU5UX0tFWSQyLFxuICAgIExPQURfREFUQV9BUEk6IFwibG9hZFwiICsgRVZFTlRfS0VZJDIgKyBEQVRBX0FQSV9LRVkkMixcbiAgICBDTElDS19EQVRBX0FQSTogXCJjbGlja1wiICsgRVZFTlRfS0VZJDIgKyBEQVRBX0FQSV9LRVkkMlxuICB9O1xuICB2YXIgQ2xhc3NOYW1lJDIgPSB7XG4gICAgQ0FST1VTRUw6ICdjYXJvdXNlbCcsXG4gICAgQUNUSVZFOiAnYWN0aXZlJyxcbiAgICBTTElERTogJ3NsaWRlJyxcbiAgICBSSUdIVDogJ2Nhcm91c2VsLWl0ZW0tcmlnaHQnLFxuICAgIExFRlQ6ICdjYXJvdXNlbC1pdGVtLWxlZnQnLFxuICAgIE5FWFQ6ICdjYXJvdXNlbC1pdGVtLW5leHQnLFxuICAgIFBSRVY6ICdjYXJvdXNlbC1pdGVtLXByZXYnLFxuICAgIElURU06ICdjYXJvdXNlbC1pdGVtJyxcbiAgICBQT0lOVEVSX0VWRU5UOiAncG9pbnRlci1ldmVudCdcbiAgfTtcbiAgdmFyIFNlbGVjdG9yJDIgPSB7XG4gICAgQUNUSVZFOiAnLmFjdGl2ZScsXG4gICAgQUNUSVZFX0lURU06ICcuYWN0aXZlLmNhcm91c2VsLWl0ZW0nLFxuICAgIElURU06ICcuY2Fyb3VzZWwtaXRlbScsXG4gICAgSVRFTV9JTUc6ICcuY2Fyb3VzZWwtaXRlbSBpbWcnLFxuICAgIE5FWFRfUFJFVjogJy5jYXJvdXNlbC1pdGVtLW5leHQsIC5jYXJvdXNlbC1pdGVtLXByZXYnLFxuICAgIElORElDQVRPUlM6ICcuY2Fyb3VzZWwtaW5kaWNhdG9ycycsXG4gICAgREFUQV9TTElERTogJ1tkYXRhLXNsaWRlXSwgW2RhdGEtc2xpZGUtdG9dJyxcbiAgICBEQVRBX1JJREU6ICdbZGF0YS1yaWRlPVwiY2Fyb3VzZWxcIl0nXG4gIH07XG4gIHZhciBQb2ludGVyVHlwZSA9IHtcbiAgICBUT1VDSDogJ3RvdWNoJyxcbiAgICBQRU46ICdwZW4nXG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG4gIH07XG5cbiAgdmFyIENhcm91c2VsID1cbiAgLyojX19QVVJFX18qL1xuICBmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ2Fyb3VzZWwoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgICB0aGlzLl9pdGVtcyA9IG51bGw7XG4gICAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGw7XG4gICAgICB0aGlzLl9hY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuX2lzUGF1c2VkID0gZmFsc2U7XG4gICAgICB0aGlzLl9pc1NsaWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMudG91Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICAgIHRoaXMudG91Y2hTdGFydFggPSAwO1xuICAgICAgdGhpcy50b3VjaERlbHRhWCA9IDA7XG4gICAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQgPSB0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoU2VsZWN0b3IkMi5JTkRJQ0FUT1JTKTtcbiAgICAgIHRoaXMuX3RvdWNoU3VwcG9ydGVkID0gJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDA7XG4gICAgICB0aGlzLl9wb2ludGVyRXZlbnQgPSBCb29sZWFuKHdpbmRvdy5Qb2ludGVyRXZlbnQgfHwgd2luZG93Lk1TUG9pbnRlckV2ZW50KTtcblxuICAgICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICB9IC8vIEdldHRlcnNcblxuXG4gICAgdmFyIF9wcm90byA9IENhcm91c2VsLnByb3RvdHlwZTtcblxuICAgIC8vIFB1YmxpY1xuICAgIF9wcm90by5uZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGlmICghdGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICAgIHRoaXMuX3NsaWRlKERpcmVjdGlvbi5ORVhUKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLm5leHRXaGVuVmlzaWJsZSA9IGZ1bmN0aW9uIG5leHRXaGVuVmlzaWJsZSgpIHtcbiAgICAgIC8vIERvbid0IGNhbGwgbmV4dCB3aGVuIHRoZSBwYWdlIGlzbid0IHZpc2libGVcbiAgICAgIC8vIG9yIHRoZSBjYXJvdXNlbCBvciBpdHMgcGFyZW50IGlzbid0IHZpc2libGVcbiAgICAgIGlmICghZG9jdW1lbnQuaGlkZGVuICYmICQodGhpcy5fZWxlbWVudCkuaXMoJzp2aXNpYmxlJykgJiYgJCh0aGlzLl9lbGVtZW50KS5jc3MoJ3Zpc2liaWxpdHknKSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5wcmV2ID0gZnVuY3Rpb24gcHJldigpIHtcbiAgICAgIGlmICghdGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICAgIHRoaXMuX3NsaWRlKERpcmVjdGlvbi5QUkVWKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLnBhdXNlID0gZnVuY3Rpb24gcGF1c2UoZXZlbnQpIHtcbiAgICAgIGlmICghZXZlbnQpIHtcbiAgICAgICAgdGhpcy5faXNQYXVzZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yJDIuTkVYVF9QUkVWKSkge1xuICAgICAgICBVdGlsLnRyaWdnZXJUcmFuc2l0aW9uRW5kKHRoaXMuX2VsZW1lbnQpO1xuICAgICAgICB0aGlzLmN5Y2xlKHRydWUpO1xuICAgICAgfVxuXG4gICAgICBjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKTtcbiAgICAgIHRoaXMuX2ludGVydmFsID0gbnVsbDtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmN5Y2xlID0gZnVuY3Rpb24gY3ljbGUoZXZlbnQpIHtcbiAgICAgIGlmICghZXZlbnQpIHtcbiAgICAgICAgdGhpcy5faXNQYXVzZWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2ludGVydmFsKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWwpO1xuICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcuaW50ZXJ2YWwgJiYgIXRoaXMuX2lzUGF1c2VkKSB7XG4gICAgICAgIHRoaXMuX2ludGVydmFsID0gc2V0SW50ZXJ2YWwoKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA/IHRoaXMubmV4dFdoZW5WaXNpYmxlIDogdGhpcy5uZXh0KS5iaW5kKHRoaXMpLCB0aGlzLl9jb25maWcuaW50ZXJ2YWwpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8udG8gPSBmdW5jdGlvbiB0byhpbmRleCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdGhpcy5fYWN0aXZlRWxlbWVudCA9IHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcihTZWxlY3RvciQyLkFDVElWRV9JVEVNKTtcblxuICAgICAgdmFyIGFjdGl2ZUluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KHRoaXMuX2FjdGl2ZUVsZW1lbnQpO1xuXG4gICAgICBpZiAoaW5kZXggPiB0aGlzLl9pdGVtcy5sZW5ndGggLSAxIHx8IGluZGV4IDwgMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9pc1NsaWRpbmcpIHtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbmUoRXZlbnQkMi5TTElELCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLnRvKGluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGFjdGl2ZUluZGV4ID09PSBpbmRleCkge1xuICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICAgIHRoaXMuY3ljbGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGlyZWN0aW9uID0gaW5kZXggPiBhY3RpdmVJbmRleCA/IERpcmVjdGlvbi5ORVhUIDogRGlyZWN0aW9uLlBSRVY7XG5cbiAgICAgIHRoaXMuX3NsaWRlKGRpcmVjdGlvbiwgdGhpcy5faXRlbXNbaW5kZXhdKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgJCh0aGlzLl9lbGVtZW50KS5vZmYoRVZFTlRfS0VZJDIpO1xuICAgICAgJC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsIERBVEFfS0VZJDIpO1xuICAgICAgdGhpcy5faXRlbXMgPSBudWxsO1xuICAgICAgdGhpcy5fY29uZmlnID0gbnVsbDtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsO1xuICAgICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsO1xuICAgICAgdGhpcy5faXNQYXVzZWQgPSBudWxsO1xuICAgICAgdGhpcy5faXNTbGlkaW5nID0gbnVsbDtcbiAgICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICAgICAgdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQgPSBudWxsO1xuICAgIH0gLy8gUHJpdmF0ZVxuICAgIDtcblxuICAgIF9wcm90by5fZ2V0Q29uZmlnID0gZnVuY3Rpb24gX2dldENvbmZpZyhjb25maWcpIHtcbiAgICAgIGNvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIERlZmF1bHQsIGNvbmZpZyk7XG4gICAgICBVdGlsLnR5cGVDaGVja0NvbmZpZyhOQU1FJDIsIGNvbmZpZywgRGVmYXVsdFR5cGUpO1xuICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9oYW5kbGVTd2lwZSA9IGZ1bmN0aW9uIF9oYW5kbGVTd2lwZSgpIHtcbiAgICAgIHZhciBhYnNEZWx0YXggPSBNYXRoLmFicyh0aGlzLnRvdWNoRGVsdGFYKTtcblxuICAgICAgaWYgKGFic0RlbHRheCA8PSBTV0lQRV9USFJFU0hPTEQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGlyZWN0aW9uID0gYWJzRGVsdGF4IC8gdGhpcy50b3VjaERlbHRhWDsgLy8gc3dpcGUgbGVmdFxuXG4gICAgICBpZiAoZGlyZWN0aW9uID4gMCkge1xuICAgICAgICB0aGlzLnByZXYoKTtcbiAgICAgIH0gLy8gc3dpcGUgcmlnaHRcblxuXG4gICAgICBpZiAoZGlyZWN0aW9uIDwgMCkge1xuICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLl9hZGRFdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uIF9hZGRFdmVudExpc3RlbmVycygpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICAgICQodGhpcy5fZWxlbWVudCkub24oRXZlbnQkMi5LRVlET1dOLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLl9rZXlkb3duKGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcucGF1c2UgPT09ICdob3ZlcicpIHtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbihFdmVudCQyLk1PVVNFRU5URVIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczIucGF1c2UoZXZlbnQpO1xuICAgICAgICB9KS5vbihFdmVudCQyLk1PVVNFTEVBVkUsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczIuY3ljbGUoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2NvbmZpZy50b3VjaCkge1xuICAgICAgICB0aGlzLl9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5fYWRkVG91Y2hFdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uIF9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIGlmICghdGhpcy5fdG91Y2hTdXBwb3J0ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RhcnQgPSBmdW5jdGlvbiBzdGFydChldmVudCkge1xuICAgICAgICBpZiAoX3RoaXMzLl9wb2ludGVyRXZlbnQgJiYgUG9pbnRlclR5cGVbZXZlbnQub3JpZ2luYWxFdmVudC5wb2ludGVyVHlwZS50b1VwcGVyQ2FzZSgpXSkge1xuICAgICAgICAgIF90aGlzMy50b3VjaFN0YXJ0WCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQuY2xpZW50WDtcbiAgICAgICAgfSBlbHNlIGlmICghX3RoaXMzLl9wb2ludGVyRXZlbnQpIHtcbiAgICAgICAgICBfdGhpczMudG91Y2hTdGFydFggPSBldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdmFyIG1vdmUgPSBmdW5jdGlvbiBtb3ZlKGV2ZW50KSB7XG4gICAgICAgIC8vIGVuc3VyZSBzd2lwaW5nIHdpdGggb25lIHRvdWNoIGFuZCBub3QgcGluY2hpbmdcbiAgICAgICAgaWYgKGV2ZW50Lm9yaWdpbmFsRXZlbnQudG91Y2hlcyAmJiBldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIF90aGlzMy50b3VjaERlbHRhWCA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMzLnRvdWNoRGVsdGFYID0gZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLmNsaWVudFggLSBfdGhpczMudG91Y2hTdGFydFg7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHZhciBlbmQgPSBmdW5jdGlvbiBlbmQoZXZlbnQpIHtcbiAgICAgICAgaWYgKF90aGlzMy5fcG9pbnRlckV2ZW50ICYmIFBvaW50ZXJUeXBlW2V2ZW50Lm9yaWdpbmFsRXZlbnQucG9pbnRlclR5cGUudG9VcHBlckNhc2UoKV0pIHtcbiAgICAgICAgICBfdGhpczMudG91Y2hEZWx0YVggPSBldmVudC5vcmlnaW5hbEV2ZW50LmNsaWVudFggLSBfdGhpczMudG91Y2hTdGFydFg7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczMuX2hhbmRsZVN3aXBlKCk7XG5cbiAgICAgICAgaWYgKF90aGlzMy5fY29uZmlnLnBhdXNlID09PSAnaG92ZXInKSB7XG4gICAgICAgICAgLy8gSWYgaXQncyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlLCBtb3VzZWVudGVyL2xlYXZlIGFyZSBmaXJlZCBhc1xuICAgICAgICAgIC8vIHBhcnQgb2YgdGhlIG1vdXNlIGNvbXBhdGliaWxpdHkgZXZlbnRzIG9uIGZpcnN0IHRhcCAtIHRoZSBjYXJvdXNlbFxuICAgICAgICAgIC8vIHdvdWxkIHN0b3AgY3ljbGluZyB1bnRpbCB1c2VyIHRhcHBlZCBvdXQgb2YgaXQ7XG4gICAgICAgICAgLy8gaGVyZSwgd2UgbGlzdGVuIGZvciB0b3VjaGVuZCwgZXhwbGljaXRseSBwYXVzZSB0aGUgY2Fyb3VzZWxcbiAgICAgICAgICAvLyAoYXMgaWYgaXQncyB0aGUgc2Vjb25kIHRpbWUgd2UgdGFwIG9uIGl0LCBtb3VzZWVudGVyIGNvbXBhdCBldmVudFxuICAgICAgICAgIC8vIGlzIE5PVCBmaXJlZCkgYW5kIGFmdGVyIGEgdGltZW91dCAodG8gYWxsb3cgZm9yIG1vdXNlIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAvLyBldmVudHMgdG8gZmlyZSkgd2UgZXhwbGljaXRseSByZXN0YXJ0IGN5Y2xpbmdcbiAgICAgICAgICBfdGhpczMucGF1c2UoKTtcblxuICAgICAgICAgIGlmIChfdGhpczMudG91Y2hUaW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoX3RoaXMzLnRvdWNoVGltZW91dCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3RoaXMzLnRvdWNoVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMzLmN5Y2xlKGV2ZW50KTtcbiAgICAgICAgICB9LCBUT1VDSEVWRU5UX0NPTVBBVF9XQUlUICsgX3RoaXMzLl9jb25maWcuaW50ZXJ2YWwpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAkKHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3RvciQyLklURU1fSU1HKSkub24oRXZlbnQkMi5EUkFHX1NUQVJULCBmdW5jdGlvbiAoZSkge1xuICAgICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLl9wb2ludGVyRXZlbnQpIHtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbihFdmVudCQyLlBPSU5URVJET1dOLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gc3RhcnQoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbihFdmVudCQyLlBPSU5URVJVUCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGVuZChldmVudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDbGFzc05hbWUkMi5QT0lOVEVSX0VWRU5UKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICQodGhpcy5fZWxlbWVudCkub24oRXZlbnQkMi5UT1VDSFNUQVJULCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gc3RhcnQoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbihFdmVudCQyLlRPVUNITU9WRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIG1vdmUoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbihFdmVudCQyLlRPVUNIRU5ELCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gZW5kKGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5fa2V5ZG93biA9IGZ1bmN0aW9uIF9rZXlkb3duKGV2ZW50KSB7XG4gICAgICBpZiAoL2lucHV0fHRleHRhcmVhL2kudGVzdChldmVudC50YXJnZXQudGFnTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGV2ZW50LndoaWNoKSB7XG4gICAgICAgIGNhc2UgQVJST1dfTEVGVF9LRVlDT0RFOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5wcmV2KCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBBUlJPV19SSUdIVF9LRVlDT0RFOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLl9nZXRJdGVtSW5kZXggPSBmdW5jdGlvbiBfZ2V0SXRlbUluZGV4KGVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2l0ZW1zID0gZWxlbWVudCAmJiBlbGVtZW50LnBhcmVudE5vZGUgPyBbXS5zbGljZS5jYWxsKGVsZW1lbnQucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKFNlbGVjdG9yJDIuSVRFTSkpIDogW107XG4gICAgICByZXR1cm4gdGhpcy5faXRlbXMuaW5kZXhPZihlbGVtZW50KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9nZXRJdGVtQnlEaXJlY3Rpb24gPSBmdW5jdGlvbiBfZ2V0SXRlbUJ5RGlyZWN0aW9uKGRpcmVjdGlvbiwgYWN0aXZlRWxlbWVudCkge1xuICAgICAgdmFyIGlzTmV4dERpcmVjdGlvbiA9IGRpcmVjdGlvbiA9PT0gRGlyZWN0aW9uLk5FWFQ7XG4gICAgICB2YXIgaXNQcmV2RGlyZWN0aW9uID0gZGlyZWN0aW9uID09PSBEaXJlY3Rpb24uUFJFVjtcblxuICAgICAgdmFyIGFjdGl2ZUluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KGFjdGl2ZUVsZW1lbnQpO1xuXG4gICAgICB2YXIgbGFzdEl0ZW1JbmRleCA9IHRoaXMuX2l0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgaXNHb2luZ1RvV3JhcCA9IGlzUHJldkRpcmVjdGlvbiAmJiBhY3RpdmVJbmRleCA9PT0gMCB8fCBpc05leHREaXJlY3Rpb24gJiYgYWN0aXZlSW5kZXggPT09IGxhc3RJdGVtSW5kZXg7XG5cbiAgICAgIGlmIChpc0dvaW5nVG9XcmFwICYmICF0aGlzLl9jb25maWcud3JhcCkge1xuICAgICAgICByZXR1cm4gYWN0aXZlRWxlbWVudDtcbiAgICAgIH1cblxuICAgICAgdmFyIGRlbHRhID0gZGlyZWN0aW9uID09PSBEaXJlY3Rpb24uUFJFViA/IC0xIDogMTtcbiAgICAgIHZhciBpdGVtSW5kZXggPSAoYWN0aXZlSW5kZXggKyBkZWx0YSkgJSB0aGlzLl9pdGVtcy5sZW5ndGg7XG4gICAgICByZXR1cm4gaXRlbUluZGV4ID09PSAtMSA/IHRoaXMuX2l0ZW1zW3RoaXMuX2l0ZW1zLmxlbmd0aCAtIDFdIDogdGhpcy5faXRlbXNbaXRlbUluZGV4XTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl90cmlnZ2VyU2xpZGVFdmVudCA9IGZ1bmN0aW9uIF90cmlnZ2VyU2xpZGVFdmVudChyZWxhdGVkVGFyZ2V0LCBldmVudERpcmVjdGlvbk5hbWUpIHtcbiAgICAgIHZhciB0YXJnZXRJbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleChyZWxhdGVkVGFyZ2V0KTtcblxuICAgICAgdmFyIGZyb21JbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleCh0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoU2VsZWN0b3IkMi5BQ1RJVkVfSVRFTSkpO1xuXG4gICAgICB2YXIgc2xpZGVFdmVudCA9ICQuRXZlbnQoRXZlbnQkMi5TTElERSwge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiByZWxhdGVkVGFyZ2V0LFxuICAgICAgICBkaXJlY3Rpb246IGV2ZW50RGlyZWN0aW9uTmFtZSxcbiAgICAgICAgZnJvbTogZnJvbUluZGV4LFxuICAgICAgICB0bzogdGFyZ2V0SW5kZXhcbiAgICAgIH0pO1xuICAgICAgJCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKHNsaWRlRXZlbnQpO1xuICAgICAgcmV0dXJuIHNsaWRlRXZlbnQ7XG4gICAgfTtcblxuICAgIF9wcm90by5fc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudCA9IGZ1bmN0aW9uIF9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgIGlmICh0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCkge1xuICAgICAgICB2YXIgaW5kaWNhdG9ycyA9IFtdLnNsaWNlLmNhbGwodGhpcy5faW5kaWNhdG9yc0VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3RvciQyLkFDVElWRSkpO1xuICAgICAgICAkKGluZGljYXRvcnMpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQyLkFDVElWRSk7XG5cbiAgICAgICAgdmFyIG5leHRJbmRpY2F0b3IgPSB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudC5jaGlsZHJlblt0aGlzLl9nZXRJdGVtSW5kZXgoZWxlbWVudCldO1xuXG4gICAgICAgIGlmIChuZXh0SW5kaWNhdG9yKSB7XG4gICAgICAgICAgJChuZXh0SW5kaWNhdG9yKS5hZGRDbGFzcyhDbGFzc05hbWUkMi5BQ1RJVkUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5fc2xpZGUgPSBmdW5jdGlvbiBfc2xpZGUoZGlyZWN0aW9uLCBlbGVtZW50KSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSB0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoU2VsZWN0b3IkMi5BQ1RJVkVfSVRFTSk7XG5cbiAgICAgIHZhciBhY3RpdmVFbGVtZW50SW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgoYWN0aXZlRWxlbWVudCk7XG5cbiAgICAgIHZhciBuZXh0RWxlbWVudCA9IGVsZW1lbnQgfHwgYWN0aXZlRWxlbWVudCAmJiB0aGlzLl9nZXRJdGVtQnlEaXJlY3Rpb24oZGlyZWN0aW9uLCBhY3RpdmVFbGVtZW50KTtcblxuICAgICAgdmFyIG5leHRFbGVtZW50SW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgobmV4dEVsZW1lbnQpO1xuXG4gICAgICB2YXIgaXNDeWNsaW5nID0gQm9vbGVhbih0aGlzLl9pbnRlcnZhbCk7XG4gICAgICB2YXIgZGlyZWN0aW9uYWxDbGFzc05hbWU7XG4gICAgICB2YXIgb3JkZXJDbGFzc05hbWU7XG4gICAgICB2YXIgZXZlbnREaXJlY3Rpb25OYW1lO1xuXG4gICAgICBpZiAoZGlyZWN0aW9uID09PSBEaXJlY3Rpb24uTkVYVCkge1xuICAgICAgICBkaXJlY3Rpb25hbENsYXNzTmFtZSA9IENsYXNzTmFtZSQyLkxFRlQ7XG4gICAgICAgIG9yZGVyQ2xhc3NOYW1lID0gQ2xhc3NOYW1lJDIuTkVYVDtcbiAgICAgICAgZXZlbnREaXJlY3Rpb25OYW1lID0gRGlyZWN0aW9uLkxFRlQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXJlY3Rpb25hbENsYXNzTmFtZSA9IENsYXNzTmFtZSQyLlJJR0hUO1xuICAgICAgICBvcmRlckNsYXNzTmFtZSA9IENsYXNzTmFtZSQyLlBSRVY7XG4gICAgICAgIGV2ZW50RGlyZWN0aW9uTmFtZSA9IERpcmVjdGlvbi5SSUdIVDtcbiAgICAgIH1cblxuICAgICAgaWYgKG5leHRFbGVtZW50ICYmICQobmV4dEVsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQyLkFDVElWRSkpIHtcbiAgICAgICAgdGhpcy5faXNTbGlkaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNsaWRlRXZlbnQgPSB0aGlzLl90cmlnZ2VyU2xpZGVFdmVudChuZXh0RWxlbWVudCwgZXZlbnREaXJlY3Rpb25OYW1lKTtcblxuICAgICAgaWYgKHNsaWRlRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWFjdGl2ZUVsZW1lbnQgfHwgIW5leHRFbGVtZW50KSB7XG4gICAgICAgIC8vIFNvbWUgd2VpcmRuZXNzIGlzIGhhcHBlbmluZywgc28gd2UgYmFpbFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lzU2xpZGluZyA9IHRydWU7XG5cbiAgICAgIGlmIChpc0N5Y2xpbmcpIHtcbiAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50KG5leHRFbGVtZW50KTtcblxuICAgICAgdmFyIHNsaWRFdmVudCA9ICQuRXZlbnQoRXZlbnQkMi5TTElELCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IG5leHRFbGVtZW50LFxuICAgICAgICBkaXJlY3Rpb246IGV2ZW50RGlyZWN0aW9uTmFtZSxcbiAgICAgICAgZnJvbTogYWN0aXZlRWxlbWVudEluZGV4LFxuICAgICAgICB0bzogbmV4dEVsZW1lbnRJbmRleFxuICAgICAgfSk7XG5cbiAgICAgIGlmICgkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQyLlNMSURFKSkge1xuICAgICAgICAkKG5leHRFbGVtZW50KS5hZGRDbGFzcyhvcmRlckNsYXNzTmFtZSk7XG4gICAgICAgIFV0aWwucmVmbG93KG5leHRFbGVtZW50KTtcbiAgICAgICAgJChhY3RpdmVFbGVtZW50KS5hZGRDbGFzcyhkaXJlY3Rpb25hbENsYXNzTmFtZSk7XG4gICAgICAgICQobmV4dEVsZW1lbnQpLmFkZENsYXNzKGRpcmVjdGlvbmFsQ2xhc3NOYW1lKTtcbiAgICAgICAgdmFyIG5leHRFbGVtZW50SW50ZXJ2YWwgPSBwYXJzZUludChuZXh0RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaW50ZXJ2YWwnKSwgMTApO1xuXG4gICAgICAgIGlmIChuZXh0RWxlbWVudEludGVydmFsKSB7XG4gICAgICAgICAgdGhpcy5fY29uZmlnLmRlZmF1bHRJbnRlcnZhbCA9IHRoaXMuX2NvbmZpZy5kZWZhdWx0SW50ZXJ2YWwgfHwgdGhpcy5fY29uZmlnLmludGVydmFsO1xuICAgICAgICAgIHRoaXMuX2NvbmZpZy5pbnRlcnZhbCA9IG5leHRFbGVtZW50SW50ZXJ2YWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fY29uZmlnLmludGVydmFsID0gdGhpcy5fY29uZmlnLmRlZmF1bHRJbnRlcnZhbCB8fCB0aGlzLl9jb25maWcuaW50ZXJ2YWw7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudChhY3RpdmVFbGVtZW50KTtcbiAgICAgICAgJChhY3RpdmVFbGVtZW50KS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICQobmV4dEVsZW1lbnQpLnJlbW92ZUNsYXNzKGRpcmVjdGlvbmFsQ2xhc3NOYW1lICsgXCIgXCIgKyBvcmRlckNsYXNzTmFtZSkuYWRkQ2xhc3MoQ2xhc3NOYW1lJDIuQUNUSVZFKTtcbiAgICAgICAgICAkKGFjdGl2ZUVsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQyLkFDVElWRSArIFwiIFwiICsgb3JkZXJDbGFzc05hbWUgKyBcIiBcIiArIGRpcmVjdGlvbmFsQ2xhc3NOYW1lKTtcbiAgICAgICAgICBfdGhpczQuX2lzU2xpZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICQoX3RoaXM0Ll9lbGVtZW50KS50cmlnZ2VyKHNsaWRFdmVudCk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkKGFjdGl2ZUVsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQyLkFDVElWRSk7XG4gICAgICAgICQobmV4dEVsZW1lbnQpLmFkZENsYXNzKENsYXNzTmFtZSQyLkFDVElWRSk7XG4gICAgICAgIHRoaXMuX2lzU2xpZGluZyA9IGZhbHNlO1xuICAgICAgICAkKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoc2xpZEV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzQ3ljbGluZykge1xuICAgICAgICB0aGlzLmN5Y2xlKCk7XG4gICAgICB9XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBDYXJvdXNlbC5falF1ZXJ5SW50ZXJmYWNlID0gZnVuY3Rpb24gX2pRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YShEQVRBX0tFWSQyKTtcblxuICAgICAgICB2YXIgX2NvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIERlZmF1bHQsICQodGhpcykuZGF0YSgpKTtcblxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBfY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgX2NvbmZpZywgY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBhY3Rpb24gPSB0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJyA/IGNvbmZpZyA6IF9jb25maWcuc2xpZGU7XG5cbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IG5ldyBDYXJvdXNlbCh0aGlzLCBfY29uZmlnKTtcbiAgICAgICAgICAkKHRoaXMpLmRhdGEoREFUQV9LRVkkMiwgZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBkYXRhLnRvKGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGRhdGFbYWN0aW9uXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyBtZXRob2QgbmFtZWQgXFxcIlwiICsgYWN0aW9uICsgXCJcXFwiXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRhdGFbYWN0aW9uXSgpO1xuICAgICAgICB9IGVsc2UgaWYgKF9jb25maWcuaW50ZXJ2YWwgJiYgX2NvbmZpZy5yaWRlKSB7XG4gICAgICAgICAgZGF0YS5wYXVzZSgpO1xuICAgICAgICAgIGRhdGEuY3ljbGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIENhcm91c2VsLl9kYXRhQXBpQ2xpY2tIYW5kbGVyID0gZnVuY3Rpb24gX2RhdGFBcGlDbGlja0hhbmRsZXIoZXZlbnQpIHtcbiAgICAgIHZhciBzZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0aGlzKTtcblxuICAgICAgaWYgKCFzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciB0YXJnZXQgPSAkKHNlbGVjdG9yKVswXTtcblxuICAgICAgaWYgKCF0YXJnZXQgfHwgISQodGFyZ2V0KS5oYXNDbGFzcyhDbGFzc05hbWUkMi5DQVJPVVNFTCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgJCh0YXJnZXQpLmRhdGEoKSwgJCh0aGlzKS5kYXRhKCkpO1xuXG4gICAgICB2YXIgc2xpZGVJbmRleCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdkYXRhLXNsaWRlLXRvJyk7XG5cbiAgICAgIGlmIChzbGlkZUluZGV4KSB7XG4gICAgICAgIGNvbmZpZy5pbnRlcnZhbCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBDYXJvdXNlbC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoJCh0YXJnZXQpLCBjb25maWcpO1xuXG4gICAgICBpZiAoc2xpZGVJbmRleCkge1xuICAgICAgICAkKHRhcmdldCkuZGF0YShEQVRBX0tFWSQyKS50byhzbGlkZUluZGV4KTtcbiAgICAgIH1cblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9O1xuXG4gICAgX2NyZWF0ZUNsYXNzKENhcm91c2VsLCBudWxsLCBbe1xuICAgICAga2V5OiBcIlZFUlNJT05cIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gVkVSU0lPTiQyO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJEZWZhdWx0XCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIERlZmF1bHQ7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIENhcm91c2VsO1xuICB9KCk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJChkb2N1bWVudCkub24oRXZlbnQkMi5DTElDS19EQVRBX0FQSSwgU2VsZWN0b3IkMi5EQVRBX1NMSURFLCBDYXJvdXNlbC5fZGF0YUFwaUNsaWNrSGFuZGxlcik7XG4gICQod2luZG93KS5vbihFdmVudCQyLkxPQURfREFUQV9BUEksIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY2Fyb3VzZWxzID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFNlbGVjdG9yJDIuREFUQV9SSURFKSk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gY2Fyb3VzZWxzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB2YXIgJGNhcm91c2VsID0gJChjYXJvdXNlbHNbaV0pO1xuXG4gICAgICBDYXJvdXNlbC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoJGNhcm91c2VsLCAkY2Fyb3VzZWwuZGF0YSgpKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIGpRdWVyeVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgJC5mbltOQU1FJDJdID0gQ2Fyb3VzZWwuX2pRdWVyeUludGVyZmFjZTtcbiAgJC5mbltOQU1FJDJdLkNvbnN0cnVjdG9yID0gQ2Fyb3VzZWw7XG5cbiAgJC5mbltOQU1FJDJdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbltOQU1FJDJdID0gSlFVRVJZX05PX0NPTkZMSUNUJDI7XG4gICAgcmV0dXJuIENhcm91c2VsLl9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBDb25zdGFudHNcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBOQU1FJDMgPSAnY29sbGFwc2UnO1xuICB2YXIgVkVSU0lPTiQzID0gJzQuMy4xJztcbiAgdmFyIERBVEFfS0VZJDMgPSAnYnMuY29sbGFwc2UnO1xuICB2YXIgRVZFTlRfS0VZJDMgPSBcIi5cIiArIERBVEFfS0VZJDM7XG4gIHZhciBEQVRBX0FQSV9LRVkkMyA9ICcuZGF0YS1hcGknO1xuICB2YXIgSlFVRVJZX05PX0NPTkZMSUNUJDMgPSAkLmZuW05BTUUkM107XG4gIHZhciBEZWZhdWx0JDEgPSB7XG4gICAgdG9nZ2xlOiB0cnVlLFxuICAgIHBhcmVudDogJydcbiAgfTtcbiAgdmFyIERlZmF1bHRUeXBlJDEgPSB7XG4gICAgdG9nZ2xlOiAnYm9vbGVhbicsXG4gICAgcGFyZW50OiAnKHN0cmluZ3xlbGVtZW50KSdcbiAgfTtcbiAgdmFyIEV2ZW50JDMgPSB7XG4gICAgU0hPVzogXCJzaG93XCIgKyBFVkVOVF9LRVkkMyxcbiAgICBTSE9XTjogXCJzaG93blwiICsgRVZFTlRfS0VZJDMsXG4gICAgSElERTogXCJoaWRlXCIgKyBFVkVOVF9LRVkkMyxcbiAgICBISURERU46IFwiaGlkZGVuXCIgKyBFVkVOVF9LRVkkMyxcbiAgICBDTElDS19EQVRBX0FQSTogXCJjbGlja1wiICsgRVZFTlRfS0VZJDMgKyBEQVRBX0FQSV9LRVkkM1xuICB9O1xuICB2YXIgQ2xhc3NOYW1lJDMgPSB7XG4gICAgU0hPVzogJ3Nob3cnLFxuICAgIENPTExBUFNFOiAnY29sbGFwc2UnLFxuICAgIENPTExBUFNJTkc6ICdjb2xsYXBzaW5nJyxcbiAgICBDT0xMQVBTRUQ6ICdjb2xsYXBzZWQnXG4gIH07XG4gIHZhciBEaW1lbnNpb24gPSB7XG4gICAgV0lEVEg6ICd3aWR0aCcsXG4gICAgSEVJR0hUOiAnaGVpZ2h0J1xuICB9O1xuICB2YXIgU2VsZWN0b3IkMyA9IHtcbiAgICBBQ1RJVkVTOiAnLnNob3csIC5jb2xsYXBzaW5nJyxcbiAgICBEQVRBX1RPR0dMRTogJ1tkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJdJ1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIENsYXNzIERlZmluaXRpb25cbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuICB9O1xuXG4gIHZhciBDb2xsYXBzZSA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbGxhcHNlKGVsZW1lbnQsIGNvbmZpZykge1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgICAgdGhpcy5fdHJpZ2dlckFycmF5ID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtdG9nZ2xlPVxcXCJjb2xsYXBzZVxcXCJdW2hyZWY9XFxcIiNcIiArIGVsZW1lbnQuaWQgKyBcIlxcXCJdLFwiICsgKFwiW2RhdGEtdG9nZ2xlPVxcXCJjb2xsYXBzZVxcXCJdW2RhdGEtdGFyZ2V0PVxcXCIjXCIgKyBlbGVtZW50LmlkICsgXCJcXFwiXVwiKSkpO1xuICAgICAgdmFyIHRvZ2dsZUxpc3QgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IkMy5EQVRBX1RPR0dMRSkpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdG9nZ2xlTGlzdC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICB2YXIgZWxlbSA9IHRvZ2dsZUxpc3RbaV07XG4gICAgICAgIHZhciBzZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtKTtcbiAgICAgICAgdmFyIGZpbHRlckVsZW1lbnQgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKS5maWx0ZXIoZnVuY3Rpb24gKGZvdW5kRWxlbSkge1xuICAgICAgICAgIHJldHVybiBmb3VuZEVsZW0gPT09IGVsZW1lbnQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChzZWxlY3RvciAhPT0gbnVsbCAmJiBmaWx0ZXJFbGVtZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3RvciA9IHNlbGVjdG9yO1xuXG4gICAgICAgICAgdGhpcy5fdHJpZ2dlckFycmF5LnB1c2goZWxlbSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fcGFyZW50ID0gdGhpcy5fY29uZmlnLnBhcmVudCA/IHRoaXMuX2dldFBhcmVudCgpIDogbnVsbDtcblxuICAgICAgaWYgKCF0aGlzLl9jb25maWcucGFyZW50KSB7XG4gICAgICAgIHRoaXMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0aGlzLl9lbGVtZW50LCB0aGlzLl90cmlnZ2VyQXJyYXkpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fY29uZmlnLnRvZ2dsZSkge1xuICAgICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgICAgfVxuICAgIH0gLy8gR2V0dGVyc1xuXG5cbiAgICB2YXIgX3Byb3RvID0gQ29sbGFwc2UucHJvdG90eXBlO1xuXG4gICAgLy8gUHVibGljXG4gICAgX3Byb3RvLnRvZ2dsZSA9IGZ1bmN0aW9uIHRvZ2dsZSgpIHtcbiAgICAgIGlmICgkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQzLlNIT1cpKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5zaG93ID0gZnVuY3Rpb24gc2hvdygpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLl9pc1RyYW5zaXRpb25pbmcgfHwgJCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUkMy5TSE9XKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBhY3RpdmVzO1xuICAgICAgdmFyIGFjdGl2ZXNEYXRhO1xuXG4gICAgICBpZiAodGhpcy5fcGFyZW50KSB7XG4gICAgICAgIGFjdGl2ZXMgPSBbXS5zbGljZS5jYWxsKHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFNlbGVjdG9yJDMuQUNUSVZFUykpLmZpbHRlcihmdW5jdGlvbiAoZWxlbSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgX3RoaXMuX2NvbmZpZy5wYXJlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGFyZW50JykgPT09IF90aGlzLl9jb25maWcucGFyZW50O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBlbGVtLmNsYXNzTGlzdC5jb250YWlucyhDbGFzc05hbWUkMy5DT0xMQVBTRSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChhY3RpdmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGFjdGl2ZXMgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhY3RpdmVzKSB7XG4gICAgICAgIGFjdGl2ZXNEYXRhID0gJChhY3RpdmVzKS5ub3QodGhpcy5fc2VsZWN0b3IpLmRhdGEoREFUQV9LRVkkMyk7XG5cbiAgICAgICAgaWYgKGFjdGl2ZXNEYXRhICYmIGFjdGl2ZXNEYXRhLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHN0YXJ0RXZlbnQgPSAkLkV2ZW50KEV2ZW50JDMuU0hPVyk7XG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoc3RhcnRFdmVudCk7XG5cbiAgICAgIGlmIChzdGFydEV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGFjdGl2ZXMpIHtcbiAgICAgICAgQ29sbGFwc2UuX2pRdWVyeUludGVyZmFjZS5jYWxsKCQoYWN0aXZlcykubm90KHRoaXMuX3NlbGVjdG9yKSwgJ2hpZGUnKTtcblxuICAgICAgICBpZiAoIWFjdGl2ZXNEYXRhKSB7XG4gICAgICAgICAgJChhY3RpdmVzKS5kYXRhKERBVEFfS0VZJDMsIG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBkaW1lbnNpb24gPSB0aGlzLl9nZXREaW1lbnNpb24oKTtcblxuICAgICAgJCh0aGlzLl9lbGVtZW50KS5yZW1vdmVDbGFzcyhDbGFzc05hbWUkMy5DT0xMQVBTRSkuYWRkQ2xhc3MoQ2xhc3NOYW1lJDMuQ09MTEFQU0lORyk7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSAwO1xuXG4gICAgICBpZiAodGhpcy5fdHJpZ2dlckFycmF5Lmxlbmd0aCkge1xuICAgICAgICAkKHRoaXMuX3RyaWdnZXJBcnJheSkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lJDMuQ09MTEFQU0VEKS5hdHRyKCdhcmlhLWV4cGFuZGVkJywgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0VHJhbnNpdGlvbmluZyh0cnVlKTtcblxuICAgICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24gY29tcGxldGUoKSB7XG4gICAgICAgICQoX3RoaXMuX2VsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQzLkNPTExBUFNJTkcpLmFkZENsYXNzKENsYXNzTmFtZSQzLkNPTExBUFNFKS5hZGRDbGFzcyhDbGFzc05hbWUkMy5TSE9XKTtcbiAgICAgICAgX3RoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9ICcnO1xuXG4gICAgICAgIF90aGlzLnNldFRyYW5zaXRpb25pbmcoZmFsc2UpO1xuXG4gICAgICAgICQoX3RoaXMuX2VsZW1lbnQpLnRyaWdnZXIoRXZlbnQkMy5TSE9XTik7XG4gICAgICB9O1xuXG4gICAgICB2YXIgY2FwaXRhbGl6ZWREaW1lbnNpb24gPSBkaW1lbnNpb25bMF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSgxKTtcbiAgICAgIHZhciBzY3JvbGxTaXplID0gXCJzY3JvbGxcIiArIGNhcGl0YWxpemVkRGltZW5zaW9uO1xuICAgICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7XG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCBjb21wbGV0ZSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9IHRoaXMuX2VsZW1lbnRbc2Nyb2xsU2l6ZV0gKyBcInB4XCI7XG4gICAgfTtcblxuICAgIF9wcm90by5oaWRlID0gZnVuY3Rpb24gaGlkZSgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5faXNUcmFuc2l0aW9uaW5nIHx8ICEkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQzLlNIT1cpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0YXJ0RXZlbnQgPSAkLkV2ZW50KEV2ZW50JDMuSElERSk7XG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoc3RhcnRFdmVudCk7XG5cbiAgICAgIGlmIChzdGFydEV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGRpbWVuc2lvbiA9IHRoaXMuX2dldERpbWVuc2lvbigpO1xuXG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSB0aGlzLl9lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2RpbWVuc2lvbl0gKyBcInB4XCI7XG4gICAgICBVdGlsLnJlZmxvdyh0aGlzLl9lbGVtZW50KTtcbiAgICAgICQodGhpcy5fZWxlbWVudCkuYWRkQ2xhc3MoQ2xhc3NOYW1lJDMuQ09MTEFQU0lORykucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lJDMuQ09MTEFQU0UpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQzLlNIT1cpO1xuICAgICAgdmFyIHRyaWdnZXJBcnJheUxlbmd0aCA9IHRoaXMuX3RyaWdnZXJBcnJheS5sZW5ndGg7XG5cbiAgICAgIGlmICh0cmlnZ2VyQXJyYXlMZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJpZ2dlckFycmF5TGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgdHJpZ2dlciA9IHRoaXMuX3RyaWdnZXJBcnJheVtpXTtcbiAgICAgICAgICB2YXIgc2VsZWN0b3IgPSBVdGlsLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodHJpZ2dlcik7XG5cbiAgICAgICAgICBpZiAoc2VsZWN0b3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciAkZWxlbSA9ICQoW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkpO1xuXG4gICAgICAgICAgICBpZiAoISRlbGVtLmhhc0NsYXNzKENsYXNzTmFtZSQzLlNIT1cpKSB7XG4gICAgICAgICAgICAgICQodHJpZ2dlcikuYWRkQ2xhc3MoQ2xhc3NOYW1lJDMuQ09MTEFQU0VEKS5hdHRyKCdhcmlhLWV4cGFuZGVkJywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFRyYW5zaXRpb25pbmcodHJ1ZSk7XG5cbiAgICAgIHZhciBjb21wbGV0ZSA9IGZ1bmN0aW9uIGNvbXBsZXRlKCkge1xuICAgICAgICBfdGhpczIuc2V0VHJhbnNpdGlvbmluZyhmYWxzZSk7XG5cbiAgICAgICAgJChfdGhpczIuX2VsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQzLkNPTExBUFNJTkcpLmFkZENsYXNzKENsYXNzTmFtZSQzLkNPTExBUFNFKS50cmlnZ2VyKEV2ZW50JDMuSElEREVOKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9ICcnO1xuICAgICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7XG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCBjb21wbGV0ZSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLnNldFRyYW5zaXRpb25pbmcgPSBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uaW5nKGlzVHJhbnNpdGlvbmluZykge1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gaXNUcmFuc2l0aW9uaW5nO1xuICAgIH07XG5cbiAgICBfcHJvdG8uZGlzcG9zZSA9IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgICAkLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwgREFUQV9LRVkkMyk7XG4gICAgICB0aGlzLl9jb25maWcgPSBudWxsO1xuICAgICAgdGhpcy5fcGFyZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsO1xuICAgICAgdGhpcy5fdHJpZ2dlckFycmF5ID0gbnVsbDtcbiAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IG51bGw7XG4gICAgfSAvLyBQcml2YXRlXG4gICAgO1xuXG4gICAgX3Byb3RvLl9nZXRDb25maWcgPSBmdW5jdGlvbiBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgICAgY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgRGVmYXVsdCQxLCBjb25maWcpO1xuICAgICAgY29uZmlnLnRvZ2dsZSA9IEJvb2xlYW4oY29uZmlnLnRvZ2dsZSk7IC8vIENvZXJjZSBzdHJpbmcgdmFsdWVzXG5cbiAgICAgIFV0aWwudHlwZUNoZWNrQ29uZmlnKE5BTUUkMywgY29uZmlnLCBEZWZhdWx0VHlwZSQxKTtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0RGltZW5zaW9uID0gZnVuY3Rpb24gX2dldERpbWVuc2lvbigpIHtcbiAgICAgIHZhciBoYXNXaWR0aCA9ICQodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoRGltZW5zaW9uLldJRFRIKTtcbiAgICAgIHJldHVybiBoYXNXaWR0aCA/IERpbWVuc2lvbi5XSURUSCA6IERpbWVuc2lvbi5IRUlHSFQ7XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0UGFyZW50ID0gZnVuY3Rpb24gX2dldFBhcmVudCgpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgcGFyZW50O1xuXG4gICAgICBpZiAoVXRpbC5pc0VsZW1lbnQodGhpcy5fY29uZmlnLnBhcmVudCkpIHtcbiAgICAgICAgcGFyZW50ID0gdGhpcy5fY29uZmlnLnBhcmVudDsgLy8gSXQncyBhIGpRdWVyeSBvYmplY3RcblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX2NvbmZpZy5wYXJlbnQuanF1ZXJ5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHBhcmVudCA9IHRoaXMuX2NvbmZpZy5wYXJlbnRbMF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5fY29uZmlnLnBhcmVudCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzZWxlY3RvciA9IFwiW2RhdGEtdG9nZ2xlPVxcXCJjb2xsYXBzZVxcXCJdW2RhdGEtcGFyZW50PVxcXCJcIiArIHRoaXMuX2NvbmZpZy5wYXJlbnQgKyBcIlxcXCJdXCI7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBbXS5zbGljZS5jYWxsKHBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSk7XG4gICAgICAkKGNoaWxkcmVuKS5lYWNoKGZ1bmN0aW9uIChpLCBlbGVtZW50KSB7XG4gICAgICAgIF90aGlzMy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKENvbGxhcHNlLl9nZXRUYXJnZXRGcm9tRWxlbWVudChlbGVtZW50KSwgW2VsZW1lbnRdKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MgPSBmdW5jdGlvbiBfYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKGVsZW1lbnQsIHRyaWdnZXJBcnJheSkge1xuICAgICAgdmFyIGlzT3BlbiA9ICQoZWxlbWVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1lJDMuU0hPVyk7XG5cbiAgICAgIGlmICh0cmlnZ2VyQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICQodHJpZ2dlckFycmF5KS50b2dnbGVDbGFzcyhDbGFzc05hbWUkMy5DT0xMQVBTRUQsICFpc09wZW4pLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCBpc09wZW4pO1xuICAgICAgfVxuICAgIH0gLy8gU3RhdGljXG4gICAgO1xuXG4gICAgQ29sbGFwc2UuX2dldFRhcmdldEZyb21FbGVtZW50ID0gZnVuY3Rpb24gX2dldFRhcmdldEZyb21FbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgIHZhciBzZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtZW50KTtcbiAgICAgIHJldHVybiBzZWxlY3RvciA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpIDogbnVsbDtcbiAgICB9O1xuXG4gICAgQ29sbGFwc2UuX2pRdWVyeUludGVyZmFjZSA9IGZ1bmN0aW9uIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTtcbiAgICAgICAgdmFyIGRhdGEgPSAkdGhpcy5kYXRhKERBVEFfS0VZJDMpO1xuXG4gICAgICAgIHZhciBfY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgRGVmYXVsdCQxLCAkdGhpcy5kYXRhKCksIHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZyA/IGNvbmZpZyA6IHt9KTtcblxuICAgICAgICBpZiAoIWRhdGEgJiYgX2NvbmZpZy50b2dnbGUgJiYgL3Nob3d8aGlkZS8udGVzdChjb25maWcpKSB7XG4gICAgICAgICAgX2NvbmZpZy50b2dnbGUgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgIGRhdGEgPSBuZXcgQ29sbGFwc2UodGhpcywgX2NvbmZpZyk7XG4gICAgICAgICAgJHRoaXMuZGF0YShEQVRBX0tFWSQzLCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIG1ldGhvZCBuYW1lZCBcXFwiXCIgKyBjb25maWcgKyBcIlxcXCJcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBfY3JlYXRlQ2xhc3MoQ29sbGFwc2UsIG51bGwsIFt7XG4gICAgICBrZXk6IFwiVkVSU0lPTlwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBWRVJTSU9OJDM7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkRlZmF1bHRcIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gRGVmYXVsdCQxO1xuICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBDb2xsYXBzZTtcbiAgfSgpO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuXG4gICQoZG9jdW1lbnQpLm9uKEV2ZW50JDMuQ0xJQ0tfREFUQV9BUEksIFNlbGVjdG9yJDMuREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIC8vIHByZXZlbnREZWZhdWx0IG9ubHkgZm9yIDxhPiBlbGVtZW50cyAod2hpY2ggY2hhbmdlIHRoZSBVUkwpIG5vdCBpbnNpZGUgdGhlIGNvbGxhcHNpYmxlIGVsZW1lbnRcbiAgICBpZiAoZXZlbnQuY3VycmVudFRhcmdldC50YWdOYW1lID09PSAnQScpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyICR0cmlnZ2VyID0gJCh0aGlzKTtcbiAgICB2YXIgc2VsZWN0b3IgPSBVdGlsLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodGhpcyk7XG4gICAgdmFyIHNlbGVjdG9ycyA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikpO1xuICAgICQoc2VsZWN0b3JzKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkdGFyZ2V0ID0gJCh0aGlzKTtcbiAgICAgIHZhciBkYXRhID0gJHRhcmdldC5kYXRhKERBVEFfS0VZJDMpO1xuICAgICAgdmFyIGNvbmZpZyA9IGRhdGEgPyAndG9nZ2xlJyA6ICR0cmlnZ2VyLmRhdGEoKTtcblxuICAgICAgQ29sbGFwc2UuX2pRdWVyeUludGVyZmFjZS5jYWxsKCR0YXJnZXQsIGNvbmZpZyk7XG4gICAgfSk7XG4gIH0pO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIGpRdWVyeVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgJC5mbltOQU1FJDNdID0gQ29sbGFwc2UuX2pRdWVyeUludGVyZmFjZTtcbiAgJC5mbltOQU1FJDNdLkNvbnN0cnVjdG9yID0gQ29sbGFwc2U7XG5cbiAgJC5mbltOQU1FJDNdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbltOQU1FJDNdID0gSlFVRVJZX05PX0NPTkZMSUNUJDM7XG4gICAgcmV0dXJuIENvbGxhcHNlLl9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBDb25zdGFudHNcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBOQU1FJDQgPSAnZHJvcGRvd24nO1xuICB2YXIgVkVSU0lPTiQ0ID0gJzQuMy4xJztcbiAgdmFyIERBVEFfS0VZJDQgPSAnYnMuZHJvcGRvd24nO1xuICB2YXIgRVZFTlRfS0VZJDQgPSBcIi5cIiArIERBVEFfS0VZJDQ7XG4gIHZhciBEQVRBX0FQSV9LRVkkNCA9ICcuZGF0YS1hcGknO1xuICB2YXIgSlFVRVJZX05PX0NPTkZMSUNUJDQgPSAkLmZuW05BTUUkNF07XG4gIHZhciBFU0NBUEVfS0VZQ09ERSA9IDI3OyAvLyBLZXlib2FyZEV2ZW50LndoaWNoIHZhbHVlIGZvciBFc2NhcGUgKEVzYykga2V5XG5cbiAgdmFyIFNQQUNFX0tFWUNPREUgPSAzMjsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3Igc3BhY2Uga2V5XG5cbiAgdmFyIFRBQl9LRVlDT0RFID0gOTsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3IgdGFiIGtleVxuXG4gIHZhciBBUlJPV19VUF9LRVlDT0RFID0gMzg7IC8vIEtleWJvYXJkRXZlbnQud2hpY2ggdmFsdWUgZm9yIHVwIGFycm93IGtleVxuXG4gIHZhciBBUlJPV19ET1dOX0tFWUNPREUgPSA0MDsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3IgZG93biBhcnJvdyBrZXlcblxuICB2YXIgUklHSFRfTU9VU0VfQlVUVE9OX1dISUNIID0gMzsgLy8gTW91c2VFdmVudC53aGljaCB2YWx1ZSBmb3IgdGhlIHJpZ2h0IGJ1dHRvbiAoYXNzdW1pbmcgYSByaWdodC1oYW5kZWQgbW91c2UpXG5cbiAgdmFyIFJFR0VYUF9LRVlET1dOID0gbmV3IFJlZ0V4cChBUlJPV19VUF9LRVlDT0RFICsgXCJ8XCIgKyBBUlJPV19ET1dOX0tFWUNPREUgKyBcInxcIiArIEVTQ0FQRV9LRVlDT0RFKTtcbiAgdmFyIEV2ZW50JDQgPSB7XG4gICAgSElERTogXCJoaWRlXCIgKyBFVkVOVF9LRVkkNCxcbiAgICBISURERU46IFwiaGlkZGVuXCIgKyBFVkVOVF9LRVkkNCxcbiAgICBTSE9XOiBcInNob3dcIiArIEVWRU5UX0tFWSQ0LFxuICAgIFNIT1dOOiBcInNob3duXCIgKyBFVkVOVF9LRVkkNCxcbiAgICBDTElDSzogXCJjbGlja1wiICsgRVZFTlRfS0VZJDQsXG4gICAgQ0xJQ0tfREFUQV9BUEk6IFwiY2xpY2tcIiArIEVWRU5UX0tFWSQ0ICsgREFUQV9BUElfS0VZJDQsXG4gICAgS0VZRE9XTl9EQVRBX0FQSTogXCJrZXlkb3duXCIgKyBFVkVOVF9LRVkkNCArIERBVEFfQVBJX0tFWSQ0LFxuICAgIEtFWVVQX0RBVEFfQVBJOiBcImtleXVwXCIgKyBFVkVOVF9LRVkkNCArIERBVEFfQVBJX0tFWSQ0XG4gIH07XG4gIHZhciBDbGFzc05hbWUkNCA9IHtcbiAgICBESVNBQkxFRDogJ2Rpc2FibGVkJyxcbiAgICBTSE9XOiAnc2hvdycsXG4gICAgRFJPUFVQOiAnZHJvcHVwJyxcbiAgICBEUk9QUklHSFQ6ICdkcm9wcmlnaHQnLFxuICAgIERST1BMRUZUOiAnZHJvcGxlZnQnLFxuICAgIE1FTlVSSUdIVDogJ2Ryb3Bkb3duLW1lbnUtcmlnaHQnLFxuICAgIE1FTlVMRUZUOiAnZHJvcGRvd24tbWVudS1sZWZ0JyxcbiAgICBQT1NJVElPTl9TVEFUSUM6ICdwb3NpdGlvbi1zdGF0aWMnXG4gIH07XG4gIHZhciBTZWxlY3RvciQ0ID0ge1xuICAgIERBVEFfVE9HR0xFOiAnW2RhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIl0nLFxuICAgIEZPUk1fQ0hJTEQ6ICcuZHJvcGRvd24gZm9ybScsXG4gICAgTUVOVTogJy5kcm9wZG93bi1tZW51JyxcbiAgICBOQVZCQVJfTkFWOiAnLm5hdmJhci1uYXYnLFxuICAgIFZJU0lCTEVfSVRFTVM6ICcuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbTpub3QoLmRpc2FibGVkKTpub3QoOmRpc2FibGVkKSdcbiAgfTtcbiAgdmFyIEF0dGFjaG1lbnRNYXAgPSB7XG4gICAgVE9QOiAndG9wLXN0YXJ0JyxcbiAgICBUT1BFTkQ6ICd0b3AtZW5kJyxcbiAgICBCT1RUT006ICdib3R0b20tc3RhcnQnLFxuICAgIEJPVFRPTUVORDogJ2JvdHRvbS1lbmQnLFxuICAgIFJJR0hUOiAncmlnaHQtc3RhcnQnLFxuICAgIFJJR0hURU5EOiAncmlnaHQtZW5kJyxcbiAgICBMRUZUOiAnbGVmdC1zdGFydCcsXG4gICAgTEVGVEVORDogJ2xlZnQtZW5kJ1xuICB9O1xuICB2YXIgRGVmYXVsdCQyID0ge1xuICAgIG9mZnNldDogMCxcbiAgICBmbGlwOiB0cnVlLFxuICAgIGJvdW5kYXJ5OiAnc2Nyb2xsUGFyZW50JyxcbiAgICByZWZlcmVuY2U6ICd0b2dnbGUnLFxuICAgIGRpc3BsYXk6ICdkeW5hbWljJ1xuICB9O1xuICB2YXIgRGVmYXVsdFR5cGUkMiA9IHtcbiAgICBvZmZzZXQ6ICcobnVtYmVyfHN0cmluZ3xmdW5jdGlvbiknLFxuICAgIGZsaXA6ICdib29sZWFuJyxcbiAgICBib3VuZGFyeTogJyhzdHJpbmd8ZWxlbWVudCknLFxuICAgIHJlZmVyZW5jZTogJyhzdHJpbmd8ZWxlbWVudCknLFxuICAgIGRpc3BsYXk6ICdzdHJpbmcnXG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG4gIH07XG5cbiAgdmFyIERyb3Bkb3duID1cbiAgLyojX19QVVJFX18qL1xuICBmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRHJvcGRvd24oZWxlbWVudCwgY29uZmlnKSB7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgIHRoaXMuX3BvcHBlciA9IG51bGw7XG4gICAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICAgIHRoaXMuX21lbnUgPSB0aGlzLl9nZXRNZW51RWxlbWVudCgpO1xuICAgICAgdGhpcy5faW5OYXZiYXIgPSB0aGlzLl9kZXRlY3ROYXZiYXIoKTtcblxuICAgICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICB9IC8vIEdldHRlcnNcblxuXG4gICAgdmFyIF9wcm90byA9IERyb3Bkb3duLnByb3RvdHlwZTtcblxuICAgIC8vIFB1YmxpY1xuICAgIF9wcm90by50b2dnbGUgPSBmdW5jdGlvbiB0b2dnbGUoKSB7XG4gICAgICBpZiAodGhpcy5fZWxlbWVudC5kaXNhYmxlZCB8fCAkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQ0LkRJU0FCTEVEKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBwYXJlbnQgPSBEcm9wZG93bi5fZ2V0UGFyZW50RnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7XG5cbiAgICAgIHZhciBpc0FjdGl2ZSA9ICQodGhpcy5fbWVudSkuaGFzQ2xhc3MoQ2xhc3NOYW1lJDQuU0hPVyk7XG5cbiAgICAgIERyb3Bkb3duLl9jbGVhck1lbnVzKCk7XG5cbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiB0aGlzLl9lbGVtZW50XG4gICAgICB9O1xuICAgICAgdmFyIHNob3dFdmVudCA9ICQuRXZlbnQoRXZlbnQkNC5TSE9XLCByZWxhdGVkVGFyZ2V0KTtcbiAgICAgICQocGFyZW50KS50cmlnZ2VyKHNob3dFdmVudCk7XG5cbiAgICAgIGlmIChzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBEaXNhYmxlIHRvdGFsbHkgUG9wcGVyLmpzIGZvciBEcm9wZG93biBpbiBOYXZiYXJcblxuXG4gICAgICBpZiAoIXRoaXMuX2luTmF2YmFyKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDaGVjayBmb3IgUG9wcGVyIGRlcGVuZGVuY3lcbiAgICAgICAgICogUG9wcGVyIC0gaHR0cHM6Ly9wb3BwZXIuanMub3JnXG4gICAgICAgICAqL1xuICAgICAgICBpZiAodHlwZW9mIFBvcHBlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb290c3RyYXBcXCdzIGRyb3Bkb3ducyByZXF1aXJlIFBvcHBlci5qcyAoaHR0cHM6Ly9wb3BwZXIuanMub3JnLyknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fZWxlbWVudDtcblxuICAgICAgICBpZiAodGhpcy5fY29uZmlnLnJlZmVyZW5jZSA9PT0gJ3BhcmVudCcpIHtcbiAgICAgICAgICByZWZlcmVuY2VFbGVtZW50ID0gcGFyZW50O1xuICAgICAgICB9IGVsc2UgaWYgKFV0aWwuaXNFbGVtZW50KHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UpKSB7XG4gICAgICAgICAgcmVmZXJlbmNlRWxlbWVudCA9IHRoaXMuX2NvbmZpZy5yZWZlcmVuY2U7IC8vIENoZWNrIGlmIGl0J3MgalF1ZXJ5IGVsZW1lbnRcblxuICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fY29uZmlnLnJlZmVyZW5jZS5qcXVlcnkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fY29uZmlnLnJlZmVyZW5jZVswXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gSWYgYm91bmRhcnkgaXMgbm90IGBzY3JvbGxQYXJlbnRgLCB0aGVuIHNldCBwb3NpdGlvbiB0byBgc3RhdGljYFxuICAgICAgICAvLyB0byBhbGxvdyB0aGUgbWVudSB0byBcImVzY2FwZVwiIHRoZSBzY3JvbGwgcGFyZW50J3MgYm91bmRhcmllc1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzI0MjUxXG5cblxuICAgICAgICBpZiAodGhpcy5fY29uZmlnLmJvdW5kYXJ5ICE9PSAnc2Nyb2xsUGFyZW50Jykge1xuICAgICAgICAgICQocGFyZW50KS5hZGRDbGFzcyhDbGFzc05hbWUkNC5QT1NJVElPTl9TVEFUSUMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcG9wcGVyID0gbmV3IFBvcHBlcihyZWZlcmVuY2VFbGVtZW50LCB0aGlzLl9tZW51LCB0aGlzLl9nZXRQb3BwZXJDb25maWcoKSk7XG4gICAgICB9IC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSBhZGQgZXh0cmFcbiAgICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgdG8gdGhlIGJvZHkncyBpbW1lZGlhdGUgY2hpbGRyZW47XG4gICAgICAvLyBvbmx5IG5lZWRlZCBiZWNhdXNlIG9mIGJyb2tlbiBldmVudCBkZWxlZ2F0aW9uIG9uIGlPU1xuICAgICAgLy8gaHR0cHM6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDE0LzAyL21vdXNlX2V2ZW50X2J1Yi5odG1sXG5cblxuICAgICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiAkKHBhcmVudCkuY2xvc2VzdChTZWxlY3RvciQ0Lk5BVkJBUl9OQVYpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAkKGRvY3VtZW50LmJvZHkpLmNoaWxkcmVuKCkub24oJ21vdXNlb3ZlcicsIG51bGwsICQubm9vcCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuZm9jdXMoKTtcblxuICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCB0cnVlKTtcblxuICAgICAgJCh0aGlzLl9tZW51KS50b2dnbGVDbGFzcyhDbGFzc05hbWUkNC5TSE9XKTtcbiAgICAgICQocGFyZW50KS50b2dnbGVDbGFzcyhDbGFzc05hbWUkNC5TSE9XKS50cmlnZ2VyKCQuRXZlbnQoRXZlbnQkNC5TSE9XTiwgcmVsYXRlZFRhcmdldCkpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uc2hvdyA9IGZ1bmN0aW9uIHNob3coKSB7XG4gICAgICBpZiAodGhpcy5fZWxlbWVudC5kaXNhYmxlZCB8fCAkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQ0LkRJU0FCTEVEKSB8fCAkKHRoaXMuX21lbnUpLmhhc0NsYXNzKENsYXNzTmFtZSQ0LlNIT1cpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlbGF0ZWRUYXJnZXQgPSB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRoaXMuX2VsZW1lbnRcbiAgICAgIH07XG4gICAgICB2YXIgc2hvd0V2ZW50ID0gJC5FdmVudChFdmVudCQ0LlNIT1csIHJlbGF0ZWRUYXJnZXQpO1xuXG4gICAgICB2YXIgcGFyZW50ID0gRHJvcGRvd24uX2dldFBhcmVudEZyb21FbGVtZW50KHRoaXMuX2VsZW1lbnQpO1xuXG4gICAgICAkKHBhcmVudCkudHJpZ2dlcihzaG93RXZlbnQpO1xuXG4gICAgICBpZiAoc2hvd0V2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgJCh0aGlzLl9tZW51KS50b2dnbGVDbGFzcyhDbGFzc05hbWUkNC5TSE9XKTtcbiAgICAgICQocGFyZW50KS50b2dnbGVDbGFzcyhDbGFzc05hbWUkNC5TSE9XKS50cmlnZ2VyKCQuRXZlbnQoRXZlbnQkNC5TSE9XTiwgcmVsYXRlZFRhcmdldCkpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uaGlkZSA9IGZ1bmN0aW9uIGhpZGUoKSB7XG4gICAgICBpZiAodGhpcy5fZWxlbWVudC5kaXNhYmxlZCB8fCAkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQ0LkRJU0FCTEVEKSB8fCAhJCh0aGlzLl9tZW51KS5oYXNDbGFzcyhDbGFzc05hbWUkNC5TSE9XKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiB0aGlzLl9lbGVtZW50XG4gICAgICB9O1xuICAgICAgdmFyIGhpZGVFdmVudCA9ICQuRXZlbnQoRXZlbnQkNC5ISURFLCByZWxhdGVkVGFyZ2V0KTtcblxuICAgICAgdmFyIHBhcmVudCA9IERyb3Bkb3duLl9nZXRQYXJlbnRGcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcblxuICAgICAgJChwYXJlbnQpLnRyaWdnZXIoaGlkZUV2ZW50KTtcblxuICAgICAgaWYgKGhpZGVFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgICQodGhpcy5fbWVudSkudG9nZ2xlQ2xhc3MoQ2xhc3NOYW1lJDQuU0hPVyk7XG4gICAgICAkKHBhcmVudCkudG9nZ2xlQ2xhc3MoQ2xhc3NOYW1lJDQuU0hPVykudHJpZ2dlcigkLkV2ZW50KEV2ZW50JDQuSElEREVOLCByZWxhdGVkVGFyZ2V0KSk7XG4gICAgfTtcblxuICAgIF9wcm90by5kaXNwb3NlID0gZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICAgICQucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LCBEQVRBX0tFWSQ0KTtcbiAgICAgICQodGhpcy5fZWxlbWVudCkub2ZmKEVWRU5UX0tFWSQ0KTtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsO1xuICAgICAgdGhpcy5fbWVudSA9IG51bGw7XG5cbiAgICAgIGlmICh0aGlzLl9wb3BwZXIgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5fcG9wcGVyLmRlc3Ryb3koKTtcblxuICAgICAgICB0aGlzLl9wb3BwZXIgPSBudWxsO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8udXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgICAgdGhpcy5faW5OYXZiYXIgPSB0aGlzLl9kZXRlY3ROYXZiYXIoKTtcblxuICAgICAgaWYgKHRoaXMuX3BvcHBlciAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9wb3BwZXIuc2NoZWR1bGVVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9IC8vIFByaXZhdGVcbiAgICA7XG5cbiAgICBfcHJvdG8uX2FkZEV2ZW50TGlzdGVuZXJzID0gZnVuY3Rpb24gX2FkZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbihFdmVudCQ0LkNMSUNLLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgX3RoaXMudG9nZ2xlKCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9nZXRDb25maWcgPSBmdW5jdGlvbiBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgICAgY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0LCAkKHRoaXMuX2VsZW1lbnQpLmRhdGEoKSwgY29uZmlnKTtcbiAgICAgIFV0aWwudHlwZUNoZWNrQ29uZmlnKE5BTUUkNCwgY29uZmlnLCB0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRUeXBlKTtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0TWVudUVsZW1lbnQgPSBmdW5jdGlvbiBfZ2V0TWVudUVsZW1lbnQoKSB7XG4gICAgICBpZiAoIXRoaXMuX21lbnUpIHtcbiAgICAgICAgdmFyIHBhcmVudCA9IERyb3Bkb3duLl9nZXRQYXJlbnRGcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcblxuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgdGhpcy5fbWVudSA9IHBhcmVudC5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yJDQuTUVOVSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX21lbnU7XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0UGxhY2VtZW50ID0gZnVuY3Rpb24gX2dldFBsYWNlbWVudCgpIHtcbiAgICAgIHZhciAkcGFyZW50RHJvcGRvd24gPSAkKHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSk7XG4gICAgICB2YXIgcGxhY2VtZW50ID0gQXR0YWNobWVudE1hcC5CT1RUT007IC8vIEhhbmRsZSBkcm9wdXBcblxuICAgICAgaWYgKCRwYXJlbnREcm9wZG93bi5oYXNDbGFzcyhDbGFzc05hbWUkNC5EUk9QVVApKSB7XG4gICAgICAgIHBsYWNlbWVudCA9IEF0dGFjaG1lbnRNYXAuVE9QO1xuXG4gICAgICAgIGlmICgkKHRoaXMuX21lbnUpLmhhc0NsYXNzKENsYXNzTmFtZSQ0Lk1FTlVSSUdIVCkpIHtcbiAgICAgICAgICBwbGFjZW1lbnQgPSBBdHRhY2htZW50TWFwLlRPUEVORDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgkcGFyZW50RHJvcGRvd24uaGFzQ2xhc3MoQ2xhc3NOYW1lJDQuRFJPUFJJR0hUKSkge1xuICAgICAgICBwbGFjZW1lbnQgPSBBdHRhY2htZW50TWFwLlJJR0hUO1xuICAgICAgfSBlbHNlIGlmICgkcGFyZW50RHJvcGRvd24uaGFzQ2xhc3MoQ2xhc3NOYW1lJDQuRFJPUExFRlQpKSB7XG4gICAgICAgIHBsYWNlbWVudCA9IEF0dGFjaG1lbnRNYXAuTEVGVDtcbiAgICAgIH0gZWxzZSBpZiAoJCh0aGlzLl9tZW51KS5oYXNDbGFzcyhDbGFzc05hbWUkNC5NRU5VUklHSFQpKSB7XG4gICAgICAgIHBsYWNlbWVudCA9IEF0dGFjaG1lbnRNYXAuQk9UVE9NRU5EO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGxhY2VtZW50O1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2RldGVjdE5hdmJhciA9IGZ1bmN0aW9uIF9kZXRlY3ROYXZiYXIoKSB7XG4gICAgICByZXR1cm4gJCh0aGlzLl9lbGVtZW50KS5jbG9zZXN0KCcubmF2YmFyJykubGVuZ3RoID4gMDtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9nZXRPZmZzZXQgPSBmdW5jdGlvbiBfZ2V0T2Zmc2V0KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBvZmZzZXQgPSB7fTtcblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLl9jb25maWcub2Zmc2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG9mZnNldC5mbiA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgZGF0YS5vZmZzZXRzID0gX29iamVjdFNwcmVhZCh7fSwgZGF0YS5vZmZzZXRzLCBfdGhpczIuX2NvbmZpZy5vZmZzZXQoZGF0YS5vZmZzZXRzLCBfdGhpczIuX2VsZW1lbnQpIHx8IHt9KTtcbiAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9mZnNldC5vZmZzZXQgPSB0aGlzLl9jb25maWcub2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2Zmc2V0O1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldFBvcHBlckNvbmZpZyA9IGZ1bmN0aW9uIF9nZXRQb3BwZXJDb25maWcoKSB7XG4gICAgICB2YXIgcG9wcGVyQ29uZmlnID0ge1xuICAgICAgICBwbGFjZW1lbnQ6IHRoaXMuX2dldFBsYWNlbWVudCgpLFxuICAgICAgICBtb2RpZmllcnM6IHtcbiAgICAgICAgICBvZmZzZXQ6IHRoaXMuX2dldE9mZnNldCgpLFxuICAgICAgICAgIGZsaXA6IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRoaXMuX2NvbmZpZy5mbGlwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcmV2ZW50T3ZlcmZsb3c6IHtcbiAgICAgICAgICAgIGJvdW5kYXJpZXNFbGVtZW50OiB0aGlzLl9jb25maWcuYm91bmRhcnlcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gRGlzYWJsZSBQb3BwZXIuanMgaWYgd2UgaGF2ZSBhIHN0YXRpYyBkaXNwbGF5XG5cbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcuZGlzcGxheSA9PT0gJ3N0YXRpYycpIHtcbiAgICAgICAgcG9wcGVyQ29uZmlnLm1vZGlmaWVycy5hcHBseVN0eWxlID0ge1xuICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwb3BwZXJDb25maWc7XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBEcm9wZG93bi5falF1ZXJ5SW50ZXJmYWNlID0gZnVuY3Rpb24gX2pRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YShEQVRBX0tFWSQ0KTtcblxuICAgICAgICB2YXIgX2NvbmZpZyA9IHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnID8gY29uZmlnIDogbnVsbDtcblxuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICBkYXRhID0gbmV3IERyb3Bkb3duKHRoaXMsIF9jb25maWcpO1xuICAgICAgICAgICQodGhpcykuZGF0YShEQVRBX0tFWSQ0LCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIG1ldGhvZCBuYW1lZCBcXFwiXCIgKyBjb25maWcgKyBcIlxcXCJcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBEcm9wZG93bi5fY2xlYXJNZW51cyA9IGZ1bmN0aW9uIF9jbGVhck1lbnVzKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQgJiYgKGV2ZW50LndoaWNoID09PSBSSUdIVF9NT1VTRV9CVVRUT05fV0hJQ0ggfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBldmVudC53aGljaCAhPT0gVEFCX0tFWUNPREUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHRvZ2dsZXMgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IkNC5EQVRBX1RPR0dMRSkpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdG9nZ2xlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICB2YXIgcGFyZW50ID0gRHJvcGRvd24uX2dldFBhcmVudEZyb21FbGVtZW50KHRvZ2dsZXNbaV0pO1xuXG4gICAgICAgIHZhciBjb250ZXh0ID0gJCh0b2dnbGVzW2ldKS5kYXRhKERBVEFfS0VZJDQpO1xuICAgICAgICB2YXIgcmVsYXRlZFRhcmdldCA9IHtcbiAgICAgICAgICByZWxhdGVkVGFyZ2V0OiB0b2dnbGVzW2ldXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LnR5cGUgPT09ICdjbGljaycpIHtcbiAgICAgICAgICByZWxhdGVkVGFyZ2V0LmNsaWNrRXZlbnQgPSBldmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29udGV4dCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRyb3Bkb3duTWVudSA9IGNvbnRleHQuX21lbnU7XG5cbiAgICAgICAgaWYgKCEkKHBhcmVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1lJDQuU0hPVykpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudCAmJiAoZXZlbnQudHlwZSA9PT0gJ2NsaWNrJyAmJiAvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSB8fCBldmVudC50eXBlID09PSAna2V5dXAnICYmIGV2ZW50LndoaWNoID09PSBUQUJfS0VZQ09ERSkgJiYgJC5jb250YWlucyhwYXJlbnQsIGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBoaWRlRXZlbnQgPSAkLkV2ZW50KEV2ZW50JDQuSElERSwgcmVsYXRlZFRhcmdldCk7XG4gICAgICAgICQocGFyZW50KS50cmlnZ2VyKGhpZGVFdmVudCk7XG5cbiAgICAgICAgaWYgKGhpZGVFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSByZW1vdmUgdGhlIGV4dHJhXG4gICAgICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgd2UgYWRkZWQgZm9yIGlPUyBzdXBwb3J0XG5cblxuICAgICAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgICAgJChkb2N1bWVudC5ib2R5KS5jaGlsZHJlbigpLm9mZignbW91c2VvdmVyJywgbnVsbCwgJC5ub29wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRvZ2dsZXNbaV0uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XG4gICAgICAgICQoZHJvcGRvd25NZW51KS5yZW1vdmVDbGFzcyhDbGFzc05hbWUkNC5TSE9XKTtcbiAgICAgICAgJChwYXJlbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQ0LlNIT1cpLnRyaWdnZXIoJC5FdmVudChFdmVudCQ0LkhJRERFTiwgcmVsYXRlZFRhcmdldCkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBEcm9wZG93bi5fZ2V0UGFyZW50RnJvbUVsZW1lbnQgPSBmdW5jdGlvbiBfZ2V0UGFyZW50RnJvbUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgdmFyIHBhcmVudDtcbiAgICAgIHZhciBzZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgIHBhcmVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyZW50IHx8IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gICAgO1xuXG4gICAgRHJvcGRvd24uX2RhdGFBcGlLZXlkb3duSGFuZGxlciA9IGZ1bmN0aW9uIF9kYXRhQXBpS2V5ZG93bkhhbmRsZXIoZXZlbnQpIHtcbiAgICAgIC8vIElmIG5vdCBpbnB1dC90ZXh0YXJlYTpcbiAgICAgIC8vICAtIEFuZCBub3QgYSBrZXkgaW4gUkVHRVhQX0tFWURPV04gPT4gbm90IGEgZHJvcGRvd24gY29tbWFuZFxuICAgICAgLy8gSWYgaW5wdXQvdGV4dGFyZWE6XG4gICAgICAvLyAgLSBJZiBzcGFjZSBrZXkgPT4gbm90IGEgZHJvcGRvd24gY29tbWFuZFxuICAgICAgLy8gIC0gSWYga2V5IGlzIG90aGVyIHRoYW4gZXNjYXBlXG4gICAgICAvLyAgICAtIElmIGtleSBpcyBub3QgdXAgb3IgZG93biA9PiBub3QgYSBkcm9wZG93biBjb21tYW5kXG4gICAgICAvLyAgICAtIElmIHRyaWdnZXIgaW5zaWRlIHRoZSBtZW51ID0+IG5vdCBhIGRyb3Bkb3duIGNvbW1hbmRcbiAgICAgIGlmICgvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSA/IGV2ZW50LndoaWNoID09PSBTUEFDRV9LRVlDT0RFIHx8IGV2ZW50LndoaWNoICE9PSBFU0NBUEVfS0VZQ09ERSAmJiAoZXZlbnQud2hpY2ggIT09IEFSUk9XX0RPV05fS0VZQ09ERSAmJiBldmVudC53aGljaCAhPT0gQVJST1dfVVBfS0VZQ09ERSB8fCAkKGV2ZW50LnRhcmdldCkuY2xvc2VzdChTZWxlY3RvciQ0Lk1FTlUpLmxlbmd0aCkgOiAhUkVHRVhQX0tFWURPV04udGVzdChldmVudC53aGljaCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8ICQodGhpcykuaGFzQ2xhc3MoQ2xhc3NOYW1lJDQuRElTQUJMRUQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHBhcmVudCA9IERyb3Bkb3duLl9nZXRQYXJlbnRGcm9tRWxlbWVudCh0aGlzKTtcblxuICAgICAgdmFyIGlzQWN0aXZlID0gJChwYXJlbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQ0LlNIT1cpO1xuXG4gICAgICBpZiAoIWlzQWN0aXZlIHx8IGlzQWN0aXZlICYmIChldmVudC53aGljaCA9PT0gRVNDQVBFX0tFWUNPREUgfHwgZXZlbnQud2hpY2ggPT09IFNQQUNFX0tFWUNPREUpKSB7XG4gICAgICAgIGlmIChldmVudC53aGljaCA9PT0gRVNDQVBFX0tFWUNPREUpIHtcbiAgICAgICAgICB2YXIgdG9nZ2xlID0gcGFyZW50LnF1ZXJ5U2VsZWN0b3IoU2VsZWN0b3IkNC5EQVRBX1RPR0dMRSk7XG4gICAgICAgICAgJCh0b2dnbGUpLnRyaWdnZXIoJ2ZvY3VzJyk7XG4gICAgICAgIH1cblxuICAgICAgICAkKHRoaXMpLnRyaWdnZXIoJ2NsaWNrJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGl0ZW1zID0gW10uc2xpY2UuY2FsbChwYXJlbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3RvciQ0LlZJU0lCTEVfSVRFTVMpKTtcblxuICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBpbmRleCA9IGl0ZW1zLmluZGV4T2YoZXZlbnQudGFyZ2V0KTtcblxuICAgICAgaWYgKGV2ZW50LndoaWNoID09PSBBUlJPV19VUF9LRVlDT0RFICYmIGluZGV4ID4gMCkge1xuICAgICAgICAvLyBVcFxuICAgICAgICBpbmRleC0tO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQud2hpY2ggPT09IEFSUk9XX0RPV05fS0VZQ09ERSAmJiBpbmRleCA8IGl0ZW1zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgLy8gRG93blxuICAgICAgICBpbmRleCsrO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIGluZGV4ID0gMDtcbiAgICAgIH1cblxuICAgICAgaXRlbXNbaW5kZXhdLmZvY3VzKCk7XG4gICAgfTtcblxuICAgIF9jcmVhdGVDbGFzcyhEcm9wZG93biwgbnVsbCwgW3tcbiAgICAgIGtleTogXCJWRVJTSU9OXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIFZFUlNJT04kNDtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiRGVmYXVsdFwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBEZWZhdWx0JDI7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkRlZmF1bHRUeXBlXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIERlZmF1bHRUeXBlJDI7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIERyb3Bkb3duO1xuICB9KCk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJChkb2N1bWVudCkub24oRXZlbnQkNC5LRVlET1dOX0RBVEFfQVBJLCBTZWxlY3RvciQ0LkRBVEFfVE9HR0xFLCBEcm9wZG93bi5fZGF0YUFwaUtleWRvd25IYW5kbGVyKS5vbihFdmVudCQ0LktFWURPV05fREFUQV9BUEksIFNlbGVjdG9yJDQuTUVOVSwgRHJvcGRvd24uX2RhdGFBcGlLZXlkb3duSGFuZGxlcikub24oRXZlbnQkNC5DTElDS19EQVRBX0FQSSArIFwiIFwiICsgRXZlbnQkNC5LRVlVUF9EQVRBX0FQSSwgRHJvcGRvd24uX2NsZWFyTWVudXMpLm9uKEV2ZW50JDQuQ0xJQ0tfREFUQV9BUEksIFNlbGVjdG9yJDQuREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBEcm9wZG93bi5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoJCh0aGlzKSwgJ3RvZ2dsZScpO1xuICB9KS5vbihFdmVudCQ0LkNMSUNLX0RBVEFfQVBJLCBTZWxlY3RvciQ0LkZPUk1fQ0hJTEQsIGZ1bmN0aW9uIChlKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfSk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogalF1ZXJ5XG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICAkLmZuW05BTUUkNF0gPSBEcm9wZG93bi5falF1ZXJ5SW50ZXJmYWNlO1xuICAkLmZuW05BTUUkNF0uQ29uc3RydWN0b3IgPSBEcm9wZG93bjtcblxuICAkLmZuW05BTUUkNF0ubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAkLmZuW05BTUUkNF0gPSBKUVVFUllfTk9fQ09ORkxJQ1QkNDtcbiAgICByZXR1cm4gRHJvcGRvd24uX2pRdWVyeUludGVyZmFjZTtcbiAgfTtcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIENvbnN0YW50c1xuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgdmFyIE5BTUUkNSA9ICdtb2RhbCc7XG4gIHZhciBWRVJTSU9OJDUgPSAnNC4zLjEnO1xuICB2YXIgREFUQV9LRVkkNSA9ICdicy5tb2RhbCc7XG4gIHZhciBFVkVOVF9LRVkkNSA9IFwiLlwiICsgREFUQV9LRVkkNTtcbiAgdmFyIERBVEFfQVBJX0tFWSQ1ID0gJy5kYXRhLWFwaSc7XG4gIHZhciBKUVVFUllfTk9fQ09ORkxJQ1QkNSA9ICQuZm5bTkFNRSQ1XTtcbiAgdmFyIEVTQ0FQRV9LRVlDT0RFJDEgPSAyNzsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3IgRXNjYXBlIChFc2MpIGtleVxuXG4gIHZhciBEZWZhdWx0JDMgPSB7XG4gICAgYmFja2Ryb3A6IHRydWUsXG4gICAga2V5Ym9hcmQ6IHRydWUsXG4gICAgZm9jdXM6IHRydWUsXG4gICAgc2hvdzogdHJ1ZVxuICB9O1xuICB2YXIgRGVmYXVsdFR5cGUkMyA9IHtcbiAgICBiYWNrZHJvcDogJyhib29sZWFufHN0cmluZyknLFxuICAgIGtleWJvYXJkOiAnYm9vbGVhbicsXG4gICAgZm9jdXM6ICdib29sZWFuJyxcbiAgICBzaG93OiAnYm9vbGVhbidcbiAgfTtcbiAgdmFyIEV2ZW50JDUgPSB7XG4gICAgSElERTogXCJoaWRlXCIgKyBFVkVOVF9LRVkkNSxcbiAgICBISURERU46IFwiaGlkZGVuXCIgKyBFVkVOVF9LRVkkNSxcbiAgICBTSE9XOiBcInNob3dcIiArIEVWRU5UX0tFWSQ1LFxuICAgIFNIT1dOOiBcInNob3duXCIgKyBFVkVOVF9LRVkkNSxcbiAgICBGT0NVU0lOOiBcImZvY3VzaW5cIiArIEVWRU5UX0tFWSQ1LFxuICAgIFJFU0laRTogXCJyZXNpemVcIiArIEVWRU5UX0tFWSQ1LFxuICAgIENMSUNLX0RJU01JU1M6IFwiY2xpY2suZGlzbWlzc1wiICsgRVZFTlRfS0VZJDUsXG4gICAgS0VZRE9XTl9ESVNNSVNTOiBcImtleWRvd24uZGlzbWlzc1wiICsgRVZFTlRfS0VZJDUsXG4gICAgTU9VU0VVUF9ESVNNSVNTOiBcIm1vdXNldXAuZGlzbWlzc1wiICsgRVZFTlRfS0VZJDUsXG4gICAgTU9VU0VET1dOX0RJU01JU1M6IFwibW91c2Vkb3duLmRpc21pc3NcIiArIEVWRU5UX0tFWSQ1LFxuICAgIENMSUNLX0RBVEFfQVBJOiBcImNsaWNrXCIgKyBFVkVOVF9LRVkkNSArIERBVEFfQVBJX0tFWSQ1XG4gIH07XG4gIHZhciBDbGFzc05hbWUkNSA9IHtcbiAgICBTQ1JPTExBQkxFOiAnbW9kYWwtZGlhbG9nLXNjcm9sbGFibGUnLFxuICAgIFNDUk9MTEJBUl9NRUFTVVJFUjogJ21vZGFsLXNjcm9sbGJhci1tZWFzdXJlJyxcbiAgICBCQUNLRFJPUDogJ21vZGFsLWJhY2tkcm9wJyxcbiAgICBPUEVOOiAnbW9kYWwtb3BlbicsXG4gICAgRkFERTogJ2ZhZGUnLFxuICAgIFNIT1c6ICdzaG93J1xuICB9O1xuICB2YXIgU2VsZWN0b3IkNSA9IHtcbiAgICBESUFMT0c6ICcubW9kYWwtZGlhbG9nJyxcbiAgICBNT0RBTF9CT0RZOiAnLm1vZGFsLWJvZHknLFxuICAgIERBVEFfVE9HR0xFOiAnW2RhdGEtdG9nZ2xlPVwibW9kYWxcIl0nLFxuICAgIERBVEFfRElTTUlTUzogJ1tkYXRhLWRpc21pc3M9XCJtb2RhbFwiXScsXG4gICAgRklYRURfQ09OVEVOVDogJy5maXhlZC10b3AsIC5maXhlZC1ib3R0b20sIC5pcy1maXhlZCwgLnN0aWNreS10b3AnLFxuICAgIFNUSUNLWV9DT05URU5UOiAnLnN0aWNreS10b3AnXG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG4gIH07XG5cbiAgdmFyIE1vZGFsID1cbiAgLyojX19QVVJFX18qL1xuICBmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTW9kYWwoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgdGhpcy5fZGlhbG9nID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yJDUuRElBTE9HKTtcbiAgICAgIHRoaXMuX2JhY2tkcm9wID0gbnVsbDtcbiAgICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZTtcbiAgICAgIHRoaXMuX2lzQm9keU92ZXJmbG93aW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrID0gZmFsc2U7XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3Njcm9sbGJhcldpZHRoID0gMDtcbiAgICB9IC8vIEdldHRlcnNcblxuXG4gICAgdmFyIF9wcm90byA9IE1vZGFsLnByb3RvdHlwZTtcblxuICAgIC8vIFB1YmxpY1xuICAgIF9wcm90by50b2dnbGUgPSBmdW5jdGlvbiB0b2dnbGUocmVsYXRlZFRhcmdldCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2lzU2hvd24gPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdyhyZWxhdGVkVGFyZ2V0KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLnNob3cgPSBmdW5jdGlvbiBzaG93KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLl9pc1Nob3duIHx8IHRoaXMuX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICgkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQ1LkZBREUpKSB7XG4gICAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBzaG93RXZlbnQgPSAkLkV2ZW50KEV2ZW50JDUuU0hPVywge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiByZWxhdGVkVGFyZ2V0XG4gICAgICB9KTtcbiAgICAgICQodGhpcy5fZWxlbWVudCkudHJpZ2dlcihzaG93RXZlbnQpO1xuXG4gICAgICBpZiAodGhpcy5faXNTaG93biB8fCBzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pc1Nob3duID0gdHJ1ZTtcblxuICAgICAgdGhpcy5fY2hlY2tTY3JvbGxiYXIoKTtcblxuICAgICAgdGhpcy5fc2V0U2Nyb2xsYmFyKCk7XG5cbiAgICAgIHRoaXMuX2FkanVzdERpYWxvZygpO1xuXG4gICAgICB0aGlzLl9zZXRFc2NhcGVFdmVudCgpO1xuXG4gICAgICB0aGlzLl9zZXRSZXNpemVFdmVudCgpO1xuXG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLm9uKEV2ZW50JDUuQ0xJQ0tfRElTTUlTUywgU2VsZWN0b3IkNS5EQVRBX0RJU01JU1MsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICByZXR1cm4gX3RoaXMuaGlkZShldmVudCk7XG4gICAgICB9KTtcbiAgICAgICQodGhpcy5fZGlhbG9nKS5vbihFdmVudCQ1Lk1PVVNFRE9XTl9ESVNNSVNTLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICQoX3RoaXMuX2VsZW1lbnQpLm9uZShFdmVudCQ1Lk1PVVNFVVBfRElTTUlTUywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgaWYgKCQoZXZlbnQudGFyZ2V0KS5pcyhfdGhpcy5fZWxlbWVudCkpIHtcbiAgICAgICAgICAgIF90aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX3Nob3dCYWNrZHJvcChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5fc2hvd0VsZW1lbnQocmVsYXRlZFRhcmdldCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmhpZGUgPSBmdW5jdGlvbiBoaWRlKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5faXNTaG93biB8fCB0aGlzLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgaGlkZUV2ZW50ID0gJC5FdmVudChFdmVudCQ1LkhJREUpO1xuICAgICAgJCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKGhpZGVFdmVudCk7XG5cbiAgICAgIGlmICghdGhpcy5faXNTaG93biB8fCBoaWRlRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pc1Nob3duID0gZmFsc2U7XG4gICAgICB2YXIgdHJhbnNpdGlvbiA9ICQodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1lJDUuRkFERSk7XG5cbiAgICAgIGlmICh0cmFuc2l0aW9uKSB7XG4gICAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3NldEVzY2FwZUV2ZW50KCk7XG5cbiAgICAgIHRoaXMuX3NldFJlc2l6ZUV2ZW50KCk7XG5cbiAgICAgICQoZG9jdW1lbnQpLm9mZihFdmVudCQ1LkZPQ1VTSU4pO1xuICAgICAgJCh0aGlzLl9lbGVtZW50KS5yZW1vdmVDbGFzcyhDbGFzc05hbWUkNS5TSE9XKTtcbiAgICAgICQodGhpcy5fZWxlbWVudCkub2ZmKEV2ZW50JDUuQ0xJQ0tfRElTTUlTUyk7XG4gICAgICAkKHRoaXMuX2RpYWxvZykub2ZmKEV2ZW50JDUuTU9VU0VET1dOX0RJU01JU1MpO1xuXG4gICAgICBpZiAodHJhbnNpdGlvbikge1xuICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5faGlkZU1vZGFsKGV2ZW50KTtcbiAgICAgICAgfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2hpZGVNb2RhbCgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uZGlzcG9zZSA9IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgICBbd2luZG93LCB0aGlzLl9lbGVtZW50LCB0aGlzLl9kaWFsb2ddLmZvckVhY2goZnVuY3Rpb24gKGh0bWxFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiAkKGh0bWxFbGVtZW50KS5vZmYoRVZFTlRfS0VZJDUpO1xuICAgICAgfSk7XG4gICAgICAvKipcbiAgICAgICAqIGBkb2N1bWVudGAgaGFzIDIgZXZlbnRzIGBFdmVudC5GT0NVU0lOYCBhbmQgYEV2ZW50LkNMSUNLX0RBVEFfQVBJYFxuICAgICAgICogRG8gbm90IG1vdmUgYGRvY3VtZW50YCBpbiBgaHRtbEVsZW1lbnRzYCBhcnJheVxuICAgICAgICogSXQgd2lsbCByZW1vdmUgYEV2ZW50LkNMSUNLX0RBVEFfQVBJYCBldmVudCB0aGF0IHNob3VsZCByZW1haW5cbiAgICAgICAqL1xuXG4gICAgICAkKGRvY3VtZW50KS5vZmYoRXZlbnQkNS5GT0NVU0lOKTtcbiAgICAgICQucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LCBEQVRBX0tFWSQ1KTtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IG51bGw7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuX2RpYWxvZyA9IG51bGw7XG4gICAgICB0aGlzLl9iYWNrZHJvcCA9IG51bGw7XG4gICAgICB0aGlzLl9pc1Nob3duID0gbnVsbDtcbiAgICAgIHRoaXMuX2lzQm9keU92ZXJmbG93aW5nID0gbnVsbDtcbiAgICAgIHRoaXMuX2lnbm9yZUJhY2tkcm9wQ2xpY2sgPSBudWxsO1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gbnVsbDtcbiAgICAgIHRoaXMuX3Njcm9sbGJhcldpZHRoID0gbnVsbDtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmhhbmRsZVVwZGF0ZSA9IGZ1bmN0aW9uIGhhbmRsZVVwZGF0ZSgpIHtcbiAgICAgIHRoaXMuX2FkanVzdERpYWxvZygpO1xuICAgIH0gLy8gUHJpdmF0ZVxuICAgIDtcblxuICAgIF9wcm90by5fZ2V0Q29uZmlnID0gZnVuY3Rpb24gX2dldENvbmZpZyhjb25maWcpIHtcbiAgICAgIGNvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIERlZmF1bHQkMywgY29uZmlnKTtcbiAgICAgIFV0aWwudHlwZUNoZWNrQ29uZmlnKE5BTUUkNSwgY29uZmlnLCBEZWZhdWx0VHlwZSQzKTtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfTtcblxuICAgIF9wcm90by5fc2hvd0VsZW1lbnQgPSBmdW5jdGlvbiBfc2hvd0VsZW1lbnQocmVsYXRlZFRhcmdldCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciB0cmFuc2l0aW9uID0gJCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUkNS5GQURFKTtcblxuICAgICAgaWYgKCF0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUgfHwgdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAvLyBEb24ndCBtb3ZlIG1vZGFsJ3MgRE9NIHBvc2l0aW9uXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpO1xuXG4gICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcsIHRydWUpO1xuXG4gICAgICBpZiAoJCh0aGlzLl9kaWFsb2cpLmhhc0NsYXNzKENsYXNzTmFtZSQ1LlNDUk9MTEFCTEUpKSB7XG4gICAgICAgIHRoaXMuX2RpYWxvZy5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yJDUuTU9EQUxfQk9EWSkuc2Nyb2xsVG9wID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRyYW5zaXRpb24pIHtcbiAgICAgICAgVXRpbC5yZWZsb3codGhpcy5fZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgICQodGhpcy5fZWxlbWVudCkuYWRkQ2xhc3MoQ2xhc3NOYW1lJDUuU0hPVyk7XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcuZm9jdXMpIHtcbiAgICAgICAgdGhpcy5fZW5mb3JjZUZvY3VzKCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzaG93bkV2ZW50ID0gJC5FdmVudChFdmVudCQ1LlNIT1dOLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHJlbGF0ZWRUYXJnZXRcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgdHJhbnNpdGlvbkNvbXBsZXRlID0gZnVuY3Rpb24gdHJhbnNpdGlvbkNvbXBsZXRlKCkge1xuICAgICAgICBpZiAoX3RoaXMzLl9jb25maWcuZm9jdXMpIHtcbiAgICAgICAgICBfdGhpczMuX2VsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzMy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICAgICQoX3RoaXMzLl9lbGVtZW50KS50cmlnZ2VyKHNob3duRXZlbnQpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHRyYW5zaXRpb24pIHtcbiAgICAgICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fZGlhbG9nKTtcbiAgICAgICAgJCh0aGlzLl9kaWFsb2cpLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCB0cmFuc2l0aW9uQ29tcGxldGUpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2l0aW9uQ29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLl9lbmZvcmNlRm9jdXMgPSBmdW5jdGlvbiBfZW5mb3JjZUZvY3VzKCkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgICQoZG9jdW1lbnQpLm9mZihFdmVudCQ1LkZPQ1VTSU4pIC8vIEd1YXJkIGFnYWluc3QgaW5maW5pdGUgZm9jdXMgbG9vcFxuICAgICAgLm9uKEV2ZW50JDUuRk9DVVNJTiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGlmIChkb2N1bWVudCAhPT0gZXZlbnQudGFyZ2V0ICYmIF90aGlzNC5fZWxlbWVudCAhPT0gZXZlbnQudGFyZ2V0ICYmICQoX3RoaXM0Ll9lbGVtZW50KS5oYXMoZXZlbnQudGFyZ2V0KS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBfdGhpczQuX2VsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9wcm90by5fc2V0RXNjYXBlRXZlbnQgPSBmdW5jdGlvbiBfc2V0RXNjYXBlRXZlbnQoKSB7XG4gICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuX2lzU2hvd24gJiYgdGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICAgICQodGhpcy5fZWxlbWVudCkub24oRXZlbnQkNS5LRVlET1dOX0RJU01JU1MsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIGlmIChldmVudC53aGljaCA9PT0gRVNDQVBFX0tFWUNPREUkMSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgX3RoaXM1LmhpZGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5faXNTaG93bikge1xuICAgICAgICAkKHRoaXMuX2VsZW1lbnQpLm9mZihFdmVudCQ1LktFWURPV05fRElTTUlTUyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5fc2V0UmVzaXplRXZlbnQgPSBmdW5jdGlvbiBfc2V0UmVzaXplRXZlbnQoKSB7XG4gICAgICB2YXIgX3RoaXM2ID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuX2lzU2hvd24pIHtcbiAgICAgICAgJCh3aW5kb3cpLm9uKEV2ZW50JDUuUkVTSVpFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXM2LmhhbmRsZVVwZGF0ZShldmVudCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJCh3aW5kb3cpLm9mZihFdmVudCQ1LlJFU0laRSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5faGlkZU1vZGFsID0gZnVuY3Rpb24gX2hpZGVNb2RhbCgpIHtcbiAgICAgIHZhciBfdGhpczcgPSB0aGlzO1xuXG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHRydWUpO1xuXG4gICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcpO1xuXG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcblxuICAgICAgdGhpcy5fc2hvd0JhY2tkcm9wKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJChkb2N1bWVudC5ib2R5KS5yZW1vdmVDbGFzcyhDbGFzc05hbWUkNS5PUEVOKTtcblxuICAgICAgICBfdGhpczcuX3Jlc2V0QWRqdXN0bWVudHMoKTtcblxuICAgICAgICBfdGhpczcuX3Jlc2V0U2Nyb2xsYmFyKCk7XG5cbiAgICAgICAgJChfdGhpczcuX2VsZW1lbnQpLnRyaWdnZXIoRXZlbnQkNS5ISURERU4pO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9wcm90by5fcmVtb3ZlQmFja2Ryb3AgPSBmdW5jdGlvbiBfcmVtb3ZlQmFja2Ryb3AoKSB7XG4gICAgICBpZiAodGhpcy5fYmFja2Ryb3ApIHtcbiAgICAgICAgJCh0aGlzLl9iYWNrZHJvcCkucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMuX2JhY2tkcm9wID0gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLl9zaG93QmFja2Ryb3AgPSBmdW5jdGlvbiBfc2hvd0JhY2tkcm9wKGNhbGxiYWNrKSB7XG4gICAgICB2YXIgX3RoaXM4ID0gdGhpcztcblxuICAgICAgdmFyIGFuaW1hdGUgPSAkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQ1LkZBREUpID8gQ2xhc3NOYW1lJDUuRkFERSA6ICcnO1xuXG4gICAgICBpZiAodGhpcy5faXNTaG93biAmJiB0aGlzLl9jb25maWcuYmFja2Ryb3ApIHtcbiAgICAgICAgdGhpcy5fYmFja2Ryb3AgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5fYmFja2Ryb3AuY2xhc3NOYW1lID0gQ2xhc3NOYW1lJDUuQkFDS0RST1A7XG5cbiAgICAgICAgaWYgKGFuaW1hdGUpIHtcbiAgICAgICAgICB0aGlzLl9iYWNrZHJvcC5jbGFzc0xpc3QuYWRkKGFuaW1hdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgJCh0aGlzLl9iYWNrZHJvcCkuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSk7XG4gICAgICAgICQodGhpcy5fZWxlbWVudCkub24oRXZlbnQkNS5DTElDS19ESVNNSVNTLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBpZiAoX3RoaXM4Ll9pZ25vcmVCYWNrZHJvcENsaWNrKSB7XG4gICAgICAgICAgICBfdGhpczguX2lnbm9yZUJhY2tkcm9wQ2xpY2sgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ICE9PSBldmVudC5jdXJyZW50VGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF90aGlzOC5fY29uZmlnLmJhY2tkcm9wID09PSAnc3RhdGljJykge1xuICAgICAgICAgICAgX3RoaXM4Ll9lbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzOC5oaWRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoYW5pbWF0ZSkge1xuICAgICAgICAgIFV0aWwucmVmbG93KHRoaXMuX2JhY2tkcm9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgICQodGhpcy5fYmFja2Ryb3ApLmFkZENsYXNzKENsYXNzTmFtZSQ1LlNIT1cpO1xuXG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWFuaW1hdGUpIHtcbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBiYWNrZHJvcFRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fYmFja2Ryb3ApO1xuICAgICAgICAkKHRoaXMuX2JhY2tkcm9wKS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgY2FsbGJhY2spLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGJhY2tkcm9wVHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX2lzU2hvd24gJiYgdGhpcy5fYmFja2Ryb3ApIHtcbiAgICAgICAgJCh0aGlzLl9iYWNrZHJvcCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lJDUuU0hPVyk7XG5cbiAgICAgICAgdmFyIGNhbGxiYWNrUmVtb3ZlID0gZnVuY3Rpb24gY2FsbGJhY2tSZW1vdmUoKSB7XG4gICAgICAgICAgX3RoaXM4Ll9yZW1vdmVCYWNrZHJvcCgpO1xuXG4gICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoJCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUkNS5GQURFKSkge1xuICAgICAgICAgIHZhciBfYmFja2Ryb3BUcmFuc2l0aW9uRHVyYXRpb24gPSBVdGlsLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMuX2JhY2tkcm9wKTtcblxuICAgICAgICAgICQodGhpcy5fYmFja2Ryb3ApLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCBjYWxsYmFja1JlbW92ZSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoX2JhY2tkcm9wVHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFja1JlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfSAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gdGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSB1c2VkIHRvIGhhbmRsZSBvdmVyZmxvd2luZyBtb2RhbHNcbiAgICAvLyB0b2RvIChmYXQpOiB0aGVzZSBzaG91bGQgcHJvYmFibHkgYmUgcmVmYWN0b3JlZCBvdXQgb2YgbW9kYWwuanNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgO1xuXG4gICAgX3Byb3RvLl9hZGp1c3REaWFsb2cgPSBmdW5jdGlvbiBfYWRqdXN0RGlhbG9nKCkge1xuICAgICAgdmFyIGlzTW9kYWxPdmVyZmxvd2luZyA9IHRoaXMuX2VsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcblxuICAgICAgaWYgKCF0aGlzLl9pc0JvZHlPdmVyZmxvd2luZyAmJiBpc01vZGFsT3ZlcmZsb3dpbmcpIHtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nTGVmdCA9IHRoaXMuX3Njcm9sbGJhcldpZHRoICsgXCJweFwiO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5faXNCb2R5T3ZlcmZsb3dpbmcgJiYgIWlzTW9kYWxPdmVyZmxvd2luZykge1xuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9IHRoaXMuX3Njcm9sbGJhcldpZHRoICsgXCJweFwiO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uX3Jlc2V0QWRqdXN0bWVudHMgPSBmdW5jdGlvbiBfcmVzZXRBZGp1c3RtZW50cygpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ0xlZnQgPSAnJztcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0ID0gJyc7XG4gICAgfTtcblxuICAgIF9wcm90by5fY2hlY2tTY3JvbGxiYXIgPSBmdW5jdGlvbiBfY2hlY2tTY3JvbGxiYXIoKSB7XG4gICAgICB2YXIgcmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB0aGlzLl9pc0JvZHlPdmVyZmxvd2luZyA9IHJlY3QubGVmdCArIHJlY3QucmlnaHQgPCB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICAgIHRoaXMuX3Njcm9sbGJhcldpZHRoID0gdGhpcy5fZ2V0U2Nyb2xsYmFyV2lkdGgoKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9zZXRTY3JvbGxiYXIgPSBmdW5jdGlvbiBfc2V0U2Nyb2xsYmFyKCkge1xuICAgICAgdmFyIF90aGlzOSA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLl9pc0JvZHlPdmVyZmxvd2luZykge1xuICAgICAgICAvLyBOb3RlOiBET01Ob2RlLnN0eWxlLnBhZGRpbmdSaWdodCByZXR1cm5zIHRoZSBhY3R1YWwgdmFsdWUgb3IgJycgaWYgbm90IHNldFxuICAgICAgICAvLyAgIHdoaWxlICQoRE9NTm9kZSkuY3NzKCdwYWRkaW5nLXJpZ2h0JykgcmV0dXJucyB0aGUgY2FsY3VsYXRlZCB2YWx1ZSBvciAwIGlmIG5vdCBzZXRcbiAgICAgICAgdmFyIGZpeGVkQ29udGVudCA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3RvciQ1LkZJWEVEX0NPTlRFTlQpKTtcbiAgICAgICAgdmFyIHN0aWNreUNvbnRlbnQgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IkNS5TVElDS1lfQ09OVEVOVCkpOyAvLyBBZGp1c3QgZml4ZWQgY29udGVudCBwYWRkaW5nXG5cbiAgICAgICAgJChmaXhlZENvbnRlbnQpLmVhY2goZnVuY3Rpb24gKGluZGV4LCBlbGVtZW50KSB7XG4gICAgICAgICAgdmFyIGFjdHVhbFBhZGRpbmcgPSBlbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodDtcbiAgICAgICAgICB2YXIgY2FsY3VsYXRlZFBhZGRpbmcgPSAkKGVsZW1lbnQpLmNzcygncGFkZGluZy1yaWdodCcpO1xuICAgICAgICAgICQoZWxlbWVudCkuZGF0YSgncGFkZGluZy1yaWdodCcsIGFjdHVhbFBhZGRpbmcpLmNzcygncGFkZGluZy1yaWdodCcsIHBhcnNlRmxvYXQoY2FsY3VsYXRlZFBhZGRpbmcpICsgX3RoaXM5Ll9zY3JvbGxiYXJXaWR0aCArIFwicHhcIik7XG4gICAgICAgIH0pOyAvLyBBZGp1c3Qgc3RpY2t5IGNvbnRlbnQgbWFyZ2luXG5cbiAgICAgICAgJChzdGlja3lDb250ZW50KS5lYWNoKGZ1bmN0aW9uIChpbmRleCwgZWxlbWVudCkge1xuICAgICAgICAgIHZhciBhY3R1YWxNYXJnaW4gPSBlbGVtZW50LnN0eWxlLm1hcmdpblJpZ2h0O1xuICAgICAgICAgIHZhciBjYWxjdWxhdGVkTWFyZ2luID0gJChlbGVtZW50KS5jc3MoJ21hcmdpbi1yaWdodCcpO1xuICAgICAgICAgICQoZWxlbWVudCkuZGF0YSgnbWFyZ2luLXJpZ2h0JywgYWN0dWFsTWFyZ2luKS5jc3MoJ21hcmdpbi1yaWdodCcsIHBhcnNlRmxvYXQoY2FsY3VsYXRlZE1hcmdpbikgLSBfdGhpczkuX3Njcm9sbGJhcldpZHRoICsgXCJweFwiKTtcbiAgICAgICAgfSk7IC8vIEFkanVzdCBib2R5IHBhZGRpbmdcblxuICAgICAgICB2YXIgYWN0dWFsUGFkZGluZyA9IGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0O1xuICAgICAgICB2YXIgY2FsY3VsYXRlZFBhZGRpbmcgPSAkKGRvY3VtZW50LmJvZHkpLmNzcygncGFkZGluZy1yaWdodCcpO1xuICAgICAgICAkKGRvY3VtZW50LmJvZHkpLmRhdGEoJ3BhZGRpbmctcmlnaHQnLCBhY3R1YWxQYWRkaW5nKS5jc3MoJ3BhZGRpbmctcmlnaHQnLCBwYXJzZUZsb2F0KGNhbGN1bGF0ZWRQYWRkaW5nKSArIHRoaXMuX3Njcm9sbGJhcldpZHRoICsgXCJweFwiKTtcbiAgICAgIH1cblxuICAgICAgJChkb2N1bWVudC5ib2R5KS5hZGRDbGFzcyhDbGFzc05hbWUkNS5PUEVOKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9yZXNldFNjcm9sbGJhciA9IGZ1bmN0aW9uIF9yZXNldFNjcm9sbGJhcigpIHtcbiAgICAgIC8vIFJlc3RvcmUgZml4ZWQgY29udGVudCBwYWRkaW5nXG4gICAgICB2YXIgZml4ZWRDb250ZW50ID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFNlbGVjdG9yJDUuRklYRURfQ09OVEVOVCkpO1xuICAgICAgJChmaXhlZENvbnRlbnQpLmVhY2goZnVuY3Rpb24gKGluZGV4LCBlbGVtZW50KSB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gJChlbGVtZW50KS5kYXRhKCdwYWRkaW5nLXJpZ2h0Jyk7XG4gICAgICAgICQoZWxlbWVudCkucmVtb3ZlRGF0YSgncGFkZGluZy1yaWdodCcpO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9IHBhZGRpbmcgPyBwYWRkaW5nIDogJyc7XG4gICAgICB9KTsgLy8gUmVzdG9yZSBzdGlja3kgY29udGVudFxuXG4gICAgICB2YXIgZWxlbWVudHMgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJcIiArIFNlbGVjdG9yJDUuU1RJQ0tZX0NPTlRFTlQpKTtcbiAgICAgICQoZWxlbWVudHMpLmVhY2goZnVuY3Rpb24gKGluZGV4LCBlbGVtZW50KSB7XG4gICAgICAgIHZhciBtYXJnaW4gPSAkKGVsZW1lbnQpLmRhdGEoJ21hcmdpbi1yaWdodCcpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgbWFyZ2luICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICQoZWxlbWVudCkuY3NzKCdtYXJnaW4tcmlnaHQnLCBtYXJnaW4pLnJlbW92ZURhdGEoJ21hcmdpbi1yaWdodCcpO1xuICAgICAgICB9XG4gICAgICB9KTsgLy8gUmVzdG9yZSBib2R5IHBhZGRpbmdcblxuICAgICAgdmFyIHBhZGRpbmcgPSAkKGRvY3VtZW50LmJvZHkpLmRhdGEoJ3BhZGRpbmctcmlnaHQnKTtcbiAgICAgICQoZG9jdW1lbnQuYm9keSkucmVtb3ZlRGF0YSgncGFkZGluZy1yaWdodCcpO1xuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQgPSBwYWRkaW5nID8gcGFkZGluZyA6ICcnO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldFNjcm9sbGJhcldpZHRoID0gZnVuY3Rpb24gX2dldFNjcm9sbGJhcldpZHRoKCkge1xuICAgICAgLy8gdGh4IGQud2Fsc2hcbiAgICAgIHZhciBzY3JvbGxEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHNjcm9sbERpdi5jbGFzc05hbWUgPSBDbGFzc05hbWUkNS5TQ1JPTExCQVJfTUVBU1VSRVI7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcm9sbERpdik7XG4gICAgICB2YXIgc2Nyb2xsYmFyV2lkdGggPSBzY3JvbGxEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLSBzY3JvbGxEaXYuY2xpZW50V2lkdGg7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHNjcm9sbERpdik7XG4gICAgICByZXR1cm4gc2Nyb2xsYmFyV2lkdGg7XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBNb2RhbC5falF1ZXJ5SW50ZXJmYWNlID0gZnVuY3Rpb24gX2pRdWVyeUludGVyZmFjZShjb25maWcsIHJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YShEQVRBX0tFWSQ1KTtcblxuICAgICAgICB2YXIgX2NvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIERlZmF1bHQkMywgJCh0aGlzKS5kYXRhKCksIHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZyA/IGNvbmZpZyA6IHt9KTtcblxuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICBkYXRhID0gbmV3IE1vZGFsKHRoaXMsIF9jb25maWcpO1xuICAgICAgICAgICQodGhpcykuZGF0YShEQVRBX0tFWSQ1LCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIG1ldGhvZCBuYW1lZCBcXFwiXCIgKyBjb25maWcgKyBcIlxcXCJcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YVtjb25maWddKHJlbGF0ZWRUYXJnZXQpO1xuICAgICAgICB9IGVsc2UgaWYgKF9jb25maWcuc2hvdykge1xuICAgICAgICAgIGRhdGEuc2hvdyhyZWxhdGVkVGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9jcmVhdGVDbGFzcyhNb2RhbCwgbnVsbCwgW3tcbiAgICAgIGtleTogXCJWRVJTSU9OXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIFZFUlNJT04kNTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiRGVmYXVsdFwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBEZWZhdWx0JDM7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIE1vZGFsO1xuICB9KCk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJChkb2N1bWVudCkub24oRXZlbnQkNS5DTElDS19EQVRBX0FQSSwgU2VsZWN0b3IkNS5EQVRBX1RPR0dMRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIF90aGlzMTAgPSB0aGlzO1xuXG4gICAgdmFyIHRhcmdldDtcbiAgICB2YXIgc2VsZWN0b3IgPSBVdGlsLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodGhpcyk7XG5cbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgIHRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgIH1cblxuICAgIHZhciBjb25maWcgPSAkKHRhcmdldCkuZGF0YShEQVRBX0tFWSQ1KSA/ICd0b2dnbGUnIDogX29iamVjdFNwcmVhZCh7fSwgJCh0YXJnZXQpLmRhdGEoKSwgJCh0aGlzKS5kYXRhKCkpO1xuXG4gICAgaWYgKHRoaXMudGFnTmFtZSA9PT0gJ0EnIHx8IHRoaXMudGFnTmFtZSA9PT0gJ0FSRUEnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciAkdGFyZ2V0ID0gJCh0YXJnZXQpLm9uZShFdmVudCQ1LlNIT1csIGZ1bmN0aW9uIChzaG93RXZlbnQpIHtcbiAgICAgIGlmIChzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgLy8gT25seSByZWdpc3RlciBmb2N1cyByZXN0b3JlciBpZiBtb2RhbCB3aWxsIGFjdHVhbGx5IGdldCBzaG93blxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgICR0YXJnZXQub25lKEV2ZW50JDUuSElEREVOLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICgkKF90aGlzMTApLmlzKCc6dmlzaWJsZScpKSB7XG4gICAgICAgICAgX3RoaXMxMC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIE1vZGFsLl9qUXVlcnlJbnRlcmZhY2UuY2FsbCgkKHRhcmdldCksIGNvbmZpZywgdGhpcyk7XG4gIH0pO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIGpRdWVyeVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgJC5mbltOQU1FJDVdID0gTW9kYWwuX2pRdWVyeUludGVyZmFjZTtcbiAgJC5mbltOQU1FJDVdLkNvbnN0cnVjdG9yID0gTW9kYWw7XG5cbiAgJC5mbltOQU1FJDVdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbltOQU1FJDVdID0gSlFVRVJZX05PX0NPTkZMSUNUJDU7XG4gICAgcmV0dXJuIE1vZGFsLl9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCAodjQuMy4xKTogdG9vbHMvc2FuaXRpemVyLmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuICB2YXIgdXJpQXR0cnMgPSBbJ2JhY2tncm91bmQnLCAnY2l0ZScsICdocmVmJywgJ2l0ZW10eXBlJywgJ2xvbmdkZXNjJywgJ3Bvc3RlcicsICdzcmMnLCAneGxpbms6aHJlZiddO1xuICB2YXIgQVJJQV9BVFRSSUJVVEVfUEFUVEVSTiA9IC9eYXJpYS1bXFx3LV0qJC9pO1xuICB2YXIgRGVmYXVsdFdoaXRlbGlzdCA9IHtcbiAgICAvLyBHbG9iYWwgYXR0cmlidXRlcyBhbGxvd2VkIG9uIGFueSBzdXBwbGllZCBlbGVtZW50IGJlbG93LlxuICAgICcqJzogWydjbGFzcycsICdkaXInLCAnaWQnLCAnbGFuZycsICdyb2xlJywgQVJJQV9BVFRSSUJVVEVfUEFUVEVSTl0sXG4gICAgYTogWyd0YXJnZXQnLCAnaHJlZicsICd0aXRsZScsICdyZWwnXSxcbiAgICBhcmVhOiBbXSxcbiAgICBiOiBbXSxcbiAgICBicjogW10sXG4gICAgY29sOiBbXSxcbiAgICBjb2RlOiBbXSxcbiAgICBkaXY6IFtdLFxuICAgIGVtOiBbXSxcbiAgICBocjogW10sXG4gICAgaDE6IFtdLFxuICAgIGgyOiBbXSxcbiAgICBoMzogW10sXG4gICAgaDQ6IFtdLFxuICAgIGg1OiBbXSxcbiAgICBoNjogW10sXG4gICAgaTogW10sXG4gICAgaW1nOiBbJ3NyYycsICdhbHQnLCAndGl0bGUnLCAnd2lkdGgnLCAnaGVpZ2h0J10sXG4gICAgbGk6IFtdLFxuICAgIG9sOiBbXSxcbiAgICBwOiBbXSxcbiAgICBwcmU6IFtdLFxuICAgIHM6IFtdLFxuICAgIHNtYWxsOiBbXSxcbiAgICBzcGFuOiBbXSxcbiAgICBzdWI6IFtdLFxuICAgIHN1cDogW10sXG4gICAgc3Ryb25nOiBbXSxcbiAgICB1OiBbXSxcbiAgICB1bDogW11cbiAgICAvKipcbiAgICAgKiBBIHBhdHRlcm4gdGhhdCByZWNvZ25pemVzIGEgY29tbW9ubHkgdXNlZnVsIHN1YnNldCBvZiBVUkxzIHRoYXQgYXJlIHNhZmUuXG4gICAgICpcbiAgICAgKiBTaG91dG91dCB0byBBbmd1bGFyIDcgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iLzcuMi40L3BhY2thZ2VzL2NvcmUvc3JjL3Nhbml0aXphdGlvbi91cmxfc2FuaXRpemVyLnRzXG4gICAgICovXG5cbiAgfTtcbiAgdmFyIFNBRkVfVVJMX1BBVFRFUk4gPSAvXig/Oig/Omh0dHBzP3xtYWlsdG98ZnRwfHRlbHxmaWxlKTp8W14mOi8/I10qKD86Wy8/I118JCkpL2dpO1xuICAvKipcbiAgICogQSBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBzYWZlIGRhdGEgVVJMcy4gT25seSBtYXRjaGVzIGltYWdlLCB2aWRlbyBhbmQgYXVkaW8gdHlwZXMuXG4gICAqXG4gICAqIFNob3V0b3V0IHRvIEFuZ3VsYXIgNyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2Jsb2IvNy4yLjQvcGFja2FnZXMvY29yZS9zcmMvc2FuaXRpemF0aW9uL3VybF9zYW5pdGl6ZXIudHNcbiAgICovXG5cbiAgdmFyIERBVEFfVVJMX1BBVFRFUk4gPSAvXmRhdGE6KD86aW1hZ2VcXC8oPzpibXB8Z2lmfGpwZWd8anBnfHBuZ3x0aWZmfHdlYnApfHZpZGVvXFwvKD86bXBlZ3xtcDR8b2dnfHdlYm0pfGF1ZGlvXFwvKD86bXAzfG9nYXxvZ2d8b3B1cykpO2Jhc2U2NCxbYS16MC05Ky9dKz0qJC9pO1xuXG4gIGZ1bmN0aW9uIGFsbG93ZWRBdHRyaWJ1dGUoYXR0ciwgYWxsb3dlZEF0dHJpYnV0ZUxpc3QpIHtcbiAgICB2YXIgYXR0ck5hbWUgPSBhdHRyLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoYWxsb3dlZEF0dHJpYnV0ZUxpc3QuaW5kZXhPZihhdHRyTmFtZSkgIT09IC0xKSB7XG4gICAgICBpZiAodXJpQXR0cnMuaW5kZXhPZihhdHRyTmFtZSkgIT09IC0xKSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKGF0dHIubm9kZVZhbHVlLm1hdGNoKFNBRkVfVVJMX1BBVFRFUk4pIHx8IGF0dHIubm9kZVZhbHVlLm1hdGNoKERBVEFfVVJMX1BBVFRFUk4pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHJlZ0V4cCA9IGFsbG93ZWRBdHRyaWJ1dGVMaXN0LmZpbHRlcihmdW5jdGlvbiAoYXR0clJlZ2V4KSB7XG4gICAgICByZXR1cm4gYXR0clJlZ2V4IGluc3RhbmNlb2YgUmVnRXhwO1xuICAgIH0pOyAvLyBDaGVjayBpZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB2YWxpZGF0ZXMgdGhlIGF0dHJpYnV0ZS5cblxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gcmVnRXhwLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGF0dHJOYW1lLm1hdGNoKHJlZ0V4cFtpXSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2FuaXRpemVIdG1sKHVuc2FmZUh0bWwsIHdoaXRlTGlzdCwgc2FuaXRpemVGbikge1xuICAgIGlmICh1bnNhZmVIdG1sLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuc2FmZUh0bWw7XG4gICAgfVxuXG4gICAgaWYgKHNhbml0aXplRm4gJiYgdHlwZW9mIHNhbml0aXplRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBzYW5pdGl6ZUZuKHVuc2FmZUh0bWwpO1xuICAgIH1cblxuICAgIHZhciBkb21QYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuICAgIHZhciBjcmVhdGVkRG9jdW1lbnQgPSBkb21QYXJzZXIucGFyc2VGcm9tU3RyaW5nKHVuc2FmZUh0bWwsICd0ZXh0L2h0bWwnKTtcbiAgICB2YXIgd2hpdGVsaXN0S2V5cyA9IE9iamVjdC5rZXlzKHdoaXRlTGlzdCk7XG4gICAgdmFyIGVsZW1lbnRzID0gW10uc2xpY2UuY2FsbChjcmVhdGVkRG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKCcqJykpO1xuXG4gICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoaSwgbGVuKSB7XG4gICAgICB2YXIgZWwgPSBlbGVtZW50c1tpXTtcbiAgICAgIHZhciBlbE5hbWUgPSBlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBpZiAod2hpdGVsaXN0S2V5cy5pbmRleE9mKGVsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpID09PSAtMSkge1xuICAgICAgICBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcbiAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcbiAgICAgIH1cblxuICAgICAgdmFyIGF0dHJpYnV0ZUxpc3QgPSBbXS5zbGljZS5jYWxsKGVsLmF0dHJpYnV0ZXMpO1xuICAgICAgdmFyIHdoaXRlbGlzdGVkQXR0cmlidXRlcyA9IFtdLmNvbmNhdCh3aGl0ZUxpc3RbJyonXSB8fCBbXSwgd2hpdGVMaXN0W2VsTmFtZV0gfHwgW10pO1xuICAgICAgYXR0cmlidXRlTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyKSB7XG4gICAgICAgIGlmICghYWxsb3dlZEF0dHJpYnV0ZShhdHRyLCB3aGl0ZWxpc3RlZEF0dHJpYnV0ZXMpKSB7XG4gICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGF0dHIubm9kZU5hbWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGVsZW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB2YXIgX3JldCA9IF9sb29wKGksIGxlbik7XG5cbiAgICAgIGlmIChfcmV0ID09PSBcImNvbnRpbnVlXCIpIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVkRG9jdW1lbnQuYm9keS5pbm5lckhUTUw7XG4gIH1cblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIENvbnN0YW50c1xuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgdmFyIE5BTUUkNiA9ICd0b29sdGlwJztcbiAgdmFyIFZFUlNJT04kNiA9ICc0LjMuMSc7XG4gIHZhciBEQVRBX0tFWSQ2ID0gJ2JzLnRvb2x0aXAnO1xuICB2YXIgRVZFTlRfS0VZJDYgPSBcIi5cIiArIERBVEFfS0VZJDY7XG4gIHZhciBKUVVFUllfTk9fQ09ORkxJQ1QkNiA9ICQuZm5bTkFNRSQ2XTtcbiAgdmFyIENMQVNTX1BSRUZJWCA9ICdicy10b29sdGlwJztcbiAgdmFyIEJTQ0xTX1BSRUZJWF9SRUdFWCA9IG5ldyBSZWdFeHAoXCIoXnxcXFxccylcIiArIENMQVNTX1BSRUZJWCArIFwiXFxcXFMrXCIsICdnJyk7XG4gIHZhciBESVNBTExPV0VEX0FUVFJJQlVURVMgPSBbJ3Nhbml0aXplJywgJ3doaXRlTGlzdCcsICdzYW5pdGl6ZUZuJ107XG4gIHZhciBEZWZhdWx0VHlwZSQ0ID0ge1xuICAgIGFuaW1hdGlvbjogJ2Jvb2xlYW4nLFxuICAgIHRlbXBsYXRlOiAnc3RyaW5nJyxcbiAgICB0aXRsZTogJyhzdHJpbmd8ZWxlbWVudHxmdW5jdGlvbiknLFxuICAgIHRyaWdnZXI6ICdzdHJpbmcnLFxuICAgIGRlbGF5OiAnKG51bWJlcnxvYmplY3QpJyxcbiAgICBodG1sOiAnYm9vbGVhbicsXG4gICAgc2VsZWN0b3I6ICcoc3RyaW5nfGJvb2xlYW4pJyxcbiAgICBwbGFjZW1lbnQ6ICcoc3RyaW5nfGZ1bmN0aW9uKScsXG4gICAgb2Zmc2V0OiAnKG51bWJlcnxzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgICBjb250YWluZXI6ICcoc3RyaW5nfGVsZW1lbnR8Ym9vbGVhbiknLFxuICAgIGZhbGxiYWNrUGxhY2VtZW50OiAnKHN0cmluZ3xhcnJheSknLFxuICAgIGJvdW5kYXJ5OiAnKHN0cmluZ3xlbGVtZW50KScsXG4gICAgc2FuaXRpemU6ICdib29sZWFuJyxcbiAgICBzYW5pdGl6ZUZuOiAnKG51bGx8ZnVuY3Rpb24pJyxcbiAgICB3aGl0ZUxpc3Q6ICdvYmplY3QnXG4gIH07XG4gIHZhciBBdHRhY2htZW50TWFwJDEgPSB7XG4gICAgQVVUTzogJ2F1dG8nLFxuICAgIFRPUDogJ3RvcCcsXG4gICAgUklHSFQ6ICdyaWdodCcsXG4gICAgQk9UVE9NOiAnYm90dG9tJyxcbiAgICBMRUZUOiAnbGVmdCdcbiAgfTtcbiAgdmFyIERlZmF1bHQkNCA9IHtcbiAgICBhbmltYXRpb246IHRydWUsXG4gICAgdGVtcGxhdGU6ICc8ZGl2IGNsYXNzPVwidG9vbHRpcFwiIHJvbGU9XCJ0b29sdGlwXCI+JyArICc8ZGl2IGNsYXNzPVwiYXJyb3dcIj48L2Rpdj4nICsgJzxkaXYgY2xhc3M9XCJ0b29sdGlwLWlubmVyXCI+PC9kaXY+PC9kaXY+JyxcbiAgICB0cmlnZ2VyOiAnaG92ZXIgZm9jdXMnLFxuICAgIHRpdGxlOiAnJyxcbiAgICBkZWxheTogMCxcbiAgICBodG1sOiBmYWxzZSxcbiAgICBzZWxlY3RvcjogZmFsc2UsXG4gICAgcGxhY2VtZW50OiAndG9wJyxcbiAgICBvZmZzZXQ6IDAsXG4gICAgY29udGFpbmVyOiBmYWxzZSxcbiAgICBmYWxsYmFja1BsYWNlbWVudDogJ2ZsaXAnLFxuICAgIGJvdW5kYXJ5OiAnc2Nyb2xsUGFyZW50JyxcbiAgICBzYW5pdGl6ZTogdHJ1ZSxcbiAgICBzYW5pdGl6ZUZuOiBudWxsLFxuICAgIHdoaXRlTGlzdDogRGVmYXVsdFdoaXRlbGlzdFxuICB9O1xuICB2YXIgSG92ZXJTdGF0ZSA9IHtcbiAgICBTSE9XOiAnc2hvdycsXG4gICAgT1VUOiAnb3V0J1xuICB9O1xuICB2YXIgRXZlbnQkNiA9IHtcbiAgICBISURFOiBcImhpZGVcIiArIEVWRU5UX0tFWSQ2LFxuICAgIEhJRERFTjogXCJoaWRkZW5cIiArIEVWRU5UX0tFWSQ2LFxuICAgIFNIT1c6IFwic2hvd1wiICsgRVZFTlRfS0VZJDYsXG4gICAgU0hPV046IFwic2hvd25cIiArIEVWRU5UX0tFWSQ2LFxuICAgIElOU0VSVEVEOiBcImluc2VydGVkXCIgKyBFVkVOVF9LRVkkNixcbiAgICBDTElDSzogXCJjbGlja1wiICsgRVZFTlRfS0VZJDYsXG4gICAgRk9DVVNJTjogXCJmb2N1c2luXCIgKyBFVkVOVF9LRVkkNixcbiAgICBGT0NVU09VVDogXCJmb2N1c291dFwiICsgRVZFTlRfS0VZJDYsXG4gICAgTU9VU0VFTlRFUjogXCJtb3VzZWVudGVyXCIgKyBFVkVOVF9LRVkkNixcbiAgICBNT1VTRUxFQVZFOiBcIm1vdXNlbGVhdmVcIiArIEVWRU5UX0tFWSQ2XG4gIH07XG4gIHZhciBDbGFzc05hbWUkNiA9IHtcbiAgICBGQURFOiAnZmFkZScsXG4gICAgU0hPVzogJ3Nob3cnXG4gIH07XG4gIHZhciBTZWxlY3RvciQ2ID0ge1xuICAgIFRPT0xUSVA6ICcudG9vbHRpcCcsXG4gICAgVE9PTFRJUF9JTk5FUjogJy50b29sdGlwLWlubmVyJyxcbiAgICBBUlJPVzogJy5hcnJvdydcbiAgfTtcbiAgdmFyIFRyaWdnZXIgPSB7XG4gICAgSE9WRVI6ICdob3ZlcicsXG4gICAgRk9DVVM6ICdmb2N1cycsXG4gICAgQ0xJQ0s6ICdjbGljaycsXG4gICAgTUFOVUFMOiAnbWFudWFsJ1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIENsYXNzIERlZmluaXRpb25cbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuICB9O1xuXG4gIHZhciBUb29sdGlwID1cbiAgLyojX19QVVJFX18qL1xuICBmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVG9vbHRpcChlbGVtZW50LCBjb25maWcpIHtcbiAgICAgIC8qKlxuICAgICAgICogQ2hlY2sgZm9yIFBvcHBlciBkZXBlbmRlbmN5XG4gICAgICAgKiBQb3BwZXIgLSBodHRwczovL3BvcHBlci5qcy5vcmdcbiAgICAgICAqL1xuICAgICAgaWYgKHR5cGVvZiBQb3BwZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Jvb3RzdHJhcFxcJ3MgdG9vbHRpcHMgcmVxdWlyZSBQb3BwZXIuanMgKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy8pJyk7XG4gICAgICB9IC8vIHByaXZhdGVcblxuXG4gICAgICB0aGlzLl9pc0VuYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fdGltZW91dCA9IDA7XG4gICAgICB0aGlzLl9ob3ZlclN0YXRlID0gJyc7XG4gICAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyID0ge307XG4gICAgICB0aGlzLl9wb3BwZXIgPSBudWxsOyAvLyBQcm90ZWN0ZWRcblxuICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgIHRoaXMuY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgICB0aGlzLnRpcCA9IG51bGw7XG5cbiAgICAgIHRoaXMuX3NldExpc3RlbmVycygpO1xuICAgIH0gLy8gR2V0dGVyc1xuXG5cbiAgICB2YXIgX3Byb3RvID0gVG9vbHRpcC5wcm90b3R5cGU7XG5cbiAgICAvLyBQdWJsaWNcbiAgICBfcHJvdG8uZW5hYmxlID0gZnVuY3Rpb24gZW5hYmxlKCkge1xuICAgICAgdGhpcy5faXNFbmFibGVkID0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmRpc2FibGUgPSBmdW5jdGlvbiBkaXNhYmxlKCkge1xuICAgICAgdGhpcy5faXNFbmFibGVkID0gZmFsc2U7XG4gICAgfTtcblxuICAgIF9wcm90by50b2dnbGVFbmFibGVkID0gZnVuY3Rpb24gdG9nZ2xlRW5hYmxlZCgpIHtcbiAgICAgIHRoaXMuX2lzRW5hYmxlZCA9ICF0aGlzLl9pc0VuYWJsZWQ7XG4gICAgfTtcblxuICAgIF9wcm90by50b2dnbGUgPSBmdW5jdGlvbiB0b2dnbGUoZXZlbnQpIHtcbiAgICAgIGlmICghdGhpcy5faXNFbmFibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgIHZhciBkYXRhS2V5ID0gdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWTtcbiAgICAgICAgdmFyIGNvbnRleHQgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmRhdGEoZGF0YUtleSk7XG5cbiAgICAgICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICAgICAgY29udGV4dCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKGV2ZW50LmN1cnJlbnRUYXJnZXQsIHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkpO1xuICAgICAgICAgICQoZXZlbnQuY3VycmVudFRhcmdldCkuZGF0YShkYXRhS2V5LCBjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQuX2FjdGl2ZVRyaWdnZXIuY2xpY2sgPSAhY29udGV4dC5fYWN0aXZlVHJpZ2dlci5jbGljaztcblxuICAgICAgICBpZiAoY29udGV4dC5faXNXaXRoQWN0aXZlVHJpZ2dlcigpKSB7XG4gICAgICAgICAgY29udGV4dC5fZW50ZXIobnVsbCwgY29udGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGV4dC5fbGVhdmUobnVsbCwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICgkKHRoaXMuZ2V0VGlwRWxlbWVudCgpKS5oYXNDbGFzcyhDbGFzc05hbWUkNi5TSE9XKSkge1xuICAgICAgICAgIHRoaXMuX2xlYXZlKG51bGwsIHRoaXMpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZW50ZXIobnVsbCwgdGhpcyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5kaXNwb3NlID0gZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICAgICQucmVtb3ZlRGF0YSh0aGlzLmVsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVkpO1xuICAgICAgJCh0aGlzLmVsZW1lbnQpLm9mZih0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0tFWSk7XG4gICAgICAkKHRoaXMuZWxlbWVudCkuY2xvc2VzdCgnLm1vZGFsJykub2ZmKCdoaWRlLmJzLm1vZGFsJyk7XG5cbiAgICAgIGlmICh0aGlzLnRpcCkge1xuICAgICAgICAkKHRoaXMudGlwKS5yZW1vdmUoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faXNFbmFibGVkID0gbnVsbDtcbiAgICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsO1xuICAgICAgdGhpcy5faG92ZXJTdGF0ZSA9IG51bGw7XG4gICAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyID0gbnVsbDtcblxuICAgICAgaWYgKHRoaXMuX3BvcHBlciAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9wb3BwZXIuZGVzdHJveSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9wb3BwZXIgPSBudWxsO1xuICAgICAgdGhpcy5lbGVtZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuY29uZmlnID0gbnVsbDtcbiAgICAgIHRoaXMudGlwID0gbnVsbDtcbiAgICB9O1xuXG4gICAgX3Byb3RvLnNob3cgPSBmdW5jdGlvbiBzaG93KCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKCQodGhpcy5lbGVtZW50KS5jc3MoJ2Rpc3BsYXknKSA9PT0gJ25vbmUnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHVzZSBzaG93IG9uIHZpc2libGUgZWxlbWVudHMnKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHNob3dFdmVudCA9ICQuRXZlbnQodGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5TSE9XKTtcblxuICAgICAgaWYgKHRoaXMuaXNXaXRoQ29udGVudCgpICYmIHRoaXMuX2lzRW5hYmxlZCkge1xuICAgICAgICAkKHRoaXMuZWxlbWVudCkudHJpZ2dlcihzaG93RXZlbnQpO1xuICAgICAgICB2YXIgc2hhZG93Um9vdCA9IFV0aWwuZmluZFNoYWRvd1Jvb3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgdmFyIGlzSW5UaGVEb20gPSAkLmNvbnRhaW5zKHNoYWRvd1Jvb3QgIT09IG51bGwgPyBzaGFkb3dSb290IDogdGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCB0aGlzLmVsZW1lbnQpO1xuXG4gICAgICAgIGlmIChzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgfHwgIWlzSW5UaGVEb20pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdGlwID0gdGhpcy5nZXRUaXBFbGVtZW50KCk7XG4gICAgICAgIHZhciB0aXBJZCA9IFV0aWwuZ2V0VUlEKHRoaXMuY29uc3RydWN0b3IuTkFNRSk7XG4gICAgICAgIHRpcC5zZXRBdHRyaWJ1dGUoJ2lkJywgdGlwSWQpO1xuICAgICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgdGlwSWQpO1xuICAgICAgICB0aGlzLnNldENvbnRlbnQoKTtcblxuICAgICAgICBpZiAodGhpcy5jb25maWcuYW5pbWF0aW9uKSB7XG4gICAgICAgICAgJCh0aXApLmFkZENsYXNzKENsYXNzTmFtZSQ2LkZBREUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBsYWNlbWVudCA9IHR5cGVvZiB0aGlzLmNvbmZpZy5wbGFjZW1lbnQgPT09ICdmdW5jdGlvbicgPyB0aGlzLmNvbmZpZy5wbGFjZW1lbnQuY2FsbCh0aGlzLCB0aXAsIHRoaXMuZWxlbWVudCkgOiB0aGlzLmNvbmZpZy5wbGFjZW1lbnQ7XG5cbiAgICAgICAgdmFyIGF0dGFjaG1lbnQgPSB0aGlzLl9nZXRBdHRhY2htZW50KHBsYWNlbWVudCk7XG5cbiAgICAgICAgdGhpcy5hZGRBdHRhY2htZW50Q2xhc3MoYXR0YWNobWVudCk7XG5cbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IHRoaXMuX2dldENvbnRhaW5lcigpO1xuXG4gICAgICAgICQodGlwKS5kYXRhKHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVksIHRoaXMpO1xuXG4gICAgICAgIGlmICghJC5jb250YWlucyh0aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHRoaXMudGlwKSkge1xuICAgICAgICAgICQodGlwKS5hcHBlbmRUbyhjb250YWluZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgJCh0aGlzLmVsZW1lbnQpLnRyaWdnZXIodGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5JTlNFUlRFRCk7XG4gICAgICAgIHRoaXMuX3BvcHBlciA9IG5ldyBQb3BwZXIodGhpcy5lbGVtZW50LCB0aXAsIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6IGF0dGFjaG1lbnQsXG4gICAgICAgICAgbW9kaWZpZXJzOiB7XG4gICAgICAgICAgICBvZmZzZXQ6IHRoaXMuX2dldE9mZnNldCgpLFxuICAgICAgICAgICAgZmxpcDoge1xuICAgICAgICAgICAgICBiZWhhdmlvcjogdGhpcy5jb25maWcuZmFsbGJhY2tQbGFjZW1lbnRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhcnJvdzoge1xuICAgICAgICAgICAgICBlbGVtZW50OiBTZWxlY3RvciQ2LkFSUk9XXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJldmVudE92ZXJmbG93OiB7XG4gICAgICAgICAgICAgIGJvdW5kYXJpZXNFbGVtZW50OiB0aGlzLmNvbmZpZy5ib3VuZGFyeVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25DcmVhdGU6IGZ1bmN0aW9uIG9uQ3JlYXRlKGRhdGEpIHtcbiAgICAgICAgICAgIGlmIChkYXRhLm9yaWdpbmFsUGxhY2VtZW50ICE9PSBkYXRhLnBsYWNlbWVudCkge1xuICAgICAgICAgICAgICBfdGhpcy5faGFuZGxlUG9wcGVyUGxhY2VtZW50Q2hhbmdlKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25VcGRhdGU6IGZ1bmN0aW9uIG9uVXBkYXRlKGRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5faGFuZGxlUG9wcGVyUGxhY2VtZW50Q2hhbmdlKGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgICQodGlwKS5hZGRDbGFzcyhDbGFzc05hbWUkNi5TSE9XKTsgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIGFkZCBleHRyYVxuICAgICAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHRvIHRoZSBib2R5J3MgaW1tZWRpYXRlIGNoaWxkcmVuO1xuICAgICAgICAvLyBvbmx5IG5lZWRlZCBiZWNhdXNlIG9mIGJyb2tlbiBldmVudCBkZWxlZ2F0aW9uIG9uIGlPU1xuICAgICAgICAvLyBodHRwczovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMTQvMDIvbW91c2VfZXZlbnRfYnViLmh0bWxcblxuICAgICAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgICAgJChkb2N1bWVudC5ib2R5KS5jaGlsZHJlbigpLm9uKCdtb3VzZW92ZXInLCBudWxsLCAkLm5vb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24gY29tcGxldGUoKSB7XG4gICAgICAgICAgaWYgKF90aGlzLmNvbmZpZy5hbmltYXRpb24pIHtcbiAgICAgICAgICAgIF90aGlzLl9maXhUcmFuc2l0aW9uKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHByZXZIb3ZlclN0YXRlID0gX3RoaXMuX2hvdmVyU3RhdGU7XG4gICAgICAgICAgX3RoaXMuX2hvdmVyU3RhdGUgPSBudWxsO1xuICAgICAgICAgICQoX3RoaXMuZWxlbWVudCkudHJpZ2dlcihfdGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5TSE9XTik7XG5cbiAgICAgICAgICBpZiAocHJldkhvdmVyU3RhdGUgPT09IEhvdmVyU3RhdGUuT1VUKSB7XG4gICAgICAgICAgICBfdGhpcy5fbGVhdmUobnVsbCwgX3RoaXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoJCh0aGlzLnRpcCkuaGFzQ2xhc3MoQ2xhc3NOYW1lJDYuRkFERSkpIHtcbiAgICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLnRpcCk7XG4gICAgICAgICAgJCh0aGlzLnRpcCkub25lKFV0aWwuVFJBTlNJVElPTl9FTkQsIGNvbXBsZXRlKS5lbXVsYXRlVHJhbnNpdGlvbkVuZCh0cmFuc2l0aW9uRHVyYXRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLmhpZGUgPSBmdW5jdGlvbiBoaWRlKGNhbGxiYWNrKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIHRpcCA9IHRoaXMuZ2V0VGlwRWxlbWVudCgpO1xuICAgICAgdmFyIGhpZGVFdmVudCA9ICQuRXZlbnQodGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5ISURFKTtcblxuICAgICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24gY29tcGxldGUoKSB7XG4gICAgICAgIGlmIChfdGhpczIuX2hvdmVyU3RhdGUgIT09IEhvdmVyU3RhdGUuU0hPVyAmJiB0aXAucGFyZW50Tm9kZSkge1xuICAgICAgICAgIHRpcC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRpcCk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczIuX2NsZWFuVGlwQ2xhc3MoKTtcblxuICAgICAgICBfdGhpczIuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknKTtcblxuICAgICAgICAkKF90aGlzMi5lbGVtZW50KS50cmlnZ2VyKF90aGlzMi5jb25zdHJ1Y3Rvci5FdmVudC5ISURERU4pO1xuXG4gICAgICAgIGlmIChfdGhpczIuX3BvcHBlciAhPT0gbnVsbCkge1xuICAgICAgICAgIF90aGlzMi5fcG9wcGVyLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgICQodGhpcy5lbGVtZW50KS50cmlnZ2VyKGhpZGVFdmVudCk7XG5cbiAgICAgIGlmIChoaWRlRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAkKHRpcCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lJDYuU0hPVyk7IC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSByZW1vdmUgdGhlIGV4dHJhXG4gICAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHdlIGFkZGVkIGZvciBpT1Mgc3VwcG9ydFxuXG4gICAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgICQoZG9jdW1lbnQuYm9keSkuY2hpbGRyZW4oKS5vZmYoJ21vdXNlb3ZlcicsIG51bGwsICQubm9vcCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVHJpZ2dlci5DTElDS10gPSBmYWxzZTtcbiAgICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVHJpZ2dlci5GT0NVU10gPSBmYWxzZTtcbiAgICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVHJpZ2dlci5IT1ZFUl0gPSBmYWxzZTtcblxuICAgICAgaWYgKCQodGhpcy50aXApLmhhc0NsYXNzKENsYXNzTmFtZSQ2LkZBREUpKSB7XG4gICAgICAgIHZhciB0cmFuc2l0aW9uRHVyYXRpb24gPSBVdGlsLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRpcCk7XG4gICAgICAgICQodGlwKS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgY29tcGxldGUpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9ob3ZlclN0YXRlID0gJyc7XG4gICAgfTtcblxuICAgIF9wcm90by51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICBpZiAodGhpcy5fcG9wcGVyICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX3BvcHBlci5zY2hlZHVsZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH0gLy8gUHJvdGVjdGVkXG4gICAgO1xuXG4gICAgX3Byb3RvLmlzV2l0aENvbnRlbnQgPSBmdW5jdGlvbiBpc1dpdGhDb250ZW50KCkge1xuICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5nZXRUaXRsZSgpKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmFkZEF0dGFjaG1lbnRDbGFzcyA9IGZ1bmN0aW9uIGFkZEF0dGFjaG1lbnRDbGFzcyhhdHRhY2htZW50KSB7XG4gICAgICAkKHRoaXMuZ2V0VGlwRWxlbWVudCgpKS5hZGRDbGFzcyhDTEFTU19QUkVGSVggKyBcIi1cIiArIGF0dGFjaG1lbnQpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uZ2V0VGlwRWxlbWVudCA9IGZ1bmN0aW9uIGdldFRpcEVsZW1lbnQoKSB7XG4gICAgICB0aGlzLnRpcCA9IHRoaXMudGlwIHx8ICQodGhpcy5jb25maWcudGVtcGxhdGUpWzBdO1xuICAgICAgcmV0dXJuIHRoaXMudGlwO1xuICAgIH07XG5cbiAgICBfcHJvdG8uc2V0Q29udGVudCA9IGZ1bmN0aW9uIHNldENvbnRlbnQoKSB7XG4gICAgICB2YXIgdGlwID0gdGhpcy5nZXRUaXBFbGVtZW50KCk7XG4gICAgICB0aGlzLnNldEVsZW1lbnRDb250ZW50KCQodGlwLnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IkNi5UT09MVElQX0lOTkVSKSksIHRoaXMuZ2V0VGl0bGUoKSk7XG4gICAgICAkKHRpcCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lJDYuRkFERSArIFwiIFwiICsgQ2xhc3NOYW1lJDYuU0hPVyk7XG4gICAgfTtcblxuICAgIF9wcm90by5zZXRFbGVtZW50Q29udGVudCA9IGZ1bmN0aW9uIHNldEVsZW1lbnRDb250ZW50KCRlbGVtZW50LCBjb250ZW50KSB7XG4gICAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdvYmplY3QnICYmIChjb250ZW50Lm5vZGVUeXBlIHx8IGNvbnRlbnQuanF1ZXJ5KSkge1xuICAgICAgICAvLyBDb250ZW50IGlzIGEgRE9NIG5vZGUgb3IgYSBqUXVlcnlcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmh0bWwpIHtcbiAgICAgICAgICBpZiAoISQoY29udGVudCkucGFyZW50KCkuaXMoJGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAkZWxlbWVudC5lbXB0eSgpLmFwcGVuZChjb250ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgJGVsZW1lbnQudGV4dCgkKGNvbnRlbnQpLnRleHQoKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbmZpZy5odG1sKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5zYW5pdGl6ZSkge1xuICAgICAgICAgIGNvbnRlbnQgPSBzYW5pdGl6ZUh0bWwoY29udGVudCwgdGhpcy5jb25maWcud2hpdGVMaXN0LCB0aGlzLmNvbmZpZy5zYW5pdGl6ZUZuKTtcbiAgICAgICAgfVxuXG4gICAgICAgICRlbGVtZW50Lmh0bWwoY29udGVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkZWxlbWVudC50ZXh0KGNvbnRlbnQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uZ2V0VGl0bGUgPSBmdW5jdGlvbiBnZXRUaXRsZSgpIHtcbiAgICAgIHZhciB0aXRsZSA9IHRoaXMuZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtb3JpZ2luYWwtdGl0bGUnKTtcblxuICAgICAgaWYgKCF0aXRsZSkge1xuICAgICAgICB0aXRsZSA9IHR5cGVvZiB0aGlzLmNvbmZpZy50aXRsZSA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMuY29uZmlnLnRpdGxlLmNhbGwodGhpcy5lbGVtZW50KSA6IHRoaXMuY29uZmlnLnRpdGxlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGl0bGU7XG4gICAgfSAvLyBQcml2YXRlXG4gICAgO1xuXG4gICAgX3Byb3RvLl9nZXRPZmZzZXQgPSBmdW5jdGlvbiBfZ2V0T2Zmc2V0KCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBvZmZzZXQgPSB7fTtcblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZy5vZmZzZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb2Zmc2V0LmZuID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICBkYXRhLm9mZnNldHMgPSBfb2JqZWN0U3ByZWFkKHt9LCBkYXRhLm9mZnNldHMsIF90aGlzMy5jb25maWcub2Zmc2V0KGRhdGEub2Zmc2V0cywgX3RoaXMzLmVsZW1lbnQpIHx8IHt9KTtcbiAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9mZnNldC5vZmZzZXQgPSB0aGlzLmNvbmZpZy5vZmZzZXQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvZmZzZXQ7XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0Q29udGFpbmVyID0gZnVuY3Rpb24gX2dldENvbnRhaW5lcigpIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5jb250YWluZXIgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5ib2R5O1xuICAgICAgfVxuXG4gICAgICBpZiAoVXRpbC5pc0VsZW1lbnQodGhpcy5jb25maWcuY29udGFpbmVyKSkge1xuICAgICAgICByZXR1cm4gJCh0aGlzLmNvbmZpZy5jb250YWluZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gJChkb2N1bWVudCkuZmluZCh0aGlzLmNvbmZpZy5jb250YWluZXIpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldEF0dGFjaG1lbnQgPSBmdW5jdGlvbiBfZ2V0QXR0YWNobWVudChwbGFjZW1lbnQpIHtcbiAgICAgIHJldHVybiBBdHRhY2htZW50TWFwJDFbcGxhY2VtZW50LnRvVXBwZXJDYXNlKCldO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX3NldExpc3RlbmVycyA9IGZ1bmN0aW9uIF9zZXRMaXN0ZW5lcnMoKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgdmFyIHRyaWdnZXJzID0gdGhpcy5jb25maWcudHJpZ2dlci5zcGxpdCgnICcpO1xuICAgICAgdHJpZ2dlcnMuZm9yRWFjaChmdW5jdGlvbiAodHJpZ2dlcikge1xuICAgICAgICBpZiAodHJpZ2dlciA9PT0gJ2NsaWNrJykge1xuICAgICAgICAgICQoX3RoaXM0LmVsZW1lbnQpLm9uKF90aGlzNC5jb25zdHJ1Y3Rvci5FdmVudC5DTElDSywgX3RoaXM0LmNvbmZpZy5zZWxlY3RvciwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM0LnRvZ2dsZShldmVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHJpZ2dlciAhPT0gVHJpZ2dlci5NQU5VQUwpIHtcbiAgICAgICAgICB2YXIgZXZlbnRJbiA9IHRyaWdnZXIgPT09IFRyaWdnZXIuSE9WRVIgPyBfdGhpczQuY29uc3RydWN0b3IuRXZlbnQuTU9VU0VFTlRFUiA6IF90aGlzNC5jb25zdHJ1Y3Rvci5FdmVudC5GT0NVU0lOO1xuICAgICAgICAgIHZhciBldmVudE91dCA9IHRyaWdnZXIgPT09IFRyaWdnZXIuSE9WRVIgPyBfdGhpczQuY29uc3RydWN0b3IuRXZlbnQuTU9VU0VMRUFWRSA6IF90aGlzNC5jb25zdHJ1Y3Rvci5FdmVudC5GT0NVU09VVDtcbiAgICAgICAgICAkKF90aGlzNC5lbGVtZW50KS5vbihldmVudEluLCBfdGhpczQuY29uZmlnLnNlbGVjdG9yLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczQuX2VudGVyKGV2ZW50KTtcbiAgICAgICAgICB9KS5vbihldmVudE91dCwgX3RoaXM0LmNvbmZpZy5zZWxlY3RvciwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM0Ll9sZWF2ZShldmVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgJCh0aGlzLmVsZW1lbnQpLmNsb3Nlc3QoJy5tb2RhbCcpLm9uKCdoaWRlLmJzLm1vZGFsJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXM0LmVsZW1lbnQpIHtcbiAgICAgICAgICBfdGhpczQuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMuY29uZmlnLnNlbGVjdG9yKSB7XG4gICAgICAgIHRoaXMuY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgdGhpcy5jb25maWcsIHtcbiAgICAgICAgICB0cmlnZ2VyOiAnbWFudWFsJyxcbiAgICAgICAgICBzZWxlY3RvcjogJydcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9maXhUaXRsZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uX2ZpeFRpdGxlID0gZnVuY3Rpb24gX2ZpeFRpdGxlKCkge1xuICAgICAgdmFyIHRpdGxlVHlwZSA9IHR5cGVvZiB0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLW9yaWdpbmFsLXRpdGxlJyk7XG5cbiAgICAgIGlmICh0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0aXRsZScpIHx8IHRpdGxlVHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1vcmlnaW5hbC10aXRsZScsIHRoaXMuZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RpdGxlJykgfHwgJycpO1xuICAgICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCd0aXRsZScsICcnKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLl9lbnRlciA9IGZ1bmN0aW9uIF9lbnRlcihldmVudCwgY29udGV4dCkge1xuICAgICAgdmFyIGRhdGFLZXkgPSB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZO1xuICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgJChldmVudC5jdXJyZW50VGFyZ2V0KS5kYXRhKGRhdGFLZXkpO1xuXG4gICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgY29udGV4dCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKGV2ZW50LmN1cnJlbnRUYXJnZXQsIHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkpO1xuICAgICAgICAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmRhdGEoZGF0YUtleSwgY29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudCkge1xuICAgICAgICBjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyW2V2ZW50LnR5cGUgPT09ICdmb2N1c2luJyA/IFRyaWdnZXIuRk9DVVMgOiBUcmlnZ2VyLkhPVkVSXSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICgkKGNvbnRleHQuZ2V0VGlwRWxlbWVudCgpKS5oYXNDbGFzcyhDbGFzc05hbWUkNi5TSE9XKSB8fCBjb250ZXh0Ll9ob3ZlclN0YXRlID09PSBIb3ZlclN0YXRlLlNIT1cpIHtcbiAgICAgICAgY29udGV4dC5faG92ZXJTdGF0ZSA9IEhvdmVyU3RhdGUuU0hPVztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjbGVhclRpbWVvdXQoY29udGV4dC5fdGltZW91dCk7XG4gICAgICBjb250ZXh0Ll9ob3ZlclN0YXRlID0gSG92ZXJTdGF0ZS5TSE9XO1xuXG4gICAgICBpZiAoIWNvbnRleHQuY29uZmlnLmRlbGF5IHx8ICFjb250ZXh0LmNvbmZpZy5kZWxheS5zaG93KSB7XG4gICAgICAgIGNvbnRleHQuc2hvdygpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGNvbnRleHQuX2hvdmVyU3RhdGUgPT09IEhvdmVyU3RhdGUuU0hPVykge1xuICAgICAgICAgIGNvbnRleHQuc2hvdygpO1xuICAgICAgICB9XG4gICAgICB9LCBjb250ZXh0LmNvbmZpZy5kZWxheS5zaG93KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9sZWF2ZSA9IGZ1bmN0aW9uIF9sZWF2ZShldmVudCwgY29udGV4dCkge1xuICAgICAgdmFyIGRhdGFLZXkgPSB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZO1xuICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgJChldmVudC5jdXJyZW50VGFyZ2V0KS5kYXRhKGRhdGFLZXkpO1xuXG4gICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgY29udGV4dCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKGV2ZW50LmN1cnJlbnRUYXJnZXQsIHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkpO1xuICAgICAgICAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmRhdGEoZGF0YUtleSwgY29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudCkge1xuICAgICAgICBjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyW2V2ZW50LnR5cGUgPT09ICdmb2N1c291dCcgPyBUcmlnZ2VyLkZPQ1VTIDogVHJpZ2dlci5IT1ZFUl0gPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbnRleHQuX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNsZWFyVGltZW91dChjb250ZXh0Ll90aW1lb3V0KTtcbiAgICAgIGNvbnRleHQuX2hvdmVyU3RhdGUgPSBIb3ZlclN0YXRlLk9VVDtcblxuICAgICAgaWYgKCFjb250ZXh0LmNvbmZpZy5kZWxheSB8fCAhY29udGV4dC5jb25maWcuZGVsYXkuaGlkZSkge1xuICAgICAgICBjb250ZXh0LmhpZGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Ll90aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChjb250ZXh0Ll9ob3ZlclN0YXRlID09PSBIb3ZlclN0YXRlLk9VVCkge1xuICAgICAgICAgIGNvbnRleHQuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICB9LCBjb250ZXh0LmNvbmZpZy5kZWxheS5oaWRlKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9pc1dpdGhBY3RpdmVUcmlnZ2VyID0gZnVuY3Rpb24gX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKSB7XG4gICAgICBmb3IgKHZhciB0cmlnZ2VyIGluIHRoaXMuX2FjdGl2ZVRyaWdnZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZVRyaWdnZXJbdHJpZ2dlcl0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0Q29uZmlnID0gZnVuY3Rpb24gX2dldENvbmZpZyhjb25maWcpIHtcbiAgICAgIHZhciBkYXRhQXR0cmlidXRlcyA9ICQodGhpcy5lbGVtZW50KS5kYXRhKCk7XG4gICAgICBPYmplY3Qua2V5cyhkYXRhQXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoZGF0YUF0dHIpIHtcbiAgICAgICAgaWYgKERJU0FMTE9XRURfQVRUUklCVVRFUy5pbmRleE9mKGRhdGFBdHRyKSAhPT0gLTEpIHtcbiAgICAgICAgICBkZWxldGUgZGF0YUF0dHJpYnV0ZXNbZGF0YUF0dHJdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdCwgZGF0YUF0dHJpYnV0ZXMsIHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZyA/IGNvbmZpZyA6IHt9KTtcblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcuZGVsYXkgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGNvbmZpZy5kZWxheSA9IHtcbiAgICAgICAgICBzaG93OiBjb25maWcuZGVsYXksXG4gICAgICAgICAgaGlkZTogY29uZmlnLmRlbGF5XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnLnRpdGxlID09PSAnbnVtYmVyJykge1xuICAgICAgICBjb25maWcudGl0bGUgPSBjb25maWcudGl0bGUudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcuY29udGVudCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uZmlnLmNvbnRlbnQgPSBjb25maWcuY29udGVudC50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICBVdGlsLnR5cGVDaGVja0NvbmZpZyhOQU1FJDYsIGNvbmZpZywgdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0VHlwZSk7XG5cbiAgICAgIGlmIChjb25maWcuc2FuaXRpemUpIHtcbiAgICAgICAgY29uZmlnLnRlbXBsYXRlID0gc2FuaXRpemVIdG1sKGNvbmZpZy50ZW1wbGF0ZSwgY29uZmlnLndoaXRlTGlzdCwgY29uZmlnLnNhbml0aXplRm4pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldERlbGVnYXRlQ29uZmlnID0gZnVuY3Rpb24gX2dldERlbGVnYXRlQ29uZmlnKCkge1xuICAgICAgdmFyIGNvbmZpZyA9IHt9O1xuXG4gICAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuY29uZmlnKSB7XG4gICAgICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFtrZXldICE9PSB0aGlzLmNvbmZpZ1trZXldKSB7XG4gICAgICAgICAgICBjb25maWdba2V5XSA9IHRoaXMuY29uZmlnW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfTtcblxuICAgIF9wcm90by5fY2xlYW5UaXBDbGFzcyA9IGZ1bmN0aW9uIF9jbGVhblRpcENsYXNzKCkge1xuICAgICAgdmFyICR0aXAgPSAkKHRoaXMuZ2V0VGlwRWxlbWVudCgpKTtcbiAgICAgIHZhciB0YWJDbGFzcyA9ICR0aXAuYXR0cignY2xhc3MnKS5tYXRjaChCU0NMU19QUkVGSVhfUkVHRVgpO1xuXG4gICAgICBpZiAodGFiQ2xhc3MgIT09IG51bGwgJiYgdGFiQ2xhc3MubGVuZ3RoKSB7XG4gICAgICAgICR0aXAucmVtb3ZlQ2xhc3ModGFiQ2xhc3Muam9pbignJykpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uX2hhbmRsZVBvcHBlclBsYWNlbWVudENoYW5nZSA9IGZ1bmN0aW9uIF9oYW5kbGVQb3BwZXJQbGFjZW1lbnRDaGFuZ2UocG9wcGVyRGF0YSkge1xuICAgICAgdmFyIHBvcHBlckluc3RhbmNlID0gcG9wcGVyRGF0YS5pbnN0YW5jZTtcbiAgICAgIHRoaXMudGlwID0gcG9wcGVySW5zdGFuY2UucG9wcGVyO1xuXG4gICAgICB0aGlzLl9jbGVhblRpcENsYXNzKCk7XG5cbiAgICAgIHRoaXMuYWRkQXR0YWNobWVudENsYXNzKHRoaXMuX2dldEF0dGFjaG1lbnQocG9wcGVyRGF0YS5wbGFjZW1lbnQpKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9maXhUcmFuc2l0aW9uID0gZnVuY3Rpb24gX2ZpeFRyYW5zaXRpb24oKSB7XG4gICAgICB2YXIgdGlwID0gdGhpcy5nZXRUaXBFbGVtZW50KCk7XG4gICAgICB2YXIgaW5pdENvbmZpZ0FuaW1hdGlvbiA9IHRoaXMuY29uZmlnLmFuaW1hdGlvbjtcblxuICAgICAgaWYgKHRpcC5nZXRBdHRyaWJ1dGUoJ3gtcGxhY2VtZW50JykgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAkKHRpcCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lJDYuRkFERSk7XG4gICAgICB0aGlzLmNvbmZpZy5hbmltYXRpb24gPSBmYWxzZTtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgdGhpcy5zaG93KCk7XG4gICAgICB0aGlzLmNvbmZpZy5hbmltYXRpb24gPSBpbml0Q29uZmlnQW5pbWF0aW9uO1xuICAgIH0gLy8gU3RhdGljXG4gICAgO1xuXG4gICAgVG9vbHRpcC5falF1ZXJ5SW50ZXJmYWNlID0gZnVuY3Rpb24gX2pRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YShEQVRBX0tFWSQ2KTtcblxuICAgICAgICB2YXIgX2NvbmZpZyA9IHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZztcblxuICAgICAgICBpZiAoIWRhdGEgJiYgL2Rpc3Bvc2V8aGlkZS8udGVzdChjb25maWcpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IG5ldyBUb29sdGlwKHRoaXMsIF9jb25maWcpO1xuICAgICAgICAgICQodGhpcykuZGF0YShEQVRBX0tFWSQ2LCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIG1ldGhvZCBuYW1lZCBcXFwiXCIgKyBjb25maWcgKyBcIlxcXCJcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBfY3JlYXRlQ2xhc3MoVG9vbHRpcCwgbnVsbCwgW3tcbiAgICAgIGtleTogXCJWRVJTSU9OXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIFZFUlNJT04kNjtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiRGVmYXVsdFwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBEZWZhdWx0JDQ7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIk5BTUVcIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gTkFNRSQ2O1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJEQVRBX0tFWVwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBEQVRBX0tFWSQ2O1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJFdmVudFwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBFdmVudCQ2O1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJFVkVOVF9LRVlcIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gRVZFTlRfS0VZJDY7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkRlZmF1bHRUeXBlXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIERlZmF1bHRUeXBlJDQ7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIFRvb2x0aXA7XG4gIH0oKTtcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBqUXVlcnlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJC5mbltOQU1FJDZdID0gVG9vbHRpcC5falF1ZXJ5SW50ZXJmYWNlO1xuICAkLmZuW05BTUUkNl0uQ29uc3RydWN0b3IgPSBUb29sdGlwO1xuXG4gICQuZm5bTkFNRSQ2XS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICQuZm5bTkFNRSQ2XSA9IEpRVUVSWV9OT19DT05GTElDVCQ2O1xuICAgIHJldHVybiBUb29sdGlwLl9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBDb25zdGFudHNcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBOQU1FJDcgPSAncG9wb3Zlcic7XG4gIHZhciBWRVJTSU9OJDcgPSAnNC4zLjEnO1xuICB2YXIgREFUQV9LRVkkNyA9ICdicy5wb3BvdmVyJztcbiAgdmFyIEVWRU5UX0tFWSQ3ID0gXCIuXCIgKyBEQVRBX0tFWSQ3O1xuICB2YXIgSlFVRVJZX05PX0NPTkZMSUNUJDcgPSAkLmZuW05BTUUkN107XG4gIHZhciBDTEFTU19QUkVGSVgkMSA9ICdicy1wb3BvdmVyJztcbiAgdmFyIEJTQ0xTX1BSRUZJWF9SRUdFWCQxID0gbmV3IFJlZ0V4cChcIihefFxcXFxzKVwiICsgQ0xBU1NfUFJFRklYJDEgKyBcIlxcXFxTK1wiLCAnZycpO1xuXG4gIHZhciBEZWZhdWx0JDUgPSBfb2JqZWN0U3ByZWFkKHt9LCBUb29sdGlwLkRlZmF1bHQsIHtcbiAgICBwbGFjZW1lbnQ6ICdyaWdodCcsXG4gICAgdHJpZ2dlcjogJ2NsaWNrJyxcbiAgICBjb250ZW50OiAnJyxcbiAgICB0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9XCJwb3BvdmVyXCIgcm9sZT1cInRvb2x0aXBcIj4nICsgJzxkaXYgY2xhc3M9XCJhcnJvd1wiPjwvZGl2PicgKyAnPGgzIGNsYXNzPVwicG9wb3Zlci1oZWFkZXJcIj48L2gzPicgKyAnPGRpdiBjbGFzcz1cInBvcG92ZXItYm9keVwiPjwvZGl2PjwvZGl2PidcbiAgfSk7XG5cbiAgdmFyIERlZmF1bHRUeXBlJDUgPSBfb2JqZWN0U3ByZWFkKHt9LCBUb29sdGlwLkRlZmF1bHRUeXBlLCB7XG4gICAgY29udGVudDogJyhzdHJpbmd8ZWxlbWVudHxmdW5jdGlvbiknXG4gIH0pO1xuXG4gIHZhciBDbGFzc05hbWUkNyA9IHtcbiAgICBGQURFOiAnZmFkZScsXG4gICAgU0hPVzogJ3Nob3cnXG4gIH07XG4gIHZhciBTZWxlY3RvciQ3ID0ge1xuICAgIFRJVExFOiAnLnBvcG92ZXItaGVhZGVyJyxcbiAgICBDT05URU5UOiAnLnBvcG92ZXItYm9keSdcbiAgfTtcbiAgdmFyIEV2ZW50JDcgPSB7XG4gICAgSElERTogXCJoaWRlXCIgKyBFVkVOVF9LRVkkNyxcbiAgICBISURERU46IFwiaGlkZGVuXCIgKyBFVkVOVF9LRVkkNyxcbiAgICBTSE9XOiBcInNob3dcIiArIEVWRU5UX0tFWSQ3LFxuICAgIFNIT1dOOiBcInNob3duXCIgKyBFVkVOVF9LRVkkNyxcbiAgICBJTlNFUlRFRDogXCJpbnNlcnRlZFwiICsgRVZFTlRfS0VZJDcsXG4gICAgQ0xJQ0s6IFwiY2xpY2tcIiArIEVWRU5UX0tFWSQ3LFxuICAgIEZPQ1VTSU46IFwiZm9jdXNpblwiICsgRVZFTlRfS0VZJDcsXG4gICAgRk9DVVNPVVQ6IFwiZm9jdXNvdXRcIiArIEVWRU5UX0tFWSQ3LFxuICAgIE1PVVNFRU5URVI6IFwibW91c2VlbnRlclwiICsgRVZFTlRfS0VZJDcsXG4gICAgTU9VU0VMRUFWRTogXCJtb3VzZWxlYXZlXCIgKyBFVkVOVF9LRVkkN1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIENsYXNzIERlZmluaXRpb25cbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuICB9O1xuXG4gIHZhciBQb3BvdmVyID1cbiAgLyojX19QVVJFX18qL1xuICBmdW5jdGlvbiAoX1Rvb2x0aXApIHtcbiAgICBfaW5oZXJpdHNMb29zZShQb3BvdmVyLCBfVG9vbHRpcCk7XG5cbiAgICBmdW5jdGlvbiBQb3BvdmVyKCkge1xuICAgICAgcmV0dXJuIF9Ub29sdGlwLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG5cbiAgICB2YXIgX3Byb3RvID0gUG9wb3Zlci5wcm90b3R5cGU7XG5cbiAgICAvLyBPdmVycmlkZXNcbiAgICBfcHJvdG8uaXNXaXRoQ29udGVudCA9IGZ1bmN0aW9uIGlzV2l0aENvbnRlbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRUaXRsZSgpIHx8IHRoaXMuX2dldENvbnRlbnQoKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmFkZEF0dGFjaG1lbnRDbGFzcyA9IGZ1bmN0aW9uIGFkZEF0dGFjaG1lbnRDbGFzcyhhdHRhY2htZW50KSB7XG4gICAgICAkKHRoaXMuZ2V0VGlwRWxlbWVudCgpKS5hZGRDbGFzcyhDTEFTU19QUkVGSVgkMSArIFwiLVwiICsgYXR0YWNobWVudCk7XG4gICAgfTtcblxuICAgIF9wcm90by5nZXRUaXBFbGVtZW50ID0gZnVuY3Rpb24gZ2V0VGlwRWxlbWVudCgpIHtcbiAgICAgIHRoaXMudGlwID0gdGhpcy50aXAgfHwgJCh0aGlzLmNvbmZpZy50ZW1wbGF0ZSlbMF07XG4gICAgICByZXR1cm4gdGhpcy50aXA7XG4gICAgfTtcblxuICAgIF9wcm90by5zZXRDb250ZW50ID0gZnVuY3Rpb24gc2V0Q29udGVudCgpIHtcbiAgICAgIHZhciAkdGlwID0gJCh0aGlzLmdldFRpcEVsZW1lbnQoKSk7IC8vIFdlIHVzZSBhcHBlbmQgZm9yIGh0bWwgb2JqZWN0cyB0byBtYWludGFpbiBqcyBldmVudHNcblxuICAgICAgdGhpcy5zZXRFbGVtZW50Q29udGVudCgkdGlwLmZpbmQoU2VsZWN0b3IkNy5USVRMRSksIHRoaXMuZ2V0VGl0bGUoKSk7XG5cbiAgICAgIHZhciBjb250ZW50ID0gdGhpcy5fZ2V0Q29udGVudCgpO1xuXG4gICAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQuY2FsbCh0aGlzLmVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldEVsZW1lbnRDb250ZW50KCR0aXAuZmluZChTZWxlY3RvciQ3LkNPTlRFTlQpLCBjb250ZW50KTtcbiAgICAgICR0aXAucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lJDcuRkFERSArIFwiIFwiICsgQ2xhc3NOYW1lJDcuU0hPVyk7XG4gICAgfSAvLyBQcml2YXRlXG4gICAgO1xuXG4gICAgX3Byb3RvLl9nZXRDb250ZW50ID0gZnVuY3Rpb24gX2dldENvbnRlbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1jb250ZW50JykgfHwgdGhpcy5jb25maWcuY29udGVudDtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9jbGVhblRpcENsYXNzID0gZnVuY3Rpb24gX2NsZWFuVGlwQ2xhc3MoKSB7XG4gICAgICB2YXIgJHRpcCA9ICQodGhpcy5nZXRUaXBFbGVtZW50KCkpO1xuICAgICAgdmFyIHRhYkNsYXNzID0gJHRpcC5hdHRyKCdjbGFzcycpLm1hdGNoKEJTQ0xTX1BSRUZJWF9SRUdFWCQxKTtcblxuICAgICAgaWYgKHRhYkNsYXNzICE9PSBudWxsICYmIHRhYkNsYXNzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgJHRpcC5yZW1vdmVDbGFzcyh0YWJDbGFzcy5qb2luKCcnKSk7XG4gICAgICB9XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBQb3BvdmVyLl9qUXVlcnlJbnRlcmZhY2UgPSBmdW5jdGlvbiBfalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkYXRhID0gJCh0aGlzKS5kYXRhKERBVEFfS0VZJDcpO1xuXG4gICAgICAgIHZhciBfY29uZmlnID0gdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiBudWxsO1xuXG4gICAgICAgIGlmICghZGF0YSAmJiAvZGlzcG9zZXxoaWRlLy50ZXN0KGNvbmZpZykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICBkYXRhID0gbmV3IFBvcG92ZXIodGhpcywgX2NvbmZpZyk7XG4gICAgICAgICAgJCh0aGlzKS5kYXRhKERBVEFfS0VZJDcsIGRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gbWV0aG9kIG5hbWVkIFxcXCJcIiArIGNvbmZpZyArIFwiXFxcIlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9jcmVhdGVDbGFzcyhQb3BvdmVyLCBudWxsLCBbe1xuICAgICAga2V5OiBcIlZFUlNJT05cIixcbiAgICAgIC8vIEdldHRlcnNcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gVkVSU0lPTiQ3O1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJEZWZhdWx0XCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIERlZmF1bHQkNTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiTkFNRVwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBOQU1FJDc7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkRBVEFfS0VZXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIERBVEFfS0VZJDc7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkV2ZW50XCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIEV2ZW50JDc7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkVWRU5UX0tFWVwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBFVkVOVF9LRVkkNztcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiRGVmYXVsdFR5cGVcIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gRGVmYXVsdFR5cGUkNTtcbiAgICAgIH1cbiAgICB9XSk7XG5cbiAgICByZXR1cm4gUG9wb3ZlcjtcbiAgfShUb29sdGlwKTtcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBqUXVlcnlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJC5mbltOQU1FJDddID0gUG9wb3Zlci5falF1ZXJ5SW50ZXJmYWNlO1xuICAkLmZuW05BTUUkN10uQ29uc3RydWN0b3IgPSBQb3BvdmVyO1xuXG4gICQuZm5bTkFNRSQ3XS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICQuZm5bTkFNRSQ3XSA9IEpRVUVSWV9OT19DT05GTElDVCQ3O1xuICAgIHJldHVybiBQb3BvdmVyLl9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBDb25zdGFudHNcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBOQU1FJDggPSAnc2Nyb2xsc3B5JztcbiAgdmFyIFZFUlNJT04kOCA9ICc0LjMuMSc7XG4gIHZhciBEQVRBX0tFWSQ4ID0gJ2JzLnNjcm9sbHNweSc7XG4gIHZhciBFVkVOVF9LRVkkOCA9IFwiLlwiICsgREFUQV9LRVkkODtcbiAgdmFyIERBVEFfQVBJX0tFWSQ2ID0gJy5kYXRhLWFwaSc7XG4gIHZhciBKUVVFUllfTk9fQ09ORkxJQ1QkOCA9ICQuZm5bTkFNRSQ4XTtcbiAgdmFyIERlZmF1bHQkNiA9IHtcbiAgICBvZmZzZXQ6IDEwLFxuICAgIG1ldGhvZDogJ2F1dG8nLFxuICAgIHRhcmdldDogJydcbiAgfTtcbiAgdmFyIERlZmF1bHRUeXBlJDYgPSB7XG4gICAgb2Zmc2V0OiAnbnVtYmVyJyxcbiAgICBtZXRob2Q6ICdzdHJpbmcnLFxuICAgIHRhcmdldDogJyhzdHJpbmd8ZWxlbWVudCknXG4gIH07XG4gIHZhciBFdmVudCQ4ID0ge1xuICAgIEFDVElWQVRFOiBcImFjdGl2YXRlXCIgKyBFVkVOVF9LRVkkOCxcbiAgICBTQ1JPTEw6IFwic2Nyb2xsXCIgKyBFVkVOVF9LRVkkOCxcbiAgICBMT0FEX0RBVEFfQVBJOiBcImxvYWRcIiArIEVWRU5UX0tFWSQ4ICsgREFUQV9BUElfS0VZJDZcbiAgfTtcbiAgdmFyIENsYXNzTmFtZSQ4ID0ge1xuICAgIERST1BET1dOX0lURU06ICdkcm9wZG93bi1pdGVtJyxcbiAgICBEUk9QRE9XTl9NRU5VOiAnZHJvcGRvd24tbWVudScsXG4gICAgQUNUSVZFOiAnYWN0aXZlJ1xuICB9O1xuICB2YXIgU2VsZWN0b3IkOCA9IHtcbiAgICBEQVRBX1NQWTogJ1tkYXRhLXNweT1cInNjcm9sbFwiXScsXG4gICAgQUNUSVZFOiAnLmFjdGl2ZScsXG4gICAgTkFWX0xJU1RfR1JPVVA6ICcubmF2LCAubGlzdC1ncm91cCcsXG4gICAgTkFWX0xJTktTOiAnLm5hdi1saW5rJyxcbiAgICBOQVZfSVRFTVM6ICcubmF2LWl0ZW0nLFxuICAgIExJU1RfSVRFTVM6ICcubGlzdC1ncm91cC1pdGVtJyxcbiAgICBEUk9QRE9XTjogJy5kcm9wZG93bicsXG4gICAgRFJPUERPV05fSVRFTVM6ICcuZHJvcGRvd24taXRlbScsXG4gICAgRFJPUERPV05fVE9HR0xFOiAnLmRyb3Bkb3duLXRvZ2dsZSdcbiAgfTtcbiAgdmFyIE9mZnNldE1ldGhvZCA9IHtcbiAgICBPRkZTRVQ6ICdvZmZzZXQnLFxuICAgIFBPU0lUSU9OOiAncG9zaXRpb24nXG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG4gIH07XG5cbiAgdmFyIFNjcm9sbFNweSA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNjcm9sbFNweShlbGVtZW50LCBjb25maWcpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgdGhpcy5fc2Nyb2xsRWxlbWVudCA9IGVsZW1lbnQudGFnTmFtZSA9PT0gJ0JPRFknID8gd2luZG93IDogZWxlbWVudDtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgICAgdGhpcy5fc2VsZWN0b3IgPSB0aGlzLl9jb25maWcudGFyZ2V0ICsgXCIgXCIgKyBTZWxlY3RvciQ4Lk5BVl9MSU5LUyArIFwiLFwiICsgKHRoaXMuX2NvbmZpZy50YXJnZXQgKyBcIiBcIiArIFNlbGVjdG9yJDguTElTVF9JVEVNUyArIFwiLFwiKSArICh0aGlzLl9jb25maWcudGFyZ2V0ICsgXCIgXCIgKyBTZWxlY3RvciQ4LkRST1BET1dOX0lURU1TKTtcbiAgICAgIHRoaXMuX29mZnNldHMgPSBbXTtcbiAgICAgIHRoaXMuX3RhcmdldHMgPSBbXTtcbiAgICAgIHRoaXMuX2FjdGl2ZVRhcmdldCA9IG51bGw7XG4gICAgICB0aGlzLl9zY3JvbGxIZWlnaHQgPSAwO1xuICAgICAgJCh0aGlzLl9zY3JvbGxFbGVtZW50KS5vbihFdmVudCQ4LlNDUk9MTCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5fcHJvY2VzcyhldmVudCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuXG4gICAgICB0aGlzLl9wcm9jZXNzKCk7XG4gICAgfSAvLyBHZXR0ZXJzXG5cblxuICAgIHZhciBfcHJvdG8gPSBTY3JvbGxTcHkucHJvdG90eXBlO1xuXG4gICAgLy8gUHVibGljXG4gICAgX3Byb3RvLnJlZnJlc2ggPSBmdW5jdGlvbiByZWZyZXNoKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBhdXRvTWV0aG9kID0gdGhpcy5fc2Nyb2xsRWxlbWVudCA9PT0gdGhpcy5fc2Nyb2xsRWxlbWVudC53aW5kb3cgPyBPZmZzZXRNZXRob2QuT0ZGU0VUIDogT2Zmc2V0TWV0aG9kLlBPU0lUSU9OO1xuICAgICAgdmFyIG9mZnNldE1ldGhvZCA9IHRoaXMuX2NvbmZpZy5tZXRob2QgPT09ICdhdXRvJyA/IGF1dG9NZXRob2QgOiB0aGlzLl9jb25maWcubWV0aG9kO1xuICAgICAgdmFyIG9mZnNldEJhc2UgPSBvZmZzZXRNZXRob2QgPT09IE9mZnNldE1ldGhvZC5QT1NJVElPTiA/IHRoaXMuX2dldFNjcm9sbFRvcCgpIDogMDtcbiAgICAgIHRoaXMuX29mZnNldHMgPSBbXTtcbiAgICAgIHRoaXMuX3RhcmdldHMgPSBbXTtcbiAgICAgIHRoaXMuX3Njcm9sbEhlaWdodCA9IHRoaXMuX2dldFNjcm9sbEhlaWdodCgpO1xuICAgICAgdmFyIHRhcmdldHMgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5fc2VsZWN0b3IpKTtcbiAgICAgIHRhcmdldHMubWFwKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIHZhciB0YXJnZXQ7XG4gICAgICAgIHZhciB0YXJnZXRTZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICBpZiAodGFyZ2V0U2VsZWN0b3IpIHtcbiAgICAgICAgICB0YXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldFNlbGVjdG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICB2YXIgdGFyZ2V0QkNSID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgaWYgKHRhcmdldEJDUi53aWR0aCB8fCB0YXJnZXRCQ1IuaGVpZ2h0KSB7XG4gICAgICAgICAgICAvLyBUT0RPIChmYXQpOiByZW1vdmUgc2tldGNoIHJlbGlhbmNlIG9uIGpRdWVyeSBwb3NpdGlvbi9vZmZzZXRcbiAgICAgICAgICAgIHJldHVybiBbJCh0YXJnZXQpW29mZnNldE1ldGhvZF0oKS50b3AgKyBvZmZzZXRCYXNlLCB0YXJnZXRTZWxlY3Rvcl07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9KS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHJldHVybiBhWzBdIC0gYlswXTtcbiAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgX3RoaXMyLl9vZmZzZXRzLnB1c2goaXRlbVswXSk7XG5cbiAgICAgICAgX3RoaXMyLl90YXJnZXRzLnB1c2goaXRlbVsxXSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgJC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsIERBVEFfS0VZJDgpO1xuICAgICAgJCh0aGlzLl9zY3JvbGxFbGVtZW50KS5vZmYoRVZFTlRfS0VZJDgpO1xuICAgICAgdGhpcy5fZWxlbWVudCA9IG51bGw7XG4gICAgICB0aGlzLl9zY3JvbGxFbGVtZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IG51bGw7XG4gICAgICB0aGlzLl9zZWxlY3RvciA9IG51bGw7XG4gICAgICB0aGlzLl9vZmZzZXRzID0gbnVsbDtcbiAgICAgIHRoaXMuX3RhcmdldHMgPSBudWxsO1xuICAgICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gbnVsbDtcbiAgICAgIHRoaXMuX3Njcm9sbEhlaWdodCA9IG51bGw7XG4gICAgfSAvLyBQcml2YXRlXG4gICAgO1xuXG4gICAgX3Byb3RvLl9nZXRDb25maWcgPSBmdW5jdGlvbiBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgICAgY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgRGVmYXVsdCQ2LCB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiBjb25maWcgPyBjb25maWcgOiB7fSk7XG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnLnRhcmdldCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFyIGlkID0gJChjb25maWcudGFyZ2V0KS5hdHRyKCdpZCcpO1xuXG4gICAgICAgIGlmICghaWQpIHtcbiAgICAgICAgICBpZCA9IFV0aWwuZ2V0VUlEKE5BTUUkOCk7XG4gICAgICAgICAgJChjb25maWcudGFyZ2V0KS5hdHRyKCdpZCcsIGlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZy50YXJnZXQgPSBcIiNcIiArIGlkO1xuICAgICAgfVxuXG4gICAgICBVdGlsLnR5cGVDaGVja0NvbmZpZyhOQU1FJDgsIGNvbmZpZywgRGVmYXVsdFR5cGUkNik7XG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldFNjcm9sbFRvcCA9IGZ1bmN0aW9uIF9nZXRTY3JvbGxUb3AoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2Nyb2xsRWxlbWVudCA9PT0gd2luZG93ID8gdGhpcy5fc2Nyb2xsRWxlbWVudC5wYWdlWU9mZnNldCA6IHRoaXMuX3Njcm9sbEVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldFNjcm9sbEhlaWdodCA9IGZ1bmN0aW9uIF9nZXRTY3JvbGxIZWlnaHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2Nyb2xsRWxlbWVudC5zY3JvbGxIZWlnaHQgfHwgTWF0aC5tYXgoZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQsIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldE9mZnNldEhlaWdodCA9IGZ1bmN0aW9uIF9nZXRPZmZzZXRIZWlnaHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2Nyb2xsRWxlbWVudCA9PT0gd2luZG93ID8gd2luZG93LmlubmVySGVpZ2h0IDogdGhpcy5fc2Nyb2xsRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgfTtcblxuICAgIF9wcm90by5fcHJvY2VzcyA9IGZ1bmN0aW9uIF9wcm9jZXNzKCkge1xuICAgICAgdmFyIHNjcm9sbFRvcCA9IHRoaXMuX2dldFNjcm9sbFRvcCgpICsgdGhpcy5fY29uZmlnLm9mZnNldDtcblxuICAgICAgdmFyIHNjcm9sbEhlaWdodCA9IHRoaXMuX2dldFNjcm9sbEhlaWdodCgpO1xuXG4gICAgICB2YXIgbWF4U2Nyb2xsID0gdGhpcy5fY29uZmlnLm9mZnNldCArIHNjcm9sbEhlaWdodCAtIHRoaXMuX2dldE9mZnNldEhlaWdodCgpO1xuXG4gICAgICBpZiAodGhpcy5fc2Nyb2xsSGVpZ2h0ICE9PSBzY3JvbGxIZWlnaHQpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzY3JvbGxUb3AgPj0gbWF4U2Nyb2xsKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLl90YXJnZXRzW3RoaXMuX3RhcmdldHMubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZVRhcmdldCAhPT0gdGFyZ2V0KSB7XG4gICAgICAgICAgdGhpcy5fYWN0aXZhdGUodGFyZ2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2FjdGl2ZVRhcmdldCAmJiBzY3JvbGxUb3AgPCB0aGlzLl9vZmZzZXRzWzBdICYmIHRoaXMuX29mZnNldHNbMF0gPiAwKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRhcmdldCA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5fY2xlYXIoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBvZmZzZXRMZW5ndGggPSB0aGlzLl9vZmZzZXRzLmxlbmd0aDtcblxuICAgICAgZm9yICh2YXIgaSA9IG9mZnNldExlbmd0aDsgaS0tOykge1xuICAgICAgICB2YXIgaXNBY3RpdmVUYXJnZXQgPSB0aGlzLl9hY3RpdmVUYXJnZXQgIT09IHRoaXMuX3RhcmdldHNbaV0gJiYgc2Nyb2xsVG9wID49IHRoaXMuX29mZnNldHNbaV0gJiYgKHR5cGVvZiB0aGlzLl9vZmZzZXRzW2kgKyAxXSA9PT0gJ3VuZGVmaW5lZCcgfHwgc2Nyb2xsVG9wIDwgdGhpcy5fb2Zmc2V0c1tpICsgMV0pO1xuXG4gICAgICAgIGlmIChpc0FjdGl2ZVRhcmdldCkge1xuICAgICAgICAgIHRoaXMuX2FjdGl2YXRlKHRoaXMuX3RhcmdldHNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5fYWN0aXZhdGUgPSBmdW5jdGlvbiBfYWN0aXZhdGUodGFyZ2V0KSB7XG4gICAgICB0aGlzLl9hY3RpdmVUYXJnZXQgPSB0YXJnZXQ7XG5cbiAgICAgIHRoaXMuX2NsZWFyKCk7XG5cbiAgICAgIHZhciBxdWVyaWVzID0gdGhpcy5fc2VsZWN0b3Iuc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RvciArIFwiW2RhdGEtdGFyZ2V0PVxcXCJcIiArIHRhcmdldCArIFwiXFxcIl0sXCIgKyBzZWxlY3RvciArIFwiW2hyZWY9XFxcIlwiICsgdGFyZ2V0ICsgXCJcXFwiXVwiO1xuICAgICAgfSk7XG5cbiAgICAgIHZhciAkbGluayA9ICQoW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJpZXMuam9pbignLCcpKSkpO1xuXG4gICAgICBpZiAoJGxpbmsuaGFzQ2xhc3MoQ2xhc3NOYW1lJDguRFJPUERPV05fSVRFTSkpIHtcbiAgICAgICAgJGxpbmsuY2xvc2VzdChTZWxlY3RvciQ4LkRST1BET1dOKS5maW5kKFNlbGVjdG9yJDguRFJPUERPV05fVE9HR0xFKS5hZGRDbGFzcyhDbGFzc05hbWUkOC5BQ1RJVkUpO1xuICAgICAgICAkbGluay5hZGRDbGFzcyhDbGFzc05hbWUkOC5BQ1RJVkUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2V0IHRyaWdnZXJlZCBsaW5rIGFzIGFjdGl2ZVxuICAgICAgICAkbGluay5hZGRDbGFzcyhDbGFzc05hbWUkOC5BQ1RJVkUpOyAvLyBTZXQgdHJpZ2dlcmVkIGxpbmtzIHBhcmVudHMgYXMgYWN0aXZlXG4gICAgICAgIC8vIFdpdGggYm90aCA8dWw+IGFuZCA8bmF2PiBtYXJrdXAgYSBwYXJlbnQgaXMgdGhlIHByZXZpb3VzIHNpYmxpbmcgb2YgYW55IG5hdiBhbmNlc3RvclxuXG4gICAgICAgICRsaW5rLnBhcmVudHMoU2VsZWN0b3IkOC5OQVZfTElTVF9HUk9VUCkucHJldihTZWxlY3RvciQ4Lk5BVl9MSU5LUyArIFwiLCBcIiArIFNlbGVjdG9yJDguTElTVF9JVEVNUykuYWRkQ2xhc3MoQ2xhc3NOYW1lJDguQUNUSVZFKTsgLy8gSGFuZGxlIHNwZWNpYWwgY2FzZSB3aGVuIC5uYXYtbGluayBpcyBpbnNpZGUgLm5hdi1pdGVtXG5cbiAgICAgICAgJGxpbmsucGFyZW50cyhTZWxlY3RvciQ4Lk5BVl9MSVNUX0dST1VQKS5wcmV2KFNlbGVjdG9yJDguTkFWX0lURU1TKS5jaGlsZHJlbihTZWxlY3RvciQ4Lk5BVl9MSU5LUykuYWRkQ2xhc3MoQ2xhc3NOYW1lJDguQUNUSVZFKTtcbiAgICAgIH1cblxuICAgICAgJCh0aGlzLl9zY3JvbGxFbGVtZW50KS50cmlnZ2VyKEV2ZW50JDguQUNUSVZBVEUsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogdGFyZ2V0XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9jbGVhciA9IGZ1bmN0aW9uIF9jbGVhcigpIHtcbiAgICAgIFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0aGlzLl9zZWxlY3RvcikpLmZpbHRlcihmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5jbGFzc0xpc3QuY29udGFpbnMoQ2xhc3NOYW1lJDguQUNUSVZFKTtcbiAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUuY2xhc3NMaXN0LnJlbW92ZShDbGFzc05hbWUkOC5BQ1RJVkUpO1xuICAgICAgfSk7XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBTY3JvbGxTcHkuX2pRdWVyeUludGVyZmFjZSA9IGZ1bmN0aW9uIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAkKHRoaXMpLmRhdGEoREFUQV9LRVkkOCk7XG5cbiAgICAgICAgdmFyIF9jb25maWcgPSB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiBjb25maWc7XG5cbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IG5ldyBTY3JvbGxTcHkodGhpcywgX2NvbmZpZyk7XG4gICAgICAgICAgJCh0aGlzKS5kYXRhKERBVEFfS0VZJDgsIGRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gbWV0aG9kIG5hbWVkIFxcXCJcIiArIGNvbmZpZyArIFwiXFxcIlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9jcmVhdGVDbGFzcyhTY3JvbGxTcHksIG51bGwsIFt7XG4gICAgICBrZXk6IFwiVkVSU0lPTlwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBWRVJTSU9OJDg7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkRlZmF1bHRcIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gRGVmYXVsdCQ2O1xuICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBTY3JvbGxTcHk7XG4gIH0oKTtcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBEYXRhIEFwaSBpbXBsZW1lbnRhdGlvblxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cblxuICAkKHdpbmRvdykub24oRXZlbnQkOC5MT0FEX0RBVEFfQVBJLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNjcm9sbFNweXMgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IkOC5EQVRBX1NQWSkpO1xuICAgIHZhciBzY3JvbGxTcHlzTGVuZ3RoID0gc2Nyb2xsU3B5cy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpID0gc2Nyb2xsU3B5c0xlbmd0aDsgaS0tOykge1xuICAgICAgdmFyICRzcHkgPSAkKHNjcm9sbFNweXNbaV0pO1xuXG4gICAgICBTY3JvbGxTcHkuX2pRdWVyeUludGVyZmFjZS5jYWxsKCRzcHksICRzcHkuZGF0YSgpKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIGpRdWVyeVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgJC5mbltOQU1FJDhdID0gU2Nyb2xsU3B5Ll9qUXVlcnlJbnRlcmZhY2U7XG4gICQuZm5bTkFNRSQ4XS5Db25zdHJ1Y3RvciA9IFNjcm9sbFNweTtcblxuICAkLmZuW05BTUUkOF0ubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAkLmZuW05BTUUkOF0gPSBKUVVFUllfTk9fQ09ORkxJQ1QkODtcbiAgICByZXR1cm4gU2Nyb2xsU3B5Ll9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBDb25zdGFudHNcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBOQU1FJDkgPSAndGFiJztcbiAgdmFyIFZFUlNJT04kOSA9ICc0LjMuMSc7XG4gIHZhciBEQVRBX0tFWSQ5ID0gJ2JzLnRhYic7XG4gIHZhciBFVkVOVF9LRVkkOSA9IFwiLlwiICsgREFUQV9LRVkkOTtcbiAgdmFyIERBVEFfQVBJX0tFWSQ3ID0gJy5kYXRhLWFwaSc7XG4gIHZhciBKUVVFUllfTk9fQ09ORkxJQ1QkOSA9ICQuZm5bTkFNRSQ5XTtcbiAgdmFyIEV2ZW50JDkgPSB7XG4gICAgSElERTogXCJoaWRlXCIgKyBFVkVOVF9LRVkkOSxcbiAgICBISURERU46IFwiaGlkZGVuXCIgKyBFVkVOVF9LRVkkOSxcbiAgICBTSE9XOiBcInNob3dcIiArIEVWRU5UX0tFWSQ5LFxuICAgIFNIT1dOOiBcInNob3duXCIgKyBFVkVOVF9LRVkkOSxcbiAgICBDTElDS19EQVRBX0FQSTogXCJjbGlja1wiICsgRVZFTlRfS0VZJDkgKyBEQVRBX0FQSV9LRVkkN1xuICB9O1xuICB2YXIgQ2xhc3NOYW1lJDkgPSB7XG4gICAgRFJPUERPV05fTUVOVTogJ2Ryb3Bkb3duLW1lbnUnLFxuICAgIEFDVElWRTogJ2FjdGl2ZScsXG4gICAgRElTQUJMRUQ6ICdkaXNhYmxlZCcsXG4gICAgRkFERTogJ2ZhZGUnLFxuICAgIFNIT1c6ICdzaG93J1xuICB9O1xuICB2YXIgU2VsZWN0b3IkOSA9IHtcbiAgICBEUk9QRE9XTjogJy5kcm9wZG93bicsXG4gICAgTkFWX0xJU1RfR1JPVVA6ICcubmF2LCAubGlzdC1ncm91cCcsXG4gICAgQUNUSVZFOiAnLmFjdGl2ZScsXG4gICAgQUNUSVZFX1VMOiAnPiBsaSA+IC5hY3RpdmUnLFxuICAgIERBVEFfVE9HR0xFOiAnW2RhdGEtdG9nZ2xlPVwidGFiXCJdLCBbZGF0YS10b2dnbGU9XCJwaWxsXCJdLCBbZGF0YS10b2dnbGU9XCJsaXN0XCJdJyxcbiAgICBEUk9QRE9XTl9UT0dHTEU6ICcuZHJvcGRvd24tdG9nZ2xlJyxcbiAgICBEUk9QRE9XTl9BQ1RJVkVfQ0hJTEQ6ICc+IC5kcm9wZG93bi1tZW51IC5hY3RpdmUnXG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG4gIH07XG5cbiAgdmFyIFRhYiA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFRhYihlbGVtZW50KSB7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICB9IC8vIEdldHRlcnNcblxuXG4gICAgdmFyIF9wcm90byA9IFRhYi5wcm90b3R5cGU7XG5cbiAgICAvLyBQdWJsaWNcbiAgICBfcHJvdG8uc2hvdyA9IGZ1bmN0aW9uIHNob3coKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5fZWxlbWVudC5wYXJlbnROb2RlICYmIHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgJCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUkOS5BQ1RJVkUpIHx8ICQodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1lJDkuRElTQUJMRUQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHRhcmdldDtcbiAgICAgIHZhciBwcmV2aW91cztcbiAgICAgIHZhciBsaXN0RWxlbWVudCA9ICQodGhpcy5fZWxlbWVudCkuY2xvc2VzdChTZWxlY3RvciQ5Lk5BVl9MSVNUX0dST1VQKVswXTtcbiAgICAgIHZhciBzZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcblxuICAgICAgaWYgKGxpc3RFbGVtZW50KSB7XG4gICAgICAgIHZhciBpdGVtU2VsZWN0b3IgPSBsaXN0RWxlbWVudC5ub2RlTmFtZSA9PT0gJ1VMJyB8fCBsaXN0RWxlbWVudC5ub2RlTmFtZSA9PT0gJ09MJyA/IFNlbGVjdG9yJDkuQUNUSVZFX1VMIDogU2VsZWN0b3IkOS5BQ1RJVkU7XG4gICAgICAgIHByZXZpb3VzID0gJC5tYWtlQXJyYXkoJChsaXN0RWxlbWVudCkuZmluZChpdGVtU2VsZWN0b3IpKTtcbiAgICAgICAgcHJldmlvdXMgPSBwcmV2aW91c1twcmV2aW91cy5sZW5ndGggLSAxXTtcbiAgICAgIH1cblxuICAgICAgdmFyIGhpZGVFdmVudCA9ICQuRXZlbnQoRXZlbnQkOS5ISURFLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRoaXMuX2VsZW1lbnRcbiAgICAgIH0pO1xuICAgICAgdmFyIHNob3dFdmVudCA9ICQuRXZlbnQoRXZlbnQkOS5TSE9XLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHByZXZpb3VzXG4gICAgICB9KTtcblxuICAgICAgaWYgKHByZXZpb3VzKSB7XG4gICAgICAgICQocHJldmlvdXMpLnRyaWdnZXIoaGlkZUV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgJCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKHNob3dFdmVudCk7XG5cbiAgICAgIGlmIChzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgfHwgaGlkZUV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgIHRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9hY3RpdmF0ZSh0aGlzLl9lbGVtZW50LCBsaXN0RWxlbWVudCk7XG5cbiAgICAgIHZhciBjb21wbGV0ZSA9IGZ1bmN0aW9uIGNvbXBsZXRlKCkge1xuICAgICAgICB2YXIgaGlkZGVuRXZlbnQgPSAkLkV2ZW50KEV2ZW50JDkuSElEREVOLCB7XG4gICAgICAgICAgcmVsYXRlZFRhcmdldDogX3RoaXMuX2VsZW1lbnRcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBzaG93bkV2ZW50ID0gJC5FdmVudChFdmVudCQ5LlNIT1dOLCB7XG4gICAgICAgICAgcmVsYXRlZFRhcmdldDogcHJldmlvdXNcbiAgICAgICAgfSk7XG4gICAgICAgICQocHJldmlvdXMpLnRyaWdnZXIoaGlkZGVuRXZlbnQpO1xuICAgICAgICAkKF90aGlzLl9lbGVtZW50KS50cmlnZ2VyKHNob3duRXZlbnQpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICB0aGlzLl9hY3RpdmF0ZSh0YXJnZXQsIHRhcmdldC5wYXJlbnROb2RlLCBjb21wbGV0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uZGlzcG9zZSA9IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgICAkLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwgREFUQV9LRVkkOSk7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgICB9IC8vIFByaXZhdGVcbiAgICA7XG5cbiAgICBfcHJvdG8uX2FjdGl2YXRlID0gZnVuY3Rpb24gX2FjdGl2YXRlKGVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgYWN0aXZlRWxlbWVudHMgPSBjb250YWluZXIgJiYgKGNvbnRhaW5lci5ub2RlTmFtZSA9PT0gJ1VMJyB8fCBjb250YWluZXIubm9kZU5hbWUgPT09ICdPTCcpID8gJChjb250YWluZXIpLmZpbmQoU2VsZWN0b3IkOS5BQ1RJVkVfVUwpIDogJChjb250YWluZXIpLmNoaWxkcmVuKFNlbGVjdG9yJDkuQUNUSVZFKTtcbiAgICAgIHZhciBhY3RpdmUgPSBhY3RpdmVFbGVtZW50c1swXTtcbiAgICAgIHZhciBpc1RyYW5zaXRpb25pbmcgPSBjYWxsYmFjayAmJiBhY3RpdmUgJiYgJChhY3RpdmUpLmhhc0NsYXNzKENsYXNzTmFtZSQ5LkZBREUpO1xuXG4gICAgICB2YXIgY29tcGxldGUgPSBmdW5jdGlvbiBjb21wbGV0ZSgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzMi5fdHJhbnNpdGlvbkNvbXBsZXRlKGVsZW1lbnQsIGFjdGl2ZSwgY2FsbGJhY2spO1xuICAgICAgfTtcblxuICAgICAgaWYgKGFjdGl2ZSAmJiBpc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQoYWN0aXZlKTtcbiAgICAgICAgJChhY3RpdmUpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQ5LlNIT1cpLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCBjb21wbGV0ZSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5fdHJhbnNpdGlvbkNvbXBsZXRlID0gZnVuY3Rpb24gX3RyYW5zaXRpb25Db21wbGV0ZShlbGVtZW50LCBhY3RpdmUsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgICQoYWN0aXZlKS5yZW1vdmVDbGFzcyhDbGFzc05hbWUkOS5BQ1RJVkUpO1xuICAgICAgICB2YXIgZHJvcGRvd25DaGlsZCA9ICQoYWN0aXZlLnBhcmVudE5vZGUpLmZpbmQoU2VsZWN0b3IkOS5EUk9QRE9XTl9BQ1RJVkVfQ0hJTEQpWzBdO1xuXG4gICAgICAgIGlmIChkcm9wZG93bkNoaWxkKSB7XG4gICAgICAgICAgJChkcm9wZG93bkNoaWxkKS5yZW1vdmVDbGFzcyhDbGFzc05hbWUkOS5BQ1RJVkUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFjdGl2ZS5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSA9PT0gJ3RhYicpIHtcbiAgICAgICAgICBhY3RpdmUuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICQoZWxlbWVudCkuYWRkQ2xhc3MoQ2xhc3NOYW1lJDkuQUNUSVZFKTtcblxuICAgICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdyb2xlJykgPT09ICd0YWInKSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIFV0aWwucmVmbG93KGVsZW1lbnQpO1xuXG4gICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ2xhc3NOYW1lJDkuRkFERSkpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZSQ5LlNIT1cpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxlbWVudC5wYXJlbnROb2RlICYmICQoZWxlbWVudC5wYXJlbnROb2RlKS5oYXNDbGFzcyhDbGFzc05hbWUkOS5EUk9QRE9XTl9NRU5VKSkge1xuICAgICAgICB2YXIgZHJvcGRvd25FbGVtZW50ID0gJChlbGVtZW50KS5jbG9zZXN0KFNlbGVjdG9yJDkuRFJPUERPV04pWzBdO1xuXG4gICAgICAgIGlmIChkcm9wZG93bkVsZW1lbnQpIHtcbiAgICAgICAgICB2YXIgZHJvcGRvd25Ub2dnbGVMaXN0ID0gW10uc2xpY2UuY2FsbChkcm9wZG93bkVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3RvciQ5LkRST1BET1dOX1RPR0dMRSkpO1xuICAgICAgICAgICQoZHJvcGRvd25Ub2dnbGVMaXN0KS5hZGRDbGFzcyhDbGFzc05hbWUkOS5BQ1RJVkUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBUYWIuX2pRdWVyeUludGVyZmFjZSA9IGZ1bmN0aW9uIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTtcbiAgICAgICAgdmFyIGRhdGEgPSAkdGhpcy5kYXRhKERBVEFfS0VZJDkpO1xuXG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgIGRhdGEgPSBuZXcgVGFiKHRoaXMpO1xuICAgICAgICAgICR0aGlzLmRhdGEoREFUQV9LRVkkOSwgZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyBtZXRob2QgbmFtZWQgXFxcIlwiICsgY29uZmlnICsgXCJcXFwiXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRhdGFbY29uZmlnXSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX2NyZWF0ZUNsYXNzKFRhYiwgbnVsbCwgW3tcbiAgICAgIGtleTogXCJWRVJTSU9OXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIFZFUlNJT04kOTtcbiAgICAgIH1cbiAgICB9XSk7XG5cbiAgICByZXR1cm4gVGFiO1xuICB9KCk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJChkb2N1bWVudCkub24oRXZlbnQkOS5DTElDS19EQVRBX0FQSSwgU2VsZWN0b3IkOS5EQVRBX1RPR0dMRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIFRhYi5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoJCh0aGlzKSwgJ3Nob3cnKTtcbiAgfSk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogalF1ZXJ5XG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICAkLmZuW05BTUUkOV0gPSBUYWIuX2pRdWVyeUludGVyZmFjZTtcbiAgJC5mbltOQU1FJDldLkNvbnN0cnVjdG9yID0gVGFiO1xuXG4gICQuZm5bTkFNRSQ5XS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICQuZm5bTkFNRSQ5XSA9IEpRVUVSWV9OT19DT05GTElDVCQ5O1xuICAgIHJldHVybiBUYWIuX2pRdWVyeUludGVyZmFjZTtcbiAgfTtcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIENvbnN0YW50c1xuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgdmFyIE5BTUUkYSA9ICd0b2FzdCc7XG4gIHZhciBWRVJTSU9OJGEgPSAnNC4zLjEnO1xuICB2YXIgREFUQV9LRVkkYSA9ICdicy50b2FzdCc7XG4gIHZhciBFVkVOVF9LRVkkYSA9IFwiLlwiICsgREFUQV9LRVkkYTtcbiAgdmFyIEpRVUVSWV9OT19DT05GTElDVCRhID0gJC5mbltOQU1FJGFdO1xuICB2YXIgRXZlbnQkYSA9IHtcbiAgICBDTElDS19ESVNNSVNTOiBcImNsaWNrLmRpc21pc3NcIiArIEVWRU5UX0tFWSRhLFxuICAgIEhJREU6IFwiaGlkZVwiICsgRVZFTlRfS0VZJGEsXG4gICAgSElEREVOOiBcImhpZGRlblwiICsgRVZFTlRfS0VZJGEsXG4gICAgU0hPVzogXCJzaG93XCIgKyBFVkVOVF9LRVkkYSxcbiAgICBTSE9XTjogXCJzaG93blwiICsgRVZFTlRfS0VZJGFcbiAgfTtcbiAgdmFyIENsYXNzTmFtZSRhID0ge1xuICAgIEZBREU6ICdmYWRlJyxcbiAgICBISURFOiAnaGlkZScsXG4gICAgU0hPVzogJ3Nob3cnLFxuICAgIFNIT1dJTkc6ICdzaG93aW5nJ1xuICB9O1xuICB2YXIgRGVmYXVsdFR5cGUkNyA9IHtcbiAgICBhbmltYXRpb246ICdib29sZWFuJyxcbiAgICBhdXRvaGlkZTogJ2Jvb2xlYW4nLFxuICAgIGRlbGF5OiAnbnVtYmVyJ1xuICB9O1xuICB2YXIgRGVmYXVsdCQ3ID0ge1xuICAgIGFuaW1hdGlvbjogdHJ1ZSxcbiAgICBhdXRvaGlkZTogdHJ1ZSxcbiAgICBkZWxheTogNTAwXG4gIH07XG4gIHZhciBTZWxlY3RvciRhID0ge1xuICAgIERBVEFfRElTTUlTUzogJ1tkYXRhLWRpc21pc3M9XCJ0b2FzdFwiXSdcbiAgICAvKipcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKiBDbGFzcyBEZWZpbml0aW9uXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICovXG5cbiAgfTtcblxuICB2YXIgVG9hc3QgPVxuICAvKiNfX1BVUkVfXyovXG4gIGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUb2FzdChlbGVtZW50LCBjb25maWcpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgICB0aGlzLl90aW1lb3V0ID0gbnVsbDtcblxuICAgICAgdGhpcy5fc2V0TGlzdGVuZXJzKCk7XG4gICAgfSAvLyBHZXR0ZXJzXG5cblxuICAgIHZhciBfcHJvdG8gPSBUb2FzdC5wcm90b3R5cGU7XG5cbiAgICAvLyBQdWJsaWNcbiAgICBfcHJvdG8uc2hvdyA9IGZ1bmN0aW9uIHNob3coKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoRXZlbnQkYS5TSE9XKTtcblxuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5hbmltYXRpb24pIHtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZSRhLkZBREUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29tcGxldGUgPSBmdW5jdGlvbiBjb21wbGV0ZSgpIHtcbiAgICAgICAgX3RoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDbGFzc05hbWUkYS5TSE9XSU5HKTtcblxuICAgICAgICBfdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZSRhLlNIT1cpO1xuXG4gICAgICAgICQoX3RoaXMuX2VsZW1lbnQpLnRyaWdnZXIoRXZlbnQkYS5TSE9XTik7XG5cbiAgICAgICAgaWYgKF90aGlzLl9jb25maWcuYXV0b2hpZGUpIHtcbiAgICAgICAgICBfdGhpcy5oaWRlKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDbGFzc05hbWUkYS5ISURFKTtcblxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZSRhLlNIT1dJTkcpO1xuXG4gICAgICBpZiAodGhpcy5fY29uZmlnLmFuaW1hdGlvbikge1xuICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgY29tcGxldGUpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uaGlkZSA9IGZ1bmN0aW9uIGhpZGUod2l0aG91dFRpbWVvdXQpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAoIXRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENsYXNzTmFtZSRhLlNIT1cpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgJCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKEV2ZW50JGEuSElERSk7XG5cbiAgICAgIGlmICh3aXRob3V0VGltZW91dCkge1xuICAgICAgICB0aGlzLl9jbG9zZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMi5fY2xvc2UoKTtcbiAgICAgICAgfSwgdGhpcy5fY29uZmlnLmRlbGF5KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuICAgICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGlmICh0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDbGFzc05hbWUkYS5TSE9XKSkge1xuICAgICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ2xhc3NOYW1lJGEuU0hPVyk7XG4gICAgICB9XG5cbiAgICAgICQodGhpcy5fZWxlbWVudCkub2ZmKEV2ZW50JGEuQ0xJQ0tfRElTTUlTUyk7XG4gICAgICAkLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwgREFUQV9LRVkkYSk7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IG51bGw7XG4gICAgfSAvLyBQcml2YXRlXG4gICAgO1xuXG4gICAgX3Byb3RvLl9nZXRDb25maWcgPSBmdW5jdGlvbiBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgICAgY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgRGVmYXVsdCQ3LCAkKHRoaXMuX2VsZW1lbnQpLmRhdGEoKSwgdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiYgY29uZmlnID8gY29uZmlnIDoge30pO1xuICAgICAgVXRpbC50eXBlQ2hlY2tDb25maWcoTkFNRSRhLCBjb25maWcsIHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFR5cGUpO1xuICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9zZXRMaXN0ZW5lcnMgPSBmdW5jdGlvbiBfc2V0TGlzdGVuZXJzKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgICQodGhpcy5fZWxlbWVudCkub24oRXZlbnQkYS5DTElDS19ESVNNSVNTLCBTZWxlY3RvciRhLkRBVEFfRElTTUlTUywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMzLmhpZGUodHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9jbG9zZSA9IGZ1bmN0aW9uIF9jbG9zZSgpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICB2YXIgY29tcGxldGUgPSBmdW5jdGlvbiBjb21wbGV0ZSgpIHtcbiAgICAgICAgX3RoaXM0Ll9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lJGEuSElERSk7XG5cbiAgICAgICAgJChfdGhpczQuX2VsZW1lbnQpLnRyaWdnZXIoRXZlbnQkYS5ISURERU4pO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENsYXNzTmFtZSRhLlNIT1cpO1xuXG4gICAgICBpZiAodGhpcy5fY29uZmlnLmFuaW1hdGlvbikge1xuICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgY29tcGxldGUpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0gLy8gU3RhdGljXG4gICAgO1xuXG4gICAgVG9hc3QuX2pRdWVyeUludGVyZmFjZSA9IGZ1bmN0aW9uIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyICRlbGVtZW50ID0gJCh0aGlzKTtcbiAgICAgICAgdmFyIGRhdGEgPSAkZWxlbWVudC5kYXRhKERBVEFfS0VZJGEpO1xuXG4gICAgICAgIHZhciBfY29uZmlnID0gdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiYgY29uZmlnO1xuXG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgIGRhdGEgPSBuZXcgVG9hc3QodGhpcywgX2NvbmZpZyk7XG4gICAgICAgICAgJGVsZW1lbnQuZGF0YShEQVRBX0tFWSRhLCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIG1ldGhvZCBuYW1lZCBcXFwiXCIgKyBjb25maWcgKyBcIlxcXCJcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YVtjb25maWddKHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX2NyZWF0ZUNsYXNzKFRvYXN0LCBudWxsLCBbe1xuICAgICAga2V5OiBcIlZFUlNJT05cIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gVkVSU0lPTiRhO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJEZWZhdWx0VHlwZVwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBEZWZhdWx0VHlwZSQ3O1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJEZWZhdWx0XCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIERlZmF1bHQkNztcbiAgICAgIH1cbiAgICB9XSk7XG5cbiAgICByZXR1cm4gVG9hc3Q7XG4gIH0oKTtcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBqUXVlcnlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJC5mbltOQU1FJGFdID0gVG9hc3QuX2pRdWVyeUludGVyZmFjZTtcbiAgJC5mbltOQU1FJGFdLkNvbnN0cnVjdG9yID0gVG9hc3Q7XG5cbiAgJC5mbltOQU1FJGFdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbltOQU1FJGFdID0gSlFVRVJZX05PX0NPTkZMSUNUJGE7XG4gICAgcmV0dXJuIFRvYXN0Ll9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCAodjQuMy4xKTogaW5kZXguanNcbiAgICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodHlwZW9mICQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb290c3RyYXBcXCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgalF1ZXJ5LiBqUXVlcnkgbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgQm9vdHN0cmFwXFwncyBKYXZhU2NyaXB0LicpO1xuICAgIH1cblxuICAgIHZhciB2ZXJzaW9uID0gJC5mbi5qcXVlcnkuc3BsaXQoJyAnKVswXS5zcGxpdCgnLicpO1xuICAgIHZhciBtaW5NYWpvciA9IDE7XG4gICAgdmFyIGx0TWFqb3IgPSAyO1xuICAgIHZhciBtaW5NaW5vciA9IDk7XG4gICAgdmFyIG1pblBhdGNoID0gMTtcbiAgICB2YXIgbWF4TWFqb3IgPSA0O1xuXG4gICAgaWYgKHZlcnNpb25bMF0gPCBsdE1ham9yICYmIHZlcnNpb25bMV0gPCBtaW5NaW5vciB8fCB2ZXJzaW9uWzBdID09PSBtaW5NYWpvciAmJiB2ZXJzaW9uWzFdID09PSBtaW5NaW5vciAmJiB2ZXJzaW9uWzJdIDwgbWluUGF0Y2ggfHwgdmVyc2lvblswXSA+PSBtYXhNYWpvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdCb290c3RyYXBcXCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgYXQgbGVhc3QgalF1ZXJ5IHYxLjkuMSBidXQgbGVzcyB0aGFuIHY0LjAuMCcpO1xuICAgIH1cbiAgfSkoKTtcblxuICBleHBvcnRzLlV0aWwgPSBVdGlsO1xuICBleHBvcnRzLkFsZXJ0ID0gQWxlcnQ7XG4gIGV4cG9ydHMuQnV0dG9uID0gQnV0dG9uO1xuICBleHBvcnRzLkNhcm91c2VsID0gQ2Fyb3VzZWw7XG4gIGV4cG9ydHMuQ29sbGFwc2UgPSBDb2xsYXBzZTtcbiAgZXhwb3J0cy5Ecm9wZG93biA9IERyb3Bkb3duO1xuICBleHBvcnRzLk1vZGFsID0gTW9kYWw7XG4gIGV4cG9ydHMuUG9wb3ZlciA9IFBvcG92ZXI7XG4gIGV4cG9ydHMuU2Nyb2xsc3B5ID0gU2Nyb2xsU3B5O1xuICBleHBvcnRzLlRhYiA9IFRhYjtcbiAgZXhwb3J0cy5Ub2FzdCA9IFRvYXN0O1xuICBleHBvcnRzLlRvb2x0aXAgPSBUb29sdGlwO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJvb3RzdHJhcC5qcy5tYXBcbiIsInZhciBtYXRjaGVzID0gcmVxdWlyZSgnbWF0Y2hlcy1zZWxlY3RvcicpXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChlbGVtZW50LCBzZWxlY3RvciwgY2hlY2tZb1NlbGYpIHtcclxuICB2YXIgcGFyZW50ID0gY2hlY2tZb1NlbGYgPyBlbGVtZW50IDogZWxlbWVudC5wYXJlbnROb2RlXHJcblxyXG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50ICE9PSBkb2N1bWVudCkge1xyXG4gICAgaWYgKG1hdGNoZXMocGFyZW50LCBzZWxlY3RvcikpIHJldHVybiBwYXJlbnQ7XHJcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZVxyXG4gIH1cclxufVxyXG4iLCJcclxuLyoqXHJcbiAqIEVsZW1lbnQgcHJvdG90eXBlLlxyXG4gKi9cclxuXHJcbnZhciBwcm90byA9IEVsZW1lbnQucHJvdG90eXBlO1xyXG5cclxuLyoqXHJcbiAqIFZlbmRvciBmdW5jdGlvbi5cclxuICovXHJcblxyXG52YXIgdmVuZG9yID0gcHJvdG8ubWF0Y2hlc1NlbGVjdG9yXHJcbiAgfHwgcHJvdG8ud2Via2l0TWF0Y2hlc1NlbGVjdG9yXHJcbiAgfHwgcHJvdG8ubW96TWF0Y2hlc1NlbGVjdG9yXHJcbiAgfHwgcHJvdG8ubXNNYXRjaGVzU2VsZWN0b3JcclxuICB8fCBwcm90by5vTWF0Y2hlc1NlbGVjdG9yO1xyXG5cclxuLyoqXHJcbiAqIEV4cG9zZSBgbWF0Y2goKWAuXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBtYXRjaDtcclxuXHJcbi8qKlxyXG4gKiBNYXRjaCBgZWxgIHRvIGBzZWxlY3RvcmAuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcclxuICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yXHJcbiAqIEByZXR1cm4ge0Jvb2xlYW59XHJcbiAqIEBhcGkgcHVibGljXHJcbiAqL1xyXG5cclxuZnVuY3Rpb24gbWF0Y2goZWwsIHNlbGVjdG9yKSB7XHJcbiAgaWYgKHZlbmRvcikgcmV0dXJuIHZlbmRvci5jYWxsKGVsLCBzZWxlY3Rvcik7XHJcbiAgdmFyIG5vZGVzID0gZWwucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcclxuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgKytpKSB7XHJcbiAgICBpZiAobm9kZXNbaV0gPT0gZWwpIHJldHVybiB0cnVlO1xyXG4gIH1cclxuICByZXR1cm4gZmFsc2U7XHJcbn0iLCJ2YXIgYmluZCA9IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyID8gJ2FkZEV2ZW50TGlzdGVuZXInIDogJ2F0dGFjaEV2ZW50JyxcbiAgICB1bmJpbmQgPSB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciA/ICdyZW1vdmVFdmVudExpc3RlbmVyJyA6ICdkZXRhY2hFdmVudCcsXG4gICAgcHJlZml4ID0gYmluZCAhPT0gJ2FkZEV2ZW50TGlzdGVuZXInID8gJ29uJyA6ICcnO1xuXG4vKipcbiAqIEJpbmQgYGVsYCBldmVudCBgdHlwZWAgdG8gYGZuYC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gY2FwdHVyZVxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMuYmluZCA9IGZ1bmN0aW9uKGVsLCB0eXBlLCBmbiwgY2FwdHVyZSl7XG4gIGVsW2JpbmRdKHByZWZpeCArIHR5cGUsIGZuLCBjYXB0dXJlIHx8IGZhbHNlKTtcbiAgcmV0dXJuIGZuO1xufTtcblxuLyoqXG4gKiBVbmJpbmQgYGVsYCBldmVudCBgdHlwZWAncyBjYWxsYmFjayBgZm5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtCb29sZWFufSBjYXB0dXJlXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy51bmJpbmQgPSBmdW5jdGlvbihlbCwgdHlwZSwgZm4sIGNhcHR1cmUpe1xuICBlbFt1bmJpbmRdKHByZWZpeCArIHR5cGUsIGZuLCBjYXB0dXJlIHx8IGZhbHNlKTtcbiAgcmV0dXJuIGZuO1xufTsiLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiKShmYWxzZSk7XG4vLyBNb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi8qIVxcbiAqIEJvb3RzdHJhcCB2NC4zLjEgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXFxuICogQ29weXJpZ2h0IDIwMTEtMjAxOSBUaGUgQm9vdHN0cmFwIEF1dGhvcnNcXG4gKiBDb3B5cmlnaHQgMjAxMS0yMDE5IFR3aXR0ZXIsIEluYy5cXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxcbiAqL1xcbjpyb290IHtcXG4gIC0tYmx1ZTogIzAwN2JmZjtcXG4gIC0taW5kaWdvOiAjNjYxMGYyO1xcbiAgLS1wdXJwbGU6ICM2ZjQyYzE7XFxuICAtLXBpbms6ICNlODNlOGM7XFxuICAtLXJlZDogI2RjMzU0NTtcXG4gIC0tb3JhbmdlOiAjZmQ3ZTE0O1xcbiAgLS15ZWxsb3c6ICNmZmMxMDc7XFxuICAtLWdyZWVuOiAjMjhhNzQ1O1xcbiAgLS10ZWFsOiAjMjBjOTk3O1xcbiAgLS1jeWFuOiAjMTdhMmI4O1xcbiAgLS13aGl0ZTogI2ZmZjtcXG4gIC0tZ3JheTogIzZjNzU3ZDtcXG4gIC0tZ3JheS1kYXJrOiAjMzQzYTQwO1xcbiAgLS1wcmltYXJ5OiAjMDA3YmZmO1xcbiAgLS1zZWNvbmRhcnk6ICM2Yzc1N2Q7XFxuICAtLXN1Y2Nlc3M6ICMyOGE3NDU7XFxuICAtLWluZm86ICMxN2EyYjg7XFxuICAtLXdhcm5pbmc6ICNmZmMxMDc7XFxuICAtLWRhbmdlcjogI2RjMzU0NTtcXG4gIC0tbGlnaHQ6ICNmOGY5ZmE7XFxuICAtLWRhcms6ICMzNDNhNDA7XFxuICAtLWJyZWFrcG9pbnQteHM6IDA7XFxuICAtLWJyZWFrcG9pbnQtc206IDU3NnB4O1xcbiAgLS1icmVha3BvaW50LW1kOiA3NjhweDtcXG4gIC0tYnJlYWtwb2ludC1sZzogOTkycHg7XFxuICAtLWJyZWFrcG9pbnQteGw6IDEyMDBweDtcXG4gIC0tZm9udC1mYW1pbHktc2Fucy1zZXJpZjogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcXFwiU2Vnb2UgVUlcXFwiLCBSb2JvdG8sIFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsIEFyaWFsLCBcXFwiTm90byBTYW5zXFxcIiwgc2Fucy1zZXJpZiwgXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIiwgXFxcIlNlZ29lIFVJIEVtb2ppXFxcIiwgXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCIsIFxcXCJOb3RvIENvbG9yIEVtb2ppXFxcIjtcXG4gIC0tZm9udC1mYW1pbHktbW9ub3NwYWNlOiBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFxcXCJMaWJlcmF0aW9uIE1vbm9cXFwiLCBcXFwiQ291cmllciBOZXdcXFwiLCBtb25vc3BhY2U7XFxufVxcblxcbiosXFxuKjo6YmVmb3JlLFxcbio6OmFmdGVyIHtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcblxcbmh0bWwge1xcbiAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7XFxuICBsaW5lLWhlaWdodDogMS4xNTtcXG4gIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcXG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTtcXG59XFxuXFxuYXJ0aWNsZSwgYXNpZGUsIGZpZ2NhcHRpb24sIGZpZ3VyZSwgZm9vdGVyLCBoZWFkZXIsIGhncm91cCwgbWFpbiwgbmF2LCBzZWN0aW9uIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG5ib2R5IHtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFxcXCJTZWdvZSBVSVxcXCIsIFJvYm90bywgXFxcIkhlbHZldGljYSBOZXVlXFxcIiwgQXJpYWwsIFxcXCJOb3RvIFNhbnNcXFwiLCBzYW5zLXNlcmlmLCBcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLCBcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLCBcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIiwgXFxcIk5vdG8gQ29sb3IgRW1vamlcXFwiO1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbn1cXG5cXG5bdGFiaW5kZXg9XFxcIi0xXFxcIl06Zm9jdXMge1xcbiAgb3V0bGluZTogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG5ociB7XFxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcXG4gIGhlaWdodDogMDtcXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xcbn1cXG5cXG5oMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHtcXG4gIG1hcmdpbi10b3A6IDA7XFxuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XFxufVxcblxcbnAge1xcbiAgbWFyZ2luLXRvcDogMDtcXG4gIG1hcmdpbi1ib3R0b206IDFyZW07XFxufVxcblxcbmFiYnJbdGl0bGVdLFxcbmFiYnJbZGF0YS1vcmlnaW5hbC10aXRsZV0ge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICAtd2Via2l0LXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDtcXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDtcXG4gIGN1cnNvcjogaGVscDtcXG4gIGJvcmRlci1ib3R0b206IDA7XFxuICAtd2Via2l0LXRleHQtZGVjb3JhdGlvbi1za2lwLWluazogbm9uZTtcXG4gIHRleHQtZGVjb3JhdGlvbi1za2lwLWluazogbm9uZTtcXG59XFxuXFxuYWRkcmVzcyB7XFxuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxufVxcblxcbm9sLFxcbnVsLFxcbmRsIHtcXG4gIG1hcmdpbi10b3A6IDA7XFxuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xcbn1cXG5cXG5vbCBvbCxcXG51bCB1bCxcXG5vbCB1bCxcXG51bCBvbCB7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbn1cXG5cXG5kdCB7XFxuICBmb250LXdlaWdodDogNzAwO1xcbn1cXG5cXG5kZCB7XFxuICBtYXJnaW4tYm90dG9tOiAuNXJlbTtcXG4gIG1hcmdpbi1sZWZ0OiAwO1xcbn1cXG5cXG5ibG9ja3F1b3RlIHtcXG4gIG1hcmdpbjogMCAwIDFyZW07XFxufVxcblxcbmIsXFxuc3Ryb25nIHtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XFxufVxcblxcbnNtYWxsIHtcXG4gIGZvbnQtc2l6ZTogODAlO1xcbn1cXG5cXG5zdWIsXFxuc3VwIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGZvbnQtc2l6ZTogNzUlO1xcbiAgbGluZS1oZWlnaHQ6IDA7XFxuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XFxufVxcblxcbnN1YiB7XFxuICBib3R0b206IC0uMjVlbTtcXG59XFxuXFxuc3VwIHtcXG4gIHRvcDogLS41ZW07XFxufVxcblxcbmEge1xcbiAgY29sb3I6ICMwMDdiZmY7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuYTpob3ZlciB7XFxuICBjb2xvcjogIzAwNTZiMztcXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbn1cXG5cXG5hOm5vdChbaHJlZl0pOm5vdChbdGFiaW5kZXhdKSB7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuXFxuYTpub3QoW2hyZWZdKTpub3QoW3RhYmluZGV4XSk6aG92ZXIsIGE6bm90KFtocmVmXSk6bm90KFt0YWJpbmRleF0pOmZvY3VzIHtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbn1cXG5cXG5hOm5vdChbaHJlZl0pOm5vdChbdGFiaW5kZXhdKTpmb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbn1cXG5cXG5wcmUsXFxuY29kZSxcXG5rYmQsXFxuc2FtcCB7XFxuICBmb250LWZhbWlseTogU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcXFwiTGliZXJhdGlvbiBNb25vXFxcIiwgXFxcIkNvdXJpZXIgTmV3XFxcIiwgbW9ub3NwYWNlO1xcbiAgZm9udC1zaXplOiAxZW07XFxufVxcblxcbnByZSB7XFxuICBtYXJnaW4tdG9wOiAwO1xcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbn1cXG5cXG5maWd1cmUge1xcbiAgbWFyZ2luOiAwIDAgMXJlbTtcXG59XFxuXFxuaW1nIHtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuICBib3JkZXItc3R5bGU6IG5vbmU7XFxufVxcblxcbnN2ZyB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG59XFxuXFxudGFibGUge1xcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcXG59XFxuXFxuY2FwdGlvbiB7XFxuICBwYWRkaW5nLXRvcDogMC43NXJlbTtcXG4gIHBhZGRpbmctYm90dG9tOiAwLjc1cmVtO1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgY2FwdGlvbi1zaWRlOiBib3R0b207XFxufVxcblxcbnRoIHtcXG4gIHRleHQtYWxpZ246IGluaGVyaXQ7XFxufVxcblxcbmxhYmVsIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcXG59XFxuXFxuYnV0dG9uIHtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxufVxcblxcbmJ1dHRvbjpmb2N1cyB7XFxuICBvdXRsaW5lOiAxcHggZG90dGVkO1xcbiAgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO1xcbn1cXG5cXG5pbnB1dCxcXG5idXR0b24sXFxuc2VsZWN0LFxcbm9wdGdyb3VwLFxcbnRleHRhcmVhIHtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xcbiAgZm9udC1zaXplOiBpbmhlcml0O1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxufVxcblxcbmJ1dHRvbixcXG5pbnB1dCB7XFxuICBvdmVyZmxvdzogdmlzaWJsZTtcXG59XFxuXFxuYnV0dG9uLFxcbnNlbGVjdCB7XFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXG59XFxuXFxuc2VsZWN0IHtcXG4gIHdvcmQtd3JhcDogbm9ybWFsO1xcbn1cXG5cXG5idXR0b24sXFxuW3R5cGU9XFxcImJ1dHRvblxcXCJdLFxcblt0eXBlPVxcXCJyZXNldFxcXCJdLFxcblt0eXBlPVxcXCJzdWJtaXRcXFwiXSB7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjtcXG59XFxuXFxuYnV0dG9uOm5vdCg6ZGlzYWJsZWQpLFxcblt0eXBlPVxcXCJidXR0b25cXFwiXTpub3QoOmRpc2FibGVkKSxcXG5bdHlwZT1cXFwicmVzZXRcXFwiXTpub3QoOmRpc2FibGVkKSxcXG5bdHlwZT1cXFwic3VibWl0XFxcIl06bm90KDpkaXNhYmxlZCkge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG5idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXFxuW3R5cGU9XFxcImJ1dHRvblxcXCJdOjotbW96LWZvY3VzLWlubmVyLFxcblt0eXBlPVxcXCJyZXNldFxcXCJdOjotbW96LWZvY3VzLWlubmVyLFxcblt0eXBlPVxcXCJzdWJtaXRcXFwiXTo6LW1vei1mb2N1cy1pbm5lciB7XFxuICBwYWRkaW5nOiAwO1xcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xcbn1cXG5cXG5pbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdLFxcbmlucHV0W3R5cGU9XFxcImNoZWNrYm94XFxcIl0ge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIHBhZGRpbmc6IDA7XFxufVxcblxcbmlucHV0W3R5cGU9XFxcImRhdGVcXFwiXSxcXG5pbnB1dFt0eXBlPVxcXCJ0aW1lXFxcIl0sXFxuaW5wdXRbdHlwZT1cXFwiZGF0ZXRpbWUtbG9jYWxcXFwiXSxcXG5pbnB1dFt0eXBlPVxcXCJtb250aFxcXCJdIHtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbGlzdGJveDtcXG59XFxuXFxudGV4dGFyZWEge1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxuICByZXNpemU6IHZlcnRpY2FsO1xcbn1cXG5cXG5maWVsZHNldCB7XFxuICBtaW4td2lkdGg6IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgbWFyZ2luOiAwO1xcbiAgYm9yZGVyOiAwO1xcbn1cXG5cXG5sZWdlbmQge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIHBhZGRpbmc6IDA7XFxuICBtYXJnaW4tYm90dG9tOiAuNXJlbTtcXG4gIGZvbnQtc2l6ZTogMS41cmVtO1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XFxufVxcblxcbnByb2dyZXNzIHtcXG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcXG59XFxuXFxuW3R5cGU9XFxcIm51bWJlclxcXCJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxcblt0eXBlPVxcXCJudW1iZXJcXFwiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcblxcblt0eXBlPVxcXCJzZWFyY2hcXFwiXSB7XFxuICBvdXRsaW5lLW9mZnNldDogLTJweDtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuXFxuW3R5cGU9XFxcInNlYXJjaFxcXCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuXFxuOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiB7XFxuICBmb250OiBpbmhlcml0O1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247XFxufVxcblxcbm91dHB1dCB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcblxcbnN1bW1hcnkge1xcbiAgZGlzcGxheTogbGlzdC1pdGVtO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG50ZW1wbGF0ZSB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5cXG5baGlkZGVuXSB7XFxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxufVxcblxcbmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsXFxuLmgxLCAuaDIsIC5oMywgLmg0LCAuaDUsIC5oNiB7XFxuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuMjtcXG59XFxuXFxuaDEsIC5oMSB7XFxuICBmb250LXNpemU6IDIuNXJlbTtcXG59XFxuXFxuaDIsIC5oMiB7XFxuICBmb250LXNpemU6IDJyZW07XFxufVxcblxcbmgzLCAuaDMge1xcbiAgZm9udC1zaXplOiAxLjc1cmVtO1xcbn1cXG5cXG5oNCwgLmg0IHtcXG4gIGZvbnQtc2l6ZTogMS41cmVtO1xcbn1cXG5cXG5oNSwgLmg1IHtcXG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcXG59XFxuXFxuaDYsIC5oNiB7XFxuICBmb250LXNpemU6IDFyZW07XFxufVxcblxcbi5sZWFkIHtcXG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcXG4gIGZvbnQtd2VpZ2h0OiAzMDA7XFxufVxcblxcbi5kaXNwbGF5LTEge1xcbiAgZm9udC1zaXplOiA2cmVtO1xcbiAgZm9udC13ZWlnaHQ6IDMwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjI7XFxufVxcblxcbi5kaXNwbGF5LTIge1xcbiAgZm9udC1zaXplOiA1LjVyZW07XFxuICBmb250LXdlaWdodDogMzAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuMjtcXG59XFxuXFxuLmRpc3BsYXktMyB7XFxuICBmb250LXNpemU6IDQuNXJlbTtcXG4gIGZvbnQtd2VpZ2h0OiAzMDA7XFxuICBsaW5lLWhlaWdodDogMS4yO1xcbn1cXG5cXG4uZGlzcGxheS00IHtcXG4gIGZvbnQtc2l6ZTogMy41cmVtO1xcbiAgZm9udC13ZWlnaHQ6IDMwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjI7XFxufVxcblxcbmhyIHtcXG4gIG1hcmdpbi10b3A6IDFyZW07XFxuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xcbiAgYm9yZGVyOiAwO1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xKTtcXG59XFxuXFxuc21hbGwsXFxuLnNtYWxsIHtcXG4gIGZvbnQtc2l6ZTogODAlO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG59XFxuXFxubWFyayxcXG4ubWFyayB7XFxuICBwYWRkaW5nOiAwLjJlbTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmY2Y4ZTM7XFxufVxcblxcbi5saXN0LXVuc3R5bGVkIHtcXG4gIHBhZGRpbmctbGVmdDogMDtcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XFxufVxcblxcbi5saXN0LWlubGluZSB7XFxuICBwYWRkaW5nLWxlZnQ6IDA7XFxuICBsaXN0LXN0eWxlOiBub25lO1xcbn1cXG5cXG4ubGlzdC1pbmxpbmUtaXRlbSB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcblxcbi5saXN0LWlubGluZS1pdGVtOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgbWFyZ2luLXJpZ2h0OiAwLjVyZW07XFxufVxcblxcbi5pbml0aWFsaXNtIHtcXG4gIGZvbnQtc2l6ZTogOTAlO1xcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcXG59XFxuXFxuLmJsb2NrcXVvdGUge1xcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcXG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcXG59XFxuXFxuLmJsb2NrcXVvdGUtZm9vdGVyIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgZm9udC1zaXplOiA4MCU7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG59XFxuXFxuLmJsb2NrcXVvdGUtZm9vdGVyOjpiZWZvcmUge1xcbiAgY29udGVudDogXFxcIlxcXFwyMDE0XFxcXDAwQTBcXFwiO1xcbn1cXG5cXG4uaW1nLWZsdWlkIHtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIGhlaWdodDogYXV0bztcXG59XFxuXFxuLmltZy10aHVtYm5haWwge1xcbiAgcGFkZGluZzogMC4yNXJlbTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZGVlMmU2O1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIGhlaWdodDogYXV0bztcXG59XFxuXFxuLmZpZ3VyZSB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcblxcbi5maWd1cmUtaW1nIHtcXG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxO1xcbn1cXG5cXG4uZmlndXJlLWNhcHRpb24ge1xcbiAgZm9udC1zaXplOiA5MCU7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG59XFxuXFxuY29kZSB7XFxuICBmb250LXNpemU6IDg3LjUlO1xcbiAgY29sb3I6ICNlODNlOGM7XFxuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xcbn1cXG5cXG5hID4gY29kZSB7XFxuICBjb2xvcjogaW5oZXJpdDtcXG59XFxuXFxua2JkIHtcXG4gIHBhZGRpbmc6IDAuMnJlbSAwLjRyZW07XFxuICBmb250LXNpemU6IDg3LjUlO1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjEyNTI5O1xcbiAgYm9yZGVyLXJhZGl1czogMC4ycmVtO1xcbn1cXG5cXG5rYmQga2JkIHtcXG4gIHBhZGRpbmc6IDA7XFxuICBmb250LXNpemU6IDEwMCU7XFxuICBmb250LXdlaWdodDogNzAwO1xcbn1cXG5cXG5wcmUge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBmb250LXNpemU6IDg3LjUlO1xcbiAgY29sb3I6ICMyMTI1Mjk7XFxufVxcblxcbnByZSBjb2RlIHtcXG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgd29yZC1icmVhazogbm9ybWFsO1xcbn1cXG5cXG4ucHJlLXNjcm9sbGFibGUge1xcbiAgbWF4LWhlaWdodDogMzQwcHg7XFxuICBvdmVyZmxvdy15OiBzY3JvbGw7XFxufVxcblxcbi5jb250YWluZXIge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLmNvbnRhaW5lciB7XFxuICAgIG1heC13aWR0aDogNTQwcHg7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLmNvbnRhaW5lciB7XFxuICAgIG1heC13aWR0aDogNzIwcHg7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xcbiAgLmNvbnRhaW5lciB7XFxuICAgIG1heC13aWR0aDogOTYwcHg7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC5jb250YWluZXIge1xcbiAgICBtYXgtd2lkdGg6IDExNDBweDtcXG4gIH1cXG59XFxuXFxuLmNvbnRhaW5lci1mbHVpZCB7XFxuICB3aWR0aDogMTAwJTtcXG4gIHBhZGRpbmctcmlnaHQ6IDE1cHg7XFxuICBwYWRkaW5nLWxlZnQ6IDE1cHg7XFxuICBtYXJnaW4tcmlnaHQ6IGF1dG87XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG59XFxuXFxuLnJvdyB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgbWFyZ2luLXJpZ2h0OiAtMTVweDtcXG4gIG1hcmdpbi1sZWZ0OiAtMTVweDtcXG59XFxuXFxuLm5vLWd1dHRlcnMge1xcbiAgbWFyZ2luLXJpZ2h0OiAwO1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxufVxcblxcbi5uby1ndXR0ZXJzID4gLmNvbCxcXG4ubm8tZ3V0dGVycyA+IFtjbGFzcyo9XFxcImNvbC1cXFwiXSB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwO1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbn1cXG5cXG4uY29sLTEsIC5jb2wtMiwgLmNvbC0zLCAuY29sLTQsIC5jb2wtNSwgLmNvbC02LCAuY29sLTcsIC5jb2wtOCwgLmNvbC05LCAuY29sLTEwLCAuY29sLTExLCAuY29sLTEyLCAuY29sLFxcbi5jb2wtYXV0bywgLmNvbC1zbS0xLCAuY29sLXNtLTIsIC5jb2wtc20tMywgLmNvbC1zbS00LCAuY29sLXNtLTUsIC5jb2wtc20tNiwgLmNvbC1zbS03LCAuY29sLXNtLTgsIC5jb2wtc20tOSwgLmNvbC1zbS0xMCwgLmNvbC1zbS0xMSwgLmNvbC1zbS0xMiwgLmNvbC1zbSxcXG4uY29sLXNtLWF1dG8sIC5jb2wtbWQtMSwgLmNvbC1tZC0yLCAuY29sLW1kLTMsIC5jb2wtbWQtNCwgLmNvbC1tZC01LCAuY29sLW1kLTYsIC5jb2wtbWQtNywgLmNvbC1tZC04LCAuY29sLW1kLTksIC5jb2wtbWQtMTAsIC5jb2wtbWQtMTEsIC5jb2wtbWQtMTIsIC5jb2wtbWQsXFxuLmNvbC1tZC1hdXRvLCAuY29sLWxnLTEsIC5jb2wtbGctMiwgLmNvbC1sZy0zLCAuY29sLWxnLTQsIC5jb2wtbGctNSwgLmNvbC1sZy02LCAuY29sLWxnLTcsIC5jb2wtbGctOCwgLmNvbC1sZy05LCAuY29sLWxnLTEwLCAuY29sLWxnLTExLCAuY29sLWxnLTEyLCAuY29sLWxnLFxcbi5jb2wtbGctYXV0bywgLmNvbC14bC0xLCAuY29sLXhsLTIsIC5jb2wteGwtMywgLmNvbC14bC00LCAuY29sLXhsLTUsIC5jb2wteGwtNiwgLmNvbC14bC03LCAuY29sLXhsLTgsIC5jb2wteGwtOSwgLmNvbC14bC0xMCwgLmNvbC14bC0xMSwgLmNvbC14bC0xMiwgLmNvbC14bCxcXG4uY29sLXhsLWF1dG8ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xcbn1cXG5cXG4uY29sIHtcXG4gIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiAwO1xcbiAgZmxleC1iYXNpczogMDtcXG4gIC1tcy1mbGV4LXBvc2l0aXZlOiAxO1xcbiAgZmxleC1ncm93OiAxO1xcbiAgbWF4LXdpZHRoOiAxMDAlO1xcbn1cXG5cXG4uY29sLWF1dG8ge1xcbiAgLW1zLWZsZXg6IDAgMCBhdXRvO1xcbiAgZmxleDogMCAwIGF1dG87XFxuICB3aWR0aDogYXV0bztcXG4gIG1heC13aWR0aDogMTAwJTtcXG59XFxuXFxuLmNvbC0xIHtcXG4gIC1tcy1mbGV4OiAwIDAgOC4zMzMzMzMlO1xcbiAgZmxleDogMCAwIDguMzMzMzMzJTtcXG4gIG1heC13aWR0aDogOC4zMzMzMzMlO1xcbn1cXG5cXG4uY29sLTIge1xcbiAgLW1zLWZsZXg6IDAgMCAxNi42NjY2NjclO1xcbiAgZmxleDogMCAwIDE2LjY2NjY2NyU7XFxuICBtYXgtd2lkdGg6IDE2LjY2NjY2NyU7XFxufVxcblxcbi5jb2wtMyB7XFxuICAtbXMtZmxleDogMCAwIDI1JTtcXG4gIGZsZXg6IDAgMCAyNSU7XFxuICBtYXgtd2lkdGg6IDI1JTtcXG59XFxuXFxuLmNvbC00IHtcXG4gIC1tcy1mbGV4OiAwIDAgMzMuMzMzMzMzJTtcXG4gIGZsZXg6IDAgMCAzMy4zMzMzMzMlO1xcbiAgbWF4LXdpZHRoOiAzMy4zMzMzMzMlO1xcbn1cXG5cXG4uY29sLTUge1xcbiAgLW1zLWZsZXg6IDAgMCA0MS42NjY2NjclO1xcbiAgZmxleDogMCAwIDQxLjY2NjY2NyU7XFxuICBtYXgtd2lkdGg6IDQxLjY2NjY2NyU7XFxufVxcblxcbi5jb2wtNiB7XFxuICAtbXMtZmxleDogMCAwIDUwJTtcXG4gIGZsZXg6IDAgMCA1MCU7XFxuICBtYXgtd2lkdGg6IDUwJTtcXG59XFxuXFxuLmNvbC03IHtcXG4gIC1tcy1mbGV4OiAwIDAgNTguMzMzMzMzJTtcXG4gIGZsZXg6IDAgMCA1OC4zMzMzMzMlO1xcbiAgbWF4LXdpZHRoOiA1OC4zMzMzMzMlO1xcbn1cXG5cXG4uY29sLTgge1xcbiAgLW1zLWZsZXg6IDAgMCA2Ni42NjY2NjclO1xcbiAgZmxleDogMCAwIDY2LjY2NjY2NyU7XFxuICBtYXgtd2lkdGg6IDY2LjY2NjY2NyU7XFxufVxcblxcbi5jb2wtOSB7XFxuICAtbXMtZmxleDogMCAwIDc1JTtcXG4gIGZsZXg6IDAgMCA3NSU7XFxuICBtYXgtd2lkdGg6IDc1JTtcXG59XFxuXFxuLmNvbC0xMCB7XFxuICAtbXMtZmxleDogMCAwIDgzLjMzMzMzMyU7XFxuICBmbGV4OiAwIDAgODMuMzMzMzMzJTtcXG4gIG1heC13aWR0aDogODMuMzMzMzMzJTtcXG59XFxuXFxuLmNvbC0xMSB7XFxuICAtbXMtZmxleDogMCAwIDkxLjY2NjY2NyU7XFxuICBmbGV4OiAwIDAgOTEuNjY2NjY3JTtcXG4gIG1heC13aWR0aDogOTEuNjY2NjY3JTtcXG59XFxuXFxuLmNvbC0xMiB7XFxuICAtbXMtZmxleDogMCAwIDEwMCU7XFxuICBmbGV4OiAwIDAgMTAwJTtcXG4gIG1heC13aWR0aDogMTAwJTtcXG59XFxuXFxuLm9yZGVyLWZpcnN0IHtcXG4gIC1tcy1mbGV4LW9yZGVyOiAtMTtcXG4gIG9yZGVyOiAtMTtcXG59XFxuXFxuLm9yZGVyLWxhc3Qge1xcbiAgLW1zLWZsZXgtb3JkZXI6IDEzO1xcbiAgb3JkZXI6IDEzO1xcbn1cXG5cXG4ub3JkZXItMCB7XFxuICAtbXMtZmxleC1vcmRlcjogMDtcXG4gIG9yZGVyOiAwO1xcbn1cXG5cXG4ub3JkZXItMSB7XFxuICAtbXMtZmxleC1vcmRlcjogMTtcXG4gIG9yZGVyOiAxO1xcbn1cXG5cXG4ub3JkZXItMiB7XFxuICAtbXMtZmxleC1vcmRlcjogMjtcXG4gIG9yZGVyOiAyO1xcbn1cXG5cXG4ub3JkZXItMyB7XFxuICAtbXMtZmxleC1vcmRlcjogMztcXG4gIG9yZGVyOiAzO1xcbn1cXG5cXG4ub3JkZXItNCB7XFxuICAtbXMtZmxleC1vcmRlcjogNDtcXG4gIG9yZGVyOiA0O1xcbn1cXG5cXG4ub3JkZXItNSB7XFxuICAtbXMtZmxleC1vcmRlcjogNTtcXG4gIG9yZGVyOiA1O1xcbn1cXG5cXG4ub3JkZXItNiB7XFxuICAtbXMtZmxleC1vcmRlcjogNjtcXG4gIG9yZGVyOiA2O1xcbn1cXG5cXG4ub3JkZXItNyB7XFxuICAtbXMtZmxleC1vcmRlcjogNztcXG4gIG9yZGVyOiA3O1xcbn1cXG5cXG4ub3JkZXItOCB7XFxuICAtbXMtZmxleC1vcmRlcjogODtcXG4gIG9yZGVyOiA4O1xcbn1cXG5cXG4ub3JkZXItOSB7XFxuICAtbXMtZmxleC1vcmRlcjogOTtcXG4gIG9yZGVyOiA5O1xcbn1cXG5cXG4ub3JkZXItMTAge1xcbiAgLW1zLWZsZXgtb3JkZXI6IDEwO1xcbiAgb3JkZXI6IDEwO1xcbn1cXG5cXG4ub3JkZXItMTEge1xcbiAgLW1zLWZsZXgtb3JkZXI6IDExO1xcbiAgb3JkZXI6IDExO1xcbn1cXG5cXG4ub3JkZXItMTIge1xcbiAgLW1zLWZsZXgtb3JkZXI6IDEyO1xcbiAgb3JkZXI6IDEyO1xcbn1cXG5cXG4ub2Zmc2V0LTEge1xcbiAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzJTtcXG59XFxuXFxuLm9mZnNldC0yIHtcXG4gIG1hcmdpbi1sZWZ0OiAxNi42NjY2NjclO1xcbn1cXG5cXG4ub2Zmc2V0LTMge1xcbiAgbWFyZ2luLWxlZnQ6IDI1JTtcXG59XFxuXFxuLm9mZnNldC00IHtcXG4gIG1hcmdpbi1sZWZ0OiAzMy4zMzMzMzMlO1xcbn1cXG5cXG4ub2Zmc2V0LTUge1xcbiAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NyU7XFxufVxcblxcbi5vZmZzZXQtNiB7XFxuICBtYXJnaW4tbGVmdDogNTAlO1xcbn1cXG5cXG4ub2Zmc2V0LTcge1xcbiAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzMyU7XFxufVxcblxcbi5vZmZzZXQtOCB7XFxuICBtYXJnaW4tbGVmdDogNjYuNjY2NjY3JTtcXG59XFxuXFxuLm9mZnNldC05IHtcXG4gIG1hcmdpbi1sZWZ0OiA3NSU7XFxufVxcblxcbi5vZmZzZXQtMTAge1xcbiAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMyU7XFxufVxcblxcbi5vZmZzZXQtMTEge1xcbiAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY2NyU7XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLmNvbC1zbSB7XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiAwO1xcbiAgICBmbGV4LWJhc2lzOiAwO1xcbiAgICAtbXMtZmxleC1wb3NpdGl2ZTogMTtcXG4gICAgZmxleC1ncm93OiAxO1xcbiAgICBtYXgtd2lkdGg6IDEwMCU7XFxuICB9XFxuICAuY29sLXNtLWF1dG8ge1xcbiAgICAtbXMtZmxleDogMCAwIGF1dG87XFxuICAgIGZsZXg6IDAgMCBhdXRvO1xcbiAgICB3aWR0aDogYXV0bztcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLmNvbC1zbS0xIHtcXG4gICAgLW1zLWZsZXg6IDAgMCA4LjMzMzMzMyU7XFxuICAgIGZsZXg6IDAgMCA4LjMzMzMzMyU7XFxuICAgIG1heC13aWR0aDogOC4zMzMzMzMlO1xcbiAgfVxcbiAgLmNvbC1zbS0yIHtcXG4gICAgLW1zLWZsZXg6IDAgMCAxNi42NjY2NjclO1xcbiAgICBmbGV4OiAwIDAgMTYuNjY2NjY3JTtcXG4gICAgbWF4LXdpZHRoOiAxNi42NjY2NjclO1xcbiAgfVxcbiAgLmNvbC1zbS0zIHtcXG4gICAgLW1zLWZsZXg6IDAgMCAyNSU7XFxuICAgIGZsZXg6IDAgMCAyNSU7XFxuICAgIG1heC13aWR0aDogMjUlO1xcbiAgfVxcbiAgLmNvbC1zbS00IHtcXG4gICAgLW1zLWZsZXg6IDAgMCAzMy4zMzMzMzMlO1xcbiAgICBmbGV4OiAwIDAgMzMuMzMzMzMzJTtcXG4gICAgbWF4LXdpZHRoOiAzMy4zMzMzMzMlO1xcbiAgfVxcbiAgLmNvbC1zbS01IHtcXG4gICAgLW1zLWZsZXg6IDAgMCA0MS42NjY2NjclO1xcbiAgICBmbGV4OiAwIDAgNDEuNjY2NjY3JTtcXG4gICAgbWF4LXdpZHRoOiA0MS42NjY2NjclO1xcbiAgfVxcbiAgLmNvbC1zbS02IHtcXG4gICAgLW1zLWZsZXg6IDAgMCA1MCU7XFxuICAgIGZsZXg6IDAgMCA1MCU7XFxuICAgIG1heC13aWR0aDogNTAlO1xcbiAgfVxcbiAgLmNvbC1zbS03IHtcXG4gICAgLW1zLWZsZXg6IDAgMCA1OC4zMzMzMzMlO1xcbiAgICBmbGV4OiAwIDAgNTguMzMzMzMzJTtcXG4gICAgbWF4LXdpZHRoOiA1OC4zMzMzMzMlO1xcbiAgfVxcbiAgLmNvbC1zbS04IHtcXG4gICAgLW1zLWZsZXg6IDAgMCA2Ni42NjY2NjclO1xcbiAgICBmbGV4OiAwIDAgNjYuNjY2NjY3JTtcXG4gICAgbWF4LXdpZHRoOiA2Ni42NjY2NjclO1xcbiAgfVxcbiAgLmNvbC1zbS05IHtcXG4gICAgLW1zLWZsZXg6IDAgMCA3NSU7XFxuICAgIGZsZXg6IDAgMCA3NSU7XFxuICAgIG1heC13aWR0aDogNzUlO1xcbiAgfVxcbiAgLmNvbC1zbS0xMCB7XFxuICAgIC1tcy1mbGV4OiAwIDAgODMuMzMzMzMzJTtcXG4gICAgZmxleDogMCAwIDgzLjMzMzMzMyU7XFxuICAgIG1heC13aWR0aDogODMuMzMzMzMzJTtcXG4gIH1cXG4gIC5jb2wtc20tMTEge1xcbiAgICAtbXMtZmxleDogMCAwIDkxLjY2NjY2NyU7XFxuICAgIGZsZXg6IDAgMCA5MS42NjY2NjclO1xcbiAgICBtYXgtd2lkdGg6IDkxLjY2NjY2NyU7XFxuICB9XFxuICAuY29sLXNtLTEyIHtcXG4gICAgLW1zLWZsZXg6IDAgMCAxMDAlO1xcbiAgICBmbGV4OiAwIDAgMTAwJTtcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLm9yZGVyLXNtLWZpcnN0IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IC0xO1xcbiAgICBvcmRlcjogLTE7XFxuICB9XFxuICAub3JkZXItc20tbGFzdCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAxMztcXG4gICAgb3JkZXI6IDEzO1xcbiAgfVxcbiAgLm9yZGVyLXNtLTAge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMDtcXG4gICAgb3JkZXI6IDA7XFxuICB9XFxuICAub3JkZXItc20tMSB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAxO1xcbiAgICBvcmRlcjogMTtcXG4gIH1cXG4gIC5vcmRlci1zbS0yIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDI7XFxuICAgIG9yZGVyOiAyO1xcbiAgfVxcbiAgLm9yZGVyLXNtLTMge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMztcXG4gICAgb3JkZXI6IDM7XFxuICB9XFxuICAub3JkZXItc20tNCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA0O1xcbiAgICBvcmRlcjogNDtcXG4gIH1cXG4gIC5vcmRlci1zbS01IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDU7XFxuICAgIG9yZGVyOiA1O1xcbiAgfVxcbiAgLm9yZGVyLXNtLTYge1xcbiAgICAtbXMtZmxleC1vcmRlcjogNjtcXG4gICAgb3JkZXI6IDY7XFxuICB9XFxuICAub3JkZXItc20tNyB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA3O1xcbiAgICBvcmRlcjogNztcXG4gIH1cXG4gIC5vcmRlci1zbS04IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDg7XFxuICAgIG9yZGVyOiA4O1xcbiAgfVxcbiAgLm9yZGVyLXNtLTkge1xcbiAgICAtbXMtZmxleC1vcmRlcjogOTtcXG4gICAgb3JkZXI6IDk7XFxuICB9XFxuICAub3JkZXItc20tMTAge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTA7XFxuICAgIG9yZGVyOiAxMDtcXG4gIH1cXG4gIC5vcmRlci1zbS0xMSB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAxMTtcXG4gICAgb3JkZXI6IDExO1xcbiAgfVxcbiAgLm9yZGVyLXNtLTEyIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDEyO1xcbiAgICBvcmRlcjogMTI7XFxuICB9XFxuICAub2Zmc2V0LXNtLTAge1xcbiAgICBtYXJnaW4tbGVmdDogMDtcXG4gIH1cXG4gIC5vZmZzZXQtc20tMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA4LjMzMzMzMyU7XFxuICB9XFxuICAub2Zmc2V0LXNtLTIge1xcbiAgICBtYXJnaW4tbGVmdDogMTYuNjY2NjY3JTtcXG4gIH1cXG4gIC5vZmZzZXQtc20tMyB7XFxuICAgIG1hcmdpbi1sZWZ0OiAyNSU7XFxuICB9XFxuICAub2Zmc2V0LXNtLTQge1xcbiAgICBtYXJnaW4tbGVmdDogMzMuMzMzMzMzJTtcXG4gIH1cXG4gIC5vZmZzZXQtc20tNSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY2NjclO1xcbiAgfVxcbiAgLm9mZnNldC1zbS02IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDUwJTtcXG4gIH1cXG4gIC5vZmZzZXQtc20tNyB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzMzMlO1xcbiAgfVxcbiAgLm9mZnNldC1zbS04IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDY2LjY2NjY2NyU7XFxuICB9XFxuICAub2Zmc2V0LXNtLTkge1xcbiAgICBtYXJnaW4tbGVmdDogNzUlO1xcbiAgfVxcbiAgLm9mZnNldC1zbS0xMCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA4My4zMzMzMzMlO1xcbiAgfVxcbiAgLm9mZnNldC1zbS0xMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY2NjclO1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gIC5jb2wtbWQge1xcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMDtcXG4gICAgZmxleC1iYXNpczogMDtcXG4gICAgLW1zLWZsZXgtcG9zaXRpdmU6IDE7XFxuICAgIGZsZXgtZ3JvdzogMTtcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLmNvbC1tZC1hdXRvIHtcXG4gICAgLW1zLWZsZXg6IDAgMCBhdXRvO1xcbiAgICBmbGV4OiAwIDAgYXV0bztcXG4gICAgd2lkdGg6IGF1dG87XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5jb2wtbWQtMSB7XFxuICAgIC1tcy1mbGV4OiAwIDAgOC4zMzMzMzMlO1xcbiAgICBmbGV4OiAwIDAgOC4zMzMzMzMlO1xcbiAgICBtYXgtd2lkdGg6IDguMzMzMzMzJTtcXG4gIH1cXG4gIC5jb2wtbWQtMiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMTYuNjY2NjY3JTtcXG4gICAgZmxleDogMCAwIDE2LjY2NjY2NyU7XFxuICAgIG1heC13aWR0aDogMTYuNjY2NjY3JTtcXG4gIH1cXG4gIC5jb2wtbWQtMyB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMjUlO1xcbiAgICBmbGV4OiAwIDAgMjUlO1xcbiAgICBtYXgtd2lkdGg6IDI1JTtcXG4gIH1cXG4gIC5jb2wtbWQtNCB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMzMuMzMzMzMzJTtcXG4gICAgZmxleDogMCAwIDMzLjMzMzMzMyU7XFxuICAgIG1heC13aWR0aDogMzMuMzMzMzMzJTtcXG4gIH1cXG4gIC5jb2wtbWQtNSB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNDEuNjY2NjY3JTtcXG4gICAgZmxleDogMCAwIDQxLjY2NjY2NyU7XFxuICAgIG1heC13aWR0aDogNDEuNjY2NjY3JTtcXG4gIH1cXG4gIC5jb2wtbWQtNiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNTAlO1xcbiAgICBmbGV4OiAwIDAgNTAlO1xcbiAgICBtYXgtd2lkdGg6IDUwJTtcXG4gIH1cXG4gIC5jb2wtbWQtNyB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNTguMzMzMzMzJTtcXG4gICAgZmxleDogMCAwIDU4LjMzMzMzMyU7XFxuICAgIG1heC13aWR0aDogNTguMzMzMzMzJTtcXG4gIH1cXG4gIC5jb2wtbWQtOCB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNjYuNjY2NjY3JTtcXG4gICAgZmxleDogMCAwIDY2LjY2NjY2NyU7XFxuICAgIG1heC13aWR0aDogNjYuNjY2NjY3JTtcXG4gIH1cXG4gIC5jb2wtbWQtOSB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNzUlO1xcbiAgICBmbGV4OiAwIDAgNzUlO1xcbiAgICBtYXgtd2lkdGg6IDc1JTtcXG4gIH1cXG4gIC5jb2wtbWQtMTAge1xcbiAgICAtbXMtZmxleDogMCAwIDgzLjMzMzMzMyU7XFxuICAgIGZsZXg6IDAgMCA4My4zMzMzMzMlO1xcbiAgICBtYXgtd2lkdGg6IDgzLjMzMzMzMyU7XFxuICB9XFxuICAuY29sLW1kLTExIHtcXG4gICAgLW1zLWZsZXg6IDAgMCA5MS42NjY2NjclO1xcbiAgICBmbGV4OiAwIDAgOTEuNjY2NjY3JTtcXG4gICAgbWF4LXdpZHRoOiA5MS42NjY2NjclO1xcbiAgfVxcbiAgLmNvbC1tZC0xMiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMTAwJTtcXG4gICAgZmxleDogMCAwIDEwMCU7XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5vcmRlci1tZC1maXJzdCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAtMTtcXG4gICAgb3JkZXI6IC0xO1xcbiAgfVxcbiAgLm9yZGVyLW1kLWxhc3Qge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTM7XFxuICAgIG9yZGVyOiAxMztcXG4gIH1cXG4gIC5vcmRlci1tZC0wIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDA7XFxuICAgIG9yZGVyOiAwO1xcbiAgfVxcbiAgLm9yZGVyLW1kLTEge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTtcXG4gICAgb3JkZXI6IDE7XFxuICB9XFxuICAub3JkZXItbWQtMiB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAyO1xcbiAgICBvcmRlcjogMjtcXG4gIH1cXG4gIC5vcmRlci1tZC0zIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDM7XFxuICAgIG9yZGVyOiAzO1xcbiAgfVxcbiAgLm9yZGVyLW1kLTQge1xcbiAgICAtbXMtZmxleC1vcmRlcjogNDtcXG4gICAgb3JkZXI6IDQ7XFxuICB9XFxuICAub3JkZXItbWQtNSB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA1O1xcbiAgICBvcmRlcjogNTtcXG4gIH1cXG4gIC5vcmRlci1tZC02IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDY7XFxuICAgIG9yZGVyOiA2O1xcbiAgfVxcbiAgLm9yZGVyLW1kLTcge1xcbiAgICAtbXMtZmxleC1vcmRlcjogNztcXG4gICAgb3JkZXI6IDc7XFxuICB9XFxuICAub3JkZXItbWQtOCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA4O1xcbiAgICBvcmRlcjogODtcXG4gIH1cXG4gIC5vcmRlci1tZC05IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDk7XFxuICAgIG9yZGVyOiA5O1xcbiAgfVxcbiAgLm9yZGVyLW1kLTEwIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDEwO1xcbiAgICBvcmRlcjogMTA7XFxuICB9XFxuICAub3JkZXItbWQtMTEge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTE7XFxuICAgIG9yZGVyOiAxMTtcXG4gIH1cXG4gIC5vcmRlci1tZC0xMiB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAxMjtcXG4gICAgb3JkZXI6IDEyO1xcbiAgfVxcbiAgLm9mZnNldC1tZC0wIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDA7XFxuICB9XFxuICAub2Zmc2V0LW1kLTEge1xcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzMzMlO1xcbiAgfVxcbiAgLm9mZnNldC1tZC0yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY2NyU7XFxuICB9XFxuICAub2Zmc2V0LW1kLTMge1xcbiAgICBtYXJnaW4tbGVmdDogMjUlO1xcbiAgfVxcbiAgLm9mZnNldC1tZC00IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzMyU7XFxuICB9XFxuICAub2Zmc2V0LW1kLTUge1xcbiAgICBtYXJnaW4tbGVmdDogNDEuNjY2NjY3JTtcXG4gIH1cXG4gIC5vZmZzZXQtbWQtNiB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1MCU7XFxuICB9XFxuICAub2Zmc2V0LW1kLTcge1xcbiAgICBtYXJnaW4tbGVmdDogNTguMzMzMzMzJTtcXG4gIH1cXG4gIC5vZmZzZXQtbWQtOCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NjclO1xcbiAgfVxcbiAgLm9mZnNldC1tZC05IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDc1JTtcXG4gIH1cXG4gIC5vZmZzZXQtbWQtMTAge1xcbiAgICBtYXJnaW4tbGVmdDogODMuMzMzMzMzJTtcXG4gIH1cXG4gIC5vZmZzZXQtbWQtMTEge1xcbiAgICBtYXJnaW4tbGVmdDogOTEuNjY2NjY3JTtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XFxuICAuY29sLWxnIHtcXG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDA7XFxuICAgIGZsZXgtYmFzaXM6IDA7XFxuICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAxO1xcbiAgICBmbGV4LWdyb3c6IDE7XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5jb2wtbGctYXV0byB7XFxuICAgIC1tcy1mbGV4OiAwIDAgYXV0bztcXG4gICAgZmxleDogMCAwIGF1dG87XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgICBtYXgtd2lkdGg6IDEwMCU7XFxuICB9XFxuICAuY29sLWxnLTEge1xcbiAgICAtbXMtZmxleDogMCAwIDguMzMzMzMzJTtcXG4gICAgZmxleDogMCAwIDguMzMzMzMzJTtcXG4gICAgbWF4LXdpZHRoOiA4LjMzMzMzMyU7XFxuICB9XFxuICAuY29sLWxnLTIge1xcbiAgICAtbXMtZmxleDogMCAwIDE2LjY2NjY2NyU7XFxuICAgIGZsZXg6IDAgMCAxNi42NjY2NjclO1xcbiAgICBtYXgtd2lkdGg6IDE2LjY2NjY2NyU7XFxuICB9XFxuICAuY29sLWxnLTMge1xcbiAgICAtbXMtZmxleDogMCAwIDI1JTtcXG4gICAgZmxleDogMCAwIDI1JTtcXG4gICAgbWF4LXdpZHRoOiAyNSU7XFxuICB9XFxuICAuY29sLWxnLTQge1xcbiAgICAtbXMtZmxleDogMCAwIDMzLjMzMzMzMyU7XFxuICAgIGZsZXg6IDAgMCAzMy4zMzMzMzMlO1xcbiAgICBtYXgtd2lkdGg6IDMzLjMzMzMzMyU7XFxuICB9XFxuICAuY29sLWxnLTUge1xcbiAgICAtbXMtZmxleDogMCAwIDQxLjY2NjY2NyU7XFxuICAgIGZsZXg6IDAgMCA0MS42NjY2NjclO1xcbiAgICBtYXgtd2lkdGg6IDQxLjY2NjY2NyU7XFxuICB9XFxuICAuY29sLWxnLTYge1xcbiAgICAtbXMtZmxleDogMCAwIDUwJTtcXG4gICAgZmxleDogMCAwIDUwJTtcXG4gICAgbWF4LXdpZHRoOiA1MCU7XFxuICB9XFxuICAuY29sLWxnLTcge1xcbiAgICAtbXMtZmxleDogMCAwIDU4LjMzMzMzMyU7XFxuICAgIGZsZXg6IDAgMCA1OC4zMzMzMzMlO1xcbiAgICBtYXgtd2lkdGg6IDU4LjMzMzMzMyU7XFxuICB9XFxuICAuY29sLWxnLTgge1xcbiAgICAtbXMtZmxleDogMCAwIDY2LjY2NjY2NyU7XFxuICAgIGZsZXg6IDAgMCA2Ni42NjY2NjclO1xcbiAgICBtYXgtd2lkdGg6IDY2LjY2NjY2NyU7XFxuICB9XFxuICAuY29sLWxnLTkge1xcbiAgICAtbXMtZmxleDogMCAwIDc1JTtcXG4gICAgZmxleDogMCAwIDc1JTtcXG4gICAgbWF4LXdpZHRoOiA3NSU7XFxuICB9XFxuICAuY29sLWxnLTEwIHtcXG4gICAgLW1zLWZsZXg6IDAgMCA4My4zMzMzMzMlO1xcbiAgICBmbGV4OiAwIDAgODMuMzMzMzMzJTtcXG4gICAgbWF4LXdpZHRoOiA4My4zMzMzMzMlO1xcbiAgfVxcbiAgLmNvbC1sZy0xMSB7XFxuICAgIC1tcy1mbGV4OiAwIDAgOTEuNjY2NjY3JTtcXG4gICAgZmxleDogMCAwIDkxLjY2NjY2NyU7XFxuICAgIG1heC13aWR0aDogOTEuNjY2NjY3JTtcXG4gIH1cXG4gIC5jb2wtbGctMTIge1xcbiAgICAtbXMtZmxleDogMCAwIDEwMCU7XFxuICAgIGZsZXg6IDAgMCAxMDAlO1xcbiAgICBtYXgtd2lkdGg6IDEwMCU7XFxuICB9XFxuICAub3JkZXItbGctZmlyc3Qge1xcbiAgICAtbXMtZmxleC1vcmRlcjogLTE7XFxuICAgIG9yZGVyOiAtMTtcXG4gIH1cXG4gIC5vcmRlci1sZy1sYXN0IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDEzO1xcbiAgICBvcmRlcjogMTM7XFxuICB9XFxuICAub3JkZXItbGctMCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAwO1xcbiAgICBvcmRlcjogMDtcXG4gIH1cXG4gIC5vcmRlci1sZy0xIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDE7XFxuICAgIG9yZGVyOiAxO1xcbiAgfVxcbiAgLm9yZGVyLWxnLTIge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMjtcXG4gICAgb3JkZXI6IDI7XFxuICB9XFxuICAub3JkZXItbGctMyB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAzO1xcbiAgICBvcmRlcjogMztcXG4gIH1cXG4gIC5vcmRlci1sZy00IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDQ7XFxuICAgIG9yZGVyOiA0O1xcbiAgfVxcbiAgLm9yZGVyLWxnLTUge1xcbiAgICAtbXMtZmxleC1vcmRlcjogNTtcXG4gICAgb3JkZXI6IDU7XFxuICB9XFxuICAub3JkZXItbGctNiB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA2O1xcbiAgICBvcmRlcjogNjtcXG4gIH1cXG4gIC5vcmRlci1sZy03IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDc7XFxuICAgIG9yZGVyOiA3O1xcbiAgfVxcbiAgLm9yZGVyLWxnLTgge1xcbiAgICAtbXMtZmxleC1vcmRlcjogODtcXG4gICAgb3JkZXI6IDg7XFxuICB9XFxuICAub3JkZXItbGctOSB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA5O1xcbiAgICBvcmRlcjogOTtcXG4gIH1cXG4gIC5vcmRlci1sZy0xMCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAxMDtcXG4gICAgb3JkZXI6IDEwO1xcbiAgfVxcbiAgLm9yZGVyLWxnLTExIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDExO1xcbiAgICBvcmRlcjogMTE7XFxuICB9XFxuICAub3JkZXItbGctMTIge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTI7XFxuICAgIG9yZGVyOiAxMjtcXG4gIH1cXG4gIC5vZmZzZXQtbGctMCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAwO1xcbiAgfVxcbiAgLm9mZnNldC1sZy0xIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzJTtcXG4gIH1cXG4gIC5vZmZzZXQtbGctMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY2NjclO1xcbiAgfVxcbiAgLm9mZnNldC1sZy0zIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDI1JTtcXG4gIH1cXG4gIC5vZmZzZXQtbGctNCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAzMy4zMzMzMzMlO1xcbiAgfVxcbiAgLm9mZnNldC1sZy01IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NyU7XFxuICB9XFxuICAub2Zmc2V0LWxnLTYge1xcbiAgICBtYXJnaW4tbGVmdDogNTAlO1xcbiAgfVxcbiAgLm9mZnNldC1sZy03IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzMyU7XFxuICB9XFxuICAub2Zmc2V0LWxnLTgge1xcbiAgICBtYXJnaW4tbGVmdDogNjYuNjY2NjY3JTtcXG4gIH1cXG4gIC5vZmZzZXQtbGctOSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA3NSU7XFxuICB9XFxuICAub2Zmc2V0LWxnLTEwIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMyU7XFxuICB9XFxuICAub2Zmc2V0LWxnLTExIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY2NyU7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC5jb2wteGwge1xcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMDtcXG4gICAgZmxleC1iYXNpczogMDtcXG4gICAgLW1zLWZsZXgtcG9zaXRpdmU6IDE7XFxuICAgIGZsZXgtZ3JvdzogMTtcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLmNvbC14bC1hdXRvIHtcXG4gICAgLW1zLWZsZXg6IDAgMCBhdXRvO1xcbiAgICBmbGV4OiAwIDAgYXV0bztcXG4gICAgd2lkdGg6IGF1dG87XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5jb2wteGwtMSB7XFxuICAgIC1tcy1mbGV4OiAwIDAgOC4zMzMzMzMlO1xcbiAgICBmbGV4OiAwIDAgOC4zMzMzMzMlO1xcbiAgICBtYXgtd2lkdGg6IDguMzMzMzMzJTtcXG4gIH1cXG4gIC5jb2wteGwtMiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMTYuNjY2NjY3JTtcXG4gICAgZmxleDogMCAwIDE2LjY2NjY2NyU7XFxuICAgIG1heC13aWR0aDogMTYuNjY2NjY3JTtcXG4gIH1cXG4gIC5jb2wteGwtMyB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMjUlO1xcbiAgICBmbGV4OiAwIDAgMjUlO1xcbiAgICBtYXgtd2lkdGg6IDI1JTtcXG4gIH1cXG4gIC5jb2wteGwtNCB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMzMuMzMzMzMzJTtcXG4gICAgZmxleDogMCAwIDMzLjMzMzMzMyU7XFxuICAgIG1heC13aWR0aDogMzMuMzMzMzMzJTtcXG4gIH1cXG4gIC5jb2wteGwtNSB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNDEuNjY2NjY3JTtcXG4gICAgZmxleDogMCAwIDQxLjY2NjY2NyU7XFxuICAgIG1heC13aWR0aDogNDEuNjY2NjY3JTtcXG4gIH1cXG4gIC5jb2wteGwtNiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNTAlO1xcbiAgICBmbGV4OiAwIDAgNTAlO1xcbiAgICBtYXgtd2lkdGg6IDUwJTtcXG4gIH1cXG4gIC5jb2wteGwtNyB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNTguMzMzMzMzJTtcXG4gICAgZmxleDogMCAwIDU4LjMzMzMzMyU7XFxuICAgIG1heC13aWR0aDogNTguMzMzMzMzJTtcXG4gIH1cXG4gIC5jb2wteGwtOCB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNjYuNjY2NjY3JTtcXG4gICAgZmxleDogMCAwIDY2LjY2NjY2NyU7XFxuICAgIG1heC13aWR0aDogNjYuNjY2NjY3JTtcXG4gIH1cXG4gIC5jb2wteGwtOSB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNzUlO1xcbiAgICBmbGV4OiAwIDAgNzUlO1xcbiAgICBtYXgtd2lkdGg6IDc1JTtcXG4gIH1cXG4gIC5jb2wteGwtMTAge1xcbiAgICAtbXMtZmxleDogMCAwIDgzLjMzMzMzMyU7XFxuICAgIGZsZXg6IDAgMCA4My4zMzMzMzMlO1xcbiAgICBtYXgtd2lkdGg6IDgzLjMzMzMzMyU7XFxuICB9XFxuICAuY29sLXhsLTExIHtcXG4gICAgLW1zLWZsZXg6IDAgMCA5MS42NjY2NjclO1xcbiAgICBmbGV4OiAwIDAgOTEuNjY2NjY3JTtcXG4gICAgbWF4LXdpZHRoOiA5MS42NjY2NjclO1xcbiAgfVxcbiAgLmNvbC14bC0xMiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMTAwJTtcXG4gICAgZmxleDogMCAwIDEwMCU7XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5vcmRlci14bC1maXJzdCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAtMTtcXG4gICAgb3JkZXI6IC0xO1xcbiAgfVxcbiAgLm9yZGVyLXhsLWxhc3Qge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTM7XFxuICAgIG9yZGVyOiAxMztcXG4gIH1cXG4gIC5vcmRlci14bC0wIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDA7XFxuICAgIG9yZGVyOiAwO1xcbiAgfVxcbiAgLm9yZGVyLXhsLTEge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTtcXG4gICAgb3JkZXI6IDE7XFxuICB9XFxuICAub3JkZXIteGwtMiB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAyO1xcbiAgICBvcmRlcjogMjtcXG4gIH1cXG4gIC5vcmRlci14bC0zIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDM7XFxuICAgIG9yZGVyOiAzO1xcbiAgfVxcbiAgLm9yZGVyLXhsLTQge1xcbiAgICAtbXMtZmxleC1vcmRlcjogNDtcXG4gICAgb3JkZXI6IDQ7XFxuICB9XFxuICAub3JkZXIteGwtNSB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA1O1xcbiAgICBvcmRlcjogNTtcXG4gIH1cXG4gIC5vcmRlci14bC02IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDY7XFxuICAgIG9yZGVyOiA2O1xcbiAgfVxcbiAgLm9yZGVyLXhsLTcge1xcbiAgICAtbXMtZmxleC1vcmRlcjogNztcXG4gICAgb3JkZXI6IDc7XFxuICB9XFxuICAub3JkZXIteGwtOCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA4O1xcbiAgICBvcmRlcjogODtcXG4gIH1cXG4gIC5vcmRlci14bC05IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDk7XFxuICAgIG9yZGVyOiA5O1xcbiAgfVxcbiAgLm9yZGVyLXhsLTEwIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDEwO1xcbiAgICBvcmRlcjogMTA7XFxuICB9XFxuICAub3JkZXIteGwtMTEge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTE7XFxuICAgIG9yZGVyOiAxMTtcXG4gIH1cXG4gIC5vcmRlci14bC0xMiB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAxMjtcXG4gICAgb3JkZXI6IDEyO1xcbiAgfVxcbiAgLm9mZnNldC14bC0wIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDA7XFxuICB9XFxuICAub2Zmc2V0LXhsLTEge1xcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzMzMlO1xcbiAgfVxcbiAgLm9mZnNldC14bC0yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY2NyU7XFxuICB9XFxuICAub2Zmc2V0LXhsLTMge1xcbiAgICBtYXJnaW4tbGVmdDogMjUlO1xcbiAgfVxcbiAgLm9mZnNldC14bC00IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzMyU7XFxuICB9XFxuICAub2Zmc2V0LXhsLTUge1xcbiAgICBtYXJnaW4tbGVmdDogNDEuNjY2NjY3JTtcXG4gIH1cXG4gIC5vZmZzZXQteGwtNiB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1MCU7XFxuICB9XFxuICAub2Zmc2V0LXhsLTcge1xcbiAgICBtYXJnaW4tbGVmdDogNTguMzMzMzMzJTtcXG4gIH1cXG4gIC5vZmZzZXQteGwtOCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NjclO1xcbiAgfVxcbiAgLm9mZnNldC14bC05IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDc1JTtcXG4gIH1cXG4gIC5vZmZzZXQteGwtMTAge1xcbiAgICBtYXJnaW4tbGVmdDogODMuMzMzMzMzJTtcXG4gIH1cXG4gIC5vZmZzZXQteGwtMTEge1xcbiAgICBtYXJnaW4tbGVmdDogOTEuNjY2NjY3JTtcXG4gIH1cXG59XFxuXFxuLnRhYmxlIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbn1cXG5cXG4udGFibGUgdGgsXFxuLnRhYmxlIHRkIHtcXG4gIHBhZGRpbmc6IDAuNzVyZW07XFxuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZWUyZTY7XFxufVxcblxcbi50YWJsZSB0aGVhZCB0aCB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xcbiAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNkZWUyZTY7XFxufVxcblxcbi50YWJsZSB0Ym9keSArIHRib2R5IHtcXG4gIGJvcmRlci10b3A6IDJweCBzb2xpZCAjZGVlMmU2O1xcbn1cXG5cXG4udGFibGUtc20gdGgsXFxuLnRhYmxlLXNtIHRkIHtcXG4gIHBhZGRpbmc6IDAuM3JlbTtcXG59XFxuXFxuLnRhYmxlLWJvcmRlcmVkIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZWUyZTY7XFxufVxcblxcbi50YWJsZS1ib3JkZXJlZCB0aCxcXG4udGFibGUtYm9yZGVyZWQgdGQge1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2RlZTJlNjtcXG59XFxuXFxuLnRhYmxlLWJvcmRlcmVkIHRoZWFkIHRoLFxcbi50YWJsZS1ib3JkZXJlZCB0aGVhZCB0ZCB7XFxuICBib3JkZXItYm90dG9tLXdpZHRoOiAycHg7XFxufVxcblxcbi50YWJsZS1ib3JkZXJsZXNzIHRoLFxcbi50YWJsZS1ib3JkZXJsZXNzIHRkLFxcbi50YWJsZS1ib3JkZXJsZXNzIHRoZWFkIHRoLFxcbi50YWJsZS1ib3JkZXJsZXNzIHRib2R5ICsgdGJvZHkge1xcbiAgYm9yZGVyOiAwO1xcbn1cXG5cXG4udGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZShvZGQpIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XFxufVxcblxcbi50YWJsZS1ob3ZlciB0Ym9keSB0cjpob3ZlciB7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNzUpO1xcbn1cXG5cXG4udGFibGUtcHJpbWFyeSxcXG4udGFibGUtcHJpbWFyeSA+IHRoLFxcbi50YWJsZS1wcmltYXJ5ID4gdGQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2I4ZGFmZjtcXG59XFxuXFxuLnRhYmxlLXByaW1hcnkgdGgsXFxuLnRhYmxlLXByaW1hcnkgdGQsXFxuLnRhYmxlLXByaW1hcnkgdGhlYWQgdGgsXFxuLnRhYmxlLXByaW1hcnkgdGJvZHkgKyB0Ym9keSB7XFxuICBib3JkZXItY29sb3I6ICM3YWJhZmY7XFxufVxcblxcbi50YWJsZS1ob3ZlciAudGFibGUtcHJpbWFyeTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWZjZGZmO1xcbn1cXG5cXG4udGFibGUtaG92ZXIgLnRhYmxlLXByaW1hcnk6aG92ZXIgPiB0ZCxcXG4udGFibGUtaG92ZXIgLnRhYmxlLXByaW1hcnk6aG92ZXIgPiB0aCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWZjZGZmO1xcbn1cXG5cXG4udGFibGUtc2Vjb25kYXJ5LFxcbi50YWJsZS1zZWNvbmRhcnkgPiB0aCxcXG4udGFibGUtc2Vjb25kYXJ5ID4gdGQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q2ZDhkYjtcXG59XFxuXFxuLnRhYmxlLXNlY29uZGFyeSB0aCxcXG4udGFibGUtc2Vjb25kYXJ5IHRkLFxcbi50YWJsZS1zZWNvbmRhcnkgdGhlYWQgdGgsXFxuLnRhYmxlLXNlY29uZGFyeSB0Ym9keSArIHRib2R5IHtcXG4gIGJvcmRlci1jb2xvcjogI2IzYjdiYjtcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1zZWNvbmRhcnk6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M4Y2JjZjtcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1zZWNvbmRhcnk6aG92ZXIgPiB0ZCxcXG4udGFibGUtaG92ZXIgLnRhYmxlLXNlY29uZGFyeTpob3ZlciA+IHRoIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjOGNiY2Y7XFxufVxcblxcbi50YWJsZS1zdWNjZXNzLFxcbi50YWJsZS1zdWNjZXNzID4gdGgsXFxuLnRhYmxlLXN1Y2Nlc3MgPiB0ZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzNlNmNiO1xcbn1cXG5cXG4udGFibGUtc3VjY2VzcyB0aCxcXG4udGFibGUtc3VjY2VzcyB0ZCxcXG4udGFibGUtc3VjY2VzcyB0aGVhZCB0aCxcXG4udGFibGUtc3VjY2VzcyB0Ym9keSArIHRib2R5IHtcXG4gIGJvcmRlci1jb2xvcjogIzhmZDE5ZTtcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1zdWNjZXNzOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiMWRmYmI7XFxufVxcblxcbi50YWJsZS1ob3ZlciAudGFibGUtc3VjY2Vzczpob3ZlciA+IHRkLFxcbi50YWJsZS1ob3ZlciAudGFibGUtc3VjY2Vzczpob3ZlciA+IHRoIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiMWRmYmI7XFxufVxcblxcbi50YWJsZS1pbmZvLFxcbi50YWJsZS1pbmZvID4gdGgsXFxuLnRhYmxlLWluZm8gPiB0ZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmVlNWViO1xcbn1cXG5cXG4udGFibGUtaW5mbyB0aCxcXG4udGFibGUtaW5mbyB0ZCxcXG4udGFibGUtaW5mbyB0aGVhZCB0aCxcXG4udGFibGUtaW5mbyB0Ym9keSArIHRib2R5IHtcXG4gIGJvcmRlci1jb2xvcjogIzg2Y2ZkYTtcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1pbmZvOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhYmRkZTU7XFxufVxcblxcbi50YWJsZS1ob3ZlciAudGFibGUtaW5mbzpob3ZlciA+IHRkLFxcbi50YWJsZS1ob3ZlciAudGFibGUtaW5mbzpob3ZlciA+IHRoIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhYmRkZTU7XFxufVxcblxcbi50YWJsZS13YXJuaW5nLFxcbi50YWJsZS13YXJuaW5nID4gdGgsXFxuLnRhYmxlLXdhcm5pbmcgPiB0ZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlZWJhO1xcbn1cXG5cXG4udGFibGUtd2FybmluZyB0aCxcXG4udGFibGUtd2FybmluZyB0ZCxcXG4udGFibGUtd2FybmluZyB0aGVhZCB0aCxcXG4udGFibGUtd2FybmluZyB0Ym9keSArIHRib2R5IHtcXG4gIGJvcmRlci1jb2xvcjogI2ZmZGY3ZTtcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS13YXJuaW5nOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmU4YTE7XFxufVxcblxcbi50YWJsZS1ob3ZlciAudGFibGUtd2FybmluZzpob3ZlciA+IHRkLFxcbi50YWJsZS1ob3ZlciAudGFibGUtd2FybmluZzpob3ZlciA+IHRoIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmU4YTE7XFxufVxcblxcbi50YWJsZS1kYW5nZXIsXFxuLnRhYmxlLWRhbmdlciA+IHRoLFxcbi50YWJsZS1kYW5nZXIgPiB0ZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVjNmNiO1xcbn1cXG5cXG4udGFibGUtZGFuZ2VyIHRoLFxcbi50YWJsZS1kYW5nZXIgdGQsXFxuLnRhYmxlLWRhbmdlciB0aGVhZCB0aCxcXG4udGFibGUtZGFuZ2VyIHRib2R5ICsgdGJvZHkge1xcbiAgYm9yZGVyLWNvbG9yOiAjZWQ5NjllO1xcbn1cXG5cXG4udGFibGUtaG92ZXIgLnRhYmxlLWRhbmdlcjpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFiMGI3O1xcbn1cXG5cXG4udGFibGUtaG92ZXIgLnRhYmxlLWRhbmdlcjpob3ZlciA+IHRkLFxcbi50YWJsZS1ob3ZlciAudGFibGUtZGFuZ2VyOmhvdmVyID4gdGgge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YxYjBiNztcXG59XFxuXFxuLnRhYmxlLWxpZ2h0LFxcbi50YWJsZS1saWdodCA+IHRoLFxcbi50YWJsZS1saWdodCA+IHRkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZGZkZmU7XFxufVxcblxcbi50YWJsZS1saWdodCB0aCxcXG4udGFibGUtbGlnaHQgdGQsXFxuLnRhYmxlLWxpZ2h0IHRoZWFkIHRoLFxcbi50YWJsZS1saWdodCB0Ym9keSArIHRib2R5IHtcXG4gIGJvcmRlci1jb2xvcjogI2ZiZmNmYztcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1saWdodDpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2Y2O1xcbn1cXG5cXG4udGFibGUtaG92ZXIgLnRhYmxlLWxpZ2h0OmhvdmVyID4gdGQsXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1saWdodDpob3ZlciA+IHRoIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlY2VjZjY7XFxufVxcblxcbi50YWJsZS1kYXJrLFxcbi50YWJsZS1kYXJrID4gdGgsXFxuLnRhYmxlLWRhcmsgPiB0ZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzZjOGNhO1xcbn1cXG5cXG4udGFibGUtZGFyayB0aCxcXG4udGFibGUtZGFyayB0ZCxcXG4udGFibGUtZGFyayB0aGVhZCB0aCxcXG4udGFibGUtZGFyayB0Ym9keSArIHRib2R5IHtcXG4gIGJvcmRlci1jb2xvcjogIzk1OTk5YztcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1kYXJrOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiOWJiYmU7XFxufVxcblxcbi50YWJsZS1ob3ZlciAudGFibGUtZGFyazpob3ZlciA+IHRkLFxcbi50YWJsZS1ob3ZlciAudGFibGUtZGFyazpob3ZlciA+IHRoIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiOWJiYmU7XFxufVxcblxcbi50YWJsZS1hY3RpdmUsXFxuLnRhYmxlLWFjdGl2ZSA+IHRoLFxcbi50YWJsZS1hY3RpdmUgPiB0ZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1hY3RpdmU6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA3NSk7XFxufVxcblxcbi50YWJsZS1ob3ZlciAudGFibGUtYWN0aXZlOmhvdmVyID4gdGQsXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1hY3RpdmU6aG92ZXIgPiB0aCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcXG59XFxuXFxuLnRhYmxlIC50aGVhZC1kYXJrIHRoIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM0M2E0MDtcXG4gIGJvcmRlci1jb2xvcjogIzQ1NGQ1NTtcXG59XFxuXFxuLnRhYmxlIC50aGVhZC1saWdodCB0aCB7XFxuICBjb2xvcjogIzQ5NTA1NztcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlOWVjZWY7XFxuICBib3JkZXItY29sb3I6ICNkZWUyZTY7XFxufVxcblxcbi50YWJsZS1kYXJrIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM0M2E0MDtcXG59XFxuXFxuLnRhYmxlLWRhcmsgdGgsXFxuLnRhYmxlLWRhcmsgdGQsXFxuLnRhYmxlLWRhcmsgdGhlYWQgdGgge1xcbiAgYm9yZGVyLWNvbG9yOiAjNDU0ZDU1O1xcbn1cXG5cXG4udGFibGUtZGFyay50YWJsZS1ib3JkZXJlZCB7XFxuICBib3JkZXI6IDA7XFxufVxcblxcbi50YWJsZS1kYXJrLnRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpO1xcbn1cXG5cXG4udGFibGUtZGFyay50YWJsZS1ob3ZlciB0Ym9keSB0cjpob3ZlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNzUpO1xcbn1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogNTc1Ljk4cHgpIHtcXG4gIC50YWJsZS1yZXNwb25zaXZlLXNtIHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xcbiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XFxuICB9XFxuICAudGFibGUtcmVzcG9uc2l2ZS1zbSA+IC50YWJsZS1ib3JkZXJlZCB7XFxuICAgIGJvcmRlcjogMDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDc2Ny45OHB4KSB7XFxuICAudGFibGUtcmVzcG9uc2l2ZS1tZCB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgb3ZlcmZsb3cteDogYXV0bztcXG4gICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xcbiAgfVxcbiAgLnRhYmxlLXJlc3BvbnNpdmUtbWQgPiAudGFibGUtYm9yZGVyZWQge1xcbiAgICBib3JkZXI6IDA7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5OTEuOThweCkge1xcbiAgLnRhYmxlLXJlc3BvbnNpdmUtbGcge1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIG92ZXJmbG93LXg6IGF1dG87XFxuICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcXG4gIH1cXG4gIC50YWJsZS1yZXNwb25zaXZlLWxnID4gLnRhYmxlLWJvcmRlcmVkIHtcXG4gICAgYm9yZGVyOiAwO1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogMTE5OS45OHB4KSB7XFxuICAudGFibGUtcmVzcG9uc2l2ZS14bCB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgb3ZlcmZsb3cteDogYXV0bztcXG4gICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xcbiAgfVxcbiAgLnRhYmxlLXJlc3BvbnNpdmUteGwgPiAudGFibGUtYm9yZGVyZWQge1xcbiAgICBib3JkZXI6IDA7XFxuICB9XFxufVxcblxcbi50YWJsZS1yZXNwb25zaXZlIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBvdmVyZmxvdy14OiBhdXRvO1xcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xcbn1cXG5cXG4udGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCB7XFxuICBib3JkZXI6IDA7XFxufVxcblxcbi5mb3JtLWNvbnRyb2wge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogY2FsYygxLjVlbSArIDAuNzVyZW0gKyAycHgpO1xcbiAgcGFkZGluZzogMC4zNzVyZW0gMC43NXJlbTtcXG4gIGZvbnQtc2l6ZTogMXJlbTtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgY29sb3I6ICM0OTUwNTc7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNjZWQ0ZGE7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3gtc2hhZG93IDAuMTVzIGVhc2UtaW4tb3V0O1xcbn1cXG5cXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xcbiAgLmZvcm0tY29udHJvbCB7XFxuICAgIHRyYW5zaXRpb246IG5vbmU7XFxuICB9XFxufVxcblxcbi5mb3JtLWNvbnRyb2w6Oi1tcy1leHBhbmQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXI6IDA7XFxufVxcblxcbi5mb3JtLWNvbnRyb2w6Zm9jdXMge1xcbiAgY29sb3I6ICM0OTUwNTc7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyLWNvbG9yOiAjODBiZGZmO1xcbiAgb3V0bGluZTogMDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDAsIDEyMywgMjU1LCAwLjI1KTtcXG59XFxuXFxuLmZvcm0tY29udHJvbDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi5mb3JtLWNvbnRyb2w6Oi1tb3otcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG5cXG4uZm9ybS1jb250cm9sOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi5mb3JtLWNvbnRyb2w6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi5mb3JtLWNvbnRyb2w6OnBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiAjNmM3NTdkO1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLmZvcm0tY29udHJvbDpkaXNhYmxlZCwgLmZvcm0tY29udHJvbFtyZWFkb25seV0ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U5ZWNlZjtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbnNlbGVjdC5mb3JtLWNvbnRyb2w6Zm9jdXM6Oi1tcy12YWx1ZSB7XFxuICBjb2xvcjogIzQ5NTA1NztcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxufVxcblxcbi5mb3JtLWNvbnRyb2wtZmlsZSxcXG4uZm9ybS1jb250cm9sLXJhbmdlIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcblxcbi5jb2wtZm9ybS1sYWJlbCB7XFxuICBwYWRkaW5nLXRvcDogY2FsYygwLjM3NXJlbSArIDFweCk7XFxuICBwYWRkaW5nLWJvdHRvbTogY2FsYygwLjM3NXJlbSArIDFweCk7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgZm9udC1zaXplOiBpbmhlcml0O1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG59XFxuXFxuLmNvbC1mb3JtLWxhYmVsLWxnIHtcXG4gIHBhZGRpbmctdG9wOiBjYWxjKDAuNXJlbSArIDFweCk7XFxuICBwYWRkaW5nLWJvdHRvbTogY2FsYygwLjVyZW0gKyAxcHgpO1xcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG59XFxuXFxuLmNvbC1mb3JtLWxhYmVsLXNtIHtcXG4gIHBhZGRpbmctdG9wOiBjYWxjKDAuMjVyZW0gKyAxcHgpO1xcbiAgcGFkZGluZy1ib3R0b206IGNhbGMoMC4yNXJlbSArIDFweCk7XFxuICBmb250LXNpemU6IDAuODc1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG59XFxuXFxuLmZvcm0tY29udHJvbC1wbGFpbnRleHQge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIHBhZGRpbmctdG9wOiAwLjM3NXJlbTtcXG4gIHBhZGRpbmctYm90dG9tOiAwLjM3NXJlbTtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgY29sb3I6ICMyMTI1Mjk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItd2lkdGg6IDFweCAwO1xcbn1cXG5cXG4uZm9ybS1jb250cm9sLXBsYWludGV4dC5mb3JtLWNvbnRyb2wtc20sIC5mb3JtLWNvbnRyb2wtcGxhaW50ZXh0LmZvcm0tY29udHJvbC1sZyB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwO1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbn1cXG5cXG4uZm9ybS1jb250cm9sLXNtIHtcXG4gIGhlaWdodDogY2FsYygxLjVlbSArIDAuNXJlbSArIDJweCk7XFxuICBwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbTtcXG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgYm9yZGVyLXJhZGl1czogMC4ycmVtO1xcbn1cXG5cXG4uZm9ybS1jb250cm9sLWxnIHtcXG4gIGhlaWdodDogY2FsYygxLjVlbSArIDFyZW0gKyAycHgpO1xcbiAgcGFkZGluZzogMC41cmVtIDFyZW07XFxuICBmb250LXNpemU6IDEuMjVyZW07XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgYm9yZGVyLXJhZGl1czogMC4zcmVtO1xcbn1cXG5cXG5zZWxlY3QuZm9ybS1jb250cm9sW3NpemVdLCBzZWxlY3QuZm9ybS1jb250cm9sW211bHRpcGxlXSB7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcblxcbnRleHRhcmVhLmZvcm0tY29udHJvbCB7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcblxcbi5mb3JtLWdyb3VwIHtcXG4gIG1hcmdpbi1ib3R0b206IDFyZW07XFxufVxcblxcbi5mb3JtLXRleHQge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBtYXJnaW4tdG9wOiAwLjI1cmVtO1xcbn1cXG5cXG4uZm9ybS1yb3cge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcXG4gIGZsZXgtd3JhcDogd3JhcDtcXG4gIG1hcmdpbi1yaWdodDogLTVweDtcXG4gIG1hcmdpbi1sZWZ0OiAtNXB4O1xcbn1cXG5cXG4uZm9ybS1yb3cgPiAuY29sLFxcbi5mb3JtLXJvdyA+IFtjbGFzcyo9XFxcImNvbC1cXFwiXSB7XFxuICBwYWRkaW5nLXJpZ2h0OiA1cHg7XFxuICBwYWRkaW5nLWxlZnQ6IDVweDtcXG59XFxuXFxuLmZvcm0tY2hlY2sge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwYWRkaW5nLWxlZnQ6IDEuMjVyZW07XFxufVxcblxcbi5mb3JtLWNoZWNrLWlucHV0IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIG1hcmdpbi10b3A6IDAuM3JlbTtcXG4gIG1hcmdpbi1sZWZ0OiAtMS4yNXJlbTtcXG59XFxuXFxuLmZvcm0tY2hlY2staW5wdXQ6ZGlzYWJsZWQgfiAuZm9ybS1jaGVjay1sYWJlbCB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG59XFxuXFxuLmZvcm0tY2hlY2stbGFiZWwge1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG59XFxuXFxuLmZvcm0tY2hlY2staW5saW5lIHtcXG4gIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBwYWRkaW5nLWxlZnQ6IDA7XFxuICBtYXJnaW4tcmlnaHQ6IDAuNzVyZW07XFxufVxcblxcbi5mb3JtLWNoZWNrLWlubGluZSAuZm9ybS1jaGVjay1pbnB1dCB7XFxuICBwb3NpdGlvbjogc3RhdGljO1xcbiAgbWFyZ2luLXRvcDogMDtcXG4gIG1hcmdpbi1yaWdodDogMC4zMTI1cmVtO1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxufVxcblxcbi52YWxpZC1mZWVkYmFjayB7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXJnaW4tdG9wOiAwLjI1cmVtO1xcbiAgZm9udC1zaXplOiA4MCU7XFxuICBjb2xvcjogIzI4YTc0NTtcXG59XFxuXFxuLnZhbGlkLXRvb2x0aXAge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAxMDAlO1xcbiAgei1pbmRleDogNTtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbTtcXG4gIG1hcmdpbi10b3A6IC4xcmVtO1xcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoNDAsIDE2NywgNjksIDAuOSk7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jb250cm9sOnZhbGlkLCAuZm9ybS1jb250cm9sLmlzLXZhbGlkIHtcXG4gIGJvcmRlci1jb2xvcjogIzI4YTc0NTtcXG4gIHBhZGRpbmctcmlnaHQ6IGNhbGMoMS41ZW0gKyAwLjc1cmVtKTtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA4IDgnJTNlJTNjcGF0aCBmaWxsPSclMjMyOGE3NDUnIGQ9J00yLjMgNi43M0wuNiA0LjUzYy0uNC0xLjA0LjQ2LTEuNCAxLjEtLjhsMS4xIDEuNCAzLjQtMy44Yy42LS42MyAxLjYtLjI3IDEuMi43bC00IDQuNmMtLjQzLjUtLjguNC0xLjEuMXonLyUzZSUzYy9zdmclM2VcXFwiKTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgcmlnaHQgY2FsYygwLjM3NWVtICsgMC4xODc1cmVtKTtcXG4gIGJhY2tncm91bmQtc2l6ZTogY2FsYygwLjc1ZW0gKyAwLjM3NXJlbSkgY2FsYygwLjc1ZW0gKyAwLjM3NXJlbSk7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5mb3JtLWNvbnRyb2w6dmFsaWQ6Zm9jdXMsIC5mb3JtLWNvbnRyb2wuaXMtdmFsaWQ6Zm9jdXMge1xcbiAgYm9yZGVyLWNvbG9yOiAjMjhhNzQ1O1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNDAsIDE2NywgNjksIDAuMjUpO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jb250cm9sOnZhbGlkIH4gLnZhbGlkLWZlZWRiYWNrLFxcbi53YXMtdmFsaWRhdGVkIC5mb3JtLWNvbnRyb2w6dmFsaWQgfiAudmFsaWQtdG9vbHRpcCwgLmZvcm0tY29udHJvbC5pcy12YWxpZCB+IC52YWxpZC1mZWVkYmFjayxcXG4uZm9ybS1jb250cm9sLmlzLXZhbGlkIH4gLnZhbGlkLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIHRleHRhcmVhLmZvcm0tY29udHJvbDp2YWxpZCwgdGV4dGFyZWEuZm9ybS1jb250cm9sLmlzLXZhbGlkIHtcXG4gIHBhZGRpbmctcmlnaHQ6IGNhbGMoMS41ZW0gKyAwLjc1cmVtKTtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IHRvcCBjYWxjKDAuMzc1ZW0gKyAwLjE4NzVyZW0pIHJpZ2h0IGNhbGMoMC4zNzVlbSArIDAuMTg3NXJlbSk7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tc2VsZWN0OnZhbGlkLCAuY3VzdG9tLXNlbGVjdC5pcy12YWxpZCB7XFxuICBib3JkZXItY29sb3I6ICMyOGE3NDU7XFxuICBwYWRkaW5nLXJpZ2h0OiBjYWxjKCgxZW0gKyAwLjc1cmVtKSAqIDMgLyA0ICsgMS43NXJlbSk7XFxuICBiYWNrZ3JvdW5kOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNCA1JyUzZSUzY3BhdGggZmlsbD0nJTIzMzQzYTQwJyBkPSdNMiAwTDAgMmg0em0wIDVMMCAzaDR6Jy8lM2UlM2Mvc3ZnJTNlXFxcIikgbm8tcmVwZWF0IHJpZ2h0IDAuNzVyZW0gY2VudGVyLzhweCAxMHB4LCB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgOCA4JyUzZSUzY3BhdGggZmlsbD0nJTIzMjhhNzQ1JyBkPSdNMi4zIDYuNzNMLjYgNC41M2MtLjQtMS4wNC40Ni0xLjQgMS4xLS44bDEuMSAxLjQgMy40LTMuOGMuNi0uNjMgMS42LS4yNyAxLjIuN2wtNCA0LjZjLS40My41LS44LjQtMS4xLjF6Jy8lM2UlM2Mvc3ZnJTNlXFxcIikgI2ZmZiBuby1yZXBlYXQgY2VudGVyIHJpZ2h0IDEuNzVyZW0vY2FsYygwLjc1ZW0gKyAwLjM3NXJlbSkgY2FsYygwLjc1ZW0gKyAwLjM3NXJlbSk7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tc2VsZWN0OnZhbGlkOmZvY3VzLCAuY3VzdG9tLXNlbGVjdC5pcy12YWxpZDpmb2N1cyB7XFxuICBib3JkZXItY29sb3I6ICMyOGE3NDU7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSg0MCwgMTY3LCA2OSwgMC4yNSk7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tc2VsZWN0OnZhbGlkIH4gLnZhbGlkLWZlZWRiYWNrLFxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tc2VsZWN0OnZhbGlkIH4gLnZhbGlkLXRvb2x0aXAsIC5jdXN0b20tc2VsZWN0LmlzLXZhbGlkIH4gLnZhbGlkLWZlZWRiYWNrLFxcbi5jdXN0b20tc2VsZWN0LmlzLXZhbGlkIH4gLnZhbGlkLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5mb3JtLWNvbnRyb2wtZmlsZTp2YWxpZCB+IC52YWxpZC1mZWVkYmFjayxcXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jb250cm9sLWZpbGU6dmFsaWQgfiAudmFsaWQtdG9vbHRpcCwgLmZvcm0tY29udHJvbC1maWxlLmlzLXZhbGlkIH4gLnZhbGlkLWZlZWRiYWNrLFxcbi5mb3JtLWNvbnRyb2wtZmlsZS5pcy12YWxpZCB+IC52YWxpZC10b29sdGlwIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jaGVjay1pbnB1dDp2YWxpZCB+IC5mb3JtLWNoZWNrLWxhYmVsLCAuZm9ybS1jaGVjay1pbnB1dC5pcy12YWxpZCB+IC5mb3JtLWNoZWNrLWxhYmVsIHtcXG4gIGNvbG9yOiAjMjhhNzQ1O1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jaGVjay1pbnB1dDp2YWxpZCB+IC52YWxpZC1mZWVkYmFjayxcXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jaGVjay1pbnB1dDp2YWxpZCB+IC52YWxpZC10b29sdGlwLCAuZm9ybS1jaGVjay1pbnB1dC5pcy12YWxpZCB+IC52YWxpZC1mZWVkYmFjayxcXG4uZm9ybS1jaGVjay1pbnB1dC5pcy12YWxpZCB+IC52YWxpZC10b29sdGlwIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6dmFsaWQgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWwsIC5jdXN0b20tY29udHJvbC1pbnB1dC5pcy12YWxpZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbCB7XFxuICBjb2xvcjogIzI4YTc0NTtcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1jb250cm9sLWlucHV0OnZhbGlkIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUsIC5jdXN0b20tY29udHJvbC1pbnB1dC5pcy12YWxpZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJvcmRlci1jb2xvcjogIzI4YTc0NTtcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1jb250cm9sLWlucHV0OnZhbGlkIH4gLnZhbGlkLWZlZWRiYWNrLFxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tY29udHJvbC1pbnB1dDp2YWxpZCB+IC52YWxpZC10b29sdGlwLCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQuaXMtdmFsaWQgfiAudmFsaWQtZmVlZGJhY2ssXFxuLmN1c3RvbS1jb250cm9sLWlucHV0LmlzLXZhbGlkIH4gLnZhbGlkLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tY29udHJvbC1pbnB1dDp2YWxpZDpjaGVja2VkIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUsIC5jdXN0b20tY29udHJvbC1pbnB1dC5pcy12YWxpZDpjaGVja2VkIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUge1xcbiAgYm9yZGVyLWNvbG9yOiAjMzRjZTU3O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM0Y2U1NztcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1jb250cm9sLWlucHV0OnZhbGlkOmZvY3VzIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUsIC5jdXN0b20tY29udHJvbC1pbnB1dC5pcy12YWxpZDpmb2N1cyB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDQwLCAxNjcsIDY5LCAwLjI1KTtcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1jb250cm9sLWlucHV0OnZhbGlkOmZvY3VzOm5vdCg6Y2hlY2tlZCkgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSwgLmN1c3RvbS1jb250cm9sLWlucHV0LmlzLXZhbGlkOmZvY3VzOm5vdCg6Y2hlY2tlZCkgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSB7XFxuICBib3JkZXItY29sb3I6ICMyOGE3NDU7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tZmlsZS1pbnB1dDp2YWxpZCB+IC5jdXN0b20tZmlsZS1sYWJlbCwgLmN1c3RvbS1maWxlLWlucHV0LmlzLXZhbGlkIH4gLmN1c3RvbS1maWxlLWxhYmVsIHtcXG4gIGJvcmRlci1jb2xvcjogIzI4YTc0NTtcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1maWxlLWlucHV0OnZhbGlkIH4gLnZhbGlkLWZlZWRiYWNrLFxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tZmlsZS1pbnB1dDp2YWxpZCB+IC52YWxpZC10b29sdGlwLCAuY3VzdG9tLWZpbGUtaW5wdXQuaXMtdmFsaWQgfiAudmFsaWQtZmVlZGJhY2ssXFxuLmN1c3RvbS1maWxlLWlucHV0LmlzLXZhbGlkIH4gLnZhbGlkLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tZmlsZS1pbnB1dDp2YWxpZDpmb2N1cyB+IC5jdXN0b20tZmlsZS1sYWJlbCwgLmN1c3RvbS1maWxlLWlucHV0LmlzLXZhbGlkOmZvY3VzIH4gLmN1c3RvbS1maWxlLWxhYmVsIHtcXG4gIGJvcmRlci1jb2xvcjogIzI4YTc0NTtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDQwLCAxNjcsIDY5LCAwLjI1KTtcXG59XFxuXFxuLmludmFsaWQtZmVlZGJhY2sge1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luLXRvcDogMC4yNXJlbTtcXG4gIGZvbnQtc2l6ZTogODAlO1xcbiAgY29sb3I6ICNkYzM1NDU7XFxufVxcblxcbi5pbnZhbGlkLXRvb2x0aXAge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAxMDAlO1xcbiAgei1pbmRleDogNTtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbTtcXG4gIG1hcmdpbi10b3A6IC4xcmVtO1xcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjIwLCA1MywgNjksIDAuOSk7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jb250cm9sOmludmFsaWQsIC5mb3JtLWNvbnRyb2wuaXMtaW52YWxpZCB7XFxuICBib3JkZXItY29sb3I6ICNkYzM1NDU7XFxuICBwYWRkaW5nLXJpZ2h0OiBjYWxjKDEuNWVtICsgMC43NXJlbSk7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyBmaWxsPSclMjNkYzM1NDUnIHZpZXdCb3g9Jy0yIC0yIDcgNyclM2UlM2NwYXRoIHN0cm9rZT0nJTIzZGMzNTQ1JyBkPSdNMCAwbDMgM20wLTNMMCAzJy8lM2UlM2NjaXJjbGUgcj0nLjUnLyUzZSUzY2NpcmNsZSBjeD0nMycgcj0nLjUnLyUzZSUzY2NpcmNsZSBjeT0nMycgcj0nLjUnLyUzZSUzY2NpcmNsZSBjeD0nMycgY3k9JzMnIHI9Jy41Jy8lM2UlM2Mvc3ZnJTNFXFxcIik7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0IGNhbGMoMC4zNzVlbSArIDAuMTg3NXJlbSk7XFxuICBiYWNrZ3JvdW5kLXNpemU6IGNhbGMoMC43NWVtICsgMC4zNzVyZW0pIGNhbGMoMC43NWVtICsgMC4zNzVyZW0pO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jb250cm9sOmludmFsaWQ6Zm9jdXMsIC5mb3JtLWNvbnRyb2wuaXMtaW52YWxpZDpmb2N1cyB7XFxuICBib3JkZXItY29sb3I6ICNkYzM1NDU7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgyMjAsIDUzLCA2OSwgMC4yNSk7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5mb3JtLWNvbnRyb2w6aW52YWxpZCB+IC5pbnZhbGlkLWZlZWRiYWNrLFxcbi53YXMtdmFsaWRhdGVkIC5mb3JtLWNvbnRyb2w6aW52YWxpZCB+IC5pbnZhbGlkLXRvb2x0aXAsIC5mb3JtLWNvbnRyb2wuaXMtaW52YWxpZCB+IC5pbnZhbGlkLWZlZWRiYWNrLFxcbi5mb3JtLWNvbnRyb2wuaXMtaW52YWxpZCB+IC5pbnZhbGlkLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIHRleHRhcmVhLmZvcm0tY29udHJvbDppbnZhbGlkLCB0ZXh0YXJlYS5mb3JtLWNvbnRyb2wuaXMtaW52YWxpZCB7XFxuICBwYWRkaW5nLXJpZ2h0OiBjYWxjKDEuNWVtICsgMC43NXJlbSk7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiB0b3AgY2FsYygwLjM3NWVtICsgMC4xODc1cmVtKSByaWdodCBjYWxjKDAuMzc1ZW0gKyAwLjE4NzVyZW0pO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLXNlbGVjdDppbnZhbGlkLCAuY3VzdG9tLXNlbGVjdC5pcy1pbnZhbGlkIHtcXG4gIGJvcmRlci1jb2xvcjogI2RjMzU0NTtcXG4gIHBhZGRpbmctcmlnaHQ6IGNhbGMoKDFlbSArIDAuNzVyZW0pICogMyAvIDQgKyAxLjc1cmVtKTtcXG4gIGJhY2tncm91bmQ6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA0IDUnJTNlJTNjcGF0aCBmaWxsPSclMjMzNDNhNDAnIGQ9J00yIDBMMCAyaDR6bTAgNUwwIDNoNHonLyUzZSUzYy9zdmclM2VcXFwiKSBuby1yZXBlYXQgcmlnaHQgMC43NXJlbSBjZW50ZXIvOHB4IDEwcHgsIHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIGZpbGw9JyUyM2RjMzU0NScgdmlld0JveD0nLTIgLTIgNyA3JyUzZSUzY3BhdGggc3Ryb2tlPSclMjNkYzM1NDUnIGQ9J00wIDBsMyAzbTAtM0wwIDMnLyUzZSUzY2NpcmNsZSByPScuNScvJTNlJTNjY2lyY2xlIGN4PSczJyByPScuNScvJTNlJTNjY2lyY2xlIGN5PSczJyByPScuNScvJTNlJTNjY2lyY2xlIGN4PSczJyBjeT0nMycgcj0nLjUnLyUzZSUzYy9zdmclM0VcXFwiKSAjZmZmIG5vLXJlcGVhdCBjZW50ZXIgcmlnaHQgMS43NXJlbS9jYWxjKDAuNzVlbSArIDAuMzc1cmVtKSBjYWxjKDAuNzVlbSArIDAuMzc1cmVtKTtcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1zZWxlY3Q6aW52YWxpZDpmb2N1cywgLmN1c3RvbS1zZWxlY3QuaXMtaW52YWxpZDpmb2N1cyB7XFxuICBib3JkZXItY29sb3I6ICNkYzM1NDU7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgyMjAsIDUzLCA2OSwgMC4yNSk7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tc2VsZWN0OmludmFsaWQgfiAuaW52YWxpZC1mZWVkYmFjayxcXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLXNlbGVjdDppbnZhbGlkIH4gLmludmFsaWQtdG9vbHRpcCwgLmN1c3RvbS1zZWxlY3QuaXMtaW52YWxpZCB+IC5pbnZhbGlkLWZlZWRiYWNrLFxcbi5jdXN0b20tc2VsZWN0LmlzLWludmFsaWQgfiAuaW52YWxpZC10b29sdGlwIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jb250cm9sLWZpbGU6aW52YWxpZCB+IC5pbnZhbGlkLWZlZWRiYWNrLFxcbi53YXMtdmFsaWRhdGVkIC5mb3JtLWNvbnRyb2wtZmlsZTppbnZhbGlkIH4gLmludmFsaWQtdG9vbHRpcCwgLmZvcm0tY29udHJvbC1maWxlLmlzLWludmFsaWQgfiAuaW52YWxpZC1mZWVkYmFjayxcXG4uZm9ybS1jb250cm9sLWZpbGUuaXMtaW52YWxpZCB+IC5pbnZhbGlkLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5mb3JtLWNoZWNrLWlucHV0OmludmFsaWQgfiAuZm9ybS1jaGVjay1sYWJlbCwgLmZvcm0tY2hlY2staW5wdXQuaXMtaW52YWxpZCB+IC5mb3JtLWNoZWNrLWxhYmVsIHtcXG4gIGNvbG9yOiAjZGMzNTQ1O1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jaGVjay1pbnB1dDppbnZhbGlkIH4gLmludmFsaWQtZmVlZGJhY2ssXFxuLndhcy12YWxpZGF0ZWQgLmZvcm0tY2hlY2staW5wdXQ6aW52YWxpZCB+IC5pbnZhbGlkLXRvb2x0aXAsIC5mb3JtLWNoZWNrLWlucHV0LmlzLWludmFsaWQgfiAuaW52YWxpZC1mZWVkYmFjayxcXG4uZm9ybS1jaGVjay1pbnB1dC5pcy1pbnZhbGlkIH4gLmludmFsaWQtdG9vbHRpcCB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1jb250cm9sLWlucHV0OmludmFsaWQgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWwsIC5jdXN0b20tY29udHJvbC1pbnB1dC5pcy1pbnZhbGlkIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsIHtcXG4gIGNvbG9yOiAjZGMzNTQ1O1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6aW52YWxpZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlLCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQuaXMtaW52YWxpZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJvcmRlci1jb2xvcjogI2RjMzU0NTtcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1jb250cm9sLWlucHV0OmludmFsaWQgfiAuaW52YWxpZC1mZWVkYmFjayxcXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6aW52YWxpZCB+IC5pbnZhbGlkLXRvb2x0aXAsIC5jdXN0b20tY29udHJvbC1pbnB1dC5pcy1pbnZhbGlkIH4gLmludmFsaWQtZmVlZGJhY2ssXFxuLmN1c3RvbS1jb250cm9sLWlucHV0LmlzLWludmFsaWQgfiAuaW52YWxpZC10b29sdGlwIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6aW52YWxpZDpjaGVja2VkIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUsIC5jdXN0b20tY29udHJvbC1pbnB1dC5pcy1pbnZhbGlkOmNoZWNrZWQgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSB7XFxuICBib3JkZXItY29sb3I6ICNlNDYwNmQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTQ2MDZkO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6aW52YWxpZDpmb2N1cyB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlLCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQuaXMtaW52YWxpZDpmb2N1cyB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDIyMCwgNTMsIDY5LCAwLjI1KTtcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1jb250cm9sLWlucHV0OmludmFsaWQ6Zm9jdXM6bm90KDpjaGVja2VkKSB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlLCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQuaXMtaW52YWxpZDpmb2N1czpub3QoOmNoZWNrZWQpIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUge1xcbiAgYm9yZGVyLWNvbG9yOiAjZGMzNTQ1O1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLWZpbGUtaW5wdXQ6aW52YWxpZCB+IC5jdXN0b20tZmlsZS1sYWJlbCwgLmN1c3RvbS1maWxlLWlucHV0LmlzLWludmFsaWQgfiAuY3VzdG9tLWZpbGUtbGFiZWwge1xcbiAgYm9yZGVyLWNvbG9yOiAjZGMzNTQ1O1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLWZpbGUtaW5wdXQ6aW52YWxpZCB+IC5pbnZhbGlkLWZlZWRiYWNrLFxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tZmlsZS1pbnB1dDppbnZhbGlkIH4gLmludmFsaWQtdG9vbHRpcCwgLmN1c3RvbS1maWxlLWlucHV0LmlzLWludmFsaWQgfiAuaW52YWxpZC1mZWVkYmFjayxcXG4uY3VzdG9tLWZpbGUtaW5wdXQuaXMtaW52YWxpZCB+IC5pbnZhbGlkLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tZmlsZS1pbnB1dDppbnZhbGlkOmZvY3VzIH4gLmN1c3RvbS1maWxlLWxhYmVsLCAuY3VzdG9tLWZpbGUtaW5wdXQuaXMtaW52YWxpZDpmb2N1cyB+IC5jdXN0b20tZmlsZS1sYWJlbCB7XFxuICBib3JkZXItY29sb3I6ICNkYzM1NDU7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgyMjAsIDUzLCA2OSwgMC4yNSk7XFxufVxcblxcbi5mb3JtLWlubGluZSB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC1mbG93OiByb3cgd3JhcDtcXG4gIGZsZXgtZmxvdzogcm93IHdyYXA7XFxuICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuXFxuLmZvcm0taW5saW5lIC5mb3JtLWNoZWNrIHtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIHtcXG4gIC5mb3JtLWlubGluZSBsYWJlbCB7XFxuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgfVxcbiAgLmZvcm0taW5saW5lIC5mb3JtLWdyb3VwIHtcXG4gICAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIC1tcy1mbGV4OiAwIDAgYXV0bztcXG4gICAgZmxleDogMCAwIGF1dG87XFxuICAgIC1tcy1mbGV4LWZsb3c6IHJvdyB3cmFwO1xcbiAgICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xcbiAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgfVxcbiAgLmZvcm0taW5saW5lIC5mb3JtLWNvbnRyb2wge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgfVxcbiAgLmZvcm0taW5saW5lIC5mb3JtLWNvbnRyb2wtcGxhaW50ZXh0IHtcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgfVxcbiAgLmZvcm0taW5saW5lIC5pbnB1dC1ncm91cCxcXG4gIC5mb3JtLWlubGluZSAuY3VzdG9tLXNlbGVjdCB7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLmZvcm0taW5saW5lIC5mb3JtLWNoZWNrIHtcXG4gICAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XFxuICB9XFxuICAuZm9ybS1pbmxpbmUgLmZvcm0tY2hlY2staW5wdXQge1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIC1tcy1mbGV4LW5lZ2F0aXZlOiAwO1xcbiAgICBmbGV4LXNocmluazogMDtcXG4gICAgbWFyZ2luLXRvcDogMDtcXG4gICAgbWFyZ2luLXJpZ2h0OiAwLjI1cmVtO1xcbiAgICBtYXJnaW4tbGVmdDogMDtcXG4gIH1cXG4gIC5mb3JtLWlubGluZSAuY3VzdG9tLWNvbnRyb2wge1xcbiAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgfVxcbiAgLmZvcm0taW5saW5lIC5jdXN0b20tY29udHJvbC1sYWJlbCB7XFxuICAgIG1hcmdpbi1ib3R0b206IDA7XFxuICB9XFxufVxcblxcbi5idG4ge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgcGFkZGluZzogMC4zNzVyZW0gMC43NXJlbTtcXG4gIGZvbnQtc2l6ZTogMXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbiAgdHJhbnNpdGlvbjogY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAwLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAwLjE1cyBlYXNlLWluLW91dDtcXG59XFxuXFxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcXG4gIC5idG4ge1xcbiAgICB0cmFuc2l0aW9uOiBub25lO1xcbiAgfVxcbn1cXG5cXG4uYnRuOmhvdmVyIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbn1cXG5cXG4uYnRuOmZvY3VzLCAuYnRuLmZvY3VzIHtcXG4gIG91dGxpbmU6IDA7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgwLCAxMjMsIDI1NSwgMC4yNSk7XFxufVxcblxcbi5idG4uZGlzYWJsZWQsIC5idG46ZGlzYWJsZWQge1xcbiAgb3BhY2l0eTogMC42NTtcXG59XFxuXFxuYS5idG4uZGlzYWJsZWQsXFxuZmllbGRzZXQ6ZGlzYWJsZWQgYS5idG4ge1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi5idG4tcHJpbWFyeSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDdiZmY7XFxuICBib3JkZXItY29sb3I6ICMwMDdiZmY7XFxufVxcblxcbi5idG4tcHJpbWFyeTpob3ZlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDY5ZDk7XFxuICBib3JkZXItY29sb3I6ICMwMDYyY2M7XFxufVxcblxcbi5idG4tcHJpbWFyeTpmb2N1cywgLmJ0bi1wcmltYXJ5LmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDM4LCAxNDMsIDI1NSwgMC41KTtcXG59XFxuXFxuLmJ0bi1wcmltYXJ5LmRpc2FibGVkLCAuYnRuLXByaW1hcnk6ZGlzYWJsZWQge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3YmZmO1xcbiAgYm9yZGVyLWNvbG9yOiAjMDA3YmZmO1xcbn1cXG5cXG4uYnRuLXByaW1hcnk6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlLCAuYnRuLXByaW1hcnk6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlLFxcbi5zaG93ID4gLmJ0bi1wcmltYXJ5LmRyb3Bkb3duLXRvZ2dsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDYyY2M7XFxuICBib3JkZXItY29sb3I6ICMwMDVjYmY7XFxufVxcblxcbi5idG4tcHJpbWFyeTpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmU6Zm9jdXMsIC5idG4tcHJpbWFyeTpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsXFxuLnNob3cgPiAuYnRuLXByaW1hcnkuZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDM4LCAxNDMsIDI1NSwgMC41KTtcXG59XFxuXFxuLmJ0bi1zZWNvbmRhcnkge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM3NTdkO1xcbiAgYm9yZGVyLWNvbG9yOiAjNmM3NTdkO1xcbn1cXG5cXG4uYnRuLXNlY29uZGFyeTpob3ZlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1YTYyNjg7XFxuICBib3JkZXItY29sb3I6ICM1NDViNjI7XFxufVxcblxcbi5idG4tc2Vjb25kYXJ5OmZvY3VzLCAuYnRuLXNlY29uZGFyeS5mb2N1cyB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgxMzAsIDEzOCwgMTQ1LCAwLjUpO1xcbn1cXG5cXG4uYnRuLXNlY29uZGFyeS5kaXNhYmxlZCwgLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM3NTdkO1xcbiAgYm9yZGVyLWNvbG9yOiAjNmM3NTdkO1xcbn1cXG5cXG4uYnRuLXNlY29uZGFyeTpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmUsIC5idG4tc2Vjb25kYXJ5Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSxcXG4uc2hvdyA+IC5idG4tc2Vjb25kYXJ5LmRyb3Bkb3duLXRvZ2dsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1NDViNjI7XFxuICBib3JkZXItY29sb3I6ICM0ZTU1NWI7XFxufVxcblxcbi5idG4tc2Vjb25kYXJ5Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZTpmb2N1cywgLmJ0bi1zZWNvbmRhcnk6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlOmZvY3VzLFxcbi5zaG93ID4gLmJ0bi1zZWNvbmRhcnkuZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDEzMCwgMTM4LCAxNDUsIDAuNSk7XFxufVxcblxcbi5idG4tc3VjY2VzcyB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyOGE3NDU7XFxuICBib3JkZXItY29sb3I6ICMyOGE3NDU7XFxufVxcblxcbi5idG4tc3VjY2Vzczpob3ZlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyMTg4Mzg7XFxuICBib3JkZXItY29sb3I6ICMxZTdlMzQ7XFxufVxcblxcbi5idG4tc3VjY2Vzczpmb2N1cywgLmJ0bi1zdWNjZXNzLmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDcyLCAxODAsIDk3LCAwLjUpO1xcbn1cXG5cXG4uYnRuLXN1Y2Nlc3MuZGlzYWJsZWQsIC5idG4tc3VjY2VzczpkaXNhYmxlZCB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyOGE3NDU7XFxuICBib3JkZXItY29sb3I6ICMyOGE3NDU7XFxufVxcblxcbi5idG4tc3VjY2Vzczpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmUsIC5idG4tc3VjY2Vzczpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmUsXFxuLnNob3cgPiAuYnRuLXN1Y2Nlc3MuZHJvcGRvd24tdG9nZ2xlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFlN2UzNDtcXG4gIGJvcmRlci1jb2xvcjogIzFjNzQzMDtcXG59XFxuXFxuLmJ0bi1zdWNjZXNzOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZTpmb2N1cywgLmJ0bi1zdWNjZXNzOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZTpmb2N1cyxcXG4uc2hvdyA+IC5idG4tc3VjY2Vzcy5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNzIsIDE4MCwgOTcsIDAuNSk7XFxufVxcblxcbi5idG4taW5mbyB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxN2EyYjg7XFxuICBib3JkZXItY29sb3I6ICMxN2EyYjg7XFxufVxcblxcbi5idG4taW5mbzpob3ZlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxMzg0OTY7XFxuICBib3JkZXItY29sb3I6ICMxMTdhOGI7XFxufVxcblxcbi5idG4taW5mbzpmb2N1cywgLmJ0bi1pbmZvLmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDU4LCAxNzYsIDE5NSwgMC41KTtcXG59XFxuXFxuLmJ0bi1pbmZvLmRpc2FibGVkLCAuYnRuLWluZm86ZGlzYWJsZWQge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTdhMmI4O1xcbiAgYm9yZGVyLWNvbG9yOiAjMTdhMmI4O1xcbn1cXG5cXG4uYnRuLWluZm86bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlLCAuYnRuLWluZm86bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlLFxcbi5zaG93ID4gLmJ0bi1pbmZvLmRyb3Bkb3duLXRvZ2dsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxMTdhOGI7XFxuICBib3JkZXItY29sb3I6ICMxMDcwN2Y7XFxufVxcblxcbi5idG4taW5mbzpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmU6Zm9jdXMsIC5idG4taW5mbzpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsXFxuLnNob3cgPiAuYnRuLWluZm8uZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDU4LCAxNzYsIDE5NSwgMC41KTtcXG59XFxuXFxuLmJ0bi13YXJuaW5nIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYzEwNztcXG4gIGJvcmRlci1jb2xvcjogI2ZmYzEwNztcXG59XFxuXFxuLmJ0bi13YXJuaW5nOmhvdmVyIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UwYTgwMDtcXG4gIGJvcmRlci1jb2xvcjogI2QzOWUwMDtcXG59XFxuXFxuLmJ0bi13YXJuaW5nOmZvY3VzLCAuYnRuLXdhcm5pbmcuZm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjIyLCAxNzAsIDEyLCAwLjUpO1xcbn1cXG5cXG4uYnRuLXdhcm5pbmcuZGlzYWJsZWQsIC5idG4td2FybmluZzpkaXNhYmxlZCB7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmMxMDc7XFxuICBib3JkZXItY29sb3I6ICNmZmMxMDc7XFxufVxcblxcbi5idG4td2FybmluZzpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmUsIC5idG4td2FybmluZzpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmUsXFxuLnNob3cgPiAuYnRuLXdhcm5pbmcuZHJvcGRvd24tdG9nZ2xlIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QzOWUwMDtcXG4gIGJvcmRlci1jb2xvcjogI2M2OTUwMDtcXG59XFxuXFxuLmJ0bi13YXJuaW5nOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZTpmb2N1cywgLmJ0bi13YXJuaW5nOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZTpmb2N1cyxcXG4uc2hvdyA+IC5idG4td2FybmluZy5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjIyLCAxNzAsIDEyLCAwLjUpO1xcbn1cXG5cXG4uYnRuLWRhbmdlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkYzM1NDU7XFxuICBib3JkZXItY29sb3I6ICNkYzM1NDU7XFxufVxcblxcbi5idG4tZGFuZ2VyOmhvdmVyIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M4MjMzMztcXG4gIGJvcmRlci1jb2xvcjogI2JkMjEzMDtcXG59XFxuXFxuLmJ0bi1kYW5nZXI6Zm9jdXMsIC5idG4tZGFuZ2VyLmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDIyNSwgODMsIDk3LCAwLjUpO1xcbn1cXG5cXG4uYnRuLWRhbmdlci5kaXNhYmxlZCwgLmJ0bi1kYW5nZXI6ZGlzYWJsZWQge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGMzNTQ1O1xcbiAgYm9yZGVyLWNvbG9yOiAjZGMzNTQ1O1xcbn1cXG5cXG4uYnRuLWRhbmdlcjpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmUsIC5idG4tZGFuZ2VyOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSxcXG4uc2hvdyA+IC5idG4tZGFuZ2VyLmRyb3Bkb3duLXRvZ2dsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiZDIxMzA7XFxuICBib3JkZXItY29sb3I6ICNiMjFmMmQ7XFxufVxcblxcbi5idG4tZGFuZ2VyOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZTpmb2N1cywgLmJ0bi1kYW5nZXI6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlOmZvY3VzLFxcbi5zaG93ID4gLmJ0bi1kYW5nZXIuZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDIyNSwgODMsIDk3LCAwLjUpO1xcbn1cXG5cXG4uYnRuLWxpZ2h0IHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcXG4gIGJvcmRlci1jb2xvcjogI2Y4ZjlmYTtcXG59XFxuXFxuLmJ0bi1saWdodDpob3ZlciB7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlMmU2ZWE7XFxuICBib3JkZXItY29sb3I6ICNkYWUwZTU7XFxufVxcblxcbi5idG4tbGlnaHQ6Zm9jdXMsIC5idG4tbGlnaHQuZm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjE2LCAyMTcsIDIxOSwgMC41KTtcXG59XFxuXFxuLmJ0bi1saWdodC5kaXNhYmxlZCwgLmJ0bi1saWdodDpkaXNhYmxlZCB7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmOGY5ZmE7XFxuICBib3JkZXItY29sb3I6ICNmOGY5ZmE7XFxufVxcblxcbi5idG4tbGlnaHQ6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlLCAuYnRuLWxpZ2h0Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSxcXG4uc2hvdyA+IC5idG4tbGlnaHQuZHJvcGRvd24tdG9nZ2xlIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RhZTBlNTtcXG4gIGJvcmRlci1jb2xvcjogI2QzZDlkZjtcXG59XFxuXFxuLmJ0bi1saWdodDpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmU6Zm9jdXMsIC5idG4tbGlnaHQ6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlOmZvY3VzLFxcbi5zaG93ID4gLmJ0bi1saWdodC5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjE2LCAyMTcsIDIxOSwgMC41KTtcXG59XFxuXFxuLmJ0bi1kYXJrIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM0M2E0MDtcXG4gIGJvcmRlci1jb2xvcjogIzM0M2E0MDtcXG59XFxuXFxuLmJ0bi1kYXJrOmhvdmVyIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzIzMjcyYjtcXG4gIGJvcmRlci1jb2xvcjogIzFkMjEyNDtcXG59XFxuXFxuLmJ0bi1kYXJrOmZvY3VzLCAuYnRuLWRhcmsuZm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoODIsIDg4LCA5MywgMC41KTtcXG59XFxuXFxuLmJ0bi1kYXJrLmRpc2FibGVkLCAuYnRuLWRhcms6ZGlzYWJsZWQge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzQzYTQwO1xcbiAgYm9yZGVyLWNvbG9yOiAjMzQzYTQwO1xcbn1cXG5cXG4uYnRuLWRhcms6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlLCAuYnRuLWRhcms6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlLFxcbi5zaG93ID4gLmJ0bi1kYXJrLmRyb3Bkb3duLXRvZ2dsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxZDIxMjQ7XFxuICBib3JkZXItY29sb3I6ICMxNzFhMWQ7XFxufVxcblxcbi5idG4tZGFyazpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmU6Zm9jdXMsIC5idG4tZGFyazpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsXFxuLnNob3cgPiAuYnRuLWRhcmsuZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDgyLCA4OCwgOTMsIDAuNSk7XFxufVxcblxcbi5idG4tb3V0bGluZS1wcmltYXJ5IHtcXG4gIGNvbG9yOiAjMDA3YmZmO1xcbiAgYm9yZGVyLWNvbG9yOiAjMDA3YmZmO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtcHJpbWFyeTpob3ZlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDdiZmY7XFxuICBib3JkZXItY29sb3I6ICMwMDdiZmY7XFxufVxcblxcbi5idG4tb3V0bGluZS1wcmltYXJ5OmZvY3VzLCAuYnRuLW91dGxpbmUtcHJpbWFyeS5mb2N1cyB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgwLCAxMjMsIDI1NSwgMC41KTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQsIC5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVkIHtcXG4gIGNvbG9yOiAjMDA3YmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5idG4tb3V0bGluZS1wcmltYXJ5Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZSwgLmJ0bi1vdXRsaW5lLXByaW1hcnk6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlLFxcbi5zaG93ID4gLmJ0bi1vdXRsaW5lLXByaW1hcnkuZHJvcGRvd24tdG9nZ2xlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjtcXG4gIGJvcmRlci1jb2xvcjogIzAwN2JmZjtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLXByaW1hcnk6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlOmZvY3VzLCAuYnRuLW91dGxpbmUtcHJpbWFyeTpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsXFxuLnNob3cgPiAuYnRuLW91dGxpbmUtcHJpbWFyeS5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMCwgMTIzLCAyNTUsIDAuNSk7XFxufVxcblxcbi5idG4tb3V0bGluZS1zZWNvbmRhcnkge1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICBib3JkZXItY29sb3I6ICM2Yzc1N2Q7XFxufVxcblxcbi5idG4tb3V0bGluZS1zZWNvbmRhcnk6aG92ZXIge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM3NTdkO1xcbiAgYm9yZGVyLWNvbG9yOiAjNmM3NTdkO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmZvY3VzLCAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDEwOCwgMTE3LCAxMjUsIDAuNSk7XFxufVxcblxcbi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQsIC5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQge1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmUsIC5idG4tb3V0bGluZS1zZWNvbmRhcnk6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlLFxcbi5zaG93ID4gLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kcm9wZG93bi10b2dnbGUge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM3NTdkO1xcbiAgYm9yZGVyLWNvbG9yOiAjNmM3NTdkO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZTpmb2N1cywgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsXFxuLnNob3cgPiAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgxMDgsIDExNywgMTI1LCAwLjUpO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtc3VjY2VzcyB7XFxuICBjb2xvcjogIzI4YTc0NTtcXG4gIGJvcmRlci1jb2xvcjogIzI4YTc0NTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6aG92ZXIge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjhhNzQ1O1xcbiAgYm9yZGVyLWNvbG9yOiAjMjhhNzQ1O1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtc3VjY2Vzczpmb2N1cywgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNDAsIDE2NywgNjksIDAuNSk7XFxufVxcblxcbi5idG4tb3V0bGluZS1zdWNjZXNzLmRpc2FibGVkLCAuYnRuLW91dGxpbmUtc3VjY2VzczpkaXNhYmxlZCB7XFxuICBjb2xvcjogIzI4YTc0NTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtc3VjY2Vzczpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmUsIC5idG4tb3V0bGluZS1zdWNjZXNzOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSxcXG4uc2hvdyA+IC5idG4tb3V0bGluZS1zdWNjZXNzLmRyb3Bkb3duLXRvZ2dsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyOGE3NDU7XFxuICBib3JkZXItY29sb3I6ICMyOGE3NDU7XFxufVxcblxcbi5idG4tb3V0bGluZS1zdWNjZXNzOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZTpmb2N1cywgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlOmZvY3VzLFxcbi5zaG93ID4gLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDQwLCAxNjcsIDY5LCAwLjUpO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtaW5mbyB7XFxuICBjb2xvcjogIzE3YTJiODtcXG4gIGJvcmRlci1jb2xvcjogIzE3YTJiODtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWluZm86aG92ZXIge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTdhMmI4O1xcbiAgYm9yZGVyLWNvbG9yOiAjMTdhMmI4O1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtaW5mbzpmb2N1cywgLmJ0bi1vdXRsaW5lLWluZm8uZm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjMsIDE2MiwgMTg0LCAwLjUpO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCwgLmJ0bi1vdXRsaW5lLWluZm86ZGlzYWJsZWQge1xcbiAgY29sb3I6ICMxN2EyYjg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWluZm86bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlLCAuYnRuLW91dGxpbmUtaW5mbzpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmUsXFxuLnNob3cgPiAuYnRuLW91dGxpbmUtaW5mby5kcm9wZG93bi10b2dnbGUge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTdhMmI4O1xcbiAgYm9yZGVyLWNvbG9yOiAjMTdhMmI4O1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtaW5mbzpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmU6Zm9jdXMsIC5idG4tb3V0bGluZS1pbmZvOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZTpmb2N1cyxcXG4uc2hvdyA+IC5idG4tb3V0bGluZS1pbmZvLmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgyMywgMTYyLCAxODQsIDAuNSk7XFxufVxcblxcbi5idG4tb3V0bGluZS13YXJuaW5nIHtcXG4gIGNvbG9yOiAjZmZjMTA3O1xcbiAgYm9yZGVyLWNvbG9yOiAjZmZjMTA3O1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtd2FybmluZzpob3ZlciB7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmMxMDc7XFxuICBib3JkZXItY29sb3I6ICNmZmMxMDc7XFxufVxcblxcbi5idG4tb3V0bGluZS13YXJuaW5nOmZvY3VzLCAuYnRuLW91dGxpbmUtd2FybmluZy5mb2N1cyB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgyNTUsIDE5MywgNywgMC41KTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLXdhcm5pbmcuZGlzYWJsZWQsIC5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkIHtcXG4gIGNvbG9yOiAjZmZjMTA3O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5idG4tb3V0bGluZS13YXJuaW5nOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZSwgLmJ0bi1vdXRsaW5lLXdhcm5pbmc6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlLFxcbi5zaG93ID4gLmJ0bi1vdXRsaW5lLXdhcm5pbmcuZHJvcGRvd24tdG9nZ2xlIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYzEwNztcXG4gIGJvcmRlci1jb2xvcjogI2ZmYzEwNztcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLXdhcm5pbmc6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlOmZvY3VzLCAuYnRuLW91dGxpbmUtd2FybmluZzpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsXFxuLnNob3cgPiAuYnRuLW91dGxpbmUtd2FybmluZy5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjU1LCAxOTMsIDcsIDAuNSk7XFxufVxcblxcbi5idG4tb3V0bGluZS1kYW5nZXIge1xcbiAgY29sb3I6ICNkYzM1NDU7XFxuICBib3JkZXItY29sb3I6ICNkYzM1NDU7XFxufVxcblxcbi5idG4tb3V0bGluZS1kYW5nZXI6aG92ZXIge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGMzNTQ1O1xcbiAgYm9yZGVyLWNvbG9yOiAjZGMzNTQ1O1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtZGFuZ2VyOmZvY3VzLCAuYnRuLW91dGxpbmUtZGFuZ2VyLmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDIyMCwgNTMsIDY5LCAwLjUpO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtZGFuZ2VyLmRpc2FibGVkLCAuYnRuLW91dGxpbmUtZGFuZ2VyOmRpc2FibGVkIHtcXG4gIGNvbG9yOiAjZGMzNTQ1O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5idG4tb3V0bGluZS1kYW5nZXI6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlLCAuYnRuLW91dGxpbmUtZGFuZ2VyOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSxcXG4uc2hvdyA+IC5idG4tb3V0bGluZS1kYW5nZXIuZHJvcGRvd24tdG9nZ2xlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RjMzU0NTtcXG4gIGJvcmRlci1jb2xvcjogI2RjMzU0NTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWRhbmdlcjpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmU6Zm9jdXMsIC5idG4tb3V0bGluZS1kYW5nZXI6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlOmZvY3VzLFxcbi5zaG93ID4gLmJ0bi1vdXRsaW5lLWRhbmdlci5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjIwLCA1MywgNjksIDAuNSk7XFxufVxcblxcbi5idG4tb3V0bGluZS1saWdodCB7XFxuICBjb2xvcjogI2Y4ZjlmYTtcXG4gIGJvcmRlci1jb2xvcjogI2Y4ZjlmYTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWxpZ2h0OmhvdmVyIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcXG4gIGJvcmRlci1jb2xvcjogI2Y4ZjlmYTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWxpZ2h0OmZvY3VzLCAuYnRuLW91dGxpbmUtbGlnaHQuZm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjQ4LCAyNDksIDI1MCwgMC41KTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWxpZ2h0LmRpc2FibGVkLCAuYnRuLW91dGxpbmUtbGlnaHQ6ZGlzYWJsZWQge1xcbiAgY29sb3I6ICNmOGY5ZmE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWxpZ2h0Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZSwgLmJ0bi1vdXRsaW5lLWxpZ2h0Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSxcXG4uc2hvdyA+IC5idG4tb3V0bGluZS1saWdodC5kcm9wZG93bi10b2dnbGUge1xcbiAgY29sb3I6ICMyMTI1Mjk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOWZhO1xcbiAgYm9yZGVyLWNvbG9yOiAjZjhmOWZhO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtbGlnaHQ6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlOmZvY3VzLCAuYnRuLW91dGxpbmUtbGlnaHQ6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlOmZvY3VzLFxcbi5zaG93ID4gLmJ0bi1vdXRsaW5lLWxpZ2h0LmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgyNDgsIDI0OSwgMjUwLCAwLjUpO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtZGFyayB7XFxuICBjb2xvcjogIzM0M2E0MDtcXG4gIGJvcmRlci1jb2xvcjogIzM0M2E0MDtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWRhcms6aG92ZXIge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzQzYTQwO1xcbiAgYm9yZGVyLWNvbG9yOiAjMzQzYTQwO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtZGFyazpmb2N1cywgLmJ0bi1vdXRsaW5lLWRhcmsuZm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNTIsIDU4LCA2NCwgMC41KTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWRhcmsuZGlzYWJsZWQsIC5idG4tb3V0bGluZS1kYXJrOmRpc2FibGVkIHtcXG4gIGNvbG9yOiAjMzQzYTQwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5idG4tb3V0bGluZS1kYXJrOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZSwgLmJ0bi1vdXRsaW5lLWRhcms6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlLFxcbi5zaG93ID4gLmJ0bi1vdXRsaW5lLWRhcmsuZHJvcGRvd24tdG9nZ2xlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM0M2E0MDtcXG4gIGJvcmRlci1jb2xvcjogIzM0M2E0MDtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWRhcms6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlOmZvY3VzLCAuYnRuLW91dGxpbmUtZGFyazpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsXFxuLnNob3cgPiAuYnRuLW91dGxpbmUtZGFyay5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNTIsIDU4LCA2NCwgMC41KTtcXG59XFxuXFxuLmJ0bi1saW5rIHtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBjb2xvcjogIzAwN2JmZjtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuXFxuLmJ0bi1saW5rOmhvdmVyIHtcXG4gIGNvbG9yOiAjMDA1NmIzO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxufVxcblxcbi5idG4tbGluazpmb2N1cywgLmJ0bi1saW5rLmZvY3VzIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxuXFxuLmJ0bi1saW5rOmRpc2FibGVkLCAuYnRuLWxpbmsuZGlzYWJsZWQge1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuLmJ0bi1sZywgLmJ0bi1ncm91cC1sZyA+IC5idG4ge1xcbiAgcGFkZGluZzogMC41cmVtIDFyZW07XFxuICBmb250LXNpemU6IDEuMjVyZW07XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgYm9yZGVyLXJhZGl1czogMC4zcmVtO1xcbn1cXG5cXG4uYnRuLXNtLCAuYnRuLWdyb3VwLXNtID4gLmJ0biB7XFxuICBwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbTtcXG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgYm9yZGVyLXJhZGl1czogMC4ycmVtO1xcbn1cXG5cXG4uYnRuLWJsb2NrIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcblxcbi5idG4tYmxvY2sgKyAuYnRuLWJsb2NrIHtcXG4gIG1hcmdpbi10b3A6IDAuNXJlbTtcXG59XFxuXFxuaW5wdXRbdHlwZT1cXFwic3VibWl0XFxcIl0uYnRuLWJsb2NrLFxcbmlucHV0W3R5cGU9XFxcInJlc2V0XFxcIl0uYnRuLWJsb2NrLFxcbmlucHV0W3R5cGU9XFxcImJ1dHRvblxcXCJdLmJ0bi1ibG9jayB7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuXFxuLmZhZGUge1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBsaW5lYXI7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAuZmFkZSB7XFxuICAgIHRyYW5zaXRpb246IG5vbmU7XFxuICB9XFxufVxcblxcbi5mYWRlOm5vdCguc2hvdykge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuXFxuLmNvbGxhcHNlOm5vdCguc2hvdykge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLmNvbGxhcHNpbmcge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgaGVpZ2h0OiAwO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHRyYW5zaXRpb246IGhlaWdodCAwLjM1cyBlYXNlO1xcbn1cXG5cXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xcbiAgLmNvbGxhcHNpbmcge1xcbiAgICB0cmFuc2l0aW9uOiBub25lO1xcbiAgfVxcbn1cXG5cXG4uZHJvcHVwLFxcbi5kcm9wcmlnaHQsXFxuLmRyb3Bkb3duLFxcbi5kcm9wbGVmdCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbi5kcm9wZG93bi10b2dnbGUge1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG59XFxuXFxuLmRyb3Bkb3duLXRvZ2dsZTo6YWZ0ZXIge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luLWxlZnQ6IDAuMjU1ZW07XFxuICB2ZXJ0aWNhbC1hbGlnbjogMC4yNTVlbTtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgYm9yZGVyLXRvcDogMC4zZW0gc29saWQ7XFxuICBib3JkZXItcmlnaHQ6IDAuM2VtIHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWJvdHRvbTogMDtcXG4gIGJvcmRlci1sZWZ0OiAwLjNlbSBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmRyb3Bkb3duLXRvZ2dsZTplbXB0eTo6YWZ0ZXIge1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxufVxcblxcbi5kcm9wZG93bi1tZW51IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMTAwJTtcXG4gIGxlZnQ6IDA7XFxuICB6LWluZGV4OiAxMDAwO1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIGZsb2F0OiBsZWZ0O1xcbiAgbWluLXdpZHRoOiAxMHJlbTtcXG4gIHBhZGRpbmc6IDAuNXJlbSAwO1xcbiAgbWFyZ2luOiAwLjEyNXJlbSAwIDA7XFxuICBmb250LXNpemU6IDFyZW07XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICBsaXN0LXN0eWxlOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLmRyb3Bkb3duLW1lbnUtbGVmdCB7XFxuICByaWdodDogYXV0bztcXG4gIGxlZnQ6IDA7XFxufVxcblxcbi5kcm9wZG93bi1tZW51LXJpZ2h0IHtcXG4gIHJpZ2h0OiAwO1xcbiAgbGVmdDogYXV0bztcXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDU3NnB4KSB7XFxuICAuZHJvcGRvd24tbWVudS1zbS1sZWZ0IHtcXG4gICAgcmlnaHQ6IGF1dG87XFxuICAgIGxlZnQ6IDA7XFxuICB9XFxuICAuZHJvcGRvd24tbWVudS1zbS1yaWdodCB7XFxuICAgIHJpZ2h0OiAwO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gIC5kcm9wZG93bi1tZW51LW1kLWxlZnQge1xcbiAgICByaWdodDogYXV0bztcXG4gICAgbGVmdDogMDtcXG4gIH1cXG4gIC5kcm9wZG93bi1tZW51LW1kLXJpZ2h0IHtcXG4gICAgcmlnaHQ6IDA7XFxuICAgIGxlZnQ6IGF1dG87XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xcbiAgLmRyb3Bkb3duLW1lbnUtbGctbGVmdCB7XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgICBsZWZ0OiAwO1xcbiAgfVxcbiAgLmRyb3Bkb3duLW1lbnUtbGctcmlnaHQge1xcbiAgICByaWdodDogMDtcXG4gICAgbGVmdDogYXV0bztcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xcbiAgLmRyb3Bkb3duLW1lbnUteGwtbGVmdCB7XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgICBsZWZ0OiAwO1xcbiAgfVxcbiAgLmRyb3Bkb3duLW1lbnUteGwtcmlnaHQge1xcbiAgICByaWdodDogMDtcXG4gICAgbGVmdDogYXV0bztcXG4gIH1cXG59XFxuXFxuLmRyb3B1cCAuZHJvcGRvd24tbWVudSB7XFxuICB0b3A6IGF1dG87XFxuICBib3R0b206IDEwMCU7XFxuICBtYXJnaW4tdG9wOiAwO1xcbiAgbWFyZ2luLWJvdHRvbTogMC4xMjVyZW07XFxufVxcblxcbi5kcm9wdXAgLmRyb3Bkb3duLXRvZ2dsZTo6YWZ0ZXIge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luLWxlZnQ6IDAuMjU1ZW07XFxuICB2ZXJ0aWNhbC1hbGlnbjogMC4yNTVlbTtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgYm9yZGVyLXRvcDogMDtcXG4gIGJvcmRlci1yaWdodDogMC4zZW0gc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItYm90dG9tOiAwLjNlbSBzb2xpZDtcXG4gIGJvcmRlci1sZWZ0OiAwLjNlbSBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmRyb3B1cCAuZHJvcGRvd24tdG9nZ2xlOmVtcHR5OjphZnRlciB7XFxuICBtYXJnaW4tbGVmdDogMDtcXG59XFxuXFxuLmRyb3ByaWdodCAuZHJvcGRvd24tbWVudSB7XFxuICB0b3A6IDA7XFxuICByaWdodDogYXV0bztcXG4gIGxlZnQ6IDEwMCU7XFxuICBtYXJnaW4tdG9wOiAwO1xcbiAgbWFyZ2luLWxlZnQ6IDAuMTI1cmVtO1xcbn1cXG5cXG4uZHJvcHJpZ2h0IC5kcm9wZG93bi10b2dnbGU6OmFmdGVyIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG1hcmdpbi1sZWZ0OiAwLjI1NWVtO1xcbiAgdmVydGljYWwtYWxpZ246IDAuMjU1ZW07XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGJvcmRlci10b3A6IDAuM2VtIHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJpZ2h0OiAwO1xcbiAgYm9yZGVyLWJvdHRvbTogMC4zZW0gc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItbGVmdDogMC4zZW0gc29saWQ7XFxufVxcblxcbi5kcm9wcmlnaHQgLmRyb3Bkb3duLXRvZ2dsZTplbXB0eTo6YWZ0ZXIge1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxufVxcblxcbi5kcm9wcmlnaHQgLmRyb3Bkb3duLXRvZ2dsZTo6YWZ0ZXIge1xcbiAgdmVydGljYWwtYWxpZ246IDA7XFxufVxcblxcbi5kcm9wbGVmdCAuZHJvcGRvd24tbWVudSB7XFxuICB0b3A6IDA7XFxuICByaWdodDogMTAwJTtcXG4gIGxlZnQ6IGF1dG87XFxuICBtYXJnaW4tdG9wOiAwO1xcbiAgbWFyZ2luLXJpZ2h0OiAwLjEyNXJlbTtcXG59XFxuXFxuLmRyb3BsZWZ0IC5kcm9wZG93bi10b2dnbGU6OmFmdGVyIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG1hcmdpbi1sZWZ0OiAwLjI1NWVtO1xcbiAgdmVydGljYWwtYWxpZ246IDAuMjU1ZW07XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG59XFxuXFxuLmRyb3BsZWZ0IC5kcm9wZG93bi10b2dnbGU6OmFmdGVyIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi5kcm9wbGVmdCAuZHJvcGRvd24tdG9nZ2xlOjpiZWZvcmUge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luLXJpZ2h0OiAwLjI1NWVtO1xcbiAgdmVydGljYWwtYWxpZ246IDAuMjU1ZW07XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGJvcmRlci10b3A6IDAuM2VtIHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJpZ2h0OiAwLjNlbSBzb2xpZDtcXG4gIGJvcmRlci1ib3R0b206IDAuM2VtIHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uZHJvcGxlZnQgLmRyb3Bkb3duLXRvZ2dsZTplbXB0eTo6YWZ0ZXIge1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxufVxcblxcbi5kcm9wbGVmdCAuZHJvcGRvd24tdG9nZ2xlOjpiZWZvcmUge1xcbiAgdmVydGljYWwtYWxpZ246IDA7XFxufVxcblxcbi5kcm9wZG93bi1tZW51W3gtcGxhY2VtZW50Xj1cXFwidG9wXFxcIl0sIC5kcm9wZG93bi1tZW51W3gtcGxhY2VtZW50Xj1cXFwicmlnaHRcXFwiXSwgLmRyb3Bkb3duLW1lbnVbeC1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSwgLmRyb3Bkb3duLW1lbnVbeC1wbGFjZW1lbnRePVxcXCJsZWZ0XFxcIl0ge1xcbiAgcmlnaHQ6IGF1dG87XFxuICBib3R0b206IGF1dG87XFxufVxcblxcbi5kcm9wZG93bi1kaXZpZGVyIHtcXG4gIGhlaWdodDogMDtcXG4gIG1hcmdpbjogMC41cmVtIDA7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlOWVjZWY7XFxufVxcblxcbi5kcm9wZG93bi1pdGVtIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nOiAwLjI1cmVtIDEuNXJlbTtcXG4gIGNsZWFyOiBib3RoO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgdGV4dC1hbGlnbjogaW5oZXJpdDtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogMDtcXG59XFxuXFxuLmRyb3Bkb3duLWl0ZW06aG92ZXIsIC5kcm9wZG93bi1pdGVtOmZvY3VzIHtcXG4gIGNvbG9yOiAjMTYxODFiO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcXG59XFxuXFxuLmRyb3Bkb3duLWl0ZW0uYWN0aXZlLCAuZHJvcGRvd24taXRlbTphY3RpdmUge1xcbiAgY29sb3I6ICNmZmY7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3YmZmO1xcbn1cXG5cXG4uZHJvcGRvd24taXRlbS5kaXNhYmxlZCwgLmRyb3Bkb3duLWl0ZW06ZGlzYWJsZWQge1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uZHJvcGRvd24tbWVudS5zaG93IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4uZHJvcGRvd24taGVhZGVyIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgcGFkZGluZzogMC41cmVtIDEuNXJlbTtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxuICBmb250LXNpemU6IDAuODc1cmVtO1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG5cXG4uZHJvcGRvd24taXRlbS10ZXh0IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgcGFkZGluZzogMC4yNXJlbSAxLjVyZW07XFxuICBjb2xvcjogIzIxMjUyOTtcXG59XFxuXFxuLmJ0bi1ncm91cCxcXG4uYnRuLWdyb3VwLXZlcnRpY2FsIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG59XFxuXFxuLmJ0bi1ncm91cCA+IC5idG4sXFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgLW1zLWZsZXg6IDEgMSBhdXRvO1xcbiAgZmxleDogMSAxIGF1dG87XFxufVxcblxcbi5idG4tZ3JvdXAgPiAuYnRuOmhvdmVyLFxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOmhvdmVyIHtcXG4gIHotaW5kZXg6IDE7XFxufVxcblxcbi5idG4tZ3JvdXAgPiAuYnRuOmZvY3VzLCAuYnRuLWdyb3VwID4gLmJ0bjphY3RpdmUsIC5idG4tZ3JvdXAgPiAuYnRuLmFjdGl2ZSxcXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bjpmb2N1cyxcXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bjphY3RpdmUsXFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4uYWN0aXZlIHtcXG4gIHotaW5kZXg6IDE7XFxufVxcblxcbi5idG4tdG9vbGJhciB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxufVxcblxcbi5idG4tdG9vbGJhciAuaW5wdXQtZ3JvdXAge1xcbiAgd2lkdGg6IGF1dG87XFxufVxcblxcbi5idG4tZ3JvdXAgPiAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpLFxcbi5idG4tZ3JvdXAgPiAuYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xcbn1cXG5cXG4uYnRuLWdyb3VwID4gLmJ0bjpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKSxcXG4uYnRuLWdyb3VwID4gLmJ0bi1ncm91cDpub3QoOmxhc3QtY2hpbGQpID4gLmJ0biB7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xcbn1cXG5cXG4uYnRuLWdyb3VwID4gLmJ0bjpub3QoOmZpcnN0LWNoaWxkKSxcXG4uYnRuLWdyb3VwID4gLmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKSA+IC5idG4ge1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XFxufVxcblxcbi5kcm9wZG93bi10b2dnbGUtc3BsaXQge1xcbiAgcGFkZGluZy1yaWdodDogMC41NjI1cmVtO1xcbiAgcGFkZGluZy1sZWZ0OiAwLjU2MjVyZW07XFxufVxcblxcbi5kcm9wZG93bi10b2dnbGUtc3BsaXQ6OmFmdGVyLFxcbi5kcm9wdXAgLmRyb3Bkb3duLXRvZ2dsZS1zcGxpdDo6YWZ0ZXIsXFxuLmRyb3ByaWdodCAuZHJvcGRvd24tdG9nZ2xlLXNwbGl0OjphZnRlciB7XFxuICBtYXJnaW4tbGVmdDogMDtcXG59XFxuXFxuLmRyb3BsZWZ0IC5kcm9wZG93bi10b2dnbGUtc3BsaXQ6OmJlZm9yZSB7XFxuICBtYXJnaW4tcmlnaHQ6IDA7XFxufVxcblxcbi5idG4tc20gKyAuZHJvcGRvd24tdG9nZ2xlLXNwbGl0LCAuYnRuLWdyb3VwLXNtID4gLmJ0biArIC5kcm9wZG93bi10b2dnbGUtc3BsaXQge1xcbiAgcGFkZGluZy1yaWdodDogMC4zNzVyZW07XFxuICBwYWRkaW5nLWxlZnQ6IDAuMzc1cmVtO1xcbn1cXG5cXG4uYnRuLWxnICsgLmRyb3Bkb3duLXRvZ2dsZS1zcGxpdCwgLmJ0bi1ncm91cC1sZyA+IC5idG4gKyAuZHJvcGRvd24tdG9nZ2xlLXNwbGl0IHtcXG4gIHBhZGRpbmctcmlnaHQ6IDAuNzVyZW07XFxuICBwYWRkaW5nLWxlZnQ6IDAuNzVyZW07XFxufVxcblxcbi5idG4tZ3JvdXAtdmVydGljYWwge1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0O1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxuICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuXFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4sXFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXAge1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcblxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpLFxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gIG1hcmdpbi10b3A6IC0xcHg7XFxufVxcblxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOm5vdCg6bGFzdC1jaGlsZCk6bm90KC5kcm9wZG93bi10b2dnbGUpLFxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuIHtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcXG59XFxuXFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG46bm90KDpmaXJzdC1jaGlsZCksXFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXA6bm90KDpmaXJzdC1jaGlsZCkgPiAuYnRuIHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG59XFxuXFxuLmJ0bi1ncm91cC10b2dnbGUgPiAuYnRuLFxcbi5idG4tZ3JvdXAtdG9nZ2xlID4gLmJ0bi1ncm91cCA+IC5idG4ge1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG59XFxuXFxuLmJ0bi1ncm91cC10b2dnbGUgPiAuYnRuIGlucHV0W3R5cGU9XFxcInJhZGlvXFxcIl0sXFxuLmJ0bi1ncm91cC10b2dnbGUgPiAuYnRuIGlucHV0W3R5cGU9XFxcImNoZWNrYm94XFxcIl0sXFxuLmJ0bi1ncm91cC10b2dnbGUgPiAuYnRuLWdyb3VwID4gLmJ0biBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdLFxcbi5idG4tZ3JvdXAtdG9nZ2xlID4gLmJ0bi1ncm91cCA+IC5idG4gaW5wdXRbdHlwZT1cXFwiY2hlY2tib3hcXFwiXSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBjbGlwOiByZWN0KDAsIDAsIDAsIDApO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi5pbnB1dC1ncm91cCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgLW1zLWZsZXgtYWxpZ246IHN0cmV0Y2g7XFxuICBhbGlnbi1pdGVtczogc3RyZXRjaDtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sLFxcbi5pbnB1dC1ncm91cCA+IC5mb3JtLWNvbnRyb2wtcGxhaW50ZXh0LFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tc2VsZWN0LFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tZmlsZSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAtbXMtZmxleDogMSAxIGF1dG87XFxuICBmbGV4OiAxIDEgYXV0bztcXG4gIHdpZHRoOiAxJTtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxufVxcblxcbi5pbnB1dC1ncm91cCA+IC5mb3JtLWNvbnRyb2wgKyAuZm9ybS1jb250cm9sLFxcbi5pbnB1dC1ncm91cCA+IC5mb3JtLWNvbnRyb2wgKyAuY3VzdG9tLXNlbGVjdCxcXG4uaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sICsgLmN1c3RvbS1maWxlLFxcbi5pbnB1dC1ncm91cCA+IC5mb3JtLWNvbnRyb2wtcGxhaW50ZXh0ICsgLmZvcm0tY29udHJvbCxcXG4uaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sLXBsYWludGV4dCArIC5jdXN0b20tc2VsZWN0LFxcbi5pbnB1dC1ncm91cCA+IC5mb3JtLWNvbnRyb2wtcGxhaW50ZXh0ICsgLmN1c3RvbS1maWxlLFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tc2VsZWN0ICsgLmZvcm0tY29udHJvbCxcXG4uaW5wdXQtZ3JvdXAgPiAuY3VzdG9tLXNlbGVjdCArIC5jdXN0b20tc2VsZWN0LFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tc2VsZWN0ICsgLmN1c3RvbS1maWxlLFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tZmlsZSArIC5mb3JtLWNvbnRyb2wsXFxuLmlucHV0LWdyb3VwID4gLmN1c3RvbS1maWxlICsgLmN1c3RvbS1zZWxlY3QsXFxuLmlucHV0LWdyb3VwID4gLmN1c3RvbS1maWxlICsgLmN1c3RvbS1maWxlIHtcXG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sOmZvY3VzLFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tc2VsZWN0OmZvY3VzLFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tZmlsZSAuY3VzdG9tLWZpbGUtaW5wdXQ6Zm9jdXMgfiAuY3VzdG9tLWZpbGUtbGFiZWwge1xcbiAgei1pbmRleDogMztcXG59XFxuXFxuLmlucHV0LWdyb3VwID4gLmN1c3RvbS1maWxlIC5jdXN0b20tZmlsZS1pbnB1dDpmb2N1cyB7XFxuICB6LWluZGV4OiA0O1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sOm5vdCg6bGFzdC1jaGlsZCksXFxuLmlucHV0LWdyb3VwID4gLmN1c3RvbS1zZWxlY3Q6bm90KDpsYXN0LWNoaWxkKSB7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sOm5vdCg6Zmlyc3QtY2hpbGQpLFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tc2VsZWN0Om5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAgPiAuY3VzdG9tLWZpbGUge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxufVxcblxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tZmlsZTpub3QoOmxhc3QtY2hpbGQpIC5jdXN0b20tZmlsZS1sYWJlbCxcXG4uaW5wdXQtZ3JvdXAgPiAuY3VzdG9tLWZpbGU6bm90KDpsYXN0LWNoaWxkKSAuY3VzdG9tLWZpbGUtbGFiZWw6OmFmdGVyIHtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XFxufVxcblxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tZmlsZTpub3QoOmZpcnN0LWNoaWxkKSAuY3VzdG9tLWZpbGUtbGFiZWwge1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XFxufVxcblxcbi5pbnB1dC1ncm91cC1wcmVwZW5kLFxcbi5pbnB1dC1ncm91cC1hcHBlbmQge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAtcHJlcGVuZCAuYnRuLFxcbi5pbnB1dC1ncm91cC1hcHBlbmQgLmJ0biB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB6LWluZGV4OiAyO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAtcHJlcGVuZCAuYnRuOmZvY3VzLFxcbi5pbnB1dC1ncm91cC1hcHBlbmQgLmJ0bjpmb2N1cyB7XFxuICB6LWluZGV4OiAzO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAtcHJlcGVuZCAuYnRuICsgLmJ0bixcXG4uaW5wdXQtZ3JvdXAtcHJlcGVuZCAuYnRuICsgLmlucHV0LWdyb3VwLXRleHQsXFxuLmlucHV0LWdyb3VwLXByZXBlbmQgLmlucHV0LWdyb3VwLXRleHQgKyAuaW5wdXQtZ3JvdXAtdGV4dCxcXG4uaW5wdXQtZ3JvdXAtcHJlcGVuZCAuaW5wdXQtZ3JvdXAtdGV4dCArIC5idG4sXFxuLmlucHV0LWdyb3VwLWFwcGVuZCAuYnRuICsgLmJ0bixcXG4uaW5wdXQtZ3JvdXAtYXBwZW5kIC5idG4gKyAuaW5wdXQtZ3JvdXAtdGV4dCxcXG4uaW5wdXQtZ3JvdXAtYXBwZW5kIC5pbnB1dC1ncm91cC10ZXh0ICsgLmlucHV0LWdyb3VwLXRleHQsXFxuLmlucHV0LWdyb3VwLWFwcGVuZCAuaW5wdXQtZ3JvdXAtdGV4dCArIC5idG4ge1xcbiAgbWFyZ2luLWxlZnQ6IC0xcHg7XFxufVxcblxcbi5pbnB1dC1ncm91cC1wcmVwZW5kIHtcXG4gIG1hcmdpbi1yaWdodDogLTFweDtcXG59XFxuXFxuLmlucHV0LWdyb3VwLWFwcGVuZCB7XFxuICBtYXJnaW4tbGVmdDogLTFweDtcXG59XFxuXFxuLmlucHV0LWdyb3VwLXRleHQge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBwYWRkaW5nOiAwLjM3NXJlbSAwLjc1cmVtO1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIGZvbnQtc2l6ZTogMXJlbTtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgY29sb3I6ICM0OTUwNTc7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U5ZWNlZjtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNjZWQ0ZGE7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAtdGV4dCBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdLFxcbi5pbnB1dC1ncm91cC10ZXh0IGlucHV0W3R5cGU9XFxcImNoZWNrYm94XFxcIl0ge1xcbiAgbWFyZ2luLXRvcDogMDtcXG59XFxuXFxuLmlucHV0LWdyb3VwLWxnID4gLmZvcm0tY29udHJvbDpub3QodGV4dGFyZWEpLFxcbi5pbnB1dC1ncm91cC1sZyA+IC5jdXN0b20tc2VsZWN0IHtcXG4gIGhlaWdodDogY2FsYygxLjVlbSArIDFyZW0gKyAycHgpO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAtbGcgPiAuZm9ybS1jb250cm9sLFxcbi5pbnB1dC1ncm91cC1sZyA+IC5jdXN0b20tc2VsZWN0LFxcbi5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1wcmVwZW5kID4gLmlucHV0LWdyb3VwLXRleHQsXFxuLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWFwcGVuZCA+IC5pbnB1dC1ncm91cC10ZXh0LFxcbi5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1wcmVwZW5kID4gLmJ0bixcXG4uaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYXBwZW5kID4gLmJ0biB7XFxuICBwYWRkaW5nOiAwLjVyZW0gMXJlbTtcXG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICBib3JkZXItcmFkaXVzOiAwLjNyZW07XFxufVxcblxcbi5pbnB1dC1ncm91cC1zbSA+IC5mb3JtLWNvbnRyb2w6bm90KHRleHRhcmVhKSxcXG4uaW5wdXQtZ3JvdXAtc20gPiAuY3VzdG9tLXNlbGVjdCB7XFxuICBoZWlnaHQ6IGNhbGMoMS41ZW0gKyAwLjVyZW0gKyAycHgpO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAtc20gPiAuZm9ybS1jb250cm9sLFxcbi5pbnB1dC1ncm91cC1zbSA+IC5jdXN0b20tc2VsZWN0LFxcbi5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1wcmVwZW5kID4gLmlucHV0LWdyb3VwLXRleHQsXFxuLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWFwcGVuZCA+IC5pbnB1dC1ncm91cC10ZXh0LFxcbi5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1wcmVwZW5kID4gLmJ0bixcXG4uaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYXBwZW5kID4gLmJ0biB7XFxuICBwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbTtcXG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgYm9yZGVyLXJhZGl1czogMC4ycmVtO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAtbGcgPiAuY3VzdG9tLXNlbGVjdCxcXG4uaW5wdXQtZ3JvdXAtc20gPiAuY3VzdG9tLXNlbGVjdCB7XFxuICBwYWRkaW5nLXJpZ2h0OiAxLjc1cmVtO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAgPiAuaW5wdXQtZ3JvdXAtcHJlcGVuZCA+IC5idG4sXFxuLmlucHV0LWdyb3VwID4gLmlucHV0LWdyb3VwLXByZXBlbmQgPiAuaW5wdXQtZ3JvdXAtdGV4dCxcXG4uaW5wdXQtZ3JvdXAgPiAuaW5wdXQtZ3JvdXAtYXBwZW5kOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuLFxcbi5pbnB1dC1ncm91cCA+IC5pbnB1dC1ncm91cC1hcHBlbmQ6bm90KDpsYXN0LWNoaWxkKSA+IC5pbnB1dC1ncm91cC10ZXh0LFxcbi5pbnB1dC1ncm91cCA+IC5pbnB1dC1ncm91cC1hcHBlbmQ6bGFzdC1jaGlsZCA+IC5idG46bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSksXFxuLmlucHV0LWdyb3VwID4gLmlucHV0LWdyb3VwLWFwcGVuZDpsYXN0LWNoaWxkID4gLmlucHV0LWdyb3VwLXRleHQ6bm90KDpsYXN0LWNoaWxkKSB7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAgPiAuaW5wdXQtZ3JvdXAtYXBwZW5kID4gLmJ0bixcXG4uaW5wdXQtZ3JvdXAgPiAuaW5wdXQtZ3JvdXAtYXBwZW5kID4gLmlucHV0LWdyb3VwLXRleHQsXFxuLmlucHV0LWdyb3VwID4gLmlucHV0LWdyb3VwLXByZXBlbmQ6bm90KDpmaXJzdC1jaGlsZCkgPiAuYnRuLFxcbi5pbnB1dC1ncm91cCA+IC5pbnB1dC1ncm91cC1wcmVwZW5kOm5vdCg6Zmlyc3QtY2hpbGQpID4gLmlucHV0LWdyb3VwLXRleHQsXFxuLmlucHV0LWdyb3VwID4gLmlucHV0LWdyb3VwLXByZXBlbmQ6Zmlyc3QtY2hpbGQgPiAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpLFxcbi5pbnB1dC1ncm91cCA+IC5pbnB1dC1ncm91cC1wcmVwZW5kOmZpcnN0LWNoaWxkID4gLmlucHV0LWdyb3VwLXRleHQ6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XFxufVxcblxcbi5jdXN0b20tY29udHJvbCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIG1pbi1oZWlnaHQ6IDEuNXJlbTtcXG4gIHBhZGRpbmctbGVmdDogMS41cmVtO1xcbn1cXG5cXG4uY3VzdG9tLWNvbnRyb2wtaW5saW5lIHtcXG4gIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xcbn1cXG5cXG4uY3VzdG9tLWNvbnRyb2wtaW5wdXQge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgei1pbmRleDogLTE7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG5cXG4uY3VzdG9tLWNvbnRyb2wtaW5wdXQ6Y2hlY2tlZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyLWNvbG9yOiAjMDA3YmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjtcXG59XFxuXFxuLmN1c3RvbS1jb250cm9sLWlucHV0OmZvY3VzIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMCwgMTIzLCAyNTUsIDAuMjUpO1xcbn1cXG5cXG4uY3VzdG9tLWNvbnRyb2wtaW5wdXQ6Zm9jdXM6bm90KDpjaGVja2VkKSB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJvcmRlci1jb2xvcjogIzgwYmRmZjtcXG59XFxuXFxuLmN1c3RvbS1jb250cm9sLWlucHV0Om5vdCg6ZGlzYWJsZWQpOmFjdGl2ZSB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IzZDdmZjtcXG4gIGJvcmRlci1jb2xvcjogI2IzZDdmZjtcXG59XFxuXFxuLmN1c3RvbS1jb250cm9sLWlucHV0OmRpc2FibGVkIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsIHtcXG4gIGNvbG9yOiAjNmM3NTdkO1xcbn1cXG5cXG4uY3VzdG9tLWNvbnRyb2wtaW5wdXQ6ZGlzYWJsZWQgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO1xcbn1cXG5cXG4uY3VzdG9tLWNvbnRyb2wtbGFiZWwge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XFxufVxcblxcbi5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMC4yNXJlbTtcXG4gIGxlZnQ6IC0xLjVyZW07XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxcmVtO1xcbiAgaGVpZ2h0OiAxcmVtO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3JkZXI6ICNhZGI1YmQgc29saWQgMXB4O1xcbn1cXG5cXG4uY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmFmdGVyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMC4yNXJlbTtcXG4gIGxlZnQ6IC0xLjVyZW07XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxcmVtO1xcbiAgaGVpZ2h0OiAxcmVtO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgNTAlIC8gNTAlIDUwJTtcXG59XFxuXFxuLmN1c3RvbS1jaGVja2JveCAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSB7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4uY3VzdG9tLWNoZWNrYm94IC5jdXN0b20tY29udHJvbC1pbnB1dDpjaGVja2VkIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjphZnRlciB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgOCA4JyUzZSUzY3BhdGggZmlsbD0nJTIzZmZmJyBkPSdNNi41NjQuNzVsLTMuNTkgMy42MTItMS41MzgtMS41NUwwIDQuMjYgMi45NzQgNy4yNSA4IDIuMTkzeicvJTNlJTNjL3N2ZyUzZVxcXCIpO1xcbn1cXG5cXG4uY3VzdG9tLWNoZWNrYm94IC5jdXN0b20tY29udHJvbC1pbnB1dDppbmRldGVybWluYXRlIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUge1xcbiAgYm9yZGVyLWNvbG9yOiAjMDA3YmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjtcXG59XFxuXFxuLmN1c3RvbS1jaGVja2JveCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6aW5kZXRlcm1pbmF0ZSB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YWZ0ZXIge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDQgNCclM2UlM2NwYXRoIHN0cm9rZT0nJTIzZmZmJyBkPSdNMCAyaDQnLyUzZSUzYy9zdmclM2VcXFwiKTtcXG59XFxuXFxuLmN1c3RvbS1jaGVja2JveCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6ZGlzYWJsZWQ6Y2hlY2tlZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMTIzLCAyNTUsIDAuNSk7XFxufVxcblxcbi5jdXN0b20tY2hlY2tib3ggLmN1c3RvbS1jb250cm9sLWlucHV0OmRpc2FibGVkOmluZGV0ZXJtaW5hdGUgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDEyMywgMjU1LCAwLjUpO1xcbn1cXG5cXG4uY3VzdG9tLXJhZGlvIC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG59XFxuXFxuLmN1c3RvbS1yYWRpbyAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6Y2hlY2tlZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YWZ0ZXIge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nLTQgLTQgOCA4JyUzZSUzY2NpcmNsZSByPSczJyBmaWxsPSclMjNmZmYnLyUzZSUzYy9zdmclM2VcXFwiKTtcXG59XFxuXFxuLmN1c3RvbS1yYWRpbyAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6ZGlzYWJsZWQ6Y2hlY2tlZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMTIzLCAyNTUsIDAuNSk7XFxufVxcblxcbi5jdXN0b20tc3dpdGNoIHtcXG4gIHBhZGRpbmctbGVmdDogMi4yNXJlbTtcXG59XFxuXFxuLmN1c3RvbS1zd2l0Y2ggLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUge1xcbiAgbGVmdDogLTIuMjVyZW07XFxuICB3aWR0aDogMS43NXJlbTtcXG4gIHBvaW50ZXItZXZlbnRzOiBhbGw7XFxuICBib3JkZXItcmFkaXVzOiAwLjVyZW07XFxufVxcblxcbi5jdXN0b20tc3dpdGNoIC5jdXN0b20tY29udHJvbC1sYWJlbDo6YWZ0ZXIge1xcbiAgdG9wOiBjYWxjKDAuMjVyZW0gKyAycHgpO1xcbiAgbGVmdDogY2FsYygtMi4yNXJlbSArIDJweCk7XFxuICB3aWR0aDogY2FsYygxcmVtIC0gNHB4KTtcXG4gIGhlaWdodDogY2FsYygxcmVtIC0gNHB4KTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhZGI1YmQ7XFxuICBib3JkZXItcmFkaXVzOiAwLjVyZW07XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJveC1zaGFkb3cgMC4xNXMgZWFzZS1pbi1vdXQsIC13ZWJraXQtdHJhbnNmb3JtIDAuMTVzIGVhc2UtaW4tb3V0O1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMTVzIGVhc2UtaW4tb3V0LCBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJveC1zaGFkb3cgMC4xNXMgZWFzZS1pbi1vdXQ7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4xNXMgZWFzZS1pbi1vdXQsIGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAwLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAwLjE1cyBlYXNlLWluLW91dCwgLXdlYmtpdC10cmFuc2Zvcm0gMC4xNXMgZWFzZS1pbi1vdXQ7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAuY3VzdG9tLXN3aXRjaCAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmFmdGVyIHtcXG4gICAgdHJhbnNpdGlvbjogbm9uZTtcXG4gIH1cXG59XFxuXFxuLmN1c3RvbS1zd2l0Y2ggLmN1c3RvbS1jb250cm9sLWlucHV0OmNoZWNrZWQgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmFmdGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgwLjc1cmVtKTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwLjc1cmVtKTtcXG59XFxuXFxuLmN1c3RvbS1zd2l0Y2ggLmN1c3RvbS1jb250cm9sLWlucHV0OmRpc2FibGVkOmNoZWNrZWQgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDEyMywgMjU1LCAwLjUpO1xcbn1cXG5cXG4uY3VzdG9tLXNlbGVjdCB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogY2FsYygxLjVlbSArIDAuNzVyZW0gKyAycHgpO1xcbiAgcGFkZGluZzogMC4zNzVyZW0gMS43NXJlbSAwLjM3NXJlbSAwLjc1cmVtO1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICBjb2xvcjogIzQ5NTA1NztcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuICBiYWNrZ3JvdW5kOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNCA1JyUzZSUzY3BhdGggZmlsbD0nJTIzMzQzYTQwJyBkPSdNMiAwTDAgMmg0em0wIDVMMCAzaDR6Jy8lM2UlM2Mvc3ZnJTNlXFxcIikgbm8tcmVwZWF0IHJpZ2h0IDAuNzVyZW0gY2VudGVyLzhweCAxMHB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNjZWQ0ZGE7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbiAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xcbiAgYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuXFxuLmN1c3RvbS1zZWxlY3Q6Zm9jdXMge1xcbiAgYm9yZGVyLWNvbG9yOiAjODBiZGZmO1xcbiAgb3V0bGluZTogMDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDAsIDEyMywgMjU1LCAwLjI1KTtcXG59XFxuXFxuLmN1c3RvbS1zZWxlY3Q6Zm9jdXM6Oi1tcy12YWx1ZSB7XFxuICBjb2xvcjogIzQ5NTA1NztcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxufVxcblxcbi5jdXN0b20tc2VsZWN0W211bHRpcGxlXSwgLmN1c3RvbS1zZWxlY3Rbc2l6ZV06bm90KFtzaXplPVxcXCIxXFxcIl0pIHtcXG4gIGhlaWdodDogYXV0bztcXG4gIHBhZGRpbmctcmlnaHQ6IDAuNzVyZW07XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xcbn1cXG5cXG4uY3VzdG9tLXNlbGVjdDpkaXNhYmxlZCB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlOWVjZWY7XFxufVxcblxcbi5jdXN0b20tc2VsZWN0OjotbXMtZXhwYW5kIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi5jdXN0b20tc2VsZWN0LXNtIHtcXG4gIGhlaWdodDogY2FsYygxLjVlbSArIDAuNXJlbSArIDJweCk7XFxuICBwYWRkaW5nLXRvcDogMC4yNXJlbTtcXG4gIHBhZGRpbmctYm90dG9tOiAwLjI1cmVtO1xcbiAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XFxuICBmb250LXNpemU6IDAuODc1cmVtO1xcbn1cXG5cXG4uY3VzdG9tLXNlbGVjdC1sZyB7XFxuICBoZWlnaHQ6IGNhbGMoMS41ZW0gKyAxcmVtICsgMnB4KTtcXG4gIHBhZGRpbmctdG9wOiAwLjVyZW07XFxuICBwYWRkaW5nLWJvdHRvbTogMC41cmVtO1xcbiAgcGFkZGluZy1sZWZ0OiAxcmVtO1xcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xcbn1cXG5cXG4uY3VzdG9tLWZpbGUge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IGNhbGMoMS41ZW0gKyAwLjc1cmVtICsgMnB4KTtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxufVxcblxcbi5jdXN0b20tZmlsZS1pbnB1dCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB6LWluZGV4OiAyO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IGNhbGMoMS41ZW0gKyAwLjc1cmVtICsgMnB4KTtcXG4gIG1hcmdpbjogMDtcXG4gIG9wYWNpdHk6IDA7XFxufVxcblxcbi5jdXN0b20tZmlsZS1pbnB1dDpmb2N1cyB+IC5jdXN0b20tZmlsZS1sYWJlbCB7XFxuICBib3JkZXItY29sb3I6ICM4MGJkZmY7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgwLCAxMjMsIDI1NSwgMC4yNSk7XFxufVxcblxcbi5jdXN0b20tZmlsZS1pbnB1dDpkaXNhYmxlZCB+IC5jdXN0b20tZmlsZS1sYWJlbCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO1xcbn1cXG5cXG4uY3VzdG9tLWZpbGUtaW5wdXQ6bGFuZyhlbikgfiAuY3VzdG9tLWZpbGUtbGFiZWw6OmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCJCcm93c2VcXFwiO1xcbn1cXG5cXG4uY3VzdG9tLWZpbGUtaW5wdXQgfiAuY3VzdG9tLWZpbGUtbGFiZWxbZGF0YS1icm93c2VdOjphZnRlciB7XFxuICBjb250ZW50OiBhdHRyKGRhdGEtYnJvd3NlKTtcXG59XFxuXFxuLmN1c3RvbS1maWxlLWxhYmVsIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgbGVmdDogMDtcXG4gIHotaW5kZXg6IDE7XFxuICBoZWlnaHQ6IGNhbGMoMS41ZW0gKyAwLjc1cmVtICsgMnB4KTtcXG4gIHBhZGRpbmc6IDAuMzc1cmVtIDAuNzVyZW07XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG4gIGNvbG9yOiAjNDk1MDU3O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNjZWQ0ZGE7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4uY3VzdG9tLWZpbGUtbGFiZWw6OmFmdGVyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgei1pbmRleDogMztcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgaGVpZ2h0OiBjYWxjKDEuNWVtICsgMC43NXJlbSk7XFxuICBwYWRkaW5nOiAwLjM3NXJlbSAwLjc1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG4gIGNvbG9yOiAjNDk1MDU3O1xcbiAgY29udGVudDogXFxcIkJyb3dzZVxcXCI7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO1xcbiAgYm9yZGVyLWxlZnQ6IGluaGVyaXQ7XFxuICBib3JkZXItcmFkaXVzOiAwIDAuMjVyZW0gMC4yNXJlbSAwO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiBjYWxjKDFyZW0gKyAwLjRyZW0pO1xcbiAgcGFkZGluZzogMDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbiAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xcbiAgYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuXFxuLmN1c3RvbS1yYW5nZTpmb2N1cyB7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlOmZvY3VzOjotd2Via2l0LXNsaWRlci10aHVtYiB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggI2ZmZiwgMCAwIDAgMC4ycmVtIHJnYmEoMCwgMTIzLCAyNTUsIDAuMjUpO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlOmZvY3VzOjotbW96LXJhbmdlLXRodW1iIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCAjZmZmLCAwIDAgMCAwLjJyZW0gcmdiYSgwLCAxMjMsIDI1NSwgMC4yNSk7XFxufVxcblxcbi5jdXN0b20tcmFuZ2U6Zm9jdXM6Oi1tcy10aHVtYiB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggI2ZmZiwgMCAwIDAgMC4ycmVtIHJnYmEoMCwgMTIzLCAyNTUsIDAuMjUpO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlOjotbW96LWZvY3VzLW91dGVyIHtcXG4gIGJvcmRlcjogMDtcXG59XFxuXFxuLmN1c3RvbS1yYW5nZTo6LXdlYmtpdC1zbGlkZXItdGh1bWIge1xcbiAgd2lkdGg6IDFyZW07XFxuICBoZWlnaHQ6IDFyZW07XFxuICBtYXJnaW4tdG9wOiAtMC4yNXJlbTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDdiZmY7XFxuICBib3JkZXI6IDA7XFxuICBib3JkZXItcmFkaXVzOiAxcmVtO1xcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjE1cyBlYXNlLWluLW91dCwgYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3gtc2hhZG93IDAuMTVzIGVhc2UtaW4tb3V0O1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbiAgYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuXFxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcXG4gIC5jdXN0b20tcmFuZ2U6Oi13ZWJraXQtc2xpZGVyLXRodW1iIHtcXG4gICAgdHJhbnNpdGlvbjogbm9uZTtcXG4gIH1cXG59XFxuXFxuLmN1c3RvbS1yYW5nZTo6LXdlYmtpdC1zbGlkZXItdGh1bWI6YWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiM2Q3ZmY7XFxufVxcblxcbi5jdXN0b20tcmFuZ2U6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAwLjVyZW07XFxuICBjb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVlMmU2O1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1yYWRpdXM6IDFyZW07XFxufVxcblxcbi5jdXN0b20tcmFuZ2U6Oi1tb3otcmFuZ2UtdGh1bWIge1xcbiAgd2lkdGg6IDFyZW07XFxuICBoZWlnaHQ6IDFyZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3YmZmO1xcbiAgYm9yZGVyOiAwO1xcbiAgYm9yZGVyLXJhZGl1czogMXJlbTtcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAwLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAwLjE1cyBlYXNlLWluLW91dDtcXG4gIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcXG4gIGFwcGVhcmFuY2U6IG5vbmU7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAuY3VzdG9tLXJhbmdlOjotbW96LXJhbmdlLXRodW1iIHtcXG4gICAgdHJhbnNpdGlvbjogbm9uZTtcXG4gIH1cXG59XFxuXFxuLmN1c3RvbS1yYW5nZTo6LW1vei1yYW5nZS10aHVtYjphY3RpdmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IzZDdmZjtcXG59XFxuXFxuLmN1c3RvbS1yYW5nZTo6LW1vei1yYW5nZS10cmFjayB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMC41cmVtO1xcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RlZTJlNjtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmFkaXVzOiAxcmVtO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlOjotbXMtdGh1bWIge1xcbiAgd2lkdGg6IDFyZW07XFxuICBoZWlnaHQ6IDFyZW07XFxuICBtYXJnaW4tdG9wOiAwO1xcbiAgbWFyZ2luLXJpZ2h0OiAwLjJyZW07XFxuICBtYXJnaW4tbGVmdDogMC4ycmVtO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjtcXG4gIGJvcmRlcjogMDtcXG4gIGJvcmRlci1yYWRpdXM6IDFyZW07XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJveC1zaGFkb3cgMC4xNXMgZWFzZS1pbi1vdXQ7XFxuICBhcHBlYXJhbmNlOiBub25lO1xcbn1cXG5cXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xcbiAgLmN1c3RvbS1yYW5nZTo6LW1zLXRodW1iIHtcXG4gICAgdHJhbnNpdGlvbjogbm9uZTtcXG4gIH1cXG59XFxuXFxuLmN1c3RvbS1yYW5nZTo6LW1zLXRodW1iOmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjNkN2ZmO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlOjotbXMtdHJhY2sge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDAuNXJlbTtcXG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci13aWR0aDogMC41cmVtO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlOjotbXMtZmlsbC1sb3dlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVlMmU2O1xcbiAgYm9yZGVyLXJhZGl1czogMXJlbTtcXG59XFxuXFxuLmN1c3RvbS1yYW5nZTo6LW1zLWZpbGwtdXBwZXIge1xcbiAgbWFyZ2luLXJpZ2h0OiAxNXB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RlZTJlNjtcXG4gIGJvcmRlci1yYWRpdXM6IDFyZW07XFxufVxcblxcbi5jdXN0b20tcmFuZ2U6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1iIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhZGI1YmQ7XFxufVxcblxcbi5jdXN0b20tcmFuZ2U6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrIHtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuXFxuLmN1c3RvbS1yYW5nZTpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWRiNWJkO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlOmRpc2FibGVkOjotbW96LXJhbmdlLXRyYWNrIHtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuXFxuLmN1c3RvbS1yYW5nZTpkaXNhYmxlZDo6LW1zLXRodW1iIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhZGI1YmQ7XFxufVxcblxcbi5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlLFxcbi5jdXN0b20tZmlsZS1sYWJlbCxcXG4uY3VzdG9tLXNlbGVjdCB7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJveC1zaGFkb3cgMC4xNXMgZWFzZS1pbi1vdXQ7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSxcXG4gIC5jdXN0b20tZmlsZS1sYWJlbCxcXG4gIC5jdXN0b20tc2VsZWN0IHtcXG4gICAgdHJhbnNpdGlvbjogbm9uZTtcXG4gIH1cXG59XFxuXFxuLm5hdiB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XFxufVxcblxcbi5uYXYtbGluayB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHBhZGRpbmc6IDAuNXJlbSAxcmVtO1xcbn1cXG5cXG4ubmF2LWxpbms6aG92ZXIsIC5uYXYtbGluazpmb2N1cyB7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcblxcbi5uYXYtbGluay5kaXNhYmxlZCB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbn1cXG5cXG4ubmF2LXRhYnMge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZWUyZTY7XFxufVxcblxcbi5uYXYtdGFicyAubmF2LWl0ZW0ge1xcbiAgbWFyZ2luLWJvdHRvbTogLTFweDtcXG59XFxuXFxuLm5hdi10YWJzIC5uYXYtbGluayB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLm5hdi10YWJzIC5uYXYtbGluazpob3ZlciwgLm5hdi10YWJzIC5uYXYtbGluazpmb2N1cyB7XFxuICBib3JkZXItY29sb3I6ICNlOWVjZWYgI2U5ZWNlZiAjZGVlMmU2O1xcbn1cXG5cXG4ubmF2LXRhYnMgLm5hdi1saW5rLmRpc2FibGVkIHtcXG4gIGNvbG9yOiAjNmM3NTdkO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4ubmF2LXRhYnMgLm5hdi1saW5rLmFjdGl2ZSxcXG4ubmF2LXRhYnMgLm5hdi1pdGVtLnNob3cgLm5hdi1saW5rIHtcXG4gIGNvbG9yOiAjNDk1MDU3O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlci1jb2xvcjogI2RlZTJlNiAjZGVlMmU2ICNmZmY7XFxufVxcblxcbi5uYXYtdGFicyAuZHJvcGRvd24tbWVudSB7XFxuICBtYXJnaW4tdG9wOiAtMXB4O1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xcbn1cXG5cXG4ubmF2LXBpbGxzIC5uYXYtbGluayB7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4ubmF2LXBpbGxzIC5uYXYtbGluay5hY3RpdmUsXFxuLm5hdi1waWxscyAuc2hvdyA+IC5uYXYtbGluayB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDdiZmY7XFxufVxcblxcbi5uYXYtZmlsbCAubmF2LWl0ZW0ge1xcbiAgLW1zLWZsZXg6IDEgMSBhdXRvO1xcbiAgZmxleDogMSAxIGF1dG87XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbi5uYXYtanVzdGlmaWVkIC5uYXYtaXRlbSB7XFxuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMDtcXG4gIGZsZXgtYmFzaXM6IDA7XFxuICAtbXMtZmxleC1wb3NpdGl2ZTogMTtcXG4gIGZsZXgtZ3JvdzogMTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuLnRhYi1jb250ZW50ID4gLnRhYi1wYW5lIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi50YWItY29udGVudCA+IC5hY3RpdmUge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi5uYXZiYXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcXG4gIGZsZXgtd3JhcDogd3JhcDtcXG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gIHBhZGRpbmc6IDAuNXJlbSAxcmVtO1xcbn1cXG5cXG4ubmF2YmFyID4gLmNvbnRhaW5lcixcXG4ubmF2YmFyID4gLmNvbnRhaW5lci1mbHVpZCB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbn1cXG5cXG4ubmF2YmFyLWJyYW5kIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHBhZGRpbmctdG9wOiAwLjMxMjVyZW07XFxuICBwYWRkaW5nLWJvdHRvbTogMC4zMTI1cmVtO1xcbiAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG5cXG4ubmF2YmFyLWJyYW5kOmhvdmVyLCAubmF2YmFyLWJyYW5kOmZvY3VzIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuXFxuLm5hdmJhci1uYXYge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XFxufVxcblxcbi5uYXZiYXItbmF2IC5uYXYtbGluayB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwO1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbn1cXG5cXG4ubmF2YmFyLW5hdiAuZHJvcGRvd24tbWVudSB7XFxuICBwb3NpdGlvbjogc3RhdGljO1xcbiAgZmxvYXQ6IG5vbmU7XFxufVxcblxcbi5uYXZiYXItdGV4dCB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBwYWRkaW5nLXRvcDogMC41cmVtO1xcbiAgcGFkZGluZy1ib3R0b206IDAuNXJlbTtcXG59XFxuXFxuLm5hdmJhci1jb2xsYXBzZSB7XFxuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMTAwJTtcXG4gIGZsZXgtYmFzaXM6IDEwMCU7XFxuICAtbXMtZmxleC1wb3NpdGl2ZTogMTtcXG4gIGZsZXgtZ3JvdzogMTtcXG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4ubmF2YmFyLXRvZ2dsZXIge1xcbiAgcGFkZGluZzogMC4yNXJlbSAwLjc1cmVtO1xcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLm5hdmJhci10b2dnbGVyOmhvdmVyLCAubmF2YmFyLXRvZ2dsZXI6Zm9jdXMge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbn1cXG5cXG4ubmF2YmFyLXRvZ2dsZXItaWNvbiB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB3aWR0aDogMS41ZW07XFxuICBoZWlnaHQ6IDEuNWVtO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgYmFja2dyb3VuZDogbm8tcmVwZWF0IGNlbnRlciBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMTAwJTtcXG59XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDU3NS45OHB4KSB7XFxuICAubmF2YmFyLWV4cGFuZC1zbSA+IC5jb250YWluZXIsXFxuICAubmF2YmFyLWV4cGFuZC1zbSA+IC5jb250YWluZXItZmx1aWQge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLm5hdmJhci1leHBhbmQtc20ge1xcbiAgICAtbXMtZmxleC1mbG93OiByb3cgbm93cmFwO1xcbiAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XFxuICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC1zbSAubmF2YmFyLW5hdiB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtc20gLm5hdmJhci1uYXYgLmRyb3Bkb3duLW1lbnUge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC1zbSAubmF2YmFyLW5hdiAubmF2LWxpbmsge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XFxuICAgIHBhZGRpbmctbGVmdDogMC41cmVtO1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtc20gPiAuY29udGFpbmVyLFxcbiAgLm5hdmJhci1leHBhbmQtc20gPiAuY29udGFpbmVyLWZsdWlkIHtcXG4gICAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xcbiAgICBmbGV4LXdyYXA6IG5vd3JhcDtcXG4gIH1cXG4gIC5uYXZiYXItZXhwYW5kLXNtIC5uYXZiYXItY29sbGFwc2Uge1xcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbiAgICBmbGV4LWJhc2lzOiBhdXRvO1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtc20gLm5hdmJhci10b2dnbGVyIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDc2Ny45OHB4KSB7XFxuICAubmF2YmFyLWV4cGFuZC1tZCA+IC5jb250YWluZXIsXFxuICAubmF2YmFyLWV4cGFuZC1tZCA+IC5jb250YWluZXItZmx1aWQge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLm5hdmJhci1leHBhbmQtbWQge1xcbiAgICAtbXMtZmxleC1mbG93OiByb3cgbm93cmFwO1xcbiAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XFxuICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC1tZCAubmF2YmFyLW5hdiB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtbWQgLm5hdmJhci1uYXYgLmRyb3Bkb3duLW1lbnUge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC1tZCAubmF2YmFyLW5hdiAubmF2LWxpbmsge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XFxuICAgIHBhZGRpbmctbGVmdDogMC41cmVtO1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtbWQgPiAuY29udGFpbmVyLFxcbiAgLm5hdmJhci1leHBhbmQtbWQgPiAuY29udGFpbmVyLWZsdWlkIHtcXG4gICAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xcbiAgICBmbGV4LXdyYXA6IG5vd3JhcDtcXG4gIH1cXG4gIC5uYXZiYXItZXhwYW5kLW1kIC5uYXZiYXItY29sbGFwc2Uge1xcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbiAgICBmbGV4LWJhc2lzOiBhdXRvO1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtbWQgLm5hdmJhci10b2dnbGVyIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDk5MS45OHB4KSB7XFxuICAubmF2YmFyLWV4cGFuZC1sZyA+IC5jb250YWluZXIsXFxuICAubmF2YmFyLWV4cGFuZC1sZyA+IC5jb250YWluZXItZmx1aWQge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xcbiAgLm5hdmJhci1leHBhbmQtbGcge1xcbiAgICAtbXMtZmxleC1mbG93OiByb3cgbm93cmFwO1xcbiAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XFxuICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC1sZyAubmF2YmFyLW5hdiB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtbGcgLm5hdmJhci1uYXYgLmRyb3Bkb3duLW1lbnUge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC1sZyAubmF2YmFyLW5hdiAubmF2LWxpbmsge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XFxuICAgIHBhZGRpbmctbGVmdDogMC41cmVtO1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtbGcgPiAuY29udGFpbmVyLFxcbiAgLm5hdmJhci1leHBhbmQtbGcgPiAuY29udGFpbmVyLWZsdWlkIHtcXG4gICAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xcbiAgICBmbGV4LXdyYXA6IG5vd3JhcDtcXG4gIH1cXG4gIC5uYXZiYXItZXhwYW5kLWxnIC5uYXZiYXItY29sbGFwc2Uge1xcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbiAgICBmbGV4LWJhc2lzOiBhdXRvO1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtbGcgLm5hdmJhci10b2dnbGVyIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDExOTkuOThweCkge1xcbiAgLm5hdmJhci1leHBhbmQteGwgPiAuY29udGFpbmVyLFxcbiAgLm5hdmJhci1leHBhbmQteGwgPiAuY29udGFpbmVyLWZsdWlkIHtcXG4gICAgcGFkZGluZy1yaWdodDogMDtcXG4gICAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XFxuICAubmF2YmFyLWV4cGFuZC14bCB7XFxuICAgIC1tcy1mbGV4LWZsb3c6IHJvdyBub3dyYXA7XFxuICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcXG4gICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcXG4gIH1cXG4gIC5uYXZiYXItZXhwYW5kLXhsIC5uYXZiYXItbmF2IHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC14bCAubmF2YmFyLW5hdiAuZHJvcGRvd24tbWVudSB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIH1cXG4gIC5uYXZiYXItZXhwYW5kLXhsIC5uYXZiYXItbmF2IC5uYXYtbGluayB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDAuNXJlbTtcXG4gICAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC14bCA+IC5jb250YWluZXIsXFxuICAubmF2YmFyLWV4cGFuZC14bCA+IC5jb250YWluZXItZmx1aWQge1xcbiAgICAtbXMtZmxleC13cmFwOiBub3dyYXA7XFxuICAgIGZsZXgtd3JhcDogbm93cmFwO1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQteGwgLm5hdmJhci1jb2xsYXBzZSB7XFxuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94ICFpbXBvcnRhbnQ7XFxuICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcXG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XFxuICAgIGZsZXgtYmFzaXM6IGF1dG87XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC14bCAubmF2YmFyLXRvZ2dsZXIge1xcbiAgICBkaXNwbGF5OiBub25lO1xcbiAgfVxcbn1cXG5cXG4ubmF2YmFyLWV4cGFuZCB7XFxuICAtbXMtZmxleC1mbG93OiByb3cgbm93cmFwO1xcbiAgZmxleC1mbG93OiByb3cgbm93cmFwO1xcbiAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxufVxcblxcbi5uYXZiYXItZXhwYW5kID4gLmNvbnRhaW5lcixcXG4ubmF2YmFyLWV4cGFuZCA+IC5jb250YWluZXItZmx1aWQge1xcbiAgcGFkZGluZy1yaWdodDogMDtcXG4gIHBhZGRpbmctbGVmdDogMDtcXG59XFxuXFxuLm5hdmJhci1leHBhbmQgLm5hdmJhci1uYXYge1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbn1cXG5cXG4ubmF2YmFyLWV4cGFuZCAubmF2YmFyLW5hdiAuZHJvcGRvd24tbWVudSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxufVxcblxcbi5uYXZiYXItZXhwYW5kIC5uYXZiYXItbmF2IC5uYXYtbGluayB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XFxuICBwYWRkaW5nLWxlZnQ6IDAuNXJlbTtcXG59XFxuXFxuLm5hdmJhci1leHBhbmQgPiAuY29udGFpbmVyLFxcbi5uYXZiYXItZXhwYW5kID4gLmNvbnRhaW5lci1mbHVpZCB7XFxuICAtbXMtZmxleC13cmFwOiBub3dyYXA7XFxuICBmbGV4LXdyYXA6IG5vd3JhcDtcXG59XFxuXFxuLm5hdmJhci1leHBhbmQgLm5hdmJhci1jb2xsYXBzZSB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XFxuICBmbGV4LWJhc2lzOiBhdXRvO1xcbn1cXG5cXG4ubmF2YmFyLWV4cGFuZCAubmF2YmFyLXRvZ2dsZXIge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLm5hdmJhci1saWdodCAubmF2YmFyLWJyYW5kIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOSk7XFxufVxcblxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci1icmFuZDpob3ZlciwgLm5hdmJhci1saWdodCAubmF2YmFyLWJyYW5kOmZvY3VzIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOSk7XFxufVxcblxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci1uYXYgLm5hdi1saW5rIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XFxufVxcblxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci1uYXYgLm5hdi1saW5rOmhvdmVyLCAubmF2YmFyLWxpZ2h0IC5uYXZiYXItbmF2IC5uYXYtbGluazpmb2N1cyB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjcpO1xcbn1cXG5cXG4ubmF2YmFyLWxpZ2h0IC5uYXZiYXItbmF2IC5uYXYtbGluay5kaXNhYmxlZCB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjMpO1xcbn1cXG5cXG4ubmF2YmFyLWxpZ2h0IC5uYXZiYXItbmF2IC5zaG93ID4gLm5hdi1saW5rLFxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci1uYXYgLmFjdGl2ZSA+IC5uYXYtbGluayxcXG4ubmF2YmFyLWxpZ2h0IC5uYXZiYXItbmF2IC5uYXYtbGluay5zaG93LFxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci1uYXYgLm5hdi1saW5rLmFjdGl2ZSB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjkpO1xcbn1cXG5cXG4ubmF2YmFyLWxpZ2h0IC5uYXZiYXItdG9nZ2xlciB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSk7XFxufVxcblxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci10b2dnbGVyLWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSUzY3BhdGggc3Ryb2tlPSdyZ2JhKDAsIDAsIDAsIDAuNSknIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbWl0ZXJsaW1pdD0nMTAnIGQ9J000IDdoMjJNNCAxNWgyMk00IDIzaDIyJy8lM2UlM2Mvc3ZnJTNlXFxcIik7XFxufVxcblxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci10ZXh0IHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XFxufVxcblxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci10ZXh0IGEge1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC45KTtcXG59XFxuXFxuLm5hdmJhci1saWdodCAubmF2YmFyLXRleHQgYTpob3ZlciwgLm5hdmJhci1saWdodCAubmF2YmFyLXRleHQgYTpmb2N1cyB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjkpO1xcbn1cXG5cXG4ubmF2YmFyLWRhcmsgLm5hdmJhci1icmFuZCB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuXFxuLm5hdmJhci1kYXJrIC5uYXZiYXItYnJhbmQ6aG92ZXIsIC5uYXZiYXItZGFyayAubmF2YmFyLWJyYW5kOmZvY3VzIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG5cXG4ubmF2YmFyLWRhcmsgLm5hdmJhci1uYXYgLm5hdi1saW5rIHtcXG4gIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XFxufVxcblxcbi5uYXZiYXItZGFyayAubmF2YmFyLW5hdiAubmF2LWxpbms6aG92ZXIsIC5uYXZiYXItZGFyayAubmF2YmFyLW5hdiAubmF2LWxpbms6Zm9jdXMge1xcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NSk7XFxufVxcblxcbi5uYXZiYXItZGFyayAubmF2YmFyLW5hdiAubmF2LWxpbmsuZGlzYWJsZWQge1xcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSk7XFxufVxcblxcbi5uYXZiYXItZGFyayAubmF2YmFyLW5hdiAuc2hvdyA+IC5uYXYtbGluayxcXG4ubmF2YmFyLWRhcmsgLm5hdmJhci1uYXYgLmFjdGl2ZSA+IC5uYXYtbGluayxcXG4ubmF2YmFyLWRhcmsgLm5hdmJhci1uYXYgLm5hdi1saW5rLnNob3csXFxuLm5hdmJhci1kYXJrIC5uYXZiYXItbmF2IC5uYXYtbGluay5hY3RpdmUge1xcbiAgY29sb3I6ICNmZmY7XFxufVxcblxcbi5uYXZiYXItZGFyayAubmF2YmFyLXRvZ2dsZXIge1xcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xcbn1cXG5cXG4ubmF2YmFyLWRhcmsgLm5hdmJhci10b2dnbGVyLWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSUzY3BhdGggc3Ryb2tlPSdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSknIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbWl0ZXJsaW1pdD0nMTAnIGQ9J000IDdoMjJNNCAxNWgyMk00IDIzaDIyJy8lM2UlM2Mvc3ZnJTNlXFxcIik7XFxufVxcblxcbi5uYXZiYXItZGFyayAubmF2YmFyLXRleHQge1xcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcXG59XFxuXFxuLm5hdmJhci1kYXJrIC5uYXZiYXItdGV4dCBhIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG5cXG4ubmF2YmFyLWRhcmsgLm5hdmJhci10ZXh0IGE6aG92ZXIsIC5uYXZiYXItZGFyayAubmF2YmFyLXRleHQgYTpmb2N1cyB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuXFxuLmNhcmQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgbWluLXdpZHRoOiAwO1xcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY2xpcDogYm9yZGVyLWJveDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xMjUpO1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLmNhcmQgPiBociB7XFxuICBtYXJnaW4tcmlnaHQ6IDA7XFxuICBtYXJnaW4tbGVmdDogMDtcXG59XFxuXFxuLmNhcmQgPiAubGlzdC1ncm91cDpmaXJzdC1jaGlsZCAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLmNhcmQgPiAubGlzdC1ncm91cDpsYXN0LWNoaWxkIC5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZCB7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxufVxcblxcbi5jYXJkLWJvZHkge1xcbiAgLW1zLWZsZXg6IDEgMSBhdXRvO1xcbiAgZmxleDogMSAxIGF1dG87XFxuICBwYWRkaW5nOiAxLjI1cmVtO1xcbn1cXG5cXG4uY2FyZC10aXRsZSB7XFxuICBtYXJnaW4tYm90dG9tOiAwLjc1cmVtO1xcbn1cXG5cXG4uY2FyZC1zdWJ0aXRsZSB7XFxuICBtYXJnaW4tdG9wOiAtMC4zNzVyZW07XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbn1cXG5cXG4uY2FyZC10ZXh0Omxhc3QtY2hpbGQge1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG59XFxuXFxuLmNhcmQtbGluazpob3ZlciB7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcblxcbi5jYXJkLWxpbmsgKyAuY2FyZC1saW5rIHtcXG4gIG1hcmdpbi1sZWZ0OiAxLjI1cmVtO1xcbn1cXG5cXG4uY2FyZC1oZWFkZXIge1xcbiAgcGFkZGluZzogMC43NXJlbSAxLjI1cmVtO1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wMyk7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEyNSk7XFxufVxcblxcbi5jYXJkLWhlYWRlcjpmaXJzdC1jaGlsZCB7XFxuICBib3JkZXItcmFkaXVzOiBjYWxjKDAuMjVyZW0gLSAxcHgpIGNhbGMoMC4yNXJlbSAtIDFweCkgMCAwO1xcbn1cXG5cXG4uY2FyZC1oZWFkZXIgKyAubGlzdC1ncm91cCAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHtcXG4gIGJvcmRlci10b3A6IDA7XFxufVxcblxcbi5jYXJkLWZvb3RlciB7XFxuICBwYWRkaW5nOiAwLjc1cmVtIDEuMjVyZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDMpO1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xMjUpO1xcbn1cXG5cXG4uY2FyZC1mb290ZXI6bGFzdC1jaGlsZCB7XFxuICBib3JkZXItcmFkaXVzOiAwIDAgY2FsYygwLjI1cmVtIC0gMXB4KSBjYWxjKDAuMjVyZW0gLSAxcHgpO1xcbn1cXG5cXG4uY2FyZC1oZWFkZXItdGFicyB7XFxuICBtYXJnaW4tcmlnaHQ6IC0wLjYyNXJlbTtcXG4gIG1hcmdpbi1ib3R0b206IC0wLjc1cmVtO1xcbiAgbWFyZ2luLWxlZnQ6IC0wLjYyNXJlbTtcXG4gIGJvcmRlci1ib3R0b206IDA7XFxufVxcblxcbi5jYXJkLWhlYWRlci1waWxscyB7XFxuICBtYXJnaW4tcmlnaHQ6IC0wLjYyNXJlbTtcXG4gIG1hcmdpbi1sZWZ0OiAtMC42MjVyZW07XFxufVxcblxcbi5jYXJkLWltZy1vdmVybGF5IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIHBhZGRpbmc6IDEuMjVyZW07XFxufVxcblxcbi5jYXJkLWltZyB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGJvcmRlci1yYWRpdXM6IGNhbGMoMC4yNXJlbSAtIDFweCk7XFxufVxcblxcbi5jYXJkLWltZy10b3Age1xcbiAgd2lkdGg6IDEwMCU7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBjYWxjKDAuMjVyZW0gLSAxcHgpO1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IGNhbGMoMC4yNXJlbSAtIDFweCk7XFxufVxcblxcbi5jYXJkLWltZy1ib3R0b20ge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogY2FsYygwLjI1cmVtIC0gMXB4KTtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IGNhbGMoMC4yNXJlbSAtIDFweCk7XFxufVxcblxcbi5jYXJkLWRlY2sge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbn1cXG5cXG4uY2FyZC1kZWNrIC5jYXJkIHtcXG4gIG1hcmdpbi1ib3R0b206IDE1cHg7XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLmNhcmQtZGVjayB7XFxuICAgIC1tcy1mbGV4LWZsb3c6IHJvdyB3cmFwO1xcbiAgICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0xNXB4O1xcbiAgICBtYXJnaW4tbGVmdDogLTE1cHg7XFxuICB9XFxuICAuY2FyZC1kZWNrIC5jYXJkIHtcXG4gICAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIC1tcy1mbGV4OiAxIDAgMCU7XFxuICAgIGZsZXg6IDEgMCAwJTtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIG1hcmdpbi1yaWdodDogMTVweDtcXG4gICAgbWFyZ2luLWJvdHRvbTogMDtcXG4gICAgbWFyZ2luLWxlZnQ6IDE1cHg7XFxuICB9XFxufVxcblxcbi5jYXJkLWdyb3VwIHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG59XFxuXFxuLmNhcmQtZ3JvdXAgPiAuY2FyZCB7XFxuICBtYXJnaW4tYm90dG9tOiAxNXB4O1xcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIHtcXG4gIC5jYXJkLWdyb3VwIHtcXG4gICAgLW1zLWZsZXgtZmxvdzogcm93IHdyYXA7XFxuICAgIGZsZXgtZmxvdzogcm93IHdyYXA7XFxuICB9XFxuICAuY2FyZC1ncm91cCA+IC5jYXJkIHtcXG4gICAgLW1zLWZsZXg6IDEgMCAwJTtcXG4gICAgZmxleDogMSAwIDAlO1xcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgfVxcbiAgLmNhcmQtZ3JvdXAgPiAuY2FyZCArIC5jYXJkIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDA7XFxuICAgIGJvcmRlci1sZWZ0OiAwO1xcbiAgfVxcbiAgLmNhcmQtZ3JvdXAgPiAuY2FyZDpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XFxuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xcbiAgfVxcbiAgLmNhcmQtZ3JvdXAgPiAuY2FyZDpub3QoOmxhc3QtY2hpbGQpIC5jYXJkLWltZy10b3AsXFxuICAuY2FyZC1ncm91cCA+IC5jYXJkOm5vdCg6bGFzdC1jaGlsZCkgLmNhcmQtaGVhZGVyIHtcXG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XFxuICB9XFxuICAuY2FyZC1ncm91cCA+IC5jYXJkOm5vdCg6bGFzdC1jaGlsZCkgLmNhcmQtaW1nLWJvdHRvbSxcXG4gIC5jYXJkLWdyb3VwID4gLmNhcmQ6bm90KDpsYXN0LWNoaWxkKSAuY2FyZC1mb290ZXIge1xcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcXG4gIH1cXG4gIC5jYXJkLWdyb3VwID4gLmNhcmQ6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xcbiAgfVxcbiAgLmNhcmQtZ3JvdXAgPiAuY2FyZDpub3QoOmZpcnN0LWNoaWxkKSAuY2FyZC1pbWctdG9wLFxcbiAgLmNhcmQtZ3JvdXAgPiAuY2FyZDpub3QoOmZpcnN0LWNoaWxkKSAuY2FyZC1oZWFkZXIge1xcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xcbiAgfVxcbiAgLmNhcmQtZ3JvdXAgPiAuY2FyZDpub3QoOmZpcnN0LWNoaWxkKSAuY2FyZC1pbWctYm90dG9tLFxcbiAgLmNhcmQtZ3JvdXAgPiAuY2FyZDpub3QoOmZpcnN0LWNoaWxkKSAuY2FyZC1mb290ZXIge1xcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xcbiAgfVxcbn1cXG5cXG4uY2FyZC1jb2x1bW5zIC5jYXJkIHtcXG4gIG1hcmdpbi1ib3R0b206IDAuNzVyZW07XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLmNhcmQtY29sdW1ucyB7XFxuICAgIC13ZWJraXQtY29sdW1uLWNvdW50OiAzO1xcbiAgICAtbW96LWNvbHVtbi1jb3VudDogMztcXG4gICAgY29sdW1uLWNvdW50OiAzO1xcbiAgICAtd2Via2l0LWNvbHVtbi1nYXA6IDEuMjVyZW07XFxuICAgIC1tb3otY29sdW1uLWdhcDogMS4yNXJlbTtcXG4gICAgY29sdW1uLWdhcDogMS4yNXJlbTtcXG4gICAgb3JwaGFuczogMTtcXG4gICAgd2lkb3dzOiAxO1xcbiAgfVxcbiAgLmNhcmQtY29sdW1ucyAuY2FyZCB7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgd2lkdGg6IDEwMCU7XFxuICB9XFxufVxcblxcbi5hY2NvcmRpb24gPiAuY2FyZCB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG5cXG4uYWNjb3JkaW9uID4gLmNhcmQ6bm90KDpmaXJzdC1vZi10eXBlKSAuY2FyZC1oZWFkZXI6Zmlyc3QtY2hpbGQge1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG59XFxuXFxuLmFjY29yZGlvbiA+IC5jYXJkOm5vdCg6Zmlyc3Qtb2YtdHlwZSk6bm90KDpsYXN0LW9mLXR5cGUpIHtcXG4gIGJvcmRlci1ib3R0b206IDA7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbn1cXG5cXG4uYWNjb3JkaW9uID4gLmNhcmQ6Zmlyc3Qtb2YtdHlwZSB7XFxuICBib3JkZXItYm90dG9tOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xcbn1cXG5cXG4uYWNjb3JkaW9uID4gLmNhcmQ6bGFzdC1vZi10eXBlIHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG59XFxuXFxuLmFjY29yZGlvbiA+IC5jYXJkIC5jYXJkLWhlYWRlciB7XFxuICBtYXJnaW4tYm90dG9tOiAtMXB4O1xcbn1cXG5cXG4uYnJlYWRjcnVtYiB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgcGFkZGluZzogMC43NXJlbSAxcmVtO1xcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLmJyZWFkY3J1bWItaXRlbSArIC5icmVhZGNydW1iLWl0ZW0ge1xcbiAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XFxufVxcblxcbi5icmVhZGNydW1iLWl0ZW0gKyAuYnJlYWRjcnVtYi1pdGVtOjpiZWZvcmUge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgcGFkZGluZy1yaWdodDogMC41cmVtO1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICBjb250ZW50OiBcXFwiL1xcXCI7XFxufVxcblxcbi5icmVhZGNydW1iLWl0ZW0gKyAuYnJlYWRjcnVtYi1pdGVtOmhvdmVyOjpiZWZvcmUge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxufVxcblxcbi5icmVhZGNydW1iLWl0ZW0gKyAuYnJlYWRjcnVtYi1pdGVtOmhvdmVyOjpiZWZvcmUge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbn1cXG5cXG4uYnJlYWRjcnVtYi1pdGVtLmFjdGl2ZSB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG59XFxuXFxuLnBhZ2luYXRpb24ge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgbGlzdC1zdHlsZTogbm9uZTtcXG4gIGJvcmRlci1yYWRpdXM6IDAuMjVyZW07XFxufVxcblxcbi5wYWdlLWxpbmsge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwYWRkaW5nOiAwLjVyZW0gMC43NXJlbTtcXG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xcbiAgbGluZS1oZWlnaHQ6IDEuMjU7XFxuICBjb2xvcjogIzAwN2JmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZGVlMmU2O1xcbn1cXG5cXG4ucGFnZS1saW5rOmhvdmVyIHtcXG4gIHotaW5kZXg6IDI7XFxuICBjb2xvcjogIzAwNTZiMztcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlOWVjZWY7XFxuICBib3JkZXItY29sb3I6ICNkZWUyZTY7XFxufVxcblxcbi5wYWdlLWxpbms6Zm9jdXMge1xcbiAgei1pbmRleDogMjtcXG4gIG91dGxpbmU6IDA7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgwLCAxMjMsIDI1NSwgMC4yNSk7XFxufVxcblxcbi5wYWdlLWl0ZW06Zmlyc3QtY2hpbGQgLnBhZ2UtbGluayB7XFxuICBtYXJnaW4tbGVmdDogMDtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4ucGFnZS1pdGVtOmxhc3QtY2hpbGQgLnBhZ2UtbGluayB7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4ucGFnZS1pdGVtLmFjdGl2ZSAucGFnZS1saW5rIHtcXG4gIHotaW5kZXg6IDE7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDdiZmY7XFxuICBib3JkZXItY29sb3I6ICMwMDdiZmY7XFxufVxcblxcbi5wYWdlLWl0ZW0uZGlzYWJsZWQgLnBhZ2UtbGluayB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgY3Vyc29yOiBhdXRvO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlci1jb2xvcjogI2RlZTJlNjtcXG59XFxuXFxuLnBhZ2luYXRpb24tbGcgLnBhZ2UtbGluayB7XFxuICBwYWRkaW5nOiAwLjc1cmVtIDEuNXJlbTtcXG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxufVxcblxcbi5wYWdpbmF0aW9uLWxnIC5wYWdlLWl0ZW06Zmlyc3QtY2hpbGQgLnBhZ2UtbGluayB7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwLjNyZW07XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwLjNyZW07XFxufVxcblxcbi5wYWdpbmF0aW9uLWxnIC5wYWdlLWl0ZW06bGFzdC1jaGlsZCAucGFnZS1saW5rIHtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjNyZW07XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4zcmVtO1xcbn1cXG5cXG4ucGFnaW5hdGlvbi1zbSAucGFnZS1saW5rIHtcXG4gIHBhZGRpbmc6IDAuMjVyZW0gMC41cmVtO1xcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxufVxcblxcbi5wYWdpbmF0aW9uLXNtIC5wYWdlLWl0ZW06Zmlyc3QtY2hpbGQgLnBhZ2UtbGluayB7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwLjJyZW07XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwLjJyZW07XFxufVxcblxcbi5wYWdpbmF0aW9uLXNtIC5wYWdlLWl0ZW06bGFzdC1jaGlsZCAucGFnZS1saW5rIHtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjJyZW07XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4ycmVtO1xcbn1cXG5cXG4uYmFkZ2Uge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgcGFkZGluZzogMC4yNWVtIDAuNGVtO1xcbiAgZm9udC1zaXplOiA3NSU7XFxuICBmb250LXdlaWdodDogNzAwO1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG4gIHRyYW5zaXRpb246IGNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJveC1zaGFkb3cgMC4xNXMgZWFzZS1pbi1vdXQ7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAuYmFkZ2Uge1xcbiAgICB0cmFuc2l0aW9uOiBub25lO1xcbiAgfVxcbn1cXG5cXG5hLmJhZGdlOmhvdmVyLCBhLmJhZGdlOmZvY3VzIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuXFxuLmJhZGdlOmVtcHR5IHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi5idG4gLmJhZGdlIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHRvcDogLTFweDtcXG59XFxuXFxuLmJhZGdlLXBpbGwge1xcbiAgcGFkZGluZy1yaWdodDogMC42ZW07XFxuICBwYWRkaW5nLWxlZnQ6IDAuNmVtO1xcbiAgYm9yZGVyLXJhZGl1czogMTByZW07XFxufVxcblxcbi5iYWRnZS1wcmltYXJ5IHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjtcXG59XFxuXFxuYS5iYWRnZS1wcmltYXJ5OmhvdmVyLCBhLmJhZGdlLXByaW1hcnk6Zm9jdXMge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA2MmNjO1xcbn1cXG5cXG5hLmJhZGdlLXByaW1hcnk6Zm9jdXMsIGEuYmFkZ2UtcHJpbWFyeS5mb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMCwgMTIzLCAyNTUsIDAuNSk7XFxufVxcblxcbi5iYWRnZS1zZWNvbmRhcnkge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM3NTdkO1xcbn1cXG5cXG5hLmJhZGdlLXNlY29uZGFyeTpob3ZlciwgYS5iYWRnZS1zZWNvbmRhcnk6Zm9jdXMge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTQ1YjYyO1xcbn1cXG5cXG5hLmJhZGdlLXNlY29uZGFyeTpmb2N1cywgYS5iYWRnZS1zZWNvbmRhcnkuZm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDEwOCwgMTE3LCAxMjUsIDAuNSk7XFxufVxcblxcbi5iYWRnZS1zdWNjZXNzIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI4YTc0NTtcXG59XFxuXFxuYS5iYWRnZS1zdWNjZXNzOmhvdmVyLCBhLmJhZGdlLXN1Y2Nlc3M6Zm9jdXMge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWU3ZTM0O1xcbn1cXG5cXG5hLmJhZGdlLXN1Y2Nlc3M6Zm9jdXMsIGEuYmFkZ2Utc3VjY2Vzcy5mb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNDAsIDE2NywgNjksIDAuNSk7XFxufVxcblxcbi5iYWRnZS1pbmZvIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE3YTJiODtcXG59XFxuXFxuYS5iYWRnZS1pbmZvOmhvdmVyLCBhLmJhZGdlLWluZm86Zm9jdXMge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTE3YThiO1xcbn1cXG5cXG5hLmJhZGdlLWluZm86Zm9jdXMsIGEuYmFkZ2UtaW5mby5mb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjMsIDE2MiwgMTg0LCAwLjUpO1xcbn1cXG5cXG4uYmFkZ2Utd2FybmluZyB7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmMxMDc7XFxufVxcblxcbmEuYmFkZ2Utd2FybmluZzpob3ZlciwgYS5iYWRnZS13YXJuaW5nOmZvY3VzIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QzOWUwMDtcXG59XFxuXFxuYS5iYWRnZS13YXJuaW5nOmZvY3VzLCBhLmJhZGdlLXdhcm5pbmcuZm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDI1NSwgMTkzLCA3LCAwLjUpO1xcbn1cXG5cXG4uYmFkZ2UtZGFuZ2VyIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RjMzU0NTtcXG59XFxuXFxuYS5iYWRnZS1kYW5nZXI6aG92ZXIsIGEuYmFkZ2UtZGFuZ2VyOmZvY3VzIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2JkMjEzMDtcXG59XFxuXFxuYS5iYWRnZS1kYW5nZXI6Zm9jdXMsIGEuYmFkZ2UtZGFuZ2VyLmZvY3VzIHtcXG4gIG91dGxpbmU6IDA7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgyMjAsIDUzLCA2OSwgMC41KTtcXG59XFxuXFxuLmJhZGdlLWxpZ2h0IHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcXG59XFxuXFxuYS5iYWRnZS1saWdodDpob3ZlciwgYS5iYWRnZS1saWdodDpmb2N1cyB7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkYWUwZTU7XFxufVxcblxcbmEuYmFkZ2UtbGlnaHQ6Zm9jdXMsIGEuYmFkZ2UtbGlnaHQuZm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDI0OCwgMjQ5LCAyNTAsIDAuNSk7XFxufVxcblxcbi5iYWRnZS1kYXJrIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM0M2E0MDtcXG59XFxuXFxuYS5iYWRnZS1kYXJrOmhvdmVyLCBhLmJhZGdlLWRhcms6Zm9jdXMge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWQyMTI0O1xcbn1cXG5cXG5hLmJhZGdlLWRhcms6Zm9jdXMsIGEuYmFkZ2UtZGFyay5mb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNTIsIDU4LCA2NCwgMC41KTtcXG59XFxuXFxuLmp1bWJvdHJvbiB7XFxuICBwYWRkaW5nOiAycmVtIDFyZW07XFxuICBtYXJnaW4tYm90dG9tOiAycmVtO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U5ZWNlZjtcXG4gIGJvcmRlci1yYWRpdXM6IDAuM3JlbTtcXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDU3NnB4KSB7XFxuICAuanVtYm90cm9uIHtcXG4gICAgcGFkZGluZzogNHJlbSAycmVtO1xcbiAgfVxcbn1cXG5cXG4uanVtYm90cm9uLWZsdWlkIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDA7XFxuICBwYWRkaW5nLWxlZnQ6IDA7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbn1cXG5cXG4uYWxlcnQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgcGFkZGluZzogMC43NXJlbSAxLjI1cmVtO1xcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLmFsZXJ0LWhlYWRpbmcge1xcbiAgY29sb3I6IGluaGVyaXQ7XFxufVxcblxcbi5hbGVydC1saW5rIHtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxufVxcblxcbi5hbGVydC1kaXNtaXNzaWJsZSB7XFxuICBwYWRkaW5nLXJpZ2h0OiA0cmVtO1xcbn1cXG5cXG4uYWxlcnQtZGlzbWlzc2libGUgLmNsb3NlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgcGFkZGluZzogMC43NXJlbSAxLjI1cmVtO1xcbiAgY29sb3I6IGluaGVyaXQ7XFxufVxcblxcbi5hbGVydC1wcmltYXJ5IHtcXG4gIGNvbG9yOiAjMDA0MDg1O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NjZTVmZjtcXG4gIGJvcmRlci1jb2xvcjogI2I4ZGFmZjtcXG59XFxuXFxuLmFsZXJ0LXByaW1hcnkgaHIge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogIzlmY2RmZjtcXG59XFxuXFxuLmFsZXJ0LXByaW1hcnkgLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICMwMDI3NTI7XFxufVxcblxcbi5hbGVydC1zZWNvbmRhcnkge1xcbiAgY29sb3I6ICMzODNkNDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTJlM2U1O1xcbiAgYm9yZGVyLWNvbG9yOiAjZDZkOGRiO1xcbn1cXG5cXG4uYWxlcnQtc2Vjb25kYXJ5IGhyIHtcXG4gIGJvcmRlci10b3AtY29sb3I6ICNjOGNiY2Y7XFxufVxcblxcbi5hbGVydC1zZWNvbmRhcnkgLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICMyMDIzMjY7XFxufVxcblxcbi5hbGVydC1zdWNjZXNzIHtcXG4gIGNvbG9yOiAjMTU1NzI0O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q0ZWRkYTtcXG4gIGJvcmRlci1jb2xvcjogI2MzZTZjYjtcXG59XFxuXFxuLmFsZXJ0LXN1Y2Nlc3MgaHIge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2IxZGZiYjtcXG59XFxuXFxuLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICMwYjJlMTM7XFxufVxcblxcbi5hbGVydC1pbmZvIHtcXG4gIGNvbG9yOiAjMGM1NDYwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QxZWNmMTtcXG4gIGJvcmRlci1jb2xvcjogI2JlZTVlYjtcXG59XFxuXFxuLmFsZXJ0LWluZm8gaHIge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2FiZGRlNTtcXG59XFxuXFxuLmFsZXJ0LWluZm8gLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICMwNjJjMzM7XFxufVxcblxcbi5hbGVydC13YXJuaW5nIHtcXG4gIGNvbG9yOiAjODU2NDA0O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjNjZDtcXG4gIGJvcmRlci1jb2xvcjogI2ZmZWViYTtcXG59XFxuXFxuLmFsZXJ0LXdhcm5pbmcgaHIge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2ZmZThhMTtcXG59XFxuXFxuLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICM1MzNmMDM7XFxufVxcblxcbi5hbGVydC1kYW5nZXIge1xcbiAgY29sb3I6ICM3MjFjMjQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhkN2RhO1xcbiAgYm9yZGVyLWNvbG9yOiAjZjVjNmNiO1xcbn1cXG5cXG4uYWxlcnQtZGFuZ2VyIGhyIHtcXG4gIGJvcmRlci10b3AtY29sb3I6ICNmMWIwYjc7XFxufVxcblxcbi5hbGVydC1kYW5nZXIgLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICM0OTEyMTc7XFxufVxcblxcbi5hbGVydC1saWdodCB7XFxuICBjb2xvcjogIzgxODE4MjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZWZlZmU7XFxuICBib3JkZXItY29sb3I6ICNmZGZkZmU7XFxufVxcblxcbi5hbGVydC1saWdodCBociB7XFxuICBib3JkZXItdG9wLWNvbG9yOiAjZWNlY2Y2O1xcbn1cXG5cXG4uYWxlcnQtbGlnaHQgLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICM2ODY4Njg7XFxufVxcblxcbi5hbGVydC1kYXJrIHtcXG4gIGNvbG9yOiAjMWIxZTIxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q2ZDhkOTtcXG4gIGJvcmRlci1jb2xvcjogI2M2YzhjYTtcXG59XFxuXFxuLmFsZXJ0LWRhcmsgaHIge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2I5YmJiZTtcXG59XFxuXFxuLmFsZXJ0LWRhcmsgLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICMwNDA1MDU7XFxufVxcblxcbkAtd2Via2l0LWtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlcyB7XFxuICBmcm9tIHtcXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMXJlbSAwO1xcbiAgfVxcbiAgdG8ge1xcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7XFxuICB9XFxufVxcblxcbkBrZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXMge1xcbiAgZnJvbSB7XFxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDFyZW0gMDtcXG4gIH1cXG4gIHRvIHtcXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwO1xcbiAgfVxcbn1cXG5cXG4ucHJvZ3Jlc3Mge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgaGVpZ2h0OiAxcmVtO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGZvbnQtc2l6ZTogMC43NXJlbTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlOWVjZWY7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4ucHJvZ3Jlc3MtYmFyIHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgY29sb3I6ICNmZmY7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjtcXG4gIHRyYW5zaXRpb246IHdpZHRoIDAuNnMgZWFzZTtcXG59XFxuXFxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcXG4gIC5wcm9ncmVzcy1iYXIge1xcbiAgICB0cmFuc2l0aW9uOiBub25lO1xcbiAgfVxcbn1cXG5cXG4ucHJvZ3Jlc3MtYmFyLXN0cmlwZWQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XFxuICBiYWNrZ3JvdW5kLXNpemU6IDFyZW0gMXJlbTtcXG59XFxuXFxuLnByb2dyZXNzLWJhci1hbmltYXRlZCB7XFxuICAtd2Via2l0LWFuaW1hdGlvbjogcHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMXMgbGluZWFyIGluZmluaXRlO1xcbiAgYW5pbWF0aW9uOiBwcm9ncmVzcy1iYXItc3RyaXBlcyAxcyBsaW5lYXIgaW5maW5pdGU7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAucHJvZ3Jlc3MtYmFyLWFuaW1hdGVkIHtcXG4gICAgLXdlYmtpdC1hbmltYXRpb246IG5vbmU7XFxuICAgIGFuaW1hdGlvbjogbm9uZTtcXG4gIH1cXG59XFxuXFxuLm1lZGlhIHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWFsaWduOiBzdGFydDtcXG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbn1cXG5cXG4ubWVkaWEtYm9keSB7XFxuICAtbXMtZmxleDogMTtcXG4gIGZsZXg6IDE7XFxufVxcblxcbi5saXN0LWdyb3VwIHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIHBhZGRpbmctbGVmdDogMDtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgY29sb3I6ICM0OTUwNTc7XFxuICB0ZXh0LWFsaWduOiBpbmhlcml0O1xcbn1cXG5cXG4ubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpob3ZlciwgLmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb246Zm9jdXMge1xcbiAgei1pbmRleDogMTtcXG4gIGNvbG9yOiAjNDk1MDU3O1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb246YWN0aXZlIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U5ZWNlZjtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaXRlbSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHBhZGRpbmc6IDAuNzVyZW0gMS4yNXJlbTtcXG4gIG1hcmdpbi1ib3R0b206IC0xcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEyNSk7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMC4yNXJlbTtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4ubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGQge1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwLjI1cmVtO1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZCwgLmxpc3QtZ3JvdXAtaXRlbTpkaXNhYmxlZCB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUge1xcbiAgei1pbmRleDogMjtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjtcXG4gIGJvcmRlci1jb2xvcjogIzAwN2JmZjtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbCB7XFxuICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxufVxcblxcbi5saXN0LWdyb3VwLWhvcml6b250YWwgLmxpc3QtZ3JvdXAtaXRlbSB7XFxuICBtYXJnaW4tcmlnaHQ6IC0xcHg7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbn1cXG5cXG4ubGlzdC1ncm91cC1ob3Jpem9udGFsIC5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMC4yNXJlbTtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbCAubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGQge1xcbiAgbWFyZ2luLXJpZ2h0OiAwO1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDAuMjVyZW07XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1zbSB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgfVxcbiAgLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1zbSAubGlzdC1ncm91cC1pdGVtIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtMXB4O1xcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgfVxcbiAgLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1zbSAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHtcXG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMC4yNXJlbTtcXG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMC4yNXJlbTtcXG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XFxuICB9XFxuICAubGlzdC1ncm91cC1ob3Jpem9udGFsLXNtIC5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZCB7XFxuICAgIG1hcmdpbi1yaWdodDogMDtcXG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDAuMjVyZW07XFxuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwLjI1cmVtO1xcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gIC5saXN0LWdyb3VwLWhvcml6b250YWwtbWQge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIH1cXG4gIC5saXN0LWdyb3VwLWhvcml6b250YWwtbWQgLmxpc3QtZ3JvdXAtaXRlbSB7XFxuICAgIG1hcmdpbi1yaWdodDogLTFweDtcXG4gICAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIH1cXG4gIC5saXN0LWdyb3VwLWhvcml6b250YWwtbWQgLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZCB7XFxuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xcbiAgfVxcbiAgLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1tZCAubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGQge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XFxuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjI1cmVtO1xcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XFxuICAubGlzdC1ncm91cC1ob3Jpem9udGFsLWxnIHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICB9XFxuICAubGlzdC1ncm91cC1ob3Jpem9udGFsLWxnIC5saXN0LWdyb3VwLWl0ZW0ge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0xcHg7XFxuICAgIG1hcmdpbi1ib3R0b206IDA7XFxuICB9XFxuICAubGlzdC1ncm91cC1ob3Jpem9udGFsLWxnIC5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwLjI1cmVtO1xcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwLjI1cmVtO1xcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG4gIH1cXG4gIC5saXN0LWdyb3VwLWhvcml6b250YWwtbGcgLmxpc3QtZ3JvdXAtaXRlbTpsYXN0LWNoaWxkIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG4gICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDAuMjVyZW07XFxuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC5saXN0LWdyb3VwLWhvcml6b250YWwteGwge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIH1cXG4gIC5saXN0LWdyb3VwLWhvcml6b250YWwteGwgLmxpc3QtZ3JvdXAtaXRlbSB7XFxuICAgIG1hcmdpbi1yaWdodDogLTFweDtcXG4gICAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIH1cXG4gIC5saXN0LWdyb3VwLWhvcml6b250YWwteGwgLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZCB7XFxuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xcbiAgfVxcbiAgLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC14bCAubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGQge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XFxuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjI1cmVtO1xcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcXG4gIH1cXG59XFxuXFxuLmxpc3QtZ3JvdXAtZmx1c2ggLmxpc3QtZ3JvdXAtaXRlbSB7XFxuICBib3JkZXItcmlnaHQ6IDA7XFxuICBib3JkZXItbGVmdDogMDtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxufVxcblxcbi5saXN0LWdyb3VwLWZsdXNoIC5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZCB7XFxuICBtYXJnaW4tYm90dG9tOiAtMXB4O1xcbn1cXG5cXG4ubGlzdC1ncm91cC1mbHVzaDpmaXJzdC1jaGlsZCAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHtcXG4gIGJvcmRlci10b3A6IDA7XFxufVxcblxcbi5saXN0LWdyb3VwLWZsdXNoOmxhc3QtY2hpbGQgLmxpc3QtZ3JvdXAtaXRlbTpsYXN0LWNoaWxkIHtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxuICBib3JkZXItYm90dG9tOiAwO1xcbn1cXG5cXG4ubGlzdC1ncm91cC1pdGVtLXByaW1hcnkge1xcbiAgY29sb3I6ICMwMDQwODU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjhkYWZmO1xcbn1cXG5cXG4ubGlzdC1ncm91cC1pdGVtLXByaW1hcnkubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpob3ZlciwgLmxpc3QtZ3JvdXAtaXRlbS1wcmltYXJ5Lmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb246Zm9jdXMge1xcbiAgY29sb3I6ICMwMDQwODU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWZjZGZmO1xcbn1cXG5cXG4ubGlzdC1ncm91cC1pdGVtLXByaW1hcnkubGlzdC1ncm91cC1pdGVtLWFjdGlvbi5hY3RpdmUge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA0MDg1O1xcbiAgYm9yZGVyLWNvbG9yOiAjMDA0MDg1O1xcbn1cXG5cXG4ubGlzdC1ncm91cC1pdGVtLXNlY29uZGFyeSB7XFxuICBjb2xvcjogIzM4M2Q0MTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkNmQ4ZGI7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tc2Vjb25kYXJ5Lmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb246aG92ZXIsIC5saXN0LWdyb3VwLWl0ZW0tc2Vjb25kYXJ5Lmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb246Zm9jdXMge1xcbiAgY29sb3I6ICMzODNkNDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzhjYmNmO1xcbn1cXG5cXG4ubGlzdC1ncm91cC1pdGVtLXNlY29uZGFyeS5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uLmFjdGl2ZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzODNkNDE7XFxuICBib3JkZXItY29sb3I6ICMzODNkNDE7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2VzcyB7XFxuICBjb2xvcjogIzE1NTcyNDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjM2U2Y2I7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmhvdmVyLCAubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpmb2N1cyB7XFxuICBjb2xvcjogIzE1NTcyNDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiMWRmYmI7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uLmFjdGl2ZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxNTU3MjQ7XFxuICBib3JkZXItY29sb3I6ICMxNTU3MjQ7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0taW5mbyB7XFxuICBjb2xvcjogIzBjNTQ2MDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiZWU1ZWI7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0taW5mby5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmhvdmVyLCAubGlzdC1ncm91cC1pdGVtLWluZm8ubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpmb2N1cyB7XFxuICBjb2xvcjogIzBjNTQ2MDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhYmRkZTU7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0taW5mby5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uLmFjdGl2ZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwYzU0NjA7XFxuICBib3JkZXItY29sb3I6ICMwYzU0NjA7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZyB7XFxuICBjb2xvcjogIzg1NjQwNDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmVlYmE7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZy5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmhvdmVyLCAubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpmb2N1cyB7XFxuICBjb2xvcjogIzg1NjQwNDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmU4YTE7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZy5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uLmFjdGl2ZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4NTY0MDQ7XFxuICBib3JkZXItY29sb3I6ICM4NTY0MDQ7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyIHtcXG4gIGNvbG9yOiAjNzIxYzI0O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1YzZjYjtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpob3ZlciwgLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpmb2N1cyB7XFxuICBjb2xvcjogIzcyMWMyNDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmMWIwYjc7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyLmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb24uYWN0aXZlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzcyMWMyNDtcXG4gIGJvcmRlci1jb2xvcjogIzcyMWMyNDtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaXRlbS1saWdodCB7XFxuICBjb2xvcjogIzgxODE4MjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZGZkZmU7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tbGlnaHQubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpob3ZlciwgLmxpc3QtZ3JvdXAtaXRlbS1saWdodC5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmZvY3VzIHtcXG4gIGNvbG9yOiAjODE4MTgyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNmNjtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaXRlbS1saWdodC5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uLmFjdGl2ZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MTgxODI7XFxuICBib3JkZXItY29sb3I6ICM4MTgxODI7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tZGFyayB7XFxuICBjb2xvcjogIzFiMWUyMTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjNmM4Y2E7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tZGFyay5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmhvdmVyLCAubGlzdC1ncm91cC1pdGVtLWRhcmsubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpmb2N1cyB7XFxuICBjb2xvcjogIzFiMWUyMTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiOWJiYmU7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tZGFyay5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uLmFjdGl2ZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxYjFlMjE7XFxuICBib3JkZXItY29sb3I6ICMxYjFlMjE7XFxufVxcblxcbi5jbG9zZSB7XFxuICBmbG9hdDogcmlnaHQ7XFxuICBmb250LXNpemU6IDEuNXJlbTtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxuICBsaW5lLWhlaWdodDogMTtcXG4gIGNvbG9yOiAjMDAwO1xcbiAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI2ZmZjtcXG4gIG9wYWNpdHk6IC41O1xcbn1cXG5cXG4uY2xvc2U6aG92ZXIge1xcbiAgY29sb3I6ICMwMDA7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcblxcbi5jbG9zZTpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTpob3ZlciwgLmNsb3NlOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmZvY3VzIHtcXG4gIG9wYWNpdHk6IC43NTtcXG59XFxuXFxuYnV0dG9uLmNsb3NlIHtcXG4gIHBhZGRpbmc6IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogMDtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG4gIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcXG4gIGFwcGVhcmFuY2U6IG5vbmU7XFxufVxcblxcbmEuY2xvc2UuZGlzYWJsZWQge1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi50b2FzdCB7XFxuICBtYXgtd2lkdGg6IDM1MHB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODUpO1xcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xKTtcXG4gIGJveC1zaGFkb3c6IDAgMC4yNXJlbSAwLjc1cmVtIHJnYmEoMCwgMCwgMCwgMC4xKTtcXG4gIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpO1xcbiAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpO1xcbiAgb3BhY2l0eTogMDtcXG4gIGJvcmRlci1yYWRpdXM6IDAuMjVyZW07XFxufVxcblxcbi50b2FzdDpub3QoOmxhc3QtY2hpbGQpIHtcXG4gIG1hcmdpbi1ib3R0b206IDAuNzVyZW07XFxufVxcblxcbi50b2FzdC5zaG93aW5nIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi50b2FzdC5zaG93IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLnRvYXN0LmhpZGUge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLnRvYXN0LWhlYWRlciB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIHBhZGRpbmc6IDAuMjVyZW0gMC43NXJlbTtcXG4gIGNvbG9yOiAjNmM3NTdkO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg1KTtcXG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjA1KTtcXG59XFxuXFxuLnRvYXN0LWJvZHkge1xcbiAgcGFkZGluZzogMC43NXJlbTtcXG59XFxuXFxuLm1vZGFsLW9wZW4ge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuXFxuLm1vZGFsLW9wZW4gLm1vZGFsIHtcXG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxufVxcblxcbi5tb2RhbCB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgei1pbmRleDogMTA1MDtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBvdXRsaW5lOiAwO1xcbn1cXG5cXG4ubW9kYWwtZGlhbG9nIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHdpZHRoOiBhdXRvO1xcbiAgbWFyZ2luOiAwLjVyZW07XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuLm1vZGFsLmZhZGUgLm1vZGFsLWRpYWxvZyB7XFxuICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjNzIGVhc2Utb3V0O1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgZWFzZS1vdXQ7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcyBlYXNlLW91dCwgLXdlYmtpdC10cmFuc2Zvcm0gMC4zcyBlYXNlLW91dDtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTUwcHgpO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTUwcHgpO1xcbn1cXG5cXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xcbiAgLm1vZGFsLmZhZGUgLm1vZGFsLWRpYWxvZyB7XFxuICAgIHRyYW5zaXRpb246IG5vbmU7XFxuICB9XFxufVxcblxcbi5tb2RhbC5zaG93IC5tb2RhbC1kaWFsb2cge1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IG5vbmU7XFxuICB0cmFuc2Zvcm06IG5vbmU7XFxufVxcblxcbi5tb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZSB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBtYXgtaGVpZ2h0OiBjYWxjKDEwMCUgLSAxcmVtKTtcXG59XFxuXFxuLm1vZGFsLWRpYWxvZy1zY3JvbGxhYmxlIC5tb2RhbC1jb250ZW50IHtcXG4gIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAxcmVtKTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5tb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZSAubW9kYWwtaGVhZGVyLFxcbi5tb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZSAubW9kYWwtZm9vdGVyIHtcXG4gIC1tcy1mbGV4LW5lZ2F0aXZlOiAwO1xcbiAgZmxleC1zaHJpbms6IDA7XFxufVxcblxcbi5tb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZSAubW9kYWwtYm9keSB7XFxuICBvdmVyZmxvdy15OiBhdXRvO1xcbn1cXG5cXG4ubW9kYWwtZGlhbG9nLWNlbnRlcmVkIHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgbWluLWhlaWdodDogY2FsYygxMDAlIC0gMXJlbSk7XFxufVxcblxcbi5tb2RhbC1kaWFsb2ctY2VudGVyZWQ6OmJlZm9yZSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGhlaWdodDogY2FsYygxMDB2aCAtIDFyZW0pO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxufVxcblxcbi5tb2RhbC1kaWFsb2ctY2VudGVyZWQubW9kYWwtZGlhbG9nLXNjcm9sbGFibGUge1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcblxcbi5tb2RhbC1kaWFsb2ctY2VudGVyZWQubW9kYWwtZGlhbG9nLXNjcm9sbGFibGUgLm1vZGFsLWNvbnRlbnQge1xcbiAgbWF4LWhlaWdodDogbm9uZTtcXG59XFxuXFxuLm1vZGFsLWRpYWxvZy1jZW50ZXJlZC5tb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZTo6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IG5vbmU7XFxufVxcblxcbi5tb2RhbC1jb250ZW50IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgcG9pbnRlci1ldmVudHM6IGF1dG87XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4yKTtcXG4gIGJvcmRlci1yYWRpdXM6IDAuM3JlbTtcXG4gIG91dGxpbmU6IDA7XFxufVxcblxcbi5tb2RhbC1iYWNrZHJvcCB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgei1pbmRleDogMTA0MDtcXG4gIHdpZHRoOiAxMDB2dztcXG4gIGhlaWdodDogMTAwdmg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xcbn1cXG5cXG4ubW9kYWwtYmFja2Ryb3AuZmFkZSB7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG5cXG4ubW9kYWwtYmFja2Ryb3Auc2hvdyB7XFxuICBvcGFjaXR5OiAwLjU7XFxufVxcblxcbi5tb2RhbC1oZWFkZXIge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0O1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxuICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgcGFkZGluZzogMXJlbSAxcmVtO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZWUyZTY7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwLjNyZW07XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC4zcmVtO1xcbn1cXG5cXG4ubW9kYWwtaGVhZGVyIC5jbG9zZSB7XFxuICBwYWRkaW5nOiAxcmVtIDFyZW07XFxuICBtYXJnaW46IC0xcmVtIC0xcmVtIC0xcmVtIGF1dG87XFxufVxcblxcbi5tb2RhbC10aXRsZSB7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG59XFxuXFxuLm1vZGFsLWJvZHkge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgLW1zLWZsZXg6IDEgMSBhdXRvO1xcbiAgZmxleDogMSAxIGF1dG87XFxuICBwYWRkaW5nOiAxcmVtO1xcbn1cXG5cXG4ubW9kYWwtZm9vdGVyIHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgLW1zLWZsZXgtcGFjazogZW5kO1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG4gIHBhZGRpbmc6IDFyZW07XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RlZTJlNjtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwLjNyZW07XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwLjNyZW07XFxufVxcblxcbi5tb2RhbC1mb290ZXIgPiA6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgbWFyZ2luLWxlZnQ6IC4yNXJlbTtcXG59XFxuXFxuLm1vZGFsLWZvb3RlciA+IDpub3QoOmxhc3QtY2hpbGQpIHtcXG4gIG1hcmdpbi1yaWdodDogLjI1cmVtO1xcbn1cXG5cXG4ubW9kYWwtc2Nyb2xsYmFyLW1lYXN1cmUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAtOTk5OXB4O1xcbiAgd2lkdGg6IDUwcHg7XFxuICBoZWlnaHQ6IDUwcHg7XFxuICBvdmVyZmxvdzogc2Nyb2xsO1xcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIHtcXG4gIC5tb2RhbC1kaWFsb2cge1xcbiAgICBtYXgtd2lkdGg6IDUwMHB4O1xcbiAgICBtYXJnaW46IDEuNzVyZW0gYXV0bztcXG4gIH1cXG4gIC5tb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZSB7XFxuICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIDMuNXJlbSk7XFxuICB9XFxuICAubW9kYWwtZGlhbG9nLXNjcm9sbGFibGUgLm1vZGFsLWNvbnRlbnQge1xcbiAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMy41cmVtKTtcXG4gIH1cXG4gIC5tb2RhbC1kaWFsb2ctY2VudGVyZWQge1xcbiAgICBtaW4taGVpZ2h0OiBjYWxjKDEwMCUgLSAzLjVyZW0pO1xcbiAgfVxcbiAgLm1vZGFsLWRpYWxvZy1jZW50ZXJlZDo6YmVmb3JlIHtcXG4gICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMy41cmVtKTtcXG4gIH1cXG4gIC5tb2RhbC1zbSB7XFxuICAgIG1heC13aWR0aDogMzAwcHg7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xcbiAgLm1vZGFsLWxnLFxcbiAgLm1vZGFsLXhsIHtcXG4gICAgbWF4LXdpZHRoOiA4MDBweDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xcbiAgLm1vZGFsLXhsIHtcXG4gICAgbWF4LXdpZHRoOiAxMTQwcHg7XFxuICB9XFxufVxcblxcbi50b29sdGlwIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHotaW5kZXg6IDEwNzA7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFxcXCJTZWdvZSBVSVxcXCIsIFJvYm90bywgXFxcIkhlbHZldGljYSBOZXVlXFxcIiwgQXJpYWwsIFxcXCJOb3RvIFNhbnNcXFwiLCBzYW5zLXNlcmlmLCBcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLCBcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLCBcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIiwgXFxcIk5vdG8gQ29sb3IgRW1vamlcXFwiO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgdGV4dC1hbGlnbjogc3RhcnQ7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICB0ZXh0LXNoYWRvdzogbm9uZTtcXG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xcbiAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcXG4gIHdvcmQtYnJlYWs6IG5vcm1hbDtcXG4gIHdvcmQtc3BhY2luZzogbm9ybWFsO1xcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcXG4gIGxpbmUtYnJlYWs6IGF1dG87XFxuICBmb250LXNpemU6IDAuODc1cmVtO1xcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xcbiAgb3BhY2l0eTogMDtcXG59XFxuXFxuLnRvb2x0aXAuc2hvdyB7XFxuICBvcGFjaXR5OiAwLjk7XFxufVxcblxcbi50b29sdGlwIC5hcnJvdyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAwLjhyZW07XFxuICBoZWlnaHQ6IDAuNHJlbTtcXG59XFxuXFxuLnRvb2x0aXAgLmFycm93OjpiZWZvcmUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcXG59XFxuXFxuLmJzLXRvb2x0aXAtdG9wLCAuYnMtdG9vbHRpcC1hdXRvW3gtcGxhY2VtZW50Xj1cXFwidG9wXFxcIl0ge1xcbiAgcGFkZGluZzogMC40cmVtIDA7XFxufVxcblxcbi5icy10b29sdGlwLXRvcCAuYXJyb3csIC5icy10b29sdGlwLWF1dG9beC1wbGFjZW1lbnRePVxcXCJ0b3BcXFwiXSAuYXJyb3cge1xcbiAgYm90dG9tOiAwO1xcbn1cXG5cXG4uYnMtdG9vbHRpcC10b3AgLmFycm93OjpiZWZvcmUsIC5icy10b29sdGlwLWF1dG9beC1wbGFjZW1lbnRePVxcXCJ0b3BcXFwiXSAuYXJyb3c6OmJlZm9yZSB7XFxuICB0b3A6IDA7XFxuICBib3JkZXItd2lkdGg6IDAuNHJlbSAwLjRyZW0gMDtcXG4gIGJvcmRlci10b3AtY29sb3I6ICMwMDA7XFxufVxcblxcbi5icy10b29sdGlwLXJpZ2h0LCAuYnMtdG9vbHRpcC1hdXRvW3gtcGxhY2VtZW50Xj1cXFwicmlnaHRcXFwiXSB7XFxuICBwYWRkaW5nOiAwIDAuNHJlbTtcXG59XFxuXFxuLmJzLXRvb2x0aXAtcmlnaHQgLmFycm93LCAuYnMtdG9vbHRpcC1hdXRvW3gtcGxhY2VtZW50Xj1cXFwicmlnaHRcXFwiXSAuYXJyb3cge1xcbiAgbGVmdDogMDtcXG4gIHdpZHRoOiAwLjRyZW07XFxuICBoZWlnaHQ6IDAuOHJlbTtcXG59XFxuXFxuLmJzLXRvb2x0aXAtcmlnaHQgLmFycm93OjpiZWZvcmUsIC5icy10b29sdGlwLWF1dG9beC1wbGFjZW1lbnRePVxcXCJyaWdodFxcXCJdIC5hcnJvdzo6YmVmb3JlIHtcXG4gIHJpZ2h0OiAwO1xcbiAgYm9yZGVyLXdpZHRoOiAwLjRyZW0gMC40cmVtIDAuNHJlbSAwO1xcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjMDAwO1xcbn1cXG5cXG4uYnMtdG9vbHRpcC1ib3R0b20sIC5icy10b29sdGlwLWF1dG9beC1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSB7XFxuICBwYWRkaW5nOiAwLjRyZW0gMDtcXG59XFxuXFxuLmJzLXRvb2x0aXAtYm90dG9tIC5hcnJvdywgLmJzLXRvb2x0aXAtYXV0b1t4LXBsYWNlbWVudF49XFxcImJvdHRvbVxcXCJdIC5hcnJvdyB7XFxuICB0b3A6IDA7XFxufVxcblxcbi5icy10b29sdGlwLWJvdHRvbSAuYXJyb3c6OmJlZm9yZSwgLmJzLXRvb2x0aXAtYXV0b1t4LXBsYWNlbWVudF49XFxcImJvdHRvbVxcXCJdIC5hcnJvdzo6YmVmb3JlIHtcXG4gIGJvdHRvbTogMDtcXG4gIGJvcmRlci13aWR0aDogMCAwLjRyZW0gMC40cmVtO1xcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzAwMDtcXG59XFxuXFxuLmJzLXRvb2x0aXAtbGVmdCwgLmJzLXRvb2x0aXAtYXV0b1t4LXBsYWNlbWVudF49XFxcImxlZnRcXFwiXSB7XFxuICBwYWRkaW5nOiAwIDAuNHJlbTtcXG59XFxuXFxuLmJzLXRvb2x0aXAtbGVmdCAuYXJyb3csIC5icy10b29sdGlwLWF1dG9beC1wbGFjZW1lbnRePVxcXCJsZWZ0XFxcIl0gLmFycm93IHtcXG4gIHJpZ2h0OiAwO1xcbiAgd2lkdGg6IDAuNHJlbTtcXG4gIGhlaWdodDogMC44cmVtO1xcbn1cXG5cXG4uYnMtdG9vbHRpcC1sZWZ0IC5hcnJvdzo6YmVmb3JlLCAuYnMtdG9vbHRpcC1hdXRvW3gtcGxhY2VtZW50Xj1cXFwibGVmdFxcXCJdIC5hcnJvdzo6YmVmb3JlIHtcXG4gIGxlZnQ6IDA7XFxuICBib3JkZXItd2lkdGg6IDAuNHJlbSAwIDAuNHJlbSAwLjRyZW07XFxuICBib3JkZXItbGVmdC1jb2xvcjogIzAwMDtcXG59XFxuXFxuLnRvb2x0aXAtaW5uZXIge1xcbiAgbWF4LXdpZHRoOiAyMDBweDtcXG4gIHBhZGRpbmc6IDAuMjVyZW0gMC41cmVtO1xcbiAgY29sb3I6ICNmZjAwMDA7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLnBvcG92ZXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHotaW5kZXg6IDEwNjA7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIG1heC13aWR0aDogMjc2cHg7XFxuICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcXFwiU2Vnb2UgVUlcXFwiLCBSb2JvdG8sIFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsIEFyaWFsLCBcXFwiTm90byBTYW5zXFxcIiwgc2Fucy1zZXJpZiwgXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIiwgXFxcIlNlZ29lIFVJIEVtb2ppXFxcIiwgXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCIsIFxcXCJOb3RvIENvbG9yIEVtb2ppXFxcIjtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG4gIHRleHQtYWxpZ246IHN0YXJ0O1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgdGV4dC1zaGFkb3c6IG5vbmU7XFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XFxuICB3b3JkLWJyZWFrOiBub3JtYWw7XFxuICB3b3JkLXNwYWNpbmc6IG5vcm1hbDtcXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XFxuICBsaW5lLWJyZWFrOiBhdXRvO1xcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcXG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjIpO1xcbiAgYm9yZGVyLXJhZGl1czogMC4zcmVtO1xcbn1cXG5cXG4ucG9wb3ZlciAuYXJyb3cge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMXJlbTtcXG4gIGhlaWdodDogMC41cmVtO1xcbiAgbWFyZ2luOiAwIDAuM3JlbTtcXG59XFxuXFxuLnBvcG92ZXIgLmFycm93OjpiZWZvcmUsIC5wb3BvdmVyIC5hcnJvdzo6YWZ0ZXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItc3R5bGU6IHNvbGlkO1xcbn1cXG5cXG4uYnMtcG9wb3Zlci10b3AsIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJ0b3BcXFwiXSB7XFxuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XFxufVxcblxcbi5icy1wb3BvdmVyLXRvcCA+IC5hcnJvdywgLmJzLXBvcG92ZXItYXV0b1t4LXBsYWNlbWVudF49XFxcInRvcFxcXCJdID4gLmFycm93IHtcXG4gIGJvdHRvbTogY2FsYygoMC41cmVtICsgMXB4KSAqIC0xKTtcXG59XFxuXFxuLmJzLXBvcG92ZXItdG9wID4gLmFycm93OjpiZWZvcmUsIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJ0b3BcXFwiXSA+IC5hcnJvdzo6YmVmb3JlIHtcXG4gIGJvdHRvbTogMDtcXG4gIGJvcmRlci13aWR0aDogMC41cmVtIDAuNXJlbSAwO1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcXG59XFxuXFxuLmJzLXBvcG92ZXItdG9wID4gLmFycm93OjphZnRlciwgLmJzLXBvcG92ZXItYXV0b1t4LXBsYWNlbWVudF49XFxcInRvcFxcXCJdID4gLmFycm93OjphZnRlciB7XFxuICBib3R0b206IDFweDtcXG4gIGJvcmRlci13aWR0aDogMC41cmVtIDAuNXJlbSAwO1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2ZmZjtcXG59XFxuXFxuLmJzLXBvcG92ZXItcmlnaHQsIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJyaWdodFxcXCJdIHtcXG4gIG1hcmdpbi1sZWZ0OiAwLjVyZW07XFxufVxcblxcbi5icy1wb3BvdmVyLXJpZ2h0ID4gLmFycm93LCAuYnMtcG9wb3Zlci1hdXRvW3gtcGxhY2VtZW50Xj1cXFwicmlnaHRcXFwiXSA+IC5hcnJvdyB7XFxuICBsZWZ0OiBjYWxjKCgwLjVyZW0gKyAxcHgpICogLTEpO1xcbiAgd2lkdGg6IDAuNXJlbTtcXG4gIGhlaWdodDogMXJlbTtcXG4gIG1hcmdpbjogMC4zcmVtIDA7XFxufVxcblxcbi5icy1wb3BvdmVyLXJpZ2h0ID4gLmFycm93OjpiZWZvcmUsIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJyaWdodFxcXCJdID4gLmFycm93OjpiZWZvcmUge1xcbiAgbGVmdDogMDtcXG4gIGJvcmRlci13aWR0aDogMC41cmVtIDAuNXJlbSAwLjVyZW0gMDtcXG4gIGJvcmRlci1yaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcXG59XFxuXFxuLmJzLXBvcG92ZXItcmlnaHQgPiAuYXJyb3c6OmFmdGVyLCAuYnMtcG9wb3Zlci1hdXRvW3gtcGxhY2VtZW50Xj1cXFwicmlnaHRcXFwiXSA+IC5hcnJvdzo6YWZ0ZXIge1xcbiAgbGVmdDogMXB4O1xcbiAgYm9yZGVyLXdpZHRoOiAwLjVyZW0gMC41cmVtIDAuNXJlbSAwO1xcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjZmZmO1xcbn1cXG5cXG4uYnMtcG9wb3Zlci1ib3R0b20sIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSB7XFxuICBtYXJnaW4tdG9wOiAwLjVyZW07XFxufVxcblxcbi5icy1wb3BvdmVyLWJvdHRvbSA+IC5hcnJvdywgLmJzLXBvcG92ZXItYXV0b1t4LXBsYWNlbWVudF49XFxcImJvdHRvbVxcXCJdID4gLmFycm93IHtcXG4gIHRvcDogY2FsYygoMC41cmVtICsgMXB4KSAqIC0xKTtcXG59XFxuXFxuLmJzLXBvcG92ZXItYm90dG9tID4gLmFycm93OjpiZWZvcmUsIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSA+IC5hcnJvdzo6YmVmb3JlIHtcXG4gIHRvcDogMDtcXG4gIGJvcmRlci13aWR0aDogMCAwLjVyZW0gMC41cmVtIDAuNXJlbTtcXG4gIGJvcmRlci1ib3R0b20tY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XFxufVxcblxcbi5icy1wb3BvdmVyLWJvdHRvbSA+IC5hcnJvdzo6YWZ0ZXIsIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSA+IC5hcnJvdzo6YWZ0ZXIge1xcbiAgdG9wOiAxcHg7XFxuICBib3JkZXItd2lkdGg6IDAgMC41cmVtIDAuNXJlbSAwLjVyZW07XFxuICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmO1xcbn1cXG5cXG4uYnMtcG9wb3Zlci1ib3R0b20gLnBvcG92ZXItaGVhZGVyOjpiZWZvcmUsIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSAucG9wb3Zlci1oZWFkZXI6OmJlZm9yZSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiA1MCU7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxcmVtO1xcbiAgbWFyZ2luLWxlZnQ6IC0wLjVyZW07XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjdmN2Y3O1xcbn1cXG5cXG4uYnMtcG9wb3Zlci1sZWZ0LCAuYnMtcG9wb3Zlci1hdXRvW3gtcGxhY2VtZW50Xj1cXFwibGVmdFxcXCJdIHtcXG4gIG1hcmdpbi1yaWdodDogMC41cmVtO1xcbn1cXG5cXG4uYnMtcG9wb3Zlci1sZWZ0ID4gLmFycm93LCAuYnMtcG9wb3Zlci1hdXRvW3gtcGxhY2VtZW50Xj1cXFwibGVmdFxcXCJdID4gLmFycm93IHtcXG4gIHJpZ2h0OiBjYWxjKCgwLjVyZW0gKyAxcHgpICogLTEpO1xcbiAgd2lkdGg6IDAuNXJlbTtcXG4gIGhlaWdodDogMXJlbTtcXG4gIG1hcmdpbjogMC4zcmVtIDA7XFxufVxcblxcbi5icy1wb3BvdmVyLWxlZnQgPiAuYXJyb3c6OmJlZm9yZSwgLmJzLXBvcG92ZXItYXV0b1t4LXBsYWNlbWVudF49XFxcImxlZnRcXFwiXSA+IC5hcnJvdzo6YmVmb3JlIHtcXG4gIHJpZ2h0OiAwO1xcbiAgYm9yZGVyLXdpZHRoOiAwLjVyZW0gMCAwLjVyZW0gMC41cmVtO1xcbiAgYm9yZGVyLWxlZnQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XFxufVxcblxcbi5icy1wb3BvdmVyLWxlZnQgPiAuYXJyb3c6OmFmdGVyLCAuYnMtcG9wb3Zlci1hdXRvW3gtcGxhY2VtZW50Xj1cXFwibGVmdFxcXCJdID4gLmFycm93OjphZnRlciB7XFxuICByaWdodDogMXB4O1xcbiAgYm9yZGVyLXdpZHRoOiAwLjVyZW0gMCAwLjVyZW0gMC41cmVtO1xcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICNmZmY7XFxufVxcblxcbi5wb3BvdmVyLWhlYWRlciB7XFxuICBwYWRkaW5nOiAwLjVyZW0gMC43NXJlbTtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxuICBmb250LXNpemU6IDFyZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3O1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlYmViZWI7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBjYWxjKDAuM3JlbSAtIDFweCk7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogY2FsYygwLjNyZW0gLSAxcHgpO1xcbn1cXG5cXG4ucG9wb3Zlci1oZWFkZXI6ZW1wdHkge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLnBvcG92ZXItYm9keSB7XFxuICBwYWRkaW5nOiAwLjVyZW0gMC43NXJlbTtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbn1cXG5cXG4uY2Fyb3VzZWwge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4uY2Fyb3VzZWwucG9pbnRlci1ldmVudCB7XFxuICAtbXMtdG91Y2gtYWN0aW9uOiBwYW4teTtcXG4gIHRvdWNoLWFjdGlvbjogcGFuLXk7XFxufVxcblxcbi5jYXJvdXNlbC1pbm5lciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMTAwJTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5jYXJvdXNlbC1pbm5lcjo6YWZ0ZXIge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBjbGVhcjogYm90aDtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbn1cXG5cXG4uY2Fyb3VzZWwtaXRlbSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgZmxvYXQ6IGxlZnQ7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1hcmdpbi1yaWdodDogLTEwMCU7XFxuICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuNnMgZWFzZS1pbi1vdXQ7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC42cyBlYXNlLWluLW91dDtcXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjZzIGVhc2UtaW4tb3V0LCAtd2Via2l0LXRyYW5zZm9ybSAwLjZzIGVhc2UtaW4tb3V0O1xcbn1cXG5cXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xcbiAgLmNhcm91c2VsLWl0ZW0ge1xcbiAgICB0cmFuc2l0aW9uOiBub25lO1xcbiAgfVxcbn1cXG5cXG4uY2Fyb3VzZWwtaXRlbS5hY3RpdmUsXFxuLmNhcm91c2VsLWl0ZW0tbmV4dCxcXG4uY2Fyb3VzZWwtaXRlbS1wcmV2IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4uY2Fyb3VzZWwtaXRlbS1uZXh0Om5vdCguY2Fyb3VzZWwtaXRlbS1sZWZ0KSxcXG4uYWN0aXZlLmNhcm91c2VsLWl0ZW0tcmlnaHQge1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XFxufVxcblxcbi5jYXJvdXNlbC1pdGVtLXByZXY6bm90KC5jYXJvdXNlbC1pdGVtLXJpZ2h0KSxcXG4uYWN0aXZlLmNhcm91c2VsLWl0ZW0tbGVmdCB7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSk7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xcbn1cXG5cXG4uY2Fyb3VzZWwtZmFkZSAuY2Fyb3VzZWwtaXRlbSB7XFxuICBvcGFjaXR5OiAwO1xcbiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogb3BhY2l0eTtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiBub25lO1xcbiAgdHJhbnNmb3JtOiBub25lO1xcbn1cXG5cXG4uY2Fyb3VzZWwtZmFkZSAuY2Fyb3VzZWwtaXRlbS5hY3RpdmUsXFxuLmNhcm91c2VsLWZhZGUgLmNhcm91c2VsLWl0ZW0tbmV4dC5jYXJvdXNlbC1pdGVtLWxlZnQsXFxuLmNhcm91c2VsLWZhZGUgLmNhcm91c2VsLWl0ZW0tcHJldi5jYXJvdXNlbC1pdGVtLXJpZ2h0IHtcXG4gIHotaW5kZXg6IDE7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG5cXG4uY2Fyb3VzZWwtZmFkZSAuYWN0aXZlLmNhcm91c2VsLWl0ZW0tbGVmdCxcXG4uY2Fyb3VzZWwtZmFkZSAuYWN0aXZlLmNhcm91c2VsLWl0ZW0tcmlnaHQge1xcbiAgei1pbmRleDogMDtcXG4gIG9wYWNpdHk6IDA7XFxuICB0cmFuc2l0aW9uOiAwcyAwLjZzIG9wYWNpdHk7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAuY2Fyb3VzZWwtZmFkZSAuYWN0aXZlLmNhcm91c2VsLWl0ZW0tbGVmdCxcXG4gIC5jYXJvdXNlbC1mYWRlIC5hY3RpdmUuY2Fyb3VzZWwtaXRlbS1yaWdodCB7XFxuICAgIHRyYW5zaXRpb246IG5vbmU7XFxuICB9XFxufVxcblxcbi5jYXJvdXNlbC1jb250cm9sLXByZXYsXFxuLmNhcm91c2VsLWNvbnRyb2wtbmV4dCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBib3R0b206IDA7XFxuICB6LWluZGV4OiAxO1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIHdpZHRoOiAxNSU7XFxuICBjb2xvcjogI2ZmZjtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIG9wYWNpdHk6IDAuNTtcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgZWFzZTtcXG59XFxuXFxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcXG4gIC5jYXJvdXNlbC1jb250cm9sLXByZXYsXFxuICAuY2Fyb3VzZWwtY29udHJvbC1uZXh0IHtcXG4gICAgdHJhbnNpdGlvbjogbm9uZTtcXG4gIH1cXG59XFxuXFxuLmNhcm91c2VsLWNvbnRyb2wtcHJldjpob3ZlciwgLmNhcm91c2VsLWNvbnRyb2wtcHJldjpmb2N1cyxcXG4uY2Fyb3VzZWwtY29udHJvbC1uZXh0OmhvdmVyLFxcbi5jYXJvdXNlbC1jb250cm9sLW5leHQ6Zm9jdXMge1xcbiAgY29sb3I6ICNmZmY7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICBvdXRsaW5lOiAwO1xcbiAgb3BhY2l0eTogMC45O1xcbn1cXG5cXG4uY2Fyb3VzZWwtY29udHJvbC1wcmV2IHtcXG4gIGxlZnQ6IDA7XFxufVxcblxcbi5jYXJvdXNlbC1jb250cm9sLW5leHQge1xcbiAgcmlnaHQ6IDA7XFxufVxcblxcbi5jYXJvdXNlbC1jb250cm9sLXByZXYtaWNvbixcXG4uY2Fyb3VzZWwtY29udHJvbC1uZXh0LWljb24ge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgd2lkdGg6IDIwcHg7XFxuICBoZWlnaHQ6IDIwcHg7XFxuICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgNTAlIC8gMTAwJSAxMDAlO1xcbn1cXG5cXG4uY2Fyb3VzZWwtY29udHJvbC1wcmV2LWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgZmlsbD0nJTIzZmZmJyB2aWV3Qm94PScwIDAgOCA4JyUzZSUzY3BhdGggZD0nTTUuMjUgMGwtNCA0IDQgNCAxLjUtMS41LTIuNS0yLjUgMi41LTIuNS0xLjUtMS41eicvJTNlJTNjL3N2ZyUzZVxcXCIpO1xcbn1cXG5cXG4uY2Fyb3VzZWwtY29udHJvbC1uZXh0LWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgZmlsbD0nJTIzZmZmJyB2aWV3Qm94PScwIDAgOCA4JyUzZSUzY3BhdGggZD0nTTIuNzUgMGwtMS41IDEuNSAyLjUgMi41LTIuNSAyLjUgMS41IDEuNSA0LTQtNC00eicvJTNlJTNjL3N2ZyUzZVxcXCIpO1xcbn1cXG5cXG4uY2Fyb3VzZWwtaW5kaWNhdG9ycyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICB6LWluZGV4OiAxNTtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgbWFyZ2luLXJpZ2h0OiAxNSU7XFxuICBtYXJnaW4tbGVmdDogMTUlO1xcbiAgbGlzdC1zdHlsZTogbm9uZTtcXG59XFxuXFxuLmNhcm91c2VsLWluZGljYXRvcnMgbGkge1xcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XFxuICAtbXMtZmxleDogMCAxIGF1dG87XFxuICBmbGV4OiAwIDEgYXV0bztcXG4gIHdpZHRoOiAzMHB4O1xcbiAgaGVpZ2h0OiAzcHg7XFxuICBtYXJnaW4tcmlnaHQ6IDNweDtcXG4gIG1hcmdpbi1sZWZ0OiAzcHg7XFxuICB0ZXh0LWluZGVudDogLTk5OXB4O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICBib3JkZXItdG9wOiAxMHB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWJvdHRvbTogMTBweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIG9wYWNpdHk6IC41O1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjZzIGVhc2U7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAuY2Fyb3VzZWwtaW5kaWNhdG9ycyBsaSB7XFxuICAgIHRyYW5zaXRpb246IG5vbmU7XFxuICB9XFxufVxcblxcbi5jYXJvdXNlbC1pbmRpY2F0b3JzIC5hY3RpdmUge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLmNhcm91c2VsLWNhcHRpb24ge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDE1JTtcXG4gIGJvdHRvbTogMjBweDtcXG4gIGxlZnQ6IDE1JTtcXG4gIHotaW5kZXg6IDEwO1xcbiAgcGFkZGluZy10b3A6IDIwcHg7XFxuICBwYWRkaW5nLWJvdHRvbTogMjBweDtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG5ALXdlYmtpdC1rZXlmcmFtZXMgc3Bpbm5lci1ib3JkZXIge1xcbiAgdG8ge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICB9XFxufVxcblxcbkBrZXlmcmFtZXMgc3Bpbm5lci1ib3JkZXIge1xcbiAgdG8ge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICB9XFxufVxcblxcbi5zcGlubmVyLWJvcmRlciB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB3aWR0aDogMnJlbTtcXG4gIGhlaWdodDogMnJlbTtcXG4gIHZlcnRpY2FsLWFsaWduOiB0ZXh0LWJvdHRvbTtcXG4gIGJvcmRlcjogMC4yNWVtIHNvbGlkIGN1cnJlbnRDb2xvcjtcXG4gIGJvcmRlci1yaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICAtd2Via2l0LWFuaW1hdGlvbjogc3Bpbm5lci1ib3JkZXIgLjc1cyBsaW5lYXIgaW5maW5pdGU7XFxuICBhbmltYXRpb246IHNwaW5uZXItYm9yZGVyIC43NXMgbGluZWFyIGluZmluaXRlO1xcbn1cXG5cXG4uc3Bpbm5lci1ib3JkZXItc20ge1xcbiAgd2lkdGg6IDFyZW07XFxuICBoZWlnaHQ6IDFyZW07XFxuICBib3JkZXItd2lkdGg6IDAuMmVtO1xcbn1cXG5cXG5ALXdlYmtpdC1rZXlmcmFtZXMgc3Bpbm5lci1ncm93IHtcXG4gIDAlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApO1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDApO1xcbiAgfVxcbiAgNTAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG59XFxuXFxuQGtleWZyYW1lcyBzcGlubmVyLWdyb3cge1xcbiAgMCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMCk7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XFxuICB9XFxuICA1MCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbn1cXG5cXG4uc3Bpbm5lci1ncm93IHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHdpZHRoOiAycmVtO1xcbiAgaGVpZ2h0OiAycmVtO1xcbiAgdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgb3BhY2l0eTogMDtcXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBzcGlubmVyLWdyb3cgLjc1cyBsaW5lYXIgaW5maW5pdGU7XFxuICBhbmltYXRpb246IHNwaW5uZXItZ3JvdyAuNzVzIGxpbmVhciBpbmZpbml0ZTtcXG59XFxuXFxuLnNwaW5uZXItZ3Jvdy1zbSB7XFxuICB3aWR0aDogMXJlbTtcXG4gIGhlaWdodDogMXJlbTtcXG59XFxuXFxuLmFsaWduLWJhc2VsaW5lIHtcXG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWxpZ24tdG9wIHtcXG4gIHZlcnRpY2FsLWFsaWduOiB0b3AgIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLW1pZGRsZSB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbGlnbi1ib3R0b20ge1xcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWxpZ24tdGV4dC1ib3R0b20ge1xcbiAgdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbGlnbi10ZXh0LXRvcCB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3AgIWltcG9ydGFudDtcXG59XFxuXFxuLmJnLXByaW1hcnkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG5hLmJnLXByaW1hcnk6aG92ZXIsIGEuYmctcHJpbWFyeTpmb2N1cyxcXG5idXR0b24uYmctcHJpbWFyeTpob3ZlcixcXG5idXR0b24uYmctcHJpbWFyeTpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA2MmNjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5iZy1zZWNvbmRhcnkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzZjNzU3ZCAhaW1wb3J0YW50O1xcbn1cXG5cXG5hLmJnLXNlY29uZGFyeTpob3ZlciwgYS5iZy1zZWNvbmRhcnk6Zm9jdXMsXFxuYnV0dG9uLmJnLXNlY29uZGFyeTpob3ZlcixcXG5idXR0b24uYmctc2Vjb25kYXJ5OmZvY3VzIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1NDViNjIgIWltcG9ydGFudDtcXG59XFxuXFxuLmJnLXN1Y2Nlc3Mge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI4YTc0NSAhaW1wb3J0YW50O1xcbn1cXG5cXG5hLmJnLXN1Y2Nlc3M6aG92ZXIsIGEuYmctc3VjY2Vzczpmb2N1cyxcXG5idXR0b24uYmctc3VjY2Vzczpob3ZlcixcXG5idXR0b24uYmctc3VjY2Vzczpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWU3ZTM0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5iZy1pbmZvIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxN2EyYjggIWltcG9ydGFudDtcXG59XFxuXFxuYS5iZy1pbmZvOmhvdmVyLCBhLmJnLWluZm86Zm9jdXMsXFxuYnV0dG9uLmJnLWluZm86aG92ZXIsXFxuYnV0dG9uLmJnLWluZm86Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzExN2E4YiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmctd2FybmluZyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZjMTA3ICFpbXBvcnRhbnQ7XFxufVxcblxcbmEuYmctd2FybmluZzpob3ZlciwgYS5iZy13YXJuaW5nOmZvY3VzLFxcbmJ1dHRvbi5iZy13YXJuaW5nOmhvdmVyLFxcbmJ1dHRvbi5iZy13YXJuaW5nOmZvY3VzIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkMzllMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmJnLWRhbmdlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGMzNTQ1ICFpbXBvcnRhbnQ7XFxufVxcblxcbmEuYmctZGFuZ2VyOmhvdmVyLCBhLmJnLWRhbmdlcjpmb2N1cyxcXG5idXR0b24uYmctZGFuZ2VyOmhvdmVyLFxcbmJ1dHRvbi5iZy1kYW5nZXI6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2JkMjEzMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmctbGlnaHQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYSAhaW1wb3J0YW50O1xcbn1cXG5cXG5hLmJnLWxpZ2h0OmhvdmVyLCBhLmJnLWxpZ2h0OmZvY3VzLFxcbmJ1dHRvbi5iZy1saWdodDpob3ZlcixcXG5idXR0b24uYmctbGlnaHQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RhZTBlNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmctZGFyayB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzQzYTQwICFpbXBvcnRhbnQ7XFxufVxcblxcbmEuYmctZGFyazpob3ZlciwgYS5iZy1kYXJrOmZvY3VzLFxcbmJ1dHRvbi5iZy1kYXJrOmhvdmVyLFxcbmJ1dHRvbi5iZy1kYXJrOmZvY3VzIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxZDIxMjQgIWltcG9ydGFudDtcXG59XFxuXFxuLmJnLXdoaXRlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJnLXRyYW5zcGFyZW50IHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ib3JkZXIge1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2RlZTJlNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLXRvcCB7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RlZTJlNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLXJpZ2h0IHtcXG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkZWUyZTYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJvcmRlci1ib3R0b20ge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZWUyZTYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJvcmRlci1sZWZ0IHtcXG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2RlZTJlNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLTAge1xcbiAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ib3JkZXItdG9wLTAge1xcbiAgYm9yZGVyLXRvcDogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLXJpZ2h0LTAge1xcbiAgYm9yZGVyLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ib3JkZXItYm90dG9tLTAge1xcbiAgYm9yZGVyLWJvdHRvbTogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLWxlZnQtMCB7XFxuICBib3JkZXItbGVmdDogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLXByaW1hcnkge1xcbiAgYm9yZGVyLWNvbG9yOiAjMDA3YmZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ib3JkZXItc2Vjb25kYXJ5IHtcXG4gIGJvcmRlci1jb2xvcjogIzZjNzU3ZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLXN1Y2Nlc3Mge1xcbiAgYm9yZGVyLWNvbG9yOiAjMjhhNzQ1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ib3JkZXItaW5mbyB7XFxuICBib3JkZXItY29sb3I6ICMxN2EyYjggIWltcG9ydGFudDtcXG59XFxuXFxuLmJvcmRlci13YXJuaW5nIHtcXG4gIGJvcmRlci1jb2xvcjogI2ZmYzEwNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLWRhbmdlciB7XFxuICBib3JkZXItY29sb3I6ICNkYzM1NDUgIWltcG9ydGFudDtcXG59XFxuXFxuLmJvcmRlci1saWdodCB7XFxuICBib3JkZXItY29sb3I6ICNmOGY5ZmEgIWltcG9ydGFudDtcXG59XFxuXFxuLmJvcmRlci1kYXJrIHtcXG4gIGJvcmRlci1jb2xvcjogIzM0M2E0MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLXdoaXRlIHtcXG4gIGJvcmRlci1jb2xvcjogI2ZmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucm91bmRlZC1zbSB7XFxuICBib3JkZXItcmFkaXVzOiAwLjJyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLnJvdW5kZWQge1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucm91bmRlZC10b3Age1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDAuMjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLnJvdW5kZWQtcmlnaHQge1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yb3VuZGVkLWJvdHRvbSB7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucm91bmRlZC1sZWZ0IHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAuMjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLnJvdW5kZWQtbGcge1xcbiAgYm9yZGVyLXJhZGl1czogMC4zcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yb3VuZGVkLWNpcmNsZSB7XFxuICBib3JkZXItcmFkaXVzOiA1MCUgIWltcG9ydGFudDtcXG59XFxuXFxuLnJvdW5kZWQtcGlsbCB7XFxuICBib3JkZXItcmFkaXVzOiA1MHJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucm91bmRlZC0wIHtcXG4gIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmNsZWFyZml4OjphZnRlciB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGNsZWFyOiBib3RoO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxufVxcblxcbi5kLW5vbmUge1xcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZC1pbmxpbmUge1xcbiAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kLWlubGluZS1ibG9jayB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcXG59XFxuXFxuLmQtYmxvY2sge1xcbiAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcXG59XFxuXFxuLmQtdGFibGUge1xcbiAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudDtcXG59XFxuXFxuLmQtdGFibGUtcm93IHtcXG4gIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZC10YWJsZS1jZWxsIHtcXG4gIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDtcXG59XFxuXFxuLmQtZmxleCB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZC1pbmxpbmUtZmxleCB7XFxuICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3ggIWltcG9ydGFudDtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLmQtc20tbm9uZSB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXNtLWlubGluZSB7XFxuICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtc20taW5saW5lLWJsb2NrIHtcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1zbS1ibG9jayB7XFxuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1zbS10YWJsZSB7XFxuICAgIGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1zbS10YWJsZS1yb3cge1xcbiAgICBkaXNwbGF5OiB0YWJsZS1yb3cgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXNtLXRhYmxlLWNlbGwge1xcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1zbS1mbGV4IHtcXG4gICAgZGlzcGxheTogLW1zLWZsZXhib3ggIWltcG9ydGFudDtcXG4gICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtc20taW5saW5lLWZsZXgge1xcbiAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3ggIWltcG9ydGFudDtcXG4gICAgZGlzcGxheTogaW5saW5lLWZsZXggIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XFxuICAuZC1tZC1ub25lIHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtbWQtaW5saW5lIHtcXG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1tZC1pbmxpbmUtYmxvY2sge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLW1kLWJsb2NrIHtcXG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLW1kLXRhYmxlIHtcXG4gICAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLW1kLXRhYmxlLXJvdyB7XFxuICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtbWQtdGFibGUtY2VsbCB7XFxuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLW1kLWZsZXgge1xcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1tZC1pbmxpbmUtZmxleCB7XFxuICAgIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcXG4gIC5kLWxnLW5vbmUge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1sZy1pbmxpbmUge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLWxnLWlubGluZS1ibG9jayB7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtbGctYmxvY2sge1xcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtbGctdGFibGUge1xcbiAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtbGctdGFibGUtcm93IHtcXG4gICAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1sZy10YWJsZS1jZWxsIHtcXG4gICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtbGctZmxleCB7XFxuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94ICFpbXBvcnRhbnQ7XFxuICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLWxnLWlubGluZS1mbGV4IHtcXG4gICAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94ICFpbXBvcnRhbnQ7XFxuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC5kLXhsLW5vbmUge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC14bC1pbmxpbmUge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXhsLWlubGluZS1ibG9jayB7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQteGwtYmxvY2sge1xcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQteGwtdGFibGUge1xcbiAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQteGwtdGFibGUtcm93IHtcXG4gICAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC14bC10YWJsZS1jZWxsIHtcXG4gICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQteGwtZmxleCB7XFxuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94ICFpbXBvcnRhbnQ7XFxuICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXhsLWlubGluZS1mbGV4IHtcXG4gICAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94ICFpbXBvcnRhbnQ7XFxuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSBwcmludCB7XFxuICAuZC1wcmludC1ub25lIHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtcHJpbnQtaW5saW5lIHtcXG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1wcmludC1pbmxpbmUtYmxvY2sge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXByaW50LWJsb2NrIHtcXG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXByaW50LXRhYmxlIHtcXG4gICAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXByaW50LXRhYmxlLXJvdyB7XFxuICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtcHJpbnQtdGFibGUtY2VsbCB7XFxuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXByaW50LWZsZXgge1xcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1wcmludC1pbmxpbmUtZmxleCB7XFxuICAgIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG4uZW1iZWQtcmVzcG9uc2l2ZSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxMDAlO1xcbiAgcGFkZGluZzogMDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5lbWJlZC1yZXNwb25zaXZlOjpiZWZvcmUge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG59XFxuXFxuLmVtYmVkLXJlc3BvbnNpdmUgLmVtYmVkLXJlc3BvbnNpdmUtaXRlbSxcXG4uZW1iZWQtcmVzcG9uc2l2ZSBpZnJhbWUsXFxuLmVtYmVkLXJlc3BvbnNpdmUgZW1iZWQsXFxuLmVtYmVkLXJlc3BvbnNpdmUgb2JqZWN0LFxcbi5lbWJlZC1yZXNwb25zaXZlIHZpZGVvIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGJvcmRlcjogMDtcXG59XFxuXFxuLmVtYmVkLXJlc3BvbnNpdmUtMjFieTk6OmJlZm9yZSB7XFxuICBwYWRkaW5nLXRvcDogNDIuODU3MTQzJTtcXG59XFxuXFxuLmVtYmVkLXJlc3BvbnNpdmUtMTZieTk6OmJlZm9yZSB7XFxuICBwYWRkaW5nLXRvcDogNTYuMjUlO1xcbn1cXG5cXG4uZW1iZWQtcmVzcG9uc2l2ZS00YnkzOjpiZWZvcmUge1xcbiAgcGFkZGluZy10b3A6IDc1JTtcXG59XFxuXFxuLmVtYmVkLXJlc3BvbnNpdmUtMWJ5MTo6YmVmb3JlIHtcXG4gIHBhZGRpbmctdG9wOiAxMDAlO1xcbn1cXG5cXG4uZmxleC1yb3cge1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3cgIWltcG9ydGFudDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3cgIWltcG9ydGFudDtcXG59XFxuXFxuLmZsZXgtY29sdW1uIHtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7XFxufVxcblxcbi5mbGV4LXJvdy1yZXZlcnNlIHtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2UgIWltcG9ydGFudDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZmxleC1jb2x1bW4tcmV2ZXJzZSB7XFxuICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2UgIWltcG9ydGFudDtcXG59XFxuXFxuLmZsZXgtd3JhcCB7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwICFpbXBvcnRhbnQ7XFxuICBmbGV4LXdyYXA6IHdyYXAgIWltcG9ydGFudDtcXG59XFxuXFxuLmZsZXgtbm93cmFwIHtcXG4gIC1tcy1mbGV4LXdyYXA6IG5vd3JhcCAhaW1wb3J0YW50O1xcbiAgZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDtcXG59XFxuXFxuLmZsZXgtd3JhcC1yZXZlcnNlIHtcXG4gIC1tcy1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgZmxleC13cmFwOiB3cmFwLXJldmVyc2UgIWltcG9ydGFudDtcXG59XFxuXFxuLmZsZXgtZmlsbCB7XFxuICAtbXMtZmxleDogMSAxIGF1dG8gIWltcG9ydGFudDtcXG4gIGZsZXg6IDEgMSBhdXRvICFpbXBvcnRhbnQ7XFxufVxcblxcbi5mbGV4LWdyb3ctMCB7XFxuICAtbXMtZmxleC1wb3NpdGl2ZTogMCAhaW1wb3J0YW50O1xcbiAgZmxleC1ncm93OiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5mbGV4LWdyb3ctMSB7XFxuICAtbXMtZmxleC1wb3NpdGl2ZTogMSAhaW1wb3J0YW50O1xcbiAgZmxleC1ncm93OiAxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5mbGV4LXNocmluay0wIHtcXG4gIC1tcy1mbGV4LW5lZ2F0aXZlOiAwICFpbXBvcnRhbnQ7XFxuICBmbGV4LXNocmluazogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZmxleC1zaHJpbmstMSB7XFxuICAtbXMtZmxleC1uZWdhdGl2ZTogMSAhaW1wb3J0YW50O1xcbiAgZmxleC1zaHJpbms6IDEgIWltcG9ydGFudDtcXG59XFxuXFxuLmp1c3RpZnktY29udGVudC1zdGFydCB7XFxuICAtbXMtZmxleC1wYWNrOiBzdGFydCAhaW1wb3J0YW50O1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5qdXN0aWZ5LWNvbnRlbnQtZW5kIHtcXG4gIC1tcy1mbGV4LXBhY2s6IGVuZCAhaW1wb3J0YW50O1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uanVzdGlmeS1jb250ZW50LWNlbnRlciB7XFxuICAtbXMtZmxleC1wYWNrOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB7XFxuICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5ICFpbXBvcnRhbnQ7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW4gIWltcG9ydGFudDtcXG59XFxuXFxuLmp1c3RpZnktY29udGVudC1hcm91bmQge1xcbiAgLW1zLWZsZXgtcGFjazogZGlzdHJpYnV0ZSAhaW1wb3J0YW50O1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQgIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLWl0ZW1zLXN0YXJ0IHtcXG4gIC1tcy1mbGV4LWFsaWduOiBzdGFydCAhaW1wb3J0YW50O1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLWl0ZW1zLWVuZCB7XFxuICAtbXMtZmxleC1hbGlnbjogZW5kICFpbXBvcnRhbnQ7XFxuICBhbGlnbi1pdGVtczogZmxleC1lbmQgIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLWl0ZW1zLWNlbnRlciB7XFxuICAtbXMtZmxleC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7XFxuICBhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbGlnbi1pdGVtcy1iYXNlbGluZSB7XFxuICAtbXMtZmxleC1hbGlnbjogYmFzZWxpbmUgIWltcG9ydGFudDtcXG4gIGFsaWduLWl0ZW1zOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWxpZ24taXRlbXMtc3RyZXRjaCB7XFxuICAtbXMtZmxleC1hbGlnbjogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2ggIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLWNvbnRlbnQtc3RhcnQge1xcbiAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdGFydCAhaW1wb3J0YW50O1xcbiAgYWxpZ24tY29udGVudDogZmxleC1zdGFydCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWxpZ24tY29udGVudC1lbmQge1xcbiAgLW1zLWZsZXgtbGluZS1wYWNrOiBlbmQgIWltcG9ydGFudDtcXG4gIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbGlnbi1jb250ZW50LWNlbnRlciB7XFxuICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgYWxpZ24tY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbGlnbi1jb250ZW50LWJldHdlZW4ge1xcbiAgLW1zLWZsZXgtbGluZS1wYWNrOiBqdXN0aWZ5ICFpbXBvcnRhbnQ7XFxuICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbGlnbi1jb250ZW50LWFyb3VuZCB7XFxuICAtbXMtZmxleC1saW5lLXBhY2s6IGRpc3RyaWJ1dGUgIWltcG9ydGFudDtcXG4gIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWxpZ24tY29udGVudC1zdHJldGNoIHtcXG4gIC1tcy1mbGV4LWxpbmUtcGFjazogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgYWxpZ24tY29udGVudDogc3RyZXRjaCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWxpZ24tc2VsZi1hdXRvIHtcXG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGF1dG8gIWltcG9ydGFudDtcXG4gIGFsaWduLXNlbGY6IGF1dG8gIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLXNlbGYtc3RhcnQge1xcbiAgLW1zLWZsZXgtaXRlbS1hbGlnbjogc3RhcnQgIWltcG9ydGFudDtcXG4gIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLXNlbGYtZW5kIHtcXG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGVuZCAhaW1wb3J0YW50O1xcbiAgYWxpZ24tc2VsZjogZmxleC1lbmQgIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLXNlbGYtY2VudGVyIHtcXG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgYWxpZ24tc2VsZjogY2VudGVyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbGlnbi1zZWxmLWJhc2VsaW5lIHtcXG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGJhc2VsaW5lICFpbXBvcnRhbnQ7XFxuICBhbGlnbi1zZWxmOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWxpZ24tc2VsZi1zdHJldGNoIHtcXG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gIGFsaWduLXNlbGY6IHN0cmV0Y2ggIWltcG9ydGFudDtcXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDU3NnB4KSB7XFxuICAuZmxleC1zbS1yb3cge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdyAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1zbS1jb2x1bW4ge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbiAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1zbS1yb3ctcmV2ZXJzZSB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2UgIWltcG9ydGFudDtcXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1zbS1jb2x1bW4tcmV2ZXJzZSB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2UgIWltcG9ydGFudDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1zbS13cmFwIHtcXG4gICAgLW1zLWZsZXgtd3JhcDogd3JhcCAhaW1wb3J0YW50O1xcbiAgICBmbGV4LXdyYXA6IHdyYXAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LXNtLW5vd3JhcCB7XFxuICAgIC1tcy1mbGV4LXdyYXA6IG5vd3JhcCAhaW1wb3J0YW50O1xcbiAgICBmbGV4LXdyYXA6IG5vd3JhcCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtc20td3JhcC1yZXZlcnNlIHtcXG4gICAgLW1zLWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtd3JhcDogd3JhcC1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1zbS1maWxsIHtcXG4gICAgLW1zLWZsZXg6IDEgMSBhdXRvICFpbXBvcnRhbnQ7XFxuICAgIGZsZXg6IDEgMSBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1zbS1ncm93LTAge1xcbiAgICAtbXMtZmxleC1wb3NpdGl2ZTogMCAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWdyb3c6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LXNtLWdyb3ctMSB7XFxuICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAxICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZ3JvdzogMSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtc20tc2hyaW5rLTAge1xcbiAgICAtbXMtZmxleC1uZWdhdGl2ZTogMCAhaW1wb3J0YW50O1xcbiAgICBmbGV4LXNocmluazogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtc20tc2hyaW5rLTEge1xcbiAgICAtbXMtZmxleC1uZWdhdGl2ZTogMSAhaW1wb3J0YW50O1xcbiAgICBmbGV4LXNocmluazogMSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmp1c3RpZnktY29udGVudC1zbS1zdGFydCB7XFxuICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0ICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmp1c3RpZnktY29udGVudC1zbS1lbmQge1xcbiAgICAtbXMtZmxleC1wYWNrOiBlbmQgIWltcG9ydGFudDtcXG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmp1c3RpZnktY29udGVudC1zbS1jZW50ZXIge1xcbiAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQtc20tYmV0d2VlbiB7XFxuICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnkgIWltcG9ydGFudDtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuanVzdGlmeS1jb250ZW50LXNtLWFyb3VuZCB7XFxuICAgIC1tcy1mbGV4LXBhY2s6IGRpc3RyaWJ1dGUgIWltcG9ydGFudDtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1pdGVtcy1zbS1zdGFydCB7XFxuICAgIC1tcy1mbGV4LWFsaWduOiBzdGFydCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLXNtLWVuZCB7XFxuICAgIC1tcy1mbGV4LWFsaWduOiBlbmQgIWltcG9ydGFudDtcXG4gICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24taXRlbXMtc20tY2VudGVyIHtcXG4gICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24taXRlbXMtc20tYmFzZWxpbmUge1xcbiAgICAtbXMtZmxleC1hbGlnbjogYmFzZWxpbmUgIWltcG9ydGFudDtcXG4gICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24taXRlbXMtc20tc3RyZXRjaCB7XFxuICAgIC1tcy1mbGV4LWFsaWduOiBzdHJldGNoICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tY29udGVudC1zbS1zdGFydCB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogc3RhcnQgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQtc20tZW5kIHtcXG4gICAgLW1zLWZsZXgtbGluZS1wYWNrOiBlbmQgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tY29udGVudDogZmxleC1lbmQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LXNtLWNlbnRlciB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogY2VudGVyICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQtc20tYmV0d2VlbiB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazoganVzdGlmeSAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tY29udGVudC1zbS1hcm91bmQge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IGRpc3RyaWJ1dGUgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tY29udGVudC1zbS1zdHJldGNoIHtcXG4gICAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdHJldGNoICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1zZWxmLXNtLWF1dG8ge1xcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBhdXRvICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1zZWxmLXNtLXN0YXJ0IHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogc3RhcnQgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tc2VsZjogZmxleC1zdGFydCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYtc20tZW5kIHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogZW5kICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi1zbS1jZW50ZXIge1xcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tc2VsZjogY2VudGVyICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi1zbS1iYXNlbGluZSB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGJhc2VsaW5lICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IGJhc2VsaW5lICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi1zbS1zdHJldGNoIHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBzdHJldGNoICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLmZsZXgtbWQtcm93IHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3cgIWltcG9ydGFudDtcXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdyAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbWQtY29sdW1uIHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4gIWltcG9ydGFudDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbiAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbWQtcm93LXJldmVyc2Uge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbWQtY29sdW1uLXJldmVyc2Uge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbWQtd3JhcCB7XFxuICAgIC1tcy1mbGV4LXdyYXA6IHdyYXAgIWltcG9ydGFudDtcXG4gICAgZmxleC13cmFwOiB3cmFwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1tZC1ub3dyYXAge1xcbiAgICAtbXMtZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDtcXG4gICAgZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LW1kLXdyYXAtcmV2ZXJzZSB7XFxuICAgIC1tcy1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgICBmbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbWQtZmlsbCB7XFxuICAgIC1tcy1mbGV4OiAxIDEgYXV0byAhaW1wb3J0YW50O1xcbiAgICBmbGV4OiAxIDEgYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbWQtZ3Jvdy0wIHtcXG4gICAgLW1zLWZsZXgtcG9zaXRpdmU6IDAgIWltcG9ydGFudDtcXG4gICAgZmxleC1ncm93OiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1tZC1ncm93LTEge1xcbiAgICAtbXMtZmxleC1wb3NpdGl2ZTogMSAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWdyb3c6IDEgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LW1kLXNocmluay0wIHtcXG4gICAgLW1zLWZsZXgtbmVnYXRpdmU6IDAgIWltcG9ydGFudDtcXG4gICAgZmxleC1zaHJpbms6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LW1kLXNocmluay0xIHtcXG4gICAgLW1zLWZsZXgtbmVnYXRpdmU6IDEgIWltcG9ydGFudDtcXG4gICAgZmxleC1zaHJpbms6IDEgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQtbWQtc3RhcnQge1xcbiAgICAtbXMtZmxleC1wYWNrOiBzdGFydCAhaW1wb3J0YW50O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQtbWQtZW5kIHtcXG4gICAgLW1zLWZsZXgtcGFjazogZW5kICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQtbWQtY2VudGVyIHtcXG4gICAgLW1zLWZsZXgtcGFjazogY2VudGVyICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuanVzdGlmeS1jb250ZW50LW1kLWJldHdlZW4ge1xcbiAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5ICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmp1c3RpZnktY29udGVudC1tZC1hcm91bmQge1xcbiAgICAtbXMtZmxleC1wYWNrOiBkaXN0cmlidXRlICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24taXRlbXMtbWQtc3RhcnQge1xcbiAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQgIWltcG9ydGFudDtcXG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1pdGVtcy1tZC1lbmQge1xcbiAgICAtbXMtZmxleC1hbGlnbjogZW5kICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLW1kLWNlbnRlciB7XFxuICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLW1kLWJhc2VsaW5lIHtcXG4gICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLW1kLXN0cmV0Y2gge1xcbiAgICAtbXMtZmxleC1hbGlnbjogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQtbWQtc3RhcnQge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IHN0YXJ0ICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LW1kLWVuZCB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZW5kICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tY29udGVudC1tZC1jZW50ZXIge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LW1kLWJldHdlZW4ge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IGp1c3RpZnkgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQtbWQtYXJvdW5kIHtcXG4gICAgLW1zLWZsZXgtbGluZS1wYWNrOiBkaXN0cmlidXRlICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQtbWQtc3RyZXRjaCB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBzdHJldGNoICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi1tZC1hdXRvIHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogYXV0byAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi1tZC1zdGFydCB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IHN0YXJ0ICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1zZWxmLW1kLWVuZCB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGVuZCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYtbWQtY2VudGVyIHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYtbWQtYmFzZWxpbmUge1xcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYtbWQtc3RyZXRjaCB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gICAgYWxpZ24tc2VsZjogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcXG4gIC5mbGV4LWxnLXJvdyB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93ICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3cgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LWxnLWNvbHVtbiB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LWxnLXJvdy1yZXZlcnNlIHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2UgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LWxnLWNvbHVtbi1yZXZlcnNlIHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2UgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LWxnLXdyYXAge1xcbiAgICAtbXMtZmxleC13cmFwOiB3cmFwICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtd3JhcDogd3JhcCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbGctbm93cmFwIHtcXG4gICAgLW1zLWZsZXgtd3JhcDogbm93cmFwICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtd3JhcDogbm93cmFwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1sZy13cmFwLXJldmVyc2Uge1xcbiAgICAtbXMtZmxleC13cmFwOiB3cmFwLXJldmVyc2UgIWltcG9ydGFudDtcXG4gICAgZmxleC13cmFwOiB3cmFwLXJldmVyc2UgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LWxnLWZpbGwge1xcbiAgICAtbXMtZmxleDogMSAxIGF1dG8gIWltcG9ydGFudDtcXG4gICAgZmxleDogMSAxIGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LWxnLWdyb3ctMCB7XFxuICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAwICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZ3JvdzogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbGctZ3Jvdy0xIHtcXG4gICAgLW1zLWZsZXgtcG9zaXRpdmU6IDEgIWltcG9ydGFudDtcXG4gICAgZmxleC1ncm93OiAxICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1sZy1zaHJpbmstMCB7XFxuICAgIC1tcy1mbGV4LW5lZ2F0aXZlOiAwICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtc2hyaW5rOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1sZy1zaHJpbmstMSB7XFxuICAgIC1tcy1mbGV4LW5lZ2F0aXZlOiAxICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtc2hyaW5rOiAxICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuanVzdGlmeS1jb250ZW50LWxnLXN0YXJ0IHtcXG4gICAgLW1zLWZsZXgtcGFjazogc3RhcnQgIWltcG9ydGFudDtcXG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuanVzdGlmeS1jb250ZW50LWxnLWVuZCB7XFxuICAgIC1tcy1mbGV4LXBhY2s6IGVuZCAhaW1wb3J0YW50O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuanVzdGlmeS1jb250ZW50LWxnLWNlbnRlciB7XFxuICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmp1c3RpZnktY29udGVudC1sZy1iZXR3ZWVuIHtcXG4gICAgLW1zLWZsZXgtcGFjazoganVzdGlmeSAhaW1wb3J0YW50O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW4gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQtbGctYXJvdW5kIHtcXG4gICAgLW1zLWZsZXgtcGFjazogZGlzdHJpYnV0ZSAhaW1wb3J0YW50O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLWxnLXN0YXJ0IHtcXG4gICAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0ICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24taXRlbXMtbGctZW5kIHtcXG4gICAgLW1zLWZsZXgtYWxpZ246IGVuZCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1pdGVtczogZmxleC1lbmQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1pdGVtcy1sZy1jZW50ZXIge1xcbiAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1pdGVtcy1sZy1iYXNlbGluZSB7XFxuICAgIC1tcy1mbGV4LWFsaWduOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1pdGVtcy1sZy1zdHJldGNoIHtcXG4gICAgLW1zLWZsZXgtYWxpZ246IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gICAgYWxpZ24taXRlbXM6IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LWxnLXN0YXJ0IHtcXG4gICAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdGFydCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tY29udGVudC1sZy1lbmQge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IGVuZCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBmbGV4LWVuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQtbGctY2VudGVyIHtcXG4gICAgLW1zLWZsZXgtbGluZS1wYWNrOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tY29udGVudC1sZy1iZXR3ZWVuIHtcXG4gICAgLW1zLWZsZXgtbGluZS1wYWNrOiBqdXN0aWZ5ICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW4gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LWxnLWFyb3VuZCB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZGlzdHJpYnV0ZSAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LWxnLXN0cmV0Y2gge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gICAgYWxpZ24tY29udGVudDogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYtbGctYXV0byB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGF1dG8gIWltcG9ydGFudDtcXG4gICAgYWxpZ24tc2VsZjogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYtbGctc3RhcnQge1xcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBzdGFydCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi1sZy1lbmQge1xcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBlbmQgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tc2VsZjogZmxleC1lbmQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1zZWxmLWxnLWNlbnRlciB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1zZWxmLWxnLWJhc2VsaW5lIHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogYmFzZWxpbmUgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tc2VsZjogYmFzZWxpbmUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1zZWxmLWxnLXN0cmV0Y2gge1xcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBzdHJldGNoICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xcbiAgLmZsZXgteGwtcm93IHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3cgIWltcG9ydGFudDtcXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdyAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgteGwtY29sdW1uIHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4gIWltcG9ydGFudDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbiAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgteGwtcm93LXJldmVyc2Uge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgteGwtY29sdW1uLXJldmVyc2Uge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgteGwtd3JhcCB7XFxuICAgIC1tcy1mbGV4LXdyYXA6IHdyYXAgIWltcG9ydGFudDtcXG4gICAgZmxleC13cmFwOiB3cmFwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC14bC1ub3dyYXAge1xcbiAgICAtbXMtZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDtcXG4gICAgZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LXhsLXdyYXAtcmV2ZXJzZSB7XFxuICAgIC1tcy1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgICBmbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgteGwtZmlsbCB7XFxuICAgIC1tcy1mbGV4OiAxIDEgYXV0byAhaW1wb3J0YW50O1xcbiAgICBmbGV4OiAxIDEgYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgteGwtZ3Jvdy0wIHtcXG4gICAgLW1zLWZsZXgtcG9zaXRpdmU6IDAgIWltcG9ydGFudDtcXG4gICAgZmxleC1ncm93OiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC14bC1ncm93LTEge1xcbiAgICAtbXMtZmxleC1wb3NpdGl2ZTogMSAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWdyb3c6IDEgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LXhsLXNocmluay0wIHtcXG4gICAgLW1zLWZsZXgtbmVnYXRpdmU6IDAgIWltcG9ydGFudDtcXG4gICAgZmxleC1zaHJpbms6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LXhsLXNocmluay0xIHtcXG4gICAgLW1zLWZsZXgtbmVnYXRpdmU6IDEgIWltcG9ydGFudDtcXG4gICAgZmxleC1zaHJpbms6IDEgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQteGwtc3RhcnQge1xcbiAgICAtbXMtZmxleC1wYWNrOiBzdGFydCAhaW1wb3J0YW50O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQteGwtZW5kIHtcXG4gICAgLW1zLWZsZXgtcGFjazogZW5kICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQteGwtY2VudGVyIHtcXG4gICAgLW1zLWZsZXgtcGFjazogY2VudGVyICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuanVzdGlmeS1jb250ZW50LXhsLWJldHdlZW4ge1xcbiAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5ICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmp1c3RpZnktY29udGVudC14bC1hcm91bmQge1xcbiAgICAtbXMtZmxleC1wYWNrOiBkaXN0cmlidXRlICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24taXRlbXMteGwtc3RhcnQge1xcbiAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQgIWltcG9ydGFudDtcXG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1pdGVtcy14bC1lbmQge1xcbiAgICAtbXMtZmxleC1hbGlnbjogZW5kICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLXhsLWNlbnRlciB7XFxuICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLXhsLWJhc2VsaW5lIHtcXG4gICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLXhsLXN0cmV0Y2gge1xcbiAgICAtbXMtZmxleC1hbGlnbjogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQteGwtc3RhcnQge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IHN0YXJ0ICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LXhsLWVuZCB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZW5kICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tY29udGVudC14bC1jZW50ZXIge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LXhsLWJldHdlZW4ge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IGp1c3RpZnkgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQteGwtYXJvdW5kIHtcXG4gICAgLW1zLWZsZXgtbGluZS1wYWNrOiBkaXN0cmlidXRlICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQteGwtc3RyZXRjaCB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBzdHJldGNoICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi14bC1hdXRvIHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogYXV0byAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi14bC1zdGFydCB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IHN0YXJ0ICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1zZWxmLXhsLWVuZCB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGVuZCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYteGwtY2VudGVyIHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYteGwtYmFzZWxpbmUge1xcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYteGwtc3RyZXRjaCB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gICAgYWxpZ24tc2VsZjogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG4uZmxvYXQtbGVmdCB7XFxuICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZmxvYXQtcmlnaHQge1xcbiAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5mbG9hdC1ub25lIHtcXG4gIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLmZsb2F0LXNtLWxlZnQge1xcbiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsb2F0LXNtLXJpZ2h0IHtcXG4gICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxvYXQtc20tbm9uZSB7XFxuICAgIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLmZsb2F0LW1kLWxlZnQge1xcbiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsb2F0LW1kLXJpZ2h0IHtcXG4gICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxvYXQtbWQtbm9uZSB7XFxuICAgIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xcbiAgLmZsb2F0LWxnLWxlZnQge1xcbiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsb2F0LWxnLXJpZ2h0IHtcXG4gICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxvYXQtbGctbm9uZSB7XFxuICAgIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC5mbG9hdC14bC1sZWZ0IHtcXG4gICAgZmxvYXQ6IGxlZnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbG9hdC14bC1yaWdodCB7XFxuICAgIGZsb2F0OiByaWdodCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsb2F0LXhsLW5vbmUge1xcbiAgICBmbG9hdDogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG4ub3ZlcmZsb3ctYXV0byB7XFxuICBvdmVyZmxvdzogYXV0byAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3ZlcmZsb3ctaGlkZGVuIHtcXG4gIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcXG59XFxuXFxuLnBvc2l0aW9uLXN0YXRpYyB7XFxuICBwb3NpdGlvbjogc3RhdGljICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wb3NpdGlvbi1yZWxhdGl2ZSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcXG59XFxuXFxuLnBvc2l0aW9uLWFic29sdXRlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucG9zaXRpb24tZml4ZWQge1xcbiAgcG9zaXRpb246IGZpeGVkICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wb3NpdGlvbi1zdGlja3kge1xcbiAgcG9zaXRpb246IC13ZWJraXQtc3RpY2t5ICFpbXBvcnRhbnQ7XFxuICBwb3NpdGlvbjogc3RpY2t5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5maXhlZC10b3Age1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgdG9wOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBsZWZ0OiAwO1xcbiAgei1pbmRleDogMTAzMDtcXG59XFxuXFxuLmZpeGVkLWJvdHRvbSB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICB6LWluZGV4OiAxMDMwO1xcbn1cXG5cXG5Ac3VwcG9ydHMgKChwb3NpdGlvbjogLXdlYmtpdC1zdGlja3kpIG9yIChwb3NpdGlvbjogc3RpY2t5KSkge1xcbiAgLnN0aWNreS10b3Age1xcbiAgICBwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7XFxuICAgIHBvc2l0aW9uOiBzdGlja3k7XFxuICAgIHRvcDogMDtcXG4gICAgei1pbmRleDogMTAyMDtcXG4gIH1cXG59XFxuXFxuLnNyLW9ubHkge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6IDFweDtcXG4gIGhlaWdodDogMXB4O1xcbiAgcGFkZGluZzogMDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBjbGlwOiByZWN0KDAsIDAsIDAsIDApO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIGJvcmRlcjogMDtcXG59XFxuXFxuLnNyLW9ubHktZm9jdXNhYmxlOmFjdGl2ZSwgLnNyLW9ubHktZm9jdXNhYmxlOmZvY3VzIHtcXG4gIHBvc2l0aW9uOiBzdGF0aWM7XFxuICB3aWR0aDogYXV0bztcXG4gIGhlaWdodDogYXV0bztcXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xcbiAgY2xpcDogYXV0bztcXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XFxufVxcblxcbi5zaGFkb3ctc20ge1xcbiAgYm94LXNoYWRvdzogMCAwLjEyNXJlbSAwLjI1cmVtIHJnYmEoMCwgMCwgMCwgMC4wNzUpICFpbXBvcnRhbnQ7XFxufVxcblxcbi5zaGFkb3cge1xcbiAgYm94LXNoYWRvdzogMCAwLjVyZW0gMXJlbSByZ2JhKDAsIDAsIDAsIDAuMTUpICFpbXBvcnRhbnQ7XFxufVxcblxcbi5zaGFkb3ctbGcge1xcbiAgYm94LXNoYWRvdzogMCAxcmVtIDNyZW0gcmdiYSgwLCAwLCAwLCAwLjE3NSkgIWltcG9ydGFudDtcXG59XFxuXFxuLnNoYWRvdy1ub25lIHtcXG4gIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuXFxuLnctMjUge1xcbiAgd2lkdGg6IDI1JSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udy01MCB7XFxuICB3aWR0aDogNTAlICFpbXBvcnRhbnQ7XFxufVxcblxcbi53LTc1IHtcXG4gIHdpZHRoOiA3NSUgIWltcG9ydGFudDtcXG59XFxuXFxuLnctMTAwIHtcXG4gIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XFxufVxcblxcbi53LWF1dG8ge1xcbiAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDtcXG59XFxuXFxuLmgtMjUge1xcbiAgaGVpZ2h0OiAyNSUgIWltcG9ydGFudDtcXG59XFxuXFxuLmgtNTAge1xcbiAgaGVpZ2h0OiA1MCUgIWltcG9ydGFudDtcXG59XFxuXFxuLmgtNzUge1xcbiAgaGVpZ2h0OiA3NSUgIWltcG9ydGFudDtcXG59XFxuXFxuLmgtMTAwIHtcXG4gIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaC1hdXRvIHtcXG4gIGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubXctMTAwIHtcXG4gIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWgtMTAwIHtcXG4gIG1heC1oZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcXG59XFxuXFxuLm1pbi12dy0xMDAge1xcbiAgbWluLXdpZHRoOiAxMDB2dyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWluLXZoLTEwMCB7XFxuICBtaW4taGVpZ2h0OiAxMDB2aCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udnctMTAwIHtcXG4gIHdpZHRoOiAxMDB2dyAhaW1wb3J0YW50O1xcbn1cXG5cXG4udmgtMTAwIHtcXG4gIGhlaWdodDogMTAwdmggIWltcG9ydGFudDtcXG59XFxuXFxuLnN0cmV0Y2hlZC1saW5rOjphZnRlciB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICB6LWluZGV4OiAxO1xcbiAgcG9pbnRlci1ldmVudHM6IGF1dG87XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7XFxufVxcblxcbi5tLTAge1xcbiAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC0wLFxcbi5teS0wIHtcXG4gIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm1yLTAsXFxuLm14LTAge1xcbiAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tYi0wLFxcbi5teS0wIHtcXG4gIG1hcmdpbi1ib3R0b206IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLTAsXFxuLm14LTAge1xcbiAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm0tMSB7XFxuICBtYXJnaW46IDAuMjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm10LTEsXFxuLm15LTEge1xcbiAgbWFyZ2luLXRvcDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubXItMSxcXG4ubXgtMSB7XFxuICBtYXJnaW4tcmlnaHQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1iLTEsXFxuLm15LTEge1xcbiAgbWFyZ2luLWJvdHRvbTogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWwtMSxcXG4ubXgtMSB7XFxuICBtYXJnaW4tbGVmdDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubS0yIHtcXG4gIG1hcmdpbjogMC41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC0yLFxcbi5teS0yIHtcXG4gIG1hcmdpbi10b3A6IDAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubXItMixcXG4ubXgtMiB7XFxuICBtYXJnaW4tcmlnaHQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWItMixcXG4ubXktMiB7XFxuICBtYXJnaW4tYm90dG9tOiAwLjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLTIsXFxuLm14LTIge1xcbiAgbWFyZ2luLWxlZnQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubS0zIHtcXG4gIG1hcmdpbjogMXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubXQtMyxcXG4ubXktMyB7XFxuICBtYXJnaW4tdG9wOiAxcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tci0zLFxcbi5teC0zIHtcXG4gIG1hcmdpbi1yaWdodDogMXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWItMyxcXG4ubXktMyB7XFxuICBtYXJnaW4tYm90dG9tOiAxcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tbC0zLFxcbi5teC0zIHtcXG4gIG1hcmdpbi1sZWZ0OiAxcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tLTQge1xcbiAgbWFyZ2luOiAxLjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm10LTQsXFxuLm15LTQge1xcbiAgbWFyZ2luLXRvcDogMS41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tci00LFxcbi5teC00IHtcXG4gIG1hcmdpbi1yaWdodDogMS41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tYi00LFxcbi5teS00IHtcXG4gIG1hcmdpbi1ib3R0b206IDEuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWwtNCxcXG4ubXgtNCB7XFxuICBtYXJnaW4tbGVmdDogMS41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tLTUge1xcbiAgbWFyZ2luOiAzcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC01LFxcbi5teS01IHtcXG4gIG1hcmdpbi10b3A6IDNyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1yLTUsXFxuLm14LTUge1xcbiAgbWFyZ2luLXJpZ2h0OiAzcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tYi01LFxcbi5teS01IHtcXG4gIG1hcmdpbi1ib3R0b206IDNyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLTUsXFxuLm14LTUge1xcbiAgbWFyZ2luLWxlZnQ6IDNyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLnAtMCB7XFxuICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdC0wLFxcbi5weS0wIHtcXG4gIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wci0wLFxcbi5weC0wIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnBiLTAsXFxuLnB5LTAge1xcbiAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnBsLTAsXFxuLnB4LTAge1xcbiAgcGFkZGluZy1sZWZ0OiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wLTEge1xcbiAgcGFkZGluZzogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHQtMSxcXG4ucHktMSB7XFxuICBwYWRkaW5nLXRvcDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHItMSxcXG4ucHgtMSB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wYi0xLFxcbi5weS0xIHtcXG4gIHBhZGRpbmctYm90dG9tOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wbC0xLFxcbi5weC0xIHtcXG4gIHBhZGRpbmctbGVmdDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucC0yIHtcXG4gIHBhZGRpbmc6IDAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHQtMixcXG4ucHktMiB7XFxuICBwYWRkaW5nLXRvcDogMC41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wci0yLFxcbi5weC0yIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGItMixcXG4ucHktMiB7XFxuICBwYWRkaW5nLWJvdHRvbTogMC41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wbC0yLFxcbi5weC0yIHtcXG4gIHBhZGRpbmctbGVmdDogMC41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wLTMge1xcbiAgcGFkZGluZzogMXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHQtMyxcXG4ucHktMyB7XFxuICBwYWRkaW5nLXRvcDogMXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHItMyxcXG4ucHgtMyB7XFxuICBwYWRkaW5nLXJpZ2h0OiAxcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wYi0zLFxcbi5weS0zIHtcXG4gIHBhZGRpbmctYm90dG9tOiAxcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wbC0zLFxcbi5weC0zIHtcXG4gIHBhZGRpbmctbGVmdDogMXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucC00IHtcXG4gIHBhZGRpbmc6IDEuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHQtNCxcXG4ucHktNCB7XFxuICBwYWRkaW5nLXRvcDogMS41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wci00LFxcbi5weC00IHtcXG4gIHBhZGRpbmctcmlnaHQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGItNCxcXG4ucHktNCB7XFxuICBwYWRkaW5nLWJvdHRvbTogMS41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wbC00LFxcbi5weC00IHtcXG4gIHBhZGRpbmctbGVmdDogMS41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wLTUge1xcbiAgcGFkZGluZzogM3JlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHQtNSxcXG4ucHktNSB7XFxuICBwYWRkaW5nLXRvcDogM3JlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHItNSxcXG4ucHgtNSB7XFxuICBwYWRkaW5nLXJpZ2h0OiAzcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wYi01LFxcbi5weS01IHtcXG4gIHBhZGRpbmctYm90dG9tOiAzcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wbC01LFxcbi5weC01IHtcXG4gIHBhZGRpbmctbGVmdDogM3JlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubS1uMSB7XFxuICBtYXJnaW46IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC1uMSxcXG4ubXktbjEge1xcbiAgbWFyZ2luLXRvcDogLTAuMjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1yLW4xLFxcbi5teC1uMSB7XFxuICBtYXJnaW4tcmlnaHQ6IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tYi1uMSxcXG4ubXktbjEge1xcbiAgbWFyZ2luLWJvdHRvbTogLTAuMjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLW4xLFxcbi5teC1uMSB7XFxuICBtYXJnaW4tbGVmdDogLTAuMjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm0tbjIge1xcbiAgbWFyZ2luOiAtMC41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC1uMixcXG4ubXktbjIge1xcbiAgbWFyZ2luLXRvcDogLTAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubXItbjIsXFxuLm14LW4yIHtcXG4gIG1hcmdpbi1yaWdodDogLTAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWItbjIsXFxuLm15LW4yIHtcXG4gIG1hcmdpbi1ib3R0b206IC0wLjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLW4yLFxcbi5teC1uMiB7XFxuICBtYXJnaW4tbGVmdDogLTAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubS1uMyB7XFxuICBtYXJnaW46IC0xcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC1uMyxcXG4ubXktbjMge1xcbiAgbWFyZ2luLXRvcDogLTFyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1yLW4zLFxcbi5teC1uMyB7XFxuICBtYXJnaW4tcmlnaHQ6IC0xcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tYi1uMyxcXG4ubXktbjMge1xcbiAgbWFyZ2luLWJvdHRvbTogLTFyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLW4zLFxcbi5teC1uMyB7XFxuICBtYXJnaW4tbGVmdDogLTFyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm0tbjQge1xcbiAgbWFyZ2luOiAtMS41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC1uNCxcXG4ubXktbjQge1xcbiAgbWFyZ2luLXRvcDogLTEuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubXItbjQsXFxuLm14LW40IHtcXG4gIG1hcmdpbi1yaWdodDogLTEuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWItbjQsXFxuLm15LW40IHtcXG4gIG1hcmdpbi1ib3R0b206IC0xLjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLW40LFxcbi5teC1uNCB7XFxuICBtYXJnaW4tbGVmdDogLTEuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubS1uNSB7XFxuICBtYXJnaW46IC0zcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC1uNSxcXG4ubXktbjUge1xcbiAgbWFyZ2luLXRvcDogLTNyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1yLW41LFxcbi5teC1uNSB7XFxuICBtYXJnaW4tcmlnaHQ6IC0zcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tYi1uNSxcXG4ubXktbjUge1xcbiAgbWFyZ2luLWJvdHRvbTogLTNyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLW41LFxcbi5teC1uNSB7XFxuICBtYXJnaW4tbGVmdDogLTNyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm0tYXV0byB7XFxuICBtYXJnaW46IGF1dG8gIWltcG9ydGFudDtcXG59XFxuXFxuLm10LWF1dG8sXFxuLm15LWF1dG8ge1xcbiAgbWFyZ2luLXRvcDogYXV0byAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubXItYXV0byxcXG4ubXgtYXV0byB7XFxuICBtYXJnaW4tcmlnaHQ6IGF1dG8gIWltcG9ydGFudDtcXG59XFxuXFxuLm1iLWF1dG8sXFxuLm15LWF1dG8ge1xcbiAgbWFyZ2luLWJvdHRvbTogYXV0byAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWwtYXV0byxcXG4ubXgtYXV0byB7XFxuICBtYXJnaW4tbGVmdDogYXV0byAhaW1wb3J0YW50O1xcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIHtcXG4gIC5tLXNtLTAge1xcbiAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1zbS0wLFxcbiAgLm15LXNtLTAge1xcbiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItc20tMCxcXG4gIC5teC1zbS0wIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItc20tMCxcXG4gIC5teS1zbS0wIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLXNtLTAsXFxuICAubXgtc20tMCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1zbS0xIHtcXG4gICAgbWFyZ2luOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtc20tMSxcXG4gIC5teS1zbS0xIHtcXG4gICAgbWFyZ2luLXRvcDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXNtLTEsXFxuICAubXgtc20tMSB7XFxuICAgIG1hcmdpbi1yaWdodDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXNtLTEsXFxuICAubXktc20tMSB7XFxuICAgIG1hcmdpbi1ib3R0b206IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1zbS0xLFxcbiAgLm14LXNtLTEge1xcbiAgICBtYXJnaW4tbGVmdDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tc20tMiB7XFxuICAgIG1hcmdpbjogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtc20tMixcXG4gIC5teS1zbS0yIHtcXG4gICAgbWFyZ2luLXRvcDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItc20tMixcXG4gIC5teC1zbS0yIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1zbS0yLFxcbiAgLm15LXNtLTIge1xcbiAgICBtYXJnaW4tYm90dG9tOiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1zbS0yLFxcbiAgLm14LXNtLTIge1xcbiAgICBtYXJnaW4tbGVmdDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1zbS0zIHtcXG4gICAgbWFyZ2luOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtc20tMyxcXG4gIC5teS1zbS0zIHtcXG4gICAgbWFyZ2luLXRvcDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXNtLTMsXFxuICAubXgtc20tMyB7XFxuICAgIG1hcmdpbi1yaWdodDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXNtLTMsXFxuICAubXktc20tMyB7XFxuICAgIG1hcmdpbi1ib3R0b206IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1zbS0zLFxcbiAgLm14LXNtLTMge1xcbiAgICBtYXJnaW4tbGVmdDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tc20tNCB7XFxuICAgIG1hcmdpbjogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtc20tNCxcXG4gIC5teS1zbS00IHtcXG4gICAgbWFyZ2luLXRvcDogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItc20tNCxcXG4gIC5teC1zbS00IHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1zbS00LFxcbiAgLm15LXNtLTQge1xcbiAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1zbS00LFxcbiAgLm14LXNtLTQge1xcbiAgICBtYXJnaW4tbGVmdDogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1zbS01IHtcXG4gICAgbWFyZ2luOiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtc20tNSxcXG4gIC5teS1zbS01IHtcXG4gICAgbWFyZ2luLXRvcDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXNtLTUsXFxuICAubXgtc20tNSB7XFxuICAgIG1hcmdpbi1yaWdodDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXNtLTUsXFxuICAubXktc20tNSB7XFxuICAgIG1hcmdpbi1ib3R0b206IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1zbS01LFxcbiAgLm14LXNtLTUge1xcbiAgICBtYXJnaW4tbGVmdDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnAtc20tMCB7XFxuICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC1zbS0wLFxcbiAgLnB5LXNtLTAge1xcbiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLXNtLTAsXFxuICAucHgtc20tMCB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYi1zbS0wLFxcbiAgLnB5LXNtLTAge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLXNtLTAsXFxuICAucHgtc20tMCB7XFxuICAgIHBhZGRpbmctbGVmdDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnAtc20tMSB7XFxuICAgIHBhZGRpbmc6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC1zbS0xLFxcbiAgLnB5LXNtLTEge1xcbiAgICBwYWRkaW5nLXRvcDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLXNtLTEsXFxuICAucHgtc20tMSB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYi1zbS0xLFxcbiAgLnB5LXNtLTEge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLXNtLTEsXFxuICAucHgtc20tMSB7XFxuICAgIHBhZGRpbmctbGVmdDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnAtc20tMiB7XFxuICAgIHBhZGRpbmc6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnB0LXNtLTIsXFxuICAucHktc20tMiB7XFxuICAgIHBhZGRpbmctdG9wOiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci1zbS0yLFxcbiAgLnB4LXNtLTIge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYi1zbS0yLFxcbiAgLnB5LXNtLTIge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGwtc20tMixcXG4gIC5weC1zbS0yIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLXNtLTMge1xcbiAgICBwYWRkaW5nOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQtc20tMyxcXG4gIC5weS1zbS0zIHtcXG4gICAgcGFkZGluZy10b3A6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci1zbS0zLFxcbiAgLnB4LXNtLTMge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGItc20tMyxcXG4gIC5weS1zbS0zIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC1zbS0zLFxcbiAgLnB4LXNtLTMge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLXNtLTQge1xcbiAgICBwYWRkaW5nOiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC1zbS00LFxcbiAgLnB5LXNtLTQge1xcbiAgICBwYWRkaW5nLXRvcDogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHItc20tNCxcXG4gIC5weC1zbS00IHtcXG4gICAgcGFkZGluZy1yaWdodDogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGItc20tNCxcXG4gIC5weS1zbS00IHtcXG4gICAgcGFkZGluZy1ib3R0b206IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLXNtLTQsXFxuICAucHgtc20tNCB7XFxuICAgIHBhZGRpbmctbGVmdDogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC1zbS01IHtcXG4gICAgcGFkZGluZzogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnB0LXNtLTUsXFxuICAucHktc20tNSB7XFxuICAgIHBhZGRpbmctdG9wOiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHItc20tNSxcXG4gIC5weC1zbS01IHtcXG4gICAgcGFkZGluZy1yaWdodDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLXNtLTUsXFxuICAucHktc20tNSB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGwtc20tNSxcXG4gIC5weC1zbS01IHtcXG4gICAgcGFkZGluZy1sZWZ0OiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1zbS1uMSB7XFxuICAgIG1hcmdpbjogLTAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1zbS1uMSxcXG4gIC5teS1zbS1uMSB7XFxuICAgIG1hcmdpbi10b3A6IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItc20tbjEsXFxuICAubXgtc20tbjEge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItc20tbjEsXFxuICAubXktc20tbjEge1xcbiAgICBtYXJnaW4tYm90dG9tOiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLXNtLW4xLFxcbiAgLm14LXNtLW4xIHtcXG4gICAgbWFyZ2luLWxlZnQ6IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1zbS1uMiB7XFxuICAgIG1hcmdpbjogLTAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXNtLW4yLFxcbiAgLm15LXNtLW4yIHtcXG4gICAgbWFyZ2luLXRvcDogLTAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXNtLW4yLFxcbiAgLm14LXNtLW4yIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItc20tbjIsXFxuICAubXktc20tbjIge1xcbiAgICBtYXJnaW4tYm90dG9tOiAtMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtc20tbjIsXFxuICAubXgtc20tbjIge1xcbiAgICBtYXJnaW4tbGVmdDogLTAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tc20tbjMge1xcbiAgICBtYXJnaW46IC0xcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtc20tbjMsXFxuICAubXktc20tbjMge1xcbiAgICBtYXJnaW4tdG9wOiAtMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXNtLW4zLFxcbiAgLm14LXNtLW4zIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXNtLW4zLFxcbiAgLm15LXNtLW4zIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1zbS1uMyxcXG4gIC5teC1zbS1uMyB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tc20tbjQge1xcbiAgICBtYXJnaW46IC0xLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1zbS1uNCxcXG4gIC5teS1zbS1uNCB7XFxuICAgIG1hcmdpbi10b3A6IC0xLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1zbS1uNCxcXG4gIC5teC1zbS1uNCB7XFxuICAgIG1hcmdpbi1yaWdodDogLTEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXNtLW40LFxcbiAgLm15LXNtLW40IHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLXNtLW40LFxcbiAgLm14LXNtLW40IHtcXG4gICAgbWFyZ2luLWxlZnQ6IC0xLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLXNtLW41IHtcXG4gICAgbWFyZ2luOiAtM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXNtLW41LFxcbiAgLm15LXNtLW41IHtcXG4gICAgbWFyZ2luLXRvcDogLTNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1zbS1uNSxcXG4gIC5teC1zbS1uNSB7XFxuICAgIG1hcmdpbi1yaWdodDogLTNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1zbS1uNSxcXG4gIC5teS1zbS1uNSB7XFxuICAgIG1hcmdpbi1ib3R0b206IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtc20tbjUsXFxuICAubXgtc20tbjUge1xcbiAgICBtYXJnaW4tbGVmdDogLTNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLXNtLWF1dG8ge1xcbiAgICBtYXJnaW46IGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1zbS1hdXRvLFxcbiAgLm15LXNtLWF1dG8ge1xcbiAgICBtYXJnaW4tdG9wOiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItc20tYXV0byxcXG4gIC5teC1zbS1hdXRvIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItc20tYXV0byxcXG4gIC5teS1zbS1hdXRvIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLXNtLWF1dG8sXFxuICAubXgtc20tYXV0byB7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLm0tbWQtMCB7XFxuICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LW1kLTAsXFxuICAubXktbWQtMCB7XFxuICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1tZC0wLFxcbiAgLm14LW1kLTAge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1tZC0wLFxcbiAgLm15LW1kLTAge1xcbiAgICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbWQtMCxcXG4gIC5teC1tZC0wIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLW1kLTEge1xcbiAgICBtYXJnaW46IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1tZC0xLFxcbiAgLm15LW1kLTEge1xcbiAgICBtYXJnaW4tdG9wOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItbWQtMSxcXG4gIC5teC1tZC0xIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbWQtMSxcXG4gIC5teS1tZC0xIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLW1kLTEsXFxuICAubXgtbWQtMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1tZC0yIHtcXG4gICAgbWFyZ2luOiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1tZC0yLFxcbiAgLm15LW1kLTIge1xcbiAgICBtYXJnaW4tdG9wOiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1tZC0yLFxcbiAgLm14LW1kLTIge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLW1kLTIsXFxuICAubXktbWQtMiB7XFxuICAgIG1hcmdpbi1ib3R0b206IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLW1kLTIsXFxuICAubXgtbWQtMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLW1kLTMge1xcbiAgICBtYXJnaW46IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1tZC0zLFxcbiAgLm15LW1kLTMge1xcbiAgICBtYXJnaW4tdG9wOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItbWQtMyxcXG4gIC5teC1tZC0zIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbWQtMyxcXG4gIC5teS1tZC0zIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLW1kLTMsXFxuICAubXgtbWQtMyB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1tZC00IHtcXG4gICAgbWFyZ2luOiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1tZC00LFxcbiAgLm15LW1kLTQge1xcbiAgICBtYXJnaW4tdG9wOiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1tZC00LFxcbiAgLm14LW1kLTQge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLW1kLTQsXFxuICAubXktbWQtNCB7XFxuICAgIG1hcmdpbi1ib3R0b206IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLW1kLTQsXFxuICAubXgtbWQtNCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLW1kLTUge1xcbiAgICBtYXJnaW46IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1tZC01LFxcbiAgLm15LW1kLTUge1xcbiAgICBtYXJnaW4tdG9wOiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItbWQtNSxcXG4gIC5teC1tZC01IHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbWQtNSxcXG4gIC5teS1tZC01IHtcXG4gICAgbWFyZ2luLWJvdHRvbTogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLW1kLTUsXFxuICAubXgtbWQtNSB7XFxuICAgIG1hcmdpbi1sZWZ0OiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC1tZC0wIHtcXG4gICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnB0LW1kLTAsXFxuICAucHktbWQtMCB7XFxuICAgIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHItbWQtMCxcXG4gIC5weC1tZC0wIHtcXG4gICAgcGFkZGluZy1yaWdodDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLW1kLTAsXFxuICAucHktbWQtMCB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGwtbWQtMCxcXG4gIC5weC1tZC0wIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC1tZC0xIHtcXG4gICAgcGFkZGluZzogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnB0LW1kLTEsXFxuICAucHktbWQtMSB7XFxuICAgIHBhZGRpbmctdG9wOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHItbWQtMSxcXG4gIC5weC1tZC0xIHtcXG4gICAgcGFkZGluZy1yaWdodDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLW1kLTEsXFxuICAucHktbWQtMSB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGwtbWQtMSxcXG4gIC5weC1tZC0xIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC1tZC0yIHtcXG4gICAgcGFkZGluZzogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQtbWQtMixcXG4gIC5weS1tZC0yIHtcXG4gICAgcGFkZGluZy10b3A6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLW1kLTIsXFxuICAucHgtbWQtMiB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLW1kLTIsXFxuICAucHktbWQtMiB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC1tZC0yLFxcbiAgLnB4LW1kLTIge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnAtbWQtMyB7XFxuICAgIHBhZGRpbmc6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC1tZC0zLFxcbiAgLnB5LW1kLTMge1xcbiAgICBwYWRkaW5nLXRvcDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLW1kLTMsXFxuICAucHgtbWQtMyB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYi1tZC0zLFxcbiAgLnB5LW1kLTMge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLW1kLTMsXFxuICAucHgtbWQtMyB7XFxuICAgIHBhZGRpbmctbGVmdDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnAtbWQtNCB7XFxuICAgIHBhZGRpbmc6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnB0LW1kLTQsXFxuICAucHktbWQtNCB7XFxuICAgIHBhZGRpbmctdG9wOiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci1tZC00LFxcbiAgLnB4LW1kLTQge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYi1tZC00LFxcbiAgLnB5LW1kLTQge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGwtbWQtNCxcXG4gIC5weC1tZC00IHtcXG4gICAgcGFkZGluZy1sZWZ0OiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLW1kLTUge1xcbiAgICBwYWRkaW5nOiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQtbWQtNSxcXG4gIC5weS1tZC01IHtcXG4gICAgcGFkZGluZy10b3A6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci1tZC01LFxcbiAgLnB4LW1kLTUge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGItbWQtNSxcXG4gIC5weS1tZC01IHtcXG4gICAgcGFkZGluZy1ib3R0b206IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC1tZC01LFxcbiAgLnB4LW1kLTUge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLW1kLW4xIHtcXG4gICAgbWFyZ2luOiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LW1kLW4xLFxcbiAgLm15LW1kLW4xIHtcXG4gICAgbWFyZ2luLXRvcDogLTAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1tZC1uMSxcXG4gIC5teC1tZC1uMSB7XFxuICAgIG1hcmdpbi1yaWdodDogLTAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1tZC1uMSxcXG4gIC5teS1tZC1uMSB7XFxuICAgIG1hcmdpbi1ib3R0b206IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbWQtbjEsXFxuICAubXgtbWQtbjEge1xcbiAgICBtYXJnaW4tbGVmdDogLTAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLW1kLW4yIHtcXG4gICAgbWFyZ2luOiAtMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtbWQtbjIsXFxuICAubXktbWQtbjIge1xcbiAgICBtYXJnaW4tdG9wOiAtMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItbWQtbjIsXFxuICAubXgtbWQtbjIge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1tZC1uMixcXG4gIC5teS1tZC1uMiB7XFxuICAgIG1hcmdpbi1ib3R0b206IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1tZC1uMixcXG4gIC5teC1tZC1uMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1tZC1uMyB7XFxuICAgIG1hcmdpbjogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1tZC1uMyxcXG4gIC5teS1tZC1uMyB7XFxuICAgIG1hcmdpbi10b3A6IC0xcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItbWQtbjMsXFxuICAubXgtbWQtbjMge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0xcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbWQtbjMsXFxuICAubXktbWQtbjMge1xcbiAgICBtYXJnaW4tYm90dG9tOiAtMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLW1kLW4zLFxcbiAgLm14LW1kLW4zIHtcXG4gICAgbWFyZ2luLWxlZnQ6IC0xcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1tZC1uNCB7XFxuICAgIG1hcmdpbjogLTEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LW1kLW40LFxcbiAgLm15LW1kLW40IHtcXG4gICAgbWFyZ2luLXRvcDogLTEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLW1kLW40LFxcbiAgLm14LW1kLW40IHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbWQtbjQsXFxuICAubXktbWQtbjQge1xcbiAgICBtYXJnaW4tYm90dG9tOiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbWQtbjQsXFxuICAubXgtbWQtbjQge1xcbiAgICBtYXJnaW4tbGVmdDogLTEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tbWQtbjUge1xcbiAgICBtYXJnaW46IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtbWQtbjUsXFxuICAubXktbWQtbjUge1xcbiAgICBtYXJnaW4tdG9wOiAtM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLW1kLW41LFxcbiAgLm14LW1kLW41IHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLW1kLW41LFxcbiAgLm15LW1kLW41IHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1tZC1uNSxcXG4gIC5teC1tZC1uNSB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tbWQtYXV0byB7XFxuICAgIG1hcmdpbjogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LW1kLWF1dG8sXFxuICAubXktbWQtYXV0byB7XFxuICAgIG1hcmdpbi10b3A6IGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1tZC1hdXRvLFxcbiAgLm14LW1kLWF1dG8ge1xcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1tZC1hdXRvLFxcbiAgLm15LW1kLWF1dG8ge1xcbiAgICBtYXJnaW4tYm90dG9tOiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbWQtYXV0byxcXG4gIC5teC1tZC1hdXRvIHtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XFxuICAubS1sZy0wIHtcXG4gICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtbGctMCxcXG4gIC5teS1sZy0wIHtcXG4gICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLWxnLTAsXFxuICAubXgtbGctMCB7XFxuICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLWxnLTAsXFxuICAubXktbGctMCB7XFxuICAgIG1hcmdpbi1ib3R0b206IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1sZy0wLFxcbiAgLm14LWxnLTAge1xcbiAgICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tbGctMSB7XFxuICAgIG1hcmdpbjogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LWxnLTEsXFxuICAubXktbGctMSB7XFxuICAgIG1hcmdpbi10b3A6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1sZy0xLFxcbiAgLm14LWxnLTEge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1sZy0xLFxcbiAgLm15LWxnLTEge1xcbiAgICBtYXJnaW4tYm90dG9tOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbGctMSxcXG4gIC5teC1sZy0xIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLWxnLTIge1xcbiAgICBtYXJnaW46IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LWxnLTIsXFxuICAubXktbGctMiB7XFxuICAgIG1hcmdpbi10b3A6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLWxnLTIsXFxuICAubXgtbGctMiB7XFxuICAgIG1hcmdpbi1yaWdodDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbGctMixcXG4gIC5teS1sZy0yIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbGctMixcXG4gIC5teC1sZy0yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tbGctMyB7XFxuICAgIG1hcmdpbjogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LWxnLTMsXFxuICAubXktbGctMyB7XFxuICAgIG1hcmdpbi10b3A6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1sZy0zLFxcbiAgLm14LWxnLTMge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1sZy0zLFxcbiAgLm15LWxnLTMge1xcbiAgICBtYXJnaW4tYm90dG9tOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbGctMyxcXG4gIC5teC1sZy0zIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLWxnLTQge1xcbiAgICBtYXJnaW46IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LWxnLTQsXFxuICAubXktbGctNCB7XFxuICAgIG1hcmdpbi10b3A6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLWxnLTQsXFxuICAubXgtbGctNCB7XFxuICAgIG1hcmdpbi1yaWdodDogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbGctNCxcXG4gIC5teS1sZy00IHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbGctNCxcXG4gIC5teC1sZy00IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tbGctNSB7XFxuICAgIG1hcmdpbjogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LWxnLTUsXFxuICAubXktbGctNSB7XFxuICAgIG1hcmdpbi10b3A6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1sZy01LFxcbiAgLm14LWxnLTUge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1sZy01LFxcbiAgLm15LWxnLTUge1xcbiAgICBtYXJnaW4tYm90dG9tOiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbGctNSxcXG4gIC5teC1sZy01IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLWxnLTAge1xcbiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQtbGctMCxcXG4gIC5weS1sZy0wIHtcXG4gICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci1sZy0wLFxcbiAgLnB4LWxnLTAge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGItbGctMCxcXG4gIC5weS1sZy0wIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC1sZy0wLFxcbiAgLnB4LWxnLTAge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLWxnLTEge1xcbiAgICBwYWRkaW5nOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQtbGctMSxcXG4gIC5weS1sZy0xIHtcXG4gICAgcGFkZGluZy10b3A6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci1sZy0xLFxcbiAgLnB4LWxnLTEge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGItbGctMSxcXG4gIC5weS1sZy0xIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC1sZy0xLFxcbiAgLnB4LWxnLTEge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLWxnLTIge1xcbiAgICBwYWRkaW5nOiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC1sZy0yLFxcbiAgLnB5LWxnLTIge1xcbiAgICBwYWRkaW5nLXRvcDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHItbGctMixcXG4gIC5weC1sZy0yIHtcXG4gICAgcGFkZGluZy1yaWdodDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGItbGctMixcXG4gIC5weS1sZy0yIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLWxnLTIsXFxuICAucHgtbGctMiB7XFxuICAgIHBhZGRpbmctbGVmdDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC1sZy0zIHtcXG4gICAgcGFkZGluZzogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnB0LWxnLTMsXFxuICAucHktbGctMyB7XFxuICAgIHBhZGRpbmctdG9wOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHItbGctMyxcXG4gIC5weC1sZy0zIHtcXG4gICAgcGFkZGluZy1yaWdodDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLWxnLTMsXFxuICAucHktbGctMyB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGwtbGctMyxcXG4gIC5weC1sZy0zIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC1sZy00IHtcXG4gICAgcGFkZGluZzogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQtbGctNCxcXG4gIC5weS1sZy00IHtcXG4gICAgcGFkZGluZy10b3A6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLWxnLTQsXFxuICAucHgtbGctNCB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLWxnLTQsXFxuICAucHktbGctNCB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC1sZy00LFxcbiAgLnB4LWxnLTQge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnAtbGctNSB7XFxuICAgIHBhZGRpbmc6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC1sZy01LFxcbiAgLnB5LWxnLTUge1xcbiAgICBwYWRkaW5nLXRvcDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLWxnLTUsXFxuICAucHgtbGctNSB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYi1sZy01LFxcbiAgLnB5LWxnLTUge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLWxnLTUsXFxuICAucHgtbGctNSB7XFxuICAgIHBhZGRpbmctbGVmdDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tbGctbjEge1xcbiAgICBtYXJnaW46IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtbGctbjEsXFxuICAubXktbGctbjEge1xcbiAgICBtYXJnaW4tdG9wOiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLWxnLW4xLFxcbiAgLm14LWxnLW4xIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLWxnLW4xLFxcbiAgLm15LWxnLW4xIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1sZy1uMSxcXG4gIC5teC1sZy1uMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tbGctbjIge1xcbiAgICBtYXJnaW46IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1sZy1uMixcXG4gIC5teS1sZy1uMiB7XFxuICAgIG1hcmdpbi10b3A6IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1sZy1uMixcXG4gIC5teC1sZy1uMiB7XFxuICAgIG1hcmdpbi1yaWdodDogLTAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLWxnLW4yLFxcbiAgLm15LWxnLW4yIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLWxnLW4yLFxcbiAgLm14LWxnLW4yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLWxnLW4zIHtcXG4gICAgbWFyZ2luOiAtMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LWxnLW4zLFxcbiAgLm15LWxnLW4zIHtcXG4gICAgbWFyZ2luLXRvcDogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1sZy1uMyxcXG4gIC5teC1sZy1uMyB7XFxuICAgIG1hcmdpbi1yaWdodDogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1sZy1uMyxcXG4gIC5teS1sZy1uMyB7XFxuICAgIG1hcmdpbi1ib3R0b206IC0xcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbGctbjMsXFxuICAubXgtbGctbjMge1xcbiAgICBtYXJnaW4tbGVmdDogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLWxnLW40IHtcXG4gICAgbWFyZ2luOiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtbGctbjQsXFxuICAubXktbGctbjQge1xcbiAgICBtYXJnaW4tdG9wOiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItbGctbjQsXFxuICAubXgtbGctbjQge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0xLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1sZy1uNCxcXG4gIC5teS1sZy1uNCB7XFxuICAgIG1hcmdpbi1ib3R0b206IC0xLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1sZy1uNCxcXG4gIC5teC1sZy1uNCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1sZy1uNSB7XFxuICAgIG1hcmdpbjogLTNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1sZy1uNSxcXG4gIC5teS1sZy1uNSB7XFxuICAgIG1hcmdpbi10b3A6IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItbGctbjUsXFxuICAubXgtbGctbjUge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbGctbjUsXFxuICAubXktbGctbjUge1xcbiAgICBtYXJnaW4tYm90dG9tOiAtM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLWxnLW41LFxcbiAgLm14LWxnLW41IHtcXG4gICAgbWFyZ2luLWxlZnQ6IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1sZy1hdXRvIHtcXG4gICAgbWFyZ2luOiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtbGctYXV0byxcXG4gIC5teS1sZy1hdXRvIHtcXG4gICAgbWFyZ2luLXRvcDogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLWxnLWF1dG8sXFxuICAubXgtbGctYXV0byB7XFxuICAgIG1hcmdpbi1yaWdodDogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLWxnLWF1dG8sXFxuICAubXktbGctYXV0byB7XFxuICAgIG1hcmdpbi1ib3R0b206IGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1sZy1hdXRvLFxcbiAgLm14LWxnLWF1dG8ge1xcbiAgICBtYXJnaW4tbGVmdDogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XFxuICAubS14bC0wIHtcXG4gICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQteGwtMCxcXG4gIC5teS14bC0wIHtcXG4gICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXhsLTAsXFxuICAubXgteGwtMCB7XFxuICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXhsLTAsXFxuICAubXkteGwtMCB7XFxuICAgIG1hcmdpbi1ib3R0b206IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC14bC0wLFxcbiAgLm14LXhsLTAge1xcbiAgICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0teGwtMSB7XFxuICAgIG1hcmdpbjogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXhsLTEsXFxuICAubXkteGwtMSB7XFxuICAgIG1hcmdpbi10b3A6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci14bC0xLFxcbiAgLm14LXhsLTEge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi14bC0xLFxcbiAgLm15LXhsLTEge1xcbiAgICBtYXJnaW4tYm90dG9tOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwteGwtMSxcXG4gIC5teC14bC0xIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLXhsLTIge1xcbiAgICBtYXJnaW46IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXhsLTIsXFxuICAubXkteGwtMiB7XFxuICAgIG1hcmdpbi10b3A6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXhsLTIsXFxuICAubXgteGwtMiB7XFxuICAgIG1hcmdpbi1yaWdodDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWIteGwtMixcXG4gIC5teS14bC0yIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwteGwtMixcXG4gIC5teC14bC0yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0teGwtMyB7XFxuICAgIG1hcmdpbjogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXhsLTMsXFxuICAubXkteGwtMyB7XFxuICAgIG1hcmdpbi10b3A6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci14bC0zLFxcbiAgLm14LXhsLTMge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi14bC0zLFxcbiAgLm15LXhsLTMge1xcbiAgICBtYXJnaW4tYm90dG9tOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwteGwtMyxcXG4gIC5teC14bC0zIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLXhsLTQge1xcbiAgICBtYXJnaW46IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXhsLTQsXFxuICAubXkteGwtNCB7XFxuICAgIG1hcmdpbi10b3A6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXhsLTQsXFxuICAubXgteGwtNCB7XFxuICAgIG1hcmdpbi1yaWdodDogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWIteGwtNCxcXG4gIC5teS14bC00IHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwteGwtNCxcXG4gIC5teC14bC00IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0teGwtNSB7XFxuICAgIG1hcmdpbjogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXhsLTUsXFxuICAubXkteGwtNSB7XFxuICAgIG1hcmdpbi10b3A6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci14bC01LFxcbiAgLm14LXhsLTUge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi14bC01LFxcbiAgLm15LXhsLTUge1xcbiAgICBtYXJnaW4tYm90dG9tOiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwteGwtNSxcXG4gIC5teC14bC01IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLXhsLTAge1xcbiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQteGwtMCxcXG4gIC5weS14bC0wIHtcXG4gICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci14bC0wLFxcbiAgLnB4LXhsLTAge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGIteGwtMCxcXG4gIC5weS14bC0wIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC14bC0wLFxcbiAgLnB4LXhsLTAge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLXhsLTEge1xcbiAgICBwYWRkaW5nOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQteGwtMSxcXG4gIC5weS14bC0xIHtcXG4gICAgcGFkZGluZy10b3A6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci14bC0xLFxcbiAgLnB4LXhsLTEge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGIteGwtMSxcXG4gIC5weS14bC0xIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC14bC0xLFxcbiAgLnB4LXhsLTEge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLXhsLTIge1xcbiAgICBwYWRkaW5nOiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC14bC0yLFxcbiAgLnB5LXhsLTIge1xcbiAgICBwYWRkaW5nLXRvcDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHIteGwtMixcXG4gIC5weC14bC0yIHtcXG4gICAgcGFkZGluZy1yaWdodDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGIteGwtMixcXG4gIC5weS14bC0yIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLXhsLTIsXFxuICAucHgteGwtMiB7XFxuICAgIHBhZGRpbmctbGVmdDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC14bC0zIHtcXG4gICAgcGFkZGluZzogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnB0LXhsLTMsXFxuICAucHkteGwtMyB7XFxuICAgIHBhZGRpbmctdG9wOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHIteGwtMyxcXG4gIC5weC14bC0zIHtcXG4gICAgcGFkZGluZy1yaWdodDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLXhsLTMsXFxuICAucHkteGwtMyB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGwteGwtMyxcXG4gIC5weC14bC0zIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC14bC00IHtcXG4gICAgcGFkZGluZzogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQteGwtNCxcXG4gIC5weS14bC00IHtcXG4gICAgcGFkZGluZy10b3A6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLXhsLTQsXFxuICAucHgteGwtNCB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLXhsLTQsXFxuICAucHkteGwtNCB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC14bC00LFxcbiAgLnB4LXhsLTQge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnAteGwtNSB7XFxuICAgIHBhZGRpbmc6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC14bC01LFxcbiAgLnB5LXhsLTUge1xcbiAgICBwYWRkaW5nLXRvcDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLXhsLTUsXFxuICAucHgteGwtNSB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYi14bC01LFxcbiAgLnB5LXhsLTUge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLXhsLTUsXFxuICAucHgteGwtNSB7XFxuICAgIHBhZGRpbmctbGVmdDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0teGwtbjEge1xcbiAgICBtYXJnaW46IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQteGwtbjEsXFxuICAubXkteGwtbjEge1xcbiAgICBtYXJnaW4tdG9wOiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXhsLW4xLFxcbiAgLm14LXhsLW4xIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXhsLW4xLFxcbiAgLm15LXhsLW4xIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC14bC1uMSxcXG4gIC5teC14bC1uMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0teGwtbjIge1xcbiAgICBtYXJnaW46IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC14bC1uMixcXG4gIC5teS14bC1uMiB7XFxuICAgIG1hcmdpbi10b3A6IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci14bC1uMixcXG4gIC5teC14bC1uMiB7XFxuICAgIG1hcmdpbi1yaWdodDogLTAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXhsLW4yLFxcbiAgLm15LXhsLW4yIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLXhsLW4yLFxcbiAgLm14LXhsLW4yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLXhsLW4zIHtcXG4gICAgbWFyZ2luOiAtMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXhsLW4zLFxcbiAgLm15LXhsLW4zIHtcXG4gICAgbWFyZ2luLXRvcDogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci14bC1uMyxcXG4gIC5teC14bC1uMyB7XFxuICAgIG1hcmdpbi1yaWdodDogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi14bC1uMyxcXG4gIC5teS14bC1uMyB7XFxuICAgIG1hcmdpbi1ib3R0b206IC0xcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwteGwtbjMsXFxuICAubXgteGwtbjMge1xcbiAgICBtYXJnaW4tbGVmdDogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLXhsLW40IHtcXG4gICAgbWFyZ2luOiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQteGwtbjQsXFxuICAubXkteGwtbjQge1xcbiAgICBtYXJnaW4tdG9wOiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXIteGwtbjQsXFxuICAubXgteGwtbjQge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0xLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi14bC1uNCxcXG4gIC5teS14bC1uNCB7XFxuICAgIG1hcmdpbi1ib3R0b206IC0xLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC14bC1uNCxcXG4gIC5teC14bC1uNCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS14bC1uNSB7XFxuICAgIG1hcmdpbjogLTNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC14bC1uNSxcXG4gIC5teS14bC1uNSB7XFxuICAgIG1hcmdpbi10b3A6IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXIteGwtbjUsXFxuICAubXgteGwtbjUge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWIteGwtbjUsXFxuICAubXkteGwtbjUge1xcbiAgICBtYXJnaW4tYm90dG9tOiAtM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLXhsLW41LFxcbiAgLm14LXhsLW41IHtcXG4gICAgbWFyZ2luLWxlZnQ6IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS14bC1hdXRvIHtcXG4gICAgbWFyZ2luOiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQteGwtYXV0byxcXG4gIC5teS14bC1hdXRvIHtcXG4gICAgbWFyZ2luLXRvcDogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXhsLWF1dG8sXFxuICAubXgteGwtYXV0byB7XFxuICAgIG1hcmdpbi1yaWdodDogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXhsLWF1dG8sXFxuICAubXkteGwtYXV0byB7XFxuICAgIG1hcmdpbi1ib3R0b206IGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC14bC1hdXRvLFxcbiAgLm14LXhsLWF1dG8ge1xcbiAgICBtYXJnaW4tbGVmdDogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG4udGV4dC1tb25vc3BhY2Uge1xcbiAgZm9udC1mYW1pbHk6IFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXFxcIkxpYmVyYXRpb24gTW9ub1xcXCIsIFxcXCJDb3VyaWVyIE5ld1xcXCIsIG1vbm9zcGFjZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1qdXN0aWZ5IHtcXG4gIHRleHQtYWxpZ246IGp1c3RpZnkgIWltcG9ydGFudDtcXG59XFxuXFxuLnRleHQtd3JhcCB7XFxuICB3aGl0ZS1zcGFjZTogbm9ybWFsICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZXh0LW5vd3JhcCB7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZXh0LXRydW5jYXRlIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxufVxcblxcbi50ZXh0LWxlZnQge1xcbiAgdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1yaWdodCB7XFxuICB0ZXh0LWFsaWduOiByaWdodCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1jZW50ZXIge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLnRleHQtc20tbGVmdCB7XFxuICAgIHRleHQtYWxpZ246IGxlZnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC50ZXh0LXNtLXJpZ2h0IHtcXG4gICAgdGV4dC1hbGlnbjogcmlnaHQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC50ZXh0LXNtLWNlbnRlciB7XFxuICAgIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gIC50ZXh0LW1kLWxlZnQge1xcbiAgICB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAudGV4dC1tZC1yaWdodCB7XFxuICAgIHRleHQtYWxpZ246IHJpZ2h0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAudGV4dC1tZC1jZW50ZXIge1xcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XFxuICAudGV4dC1sZy1sZWZ0IHtcXG4gICAgdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnRleHQtbGctcmlnaHQge1xcbiAgICB0ZXh0LWFsaWduOiByaWdodCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnRleHQtbGctY2VudGVyIHtcXG4gICAgdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC50ZXh0LXhsLWxlZnQge1xcbiAgICB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAudGV4dC14bC1yaWdodCB7XFxuICAgIHRleHQtYWxpZ246IHJpZ2h0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAudGV4dC14bC1jZW50ZXIge1xcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuLnRleHQtbG93ZXJjYXNlIHtcXG4gIHRleHQtdHJhbnNmb3JtOiBsb3dlcmNhc2UgIWltcG9ydGFudDtcXG59XFxuXFxuLnRleHQtdXBwZXJjYXNlIHtcXG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2UgIWltcG9ydGFudDtcXG59XFxuXFxuLnRleHQtY2FwaXRhbGl6ZSB7XFxuICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZm9udC13ZWlnaHQtbGlnaHQge1xcbiAgZm9udC13ZWlnaHQ6IDMwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZm9udC13ZWlnaHQtbGlnaHRlciB7XFxuICBmb250LXdlaWdodDogbGlnaHRlciAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZm9udC13ZWlnaHQtbm9ybWFsIHtcXG4gIGZvbnQtd2VpZ2h0OiA0MDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmZvbnQtd2VpZ2h0LWJvbGQge1xcbiAgZm9udC13ZWlnaHQ6IDcwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZm9udC13ZWlnaHQtYm9sZGVyIHtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkZXIgIWltcG9ydGFudDtcXG59XFxuXFxuLmZvbnQtaXRhbGljIHtcXG4gIGZvbnQtc3R5bGU6IGl0YWxpYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC13aGl0ZSB7XFxuICBjb2xvcjogI2ZmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1wcmltYXJ5IHtcXG4gIGNvbG9yOiAjMDA3YmZmICFpbXBvcnRhbnQ7XFxufVxcblxcbmEudGV4dC1wcmltYXJ5OmhvdmVyLCBhLnRleHQtcHJpbWFyeTpmb2N1cyB7XFxuICBjb2xvcjogIzAwNTZiMyAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1zZWNvbmRhcnkge1xcbiAgY29sb3I6ICM2Yzc1N2QgIWltcG9ydGFudDtcXG59XFxuXFxuYS50ZXh0LXNlY29uZGFyeTpob3ZlciwgYS50ZXh0LXNlY29uZGFyeTpmb2N1cyB7XFxuICBjb2xvcjogIzQ5NGY1NCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1zdWNjZXNzIHtcXG4gIGNvbG9yOiAjMjhhNzQ1ICFpbXBvcnRhbnQ7XFxufVxcblxcbmEudGV4dC1zdWNjZXNzOmhvdmVyLCBhLnRleHQtc3VjY2Vzczpmb2N1cyB7XFxuICBjb2xvcjogIzE5NjkyYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1pbmZvIHtcXG4gIGNvbG9yOiAjMTdhMmI4ICFpbXBvcnRhbnQ7XFxufVxcblxcbmEudGV4dC1pbmZvOmhvdmVyLCBhLnRleHQtaW5mbzpmb2N1cyB7XFxuICBjb2xvcjogIzBmNjY3NCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC13YXJuaW5nIHtcXG4gIGNvbG9yOiAjZmZjMTA3ICFpbXBvcnRhbnQ7XFxufVxcblxcbmEudGV4dC13YXJuaW5nOmhvdmVyLCBhLnRleHQtd2FybmluZzpmb2N1cyB7XFxuICBjb2xvcjogI2JhOGIwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1kYW5nZXIge1xcbiAgY29sb3I6ICNkYzM1NDUgIWltcG9ydGFudDtcXG59XFxuXFxuYS50ZXh0LWRhbmdlcjpob3ZlciwgYS50ZXh0LWRhbmdlcjpmb2N1cyB7XFxuICBjb2xvcjogI2E3MWQyYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1saWdodCB7XFxuICBjb2xvcjogI2Y4ZjlmYSAhaW1wb3J0YW50O1xcbn1cXG5cXG5hLnRleHQtbGlnaHQ6aG92ZXIsIGEudGV4dC1saWdodDpmb2N1cyB7XFxuICBjb2xvcjogI2NiZDNkYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1kYXJrIHtcXG4gIGNvbG9yOiAjMzQzYTQwICFpbXBvcnRhbnQ7XFxufVxcblxcbmEudGV4dC1kYXJrOmhvdmVyLCBhLnRleHQtZGFyazpmb2N1cyB7XFxuICBjb2xvcjogIzEyMTQxNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1ib2R5IHtcXG4gIGNvbG9yOiAjMjEyNTI5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZXh0LW11dGVkIHtcXG4gIGNvbG9yOiAjNmM3NTdkICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZXh0LWJsYWNrLTUwIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSkgIWltcG9ydGFudDtcXG59XFxuXFxuLnRleHQtd2hpdGUtNTAge1xcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1oaWRlIHtcXG4gIGZvbnQ6IDAvMCBhO1xcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgdGV4dC1zaGFkb3c6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogMDtcXG59XFxuXFxuLnRleHQtZGVjb3JhdGlvbi1ub25lIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1icmVhayB7XFxuICB3b3JkLWJyZWFrOiBicmVhay13b3JkICFpbXBvcnRhbnQ7XFxuICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZXh0LXJlc2V0IHtcXG4gIGNvbG9yOiBpbmhlcml0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi52aXNpYmxlIHtcXG4gIHZpc2liaWxpdHk6IHZpc2libGUgIWltcG9ydGFudDtcXG59XFxuXFxuLmludmlzaWJsZSB7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDtcXG59XFxuXFxuQG1lZGlhIHByaW50IHtcXG4gICosXFxuICAqOjpiZWZvcmUsXFxuICAqOjphZnRlciB7XFxuICAgIHRleHQtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XFxuICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG4gIGE6bm90KC5idG4pIHtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICB9XFxuICBhYmJyW3RpdGxlXTo6YWZ0ZXIge1xcbiAgICBjb250ZW50OiBcXFwiIChcXFwiIGF0dHIodGl0bGUpIFxcXCIpXFxcIjtcXG4gIH1cXG4gIHByZSB7XFxuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgcHJlLFxcbiAgYmxvY2txdW90ZSB7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNhZGI1YmQ7XFxuICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDtcXG4gIH1cXG4gIHRoZWFkIHtcXG4gICAgZGlzcGxheTogdGFibGUtaGVhZGVyLWdyb3VwO1xcbiAgfVxcbiAgdHIsXFxuICBpbWcge1xcbiAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7XFxuICB9XFxuICBwLFxcbiAgaDIsXFxuICBoMyB7XFxuICAgIG9ycGhhbnM6IDM7XFxuICAgIHdpZG93czogMztcXG4gIH1cXG4gIGgyLFxcbiAgaDMge1xcbiAgICBwYWdlLWJyZWFrLWFmdGVyOiBhdm9pZDtcXG4gIH1cXG4gIEBwYWdlIHtcXG4gICAgc2l6ZTogYTM7XFxuICB9XFxuICBib2R5IHtcXG4gICAgbWluLXdpZHRoOiA5OTJweCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmNvbnRhaW5lciB7XFxuICAgIG1pbi13aWR0aDogOTkycHggIWltcG9ydGFudDtcXG4gIH1cXG4gIC5uYXZiYXIge1xcbiAgICBkaXNwbGF5OiBub25lO1xcbiAgfVxcbiAgLmJhZGdlIHtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgIzAwMDtcXG4gIH1cXG4gIC50YWJsZSB7XFxuICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2UgIWltcG9ydGFudDtcXG4gIH1cXG4gIC50YWJsZSB0ZCxcXG4gIC50YWJsZSB0aCB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYgIWltcG9ydGFudDtcXG4gIH1cXG4gIC50YWJsZS1ib3JkZXJlZCB0aCxcXG4gIC50YWJsZS1ib3JkZXJlZCB0ZCB7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZWUyZTYgIWltcG9ydGFudDtcXG4gIH1cXG4gIC50YWJsZS1kYXJrIHtcXG4gICAgY29sb3I6IGluaGVyaXQ7XFxuICB9XFxuICAudGFibGUtZGFyayB0aCxcXG4gIC50YWJsZS1kYXJrIHRkLFxcbiAgLnRhYmxlLWRhcmsgdGhlYWQgdGgsXFxuICAudGFibGUtZGFyayB0Ym9keSArIHRib2R5IHtcXG4gICAgYm9yZGVyLWNvbG9yOiAjZGVlMmU2O1xcbiAgfVxcbiAgLnRhYmxlIC50aGVhZC1kYXJrIHRoIHtcXG4gICAgY29sb3I6IGluaGVyaXQ7XFxuICAgIGJvcmRlci1jb2xvcjogI2RlZTJlNjtcXG4gIH1cXG59XCIsIFwiXCJdKTtcblxuIiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIikoZmFsc2UpO1xuLy8gTW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCJib2R5IHtcXG5cXG59XFxuXFxuLnBhZ2Uge1xcbiAgcGFkZGluZy1ib3R0b206IDE1MHB4O1xcbn1cXG5cXG4uc2lkZWJhciB7XFxuICBwYWRkaW5nLXRvcDogMjBweDtcXG4gIG1hcmdpbi10b3A6IDQ4cHg7XFxuICBtaW4taGVpZ2h0OiA4ZW07XFxuICBwYWRkaW5nLWxlZnQ6IDEwcHhcXG59XFxuXFxuW3JvbGU9XFxcIm1haW5cXFwiXSB7XFxuICBwYWRkaW5nLXRvcDogMjBweDtcXG4gIG1hcmdpbi10b3A6IDQ4cHg7XFxufVxcblxcbi5pbmxpbmV7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcXG59XFxuXFxuc3BhbiB7XFxuICBmb250LXNpemU6IDFyZW07XFxufVxcblxcbnNlbGVjdCB7XFxuICBtYXJnaW4tbGVmdDogMTBweDtcXG59XFxuXFxubGFiZWwge1xcbiAgcGFkZGluZy1yaWdodDogMC4yNXJlbTtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG5cXG5zcGFuLmN1c3RvbSB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwLjI1cmVtO1xcbiAgcGFkZGluZy1sZWZ0OiAwLjI1cmVtO1xcbn1cXG5cXG5idXR0b24uY3VzdG9tIHtcXG4gIG1hcmdpbjogMC4yNXJlbTtcXG59XFxuXFxuYS5kaXNhYmxlZCB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuXFxuLm5hdi1pdGVtIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuXFxuLm5hdi1saW5rIHtcXG4gIHBhZGRpbmc6IDAuNXJlbSAwLjI1cmVtIDAuNXJlbSAxcmVtO1xcbn1cXG5cXG4uZHJvcGRvd24tbWVudSBsaTpob3ZlciB7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLm5hbWUge1xcbiAgd2lkdGg6IDhyZW07XFxufVxcblxcbi5mb3JtLWlucHV0IHtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG5cXG4uZm9ybS1pbnB1dC5sYWJlbGVkIHtcXG4gIHdpZHRoOiA2MCU7XFxufVxcblxcbjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbjo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24ge1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG4gIGNvbG9yOiAjMDA3YmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsgXFxuICBib3JkZXItY29sb3I6ICMwMDdiZmY7XFxuICBwYWRkaW5nOiAwLjM3NXJlbSwgMC43NXJlbTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkO1xcbiAgbWFyZ2luOiA1cHggMTBweCA1cHggMHB4ICFpbXBvcnRhbnQ7XFxuICBib3gtc2hhZG93OiA2cHggNnB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgLjIpLCAyLjI1cHggMi4yNXB4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgLjEpLCAzLjc1cHggMy43NXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgLjQpXFxufVxcblxcbmlucHV0W3R5cGU9XFxcImZpbGVcXFwiXTo6LW1zLWJyb3dzZSB7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbiAgY29sb3I6ICMwMDdiZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOyBcXG4gIGJvcmRlci1jb2xvcjogIzAwN2JmZjtcXG4gIHBhZGRpbmc6IDAuMzc1cmVtLCAwLjc1cmVtO1xcbiAgYm9yZGVyOiAxcHggc29saWQ7XFxuICBtYXJnaW46IDVweCAxMHB4IDVweCAwcHggIWltcG9ydGFudDtcXG4gIGJveC1zaGFkb3c6IDZweCA2cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAuMiksIDIuMjVweCAyLjI1cHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAuMSksIDMuNzVweCAzLjc1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAuNClcXG59XFxuXFxuOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbjpob3ZlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDdiZmY7XFxuICBib3JkZXItY29sb3I6ICMwMDdiZmY7XFxufVxcblxcbjo6LW1vei1wbGFjZWhvbGRlciB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG46Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbjo6cGxhY2Vob2xkZXIge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG4uc2lkZWJhci1uYXYge1xcbiAgcGFkZGluZzogOXB4IDA7XFxuICBmb250LXNpemU6IDE0cHg7XFxufVxcblxcbi5nZXQtc3RhcnRlZCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbn1cXG5cXG4ubmF2IHtcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG59XFxuXFxuLnNpZGViYXItc3RpY2t5IHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG59XFxuXFxuLnRvb2xzIHtcXG4gIG1pbi13aWR0aDogMTJlbTsgXFxufVxcblxcbi5ib2R5IHtcXG4gIG1pbi13aWR0aDogNTAwcHggIWltcG9ydGFudDsgXFxufVxcbi5wbG90LXByZXZpZXcge1xcbiAgbWFyZ2luOiAxMHB4O1xcbn1cXG5cXG4ucmVhY3Rpb24tc3VtbWFyeSB7XFxuICBwYWRkaW5nLWxlZnQ6IDE1cHg7XFxuICBwYWRkaW5nLXJpZ2h0OiA1cHg7XFxuICBwYWRkaW5nLWJvdHRvbTogMTBweDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuXFxuLmNvbnRhaW5lci1wYXJ0IHtcXG4gIG1heC13aWR0aDogbm9uZTtcXG59XFxuXFxuLmluZm9ybWF0aW9uLWJ0biB7XFxuICBjb2xvcjogIzAwN2JmZjtcXG4gIGJvcmRlci1jb2xvcjogI2ZmZmZmZjtcXG4gIHBhZGRpbmc6IDAuNXJlbSAxcmVtO1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG59XFxuXFxuLmhlbHAge1xcbiAgZm9udC1zaXplOiAyNXB4O1xcbiAgcGFkZGluZzogMDtcXG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XFxufVxcblxcbi50b29sdGlwLWljb24ge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgcGFkZGluZy1sZWZ0OiAycHg7XFxuICBwYWRkaW5nLXJpZ2h0OiAycHg7XFxuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xcbiAgY29sb3I6ICMwMDdiZmY7XFxufVxcblxcbi50b29sdGlwLWljb24tbGFyZ2Uge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgZm9udC1zaXplOiAyMHB4O1xcbiAgcGFkZGluZy1sZWZ0OiAxMHB4O1xcbiAgcGFkZGluZy1yaWdodDogMTBweDtcXG4gIHZlcnRpY2FsLWFsaWduOiBib3R0b207XFxuICBjb2xvcjogIzAwN2JmZjtcXG59XFxuXFxuLmluZm9ybWF0aW9uLWJ0bjpob3ZlciB7XFxuICBjb2xvcjogIzAwNTZiMztcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWNvbGxhcHNlIHtcXG4gIGNvbG9yOiAjMDAwO1xcbiAgcGFkZGluZzogMHB4IDEwcHg7XFxuICBmb250LXNpemU6IDIwcHg7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgbWFyZ2luLWJvdHRvbTogMC43NXJlbTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWNvbGxhcHNlOmhvdmVyIHtcXG4gIGNvbG9yOiAjMDA3YmZmO1xcbn1cXG5cXG4uYnRuLXByaW1hcnkge1xcbiAgbWFyZ2luOiA1cHggMTBweCA1cHggMHB4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWFjdGlvbi1zdWJkb21haW4ge1xcbiAgcGFkZGluZzogMHB4IDBweCAwcHggMjBweDtcXG4gIGJvcmRlcjogMDtcXG59XFxuXFxuLnJlYWN0aW9uLWRldGFpbHMtc3ViZG9tYWluIHtcXG4gIHBhZGRpbmc6IDBweCAwcHggMHB4IDVweDtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLXRvb2wge1xcbiAgY29sb3I6ICMwMDdiZmY7XFxuICBwYWRkaW5nOiAwLjVyZW0gMXJlbTtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxufVxcblxcbi5idG4tb3V0bGluZS10b29sOmhvdmVyIHtcXG4gIGNvbG9yOiAjMDA1NmIzO1xcbn1cXG5cXG4jY29sbGFwc2UtZGVzY3JpcHRpb24ge1xcbiAgcGFkZGluZzogMHJlbSAycmVtO1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbn1cXG5cXG4ubW9kYWwtY29udGVudC5pbmZvIHtcXG4gIHdpZHRoOiAxNTAlO1xcbn1cXG5cXG4ubW9kYWwtY29udGVudC5kZWZhdWx0LXNwZWNpZXMge1xcbiAgd2lkdGg6IDYwJTtcXG59XFxuXFxuLnNwaW5uZXItYm9yZGVyIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBtYXJnaW46IDE1cHg7XFxuICBsZWZ0OiA0MCU7XFxuICB3aWR0aDogOTBweDtcXG4gIGhlaWdodDogOTBweDtcXG4gIGJvcmRlcjogMTJweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMTI1KTtcXG4gIGJvcmRlci1yaWdodC1jb2xvcjogIzAwN2JmZjtcXG59XFxuXFxuLmVycm9ycyB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5cXG4ubWRsLWVkaXQtYnRuIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuXFxuQGtleWZyYW1lcyBzcGlubmVyLWdyb3cge1xcbiAwJSB7XFxuICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApO1xcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XFxuIH1cXG4gNTAlIHtcXG4gICAgIG9wYWNpdHk6IDE7IFxcbiAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpO1xcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XFxuIH1cXG59XFxuXFxuLnNhdmluZy1zdGF0dXMsIC5zYXZlZC1zdGF0dXMsIC5zYXZlLWVycm9yLXN0YXR1cyB7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgbWFyZ2luOiAxNXB4O1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG59XFxuXFxuLnNhdmluZy1zdGF0dXMge1xcbiAgY29sb3I6ICMxMTdhOGI7XFxufVxcblxcbi5zYXZlZC1zdGF0dXMge1xcbiAgY29sb3I6ICMxZTdlMzQ7XFxufVxcblxcbi5zYXZlLWVycm9yLXN0YXR1cyB7XFxuICBjb2xvcjogI2RjMzU0NTtcXG59XFxuXFxuLnJpZ2h0LWp1c3RpZnkge1xcbiAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XFxuICByaWdodDogNXB4O1xcbiAgbGVmdDogYXV0bztcXG59XFxuXFxuLmRlZmF1bHQtbW9kZSB7XFxuICBtYXJnaW46IDAuNzVyZW07XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGxlZnQ7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGxlZnQ7XFxufVxcblxcbi5jb25jZW50cmF0aW9uLWJ0biwgLnBvcHVsYXRpb24tYnRuLCAuaHlicmlkLWJ0biB7XFxuICBtaW4td2lkdGg6IDI0MHB4O1xcbiAgbWFyZ2luLXJpZ2h0OiAwLjc1cmVtO1xcbn1cXG5cXG5pbnB1dFt0eXBlPVxcXCJjaGVja2JveFxcXCJdIHtcXG4gIHBhZGRpbmc6IDAuNzVyZW07XFxufVxcblxcbnNwYW4uY2hlY2tib3gge1xcbiAgcGFkZGluZy1yaWdodDogMC4yNXJlbTtcXG59XFxuXFxuLmV2ZW50IHtcXG4gIG1hcmdpbi1ib3R0b206IDBweDtcXG59XFxuXFxuLmV2ZW50LXRoIC5ldmVudC10ZCB7XFxuICBwYWRkaW5nLWxlZnQ6IDBweCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udG9vbHRpcC1pbm5lciB7XFxuICBtYXgtd2lkdGg6IDMwMHB4O1xcbiAgcGFkZGluZzogMC4yNXJlbSAwLjVyZW07XFxuICBjb2xvcjogI2ZmZjtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLnZlcnRpY2xlLXNwYWNlIHtcXG4gIHBhZGRpbmctYm90dG9tOiAxMHB4O1xcbn1cXG5cXG4uaG9yaXpvbnRhbC1zcGFjZSB7XFxuICBwYWRkaW5nLWxlZnQ6IDVweDtcXG4gIHBhZGRpbmctcmlnaHQ6IDVweDtcXG59XFxuXFxuLnN3aXRjaGluZyB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xcbiAgaGVpZ2h0OiAyOXB4O1xcbn1cXG5cXG4jaG9tZS13cmFwcGVyIHtcXG4gIG1hcmdpbi10b3A6IDJlbTtcXG4gIG1hcmdpbi1ib3R0b206IDJlbTtcXG59XFxuXFxuLmxvZ28ge1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuLmxvZ28gaW1nIHtcXG4gIHdpZHRoOiA0MGVtO1xcbiAgbWFyZ2luLWxlZnQ6IC04ZW07XFxufVxcblxcbi50cnktc3RvY2hzcy1idG4ge1xcbiAgcGFkZGluZzogMS41cmVtIDEuNXJlbTtcXG4gIGZvbnQtc2l6ZTogMnJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxO1xcbiAgYm9yZGVyLXJhZGl1czogMS41cmVtO1xcbn1cXG5cXG4uaG9tZS1saXN0IHtcXG4gIGxpbmUtaGVpZ2h0OiAyO1xcbn1cXG5cXG4uY2VudGVyZWQge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG4uaG9tZS1wIHtcXG4gIG1hcmdpbi10b3A6IDEuNWVtO1xcbiAgbWFyZ2luLWJvdHRvbTogMS41ZW07XFxuICBmb250LXNpemU6IDIycHg7XFxufVxcblxcbi5iaWctdGlwIHtcXG4gIG1hcmdpbi1sZWZ0OiAuMmVtO1xcbn1cXG5cXG4vKnNoYWRvd2luZyBmb3IgYnV0dG9ucyovXFxuLmJveC1zaGFkb3cge1xcbiAgLypoLW9mZnNldCB2LW9mZnNldCBibHVyIHNwcmVhZCBjb2xvciovXFxuICBib3gtc2hhZG93OiA2cHggNnB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgLjIpLCAyLjI1cHggMi4yNXB4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgLjEpLCAzLjc1cHggMy43NXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgLjQpXFxufVwiLCBcIlwiXSk7XG5cbiIsImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi8uLi9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIikoZmFsc2UpO1xuLy8gTW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCIvKiFcXG4gKiBGb250IEF3ZXNvbWUgRnJlZSA1LjEyLjAgYnkgQGZvbnRhd2Vzb21lIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb21cXG4gKiBMaWNlbnNlIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20vbGljZW5zZS9mcmVlIChJY29uczogQ0MgQlkgNC4wLCBGb250czogU0lMIE9GTCAxLjEsIENvZGU6IE1JVCBMaWNlbnNlKVxcbiAqL1xcbi5zdmctaW5saW5lLS1mYSxzdmc6bm90KDpyb290KS5zdmctaW5saW5lLS1mYXtvdmVyZmxvdzp2aXNpYmxlfS5zdmctaW5saW5lLS1mYXtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6aW5oZXJpdDtoZWlnaHQ6MWVtO3ZlcnRpY2FsLWFsaWduOi0uMTI1ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLWxne3ZlcnRpY2FsLWFsaWduOi0uMjI1ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLXctMXt3aWR0aDouMDYyNWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTJ7d2lkdGg6LjEyNWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTN7d2lkdGg6LjE4NzVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy00e3dpZHRoOi4yNWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTV7d2lkdGg6LjMxMjVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy02e3dpZHRoOi4zNzVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy03e3dpZHRoOi40Mzc1ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLXctOHt3aWR0aDouNWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTl7d2lkdGg6LjU2MjVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy0xMHt3aWR0aDouNjI1ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLXctMTF7d2lkdGg6LjY4NzVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy0xMnt3aWR0aDouNzVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy0xM3t3aWR0aDouODEyNWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTE0e3dpZHRoOi44NzVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy0xNXt3aWR0aDouOTM3NWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTE2e3dpZHRoOjFlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy0xN3t3aWR0aDoxLjA2MjVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy0xOHt3aWR0aDoxLjEyNWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTE5e3dpZHRoOjEuMTg3NWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTIwe3dpZHRoOjEuMjVlbX0uc3ZnLWlubGluZS0tZmEuZmEtcHVsbC1sZWZ0e21hcmdpbi1yaWdodDouM2VtO3dpZHRoOmF1dG99LnN2Zy1pbmxpbmUtLWZhLmZhLXB1bGwtcmlnaHR7bWFyZ2luLWxlZnQ6LjNlbTt3aWR0aDphdXRvfS5zdmctaW5saW5lLS1mYS5mYS1ib3JkZXJ7aGVpZ2h0OjEuNWVtfS5zdmctaW5saW5lLS1mYS5mYS1saXt3aWR0aDoyZW19LnN2Zy1pbmxpbmUtLWZhLmZhLWZ3e3dpZHRoOjEuMjVlbX0uZmEtbGF5ZXJzIHN2Zy5zdmctaW5saW5lLS1mYXtib3R0b206MDtsZWZ0OjA7bWFyZ2luOmF1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0uZmEtbGF5ZXJze2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dmVydGljYWwtYWxpZ246LS4xMjVlbTt3aWR0aDoxZW19LmZhLWxheWVycyBzdmcuc3ZnLWlubGluZS0tZmF7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOmNlbnRlciBjZW50ZXI7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXIgY2VudGVyfS5mYS1sYXllcnMtY291bnRlciwuZmEtbGF5ZXJzLXRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dGV4dC1hbGlnbjpjZW50ZXJ9LmZhLWxheWVycy10ZXh0e2xlZnQ6NTAlO3RvcDo1MCU7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjpjZW50ZXIgY2VudGVyO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyIGNlbnRlcn0uZmEtbGF5ZXJzLWNvdW50ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmYyNTNhO2JvcmRlci1yYWRpdXM6MWVtOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjojZmZmO2hlaWdodDoxLjVlbTtsaW5lLWhlaWdodDoxO21heC13aWR0aDo1ZW07bWluLXdpZHRoOjEuNWVtO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4yNWVtO3JpZ2h0OjA7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt0b3A6MDstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguMjUpO3RyYW5zZm9ybTpzY2FsZSguMjUpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjp0b3AgcmlnaHQ7dHJhbnNmb3JtLW9yaWdpbjp0b3AgcmlnaHR9LmZhLWxheWVycy1ib3R0b20tcmlnaHR7Ym90dG9tOjA7cmlnaHQ6MDt0b3A6YXV0bzstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguMjUpO3RyYW5zZm9ybTpzY2FsZSguMjUpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjpib3R0b20gcmlnaHQ7dHJhbnNmb3JtLW9yaWdpbjpib3R0b20gcmlnaHR9LmZhLWxheWVycy1ib3R0b20tbGVmdHtib3R0b206MDtsZWZ0OjA7cmlnaHQ6YXV0bzt0b3A6YXV0bzstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguMjUpO3RyYW5zZm9ybTpzY2FsZSguMjUpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjpib3R0b20gbGVmdDt0cmFuc2Zvcm0tb3JpZ2luOmJvdHRvbSBsZWZ0fS5mYS1sYXllcnMtdG9wLXJpZ2h0e3JpZ2h0OjA7dG9wOjA7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLjI1KTt0cmFuc2Zvcm06c2NhbGUoLjI1KTstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46dG9wIHJpZ2h0O3RyYW5zZm9ybS1vcmlnaW46dG9wIHJpZ2h0fS5mYS1sYXllcnMtdG9wLWxlZnR7bGVmdDowO3JpZ2h0OmF1dG87dG9wOjA7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLjI1KTt0cmFuc2Zvcm06c2NhbGUoLjI1KTstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46dG9wIGxlZnQ7dHJhbnNmb3JtLW9yaWdpbjp0b3AgbGVmdH0uZmEtbGd7Zm9udC1zaXplOjEuMzMzMzNlbTtsaW5lLWhlaWdodDouNzVlbTt2ZXJ0aWNhbC1hbGlnbjotLjA2NjdlbX0uZmEteHN7Zm9udC1zaXplOi43NWVtfS5mYS1zbXtmb250LXNpemU6Ljg3NWVtfS5mYS0xeHtmb250LXNpemU6MWVtfS5mYS0yeHtmb250LXNpemU6MmVtfS5mYS0zeHtmb250LXNpemU6M2VtfS5mYS00eHtmb250LXNpemU6NGVtfS5mYS01eHtmb250LXNpemU6NWVtfS5mYS02eHtmb250LXNpemU6NmVtfS5mYS03eHtmb250LXNpemU6N2VtfS5mYS04eHtmb250LXNpemU6OGVtfS5mYS05eHtmb250LXNpemU6OWVtfS5mYS0xMHh7Zm9udC1zaXplOjEwZW19LmZhLWZ3e3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjEuMjVlbX0uZmEtdWx7bGlzdC1zdHlsZS10eXBlOm5vbmU7bWFyZ2luLWxlZnQ6Mi41ZW07cGFkZGluZy1sZWZ0OjB9LmZhLXVsPmxpe3Bvc2l0aW9uOnJlbGF0aXZlfS5mYS1saXtsZWZ0Oi0yZW07cG9zaXRpb246YWJzb2x1dGU7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MmVtO2xpbmUtaGVpZ2h0OmluaGVyaXR9LmZhLWJvcmRlcntib3JkZXI6LjA4ZW0gc29saWQgI2VlZTtib3JkZXItcmFkaXVzOi4xZW07cGFkZGluZzouMmVtIC4yNWVtIC4xNWVtfS5mYS1wdWxsLWxlZnR7ZmxvYXQ6bGVmdH0uZmEtcHVsbC1yaWdodHtmbG9hdDpyaWdodH0uZmEuZmEtcHVsbC1sZWZ0LC5mYWIuZmEtcHVsbC1sZWZ0LC5mYWwuZmEtcHVsbC1sZWZ0LC5mYXIuZmEtcHVsbC1sZWZ0LC5mYXMuZmEtcHVsbC1sZWZ0e21hcmdpbi1yaWdodDouM2VtfS5mYS5mYS1wdWxsLXJpZ2h0LC5mYWIuZmEtcHVsbC1yaWdodCwuZmFsLmZhLXB1bGwtcmlnaHQsLmZhci5mYS1wdWxsLXJpZ2h0LC5mYXMuZmEtcHVsbC1yaWdodHttYXJnaW4tbGVmdDouM2VtfS5mYS1zcGluey13ZWJraXQtYW5pbWF0aW9uOmZhLXNwaW4gMnMgbGluZWFyIGluZmluaXRlO2FuaW1hdGlvbjpmYS1zcGluIDJzIGxpbmVhciBpbmZpbml0ZX0uZmEtcHVsc2V7LXdlYmtpdC1hbmltYXRpb246ZmEtc3BpbiAxcyBzdGVwcyg4KSBpbmZpbml0ZTthbmltYXRpb246ZmEtc3BpbiAxcyBzdGVwcyg4KSBpbmZpbml0ZX1ALXdlYmtpdC1rZXlmcmFtZXMgZmEtc3BpbnswJXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMGRlZyk7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX10b3std2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMXR1cm4pO3RyYW5zZm9ybTpyb3RhdGUoMXR1cm4pfX1Aa2V5ZnJhbWVzIGZhLXNwaW57MCV7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDBkZWcpO3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9dG97LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDF0dXJuKTt0cmFuc2Zvcm06cm90YXRlKDF0dXJuKX19LmZhLXJvdGF0ZS05MHstbXMtZmlsdGVyOlxcXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0xKVxcXCI7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDkwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX0uZmEtcm90YXRlLTE4MHstbXMtZmlsdGVyOlxcXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0yKVxcXCI7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDE4MGRlZyk7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfS5mYS1yb3RhdGUtMjcwey1tcy1maWx0ZXI6XFxcInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5CYXNpY0ltYWdlKHJvdGF0aW9uPTMpXFxcIjstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDI3MGRlZyl9LmZhLWZsaXAtaG9yaXpvbnRhbHstbXMtZmlsdGVyOlxcXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0wLCBtaXJyb3I9MSlcXFwiOy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlWCgtMSk7dHJhbnNmb3JtOnNjYWxlWCgtMSl9LmZhLWZsaXAtdmVydGljYWx7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGVZKC0xKTt0cmFuc2Zvcm06c2NhbGVZKC0xKX0uZmEtZmxpcC1ib3RoLC5mYS1mbGlwLWhvcml6b250YWwuZmEtZmxpcC12ZXJ0aWNhbCwuZmEtZmxpcC12ZXJ0aWNhbHstbXMtZmlsdGVyOlxcXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0yLCBtaXJyb3I9MSlcXFwifS5mYS1mbGlwLWJvdGgsLmZhLWZsaXAtaG9yaXpvbnRhbC5mYS1mbGlwLXZlcnRpY2Fsey13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC0xKTt0cmFuc2Zvcm06c2NhbGUoLTEpfTpyb290IC5mYS1mbGlwLWJvdGgsOnJvb3QgLmZhLWZsaXAtaG9yaXpvbnRhbCw6cm9vdCAuZmEtZmxpcC12ZXJ0aWNhbCw6cm9vdCAuZmEtcm90YXRlLTkwLDpyb290IC5mYS1yb3RhdGUtMTgwLDpyb290IC5mYS1yb3RhdGUtMjcwey13ZWJraXQtZmlsdGVyOm5vbmU7ZmlsdGVyOm5vbmV9LmZhLXN0YWNre2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoyZW07cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6Mi41ZW19LmZhLXN0YWNrLTF4LC5mYS1zdGFjay0yeHtib3R0b206MDtsZWZ0OjA7bWFyZ2luOmF1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0uc3ZnLWlubGluZS0tZmEuZmEtc3RhY2stMXh7aGVpZ2h0OjFlbTt3aWR0aDoxLjI1ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLXN0YWNrLTJ4e2hlaWdodDoyZW07d2lkdGg6Mi41ZW19LmZhLWludmVyc2V7Y29sb3I6I2ZmZn0uc3Itb25seXtib3JkZXI6MDtjbGlwOnJlY3QoMCwwLDAsMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweH0uc3Itb25seS1mb2N1c2FibGU6YWN0aXZlLC5zci1vbmx5LWZvY3VzYWJsZTpmb2N1c3tjbGlwOmF1dG87aGVpZ2h0OmF1dG87bWFyZ2luOjA7b3ZlcmZsb3c6dmlzaWJsZTtwb3NpdGlvbjpzdGF0aWM7d2lkdGg6YXV0b30uc3ZnLWlubGluZS0tZmEgLmZhLXByaW1hcnl7ZmlsbDp2YXIoLS1mYS1wcmltYXJ5LWNvbG9yLGN1cnJlbnRDb2xvcik7b3BhY2l0eToxO29wYWNpdHk6dmFyKC0tZmEtcHJpbWFyeS1vcGFjaXR5LDEpfS5zdmctaW5saW5lLS1mYSAuZmEtc2Vjb25kYXJ5e2ZpbGw6dmFyKC0tZmEtc2Vjb25kYXJ5LWNvbG9yLGN1cnJlbnRDb2xvcil9LnN2Zy1pbmxpbmUtLWZhIC5mYS1zZWNvbmRhcnksLnN2Zy1pbmxpbmUtLWZhLmZhLXN3YXAtb3BhY2l0eSAuZmEtcHJpbWFyeXtvcGFjaXR5Oi40O29wYWNpdHk6dmFyKC0tZmEtc2Vjb25kYXJ5LW9wYWNpdHksLjQpfS5zdmctaW5saW5lLS1mYS5mYS1zd2FwLW9wYWNpdHkgLmZhLXNlY29uZGFyeXtvcGFjaXR5OjE7b3BhY2l0eTp2YXIoLS1mYS1wcmltYXJ5LW9wYWNpdHksMSl9LnN2Zy1pbmxpbmUtLWZhIG1hc2sgLmZhLXByaW1hcnksLnN2Zy1pbmxpbmUtLWZhIG1hc2sgLmZhLXNlY29uZGFyeXtmaWxsOiMwMDB9LmZhZC5mYS1pbnZlcnNle2NvbG9yOiNmZmZ9XCIsIFwiXCJdKTtcblxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG4vLyBjc3MgYmFzZSBjb2RlLCBpbmplY3RlZCBieSB0aGUgY3NzLWxvYWRlclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodXNlU291cmNlTWFwKSB7XG4gIHZhciBsaXN0ID0gW107IC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblxuICBsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgY29udGVudCA9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSwgdXNlU291cmNlTWFwKTtcblxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgcmV0dXJuICdAbWVkaWEgJyArIGl0ZW1bMl0gKyAneycgKyBjb250ZW50ICsgJ30nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfSkuam9pbignJyk7XG4gIH07IC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG5cblxuICBsaXN0LmkgPSBmdW5jdGlvbiAobW9kdWxlcywgbWVkaWFRdWVyeSkge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsICcnXV07XG4gICAgfVxuXG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkID0gdGhpc1tpXVswXTtcblxuICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBtb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IG1vZHVsZXNbaV07IC8vIHNraXAgYWxyZWFkeSBpbXBvcnRlZCBtb2R1bGVcbiAgICAgIC8vIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgbm90IDEwMCUgcGVyZmVjdCBmb3Igd2VpcmQgbWVkaWEgcXVlcnkgY29tYmluYXRpb25zXG4gICAgICAvLyB3aGVuIGEgbW9kdWxlIGlzIGltcG9ydGVkIG11bHRpcGxlIHRpbWVzIHdpdGggZGlmZmVyZW50IG1lZGlhIHF1ZXJpZXMuXG4gICAgICAvLyBJIGhvcGUgdGhpcyB3aWxsIG5ldmVyIG9jY3VyIChIZXkgdGhpcyB3YXkgd2UgaGF2ZSBzbWFsbGVyIGJ1bmRsZXMpXG5cbiAgICAgIGlmIChpdGVtWzBdID09IG51bGwgfHwgIWFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgaWYgKG1lZGlhUXVlcnkgJiYgIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWFRdWVyeTtcbiAgICAgICAgfSBlbHNlIGlmIChtZWRpYVF1ZXJ5KSB7XG4gICAgICAgICAgaXRlbVsyXSA9ICcoJyArIGl0ZW1bMl0gKyAnKSBhbmQgKCcgKyBtZWRpYVF1ZXJ5ICsgJyknO1xuICAgICAgICB9XG5cbiAgICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbGlzdDtcbn07XG5cbmZ1bmN0aW9uIGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSwgdXNlU291cmNlTWFwKSB7XG4gIHZhciBjb250ZW50ID0gaXRlbVsxXSB8fCAnJztcbiAgdmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuXG4gIGlmICghY3NzTWFwcGluZykge1xuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgaWYgKHVzZVNvdXJjZU1hcCAmJiB0eXBlb2YgYnRvYSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBzb3VyY2VNYXBwaW5nID0gdG9Db21tZW50KGNzc01hcHBpbmcpO1xuICAgIHZhciBzb3VyY2VVUkxzID0gY3NzTWFwcGluZy5zb3VyY2VzLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICByZXR1cm4gJy8qIyBzb3VyY2VVUkw9JyArIGNzc01hcHBpbmcuc291cmNlUm9vdCArIHNvdXJjZSArICcgKi8nO1xuICAgIH0pO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKCdcXG4nKTtcbn0gLy8gQWRhcHRlZCBmcm9tIGNvbnZlcnQtc291cmNlLW1hcCAoTUlUKVxuXG5cbmZ1bmN0aW9uIHRvQ29tbWVudChzb3VyY2VNYXApIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpO1xuICB2YXIgZGF0YSA9ICdzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCwnICsgYmFzZTY0O1xuICByZXR1cm4gJy8qIyAnICsgZGF0YSArICcgKi8nO1xufSIsIid1c2Ugc3RyaWN0JztcblxudmFyIGtleXMgPSByZXF1aXJlKCdvYmplY3Qta2V5cycpO1xudmFyIGhhc1N5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2woJ2ZvbycpID09PSAnc3ltYm9sJztcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBjb25jYXQgPSBBcnJheS5wcm90b3R5cGUuY29uY2F0O1xudmFyIG9yaWdEZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxudmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiAoZm4pIHtcblx0cmV0dXJuIHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyAmJiB0b1N0ci5jYWxsKGZuKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn07XG5cbnZhciBhcmVQcm9wZXJ0eURlc2NyaXB0b3JzU3VwcG9ydGVkID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgb2JqID0ge307XG5cdHRyeSB7XG5cdFx0b3JpZ0RlZmluZVByb3BlcnR5KG9iaiwgJ3gnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogb2JqIH0pO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycywgbm8tcmVzdHJpY3RlZC1zeW50YXhcblx0XHRmb3IgKHZhciBfIGluIG9iaikgeyAvLyBqc2NzOmlnbm9yZSBkaXNhbGxvd1VudXNlZFZhcmlhYmxlc1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gb2JqLnggPT09IG9iajtcblx0fSBjYXRjaCAoZSkgeyAvKiB0aGlzIGlzIElFIDguICovXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xudmFyIHN1cHBvcnRzRGVzY3JpcHRvcnMgPSBvcmlnRGVmaW5lUHJvcGVydHkgJiYgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCgpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lLCB2YWx1ZSwgcHJlZGljYXRlKSB7XG5cdGlmIChuYW1lIGluIG9iamVjdCAmJiAoIWlzRnVuY3Rpb24ocHJlZGljYXRlKSB8fCAhcHJlZGljYXRlKCkpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmIChzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0b3JpZ0RlZmluZVByb3BlcnR5KG9iamVjdCwgbmFtZSwge1xuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9iamVjdFtuYW1lXSA9IHZhbHVlO1xuXHR9XG59O1xuXG52YXIgZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIChvYmplY3QsIG1hcCkge1xuXHR2YXIgcHJlZGljYXRlcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDoge307XG5cdHZhciBwcm9wcyA9IGtleXMobWFwKTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHRwcm9wcyA9IGNvbmNhdC5jYWxsKHByb3BzLCBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG1hcCkpO1xuXHR9XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpICs9IDEpIHtcblx0XHRkZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BzW2ldLCBtYXBbcHJvcHNbaV1dLCBwcmVkaWNhdGVzW3Byb3BzW2ldXSk7XG5cdH1cbn07XG5cbmRlZmluZVByb3BlcnRpZXMuc3VwcG9ydHNEZXNjcmlwdG9ycyA9ICEhc3VwcG9ydHNEZXNjcmlwdG9ycztcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVQcm9wZXJ0aWVzO1xuIiwiLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbnZhciBjbG9zZXN0ID0gcmVxdWlyZSgnY2xvc2VzdCcpXG4gICwgZXZlbnQgPSByZXF1aXJlKCdjb21wb25lbnQtZXZlbnQnKTtcblxuLyoqXG4gKiBEZWxlZ2F0ZSBldmVudCBgdHlwZWAgdG8gYHNlbGVjdG9yYFxuICogYW5kIGludm9rZSBgZm4oZSlgLiBBIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKiBpcyByZXR1cm5lZCB3aGljaCBtYXkgYmUgcGFzc2VkIHRvIGAudW5iaW5kKClgLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvclxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGNhcHR1cmVcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG4vLyBTb21lIGV2ZW50cyBkb24ndCBidWJibGUsIHNvIHdlIHdhbnQgdG8gYmluZCB0byB0aGUgY2FwdHVyZSBwaGFzZSBpbnN0ZWFkXG4vLyB3aGVuIGRlbGVnYXRpbmcuXG52YXIgZm9yY2VDYXB0dXJlRXZlbnRzID0gWydmb2N1cycsICdibHVyJ107XG5cbmV4cG9ydHMuYmluZCA9IGZ1bmN0aW9uKGVsLCBzZWxlY3RvciwgdHlwZSwgZm4sIGNhcHR1cmUpe1xuICBpZiAoZm9yY2VDYXB0dXJlRXZlbnRzLmluZGV4T2YodHlwZSkgIT09IC0xKSBjYXB0dXJlID0gdHJ1ZTtcblxuICByZXR1cm4gZXZlbnQuYmluZChlbCwgdHlwZSwgZnVuY3Rpb24oZSl7XG4gICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudDtcbiAgICBlLmRlbGVnYXRlVGFyZ2V0ID0gY2xvc2VzdCh0YXJnZXQsIHNlbGVjdG9yLCB0cnVlLCBlbCk7XG4gICAgaWYgKGUuZGVsZWdhdGVUYXJnZXQpIGZuLmNhbGwoZWwsIGUpO1xuICB9LCBjYXB0dXJlKTtcbn07XG5cbi8qKlxuICogVW5iaW5kIGV2ZW50IGB0eXBlYCdzIGNhbGxiYWNrIGBmbmAuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbFxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGNhcHR1cmVcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy51bmJpbmQgPSBmdW5jdGlvbihlbCwgdHlwZSwgZm4sIGNhcHR1cmUpe1xuICBpZiAoZm9yY2VDYXB0dXJlRXZlbnRzLmluZGV4T2YodHlwZSkgIT09IC0xKSBjYXB0dXJlID0gdHJ1ZTtcblxuICBldmVudC51bmJpbmQoZWwsIHR5cGUsIGZuLCBjYXB0dXJlKTtcbn07XG4iLCJcbi8qKlxuICogRXhwb3NlIGBwYXJzZWAuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZTtcblxuLyoqXG4gKiBUZXN0cyBmb3IgYnJvd3NlciBzdXBwb3J0LlxuICovXG5cbnZhciBpbm5lckhUTUxCdWcgPSBmYWxzZTtcbnZhciBidWdUZXN0RGl2O1xuaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgYnVnVGVzdERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAvLyBTZXR1cFxuICBidWdUZXN0RGl2LmlubmVySFRNTCA9ICcgIDxsaW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPVwiL2FcIj5hPC9hPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIi8+JztcbiAgLy8gTWFrZSBzdXJlIHRoYXQgbGluayBlbGVtZW50cyBnZXQgc2VyaWFsaXplZCBjb3JyZWN0bHkgYnkgaW5uZXJIVE1MXG4gIC8vIFRoaXMgcmVxdWlyZXMgYSB3cmFwcGVyIGVsZW1lbnQgaW4gSUVcbiAgaW5uZXJIVE1MQnVnID0gIWJ1Z1Rlc3REaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xpbmsnKS5sZW5ndGg7XG4gIGJ1Z1Rlc3REaXYgPSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogV3JhcCBtYXAgZnJvbSBqcXVlcnkuXG4gKi9cblxudmFyIG1hcCA9IHtcbiAgbGVnZW5kOiBbMSwgJzxmaWVsZHNldD4nLCAnPC9maWVsZHNldD4nXSxcbiAgdHI6IFsyLCAnPHRhYmxlPjx0Ym9keT4nLCAnPC90Ym9keT48L3RhYmxlPiddLFxuICBjb2w6IFsyLCAnPHRhYmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4nLCAnPC9jb2xncm91cD48L3RhYmxlPiddLFxuICAvLyBmb3Igc2NyaXB0L2xpbmsvc3R5bGUgdGFncyB0byB3b3JrIGluIElFNi04LCB5b3UgaGF2ZSB0byB3cmFwXG4gIC8vIGluIGEgZGl2IHdpdGggYSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgaW4gZnJvbnQsIGhhIVxuICBfZGVmYXVsdDogaW5uZXJIVE1MQnVnID8gWzEsICdYPGRpdj4nLCAnPC9kaXY+J10gOiBbMCwgJycsICcnXVxufTtcblxubWFwLnRkID1cbm1hcC50aCA9IFszLCAnPHRhYmxlPjx0Ym9keT48dHI+JywgJzwvdHI+PC90Ym9keT48L3RhYmxlPiddO1xuXG5tYXAub3B0aW9uID1cbm1hcC5vcHRncm91cCA9IFsxLCAnPHNlbGVjdCBtdWx0aXBsZT1cIm11bHRpcGxlXCI+JywgJzwvc2VsZWN0PiddO1xuXG5tYXAudGhlYWQgPVxubWFwLnRib2R5ID1cbm1hcC5jb2xncm91cCA9XG5tYXAuY2FwdGlvbiA9XG5tYXAudGZvb3QgPSBbMSwgJzx0YWJsZT4nLCAnPC90YWJsZT4nXTtcblxubWFwLnBvbHlsaW5lID1cbm1hcC5lbGxpcHNlID1cbm1hcC5wb2x5Z29uID1cbm1hcC5jaXJjbGUgPVxubWFwLnRleHQgPVxubWFwLmxpbmUgPVxubWFwLnBhdGggPVxubWFwLnJlY3QgPVxubWFwLmcgPSBbMSwgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZlcnNpb249XCIxLjFcIj4nLCc8L3N2Zz4nXTtcblxuLyoqXG4gKiBQYXJzZSBgaHRtbGAgYW5kIHJldHVybiBhIERPTSBOb2RlIGluc3RhbmNlLCB3aGljaCBjb3VsZCBiZSBhIFRleHROb2RlLFxuICogSFRNTCBET00gTm9kZSBvZiBzb21lIGtpbmQgKDxkaXY+IGZvciBleGFtcGxlKSwgb3IgYSBEb2N1bWVudEZyYWdtZW50XG4gKiBpbnN0YW5jZSwgZGVwZW5kaW5nIG9uIHRoZSBjb250ZW50cyBvZiB0aGUgYGh0bWxgIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaHRtbCAtIEhUTUwgc3RyaW5nIHRvIFwiZG9taWZ5XCJcbiAqIEBwYXJhbSB7RG9jdW1lbnR9IGRvYyAtIFRoZSBgZG9jdW1lbnRgIGluc3RhbmNlIHRvIGNyZWF0ZSB0aGUgTm9kZSBmb3JcbiAqIEByZXR1cm4ge0RPTU5vZGV9IHRoZSBUZXh0Tm9kZSwgRE9NIE5vZGUsIG9yIERvY3VtZW50RnJhZ21lbnQgaW5zdGFuY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlKGh0bWwsIGRvYykge1xuICBpZiAoJ3N0cmluZycgIT0gdHlwZW9mIGh0bWwpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N0cmluZyBleHBlY3RlZCcpO1xuXG4gIC8vIGRlZmF1bHQgdG8gdGhlIGdsb2JhbCBgZG9jdW1lbnRgIG9iamVjdFxuICBpZiAoIWRvYykgZG9jID0gZG9jdW1lbnQ7XG5cbiAgLy8gdGFnIG5hbWVcbiAgdmFyIG0gPSAvPChbXFx3Ol0rKS8uZXhlYyhodG1sKTtcbiAgaWYgKCFtKSByZXR1cm4gZG9jLmNyZWF0ZVRleHROb2RlKGh0bWwpO1xuXG4gIGh0bWwgPSBodG1sLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTsgLy8gUmVtb3ZlIGxlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZVxuXG4gIHZhciB0YWcgPSBtWzFdO1xuXG4gIC8vIGJvZHkgc3VwcG9ydFxuICBpZiAodGFnID09ICdib2R5Jykge1xuICAgIHZhciBlbCA9IGRvYy5jcmVhdGVFbGVtZW50KCdodG1sJyk7XG4gICAgZWwuaW5uZXJIVE1MID0gaHRtbDtcbiAgICByZXR1cm4gZWwucmVtb3ZlQ2hpbGQoZWwubGFzdENoaWxkKTtcbiAgfVxuXG4gIC8vIHdyYXAgbWFwXG4gIHZhciB3cmFwID0gbWFwW3RhZ10gfHwgbWFwLl9kZWZhdWx0O1xuICB2YXIgZGVwdGggPSB3cmFwWzBdO1xuICB2YXIgcHJlZml4ID0gd3JhcFsxXTtcbiAgdmFyIHN1ZmZpeCA9IHdyYXBbMl07XG4gIHZhciBlbCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgZWwuaW5uZXJIVE1MID0gcHJlZml4ICsgaHRtbCArIHN1ZmZpeDtcbiAgd2hpbGUgKGRlcHRoLS0pIGVsID0gZWwubGFzdENoaWxkO1xuXG4gIC8vIG9uZSBlbGVtZW50XG4gIGlmIChlbC5maXJzdENoaWxkID09IGVsLmxhc3RDaGlsZCkge1xuICAgIHJldHVybiBlbC5yZW1vdmVDaGlsZChlbC5maXJzdENoaWxkKTtcbiAgfVxuXG4gIC8vIHNldmVyYWwgZWxlbWVudHNcbiAgdmFyIGZyYWdtZW50ID0gZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgd2hpbGUgKGVsLmZpcnN0Q2hpbGQpIHtcbiAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChlbC5yZW1vdmVDaGlsZChlbC5maXJzdENoaWxkKSk7XG4gIH1cblxuICByZXR1cm4gZnJhZ21lbnQ7XG59XG4iLCIvKiFcbiAgKiBkb21yZWFkeSAoYykgRHVzdGluIERpYXogMjAxNCAtIExpY2Vuc2UgTUlUXG4gICovXG4hZnVuY3Rpb24gKG5hbWUsIGRlZmluaXRpb24pIHtcblxuICBpZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZpbmVkJykgbW9kdWxlLmV4cG9ydHMgPSBkZWZpbml0aW9uKClcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnKSBkZWZpbmUoZGVmaW5pdGlvbilcbiAgZWxzZSB0aGlzW25hbWVdID0gZGVmaW5pdGlvbigpXG5cbn0oJ2RvbXJlYWR5JywgZnVuY3Rpb24gKCkge1xuXG4gIHZhciBmbnMgPSBbXSwgbGlzdGVuZXJcbiAgICAsIGRvYyA9IGRvY3VtZW50XG4gICAgLCBoYWNrID0gZG9jLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbFxuICAgICwgZG9tQ29udGVudExvYWRlZCA9ICdET01Db250ZW50TG9hZGVkJ1xuICAgICwgbG9hZGVkID0gKGhhY2sgPyAvXmxvYWRlZHxeYy8gOiAvXmxvYWRlZHxeaXxeYy8pLnRlc3QoZG9jLnJlYWR5U3RhdGUpXG5cblxuICBpZiAoIWxvYWRlZClcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoZG9tQ29udGVudExvYWRlZCwgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tQ29udGVudExvYWRlZCwgbGlzdGVuZXIpXG4gICAgbG9hZGVkID0gMVxuICAgIHdoaWxlIChsaXN0ZW5lciA9IGZucy5zaGlmdCgpKSBsaXN0ZW5lcigpXG4gIH0pXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgIGxvYWRlZCA/IHNldFRpbWVvdXQoZm4sIDApIDogZm5zLnB1c2goZm4pXG4gIH1cblxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qIGdsb2JhbHNcblx0U2V0LFxuXHRNYXAsXG5cdFdlYWtTZXQsXG5cdFdlYWtNYXAsXG5cblx0UHJvbWlzZSxcblxuXHRTeW1ib2wsXG5cdFByb3h5LFxuXG5cdEF0b21pY3MsXG5cdFNoYXJlZEFycmF5QnVmZmVyLFxuXG5cdEFycmF5QnVmZmVyLFxuXHREYXRhVmlldyxcblx0VWludDhBcnJheSxcblx0RmxvYXQzMkFycmF5LFxuXHRGbG9hdDY0QXJyYXksXG5cdEludDhBcnJheSxcblx0SW50MTZBcnJheSxcblx0SW50MzJBcnJheSxcblx0VWludDhDbGFtcGVkQXJyYXksXG5cdFVpbnQxNkFycmF5LFxuXHRVaW50MzJBcnJheSxcbiovXG5cbnZhciB1bmRlZmluZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2hhZG93LXJlc3RyaWN0ZWQtbmFtZXNcblxudmFyIFRocm93VHlwZUVycm9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvclxuXHQ/IChmdW5jdGlvbiAoKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJ2NhbGxlZScpLmdldDsgfSgpKVxuXHQ6IGZ1bmN0aW9uICgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyB9O1xuXG52YXIgaGFzU3ltYm9scyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gJ3N5bWJvbCc7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIGdlbmVyYXRvcjsgLy8gPSBmdW5jdGlvbiAqICgpIHt9O1xudmFyIGdlbmVyYXRvckZ1bmN0aW9uID0gZ2VuZXJhdG9yID8gZ2V0UHJvdG8oZ2VuZXJhdG9yKSA6IHVuZGVmaW5lZDtcbnZhciBhc3luY0ZuOyAvLyBhc3luYyBmdW5jdGlvbigpIHt9O1xudmFyIGFzeW5jRnVuY3Rpb24gPSBhc3luY0ZuID8gYXN5bmNGbi5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZDtcbnZhciBhc3luY0dlbjsgLy8gYXN5bmMgZnVuY3Rpb24gKiAoKSB7fTtcbnZhciBhc3luY0dlbkZ1bmN0aW9uID0gYXN5bmNHZW4gPyBnZXRQcm90byhhc3luY0dlbikgOiB1bmRlZmluZWQ7XG52YXIgYXN5bmNHZW5JdGVyYXRvciA9IGFzeW5jR2VuID8gYXN5bmNHZW4oKSA6IHVuZGVmaW5lZDtcblxudmFyIFR5cGVkQXJyYXkgPSB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBnZXRQcm90byhVaW50OEFycmF5KTtcblxudmFyIElOVFJJTlNJQ1MgPSB7XG5cdCckICVBcnJheSUnOiBBcnJheSxcblx0JyQgJUFycmF5QnVmZmVyJSc6IHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBcnJheUJ1ZmZlcixcblx0JyQgJUFycmF5QnVmZmVyUHJvdG90eXBlJSc6IHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBcnJheUJ1ZmZlci5wcm90b3R5cGUsXG5cdCckICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpIDogdW5kZWZpbmVkLFxuXHQnJCAlQXJyYXlQcm90b3R5cGUlJzogQXJyYXkucHJvdG90eXBlLFxuXHQnJCAlQXJyYXlQcm90b19lbnRyaWVzJSc6IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzLFxuXHQnJCAlQXJyYXlQcm90b19mb3JFYWNoJSc6IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLFxuXHQnJCAlQXJyYXlQcm90b19rZXlzJSc6IEFycmF5LnByb3RvdHlwZS5rZXlzLFxuXHQnJCAlQXJyYXlQcm90b192YWx1ZXMlJzogQXJyYXkucHJvdG90eXBlLnZhbHVlcyxcblx0JyQgJUFzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiB1bmRlZmluZWQsXG5cdCckICVBc3luY0Z1bmN0aW9uJSc6IGFzeW5jRnVuY3Rpb24sXG5cdCckICVBc3luY0Z1bmN0aW9uUHJvdG90eXBlJSc6IGFzeW5jRnVuY3Rpb24gPyBhc3luY0Z1bmN0aW9uLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcblx0JyQgJUFzeW5jR2VuZXJhdG9yJSc6IGFzeW5jR2VuID8gZ2V0UHJvdG8oYXN5bmNHZW5JdGVyYXRvcikgOiB1bmRlZmluZWQsXG5cdCckICVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSc6IGFzeW5jR2VuRnVuY3Rpb24sXG5cdCckICVBc3luY0dlbmVyYXRvclByb3RvdHlwZSUnOiBhc3luY0dlbkZ1bmN0aW9uID8gYXN5bmNHZW5GdW5jdGlvbi5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG5cdCckICVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IGFzeW5jR2VuSXRlcmF0b3IgJiYgaGFzU3ltYm9scyAmJiBTeW1ib2wuYXN5bmNJdGVyYXRvciA/IGFzeW5jR2VuSXRlcmF0b3JbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkgOiB1bmRlZmluZWQsXG5cdCckICVBdG9taWNzJSc6IHR5cGVvZiBBdG9taWNzID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEF0b21pY3MsXG5cdCckICVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCckICVCb29sZWFuUHJvdG90eXBlJSc6IEJvb2xlYW4ucHJvdG90eXBlLFxuXHQnJCAlRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJCAlRGF0YVZpZXdQcm90b3R5cGUlJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LnByb3RvdHlwZSxcblx0JyQgJURhdGUlJzogRGF0ZSxcblx0JyQgJURhdGVQcm90b3R5cGUlJzogRGF0ZS5wcm90b3R5cGUsXG5cdCckICVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJCAlZGVjb2RlVVJJQ29tcG9uZW50JSc6IGRlY29kZVVSSUNvbXBvbmVudCxcblx0JyQgJWVuY29kZVVSSSUnOiBlbmNvZGVVUkksXG5cdCckICVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJCAlRXJyb3IlJzogRXJyb3IsXG5cdCckICVFcnJvclByb3RvdHlwZSUnOiBFcnJvci5wcm90b3R5cGUsXG5cdCckICVldmFsJSc6IGV2YWwsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZXZhbFxuXHQnJCAlRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyQgJUV2YWxFcnJvclByb3RvdHlwZSUnOiBFdmFsRXJyb3IucHJvdG90eXBlLFxuXHQnJCAlRmxvYXQzMkFycmF5JSc6IHR5cGVvZiBGbG9hdDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQzMkFycmF5LFxuXHQnJCAlRmxvYXQzMkFycmF5UHJvdG90eXBlJSc6IHR5cGVvZiBGbG9hdDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQzMkFycmF5LnByb3RvdHlwZSxcblx0JyQgJUZsb2F0NjRBcnJheSUnOiB0eXBlb2YgRmxvYXQ2NEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZsb2F0NjRBcnJheSxcblx0JyQgJUZsb2F0NjRBcnJheVByb3RvdHlwZSUnOiB0eXBlb2YgRmxvYXQ2NEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZsb2F0NjRBcnJheS5wcm90b3R5cGUsXG5cdCckICVGdW5jdGlvbiUnOiBGdW5jdGlvbixcblx0JyQgJUZ1bmN0aW9uUHJvdG90eXBlJSc6IEZ1bmN0aW9uLnByb3RvdHlwZSxcblx0JyQgJUdlbmVyYXRvciUnOiBnZW5lcmF0b3IgPyBnZXRQcm90byhnZW5lcmF0b3IoKSkgOiB1bmRlZmluZWQsXG5cdCckICVHZW5lcmF0b3JGdW5jdGlvbiUnOiBnZW5lcmF0b3JGdW5jdGlvbixcblx0JyQgJUdlbmVyYXRvclByb3RvdHlwZSUnOiBnZW5lcmF0b3JGdW5jdGlvbiA/IGdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcblx0JyQgJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyQgJUludDhBcnJheVByb3RvdHlwZSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheS5wcm90b3R5cGUsXG5cdCckICVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCckICVJbnQxNkFycmF5UHJvdG90eXBlJSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheS5wcm90b3R5cGUsXG5cdCckICVJbnQzMkFycmF5JSc6IHR5cGVvZiBJbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDMyQXJyYXksXG5cdCckICVJbnQzMkFycmF5UHJvdG90eXBlJSc6IHR5cGVvZiBJbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDMyQXJyYXkucHJvdG90eXBlLFxuXHQnJCAlaXNGaW5pdGUlJzogaXNGaW5pdGUsXG5cdCckICVpc05hTiUnOiBpc05hTixcblx0JyQgJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyQgJUpTT04lJzogSlNPTixcblx0JyQgJUpTT05QYXJzZSUnOiBKU09OLnBhcnNlLFxuXHQnJCAlTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJCAlTWFwSXRlcmF0b3JQcm90b3R5cGUlJzogdHlwZW9mIE1hcCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWhhc1N5bWJvbHMgPyB1bmRlZmluZWQgOiBnZXRQcm90byhuZXcgTWFwKClbU3ltYm9sLml0ZXJhdG9yXSgpKSxcblx0JyQgJU1hcFByb3RvdHlwZSUnOiB0eXBlb2YgTWFwID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IE1hcC5wcm90b3R5cGUsXG5cdCckICVNYXRoJSc6IE1hdGgsXG5cdCckICVOdW1iZXIlJzogTnVtYmVyLFxuXHQnJCAlTnVtYmVyUHJvdG90eXBlJSc6IE51bWJlci5wcm90b3R5cGUsXG5cdCckICVPYmplY3QlJzogT2JqZWN0LFxuXHQnJCAlT2JqZWN0UHJvdG90eXBlJSc6IE9iamVjdC5wcm90b3R5cGUsXG5cdCckICVPYmpQcm90b190b1N0cmluZyUnOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLFxuXHQnJCAlT2JqUHJvdG9fdmFsdWVPZiUnOiBPYmplY3QucHJvdG90eXBlLnZhbHVlT2YsXG5cdCckICVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCckICVwYXJzZUludCUnOiBwYXJzZUludCxcblx0JyQgJVByb21pc2UlJzogdHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJvbWlzZSxcblx0JyQgJVByb21pc2VQcm90b3R5cGUlJzogdHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJvbWlzZS5wcm90b3R5cGUsXG5cdCckICVQcm9taXNlUHJvdG9fdGhlbiUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLnByb3RvdHlwZS50aGVuLFxuXHQnJCAlUHJvbWlzZV9hbGwlJzogdHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJvbWlzZS5hbGwsXG5cdCckICVQcm9taXNlX3JlamVjdCUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLnJlamVjdCxcblx0JyQgJVByb21pc2VfcmVzb2x2ZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLnJlc29sdmUsXG5cdCckICVQcm94eSUnOiB0eXBlb2YgUHJveHkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJveHksXG5cdCckICVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCckICVSYW5nZUVycm9yUHJvdG90eXBlJSc6IFJhbmdlRXJyb3IucHJvdG90eXBlLFxuXHQnJCAlUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCckICVSZWZlcmVuY2VFcnJvclByb3RvdHlwZSUnOiBSZWZlcmVuY2VFcnJvci5wcm90b3R5cGUsXG5cdCckICVSZWZsZWN0JSc6IHR5cGVvZiBSZWZsZWN0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFJlZmxlY3QsXG5cdCckICVSZWdFeHAlJzogUmVnRXhwLFxuXHQnJCAlUmVnRXhwUHJvdG90eXBlJSc6IFJlZ0V4cC5wcm90b3R5cGUsXG5cdCckICVTZXQlJzogdHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTZXQsXG5cdCckICVTZXRJdGVyYXRvclByb3RvdHlwZSUnOiB0eXBlb2YgU2V0ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzU3ltYm9scyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKG5ldyBTZXQoKVtTeW1ib2wuaXRlcmF0b3JdKCkpLFxuXHQnJCAlU2V0UHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LnByb3RvdHlwZSxcblx0JyQgJVNoYXJlZEFycmF5QnVmZmVyJSc6IHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTaGFyZWRBcnJheUJ1ZmZlcixcblx0JyQgJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTaGFyZWRBcnJheUJ1ZmZlci5wcm90b3R5cGUsXG5cdCckICVTdHJpbmclJzogU3RyaW5nLFxuXHQnJCAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCckICVTdHJpbmdQcm90b3R5cGUlJzogU3RyaW5nLnByb3RvdHlwZSxcblx0JyQgJVN5bWJvbCUnOiBoYXNTeW1ib2xzID8gU3ltYm9sIDogdW5kZWZpbmVkLFxuXHQnJCAlU3ltYm9sUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuXHQnJCAlU3ludGF4RXJyb3IlJzogU3ludGF4RXJyb3IsXG5cdCckICVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBTeW50YXhFcnJvci5wcm90b3R5cGUsXG5cdCckICVUaHJvd1R5cGVFcnJvciUnOiBUaHJvd1R5cGVFcnJvcixcblx0JyQgJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyQgJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogVHlwZWRBcnJheSA/IFR5cGVkQXJyYXkucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuXHQnJCAlVHlwZUVycm9yJSc6IFR5cGVFcnJvcixcblx0JyQgJVR5cGVFcnJvclByb3RvdHlwZSUnOiBUeXBlRXJyb3IucHJvdG90eXBlLFxuXHQnJCAlVWludDhBcnJheSUnOiB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OEFycmF5LFxuXHQnJCAlVWludDhBcnJheVByb3RvdHlwZSUnOiB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OEFycmF5LnByb3RvdHlwZSxcblx0JyQgJVVpbnQ4Q2xhbXBlZEFycmF5JSc6IHR5cGVvZiBVaW50OENsYW1wZWRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OENsYW1wZWRBcnJheSxcblx0JyQgJVVpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlJSc6IHR5cGVvZiBVaW50OENsYW1wZWRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OENsYW1wZWRBcnJheS5wcm90b3R5cGUsXG5cdCckICVVaW50MTZBcnJheSUnOiB0eXBlb2YgVWludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDE2QXJyYXksXG5cdCckICVVaW50MTZBcnJheVByb3RvdHlwZSUnOiB0eXBlb2YgVWludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDE2QXJyYXkucHJvdG90eXBlLFxuXHQnJCAlVWludDMyQXJyYXklJzogdHlwZW9mIFVpbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQzMkFycmF5LFxuXHQnJCAlVWludDMyQXJyYXlQcm90b3R5cGUlJzogdHlwZW9mIFVpbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQzMkFycmF5LnByb3RvdHlwZSxcblx0JyQgJVVSSUVycm9yJSc6IFVSSUVycm9yLFxuXHQnJCAlVVJJRXJyb3JQcm90b3R5cGUlJzogVVJJRXJyb3IucHJvdG90eXBlLFxuXHQnJCAlV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJCAlV2Vha01hcFByb3RvdHlwZSUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLnByb3RvdHlwZSxcblx0JyQgJVdlYWtTZXQlJzogdHlwZW9mIFdlYWtTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1NldCxcblx0JyQgJVdlYWtTZXRQcm90b3R5cGUlJzogdHlwZW9mIFdlYWtTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1NldC5wcm90b3R5cGVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0SW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgdHlwZW9mIGFsbG93TWlzc2luZyAhPT0gJ2Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIGtleSA9ICckICcgKyBuYW1lO1xuXHRpZiAoIShrZXkgaW4gSU5UUklOU0lDUykpIHtcblx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG5cdH1cblxuXHQvLyBpc3RhbmJ1bCBpZ25vcmUgaWYgLy8gaG9wZWZ1bGx5IHRoaXMgaXMgaW1wb3NzaWJsZSB0byB0ZXN0IDotKVxuXHRpZiAodHlwZW9mIElOVFJJTlNJQ1Nba2V5XSA9PT0gJ3VuZGVmaW5lZCcgJiYgIWFsbG93TWlzc2luZykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZXhpc3RzLCBidXQgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGZpbGUgYW4gaXNzdWUhJyk7XG5cdH1cblx0cmV0dXJuIElOVFJJTlNJQ1Nba2V5XTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuL0dldEludHJpbnNpYycpO1xuXG52YXIgJE9iamVjdCA9IEdldEludHJpbnNpYygnJU9iamVjdCUnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYXNzZXJ0UmVjb3JkJyk7XG52YXIgJGlzTmFOID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzRmluaXRlJyk7XG5cbnZhciBzaWduID0gcmVxdWlyZSgnLi9oZWxwZXJzL3NpZ24nKTtcbnZhciBtb2QgPSByZXF1aXJlKCcuL2hlbHBlcnMvbW9kJyk7XG5cbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnaXMtY2FsbGFibGUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJ2VzLXRvLXByaW1pdGl2ZS9lczUnKTtcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG4vLyBodHRwczovL2VzNS5naXRodWIuaW8vI3g5XG52YXIgRVM1ID0ge1xuXHRUb1ByaW1pdGl2ZTogdG9QcmltaXRpdmUsXG5cblx0VG9Cb29sZWFuOiBmdW5jdGlvbiBUb0Jvb2xlYW4odmFsdWUpIHtcblx0XHRyZXR1cm4gISF2YWx1ZTtcblx0fSxcblx0VG9OdW1iZXI6IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdFx0cmV0dXJuICt2YWx1ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbXBsaWNpdC1jb2VyY2lvblxuXHR9LFxuXHRUb0ludGVnZXI6IGZ1bmN0aW9uIFRvSW50ZWdlcih2YWx1ZSkge1xuXHRcdHZhciBudW1iZXIgPSB0aGlzLlRvTnVtYmVyKHZhbHVlKTtcblx0XHRpZiAoJGlzTmFOKG51bWJlcikpIHsgcmV0dXJuIDA7IH1cblx0XHRpZiAobnVtYmVyID09PSAwIHx8ICEkaXNGaW5pdGUobnVtYmVyKSkgeyByZXR1cm4gbnVtYmVyOyB9XG5cdFx0cmV0dXJuIHNpZ24obnVtYmVyKSAqIE1hdGguZmxvb3IoTWF0aC5hYnMobnVtYmVyKSk7XG5cdH0sXG5cdFRvSW50MzI6IGZ1bmN0aW9uIFRvSW50MzIoeCkge1xuXHRcdHJldHVybiB0aGlzLlRvTnVtYmVyKHgpID4+IDA7XG5cdH0sXG5cdFRvVWludDMyOiBmdW5jdGlvbiBUb1VpbnQzMih4KSB7XG5cdFx0cmV0dXJuIHRoaXMuVG9OdW1iZXIoeCkgPj4+IDA7XG5cdH0sXG5cdFRvVWludDE2OiBmdW5jdGlvbiBUb1VpbnQxNih2YWx1ZSkge1xuXHRcdHZhciBudW1iZXIgPSB0aGlzLlRvTnVtYmVyKHZhbHVlKTtcblx0XHRpZiAoJGlzTmFOKG51bWJlcikgfHwgbnVtYmVyID09PSAwIHx8ICEkaXNGaW5pdGUobnVtYmVyKSkgeyByZXR1cm4gMDsgfVxuXHRcdHZhciBwb3NJbnQgPSBzaWduKG51bWJlcikgKiBNYXRoLmZsb29yKE1hdGguYWJzKG51bWJlcikpO1xuXHRcdHJldHVybiBtb2QocG9zSW50LCAweDEwMDAwKTtcblx0fSxcblx0VG9TdHJpbmc6IGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlKSB7XG5cdFx0cmV0dXJuICRTdHJpbmcodmFsdWUpO1xuXHR9LFxuXHRUb09iamVjdDogZnVuY3Rpb24gVG9PYmplY3QodmFsdWUpIHtcblx0XHR0aGlzLkNoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlKTtcblx0XHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG5cdH0sXG5cdENoZWNrT2JqZWN0Q29lcmNpYmxlOiBmdW5jdGlvbiBDaGVja09iamVjdENvZXJjaWJsZSh2YWx1ZSwgb3B0TWVzc2FnZSkge1xuXHRcdC8qIGpzaGludCBlcW51bGw6dHJ1ZSAqL1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihvcHRNZXNzYWdlIHx8ICdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIHZhbHVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXHRJc0NhbGxhYmxlOiBJc0NhbGxhYmxlLFxuXHRTYW1lVmFsdWU6IGZ1bmN0aW9uIFNhbWVWYWx1ZSh4LCB5KSB7XG5cdFx0aWYgKHggPT09IHkpIHsgLy8gMCA9PT0gLTAsIGJ1dCB0aGV5IGFyZSBub3QgaWRlbnRpY2FsLlxuXHRcdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xuXHR9LFxuXG5cdC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOFxuXHRUeXBlOiBmdW5jdGlvbiBUeXBlKHgpIHtcblx0XHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuICdOdWxsJztcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdFx0cmV0dXJuICdVbmRlZmluZWQnO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gJ09iamVjdCc7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRcdHJldHVybiAnTnVtYmVyJztcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRcdHJldHVybiAnQm9vbGVhbic7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdHJldHVybiAnU3RyaW5nJztcblx0XHR9XG5cdH0sXG5cblx0Ly8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdElzUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBJc1Byb3BlcnR5RGVzY3JpcHRvcihEZXNjKSB7XG5cdFx0aWYgKHRoaXMuVHlwZShEZXNjKSAhPT0gJ09iamVjdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dmFyIGFsbG93ZWQgPSB7XG5cdFx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tFbnVtZXJhYmxlXV0nOiB0cnVlLFxuXHRcdFx0J1tbR2V0XV0nOiB0cnVlLFxuXHRcdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdFx0J1tbVmFsdWVdXSc6IHRydWUsXG5cdFx0XHQnW1tXcml0YWJsZV1dJzogdHJ1ZVxuXHRcdH07XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gRGVzYykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cdFx0XHRpZiAoaGFzKERlc2MsIGtleSkgJiYgIWFsbG93ZWRba2V5XSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIGlzRGF0YSA9IGhhcyhEZXNjLCAnW1tWYWx1ZV1dJyk7XG5cdFx0dmFyIElzQWNjZXNzb3IgPSBoYXMoRGVzYywgJ1tbR2V0XV0nKSB8fCBoYXMoRGVzYywgJ1tbU2V0XV0nKTtcblx0XHRpZiAoaXNEYXRhICYmIElzQWNjZXNzb3IpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdQcm9wZXJ0eSBEZXNjcmlwdG9ycyBtYXkgbm90IGJlIGJvdGggYWNjZXNzb3IgYW5kIGRhdGEgZGVzY3JpcHRvcnMnKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Ly8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTguMTAuMVxuXHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRcdGlmICh0eXBlb2YgRGVzYyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRhc3NlcnRSZWNvcmQodGhpcywgJ1Byb3BlcnR5IERlc2NyaXB0b3InLCAnRGVzYycsIERlc2MpO1xuXG5cdFx0aWYgKCFoYXMoRGVzYywgJ1tbR2V0XV0nKSAmJiAhaGFzKERlc2MsICdbW1NldF1dJykpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOC4xMC4yXG5cdElzRGF0YURlc2NyaXB0b3I6IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRcdGlmICh0eXBlb2YgRGVzYyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRhc3NlcnRSZWNvcmQodGhpcywgJ1Byb3BlcnR5IERlc2NyaXB0b3InLCAnRGVzYycsIERlc2MpO1xuXG5cdFx0aWYgKCFoYXMoRGVzYywgJ1tbVmFsdWVdXScpICYmICFoYXMoRGVzYywgJ1tbV3JpdGFibGVdXScpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Ly8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTguMTAuM1xuXHRJc0dlbmVyaWNEZXNjcmlwdG9yOiBmdW5jdGlvbiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIHtcblx0XHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0YXNzZXJ0UmVjb3JkKHRoaXMsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRcdGlmICghdGhpcy5Jc0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSAmJiAhdGhpcy5Jc0RhdGFEZXNjcmlwdG9yKERlc2MpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0Ly8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTguMTAuNFxuXHRGcm9tUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0XHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gRGVzYztcblx0XHR9XG5cblx0XHRhc3NlcnRSZWNvcmQodGhpcywgJ1Byb3BlcnR5IERlc2NyaXB0b3InLCAnRGVzYycsIERlc2MpO1xuXG5cdFx0aWYgKHRoaXMuSXNEYXRhRGVzY3JpcHRvcihEZXNjKSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dmFsdWU6IERlc2NbJ1tbVmFsdWVdXSddLFxuXHRcdFx0XHR3cml0YWJsZTogISFEZXNjWydbW1dyaXRhYmxlXV0nXSxcblx0XHRcdFx0ZW51bWVyYWJsZTogISFEZXNjWydbW0VudW1lcmFibGVdXSddLFxuXHRcdFx0XHRjb25maWd1cmFibGU6ICEhRGVzY1snW1tDb25maWd1cmFibGVdXSddXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSBpZiAodGhpcy5Jc0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Z2V0OiBEZXNjWydbW0dldF1dJ10sXG5cdFx0XHRcdHNldDogRGVzY1snW1tTZXRdXSddLFxuXHRcdFx0XHRlbnVtZXJhYmxlOiAhIURlc2NbJ1tbRW51bWVyYWJsZV1dJ10sXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogISFEZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ11cblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdGcm9tUHJvcGVydHlEZXNjcmlwdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggYSBmdWxseSBwb3B1bGF0ZWQgUHJvcGVydHkgRGVzY3JpcHRvcicpO1xuXHRcdH1cblx0fSxcblxuXHQvLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOC4xMC41XG5cdFRvUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0XHRpZiAodGhpcy5UeXBlKE9iaikgIT09ICdPYmplY3QnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2MgPSB7fTtcblx0XHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdFx0ZGVzY1snW1tFbnVtZXJhYmxlXV0nXSA9IHRoaXMuVG9Cb29sZWFuKE9iai5lbnVtZXJhYmxlKTtcblx0XHR9XG5cdFx0aWYgKGhhcyhPYmosICdjb25maWd1cmFibGUnKSkge1xuXHRcdFx0ZGVzY1snW1tDb25maWd1cmFibGVdXSddID0gdGhpcy5Ub0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdFx0fVxuXHRcdGlmIChoYXMoT2JqLCAndmFsdWUnKSkge1xuXHRcdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdFx0fVxuXHRcdGlmIChoYXMoT2JqLCAnd3JpdGFibGUnKSkge1xuXHRcdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSB0aGlzLlRvQm9vbGVhbihPYmoud3JpdGFibGUpO1xuXHRcdH1cblx0XHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0XHR2YXIgZ2V0dGVyID0gT2JqLmdldDtcblx0XHRcdGlmICh0eXBlb2YgZ2V0dGVyICE9PSAndW5kZWZpbmVkJyAmJiAhdGhpcy5Jc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignZ2V0dGVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuXHRcdFx0fVxuXHRcdFx0ZGVzY1snW1tHZXRdXSddID0gZ2V0dGVyO1xuXHRcdH1cblx0XHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0XHR2YXIgc2V0dGVyID0gT2JqLnNldDtcblx0XHRcdGlmICh0eXBlb2Ygc2V0dGVyICE9PSAndW5kZWZpbmVkJyAmJiAhdGhpcy5Jc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ3NldHRlciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblx0XHRcdH1cblx0XHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0XHR9XG5cblx0XHRpZiAoKGhhcyhkZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhkZXNjLCAnW1tTZXRdXScpKSAmJiAoaGFzKGRlc2MsICdbW1ZhbHVlXV0nKSB8fCBoYXMoZGVzYywgJ1tbV3JpdGFibGVdXScpKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdFx0fVxuXHRcdHJldHVybiBkZXNjO1xuXHR9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEVTNTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJy4uL0dldEludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcbnZhciAkU3ludGF4RXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVTeW50YXhFcnJvciUnKTtcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgcHJlZGljYXRlcyA9IHtcbiAgLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG4gICdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoRVMsIERlc2MpIHtcbiAgICBpZiAoRVMuVHlwZShEZXNjKSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGFsbG93ZWQgPSB7XG4gICAgICAnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG4gICAgICAnW1tFbnVtZXJhYmxlXV0nOiB0cnVlLFxuICAgICAgJ1tbR2V0XV0nOiB0cnVlLFxuICAgICAgJ1tbU2V0XV0nOiB0cnVlLFxuICAgICAgJ1tbVmFsdWVdXSc6IHRydWUsXG4gICAgICAnW1tXcml0YWJsZV1dJzogdHJ1ZVxuICAgIH07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gRGVzYykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICBpZiAoaGFzKERlc2MsIGtleSkgJiYgIWFsbG93ZWRba2V5XSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGlzRGF0YSA9IGhhcyhEZXNjLCAnW1tWYWx1ZV1dJyk7XG4gICAgdmFyIElzQWNjZXNzb3IgPSBoYXMoRGVzYywgJ1tbR2V0XV0nKSB8fCBoYXMoRGVzYywgJ1tbU2V0XV0nKTtcbiAgICBpZiAoaXNEYXRhICYmIElzQWNjZXNzb3IpIHtcbiAgICAgIHRocm93IG5ldyAkVHlwZUVycm9yKCdQcm9wZXJ0eSBEZXNjcmlwdG9ycyBtYXkgbm90IGJlIGJvdGggYWNjZXNzb3IgYW5kIGRhdGEgZGVzY3JpcHRvcnMnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYXNzZXJ0UmVjb3JkKEVTLCByZWNvcmRUeXBlLCBhcmd1bWVudE5hbWUsIHZhbHVlKSB7XG4gIHZhciBwcmVkaWNhdGUgPSBwcmVkaWNhdGVzW3JlY29yZFR5cGVdO1xuICBpZiAodHlwZW9mIHByZWRpY2F0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ3Vua25vd24gcmVjb3JkIHR5cGU6ICcgKyByZWNvcmRUeXBlKTtcbiAgfVxuICBpZiAoIXByZWRpY2F0ZShFUywgdmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuICB9XG4gIGNvbnNvbGUubG9nKHByZWRpY2F0ZShFUywgdmFsdWUpLCB2YWx1ZSk7XG59O1xuIiwidmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiIsIm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtb2QobnVtYmVyLCBtb2R1bG8pIHtcblx0dmFyIHJlbWFpbiA9IG51bWJlciAlIG1vZHVsbztcblx0cmV0dXJuIE1hdGguZmxvb3IocmVtYWluID49IDAgPyByZW1haW4gOiByZW1haW4gKyBtb2R1bG8pO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2lnbihudW1iZXIpIHtcblx0cmV0dXJuIG51bWJlciA+PSAwID8gMSA6IC0xO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG5cbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnaXMtY2FsbGFibGUnKTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOC4xMi44XG52YXIgRVM1aW50ZXJuYWxTbG90cyA9IHtcblx0J1tbRGVmYXVsdFZhbHVlXV0nOiBmdW5jdGlvbiAoTykge1xuXHRcdHZhciBhY3R1YWxIaW50O1xuXHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdFx0YWN0dWFsSGludCA9IGFyZ3VtZW50c1sxXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YWN0dWFsSGludCA9IHRvU3RyLmNhbGwoTykgPT09ICdbb2JqZWN0IERhdGVdJyA/IFN0cmluZyA6IE51bWJlcjtcblx0XHR9XG5cblx0XHRpZiAoYWN0dWFsSGludCA9PT0gU3RyaW5nIHx8IGFjdHVhbEhpbnQgPT09IE51bWJlcikge1xuXHRcdFx0dmFyIG1ldGhvZHMgPSBhY3R1YWxIaW50ID09PSBTdHJpbmcgPyBbJ3RvU3RyaW5nJywgJ3ZhbHVlT2YnXSA6IFsndmFsdWVPZicsICd0b1N0cmluZyddO1xuXHRcdFx0dmFyIHZhbHVlLCBpO1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0aWYgKGlzQ2FsbGFibGUoT1ttZXRob2RzW2ldXSkpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IE9bbWV0aG9kc1tpXV0oKTtcblx0XHRcdFx0XHRpZiAoaXNQcmltaXRpdmUodmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgW1tEZWZhdWx0VmFsdWVdXSBoaW50IHN1cHBsaWVkJyk7XG5cdH1cbn07XG5cbi8vIGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTkuMVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1ByaW1pdGl2ZShpbnB1dCkge1xuXHRpZiAoaXNQcmltaXRpdmUoaW5wdXQpKSB7XG5cdFx0cmV0dXJuIGlucHV0O1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiBFUzVpbnRlcm5hbFNsb3RzWydbW0RlZmF1bHRWYWx1ZV1dJ10oaW5wdXQsIGFyZ3VtZW50c1sxXSk7XG5cdH1cblx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKTtcbn07XG4iLCJcbi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG52YXIgZXZlbnRzID0gcmVxdWlyZSgnY29tcG9uZW50LWV2ZW50Jyk7XG52YXIgZGVsZWdhdGUgPSByZXF1aXJlKCdkZWxlZ2F0ZS1ldmVudHMnKTtcbnZhciBmb3JjZUNhcHR1cmVFdmVudHMgPSBbJ2ZvY3VzJywgJ2JsdXInXTtcblxuLyoqXG4gKiBFeHBvc2UgYEV2ZW50c2AuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBFdmVudHM7XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhbiBgRXZlbnRzYCB3aXRoIHRoZSBnaXZlblxuICogYGVsYCBvYmplY3Qgd2hpY2ggZXZlbnRzIHdpbGwgYmUgYm91bmQgdG8sXG4gKiBhbmQgdGhlIGBvYmpgIHdoaWNoIHdpbGwgcmVjZWl2ZSBtZXRob2QgY2FsbHMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGVsXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIEV2ZW50cyhlbCwgb2JqKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBFdmVudHMpKSByZXR1cm4gbmV3IEV2ZW50cyhlbCwgb2JqKTtcbiAgaWYgKCFlbCkgdGhyb3cgbmV3IEVycm9yKCdlbGVtZW50IHJlcXVpcmVkJyk7XG4gIGlmICghb2JqKSB0aHJvdyBuZXcgRXJyb3IoJ29iamVjdCByZXF1aXJlZCcpO1xuICB0aGlzLmVsID0gZWw7XG4gIHRoaXMub2JqID0gb2JqO1xuICB0aGlzLl9ldmVudHMgPSB7fTtcbn1cblxuLyoqXG4gKiBTdWJzY3JpcHRpb24gaGVscGVyLlxuICovXG5cbkV2ZW50cy5wcm90b3R5cGUuc3ViID0gZnVuY3Rpb24oZXZlbnQsIG1ldGhvZCwgY2Ipe1xuICB0aGlzLl9ldmVudHNbZXZlbnRdID0gdGhpcy5fZXZlbnRzW2V2ZW50XSB8fCB7fTtcbiAgdGhpcy5fZXZlbnRzW2V2ZW50XVttZXRob2RdID0gY2I7XG59O1xuXG4vKipcbiAqIEJpbmQgdG8gYGV2ZW50YCB3aXRoIG9wdGlvbmFsIGBtZXRob2RgIG5hbWUuXG4gKiBXaGVuIGBtZXRob2RgIGlzIHVuZGVmaW5lZCBpdCBiZWNvbWVzIGBldmVudGBcbiAqIHdpdGggdGhlIFwib25cIiBwcmVmaXguXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogIERpcmVjdCBldmVudCBoYW5kbGluZzpcbiAqXG4gKiAgICBldmVudHMuYmluZCgnY2xpY2snKSAvLyBpbXBsaWVzIFwib25jbGlja1wiXG4gKiAgICBldmVudHMuYmluZCgnY2xpY2snLCAncmVtb3ZlJylcbiAqICAgIGV2ZW50cy5iaW5kKCdjbGljaycsICdzb3J0JywgJ2FzYycpXG4gKlxuICogIERlbGVnYXRlZCBldmVudCBoYW5kbGluZzpcbiAqXG4gKiAgICBldmVudHMuYmluZCgnY2xpY2sgbGkgPiBhJylcbiAqICAgIGV2ZW50cy5iaW5kKCdjbGljayBsaSA+IGEnLCAncmVtb3ZlJylcbiAqICAgIGV2ZW50cy5iaW5kKCdjbGljayBhLnNvcnQtYXNjZW5kaW5nJywgJ3NvcnQnLCAnYXNjJylcbiAqICAgIGV2ZW50cy5iaW5kKCdjbGljayBhLnNvcnQtZGVzY2VuZGluZycsICdzb3J0JywgJ2Rlc2MnKVxuICpcbiAqICBNdWx0aXBsZSBldmVudHMgaGFuZGxpbmc6XG4gKlxuICogICAgZXZlbnRzLmJpbmQoe1xuICogICAgICAnY2xpY2sgLnJlbW92ZSc6ICdyZW1vdmUnLFxuICogICAgICAnY2xpY2sgLmFkZCc6ICdhZGQnXG4gKiAgICB9KTtcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xvYmplY3R9IC0gb2JqZWN0IGlzIHVzZWQgZm9yIG11bHRpcGxlIGJpbmRpbmcsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgZm9yIHNpbmdsZSBldmVudCBiaW5kaW5nXG4gKiBAcGFyYW0ge1N0cmluZ3xmdW5jdGlvbn0gW2FyZzJdIC0gbWV0aG9kIHRvIGNhbGwgKG9wdGlvbmFsKVxuICogQHBhcmFtIHsqfSBbYXJnM10gLSBkYXRhIGZvciBzaW5nbGUgZXZlbnQgYmluZGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuRXZlbnRzLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oYXJnMSwgYXJnMil7XG4gIHZhciBiaW5kRXZlbnQgPSBmdW5jdGlvbihldmVudCwgbWV0aG9kKSB7XG4gICAgdmFyIGUgPSBwYXJzZShldmVudCk7XG4gICAgdmFyIGVsID0gdGhpcy5lbDtcbiAgICB2YXIgb2JqID0gdGhpcy5vYmo7XG4gICAgdmFyIG5hbWUgPSBlLm5hbWU7XG4gICAgdmFyIG1ldGhvZCA9IG1ldGhvZCB8fCAnb24nICsgbmFtZTtcbiAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcblxuICAgIC8vIGNhbGxiYWNrXG4gICAgZnVuY3Rpb24gY2IoKXtcbiAgICAgIHZhciBhID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpLmNvbmNhdChhcmdzKTtcblxuICAgICAgaWYgKHR5cGVvZiBtZXRob2QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBtZXRob2QuYXBwbHkob2JqLCBhKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghb2JqW21ldGhvZF0pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWV0aG9kICsgJyBtZXRob2QgaXMgbm90IGRlZmluZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JqW21ldGhvZF0uYXBwbHkob2JqLCBhKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBiaW5kXG4gICAgaWYgKGUuc2VsZWN0b3IpIHtcbiAgICAgIGNiID0gZGVsZWdhdGUuYmluZChlbCwgZS5zZWxlY3RvciwgbmFtZSwgY2IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBldmVudHMuYmluZChlbCwgbmFtZSwgY2IpO1xuICAgIH1cblxuICAgIC8vIHN1YnNjcmlwdGlvbiBmb3IgdW5iaW5kaW5nXG4gICAgdGhpcy5zdWIobmFtZSwgbWV0aG9kLCBjYik7XG5cbiAgICByZXR1cm4gY2I7XG4gIH07XG5cbiAgaWYgKHR5cGVvZiBhcmcxID09ICdzdHJpbmcnKSB7XG4gICAgYmluZEV2ZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH0gZWxzZSB7XG4gICAgZm9yKHZhciBrZXkgaW4gYXJnMSkge1xuICAgICAgaWYgKGFyZzEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBiaW5kRXZlbnQuY2FsbCh0aGlzLCBrZXksIGFyZzFba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIFVuYmluZCBhIHNpbmdsZSBiaW5kaW5nLCBhbGwgYmluZGluZ3MgZm9yIGBldmVudGAsXG4gKiBvciBhbGwgYmluZGluZ3Mgd2l0aGluIHRoZSBtYW5hZ2VyLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICBVbmJpbmQgZGlyZWN0IGhhbmRsZXJzOlxuICpcbiAqICAgICBldmVudHMudW5iaW5kKCdjbGljaycsICdyZW1vdmUnKVxuICogICAgIGV2ZW50cy51bmJpbmQoJ2NsaWNrJylcbiAqICAgICBldmVudHMudW5iaW5kKClcbiAqXG4gKiBVbmJpbmQgZGVsZWdhdGUgaGFuZGxlcnM6XG4gKlxuICogICAgIGV2ZW50cy51bmJpbmQoJ2NsaWNrJywgJ3JlbW92ZScpXG4gKiAgICAgZXZlbnRzLnVuYmluZCgnY2xpY2snKVxuICogICAgIGV2ZW50cy51bmJpbmQoKVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBbZXZlbnRdXG4gKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gW21ldGhvZF1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuRXZlbnRzLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbihldmVudCwgbWV0aG9kKXtcbiAgaWYgKDAgPT0gYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRoaXMudW5iaW5kQWxsKCk7XG4gIGlmICgxID09IGFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB0aGlzLnVuYmluZEFsbE9mKGV2ZW50KTtcblxuICAvLyBubyBiaW5kaW5ncyBmb3IgdGhpcyBldmVudFxuICB2YXIgYmluZGluZ3MgPSB0aGlzLl9ldmVudHNbZXZlbnRdO1xuICB2YXIgY2FwdHVyZSA9IChmb3JjZUNhcHR1cmVFdmVudHMuaW5kZXhPZihldmVudCkgIT09IC0xKTtcbiAgaWYgKCFiaW5kaW5ncykgcmV0dXJuO1xuXG4gIC8vIG5vIGJpbmRpbmdzIGZvciB0aGlzIG1ldGhvZFxuICB2YXIgY2IgPSBiaW5kaW5nc1ttZXRob2RdO1xuICBpZiAoIWNiKSByZXR1cm47XG5cbiAgZXZlbnRzLnVuYmluZCh0aGlzLmVsLCBldmVudCwgY2IsIGNhcHR1cmUpO1xufTtcblxuLyoqXG4gKiBVbmJpbmQgYWxsIGV2ZW50cy5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5FdmVudHMucHJvdG90eXBlLnVuYmluZEFsbCA9IGZ1bmN0aW9uKCl7XG4gIGZvciAodmFyIGV2ZW50IGluIHRoaXMuX2V2ZW50cykge1xuICAgIHRoaXMudW5iaW5kQWxsT2YoZXZlbnQpO1xuICB9XG59O1xuXG4vKipcbiAqIFVuYmluZCBhbGwgZXZlbnRzIGZvciBgZXZlbnRgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuRXZlbnRzLnByb3RvdHlwZS51bmJpbmRBbGxPZiA9IGZ1bmN0aW9uKGV2ZW50KXtcbiAgdmFyIGJpbmRpbmdzID0gdGhpcy5fZXZlbnRzW2V2ZW50XTtcbiAgaWYgKCFiaW5kaW5ncykgcmV0dXJuO1xuXG4gIGZvciAodmFyIG1ldGhvZCBpbiBiaW5kaW5ncykge1xuICAgIHRoaXMudW5iaW5kKGV2ZW50LCBtZXRob2QpO1xuICB9XG59O1xuXG4vKipcbiAqIFBhcnNlIGBldmVudGAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZShldmVudCkge1xuICB2YXIgcGFydHMgPSBldmVudC5zcGxpdCgvICsvKTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBwYXJ0cy5zaGlmdCgpLFxuICAgIHNlbGVjdG9yOiBwYXJ0cy5qb2luKCcgJylcbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgZm9yRWFjaEFycmF5ID0gZnVuY3Rpb24gZm9yRWFjaEFycmF5KGFycmF5LCBpdGVyYXRvciwgcmVjZWl2ZXIpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoYXJyYXksIGkpKSB7XG4gICAgICAgICAgICBpZiAocmVjZWl2ZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKGFycmF5W2ldLCBpLCBhcnJheSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwocmVjZWl2ZXIsIGFycmF5W2ldLCBpLCBhcnJheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG52YXIgZm9yRWFjaFN0cmluZyA9IGZ1bmN0aW9uIGZvckVhY2hTdHJpbmcoc3RyaW5nLCBpdGVyYXRvciwgcmVjZWl2ZXIpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gc3RyaW5nLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIC8vIG5vIHN1Y2ggdGhpbmcgYXMgYSBzcGFyc2Ugc3RyaW5nLlxuICAgICAgICBpZiAocmVjZWl2ZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgaXRlcmF0b3Ioc3RyaW5nLmNoYXJBdChpKSwgaSwgc3RyaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwocmVjZWl2ZXIsIHN0cmluZy5jaGFyQXQoaSksIGksIHN0cmluZyk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG52YXIgZm9yRWFjaE9iamVjdCA9IGZ1bmN0aW9uIGZvckVhY2hPYmplY3Qob2JqZWN0LCBpdGVyYXRvciwgcmVjZWl2ZXIpIHtcbiAgICBmb3IgKHZhciBrIGluIG9iamVjdCkge1xuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGspKSB7XG4gICAgICAgICAgICBpZiAocmVjZWl2ZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrXSwgaywgb2JqZWN0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IuY2FsbChyZWNlaXZlciwgb2JqZWN0W2tdLCBrLCBvYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxudmFyIGZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGxpc3QsIGl0ZXJhdG9yLCB0aGlzQXJnKSB7XG4gICAgaWYgKCFpc0NhbGxhYmxlKGl0ZXJhdG9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpdGVyYXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICB2YXIgcmVjZWl2ZXI7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMykge1xuICAgICAgICByZWNlaXZlciA9IHRoaXNBcmc7XG4gICAgfVxuXG4gICAgaWYgKHRvU3RyLmNhbGwobGlzdCkgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgICAgZm9yRWFjaEFycmF5KGxpc3QsIGl0ZXJhdG9yLCByZWNlaXZlcik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbGlzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZm9yRWFjaFN0cmluZyhsaXN0LCBpdGVyYXRvciwgcmVjZWl2ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvckVhY2hPYmplY3QobGlzdCwgaXRlcmF0b3IsIHJlY2VpdmVyKTtcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZvckVhY2g7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBuby1pbnZhbGlkLXRoaXM6IDEgKi9cblxudmFyIEVSUk9SX01FU1NBR0UgPSAnRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0aWJsZSAnO1xudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jVHlwZSA9ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmluZCh0aGF0KSB7XG4gICAgdmFyIHRhcmdldCA9IHRoaXM7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09ICdmdW5jdGlvbicgfHwgdG9TdHIuY2FsbCh0YXJnZXQpICE9PSBmdW5jVHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUk9SX01FU1NBR0UgKyB0YXJnZXQpO1xuICAgIH1cbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblxuICAgIHZhciBib3VuZDtcbiAgICB2YXIgYmluZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIGJvdW5kKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChPYmplY3QocmVzdWx0KSA9PT0gcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseShcbiAgICAgICAgICAgICAgICB0aGF0LFxuICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGJvdW5kTGVuZ3RoID0gTWF0aC5tYXgoMCwgdGFyZ2V0Lmxlbmd0aCAtIGFyZ3MubGVuZ3RoKTtcbiAgICB2YXIgYm91bmRBcmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3VuZExlbmd0aDsgaSsrKSB7XG4gICAgICAgIGJvdW5kQXJncy5wdXNoKCckJyArIGkpO1xuICAgIH1cblxuICAgIGJvdW5kID0gRnVuY3Rpb24oJ2JpbmRlcicsICdyZXR1cm4gZnVuY3Rpb24gKCcgKyBib3VuZEFyZ3Muam9pbignLCcpICsgJyl7IHJldHVybiBiaW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOyB9JykoYmluZGVyKTtcblxuICAgIGlmICh0YXJnZXQucHJvdG90eXBlKSB7XG4gICAgICAgIHZhciBFbXB0eSA9IGZ1bmN0aW9uIEVtcHR5KCkge307XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7XG4gICAgICAgIGJvdW5kLnByb3RvdHlwZSA9IG5ldyBFbXB0eSgpO1xuICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBib3VuZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiIsInZhciB3aW47XG5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgd2luID0gd2luZG93O1xufSBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgd2luID0gZ2xvYmFsO1xufSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIil7XG4gICAgd2luID0gc2VsZjtcbn0gZWxzZSB7XG4gICAgd2luID0ge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd2luO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBmblRvU3RyID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgY29uc3RydWN0b3JSZWdleCA9IC9eXFxzKmNsYXNzXFxiLztcbnZhciBpc0VTNkNsYXNzRm4gPSBmdW5jdGlvbiBpc0VTNkNsYXNzRnVuY3Rpb24odmFsdWUpIHtcblx0dHJ5IHtcblx0XHR2YXIgZm5TdHIgPSBmblRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBjb25zdHJ1Y3RvclJlZ2V4LnRlc3QoZm5TdHIpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlOyAvLyBub3QgYSBmdW5jdGlvblxuXHR9XG59O1xuXG52YXIgdHJ5RnVuY3Rpb25PYmplY3QgPSBmdW5jdGlvbiB0cnlGdW5jdGlvblRvU3RyKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0aWYgKGlzRVM2Q2xhc3NGbih2YWx1ZSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0Zm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZm5DbGFzcyA9ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG52YXIgZ2VuQ2xhc3MgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLnRvU3RyaW5nVGFnID09PSAnc3ltYm9sJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0NhbGxhYmxlKHZhbHVlKSB7XG5cdGlmICghdmFsdWUpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdGlmIChoYXNUb1N0cmluZ1RhZykgeyByZXR1cm4gdHJ5RnVuY3Rpb25PYmplY3QodmFsdWUpOyB9XG5cdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHR2YXIgc3RyQ2xhc3MgPSB0b1N0ci5jYWxsKHZhbHVlKTtcblx0cmV0dXJuIHN0ckNsYXNzID09PSBmbkNsYXNzIHx8IHN0ckNsYXNzID09PSBnZW5DbGFzcztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGlzRnVuY3Rpb25cblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uIChmbikge1xuICB2YXIgc3RyaW5nID0gdG9TdHJpbmcuY2FsbChmbilcbiAgcmV0dXJuIHN0cmluZyA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJyB8fFxuICAgICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgc3RyaW5nICE9PSAnW29iamVjdCBSZWdFeHBdJykgfHxcbiAgICAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgLy8gSUU4IGFuZCBiZWxvd1xuICAgICAoZm4gPT09IHdpbmRvdy5zZXRUaW1lb3V0IHx8XG4gICAgICBmbiA9PT0gd2luZG93LmFsZXJ0IHx8XG4gICAgICBmbiA9PT0gd2luZG93LmNvbmZpcm0gfHxcbiAgICAgIGZuID09PSB3aW5kb3cucHJvbXB0KSlcbn07XG4iLCIvKiFcbiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjMuNC4xXG4gKiBodHRwczovL2pxdWVyeS5jb20vXG4gKlxuICogSW5jbHVkZXMgU2l6emxlLmpzXG4gKiBodHRwczovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHBzOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogRGF0ZTogMjAxOS0wNS0wMVQyMTowNFpcbiAqL1xuKCBmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdGlmICggdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyBGb3IgQ29tbW9uSlMgYW5kIENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHdoZXJlIGEgcHJvcGVyIGB3aW5kb3dgXG5cdFx0Ly8gaXMgcHJlc2VudCwgZXhlY3V0ZSB0aGUgZmFjdG9yeSBhbmQgZ2V0IGpRdWVyeS5cblx0XHQvLyBGb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IGhhdmUgYSBgd2luZG93YCB3aXRoIGEgYGRvY3VtZW50YFxuXHRcdC8vIChzdWNoIGFzIE5vZGUuanMpLCBleHBvc2UgYSBmYWN0b3J5IGFzIG1vZHVsZS5leHBvcnRzLlxuXHRcdC8vIFRoaXMgYWNjZW50dWF0ZXMgdGhlIG5lZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHJlYWwgYHdpbmRvd2AuXG5cdFx0Ly8gZS5nLiB2YXIgalF1ZXJ5ID0gcmVxdWlyZShcImpxdWVyeVwiKSh3aW5kb3cpO1xuXHRcdC8vIFNlZSB0aWNrZXQgIzE0NTQ5IGZvciBtb3JlIGluZm8uXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgP1xuXHRcdFx0ZmFjdG9yeSggZ2xvYmFsLCB0cnVlICkgOlxuXHRcdFx0ZnVuY3Rpb24oIHcgKSB7XG5cdFx0XHRcdGlmICggIXcuZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCBcImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnRcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWN0b3J5KCB3ICk7XG5cdFx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGZhY3RvcnkoIGdsb2JhbCApO1xuXHR9XG5cbi8vIFBhc3MgdGhpcyBpZiB3aW5kb3cgaXMgbm90IGRlZmluZWQgeWV0XG59ICkoIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiggd2luZG93LCBub0dsb2JhbCApIHtcblxuLy8gRWRnZSA8PSAxMiAtIDEzKywgRmlyZWZveCA8PTE4IC0gNDUrLCBJRSAxMCAtIDExLCBTYWZhcmkgNS4xIC0gOSssIGlPUyA2IC0gOS4xXG4vLyB0aHJvdyBleGNlcHRpb25zIHdoZW4gbm9uLXN0cmljdCBjb2RlIChlLmcuLCBBU1AuTkVUIDQuNSkgYWNjZXNzZXMgc3RyaWN0IG1vZGVcbi8vIGFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyICh0cmFjLTEzMzM1KS4gQnV0IGFzIG9mIGpRdWVyeSAzLjAgKDIwMTYpLCBzdHJpY3QgbW9kZSBzaG91bGQgYmUgY29tbW9uXG4vLyBlbm91Z2ggdGhhdCBhbGwgc3VjaCBhdHRlbXB0cyBhcmUgZ3VhcmRlZCBpbiBhIHRyeSBibG9jay5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgYXJyID0gW107XG5cbnZhciBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcblxudmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuXG52YXIgc2xpY2UgPSBhcnIuc2xpY2U7XG5cbnZhciBjb25jYXQgPSBhcnIuY29uY2F0O1xuXG52YXIgcHVzaCA9IGFyci5wdXNoO1xuXG52YXIgaW5kZXhPZiA9IGFyci5pbmRleE9mO1xuXG52YXIgY2xhc3MydHlwZSA9IHt9O1xuXG52YXIgdG9TdHJpbmcgPSBjbGFzczJ0eXBlLnRvU3RyaW5nO1xuXG52YXIgaGFzT3duID0gY2xhc3MydHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIGZuVG9TdHJpbmcgPSBoYXNPd24udG9TdHJpbmc7XG5cbnZhciBPYmplY3RGdW5jdGlvblN0cmluZyA9IGZuVG9TdHJpbmcuY2FsbCggT2JqZWN0ICk7XG5cbnZhciBzdXBwb3J0ID0ge307XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gaXNGdW5jdGlvbiggb2JqICkge1xuXG4gICAgICAvLyBTdXBwb3J0OiBDaHJvbWUgPD01NywgRmlyZWZveCA8PTUyXG4gICAgICAvLyBJbiBzb21lIGJyb3dzZXJzLCB0eXBlb2YgcmV0dXJucyBcImZ1bmN0aW9uXCIgZm9yIEhUTUwgPG9iamVjdD4gZWxlbWVudHNcbiAgICAgIC8vIChpLmUuLCBgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwib2JqZWN0XCIgKSA9PT0gXCJmdW5jdGlvblwiYCkuXG4gICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGNsYXNzaWZ5ICphbnkqIERPTSBub2RlIGFzIGEgZnVuY3Rpb24uXG4gICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBvYmoubm9kZVR5cGUgIT09IFwibnVtYmVyXCI7XG4gIH07XG5cblxudmFyIGlzV2luZG93ID0gZnVuY3Rpb24gaXNXaW5kb3coIG9iaiApIHtcblx0XHRyZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqID09PSBvYmoud2luZG93O1xuXHR9O1xuXG5cblxuXG5cdHZhciBwcmVzZXJ2ZWRTY3JpcHRBdHRyaWJ1dGVzID0ge1xuXHRcdHR5cGU6IHRydWUsXG5cdFx0c3JjOiB0cnVlLFxuXHRcdG5vbmNlOiB0cnVlLFxuXHRcdG5vTW9kdWxlOiB0cnVlXG5cdH07XG5cblx0ZnVuY3Rpb24gRE9NRXZhbCggY29kZSwgbm9kZSwgZG9jICkge1xuXHRcdGRvYyA9IGRvYyB8fCBkb2N1bWVudDtcblxuXHRcdHZhciBpLCB2YWwsXG5cdFx0XHRzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudCggXCJzY3JpcHRcIiApO1xuXG5cdFx0c2NyaXB0LnRleHQgPSBjb2RlO1xuXHRcdGlmICggbm9kZSApIHtcblx0XHRcdGZvciAoIGkgaW4gcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDY0KywgRWRnZSAxOCtcblx0XHRcdFx0Ly8gU29tZSBicm93c2VycyBkb24ndCBzdXBwb3J0IHRoZSBcIm5vbmNlXCIgcHJvcGVydHkgb24gc2NyaXB0cy5cblx0XHRcdFx0Ly8gT24gdGhlIG90aGVyIGhhbmQsIGp1c3QgdXNpbmcgYGdldEF0dHJpYnV0ZWAgaXMgbm90IGVub3VnaCBhc1xuXHRcdFx0XHQvLyB0aGUgYG5vbmNlYCBhdHRyaWJ1dGUgaXMgcmVzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIHdoZW5ldmVyIGl0XG5cdFx0XHRcdC8vIGJlY29tZXMgYnJvd3NpbmctY29udGV4dCBjb25uZWN0ZWQuXG5cdFx0XHRcdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2h0bWwvaXNzdWVzLzIzNjlcblx0XHRcdFx0Ly8gU2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI25vbmNlLWF0dHJpYnV0ZXNcblx0XHRcdFx0Ly8gVGhlIGBub2RlLmdldEF0dHJpYnV0ZWAgY2hlY2sgd2FzIGFkZGVkIGZvciB0aGUgc2FrZSBvZlxuXHRcdFx0XHQvLyBgalF1ZXJ5Lmdsb2JhbEV2YWxgIHNvIHRoYXQgaXQgY2FuIGZha2UgYSBub25jZS1jb250YWluaW5nIG5vZGVcblx0XHRcdFx0Ly8gdmlhIGFuIG9iamVjdC5cblx0XHRcdFx0dmFsID0gbm9kZVsgaSBdIHx8IG5vZGUuZ2V0QXR0cmlidXRlICYmIG5vZGUuZ2V0QXR0cmlidXRlKCBpICk7XG5cdFx0XHRcdGlmICggdmFsICkge1xuXHRcdFx0XHRcdHNjcmlwdC5zZXRBdHRyaWJ1dGUoIGksIHZhbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGRvYy5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHQgKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTtcblx0fVxuXG5cbmZ1bmN0aW9uIHRvVHlwZSggb2JqICkge1xuXHRpZiAoIG9iaiA9PSBudWxsICkge1xuXHRcdHJldHVybiBvYmogKyBcIlwiO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5IChmdW5jdGlvbmlzaCBSZWdFeHApXG5cdHJldHVybiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiA/XG5cdFx0Y2xhc3MydHlwZVsgdG9TdHJpbmcuY2FsbCggb2JqICkgXSB8fCBcIm9iamVjdFwiIDpcblx0XHR0eXBlb2Ygb2JqO1xufVxuLyogZ2xvYmFsIFN5bWJvbCAqL1xuLy8gRGVmaW5pbmcgdGhpcyBnbG9iYWwgaW4gLmVzbGludHJjLmpzb24gd291bGQgY3JlYXRlIGEgZGFuZ2VyIG9mIHVzaW5nIHRoZSBnbG9iYWxcbi8vIHVuZ3VhcmRlZCBpbiBhbm90aGVyIHBsYWNlLCBpdCBzZWVtcyBzYWZlciB0byBkZWZpbmUgZ2xvYmFsIG9ubHkgZm9yIHRoaXMgbW9kdWxlXG5cblxuXG52YXJcblx0dmVyc2lvbiA9IFwiMy40LjFcIixcblxuXHQvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeVxuXHRqUXVlcnkgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cblx0XHQvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCdcblx0XHQvLyBOZWVkIGluaXQgaWYgalF1ZXJ5IGlzIGNhbGxlZCAoanVzdCBhbGxvdyBlcnJvciB0byBiZSB0aHJvd24gaWYgbm90IGluY2x1ZGVkKVxuXHRcdHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5XG5cdC8vIE1ha2Ugc3VyZSB3ZSB0cmltIEJPTSBhbmQgTkJTUFxuXHRydHJpbSA9IC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZztcblxualF1ZXJ5LmZuID0galF1ZXJ5LnByb3RvdHlwZSA9IHtcblxuXHQvLyBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIGpRdWVyeSBiZWluZyB1c2VkXG5cdGpxdWVyeTogdmVyc2lvbixcblxuXHRjb25zdHJ1Y3RvcjogalF1ZXJ5LFxuXG5cdC8vIFRoZSBkZWZhdWx0IGxlbmd0aCBvZiBhIGpRdWVyeSBvYmplY3QgaXMgMFxuXHRsZW5ndGg6IDAsXG5cblx0dG9BcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTtcblx0fSxcblxuXHQvLyBHZXQgdGhlIE50aCBlbGVtZW50IGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0IE9SXG5cdC8vIEdldCB0aGUgd2hvbGUgbWF0Y2hlZCBlbGVtZW50IHNldCBhcyBhIGNsZWFuIGFycmF5XG5cdGdldDogZnVuY3Rpb24oIG51bSApIHtcblxuXHRcdC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGluIGEgY2xlYW4gYXJyYXlcblx0XHRpZiAoIG51bSA9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4ganVzdCB0aGUgb25lIGVsZW1lbnQgZnJvbSB0aGUgc2V0XG5cdFx0cmV0dXJuIG51bSA8IDAgPyB0aGlzWyBudW0gKyB0aGlzLmxlbmd0aCBdIDogdGhpc1sgbnVtIF07XG5cdH0sXG5cblx0Ly8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBvbnRvIHRoZSBzdGFja1xuXHQvLyAocmV0dXJuaW5nIHRoZSBuZXcgbWF0Y2hlZCBlbGVtZW50IHNldClcblx0cHVzaFN0YWNrOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cblx0XHQvLyBCdWlsZCBhIG5ldyBqUXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldFxuXHRcdHZhciByZXQgPSBqUXVlcnkubWVyZ2UoIHRoaXMuY29uc3RydWN0b3IoKSwgZWxlbXMgKTtcblxuXHRcdC8vIEFkZCB0aGUgb2xkIG9iamVjdCBvbnRvIHRoZSBzdGFjayAoYXMgYSByZWZlcmVuY2UpXG5cdFx0cmV0LnByZXZPYmplY3QgPSB0aGlzO1xuXG5cdFx0Ly8gUmV0dXJuIHRoZSBuZXdseS1mb3JtZWQgZWxlbWVudCBzZXRcblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdC8vIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZXZlcnkgZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBzZXQuXG5cdGVhY2g6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmVhY2goIHRoaXMsIGNhbGxiYWNrICk7XG5cdH0sXG5cblx0bWFwOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWFwKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiBjYWxsYmFjay5jYWxsKCBlbGVtLCBpLCBlbGVtICk7XG5cdFx0fSApICk7XG5cdH0sXG5cblx0c2xpY2U6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggc2xpY2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApICk7XG5cdH0sXG5cblx0Zmlyc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAwICk7XG5cdH0sXG5cblx0bGFzdDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXEoIC0xICk7XG5cdH0sXG5cblx0ZXE6IGZ1bmN0aW9uKCBpICkge1xuXHRcdHZhciBsZW4gPSB0aGlzLmxlbmd0aCxcblx0XHRcdGogPSAraSArICggaSA8IDAgPyBsZW4gOiAwICk7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqID49IDAgJiYgaiA8IGxlbiA/IFsgdGhpc1sgaiBdIF0gOiBbXSApO1xuXHR9LFxuXG5cdGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHJldk9iamVjdCB8fCB0aGlzLmNvbnN0cnVjdG9yKCk7XG5cdH0sXG5cblx0Ly8gRm9yIGludGVybmFsIHVzZSBvbmx5LlxuXHQvLyBCZWhhdmVzIGxpa2UgYW4gQXJyYXkncyBtZXRob2QsIG5vdCBsaWtlIGEgalF1ZXJ5IG1ldGhvZC5cblx0cHVzaDogcHVzaCxcblx0c29ydDogYXJyLnNvcnQsXG5cdHNwbGljZTogYXJyLnNwbGljZVxufTtcblxualF1ZXJ5LmV4dGVuZCA9IGpRdWVyeS5mbi5leHRlbmQgPSBmdW5jdGlvbigpIHtcblx0dmFyIG9wdGlvbnMsIG5hbWUsIHNyYywgY29weSwgY29weUlzQXJyYXksIGNsb25lLFxuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sgMCBdIHx8IHt9LFxuXHRcdGkgPSAxLFxuXHRcdGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cdFx0ZGVlcCA9IGZhbHNlO1xuXG5cdC8vIEhhbmRsZSBhIGRlZXAgY29weSBzaXR1YXRpb25cblx0aWYgKCB0eXBlb2YgdGFyZ2V0ID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRkZWVwID0gdGFyZ2V0O1xuXG5cdFx0Ly8gU2tpcCB0aGUgYm9vbGVhbiBhbmQgdGhlIHRhcmdldFxuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sgaSBdIHx8IHt9O1xuXHRcdGkrKztcblx0fVxuXG5cdC8vIEhhbmRsZSBjYXNlIHdoZW4gdGFyZ2V0IGlzIGEgc3RyaW5nIG9yIHNvbWV0aGluZyAocG9zc2libGUgaW4gZGVlcCBjb3B5KVxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgIT09IFwib2JqZWN0XCIgJiYgIWlzRnVuY3Rpb24oIHRhcmdldCApICkge1xuXHRcdHRhcmdldCA9IHt9O1xuXHR9XG5cblx0Ly8gRXh0ZW5kIGpRdWVyeSBpdHNlbGYgaWYgb25seSBvbmUgYXJndW1lbnQgaXMgcGFzc2VkXG5cdGlmICggaSA9PT0gbGVuZ3RoICkge1xuXHRcdHRhcmdldCA9IHRoaXM7XG5cdFx0aS0tO1xuXHR9XG5cblx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cblx0XHQvLyBPbmx5IGRlYWwgd2l0aCBub24tbnVsbC91bmRlZmluZWQgdmFsdWVzXG5cdFx0aWYgKCAoIG9wdGlvbnMgPSBhcmd1bWVudHNbIGkgXSApICE9IG51bGwgKSB7XG5cblx0XHRcdC8vIEV4dGVuZCB0aGUgYmFzZSBvYmplY3Rcblx0XHRcdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRcdFx0Y29weSA9IG9wdGlvbnNbIG5hbWUgXTtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IE9iamVjdC5wcm90b3R5cGUgcG9sbHV0aW9uXG5cdFx0XHRcdC8vIFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3Bcblx0XHRcdFx0aWYgKCBuYW1lID09PSBcIl9fcHJvdG9fX1wiIHx8IHRhcmdldCA9PT0gY29weSApIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3RzIG9yIGFycmF5c1xuXHRcdFx0XHRpZiAoIGRlZXAgJiYgY29weSAmJiAoIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb3B5ICkgfHxcblx0XHRcdFx0XHQoIGNvcHlJc0FycmF5ID0gQXJyYXkuaXNBcnJheSggY29weSApICkgKSApIHtcblx0XHRcdFx0XHRzcmMgPSB0YXJnZXRbIG5hbWUgXTtcblxuXHRcdFx0XHRcdC8vIEVuc3VyZSBwcm9wZXIgdHlwZSBmb3IgdGhlIHNvdXJjZSB2YWx1ZVxuXHRcdFx0XHRcdGlmICggY29weUlzQXJyYXkgJiYgIUFycmF5LmlzQXJyYXkoIHNyYyApICkge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSBbXTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCAhY29weUlzQXJyYXkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBzcmMgKSApIHtcblx0XHRcdFx0XHRcdGNsb25lID0ge307XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNsb25lID0gc3JjO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb3B5SXNBcnJheSA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0Ly8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtXG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBkZWVwLCBjbG9uZSwgY29weSApO1xuXG5cdFx0XHRcdC8vIERvbid0IGJyaW5nIGluIHVuZGVmaW5lZCB2YWx1ZXNcblx0XHRcdFx0fSBlbHNlIGlmICggY29weSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0gY29weTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbW9kaWZpZWQgb2JqZWN0XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gVW5pcXVlIGZvciBlYWNoIGNvcHkgb2YgalF1ZXJ5IG9uIHRoZSBwYWdlXG5cdGV4cGFuZG86IFwialF1ZXJ5XCIgKyAoIHZlcnNpb24gKyBNYXRoLnJhbmRvbSgpICkucmVwbGFjZSggL1xcRC9nLCBcIlwiICksXG5cblx0Ly8gQXNzdW1lIGpRdWVyeSBpcyByZWFkeSB3aXRob3V0IHRoZSByZWFkeSBtb2R1bGVcblx0aXNSZWFkeTogdHJ1ZSxcblxuXHRlcnJvcjogZnVuY3Rpb24oIG1zZyApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoIG1zZyApO1xuXHR9LFxuXG5cdG5vb3A6IGZ1bmN0aW9uKCkge30sXG5cblx0aXNQbGFpbk9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIgcHJvdG8sIEN0b3I7XG5cblx0XHQvLyBEZXRlY3Qgb2J2aW91cyBuZWdhdGl2ZXNcblx0XHQvLyBVc2UgdG9TdHJpbmcgaW5zdGVhZCBvZiBqUXVlcnkudHlwZSB0byBjYXRjaCBob3N0IG9iamVjdHNcblx0XHRpZiAoICFvYmogfHwgdG9TdHJpbmcuY2FsbCggb2JqICkgIT09IFwiW29iamVjdCBPYmplY3RdXCIgKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cHJvdG8gPSBnZXRQcm90byggb2JqICk7XG5cblx0XHQvLyBPYmplY3RzIHdpdGggbm8gcHJvdG90eXBlIChlLmcuLCBgT2JqZWN0LmNyZWF0ZSggbnVsbCApYCkgYXJlIHBsYWluXG5cdFx0aWYgKCAhcHJvdG8gKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBPYmplY3RzIHdpdGggcHJvdG90eXBlIGFyZSBwbGFpbiBpZmYgdGhleSB3ZXJlIGNvbnN0cnVjdGVkIGJ5IGEgZ2xvYmFsIE9iamVjdCBmdW5jdGlvblxuXHRcdEN0b3IgPSBoYXNPd24uY2FsbCggcHJvdG8sIFwiY29uc3RydWN0b3JcIiApICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuXHRcdHJldHVybiB0eXBlb2YgQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmIGZuVG9TdHJpbmcuY2FsbCggQ3RvciApID09PSBPYmplY3RGdW5jdGlvblN0cmluZztcblx0fSxcblxuXHRpc0VtcHR5T2JqZWN0OiBmdW5jdGlvbiggb2JqICkge1xuXHRcdHZhciBuYW1lO1xuXG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdC8vIEV2YWx1YXRlcyBhIHNjcmlwdCBpbiBhIGdsb2JhbCBjb250ZXh0XG5cdGdsb2JhbEV2YWw6IGZ1bmN0aW9uKCBjb2RlLCBvcHRpb25zICkge1xuXHRcdERPTUV2YWwoIGNvZGUsIHsgbm9uY2U6IG9wdGlvbnMgJiYgb3B0aW9ucy5ub25jZSB9ICk7XG5cdH0sXG5cblx0ZWFjaDogZnVuY3Rpb24oIG9iaiwgY2FsbGJhY2sgKSB7XG5cdFx0dmFyIGxlbmd0aCwgaSA9IDA7XG5cblx0XHRpZiAoIGlzQXJyYXlMaWtlKCBvYmogKSApIHtcblx0XHRcdGxlbmd0aCA9IG9iai5sZW5ndGg7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICggaSBpbiBvYmogKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9iajtcblx0fSxcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHlcblx0dHJpbTogZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0cmV0dXJuIHRleHQgPT0gbnVsbCA/XG5cdFx0XHRcIlwiIDpcblx0XHRcdCggdGV4dCArIFwiXCIgKS5yZXBsYWNlKCBydHJpbSwgXCJcIiApO1xuXHR9LFxuXG5cdC8vIHJlc3VsdHMgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0bWFrZUFycmF5OiBmdW5jdGlvbiggYXJyLCByZXN1bHRzICkge1xuXHRcdHZhciByZXQgPSByZXN1bHRzIHx8IFtdO1xuXG5cdFx0aWYgKCBhcnIgIT0gbnVsbCApIHtcblx0XHRcdGlmICggaXNBcnJheUxpa2UoIE9iamVjdCggYXJyICkgKSApIHtcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCByZXQsXG5cdFx0XHRcdFx0dHlwZW9mIGFyciA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0WyBhcnIgXSA6IGFyclxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHVzaC5jYWxsKCByZXQsIGFyciApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0aW5BcnJheTogZnVuY3Rpb24oIGVsZW0sIGFyciwgaSApIHtcblx0XHRyZXR1cm4gYXJyID09IG51bGwgPyAtMSA6IGluZGV4T2YuY2FsbCggYXJyLCBlbGVtLCBpICk7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0bWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkge1xuXHRcdHZhciBsZW4gPSArc2Vjb25kLmxlbmd0aCxcblx0XHRcdGogPSAwLFxuXHRcdFx0aSA9IGZpcnN0Lmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0Zmlyc3RbIGkrKyBdID0gc2Vjb25kWyBqIF07XG5cdFx0fVxuXG5cdFx0Zmlyc3QubGVuZ3RoID0gaTtcblxuXHRcdHJldHVybiBmaXJzdDtcblx0fSxcblxuXHRncmVwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBpbnZlcnQgKSB7XG5cdFx0dmFyIGNhbGxiYWNrSW52ZXJzZSxcblx0XHRcdG1hdGNoZXMgPSBbXSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoLFxuXHRcdFx0Y2FsbGJhY2tFeHBlY3QgPSAhaW52ZXJ0O1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtc1xuXHRcdC8vIHRoYXQgcGFzcyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uXG5cdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRjYWxsYmFja0ludmVyc2UgPSAhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTtcblx0XHRcdGlmICggY2FsbGJhY2tJbnZlcnNlICE9PSBjYWxsYmFja0V4cGVjdCApIHtcblx0XHRcdFx0bWF0Y2hlcy5wdXNoKCBlbGVtc1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hdGNoZXM7XG5cdH0sXG5cblx0Ly8gYXJnIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkge1xuXHRcdHZhciBsZW5ndGgsIHZhbHVlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRyZXQgPSBbXTtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVpciBuZXcgdmFsdWVzXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggZWxlbXMgKSApIHtcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsXG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gZWxlbXMgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0XHRyZXR1cm4gY29uY2F0LmFwcGx5KCBbXSwgcmV0ICk7XG5cdH0sXG5cblx0Ly8gQSBnbG9iYWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzXG5cdGd1aWQ6IDEsXG5cblx0Ly8galF1ZXJ5LnN1cHBvcnQgaXMgbm90IHVzZWQgaW4gQ29yZSBidXQgb3RoZXIgcHJvamVjdHMgYXR0YWNoIHRoZWlyXG5cdC8vIHByb3BlcnRpZXMgdG8gaXQgc28gaXQgbmVlZHMgdG8gZXhpc3QuXG5cdHN1cHBvcnQ6IHN1cHBvcnRcbn0gKTtcblxuaWYgKCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cdGpRdWVyeS5mblsgU3ltYm9sLml0ZXJhdG9yIF0gPSBhcnJbIFN5bWJvbC5pdGVyYXRvciBdO1xufVxuXG4vLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlwZSBtYXBcbmpRdWVyeS5lYWNoKCBcIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sXCIuc3BsaXQoIFwiIFwiICksXG5mdW5jdGlvbiggaSwgbmFtZSApIHtcblx0Y2xhc3MydHlwZVsgXCJbb2JqZWN0IFwiICsgbmFtZSArIFwiXVwiIF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG59ICk7XG5cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKCBvYmogKSB7XG5cblx0Ly8gU3VwcG9ydDogcmVhbCBpT1MgOC4yIG9ubHkgKG5vdCByZXByb2R1Y2libGUgaW4gc2ltdWxhdG9yKVxuXHQvLyBgaW5gIGNoZWNrIHVzZWQgdG8gcHJldmVudCBKSVQgZXJyb3IgKGdoLTIxNDUpXG5cdC8vIGhhc093biBpc24ndCB1c2VkIGhlcmUgZHVlIHRvIGZhbHNlIG5lZ2F0aXZlc1xuXHQvLyByZWdhcmRpbmcgTm9kZWxpc3QgbGVuZ3RoIGluIElFXG5cdHZhciBsZW5ndGggPSAhIW9iaiAmJiBcImxlbmd0aFwiIGluIG9iaiAmJiBvYmoubGVuZ3RoLFxuXHRcdHR5cGUgPSB0b1R5cGUoIG9iaiApO1xuXG5cdGlmICggaXNGdW5jdGlvbiggb2JqICkgfHwgaXNXaW5kb3coIG9iaiApICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0eXBlID09PSBcImFycmF5XCIgfHwgbGVuZ3RoID09PSAwIHx8XG5cdFx0dHlwZW9mIGxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJiBsZW5ndGggPiAwICYmICggbGVuZ3RoIC0gMSApIGluIG9iajtcbn1cbnZhciBTaXp6bGUgPVxuLyohXG4gKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2luZSB2Mi4zLjRcbiAqIGh0dHBzOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCBKUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cHM6Ly9qcy5mb3VuZGF0aW9uL1xuICpcbiAqIERhdGU6IDIwMTktMDQtMDhcbiAqL1xuKGZ1bmN0aW9uKCB3aW5kb3cgKSB7XG5cbnZhciBpLFxuXHRzdXBwb3J0LFxuXHRFeHByLFxuXHRnZXRUZXh0LFxuXHRpc1hNTCxcblx0dG9rZW5pemUsXG5cdGNvbXBpbGUsXG5cdHNlbGVjdCxcblx0b3V0ZXJtb3N0Q29udGV4dCxcblx0c29ydElucHV0LFxuXHRoYXNEdXBsaWNhdGUsXG5cblx0Ly8gTG9jYWwgZG9jdW1lbnQgdmFyc1xuXHRzZXREb2N1bWVudCxcblx0ZG9jdW1lbnQsXG5cdGRvY0VsZW0sXG5cdGRvY3VtZW50SXNIVE1MLFxuXHRyYnVnZ3lRU0EsXG5cdHJidWdneU1hdGNoZXMsXG5cdG1hdGNoZXMsXG5cdGNvbnRhaW5zLFxuXG5cdC8vIEluc3RhbmNlLXNwZWNpZmljIGRhdGFcblx0ZXhwYW5kbyA9IFwic2l6emxlXCIgKyAxICogbmV3IERhdGUoKSxcblx0cHJlZmVycmVkRG9jID0gd2luZG93LmRvY3VtZW50LFxuXHRkaXJydW5zID0gMCxcblx0ZG9uZSA9IDAsXG5cdGNsYXNzQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHR0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0Y29tcGlsZXJDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRzb3J0T3JkZXIgPSBmdW5jdGlvbiggYSwgYiApIHtcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gMDtcblx0fSxcblxuXHQvLyBJbnN0YW5jZSBtZXRob2RzXG5cdGhhc093biA9ICh7fSkuaGFzT3duUHJvcGVydHksXG5cdGFyciA9IFtdLFxuXHRwb3AgPSBhcnIucG9wLFxuXHRwdXNoX25hdGl2ZSA9IGFyci5wdXNoLFxuXHRwdXNoID0gYXJyLnB1c2gsXG5cdHNsaWNlID0gYXJyLnNsaWNlLFxuXHQvLyBVc2UgYSBzdHJpcHBlZC1kb3duIGluZGV4T2YgYXMgaXQncyBmYXN0ZXIgdGhhbiBuYXRpdmVcblx0Ly8gaHR0cHM6Ly9qc3BlcmYuY29tL3Rob3ItaW5kZXhvZi12cy1mb3IvNVxuXHRpbmRleE9mID0gZnVuY3Rpb24oIGxpc3QsIGVsZW0gKSB7XG5cdFx0dmFyIGkgPSAwLFxuXHRcdFx0bGVuID0gbGlzdC5sZW5ndGg7XG5cdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRpZiAoIGxpc3RbaV0gPT09IGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gLTE7XG5cdH0sXG5cblx0Ym9vbGVhbnMgPSBcImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkXCIsXG5cblx0Ly8gUmVndWxhciBleHByZXNzaW9uc1xuXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc2VsZWN0b3JzLyN3aGl0ZXNwYWNlXG5cdHdoaXRlc3BhY2UgPSBcIltcXFxceDIwXFxcXHRcXFxcclxcXFxuXFxcXGZdXCIsXG5cblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI3ZhbHVlLWRlZi1pZGVudGlmaWVyXG5cdGlkZW50aWZpZXIgPSBcIig/OlxcXFxcXFxcLnxbXFxcXHctXXxbXlxcMC1cXFxceGEwXSkrXCIsXG5cblx0Ly8gQXR0cmlidXRlIHNlbGVjdG9yczogaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNhdHRyaWJ1dGUtc2VsZWN0b3JzXG5cdGF0dHJpYnV0ZXMgPSBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFwiICsgaWRlbnRpZmllciArIFwiKSg/OlwiICsgd2hpdGVzcGFjZSArXG5cdFx0Ly8gT3BlcmF0b3IgKGNhcHR1cmUgMilcblx0XHRcIiooWypeJHwhfl0/PSlcIiArIHdoaXRlc3BhY2UgK1xuXHRcdC8vIFwiQXR0cmlidXRlIHZhbHVlcyBtdXN0IGJlIENTUyBpZGVudGlmaWVycyBbY2FwdHVyZSA1XSBvciBzdHJpbmdzIFtjYXB0dXJlIDMgb3IgY2FwdHVyZSA0XVwiXG5cdFx0XCIqKD86JygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwifChcIiArIGlkZW50aWZpZXIgKyBcIikpfClcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFwiKlxcXFxdXCIsXG5cblx0cHNldWRvcyA9IFwiOihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcXFxcKChcIiArXG5cdFx0Ly8gVG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2VsZWN0b3JzIG5lZWRpbmcgdG9rZW5pemUgaW4gdGhlIHByZUZpbHRlciwgcHJlZmVyIGFyZ3VtZW50czpcblx0XHQvLyAxLiBxdW90ZWQgKGNhcHR1cmUgMzsgY2FwdHVyZSA0IG9yIGNhcHR1cmUgNSlcblx0XHRcIignKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCIpfFwiICtcblx0XHQvLyAyLiBzaW1wbGUgKGNhcHR1cmUgNilcblx0XHRcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpW1xcXFxdXXxcIiArIGF0dHJpYnV0ZXMgKyBcIikqKXxcIiArXG5cdFx0Ly8gMy4gYW55dGhpbmcgZWxzZSAoY2FwdHVyZSAyKVxuXHRcdFwiLipcIiArXG5cdFx0XCIpXFxcXCl8KVwiLFxuXG5cdC8vIExlYWRpbmcgYW5kIG5vbi1lc2NhcGVkIHRyYWlsaW5nIHdoaXRlc3BhY2UsIGNhcHR1cmluZyBzb21lIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgcHJlY2VkaW5nIHRoZSBsYXR0ZXJcblx0cndoaXRlc3BhY2UgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNlICsgXCIrXCIsIFwiZ1wiICksXG5cdHJ0cmltID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIrfCgoPzpefFteXFxcXFxcXFxdKSg/OlxcXFxcXFxcLikqKVwiICsgd2hpdGVzcGFjZSArIFwiKyRcIiwgXCJnXCIgKSxcblxuXHRyY29tbWEgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiosXCIgKyB3aGl0ZXNwYWNlICsgXCIqXCIgKSxcblx0cmNvbWJpbmF0b3JzID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFs+K35dfFwiICsgd2hpdGVzcGFjZSArIFwiKVwiICsgd2hpdGVzcGFjZSArIFwiKlwiICksXG5cdHJkZXNjZW5kID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArIFwifD5cIiApLFxuXG5cdHJwc2V1ZG8gPSBuZXcgUmVnRXhwKCBwc2V1ZG9zICksXG5cdHJpZGVudGlmaWVyID0gbmV3IFJlZ0V4cCggXCJeXCIgKyBpZGVudGlmaWVyICsgXCIkXCIgKSxcblxuXHRtYXRjaEV4cHIgPSB7XG5cdFx0XCJJRFwiOiBuZXcgUmVnRXhwKCBcIl4jKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0XCJDTEFTU1wiOiBuZXcgUmVnRXhwKCBcIl5cXFxcLihcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdFwiVEFHXCI6IG5ldyBSZWdFeHAoIFwiXihcIiArIGlkZW50aWZpZXIgKyBcInxbKl0pXCIgKSxcblx0XHRcIkFUVFJcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBhdHRyaWJ1dGVzICksXG5cdFx0XCJQU0VVRE9cIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBwc2V1ZG9zICksXG5cdFx0XCJDSElMRFwiOiBuZXcgUmVnRXhwKCBcIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcXFwoXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKihldmVufG9kZHwoKFsrLV18KShcXFxcZCopbnwpXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86KFsrLV18KVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcIiooXFxcXGQrKXwpKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfClcIiwgXCJpXCIgKSxcblx0XHRcImJvb2xcIjogbmV3IFJlZ0V4cCggXCJeKD86XCIgKyBib29sZWFucyArIFwiKSRcIiwgXCJpXCIgKSxcblx0XHQvLyBGb3IgdXNlIGluIGxpYnJhcmllcyBpbXBsZW1lbnRpbmcgLmlzKClcblx0XHQvLyBXZSB1c2UgdGhpcyBmb3IgUE9TIG1hdGNoaW5nIGluIGBzZWxlY3RgXG5cdFx0XCJuZWVkc0NvbnRleHRcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXFxcKFwiICtcblx0XHRcdHdoaXRlc3BhY2UgKyBcIiooKD86LVxcXFxkKT9cXFxcZCopXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KSg/PVteLV18JClcIiwgXCJpXCIgKVxuXHR9LFxuXG5cdHJodG1sID0gL0hUTUwkL2ksXG5cdHJpbnB1dHMgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyaGVhZGVyID0gL15oXFxkJC9pLFxuXG5cdHJuYXRpdmUgPSAvXltee10rXFx7XFxzKlxcW25hdGl2ZSBcXHcvLFxuXG5cdC8vIEVhc2lseS1wYXJzZWFibGUvcmV0cmlldmFibGUgSUQgb3IgVEFHIG9yIENMQVNTIHNlbGVjdG9yc1xuXHRycXVpY2tFeHByID0gL14oPzojKFtcXHctXSspfChcXHcrKXxcXC4oW1xcdy1dKykpJC8sXG5cblx0cnNpYmxpbmcgPSAvWyt+XS8sXG5cblx0Ly8gQ1NTIGVzY2FwZXNcblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI2VzY2FwZWQtY2hhcmFjdGVyc1xuXHRydW5lc2NhcGUgPSBuZXcgUmVnRXhwKCBcIlxcXFxcXFxcKFtcXFxcZGEtZl17MSw2fVwiICsgd2hpdGVzcGFjZSArIFwiP3woXCIgKyB3aGl0ZXNwYWNlICsgXCIpfC4pXCIsIFwiaWdcIiApLFxuXHRmdW5lc2NhcGUgPSBmdW5jdGlvbiggXywgZXNjYXBlZCwgZXNjYXBlZFdoaXRlc3BhY2UgKSB7XG5cdFx0dmFyIGhpZ2ggPSBcIjB4XCIgKyBlc2NhcGVkIC0gMHgxMDAwMDtcblx0XHQvLyBOYU4gbWVhbnMgbm9uLWNvZGVwb2ludFxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3g8MjRcblx0XHQvLyBXb3JrYXJvdW5kIGVycm9uZW91cyBudW1lcmljIGludGVycHJldGF0aW9uIG9mICtcIjB4XCJcblx0XHRyZXR1cm4gaGlnaCAhPT0gaGlnaCB8fCBlc2NhcGVkV2hpdGVzcGFjZSA/XG5cdFx0XHRlc2NhcGVkIDpcblx0XHRcdGhpZ2ggPCAwID9cblx0XHRcdFx0Ly8gQk1QIGNvZGVwb2ludFxuXHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoICsgMHgxMDAwMCApIDpcblx0XHRcdFx0Ly8gU3VwcGxlbWVudGFsIFBsYW5lIGNvZGVwb2ludCAoc3Vycm9nYXRlIHBhaXIpXG5cdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggPj4gMTAgfCAweEQ4MDAsIGhpZ2ggJiAweDNGRiB8IDB4REMwMCApO1xuXHR9LFxuXG5cdC8vIENTUyBzdHJpbmcvaWRlbnRpZmllciBzZXJpYWxpemF0aW9uXG5cdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jY29tbW9uLXNlcmlhbGl6aW5nLWlkaW9tc1xuXHRyY3NzZXNjYXBlID0gLyhbXFwwLVxceDFmXFx4N2ZdfF4tP1xcZCl8Xi0kfFteXFwwLVxceDFmXFx4N2YtXFx1RkZGRlxcdy1dL2csXG5cdGZjc3Nlc2NhcGUgPSBmdW5jdGlvbiggY2gsIGFzQ29kZVBvaW50ICkge1xuXHRcdGlmICggYXNDb2RlUG9pbnQgKSB7XG5cblx0XHRcdC8vIFUrMDAwMCBOVUxMIGJlY29tZXMgVStGRkZEIFJFUExBQ0VNRU5UIENIQVJBQ1RFUlxuXHRcdFx0aWYgKCBjaCA9PT0gXCJcXDBcIiApIHtcblx0XHRcdFx0cmV0dXJuIFwiXFx1RkZGRFwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb250cm9sIGNoYXJhY3RlcnMgYW5kIChkZXBlbmRlbnQgdXBvbiBwb3NpdGlvbikgbnVtYmVycyBnZXQgZXNjYXBlZCBhcyBjb2RlIHBvaW50c1xuXHRcdFx0cmV0dXJuIGNoLnNsaWNlKCAwLCAtMSApICsgXCJcXFxcXCIgKyBjaC5jaGFyQ29kZUF0KCBjaC5sZW5ndGggLSAxICkudG9TdHJpbmcoIDE2ICkgKyBcIiBcIjtcblx0XHR9XG5cblx0XHQvLyBPdGhlciBwb3RlbnRpYWxseS1zcGVjaWFsIEFTQ0lJIGNoYXJhY3RlcnMgZ2V0IGJhY2tzbGFzaC1lc2NhcGVkXG5cdFx0cmV0dXJuIFwiXFxcXFwiICsgY2g7XG5cdH0sXG5cblx0Ly8gVXNlZCBmb3IgaWZyYW1lc1xuXHQvLyBTZWUgc2V0RG9jdW1lbnQoKVxuXHQvLyBSZW1vdmluZyB0aGUgZnVuY3Rpb24gd3JhcHBlciBjYXVzZXMgYSBcIlBlcm1pc3Npb24gRGVuaWVkXCJcblx0Ly8gZXJyb3IgaW4gSUVcblx0dW5sb2FkSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuXHRcdHNldERvY3VtZW50KCk7XG5cdH0sXG5cblx0aW5EaXNhYmxlZEZpZWxkc2V0ID0gYWRkQ29tYmluYXRvcihcblx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSB0cnVlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJmaWVsZHNldFwiO1xuXHRcdH0sXG5cdFx0eyBkaXI6IFwicGFyZW50Tm9kZVwiLCBuZXh0OiBcImxlZ2VuZFwiIH1cblx0KTtcblxuLy8gT3B0aW1pemUgZm9yIHB1c2guYXBwbHkoIF8sIE5vZGVMaXN0IClcbnRyeSB7XG5cdHB1c2guYXBwbHkoXG5cdFx0KGFyciA9IHNsaWNlLmNhbGwoIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzICkpLFxuXHRcdHByZWZlcnJlZERvYy5jaGlsZE5vZGVzXG5cdCk7XG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4wXG5cdC8vIERldGVjdCBzaWxlbnRseSBmYWlsaW5nIHB1c2guYXBwbHlcblx0YXJyWyBwcmVmZXJyZWREb2MuY2hpbGROb2Rlcy5sZW5ndGggXS5ub2RlVHlwZTtcbn0gY2F0Y2ggKCBlICkge1xuXHRwdXNoID0geyBhcHBseTogYXJyLmxlbmd0aCA/XG5cblx0XHQvLyBMZXZlcmFnZSBzbGljZSBpZiBwb3NzaWJsZVxuXHRcdGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHtcblx0XHRcdHB1c2hfbmF0aXZlLmFwcGx5KCB0YXJnZXQsIHNsaWNlLmNhbGwoZWxzKSApO1xuXHRcdH0gOlxuXG5cdFx0Ly8gU3VwcG9ydDogSUU8OVxuXHRcdC8vIE90aGVyd2lzZSBhcHBlbmQgZGlyZWN0bHlcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHR2YXIgaiA9IHRhcmdldC5sZW5ndGgsXG5cdFx0XHRcdGkgPSAwO1xuXHRcdFx0Ly8gQ2FuJ3QgdHJ1c3QgTm9kZUxpc3QubGVuZ3RoXG5cdFx0XHR3aGlsZSAoICh0YXJnZXRbaisrXSA9IGVsc1tpKytdKSApIHt9XG5cdFx0XHR0YXJnZXQubGVuZ3RoID0gaiAtIDE7XG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xuXHR2YXIgbSwgaSwgZWxlbSwgbmlkLCBtYXRjaCwgZ3JvdXBzLCBuZXdTZWxlY3Rvcixcblx0XHRuZXdDb250ZXh0ID0gY29udGV4dCAmJiBjb250ZXh0Lm93bmVyRG9jdW1lbnQsXG5cblx0XHQvLyBub2RlVHlwZSBkZWZhdWx0cyB0byA5LCBzaW5jZSBjb250ZXh0IGRlZmF1bHRzIHRvIGRvY3VtZW50XG5cdFx0bm9kZVR5cGUgPSBjb250ZXh0ID8gY29udGV4dC5ub2RlVHlwZSA6IDk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gUmV0dXJuIGVhcmx5IGZyb20gY2FsbHMgd2l0aCBpbnZhbGlkIHNlbGVjdG9yIG9yIGNvbnRleHRcblx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgfHwgIXNlbGVjdG9yIHx8XG5cdFx0bm9kZVR5cGUgIT09IDEgJiYgbm9kZVR5cGUgIT09IDkgJiYgbm9kZVR5cGUgIT09IDExICkge1xuXG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH1cblxuXHQvLyBUcnkgdG8gc2hvcnRjdXQgZmluZCBvcGVyYXRpb25zIChhcyBvcHBvc2VkIHRvIGZpbHRlcnMpIGluIEhUTUwgZG9jdW1lbnRzXG5cdGlmICggIXNlZWQgKSB7XG5cblx0XHRpZiAoICggY29udGV4dCA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogcHJlZmVycmVkRG9jICkgIT09IGRvY3VtZW50ICkge1xuXHRcdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0XHR9XG5cdFx0Y29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7XG5cblx0XHRpZiAoIGRvY3VtZW50SXNIVE1MICkge1xuXG5cdFx0XHQvLyBJZiB0aGUgc2VsZWN0b3IgaXMgc3VmZmljaWVudGx5IHNpbXBsZSwgdHJ5IHVzaW5nIGEgXCJnZXQqQnkqXCIgRE9NIG1ldGhvZFxuXHRcdFx0Ly8gKGV4Y2VwdGluZyBEb2N1bWVudEZyYWdtZW50IGNvbnRleHQsIHdoZXJlIHRoZSBtZXRob2RzIGRvbid0IGV4aXN0KVxuXHRcdFx0aWYgKCBub2RlVHlwZSAhPT0gMTEgJiYgKG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApKSApIHtcblxuXHRcdFx0XHQvLyBJRCBzZWxlY3RvclxuXHRcdFx0XHRpZiAoIChtID0gbWF0Y2hbMV0pICkge1xuXG5cdFx0XHRcdFx0Ly8gRG9jdW1lbnQgY29udGV4dFxuXHRcdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIChlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApKSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdFxuXHRcdFx0XHRcdFx0XHQvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9uc1xuXHRcdFx0XHRcdFx0XHQvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElEXG5cdFx0XHRcdFx0XHRcdGlmICggZWxlbS5pZCA9PT0gbSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBFbGVtZW50IGNvbnRleHRcblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdFxuXHRcdFx0XHRcdFx0Ly8gVE9ETzogaWRlbnRpZnkgdmVyc2lvbnNcblx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcblx0XHRcdFx0XHRcdGlmICggbmV3Q29udGV4dCAmJiAoZWxlbSA9IG5ld0NvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSkgJiZcblx0XHRcdFx0XHRcdFx0Y29udGFpbnMoIGNvbnRleHQsIGVsZW0gKSAmJlxuXHRcdFx0XHRcdFx0XHRlbGVtLmlkID09PSBtICkge1xuXG5cdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVHlwZSBzZWxlY3RvclxuXHRcdFx0XHR9IGVsc2UgaWYgKCBtYXRjaFsyXSApIHtcblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBzZWxlY3RvciApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cblx0XHRcdFx0Ly8gQ2xhc3Mgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggKG0gPSBtYXRjaFszXSkgJiYgc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmXG5cdFx0XHRcdFx0Y29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICkge1xuXG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBtICkgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUYWtlIGFkdmFudGFnZSBvZiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHRpZiAoIHN1cHBvcnQucXNhICYmXG5cdFx0XHRcdCFub25uYXRpdmVTZWxlY3RvckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF0gJiZcblx0XHRcdFx0KCFyYnVnZ3lRU0EgfHwgIXJidWdneVFTQS50ZXN0KCBzZWxlY3RvciApKSAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDggb25seVxuXHRcdFx0XHQvLyBFeGNsdWRlIG9iamVjdCBlbGVtZW50c1xuXHRcdFx0XHQobm9kZVR5cGUgIT09IDEgfHwgY29udGV4dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSBcIm9iamVjdFwiKSApIHtcblxuXHRcdFx0XHRuZXdTZWxlY3RvciA9IHNlbGVjdG9yO1xuXHRcdFx0XHRuZXdDb250ZXh0ID0gY29udGV4dDtcblxuXHRcdFx0XHQvLyBxU0EgY29uc2lkZXJzIGVsZW1lbnRzIG91dHNpZGUgYSBzY29waW5nIHJvb3Qgd2hlbiBldmFsdWF0aW5nIGNoaWxkIG9yXG5cdFx0XHRcdC8vIGRlc2NlbmRhbnQgY29tYmluYXRvcnMsIHdoaWNoIGlzIG5vdCB3aGF0IHdlIHdhbnQuXG5cdFx0XHRcdC8vIEluIHN1Y2ggY2FzZXMsIHdlIHdvcmsgYXJvdW5kIHRoZSBiZWhhdmlvciBieSBwcmVmaXhpbmcgZXZlcnkgc2VsZWN0b3IgaW4gdGhlXG5cdFx0XHRcdC8vIGxpc3Qgd2l0aCBhbiBJRCBzZWxlY3RvciByZWZlcmVuY2luZyB0aGUgc2NvcGUgY29udGV4dC5cblx0XHRcdFx0Ly8gVGhhbmtzIHRvIEFuZHJldyBEdXBvbnQgZm9yIHRoaXMgdGVjaG5pcXVlLlxuXHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSAxICYmIHJkZXNjZW5kLnRlc3QoIHNlbGVjdG9yICkgKSB7XG5cblx0XHRcdFx0XHQvLyBDYXB0dXJlIHRoZSBjb250ZXh0IElELCBzZXR0aW5nIGl0IGZpcnN0IGlmIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdGlmICggKG5pZCA9IGNvbnRleHQuZ2V0QXR0cmlidXRlKCBcImlkXCIgKSkgKSB7XG5cdFx0XHRcdFx0XHRuaWQgPSBuaWQucmVwbGFjZSggcmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb250ZXh0LnNldEF0dHJpYnV0ZSggXCJpZFwiLCAobmlkID0gZXhwYW5kbykgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmVmaXggZXZlcnkgc2VsZWN0b3IgaW4gdGhlIGxpc3Rcblx0XHRcdFx0XHRncm91cHMgPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcblx0XHRcdFx0XHRpID0gZ3JvdXBzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGdyb3Vwc1tpXSA9IFwiI1wiICsgbmlkICsgXCIgXCIgKyB0b1NlbGVjdG9yKCBncm91cHNbaV0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bmV3U2VsZWN0b3IgPSBncm91cHMuam9pbiggXCIsXCIgKTtcblxuXHRcdFx0XHRcdC8vIEV4cGFuZCBjb250ZXh0IGZvciBzaWJsaW5nIHNlbGVjdG9yc1xuXHRcdFx0XHRcdG5ld0NvbnRleHQgPSByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fFxuXHRcdFx0XHRcdFx0Y29udGV4dDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cyxcblx0XHRcdFx0XHRcdG5ld0NvbnRleHQucXVlcnlTZWxlY3RvckFsbCggbmV3U2VsZWN0b3IgKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH0gY2F0Y2ggKCBxc2FFcnJvciApIHtcblx0XHRcdFx0XHRub25uYXRpdmVTZWxlY3RvckNhY2hlKCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRcdGlmICggbmlkID09PSBleHBhbmRvICkge1xuXHRcdFx0XHRcdFx0Y29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFsbCBvdGhlcnNcblx0cmV0dXJuIHNlbGVjdCggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGtleS12YWx1ZSBjYWNoZXMgb2YgbGltaXRlZCBzaXplXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oc3RyaW5nLCBvYmplY3QpfSBSZXR1cm5zIHRoZSBPYmplY3QgZGF0YSBhZnRlciBzdG9yaW5nIGl0IG9uIGl0c2VsZiB3aXRoXG4gKlx0cHJvcGVydHkgbmFtZSB0aGUgKHNwYWNlLXN1ZmZpeGVkKSBzdHJpbmcgYW5kIChpZiB0aGUgY2FjaGUgaXMgbGFyZ2VyIHRoYW4gRXhwci5jYWNoZUxlbmd0aClcbiAqXHRkZWxldGluZyB0aGUgb2xkZXN0IGVudHJ5XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhY2hlKCkge1xuXHR2YXIga2V5cyA9IFtdO1xuXG5cdGZ1bmN0aW9uIGNhY2hlKCBrZXksIHZhbHVlICkge1xuXHRcdC8vIFVzZSAoa2V5ICsgXCIgXCIpIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIG5hdGl2ZSBwcm90b3R5cGUgcHJvcGVydGllcyAoc2VlIElzc3VlICMxNTcpXG5cdFx0aWYgKCBrZXlzLnB1c2goIGtleSArIFwiIFwiICkgPiBFeHByLmNhY2hlTGVuZ3RoICkge1xuXHRcdFx0Ly8gT25seSBrZWVwIHRoZSBtb3N0IHJlY2VudCBlbnRyaWVzXG5cdFx0XHRkZWxldGUgY2FjaGVbIGtleXMuc2hpZnQoKSBdO1xuXHRcdH1cblx0XHRyZXR1cm4gKGNhY2hlWyBrZXkgKyBcIiBcIiBdID0gdmFsdWUpO1xuXHR9XG5cdHJldHVybiBjYWNoZTtcbn1cblxuLyoqXG4gKiBNYXJrIGEgZnVuY3Rpb24gZm9yIHNwZWNpYWwgdXNlIGJ5IFNpenpsZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIG1hcmtcbiAqL1xuZnVuY3Rpb24gbWFya0Z1bmN0aW9uKCBmbiApIHtcblx0Zm5bIGV4cGFuZG8gXSA9IHRydWU7XG5cdHJldHVybiBmbjtcbn1cblxuLyoqXG4gKiBTdXBwb3J0IHRlc3RpbmcgdXNpbmcgYW4gZWxlbWVudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gUGFzc2VkIHRoZSBjcmVhdGVkIGVsZW1lbnQgYW5kIHJldHVybnMgYSBib29sZWFuIHJlc3VsdFxuICovXG5mdW5jdGlvbiBhc3NlcnQoIGZuICkge1xuXHR2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZmllbGRzZXRcIik7XG5cblx0dHJ5IHtcblx0XHRyZXR1cm4gISFmbiggZWwgKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBmaW5hbGx5IHtcblx0XHQvLyBSZW1vdmUgZnJvbSBpdHMgcGFyZW50IGJ5IGRlZmF1bHRcblx0XHRpZiAoIGVsLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbCApO1xuXHRcdH1cblx0XHQvLyByZWxlYXNlIG1lbW9yeSBpbiBJRVxuXHRcdGVsID0gbnVsbDtcblx0fVxufVxuXG4vKipcbiAqIEFkZHMgdGhlIHNhbWUgaGFuZGxlciBmb3IgYWxsIG9mIHRoZSBzcGVjaWZpZWQgYXR0cnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBhdHRycyBQaXBlLXNlcGFyYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgVGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgYXBwbGllZFxuICovXG5mdW5jdGlvbiBhZGRIYW5kbGUoIGF0dHJzLCBoYW5kbGVyICkge1xuXHR2YXIgYXJyID0gYXR0cnMuc3BsaXQoXCJ8XCIpLFxuXHRcdGkgPSBhcnIubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdEV4cHIuYXR0ckhhbmRsZVsgYXJyW2ldIF0gPSBoYW5kbGVyO1xuXHR9XG59XG5cbi8qKlxuICogQ2hlY2tzIGRvY3VtZW50IG9yZGVyIG9mIHR3byBzaWJsaW5nc1xuICogQHBhcmFtIHtFbGVtZW50fSBhXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFJldHVybnMgbGVzcyB0aGFuIDAgaWYgYSBwcmVjZWRlcyBiLCBncmVhdGVyIHRoYW4gMCBpZiBhIGZvbGxvd3MgYlxuICovXG5mdW5jdGlvbiBzaWJsaW5nQ2hlY2soIGEsIGIgKSB7XG5cdHZhciBjdXIgPSBiICYmIGEsXG5cdFx0ZGlmZiA9IGN1ciAmJiBhLm5vZGVUeXBlID09PSAxICYmIGIubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4O1xuXG5cdC8vIFVzZSBJRSBzb3VyY2VJbmRleCBpZiBhdmFpbGFibGUgb24gYm90aCBub2Rlc1xuXHRpZiAoIGRpZmYgKSB7XG5cdFx0cmV0dXJuIGRpZmY7XG5cdH1cblxuXHQvLyBDaGVjayBpZiBiIGZvbGxvd3MgYVxuXHRpZiAoIGN1ciApIHtcblx0XHR3aGlsZSAoIChjdXIgPSBjdXIubmV4dFNpYmxpbmcpICkge1xuXHRcdFx0aWYgKCBjdXIgPT09IGIgKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYSA/IDEgOiAtMTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGlucHV0IHR5cGVzXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVJbnB1dFBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgYnV0dG9uc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQnV0dG9uUHNldWRvKCB0eXBlICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0cmV0dXJuIChuYW1lID09PSBcImlucHV0XCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIikgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgOmVuYWJsZWQvOmRpc2FibGVkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGRpc2FibGVkIHRydWUgZm9yIDpkaXNhYmxlZDsgZmFsc2UgZm9yIDplbmFibGVkXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURpc2FibGVkUHNldWRvKCBkaXNhYmxlZCApIHtcblxuXHQvLyBLbm93biA6ZGlzYWJsZWQgZmFsc2UgcG9zaXRpdmVzOiBmaWVsZHNldFtkaXNhYmxlZF0gPiBsZWdlbmQ6bnRoLW9mLXR5cGUobisyKSA6Y2FuLWRpc2FibGVcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gT25seSBjZXJ0YWluIGVsZW1lbnRzIGNhbiBtYXRjaCA6ZW5hYmxlZCBvciA6ZGlzYWJsZWRcblx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1lbmFibGVkXG5cdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0b3ItZGlzYWJsZWRcblx0XHRpZiAoIFwiZm9ybVwiIGluIGVsZW0gKSB7XG5cblx0XHRcdC8vIENoZWNrIGZvciBpbmhlcml0ZWQgZGlzYWJsZWRuZXNzIG9uIHJlbGV2YW50IG5vbi1kaXNhYmxlZCBlbGVtZW50czpcblx0XHRcdC8vICogbGlzdGVkIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50cyBpbiBhIGRpc2FibGVkIGZpZWxkc2V0XG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY2F0ZWdvcnktbGlzdGVkXG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2VwdC1mZS1kaXNhYmxlZFxuXHRcdFx0Ly8gKiBvcHRpb24gZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtb3B0aW9uLWRpc2FibGVkXG5cdFx0XHQvLyBBbGwgc3VjaCBlbGVtZW50cyBoYXZlIGEgXCJmb3JtXCIgcHJvcGVydHkuXG5cdFx0XHRpZiAoIGVsZW0ucGFyZW50Tm9kZSAmJiBlbGVtLmRpc2FibGVkID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHQvLyBPcHRpb24gZWxlbWVudHMgZGVmZXIgdG8gYSBwYXJlbnQgb3B0Z3JvdXAgaWYgcHJlc2VudFxuXHRcdFx0XHRpZiAoIFwibGFiZWxcIiBpbiBlbGVtICkge1xuXHRcdFx0XHRcdGlmICggXCJsYWJlbFwiIGluIGVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLnBhcmVudE5vZGUuZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDExXG5cdFx0XHRcdC8vIFVzZSB0aGUgaXNEaXNhYmxlZCBzaG9ydGN1dCBwcm9wZXJ0eSB0byBjaGVjayBmb3IgZGlzYWJsZWQgZmllbGRzZXQgYW5jZXN0b3JzXG5cdFx0XHRcdHJldHVybiBlbGVtLmlzRGlzYWJsZWQgPT09IGRpc2FibGVkIHx8XG5cblx0XHRcdFx0XHQvLyBXaGVyZSB0aGVyZSBpcyBubyBpc0Rpc2FibGVkLCBjaGVjayBtYW51YWxseVxuXHRcdFx0XHRcdC8qIGpzaGludCAtVzAxOCAqL1xuXHRcdFx0XHRcdGVsZW0uaXNEaXNhYmxlZCAhPT0gIWRpc2FibGVkICYmXG5cdFx0XHRcdFx0XHRpbkRpc2FibGVkRmllbGRzZXQoIGVsZW0gKSA9PT0gZGlzYWJsZWQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblxuXHRcdC8vIFRyeSB0byB3aW5ub3cgb3V0IGVsZW1lbnRzIHRoYXQgY2FuJ3QgYmUgZGlzYWJsZWQgYmVmb3JlIHRydXN0aW5nIHRoZSBkaXNhYmxlZCBwcm9wZXJ0eS5cblx0XHQvLyBTb21lIHZpY3RpbXMgZ2V0IGNhdWdodCBpbiBvdXIgbmV0IChsYWJlbCwgbGVnZW5kLCBtZW51LCB0cmFjayksIGJ1dCBpdCBzaG91bGRuJ3Rcblx0XHQvLyBldmVuIGV4aXN0IG9uIHRoZW0sIGxldCBhbG9uZSBoYXZlIGEgYm9vbGVhbiB2YWx1ZS5cblx0XHR9IGVsc2UgaWYgKCBcImxhYmVsXCIgaW4gZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHR9XG5cblx0XHQvLyBSZW1haW5pbmcgZWxlbWVudHMgYXJlIG5laXRoZXIgOmVuYWJsZWQgbm9yIDpkaXNhYmxlZFxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIHBvc2l0aW9uYWxzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICovXG5mdW5jdGlvbiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmbiApIHtcblx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggYXJndW1lbnQgKSB7XG5cdFx0YXJndW1lbnQgPSArYXJndW1lbnQ7XG5cdFx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdHZhciBqLFxuXHRcdFx0XHRtYXRjaEluZGV4ZXMgPSBmbiggW10sIHNlZWQubGVuZ3RoLCBhcmd1bWVudCApLFxuXHRcdFx0XHRpID0gbWF0Y2hJbmRleGVzLmxlbmd0aDtcblxuXHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBpbmRleGVzXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCBzZWVkWyAoaiA9IG1hdGNoSW5kZXhlc1tpXSkgXSApIHtcblx0XHRcdFx0XHRzZWVkW2pdID0gIShtYXRjaGVzW2pdID0gc2VlZFtqXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBTaXp6bGUgY29udGV4dFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdD19IGNvbnRleHRcbiAqIEByZXR1cm5zIHtFbGVtZW50fE9iamVjdHxCb29sZWFufSBUaGUgaW5wdXQgbm9kZSBpZiBhY2NlcHRhYmxlLCBvdGhlcndpc2UgYSBmYWxzeSB2YWx1ZVxuICovXG5mdW5jdGlvbiB0ZXN0Q29udGV4dCggY29udGV4dCApIHtcblx0cmV0dXJuIGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29udGV4dDtcbn1cblxuLy8gRXhwb3NlIHN1cHBvcnQgdmFycyBmb3IgY29udmVuaWVuY2VcbnN1cHBvcnQgPSBTaXp6bGUuc3VwcG9ydCA9IHt9O1xuXG4vKipcbiAqIERldGVjdHMgWE1MIG5vZGVzXG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBlbGVtIEFuIGVsZW1lbnQgb3IgYSBkb2N1bWVudFxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWZmIGVsZW0gaXMgYSBub24tSFRNTCBYTUwgbm9kZVxuICovXG5pc1hNTCA9IFNpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHR2YXIgbmFtZXNwYWNlID0gZWxlbS5uYW1lc3BhY2VVUkksXG5cdFx0ZG9jRWxlbSA9IChlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSkuZG9jdW1lbnRFbGVtZW50O1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OFxuXHQvLyBBc3N1bWUgSFRNTCB3aGVuIGRvY3VtZW50RWxlbWVudCBkb2Vzbid0IHlldCBleGlzdCwgc3VjaCBhcyBpbnNpZGUgbG9hZGluZyBpZnJhbWVzXG5cdC8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC80ODMzXG5cdHJldHVybiAhcmh0bWwudGVzdCggbmFtZXNwYWNlIHx8IGRvY0VsZW0gJiYgZG9jRWxlbS5ub2RlTmFtZSB8fCBcIkhUTUxcIiApO1xufTtcblxuLyoqXG4gKiBTZXRzIGRvY3VtZW50LXJlbGF0ZWQgdmFyaWFibGVzIG9uY2UgYmFzZWQgb24gdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IFtkb2NdIEFuIGVsZW1lbnQgb3IgZG9jdW1lbnQgb2JqZWN0IHRvIHVzZSB0byBzZXQgdGhlIGRvY3VtZW50XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKi9cbnNldERvY3VtZW50ID0gU2l6emxlLnNldERvY3VtZW50ID0gZnVuY3Rpb24oIG5vZGUgKSB7XG5cdHZhciBoYXNDb21wYXJlLCBzdWJXaW5kb3csXG5cdFx0ZG9jID0gbm9kZSA/IG5vZGUub3duZXJEb2N1bWVudCB8fCBub2RlIDogcHJlZmVycmVkRG9jO1xuXG5cdC8vIFJldHVybiBlYXJseSBpZiBkb2MgaXMgaW52YWxpZCBvciBhbHJlYWR5IHNlbGVjdGVkXG5cdGlmICggZG9jID09PSBkb2N1bWVudCB8fCBkb2Mubm9kZVR5cGUgIT09IDkgfHwgIWRvYy5kb2N1bWVudEVsZW1lbnQgKSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50O1xuXHR9XG5cblx0Ly8gVXBkYXRlIGdsb2JhbCB2YXJpYWJsZXNcblx0ZG9jdW1lbnQgPSBkb2M7XG5cdGRvY0VsZW0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cdGRvY3VtZW50SXNIVE1MID0gIWlzWE1MKCBkb2N1bWVudCApO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDktMTEsIEVkZ2Vcblx0Ly8gQWNjZXNzaW5nIGlmcmFtZSBkb2N1bWVudHMgYWZ0ZXIgdW5sb2FkIHRocm93cyBcInBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3JzIChqUXVlcnkgIzEzOTM2KVxuXHRpZiAoIHByZWZlcnJlZERvYyAhPT0gZG9jdW1lbnQgJiZcblx0XHQoc3ViV2luZG93ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcpICYmIHN1YldpbmRvdy50b3AgIT09IHN1YldpbmRvdyApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDExLCBFZGdlXG5cdFx0aWYgKCBzdWJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lciApIHtcblx0XHRcdHN1YldpbmRvdy5hZGRFdmVudExpc3RlbmVyKCBcInVubG9hZFwiLCB1bmxvYWRIYW5kbGVyLCBmYWxzZSApO1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDEwIG9ubHlcblx0XHR9IGVsc2UgaWYgKCBzdWJXaW5kb3cuYXR0YWNoRXZlbnQgKSB7XG5cdFx0XHRzdWJXaW5kb3cuYXR0YWNoRXZlbnQoIFwib251bmxvYWRcIiwgdW5sb2FkSGFuZGxlciApO1xuXHRcdH1cblx0fVxuXG5cdC8qIEF0dHJpYnV0ZXNcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIFN1cHBvcnQ6IElFPDhcblx0Ly8gVmVyaWZ5IHRoYXQgZ2V0QXR0cmlidXRlIHJlYWxseSByZXR1cm5zIGF0dHJpYnV0ZXMgYW5kIG5vdCBwcm9wZXJ0aWVzXG5cdC8vIChleGNlcHRpbmcgSUU4IGJvb2xlYW5zKVxuXHRzdXBwb3J0LmF0dHJpYnV0ZXMgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdGVsLmNsYXNzTmFtZSA9IFwiaVwiO1xuXHRcdHJldHVybiAhZWwuZ2V0QXR0cmlidXRlKFwiY2xhc3NOYW1lXCIpO1xuXHR9KTtcblxuXHQvKiBnZXRFbGVtZW50KHMpQnkqXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikgcmV0dXJucyBvbmx5IGVsZW1lbnRzXG5cdHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdGVsLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVDb21tZW50KFwiXCIpICk7XG5cdFx0cmV0dXJuICFlbC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikubGVuZ3RoO1xuXHR9KTtcblxuXHQvLyBTdXBwb3J0OiBJRTw5XG5cdHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IHJuYXRpdmUudGVzdCggZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApO1xuXG5cdC8vIFN1cHBvcnQ6IElFPDEwXG5cdC8vIENoZWNrIGlmIGdldEVsZW1lbnRCeUlkIHJldHVybnMgZWxlbWVudHMgYnkgbmFtZVxuXHQvLyBUaGUgYnJva2VuIGdldEVsZW1lbnRCeUlkIG1ldGhvZHMgZG9uJ3QgcGljayB1cCBwcm9ncmFtbWF0aWNhbGx5LXNldCBuYW1lcyxcblx0Ly8gc28gdXNlIGEgcm91bmRhYm91dCBnZXRFbGVtZW50c0J5TmFtZSB0ZXN0XG5cdHN1cHBvcnQuZ2V0QnlJZCA9IGFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5pZCA9IGV4cGFuZG87XG5cdFx0cmV0dXJuICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSB8fCAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIGV4cGFuZG8gKS5sZW5ndGg7XG5cdH0pO1xuXG5cdC8vIElEIGZpbHRlciBhbmQgZmluZFxuXHRpZiAoIHN1cHBvcnQuZ2V0QnlJZCApIHtcblx0XHRFeHByLmZpbHRlcltcIklEXCJdID0gZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZShcImlkXCIpID09PSBhdHRySWQ7XG5cdFx0XHR9O1xuXHRcdH07XG5cdFx0RXhwci5maW5kW1wiSURcIl0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XG5cdFx0XHRcdHJldHVybiBlbGVtID8gWyBlbGVtIF0gOiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdEV4cHIuZmlsdGVyW1wiSURcIl0gPSAgZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpO1xuXHRcdFx0XHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlID09PSBhdHRySWQ7XG5cdFx0XHR9O1xuXHRcdH07XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA2IC0gNyBvbmx5XG5cdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgaXMgbm90IHJlbGlhYmxlIGFzIGEgZmluZCBzaG9ydGN1dFxuXHRcdEV4cHIuZmluZFtcIklEXCJdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIG5vZGUsIGksIGVsZW1zLFxuXHRcdFx0XHRcdGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXG5cdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdC8vIFZlcmlmeSB0aGUgaWQgYXR0cmlidXRlXG5cdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpO1xuXHRcdFx0XHRcdGlmICggbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZCApIHtcblx0XHRcdFx0XHRcdHJldHVybiBbIGVsZW0gXTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBGYWxsIGJhY2sgb24gZ2V0RWxlbWVudHNCeU5hbWVcblx0XHRcdFx0XHRlbGVtcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeU5hbWUoIGlkICk7XG5cdFx0XHRcdFx0aSA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoZWxlbSA9IGVsZW1zW2krK10pICkge1xuXHRcdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpO1xuXHRcdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gWyBlbGVtIF07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHQvLyBUYWdcblx0RXhwci5maW5kW1wiVEFHXCJdID0gc3VwcG9ydC5nZXRFbGVtZW50c0J5VGFnTmFtZSA/XG5cdFx0ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTtcblxuXHRcdFx0Ly8gRG9jdW1lbnRGcmFnbWVudCBub2RlcyBkb24ndCBoYXZlIGdFQlROXG5cdFx0XHR9IGVsc2UgaWYgKCBzdXBwb3J0LnFzYSApIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnICk7XG5cdFx0XHR9XG5cdFx0fSA6XG5cblx0XHRmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkge1xuXHRcdFx0dmFyIGVsZW0sXG5cdFx0XHRcdHRtcCA9IFtdLFxuXHRcdFx0XHRpID0gMCxcblx0XHRcdFx0Ly8gQnkgaGFwcHkgY29pbmNpZGVuY2UsIGEgKGJyb2tlbikgZ0VCVE4gYXBwZWFycyBvbiBEb2N1bWVudEZyYWdtZW50IG5vZGVzIHRvb1xuXHRcdFx0XHRyZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIEZpbHRlciBvdXQgcG9zc2libGUgY29tbWVudHNcblx0XHRcdGlmICggdGFnID09PSBcIipcIiApIHtcblx0XHRcdFx0d2hpbGUgKCAoZWxlbSA9IHJlc3VsdHNbaSsrXSkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRcdFx0dG1wLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdG1wO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0fTtcblxuXHQvLyBDbGFzc1xuXHRFeHByLmZpbmRbXCJDTEFTU1wiXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiBmdW5jdGlvbiggY2xhc3NOYW1lLCBjb250ZXh0ICkge1xuXHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIGNsYXNzTmFtZSApO1xuXHRcdH1cblx0fTtcblxuXHQvKiBRU0EvbWF0Y2hlc1NlbGVjdG9yXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBRU0EgYW5kIG1hdGNoZXNTZWxlY3RvciBzdXBwb3J0XG5cblx0Ly8gbWF0Y2hlc1NlbGVjdG9yKDphY3RpdmUpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChJRTkvT3BlcmEgMTEuNSlcblx0cmJ1Z2d5TWF0Y2hlcyA9IFtdO1xuXG5cdC8vIHFTYSg6Zm9jdXMpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChDaHJvbWUgMjEpXG5cdC8vIFdlIGFsbG93IHRoaXMgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBJRTgvOSB0aGF0IHRocm93cyBhbiBlcnJvclxuXHQvLyB3aGVuZXZlciBgZG9jdW1lbnQuYWN0aXZlRWxlbWVudGAgaXMgYWNjZXNzZWQgb24gYW4gaWZyYW1lXG5cdC8vIFNvLCB3ZSBhbGxvdyA6Zm9jdXMgdG8gcGFzcyB0aHJvdWdoIFFTQSBhbGwgdGhlIHRpbWUgdG8gYXZvaWQgdGhlIElFIGVycm9yXG5cdC8vIFNlZSBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTMzNzhcblx0cmJ1Z2d5UVNBID0gW107XG5cblx0aWYgKCAoc3VwcG9ydC5xc2EgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKSkgKSB7XG5cdFx0Ly8gQnVpbGQgUVNBIHJlZ2V4XG5cdFx0Ly8gUmVnZXggc3RyYXRlZ3kgYWRvcHRlZCBmcm9tIERpZWdvIFBlcmluaVxuXHRcdGFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHQvLyBTZWxlY3QgaXMgc2V0IHRvIGVtcHR5IHN0cmluZyBvbiBwdXJwb3NlXG5cdFx0XHQvLyBUaGlzIGlzIHRvIHRlc3QgSUUncyB0cmVhdG1lbnQgb2Ygbm90IGV4cGxpY2l0bHlcblx0XHRcdC8vIHNldHRpbmcgYSBib29sZWFuIGNvbnRlbnQgYXR0cmlidXRlLFxuXHRcdFx0Ly8gc2luY2UgaXRzIHByZXNlbmNlIHNob3VsZCBiZSBlbm91Z2hcblx0XHRcdC8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMjM1OVxuXHRcdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5pbm5lckhUTUwgPSBcIjxhIGlkPSdcIiArIGV4cGFuZG8gKyBcIic+PC9hPlwiICtcblx0XHRcdFx0XCI8c2VsZWN0IGlkPSdcIiArIGV4cGFuZG8gKyBcIi1cXHJcXFxcJyBtc2FsbG93Y2FwdHVyZT0nJz5cIiArXG5cdFx0XHRcdFwiPG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD5cIjtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4LCBPcGVyYSAxMS0xMi4xNlxuXHRcdFx0Ly8gTm90aGluZyBzaG91bGQgYmUgc2VsZWN0ZWQgd2hlbiBlbXB0eSBzdHJpbmdzIGZvbGxvdyBePSBvciAkPSBvciAqPVxuXHRcdFx0Ly8gVGhlIHRlc3QgYXR0cmlidXRlIG11c3QgYmUgdW5rbm93biBpbiBPcGVyYSBidXQgXCJzYWZlXCIgZm9yIFdpblJUXG5cdFx0XHQvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2hoNDY1Mzg4LmFzcHgjYXR0cmlidXRlX3NlY3Rpb25cblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbChcIlttc2FsbG93Y2FwdHVyZV49JyddXCIpLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiWypeJF09XCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86Jyd8XFxcIlxcXCIpXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XG5cdFx0XHQvLyBCb29sZWFuIGF0dHJpYnV0ZXMgYW5kIFwidmFsdWVcIiBhcmUgbm90IHRyZWF0ZWQgY29ycmVjdGx5XG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKFwiW3NlbGVjdGVkXVwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86dmFsdWV8XCIgKyBib29sZWFucyArIFwiKVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZTwyOSwgQW5kcm9pZDw0LjQsIFNhZmFyaTw3LjArLCBpT1M8Ny4wKywgUGhhbnRvbUpTPDEuOS44K1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJbaWR+PVwiICsgZXhwYW5kbyArIFwiLV1cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goXCJ+PVwiKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gV2Via2l0L09wZXJhIC0gOmNoZWNrZWQgc2hvdWxkIHJldHVybiBzZWxlY3RlZCBvcHRpb24gZWxlbWVudHNcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbChcIjpjaGVja2VkXCIpLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goXCI6Y2hlY2tlZFwiKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrLCBpT1MgOCtcblx0XHRcdC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY4NTFcblx0XHRcdC8vIEluLXBhZ2UgYHNlbGVjdG9yI2lkIHNpYmxpbmctY29tYmluYXRvciBzZWxlY3RvcmAgZmFpbHNcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiYSNcIiArIGV4cGFuZG8gKyBcIisqXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKFwiLiMuK1srfl1cIik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0ZWwuaW5uZXJIVE1MID0gXCI8YSBocmVmPScnIGRpc2FibGVkPSdkaXNhYmxlZCc+PC9hPlwiICtcblx0XHRcdFx0XCI8c2VsZWN0IGRpc2FibGVkPSdkaXNhYmxlZCc+PG9wdGlvbi8+PC9zZWxlY3Q+XCI7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IFdpbmRvd3MgOCBOYXRpdmUgQXBwc1xuXHRcdFx0Ly8gVGhlIHR5cGUgYW5kIG5hbWUgYXR0cmlidXRlcyBhcmUgcmVzdHJpY3RlZCBkdXJpbmcgLmlubmVySFRNTCBhc3NpZ25tZW50XG5cdFx0XHR2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG5cdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcImhpZGRlblwiICk7XG5cdFx0XHRlbC5hcHBlbmRDaGlsZCggaW5wdXQgKS5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcIkRcIiApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRThcblx0XHRcdC8vIEVuZm9yY2UgY2FzZS1zZW5zaXRpdml0eSBvZiBuYW1lIGF0dHJpYnV0ZVxuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKFwiW25hbWU9ZF1cIikubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJuYW1lXCIgKyB3aGl0ZXNwYWNlICsgXCIqWypeJHwhfl0/PVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZGIDMuNSAtIDplbmFibGVkLzpkaXNhYmxlZCBhbmQgaGlkZGVuIGVsZW1lbnRzIChoaWRkZW4gZWxlbWVudHMgYXJlIHN0aWxsIGVuYWJsZWQpXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKFwiOmVuYWJsZWRcIikubGVuZ3RoICE9PSAyICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6ZW5hYmxlZFwiLCBcIjpkaXNhYmxlZFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOS0xMStcblx0XHRcdC8vIElFJ3MgOmRpc2FibGVkIHNlbGVjdG9yIGRvZXMgbm90IHBpY2sgdXAgdGhlIGNoaWxkcmVuIG9mIGRpc2FibGVkIGZpZWxkc2V0c1xuXHRcdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5kaXNhYmxlZCA9IHRydWU7XG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCI6ZGlzYWJsZWRcIikubGVuZ3RoICE9PSAyICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6ZW5hYmxlZFwiLCBcIjpkaXNhYmxlZFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9wZXJhIDEwLTExIGRvZXMgbm90IHRocm93IG9uIHBvc3QtY29tbWEgaW52YWxpZCBwc2V1ZG9zXG5cdFx0XHRlbC5xdWVyeVNlbGVjdG9yQWxsKFwiKiw6eFwiKTtcblx0XHRcdHJidWdneVFTQS5wdXNoKFwiLC4qOlwiKTtcblx0XHR9KTtcblx0fVxuXG5cdGlmICggKHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yID0gcm5hdGl2ZS50ZXN0KCAobWF0Y2hlcyA9IGRvY0VsZW0ubWF0Y2hlcyB8fFxuXHRcdGRvY0VsZW0ud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5tb3pNYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm9NYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm1zTWF0Y2hlc1NlbGVjdG9yKSApKSApIHtcblxuXHRcdGFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHQvLyBDaGVjayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBtYXRjaGVzU2VsZWN0b3Jcblx0XHRcdC8vIG9uIGEgZGlzY29ubmVjdGVkIG5vZGUgKElFIDkpXG5cdFx0XHRzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoID0gbWF0Y2hlcy5jYWxsKCBlbCwgXCIqXCIgKTtcblxuXHRcdFx0Ly8gVGhpcyBzaG91bGQgZmFpbCB3aXRoIGFuIGV4Y2VwdGlvblxuXHRcdFx0Ly8gR2Vja28gZG9lcyBub3QgZXJyb3IsIHJldHVybnMgZmFsc2UgaW5zdGVhZFxuXHRcdFx0bWF0Y2hlcy5jYWxsKCBlbCwgXCJbcyE9JyddOnhcIiApO1xuXHRcdFx0cmJ1Z2d5TWF0Y2hlcy5wdXNoKCBcIiE9XCIsIHBzZXVkb3MgKTtcblx0XHR9KTtcblx0fVxuXG5cdHJidWdneVFTQSA9IHJidWdneVFTQS5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5UVNBLmpvaW4oXCJ8XCIpICk7XG5cdHJidWdneU1hdGNoZXMgPSByYnVnZ3lNYXRjaGVzLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lNYXRjaGVzLmpvaW4oXCJ8XCIpICk7XG5cblx0LyogQ29udGFpbnNcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXHRoYXNDb21wYXJlID0gcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICk7XG5cblx0Ly8gRWxlbWVudCBjb250YWlucyBhbm90aGVyXG5cdC8vIFB1cnBvc2VmdWxseSBzZWxmLWV4Y2x1c2l2ZVxuXHQvLyBBcyBpbiwgYW4gZWxlbWVudCBkb2VzIG5vdCBjb250YWluIGl0c2VsZlxuXHRjb250YWlucyA9IGhhc0NvbXBhcmUgfHwgcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbnRhaW5zICkgP1xuXHRcdGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdFx0dmFyIGFkb3duID0gYS5ub2RlVHlwZSA9PT0gOSA/IGEuZG9jdW1lbnRFbGVtZW50IDogYSxcblx0XHRcdFx0YnVwID0gYiAmJiBiLnBhcmVudE5vZGU7XG5cdFx0XHRyZXR1cm4gYSA9PT0gYnVwIHx8ICEhKCBidXAgJiYgYnVwLm5vZGVUeXBlID09PSAxICYmIChcblx0XHRcdFx0YWRvd24uY29udGFpbnMgP1xuXHRcdFx0XHRcdGFkb3duLmNvbnRhaW5zKCBidXAgKSA6XG5cdFx0XHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAmJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBidXAgKSAmIDE2XG5cdFx0XHQpKTtcblx0XHR9IDpcblx0XHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHRcdGlmICggYiApIHtcblx0XHRcdFx0d2hpbGUgKCAoYiA9IGIucGFyZW50Tm9kZSkgKSB7XG5cdFx0XHRcdFx0aWYgKCBiID09PSBhICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblxuXHQvKiBTb3J0aW5nXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBEb2N1bWVudCBvcmRlciBzb3J0aW5nXG5cdHNvcnRPcmRlciA9IGhhc0NvbXBhcmUgP1xuXHRmdW5jdGlvbiggYSwgYiApIHtcblxuXHRcdC8vIEZsYWcgZm9yIGR1cGxpY2F0ZSByZW1vdmFsXG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdC8vIFNvcnQgb24gbWV0aG9kIGV4aXN0ZW5jZSBpZiBvbmx5IG9uZSBpbnB1dCBoYXMgY29tcGFyZURvY3VtZW50UG9zaXRpb25cblx0XHR2YXIgY29tcGFyZSA9ICFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIC0gIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb247XG5cdFx0aWYgKCBjb21wYXJlICkge1xuXHRcdFx0cmV0dXJuIGNvbXBhcmU7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsY3VsYXRlIHBvc2l0aW9uIGlmIGJvdGggaW5wdXRzIGJlbG9uZyB0byB0aGUgc2FtZSBkb2N1bWVudFxuXHRcdGNvbXBhcmUgPSAoIGEub3duZXJEb2N1bWVudCB8fCBhICkgPT09ICggYi5vd25lckRvY3VtZW50IHx8IGIgKSA/XG5cdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBiICkgOlxuXG5cdFx0XHQvLyBPdGhlcndpc2Ugd2Uga25vdyB0aGV5IGFyZSBkaXNjb25uZWN0ZWRcblx0XHRcdDE7XG5cblx0XHQvLyBEaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRpZiAoIGNvbXBhcmUgJiAxIHx8XG5cdFx0XHQoIXN1cHBvcnQuc29ydERldGFjaGVkICYmIGIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGEgKSA9PT0gY29tcGFyZSkgKSB7XG5cblx0XHRcdC8vIENob29zZSB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IGlzIHJlbGF0ZWQgdG8gb3VyIHByZWZlcnJlZCBkb2N1bWVudFxuXHRcdFx0aWYgKCBhID09PSBkb2N1bWVudCB8fCBhLm93bmVyRG9jdW1lbnQgPT09IHByZWZlcnJlZERvYyAmJiBjb250YWlucyhwcmVmZXJyZWREb2MsIGEpICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGIgPT09IGRvY3VtZW50IHx8IGIub3duZXJEb2N1bWVudCA9PT0gcHJlZmVycmVkRG9jICYmIGNvbnRhaW5zKHByZWZlcnJlZERvYywgYikgKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWludGFpbiBvcmlnaW5hbCBvcmRlclxuXHRcdFx0cmV0dXJuIHNvcnRJbnB1dCA/XG5cdFx0XHRcdCggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tcGFyZSAmIDQgPyAtMSA6IDE7XG5cdH0gOlxuXHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHQvLyBFeGl0IGVhcmx5IGlmIHRoZSBub2RlcyBhcmUgaWRlbnRpY2FsXG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdHZhciBjdXIsXG5cdFx0XHRpID0gMCxcblx0XHRcdGF1cCA9IGEucGFyZW50Tm9kZSxcblx0XHRcdGJ1cCA9IGIucGFyZW50Tm9kZSxcblx0XHRcdGFwID0gWyBhIF0sXG5cdFx0XHRicCA9IFsgYiBdO1xuXG5cdFx0Ly8gUGFyZW50bGVzcyBub2RlcyBhcmUgZWl0aGVyIGRvY3VtZW50cyBvciBkaXNjb25uZWN0ZWRcblx0XHRpZiAoICFhdXAgfHwgIWJ1cCApIHtcblx0XHRcdHJldHVybiBhID09PSBkb2N1bWVudCA/IC0xIDpcblx0XHRcdFx0YiA9PT0gZG9jdW1lbnQgPyAxIDpcblx0XHRcdFx0YXVwID8gLTEgOlxuXHRcdFx0XHRidXAgPyAxIDpcblx0XHRcdFx0c29ydElucHV0ID9cblx0XHRcdFx0KCBpbmRleE9mKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOlxuXHRcdFx0XHQwO1xuXG5cdFx0Ly8gSWYgdGhlIG5vZGVzIGFyZSBzaWJsaW5ncywgd2UgY2FuIGRvIGEgcXVpY2sgY2hlY2tcblx0XHR9IGVsc2UgaWYgKCBhdXAgPT09IGJ1cCApIHtcblx0XHRcdHJldHVybiBzaWJsaW5nQ2hlY2soIGEsIGIgKTtcblx0XHR9XG5cblx0XHQvLyBPdGhlcndpc2Ugd2UgbmVlZCBmdWxsIGxpc3RzIG9mIHRoZWlyIGFuY2VzdG9ycyBmb3IgY29tcGFyaXNvblxuXHRcdGN1ciA9IGE7XG5cdFx0d2hpbGUgKCAoY3VyID0gY3VyLnBhcmVudE5vZGUpICkge1xuXHRcdFx0YXAudW5zaGlmdCggY3VyICk7XG5cdFx0fVxuXHRcdGN1ciA9IGI7XG5cdFx0d2hpbGUgKCAoY3VyID0gY3VyLnBhcmVudE5vZGUpICkge1xuXHRcdFx0YnAudW5zaGlmdCggY3VyICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2FsayBkb3duIHRoZSB0cmVlIGxvb2tpbmcgZm9yIGEgZGlzY3JlcGFuY3lcblx0XHR3aGlsZSAoIGFwW2ldID09PSBicFtpXSApIHtcblx0XHRcdGkrKztcblx0XHR9XG5cblx0XHRyZXR1cm4gaSA/XG5cdFx0XHQvLyBEbyBhIHNpYmxpbmcgY2hlY2sgaWYgdGhlIG5vZGVzIGhhdmUgYSBjb21tb24gYW5jZXN0b3Jcblx0XHRcdHNpYmxpbmdDaGVjayggYXBbaV0sIGJwW2ldICkgOlxuXG5cdFx0XHQvLyBPdGhlcndpc2Ugbm9kZXMgaW4gb3VyIGRvY3VtZW50IHNvcnQgZmlyc3Rcblx0XHRcdGFwW2ldID09PSBwcmVmZXJyZWREb2MgPyAtMSA6XG5cdFx0XHRicFtpXSA9PT0gcHJlZmVycmVkRG9jID8gMSA6XG5cdFx0XHQwO1xuXHR9O1xuXG5cdHJldHVybiBkb2N1bWVudDtcbn07XG5cblNpenpsZS5tYXRjaGVzID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1lbnRzICkge1xuXHRyZXR1cm4gU2l6emxlKCBleHByLCBudWxsLCBudWxsLCBlbGVtZW50cyApO1xufTtcblxuU2l6emxlLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBlbGVtLCBleHByICkge1xuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0aWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT09IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdH1cblxuXHRpZiAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yICYmIGRvY3VtZW50SXNIVE1MICYmXG5cdFx0IW5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGVbIGV4cHIgKyBcIiBcIiBdICYmXG5cdFx0KCAhcmJ1Z2d5TWF0Y2hlcyB8fCAhcmJ1Z2d5TWF0Y2hlcy50ZXN0KCBleHByICkgKSAmJlxuXHRcdCggIXJidWdneVFTQSAgICAgfHwgIXJidWdneVFTQS50ZXN0KCBleHByICkgKSApIHtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBlbGVtLCBleHByICk7XG5cblx0XHRcdC8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRcdGlmICggcmV0IHx8IHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggfHxcblx0XHRcdFx0XHQvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudFxuXHRcdFx0XHRcdC8vIGZyYWdtZW50IGluIElFIDlcblx0XHRcdFx0XHRlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09IDExICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUoIGV4cHIsIHRydWUgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gU2l6emxlKCBleHByLCBkb2N1bWVudCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5ndGggPiAwO1xufTtcblxuU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oIGNvbnRleHQsIGVsZW0gKSB7XG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHRpZiAoICggY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0fVxuXHRyZXR1cm4gY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKTtcbn07XG5cblNpenpsZS5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHRpZiAoICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0fVxuXG5cdHZhciBmbiA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZS50b0xvd2VyQ2FzZSgpIF0sXG5cdFx0Ly8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKGpRdWVyeSAjMTM4MDcpXG5cdFx0dmFsID0gZm4gJiYgaGFzT3duLmNhbGwoIEV4cHIuYXR0ckhhbmRsZSwgbmFtZS50b0xvd2VyQ2FzZSgpICkgP1xuXHRcdFx0Zm4oIGVsZW0sIG5hbWUsICFkb2N1bWVudElzSFRNTCApIDpcblx0XHRcdHVuZGVmaW5lZDtcblxuXHRyZXR1cm4gdmFsICE9PSB1bmRlZmluZWQgP1xuXHRcdHZhbCA6XG5cdFx0c3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApIDpcblx0XHRcdCh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUobmFtZSkpICYmIHZhbC5zcGVjaWZpZWQgP1xuXHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xufTtcblxuU2l6emxlLmVzY2FwZSA9IGZ1bmN0aW9uKCBzZWwgKSB7XG5cdHJldHVybiAoc2VsICsgXCJcIikucmVwbGFjZSggcmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApO1xufTtcblxuU2l6emxlLmVycm9yID0gZnVuY3Rpb24oIG1zZyApIHtcblx0dGhyb3cgbmV3IEVycm9yKCBcIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246IFwiICsgbXNnICk7XG59O1xuXG4vKipcbiAqIERvY3VtZW50IHNvcnRpbmcgYW5kIHJlbW92aW5nIGR1cGxpY2F0ZXNcbiAqIEBwYXJhbSB7QXJyYXlMaWtlfSByZXN1bHRzXG4gKi9cblNpenpsZS51bmlxdWVTb3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7XG5cdHZhciBlbGVtLFxuXHRcdGR1cGxpY2F0ZXMgPSBbXSxcblx0XHRqID0gMCxcblx0XHRpID0gMDtcblxuXHQvLyBVbmxlc3Mgd2UgKmtub3cqIHdlIGNhbiBkZXRlY3QgZHVwbGljYXRlcywgYXNzdW1lIHRoZWlyIHByZXNlbmNlXG5cdGhhc0R1cGxpY2F0ZSA9ICFzdXBwb3J0LmRldGVjdER1cGxpY2F0ZXM7XG5cdHNvcnRJbnB1dCA9ICFzdXBwb3J0LnNvcnRTdGFibGUgJiYgcmVzdWx0cy5zbGljZSggMCApO1xuXHRyZXN1bHRzLnNvcnQoIHNvcnRPcmRlciApO1xuXG5cdGlmICggaGFzRHVwbGljYXRlICkge1xuXHRcdHdoaWxlICggKGVsZW0gPSByZXN1bHRzW2krK10pICkge1xuXHRcdFx0aWYgKCBlbGVtID09PSByZXN1bHRzWyBpIF0gKSB7XG5cdFx0XHRcdGogPSBkdXBsaWNhdGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRyZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sgaiBdLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNlIG9iamVjdHNcblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL3B1bGwvMjI1XG5cdHNvcnRJbnB1dCA9IG51bGw7XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVzXG4gKiBAcGFyYW0ge0FycmF5fEVsZW1lbnR9IGVsZW1cbiAqL1xuZ2V0VGV4dCA9IFNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHZhciBub2RlLFxuXHRcdHJldCA9IFwiXCIsXG5cdFx0aSA9IDAsXG5cdFx0bm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdGlmICggIW5vZGVUeXBlICkge1xuXHRcdC8vIElmIG5vIG5vZGVUeXBlLCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5XG5cdFx0d2hpbGUgKCAobm9kZSA9IGVsZW1baSsrXSkgKSB7XG5cdFx0XHQvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2Rlc1xuXHRcdFx0cmV0ICs9IGdldFRleHQoIG5vZGUgKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09PSA5IHx8IG5vZGVUeXBlID09PSAxMSApIHtcblx0XHQvLyBVc2UgdGV4dENvbnRlbnQgZm9yIGVsZW1lbnRzXG5cdFx0Ly8gaW5uZXJUZXh0IHVzYWdlIHJlbW92ZWQgZm9yIGNvbnNpc3RlbmN5IG9mIG5ldyBsaW5lcyAoalF1ZXJ5ICMxMTE1Mylcblx0XHRpZiAoIHR5cGVvZiBlbGVtLnRleHRDb250ZW50ID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0udGV4dENvbnRlbnQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFRyYXZlcnNlIGl0cyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdHJldCArPSBnZXRUZXh0KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVmFsdWU7XG5cdH1cblx0Ly8gRG8gbm90IGluY2x1ZGUgY29tbWVudCBvciBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzXG5cblx0cmV0dXJuIHJldDtcbn07XG5cbkV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzID0ge1xuXG5cdC8vIENhbiBiZSBhZGp1c3RlZCBieSB0aGUgdXNlclxuXHRjYWNoZUxlbmd0aDogNTAsXG5cblx0Y3JlYXRlUHNldWRvOiBtYXJrRnVuY3Rpb24sXG5cblx0bWF0Y2g6IG1hdGNoRXhwcixcblxuXHRhdHRySGFuZGxlOiB7fSxcblxuXHRmaW5kOiB7fSxcblxuXHRyZWxhdGl2ZToge1xuXHRcdFwiPlwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCIgXCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiB9LFxuXHRcdFwiK1wiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIn5cIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIgfVxuXHR9LFxuXG5cdHByZUZpbHRlcjoge1xuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaFsxXSA9IG1hdGNoWzFdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdC8vIE1vdmUgdGhlIGdpdmVuIHZhbHVlIHRvIG1hdGNoWzNdIHdoZXRoZXIgcXVvdGVkIG9yIHVucXVvdGVkXG5cdFx0XHRtYXRjaFszXSA9ICggbWF0Y2hbM10gfHwgbWF0Y2hbNF0gfHwgbWF0Y2hbNV0gfHwgXCJcIiApLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdGlmICggbWF0Y2hbMl0gPT09IFwifj1cIiApIHtcblx0XHRcdFx0bWF0Y2hbM10gPSBcIiBcIiArIG1hdGNoWzNdICsgXCIgXCI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgNCApO1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdC8qIG1hdGNoZXMgZnJvbSBtYXRjaEV4cHJbXCJDSElMRFwiXVxuXHRcdFx0XHQxIHR5cGUgKG9ubHl8bnRofC4uLilcblx0XHRcdFx0MiB3aGF0IChjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHQzIGFyZ3VtZW50IChldmVufG9kZHxcXGQqfFxcZCpuKFsrLV1cXGQrKT98Li4uKVxuXHRcdFx0XHQ0IHhuLWNvbXBvbmVudCBvZiB4bit5IGFyZ3VtZW50IChbKy1dP1xcZCpufClcblx0XHRcdFx0NSBzaWduIG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ2IHggb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDcgc2lnbiBvZiB5LWNvbXBvbmVudFxuXHRcdFx0XHQ4IHkgb2YgeS1jb21wb25lbnRcblx0XHRcdCovXG5cdFx0XHRtYXRjaFsxXSA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdGlmICggbWF0Y2hbMV0uc2xpY2UoIDAsIDMgKSA9PT0gXCJudGhcIiApIHtcblx0XHRcdFx0Ly8gbnRoLSogcmVxdWlyZXMgYXJndW1lbnRcblx0XHRcdFx0aWYgKCAhbWF0Y2hbM10gKSB7XG5cdFx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFswXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gbnVtZXJpYyB4IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxEXG5cdFx0XHRcdC8vIHJlbWVtYmVyIHRoYXQgZmFsc2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzFcblx0XHRcdFx0bWF0Y2hbNF0gPSArKCBtYXRjaFs0XSA/IG1hdGNoWzVdICsgKG1hdGNoWzZdIHx8IDEpIDogMiAqICggbWF0Y2hbM10gPT09IFwiZXZlblwiIHx8IG1hdGNoWzNdID09PSBcIm9kZFwiICkgKTtcblx0XHRcdFx0bWF0Y2hbNV0gPSArKCAoIG1hdGNoWzddICsgbWF0Y2hbOF0gKSB8fCBtYXRjaFszXSA9PT0gXCJvZGRcIiApO1xuXG5cdFx0XHQvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWzNdICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaDtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0dmFyIGV4Y2Vzcyxcblx0XHRcdFx0dW5xdW90ZWQgPSAhbWF0Y2hbNl0gJiYgbWF0Y2hbMl07XG5cblx0XHRcdGlmICggbWF0Y2hFeHByW1wiQ0hJTERcIl0udGVzdCggbWF0Y2hbMF0gKSApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFjY2VwdCBxdW90ZWQgYXJndW1lbnRzIGFzLWlzXG5cdFx0XHRpZiAoIG1hdGNoWzNdICkge1xuXHRcdFx0XHRtYXRjaFsyXSA9IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8IFwiXCI7XG5cblx0XHRcdC8vIFN0cmlwIGV4Y2VzcyBjaGFyYWN0ZXJzIGZyb20gdW5xdW90ZWQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCB1bnF1b3RlZCAmJiBycHNldWRvLnRlc3QoIHVucXVvdGVkICkgJiZcblx0XHRcdFx0Ly8gR2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSlcblx0XHRcdFx0KGV4Y2VzcyA9IHRva2VuaXplKCB1bnF1b3RlZCwgdHJ1ZSApKSAmJlxuXHRcdFx0XHQvLyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNsb3NpbmcgcGFyZW50aGVzaXNcblx0XHRcdFx0KGV4Y2VzcyA9IHVucXVvdGVkLmluZGV4T2YoIFwiKVwiLCB1bnF1b3RlZC5sZW5ndGggLSBleGNlc3MgKSAtIHVucXVvdGVkLmxlbmd0aCkgKSB7XG5cblx0XHRcdFx0Ly8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXhcblx0XHRcdFx0bWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHRcdG1hdGNoWzJdID0gdW5xdW90ZWQuc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXR1cm4gb25seSBjYXB0dXJlcyBuZWVkZWQgYnkgdGhlIHBzZXVkbyBmaWx0ZXIgbWV0aG9kICh0eXBlIGFuZCBhcmd1bWVudClcblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgMyApO1xuXHRcdH1cblx0fSxcblxuXHRmaWx0ZXI6IHtcblxuXHRcdFwiVEFHXCI6IGZ1bmN0aW9uKCBub2RlTmFtZVNlbGVjdG9yICkge1xuXHRcdFx0dmFyIG5vZGVOYW1lID0gbm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gXCIqXCIgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7IH0gOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5vZGVOYW1lO1xuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNMQVNTXCI6IGZ1bmN0aW9uKCBjbGFzc05hbWUgKSB7XG5cdFx0XHR2YXIgcGF0dGVybiA9IGNsYXNzQ2FjaGVbIGNsYXNzTmFtZSArIFwiIFwiIF07XG5cblx0XHRcdHJldHVybiBwYXR0ZXJuIHx8XG5cdFx0XHRcdChwYXR0ZXJuID0gbmV3IFJlZ0V4cCggXCIoXnxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIGNsYXNzTmFtZSArIFwiKFwiICsgd2hpdGVzcGFjZSArIFwifCQpXCIgKSkgJiZcblx0XHRcdFx0Y2xhc3NDYWNoZSggY2xhc3NOYW1lLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGF0dGVybi50ZXN0KCB0eXBlb2YgZWxlbS5jbGFzc05hbWUgPT09IFwic3RyaW5nXCIgJiYgZWxlbS5jbGFzc05hbWUgfHwgdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9PSBcInVuZGVmaW5lZFwiICYmIGVsZW0uZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgfHwgXCJcIiApO1xuXHRcdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBuYW1lLCBvcGVyYXRvciwgY2hlY2sgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciByZXN1bHQgPSBTaXp6bGUuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0XHRcdGlmICggcmVzdWx0ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIiE9XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAhb3BlcmF0b3IgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXN1bHQgKz0gXCJcIjtcblxuXHRcdFx0XHRyZXR1cm4gb3BlcmF0b3IgPT09IFwiPVwiID8gcmVzdWx0ID09PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiIT1cIiA/IHJlc3VsdCAhPT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIl49XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA9PT0gMCA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiKj1cIiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID4gLTEgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiQ9XCIgPyBjaGVjayAmJiByZXN1bHQuc2xpY2UoIC1jaGVjay5sZW5ndGggKSA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIn49XCIgPyAoIFwiIFwiICsgcmVzdWx0LnJlcGxhY2UoIHJ3aGl0ZXNwYWNlLCBcIiBcIiApICsgXCIgXCIgKS5pbmRleE9mKCBjaGVjayApID4gLTEgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcInw9XCIgPyByZXN1bHQgPT09IGNoZWNrIHx8IHJlc3VsdC5zbGljZSggMCwgY2hlY2subGVuZ3RoICsgMSApID09PSBjaGVjayArIFwiLVwiIDpcblx0XHRcdFx0XHRmYWxzZTtcblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiQ0hJTERcIjogZnVuY3Rpb24oIHR5cGUsIHdoYXQsIGFyZ3VtZW50LCBmaXJzdCwgbGFzdCApIHtcblx0XHRcdHZhciBzaW1wbGUgPSB0eXBlLnNsaWNlKCAwLCAzICkgIT09IFwibnRoXCIsXG5cdFx0XHRcdGZvcndhcmQgPSB0eXBlLnNsaWNlKCAtNCApICE9PSBcImxhc3RcIixcblx0XHRcdFx0b2ZUeXBlID0gd2hhdCA9PT0gXCJvZi10eXBlXCI7XG5cblx0XHRcdHJldHVybiBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwID9cblxuXHRcdFx0XHQvLyBTaG9ydGN1dCBmb3IgOm50aC0qKG4pXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiAhIWVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdFx0fSA6XG5cblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgY2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLCBub2RlLCBub2RlSW5kZXgsIHN0YXJ0LFxuXHRcdFx0XHRcdFx0ZGlyID0gc2ltcGxlICE9PSBmb3J3YXJkID8gXCJuZXh0U2libGluZ1wiIDogXCJwcmV2aW91c1NpYmxpbmdcIixcblx0XHRcdFx0XHRcdHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZSxcblx0XHRcdFx0XHRcdG5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0XHRcdFx0dXNlQ2FjaGUgPSAheG1sICYmICFvZlR5cGUsXG5cdFx0XHRcdFx0XHRkaWZmID0gZmFsc2U7XG5cblx0XHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gOihmaXJzdHxsYXN0fG9ubHkpLShjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHRcdFx0aWYgKCBzaW1wbGUgKSB7XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggZGlyICkge1xuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKG5vZGUgPSBub2RlWyBkaXIgXSkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG9mVHlwZSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvLyBSZXZlcnNlIGRpcmVjdGlvbiBmb3IgOm9ubHktKiAoaWYgd2UgaGF2ZW4ndCB5ZXQgZG9uZSBzbylcblx0XHRcdFx0XHRcdFx0XHRzdGFydCA9IGRpciA9IHR5cGUgPT09IFwib25seVwiICYmICFzdGFydCAmJiBcIm5leHRTaWJsaW5nXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHN0YXJ0ID0gWyBmb3J3YXJkID8gcGFyZW50LmZpcnN0Q2hpbGQgOiBwYXJlbnQubGFzdENoaWxkIF07XG5cblx0XHRcdFx0XHRcdC8vIG5vbi14bWwgOm50aC1jaGlsZCguLi4pIHN0b3JlcyBjYWNoZSBkYXRhIG9uIGBwYXJlbnRgXG5cdFx0XHRcdFx0XHRpZiAoIGZvcndhcmQgJiYgdXNlQ2FjaGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU2VlayBgZWxlbWAgZnJvbSBhIHByZXZpb3VzbHktY2FjaGVkIGluZGV4XG5cblx0XHRcdFx0XHRcdFx0Ly8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheVxuXHRcdFx0XHRcdFx0XHRub2RlID0gcGFyZW50O1xuXHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHQob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdGNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4ICYmIGNhY2hlWyAyIF07XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBub2RlSW5kZXggJiYgcGFyZW50LmNoaWxkTm9kZXNbIG5vZGVJbmRleCBdO1xuXG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBGYWxsYmFjayB0byBzZWVraW5nIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdChkaWZmID0gbm9kZUluZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gV2hlbiBmb3VuZCwgY2FjaGUgaW5kZXhlcyBvbiBgcGFyZW50YCBhbmQgYnJlYWtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgJiYgKytkaWZmICYmIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBub2RlSW5kZXgsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBVc2UgcHJldmlvdXNseS1jYWNoZWQgZWxlbWVudCBpbmRleCBpZiBhdmFpbGFibGVcblx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0XHQvLyAuLi5pbiBhIGd6aXAtZnJpZW5kbHkgd2F5XG5cdFx0XHRcdFx0XHRcdFx0bm9kZSA9IGVsZW07XG5cdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0Y2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4O1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8geG1sIDpudGgtY2hpbGQoLi4uKVxuXHRcdFx0XHRcdFx0XHQvLyBvciA6bnRoLWxhc3QtY2hpbGQoLi4uKSBvciA6bnRoKC1sYXN0KT8tb2YtdHlwZSguLi4pXG5cdFx0XHRcdFx0XHRcdGlmICggZGlmZiA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gVXNlIHRoZSBzYW1lIGxvb3AgYXMgYWJvdmUgdG8gc2VlayBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoIChub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KGRpZmYgPSBub2RlSW5kZXggPSAwKSB8fCBzdGFydC5wb3AoKSkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmICggKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVUeXBlID09PSAxICkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0KytkaWZmICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIENhY2hlIHRoZSBpbmRleCBvZiBlYWNoIGVuY291bnRlcmVkIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgdGhlIG9mZnNldCwgdGhlbiBjaGVjayBhZ2FpbnN0IGN5Y2xlIHNpemVcblx0XHRcdFx0XHRcdGRpZmYgLT0gbGFzdDtcblx0XHRcdFx0XHRcdHJldHVybiBkaWZmID09PSBmaXJzdCB8fCAoIGRpZmYgJSBmaXJzdCA9PT0gMCAmJiBkaWZmIC8gZmlyc3QgPj0gMCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIHBzZXVkbywgYXJndW1lbnQgKSB7XG5cdFx0XHQvLyBwc2V1ZG8tY2xhc3MgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmVcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXNcblx0XHRcdC8vIFByaW9yaXRpemUgYnkgY2FzZSBzZW5zaXRpdml0eSBpbiBjYXNlIGN1c3RvbSBwc2V1ZG9zIGFyZSBhZGRlZCB3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzXG5cdFx0XHQvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRlcnMgaW5oZXJpdHMgZnJvbSBwc2V1ZG9zXG5cdFx0XHR2YXIgYXJncyxcblx0XHRcdFx0Zm4gPSBFeHByLnBzZXVkb3NbIHBzZXVkbyBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiICsgcHNldWRvICk7XG5cblx0XHRcdC8vIFRoZSB1c2VyIG1heSB1c2UgY3JlYXRlUHNldWRvIHRvIGluZGljYXRlIHRoYXRcblx0XHRcdC8vIGFyZ3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9uXG5cdFx0XHQvLyBqdXN0IGFzIFNpenpsZSBkb2VzXG5cdFx0XHRpZiAoIGZuWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHJldHVybiBmbiggYXJndW1lbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQnV0IG1haW50YWluIHN1cHBvcnQgZm9yIG9sZCBzaWduYXR1cmVzXG5cdFx0XHRpZiAoIGZuLmxlbmd0aCA+IDEgKSB7XG5cdFx0XHRcdGFyZ3MgPSBbIHBzZXVkbywgcHNldWRvLCBcIlwiLCBhcmd1bWVudCBdO1xuXHRcdFx0XHRyZXR1cm4gRXhwci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID9cblx0XHRcdFx0XHRtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHRcdFx0XHR2YXIgaWR4LFxuXHRcdFx0XHRcdFx0XHRtYXRjaGVkID0gZm4oIHNlZWQsIGFyZ3VtZW50ICksXG5cdFx0XHRcdFx0XHRcdGkgPSBtYXRjaGVkLmxlbmd0aDtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZHggPSBpbmRleE9mKCBzZWVkLCBtYXRjaGVkW2ldICk7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGlkeCBdID0gISggbWF0Y2hlc1sgaWR4IF0gPSBtYXRjaGVkW2ldICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSkgOlxuXHRcdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZuO1xuXHRcdH1cblx0fSxcblxuXHRwc2V1ZG9zOiB7XG5cdFx0Ly8gUG90ZW50aWFsbHkgY29tcGxleCBwc2V1ZG9zXG5cdFx0XCJub3RcIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRcdC8vIFRyaW0gdGhlIHNlbGVjdG9yIHBhc3NlZCB0byBjb21waWxlXG5cdFx0XHQvLyB0byBhdm9pZCB0cmVhdGluZyBsZWFkaW5nIGFuZCB0cmFpbGluZ1xuXHRcdFx0Ly8gc3BhY2VzIGFzIGNvbWJpbmF0b3JzXG5cdFx0XHR2YXIgaW5wdXQgPSBbXSxcblx0XHRcdFx0cmVzdWx0cyA9IFtdLFxuXHRcdFx0XHRtYXRjaGVyID0gY29tcGlsZSggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApICk7XG5cblx0XHRcdHJldHVybiBtYXRjaGVyWyBleHBhbmRvIF0gP1xuXHRcdFx0XHRtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMsIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgZWxlbSxcblx0XHRcdFx0XHRcdHVubWF0Y2hlZCA9IG1hdGNoZXIoIHNlZWQsIG51bGwsIHhtbCwgW10gKSxcblx0XHRcdFx0XHRcdGkgPSBzZWVkLmxlbmd0aDtcblxuXHRcdFx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIHVubWF0Y2hlZCBieSBgbWF0Y2hlcmBcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkge1xuXHRcdFx0XHRcdFx0XHRzZWVkW2ldID0gIShtYXRjaGVzW2ldID0gZWxlbSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0aW5wdXRbMF0gPSBlbGVtO1xuXHRcdFx0XHRcdG1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJlc3VsdHMgKTtcblx0XHRcdFx0XHQvLyBEb24ndCBrZWVwIHRoZSBlbGVtZW50IChpc3N1ZSAjMjk5KVxuXHRcdFx0XHRcdGlucHV0WzBdID0gbnVsbDtcblx0XHRcdFx0XHRyZXR1cm4gIXJlc3VsdHMucG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0fSksXG5cblx0XHRcImhhc1wiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gU2l6emxlKCBzZWxlY3RvciwgZWxlbSApLmxlbmd0aCA+IDA7XG5cdFx0XHR9O1xuXHRcdH0pLFxuXG5cdFx0XCJjb250YWluc1wiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gKCBlbGVtLnRleHRDb250ZW50IHx8IGdldFRleHQoIGVsZW0gKSApLmluZGV4T2YoIHRleHQgKSA+IC0xO1xuXHRcdFx0fTtcblx0XHR9KSxcblxuXHRcdC8vIFwiV2hldGhlciBhbiBlbGVtZW50IGlzIHJlcHJlc2VudGVkIGJ5IGEgOmxhbmcoKSBzZWxlY3RvclxuXHRcdC8vIGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlXG5cdFx0Ly8gYmVpbmcgZXF1YWwgdG8gdGhlIGlkZW50aWZpZXIgQyxcblx0XHQvLyBvciBiZWdpbm5pbmcgd2l0aCB0aGUgaWRlbnRpZmllciBDIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IFwiLVwiLlxuXHRcdC8vIFRoZSBtYXRjaGluZyBvZiBDIGFnYWluc3QgdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZSBpcyBwZXJmb3JtZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LlxuXHRcdC8vIFRoZSBpZGVudGlmaWVyIEMgZG9lcyBub3QgaGF2ZSB0byBiZSBhIHZhbGlkIGxhbmd1YWdlIG5hbWUuXCJcblx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2xhbmctcHNldWRvXG5cdFx0XCJsYW5nXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGxhbmcgKSB7XG5cdFx0XHQvLyBsYW5nIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWVyXG5cdFx0XHRpZiAoICFyaWRlbnRpZmllci50ZXN0KGxhbmcgfHwgXCJcIikgKSB7XG5cdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBsYW5nOiBcIiArIGxhbmcgKTtcblx0XHRcdH1cblx0XHRcdGxhbmcgPSBsYW5nLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIGVsZW1MYW5nO1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0aWYgKCAoZWxlbUxhbmcgPSBkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRcdFx0XHRlbGVtLmxhbmcgOlxuXHRcdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoXCJ4bWw6bGFuZ1wiKSB8fCBlbGVtLmdldEF0dHJpYnV0ZShcImxhbmdcIikpICkge1xuXG5cdFx0XHRcdFx0XHRlbGVtTGFuZyA9IGVsZW1MYW5nLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbUxhbmcgPT09IGxhbmcgfHwgZWxlbUxhbmcuaW5kZXhPZiggbGFuZyArIFwiLVwiICkgPT09IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IHdoaWxlICggKGVsZW0gPSBlbGVtLnBhcmVudE5vZGUpICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fTtcblx0XHR9KSxcblxuXHRcdC8vIE1pc2NlbGxhbmVvdXNcblx0XHRcInRhcmdldFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHRcdFx0cmV0dXJuIGhhc2ggJiYgaGFzaC5zbGljZSggMSApID09PSBlbGVtLmlkO1xuXHRcdH0sXG5cblx0XHRcInJvb3RcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jRWxlbTtcblx0XHR9LFxuXG5cdFx0XCJmb2N1c1wiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmICghZG9jdW1lbnQuaGFzRm9jdXMgfHwgZG9jdW1lbnQuaGFzRm9jdXMoKSkgJiYgISEoZWxlbS50eXBlIHx8IGVsZW0uaHJlZiB8fCB+ZWxlbS50YWJJbmRleCk7XG5cdFx0fSxcblxuXHRcdC8vIEJvb2xlYW4gcHJvcGVydGllc1xuXHRcdFwiZW5hYmxlZFwiOiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggZmFsc2UgKSxcblx0XHRcImRpc2FibGVkXCI6IGNyZWF0ZURpc2FibGVkUHNldWRvKCB0cnVlICksXG5cblx0XHRcImNoZWNrZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHQvLyBJbiBDU1MzLCA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIGJvdGggY2hlY2tlZCBhbmQgc2VsZWN0ZWQgZWxlbWVudHNcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXG5cdFx0XHR2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gKG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgISFlbGVtLmNoZWNrZWQpIHx8IChub2RlTmFtZSA9PT0gXCJvcHRpb25cIiAmJiAhIWVsZW0uc2VsZWN0ZWQpO1xuXHRcdH0sXG5cblx0XHRcInNlbGVjdGVkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0Ly8gQWNjZXNzaW5nIHRoaXMgcHJvcGVydHkgbWFrZXMgc2VsZWN0ZWQtYnktZGVmYXVsdFxuXHRcdFx0Ly8gb3B0aW9ucyBpbiBTYWZhcmkgd29yayBwcm9wZXJseVxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gQ29udGVudHNcblx0XHRcImVtcHR5XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNlbXB0eS1wc2V1ZG9cblx0XHRcdC8vIDplbXB0eSBpcyBuZWdhdGVkIGJ5IGVsZW1lbnQgKDEpIG9yIGNvbnRlbnQgbm9kZXMgKHRleHQ6IDM7IGNkYXRhOiA0OyBlbnRpdHkgcmVmOiA1KSxcblx0XHRcdC8vICAgYnV0IG5vdCBieSBvdGhlcnMgKGNvbW1lbnQ6IDg7IHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb246IDc7IGV0Yy4pXG5cdFx0XHQvLyBub2RlVHlwZSA8IDYgd29ya3MgYmVjYXVzZSBhdHRyaWJ1dGVzICgyKSBkbyBub3QgYXBwZWFyIGFzIGNoaWxkcmVuXG5cdFx0XHRmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlIDwgNiApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHRcInBhcmVudFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAhRXhwci5wc2V1ZG9zW1wiZW1wdHlcIl0oIGVsZW0gKTtcblx0XHR9LFxuXG5cdFx0Ly8gRWxlbWVudC9pbnB1dCB0eXBlc1xuXHRcdFwiaGVhZGVyXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJoZWFkZXIudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRcImlucHV0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJpbnB1dHMudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRcImJ1dHRvblwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIG5hbWUgPT09IFwiaW5wdXRcIiAmJiBlbGVtLnR5cGUgPT09IFwiYnV0dG9uXCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIjtcblx0XHR9LFxuXG5cdFx0XCJ0ZXh0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIGF0dHI7XG5cdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCIgJiZcblx0XHRcdFx0ZWxlbS50eXBlID09PSBcInRleHRcIiAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFPDhcblx0XHRcdFx0Ly8gTmV3IEhUTUw1IGF0dHJpYnV0ZSB2YWx1ZXMgKGUuZy4sIFwic2VhcmNoXCIpIGFwcGVhciB3aXRoIGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCJcblx0XHRcdFx0KCAoYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKFwidHlwZVwiKSkgPT0gbnVsbCB8fCBhdHRyLnRvTG93ZXJDYXNlKCkgPT09IFwidGV4dFwiICk7XG5cdFx0fSxcblxuXHRcdC8vIFBvc2l0aW9uLWluLWNvbGxlY3Rpb25cblx0XHRcImZpcnN0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gWyAwIF07XG5cdFx0fSksXG5cblx0XHRcImxhc3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gWyBsZW5ndGggLSAxIF07XG5cdFx0fSksXG5cblx0XHRcImVxXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHJldHVybiBbIGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQgXTtcblx0XHR9KSxcblxuXHRcdFwiZXZlblwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9KSxcblxuXHRcdFwib2RkXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAxO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0pLFxuXG5cdFx0XCJsdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/XG5cdFx0XHRcdGFyZ3VtZW50ICsgbGVuZ3RoIDpcblx0XHRcdFx0YXJndW1lbnQgPiBsZW5ndGggP1xuXHRcdFx0XHRcdGxlbmd0aCA6XG5cdFx0XHRcdFx0YXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7IC0taSA+PSAwOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSksXG5cblx0XHRcImd0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpID0gYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDtcblx0XHRcdGZvciAoIDsgKytpIDwgbGVuZ3RoOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSlcblx0fVxufTtcblxuRXhwci5wc2V1ZG9zW1wibnRoXCJdID0gRXhwci5wc2V1ZG9zW1wiZXFcIl07XG5cbi8vIEFkZCBidXR0b24vaW5wdXQgdHlwZSBwc2V1ZG9zXG5mb3IgKCBpIGluIHsgcmFkaW86IHRydWUsIGNoZWNrYm94OiB0cnVlLCBmaWxlOiB0cnVlLCBwYXNzd29yZDogdHJ1ZSwgaW1hZ2U6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVJbnB1dFBzZXVkbyggaSApO1xufVxuZm9yICggaSBpbiB7IHN1Ym1pdDogdHJ1ZSwgcmVzZXQ6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVCdXR0b25Qc2V1ZG8oIGkgKTtcbn1cblxuLy8gRWFzeSBBUEkgZm9yIGNyZWF0aW5nIG5ldyBzZXRGaWx0ZXJzXG5mdW5jdGlvbiBzZXRGaWx0ZXJzKCkge31cbnNldEZpbHRlcnMucHJvdG90eXBlID0gRXhwci5maWx0ZXJzID0gRXhwci5wc2V1ZG9zO1xuRXhwci5zZXRGaWx0ZXJzID0gbmV3IHNldEZpbHRlcnMoKTtcblxudG9rZW5pemUgPSBTaXp6bGUudG9rZW5pemUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIHBhcnNlT25seSApIHtcblx0dmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsXG5cdFx0c29GYXIsIGdyb3VwcywgcHJlRmlsdGVycyxcblx0XHRjYWNoZWQgPSB0b2tlbkNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCBjYWNoZWQgKSB7XG5cdFx0cmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTtcblx0fVxuXG5cdHNvRmFyID0gc2VsZWN0b3I7XG5cdGdyb3VwcyA9IFtdO1xuXHRwcmVGaWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7XG5cblx0d2hpbGUgKCBzb0ZhciApIHtcblxuXHRcdC8vIENvbW1hIGFuZCBmaXJzdCBydW5cblx0XHRpZiAoICFtYXRjaGVkIHx8IChtYXRjaCA9IHJjb21tYS5leGVjKCBzb0ZhciApKSApIHtcblx0XHRcdGlmICggbWF0Y2ggKSB7XG5cdFx0XHRcdC8vIERvbid0IGNvbnN1bWUgdHJhaWxpbmcgY29tbWFzIGFzIHZhbGlkXG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoWzBdLmxlbmd0aCApIHx8IHNvRmFyO1xuXHRcdFx0fVxuXHRcdFx0Z3JvdXBzLnB1c2goICh0b2tlbnMgPSBbXSkgKTtcblx0XHR9XG5cblx0XHRtYXRjaGVkID0gZmFsc2U7XG5cblx0XHQvLyBDb21iaW5hdG9yc1xuXHRcdGlmICggKG1hdGNoID0gcmNvbWJpbmF0b3JzLmV4ZWMoIHNvRmFyICkpICkge1xuXHRcdFx0bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7XG5cdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXHRcdFx0XHQvLyBDYXN0IGRlc2NlbmRhbnQgY29tYmluYXRvcnMgdG8gc3BhY2Vcblx0XHRcdFx0dHlwZTogbWF0Y2hbMF0ucmVwbGFjZSggcnRyaW0sIFwiIFwiIClcblx0XHRcdH0pO1xuXHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHR9XG5cblx0XHQvLyBGaWx0ZXJzXG5cdFx0Zm9yICggdHlwZSBpbiBFeHByLmZpbHRlciApIHtcblx0XHRcdGlmICggKG1hdGNoID0gbWF0Y2hFeHByWyB0eXBlIF0uZXhlYyggc29GYXIgKSkgJiYgKCFwcmVGaWx0ZXJzWyB0eXBlIF0gfHxcblx0XHRcdFx0KG1hdGNoID0gcHJlRmlsdGVyc1sgdHlwZSBdKCBtYXRjaCApKSkgKSB7XG5cdFx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cdFx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0XHRtYXRjaGVzOiBtYXRjaFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoICFtYXRjaGVkICkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGludmFsaWQgZXhjZXNzXG5cdC8vIGlmIHdlJ3JlIGp1c3QgcGFyc2luZ1xuXHQvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJldHVybiB0b2tlbnNcblx0cmV0dXJuIHBhcnNlT25seSA/XG5cdFx0c29GYXIubGVuZ3RoIDpcblx0XHRzb0ZhciA/XG5cdFx0XHRTaXp6bGUuZXJyb3IoIHNlbGVjdG9yICkgOlxuXHRcdFx0Ly8gQ2FjaGUgdGhlIHRva2Vuc1xuXHRcdFx0dG9rZW5DYWNoZSggc2VsZWN0b3IsIGdyb3VwcyApLnNsaWNlKCAwICk7XG59O1xuXG5mdW5jdGlvbiB0b1NlbGVjdG9yKCB0b2tlbnMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdHNlbGVjdG9yID0gXCJcIjtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0c2VsZWN0b3IgKz0gdG9rZW5zW2ldLnZhbHVlO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rvcjtcbn1cblxuZnVuY3Rpb24gYWRkQ29tYmluYXRvciggbWF0Y2hlciwgY29tYmluYXRvciwgYmFzZSApIHtcblx0dmFyIGRpciA9IGNvbWJpbmF0b3IuZGlyLFxuXHRcdHNraXAgPSBjb21iaW5hdG9yLm5leHQsXG5cdFx0a2V5ID0gc2tpcCB8fCBkaXIsXG5cdFx0Y2hlY2tOb25FbGVtZW50cyA9IGJhc2UgJiYga2V5ID09PSBcInBhcmVudE5vZGVcIixcblx0XHRkb25lTmFtZSA9IGRvbmUrKztcblxuXHRyZXR1cm4gY29tYmluYXRvci5maXJzdCA/XG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdHJldHVybiBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gOlxuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBhbGwgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRzXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciBvbGRDYWNoZSwgdW5pcXVlQ2FjaGUsIG91dGVyQ2FjaGUsXG5cdFx0XHRcdG5ld0NhY2hlID0gWyBkaXJydW5zLCBkb25lTmFtZSBdO1xuXG5cdFx0XHQvLyBXZSBjYW4ndCBzZXQgYXJiaXRyYXJ5IGRhdGEgb24gWE1MIG5vZGVzLCBzbyB0aGV5IGRvbid0IGJlbmVmaXQgZnJvbSBjb21iaW5hdG9yIGNhY2hpbmdcblx0XHRcdGlmICggeG1sICkge1xuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IGVsZW1bIGV4cGFuZG8gXSB8fCAoZWxlbVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdIHx8IChvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdGlmICggc2tpcCAmJiBza2lwID09PSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdGVsZW0gPSBlbGVtWyBkaXIgXSB8fCBlbGVtO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICggKG9sZENhY2hlID0gdW5pcXVlQ2FjaGVbIGtleSBdKSAmJlxuXHRcdFx0XHRcdFx0XHRvbGRDYWNoZVsgMCBdID09PSBkaXJydW5zICYmIG9sZENhY2hlWyAxIF0gPT09IGRvbmVOYW1lICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFzc2lnbiB0byBuZXdDYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdHJldHVybiAobmV3Q2FjaGVbIDIgXSA9IG9sZENhY2hlWyAyIF0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gUmV1c2UgbmV3Y2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsga2V5IF0gPSBuZXdDYWNoZTtcblxuXHRcdFx0XHRcdFx0XHQvLyBBIG1hdGNoIG1lYW5zIHdlJ3JlIGRvbmU7IGEgZmFpbCBtZWFucyB3ZSBoYXZlIHRvIGtlZXAgY2hlY2tpbmdcblx0XHRcdFx0XHRcdFx0aWYgKCAobmV3Q2FjaGVbIDIgXSA9IG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG59XG5cbmZ1bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApIHtcblx0cmV0dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDEgP1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgaSA9IG1hdGNoZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoICFtYXRjaGVyc1tpXSggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IDpcblx0XHRtYXRjaGVyc1swXTtcbn1cblxuZnVuY3Rpb24gbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gY29udGV4dHMubGVuZ3RoO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0c1tpXSwgcmVzdWx0cyApO1xuXHR9XG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRlciwgY29udGV4dCwgeG1sICkge1xuXHR2YXIgZWxlbSxcblx0XHRuZXdVbm1hdGNoZWQgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsZW4gPSB1bm1hdGNoZWQubGVuZ3RoLFxuXHRcdG1hcHBlZCA9IG1hcCAhPSBudWxsO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkge1xuXHRcdFx0aWYgKCAhZmlsdGVyIHx8IGZpbHRlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdG5ld1VubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdGlmICggbWFwcGVkICkge1xuXHRcdFx0XHRcdG1hcC5wdXNoKCBpICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbmV3VW5tYXRjaGVkO1xufVxuXG5mdW5jdGlvbiBzZXRNYXRjaGVyKCBwcmVGaWx0ZXIsIHNlbGVjdG9yLCBtYXRjaGVyLCBwb3N0RmlsdGVyLCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKSB7XG5cdGlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZpbHRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaWx0ZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmlsdGVyICk7XG5cdH1cblx0aWYgKCBwb3N0RmluZGVyICYmICFwb3N0RmluZGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbmRlciA9IHNldE1hdGNoZXIoIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApO1xuXHR9XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIHJlc3VsdHMsIGNvbnRleHQsIHhtbCApIHtcblx0XHR2YXIgdGVtcCwgaSwgZWxlbSxcblx0XHRcdHByZU1hcCA9IFtdLFxuXHRcdFx0cG9zdE1hcCA9IFtdLFxuXHRcdFx0cHJlZXhpc3RpbmcgPSByZXN1bHRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gR2V0IGluaXRpYWwgZWxlbWVudHMgZnJvbSBzZWVkIG9yIGNvbnRleHRcblx0XHRcdGVsZW1zID0gc2VlZCB8fCBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciB8fCBcIipcIiwgY29udGV4dC5ub2RlVHlwZSA/IFsgY29udGV4dCBdIDogY29udGV4dCwgW10gKSxcblxuXHRcdFx0Ly8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uXG5cdFx0XHRtYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID9cblx0XHRcdFx0Y29uZGVuc2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRlbGVtcyxcblxuXHRcdFx0bWF0Y2hlck91dCA9IG1hdGNoZXIgP1xuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlciBvciBwcmVleGlzdGluZyByZXN1bHRzLFxuXHRcdFx0XHRwb3N0RmluZGVyIHx8ICggc2VlZCA/IHByZUZpbHRlciA6IHByZWV4aXN0aW5nIHx8IHBvc3RGaWx0ZXIgKSA/XG5cblx0XHRcdFx0XHQvLyAuLi5pbnRlcm1lZGlhdGUgcHJvY2Vzc2luZyBpcyBuZWNlc3Nhcnlcblx0XHRcdFx0XHRbXSA6XG5cblx0XHRcdFx0XHQvLyAuLi5vdGhlcndpc2UgdXNlIHJlc3VsdHMgZGlyZWN0bHlcblx0XHRcdFx0XHRyZXN1bHRzIDpcblx0XHRcdFx0bWF0Y2hlckluO1xuXG5cdFx0Ly8gRmluZCBwcmltYXJ5IG1hdGNoZXNcblx0XHRpZiAoIG1hdGNoZXIgKSB7XG5cdFx0XHRtYXRjaGVyKCBtYXRjaGVySW4sIG1hdGNoZXJPdXQsIGNvbnRleHQsIHhtbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHBvc3RGaWx0ZXJcblx0XHRpZiAoIHBvc3RGaWx0ZXIgKSB7XG5cdFx0XHR0ZW1wID0gY29uZGVuc2UoIG1hdGNoZXJPdXQsIHBvc3RNYXAgKTtcblx0XHRcdHBvc3RGaWx0ZXIoIHRlbXAsIFtdLCBjb250ZXh0LCB4bWwgKTtcblxuXHRcdFx0Ly8gVW4tbWF0Y2ggZmFpbGluZyBlbGVtZW50cyBieSBtb3ZpbmcgdGhlbSBiYWNrIHRvIG1hdGNoZXJJblxuXHRcdFx0aSA9IHRlbXAubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggKGVsZW0gPSB0ZW1wW2ldKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyT3V0WyBwb3N0TWFwW2ldIF0gPSAhKG1hdGNoZXJJblsgcG9zdE1hcFtpXSBdID0gZWxlbSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgfHwgcHJlRmlsdGVyICkge1xuXHRcdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cdFx0XHRcdFx0Ly8gR2V0IHRoZSBmaW5hbCBtYXRjaGVyT3V0IGJ5IGNvbmRlbnNpbmcgdGhpcyBpbnRlcm1lZGlhdGUgaW50byBwb3N0RmluZGVyIGNvbnRleHRzXG5cdFx0XHRcdFx0dGVtcCA9IFtdO1xuXHRcdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKGVsZW0gPSBtYXRjaGVyT3V0W2ldKSApIHtcblx0XHRcdFx0XHRcdFx0Ly8gUmVzdG9yZSBtYXRjaGVySW4gc2luY2UgZWxlbSBpcyBub3QgeWV0IGEgZmluYWwgbWF0Y2hcblx0XHRcdFx0XHRcdFx0dGVtcC5wdXNoKCAobWF0Y2hlckluW2ldID0gZWxlbSkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgKG1hdGNoZXJPdXQgPSBbXSksIHRlbXAsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTW92ZSBtYXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJvbml6ZWRcblx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRpZiAoIChlbGVtID0gbWF0Y2hlck91dFtpXSkgJiZcblx0XHRcdFx0XHRcdCh0ZW1wID0gcG9zdEZpbmRlciA/IGluZGV4T2YoIHNlZWQsIGVsZW0gKSA6IHByZU1hcFtpXSkgPiAtMSApIHtcblxuXHRcdFx0XHRcdFx0c2VlZFt0ZW1wXSA9ICEocmVzdWx0c1t0ZW1wXSA9IGVsZW0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gQWRkIGVsZW1lbnRzIHRvIHJlc3VsdHMsIHRocm91Z2ggcG9zdEZpbmRlciBpZiBkZWZpbmVkXG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXJPdXQgPSBjb25kZW5zZShcblx0XHRcdFx0bWF0Y2hlck91dCA9PT0gcmVzdWx0cyA/XG5cdFx0XHRcdFx0bWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVyT3V0Lmxlbmd0aCApIDpcblx0XHRcdFx0XHRtYXRjaGVyT3V0XG5cdFx0XHQpO1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXHRcdFx0XHRwb3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zICkge1xuXHR2YXIgY2hlY2tDb250ZXh0LCBtYXRjaGVyLCBqLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0bGVhZGluZ1JlbGF0aXZlID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWzBdLnR5cGUgXSxcblx0XHRpbXBsaWNpdFJlbGF0aXZlID0gbGVhZGluZ1JlbGF0aXZlIHx8IEV4cHIucmVsYXRpdmVbXCIgXCJdLFxuXHRcdGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCxcblxuXHRcdC8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRoYXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpXG5cdFx0bWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0O1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaEFueUNvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBpbmRleE9mKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xO1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaGVycyA9IFsgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciByZXQgPSAoICFsZWFkaW5nUmVsYXRpdmUgJiYgKCB4bWwgfHwgY29udGV4dCAhPT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKFxuXHRcdFx0XHQoY2hlY2tDb250ZXh0ID0gY29udGV4dCkubm9kZVR5cGUgP1xuXHRcdFx0XHRcdG1hdGNoQ29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRcdG1hdGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgKTtcblx0XHRcdC8vIEF2b2lkIGhhbmdpbmcgb250byBlbGVtZW50IChpc3N1ZSAjMjk5KVxuXHRcdFx0Y2hlY2tDb250ZXh0ID0gbnVsbDtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fSBdO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKG1hdGNoZXIgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbaV0udHlwZSBdKSApIHtcblx0XHRcdG1hdGNoZXJzID0gWyBhZGRDb21iaW5hdG9yKGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyKSBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyID0gRXhwci5maWx0ZXJbIHRva2Vuc1tpXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1tpXS5tYXRjaGVzICk7XG5cblx0XHRcdC8vIFJldHVybiBzcGVjaWFsIHVwb24gc2VlaW5nIGEgcG9zaXRpb25hbCBtYXRjaGVyXG5cdFx0XHRpZiAoIG1hdGNoZXJbIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0Ly8gRmluZCB0aGUgbmV4dCByZWxhdGl2ZSBvcGVyYXRvciAoaWYgYW55KSBmb3IgcHJvcGVyIGhhbmRsaW5nXG5cdFx0XHRcdGogPSArK2k7XG5cdFx0XHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0XHRcdGlmICggRXhwci5yZWxhdGl2ZVsgdG9rZW5zW2pdLnR5cGUgXSApIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc2V0TWF0Y2hlcihcblx0XHRcdFx0XHRpID4gMSAmJiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSxcblx0XHRcdFx0XHRpID4gMSAmJiB0b1NlbGVjdG9yKFxuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlIHByZWNlZGluZyB0b2tlbiB3YXMgYSBkZXNjZW5kYW50IGNvbWJpbmF0b3IsIGluc2VydCBhbiBpbXBsaWNpdCBhbnktZWxlbWVudCBgKmBcblx0XHRcdFx0XHRcdHRva2Vucy5zbGljZSggMCwgaSAtIDEgKS5jb25jYXQoeyB2YWx1ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUgPT09IFwiIFwiID8gXCIqXCIgOiBcIlwiIH0pXG5cdFx0XHRcdFx0KS5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICksXG5cdFx0XHRcdFx0bWF0Y2hlcixcblx0XHRcdFx0XHRpIDwgaiAmJiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zLnNsaWNlKCBpLCBqICkgKSxcblx0XHRcdFx0XHRqIDwgbGVuICYmIG1hdGNoZXJGcm9tVG9rZW5zKCAodG9rZW5zID0gdG9rZW5zLnNsaWNlKCBqICkpICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlcnMucHVzaCggbWF0Y2hlciApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkge1xuXHR2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdGJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdHN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9uKCBzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIG91dGVybW9zdCApIHtcblx0XHRcdHZhciBlbGVtLCBqLCBtYXRjaGVyLFxuXHRcdFx0XHRtYXRjaGVkQ291bnQgPSAwLFxuXHRcdFx0XHRpID0gXCIwXCIsXG5cdFx0XHRcdHVubWF0Y2hlZCA9IHNlZWQgJiYgW10sXG5cdFx0XHRcdHNldE1hdGNoZWQgPSBbXSxcblx0XHRcdFx0Y29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsXG5cdFx0XHRcdC8vIFdlIG11c3QgYWx3YXlzIGhhdmUgZWl0aGVyIHNlZWQgZWxlbWVudHMgb3Igb3V0ZXJtb3N0IGNvbnRleHRcblx0XHRcdFx0ZWxlbXMgPSBzZWVkIHx8IGJ5RWxlbWVudCAmJiBFeHByLmZpbmRbXCJUQUdcIl0oIFwiKlwiLCBvdXRlcm1vc3QgKSxcblx0XHRcdFx0Ly8gVXNlIGludGVnZXIgZGlycnVucyBpZmYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNoZXJcblx0XHRcdFx0ZGlycnVuc1VuaXF1ZSA9IChkaXJydW5zICs9IGNvbnRleHRCYWNrdXAgPT0gbnVsbCA/IDEgOiBNYXRoLnJhbmRvbSgpIHx8IDAuMSksXG5cdFx0XHRcdGxlbiA9IGVsZW1zLmxlbmd0aDtcblxuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ID09PSBkb2N1bWVudCB8fCBjb250ZXh0IHx8IG91dGVybW9zdDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHNcblx0XHRcdC8vIFN1cHBvcnQ6IElFPDksIFNhZmFyaVxuXHRcdFx0Ly8gVG9sZXJhdGUgTm9kZUxpc3QgcHJvcGVydGllcyAoSUU6IFwibGVuZ3RoXCI7IFNhZmFyaTogPG51bWJlcj4pIG1hdGNoaW5nIGVsZW1lbnRzIGJ5IGlkXG5cdFx0XHRmb3IgKCA7IGkgIT09IGxlbiAmJiAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggYnlFbGVtZW50ICYmIGVsZW0gKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0aWYgKCAhY29udGV4dCAmJiBlbGVtLm93bmVyRG9jdW1lbnQgIT09IGRvY3VtZW50ICkge1xuXHRcdFx0XHRcdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0XHRcdFx0XHRcdHhtbCA9ICFkb2N1bWVudElzSFRNTDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0d2hpbGUgKCAobWF0Y2hlciA9IGVsZW1lbnRNYXRjaGVyc1tqKytdKSApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCB8fCBkb2N1bWVudCwgeG1sKSApIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFRyYWNrIHVubWF0Y2hlZCBlbGVtZW50cyBmb3Igc2V0IGZpbHRlcnNcblx0XHRcdFx0aWYgKCBieVNldCApIHtcblx0XHRcdFx0XHQvLyBUaGV5IHdpbGwgaGF2ZSBnb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIG1hdGNoZXJzXG5cdFx0XHRcdFx0aWYgKCAoZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0pICkge1xuXHRcdFx0XHRcdFx0bWF0Y2hlZENvdW50LS07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gTGVuZ3RoZW4gdGhlIGFycmF5IGZvciBldmVyeSBlbGVtZW50LCBtYXRjaGVkIG9yIG5vdFxuXHRcdFx0XHRcdGlmICggc2VlZCApIHtcblx0XHRcdFx0XHRcdHVubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIGBpYCBpcyBub3cgdGhlIGNvdW50IG9mIGVsZW1lbnRzIHZpc2l0ZWQgYWJvdmUsIGFuZCBhZGRpbmcgaXQgdG8gYG1hdGNoZWRDb3VudGBcblx0XHRcdC8vIG1ha2VzIHRoZSBsYXR0ZXIgbm9ubmVnYXRpdmUuXG5cdFx0XHRtYXRjaGVkQ291bnQgKz0gaTtcblxuXHRcdFx0Ly8gQXBwbHkgc2V0IGZpbHRlcnMgdG8gdW5tYXRjaGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBOT1RFOiBUaGlzIGNhbiBiZSBza2lwcGVkIGlmIHRoZXJlIGFyZSBubyB1bm1hdGNoZWQgZWxlbWVudHMgKGkuZS4sIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBlcXVhbHMgYGlgKSwgdW5sZXNzIHdlIGRpZG4ndCB2aXNpdCBfYW55XyBlbGVtZW50cyBpbiB0aGUgYWJvdmUgbG9vcCBiZWNhdXNlIHdlIGhhdmVcblx0XHRcdC8vIG5vIGVsZW1lbnQgbWF0Y2hlcnMgYW5kIG5vIHNlZWQuXG5cdFx0XHQvLyBJbmNyZW1lbnRpbmcgYW4gaW5pdGlhbGx5LXN0cmluZyBcIjBcIiBgaWAgYWxsb3dzIGBpYCB0byByZW1haW4gYSBzdHJpbmcgb25seSBpbiB0aGF0XG5cdFx0XHQvLyBjYXNlLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBhIFwiMDBcIiBgbWF0Y2hlZENvdW50YCB0aGF0IGRpZmZlcnMgZnJvbSBgaWAgYnV0IGlzIGFsc29cblx0XHRcdC8vIG51bWVyaWNhbGx5IHplcm8uXG5cdFx0XHRpZiAoIGJ5U2V0ICYmIGkgIT09IG1hdGNoZWRDb3VudCApIHtcblx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdHdoaWxlICggKG1hdGNoZXIgPSBzZXRNYXRjaGVyc1tqKytdKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyKCB1bm1hdGNoZWQsIHNldE1hdGNoZWQsIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0XHRcdC8vIFJlaW50ZWdyYXRlIGVsZW1lbnQgbWF0Y2hlcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIHNvcnRpbmdcblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRDb3VudCA+IDAgKSB7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCAhKHVubWF0Y2hlZFtpXSB8fCBzZXRNYXRjaGVkW2ldKSApIHtcblx0XHRcdFx0XHRcdFx0XHRzZXRNYXRjaGVkW2ldID0gcG9wLmNhbGwoIHJlc3VsdHMgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIERpc2NhcmQgaW5kZXggcGxhY2Vob2xkZXIgdmFsdWVzIHRvIGdldCBvbmx5IGFjdHVhbCBtYXRjaGVzXG5cdFx0XHRcdFx0c2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVkICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBZGQgbWF0Y2hlcyB0byByZXN1bHRzXG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNldE1hdGNoZWQgKTtcblxuXHRcdFx0XHQvLyBTZWVkbGVzcyBzZXQgbWF0Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVsYXRlIHNvcnRpbmdcblx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgJiYgIXNlZWQgJiYgc2V0TWF0Y2hlZC5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0KCBtYXRjaGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7XG5cblx0XHRcdFx0XHRTaXp6bGUudW5pcXVlU29ydCggcmVzdWx0cyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIE92ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBnbG9iYWxzIGJ5IG5lc3RlZCBtYXRjaGVyc1xuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dEJhY2t1cDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVubWF0Y2hlZDtcblx0XHR9O1xuXG5cdHJldHVybiBieVNldCA/XG5cdFx0bWFya0Z1bmN0aW9uKCBzdXBlck1hdGNoZXIgKSA6XG5cdFx0c3VwZXJNYXRjaGVyO1xufVxuXG5jb21waWxlID0gU2l6emxlLmNvbXBpbGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIG1hdGNoIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkge1xuXHR2YXIgaSxcblx0XHRzZXRNYXRjaGVycyA9IFtdLFxuXHRcdGVsZW1lbnRNYXRjaGVycyA9IFtdLFxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoICFjYWNoZWQgKSB7XG5cdFx0Ly8gR2VuZXJhdGUgYSBmdW5jdGlvbiBvZiByZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFjaCBlbGVtZW50XG5cdFx0aWYgKCAhbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaCA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdH1cblx0XHRpID0gbWF0Y2gubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0Y2FjaGVkID0gbWF0Y2hlckZyb21Ub2tlbnMoIG1hdGNoW2ldICk7XG5cdFx0XHRpZiAoIGNhY2hlZFsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRzZXRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWNoZSB0aGUgY29tcGlsZWQgZnVuY3Rpb25cblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlKCBzZWxlY3RvciwgbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkgKTtcblxuXHRcdC8vIFNhdmUgc2VsZWN0b3IgYW5kIHRva2VuaXphdGlvblxuXHRcdGNhY2hlZC5zZWxlY3RvciA9IHNlbGVjdG9yO1xuXHR9XG5cdHJldHVybiBjYWNoZWQ7XG59O1xuXG4vKipcbiAqIEEgbG93LWxldmVsIHNlbGVjdGlvbiBmdW5jdGlvbiB0aGF0IHdvcmtzIHdpdGggU2l6emxlJ3MgY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBzZWxlY3RvciBBIHNlbGVjdG9yIG9yIGEgcHJlLWNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb24gYnVpbHQgd2l0aCBTaXp6bGUuY29tcGlsZVxuICogQHBhcmFtIHtFbGVtZW50fSBjb250ZXh0XG4gKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0c11cbiAqIEBwYXJhbSB7QXJyYXl9IFtzZWVkXSBBIHNldCBvZiBlbGVtZW50cyB0byBtYXRjaCBhZ2FpbnN0XG4gKi9cbnNlbGVjdCA9IFNpenpsZS5zZWxlY3QgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBpLCB0b2tlbnMsIHRva2VuLCB0eXBlLCBmaW5kLFxuXHRcdGNvbXBpbGVkID0gdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgc2VsZWN0b3IsXG5cdFx0bWF0Y2ggPSAhc2VlZCAmJiB0b2tlbml6ZSggKHNlbGVjdG9yID0gY29tcGlsZWQuc2VsZWN0b3IgfHwgc2VsZWN0b3IpICk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gVHJ5IHRvIG1pbmltaXplIG9wZXJhdGlvbnMgaWYgdGhlcmUgaXMgb25seSBvbmUgc2VsZWN0b3IgaW4gdGhlIGxpc3QgYW5kIG5vIHNlZWRcblx0Ly8gKHRoZSBsYXR0ZXIgb2Ygd2hpY2ggZ3VhcmFudGVlcyB1cyBjb250ZXh0KVxuXHRpZiAoIG1hdGNoLmxlbmd0aCA9PT0gMSApIHtcblxuXHRcdC8vIFJlZHVjZSBjb250ZXh0IGlmIHRoZSBsZWFkaW5nIGNvbXBvdW5kIHNlbGVjdG9yIGlzIGFuIElEXG5cdFx0dG9rZW5zID0gbWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCApO1xuXHRcdGlmICggdG9rZW5zLmxlbmd0aCA+IDIgJiYgKHRva2VuID0gdG9rZW5zWzBdKS50eXBlID09PSBcIklEXCIgJiZcblx0XHRcdFx0Y29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBkb2N1bWVudElzSFRNTCAmJiBFeHByLnJlbGF0aXZlWyB0b2tlbnNbMV0udHlwZSBdICkge1xuXG5cdFx0XHRjb250ZXh0ID0gKCBFeHByLmZpbmRbXCJJRFwiXSggdG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKHJ1bmVzY2FwZSwgZnVuZXNjYXBlKSwgY29udGV4dCApIHx8IFtdIClbMF07XG5cdFx0XHRpZiAoICFjb250ZXh0ICkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0Ly8gUHJlY29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBzdGlsbCB2ZXJpZnkgYW5jZXN0cnksIHNvIHN0ZXAgdXAgYSBsZXZlbFxuXHRcdFx0fSBlbHNlIGlmICggY29tcGlsZWQgKSB7XG5cdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoIHRva2Vucy5zaGlmdCgpLnZhbHVlLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZldGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmdcblx0XHRpID0gbWF0Y2hFeHByW1wibmVlZHNDb250ZXh0XCJdLnRlc3QoIHNlbGVjdG9yICkgPyAwIDogdG9rZW5zLmxlbmd0aDtcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdHRva2VuID0gdG9rZW5zW2ldO1xuXG5cdFx0XHQvLyBBYm9ydCBpZiB3ZSBoaXQgYSBjb21iaW5hdG9yXG5cdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbICh0eXBlID0gdG9rZW4udHlwZSkgXSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIChmaW5kID0gRXhwci5maW5kWyB0eXBlIF0pICkge1xuXHRcdFx0XHQvLyBTZWFyY2gsIGV4cGFuZGluZyBjb250ZXh0IGZvciBsZWFkaW5nIHNpYmxpbmcgY29tYmluYXRvcnNcblx0XHRcdFx0aWYgKCAoc2VlZCA9IGZpbmQoXG5cdFx0XHRcdFx0dG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLFxuXHRcdFx0XHRcdHJzaWJsaW5nLnRlc3QoIHRva2Vuc1swXS50eXBlICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcblx0XHRcdFx0KSkgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiBzZWVkIGlzIGVtcHR5IG9yIG5vIHRva2VucyByZW1haW4sIHdlIGNhbiByZXR1cm4gZWFybHlcblx0XHRcdFx0XHR0b2tlbnMuc3BsaWNlKCBpLCAxICk7XG5cdFx0XHRcdFx0c2VsZWN0b3IgPSBzZWVkLmxlbmd0aCAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKTtcblx0XHRcdFx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNlZWQgKTtcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ29tcGlsZSBhbmQgZXhlY3V0ZSBhIGZpbHRlcmluZyBmdW5jdGlvbiBpZiBvbmUgaXMgbm90IHByb3ZpZGVkXG5cdC8vIFByb3ZpZGUgYG1hdGNoYCB0byBhdm9pZCByZXRva2VuaXphdGlvbiBpZiB3ZSBtb2RpZmllZCB0aGUgc2VsZWN0b3IgYWJvdmVcblx0KCBjb21waWxlZCB8fCBjb21waWxlKCBzZWxlY3RvciwgbWF0Y2ggKSApKFxuXHRcdHNlZWQsXG5cdFx0Y29udGV4dCxcblx0XHQhZG9jdW1lbnRJc0hUTUwsXG5cdFx0cmVzdWx0cyxcblx0XHQhY29udGV4dCB8fCByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0XG5cdCk7XG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLy8gT25lLXRpbWUgYXNzaWdubWVudHNcblxuLy8gU29ydCBzdGFiaWxpdHlcbnN1cHBvcnQuc29ydFN0YWJsZSA9IGV4cGFuZG8uc3BsaXQoXCJcIikuc29ydCggc29ydE9yZGVyICkuam9pbihcIlwiKSA9PT0gZXhwYW5kbztcblxuLy8gU3VwcG9ydDogQ2hyb21lIDE0LTM1K1xuLy8gQWx3YXlzIGFzc3VtZSBkdXBsaWNhdGVzIGlmIHRoZXkgYXJlbid0IHBhc3NlZCB0byB0aGUgY29tcGFyaXNvbiBmdW5jdGlvblxuc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzID0gISFoYXNEdXBsaWNhdGU7XG5cbi8vIEluaXRpYWxpemUgYWdhaW5zdCB0aGUgZGVmYXVsdCBkb2N1bWVudFxuc2V0RG9jdW1lbnQoKTtcblxuLy8gU3VwcG9ydDogV2Via2l0PDUzNy4zMiAtIFNhZmFyaSA2LjAuMy9DaHJvbWUgMjUgKGZpeGVkIGluIENocm9tZSAyNylcbi8vIERldGFjaGVkIG5vZGVzIGNvbmZvdW5kaW5nbHkgZm9sbG93ICplYWNoIG90aGVyKlxuc3VwcG9ydC5zb3J0RGV0YWNoZWQgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHQvLyBTaG91bGQgcmV0dXJuIDEsIGJ1dCByZXR1cm5zIDQgKGZvbGxvd2luZylcblx0cmV0dXJuIGVsLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZmllbGRzZXRcIikgKSAmIDE7XG59KTtcblxuLy8gU3VwcG9ydDogSUU8OFxuLy8gUHJldmVudCBhdHRyaWJ1dGUvcHJvcGVydHkgXCJpbnRlcnBvbGF0aW9uXCJcbi8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzY0MjklMjhWUy44NSUyOS5hc3B4XG5pZiAoICFhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRlbC5pbm5lckhUTUwgPSBcIjxhIGhyZWY9JyMnPjwvYT5cIjtcblx0cmV0dXJuIGVsLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSA9PT0gXCIjXCIgO1xufSkgKSB7XG5cdGFkZEhhbmRsZSggXCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoXCIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpID09PSBcInR5cGVcIiA/IDEgOiAyICk7XG5cdFx0fVxuXHR9KTtcbn1cblxuLy8gU3VwcG9ydDogSUU8OVxuLy8gVXNlIGRlZmF1bHRWYWx1ZSBpbiBwbGFjZSBvZiBnZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKVxuaWYgKCAhc3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRlbC5pbm5lckhUTUwgPSBcIjxpbnB1dC8+XCI7XG5cdGVsLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCBcInZhbHVlXCIsIFwiXCIgKTtcblx0cmV0dXJuIGVsLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCBcInZhbHVlXCIgKSA9PT0gXCJcIjtcbn0pICkge1xuXHRhZGRIYW5kbGUoIFwidmFsdWVcIiwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdGlmICggIWlzWE1MICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGVmYXVsdFZhbHVlO1xuXHRcdH1cblx0fSk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBnZXRBdHRyaWJ1dGVOb2RlIHRvIGZldGNoIGJvb2xlYW5zIHdoZW4gZ2V0QXR0cmlidXRlIGxpZXNcbmlmICggIWFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdHJldHVybiBlbC5nZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSA9PSBudWxsO1xufSkgKSB7XG5cdGFkZEhhbmRsZSggYm9vbGVhbnMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgdmFsO1xuXHRcdGlmICggIWlzWE1MICkge1xuXHRcdFx0cmV0dXJuIGVsZW1bIG5hbWUgXSA9PT0gdHJ1ZSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6XG5cdFx0XHRcdFx0KHZhbCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xuXHRcdH1cblx0fSk7XG59XG5cbnJldHVybiBTaXp6bGU7XG5cbn0pKCB3aW5kb3cgKTtcblxuXG5cbmpRdWVyeS5maW5kID0gU2l6emxlO1xualF1ZXJ5LmV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzO1xuXG4vLyBEZXByZWNhdGVkXG5qUXVlcnkuZXhwclsgXCI6XCIgXSA9IGpRdWVyeS5leHByLnBzZXVkb3M7XG5qUXVlcnkudW5pcXVlU29ydCA9IGpRdWVyeS51bmlxdWUgPSBTaXp6bGUudW5pcXVlU29ydDtcbmpRdWVyeS50ZXh0ID0gU2l6emxlLmdldFRleHQ7XG5qUXVlcnkuaXNYTUxEb2MgPSBTaXp6bGUuaXNYTUw7XG5qUXVlcnkuY29udGFpbnMgPSBTaXp6bGUuY29udGFpbnM7XG5qUXVlcnkuZXNjYXBlU2VsZWN0b3IgPSBTaXp6bGUuZXNjYXBlO1xuXG5cblxuXG52YXIgZGlyID0gZnVuY3Rpb24oIGVsZW0sIGRpciwgdW50aWwgKSB7XG5cdHZhciBtYXRjaGVkID0gW10sXG5cdFx0dHJ1bmNhdGUgPSB1bnRpbCAhPT0gdW5kZWZpbmVkO1xuXG5cdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSAmJiBlbGVtLm5vZGVUeXBlICE9PSA5ICkge1xuXHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGlmICggdHJ1bmNhdGUgJiYgalF1ZXJ5KCBlbGVtICkuaXMoIHVudGlsICkgKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgc2libGluZ3MgPSBmdW5jdGlvbiggbiwgZWxlbSApIHtcblx0dmFyIG1hdGNoZWQgPSBbXTtcblxuXHRmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkge1xuXHRcdGlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtICkge1xuXHRcdFx0bWF0Y2hlZC5wdXNoKCBuICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1hdGNoZWQ7XG59O1xuXG5cbnZhciBybmVlZHNDb250ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0O1xuXG5cblxuZnVuY3Rpb24gbm9kZU5hbWUoIGVsZW0sIG5hbWUgKSB7XG5cbiAgcmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbn07XG52YXIgcnNpbmdsZVRhZyA9ICggL148KFthLXpdW15cXC9cXDA+OlxceDIwXFx0XFxyXFxuXFxmXSopW1xceDIwXFx0XFxyXFxuXFxmXSpcXC8/Pig/OjxcXC9cXDE+fCkkL2kgKTtcblxuXG5cbi8vIEltcGxlbWVudCB0aGUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90XG5mdW5jdGlvbiB3aW5ub3coIGVsZW1lbnRzLCBxdWFsaWZpZXIsIG5vdCApIHtcblx0aWYgKCBpc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiAhIXF1YWxpZmllci5jYWxsKCBlbGVtLCBpLCBlbGVtICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBTaW5nbGUgZWxlbWVudFxuXHRpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGVsZW0gPT09IHF1YWxpZmllciApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gQXJyYXlsaWtlIG9mIGVsZW1lbnRzIChqUXVlcnksIGFyZ3VtZW50cywgQXJyYXkpXG5cdGlmICggdHlwZW9mIHF1YWxpZmllciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGluZGV4T2YuY2FsbCggcXVhbGlmaWVyLCBlbGVtICkgPiAtMSApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gRmlsdGVyZWQgZGlyZWN0bHkgZm9yIGJvdGggc2ltcGxlIGFuZCBjb21wbGV4IHNlbGVjdG9yc1xuXHRyZXR1cm4galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBlbGVtZW50cywgbm90ICk7XG59XG5cbmpRdWVyeS5maWx0ZXIgPSBmdW5jdGlvbiggZXhwciwgZWxlbXMsIG5vdCApIHtcblx0dmFyIGVsZW0gPSBlbGVtc1sgMCBdO1xuXG5cdGlmICggbm90ICkge1xuXHRcdGV4cHIgPSBcIjpub3QoXCIgKyBleHByICsgXCIpXCI7XG5cdH1cblxuXHRpZiAoIGVsZW1zLmxlbmd0aCA9PT0gMSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGVsZW0sIGV4cHIgKSA/IFsgZWxlbSBdIDogW107XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlcyggZXhwciwgalF1ZXJ5LmdyZXAoIGVsZW1zLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTtcblx0fSApICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgaSwgcmV0LFxuXHRcdFx0bGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRzZWxmID0gdGhpcztcblxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkoIHNlbGVjdG9yICkuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlzICkgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gKSApO1xuXHRcdH1cblxuXHRcdHJldCA9IHRoaXMucHVzaFN0YWNrKCBbXSApO1xuXG5cdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGpRdWVyeS5maW5kKCBzZWxlY3Rvciwgc2VsZlsgaSBdLCByZXQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbGVuID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCByZXQgKSA6IHJldDtcblx0fSxcblx0ZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCBmYWxzZSApICk7XG5cdH0sXG5cdG5vdDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgdHJ1ZSApICk7XG5cdH0sXG5cdGlzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuICEhd2lubm93KFxuXHRcdFx0dGhpcyxcblxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIHBvc2l0aW9uYWwvcmVsYXRpdmUgc2VsZWN0b3IsIGNoZWNrIG1lbWJlcnNoaXAgaW4gdGhlIHJldHVybmVkIHNldFxuXHRcdFx0Ly8gc28gJChcInA6Zmlyc3RcIikuaXMoXCJwOmxhc3RcIikgd29uJ3QgcmV0dXJuIHRydWUgZm9yIGEgZG9jIHdpdGggdHdvIFwicFwiLlxuXHRcdFx0dHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICYmIHJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSA/XG5cdFx0XHRcdGpRdWVyeSggc2VsZWN0b3IgKSA6XG5cdFx0XHRcdHNlbGVjdG9yIHx8IFtdLFxuXHRcdFx0ZmFsc2Vcblx0XHQpLmxlbmd0aDtcblx0fVxufSApO1xuXG5cbi8vIEluaXRpYWxpemUgYSBqUXVlcnkgb2JqZWN0XG5cblxuLy8gQSBjZW50cmFsIHJlZmVyZW5jZSB0byB0aGUgcm9vdCBqUXVlcnkoZG9jdW1lbnQpXG52YXIgcm9vdGpRdWVyeSxcblxuXHQvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhUTUwgc3RyaW5nc1xuXHQvLyBQcmlvcml0aXplICNpZCBvdmVyIDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAoIzk1MjEpXG5cdC8vIFN0cmljdCBIVE1MIHJlY29nbml0aW9uICgjMTEyOTA6IG11c3Qgc3RhcnQgd2l0aCA8KVxuXHQvLyBTaG9ydGN1dCBzaW1wbGUgI2lkIGNhc2UgZm9yIHNwZWVkXG5cdHJxdWlja0V4cHIgPSAvXig/OlxccyooPFtcXHdcXFddKz4pW14+XSp8IyhbXFx3LV0rKSkkLyxcblxuXHRpbml0ID0galF1ZXJ5LmZuLmluaXQgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJvb3QgKSB7XG5cdFx0dmFyIG1hdGNoLCBlbGVtO1xuXG5cdFx0Ly8gSEFORExFOiAkKFwiXCIpLCAkKG51bGwpLCAkKHVuZGVmaW5lZCksICQoZmFsc2UpXG5cdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHQvLyBNZXRob2QgaW5pdCgpIGFjY2VwdHMgYW4gYWx0ZXJuYXRlIHJvb3RqUXVlcnlcblx0XHQvLyBzbyBtaWdyYXRlIGNhbiBzdXBwb3J0IGpRdWVyeS5zdWIgKGdoLTIxMDEpXG5cdFx0cm9vdCA9IHJvb3QgfHwgcm9vdGpRdWVyeTtcblxuXHRcdC8vIEhhbmRsZSBIVE1MIHN0cmluZ3Ncblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGlmICggc2VsZWN0b3JbIDAgXSA9PT0gXCI8XCIgJiZcblx0XHRcdFx0c2VsZWN0b3JbIHNlbGVjdG9yLmxlbmd0aCAtIDEgXSA9PT0gXCI+XCIgJiZcblx0XHRcdFx0c2VsZWN0b3IubGVuZ3RoID49IDMgKSB7XG5cblx0XHRcdFx0Ly8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0aCA8PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2tcblx0XHRcdFx0bWF0Y2ggPSBbIG51bGwsIHNlbGVjdG9yLCBudWxsIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYXRjaCBodG1sIG9yIG1ha2Ugc3VyZSBubyBjb250ZXh0IGlzIHNwZWNpZmllZCBmb3IgI2lkXG5cdFx0XHRpZiAoIG1hdGNoICYmICggbWF0Y2hbIDEgXSB8fCAhY29udGV4dCApICkge1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJChodG1sKSAtPiAkKGFycmF5KVxuXHRcdFx0XHRpZiAoIG1hdGNoWyAxIF0gKSB7XG5cdFx0XHRcdFx0Y29udGV4dCA9IGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgPyBjb250ZXh0WyAwIF0gOiBjb250ZXh0O1xuXG5cdFx0XHRcdFx0Ly8gT3B0aW9uIHRvIHJ1biBzY3JpcHRzIGlzIHRydWUgZm9yIGJhY2stY29tcGF0XG5cdFx0XHRcdFx0Ly8gSW50ZW50aW9uYWxseSBsZXQgdGhlIGVycm9yIGJlIHRocm93biBpZiBwYXJzZUhUTUwgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMsIGpRdWVyeS5wYXJzZUhUTUwoXG5cdFx0XHRcdFx0XHRtYXRjaFsgMSBdLFxuXHRcdFx0XHRcdFx0Y29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBkb2N1bWVudCxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpICk7XG5cblx0XHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCwgcHJvcHMpXG5cdFx0XHRcdFx0aWYgKCByc2luZ2xlVGFnLnRlc3QoIG1hdGNoWyAxIF0gKSAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29udGV4dCApICkge1xuXHRcdFx0XHRcdFx0Zm9yICggbWF0Y2ggaW4gY29udGV4dCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBQcm9wZXJ0aWVzIG9mIGNvbnRleHQgYXJlIGNhbGxlZCBhcyBtZXRob2RzIGlmIHBvc3NpYmxlXG5cdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggdGhpc1sgbWF0Y2ggXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXNbIG1hdGNoIF0oIGNvbnRleHRbIG1hdGNoIF0gKTtcblxuXHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgb3RoZXJ3aXNlIHNldCBhcyBhdHRyaWJ1dGVzXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hdHRyKCBtYXRjaCwgY29udGV4dFsgbWF0Y2ggXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKCNpZClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWyAyIF0gKTtcblxuXHRcdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSW5qZWN0IHRoZSBlbGVtZW50IGRpcmVjdGx5IGludG8gdGhlIGpRdWVyeSBvYmplY3Rcblx0XHRcdFx0XHRcdHRoaXNbIDAgXSA9IGVsZW07XG5cdFx0XHRcdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCAkKC4uLikpXG5cdFx0XHR9IGVsc2UgaWYgKCAhY29udGV4dCB8fCBjb250ZXh0LmpxdWVyeSApIHtcblx0XHRcdFx0cmV0dXJuICggY29udGV4dCB8fCByb290ICkuZmluZCggc2VsZWN0b3IgKTtcblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsIGNvbnRleHQpXG5cdFx0XHQvLyAod2hpY2ggaXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNvbnRleHQpLmZpbmQoZXhwcilcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdC8vIEhBTkRMRTogJChET01FbGVtZW50KVxuXHRcdH0gZWxzZSBpZiAoIHNlbGVjdG9yLm5vZGVUeXBlICkge1xuXHRcdFx0dGhpc1sgMCBdID0gc2VsZWN0b3I7XG5cdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdC8vIEhBTkRMRTogJChmdW5jdGlvbilcblx0XHQvLyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHlcblx0XHR9IGVsc2UgaWYgKCBpc0Z1bmN0aW9uKCBzZWxlY3RvciApICkge1xuXHRcdFx0cmV0dXJuIHJvb3QucmVhZHkgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHJvb3QucmVhZHkoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIEV4ZWN1dGUgaW1tZWRpYXRlbHkgaWYgcmVhZHkgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0c2VsZWN0b3IoIGpRdWVyeSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWFrZUFycmF5KCBzZWxlY3RvciwgdGhpcyApO1xuXHR9O1xuXG4vLyBHaXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRoZSBqUXVlcnkgcHJvdG90eXBlIGZvciBsYXRlciBpbnN0YW50aWF0aW9uXG5pbml0LnByb3RvdHlwZSA9IGpRdWVyeS5mbjtcblxuLy8gSW5pdGlhbGl6ZSBjZW50cmFsIHJlZmVyZW5jZVxucm9vdGpRdWVyeSA9IGpRdWVyeSggZG9jdW1lbnQgKTtcblxuXG52YXIgcnBhcmVudHNwcmV2ID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sXG5cblx0Ly8gTWV0aG9kcyBndWFyYW50ZWVkIHRvIHByb2R1Y2UgYSB1bmlxdWUgc2V0IHdoZW4gc3RhcnRpbmcgZnJvbSBhIHVuaXF1ZSBzZXRcblx0Z3VhcmFudGVlZFVuaXF1ZSA9IHtcblx0XHRjaGlsZHJlbjogdHJ1ZSxcblx0XHRjb250ZW50czogdHJ1ZSxcblx0XHRuZXh0OiB0cnVlLFxuXHRcdHByZXY6IHRydWVcblx0fTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRoYXM6IGZ1bmN0aW9uKCB0YXJnZXQgKSB7XG5cdFx0dmFyIHRhcmdldHMgPSBqUXVlcnkoIHRhcmdldCwgdGhpcyApLFxuXHRcdFx0bCA9IHRhcmdldHMubGVuZ3RoO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHRoaXMsIHRhcmdldHNbIGkgXSApICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRleHQgKSB7XG5cdFx0dmFyIGN1cixcblx0XHRcdGkgPSAwLFxuXHRcdFx0bCA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0bWF0Y2hlZCA9IFtdLFxuXHRcdFx0dGFyZ2V0cyA9IHR5cGVvZiBzZWxlY3RvcnMgIT09IFwic3RyaW5nXCIgJiYgalF1ZXJ5KCBzZWxlY3RvcnMgKTtcblxuXHRcdC8vIFBvc2l0aW9uYWwgc2VsZWN0b3JzIG5ldmVyIG1hdGNoLCBzaW5jZSB0aGVyZSdzIG5vIF9zZWxlY3Rpb25fIGNvbnRleHRcblx0XHRpZiAoICFybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9ycyApICkge1xuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRmb3IgKCBjdXIgPSB0aGlzWyBpIF07IGN1ciAmJiBjdXIgIT09IGNvbnRleHQ7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkge1xuXG5cdFx0XHRcdFx0Ly8gQWx3YXlzIHNraXAgZG9jdW1lbnQgZnJhZ21lbnRzXG5cdFx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPCAxMSAmJiAoIHRhcmdldHMgP1xuXHRcdFx0XHRcdFx0dGFyZ2V0cy5pbmRleCggY3VyICkgPiAtMSA6XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IHBhc3Mgbm9uLWVsZW1lbnRzIHRvIFNpenpsZVxuXHRcdFx0XHRcdFx0Y3VyLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggY3VyLCBzZWxlY3RvcnMgKSApICkge1xuXG5cdFx0XHRcdFx0XHRtYXRjaGVkLnB1c2goIGN1ciApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkLmxlbmd0aCA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApIDogbWF0Y2hlZCApO1xuXHR9LFxuXG5cdC8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRoaW4gdGhlIHNldFxuXHRpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBObyBhcmd1bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVudFxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCB0aGlzWyAwIF0gJiYgdGhpc1sgMCBdLnBhcmVudE5vZGUgKSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoIDogLTE7XG5cdFx0fVxuXG5cdFx0Ly8gSW5kZXggaW4gc2VsZWN0b3Jcblx0XHRpZiAoIHR5cGVvZiBlbGVtID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggalF1ZXJ5KCBlbGVtICksIHRoaXNbIDAgXSApO1xuXHRcdH1cblxuXHRcdC8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQgZWxlbWVudFxuXHRcdHJldHVybiBpbmRleE9mLmNhbGwoIHRoaXMsXG5cblx0XHRcdC8vIElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdXNlZFxuXHRcdFx0ZWxlbS5qcXVlcnkgPyBlbGVtWyAwIF0gOiBlbGVtXG5cdFx0KTtcblx0fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soXG5cdFx0XHRqUXVlcnkudW5pcXVlU29ydChcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgpLCBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0ICkgKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkQmFjazogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/XG5cdFx0XHR0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKCBzZWxlY3RvciApXG5cdFx0KTtcblx0fVxufSApO1xuXG5mdW5jdGlvbiBzaWJsaW5nKCBjdXIsIGRpciApIHtcblx0d2hpbGUgKCAoIGN1ciA9IGN1clsgZGlyIF0gKSAmJiBjdXIubm9kZVR5cGUgIT09IDEgKSB7fVxuXHRyZXR1cm4gY3VyO1xufVxuXG5qUXVlcnkuZWFjaCgge1xuXHRwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0cmV0dXJuIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDtcblx0fSxcblx0cGFyZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIgKTtcblx0fSxcblx0cGFyZW50c1VudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIsIHVudGlsICk7XG5cdH0sXG5cdG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXZBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRzaWJsaW5nczogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCAoIGVsZW0ucGFyZW50Tm9kZSB8fCB7fSApLmZpcnN0Q2hpbGQsIGVsZW0gKTtcblx0fSxcblx0Y2hpbGRyZW46IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggZWxlbS5maXJzdENoaWxkICk7XG5cdH0sXG5cdGNvbnRlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRpZiAoIHR5cGVvZiBlbGVtLmNvbnRlbnREb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLmNvbnRlbnREb2N1bWVudDtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seSwgaU9TIDcgb25seSwgQW5kcm9pZCBCcm93c2VyIDw9NC4zIG9ubHlcblx0XHQvLyBUcmVhdCB0aGUgdGVtcGxhdGUgZWxlbWVudCBhcyBhIHJlZ3VsYXIgb25lIGluIGJyb3dzZXJzIHRoYXRcblx0XHQvLyBkb24ndCBzdXBwb3J0IGl0LlxuXHRcdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGVtcGxhdGVcIiApICkge1xuXHRcdFx0ZWxlbSA9IGVsZW0uY29udGVudCB8fCBlbGVtO1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9kZXMgKTtcblx0fVxufSwgZnVuY3Rpb24oIG5hbWUsIGZuICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB1bnRpbCwgc2VsZWN0b3IgKSB7XG5cdFx0dmFyIG1hdGNoZWQgPSBqUXVlcnkubWFwKCB0aGlzLCBmbiwgdW50aWwgKTtcblxuXHRcdGlmICggbmFtZS5zbGljZSggLTUgKSAhPT0gXCJVbnRpbFwiICkge1xuXHRcdFx0c2VsZWN0b3IgPSB1bnRpbDtcblx0XHR9XG5cblx0XHRpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdG1hdGNoZWQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgbWF0Y2hlZCApO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5sZW5ndGggPiAxICkge1xuXG5cdFx0XHQvLyBSZW1vdmUgZHVwbGljYXRlc1xuXHRcdFx0aWYgKCAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFtZSBdICkge1xuXHRcdFx0XHRqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXZlcnNlIG9yZGVyIGZvciBwYXJlbnRzKiBhbmQgcHJldi1kZXJpdmF0aXZlc1xuXHRcdFx0aWYgKCBycGFyZW50c3ByZXYudGVzdCggbmFtZSApICkge1xuXHRcdFx0XHRtYXRjaGVkLnJldmVyc2UoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQgKTtcblx0fTtcbn0gKTtcbnZhciBybm90aHRtbHdoaXRlID0gKCAvW15cXHgyMFxcdFxcclxcblxcZl0rL2cgKTtcblxuXG5cbi8vIENvbnZlcnQgU3RyaW5nLWZvcm1hdHRlZCBvcHRpb25zIGludG8gT2JqZWN0LWZvcm1hdHRlZCBvbmVzXG5mdW5jdGlvbiBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkge1xuXHR2YXIgb2JqZWN0ID0ge307XG5cdGpRdWVyeS5lYWNoKCBvcHRpb25zLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10sIGZ1bmN0aW9uKCBfLCBmbGFnICkge1xuXHRcdG9iamVjdFsgZmxhZyBdID0gdHJ1ZTtcblx0fSApO1xuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG4vKlxuICogQ3JlYXRlIGEgY2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6XG4gKlxuICpcdG9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3dcbiAqXHRcdFx0dGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0aW9uIG9iamVjdFxuICpcbiAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxpa2UgYW4gZXZlbnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlXG4gKiBcImZpcmVkXCIgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogUG9zc2libGUgb3B0aW9uczpcbiAqXG4gKlx0b25jZTpcdFx0XHR3aWxsIGVuc3VyZSB0aGUgY2FsbGJhY2sgbGlzdCBjYW4gb25seSBiZSBmaXJlZCBvbmNlIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdG1lbW9yeTpcdFx0XHR3aWxsIGtlZXAgdHJhY2sgb2YgcHJldmlvdXMgdmFsdWVzIGFuZCB3aWxsIGNhbGwgYW55IGNhbGxiYWNrIGFkZGVkXG4gKlx0XHRcdFx0XHRhZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBmaXJlZCByaWdodCBhd2F5IHdpdGggdGhlIGxhdGVzdCBcIm1lbW9yaXplZFwiXG4gKlx0XHRcdFx0XHR2YWx1ZXMgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0dW5pcXVlOlx0XHRcdHdpbGwgZW5zdXJlIGEgY2FsbGJhY2sgY2FuIG9ubHkgYmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KVxuICpcbiAqXHRzdG9wT25GYWxzZTpcdGludGVycnVwdCBjYWxsaW5ncyB3aGVuIGEgY2FsbGJhY2sgcmV0dXJucyBmYWxzZVxuICpcbiAqL1xualF1ZXJ5LkNhbGxiYWNrcyA9IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXG5cdC8vIENvbnZlcnQgb3B0aW9ucyBmcm9tIFN0cmluZy1mb3JtYXR0ZWQgdG8gT2JqZWN0LWZvcm1hdHRlZCBpZiBuZWVkZWRcblx0Ly8gKHdlIGNoZWNrIGluIGNhY2hlIGZpcnN0KVxuXHRvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIgP1xuXHRcdGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSA6XG5cdFx0alF1ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMgKTtcblxuXHR2YXIgLy8gRmxhZyB0byBrbm93IGlmIGxpc3QgaXMgY3VycmVudGx5IGZpcmluZ1xuXHRcdGZpcmluZyxcblxuXHRcdC8vIExhc3QgZmlyZSB2YWx1ZSBmb3Igbm9uLWZvcmdldHRhYmxlIGxpc3RzXG5cdFx0bWVtb3J5LFxuXG5cdFx0Ly8gRmxhZyB0byBrbm93IGlmIGxpc3Qgd2FzIGFscmVhZHkgZmlyZWRcblx0XHRmaXJlZCxcblxuXHRcdC8vIEZsYWcgdG8gcHJldmVudCBmaXJpbmdcblx0XHRsb2NrZWQsXG5cblx0XHQvLyBBY3R1YWwgY2FsbGJhY2sgbGlzdFxuXHRcdGxpc3QgPSBbXSxcblxuXHRcdC8vIFF1ZXVlIG9mIGV4ZWN1dGlvbiBkYXRhIGZvciByZXBlYXRhYmxlIGxpc3RzXG5cdFx0cXVldWUgPSBbXSxcblxuXHRcdC8vIEluZGV4IG9mIGN1cnJlbnRseSBmaXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IGFkZC9yZW1vdmUgYXMgbmVlZGVkKVxuXHRcdGZpcmluZ0luZGV4ID0gLTEsXG5cblx0XHQvLyBGaXJlIGNhbGxiYWNrc1xuXHRcdGZpcmUgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5mb3JjZSBzaW5nbGUtZmlyaW5nXG5cdFx0XHRsb2NrZWQgPSBsb2NrZWQgfHwgb3B0aW9ucy5vbmNlO1xuXG5cdFx0XHQvLyBFeGVjdXRlIGNhbGxiYWNrcyBmb3IgYWxsIHBlbmRpbmcgZXhlY3V0aW9ucyxcblx0XHRcdC8vIHJlc3BlY3RpbmcgZmlyaW5nSW5kZXggb3ZlcnJpZGVzIGFuZCBydW50aW1lIGNoYW5nZXNcblx0XHRcdGZpcmVkID0gZmlyaW5nID0gdHJ1ZTtcblx0XHRcdGZvciAoIDsgcXVldWUubGVuZ3RoOyBmaXJpbmdJbmRleCA9IC0xICkge1xuXHRcdFx0XHRtZW1vcnkgPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0XHR3aGlsZSAoICsrZmlyaW5nSW5kZXggPCBsaXN0Lmxlbmd0aCApIHtcblxuXHRcdFx0XHRcdC8vIFJ1biBjYWxsYmFjayBhbmQgY2hlY2sgZm9yIGVhcmx5IHRlcm1pbmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBsaXN0WyBmaXJpbmdJbmRleCBdLmFwcGx5KCBtZW1vcnlbIDAgXSwgbWVtb3J5WyAxIF0gKSA9PT0gZmFsc2UgJiZcblx0XHRcdFx0XHRcdG9wdGlvbnMuc3RvcE9uRmFsc2UgKSB7XG5cblx0XHRcdFx0XHRcdC8vIEp1bXAgdG8gZW5kIGFuZCBmb3JnZXQgdGhlIGRhdGEgc28gLmFkZCBkb2Vzbid0IHJlLWZpcmVcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGg7XG5cdFx0XHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yZ2V0IHRoZSBkYXRhIGlmIHdlJ3JlIGRvbmUgd2l0aCBpdFxuXHRcdFx0aWYgKCAhb3B0aW9ucy5tZW1vcnkgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRmaXJpbmcgPSBmYWxzZTtcblxuXHRcdFx0Ly8gQ2xlYW4gdXAgaWYgd2UncmUgZG9uZSBmaXJpbmcgZm9yIGdvb2Rcblx0XHRcdGlmICggbG9ja2VkICkge1xuXG5cdFx0XHRcdC8vIEtlZXAgYW4gZW1wdHkgbGlzdCBpZiB3ZSBoYXZlIGRhdGEgZm9yIGZ1dHVyZSBhZGQgY2FsbHNcblx0XHRcdFx0aWYgKCBtZW1vcnkgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgdGhpcyBvYmplY3QgaXMgc3BlbnRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsaXN0ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBBY3R1YWwgQ2FsbGJhY2tzIG9iamVjdFxuXHRcdHNlbGYgPSB7XG5cblx0XHRcdC8vIEFkZCBhIGNhbGxiYWNrIG9yIGEgY29sbGVjdGlvbiBvZiBjYWxsYmFja3MgdG8gdGhlIGxpc3Rcblx0XHRcdGFkZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblxuXHRcdFx0XHRcdC8vIElmIHdlIGhhdmUgbWVtb3J5IGZyb20gYSBwYXN0IHJ1biwgd2Ugc2hvdWxkIGZpcmUgYWZ0ZXIgYWRkaW5nXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGggLSAxO1xuXHRcdFx0XHRcdFx0cXVldWUucHVzaCggbWVtb3J5ICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0KCBmdW5jdGlvbiBhZGQoIGFyZ3MgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggYXJncywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoICFvcHRpb25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGlzdC5wdXNoKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVuZ3RoICYmIHRvVHlwZSggYXJnICkgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBJbnNwZWN0IHJlY3Vyc2l2ZWx5XG5cdFx0XHRcdFx0XHRcdFx0YWRkKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdH0gKSggYXJndW1lbnRzICk7XG5cblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhIGNhbGxiYWNrIGZyb20gdGhlIGxpc3Rcblx0XHRcdHJlbW92ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0dmFyIGluZGV4O1xuXHRcdFx0XHRcdHdoaWxlICggKCBpbmRleCA9IGpRdWVyeS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0bGlzdC5zcGxpY2UoIGluZGV4LCAxICk7XG5cblx0XHRcdFx0XHRcdC8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlc1xuXHRcdFx0XHRcdFx0aWYgKCBpbmRleCA8PSBmaXJpbmdJbmRleCApIHtcblx0XHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXgtLTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDaGVjayBpZiBhIGdpdmVuIGNhbGxiYWNrIGlzIGluIHRoZSBsaXN0LlxuXHRcdFx0Ly8gSWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sIHJldHVybiB3aGV0aGVyIG9yIG5vdCBsaXN0IGhhcyBjYWxsYmFja3MgYXR0YWNoZWQuXG5cdFx0XHRoYXM6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0cmV0dXJuIGZuID9cblx0XHRcdFx0XHRqUXVlcnkuaW5BcnJheSggZm4sIGxpc3QgKSA+IC0xIDpcblx0XHRcdFx0XHRsaXN0Lmxlbmd0aCA+IDA7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBsaXN0XG5cdFx0XHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlIGFuZCAuYWRkXG5cdFx0XHQvLyBBYm9ydCBhbnkgY3VycmVudC9wZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdC8vIENsZWFyIGFsbCBjYWxsYmFja3MgYW5kIHZhbHVlc1xuXHRcdFx0ZGlzYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRkaXNhYmxlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhbGlzdDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmVcblx0XHRcdC8vIEFsc28gZGlzYWJsZSAuYWRkIHVubGVzcyB3ZSBoYXZlIG1lbW9yeSAoc2luY2UgaXQgd291bGQgaGF2ZSBubyBlZmZlY3QpXG5cdFx0XHQvLyBBYm9ydCBhbnkgcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHRsb2NrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0aWYgKCAhbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0bG9ja2VkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhbG9ja2VkO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGNvbnRleHQgYW5kIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZVdpdGg6IGZ1bmN0aW9uKCBjb250ZXh0LCBhcmdzICkge1xuXHRcdFx0XHRpZiAoICFsb2NrZWQgKSB7XG5cdFx0XHRcdFx0YXJncyA9IGFyZ3MgfHwgW107XG5cdFx0XHRcdFx0YXJncyA9IFsgY29udGV4dCwgYXJncy5zbGljZSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3MgXTtcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBhcmdzICk7XG5cdFx0XHRcdFx0aWYgKCAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzXG5cdFx0XHRmaXJlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0c2VsZi5maXJlV2l0aCggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiB0aGUgY2FsbGJhY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbGxlZCBhdCBsZWFzdCBvbmNlXG5cdFx0XHRmaXJlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWZpcmVkO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0cmV0dXJuIHNlbGY7XG59O1xuXG5cbmZ1bmN0aW9uIElkZW50aXR5KCB2ICkge1xuXHRyZXR1cm4gdjtcbn1cbmZ1bmN0aW9uIFRocm93ZXIoIGV4ICkge1xuXHR0aHJvdyBleDtcbn1cblxuZnVuY3Rpb24gYWRvcHRWYWx1ZSggdmFsdWUsIHJlc29sdmUsIHJlamVjdCwgbm9WYWx1ZSApIHtcblx0dmFyIG1ldGhvZDtcblxuXHR0cnkge1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIHByb21pc2UgYXNwZWN0IGZpcnN0IHRvIHByaXZpbGVnZSBzeW5jaHJvbm91cyBiZWhhdmlvclxuXHRcdGlmICggdmFsdWUgJiYgaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS5wcm9taXNlICkgKSApIHtcblx0XHRcdG1ldGhvZC5jYWxsKCB2YWx1ZSApLmRvbmUoIHJlc29sdmUgKS5mYWlsKCByZWplY3QgKTtcblxuXHRcdC8vIE90aGVyIHRoZW5hYmxlc1xuXHRcdH0gZWxzZSBpZiAoIHZhbHVlICYmIGlzRnVuY3Rpb24oICggbWV0aG9kID0gdmFsdWUudGhlbiApICkgKSB7XG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUsIHJlc29sdmUsIHJlamVjdCApO1xuXG5cdFx0Ly8gT3RoZXIgbm9uLXRoZW5hYmxlc1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIENvbnRyb2wgYHJlc29sdmVgIGFyZ3VtZW50cyBieSBsZXR0aW5nIEFycmF5I3NsaWNlIGNhc3QgYm9vbGVhbiBgbm9WYWx1ZWAgdG8gaW50ZWdlcjpcblx0XHRcdC8vICogZmFsc2U6IFsgdmFsdWUgXS5zbGljZSggMCApID0+IHJlc29sdmUoIHZhbHVlIClcblx0XHRcdC8vICogdHJ1ZTogWyB2YWx1ZSBdLnNsaWNlKCAxICkgPT4gcmVzb2x2ZSgpXG5cdFx0XHRyZXNvbHZlLmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXS5zbGljZSggbm9WYWx1ZSApICk7XG5cdFx0fVxuXG5cdC8vIEZvciBQcm9taXNlcy9BKywgY29udmVydCBleGNlcHRpb25zIGludG8gcmVqZWN0aW9uc1xuXHQvLyBTaW5jZSBqUXVlcnkud2hlbiBkb2Vzbid0IHVud3JhcCB0aGVuYWJsZXMsIHdlIGNhbiBza2lwIHRoZSBleHRyYSBjaGVja3MgYXBwZWFyaW5nIGluXG5cdC8vIERlZmVycmVkI3RoZW4gdG8gY29uZGl0aW9uYWxseSBzdXBwcmVzcyByZWplY3Rpb24uXG5cdH0gY2F0Y2ggKCB2YWx1ZSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIG9ubHlcblx0XHQvLyBTdHJpY3QgbW9kZSBmdW5jdGlvbnMgaW52b2tlZCB3aXRob3V0IC5jYWxsLy5hcHBseSBnZXQgZ2xvYmFsLW9iamVjdCBjb250ZXh0XG5cdFx0cmVqZWN0LmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXSApO1xuXHR9XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHREZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7XG5cdFx0dmFyIHR1cGxlcyA9IFtcblxuXHRcdFx0XHQvLyBhY3Rpb24sIGFkZCBsaXN0ZW5lciwgY2FsbGJhY2tzLFxuXHRcdFx0XHQvLyAuLi4gLnRoZW4gaGFuZGxlcnMsIGFyZ3VtZW50IGluZGV4LCBbZmluYWwgc3RhdGVdXG5cdFx0XHRcdFsgXCJub3RpZnlcIiwgXCJwcm9ncmVzc1wiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLCAyIF0sXG5cdFx0XHRcdFsgXCJyZXNvbHZlXCIsIFwiZG9uZVwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgMCwgXCJyZXNvbHZlZFwiIF0sXG5cdFx0XHRcdFsgXCJyZWplY3RcIiwgXCJmYWlsXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCAxLCBcInJlamVjdGVkXCIgXVxuXHRcdFx0XSxcblx0XHRcdHN0YXRlID0gXCJwZW5kaW5nXCIsXG5cdFx0XHRwcm9taXNlID0ge1xuXHRcdFx0XHRzdGF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRhbHdheXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGRlZmVycmVkLmRvbmUoIGFyZ3VtZW50cyApLmZhaWwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImNhdGNoXCI6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJvbWlzZS50aGVuKCBudWxsLCBmbiApO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEtlZXAgcGlwZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0cGlwZTogZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICovICkge1xuXHRcdFx0XHRcdHZhciBmbnMgPSBhcmd1bWVudHM7XG5cblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTWFwIHR1cGxlcyAocHJvZ3Jlc3MsIGRvbmUsIGZhaWwpIHRvIGFyZ3VtZW50cyAoZG9uZSwgZmFpbCwgcHJvZ3Jlc3MpXG5cdFx0XHRcdFx0XHRcdHZhciBmbiA9IGlzRnVuY3Rpb24oIGZuc1sgdHVwbGVbIDQgXSBdICkgJiYgZm5zWyB0dXBsZVsgNCBdIF07XG5cblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQucHJvZ3Jlc3MoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIubm90aWZ5IH0pXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLmRvbmUoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVzb2x2ZSB9KVxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5mYWlsKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlamVjdCB9KVxuXHRcdFx0XHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDEgXSBdKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQgPSBmbiAmJiBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCAmJiBpc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC5wcm9taXNlKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnByb2dyZXNzKCBuZXdEZWZlci5ub3RpZnkgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5mYWlsKCBuZXdEZWZlci5yZWplY3QgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXJbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmbiA/IFsgcmV0dXJuZWQgXSA6IGFyZ3VtZW50c1xuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdGZucyA9IG51bGw7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhlbjogZnVuY3Rpb24oIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBvblByb2dyZXNzICkge1xuXHRcdFx0XHRcdHZhciBtYXhEZXB0aCA9IDA7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gcmVzb2x2ZSggZGVwdGgsIGRlZmVycmVkLCBoYW5kbGVyLCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdGhhdCA9IHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0YXJncyA9IGFyZ3VtZW50cyxcblx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQsIHRoZW47XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4zXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01OVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIGRvdWJsZS1yZXNvbHV0aW9uIGF0dGVtcHRzXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoIDwgbWF4RGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQgPSBoYW5kbGVyLmFwcGx5KCB0aGF0LCBhcmdzICk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjFcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTQ4XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkID09PSBkZWZlcnJlZC5wcm9taXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoIFwiVGhlbmFibGUgc2VsZi1yZXNvbHV0aW9uXCIgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbnMgMi4zLjMuMSwgMy41XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01NFxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNzVcblx0XHRcdFx0XHRcdFx0XHRcdC8vIFJldHJpZXZlIGB0aGVuYCBvbmx5IG9uY2Vcblx0XHRcdFx0XHRcdFx0XHRcdHRoZW4gPSByZXR1cm5lZCAmJlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBjaGVjayBvYmplY3RzIGFuZCBmdW5jdGlvbnMgZm9yIHRoZW5hYmlsaXR5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggdHlwZW9mIHJldHVybmVkID09PSBcIm9iamVjdFwiIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHJldHVybmVkID09PSBcImZ1bmN0aW9uXCIgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC50aGVuO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYSByZXR1cm5lZCB0aGVuYWJsZVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGVuICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3BlY2lhbCBwcm9jZXNzb3JzIChub3RpZnkpIGp1c3Qgd2FpdCBmb3IgcmVzb2x1dGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWwgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gTm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGFsc28gaG9vayBpbnRvIHByb2dyZXNzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgZGlzcmVnYXJkIG9sZGVyIHJlc29sdXRpb24gdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4RGVwdGgrKztcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhbGwgb3RoZXIgcmV0dXJuZWQgdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggaGFuZGxlciAhPT0gSWRlbnRpdHkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyByZXR1cm5lZCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gUHJvY2VzcyB0aGUgdmFsdWUocylcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmYXVsdCBwcm9jZXNzIGlzIHJlc29sdmVcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCBzcGVjaWFsIHx8IGRlZmVycmVkLnJlc29sdmVXaXRoICkoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBub3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgY2F0Y2ggYW5kIHJlamVjdCBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcyA9IHNwZWNpYWwgP1xuXHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rKCBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLnN0YWNrVHJhY2UgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuNC4xXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBJZ25vcmUgcG9zdC1yZXNvbHV0aW9uIGV4Y2VwdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoICsgMSA+PSBtYXhEZXB0aCApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBzdWJzdGl0dXRlIGhhbmRsZXJzIHBhc3Mgb24gY29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGhhbmRsZXIgIT09IFRocm93ZXIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoYXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBbIGUgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggdGhhdCwgYXJncyApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuMVxuXHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01N1xuXHRcdFx0XHRcdFx0XHQvLyBSZS1yZXNvbHZlIHByb21pc2VzIGltbWVkaWF0ZWx5IHRvIGRvZGdlIGZhbHNlIHJlamVjdGlvbiBmcm9tXG5cdFx0XHRcdFx0XHRcdC8vIHN1YnNlcXVlbnQgZXJyb3JzXG5cdFx0XHRcdFx0XHRcdGlmICggZGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcygpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2FsbCBhbiBvcHRpb25hbCBob29rIHRvIHJlY29yZCB0aGUgc3RhY2ssIGluIGNhc2Ugb2YgZXhjZXB0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Ly8gc2luY2UgaXQncyBvdGhlcndpc2UgbG9zdCB3aGVuIGV4ZWN1dGlvbiBnb2VzIGFzeW5jXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5zdGFja1RyYWNlID0galF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggcHJvY2VzcyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcblxuXHRcdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblByb2dyZXNzICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25Qcm9ncmVzcyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eSxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlci5ub3RpZnlXaXRoXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDEgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uRnVsZmlsbGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25GdWxmaWxsZWQgOlxuXHRcdFx0XHRcdFx0XHRcdFx0SWRlbnRpdHlcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAyIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblJlamVjdGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25SZWplY3RlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRUaHJvd2VyXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBHZXQgYSBwcm9taXNlIGZvciB0aGlzIGRlZmVycmVkXG5cdFx0XHRcdC8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3Rcblx0XHRcdFx0cHJvbWlzZTogZnVuY3Rpb24oIG9iaiApIHtcblx0XHRcdFx0XHRyZXR1cm4gb2JqICE9IG51bGwgPyBqUXVlcnkuZXh0ZW5kKCBvYmosIHByb21pc2UgKSA6IHByb21pc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWZlcnJlZCA9IHt9O1xuXG5cdFx0Ly8gQWRkIGxpc3Qtc3BlY2lmaWMgbWV0aG9kc1xuXHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHtcblx0XHRcdHZhciBsaXN0ID0gdHVwbGVbIDIgXSxcblx0XHRcdFx0c3RhdGVTdHJpbmcgPSB0dXBsZVsgNSBdO1xuXG5cdFx0XHQvLyBwcm9taXNlLnByb2dyZXNzID0gbGlzdC5hZGRcblx0XHRcdC8vIHByb21pc2UuZG9uZSA9IGxpc3QuYWRkXG5cdFx0XHQvLyBwcm9taXNlLmZhaWwgPSBsaXN0LmFkZFxuXHRcdFx0cHJvbWlzZVsgdHVwbGVbIDEgXSBdID0gbGlzdC5hZGQ7XG5cblx0XHRcdC8vIEhhbmRsZSBzdGF0ZVxuXHRcdFx0aWYgKCBzdGF0ZVN0cmluZyApIHtcblx0XHRcdFx0bGlzdC5hZGQoXG5cdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIHN0YXRlID0gXCJyZXNvbHZlZFwiIChpLmUuLCBmdWxmaWxsZWQpXG5cdFx0XHRcdFx0XHQvLyBzdGF0ZSA9IFwicmVqZWN0ZWRcIlxuXHRcdFx0XHRcdFx0c3RhdGUgPSBzdGF0ZVN0cmluZztcblx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHR0dXBsZXNbIDMgLSBpIF1bIDIgXS5kaXNhYmxlLFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZGlzYWJsZVxuXHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5kaXNhYmxlXG5cdFx0XHRcdFx0dHVwbGVzWyAzIC0gaSBdWyAzIF0uZGlzYWJsZSxcblxuXHRcdFx0XHRcdC8vIHByb2dyZXNzX2NhbGxiYWNrcy5sb2NrXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDIgXS5sb2NrLFxuXG5cdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMubG9ja1xuXHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAzIF0ubG9ja1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5maXJlXG5cdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0bGlzdC5hZGQoIHR1cGxlWyAzIF0uZmlyZSApO1xuXG5cdFx0XHQvLyBkZWZlcnJlZC5ub3RpZnkgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQubm90aWZ5V2l0aCguLi4pIH1cblx0XHRcdC8vIGRlZmVycmVkLnJlc29sdmUgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVzb2x2ZVdpdGgoLi4uKSB9XG5cdFx0XHQvLyBkZWZlcnJlZC5yZWplY3QgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVqZWN0V2l0aCguLi4pIH1cblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKCB0aGlzID09PSBkZWZlcnJlZCA/IHVuZGVmaW5lZCA6IHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH07XG5cblx0XHRcdC8vIGRlZmVycmVkLm5vdGlmeVdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHQvLyBkZWZlcnJlZC5yZXNvbHZlV2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdC8vIGRlZmVycmVkLnJlamVjdFdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0gPSBsaXN0LmZpcmVXaXRoO1xuXHRcdH0gKTtcblxuXHRcdC8vIE1ha2UgdGhlIGRlZmVycmVkIGEgcHJvbWlzZVxuXHRcdHByb21pc2UucHJvbWlzZSggZGVmZXJyZWQgKTtcblxuXHRcdC8vIENhbGwgZ2l2ZW4gZnVuYyBpZiBhbnlcblx0XHRpZiAoIGZ1bmMgKSB7XG5cdFx0XHRmdW5jLmNhbGwoIGRlZmVycmVkLCBkZWZlcnJlZCApO1xuXHRcdH1cblxuXHRcdC8vIEFsbCBkb25lIVxuXHRcdHJldHVybiBkZWZlcnJlZDtcblx0fSxcblxuXHQvLyBEZWZlcnJlZCBoZWxwZXJcblx0d2hlbjogZnVuY3Rpb24oIHNpbmdsZVZhbHVlICkge1xuXHRcdHZhclxuXG5cdFx0XHQvLyBjb3VudCBvZiB1bmNvbXBsZXRlZCBzdWJvcmRpbmF0ZXNcblx0XHRcdHJlbWFpbmluZyA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cblx0XHRcdC8vIGNvdW50IG9mIHVucHJvY2Vzc2VkIGFyZ3VtZW50c1xuXHRcdFx0aSA9IHJlbWFpbmluZyxcblxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgZnVsZmlsbG1lbnQgZGF0YVxuXHRcdFx0cmVzb2x2ZUNvbnRleHRzID0gQXJyYXkoIGkgKSxcblx0XHRcdHJlc29sdmVWYWx1ZXMgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSxcblxuXHRcdFx0Ly8gdGhlIG1hc3RlciBEZWZlcnJlZFxuXHRcdFx0bWFzdGVyID0galF1ZXJ5LkRlZmVycmVkKCksXG5cblx0XHRcdC8vIHN1Ym9yZGluYXRlIGNhbGxiYWNrIGZhY3Rvcnlcblx0XHRcdHVwZGF0ZUZ1bmMgPSBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXNvbHZlQ29udGV4dHNbIGkgXSA9IHRoaXM7XG5cdFx0XHRcdFx0cmVzb2x2ZVZhbHVlc1sgaSBdID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSA6IHZhbHVlO1xuXHRcdFx0XHRcdGlmICggISggLS1yZW1haW5pbmcgKSApIHtcblx0XHRcdFx0XHRcdG1hc3Rlci5yZXNvbHZlV2l0aCggcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblxuXHRcdC8vIFNpbmdsZS0gYW5kIGVtcHR5IGFyZ3VtZW50cyBhcmUgYWRvcHRlZCBsaWtlIFByb21pc2UucmVzb2x2ZVxuXHRcdGlmICggcmVtYWluaW5nIDw9IDEgKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCBzaW5nbGVWYWx1ZSwgbWFzdGVyLmRvbmUoIHVwZGF0ZUZ1bmMoIGkgKSApLnJlc29sdmUsIG1hc3Rlci5yZWplY3QsXG5cdFx0XHRcdCFyZW1haW5pbmcgKTtcblxuXHRcdFx0Ly8gVXNlIC50aGVuKCkgdG8gdW53cmFwIHNlY29uZGFyeSB0aGVuYWJsZXMgKGNmLiBnaC0zMDAwKVxuXHRcdFx0aWYgKCBtYXN0ZXIuc3RhdGUoKSA9PT0gXCJwZW5kaW5nXCIgfHxcblx0XHRcdFx0aXNGdW5jdGlvbiggcmVzb2x2ZVZhbHVlc1sgaSBdICYmIHJlc29sdmVWYWx1ZXNbIGkgXS50aGVuICkgKSB7XG5cblx0XHRcdFx0cmV0dXJuIG1hc3Rlci50aGVuKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gTXVsdGlwbGUgYXJndW1lbnRzIGFyZSBhZ2dyZWdhdGVkIGxpa2UgUHJvbWlzZS5hbGwgYXJyYXkgZWxlbWVudHNcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHJlc29sdmVWYWx1ZXNbIGkgXSwgdXBkYXRlRnVuYyggaSApLCBtYXN0ZXIucmVqZWN0ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hc3Rlci5wcm9taXNlKCk7XG5cdH1cbn0gKTtcblxuXG4vLyBUaGVzZSB1c3VhbGx5IGluZGljYXRlIGEgcHJvZ3JhbW1lciBtaXN0YWtlIGR1cmluZyBkZXZlbG9wbWVudCxcbi8vIHdhcm4gYWJvdXQgdGhlbSBBU0FQIHJhdGhlciB0aGFuIHN3YWxsb3dpbmcgdGhlbSBieSBkZWZhdWx0LlxudmFyIHJlcnJvck5hbWVzID0gL14oRXZhbHxJbnRlcm5hbHxSYW5nZXxSZWZlcmVuY2V8U3ludGF4fFR5cGV8VVJJKUVycm9yJC87XG5cbmpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rID0gZnVuY3Rpb24oIGVycm9yLCBzdGFjayApIHtcblxuXHQvLyBTdXBwb3J0OiBJRSA4IC0gOSBvbmx5XG5cdC8vIENvbnNvbGUgZXhpc3RzIHdoZW4gZGV2IHRvb2xzIGFyZSBvcGVuLCB3aGljaCBjYW4gaGFwcGVuIGF0IGFueSB0aW1lXG5cdGlmICggd2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUud2FybiAmJiBlcnJvciAmJiByZXJyb3JOYW1lcy50ZXN0KCBlcnJvci5uYW1lICkgKSB7XG5cdFx0d2luZG93LmNvbnNvbGUud2FybiggXCJqUXVlcnkuRGVmZXJyZWQgZXhjZXB0aW9uOiBcIiArIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBzdGFjayApO1xuXHR9XG59O1xuXG5cblxuXG5qUXVlcnkucmVhZHlFeGNlcHRpb24gPSBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHR0aHJvdyBlcnJvcjtcblx0fSApO1xufTtcblxuXG5cblxuLy8gVGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5XG52YXIgcmVhZHlMaXN0ID0galF1ZXJ5LkRlZmVycmVkKCk7XG5cbmpRdWVyeS5mbi5yZWFkeSA9IGZ1bmN0aW9uKCBmbiApIHtcblxuXHRyZWFkeUxpc3Rcblx0XHQudGhlbiggZm4gKVxuXG5cdFx0Ly8gV3JhcCBqUXVlcnkucmVhZHlFeGNlcHRpb24gaW4gYSBmdW5jdGlvbiBzbyB0aGF0IHRoZSBsb29rdXBcblx0XHQvLyBoYXBwZW5zIGF0IHRoZSB0aW1lIG9mIGVycm9yIGhhbmRsaW5nIGluc3RlYWQgb2YgY2FsbGJhY2tcblx0XHQvLyByZWdpc3RyYXRpb24uXG5cdFx0LmNhdGNoKCBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdFx0XHRqUXVlcnkucmVhZHlFeGNlcHRpb24oIGVycm9yICk7XG5cdFx0fSApO1xuXG5cdHJldHVybiB0aGlzO1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIElzIHRoZSBET00gcmVhZHkgdG8gYmUgdXNlZD8gU2V0IHRvIHRydWUgb25jZSBpdCBvY2N1cnMuXG5cdGlzUmVhZHk6IGZhbHNlLFxuXG5cdC8vIEEgY291bnRlciB0byB0cmFjayBob3cgbWFueSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmVcblx0Ly8gdGhlIHJlYWR5IGV2ZW50IGZpcmVzLiBTZWUgIzY3ODFcblx0cmVhZHlXYWl0OiAxLFxuXG5cdC8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHlcblx0cmVhZHk6IGZ1bmN0aW9uKCB3YWl0ICkge1xuXG5cdFx0Ly8gQWJvcnQgaWYgdGhlcmUgYXJlIHBlbmRpbmcgaG9sZHMgb3Igd2UncmUgYWxyZWFkeSByZWFkeVxuXHRcdGlmICggd2FpdCA9PT0gdHJ1ZSA/IC0talF1ZXJ5LnJlYWR5V2FpdCA6IGpRdWVyeS5pc1JlYWR5ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJlbWVtYmVyIHRoYXQgdGhlIERPTSBpcyByZWFkeVxuXHRcdGpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTtcblxuXHRcdC8vIElmIGEgbm9ybWFsIERPTSBSZWFkeSBldmVudCBmaXJlZCwgZGVjcmVtZW50LCBhbmQgd2FpdCBpZiBuZWVkIGJlXG5cdFx0aWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5LnJlYWR5V2FpdCA+IDAgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlcmUgYXJlIGZ1bmN0aW9ucyBib3VuZCwgdG8gZXhlY3V0ZVxuXHRcdHJlYWR5TGlzdC5yZXNvbHZlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5IF0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkucmVhZHkudGhlbiA9IHJlYWR5TGlzdC50aGVuO1xuXG4vLyBUaGUgcmVhZHkgZXZlbnQgaGFuZGxlciBhbmQgc2VsZiBjbGVhbnVwIG1ldGhvZFxuZnVuY3Rpb24gY29tcGxldGVkKCkge1xuXHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG5cdGpRdWVyeS5yZWFkeSgpO1xufVxuXG4vLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZFxuLy8gYWZ0ZXIgdGhlIGJyb3dzZXIgZXZlbnQgaGFzIGFscmVhZHkgb2NjdXJyZWQuXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMCBvbmx5XG4vLyBPbGRlciBJRSBzb21ldGltZXMgc2lnbmFscyBcImludGVyYWN0aXZlXCIgdG9vIHNvb25cbmlmICggZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiIHx8XG5cdCggZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gXCJsb2FkaW5nXCIgJiYgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCApICkge1xuXG5cdC8vIEhhbmRsZSBpdCBhc3luY2hyb25vdXNseSB0byBhbGxvdyBzY3JpcHRzIHRoZSBvcHBvcnR1bml0eSB0byBkZWxheSByZWFkeVxuXHR3aW5kb3cuc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5ICk7XG5cbn0gZWxzZSB7XG5cblx0Ly8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxsYmFja1xuXHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cblx0Ly8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcbn1cblxuXG5cblxuLy8gTXVsdGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2YWx1ZXMgb2YgYSBjb2xsZWN0aW9uXG4vLyBUaGUgdmFsdWUvcyBjYW4gb3B0aW9uYWxseSBiZSBleGVjdXRlZCBpZiBpdCdzIGEgZnVuY3Rpb25cbnZhciBhY2Nlc3MgPSBmdW5jdGlvbiggZWxlbXMsIGZuLCBrZXksIHZhbHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0LCByYXcgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSBlbGVtcy5sZW5ndGgsXG5cdFx0YnVsayA9IGtleSA9PSBudWxsO1xuXG5cdC8vIFNldHMgbWFueSB2YWx1ZXNcblx0aWYgKCB0b1R5cGUoIGtleSApID09PSBcIm9iamVjdFwiICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cdFx0Zm9yICggaSBpbiBrZXkgKSB7XG5cdFx0XHRhY2Nlc3MoIGVsZW1zLCBmbiwgaSwga2V5WyBpIF0sIHRydWUsIGVtcHR5R2V0LCByYXcgKTtcblx0XHR9XG5cblx0Ly8gU2V0cyBvbmUgdmFsdWVcblx0fSBlbHNlIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXG5cdFx0aWYgKCAhaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJhdyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBidWxrICkge1xuXG5cdFx0XHQvLyBCdWxrIG9wZXJhdGlvbnMgcnVuIGFnYWluc3QgdGhlIGVudGlyZSBzZXRcblx0XHRcdGlmICggcmF3ICkge1xuXHRcdFx0XHRmbi5jYWxsKCBlbGVtcywgdmFsdWUgKTtcblx0XHRcdFx0Zm4gPSBudWxsO1xuXG5cdFx0XHQvLyAuLi5leGNlcHQgd2hlbiBleGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRidWxrID0gZm47XG5cdFx0XHRcdGZuID0gZnVuY3Rpb24oIGVsZW0sIGtleSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGJ1bGsuY2FsbCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRmbihcblx0XHRcdFx0XHRlbGVtc1sgaSBdLCBrZXksIHJhdyA/XG5cdFx0XHRcdFx0dmFsdWUgOlxuXHRcdFx0XHRcdHZhbHVlLmNhbGwoIGVsZW1zWyBpIF0sIGksIGZuKCBlbGVtc1sgaSBdLCBrZXkgKSApXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKCBjaGFpbmFibGUgKSB7XG5cdFx0cmV0dXJuIGVsZW1zO1xuXHR9XG5cblx0Ly8gR2V0c1xuXHRpZiAoIGJ1bGsgKSB7XG5cdFx0cmV0dXJuIGZuLmNhbGwoIGVsZW1zICk7XG5cdH1cblxuXHRyZXR1cm4gbGVuID8gZm4oIGVsZW1zWyAwIF0sIGtleSApIDogZW1wdHlHZXQ7XG59O1xuXG5cbi8vIE1hdGNoZXMgZGFzaGVkIHN0cmluZyBmb3IgY2FtZWxpemluZ1xudmFyIHJtc1ByZWZpeCA9IC9eLW1zLS8sXG5cdHJkYXNoQWxwaGEgPSAvLShbYS16XSkvZztcblxuLy8gVXNlZCBieSBjYW1lbENhc2UgYXMgY2FsbGJhY2sgdG8gcmVwbGFjZSgpXG5mdW5jdGlvbiBmY2FtZWxDYXNlKCBhbGwsIGxldHRlciApIHtcblx0cmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpO1xufVxuXG4vLyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhlIGNzcyBhbmQgZGF0YSBtb2R1bGVzXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG4vLyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAoIzk1NzIpXG5mdW5jdGlvbiBjYW1lbENhc2UoIHN0cmluZyApIHtcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsIFwibXMtXCIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7XG59XG52YXIgYWNjZXB0RGF0YSA9IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHQvLyBBY2NlcHRzIG9ubHk6XG5cdC8vICAtIE5vZGVcblx0Ly8gICAgLSBOb2RlLkVMRU1FTlRfTk9ERVxuXHQvLyAgICAtIE5vZGUuRE9DVU1FTlRfTk9ERVxuXHQvLyAgLSBPYmplY3Rcblx0Ly8gICAgLSBBbnlcblx0cmV0dXJuIG93bmVyLm5vZGVUeXBlID09PSAxIHx8IG93bmVyLm5vZGVUeXBlID09PSA5IHx8ICEoICtvd25lci5ub2RlVHlwZSApO1xufTtcblxuXG5cblxuZnVuY3Rpb24gRGF0YSgpIHtcblx0dGhpcy5leHBhbmRvID0galF1ZXJ5LmV4cGFuZG8gKyBEYXRhLnVpZCsrO1xufVxuXG5EYXRhLnVpZCA9IDE7XG5cbkRhdGEucHJvdG90eXBlID0ge1xuXG5cdGNhY2hlOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGVcblx0XHR2YXIgdmFsdWUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHQvLyBJZiBub3QsIGNyZWF0ZSBvbmVcblx0XHRpZiAoICF2YWx1ZSApIHtcblx0XHRcdHZhbHVlID0ge307XG5cblx0XHRcdC8vIFdlIGNhbiBhY2NlcHQgZGF0YSBmb3Igbm9uLWVsZW1lbnQgbm9kZXMgaW4gbW9kZXJuIGJyb3dzZXJzLFxuXHRcdFx0Ly8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSAjODMzNS5cblx0XHRcdC8vIEFsd2F5cyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LlxuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBvd25lciApICkge1xuXG5cdFx0XHRcdC8vIElmIGl0IGlzIGEgbm9kZSB1bmxpa2VseSB0byBiZSBzdHJpbmdpZnktZWQgb3IgbG9vcGVkIG92ZXJcblx0XHRcdFx0Ly8gdXNlIHBsYWluIGFzc2lnbm1lbnRcblx0XHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB2YWx1ZTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2Ugc2VjdXJlIGl0IGluIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHlcblx0XHRcdFx0Ly8gY29uZmlndXJhYmxlIG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUgcHJvcGVydHkgdG8gYmVcblx0XHRcdFx0Ly8gZGVsZXRlZCB3aGVuIGRhdGEgaXMgcmVtb3ZlZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggb3duZXIsIHRoaXMuZXhwYW5kbywge1xuXHRcdFx0XHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXHRzZXQ6IGZ1bmN0aW9uKCBvd25lciwgZGF0YSwgdmFsdWUgKSB7XG5cdFx0dmFyIHByb3AsXG5cdFx0XHRjYWNoZSA9IHRoaXMuY2FjaGUoIG93bmVyICk7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIGtleSwgdmFsdWUgXSBhcmdzXG5cdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBkYXRhICkgXSA9IHZhbHVlO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCB7IHByb3BlcnRpZXMgfSBdIGFyZ3Ncblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb3B5IHRoZSBwcm9wZXJ0aWVzIG9uZS1ieS1vbmUgdG8gdGhlIGNhY2hlIG9iamVjdFxuXHRcdFx0Zm9yICggcHJvcCBpbiBkYXRhICkge1xuXHRcdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBwcm9wICkgXSA9IGRhdGFbIHByb3AgXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNhY2hlO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzLmNhY2hlKCBvd25lciApIDpcblxuXHRcdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdICYmIG93bmVyWyB0aGlzLmV4cGFuZG8gXVsgY2FtZWxDYXNlKCBrZXkgKSBdO1xuXHR9LFxuXHRhY2Nlc3M6IGZ1bmN0aW9uKCBvd25lciwga2V5LCB2YWx1ZSApIHtcblxuXHRcdC8vIEluIGNhc2VzIHdoZXJlIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gTm8ga2V5IHdhcyBzcGVjaWZpZWRcblx0XHQvLyAgIDIuIEEgc3RyaW5nIGtleSB3YXMgc3BlY2lmaWVkLCBidXQgbm8gdmFsdWUgcHJvdmlkZWRcblx0XHQvL1xuXHRcdC8vIFRha2UgdGhlIFwicmVhZFwiIHBhdGggYW5kIGFsbG93IHRoZSBnZXQgbWV0aG9kIHRvIGRldGVybWluZVxuXHRcdC8vIHdoaWNoIHZhbHVlIHRvIHJldHVybiwgcmVzcGVjdGl2ZWx5IGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gVGhlIGVudGlyZSBjYWNoZSBvYmplY3Rcblx0XHQvLyAgIDIuIFRoZSBkYXRhIHN0b3JlZCBhdCB0aGUga2V5XG5cdFx0Ly9cblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdCggKCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIiApICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSApIHtcblxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0KCBvd25lciwga2V5ICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2hlbiB0aGUga2V5IGlzIG5vdCBhIHN0cmluZywgb3IgYm90aCBhIGtleSBhbmQgdmFsdWVcblx0XHQvLyBhcmUgc3BlY2lmaWVkLCBzZXQgb3IgZXh0ZW5kIChleGlzdGluZyBvYmplY3RzKSB3aXRoIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gQW4gb2JqZWN0IG9mIHByb3BlcnRpZXNcblx0XHQvLyAgIDIuIEEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vXG5cdFx0dGhpcy5zZXQoIG93bmVyLCBrZXksIHZhbHVlICk7XG5cblx0XHQvLyBTaW5jZSB0aGUgXCJzZXRcIiBwYXRoIGNhbiBoYXZlIHR3byBwb3NzaWJsZSBlbnRyeSBwb2ludHNcblx0XHQvLyByZXR1cm4gdGhlIGV4cGVjdGVkIGRhdGEgYmFzZWQgb24gd2hpY2ggcGF0aCB3YXMgdGFrZW5bKl1cblx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoga2V5O1xuXHR9LFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHZhciBpLFxuXHRcdFx0Y2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHRpZiAoIGNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGtleXNcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSgga2V5ICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYga2V5IGlzIGFuIGFycmF5IG9mIGtleXMuLi5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHNldCBjYW1lbENhc2Uga2V5cywgc28gcmVtb3ZlIHRoYXQuXG5cdFx0XHRcdGtleSA9IGtleS5tYXAoIGNhbWVsQ2FzZSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0a2V5ID0gY2FtZWxDYXNlKCBrZXkgKTtcblxuXHRcdFx0XHQvLyBJZiBhIGtleSB3aXRoIHRoZSBzcGFjZXMgZXhpc3RzLCB1c2UgaXQuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgY3JlYXRlIGFuIGFycmF5IGJ5IG1hdGNoaW5nIG5vbi13aGl0ZXNwYWNlXG5cdFx0XHRcdGtleSA9IGtleSBpbiBjYWNoZSA/XG5cdFx0XHRcdFx0WyBrZXkgXSA6XG5cdFx0XHRcdFx0KCBrZXkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpID0ga2V5Lmxlbmd0aDtcblxuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5WyBpIF0gXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgdGhlIGV4cGFuZG8gaWYgdGhlcmUncyBubyBtb3JlIGRhdGFcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1XG5cdFx0XHQvLyBXZWJraXQgJiBCbGluayBwZXJmb3JtYW5jZSBzdWZmZXJzIHdoZW4gZGVsZXRpbmcgcHJvcGVydGllc1xuXHRcdFx0Ly8gZnJvbSBET00gbm9kZXMsIHNvIHNldCB0byB1bmRlZmluZWQgaW5zdGVhZFxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzc4NjA3IChidWcgcmVzdHJpY3RlZClcblx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlbGV0ZSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRoYXNEYXRhOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cdFx0dmFyIGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdHJldHVybiBjYWNoZSAhPT0gdW5kZWZpbmVkICYmICFqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKTtcblx0fVxufTtcbnZhciBkYXRhUHJpdiA9IG5ldyBEYXRhKCk7XG5cbnZhciBkYXRhVXNlciA9IG5ldyBEYXRhKCk7XG5cblxuXG4vL1x0SW1wbGVtZW50YXRpb24gU3VtbWFyeVxuLy9cbi8vXHQxLiBFbmZvcmNlIEFQSSBzdXJmYWNlIGFuZCBzZW1hbnRpYyBjb21wYXRpYmlsaXR5IHdpdGggMS45LnggYnJhbmNoXG4vL1x0Mi4gSW1wcm92ZSB0aGUgbW9kdWxlJ3MgbWFpbnRhaW5hYmlsaXR5IGJ5IHJlZHVjaW5nIHRoZSBzdG9yYWdlXG4vL1x0XHRwYXRocyB0byBhIHNpbmdsZSBtZWNoYW5pc20uXG4vL1x0My4gVXNlIHRoZSBzYW1lIHNpbmdsZSBtZWNoYW5pc20gdG8gc3VwcG9ydCBcInByaXZhdGVcIiBhbmQgXCJ1c2VyXCIgZGF0YS5cbi8vXHQ0LiBfTmV2ZXJfIGV4cG9zZSBcInByaXZhdGVcIiBkYXRhIHRvIHVzZXIgY29kZSAoVE9ETzogRHJvcCBfZGF0YSwgX3JlbW92ZURhdGEpXG4vL1x0NS4gQXZvaWQgZXhwb3NpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvbiB1c2VyIG9iamVjdHMgKGVnLiBleHBhbmRvIHByb3BlcnRpZXMpXG4vL1x0Ni4gUHJvdmlkZSBhIGNsZWFyIHBhdGggZm9yIGltcGxlbWVudGF0aW9uIHVwZ3JhZGUgdG8gV2Vha01hcCBpbiAyMDE0XG5cbnZhciByYnJhY2UgPSAvXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC8sXG5cdHJtdWx0aURhc2ggPSAvW0EtWl0vZztcblxuZnVuY3Rpb24gZ2V0RGF0YSggZGF0YSApIHtcblx0aWYgKCBkYXRhID09PSBcInRydWVcIiApIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJmYWxzZVwiICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJudWxsXCIgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBPbmx5IGNvbnZlcnQgdG8gYSBudW1iZXIgaWYgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZ1xuXHRpZiAoIGRhdGEgPT09ICtkYXRhICsgXCJcIiApIHtcblx0XHRyZXR1cm4gK2RhdGE7XG5cdH1cblxuXHRpZiAoIHJicmFjZS50ZXN0KCBkYXRhICkgKSB7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2UoIGRhdGEgKTtcblx0fVxuXG5cdHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICkge1xuXHR2YXIgbmFtZTtcblxuXHQvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbnRlcm5hbGx5LCB0cnkgdG8gZmV0Y2ggYW55XG5cdC8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZVxuXHRpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdG5hbWUgPSBcImRhdGEtXCIgKyBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgXCItJCZcIiApLnRvTG93ZXJDYXNlKCk7XG5cdFx0ZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZGF0YSA9IGdldERhdGEoIGRhdGEgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge31cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyXG5cdFx0XHRkYXRhVXNlci5zZXQoIGVsZW0sIGtleSwgZGF0YSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGF0YTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuaGFzRGF0YSggZWxlbSApIHx8IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKTtcblx0fSxcblxuXHRkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVVzZXIucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH0sXG5cblx0Ly8gVE9ETzogTm93IHRoYXQgYWxsIGNhbGxzIHRvIF9kYXRhIGFuZCBfcmVtb3ZlRGF0YSBoYXZlIGJlZW4gcmVwbGFjZWRcblx0Ly8gd2l0aCBkaXJlY3QgY2FsbHMgdG8gZGF0YVByaXYgbWV0aG9kcywgdGhlc2UgY2FuIGJlIGRlcHJlY2F0ZWQuXG5cdF9kYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0X3JlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGF0YTogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0dmFyIGksIG5hbWUsIGRhdGEsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0YXR0cnMgPSBlbGVtICYmIGVsZW0uYXR0cmlidXRlcztcblxuXHRcdC8vIEdldHMgYWxsIHZhbHVlc1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHRoaXMubGVuZ3RoICkge1xuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtICk7XG5cblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICFkYXRhUHJpdi5nZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIgKSApIHtcblx0XHRcdFx0XHRpID0gYXR0cnMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBUaGUgYXR0cnMgZWxlbWVudHMgY2FuIGJlIG51bGwgKCMxNDg5NClcblx0XHRcdFx0XHRcdGlmICggYXR0cnNbIGkgXSApIHtcblx0XHRcdFx0XHRcdFx0bmFtZSA9IGF0dHJzWyBpIF0ubmFtZTtcblx0XHRcdFx0XHRcdFx0aWYgKCBuYW1lLmluZGV4T2YoIFwiZGF0YS1cIiApID09PSAwICkge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgPSBjYW1lbENhc2UoIG5hbWUuc2xpY2UoIDUgKSApO1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9XG5cblx0XHQvLyBTZXRzIG11bHRpcGxlIHZhbHVlc1xuXHRcdGlmICggdHlwZW9mIGtleSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBkYXRhO1xuXG5cdFx0XHQvLyBUaGUgY2FsbGluZyBqUXVlcnkgb2JqZWN0IChlbGVtZW50IG1hdGNoZXMpIGlzIG5vdCBlbXB0eVxuXHRcdFx0Ly8gKGFuZCB0aGVyZWZvcmUgaGFzIGFuIGVsZW1lbnQgYXBwZWFycyBhdCB0aGlzWyAwIF0pIGFuZCB0aGVcblx0XHRcdC8vIGB2YWx1ZWAgcGFyYW1ldGVyIHdhcyBub3QgdW5kZWZpbmVkLiBBbiBlbXB0eSBqUXVlcnkgb2JqZWN0XG5cdFx0XHQvLyB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBmb3IgZWxlbSA9IHRoaXNbIDAgXSB3aGljaCB3aWxsXG5cdFx0XHQvLyB0aHJvdyBhbiBleGNlcHRpb24gaWYgYW4gYXR0ZW1wdCB0byByZWFkIGEgZGF0YSBjYWNoZSBpcyBtYWRlLlxuXHRcdFx0aWYgKCBlbGVtICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBnZXQgZGF0YSBmcm9tIHRoZSBjYWNoZVxuXHRcdFx0XHQvLyBUaGUga2V5IHdpbGwgYWx3YXlzIGJlIGNhbWVsQ2FzZWQgaW4gRGF0YVxuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIFwiZGlzY292ZXJcIiB0aGUgZGF0YSBpblxuXHRcdFx0XHQvLyBIVE1MNSBjdXN0b20gZGF0YS0qIGF0dHJzXG5cdFx0XHRcdGRhdGEgPSBkYXRhQXR0ciggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2UgdHJpZWQgcmVhbGx5IGhhcmQsIGJ1dCB0aGUgZGF0YSBkb2Vzbid0IGV4aXN0LlxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCB0aGUgZGF0YS4uLlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBXZSBhbHdheXMgc3RvcmUgdGhlIGNhbWVsQ2FzZWQga2V5XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5LCB2YWx1ZSApO1xuXHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSwgbnVsbCwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkYXRhVXNlci5yZW1vdmUoIHRoaXMsIGtleSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBxdWV1ZTtcblxuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHR5cGUgPSAoIHR5cGUgfHwgXCJmeFwiICkgKyBcInF1ZXVlXCI7XG5cdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmdldCggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHQvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwXG5cdFx0XHRpZiAoIGRhdGEgKSB7XG5cdFx0XHRcdGlmICggIXF1ZXVlIHx8IEFycmF5LmlzQXJyYXkoIGRhdGEgKSApIHtcblx0XHRcdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cXVldWUucHVzaCggZGF0YSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcXVldWUgfHwgW107XG5cdFx0fVxuXHR9LFxuXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLFxuXHRcdFx0c3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsXG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCksXG5cdFx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSApLFxuXHRcdFx0bmV4dCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggZWxlbSwgdHlwZSApO1xuXHRcdFx0fTtcblxuXHRcdC8vIElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWxcblx0XHRpZiAoIGZuID09PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdHN0YXJ0TGVuZ3RoLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblxuXHRcdFx0Ly8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZ1xuXHRcdFx0Ly8gYXV0b21hdGljYWxseSBkZXF1ZXVlZFxuXHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgKSB7XG5cdFx0XHRcdHF1ZXVlLnVuc2hpZnQoIFwiaW5wcm9ncmVzc1wiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb25cblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0Zm4uY2FsbCggZWxlbSwgbmV4dCwgaG9va3MgKTtcblx0XHR9XG5cblx0XHRpZiAoICFzdGFydExlbmd0aCAmJiBob29rcyApIHtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gTm90IHB1YmxpYyAtIGdlbmVyYXRlIGEgcXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybiB0aGUgY3VycmVudCBvbmVcblx0X3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHZhciBrZXkgPSB0eXBlICsgXCJxdWV1ZUhvb2tzXCI7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmdldCggZWxlbSwga2V5ICkgfHwgZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBrZXksIHtcblx0XHRcdGVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKS5hZGQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFsgdHlwZSArIFwicXVldWVcIiwga2V5IF0gKTtcblx0XHRcdH0gKVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgc2V0dGVyID0gMjtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRkYXRhID0gdHlwZTtcblx0XHRcdHR5cGUgPSBcImZ4XCI7XG5cdFx0XHRzZXR0ZXItLTtcblx0XHR9XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPCBzZXR0ZXIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWyAwIF0sIHR5cGUgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMgOlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIGEgaG9va3MgZm9yIHRoaXMgcXVldWVcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgJiYgcXVldWVbIDAgXSAhPT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHR9LFxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0fSApO1xuXHR9LFxuXHRjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdH0sXG5cblx0Ly8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZVxuXHQvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdClcblx0cHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iaiApIHtcblx0XHR2YXIgdG1wLFxuXHRcdFx0Y291bnQgPSAxLFxuXHRcdFx0ZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGVsZW1lbnRzID0gdGhpcyxcblx0XHRcdGkgPSB0aGlzLmxlbmd0aCxcblx0XHRcdHJlc29sdmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhKCAtLWNvdW50ICkgKSB7XG5cdFx0XHRcdFx0ZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRvYmogPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0bXAgPSBkYXRhUHJpdi5nZXQoIGVsZW1lbnRzWyBpIF0sIHR5cGUgKyBcInF1ZXVlSG9va3NcIiApO1xuXHRcdFx0aWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkge1xuXHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHR0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJlc29sdmUoKTtcblx0XHRyZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7XG5cdH1cbn0gKTtcbnZhciBwbnVtID0gKCAvWystXT8oPzpcXGQqXFwufClcXGQrKD86W2VFXVsrLV0/XFxkK3wpLyApLnNvdXJjZTtcblxudmFyIHJjc3NOdW0gPSBuZXcgUmVnRXhwKCBcIl4oPzooWystXSk9fCkoXCIgKyBwbnVtICsgXCIpKFthLXolXSopJFwiLCBcImlcIiApO1xuXG5cbnZhciBjc3NFeHBhbmQgPSBbIFwiVG9wXCIsIFwiUmlnaHRcIiwgXCJCb3R0b21cIiwgXCJMZWZ0XCIgXTtcblxudmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuXG5cblx0dmFyIGlzQXR0YWNoZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApO1xuXHRcdH0sXG5cdFx0Y29tcG9zZWQgPSB7IGNvbXBvc2VkOiB0cnVlIH07XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4KywgaU9TIDEwLjAgLSAxMC4yIG9ubHlcblx0Ly8gQ2hlY2sgYXR0YWNobWVudCBhY3Jvc3Mgc2hhZG93IERPTSBib3VuZGFyaWVzIHdoZW4gcG9zc2libGUgKGdoLTM1MDQpXG5cdC8vIFN1cHBvcnQ6IGlPUyAxMC4wLTEwLjIgb25seVxuXHQvLyBFYXJseSBpT1MgMTAgdmVyc2lvbnMgc3VwcG9ydCBgYXR0YWNoU2hhZG93YCBidXQgbm90IGBnZXRSb290Tm9kZWAsXG5cdC8vIGxlYWRpbmcgdG8gZXJyb3JzLiBXZSBuZWVkIHRvIGNoZWNrIGZvciBgZ2V0Um9vdE5vZGVgLlxuXHRpZiAoIGRvY3VtZW50RWxlbWVudC5nZXRSb290Tm9kZSApIHtcblx0XHRpc0F0dGFjaGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKSB8fFxuXHRcdFx0XHRlbGVtLmdldFJvb3ROb2RlKCBjb21wb3NlZCApID09PSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0fTtcblx0fVxudmFyIGlzSGlkZGVuV2l0aGluVHJlZSA9IGZ1bmN0aW9uKCBlbGVtLCBlbCApIHtcblxuXHRcdC8vIGlzSGlkZGVuV2l0aGluVHJlZSBtaWdodCBiZSBjYWxsZWQgZnJvbSBqUXVlcnkjZmlsdGVyIGZ1bmN0aW9uO1xuXHRcdC8vIGluIHRoYXQgY2FzZSwgZWxlbWVudCB3aWxsIGJlIHNlY29uZCBhcmd1bWVudFxuXHRcdGVsZW0gPSBlbCB8fCBlbGVtO1xuXG5cdFx0Ly8gSW5saW5lIHN0eWxlIHRydW1wcyBhbGxcblx0XHRyZXR1cm4gZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIiB8fFxuXHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmXG5cblx0XHRcdC8vIE90aGVyd2lzZSwgY2hlY2sgY29tcHV0ZWQgc3R5bGVcblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MyAtIDQ1XG5cdFx0XHQvLyBEaXNjb25uZWN0ZWQgZWxlbWVudHMgY2FuIGhhdmUgY29tcHV0ZWQgZGlzcGxheTogbm9uZSwgc28gZmlyc3QgY29uZmlybSB0aGF0IGVsZW0gaXNcblx0XHRcdC8vIGluIHRoZSBkb2N1bWVudC5cblx0XHRcdGlzQXR0YWNoZWQoIGVsZW0gKSAmJlxuXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApID09PSBcIm5vbmVcIjtcblx0fTtcblxudmFyIHN3YXAgPSBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgY2FsbGJhY2ssIGFyZ3MgKSB7XG5cdHZhciByZXQsIG5hbWUsXG5cdFx0b2xkID0ge307XG5cblx0Ly8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1ZXMsIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmVzXG5cdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRvbGRbIG5hbWUgXSA9IGVsZW0uc3R5bGVbIG5hbWUgXTtcblx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSBvcHRpb25zWyBuYW1lIF07XG5cdH1cblxuXHRyZXQgPSBjYWxsYmFjay5hcHBseSggZWxlbSwgYXJncyB8fCBbXSApO1xuXG5cdC8vIFJldmVydCB0aGUgb2xkIHZhbHVlc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufTtcblxuXG5cblxuZnVuY3Rpb24gYWRqdXN0Q1NTKCBlbGVtLCBwcm9wLCB2YWx1ZVBhcnRzLCB0d2VlbiApIHtcblx0dmFyIGFkanVzdGVkLCBzY2FsZSxcblx0XHRtYXhJdGVyYXRpb25zID0gMjAsXG5cdFx0Y3VycmVudFZhbHVlID0gdHdlZW4gP1xuXHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5jdXIoKTtcblx0XHRcdH0gOlxuXHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wLCBcIlwiICk7XG5cdFx0XHR9LFxuXHRcdGluaXRpYWwgPSBjdXJyZW50VmFsdWUoKSxcblx0XHR1bml0ID0gdmFsdWVQYXJ0cyAmJiB2YWx1ZVBhcnRzWyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyBcIlwiIDogXCJweFwiICksXG5cblx0XHQvLyBTdGFydGluZyB2YWx1ZSBjb21wdXRhdGlvbiBpcyByZXF1aXJlZCBmb3IgcG90ZW50aWFsIHVuaXQgbWlzbWF0Y2hlc1xuXHRcdGluaXRpYWxJblVuaXQgPSBlbGVtLm5vZGVUeXBlICYmXG5cdFx0XHQoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSB8fCB1bml0ICE9PSBcInB4XCIgJiYgK2luaXRpYWwgKSAmJlxuXHRcdFx0cmNzc051bS5leGVjKCBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wICkgKTtcblxuXHRpZiAoIGluaXRpYWxJblVuaXQgJiYgaW5pdGlhbEluVW5pdFsgMyBdICE9PSB1bml0ICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTU0XG5cdFx0Ly8gSGFsdmUgdGhlIGl0ZXJhdGlvbiB0YXJnZXQgdmFsdWUgdG8gcHJldmVudCBpbnRlcmZlcmVuY2UgZnJvbSBDU1MgdXBwZXIgYm91bmRzIChnaC0yMTQ0KVxuXHRcdGluaXRpYWwgPSBpbml0aWFsIC8gMjtcblxuXHRcdC8vIFRydXN0IHVuaXRzIHJlcG9ydGVkIGJ5IGpRdWVyeS5jc3Ncblx0XHR1bml0ID0gdW5pdCB8fCBpbml0aWFsSW5Vbml0WyAzIF07XG5cblx0XHQvLyBJdGVyYXRpdmVseSBhcHByb3hpbWF0ZSBmcm9tIGEgbm9uemVybyBzdGFydGluZyBwb2ludFxuXHRcdGluaXRpYWxJblVuaXQgPSAraW5pdGlhbCB8fCAxO1xuXG5cdFx0d2hpbGUgKCBtYXhJdGVyYXRpb25zLS0gKSB7XG5cblx0XHRcdC8vIEV2YWx1YXRlIGFuZCB1cGRhdGUgb3VyIGJlc3QgZ3Vlc3MgKGRvdWJsaW5nIGd1ZXNzZXMgdGhhdCB6ZXJvIG91dCkuXG5cdFx0XHQvLyBGaW5pc2ggaWYgdGhlIHNjYWxlIGVxdWFscyBvciBjcm9zc2VzIDEgKG1ha2luZyB0aGUgb2xkKm5ldyBwcm9kdWN0IG5vbi1wb3NpdGl2ZSkuXG5cdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cdFx0XHRpZiAoICggMSAtIHNjYWxlICkgKiAoIDEgLSAoIHNjYWxlID0gY3VycmVudFZhbHVlKCkgLyBpbml0aWFsIHx8IDAuNSApICkgPD0gMCApIHtcblx0XHRcdFx0bWF4SXRlcmF0aW9ucyA9IDA7XG5cdFx0XHR9XG5cdFx0XHRpbml0aWFsSW5Vbml0ID0gaW5pdGlhbEluVW5pdCAvIHNjYWxlO1xuXG5cdFx0fVxuXG5cdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgKiAyO1xuXHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB3ZSB1cGRhdGUgdGhlIHR3ZWVuIHByb3BlcnRpZXMgbGF0ZXIgb25cblx0XHR2YWx1ZVBhcnRzID0gdmFsdWVQYXJ0cyB8fCBbXTtcblx0fVxuXG5cdGlmICggdmFsdWVQYXJ0cyApIHtcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWxJblVuaXQgfHwgK2luaXRpYWwgfHwgMDtcblxuXHRcdC8vIEFwcGx5IHJlbGF0aXZlIG9mZnNldCAoKz0vLT0pIGlmIHNwZWNpZmllZFxuXHRcdGFkanVzdGVkID0gdmFsdWVQYXJ0c1sgMSBdID9cblx0XHRcdGluaXRpYWxJblVuaXQgKyAoIHZhbHVlUGFydHNbIDEgXSArIDEgKSAqIHZhbHVlUGFydHNbIDIgXSA6XG5cdFx0XHQrdmFsdWVQYXJ0c1sgMiBdO1xuXHRcdGlmICggdHdlZW4gKSB7XG5cdFx0XHR0d2Vlbi51bml0ID0gdW5pdDtcblx0XHRcdHR3ZWVuLnN0YXJ0ID0gaW5pdGlhbEluVW5pdDtcblx0XHRcdHR3ZWVuLmVuZCA9IGFkanVzdGVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYWRqdXN0ZWQ7XG59XG5cblxudmFyIGRlZmF1bHREaXNwbGF5TWFwID0ge307XG5cbmZ1bmN0aW9uIGdldERlZmF1bHREaXNwbGF5KCBlbGVtICkge1xuXHR2YXIgdGVtcCxcblx0XHRkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQsXG5cdFx0bm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLFxuXHRcdGRpc3BsYXkgPSBkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXTtcblxuXHRpZiAoIGRpc3BsYXkgKSB7XG5cdFx0cmV0dXJuIGRpc3BsYXk7XG5cdH1cblxuXHR0ZW1wID0gZG9jLmJvZHkuYXBwZW5kQ2hpbGQoIGRvYy5jcmVhdGVFbGVtZW50KCBub2RlTmFtZSApICk7XG5cdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCB0ZW1wLCBcImRpc3BsYXlcIiApO1xuXG5cdHRlbXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggdGVtcCApO1xuXG5cdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0ZGlzcGxheSA9IFwiYmxvY2tcIjtcblx0fVxuXHRkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXSA9IGRpc3BsYXk7XG5cblx0cmV0dXJuIGRpc3BsYXk7XG59XG5cbmZ1bmN0aW9uIHNob3dIaWRlKCBlbGVtZW50cywgc2hvdyApIHtcblx0dmFyIGRpc3BsYXksIGVsZW0sXG5cdFx0dmFsdWVzID0gW10sXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblxuXHQvLyBEZXRlcm1pbmUgbmV3IGRpc3BsYXkgdmFsdWUgZm9yIGVsZW1lbnRzIHRoYXQgbmVlZCB0byBjaGFuZ2Vcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRlbGVtID0gZWxlbWVudHNbIGluZGV4IF07XG5cdFx0aWYgKCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXk7XG5cdFx0aWYgKCBzaG93ICkge1xuXG5cdFx0XHQvLyBTaW5jZSB3ZSBmb3JjZSB2aXNpYmlsaXR5IHVwb24gY2FzY2FkZS1oaWRkZW4gZWxlbWVudHMsIGFuIGltbWVkaWF0ZSAoYW5kIHNsb3cpXG5cdFx0XHQvLyBjaGVjayBpcyByZXF1aXJlZCBpbiB0aGlzIGZpcnN0IGxvb3AgdW5sZXNzIHdlIGhhdmUgYSBub25lbXB0eSBkaXNwbGF5IHZhbHVlIChlaXRoZXJcblx0XHRcdC8vIGlubGluZSBvciBhYm91dC10by1iZS1yZXN0b3JlZClcblx0XHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKSB8fCBudWxsO1xuXHRcdFx0XHRpZiAoICF2YWx1ZXNbIGluZGV4IF0gKSB7XG5cdFx0XHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwiXCIgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICkgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGdldERlZmF1bHREaXNwbGF5KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICggZGlzcGxheSAhPT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IFwibm9uZVwiO1xuXG5cdFx0XHRcdC8vIFJlbWVtYmVyIHdoYXQgd2UncmUgb3ZlcndyaXRpbmdcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCBlbGVtLCBcImRpc3BsYXlcIiwgZGlzcGxheSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFNldCB0aGUgZGlzcGxheSBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcCB0byBhdm9pZCBjb25zdGFudCByZWZsb3dcblx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRpZiAoIHZhbHVlc1sgaW5kZXggXSAhPSBudWxsICkge1xuXHRcdFx0ZWxlbWVudHNbIGluZGV4IF0uc3R5bGUuZGlzcGxheSA9IHZhbHVlc1sgaW5kZXggXTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudHM7XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0c2hvdzogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNob3dIaWRlKCB0aGlzLCB0cnVlICk7XG5cdH0sXG5cdGhpZGU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcyApO1xuXHR9LFxuXHR0b2dnbGU6IGZ1bmN0aW9uKCBzdGF0ZSApIHtcblx0XHRpZiAoIHR5cGVvZiBzdGF0ZSA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGUgPyB0aGlzLnNob3coKSA6IHRoaXMuaGlkZSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBpc0hpZGRlbldpdGhpblRyZWUoIHRoaXMgKSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuc2hvdygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuaGlkZSgpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xudmFyIHJjaGVja2FibGVUeXBlID0gKCAvXig/OmNoZWNrYm94fHJhZGlvKSQvaSApO1xuXG52YXIgcnRhZ05hbWUgPSAoIC88KFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKikvaSApO1xuXG52YXIgcnNjcmlwdFR5cGUgPSAoIC9eJHxebW9kdWxlJHxcXC8oPzpqYXZhfGVjbWEpc2NyaXB0L2kgKTtcblxuXG5cbi8vIFdlIGhhdmUgdG8gY2xvc2UgdGhlc2UgdGFncyB0byBzdXBwb3J0IFhIVE1MICgjMTMyMDApXG52YXIgd3JhcE1hcCA9IHtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRvcHRpb246IFsgMSwgXCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+XCIsIFwiPC9zZWxlY3Q+XCIgXSxcblxuXHQvLyBYSFRNTCBwYXJzZXJzIGRvIG5vdCBtYWdpY2FsbHkgaW5zZXJ0IGVsZW1lbnRzIGluIHRoZVxuXHQvLyBzYW1lIHdheSB0aGF0IHRhZyBzb3VwIHBhcnNlcnMgZG8uIFNvIHdlIGNhbm5vdCBzaG9ydGVuXG5cdC8vIHRoaXMgYnkgb21pdHRpbmcgPHRib2R5PiBvciBvdGhlciByZXF1aXJlZCBlbGVtZW50cy5cblx0dGhlYWQ6IFsgMSwgXCI8dGFibGU+XCIsIFwiPC90YWJsZT5cIiBdLFxuXHRjb2w6IFsgMiwgXCI8dGFibGU+PGNvbGdyb3VwPlwiLCBcIjwvY29sZ3JvdXA+PC90YWJsZT5cIiBdLFxuXHR0cjogWyAyLCBcIjx0YWJsZT48dGJvZHk+XCIsIFwiPC90Ym9keT48L3RhYmxlPlwiIF0sXG5cdHRkOiBbIDMsIFwiPHRhYmxlPjx0Ym9keT48dHI+XCIsIFwiPC90cj48L3Rib2R5PjwvdGFibGU+XCIgXSxcblxuXHRfZGVmYXVsdDogWyAwLCBcIlwiLCBcIlwiIF1cbn07XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG53cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb247XG5cbndyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7XG53cmFwTWFwLnRoID0gd3JhcE1hcC50ZDtcblxuXG5mdW5jdGlvbiBnZXRBbGwoIGNvbnRleHQsIHRhZyApIHtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdC8vIFVzZSB0eXBlb2YgdG8gYXZvaWQgemVyby1hcmd1bWVudCBtZXRob2QgaW52b2NhdGlvbiBvbiBob3N0IG9iamVjdHMgKCMxNTE1MSlcblx0dmFyIHJldDtcblxuXHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyB8fCBcIipcIiApO1xuXG5cdH0gZWxzZSBpZiAoIHR5cGVvZiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0cmV0ID0gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2Uge1xuXHRcdHJldCA9IFtdO1xuXHR9XG5cblx0aWYgKCB0YWcgPT09IHVuZGVmaW5lZCB8fCB0YWcgJiYgbm9kZU5hbWUoIGNvbnRleHQsIHRhZyApICkge1xuXHRcdHJldHVybiBqUXVlcnkubWVyZ2UoIFsgY29udGV4dCBdLCByZXQgKTtcblx0fVxuXG5cdHJldHVybiByZXQ7XG59XG5cblxuLy8gTWFyayBzY3JpcHRzIGFzIGhhdmluZyBhbHJlYWR5IGJlZW4gZXZhbHVhdGVkXG5mdW5jdGlvbiBzZXRHbG9iYWxFdmFsKCBlbGVtcywgcmVmRWxlbWVudHMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsID0gZWxlbXMubGVuZ3RoO1xuXG5cdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRkYXRhUHJpdi5zZXQoXG5cdFx0XHRlbGVtc1sgaSBdLFxuXHRcdFx0XCJnbG9iYWxFdmFsXCIsXG5cdFx0XHQhcmVmRWxlbWVudHMgfHwgZGF0YVByaXYuZ2V0KCByZWZFbGVtZW50c1sgaSBdLCBcImdsb2JhbEV2YWxcIiApXG5cdFx0KTtcblx0fVxufVxuXG5cbnZhciByaHRtbCA9IC88fCYjP1xcdys7LztcblxuZnVuY3Rpb24gYnVpbGRGcmFnbWVudCggZWxlbXMsIGNvbnRleHQsIHNjcmlwdHMsIHNlbGVjdGlvbiwgaWdub3JlZCApIHtcblx0dmFyIGVsZW0sIHRtcCwgdGFnLCB3cmFwLCBhdHRhY2hlZCwgaixcblx0XHRmcmFnbWVudCA9IGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuXHRcdG5vZGVzID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1zWyBpIF07XG5cblx0XHRpZiAoIGVsZW0gfHwgZWxlbSA9PT0gMCApIHtcblxuXHRcdFx0Ly8gQWRkIG5vZGVzIGRpcmVjdGx5XG5cdFx0XHRpZiAoIHRvVHlwZSggZWxlbSApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIGVsZW0ubm9kZVR5cGUgPyBbIGVsZW0gXSA6IGVsZW0gKTtcblxuXHRcdFx0Ly8gQ29udmVydCBub24taHRtbCBpbnRvIGEgdGV4dCBub2RlXG5cdFx0XHR9IGVsc2UgaWYgKCAhcmh0bWwudGVzdCggZWxlbSApICkge1xuXHRcdFx0XHRub2Rlcy5wdXNoKCBjb250ZXh0LmNyZWF0ZVRleHROb2RlKCBlbGVtICkgKTtcblxuXHRcdFx0Ly8gQ29udmVydCBodG1sIGludG8gRE9NIG5vZGVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0bXAgPSB0bXAgfHwgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGNvbnRleHQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICk7XG5cblx0XHRcdFx0Ly8gRGVzZXJpYWxpemUgYSBzdGFuZGFyZCByZXByZXNlbnRhdGlvblxuXHRcdFx0XHR0YWcgPSAoIHJ0YWdOYW1lLmV4ZWMoIGVsZW0gKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0d3JhcCA9IHdyYXBNYXBbIHRhZyBdIHx8IHdyYXBNYXAuX2RlZmF1bHQ7XG5cdFx0XHRcdHRtcC5pbm5lckhUTUwgPSB3cmFwWyAxIF0gKyBqUXVlcnkuaHRtbFByZWZpbHRlciggZWxlbSApICsgd3JhcFsgMiBdO1xuXG5cdFx0XHRcdC8vIERlc2NlbmQgdGhyb3VnaCB3cmFwcGVycyB0byB0aGUgcmlnaHQgY29udGVudFxuXHRcdFx0XHRqID0gd3JhcFsgMCBdO1xuXHRcdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0XHR0bXAgPSB0bXAubGFzdENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBub2RlcywgdG1wLmNoaWxkTm9kZXMgKTtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB0aGUgdG9wLWxldmVsIGNvbnRhaW5lclxuXHRcdFx0XHR0bXAgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0XHRcdC8vIEVuc3VyZSB0aGUgY3JlYXRlZCBub2RlcyBhcmUgb3JwaGFuZWQgKCMxMjM5Milcblx0XHRcdFx0dG1wLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZW1vdmUgd3JhcHBlciBmcm9tIGZyYWdtZW50XG5cdGZyYWdtZW50LnRleHRDb250ZW50ID0gXCJcIjtcblxuXHRpID0gMDtcblx0d2hpbGUgKCAoIGVsZW0gPSBub2Rlc1sgaSsrIF0gKSApIHtcblxuXHRcdC8vIFNraXAgZWxlbWVudHMgYWxyZWFkeSBpbiB0aGUgY29udGV4dCBjb2xsZWN0aW9uICh0cmFjLTQwODcpXG5cdFx0aWYgKCBzZWxlY3Rpb24gJiYgalF1ZXJ5LmluQXJyYXkoIGVsZW0sIHNlbGVjdGlvbiApID4gLTEgKSB7XG5cdFx0XHRpZiAoIGlnbm9yZWQgKSB7XG5cdFx0XHRcdGlnbm9yZWQucHVzaCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0YXR0YWNoZWQgPSBpc0F0dGFjaGVkKCBlbGVtICk7XG5cblx0XHQvLyBBcHBlbmQgdG8gZnJhZ21lbnRcblx0XHR0bXAgPSBnZXRBbGwoIGZyYWdtZW50LmFwcGVuZENoaWxkKCBlbGVtICksIFwic2NyaXB0XCIgKTtcblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRpZiAoIGF0dGFjaGVkICkge1xuXHRcdFx0c2V0R2xvYmFsRXZhbCggdG1wICk7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FwdHVyZSBleGVjdXRhYmxlc1xuXHRcdGlmICggc2NyaXB0cyApIHtcblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0bXBbIGorKyBdICkgKSB7XG5cdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggZWxlbS50eXBlIHx8IFwiXCIgKSApIHtcblx0XHRcdFx0XHRzY3JpcHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmcmFnbWVudDtcbn1cblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0ZGl2ID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApLFxuXHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seVxuXHQvLyBDaGVjayBzdGF0ZSBsb3N0IGlmIHRoZSBuYW1lIGlzIHNldCAoIzExMjE3KVxuXHQvLyBTdXBwb3J0OiBXaW5kb3dzIFdlYiBBcHBzIChXV0EpXG5cdC8vIGBuYW1lYCBhbmQgYHR5cGVgIG11c3QgdXNlIC5zZXRBdHRyaWJ1dGUgZm9yIFdXQSAoIzE0OTAxKVxuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcInJhZGlvXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcImNoZWNrZWRcIiwgXCJjaGVja2VkXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJ0XCIgKTtcblxuXHRkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSBvbmx5XG5cdC8vIE9sZGVyIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGluIGZyYWdtZW50c1xuXHRzdXBwb3J0LmNoZWNrQ2xvbmUgPSBkaXYuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmNoZWNrZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIE1ha2Ugc3VyZSB0ZXh0YXJlYSAoYW5kIGNoZWNrYm94KSBkZWZhdWx0VmFsdWUgaXMgcHJvcGVybHkgY2xvbmVkXG5cdGRpdi5pbm5lckhUTUwgPSBcIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT5cIjtcblx0c3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9ICEhZGl2LmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWU7XG59ICkoKTtcblxuXG52YXJcblx0cmtleUV2ZW50ID0gL15rZXkvLFxuXHRybW91c2VFdmVudCA9IC9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudXxkcmFnfGRyb3ApfGNsaWNrLyxcblx0cnR5cGVuYW1lc3BhY2UgPSAvXihbXi5dKikoPzpcXC4oLispfCkvO1xuXG5mdW5jdGlvbiByZXR1cm5UcnVlKCkge1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmV0dXJuRmFsc2UoKSB7XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLy8gU3VwcG9ydDogSUUgPD05IC0gMTErXG4vLyBmb2N1cygpIGFuZCBibHVyKCkgYXJlIGFzeW5jaHJvbm91cywgZXhjZXB0IHdoZW4gdGhleSBhcmUgbm8tb3AuXG4vLyBTbyBleHBlY3QgZm9jdXMgdG8gYmUgc3luY2hyb25vdXMgd2hlbiB0aGUgZWxlbWVudCBpcyBhbHJlYWR5IGFjdGl2ZSxcbi8vIGFuZCBibHVyIHRvIGJlIHN5bmNocm9ub3VzIHdoZW4gdGhlIGVsZW1lbnQgaXMgbm90IGFscmVhZHkgYWN0aXZlLlxuLy8gKGZvY3VzIGFuZCBibHVyIGFyZSBhbHdheXMgc3luY2hyb25vdXMgaW4gb3RoZXIgc3VwcG9ydGVkIGJyb3dzZXJzLFxuLy8gdGhpcyBqdXN0IGRlZmluZXMgd2hlbiB3ZSBjYW4gY291bnQgb24gaXQpLlxuZnVuY3Rpb24gZXhwZWN0U3luYyggZWxlbSwgdHlwZSApIHtcblx0cmV0dXJuICggZWxlbSA9PT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSApID09PSAoIHR5cGUgPT09IFwiZm9jdXNcIiApO1xufVxuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuLy8gQWNjZXNzaW5nIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgY2FuIHRocm93IHVuZXhwZWN0ZWRseVxuLy8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEzMzkzXG5mdW5jdGlvbiBzYWZlQWN0aXZlRWxlbWVudCgpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblx0fSBjYXRjaCAoIGVyciApIHsgfVxufVxuXG5mdW5jdGlvbiBvbiggZWxlbSwgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgb25lICkge1xuXHR2YXIgb3JpZ0ZuLCB0eXBlO1xuXG5cdC8vIFR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVyc1xuXHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vICggdHlwZXMtT2JqZWN0LCBzZWxlY3RvciwgZGF0YSApXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtT2JqZWN0LCBkYXRhIClcblx0XHRcdGRhdGEgPSBkYXRhIHx8IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRvbiggZWxlbSwgdHlwZSwgc2VsZWN0b3IsIGRhdGEsIHR5cGVzWyB0eXBlIF0sIG9uZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gZWxlbTtcblx0fVxuXG5cdGlmICggZGF0YSA9PSBudWxsICYmIGZuID09IG51bGwgKSB7XG5cblx0XHQvLyAoIHR5cGVzLCBmbiApXG5cdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRkYXRhID0gc2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoIGZuID09IG51bGwgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMsIHNlbGVjdG9yLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vICggdHlwZXMsIGRhdGEsIGZuIClcblx0XHRcdGZuID0gZGF0YTtcblx0XHRcdGRhdGEgPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHR9IGVsc2UgaWYgKCAhZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIG9uZSA9PT0gMSApIHtcblx0XHRvcmlnRm4gPSBmbjtcblx0XHRmbiA9IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0Ly8gQ2FuIHVzZSBhbiBlbXB0eSBzZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5zIHRoZSBpbmZvXG5cdFx0XHRqUXVlcnkoKS5vZmYoIGV2ZW50ICk7XG5cdFx0XHRyZXR1cm4gb3JpZ0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9O1xuXG5cdFx0Ly8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1c2luZyBvcmlnRm5cblx0XHRmbi5ndWlkID0gb3JpZ0ZuLmd1aWQgfHwgKCBvcmlnRm4uZ3VpZCA9IGpRdWVyeS5ndWlkKysgKTtcblx0fVxuXHRyZXR1cm4gZWxlbS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlcywgZm4sIGRhdGEsIHNlbGVjdG9yICk7XG5cdH0gKTtcbn1cblxuLypcbiAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGV2ZW50cyAtLSBub3QgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS5cbiAqIFByb3BzIHRvIERlYW4gRWR3YXJkcycgYWRkRXZlbnQgbGlicmFyeSBmb3IgbWFueSBvZiB0aGUgaWRlYXMuXG4gKi9cbmpRdWVyeS5ldmVudCA9IHtcblxuXHRnbG9iYWw6IHt9LFxuXG5cdGFkZDogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBkYXRhLCBzZWxlY3RvciApIHtcblxuXHRcdHZhciBoYW5kbGVPYmpJbiwgZXZlbnRIYW5kbGUsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdC8vIERvbid0IGF0dGFjaCBldmVudHMgdG8gbm9EYXRhIG9yIHRleHQvY29tbWVudCBub2RlcyAoYnV0IGFsbG93IHBsYWluIG9iamVjdHMpXG5cdFx0aWYgKCAhZWxlbURhdGEgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGVyIGNhbiBwYXNzIGluIGFuIG9iamVjdCBvZiBjdXN0b20gZGF0YSBpbiBsaWV1IG9mIHRoZSBoYW5kbGVyXG5cdFx0aWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7XG5cdFx0XHRoYW5kbGVPYmpJbiA9IGhhbmRsZXI7XG5cdFx0XHRoYW5kbGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjtcblx0XHRcdHNlbGVjdG9yID0gaGFuZGxlT2JqSW4uc2VsZWN0b3I7XG5cdFx0fVxuXG5cdFx0Ly8gRW5zdXJlIHRoYXQgaW52YWxpZCBzZWxlY3RvcnMgdGhyb3cgZXhjZXB0aW9ucyBhdCBhdHRhY2ggdGltZVxuXHRcdC8vIEV2YWx1YXRlIGFnYWluc3QgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgZWxlbSBpcyBhIG5vbi1lbGVtZW50IG5vZGUgKGUuZy4sIGRvY3VtZW50KVxuXHRcdGlmICggc2VsZWN0b3IgKSB7XG5cdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGRvY3VtZW50RWxlbWVudCwgc2VsZWN0b3IgKTtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXJcblx0XHRpZiAoICFoYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRoYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrO1xuXHRcdH1cblxuXHRcdC8vIEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBzdHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmlyc3Rcblx0XHRpZiAoICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0ZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzID0ge307XG5cdFx0fVxuXHRcdGlmICggISggZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgKSApIHtcblx0XHRcdGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlID0gZnVuY3Rpb24oIGUgKSB7XG5cblx0XHRcdFx0Ly8gRGlzY2FyZCB0aGUgc2Vjb25kIGV2ZW50IG9mIGEgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoKSBhbmRcblx0XHRcdFx0Ly8gd2hlbiBhbiBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgYSBwYWdlIGhhcyB1bmxvYWRlZFxuXHRcdFx0XHRyZXR1cm4gdHlwZW9mIGpRdWVyeSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICE9PSBlLnR5cGUgP1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5kaXNwYXRjaC5hcHBseSggZWxlbSwgYXJndW1lbnRzICkgOiB1bmRlZmluZWQ7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2Vcblx0XHR0eXBlcyA9ICggdHlwZXMgfHwgXCJcIiApLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cdFx0dCA9IHR5cGVzLmxlbmd0aDtcblx0XHR3aGlsZSAoIHQtLSApIHtcblx0XHRcdHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTtcblx0XHRcdHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdO1xuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgXCJcIiApLnNwbGl0KCBcIi5cIiApLnNvcnQoKTtcblxuXHRcdFx0Ly8gVGhlcmUgKm11c3QqIGJlIGEgdHlwZSwgbm8gYXR0YWNoaW5nIG5hbWVzcGFjZS1vbmx5IGhhbmRsZXJzXG5cdFx0XHRpZiAoICF0eXBlICkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgZXZlbnQgY2hhbmdlcyBpdHMgdHlwZSwgdXNlIHRoZSBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgY2hhbmdlZCB0eXBlXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gSWYgc2VsZWN0b3IgZGVmaW5lZCwgZGV0ZXJtaW5lIHNwZWNpYWwgZXZlbnQgYXBpIHR5cGUsIG90aGVyd2lzZSBnaXZlbiB0eXBlXG5cdFx0XHR0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7XG5cblx0XHRcdC8vIFVwZGF0ZSBzcGVjaWFsIGJhc2VkIG9uIG5ld2x5IHJlc2V0IHR5cGVcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXG5cdFx0XHQvLyBoYW5kbGVPYmogaXMgcGFzc2VkIHRvIGFsbCBldmVudCBoYW5kbGVyc1xuXHRcdFx0aGFuZGxlT2JqID0galF1ZXJ5LmV4dGVuZCgge1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRvcmlnVHlwZTogb3JpZ1R5cGUsXG5cdFx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRcdGhhbmRsZXI6IGhhbmRsZXIsXG5cdFx0XHRcdGd1aWQ6IGhhbmRsZXIuZ3VpZCxcblx0XHRcdFx0c2VsZWN0b3I6IHNlbGVjdG9yLFxuXHRcdFx0XHRuZWVkc0NvbnRleHQ6IHNlbGVjdG9yICYmIGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApLFxuXHRcdFx0XHRuYW1lc3BhY2U6IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKVxuXHRcdFx0fSwgaGFuZGxlT2JqSW4gKTtcblxuXHRcdFx0Ly8gSW5pdCB0aGUgZXZlbnQgaGFuZGxlciBxdWV1ZSBpZiB3ZSdyZSB0aGUgZmlyc3Rcblx0XHRcdGlmICggISggaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSApICkge1xuXHRcdFx0XHRoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdID0gW107XG5cdFx0XHRcdGhhbmRsZXJzLmRlbGVnYXRlQ291bnQgPSAwO1xuXG5cdFx0XHRcdC8vIE9ubHkgdXNlIGFkZEV2ZW50TGlzdGVuZXIgaWYgdGhlIHNwZWNpYWwgZXZlbnRzIGhhbmRsZXIgcmV0dXJucyBmYWxzZVxuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnNldHVwIHx8XG5cdFx0XHRcdFx0c3BlY2lhbC5zZXR1cC5jYWxsKCBlbGVtLCBkYXRhLCBuYW1lc3BhY2VzLCBldmVudEhhbmRsZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdGlmICggZWxlbS5hZGRFdmVudExpc3RlbmVyICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBldmVudEhhbmRsZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHNwZWNpYWwuYWRkICkge1xuXHRcdFx0XHRzcGVjaWFsLmFkZC5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcblxuXHRcdFx0XHRpZiAoICFoYW5kbGVPYmouaGFuZGxlci5ndWlkICkge1xuXHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyLmd1aWQgPSBoYW5kbGVyLmd1aWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIHRvIHRoZSBlbGVtZW50J3MgaGFuZGxlciBsaXN0LCBkZWxlZ2F0ZXMgaW4gZnJvbnRcblx0XHRcdGlmICggc2VsZWN0b3IgKSB7XG5cdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaGFuZGxlcnMuZGVsZWdhdGVDb3VudCsrLCAwLCBoYW5kbGVPYmogKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBLZWVwIHRyYWNrIG9mIHdoaWNoIGV2ZW50cyBoYXZlIGV2ZXIgYmVlbiB1c2VkLCBmb3IgZXZlbnQgb3B0aW1pemF0aW9uXG5cdFx0XHRqUXVlcnkuZXZlbnQuZ2xvYmFsWyB0eXBlIF0gPSB0cnVlO1xuXHRcdH1cblxuXHR9LFxuXG5cdC8vIERldGFjaCBhbiBldmVudCBvciBzZXQgb2YgZXZlbnRzIGZyb20gYW4gZWxlbWVudFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgc2VsZWN0b3IsIG1hcHBlZFR5cGVzICkge1xuXG5cdFx0dmFyIGosIG9yaWdDb3VudCwgdG1wLFxuXHRcdFx0ZXZlbnRzLCB0LCBoYW5kbGVPYmosXG5cdFx0XHRzcGVjaWFsLCBoYW5kbGVycywgdHlwZSwgbmFtZXNwYWNlcywgb3JpZ1R5cGUsXG5cdFx0XHRlbGVtRGF0YSA9IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKSAmJiBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdGlmICggIWVsZW1EYXRhIHx8ICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIE9uY2UgZm9yIGVhY2ggdHlwZS5uYW1lc3BhY2UgaW4gdHlwZXM7IHR5cGUgbWF5IGJlIG9taXR0ZWRcblx0XHR0eXBlcyA9ICggdHlwZXMgfHwgXCJcIiApLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cdFx0dCA9IHR5cGVzLmxlbmd0aDtcblx0XHR3aGlsZSAoIHQtLSApIHtcblx0XHRcdHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTtcblx0XHRcdHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdO1xuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgXCJcIiApLnNwbGl0KCBcIi5cIiApLnNvcnQoKTtcblxuXHRcdFx0Ly8gVW5iaW5kIGFsbCBldmVudHMgKG9uIHRoaXMgbmFtZXNwYWNlLCBpZiBwcm92aWRlZCkgZm9yIHRoZSBlbGVtZW50XG5cdFx0XHRpZiAoICF0eXBlICkge1xuXHRcdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICsgdHlwZXNbIHQgXSwgaGFuZGxlciwgc2VsZWN0b3IsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0XHR0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7XG5cdFx0XHRoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdIHx8IFtdO1xuXHRcdFx0dG1wID0gdG1wWyAyIF0gJiZcblx0XHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICk7XG5cblx0XHRcdC8vIFJlbW92ZSBtYXRjaGluZyBldmVudHNcblx0XHRcdG9yaWdDb3VudCA9IGogPSBoYW5kbGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGogXTtcblxuXHRcdFx0XHRpZiAoICggbWFwcGVkVHlwZXMgfHwgb3JpZ1R5cGUgPT09IGhhbmRsZU9iai5vcmlnVHlwZSApICYmXG5cdFx0XHRcdFx0KCAhaGFuZGxlciB8fCBoYW5kbGVyLmd1aWQgPT09IGhhbmRsZU9iai5ndWlkICkgJiZcblx0XHRcdFx0XHQoICF0bXAgfHwgdG1wLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApICYmXG5cdFx0XHRcdFx0KCAhc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IGhhbmRsZU9iai5zZWxlY3RvciB8fFxuXHRcdFx0XHRcdFx0c2VsZWN0b3IgPT09IFwiKipcIiAmJiBoYW5kbGVPYmouc2VsZWN0b3IgKSApIHtcblx0XHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGosIDEgKTtcblxuXHRcdFx0XHRcdGlmICggaGFuZGxlT2JqLnNlbGVjdG9yICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudC0tO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIHNwZWNpYWwucmVtb3ZlICkge1xuXHRcdFx0XHRcdFx0c3BlY2lhbC5yZW1vdmUuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlbW92ZSBnZW5lcmljIGV2ZW50IGhhbmRsZXIgaWYgd2UgcmVtb3ZlZCBzb21ldGhpbmcgYW5kIG5vIG1vcmUgaGFuZGxlcnMgZXhpc3Rcblx0XHRcdC8vIChhdm9pZHMgcG90ZW50aWFsIGZvciBlbmRsZXNzIHJlY3Vyc2lvbiBkdXJpbmcgcmVtb3ZhbCBvZiBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzKVxuXHRcdFx0aWYgKCBvcmlnQ291bnQgJiYgIWhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC50ZWFyZG93biB8fFxuXHRcdFx0XHRcdHNwZWNpYWwudGVhcmRvd24uY2FsbCggZWxlbSwgbmFtZXNwYWNlcywgZWxlbURhdGEuaGFuZGxlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBlbGVtRGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRlbGV0ZSBldmVudHNbIHR5cGUgXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgZGF0YSBhbmQgdGhlIGV4cGFuZG8gaWYgaXQncyBubyBsb25nZXIgdXNlZFxuXHRcdGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGV2ZW50cyApICkge1xuXHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBcImhhbmRsZSBldmVudHNcIiApO1xuXHRcdH1cblx0fSxcblxuXHRkaXNwYXRjaDogZnVuY3Rpb24oIG5hdGl2ZUV2ZW50ICkge1xuXG5cdFx0Ly8gTWFrZSBhIHdyaXRhYmxlIGpRdWVyeS5FdmVudCBmcm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0XG5cdFx0dmFyIGV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggbmF0aXZlRXZlbnQgKTtcblxuXHRcdHZhciBpLCBqLCByZXQsIG1hdGNoZWQsIGhhbmRsZU9iaiwgaGFuZGxlclF1ZXVlLFxuXHRcdFx0YXJncyA9IG5ldyBBcnJheSggYXJndW1lbnRzLmxlbmd0aCApLFxuXHRcdFx0aGFuZGxlcnMgPSAoIGRhdGFQcml2LmdldCggdGhpcywgXCJldmVudHNcIiApIHx8IHt9IClbIGV2ZW50LnR5cGUgXSB8fCBbXSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZXZlbnQudHlwZSBdIHx8IHt9O1xuXG5cdFx0Ly8gVXNlIHRoZSBmaXgtZWQgalF1ZXJ5LkV2ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUgZXZlbnRcblx0XHRhcmdzWyAwIF0gPSBldmVudDtcblxuXHRcdGZvciAoIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrICkge1xuXHRcdFx0YXJnc1sgaSBdID0gYXJndW1lbnRzWyBpIF07XG5cdFx0fVxuXG5cdFx0ZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzO1xuXG5cdFx0Ly8gQ2FsbCB0aGUgcHJlRGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlLCBhbmQgbGV0IGl0IGJhaWwgaWYgZGVzaXJlZFxuXHRcdGlmICggc3BlY2lhbC5wcmVEaXNwYXRjaCAmJiBzcGVjaWFsLnByZURpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERldGVybWluZSBoYW5kbGVyc1xuXHRcdGhhbmRsZXJRdWV1ZSA9IGpRdWVyeS5ldmVudC5oYW5kbGVycy5jYWxsKCB0aGlzLCBldmVudCwgaGFuZGxlcnMgKTtcblxuXHRcdC8vIFJ1biBkZWxlZ2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdhdGlvbiBiZW5lYXRoIHVzXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIG1hdGNoZWQgPSBoYW5kbGVyUXVldWVbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRldmVudC5jdXJyZW50VGFyZ2V0ID0gbWF0Y2hlZC5lbGVtO1xuXG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBoYW5kbGVPYmogPSBtYXRjaGVkLmhhbmRsZXJzWyBqKysgXSApICYmXG5cdFx0XHRcdCFldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXG5cdFx0XHRcdC8vIElmIHRoZSBldmVudCBpcyBuYW1lc3BhY2VkLCB0aGVuIGVhY2ggaGFuZGxlciBpcyBvbmx5IGludm9rZWQgaWYgaXQgaXNcblx0XHRcdFx0Ly8gc3BlY2lhbGx5IHVuaXZlcnNhbCBvciBpdHMgbmFtZXNwYWNlcyBhcmUgYSBzdXBlcnNldCBvZiB0aGUgZXZlbnQncy5cblx0XHRcdFx0aWYgKCAhZXZlbnQucm5hbWVzcGFjZSB8fCBoYW5kbGVPYmoubmFtZXNwYWNlID09PSBmYWxzZSB8fFxuXHRcdFx0XHRcdGV2ZW50LnJuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkge1xuXG5cdFx0XHRcdFx0ZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqO1xuXHRcdFx0XHRcdGV2ZW50LmRhdGEgPSBoYW5kbGVPYmouZGF0YTtcblxuXHRcdFx0XHRcdHJldCA9ICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgaGFuZGxlT2JqLm9yaWdUeXBlIF0gfHwge30gKS5oYW5kbGUgfHxcblx0XHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyICkuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApO1xuXG5cdFx0XHRcdFx0aWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdGlmICggKCBldmVudC5yZXN1bHQgPSByZXQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhbGwgdGhlIHBvc3REaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGVcblx0XHRpZiAoIHNwZWNpYWwucG9zdERpc3BhdGNoICkge1xuXHRcdFx0c3BlY2lhbC5wb3N0RGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdGhhbmRsZXJzOiBmdW5jdGlvbiggZXZlbnQsIGhhbmRsZXJzICkge1xuXHRcdHZhciBpLCBoYW5kbGVPYmosIHNlbCwgbWF0Y2hlZEhhbmRsZXJzLCBtYXRjaGVkU2VsZWN0b3JzLFxuXHRcdFx0aGFuZGxlclF1ZXVlID0gW10sXG5cdFx0XHRkZWxlZ2F0ZUNvdW50ID0gaGFuZGxlcnMuZGVsZWdhdGVDb3VudCxcblx0XHRcdGN1ciA9IGV2ZW50LnRhcmdldDtcblxuXHRcdC8vIEZpbmQgZGVsZWdhdGUgaGFuZGxlcnNcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05XG5cdFx0XHQvLyBCbGFjay1ob2xlIFNWRyA8dXNlPiBpbnN0YW5jZSB0cmVlcyAodHJhYy0xMzE4MClcblx0XHRcdGN1ci5ub2RlVHlwZSAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDJcblx0XHRcdC8vIFN1cHByZXNzIHNwZWMtdmlvbGF0aW5nIGNsaWNrcyBpbmRpY2F0aW5nIGEgbm9uLXByaW1hcnkgcG9pbnRlciBidXR0b24gKHRyYWMtMzg2MSlcblx0XHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50LXR5cGUtY2xpY2tcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExIG9ubHlcblx0XHRcdC8vIC4uLmJ1dCBub3QgYXJyb3cga2V5IFwiY2xpY2tzXCIgb2YgcmFkaW8gaW5wdXRzLCB3aGljaCBjYW4gaGF2ZSBgYnV0dG9uYCAtMSAoZ2gtMjM0Mylcblx0XHRcdCEoIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBldmVudC5idXR0b24gPj0gMSApICkge1xuXG5cdFx0XHRmb3IgKCA7IGN1ciAhPT0gdGhpczsgY3VyID0gY3VyLnBhcmVudE5vZGUgfHwgdGhpcyApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjaGVjayBub24tZWxlbWVudHMgKCMxMzIwOClcblx0XHRcdFx0Ly8gRG9uJ3QgcHJvY2VzcyBjbGlja3Mgb24gZGlzYWJsZWQgZWxlbWVudHMgKCM2OTExLCAjODE2NSwgIzExMzgyLCAjMTE3NjQpXG5cdFx0XHRcdGlmICggY3VyLm5vZGVUeXBlID09PSAxICYmICEoIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBjdXIuZGlzYWJsZWQgPT09IHRydWUgKSApIHtcblx0XHRcdFx0XHRtYXRjaGVkSGFuZGxlcnMgPSBbXTtcblx0XHRcdFx0XHRtYXRjaGVkU2VsZWN0b3JzID0ge307XG5cdFx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBkZWxlZ2F0ZUNvdW50OyBpKysgKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaSBdO1xuXG5cdFx0XHRcdFx0XHQvLyBEb24ndCBjb25mbGljdCB3aXRoIE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoIzEzMjAzKVxuXHRcdFx0XHRcdFx0c2VsID0gaGFuZGxlT2JqLnNlbGVjdG9yICsgXCIgXCI7XG5cblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPSBoYW5kbGVPYmoubmVlZHNDb250ZXh0ID9cblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkoIHNlbCwgdGhpcyApLmluZGV4KCBjdXIgKSA+IC0xIDpcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZmluZCggc2VsLCB0aGlzLCBudWxsLCBbIGN1ciBdICkubGVuZ3RoO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZEhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRIYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBtYXRjaGVkSGFuZGxlcnMgfSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFkZCB0aGUgcmVtYWluaW5nIChkaXJlY3RseS1ib3VuZCkgaGFuZGxlcnNcblx0XHRjdXIgPSB0aGlzO1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCA8IGhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNvdW50ICkgfSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBoYW5kbGVyUXVldWU7XG5cdH0sXG5cblx0YWRkUHJvcDogZnVuY3Rpb24oIG5hbWUsIGhvb2sgKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBqUXVlcnkuRXZlbnQucHJvdG90eXBlLCBuYW1lLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXG5cdFx0XHRnZXQ6IGlzRnVuY3Rpb24oIGhvb2sgKSA/XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gaG9vayggdGhpcy5vcmlnaW5hbEV2ZW50ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IDpcblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLm9yaWdpbmFsRXZlbnRbIG5hbWUgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cblx0XHRcdHNldDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIHRoaXMsIG5hbWUsIHtcblx0XHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHR2YWx1ZTogdmFsdWVcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRmaXg6IGZ1bmN0aW9uKCBvcmlnaW5hbEV2ZW50ICkge1xuXHRcdHJldHVybiBvcmlnaW5hbEV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID9cblx0XHRcdG9yaWdpbmFsRXZlbnQgOlxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCggb3JpZ2luYWxFdmVudCApO1xuXHR9LFxuXG5cdHNwZWNpYWw6IHtcblx0XHRsb2FkOiB7XG5cblx0XHRcdC8vIFByZXZlbnQgdHJpZ2dlcmVkIGltYWdlLmxvYWQgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gd2luZG93LmxvYWRcblx0XHRcdG5vQnViYmxlOiB0cnVlXG5cdFx0fSxcblx0XHRjbGljazoge1xuXG5cdFx0XHQvLyBVdGlsaXplIG5hdGl2ZSBldmVudCB0byBlbnN1cmUgY29ycmVjdCBzdGF0ZSBmb3IgY2hlY2thYmxlIGlucHV0c1xuXHRcdFx0c2V0dXA6IGZ1bmN0aW9uKCBkYXRhICkge1xuXG5cdFx0XHRcdC8vIEZvciBtdXR1YWwgY29tcHJlc3NpYmlsaXR5IHdpdGggX2RlZmF1bHQsIHJlcGxhY2UgYHRoaXNgIGFjY2VzcyB3aXRoIGEgbG9jYWwgdmFyLlxuXHRcdFx0XHQvLyBgfHwgZGF0YWAgaXMgZGVhZCBjb2RlIG1lYW50IG9ubHkgdG8gcHJlc2VydmUgdGhlIHZhcmlhYmxlIHRocm91Z2ggbWluaWZpY2F0aW9uLlxuXHRcdFx0XHR2YXIgZWwgPSB0aGlzIHx8IGRhdGE7XG5cblx0XHRcdFx0Ly8gQ2xhaW0gdGhlIGZpcnN0IGhhbmRsZXJcblx0XHRcdFx0aWYgKCByY2hlY2thYmxlVHlwZS50ZXN0KCBlbC50eXBlICkgJiZcblx0XHRcdFx0XHRlbC5jbGljayAmJiBub2RlTmFtZSggZWwsIFwiaW5wdXRcIiApICkge1xuXG5cdFx0XHRcdFx0Ly8gZGF0YVByaXYuc2V0KCBlbCwgXCJjbGlja1wiLCAuLi4gKVxuXHRcdFx0XHRcdGxldmVyYWdlTmF0aXZlKCBlbCwgXCJjbGlja1wiLCByZXR1cm5UcnVlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXR1cm4gZmFsc2UgdG8gYWxsb3cgbm9ybWFsIHByb2Nlc3NpbmcgaW4gdGhlIGNhbGxlclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9LFxuXHRcdFx0dHJpZ2dlcjogZnVuY3Rpb24oIGRhdGEgKSB7XG5cblx0XHRcdFx0Ly8gRm9yIG11dHVhbCBjb21wcmVzc2liaWxpdHkgd2l0aCBfZGVmYXVsdCwgcmVwbGFjZSBgdGhpc2AgYWNjZXNzIHdpdGggYSBsb2NhbCB2YXIuXG5cdFx0XHRcdC8vIGB8fCBkYXRhYCBpcyBkZWFkIGNvZGUgbWVhbnQgb25seSB0byBwcmVzZXJ2ZSB0aGUgdmFyaWFibGUgdGhyb3VnaCBtaW5pZmljYXRpb24uXG5cdFx0XHRcdHZhciBlbCA9IHRoaXMgfHwgZGF0YTtcblxuXHRcdFx0XHQvLyBGb3JjZSBzZXR1cCBiZWZvcmUgdHJpZ2dlcmluZyBhIGNsaWNrXG5cdFx0XHRcdGlmICggcmNoZWNrYWJsZVR5cGUudGVzdCggZWwudHlwZSApICYmXG5cdFx0XHRcdFx0ZWwuY2xpY2sgJiYgbm9kZU5hbWUoIGVsLCBcImlucHV0XCIgKSApIHtcblxuXHRcdFx0XHRcdGxldmVyYWdlTmF0aXZlKCBlbCwgXCJjbGlja1wiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXR1cm4gbm9uLWZhbHNlIHRvIGFsbG93IG5vcm1hbCBldmVudC1wYXRoIHByb3BhZ2F0aW9uXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRm9yIGNyb3NzLWJyb3dzZXIgY29uc2lzdGVuY3ksIHN1cHByZXNzIG5hdGl2ZSAuY2xpY2soKSBvbiBsaW5rc1xuXHRcdFx0Ly8gQWxzbyBwcmV2ZW50IGl0IGlmIHdlJ3JlIGN1cnJlbnRseSBpbnNpZGUgYSBsZXZlcmFnZWQgbmF0aXZlLWV2ZW50IHN0YWNrXG5cdFx0XHRfZGVmYXVsdDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdFx0XHRyZXR1cm4gcmNoZWNrYWJsZVR5cGUudGVzdCggdGFyZ2V0LnR5cGUgKSAmJlxuXHRcdFx0XHRcdHRhcmdldC5jbGljayAmJiBub2RlTmFtZSggdGFyZ2V0LCBcImlucHV0XCIgKSAmJlxuXHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGFyZ2V0LCBcImNsaWNrXCIgKSB8fFxuXHRcdFx0XHRcdG5vZGVOYW1lKCB0YXJnZXQsIFwiYVwiICk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGJlZm9yZXVubG9hZDoge1xuXHRcdFx0cG9zdERpc3BhdGNoOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCAyMCtcblx0XHRcdFx0Ly8gRmlyZWZveCBkb2Vzbid0IGFsZXJ0IGlmIHRoZSByZXR1cm5WYWx1ZSBmaWVsZCBpcyBub3Qgc2V0LlxuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCAhPT0gdW5kZWZpbmVkICYmIGV2ZW50Lm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0ZXZlbnQub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZSA9IGV2ZW50LnJlc3VsdDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuLy8gRW5zdXJlIHRoZSBwcmVzZW5jZSBvZiBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGhhbmRsZXMgbWFudWFsbHktdHJpZ2dlcmVkXG4vLyBzeW50aGV0aWMgZXZlbnRzIGJ5IGludGVycnVwdGluZyBwcm9ncmVzcyB1bnRpbCByZWludm9rZWQgaW4gcmVzcG9uc2UgdG9cbi8vICpuYXRpdmUqIGV2ZW50cyB0aGF0IGl0IGZpcmVzIGRpcmVjdGx5LCBlbnN1cmluZyB0aGF0IHN0YXRlIGNoYW5nZXMgaGF2ZVxuLy8gYWxyZWFkeSBvY2N1cnJlZCBiZWZvcmUgb3RoZXIgbGlzdGVuZXJzIGFyZSBpbnZva2VkLlxuZnVuY3Rpb24gbGV2ZXJhZ2VOYXRpdmUoIGVsLCB0eXBlLCBleHBlY3RTeW5jICkge1xuXG5cdC8vIE1pc3NpbmcgZXhwZWN0U3luYyBpbmRpY2F0ZXMgYSB0cmlnZ2VyIGNhbGwsIHdoaWNoIG11c3QgZm9yY2Ugc2V0dXAgdGhyb3VnaCBqUXVlcnkuZXZlbnQuYWRkXG5cdGlmICggIWV4cGVjdFN5bmMgKSB7XG5cdFx0aWYgKCBkYXRhUHJpdi5nZXQoIGVsLCB0eXBlICkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC5hZGQoIGVsLCB0eXBlLCByZXR1cm5UcnVlICk7XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFJlZ2lzdGVyIHRoZSBjb250cm9sbGVyIGFzIGEgc3BlY2lhbCB1bml2ZXJzYWwgaGFuZGxlciBmb3IgYWxsIGV2ZW50IG5hbWVzcGFjZXNcblx0ZGF0YVByaXYuc2V0KCBlbCwgdHlwZSwgZmFsc2UgKTtcblx0alF1ZXJ5LmV2ZW50LmFkZCggZWwsIHR5cGUsIHtcblx0XHRuYW1lc3BhY2U6IGZhbHNlLFxuXHRcdGhhbmRsZXI6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciBub3RBc3luYywgcmVzdWx0LFxuXHRcdFx0XHRzYXZlZCA9IGRhdGFQcml2LmdldCggdGhpcywgdHlwZSApO1xuXG5cdFx0XHRpZiAoICggZXZlbnQuaXNUcmlnZ2VyICYgMSApICYmIHRoaXNbIHR5cGUgXSApIHtcblxuXHRcdFx0XHQvLyBJbnRlcnJ1cHQgcHJvY2Vzc2luZyBvZiB0aGUgb3V0ZXIgc3ludGhldGljIC50cmlnZ2VyKCllZCBldmVudFxuXHRcdFx0XHQvLyBTYXZlZCBkYXRhIHNob3VsZCBiZSBmYWxzZSBpbiBzdWNoIGNhc2VzLCBidXQgbWlnaHQgYmUgYSBsZWZ0b3ZlciBjYXB0dXJlIG9iamVjdFxuXHRcdFx0XHQvLyBmcm9tIGFuIGFzeW5jIG5hdGl2ZSBoYW5kbGVyIChnaC00MzUwKVxuXHRcdFx0XHRpZiAoICFzYXZlZC5sZW5ndGggKSB7XG5cblx0XHRcdFx0XHQvLyBTdG9yZSBhcmd1bWVudHMgZm9yIHVzZSB3aGVuIGhhbmRsaW5nIHRoZSBpbm5lciBuYXRpdmUgZXZlbnRcblx0XHRcdFx0XHQvLyBUaGVyZSB3aWxsIGFsd2F5cyBiZSBhdCBsZWFzdCBvbmUgYXJndW1lbnQgKGFuIGV2ZW50IG9iamVjdCksIHNvIHRoaXMgYXJyYXlcblx0XHRcdFx0XHQvLyB3aWxsIG5vdCBiZSBjb25mdXNlZCB3aXRoIGEgbGVmdG92ZXIgY2FwdHVyZSBvYmplY3QuXG5cdFx0XHRcdFx0c2F2ZWQgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIHNhdmVkICk7XG5cblx0XHRcdFx0XHQvLyBUcmlnZ2VyIHRoZSBuYXRpdmUgZXZlbnQgYW5kIGNhcHR1cmUgaXRzIHJlc3VsdFxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExK1xuXHRcdFx0XHRcdC8vIGZvY3VzKCkgYW5kIGJsdXIoKSBhcmUgYXN5bmNocm9ub3VzXG5cdFx0XHRcdFx0bm90QXN5bmMgPSBleHBlY3RTeW5jKCB0aGlzLCB0eXBlICk7XG5cdFx0XHRcdFx0dGhpc1sgdHlwZSBdKCk7XG5cdFx0XHRcdFx0cmVzdWx0ID0gZGF0YVByaXYuZ2V0KCB0aGlzLCB0eXBlICk7XG5cdFx0XHRcdFx0aWYgKCBzYXZlZCAhPT0gcmVzdWx0IHx8IG5vdEFzeW5jICkge1xuXHRcdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCBmYWxzZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQgPSB7fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBzYXZlZCAhPT0gcmVzdWx0ICkge1xuXG5cdFx0XHRcdFx0XHQvLyBDYW5jZWwgdGhlIG91dGVyIHN5bnRoZXRpYyBldmVudFxuXHRcdFx0XHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdC52YWx1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgdGhpcyBpcyBhbiBpbm5lciBzeW50aGV0aWMgZXZlbnQgZm9yIGFuIGV2ZW50IHdpdGggYSBidWJibGluZyBzdXJyb2dhdGVcblx0XHRcdFx0Ly8gKGZvY3VzIG9yIGJsdXIpLCBhc3N1bWUgdGhhdCB0aGUgc3Vycm9nYXRlIGFscmVhZHkgcHJvcGFnYXRlZCBmcm9tIHRyaWdnZXJpbmcgdGhlXG5cdFx0XHRcdC8vIG5hdGl2ZSBldmVudCBhbmQgcHJldmVudCB0aGF0IGZyb20gaGFwcGVuaW5nIGFnYWluIGhlcmUuXG5cdFx0XHRcdC8vIFRoaXMgdGVjaG5pY2FsbHkgZ2V0cyB0aGUgb3JkZXJpbmcgd3Jvbmcgdy5yLnQuIHRvIGAudHJpZ2dlcigpYCAoaW4gd2hpY2ggdGhlXG5cdFx0XHRcdC8vIGJ1YmJsaW5nIHN1cnJvZ2F0ZSBwcm9wYWdhdGVzICphZnRlciogdGhlIG5vbi1idWJibGluZyBiYXNlKSwgYnV0IHRoYXQgc2VlbXNcblx0XHRcdFx0Ly8gbGVzcyBiYWQgdGhhbiBkdXBsaWNhdGlvbi5cblx0XHRcdFx0fSBlbHNlIGlmICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9ICkuZGVsZWdhdGVUeXBlICkge1xuXHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHR9XG5cblx0XHRcdC8vIElmIHRoaXMgaXMgYSBuYXRpdmUgZXZlbnQgdHJpZ2dlcmVkIGFib3ZlLCBldmVyeXRoaW5nIGlzIG5vdyBpbiBvcmRlclxuXHRcdFx0Ly8gRmlyZSBhbiBpbm5lciBzeW50aGV0aWMgZXZlbnQgd2l0aCB0aGUgb3JpZ2luYWwgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCBzYXZlZC5sZW5ndGggKSB7XG5cblx0XHRcdFx0Ly8gLi4uYW5kIGNhcHR1cmUgdGhlIHJlc3VsdFxuXHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIHtcblx0XHRcdFx0XHR2YWx1ZTogalF1ZXJ5LmV2ZW50LnRyaWdnZXIoXG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExK1xuXHRcdFx0XHRcdFx0Ly8gRXh0ZW5kIHdpdGggdGhlIHByb3RvdHlwZSB0byByZXNldCB0aGUgYWJvdmUgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcblx0XHRcdFx0XHRcdGpRdWVyeS5leHRlbmQoIHNhdmVkWyAwIF0sIGpRdWVyeS5FdmVudC5wcm90b3R5cGUgKSxcblx0XHRcdFx0XHRcdHNhdmVkLnNsaWNlKCAxICksXG5cdFx0XHRcdFx0XHR0aGlzXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0Ly8gQWJvcnQgaGFuZGxpbmcgb2YgdGhlIG5hdGl2ZSBldmVudFxuXHRcdFx0XHRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gKTtcbn1cblxualF1ZXJ5LnJlbW92ZUV2ZW50ID0gZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRsZSApIHtcblxuXHQvLyBUaGlzIFwiaWZcIiBpcyBuZWVkZWQgZm9yIHBsYWluIG9iamVjdHNcblx0aWYgKCBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0ZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGUgKTtcblx0fVxufTtcblxualF1ZXJ5LkV2ZW50ID0gZnVuY3Rpb24oIHNyYywgcHJvcHMgKSB7XG5cblx0Ly8gQWxsb3cgaW5zdGFudGlhdGlvbiB3aXRob3V0IHRoZSAnbmV3JyBrZXl3b3JkXG5cdGlmICggISggdGhpcyBpbnN0YW5jZW9mIGpRdWVyeS5FdmVudCApICkge1xuXHRcdHJldHVybiBuZXcgalF1ZXJ5LkV2ZW50KCBzcmMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBFdmVudCBvYmplY3Rcblx0aWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7XG5cdFx0dGhpcy5vcmlnaW5hbEV2ZW50ID0gc3JjO1xuXHRcdHRoaXMudHlwZSA9IHNyYy50eXBlO1xuXG5cdFx0Ly8gRXZlbnRzIGJ1YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50ZWRcblx0XHQvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUgY29ycmVjdCB2YWx1ZS5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHNyYy5kZWZhdWx0UHJldmVudGVkIHx8XG5cdFx0XHRcdHNyYy5kZWZhdWx0UHJldmVudGVkID09PSB1bmRlZmluZWQgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9Mi4zIG9ubHlcblx0XHRcdFx0c3JjLnJldHVyblZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRyZXR1cm5UcnVlIDpcblx0XHRcdHJldHVybkZhbHNlO1xuXG5cdFx0Ly8gQ3JlYXRlIHRhcmdldCBwcm9wZXJ0aWVzXG5cdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDw9NiAtIDcgb25seVxuXHRcdC8vIFRhcmdldCBzaG91bGQgbm90IGJlIGEgdGV4dCBub2RlICgjNTA0LCAjMTMxNDMpXG5cdFx0dGhpcy50YXJnZXQgPSAoIHNyYy50YXJnZXQgJiYgc3JjLnRhcmdldC5ub2RlVHlwZSA9PT0gMyApID9cblx0XHRcdHNyYy50YXJnZXQucGFyZW50Tm9kZSA6XG5cdFx0XHRzcmMudGFyZ2V0O1xuXG5cdFx0dGhpcy5jdXJyZW50VGFyZ2V0ID0gc3JjLmN1cnJlbnRUYXJnZXQ7XG5cdFx0dGhpcy5yZWxhdGVkVGFyZ2V0ID0gc3JjLnJlbGF0ZWRUYXJnZXQ7XG5cblx0Ly8gRXZlbnQgdHlwZVxuXHR9IGVsc2Uge1xuXHRcdHRoaXMudHlwZSA9IHNyYztcblx0fVxuXG5cdC8vIFB1dCBleHBsaWNpdGx5IHByb3ZpZGVkIHByb3BlcnRpZXMgb250byB0aGUgZXZlbnQgb2JqZWN0XG5cdGlmICggcHJvcHMgKSB7XG5cdFx0alF1ZXJ5LmV4dGVuZCggdGhpcywgcHJvcHMgKTtcblx0fVxuXG5cdC8vIENyZWF0ZSBhIHRpbWVzdGFtcCBpZiBpbmNvbWluZyBldmVudCBkb2Vzbid0IGhhdmUgb25lXG5cdHRoaXMudGltZVN0YW1wID0gc3JjICYmIHNyYy50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKTtcblxuXHQvLyBNYXJrIGl0IGFzIGZpeGVkXG5cdHRoaXNbIGpRdWVyeS5leHBhbmRvIF0gPSB0cnVlO1xufTtcblxuLy8galF1ZXJ5LkV2ZW50IGlzIGJhc2VkIG9uIERPTTMgRXZlbnRzIGFzIHNwZWNpZmllZCBieSB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBCaW5kaW5nXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAwMzAzMzEvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sXG5qUXVlcnkuRXZlbnQucHJvdG90eXBlID0ge1xuXHRjb25zdHJ1Y3RvcjogalF1ZXJ5LkV2ZW50LFxuXHRpc0RlZmF1bHRQcmV2ZW50ZWQ6IHJldHVybkZhbHNlLFxuXHRpc1Byb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcblx0aXNTaW11bGF0ZWQ6IGZhbHNlLFxuXG5cdHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH0sXG5cdHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdH1cblxuXHRcdHRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdH1cbn07XG5cbi8vIEluY2x1ZGVzIGFsbCBjb21tb24gZXZlbnQgcHJvcHMgaW5jbHVkaW5nIEtleUV2ZW50IGFuZCBNb3VzZUV2ZW50IHNwZWNpZmljIHByb3BzXG5qUXVlcnkuZWFjaCgge1xuXHRhbHRLZXk6IHRydWUsXG5cdGJ1YmJsZXM6IHRydWUsXG5cdGNhbmNlbGFibGU6IHRydWUsXG5cdGNoYW5nZWRUb3VjaGVzOiB0cnVlLFxuXHRjdHJsS2V5OiB0cnVlLFxuXHRkZXRhaWw6IHRydWUsXG5cdGV2ZW50UGhhc2U6IHRydWUsXG5cdG1ldGFLZXk6IHRydWUsXG5cdHBhZ2VYOiB0cnVlLFxuXHRwYWdlWTogdHJ1ZSxcblx0c2hpZnRLZXk6IHRydWUsXG5cdHZpZXc6IHRydWUsXG5cdFwiY2hhclwiOiB0cnVlLFxuXHRjb2RlOiB0cnVlLFxuXHRjaGFyQ29kZTogdHJ1ZSxcblx0a2V5OiB0cnVlLFxuXHRrZXlDb2RlOiB0cnVlLFxuXHRidXR0b246IHRydWUsXG5cdGJ1dHRvbnM6IHRydWUsXG5cdGNsaWVudFg6IHRydWUsXG5cdGNsaWVudFk6IHRydWUsXG5cdG9mZnNldFg6IHRydWUsXG5cdG9mZnNldFk6IHRydWUsXG5cdHBvaW50ZXJJZDogdHJ1ZSxcblx0cG9pbnRlclR5cGU6IHRydWUsXG5cdHNjcmVlblg6IHRydWUsXG5cdHNjcmVlblk6IHRydWUsXG5cdHRhcmdldFRvdWNoZXM6IHRydWUsXG5cdHRvRWxlbWVudDogdHJ1ZSxcblx0dG91Y2hlczogdHJ1ZSxcblxuXHR3aGljaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBidXR0b24gPSBldmVudC5idXR0b247XG5cblx0XHQvLyBBZGQgd2hpY2ggZm9yIGtleSBldmVudHNcblx0XHRpZiAoIGV2ZW50LndoaWNoID09IG51bGwgJiYgcmtleUV2ZW50LnRlc3QoIGV2ZW50LnR5cGUgKSApIHtcblx0XHRcdHJldHVybiBldmVudC5jaGFyQ29kZSAhPSBudWxsID8gZXZlbnQuY2hhckNvZGUgOiBldmVudC5rZXlDb2RlO1xuXHRcdH1cblxuXHRcdC8vIEFkZCB3aGljaCBmb3IgY2xpY2s6IDEgPT09IGxlZnQ7IDIgPT09IG1pZGRsZTsgMyA9PT0gcmlnaHRcblx0XHRpZiAoICFldmVudC53aGljaCAmJiBidXR0b24gIT09IHVuZGVmaW5lZCAmJiBybW91c2VFdmVudC50ZXN0KCBldmVudC50eXBlICkgKSB7XG5cdFx0XHRpZiAoIGJ1dHRvbiAmIDEgKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGJ1dHRvbiAmIDIgKSB7XG5cdFx0XHRcdHJldHVybiAzO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGJ1dHRvbiAmIDQgKSB7XG5cdFx0XHRcdHJldHVybiAyO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQud2hpY2g7XG5cdH1cbn0sIGpRdWVyeS5ldmVudC5hZGRQcm9wICk7XG5cbmpRdWVyeS5lYWNoKCB7IGZvY3VzOiBcImZvY3VzaW5cIiwgYmx1cjogXCJmb2N1c291dFwiIH0sIGZ1bmN0aW9uKCB0eXBlLCBkZWxlZ2F0ZVR5cGUgKSB7XG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gPSB7XG5cblx0XHQvLyBVdGlsaXplIG5hdGl2ZSBldmVudCBpZiBwb3NzaWJsZSBzbyBibHVyL2ZvY3VzIHNlcXVlbmNlIGlzIGNvcnJlY3Rcblx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIENsYWltIHRoZSBmaXJzdCBoYW5kbGVyXG5cdFx0XHQvLyBkYXRhUHJpdi5zZXQoIHRoaXMsIFwiZm9jdXNcIiwgLi4uIClcblx0XHRcdC8vIGRhdGFQcml2LnNldCggdGhpcywgXCJibHVyXCIsIC4uLiApXG5cdFx0XHRsZXZlcmFnZU5hdGl2ZSggdGhpcywgdHlwZSwgZXhwZWN0U3luYyApO1xuXG5cdFx0XHQvLyBSZXR1cm4gZmFsc2UgdG8gYWxsb3cgbm9ybWFsIHByb2Nlc3NpbmcgaW4gdGhlIGNhbGxlclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cdFx0dHJpZ2dlcjogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEZvcmNlIHNldHVwIGJlZm9yZSB0cmlnZ2VyXG5cdFx0XHRsZXZlcmFnZU5hdGl2ZSggdGhpcywgdHlwZSApO1xuXG5cdFx0XHQvLyBSZXR1cm4gbm9uLWZhbHNlIHRvIGFsbG93IG5vcm1hbCBldmVudC1wYXRoIHByb3BhZ2F0aW9uXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0ZGVsZWdhdGVUeXBlOiBkZWxlZ2F0ZVR5cGVcblx0fTtcbn0gKTtcblxuLy8gQ3JlYXRlIG1vdXNlZW50ZXIvbGVhdmUgZXZlbnRzIHVzaW5nIG1vdXNlb3Zlci9vdXQgYW5kIGV2ZW50LXRpbWUgY2hlY2tzXG4vLyBzbyB0aGF0IGV2ZW50IGRlbGVnYXRpb24gd29ya3MgaW4galF1ZXJ5LlxuLy8gRG8gdGhlIHNhbWUgZm9yIHBvaW50ZXJlbnRlci9wb2ludGVybGVhdmUgYW5kIHBvaW50ZXJvdmVyL3BvaW50ZXJvdXRcbi8vXG4vLyBTdXBwb3J0OiBTYWZhcmkgNyBvbmx5XG4vLyBTYWZhcmkgc2VuZHMgbW91c2VlbnRlciB0b28gb2Z0ZW47IHNlZTpcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ3MDI1OFxuLy8gZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYnVnIChpdCBleGlzdGVkIGluIG9sZGVyIENocm9tZSB2ZXJzaW9ucyBhcyB3ZWxsKS5cbmpRdWVyeS5lYWNoKCB7XG5cdG1vdXNlZW50ZXI6IFwibW91c2VvdmVyXCIsXG5cdG1vdXNlbGVhdmU6IFwibW91c2VvdXRcIixcblx0cG9pbnRlcmVudGVyOiBcInBvaW50ZXJvdmVyXCIsXG5cdHBvaW50ZXJsZWF2ZTogXCJwb2ludGVyb3V0XCJcbn0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBvcmlnIF0gPSB7XG5cdFx0ZGVsZWdhdGVUeXBlOiBmaXgsXG5cdFx0YmluZFR5cGU6IGZpeCxcblxuXHRcdGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIHJldCxcblx0XHRcdFx0dGFyZ2V0ID0gdGhpcyxcblx0XHRcdFx0cmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsXG5cdFx0XHRcdGhhbmRsZU9iaiA9IGV2ZW50LmhhbmRsZU9iajtcblxuXHRcdFx0Ly8gRm9yIG1vdXNlZW50ZXIvbGVhdmUgY2FsbCB0aGUgaGFuZGxlciBpZiByZWxhdGVkIGlzIG91dHNpZGUgdGhlIHRhcmdldC5cblx0XHRcdC8vIE5COiBObyByZWxhdGVkVGFyZ2V0IGlmIHRoZSBtb3VzZSBsZWZ0L2VudGVyZWQgdGhlIGJyb3dzZXIgd2luZG93XG5cdFx0XHRpZiAoICFyZWxhdGVkIHx8ICggcmVsYXRlZCAhPT0gdGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRhcmdldCwgcmVsYXRlZCApICkgKSB7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBoYW5kbGVPYmoub3JpZ1R5cGU7XG5cdFx0XHRcdHJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0ZXZlbnQudHlwZSA9IGZpeDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0b246IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHRvbmU6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgMSApO1xuXHR9LFxuXHRvZmY6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGZuICkge1xuXHRcdHZhciBoYW5kbGVPYmosIHR5cGU7XG5cdFx0aWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2ZW50RGVmYXVsdCAmJiB0eXBlcy5oYW5kbGVPYmogKSB7XG5cblx0XHRcdC8vICggZXZlbnQgKSAgZGlzcGF0Y2hlZCBqUXVlcnkuRXZlbnRcblx0XHRcdGhhbmRsZU9iaiA9IHR5cGVzLmhhbmRsZU9iajtcblx0XHRcdGpRdWVyeSggdHlwZXMuZGVsZWdhdGVUYXJnZXQgKS5vZmYoXG5cdFx0XHRcdGhhbmRsZU9iai5uYW1lc3BhY2UgP1xuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSArIFwiLlwiICsgaGFuZGxlT2JqLm5hbWVzcGFjZSA6XG5cdFx0XHRcdFx0aGFuZGxlT2JqLm9yaWdUeXBlLFxuXHRcdFx0XHRoYW5kbGVPYmouc2VsZWN0b3IsXG5cdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggdHlwZW9mIHR5cGVzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLW9iamVjdCBbLCBzZWxlY3Rvcl0gKVxuXHRcdFx0Zm9yICggdHlwZSBpbiB0eXBlcyApIHtcblx0XHRcdFx0dGhpcy5vZmYoIHR5cGUsIHNlbGVjdG9yLCB0eXBlc1sgdHlwZSBdICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKCBzZWxlY3RvciA9PT0gZmFsc2UgfHwgdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMgWywgZm5dIClcblx0XHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsIHR5cGVzLCBmbiwgc2VsZWN0b3IgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG52YXJcblxuXHQvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5cblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNsaW50L2lzc3Vlcy8zMjI5XG5cdHJ4aHRtbFRhZyA9IC88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKilbXj5dKilcXC8+L2dpLFxuXG5cdC8qIGVzbGludC1lbmFibGUgKi9cblxuXHQvLyBTdXBwb3J0OiBJRSA8PTEwIC0gMTEsIEVkZ2UgMTIgLSAxMyBvbmx5XG5cdC8vIEluIElFL0VkZ2UgdXNpbmcgcmVnZXggZ3JvdXBzIGhlcmUgY2F1c2VzIHNldmVyZSBzbG93ZG93bnMuXG5cdC8vIFNlZSBodHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzE3MzY1MTIvXG5cdHJub0lubmVyaHRtbCA9IC88c2NyaXB0fDxzdHlsZXw8bGluay9pLFxuXG5cdC8vIGNoZWNrZWQ9XCJjaGVja2VkXCIgb3IgY2hlY2tlZFxuXHRyY2hlY2tlZCA9IC9jaGVja2VkXFxzKig/OltePV18PVxccyouY2hlY2tlZC4pL2ksXG5cdHJjbGVhblNjcmlwdCA9IC9eXFxzKjwhKD86XFxbQ0RBVEFcXFt8LS0pfCg/OlxcXVxcXXwtLSk+XFxzKiQvZztcblxuLy8gUHJlZmVyIGEgdGJvZHkgb3ZlciBpdHMgcGFyZW50IHRhYmxlIGZvciBjb250YWluaW5nIG5ldyByb3dzXG5mdW5jdGlvbiBtYW5pcHVsYXRpb25UYXJnZXQoIGVsZW0sIGNvbnRlbnQgKSB7XG5cdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGFibGVcIiApICYmXG5cdFx0bm9kZU5hbWUoIGNvbnRlbnQubm9kZVR5cGUgIT09IDExID8gY29udGVudCA6IGNvbnRlbnQuZmlyc3RDaGlsZCwgXCJ0clwiICkgKSB7XG5cblx0XHRyZXR1cm4galF1ZXJ5KCBlbGVtICkuY2hpbGRyZW4oIFwidGJvZHlcIiApWyAwIF0gfHwgZWxlbTtcblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG4vLyBSZXBsYWNlL3Jlc3RvcmUgdGhlIHR5cGUgYXR0cmlidXRlIG9mIHNjcmlwdCBlbGVtZW50cyBmb3Igc2FmZSBET00gbWFuaXB1bGF0aW9uXG5mdW5jdGlvbiBkaXNhYmxlU2NyaXB0KCBlbGVtICkge1xuXHRlbGVtLnR5cGUgPSAoIGVsZW0uZ2V0QXR0cmlidXRlKCBcInR5cGVcIiApICE9PSBudWxsICkgKyBcIi9cIiArIGVsZW0udHlwZTtcblx0cmV0dXJuIGVsZW07XG59XG5mdW5jdGlvbiByZXN0b3JlU2NyaXB0KCBlbGVtICkge1xuXHRpZiAoICggZWxlbS50eXBlIHx8IFwiXCIgKS5zbGljZSggMCwgNSApID09PSBcInRydWUvXCIgKSB7XG5cdFx0ZWxlbS50eXBlID0gZWxlbS50eXBlLnNsaWNlKCA1ICk7XG5cdH0gZWxzZSB7XG5cdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIFwidHlwZVwiICk7XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHtcblx0dmFyIGksIGwsIHR5cGUsIHBkYXRhT2xkLCBwZGF0YUN1ciwgdWRhdGFPbGQsIHVkYXRhQ3VyLCBldmVudHM7XG5cblx0aWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIDEuIENvcHkgcHJpdmF0ZSBkYXRhOiBldmVudHMsIGhhbmRsZXJzLCBldGMuXG5cdGlmICggZGF0YVByaXYuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0cGRhdGFPbGQgPSBkYXRhUHJpdi5hY2Nlc3MoIHNyYyApO1xuXHRcdHBkYXRhQ3VyID0gZGF0YVByaXYuc2V0KCBkZXN0LCBwZGF0YU9sZCApO1xuXHRcdGV2ZW50cyA9IHBkYXRhT2xkLmV2ZW50cztcblxuXHRcdGlmICggZXZlbnRzICkge1xuXHRcdFx0ZGVsZXRlIHBkYXRhQ3VyLmhhbmRsZTtcblx0XHRcdHBkYXRhQ3VyLmV2ZW50cyA9IHt9O1xuXG5cdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBldmVudHNbIHR5cGUgXS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmFkZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gMi4gQ29weSB1c2VyIGRhdGFcblx0aWYgKCBkYXRhVXNlci5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHR1ZGF0YU9sZCA9IGRhdGFVc2VyLmFjY2Vzcyggc3JjICk7XG5cdFx0dWRhdGFDdXIgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgdWRhdGFPbGQgKTtcblxuXHRcdGRhdGFVc2VyLnNldCggZGVzdCwgdWRhdGFDdXIgKTtcblx0fVxufVxuXG4vLyBGaXggSUUgYnVncywgc2VlIHN1cHBvcnQgdGVzdHNcbmZ1bmN0aW9uIGZpeElucHV0KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBub2RlTmFtZSA9IGRlc3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHQvLyBGYWlscyB0byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvbi5cblx0aWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmIHJjaGVja2FibGVUeXBlLnRlc3QoIHNyYy50eXBlICkgKSB7XG5cdFx0ZGVzdC5jaGVja2VkID0gc3JjLmNoZWNrZWQ7XG5cblx0Ly8gRmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQgc3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlvbnNcblx0fSBlbHNlIGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiB8fCBub2RlTmFtZSA9PT0gXCJ0ZXh0YXJlYVwiICkge1xuXHRcdGRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRlZmF1bHRWYWx1ZTtcblx0fVxufVxuXG5mdW5jdGlvbiBkb21NYW5pcCggY29sbGVjdGlvbiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKSB7XG5cblx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRhcmdzID0gY29uY2F0LmFwcGx5KCBbXSwgYXJncyApO1xuXG5cdHZhciBmcmFnbWVudCwgZmlyc3QsIHNjcmlwdHMsIGhhc1NjcmlwdHMsIG5vZGUsIGRvYyxcblx0XHRpID0gMCxcblx0XHRsID0gY29sbGVjdGlvbi5sZW5ndGgsXG5cdFx0aU5vQ2xvbmUgPSBsIC0gMSxcblx0XHR2YWx1ZSA9IGFyZ3NbIDAgXSxcblx0XHR2YWx1ZUlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCB2YWx1ZSApO1xuXG5cdC8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFnbWVudHMgdGhhdCBjb250YWluIGNoZWNrZWQsIGluIFdlYktpdFxuXHRpZiAoIHZhbHVlSXNGdW5jdGlvbiB8fFxuXHRcdFx0KCBsID4gMSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0IXN1cHBvcnQuY2hlY2tDbG9uZSAmJiByY2hlY2tlZC50ZXN0KCB2YWx1ZSApICkgKSB7XG5cdFx0cmV0dXJuIGNvbGxlY3Rpb24uZWFjaCggZnVuY3Rpb24oIGluZGV4ICkge1xuXHRcdFx0dmFyIHNlbGYgPSBjb2xsZWN0aW9uLmVxKCBpbmRleCApO1xuXHRcdFx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gKSB7XG5cdFx0XHRcdGFyZ3NbIDAgXSA9IHZhbHVlLmNhbGwoIHRoaXMsIGluZGV4LCBzZWxmLmh0bWwoKSApO1xuXHRcdFx0fVxuXHRcdFx0ZG9tTWFuaXAoIHNlbGYsIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICk7XG5cdFx0fSApO1xuXHR9XG5cblx0aWYgKCBsICkge1xuXHRcdGZyYWdtZW50ID0gYnVpbGRGcmFnbWVudCggYXJncywgY29sbGVjdGlvblsgMCBdLm93bmVyRG9jdW1lbnQsIGZhbHNlLCBjb2xsZWN0aW9uLCBpZ25vcmVkICk7XG5cdFx0Zmlyc3QgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0aWYgKCBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSApIHtcblx0XHRcdGZyYWdtZW50ID0gZmlyc3Q7XG5cdFx0fVxuXG5cdFx0Ly8gUmVxdWlyZSBlaXRoZXIgbmV3IGNvbnRlbnQgb3IgYW4gaW50ZXJlc3QgaW4gaWdub3JlZCBlbGVtZW50cyB0byBpbnZva2UgdGhlIGNhbGxiYWNrXG5cdFx0aWYgKCBmaXJzdCB8fCBpZ25vcmVkICkge1xuXHRcdFx0c2NyaXB0cyA9IGpRdWVyeS5tYXAoIGdldEFsbCggZnJhZ21lbnQsIFwic2NyaXB0XCIgKSwgZGlzYWJsZVNjcmlwdCApO1xuXHRcdFx0aGFzU2NyaXB0cyA9IHNjcmlwdHMubGVuZ3RoO1xuXG5cdFx0XHQvLyBVc2UgdGhlIG9yaWdpbmFsIGZyYWdtZW50IGZvciB0aGUgbGFzdCBpdGVtXG5cdFx0XHQvLyBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBiZWNhdXNlIGl0IGNhbiBlbmQgdXBcblx0XHRcdC8vIGJlaW5nIGVtcHRpZWQgaW5jb3JyZWN0bHkgaW4gY2VydGFpbiBzaXR1YXRpb25zICgjODA3MCkuXG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdG5vZGUgPSBmcmFnbWVudDtcblxuXHRcdFx0XHRpZiAoIGkgIT09IGlOb0Nsb25lICkge1xuXHRcdFx0XHRcdG5vZGUgPSBqUXVlcnkuY2xvbmUoIG5vZGUsIHRydWUsIHRydWUgKTtcblxuXHRcdFx0XHRcdC8vIEtlZXAgcmVmZXJlbmNlcyB0byBjbG9uZWQgc2NyaXB0cyBmb3IgbGF0ZXIgcmVzdG9yYXRpb25cblx0XHRcdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBzY3JpcHRzLCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhbGxiYWNrLmNhbGwoIGNvbGxlY3Rpb25bIGkgXSwgbm9kZSwgaSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cdFx0XHRcdGRvYyA9IHNjcmlwdHNbIHNjcmlwdHMubGVuZ3RoIC0gMSBdLm93bmVyRG9jdW1lbnQ7XG5cblx0XHRcdFx0Ly8gUmVlbmFibGUgc2NyaXB0c1xuXHRcdFx0XHRqUXVlcnkubWFwKCBzY3JpcHRzLCByZXN0b3JlU2NyaXB0ICk7XG5cblx0XHRcdFx0Ly8gRXZhbHVhdGUgZXhlY3V0YWJsZSBzY3JpcHRzIG9uIGZpcnN0IGRvY3VtZW50IGluc2VydGlvblxuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGhhc1NjcmlwdHM7IGkrKyApIHtcblx0XHRcdFx0XHRub2RlID0gc2NyaXB0c1sgaSBdO1xuXHRcdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggbm9kZS50eXBlIHx8IFwiXCIgKSAmJlxuXHRcdFx0XHRcdFx0IWRhdGFQcml2LmFjY2Vzcyggbm9kZSwgXCJnbG9iYWxFdmFsXCIgKSAmJlxuXHRcdFx0XHRcdFx0alF1ZXJ5LmNvbnRhaW5zKCBkb2MsIG5vZGUgKSApIHtcblxuXHRcdFx0XHRcdFx0aWYgKCBub2RlLnNyYyAmJiAoIG5vZGUudHlwZSB8fCBcIlwiICkudG9Mb3dlckNhc2UoKSAgIT09IFwibW9kdWxlXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gT3B0aW9uYWwgQUpBWCBkZXBlbmRlbmN5LCBidXQgd29uJ3QgcnVuIHNjcmlwdHMgaWYgbm90IHByZXNlbnRcblx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuX2V2YWxVcmwgJiYgIW5vZGUubm9Nb2R1bGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5Ll9ldmFsVXJsKCBub2RlLnNyYywge1xuXHRcdFx0XHRcdFx0XHRcdFx0bm9uY2U6IG5vZGUubm9uY2UgfHwgbm9kZS5nZXRBdHRyaWJ1dGUoIFwibm9uY2VcIiApXG5cdFx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRET01FdmFsKCBub2RlLnRleHRDb250ZW50LnJlcGxhY2UoIHJjbGVhblNjcmlwdCwgXCJcIiApLCBub2RlLCBkb2MgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY29sbGVjdGlvbjtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlKCBlbGVtLCBzZWxlY3Rvciwga2VlcERhdGEgKSB7XG5cdHZhciBub2RlLFxuXHRcdG5vZGVzID0gc2VsZWN0b3IgPyBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgZWxlbSApIDogZWxlbSxcblx0XHRpID0gMDtcblxuXHRmb3IgKCA7ICggbm9kZSA9IG5vZGVzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0aWYgKCAha2VlcERhdGEgJiYgbm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggbm9kZSApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBub2RlLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRpZiAoIGtlZXBEYXRhICYmIGlzQXR0YWNoZWQoIG5vZGUgKSApIHtcblx0XHRcdFx0c2V0R2xvYmFsRXZhbCggZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdH1cblx0XHRcdG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggbm9kZSApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGh0bWxQcmVmaWx0ZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHJldHVybiBodG1sLnJlcGxhY2UoIHJ4aHRtbFRhZywgXCI8JDE+PC8kMj5cIiApO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0dmFyIGksIGwsIHNyY0VsZW1lbnRzLCBkZXN0RWxlbWVudHMsXG5cdFx0XHRjbG9uZSA9IGVsZW0uY2xvbmVOb2RlKCB0cnVlICksXG5cdFx0XHRpblBhZ2UgPSBpc0F0dGFjaGVkKCBlbGVtICk7XG5cblx0XHQvLyBGaXggSUUgY2xvbmluZyBpc3N1ZXNcblx0XHRpZiAoICFzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkICYmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSApICYmXG5cdFx0XHRcdCFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gV2UgZXNjaGV3IFNpenpsZSBoZXJlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zOiBodHRwczovL2pzcGVyZi5jb20vZ2V0YWxsLXZzLXNpenpsZS8yXG5cdFx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7XG5cdFx0XHRzcmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSApO1xuXG5cdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zml4SW5wdXQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZVxuXHRcdGlmICggZGF0YUFuZEV2ZW50cyApIHtcblx0XHRcdGlmICggZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRcdHNyY0VsZW1lbnRzID0gc3JjRWxlbWVudHMgfHwgZ2V0QWxsKCBlbGVtICk7XG5cdFx0XHRcdGRlc3RFbGVtZW50cyA9IGRlc3RFbGVtZW50cyB8fCBnZXRBbGwoIGNsb25lICk7XG5cblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNsb25lQ29weUV2ZW50KCBlbGVtLCBjbG9uZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lLCBcInNjcmlwdFwiICk7XG5cdFx0aWYgKCBkZXN0RWxlbWVudHMubGVuZ3RoID4gMCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIGRlc3RFbGVtZW50cywgIWluUGFnZSAmJiBnZXRBbGwoIGVsZW0sIFwic2NyaXB0XCIgKSApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiB0aGUgY2xvbmVkIHNldFxuXHRcdHJldHVybiBjbG9uZTtcblx0fSxcblxuXHRjbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblx0XHR2YXIgZGF0YSwgZWxlbSwgdHlwZSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbCxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT09IHVuZGVmaW5lZDsgaSsrICkge1xuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cdFx0XHRcdGlmICggKCBkYXRhID0gZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhLmV2ZW50cyApIHtcblx0XHRcdFx0XHRcdGZvciAoIHR5cGUgaW4gZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggc3BlY2lhbFsgdHlwZSBdICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKTtcblxuXHRcdFx0XHRcdFx0XHQvLyBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gKSB7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1K1xuXHRcdFx0XHRcdC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZVxuXHRcdFx0XHRcdGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGRldGFjaDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yLCB0cnVlICk7XG5cdH0sXG5cblx0cmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IgKTtcblx0fSxcblxuXHR0ZXh0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRqUXVlcnkudGV4dCggdGhpcyApIDpcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0dGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0YXBwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xuXHRcdFx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0cHJlcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZSggZWxlbSwgdGFyZ2V0LmZpcnN0Q2hpbGQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YmVmb3JlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRhZnRlcjogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlbGVtLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7ICggZWxlbSA9IHRoaXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblxuXHRcdFx0XHQvLyBSZW1vdmUgYW55IHJlbWFpbmluZyBub2Rlc1xuXHRcdFx0XHRlbGVtLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdGRhdGFBbmRFdmVudHMgPSBkYXRhQW5kRXZlbnRzID09IG51bGwgPyBmYWxzZSA6IGRhdGFBbmRFdmVudHM7XG5cdFx0ZGVlcERhdGFBbmRFdmVudHMgPSBkZWVwRGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRhQW5kRXZlbnRzO1xuXG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY2xvbmUoIHRoaXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdGh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXSB8fCB7fSxcblx0XHRcdFx0aSA9IDAsXG5cdFx0XHRcdGwgPSB0aGlzLmxlbmd0aDtcblxuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmlubmVySFRNTDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2VlIGlmIHdlIGNhbiB0YWtlIGEgc2hvcnRjdXQgYW5kIGp1c3QgdXNlIGlubmVySFRNTFxuXHRcdFx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgIXJub0lubmVyaHRtbC50ZXN0KCB2YWx1ZSApICYmXG5cdFx0XHRcdCF3cmFwTWFwWyAoIHJ0YWdOYW1lLmV4ZWMoIHZhbHVlICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCkgXSApIHtcblxuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5odG1sUHJlZmlsdGVyKCB2YWx1ZSApO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdFx0ZWxlbSA9IHRoaXNbIGkgXSB8fCB7fTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXHRcdFx0XHRcdFx0XHRlbGVtLmlubmVySFRNTCA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW0gPSAwO1xuXG5cdFx0XHRcdC8vIElmIHVzaW5nIGlubmVySFRNTCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGZhbGxiYWNrIG1ldGhvZFxuXHRcdFx0XHR9IGNhdGNoICggZSApIHt9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmFwcGVuZCggdmFsdWUgKTtcblx0XHRcdH1cblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdHJlcGxhY2VXaXRoOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaWdub3JlZCA9IFtdO1xuXG5cdFx0Ly8gTWFrZSB0aGUgY2hhbmdlcywgcmVwbGFjaW5nIGVhY2ggbm9uLWlnbm9yZWQgY29udGV4dCBlbGVtZW50IHdpdGggdGhlIG5ldyBjb250ZW50XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcblxuXHRcdFx0aWYgKCBqUXVlcnkuaW5BcnJheSggdGhpcywgaWdub3JlZCApIDwgMCApIHtcblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCB0aGlzICkgKTtcblx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnJlcGxhY2VDaGlsZCggZWxlbSwgdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBGb3JjZSBjYWxsYmFjayBpbnZvY2F0aW9uXG5cdFx0fSwgaWdub3JlZCApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCB7XG5cdGFwcGVuZFRvOiBcImFwcGVuZFwiLFxuXHRwcmVwZW5kVG86IFwicHJlcGVuZFwiLFxuXHRpbnNlcnRCZWZvcmU6IFwiYmVmb3JlXCIsXG5cdGluc2VydEFmdGVyOiBcImFmdGVyXCIsXG5cdHJlcGxhY2VBbGw6IFwicmVwbGFjZVdpdGhcIlxufSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgZWxlbXMsXG5cdFx0XHRyZXQgPSBbXSxcblx0XHRcdGluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSxcblx0XHRcdGxhc3QgPSBpbnNlcnQubGVuZ3RoIC0gMSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyBpIDw9IGxhc3Q7IGkrKyApIHtcblx0XHRcdGVsZW1zID0gaSA9PT0gbGFzdCA/IHRoaXMgOiB0aGlzLmNsb25lKCB0cnVlICk7XG5cdFx0XHRqUXVlcnkoIGluc2VydFsgaSBdIClbIG9yaWdpbmFsIF0oIGVsZW1zICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0Ly8gLmdldCgpIGJlY2F1c2UgcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0cHVzaC5hcHBseSggcmV0LCBlbGVtcy5nZXQoKSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0ICk7XG5cdH07XG59ICk7XG52YXIgcm51bW5vbnB4ID0gbmV3IFJlZ0V4cCggXCJeKFwiICsgcG51bSArIFwiKSg/IXB4KVthLXolXSskXCIsIFwiaVwiICk7XG5cbnZhciBnZXRTdHlsZXMgPSBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seSwgRmlyZWZveCA8PTMwICgjMTUwOTgsICMxNDE1MClcblx0XHQvLyBJRSB0aHJvd3Mgb24gZWxlbWVudHMgY3JlYXRlZCBpbiBwb3B1cHNcblx0XHQvLyBGRiBtZWFud2hpbGUgdGhyb3dzIG9uIGZyYW1lIGVsZW1lbnRzIHRocm91Z2ggXCJkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlXCJcblx0XHR2YXIgdmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcblxuXHRcdGlmICggIXZpZXcgfHwgIXZpZXcub3BlbmVyICkge1xuXHRcdFx0dmlldyA9IHdpbmRvdztcblx0XHR9XG5cblx0XHRyZXR1cm4gdmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtICk7XG5cdH07XG5cbnZhciByYm94U3R5bGUgPSBuZXcgUmVnRXhwKCBjc3NFeHBhbmQuam9pbiggXCJ8XCIgKSwgXCJpXCIgKTtcblxuXG5cbiggZnVuY3Rpb24oKSB7XG5cblx0Ly8gRXhlY3V0aW5nIGJvdGggcGl4ZWxQb3NpdGlvbiAmIGJveFNpemluZ1JlbGlhYmxlIHRlc3RzIHJlcXVpcmUgb25seSBvbmUgbGF5b3V0XG5cdC8vIHNvIHRoZXkncmUgZXhlY3V0ZWQgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHRoZSBzZWNvbmQgY29tcHV0YXRpb24uXG5cdGZ1bmN0aW9uIGNvbXB1dGVTdHlsZVRlc3RzKCkge1xuXG5cdFx0Ly8gVGhpcyBpcyBhIHNpbmdsZXRvbiwgd2UgbmVlZCB0byBleGVjdXRlIGl0IG9ubHkgb25jZVxuXHRcdGlmICggIWRpdiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb250YWluZXIuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDt3aWR0aDo2MHB4O1wiICtcblx0XHRcdFwibWFyZ2luLXRvcDoxcHg7cGFkZGluZzowO2JvcmRlcjowXCI7XG5cdFx0ZGl2LnN0eWxlLmNzc1RleHQgPVxuXHRcdFx0XCJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpzY3JvbGw7XCIgK1xuXHRcdFx0XCJtYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4O1wiICtcblx0XHRcdFwid2lkdGg6NjAlO3RvcDoxJVwiO1xuXHRcdGRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggY29udGFpbmVyICkuYXBwZW5kQ2hpbGQoIGRpdiApO1xuXG5cdFx0dmFyIGRpdlN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIGRpdiApO1xuXHRcdHBpeGVsUG9zaXRpb25WYWwgPSBkaXZTdHlsZS50b3AgIT09IFwiMSVcIjtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHksIEZpcmVmb3ggPD0zIC0gNDRcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnRWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLm1hcmdpbkxlZnQgKSA9PT0gMTI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBTYWZhcmkgPD05LjEgLSAxMC4xLCBpT1MgPD03LjAgLSA5LjNcblx0XHQvLyBTb21lIHN0eWxlcyBjb21lIGJhY2sgd2l0aCBwZXJjZW50YWdlIHZhbHVlcywgZXZlbiB0aG91Z2ggdGhleSBzaG91bGRuJ3Rcblx0XHRkaXYuc3R5bGUucmlnaHQgPSBcIjYwJVwiO1xuXHRcdHBpeGVsQm94U3R5bGVzVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5yaWdodCApID09PSAzNjtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdFx0Ly8gRGV0ZWN0IG1pc3JlcG9ydGluZyBvZiBjb250ZW50IGRpbWVuc2lvbnMgZm9yIGJveC1zaXppbmc6Ym9yZGVyLWJveCBlbGVtZW50c1xuXHRcdGJveFNpemluZ1JlbGlhYmxlVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS53aWR0aCApID09PSAzNjtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdC8vIERldGVjdCBvdmVyZmxvdzpzY3JvbGwgc2NyZXdpbmVzcyAoZ2gtMzY5OSlcblx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD02NFxuXHRcdC8vIERvbid0IGdldCB0cmlja2VkIHdoZW4gem9vbSBhZmZlY3RzIG9mZnNldFdpZHRoIChnaC00MDI5KVxuXHRcdGRpdi5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblx0XHRzY3JvbGxib3hTaXplVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXYub2Zmc2V0V2lkdGggLyAzICkgPT09IDEyO1xuXG5cdFx0ZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTtcblxuXHRcdC8vIE51bGxpZnkgdGhlIGRpdiBzbyBpdCB3b3VsZG4ndCBiZSBzdG9yZWQgaW4gdGhlIG1lbW9yeSBhbmRcblx0XHQvLyBpdCB3aWxsIGFsc28gYmUgYSBzaWduIHRoYXQgY2hlY2tzIGFscmVhZHkgcGVyZm9ybWVkXG5cdFx0ZGl2ID0gbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIHJvdW5kUGl4ZWxNZWFzdXJlcyggbWVhc3VyZSApIHtcblx0XHRyZXR1cm4gTWF0aC5yb3VuZCggcGFyc2VGbG9hdCggbWVhc3VyZSApICk7XG5cdH1cblxuXHR2YXIgcGl4ZWxQb3NpdGlvblZhbCwgYm94U2l6aW5nUmVsaWFibGVWYWwsIHNjcm9sbGJveFNpemVWYWwsIHBpeGVsQm94U3R5bGVzVmFsLFxuXHRcdHJlbGlhYmxlTWFyZ2luTGVmdFZhbCxcblx0XHRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICksXG5cdFx0ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApO1xuXG5cdC8vIEZpbmlzaCBlYXJseSBpbiBsaW1pdGVkIChub24tYnJvd3NlcikgZW52aXJvbm1lbnRzXG5cdGlmICggIWRpdi5zdHlsZSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdC8vIFN0eWxlIG9mIGNsb25lZCBlbGVtZW50IGFmZmVjdHMgc291cmNlIGVsZW1lbnQgY2xvbmVkICgjODkwOClcblx0ZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJjb250ZW50LWJveFwiO1xuXHRkaXYuY2xvbmVOb2RlKCB0cnVlICkuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcIlwiO1xuXHRzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSA9IGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9PT0gXCJjb250ZW50LWJveFwiO1xuXG5cdGpRdWVyeS5leHRlbmQoIHN1cHBvcnQsIHtcblx0XHRib3hTaXppbmdSZWxpYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIGJveFNpemluZ1JlbGlhYmxlVmFsO1xuXHRcdH0sXG5cdFx0cGl4ZWxCb3hTdHlsZXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbEJveFN0eWxlc1ZhbDtcblx0XHR9LFxuXHRcdHBpeGVsUG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbFBvc2l0aW9uVmFsO1xuXHRcdH0sXG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0OiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcmVsaWFibGVNYXJnaW5MZWZ0VmFsO1xuXHRcdH0sXG5cdFx0c2Nyb2xsYm94U2l6ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHNjcm9sbGJveFNpemVWYWw7XG5cdFx0fVxuXHR9ICk7XG59ICkoKTtcblxuXG5mdW5jdGlvbiBjdXJDU1MoIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkge1xuXHR2YXIgd2lkdGgsIG1pbldpZHRoLCBtYXhXaWR0aCwgcmV0LFxuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA1MStcblx0XHQvLyBSZXRyaWV2aW5nIHN0eWxlIGJlZm9yZSBjb21wdXRlZCBzb21laG93XG5cdFx0Ly8gZml4ZXMgYW4gaXNzdWUgd2l0aCBnZXR0aW5nIHdyb25nIHZhbHVlc1xuXHRcdC8vIG9uIGRldGFjaGVkIGVsZW1lbnRzXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdGNvbXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7XG5cblx0Ly8gZ2V0UHJvcGVydHlWYWx1ZSBpcyBuZWVkZWQgZm9yOlxuXHQvLyAgIC5jc3MoJ2ZpbHRlcicpIChJRSA5IG9ubHksICMxMjUzNylcblx0Ly8gICAuY3NzKCctLWN1c3RvbVByb3BlcnR5KSAoIzMxNDQpXG5cdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0cmV0ID0gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSggbmFtZSApIHx8IGNvbXB1dGVkWyBuYW1lIF07XG5cblx0XHRpZiAoIHJldCA9PT0gXCJcIiAmJiAhaXNBdHRhY2hlZCggZWxlbSApICkge1xuXHRcdFx0cmV0ID0galF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gQSB0cmlidXRlIHRvIHRoZSBcImF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHNcIlxuXHRcdC8vIEFuZHJvaWQgQnJvd3NlciByZXR1cm5zIHBlcmNlbnRhZ2UgZm9yIHNvbWUgdmFsdWVzLFxuXHRcdC8vIGJ1dCB3aWR0aCBzZWVtcyB0byBiZSByZWxpYWJseSBwaXhlbHMuXG5cdFx0Ly8gVGhpcyBpcyBhZ2FpbnN0IHRoZSBDU1NPTSBkcmFmdCBzcGVjOlxuXHRcdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jcmVzb2x2ZWQtdmFsdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5waXhlbEJveFN0eWxlcygpICYmIHJudW1ub25weC50ZXN0KCByZXQgKSAmJiByYm94U3R5bGUudGVzdCggbmFtZSApICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgb3JpZ2luYWwgdmFsdWVzXG5cdFx0XHR3aWR0aCA9IHN0eWxlLndpZHRoO1xuXHRcdFx0bWluV2lkdGggPSBzdHlsZS5taW5XaWR0aDtcblx0XHRcdG1heFdpZHRoID0gc3R5bGUubWF4V2lkdGg7XG5cblx0XHRcdC8vIFB1dCBpbiB0aGUgbmV3IHZhbHVlcyB0byBnZXQgYSBjb21wdXRlZCB2YWx1ZSBvdXRcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gc3R5bGUubWF4V2lkdGggPSBzdHlsZS53aWR0aCA9IHJldDtcblx0XHRcdHJldCA9IGNvbXB1dGVkLndpZHRoO1xuXG5cdFx0XHQvLyBSZXZlcnQgdGhlIGNoYW5nZWQgdmFsdWVzXG5cdFx0XHRzdHlsZS53aWR0aCA9IHdpZHRoO1xuXHRcdFx0c3R5bGUubWluV2lkdGggPSBtaW5XaWR0aDtcblx0XHRcdHN0eWxlLm1heFdpZHRoID0gbWF4V2lkdGg7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJldCAhPT0gdW5kZWZpbmVkID9cblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0XHQvLyBJRSByZXR1cm5zIHpJbmRleCB2YWx1ZSBhcyBhbiBpbnRlZ2VyLlxuXHRcdHJldCArIFwiXCIgOlxuXHRcdHJldDtcbn1cblxuXG5mdW5jdGlvbiBhZGRHZXRIb29rSWYoIGNvbmRpdGlvbkZuLCBob29rRm4gKSB7XG5cblx0Ly8gRGVmaW5lIHRoZSBob29rLCB3ZSdsbCBjaGVjayBvbiB0aGUgZmlyc3QgcnVuIGlmIGl0J3MgcmVhbGx5IG5lZWRlZC5cblx0cmV0dXJuIHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBjb25kaXRpb25GbigpICkge1xuXG5cdFx0XHRcdC8vIEhvb2sgbm90IG5lZWRlZCAob3IgaXQncyBub3QgcG9zc2libGUgdG8gdXNlIGl0IGR1ZVxuXHRcdFx0XHQvLyB0byBtaXNzaW5nIGRlcGVuZGVuY3kpLCByZW1vdmUgaXQuXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLmdldDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBIb29rIG5lZWRlZDsgcmVkZWZpbmUgaXQgc28gdGhhdCB0aGUgc3VwcG9ydCB0ZXN0IGlzIG5vdCBleGVjdXRlZCBhZ2Fpbi5cblx0XHRcdHJldHVybiAoIHRoaXMuZ2V0ID0gaG9va0ZuICkuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH1cblx0fTtcbn1cblxuXG52YXIgY3NzUHJlZml4ZXMgPSBbIFwiV2Via2l0XCIsIFwiTW96XCIsIFwibXNcIiBdLFxuXHRlbXB0eVN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLnN0eWxlLFxuXHR2ZW5kb3JQcm9wcyA9IHt9O1xuXG4vLyBSZXR1cm4gYSB2ZW5kb3ItcHJlZml4ZWQgcHJvcGVydHkgb3IgdW5kZWZpbmVkXG5mdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHtcblxuXHQvLyBDaGVjayBmb3IgdmVuZG9yIHByZWZpeGVkIG5hbWVzXG5cdHZhciBjYXBOYW1lID0gbmFtZVsgMCBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKCAxICksXG5cdFx0aSA9IGNzc1ByZWZpeGVzLmxlbmd0aDtcblxuXHR3aGlsZSAoIGktLSApIHtcblx0XHRuYW1lID0gY3NzUHJlZml4ZXNbIGkgXSArIGNhcE5hbWU7XG5cdFx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0XHRyZXR1cm4gbmFtZTtcblx0XHR9XG5cdH1cbn1cblxuLy8gUmV0dXJuIGEgcG90ZW50aWFsbHktbWFwcGVkIGpRdWVyeS5jc3NQcm9wcyBvciB2ZW5kb3IgcHJlZml4ZWQgcHJvcGVydHlcbmZ1bmN0aW9uIGZpbmFsUHJvcE5hbWUoIG5hbWUgKSB7XG5cdHZhciBmaW5hbCA9IGpRdWVyeS5jc3NQcm9wc1sgbmFtZSBdIHx8IHZlbmRvclByb3BzWyBuYW1lIF07XG5cblx0aWYgKCBmaW5hbCApIHtcblx0XHRyZXR1cm4gZmluYWw7XG5cdH1cblx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cblx0cmV0dXJuIHZlbmRvclByb3BzWyBuYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHx8IG5hbWU7XG59XG5cblxudmFyXG5cblx0Ly8gU3dhcHBhYmxlIGlmIGRpc3BsYXkgaXMgbm9uZSBvciBzdGFydHMgd2l0aCB0YWJsZVxuXHQvLyBleGNlcHQgXCJ0YWJsZVwiLCBcInRhYmxlLWNlbGxcIiwgb3IgXCJ0YWJsZS1jYXB0aW9uXCJcblx0Ly8gU2VlIGhlcmUgZm9yIGRpc3BsYXkgdmFsdWVzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9kaXNwbGF5XG5cdHJkaXNwbGF5c3dhcCA9IC9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxcblx0cmN1c3RvbVByb3AgPSAvXi0tLyxcblx0Y3NzU2hvdyA9IHsgcG9zaXRpb246IFwiYWJzb2x1dGVcIiwgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiwgZGlzcGxheTogXCJibG9ja1wiIH0sXG5cdGNzc05vcm1hbFRyYW5zZm9ybSA9IHtcblx0XHRsZXR0ZXJTcGFjaW5nOiBcIjBcIixcblx0XHRmb250V2VpZ2h0OiBcIjQwMFwiXG5cdH07XG5cbmZ1bmN0aW9uIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgc3VidHJhY3QgKSB7XG5cblx0Ly8gQW55IHJlbGF0aXZlICgrLy0pIHZhbHVlcyBoYXZlIGFscmVhZHkgYmVlblxuXHQvLyBub3JtYWxpemVkIGF0IHRoaXMgcG9pbnRcblx0dmFyIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICk7XG5cdHJldHVybiBtYXRjaGVzID9cblxuXHRcdC8vIEd1YXJkIGFnYWluc3QgdW5kZWZpbmVkIFwic3VidHJhY3RcIiwgZS5nLiwgd2hlbiB1c2VkIGFzIGluIGNzc0hvb2tzXG5cdFx0TWF0aC5tYXgoIDAsIG1hdGNoZXNbIDIgXSAtICggc3VidHJhY3QgfHwgMCApICkgKyAoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSA6XG5cdFx0dmFsdWU7XG59XG5cbmZ1bmN0aW9uIGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBib3gsIGlzQm9yZGVyQm94LCBzdHlsZXMsIGNvbXB1dGVkVmFsICkge1xuXHR2YXIgaSA9IGRpbWVuc2lvbiA9PT0gXCJ3aWR0aFwiID8gMSA6IDAsXG5cdFx0ZXh0cmEgPSAwLFxuXHRcdGRlbHRhID0gMDtcblxuXHQvLyBBZGp1c3RtZW50IG1heSBub3QgYmUgbmVjZXNzYXJ5XG5cdGlmICggYm94ID09PSAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICkgKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgKSB7XG5cblx0XHQvLyBCb3RoIGJveCBtb2RlbHMgZXhjbHVkZSBtYXJnaW5cblx0XHRpZiAoIGJveCA9PT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIGJveCArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgY29udGVudC1ib3gsIHdlJ3JlIHNlZWtpbmcgXCJwYWRkaW5nXCIgb3IgXCJib3JkZXJcIiBvciBcIm1hcmdpblwiXG5cdFx0aWYgKCAhaXNCb3JkZXJCb3ggKSB7XG5cblx0XHRcdC8vIEFkZCBwYWRkaW5nXG5cdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblxuXHRcdFx0Ly8gRm9yIFwiYm9yZGVyXCIgb3IgXCJtYXJnaW5cIiwgYWRkIGJvcmRlclxuXHRcdFx0aWYgKCBib3ggIT09IFwicGFkZGluZ1wiICkge1xuXHRcdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXG5cdFx0XHQvLyBCdXQgc3RpbGwga2VlcCB0cmFjayBvZiBpdCBvdGhlcndpc2Vcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGV4dHJhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgYm9yZGVyLWJveCAoY29udGVudCArIHBhZGRpbmcgKyBib3JkZXIpLCB3ZSdyZSBzZWVraW5nIFwiY29udGVudFwiIG9yXG5cdFx0Ly8gXCJwYWRkaW5nXCIgb3IgXCJtYXJnaW5cIlxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIEZvciBcImNvbnRlbnRcIiwgc3VidHJhY3QgcGFkZGluZ1xuXHRcdFx0aWYgKCBib3ggPT09IFwiY29udGVudFwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yIFwiY29udGVudFwiIG9yIFwicGFkZGluZ1wiLCBzdWJ0cmFjdCBib3JkZXJcblx0XHRcdGlmICggYm94ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFjY291bnQgZm9yIHBvc2l0aXZlIGNvbnRlbnQtYm94IHNjcm9sbCBndXR0ZXIgd2hlbiByZXF1ZXN0ZWQgYnkgcHJvdmlkaW5nIGNvbXB1dGVkVmFsXG5cdGlmICggIWlzQm9yZGVyQm94ICYmIGNvbXB1dGVkVmFsID49IDAgKSB7XG5cblx0XHQvLyBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgYSByb3VuZGVkIHN1bSBvZiBjb250ZW50LCBwYWRkaW5nLCBzY3JvbGwgZ3V0dGVyLCBhbmQgYm9yZGVyXG5cdFx0Ly8gQXNzdW1pbmcgaW50ZWdlciBzY3JvbGwgZ3V0dGVyLCBzdWJ0cmFjdCB0aGUgcmVzdCBhbmQgcm91bmQgZG93blxuXHRcdGRlbHRhICs9IE1hdGgubWF4KCAwLCBNYXRoLmNlaWwoXG5cdFx0XHRlbGVtWyBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApIF0gLVxuXHRcdFx0Y29tcHV0ZWRWYWwgLVxuXHRcdFx0ZGVsdGEgLVxuXHRcdFx0ZXh0cmEgLVxuXHRcdFx0MC41XG5cblx0XHQvLyBJZiBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgdW5rbm93biwgdGhlbiB3ZSBjYW4ndCBkZXRlcm1pbmUgY29udGVudC1ib3ggc2Nyb2xsIGd1dHRlclxuXHRcdC8vIFVzZSBhbiBleHBsaWNpdCB6ZXJvIHRvIGF2b2lkIE5hTiAoZ2gtMzk2NClcblx0XHQpICkgfHwgMDtcblx0fVxuXG5cdHJldHVybiBkZWx0YTtcbn1cblxuZnVuY3Rpb24gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApIHtcblxuXHQvLyBTdGFydCB3aXRoIGNvbXB1dGVkIHN0eWxlXG5cdHZhciBzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblxuXHRcdC8vIFRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3csIG9ubHkgZmV0Y2ggYm94U2l6aW5nIGlmIHdlIG5lZWQgaXQgKGdoLTQzMjIpLlxuXHRcdC8vIEZha2UgY29udGVudC1ib3ggdW50aWwgd2Uga25vdyBpdCdzIG5lZWRlZCB0byBrbm93IHRoZSB0cnVlIHZhbHVlLlxuXHRcdGJveFNpemluZ05lZWRlZCA9ICFzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgfHwgZXh0cmEsXG5cdFx0aXNCb3JkZXJCb3ggPSBib3hTaXppbmdOZWVkZWQgJiZcblx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCIsXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IGlzQm9yZGVyQm94LFxuXG5cdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBkaW1lbnNpb24sIHN0eWxlcyApLFxuXHRcdG9mZnNldFByb3AgPSBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApO1xuXG5cdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NFxuXHQvLyBSZXR1cm4gYSBjb25mb3VuZGluZyBub24tcGl4ZWwgdmFsdWUgb3IgZmVpZ24gaWdub3JhbmNlLCBhcyBhcHByb3ByaWF0ZS5cblx0aWYgKCBybnVtbm9ucHgudGVzdCggdmFsICkgKSB7XG5cdFx0aWYgKCAhZXh0cmEgKSB7XG5cdFx0XHRyZXR1cm4gdmFsO1xuXHRcdH1cblx0XHR2YWwgPSBcImF1dG9cIjtcblx0fVxuXG5cblx0Ly8gRmFsbCBiYWNrIHRvIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCB3aGVuIHZhbHVlIGlzIFwiYXV0b1wiXG5cdC8vIFRoaXMgaGFwcGVucyBmb3IgaW5saW5lIGVsZW1lbnRzIHdpdGggbm8gZXhwbGljaXQgc2V0dGluZyAoZ2gtMzU3MSlcblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSAtIDQuMyBvbmx5XG5cdC8vIEFsc28gdXNlIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBmb3IgbWlzcmVwb3J0ZWQgaW5saW5lIGRpbWVuc2lvbnMgKGdoLTM2MDIpXG5cdC8vIFN1cHBvcnQ6IElFIDktMTEgb25seVxuXHQvLyBBbHNvIHVzZSBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgZm9yIHdoZW4gYm94IHNpemluZyBpcyB1bnJlbGlhYmxlXG5cdC8vIFdlIHVzZSBnZXRDbGllbnRSZWN0cygpIHRvIGNoZWNrIGZvciBoaWRkZW4vZGlzY29ubmVjdGVkLlxuXHQvLyBJbiB0aG9zZSBjYXNlcywgdGhlIGNvbXB1dGVkIHZhbHVlIGNhbiBiZSB0cnVzdGVkIHRvIGJlIGJvcmRlci1ib3hcblx0aWYgKCAoICFzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgJiYgaXNCb3JkZXJCb3ggfHxcblx0XHR2YWwgPT09IFwiYXV0b1wiIHx8XG5cdFx0IXBhcnNlRmxvYXQoIHZhbCApICYmIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiaW5saW5lXCIgKSAmJlxuXHRcdGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7XG5cblx0XHRpc0JvcmRlckJveCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCI7XG5cblx0XHQvLyBXaGVyZSBhdmFpbGFibGUsIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBhcHByb3hpbWF0ZSBib3JkZXIgYm94IGRpbWVuc2lvbnMuXG5cdFx0Ly8gV2hlcmUgbm90IGF2YWlsYWJsZSAoZS5nLiwgU1ZHKSwgYXNzdW1lIHVucmVsaWFibGUgYm94LXNpemluZyBhbmQgaW50ZXJwcmV0IHRoZVxuXHRcdC8vIHJldHJpZXZlZCB2YWx1ZSBhcyBhIGNvbnRlbnQgYm94IGRpbWVuc2lvbi5cblx0XHR2YWx1ZUlzQm9yZGVyQm94ID0gb2Zmc2V0UHJvcCBpbiBlbGVtO1xuXHRcdGlmICggdmFsdWVJc0JvcmRlckJveCApIHtcblx0XHRcdHZhbCA9IGVsZW1bIG9mZnNldFByb3AgXTtcblx0XHR9XG5cdH1cblxuXHQvLyBOb3JtYWxpemUgXCJcIiBhbmQgYXV0b1xuXHR2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwO1xuXG5cdC8vIEFkanVzdCBmb3IgdGhlIGVsZW1lbnQncyBib3ggbW9kZWxcblx0cmV0dXJuICggdmFsICtcblx0XHRib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRlbGVtLFxuXHRcdFx0ZGltZW5zaW9uLFxuXHRcdFx0ZXh0cmEgfHwgKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApLFxuXHRcdFx0dmFsdWVJc0JvcmRlckJveCxcblx0XHRcdHN0eWxlcyxcblxuXHRcdFx0Ly8gUHJvdmlkZSB0aGUgY3VycmVudCBjb21wdXRlZCBzaXplIHRvIHJlcXVlc3Qgc2Nyb2xsIGd1dHRlciBjYWxjdWxhdGlvbiAoZ2gtMzU4OSlcblx0XHRcdHZhbFxuXHRcdClcblx0KSArIFwicHhcIjtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIEFkZCBpbiBzdHlsZSBwcm9wZXJ0eSBob29rcyBmb3Igb3ZlcnJpZGluZyB0aGUgZGVmYXVsdFxuXHQvLyBiZWhhdmlvciBvZiBnZXR0aW5nIGFuZCBzZXR0aW5nIGEgc3R5bGUgcHJvcGVydHlcblx0Y3NzSG9va3M6IHtcblx0XHRvcGFjaXR5OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdFx0XHRcdC8vIFdlIHNob3VsZCBhbHdheXMgZ2V0IGEgbnVtYmVyIGJhY2sgZnJvbSBvcGFjaXR5XG5cdFx0XHRcdFx0dmFyIHJldCA9IGN1ckNTUyggZWxlbSwgXCJvcGFjaXR5XCIgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmV0ID09PSBcIlwiID8gXCIxXCIgOiByZXQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0Ly8gRG9uJ3QgYXV0b21hdGljYWxseSBhZGQgXCJweFwiIHRvIHRoZXNlIHBvc3NpYmx5LXVuaXRsZXNzIHByb3BlcnRpZXNcblx0Y3NzTnVtYmVyOiB7XG5cdFx0XCJhbmltYXRpb25JdGVyYXRpb25Db3VudFwiOiB0cnVlLFxuXHRcdFwiY29sdW1uQ291bnRcIjogdHJ1ZSxcblx0XHRcImZpbGxPcGFjaXR5XCI6IHRydWUsXG5cdFx0XCJmbGV4R3Jvd1wiOiB0cnVlLFxuXHRcdFwiZmxleFNocmlua1wiOiB0cnVlLFxuXHRcdFwiZm9udFdlaWdodFwiOiB0cnVlLFxuXHRcdFwiZ3JpZEFyZWFcIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5cIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5FbmRcIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5TdGFydFwiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd1wiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd0VuZFwiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd1N0YXJ0XCI6IHRydWUsXG5cdFx0XCJsaW5lSGVpZ2h0XCI6IHRydWUsXG5cdFx0XCJvcGFjaXR5XCI6IHRydWUsXG5cdFx0XCJvcmRlclwiOiB0cnVlLFxuXHRcdFwib3JwaGFuc1wiOiB0cnVlLFxuXHRcdFwid2lkb3dzXCI6IHRydWUsXG5cdFx0XCJ6SW5kZXhcIjogdHJ1ZSxcblx0XHRcInpvb21cIjogdHJ1ZVxuXHR9LFxuXG5cdC8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3NlIG5hbWVzIHlvdSB3aXNoIHRvIGZpeCBiZWZvcmVcblx0Ly8gc2V0dGluZyBvciBnZXR0aW5nIHRoZSB2YWx1ZVxuXHRjc3NQcm9wczoge30sXG5cblx0Ly8gR2V0IGFuZCBzZXQgdGhlIHN0eWxlIHByb3BlcnR5IG9uIGEgRE9NIE5vZGVcblx0c3R5bGU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7XG5cblx0XHQvLyBEb24ndCBzZXQgc3R5bGVzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoICFlbGVtIHx8IGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWVcblx0XHR2YXIgcmV0LCB0eXBlLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0gY2FtZWxDYXNlKCBuYW1lICksXG5cdFx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICksXG5cdFx0XHRzdHlsZSA9IGVsZW0uc3R5bGU7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUuIFdlIGRvbid0XG5cdFx0Ly8gd2FudCB0byBxdWVyeSB0aGUgdmFsdWUgaWYgaXQgaXMgYSBDU1MgY3VzdG9tIHByb3BlcnR5XG5cdFx0Ly8gc2luY2UgdGhleSBhcmUgdXNlci1kZWZpbmVkLlxuXHRcdGlmICggIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdG5hbWUgPSBmaW5hbFByb3BOYW1lKCBvcmlnTmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIEdldHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24sIHRoZW4gdW5wcmVmaXhlZCB2ZXJzaW9uXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBDaGVjayBpZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWVcblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR0eXBlID0gdHlwZW9mIHZhbHVlO1xuXG5cdFx0XHQvLyBDb252ZXJ0IFwiKz1cIiBvciBcIi09XCIgdG8gcmVsYXRpdmUgbnVtYmVycyAoIzczNDUpXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwic3RyaW5nXCIgJiYgKCByZXQgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJiByZXRbIDEgXSApIHtcblx0XHRcdFx0dmFsdWUgPSBhZGp1c3RDU1MoIGVsZW0sIG5hbWUsIHJldCApO1xuXG5cdFx0XHRcdC8vIEZpeGVzIGJ1ZyAjOTIzN1xuXHRcdFx0XHR0eXBlID0gXCJudW1iZXJcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgbnVsbCBhbmQgTmFOIHZhbHVlcyBhcmVuJ3Qgc2V0ICgjNzExNilcblx0XHRcdGlmICggdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBudW1iZXIgd2FzIHBhc3NlZCBpbiwgYWRkIHRoZSB1bml0IChleGNlcHQgZm9yIGNlcnRhaW4gQ1NTIHByb3BlcnRpZXMpXG5cdFx0XHQvLyBUaGUgaXNDdXN0b21Qcm9wIGNoZWNrIGNhbiBiZSByZW1vdmVkIGluIGpRdWVyeSA0LjAgd2hlbiB3ZSBvbmx5IGF1dG8tYXBwZW5kXG5cdFx0XHQvLyBcInB4XCIgdG8gYSBmZXcgaGFyZGNvZGVkIHZhbHVlcy5cblx0XHRcdGlmICggdHlwZSA9PT0gXCJudW1iZXJcIiAmJiAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0XHR2YWx1ZSArPSByZXQgJiYgcmV0WyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBvcmlnTmFtZSBdID8gXCJcIiA6IFwicHhcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBiYWNrZ3JvdW5kLSogcHJvcHMgYWZmZWN0IG9yaWdpbmFsIGNsb25lJ3MgdmFsdWVzXG5cdFx0XHRpZiAoICFzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSAmJiB2YWx1ZSA9PT0gXCJcIiAmJiBuYW1lLmluZGV4T2YoIFwiYmFja2dyb3VuZFwiICkgPT09IDAgKSB7XG5cdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSBcImluaGVyaXRcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCwgdXNlIHRoYXQgdmFsdWUsIG90aGVyd2lzZSBqdXN0IHNldCB0aGUgc3BlY2lmaWVkIHZhbHVlXG5cdFx0XHRpZiAoICFob29rcyB8fCAhKCBcInNldFwiIGluIGhvb2tzICkgfHxcblx0XHRcdFx0KCB2YWx1ZSA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGlmICggaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0XHRcdHN0eWxlLnNldFByb3BlcnR5KCBuYW1lLCB2YWx1ZSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIG5vbi1jb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIGZhbHNlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdGhlcndpc2UganVzdCBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIHN0eWxlIG9iamVjdFxuXHRcdFx0cmV0dXJuIHN0eWxlWyBuYW1lIF07XG5cdFx0fVxuXHR9LFxuXG5cdGNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGV4dHJhLCBzdHlsZXMgKSB7XG5cdFx0dmFyIHZhbCwgbnVtLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0gY2FtZWxDYXNlKCBuYW1lICksXG5cdFx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUuIFdlIGRvbid0XG5cdFx0Ly8gd2FudCB0byBtb2RpZnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cblx0XHRpZiAoICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBUcnkgcHJlZml4ZWQgbmFtZSBmb2xsb3dlZCBieSB0aGUgdW5wcmVmaXhlZCBuYW1lXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyApIHtcblx0XHRcdHZhbCA9IGhvb2tzLmdldCggZWxlbSwgdHJ1ZSwgZXh0cmEgKTtcblx0XHR9XG5cblx0XHQvLyBPdGhlcndpc2UsIGlmIGEgd2F5IHRvIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZXhpc3RzLCB1c2UgdGhhdFxuXHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApO1xuXHRcdH1cblxuXHRcdC8vIENvbnZlcnQgXCJub3JtYWxcIiB0byBjb21wdXRlZCB2YWx1ZVxuXHRcdGlmICggdmFsID09PSBcIm5vcm1hbFwiICYmIG5hbWUgaW4gY3NzTm9ybWFsVHJhbnNmb3JtICkge1xuXHRcdFx0dmFsID0gY3NzTm9ybWFsVHJhbnNmb3JtWyBuYW1lIF07XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBudW1lcmljIGlmIGZvcmNlZCBvciBhIHF1YWxpZmllciB3YXMgcHJvdmlkZWQgYW5kIHZhbCBsb29rcyBudW1lcmljXG5cdFx0aWYgKCBleHRyYSA9PT0gXCJcIiB8fCBleHRyYSApIHtcblx0XHRcdG51bSA9IHBhcnNlRmxvYXQoIHZhbCApO1xuXHRcdFx0cmV0dXJuIGV4dHJhID09PSB0cnVlIHx8IGlzRmluaXRlKCBudW0gKSA/IG51bSB8fCAwIDogdmFsO1xuXHRcdH1cblxuXHRcdHJldHVybiB2YWw7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJoZWlnaHRcIiwgXCJ3aWR0aFwiIF0sIGZ1bmN0aW9uKCBpLCBkaW1lbnNpb24gKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgZGltZW5zaW9uIF0gPSB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQsIGV4dHJhICkge1xuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdFx0XHQvLyBDZXJ0YWluIGVsZW1lbnRzIGNhbiBoYXZlIGRpbWVuc2lvbiBpbmZvIGlmIHdlIGludmlzaWJseSBzaG93IHRoZW1cblx0XHRcdFx0Ly8gYnV0IGl0IG11c3QgaGF2ZSBhIGN1cnJlbnQgZGlzcGxheSBzdHlsZSB0aGF0IHdvdWxkIGJlbmVmaXRcblx0XHRcdFx0cmV0dXJuIHJkaXNwbGF5c3dhcC50ZXN0KCBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApICkgJiZcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA4K1xuXHRcdFx0XHRcdC8vIFRhYmxlIGNvbHVtbnMgaW4gU2FmYXJpIGhhdmUgbm9uLXplcm8gb2Zmc2V0V2lkdGggJiB6ZXJvXG5cdFx0XHRcdFx0Ly8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggdW5sZXNzIGRpc3BsYXkgaXMgY2hhbmdlZC5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHRcdFx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlXG5cdFx0XHRcdFx0Ly8gaW4gSUUgdGhyb3dzIGFuIGVycm9yLlxuXHRcdFx0XHRcdCggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggfHwgIWVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKSA/XG5cdFx0XHRcdFx0XHRzd2FwKCBlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKTtcblx0XHRcdFx0XHRcdH0gKSA6XG5cdFx0XHRcdFx0XHRnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBleHRyYSApIHtcblx0XHRcdHZhciBtYXRjaGVzLFxuXHRcdFx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblxuXHRcdFx0XHQvLyBPbmx5IHJlYWQgc3R5bGVzLnBvc2l0aW9uIGlmIHRoZSB0ZXN0IGhhcyBhIGNoYW5jZSB0byBmYWlsXG5cdFx0XHRcdC8vIHRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3cuXG5cdFx0XHRcdHNjcm9sbGJveFNpemVCdWdneSA9ICFzdXBwb3J0LnNjcm9sbGJveFNpemUoKSAmJlxuXHRcdFx0XHRcdHN0eWxlcy5wb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiLFxuXG5cdFx0XHRcdC8vIFRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3csIG9ubHkgZmV0Y2ggYm94U2l6aW5nIGlmIHdlIG5lZWQgaXQgKGdoLTM5OTEpXG5cdFx0XHRcdGJveFNpemluZ05lZWRlZCA9IHNjcm9sbGJveFNpemVCdWdneSB8fCBleHRyYSxcblx0XHRcdFx0aXNCb3JkZXJCb3ggPSBib3hTaXppbmdOZWVkZWQgJiZcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdFx0XHRzdWJ0cmFjdCA9IGV4dHJhID9cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRcdFx0XHRlbGVtLFxuXHRcdFx0XHRcdFx0ZGltZW5zaW9uLFxuXHRcdFx0XHRcdFx0ZXh0cmEsXG5cdFx0XHRcdFx0XHRpc0JvcmRlckJveCxcblx0XHRcdFx0XHRcdHN0eWxlc1xuXHRcdFx0XHRcdCkgOlxuXHRcdFx0XHRcdDA7XG5cblx0XHRcdC8vIEFjY291bnQgZm9yIHVucmVsaWFibGUgYm9yZGVyLWJveCBkaW1lbnNpb25zIGJ5IGNvbXBhcmluZyBvZmZzZXQqIHRvIGNvbXB1dGVkIGFuZFxuXHRcdFx0Ly8gZmFraW5nIGEgY29udGVudC1ib3ggdG8gZ2V0IGJvcmRlciBhbmQgcGFkZGluZyAoZ2gtMzY5OSlcblx0XHRcdGlmICggaXNCb3JkZXJCb3ggJiYgc2Nyb2xsYm94U2l6ZUJ1Z2d5ICkge1xuXHRcdFx0XHRzdWJ0cmFjdCAtPSBNYXRoLmNlaWwoXG5cdFx0XHRcdFx0ZWxlbVsgXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC1cblx0XHRcdFx0XHRwYXJzZUZsb2F0KCBzdHlsZXNbIGRpbWVuc2lvbiBdICkgLVxuXHRcdFx0XHRcdGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBcImJvcmRlclwiLCBmYWxzZSwgc3R5bGVzICkgLVxuXHRcdFx0XHRcdDAuNVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb252ZXJ0IHRvIHBpeGVscyBpZiB2YWx1ZSBhZGp1c3RtZW50IGlzIG5lZWRlZFxuXHRcdFx0aWYgKCBzdWJ0cmFjdCAmJiAoIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJlxuXHRcdFx0XHQoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSAhPT0gXCJweFwiICkge1xuXG5cdFx0XHRcdGVsZW0uc3R5bGVbIGRpbWVuc2lvbiBdID0gdmFsdWU7XG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5LmNzcyggZWxlbSwgZGltZW5zaW9uICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICk7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuY3NzSG9va3MubWFyZ2luTGVmdCA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5yZWxpYWJsZU1hcmdpbkxlZnQsXG5cdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0cmV0dXJuICggcGFyc2VGbG9hdCggY3VyQ1NTKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiApICkgfHxcblx0XHRcdFx0ZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC1cblx0XHRcdFx0XHRzd2FwKCBlbGVtLCB7IG1hcmdpbkxlZnQ6IDAgfSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuXHRcdFx0XHRcdH0gKVxuXHRcdFx0XHQpICsgXCJweFwiO1xuXHRcdH1cblx0fVxuKTtcblxuLy8gVGhlc2UgaG9va3MgYXJlIHVzZWQgYnkgYW5pbWF0ZSB0byBleHBhbmQgcHJvcGVydGllc1xualF1ZXJ5LmVhY2goIHtcblx0bWFyZ2luOiBcIlwiLFxuXHRwYWRkaW5nOiBcIlwiLFxuXHRib3JkZXI6IFwiV2lkdGhcIlxufSwgZnVuY3Rpb24oIHByZWZpeCwgc3VmZml4ICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdID0ge1xuXHRcdGV4cGFuZDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGkgPSAwLFxuXHRcdFx0XHRleHBhbmRlZCA9IHt9LFxuXG5cdFx0XHRcdC8vIEFzc3VtZXMgYSBzaW5nbGUgbnVtYmVyIGlmIG5vdCBhIHN0cmluZ1xuXHRcdFx0XHRwYXJ0cyA9IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlLnNwbGl0KCBcIiBcIiApIDogWyB2YWx1ZSBdO1xuXG5cdFx0XHRmb3IgKCA7IGkgPCA0OyBpKysgKSB7XG5cdFx0XHRcdGV4cGFuZGVkWyBwcmVmaXggKyBjc3NFeHBhbmRbIGkgXSArIHN1ZmZpeCBdID1cblx0XHRcdFx0XHRwYXJ0c1sgaSBdIHx8IHBhcnRzWyBpIC0gMiBdIHx8IHBhcnRzWyAwIF07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBleHBhbmRlZDtcblx0XHR9XG5cdH07XG5cblx0aWYgKCBwcmVmaXggIT09IFwibWFyZ2luXCIgKSB7XG5cdFx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXS5zZXQgPSBzZXRQb3NpdGl2ZU51bWJlcjtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGNzczogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHRcdHZhciBzdHlsZXMsIGxlbixcblx0XHRcdFx0bWFwID0ge30sXG5cdFx0XHRcdGkgPSAwO1xuXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIG5hbWUgKSApIHtcblx0XHRcdFx0c3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICk7XG5cdFx0XHRcdGxlbiA9IG5hbWUubGVuZ3RoO1xuXG5cdFx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRcdG1hcFsgbmFtZVsgaSBdIF0gPSBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lWyBpIF0sIGZhbHNlLCBzdHlsZXMgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBtYXA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lLCB2YWx1ZSApIDpcblx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgbmFtZSApO1xuXHRcdH0sIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9XG59ICk7XG5cblxuZnVuY3Rpb24gVHdlZW4oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICkge1xuXHRyZXR1cm4gbmV3IFR3ZWVuLnByb3RvdHlwZS5pbml0KCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApO1xufVxualF1ZXJ5LlR3ZWVuID0gVHdlZW47XG5cblR3ZWVuLnByb3RvdHlwZSA9IHtcblx0Y29uc3RydWN0b3I6IFR3ZWVuLFxuXHRpbml0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcsIHVuaXQgKSB7XG5cdFx0dGhpcy5lbGVtID0gZWxlbTtcblx0XHR0aGlzLnByb3AgPSBwcm9wO1xuXHRcdHRoaXMuZWFzaW5nID0gZWFzaW5nIHx8IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHQ7XG5cdFx0dGhpcy5vcHRpb25zID0gb3B0aW9ucztcblx0XHR0aGlzLnN0YXJ0ID0gdGhpcy5ub3cgPSB0aGlzLmN1cigpO1xuXHRcdHRoaXMuZW5kID0gZW5kO1xuXHRcdHRoaXMudW5pdCA9IHVuaXQgfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyBcIlwiIDogXCJweFwiICk7XG5cdH0sXG5cdGN1cjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnByb3AgXTtcblxuXHRcdHJldHVybiBob29rcyAmJiBob29rcy5nZXQgP1xuXHRcdFx0aG9va3MuZ2V0KCB0aGlzICkgOlxuXHRcdFx0VHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LmdldCggdGhpcyApO1xuXHR9LFxuXHRydW46IGZ1bmN0aW9uKCBwZXJjZW50ICkge1xuXHRcdHZhciBlYXNlZCxcblx0XHRcdGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnByb3AgXTtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLmR1cmF0aW9uICkge1xuXHRcdFx0dGhpcy5wb3MgPSBlYXNlZCA9IGpRdWVyeS5lYXNpbmdbIHRoaXMuZWFzaW5nIF0oXG5cdFx0XHRcdHBlcmNlbnQsIHRoaXMub3B0aW9ucy5kdXJhdGlvbiAqIHBlcmNlbnQsIDAsIDEsIHRoaXMub3B0aW9ucy5kdXJhdGlvblxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5wb3MgPSBlYXNlZCA9IHBlcmNlbnQ7XG5cdFx0fVxuXHRcdHRoaXMubm93ID0gKCB0aGlzLmVuZCAtIHRoaXMuc3RhcnQgKSAqIGVhc2VkICsgdGhpcy5zdGFydDtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLnN0ZXAgKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKCB0aGlzLmVsZW0sIHRoaXMubm93LCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBob29rcy5zZXQgKSB7XG5cdFx0XHRob29rcy5zZXQoIHRoaXMgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0VHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LnNldCggdGhpcyApO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufTtcblxuVHdlZW4ucHJvdG90eXBlLmluaXQucHJvdG90eXBlID0gVHdlZW4ucHJvdG90eXBlO1xuXG5Ud2Vlbi5wcm9wSG9va3MgPSB7XG5cdF9kZWZhdWx0OiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cdFx0XHR2YXIgcmVzdWx0O1xuXG5cdFx0XHQvLyBVc2UgYSBwcm9wZXJ0eSBvbiB0aGUgZWxlbWVudCBkaXJlY3RseSB3aGVuIGl0IGlzIG5vdCBhIERPTSBlbGVtZW50LFxuXHRcdFx0Ly8gb3Igd2hlbiB0aGVyZSBpcyBubyBtYXRjaGluZyBzdHlsZSBwcm9wZXJ0eSB0aGF0IGV4aXN0cy5cblx0XHRcdGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAhPT0gMSB8fFxuXHRcdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gIT0gbnVsbCAmJiB0d2Vlbi5lbGVtLnN0eWxlWyB0d2Vlbi5wcm9wIF0gPT0gbnVsbCApIHtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUGFzc2luZyBhbiBlbXB0eSBzdHJpbmcgYXMgYSAzcmQgcGFyYW1ldGVyIHRvIC5jc3Mgd2lsbCBhdXRvbWF0aWNhbGx5XG5cdFx0XHQvLyBhdHRlbXB0IGEgcGFyc2VGbG9hdCBhbmQgZmFsbGJhY2sgdG8gYSBzdHJpbmcgaWYgdGhlIHBhcnNlIGZhaWxzLlxuXHRcdFx0Ly8gU2ltcGxlIHZhbHVlcyBzdWNoIGFzIFwiMTBweFwiIGFyZSBwYXJzZWQgdG8gRmxvYXQ7XG5cdFx0XHQvLyBjb21wbGV4IHZhbHVlcyBzdWNoIGFzIFwicm90YXRlKDFyYWQpXCIgYXJlIHJldHVybmVkIGFzLWlzLlxuXHRcdFx0cmVzdWx0ID0galF1ZXJ5LmNzcyggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgXCJcIiApO1xuXG5cdFx0XHQvLyBFbXB0eSBzdHJpbmdzLCBudWxsLCB1bmRlZmluZWQgYW5kIFwiYXV0b1wiIGFyZSBjb252ZXJ0ZWQgdG8gMC5cblx0XHRcdHJldHVybiAhcmVzdWx0IHx8IHJlc3VsdCA9PT0gXCJhdXRvXCIgPyAwIDogcmVzdWx0O1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cblx0XHRcdC8vIFVzZSBzdGVwIGhvb2sgZm9yIGJhY2sgY29tcGF0LlxuXHRcdFx0Ly8gVXNlIGNzc0hvb2sgaWYgaXRzIHRoZXJlLlxuXHRcdFx0Ly8gVXNlIC5zdHlsZSBpZiBhdmFpbGFibGUgYW5kIHVzZSBwbGFpbiBwcm9wZXJ0aWVzIHdoZXJlIGF2YWlsYWJsZS5cblx0XHRcdGlmICggalF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSApIHtcblx0XHRcdFx0alF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSggdHdlZW4gKTtcblx0XHRcdH0gZWxzZSBpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKFxuXHRcdFx0XHRcdGpRdWVyeS5jc3NIb29rc1sgdHdlZW4ucHJvcCBdIHx8XG5cdFx0XHRcdFx0dHdlZW4uZWxlbS5zdHlsZVsgZmluYWxQcm9wTmFtZSggdHdlZW4ucHJvcCApIF0gIT0gbnVsbCApICkge1xuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIHR3ZWVuLm5vdyArIHR3ZWVuLnVuaXQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG4vLyBQYW5pYyBiYXNlZCBhcHByb2FjaCB0byBzZXR0aW5nIHRoaW5ncyBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblR3ZWVuLnByb3BIb29rcy5zY3JvbGxUb3AgPSBUd2Vlbi5wcm9wSG9va3Muc2Nyb2xsTGVmdCA9IHtcblx0c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cdFx0aWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICYmIHR3ZWVuLmVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdztcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5lYXNpbmcgPSB7XG5cdGxpbmVhcjogZnVuY3Rpb24oIHAgKSB7XG5cdFx0cmV0dXJuIHA7XG5cdH0sXG5cdHN3aW5nOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gMC41IC0gTWF0aC5jb3MoIHAgKiBNYXRoLlBJICkgLyAyO1xuXHR9LFxuXHRfZGVmYXVsdDogXCJzd2luZ1wiXG59O1xuXG5qUXVlcnkuZnggPSBUd2Vlbi5wcm90b3R5cGUuaW5pdDtcblxuLy8gQmFjayBjb21wYXQgPDEuOCBleHRlbnNpb24gcG9pbnRcbmpRdWVyeS5meC5zdGVwID0ge307XG5cblxuXG5cbnZhclxuXHRmeE5vdywgaW5Qcm9ncmVzcyxcblx0cmZ4dHlwZXMgPSAvXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sXG5cdHJydW4gPSAvcXVldWVIb29rcyQvO1xuXG5mdW5jdGlvbiBzY2hlZHVsZSgpIHtcblx0aWYgKCBpblByb2dyZXNzICkge1xuXHRcdGlmICggZG9jdW1lbnQuaGlkZGVuID09PSBmYWxzZSAmJiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lICkge1xuXHRcdFx0d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSggc2NoZWR1bGUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0d2luZG93LnNldFRpbWVvdXQoIHNjaGVkdWxlLCBqUXVlcnkuZnguaW50ZXJ2YWwgKTtcblx0XHR9XG5cblx0XHRqUXVlcnkuZngudGljaygpO1xuXHR9XG59XG5cbi8vIEFuaW1hdGlvbnMgY3JlYXRlZCBzeW5jaHJvbm91c2x5IHdpbGwgcnVuIHN5bmNocm9ub3VzbHlcbmZ1bmN0aW9uIGNyZWF0ZUZ4Tm93KCkge1xuXHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0ZnhOb3cgPSB1bmRlZmluZWQ7XG5cdH0gKTtcblx0cmV0dXJuICggZnhOb3cgPSBEYXRlLm5vdygpICk7XG59XG5cbi8vIEdlbmVyYXRlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIGEgc3RhbmRhcmQgYW5pbWF0aW9uXG5mdW5jdGlvbiBnZW5GeCggdHlwZSwgaW5jbHVkZVdpZHRoICkge1xuXHR2YXIgd2hpY2gsXG5cdFx0aSA9IDAsXG5cdFx0YXR0cnMgPSB7IGhlaWdodDogdHlwZSB9O1xuXG5cdC8vIElmIHdlIGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMSB0byBkbyBhbGwgY3NzRXhwYW5kIHZhbHVlcyxcblx0Ly8gb3RoZXJ3aXNlIHN0ZXAgdmFsdWUgaXMgMiB0byBza2lwIG92ZXIgTGVmdCBhbmQgUmlnaHRcblx0aW5jbHVkZVdpZHRoID0gaW5jbHVkZVdpZHRoID8gMSA6IDA7XG5cdGZvciAoIDsgaSA8IDQ7IGkgKz0gMiAtIGluY2x1ZGVXaWR0aCApIHtcblx0XHR3aGljaCA9IGNzc0V4cGFuZFsgaSBdO1xuXHRcdGF0dHJzWyBcIm1hcmdpblwiICsgd2hpY2ggXSA9IGF0dHJzWyBcInBhZGRpbmdcIiArIHdoaWNoIF0gPSB0eXBlO1xuXHR9XG5cblx0aWYgKCBpbmNsdWRlV2lkdGggKSB7XG5cdFx0YXR0cnMub3BhY2l0eSA9IGF0dHJzLndpZHRoID0gdHlwZTtcblx0fVxuXG5cdHJldHVybiBhdHRycztcbn1cblxuZnVuY3Rpb24gY3JlYXRlVHdlZW4oIHZhbHVlLCBwcm9wLCBhbmltYXRpb24gKSB7XG5cdHZhciB0d2Vlbixcblx0XHRjb2xsZWN0aW9uID0gKCBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXSApLmNvbmNhdCggQW5pbWF0aW9uLnR3ZWVuZXJzWyBcIipcIiBdICksXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoO1xuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGlmICggKCB0d2VlbiA9IGNvbGxlY3Rpb25bIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBwcm9wLCB2YWx1ZSApICkgKSB7XG5cblx0XHRcdC8vIFdlJ3JlIGRvbmUgd2l0aCB0aGlzIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRQcmVmaWx0ZXIoIGVsZW0sIHByb3BzLCBvcHRzICkge1xuXHR2YXIgcHJvcCwgdmFsdWUsIHRvZ2dsZSwgaG9va3MsIG9sZGZpcmUsIHByb3BUd2VlbiwgcmVzdG9yZURpc3BsYXksIGRpc3BsYXksXG5cdFx0aXNCb3ggPSBcIndpZHRoXCIgaW4gcHJvcHMgfHwgXCJoZWlnaHRcIiBpbiBwcm9wcyxcblx0XHRhbmltID0gdGhpcyxcblx0XHRvcmlnID0ge30sXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlLFxuXHRcdGhpZGRlbiA9IGVsZW0ubm9kZVR5cGUgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICksXG5cdFx0ZGF0YVNob3cgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZnhzaG93XCIgKTtcblxuXHQvLyBRdWV1ZS1za2lwcGluZyBhbmltYXRpb25zIGhpamFjayB0aGUgZnggaG9va3Ncblx0aWYgKCAhb3B0cy5xdWV1ZSApIHtcblx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgXCJmeFwiICk7XG5cdFx0aWYgKCBob29rcy51bnF1ZXVlZCA9PSBudWxsICkge1xuXHRcdFx0aG9va3MudW5xdWV1ZWQgPSAwO1xuXHRcdFx0b2xkZmlyZSA9IGhvb2tzLmVtcHR5LmZpcmU7XG5cdFx0XHRob29rcy5lbXB0eS5maXJlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggIWhvb2tzLnVucXVldWVkICkge1xuXHRcdFx0XHRcdG9sZGZpcmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aG9va3MudW5xdWV1ZWQrKztcblxuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5zdXJlIHRoZSBjb21wbGV0ZSBoYW5kbGVyIGlzIGNhbGxlZCBiZWZvcmUgdGhpcyBjb21wbGV0ZXNcblx0XHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0aG9va3MudW5xdWV1ZWQtLTtcblx0XHRcdFx0aWYgKCAhalF1ZXJ5LnF1ZXVlKCBlbGVtLCBcImZ4XCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdFx0aG9va3MuZW1wdHkuZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gRGV0ZWN0IHNob3cvaGlkZSBhbmltYXRpb25zXG5cdGZvciAoIHByb3AgaW4gcHJvcHMgKSB7XG5cdFx0dmFsdWUgPSBwcm9wc1sgcHJvcCBdO1xuXHRcdGlmICggcmZ4dHlwZXMudGVzdCggdmFsdWUgKSApIHtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgcHJvcCBdO1xuXHRcdFx0dG9nZ2xlID0gdG9nZ2xlIHx8IHZhbHVlID09PSBcInRvZ2dsZVwiO1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gKCBoaWRkZW4gPyBcImhpZGVcIiA6IFwic2hvd1wiICkgKSB7XG5cblx0XHRcdFx0Ly8gUHJldGVuZCB0byBiZSBoaWRkZW4gaWYgdGhpcyBpcyBhIFwic2hvd1wiIGFuZFxuXHRcdFx0XHQvLyB0aGVyZSBpcyBzdGlsbCBkYXRhIGZyb20gYSBzdG9wcGVkIHNob3cvaGlkZVxuXHRcdFx0XHRpZiAoIHZhbHVlID09PSBcInNob3dcIiAmJiBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0aGlkZGVuID0gdHJ1ZTtcblxuXHRcdFx0XHQvLyBJZ25vcmUgYWxsIG90aGVyIG5vLW9wIHNob3cvaGlkZSBkYXRhXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG9yaWdbIHByb3AgXSA9IGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gfHwgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQmFpbCBvdXQgaWYgdGhpcyBpcyBhIG5vLW9wIGxpa2UgLmhpZGUoKS5oaWRlKClcblx0cHJvcFR3ZWVuID0gIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wcyApO1xuXHRpZiAoICFwcm9wVHdlZW4gJiYgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIG9yaWcgKSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBSZXN0cmljdCBcIm92ZXJmbG93XCIgYW5kIFwiZGlzcGxheVwiIHN0eWxlcyBkdXJpbmcgYm94IGFuaW1hdGlvbnNcblx0aWYgKCBpc0JveCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEsIEVkZ2UgMTIgLSAxNVxuXHRcdC8vIFJlY29yZCBhbGwgMyBvdmVyZmxvdyBhdHRyaWJ1dGVzIGJlY2F1c2UgSUUgZG9lcyBub3QgaW5mZXIgdGhlIHNob3J0aGFuZFxuXHRcdC8vIGZyb20gaWRlbnRpY2FsbHktdmFsdWVkIG92ZXJmbG93WCBhbmQgb3ZlcmZsb3dZIGFuZCBFZGdlIGp1c3QgbWlycm9yc1xuXHRcdC8vIHRoZSBvdmVyZmxvd1ggdmFsdWUgdGhlcmUuXG5cdFx0b3B0cy5vdmVyZmxvdyA9IFsgc3R5bGUub3ZlcmZsb3csIHN0eWxlLm92ZXJmbG93WCwgc3R5bGUub3ZlcmZsb3dZIF07XG5cblx0XHQvLyBJZGVudGlmeSBhIGRpc3BsYXkgdHlwZSwgcHJlZmVycmluZyBvbGQgc2hvdy9oaWRlIGRhdGEgb3ZlciB0aGUgQ1NTIGNhc2NhZGVcblx0XHRyZXN0b3JlRGlzcGxheSA9IGRhdGFTaG93ICYmIGRhdGFTaG93LmRpc3BsYXk7XG5cdFx0aWYgKCByZXN0b3JlRGlzcGxheSA9PSBudWxsICkge1xuXHRcdFx0cmVzdG9yZURpc3BsYXkgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0fVxuXHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ICkge1xuXHRcdFx0XHRkaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEdldCBub25lbXB0eSB2YWx1ZShzKSBieSB0ZW1wb3JhcmlseSBmb3JjaW5nIHZpc2liaWxpdHlcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7XG5cdFx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5IHx8IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQW5pbWF0ZSBpbmxpbmUgZWxlbWVudHMgYXMgaW5saW5lLWJsb2NrXG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcImlubGluZVwiIHx8IGRpc3BsYXkgPT09IFwiaW5saW5lLWJsb2NrXCIgJiYgcmVzdG9yZURpc3BsYXkgIT0gbnVsbCApIHtcblx0XHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJmbG9hdFwiICkgPT09IFwibm9uZVwiICkge1xuXG5cdFx0XHRcdC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGRpc3BsYXkgdmFsdWUgYXQgdGhlIGVuZCBvZiBwdXJlIHNob3cvaGlkZSBhbmltYXRpb25zXG5cdFx0XHRcdGlmICggIXByb3BUd2VlbiApIHtcblx0XHRcdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0c3R5bGUuZGlzcGxheSA9IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRkaXNwbGF5ID0gc3R5bGUuZGlzcGxheTtcblx0XHRcdFx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZGlzcGxheSA9PT0gXCJub25lXCIgPyBcIlwiIDogZGlzcGxheTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0c3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKCBvcHRzLm92ZXJmbG93ICkge1xuXHRcdHN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcblx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cdFx0XHRzdHlsZS5vdmVyZmxvdyA9IG9wdHMub3ZlcmZsb3dbIDAgXTtcblx0XHRcdHN0eWxlLm92ZXJmbG93WCA9IG9wdHMub3ZlcmZsb3dbIDEgXTtcblx0XHRcdHN0eWxlLm92ZXJmbG93WSA9IG9wdHMub3ZlcmZsb3dbIDIgXTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBJbXBsZW1lbnQgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0cHJvcFR3ZWVuID0gZmFsc2U7XG5cdGZvciAoIHByb3AgaW4gb3JpZyApIHtcblxuXHRcdC8vIEdlbmVyYWwgc2hvdy9oaWRlIHNldHVwIGZvciB0aGlzIGVsZW1lbnQgYW5pbWF0aW9uXG5cdFx0aWYgKCAhcHJvcFR3ZWVuICkge1xuXHRcdFx0aWYgKCBkYXRhU2hvdyApIHtcblx0XHRcdFx0aWYgKCBcImhpZGRlblwiIGluIGRhdGFTaG93ICkge1xuXHRcdFx0XHRcdGhpZGRlbiA9IGRhdGFTaG93LmhpZGRlbjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGF0YVNob3cgPSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIFwiZnhzaG93XCIsIHsgZGlzcGxheTogcmVzdG9yZURpc3BsYXkgfSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdG9yZSBoaWRkZW4vdmlzaWJsZSBmb3IgdG9nZ2xlIHNvIGAuc3RvcCgpLnRvZ2dsZSgpYCBcInJldmVyc2VzXCJcblx0XHRcdGlmICggdG9nZ2xlICkge1xuXHRcdFx0XHRkYXRhU2hvdy5oaWRkZW4gPSAhaGlkZGVuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTaG93IGVsZW1lbnRzIGJlZm9yZSBhbmltYXRpbmcgdGhlbVxuXHRcdFx0aWYgKCBoaWRkZW4gKSB7XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSwgdHJ1ZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1bmMgKi9cblxuXHRcdFx0YW5pbS5kb25lKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1sb29wLWZ1bmMgKi9cblxuXHRcdFx0XHQvLyBUaGUgZmluYWwgc3RlcCBvZiBhIFwiaGlkZVwiIGFuaW1hdGlvbiBpcyBhY3R1YWxseSBoaWRpbmcgdGhlIGVsZW1lbnRcblx0XHRcdFx0aWYgKCAhaGlkZGVuICkge1xuXHRcdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgXCJmeHNob3dcIiApO1xuXHRcdFx0XHRmb3IgKCBwcm9wIGluIG9yaWcgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBvcmlnWyBwcm9wIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdC8vIFBlci1wcm9wZXJ0eSBzZXR1cFxuXHRcdHByb3BUd2VlbiA9IGNyZWF0ZVR3ZWVuKCBoaWRkZW4gPyBkYXRhU2hvd1sgcHJvcCBdIDogMCwgcHJvcCwgYW5pbSApO1xuXHRcdGlmICggISggcHJvcCBpbiBkYXRhU2hvdyApICkge1xuXHRcdFx0ZGF0YVNob3dbIHByb3AgXSA9IHByb3BUd2Vlbi5zdGFydDtcblx0XHRcdGlmICggaGlkZGVuICkge1xuXHRcdFx0XHRwcm9wVHdlZW4uZW5kID0gcHJvcFR3ZWVuLnN0YXJ0O1xuXHRcdFx0XHRwcm9wVHdlZW4uc3RhcnQgPSAwO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBwcm9wRmlsdGVyKCBwcm9wcywgc3BlY2lhbEVhc2luZyApIHtcblx0dmFyIGluZGV4LCBuYW1lLCBlYXNpbmcsIHZhbHVlLCBob29rcztcblxuXHQvLyBjYW1lbENhc2UsIHNwZWNpYWxFYXNpbmcgYW5kIGV4cGFuZCBjc3NIb29rIHBhc3Ncblx0Zm9yICggaW5kZXggaW4gcHJvcHMgKSB7XG5cdFx0bmFtZSA9IGNhbWVsQ2FzZSggaW5kZXggKTtcblx0XHRlYXNpbmcgPSBzcGVjaWFsRWFzaW5nWyBuYW1lIF07XG5cdFx0dmFsdWUgPSBwcm9wc1sgaW5kZXggXTtcblx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRlYXNpbmcgPSB2YWx1ZVsgMSBdO1xuXHRcdFx0dmFsdWUgPSBwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyAwIF07XG5cdFx0fVxuXG5cdFx0aWYgKCBpbmRleCAhPT0gbmFtZSApIHtcblx0XHRcdHByb3BzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgaW5kZXggXTtcblx0XHR9XG5cblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdO1xuXHRcdGlmICggaG9va3MgJiYgXCJleHBhbmRcIiBpbiBob29rcyApIHtcblx0XHRcdHZhbHVlID0gaG9va3MuZXhwYW5kKCB2YWx1ZSApO1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBuYW1lIF07XG5cblx0XHRcdC8vIE5vdCBxdWl0ZSAkLmV4dGVuZCwgdGhpcyB3b24ndCBvdmVyd3JpdGUgZXhpc3Rpbmcga2V5cy5cblx0XHRcdC8vIFJldXNpbmcgJ2luZGV4JyBiZWNhdXNlIHdlIGhhdmUgdGhlIGNvcnJlY3QgXCJuYW1lXCJcblx0XHRcdGZvciAoIGluZGV4IGluIHZhbHVlICkge1xuXHRcdFx0XHRpZiAoICEoIGluZGV4IGluIHByb3BzICkgKSB7XG5cdFx0XHRcdFx0cHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgaW5kZXggXTtcblx0XHRcdFx0XHRzcGVjaWFsRWFzaW5nWyBpbmRleCBdID0gZWFzaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNwZWNpYWxFYXNpbmdbIG5hbWUgXSA9IGVhc2luZztcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gQW5pbWF0aW9uKCBlbGVtLCBwcm9wZXJ0aWVzLCBvcHRpb25zICkge1xuXHR2YXIgcmVzdWx0LFxuXHRcdHN0b3BwZWQsXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzLmxlbmd0aCxcblx0XHRkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIERvbid0IG1hdGNoIGVsZW0gaW4gdGhlIDphbmltYXRlZCBzZWxlY3RvclxuXHRcdFx0ZGVsZXRlIHRpY2suZWxlbTtcblx0XHR9ICksXG5cdFx0dGljayA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBzdG9wcGVkICkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHR2YXIgY3VycmVudFRpbWUgPSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLFxuXHRcdFx0XHRyZW1haW5pbmcgPSBNYXRoLm1heCggMCwgYW5pbWF0aW9uLnN0YXJ0VGltZSArIGFuaW1hdGlvbi5kdXJhdGlvbiAtIGN1cnJlbnRUaW1lICksXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCAyLjMgb25seVxuXHRcdFx0XHQvLyBBcmNoYWljIGNyYXNoIGJ1ZyB3b24ndCBhbGxvdyB1cyB0byB1c2UgYDEgLSAoIDAuNSB8fCAwIClgICgjMTI0OTcpXG5cdFx0XHRcdHRlbXAgPSByZW1haW5pbmcgLyBhbmltYXRpb24uZHVyYXRpb24gfHwgMCxcblx0XHRcdFx0cGVyY2VudCA9IDEgLSB0ZW1wLFxuXHRcdFx0XHRpbmRleCA9IDAsXG5cdFx0XHRcdGxlbmd0aCA9IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoO1xuXG5cdFx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggcGVyY2VudCApO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgcGVyY2VudCwgcmVtYWluaW5nIF0gKTtcblxuXHRcdFx0Ly8gSWYgdGhlcmUncyBtb3JlIHRvIGRvLCB5aWVsZFxuXHRcdFx0aWYgKCBwZXJjZW50IDwgMSAmJiBsZW5ndGggKSB7XG5cdFx0XHRcdHJldHVybiByZW1haW5pbmc7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHRoaXMgd2FzIGFuIGVtcHR5IGFuaW1hdGlvbiwgc3ludGhlc2l6ZSBhIGZpbmFsIHByb2dyZXNzIG5vdGlmaWNhdGlvblxuXHRcdFx0aWYgKCAhbGVuZ3RoICkge1xuXHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlc29sdmUgdGhlIGFuaW1hdGlvbiBhbmQgcmVwb3J0IGl0cyBjb25jbHVzaW9uXG5cdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24gXSApO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cdFx0YW5pbWF0aW9uID0gZGVmZXJyZWQucHJvbWlzZSgge1xuXHRcdFx0ZWxlbTogZWxlbSxcblx0XHRcdHByb3BzOiBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcGVydGllcyApLFxuXHRcdFx0b3B0czogalF1ZXJ5LmV4dGVuZCggdHJ1ZSwge1xuXHRcdFx0XHRzcGVjaWFsRWFzaW5nOiB7fSxcblx0XHRcdFx0ZWFzaW5nOiBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0XG5cdFx0XHR9LCBvcHRpb25zICksXG5cdFx0XHRvcmlnaW5hbFByb3BlcnRpZXM6IHByb3BlcnRpZXMsXG5cdFx0XHRvcmlnaW5hbE9wdGlvbnM6IG9wdGlvbnMsXG5cdFx0XHRzdGFydFRpbWU6IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksXG5cdFx0XHRkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbixcblx0XHRcdHR3ZWVuczogW10sXG5cdFx0XHRjcmVhdGVUd2VlbjogZnVuY3Rpb24oIHByb3AsIGVuZCApIHtcblx0XHRcdFx0dmFyIHR3ZWVuID0galF1ZXJ5LlR3ZWVuKCBlbGVtLCBhbmltYXRpb24ub3B0cywgcHJvcCwgZW5kLFxuXHRcdFx0XHRcdFx0YW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFuaW1hdGlvbi5vcHRzLmVhc2luZyApO1xuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zLnB1c2goIHR3ZWVuICk7XG5cdFx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHRcdH0sXG5cdFx0XHRzdG9wOiBmdW5jdGlvbiggZ290b0VuZCApIHtcblx0XHRcdFx0dmFyIGluZGV4ID0gMCxcblxuXHRcdFx0XHRcdC8vIElmIHdlIGFyZSBnb2luZyB0byB0aGUgZW5kLCB3ZSB3YW50IHRvIHJ1biBhbGwgdGhlIHR3ZWVuc1xuXHRcdFx0XHRcdC8vIG90aGVyd2lzZSB3ZSBza2lwIHRoaXMgcGFydFxuXHRcdFx0XHRcdGxlbmd0aCA9IGdvdG9FbmQgPyBhbmltYXRpb24udHdlZW5zLmxlbmd0aCA6IDA7XG5cdFx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0XHRzdG9wcGVkID0gdHJ1ZTtcblx0XHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggMSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVzb2x2ZSB3aGVuIHdlIHBsYXllZCB0aGUgbGFzdCBmcmFtZTsgb3RoZXJ3aXNlLCByZWplY3Rcblx0XHRcdFx0aWYgKCBnb3RvRW5kICkge1xuXHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblx0XHR9ICksXG5cdFx0cHJvcHMgPSBhbmltYXRpb24ucHJvcHM7XG5cblx0cHJvcEZpbHRlciggcHJvcHMsIGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmcgKTtcblxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdHJlc3VsdCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgZWxlbSwgcHJvcHMsIGFuaW1hdGlvbi5vcHRzICk7XG5cdFx0aWYgKCByZXN1bHQgKSB7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHJlc3VsdC5zdG9wICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggYW5pbWF0aW9uLmVsZW0sIGFuaW1hdGlvbi5vcHRzLnF1ZXVlICkuc3RvcCA9XG5cdFx0XHRcdFx0cmVzdWx0LnN0b3AuYmluZCggcmVzdWx0ICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fVxuXG5cdGpRdWVyeS5tYXAoIHByb3BzLCBjcmVhdGVUd2VlbiwgYW5pbWF0aW9uICk7XG5cblx0aWYgKCBpc0Z1bmN0aW9uKCBhbmltYXRpb24ub3B0cy5zdGFydCApICkge1xuXHRcdGFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApO1xuXHR9XG5cblx0Ly8gQXR0YWNoIGNhbGxiYWNrcyBmcm9tIG9wdGlvbnNcblx0YW5pbWF0aW9uXG5cdFx0LnByb2dyZXNzKCBhbmltYXRpb24ub3B0cy5wcm9ncmVzcyApXG5cdFx0LmRvbmUoIGFuaW1hdGlvbi5vcHRzLmRvbmUsIGFuaW1hdGlvbi5vcHRzLmNvbXBsZXRlIClcblx0XHQuZmFpbCggYW5pbWF0aW9uLm9wdHMuZmFpbCApXG5cdFx0LmFsd2F5cyggYW5pbWF0aW9uLm9wdHMuYWx3YXlzICk7XG5cblx0alF1ZXJ5LmZ4LnRpbWVyKFxuXHRcdGpRdWVyeS5leHRlbmQoIHRpY2ssIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRhbmltOiBhbmltYXRpb24sXG5cdFx0XHRxdWV1ZTogYW5pbWF0aW9uLm9wdHMucXVldWVcblx0XHR9IClcblx0KTtcblxuXHRyZXR1cm4gYW5pbWF0aW9uO1xufVxuXG5qUXVlcnkuQW5pbWF0aW9uID0galF1ZXJ5LmV4dGVuZCggQW5pbWF0aW9uLCB7XG5cblx0dHdlZW5lcnM6IHtcblx0XHRcIipcIjogWyBmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgdHdlZW4gPSB0aGlzLmNyZWF0ZVR3ZWVuKCBwcm9wLCB2YWx1ZSApO1xuXHRcdFx0YWRqdXN0Q1NTKCB0d2Vlbi5lbGVtLCBwcm9wLCByY3NzTnVtLmV4ZWMoIHZhbHVlICksIHR3ZWVuICk7XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fSBdXG5cdH0sXG5cblx0dHdlZW5lcjogZnVuY3Rpb24oIHByb3BzLCBjYWxsYmFjayApIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIHByb3BzICkgKSB7XG5cdFx0XHRjYWxsYmFjayA9IHByb3BzO1xuXHRcdFx0cHJvcHMgPSBbIFwiKlwiIF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHByb3BzID0gcHJvcHMubWF0Y2goIHJub3RodG1sd2hpdGUgKTtcblx0XHR9XG5cblx0XHR2YXIgcHJvcCxcblx0XHRcdGluZGV4ID0gMCxcblx0XHRcdGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRwcm9wID0gcHJvcHNbIGluZGV4IF07XG5cdFx0XHRBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSA9IEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0udW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH0sXG5cblx0cHJlZmlsdGVyczogWyBkZWZhdWx0UHJlZmlsdGVyIF0sXG5cblx0cHJlZmlsdGVyOiBmdW5jdGlvbiggY2FsbGJhY2ssIHByZXBlbmQgKSB7XG5cdFx0aWYgKCBwcmVwZW5kICkge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMudW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMucHVzaCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LnNwZWVkID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGZuICkge1xuXHR2YXIgb3B0ID0gc3BlZWQgJiYgdHlwZW9mIHNwZWVkID09PSBcIm9iamVjdFwiID8galF1ZXJ5LmV4dGVuZCgge30sIHNwZWVkICkgOiB7XG5cdFx0Y29tcGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHxcblx0XHRcdGlzRnVuY3Rpb24oIHNwZWVkICkgJiYgc3BlZWQsXG5cdFx0ZHVyYXRpb246IHNwZWVkLFxuXHRcdGVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhaXNGdW5jdGlvbiggZWFzaW5nICkgJiYgZWFzaW5nXG5cdH07XG5cblx0Ly8gR28gdG8gdGhlIGVuZCBzdGF0ZSBpZiBmeCBhcmUgb2ZmXG5cdGlmICggalF1ZXJ5LmZ4Lm9mZiApIHtcblx0XHRvcHQuZHVyYXRpb24gPSAwO1xuXG5cdH0gZWxzZSB7XG5cdFx0aWYgKCB0eXBlb2Ygb3B0LmR1cmF0aW9uICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0aWYgKCBvcHQuZHVyYXRpb24gaW4galF1ZXJ5LmZ4LnNwZWVkcyApIHtcblx0XHRcdFx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkc1sgb3B0LmR1cmF0aW9uIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIG9wdC5xdWV1ZSAtIHRydWUvdW5kZWZpbmVkL251bGwgLT4gXCJmeFwiXG5cdGlmICggb3B0LnF1ZXVlID09IG51bGwgfHwgb3B0LnF1ZXVlID09PSB0cnVlICkge1xuXHRcdG9wdC5xdWV1ZSA9IFwiZnhcIjtcblx0fVxuXG5cdC8vIFF1ZXVlaW5nXG5cdG9wdC5vbGQgPSBvcHQuY29tcGxldGU7XG5cblx0b3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHQub2xkICkgKSB7XG5cdFx0XHRvcHQub2xkLmNhbGwoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdC5xdWV1ZSApIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCBvcHQucXVldWUgKTtcblx0XHR9XG5cdH07XG5cblx0cmV0dXJuIG9wdDtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmFkZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXG5cdFx0Ly8gU2hvdyBhbnkgaGlkZGVuIGVsZW1lbnRzIGFmdGVyIHNldHRpbmcgb3BhY2l0eSB0byAwXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBpc0hpZGRlbldpdGhpblRyZWUgKS5jc3MoIFwib3BhY2l0eVwiLCAwICkuc2hvdygpXG5cblx0XHRcdC8vIEFuaW1hdGUgdG8gdGhlIHZhbHVlIHNwZWNpZmllZFxuXHRcdFx0LmVuZCgpLmFuaW1hdGUoIHsgb3BhY2l0eTogdG8gfSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fSxcblx0YW5pbWF0ZTogZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHZhciBlbXB0eSA9IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wICksXG5cdFx0XHRvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICksXG5cdFx0XHRkb0FuaW1hdGlvbiA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28gcGVyLXByb3BlcnR5IGVhc2luZyB3b24ndCBiZSBsb3N0XG5cdFx0XHRcdHZhciBhbmltID0gQW5pbWF0aW9uKCB0aGlzLCBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcCApLCBvcHRhbGwgKTtcblxuXHRcdFx0XHQvLyBFbXB0eSBhbmltYXRpb25zLCBvciBmaW5pc2hpbmcgcmVzb2x2ZXMgaW1tZWRpYXRlbHlcblx0XHRcdFx0aWYgKCBlbXB0eSB8fCBkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZmluaXNoXCIgKSApIHtcblx0XHRcdFx0XHRhbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGRvQW5pbWF0aW9uLmZpbmlzaCA9IGRvQW5pbWF0aW9uO1xuXG5cdFx0cmV0dXJuIGVtcHR5IHx8IG9wdGFsbC5xdWV1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0dGhpcy5lYWNoKCBkb0FuaW1hdGlvbiApIDpcblx0XHRcdHRoaXMucXVldWUoIG9wdGFsbC5xdWV1ZSwgZG9BbmltYXRpb24gKTtcblx0fSxcblx0c3RvcDogZnVuY3Rpb24oIHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7XG5cdFx0dmFyIHN0b3BRdWV1ZSA9IGZ1bmN0aW9uKCBob29rcyApIHtcblx0XHRcdHZhciBzdG9wID0gaG9va3Muc3RvcDtcblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0c3RvcCggZ290b0VuZCApO1xuXHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Z290b0VuZCA9IGNsZWFyUXVldWU7XG5cdFx0XHRjbGVhclF1ZXVlID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggY2xlYXJRdWV1ZSAmJiB0eXBlICE9PSBmYWxzZSApIHtcblx0XHRcdHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGRlcXVldWUgPSB0cnVlLFxuXHRcdFx0XHRpbmRleCA9IHR5cGUgIT0gbnVsbCAmJiB0eXBlICsgXCJxdWV1ZUhvb2tzXCIsXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKTtcblxuXHRcdFx0aWYgKCBpbmRleCApIHtcblx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCApIHtcblx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yICggaW5kZXggaW4gZGF0YSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICYmIHJydW4udGVzdCggaW5kZXggKSApIHtcblx0XHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmXG5cdFx0XHRcdFx0KCB0eXBlID09IG51bGwgfHwgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkgKSB7XG5cblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCBnb3RvRW5kICk7XG5cdFx0XHRcdFx0ZGVxdWV1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhcnQgdGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0IGZvcmNlZC5cblx0XHRcdC8vIFRpbWVycyBjdXJyZW50bHkgd2lsbCBjYWxsIHRoZWlyIGNvbXBsZXRlIGNhbGxiYWNrcywgd2hpY2hcblx0XHRcdC8vIHdpbGwgZGVxdWV1ZSBidXQgb25seSBpZiB0aGV5IHdlcmUgZ290b0VuZC5cblx0XHRcdGlmICggZGVxdWV1ZSB8fCAhZ290b0VuZCApIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cdGZpbmlzaDogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0aWYgKCB0eXBlICE9PSBmYWxzZSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaW5kZXgsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKSxcblx0XHRcdFx0cXVldWUgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZVwiIF0sXG5cdFx0XHRcdGhvb2tzID0gZGF0YVsgdHlwZSArIFwicXVldWVIb29rc1wiIF0sXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGxlbmd0aCA9IHF1ZXVlID8gcXVldWUubGVuZ3RoIDogMDtcblxuXHRcdFx0Ly8gRW5hYmxlIGZpbmlzaGluZyBmbGFnIG9uIHByaXZhdGUgZGF0YVxuXHRcdFx0ZGF0YS5maW5pc2ggPSB0cnVlO1xuXG5cdFx0XHQvLyBFbXB0eSB0aGUgcXVldWUgZmlyc3Rcblx0XHRcdGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgW10gKTtcblxuXHRcdFx0aWYgKCBob29rcyAmJiBob29rcy5zdG9wICkge1xuXHRcdFx0XHRob29rcy5zdG9wLmNhbGwoIHRoaXMsIHRydWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFjdGl2ZSBhbmltYXRpb25zLCBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiYgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkge1xuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhbmltYXRpb25zIGluIHRoZSBvbGQgcXVldWUgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRpZiAoIHF1ZXVlWyBpbmRleCBdICYmIHF1ZXVlWyBpbmRleCBdLmZpbmlzaCApIHtcblx0XHRcdFx0XHRxdWV1ZVsgaW5kZXggXS5maW5pc2guY2FsbCggdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFR1cm4gb2ZmIGZpbmlzaGluZyBmbGFnXG5cdFx0XHRkZWxldGUgZGF0YS5maW5pc2g7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwidG9nZ2xlXCIsIFwic2hvd1wiLCBcImhpZGVcIiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHtcblx0dmFyIGNzc0ZuID0galF1ZXJ5LmZuWyBuYW1lIF07XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBzcGVlZCA9PSBudWxsIHx8IHR5cGVvZiBzcGVlZCA9PT0gXCJib29sZWFuXCIgP1xuXHRcdFx0Y3NzRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApIDpcblx0XHRcdHRoaXMuYW5pbWF0ZSggZ2VuRngoIG5hbWUsIHRydWUgKSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxuLy8gR2VuZXJhdGUgc2hvcnRjdXRzIGZvciBjdXN0b20gYW5pbWF0aW9uc1xualF1ZXJ5LmVhY2goIHtcblx0c2xpZGVEb3duOiBnZW5GeCggXCJzaG93XCIgKSxcblx0c2xpZGVVcDogZ2VuRngoIFwiaGlkZVwiICksXG5cdHNsaWRlVG9nZ2xlOiBnZW5GeCggXCJ0b2dnbGVcIiApLFxuXHRmYWRlSW46IHsgb3BhY2l0eTogXCJzaG93XCIgfSxcblx0ZmFkZU91dDogeyBvcGFjaXR5OiBcImhpZGVcIiB9LFxuXHRmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6IFwidG9nZ2xlXCIgfVxufSwgZnVuY3Rpb24oIG5hbWUsIHByb3BzICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9wcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LnRpbWVycyA9IFtdO1xualF1ZXJ5LmZ4LnRpY2sgPSBmdW5jdGlvbigpIHtcblx0dmFyIHRpbWVyLFxuXHRcdGkgPSAwLFxuXHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnM7XG5cblx0ZnhOb3cgPSBEYXRlLm5vdygpO1xuXG5cdGZvciAoIDsgaSA8IHRpbWVycy5sZW5ndGg7IGkrKyApIHtcblx0XHR0aW1lciA9IHRpbWVyc1sgaSBdO1xuXG5cdFx0Ly8gUnVuIHRoZSB0aW1lciBhbmQgc2FmZWx5IHJlbW92ZSBpdCB3aGVuIGRvbmUgKGFsbG93aW5nIGZvciBleHRlcm5hbCByZW1vdmFsKVxuXHRcdGlmICggIXRpbWVyKCkgJiYgdGltZXJzWyBpIF0gPT09IHRpbWVyICkge1xuXHRcdFx0dGltZXJzLnNwbGljZSggaS0tLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCAhdGltZXJzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkuZnguc3RvcCgpO1xuXHR9XG5cdGZ4Tm93ID0gdW5kZWZpbmVkO1xufTtcblxualF1ZXJ5LmZ4LnRpbWVyID0gZnVuY3Rpb24oIHRpbWVyICkge1xuXHRqUXVlcnkudGltZXJzLnB1c2goIHRpbWVyICk7XG5cdGpRdWVyeS5meC5zdGFydCgpO1xufTtcblxualF1ZXJ5LmZ4LmludGVydmFsID0gMTM7XG5qUXVlcnkuZnguc3RhcnQgPSBmdW5jdGlvbigpIHtcblx0aWYgKCBpblByb2dyZXNzICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGluUHJvZ3Jlc3MgPSB0cnVlO1xuXHRzY2hlZHVsZSgpO1xufTtcblxualF1ZXJ5LmZ4LnN0b3AgPSBmdW5jdGlvbigpIHtcblx0aW5Qcm9ncmVzcyA9IG51bGw7XG59O1xuXG5qUXVlcnkuZnguc3BlZWRzID0ge1xuXHRzbG93OiA2MDAsXG5cdGZhc3Q6IDIwMCxcblxuXHQvLyBEZWZhdWx0IHNwZWVkXG5cdF9kZWZhdWx0OiA0MDBcbn07XG5cblxuLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBwZXJtaXNzaW9uLlxuLy8gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTAwMzI0MDE0NzQ3L2h0dHA6Ly9ibGluZHNpZ25hbHMuY29tL2luZGV4LnBocC8yMDA5LzA3L2pxdWVyeS1kZWxheS9cbmpRdWVyeS5mbi5kZWxheSA9IGZ1bmN0aW9uKCB0aW1lLCB0eXBlICkge1xuXHR0aW1lID0galF1ZXJ5LmZ4ID8galF1ZXJ5LmZ4LnNwZWVkc1sgdGltZSBdIHx8IHRpbWUgOiB0aW1lO1xuXHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHtcblx0XHR2YXIgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCBuZXh0LCB0aW1lICk7XG5cdFx0aG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdH07XG5cdH0gKTtcbn07XG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICksXG5cdFx0c2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJzZWxlY3RcIiApLFxuXHRcdG9wdCA9IHNlbGVjdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvcHRpb25cIiApICk7XG5cblx0aW5wdXQudHlwZSA9IFwiY2hlY2tib3hcIjtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4zIG9ubHlcblx0Ly8gRGVmYXVsdCB2YWx1ZSBmb3IgYSBjaGVja2JveCBzaG91bGQgYmUgXCJvblwiXG5cdHN1cHBvcnQuY2hlY2tPbiA9IGlucHV0LnZhbHVlICE9PSBcIlwiO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBNdXN0IGFjY2VzcyBzZWxlY3RlZEluZGV4IHRvIG1ha2UgZGVmYXVsdCBvcHRpb25zIHNlbGVjdFxuXHRzdXBwb3J0Lm9wdFNlbGVjdGVkID0gb3B0LnNlbGVjdGVkO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBBbiBpbnB1dCBsb3NlcyBpdHMgdmFsdWUgYWZ0ZXIgYmVjb21pbmcgYSByYWRpb1xuXHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRpbnB1dC52YWx1ZSA9IFwidFwiO1xuXHRpbnB1dC50eXBlID0gXCJyYWRpb1wiO1xuXHRzdXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gXCJ0XCI7XG59ICkoKTtcblxuXG52YXIgYm9vbEhvb2ssXG5cdGF0dHJIYW5kbGUgPSBqUXVlcnkuZXhwci5hdHRySGFuZGxlO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkuYXR0ciwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgYXR0cmlidXRlcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRyaWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgPT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXR0cmlidXRlIGhvb2tzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBsb3dlcmNhc2UgdmVyc2lvblxuXHRcdC8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25lIGlzIGRlZmluZWRcblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblx0XHRcdGhvb2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0KCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnRlc3QoIG5hbWUgKSA/IGJvb2xIb29rIDogdW5kZWZpbmVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gbnVsbCApIHtcblx0XHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyBcIlwiICk7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0Ly8gTm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgcmV0dXJuIG51bGwsIHdlIG5vcm1hbGl6ZSB0byB1bmRlZmluZWRcblx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7XG5cdH0sXG5cblx0YXR0ckhvb2tzOiB7XG5cdFx0dHlwZToge1xuXHRcdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggIXN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gXCJyYWRpb1wiICYmXG5cdFx0XHRcdFx0bm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICkge1xuXHRcdFx0XHRcdHZhciB2YWwgPSBlbGVtLnZhbHVlO1xuXHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgdmFsdWUgKTtcblx0XHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRcdGVsZW0udmFsdWUgPSB2YWw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0dmFyIG5hbWUsXG5cdFx0XHRpID0gMCxcblxuXHRcdFx0Ly8gQXR0cmlidXRlIG5hbWVzIGNhbiBjb250YWluIG5vbi1IVE1MIHdoaXRlc3BhY2UgY2hhcmFjdGVyc1xuXHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjYXR0cmlidXRlcy0yXG5cdFx0XHRhdHRyTmFtZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xuXG5cdFx0aWYgKCBhdHRyTmFtZXMgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdHdoaWxlICggKCBuYW1lID0gYXR0ck5hbWVzWyBpKysgXSApICkge1xuXHRcdFx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIb29rcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzXG5ib29sSG9vayA9IHtcblx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7XG5cdFx0aWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2Vcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lICk7XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lO1xuXHR9XG59O1xuXG5qUXVlcnkuZWFjaCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goIC9cXHcrL2cgKSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cdHZhciBnZXR0ZXIgPSBhdHRySGFuZGxlWyBuYW1lIF0gfHwgalF1ZXJ5LmZpbmQuYXR0cjtcblxuXHRhdHRySGFuZGxlWyBuYW1lIF0gPSBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0dmFyIHJldCwgaGFuZGxlLFxuXHRcdFx0bG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdGlmICggIWlzWE1MICkge1xuXG5cdFx0XHQvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wIGJ5IHRlbXBvcmFyaWx5IHJlbW92aW5nIHRoaXMgZnVuY3Rpb24gZnJvbSB0aGUgZ2V0dGVyXG5cdFx0XHRoYW5kbGUgPSBhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF07XG5cdFx0XHRhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF0gPSByZXQ7XG5cdFx0XHRyZXQgPSBnZXR0ZXIoIGVsZW0sIG5hbWUsIGlzWE1MICkgIT0gbnVsbCA/XG5cdFx0XHRcdGxvd2VyY2FzZU5hbWUgOlxuXHRcdFx0XHRudWxsO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gaGFuZGxlO1xuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xufSApO1xuXG5cblxuXG52YXIgcmZvY3VzYWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJjbGlja2FibGUgPSAvXig/OmF8YXJlYSkkL2k7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5wcm9wLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGRlbGV0ZSB0aGlzWyBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWUgXTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHRwcm9wOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0dmFyIHJldCwgaG9va3MsXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHQvLyBEb24ndCBnZXQvc2V0IHByb3BlcnRpZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXG5cdFx0aWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gRml4IG5hbWUgYW5kIGF0dGFjaCBob29rc1xuXHRcdFx0bmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTtcblx0XHRcdGhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFtZSBdO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAoIGVsZW1bIG5hbWUgXSA9IHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVsZW1bIG5hbWUgXTtcblx0fSxcblxuXHRwcm9wSG9va3M6IHtcblx0XHR0YWJJbmRleDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdFx0XHRcdC8vIGVsZW0udGFiSW5kZXggZG9lc24ndCBhbHdheXMgcmV0dXJuIHRoZVxuXHRcdFx0XHQvLyBjb3JyZWN0IHZhbHVlIHdoZW4gaXQgaGFzbid0IGJlZW4gZXhwbGljaXRseSBzZXRcblx0XHRcdFx0Ly8gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTQxMTE2MjMzMzQ3L2h0dHA6Ly9mbHVpZHByb2plY3Qub3JnL2Jsb2cvMjAwOC8wMS8wOS9nZXR0aW5nLXNldHRpbmctYW5kLXJlbW92aW5nLXRhYmluZGV4LXZhbHVlcy13aXRoLWphdmFzY3JpcHQvXG5cdFx0XHRcdC8vIFVzZSBwcm9wZXIgYXR0cmlidXRlIHJldHJpZXZhbCgjMTIwNzIpXG5cdFx0XHRcdHZhciB0YWJpbmRleCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIFwidGFiaW5kZXhcIiApO1xuXG5cdFx0XHRcdGlmICggdGFiaW5kZXggKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlSW50KCB0YWJpbmRleCwgMTAgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRyZm9jdXNhYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSB8fFxuXHRcdFx0XHRcdHJjbGlja2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmXG5cdFx0XHRcdFx0ZWxlbS5ocmVmXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRwcm9wRml4OiB7XG5cdFx0XCJmb3JcIjogXCJodG1sRm9yXCIsXG5cdFx0XCJjbGFzc1wiOiBcImNsYXNzTmFtZVwiXG5cdH1cbn0gKTtcblxuLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG4vLyBBY2Nlc3NpbmcgdGhlIHNlbGVjdGVkSW5kZXggcHJvcGVydHlcbi8vIGZvcmNlcyB0aGUgYnJvd3NlciB0byByZXNwZWN0IHNldHRpbmcgc2VsZWN0ZWRcbi8vIG9uIHRoZSBvcHRpb25cbi8vIFRoZSBnZXR0ZXIgZW5zdXJlcyBhIGRlZmF1bHQgb3B0aW9uIGlzIHNlbGVjdGVkXG4vLyB3aGVuIGluIGFuIG9wdGdyb3VwXG4vLyBlc2xpbnQgcnVsZSBcIm5vLXVudXNlZC1leHByZXNzaW9uc1wiIGlzIGRpc2FibGVkIGZvciB0aGlzIGNvZGVcbi8vIHNpbmNlIGl0IGNvbnNpZGVycyBzdWNoIGFjY2Vzc2lvbnMgbm9vcFxuaWYgKCAhc3VwcG9ydC5vcHRTZWxlY3RlZCApIHtcblx0alF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiBcIm9mZlwiICovXG5cblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIHBhcmVudCAmJiBwYXJlbnQucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0LyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogXCJvZmZcIiAqL1xuXG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdHBhcmVudC5zZWxlY3RlZEluZGV4O1xuXG5cdFx0XHRcdGlmICggcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxualF1ZXJ5LmVhY2goIFtcblx0XCJ0YWJJbmRleFwiLFxuXHRcInJlYWRPbmx5XCIsXG5cdFwibWF4TGVuZ3RoXCIsXG5cdFwiY2VsbFNwYWNpbmdcIixcblx0XCJjZWxsUGFkZGluZ1wiLFxuXHRcInJvd1NwYW5cIixcblx0XCJjb2xTcGFuXCIsXG5cdFwidXNlTWFwXCIsXG5cdFwiZnJhbWVCb3JkZXJcIixcblx0XCJjb250ZW50RWRpdGFibGVcIlxuXSwgZnVuY3Rpb24oKSB7XG5cdGpRdWVyeS5wcm9wRml4WyB0aGlzLnRvTG93ZXJDYXNlKCkgXSA9IHRoaXM7XG59ICk7XG5cblxuXG5cblx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2UgYWNjb3JkaW5nIHRvIEhUTUwgc3BlY1xuXHQvLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLWFzY2lpLXdoaXRlc3BhY2Vcblx0ZnVuY3Rpb24gc3RyaXBBbmRDb2xsYXBzZSggdmFsdWUgKSB7XG5cdFx0dmFyIHRva2VucyA9IHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cdFx0cmV0dXJuIHRva2Vucy5qb2luKCBcIiBcIiApO1xuXHR9XG5cblxuZnVuY3Rpb24gZ2V0Q2xhc3MoIGVsZW0gKSB7XG5cdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSAmJiBlbGVtLmdldEF0dHJpYnV0ZSggXCJjbGFzc1wiICkgfHwgXCJcIjtcbn1cblxuZnVuY3Rpb24gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICkge1xuXHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXHR9XG5cdHJldHVybiBbXTtcbn1cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRhZGRDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBjbGFzc2VzLCBlbGVtLCBjdXIsIGN1clZhbHVlLCBjbGF6eiwgaiwgZmluYWxWYWx1ZSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmFkZENsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRjbGFzc2VzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGNsYXNzZXMubGVuZ3RoICkge1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCBlbGVtICk7XG5cdFx0XHRcdGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKCBjbGF6eiA9IGNsYXNzZXNbIGorKyBdICkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIgKSA8IDAgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciArPSBjbGF6eiArIFwiIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsXG5cdFx0XHRpID0gMDtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5yZW1vdmVDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB0aGlzLmF0dHIoIFwiY2xhc3NcIiwgXCJcIiApO1xuXHRcdH1cblxuXHRcdGNsYXNzZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggY2xhc3Nlcy5sZW5ndGggKSB7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGN1clZhbHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTtcblxuXHRcdFx0XHQvLyBUaGlzIGV4cHJlc3Npb24gaXMgaGVyZSBmb3IgYmV0dGVyIGNvbXByZXNzaWJpbGl0eSAoc2VlIGFkZENsYXNzKVxuXHRcdFx0XHRjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRqID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgKmFsbCogaW5zdGFuY2VzXG5cdFx0XHRcdFx0XHR3aGlsZSAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgPSBjdXIucmVwbGFjZSggXCIgXCIgKyBjbGF6eiArIFwiIFwiLCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSwgc3RhdGVWYWwgKSB7XG5cdFx0dmFyIHR5cGUgPSB0eXBlb2YgdmFsdWUsXG5cdFx0XHRpc1ZhbGlkVmFsdWUgPSB0eXBlID09PSBcInN0cmluZ1wiIHx8IEFycmF5LmlzQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIHR5cGVvZiBzdGF0ZVZhbCA9PT0gXCJib29sZWFuXCIgJiYgaXNWYWxpZFZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlVmFsID8gdGhpcy5hZGRDbGFzcyggdmFsdWUgKSA6IHRoaXMucmVtb3ZlQ2xhc3MoIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKFxuXHRcdFx0XHRcdHZhbHVlLmNhbGwoIHRoaXMsIGksIGdldENsYXNzKCB0aGlzICksIHN0YXRlVmFsICksXG5cdFx0XHRcdFx0c3RhdGVWYWxcblx0XHRcdFx0KTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBjbGFzc05hbWUsIGksIHNlbGYsIGNsYXNzTmFtZXM7XG5cblx0XHRcdGlmICggaXNWYWxpZFZhbHVlICkge1xuXG5cdFx0XHRcdC8vIFRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzXG5cdFx0XHRcdGkgPSAwO1xuXHRcdFx0XHRzZWxmID0galF1ZXJ5KCB0aGlzICk7XG5cdFx0XHRcdGNsYXNzTmFtZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdFx0XHR3aGlsZSAoICggY2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHRcdC8vIENoZWNrIGVhY2ggY2xhc3NOYW1lIGdpdmVuLCBzcGFjZSBzZXBhcmF0ZWQgbGlzdFxuXHRcdFx0XHRcdGlmICggc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICkgKSB7XG5cdFx0XHRcdFx0XHRzZWxmLnJlbW92ZUNsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2VsZi5hZGRDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdC8vIFRvZ2dsZSB3aG9sZSBjbGFzcyBuYW1lXG5cdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0XHRjbGFzc05hbWUgPSBnZXRDbGFzcyggdGhpcyApO1xuXHRcdFx0XHRpZiAoIGNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGNsYXNzTmFtZSBpZiBzZXRcblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIFwiX19jbGFzc05hbWVfX1wiLCBjbGFzc05hbWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoZSBlbGVtZW50IGhhcyBhIGNsYXNzIG5hbWUgb3IgaWYgd2UncmUgcGFzc2VkIGBmYWxzZWAsXG5cdFx0XHRcdC8vIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBjbGFzc25hbWUgKGlmIHRoZXJlIHdhcyBvbmUsIHRoZSBhYm92ZSBzYXZlZCBpdCkuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBicmluZyBiYWNrIHdoYXRldmVyIHdhcyBwcmV2aW91c2x5IHNhdmVkIChpZiBhbnl0aGluZyksXG5cdFx0XHRcdC8vIGZhbGxpbmcgYmFjayB0byB0aGUgZW1wdHkgc3RyaW5nIGlmIG5vdGhpbmcgd2FzIHN0b3JlZC5cblx0XHRcdFx0aWYgKCB0aGlzLnNldEF0dHJpYnV0ZSApIHtcblx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lIHx8IHZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRcdFx0XHRcIlwiIDpcblx0XHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIgKSB8fCBcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRoYXNDbGFzczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBjbGFzc05hbWUsIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGNsYXNzTmFtZSA9IFwiIFwiICsgc2VsZWN0b3IgKyBcIiBcIjtcblx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0KCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGdldENsYXNzKCBlbGVtICkgKSArIFwiIFwiICkuaW5kZXhPZiggY2xhc3NOYW1lICkgPiAtMSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIHJyZXR1cm4gPSAvXFxyL2c7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0dmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGhvb2tzLCByZXQsIHZhbHVlSXNGdW5jdGlvbixcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF07XG5cblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHxcblx0XHRcdFx0XHRqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHRcdGlmICggaG9va3MgJiZcblx0XHRcdFx0XHRcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIFwidmFsdWVcIiApICkgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0ID0gZWxlbS52YWx1ZTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgbW9zdCBjb21tb24gc3RyaW5nIGNhc2VzXG5cdFx0XHRcdGlmICggdHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0LnJlcGxhY2UoIHJyZXR1cm4sIFwiXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEhhbmRsZSBjYXNlcyB3aGVyZSB2YWx1ZSBpcyBudWxsL3VuZGVmIG9yIG51bWJlclxuXHRcdFx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyBcIlwiIDogcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0dmFyIHZhbDtcblxuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlICE9PSAxICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsdWVJc0Z1bmN0aW9uICkge1xuXHRcdFx0XHR2YWwgPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBqUXVlcnkoIHRoaXMgKS52YWwoKSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFsID0gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzIFwiXCI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmdcblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHZhbCA9IFwiXCI7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdHZhbCArPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0dmFsID0galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKyBcIlwiO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyB0aGlzLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHQvLyBJZiBzZXQgcmV0dXJucyB1bmRlZmluZWQsIGZhbGwgYmFjayB0byBub3JtYWwgc2V0dGluZ1xuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCBcInZhbHVlXCIgKSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHR0aGlzLnZhbHVlID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHZhbEhvb2tzOiB7XG5cdFx0b3B0aW9uOiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHRcdHZhciB2YWwgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInZhbHVlXCIgKTtcblx0XHRcdFx0cmV0dXJuIHZhbCAhPSBudWxsID9cblx0XHRcdFx0XHR2YWwgOlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExIG9ubHlcblx0XHRcdFx0XHQvLyBvcHRpb24udGV4dCB0aHJvd3MgZXhjZXB0aW9ucyAoIzE0Njg2LCAjMTQ4NTgpXG5cdFx0XHRcdFx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2Vcblx0XHRcdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2Utd2hpdGVzcGFjZVxuXHRcdFx0XHRcdHN0cmlwQW5kQ29sbGFwc2UoIGpRdWVyeS50ZXh0KCBlbGVtICkgKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHNlbGVjdDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHZhbHVlLCBvcHRpb24sIGksXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHRpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCxcblx0XHRcdFx0XHRvbmUgPSBlbGVtLnR5cGUgPT09IFwic2VsZWN0LW9uZVwiLFxuXHRcdFx0XHRcdHZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSxcblx0XHRcdFx0XHRtYXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHRpZiAoIGluZGV4IDwgMCApIHtcblx0XHRcdFx0XHRpID0gbWF4O1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aSA9IG9uZSA/IGluZGV4IDogMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnNcblx0XHRcdFx0Zm9yICggOyBpIDwgbWF4OyBpKysgKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHQvLyBJRTgtOSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICgjMjU1MSlcblx0XHRcdFx0XHRpZiAoICggb3B0aW9uLnNlbGVjdGVkIHx8IGkgPT09IGluZGV4ICkgJiZcblxuXHRcdFx0XHRcdFx0XHQvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHRcdFx0XHRcdCFvcHRpb24uZGlzYWJsZWQgJiZcblx0XHRcdFx0XHRcdFx0KCAhb3B0aW9uLnBhcmVudE5vZGUuZGlzYWJsZWQgfHxcblx0XHRcdFx0XHRcdFx0XHQhbm9kZU5hbWUoIG9wdGlvbi5wYXJlbnROb2RlLCBcIm9wdGdyb3VwXCIgKSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7XG5cblx0XHRcdFx0XHRcdC8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzXG5cdFx0XHRcdFx0XHRpZiAoIG9uZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBNdWx0aS1TZWxlY3RzIHJldHVybiBhbiBhcnJheVxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH0sXG5cblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgb3B0aW9uU2V0LCBvcHRpb24sXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHR2YWx1ZXMgPSBqUXVlcnkubWFrZUFycmF5KCB2YWx1ZSApLFxuXHRcdFx0XHRcdGkgPSBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRvcHRpb24gPSBvcHRpb25zWyBpIF07XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXG5cdFx0XHRcdFx0aWYgKCBvcHRpb24uc2VsZWN0ZWQgPVxuXHRcdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGpRdWVyeS52YWxIb29rcy5vcHRpb24uZ2V0KCBvcHRpb24gKSwgdmFsdWVzICkgPiAtMVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0b3B0aW9uU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbmQtYXNzaWduICovXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGb3JjZSBicm93c2VycyB0byBiZWhhdmUgY29uc2lzdGVudGx5IHdoZW4gbm9uLW1hdGNoaW5nIHZhbHVlIGlzIHNldFxuXHRcdFx0XHRpZiAoICFvcHRpb25TZXQgKSB7XG5cdFx0XHRcdFx0ZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gUmFkaW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXJcbmpRdWVyeS5lYWNoKCBbIFwicmFkaW9cIiwgXCJjaGVja2JveFwiIF0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHtcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS5jaGVja2VkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeSggZWxlbSApLnZhbCgpLCB2YWx1ZSApID4gLTEgKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGlmICggIXN1cHBvcnQuY2hlY2tPbiApIHtcblx0XHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXS5nZXQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiICkgPT09IG51bGwgPyBcIm9uXCIgOiBlbGVtLnZhbHVlO1xuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUmV0dXJuIGpRdWVyeSBmb3IgYXR0cmlidXRlcy1vbmx5IGluY2x1c2lvblxuXG5cbnN1cHBvcnQuZm9jdXNpbiA9IFwib25mb2N1c2luXCIgaW4gd2luZG93O1xuXG5cbnZhciByZm9jdXNNb3JwaCA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxcblx0c3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgPSBmdW5jdGlvbiggZSApIHtcblx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9O1xuXG5qUXVlcnkuZXh0ZW5kKCBqUXVlcnkuZXZlbnQsIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9ubHlIYW5kbGVycyApIHtcblxuXHRcdHZhciBpLCBjdXIsIHRtcCwgYnViYmxlVHlwZSwgb250eXBlLCBoYW5kbGUsIHNwZWNpYWwsIGxhc3RFbGVtZW50LFxuXHRcdFx0ZXZlbnRQYXRoID0gWyBlbGVtIHx8IGRvY3VtZW50IF0sXG5cdFx0XHR0eXBlID0gaGFzT3duLmNhbGwoIGV2ZW50LCBcInR5cGVcIiApID8gZXZlbnQudHlwZSA6IGV2ZW50LFxuXHRcdFx0bmFtZXNwYWNlcyA9IGhhc093bi5jYWxsKCBldmVudCwgXCJuYW1lc3BhY2VcIiApID8gZXZlbnQubmFtZXNwYWNlLnNwbGl0KCBcIi5cIiApIDogW107XG5cblx0XHRjdXIgPSBsYXN0RWxlbWVudCA9IHRtcCA9IGVsZW0gPSBlbGVtIHx8IGRvY3VtZW50O1xuXG5cdFx0Ly8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBmb2N1cy9ibHVyIG1vcnBocyB0byBmb2N1c2luL291dDsgZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3dcblx0XHRpZiAoIHJmb2N1c01vcnBoLnRlc3QoIHR5cGUgKyBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlLmluZGV4T2YoIFwiLlwiICkgPiAtMSApIHtcblxuXHRcdFx0Ly8gTmFtZXNwYWNlZCB0cmlnZ2VyOyBjcmVhdGUgYSByZWdleHAgdG8gbWF0Y2ggZXZlbnQgdHlwZSBpbiBoYW5kbGUoKVxuXHRcdFx0bmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoIFwiLlwiICk7XG5cdFx0XHR0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpO1xuXHRcdFx0bmFtZXNwYWNlcy5zb3J0KCk7XG5cdFx0fVxuXHRcdG9udHlwZSA9IHR5cGUuaW5kZXhPZiggXCI6XCIgKSA8IDAgJiYgXCJvblwiICsgdHlwZTtcblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhIGpRdWVyeS5FdmVudCBvYmplY3QsIE9iamVjdCwgb3IganVzdCBhbiBldmVudCB0eXBlIHN0cmluZ1xuXHRcdGV2ZW50ID0gZXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0ZXZlbnQgOlxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCggdHlwZSwgdHlwZW9mIGV2ZW50ID09PSBcIm9iamVjdFwiICYmIGV2ZW50ICk7XG5cblx0XHQvLyBUcmlnZ2VyIGJpdG1hc2s6ICYgMSBmb3IgbmF0aXZlIGhhbmRsZXJzOyAmIDIgZm9yIGpRdWVyeSAoYWx3YXlzIHRydWUpXG5cdFx0ZXZlbnQuaXNUcmlnZ2VyID0gb25seUhhbmRsZXJzID8gMiA6IDM7XG5cdFx0ZXZlbnQubmFtZXNwYWNlID0gbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApO1xuXHRcdGV2ZW50LnJuYW1lc3BhY2UgPSBldmVudC5uYW1lc3BhY2UgP1xuXHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICkgOlxuXHRcdFx0bnVsbDtcblxuXHRcdC8vIENsZWFuIHVwIHRoZSBldmVudCBpbiBjYXNlIGl0IGlzIGJlaW5nIHJldXNlZFxuXHRcdGV2ZW50LnJlc3VsdCA9IHVuZGVmaW5lZDtcblx0XHRpZiAoICFldmVudC50YXJnZXQgKSB7XG5cdFx0XHRldmVudC50YXJnZXQgPSBlbGVtO1xuXHRcdH1cblxuXHRcdC8vIENsb25lIGFueSBpbmNvbWluZyBkYXRhIGFuZCBwcmVwZW5kIHRoZSBldmVudCwgY3JlYXRpbmcgdGhlIGhhbmRsZXIgYXJnIGxpc3Rcblx0XHRkYXRhID0gZGF0YSA9PSBudWxsID9cblx0XHRcdFsgZXZlbnQgXSA6XG5cdFx0XHRqUXVlcnkubWFrZUFycmF5KCBkYXRhLCBbIGV2ZW50IF0gKTtcblxuXHRcdC8vIEFsbG93IHNwZWNpYWwgZXZlbnRzIHRvIGRyYXcgb3V0c2lkZSB0aGUgbGluZXNcblx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgc3BlY2lhbC50cmlnZ2VyICYmIHNwZWNpYWwudHJpZ2dlci5hcHBseSggZWxlbSwgZGF0YSApID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgZXZlbnQgcHJvcGFnYXRpb24gcGF0aCBpbiBhZHZhbmNlLCBwZXIgVzNDIGV2ZW50cyBzcGVjICgjOTk1MSlcblx0XHQvLyBCdWJibGUgdXAgdG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93OyB3YXRjaCBmb3IgYSBnbG9iYWwgb3duZXJEb2N1bWVudCB2YXIgKCM5NzI0KVxuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhc3BlY2lhbC5ub0J1YmJsZSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0YnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7XG5cdFx0XHRpZiAoICFyZm9jdXNNb3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApICkge1xuXHRcdFx0XHRjdXIgPSBjdXIucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGZvciAoIDsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIGN1ciApO1xuXHRcdFx0XHR0bXAgPSBjdXI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKVxuXHRcdFx0aWYgKCB0bXAgPT09ICggZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50ICkgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCB0bXAuZGVmYXVsdFZpZXcgfHwgdG1wLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGV2ZW50UGF0aFsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGxhc3RFbGVtZW50ID0gY3VyO1xuXHRcdFx0ZXZlbnQudHlwZSA9IGkgPiAxID9cblx0XHRcdFx0YnViYmxlVHlwZSA6XG5cdFx0XHRcdHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTtcblxuXHRcdFx0Ly8galF1ZXJ5IGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9ICggZGF0YVByaXYuZ2V0KCBjdXIsIFwiZXZlbnRzXCIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gJiZcblx0XHRcdFx0ZGF0YVByaXYuZ2V0KCBjdXIsIFwiaGFuZGxlXCIgKTtcblx0XHRcdGlmICggaGFuZGxlICkge1xuXHRcdFx0XHRoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBOYXRpdmUgaGFuZGxlclxuXHRcdFx0aGFuZGxlID0gb250eXBlICYmIGN1clsgb250eXBlIF07XG5cdFx0XHRpZiAoIGhhbmRsZSAmJiBoYW5kbGUuYXBwbHkgJiYgYWNjZXB0RGF0YSggY3VyICkgKSB7XG5cdFx0XHRcdGV2ZW50LnJlc3VsdCA9IGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGV2ZW50LnR5cGUgPSB0eXBlO1xuXG5cdFx0Ly8gSWYgbm9ib2R5IHByZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRvIGl0IG5vd1xuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7XG5cblx0XHRcdGlmICggKCAhc3BlY2lhbC5fZGVmYXVsdCB8fFxuXHRcdFx0XHRzcGVjaWFsLl9kZWZhdWx0LmFwcGx5KCBldmVudFBhdGgucG9wKCksIGRhdGEgKSA9PT0gZmFsc2UgKSAmJlxuXHRcdFx0XHRhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cblx0XHRcdFx0Ly8gQ2FsbCBhIG5hdGl2ZSBET00gbWV0aG9kIG9uIHRoZSB0YXJnZXQgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBldmVudC5cblx0XHRcdFx0Ly8gRG9uJ3QgZG8gZGVmYXVsdCBhY3Rpb25zIG9uIHdpbmRvdywgdGhhdCdzIHdoZXJlIGdsb2JhbCB2YXJpYWJsZXMgYmUgKCM2MTcwKVxuXHRcdFx0XHRpZiAoIG9udHlwZSAmJiBpc0Z1bmN0aW9uKCBlbGVtWyB0eXBlIF0gKSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vIERvbid0IHJlLXRyaWdnZXIgYW4gb25GT08gZXZlbnQgd2hlbiB3ZSBjYWxsIGl0cyBGT08oKSBtZXRob2Rcblx0XHRcdFx0XHR0bXAgPSBlbGVtWyBvbnR5cGUgXTtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSBudWxsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFByZXZlbnQgcmUtdHJpZ2dlcmluZyBvZiB0aGUgc2FtZSBldmVudCwgc2luY2Ugd2UgYWxyZWFkeSBidWJibGVkIGl0IGFib3ZlXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHR5cGU7XG5cblx0XHRcdFx0XHRpZiAoIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRcdFx0XHRsYXN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBzdG9wUHJvcGFnYXRpb25DYWxsYmFjayApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW1bIHR5cGUgXSgpO1xuXG5cdFx0XHRcdFx0aWYgKCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0XHRcdFx0bGFzdEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IHRtcDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdC8vIFBpZ2d5YmFjayBvbiBhIGRvbm9yIGV2ZW50IHRvIHNpbXVsYXRlIGEgZGlmZmVyZW50IG9uZVxuXHQvLyBVc2VkIG9ubHkgZm9yIGBmb2N1cyhpbiB8IG91dClgIGV2ZW50c1xuXHRzaW11bGF0ZTogZnVuY3Rpb24oIHR5cGUsIGVsZW0sIGV2ZW50ICkge1xuXHRcdHZhciBlID0galF1ZXJ5LmV4dGVuZChcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoKSxcblx0XHRcdGV2ZW50LFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRpc1NpbXVsYXRlZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxlbSApO1xuXHR9XG5cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdHRyaWdnZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTtcblx0XHR9ICk7XG5cdH0sXG5cdHRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXTtcblx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIGVsZW0sIHRydWUgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxuXG4vLyBTdXBwb3J0OiBGaXJlZm94IDw9NDRcbi8vIEZpcmVmb3ggZG9lc24ndCBoYXZlIGZvY3VzKGluIHwgb3V0KSBldmVudHNcbi8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3Nzg3XG4vL1xuLy8gU3VwcG9ydDogQ2hyb21lIDw9NDggLSA0OSwgU2FmYXJpIDw9OS4wIC0gOS4xXG4vLyBmb2N1cyhpbiB8IG91dCkgZXZlbnRzIGZpcmUgYWZ0ZXIgZm9jdXMgJiBibHVyIGV2ZW50cyxcbi8vIHdoaWNoIGlzIHNwZWMgdmlvbGF0aW9uIC0gaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudHMtZm9jdXNldmVudC1ldmVudC1vcmRlclxuLy8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NDk4NTdcbmlmICggIXN1cHBvcnQuZm9jdXNpbiApIHtcblx0alF1ZXJ5LmVhY2goIHsgZm9jdXM6IFwiZm9jdXNpblwiLCBibHVyOiBcImZvY3Vzb3V0XCIgfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHtcblxuXHRcdC8vIEF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciBvbiB0aGUgZG9jdW1lbnQgd2hpbGUgc29tZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0XG5cdFx0dmFyIGhhbmRsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQuc2ltdWxhdGUoIGZpeCwgZXZlbnQudGFyZ2V0LCBqUXVlcnkuZXZlbnQuZml4KCBldmVudCApICk7XG5cdFx0fTtcblxuXHRcdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBmaXggXSA9IHtcblx0XHRcdHNldHVwOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCApO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5hZGRFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgKCBhdHRhY2hlcyB8fCAwICkgKyAxICk7XG5cdFx0XHR9LFxuXHRcdFx0dGVhcmRvd246IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMsXG5cdFx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4ICkgLSAxO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkb2MsIGZpeCApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgYXR0YWNoZXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH0gKTtcbn1cbnZhciBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcblxudmFyIG5vbmNlID0gRGF0ZS5ub3coKTtcblxudmFyIHJxdWVyeSA9ICggL1xcPy8gKTtcblxuXG5cbi8vIENyb3NzLWJyb3dzZXIgeG1sIHBhcnNpbmdcbmpRdWVyeS5wYXJzZVhNTCA9IGZ1bmN0aW9uKCBkYXRhICkge1xuXHR2YXIgeG1sO1xuXHRpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0Ly8gSUUgdGhyb3dzIG9uIHBhcnNlRnJvbVN0cmluZyB3aXRoIGludmFsaWQgaW5wdXQuXG5cdHRyeSB7XG5cdFx0eG1sID0gKCBuZXcgd2luZG93LkRPTVBhcnNlcigpICkucGFyc2VGcm9tU3RyaW5nKCBkYXRhLCBcInRleHQveG1sXCIgKTtcblx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0eG1sID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKCAheG1sIHx8IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSggXCJwYXJzZXJlcnJvclwiICkubGVuZ3RoICkge1xuXHRcdGpRdWVyeS5lcnJvciggXCJJbnZhbGlkIFhNTDogXCIgKyBkYXRhICk7XG5cdH1cblx0cmV0dXJuIHhtbDtcbn07XG5cblxudmFyXG5cdHJicmFja2V0ID0gL1xcW1xcXSQvLFxuXHRyQ1JMRiA9IC9cXHI/XFxuL2csXG5cdHJzdWJtaXR0ZXJUeXBlcyA9IC9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxcblx0cnN1Ym1pdHRhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO1xuXG5mdW5jdGlvbiBidWlsZFBhcmFtcyggcHJlZml4LCBvYmosIHRyYWRpdGlvbmFsLCBhZGQgKSB7XG5cdHZhciBuYW1lO1xuXG5cdGlmICggQXJyYXkuaXNBcnJheSggb2JqICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS5cblx0XHRqUXVlcnkuZWFjaCggb2JqLCBmdW5jdGlvbiggaSwgdiApIHtcblx0XHRcdGlmICggdHJhZGl0aW9uYWwgfHwgcmJyYWNrZXQudGVzdCggcHJlZml4ICkgKSB7XG5cblx0XHRcdFx0Ly8gVHJlYXQgZWFjaCBhcnJheSBpdGVtIGFzIGEgc2NhbGFyLlxuXHRcdFx0XHRhZGQoIHByZWZpeCwgdiApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEl0ZW0gaXMgbm9uLXNjYWxhciAoYXJyYXkgb3Igb2JqZWN0KSwgZW5jb2RlIGl0cyBudW1lcmljIGluZGV4LlxuXHRcdFx0XHRidWlsZFBhcmFtcyhcblx0XHRcdFx0XHRwcmVmaXggKyBcIltcIiArICggdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPSBudWxsID8gaSA6IFwiXCIgKSArIFwiXVwiLFxuXHRcdFx0XHRcdHYsXG5cdFx0XHRcdFx0dHJhZGl0aW9uYWwsXG5cdFx0XHRcdFx0YWRkXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdH0gZWxzZSBpZiAoICF0cmFkaXRpb25hbCAmJiB0b1R5cGUoIG9iaiApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIG9iamVjdCBpdGVtLlxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCArIFwiW1wiICsgbmFtZSArIFwiXVwiLCBvYmpbIG5hbWUgXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xuXHRcdH1cblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gU2VyaWFsaXplIHNjYWxhciBpdGVtLlxuXHRcdGFkZCggcHJlZml4LCBvYmogKTtcblx0fVxufVxuXG4vLyBTZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cyBvciBhIHNldCBvZlxuLy8ga2V5L3ZhbHVlcyBpbnRvIGEgcXVlcnkgc3RyaW5nXG5qUXVlcnkucGFyYW0gPSBmdW5jdGlvbiggYSwgdHJhZGl0aW9uYWwgKSB7XG5cdHZhciBwcmVmaXgsXG5cdFx0cyA9IFtdLFxuXHRcdGFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlT3JGdW5jdGlvbiApIHtcblxuXHRcdFx0Ly8gSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCB1c2UgaXRzIHJldHVybiB2YWx1ZVxuXHRcdFx0dmFyIHZhbHVlID0gaXNGdW5jdGlvbiggdmFsdWVPckZ1bmN0aW9uICkgP1xuXHRcdFx0XHR2YWx1ZU9yRnVuY3Rpb24oKSA6XG5cdFx0XHRcdHZhbHVlT3JGdW5jdGlvbjtcblxuXHRcdFx0c1sgcy5sZW5ndGggXSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyBcIj1cIiArXG5cdFx0XHRcdGVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSApO1xuXHRcdH07XG5cblx0aWYgKCBhID09IG51bGwgKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHQvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLlxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHNcblx0XHRqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRhZGQoIHRoaXMubmFtZSwgdGhpcy52YWx1ZSApO1xuXHRcdH0gKTtcblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUgXCJvbGRcIiB3YXkgKHRoZSB3YXkgMS4zLjIgb3Igb2xkZXJcblx0XHQvLyBkaWQgaXQpLCBvdGhlcndpc2UgZW5jb2RlIHBhcmFtcyByZWN1cnNpdmVseS5cblx0XHRmb3IgKCBwcmVmaXggaW4gYSApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvblxuXHRyZXR1cm4gcy5qb2luKCBcIiZcIiApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRzZXJpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApO1xuXHR9LFxuXHRzZXJpYWxpemVBcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gQ2FuIGFkZCBwcm9wSG9vayBmb3IgXCJlbGVtZW50c1wiIHRvIGZpbHRlciBvciBhZGQgZm9ybSBlbGVtZW50c1xuXHRcdFx0dmFyIGVsZW1lbnRzID0galF1ZXJ5LnByb3AoIHRoaXMsIFwiZWxlbWVudHNcIiApO1xuXHRcdFx0cmV0dXJuIGVsZW1lbnRzID8galF1ZXJ5Lm1ha2VBcnJheSggZWxlbWVudHMgKSA6IHRoaXM7XG5cdFx0fSApXG5cdFx0LmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcblxuXHRcdFx0Ly8gVXNlIC5pcyggXCI6ZGlzYWJsZWRcIiApIHNvIHRoYXQgZmllbGRzZXRbZGlzYWJsZWRdIHdvcmtzXG5cdFx0XHRyZXR1cm4gdGhpcy5uYW1lICYmICFqUXVlcnkoIHRoaXMgKS5pcyggXCI6ZGlzYWJsZWRcIiApICYmXG5cdFx0XHRcdHJzdWJtaXR0YWJsZS50ZXN0KCB0aGlzLm5vZGVOYW1lICkgJiYgIXJzdWJtaXR0ZXJUeXBlcy50ZXN0KCB0eXBlICkgJiZcblx0XHRcdFx0KCB0aGlzLmNoZWNrZWQgfHwgIXJjaGVja2FibGVUeXBlLnRlc3QoIHR5cGUgKSApO1xuXHRcdH0gKVxuXHRcdC5tYXAoIGZ1bmN0aW9uKCBpLCBlbGVtICkge1xuXHRcdFx0dmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpO1xuXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0cmV0dXJuIGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbCApIHtcblx0XHRcdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0fSApLmdldCgpO1xuXHR9XG59ICk7XG5cblxudmFyXG5cdHIyMCA9IC8lMjAvZyxcblx0cmhhc2ggPSAvIy4qJC8sXG5cdHJhbnRpQ2FjaGUgPSAvKFs/Jl0pXz1bXiZdKi8sXG5cdHJoZWFkZXJzID0gL14oLio/KTpbIFxcdF0qKFteXFxyXFxuXSopJC9tZyxcblxuXHQvLyAjNzY1MywgIzgxMjUsICM4MTUyOiBsb2NhbCBwcm90b2NvbCBkZXRlY3Rpb25cblx0cmxvY2FsUHJvdG9jb2wgPSAvXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxcblx0cm5vQ29udGVudCA9IC9eKD86R0VUfEhFQUQpJC8sXG5cdHJwcm90b2NvbCA9IC9eXFwvXFwvLyxcblxuXHQvKiBQcmVmaWx0ZXJzXG5cdCAqIDEpIFRoZXkgYXJlIHVzZWZ1bCB0byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9yIGFuIGV4YW1wbGUpXG5cdCAqIDIpIFRoZXNlIGFyZSBjYWxsZWQ6XG5cdCAqICAgIC0gQkVGT1JFIGFza2luZyBmb3IgYSB0cmFuc3BvcnRcblx0ICogICAgLSBBRlRFUiBwYXJhbSBzZXJpYWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVlKVxuXHQgKiAzKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDQpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogNSkgZXhlY3V0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gY29udGludWUgZG93biB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHByZWZpbHRlcnMgPSB7fSxcblxuXHQvKiBUcmFuc3BvcnRzIGJpbmRpbmdzXG5cdCAqIDEpIGtleSBpcyB0aGUgZGF0YVR5cGVcblx0ICogMikgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxuXHQgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHRyYW5zcG9ydHMgPSB7fSxcblxuXHQvLyBBdm9pZCBjb21tZW50LXByb2xvZyBjaGFyIHNlcXVlbmNlICgjMTAwOTgpOyBtdXN0IGFwcGVhc2UgbGludCBhbmQgZXZhZGUgY29tcHJlc3Npb25cblx0YWxsVHlwZXMgPSBcIiovXCIuY29uY2F0KCBcIipcIiApLFxuXG5cdC8vIEFuY2hvciB0YWcgZm9yIHBhcnNpbmcgdGhlIGRvY3VtZW50IG9yaWdpblxuXHRvcmlnaW5BbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImFcIiApO1xuXHRvcmlnaW5BbmNob3IuaHJlZiA9IGxvY2F0aW9uLmhyZWY7XG5cbi8vIEJhc2UgXCJjb25zdHJ1Y3RvclwiIGZvciBqUXVlcnkuYWpheFByZWZpbHRlciBhbmQgalF1ZXJ5LmFqYXhUcmFuc3BvcnRcbmZ1bmN0aW9uIGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlICkge1xuXG5cdC8vIGRhdGFUeXBlRXhwcmVzc2lvbiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gXCIqXCJcblx0cmV0dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Npb24gIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRmdW5jID0gZGF0YVR5cGVFeHByZXNzaW9uO1xuXHRcdFx0ZGF0YVR5cGVFeHByZXNzaW9uID0gXCIqXCI7XG5cdFx0fVxuXG5cdFx0dmFyIGRhdGFUeXBlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRkYXRhVHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBmdW5jICkgKSB7XG5cblx0XHRcdC8vIEZvciBlYWNoIGRhdGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4cHJlc3Npb25cblx0XHRcdHdoaWxlICggKCBkYXRhVHlwZSA9IGRhdGFUeXBlc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHQvLyBQcmVwZW5kIGlmIHJlcXVlc3RlZFxuXHRcdFx0XHRpZiAoIGRhdGFUeXBlWyAwIF0gPT09IFwiK1wiICkge1xuXHRcdFx0XHRcdGRhdGFUeXBlID0gZGF0YVR5cGUuc2xpY2UoIDEgKSB8fCBcIipcIjtcblx0XHRcdFx0XHQoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSApLnVuc2hpZnQoIGZ1bmMgKTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYXBwZW5kXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS5wdXNoKCBmdW5jICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbi8vIEJhc2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQgdHJhbnNwb3J0c1xuZnVuY3Rpb24gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApIHtcblxuXHR2YXIgaW5zcGVjdGVkID0ge30sXG5cdFx0c2Vla2luZ1RyYW5zcG9ydCA9ICggc3RydWN0dXJlID09PSB0cmFuc3BvcnRzICk7XG5cblx0ZnVuY3Rpb24gaW5zcGVjdCggZGF0YVR5cGUgKSB7XG5cdFx0dmFyIHNlbGVjdGVkO1xuXHRcdGluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7XG5cdFx0alF1ZXJ5LmVhY2goIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSwgZnVuY3Rpb24oIF8sIHByZWZpbHRlck9yRmFjdG9yeSApIHtcblx0XHRcdHZhciBkYXRhVHlwZU9yVHJhbnNwb3J0ID0gcHJlZmlsdGVyT3JGYWN0b3J5KCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICk7XG5cdFx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZU9yVHJhbnNwb3J0ID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzZWVraW5nVHJhbnNwb3J0ICYmICFpbnNwZWN0ZWRbIGRhdGFUeXBlT3JUcmFuc3BvcnQgXSApIHtcblxuXHRcdFx0XHRvcHRpb25zLmRhdGFUeXBlcy51bnNoaWZ0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdGluc3BlY3QoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmICggc2Vla2luZ1RyYW5zcG9ydCApIHtcblx0XHRcdFx0cmV0dXJuICEoIHNlbGVjdGVkID0gZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHRyZXR1cm4gc2VsZWN0ZWQ7XG5cdH1cblxuXHRyZXR1cm4gaW5zcGVjdCggb3B0aW9ucy5kYXRhVHlwZXNbIDAgXSApIHx8ICFpbnNwZWN0ZWRbIFwiKlwiIF0gJiYgaW5zcGVjdCggXCIqXCIgKTtcbn1cblxuLy8gQSBzcGVjaWFsIGV4dGVuZCBmb3IgYWpheCBvcHRpb25zXG4vLyB0aGF0IHRha2VzIFwiZmxhdFwiIG9wdGlvbnMgKG5vdCB0byBiZSBkZWVwIGV4dGVuZGVkKVxuLy8gRml4ZXMgIzk4ODdcbmZ1bmN0aW9uIGFqYXhFeHRlbmQoIHRhcmdldCwgc3JjICkge1xuXHR2YXIga2V5LCBkZWVwLFxuXHRcdGZsYXRPcHRpb25zID0galF1ZXJ5LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9ucyB8fCB7fTtcblxuXHRmb3IgKCBrZXkgaW4gc3JjICkge1xuXHRcdGlmICggc3JjWyBrZXkgXSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0KCBmbGF0T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQgOiAoIGRlZXAgfHwgKCBkZWVwID0ge30gKSApIClbIGtleSBdID0gc3JjWyBrZXkgXTtcblx0XHR9XG5cdH1cblx0aWYgKCBkZWVwICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRydWUsIHRhcmdldCwgZGVlcCApO1xuXHR9XG5cblx0cmV0dXJuIHRhcmdldDtcbn1cblxuLyogSGFuZGxlcyByZXNwb25zZXMgdG8gYW4gYWpheCByZXF1ZXN0OlxuICogLSBmaW5kcyB0aGUgcmlnaHQgZGF0YVR5cGUgKG1lZGlhdGVzIGJldHdlZW4gY29udGVudC10eXBlIGFuZCBleHBlY3RlZCBkYXRhVHlwZSlcbiAqIC0gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxuICovXG5mdW5jdGlvbiBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICkge1xuXG5cdHZhciBjdCwgdHlwZSwgZmluYWxEYXRhVHlwZSwgZmlyc3REYXRhVHlwZSxcblx0XHRjb250ZW50cyA9IHMuY29udGVudHMsXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXM7XG5cblx0Ly8gUmVtb3ZlIGF1dG8gZGF0YVR5cGUgYW5kIGdldCBjb250ZW50LXR5cGUgaW4gdGhlIHByb2Nlc3Ncblx0d2hpbGUgKCBkYXRhVHlwZXNbIDAgXSA9PT0gXCIqXCIgKSB7XG5cdFx0ZGF0YVR5cGVzLnNoaWZ0KCk7XG5cdFx0aWYgKCBjdCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0Y3QgPSBzLm1pbWVUeXBlIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEga25vd24gY29udGVudC10eXBlXG5cdGlmICggY3QgKSB7XG5cdFx0Zm9yICggdHlwZSBpbiBjb250ZW50cyApIHtcblx0XHRcdGlmICggY29udGVudHNbIHR5cGUgXSAmJiBjb250ZW50c1sgdHlwZSBdLnRlc3QoIGN0ICkgKSB7XG5cdFx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCB0eXBlICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgcmVzcG9uc2UgZm9yIHRoZSBleHBlY3RlZCBkYXRhVHlwZVxuXHRpZiAoIGRhdGFUeXBlc1sgMCBdIGluIHJlc3BvbnNlcyApIHtcblx0XHRmaW5hbERhdGFUeXBlID0gZGF0YVR5cGVzWyAwIF07XG5cdH0gZWxzZSB7XG5cblx0XHQvLyBUcnkgY29udmVydGlibGUgZGF0YVR5cGVzXG5cdFx0Zm9yICggdHlwZSBpbiByZXNwb25zZXMgKSB7XG5cdFx0XHRpZiAoICFkYXRhVHlwZXNbIDAgXSB8fCBzLmNvbnZlcnRlcnNbIHR5cGUgKyBcIiBcIiArIGRhdGFUeXBlc1sgMCBdIF0gKSB7XG5cdFx0XHRcdGZpbmFsRGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmICggIWZpcnN0RGF0YVR5cGUgKSB7XG5cdFx0XHRcdGZpcnN0RGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE9yIGp1c3QgdXNlIGZpcnN0IG9uZVxuXHRcdGZpbmFsRGF0YVR5cGUgPSBmaW5hbERhdGFUeXBlIHx8IGZpcnN0RGF0YVR5cGU7XG5cdH1cblxuXHQvLyBJZiB3ZSBmb3VuZCBhIGRhdGFUeXBlXG5cdC8vIFdlIGFkZCB0aGUgZGF0YVR5cGUgdG8gdGhlIGxpc3QgaWYgbmVlZGVkXG5cdC8vIGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2Vcblx0aWYgKCBmaW5hbERhdGFUeXBlICkge1xuXHRcdGlmICggZmluYWxEYXRhVHlwZSAhPT0gZGF0YVR5cGVzWyAwIF0gKSB7XG5cdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggZmluYWxEYXRhVHlwZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzcG9uc2VzWyBmaW5hbERhdGFUeXBlIF07XG5cdH1cbn1cblxuLyogQ2hhaW4gY29udmVyc2lvbnMgZ2l2ZW4gdGhlIHJlcXVlc3QgYW5kIHRoZSBvcmlnaW5hbCByZXNwb25zZVxuICogQWxzbyBzZXRzIHRoZSByZXNwb25zZVhYWCBmaWVsZHMgb24gdGhlIGpxWEhSIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApIHtcblx0dmFyIGNvbnYyLCBjdXJyZW50LCBjb252LCB0bXAsIHByZXYsXG5cdFx0Y29udmVydGVycyA9IHt9LFxuXG5cdFx0Ly8gV29yayB3aXRoIGEgY29weSBvZiBkYXRhVHlwZXMgaW4gY2FzZSB3ZSBuZWVkIHRvIG1vZGlmeSBpdCBmb3IgY29udmVyc2lvblxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLnNsaWNlKCk7XG5cblx0Ly8gQ3JlYXRlIGNvbnZlcnRlcnMgbWFwIHdpdGggbG93ZXJjYXNlZCBrZXlzXG5cdGlmICggZGF0YVR5cGVzWyAxIF0gKSB7XG5cdFx0Zm9yICggY29udiBpbiBzLmNvbnZlcnRlcnMgKSB7XG5cdFx0XHRjb252ZXJ0ZXJzWyBjb252LnRvTG93ZXJDYXNlKCkgXSA9IHMuY29udmVydGVyc1sgY29udiBdO1xuXHRcdH1cblx0fVxuXG5cdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHQvLyBDb252ZXJ0IHRvIGVhY2ggc2VxdWVudGlhbCBkYXRhVHlwZVxuXHR3aGlsZSAoIGN1cnJlbnQgKSB7XG5cblx0XHRpZiAoIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSApIHtcblx0XHRcdGpxWEhSWyBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gXSA9IHJlc3BvbnNlO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkXG5cdFx0aWYgKCAhcHJldiAmJiBpc1N1Y2Nlc3MgJiYgcy5kYXRhRmlsdGVyICkge1xuXHRcdFx0cmVzcG9uc2UgPSBzLmRhdGFGaWx0ZXIoIHJlc3BvbnNlLCBzLmRhdGFUeXBlICk7XG5cdFx0fVxuXG5cdFx0cHJldiA9IGN1cnJlbnQ7XG5cdFx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xuXG5cdFx0aWYgKCBjdXJyZW50ICkge1xuXG5cdFx0XHQvLyBUaGVyZSdzIG9ubHkgd29yayB0byBkbyBpZiBjdXJyZW50IGRhdGFUeXBlIGlzIG5vbi1hdXRvXG5cdFx0XHRpZiAoIGN1cnJlbnQgPT09IFwiKlwiICkge1xuXG5cdFx0XHRcdGN1cnJlbnQgPSBwcmV2O1xuXG5cdFx0XHQvLyBDb252ZXJ0IHJlc3BvbnNlIGlmIHByZXYgZGF0YVR5cGUgaXMgbm9uLWF1dG8gYW5kIGRpZmZlcnMgZnJvbSBjdXJyZW50XG5cdFx0XHR9IGVsc2UgaWYgKCBwcmV2ICE9PSBcIipcIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdC8vIFNlZWsgYSBkaXJlY3QgY29udmVydGVyXG5cdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyBjdXJyZW50IF0gfHwgY29udmVydGVyc1sgXCIqIFwiICsgY3VycmVudCBdO1xuXG5cdFx0XHRcdC8vIElmIG5vbmUgZm91bmQsIHNlZWsgYSBwYWlyXG5cdFx0XHRcdGlmICggIWNvbnYgKSB7XG5cdFx0XHRcdFx0Zm9yICggY29udjIgaW4gY29udmVydGVycyApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSWYgY29udjIgb3V0cHV0cyBjdXJyZW50XG5cdFx0XHRcdFx0XHR0bXAgPSBjb252Mi5zcGxpdCggXCIgXCIgKTtcblx0XHRcdFx0XHRcdGlmICggdG1wWyAxIF0gPT09IGN1cnJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gSWYgcHJldiBjYW4gYmUgY29udmVydGVkIHRvIGFjY2VwdGVkIGlucHV0XG5cdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyB0bXBbIDAgXSBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyc1sgXCIqIFwiICsgdG1wWyAwIF0gXTtcblx0XHRcdFx0XHRcdFx0aWYgKCBjb252ICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ29uZGVuc2UgZXF1aXZhbGVuY2UgY29udmVydGVyc1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY29udiA9PT0gdHJ1ZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBjb252MiBdO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBpbnNlcnQgdGhlIGludGVybWVkaWF0ZSBkYXRhVHlwZVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGNvbnZlcnRlcnNbIGNvbnYyIF0gIT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50ID0gdG1wWyAwIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdG1wWyAxIF0gKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBcHBseSBjb252ZXJ0ZXIgKGlmIG5vdCBhbiBlcXVpdmFsZW5jZSlcblx0XHRcdFx0aWYgKCBjb252ICE9PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0Ly8gVW5sZXNzIGVycm9ycyBhcmUgYWxsb3dlZCB0byBidWJibGUsIGNhdGNoIGFuZCByZXR1cm4gdGhlbVxuXHRcdFx0XHRcdGlmICggY29udiAmJiBzLnRocm93cyApIHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdGU6IFwicGFyc2VyZXJyb3JcIixcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjogY29udiA/IGUgOiBcIk5vIGNvbnZlcnNpb24gZnJvbSBcIiArIHByZXYgKyBcIiB0byBcIiArIGN1cnJlbnRcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyBzdGF0ZTogXCJzdWNjZXNzXCIsIGRhdGE6IHJlc3BvbnNlIH07XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBDb3VudGVyIGZvciBob2xkaW5nIHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1ZXJpZXNcblx0YWN0aXZlOiAwLFxuXG5cdC8vIExhc3QtTW9kaWZpZWQgaGVhZGVyIGNhY2hlIGZvciBuZXh0IHJlcXVlc3Rcblx0bGFzdE1vZGlmaWVkOiB7fSxcblx0ZXRhZzoge30sXG5cblx0YWpheFNldHRpbmdzOiB7XG5cdFx0dXJsOiBsb2NhdGlvbi5ocmVmLFxuXHRcdHR5cGU6IFwiR0VUXCIsXG5cdFx0aXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggbG9jYXRpb24ucHJvdG9jb2wgKSxcblx0XHRnbG9iYWw6IHRydWUsXG5cdFx0cHJvY2Vzc0RhdGE6IHRydWUsXG5cdFx0YXN5bmM6IHRydWUsXG5cdFx0Y29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsXG5cblx0XHQvKlxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0ZGF0YTogbnVsbCxcblx0XHRkYXRhVHlwZTogbnVsbCxcblx0XHR1c2VybmFtZTogbnVsbCxcblx0XHRwYXNzd29yZDogbnVsbCxcblx0XHRjYWNoZTogbnVsbCxcblx0XHR0aHJvd3M6IGZhbHNlLFxuXHRcdHRyYWRpdGlvbmFsOiBmYWxzZSxcblx0XHRoZWFkZXJzOiB7fSxcblx0XHQqL1xuXG5cdFx0YWNjZXB0czoge1xuXHRcdFx0XCIqXCI6IGFsbFR5cGVzLFxuXHRcdFx0dGV4dDogXCJ0ZXh0L3BsYWluXCIsXG5cdFx0XHRodG1sOiBcInRleHQvaHRtbFwiLFxuXHRcdFx0eG1sOiBcImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWxcIixcblx0XHRcdGpzb246IFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0XCJcblx0XHR9LFxuXG5cdFx0Y29udGVudHM6IHtcblx0XHRcdHhtbDogL1xcYnhtbFxcYi8sXG5cdFx0XHRodG1sOiAvXFxiaHRtbC8sXG5cdFx0XHRqc29uOiAvXFxianNvblxcYi9cblx0XHR9LFxuXG5cdFx0cmVzcG9uc2VGaWVsZHM6IHtcblx0XHRcdHhtbDogXCJyZXNwb25zZVhNTFwiLFxuXHRcdFx0dGV4dDogXCJyZXNwb25zZVRleHRcIixcblx0XHRcdGpzb246IFwicmVzcG9uc2VKU09OXCJcblx0XHR9LFxuXG5cdFx0Ly8gRGF0YSBjb252ZXJ0ZXJzXG5cdFx0Ly8gS2V5cyBzZXBhcmF0ZSBzb3VyY2UgKG9yIGNhdGNoYWxsIFwiKlwiKSBhbmQgZGVzdGluYXRpb24gdHlwZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuXHRcdGNvbnZlcnRlcnM6IHtcblxuXHRcdFx0Ly8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0XG5cdFx0XHRcIiogdGV4dFwiOiBTdHJpbmcsXG5cblx0XHRcdC8vIFRleHQgdG8gaHRtbCAodHJ1ZSA9IG5vIHRyYW5zZm9ybWF0aW9uKVxuXHRcdFx0XCJ0ZXh0IGh0bWxcIjogdHJ1ZSxcblxuXHRcdFx0Ly8gRXZhbHVhdGUgdGV4dCBhcyBhIGpzb24gZXhwcmVzc2lvblxuXHRcdFx0XCJ0ZXh0IGpzb25cIjogSlNPTi5wYXJzZSxcblxuXHRcdFx0Ly8gUGFyc2UgdGV4dCBhcyB4bWxcblx0XHRcdFwidGV4dCB4bWxcIjogalF1ZXJ5LnBhcnNlWE1MXG5cdFx0fSxcblxuXHRcdC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6XG5cdFx0Ly8geW91IGNhbiBhZGQgeW91ciBvd24gY3VzdG9tIG9wdGlvbnMgaGVyZSBpZlxuXHRcdC8vIGFuZCB3aGVuIHlvdSBjcmVhdGUgb25lIHRoYXQgc2hvdWxkbid0IGJlXG5cdFx0Ly8gZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQpXG5cdFx0ZmxhdE9wdGlvbnM6IHtcblx0XHRcdHVybDogdHJ1ZSxcblx0XHRcdGNvbnRleHQ6IHRydWVcblx0XHR9XG5cdH0sXG5cblx0Ly8gQ3JlYXRlcyBhIGZ1bGwgZmxlZGdlZCBzZXR0aW5ncyBvYmplY3QgaW50byB0YXJnZXRcblx0Ly8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRzLlxuXHQvLyBJZiB0YXJnZXQgaXMgb21pdHRlZCwgd3JpdGVzIGludG8gYWpheFNldHRpbmdzLlxuXHRhamF4U2V0dXA6IGZ1bmN0aW9uKCB0YXJnZXQsIHNldHRpbmdzICkge1xuXHRcdHJldHVybiBzZXR0aW5ncyA/XG5cblx0XHRcdC8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2JqZWN0XG5cdFx0XHRhamF4RXh0ZW5kKCBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGluZ3MgKSwgc2V0dGluZ3MgKSA6XG5cblx0XHRcdC8vIEV4dGVuZGluZyBhamF4U2V0dGluZ3Ncblx0XHRcdGFqYXhFeHRlbmQoIGpRdWVyeS5hamF4U2V0dGluZ3MsIHRhcmdldCApO1xuXHR9LFxuXG5cdGFqYXhQcmVmaWx0ZXI6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycyApLFxuXHRhamF4VHJhbnNwb3J0OiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMgKSxcblxuXHQvLyBNYWluIG1ldGhvZFxuXHRhamF4OiBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkge1xuXG5cdFx0Ly8gSWYgdXJsIGlzIGFuIG9iamVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmVcblx0XHRpZiAoIHR5cGVvZiB1cmwgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRvcHRpb25zID0gdXJsO1xuXHRcdFx0dXJsID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0XG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0XHR2YXIgdHJhbnNwb3J0LFxuXG5cdFx0XHQvLyBVUkwgd2l0aG91dCBhbnRpLWNhY2hlIHBhcmFtXG5cdFx0XHRjYWNoZVVSTCxcblxuXHRcdFx0Ly8gUmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nLFxuXHRcdFx0cmVzcG9uc2VIZWFkZXJzLFxuXG5cdFx0XHQvLyB0aW1lb3V0IGhhbmRsZVxuXHRcdFx0dGltZW91dFRpbWVyLFxuXG5cdFx0XHQvLyBVcmwgY2xlYW51cCB2YXJcblx0XHRcdHVybEFuY2hvcixcblxuXHRcdFx0Ly8gUmVxdWVzdCBzdGF0ZSAoYmVjb21lcyBmYWxzZSB1cG9uIHNlbmQgYW5kIHRydWUgdXBvbiBjb21wbGV0aW9uKVxuXHRcdFx0Y29tcGxldGVkLFxuXG5cdFx0XHQvLyBUbyBrbm93IGlmIGdsb2JhbCBldmVudHMgYXJlIHRvIGJlIGRpc3BhdGNoZWRcblx0XHRcdGZpcmVHbG9iYWxzLFxuXG5cdFx0XHQvLyBMb29wIHZhcmlhYmxlXG5cdFx0XHRpLFxuXG5cdFx0XHQvLyB1bmNhY2hlZCBwYXJ0IG9mIHRoZSB1cmxcblx0XHRcdHVuY2FjaGVkLFxuXG5cdFx0XHQvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0XG5cdFx0XHRzID0galF1ZXJ5LmFqYXhTZXR1cCgge30sIG9wdGlvbnMgKSxcblxuXHRcdFx0Ly8gQ2FsbGJhY2tzIGNvbnRleHRcblx0XHRcdGNhbGxiYWNrQ29udGV4dCA9IHMuY29udGV4dCB8fCBzLFxuXG5cdFx0XHQvLyBDb250ZXh0IGZvciBnbG9iYWwgZXZlbnRzIGlzIGNhbGxiYWNrQ29udGV4dCBpZiBpdCBpcyBhIERPTSBub2RlIG9yIGpRdWVyeSBjb2xsZWN0aW9uXG5cdFx0XHRnbG9iYWxFdmVudENvbnRleHQgPSBzLmNvbnRleHQgJiZcblx0XHRcdFx0KCBjYWxsYmFja0NvbnRleHQubm9kZVR5cGUgfHwgY2FsbGJhY2tDb250ZXh0LmpxdWVyeSApID9cblx0XHRcdFx0XHRqUXVlcnkoIGNhbGxiYWNrQ29udGV4dCApIDpcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQsXG5cblx0XHRcdC8vIERlZmVycmVkc1xuXHRcdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQgPSBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdHN0YXR1c0NvZGUgPSBzLnN0YXR1c0NvZGUgfHwge30sXG5cblx0XHRcdC8vIEhlYWRlcnMgKHRoZXkgYXJlIHNlbnQgYWxsIGF0IG9uY2UpXG5cdFx0XHRyZXF1ZXN0SGVhZGVycyA9IHt9LFxuXHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lcyA9IHt9LFxuXG5cdFx0XHQvLyBEZWZhdWx0IGFib3J0IG1lc3NhZ2Vcblx0XHRcdHN0ckFib3J0ID0gXCJjYW5jZWxlZFwiLFxuXG5cdFx0XHQvLyBGYWtlIHhoclxuXHRcdFx0anFYSFIgPSB7XG5cdFx0XHRcdHJlYWR5U3RhdGU6IDAsXG5cblx0XHRcdFx0Ly8gQnVpbGRzIGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRlZFxuXHRcdFx0XHRnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24oIGtleSApIHtcblx0XHRcdFx0XHR2YXIgbWF0Y2g7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICFyZXNwb25zZUhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVycyA9IHt9O1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbWF0Y2ggPSByaGVhZGVycy5leGVjKCByZXNwb25zZUhlYWRlcnNTdHJpbmcgKSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXSA9XG5cdFx0XHRcdFx0XHRcdFx0XHQoIHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXSB8fCBbXSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5jb25jYXQoIG1hdGNoWyAyIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bWF0Y2ggPSByZXNwb25zZUhlYWRlcnNbIGtleS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoID09IG51bGwgPyBudWxsIDogbWF0Y2guam9pbiggXCIsIFwiICk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gUmF3IHN0cmluZ1xuXHRcdFx0XHRnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBjb21wbGV0ZWQgPyByZXNwb25zZUhlYWRlcnNTdHJpbmcgOiBudWxsO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhY2hlcyB0aGUgaGVhZGVyXG5cdFx0XHRcdHNldFJlcXVlc3RIZWFkZXI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0bmFtZSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdID1cblx0XHRcdFx0XHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHwgbmFtZTtcblx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGVzIHJlc3BvbnNlIGNvbnRlbnQtdHlwZSBoZWFkZXJcblx0XHRcdFx0b3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdHMubWltZVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0XHRzdGF0dXNDb2RlOiBmdW5jdGlvbiggbWFwICkge1xuXHRcdFx0XHRcdHZhciBjb2RlO1xuXHRcdFx0XHRcdGlmICggbWFwICkge1xuXHRcdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gRXhlY3V0ZSB0aGUgYXBwcm9wcmlhdGUgY2FsbGJhY2tzXG5cdFx0XHRcdFx0XHRcdGpxWEhSLmFsd2F5cyggbWFwWyBqcVhIUi5zdGF0dXMgXSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBMYXp5LWFkZCB0aGUgbmV3IGNhbGxiYWNrcyBpbiBhIHdheSB0aGF0IHByZXNlcnZlcyBvbGQgb25lc1xuXHRcdFx0XHRcdFx0XHRmb3IgKCBjb2RlIGluIG1hcCApIHtcblx0XHRcdFx0XHRcdFx0XHRzdGF0dXNDb2RlWyBjb2RlIF0gPSBbIHN0YXR1c0NvZGVbIGNvZGUgXSwgbWFwWyBjb2RlIF0gXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYW5jZWwgdGhlIHJlcXVlc3Rcblx0XHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCBzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHZhciBmaW5hbFRleHQgPSBzdGF0dXNUZXh0IHx8IHN0ckFib3J0O1xuXHRcdFx0XHRcdGlmICggdHJhbnNwb3J0ICkge1xuXHRcdFx0XHRcdFx0dHJhbnNwb3J0LmFib3J0KCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZG9uZSggMCwgZmluYWxUZXh0ICk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHQvLyBBdHRhY2ggZGVmZXJyZWRzXG5cdFx0ZGVmZXJyZWQucHJvbWlzZSgganFYSFIgKTtcblxuXHRcdC8vIEFkZCBwcm90b2NvbCBpZiBub3QgcHJvdmlkZWQgKHByZWZpbHRlcnMgbWlnaHQgZXhwZWN0IGl0KVxuXHRcdC8vIEhhbmRsZSBmYWxzeSB1cmwgaW4gdGhlIHNldHRpbmdzIG9iamVjdCAoIzEwMDkzOiBjb25zaXN0ZW5jeSB3aXRoIG9sZCBzaWduYXR1cmUpXG5cdFx0Ly8gV2UgYWxzbyB1c2UgdGhlIHVybCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlXG5cdFx0cy51cmwgPSAoICggdXJsIHx8IHMudXJsIHx8IGxvY2F0aW9uLmhyZWYgKSArIFwiXCIgKVxuXHRcdFx0LnJlcGxhY2UoIHJwcm90b2NvbCwgbG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKTtcblxuXHRcdC8vIEFsaWFzIG1ldGhvZCBvcHRpb24gdG8gdHlwZSBhcyBwZXIgdGlja2V0ICMxMjAwNFxuXHRcdHMudHlwZSA9IG9wdGlvbnMubWV0aG9kIHx8IG9wdGlvbnMudHlwZSB8fCBzLm1ldGhvZCB8fCBzLnR5cGU7XG5cblx0XHQvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0XG5cdFx0cy5kYXRhVHlwZXMgPSAoIHMuZGF0YVR5cGUgfHwgXCIqXCIgKS50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cblx0XHQvLyBBIGNyb3NzLWRvbWFpbiByZXF1ZXN0IGlzIGluIG9yZGVyIHdoZW4gdGhlIG9yaWdpbiBkb2Vzbid0IG1hdGNoIHRoZSBjdXJyZW50IG9yaWdpbi5cblx0XHRpZiAoIHMuY3Jvc3NEb21haW4gPT0gbnVsbCApIHtcblx0XHRcdHVybEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiYVwiICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExLCBFZGdlIDEyIC0gMTVcblx0XHRcdC8vIElFIHRocm93cyBleGNlcHRpb24gb24gYWNjZXNzaW5nIHRoZSBocmVmIHByb3BlcnR5IGlmIHVybCBpcyBtYWxmb3JtZWQsXG5cdFx0XHQvLyBlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbTo4MHgvXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHMudXJsO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExIG9ubHlcblx0XHRcdFx0Ly8gQW5jaG9yJ3MgaG9zdCBwcm9wZXJ0eSBpc24ndCBjb3JyZWN0bHkgc2V0IHdoZW4gcy51cmwgaXMgcmVsYXRpdmVcblx0XHRcdFx0dXJsQW5jaG9yLmhyZWYgPSB1cmxBbmNob3IuaHJlZjtcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IG9yaWdpbkFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIG9yaWdpbkFuY2hvci5ob3N0ICE9PVxuXHRcdFx0XHRcdHVybEFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIHVybEFuY2hvci5ob3N0O1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYW4gZXJyb3IgcGFyc2luZyB0aGUgVVJMLCBhc3N1bWUgaXQgaXMgY3Jvc3NEb21haW4sXG5cdFx0XHRcdC8vIGl0IGNhbiBiZSByZWplY3RlZCBieSB0aGUgdHJhbnNwb3J0IGlmIGl0IGlzIGludmFsaWRcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29udmVydCBkYXRhIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nXG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJiB0eXBlb2Ygcy5kYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cy5kYXRhID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9uYWwgKTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBwcmVmaWx0ZXJzXG5cdFx0aW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XG5cblx0XHQvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhIHByZWZpbHRlciwgc3RvcCB0aGVyZVxuXHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdH1cblxuXHRcdC8vIFdlIGNhbiBmaXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvXG5cdFx0Ly8gRG9uJ3QgZmlyZSBldmVudHMgaWYgalF1ZXJ5LmV2ZW50IGlzIHVuZGVmaW5lZCBpbiBhbiBBTUQtdXNhZ2Ugc2NlbmFyaW8gKCMxNTExOClcblx0XHRmaXJlR2xvYmFscyA9IGpRdWVyeS5ldmVudCAmJiBzLmdsb2JhbDtcblxuXHRcdC8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHNcblx0XHRpZiAoIGZpcmVHbG9iYWxzICYmIGpRdWVyeS5hY3RpdmUrKyA9PT0gMCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdGFydFwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gVXBwZXJjYXNlIHRoZSB0eXBlXG5cdFx0cy50eXBlID0gcy50eXBlLnRvVXBwZXJDYXNlKCk7XG5cblx0XHQvLyBEZXRlcm1pbmUgaWYgcmVxdWVzdCBoYXMgY29udGVudFxuXHRcdHMuaGFzQ29udGVudCA9ICFybm9Db250ZW50LnRlc3QoIHMudHlwZSApO1xuXG5cdFx0Ly8gU2F2ZSB0aGUgVVJMIGluIGNhc2Ugd2UncmUgdG95aW5nIHdpdGggdGhlIElmLU1vZGlmaWVkLVNpbmNlXG5cdFx0Ly8gYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyIGxhdGVyIG9uXG5cdFx0Ly8gUmVtb3ZlIGhhc2ggdG8gc2ltcGxpZnkgdXJsIG1hbmlwdWxhdGlvblxuXHRcdGNhY2hlVVJMID0gcy51cmwucmVwbGFjZSggcmhhc2gsIFwiXCIgKTtcblxuXHRcdC8vIE1vcmUgb3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBubyBjb250ZW50XG5cdFx0aWYgKCAhcy5oYXNDb250ZW50ICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgaGFzaCBzbyB3ZSBjYW4gcHV0IGl0IGJhY2tcblx0XHRcdHVuY2FjaGVkID0gcy51cmwuc2xpY2UoIGNhY2hlVVJMLmxlbmd0aCApO1xuXG5cdFx0XHQvLyBJZiBkYXRhIGlzIGF2YWlsYWJsZSBhbmQgc2hvdWxkIGJlIHByb2Nlc3NlZCwgYXBwZW5kIGRhdGEgdG8gdXJsXG5cdFx0XHRpZiAoIHMuZGF0YSAmJiAoIHMucHJvY2Vzc0RhdGEgfHwgdHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiApICkge1xuXHRcdFx0XHRjYWNoZVVSTCArPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gXCImXCIgOiBcIj9cIiApICsgcy5kYXRhO1xuXG5cdFx0XHRcdC8vICM5NjgyOiByZW1vdmUgZGF0YSBzbyB0aGF0IGl0J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1YWwgcmV0cnlcblx0XHRcdFx0ZGVsZXRlIHMuZGF0YTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIG9yIHVwZGF0ZSBhbnRpLWNhY2hlIHBhcmFtIGlmIG5lZWRlZFxuXHRcdFx0aWYgKCBzLmNhY2hlID09PSBmYWxzZSApIHtcblx0XHRcdFx0Y2FjaGVVUkwgPSBjYWNoZVVSTC5yZXBsYWNlKCByYW50aUNhY2hlLCBcIiQxXCIgKTtcblx0XHRcdFx0dW5jYWNoZWQgPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gXCImXCIgOiBcIj9cIiApICsgXCJfPVwiICsgKCBub25jZSsrICkgKyB1bmNhY2hlZDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUHV0IGhhc2ggYW5kIGFudGktY2FjaGUgb24gdGhlIFVSTCB0aGF0IHdpbGwgYmUgcmVxdWVzdGVkIChnaC0xNzMyKVxuXHRcdFx0cy51cmwgPSBjYWNoZVVSTCArIHVuY2FjaGVkO1xuXG5cdFx0Ly8gQ2hhbmdlICclMjAnIHRvICcrJyBpZiB0aGlzIGlzIGVuY29kZWQgZm9ybSBib2R5IGNvbnRlbnQgKGdoLTI2NTgpXG5cdFx0fSBlbHNlIGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiZcblx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiICkuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICkge1xuXHRcdFx0cy5kYXRhID0gcy5kYXRhLnJlcGxhY2UoIHIyMCwgXCIrXCIgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0aWYgKCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICkge1xuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU1vZGlmaWVkLVNpbmNlXCIsIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKTtcblx0XHRcdH1cblx0XHRcdGlmICggalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTm9uZS1NYXRjaFwiLCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVpbmcgc2VudFxuXHRcdGlmICggcy5kYXRhICYmIHMuaGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8fCBvcHRpb25zLmNvbnRlbnRUeXBlICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJDb250ZW50LVR5cGVcIiwgcy5jb250ZW50VHlwZSApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRoZSBzZXJ2ZXIsIGRlcGVuZGluZyBvbiB0aGUgZGF0YVR5cGVcblx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKFxuXHRcdFx0XCJBY2NlcHRcIixcblx0XHRcdHMuZGF0YVR5cGVzWyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gP1xuXHRcdFx0XHRzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSArXG5cdFx0XHRcdFx0KCBzLmRhdGFUeXBlc1sgMCBdICE9PSBcIipcIiA/IFwiLCBcIiArIGFsbFR5cGVzICsgXCI7IHE9MC4wMVwiIDogXCJcIiApIDpcblx0XHRcdFx0cy5hY2NlcHRzWyBcIipcIiBdXG5cdFx0KTtcblxuXHRcdC8vIENoZWNrIGZvciBoZWFkZXJzIG9wdGlvblxuXHRcdGZvciAoIGkgaW4gcy5oZWFkZXJzICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggaSwgcy5oZWFkZXJzWyBpIF0gKTtcblx0XHR9XG5cblx0XHQvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlwZXMgYW5kIGVhcmx5IGFib3J0XG5cdFx0aWYgKCBzLmJlZm9yZVNlbmQgJiZcblx0XHRcdCggcy5iZWZvcmVTZW5kLmNhbGwoIGNhbGxiYWNrQ29udGV4dCwganFYSFIsIHMgKSA9PT0gZmFsc2UgfHwgY29tcGxldGVkICkgKSB7XG5cblx0XHRcdC8vIEFib3J0IGlmIG5vdCBkb25lIGFscmVhZHkgYW5kIHJldHVyblxuXHRcdFx0cmV0dXJuIGpxWEhSLmFib3J0KCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWJvcnRpbmcgaXMgbm8gbG9uZ2VyIGEgY2FuY2VsbGF0aW9uXG5cdFx0c3RyQWJvcnQgPSBcImFib3J0XCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrcyBvbiBkZWZlcnJlZHNcblx0XHRjb21wbGV0ZURlZmVycmVkLmFkZCggcy5jb21wbGV0ZSApO1xuXHRcdGpxWEhSLmRvbmUoIHMuc3VjY2VzcyApO1xuXHRcdGpxWEhSLmZhaWwoIHMuZXJyb3IgKTtcblxuXHRcdC8vIEdldCB0cmFuc3BvcnRcblx0XHR0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9ydFxuXHRcdGlmICggIXRyYW5zcG9ydCApIHtcblx0XHRcdGRvbmUoIC0xLCBcIk5vIFRyYW5zcG9ydFwiICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSAxO1xuXG5cdFx0XHQvLyBTZW5kIGdsb2JhbCBldmVudFxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheFNlbmRcIiwgWyBqcVhIUiwgcyBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGFqYXhTZW5kLCBzdG9wIHRoZXJlXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaW1lb3V0XG5cdFx0XHRpZiAoIHMuYXN5bmMgJiYgcy50aW1lb3V0ID4gMCApIHtcblx0XHRcdFx0dGltZW91dFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGpxWEhSLmFib3J0KCBcInRpbWVvdXRcIiApO1xuXHRcdFx0XHR9LCBzLnRpbWVvdXQgKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29tcGxldGVkID0gZmFsc2U7XG5cdFx0XHRcdHRyYW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gUmV0aHJvdyBwb3N0LWNvbXBsZXRpb24gZXhjZXB0aW9uc1xuXHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUHJvcGFnYXRlIG90aGVycyBhcyByZXN1bHRzXG5cdFx0XHRcdGRvbmUoIC0xLCBlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBkb25lXG5cdFx0ZnVuY3Rpb24gZG9uZSggc3RhdHVzLCBuYXRpdmVTdGF0dXNUZXh0LCByZXNwb25zZXMsIGhlYWRlcnMgKSB7XG5cdFx0XHR2YXIgaXNTdWNjZXNzLCBzdWNjZXNzLCBlcnJvciwgcmVzcG9uc2UsIG1vZGlmaWVkLFxuXHRcdFx0XHRzdGF0dXNUZXh0ID0gbmF0aXZlU3RhdHVzVGV4dDtcblxuXHRcdFx0Ly8gSWdub3JlIHJlcGVhdCBpbnZvY2F0aW9uc1xuXHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29tcGxldGVkID0gdHJ1ZTtcblxuXHRcdFx0Ly8gQ2xlYXIgdGltZW91dCBpZiBpdCBleGlzdHNcblx0XHRcdGlmICggdGltZW91dFRpbWVyICkge1xuXHRcdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0VGltZXIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRGVyZWZlcmVuY2UgdHJhbnNwb3J0IGZvciBlYXJseSBnYXJiYWdlIGNvbGxlY3Rpb25cblx0XHRcdC8vIChubyBtYXR0ZXIgaG93IGxvbmcgdGhlIGpxWEhSIG9iamVjdCB3aWxsIGJlIHVzZWQpXG5cdFx0XHR0cmFuc3BvcnQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdC8vIENhY2hlIHJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyA9IGhlYWRlcnMgfHwgXCJcIjtcblxuXHRcdFx0Ly8gU2V0IHJlYWR5U3RhdGVcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSBzdGF0dXMgPiAwID8gNCA6IDA7XG5cblx0XHRcdC8vIERldGVybWluZSBpZiBzdWNjZXNzZnVsXG5cdFx0XHRpc1N1Y2Nlc3MgPSBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMgPT09IDMwNDtcblxuXHRcdFx0Ly8gR2V0IHJlc3BvbnNlIGRhdGFcblx0XHRcdGlmICggcmVzcG9uc2VzICkge1xuXHRcdFx0XHRyZXNwb25zZSA9IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCBubyBtYXR0ZXIgd2hhdCAodGhhdCB3YXkgcmVzcG9uc2VYWFggZmllbGRzIGFyZSBhbHdheXMgc2V0KVxuXHRcdFx0cmVzcG9uc2UgPSBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKTtcblxuXHRcdFx0Ly8gSWYgc3VjY2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmdcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXG5cdFx0XHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0XHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiTGFzdC1Nb2RpZmllZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJldGFnXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBpZiBubyBjb250ZW50XG5cdFx0XHRcdGlmICggc3RhdHVzID09PSAyMDQgfHwgcy50eXBlID09PSBcIkhFQURcIiApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub2NvbnRlbnRcIjtcblxuXHRcdFx0XHQvLyBpZiBub3QgbW9kaWZpZWRcblx0XHRcdFx0fSBlbHNlIGlmICggc3RhdHVzID09PSAzMDQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm90bW9kaWZpZWRcIjtcblxuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGRhdGEsIGxldCdzIGNvbnZlcnQgaXRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gcmVzcG9uc2Uuc3RhdGU7XG5cdFx0XHRcdFx0c3VjY2VzcyA9IHJlc3BvbnNlLmRhdGE7XG5cdFx0XHRcdFx0ZXJyb3IgPSByZXNwb25zZS5lcnJvcjtcblx0XHRcdFx0XHRpc1N1Y2Nlc3MgPSAhZXJyb3I7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gRXh0cmFjdCBlcnJvciBmcm9tIHN0YXR1c1RleHQgYW5kIG5vcm1hbGl6ZSBmb3Igbm9uLWFib3J0c1xuXHRcdFx0XHRlcnJvciA9IHN0YXR1c1RleHQ7XG5cdFx0XHRcdGlmICggc3RhdHVzIHx8ICFzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcImVycm9yXCI7XG5cdFx0XHRcdFx0aWYgKCBzdGF0dXMgPCAwICkge1xuXHRcdFx0XHRcdFx0c3RhdHVzID0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IGRhdGEgZm9yIHRoZSBmYWtlIHhociBvYmplY3Rcblx0XHRcdGpxWEhSLnN0YXR1cyA9IHN0YXR1cztcblx0XHRcdGpxWEhSLnN0YXR1c1RleHQgPSAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCApICsgXCJcIjtcblxuXHRcdFx0Ly8gU3VjY2Vzcy9FcnJvclxuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsgc3VjY2Vzcywgc3RhdHVzVGV4dCwganFYSFIgXSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7XG5cdFx0XHRzdGF0dXNDb2RlID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggaXNTdWNjZXNzID8gXCJhamF4U3VjY2Vzc1wiIDogXCJhamF4RXJyb3JcIixcblx0XHRcdFx0XHRbIGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBzdWNjZXNzIDogZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb21wbGV0ZVxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZC5maXJlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0IF0gKTtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheENvbXBsZXRlXCIsIFsganFYSFIsIHMgXSApO1xuXG5cdFx0XHRcdC8vIEhhbmRsZSB0aGUgZ2xvYmFsIEFKQVggY291bnRlclxuXHRcdFx0XHRpZiAoICEoIC0talF1ZXJ5LmFjdGl2ZSApICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdG9wXCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBqcVhIUjtcblx0fSxcblxuXHRnZXRKU09OOiBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgXCJqc29uXCIgKTtcblx0fSxcblxuXHRnZXRTY3JpcHQ6IGZ1bmN0aW9uKCB1cmwsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssIFwic2NyaXB0XCIgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcImdldFwiLCBcInBvc3RcIiBdLCBmdW5jdGlvbiggaSwgbWV0aG9kICkge1xuXHRqUXVlcnlbIG1ldGhvZCBdID0gZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2ssIHR5cGUgKSB7XG5cblx0XHQvLyBTaGlmdCBhcmd1bWVudHMgaWYgZGF0YSBhcmd1bWVudCB3YXMgb21pdHRlZFxuXHRcdGlmICggaXNGdW5jdGlvbiggZGF0YSApICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7XG5cdFx0XHRjYWxsYmFjayA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIFRoZSB1cmwgY2FuIGJlIGFuIG9wdGlvbnMgb2JqZWN0ICh3aGljaCB0aGVuIG11c3QgaGF2ZSAudXJsKVxuXHRcdHJldHVybiBqUXVlcnkuYWpheCggalF1ZXJ5LmV4dGVuZCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cdFx0XHR0eXBlOiBtZXRob2QsXG5cdFx0XHRkYXRhVHlwZTogdHlwZSxcblx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRzdWNjZXNzOiBjYWxsYmFja1xuXHRcdH0sIGpRdWVyeS5pc1BsYWluT2JqZWN0KCB1cmwgKSAmJiB1cmwgKSApO1xuXHR9O1xufSApO1xuXG5cbmpRdWVyeS5fZXZhbFVybCA9IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMgKSB7XG5cdHJldHVybiBqUXVlcnkuYWpheCgge1xuXHRcdHVybDogdXJsLFxuXG5cdFx0Ly8gTWFrZSB0aGlzIGV4cGxpY2l0LCBzaW5jZSB1c2VyIGNhbiBvdmVycmlkZSB0aGlzIHRocm91Z2ggYWpheFNldHVwICgjMTEyNjQpXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRkYXRhVHlwZTogXCJzY3JpcHRcIixcblx0XHRjYWNoZTogdHJ1ZSxcblx0XHRhc3luYzogZmFsc2UsXG5cdFx0Z2xvYmFsOiBmYWxzZSxcblxuXHRcdC8vIE9ubHkgZXZhbHVhdGUgdGhlIHJlc3BvbnNlIGlmIGl0IGlzIHN1Y2Nlc3NmdWwgKGdoLTQxMjYpXG5cdFx0Ly8gZGF0YUZpbHRlciBpcyBub3QgaW52b2tlZCBmb3IgZmFpbHVyZSByZXNwb25zZXMsIHNvIHVzaW5nIGl0IGluc3RlYWRcblx0XHQvLyBvZiB0aGUgZGVmYXVsdCBjb252ZXJ0ZXIgaXMga2x1ZGd5IGJ1dCBpdCB3b3Jrcy5cblx0XHRjb252ZXJ0ZXJzOiB7XG5cdFx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCkge31cblx0XHR9LFxuXHRcdGRhdGFGaWx0ZXI6IGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCByZXNwb25zZSwgb3B0aW9ucyApO1xuXHRcdH1cblx0fSApO1xufTtcblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHdyYXBBbGw6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciB3cmFwO1xuXG5cdFx0aWYgKCB0aGlzWyAwIF0gKSB7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIGh0bWwgKSApIHtcblx0XHRcdFx0aHRtbCA9IGh0bWwuY2FsbCggdGhpc1sgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRoZSBlbGVtZW50cyB0byB3cmFwIHRoZSB0YXJnZXQgYXJvdW5kXG5cdFx0XHR3cmFwID0galF1ZXJ5KCBodG1sLCB0aGlzWyAwIF0ub3duZXJEb2N1bWVudCApLmVxKCAwICkuY2xvbmUoIHRydWUgKTtcblxuXHRcdFx0aWYgKCB0aGlzWyAwIF0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0d3JhcC5pbnNlcnRCZWZvcmUoIHRoaXNbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHR3cmFwLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBlbGVtID0gdGhpcztcblxuXHRcdFx0XHR3aGlsZSAoIGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQgKSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZWxlbTtcblx0XHRcdH0gKS5hcHBlbmQoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR3cmFwSW5uZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBJbm5lciggaHRtbC5jYWxsKCB0aGlzLCBpICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0galF1ZXJ5KCB0aGlzICksXG5cdFx0XHRcdGNvbnRlbnRzID0gc2VsZi5jb250ZW50cygpO1xuXG5cdFx0XHRpZiAoIGNvbnRlbnRzLmxlbmd0aCApIHtcblx0XHRcdFx0Y29udGVudHMud3JhcEFsbCggaHRtbCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWxmLmFwcGVuZCggaHRtbCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHR3cmFwOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHR2YXIgaHRtbElzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCBodG1sICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGh0bWxJc0Z1bmN0aW9uID8gaHRtbC5jYWxsKCB0aGlzLCBpICkgOiBodG1sICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdHVud3JhcDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHRoaXMucGFyZW50KCBzZWxlY3RvciApLm5vdCggXCJib2R5XCIgKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLnJlcGxhY2VXaXRoKCB0aGlzLmNoaWxkTm9kZXMgKTtcblx0XHR9ICk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmhpZGRlbiA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gIWpRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSggZWxlbSApO1xufTtcbmpRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gISEoIGVsZW0ub2Zmc2V0V2lkdGggfHwgZWxlbS5vZmZzZXRIZWlnaHQgfHwgZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApO1xufTtcblxuXG5cblxualF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIgPSBmdW5jdGlvbigpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpO1xuXHR9IGNhdGNoICggZSApIHt9XG59O1xuXG52YXIgeGhyU3VjY2Vzc1N0YXR1cyA9IHtcblxuXHRcdC8vIEZpbGUgcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgY29kZSAwLCBhc3N1bWUgMjAwXG5cdFx0MDogMjAwLFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHQvLyAjMTQ1MDogc29tZXRpbWVzIElFIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDRcblx0XHQxMjIzOiAyMDRcblx0fSxcblx0eGhyU3VwcG9ydGVkID0galF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIoKTtcblxuc3VwcG9ydC5jb3JzID0gISF4aHJTdXBwb3J0ZWQgJiYgKCBcIndpdGhDcmVkZW50aWFsc1wiIGluIHhoclN1cHBvcnRlZCApO1xuc3VwcG9ydC5hamF4ID0geGhyU3VwcG9ydGVkID0gISF4aHJTdXBwb3J0ZWQ7XG5cbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0dmFyIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrO1xuXG5cdC8vIENyb3NzIGRvbWFpbiBvbmx5IGFsbG93ZWQgaWYgc3VwcG9ydGVkIHRocm91Z2ggWE1MSHR0cFJlcXVlc3Rcblx0aWYgKCBzdXBwb3J0LmNvcnMgfHwgeGhyU3VwcG9ydGVkICYmICFvcHRpb25zLmNyb3NzRG9tYWluICkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggaGVhZGVycywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHZhciBpLFxuXHRcdFx0XHRcdHhociA9IG9wdGlvbnMueGhyKCk7XG5cblx0XHRcdFx0eGhyLm9wZW4oXG5cdFx0XHRcdFx0b3B0aW9ucy50eXBlLFxuXHRcdFx0XHRcdG9wdGlvbnMudXJsLFxuXHRcdFx0XHRcdG9wdGlvbnMuYXN5bmMsXG5cdFx0XHRcdFx0b3B0aW9ucy51c2VybmFtZSxcblx0XHRcdFx0XHRvcHRpb25zLnBhc3N3b3JkXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Ly8gQXBwbHkgY3VzdG9tIGZpZWxkcyBpZiBwcm92aWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMueGhyRmllbGRzICkge1xuXHRcdFx0XHRcdGZvciAoIGkgaW4gb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0XHR4aHJbIGkgXSA9IG9wdGlvbnMueGhyRmllbGRzWyBpIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGUgbWltZSB0eXBlIGlmIG5lZWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMubWltZVR5cGUgJiYgeGhyLm92ZXJyaWRlTWltZVR5cGUgKSB7XG5cdFx0XHRcdFx0eGhyLm92ZXJyaWRlTWltZVR5cGUoIG9wdGlvbnMubWltZVR5cGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFgtUmVxdWVzdGVkLVdpdGggaGVhZGVyXG5cdFx0XHRcdC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25zIGZvciBhIHByZWZsaWdodCBhcmVcblx0XHRcdFx0Ly8gYWtpbiB0byBhIGppZ3NhdyBwdXp6bGUsIHdlIHNpbXBseSBuZXZlciBzZXQgaXQgdG8gYmUgc3VyZS5cblx0XHRcdFx0Ly8gKGl0IGNhbiBhbHdheXMgYmUgc2V0IG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMgb3IgZXZlbiB1c2luZyBhamF4U2V0dXApXG5cdFx0XHRcdC8vIEZvciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3ZpZGVkLlxuXHRcdFx0XHRpZiAoICFvcHRpb25zLmNyb3NzRG9tYWluICYmICFoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdICkge1xuXHRcdFx0XHRcdGhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gPSBcIlhNTEh0dHBSZXF1ZXN0XCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTZXQgaGVhZGVyc1xuXHRcdFx0XHRmb3IgKCBpIGluIGhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoIGksIGhlYWRlcnNbIGkgXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRjYWxsYmFjayA9IGVycm9yQ2FsbGJhY2sgPSB4aHIub25sb2FkID1cblx0XHRcdFx0XHRcdFx0XHR4aHIub25lcnJvciA9IHhoci5vbmFib3J0ID0geGhyLm9udGltZW91dCA9XG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiYWJvcnRcIiApIHtcblx0XHRcdFx0XHRcdFx0XHR4aHIuYWJvcnQoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggdHlwZSA9PT0gXCJlcnJvclwiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHQvLyBPbiBhIG1hbnVhbCBuYXRpdmUgYWJvcnQsIElFOSB0aHJvd3Ncblx0XHRcdFx0XHRcdFx0XHQvLyBlcnJvcnMgb24gYW55IHByb3BlcnR5IGFjY2VzcyB0aGF0IGlzIG5vdCByZWFkeVN0YXRlXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlb2YgeGhyLnN0YXR1cyAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCAwLCBcImVycm9yXCIgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRmlsZTogcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgMDsgc2VlICM4NjA1LCAjMTQyMDdcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHRcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyU3VjY2Vzc1N0YXR1c1sgeGhyLnN0YXR1cyBdIHx8IHhoci5zdGF0dXMsXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dCxcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHRcdC8vIElFOSBoYXMgbm8gWEhSMiBidXQgdGhyb3dzIG9uIGJpbmFyeSAodHJhYy0xMTQyNilcblx0XHRcdFx0XHRcdFx0XHRcdC8vIEZvciBYSFIyIG5vbi10ZXh0LCBsZXQgdGhlIGNhbGxlciBoYW5kbGUgaXQgKGdoLTI0OTgpXG5cdFx0XHRcdFx0XHRcdFx0XHQoIHhoci5yZXNwb25zZVR5cGUgfHwgXCJ0ZXh0XCIgKSAhPT0gXCJ0ZXh0XCIgIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgeGhyLnJlc3BvbnNlVGV4dCAhPT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgYmluYXJ5OiB4aHIucmVzcG9uc2UgfSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgdGV4dDogeGhyLnJlc3BvbnNlVGV4dCB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gTGlzdGVuIHRvIGV2ZW50c1xuXHRcdFx0XHR4aHIub25sb2FkID0gY2FsbGJhY2soKTtcblx0XHRcdFx0ZXJyb3JDYWxsYmFjayA9IHhoci5vbmVycm9yID0geGhyLm9udGltZW91dCA9IGNhbGxiYWNrKCBcImVycm9yXCIgKTtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHRcdFx0Ly8gVXNlIG9ucmVhZHlzdGF0ZWNoYW5nZSB0byByZXBsYWNlIG9uYWJvcnRcblx0XHRcdFx0Ly8gdG8gaGFuZGxlIHVuY2F1Z2h0IGFib3J0c1xuXHRcdFx0XHRpZiAoIHhoci5vbmFib3J0ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0eGhyLm9uYWJvcnQgPSBlcnJvckNhbGxiYWNrO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2hlY2sgcmVhZHlTdGF0ZSBiZWZvcmUgdGltZW91dCBhcyBpdCBjaGFuZ2VzXG5cdFx0XHRcdFx0XHRpZiAoIHhoci5yZWFkeVN0YXRlID09PSA0ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFsbG93IG9uZXJyb3IgdG8gYmUgY2FsbGVkIGZpcnN0LFxuXHRcdFx0XHRcdFx0XHQvLyBidXQgdGhhdCB3aWxsIG5vdCBoYW5kbGUgYSBuYXRpdmUgYWJvcnRcblx0XHRcdFx0XHRcdFx0Ly8gQWxzbywgc2F2ZSBlcnJvckNhbGxiYWNrIHRvIGEgdmFyaWFibGVcblx0XHRcdFx0XHRcdFx0Ly8gYXMgeGhyLm9uZXJyb3IgY2Fubm90IGJlIGFjY2Vzc2VkXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIGFib3J0IGNhbGxiYWNrXG5cdFx0XHRcdGNhbGxiYWNrID0gY2FsbGJhY2soIFwiYWJvcnRcIiApO1xuXG5cdFx0XHRcdHRyeSB7XG5cblx0XHRcdFx0XHQvLyBEbyBzZW5kIHRoZSByZXF1ZXN0ICh0aGlzIG1heSByYWlzZSBhbiBleGNlcHRpb24pXG5cdFx0XHRcdFx0eGhyLnNlbmQoIG9wdGlvbnMuaGFzQ29udGVudCAmJiBvcHRpb25zLmRhdGEgfHwgbnVsbCApO1xuXHRcdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRcdC8vICMxNDY4MzogT25seSByZXRocm93IGlmIHRoaXMgaGFzbid0IGJlZW4gbm90aWZpZWQgYXMgYW4gZXJyb3IgeWV0XG5cdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUHJldmVudCBhdXRvLWV4ZWN1dGlvbiBvZiBzY3JpcHRzIHdoZW4gbm8gZXhwbGljaXQgZGF0YVR5cGUgd2FzIHByb3ZpZGVkIChTZWUgZ2gtMjQzMilcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBmdW5jdGlvbiggcyApIHtcblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMuY29udGVudHMuc2NyaXB0ID0gZmFsc2U7XG5cdH1cbn0gKTtcblxuLy8gSW5zdGFsbCBzY3JpcHQgZGF0YVR5cGVcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0YWNjZXB0czoge1xuXHRcdHNjcmlwdDogXCJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIFwiICtcblx0XHRcdFwiYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0XCJcblx0fSxcblx0Y29udGVudHM6IHtcblx0XHRzY3JpcHQ6IC9cXGIoPzpqYXZhfGVjbWEpc2NyaXB0XFxiL1xuXHR9LFxuXHRjb252ZXJ0ZXJzOiB7XG5cdFx0XCJ0ZXh0IHNjcmlwdFwiOiBmdW5jdGlvbiggdGV4dCApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCB0ZXh0ICk7XG5cdFx0XHRyZXR1cm4gdGV4dDtcblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gSGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBjcm9zc0RvbWFpblxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY2FjaGUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRzLmNhY2hlID0gZmFsc2U7XG5cdH1cblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMudHlwZSA9IFwiR0VUXCI7XG5cdH1cbn0gKTtcblxuLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNwb3J0XG5qUXVlcnkuYWpheFRyYW5zcG9ydCggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cblx0Ly8gVGhpcyB0cmFuc3BvcnQgb25seSBkZWFscyB3aXRoIGNyb3NzIGRvbWFpbiBvciBmb3JjZWQtYnktYXR0cnMgcmVxdWVzdHNcblx0aWYgKCBzLmNyb3NzRG9tYWluIHx8IHMuc2NyaXB0QXR0cnMgKSB7XG5cdFx0dmFyIHNjcmlwdCwgY2FsbGJhY2s7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBfLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0c2NyaXB0ID0galF1ZXJ5KCBcIjxzY3JpcHQ+XCIgKVxuXHRcdFx0XHRcdC5hdHRyKCBzLnNjcmlwdEF0dHJzIHx8IHt9IClcblx0XHRcdFx0XHQucHJvcCggeyBjaGFyc2V0OiBzLnNjcmlwdENoYXJzZXQsIHNyYzogcy51cmwgfSApXG5cdFx0XHRcdFx0Lm9uKCBcImxvYWQgZXJyb3JcIiwgY2FsbGJhY2sgPSBmdW5jdGlvbiggZXZ0ICkge1xuXHRcdFx0XHRcdFx0c2NyaXB0LnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBudWxsO1xuXHRcdFx0XHRcdFx0aWYgKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCBldnQudHlwZSA9PT0gXCJlcnJvclwiID8gNDA0IDogMjAwLCBldnQudHlwZSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHQvLyBVc2UgbmF0aXZlIERPTSBtYW5pcHVsYXRpb24gdG8gYXZvaWQgb3VyIGRvbU1hbmlwIEFKQVggdHJpY2tlcnlcblx0XHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0WyAwIF0gKTtcblx0XHRcdH0sXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIG9sZENhbGxiYWNrcyA9IFtdLFxuXHRyanNvbnAgPSAvKD0pXFw/KD89JnwkKXxcXD9cXD8vO1xuXG4vLyBEZWZhdWx0IGpzb25wIHNldHRpbmdzXG5qUXVlcnkuYWpheFNldHVwKCB7XG5cdGpzb25wOiBcImNhbGxiYWNrXCIsXG5cdGpzb25wQ2FsbGJhY2s6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBjYWxsYmFjayA9IG9sZENhbGxiYWNrcy5wb3AoKSB8fCAoIGpRdWVyeS5leHBhbmRvICsgXCJfXCIgKyAoIG5vbmNlKysgKSApO1xuXHRcdHRoaXNbIGNhbGxiYWNrIF0gPSB0cnVlO1xuXHRcdHJldHVybiBjYWxsYmFjaztcblx0fVxufSApO1xuXG4vLyBEZXRlY3QsIG5vcm1hbGl6ZSBvcHRpb25zIGFuZCBpbnN0YWxsIGNhbGxiYWNrcyBmb3IganNvbnAgcmVxdWVzdHNcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcImpzb24ganNvbnBcIiwgZnVuY3Rpb24oIHMsIG9yaWdpbmFsU2V0dGluZ3MsIGpxWEhSICkge1xuXG5cdHZhciBjYWxsYmFja05hbWUsIG92ZXJ3cml0dGVuLCByZXNwb25zZUNvbnRhaW5lcixcblx0XHRqc29uUHJvcCA9IHMuanNvbnAgIT09IGZhbHNlICYmICggcmpzb25wLnRlc3QoIHMudXJsICkgP1xuXHRcdFx0XCJ1cmxcIiA6XG5cdFx0XHR0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiIClcblx0XHRcdFx0XHQuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICYmXG5cdFx0XHRcdHJqc29ucC50ZXN0KCBzLmRhdGEgKSAmJiBcImRhdGFcIlxuXHRcdCk7XG5cblx0Ly8gSGFuZGxlIGlmZiB0aGUgZXhwZWN0ZWQgZGF0YSB0eXBlIGlzIFwianNvbnBcIiBvciB3ZSBoYXZlIGEgcGFyYW1ldGVyIHRvIHNldFxuXHRpZiAoIGpzb25Qcm9wIHx8IHMuZGF0YVR5cGVzWyAwIF0gPT09IFwianNvbnBcIiApIHtcblxuXHRcdC8vIEdldCBjYWxsYmFjayBuYW1lLCByZW1lbWJlcmluZyBwcmVleGlzdGluZyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggaXRcblx0XHRjYWxsYmFja05hbWUgPSBzLmpzb25wQ2FsbGJhY2sgPSBpc0Z1bmN0aW9uKCBzLmpzb25wQ2FsbGJhY2sgKSA/XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2soKSA6XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2s7XG5cblx0XHQvLyBJbnNlcnQgY2FsbGJhY2sgaW50byB1cmwgb3IgZm9ybSBkYXRhXG5cdFx0aWYgKCBqc29uUHJvcCApIHtcblx0XHRcdHNbIGpzb25Qcm9wIF0gPSBzWyBqc29uUHJvcCBdLnJlcGxhY2UoIHJqc29ucCwgXCIkMVwiICsgY2FsbGJhY2tOYW1lICk7XG5cdFx0fSBlbHNlIGlmICggcy5qc29ucCAhPT0gZmFsc2UgKSB7XG5cdFx0XHRzLnVybCArPSAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gXCImXCIgOiBcIj9cIiApICsgcy5qc29ucCArIFwiPVwiICsgY2FsbGJhY2tOYW1lO1xuXHRcdH1cblxuXHRcdC8vIFVzZSBkYXRhIGNvbnZlcnRlciB0byByZXRyaWV2ZSBqc29uIGFmdGVyIHNjcmlwdCBleGVjdXRpb25cblx0XHRzLmNvbnZlcnRlcnNbIFwic2NyaXB0IGpzb25cIiBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoICFyZXNwb25zZUNvbnRhaW5lciApIHtcblx0XHRcdFx0alF1ZXJ5LmVycm9yKCBjYWxsYmFja05hbWUgKyBcIiB3YXMgbm90IGNhbGxlZFwiICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzcG9uc2VDb250YWluZXJbIDAgXTtcblx0XHR9O1xuXG5cdFx0Ly8gRm9yY2UganNvbiBkYXRhVHlwZVxuXHRcdHMuZGF0YVR5cGVzWyAwIF0gPSBcImpzb25cIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tcblx0XHRvdmVyd3JpdHRlbiA9IHdpbmRvd1sgY2FsbGJhY2tOYW1lIF07XG5cdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBhcmd1bWVudHM7XG5cdFx0fTtcblxuXHRcdC8vIENsZWFuLXVwIGZ1bmN0aW9uIChmaXJlcyBhZnRlciBjb252ZXJ0ZXJzKVxuXHRcdGpxWEhSLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIElmIHByZXZpb3VzIHZhbHVlIGRpZG4ndCBleGlzdCAtIHJlbW92ZSBpdFxuXHRcdFx0aWYgKCBvdmVyd3JpdHRlbiA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRqUXVlcnkoIHdpbmRvdyApLnJlbW92ZVByb3AoIGNhbGxiYWNrTmFtZSApO1xuXG5cdFx0XHQvLyBPdGhlcndpc2UgcmVzdG9yZSBwcmVleGlzdGluZyB2YWx1ZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IG92ZXJ3cml0dGVuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTYXZlIGJhY2sgYXMgZnJlZVxuXHRcdFx0aWYgKCBzWyBjYWxsYmFja05hbWUgXSApIHtcblxuXHRcdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCByZS11c2luZyB0aGUgb3B0aW9ucyBkb2Vzbid0IHNjcmV3IHRoaW5ncyBhcm91bmRcblx0XHRcdFx0cy5qc29ucENhbGxiYWNrID0gb3JpZ2luYWxTZXR0aW5ncy5qc29ucENhbGxiYWNrO1xuXG5cdFx0XHRcdC8vIFNhdmUgdGhlIGNhbGxiYWNrIG5hbWUgZm9yIGZ1dHVyZSB1c2Vcblx0XHRcdFx0b2xkQ2FsbGJhY2tzLnB1c2goIGNhbGxiYWNrTmFtZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDYWxsIGlmIGl0IHdhcyBhIGZ1bmN0aW9uIGFuZCB3ZSBoYXZlIGEgcmVzcG9uc2Vcblx0XHRcdGlmICggcmVzcG9uc2VDb250YWluZXIgJiYgaXNGdW5jdGlvbiggb3ZlcndyaXR0ZW4gKSApIHtcblx0XHRcdFx0b3ZlcndyaXR0ZW4oIHJlc3BvbnNlQ29udGFpbmVyWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBvdmVyd3JpdHRlbiA9IHVuZGVmaW5lZDtcblx0XHR9ICk7XG5cblx0XHQvLyBEZWxlZ2F0ZSB0byBzY3JpcHRcblx0XHRyZXR1cm4gXCJzY3JpcHRcIjtcblx0fVxufSApO1xuXG5cblxuXG4vLyBTdXBwb3J0OiBTYWZhcmkgOCBvbmx5XG4vLyBJbiBTYWZhcmkgOCBkb2N1bWVudHMgY3JlYXRlZCB2aWEgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50XG4vLyBjb2xsYXBzZSBzaWJsaW5nIGZvcm1zOiB0aGUgc2Vjb25kIG9uZSBiZWNvbWVzIGEgY2hpbGQgb2YgdGhlIGZpcnN0IG9uZS5cbi8vIEJlY2F1c2Ugb2YgdGhhdCwgdGhpcyBzZWN1cml0eSBtZWFzdXJlIGhhcyB0byBiZSBkaXNhYmxlZCBpbiBTYWZhcmkgOC5cbi8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzczMzdcbnN1cHBvcnQuY3JlYXRlSFRNTERvY3VtZW50ID0gKCBmdW5jdGlvbigpIHtcblx0dmFyIGJvZHkgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKS5ib2R5O1xuXHRib2R5LmlubmVySFRNTCA9IFwiPGZvcm0+PC9mb3JtPjxmb3JtPjwvZm9ybT5cIjtcblx0cmV0dXJuIGJvZHkuY2hpbGROb2Rlcy5sZW5ndGggPT09IDI7XG59ICkoKTtcblxuXG4vLyBBcmd1bWVudCBcImRhdGFcIiBzaG91bGQgYmUgc3RyaW5nIG9mIGh0bWxcbi8vIGNvbnRleHQgKG9wdGlvbmFsKTogSWYgc3BlY2lmaWVkLCB0aGUgZnJhZ21lbnQgd2lsbCBiZSBjcmVhdGVkIGluIHRoaXMgY29udGV4dCxcbi8vIGRlZmF1bHRzIHRvIGRvY3VtZW50XG4vLyBrZWVwU2NyaXB0cyAob3B0aW9uYWwpOiBJZiB0cnVlLCB3aWxsIGluY2x1ZGUgc2NyaXB0cyBwYXNzZWQgaW4gdGhlIGh0bWwgc3RyaW5nXG5qUXVlcnkucGFyc2VIVE1MID0gZnVuY3Rpb24oIGRhdGEsIGNvbnRleHQsIGtlZXBTY3JpcHRzICkge1xuXHRpZiAoIHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRrZWVwU2NyaXB0cyA9IGNvbnRleHQ7XG5cdFx0Y29udGV4dCA9IGZhbHNlO1xuXHR9XG5cblx0dmFyIGJhc2UsIHBhcnNlZCwgc2NyaXB0cztcblxuXHRpZiAoICFjb250ZXh0ICkge1xuXG5cdFx0Ly8gU3RvcCBzY3JpcHRzIG9yIGlubGluZSBldmVudCBoYW5kbGVycyBmcm9tIGJlaW5nIGV4ZWN1dGVkIGltbWVkaWF0ZWx5XG5cdFx0Ly8gYnkgdXNpbmcgZG9jdW1lbnQuaW1wbGVtZW50YXRpb25cblx0XHRpZiAoIHN1cHBvcnQuY3JlYXRlSFRNTERvY3VtZW50ICkge1xuXHRcdFx0Y29udGV4dCA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCggXCJcIiApO1xuXG5cdFx0XHQvLyBTZXQgdGhlIGJhc2UgaHJlZiBmb3IgdGhlIGNyZWF0ZWQgZG9jdW1lbnRcblx0XHRcdC8vIHNvIGFueSBwYXJzZWQgZWxlbWVudHMgd2l0aCBVUkxzXG5cdFx0XHQvLyBhcmUgYmFzZWQgb24gdGhlIGRvY3VtZW50J3MgVVJMIChnaC0yOTY1KVxuXHRcdFx0YmFzZSA9IGNvbnRleHQuY3JlYXRlRWxlbWVudCggXCJiYXNlXCIgKTtcblx0XHRcdGJhc2UuaHJlZiA9IGRvY3VtZW50LmxvY2F0aW9uLmhyZWY7XG5cdFx0XHRjb250ZXh0LmhlYWQuYXBwZW5kQ2hpbGQoIGJhc2UgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGV4dCA9IGRvY3VtZW50O1xuXHRcdH1cblx0fVxuXG5cdHBhcnNlZCA9IHJzaW5nbGVUYWcuZXhlYyggZGF0YSApO1xuXHRzY3JpcHRzID0gIWtlZXBTY3JpcHRzICYmIFtdO1xuXG5cdC8vIFNpbmdsZSB0YWdcblx0aWYgKCBwYXJzZWQgKSB7XG5cdFx0cmV0dXJuIFsgY29udGV4dC5jcmVhdGVFbGVtZW50KCBwYXJzZWRbIDEgXSApIF07XG5cdH1cblxuXHRwYXJzZWQgPSBidWlsZEZyYWdtZW50KCBbIGRhdGEgXSwgY29udGV4dCwgc2NyaXB0cyApO1xuXG5cdGlmICggc2NyaXB0cyAmJiBzY3JpcHRzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkoIHNjcmlwdHMgKS5yZW1vdmUoKTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBwYXJzZWQuY2hpbGROb2RlcyApO1xufTtcblxuXG4vKipcbiAqIExvYWQgYSB1cmwgaW50byBhIHBhZ2VcbiAqL1xualF1ZXJ5LmZuLmxvYWQgPSBmdW5jdGlvbiggdXJsLCBwYXJhbXMsIGNhbGxiYWNrICkge1xuXHR2YXIgc2VsZWN0b3IsIHR5cGUsIHJlc3BvbnNlLFxuXHRcdHNlbGYgPSB0aGlzLFxuXHRcdG9mZiA9IHVybC5pbmRleE9mKCBcIiBcIiApO1xuXG5cdGlmICggb2ZmID4gLTEgKSB7XG5cdFx0c2VsZWN0b3IgPSBzdHJpcEFuZENvbGxhcHNlKCB1cmwuc2xpY2UoIG9mZiApICk7XG5cdFx0dXJsID0gdXJsLnNsaWNlKCAwLCBvZmYgKTtcblx0fVxuXG5cdC8vIElmIGl0J3MgYSBmdW5jdGlvblxuXHRpZiAoIGlzRnVuY3Rpb24oIHBhcmFtcyApICkge1xuXG5cdFx0Ly8gV2UgYXNzdW1lIHRoYXQgaXQncyB0aGUgY2FsbGJhY2tcblx0XHRjYWxsYmFjayA9IHBhcmFtcztcblx0XHRwYXJhbXMgPSB1bmRlZmluZWQ7XG5cblx0Ly8gT3RoZXJ3aXNlLCBidWlsZCBhIHBhcmFtIHN0cmluZ1xuXHR9IGVsc2UgaWYgKCBwYXJhbXMgJiYgdHlwZW9mIHBhcmFtcyA9PT0gXCJvYmplY3RcIiApIHtcblx0XHR0eXBlID0gXCJQT1NUXCI7XG5cdH1cblxuXHQvLyBJZiB3ZSBoYXZlIGVsZW1lbnRzIHRvIG1vZGlmeSwgbWFrZSB0aGUgcmVxdWVzdFxuXHRpZiAoIHNlbGYubGVuZ3RoID4gMCApIHtcblx0XHRqUXVlcnkuYWpheCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cblx0XHRcdC8vIElmIFwidHlwZVwiIHZhcmlhYmxlIGlzIHVuZGVmaW5lZCwgdGhlbiBcIkdFVFwiIG1ldGhvZCB3aWxsIGJlIHVzZWQuXG5cdFx0XHQvLyBNYWtlIHZhbHVlIG9mIHRoaXMgZmllbGQgZXhwbGljaXQgc2luY2Vcblx0XHRcdC8vIHVzZXIgY2FuIG92ZXJyaWRlIGl0IHRocm91Z2ggYWpheFNldHVwIG1ldGhvZFxuXHRcdFx0dHlwZTogdHlwZSB8fCBcIkdFVFwiLFxuXHRcdFx0ZGF0YVR5cGU6IFwiaHRtbFwiLFxuXHRcdFx0ZGF0YTogcGFyYW1zXG5cdFx0fSApLmRvbmUoIGZ1bmN0aW9uKCByZXNwb25zZVRleHQgKSB7XG5cblx0XHRcdC8vIFNhdmUgcmVzcG9uc2UgZm9yIHVzZSBpbiBjb21wbGV0ZSBjYWxsYmFja1xuXHRcdFx0cmVzcG9uc2UgPSBhcmd1bWVudHM7XG5cblx0XHRcdHNlbGYuaHRtbCggc2VsZWN0b3IgP1xuXG5cdFx0XHRcdC8vIElmIGEgc2VsZWN0b3Igd2FzIHNwZWNpZmllZCwgbG9jYXRlIHRoZSByaWdodCBlbGVtZW50cyBpbiBhIGR1bW15IGRpdlxuXHRcdFx0XHQvLyBFeGNsdWRlIHNjcmlwdHMgdG8gYXZvaWQgSUUgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJvcnNcblx0XHRcdFx0alF1ZXJ5KCBcIjxkaXY+XCIgKS5hcHBlbmQoIGpRdWVyeS5wYXJzZUhUTUwoIHJlc3BvbnNlVGV4dCApICkuZmluZCggc2VsZWN0b3IgKSA6XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHVzZSB0aGUgZnVsbCByZXN1bHRcblx0XHRcdFx0cmVzcG9uc2VUZXh0ICk7XG5cblx0XHQvLyBJZiB0aGUgcmVxdWVzdCBzdWNjZWVkcywgdGhpcyBmdW5jdGlvbiBnZXRzIFwiZGF0YVwiLCBcInN0YXR1c1wiLCBcImpxWEhSXCJcblx0XHQvLyBidXQgdGhleSBhcmUgaWdub3JlZCBiZWNhdXNlIHJlc3BvbnNlIHdhcyBzZXQgYWJvdmUuXG5cdFx0Ly8gSWYgaXQgZmFpbHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImpxWEhSXCIsIFwic3RhdHVzXCIsIFwiZXJyb3JcIlxuXHRcdH0gKS5hbHdheXMoIGNhbGxiYWNrICYmIGZ1bmN0aW9uKCBqcVhIUiwgc3RhdHVzICkge1xuXHRcdFx0c2VsZi5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Y2FsbGJhY2suYXBwbHkoIHRoaXMsIHJlc3BvbnNlIHx8IFsganFYSFIucmVzcG9uc2VUZXh0LCBzdGF0dXMsIGpxWEhSIF0gKTtcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn07XG5cblxuXG5cbi8vIEF0dGFjaCBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgY29tbW9uIEFKQVggZXZlbnRzXG5qUXVlcnkuZWFjaCggW1xuXHRcImFqYXhTdGFydFwiLFxuXHRcImFqYXhTdG9wXCIsXG5cdFwiYWpheENvbXBsZXRlXCIsXG5cdFwiYWpheEVycm9yXCIsXG5cdFwiYWpheFN1Y2Nlc3NcIixcblx0XCJhamF4U2VuZFwiXG5dLCBmdW5jdGlvbiggaSwgdHlwZSApIHtcblx0alF1ZXJ5LmZuWyB0eXBlIF0gPSBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGUsIGZuICk7XG5cdH07XG59ICk7XG5cblxuXG5cbmpRdWVyeS5leHByLnBzZXVkb3MuYW5pbWF0ZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuIGpRdWVyeS5ncmVwKCBqUXVlcnkudGltZXJzLCBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW0gPT09IGZuLmVsZW07XG5cdH0gKS5sZW5ndGg7XG59O1xuXG5cblxuXG5qUXVlcnkub2Zmc2V0ID0ge1xuXHRzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkge1xuXHRcdHZhciBjdXJQb3NpdGlvbiwgY3VyTGVmdCwgY3VyQ1NTVG9wLCBjdXJUb3AsIGN1ck9mZnNldCwgY3VyQ1NTTGVmdCwgY2FsY3VsYXRlUG9zaXRpb24sXG5cdFx0XHRwb3NpdGlvbiA9IGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApLFxuXHRcdFx0Y3VyRWxlbSA9IGpRdWVyeSggZWxlbSApLFxuXHRcdFx0cHJvcHMgPSB7fTtcblxuXHRcdC8vIFNldCBwb3NpdGlvbiBmaXJzdCwgaW4tY2FzZSB0b3AvbGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW1cblx0XHRpZiAoIHBvc2l0aW9uID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0ZWxlbS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcblx0XHR9XG5cblx0XHRjdXJPZmZzZXQgPSBjdXJFbGVtLm9mZnNldCgpO1xuXHRcdGN1ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwidG9wXCIgKTtcblx0XHRjdXJDU1NMZWZ0ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJsZWZ0XCIgKTtcblx0XHRjYWxjdWxhdGVQb3NpdGlvbiA9ICggcG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiB8fCBwb3NpdGlvbiA9PT0gXCJmaXhlZFwiICkgJiZcblx0XHRcdCggY3VyQ1NTVG9wICsgY3VyQ1NTTGVmdCApLmluZGV4T2YoIFwiYXV0b1wiICkgPiAtMTtcblxuXHRcdC8vIE5lZWQgdG8gYmUgYWJsZSB0byBjYWxjdWxhdGUgcG9zaXRpb24gaWYgZWl0aGVyXG5cdFx0Ly8gdG9wIG9yIGxlZnQgaXMgYXV0byBhbmQgcG9zaXRpb24gaXMgZWl0aGVyIGFic29sdXRlIG9yIGZpeGVkXG5cdFx0aWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHtcblx0XHRcdGN1clBvc2l0aW9uID0gY3VyRWxlbS5wb3NpdGlvbigpO1xuXHRcdFx0Y3VyVG9wID0gY3VyUG9zaXRpb24udG9wO1xuXHRcdFx0Y3VyTGVmdCA9IGN1clBvc2l0aW9uLmxlZnQ7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyVG9wID0gcGFyc2VGbG9hdCggY3VyQ1NTVG9wICkgfHwgMDtcblx0XHRcdGN1ckxlZnQgPSBwYXJzZUZsb2F0KCBjdXJDU1NMZWZ0ICkgfHwgMDtcblx0XHR9XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIG9wdGlvbnMgKSApIHtcblxuXHRcdFx0Ly8gVXNlIGpRdWVyeS5leHRlbmQgaGVyZSB0byBhbGxvdyBtb2RpZmljYXRpb24gb2YgY29vcmRpbmF0ZXMgYXJndW1lbnQgKGdoLTE4NDgpXG5cdFx0XHRvcHRpb25zID0gb3B0aW9ucy5jYWxsKCBlbGVtLCBpLCBqUXVlcnkuZXh0ZW5kKCB7fSwgY3VyT2Zmc2V0ICkgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdGlvbnMudG9wICE9IG51bGwgKSB7XG5cdFx0XHRwcm9wcy50b3AgPSAoIG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCApICsgY3VyVG9wO1xuXHRcdH1cblx0XHRpZiAoIG9wdGlvbnMubGVmdCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMubGVmdCA9ICggb3B0aW9ucy5sZWZ0IC0gY3VyT2Zmc2V0LmxlZnQgKSArIGN1ckxlZnQ7XG5cdFx0fVxuXG5cdFx0aWYgKCBcInVzaW5nXCIgaW4gb3B0aW9ucyApIHtcblx0XHRcdG9wdGlvbnMudXNpbmcuY2FsbCggZWxlbSwgcHJvcHMgKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJFbGVtLmNzcyggcHJvcHMgKTtcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHQvLyBvZmZzZXQoKSByZWxhdGVzIGFuIGVsZW1lbnQncyBib3JkZXIgYm94IHRvIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b2Zmc2V0OiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHRcdC8vIFByZXNlcnZlIGNoYWluaW5nIGZvciBzZXR0ZXJcblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0dGhpcyA6XG5cdFx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTtcblx0XHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHZhciByZWN0LCB3aW4sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gemVyb3MgZm9yIGRpc2Nvbm5lY3RlZCBhbmQgaGlkZGVuIChkaXNwbGF5OiBub25lKSBlbGVtZW50cyAoZ2gtMjMxMClcblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhXG5cdFx0Ly8gZGlzY29ubmVjdGVkIG5vZGUgaW4gSUUgdGhyb3dzIGFuIGVycm9yXG5cdFx0aWYgKCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB7IHRvcDogMCwgbGVmdDogMCB9O1xuXHRcdH1cblxuXHRcdC8vIEdldCBkb2N1bWVudC1yZWxhdGl2ZSBwb3NpdGlvbiBieSBhZGRpbmcgdmlld3BvcnQgc2Nyb2xsIHRvIHZpZXdwb3J0LXJlbGF0aXZlIGdCQ1Jcblx0XHRyZWN0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHR3aW4gPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogcmVjdC50b3AgKyB3aW4ucGFnZVlPZmZzZXQsXG5cdFx0XHRsZWZ0OiByZWN0LmxlZnQgKyB3aW4ucGFnZVhPZmZzZXRcblx0XHR9O1xuXHR9LFxuXG5cdC8vIHBvc2l0aW9uKCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgbWFyZ2luIGJveCB0byBpdHMgb2Zmc2V0IHBhcmVudCdzIHBhZGRpbmcgYm94XG5cdC8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGJlaGF2aW9yIG9mIENTUyBhYnNvbHV0ZSBwb3NpdGlvbmluZ1xuXHRwb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCAhdGhpc1sgMCBdICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBvZmZzZXRQYXJlbnQsIG9mZnNldCwgZG9jLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdHBhcmVudE9mZnNldCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cblx0XHQvLyBwb3NpdGlvbjpmaXhlZCBlbGVtZW50cyBhcmUgb2Zmc2V0IGZyb20gdGhlIHZpZXdwb3J0LCB3aGljaCBpdHNlbGYgYWx3YXlzIGhhcyB6ZXJvIG9mZnNldFxuXHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICkgPT09IFwiZml4ZWRcIiApIHtcblxuXHRcdFx0Ly8gQXNzdW1lIHBvc2l0aW9uOmZpeGVkIGltcGxpZXMgYXZhaWxhYmlsaXR5IG9mIGdldEJvdW5kaW5nQ2xpZW50UmVjdFxuXHRcdFx0b2Zmc2V0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvZmZzZXQgPSB0aGlzLm9mZnNldCgpO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB0aGUgKnJlYWwqIG9mZnNldCBwYXJlbnQsIHdoaWNoIGNhbiBiZSB0aGUgZG9jdW1lbnQgb3IgaXRzIHJvb3QgZWxlbWVudFxuXHRcdFx0Ly8gd2hlbiBhIHN0YXRpY2FsbHkgcG9zaXRpb25lZCBlbGVtZW50IGlzIGlkZW50aWZpZWRcblx0XHRcdGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudDtcblx0XHRcdG9mZnNldFBhcmVudCA9IGVsZW0ub2Zmc2V0UGFyZW50IHx8IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJlxuXHRcdFx0XHQoIG9mZnNldFBhcmVudCA9PT0gZG9jLmJvZHkgfHwgb2Zmc2V0UGFyZW50ID09PSBkb2MuZG9jdW1lbnRFbGVtZW50ICkgJiZcblx0XHRcdFx0alF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcInBvc2l0aW9uXCIgKSA9PT0gXCJzdGF0aWNcIiApIHtcblxuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGlmICggb2Zmc2V0UGFyZW50ICYmIG9mZnNldFBhcmVudCAhPT0gZWxlbSAmJiBvZmZzZXRQYXJlbnQubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgYm9yZGVycyBpbnRvIGl0cyBvZmZzZXQsIHNpbmNlIHRoZXkgYXJlIG91dHNpZGUgaXRzIGNvbnRlbnQgb3JpZ2luXG5cdFx0XHRcdHBhcmVudE9mZnNldCA9IGpRdWVyeSggb2Zmc2V0UGFyZW50ICkub2Zmc2V0KCk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC50b3AgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlclRvcFdpZHRoXCIsIHRydWUgKTtcblx0XHRcdFx0cGFyZW50T2Zmc2V0LmxlZnQgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlckxlZnRXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU3VidHJhY3QgcGFyZW50IG9mZnNldHMgYW5kIGVsZW1lbnQgbWFyZ2luc1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IG9mZnNldC50b3AgLSBwYXJlbnRPZmZzZXQudG9wIC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5Ub3BcIiwgdHJ1ZSApLFxuXHRcdFx0bGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luTGVmdFwiLCB0cnVlIClcblx0XHR9O1xuXHR9LFxuXG5cdC8vIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGRvY3VtZW50RWxlbWVudCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuXHQvLyAxKSBGb3IgdGhlIGVsZW1lbnQgaW5zaWRlIHRoZSBpZnJhbWUgd2l0aG91dCBvZmZzZXRQYXJlbnQsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuXG5cdC8vICAgIGRvY3VtZW50RWxlbWVudCBvZiB0aGUgcGFyZW50IHdpbmRvd1xuXHQvLyAyKSBGb3IgdGhlIGhpZGRlbiBvciBkZXRhY2hlZCBlbGVtZW50XG5cdC8vIDMpIEZvciBib2R5IG9yIGh0bWwgZWxlbWVudCwgaS5lLiBpbiBjYXNlIG9mIHRoZSBodG1sIG5vZGUgLSBpdCB3aWxsIHJldHVybiBpdHNlbGZcblx0Ly9cblx0Ly8gYnV0IHRob3NlIGV4Y2VwdGlvbnMgd2VyZSBuZXZlciBwcmVzZW50ZWQgYXMgYSByZWFsIGxpZmUgdXNlLWNhc2VzXG5cdC8vIGFuZCBtaWdodCBiZSBjb25zaWRlcmVkIGFzIG1vcmUgcHJlZmVyYWJsZSByZXN1bHRzLlxuXHQvL1xuXHQvLyBUaGlzIGxvZ2ljLCBob3dldmVyLCBpcyBub3QgZ3VhcmFudGVlZCBhbmQgY2FuIGNoYW5nZSBhdCBhbnkgcG9pbnQgaW4gdGhlIGZ1dHVyZVxuXHRvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQ7XG5cblx0XHRcdHdoaWxlICggb2Zmc2V0UGFyZW50ICYmIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnRFbGVtZW50O1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG4vLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IHNjcm9sbExlZnQ6IFwicGFnZVhPZmZzZXRcIiwgc2Nyb2xsVG9wOiBcInBhZ2VZT2Zmc2V0XCIgfSwgZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHtcblx0dmFyIHRvcCA9IFwicGFnZVlPZmZzZXRcIiA9PT0gcHJvcDtcblxuXHRqUXVlcnkuZm5bIG1ldGhvZCBdID0gZnVuY3Rpb24oIHZhbCApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7XG5cblx0XHRcdC8vIENvYWxlc2NlIGRvY3VtZW50cyBhbmQgd2luZG93c1xuXHRcdFx0dmFyIHdpbjtcblx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblx0XHRcdFx0d2luID0gZWxlbTtcblx0XHRcdH0gZWxzZSBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW0uZGVmYXVsdFZpZXc7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiB3aW4gPyB3aW5bIHByb3AgXSA6IGVsZW1bIG1ldGhvZCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHdpbiApIHtcblx0XHRcdFx0d2luLnNjcm9sbFRvKFxuXHRcdFx0XHRcdCF0b3AgPyB2YWwgOiB3aW4ucGFnZVhPZmZzZXQsXG5cdFx0XHRcdFx0dG9wID8gdmFsIDogd2luLnBhZ2VZT2Zmc2V0XG5cdFx0XHRcdCk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1bIG1ldGhvZCBdID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0sIG1ldGhvZCwgdmFsLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH07XG59ICk7XG5cbi8vIFN1cHBvcnQ6IFNhZmFyaSA8PTcgLSA5LjEsIENocm9tZSA8PTM3IC0gNDlcbi8vIEFkZCB0aGUgdG9wL2xlZnQgY3NzSG9va3MgdXNpbmcgalF1ZXJ5LmZuLnBvc2l0aW9uXG4vLyBXZWJraXQgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwODRcbi8vIEJsaW5rIGJ1ZzogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NTg5MzQ3XG4vLyBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgcGVyY2VudCB3aGVuIHNwZWNpZmllZCBmb3IgdG9wL2xlZnQvYm90dG9tL3JpZ2h0O1xuLy8gcmF0aGVyIHRoYW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQgb24gdGhlIG9mZnNldCBtb2R1bGUsIGp1c3QgY2hlY2sgZm9yIGl0IGhlcmVcbmpRdWVyeS5lYWNoKCBbIFwidG9wXCIsIFwibGVmdFwiIF0sIGZ1bmN0aW9uKCBpLCBwcm9wICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIHByb3AgXSA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5waXhlbFBvc2l0aW9uLFxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGNvbXB1dGVkID0gY3VyQ1NTKCBlbGVtLCBwcm9wICk7XG5cblx0XHRcdFx0Ly8gSWYgY3VyQ1NTIHJldHVybnMgcGVyY2VudGFnZSwgZmFsbGJhY2sgdG8gb2Zmc2V0XG5cdFx0XHRcdHJldHVybiBybnVtbm9ucHgudGVzdCggY29tcHV0ZWQgKSA/XG5cdFx0XHRcdFx0alF1ZXJ5KCBlbGVtICkucG9zaXRpb24oKVsgcHJvcCBdICsgXCJweFwiIDpcblx0XHRcdFx0XHRjb21wdXRlZDtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG59ICk7XG5cblxuLy8gQ3JlYXRlIGlubmVySGVpZ2h0LCBpbm5lcldpZHRoLCBoZWlnaHQsIHdpZHRoLCBvdXRlckhlaWdodCBhbmQgb3V0ZXJXaWR0aCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBIZWlnaHQ6IFwiaGVpZ2h0XCIsIFdpZHRoOiBcIndpZHRoXCIgfSwgZnVuY3Rpb24oIG5hbWUsIHR5cGUgKSB7XG5cdGpRdWVyeS5lYWNoKCB7IHBhZGRpbmc6IFwiaW5uZXJcIiArIG5hbWUsIGNvbnRlbnQ6IHR5cGUsIFwiXCI6IFwib3V0ZXJcIiArIG5hbWUgfSxcblx0XHRmdW5jdGlvbiggZGVmYXVsdEV4dHJhLCBmdW5jTmFtZSApIHtcblxuXHRcdC8vIE1hcmdpbiBpcyBvbmx5IGZvciBvdXRlckhlaWdodCwgb3V0ZXJXaWR0aFxuXHRcdGpRdWVyeS5mblsgZnVuY05hbWUgXSA9IGZ1bmN0aW9uKCBtYXJnaW4sIHZhbHVlICkge1xuXHRcdFx0dmFyIGNoYWluYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggJiYgKCBkZWZhdWx0RXh0cmEgfHwgdHlwZW9mIG1hcmdpbiAhPT0gXCJib29sZWFuXCIgKSxcblx0XHRcdFx0ZXh0cmEgPSBkZWZhdWx0RXh0cmEgfHwgKCBtYXJnaW4gPT09IHRydWUgfHwgdmFsdWUgPT09IHRydWUgPyBcIm1hcmdpblwiIDogXCJib3JkZXJcIiApO1xuXG5cdFx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgdHlwZSwgdmFsdWUgKSB7XG5cdFx0XHRcdHZhciBkb2M7XG5cblx0XHRcdFx0aWYgKCBpc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRcdFx0Ly8gJCggd2luZG93ICkub3V0ZXJXaWR0aC9IZWlnaHQgcmV0dXJuIHcvaCBpbmNsdWRpbmcgc2Nyb2xsYmFycyAoZ2gtMTcyOSlcblx0XHRcdFx0XHRyZXR1cm4gZnVuY05hbWUuaW5kZXhPZiggXCJvdXRlclwiICkgPT09IDAgP1xuXHRcdFx0XHRcdFx0ZWxlbVsgXCJpbm5lclwiICsgbmFtZSBdIDpcblx0XHRcdFx0XHRcdGVsZW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyBcImNsaWVudFwiICsgbmFtZSBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gR2V0IGRvY3VtZW50IHdpZHRoIG9yIGhlaWdodFxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0ZG9jID0gZWxlbS5kb2N1bWVudEVsZW1lbnQ7XG5cblx0XHRcdFx0XHQvLyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0gb3Igb2Zmc2V0W1dpZHRoL0hlaWdodF0gb3IgY2xpZW50W1dpZHRoL0hlaWdodF0sXG5cdFx0XHRcdFx0Ly8gd2hpY2hldmVyIGlzIGdyZWF0ZXN0XG5cdFx0XHRcdFx0cmV0dXJuIE1hdGgubWF4KFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcInNjcm9sbFwiICsgbmFtZSBdLCBkb2NbIFwic2Nyb2xsXCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwib2Zmc2V0XCIgKyBuYW1lIF0sIGRvY1sgXCJvZmZzZXRcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGRvY1sgXCJjbGllbnRcIiArIG5hbWUgXVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cblx0XHRcdFx0XHQvLyBHZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50LCByZXF1ZXN0aW5nIGJ1dCBub3QgZm9yY2luZyBwYXJzZUZsb2F0XG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgZXh0cmEgKSA6XG5cblx0XHRcdFx0XHQvLyBTZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50XG5cdFx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCB0eXBlLCB2YWx1ZSwgZXh0cmEgKTtcblx0XHRcdH0sIHR5cGUsIGNoYWluYWJsZSA/IG1hcmdpbiA6IHVuZGVmaW5lZCwgY2hhaW5hYmxlICk7XG5cdFx0fTtcblx0fSApO1xufSApO1xuXG5cbmpRdWVyeS5lYWNoKCAoIFwiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgXCIgK1xuXHRcIm1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIFwiICtcblx0XCJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51XCIgKS5zcGxpdCggXCIgXCIgKSxcblx0ZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cblx0Ly8gSGFuZGxlIGV2ZW50IGJpbmRpbmdcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID9cblx0XHRcdHRoaXMub24oIG5hbWUsIG51bGwsIGRhdGEsIGZuICkgOlxuXHRcdFx0dGhpcy50cmlnZ2VyKCBuYW1lICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0aG92ZXI6IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkge1xuXHRcdHJldHVybiB0aGlzLm1vdXNlZW50ZXIoIGZuT3ZlciApLm1vdXNlbGVhdmUoIGZuT3V0IHx8IGZuT3ZlciApO1xuXHR9XG59ICk7XG5cblxuXG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHRiaW5kOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgbnVsbCwgZGF0YSwgZm4gKTtcblx0fSxcblx0dW5iaW5kOiBmdW5jdGlvbiggdHlwZXMsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9mZiggdHlwZXMsIG51bGwsIGZuICk7XG5cdH0sXG5cblx0ZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGZuICkge1xuXG5cdFx0Ly8gKCBuYW1lc3BhY2UgKSBvciAoIHNlbGVjdG9yLCB0eXBlcyBbLCBmbl0gKVxuXHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID9cblx0XHRcdHRoaXMub2ZmKCBzZWxlY3RvciwgXCIqKlwiICkgOlxuXHRcdFx0dGhpcy5vZmYoIHR5cGVzLCBzZWxlY3RvciB8fCBcIioqXCIsIGZuICk7XG5cdH1cbn0gKTtcblxuLy8gQmluZCBhIGZ1bmN0aW9uIHRvIGEgY29udGV4dCwgb3B0aW9uYWxseSBwYXJ0aWFsbHkgYXBwbHlpbmcgYW55XG4vLyBhcmd1bWVudHMuXG4vLyBqUXVlcnkucHJveHkgaXMgZGVwcmVjYXRlZCB0byBwcm9tb3RlIHN0YW5kYXJkcyAoc3BlY2lmaWNhbGx5IEZ1bmN0aW9uI2JpbmQpXG4vLyBIb3dldmVyLCBpdCBpcyBub3Qgc2xhdGVkIGZvciByZW1vdmFsIGFueSB0aW1lIHNvb25cbmpRdWVyeS5wcm94eSA9IGZ1bmN0aW9uKCBmbiwgY29udGV4dCApIHtcblx0dmFyIHRtcCwgYXJncywgcHJveHk7XG5cblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHR0bXAgPSBmblsgY29udGV4dCBdO1xuXHRcdGNvbnRleHQgPSBmbjtcblx0XHRmbiA9IHRtcDtcblx0fVxuXG5cdC8vIFF1aWNrIGNoZWNrIHRvIGRldGVybWluZSBpZiB0YXJnZXQgaXMgY2FsbGFibGUsIGluIHRoZSBzcGVjXG5cdC8vIHRoaXMgdGhyb3dzIGEgVHlwZUVycm9yLCBidXQgd2Ugd2lsbCBqdXN0IHJldHVybiB1bmRlZmluZWQuXG5cdGlmICggIWlzRnVuY3Rpb24oIGZuICkgKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8vIFNpbXVsYXRlZCBiaW5kXG5cdGFyZ3MgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMsIDIgKTtcblx0cHJveHkgPSBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZm4uYXBwbHkoIGNvbnRleHQgfHwgdGhpcywgYXJncy5jb25jYXQoIHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApICkgKTtcblx0fTtcblxuXHQvLyBTZXQgdGhlIGd1aWQgb2YgdW5pcXVlIGhhbmRsZXIgdG8gdGhlIHNhbWUgb2Ygb3JpZ2luYWwgaGFuZGxlciwgc28gaXQgY2FuIGJlIHJlbW92ZWRcblx0cHJveHkuZ3VpZCA9IGZuLmd1aWQgPSBmbi5ndWlkIHx8IGpRdWVyeS5ndWlkKys7XG5cblx0cmV0dXJuIHByb3h5O1xufTtcblxualF1ZXJ5LmhvbGRSZWFkeSA9IGZ1bmN0aW9uKCBob2xkICkge1xuXHRpZiAoIGhvbGQgKSB7XG5cdFx0alF1ZXJ5LnJlYWR5V2FpdCsrO1xuXHR9IGVsc2Uge1xuXHRcdGpRdWVyeS5yZWFkeSggdHJ1ZSApO1xuXHR9XG59O1xualF1ZXJ5LmlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xualF1ZXJ5LnBhcnNlSlNPTiA9IEpTT04ucGFyc2U7XG5qUXVlcnkubm9kZU5hbWUgPSBub2RlTmFtZTtcbmpRdWVyeS5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcbmpRdWVyeS5pc1dpbmRvdyA9IGlzV2luZG93O1xualF1ZXJ5LmNhbWVsQ2FzZSA9IGNhbWVsQ2FzZTtcbmpRdWVyeS50eXBlID0gdG9UeXBlO1xuXG5qUXVlcnkubm93ID0gRGF0ZS5ub3c7XG5cbmpRdWVyeS5pc051bWVyaWMgPSBmdW5jdGlvbiggb2JqICkge1xuXG5cdC8vIEFzIG9mIGpRdWVyeSAzLjAsIGlzTnVtZXJpYyBpcyBsaW1pdGVkIHRvXG5cdC8vIHN0cmluZ3MgYW5kIG51bWJlcnMgKHByaW1pdGl2ZXMgb3Igb2JqZWN0cylcblx0Ly8gdGhhdCBjYW4gYmUgY29lcmNlZCB0byBmaW5pdGUgbnVtYmVycyAoZ2gtMjY2Milcblx0dmFyIHR5cGUgPSBqUXVlcnkudHlwZSggb2JqICk7XG5cdHJldHVybiAoIHR5cGUgPT09IFwibnVtYmVyXCIgfHwgdHlwZSA9PT0gXCJzdHJpbmdcIiApICYmXG5cblx0XHQvLyBwYXJzZUZsb2F0IE5hTnMgbnVtZXJpYy1jYXN0IGZhbHNlIHBvc2l0aXZlcyAoXCJcIilcblx0XHQvLyAuLi5idXQgbWlzaW50ZXJwcmV0cyBsZWFkaW5nLW51bWJlciBzdHJpbmdzLCBwYXJ0aWN1bGFybHkgaGV4IGxpdGVyYWxzIChcIjB4Li4uXCIpXG5cdFx0Ly8gc3VidHJhY3Rpb24gZm9yY2VzIGluZmluaXRpZXMgdG8gTmFOXG5cdFx0IWlzTmFOKCBvYmogLSBwYXJzZUZsb2F0KCBvYmogKSApO1xufTtcblxuXG5cblxuLy8gUmVnaXN0ZXIgYXMgYSBuYW1lZCBBTUQgbW9kdWxlLCBzaW5jZSBqUXVlcnkgY2FuIGJlIGNvbmNhdGVuYXRlZCB3aXRoIG90aGVyXG4vLyBmaWxlcyB0aGF0IG1heSB1c2UgZGVmaW5lLCBidXQgbm90IHZpYSBhIHByb3BlciBjb25jYXRlbmF0aW9uIHNjcmlwdCB0aGF0XG4vLyB1bmRlcnN0YW5kcyBhbm9ueW1vdXMgQU1EIG1vZHVsZXMuIEEgbmFtZWQgQU1EIGlzIHNhZmVzdCBhbmQgbW9zdCByb2J1c3Rcbi8vIHdheSB0byByZWdpc3Rlci4gTG93ZXJjYXNlIGpxdWVyeSBpcyB1c2VkIGJlY2F1c2UgQU1EIG1vZHVsZSBuYW1lcyBhcmVcbi8vIGRlcml2ZWQgZnJvbSBmaWxlIG5hbWVzLCBhbmQgalF1ZXJ5IGlzIG5vcm1hbGx5IGRlbGl2ZXJlZCBpbiBhIGxvd2VyY2FzZVxuLy8gZmlsZSBuYW1lLiBEbyB0aGlzIGFmdGVyIGNyZWF0aW5nIHRoZSBnbG9iYWwgc28gdGhhdCBpZiBhbiBBTUQgbW9kdWxlIHdhbnRzXG4vLyB0byBjYWxsIG5vQ29uZmxpY3QgdG8gaGlkZSB0aGlzIHZlcnNpb24gb2YgalF1ZXJ5LCBpdCB3aWxsIHdvcmsuXG5cbi8vIE5vdGUgdGhhdCBmb3IgbWF4aW11bSBwb3J0YWJpbGl0eSwgbGlicmFyaWVzIHRoYXQgYXJlIG5vdCBqUXVlcnkgc2hvdWxkXG4vLyBkZWNsYXJlIHRoZW1zZWx2ZXMgYXMgYW5vbnltb3VzIG1vZHVsZXMsIGFuZCBhdm9pZCBzZXR0aW5nIGEgZ2xvYmFsIGlmIGFuXG4vLyBBTUQgbG9hZGVyIGlzIHByZXNlbnQuIGpRdWVyeSBpcyBhIHNwZWNpYWwgY2FzZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2pyYnVya2UvcmVxdWlyZWpzL3dpa2kvVXBkYXRpbmctZXhpc3RpbmctbGlicmFyaWVzI3dpa2ktYW5vblxuXG5pZiAoIHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kICkge1xuXHRkZWZpbmUoIFwianF1ZXJ5XCIsIFtdLCBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4galF1ZXJ5O1xuXHR9ICk7XG59XG5cblxuXG5cbnZhclxuXG5cdC8vIE1hcCBvdmVyIGpRdWVyeSBpbiBjYXNlIG9mIG92ZXJ3cml0ZVxuXHRfalF1ZXJ5ID0gd2luZG93LmpRdWVyeSxcblxuXHQvLyBNYXAgb3ZlciB0aGUgJCBpbiBjYXNlIG9mIG92ZXJ3cml0ZVxuXHRfJCA9IHdpbmRvdy4kO1xuXG5qUXVlcnkubm9Db25mbGljdCA9IGZ1bmN0aW9uKCBkZWVwICkge1xuXHRpZiAoIHdpbmRvdy4kID09PSBqUXVlcnkgKSB7XG5cdFx0d2luZG93LiQgPSBfJDtcblx0fVxuXG5cdGlmICggZGVlcCAmJiB3aW5kb3cualF1ZXJ5ID09PSBqUXVlcnkgKSB7XG5cdFx0d2luZG93LmpRdWVyeSA9IF9qUXVlcnk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5O1xufTtcblxuLy8gRXhwb3NlIGpRdWVyeSBhbmQgJCBpZGVudGlmaWVycywgZXZlbiBpbiBBTURcbi8vICgjNzEwMiNjb21tZW50OjEwLCBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9wdWxsLzU1Nylcbi8vIGFuZCBDb21tb25KUyBmb3IgYnJvd3NlciBlbXVsYXRvcnMgKCMxMzU2NilcbmlmICggIW5vR2xvYmFsICkge1xuXHR3aW5kb3cualF1ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7XG59XG5cblxuXG5cbnJldHVybiBqUXVlcnk7XG59ICk7XG4iLCIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJrYXRleFwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJrYXRleFwiXSA9IGZhY3RvcnkoKTtcbn0pKCh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdGhpcyksIGZ1bmN0aW9uKCkge1xucmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMSk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIChbXG4vKiAwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuXG4vKioqLyB9KSxcbi8qIDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9zcmMva2F0ZXgubGVzc1xudmFyIGthdGV4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvU291cmNlTG9jYXRpb24uanNcbi8qKlxuICogTGV4aW5nIG9yIHBhcnNpbmcgcG9zaXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgZXJyb3IgcmVwb3J0aW5nLlxuICogVGhpcyBvYmplY3QgaXMgaW1tdXRhYmxlLlxuICovXG52YXIgU291cmNlTG9jYXRpb24gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICAvLyBUaGUgKyBwcmVmaXggaW5kaWNhdGVzIHRoYXQgdGhlc2UgZmllbGRzIGFyZW4ndCB3cml0ZWFibGVcbiAgLy8gTGV4ZXIgaG9sZGluZyB0aGUgaW5wdXQgc3RyaW5nLlxuICAvLyBTdGFydCBvZmZzZXQsIHplcm8tYmFzZWQgaW5jbHVzaXZlLlxuICAvLyBFbmQgb2Zmc2V0LCB6ZXJvLWJhc2VkIGV4Y2x1c2l2ZS5cbiAgZnVuY3Rpb24gU291cmNlTG9jYXRpb24obGV4ZXIsIHN0YXJ0LCBlbmQpIHtcbiAgICB0aGlzLmxleGVyID0gdm9pZCAwO1xuICAgIHRoaXMuc3RhcnQgPSB2b2lkIDA7XG4gICAgdGhpcy5lbmQgPSB2b2lkIDA7XG4gICAgdGhpcy5sZXhlciA9IGxleGVyO1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuICAvKipcbiAgICogTWVyZ2VzIHR3byBgU291cmNlTG9jYXRpb25gcyBmcm9tIGxvY2F0aW9uIHByb3ZpZGVycywgZ2l2ZW4gdGhleSBhcmVcbiAgICogcHJvdmlkZWQgaW4gb3JkZXIgb2YgYXBwZWFyYW5jZS5cbiAgICogLSBSZXR1cm5zIHRoZSBmaXJzdCBvbmUncyBsb2NhdGlvbiBpZiBvbmx5IHRoZSBmaXJzdCBpcyBwcm92aWRlZC5cbiAgICogLSBSZXR1cm5zIGEgbWVyZ2VkIHJhbmdlIG9mIHRoZSBmaXJzdCBhbmQgdGhlIGxhc3QgaWYgYm90aCBhcmUgcHJvdmlkZWRcbiAgICogICBhbmQgdGhlaXIgbGV4ZXJzIG1hdGNoLlxuICAgKiAtIE90aGVyd2lzZSwgcmV0dXJucyBudWxsLlxuICAgKi9cblxuXG4gIFNvdXJjZUxvY2F0aW9uLnJhbmdlID0gZnVuY3Rpb24gcmFuZ2UoZmlyc3QsIHNlY29uZCkge1xuICAgIGlmICghc2Vjb25kKSB7XG4gICAgICByZXR1cm4gZmlyc3QgJiYgZmlyc3QubG9jO1xuICAgIH0gZWxzZSBpZiAoIWZpcnN0IHx8ICFmaXJzdC5sb2MgfHwgIXNlY29uZC5sb2MgfHwgZmlyc3QubG9jLmxleGVyICE9PSBzZWNvbmQubG9jLmxleGVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBTb3VyY2VMb2NhdGlvbihmaXJzdC5sb2MubGV4ZXIsIGZpcnN0LmxvYy5zdGFydCwgc2Vjb25kLmxvYy5lbmQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gU291cmNlTG9jYXRpb247XG59KCk7XG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvVG9rZW4uanNcblxuLyoqXG4gKiBJbnRlcmZhY2UgcmVxdWlyZWQgdG8gYnJlYWsgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuIFRva2VuLCBMZXhlciwgYW5kXG4gKiBQYXJzZUVycm9yLlxuICovXG5cbi8qKlxuICogVGhlIHJlc3VsdGluZyB0b2tlbiByZXR1cm5lZCBmcm9tIGBsZXhgLlxuICpcbiAqIEl0IGNvbnNpc3RzIG9mIHRoZSB0b2tlbiB0ZXh0IHBsdXMgc29tZSBwb3NpdGlvbiBpbmZvcm1hdGlvbi5cbiAqIFRoZSBwb3NpdGlvbiBpbmZvcm1hdGlvbiBpcyBlc3NlbnRpYWxseSBhIHJhbmdlIGluIGFuIGlucHV0IHN0cmluZyxcbiAqIGJ1dCBpbnN0ZWFkIG9mIHJlZmVyZW5jaW5nIHRoZSBiYXJlIGlucHV0IHN0cmluZywgd2UgcmVmZXIgdG8gdGhlIGxleGVyLlxuICogVGhhdCB3YXkgaXQgaXMgcG9zc2libGUgdG8gYXR0YWNoIGV4dHJhIG1ldGFkYXRhIHRvIHRoZSBpbnB1dCBzdHJpbmcsXG4gKiBsaWtlIGZvciBleGFtcGxlIGEgZmlsZSBuYW1lIG9yIHNpbWlsYXIuXG4gKlxuICogVGhlIHBvc2l0aW9uIGluZm9ybWF0aW9uIGlzIG9wdGlvbmFsLCBzbyBpdCBpcyBPSyB0byBjb25zdHJ1Y3Qgc3ludGhldGljXG4gKiB0b2tlbnMgaWYgYXBwcm9wcmlhdGUuIE5vdCBwcm92aWRpbmcgYXZhaWxhYmxlIHBvc2l0aW9uIGluZm9ybWF0aW9uIG1heVxuICogbGVhZCB0byBkZWdyYWRlZCBlcnJvciByZXBvcnRpbmcsIHRob3VnaC5cbiAqL1xudmFyIFRva2VuX1Rva2VuID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVG9rZW4odGV4dCwgLy8gdGhlIHRleHQgb2YgdGhpcyB0b2tlblxuICBsb2MpIHtcbiAgICB0aGlzLnRleHQgPSB2b2lkIDA7XG4gICAgdGhpcy5sb2MgPSB2b2lkIDA7XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICB0aGlzLmxvYyA9IGxvYztcbiAgfVxuICAvKipcbiAgICogR2l2ZW4gYSBwYWlyIG9mIHRva2VucyAodGhpcyBhbmQgZW5kVG9rZW4pLCBjb21wdXRlIGEgYFRva2VuYCBlbmNvbXBhc3NpbmdcbiAgICogdGhlIHdob2xlIGlucHV0IHJhbmdlIGVuY2xvc2VkIGJ5IHRoZXNlIHR3by5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gVG9rZW4ucHJvdG90eXBlO1xuXG4gIF9wcm90by5yYW5nZSA9IGZ1bmN0aW9uIHJhbmdlKGVuZFRva2VuLCAvLyBsYXN0IHRva2VuIG9mIHRoZSByYW5nZSwgaW5jbHVzaXZlXG4gIHRleHQpIC8vIHRoZSB0ZXh0IG9mIHRoZSBuZXdseSBjb25zdHJ1Y3RlZCB0b2tlblxuICB7XG4gICAgcmV0dXJuIG5ldyBUb2tlbih0ZXh0LCBTb3VyY2VMb2NhdGlvbi5yYW5nZSh0aGlzLCBlbmRUb2tlbikpO1xuICB9O1xuXG4gIHJldHVybiBUb2tlbjtcbn0oKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1BhcnNlRXJyb3IuanNcblxuXG4vKipcbiAqIFRoaXMgaXMgdGhlIFBhcnNlRXJyb3IgY2xhc3MsIHdoaWNoIGlzIHRoZSBtYWluIGVycm9yIHRocm93biBieSBLYVRlWFxuICogZnVuY3Rpb25zIHdoZW4gc29tZXRoaW5nIGhhcyBnb25lIHdyb25nLiBUaGlzIGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggaW50ZXJuYWxcbiAqIGVycm9ycyBmcm9tIGVycm9ycyBpbiB0aGUgZXhwcmVzc2lvbiB0aGF0IHRoZSB1c2VyIHByb3ZpZGVkLlxuICpcbiAqIElmIHBvc3NpYmxlLCBhIGNhbGxlciBzaG91bGQgcHJvdmlkZSBhIFRva2VuIG9yIFBhcnNlTm9kZSB3aXRoIGluZm9ybWF0aW9uXG4gKiBhYm91dCB3aGVyZSBpbiB0aGUgc291cmNlIHN0cmluZyB0aGUgcHJvYmxlbSBvY2N1cnJlZC5cbiAqL1xudmFyIFBhcnNlRXJyb3IgPSAvLyBFcnJvciBwb3NpdGlvbiBiYXNlZCBvbiBwYXNzZWQtaW4gVG9rZW4gb3IgUGFyc2VOb2RlLlxuZnVuY3Rpb24gUGFyc2VFcnJvcihtZXNzYWdlLCAvLyBUaGUgZXJyb3IgbWVzc2FnZVxudG9rZW4pIC8vIEFuIG9iamVjdCBwcm92aWRpbmcgcG9zaXRpb24gaW5mb3JtYXRpb25cbntcbiAgdGhpcy5wb3NpdGlvbiA9IHZvaWQgMDtcbiAgdmFyIGVycm9yID0gXCJLYVRlWCBwYXJzZSBlcnJvcjogXCIgKyBtZXNzYWdlO1xuICB2YXIgc3RhcnQ7XG4gIHZhciBsb2MgPSB0b2tlbiAmJiB0b2tlbi5sb2M7XG5cbiAgaWYgKGxvYyAmJiBsb2Muc3RhcnQgPD0gbG9jLmVuZCkge1xuICAgIC8vIElmIHdlIGhhdmUgdGhlIGlucHV0IGFuZCBhIHBvc2l0aW9uLCBtYWtlIHRoZSBlcnJvciBhIGJpdCBmYW5jaWVyXG4gICAgLy8gR2V0IHRoZSBpbnB1dFxuICAgIHZhciBpbnB1dCA9IGxvYy5sZXhlci5pbnB1dDsgLy8gUHJlcGVuZCBzb21lIGluZm9ybWF0aW9uXG5cbiAgICBzdGFydCA9IGxvYy5zdGFydDtcbiAgICB2YXIgZW5kID0gbG9jLmVuZDtcblxuICAgIGlmIChzdGFydCA9PT0gaW5wdXQubGVuZ3RoKSB7XG4gICAgICBlcnJvciArPSBcIiBhdCBlbmQgb2YgaW5wdXQ6IFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvciArPSBcIiBhdCBwb3NpdGlvbiBcIiArIChzdGFydCArIDEpICsgXCI6IFwiO1xuICAgIH0gLy8gVW5kZXJsaW5lIHRva2VuIGluIHF1ZXN0aW9uIHVzaW5nIGNvbWJpbmluZyB1bmRlcnNjb3Jlc1xuXG5cbiAgICB2YXIgdW5kZXJsaW5lZCA9IGlucHV0LnNsaWNlKHN0YXJ0LCBlbmQpLnJlcGxhY2UoL1teXS9nLCBcIiQmXFx1MDMzMlwiKTsgLy8gRXh0cmFjdCBzb21lIGNvbnRleHQgZnJvbSB0aGUgaW5wdXQgYW5kIGFkZCBpdCB0byB0aGUgZXJyb3JcblxuICAgIHZhciBsZWZ0O1xuXG4gICAgaWYgKHN0YXJ0ID4gMTUpIHtcbiAgICAgIGxlZnQgPSBcIuKAplwiICsgaW5wdXQuc2xpY2Uoc3RhcnQgLSAxNSwgc3RhcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZWZ0ID0gaW5wdXQuc2xpY2UoMCwgc3RhcnQpO1xuICAgIH1cblxuICAgIHZhciByaWdodDtcblxuICAgIGlmIChlbmQgKyAxNSA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgcmlnaHQgPSBpbnB1dC5zbGljZShlbmQsIGVuZCArIDE1KSArIFwi4oCmXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJpZ2h0ID0gaW5wdXQuc2xpY2UoZW5kKTtcbiAgICB9XG5cbiAgICBlcnJvciArPSBsZWZ0ICsgdW5kZXJsaW5lZCArIHJpZ2h0O1xuICB9IC8vIFNvbWUgaGFja2VyeSB0byBtYWtlIFBhcnNlRXJyb3IgYSBwcm90b3R5cGUgb2YgRXJyb3JcbiAgLy8gU2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzg0NjA3NTNcblxuXG4gIHZhciBzZWxmID0gbmV3IEVycm9yKGVycm9yKTtcbiAgc2VsZi5uYW1lID0gXCJQYXJzZUVycm9yXCI7IC8vICRGbG93Rml4TWVcblxuICBzZWxmLl9fcHJvdG9fXyA9IFBhcnNlRXJyb3IucHJvdG90eXBlOyAvLyAkRmxvd0ZpeE1lXG5cbiAgc2VsZi5wb3NpdGlvbiA9IHN0YXJ0O1xuICByZXR1cm4gc2VsZjtcbn07IC8vICRGbG93Rml4TWUgTW9yZSBoYWNrZXJ5XG5cblxuUGFyc2VFcnJvci5wcm90b3R5cGUuX19wcm90b19fID0gRXJyb3IucHJvdG90eXBlO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX1BhcnNlRXJyb3IgPSAoUGFyc2VFcnJvcik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy91dGlscy5qc1xuLyoqXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgYSBsaXN0IG9mIHV0aWxpdHkgZnVuY3Rpb25zIHdoaWNoIGFyZSB1c2VmdWwgaW4gb3RoZXJcbiAqIGZpbGVzLlxuICovXG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgYW4gZWxlbWVudCBpcyBjb250YWluZWQgaW4gYSBsaXN0XG4gKi9cbnZhciBjb250YWlucyA9IGZ1bmN0aW9uIGNvbnRhaW5zKGxpc3QsIGVsZW0pIHtcbiAgcmV0dXJuIGxpc3QuaW5kZXhPZihlbGVtKSAhPT0gLTE7XG59O1xuLyoqXG4gKiBQcm92aWRlIGEgZGVmYXVsdCB2YWx1ZSBpZiBhIHNldHRpbmcgaXMgdW5kZWZpbmVkXG4gKiBOT1RFOiBDb3VsZG4ndCB1c2UgYFRgIGFzIHRoZSBvdXRwdXQgdHlwZSBkdWUgdG8gZmFjZWJvb2svZmxvdyM1MDIyLlxuICovXG5cblxudmFyIGRlZmx0ID0gZnVuY3Rpb24gZGVmbHQoc2V0dGluZywgZGVmYXVsdElmVW5kZWZpbmVkKSB7XG4gIHJldHVybiBzZXR0aW5nID09PSB1bmRlZmluZWQgPyBkZWZhdWx0SWZVbmRlZmluZWQgOiBzZXR0aW5nO1xufTsgLy8gaHlwaGVuYXRlIGFuZCBlc2NhcGUgYWRhcHRlZCBmcm9tIEZhY2Vib29rJ3MgUmVhY3QgdW5kZXIgQXBhY2hlIDIgbGljZW5zZVxuXG5cbnZhciB1cHBlcmNhc2UgPSAvKFtBLVpdKS9nO1xuXG52YXIgaHlwaGVuYXRlID0gZnVuY3Rpb24gaHlwaGVuYXRlKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UodXBwZXJjYXNlLCBcIi0kMVwiKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIEVTQ0FQRV9MT09LVVAgPSB7XG4gIFwiJlwiOiBcIiZhbXA7XCIsXG4gIFwiPlwiOiBcIiZndDtcIixcbiAgXCI8XCI6IFwiJmx0O1wiLFxuICBcIlxcXCJcIjogXCImcXVvdDtcIixcbiAgXCInXCI6IFwiJiN4Mjc7XCJcbn07XG52YXIgRVNDQVBFX1JFR0VYID0gL1smPjxcIiddL2c7XG4vKipcbiAqIEVzY2FwZXMgdGV4dCB0byBwcmV2ZW50IHNjcmlwdGluZyBhdHRhY2tzLlxuICovXG5cbmZ1bmN0aW9uIHV0aWxzX2VzY2FwZSh0ZXh0KSB7XG4gIHJldHVybiBTdHJpbmcodGV4dCkucmVwbGFjZShFU0NBUEVfUkVHRVgsIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIHJldHVybiBFU0NBUEVfTE9PS1VQW21hdGNoXTtcbiAgfSk7XG59XG4vKipcbiAqIFNvbWV0aW1lcyB3ZSB3YW50IHRvIHB1bGwgb3V0IHRoZSBpbm5lcm1vc3QgZWxlbWVudCBvZiBhIGdyb3VwLiBJbiBtb3N0XG4gKiBjYXNlcywgdGhpcyB3aWxsIGp1c3QgYmUgdGhlIGdyb3VwIGl0c2VsZiwgYnV0IHdoZW4gb3JkZ3JvdXBzIGFuZCBjb2xvcnMgaGF2ZVxuICogYSBzaW5nbGUgZWxlbWVudCwgd2Ugd2FudCB0byBwdWxsIHRoYXQgb3V0LlxuICovXG5cblxudmFyIGdldEJhc2VFbGVtID0gZnVuY3Rpb24gZ2V0QmFzZUVsZW0oZ3JvdXApIHtcbiAgaWYgKGdyb3VwLnR5cGUgPT09IFwib3JkZ3JvdXBcIikge1xuICAgIGlmIChncm91cC5ib2R5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGdldEJhc2VFbGVtKGdyb3VwLmJvZHlbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGdyb3VwLnR5cGUgPT09IFwiY29sb3JcIikge1xuICAgIGlmIChncm91cC5ib2R5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGdldEJhc2VFbGVtKGdyb3VwLmJvZHlbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGdyb3VwLnR5cGUgPT09IFwiZm9udFwiKSB7XG4gICAgcmV0dXJuIGdldEJhc2VFbGVtKGdyb3VwLmJvZHkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBncm91cDtcbiAgfVxufTtcbi8qKlxuICogVGVYYm9vayBhbGdvcml0aG1zIG9mdGVuIHJlZmVyZW5jZSBcImNoYXJhY3RlciBib3hlc1wiLCB3aGljaCBhcmUgc2ltcGx5IGdyb3Vwc1xuICogd2l0aCBhIHNpbmdsZSBjaGFyYWN0ZXIgaW4gdGhlbS4gVG8gZGVjaWRlIGlmIHNvbWV0aGluZyBpcyBhIGNoYXJhY3RlciBib3gsXG4gKiB3ZSBmaW5kIGl0cyBpbm5lcm1vc3QgZ3JvdXAsIGFuZCBzZWUgaWYgaXQgaXMgYSBzaW5nbGUgY2hhcmFjdGVyLlxuICovXG5cblxudmFyIHV0aWxzX2lzQ2hhcmFjdGVyQm94ID0gZnVuY3Rpb24gaXNDaGFyYWN0ZXJCb3goZ3JvdXApIHtcbiAgdmFyIGJhc2VFbGVtID0gZ2V0QmFzZUVsZW0oZ3JvdXApOyAvLyBUaGVzZSBhcmUgYWxsIHRoZXkgdHlwZXMgb2YgZ3JvdXBzIHdoaWNoIGhvbGQgc2luZ2xlIGNoYXJhY3RlcnNcblxuICByZXR1cm4gYmFzZUVsZW0udHlwZSA9PT0gXCJtYXRob3JkXCIgfHwgYmFzZUVsZW0udHlwZSA9PT0gXCJ0ZXh0b3JkXCIgfHwgYmFzZUVsZW0udHlwZSA9PT0gXCJhdG9tXCI7XG59O1xuXG52YXIgYXNzZXJ0ID0gZnVuY3Rpb24gYXNzZXJ0KHZhbHVlKSB7XG4gIGlmICghdmFsdWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIG5vbi1udWxsLCBidXQgZ290ICcgKyBTdHJpbmcodmFsdWUpKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG4vKipcbiAqIFJldHVybiB0aGUgcHJvdG9jb2wgb2YgYSBVUkwsIG9yIFwiX3JlbGF0aXZlXCIgaWYgdGhlIFVSTCBkb2VzIG5vdCBzcGVjaWZ5IGFcbiAqIHByb3RvY29sIChhbmQgdGh1cyBpcyByZWxhdGl2ZSkuXG4gKi9cblxudmFyIHByb3RvY29sRnJvbVVybCA9IGZ1bmN0aW9uIHByb3RvY29sRnJvbVVybCh1cmwpIHtcbiAgdmFyIHByb3RvY29sID0gL15cXHMqKFteXFxcXC8jXSo/KSg/Ojp8JiMwKjU4fCYjeDAqM2EpL2kuZXhlYyh1cmwpO1xuICByZXR1cm4gcHJvdG9jb2wgIT0gbnVsbCA/IHByb3RvY29sWzFdIDogXCJfcmVsYXRpdmVcIjtcbn07XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB1dGlscyA9ICh7XG4gIGNvbnRhaW5zOiBjb250YWlucyxcbiAgZGVmbHQ6IGRlZmx0LFxuICBlc2NhcGU6IHV0aWxzX2VzY2FwZSxcbiAgaHlwaGVuYXRlOiBoeXBoZW5hdGUsXG4gIGdldEJhc2VFbGVtOiBnZXRCYXNlRWxlbSxcbiAgaXNDaGFyYWN0ZXJCb3g6IHV0aWxzX2lzQ2hhcmFjdGVyQm94LFxuICBwcm90b2NvbEZyb21Vcmw6IHByb3RvY29sRnJvbVVybFxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9TZXR0aW5ncy5qc1xuLyogZXNsaW50IG5vLWNvbnNvbGU6MCAqL1xuXG4vKipcbiAqIFRoaXMgaXMgYSBtb2R1bGUgZm9yIHN0b3Jpbmcgc2V0dGluZ3MgcGFzc2VkIGludG8gS2FUZVguIEl0IGNvcnJlY3RseSBoYW5kbGVzXG4gKiBkZWZhdWx0IHNldHRpbmdzLlxuICovXG5cblxuXG5cbi8qKlxuICogVGhlIG1haW4gU2V0dGluZ3Mgb2JqZWN0XG4gKlxuICogVGhlIGN1cnJlbnQgb3B0aW9ucyBzdG9yZWQgYXJlOlxuICogIC0gZGlzcGxheU1vZGU6IFdoZXRoZXIgdGhlIGV4cHJlc3Npb24gc2hvdWxkIGJlIHR5cGVzZXQgYXMgaW5saW5lIG1hdGhcbiAqICAgICAgICAgICAgICAgICAoZmFsc2UsIHRoZSBkZWZhdWx0KSwgbWVhbmluZyB0aGF0IHRoZSBtYXRoIHN0YXJ0cyBpblxuICogICAgICAgICAgICAgICAgIFxcdGV4dHN0eWxlIGFuZCBpcyBwbGFjZWQgaW4gYW4gaW5saW5lLWJsb2NrKTsgb3IgYXMgZGlzcGxheVxuICogICAgICAgICAgICAgICAgIG1hdGggKHRydWUpLCBtZWFuaW5nIHRoYXQgdGhlIG1hdGggc3RhcnRzIGluIFxcZGlzcGxheXN0eWxlXG4gKiAgICAgICAgICAgICAgICAgYW5kIGlzIHBsYWNlZCBpbiBhIGJsb2NrIHdpdGggdmVydGljYWwgbWFyZ2luLlxuICovXG52YXIgU2V0dGluZ3NfU2V0dGluZ3MgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTZXR0aW5ncyhvcHRpb25zKSB7XG4gICAgdGhpcy5kaXNwbGF5TW9kZSA9IHZvaWQgMDtcbiAgICB0aGlzLm91dHB1dCA9IHZvaWQgMDtcbiAgICB0aGlzLmxlcW5vID0gdm9pZCAwO1xuICAgIHRoaXMuZmxlcW4gPSB2b2lkIDA7XG4gICAgdGhpcy50aHJvd09uRXJyb3IgPSB2b2lkIDA7XG4gICAgdGhpcy5lcnJvckNvbG9yID0gdm9pZCAwO1xuICAgIHRoaXMubWFjcm9zID0gdm9pZCAwO1xuICAgIHRoaXMubWluUnVsZVRoaWNrbmVzcyA9IHZvaWQgMDtcbiAgICB0aGlzLmNvbG9ySXNUZXh0Q29sb3IgPSB2b2lkIDA7XG4gICAgdGhpcy5zdHJpY3QgPSB2b2lkIDA7XG4gICAgdGhpcy50cnVzdCA9IHZvaWQgMDtcbiAgICB0aGlzLm1heFNpemUgPSB2b2lkIDA7XG4gICAgdGhpcy5tYXhFeHBhbmQgPSB2b2lkIDA7XG4gICAgLy8gYWxsb3cgbnVsbCBvcHRpb25zXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdGhpcy5kaXNwbGF5TW9kZSA9IHV0aWxzLmRlZmx0KG9wdGlvbnMuZGlzcGxheU1vZGUsIGZhbHNlKTtcbiAgICB0aGlzLm91dHB1dCA9IHV0aWxzLmRlZmx0KG9wdGlvbnMub3V0cHV0LCBcImh0bWxBbmRNYXRobWxcIik7XG4gICAgdGhpcy5sZXFubyA9IHV0aWxzLmRlZmx0KG9wdGlvbnMubGVxbm8sIGZhbHNlKTtcbiAgICB0aGlzLmZsZXFuID0gdXRpbHMuZGVmbHQob3B0aW9ucy5mbGVxbiwgZmFsc2UpO1xuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdXRpbHMuZGVmbHQob3B0aW9ucy50aHJvd09uRXJyb3IsIHRydWUpO1xuICAgIHRoaXMuZXJyb3JDb2xvciA9IHV0aWxzLmRlZmx0KG9wdGlvbnMuZXJyb3JDb2xvciwgXCIjY2MwMDAwXCIpO1xuICAgIHRoaXMubWFjcm9zID0gb3B0aW9ucy5tYWNyb3MgfHwge307XG4gICAgdGhpcy5taW5SdWxlVGhpY2tuZXNzID0gTWF0aC5tYXgoMCwgdXRpbHMuZGVmbHQob3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzLCAwKSk7XG4gICAgdGhpcy5jb2xvcklzVGV4dENvbG9yID0gdXRpbHMuZGVmbHQob3B0aW9ucy5jb2xvcklzVGV4dENvbG9yLCBmYWxzZSk7XG4gICAgdGhpcy5zdHJpY3QgPSB1dGlscy5kZWZsdChvcHRpb25zLnN0cmljdCwgXCJ3YXJuXCIpO1xuICAgIHRoaXMudHJ1c3QgPSB1dGlscy5kZWZsdChvcHRpb25zLnRydXN0LCBmYWxzZSk7XG4gICAgdGhpcy5tYXhTaXplID0gTWF0aC5tYXgoMCwgdXRpbHMuZGVmbHQob3B0aW9ucy5tYXhTaXplLCBJbmZpbml0eSkpO1xuICAgIHRoaXMubWF4RXhwYW5kID0gTWF0aC5tYXgoMCwgdXRpbHMuZGVmbHQob3B0aW9ucy5tYXhFeHBhbmQsIDEwMDApKTtcbiAgfVxuICAvKipcbiAgICogUmVwb3J0IG5vbnN0cmljdCAobm9uLUxhVGVYLWNvbXBhdGlibGUpIGlucHV0LlxuICAgKiBDYW4gc2FmZWx5IG5vdCBiZSBjYWxsZWQgaWYgYHRoaXMuc3RyaWN0YCBpcyBmYWxzZSBpbiBKYXZhU2NyaXB0LlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBTZXR0aW5ncy5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnJlcG9ydE5vbnN0cmljdCA9IGZ1bmN0aW9uIHJlcG9ydE5vbnN0cmljdChlcnJvckNvZGUsIGVycm9yTXNnLCB0b2tlbikge1xuICAgIHZhciBzdHJpY3QgPSB0aGlzLnN0cmljdDtcblxuICAgIGlmICh0eXBlb2Ygc3RyaWN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIC8vIEFsbG93IHJldHVybiB2YWx1ZSBvZiBzdHJpY3QgZnVuY3Rpb24gdG8gYmUgYm9vbGVhbiBvciBzdHJpbmdcbiAgICAgIC8vIChvciBudWxsL3VuZGVmaW5lZCwgbWVhbmluZyBubyBmdXJ0aGVyIHByb2Nlc3NpbmcpLlxuICAgICAgc3RyaWN0ID0gc3RyaWN0KGVycm9yQ29kZSwgZXJyb3JNc2csIHRva2VuKTtcbiAgICB9XG5cbiAgICBpZiAoIXN0cmljdCB8fCBzdHJpY3QgPT09IFwiaWdub3JlXCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKHN0cmljdCA9PT0gdHJ1ZSB8fCBzdHJpY3QgPT09IFwiZXJyb3JcIikge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiTGFUZVgtaW5jb21wYXRpYmxlIGlucHV0IGFuZCBzdHJpY3QgbW9kZSBpcyBzZXQgdG8gJ2Vycm9yJzogXCIgKyAoZXJyb3JNc2cgKyBcIiBbXCIgKyBlcnJvckNvZGUgKyBcIl1cIiksIHRva2VuKTtcbiAgICB9IGVsc2UgaWYgKHN0cmljdCA9PT0gXCJ3YXJuXCIpIHtcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvICd3YXJuJzogXCIgKyAoZXJyb3JNc2cgKyBcIiBbXCIgKyBlcnJvckNvZGUgKyBcIl1cIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB3b24ndCBoYXBwZW4gaW4gdHlwZS1zYWZlIGNvZGVcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvIFwiICsgKFwidW5yZWNvZ25pemVkICdcIiArIHN0cmljdCArIFwiJzogXCIgKyBlcnJvck1zZyArIFwiIFtcIiArIGVycm9yQ29kZSArIFwiXVwiKSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRvIGFwcGx5IHN0cmljdCAoTGFUZVgtYWRoZXJpbmcpIGJlaGF2aW9yIGZvciB1bnVzdWFsXG4gICAqIGlucHV0IChsaWtlIGBcXFxcYCkuICBVbmxpa2UgYG5vbnN0cmljdGAsIHdpbGwgbm90IHRocm93IGFuIGVycm9yO1xuICAgKiBpbnN0ZWFkLCBcImVycm9yXCIgdHJhbnNsYXRlcyB0byBhIHJldHVybiB2YWx1ZSBvZiBgdHJ1ZWAsIHdoaWxlIFwiaWdub3JlXCJcbiAgICogdHJhbnNsYXRlcyB0byBhIHJldHVybiB2YWx1ZSBvZiBgZmFsc2VgLiAgTWF5IHN0aWxsIHByaW50IGEgd2FybmluZzpcbiAgICogXCJ3YXJuXCIgcHJpbnRzIGEgd2FybmluZyBhbmQgcmV0dXJucyBgZmFsc2VgLlxuICAgKiBUaGlzIGlzIGZvciB0aGUgc2Vjb25kIGNhdGVnb3J5IG9mIGBlcnJvckNvZGVgcyBsaXN0ZWQgaW4gdGhlIFJFQURNRS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8udXNlU3RyaWN0QmVoYXZpb3IgPSBmdW5jdGlvbiB1c2VTdHJpY3RCZWhhdmlvcihlcnJvckNvZGUsIGVycm9yTXNnLCB0b2tlbikge1xuICAgIHZhciBzdHJpY3QgPSB0aGlzLnN0cmljdDtcblxuICAgIGlmICh0eXBlb2Ygc3RyaWN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIC8vIEFsbG93IHJldHVybiB2YWx1ZSBvZiBzdHJpY3QgZnVuY3Rpb24gdG8gYmUgYm9vbGVhbiBvciBzdHJpbmdcbiAgICAgIC8vIChvciBudWxsL3VuZGVmaW5lZCwgbWVhbmluZyBubyBmdXJ0aGVyIHByb2Nlc3NpbmcpLlxuICAgICAgLy8gQnV0IGNhdGNoIGFueSBleGNlcHRpb25zIHRocm93biBieSBmdW5jdGlvbiwgdHJlYXRpbmcgdGhlbVxuICAgICAgLy8gbGlrZSBcImVycm9yXCIuXG4gICAgICB0cnkge1xuICAgICAgICBzdHJpY3QgPSBzdHJpY3QoZXJyb3JDb2RlLCBlcnJvck1zZywgdG9rZW4pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc3RyaWN0ID0gXCJlcnJvclwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghc3RyaWN0IHx8IHN0cmljdCA9PT0gXCJpZ25vcmVcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoc3RyaWN0ID09PSB0cnVlIHx8IHN0cmljdCA9PT0gXCJlcnJvclwiKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHN0cmljdCA9PT0gXCJ3YXJuXCIpIHtcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvICd3YXJuJzogXCIgKyAoZXJyb3JNc2cgKyBcIiBbXCIgKyBlcnJvckNvZGUgKyBcIl1cIikpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB3b24ndCBoYXBwZW4gaW4gdHlwZS1zYWZlIGNvZGVcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvIFwiICsgKFwidW5yZWNvZ25pemVkICdcIiArIHN0cmljdCArIFwiJzogXCIgKyBlcnJvck1zZyArIFwiIFtcIiArIGVycm9yQ29kZSArIFwiXVwiKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRvIHRlc3QgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIGlucHV0LCBhbmQgcmV0dXJuXG4gICAqIGB0cnVlYCAodHJ1c3RlZCkgb3IgYGZhbHNlYCAodW50cnVzdGVkKS4gIFRoZSBzb2xlIGFyZ3VtZW50IGBjb250ZXh0YFxuICAgKiBzaG91bGQgYmUgYW4gb2JqZWN0IHdpdGggYGNvbW1hbmRgIGZpZWxkIHNwZWNpZnlpbmcgdGhlIHJlbGV2YW50IExhVGVYXG4gICAqIGNvbW1hbmQgKGFzIGEgc3RyaW5nIHN0YXJ0aW5nIHdpdGggYFxcYCksIGFuZCBhbnkgb3RoZXIgYXJndW1lbnRzLCBldGMuXG4gICAqIElmIGBjb250ZXh0YCBoYXMgYSBgdXJsYCBmaWVsZCwgYSBgcHJvdG9jb2xgIGZpZWxkIHdpbGwgYXV0b21hdGljYWxseVxuICAgKiBnZXQgYWRkZWQgYnkgdGhpcyBmdW5jdGlvbiAoY2hhbmdpbmcgdGhlIHNwZWNpZmllZCBvYmplY3QpLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5pc1RydXN0ZWQgPSBmdW5jdGlvbiBpc1RydXN0ZWQoY29udGV4dCkge1xuICAgIGlmIChjb250ZXh0LnVybCAmJiAhY29udGV4dC5wcm90b2NvbCkge1xuICAgICAgY29udGV4dC5wcm90b2NvbCA9IHV0aWxzLnByb3RvY29sRnJvbVVybChjb250ZXh0LnVybCk7XG4gICAgfVxuXG4gICAgdmFyIHRydXN0ID0gdHlwZW9mIHRoaXMudHJ1c3QgPT09IFwiZnVuY3Rpb25cIiA/IHRoaXMudHJ1c3QoY29udGV4dCkgOiB0aGlzLnRydXN0O1xuICAgIHJldHVybiBCb29sZWFuKHRydXN0KTtcbiAgfTtcblxuICByZXR1cm4gU2V0dGluZ3M7XG59KCk7XG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvU3R5bGUuanNcbi8qKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFuZCBjbGFzc2VzIGZvciB0aGUgdmFyaW91cyBraW5kcyBvZiBzdHlsZXNcbiAqIHVzZWQgaW4gVGVYLiBJdCBwcm92aWRlcyBhIGdlbmVyaWMgYFN0eWxlYCBjbGFzcywgd2hpY2ggaG9sZHMgaW5mb3JtYXRpb25cbiAqIGFib3V0IGEgc3BlY2lmaWMgc3R5bGUuIEl0IHRoZW4gcHJvdmlkZXMgaW5zdGFuY2VzIG9mIGFsbCB0aGUgZGlmZmVyZW50IGtpbmRzXG4gKiBvZiBzdHlsZXMgcG9zc2libGUsIGFuZCBwcm92aWRlcyBmdW5jdGlvbnMgdG8gbW92ZSBiZXR3ZWVuIHRoZW0gYW5kIGdldFxuICogaW5mb3JtYXRpb24gYWJvdXQgdGhlbS5cbiAqL1xuXG4vKipcbiAqIFRoZSBtYWluIHN0eWxlIGNsYXNzLiBDb250YWlucyBhIHVuaXF1ZSBpZCBmb3IgdGhlIHN0eWxlLCBhIHNpemUgKHdoaWNoIGlzXG4gKiB0aGUgc2FtZSBmb3IgY3JhbXBlZCBhbmQgdW5jcmFtcGVkIHZlcnNpb24gb2YgYSBzdHlsZSksIGFuZCBhIGNyYW1wZWQgZmxhZy5cbiAqL1xudmFyIFN0eWxlID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3R5bGUoaWQsIHNpemUsIGNyYW1wZWQpIHtcbiAgICB0aGlzLmlkID0gdm9pZCAwO1xuICAgIHRoaXMuc2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLmNyYW1wZWQgPSB2b2lkIDA7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG4gICAgdGhpcy5jcmFtcGVkID0gY3JhbXBlZDtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBzdHlsZSBvZiBhIHN1cGVyc2NyaXB0IGdpdmVuIGEgYmFzZSBpbiB0aGUgY3VycmVudCBzdHlsZS5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gU3R5bGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5zdXAgPSBmdW5jdGlvbiBzdXAoKSB7XG4gICAgcmV0dXJuIFN0eWxlX3N0eWxlc1tfc3VwW3RoaXMuaWRdXTtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBzdHlsZSBvZiBhIHN1YnNjcmlwdCBnaXZlbiBhIGJhc2UgaW4gdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnN1YiA9IGZ1bmN0aW9uIHN1YigpIHtcbiAgICByZXR1cm4gU3R5bGVfc3R5bGVzW19zdWJbdGhpcy5pZF1dO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0eWxlIG9mIGEgZnJhY3Rpb24gbnVtZXJhdG9yIGdpdmVuIHRoZSBmcmFjdGlvbiBpbiB0aGUgY3VycmVudFxuICAgKiBzdHlsZS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZnJhY051bSA9IGZ1bmN0aW9uIGZyYWNOdW0oKSB7XG4gICAgcmV0dXJuIFN0eWxlX3N0eWxlc1tfZnJhY051bVt0aGlzLmlkXV07XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgc3R5bGUgb2YgYSBmcmFjdGlvbiBkZW5vbWluYXRvciBnaXZlbiB0aGUgZnJhY3Rpb24gaW4gdGhlIGN1cnJlbnRcbiAgICogc3R5bGUuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmZyYWNEZW4gPSBmdW5jdGlvbiBmcmFjRGVuKCkge1xuICAgIHJldHVybiBTdHlsZV9zdHlsZXNbX2ZyYWNEZW5bdGhpcy5pZF1dO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGNyYW1wZWQgdmVyc2lvbiBvZiBhIHN0eWxlIChpbiBwYXJ0aWN1bGFyLCBjcmFtcGluZyBhIGNyYW1wZWQgc3R5bGVcbiAgICogZG9lc24ndCBjaGFuZ2UgdGhlIHN0eWxlKS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uY3JhbXAgPSBmdW5jdGlvbiBjcmFtcCgpIHtcbiAgICByZXR1cm4gU3R5bGVfc3R5bGVzW19jcmFtcFt0aGlzLmlkXV07XG4gIH1cbiAgLyoqXG4gICAqIEdldCBhIHRleHQgb3IgZGlzcGxheSB2ZXJzaW9uIG9mIHRoaXMgc3R5bGUuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnRleHQgPSBmdW5jdGlvbiB0ZXh0KCkge1xuICAgIHJldHVybiBTdHlsZV9zdHlsZXNbX3RleHRbdGhpcy5pZF1dO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGlzIHN0eWxlIGlzIHRpZ2h0bHkgc3BhY2VkIChzY3JpcHRzdHlsZS9zY3JpcHRzY3JpcHRzdHlsZSlcbiAgICovXG4gIDtcblxuICBfcHJvdG8uaXNUaWdodCA9IGZ1bmN0aW9uIGlzVGlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSA+PSAyO1xuICB9O1xuXG4gIHJldHVybiBTdHlsZTtcbn0oKTsgLy8gRXhwb3J0IGFuIGludGVyZmFjZSBmb3IgdHlwZSBjaGVja2luZywgYnV0IGRvbid0IGV4cG9zZSB0aGUgaW1wbGVtZW50YXRpb24uXG4vLyBUaGlzIHdheSwgbm8gbW9yZSBzdHlsZXMgY2FuIGJlIGdlbmVyYXRlZC5cblxuXG4vLyBJRHMgb2YgdGhlIGRpZmZlcmVudCBzdHlsZXNcbnZhciBEID0gMDtcbnZhciBEYyA9IDE7XG52YXIgVCA9IDI7XG52YXIgVGMgPSAzO1xudmFyIFMgPSA0O1xudmFyIFNjID0gNTtcbnZhciBTUyA9IDY7XG52YXIgU1NjID0gNzsgLy8gSW5zdGFuY2VzIG9mIHRoZSBkaWZmZXJlbnQgc3R5bGVzXG5cbnZhciBTdHlsZV9zdHlsZXMgPSBbbmV3IFN0eWxlKEQsIDAsIGZhbHNlKSwgbmV3IFN0eWxlKERjLCAwLCB0cnVlKSwgbmV3IFN0eWxlKFQsIDEsIGZhbHNlKSwgbmV3IFN0eWxlKFRjLCAxLCB0cnVlKSwgbmV3IFN0eWxlKFMsIDIsIGZhbHNlKSwgbmV3IFN0eWxlKFNjLCAyLCB0cnVlKSwgbmV3IFN0eWxlKFNTLCAzLCBmYWxzZSksIG5ldyBTdHlsZShTU2MsIDMsIHRydWUpXTsgLy8gTG9va3VwIHRhYmxlcyBmb3Igc3dpdGNoaW5nIGZyb20gb25lIHN0eWxlIHRvIGFub3RoZXJcblxudmFyIF9zdXAgPSBbUywgU2MsIFMsIFNjLCBTUywgU1NjLCBTUywgU1NjXTtcbnZhciBfc3ViID0gW1NjLCBTYywgU2MsIFNjLCBTU2MsIFNTYywgU1NjLCBTU2NdO1xudmFyIF9mcmFjTnVtID0gW1QsIFRjLCBTLCBTYywgU1MsIFNTYywgU1MsIFNTY107XG52YXIgX2ZyYWNEZW4gPSBbVGMsIFRjLCBTYywgU2MsIFNTYywgU1NjLCBTU2MsIFNTY107XG52YXIgX2NyYW1wID0gW0RjLCBEYywgVGMsIFRjLCBTYywgU2MsIFNTYywgU1NjXTtcbnZhciBfdGV4dCA9IFtELCBEYywgVCwgVGMsIFQsIFRjLCBULCBUY107IC8vIFdlIG9ubHkgZXhwb3J0IHNvbWUgb2YgdGhlIHN0eWxlcy5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX1N0eWxlID0gKHtcbiAgRElTUExBWTogU3R5bGVfc3R5bGVzW0RdLFxuICBURVhUOiBTdHlsZV9zdHlsZXNbVF0sXG4gIFNDUklQVDogU3R5bGVfc3R5bGVzW1NdLFxuICBTQ1JJUFRTQ1JJUFQ6IFN0eWxlX3N0eWxlc1tTU11cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdW5pY29kZVNjcmlwdHMuanNcbi8qXG4gKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgVW5pY29kZSBzY3JpcHRzIGFuZCBzY3JpcHQgZmFtaWxpZXMgdGhhdCB3ZVxuICogc3VwcG9ydC4gVG8gYWRkIG5ldyBzY3JpcHRzIG9yIGZhbWlsaWVzLCBqdXN0IGFkZCBhIG5ldyBlbnRyeSB0byB0aGVcbiAqIHNjcmlwdERhdGEgYXJyYXkgYmVsb3cuIEFkZGluZyBzY3JpcHRzIHRvIHRoZSBzY3JpcHREYXRhIGFycmF5IGFsbG93c1xuICogY2hhcmFjdGVycyBmcm9tIHRoYXQgc2NyaXB0IHRvIGFwcGVhciBpbiBcXHRleHR7fSBlbnZpcm9ubWVudHMuXG4gKi9cblxuLyoqXG4gKiBFYWNoIHNjcmlwdCBvciBzY3JpcHQgZmFtaWx5IGhhcyBhIG5hbWUgYW5kIGFuIGFycmF5IG9mIGJsb2Nrcy5cbiAqIEVhY2ggYmxvY2sgaXMgYW4gYXJyYXkgb2YgdHdvIG51bWJlcnMgd2hpY2ggc3BlY2lmeSB0aGUgc3RhcnQgYW5kXG4gKiBlbmQgcG9pbnRzIChpbmNsdXNpdmUpIG9mIGEgYmxvY2sgb2YgVW5pY29kZSBjb2RlcG9pbnRzLlxuICovXG5cbi8qKlxuICogVW5pY29kZSBibG9jayBkYXRhIGZvciB0aGUgZmFtaWxpZXMgb2Ygc2NyaXB0cyB3ZSBzdXBwb3J0IGluIFxcdGV4dHt9LlxuICogU2NyaXB0cyBvbmx5IG5lZWQgdG8gYXBwZWFyIGhlcmUgaWYgdGhleSBkbyBub3QgaGF2ZSBmb250IG1ldHJpY3MuXG4gKi9cbnZhciBzY3JpcHREYXRhID0gW3tcbiAgLy8gTGF0aW4gY2hhcmFjdGVycyBiZXlvbmQgdGhlIExhdGluLTEgY2hhcmFjdGVycyB3ZSBoYXZlIG1ldHJpY3MgZm9yLlxuICAvLyBOZWVkZWQgZm9yIEN6ZWNoLCBIdW5nYXJpYW4gYW5kIFR1cmtpc2ggdGV4dCwgZm9yIGV4YW1wbGUuXG4gIG5hbWU6ICdsYXRpbicsXG4gIGJsb2NrczogW1sweDAxMDAsIDB4MDI0Zl0sIC8vIExhdGluIEV4dGVuZGVkLUEgYW5kIExhdGluIEV4dGVuZGVkLUJcbiAgWzB4MDMwMCwgMHgwMzZmXV1cbn0sIHtcbiAgLy8gVGhlIEN5cmlsbGljIHNjcmlwdCB1c2VkIGJ5IFJ1c3NpYW4gYW5kIHJlbGF0ZWQgbGFuZ3VhZ2VzLlxuICAvLyBBIEN5cmlsbGljIHN1YnNldCB1c2VkIHRvIGJlIHN1cHBvcnRlZCBhcyBleHBsaWNpdGx5IGRlZmluZWRcbiAgLy8gc3ltYm9scyBpbiBzeW1ib2xzLmpzXG4gIG5hbWU6ICdjeXJpbGxpYycsXG4gIGJsb2NrczogW1sweDA0MDAsIDB4MDRmZl1dXG59LCB7XG4gIC8vIFRoZSBCcmFobWljIHNjcmlwdHMgb2YgU291dGggYW5kIFNvdXRoZWFzdCBBc2lhXG4gIC8vIERldmFuYWdhcmkgKDA5MDDigJMwOTdGKVxuICAvLyBCZW5nYWxpICgwOTgw4oCTMDlGRilcbiAgLy8gR3VybXVraGkgKDBBMDDigJMwQTdGKVxuICAvLyBHdWphcmF0aSAoMEE4MOKAkzBBRkYpXG4gIC8vIE9yaXlhICgwQjAw4oCTMEI3RilcbiAgLy8gVGFtaWwgKDBCODDigJMwQkZGKVxuICAvLyBUZWx1Z3UgKDBDMDDigJMwQzdGKVxuICAvLyBLYW5uYWRhICgwQzgw4oCTMENGRilcbiAgLy8gTWFsYXlhbGFtICgwRDAw4oCTMEQ3RilcbiAgLy8gU2luaGFsYSAoMEQ4MOKAkzBERkYpXG4gIC8vIFRoYWkgKDBFMDDigJMwRTdGKVxuICAvLyBMYW8gKDBFODDigJMwRUZGKVxuICAvLyBUaWJldGFuICgwRjAw4oCTMEZGRilcbiAgLy8gTXlhbm1hciAoMTAwMOKAkzEwOUYpXG4gIG5hbWU6ICdicmFobWljJyxcbiAgYmxvY2tzOiBbWzB4MDkwMCwgMHgxMDlGXV1cbn0sIHtcbiAgbmFtZTogJ2dlb3JnaWFuJyxcbiAgYmxvY2tzOiBbWzB4MTBBMCwgMHgxMGZmXV1cbn0sIHtcbiAgLy8gQ2hpbmVzZSBhbmQgSmFwYW5lc2UuXG4gIC8vIFRoZSBcImtcIiBpbiBjamsgaXMgZm9yIEtvcmVhbiwgYnV0IHdlJ3ZlIHNlcGFyYXRlZCBLb3JlYW4gb3V0XG4gIG5hbWU6IFwiY2prXCIsXG4gIGJsb2NrczogW1sweDMwMDAsIDB4MzBGRl0sIC8vIENKSyBzeW1ib2xzIGFuZCBwdW5jdHVhdGlvbiwgSGlyYWdhbmEsIEthdGFrYW5hXG4gIFsweDRFMDAsIDB4OUZBRl0sIC8vIENKSyBpZGVvZ3JhbXNcbiAgWzB4RkYwMCwgMHhGRjYwXV1cbn0sIHtcbiAgLy8gS29yZWFuXG4gIG5hbWU6ICdoYW5ndWwnLFxuICBibG9ja3M6IFtbMHhBQzAwLCAweEQ3QUZdXVxufV07XG4vKipcbiAqIEdpdmVuIGEgY29kZXBvaW50LCByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHNjcmlwdCBvciBzY3JpcHQgZmFtaWx5XG4gKiBpdCBpcyBmcm9tLCBvciBudWxsIGlmIGl0IGlzIG5vdCBwYXJ0IG9mIGEga25vd24gYmxvY2tcbiAqL1xuXG5mdW5jdGlvbiBzY3JpcHRGcm9tQ29kZXBvaW50KGNvZGVwb2ludCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNjcmlwdERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc2NyaXB0ID0gc2NyaXB0RGF0YVtpXTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBzY3JpcHQuYmxvY2tzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIGJsb2NrID0gc2NyaXB0LmJsb2Nrc1tfaV07XG5cbiAgICAgIGlmIChjb2RlcG9pbnQgPj0gYmxvY2tbMF0gJiYgY29kZXBvaW50IDw9IGJsb2NrWzFdKSB7XG4gICAgICAgIHJldHVybiBzY3JpcHQubmFtZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogQSBmbGF0dGVuZWQgdmVyc2lvbiBvZiBhbGwgdGhlIHN1cHBvcnRlZCBibG9ja3MgaW4gYSBzaW5nbGUgYXJyYXkuXG4gKiBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiB0byBtYWtlIHN1cHBvcnRlZENvZGVwb2ludCgpIGZhc3QuXG4gKi9cblxudmFyIGFsbEJsb2NrcyA9IFtdO1xuc2NyaXB0RGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChzKSB7XG4gIHJldHVybiBzLmJsb2Nrcy5mb3JFYWNoKGZ1bmN0aW9uIChiKSB7XG4gICAgcmV0dXJuIGFsbEJsb2Nrcy5wdXNoLmFwcGx5KGFsbEJsb2NrcywgYik7XG4gIH0pO1xufSk7XG4vKipcbiAqIEdpdmVuIGEgY29kZXBvaW50LCByZXR1cm4gdHJ1ZSBpZiBpdCBmYWxscyB3aXRoaW4gb25lIG9mIHRoZVxuICogc2NyaXB0cyBvciBzY3JpcHQgZmFtaWxpZXMgZGVmaW5lZCBhYm92ZSBhbmQgZmFsc2Ugb3RoZXJ3aXNlLlxuICpcbiAqIE1pY3JvIGJlbmNobWFya3Mgc2hvd3MgdGhhdCB0aGlzIGlzIGZhc3RlciB0aGFuXG4gKiAvW1xcdTMwMDAtXFx1MzBGRlxcdTRFMDAtXFx1OUZBRlxcdUZGMDAtXFx1RkY2MFxcdUFDMDAtXFx1RDdBRlxcdTA5MDAtXFx1MTA5Rl0vLnRlc3QoKVxuICogaW4gRmlyZWZveCwgQ2hyb21lIGFuZCBOb2RlLlxuICovXG5cbmZ1bmN0aW9uIHN1cHBvcnRlZENvZGVwb2ludChjb2RlcG9pbnQpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxCbG9ja3MubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBpZiAoY29kZXBvaW50ID49IGFsbEJsb2Nrc1tpXSAmJiBjb2RlcG9pbnQgPD0gYWxsQmxvY2tzW2kgKyAxXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvc3ZnR2VvbWV0cnkuanNcbi8qKlxuICogVGhpcyBmaWxlIHByb3ZpZGVzIHN1cHBvcnQgdG8gZG9tVHJlZS5qcyBhbmQgZGVsaW1pdGVyLmpzLlxuICogSXQncyBhIHN0b3JlaG91c2Ugb2YgcGF0aCBnZW9tZXRyeSBmb3IgU1ZHIGltYWdlcy5cbiAqL1xuLy8gSW4gYWxsIHBhdGhzIGJlbG93LCB0aGUgdmlld0JveC10by1lbSBzY2FsZSBpcyAxMDAwOjEuXG52YXIgaExpbmVQYWQgPSA4MDsgLy8gcGFkZGluZyBhYm92ZSBhIHNxcnQgdmluaWN1bHVtLiBQcmV2ZW50cyBpbWFnZSBjcm9wcGluZy5cbi8vIFRoZSB2aW5pY3VsdW0gb2YgYSBcXHNxcnQgY2FuIGJlIG1hZGUgdGhpY2tlciBieSBhIEthVGVYIHJlbmRlcmluZyBvcHRpb24uXG4vLyBUaGluayBvZiB2YXJpYWJsZSBleHRyYVZpbmljdWx1bSBhcyB0d28gZGV0b3VycyBpbiB0aGUgU1ZHIHBhdGguXG4vLyBUaGUgZGV0b3VyIGJlZ2lucyBhdCB0aGUgbG93ZXIgbGVmdCBvZiB0aGUgYXJlYSBsYWJlbGVkIGV4dHJhVmluaWN1bHVtIGJlbG93LlxuLy8gVGhlIGRldG91ciBwcm9jZWVkcyBvbmUgZXh0cmFWaW5pY3VsdW0gZGlzdGFuY2UgdXAgYW5kIHNsaWdodGx5IHRvIHRoZSByaWdodCxcbi8vIGRpc3BsYWNpbmcgdGhlIHJhZGl1c2VkIGNvcm5lciBiZXR3ZWVuIHN1cmQgYW5kIHZpbmljdWx1bS4gVGhlIHJhZGl1cyBpc1xuLy8gdHJhdmVyc2VkIGFzIHVzdWFsLCB0aGVuIHRoZSBkZXRvdXIgcmVzdW1lcy4gSXQgZ29lcyByaWdodCwgdG8gdGhlIGVuZCBvZlxuLy8gdGhlIHZlcnkgbG9uZyB2aW5pY3VsdW1uLCB0aGVuIGRvd24gb25lIGV4dHJhVmluaWN1bHVtIGRpc3RhbmNlLFxuLy8gYWZ0ZXIgd2hpY2ggaXQgcmVzdW1lcyByZWd1bGFyIHBhdGggZ2VvbWV0cnkgZm9yIHRoZSByYWRpY2FsLlxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmluaWN1bHVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvXG4gICAgICAgICAv4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4oaQZXh0cmFWaW5pY3VsdW1cbiAgICAgICAgLyDilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojihpAwLjA0ZW0gKDQwIHVuaXQpIHN0ZCB2aW5pY3VsdW0gdGhpY2tuZXNzXG4gICAgICAgLyAvXG4gICAgICAvIC9cbiAgICAgLyAvXFxcbiAgICAvIC8gc3VyZFxuKi9cblxudmFyIHNxcnRNYWluID0gZnVuY3Rpb24gc3FydE1haW4oZXh0cmFWaW5pY3VsdW0sIGhMaW5lUGFkKSB7XG4gIC8vIHNxcnRNYWluIHBhdGggZ2VvbWV0cnkgaXMgZnJvbSBnbHlwaCBVMjIxQSBpbiB0aGUgZm9udCBLYVRlWCBNYWluXG4gIHJldHVybiBcIk05NSxcIiArICg2MjIgKyBleHRyYVZpbmljdWx1bSArIGhMaW5lUGFkKSArIFwiXFxuYy0yLjcsMCwtNy4xNywtMi43LC0xMy41LC04Yy01LjgsLTUuMywtOS41LC0xMCwtOS41LC0xNFxcbmMwLC0yLDAuMywtMy4zLDEsLTRjMS4zLC0yLjcsMjMuODMsLTIwLjcsNjcuNSwtNTRcXG5jNDQuMiwtMzMuMyw2NS44LC01MC4zLDY2LjUsLTUxYzEuMywtMS4zLDMsLTIsNSwtMmM0LjcsMCw4LjcsMy4zLDEyLDEwXFxuczE3MywzNzgsMTczLDM3OGMwLjcsMCwzNS4zLC03MSwxMDQsLTIxM2M2OC43LC0xNDIsMTM3LjUsLTI4NSwyMDYuNSwtNDI5XFxuYzY5LC0xNDQsMTA0LjUsLTIxNy43LDEwNi41LC0yMjFcXG5sXCIgKyBleHRyYVZpbmljdWx1bSAvIDIuMDc1ICsgXCIgLVwiICsgZXh0cmFWaW5pY3VsdW0gKyBcIlxcbmM1LjMsLTkuMywxMiwtMTQsMjAsLTE0XFxuSDQwMDAwMHZcIiArICg0MCArIGV4dHJhVmluaWN1bHVtKSArIFwiSDg0NS4yNzI0XFxucy0yMjUuMjcyLDQ2NywtMjI1LjI3Miw0NjdzLTIzNSw0ODYsLTIzNSw0ODZjLTIuNyw0LjcsLTksNywtMTksN1xcbmMtNiwwLC0xMCwtMSwtMTIsLTNzLTE5NCwtNDIyLC0xOTQsLTQyMnMtNjUsNDcsLTY1LDQ3elxcbk1cIiArICg4MzQgKyBleHRyYVZpbmljdWx1bSkgKyBcIiBcIiArIGhMaW5lUGFkICsgXCJoNDAwMDAwdlwiICsgKDQwICsgZXh0cmFWaW5pY3VsdW0pICsgXCJoLTQwMDAwMHpcIjtcbn07XG5cbnZhciBzcXJ0U2l6ZTEgPSBmdW5jdGlvbiBzcXJ0U2l6ZTEoZXh0cmFWaW5pY3VsdW0sIGhMaW5lUGFkKSB7XG4gIC8vIHNpemUxIGlzIGZyb20gZ2x5cGggVTIyMUEgaW4gdGhlIGZvbnQgS2FUZVhfU2l6ZTEtUmVndWxhclxuICByZXR1cm4gXCJNMjYzLFwiICsgKDYwMSArIGV4dHJhVmluaWN1bHVtICsgaExpbmVQYWQpICsgXCJjMC43LDAsMTgsMzkuNyw1MiwxMTlcXG5jMzQsNzkuMyw2OC4xNjcsMTU4LjcsMTAyLjUsMjM4YzM0LjMsNzkuMyw1MS44LDExOS4zLDUyLjUsMTIwXFxuYzM0MCwtNzA0LjcsNTEwLjcsLTEwNjAuMyw1MTIsLTEwNjdcXG5sXCIgKyBleHRyYVZpbmljdWx1bSAvIDIuMDg0ICsgXCIgLVwiICsgZXh0cmFWaW5pY3VsdW0gKyBcIlxcbmM0LjcsLTcuMywxMSwtMTEsMTksLTExXFxuSDQwMDAwdlwiICsgKDQwICsgZXh0cmFWaW5pY3VsdW0pICsgXCJIMTAxMi4zXFxucy0yNzEuMyw1NjcsLTI3MS4zLDU2N2MtMzguNyw4MC43LC04NCwxNzUsLTEzNiwyODNjLTUyLDEwOCwtODkuMTY3LDE4NS4zLC0xMTEuNSwyMzJcXG5jLTIyLjMsNDYuNywtMzMuOCw3MC4zLC0zNC41LDcxYy00LjcsNC43LC0xMi4zLDcsLTIzLDdzLTEyLC0xLC0xMiwtMVxcbnMtMTA5LC0yNTMsLTEwOSwtMjUzYy03Mi43LC0xNjgsLTEwOS4zLC0yNTIsLTExMCwtMjUyYy0xMC43LDgsLTIyLDE2LjcsLTM0LDI2XFxuYy0yMiwxNy4zLC0zMy4zLDI2LC0zNCwyNnMtMjYsLTI2LC0yNiwtMjZzNzYsLTU5LDc2LC01OXM3NiwtNjAsNzYsLTYwelxcbk1cIiArICgxMDAxICsgZXh0cmFWaW5pY3VsdW0pICsgXCIgXCIgKyBoTGluZVBhZCArIFwiaDQwMDAwMHZcIiArICg0MCArIGV4dHJhVmluaWN1bHVtKSArIFwiaC00MDAwMDB6XCI7XG59O1xuXG52YXIgc3FydFNpemUyID0gZnVuY3Rpb24gc3FydFNpemUyKGV4dHJhVmluaWN1bHVtLCBoTGluZVBhZCkge1xuICAvLyBzaXplMiBpcyBmcm9tIGdseXBoIFUyMjFBIGluIHRoZSBmb250IEthVGVYX1NpemUyLVJlZ3VsYXJcbiAgcmV0dXJuIFwiTTk4MyBcIiArICgxMCArIGV4dHJhVmluaWN1bHVtICsgaExpbmVQYWQpICsgXCJcXG5sXCIgKyBleHRyYVZpbmljdWx1bSAvIDMuMTMgKyBcIiAtXCIgKyBleHRyYVZpbmljdWx1bSArIFwiXFxuYzQsLTYuNywxMCwtMTAsMTgsLTEwIEg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmljdWx1bSkgKyBcIlxcbkgxMDEzLjFzLTgzLjQsMjY4LC0yNjQuMSw4NDBjLTE4MC43LDU3MiwtMjc3LDg3Ni4zLC0yODksOTEzYy00LjcsNC43LC0xMi43LDcsLTI0LDdcXG5zLTEyLDAsLTEyLDBjLTEuMywtMy4zLC0zLjcsLTExLjcsLTcsLTI1Yy0zNS4zLC0xMjUuMywtMTA2LjcsLTM3My4zLC0yMTQsLTc0NFxcbmMtMTAsMTIsLTIxLDI1LC0zMywzOXMtMzIsMzksLTMyLDM5Yy02LC01LjMsLTE1LC0xNCwtMjcsLTI2czI1LC0zMCwyNSwtMzBcXG5jMjYuNywtMzIuNyw1MiwtNjMsNzYsLTkxczUyLC02MCw1MiwtNjBzMjA4LDcyMiwyMDgsNzIyXFxuYzU2LC0xNzUuMywxMjYuMywtMzk3LjMsMjExLC02NjZjODQuNywtMjY4LjcsMTUzLjgsLTQ4OC4yLDIwNy41LC02NTguNVxcbmM1My43LC0xNzAuMyw4NC41LC0yNjYuOCw5Mi41LC0yODkuNXpcXG5NXCIgKyAoMTAwMSArIGV4dHJhVmluaWN1bHVtKSArIFwiIFwiICsgaExpbmVQYWQgKyBcImg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmljdWx1bSkgKyBcImgtNDAwMDAwelwiO1xufTtcblxudmFyIHNxcnRTaXplMyA9IGZ1bmN0aW9uIHNxcnRTaXplMyhleHRyYVZpbmljdWx1bSwgaExpbmVQYWQpIHtcbiAgLy8gc2l6ZTMgaXMgZnJvbSBnbHlwaCBVMjIxQSBpbiB0aGUgZm9udCBLYVRlWF9TaXplMy1SZWd1bGFyXG4gIHJldHVybiBcIk00MjQsXCIgKyAoMjM5OCArIGV4dHJhVmluaWN1bHVtICsgaExpbmVQYWQpICsgXCJcXG5jLTEuMywtMC43LC0zOC41LC0xNzIsLTExMS41LC01MTRjLTczLC0zNDIsLTEwOS44LC01MTMuMywtMTEwLjUsLTUxNFxcbmMwLC0yLC0xMC43LDE0LjMsLTMyLDQ5Yy00LjcsNy4zLC05LjgsMTUuNywtMTUuNSwyNWMtNS43LDkuMywtOS44LDE2LC0xMi41LDIwXFxucy01LDcsLTUsN2MtNCwtMy4zLC04LjMsLTcuNywtMTMsLTEzcy0xMywtMTMsLTEzLC0xM3M3NiwtMTIyLDc2LC0xMjJzNzcsLTEyMSw3NywtMTIxXFxuczIwOSw5NjgsMjA5LDk2OGMwLC0yLDg0LjcsLTM2MS43LDI1NCwtMTA3OWMxNjkuMywtNzE3LjMsMjU0LjcsLTEwNzcuNywyNTYsLTEwODFcXG5sXCIgKyBleHRyYVZpbmljdWx1bSAvIDQuMjIzICsgXCIgLVwiICsgZXh0cmFWaW5pY3VsdW0gKyBcImM0LC02LjcsMTAsLTEwLDE4LC0xMCBINDAwMDAwXFxudlwiICsgKDQwICsgZXh0cmFWaW5pY3VsdW0pICsgXCJIMTAxNC42XFxucy04Ny4zLDM3OC43LC0yNzIuNiwxMTY2Yy0xODUuMyw3ODcuMywtMjc5LjMsMTE4Mi4zLC0yODIsMTE4NVxcbmMtMiw2LC0xMCw5LC0yNCw5XFxuYy04LDAsLTEyLC0wLjcsLTEyLC0yeiBNXCIgKyAoMTAwMSArIGV4dHJhVmluaWN1bHVtKSArIFwiIFwiICsgaExpbmVQYWQgKyBcIlxcbmg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmljdWx1bSkgKyBcImgtNDAwMDAwelwiO1xufTtcblxudmFyIHNxcnRTaXplNCA9IGZ1bmN0aW9uIHNxcnRTaXplNChleHRyYVZpbmljdWx1bSwgaExpbmVQYWQpIHtcbiAgLy8gc2l6ZTQgaXMgZnJvbSBnbHlwaCBVMjIxQSBpbiB0aGUgZm9udCBLYVRlWF9TaXplNC1SZWd1bGFyXG4gIHJldHVybiBcIk00NzMsXCIgKyAoMjcxMyArIGV4dHJhVmluaWN1bHVtICsgaExpbmVQYWQpICsgXCJcXG5jMzM5LjMsLTE3OTkuMyw1MDkuMywtMjcwMCw1MTAsLTI3MDIgbFwiICsgZXh0cmFWaW5pY3VsdW0gLyA1LjI5OCArIFwiIC1cIiArIGV4dHJhVmluaWN1bHVtICsgXCJcXG5jMy4zLC03LjMsOS4zLC0xMSwxOCwtMTEgSDQwMDAwMHZcIiArICg0MCArIGV4dHJhVmluaWN1bHVtKSArIFwiSDEwMTcuN1xcbnMtOTAuNSw0NzgsLTI3Ni4yLDE0NjZjLTE4NS43LDk4OCwtMjc5LjUsMTQ4MywtMjgxLjUsMTQ4NWMtMiw2LC0xMCw5LC0yNCw5XFxuYy04LDAsLTEyLC0wLjcsLTEyLC0yYzAsLTEuMywtNS4zLC0zMiwtMTYsLTkyYy01MC43LC0yOTMuMywtMTE5LjcsLTY5My4zLC0yMDcsLTEyMDBcXG5jMCwtMS4zLC01LjMsOC43LC0xNiwzMGMtMTAuNywyMS4zLC0yMS4zLDQyLjcsLTMyLDY0cy0xNiwzMywtMTYsMzNzLTI2LC0yNiwtMjYsLTI2XFxuczc2LC0xNTMsNzYsLTE1M3M3NywtMTUxLDc3LC0xNTFjMC43LDAuNywzNS43LDIwMiwxMDUsNjA0YzY3LjMsNDAwLjcsMTAyLDYwMi43LDEwNCxcXG42MDZ6TVwiICsgKDEwMDEgKyBleHRyYVZpbmljdWx1bSkgKyBcIiBcIiArIGhMaW5lUGFkICsgXCJoNDAwMDAwdlwiICsgKDQwICsgZXh0cmFWaW5pY3VsdW0pICsgXCJIMTAxNy43elwiO1xufTtcblxudmFyIHNxcnRUYWxsID0gZnVuY3Rpb24gc3FydFRhbGwoZXh0cmFWaW5pY3VsdW0sIGhMaW5lUGFkLCB2aWV3Qm94SGVpZ2h0KSB7XG4gIC8vIHNxcnRUYWxsIGlzIGZyb20gZ2x5cGggVTIzQjcgaW4gdGhlIGZvbnQgS2FUZVhfU2l6ZTQtUmVndWxhclxuICAvLyBPbmUgcGF0aCBlZGdlIGhhcyBhIHZhcmlhYmxlIGxlbmd0aC4gSXQgcnVucyB2ZXJ0aWNhbGx5IGZyb20gdGhlIHZpbmljdWx1bW5cbiAgLy8gdG8gYSBwb2ludCBuZWFyICgxNCB1bml0cykgdGhlIGJvdHRvbSBvZiB0aGUgc3VyZC4gVGhlIHZpbmljdWx1bVxuICAvLyBpcyBub3JtYWxseSA0MCB1bml0cyB0aGljay4gU28gdGhlIGxlbmd0aCBvZiB0aGUgbGluZSBpbiBxdWVzdGlvbiBpczpcbiAgdmFyIHZlcnRTZWdtZW50ID0gdmlld0JveEhlaWdodCAtIDU0IC0gaExpbmVQYWQgLSBleHRyYVZpbmljdWx1bTtcbiAgcmV0dXJuIFwiTTcwMiBcIiArIChleHRyYVZpbmljdWx1bSArIGhMaW5lUGFkKSArIFwiSDQwMDAwMFwiICsgKDQwICsgZXh0cmFWaW5pY3VsdW0pICsgXCJcXG5INzQydlwiICsgdmVydFNlZ21lbnQgKyBcImwtNCA0LTQgNGMtLjY2Ny43IC0yIDEuNS00IDIuNXMtNC4xNjcgMS44MzMtNi41IDIuNS01LjUgMS05LjUgMVxcbmgtMTJsLTI4LTg0Yy0xNi42NjctNTItOTYuNjY3IC0yOTQuMzMzLTI0MC03MjdsLTIxMiAtNjQzIC04NSAxNzBcXG5jLTQtMy4zMzMtOC4zMzMtNy42NjctMTMgLTEzbC0xMy0xM2w3Ny0xNTUgNzctMTU2YzY2IDE5OS4zMzMgMTM5IDQxOS42NjdcXG4yMTkgNjYxIGwyMTggNjYxek03MDIgXCIgKyBoTGluZVBhZCArIFwiSDQwMDAwMHZcIiArICg0MCArIGV4dHJhVmluaWN1bHVtKSArIFwiSDc0MnpcIjtcbn07XG5cbnZhciBzcXJ0UGF0aCA9IGZ1bmN0aW9uIHNxcnRQYXRoKHNpemUsIGV4dHJhVmluaWN1bHVtLCB2aWV3Qm94SGVpZ2h0KSB7XG4gIGV4dHJhVmluaWN1bHVtID0gMTAwMCAqIGV4dHJhVmluaWN1bHVtOyAvLyBDb252ZXJ0IGZyb20gZG9jdW1lbnQgZW1zIHRvIHZpZXdCb3guXG5cbiAgdmFyIHBhdGggPSBcIlwiO1xuXG4gIHN3aXRjaCAoc2l6ZSkge1xuICAgIGNhc2UgXCJzcXJ0TWFpblwiOlxuICAgICAgcGF0aCA9IHNxcnRNYWluKGV4dHJhVmluaWN1bHVtLCBoTGluZVBhZCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJzcXJ0U2l6ZTFcIjpcbiAgICAgIHBhdGggPSBzcXJ0U2l6ZTEoZXh0cmFWaW5pY3VsdW0sIGhMaW5lUGFkKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInNxcnRTaXplMlwiOlxuICAgICAgcGF0aCA9IHNxcnRTaXplMihleHRyYVZpbmljdWx1bSwgaExpbmVQYWQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwic3FydFNpemUzXCI6XG4gICAgICBwYXRoID0gc3FydFNpemUzKGV4dHJhVmluaWN1bHVtLCBoTGluZVBhZCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJzcXJ0U2l6ZTRcIjpcbiAgICAgIHBhdGggPSBzcXJ0U2l6ZTQoZXh0cmFWaW5pY3VsdW0sIGhMaW5lUGFkKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInNxcnRUYWxsXCI6XG4gICAgICBwYXRoID0gc3FydFRhbGwoZXh0cmFWaW5pY3VsdW0sIGhMaW5lUGFkLCB2aWV3Qm94SGVpZ2h0KTtcbiAgfVxuXG4gIHJldHVybiBwYXRoO1xufTtcbnZhciBzdmdHZW9tZXRyeV9wYXRoID0ge1xuICAvLyBUaGUgZG91YmxlbGVmdGFycm93IGdlb21ldHJ5IGlzIGZyb20gZ2x5cGggVSsyMUQwIGluIHRoZSBmb250IEthVGVYIE1haW5cbiAgZG91YmxlbGVmdGFycm93OiBcIk0yNjIgMTU3XFxubDEwLTEwYzM0LTM2IDYyLjctNzcgODYtMTIzIDMuMy04IDUtMTMuMyA1LTE2IDAtNS4zLTYuNy04LTIwLTgtNy4zXFxuIDAtMTIuMi41LTE0LjUgMS41LTIuMyAxLTQuOCA0LjUtNy41IDEwLjUtNDkuMyA5Ny4zLTEyMS43IDE2OS4zLTIxNyAyMTYtMjhcXG4gMTQtNTcuMyAyNS04OCAzMy02LjcgMi0xMSAzLjgtMTMgNS41LTIgMS43LTMgNC4yLTMgNy41czEgNS44IDMgNy41XFxuYzIgMS43IDYuMyAzLjUgMTMgNS41IDY4IDE3LjMgMTI4LjIgNDcuOCAxODAuNSA5MS41IDUyLjMgNDMuNyA5My44IDk2LjIgMTI0LjVcXG4gMTU3LjUgOS4zIDggMTUuMyAxMi4zIDE4IDEzaDZjMTItLjcgMTgtNCAxOC0xMCAwLTItMS43LTctNS0xNS0yMy4zLTQ2LTUyLTg3XFxuLTg2LTEyM2wtMTAtMTBoMzk5NzM4di00MEgyMThjMzI4IDAgMCAwIDAgMGwtMTAtOGMtMjYuNy0yMC02NS43LTQzLTExNy02OSAyLjdcXG4tMiA2LTMuNyAxMC01IDM2LjctMTYgNzIuMy0zNy4zIDEwNy02NGwxMC04aDM5OTc4MnYtNDB6XFxubTggMHY0MGgzOTk3MzB2LTQwem0wIDE5NHY0MGgzOTk3MzB2LTQwelwiLFxuICAvLyBkb3VibGVyaWdodGFycm93IGlzIGZyb20gZ2x5cGggVSsyMUQyIGluIGZvbnQgS2FUZVggTWFpblxuICBkb3VibGVyaWdodGFycm93OiBcIk0zOTk3MzggMzkybFxcbi0xMCAxMGMtMzQgMzYtNjIuNyA3Ny04NiAxMjMtMy4zIDgtNSAxMy4zLTUgMTYgMCA1LjMgNi43IDggMjAgOCA3LjMgMCAxMi4yLS41XFxuIDE0LjUtMS41IDIuMy0xIDQuOC00LjUgNy41LTEwLjUgNDkuMy05Ny4zIDEyMS43LTE2OS4zIDIxNy0yMTYgMjgtMTQgNTcuMy0yNSA4OFxcbi0zMyA2LjctMiAxMS0zLjggMTMtNS41IDItMS43IDMtNC4yIDMtNy41cy0xLTUuOC0zLTcuNWMtMi0xLjctNi4zLTMuNS0xMy01LjUtNjhcXG4tMTcuMy0xMjguMi00Ny44LTE4MC41LTkxLjUtNTIuMy00My43LTkzLjgtOTYuMi0xMjQuNS0xNTcuNS05LjMtOC0xNS4zLTEyLjMtMThcXG4tMTNoLTZjLTEyIC43LTE4IDQtMTggMTAgMCAyIDEuNyA3IDUgMTUgMjMuMyA0NiA1MiA4NyA4NiAxMjNsMTAgMTBIMHY0MGgzOTk3ODJcXG5jLTMyOCAwIDAgMCAwIDBsMTAgOGMyNi43IDIwIDY1LjcgNDMgMTE3IDY5LTIuNyAyLTYgMy43LTEwIDUtMzYuNyAxNi03Mi4zIDM3LjNcXG4tMTA3IDY0bC0xMCA4SDB2NDB6TTAgMTU3djQwaDM5OTczMHYtNDB6bTAgMTk0djQwaDM5OTczMHYtNDB6XCIsXG4gIC8vIGxlZnRhcnJvdyBpcyBmcm9tIGdseXBoIFUrMjE5MCBpbiBmb250IEthVGVYIE1haW5cbiAgbGVmdGFycm93OiBcIk00MDAwMDAgMjQxSDExMGwzLTNjNjguNy01Mi43IDExMy43LTEyMFxcbiAxMzUtMjAyIDQtMTQuNyA2LTIzIDYtMjUgMC03LjMtNy0xMS0yMS0xMS04IDAtMTMuMi44LTE1LjUgMi41LTIuMyAxLjctNC4yIDUuOFxcbi01LjUgMTIuNS0xLjMgNC43LTIuNyAxMC4zLTQgMTctMTIgNDguNy0zNC44IDkyLTY4LjUgMTMwUzY1LjMgMjI4LjMgMTggMjQ3XFxuYy0xMCA0LTE2IDcuNy0xOCAxMSAwIDguNyA2IDE0LjMgMTggMTcgNDcuMyAxOC43IDg3LjggNDcgMTIxLjUgODVTMTk2IDQ0MS4zIDIwOFxcbiA0OTBjLjcgMiAxLjMgNSAyIDlzMS4yIDYuNyAxLjUgOGMuMyAxLjMgMSAzLjMgMiA2czIuMiA0LjUgMy41IDUuNWMxLjMgMSAzLjNcXG4gMS44IDYgMi41czYgMSAxMCAxYzE0IDAgMjEtMy43IDIxLTExIDAtMi0yLTEwLjMtNi0yNS0yMC03OS4zLTY1LTE0Ni43LTEzNS0yMDJcXG4gbC0zLTNoMzk5ODkwek0xMDAgMjQxdjQwaDM5OTkwMHYtNDB6XCIsXG4gIC8vIG92ZXJicmFjZSBpcyBmcm9tIGdseXBocyBVKzIzQTkvMjNBOC8yM0E3IGluIGZvbnQgS2FUZVhfU2l6ZTQtUmVndWxhclxuICBsZWZ0YnJhY2U6IFwiTTYgNTQ4bC02LTZ2LTM1bDYtMTFjNTYtMTA0IDEzNS4zLTE4MS4zIDIzOC0yMzIgNTcuMy0yOC43IDExN1xcbi00NSAxNzktNTBoMzk5NTc3djEyMEg0MDNjLTQzLjMgNy04MSAxNS0xMTMgMjYtMTAwLjcgMzMtMTc5LjcgOTEtMjM3IDE3NC0yLjdcXG4gNS02IDktMTAgMTMtLjcgMS03LjMgMS0yMCAxSDZ6XCIsXG4gIGxlZnRicmFjZXVuZGVyOiBcIk0wIDZsNi02aDE3YzEyLjY4OCAwIDE5LjMxMy4zIDIwIDEgNCA0IDcuMzEzIDguMyAxMCAxM1xcbiAzNS4zMTMgNTEuMyA4MC44MTMgOTMuOCAxMzYuNSAxMjcuNSA1NS42ODggMzMuNyAxMTcuMTg4IDU1LjggMTg0LjUgNjYuNS42ODhcXG4gMCAyIC4zIDQgMSAxOC42ODggMi43IDc2IDQuMyAxNzIgNWgzOTk0NTB2MTIwSDQyOWwtNi0xYy0xMjQuNjg4LTgtMjM1LTYxLjdcXG4tMzMxLTE2MUM2MC42ODcgMTM4LjcgMzIuMzEyIDk5LjMgNyA1NEwwIDQxVjZ6XCIsXG4gIC8vIG92ZXJncm91cCBpcyBmcm9tIHRoZSBNblN5bWJvbCBwYWNrYWdlIChwdWJsaWMgZG9tYWluKVxuICBsZWZ0Z3JvdXA6IFwiTTQwMDAwMCA4MFxcbkg0MzVDNjQgODAgMTY4LjMgMjI5LjQgMjEgMjYwYy01LjkgMS4yLTE4IDAtMTggMC0yIDAtMy0xLTMtM3YtMzhDNzYgNjEgMjU3IDBcXG4gNDM1IDBoMzk5NTY1elwiLFxuICBsZWZ0Z3JvdXB1bmRlcjogXCJNNDAwMDAwIDI2Mlxcbkg0MzVDNjQgMjYyIDE2OC4zIDExMi42IDIxIDgyYy01LjktMS4yLTE4IDAtMTggMC0yIDAtMyAxLTMgM3YzOGM3NiAxNTggMjU3IDIxOVxcbiA0MzUgMjE5aDM5OTU2NXpcIixcbiAgLy8gSGFycG9vbnMgYXJlIGZyb20gZ2x5cGggVSsyMUJEIGluIGZvbnQgS2FUZVggTWFpblxuICBsZWZ0aGFycG9vbjogXCJNMCAyNjdjLjcgNS4zIDMgMTAgNyAxNGgzOTk5OTN2LTQwSDkzYzMuM1xcbi0zLjMgMTAuMi05LjUgMjAuNS0xOC41czE3LjgtMTUuOCAyMi41LTIwLjVjNTAuNy01MiA4OC0xMTAuMyAxMTItMTc1IDQtMTEuMyA1XFxuLTE4LjMgMy0yMS0xLjMtNC03LjMtNi0xOC02LTggMC0xMyAuNy0xNSAycy00LjcgNi43LTggMTZjLTQyIDk4LjctMTA3LjMgMTc0LjdcXG4tMTk2IDIyOC02LjcgNC43LTEwLjcgOC0xMiAxMC0xLjMgMi0yIDUuNy0yIDExem0xMDAtMjZ2NDBoMzk5OTAwdi00MHpcIixcbiAgbGVmdGhhcnBvb25wbHVzOiBcIk0wIDI2N2MuNyA1LjMgMyAxMCA3IDE0aDM5OTk5M3YtNDBIOTNjMy4zLTMuMyAxMC4yLTkuNVxcbiAyMC41LTE4LjVzMTcuOC0xNS44IDIyLjUtMjAuNWM1MC43LTUyIDg4LTExMC4zIDExMi0xNzUgNC0xMS4zIDUtMTguMyAzLTIxLTEuM1xcbi00LTcuMy02LTE4LTYtOCAwLTEzIC43LTE1IDJzLTQuNyA2LjctOCAxNmMtNDIgOTguNy0xMDcuMyAxNzQuNy0xOTYgMjI4LTYuNyA0LjdcXG4tMTAuNyA4LTEyIDEwLTEuMyAyLTIgNS43LTIgMTF6bTEwMC0yNnY0MGgzOTk5MDB2LTQwek0wIDQzNXY0MGg0MDAwMDB2LTQwelxcbm0wIDB2NDBoNDAwMDAwdi00MHpcIixcbiAgbGVmdGhhcnBvb25kb3duOiBcIk03IDI0MWMtNCA0LTYuMzMzIDguNjY3LTcgMTQgMCA1LjMzMy42NjcgOSAyIDExczUuMzMzXFxuIDUuMzMzIDEyIDEwYzkwLjY2NyA1NCAxNTYgMTMwIDE5NiAyMjggMy4zMzMgMTAuNjY3IDYuMzMzIDE2LjMzMyA5IDE3IDIgLjY2NyA1XFxuIDEgOSAxaDVjMTAuNjY3IDAgMTYuNjY3LTIgMTgtNiAyLTIuNjY3IDEtOS42NjctMy0yMS0zMi04Ny4zMzMtODIuNjY3LTE1Ny42NjdcXG4tMTUyLTIxMWwtMy0zaDM5OTkwN3YtNDB6TTkzIDI4MSBINDAwMDAwIHYtNDBMNyAyNDF6XCIsXG4gIGxlZnRoYXJwb29uZG93bnBsdXM6IFwiTTcgNDM1Yy00IDQtNi4zIDguNy03IDE0IDAgNS4zLjcgOSAyIDExczUuMyA1LjMgMTJcXG4gMTBjOTAuNyA1NCAxNTYgMTMwIDE5NiAyMjggMy4zIDEwLjcgNi4zIDE2LjMgOSAxNyAyIC43IDUgMSA5IDFoNWMxMC43IDAgMTYuN1xcbi0yIDE4LTYgMi0yLjcgMS05LjctMy0yMS0zMi04Ny4zLTgyLjctMTU3LjctMTUyLTIxMWwtMy0zaDM5OTkwN3YtNDBIN3ptOTMgMFxcbnY0MGgzOTk5MDB2LTQwek0wIDI0MXY0MGgzOTk5MDB2LTQwem0wIDB2NDBoMzk5OTAwdi00MHpcIixcbiAgLy8gaG9vayBpcyBmcm9tIGdseXBoIFUrMjFBOSBpbiBmb250IEthVGVYIE1haW5cbiAgbGVmdGhvb2s6IFwiTTQwMDAwMCAyODEgSDEwM3MtMzMtMTEuMi02MS0zMy41UzAgMTk3LjMgMCAxNjRzMTQuMi02MS4yIDQyLjVcXG4tODMuNUM3MC44IDU4LjIgMTA0IDQ3IDE0MiA0NyBjMTYuNyAwIDI1IDYuNyAyNSAyMCAwIDEyLTguNyAxOC43LTI2IDIwLTQwIDMuM1xcbi02OC43IDE1LjctODYgMzctMTAgMTItMTUgMjUuMy0xNSA0MCAwIDIyLjcgOS44IDQwLjcgMjkuNSA1NCAxOS43IDEzLjMgNDMuNSAyMVxcbiA3MS41IDIzaDM5OTg1OXpNMTAzIDI4MXYtNDBoMzk5ODk3djQwelwiLFxuICBsZWZ0bGluZXNlZ21lbnQ6IFwiTTQwIDI4MSBWNDI4IEgwIFY5NCBINDAgVjI0MSBINDAwMDAwIHY0MHpcXG5NNDAgMjgxIFY0MjggSDAgVjk0IEg0MCBWMjQxIEg0MDAwMDAgdjQwelwiLFxuICBsZWZ0bWFwc3RvOiBcIk00MCAyODEgVjQ0OEgwVjc0SDQwVjI0MUg0MDAwMDB2NDB6XFxuTTQwIDI4MSBWNDQ4SDBWNzRINDBWMjQxSDQwMDAwMHY0MHpcIixcbiAgLy8gdG9mcm9tIGlzIGZyb20gZ2x5cGggVSsyMUM0IGluIGZvbnQgS2FUZVggQU1TIFJlZ3VsYXJcbiAgbGVmdFRvRnJvbTogXCJNMCAxNDdoNDAwMDAwdjQwSDB6bTAgMjE0YzY4IDQwIDExNS43IDk1LjcgMTQzIDE2N2gyMmMxNS4zIDAgMjNcXG4tLjMgMjMtMSAwLTEuMy01LjMtMTMuNy0xNi0zNy0xOC0zNS4zLTQxLjMtNjktNzAtMTAxbC03LThoMzk5OTA1di00MEg5NWw3LThcXG5jMjguNy0zMiA1Mi02NS43IDcwLTEwMSAxMC43LTIzLjMgMTYtMzUuNyAxNi0zNyAwLS43LTcuNy0xLTIzLTFoLTIyQzExNS43IDI2NS4zXFxuIDY4IDMyMSAwIDM2MXptMC0xNzR2LTQwaDM5OTkwMHY0MHptMTAwIDE1NHY0MGgzOTk5MDB2LTQwelwiLFxuICBsb25nZXF1YWw6IFwiTTAgNTAgaDQwMDAwMCB2NDBIMHogbTAgMTk0aDQwMDAwdjQwSDB6XFxuTTAgNTAgaDQwMDAwMCB2NDBIMHogbTAgMTk0aDQwMDAwdjQwSDB6XCIsXG4gIG1pZGJyYWNlOiBcIk0yMDA0MjggMzM0XFxuYy0xMDAuNy04LjMtMTk1LjMtNDQtMjgwLTEwOC01NS4zLTQyLTEwMS43LTkzLTEzOS0xNTNsLTktMTRjLTIuNyA0LTUuNyA4LjctOSAxNFxcbi01My4zIDg2LjctMTIzLjcgMTUzLTIxMSAxOTktNjYuNyAzNi0xMzcuMyA1Ni4zLTIxMiA2MkgwVjIxNGgxOTk1NjhjMTc4LjMtMTEuN1xcbiAzMTEuNy03OC4zIDQwMy0yMDEgNi04IDkuNy0xMiAxMS0xMiAuNy0uNyA2LjctMSAxOC0xczE3LjMuMyAxOCAxYzEuMyAwIDUgNCAxMVxcbiAxMiA0NC43IDU5LjMgMTAxLjMgMTA2LjMgMTcwIDE0MXMxNDUuMyA1NC4zIDIyOSA2MGgxOTk1NzJ2MTIwelwiLFxuICBtaWRicmFjZXVuZGVyOiBcIk0xOTk1NzIgMjE0XFxuYzEwMC43IDguMyAxOTUuMyA0NCAyODAgMTA4IDU1LjMgNDIgMTAxLjcgOTMgMTM5IDE1M2w5IDE0YzIuNy00IDUuNy04LjcgOS0xNFxcbiA1My4zLTg2LjcgMTIzLjctMTUzIDIxMS0xOTkgNjYuNy0zNiAxMzcuMy01Ni4zIDIxMi02MmgxOTk1Njh2MTIwSDIwMDQzMmMtMTc4LjNcXG4gMTEuNy0zMTEuNyA3OC4zLTQwMyAyMDEtNiA4LTkuNyAxMi0xMSAxMi0uNy43LTYuNyAxLTE4IDFzLTE3LjMtLjMtMTgtMWMtMS4zIDBcXG4tNS00LTExLTEyLTQ0LjctNTkuMy0xMDEuMy0xMDYuMy0xNzAtMTQxcy0xNDUuMy01NC4zLTIyOS02MEgwVjIxNHpcIixcbiAgb2lpbnRTaXplMTogXCJNNTEyLjYgNzEuNmMyNzIuNiAwIDMyMC4zIDEwNi44IDMyMC4zIDE3OC4yIDAgNzAuOC00Ny43IDE3Ny42XFxuLTMyMC4zIDE3Ny42UzE5My4xIDMyMC42IDE5My4xIDI0OS44YzAtNzEuNCA0Ni45LTE3OC4yIDMxOS41LTE3OC4yelxcbm0zNjguMSAxNzguMmMwLTg2LjQtNjAuOS0yMTUuNC0zNjguMS0yMTUuNC0zMDYuNCAwLTM2Ny4zIDEyOS0zNjcuMyAyMTUuNCAwIDg1LjhcXG42MC45IDIxNC44IDM2Ny4zIDIxNC44IDMwNy4yIDAgMzY4LjEtMTI5IDM2OC4xLTIxNC44elwiLFxuICBvaWludFNpemUyOiBcIk03NTcuOCAxMDAuMWMzODQuNyAwIDQ1MS4xIDEzNy42IDQ1MS4xIDIzMCAwIDkxLjMtNjYuNCAyMjguOFxcbi00NTEuMSAyMjguOC0zODYuMyAwLTQ1Mi43LTEzNy41LTQ1Mi43LTIyOC44IDAtOTIuNCA2Ni40LTIzMCA0NTIuNy0yMzB6XFxubTUwMi40IDIzMGMwLTExMS4yLTgyLjQtMjc3LjItNTAyLjQtMjc3LjJzLTUwNCAxNjYtNTA0IDI3Ny4yXFxuYzAgMTEwIDg0IDI3NiA1MDQgMjc2czUwMi40LTE2NiA1MDIuNC0yNzZ6XCIsXG4gIG9paWludFNpemUxOiBcIk02ODEuNCA3MS42YzQwOC45IDAgNDgwLjUgMTA2LjggNDgwLjUgMTc4LjIgMCA3MC44LTcxLjYgMTc3LjZcXG4tNDgwLjUgMTc3LjZTMjAyLjEgMzIwLjYgMjAyLjEgMjQ5LjhjMC03MS40IDcwLjUtMTc4LjIgNDc5LjMtMTc4LjJ6XFxubTUyNS44IDE3OC4yYzAtODYuNC04Ni44LTIxNS40LTUyNS43LTIxNS40LTQzNy45IDAtNTI0LjcgMTI5LTUyNC43IDIxNS40IDBcXG44NS44IDg2LjggMjE0LjggNTI0LjcgMjE0LjggNDM4LjkgMCA1MjUuNy0xMjkgNTI1LjctMjE0Ljh6XCIsXG4gIG9paWludFNpemUyOiBcIk0xMDIxLjIgNTNjNjAzLjYgMCA3MDcuOCAxNjUuOCA3MDcuOCAyNzcuMiAwIDExMC0xMDQuMiAyNzUuOFxcbi03MDcuOCAyNzUuOC02MDYgMC03MTAuMi0xNjUuOC03MTAuMi0yNzUuOEMzMTEgMjE4LjggNDE1LjIgNTMgMTAyMS4yIDUzelxcbm03NzAuNCAyNzcuMWMwLTEzMS4yLTEyNi40LTMyNy42LTc3MC41LTMyNy42UzI0OC40IDE5OC45IDI0OC40IDMzMC4xXFxuYzAgMTMwIDEyOC44IDMyNi40IDc3Mi43IDMyNi40czc3MC41LTE5Ni40IDc3MC41LTMyNi40elwiLFxuICByaWdodGFycm93OiBcIk0wIDI0MXY0MGgzOTk4OTFjLTQ3LjMgMzUuMy04NCA3OC0xMTAgMTI4XFxuLTE2LjcgMzItMjcuNyA2My43LTMzIDk1IDAgMS4zLS4yIDIuNy0uNSA0LS4zIDEuMy0uNSAyLjMtLjUgMyAwIDcuMyA2LjcgMTEgMjBcXG4gMTEgOCAwIDEzLjItLjggMTUuNS0yLjUgMi4zLTEuNyA0LjItNS41IDUuNS0xMS41IDItMTMuMyA1LjctMjcgMTEtNDEgMTQuNy00NC43XFxuIDM5LTg0LjUgNzMtMTE5LjVzNzMuNy02MC4yIDExOS03NS41YzYtMiA5LTUuNyA5LTExcy0zLTktOS0xMWMtNDUuMy0xNS4zLTg1XFxuLTQwLjUtMTE5LTc1LjVzLTU4LjMtNzQuOC03My0xMTkuNWMtNC43LTE0LTguMy0yNy4zLTExLTQwLTEuMy02LjctMy4yLTEwLjgtNS41XFxuLTEyLjUtMi4zLTEuNy03LjUtMi41LTE1LjUtMi41LTE0IDAtMjEgMy43LTIxIDExIDAgMiAyIDEwLjMgNiAyNSAyMC43IDgzLjMgNjdcXG4gMTUxLjcgMTM5IDIwNXptMCAwdjQwaDM5OTkwMHYtNDB6XCIsXG4gIHJpZ2h0YnJhY2U6IFwiTTQwMDAwMCA1NDJsXFxuLTYgNmgtMTdjLTEyLjcgMC0xOS4zLS4zLTIwLTEtNC00LTcuMy04LjMtMTAtMTMtMzUuMy01MS4zLTgwLjgtOTMuOC0xMzYuNS0xMjcuNVxcbnMtMTE3LjItNTUuOC0xODQuNS02Ni41Yy0uNyAwLTItLjMtNC0xLTE4LjctMi43LTc2LTQuMy0xNzItNUgwVjIxNGgzOTk1NzFsNiAxXFxuYzEyNC43IDggMjM1IDYxLjcgMzMxIDE2MSAzMS4zIDMzLjMgNTkuNyA3Mi43IDg1IDExOGw3IDEzdjM1elwiLFxuICByaWdodGJyYWNldW5kZXI6IFwiTTM5OTk5NCAwbDYgNnYzNWwtNiAxMWMtNTYgMTA0LTEzNS4zIDE4MS4zLTIzOCAyMzItNTcuM1xcbiAyOC43LTExNyA0NS0xNzkgNTBILTMwMFYyMTRoMzk5ODk3YzQzLjMtNyA4MS0xNSAxMTMtMjYgMTAwLjctMzMgMTc5LjctOTEgMjM3XFxuLTE3NCAyLjctNSA2LTkgMTAtMTMgLjctMSA3LjMtMSAyMC0xaDE3elwiLFxuICByaWdodGdyb3VwOiBcIk0wIDgwaDM5OTU2NWMzNzEgMCAyNjYuNyAxNDkuNCA0MTQgMTgwIDUuOSAxLjIgMTggMCAxOCAwIDIgMFxcbiAzLTEgMy0zdi0zOGMtNzYtMTU4LTI1Ny0yMTktNDM1LTIxOUgwelwiLFxuICByaWdodGdyb3VwdW5kZXI6IFwiTTAgMjYyaDM5OTU2NWMzNzEgMCAyNjYuNy0xNDkuNCA0MTQtMTgwIDUuOS0xLjIgMTggMCAxOFxcbiAwIDIgMCAzIDEgMyAzdjM4Yy03NiAxNTgtMjU3IDIxOS00MzUgMjE5SDB6XCIsXG4gIHJpZ2h0aGFycG9vbjogXCJNMCAyNDF2NDBoMzk5OTkzYzQuNy00LjcgNy05LjMgNy0xNCAwLTkuM1xcbi0zLjctMTUuMy0xMS0xOC05Mi43LTU2LjctMTU5LTEzMy43LTE5OS0yMzEtMy4zLTkuMy02LTE0LjctOC0xNi0yLTEuMy03LTItMTUtMlxcbi0xMC43IDAtMTYuNyAyLTE4IDYtMiAyLjctMSA5LjcgMyAyMSAxNS4zIDQyIDM2LjcgODEuOCA2NCAxMTkuNSAyNy4zIDM3LjcgNThcXG4gNjkuMiA5MiA5NC41em0wIDB2NDBoMzk5OTAwdi00MHpcIixcbiAgcmlnaHRoYXJwb29ucGx1czogXCJNMCAyNDF2NDBoMzk5OTkzYzQuNy00LjcgNy05LjMgNy0xNCAwLTkuMy0zLjctMTUuMy0xMVxcbi0xOC05Mi43LTU2LjctMTU5LTEzMy43LTE5OS0yMzEtMy4zLTkuMy02LTE0LjctOC0xNi0yLTEuMy03LTItMTUtMi0xMC43IDAtMTYuN1xcbiAyLTE4IDYtMiAyLjctMSA5LjcgMyAyMSAxNS4zIDQyIDM2LjcgODEuOCA2NCAxMTkuNSAyNy4zIDM3LjcgNTggNjkuMiA5MiA5NC41elxcbm0wIDB2NDBoMzk5OTAwdi00MHogbTEwMCAxOTR2NDBoMzk5OTAwdi00MHptMCAwdjQwaDM5OTkwMHYtNDB6XCIsXG4gIHJpZ2h0aGFycG9vbmRvd246IFwiTTM5OTc0NyA1MTFjMCA3LjMgNi43IDExIDIwIDExIDggMCAxMy0uOCAxNS0yLjVzNC43LTYuOFxcbiA4LTE1LjVjNDAtOTQgOTkuMy0xNjYuMyAxNzgtMjE3IDEzLjMtOCAyMC4zLTEyLjMgMjEtMTMgNS4zLTMuMyA4LjUtNS44IDkuNVxcbi03LjUgMS0xLjcgMS41LTUuMiAxLjUtMTAuNXMtMi4zLTEwLjMtNy0xNUgwdjQwaDM5OTkwOGMtMzQgMjUuMy02NC43IDU3LTkyIDk1XFxuLTI3LjMgMzgtNDguNyA3Ny43LTY0IDExOS0zLjMgOC43LTUgMTQtNSAxNnpNMCAyNDF2NDBoMzk5OTAwdi00MHpcIixcbiAgcmlnaHRoYXJwb29uZG93bnBsdXM6IFwiTTM5OTc0NyA3MDVjMCA3LjMgNi43IDExIDIwIDExIDggMCAxMy0uOFxcbiAxNS0yLjVzNC43LTYuOCA4LTE1LjVjNDAtOTQgOTkuMy0xNjYuMyAxNzgtMjE3IDEzLjMtOCAyMC4zLTEyLjMgMjEtMTMgNS4zLTMuM1xcbiA4LjUtNS44IDkuNS03LjUgMS0xLjcgMS41LTUuMiAxLjUtMTAuNXMtMi4zLTEwLjMtNy0xNUgwdjQwaDM5OTkwOGMtMzQgMjUuM1xcbi02NC43IDU3LTkyIDk1LTI3LjMgMzgtNDguNyA3Ny43LTY0IDExOS0zLjMgOC43LTUgMTQtNSAxNnpNMCA0MzV2NDBoMzk5OTAwdi00MHpcXG5tMC0xOTR2NDBoNDAwMDAwdi00MHptMCAwdjQwaDQwMDAwMHYtNDB6XCIsXG4gIHJpZ2h0aG9vazogXCJNMzk5ODU5IDI0MWMtNzY0IDAgMCAwIDAgMCA0MC0zLjMgNjguNy0xNS43IDg2LTM3IDEwLTEyIDE1LTI1LjNcXG4gMTUtNDAgMC0yMi43LTkuOC00MC43LTI5LjUtNTQtMTkuNy0xMy4zLTQzLjUtMjEtNzEuNS0yMy0xNy4zLTEuMy0yNi04LTI2LTIwIDBcXG4tMTMuMyA4LjctMjAgMjYtMjAgMzggMCA3MSAxMS4yIDk5IDMzLjUgMCAwIDcgNS42IDIxIDE2LjcgMTQgMTEuMiAyMSAzMy41IDIxXFxuIDY2LjhzLTE0IDYxLjItNDIgODMuNWMtMjggMjIuMy02MSAzMy41LTk5IDMzLjVMMCAyNDF6IE0wIDI4MXYtNDBoMzk5ODU5djQwelwiLFxuICByaWdodGxpbmVzZWdtZW50OiBcIk0zOTk5NjAgMjQxIFY5NCBoNDAgVjQyOCBoLTQwIFYyODEgSDAgdi00MHpcXG5NMzk5OTYwIDI0MSBWOTQgaDQwIFY0MjggaC00MCBWMjgxIEgwIHYtNDB6XCIsXG4gIHJpZ2h0VG9Gcm9tOiBcIk00MDAwMDAgMTY3Yy03MC43LTQyLTExOC05Ny43LTE0Mi0xNjdoLTIzYy0xNS4zIDAtMjMgLjMtMjNcXG4gMSAwIDEuMyA1LjMgMTMuNyAxNiAzNyAxOCAzNS4zIDQxLjMgNjkgNzAgMTAxbDcgOEgwdjQwaDM5OTkwNWwtNyA4Yy0yOC43IDMyXFxuLTUyIDY1LjctNzAgMTAxLTEwLjcgMjMuMy0xNiAzNS43LTE2IDM3IDAgLjcgNy43IDEgMjMgMWgyM2MyNC02OS4zIDcxLjMtMTI1IDE0Mlxcbi0xNjd6IE0xMDAgMTQ3djQwaDM5OTkwMHYtNDB6TTAgMzQxdjQwaDM5OTkwMHYtNDB6XCIsXG4gIC8vIHR3b2hlYWRsZWZ0YXJyb3cgaXMgZnJvbSBnbHlwaCBVKzIxOUUgaW4gZm9udCBLYVRlWCBBTVMgUmVndWxhclxuICB0d29oZWFkbGVmdGFycm93OiBcIk0wIDE2N2M2OCA0MFxcbiAxMTUuNyA5NS43IDE0MyAxNjdoMjJjMTUuMyAwIDIzLS4zIDIzLTEgMC0xLjMtNS4zLTEzLjctMTYtMzctMTgtMzUuMy00MS4zLTY5XFxuLTcwLTEwMWwtNy04aDEyNWw5IDdjNTAuNyAzOS4zIDg1IDg2IDEwMyAxNDBoNDZjMC00LjctNi4zLTE4LjctMTktNDItMTgtMzUuM1xcbi00MC02Ny4zLTY2LTk2bC05LTloMzk5NzE2di00MEgyODRsOS05YzI2LTI4LjcgNDgtNjAuNyA2Ni05NiAxMi43LTIzLjMzMyAxOVxcbi0zNy4zMzMgMTktNDJoLTQ2Yy0xOCA1NC01Mi4zIDEwMC43LTEwMyAxNDBsLTkgN0g5NWw3LThjMjguNy0zMiA1Mi02NS43IDcwLTEwMVxcbiAxMC43LTIzLjMzMyAxNi0zNS43IDE2LTM3IDAtLjctNy43LTEtMjMtMWgtMjJDMTE1LjcgNzEuMyA2OCAxMjcgMCAxNjd6XCIsXG4gIHR3b2hlYWRyaWdodGFycm93OiBcIk00MDAwMDAgMTY3XFxuYy02OC00MC0xMTUuNy05NS43LTE0My0xNjdoLTIyYy0xNS4zIDAtMjMgLjMtMjMgMSAwIDEuMyA1LjMgMTMuNyAxNiAzNyAxOCAzNS4zXFxuIDQxLjMgNjkgNzAgMTAxbDcgOGgtMTI1bC05LTdjLTUwLjctMzkuMy04NS04Ni0xMDMtMTQwaC00NmMwIDQuNyA2LjMgMTguNyAxOSA0MlxcbiAxOCAzNS4zIDQwIDY3LjMgNjYgOTZsOSA5SDB2NDBoMzk5NzE2bC05IDljLTI2IDI4LjctNDggNjAuNy02NiA5Ni0xMi43IDIzLjMzM1xcbi0xOSAzNy4zMzMtMTkgNDJoNDZjMTgtNTQgNTIuMy0xMDAuNyAxMDMtMTQwbDktN2gxMjVsLTcgOGMtMjguNyAzMi01MiA2NS43LTcwXFxuIDEwMS0xMC43IDIzLjMzMy0xNiAzNS43LTE2IDM3IDAgLjcgNy43IDEgMjMgMWgyMmMyNy4zLTcxLjMgNzUtMTI3IDE0My0xNjd6XCIsXG4gIC8vIHRpbGRlMSBpcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgYSBnbHlwaCBmcm9tIHRoZSBNblN5bWJvbCBwYWNrYWdlXG4gIHRpbGRlMTogXCJNMjAwIDU1LjUzOGMtNzcgMC0xNjggNzMuOTUzLTE3NyA3My45NTMtMyAwLTdcXG4tMi4xNzUtOS01LjQzN0wyIDk3Yy0xLTItMi00LTItNiAwLTQgMi03IDUtOWwyMC0xMkMxMTYgMTIgMTcxIDAgMjA3IDBjODYgMFxcbiAxMTQgNjggMTkxIDY4IDc4IDAgMTY4LTY4IDE3Ny02OCA0IDAgNyAyIDkgNWwxMiAxOWMxIDIuMTc1IDIgNC4zNSAyIDYuNTI1IDBcXG4gNC4zNS0yIDcuNjEzLTUgOS43ODhsLTE5IDEzLjA1Yy05MiA2My4wNzctMTE2LjkzNyA3NS4zMDgtMTgzIDc2LjEyOFxcbi02OC4yNjcuODQ3LTExMy03My45NTItMTkxLTczLjk1MnpcIixcbiAgLy8gZGl0dG8gdGlsZGUyLCB0aWxkZTMsICYgdGlsZGU0XG4gIHRpbGRlMjogXCJNMzQ0IDU1LjI2NmMtMTQyIDAtMzAwLjYzOCA4MS4zMTYtMzExLjUgODYuNDE4XFxuLTguMDEgMy43NjItMjIuNSAxMC45MS0yMy41IDUuNTYyTDEgMTIwYy0xLTItMS0zLTEtNCAwLTUgMy05IDgtMTBsMTguNC05QzE2MC45XFxuIDMxLjkgMjgzIDAgMzU4IDBjMTQ4IDAgMTg4IDEyMiAzMzEgMTIyczMxNC05NyAzMjYtOTdjNCAwIDggMiAxMCA3bDcgMjEuMTE0XFxuYzEgMi4xNCAxIDMuMjEgMSA0LjI4IDAgNS4zNDctMyA5LjYyNi03IDEwLjY5NmwtMjIuMyAxMi42MjJDODUyLjYgMTU4LjM3MiA3NTFcXG4gMTgxLjQ3NiA2NzYgMTgxLjQ3NmMtMTQ5IDAtMTg5LTEyNi4yMS0zMzItMTI2LjIxelwiLFxuICB0aWxkZTM6IFwiTTc4NiA1OUM0NTcgNTkgMzIgMTc1LjI0MiAxMyAxNzUuMjQyYy02IDAtMTAtMy40NTdcXG4tMTEtMTAuMzdMLjE1IDEzOGMtMS03IDMtMTIgMTAtMTNsMTkuMi02LjRDMzc4LjQgNDAuNyA2MzQuMyAwIDgwNC4zIDBjMzM3IDBcXG4gNDExLjggMTU3IDc0Ni44IDE1NyAzMjggMCA3NTQtMTEyIDc3My0xMTIgNSAwIDEwIDMgMTEgOWwxIDE0LjA3NWMxIDguMDY2LS42OTdcXG4gMTYuNTk1LTYuNjk3IDE3LjQ5MmwtMjEuMDUyIDcuMzFjLTM2Ny45IDk4LjE0Ni02MDkuMTUgMTIyLjY5Ni03NzguMTUgMTIyLjY5NlxcbiAtMzM4IDAtNDA5LTE1Ni41NzMtNzQ0LTE1Ni41NzN6XCIsXG4gIHRpbGRlNDogXCJNNzg2IDU4QzQ1NyA1OCAzMiAxNzcuNDg3IDEzIDE3Ny40ODdjLTYgMC0xMC0zLjM0NVxcbi0xMS0xMC4wMzVMLjE1IDE0M2MtMS03IDMtMTIgMTAtMTNsMjItNi43QzM4MS4yIDM1IDYzNy4xNSAwIDgwNy4xNSAwYzMzNyAwIDQwOVxcbiAxNzcgNzQ0IDE3NyAzMjggMCA3NTQtMTI3IDc3My0xMjcgNSAwIDEwIDMgMTEgOWwxIDE0Ljc5NGMxIDcuODA1LTMgMTMuMzgtOVxcbiAxNC40OTVsLTIwLjcgNS41NzRjLTM2Ni44NSA5OS43OS02MDcuMyAxMzkuMzcyLTc3Ni4zIDEzOS4zNzItMzM4IDAtNDA5XFxuIC0xNzUuMjM2LTc0NC0xNzUuMjM2elwiLFxuICAvLyB2ZWMgaXMgZnJvbSBnbHlwaCBVKzIwRDcgaW4gZm9udCBLYVRlWCBNYWluXG4gIHZlYzogXCJNMzc3IDIwYzAtNS4zMzMgMS44MzMtMTAgNS41LTE0UzM5MSAwIDM5NyAwYzQuNjY3IDAgOC42NjcgMS42NjcgMTIgNVxcbjMuMzMzIDIuNjY3IDYuNjY3IDkgMTAgMTkgNi42NjcgMjQuNjY3IDIwLjMzMyA0My42NjcgNDEgNTcgNy4zMzMgNC42NjcgMTFcXG4xMC42NjcgMTEgMTggMCA2LTEgMTAtMyAxMnMtNi42NjcgNS0xNCA5Yy0yOC42NjcgMTQuNjY3LTUzLjY2NyAzNS42NjctNzUgNjNcXG4tMS4zMzMgMS4zMzMtMy4xNjcgMy41LTUuNSA2LjVzLTQgNC44MzMtNSA1LjVjLTEgLjY2Ny0yLjUgMS4zMzMtNC41IDJzLTQuMzMzIDFcXG4tNyAxYy00LjY2NyAwLTkuMTY3LTEuODMzLTEzLjUtNS41UzMzNyAxODQgMzM3IDE3OGMwLTEyLjY2NyAxNS42NjctMzIuMzMzIDQ3LTU5XFxuSDIxM2wtMTcxLTFjLTguNjY3LTYtMTMtMTIuMzMzLTEzLTE5IDAtNC42NjcgNC4zMzMtMTEuMzMzIDEzLTIwaDM1OVxcbmMtMTYtMjUuMzMzLTI0LTQ1LTI0LTU5elwiLFxuICAvLyB3aWRlaGF0MSBpcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgYSBnbHlwaCBmcm9tIHRoZSBNblN5bWJvbCBwYWNrYWdlXG4gIHdpZGVoYXQxOiBcIk01MjkgMGg1bDUxOSAxMTVjNSAxIDkgNSA5IDEwIDAgMS0xIDItMSAzbC00IDIyXFxuYy0xIDUtNSA5LTExIDloLTJMNTMyIDY3IDE5IDE1OWgtMmMtNSAwLTktNC0xMS05bC01LTIyYy0xLTYgMi0xMiA4LTEzelwiLFxuICAvLyBkaXR0byB3aWRlaGF0Miwgd2lkZWhhdDMsICYgd2lkZWhhdDRcbiAgd2lkZWhhdDI6IFwiTTExODEgMGgybDExNzEgMTc2YzYgMCAxMCA1IDEwIDExbC0yIDIzYy0xIDYtNSAxMFxcbi0xMSAxMGgtMUwxMTgyIDY3IDE1IDIyMGgtMWMtNiAwLTEwLTQtMTEtMTBsLTItMjNjLTEtNiA0LTExIDEwLTExelwiLFxuICB3aWRlaGF0MzogXCJNMTE4MSAwaDJsMTE3MSAyMzZjNiAwIDEwIDUgMTAgMTFsLTIgMjNjLTEgNi01IDEwXFxuLTExIDEwaC0xTDExODIgNjcgMTUgMjgwaC0xYy02IDAtMTAtNC0xMS0xMGwtMi0yM2MtMS02IDQtMTEgMTAtMTF6XCIsXG4gIHdpZGVoYXQ0OiBcIk0xMTgxIDBoMmwxMTcxIDI5NmM2IDAgMTAgNSAxMCAxMWwtMiAyM2MtMSA2LTUgMTBcXG4tMTEgMTBoLTFMMTE4MiA2NyAxNSAzNDBoLTFjLTYgMC0xMC00LTExLTEwbC0yLTIzYy0xLTYgNC0xMSAxMC0xMXpcIixcbiAgLy8gd2lkZWNoZWNrIHBhdGhzIGFyZSBhbGwgaW52ZXJ0ZWQgdmVyc2lvbnMgb2Ygd2lkZWhhdFxuICB3aWRlY2hlY2sxOiBcIk01MjksMTU5aDVsNTE5LC0xMTVjNSwtMSw5LC01LDksLTEwYzAsLTEsLTEsLTIsLTEsLTNsLTQsLTIyYy0xLFxcbi01LC01LC05LC0xMSwtOWgtMmwtNTEyLDkybC01MTMsLTkyaC0yYy01LDAsLTksNCwtMTEsOWwtNSwyMmMtMSw2LDIsMTIsOCwxM3pcIixcbiAgd2lkZWNoZWNrMjogXCJNMTE4MSwyMjBoMmwxMTcxLC0xNzZjNiwwLDEwLC01LDEwLC0xMWwtMiwtMjNjLTEsLTYsLTUsLTEwLFxcbi0xMSwtMTBoLTFsLTExNjgsMTUzbC0xMTY3LC0xNTNoLTFjLTYsMCwtMTAsNCwtMTEsMTBsLTIsMjNjLTEsNiw0LDExLDEwLDExelwiLFxuICB3aWRlY2hlY2szOiBcIk0xMTgxLDI4MGgybDExNzEsLTIzNmM2LDAsMTAsLTUsMTAsLTExbC0yLC0yM2MtMSwtNiwtNSwtMTAsXFxuLTExLC0xMGgtMWwtMTE2OCwyMTNsLTExNjcsLTIxM2gtMWMtNiwwLC0xMCw0LC0xMSwxMGwtMiwyM2MtMSw2LDQsMTEsMTAsMTF6XCIsXG4gIHdpZGVjaGVjazQ6IFwiTTExODEsMzQwaDJsMTE3MSwtMjk2YzYsMCwxMCwtNSwxMCwtMTFsLTIsLTIzYy0xLC02LC01LC0xMCxcXG4tMTEsLTEwaC0xbC0xMTY4LDI3M2wtMTE2NywtMjczaC0xYy02LDAsLTEwLDQsLTExLDEwbC0yLDIzYy0xLDYsNCwxMSwxMCwxMXpcIixcbiAgLy8gVGhlIG5leHQgdGVuIHBhdGhzIHN1cHBvcnQgcmVhY3Rpb24gYXJyb3dzIGZyb20gdGhlIG1oY2hlbSBwYWNrYWdlLlxuICAvLyBBcnJvd3MgZm9yIFxcY2V7PC0tPn0gYXJlIG9mZnNldCBmcm9tIHhBeGlzIGJ5IDAuMjJleCwgcGVyIG1oY2hlbSBpbiBMYVRlWFxuICAvLyBiYXJhYm92ZWxlZnRhcnJvdyBpcyBtb3N0bHkgZnJvbSBmcm9tIGdseXBoIFUrMjE5MCBpbiBmb250IEthVGVYIE1haW5cbiAgYmFyYWJvdmVsZWZ0YXJyb3c6IFwiTTQwMDAwMCA2MjBoLTM5OTg5MGwzIC0zYzY4LjcgLTUyLjcgMTEzLjcgLTEyMCAxMzUgLTIwMlxcbmM0IC0xNC43IDYgLTIzIDYgLTI1YzAgLTcuMyAtNyAtMTEgLTIxIC0xMWMtOCAwIC0xMy4yIDAuOCAtMTUuNSAyLjVcXG5jLTIuMyAxLjcgLTQuMiA1LjggLTUuNSAxMi41Yy0xLjMgNC43IC0yLjcgMTAuMyAtNCAxN2MtMTIgNDguNyAtMzQuOCA5MiAtNjguNSAxMzBcXG5zLTc0LjIgNjYuMyAtMTIxLjUgODVjLTEwIDQgLTE2IDcuNyAtMTggMTFjMCA4LjcgNiAxNC4zIDE4IDE3YzQ3LjMgMTguNyA4Ny44IDQ3XFxuMTIxLjUgODVzNTYuNSA4MS4zIDY4LjUgMTMwYzAuNyAyIDEuMyA1IDIgOXMxLjIgNi43IDEuNSA4YzAuMyAxLjMgMSAzLjMgMiA2XFxuczIuMiA0LjUgMy41IDUuNWMxLjMgMSAzLjMgMS44IDYgMi41czYgMSAxMCAxYzE0IDAgMjEgLTMuNyAyMSAtMTFcXG5jMCAtMiAtMiAtMTAuMyAtNiAtMjVjLTIwIC03OS4zIC02NSAtMTQ2LjcgLTEzNSAtMjAybC0zIC0zaDM5OTg5MHpcXG5NMTAwIDYyMHY0MGgzOTk5MDB2LTQweiBNMCAyNDF2NDBoMzk5OTAwdi00MHpNMCAyNDF2NDBoMzk5OTAwdi00MHpcIixcbiAgLy8gcmlnaHRhcnJvd2Fib3ZlYmFyIGlzIG1vc3RseSBmcm9tIGdseXBoIFUrMjE5MiwgS2FUZVggTWFpblxuICByaWdodGFycm93YWJvdmViYXI6IFwiTTAgMjQxdjQwaDM5OTg5MWMtNDcuMyAzNS4zLTg0IDc4LTExMCAxMjgtMTYuNyAzMlxcbi0yNy43IDYzLjctMzMgOTUgMCAxLjMtLjIgMi43LS41IDQtLjMgMS4zLS41IDIuMy0uNSAzIDAgNy4zIDYuNyAxMSAyMCAxMSA4IDBcXG4xMy4yLS44IDE1LjUtMi41IDIuMy0xLjcgNC4yLTUuNSA1LjUtMTEuNSAyLTEzLjMgNS43LTI3IDExLTQxIDE0LjctNDQuNyAzOVxcbi04NC41IDczLTExOS41czczLjctNjAuMiAxMTktNzUuNWM2LTIgOS01LjcgOS0xMXMtMy05LTktMTFjLTQ1LjMtMTUuMy04NS00MC41XFxuLTExOS03NS41cy01OC4zLTc0LjgtNzMtMTE5LjVjLTQuNy0xNC04LjMtMjcuMy0xMS00MC0xLjMtNi43LTMuMi0xMC44LTUuNVxcbi0xMi41LTIuMy0xLjctNy41LTIuNS0xNS41LTIuNS0xNCAwLTIxIDMuNy0yMSAxMSAwIDIgMiAxMC4zIDYgMjUgMjAuNyA4My4zIDY3XFxuMTUxLjcgMTM5IDIwNXptOTYgMzc5aDM5OTg5NHY0MEgwem0wIDBoMzk5OTA0djQwSDB6XCIsXG4gIC8vIFRoZSBzaG9ydCBsZWZ0IGhhcnBvb24gaGFzIDAuNWVtIChpLmUuIDUwMCB1bml0cykga2VybiBvbiB0aGUgbGVmdCBlbmQuXG4gIC8vIFJlZiBmcm9tIG1oY2hlbS5zdHk6IFxccmxhcHtcXHJhaXNlYm94ey0uMjJleH17JFxca2VybjAuNWVtXG4gIGJhcmFib3Zlc2hvcnRsZWZ0aGFycG9vbjogXCJNNTA3LDQzNWMtNCw0LC02LjMsOC43LC03LDE0YzAsNS4zLDAuNyw5LDIsMTFcXG5jMS4zLDIsNS4zLDUuMywxMiwxMGM5MC43LDU0LDE1NiwxMzAsMTk2LDIyOGMzLjMsMTAuNyw2LjMsMTYuMyw5LDE3XFxuYzIsMC43LDUsMSw5LDFjMCwwLDUsMCw1LDBjMTAuNywwLDE2LjcsLTIsMTgsLTZjMiwtMi43LDEsLTkuNywtMywtMjFcXG5jLTMyLC04Ny4zLC04Mi43LC0xNTcuNywtMTUyLC0yMTFjMCwwLC0zLC0zLC0zLC0zbDM5OTM1MSwwbDAsLTQwXFxuYy0zOTg1NzAsMCwtMzk5NDM3LDAsLTM5OTQzNywweiBNNTkzIDQzNSB2NDAgSDM5OTUwMCB2LTQwelxcbk0wIDI4MSB2LTQwIEgzOTk5MDggdjQweiBNMCAyODEgdi00MCBIMzk5OTA4IHY0MHpcIixcbiAgcmlnaHRoYXJwb29uYWJvdmVzaG9ydGJhcjogXCJNMCwyNDEgbDAsNDBjMzk5MTI2LDAsMzk5OTkzLDAsMzk5OTkzLDBcXG5jNC43LC00LjcsNywtOS4zLDcsLTE0YzAsLTkuMywtMy43LC0xNS4zLC0xMSwtMThjLTkyLjcsLTU2LjcsLTE1OSwtMTMzLjcsLTE5OSxcXG4tMjMxYy0zLjMsLTkuMywtNiwtMTQuNywtOCwtMTZjLTIsLTEuMywtNywtMiwtMTUsLTJjLTEwLjcsMCwtMTYuNywyLC0xOCw2XFxuYy0yLDIuNywtMSw5LjcsMywyMWMxNS4zLDQyLDM2LjcsODEuOCw2NCwxMTkuNWMyNy4zLDM3LjcsNTgsNjkuMiw5Miw5NC41elxcbk0wIDI0MSB2NDAgSDM5OTkwOCB2LTQweiBNMCA0NzUgdi00MCBIMzk5NTAwIHY0MHogTTAgNDc1IHYtNDAgSDM5OTUwMCB2NDB6XCIsXG4gIHNob3J0YmFyYWJvdmVsZWZ0aGFycG9vbjogXCJNNyw0MzVjLTQsNCwtNi4zLDguNywtNywxNGMwLDUuMywwLjcsOSwyLDExXFxuYzEuMywyLDUuMyw1LjMsMTIsMTBjOTAuNyw1NCwxNTYsMTMwLDE5NiwyMjhjMy4zLDEwLjcsNi4zLDE2LjMsOSwxN2MyLDAuNyw1LDEsOSxcXG4xYzAsMCw1LDAsNSwwYzEwLjcsMCwxNi43LC0yLDE4LC02YzIsLTIuNywxLC05LjcsLTMsLTIxYy0zMiwtODcuMywtODIuNywtMTU3LjcsXFxuLTE1MiwtMjExYzAsMCwtMywtMywtMywtM2wzOTk5MDcsMGwwLC00MGMtMzk5MTI2LDAsLTM5OTk5MywwLC0zOTk5OTMsMHpcXG5NOTMgNDM1IHY0MCBINDAwMDAwIHYtNDB6IE01MDAgMjQxIHY0MCBINDAwMDAwIHYtNDB6IE01MDAgMjQxIHY0MCBINDAwMDAwIHYtNDB6XCIsXG4gIHNob3J0cmlnaHRoYXJwb29uYWJvdmViYXI6IFwiTTUzLDI0MWwwLDQwYzM5ODU3MCwwLDM5OTQzNywwLDM5OTQzNywwXFxuYzQuNywtNC43LDcsLTkuMyw3LC0xNGMwLC05LjMsLTMuNywtMTUuMywtMTEsLTE4Yy05Mi43LC01Ni43LC0xNTksLTEzMy43LC0xOTksXFxuLTIzMWMtMy4zLC05LjMsLTYsLTE0LjcsLTgsLTE2Yy0yLC0xLjMsLTcsLTIsLTE1LC0yYy0xMC43LDAsLTE2LjcsMiwtMTgsNlxcbmMtMiwyLjcsLTEsOS43LDMsMjFjMTUuMyw0MiwzNi43LDgxLjgsNjQsMTE5LjVjMjcuMywzNy43LDU4LDY5LjIsOTIsOTQuNXpcXG5NNTAwIDI0MSB2NDAgSDM5OTQwOCB2LTQweiBNNTAwIDQzNSB2NDAgSDQwMDAwMCB2LTQwelwiXG59O1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdHJlZS5qc1xuXG5cbi8qKlxuICogVGhpcyBub2RlIHJlcHJlc2VudHMgYSBkb2N1bWVudCBmcmFnbWVudCwgd2hpY2ggY29udGFpbnMgZWxlbWVudHMsIGJ1dCB3aGVuXG4gKiBwbGFjZWQgaW50byB0aGUgRE9NIGRvZXNuJ3QgaGF2ZSBhbnkgcmVwcmVzZW50YXRpb24gaXRzZWxmLiBJdCBvbmx5IGNvbnRhaW5zXG4gKiBjaGlsZHJlbiBhbmQgZG9lc24ndCBoYXZlIGFueSBET00gbm9kZSBwcm9wZXJ0aWVzLlxuICovXG52YXIgdHJlZV9Eb2N1bWVudEZyYWdtZW50ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgLy8gSHRtbERvbU5vZGVcbiAgLy8gTmV2ZXIgdXNlZDsgbmVlZGVkIGZvciBzYXRpc2Z5aW5nIGludGVyZmFjZS5cbiAgZnVuY3Rpb24gRG9jdW1lbnRGcmFnbWVudChjaGlsZHJlbikge1xuICAgIHRoaXMuY2hpbGRyZW4gPSB2b2lkIDA7XG4gICAgdGhpcy5jbGFzc2VzID0gdm9pZCAwO1xuICAgIHRoaXMuaGVpZ2h0ID0gdm9pZCAwO1xuICAgIHRoaXMuZGVwdGggPSB2b2lkIDA7XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLnN0eWxlID0gdm9pZCAwO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICB0aGlzLmNsYXNzZXMgPSBbXTtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG4gICAgdGhpcy5kZXB0aCA9IDA7XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IDA7XG4gICAgdGhpcy5zdHlsZSA9IHt9O1xuICB9XG5cbiAgdmFyIF9wcm90byA9IERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYXNDbGFzcyA9IGZ1bmN0aW9uIGhhc0NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHJldHVybiB1dGlscy5jb250YWlucyh0aGlzLmNsYXNzZXMsIGNsYXNzTmFtZSk7XG4gIH1cbiAgLyoqIENvbnZlcnQgdGhlIGZyYWdtZW50IGludG8gYSBub2RlLiAqL1xuICA7XG5cbiAgX3Byb3RvLnRvTm9kZSA9IGZ1bmN0aW9uIHRvTm9kZSgpIHtcbiAgICB2YXIgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgZnJhZy5hcHBlbmRDaGlsZCh0aGlzLmNoaWxkcmVuW2ldLnRvTm9kZSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnJhZztcbiAgfVxuICAvKiogQ29udmVydCB0aGUgZnJhZ21lbnQgaW50byBIVE1MIG1hcmt1cC4gKi9cbiAgO1xuXG4gIF9wcm90by50b01hcmt1cCA9IGZ1bmN0aW9uIHRvTWFya3VwKCkge1xuICAgIHZhciBtYXJrdXAgPSBcIlwiOyAvLyBTaW1wbHkgY29uY2F0ZW5hdGUgdGhlIG1hcmt1cCBmb3IgdGhlIGNoaWxkcmVuIHRvZ2V0aGVyLlxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBtYXJrdXAgKz0gdGhpcy5jaGlsZHJlbltpXS50b01hcmt1cCgpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrdXA7XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBtYXRoIG5vZGUgaW50byBhIHN0cmluZywgc2ltaWxhciB0byBpbm5lclRleHQuIEFwcGxpZXMgdG9cbiAgICogTWF0aERvbU5vZGUncyBvbmx5LlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by50b1RleHQgPSBmdW5jdGlvbiB0b1RleHQoKSB7XG4gICAgLy8gVG8gYXZvaWQgdGhpcywgd2Ugd291bGQgc3ViY2xhc3MgZG9jdW1lbnRGcmFnbWVudCBzZXBhcmF0ZWx5IGZvclxuICAgIC8vIE1hdGhNTCwgYnV0IHBvbHlmaWxscyBmb3Igc3ViY2xhc3NpbmcgaXMgZXhwZW5zaXZlIHBlciBQUiAxNDY5LlxuICAgIC8vICRGbG93Rml4TWU6IE9ubHkgd29ya3MgZm9yIENoaWxkVHlwZSA9IE1hdGhEb21Ob2RlLlxuICAgIHZhciB0b1RleHQgPSBmdW5jdGlvbiB0b1RleHQoY2hpbGQpIHtcbiAgICAgIHJldHVybiBjaGlsZC50b1RleHQoKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4ubWFwKHRvVGV4dCkuam9pbihcIlwiKTtcbiAgfTtcblxuICByZXR1cm4gRG9jdW1lbnRGcmFnbWVudDtcbn0oKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2RvbVRyZWUuanNcbi8qKlxuICogVGhlc2Ugb2JqZWN0cyBzdG9yZSB0aGUgZGF0YSBhYm91dCB0aGUgRE9NIG5vZGVzIHdlIGNyZWF0ZSwgYXMgd2VsbCBhcyBzb21lXG4gKiBleHRyYSBkYXRhLiBUaGV5IGNhbiB0aGVuIGJlIHRyYW5zZm9ybWVkIGludG8gcmVhbCBET00gbm9kZXMgd2l0aCB0aGVcbiAqIGB0b05vZGVgIGZ1bmN0aW9uIG9yIEhUTUwgbWFya3VwIHVzaW5nIGB0b01hcmt1cGAuIFRoZXkgYXJlIHVzZWZ1bCBmb3IgYm90aFxuICogc3RvcmluZyBleHRyYSBwcm9wZXJ0aWVzIG9uIHRoZSBub2RlcywgYXMgd2VsbCBhcyBwcm92aWRpbmcgYSB3YXkgdG8gZWFzaWx5XG4gKiB3b3JrIHdpdGggdGhlIERPTS5cbiAqXG4gKiBTaW1pbGFyIGZ1bmN0aW9ucyBmb3Igd29ya2luZyB3aXRoIE1hdGhNTCBub2RlcyBleGlzdCBpbiBtYXRoTUxUcmVlLmpzLlxuICpcbiAqIFRPRE86IHJlZmFjdG9yIGBzcGFuYCBhbmQgYGFuY2hvcmAgaW50byBjb21tb24gc3VwZXJjbGFzcyB3aGVuXG4gKiB0YXJnZXQgZW52aXJvbm1lbnRzIHN1cHBvcnQgY2xhc3MgaW5oZXJpdGFuY2VcbiAqL1xuXG5cblxuXG5cbi8qKlxuICogQ3JlYXRlIGFuIEhUTUwgY2xhc3NOYW1lIGJhc2VkIG9uIGEgbGlzdCBvZiBjbGFzc2VzLiBJbiBhZGRpdGlvbiB0byBqb2luaW5nXG4gKiB3aXRoIHNwYWNlcywgd2UgYWxzbyByZW1vdmUgZW1wdHkgY2xhc3Nlcy5cbiAqL1xudmFyIGNyZWF0ZUNsYXNzID0gZnVuY3Rpb24gY3JlYXRlQ2xhc3MoY2xhc3Nlcykge1xuICByZXR1cm4gY2xhc3Nlcy5maWx0ZXIoZnVuY3Rpb24gKGNscykge1xuICAgIHJldHVybiBjbHM7XG4gIH0pLmpvaW4oXCIgXCIpO1xufTtcblxudmFyIGluaXROb2RlID0gZnVuY3Rpb24gaW5pdE5vZGUoY2xhc3Nlcywgb3B0aW9ucywgc3R5bGUpIHtcbiAgdGhpcy5jbGFzc2VzID0gY2xhc3NlcyB8fCBbXTtcbiAgdGhpcy5hdHRyaWJ1dGVzID0ge307XG4gIHRoaXMuaGVpZ2h0ID0gMDtcbiAgdGhpcy5kZXB0aCA9IDA7XG4gIHRoaXMubWF4Rm9udFNpemUgPSAwO1xuICB0aGlzLnN0eWxlID0gc3R5bGUgfHwge307XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5zdHlsZS5pc1RpZ2h0KCkpIHtcbiAgICAgIHRoaXMuY2xhc3Nlcy5wdXNoKFwibXRpZ2h0XCIpO1xuICAgIH1cblxuICAgIHZhciBjb2xvciA9IG9wdGlvbnMuZ2V0Q29sb3IoKTtcblxuICAgIGlmIChjb2xvcikge1xuICAgICAgdGhpcy5zdHlsZS5jb2xvciA9IGNvbG9yO1xuICAgIH1cbiAgfVxufTtcbi8qKlxuICogQ29udmVydCBpbnRvIGFuIEhUTUwgbm9kZVxuICovXG5cblxudmFyIF90b05vZGUgPSBmdW5jdGlvbiB0b05vZGUodGFnTmFtZSkge1xuICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7IC8vIEFwcGx5IHRoZSBjbGFzc1xuXG4gIG5vZGUuY2xhc3NOYW1lID0gY3JlYXRlQ2xhc3ModGhpcy5jbGFzc2VzKTsgLy8gQXBwbHkgaW5saW5lIHN0eWxlc1xuXG4gIGZvciAodmFyIHN0eWxlIGluIHRoaXMuc3R5bGUpIHtcbiAgICBpZiAodGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZSkpIHtcbiAgICAgIC8vICRGbG93Rml4TWUgRmxvdyBkb2Vzbid0IHNlZW0gdG8gdW5kZXJzdGFuZCBzcGFuLnN0eWxlJ3MgdHlwZS5cbiAgICAgIG5vZGUuc3R5bGVbc3R5bGVdID0gdGhpcy5zdHlsZVtzdHlsZV07XG4gICAgfVxuICB9IC8vIEFwcGx5IGF0dHJpYnV0ZXNcblxuXG4gIGZvciAodmFyIGF0dHIgaW4gdGhpcy5hdHRyaWJ1dGVzKSB7XG4gICAgaWYgKHRoaXMuYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShhdHRyKSkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYXR0ciwgdGhpcy5hdHRyaWJ1dGVzW2F0dHJdKTtcbiAgICB9XG4gIH0gLy8gQXBwZW5kIHRoZSBjaGlsZHJlbiwgYWxzbyBhcyBIVE1MIG5vZGVzXG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBub2RlLmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5baV0udG9Ob2RlKCkpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59O1xuLyoqXG4gKiBDb252ZXJ0IGludG8gYW4gSFRNTCBtYXJrdXAgc3RyaW5nXG4gKi9cblxuXG52YXIgX3RvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAodGFnTmFtZSkge1xuICB2YXIgbWFya3VwID0gXCI8XCIgKyB0YWdOYW1lOyAvLyBBZGQgdGhlIGNsYXNzXG5cbiAgaWYgKHRoaXMuY2xhc3Nlcy5sZW5ndGgpIHtcbiAgICBtYXJrdXAgKz0gXCIgY2xhc3M9XFxcIlwiICsgdXRpbHMuZXNjYXBlKGNyZWF0ZUNsYXNzKHRoaXMuY2xhc3NlcykpICsgXCJcXFwiXCI7XG4gIH1cblxuICB2YXIgc3R5bGVzID0gXCJcIjsgLy8gQWRkIHRoZSBzdHlsZXMsIGFmdGVyIGh5cGhlbmF0aW9uXG5cbiAgZm9yICh2YXIgc3R5bGUgaW4gdGhpcy5zdHlsZSkge1xuICAgIGlmICh0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlKSkge1xuICAgICAgc3R5bGVzICs9IHV0aWxzLmh5cGhlbmF0ZShzdHlsZSkgKyBcIjpcIiArIHRoaXMuc3R5bGVbc3R5bGVdICsgXCI7XCI7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0eWxlcykge1xuICAgIG1hcmt1cCArPSBcIiBzdHlsZT1cXFwiXCIgKyB1dGlscy5lc2NhcGUoc3R5bGVzKSArIFwiXFxcIlwiO1xuICB9IC8vIEFkZCB0aGUgYXR0cmlidXRlc1xuXG5cbiAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICBpZiAodGhpcy5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KGF0dHIpKSB7XG4gICAgICBtYXJrdXAgKz0gXCIgXCIgKyBhdHRyICsgXCI9XFxcIlwiICsgdXRpbHMuZXNjYXBlKHRoaXMuYXR0cmlidXRlc1thdHRyXSkgKyBcIlxcXCJcIjtcbiAgICB9XG4gIH1cblxuICBtYXJrdXAgKz0gXCI+XCI7IC8vIEFkZCB0aGUgbWFya3VwIG9mIHRoZSBjaGlsZHJlbiwgYWxzbyBhcyBtYXJrdXBcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBtYXJrdXAgKz0gdGhpcy5jaGlsZHJlbltpXS50b01hcmt1cCgpO1xuICB9XG5cbiAgbWFya3VwICs9IFwiPC9cIiArIHRhZ05hbWUgKyBcIj5cIjtcbiAgcmV0dXJuIG1hcmt1cDtcbn07IC8vIE1ha2luZyB0aGUgdHlwZSBiZWxvdyBleGFjdCB3aXRoIGFsbCBvcHRpb25hbCBmaWVsZHMgZG9lc24ndCB3b3JrIGR1ZSB0b1xuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNDU4MlxuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNTY4OFxuLy8gSG93ZXZlciwgc2luY2UgKmFsbCogZmllbGRzIGFyZSBvcHRpb25hbCwgJFNoYXBlPD4gd29ya3MgYXMgc3VnZ2VzdGVkIGluIDU2ODhcbi8vIGFib3ZlLlxuLy8gVGhpcyB0eXBlIGRvZXMgbm90IGluY2x1ZGUgYWxsIENTUyBwcm9wZXJ0aWVzLiBBZGRpdGlvbmFsIHByb3BlcnRpZXMgc2hvdWxkXG4vLyBiZSBhZGRlZCBhcyBuZWVkZWQuXG5cblxuLyoqXG4gKiBUaGlzIG5vZGUgcmVwcmVzZW50cyBhIHNwYW4gbm9kZSwgd2l0aCBhIGNsYXNzTmFtZSwgYSBsaXN0IG9mIGNoaWxkcmVuLCBhbmRcbiAqIGFuIGlubGluZSBzdHlsZS4gSXQgYWxzbyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBpdHMgaGVpZ2h0LCBkZXB0aCwgYW5kXG4gKiBtYXhGb250U2l6ZS5cbiAqXG4gKiBSZXByZXNlbnRzIHR3byB0eXBlcyB3aXRoIGRpZmZlcmVudCB1c2VzOiBTdmdTcGFuIHRvIHdyYXAgYW4gU1ZHIGFuZCBEb21TcGFuXG4gKiBvdGhlcndpc2UuIFRoaXMgdHlwZXNhZmV0eSBpcyBpbXBvcnRhbnQgd2hlbiBIVE1MIGJ1aWxkZXJzIGFjY2VzcyBhIHNwYW4nc1xuICogY2hpbGRyZW4uXG4gKi9cbnZhciBkb21UcmVlX1NwYW4gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTcGFuKGNsYXNzZXMsIGNoaWxkcmVuLCBvcHRpb25zLCBzdHlsZSkge1xuICAgIHRoaXMuY2hpbGRyZW4gPSB2b2lkIDA7XG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gdm9pZCAwO1xuICAgIHRoaXMuY2xhc3NlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmhlaWdodCA9IHZvaWQgMDtcbiAgICB0aGlzLmRlcHRoID0gdm9pZCAwO1xuICAgIHRoaXMud2lkdGggPSB2b2lkIDA7XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLnN0eWxlID0gdm9pZCAwO1xuICAgIGluaXROb2RlLmNhbGwodGhpcywgY2xhc3Nlcywgb3B0aW9ucywgc3R5bGUpO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbiB8fCBbXTtcbiAgfVxuICAvKipcbiAgICogU2V0cyBhbiBhcmJpdHJhcnkgYXR0cmlidXRlIG9uIHRoZSBzcGFuLiBXYXJuaW5nOiB1c2UgdGhpcyB3aXNlbHkuIE5vdFxuICAgKiBhbGwgYnJvd3NlcnMgc3VwcG9ydCBhdHRyaWJ1dGVzIHRoZSBzYW1lLCBhbmQgaGF2aW5nIHRvbyBtYW55IGN1c3RvbVxuICAgKiBhdHRyaWJ1dGVzIGlzIHByb2JhYmx5IGJhZC5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gU3Bhbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uIHNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gICAgdGhpcy5hdHRyaWJ1dGVzW2F0dHJpYnV0ZV0gPSB2YWx1ZTtcbiAgfTtcblxuICBfcHJvdG8uaGFzQ2xhc3MgPSBmdW5jdGlvbiBoYXNDbGFzcyhjbGFzc05hbWUpIHtcbiAgICByZXR1cm4gdXRpbHMuY29udGFpbnModGhpcy5jbGFzc2VzLCBjbGFzc05hbWUpO1xuICB9O1xuXG4gIF9wcm90by50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgcmV0dXJuIF90b05vZGUuY2FsbCh0aGlzLCBcInNwYW5cIik7XG4gIH07XG5cbiAgX3Byb3RvLnRvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAoKSB7XG4gICAgcmV0dXJuIF90b01hcmt1cC5jYWxsKHRoaXMsIFwic3BhblwiKTtcbiAgfTtcblxuICByZXR1cm4gU3Bhbjtcbn0oKTtcbi8qKlxuICogVGhpcyBub2RlIHJlcHJlc2VudHMgYW4gYW5jaG9yICg8YT4pIGVsZW1lbnQgd2l0aCBhIGh5cGVybGluay4gIFNlZSBgc3BhbmBcbiAqIGZvciBmdXJ0aGVyIGRldGFpbHMuXG4gKi9cblxudmFyIGRvbVRyZWVfQW5jaG9yID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQW5jaG9yKGhyZWYsIGNsYXNzZXMsIGNoaWxkcmVuLCBvcHRpb25zKSB7XG4gICAgdGhpcy5jaGlsZHJlbiA9IHZvaWQgMDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSB2b2lkIDA7XG4gICAgdGhpcy5jbGFzc2VzID0gdm9pZCAwO1xuICAgIHRoaXMuaGVpZ2h0ID0gdm9pZCAwO1xuICAgIHRoaXMuZGVwdGggPSB2b2lkIDA7XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLnN0eWxlID0gdm9pZCAwO1xuICAgIGluaXROb2RlLmNhbGwodGhpcywgY2xhc3Nlcywgb3B0aW9ucyk7XG4gICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuIHx8IFtdO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gIH1cblxuICB2YXIgX3Byb3RvMiA9IEFuY2hvci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvMi5zZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbiBzZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZSkge1xuICAgIHRoaXMuYXR0cmlidXRlc1thdHRyaWJ1dGVdID0gdmFsdWU7XG4gIH07XG5cbiAgX3Byb3RvMi5oYXNDbGFzcyA9IGZ1bmN0aW9uIGhhc0NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHJldHVybiB1dGlscy5jb250YWlucyh0aGlzLmNsYXNzZXMsIGNsYXNzTmFtZSk7XG4gIH07XG5cbiAgX3Byb3RvMi50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgcmV0dXJuIF90b05vZGUuY2FsbCh0aGlzLCBcImFcIik7XG4gIH07XG5cbiAgX3Byb3RvMi50b01hcmt1cCA9IGZ1bmN0aW9uIHRvTWFya3VwKCkge1xuICAgIHJldHVybiBfdG9NYXJrdXAuY2FsbCh0aGlzLCBcImFcIik7XG4gIH07XG5cbiAgcmV0dXJuIEFuY2hvcjtcbn0oKTtcbi8qKlxuICogVGhpcyBub2RlIHJlcHJlc2VudHMgYW4gaW1hZ2UgZW1iZWQgKDxpbWc+KSBlbGVtZW50LlxuICovXG5cbnZhciBkb21UcmVlX0ltZyA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEltZyhzcmMsIGFsdCwgc3R5bGUpIHtcbiAgICB0aGlzLnNyYyA9IHZvaWQgMDtcbiAgICB0aGlzLmFsdCA9IHZvaWQgMDtcbiAgICB0aGlzLmNsYXNzZXMgPSB2b2lkIDA7XG4gICAgdGhpcy5oZWlnaHQgPSB2b2lkIDA7XG4gICAgdGhpcy5kZXB0aCA9IHZvaWQgMDtcbiAgICB0aGlzLm1heEZvbnRTaXplID0gdm9pZCAwO1xuICAgIHRoaXMuc3R5bGUgPSB2b2lkIDA7XG4gICAgdGhpcy5hbHQgPSBhbHQ7XG4gICAgdGhpcy5zcmMgPSBzcmM7XG4gICAgdGhpcy5jbGFzc2VzID0gW1wibW9yZFwiXTtcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG4gIH1cblxuICB2YXIgX3Byb3RvMyA9IEltZy5wcm90b3R5cGU7XG5cbiAgX3Byb3RvMy5oYXNDbGFzcyA9IGZ1bmN0aW9uIGhhc0NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHJldHVybiB1dGlscy5jb250YWlucyh0aGlzLmNsYXNzZXMsIGNsYXNzTmFtZSk7XG4gIH07XG5cbiAgX3Byb3RvMy50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xuICAgIG5vZGUuc3JjID0gdGhpcy5zcmM7XG4gICAgbm9kZS5hbHQgPSB0aGlzLmFsdDtcbiAgICBub2RlLmNsYXNzTmFtZSA9IFwibW9yZFwiOyAvLyBBcHBseSBpbmxpbmUgc3R5bGVzXG5cbiAgICBmb3IgKHZhciBzdHlsZSBpbiB0aGlzLnN0eWxlKSB7XG4gICAgICBpZiAodGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZSkpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICBub2RlLnN0eWxlW3N0eWxlXSA9IHRoaXMuc3R5bGVbc3R5bGVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9O1xuXG4gIF9wcm90bzMudG9NYXJrdXAgPSBmdW5jdGlvbiB0b01hcmt1cCgpIHtcbiAgICB2YXIgbWFya3VwID0gXCI8aW1nICBzcmM9J1wiICsgdGhpcy5zcmMgKyBcIiAnYWx0PSdcIiArIHRoaXMuYWx0ICsgXCInIFwiOyAvLyBBZGQgdGhlIHN0eWxlcywgYWZ0ZXIgaHlwaGVuYXRpb25cblxuICAgIHZhciBzdHlsZXMgPSBcIlwiO1xuXG4gICAgZm9yICh2YXIgc3R5bGUgaW4gdGhpcy5zdHlsZSkge1xuICAgICAgaWYgKHRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkoc3R5bGUpKSB7XG4gICAgICAgIHN0eWxlcyArPSB1dGlscy5oeXBoZW5hdGUoc3R5bGUpICsgXCI6XCIgKyB0aGlzLnN0eWxlW3N0eWxlXSArIFwiO1wiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdHlsZXMpIHtcbiAgICAgIG1hcmt1cCArPSBcIiBzdHlsZT1cXFwiXCIgKyB1dGlscy5lc2NhcGUoc3R5bGVzKSArIFwiXFxcIlwiO1xuICAgIH1cblxuICAgIG1hcmt1cCArPSBcIicvPlwiO1xuICAgIHJldHVybiBtYXJrdXA7XG4gIH07XG5cbiAgcmV0dXJuIEltZztcbn0oKTtcbnZhciBpQ29tYmluYXRpb25zID0ge1xuICAnw64nOiBcIlxcdTAxMzFcXHUwMzAyXCIsXG4gICfDryc6IFwiXFx1MDEzMVxcdTAzMDhcIixcbiAgJ8OtJzogXCJcXHUwMTMxXFx1MDMwMVwiLFxuICAvLyAnxKsnOiAnXFx1MDEzMVxcdTAzMDQnLCAvLyBlbmFibGUgd2hlbiB3ZSBhZGQgRXh0ZW5kZWQgTGF0aW5cbiAgJ8OsJzogXCJcXHUwMTMxXFx1MDMwMFwiXG59O1xuLyoqXG4gKiBBIHN5bWJvbCBub2RlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGEgc2luZ2xlIHN5bWJvbC4gSXQgZWl0aGVyIHJlbmRlcnNcbiAqIHRvIGEgc2luZ2xlIHRleHQgbm9kZSwgb3IgYSBzcGFuIHdpdGggYSBzaW5nbGUgdGV4dCBub2RlIGluIGl0LCBkZXBlbmRpbmcgb25cbiAqIHdoZXRoZXIgaXQgaGFzIENTUyBjbGFzc2VzLCBzdHlsZXMsIG9yIG5lZWRzIGl0YWxpYyBjb3JyZWN0aW9uLlxuICovXG5cbnZhciBkb21UcmVlX1N5bWJvbE5vZGUgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTeW1ib2xOb2RlKHRleHQsIGhlaWdodCwgZGVwdGgsIGl0YWxpYywgc2tldywgd2lkdGgsIGNsYXNzZXMsIHN0eWxlKSB7XG4gICAgdGhpcy50ZXh0ID0gdm9pZCAwO1xuICAgIHRoaXMuaGVpZ2h0ID0gdm9pZCAwO1xuICAgIHRoaXMuZGVwdGggPSB2b2lkIDA7XG4gICAgdGhpcy5pdGFsaWMgPSB2b2lkIDA7XG4gICAgdGhpcy5za2V3ID0gdm9pZCAwO1xuICAgIHRoaXMud2lkdGggPSB2b2lkIDA7XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLmNsYXNzZXMgPSB2b2lkIDA7XG4gICAgdGhpcy5zdHlsZSA9IHZvaWQgMDtcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG4gICAgdGhpcy5kZXB0aCA9IGRlcHRoIHx8IDA7XG4gICAgdGhpcy5pdGFsaWMgPSBpdGFsaWMgfHwgMDtcbiAgICB0aGlzLnNrZXcgPSBza2V3IHx8IDA7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG4gICAgdGhpcy5jbGFzc2VzID0gY2xhc3NlcyB8fCBbXTtcbiAgICB0aGlzLnN0eWxlID0gc3R5bGUgfHwge307XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IDA7IC8vIE1hcmsgdGV4dCBmcm9tIG5vbi1MYXRpbiBzY3JpcHRzIHdpdGggc3BlY2lmaWMgY2xhc3NlcyBzbyB0aGF0IHdlXG4gICAgLy8gY2FuIHNwZWNpZnkgd2hpY2ggZm9udHMgdG8gdXNlLiAgVGhpcyBhbGxvd3MgdXMgdG8gcmVuZGVyIHRoZXNlXG4gICAgLy8gY2hhcmFjdGVycyB3aXRoIGEgc2VyaWYgZm9udCBpbiBzaXR1YXRpb25zIHdoZXJlIHRoZSBicm93c2VyIHdvdWxkXG4gICAgLy8gZWl0aGVyIGRlZmF1bHQgdG8gYSBzYW5zIHNlcmlmIG9yIHJlbmRlciBhIHBsYWNlaG9sZGVyIGNoYXJhY3Rlci5cbiAgICAvLyBXZSB1c2UgQ1NTIGNsYXNzIG5hbWVzIGxpa2UgY2prX2ZhbGxiYWNrLCBoYW5ndWxfZmFsbGJhY2sgYW5kXG4gICAgLy8gYnJhaG1pY19mYWxsYmFjay4gU2VlIC4vdW5pY29kZVNjcmlwdHMuanMgZm9yIHRoZSBzZXQgb2YgcG9zc2libGVcbiAgICAvLyBzY3JpcHQgbmFtZXNcblxuICAgIHZhciBzY3JpcHQgPSBzY3JpcHRGcm9tQ29kZXBvaW50KHRoaXMudGV4dC5jaGFyQ29kZUF0KDApKTtcblxuICAgIGlmIChzY3JpcHQpIHtcbiAgICAgIHRoaXMuY2xhc3Nlcy5wdXNoKHNjcmlwdCArIFwiX2ZhbGxiYWNrXCIpO1xuICAgIH1cblxuICAgIGlmICgvW8Ouw6/DrcOsXS8udGVzdCh0aGlzLnRleHQpKSB7XG4gICAgICAvLyBhZGQgxKsgd2hlbiB3ZSBhZGQgRXh0ZW5kZWQgTGF0aW5cbiAgICAgIHRoaXMudGV4dCA9IGlDb21iaW5hdGlvbnNbdGhpcy50ZXh0XTtcbiAgICB9XG4gIH1cblxuICB2YXIgX3Byb3RvNCA9IFN5bWJvbE5vZGUucHJvdG90eXBlO1xuXG4gIF9wcm90bzQuaGFzQ2xhc3MgPSBmdW5jdGlvbiBoYXNDbGFzcyhjbGFzc05hbWUpIHtcbiAgICByZXR1cm4gdXRpbHMuY29udGFpbnModGhpcy5jbGFzc2VzLCBjbGFzc05hbWUpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdGV4dCBub2RlIG9yIHNwYW4gZnJvbSBhIHN5bWJvbCBub2RlLiBOb3RlIHRoYXQgYSBzcGFuIGlzIG9ubHlcbiAgICogY3JlYXRlZCBpZiBpdCBpcyBuZWVkZWQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvNC50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLnRleHQpO1xuICAgIHZhciBzcGFuID0gbnVsbDtcblxuICAgIGlmICh0aGlzLml0YWxpYyA+IDApIHtcbiAgICAgIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICAgIHNwYW4uc3R5bGUubWFyZ2luUmlnaHQgPSB0aGlzLml0YWxpYyArIFwiZW1cIjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHNwYW4gPSBzcGFuIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgICAgc3Bhbi5jbGFzc05hbWUgPSBjcmVhdGVDbGFzcyh0aGlzLmNsYXNzZXMpO1xuICAgIH1cblxuICAgIGZvciAodmFyIHN0eWxlIGluIHRoaXMuc3R5bGUpIHtcbiAgICAgIGlmICh0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlKSkge1xuICAgICAgICBzcGFuID0gc3BhbiB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTsgLy8gJEZsb3dGaXhNZSBGbG93IGRvZXNuJ3Qgc2VlbSB0byB1bmRlcnN0YW5kIHNwYW4uc3R5bGUncyB0eXBlLlxuXG4gICAgICAgIHNwYW4uc3R5bGVbc3R5bGVdID0gdGhpcy5zdHlsZVtzdHlsZV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNwYW4pIHtcbiAgICAgIHNwYW4uYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICByZXR1cm4gc3BhbjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIG1hcmt1cCBmb3IgYSBzeW1ib2wgbm9kZS5cbiAgICovXG4gIDtcblxuICBfcHJvdG80LnRvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAoKSB7XG4gICAgLy8gVE9ETyhhbHBlcnQpOiBNb3JlIGR1cGxpY2F0aW9uIHRoYW4gSSdkIGxpa2UgZnJvbVxuICAgIC8vIHNwYW4ucHJvdG90eXBlLnRvTWFya3VwIGFuZCBzeW1ib2xOb2RlLnByb3RvdHlwZS50b05vZGUuLi5cbiAgICB2YXIgbmVlZHNTcGFuID0gZmFsc2U7XG4gICAgdmFyIG1hcmt1cCA9IFwiPHNwYW5cIjtcblxuICAgIGlmICh0aGlzLmNsYXNzZXMubGVuZ3RoKSB7XG4gICAgICBuZWVkc1NwYW4gPSB0cnVlO1xuICAgICAgbWFya3VwICs9IFwiIGNsYXNzPVxcXCJcIjtcbiAgICAgIG1hcmt1cCArPSB1dGlscy5lc2NhcGUoY3JlYXRlQ2xhc3ModGhpcy5jbGFzc2VzKSk7XG4gICAgICBtYXJrdXAgKz0gXCJcXFwiXCI7XG4gICAgfVxuXG4gICAgdmFyIHN0eWxlcyA9IFwiXCI7XG5cbiAgICBpZiAodGhpcy5pdGFsaWMgPiAwKSB7XG4gICAgICBzdHlsZXMgKz0gXCJtYXJnaW4tcmlnaHQ6XCIgKyB0aGlzLml0YWxpYyArIFwiZW07XCI7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgc3R5bGUgaW4gdGhpcy5zdHlsZSkge1xuICAgICAgaWYgKHRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkoc3R5bGUpKSB7XG4gICAgICAgIHN0eWxlcyArPSB1dGlscy5oeXBoZW5hdGUoc3R5bGUpICsgXCI6XCIgKyB0aGlzLnN0eWxlW3N0eWxlXSArIFwiO1wiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdHlsZXMpIHtcbiAgICAgIG5lZWRzU3BhbiA9IHRydWU7XG4gICAgICBtYXJrdXAgKz0gXCIgc3R5bGU9XFxcIlwiICsgdXRpbHMuZXNjYXBlKHN0eWxlcykgKyBcIlxcXCJcIjtcbiAgICB9XG5cbiAgICB2YXIgZXNjYXBlZCA9IHV0aWxzLmVzY2FwZSh0aGlzLnRleHQpO1xuXG4gICAgaWYgKG5lZWRzU3Bhbikge1xuICAgICAgbWFya3VwICs9IFwiPlwiO1xuICAgICAgbWFya3VwICs9IGVzY2FwZWQ7XG4gICAgICBtYXJrdXAgKz0gXCI8L3NwYW4+XCI7XG4gICAgICByZXR1cm4gbWFya3VwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZXNjYXBlZDtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFN5bWJvbE5vZGU7XG59KCk7XG4vKipcbiAqIFNWRyBub2RlcyBhcmUgdXNlZCB0byByZW5kZXIgc3RyZXRjaHkgd2lkZSBlbGVtZW50cy5cbiAqL1xuXG52YXIgU3ZnTm9kZSA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFN2Z05vZGUoY2hpbGRyZW4sIGF0dHJpYnV0ZXMpIHtcbiAgICB0aGlzLmNoaWxkcmVuID0gdm9pZCAwO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW4gfHwgW107XG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcbiAgfVxuXG4gIHZhciBfcHJvdG81ID0gU3ZnTm9kZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvNS50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgdmFyIHN2Z05TID0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCBcInN2Z1wiKTsgLy8gQXBwbHkgYXR0cmlidXRlc1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyLCB0aGlzLmF0dHJpYnV0ZXNbYXR0cl0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZS5hcHBlbmRDaGlsZCh0aGlzLmNoaWxkcmVuW2ldLnRvTm9kZSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcblxuICBfcHJvdG81LnRvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAoKSB7XG4gICAgdmFyIG1hcmt1cCA9IFwiPHN2Z1wiOyAvLyBBcHBseSBhdHRyaWJ1dGVzXG5cbiAgICBmb3IgKHZhciBhdHRyIGluIHRoaXMuYXR0cmlidXRlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMsIGF0dHIpKSB7XG4gICAgICAgIG1hcmt1cCArPSBcIiBcIiArIGF0dHIgKyBcIj0nXCIgKyB0aGlzLmF0dHJpYnV0ZXNbYXR0cl0gKyBcIidcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtYXJrdXAgKz0gXCI+XCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1hcmt1cCArPSB0aGlzLmNoaWxkcmVuW2ldLnRvTWFya3VwKCk7XG4gICAgfVxuXG4gICAgbWFya3VwICs9IFwiPC9zdmc+XCI7XG4gICAgcmV0dXJuIG1hcmt1cDtcbiAgfTtcblxuICByZXR1cm4gU3ZnTm9kZTtcbn0oKTtcbnZhciBkb21UcmVlX1BhdGhOb2RlID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUGF0aE5vZGUocGF0aE5hbWUsIGFsdGVybmF0ZSkge1xuICAgIHRoaXMucGF0aE5hbWUgPSB2b2lkIDA7XG4gICAgdGhpcy5hbHRlcm5hdGUgPSB2b2lkIDA7XG4gICAgdGhpcy5wYXRoTmFtZSA9IHBhdGhOYW1lO1xuICAgIHRoaXMuYWx0ZXJuYXRlID0gYWx0ZXJuYXRlOyAvLyBVc2VkIG9ubHkgZm9yIFxcc3FydFxuICB9XG5cbiAgdmFyIF9wcm90bzYgPSBQYXRoTm9kZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvNi50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgdmFyIHN2Z05TID0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCBcInBhdGhcIik7XG5cbiAgICBpZiAodGhpcy5hbHRlcm5hdGUpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZFwiLCB0aGlzLmFsdGVybmF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZFwiLCBzdmdHZW9tZXRyeV9wYXRoW3RoaXMucGF0aE5hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcblxuICBfcHJvdG82LnRvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAoKSB7XG4gICAgaWYgKHRoaXMuYWx0ZXJuYXRlKSB7XG4gICAgICByZXR1cm4gXCI8cGF0aCBkPSdcIiArIHRoaXMuYWx0ZXJuYXRlICsgXCInLz5cIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiPHBhdGggZD0nXCIgKyBzdmdHZW9tZXRyeV9wYXRoW3RoaXMucGF0aE5hbWVdICsgXCInLz5cIjtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFBhdGhOb2RlO1xufSgpO1xudmFyIExpbmVOb2RlID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTGluZU5vZGUoYXR0cmlidXRlcykge1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzIHx8IHt9O1xuICB9XG5cbiAgdmFyIF9wcm90bzcgPSBMaW5lTm9kZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvNy50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgdmFyIHN2Z05TID0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCBcImxpbmVcIik7IC8vIEFwcGx5IGF0dHJpYnV0ZXNcblxuICAgIGZvciAodmFyIGF0dHIgaW4gdGhpcy5hdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcywgYXR0cikpIHtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYXR0ciwgdGhpcy5hdHRyaWJ1dGVzW2F0dHJdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcblxuICBfcHJvdG83LnRvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAoKSB7XG4gICAgdmFyIG1hcmt1cCA9IFwiPGxpbmVcIjtcblxuICAgIGZvciAodmFyIGF0dHIgaW4gdGhpcy5hdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcywgYXR0cikpIHtcbiAgICAgICAgbWFya3VwICs9IFwiIFwiICsgYXR0ciArIFwiPSdcIiArIHRoaXMuYXR0cmlidXRlc1thdHRyXSArIFwiJ1wiO1xuICAgICAgfVxuICAgIH1cblxuICAgIG1hcmt1cCArPSBcIi8+XCI7XG4gICAgcmV0dXJuIG1hcmt1cDtcbiAgfTtcblxuICByZXR1cm4gTGluZU5vZGU7XG59KCk7XG5mdW5jdGlvbiBhc3NlcnRTeW1ib2xEb21Ob2RlKGdyb3VwKSB7XG4gIGlmIChncm91cCBpbnN0YW5jZW9mIGRvbVRyZWVfU3ltYm9sTm9kZSkge1xuICAgIHJldHVybiBncm91cDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBzeW1ib2xOb2RlIGJ1dCBnb3QgXCIgKyBTdHJpbmcoZ3JvdXApICsgXCIuXCIpO1xuICB9XG59XG5mdW5jdGlvbiBhc3NlcnRTcGFuKGdyb3VwKSB7XG4gIGlmIChncm91cCBpbnN0YW5jZW9mIGRvbVRyZWVfU3Bhbikge1xuICAgIHJldHVybiBncm91cDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBzcGFuPEh0bWxEb21Ob2RlPiBidXQgZ290IFwiICsgU3RyaW5nKGdyb3VwKSArIFwiLlwiKTtcbiAgfVxufVxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zdWJtb2R1bGVzL2thdGV4LWZvbnRzL2ZvbnRNZXRyaWNzRGF0YS5qc1xuLy8gVGhpcyBmaWxlIGlzIEdFTkVSQVRFRCBieSBidWlsZE1ldHJpY3Muc2guIERPIE5PVCBNT0RJRlkuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBmb250TWV0cmljc0RhdGEgPSAoe1xuICBcIkFNUy1SZWd1bGFyXCI6IHtcbiAgICBcIjY1XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjY2XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjY3XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjY4XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjY5XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjcwXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjcxXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjczXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjc0XCI6IFswLjE2NjY3LCAwLjY4ODg5LCAwLCAwLCAwLjVdLFxuICAgIFwiNzVcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNzZcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiNzdcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuOTQ0NDVdLFxuICAgIFwiNzhcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiNzlcIjogWzAuMTY2NjcsIDAuNjg4ODksIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODBcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODFcIjogWzAuMTY2NjcsIDAuNjg4ODksIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODJcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODNcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODRcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODVcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODZcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODdcIjogWzAsIDAuNjg4ODksIDAsIDAsIDEuMF0sXG4gICAgXCI4OFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4OVwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5MFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCIxMDdcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiMTY1XCI6IFswLCAwLjY3NSwgMC4wMjUsIDAsIDAuNzVdLFxuICAgIFwiMTc0XCI6IFswLjE1NTU5LCAwLjY5MjI0LCAwLCAwLCAwLjk0NjY2XSxcbiAgICBcIjI0MFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIyOTVcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTQwMjhdLFxuICAgIFwiNzEwXCI6IFswLCAwLjgyNSwgMCwgMCwgMi4zMzMzNF0sXG4gICAgXCI3MzJcIjogWzAsIDAuOSwgMCwgMCwgMi4zMzMzNF0sXG4gICAgXCI3NzBcIjogWzAsIDAuODI1LCAwLCAwLCAyLjMzMzM0XSxcbiAgICBcIjc3MVwiOiBbMCwgMC45LCAwLCAwLCAyLjMzMzM0XSxcbiAgICBcIjk4OVwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDA4XCI6IFswLCAwLjQzMDU2LCAwLjA0MDI4LCAwLCAwLjY2NjY3XSxcbiAgICBcIjgyNDVcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDAuMjc1XSxcbiAgICBcIjg0NjNcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTQwMjhdLFxuICAgIFwiODQ4N1wiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4NDk4XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg1MDJcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODUwM1wiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCI4NTA0XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg1MTNcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiODU5MlwiOiBbLTAuMDM1OTgsIDAuNDY0MDIsIDAsIDAsIDAuNV0sXG4gICAgXCI4NTk0XCI6IFstMC4wMzU5OCwgMC40NjQwMiwgMCwgMCwgMC41XSxcbiAgICBcIjg2MDJcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODYwM1wiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjA2XCI6IFswLjAxMzU0LCAwLjUyMjM5LCAwLCAwLCAxLjBdLFxuICAgIFwiODYwOFwiOiBbMC4wMTM1NCwgMC41MjIzOSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MTBcIjogWzAuMDEzNTQsIDAuNTIyMzksIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiODYxMVwiOiBbMC4wMTM1NCwgMC41MjIzOSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCI4NjE5XCI6IFswLCAwLjU0OTg2LCAwLCAwLCAxLjBdLFxuICAgIFwiODYyMFwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MjFcIjogWy0wLjEzMzEzLCAwLjM3Nzg4LCAwLCAwLCAxLjM4ODg5XSxcbiAgICBcIjg2MjJcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODYyNFwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC41XSxcbiAgICBcIjg2MjVcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNV0sXG4gICAgXCI4NjMwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAxLjBdLFxuICAgIFwiODYzMVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MzRcIjogWzAuMDgxOTgsIDAuNTgxOTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODYzNVwiOiBbMC4wODE5OCwgMC41ODE5OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NjM4XCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjQxNjY3XSxcbiAgICBcIjg2MzlcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuNDE2NjddLFxuICAgIFwiODY0MlwiOiBbMC4xOTQ0NCwgMC42OTIyNCwgMCwgMCwgMC40MTY2N10sXG4gICAgXCI4NjQzXCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjQxNjY3XSxcbiAgICBcIjg2NDRcIjogWzAuMTgwOCwgMC42NzUsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjQ2XCI6IFswLjE4MDgsIDAuNjc1LCAwLCAwLCAxLjBdLFxuICAgIFwiODY0N1wiOiBbMC4xODA4LCAwLjY3NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2NDhcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODY0OVwiOiBbMC4xODA4LCAwLjY3NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTBcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODY1MVwiOiBbMC4wMTM1NCwgMC41MjIzOSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTJcIjogWzAuMDEzNTQsIDAuNTIyMzksIDAsIDAsIDEuMF0sXG4gICAgXCI4NjUzXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTRcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY1NVwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjY2XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY2N1wiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NjlcIjogWy0wLjEzMzEzLCAwLjM3Nzg4LCAwLCAwLCAxLjBdLFxuICAgIFwiODY3MlwiOiBbLTAuMDY0LCAwLjQzNywgMCwgMCwgMS4zMzRdLFxuICAgIFwiODY3NFwiOiBbLTAuMDY0LCAwLjQzNywgMCwgMCwgMS4zMzRdLFxuICAgIFwiODcwNVwiOiBbMCwgMC44MjUsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzA4XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg3MDlcIjogWzAuMDgxNjcsIDAuNTgxNjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODcxN1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC40MjkxN10sXG4gICAgXCI4NzIyXCI6IFstMC4wMzU5OCwgMC40NjQwMiwgMCwgMCwgMC41XSxcbiAgICBcIjg3MjRcIjogWzAuMDgxOTgsIDAuNjkyMjQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODcyNlwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzMzXCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3MzZcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODczN1wiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4NzM4XCI6IFswLjAzNTE3LCAwLjUyMjM5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg3MzlcIjogWzAuMDgxNjcsIDAuNTgxNjcsIDAsIDAsIDAuMjIyMjJdLFxuICAgIFwiODc0MFwiOiBbMC4yNTE0MiwgMC43NDExMSwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4NzQxXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjg3NDJcIjogWzAuMjUxNDIsIDAuNzQxMTEsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzU2XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg3NTdcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODc2NFwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc2NVwiOiBbLTAuMTMzMTMsIDAuMzc3ODgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc2OVwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc3MFwiOiBbLTAuMDM2MjUsIDAuNDYzNzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc3NFwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4Nzc2XCI6IFstMC4wMTY4OCwgMC40ODMxMiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4Nzc4XCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3ODJcIjogWzAuMDYwNjIsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc4M1wiOiBbMC4wNjA2MiwgMC41NDk4NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4Nzg1XCI6IFswLjA4MTk4LCAwLjU4MTk4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3ODZcIjogWzAuMDgxOTgsIDAuNTgxOTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc4N1wiOiBbMC4wODE5OCwgMC41ODE5OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzkwXCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3OTFcIjogWzAuMjI5NTgsIDAuNzI5NTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc5NlwiOiBbMC4wODE5OCwgMC45MTY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODA2XCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MDdcIjogWzAuMjU1ODMsIDAuNzU1ODMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgwOFwiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODA5XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MTJcIjogWzAuMjU1ODMsIDAuNzU1ODMsIDAsIDAsIDAuNV0sXG4gICAgXCI4ODE0XCI6IFswLjIwNTc2LCAwLjcwNTc2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MTVcIjogWzAuMjA1NzYsIDAuNzA1NzYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgxNlwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODE3XCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MThcIjogWzAuMjI5NTgsIDAuNzI5NTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgxOVwiOiBbMC4yMjk1OCwgMC43Mjk1OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODIyXCI6IFswLjE4MDgsIDAuNjc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MjNcIjogWzAuMTgwOCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgyOFwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODI5XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzBcIjogWzAuMjI5NTgsIDAuNzI5NTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgzMVwiOiBbMC4yMjk1OCwgMC43Mjk1OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODMyXCI6IFswLjIwNTc2LCAwLjcwNTc2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzNcIjogWzAuMjA1NzYsIDAuNzA1NzYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg0MFwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODQxXCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NDJcIjogWzAuMTM1OTcsIDAuNjM1OTcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg0M1wiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODQ3XCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NDhcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg1OFwiOiBbMC4wODE5OCwgMC41ODE5OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODU5XCI6IFswLjA4MTk4LCAwLjU4MTk4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NjFcIjogWzAuMDgxOTgsIDAuNTgxOTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2MlwiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2M1wiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2NFwiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2NVwiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg3MlwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4ODczXCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg4NzRcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuODg4ODldLFxuICAgIFwiODg3NlwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4ODc3XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg4NzhcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODg3OVwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4ODgyXCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4ODNcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg4NFwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODg1XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4ODhcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiODg5MFwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI4ODkxXCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg4OTJcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODkwMVwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4OTAzXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MDVcIjogWzAuMDgxNjcsIDAuNTgxNjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkwNlwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTA3XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MDhcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkwOVwiOiBbLTAuMDM1OTgsIDAuNDY0MDIsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkxMFwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC43NjA0Ml0sXG4gICAgXCI4OTExXCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjc2MDQyXSxcbiAgICBcIjg5MTJcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkxM1wiOiBbMC4wMzUxNywgMC41NDk4NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTE0XCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg5MTVcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODkxNlwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4OTE4XCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTE5XCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTIwXCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAxLjMzMzM0XSxcbiAgICBcIjg5MjFcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDEuMzMzMzRdLFxuICAgIFwiODkyMlwiOiBbMC4zODU2OSwgMC44ODU2OSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTIzXCI6IFswLjM4NTY5LCAwLjg4NTY5LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MjZcIjogWzAuMTM2NjcsIDAuNjM2NjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkyN1wiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTI4XCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MjlcIjogWzAuMzAyNzQsIDAuNzkzODMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkzNFwiOiBbMC4yMzIyMiwgMC43NDExMSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTM1XCI6IFswLjIzMjIyLCAwLjc0MTExLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MzZcIjogWzAuMjMyMjIsIDAuNzQxMTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkzN1wiOiBbMC4yMzIyMiwgMC43NDExMSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTM4XCI6IFswLjIwNTc2LCAwLjcwNTc2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MzlcIjogWzAuMjA1NzYsIDAuNzA1NzYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODk0MFwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTQxXCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5OTRcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODk5NVwiOiBbMC4xOTQ0NCwgMC42OTIyNCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5NDE2XCI6IFswLjE1NTU5LCAwLjY5MjI0LCAwLCAwLCAwLjkwMjIyXSxcbiAgICBcIjk0ODRcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNV0sXG4gICAgXCI5NDg4XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjVdLFxuICAgIFwiOTQ5MlwiOiBbMCwgMC4zNzc4OCwgMCwgMCwgMC41XSxcbiAgICBcIjk0OTZcIjogWzAsIDAuMzc3ODgsIDAsIDAsIDAuNV0sXG4gICAgXCI5NTg1XCI6IFswLjE5NDQ0LCAwLjY4ODg5LCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjk1ODZcIjogWzAuMTk0NDQsIDAuNzQxMTEsIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTYzMlwiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTYzM1wiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTY1MFwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5NjUxXCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjk2NTRcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTY2MFwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5NjYxXCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjk2NjRcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTY3NFwiOiBbMC4xMTExMSwgMC42OTIyNCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5NzMzXCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjk0NDQ1XSxcbiAgICBcIjEwMDAzXCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjEwMDE2XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjEwNzMxXCI6IFswLjExMTExLCAwLjY5MjI0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjEwODQ2XCI6IFswLjE5NDQ0LCAwLjc1NTgzLCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjEwODc3XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODc4XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg1XCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg2XCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg3XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg4XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg5XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODkwXCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODkxXCI6IFswLjQ4MjU2LCAwLjk4MjU2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODkyXCI6IFswLjQ4MjU2LCAwLjk4MjU2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTAxXCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTAyXCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTMzXCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM0XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM1XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM2XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM3XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM4XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTQ5XCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTUwXCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTU1XCI6IFswLjI4NDgxLCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTU2XCI6IFswLjI4NDgxLCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzUwXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjIyMjIyXSxcbiAgICBcIjU3MzUxXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjU3MzUyXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzUzXCI6IFswLCAwLjQzMDU2LCAwLjA0MDI4LCAwLCAwLjY2NjY3XSxcbiAgICBcIjU3MzU2XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzU3XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzU4XCI6IFswLjQxOTUxLCAwLjkxOTUxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzU5XCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzYwXCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzYxXCI6IFswLjQxOTUxLCAwLjkxOTUxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzY2XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzY3XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzY4XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzY5XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzcwXCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzcxXCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XVxuICB9LFxuICBcIkNhbGlncmFwaGljLVJlZ3VsYXJcIjoge1xuICAgIFwiNDhcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCI0OVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1MlwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTRcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1NVwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjU2XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTdcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCI2NVwiOiBbMCwgMC42ODMzMywgMCwgMC4xOTQ0NSwgMC43OTg0N10sXG4gICAgXCI2NlwiOiBbMCwgMC42ODMzMywgMC4wMzA0MSwgMC4xMzg4OSwgMC42NTY4MV0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODMzMywgMC4wNTgzNCwgMC4xMzg4OSwgMC41MjY1M10sXG4gICAgXCI2OFwiOiBbMCwgMC42ODMzMywgMC4wMjc3OCwgMC4wODMzNCwgMC43NzEzOV0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODMzMywgMC4wODk0NCwgMC4xMTExMSwgMC41Mjc3OF0sXG4gICAgXCI3MFwiOiBbMCwgMC42ODMzMywgMC4wOTkzMSwgMC4xMTExMSwgMC43MTg3NV0sXG4gICAgXCI3MVwiOiBbMC4wOTcyMiwgMC42ODMzMywgMC4wNTkzLCAwLjExMTExLCAwLjU5NDg3XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4MzMzLCAwLjAwOTY1LCAwLjExMTExLCAwLjg0NDUyXSxcbiAgICBcIjczXCI6IFswLCAwLjY4MzMzLCAwLjA3MzgyLCAwLCAwLjU0NDUyXSxcbiAgICBcIjc0XCI6IFswLjA5NzIyLCAwLjY4MzMzLCAwLjE4NDcyLCAwLjE2NjY3LCAwLjY3Nzc4XSxcbiAgICBcIjc1XCI6IFswLCAwLjY4MzMzLCAwLjAxNDQ1LCAwLjA1NTU2LCAwLjc2MTk1XSxcbiAgICBcIjc2XCI6IFswLCAwLjY4MzMzLCAwLCAwLjEzODg5LCAwLjY4OTcyXSxcbiAgICBcIjc3XCI6IFswLCAwLjY4MzMzLCAwLCAwLjEzODg5LCAxLjIwMDldLFxuICAgIFwiNzhcIjogWzAsIDAuNjgzMzMsIDAuMTQ3MzYsIDAuMDgzMzQsIDAuODIwNDldLFxuICAgIFwiNzlcIjogWzAsIDAuNjgzMzMsIDAuMDI3NzgsIDAuMTExMTEsIDAuNzk2MTFdLFxuICAgIFwiODBcIjogWzAsIDAuNjgzMzMsIDAuMDgyMjIsIDAuMDgzMzQsIDAuNjk1NTZdLFxuICAgIFwiODFcIjogWzAuMDk3MjIsIDAuNjgzMzMsIDAsIDAuMTExMTEsIDAuODE2NjddLFxuICAgIFwiODJcIjogWzAsIDAuNjgzMzMsIDAsIDAuMDgzMzQsIDAuODQ3NV0sXG4gICAgXCI4M1wiOiBbMCwgMC42ODMzMywgMC4wNzUsIDAuMTM4ODksIDAuNjA1NTZdLFxuICAgIFwiODRcIjogWzAsIDAuNjgzMzMsIDAuMjU0MTcsIDAsIDAuNTQ0NjRdLFxuICAgIFwiODVcIjogWzAsIDAuNjgzMzMsIDAuMDk5MzEsIDAuMDgzMzQsIDAuNjI1ODNdLFxuICAgIFwiODZcIjogWzAsIDAuNjgzMzMsIDAuMDgyMjIsIDAsIDAuNjEyNzhdLFxuICAgIFwiODdcIjogWzAsIDAuNjgzMzMsIDAuMDgyMjIsIDAuMDgzMzQsIDAuOTg3NzhdLFxuICAgIFwiODhcIjogWzAsIDAuNjgzMzMsIDAuMTQ2NDMsIDAuMTM4ODksIDAuNzEzM10sXG4gICAgXCI4OVwiOiBbMC4wOTcyMiwgMC42ODMzMywgMC4wODIyMiwgMC4wODMzNCwgMC42NjgzNF0sXG4gICAgXCI5MFwiOiBbMCwgMC42ODMzMywgMC4wNzk0NCwgMC4xMzg4OSwgMC43MjQ3M11cbiAgfSxcbiAgXCJGcmFrdHVyLVJlZ3VsYXJcIjoge1xuICAgIFwiMzNcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjk1NzRdLFxuICAgIFwiMzRcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjE0NzFdLFxuICAgIFwiMzhcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNzM3ODZdLFxuICAgIFwiMzlcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjEyMDFdLFxuICAgIFwiNDBcIjogWzAuMjQ5ODIsIDAuNzQ5NDcsIDAsIDAsIDAuMzg4NjVdLFxuICAgIFwiNDFcIjogWzAuMjQ5ODIsIDAuNzQ5NDcsIDAsIDAsIDAuMzg4NjVdLFxuICAgIFwiNDJcIjogWzAsIDAuNjIxMTksIDAsIDAsIDAuMjc3NjRdLFxuICAgIFwiNDNcIjogWzAuMDgzMTksIDAuNTgyODMsIDAsIDAsIDAuNzU2MjNdLFxuICAgIFwiNDRcIjogWzAsIDAuMTA4MDMsIDAsIDAsIDAuMjc3NjRdLFxuICAgIFwiNDVcIjogWzAuMDgzMTksIDAuNTgyODMsIDAsIDAsIDAuNzU2MjNdLFxuICAgIFwiNDZcIjogWzAsIDAuMTA4MDMsIDAsIDAsIDAuMjc3NjRdLFxuICAgIFwiNDdcIjogWzAuMjQ5ODIsIDAuNzQ5NDcsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNDhcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNDlcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTBcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTFcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTJcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTNcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTRcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTVcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTZcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTdcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNThcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuMjE2MDZdLFxuICAgIFwiNTlcIjogWzAuMTI2MDQsIDAuNDc1MzQsIDAsIDAsIDAuMjE2MDZdLFxuICAgIFwiNjFcIjogWy0wLjEzMDk5LCAwLjM2ODY2LCAwLCAwLCAwLjc1NjIzXSxcbiAgICBcIjYzXCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjM2MjQ1XSxcbiAgICBcIjY1XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjcxNzZdLFxuICAgIFwiNjZcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuODgzOTddLFxuICAgIFwiNjdcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNjEyNTRdLFxuICAgIFwiNjhcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuODMxNThdLFxuICAgIFwiNjlcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNjYyNzhdLFxuICAgIFwiNzBcIjogWzAuMTI2MDQsIDAuNjkxNDEsIDAsIDAsIDAuNjExMTldLFxuICAgIFwiNzFcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNzg1MzldLFxuICAgIFwiNzJcIjogWzAuMDYzMDIsIDAuNjkxNDEsIDAsIDAsIDAuNzIwM10sXG4gICAgXCI3M1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC41NTQ0OF0sXG4gICAgXCI3NFwiOiBbMC4xMjYwNCwgMC42OTE0MSwgMCwgMCwgMC41NTIzMV0sXG4gICAgXCI3NVwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42Njg0NV0sXG4gICAgXCI3NlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42NjYwMl0sXG4gICAgXCI3N1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMS4wNDk1M10sXG4gICAgXCI3OFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MzIxMl0sXG4gICAgXCI3OVwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MjY5OV0sXG4gICAgXCI4MFwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC44Mjc1M10sXG4gICAgXCI4MVwiOiBbMC4wMzc4MSwgMC42OTE0MSwgMCwgMCwgMC44MjY5OV0sXG4gICAgXCI4MlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MjgwN10sXG4gICAgXCI4M1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44Mjg2MV0sXG4gICAgXCI4NFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42Njg5OV0sXG4gICAgXCI4NVwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42NDU3Nl0sXG4gICAgXCI4NlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MzEzMV0sXG4gICAgXCI4N1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMS4wNDYwMl0sXG4gICAgXCI4OFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC43MTkyMl0sXG4gICAgXCI4OVwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC44MzI5M10sXG4gICAgXCI5MFwiOiBbMC4xMjYwNCwgMC42OTE0MSwgMCwgMCwgMC42MDIwMV0sXG4gICAgXCI5MVwiOiBbMC4yNDk4MiwgMC43NDk0NywgMCwgMCwgMC4yNzc2NF0sXG4gICAgXCI5M1wiOiBbMC4yNDk4MiwgMC43NDk0NywgMCwgMCwgMC4yNzc2NF0sXG4gICAgXCI5NFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC40OTk2NV0sXG4gICAgXCI5N1wiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC41MDA0Nl0sXG4gICAgXCI5OFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC41MTMxNV0sXG4gICAgXCI5OVwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC4zODk0Nl0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjIxMTksIDAsIDAsIDAuNDk4NTddLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjQwMDUzXSxcbiAgICBcIjEwMlwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC4zMjYyNl0sXG4gICAgXCIxMDNcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAzN10sXG4gICAgXCIxMDRcIjogWzAuMTg5MDYsIDAuNjkxNDEsIDAsIDAsIDAuNTIxMjZdLFxuICAgIFwiMTA1XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjI3ODk5XSxcbiAgICBcIjEwNlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC4yODA4OF0sXG4gICAgXCIxMDdcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMzg5NDZdLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjI3OTUzXSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC43NjY3Nl0sXG4gICAgXCIxMTBcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTI2NjZdLFxuICAgIFwiMTExXCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjQ4ODg1XSxcbiAgICBcIjExMlwiOiBbMC4xODkwNiwgMC41MjM5NiwgMCwgMCwgMC41MDA0Nl0sXG4gICAgXCIxMTNcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNDg5MTJdLFxuICAgIFwiMTE0XCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjM4OTE5XSxcbiAgICBcIjExNVwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC40NDI2Nl0sXG4gICAgXCIxMTZcIjogWzAsIDAuNjIxMTksIDAsIDAsIDAuMzMzMDFdLFxuICAgIFwiMTE3XCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjUxNzJdLFxuICAgIFwiMTE4XCI6IFswLCAwLjUyMzk2LCAwLCAwLCAwLjUxMThdLFxuICAgIFwiMTE5XCI6IFswLCAwLjUyMzk2LCAwLCAwLCAwLjc3MzUxXSxcbiAgICBcIjEyMFwiOiBbMC4xODkwNiwgMC40NzUzNCwgMCwgMCwgMC4zODg2NV0sXG4gICAgXCIxMjFcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNDk4ODRdLFxuICAgIFwiMTIyXCI6IFswLjE4OTA2LCAwLjQ3NTM0LCAwLCAwLCAwLjM5MDU0XSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjE0NzFdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC4yMTQ3MV0sXG4gICAgXCI1ODExMlwiOiBbMCwgMC42MjExOSwgMCwgMCwgMC40OTc0OV0sXG4gICAgXCI1ODExM1wiOiBbMCwgMC42MjExOSwgMCwgMCwgMC40OTgzXSxcbiAgICBcIjU4MTE0XCI6IFswLjE4OTA2LCAwLjY5MTQxLCAwLCAwLCAwLjMzMzI4XSxcbiAgICBcIjU4MTE1XCI6IFswLjE4OTA2LCAwLjY5MTQxLCAwLCAwLCAwLjMyOTIzXSxcbiAgICBcIjU4MTE2XCI6IFswLjE4OTA2LCAwLjQ3NTM0LCAwLCAwLCAwLjUwMzQzXSxcbiAgICBcIjU4MTE3XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjMzMzAxXSxcbiAgICBcIjU4MTE4XCI6IFswLCAwLjYyMTE5LCAwLCAwLCAwLjMzNDA5XSxcbiAgICBcIjU4MTE5XCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjUwMDczXVxuICB9LFxuICBcIk1haW4tQm9sZFwiOiB7XG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zNV0sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MDI3OF0sXG4gICAgXCIzNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC45NTgzM10sXG4gICAgXCIzNlwiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDAuOTU4MzNdLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjQzXCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjQ0XCI6IFswLjE5NDQ0LCAwLjE1NTU2LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjQ1XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjM4MzMzXSxcbiAgICBcIjQ2XCI6IFswLCAwLjE1NTU2LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjQ3XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI0OFwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNDlcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjUwXCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1MVwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTJcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjUzXCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1NFwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTVcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjU2XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1N1wiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNThcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiNTlcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiNjBcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiNjFcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjYyXCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjYzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU0MzA1XSxcbiAgICBcIjY0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjY1XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg2OTQ0XSxcbiAgICBcIjY2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjgxODA1XSxcbiAgICBcIjY3XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjgzMDU1XSxcbiAgICBcIjY4XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg4MTk0XSxcbiAgICBcIjY5XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjc1NTU1XSxcbiAgICBcIjcwXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjcyMzYxXSxcbiAgICBcIjcxXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjkwNDE2XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjldLFxuICAgIFwiNzNcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNDM2MTFdLFxuICAgIFwiNzRcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNTk0NDRdLFxuICAgIFwiNzVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuOTAxMzhdLFxuICAgIFwiNzZcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNjkxNjZdLFxuICAgIFwiNzdcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDEuMDkxNjZdLFxuICAgIFwiNzhcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuOV0sXG4gICAgXCI3OVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44NjM4OF0sXG4gICAgXCI4MFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC43ODYxMV0sXG4gICAgXCI4MVwiOiBbMC4xOTQ0NCwgMC42ODYxMSwgMCwgMCwgMC44NjM4OF0sXG4gICAgXCI4MlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44NjI1XSxcbiAgICBcIjgzXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjg0XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjhdLFxuICAgIFwiODVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODg0NzJdLFxuICAgIFwiODZcIjogWzAsIDAuNjg2MTEsIDAuMDE1OTcsIDAsIDAuODY5NDRdLFxuICAgIFwiODdcIjogWzAsIDAuNjg2MTEsIDAuMDE1OTcsIDAsIDEuMTg4ODhdLFxuICAgIFwiODhcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODY5NDRdLFxuICAgIFwiODlcIjogWzAsIDAuNjg2MTEsIDAuMDI4NzUsIDAsIDAuODY5NDRdLFxuICAgIFwiOTBcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNzAyNzddLFxuICAgIFwiOTFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiOTJcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI5NVwiOiBbMC4zMSwgMC4xMzQ0NCwgMC4wMzE5NCwgMCwgMC41NzVdLFxuICAgIFwiOTdcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTU5MDJdLFxuICAgIFwiOThcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiOTlcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiMTAwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjEwMVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MjcwOF0sXG4gICAgXCIxMDJcIjogWzAsIDAuNjk0NDQsIDAuMTA5MDMsIDAsIDAuMzUxMzldLFxuICAgIFwiMTAzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAxNTk3LCAwLCAwLjU3NV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiMTA1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4zNTEzOV0sXG4gICAgXCIxMDdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjA2OTRdLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC45NTgzM10sXG4gICAgXCIxMTBcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiMTExXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjYwNjk0XSxcbiAgICBcIjExNFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40NzM2MV0sXG4gICAgXCIxMTVcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNDUzNjFdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYzNDkyLCAwLCAwLCAwLjQ0NzIyXSxcbiAgICBcIjExN1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCIxMThcIjogWzAsIDAuNDQ0NDQsIDAuMDE1OTcsIDAsIDAuNjA2OTRdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQ0NDQ0LCAwLjAxNTk3LCAwLCAwLjgzMDU1XSxcbiAgICBcIjEyMFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC42MDY5NF0sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDE1OTcsIDAsIDAuNjA2OTRdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjEyM1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiMTI0XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjEyNVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiMTI2XCI6IFswLjM1LCAwLjM0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCIxNjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjE3MlwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCIxNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODY5NDRdLFxuICAgIFwiMTc3XCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjE4NFwiOiBbMC4xNzAxNCwgMCwgMCwgMCwgMC41MTExMV0sXG4gICAgXCIxOThcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDEuMDQxNjZdLFxuICAgIFwiMjE1XCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjIxNlwiOiBbMC4wNDg2MSwgMC43MzQ3MiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCIyMjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTk3MjJdLFxuICAgIFwiMjMwXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjgzMDU1XSxcbiAgICBcIjI0N1wiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCIyNDhcIjogWzAuMDk3MjIsIDAuNTQxNjcsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjMwNVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCIzMzhcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDEuMTY5NDRdLFxuICAgIFwiMzM5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjU2N1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC4zNTEzOV0sXG4gICAgXCI3MTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjcxMVwiOiBbMCwgMC42MzE5NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNzEzXCI6IFswLCAwLjU5NjExLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI3MTRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjcxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI3MjlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiNzMwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg2OTQ0XSxcbiAgICBcIjczMlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNzMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNjkxNjZdLFxuICAgIFwiOTE2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjk1ODMzXSxcbiAgICBcIjkyMFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI5MjNcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODA1NTVdLFxuICAgIFwiOTI2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44MzA1NV0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjgzMDU1XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODMwNTVdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40NDQ0NCwgMC4wMzE5NCwgMCwgMC41NzVdLFxuICAgIFwiODIxMlwiOiBbMCwgMC40NDQ0NCwgMC4wMzE5NCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4MjE2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjgyMTdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiODIyMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MDI3OF0sXG4gICAgXCI4MjIxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYwMjc4XSxcbiAgICBcIjgyMjRcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiODIyNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC41MTExMV0sXG4gICAgXCI4MjQyXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjM0NDQ0XSxcbiAgICBcIjg0MDdcIjogWzAsIDAuNzI0NDQsIDAuMTU0ODYsIDAsIDAuNTc1XSxcbiAgICBcIjg0NjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY3NTldLFxuICAgIFwiODQ2NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44MzA1NV0sXG4gICAgXCI4NDY3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjQ3MzYxXSxcbiAgICBcIjg0NzJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNzQwMjddLFxuICAgIFwiODQ3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44MzA1NV0sXG4gICAgXCI4NTAxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc3XSxcbiAgICBcIjg1OTJcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg1OTNcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg1OTRcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg1OTVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg1OTZcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg1OTdcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg1OThcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODU5OVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4NjAwXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg2MDFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODYzNlwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODYzN1wiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY0MFwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY0MVwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY1NlwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY1N1wiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC43MDI3N10sXG4gICAgXCI4NjU4XCI6IFstMC4xMDg4OSwgMC4zOTExMSwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4NjU5XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc3XSxcbiAgICBcIjg2NjBcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg2NjFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNzAyNzddLFxuICAgIFwiODcwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI4NzA2XCI6IFswLCAwLjY5NDQ0LCAwLjA2Mzg5LCAwLCAwLjYyODQ3XSxcbiAgICBcIjg3MDdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiODcwOVwiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiODcxMVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45NTgzM10sXG4gICAgXCI4NzEyXCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg3MTVcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiODcyMlwiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4NzIzXCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg3MjVcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg3MjZcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg3MjdcIjogWy0wLjAyNzc4LCAwLjQ3MjIyLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI4NzI4XCI6IFstMC4wMjYzOSwgMC40NzM2MSwgMCwgMCwgMC41NzVdLFxuICAgIFwiODcyOVwiOiBbLTAuMDI2MzksIDAuNDczNjEsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg3MzBcIjogWzAuMTgsIDAuODIsIDAsIDAsIDAuOTU4MzNdLFxuICAgIFwiODczM1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4NzM0XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg3MzZcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODczOVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI4NzQxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI4NzQzXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg3NDRcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiODc0NVwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCI4NzQ2XCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg3NDdcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMTI3NzgsIDAsIDAuNTY4NzVdLFxuICAgIFwiODc2NFwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODc2OFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI4NzcxXCI6IFswLjAwMjIyLCAwLjUwMjIyLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg3NzZcIjogWzAuMDI0NDQsIDAuNTI0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODc4MVwiOiBbMC4wMDIyMiwgMC41MDIyMiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODAxXCI6IFswLjAwMjIyLCAwLjUwMjIyLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4MDRcIjogWzAuMTk2NjcsIDAuNjk2NjcsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODgwNVwiOiBbMC4xOTY2NywgMC42OTY2NywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODEwXCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg4MTFcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODgyNlwiOiBbMC4wODU1NiwgMC41ODU1NiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODI3XCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4MzRcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODgzNVwiOiBbMC4wODU1NiwgMC41ODU1NiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODM4XCI6IFswLjE5NjY3LCAwLjY5NjY3LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4MzlcIjogWzAuMTk2NjcsIDAuNjk2NjcsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODg0NlwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCI4ODQ5XCI6IFswLjE5NjY3LCAwLjY5NjY3LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4NTBcIjogWzAuMTk2NjcsIDAuNjk2NjcsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODg1MVwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCI4ODUyXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg4NTNcIjogWzAuMTMzMzMsIDAuNjMzMzMsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODg1NFwiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODU1XCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4NTZcIjogWzAuMTMzMzMsIDAuNjMzMzMsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODg1N1wiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODY2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc3XSxcbiAgICBcIjg4NjdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzAyNzddLFxuICAgIFwiODg2OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODY5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg5MDBcIjogWy0wLjAyNjM5LCAwLjQ3MzYxLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI4OTAxXCI6IFstMC4wMjYzOSwgMC40NzM2MSwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI4OTAyXCI6IFstMC4wMjc3OCwgMC40NzIyMiwgMCwgMCwgMC41NzVdLFxuICAgIFwiODk2OFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41MTExMV0sXG4gICAgXCI4OTY5XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjg5NzBcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiODk3MVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41MTExMV0sXG4gICAgXCI4OTk0XCI6IFstMC4xMzg4OSwgMC4zNjExMSwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4OTk1XCI6IFstMC4xMzg4OSwgMC4zNjExMSwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI5NjUxXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjAyMjIyXSxcbiAgICBcIjk2NTdcIjogWy0wLjAyNzc4LCAwLjQ3MjIyLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI5NjYxXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjAyMjIyXSxcbiAgICBcIjk2NjdcIjogWy0wLjAyNzc4LCAwLjQ3MjIyLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI5NzExXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjk4MjRcIjogWzAuMTI5NjMsIDAuNjk0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiOTgyNVwiOiBbMC4xMjk2MywgMC42OTQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI5ODI2XCI6IFswLjEyOTYzLCAwLjY5NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjk4MjdcIjogWzAuMTI5NjMsIDAuNjk0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiOTgzN1wiOiBbMCwgMC43NSwgMCwgMCwgMC40NDcyMl0sXG4gICAgXCI5ODM4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjQ0NzIyXSxcbiAgICBcIjk4MzlcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiMTAyMTZcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiMTAyMTdcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiMTA4MTVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuOV0sXG4gICAgXCIxMDkyN1wiOiBbMC4xOTY2NywgMC42OTY2NywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCIxMDkyOFwiOiBbMC4xOTY2NywgMC42OTY2NywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI1NzM3NlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMF1cbiAgfSxcbiAgXCJNYWluLUJvbGRJdGFsaWNcIjoge1xuICAgIFwiMzNcIjogWzAsIDAuNjk0NDQsIDAuMTE0MTcsIDAsIDAuMzg2MTFdLFxuICAgIFwiMzRcIjogWzAsIDAuNjk0NDQsIDAuMDc5MzksIDAsIDAuNjIwNTVdLFxuICAgIFwiMzVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDY4MzMsIDAsIDAuOTQ0NDRdLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAuMTI4NjEsIDAsIDAuOTQ0NDRdLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAuMDg1MjgsIDAsIDAuODg1NTVdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAuMTI5NDUsIDAsIDAuMzU1NTVdLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAuMTU4MDYsIDAsIDAuNDczMzNdLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAuMDMzMDYsIDAsIDAuNDczMzNdLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAuMTQzMzMsIDAsIDAuNTkxMTFdLFxuICAgIFwiNDNcIjogWzAuMTAzMzMsIDAuNjAzMzMsIDAuMDMzMDYsIDAsIDAuODg1NTVdLFxuICAgIFwiNDRcIjogWzAuMTk0NDQsIDAuMTQ3MjIsIDAsIDAsIDAuMzU1NTVdLFxuICAgIFwiNDVcIjogWzAsIDAuNDQ0NDQsIDAuMDI2MTEsIDAsIDAuNDE0NDRdLFxuICAgIFwiNDZcIjogWzAsIDAuMTQ3MjIsIDAsIDAsIDAuMzU1NTVdLFxuICAgIFwiNDdcIjogWzAuMjUsIDAuNzUsIDAuMTU4MDYsIDAsIDAuNTkxMTFdLFxuICAgIFwiNDhcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNDlcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTBcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTFcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTJcIjogWzAuMTk0NDQsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTNcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTRcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTVcIjogWzAuMTk0NDQsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTZcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTdcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNThcIjogWzAsIDAuNDQ0NDQsIDAuMDY2OTUsIDAsIDAuMzU1NTVdLFxuICAgIFwiNTlcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDY2OTUsIDAsIDAuMzU1NTVdLFxuICAgIFwiNjFcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLjA2ODMzLCAwLCAwLjg4NTU1XSxcbiAgICBcIjYzXCI6IFswLCAwLjY5NDQ0LCAwLjExNDcyLCAwLCAwLjU5MTExXSxcbiAgICBcIjY0XCI6IFswLCAwLjY5NDQ0LCAwLjA5MjA4LCAwLCAwLjg4NTU1XSxcbiAgICBcIjY1XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg2NTU1XSxcbiAgICBcIjY2XCI6IFswLCAwLjY4NjExLCAwLjA5OTIsIDAsIDAuODE2NjZdLFxuICAgIFwiNjdcIjogWzAsIDAuNjg2MTEsIDAuMTQyMDgsIDAsIDAuODI2NjZdLFxuICAgIFwiNjhcIjogWzAsIDAuNjg2MTEsIDAuMDkwNjIsIDAsIDAuODc1NTVdLFxuICAgIFwiNjlcIjogWzAsIDAuNjg2MTEsIDAuMTE0MzEsIDAsIDAuNzU2NjZdLFxuICAgIFwiNzBcIjogWzAsIDAuNjg2MTEsIDAuMTI5MDMsIDAsIDAuNzI3MjJdLFxuICAgIFwiNzFcIjogWzAsIDAuNjg2MTEsIDAuMDczNDcsIDAsIDAuODk1MjddLFxuICAgIFwiNzJcIjogWzAsIDAuNjg2MTEsIDAuMTcyMDgsIDAsIDAuODk2MV0sXG4gICAgXCI3M1wiOiBbMCwgMC42ODYxMSwgMC4xNTY4MSwgMCwgMC40NzE2Nl0sXG4gICAgXCI3NFwiOiBbMCwgMC42ODYxMSwgMC4xNDUsIDAsIDAuNjEwNTVdLFxuICAgIFwiNzVcIjogWzAsIDAuNjg2MTEsIDAuMTQyMDgsIDAsIDAuODk0OTldLFxuICAgIFwiNzZcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNjk3NzddLFxuICAgIFwiNzdcIjogWzAsIDAuNjg2MTEsIDAuMTcyMDgsIDAsIDEuMDcyNzddLFxuICAgIFwiNzhcIjogWzAsIDAuNjg2MTEsIDAuMTcyMDgsIDAsIDAuODk2MV0sXG4gICAgXCI3OVwiOiBbMCwgMC42ODYxMSwgMC4wOTA2MiwgMCwgMC44NTQ5OV0sXG4gICAgXCI4MFwiOiBbMCwgMC42ODYxMSwgMC4wOTkyLCAwLCAwLjc4NzIxXSxcbiAgICBcIjgxXCI6IFswLjE5NDQ0LCAwLjY4NjExLCAwLjA5MDYyLCAwLCAwLjg1NDk5XSxcbiAgICBcIjgyXCI6IFswLCAwLjY4NjExLCAwLjAyNTU5LCAwLCAwLjg1OTQ0XSxcbiAgICBcIjgzXCI6IFswLCAwLjY4NjExLCAwLjExMjY0LCAwLCAwLjY0OTk5XSxcbiAgICBcIjg0XCI6IFswLCAwLjY4NjExLCAwLjEyOTAzLCAwLCAwLjc5NjFdLFxuICAgIFwiODVcIjogWzAsIDAuNjg2MTEsIDAuMTcyMDgsIDAsIDAuODgwODNdLFxuICAgIFwiODZcIjogWzAsIDAuNjg2MTEsIDAuMTg2MjUsIDAsIDAuODY1NTVdLFxuICAgIFwiODdcIjogWzAsIDAuNjg2MTEsIDAuMTg2MjUsIDAsIDEuMTU5OTldLFxuICAgIFwiODhcIjogWzAsIDAuNjg2MTEsIDAuMTU2ODEsIDAsIDAuODY1NTVdLFxuICAgIFwiODlcIjogWzAsIDAuNjg2MTEsIDAuMTk4MDMsIDAsIDAuODY1NTVdLFxuICAgIFwiOTBcIjogWzAsIDAuNjg2MTEsIDAuMTQyMDgsIDAsIDAuNzA4ODhdLFxuICAgIFwiOTFcIjogWzAuMjUsIDAuNzUsIDAuMTg3NSwgMCwgMC4zNTYxMV0sXG4gICAgXCI5M1wiOiBbMC4yNSwgMC43NSwgMC4wOTk3MiwgMCwgMC4zNTYxMV0sXG4gICAgXCI5NFwiOiBbMCwgMC42OTQ0NCwgMC4wNjcwOSwgMCwgMC41OTExMV0sXG4gICAgXCI5NVwiOiBbMC4zMSwgMC4xMzQ0NCwgMC4wOTgxMSwgMCwgMC41OTExMV0sXG4gICAgXCI5N1wiOiBbMCwgMC40NDQ0NCwgMC4wOTQyNiwgMCwgMC41OTExMV0sXG4gICAgXCI5OFwiOiBbMCwgMC42OTQ0NCwgMC4wNzg2MSwgMCwgMC41MzIyMl0sXG4gICAgXCI5OVwiOiBbMCwgMC40NDQ0NCwgMC4wNTIyMiwgMCwgMC41MzIyMl0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjk0NDQsIDAuMTA4NjEsIDAsIDAuNTkxMTFdLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ0NDQ0LCAwLjA4NSwgMCwgMC41MzIyMl0sXG4gICAgXCIxMDJcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMjE3NzgsIDAsIDAuNF0sXG4gICAgXCIxMDNcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMTA1LCAwLCAwLjUzMjIyXSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMC4wOTQyNiwgMCwgMC41OTExMV0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjkzMjYsIDAuMTEzODcsIDAsIDAuMzU1NTVdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY5MzI2LCAwLjE2NzIsIDAsIDAuMzU1NTVdLFxuICAgIFwiMTA3XCI6IFswLCAwLjY5NDQ0LCAwLjExMTExLCAwLCAwLjUzMjIyXSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMC4xMDg2MSwgMCwgMC4yOTY2Nl0sXG4gICAgXCIxMDlcIjogWzAsIDAuNDQ0NDQsIDAuMDk0MjYsIDAsIDAuOTQ0NDRdLFxuICAgIFwiMTEwXCI6IFswLCAwLjQ0NDQ0LCAwLjA5NDI2LCAwLCAwLjY0OTk5XSxcbiAgICBcIjExMVwiOiBbMCwgMC40NDQ0NCwgMC4wNzg2MSwgMCwgMC41OTExMV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDc4NjEsIDAsIDAuNTkxMTFdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjEwNSwgMCwgMC41MzIyMl0sXG4gICAgXCIxMTRcIjogWzAsIDAuNDQ0NDQsIDAuMTExMTEsIDAsIDAuNTAxNjddLFxuICAgIFwiMTE1XCI6IFswLCAwLjQ0NDQ0LCAwLjA4MTY3LCAwLCAwLjQ4Njk0XSxcbiAgICBcIjExNlwiOiBbMCwgMC42MzQ5MiwgMC4wOTYzOSwgMCwgMC4zODVdLFxuICAgIFwiMTE3XCI6IFswLCAwLjQ0NDQ0LCAwLjA5NDI2LCAwLCAwLjYyMDU1XSxcbiAgICBcIjExOFwiOiBbMCwgMC40NDQ0NCwgMC4xMTExMSwgMCwgMC41MzIyMl0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDQ0NDQsIDAuMTExMTEsIDAsIDAuNzY3NzddLFxuICAgIFwiMTIwXCI6IFswLCAwLjQ0NDQ0LCAwLjEyNTgzLCAwLCAwLjU2MDU1XSxcbiAgICBcIjEyMVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4xMDUsIDAsIDAuNTYxNjZdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQ0NDQ0LCAwLjEzODg5LCAwLCAwLjQ5MDU1XSxcbiAgICBcIjEyNlwiOiBbMC4zNSwgMC4zNDQ0NCwgMC4xMTQ3MiwgMCwgMC41OTExMV0sXG4gICAgXCIxNjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODY4NTNdLFxuICAgIFwiMTY4XCI6IFswLCAwLjY5NDQ0LCAwLjExNDczLCAwLCAwLjU5MTExXSxcbiAgICBcIjE3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC45NDg4OF0sXG4gICAgXCIxODRcIjogWzAuMTcwMTQsIDAsIDAsIDAsIDAuNTMyMjJdLFxuICAgIFwiMTk4XCI6IFswLCAwLjY4NjExLCAwLjExNDMxLCAwLCAxLjAyMjc3XSxcbiAgICBcIjIxNlwiOiBbMC4wNDg2MSwgMC43MzQ3MiwgMC4wOTA2MiwgMCwgMC44ODU1NV0sXG4gICAgXCIyMjNcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDk3MzYsIDAsIDAuNjY1XSxcbiAgICBcIjIzMFwiOiBbMCwgMC40NDQ0NCwgMC4wODUsIDAsIDAuODI2NjZdLFxuICAgIFwiMjQ4XCI6IFswLjA5NzIyLCAwLjU0MTY3LCAwLjA5NDU4LCAwLCAwLjU5MTExXSxcbiAgICBcIjMwNVwiOiBbMCwgMC40NDQ0NCwgMC4wOTQyNiwgMCwgMC4zNTU1NV0sXG4gICAgXCIzMzhcIjogWzAsIDAuNjg2MTEsIDAuMTE0MzEsIDAsIDEuMTQwNTRdLFxuICAgIFwiMzM5XCI6IFswLCAwLjQ0NDQ0LCAwLjA4NSwgMCwgMC44MjY2Nl0sXG4gICAgXCI1NjdcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDQ2MTEsIDAsIDAuMzg1XSxcbiAgICBcIjcxMFwiOiBbMCwgMC42OTQ0NCwgMC4wNjcwOSwgMCwgMC41OTExMV0sXG4gICAgXCI3MTFcIjogWzAsIDAuNjMxOTQsIDAuMDgyNzEsIDAsIDAuNTkxMTFdLFxuICAgIFwiNzEzXCI6IFswLCAwLjU5NDQ0LCAwLjEwNDQ0LCAwLCAwLjU5MTExXSxcbiAgICBcIjcxNFwiOiBbMCwgMC42OTQ0NCwgMC4wODUyOCwgMCwgMC41OTExMV0sXG4gICAgXCI3MTVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTkxMTFdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLjEwMzMzLCAwLCAwLjU5MTExXSxcbiAgICBcIjcyOVwiOiBbMCwgMC42OTQ0NCwgMC4xMjk0NSwgMCwgMC4zNTU1NV0sXG4gICAgXCI3MzBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuOTQ4ODhdLFxuICAgIFwiNzMyXCI6IFswLCAwLjY5NDQ0LCAwLjExNDcyLCAwLCAwLjU5MTExXSxcbiAgICBcIjczM1wiOiBbMCwgMC42OTQ0NCwgMC4xMTQ3MiwgMCwgMC41OTExMV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjg2MTEsIDAuMTI5MDMsIDAsIDAuNjk3NzddLFxuICAgIFwiOTE2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjk0NDQ0XSxcbiAgICBcIjkyMFwiOiBbMCwgMC42ODYxMSwgMC4wOTA2MiwgMCwgMC44ODU1NV0sXG4gICAgXCI5MjNcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODA2NjZdLFxuICAgIFwiOTI2XCI6IFswLCAwLjY4NjExLCAwLjE1MDkyLCAwLCAwLjc2Nzc3XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42ODYxMSwgMC4xNzIwOCwgMCwgMC44OTYxXSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODYxMSwgMC4xMTQzMSwgMCwgMC44MjY2Nl0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjg2MTEsIDAuMTA3NzgsIDAsIDAuODg1NTVdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4NjExLCAwLjA1NjMyLCAwLCAwLjgyNjY2XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODYxMSwgMC4xMDc3OCwgMCwgMC44ODU1NV0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjg2MTEsIDAuMDk5MiwgMCwgMC44MjY2Nl0sXG4gICAgXCI4MjExXCI6IFswLCAwLjQ0NDQ0LCAwLjA5ODExLCAwLCAwLjU5MTExXSxcbiAgICBcIjgyMTJcIjogWzAsIDAuNDQ0NDQsIDAuMDk4MTEsIDAsIDEuMTgyMjFdLFxuICAgIFwiODIxNlwiOiBbMCwgMC42OTQ0NCwgMC4xMjk0NSwgMCwgMC4zNTU1NV0sXG4gICAgXCI4MjE3XCI6IFswLCAwLjY5NDQ0LCAwLjEyOTQ1LCAwLCAwLjM1NTU1XSxcbiAgICBcIjgyMjBcIjogWzAsIDAuNjk0NDQsIDAuMTY3NzIsIDAsIDAuNjIwNTVdLFxuICAgIFwiODIyMVwiOiBbMCwgMC42OTQ0NCwgMC4wNzkzOSwgMCwgMC42MjA1NV1cbiAgfSxcbiAgXCJNYWluLUl0YWxpY1wiOiB7XG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMC4xMjQxNywgMCwgMC4zMDY2N10sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMC4wNjk2MSwgMCwgMC41MTQ0NF0sXG4gICAgXCIzNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wNjYxNiwgMCwgMC44MTc3N10sXG4gICAgXCIzN1wiOiBbMC4wNTU1NiwgMC43NSwgMC4xMzYzOSwgMCwgMC44MTc3N10sXG4gICAgXCIzOFwiOiBbMCwgMC42OTQ0NCwgMC4wOTY5NCwgMCwgMC43NjY2Nl0sXG4gICAgXCIzOVwiOiBbMCwgMC42OTQ0NCwgMC4xMjQxNywgMCwgMC4zMDY2N10sXG4gICAgXCI0MFwiOiBbMC4yNSwgMC43NSwgMC4xNjE5NCwgMCwgMC40MDg4OV0sXG4gICAgXCI0MVwiOiBbMC4yNSwgMC43NSwgMC4wMzY5NCwgMCwgMC40MDg4OV0sXG4gICAgXCI0MlwiOiBbMCwgMC43NSwgMC4xNDkxNywgMCwgMC41MTExMV0sXG4gICAgXCI0M1wiOiBbMC4wNTY2NywgMC41NjE2NywgMC4wMzY5NCwgMCwgMC43NjY2Nl0sXG4gICAgXCI0NFwiOiBbMC4xOTQ0NCwgMC4xMDU1NiwgMCwgMCwgMC4zMDY2N10sXG4gICAgXCI0NVwiOiBbMCwgMC40MzA1NiwgMC4wMjgyNiwgMCwgMC4zNTc3OF0sXG4gICAgXCI0NlwiOiBbMCwgMC4xMDU1NiwgMCwgMCwgMC4zMDY2N10sXG4gICAgXCI0N1wiOiBbMC4yNSwgMC43NSwgMC4xNjE5NCwgMCwgMC41MTExMV0sXG4gICAgXCI0OFwiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI0OVwiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1MFwiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1MVwiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1MlwiOiBbMC4xOTQ0NCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1M1wiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1NFwiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1NVwiOiBbMC4xOTQ0NCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1NlwiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1N1wiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1OFwiOiBbMCwgMC40MzA1NiwgMC4wNTgyLCAwLCAwLjMwNjY3XSxcbiAgICBcIjU5XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjA1ODIsIDAsIDAuMzA2NjddLFxuICAgIFwiNjFcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLjA2NjE2LCAwLCAwLjc2NjY2XSxcbiAgICBcIjYzXCI6IFswLCAwLjY5NDQ0LCAwLjEyMjUsIDAsIDAuNTExMTFdLFxuICAgIFwiNjRcIjogWzAsIDAuNjk0NDQsIDAuMDk1OTcsIDAsIDAuNzY2NjZdLFxuICAgIFwiNjVcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzQzMzNdLFxuICAgIFwiNjZcIjogWzAsIDAuNjgzMzMsIDAuMTAyNTcsIDAsIDAuNzAzODldLFxuICAgIFwiNjdcIjogWzAsIDAuNjgzMzMsIDAuMTQ1MjgsIDAsIDAuNzE1NTVdLFxuICAgIFwiNjhcIjogWzAsIDAuNjgzMzMsIDAuMDk0MDMsIDAsIDAuNzU1XSxcbiAgICBcIjY5XCI6IFswLCAwLjY4MzMzLCAwLjEyMDI4LCAwLCAwLjY3ODMzXSxcbiAgICBcIjcwXCI6IFswLCAwLjY4MzMzLCAwLjEzMzA1LCAwLCAwLjY1Mjc3XSxcbiAgICBcIjcxXCI6IFswLCAwLjY4MzMzLCAwLjA4NzIyLCAwLCAwLjc3MzYxXSxcbiAgICBcIjcyXCI6IFswLCAwLjY4MzMzLCAwLjE2Mzg5LCAwLCAwLjc0MzMzXSxcbiAgICBcIjczXCI6IFswLCAwLjY4MzMzLCAwLjE1ODA2LCAwLCAwLjM4NTU1XSxcbiAgICBcIjc0XCI6IFswLCAwLjY4MzMzLCAwLjE0MDI4LCAwLCAwLjUyNV0sXG4gICAgXCI3NVwiOiBbMCwgMC42ODMzMywgMC4xNDUyOCwgMCwgMC43Njg4OF0sXG4gICAgXCI3NlwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42MjcyMl0sXG4gICAgXCI3N1wiOiBbMCwgMC42ODMzMywgMC4xNjM4OSwgMCwgMC44OTY2Nl0sXG4gICAgXCI3OFwiOiBbMCwgMC42ODMzMywgMC4xNjM4OSwgMCwgMC43NDMzM10sXG4gICAgXCI3OVwiOiBbMCwgMC42ODMzMywgMC4wOTQwMywgMCwgMC43NjY2Nl0sXG4gICAgXCI4MFwiOiBbMCwgMC42ODMzMywgMC4xMDI1NywgMCwgMC42NzgzM10sXG4gICAgXCI4MVwiOiBbMC4xOTQ0NCwgMC42ODMzMywgMC4wOTQwMywgMCwgMC43NjY2Nl0sXG4gICAgXCI4MlwiOiBbMCwgMC42ODMzMywgMC4wMzg2OCwgMCwgMC43Mjk0NF0sXG4gICAgXCI4M1wiOiBbMCwgMC42ODMzMywgMC4xMTk3MiwgMCwgMC41NjIyMl0sXG4gICAgXCI4NFwiOiBbMCwgMC42ODMzMywgMC4xMzMwNSwgMCwgMC43MTU1NV0sXG4gICAgXCI4NVwiOiBbMCwgMC42ODMzMywgMC4xNjM4OSwgMCwgMC43NDMzM10sXG4gICAgXCI4NlwiOiBbMCwgMC42ODMzMywgMC4xODM2MSwgMCwgMC43NDMzM10sXG4gICAgXCI4N1wiOiBbMCwgMC42ODMzMywgMC4xODM2MSwgMCwgMC45OTg4OF0sXG4gICAgXCI4OFwiOiBbMCwgMC42ODMzMywgMC4xNTgwNiwgMCwgMC43NDMzM10sXG4gICAgXCI4OVwiOiBbMCwgMC42ODMzMywgMC4xOTM4MywgMCwgMC43NDMzM10sXG4gICAgXCI5MFwiOiBbMCwgMC42ODMzMywgMC4xNDUyOCwgMCwgMC42MTMzM10sXG4gICAgXCI5MVwiOiBbMC4yNSwgMC43NSwgMC4xODc1LCAwLCAwLjMwNjY3XSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLjEwNTI4LCAwLCAwLjMwNjY3XSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLjA2NjQ2LCAwLCAwLjUxMTExXSxcbiAgICBcIjk1XCI6IFswLjMxLCAwLjEyMDU2LCAwLjA5MjA4LCAwLCAwLjUxMTExXSxcbiAgICBcIjk3XCI6IFswLCAwLjQzMDU2LCAwLjA3NjcxLCAwLCAwLjUxMTExXSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLjA2MzEyLCAwLCAwLjQ2XSxcbiAgICBcIjk5XCI6IFswLCAwLjQzMDU2LCAwLjA1NjUzLCAwLCAwLjQ2XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMC4xMDMzMywgMCwgMC41MTExMV0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDMwNTYsIDAuMDc1MTQsIDAsIDAuNDZdLFxuICAgIFwiMTAyXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjIxMTk0LCAwLCAwLjMwNjY3XSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wODg0NywgMCwgMC40Nl0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAuMDc2NzEsIDAsIDAuNTExMTFdLFxuICAgIFwiMTA1XCI6IFswLCAwLjY1NTM2LCAwLjEwMTksIDAsIDAuMzA2NjddLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY1NTM2LCAwLjE0NDY3LCAwLCAwLjMwNjY3XSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMC4xMDc2NCwgMCwgMC40Nl0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjk0NDQsIDAuMTAzMzMsIDAsIDAuMjU1NTVdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQzMDU2LCAwLjA3NjcxLCAwLCAwLjgxNzc3XSxcbiAgICBcIjExMFwiOiBbMCwgMC40MzA1NiwgMC4wNzY3MSwgMCwgMC41NjIyMl0sXG4gICAgXCIxMTFcIjogWzAsIDAuNDMwNTYsIDAuMDYzMTIsIDAsIDAuNTExMTFdLFxuICAgIFwiMTEyXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjA2MzEyLCAwLCAwLjUxMTExXSxcbiAgICBcIjExM1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wODg0NywgMCwgMC40Nl0sXG4gICAgXCIxMTRcIjogWzAsIDAuNDMwNTYsIDAuMTA3NjQsIDAsIDAuNDIxNjZdLFxuICAgIFwiMTE1XCI6IFswLCAwLjQzMDU2LCAwLjA4MjA4LCAwLCAwLjQwODg5XSxcbiAgICBcIjExNlwiOiBbMCwgMC42MTUwOCwgMC4wOTQ4NiwgMCwgMC4zMzIyMl0sXG4gICAgXCIxMTdcIjogWzAsIDAuNDMwNTYsIDAuMDc2NzEsIDAsIDAuNTM2NjZdLFxuICAgIFwiMTE4XCI6IFswLCAwLjQzMDU2LCAwLjEwNzY0LCAwLCAwLjQ2XSxcbiAgICBcIjExOVwiOiBbMCwgMC40MzA1NiwgMC4xMDc2NCwgMCwgMC42NjQ0NF0sXG4gICAgXCIxMjBcIjogWzAsIDAuNDMwNTYsIDAuMTIwNDIsIDAsIDAuNDYzODldLFxuICAgIFwiMTIxXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjA4ODQ3LCAwLCAwLjQ4NTU1XSxcbiAgICBcIjEyMlwiOiBbMCwgMC40MzA1NiwgMC4xMjI5MiwgMCwgMC40MDg4OV0sXG4gICAgXCIxMjZcIjogWzAuMzUsIDAuMzE3ODYsIDAuMTE1ODUsIDAsIDAuNTExMTFdLFxuICAgIFwiMTYzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc2OTA5XSxcbiAgICBcIjE2OFwiOiBbMCwgMC42Njc4NiwgMC4xMDQ3NCwgMCwgMC41MTExMV0sXG4gICAgXCIxNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODMxMjldLFxuICAgIFwiMTg0XCI6IFswLjE3MDE0LCAwLCAwLCAwLCAwLjQ2XSxcbiAgICBcIjE5OFwiOiBbMCwgMC42ODMzMywgMC4xMjAyOCwgMCwgMC44ODI3N10sXG4gICAgXCIyMTZcIjogWzAuMDQ4NjEsIDAuNzMxOTQsIDAuMDk0MDMsIDAsIDAuNzY2NjZdLFxuICAgIFwiMjIzXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjEwNTE0LCAwLCAwLjUzNjY2XSxcbiAgICBcIjIzMFwiOiBbMCwgMC40MzA1NiwgMC4wNzUxNCwgMCwgMC43MTU1NV0sXG4gICAgXCIyNDhcIjogWzAuMDk3MjIsIDAuNTI3NzgsIDAuMDkxOTQsIDAsIDAuNTExMTFdLFxuICAgIFwiMzA1XCI6IFswLCAwLjQzMDU2LCAwLCAwLjAyNzc4LCAwLjMyMjQ2XSxcbiAgICBcIjMzOFwiOiBbMCwgMC42ODMzMywgMC4xMjAyOCwgMCwgMC45ODQ5OV0sXG4gICAgXCIzMzlcIjogWzAsIDAuNDMwNTYsIDAuMDc1MTQsIDAsIDAuNzE1NTVdLFxuICAgIFwiNTY3XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLjA4MzM0LCAwLjM4NDAzXSxcbiAgICBcIjcxMFwiOiBbMCwgMC42OTQ0NCwgMC4wNjY0NiwgMCwgMC41MTExMV0sXG4gICAgXCI3MTFcIjogWzAsIDAuNjI4NDcsIDAuMDgyOTUsIDAsIDAuNTExMTFdLFxuICAgIFwiNzEzXCI6IFswLCAwLjU2MTY3LCAwLjEwMzMzLCAwLCAwLjUxMTExXSxcbiAgICBcIjcxNFwiOiBbMCwgMC42OTQ0NCwgMC4wOTY5NCwgMCwgMC41MTExMV0sXG4gICAgXCI3MTVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLjEwODA2LCAwLCAwLjUxMTExXSxcbiAgICBcIjcyOVwiOiBbMCwgMC42Njc4NiwgMC4xMTc1MiwgMCwgMC4zMDY2N10sXG4gICAgXCI3MzBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODMxMjldLFxuICAgIFwiNzMyXCI6IFswLCAwLjY2Nzg2LCAwLjExNTg1LCAwLCAwLjUxMTExXSxcbiAgICBcIjczM1wiOiBbMCwgMC42OTQ0NCwgMC4xMjI1LCAwLCAwLjUxMTExXSxcbiAgICBcIjkxNVwiOiBbMCwgMC42ODMzMywgMC4xMzMwNSwgMCwgMC42MjcyMl0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuODE3NzddLFxuICAgIFwiOTIwXCI6IFswLCAwLjY4MzMzLCAwLjA5NDAzLCAwLCAwLjc2NjY2XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42OTIyMl0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjgzMzMsIDAuMTUyOTQsIDAsIDAuNjY0NDRdLFxuICAgIFwiOTI4XCI6IFswLCAwLjY4MzMzLCAwLjE2Mzg5LCAwLCAwLjc0MzMzXSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODMzMywgMC4xMjAyOCwgMCwgMC43MTU1NV0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjgzMzMsIDAuMTExMTEsIDAsIDAuNzY2NjZdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4MzMzLCAwLjA1OTg2LCAwLCAwLjcxNTU1XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODMzMywgMC4xMTExMSwgMCwgMC43NjY2Nl0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjgzMzMsIDAuMTAyNTcsIDAsIDAuNzE1NTVdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40MzA1NiwgMC4wOTIwOCwgMCwgMC41MTExMV0sXG4gICAgXCI4MjEyXCI6IFswLCAwLjQzMDU2LCAwLjA5MjA4LCAwLCAxLjAyMjIyXSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAuMTI0MTcsIDAsIDAuMzA2NjddLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMC4xMjQxNywgMCwgMC4zMDY2N10sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLjE2ODUsIDAsIDAuNTE0NDRdLFxuICAgIFwiODIyMVwiOiBbMCwgMC42OTQ0NCwgMC4wNjk2MSwgMCwgMC41MTQ0NF0sXG4gICAgXCI4NDYzXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjU0MDI4XVxuICB9LFxuICBcIk1haW4tUmVndWxhclwiOiB7XG4gICAgXCIzMlwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjM1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjM2XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMzg4ODldLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMzg4ODldLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCI0M1wiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI0NFwiOiBbMC4xOTQ0NCwgMC4xMDU1NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0NVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC4zMzMzM10sXG4gICAgXCI0NlwiOiBbMCwgMC4xMDU1NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0N1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjQ4XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNDlcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1MFwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjUxXCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTJcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1M1wiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjU0XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTVcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1NlwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjU3XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNThcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNTlcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNjBcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjYxXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI2MlwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiNjRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNjVcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzVdLFxuICAgIFwiNjZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzA4MzRdLFxuICAgIFwiNjdcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiNjhcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzYzODldLFxuICAgIFwiNjlcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjgwNTZdLFxuICAgIFwiNzBcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjUyNzhdLFxuICAgIFwiNzFcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzg0NzJdLFxuICAgIFwiNzJcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzVdLFxuICAgIFwiNzNcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuMzYxMTFdLFxuICAgIFwiNzRcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNTEzODldLFxuICAgIFwiNzVcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNzZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjI1XSxcbiAgICBcIjc3XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjkxNjY3XSxcbiAgICBcIjc4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc1XSxcbiAgICBcIjc5XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjgwXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjY4MDU2XSxcbiAgICBcIjgxXCI6IFswLjE5NDQ0LCAwLjY4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjgyXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjczNjExXSxcbiAgICBcIjgzXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg0XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg1XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc1XSxcbiAgICBcIjg2XCI6IFswLCAwLjY4MzMzLCAwLjAxMzg5LCAwLCAwLjc1XSxcbiAgICBcIjg3XCI6IFswLCAwLjY4MzMzLCAwLjAxMzg5LCAwLCAxLjAyNzc4XSxcbiAgICBcIjg4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc1XSxcbiAgICBcIjg5XCI6IFswLCAwLjY4MzMzLCAwLjAyNSwgMCwgMC43NV0sXG4gICAgXCI5MFwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42MTExMV0sXG4gICAgXCI5MVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI5MlwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiOTVcIjogWzAuMzEsIDAuMTIwNTYsIDAuMDI3NzgsIDAsIDAuNV0sXG4gICAgXCI5N1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjk5XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMTAyXCI6IFswLCAwLjY5NDQ0LCAwLjA3Nzc4LCAwLCAwLjMwNTU2XSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wMTM4OSwgMCwgMC41XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjY3ODYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY2Nzg2LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjExMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMTFcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjExNFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC4zOTE2N10sXG4gICAgXCIxMTVcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuMzk0NDVdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYxNTA4LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjExN1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMThcIjogWzAsIDAuNDMwNTYsIDAuMDEzODksIDAsIDAuNTI3NzhdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQzMDU2LCAwLjAxMzg5LCAwLCAwLjcyMjIyXSxcbiAgICBcIjEyMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDEzODksIDAsIDAuNTI3NzhdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEyM1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjEyNFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCIxMjVcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCIxMjZcIjogWzAuMzUsIDAuMzE3ODYsIDAsIDAsIDAuNV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMTY3XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjE2OFwiOiBbMCwgMC42Njc4NiwgMCwgMCwgMC41XSxcbiAgICBcIjE3MlwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCIxNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzVdLFxuICAgIFwiMTc3XCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjE4MlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCIxODRcIjogWzAuMTcwMTQsIDAsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMTk4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjkwMjc4XSxcbiAgICBcIjIxNVwiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIyMTZcIjogWzAuMDQ4NjEsIDAuNzMxOTQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiMjIzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiMjMwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjI0N1wiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIyNDhcIjogWzAuMDk3MjIsIDAuNTI3NzgsIDAsIDAsIDAuNV0sXG4gICAgXCIzMDVcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiMzM4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAxLjAxMzg5XSxcbiAgICBcIjMzOVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NjdcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiNzEwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzExXCI6IFswLCAwLjYyODQ3LCAwLCAwLCAwLjVdLFxuICAgIFwiNzEzXCI6IFswLCAwLjU2Nzc4LCAwLCAwLCAwLjVdLFxuICAgIFwiNzE0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzE1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzI5XCI6IFswLCAwLjY2Nzg2LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjczMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43NV0sXG4gICAgXCI3MzJcIjogWzAsIDAuNjY3ODYsIDAsIDAsIDAuNV0sXG4gICAgXCI3MzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjI1XSxcbiAgICBcIjkxNlwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI5MjBcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTIzXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjY5NDQ1XSxcbiAgICBcIjkyNlwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MjhcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzVdLFxuICAgIFwiOTMxXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjkzM1wiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5MzRcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiOTM2XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjkzN1wiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4MjExXCI6IFswLCAwLjQzMDU2LCAwLjAyNzc4LCAwLCAwLjVdLFxuICAgIFwiODIxMlwiOiBbMCwgMC40MzA1NiwgMC4wMjc3OCwgMCwgMS4wXSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiODIyMVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjgyMjRcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiODIyNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCI4MjMwXCI6IFswLCAwLjEyLCAwLCAwLCAxLjE3Ml0sXG4gICAgXCI4MjQyXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjI3NV0sXG4gICAgXCI4NDA3XCI6IFswLCAwLjcxNDQ0LCAwLjE1MzgyLCAwLCAwLjVdLFxuICAgIFwiODQ2M1wiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC41NDAyOF0sXG4gICAgXCI4NDY1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg0NjdcIjogWzAsIDAuNjk0NDQsIDAsIDAuMTExMTEsIDAuNDE2NjddLFxuICAgIFwiODQ3MlwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4xMTExMSwgMC42MzY0Nl0sXG4gICAgXCI4NDc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg1MDFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODU5MlwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NTkzXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiODU5NFwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NTk1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiODU5NlwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NTk3XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiODU5OFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4wXSxcbiAgICBcIjg1OTlcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjAwXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjBdLFxuICAgIFwiODYwMVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MTRcIjogWzAuMDExLCAwLjUxMSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MTdcIjogWzAuMDExLCAwLjUxMSwgMCwgMCwgMS4xMjZdLFxuICAgIFwiODYxOFwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjEyNl0sXG4gICAgXCI4NjM2XCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2MzdcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY0MFwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjQxXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTJcIjogWzAuMDExLCAwLjY3MSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTZcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY1N1wiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4NjU4XCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTlcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODY2MFwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjYxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg3MDRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODcwNlwiOiBbMCwgMC42OTQ0NCwgMC4wNTU1NiwgMC4wODMzNCwgMC41MzA5XSxcbiAgICBcIjg3MDdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODcwOVwiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjg3MTFcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODcxMlwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODcxNVwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODcyMlwiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzIzXCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3MjVcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzI2XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiODcyN1wiOiBbLTAuMDM0NzIsIDAuNDY1MjgsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzI4XCI6IFstMC4wNTU1NSwgMC40NDQ0NSwgMCwgMCwgMC41XSxcbiAgICBcIjg3MjlcIjogWy0wLjA1NTU1LCAwLjQ0NDQ1LCAwLCAwLCAwLjVdLFxuICAgIFwiODczMFwiOiBbMC4yLCAwLjgsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODczM1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzM0XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAxLjBdLFxuICAgIFwiODczNlwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4NzM5XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjg3NDFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzQzXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg3NDRcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODc0NVwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NzQ2XCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg3NDdcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMTExMTEsIDAsIDAuNDE2NjddLFxuICAgIFwiODc2NFwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc2OFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4NzcxXCI6IFstMC4wMzYyNSwgMC40NjM3NSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzczXCI6IFstMC4wMjIsIDAuNTg5LCAwLCAwLCAxLjBdLFxuICAgIFwiODc3NlwiOiBbLTAuMDE2ODgsIDAuNDgzMTIsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc4MVwiOiBbLTAuMDM2MjUsIDAuNDYzNzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc4NFwiOiBbLTAuMTMzLCAwLjY3LCAwLCAwLCAwLjc3OF0sXG4gICAgXCI4ODAxXCI6IFstMC4wMzYyNSwgMC40NjM3NSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODA0XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MDVcIjogWzAuMTM1OTcsIDAuNjM1OTcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgxMFwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDEuMF0sXG4gICAgXCI4ODExXCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMS4wXSxcbiAgICBcIjg4MjZcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MjdcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzRcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzVcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzhcIjogWzAuMTM1OTcsIDAuNjM1OTcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgzOVwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODQ2XCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg4NDlcIjogWzAuMTM1OTcsIDAuNjM1OTcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg1MFwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODUxXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg4NTJcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODg1M1wiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODU0XCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NTVcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg1NlwiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODU3XCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NjZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODg2N1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4ODY4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NjlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg3MlwiOiBbMC4yNDksIDAuNzUsIDAsIDAsIDAuODY3XSxcbiAgICBcIjg5MDBcIjogWy0wLjA1NTU1LCAwLjQ0NDQ1LCAwLCAwLCAwLjVdLFxuICAgIFwiODkwMVwiOiBbLTAuMDU1NTUsIDAuNDQ0NDUsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODkwMlwiOiBbLTAuMDM0NzIsIDAuNDY1MjgsIDAsIDAsIDAuNV0sXG4gICAgXCI4OTA0XCI6IFswLjAwNSwgMC41MDUsIDAsIDAsIDAuOV0sXG4gICAgXCI4OTQyXCI6IFswLjAzLCAwLjksIDAsIDAsIDAuMjc4XSxcbiAgICBcIjg5NDNcIjogWy0wLjE5LCAwLjMxLCAwLCAwLCAxLjE3Ml0sXG4gICAgXCI4OTQ1XCI6IFstMC4xLCAwLjgyLCAwLCAwLCAxLjI4Ml0sXG4gICAgXCI4OTY4XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjg5NjlcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiODk3MFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCI4OTcxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjg5OTRcIjogWy0wLjE0MjM2LCAwLjM1NzY0LCAwLCAwLCAxLjBdLFxuICAgIFwiODk5NVwiOiBbLTAuMTQyMzYsIDAuMzU3NjQsIDAsIDAsIDEuMF0sXG4gICAgXCI5MTM2XCI6IFswLjI0NCwgMC43NDQsIDAsIDAsIDAuNDEyXSxcbiAgICBcIjkxMzdcIjogWzAuMjQ0LCAwLjc0NCwgMCwgMCwgMC40MTJdLFxuICAgIFwiOTY1MVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5NjU3XCI6IFstMC4wMzQ3MiwgMC40NjUyOCwgMCwgMCwgMC41XSxcbiAgICBcIjk2NjFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTY2N1wiOiBbLTAuMDM0NzIsIDAuNDY1MjgsIDAsIDAsIDAuNV0sXG4gICAgXCI5NzExXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjBdLFxuICAgIFwiOTgyNFwiOiBbMC4xMjk2MywgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5ODI1XCI6IFswLjEyOTYzLCAwLjY5NDQ0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjk4MjZcIjogWzAuMTI5NjMsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTgyN1wiOiBbMC4xMjk2MywgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5ODM3XCI6IFswLCAwLjc1LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjk4MzhcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuMzg4ODldLFxuICAgIFwiOTgzOVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCIxMDIxNlwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCIxMDIxN1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCIxMDIyMlwiOiBbMC4yNDQsIDAuNzQ0LCAwLCAwLCAwLjQxMl0sXG4gICAgXCIxMDIyM1wiOiBbMC4yNDQsIDAuNzQ0LCAwLCAwLCAwLjQxMl0sXG4gICAgXCIxMDIyOVwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjYwOV0sXG4gICAgXCIxMDIzMFwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjYzOF0sXG4gICAgXCIxMDIzMVwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjg1OV0sXG4gICAgXCIxMDIzMlwiOiBbMC4wMjQsIDAuNTI1LCAwLCAwLCAxLjYwOV0sXG4gICAgXCIxMDIzM1wiOiBbMC4wMjQsIDAuNTI1LCAwLCAwLCAxLjYzOF0sXG4gICAgXCIxMDIzNFwiOiBbMC4wMjQsIDAuNTI1LCAwLCAwLCAxLjg1OF0sXG4gICAgXCIxMDIzNlwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjYzOF0sXG4gICAgXCIxMDgxNVwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43NV0sXG4gICAgXCIxMDkyN1wiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkyOFwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM3NlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMF1cbiAgfSxcbiAgXCJNYXRoLUJvbGRJdGFsaWNcIjoge1xuICAgIFwiNjVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODY5NDRdLFxuICAgIFwiNjZcIjogWzAsIDAuNjg2MTEsIDAuMDQ4MzUsIDAsIDAuODY2NF0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODYxMSwgMC4wNjk3OSwgMCwgMC44MTY5NF0sXG4gICAgXCI2OFwiOiBbMCwgMC42ODYxMSwgMC4wMzE5NCwgMCwgMC45MzgxMl0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODYxMSwgMC4wNTQ1MSwgMCwgMC44MTAwN10sXG4gICAgXCI3MFwiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMC42ODg4OV0sXG4gICAgXCI3MVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44ODY3M10sXG4gICAgXCI3MlwiOiBbMCwgMC42ODYxMSwgMC4wODIyOSwgMCwgMC45ODIyOV0sXG4gICAgXCI3M1wiOiBbMCwgMC42ODYxMSwgMC4wNzc3OCwgMCwgMC41MTExMV0sXG4gICAgXCI3NFwiOiBbMCwgMC42ODYxMSwgMC4xMDA2OSwgMCwgMC42MzEyNV0sXG4gICAgXCI3NVwiOiBbMCwgMC42ODYxMSwgMC4wNjk3OSwgMCwgMC45NzExOF0sXG4gICAgXCI3NlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC43NTU1NV0sXG4gICAgXCI3N1wiOiBbMCwgMC42ODYxMSwgMC4xMTQyNCwgMCwgMS4xNDIwMV0sXG4gICAgXCI3OFwiOiBbMCwgMC42ODYxMSwgMC4xMTQyNCwgMCwgMC45NTAzNF0sXG4gICAgXCI3OVwiOiBbMCwgMC42ODYxMSwgMC4wMzE5NCwgMCwgMC44MzY2Nl0sXG4gICAgXCI4MFwiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMC43MjMwOV0sXG4gICAgXCI4MVwiOiBbMC4xOTQ0NCwgMC42ODYxMSwgMCwgMCwgMC44Njg2MV0sXG4gICAgXCI4MlwiOiBbMCwgMC42ODYxMSwgMC4wMDQyMSwgMCwgMC44NzIzNV0sXG4gICAgXCI4M1wiOiBbMCwgMC42ODYxMSwgMC4wNTM4MiwgMCwgMC42OTI3MV0sXG4gICAgXCI4NFwiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMC42MzY2M10sXG4gICAgXCI4NVwiOiBbMCwgMC42ODYxMSwgMC4xMTQyNCwgMCwgMC44MDAyN10sXG4gICAgXCI4NlwiOiBbMCwgMC42ODYxMSwgMC4yNTU1NSwgMCwgMC42Nzc3OF0sXG4gICAgXCI4N1wiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMS4wOTMwNV0sXG4gICAgXCI4OFwiOiBbMCwgMC42ODYxMSwgMC4wNzc3OCwgMCwgMC45NDcyMl0sXG4gICAgXCI4OVwiOiBbMCwgMC42ODYxMSwgMC4yNTU1NSwgMCwgMC42NzQ1OF0sXG4gICAgXCI5MFwiOiBbMCwgMC42ODYxMSwgMC4wNjk3OSwgMCwgMC43NzI1N10sXG4gICAgXCI5N1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC42MzI4N10sXG4gICAgXCI5OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MjA4M10sXG4gICAgXCI5OVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MTM0Ml0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjA5NzJdLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjU1MzYxXSxcbiAgICBcIjEwMlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4xMTA0MiwgMCwgMC41NjgwNl0sXG4gICAgXCIxMDNcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDM3MDQsIDAsIDAuNTQ0OV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY3NTldLFxuICAgIFwiMTA1XCI6IFswLCAwLjY5MzI2LCAwLCAwLCAwLjQwNDhdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY5MzI2LCAwLjA2MjIsIDAsIDAuNDcwODNdLFxuICAgIFwiMTA3XCI6IFswLCAwLjY5NDQ0LCAwLjAxODUyLCAwLCAwLjYwMzddLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLjAwODgsIDAsIDAuMzQ4MTVdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAxLjAzMjRdLFxuICAgIFwiMTEwXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjcxMjk2XSxcbiAgICBcIjExMVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41ODQ3Ml0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNjAwOTJdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAzNzA0LCAwLCAwLjU0MjEzXSxcbiAgICBcIjExNFwiOiBbMCwgMC40NDQ0NCwgMC4wMzE5NCwgMCwgMC41Mjg3XSxcbiAgICBcIjExNVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MzEyNV0sXG4gICAgXCIxMTZcIjogWzAsIDAuNjM0OTIsIDAsIDAsIDAuNDE1MjhdLFxuICAgIFwiMTE3XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjY4MTAyXSxcbiAgICBcIjExOFwiOiBbMCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC41NjY2Nl0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDQ0NDQsIDAuMDI3NzgsIDAsIDAuODMxNDhdLFxuICAgIFwiMTIwXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjY1OTAzXSxcbiAgICBcIjEyMVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC41OTAyOF0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDQ0NDQsIDAuMDQyMTMsIDAsIDAuNTU1MDldLFxuICAgIFwiOTE1XCI6IFswLCAwLjY4NjExLCAwLjE1OTcyLCAwLCAwLjY1Njk0XSxcbiAgICBcIjkxNlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45NTgzM10sXG4gICAgXCI5MjBcIjogWzAsIDAuNjg2MTEsIDAuMDMxOTQsIDAsIDAuODY3MjJdLFxuICAgIFwiOTIzXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjgwNTU1XSxcbiAgICBcIjkyNlwiOiBbMCwgMC42ODYxMSwgMC4wNzQ1OCwgMCwgMC44NDEyNV0sXG4gICAgXCI5MjhcIjogWzAsIDAuNjg2MTEsIDAuMDgyMjksIDAsIDAuOTgyMjldLFxuICAgIFwiOTMxXCI6IFswLCAwLjY4NjExLCAwLjA1NDUxLCAwLCAwLjg4NTA3XSxcbiAgICBcIjkzM1wiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMC42NzA4M10sXG4gICAgXCI5MzRcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiOTM2XCI6IFswLCAwLjY4NjExLCAwLjExNjUzLCAwLCAwLjcxNDAyXSxcbiAgICBcIjkzN1wiOiBbMCwgMC42ODYxMSwgMC4wNDgzNSwgMCwgMC44Nzg5XSxcbiAgICBcIjk0NVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC43NjA2NF0sXG4gICAgXCI5NDZcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDM0MDMsIDAsIDAuNjU5NzJdLFxuICAgIFwiOTQ3XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjA2Mzg5LCAwLCAwLjU5MDAzXSxcbiAgICBcIjk0OFwiOiBbMCwgMC42OTQ0NCwgMC4wMzgxOSwgMCwgMC41MjIyMl0sXG4gICAgXCI5NDlcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTI4ODJdLFxuICAgIFwiOTUwXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA2MjE1LCAwLCAwLjUwODMzXSxcbiAgICBcIjk1MVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC42XSxcbiAgICBcIjk1MlwiOiBbMCwgMC42OTQ0NCwgMC4wMzE5NCwgMCwgMC41NjE4XSxcbiAgICBcIjk1M1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40MTIwNF0sXG4gICAgXCI5NTRcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNjY3NTldLFxuICAgIFwiOTU1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY3MDgzXSxcbiAgICBcIjk1NlwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC43MDc4N10sXG4gICAgXCI5NTdcIjogWzAsIDAuNDQ0NDQsIDAuMDY4OTgsIDAsIDAuNTc2ODVdLFxuICAgIFwiOTU4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjAzMDIxLCAwLCAwLjUwODMzXSxcbiAgICBcIjk1OVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41ODQ3Ml0sXG4gICAgXCI5NjBcIjogWzAsIDAuNDQ0NDQsIDAuMDM3MDQsIDAsIDAuNjgyNDFdLFxuICAgIFwiOTYxXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjYxMThdLFxuICAgIFwiOTYyXCI6IFswLjA5NzIyLCAwLjQ0NDQ0LCAwLjA3OTE3LCAwLCAwLjQyMzYxXSxcbiAgICBcIjk2M1wiOiBbMCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC42ODU4OF0sXG4gICAgXCI5NjRcIjogWzAsIDAuNDQ0NDQsIDAuMTM0NzIsIDAsIDAuNTIwODNdLFxuICAgIFwiOTY1XCI6IFswLCAwLjQ0NDQ0LCAwLjAzNzA0LCAwLCAwLjYzMDU1XSxcbiAgICBcIjk2NlwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC43NDcyMl0sXG4gICAgXCI5NjdcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNzE4MDVdLFxuICAgIFwiOTY4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjAzNzA0LCAwLCAwLjc1ODMzXSxcbiAgICBcIjk2OVwiOiBbMCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC43MTc4Ml0sXG4gICAgXCI5NzdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjkxNTVdLFxuICAgIFwiOTgxXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjcxMjVdLFxuICAgIFwiOTgyXCI6IFswLCAwLjQ0NDQ0LCAwLjAzMTk0LCAwLCAwLjk3NV0sXG4gICAgXCIxMDA5XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjYxMThdLFxuICAgIFwiMTAxM1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40ODMzM11cbiAgfSxcbiAgXCJNYXRoLUl0YWxpY1wiOiB7XG4gICAgXCI2NVwiOiBbMCwgMC42ODMzMywgMCwgMC4xMzg4OSwgMC43NV0sXG4gICAgXCI2NlwiOiBbMCwgMC42ODMzMywgMC4wNTAxNywgMC4wODMzNCwgMC43NTg1MV0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODMzMywgMC4wNzE1MywgMC4wODMzNCwgMC43MTQ3Ml0sXG4gICAgXCI2OFwiOiBbMCwgMC42ODMzMywgMC4wMjc3OCwgMC4wNTU1NiwgMC44Mjc5Ml0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODMzMywgMC4wNTc2NCwgMC4wODMzNCwgMC43MzgyXSxcbiAgICBcIjcwXCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLjA4MzM0LCAwLjY0MzA2XSxcbiAgICBcIjcxXCI6IFswLCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjc4NjI1XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4MzMzLCAwLjA4MTI1LCAwLjA1NTU2LCAwLjgzMTI1XSxcbiAgICBcIjczXCI6IFswLCAwLjY4MzMzLCAwLjA3ODQ3LCAwLjExMTExLCAwLjQzOTU4XSxcbiAgICBcIjc0XCI6IFswLCAwLjY4MzMzLCAwLjA5NjE4LCAwLjE2NjY3LCAwLjU1NDUxXSxcbiAgICBcIjc1XCI6IFswLCAwLjY4MzMzLCAwLjA3MTUzLCAwLjA1NTU2LCAwLjg0OTMxXSxcbiAgICBcIjc2XCI6IFswLCAwLjY4MzMzLCAwLCAwLjAyNzc4LCAwLjY4MDU2XSxcbiAgICBcIjc3XCI6IFswLCAwLjY4MzMzLCAwLjEwOTAzLCAwLjA4MzM0LCAwLjk3MDE0XSxcbiAgICBcIjc4XCI6IFswLCAwLjY4MzMzLCAwLjEwOTAzLCAwLjA4MzM0LCAwLjgwMzQ3XSxcbiAgICBcIjc5XCI6IFswLCAwLjY4MzMzLCAwLjAyNzc4LCAwLjA4MzM0LCAwLjc2Mjc4XSxcbiAgICBcIjgwXCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLjA4MzM0LCAwLjY0MjAxXSxcbiAgICBcIjgxXCI6IFswLjE5NDQ0LCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjc5MDU2XSxcbiAgICBcIjgyXCI6IFswLCAwLjY4MzMzLCAwLjAwNzczLCAwLjA4MzM0LCAwLjc1OTI5XSxcbiAgICBcIjgzXCI6IFswLCAwLjY4MzMzLCAwLjA1NzY0LCAwLjA4MzM0LCAwLjYxMzJdLFxuICAgIFwiODRcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAuMDgzMzQsIDAuNTg0MzhdLFxuICAgIFwiODVcIjogWzAsIDAuNjgzMzMsIDAuMTA5MDMsIDAuMDI3NzgsIDAuNjgyNzhdLFxuICAgIFwiODZcIjogWzAsIDAuNjgzMzMsIDAuMjIyMjIsIDAsIDAuNTgzMzNdLFxuICAgIFwiODdcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAsIDAuOTQ0NDVdLFxuICAgIFwiODhcIjogWzAsIDAuNjgzMzMsIDAuMDc4NDcsIDAuMDgzMzQsIDAuODI4NDddLFxuICAgIFwiODlcIjogWzAsIDAuNjgzMzMsIDAuMjIyMjIsIDAsIDAuNTgwNTZdLFxuICAgIFwiOTBcIjogWzAsIDAuNjgzMzMsIDAuMDcxNTMsIDAuMDgzMzQsIDAuNjgyNjRdLFxuICAgIFwiOTdcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI4NTldLFxuICAgIFwiOThcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNDI5MTddLFxuICAgIFwiOTlcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDMyNzZdLFxuICAgIFwiMTAwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLjE2NjY3LCAwLjUyMDQ5XSxcbiAgICBcIjEwMVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40NjU2M10sXG4gICAgXCIxMDJcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMTA3NjQsIDAuMTY2NjcsIDAuNDg5NTldLFxuICAgIFwiMTAzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjAzNTg4LCAwLjAyNzc4LCAwLjQ3Njk3XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzYxNl0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjU5NTIsIDAsIDAsIDAuMzQ0NTFdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY1OTUyLCAwLjA1NzI0LCAwLCAwLjQxMTgxXSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMC4wMzE0OCwgMCwgMC41MjA2XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMC4wMTk2OCwgMC4wODMzNCwgMC4yOTgzOF0sXG4gICAgXCIxMDlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuODc4MDFdLFxuICAgIFwiMTEwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjYwMDIzXSxcbiAgICBcIjExMVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40ODQ3Ml0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNTAzMTNdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjAzNTg4LCAwLjA4MzM0LCAwLjQ0NjQxXSxcbiAgICBcIjExNFwiOiBbMCwgMC40MzA1NiwgMC4wMjc3OCwgMC4wNTU1NiwgMC40NTExNl0sXG4gICAgXCIxMTVcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDY4NzVdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYxNTA4LCAwLCAwLjA4MzM0LCAwLjM2MTExXSxcbiAgICBcIjExN1wiOiBbMCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC41NzI0Nl0sXG4gICAgXCIxMThcIjogWzAsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDI3NzgsIDAuNDg0NzJdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQzMDU2LCAwLjAyNjkxLCAwLjA4MzM0LCAwLjcxNTkyXSxcbiAgICBcIjEyMFwiOiBbMCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC41NzE1M10sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDU1NTYsIDAuNDkwMjhdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQzMDU2LCAwLjA0Mzk4LCAwLjA1NTU2LCAwLjQ2NTA1XSxcbiAgICBcIjkxNVwiOiBbMCwgMC42ODMzMywgMC4xMzg4OSwgMC4wODMzNCwgMC42MTUyOF0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjgzMzMsIDAsIDAuMTY2NjcsIDAuODMzMzRdLFxuICAgIFwiOTIwXCI6IFswLCAwLjY4MzMzLCAwLjAyNzc4LCAwLjA4MzM0LCAwLjc2Mjc4XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42ODMzMywgMCwgMC4xNjY2NywgMC42OTQ0NV0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjgzMzMsIDAuMDc1NjksIDAuMDgzMzQsIDAuNzQyMzZdLFxuICAgIFwiOTI4XCI6IFswLCAwLjY4MzMzLCAwLjA4MTI1LCAwLjA1NTU2LCAwLjgzMTI1XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODMzMywgMC4wNTc2NCwgMC4wODMzNCwgMC43Nzk4Nl0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAuMDU1NTYsIDAuNTgzMzNdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjY2NjY3XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODMzMywgMC4xMSwgMC4wNTU1NiwgMC42MTIyMl0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjgzMzMsIDAuMDUwMTcsIDAuMDgzMzQsIDAuNzcyNF0sXG4gICAgXCI5NDVcIjogWzAsIDAuNDMwNTYsIDAuMDAzNywgMC4wMjc3OCwgMC42Mzk3XSxcbiAgICBcIjk0NlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wNTI3OCwgMC4wODMzNCwgMC41NjU2M10sXG4gICAgXCI5NDdcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDU1NTYsIDAsIDAuNTE3NzNdLFxuICAgIFwiOTQ4XCI6IFswLCAwLjY5NDQ0LCAwLjAzNzg1LCAwLjA1NTU2LCAwLjQ0NDQ0XSxcbiAgICBcIjk0OVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wODMzNCwgMC40NjYzMl0sXG4gICAgXCI5NTBcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDczNzgsIDAuMDgzMzQsIDAuNDM3NV0sXG4gICAgXCI5NTFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDU1NTYsIDAuNDk2NTNdLFxuICAgIFwiOTUyXCI6IFswLCAwLjY5NDQ0LCAwLjAyNzc4LCAwLjA4MzM0LCAwLjQ2OTQ0XSxcbiAgICBcIjk1M1wiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC4zNTM5NF0sXG4gICAgXCI5NTRcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTc2MTZdLFxuICAgIFwiOTU1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjk1NlwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC42MDI1NV0sXG4gICAgXCI5NTdcIjogWzAsIDAuNDMwNTYsIDAuMDYzNjYsIDAuMDI3NzgsIDAuNDkzOThdLFxuICAgIFwiOTU4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA0NjAxLCAwLjExMTExLCAwLjQzNzVdLFxuICAgIFwiOTU5XCI6IFswLCAwLjQzMDU2LCAwLCAwLjA1NTU2LCAwLjQ4NDcyXSxcbiAgICBcIjk2MFwiOiBbMCwgMC40MzA1NiwgMC4wMzU4OCwgMCwgMC41NzAwM10sXG4gICAgXCI5NjFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNTE3MDJdLFxuICAgIFwiOTYyXCI6IFswLjA5NzIyLCAwLjQzMDU2LCAwLjA3OTg2LCAwLjA4MzM0LCAwLjM2Mjg1XSxcbiAgICBcIjk2M1wiOiBbMCwgMC40MzA1NiwgMC4wMzU4OCwgMCwgMC41NzE0MV0sXG4gICAgXCI5NjRcIjogWzAsIDAuNDMwNTYsIDAuMTEzMiwgMC4wMjc3OCwgMC40MzcxNV0sXG4gICAgXCI5NjVcIjogWzAsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDI3NzgsIDAuNTQwMjhdLFxuICAgIFwiOTY2XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLjA4MzM0LCAwLjY1NDE3XSxcbiAgICBcIjk2N1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC42MjU2OV0sXG4gICAgXCI5NjhcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDM1ODgsIDAuMTExMTEsIDAuNjUxMzldLFxuICAgIFwiOTY5XCI6IFswLCAwLjQzMDU2LCAwLjAzNTg4LCAwLCAwLjYyMjQ1XSxcbiAgICBcIjk3N1wiOiBbMCwgMC42OTQ0NCwgMCwgMC4wODMzNCwgMC41OTE0NF0sXG4gICAgXCI5ODFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAuMDgzMzQsIDAuNTk1ODNdLFxuICAgIFwiOTgyXCI6IFswLCAwLjQzMDU2LCAwLjAyNzc4LCAwLCAwLjgyODEzXSxcbiAgICBcIjEwMDlcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNTE3MDJdLFxuICAgIFwiMTAxM1wiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40MDU5XVxuICB9LFxuICBcIk1hdGgtUmVndWxhclwiOiB7XG4gICAgXCI2NVwiOiBbMCwgMC42ODMzMywgMCwgMC4xMzg4OSwgMC43NV0sXG4gICAgXCI2NlwiOiBbMCwgMC42ODMzMywgMC4wNTAxNywgMC4wODMzNCwgMC43NTg1MV0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODMzMywgMC4wNzE1MywgMC4wODMzNCwgMC43MTQ3Ml0sXG4gICAgXCI2OFwiOiBbMCwgMC42ODMzMywgMC4wMjc3OCwgMC4wNTU1NiwgMC44Mjc5Ml0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODMzMywgMC4wNTc2NCwgMC4wODMzNCwgMC43MzgyXSxcbiAgICBcIjcwXCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLjA4MzM0LCAwLjY0MzA2XSxcbiAgICBcIjcxXCI6IFswLCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjc4NjI1XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4MzMzLCAwLjA4MTI1LCAwLjA1NTU2LCAwLjgzMTI1XSxcbiAgICBcIjczXCI6IFswLCAwLjY4MzMzLCAwLjA3ODQ3LCAwLjExMTExLCAwLjQzOTU4XSxcbiAgICBcIjc0XCI6IFswLCAwLjY4MzMzLCAwLjA5NjE4LCAwLjE2NjY3LCAwLjU1NDUxXSxcbiAgICBcIjc1XCI6IFswLCAwLjY4MzMzLCAwLjA3MTUzLCAwLjA1NTU2LCAwLjg0OTMxXSxcbiAgICBcIjc2XCI6IFswLCAwLjY4MzMzLCAwLCAwLjAyNzc4LCAwLjY4MDU2XSxcbiAgICBcIjc3XCI6IFswLCAwLjY4MzMzLCAwLjEwOTAzLCAwLjA4MzM0LCAwLjk3MDE0XSxcbiAgICBcIjc4XCI6IFswLCAwLjY4MzMzLCAwLjEwOTAzLCAwLjA4MzM0LCAwLjgwMzQ3XSxcbiAgICBcIjc5XCI6IFswLCAwLjY4MzMzLCAwLjAyNzc4LCAwLjA4MzM0LCAwLjc2Mjc4XSxcbiAgICBcIjgwXCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLjA4MzM0LCAwLjY0MjAxXSxcbiAgICBcIjgxXCI6IFswLjE5NDQ0LCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjc5MDU2XSxcbiAgICBcIjgyXCI6IFswLCAwLjY4MzMzLCAwLjAwNzczLCAwLjA4MzM0LCAwLjc1OTI5XSxcbiAgICBcIjgzXCI6IFswLCAwLjY4MzMzLCAwLjA1NzY0LCAwLjA4MzM0LCAwLjYxMzJdLFxuICAgIFwiODRcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAuMDgzMzQsIDAuNTg0MzhdLFxuICAgIFwiODVcIjogWzAsIDAuNjgzMzMsIDAuMTA5MDMsIDAuMDI3NzgsIDAuNjgyNzhdLFxuICAgIFwiODZcIjogWzAsIDAuNjgzMzMsIDAuMjIyMjIsIDAsIDAuNTgzMzNdLFxuICAgIFwiODdcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAsIDAuOTQ0NDVdLFxuICAgIFwiODhcIjogWzAsIDAuNjgzMzMsIDAuMDc4NDcsIDAuMDgzMzQsIDAuODI4NDddLFxuICAgIFwiODlcIjogWzAsIDAuNjgzMzMsIDAuMjIyMjIsIDAsIDAuNTgwNTZdLFxuICAgIFwiOTBcIjogWzAsIDAuNjgzMzMsIDAuMDcxNTMsIDAuMDgzMzQsIDAuNjgyNjRdLFxuICAgIFwiOTdcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI4NTldLFxuICAgIFwiOThcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNDI5MTddLFxuICAgIFwiOTlcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDMyNzZdLFxuICAgIFwiMTAwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLjE2NjY3LCAwLjUyMDQ5XSxcbiAgICBcIjEwMVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40NjU2M10sXG4gICAgXCIxMDJcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMTA3NjQsIDAuMTY2NjcsIDAuNDg5NTldLFxuICAgIFwiMTAzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjAzNTg4LCAwLjAyNzc4LCAwLjQ3Njk3XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzYxNl0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjU5NTIsIDAsIDAsIDAuMzQ0NTFdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY1OTUyLCAwLjA1NzI0LCAwLCAwLjQxMTgxXSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMC4wMzE0OCwgMCwgMC41MjA2XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMC4wMTk2OCwgMC4wODMzNCwgMC4yOTgzOF0sXG4gICAgXCIxMDlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuODc4MDFdLFxuICAgIFwiMTEwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjYwMDIzXSxcbiAgICBcIjExMVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40ODQ3Ml0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNTAzMTNdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjAzNTg4LCAwLjA4MzM0LCAwLjQ0NjQxXSxcbiAgICBcIjExNFwiOiBbMCwgMC40MzA1NiwgMC4wMjc3OCwgMC4wNTU1NiwgMC40NTExNl0sXG4gICAgXCIxMTVcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDY4NzVdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYxNTA4LCAwLCAwLjA4MzM0LCAwLjM2MTExXSxcbiAgICBcIjExN1wiOiBbMCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC41NzI0Nl0sXG4gICAgXCIxMThcIjogWzAsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDI3NzgsIDAuNDg0NzJdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQzMDU2LCAwLjAyNjkxLCAwLjA4MzM0LCAwLjcxNTkyXSxcbiAgICBcIjEyMFwiOiBbMCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC41NzE1M10sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDU1NTYsIDAuNDkwMjhdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQzMDU2LCAwLjA0Mzk4LCAwLjA1NTU2LCAwLjQ2NTA1XSxcbiAgICBcIjkxNVwiOiBbMCwgMC42ODMzMywgMC4xMzg4OSwgMC4wODMzNCwgMC42MTUyOF0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjgzMzMsIDAsIDAuMTY2NjcsIDAuODMzMzRdLFxuICAgIFwiOTIwXCI6IFswLCAwLjY4MzMzLCAwLjAyNzc4LCAwLjA4MzM0LCAwLjc2Mjc4XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42ODMzMywgMCwgMC4xNjY2NywgMC42OTQ0NV0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjgzMzMsIDAuMDc1NjksIDAuMDgzMzQsIDAuNzQyMzZdLFxuICAgIFwiOTI4XCI6IFswLCAwLjY4MzMzLCAwLjA4MTI1LCAwLjA1NTU2LCAwLjgzMTI1XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODMzMywgMC4wNTc2NCwgMC4wODMzNCwgMC43Nzk4Nl0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAuMDU1NTYsIDAuNTgzMzNdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjY2NjY3XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODMzMywgMC4xMSwgMC4wNTU1NiwgMC42MTIyMl0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjgzMzMsIDAuMDUwMTcsIDAuMDgzMzQsIDAuNzcyNF0sXG4gICAgXCI5NDVcIjogWzAsIDAuNDMwNTYsIDAuMDAzNywgMC4wMjc3OCwgMC42Mzk3XSxcbiAgICBcIjk0NlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wNTI3OCwgMC4wODMzNCwgMC41NjU2M10sXG4gICAgXCI5NDdcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDU1NTYsIDAsIDAuNTE3NzNdLFxuICAgIFwiOTQ4XCI6IFswLCAwLjY5NDQ0LCAwLjAzNzg1LCAwLjA1NTU2LCAwLjQ0NDQ0XSxcbiAgICBcIjk0OVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wODMzNCwgMC40NjYzMl0sXG4gICAgXCI5NTBcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDczNzgsIDAuMDgzMzQsIDAuNDM3NV0sXG4gICAgXCI5NTFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDU1NTYsIDAuNDk2NTNdLFxuICAgIFwiOTUyXCI6IFswLCAwLjY5NDQ0LCAwLjAyNzc4LCAwLjA4MzM0LCAwLjQ2OTQ0XSxcbiAgICBcIjk1M1wiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC4zNTM5NF0sXG4gICAgXCI5NTRcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTc2MTZdLFxuICAgIFwiOTU1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjk1NlwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC42MDI1NV0sXG4gICAgXCI5NTdcIjogWzAsIDAuNDMwNTYsIDAuMDYzNjYsIDAuMDI3NzgsIDAuNDkzOThdLFxuICAgIFwiOTU4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA0NjAxLCAwLjExMTExLCAwLjQzNzVdLFxuICAgIFwiOTU5XCI6IFswLCAwLjQzMDU2LCAwLCAwLjA1NTU2LCAwLjQ4NDcyXSxcbiAgICBcIjk2MFwiOiBbMCwgMC40MzA1NiwgMC4wMzU4OCwgMCwgMC41NzAwM10sXG4gICAgXCI5NjFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNTE3MDJdLFxuICAgIFwiOTYyXCI6IFswLjA5NzIyLCAwLjQzMDU2LCAwLjA3OTg2LCAwLjA4MzM0LCAwLjM2Mjg1XSxcbiAgICBcIjk2M1wiOiBbMCwgMC40MzA1NiwgMC4wMzU4OCwgMCwgMC41NzE0MV0sXG4gICAgXCI5NjRcIjogWzAsIDAuNDMwNTYsIDAuMTEzMiwgMC4wMjc3OCwgMC40MzcxNV0sXG4gICAgXCI5NjVcIjogWzAsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDI3NzgsIDAuNTQwMjhdLFxuICAgIFwiOTY2XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLjA4MzM0LCAwLjY1NDE3XSxcbiAgICBcIjk2N1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC42MjU2OV0sXG4gICAgXCI5NjhcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDM1ODgsIDAuMTExMTEsIDAuNjUxMzldLFxuICAgIFwiOTY5XCI6IFswLCAwLjQzMDU2LCAwLjAzNTg4LCAwLCAwLjYyMjQ1XSxcbiAgICBcIjk3N1wiOiBbMCwgMC42OTQ0NCwgMCwgMC4wODMzNCwgMC41OTE0NF0sXG4gICAgXCI5ODFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAuMDgzMzQsIDAuNTk1ODNdLFxuICAgIFwiOTgyXCI6IFswLCAwLjQzMDU2LCAwLjAyNzc4LCAwLCAwLjgyODEzXSxcbiAgICBcIjEwMDlcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNTE3MDJdLFxuICAgIFwiMTAxM1wiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40MDU5XVxuICB9LFxuICBcIlNhbnNTZXJpZi1Cb2xkXCI6IHtcbiAgICBcIjMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjM2NjY3XSxcbiAgICBcIjM0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1ODM0XSxcbiAgICBcIjM1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjkxNjY3XSxcbiAgICBcIjM2XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAwLjU1XSxcbiAgICBcIjM3XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAxLjAyOTEyXSxcbiAgICBcIjM4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjgzMDU2XSxcbiAgICBcIjM5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjQwXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQyNzc4XSxcbiAgICBcIjQxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQyNzc4XSxcbiAgICBcIjQyXCI6IFswLCAwLjc1LCAwLCAwLCAwLjU1XSxcbiAgICBcIjQzXCI6IFswLjExNjY3LCAwLjYxNjY3LCAwLCAwLCAwLjg1NTU2XSxcbiAgICBcIjQ0XCI6IFswLjEwNTU2LCAwLjEzMDU2LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjQ1XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjM2NjY3XSxcbiAgICBcIjQ2XCI6IFswLCAwLjEzMDU2LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjQ3XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjU1XSxcbiAgICBcIjQ4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjQ5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjUwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjUxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjUyXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjUzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjU0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjU1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjU2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjU3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjU4XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjU5XCI6IFswLjEwNTU2LCAwLjQ1ODMzLCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjYxXCI6IFstMC4wOTM3NSwgMC40MDYyNSwgMCwgMCwgMC44NTU1Nl0sXG4gICAgXCI2M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MTk0NV0sXG4gICAgXCI2NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI2NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI2NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI2N1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MDI3OF0sXG4gICAgXCI2OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI2OVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NDE2N10sXG4gICAgXCI3MFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI3MVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI3MlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI3M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zMzA1Nl0sXG4gICAgXCI3NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MTk0NV0sXG4gICAgXCI3NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43NjM4OV0sXG4gICAgXCI3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41ODA1Nl0sXG4gICAgXCI3N1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC45Nzc3OF0sXG4gICAgXCI3OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI3OVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI4MFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MDI3OF0sXG4gICAgXCI4MVwiOiBbMC4xMDU1NiwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI4MlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MDI3OF0sXG4gICAgXCI4M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI4NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43NjM4OV0sXG4gICAgXCI4NlwiOiBbMCwgMC42OTQ0NCwgMC4wMTUyOCwgMCwgMC43MzMzNF0sXG4gICAgXCI4N1wiOiBbMCwgMC42OTQ0NCwgMC4wMTUyOCwgMCwgMS4wMzg4OV0sXG4gICAgXCI4OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI4OVwiOiBbMCwgMC42OTQ0NCwgMC4wMjc1LCAwLCAwLjczMzM0XSxcbiAgICBcIjkwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY3MjIzXSxcbiAgICBcIjkxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjM0MzA2XSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjM0MzA2XSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjk1XCI6IFswLjM1LCAwLjEwODMzLCAwLjAzMDU2LCAwLCAwLjU1XSxcbiAgICBcIjk3XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NjExMV0sXG4gICAgXCI5OVwiOiBbMCwgMC40NTgzMywgMCwgMCwgMC40ODg4OV0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTYxMTFdLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjEwMlwiOiBbMCwgMC42OTQ0NCwgMC4wNzYzOSwgMCwgMC4zMzYxMV0sXG4gICAgXCIxMDNcIjogWzAuMTk0NDQsIDAuNDU4MzMsIDAuMDE1MjgsIDAsIDAuNTVdLFxuICAgIFwiMTA0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU2MTExXSxcbiAgICBcIjEwNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNTU1Nl0sXG4gICAgXCIxMDZcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuMjg2MTFdLFxuICAgIFwiMTA3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjUzMDU2XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNTU1Nl0sXG4gICAgXCIxMDlcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuODY2NjddLFxuICAgIFwiMTEwXCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjU2MTExXSxcbiAgICBcIjExMVwiOiBbMCwgMC40NTgzMywgMCwgMCwgMC41NV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDU4MzMsIDAsIDAsIDAuNTYxMTFdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ1ODMzLCAwLCAwLCAwLjU2MTExXSxcbiAgICBcIjExNFwiOiBbMCwgMC40NTgzMywgMC4wMTUyOCwgMCwgMC4zNzIyMl0sXG4gICAgXCIxMTVcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuNDIxNjddLFxuICAgIFwiMTE2XCI6IFswLCAwLjU4OTI5LCAwLCAwLCAwLjQwNDE3XSxcbiAgICBcIjExN1wiOiBbMCwgMC40NTgzMywgMCwgMCwgMC41NjExMV0sXG4gICAgXCIxMThcIjogWzAsIDAuNDU4MzMsIDAuMDE1MjgsIDAsIDAuNV0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDU4MzMsIDAuMDE1MjgsIDAsIDAuNzQ0NDVdLFxuICAgIFwiMTIwXCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjVdLFxuICAgIFwiMTIxXCI6IFswLjE5NDQ0LCAwLjQ1ODMzLCAwLjAxNTI4LCAwLCAwLjVdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjQ3NjM5XSxcbiAgICBcIjEyNlwiOiBbMC4zNSwgMC4zNDQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCIxNjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiMTc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczMzM0XSxcbiAgICBcIjE4MFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCIxODRcIjogWzAuMTcwMTQsIDAsIDAsIDAsIDAuNDg4ODldLFxuICAgIFwiMzA1XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjI1NTU2XSxcbiAgICBcIjU2N1wiOiBbMC4xOTQ0NCwgMC40NTgzMywgMCwgMCwgMC4yODYxMV0sXG4gICAgXCI3MTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNzExXCI6IFswLCAwLjYzNTQyLCAwLCAwLCAwLjU1XSxcbiAgICBcIjcxM1wiOiBbMCwgMC42Mzc3OCwgMCwgMCwgMC41NV0sXG4gICAgXCI3MjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNzI5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjczMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI3MzJcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNzMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjkxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41ODA1Nl0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuOTE2NjddLFxuICAgIFwiOTIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg1NTU2XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NzIyM10sXG4gICAgXCI5MjZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzMzMzRdLFxuICAgIFwiOTI4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODU1NTZdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44NTU1Nl0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzk0NDVdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40NTgzMywgMC4wMzA1NiwgMCwgMC41NV0sXG4gICAgXCI4MjEyXCI6IFswLCAwLjQ1ODMzLCAwLjAzMDU2LCAwLCAxLjEwMDAxXSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zMDU1Nl0sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1ODM0XSxcbiAgICBcIjgyMjFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTU4MzRdXG4gIH0sXG4gIFwiU2Fuc1NlcmlmLUl0YWxpY1wiOiB7XG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMC4wNTczMywgMCwgMC4zMTk0NV0sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMC4wMDMxNiwgMCwgMC41XSxcbiAgICBcIjM1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA1MDg3LCAwLCAwLjgzMzM0XSxcbiAgICBcIjM2XCI6IFswLjA1NTU2LCAwLjc1LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAuMDMxMjYsIDAsIDAuODMzMzRdLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAuMDMwNTgsIDAsIDAuNzU4MzRdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAuMDc4MTYsIDAsIDAuMjc3NzhdLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAuMTMxNjQsIDAsIDAuMzg4ODldLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAuMDI1MzYsIDAsIDAuMzg4ODldLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAuMTE3NzUsIDAsIDAuNV0sXG4gICAgXCI0M1wiOiBbMC4wODMzMywgMC41ODMzMywgMC4wMjUzNiwgMCwgMC43Nzc3OF0sXG4gICAgXCI0NFwiOiBbMC4xMjUsIDAuMDgzMzMsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNDVcIjogWzAsIDAuNDQ0NDQsIDAuMDE5NDYsIDAsIDAuMzMzMzNdLFxuICAgIFwiNDZcIjogWzAsIDAuMDgzMzMsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNDdcIjogWzAuMjUsIDAuNzUsIDAuMTMxNjQsIDAsIDAuNV0sXG4gICAgXCI0OFwiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjQ5XCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNTBcIjogWzAsIDAuNjU1NTYsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCI1MVwiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjUyXCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNTNcIjogWzAsIDAuNjU1NTYsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCI1NFwiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjU1XCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNTZcIjogWzAsIDAuNjU1NTYsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCI1N1wiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjU4XCI6IFswLCAwLjQ0NDQ0LCAwLjAyNTAyLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjU5XCI6IFswLjEyNSwgMC40NDQ0NCwgMC4wMjUwMiwgMCwgMC4yNzc3OF0sXG4gICAgXCI2MVwiOiBbLTAuMTMsIDAuMzcsIDAuMDUwODcsIDAsIDAuNzc3NzhdLFxuICAgIFwiNjNcIjogWzAsIDAuNjk0NDQsIDAuMTE4MDksIDAsIDAuNDcyMjJdLFxuICAgIFwiNjRcIjogWzAsIDAuNjk0NDQsIDAuMDc1NTUsIDAsIDAuNjY2NjddLFxuICAgIFwiNjVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiNjZcIjogWzAsIDAuNjk0NDQsIDAuMDgyOTMsIDAsIDAuNjY2NjddLFxuICAgIFwiNjdcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNjM4ODldLFxuICAgIFwiNjhcIjogWzAsIDAuNjk0NDQsIDAuMDc1NTUsIDAsIDAuNzIyMjNdLFxuICAgIFwiNjlcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNTk3MjJdLFxuICAgIFwiNzBcIjogWzAsIDAuNjk0NDQsIDAuMTMzNzIsIDAsIDAuNTY5NDVdLFxuICAgIFwiNzFcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNjY2NjddLFxuICAgIFwiNzJcIjogWzAsIDAuNjk0NDQsIDAuMDgwOTQsIDAsIDAuNzA4MzRdLFxuICAgIFwiNzNcIjogWzAsIDAuNjk0NDQsIDAuMTMzNzIsIDAsIDAuMjc3NzhdLFxuICAgIFwiNzRcIjogWzAsIDAuNjk0NDQsIDAuMDgwOTQsIDAsIDAuNDcyMjJdLFxuICAgIFwiNzVcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNjk0NDVdLFxuICAgIFwiNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTQxNjddLFxuICAgIFwiNzdcIjogWzAsIDAuNjk0NDQsIDAuMDgwOTQsIDAsIDAuODc1XSxcbiAgICBcIjc4XCI6IFswLCAwLjY5NDQ0LCAwLjA4MDk0LCAwLCAwLjcwODM0XSxcbiAgICBcIjc5XCI6IFswLCAwLjY5NDQ0LCAwLjA3NTU1LCAwLCAwLjczNjExXSxcbiAgICBcIjgwXCI6IFswLCAwLjY5NDQ0LCAwLjA4MjkzLCAwLCAwLjYzODg5XSxcbiAgICBcIjgxXCI6IFswLjEyNSwgMC42OTQ0NCwgMC4wNzU1NSwgMCwgMC43MzYxMV0sXG4gICAgXCI4MlwiOiBbMCwgMC42OTQ0NCwgMC4wODI5MywgMCwgMC42NDU4NF0sXG4gICAgXCI4M1wiOiBbMCwgMC42OTQ0NCwgMC4wOTIwNSwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NFwiOiBbMCwgMC42OTQ0NCwgMC4xMzM3MiwgMCwgMC42ODA1Nl0sXG4gICAgXCI4NVwiOiBbMCwgMC42OTQ0NCwgMC4wODA5NCwgMCwgMC42ODc1XSxcbiAgICBcIjg2XCI6IFswLCAwLjY5NDQ0LCAwLjE2MTUsIDAsIDAuNjY2NjddLFxuICAgIFwiODdcIjogWzAsIDAuNjk0NDQsIDAuMTYxNSwgMCwgMC45NDQ0NV0sXG4gICAgXCI4OFwiOiBbMCwgMC42OTQ0NCwgMC4xMzM3MiwgMCwgMC42NjY2N10sXG4gICAgXCI4OVwiOiBbMCwgMC42OTQ0NCwgMC4xNzI2MSwgMCwgMC42NjY2N10sXG4gICAgXCI5MFwiOiBbMCwgMC42OTQ0NCwgMC4xMTk4MywgMCwgMC42MTExMV0sXG4gICAgXCI5MVwiOiBbMC4yNSwgMC43NSwgMC4xNTk0MiwgMCwgMC4yODg4OV0sXG4gICAgXCI5M1wiOiBbMC4yNSwgMC43NSwgMC4wODcxOSwgMCwgMC4yODg4OV0sXG4gICAgXCI5NFwiOiBbMCwgMC42OTQ0NCwgMC4wNzk5LCAwLCAwLjVdLFxuICAgIFwiOTVcIjogWzAuMzUsIDAuMDk0NDQsIDAuMDg2MTYsIDAsIDAuNV0sXG4gICAgXCI5N1wiOiBbMCwgMC40NDQ0NCwgMC4wMDk4MSwgMCwgMC40ODA1Nl0sXG4gICAgXCI5OFwiOiBbMCwgMC42OTQ0NCwgMC4wMzA1NywgMCwgMC41MTY2N10sXG4gICAgXCI5OVwiOiBbMCwgMC40NDQ0NCwgMC4wODMzNiwgMCwgMC40NDQ0NV0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjk0NDQsIDAuMDk0ODMsIDAsIDAuNTE2NjddLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ0NDQ0LCAwLjA2Nzc4LCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEwMlwiOiBbMCwgMC42OTQ0NCwgMC4yMTcwNSwgMCwgMC4zMDU1Nl0sXG4gICAgXCIxMDNcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMTA4MzYsIDAsIDAuNV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAuMDE3NzgsIDAsIDAuNTE2NjddLFxuICAgIFwiMTA1XCI6IFswLCAwLjY3OTM3LCAwLjA5NzE4LCAwLCAwLjIzODg5XSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42NzkzNywgMC4wOTE2MiwgMCwgMC4yNjY2N10sXG4gICAgXCIxMDdcIjogWzAsIDAuNjk0NDQsIDAuMDgzMzYsIDAsIDAuNDg4ODldLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLjA5NDgzLCAwLCAwLjIzODg5XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NDQ0NCwgMC4wMTc3OCwgMCwgMC43OTQ0NV0sXG4gICAgXCIxMTBcIjogWzAsIDAuNDQ0NDQsIDAuMDE3NzgsIDAsIDAuNTE2NjddLFxuICAgIFwiMTExXCI6IFswLCAwLjQ0NDQ0LCAwLjA2NjEzLCAwLCAwLjVdLFxuICAgIFwiMTEyXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAzODksIDAsIDAuNTE2NjddLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjA0MTY5LCAwLCAwLjUxNjY3XSxcbiAgICBcIjExNFwiOiBbMCwgMC40NDQ0NCwgMC4xMDgzNiwgMCwgMC4zNDE2N10sXG4gICAgXCIxMTVcIjogWzAsIDAuNDQ0NDQsIDAuMDc3OCwgMCwgMC4zODMzM10sXG4gICAgXCIxMTZcIjogWzAsIDAuNTcxNDMsIDAuMDcyMjUsIDAsIDAuMzYxMTFdLFxuICAgIFwiMTE3XCI6IFswLCAwLjQ0NDQ0LCAwLjA0MTY5LCAwLCAwLjUxNjY3XSxcbiAgICBcIjExOFwiOiBbMCwgMC40NDQ0NCwgMC4xMDgzNiwgMCwgMC40NjExMV0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDQ0NDQsIDAuMTA4MzYsIDAsIDAuNjgzMzRdLFxuICAgIFwiMTIwXCI6IFswLCAwLjQ0NDQ0LCAwLjA5MTY5LCAwLCAwLjQ2MTExXSxcbiAgICBcIjEyMVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4xMDgzNiwgMCwgMC40NjExMV0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDQ0NDQsIDAuMDg3NTIsIDAsIDAuNDM0NzJdLFxuICAgIFwiMTI2XCI6IFswLjM1LCAwLjMyNjU5LCAwLjA4ODI2LCAwLCAwLjVdLFxuICAgIFwiMTY4XCI6IFswLCAwLjY3OTM3LCAwLjA2Mzg1LCAwLCAwLjVdLFxuICAgIFwiMTc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczNzUyXSxcbiAgICBcIjE4NFwiOiBbMC4xNzAxNCwgMCwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCIzMDVcIjogWzAsIDAuNDQ0NDQsIDAuMDQxNjksIDAsIDAuMjM4ODldLFxuICAgIFwiNTY3XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjA0MTY5LCAwLCAwLjI2NjY3XSxcbiAgICBcIjcxMFwiOiBbMCwgMC42OTQ0NCwgMC4wNzk5LCAwLCAwLjVdLFxuICAgIFwiNzExXCI6IFswLCAwLjYzMTk0LCAwLjA4NDMyLCAwLCAwLjVdLFxuICAgIFwiNzEzXCI6IFswLCAwLjYwODg5LCAwLjA4Nzc2LCAwLCAwLjVdLFxuICAgIFwiNzE0XCI6IFswLCAwLjY5NDQ0LCAwLjA5MjA1LCAwLCAwLjVdLFxuICAgIFwiNzE1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLjA5NDgzLCAwLCAwLjVdLFxuICAgIFwiNzI5XCI6IFswLCAwLjY3OTM3LCAwLjA3Nzc0LCAwLCAwLjI3Nzc4XSxcbiAgICBcIjczMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43Mzc1Ml0sXG4gICAgXCI3MzJcIjogWzAsIDAuNjc2NTksIDAuMDg4MjYsIDAsIDAuNV0sXG4gICAgXCI3MzNcIjogWzAsIDAuNjk0NDQsIDAuMDkyMDUsIDAsIDAuNV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjk0NDQsIDAuMTMzNzIsIDAsIDAuNTQxNjddLFxuICAgIFwiOTE2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjkyMFwiOiBbMCwgMC42OTQ0NCwgMC4wNzU1NSwgMCwgMC43Nzc3OF0sXG4gICAgXCI5MjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiOTI2XCI6IFswLCAwLjY5NDQ0LCAwLjEyODE2LCAwLCAwLjY2NjY3XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42OTQ0NCwgMC4wODA5NCwgMCwgMC43MDgzNF0sXG4gICAgXCI5MzFcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNzIyMjJdLFxuICAgIFwiOTMzXCI6IFswLCAwLjY5NDQ0LCAwLjA5MDMxLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjkzNFwiOiBbMCwgMC42OTQ0NCwgMC4wNDYwMywgMCwgMC43MjIyMl0sXG4gICAgXCI5MzZcIjogWzAsIDAuNjk0NDQsIDAuMDkwMzEsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTM3XCI6IFswLCAwLjY5NDQ0LCAwLjA4MjkzLCAwLCAwLjcyMjIyXSxcbiAgICBcIjgyMTFcIjogWzAsIDAuNDQ0NDQsIDAuMDg2MTYsIDAsIDAuNV0sXG4gICAgXCI4MjEyXCI6IFswLCAwLjQ0NDQ0LCAwLjA4NjE2LCAwLCAxLjBdLFxuICAgIFwiODIxNlwiOiBbMCwgMC42OTQ0NCwgMC4wNzgxNiwgMCwgMC4yNzc3OF0sXG4gICAgXCI4MjE3XCI6IFswLCAwLjY5NDQ0LCAwLjA3ODE2LCAwLCAwLjI3Nzc4XSxcbiAgICBcIjgyMjBcIjogWzAsIDAuNjk0NDQsIDAuMTQyMDUsIDAsIDAuNV0sXG4gICAgXCI4MjIxXCI6IFswLCAwLjY5NDQ0LCAwLjAwMzE2LCAwLCAwLjVdXG4gIH0sXG4gIFwiU2Fuc1NlcmlmLVJlZ3VsYXJcIjoge1xuICAgIFwiMzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzE5NDVdLFxuICAgIFwiMzRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCIzNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCIzNlwiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjM3XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjM4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc1ODM0XSxcbiAgICBcIjM5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjQwXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjQxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjQyXCI6IFswLCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiNDNcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNDRcIjogWzAuMTI1LCAwLjA4MzMzLCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjQ1XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjMzMzMzXSxcbiAgICBcIjQ2XCI6IFswLCAwLjA4MzMzLCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjQ3XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiNDhcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI0OVwiOiBbMCwgMC42NTU1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUwXCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTFcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1MlwiOiBbMCwgMC42NTU1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUzXCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTRcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1NVwiOiBbMCwgMC42NTU1NiwgMCwgMCwgMC41XSxcbiAgICBcIjU2XCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTdcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1OFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI1OVwiOiBbMC4xMjUsIDAuNDQ0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNjFcIjogWy0wLjEzLCAwLjM3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjYzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjY0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjY1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjY2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjY3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjY4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcyMjIzXSxcbiAgICBcIjY5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU5NzIyXSxcbiAgICBcIjcwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU2OTQ1XSxcbiAgICBcIjcxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjcyXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwODM0XSxcbiAgICBcIjczXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjc0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjc1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY5NDQ1XSxcbiAgICBcIjc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU0MTY3XSxcbiAgICBcIjc3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg3NV0sXG4gICAgXCI3OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MDgzNF0sXG4gICAgXCI3OVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzYxMV0sXG4gICAgXCI4MFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI4MVwiOiBbMC4xMjUsIDAuNjk0NDQsIDAsIDAsIDAuNzM2MTFdLFxuICAgIFwiODJcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjQ1ODRdLFxuICAgIFwiODNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjgwNTZdLFxuICAgIFwiODVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjg3NV0sXG4gICAgXCI4NlwiOiBbMCwgMC42OTQ0NCwgMC4wMTM4OSwgMCwgMC42NjY2N10sXG4gICAgXCI4N1wiOiBbMCwgMC42OTQ0NCwgMC4wMTM4OSwgMCwgMC45NDQ0NV0sXG4gICAgXCI4OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4OVwiOiBbMCwgMC42OTQ0NCwgMC4wMjUsIDAsIDAuNjY2NjddLFxuICAgIFwiOTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiOTFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMjg4ODldLFxuICAgIFwiOTNcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMjg4ODldLFxuICAgIFwiOTRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI5NVwiOiBbMC4zNSwgMC4wOTQ0NCwgMC4wMjc3OCwgMCwgMC41XSxcbiAgICBcIjk3XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQ4MDU2XSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjUxNjY3XSxcbiAgICBcIjk5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCIxMDFcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMTAyXCI6IFswLCAwLjY5NDQ0LCAwLjA2OTQ0LCAwLCAwLjMwNTU2XSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wMTM4OSwgMCwgMC41XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCIxMDVcIjogWzAsIDAuNjc5MzcsIDAsIDAsIDAuMjM4ODldLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY3OTM3LCAwLCAwLCAwLjI2NjY3XSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC40ODg4OV0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjM4ODldLFxuICAgIFwiMTA5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjExMFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCIxMTFcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNTE2NjddLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjUxNjY3XSxcbiAgICBcIjExNFwiOiBbMCwgMC40NDQ0NCwgMC4wMTM4OSwgMCwgMC4zNDE2N10sXG4gICAgXCIxMTVcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuMzgzMzNdLFxuICAgIFwiMTE2XCI6IFswLCAwLjU3MTQzLCAwLCAwLCAwLjM2MTExXSxcbiAgICBcIjExN1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCIxMThcIjogWzAsIDAuNDQ0NDQsIDAuMDEzODksIDAsIDAuNDYxMTFdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQ0NDQ0LCAwLjAxMzg5LCAwLCAwLjY4MzM0XSxcbiAgICBcIjEyMFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40NjExMV0sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDEzODksIDAsIDAuNDYxMTFdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQzNDcyXSxcbiAgICBcIjEyNlwiOiBbMC4zNSwgMC4zMjY1OSwgMCwgMCwgMC41XSxcbiAgICBcIjE2OFwiOiBbMCwgMC42NzkzNywgMCwgMCwgMC41XSxcbiAgICBcIjE3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCIxODRcIjogWzAuMTcwMTQsIDAsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMzA1XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjIzODg5XSxcbiAgICBcIjU2N1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC4yNjY2N10sXG4gICAgXCI3MTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI3MTFcIjogWzAsIDAuNjMxOTQsIDAsIDAsIDAuNV0sXG4gICAgXCI3MTNcIjogWzAsIDAuNjA4ODksIDAsIDAsIDAuNV0sXG4gICAgXCI3MTRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI3MTVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI3MjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI3MjlcIjogWzAsIDAuNjc5MzcsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNzMwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjczMlwiOiBbMCwgMC42NzY1OSwgMCwgMCwgMC41XSxcbiAgICBcIjczM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjkxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NDE2N10sXG4gICAgXCI5MTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiOTIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTI4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwODM0XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjkzNlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40NDQ0NCwgMC4wMjc3OCwgMCwgMC41XSxcbiAgICBcIjgyMTJcIjogWzAsIDAuNDQ0NDQsIDAuMDI3NzgsIDAsIDEuMF0sXG4gICAgXCI4MjE2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjgyMTdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODIyMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjgyMjFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV1cbiAgfSxcbiAgXCJTY3JpcHQtUmVndWxhclwiOiB7XG4gICAgXCI2NVwiOiBbMCwgMC43LCAwLjIyOTI1LCAwLCAwLjgwMjUzXSxcbiAgICBcIjY2XCI6IFswLCAwLjcsIDAuMDQwODcsIDAsIDAuOTA3NTddLFxuICAgIFwiNjdcIjogWzAsIDAuNywgMC4xNjg5LCAwLCAwLjY2NjE5XSxcbiAgICBcIjY4XCI6IFswLCAwLjcsIDAuMDkzNzEsIDAsIDAuNzc0NDNdLFxuICAgIFwiNjlcIjogWzAsIDAuNywgMC4xODU4MywgMCwgMC41NjE2Ml0sXG4gICAgXCI3MFwiOiBbMCwgMC43LCAwLjEzNjM0LCAwLCAwLjg5NTQ0XSxcbiAgICBcIjcxXCI6IFswLCAwLjcsIDAuMTczMjIsIDAsIDAuNjA5NjFdLFxuICAgIFwiNzJcIjogWzAsIDAuNywgMC4yOTY5NCwgMCwgMC45NjkxOV0sXG4gICAgXCI3M1wiOiBbMCwgMC43LCAwLjE5MTg5LCAwLCAwLjgwOTA3XSxcbiAgICBcIjc0XCI6IFswLjI3Nzc4LCAwLjcsIDAuMTkxODksIDAsIDEuMDUxNTldLFxuICAgIFwiNzVcIjogWzAsIDAuNywgMC4zMTI1OSwgMCwgMC45MTM2NF0sXG4gICAgXCI3NlwiOiBbMCwgMC43LCAwLjE5MTg5LCAwLCAwLjg3MzczXSxcbiAgICBcIjc3XCI6IFswLCAwLjcsIDAuMTU5ODEsIDAsIDEuMDgwMzFdLFxuICAgIFwiNzhcIjogWzAsIDAuNywgMC4zNTI1LCAwLCAwLjkwMTVdLFxuICAgIFwiNzlcIjogWzAsIDAuNywgMC4wODA3OCwgMCwgMC43Mzc4N10sXG4gICAgXCI4MFwiOiBbMCwgMC43LCAwLjA4MDc4LCAwLCAxLjAxMjYyXSxcbiAgICBcIjgxXCI6IFswLCAwLjcsIDAuMDMzMDUsIDAsIDAuODgyODJdLFxuICAgIFwiODJcIjogWzAsIDAuNywgMC4wNjI1OSwgMCwgMC44NV0sXG4gICAgXCI4M1wiOiBbMCwgMC43LCAwLjE5MTg5LCAwLCAwLjg2NzY3XSxcbiAgICBcIjg0XCI6IFswLCAwLjcsIDAuMjkwODcsIDAsIDAuNzQ2OTddLFxuICAgIFwiODVcIjogWzAsIDAuNywgMC4yNTgxNSwgMCwgMC43OTk5Nl0sXG4gICAgXCI4NlwiOiBbMCwgMC43LCAwLjI3NTIzLCAwLCAwLjYyMjA0XSxcbiAgICBcIjg3XCI6IFswLCAwLjcsIDAuMjc1MjMsIDAsIDAuODA1MzJdLFxuICAgIFwiODhcIjogWzAsIDAuNywgMC4yNjAwNiwgMCwgMC45NDQ0NV0sXG4gICAgXCI4OVwiOiBbMCwgMC43LCAwLjI5MzksIDAsIDAuNzA5NjFdLFxuICAgIFwiOTBcIjogWzAsIDAuNywgMC4yNDAzNywgMCwgMC44MjEyXVxuICB9LFxuICBcIlNpemUxLVJlZ3VsYXJcIjoge1xuICAgIFwiNDBcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDU4MzRdLFxuICAgIFwiNDFcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDU4MzRdLFxuICAgIFwiNDdcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNTc3NzhdLFxuICAgIFwiOTFcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDE2NjddLFxuICAgIFwiOTJcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNTc3NzhdLFxuICAgIFwiOTNcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDE2NjddLFxuICAgIFwiMTIzXCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjEyNVwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC41ODMzNF0sXG4gICAgXCI3MTBcIjogWzAsIDAuNzIyMjIsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiNzMyXCI6IFswLCAwLjcyMjIyLCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjc3MFwiOiBbMCwgMC43MjIyMiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI3NzFcIjogWzAsIDAuNzIyMjIsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODIxNFwiOiBbLTAuMDAwOTksIDAuNjAxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg1OTNcIjogWzFlLTA1LCAwLjYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODU5NVwiOiBbMWUtMDUsIDAuNiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NjU3XCI6IFsxZS0wNSwgMC42LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg2NTlcIjogWzFlLTA1LCAwLjYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODcxOVwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMC45NDQ0NV0sXG4gICAgXCI4NzIwXCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjk0NDQ1XSxcbiAgICBcIjg3MjFcIjogWzAuMjUwMDEsIDAuNzUsIDAsIDAsIDEuMDU1NTZdLFxuICAgIFwiODczMFwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg3MzlcIjogWy0wLjAwNTk5LCAwLjYwNiwgMCwgMCwgMC4zMzMzM10sXG4gICAgXCI4NzQxXCI6IFstMC4wMDU5OSwgMC42MDYsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODc0N1wiOiBbMC4zMDYxMiwgMC44MDUsIDAuMTk0NDUsIDAsIDAuNDcyMjJdLFxuICAgIFwiODc0OFwiOiBbMC4zMDYsIDAuODA1LCAwLjE5NDQ1LCAwLCAwLjQ3MjIyXSxcbiAgICBcIjg3NDlcIjogWzAuMzA2LCAwLjgwNSwgMC4xOTQ0NSwgMCwgMC40NzIyMl0sXG4gICAgXCI4NzUwXCI6IFswLjMwNjEyLCAwLjgwNSwgMC4xOTQ0NSwgMCwgMC40NzIyMl0sXG4gICAgXCI4ODk2XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjg4OTdcIjogWzAuMjUwMDEsIDAuNzUsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODg5OFwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI4ODk5XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjg5NjhcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiODk2OVwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC40NzIyMl0sXG4gICAgXCI4OTcwXCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjg5NzFcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiOTE2OFwiOiBbLTAuMDAwOTksIDAuNjAxLCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjEwMjE2XCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjEwMjE3XCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjEwNzUyXCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjEwNzUzXCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjEwNzU0XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjEwNzU2XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjEwNzU4XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjgzMzM0XVxuICB9LFxuICBcIlNpemUyLVJlZ3VsYXJcIjoge1xuICAgIFwiNDBcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNTk3MjJdLFxuICAgIFwiNDFcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNTk3MjJdLFxuICAgIFwiNDdcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuODExMTFdLFxuICAgIFwiOTFcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiOTJcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuODExMTFdLFxuICAgIFwiOTNcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiMTIzXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjEyNVwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI3MTBcIjogWzAsIDAuNzUsIDAsIDAsIDEuMF0sXG4gICAgXCI3MzJcIjogWzAsIDAuNzUsIDAsIDAsIDEuMF0sXG4gICAgXCI3NzBcIjogWzAsIDAuNzUsIDAsIDAsIDEuMF0sXG4gICAgXCI3NzFcIjogWzAsIDAuNzUsIDAsIDAsIDEuMF0sXG4gICAgXCI4NzE5XCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjI3Nzc4XSxcbiAgICBcIjg3MjBcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuMjc3NzhdLFxuICAgIFwiODcyMVwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS40NDQ0NV0sXG4gICAgXCI4NzMwXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAxLjBdLFxuICAgIFwiODc0N1wiOiBbMC44NjIyNSwgMS4zNiwgMC40NDQ0NSwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NzQ4XCI6IFswLjg2MiwgMS4zNiwgMC40NDQ0NSwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NzQ5XCI6IFswLjg2MiwgMS4zNiwgMC40NDQ0NSwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NzUwXCI6IFswLjg2MjI1LCAxLjM2LCAwLjQ0NDQ1LCAwLCAwLjU1NTU2XSxcbiAgICBcIjg4OTZcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiODg5N1wiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCI4ODk4XCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjg4OTlcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiODk2OFwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCI4OTY5XCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjg5NzBcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNTI3NzhdLFxuICAgIFwiODk3MVwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCIxMDIxNlwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC42MTExMV0sXG4gICAgXCIxMDIxN1wiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC42MTExMV0sXG4gICAgXCIxMDc1MlwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS41MTExMl0sXG4gICAgXCIxMDc1M1wiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS41MTExMl0sXG4gICAgXCIxMDc1NFwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS41MTExMl0sXG4gICAgXCIxMDc1NlwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCIxMDc1OFwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS4xMTExMV1cbiAgfSxcbiAgXCJTaXplMy1SZWd1bGFyXCI6IHtcbiAgICBcIjQwXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjczNjExXSxcbiAgICBcIjQxXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjczNjExXSxcbiAgICBcIjQ3XCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAxLjA0NDQ1XSxcbiAgICBcIjkxXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjkyXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAxLjA0NDQ1XSxcbiAgICBcIjkzXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjEyM1wiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMC43NV0sXG4gICAgXCIxMjVcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNzVdLFxuICAgIFwiNzEwXCI6IFswLCAwLjc1LCAwLCAwLCAxLjQ0NDQ1XSxcbiAgICBcIjczMlwiOiBbMCwgMC43NSwgMCwgMCwgMS40NDQ0NV0sXG4gICAgXCI3NzBcIjogWzAsIDAuNzUsIDAsIDAsIDEuNDQ0NDVdLFxuICAgIFwiNzcxXCI6IFswLCAwLjc1LCAwLCAwLCAxLjQ0NDQ1XSxcbiAgICBcIjg3MzBcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDEuMF0sXG4gICAgXCI4OTY4XCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjg5NjlcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiODk3MFwiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMC41ODMzNF0sXG4gICAgXCI4OTcxXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjEwMjE2XCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjc1XSxcbiAgICBcIjEwMjE3XCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjc1XVxuICB9LFxuICBcIlNpemU0LVJlZ3VsYXJcIjoge1xuICAgIFwiNDBcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNzkxNjddLFxuICAgIFwiNDFcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNzkxNjddLFxuICAgIFwiNDdcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDEuMjc3NzhdLFxuICAgIFwiOTFcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiOTJcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDEuMjc3NzhdLFxuICAgIFwiOTNcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiMTIzXCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjgwNTU2XSxcbiAgICBcIjEyNVwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC44MDU1Nl0sXG4gICAgXCI3MTBcIjogWzAsIDAuODI1LCAwLCAwLCAxLjg4ODldLFxuICAgIFwiNzMyXCI6IFswLCAwLjgyNSwgMCwgMCwgMS44ODg5XSxcbiAgICBcIjc3MFwiOiBbMCwgMC44MjUsIDAsIDAsIDEuODg4OV0sXG4gICAgXCI3NzFcIjogWzAsIDAuODI1LCAwLCAwLCAxLjg4ODldLFxuICAgIFwiODczMFwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg5NjhcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiODk2OVwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI4OTcwXCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjg5NzFcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiOTExNVwiOiBbMC42NDUwMiwgMS4xNTUsIDAsIDAsIDAuODc1XSxcbiAgICBcIjkxMTZcIjogWzFlLTA1LCAwLjYsIDAsIDAsIDAuODc1XSxcbiAgICBcIjkxMTdcIjogWzAuNjQ1MDIsIDEuMTU1LCAwLCAwLCAwLjg3NV0sXG4gICAgXCI5MTE4XCI6IFswLjY0NTAyLCAxLjE1NSwgMCwgMCwgMC44NzVdLFxuICAgIFwiOTExOVwiOiBbMWUtMDUsIDAuNiwgMCwgMCwgMC44NzVdLFxuICAgIFwiOTEyMFwiOiBbMC42NDUwMiwgMS4xNTUsIDAsIDAsIDAuODc1XSxcbiAgICBcIjkxMjFcIjogWzAuNjQ1MDIsIDEuMTU1LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjkxMjJcIjogWy0wLjAwMDk5LCAwLjYwMSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MTIzXCI6IFswLjY0NTAyLCAxLjE1NSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MTI0XCI6IFswLjY0NTAyLCAxLjE1NSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MTI1XCI6IFstMC4wMDA5OSwgMC42MDEsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTEyNlwiOiBbMC42NDUwMiwgMS4xNTUsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTEyN1wiOiBbMWUtMDUsIDAuOSwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5MTI4XCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjkxMjlcIjogWzAuOTAwMDEsIDAsIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTEzMFwiOiBbMCwgMC4zLCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjkxMzFcIjogWzFlLTA1LCAwLjksIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTEzMlwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5MTMzXCI6IFswLjkwMDAxLCAwLCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjkxNDNcIjogWzAuODg1MDIsIDAuOTE1LCAwLCAwLCAxLjA1NTU2XSxcbiAgICBcIjEwMjE2XCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjgwNTU2XSxcbiAgICBcIjEwMjE3XCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjgwNTU2XSxcbiAgICBcIjU3MzQ0XCI6IFstMC4wMDQ5OSwgMC42MDUsIDAsIDAsIDEuMDU1NTZdLFxuICAgIFwiNTczNDVcIjogWy0wLjAwNDk5LCAwLjYwNSwgMCwgMCwgMS4wNTU1Nl0sXG4gICAgXCI1NzY4MFwiOiBbMCwgMC4xMiwgMCwgMCwgMC40NV0sXG4gICAgXCI1NzY4MVwiOiBbMCwgMC4xMiwgMCwgMCwgMC40NV0sXG4gICAgXCI1NzY4MlwiOiBbMCwgMC4xMiwgMCwgMCwgMC40NV0sXG4gICAgXCI1NzY4M1wiOiBbMCwgMC4xMiwgMCwgMCwgMC40NV1cbiAgfSxcbiAgXCJUeXBld3JpdGVyLVJlZ3VsYXJcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjMzXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIzNFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMzVcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjM2XCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIzN1wiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiMzhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjM5XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0MFwiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiNDFcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjQyXCI6IFswLCAwLjUyMDgzLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0M1wiOiBbLTAuMDgwNTYsIDAuNTMwNTUsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjQ0XCI6IFswLjEzODg5LCAwLjEyNSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNDVcIjogWy0wLjA4MDU2LCAwLjUzMDU1LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0NlwiOiBbMCwgMC4xMjUsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjQ3XCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0OFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNDlcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjUwXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1MVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNTJcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjUzXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1NFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNTVcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjU2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1N1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNThcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjU5XCI6IFswLjEzODg5LCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2MFwiOiBbLTAuMDU1NTYsIDAuNTU1NTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjYxXCI6IFstMC4xOTU0OSwgMC40MTU2MiwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjJcIjogWy0wLjA1NTU2LCAwLjU1NTU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2M1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjY1XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjY4XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2OVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzBcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjcxXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3MlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzNcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjc0XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3NVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjc3XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3OFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzlcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgwXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4MVwiOiBbMC4xMzg4OSwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiODJcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgzXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4NFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiODVcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjg2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4N1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiODhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjg5XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTFcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkyXCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5M1wiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjk1XCI6IFswLjA5NTE0LCAwLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTdcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjk4XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5OVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTAwXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwMlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTAzXCI6IFswLjIyMjIyLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwNVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTA2XCI6IFswLjIyMjIyLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMDdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTBcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjExMVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTEyXCI6IFswLjIyMjIyLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTNcIjogWzAuMjIyMjIsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjExNFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTE1XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTZcIjogWzAsIDAuNTUzNTgsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjExN1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTE4XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEyMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTIxXCI6IFswLjIyMjIyLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEyM1wiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTI0XCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMjVcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEyNlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTI3XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjE3NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTg0XCI6IFswLjE5NDQ1LCAwLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIzMDVcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjU2N1wiOiBbMC4yMjIyMiwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzExXCI6IFswLCAwLjU2NTk3LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3MTNcIjogWzAsIDAuNTY1NTUsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjcxNFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzE1XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3MjhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjczMFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzcwXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3NzFcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjc3NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTE1XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkyMFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTIzXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTMxXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkzNFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTM2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgyMTdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgyNDJcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkyNTFcIjogWzAuMTExMTEsIDAuMjE5NDQsIDAsIDAsIDAuNTI1XVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2ZvbnRNZXRyaWNzLmpzXG5cblxuLyoqXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgbWV0cmljcyByZWdhcmRpbmcgZm9udHMgYW5kIGluZGl2aWR1YWwgc3ltYm9scy4gVGhlIHNpZ21hXG4gKiBhbmQgeGkgdmFyaWFibGVzLCBhcyB3ZWxsIGFzIHRoZSBtZXRyaWNNYXAgbWFwIGNvbnRhaW4gZGF0YSBleHRyYWN0ZWQgZnJvbVxuICogVGVYLCBUZVggZm9udCBtZXRyaWNzLCBhbmQgdGhlIFRURiBmaWxlcy4gVGhlc2UgZGF0YSBhcmUgdGhlbiBleHBvc2VkIHZpYSB0aGVcbiAqIGBtZXRyaWNzYCB2YXJpYWJsZSBhbmQgdGhlIGdldENoYXJhY3Rlck1ldHJpY3MgZnVuY3Rpb24uXG4gKi9cbi8vIEluIFRlWCwgdGhlcmUgYXJlIGFjdHVhbGx5IHRocmVlIHNldHMgb2YgZGltZW5zaW9ucywgb25lIGZvciBlYWNoIG9mXG4vLyB0ZXh0c3R5bGUgKHNpemUgaW5kZXggNSBhbmQgaGlnaGVyOiA+PTlwdCksIHNjcmlwdHN0eWxlIChzaXplIGluZGV4IDMgYW5kIDQ6XG4vLyA3LThwdCksIGFuZCBzY3JpcHRzY3JpcHRzdHlsZSAoc2l6ZSBpbmRleCAxIGFuZCAyOiA1LTZwdCkuICBUaGVzZSBhcmVcbi8vIHByb3ZpZGVkIGluIHRoZSB0aGUgYXJyYXlzIGJlbG93LCBpbiB0aGF0IG9yZGVyLlxuLy9cbi8vIFRoZSBmb250IG1ldHJpY3MgYXJlIHN0b3JlZCBpbiBmb250cyBjbXN5MTAsIGNtc3k3LCBhbmQgY21zeTUgcmVzcHNlY3RpdmVseS5cbi8vIFRoaXMgd2FzIGRldGVybWluZWQgYnkgcnVubmluZyB0aGUgZm9sbG93aW5nIHNjcmlwdDpcbi8vXG4vLyAgICAgbGF0ZXggLWludGVyYWN0aW9uPW5vbnN0b3Btb2RlIFxcXG4vLyAgICAgJ1xcZG9jdW1lbnRjbGFzc3thcnRpY2xlfVxcdXNlcGFja2FnZXthbXNtYXRofVxcYmVnaW57ZG9jdW1lbnR9JyBcXFxuLy8gICAgICckYSQgXFxleHBhbmRhZnRlclxcc2hvd1xcdGhlXFx0ZXh0Zm9udDInIFxcXG4vLyAgICAgJ1xcZXhwYW5kYWZ0ZXJcXHNob3dcXHRoZVxcc2NyaXB0Zm9udDInIFxcXG4vLyAgICAgJ1xcZXhwYW5kYWZ0ZXJcXHNob3dcXHRoZVxcc2NyaXB0c2NyaXB0Zm9udDInIFxcXG4vLyAgICAgJ1xcc3RvcCdcbi8vXG4vLyBUaGUgbWV0cmljcyB0aGVtc2VsdmVzIHdlcmUgcmV0cmVpdmVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6XG4vL1xuLy8gICAgIHRmdG9wbCBjbXN5MTBcbi8vICAgICB0ZnRvcGwgY21zeTdcbi8vICAgICB0ZnRvcGwgY21zeTVcbi8vXG4vLyBUaGUgb3V0cHV0IG9mIGVhY2ggb2YgdGhlc2UgY29tbWFuZHMgaXMgcXVpdGUgbGVuZ3RoeS4gIFRoZSBvbmx5IHBhcnQgd2Vcbi8vIGNhcmUgYWJvdXQgaXMgdGhlIEZPTlRESU1FTiBzZWN0aW9uLiBFYWNoIHZhbHVlIGlzIG1lYXN1cmVkIGluIEVNcy5cbnZhciBzaWdtYXNBbmRYaXMgPSB7XG4gIHNsYW50OiBbMC4yNTAsIDAuMjUwLCAwLjI1MF0sXG4gIC8vIHNpZ21hMVxuICBzcGFjZTogWzAuMDAwLCAwLjAwMCwgMC4wMDBdLFxuICAvLyBzaWdtYTJcbiAgc3RyZXRjaDogWzAuMDAwLCAwLjAwMCwgMC4wMDBdLFxuICAvLyBzaWdtYTNcbiAgc2hyaW5rOiBbMC4wMDAsIDAuMDAwLCAwLjAwMF0sXG4gIC8vIHNpZ21hNFxuICB4SGVpZ2h0OiBbMC40MzEsIDAuNDMxLCAwLjQzMV0sXG4gIC8vIHNpZ21hNVxuICBxdWFkOiBbMS4wMDAsIDEuMTcxLCAxLjQ3Ml0sXG4gIC8vIHNpZ21hNlxuICBleHRyYVNwYWNlOiBbMC4wMDAsIDAuMDAwLCAwLjAwMF0sXG4gIC8vIHNpZ21hN1xuICBudW0xOiBbMC42NzcsIDAuNzMyLCAwLjkyNV0sXG4gIC8vIHNpZ21hOFxuICBudW0yOiBbMC4zOTQsIDAuMzg0LCAwLjM4N10sXG4gIC8vIHNpZ21hOVxuICBudW0zOiBbMC40NDQsIDAuNDcxLCAwLjUwNF0sXG4gIC8vIHNpZ21hMTBcbiAgZGVub20xOiBbMC42ODYsIDAuNzUyLCAxLjAyNV0sXG4gIC8vIHNpZ21hMTFcbiAgZGVub20yOiBbMC4zNDUsIDAuMzQ0LCAwLjUzMl0sXG4gIC8vIHNpZ21hMTJcbiAgc3VwMTogWzAuNDEzLCAwLjUwMywgMC41MDRdLFxuICAvLyBzaWdtYTEzXG4gIHN1cDI6IFswLjM2MywgMC40MzEsIDAuNDA0XSxcbiAgLy8gc2lnbWExNFxuICBzdXAzOiBbMC4yODksIDAuMjg2LCAwLjI5NF0sXG4gIC8vIHNpZ21hMTVcbiAgc3ViMTogWzAuMTUwLCAwLjE0MywgMC4yMDBdLFxuICAvLyBzaWdtYTE2XG4gIHN1YjI6IFswLjI0NywgMC4yODYsIDAuNDAwXSxcbiAgLy8gc2lnbWExN1xuICBzdXBEcm9wOiBbMC4zODYsIDAuMzUzLCAwLjQ5NF0sXG4gIC8vIHNpZ21hMThcbiAgc3ViRHJvcDogWzAuMDUwLCAwLjA3MSwgMC4xMDBdLFxuICAvLyBzaWdtYTE5XG4gIGRlbGltMTogWzIuMzkwLCAxLjcwMCwgMS45ODBdLFxuICAvLyBzaWdtYTIwXG4gIGRlbGltMjogWzEuMDEwLCAxLjE1NywgMS40MjBdLFxuICAvLyBzaWdtYTIxXG4gIGF4aXNIZWlnaHQ6IFswLjI1MCwgMC4yNTAsIDAuMjUwXSxcbiAgLy8gc2lnbWEyMlxuICAvLyBUaGVzZSBmb250IG1ldHJpY3MgYXJlIGV4dHJhY3RlZCBmcm9tIFRlWCBieSB1c2luZyB0ZnRvcGwgb24gY21leDEwLnRmbTtcbiAgLy8gdGhleSBjb3JyZXNwb25kIHRvIHRoZSBmb250IHBhcmFtZXRlcnMgb2YgdGhlIGV4dGVuc2lvbiBmb250cyAoZmFtaWx5IDMpLlxuICAvLyBTZWUgdGhlIFRlWGJvb2ssIHBhZ2UgNDQxLiBJbiBBTVNUZVgsIHRoZSBleHRlbnNpb24gZm9udHMgc2NhbGU7IHRvXG4gIC8vIG1hdGNoIGNtZXg3LCB3ZSdkIHVzZSBjbWV4Ny50Zm0gdmFsdWVzIGZvciBzY3JpcHQgYW5kIHNjcmlwdHNjcmlwdFxuICAvLyB2YWx1ZXMuXG4gIGRlZmF1bHRSdWxlVGhpY2tuZXNzOiBbMC4wNCwgMC4wNDksIDAuMDQ5XSxcbiAgLy8geGk4OyBjbWV4NzogMC4wNDlcbiAgYmlnT3BTcGFjaW5nMTogWzAuMTExLCAwLjExMSwgMC4xMTFdLFxuICAvLyB4aTlcbiAgYmlnT3BTcGFjaW5nMjogWzAuMTY2LCAwLjE2NiwgMC4xNjZdLFxuICAvLyB4aTEwXG4gIGJpZ09wU3BhY2luZzM6IFswLjIsIDAuMiwgMC4yXSxcbiAgLy8geGkxMVxuICBiaWdPcFNwYWNpbmc0OiBbMC42LCAwLjYxMSwgMC42MTFdLFxuICAvLyB4aTEyOyBjbWV4NzogMC42MTFcbiAgYmlnT3BTcGFjaW5nNTogWzAuMSwgMC4xNDMsIDAuMTQzXSxcbiAgLy8geGkxMzsgY21leDc6IDAuMTQzXG4gIC8vIFRoZSBcXHNxcnQgcnVsZSB3aWR0aCBpcyB0YWtlbiBmcm9tIHRoZSBoZWlnaHQgb2YgdGhlIHN1cmQgY2hhcmFjdGVyLlxuICAvLyBTaW5jZSB3ZSB1c2UgdGhlIHNhbWUgZm9udCBhdCBhbGwgc2l6ZXMsIHRoaXMgdGhpY2tuZXNzIGRvZXNuJ3Qgc2NhbGUuXG4gIHNxcnRSdWxlVGhpY2tuZXNzOiBbMC4wNCwgMC4wNCwgMC4wNF0sXG4gIC8vIFRoaXMgdmFsdWUgZGV0ZXJtaW5lcyBob3cgbGFyZ2UgYSBwdCBpcywgZm9yIG1ldHJpY3Mgd2hpY2ggYXJlIGRlZmluZWRcbiAgLy8gaW4gdGVybXMgb2YgcHRzLlxuICAvLyBUaGlzIHZhbHVlIGlzIGFsc28gdXNlZCBpbiBrYXRleC5sZXNzOyBpZiB5b3UgY2hhbmdlIGl0IG1ha2Ugc3VyZSB0aGVcbiAgLy8gdmFsdWVzIG1hdGNoLlxuICBwdFBlckVtOiBbMTAuMCwgMTAuMCwgMTAuMF0sXG4gIC8vIFRoZSBzcGFjZSBiZXR3ZWVuIGFkamFjZW50IGB8YCBjb2x1bW5zIGluIGFuIGFycmF5IGRlZmluaXRpb24uIEZyb21cbiAgLy8gYFxcc2hvd3RoZVxcZG91YmxlcnVsZXNlcGAgaW4gTGFUZVguIEVxdWFscyAyLjAgLyBwdFBlckVtLlxuICBkb3VibGVSdWxlU2VwOiBbMC4yLCAwLjIsIDAuMl0sXG4gIC8vIFRoZSB3aWR0aCBvZiBzZXBhcmF0b3IgbGluZXMgaW4ge2FycmF5fSBlbnZpcm9ubWVudHMuIEZyb21cbiAgLy8gYFxcc2hvd3RoZVxcYXJyYXlydWxld2lkdGhgIGluIExhVGVYLiBFcXVhbHMgMC40IC8gcHRQZXJFbS5cbiAgYXJyYXlSdWxlV2lkdGg6IFswLjA0LCAwLjA0LCAwLjA0XSxcbiAgLy8gVHdvIHZhbHVlcyBmcm9tIExhVGVYIHNvdXJjZTJlOlxuICBmYm94c2VwOiBbMC4zLCAwLjMsIDAuM10sXG4gIC8vICAgICAgICAzIHB0IC8gcHRQZXJFbVxuICBmYm94cnVsZTogWzAuMDQsIDAuMDQsIDAuMDRdIC8vIDAuNCBwdCAvIHB0UGVyRW1cblxufTsgLy8gVGhpcyBtYXAgY29udGFpbnMgYSBtYXBwaW5nIGZyb20gZm9udCBuYW1lIGFuZCBjaGFyYWN0ZXIgY29kZSB0byBjaGFyYWN0ZXJcbi8vIG1ldHJpY3MsIGluY2x1ZGluZyBoZWlnaHQsIGRlcHRoLCBpdGFsaWMgY29ycmVjdGlvbiwgYW5kIHNrZXcgKGtlcm4gZnJvbSB0aGVcbi8vIGNoYXJhY3RlciB0byB0aGUgY29ycmVzcG9uZGluZyBcXHNrZXdjaGFyKVxuLy8gVGhpcyBtYXAgaXMgZ2VuZXJhdGVkIHZpYSBgbWFrZSBtZXRyaWNzYC4gSXQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIG1hbnVhbGx5LlxuXG4gLy8gVGhlc2UgYXJlIHZlcnkgcm91Z2ggYXBwcm94aW1hdGlvbnMuICBXZSBkZWZhdWx0IHRvIFRpbWVzIE5ldyBSb21hbiB3aGljaFxuLy8gc2hvdWxkIGhhdmUgTGF0aW4tMSBhbmQgQ3lyaWxsaWMgY2hhcmFjdGVycywgYnV0IG1heSBub3QgZGVwZW5kaW5nIG9uIHRoZVxuLy8gb3BlcmF0aW5nIHN5c3RlbS4gIFRoZSBtZXRyaWNzIGRvIG5vdCBhY2NvdW50IGZvciBleHRyYSBoZWlnaHQgZnJvbSB0aGVcbi8vIGFjY2VudHMuICBJbiB0aGUgY2FzZSBvZiBDeXJpbGxpYyBjaGFyYWN0ZXJzIHdoaWNoIGhhdmUgYm90aCBhc2NlbmRlcnMgYW5kXG4vLyBkZXNjZW5kZXJzIHdlIHByZWZlciBhcHByb3hpbWF0aW9ucyB3aXRoIGFzY2VuZGVycywgcHJpbWFyaWx5IHRvIHByZXZlbnRcbi8vIHRoZSBmcmFjdGlvbiBiYXIgb3Igcm9vdCBsaW5lIGZyb20gaW50ZXJzZWN0aW5nIHRoZSBnbHlwaC5cbi8vIFRPRE8oa2V2aW5iKSBhbGxvdyB1bmlvbiBvZiBtdWx0aXBsZSBnbHlwaCBtZXRyaWNzIGZvciBiZXR0ZXIgYWNjdXJhY3kuXG5cbnZhciBleHRyYUNoYXJhY3Rlck1hcCA9IHtcbiAgLy8gTGF0aW4tMVxuICAnw4UnOiAnQScsXG4gICfDhyc6ICdDJyxcbiAgJ8OQJzogJ0QnLFxuICAnw54nOiAnbycsXG4gICfDpSc6ICdhJyxcbiAgJ8OnJzogJ2MnLFxuICAnw7AnOiAnZCcsXG4gICfDvic6ICdvJyxcbiAgLy8gQ3lyaWxsaWNcbiAgJ9CQJzogJ0EnLFxuICAn0JEnOiAnQicsXG4gICfQkic6ICdCJyxcbiAgJ9CTJzogJ0YnLFxuICAn0JQnOiAnQScsXG4gICfQlSc6ICdFJyxcbiAgJ9CWJzogJ0snLFxuICAn0JcnOiAnMycsXG4gICfQmCc6ICdOJyxcbiAgJ9CZJzogJ04nLFxuICAn0JonOiAnSycsXG4gICfQmyc6ICdOJyxcbiAgJ9CcJzogJ00nLFxuICAn0J0nOiAnSCcsXG4gICfQnic6ICdPJyxcbiAgJ9CfJzogJ04nLFxuICAn0KAnOiAnUCcsXG4gICfQoSc6ICdDJyxcbiAgJ9CiJzogJ1QnLFxuICAn0KMnOiAneScsXG4gICfQpCc6ICdPJyxcbiAgJ9ClJzogJ1gnLFxuICAn0KYnOiAnVScsXG4gICfQpyc6ICdoJyxcbiAgJ9CoJzogJ1cnLFxuICAn0KknOiAnVycsXG4gICfQqic6ICdCJyxcbiAgJ9CrJzogJ1gnLFxuICAn0KwnOiAnQicsXG4gICfQrSc6ICczJyxcbiAgJ9CuJzogJ1gnLFxuICAn0K8nOiAnUicsXG4gICfQsCc6ICdhJyxcbiAgJ9CxJzogJ2InLFxuICAn0LInOiAnYScsXG4gICfQsyc6ICdyJyxcbiAgJ9C0JzogJ3knLFxuICAn0LUnOiAnZScsXG4gICfQtic6ICdtJyxcbiAgJ9C3JzogJ2UnLFxuICAn0LgnOiAnbicsXG4gICfQuSc6ICduJyxcbiAgJ9C6JzogJ24nLFxuICAn0LsnOiAnbicsXG4gICfQvCc6ICdtJyxcbiAgJ9C9JzogJ24nLFxuICAn0L4nOiAnbycsXG4gICfQvyc6ICduJyxcbiAgJ9GAJzogJ3AnLFxuICAn0YEnOiAnYycsXG4gICfRgic6ICdvJyxcbiAgJ9GDJzogJ3knLFxuICAn0YQnOiAnYicsXG4gICfRhSc6ICd4JyxcbiAgJ9GGJzogJ24nLFxuICAn0YcnOiAnbicsXG4gICfRiCc6ICd3JyxcbiAgJ9GJJzogJ3cnLFxuICAn0YonOiAnYScsXG4gICfRiyc6ICdtJyxcbiAgJ9GMJzogJ2EnLFxuICAn0Y0nOiAnZScsXG4gICfRjic6ICdtJyxcbiAgJ9GPJzogJ3InXG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gYWRkcyBuZXcgZm9udCBtZXRyaWNzIHRvIGRlZmF1bHQgbWV0cmljTWFwXG4gKiBJdCBjYW4gYWxzbyBvdmVycmlkZSBleGlzdGluZyBtZXRyaWNzXG4gKi9cbmZ1bmN0aW9uIHNldEZvbnRNZXRyaWNzKGZvbnROYW1lLCBtZXRyaWNzKSB7XG4gIGZvbnRNZXRyaWNzRGF0YVtmb250TmFtZV0gPSBtZXRyaWNzO1xufVxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGxvb2tpbmcgdXAgaW5mb3JtYXRpb24gaW4gdGhlXG4gKiBtZXRyaWNNYXAgdGFibGUuIEl0IHRha2VzIGEgY2hhcmFjdGVyIGFzIGEgc3RyaW5nLCBhbmQgYSBmb250LlxuICpcbiAqIE5vdGU6IHRoZSBgd2lkdGhgIHByb3BlcnR5IG1heSBiZSB1bmRlZmluZWQgaWYgZm9udE1ldHJpY3NEYXRhLmpzIHdhc24ndFxuICogYnVpbHQgdXNpbmcgYE1ha2UgZXh0ZW5kZWRfbWV0cmljc2AuXG4gKi9cblxuZnVuY3Rpb24gZ2V0Q2hhcmFjdGVyTWV0cmljcyhjaGFyYWN0ZXIsIGZvbnQsIG1vZGUpIHtcbiAgaWYgKCFmb250TWV0cmljc0RhdGFbZm9udF0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJGb250IG1ldHJpY3Mgbm90IGZvdW5kIGZvciBmb250OiBcIiArIGZvbnQgKyBcIi5cIik7XG4gIH1cblxuICB2YXIgY2ggPSBjaGFyYWN0ZXIuY2hhckNvZGVBdCgwKTtcbiAgdmFyIG1ldHJpY3MgPSBmb250TWV0cmljc0RhdGFbZm9udF1bY2hdO1xuXG4gIGlmICghbWV0cmljcyAmJiBjaGFyYWN0ZXJbMF0gaW4gZXh0cmFDaGFyYWN0ZXJNYXApIHtcbiAgICBjaCA9IGV4dHJhQ2hhcmFjdGVyTWFwW2NoYXJhY3RlclswXV0uY2hhckNvZGVBdCgwKTtcbiAgICBtZXRyaWNzID0gZm9udE1ldHJpY3NEYXRhW2ZvbnRdW2NoXTtcbiAgfVxuXG4gIGlmICghbWV0cmljcyAmJiBtb2RlID09PSAndGV4dCcpIHtcbiAgICAvLyBXZSBkb24ndCB0eXBpY2FsbHkgaGF2ZSBmb250IG1ldHJpY3MgZm9yIEFzaWFuIHNjcmlwdHMuXG4gICAgLy8gQnV0IHNpbmNlIHdlIHN1cHBvcnQgdGhlbSBpbiB0ZXh0IG1vZGUsIHdlIG5lZWQgdG8gcmV0dXJuXG4gICAgLy8gc29tZSBzb3J0IG9mIG1ldHJpY3MuXG4gICAgLy8gU28gaWYgdGhlIGNoYXJhY3RlciBpcyBpbiBhIHNjcmlwdCB3ZSBzdXBwb3J0IGJ1dCB3ZVxuICAgIC8vIGRvbid0IGhhdmUgbWV0cmljcyBmb3IgaXQsIGp1c3QgdXNlIHRoZSBtZXRyaWNzIGZvclxuICAgIC8vIHRoZSBMYXRpbiBjYXBpdGFsIGxldHRlciBNLiBUaGlzIGlzIGNsb3NlIGVub3VnaCBiZWNhdXNlXG4gICAgLy8gd2UgKGN1cnJlbnRseSkgb25seSBjYXJlIGFib3V0IHRoZSBoZWlnaHQgb2YgdGhlIGdscHloXG4gICAgLy8gbm90IGl0cyB3aWR0aC5cbiAgICBpZiAoc3VwcG9ydGVkQ29kZXBvaW50KGNoKSkge1xuICAgICAgbWV0cmljcyA9IGZvbnRNZXRyaWNzRGF0YVtmb250XVs3N107IC8vIDc3IGlzIHRoZSBjaGFyY29kZSBmb3IgJ00nXG4gICAgfVxuICB9XG5cbiAgaWYgKG1ldHJpY3MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGVwdGg6IG1ldHJpY3NbMF0sXG4gICAgICBoZWlnaHQ6IG1ldHJpY3NbMV0sXG4gICAgICBpdGFsaWM6IG1ldHJpY3NbMl0sXG4gICAgICBza2V3OiBtZXRyaWNzWzNdLFxuICAgICAgd2lkdGg6IG1ldHJpY3NbNF1cbiAgICB9O1xuICB9XG59XG52YXIgZm9udE1ldHJpY3NCeVNpemVJbmRleCA9IHt9O1xuLyoqXG4gKiBHZXQgdGhlIGZvbnQgbWV0cmljcyBmb3IgYSBnaXZlbiBzaXplLlxuICovXG5cbmZ1bmN0aW9uIGdldEdsb2JhbE1ldHJpY3Moc2l6ZSkge1xuICB2YXIgc2l6ZUluZGV4O1xuXG4gIGlmIChzaXplID49IDUpIHtcbiAgICBzaXplSW5kZXggPSAwO1xuICB9IGVsc2UgaWYgKHNpemUgPj0gMykge1xuICAgIHNpemVJbmRleCA9IDE7XG4gIH0gZWxzZSB7XG4gICAgc2l6ZUluZGV4ID0gMjtcbiAgfVxuXG4gIGlmICghZm9udE1ldHJpY3NCeVNpemVJbmRleFtzaXplSW5kZXhdKSB7XG4gICAgdmFyIG1ldHJpY3MgPSBmb250TWV0cmljc0J5U2l6ZUluZGV4W3NpemVJbmRleF0gPSB7XG4gICAgICBjc3NFbVBlck11OiBzaWdtYXNBbmRYaXMucXVhZFtzaXplSW5kZXhdIC8gMThcbiAgICB9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIHNpZ21hc0FuZFhpcykge1xuICAgICAgaWYgKHNpZ21hc0FuZFhpcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIG1ldHJpY3Nba2V5XSA9IHNpZ21hc0FuZFhpc1trZXldW3NpemVJbmRleF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZvbnRNZXRyaWNzQnlTaXplSW5kZXhbc2l6ZUluZGV4XTtcbn1cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3N5bWJvbHMuanNcbi8qKlxuICogVGhpcyBmaWxlIGhvbGRzIGEgbGlzdCBvZiBhbGwgbm8tYXJndW1lbnQgZnVuY3Rpb25zIGFuZCBzaW5nbGUtY2hhcmFjdGVyXG4gKiBzeW1ib2xzIChsaWtlICdhJyBvciAnOycpLlxuICpcbiAqIEZvciBlYWNoIG9mIHRoZSBzeW1ib2xzLCB0aGVyZSBhcmUgdGhyZWUgcHJvcGVydGllcyB0aGV5IGNhbiBoYXZlOlxuICogLSBmb250IChyZXF1aXJlZCk6IHRoZSBmb250IHRvIGJlIHVzZWQgZm9yIHRoaXMgc3ltYm9sLiBFaXRoZXIgXCJtYWluXCIgKHRoZVxuICAgICBub3JtYWwgZm9udCksIG9yIFwiYW1zXCIgKHRoZSBhbXMgZm9udHMpLlxuICogLSBncm91cCAocmVxdWlyZWQpOiB0aGUgUGFyc2VOb2RlIGdyb3VwIHR5cGUgdGhlIHN5bWJvbCBzaG91bGQgaGF2ZSAoaS5lLlxuICAgICBcInRleHRvcmRcIiwgXCJtYXRob3JkXCIsIGV0YykuXG4gICAgIFNlZSBodHRwczovL2dpdGh1Yi5jb20vS2FUZVgvS2FUZVgvd2lraS9FeGFtaW5pbmctVGVYI2dyb3VwLXR5cGVzXG4gKiAtIHJlcGxhY2U6IHRoZSBjaGFyYWN0ZXIgdGhhdCB0aGlzIHN5bWJvbCBvciBmdW5jdGlvbiBzaG91bGQgYmVcbiAqICAgcmVwbGFjZWQgd2l0aCAoaS5lLiBcIlxccGhpXCIgaGFzIGEgcmVwbGFjZSB2YWx1ZSBvZiBcIlxcdTAzZDVcIiwgdGhlIHBoaVxuICogICBjaGFyYWN0ZXIgaW4gdGhlIG1haW4gZm9udCkuXG4gKlxuICogVGhlIG91dGVybW9zdCBtYXAgaW4gdGhlIHRhYmxlIGluZGljYXRlcyB3aGF0IG1vZGUgdGhlIHN5bWJvbHMgc2hvdWxkIGJlXG4gKiBhY2NlcHRlZCBpbiAoZS5nLiBcIm1hdGhcIiBvciBcInRleHRcIikuXG4gKi9cbi8vIFNvbWUgb2YgdGhlc2UgaGF2ZSBhIFwiLXRva2VuXCIgc3VmZml4IHNpbmNlIHRoZXNlIGFyZSBhbHNvIHVzZWQgYXMgYFBhcnNlTm9kZWBcbi8vIHR5cGVzIGZvciByYXcgdGV4dCB0b2tlbnMsIGFuZCB3ZSB3YW50IHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIGhpZ2hlci1sZXZlbFxuLy8gYFBhcnNlTm9kZWAgdHlwZXMuIFRoZXNlIGBQYXJzZU5vZGVgcyBhcmUgY29uc3RydWN0ZWQgd2l0aGluIGBQYXJzZXJgIGJ5XG4vLyBsb29raW5nIHVwIHRoZSBgc3ltYm9sc2AgbWFwLlxudmFyIEFUT01TID0ge1xuICBcImJpblwiOiAxLFxuICBcImNsb3NlXCI6IDEsXG4gIFwiaW5uZXJcIjogMSxcbiAgXCJvcGVuXCI6IDEsXG4gIFwicHVuY3RcIjogMSxcbiAgXCJyZWxcIjogMVxufTtcbnZhciBOT05fQVRPTVMgPSB7XG4gIFwiYWNjZW50LXRva2VuXCI6IDEsXG4gIFwibWF0aG9yZFwiOiAxLFxuICBcIm9wLXRva2VuXCI6IDEsXG4gIFwic3BhY2luZ1wiOiAxLFxuICBcInRleHRvcmRcIjogMVxufTtcbnZhciBzeW1ib2xzID0ge1xuICBcIm1hdGhcIjoge30sXG4gIFwidGV4dFwiOiB7fVxufTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19zeW1ib2xzID0gKHN5bWJvbHMpO1xuLyoqIGBhY2NlcHRVbmljb2RlQ2hhciA9IHRydWVgIGlzIG9ubHkgYXBwbGljYWJsZSBpZiBgcmVwbGFjZWAgaXMgc2V0LiAqL1xuXG5mdW5jdGlvbiBkZWZpbmVTeW1ib2wobW9kZSwgZm9udCwgZ3JvdXAsIHJlcGxhY2UsIG5hbWUsIGFjY2VwdFVuaWNvZGVDaGFyKSB7XG4gIHN5bWJvbHNbbW9kZV1bbmFtZV0gPSB7XG4gICAgZm9udDogZm9udCxcbiAgICBncm91cDogZ3JvdXAsXG4gICAgcmVwbGFjZTogcmVwbGFjZVxuICB9O1xuXG4gIGlmIChhY2NlcHRVbmljb2RlQ2hhciAmJiByZXBsYWNlKSB7XG4gICAgc3ltYm9sc1ttb2RlXVtyZXBsYWNlXSA9IHN5bWJvbHNbbW9kZV1bbmFtZV07XG4gIH1cbn0gLy8gU29tZSBhYmJyZXZpYXRpb25zIGZvciBjb21tb25seSB1c2VkIHN0cmluZ3MuXG4vLyBUaGlzIGhlbHBzIG1pbmlmeSB0aGUgY29kZSwgYW5kIGFsc28gc3BvdHRpbmcgdHlwb3MgdXNpbmcganNoaW50LlxuLy8gbW9kZXM6XG5cbnZhciBzeW1ib2xzX21hdGggPSBcIm1hdGhcIjtcbnZhciBzeW1ib2xzX3RleHQgPSBcInRleHRcIjsgLy8gZm9udHM6XG5cbnZhciBtYWluID0gXCJtYWluXCI7XG52YXIgYW1zID0gXCJhbXNcIjsgLy8gZ3JvdXBzOlxuXG52YXIgc3ltYm9sc19hY2NlbnQgPSBcImFjY2VudC10b2tlblwiO1xudmFyIGJpbiA9IFwiYmluXCI7XG52YXIgc3ltYm9sc19jbG9zZSA9IFwiY2xvc2VcIjtcbnZhciBzeW1ib2xzX2lubmVyID0gXCJpbm5lclwiO1xudmFyIG1hdGhvcmQgPSBcIm1hdGhvcmRcIjtcbnZhciBvcCA9IFwib3AtdG9rZW5cIjtcbnZhciBzeW1ib2xzX29wZW4gPSBcIm9wZW5cIjtcbnZhciBwdW5jdCA9IFwicHVuY3RcIjtcbnZhciByZWwgPSBcInJlbFwiO1xudmFyIHN5bWJvbHNfc3BhY2luZyA9IFwic3BhY2luZ1wiO1xudmFyIHN5bWJvbHNfdGV4dG9yZCA9IFwidGV4dG9yZFwiOyAvLyBOb3cgY29tZXMgdGhlIHN5bWJvbCB0YWJsZVxuLy8gUmVsYXRpb24gU3ltYm9sc1xuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjI2MVwiLCBcIlxcXFxlcXVpdlwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjdBXCIsIFwiXFxcXHByZWNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjI3QlwiLCBcIlxcXFxzdWNjXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyM0NcIiwgXCJcXFxcc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyQTVcIiwgXCJcXFxccGVycFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyQUFGXCIsIFwiXFxcXHByZWNlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyQUIwXCIsIFwiXFxcXHN1Y2NlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjQzXCIsIFwiXFxcXHNpbWVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyMjNcIiwgXCJcXFxcbWlkXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNkFcIiwgXCJcXFxcbGxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjI2QlwiLCBcIlxcXFxnZ1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjREXCIsIFwiXFxcXGFzeW1wXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyMjVcIiwgXCJcXFxccGFyYWxsZWxcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjJDOFwiLCBcIlxcXFxib3d0aWVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjMyM1wiLCBcIlxcXFxzbWlsZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjkxXCIsIFwiXFxcXHNxc3Vic2V0ZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjI5MlwiLCBcIlxcXFxzcXN1cHNldGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNTBcIiwgXCJcXFxcZG90ZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjMyMlwiLCBcIlxcXFxmcm93blwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjBCXCIsIFwiXFxcXG5pXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyMURcIiwgXCJcXFxccHJvcHRvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyQTJcIiwgXCJcXFxcdmRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjJBM1wiLCBcIlxcXFxkYXNodlwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjBCXCIsIFwiXFxcXG93bnNcIik7IC8vIFB1bmN0dWF0aW9uXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHB1bmN0LCBcIi5cIiwgXCJcXFxcbGRvdHBcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBwdW5jdCwgXCJcXHUyMkM1XCIsIFwiXFxcXGNkb3RwXCIpOyAvLyBNaXNjIFN5bWJvbHNcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIiNcIiwgXCJcXFxcI1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCIjXCIsIFwiXFxcXCNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiJlwiLCBcIlxcXFwmXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIiZcIiwgXCJcXFxcJlwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTM1XCIsIFwiXFxcXGFsZXBoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyMDBcIiwgXCJcXFxcZm9yYWxsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIxMEZcIiwgXCJcXFxcaGJhclwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjAzXCIsIFwiXFxcXGV4aXN0c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjA3XCIsIFwiXFxcXG5hYmxhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTI2NkRcIiwgXCJcXFxcZmxhdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTEzXCIsIFwiXFxcXGVsbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyNjZFXCIsIFwiXFxcXG5hdHVyYWxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjY2M1wiLCBcIlxcXFxjbHVic3VpdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTE4XCIsIFwiXFxcXHdwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTI2NkZcIiwgXCJcXFxcc2hhcnBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjY2MlwiLCBcIlxcXFxkaWFtb25kc3VpdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTFDXCIsIFwiXFxcXFJlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTI2NjFcIiwgXCJcXFxcaGVhcnRzdWl0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIxMTFcIiwgXCJcXFxcSW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjY2MFwiLCBcIlxcXFxzcGFkZXN1aXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4QTdcIiwgXCJcXFxcU1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHhCNlwiLCBcIlxcXFxQXCIsIHRydWUpOyAvLyBNYXRoIGFuZCBUZXh0XG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDIwXCIsIFwiXFxcXGRhZ1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDIwXCIsIFwiXFxcXGRhZ1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDIwXCIsIFwiXFxcXHRleHRkYWdnZXJcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjAyMVwiLCBcIlxcXFxkZGFnXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMjFcIiwgXCJcXFxcZGRhZ1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDIxXCIsIFwiXFxcXHRleHRkYWdnZXJkYmxcIik7IC8vIExhcmdlIERlbGltaXRlcnNcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19jbG9zZSwgXCJcXHUyM0IxXCIsIFwiXFxcXHJtb3VzdGFjaGVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX29wZW4sIFwiXFx1MjNCMFwiLCBcIlxcXFxsbW91c3RhY2hlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19jbG9zZSwgXCJcXHUyN0VGXCIsIFwiXFxcXHJncm91cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCJcXHUyN0VFXCIsIFwiXFxcXGxncm91cFwiLCB0cnVlKTsgLy8gQmluYXJ5IE9wZXJhdG9yc1xuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxM1wiLCBcIlxcXFxtcFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjk2XCIsIFwiXFxcXG9taW51c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjhFXCIsIFwiXFxcXHVwbHVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOTNcIiwgXCJcXFxcc3FjYXBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxN1wiLCBcIlxcXFxhc3RcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjI5NFwiLCBcIlxcXFxzcWN1cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyNUVGXCIsIFwiXFxcXGJpZ2NpcmNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxOVwiLCBcIlxcXFxidWxsZXRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjAyMVwiLCBcIlxcXFxkZGFnZ2VyXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyNDBcIiwgXCJcXFxcd3JcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MkEzRlwiLCBcIlxcXFxhbWFsZ1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCImXCIsIFwiXFxcXEFuZFwiKTsgLy8gZnJvbSBhbXNtYXRoXG4vLyBBcnJvdyBTeW1ib2xzXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyN0Y1XCIsIFwiXFxcXGxvbmdsZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjFEMFwiLCBcIlxcXFxMZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjdGOFwiLCBcIlxcXFxMb25nbGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTI3RjZcIiwgXCJcXFxcbG9uZ3JpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjFEMlwiLCBcIlxcXFxSaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTI3RjlcIiwgXCJcXFxcTG9uZ3JpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5NFwiLCBcIlxcXFxsZWZ0cmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyN0Y3XCIsIFwiXFxcXGxvbmdsZWZ0cmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMUQ0XCIsIFwiXFxcXExlZnRyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTI3RkFcIiwgXCJcXFxcTG9uZ2xlZnRyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxQTZcIiwgXCJcXFxcbWFwc3RvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTI3RkNcIiwgXCJcXFxcbG9uZ21hcHN0b1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTk3XCIsIFwiXFxcXG5lYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjFBOVwiLCBcIlxcXFxob29rbGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxQUFcIiwgXCJcXFxcaG9va3JpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5OFwiLCBcIlxcXFxzZWFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxQkNcIiwgXCJcXFxcbGVmdGhhcnBvb251cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMUMwXCIsIFwiXFxcXHJpZ2h0aGFycG9vbnVwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTlcIiwgXCJcXFxcc3dhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMUJEXCIsIFwiXFxcXGxlZnRoYXJwb29uZG93blwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMUMxXCIsIFwiXFxcXHJpZ2h0aGFycG9vbmRvd25cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5NlwiLCBcIlxcXFxud2Fycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxQ0NcIiwgXCJcXFxccmlnaHRsZWZ0aGFycG9vbnNcIiwgdHJ1ZSk7IC8vIEFNUyBOZWdhdGVkIEJpbmFyeSBSZWxhdGlvbnNcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI2RVwiLCBcIlxcXFxubGVzc1wiLCB0cnVlKTsgLy8gU3ltYm9sIG5hbWVzIHByZWNlZWRlZCBieSBcIkBcIiBlYWNoIGhhdmUgYSBjb3JyZXNwb25kaW5nIG1hY3JvLlxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHVFMDEwXCIsIFwiXFxcXEBubGVxc2xhbnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHVFMDExXCIsIFwiXFxcXEBubGVxcVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTJBODdcIiwgXCJcXFxcbG5lcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNjhcIiwgXCJcXFxcbG5lcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHVFMDBDXCIsIFwiXFxcXEBsdmVydG5lcXFcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkU2XCIsIFwiXFxcXGxuc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MkE4OVwiLCBcIlxcXFxsbmFwcHJveFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyODBcIiwgXCJcXFxcbnByZWNcIiwgdHJ1ZSk7IC8vIHVuaWNvZGUtbWF0aCBtYXBzIFxcdTIyZTAgdG8gXFxucHJlY2N1cmx5ZXEuIFdlJ2xsIHVzZSB0aGUgQU1TIHN5bm9ueW0uXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyRTBcIiwgXCJcXFxcbnByZWNlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyRThcIiwgXCJcXFxccHJlY25zaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQUI5XCIsIFwiXFxcXHByZWNuYXBwcm94XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0MVwiLCBcIlxcXFxuc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1RTAwNlwiLCBcIlxcXFxAbnNob3J0bWlkXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjIyNFwiLCBcIlxcXFxubWlkXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJBQ1wiLCBcIlxcXFxudmRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkFEXCIsIFwiXFxcXG52RGFzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyRUFcIiwgXCJcXFxcbnRyaWFuZ2xlbGVmdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyRUNcIiwgXCJcXFxcbnRyaWFuZ2xlbGVmdGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI4QVwiLCBcIlxcXFxzdWJzZXRuZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHVFMDFBXCIsIFwiXFxcXEB2YXJzdWJzZXRuZXFcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQUNCXCIsIFwiXFxcXHN1YnNldG5lcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHVFMDE3XCIsIFwiXFxcXEB2YXJzdWJzZXRuZXFxXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI2RlwiLCBcIlxcXFxuZ3RyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1RTAwRlwiLCBcIlxcXFxAbmdlcXNsYW50XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1RTAwRVwiLCBcIlxcXFxAbmdlcXFcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQTg4XCIsIFwiXFxcXGduZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjY5XCIsIFwiXFxcXGduZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1RTAwRFwiLCBcIlxcXFxAZ3ZlcnRuZXFxXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJFN1wiLCBcIlxcXFxnbnNpbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTJBOEFcIiwgXCJcXFxcZ25hcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjgxXCIsIFwiXFxcXG5zdWNjXCIsIHRydWUpOyAvLyB1bmljb2RlLW1hdGggbWFwcyBcXHUyMmUxIHRvIFxcbnN1Y2NjdXJseWVxLiBXZSdsbCB1c2UgdGhlIEFNUyBzeW5vbnltLlxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkUxXCIsIFwiXFxcXG5zdWNjZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkU5XCIsIFwiXFxcXHN1Y2Nuc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MkFCQVwiLCBcIlxcXFxzdWNjbmFwcHJveFwiLCB0cnVlKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgXFx1MjI0NiB0byBcXHNpbW5lcXEuIFdlJ2xsIHVzZSB0aGUgQU1TIHN5bm9ueW0uXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNDZcIiwgXCJcXFxcbmNvbmdcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHVFMDA3XCIsIFwiXFxcXEBuc2hvcnRwYXJhbGxlbFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyMjZcIiwgXCJcXFxcbnBhcmFsbGVsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJBRlwiLCBcIlxcXFxuVkRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkVCXCIsIFwiXFxcXG50cmlhbmdsZXJpZ2h0XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJFRFwiLCBcIlxcXFxudHJpYW5nbGVyaWdodGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1RTAxOFwiLCBcIlxcXFxAbnN1cHNldGVxcVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyOEJcIiwgXCJcXFxcc3Vwc2V0bmVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1RTAxQlwiLCBcIlxcXFxAdmFyc3Vwc2V0bmVxXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MkFDQ1wiLCBcIlxcXFxzdXBzZXRuZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1RTAxOVwiLCBcIlxcXFxAdmFyc3Vwc2V0bmVxcVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyQUVcIiwgXCJcXFxcblZkYXNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MkFCNVwiLCBcIlxcXFxwcmVjbmVxcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTJBQjZcIiwgXCJcXFxcc3VjY25lcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHVFMDE2XCIsIFwiXFxcXEBuc3Vic2V0ZXFxXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJCNFwiLCBcIlxcXFx1bmxoZFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyQjVcIiwgXCJcXFxcdW5yaGRcIik7IC8vIEFNUyBOZWdhdGVkIEFycm93c1xuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMTlBXCIsIFwiXFxcXG5sZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMTlCXCIsIFwiXFxcXG5yaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDRFwiLCBcIlxcXFxuTGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDRlwiLCBcIlxcXFxuUmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQUVcIiwgXCJcXFxcbmxlZnRyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDRVwiLCBcIlxcXFxuTGVmdHJpZ2h0YXJyb3dcIiwgdHJ1ZSk7IC8vIEFNUyBNaXNjXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTI1QjNcIiwgXCJcXFxcdmFydHJpYW5nbGVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTBGXCIsIFwiXFxcXGhzbGFzaFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTI1QkRcIiwgXCJcXFxcdHJpYW5nbGVkb3duXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjVDQVwiLCBcIlxcXFxsb3plbmdlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjRDOFwiLCBcIlxcXFxjaXJjbGVkU1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxceEFFXCIsIFwiXFxcXGNpcmNsZWRSXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4QUVcIiwgXCJcXFxcY2lyY2xlZFJcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjIxXCIsIFwiXFxcXG1lYXN1cmVkYW5nbGVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjA0XCIsIFwiXFxcXG5leGlzdHNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTI3XCIsIFwiXFxcXG1ob1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIxMzJcIiwgXCJcXFxcRmludlwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIxNDFcIiwgXCJcXFxcR2FtZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMzVcIiwgXCJcXFxcYmFja3ByaW1lXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjVCMlwiLCBcIlxcXFxibGFja3RyaWFuZ2xlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjVCQ1wiLCBcIlxcXFxibGFja3RyaWFuZ2xlZG93blwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTI1QTBcIiwgXCJcXFxcYmxhY2tzcXVhcmVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyOUVCXCIsIFwiXFxcXGJsYWNrbG96ZW5nZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTI2MDVcIiwgXCJcXFxcYmlnc3RhclwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyMjJcIiwgXCJcXFxcc3BoZXJpY2FsYW5nbGVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjAxXCIsIFwiXFxcXGNvbXBsZW1lbnRcIiwgdHJ1ZSk7IC8vIHVuaWNvZGUtbWF0aCBtYXBzIFUrRjAgKMOwKSB0byBcXG1hdGhldGguIFdlIG1hcCB0byBBTVMgZnVuY3Rpb24gXFxldGhcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4RjBcIiwgXCJcXFxcZXRoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjU3MVwiLCBcIlxcXFxkaWFndXBcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyNTcyXCIsIFwiXFxcXGRpYWdkb3duXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjVBMVwiLCBcIlxcXFxzcXVhcmVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyNUExXCIsIFwiXFxcXEJveFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTI1Q0FcIiwgXCJcXFxcRGlhbW9uZFwiKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgVStBNSB0byBcXG1hdGh5ZW4uIFdlIG1hcCB0byBBTVMgZnVuY3Rpb24gXFx5ZW5cblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4QTVcIiwgXCJcXFxceWVuXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4QTVcIiwgXCJcXFxceWVuXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjcxM1wiLCBcIlxcXFxjaGVja21hcmtcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyNzEzXCIsIFwiXFxcXGNoZWNrbWFya1wiKTsgLy8gQU1TIEhlYnJld1xuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTM2XCIsIFwiXFxcXGJldGhcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTM4XCIsIFwiXFxcXGRhbGV0aFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIxMzdcIiwgXCJcXFxcZ2ltZWxcIiwgdHJ1ZSk7IC8vIEFNUyBHcmVla1xuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwM0REXCIsIFwiXFxcXGRpZ2FtbWFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwM0YwXCIsIFwiXFxcXHZhcmthcHBhXCIpOyAvLyBBTVMgRGVsaW1pdGVyc1xuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfb3BlbiwgXCJcXHUyNTBDXCIsIFwiXFxcXHVsY29ybmVyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX2Nsb3NlLCBcIlxcdTI1MTBcIiwgXCJcXFxcdXJjb3JuZXJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfb3BlbiwgXCJcXHUyNTE0XCIsIFwiXFxcXGxsY29ybmVyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX2Nsb3NlLCBcIlxcdTI1MThcIiwgXCJcXFxcbHJjb3JuZXJcIiwgdHJ1ZSk7IC8vIEFNUyBCaW5hcnkgUmVsYXRpb25zXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNjZcIiwgXCJcXFxcbGVxcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTJBN0RcIiwgXCJcXFxcbGVxc2xhbnRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQTk1XCIsIFwiXFxcXGVxc2xhbnRsZXNzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3MlwiLCBcIlxcXFxsZXNzc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MkE4NVwiLCBcIlxcXFxsZXNzYXBwcm94XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0QVwiLCBcIlxcXFxhcHByb3hlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyRDZcIiwgXCJcXFxcbGVzc2RvdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyRDhcIiwgXCJcXFxcbGxsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3NlwiLCBcIlxcXFxsZXNzZ3RyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJEQVwiLCBcIlxcXFxsZXNzZXFndHJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQThCXCIsIFwiXFxcXGxlc3NlcXFndHJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjUxXCIsIFwiXFxcXGRvdGVxZG90XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI1M1wiLCBcIlxcXFxyaXNpbmdkb3RzZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjUyXCIsIFwiXFxcXGZhbGxpbmdkb3RzZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjNEXCIsIFwiXFxcXGJhY2tzaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkNEXCIsIFwiXFxcXGJhY2tzaW1lcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTJBQzVcIiwgXCJcXFxcc3Vic2V0ZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJEMFwiLCBcIlxcXFxTdWJzZXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjhGXCIsIFwiXFxcXHNxc3Vic2V0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3Q1wiLCBcIlxcXFxwcmVjY3VybHllcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyREVcIiwgXCJcXFxcY3VybHllcXByZWNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjdFXCIsIFwiXFxcXHByZWNzaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQUI3XCIsIFwiXFxcXHByZWNhcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkIyXCIsIFwiXFxcXHZhcnRyaWFuZ2xlbGVmdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyQjRcIiwgXCJcXFxcdHJpYW5nbGVsZWZ0ZXFcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkE4XCIsIFwiXFxcXHZEYXNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJBQVwiLCBcIlxcXFxWdmRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMzIzXCIsIFwiXFxcXHNtYWxsc21pbGVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMzIyXCIsIFwiXFxcXHNtYWxsZnJvd25cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjRGXCIsIFwiXFxcXGJ1bXBlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNEVcIiwgXCJcXFxcQnVtcGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI2N1wiLCBcIlxcXFxnZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MkE3RVwiLCBcIlxcXFxnZXFzbGFudFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTJBOTZcIiwgXCJcXFxcZXFzbGFudGd0clwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNzNcIiwgXCJcXFxcZ3Ryc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MkE4NlwiLCBcIlxcXFxndHJhcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkQ3XCIsIFwiXFxcXGd0cmRvdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyRDlcIiwgXCJcXFxcZ2dnXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3N1wiLCBcIlxcXFxndHJsZXNzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJEQlwiLCBcIlxcXFxndHJlcWxlc3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQThDXCIsIFwiXFxcXGd0cmVxcWxlc3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjU2XCIsIFwiXFxcXGVxY2lyY1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNTdcIiwgXCJcXFxcY2lyY2VxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI1Q1wiLCBcIlxcXFx0cmlhbmdsZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjNDXCIsIFwiXFxcXHRoaWNrc2ltXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0OFwiLCBcIlxcXFx0aGlja2FwcHJveFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTJBQzZcIiwgXCJcXFxcc3Vwc2V0ZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJEMVwiLCBcIlxcXFxTdXBzZXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjkwXCIsIFwiXFxcXHNxc3Vwc2V0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3RFwiLCBcIlxcXFxzdWNjY3VybHllcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyREZcIiwgXCJcXFxcY3VybHllcXN1Y2NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjdGXCIsIFwiXFxcXHN1Y2NzaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQUI4XCIsIFwiXFxcXHN1Y2NhcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkIzXCIsIFwiXFxcXHZhcnRyaWFuZ2xlcmlnaHRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkI1XCIsIFwiXFxcXHRyaWFuZ2xlcmlnaHRlcVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyQTlcIiwgXCJcXFxcVmRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjIzXCIsIFwiXFxcXHNob3J0bWlkXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjIyNVwiLCBcIlxcXFxzaG9ydHBhcmFsbGVsXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI2Q1wiLCBcIlxcXFxiZXR3ZWVuXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJENFwiLCBcIlxcXFxwaXRjaGZvcmtcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjFEXCIsIFwiXFxcXHZhcnByb3B0b1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTI1QzBcIiwgXCJcXFxcYmxhY2t0cmlhbmdsZWxlZnRcIik7IC8vIHVuaWNvZGUtbWF0aCBzYXlzIHRoYXQgXFx0aGVyZWZvcmUgaXMgYSBtYXRob3JkIGF0b20uXG4vLyBXZSBrZXB0IHRoZSBhbXNzeW1iIGF0b20gdHlwZSwgd2hpY2ggaXMgcmVsLlxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjM0XCIsIFwiXFxcXHRoZXJlZm9yZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyMERcIiwgXCJcXFxcYmFja2Vwc2lsb25cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyNUI2XCIsIFwiXFxcXGJsYWNrdHJpYW5nbGVyaWdodFwiKTsgLy8gdW5pY29kZS1tYXRoIHNheXMgdGhhdCBcXGJlY2F1c2UgaXMgYSBtYXRob3JkIGF0b20uXG4vLyBXZSBrZXB0IHRoZSBhbXNzeW1iIGF0b20gdHlwZSwgd2hpY2ggaXMgcmVsLlxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjM1XCIsIFwiXFxcXGJlY2F1c2VcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkQ4XCIsIFwiXFxcXGxsbGVzc1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyRDlcIiwgXCJcXFxcZ2dndHJcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkIyXCIsIFwiXFxcXGxoZFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyQjNcIiwgXCJcXFxccmhkXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0MlwiLCBcIlxcXFxlcXNpbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMkM4XCIsIFwiXFxcXEpvaW5cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjUxXCIsIFwiXFxcXERvdGVxXCIsIHRydWUpOyAvLyBBTVMgQmluYXJ5IE9wZXJhdG9yc1xuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjE0XCIsIFwiXFxcXGRvdHBsdXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjE2XCIsIFwiXFxcXHNtYWxsc2V0bWludXNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkQyXCIsIFwiXFxcXENhcFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyRDNcIiwgXCJcXFxcQ3VwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBiaW4sIFwiXFx1MkE1RVwiLCBcIlxcXFxkb3VibGViYXJ3ZWRnZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyOUZcIiwgXCJcXFxcYm94bWludXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjlFXCIsIFwiXFxcXGJveHBsdXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkM3XCIsIFwiXFxcXGRpdmlkZW9udGltZXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkM5XCIsIFwiXFxcXGx0aW1lc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyQ0FcIiwgXCJcXFxccnRpbWVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJDQlwiLCBcIlxcXFxsZWZ0dGhyZWV0aW1lc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyQ0NcIiwgXCJcXFxccmlnaHR0aHJlZXRpbWVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJDRlwiLCBcIlxcXFxjdXJseXdlZGdlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJDRVwiLCBcIlxcXFxjdXJseXZlZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyOURcIiwgXCJcXFxcY2lyY2xlZGRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjlCXCIsIFwiXFxcXGNpcmNsZWRhc3RcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkM1XCIsIFwiXFxcXGNlbnRlcmRvdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyQkFcIiwgXCJcXFxcaW50ZXJjYWxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkQyXCIsIFwiXFxcXGRvdWJsZWNhcFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyRDNcIiwgXCJcXFxcZG91YmxlY3VwXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJBMFwiLCBcIlxcXFxib3h0aW1lc1wiLCB0cnVlKTsgLy8gQU1TIEFycm93c1xuLy8gTm90ZTogdW5pY29kZS1tYXRoIG1hcHMgXFx1MjFlMiB0byB0aGVpciBvd24gZnVuY3Rpb24gXFxyaWdodGRhc2hhcnJvdy5cbi8vIFdlJ2xsIG1hcCBpdCB0byBBTVMgZnVuY3Rpb24gXFxkYXNocmlnaHRhcnJvdy4gSXQgcHJvZHVjZXMgdGhlIHNhbWUgYXRvbS5cblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFFMlwiLCBcIlxcXFxkYXNocmlnaHRhcnJvd1wiLCB0cnVlKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgXFx1MjFlMCB0byBcXGxlZnRkYXNoYXJyb3cuIFdlJ2xsIHVzZSB0aGUgQU1TIHN5bm9ueW0uXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxRTBcIiwgXCJcXFxcZGFzaGxlZnRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQzdcIiwgXCJcXFxcbGVmdGxlZnRhcnJvd3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUM2XCIsIFwiXFxcXGxlZnRyaWdodGFycm93c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxREFcIiwgXCJcXFxcTGxlZnRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxOUVcIiwgXCJcXFxcdHdvaGVhZGxlZnRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQTJcIiwgXCJcXFxcbGVmdGFycm93dGFpbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQUJcIiwgXCJcXFxcbG9vcGFycm93bGVmdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQ0JcIiwgXCJcXFxcbGVmdHJpZ2h0aGFycG9vbnNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUI2XCIsIFwiXFxcXGN1cnZlYXJyb3dsZWZ0XCIsIHRydWUpOyAvLyB1bmljb2RlLW1hdGggbWFwcyBcXHUyMWJhIHRvIFxcYWN3b3BlbmNpcmNsZWFycm93LiBXZSdsbCB1c2UgdGhlIEFNUyBzeW5vbnltLlxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUJBXCIsIFwiXFxcXGNpcmNsZWFycm93bGVmdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQjBcIiwgXCJcXFxcTHNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDOFwiLCBcIlxcXFx1cHVwYXJyb3dzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFCRlwiLCBcIlxcXFx1cGhhcnBvb25sZWZ0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDM1wiLCBcIlxcXFxkb3duaGFycG9vbmxlZnRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkI4XCIsIFwiXFxcXG11bHRpbWFwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFBRFwiLCBcIlxcXFxsZWZ0cmlnaHRzcXVpZ2Fycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDOVwiLCBcIlxcXFxyaWdodHJpZ2h0YXJyb3dzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDNFwiLCBcIlxcXFxyaWdodGxlZnRhcnJvd3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUEwXCIsIFwiXFxcXHR3b2hlYWRyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFBM1wiLCBcIlxcXFxyaWdodGFycm93dGFpbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQUNcIiwgXCJcXFxcbG9vcGFycm93cmlnaHRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUI3XCIsIFwiXFxcXGN1cnZlYXJyb3dyaWdodFwiLCB0cnVlKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgXFx1MjFiYiB0byBcXGN3b3BlbmNpcmNsZWFycm93LiBXZSdsbCB1c2UgdGhlIEFNUyBzeW5vbnltLlxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUJCXCIsIFwiXFxcXGNpcmNsZWFycm93cmlnaHRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUIxXCIsIFwiXFxcXFJzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQ0FcIiwgXCJcXFxcZG93bmRvd25hcnJvd3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUJFXCIsIFwiXFxcXHVwaGFycG9vbnJpZ2h0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDMlwiLCBcIlxcXFxkb3duaGFycG9vbnJpZ2h0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFERFwiLCBcIlxcXFxyaWdodHNxdWlnYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUREXCIsIFwiXFxcXGxlYWRzdG9cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMURCXCIsIFwiXFxcXFJyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFCRVwiLCBcIlxcXFxyZXN0cmljdGlvblwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDE4XCIsIFwiYFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCIkXCIsIFwiXFxcXCRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiJFwiLCBcIlxcXFwkXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIiRcIiwgXCJcXFxcdGV4dGRvbGxhclwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCIlXCIsIFwiXFxcXCVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiJVwiLCBcIlxcXFwlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIl9cIiwgXCJcXFxcX1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJfXCIsIFwiXFxcXF9cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiX1wiLCBcIlxcXFx0ZXh0dW5kZXJzY29yZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjIwXCIsIFwiXFxcXGFuZ2xlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyMUVcIiwgXCJcXFxcaW5mdHlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjAzMlwiLCBcIlxcXFxwcmltZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyNUIzXCIsIFwiXFxcXHRyaWFuZ2xlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTAzOTNcIiwgXCJcXFxcR2FtbWFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MDM5NFwiLCBcIlxcXFxEZWx0YVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwMzk4XCIsIFwiXFxcXFRoZXRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTAzOUJcIiwgXCJcXFxcTGFtYmRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTAzOUVcIiwgXCJcXFxcWGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MDNBMFwiLCBcIlxcXFxQaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwM0EzXCIsIFwiXFxcXFNpZ21hXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTAzQTVcIiwgXCJcXFxcVXBzaWxvblwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwM0E2XCIsIFwiXFxcXFBoaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwM0E4XCIsIFwiXFxcXFBzaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwM0E5XCIsIFwiXFxcXE9tZWdhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIkFcIiwgXCJcXHUwMzkxXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIkJcIiwgXCJcXHUwMzkyXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIkVcIiwgXCJcXHUwMzk1XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlpcIiwgXCJcXHUwMzk2XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIkhcIiwgXCJcXHUwMzk3XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIklcIiwgXCJcXHUwMzk5XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIktcIiwgXCJcXHUwMzlBXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIk1cIiwgXCJcXHUwMzlDXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIk5cIiwgXCJcXHUwMzlEXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIk9cIiwgXCJcXHUwMzlGXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlBcIiwgXCJcXHUwM0ExXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlRcIiwgXCJcXHUwM0E0XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlhcIiwgXCJcXHUwM0E3XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxceEFDXCIsIFwiXFxcXG5lZ1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHhBQ1wiLCBcIlxcXFxsbm90XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyQTRcIiwgXCJcXFxcdG9wXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyQTVcIiwgXCJcXFxcYm90XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyMDVcIiwgXCJcXFxcZW1wdHlzZXRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjA1XCIsIFwiXFxcXHZhcm5vdGhpbmdcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQjFcIiwgXCJcXFxcYWxwaGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQjJcIiwgXCJcXFxcYmV0YVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNCM1wiLCBcIlxcXFxnYW1tYVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNCNFwiLCBcIlxcXFxkZWx0YVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNGNVwiLCBcIlxcXFxlcHNpbG9uXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0I2XCIsIFwiXFxcXHpldGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQjdcIiwgXCJcXFxcZXRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0I4XCIsIFwiXFxcXHRoZXRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0I5XCIsIFwiXFxcXGlvdGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQkFcIiwgXCJcXFxca2FwcGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQkJcIiwgXCJcXFxcbGFtYmRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0JDXCIsIFwiXFxcXG11XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0JEXCIsIFwiXFxcXG51XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0JFXCIsIFwiXFxcXHhpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0JGXCIsIFwiXFxcXG9taWNyb25cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQzBcIiwgXCJcXFxccGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQzFcIiwgXCJcXFxccmhvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0MzXCIsIFwiXFxcXHNpZ21hXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0M0XCIsIFwiXFxcXHRhdVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNDNVwiLCBcIlxcXFx1cHNpbG9uXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0Q1XCIsIFwiXFxcXHBoaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNDN1wiLCBcIlxcXFxjaGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQzhcIiwgXCJcXFxccHNpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0M5XCIsIFwiXFxcXG9tZWdhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0I1XCIsIFwiXFxcXHZhcmVwc2lsb25cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzRDFcIiwgXCJcXFxcdmFydGhldGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzRDZcIiwgXCJcXFxcdmFycGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzRjFcIiwgXCJcXFxcdmFycmhvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0MyXCIsIFwiXFxcXHZhcnNpZ21hXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0M2XCIsIFwiXFxcXHZhcnBoaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjE3XCIsIFwiKlwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCIrXCIsIFwiK1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjEyXCIsIFwiLVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMkM1XCIsIFwiXFxcXGNkb3RcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxOFwiLCBcIlxcXFxjaXJjXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxceEY3XCIsIFwiXFxcXGRpdlwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHhCMVwiLCBcIlxcXFxwbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHhEN1wiLCBcIlxcXFx0aW1lc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjI5XCIsIFwiXFxcXGNhcFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjJBXCIsIFwiXFxcXGN1cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjE2XCIsIFwiXFxcXHNldG1pbnVzXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyMjdcIiwgXCJcXFxcbGFuZFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjI4XCIsIFwiXFxcXGxvclwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjI3XCIsIFwiXFxcXHdlZGdlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyMjhcIiwgXCJcXFxcdmVlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyMUFcIiwgXCJcXFxcc3VyZFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCIoXCIsIFwiKFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCJbXCIsIFwiW1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCJcXHUyN0U4XCIsIFwiXFxcXGxhbmdsZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCJcXHUyMjIzXCIsIFwiXFxcXGx2ZXJ0XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19vcGVuLCBcIlxcdTIyMjVcIiwgXCJcXFxcbFZlcnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2Nsb3NlLCBcIilcIiwgXCIpXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19jbG9zZSwgXCJdXCIsIFwiXVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfY2xvc2UsIFwiP1wiLCBcIj9cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2Nsb3NlLCBcIiFcIiwgXCIhXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19jbG9zZSwgXCJcXHUyN0U5XCIsIFwiXFxcXHJhbmdsZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfY2xvc2UsIFwiXFx1MjIyM1wiLCBcIlxcXFxydmVydFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfY2xvc2UsIFwiXFx1MjIyNVwiLCBcIlxcXFxyVmVydFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCI9XCIsIFwiPVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCI8XCIsIFwiPFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCI+XCIsIFwiPlwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCI6XCIsIFwiOlwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjQ4XCIsIFwiXFxcXGFwcHJveFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjQ1XCIsIFwiXFxcXGNvbmdcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjI2NVwiLCBcIlxcXFxnZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjY1XCIsIFwiXFxcXGdlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTkwXCIsIFwiXFxcXGdldHNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiPlwiLCBcIlxcXFxndFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjA4XCIsIFwiXFxcXGluXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdUUwMjBcIiwgXCJcXFxcQG5vdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjgyXCIsIFwiXFxcXHN1YnNldFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjgzXCIsIFwiXFxcXHN1cHNldFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjg2XCIsIFwiXFxcXHN1YnNldGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyODdcIiwgXCJcXFxcc3Vwc2V0ZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjg4XCIsIFwiXFxcXG5zdWJzZXRlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyODlcIiwgXCJcXFxcbnN1cHNldGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyQThcIiwgXCJcXFxcbW9kZWxzXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTBcIiwgXCJcXFxcbGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNjRcIiwgXCJcXFxcbGVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjI2NFwiLCBcIlxcXFxsZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiPFwiLCBcIlxcXFxsdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTkyXCIsIFwiXFxcXHJpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5MlwiLCBcIlxcXFx0b1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNzFcIiwgXCJcXFxcbmdlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNzBcIiwgXCJcXFxcbmxlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfc3BhY2luZywgXCJcXHhBMFwiLCBcIlxcXFwgXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19zcGFjaW5nLCBcIlxceEEwXCIsIFwiflwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfc3BhY2luZywgXCJcXHhBMFwiLCBcIlxcXFxzcGFjZVwiKTsgLy8gUmVmOiBMYVRlWCBTb3VyY2UgMmU6IFxcRGVjbGFyZVJvYnVzdENvbW1hbmR7XFxub2JyZWFrc3BhY2V9eyVcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19zcGFjaW5nLCBcIlxceEEwXCIsIFwiXFxcXG5vYnJlYWtzcGFjZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfc3BhY2luZywgXCJcXHhBMFwiLCBcIlxcXFwgXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19zcGFjaW5nLCBcIlxceEEwXCIsIFwiflwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfc3BhY2luZywgXCJcXHhBMFwiLCBcIlxcXFxzcGFjZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfc3BhY2luZywgXCJcXHhBMFwiLCBcIlxcXFxub2JyZWFrc3BhY2VcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3NwYWNpbmcsIG51bGwsIFwiXFxcXG5vYnJlYWtcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3NwYWNpbmcsIG51bGwsIFwiXFxcXGFsbG93YnJlYWtcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBwdW5jdCwgXCIsXCIsIFwiLFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHB1bmN0LCBcIjtcIiwgXCI7XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJCQ1wiLCBcIlxcXFxiYXJ3ZWRnZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyQkJcIiwgXCJcXFxcdmVlYmFyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOTlcIiwgXCJcXFxcb2RvdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjk1XCIsIFwiXFxcXG9wbHVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOTdcIiwgXCJcXFxcb3RpbWVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyMDJcIiwgXCJcXFxccGFydGlhbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjk4XCIsIFwiXFxcXG9zbGFzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyOUFcIiwgXCJcXFxcY2lyY2xlZGNpcmNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkExXCIsIFwiXFxcXGJveGRvdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyNUIzXCIsIFwiXFxcXGJpZ3RyaWFuZ2xldXBcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjVCRFwiLCBcIlxcXFxiaWd0cmlhbmdsZWRvd25cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjAyMFwiLCBcIlxcXFxkYWdnZXJcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjJDNFwiLCBcIlxcXFxkaWFtb25kXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyQzZcIiwgXCJcXFxcc3RhclwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyNUMzXCIsIFwiXFxcXHRyaWFuZ2xlbGVmdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyNUI5XCIsIFwiXFxcXHRyaWFuZ2xlcmlnaHRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX29wZW4sIFwie1wiLCBcIlxcXFx7XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIntcIiwgXCJcXFxce1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJ7XCIsIFwiXFxcXHRleHRicmFjZWxlZnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2Nsb3NlLCBcIn1cIiwgXCJcXFxcfVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJ9XCIsIFwiXFxcXH1cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwifVwiLCBcIlxcXFx0ZXh0YnJhY2VyaWdodFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCJ7XCIsIFwiXFxcXGxicmFjZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfY2xvc2UsIFwifVwiLCBcIlxcXFxyYnJhY2VcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX29wZW4sIFwiW1wiLCBcIlxcXFxsYnJhY2tcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiW1wiLCBcIlxcXFxsYnJhY2tcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2Nsb3NlLCBcIl1cIiwgXCJcXFxccmJyYWNrXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIl1cIiwgXCJcXFxccmJyYWNrXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19vcGVuLCBcIihcIiwgXCJcXFxcbHBhcmVuXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19jbG9zZSwgXCIpXCIsIFwiXFxcXHJwYXJlblwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCI8XCIsIFwiXFxcXHRleHRsZXNzXCIpOyAvLyBpbiBUMSBmb250ZW5jXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCI+XCIsIFwiXFxcXHRleHRncmVhdGVyXCIpOyAvLyBpbiBUMSBmb250ZW5jXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCJcXHUyMzBBXCIsIFwiXFxcXGxmbG9vclwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfY2xvc2UsIFwiXFx1MjMwQlwiLCBcIlxcXFxyZmxvb3JcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX29wZW4sIFwiXFx1MjMwOFwiLCBcIlxcXFxsY2VpbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfY2xvc2UsIFwiXFx1MjMwOVwiLCBcIlxcXFxyY2VpbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXFxcXCIsIFwiXFxcXGJhY2tzbGFzaFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjIzXCIsIFwifFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjIzXCIsIFwiXFxcXHZlcnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwifFwiLCBcIlxcXFx0ZXh0YmFyXCIpOyAvLyBpbiBUMSBmb250ZW5jXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjI1XCIsIFwiXFxcXHxcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjIyNVwiLCBcIlxcXFxWZXJ0XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyMjVcIiwgXCJcXFxcdGV4dGJhcmRibFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJ+XCIsIFwiXFxcXHRleHRhc2NpaXRpbGRlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcXFxcIiwgXCJcXFxcdGV4dGJhY2tzbGFzaFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJeXCIsIFwiXFxcXHRleHRhc2NpaWNpcmN1bVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTkxXCIsIFwiXFxcXHVwYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjFEMVwiLCBcIlxcXFxVcGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTNcIiwgXCJcXFxcZG93bmFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxRDNcIiwgXCJcXFxcRG93bmFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTVcIiwgXCJcXFxcdXBkb3duYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjFENVwiLCBcIlxcXFxVcGRvd25hcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG9wLCBcIlxcdTIyMTBcIiwgXCJcXFxcY29wcm9kXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgb3AsIFwiXFx1MjJDMVwiLCBcIlxcXFxiaWd2ZWVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyMkMwXCIsIFwiXFxcXGJpZ3dlZGdlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgb3AsIFwiXFx1MkEwNFwiLCBcIlxcXFxiaWd1cGx1c1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG9wLCBcIlxcdTIyQzJcIiwgXCJcXFxcYmlnY2FwXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgb3AsIFwiXFx1MjJDM1wiLCBcIlxcXFxiaWdjdXBcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJCXCIsIFwiXFxcXGludFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG9wLCBcIlxcdTIyMkJcIiwgXCJcXFxcaW50b3BcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJDXCIsIFwiXFxcXGlpbnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJEXCIsIFwiXFxcXGlpaW50XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIwRlwiLCBcIlxcXFxwcm9kXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIxMVwiLCBcIlxcXFxzdW1cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyQTAyXCIsIFwiXFxcXGJpZ290aW1lc1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG9wLCBcIlxcdTJBMDFcIiwgXCJcXFxcYmlnb3BsdXNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyQTAwXCIsIFwiXFxcXGJpZ29kb3RcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJFXCIsIFwiXFxcXG9pbnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJGXCIsIFwiXFxcXG9paW50XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIzMFwiLCBcIlxcXFxvaWlpbnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyQTA2XCIsIFwiXFxcXGJpZ3NxY3VwXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIyQlwiLCBcIlxcXFxzbWFsbGludFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfaW5uZXIsIFwiXFx1MjAyNlwiLCBcIlxcXFx0ZXh0ZWxsaXBzaXNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2lubmVyLCBcIlxcdTIwMjZcIiwgXCJcXFxcbWF0aGVsbGlwc2lzXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19pbm5lciwgXCJcXHUyMDI2XCIsIFwiXFxcXGxkb3RzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19pbm5lciwgXCJcXHUyMDI2XCIsIFwiXFxcXGxkb3RzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19pbm5lciwgXCJcXHUyMkVGXCIsIFwiXFxcXEBjZG90c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfaW5uZXIsIFwiXFx1MjJGMVwiLCBcIlxcXFxkZG90c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMkVFXCIsIFwiXFxcXHZhcnZkb3RzXCIpOyAvLyBcXHZkb3RzIGlzIGEgbWFjcm9cblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiXFx1MDJDQVwiLCBcIlxcXFxhY3V0ZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxcdTAyQ0JcIiwgXCJcXFxcZ3JhdmVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2FjY2VudCwgXCJcXHhBOFwiLCBcIlxcXFxkZG90XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiflwiLCBcIlxcXFx0aWxkZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxcdTAyQzlcIiwgXCJcXFxcYmFyXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiXFx1MDJEOFwiLCBcIlxcXFxicmV2ZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxcdTAyQzdcIiwgXCJcXFxcY2hlY2tcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2FjY2VudCwgXCJeXCIsIFwiXFxcXGhhdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxcdTIwRDdcIiwgXCJcXFxcdmVjXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiXFx1MDJEOVwiLCBcIlxcXFxkb3RcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2FjY2VudCwgXCJcXHUwMkRBXCIsIFwiXFxcXG1hdGhyaW5nXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwMTMxXCIsIFwiXFxcXGltYXRoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwMjM3XCIsIFwiXFxcXGptYXRoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTAxMzFcIiwgXCJcXFxcaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwMjM3XCIsIFwiXFxcXGpcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4REZcIiwgXCJcXFxcc3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4RTZcIiwgXCJcXFxcYWVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4RTZcIiwgXCJcXFxcYWVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MDE1M1wiLCBcIlxcXFxvZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHhGOFwiLCBcIlxcXFxvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxceEM2XCIsIFwiXFxcXEFFXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTAxNTJcIiwgXCJcXFxcT0VcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4RDhcIiwgXCJcXFxcT1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxcdTAyQ0FcIiwgXCJcXFxcJ1wiKTsgLy8gYWN1dGVcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiXFx1MDJDQlwiLCBcIlxcXFxgXCIpOyAvLyBncmF2ZVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX2FjY2VudCwgXCJcXHUwMkM2XCIsIFwiXFxcXF5cIik7IC8vIGNpcmN1bWZsZXhcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiXFx1MDJEQ1wiLCBcIlxcXFx+XCIpOyAvLyB0aWxkZVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX2FjY2VudCwgXCJcXHUwMkM5XCIsIFwiXFxcXD1cIik7IC8vIG1hY3JvblxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX2FjY2VudCwgXCJcXHUwMkQ4XCIsIFwiXFxcXHVcIik7IC8vIGJyZXZlXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxcdTAyRDlcIiwgXCJcXFxcLlwiKTsgLy8gZG90IGFib3ZlXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxcdTAyREFcIiwgXCJcXFxcclwiKTsgLy8gcmluZyBhYm92ZVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX2FjY2VudCwgXCJcXHUwMkM3XCIsIFwiXFxcXHZcIik7IC8vIGNhcm9uXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxceEE4XCIsICdcXFxcXCInKTsgLy8gZGlhcmVzaXNcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiXFx1MDJERFwiLCBcIlxcXFxIXCIpOyAvLyBkb3VibGUgYWN1dGVcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiXFx1MjVFRlwiLCBcIlxcXFx0ZXh0Y2lyY2xlZFwiKTsgLy8gXFxiaWdjaXJjIGdseXBoXG4vLyBUaGVzZSBsaWdhdHVyZXMgYXJlIGRldGVjdGVkIGFuZCBjcmVhdGVkIGluIFBhcnNlci5qcydzIGBmb3JtTGlnYXR1cmVzYC5cblxudmFyIGxpZ2F0dXJlcyA9IHtcbiAgXCItLVwiOiB0cnVlLFxuICBcIi0tLVwiOiB0cnVlLFxuICBcImBgXCI6IHRydWUsXG4gIFwiJydcIjogdHJ1ZVxufTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDEzXCIsIFwiLS1cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjAxM1wiLCBcIlxcXFx0ZXh0ZW5kYXNoXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMTRcIiwgXCItLS1cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjAxNFwiLCBcIlxcXFx0ZXh0ZW1kYXNoXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMThcIiwgXCJgXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMThcIiwgXCJcXFxcdGV4dHF1b3RlbGVmdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDE5XCIsIFwiJ1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDE5XCIsIFwiXFxcXHRleHRxdW90ZXJpZ2h0XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMUNcIiwgXCJgYFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDFDXCIsIFwiXFxcXHRleHRxdW90ZWRibGxlZnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjAxRFwiLCBcIicnXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMURcIiwgXCJcXFxcdGV4dHF1b3RlZGJscmlnaHRcIik7IC8vICBcXGRlZ3JlZSBmcm9tIGdlbnN5bWIgcGFja2FnZVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4QjBcIiwgXCJcXFxcZGVncmVlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxceEIwXCIsIFwiXFxcXGRlZ3JlZVwiKTsgLy8gXFx0ZXh0ZGVncmVlIGZyb20gaW5wdXRlbmMgcGFja2FnZVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4QjBcIiwgXCJcXFxcdGV4dGRlZ3JlZVwiLCB0cnVlKTsgLy8gVE9ETzogSW4gTGFUZVgsIFxccG91bmRzIGNhbiBnZW5lcmF0ZSBhIGRpZmZlcmVudCBjaGFyYWN0ZXIgaW4gdGV4dCBhbmQgbWF0aFxuLy8gbW9kZSwgYnV0IGFtb25nIG91ciBmb250cywgb25seSBNYWluLUl0YWxpYyBkZWZpbmVzIHRoaXMgY2hhcmFjdGVyIFwiMTYzXCIuXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx4QTNcIiwgXCJcXFxccG91bmRzXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHhBM1wiLCBcIlxcXFxtYXRoc3RlcmxpbmdcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBtYXRob3JkLCBcIlxceEEzXCIsIFwiXFxcXHBvdW5kc1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIG1hdGhvcmQsIFwiXFx4QTNcIiwgXCJcXFxcdGV4dHN0ZXJsaW5nXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjcyMFwiLCBcIlxcXFxtYWx0ZXNlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjcyMFwiLCBcIlxcXFxtYWx0ZXNlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19zcGFjaW5nLCBcIlxceEEwXCIsIFwiXFxcXCBcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3NwYWNpbmcsIFwiXFx4QTBcIiwgXCIgXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19zcGFjaW5nLCBcIlxceEEwXCIsIFwiflwiKTsgLy8gVGhlcmUgYXJlIGxvdHMgb2Ygc3ltYm9scyB3aGljaCBhcmUgdGhlIHNhbWUsIHNvIHdlIGFkZCB0aGVtIGluIGFmdGVyd2FyZHMuXG4vLyBBbGwgb2YgdGhlc2UgYXJlIHRleHRvcmRzIGluIG1hdGggbW9kZVxuXG52YXIgbWF0aFRleHRTeW1ib2xzID0gXCIwMTIzNDU2Nzg5L0AuXFxcIlwiO1xuXG5mb3IgKHZhciBzeW1ib2xzX2kgPSAwOyBzeW1ib2xzX2kgPCBtYXRoVGV4dFN5bWJvbHMubGVuZ3RoOyBzeW1ib2xzX2krKykge1xuICB2YXIgc3ltYm9sc19jaCA9IG1hdGhUZXh0U3ltYm9scy5jaGFyQXQoc3ltYm9sc19pKTtcbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBzeW1ib2xzX2NoLCBzeW1ib2xzX2NoKTtcbn0gLy8gQWxsIG9mIHRoZXNlIGFyZSB0ZXh0b3JkcyBpbiB0ZXh0IG1vZGVcblxuXG52YXIgdGV4dFN5bWJvbHMgPSBcIjAxMjM0NTY3ODkhQCooKS09K1tdPD58XFxcIjs6Py8uLFwiO1xuXG5mb3IgKHZhciBzcmNfc3ltYm9sc19pID0gMDsgc3JjX3N5bWJvbHNfaSA8IHRleHRTeW1ib2xzLmxlbmd0aDsgc3JjX3N5bWJvbHNfaSsrKSB7XG4gIHZhciBfY2ggPSB0ZXh0U3ltYm9scy5jaGFyQXQoc3JjX3N5bWJvbHNfaSk7XG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBfY2gsIF9jaCk7XG59IC8vIEFsbCBvZiB0aGVzZSBhcmUgdGV4dG9yZHMgaW4gdGV4dCBtb2RlLCBhbmQgbWF0aG9yZHMgaW4gbWF0aCBtb2RlXG5cblxudmFyIGxldHRlcnMgPSBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjtcblxuZm9yICh2YXIgc3ltYm9sc19pMiA9IDA7IHN5bWJvbHNfaTIgPCBsZXR0ZXJzLmxlbmd0aDsgc3ltYm9sc19pMisrKSB7XG4gIHZhciBfY2gyID0gbGV0dGVycy5jaGFyQXQoc3ltYm9sc19pMik7XG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMiwgX2NoMik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoMiwgX2NoMik7XG59IC8vIEJsYWNrYm9hcmQgYm9sZCBhbmQgc2NyaXB0IGxldHRlcnMgaW4gVW5pY29kZSByYW5nZVxuXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIkNcIiwgXCJcXHUyMTAyXCIpOyAvLyBibGFja2JvYXJkIGJvbGRcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiQ1wiLCBcIlxcdTIxMDJcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJIXCIsIFwiXFx1MjEwRFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIkhcIiwgXCJcXHUyMTBEXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiTlwiLCBcIlxcdTIxMTVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJOXCIsIFwiXFx1MjExNVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlBcIiwgXCJcXHUyMTE5XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiUFwiLCBcIlxcdTIxMTlcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJRXCIsIFwiXFx1MjExQVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlFcIiwgXCJcXHUyMTFBXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiUlwiLCBcIlxcdTIxMURcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJSXCIsIFwiXFx1MjExRFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlpcIiwgXCJcXHUyMTI0XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiWlwiLCBcIlxcdTIxMjRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcImhcIiwgXCJcXHUyMTBFXCIpOyAvLyBpdGFsaWMgaCwgUGxhbmNrIGNvbnN0YW50XG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIG1hdGhvcmQsIFwiaFwiLCBcIlxcdTIxMEVcIik7IC8vIFRoZSBuZXh0IGxvb3AgbG9hZHMgd2lkZSAoc3Vycm9nYXRlIHBhaXIpIGNoYXJhY3RlcnMuXG4vLyBXZSBzdXBwb3J0IHNvbWUgbGV0dGVycyBpbiB0aGUgVW5pY29kZSByYW5nZSBVKzFENDAwIHRvIFUrMUQ3RkYsXG4vLyBNYXRoZW1hdGljYWwgQWxwaGFudW1lcmljIFN5bWJvbHMuXG4vLyBTb21lIGVkaXRvcnMgZG8gbm90IGRlYWwgd2VsbCB3aXRoIHdpZGUgY2hhcmFjdGVycy4gU28gZG9uJ3Qgd3JpdGUgdGhlXG4vLyBzdHJpbmcgaW50byB0aGlzIGZpbGUuIEluc3RlYWQsIGNyZWF0ZSB0aGUgc3RyaW5nIGZyb20gdGhlIHN1cnJvZ2F0ZSBwYWlyLlxuXG52YXIgc3ltYm9sc193aWRlQ2hhciA9IFwiXCI7XG5cbmZvciAodmFyIHN5bWJvbHNfaTMgPSAwOyBzeW1ib2xzX2kzIDwgbGV0dGVycy5sZW5ndGg7IHN5bWJvbHNfaTMrKykge1xuICB2YXIgX2NoMyA9IGxldHRlcnMuY2hhckF0KHN5bWJvbHNfaTMpOyAvLyBUaGUgaGV4IG51bWJlcnMgaW4gdGhlIG5leHQgbGluZSBhcmUgYSBzdXJyb2dhdGUgcGFpci5cbiAgLy8gMHhEODM1IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBmb3IgYWxsIGxldHRlcnMgaW4gdGhlIHJhbmdlIHdlIHN1cHBvcnQuXG4gIC8vIDB4REMwMCBpcyB0aGUgbG93IHN1cnJvZ2F0ZSBmb3IgYm9sZCBBLlxuXG5cbiAgc3ltYm9sc193aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweERDMDAgKyBzeW1ib2xzX2kzKTsgLy8gQS1aIGEteiBib2xkXG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIHN5bWJvbHNfd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhEQzM0ICsgc3ltYm9sc19pMyk7IC8vIEEtWiBhLXogaXRhbGljXG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIHN5bWJvbHNfd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhEQzY4ICsgc3ltYm9sc19pMyk7IC8vIEEtWiBhLXogYm9sZCBpdGFsaWNcblxuICBkZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBfY2gzLCBzeW1ib2xzX3dpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBfY2gzLCBzeW1ib2xzX3dpZGVDaGFyKTtcbiAgc3ltYm9sc193aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweEREMDQgKyBzeW1ib2xzX2kzKTsgLy8gQS1aIGEteiBGcmFjdHVyXG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIHN5bWJvbHNfd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhEREEwICsgc3ltYm9sc19pMyk7IC8vIEEtWiBhLXogc2Fucy1zZXJpZlxuXG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDMsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIF9jaDMsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBzeW1ib2xzX3dpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4RERENCArIHN5bWJvbHNfaTMpOyAvLyBBLVogYS16IHNhbnMgYm9sZFxuXG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDMsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIF9jaDMsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBzeW1ib2xzX3dpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REUwOCArIHN5bWJvbHNfaTMpOyAvLyBBLVogYS16IHNhbnMgaXRhbGljXG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIHN5bWJvbHNfd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERTcwICsgc3ltYm9sc19pMyk7IC8vIEEtWiBhLXogbW9ub3NwYWNlXG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG5cbiAgaWYgKHN5bWJvbHNfaTMgPCAyNikge1xuICAgIC8vIEthVGVYIGZvbnRzIGhhdmUgb25seSBjYXBpdGFsIGxldHRlcnMgZm9yIGJsYWNrYm9hcmQgYm9sZCBhbmQgc2NyaXB0LlxuICAgIC8vIFNlZSBleGNlcHRpb24gZm9yIGsgYmVsb3cuXG4gICAgc3ltYm9sc193aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweEREMzggKyBzeW1ib2xzX2kzKTsgLy8gQS1aIGRvdWJsZSBzdHJ1Y2tcblxuICAgIGRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDMsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICAgIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gICAgc3ltYm9sc193aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweERDOUMgKyBzeW1ib2xzX2kzKTsgLy8gQS1aIHNjcmlwdFxuXG4gICAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gICAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBfY2gzLCBzeW1ib2xzX3dpZGVDaGFyKTtcbiAgfSAvLyBUT0RPOiBBZGQgYm9sZCBzY3JpcHQgd2hlbiBpdCBpcyBzdXBwb3J0ZWQgYnkgYSBLYVRlWCBmb250LlxuXG59IC8vIFwia1wiIGlzIHRoZSBvbmx5IGRvdWJsZSBzdHJ1Y2sgbG93ZXIgY2FzZSBsZXR0ZXIgaW4gdGhlIEthVGVYIGZvbnRzLlxuXG5cbnN5bWJvbHNfd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERDVDKTsgLy8gayBkb3VibGUgc3RydWNrXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIFwia1wiLCBzeW1ib2xzX3dpZGVDaGFyKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJrXCIsIHN5bWJvbHNfd2lkZUNoYXIpOyAvLyBOZXh0LCBzb21lIHdpZGUgY2hhcmFjdGVyIG51bWVyYWxzXG5cbmZvciAodmFyIHN5bWJvbHNfaTQgPSAwOyBzeW1ib2xzX2k0IDwgMTA7IHN5bWJvbHNfaTQrKykge1xuICB2YXIgX2NoNCA9IHN5bWJvbHNfaTQudG9TdHJpbmcoKTtcblxuICBzeW1ib2xzX3dpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REZDRSArIHN5bWJvbHNfaTQpOyAvLyAwLTkgYm9sZFxuXG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDQsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIF9jaDQsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBzeW1ib2xzX3dpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REZFMiArIHN5bWJvbHNfaTQpOyAvLyAwLTkgc2FucyBzZXJpZlxuXG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDQsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIF9jaDQsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBzeW1ib2xzX3dpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REZFQyArIHN5bWJvbHNfaTQpOyAvLyAwLTkgYm9sZCBzYW5zXG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoNCwgc3ltYm9sc193aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoNCwgc3ltYm9sc193aWRlQ2hhcik7XG4gIHN5bWJvbHNfd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERkY2ICsgc3ltYm9sc19pNCk7IC8vIDAtOSBtb25vc3BhY2VcblxuICBkZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBfY2g0LCBzeW1ib2xzX3dpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBfY2g0LCBzeW1ib2xzX3dpZGVDaGFyKTtcbn0gLy8gV2UgYWRkIHRoZXNlIExhdGluLTEgbGV0dGVycyBhcyBzeW1ib2xzIGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSxcbi8vIGJ1dCB0aGV5IGFyZSBub3QgYWN0dWFsbHkgaW4gdGhlIGZvbnQsIG5vciBhcmUgdGhleSBzdXBwb3J0ZWQgYnkgdGhlXG4vLyBVbmljb2RlIGFjY2VudCBtZWNoYW5pc20sIHNvIHRoZXkgZmFsbCBiYWNrIHRvIFRpbWVzIGZvbnQgYW5kIGxvb2sgdWdseS5cbi8vIFRPRE8oZWRlbWFpbmUpOiBGaXggdGhpcy5cblxuXG52YXIgZXh0cmFMYXRpbiA9IFwiw4fDkMOew6fDvlwiO1xuXG5mb3IgKHZhciBfaTUgPSAwOyBfaTUgPCBleHRyYUxhdGluLmxlbmd0aDsgX2k1KyspIHtcbiAgdmFyIF9jaDUgPSBleHRyYUxhdGluLmNoYXJBdChfaTUpO1xuXG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDUsIF9jaDUpO1xuICBkZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIF9jaDUsIF9jaDUpO1xufVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiw7BcIiwgXCLDsFwiKTsgLy8gVW5pY29kZSB2ZXJzaW9ucyBvZiBleGlzdGluZyBjaGFyYWN0ZXJzXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDEzXCIsIFwi4oCTXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMTRcIiwgXCLigJRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjAxOFwiLCBcIuKAmFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDE5XCIsIFwi4oCZXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMUNcIiwgXCLigJxcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjAxRFwiLCBcIuKAnVwiKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3dpZGUtY2hhcmFjdGVyLmpzXG4vKipcbiAqIFRoaXMgZmlsZSBwcm92aWRlcyBzdXBwb3J0IGZvciBVbmljb2RlIHJhbmdlIFUrMUQ0MDAgdG8gVSsxRDdGRixcbiAqIE1hdGhlbWF0aWNhbCBBbHBoYW51bWVyaWMgU3ltYm9scy5cbiAqXG4gKiBGdW5jdGlvbiB3aWRlQ2hhcmFjdGVyRm9udCB0YWtlcyBhIHdpZGUgY2hhcmFjdGVyIGFzIGlucHV0IGFuZCByZXR1cm5zXG4gKiB0aGUgZm9udCBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8gcmVuZGVyIGl0IHByb3Blcmx5LlxuICovXG5cbi8qKlxuICogRGF0YSBiZWxvdyBpcyBmcm9tIGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL2NoYXJ0cy9QREYvVTFENDAwLnBkZlxuICogVGhhdCBkb2N1bWVudCBzb3J0cyBjaGFyYWN0ZXJzIGludG8gZ3JvdXBzIGJ5IGZvbnQgdHlwZSwgc2F5IGJvbGQgb3IgaXRhbGljLlxuICpcbiAqIEluIHRoZSBhcnJheXMgYmVsb3csIGVhY2ggc3ViYXJyYXkgY29uc2lzdHMgdGhyZWUgZWxlbWVudHM6XG4gKiAgICAgICogVGhlIENTUyBjbGFzcyBvZiB0aGF0IGdyb3VwIHdoZW4gaW4gbWF0aCBtb2RlLlxuICogICAgICAqIFRoZSBDU1MgY2xhc3Mgb2YgdGhhdCBncm91cCB3aGVuIGluIHRleHQgbW9kZS5cbiAqICAgICAgKiBUaGUgZm9udCBuYW1lLCBzbyB0aGF0IEthVGVYIGNhbiBnZXQgZm9udCBtZXRyaWNzLlxuICovXG5cbnZhciB3aWRlTGF0aW5MZXR0ZXJEYXRhID0gW1tcIm1hdGhiZlwiLCBcInRleHRiZlwiLCBcIk1haW4tQm9sZFwiXSwgLy8gQS1aIGJvbGQgdXByaWdodFxuW1wibWF0aGJmXCIsIFwidGV4dGJmXCIsIFwiTWFpbi1Cb2xkXCJdLCAvLyBhLXogYm9sZCB1cHJpZ2h0XG5bXCJtYXRoZGVmYXVsdFwiLCBcInRleHRpdFwiLCBcIk1hdGgtSXRhbGljXCJdLCAvLyBBLVogaXRhbGljXG5bXCJtYXRoZGVmYXVsdFwiLCBcInRleHRpdFwiLCBcIk1hdGgtSXRhbGljXCJdLCAvLyBhLXogaXRhbGljXG5bXCJib2xkc3ltYm9sXCIsIFwiYm9sZHN5bWJvbFwiLCBcIk1haW4tQm9sZEl0YWxpY1wiXSwgLy8gQS1aIGJvbGQgaXRhbGljXG5bXCJib2xkc3ltYm9sXCIsIFwiYm9sZHN5bWJvbFwiLCBcIk1haW4tQm9sZEl0YWxpY1wiXSwgLy8gYS16IGJvbGQgaXRhbGljXG4vLyBNYXAgZmFuY3kgQS1aIGxldHRlcnMgdG8gc2NyaXB0LCBub3QgY2FsbGlncmFwaGljLlxuLy8gVGhpcyBhbGlnbnMgd2l0aCB1bmljb2RlLW1hdGggYW5kIG1hdGggZm9udHMgKGV4Y2VwdCBDYW1icmlhIE1hdGgpLlxuW1wibWF0aHNjclwiLCBcInRleHRzY3JcIiwgXCJTY3JpcHQtUmVndWxhclwiXSwgLy8gQS1aIHNjcmlwdFxuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBhLXogc2NyaXB0LiAgTm8gZm9udFxuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBBLVogYm9sZCBzY3JpcHQuIE5vIGZvbnRcbltcIlwiLCBcIlwiLCBcIlwiXSwgLy8gYS16IGJvbGQgc2NyaXB0LiBObyBmb250XG5bXCJtYXRoZnJha1wiLCBcInRleHRmcmFrXCIsIFwiRnJha3R1ci1SZWd1bGFyXCJdLCAvLyBBLVogRnJha3R1clxuW1wibWF0aGZyYWtcIiwgXCJ0ZXh0ZnJha1wiLCBcIkZyYWt0dXItUmVndWxhclwiXSwgLy8gYS16IEZyYWt0dXJcbltcIm1hdGhiYlwiLCBcInRleHRiYlwiLCBcIkFNUy1SZWd1bGFyXCJdLCAvLyBBLVogZG91YmxlLXN0cnVja1xuW1wibWF0aGJiXCIsIFwidGV4dGJiXCIsIFwiQU1TLVJlZ3VsYXJcIl0sIC8vIGsgZG91YmxlLXN0cnVja1xuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBBLVogYm9sZCBGcmFrdHVyIE5vIGZvbnQgbWV0cmljc1xuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBhLXogYm9sZCBGcmFrdHVyLiAgIE5vIGZvbnQuXG5bXCJtYXRoc2ZcIiwgXCJ0ZXh0c2ZcIiwgXCJTYW5zU2VyaWYtUmVndWxhclwiXSwgLy8gQS1aIHNhbnMtc2VyaWZcbltcIm1hdGhzZlwiLCBcInRleHRzZlwiLCBcIlNhbnNTZXJpZi1SZWd1bGFyXCJdLCAvLyBhLXogc2Fucy1zZXJpZlxuW1wibWF0aGJvbGRzZlwiLCBcInRleHRib2xkc2ZcIiwgXCJTYW5zU2VyaWYtQm9sZFwiXSwgLy8gQS1aIGJvbGQgc2Fucy1zZXJpZlxuW1wibWF0aGJvbGRzZlwiLCBcInRleHRib2xkc2ZcIiwgXCJTYW5zU2VyaWYtQm9sZFwiXSwgLy8gYS16IGJvbGQgc2Fucy1zZXJpZlxuW1wibWF0aGl0c2ZcIiwgXCJ0ZXh0aXRzZlwiLCBcIlNhbnNTZXJpZi1JdGFsaWNcIl0sIC8vIEEtWiBpdGFsaWMgc2Fucy1zZXJpZlxuW1wibWF0aGl0c2ZcIiwgXCJ0ZXh0aXRzZlwiLCBcIlNhbnNTZXJpZi1JdGFsaWNcIl0sIC8vIGEteiBpdGFsaWMgc2Fucy1zZXJpZlxuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBBLVogYm9sZCBpdGFsaWMgc2Fucy4gTm8gZm9udFxuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBhLXogYm9sZCBpdGFsaWMgc2Fucy4gTm8gZm9udFxuW1wibWF0aHR0XCIsIFwidGV4dHR0XCIsIFwiVHlwZXdyaXRlci1SZWd1bGFyXCJdLCAvLyBBLVogbW9ub3NwYWNlXG5bXCJtYXRodHRcIiwgXCJ0ZXh0dHRcIiwgXCJUeXBld3JpdGVyLVJlZ3VsYXJcIl1dO1xudmFyIHdpZGVOdW1lcmFsRGF0YSA9IFtbXCJtYXRoYmZcIiwgXCJ0ZXh0YmZcIiwgXCJNYWluLUJvbGRcIl0sIC8vIDAtOSBib2xkXG5bXCJcIiwgXCJcIiwgXCJcIl0sIC8vIDAtOSBkb3VibGUtc3RydWNrLiBObyBLYVRlWCBmb250LlxuW1wibWF0aHNmXCIsIFwidGV4dHNmXCIsIFwiU2Fuc1NlcmlmLVJlZ3VsYXJcIl0sIC8vIDAtOSBzYW5zLXNlcmlmXG5bXCJtYXRoYm9sZHNmXCIsIFwidGV4dGJvbGRzZlwiLCBcIlNhbnNTZXJpZi1Cb2xkXCJdLCAvLyAwLTkgYm9sZCBzYW5zLXNlcmlmXG5bXCJtYXRodHRcIiwgXCJ0ZXh0dHRcIiwgXCJUeXBld3JpdGVyLVJlZ3VsYXJcIl1dO1xudmFyIHdpZGVfY2hhcmFjdGVyX3dpZGVDaGFyYWN0ZXJGb250ID0gZnVuY3Rpb24gd2lkZUNoYXJhY3RlckZvbnQod2lkZUNoYXIsIG1vZGUpIHtcbiAgLy8gSUUgZG9lc24ndCBzdXBwb3J0IGNvZGVQb2ludEF0KCkuIFNvIHdvcmsgd2l0aCB0aGUgc3Vycm9nYXRlIHBhaXIuXG4gIHZhciBIID0gd2lkZUNoYXIuY2hhckNvZGVBdCgwKTsgLy8gaGlnaCBzdXJyb2dhdGVcblxuICB2YXIgTCA9IHdpZGVDaGFyLmNoYXJDb2RlQXQoMSk7IC8vIGxvdyBzdXJyb2dhdGVcblxuICB2YXIgY29kZVBvaW50ID0gKEggLSAweEQ4MDApICogMHg0MDAgKyAoTCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB2YXIgaiA9IG1vZGUgPT09IFwibWF0aFwiID8gMCA6IDE7IC8vIGNvbHVtbiBpbmRleCBmb3IgQ1NTIGNsYXNzLlxuXG4gIGlmICgweDFENDAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPCAweDFENkE0KSB7XG4gICAgLy8gd2lkZUxhdGluTGV0dGVyRGF0YSBjb250YWlucyBleGFjdGx5IDI2IGNoYXJzIG9uIGVhY2ggcm93LlxuICAgIC8vIFNvIHdlIGNhbiBjYWxjdWxhdGUgdGhlIHJlbGV2YW50IHJvdy4gTm8gdHJhdmVyc2UgbmVjZXNzYXJ5LlxuICAgIHZhciBpID0gTWF0aC5mbG9vcigoY29kZVBvaW50IC0gMHgxRDQwMCkgLyAyNik7XG4gICAgcmV0dXJuIFt3aWRlTGF0aW5MZXR0ZXJEYXRhW2ldWzJdLCB3aWRlTGF0aW5MZXR0ZXJEYXRhW2ldW2pdXTtcbiAgfSBlbHNlIGlmICgweDFEN0NFIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxRDdGRikge1xuICAgIC8vIE51bWVyYWxzLCB0ZW4gcGVyIHJvdy5cbiAgICB2YXIgX2kgPSBNYXRoLmZsb29yKChjb2RlUG9pbnQgLSAweDFEN0NFKSAvIDEwKTtcblxuICAgIHJldHVybiBbd2lkZU51bWVyYWxEYXRhW19pXVsyXSwgd2lkZU51bWVyYWxEYXRhW19pXVtqXV07XG4gIH0gZWxzZSBpZiAoY29kZVBvaW50ID09PSAweDFENkE1IHx8IGNvZGVQb2ludCA9PT0gMHgxRDZBNikge1xuICAgIC8vIGRvdGxlc3MgaSBvciBqXG4gICAgcmV0dXJuIFt3aWRlTGF0aW5MZXR0ZXJEYXRhWzBdWzJdLCB3aWRlTGF0aW5MZXR0ZXJEYXRhWzBdW2pdXTtcbiAgfSBlbHNlIGlmICgweDFENkE2IDwgY29kZVBvaW50ICYmIGNvZGVQb2ludCA8IDB4MUQ3Q0UpIHtcbiAgICAvLyBHcmVlayBsZXR0ZXJzLiBOb3Qgc3VwcG9ydGVkLCB5ZXQuXG4gICAgcmV0dXJuIFtcIlwiLCBcIlwiXTtcbiAgfSBlbHNlIHtcbiAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGFueSB3aWRlIGNoYXJhY3RlcnMgb3V0c2lkZSAxRDQwMOKAkzFEN0ZGLlxuICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlVuc3VwcG9ydGVkIGNoYXJhY3RlcjogXCIgKyB3aWRlQ2hhcik7XG4gIH1cbn07XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9PcHRpb25zLmpzXG4vKipcbiAqIFRoaXMgZmlsZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3B0aW9ucyB0aGF0IHRoZSBQYXJzZXIgY2Fycmllc1xuICogYXJvdW5kIHdpdGggaXQgd2hpbGUgcGFyc2luZy4gRGF0YSBpcyBoZWxkIGluIGFuIGBPcHRpb25zYCBvYmplY3QsIGFuZCB3aGVuXG4gKiByZWN1cnNpbmcsIGEgbmV3IGBPcHRpb25zYCBvYmplY3QgY2FuIGJlIGNyZWF0ZWQgd2l0aCB0aGUgYC53aXRoKmAgYW5kXG4gKiBgLnJlc2V0YCBmdW5jdGlvbnMuXG4gKi9cblxudmFyIHNpemVTdHlsZU1hcCA9IFsvLyBFYWNoIGVsZW1lbnQgY29udGFpbnMgW3RleHRzaXplLCBzY3JpcHRzaXplLCBzY3JpcHRzY3JpcHRzaXplXS5cbi8vIFRoZSBzaXplIG1hcHBpbmdzIGFyZSB0YWtlbiBmcm9tIFRlWCB3aXRoIFxcbm9ybWFsc2l6ZT0xMHB0LlxuWzEsIDEsIDFdLCAvLyBzaXplMTogWzUsIDUsIDVdICAgICAgICAgICAgICBcXHRpbnlcblsyLCAxLCAxXSwgLy8gc2l6ZTI6IFs2LCA1LCA1XVxuWzMsIDEsIDFdLCAvLyBzaXplMzogWzcsIDUsIDVdICAgICAgICAgICAgICBcXHNjcmlwdHNpemVcbls0LCAyLCAxXSwgLy8gc2l6ZTQ6IFs4LCA2LCA1XSAgICAgICAgICAgICAgXFxmb290bm90ZXNpemVcbls1LCAyLCAxXSwgLy8gc2l6ZTU6IFs5LCA2LCA1XSAgICAgICAgICAgICAgXFxzbWFsbFxuWzYsIDMsIDFdLCAvLyBzaXplNjogWzEwLCA3LCA1XSAgICAgICAgICAgICBcXG5vcm1hbHNpemVcbls3LCA0LCAyXSwgLy8gc2l6ZTc6IFsxMiwgOCwgNl0gICAgICAgICAgICAgXFxsYXJnZVxuWzgsIDYsIDNdLCAvLyBzaXplODogWzE0LjQsIDEwLCA3XSAgICAgICAgICBcXExhcmdlXG5bOSwgNywgNl0sIC8vIHNpemU5OiBbMTcuMjgsIDEyLCAxMF0gICAgICAgIFxcTEFSR0VcblsxMCwgOCwgN10sIC8vIHNpemUxMDogWzIwLjc0LCAxNC40LCAxMl0gICAgIFxcaHVnZVxuWzExLCAxMCwgOV1dO1xudmFyIHNpemVNdWx0aXBsaWVycyA9IFsvLyBmb250TWV0cmljcy5qczpnZXRHbG9iYWxNZXRyaWNzIGFsc28gdXNlcyBzaXplIGluZGV4ZXMsIHNvIGlmXG4vLyB5b3UgY2hhbmdlIHNpemUgaW5kZXhlcywgY2hhbmdlIHRoYXQgZnVuY3Rpb24uXG4wLjUsIDAuNiwgMC43LCAwLjgsIDAuOSwgMS4wLCAxLjIsIDEuNDQsIDEuNzI4LCAyLjA3NCwgMi40ODhdO1xuXG52YXIgc2l6ZUF0U3R5bGUgPSBmdW5jdGlvbiBzaXplQXRTdHlsZShzaXplLCBzdHlsZSkge1xuICByZXR1cm4gc3R5bGUuc2l6ZSA8IDIgPyBzaXplIDogc2l6ZVN0eWxlTWFwW3NpemUgLSAxXVtzdHlsZS5zaXplIC0gMV07XG59OyAvLyBJbiB0aGVzZSB0eXBlcywgXCJcIiAoZW1wdHkgc3RyaW5nKSBtZWFucyBcIm5vIGNoYW5nZVwiLlxuXG5cbi8qKlxuICogVGhpcyBpcyB0aGUgbWFpbiBvcHRpb25zIGNsYXNzLiBJdCBjb250YWlucyB0aGUgY3VycmVudCBzdHlsZSwgc2l6ZSwgY29sb3IsXG4gKiBhbmQgZm9udC5cbiAqXG4gKiBPcHRpb25zIG9iamVjdHMgc2hvdWxkIG5vdCBiZSBtb2RpZmllZC4gVG8gY3JlYXRlIGEgbmV3IE9wdGlvbnMgd2l0aFxuICogZGlmZmVyZW50IHByb3BlcnRpZXMsIGNhbGwgYSBgLmhhdmluZypgIG1ldGhvZC5cbiAqL1xudmFyIE9wdGlvbnNfT3B0aW9ucyA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIC8vIEEgZm9udCBmYW1pbHkgYXBwbGllcyB0byBhIGdyb3VwIG9mIGZvbnRzIChpLmUuIFNhbnNTZXJpZiksIHdoaWxlIGEgZm9udFxuICAvLyByZXByZXNlbnRzIGEgc3BlY2lmaWMgZm9udCAoaS5lLiBTYW5zU2VyaWYgQm9sZCkuXG4gIC8vIFNlZTogaHR0cHM6Ly90ZXguc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzIyMzUwL2RpZmZlcmVuY2UtYmV0d2Vlbi10ZXh0cm0tYW5kLW1hdGhybVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBzaXplIGluZGV4LlxuICAgKi9cbiAgZnVuY3Rpb24gT3B0aW9ucyhkYXRhKSB7XG4gICAgdGhpcy5zdHlsZSA9IHZvaWQgMDtcbiAgICB0aGlzLmNvbG9yID0gdm9pZCAwO1xuICAgIHRoaXMuc2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLnRleHRTaXplID0gdm9pZCAwO1xuICAgIHRoaXMucGhhbnRvbSA9IHZvaWQgMDtcbiAgICB0aGlzLmZvbnQgPSB2b2lkIDA7XG4gICAgdGhpcy5mb250RmFtaWx5ID0gdm9pZCAwO1xuICAgIHRoaXMuZm9udFdlaWdodCA9IHZvaWQgMDtcbiAgICB0aGlzLmZvbnRTaGFwZSA9IHZvaWQgMDtcbiAgICB0aGlzLnNpemVNdWx0aXBsaWVyID0gdm9pZCAwO1xuICAgIHRoaXMubWF4U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLm1pblJ1bGVUaGlja25lc3MgPSB2b2lkIDA7XG4gICAgdGhpcy5fZm9udE1ldHJpY3MgPSB2b2lkIDA7XG4gICAgdGhpcy5zdHlsZSA9IGRhdGEuc3R5bGU7XG4gICAgdGhpcy5jb2xvciA9IGRhdGEuY29sb3I7XG4gICAgdGhpcy5zaXplID0gZGF0YS5zaXplIHx8IE9wdGlvbnMuQkFTRVNJWkU7XG4gICAgdGhpcy50ZXh0U2l6ZSA9IGRhdGEudGV4dFNpemUgfHwgdGhpcy5zaXplO1xuICAgIHRoaXMucGhhbnRvbSA9ICEhZGF0YS5waGFudG9tO1xuICAgIHRoaXMuZm9udCA9IGRhdGEuZm9udCB8fCBcIlwiO1xuICAgIHRoaXMuZm9udEZhbWlseSA9IGRhdGEuZm9udEZhbWlseSB8fCBcIlwiO1xuICAgIHRoaXMuZm9udFdlaWdodCA9IGRhdGEuZm9udFdlaWdodCB8fCAnJztcbiAgICB0aGlzLmZvbnRTaGFwZSA9IGRhdGEuZm9udFNoYXBlIHx8ICcnO1xuICAgIHRoaXMuc2l6ZU11bHRpcGxpZXIgPSBzaXplTXVsdGlwbGllcnNbdGhpcy5zaXplIC0gMV07XG4gICAgdGhpcy5tYXhTaXplID0gZGF0YS5tYXhTaXplO1xuICAgIHRoaXMubWluUnVsZVRoaWNrbmVzcyA9IGRhdGEubWluUnVsZVRoaWNrbmVzcztcbiAgICB0aGlzLl9mb250TWV0cmljcyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBvcHRpb25zIG9iamVjdCB3aXRoIHRoZSBzYW1lIHByb3BlcnRpZXMgYXMgXCJ0aGlzXCIuICBQcm9wZXJ0aWVzXG4gICAqIGZyb20gXCJleHRlbnNpb25cIiB3aWxsIGJlIGNvcGllZCB0byB0aGUgbmV3IG9wdGlvbnMgb2JqZWN0LlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBPcHRpb25zLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZXh0ZW5kID0gZnVuY3Rpb24gZXh0ZW5kKGV4dGVuc2lvbikge1xuICAgIHZhciBkYXRhID0ge1xuICAgICAgc3R5bGU6IHRoaXMuc3R5bGUsXG4gICAgICBzaXplOiB0aGlzLnNpemUsXG4gICAgICB0ZXh0U2l6ZTogdGhpcy50ZXh0U2l6ZSxcbiAgICAgIGNvbG9yOiB0aGlzLmNvbG9yLFxuICAgICAgcGhhbnRvbTogdGhpcy5waGFudG9tLFxuICAgICAgZm9udDogdGhpcy5mb250LFxuICAgICAgZm9udEZhbWlseTogdGhpcy5mb250RmFtaWx5LFxuICAgICAgZm9udFdlaWdodDogdGhpcy5mb250V2VpZ2h0LFxuICAgICAgZm9udFNoYXBlOiB0aGlzLmZvbnRTaGFwZSxcbiAgICAgIG1heFNpemU6IHRoaXMubWF4U2l6ZSxcbiAgICAgIG1pblJ1bGVUaGlja25lc3M6IHRoaXMubWluUnVsZVRoaWNrbmVzc1xuICAgIH07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gZXh0ZW5zaW9uKSB7XG4gICAgICBpZiAoZXh0ZW5zaW9uLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgZGF0YVtrZXldID0gZXh0ZW5zaW9uW2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBPcHRpb25zKGRhdGEpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gb3B0aW9ucyBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gc3R5bGUuIElmIGB0aGlzLnN0eWxlID09PSBzdHlsZWAsXG4gICAqIHJldHVybnMgYHRoaXNgLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYXZpbmdTdHlsZSA9IGZ1bmN0aW9uIGhhdmluZ1N0eWxlKHN0eWxlKSB7XG4gICAgaWYgKHRoaXMuc3R5bGUgPT09IHN0eWxlKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBzaXplOiBzaXplQXRTdHlsZSh0aGlzLnRleHRTaXplLCBzdHlsZSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJuIGFuIG9wdGlvbnMgb2JqZWN0IHdpdGggYSBjcmFtcGVkIHZlcnNpb24gb2YgdGhlIGN1cnJlbnQgc3R5bGUuIElmXG4gICAqIHRoZSBjdXJyZW50IHN0eWxlIGlzIGNyYW1wZWQsIHJldHVybnMgYHRoaXNgLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYXZpbmdDcmFtcGVkU3R5bGUgPSBmdW5jdGlvbiBoYXZpbmdDcmFtcGVkU3R5bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGF2aW5nU3R5bGUodGhpcy5zdHlsZS5jcmFtcCgpKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIGFuIG9wdGlvbnMgb2JqZWN0IHdpdGggdGhlIGdpdmVuIHNpemUgYW5kIGluIGF0IGxlYXN0IGBcXHRleHRzdHlsZWAuXG4gICAqIFJldHVybnMgYHRoaXNgIGlmIGFwcHJvcHJpYXRlLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYXZpbmdTaXplID0gZnVuY3Rpb24gaGF2aW5nU2l6ZShzaXplKSB7XG4gICAgaWYgKHRoaXMuc2l6ZSA9PT0gc2l6ZSAmJiB0aGlzLnRleHRTaXplID09PSBzaXplKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgICAgc3R5bGU6IHRoaXMuc3R5bGUudGV4dCgpLFxuICAgICAgICBzaXplOiBzaXplLFxuICAgICAgICB0ZXh0U2l6ZTogc2l6ZSxcbiAgICAgICAgc2l6ZU11bHRpcGxpZXI6IHNpemVNdWx0aXBsaWVyc1tzaXplIC0gMV1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogTGlrZSBgdGhpcy5oYXZpbmdTaXplKEJBU0VTSVpFKS5oYXZpbmdTdHlsZShzdHlsZSlgLiBJZiBgc3R5bGVgIGlzIG9taXR0ZWQsXG4gICAqIGNoYW5nZXMgdG8gYXQgbGVhc3QgYFxcdGV4dHN0eWxlYC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGF2aW5nQmFzZVN0eWxlID0gZnVuY3Rpb24gaGF2aW5nQmFzZVN0eWxlKHN0eWxlKSB7XG4gICAgc3R5bGUgPSBzdHlsZSB8fCB0aGlzLnN0eWxlLnRleHQoKTtcbiAgICB2YXIgd2FudFNpemUgPSBzaXplQXRTdHlsZShPcHRpb25zLkJBU0VTSVpFLCBzdHlsZSk7XG5cbiAgICBpZiAodGhpcy5zaXplID09PSB3YW50U2l6ZSAmJiB0aGlzLnRleHRTaXplID09PSBPcHRpb25zLkJBU0VTSVpFICYmIHRoaXMuc3R5bGUgPT09IHN0eWxlKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBzaXplOiB3YW50U2l6ZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIGVmZmVjdCBvZiBzaXppbmcgY2hhbmdlcyBzdWNoIGFzIFxcSHVnZS5cbiAgICogS2VlcCB0aGUgZWZmZWN0IG9mIHRoZSBjdXJyZW50IHN0eWxlLCBzdWNoIGFzIFxcc2NyaXB0c3R5bGUuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhdmluZ0Jhc2VTaXppbmcgPSBmdW5jdGlvbiBoYXZpbmdCYXNlU2l6aW5nKCkge1xuICAgIHZhciBzaXplO1xuXG4gICAgc3dpdGNoICh0aGlzLnN0eWxlLmlkKSB7XG4gICAgICBjYXNlIDQ6XG4gICAgICBjYXNlIDU6XG4gICAgICAgIHNpemUgPSAzOyAvLyBub3JtYWxzaXplIGluIHNjcmlwdHN0eWxlXG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNjpcbiAgICAgIGNhc2UgNzpcbiAgICAgICAgc2l6ZSA9IDE7IC8vIG5vcm1hbHNpemUgaW4gc2NyaXB0c2NyaXB0c3R5bGVcblxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgc2l6ZSA9IDY7XG4gICAgICAvLyBub3JtYWxzaXplIGluIHRleHRzdHlsZSBvciBkaXNwbGF5c3R5bGVcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5leHRlbmQoe1xuICAgICAgc3R5bGU6IHRoaXMuc3R5bGUudGV4dCgpLFxuICAgICAgc2l6ZTogc2l6ZVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgb3B0aW9ucyBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gY29sb3IuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLndpdGhDb2xvciA9IGZ1bmN0aW9uIHdpdGhDb2xvcihjb2xvcikge1xuICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICBjb2xvcjogY29sb3JcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG9wdGlvbnMgb2JqZWN0IHdpdGggXCJwaGFudG9tXCIgc2V0IHRvIHRydWUuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLndpdGhQaGFudG9tID0gZnVuY3Rpb24gd2l0aFBoYW50b20oKSB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgIHBoYW50b206IHRydWVcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBvcHRpb25zIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBtYXRoIGZvbnQgb3Igb2xkIHRleHQgZm9udC5cbiAgICogQHR5cGUge1t0eXBlXX1cbiAgICovXG4gIDtcblxuICBfcHJvdG8ud2l0aEZvbnQgPSBmdW5jdGlvbiB3aXRoRm9udChmb250KSB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgIGZvbnQ6IGZvbnRcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG9wdGlvbnMgb2JqZWN0cyB3aXRoIHRoZSBnaXZlbiBmb250RmFtaWx5LlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by53aXRoVGV4dEZvbnRGYW1pbHkgPSBmdW5jdGlvbiB3aXRoVGV4dEZvbnRGYW1pbHkoZm9udEZhbWlseSkge1xuICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICBmb250RmFtaWx5OiBmb250RmFtaWx5LFxuICAgICAgZm9udDogXCJcIlxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IG9wdGlvbnMgb2JqZWN0IHdpdGggdGhlIGdpdmVuIGZvbnQgd2VpZ2h0XG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLndpdGhUZXh0Rm9udFdlaWdodCA9IGZ1bmN0aW9uIHdpdGhUZXh0Rm9udFdlaWdodChmb250V2VpZ2h0KSB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgIGZvbnRXZWlnaHQ6IGZvbnRXZWlnaHQsXG4gICAgICBmb250OiBcIlwiXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgb3B0aW9ucyBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gZm9udCB3ZWlnaHRcbiAgICovXG4gIDtcblxuICBfcHJvdG8ud2l0aFRleHRGb250U2hhcGUgPSBmdW5jdGlvbiB3aXRoVGV4dEZvbnRTaGFwZShmb250U2hhcGUpIHtcbiAgICByZXR1cm4gdGhpcy5leHRlbmQoe1xuICAgICAgZm9udFNoYXBlOiBmb250U2hhcGUsXG4gICAgICBmb250OiBcIlwiXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgQ1NTIHNpemluZyBjbGFzc2VzIHJlcXVpcmVkIHRvIHN3aXRjaCBmcm9tIGVuY2xvc2luZyBvcHRpb25zXG4gICAqIGBvbGRPcHRpb25zYCB0byBgdGhpc2AuIFJldHVybnMgYW4gYXJyYXkgb2YgY2xhc3Nlcy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uc2l6aW5nQ2xhc3NlcyA9IGZ1bmN0aW9uIHNpemluZ0NsYXNzZXMob2xkT3B0aW9ucykge1xuICAgIGlmIChvbGRPcHRpb25zLnNpemUgIT09IHRoaXMuc2l6ZSkge1xuICAgICAgcmV0dXJuIFtcInNpemluZ1wiLCBcInJlc2V0LXNpemVcIiArIG9sZE9wdGlvbnMuc2l6ZSwgXCJzaXplXCIgKyB0aGlzLnNpemVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIENTUyBzaXppbmcgY2xhc3NlcyByZXF1aXJlZCB0byBzd2l0Y2ggdG8gdGhlIGJhc2Ugc2l6ZS4gTGlrZVxuICAgKiBgdGhpcy5oYXZpbmdTaXplKEJBU0VTSVpFKS5zaXppbmdDbGFzc2VzKHRoaXMpYC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uYmFzZVNpemluZ0NsYXNzZXMgPSBmdW5jdGlvbiBiYXNlU2l6aW5nQ2xhc3NlcygpIHtcbiAgICBpZiAodGhpcy5zaXplICE9PSBPcHRpb25zLkJBU0VTSVpFKSB7XG4gICAgICByZXR1cm4gW1wic2l6aW5nXCIsIFwicmVzZXQtc2l6ZVwiICsgdGhpcy5zaXplLCBcInNpemVcIiArIE9wdGlvbnMuQkFTRVNJWkVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGZvbnQgbWV0cmljcyBmb3IgdGhpcyBzaXplLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5mb250TWV0cmljcyA9IGZ1bmN0aW9uIGZvbnRNZXRyaWNzKCkge1xuICAgIGlmICghdGhpcy5fZm9udE1ldHJpY3MpIHtcbiAgICAgIHRoaXMuX2ZvbnRNZXRyaWNzID0gZ2V0R2xvYmFsTWV0cmljcyh0aGlzLnNpemUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9mb250TWV0cmljcztcbiAgfVxuICAvKipcbiAgICogR2V0cyB0aGUgQ1NTIGNvbG9yIG9mIHRoZSBjdXJyZW50IG9wdGlvbnMgb2JqZWN0XG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmdldENvbG9yID0gZnVuY3Rpb24gZ2V0Q29sb3IoKSB7XG4gICAgaWYgKHRoaXMucGhhbnRvbSkge1xuICAgICAgcmV0dXJuIFwidHJhbnNwYXJlbnRcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuY29sb3I7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBPcHRpb25zO1xufSgpO1xuXG5PcHRpb25zX09wdGlvbnMuQkFTRVNJWkUgPSA2O1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX09wdGlvbnMgPSAoT3B0aW9uc19PcHRpb25zKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3VuaXRzLmpzXG4vKipcbiAqIFRoaXMgZmlsZSBkb2VzIGNvbnZlcnNpb24gYmV0d2VlbiB1bml0cy4gIEluIHBhcnRpY3VsYXIsIGl0IHByb3ZpZGVzXG4gKiBjYWxjdWxhdGVTaXplIHRvIGNvbnZlcnQgb3RoZXIgdW5pdHMgaW50byBlbXMuXG4gKi9cblxuIC8vIFRoaXMgdGFibGUgZ2l2ZXMgdGhlIG51bWJlciBvZiBUZVggcHRzIGluIG9uZSBvZiBlYWNoICphYnNvbHV0ZSogVGVYIHVuaXQuXG4vLyBUaHVzLCBtdWx0aXBseWluZyBhIGxlbmd0aCBieSB0aGlzIG51bWJlciBjb252ZXJ0cyB0aGUgbGVuZ3RoIGZyb20gdW5pdHNcbi8vIGludG8gcHRzLiAgRGl2aWRpbmcgdGhlIHJlc3VsdCBieSBwdFBlckVtIGdpdmVzIHRoZSBudW1iZXIgb2YgZW1zXG4vLyAqYXNzdW1pbmcqIGEgZm9udCBzaXplIG9mIHB0UGVyRW0gKG5vcm1hbCBzaXplLCBub3JtYWwgc3R5bGUpLlxuXG52YXIgcHRQZXJVbml0ID0ge1xuICAvLyBodHRwczovL2VuLndpa2lib29rcy5vcmcvd2lraS9MYVRlWC9MZW5ndGhzIGFuZFxuICAvLyBodHRwczovL3RleC5zdGFja2V4Y2hhbmdlLmNvbS9hLzgyNjNcbiAgXCJwdFwiOiAxLFxuICAvLyBUZVggcG9pbnRcbiAgXCJtbVwiOiA3MjI3IC8gMjU0MCxcbiAgLy8gbWlsbGltZXRlclxuICBcImNtXCI6IDcyMjcgLyAyNTQsXG4gIC8vIGNlbnRpbWV0ZXJcbiAgXCJpblwiOiA3Mi4yNyxcbiAgLy8gaW5jaFxuICBcImJwXCI6IDgwMyAvIDgwMCxcbiAgLy8gYmlnIChQb3N0U2NyaXB0KSBwb2ludHNcbiAgXCJwY1wiOiAxMixcbiAgLy8gcGljYVxuICBcImRkXCI6IDEyMzggLyAxMTU3LFxuICAvLyBkaWRvdFxuICBcImNjXCI6IDE0ODU2IC8gMTE1NyxcbiAgLy8gY2ljZXJvICgxMiBkaWRvdClcbiAgXCJuZFwiOiA2ODUgLyA2NDIsXG4gIC8vIG5ldyBkaWRvdFxuICBcIm5jXCI6IDEzNzAgLyAxMDcsXG4gIC8vIG5ldyBjaWNlcm8gKDEyIG5ldyBkaWRvdClcbiAgXCJzcFwiOiAxIC8gNjU1MzYsXG4gIC8vIHNjYWxlZCBwb2ludCAoVGVYJ3MgaW50ZXJuYWwgc21hbGxlc3QgdW5pdClcbiAgLy8gaHR0cHM6Ly90ZXguc3RhY2tleGNoYW5nZS5jb20vYS80MTM3MVxuICBcInB4XCI6IDgwMyAvIDgwMCAvLyBcXHBkZnB4ZGltZW4gZGVmYXVsdHMgdG8gMSBicCBpbiBwZGZUZVggYW5kIEx1YVRlWFxuXG59OyAvLyBEaWN0aW9uYXJ5IG9mIHJlbGF0aXZlIHVuaXRzLCBmb3IgZmFzdCB2YWxpZGl0eSB0ZXN0aW5nLlxuXG52YXIgcmVsYXRpdmVVbml0ID0ge1xuICBcImV4XCI6IHRydWUsXG4gIFwiZW1cIjogdHJ1ZSxcbiAgXCJtdVwiOiB0cnVlXG59O1xuXG4vKipcbiAqIERldGVybWluZSB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgdW5pdCAoZWl0aGVyIGEgc3RyaW5nIGRlZmluaW5nIHRoZSB1bml0XG4gKiBvciBhIFwic2l6ZVwiIHBhcnNlIG5vZGUgY29udGFpbmluZyBhIHVuaXQgZmllbGQpIGlzIHZhbGlkLlxuICovXG52YXIgdmFsaWRVbml0ID0gZnVuY3Rpb24gdmFsaWRVbml0KHVuaXQpIHtcbiAgaWYgKHR5cGVvZiB1bml0ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgdW5pdCA9IHVuaXQudW5pdDtcbiAgfVxuXG4gIHJldHVybiB1bml0IGluIHB0UGVyVW5pdCB8fCB1bml0IGluIHJlbGF0aXZlVW5pdCB8fCB1bml0ID09PSBcImV4XCI7XG59O1xuLypcbiAqIENvbnZlcnQgYSBcInNpemVcIiBwYXJzZSBub2RlICh3aXRoIG51bWVyaWMgXCJudW1iZXJcIiBhbmQgc3RyaW5nIFwidW5pdFwiIGZpZWxkcyxcbiAqIGFzIHBhcnNlZCBieSBmdW5jdGlvbnMuanMgYXJnVHlwZSBcInNpemVcIikgaW50byBhIENTUyBlbSB2YWx1ZSBmb3IgdGhlXG4gKiBjdXJyZW50IHN0eWxlL3NjYWxlLiAgYG9wdGlvbnNgIGdpdmVzIHRoZSBjdXJyZW50IG9wdGlvbnMuXG4gKi9cblxudmFyIHVuaXRzX2NhbGN1bGF0ZVNpemUgPSBmdW5jdGlvbiBjYWxjdWxhdGVTaXplKHNpemVWYWx1ZSwgb3B0aW9ucykge1xuICB2YXIgc2NhbGU7XG5cbiAgaWYgKHNpemVWYWx1ZS51bml0IGluIHB0UGVyVW5pdCkge1xuICAgIC8vIEFic29sdXRlIHVuaXRzXG4gICAgc2NhbGUgPSBwdFBlclVuaXRbc2l6ZVZhbHVlLnVuaXRdIC8vIENvbnZlcnQgdW5pdCB0byBwdFxuICAgIC8gb3B0aW9ucy5mb250TWV0cmljcygpLnB0UGVyRW0gLy8gQ29udmVydCBwdCB0byBDU1MgZW1cbiAgICAvIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7IC8vIFVuc2NhbGUgdG8gbWFrZSBhYnNvbHV0ZSB1bml0c1xuICB9IGVsc2UgaWYgKHNpemVWYWx1ZS51bml0ID09PSBcIm11XCIpIHtcbiAgICAvLyBgbXVgIHVuaXRzIHNjYWxlIHdpdGggc2NyaXB0c3R5bGUvc2NyaXB0c2NyaXB0c3R5bGUuXG4gICAgc2NhbGUgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuY3NzRW1QZXJNdTtcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlciByZWxhdGl2ZSB1bml0cyBhbHdheXMgcmVmZXIgdG8gdGhlICp0ZXh0c3R5bGUqIGZvbnRcbiAgICAvLyBpbiB0aGUgY3VycmVudCBzaXplLlxuICAgIHZhciB1bml0T3B0aW9ucztcblxuICAgIGlmIChvcHRpb25zLnN0eWxlLmlzVGlnaHQoKSkge1xuICAgICAgLy8gaXNUaWdodCgpIG1lYW5zIGN1cnJlbnQgc3R5bGUgaXMgc2NyaXB0L3NjcmlwdHNjcmlwdC5cbiAgICAgIHVuaXRPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShvcHRpb25zLnN0eWxlLnRleHQoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuaXRPcHRpb25zID0gb3B0aW9ucztcbiAgICB9IC8vIFRPRE86IEluIFRlWCB0aGVzZSB1bml0cyBhcmUgcmVsYXRpdmUgdG8gdGhlIHF1YWQgb2YgdGhlIGN1cnJlbnRcbiAgICAvLyAqdGV4dCogZm9udCwgZS5nLiBjbXIxMC4gS2FUZVggaW5zdGVhZCB1c2VzIHZhbHVlcyBmcm9tIHRoZVxuICAgIC8vIGNvbXBhcmFibHktc2l6ZWQgKkNvbXB1dGVyIE1vZGVybiBzeW1ib2wqIGZvbnQuIEF0IDEwcHQsIHRoZXNlXG4gICAgLy8gbWF0Y2guIEF0IDdwdCBhbmQgNXB0LCB0aGV5IGRpZmZlcjogY21yNz0xLjEzODg5NCwgY21zeTc9MS4xNzA2NDE7XG4gICAgLy8gY21yNT0xLjM2MTEzMywgY21zeTU9MS40NzIyNDEuIENvbnNpZGVyICRcXHNjcmlwdHNpemUgYVxca2VybjFlbWIkLlxuICAgIC8vIFRlWCBcXHNob3dsaXN0cyBzaG93cyBhIGtlcm4gb2YgMS4xMzg4OSAqIGZvbnRzaXplO1xuICAgIC8vIEthVGVYIHNob3dzIGEga2VybiBvZiAxLjE3MSAqIGZvbnRzaXplLlxuXG5cbiAgICBpZiAoc2l6ZVZhbHVlLnVuaXQgPT09IFwiZXhcIikge1xuICAgICAgc2NhbGUgPSB1bml0T3B0aW9ucy5mb250TWV0cmljcygpLnhIZWlnaHQ7XG4gICAgfSBlbHNlIGlmIChzaXplVmFsdWUudW5pdCA9PT0gXCJlbVwiKSB7XG4gICAgICBzY2FsZSA9IHVuaXRPcHRpb25zLmZvbnRNZXRyaWNzKCkucXVhZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCB1bml0OiAnXCIgKyBzaXplVmFsdWUudW5pdCArIFwiJ1wiKTtcbiAgICB9XG5cbiAgICBpZiAodW5pdE9wdGlvbnMgIT09IG9wdGlvbnMpIHtcbiAgICAgIHNjYWxlICo9IHVuaXRPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gTWF0aC5taW4oc2l6ZVZhbHVlLm51bWJlciAqIHNjYWxlLCBvcHRpb25zLm1heFNpemUpO1xufTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2J1aWxkQ29tbW9uLmpzXG4vKiBlc2xpbnQgbm8tY29uc29sZTowICovXG5cbi8qKlxuICogVGhpcyBtb2R1bGUgY29udGFpbnMgZ2VuZXJhbCBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCBmb3IgYnVpbGRpbmdcbiAqIGRpZmZlcmVudCBraW5kcyBvZiBkb21UcmVlIG5vZGVzIGluIGEgY29uc2lzdGVudCBtYW5uZXIuXG4gKi9cblxuXG5cblxuXG5cblxuLy8gVGhlIGZvbGxvd2luZyBoYXZlIHRvIGJlIGxvYWRlZCBmcm9tIE1haW4tSXRhbGljIGZvbnQsIHVzaW5nIGNsYXNzIG1hdGhpdFxudmFyIG1hdGhpdExldHRlcnMgPSBbXCJcXFxcaW1hdGhcIiwgXCLEsVwiLCAvLyBkb3RsZXNzIGlcblwiXFxcXGptYXRoXCIsIFwiyLdcIiwgLy8gZG90bGVzcyBqXG5cIlxcXFxwb3VuZHNcIiwgXCJcXFxcbWF0aHN0ZXJsaW5nXCIsIFwiXFxcXHRleHRzdGVybGluZ1wiLCBcIsKjXCJdO1xuLyoqXG4gKiBMb29rcyB1cCB0aGUgZ2l2ZW4gc3ltYm9sIGluIGZvbnRNZXRyaWNzLCBhZnRlciBhcHBseWluZyBhbnkgc3ltYm9sXG4gKiByZXBsYWNlbWVudHMgZGVmaW5lZCBpbiBzeW1ib2wuanNcbiAqL1xuXG52YXIgYnVpbGRDb21tb25fbG9va3VwU3ltYm9sID0gZnVuY3Rpb24gbG9va3VwU3ltYm9sKHZhbHVlLCAvLyBUT0RPKCM5NjMpOiBVc2UgYSB1bmlvbiB0eXBlIGZvciB0aGlzLlxuZm9udE5hbWUsIG1vZGUpIHtcbiAgLy8gUmVwbGFjZSB0aGUgdmFsdWUgd2l0aCBpdHMgcmVwbGFjZWQgdmFsdWUgZnJvbSBzeW1ib2wuanNcbiAgaWYgKHNyY19zeW1ib2xzW21vZGVdW3ZhbHVlXSAmJiBzcmNfc3ltYm9sc1ttb2RlXVt2YWx1ZV0ucmVwbGFjZSkge1xuICAgIHZhbHVlID0gc3JjX3N5bWJvbHNbbW9kZV1bdmFsdWVdLnJlcGxhY2U7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBtZXRyaWNzOiBnZXRDaGFyYWN0ZXJNZXRyaWNzKHZhbHVlLCBmb250TmFtZSwgbW9kZSlcbiAgfTtcbn07XG4vKipcbiAqIE1ha2VzIGEgc3ltYm9sTm9kZSBhZnRlciB0cmFuc2xhdGlvbiB2aWEgdGhlIGxpc3Qgb2Ygc3ltYm9scyBpbiBzeW1ib2xzLmpzLlxuICogQ29ycmVjdGx5IHB1bGxzIG91dCBtZXRyaWNzIGZvciB0aGUgY2hhcmFjdGVyLCBhbmQgb3B0aW9uYWxseSB0YWtlcyBhIGxpc3Qgb2ZcbiAqIGNsYXNzZXMgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIG5vZGUuXG4gKlxuICogVE9ETzogbWFrZSBhcmd1bWVudCBvcmRlciBjbG9zZXIgdG8gbWFrZVNwYW5cbiAqIFRPRE86IGFkZCBhIHNlcGFyYXRlIGFyZ3VtZW50IGZvciBtYXRoIGNsYXNzIChlLmcuIGBtb3BgLCBgbWJpbmApLCB3aGljaFxuICogc2hvdWxkIGlmIHByZXNlbnQgY29tZSBmaXJzdCBpbiBgY2xhc3Nlc2AuXG4gKiBUT0RPKCM5NTMpOiBNYWtlIGBvcHRpb25zYCBtYW5kYXRvcnkgYW5kIGFsd2F5cyBwYXNzIGl0IGluLlxuICovXG5cblxudmFyIGJ1aWxkQ29tbW9uX21ha2VTeW1ib2wgPSBmdW5jdGlvbiBtYWtlU3ltYm9sKHZhbHVlLCBmb250TmFtZSwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcykge1xuICB2YXIgbG9va3VwID0gYnVpbGRDb21tb25fbG9va3VwU3ltYm9sKHZhbHVlLCBmb250TmFtZSwgbW9kZSk7XG4gIHZhciBtZXRyaWNzID0gbG9va3VwLm1ldHJpY3M7XG4gIHZhbHVlID0gbG9va3VwLnZhbHVlO1xuICB2YXIgc3ltYm9sTm9kZTtcblxuICBpZiAobWV0cmljcykge1xuICAgIHZhciBpdGFsaWMgPSBtZXRyaWNzLml0YWxpYztcblxuICAgIGlmIChtb2RlID09PSBcInRleHRcIiB8fCBvcHRpb25zICYmIG9wdGlvbnMuZm9udCA9PT0gXCJtYXRoaXRcIikge1xuICAgICAgaXRhbGljID0gMDtcbiAgICB9XG5cbiAgICBzeW1ib2xOb2RlID0gbmV3IGRvbVRyZWVfU3ltYm9sTm9kZSh2YWx1ZSwgbWV0cmljcy5oZWlnaHQsIG1ldHJpY3MuZGVwdGgsIGl0YWxpYywgbWV0cmljcy5za2V3LCBtZXRyaWNzLndpZHRoLCBjbGFzc2VzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBUT0RPKGVtaWx5KTogRmlndXJlIG91dCBhIGdvb2Qgd2F5IHRvIG9ubHkgcHJpbnQgdGhpcyBpbiBkZXZlbG9wbWVudFxuICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIk5vIGNoYXJhY3RlciBtZXRyaWNzIFwiICsgKFwiZm9yICdcIiArIHZhbHVlICsgXCInIGluIHN0eWxlICdcIiArIGZvbnROYW1lICsgXCInIGFuZCBtb2RlICdcIiArIG1vZGUgKyBcIidcIikpO1xuICAgIHN5bWJvbE5vZGUgPSBuZXcgZG9tVHJlZV9TeW1ib2xOb2RlKHZhbHVlLCAwLCAwLCAwLCAwLCAwLCBjbGFzc2VzKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgc3ltYm9sTm9kZS5tYXhGb250U2l6ZSA9IG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG5cbiAgICBpZiAob3B0aW9ucy5zdHlsZS5pc1RpZ2h0KCkpIHtcbiAgICAgIHN5bWJvbE5vZGUuY2xhc3Nlcy5wdXNoKFwibXRpZ2h0XCIpO1xuICAgIH1cblxuICAgIHZhciBjb2xvciA9IG9wdGlvbnMuZ2V0Q29sb3IoKTtcblxuICAgIGlmIChjb2xvcikge1xuICAgICAgc3ltYm9sTm9kZS5zdHlsZS5jb2xvciA9IGNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW1ib2xOb2RlO1xufTtcbi8qKlxuICogTWFrZXMgYSBzeW1ib2wgaW4gTWFpbi1SZWd1bGFyIG9yIEFNUy1SZWd1bGFyLlxuICogVXNlZCBmb3IgcmVsLCBiaW4sIG9wZW4sIGNsb3NlLCBpbm5lciwgYW5kIHB1bmN0LlxuICovXG5cblxudmFyIGJ1aWxkQ29tbW9uX21hdGhzeW0gPSBmdW5jdGlvbiBtYXRoc3ltKHZhbHVlLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzKSB7XG4gIGlmIChjbGFzc2VzID09PSB2b2lkIDApIHtcbiAgICBjbGFzc2VzID0gW107XG4gIH1cblxuICAvLyBEZWNpZGUgd2hhdCBmb250IHRvIHJlbmRlciB0aGUgc3ltYm9sIGluIGJ5IGl0cyBlbnRyeSBpbiB0aGUgc3ltYm9sc1xuICAvLyB0YWJsZS5cbiAgLy8gSGF2ZSBhIHNwZWNpYWwgY2FzZSBmb3Igd2hlbiB0aGUgdmFsdWUgPSBcXCBiZWNhdXNlIHRoZSBcXCBpcyB1c2VkIGFzIGFcbiAgLy8gdGV4dG9yZCBpbiB1bnN1cHBvcnRlZCBjb21tYW5kIGVycm9ycyBidXQgY2Fubm90IGJlIHBhcnNlZCBhcyBhIHJlZ3VsYXJcbiAgLy8gdGV4dCBvcmRpbmFsIGFuZCBpcyB0aGVyZWZvcmUgbm90IHByZXNlbnQgYXMgYSBzeW1ib2wgaW4gdGhlIHN5bWJvbHNcbiAgLy8gdGFibGUgZm9yIHRleHQsIGFzIHdlbGwgYXMgYSBzcGVjaWFsIGNhc2UgZm9yIGJvbGRzeW1ib2wgYmVjYXVzZSBpdFxuICAvLyBjYW4gYmUgdXNlZCBmb3IgYm9sZCArIGFuZCAtXG4gIGlmIChvcHRpb25zLmZvbnQgPT09IFwiYm9sZHN5bWJvbFwiICYmIGJ1aWxkQ29tbW9uX2xvb2t1cFN5bWJvbCh2YWx1ZSwgXCJNYWluLUJvbGRcIiwgbW9kZSkubWV0cmljcykge1xuICAgIHJldHVybiBidWlsZENvbW1vbl9tYWtlU3ltYm9sKHZhbHVlLCBcIk1haW4tQm9sZFwiLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzLmNvbmNhdChbXCJtYXRoYmZcIl0pKTtcbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gXCJcXFxcXCIgfHwgc3JjX3N5bWJvbHNbbW9kZV1bdmFsdWVdLmZvbnQgPT09IFwibWFpblwiKSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uX21ha2VTeW1ib2wodmFsdWUsIFwiTWFpbi1SZWd1bGFyXCIsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBidWlsZENvbW1vbl9tYWtlU3ltYm9sKHZhbHVlLCBcIkFNUy1SZWd1bGFyXCIsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KFtcImFtc3JtXCJdKSk7XG4gIH1cbn07XG4vKipcbiAqIERldGVybWluZXMgd2hpY2ggb2YgdGhlIHR3byBmb250IG5hbWVzIChNYWluLUl0YWxpYyBhbmQgTWF0aC1JdGFsaWMpIGFuZFxuICogY29ycmVzcG9uZGluZyBzdHlsZSB0YWdzIChtYWluZGVmYXVsdCBvciBtYXRoaXQpIHRvIHVzZSBmb3IgZGVmYXVsdCBtYXRoIGZvbnQsXG4gKiBkZXBlbmRpbmcgb24gdGhlIHN5bWJvbC5cbiAqL1xuXG5cbnZhciBidWlsZENvbW1vbl9tYXRoZGVmYXVsdCA9IGZ1bmN0aW9uIG1hdGhkZWZhdWx0KHZhbHVlLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzKSB7XG4gIGlmICgvWzAtOV0vLnRlc3QodmFsdWUuY2hhckF0KDApKSB8fCAvLyBnbHlwaHMgZm9yIFxcaW1hdGggYW5kIFxcam1hdGggZG8gbm90IGV4aXN0IGluIE1hdGgtSXRhbGljIHNvIHdlXG4gIC8vIG5lZWQgdG8gdXNlIE1haW4tSXRhbGljIGluc3RlYWRcbiAgdXRpbHMuY29udGFpbnMobWF0aGl0TGV0dGVycywgdmFsdWUpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvbnROYW1lOiBcIk1haW4tSXRhbGljXCIsXG4gICAgICBmb250Q2xhc3M6IFwibWF0aGl0XCJcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICBmb250TmFtZTogXCJNYXRoLUl0YWxpY1wiLFxuICAgICAgZm9udENsYXNzOiBcIm1hdGhkZWZhdWx0XCJcbiAgICB9O1xuICB9XG59O1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoaWNoIG9mIHRoZSBmb250IG5hbWVzIChNYWluLUl0YWxpYywgTWF0aC1JdGFsaWMsIGFuZCBDYWxpZ3JhcGhpYylcbiAqIGFuZCBjb3JyZXNwb25kaW5nIHN0eWxlIHRhZ3MgKG1hdGhpdCwgbWF0aGRlZmF1bHQsIG9yIG1hdGhjYWwpIHRvIHVzZSBmb3IgZm9udFxuICogXCJtYXRobm9ybWFsXCIsIGRlcGVuZGluZyBvbiB0aGUgc3ltYm9sLiAgVXNlIHRoaXMgZnVuY3Rpb24gaW5zdGVhZCBvZiBmb250TWFwIGZvclxuICogZm9udCBcIm1hdGhub3JtYWxcIi5cbiAqL1xuXG5cbnZhciBidWlsZENvbW1vbl9tYXRobm9ybWFsID0gZnVuY3Rpb24gbWF0aG5vcm1hbCh2YWx1ZSwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcykge1xuICBpZiAodXRpbHMuY29udGFpbnMobWF0aGl0TGV0dGVycywgdmFsdWUpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvbnROYW1lOiBcIk1haW4tSXRhbGljXCIsXG4gICAgICBmb250Q2xhc3M6IFwibWF0aGl0XCJcbiAgICB9O1xuICB9IGVsc2UgaWYgKC9bMC05XS8udGVzdCh2YWx1ZS5jaGFyQXQoMCkpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvbnROYW1lOiBcIkNhbGlncmFwaGljLVJlZ3VsYXJcIixcbiAgICAgIGZvbnRDbGFzczogXCJtYXRoY2FsXCJcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICBmb250TmFtZTogXCJNYXRoLUl0YWxpY1wiLFxuICAgICAgZm9udENsYXNzOiBcIm1hdGhkZWZhdWx0XCJcbiAgICB9O1xuICB9XG59O1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoaWNoIG9mIHRoZSB0d28gZm9udCBuYW1lcyAoTWFpbi1Cb2xkIGFuZCBNYXRoLUJvbGRJdGFsaWMpIGFuZFxuICogY29ycmVzcG9uZGluZyBzdHlsZSB0YWdzIChtYXRoYmYgb3IgYm9sZHN5bWJvbCkgdG8gdXNlIGZvciBmb250IFwiYm9sZHN5bWJvbFwiLFxuICogZGVwZW5kaW5nIG9uIHRoZSBzeW1ib2wuICBVc2UgdGhpcyBmdW5jdGlvbiBpbnN0ZWFkIG9mIGZvbnRNYXAgZm9yIGZvbnRcbiAqIFwiYm9sZHN5bWJvbFwiLlxuICovXG5cblxudmFyIGJvbGRzeW1ib2wgPSBmdW5jdGlvbiBib2xkc3ltYm9sKHZhbHVlLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzKSB7XG4gIGlmIChidWlsZENvbW1vbl9sb29rdXBTeW1ib2wodmFsdWUsIFwiTWF0aC1Cb2xkSXRhbGljXCIsIG1vZGUpLm1ldHJpY3MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9udE5hbWU6IFwiTWF0aC1Cb2xkSXRhbGljXCIsXG4gICAgICBmb250Q2xhc3M6IFwiYm9sZHN5bWJvbFwiXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBTb21lIGdseXBocyBkbyBub3QgZXhpc3QgaW4gTWF0aC1Cb2xkSXRhbGljIHNvIHdlIG5lZWQgdG8gdXNlXG4gICAgLy8gTWFpbi1Cb2xkIGluc3RlYWQuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZvbnROYW1lOiBcIk1haW4tQm9sZFwiLFxuICAgICAgZm9udENsYXNzOiBcIm1hdGhiZlwiXG4gICAgfTtcbiAgfVxufTtcbi8qKlxuICogTWFrZXMgZWl0aGVyIGEgbWF0aG9yZCBvciB0ZXh0b3JkIGluIHRoZSBjb3JyZWN0IGZvbnQgYW5kIGNvbG9yLlxuICovXG5cblxudmFyIGJ1aWxkQ29tbW9uX21ha2VPcmQgPSBmdW5jdGlvbiBtYWtlT3JkKGdyb3VwLCBvcHRpb25zLCB0eXBlKSB7XG4gIHZhciBtb2RlID0gZ3JvdXAubW9kZTtcbiAgdmFyIHRleHQgPSBncm91cC50ZXh0O1xuICB2YXIgY2xhc3NlcyA9IFtcIm1vcmRcIl07IC8vIE1hdGggbW9kZSBvciBPbGQgZm9udCAoaS5lLiBcXHJtKVxuXG4gIHZhciBpc0ZvbnQgPSBtb2RlID09PSBcIm1hdGhcIiB8fCBtb2RlID09PSBcInRleHRcIiAmJiBvcHRpb25zLmZvbnQ7XG4gIHZhciBmb250T3JGYW1pbHkgPSBpc0ZvbnQgPyBvcHRpb25zLmZvbnQgOiBvcHRpb25zLmZvbnRGYW1pbHk7XG5cbiAgaWYgKHRleHQuY2hhckNvZGVBdCgwKSA9PT0gMHhEODM1KSB7XG4gICAgLy8gc3Vycm9nYXRlIHBhaXJzIGdldCBzcGVjaWFsIHRyZWF0bWVudFxuICAgIHZhciBfd2lkZUNoYXJhY3RlckZvbnQgPSB3aWRlX2NoYXJhY3Rlcl93aWRlQ2hhcmFjdGVyRm9udCh0ZXh0LCBtb2RlKSxcbiAgICAgICAgd2lkZUZvbnROYW1lID0gX3dpZGVDaGFyYWN0ZXJGb250WzBdLFxuICAgICAgICB3aWRlRm9udENsYXNzID0gX3dpZGVDaGFyYWN0ZXJGb250WzFdO1xuXG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uX21ha2VTeW1ib2wodGV4dCwgd2lkZUZvbnROYW1lLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzLmNvbmNhdCh3aWRlRm9udENsYXNzKSk7XG4gIH0gZWxzZSBpZiAoZm9udE9yRmFtaWx5KSB7XG4gICAgdmFyIGZvbnROYW1lO1xuICAgIHZhciBmb250Q2xhc3NlcztcblxuICAgIGlmIChmb250T3JGYW1pbHkgPT09IFwiYm9sZHN5bWJvbFwiIHx8IGZvbnRPckZhbWlseSA9PT0gXCJtYXRobm9ybWFsXCIpIHtcbiAgICAgIHZhciBmb250RGF0YSA9IGZvbnRPckZhbWlseSA9PT0gXCJib2xkc3ltYm9sXCIgPyBib2xkc3ltYm9sKHRleHQsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMpIDogYnVpbGRDb21tb25fbWF0aG5vcm1hbCh0ZXh0LCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzKTtcbiAgICAgIGZvbnROYW1lID0gZm9udERhdGEuZm9udE5hbWU7XG4gICAgICBmb250Q2xhc3NlcyA9IFtmb250RGF0YS5mb250Q2xhc3NdO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuY29udGFpbnMobWF0aGl0TGV0dGVycywgdGV4dCkpIHtcbiAgICAgIGZvbnROYW1lID0gXCJNYWluLUl0YWxpY1wiO1xuICAgICAgZm9udENsYXNzZXMgPSBbXCJtYXRoaXRcIl07XG4gICAgfSBlbHNlIGlmIChpc0ZvbnQpIHtcbiAgICAgIGZvbnROYW1lID0gZm9udE1hcFtmb250T3JGYW1pbHldLmZvbnROYW1lO1xuICAgICAgZm9udENsYXNzZXMgPSBbZm9udE9yRmFtaWx5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9udE5hbWUgPSByZXRyaWV2ZVRleHRGb250TmFtZShmb250T3JGYW1pbHksIG9wdGlvbnMuZm9udFdlaWdodCwgb3B0aW9ucy5mb250U2hhcGUpO1xuICAgICAgZm9udENsYXNzZXMgPSBbZm9udE9yRmFtaWx5LCBvcHRpb25zLmZvbnRXZWlnaHQsIG9wdGlvbnMuZm9udFNoYXBlXTtcbiAgICB9XG5cbiAgICBpZiAoYnVpbGRDb21tb25fbG9va3VwU3ltYm9sKHRleHQsIGZvbnROYW1lLCBtb2RlKS5tZXRyaWNzKSB7XG4gICAgICByZXR1cm4gYnVpbGRDb21tb25fbWFrZVN5bWJvbCh0ZXh0LCBmb250TmFtZSwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcy5jb25jYXQoZm9udENsYXNzZXMpKTtcbiAgICB9IGVsc2UgaWYgKGxpZ2F0dXJlcy5oYXNPd25Qcm9wZXJ0eSh0ZXh0KSAmJiBmb250TmFtZS5zdWJzdHIoMCwgMTApID09PSBcIlR5cGV3cml0ZXJcIikge1xuICAgICAgLy8gRGVjb25zdHJ1Y3QgbGlnYXR1cmVzIGluIG1vbm9zcGFjZSBmb250cyAoXFx0ZXh0dHQsIFxcdHQpLlxuICAgICAgdmFyIHBhcnRzID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBwYXJ0cy5wdXNoKGJ1aWxkQ29tbW9uX21ha2VTeW1ib2wodGV4dFtpXSwgZm9udE5hbWUsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KGZvbnRDbGFzc2VzKSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYnVpbGRDb21tb25fbWFrZUZyYWdtZW50KHBhcnRzKTtcbiAgICB9XG4gIH0gLy8gTWFrZXMgYSBzeW1ib2wgaW4gdGhlIGRlZmF1bHQgZm9udCBmb3IgbWF0aG9yZHMgYW5kIHRleHRvcmRzLlxuXG5cbiAgaWYgKHR5cGUgPT09IFwibWF0aG9yZFwiKSB7XG4gICAgdmFyIGZvbnRMb29rdXAgPSBidWlsZENvbW1vbl9tYXRoZGVmYXVsdCh0ZXh0LCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb25fbWFrZVN5bWJvbCh0ZXh0LCBmb250TG9va3VwLmZvbnROYW1lLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzLmNvbmNhdChbZm9udExvb2t1cC5mb250Q2xhc3NdKSk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJ0ZXh0b3JkXCIpIHtcbiAgICB2YXIgZm9udCA9IHNyY19zeW1ib2xzW21vZGVdW3RleHRdICYmIHNyY19zeW1ib2xzW21vZGVdW3RleHRdLmZvbnQ7XG5cbiAgICBpZiAoZm9udCA9PT0gXCJhbXNcIikge1xuICAgICAgdmFyIF9mb250TmFtZSA9IHJldHJpZXZlVGV4dEZvbnROYW1lKFwiYW1zcm1cIiwgb3B0aW9ucy5mb250V2VpZ2h0LCBvcHRpb25zLmZvbnRTaGFwZSk7XG5cbiAgICAgIHJldHVybiBidWlsZENvbW1vbl9tYWtlU3ltYm9sKHRleHQsIF9mb250TmFtZSwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcy5jb25jYXQoXCJhbXNybVwiLCBvcHRpb25zLmZvbnRXZWlnaHQsIG9wdGlvbnMuZm9udFNoYXBlKSk7XG4gICAgfSBlbHNlIGlmIChmb250ID09PSBcIm1haW5cIiB8fCAhZm9udCkge1xuICAgICAgdmFyIF9mb250TmFtZTIgPSByZXRyaWV2ZVRleHRGb250TmFtZShcInRleHRybVwiLCBvcHRpb25zLmZvbnRXZWlnaHQsIG9wdGlvbnMuZm9udFNoYXBlKTtcblxuICAgICAgcmV0dXJuIGJ1aWxkQ29tbW9uX21ha2VTeW1ib2wodGV4dCwgX2ZvbnROYW1lMiwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcy5jb25jYXQob3B0aW9ucy5mb250V2VpZ2h0LCBvcHRpb25zLmZvbnRTaGFwZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmb250cyBhZGRlZCBieSBwbHVnaW5zXG4gICAgICB2YXIgX2ZvbnROYW1lMyA9IHJldHJpZXZlVGV4dEZvbnROYW1lKGZvbnQsIG9wdGlvbnMuZm9udFdlaWdodCwgb3B0aW9ucy5mb250U2hhcGUpOyAvLyBXZSBhZGQgZm9udCBuYW1lIGFzIGEgY3NzIGNsYXNzXG5cblxuICAgICAgcmV0dXJuIGJ1aWxkQ29tbW9uX21ha2VTeW1ib2wodGV4dCwgX2ZvbnROYW1lMywgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcy5jb25jYXQoX2ZvbnROYW1lMywgb3B0aW9ucy5mb250V2VpZ2h0LCBvcHRpb25zLmZvbnRTaGFwZSkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmV4cGVjdGVkIHR5cGU6IFwiICsgdHlwZSArIFwiIGluIG1ha2VPcmRcIik7XG4gIH1cbn07XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBzdWJzZXF1ZW50IHN5bWJvbE5vZGVzIGhhdmUgdGhlIHNhbWUgY2xhc3Nlcywgc2tldywgbWF4Rm9udCxcbiAqIGFuZCBzdHlsZXMuXG4gKi9cblxuXG52YXIgYnVpbGRDb21tb25fY2FuQ29tYmluZSA9IGZ1bmN0aW9uIGNhbkNvbWJpbmUocHJldiwgbmV4dCkge1xuICBpZiAoY3JlYXRlQ2xhc3MocHJldi5jbGFzc2VzKSAhPT0gY3JlYXRlQ2xhc3MobmV4dC5jbGFzc2VzKSB8fCBwcmV2LnNrZXcgIT09IG5leHQuc2tldyB8fCBwcmV2Lm1heEZvbnRTaXplICE9PSBuZXh0Lm1heEZvbnRTaXplKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIgc3R5bGUgaW4gcHJldi5zdHlsZSkge1xuICAgIGlmIChwcmV2LnN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlKSAmJiBwcmV2LnN0eWxlW3N0eWxlXSAhPT0gbmV4dC5zdHlsZVtzdHlsZV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBfc3R5bGUgaW4gbmV4dC5zdHlsZSkge1xuICAgIGlmIChuZXh0LnN0eWxlLmhhc093blByb3BlcnR5KF9zdHlsZSkgJiYgcHJldi5zdHlsZVtfc3R5bGVdICE9PSBuZXh0LnN0eWxlW19zdHlsZV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG4vKipcbiAqIENvbWJpbmUgY29uc2VxdWV0aXZlIGRvbVRyZWUuc3ltYm9sTm9kZXMgaW50byBhIHNpbmdsZSBzeW1ib2xOb2RlLlxuICogTm90ZTogdGhpcyBmdW5jdGlvbiBtdXRhdGVzIHRoZSBhcmd1bWVudC5cbiAqL1xuXG5cbnZhciBidWlsZENvbW1vbl90cnlDb21iaW5lQ2hhcnMgPSBmdW5jdGlvbiB0cnlDb21iaW5lQ2hhcnMoY2hhcnMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICB2YXIgcHJldiA9IGNoYXJzW2ldO1xuICAgIHZhciBuZXh0ID0gY2hhcnNbaSArIDFdO1xuXG4gICAgaWYgKHByZXYgaW5zdGFuY2VvZiBkb21UcmVlX1N5bWJvbE5vZGUgJiYgbmV4dCBpbnN0YW5jZW9mIGRvbVRyZWVfU3ltYm9sTm9kZSAmJiBidWlsZENvbW1vbl9jYW5Db21iaW5lKHByZXYsIG5leHQpKSB7XG4gICAgICBwcmV2LnRleHQgKz0gbmV4dC50ZXh0O1xuICAgICAgcHJldi5oZWlnaHQgPSBNYXRoLm1heChwcmV2LmhlaWdodCwgbmV4dC5oZWlnaHQpO1xuICAgICAgcHJldi5kZXB0aCA9IE1hdGgubWF4KHByZXYuZGVwdGgsIG5leHQuZGVwdGgpOyAvLyBVc2UgdGhlIGxhc3QgY2hhcmFjdGVyJ3MgaXRhbGljIGNvcnJlY3Rpb24gc2luY2Ugd2UgdXNlXG4gICAgICAvLyBpdCB0byBhZGQgcGFkZGluZyB0byB0aGUgcmlnaHQgb2YgdGhlIHNwYW4gY3JlYXRlZCBmcm9tXG4gICAgICAvLyB0aGUgY29tYmluZWQgY2hhcmFjdGVycy5cblxuICAgICAgcHJldi5pdGFsaWMgPSBuZXh0Lml0YWxpYztcbiAgICAgIGNoYXJzLnNwbGljZShpICsgMSwgMSk7XG4gICAgICBpLS07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNoYXJzO1xufTtcbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBoZWlnaHQsIGRlcHRoLCBhbmQgbWF4Rm9udFNpemUgb2YgYW4gZWxlbWVudCBiYXNlZCBvbiBpdHNcbiAqIGNoaWxkcmVuLlxuICovXG5cblxudmFyIHNpemVFbGVtZW50RnJvbUNoaWxkcmVuID0gZnVuY3Rpb24gc2l6ZUVsZW1lbnRGcm9tQ2hpbGRyZW4oZWxlbSkge1xuICB2YXIgaGVpZ2h0ID0gMDtcbiAgdmFyIGRlcHRoID0gMDtcbiAgdmFyIG1heEZvbnRTaXplID0gMDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW0uY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2hpbGQgPSBlbGVtLmNoaWxkcmVuW2ldO1xuXG4gICAgaWYgKGNoaWxkLmhlaWdodCA+IGhlaWdodCkge1xuICAgICAgaGVpZ2h0ID0gY2hpbGQuaGVpZ2h0O1xuICAgIH1cblxuICAgIGlmIChjaGlsZC5kZXB0aCA+IGRlcHRoKSB7XG4gICAgICBkZXB0aCA9IGNoaWxkLmRlcHRoO1xuICAgIH1cblxuICAgIGlmIChjaGlsZC5tYXhGb250U2l6ZSA+IG1heEZvbnRTaXplKSB7XG4gICAgICBtYXhGb250U2l6ZSA9IGNoaWxkLm1heEZvbnRTaXplO1xuICAgIH1cbiAgfVxuXG4gIGVsZW0uaGVpZ2h0ID0gaGVpZ2h0O1xuICBlbGVtLmRlcHRoID0gZGVwdGg7XG4gIGVsZW0ubWF4Rm9udFNpemUgPSBtYXhGb250U2l6ZTtcbn07XG4vKipcbiAqIE1ha2VzIGEgc3BhbiB3aXRoIHRoZSBnaXZlbiBsaXN0IG9mIGNsYXNzZXMsIGxpc3Qgb2YgY2hpbGRyZW4sIGFuZCBvcHRpb25zLlxuICpcbiAqIFRPRE8oIzk1Myk6IEVuc3VyZSB0aGF0IGBvcHRpb25zYCBpcyBhbHdheXMgcHJvdmlkZWQgKGN1cnJlbnRseSBzb21lIGNhbGxcbiAqIHNpdGVzIGRvbid0IHBhc3MgaXQpIGFuZCBtYWtlIHRoZSB0eXBlIGJlbG93IG1hbmRhdG9yeS5cbiAqIFRPRE86IGFkZCBhIHNlcGFyYXRlIGFyZ3VtZW50IGZvciBtYXRoIGNsYXNzIChlLmcuIGBtb3BgLCBgbWJpbmApLCB3aGljaFxuICogc2hvdWxkIGlmIHByZXNlbnQgY29tZSBmaXJzdCBpbiBgY2xhc3Nlc2AuXG4gKi9cblxuXG52YXIgYnVpbGRDb21tb25fbWFrZVNwYW4gPSBmdW5jdGlvbiBtYWtlU3BhbihjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucywgc3R5bGUpIHtcbiAgdmFyIHNwYW4gPSBuZXcgZG9tVHJlZV9TcGFuKGNsYXNzZXMsIGNoaWxkcmVuLCBvcHRpb25zLCBzdHlsZSk7XG4gIHNpemVFbGVtZW50RnJvbUNoaWxkcmVuKHNwYW4pO1xuICByZXR1cm4gc3Bhbjtcbn07IC8vIFNWRyBvbmUgaXMgc2ltcGxlciAtLSBkb2Vzbid0IHJlcXVpcmUgaGVpZ2h0LCBkZXB0aCwgbWF4LWZvbnQgc2V0dGluZy5cbi8vIFRoaXMgaXMgYWxzbyBhIHNlcGFyYXRlIG1ldGhvZCBmb3IgdHlwZXNhZmV0eS5cblxuXG52YXIgYnVpbGRDb21tb25fbWFrZVN2Z1NwYW4gPSBmdW5jdGlvbiBtYWtlU3ZnU3BhbihjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucywgc3R5bGUpIHtcbiAgcmV0dXJuIG5ldyBkb21UcmVlX1NwYW4oY2xhc3NlcywgY2hpbGRyZW4sIG9wdGlvbnMsIHN0eWxlKTtcbn07XG5cbnZhciBtYWtlTGluZVNwYW4gPSBmdW5jdGlvbiBtYWtlTGluZVNwYW4oY2xhc3NOYW1lLCBvcHRpb25zLCB0aGlja25lc3MpIHtcbiAgdmFyIGxpbmUgPSBidWlsZENvbW1vbl9tYWtlU3BhbihbY2xhc3NOYW1lXSwgW10sIG9wdGlvbnMpO1xuICBsaW5lLmhlaWdodCA9IE1hdGgubWF4KHRoaWNrbmVzcyB8fCBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3MsIG9wdGlvbnMubWluUnVsZVRoaWNrbmVzcyk7XG4gIGxpbmUuc3R5bGUuYm9yZGVyQm90dG9tV2lkdGggPSBsaW5lLmhlaWdodCArIFwiZW1cIjtcbiAgbGluZS5tYXhGb250U2l6ZSA9IDEuMDtcbiAgcmV0dXJuIGxpbmU7XG59O1xuLyoqXG4gKiBNYWtlcyBhbiBhbmNob3Igd2l0aCB0aGUgZ2l2ZW4gaHJlZiwgbGlzdCBvZiBjbGFzc2VzLCBsaXN0IG9mIGNoaWxkcmVuLFxuICogYW5kIG9wdGlvbnMuXG4gKi9cblxuXG52YXIgYnVpbGRDb21tb25fbWFrZUFuY2hvciA9IGZ1bmN0aW9uIG1ha2VBbmNob3IoaHJlZiwgY2xhc3NlcywgY2hpbGRyZW4sIG9wdGlvbnMpIHtcbiAgdmFyIGFuY2hvciA9IG5ldyBkb21UcmVlX0FuY2hvcihocmVmLCBjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucyk7XG4gIHNpemVFbGVtZW50RnJvbUNoaWxkcmVuKGFuY2hvcik7XG4gIHJldHVybiBhbmNob3I7XG59O1xuLyoqXG4gKiBNYWtlcyBhIGRvY3VtZW50IGZyYWdtZW50IHdpdGggdGhlIGdpdmVuIGxpc3Qgb2YgY2hpbGRyZW4uXG4gKi9cblxuXG52YXIgYnVpbGRDb21tb25fbWFrZUZyYWdtZW50ID0gZnVuY3Rpb24gbWFrZUZyYWdtZW50KGNoaWxkcmVuKSB7XG4gIHZhciBmcmFnbWVudCA9IG5ldyB0cmVlX0RvY3VtZW50RnJhZ21lbnQoY2hpbGRyZW4pO1xuICBzaXplRWxlbWVudEZyb21DaGlsZHJlbihmcmFnbWVudCk7XG4gIHJldHVybiBmcmFnbWVudDtcbn07XG4vKipcbiAqIFdyYXBzIGdyb3VwIGluIGEgc3BhbiBpZiBpdCdzIGEgZG9jdW1lbnQgZnJhZ21lbnQsIGFsbG93aW5nIHRvIGFwcGx5IGNsYXNzZXNcbiAqIGFuZCBzdHlsZXNcbiAqL1xuXG5cbnZhciBidWlsZENvbW1vbl93cmFwRnJhZ21lbnQgPSBmdW5jdGlvbiB3cmFwRnJhZ21lbnQoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgaWYgKGdyb3VwIGluc3RhbmNlb2YgdHJlZV9Eb2N1bWVudEZyYWdtZW50KSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uX21ha2VTcGFuKFtdLCBbZ3JvdXBdLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJldHVybiBncm91cDtcbn07IC8vIFRoZXNlIGFyZSBleGFjdCBvYmplY3QgdHlwZXMgdG8gY2F0Y2ggdHlwb3MgaW4gdGhlIG5hbWVzIG9mIHRoZSBvcHRpb25hbCBmaWVsZHMuXG5cblxuLy8gQ29tcHV0ZXMgdGhlIHVwZGF0ZWQgYGNoaWxkcmVuYCBsaXN0IGFuZCB0aGUgb3ZlcmFsbCBkZXB0aC5cbi8vXG4vLyBUaGlzIGhlbHBlciBmdW5jdGlvbiBmb3IgbWFrZVZMaXN0IG1ha2VzIGl0IGVhc2llciB0byBlbmZvcmNlIHR5cGUgc2FmZXR5IGJ5XG4vLyBhbGxvd2luZyBlYXJseSBleGl0cyAocmV0dXJucykgaW4gdGhlIGxvZ2ljLlxudmFyIGdldFZMaXN0Q2hpbGRyZW5BbmREZXB0aCA9IGZ1bmN0aW9uIGdldFZMaXN0Q2hpbGRyZW5BbmREZXB0aChwYXJhbXMpIHtcbiAgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwiaW5kaXZpZHVhbFNoaWZ0XCIpIHtcbiAgICB2YXIgb2xkQ2hpbGRyZW4gPSBwYXJhbXMuY2hpbGRyZW47XG4gICAgdmFyIGNoaWxkcmVuID0gW29sZENoaWxkcmVuWzBdXTsgLy8gQWRkIGluIGtlcm5zIHRvIHRoZSBsaXN0IG9mIHBhcmFtcy5jaGlsZHJlbiB0byBnZXQgZWFjaCBlbGVtZW50IHRvIGJlXG4gICAgLy8gc2hpZnRlZCB0byB0aGUgY29ycmVjdCBzcGVjaWZpZWQgc2hpZnRcblxuICAgIHZhciBfZGVwdGggPSAtb2xkQ2hpbGRyZW5bMF0uc2hpZnQgLSBvbGRDaGlsZHJlblswXS5lbGVtLmRlcHRoO1xuXG4gICAgdmFyIGN1cnJQb3MgPSBfZGVwdGg7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IG9sZENoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGlmZiA9IC1vbGRDaGlsZHJlbltpXS5zaGlmdCAtIGN1cnJQb3MgLSBvbGRDaGlsZHJlbltpXS5lbGVtLmRlcHRoO1xuICAgICAgdmFyIHNpemUgPSBkaWZmIC0gKG9sZENoaWxkcmVuW2kgLSAxXS5lbGVtLmhlaWdodCArIG9sZENoaWxkcmVuW2kgLSAxXS5lbGVtLmRlcHRoKTtcbiAgICAgIGN1cnJQb3MgPSBjdXJyUG9zICsgZGlmZjtcbiAgICAgIGNoaWxkcmVuLnB1c2goe1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogc2l6ZVxuICAgICAgfSk7XG4gICAgICBjaGlsZHJlbi5wdXNoKG9sZENoaWxkcmVuW2ldKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgICAgZGVwdGg6IF9kZXB0aFxuICAgIH07XG4gIH1cblxuICB2YXIgZGVwdGg7XG5cbiAgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwidG9wXCIpIHtcbiAgICAvLyBXZSBhbHdheXMgc3RhcnQgYXQgdGhlIGJvdHRvbSwgc28gY2FsY3VsYXRlIHRoZSBib3R0b20gYnkgYWRkaW5nIHVwXG4gICAgLy8gYWxsIHRoZSBzaXplc1xuICAgIHZhciBib3R0b20gPSBwYXJhbXMucG9zaXRpb25EYXRhO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHBhcmFtcy5jaGlsZHJlbi5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IHBhcmFtcy5jaGlsZHJlbltfaV07XG4gICAgICBib3R0b20gLT0gY2hpbGQudHlwZSA9PT0gXCJrZXJuXCIgPyBjaGlsZC5zaXplIDogY2hpbGQuZWxlbS5oZWlnaHQgKyBjaGlsZC5lbGVtLmRlcHRoO1xuICAgIH1cblxuICAgIGRlcHRoID0gYm90dG9tO1xuICB9IGVsc2UgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwiYm90dG9tXCIpIHtcbiAgICBkZXB0aCA9IC1wYXJhbXMucG9zaXRpb25EYXRhO1xuICB9IGVsc2Uge1xuICAgIHZhciBmaXJzdENoaWxkID0gcGFyYW1zLmNoaWxkcmVuWzBdO1xuXG4gICAgaWYgKGZpcnN0Q2hpbGQudHlwZSAhPT0gXCJlbGVtXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmlyc3QgY2hpbGQgbXVzdCBoYXZlIHR5cGUgXCJlbGVtXCIuJyk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwic2hpZnRcIikge1xuICAgICAgZGVwdGggPSAtZmlyc3RDaGlsZC5lbGVtLmRlcHRoIC0gcGFyYW1zLnBvc2l0aW9uRGF0YTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwiZmlyc3RCYXNlbGluZVwiKSB7XG4gICAgICBkZXB0aCA9IC1maXJzdENoaWxkLmVsZW0uZGVwdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcG9zaXRpb25UeXBlIFwiICsgcGFyYW1zLnBvc2l0aW9uVHlwZSArIFwiLlwiKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNoaWxkcmVuOiBwYXJhbXMuY2hpbGRyZW4sXG4gICAgZGVwdGg6IGRlcHRoXG4gIH07XG59O1xuLyoqXG4gKiBNYWtlcyBhIHZlcnRpY2FsIGxpc3QgYnkgc3RhY2tpbmcgZWxlbWVudHMgYW5kIGtlcm5zIG9uIHRvcCBvZiBlYWNoIG90aGVyLlxuICogQWxsb3dzIGZvciBtYW55IGRpZmZlcmVudCB3YXlzIG9mIHNwZWNpZnlpbmcgdGhlIHBvc2l0aW9uaW5nIG1ldGhvZC5cbiAqXG4gKiBTZWUgVkxpc3RQYXJhbSBkb2N1bWVudGF0aW9uIGFib3ZlLlxuICovXG5cblxudmFyIGJ1aWxkQ29tbW9uX21ha2VWTGlzdCA9IGZ1bmN0aW9uIG1ha2VWTGlzdChwYXJhbXMsIG9wdGlvbnMpIHtcbiAgdmFyIF9nZXRWTGlzdENoaWxkcmVuQW5kRCA9IGdldFZMaXN0Q2hpbGRyZW5BbmREZXB0aChwYXJhbXMpLFxuICAgICAgY2hpbGRyZW4gPSBfZ2V0Vkxpc3RDaGlsZHJlbkFuZEQuY2hpbGRyZW4sXG4gICAgICBkZXB0aCA9IF9nZXRWTGlzdENoaWxkcmVuQW5kRC5kZXB0aDsgLy8gQ3JlYXRlIGEgc3RydXQgdGhhdCBpcyB0YWxsZXIgdGhhbiBhbnkgbGlzdCBpdGVtLiBUaGUgc3RydXQgaXMgYWRkZWQgdG9cbiAgLy8gZWFjaCBpdGVtLCB3aGVyZSBpdCB3aWxsIGRldGVybWluZSB0aGUgaXRlbSdzIGJhc2VsaW5lLiBTaW5jZSBpdCBoYXNcbiAgLy8gYG92ZXJmbG93OmhpZGRlbmAsIHRoZSBzdHJ1dCdzIHRvcCBlZGdlIHdpbGwgc2l0IG9uIHRoZSBpdGVtJ3MgbGluZSBib3gnc1xuICAvLyB0b3AgZWRnZSBhbmQgdGhlIHN0cnV0J3MgYm90dG9tIGVkZ2Ugd2lsbCBzaXQgb24gdGhlIGl0ZW0ncyBiYXNlbGluZSxcbiAgLy8gd2l0aCBubyBhZGRpdGlvbmFsIGxpbmUtaGVpZ2h0IHNwYWNpbmcuIFRoaXMgYWxsb3dzIHRoZSBpdGVtIGJhc2VsaW5lIHRvXG4gIC8vIGJlIHBvc2l0aW9uZWQgcHJlY2lzZWx5IHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgZm9udCBhc2NlbnQgYW5kXG4gIC8vIGxpbmUtaGVpZ2h0LlxuXG5cbiAgdmFyIHBzdHJ1dFNpemUgPSAwO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTtcblxuICAgIGlmIChjaGlsZC50eXBlID09PSBcImVsZW1cIikge1xuICAgICAgdmFyIGVsZW0gPSBjaGlsZC5lbGVtO1xuICAgICAgcHN0cnV0U2l6ZSA9IE1hdGgubWF4KHBzdHJ1dFNpemUsIGVsZW0ubWF4Rm9udFNpemUsIGVsZW0uaGVpZ2h0KTtcbiAgICB9XG4gIH1cblxuICBwc3RydXRTaXplICs9IDI7XG4gIHZhciBwc3RydXQgPSBidWlsZENvbW1vbl9tYWtlU3BhbihbXCJwc3RydXRcIl0sIFtdKTtcbiAgcHN0cnV0LnN0eWxlLmhlaWdodCA9IHBzdHJ1dFNpemUgKyBcImVtXCI7IC8vIENyZWF0ZSBhIG5ldyBsaXN0IG9mIGFjdHVhbCBjaGlsZHJlbiBhdCB0aGUgY29ycmVjdCBvZmZzZXRzXG5cbiAgdmFyIHJlYWxDaGlsZHJlbiA9IFtdO1xuICB2YXIgbWluUG9zID0gZGVwdGg7XG4gIHZhciBtYXhQb3MgPSBkZXB0aDtcbiAgdmFyIGN1cnJQb3MgPSBkZXB0aDtcblxuICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBjaGlsZHJlbi5sZW5ndGg7IF9pMisrKSB7XG4gICAgdmFyIF9jaGlsZCA9IGNoaWxkcmVuW19pMl07XG5cbiAgICBpZiAoX2NoaWxkLnR5cGUgPT09IFwia2VyblwiKSB7XG4gICAgICBjdXJyUG9zICs9IF9jaGlsZC5zaXplO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX2VsZW0gPSBfY2hpbGQuZWxlbTtcbiAgICAgIHZhciBjbGFzc2VzID0gX2NoaWxkLndyYXBwZXJDbGFzc2VzIHx8IFtdO1xuICAgICAgdmFyIHN0eWxlID0gX2NoaWxkLndyYXBwZXJTdHlsZSB8fCB7fTtcbiAgICAgIHZhciBjaGlsZFdyYXAgPSBidWlsZENvbW1vbl9tYWtlU3BhbihjbGFzc2VzLCBbcHN0cnV0LCBfZWxlbV0sIHVuZGVmaW5lZCwgc3R5bGUpO1xuICAgICAgY2hpbGRXcmFwLnN0eWxlLnRvcCA9IC1wc3RydXRTaXplIC0gY3VyclBvcyAtIF9lbGVtLmRlcHRoICsgXCJlbVwiO1xuXG4gICAgICBpZiAoX2NoaWxkLm1hcmdpbkxlZnQpIHtcbiAgICAgICAgY2hpbGRXcmFwLnN0eWxlLm1hcmdpbkxlZnQgPSBfY2hpbGQubWFyZ2luTGVmdDtcbiAgICAgIH1cblxuICAgICAgaWYgKF9jaGlsZC5tYXJnaW5SaWdodCkge1xuICAgICAgICBjaGlsZFdyYXAuc3R5bGUubWFyZ2luUmlnaHQgPSBfY2hpbGQubWFyZ2luUmlnaHQ7XG4gICAgICB9XG5cbiAgICAgIHJlYWxDaGlsZHJlbi5wdXNoKGNoaWxkV3JhcCk7XG4gICAgICBjdXJyUG9zICs9IF9lbGVtLmhlaWdodCArIF9lbGVtLmRlcHRoO1xuICAgIH1cblxuICAgIG1pblBvcyA9IE1hdGgubWluKG1pblBvcywgY3VyclBvcyk7XG4gICAgbWF4UG9zID0gTWF0aC5tYXgobWF4UG9zLCBjdXJyUG9zKTtcbiAgfSAvLyBUaGUgdmxpc3QgY29udGVudHMgZ28gaW4gYSB0YWJsZS1jZWxsIHdpdGggYHZlcnRpY2FsLWFsaWduOmJvdHRvbWAuXG4gIC8vIFRoaXMgY2VsbCdzIGJvdHRvbSBlZGdlIHdpbGwgZGV0ZXJtaW5lIHRoZSBjb250YWluaW5nIHRhYmxlJ3MgYmFzZWxpbmVcbiAgLy8gd2l0aG91dCBvdmVybHkgZXhwYW5kaW5nIHRoZSBjb250YWluaW5nIGxpbmUtYm94LlxuXG5cbiAgdmFyIHZsaXN0ID0gYnVpbGRDb21tb25fbWFrZVNwYW4oW1widmxpc3RcIl0sIHJlYWxDaGlsZHJlbik7XG4gIHZsaXN0LnN0eWxlLmhlaWdodCA9IG1heFBvcyArIFwiZW1cIjsgLy8gQSBzZWNvbmQgcm93IGlzIHVzZWQgaWYgbmVjZXNzYXJ5IHRvIHJlcHJlc2VudCB0aGUgdmxpc3QncyBkZXB0aC5cblxuICB2YXIgcm93cztcblxuICBpZiAobWluUG9zIDwgMCkge1xuICAgIC8vIFdlIHdpbGwgZGVmaW5lIGRlcHRoIGluIGFuIGVtcHR5IHNwYW4gd2l0aCBkaXNwbGF5OiB0YWJsZS1jZWxsLlxuICAgIC8vIEl0IHNob3VsZCByZW5kZXIgd2l0aCB0aGUgaGVpZ2h0IHRoYXQgd2UgZGVmaW5lLiBCdXQgQ2hyb21lLCBpblxuICAgIC8vIGNvbnRlbnRlZGl0YWJsZSBtb2RlIG9ubHksIHRyZWF0cyB0aGF0IHNwYW4gYXMgaWYgaXQgY29udGFpbnMgc29tZVxuICAgIC8vIHRleHQgY29udGVudC4gQW5kIHRoYXQgbWluLWhlaWdodCBvdmVyLXJpZGVzIG91ciBkZXNpcmVkIGhlaWdodC5cbiAgICAvLyBTbyB3ZSBwdXQgYW5vdGhlciBlbXB0eSBzcGFuIGluc2lkZSB0aGUgZGVwdGggc3RydXQgc3Bhbi5cbiAgICB2YXIgZW1wdHlTcGFuID0gYnVpbGRDb21tb25fbWFrZVNwYW4oW10sIFtdKTtcbiAgICB2YXIgZGVwdGhTdHJ1dCA9IGJ1aWxkQ29tbW9uX21ha2VTcGFuKFtcInZsaXN0XCJdLCBbZW1wdHlTcGFuXSk7XG4gICAgZGVwdGhTdHJ1dC5zdHlsZS5oZWlnaHQgPSAtbWluUG9zICsgXCJlbVwiOyAvLyBTYWZhcmkgd2FudHMgdGhlIGZpcnN0IHJvdyB0byBoYXZlIGlubGluZSBjb250ZW50OyBvdGhlcndpc2UgaXRcbiAgICAvLyBwdXRzIHRoZSBib3R0b20gb2YgdGhlICpzZWNvbmQqIHJvdyBvbiB0aGUgYmFzZWxpbmUuXG5cbiAgICB2YXIgdG9wU3RydXQgPSBidWlsZENvbW1vbl9tYWtlU3BhbihbXCJ2bGlzdC1zXCJdLCBbbmV3IGRvbVRyZWVfU3ltYm9sTm9kZShcIlxcdTIwMEJcIildKTtcbiAgICByb3dzID0gW2J1aWxkQ29tbW9uX21ha2VTcGFuKFtcInZsaXN0LXJcIl0sIFt2bGlzdCwgdG9wU3RydXRdKSwgYnVpbGRDb21tb25fbWFrZVNwYW4oW1widmxpc3QtclwiXSwgW2RlcHRoU3RydXRdKV07XG4gIH0gZWxzZSB7XG4gICAgcm93cyA9IFtidWlsZENvbW1vbl9tYWtlU3BhbihbXCJ2bGlzdC1yXCJdLCBbdmxpc3RdKV07XG4gIH1cblxuICB2YXIgdnRhYmxlID0gYnVpbGRDb21tb25fbWFrZVNwYW4oW1widmxpc3QtdFwiXSwgcm93cyk7XG5cbiAgaWYgKHJvd3MubGVuZ3RoID09PSAyKSB7XG4gICAgdnRhYmxlLmNsYXNzZXMucHVzaChcInZsaXN0LXQyXCIpO1xuICB9XG5cbiAgdnRhYmxlLmhlaWdodCA9IG1heFBvcztcbiAgdnRhYmxlLmRlcHRoID0gLW1pblBvcztcbiAgcmV0dXJuIHZ0YWJsZTtcbn07IC8vIEdsdWUgaXMgYSBjb25jZXB0IGZyb20gVGVYIHdoaWNoIGlzIGEgZmxleGlibGUgc3BhY2UgYmV0d2VlbiBlbGVtZW50cyBpblxuLy8gZWl0aGVyIGEgdmVydGljYWwgb3IgaG9yaXpvbnRhbCBsaXN0LiBJbiBLYVRlWCwgYXQgbGVhc3QgZm9yIG5vdywgaXQnc1xuLy8gc3RhdGljIHNwYWNlIGJldHdlZW4gZWxlbWVudHMgaW4gYSBob3Jpem9udGFsIGxheW91dC5cblxuXG52YXIgYnVpbGRDb21tb25fbWFrZUdsdWUgPSBmdW5jdGlvbiBtYWtlR2x1ZShtZWFzdXJlbWVudCwgb3B0aW9ucykge1xuICAvLyBNYWtlIGFuIGVtcHR5IHNwYW4gZm9yIHRoZSBzcGFjZVxuICB2YXIgcnVsZSA9IGJ1aWxkQ29tbW9uX21ha2VTcGFuKFtcIm1zcGFjZVwiXSwgW10sIG9wdGlvbnMpO1xuICB2YXIgc2l6ZSA9IHVuaXRzX2NhbGN1bGF0ZVNpemUobWVhc3VyZW1lbnQsIG9wdGlvbnMpO1xuICBydWxlLnN0eWxlLm1hcmdpblJpZ2h0ID0gc2l6ZSArIFwiZW1cIjtcbiAgcmV0dXJuIHJ1bGU7XG59OyAvLyBUYWtlcyBmb250IG9wdGlvbnMsIGFuZCByZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBmb250TG9va3VwIG5hbWVcblxuXG52YXIgcmV0cmlldmVUZXh0Rm9udE5hbWUgPSBmdW5jdGlvbiByZXRyaWV2ZVRleHRGb250TmFtZShmb250RmFtaWx5LCBmb250V2VpZ2h0LCBmb250U2hhcGUpIHtcbiAgdmFyIGJhc2VGb250TmFtZSA9IFwiXCI7XG5cbiAgc3dpdGNoIChmb250RmFtaWx5KSB7XG4gICAgY2FzZSBcImFtc3JtXCI6XG4gICAgICBiYXNlRm9udE5hbWUgPSBcIkFNU1wiO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwidGV4dHJtXCI6XG4gICAgICBiYXNlRm9udE5hbWUgPSBcIk1haW5cIjtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInRleHRzZlwiOlxuICAgICAgYmFzZUZvbnROYW1lID0gXCJTYW5zU2VyaWZcIjtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInRleHR0dFwiOlxuICAgICAgYmFzZUZvbnROYW1lID0gXCJUeXBld3JpdGVyXCI7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBiYXNlRm9udE5hbWUgPSBmb250RmFtaWx5O1xuICAgIC8vIHVzZSBmb250cyBhZGRlZCBieSBhIHBsdWdpblxuICB9XG5cbiAgdmFyIGZvbnRTdHlsZXNOYW1lO1xuXG4gIGlmIChmb250V2VpZ2h0ID09PSBcInRleHRiZlwiICYmIGZvbnRTaGFwZSA9PT0gXCJ0ZXh0aXRcIikge1xuICAgIGZvbnRTdHlsZXNOYW1lID0gXCJCb2xkSXRhbGljXCI7XG4gIH0gZWxzZSBpZiAoZm9udFdlaWdodCA9PT0gXCJ0ZXh0YmZcIikge1xuICAgIGZvbnRTdHlsZXNOYW1lID0gXCJCb2xkXCI7XG4gIH0gZWxzZSBpZiAoZm9udFdlaWdodCA9PT0gXCJ0ZXh0aXRcIikge1xuICAgIGZvbnRTdHlsZXNOYW1lID0gXCJJdGFsaWNcIjtcbiAgfSBlbHNlIHtcbiAgICBmb250U3R5bGVzTmFtZSA9IFwiUmVndWxhclwiO1xuICB9XG5cbiAgcmV0dXJuIGJhc2VGb250TmFtZSArIFwiLVwiICsgZm9udFN0eWxlc05hbWU7XG59O1xuLyoqXG4gKiBNYXBzIFRlWCBmb250IGNvbW1hbmRzIHRvIG9iamVjdHMgY29udGFpbmluZzpcbiAqIC0gdmFyaWFudDogc3RyaW5nIHVzZWQgZm9yIFwibWF0aHZhcmlhbnRcIiBhdHRyaWJ1dGUgaW4gYnVpbGRNYXRoTUwuanNcbiAqIC0gZm9udE5hbWU6IHRoZSBcInN0eWxlXCIgcGFyYW1ldGVyIHRvIGZvbnRNZXRyaWNzLmdldENoYXJhY3Rlck1ldHJpY3NcbiAqL1xuLy8gQSBtYXAgYmV0d2VlbiB0ZXggZm9udCBjb21tYW5kcyBhbiBNYXRoTUwgbWF0aHZhcmlhbnQgYXR0cmlidXRlIHZhbHVlc1xuXG5cbnZhciBmb250TWFwID0ge1xuICAvLyBzdHlsZXNcbiAgXCJtYXRoYmZcIjoge1xuICAgIHZhcmlhbnQ6IFwiYm9sZFwiLFxuICAgIGZvbnROYW1lOiBcIk1haW4tQm9sZFwiXG4gIH0sXG4gIFwibWF0aHJtXCI6IHtcbiAgICB2YXJpYW50OiBcIm5vcm1hbFwiLFxuICAgIGZvbnROYW1lOiBcIk1haW4tUmVndWxhclwiXG4gIH0sXG4gIFwidGV4dGl0XCI6IHtcbiAgICB2YXJpYW50OiBcIml0YWxpY1wiLFxuICAgIGZvbnROYW1lOiBcIk1haW4tSXRhbGljXCJcbiAgfSxcbiAgXCJtYXRoaXRcIjoge1xuICAgIHZhcmlhbnQ6IFwiaXRhbGljXCIsXG4gICAgZm9udE5hbWU6IFwiTWFpbi1JdGFsaWNcIlxuICB9LFxuICAvLyBEZWZhdWx0IG1hdGggZm9udCwgXCJtYXRobm9ybWFsXCIgYW5kIFwiYm9sZHN5bWJvbFwiIGFyZSBtaXNzaW5nIGJlY2F1c2UgdGhleVxuICAvLyByZXF1aXJlIHRoZSB1c2Ugb2Ygc2V2ZXJhbCBmb250czogTWFpbi1JdGFsaWMgYW5kIE1hdGgtSXRhbGljIGZvciBkZWZhdWx0XG4gIC8vIG1hdGggZm9udCwgTWFpbi1JdGFsaWMsIE1hdGgtSXRhbGljLCBDYWxpZ3JhcGhpYyBmb3IgXCJtYXRobm9ybWFsXCIsIGFuZFxuICAvLyBNYXRoLUJvbGRJdGFsaWMgYW5kIE1haW4tQm9sZCBmb3IgXCJib2xkc3ltYm9sXCIuICBUaGlzIGlzIGhhbmRsZWQgYnkgYVxuICAvLyBzcGVjaWFsIGNhc2UgaW4gbWFrZU9yZCB3aGljaCBlbmRzIHVwIGNhbGxpbmcgbWF0aGRlZmF1bHQsIG1hdGhub3JtYWwsXG4gIC8vIGFuZCBib2xkc3ltYm9sLlxuICAvLyBmYW1pbGllc1xuICBcIm1hdGhiYlwiOiB7XG4gICAgdmFyaWFudDogXCJkb3VibGUtc3RydWNrXCIsXG4gICAgZm9udE5hbWU6IFwiQU1TLVJlZ3VsYXJcIlxuICB9LFxuICBcIm1hdGhjYWxcIjoge1xuICAgIHZhcmlhbnQ6IFwic2NyaXB0XCIsXG4gICAgZm9udE5hbWU6IFwiQ2FsaWdyYXBoaWMtUmVndWxhclwiXG4gIH0sXG4gIFwibWF0aGZyYWtcIjoge1xuICAgIHZhcmlhbnQ6IFwiZnJha3R1clwiLFxuICAgIGZvbnROYW1lOiBcIkZyYWt0dXItUmVndWxhclwiXG4gIH0sXG4gIFwibWF0aHNjclwiOiB7XG4gICAgdmFyaWFudDogXCJzY3JpcHRcIixcbiAgICBmb250TmFtZTogXCJTY3JpcHQtUmVndWxhclwiXG4gIH0sXG4gIFwibWF0aHNmXCI6IHtcbiAgICB2YXJpYW50OiBcInNhbnMtc2VyaWZcIixcbiAgICBmb250TmFtZTogXCJTYW5zU2VyaWYtUmVndWxhclwiXG4gIH0sXG4gIFwibWF0aHR0XCI6IHtcbiAgICB2YXJpYW50OiBcIm1vbm9zcGFjZVwiLFxuICAgIGZvbnROYW1lOiBcIlR5cGV3cml0ZXItUmVndWxhclwiXG4gIH1cbn07XG52YXIgc3ZnRGF0YSA9IHtcbiAgLy8gICBwYXRoLCB3aWR0aCwgaGVpZ2h0XG4gIHZlYzogW1widmVjXCIsIDAuNDcxLCAwLjcxNF0sXG4gIC8vIHZhbHVlcyBmcm9tIHRoZSBmb250IGdseXBoXG4gIG9paW50U2l6ZTE6IFtcIm9paW50U2l6ZTFcIiwgMC45NTcsIDAuNDk5XSxcbiAgLy8gb3ZhbCB0byBvdmVybGF5IHRoZSBpbnRlZ3JhbmRcbiAgb2lpbnRTaXplMjogW1wib2lpbnRTaXplMlwiLCAxLjQ3MiwgMC42NTldLFxuICBvaWlpbnRTaXplMTogW1wib2lpaW50U2l6ZTFcIiwgMS4zMDQsIDAuNDk5XSxcbiAgb2lpaW50U2l6ZTI6IFtcIm9paWludFNpemUyXCIsIDEuOTgsIDAuNjU5XVxufTtcblxudmFyIGJ1aWxkQ29tbW9uX3N0YXRpY1N2ZyA9IGZ1bmN0aW9uIHN0YXRpY1N2Zyh2YWx1ZSwgb3B0aW9ucykge1xuICAvLyBDcmVhdGUgYSBzcGFuIHdpdGggaW5saW5lIFNWRyBmb3IgdGhlIGVsZW1lbnQuXG4gIHZhciBfc3ZnRGF0YSR2YWx1ZSA9IHN2Z0RhdGFbdmFsdWVdLFxuICAgICAgcGF0aE5hbWUgPSBfc3ZnRGF0YSR2YWx1ZVswXSxcbiAgICAgIHdpZHRoID0gX3N2Z0RhdGEkdmFsdWVbMV0sXG4gICAgICBoZWlnaHQgPSBfc3ZnRGF0YSR2YWx1ZVsyXTtcbiAgdmFyIHBhdGggPSBuZXcgZG9tVHJlZV9QYXRoTm9kZShwYXRoTmFtZSk7XG4gIHZhciBzdmdOb2RlID0gbmV3IFN2Z05vZGUoW3BhdGhdLCB7XG4gICAgXCJ3aWR0aFwiOiB3aWR0aCArIFwiZW1cIixcbiAgICBcImhlaWdodFwiOiBoZWlnaHQgKyBcImVtXCIsXG4gICAgLy8gT3ZlcnJpZGUgQ1NTIHJ1bGUgYC5rYXRleCBzdmcgeyB3aWR0aDogMTAwJSB9YFxuICAgIFwic3R5bGVcIjogXCJ3aWR0aDpcIiArIHdpZHRoICsgXCJlbVwiLFxuICAgIFwidmlld0JveFwiOiBcIjAgMCBcIiArIDEwMDAgKiB3aWR0aCArIFwiIFwiICsgMTAwMCAqIGhlaWdodCxcbiAgICBcInByZXNlcnZlQXNwZWN0UmF0aW9cIjogXCJ4TWluWU1pblwiXG4gIH0pO1xuICB2YXIgc3BhbiA9IGJ1aWxkQ29tbW9uX21ha2VTdmdTcGFuKFtcIm92ZXJsYXlcIl0sIFtzdmdOb2RlXSwgb3B0aW9ucyk7XG4gIHNwYW4uaGVpZ2h0ID0gaGVpZ2h0O1xuICBzcGFuLnN0eWxlLmhlaWdodCA9IGhlaWdodCArIFwiZW1cIjtcbiAgc3Bhbi5zdHlsZS53aWR0aCA9IHdpZHRoICsgXCJlbVwiO1xuICByZXR1cm4gc3Bhbjtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGJ1aWxkQ29tbW9uID0gKHtcbiAgZm9udE1hcDogZm9udE1hcCxcbiAgbWFrZVN5bWJvbDogYnVpbGRDb21tb25fbWFrZVN5bWJvbCxcbiAgbWF0aHN5bTogYnVpbGRDb21tb25fbWF0aHN5bSxcbiAgbWFrZVNwYW46IGJ1aWxkQ29tbW9uX21ha2VTcGFuLFxuICBtYWtlU3ZnU3BhbjogYnVpbGRDb21tb25fbWFrZVN2Z1NwYW4sXG4gIG1ha2VMaW5lU3BhbjogbWFrZUxpbmVTcGFuLFxuICBtYWtlQW5jaG9yOiBidWlsZENvbW1vbl9tYWtlQW5jaG9yLFxuICBtYWtlRnJhZ21lbnQ6IGJ1aWxkQ29tbW9uX21ha2VGcmFnbWVudCxcbiAgd3JhcEZyYWdtZW50OiBidWlsZENvbW1vbl93cmFwRnJhZ21lbnQsXG4gIG1ha2VWTGlzdDogYnVpbGRDb21tb25fbWFrZVZMaXN0LFxuICBtYWtlT3JkOiBidWlsZENvbW1vbl9tYWtlT3JkLFxuICBtYWtlR2x1ZTogYnVpbGRDb21tb25fbWFrZUdsdWUsXG4gIHN0YXRpY1N2ZzogYnVpbGRDb21tb25fc3RhdGljU3ZnLFxuICBzdmdEYXRhOiBzdmdEYXRhLFxuICB0cnlDb21iaW5lQ2hhcnM6IGJ1aWxkQ29tbW9uX3RyeUNvbWJpbmVDaGFyc1xufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9wYXJzZU5vZGUuanNcblxuXG4vKipcbiAqIEFzc2VydHMgdGhhdCB0aGUgbm9kZSBpcyBvZiB0aGUgZ2l2ZW4gdHlwZSBhbmQgcmV0dXJucyBpdCB3aXRoIHN0cmljdGVyXG4gKiB0eXBpbmcuIFRocm93cyBpZiB0aGUgbm9kZSdzIHR5cGUgZG9lcyBub3QgbWF0Y2guXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vZGVUeXBlKG5vZGUsIHR5cGUpIHtcbiAgdmFyIHR5cGVkTm9kZSA9IGNoZWNrTm9kZVR5cGUobm9kZSwgdHlwZSk7XG5cbiAgaWYgKCF0eXBlZE5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBub2RlIG9mIHR5cGUgXCIgKyB0eXBlICsgXCIsIGJ1dCBnb3QgXCIgKyAobm9kZSA/IFwibm9kZSBvZiB0eXBlIFwiICsgbm9kZS50eXBlIDogU3RyaW5nKG5vZGUpKSk7XG4gIH0gLy8gJEZsb3dGaXhNZTogVW5zdXJlIHdoeS5cblxuXG4gIHJldHVybiB0eXBlZE5vZGU7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIG5vZGUgbW9yZSBzdHJpY3RseSB0eXBlZCBpZmYgaXQgaXMgb2YgdGhlIGdpdmVuIHR5cGUuIE90aGVyd2lzZSxcbiAqIHJldHVybnMgbnVsbC5cbiAqL1xuXG5mdW5jdGlvbiBjaGVja05vZGVUeXBlKG5vZGUsIHR5cGUpIHtcbiAgaWYgKG5vZGUgJiYgbm9kZS50eXBlID09PSB0eXBlKSB7XG4gICAgLy8gVGhlIGRlZmluaXRpb24gb2YgUGFyc2VOb2RlPFRZUEU+IGRvZXNuJ3QgY29tbXVuaWNhdGUgdG8gZmxvdyB0aGF0XG4gICAgLy8gYHR5cGU6IFRZUEVgIChhcyB0aGF0J3Mgbm90IGV4cGxpY2l0bHkgbWVudGlvbmVkIGFueXdoZXJlKSwgdGhvdWdoIHRoYXRcbiAgICAvLyBoYXBwZW5zIHRvIGJlIHRydWUgZm9yIGFsbCBvdXIgdmFsdWUgdHlwZXMuXG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIEFzc2VydHMgdGhhdCB0aGUgbm9kZSBpcyBvZiB0aGUgZ2l2ZW4gdHlwZSBhbmQgcmV0dXJucyBpdCB3aXRoIHN0cmljdGVyXG4gKiB0eXBpbmcuIFRocm93cyBpZiB0aGUgbm9kZSdzIHR5cGUgZG9lcyBub3QgbWF0Y2guXG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0QXRvbUZhbWlseShub2RlLCBmYW1pbHkpIHtcbiAgdmFyIHR5cGVkTm9kZSA9IGNoZWNrQXRvbUZhbWlseShub2RlLCBmYW1pbHkpO1xuXG4gIGlmICghdHlwZWROb2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbm9kZSBvZiB0eXBlIFxcXCJhdG9tXFxcIiBhbmQgZmFtaWx5IFxcXCJcIiArIGZhbWlseSArIFwiXFxcIiwgYnV0IGdvdCBcIiArIChub2RlID8gbm9kZS50eXBlID09PSBcImF0b21cIiA/IFwiYXRvbSBvZiBmYW1pbHkgXCIgKyBub2RlLmZhbWlseSA6IFwibm9kZSBvZiB0eXBlIFwiICsgbm9kZS50eXBlIDogU3RyaW5nKG5vZGUpKSk7XG4gIH1cblxuICByZXR1cm4gdHlwZWROb2RlO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBub2RlIG1vcmUgc3RyaWN0bHkgdHlwZWQgaWZmIGl0IGlzIG9mIHRoZSBnaXZlbiB0eXBlLiBPdGhlcndpc2UsXG4gKiByZXR1cm5zIG51bGwuXG4gKi9cblxuZnVuY3Rpb24gY2hlY2tBdG9tRmFtaWx5KG5vZGUsIGZhbWlseSkge1xuICByZXR1cm4gbm9kZSAmJiBub2RlLnR5cGUgPT09IFwiYXRvbVwiICYmIG5vZGUuZmFtaWx5ID09PSBmYW1pbHkgPyBub2RlIDogbnVsbDtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgbm9kZSBtb3JlIHN0cmljdGx5IHR5cGVkIGlmZiBpdCBpcyBvZiB0aGUgZ2l2ZW4gdHlwZS4gT3RoZXJ3aXNlLFxuICogcmV0dXJucyBudWxsLlxuICovXG5cbmZ1bmN0aW9uIGFzc2VydFN5bWJvbE5vZGVUeXBlKG5vZGUpIHtcbiAgdmFyIHR5cGVkTm9kZSA9IGNoZWNrU3ltYm9sTm9kZVR5cGUobm9kZSk7XG5cbiAgaWYgKCF0eXBlZE5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBub2RlIG9mIHN5bWJvbCBncm91cCB0eXBlLCBidXQgZ290IFwiICsgKG5vZGUgPyBcIm5vZGUgb2YgdHlwZSBcIiArIG5vZGUudHlwZSA6IFN0cmluZyhub2RlKSkpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGVkTm9kZTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgbm9kZSBtb3JlIHN0cmljdGx5IHR5cGVkIGlmZiBpdCBpcyBvZiB0aGUgZ2l2ZW4gdHlwZS4gT3RoZXJ3aXNlLFxuICogcmV0dXJucyBudWxsLlxuICovXG5cbmZ1bmN0aW9uIGNoZWNrU3ltYm9sTm9kZVR5cGUobm9kZSkge1xuICBpZiAobm9kZSAmJiAobm9kZS50eXBlID09PSBcImF0b21cIiB8fCBOT05fQVRPTVMuaGFzT3duUHJvcGVydHkobm9kZS50eXBlKSkpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3NwYWNpbmdEYXRhLmpzXG4vKipcbiAqIERlc2NyaWJlcyBzcGFjZXMgYmV0d2VlbiBkaWZmZXJlbnQgY2xhc3NlcyBvZiBhdG9tcy5cbiAqL1xudmFyIHRoaW5zcGFjZSA9IHtcbiAgbnVtYmVyOiAzLFxuICB1bml0OiBcIm11XCJcbn07XG52YXIgbWVkaXVtc3BhY2UgPSB7XG4gIG51bWJlcjogNCxcbiAgdW5pdDogXCJtdVwiXG59O1xudmFyIHRoaWNrc3BhY2UgPSB7XG4gIG51bWJlcjogNSxcbiAgdW5pdDogXCJtdVwiXG59OyAvLyBNYWtpbmcgdGhlIHR5cGUgYmVsb3cgZXhhY3Qgd2l0aCBhbGwgb3B0aW9uYWwgZmllbGRzIGRvZXNuJ3Qgd29yayBkdWUgdG9cbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzQ1ODJcbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzU2ODhcbi8vIEhvd2V2ZXIsIHNpbmNlICphbGwqIGZpZWxkcyBhcmUgb3B0aW9uYWwsICRTaGFwZTw+IHdvcmtzIGFzIHN1Z2dlc3RlZCBpbiA1Njg4XG4vLyBhYm92ZS5cblxuLy8gU3BhY2luZyByZWxhdGlvbnNoaXBzIGZvciBkaXNwbGF5IGFuZCB0ZXh0IHN0eWxlc1xudmFyIHNwYWNpbmdzID0ge1xuICBtb3JkOiB7XG4gICAgbW9wOiB0aGluc3BhY2UsXG4gICAgbWJpbjogbWVkaXVtc3BhY2UsXG4gICAgbXJlbDogdGhpY2tzcGFjZSxcbiAgICBtaW5uZXI6IHRoaW5zcGFjZVxuICB9LFxuICBtb3A6IHtcbiAgICBtb3JkOiB0aGluc3BhY2UsXG4gICAgbW9wOiB0aGluc3BhY2UsXG4gICAgbXJlbDogdGhpY2tzcGFjZSxcbiAgICBtaW5uZXI6IHRoaW5zcGFjZVxuICB9LFxuICBtYmluOiB7XG4gICAgbW9yZDogbWVkaXVtc3BhY2UsXG4gICAgbW9wOiBtZWRpdW1zcGFjZSxcbiAgICBtb3BlbjogbWVkaXVtc3BhY2UsXG4gICAgbWlubmVyOiBtZWRpdW1zcGFjZVxuICB9LFxuICBtcmVsOiB7XG4gICAgbW9yZDogdGhpY2tzcGFjZSxcbiAgICBtb3A6IHRoaWNrc3BhY2UsXG4gICAgbW9wZW46IHRoaWNrc3BhY2UsXG4gICAgbWlubmVyOiB0aGlja3NwYWNlXG4gIH0sXG4gIG1vcGVuOiB7fSxcbiAgbWNsb3NlOiB7XG4gICAgbW9wOiB0aGluc3BhY2UsXG4gICAgbWJpbjogbWVkaXVtc3BhY2UsXG4gICAgbXJlbDogdGhpY2tzcGFjZSxcbiAgICBtaW5uZXI6IHRoaW5zcGFjZVxuICB9LFxuICBtcHVuY3Q6IHtcbiAgICBtb3JkOiB0aGluc3BhY2UsXG4gICAgbW9wOiB0aGluc3BhY2UsXG4gICAgbXJlbDogdGhpY2tzcGFjZSxcbiAgICBtb3BlbjogdGhpbnNwYWNlLFxuICAgIG1jbG9zZTogdGhpbnNwYWNlLFxuICAgIG1wdW5jdDogdGhpbnNwYWNlLFxuICAgIG1pbm5lcjogdGhpbnNwYWNlXG4gIH0sXG4gIG1pbm5lcjoge1xuICAgIG1vcmQ6IHRoaW5zcGFjZSxcbiAgICBtb3A6IHRoaW5zcGFjZSxcbiAgICBtYmluOiBtZWRpdW1zcGFjZSxcbiAgICBtcmVsOiB0aGlja3NwYWNlLFxuICAgIG1vcGVuOiB0aGluc3BhY2UsXG4gICAgbXB1bmN0OiB0aGluc3BhY2UsXG4gICAgbWlubmVyOiB0aGluc3BhY2VcbiAgfVxufTsgLy8gU3BhY2luZyByZWxhdGlvbnNoaXBzIGZvciBzY3JpcHQgYW5kIHNjcmlwdHNjcmlwdCBzdHlsZXNcblxudmFyIHRpZ2h0U3BhY2luZ3MgPSB7XG4gIG1vcmQ6IHtcbiAgICBtb3A6IHRoaW5zcGFjZVxuICB9LFxuICBtb3A6IHtcbiAgICBtb3JkOiB0aGluc3BhY2UsXG4gICAgbW9wOiB0aGluc3BhY2VcbiAgfSxcbiAgbWJpbjoge30sXG4gIG1yZWw6IHt9LFxuICBtb3Blbjoge30sXG4gIG1jbG9zZToge1xuICAgIG1vcDogdGhpbnNwYWNlXG4gIH0sXG4gIG1wdW5jdDoge30sXG4gIG1pbm5lcjoge1xuICAgIG1vcDogdGhpbnNwYWNlXG4gIH1cbn07XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9kZWZpbmVGdW5jdGlvbi5qc1xuXG5cbi8qKlxuICogQWxsIHJlZ2lzdGVyZWQgZnVuY3Rpb25zLlxuICogYGZ1bmN0aW9ucy5qc2AganVzdCBleHBvcnRzIHRoaXMgc2FtZSBkaWN0aW9uYXJ5IGFnYWluIGFuZCBtYWtlcyBpdCBwdWJsaWMuXG4gKiBgUGFyc2VyLmpzYCByZXF1aXJlcyB0aGlzIGRpY3Rpb25hcnkuXG4gKi9cbnZhciBfZnVuY3Rpb25zID0ge307XG4vKipcbiAqIEFsbCBIVE1MIGJ1aWxkZXJzLiBTaG91bGQgYmUgb25seSB1c2VkIGluIHRoZSBgZGVmaW5lKmAgYW5kIHRoZSBgYnVpbGQqTUxgXG4gKiBmdW5jdGlvbnMuXG4gKi9cblxudmFyIF9odG1sR3JvdXBCdWlsZGVycyA9IHt9O1xuLyoqXG4gKiBBbGwgTWF0aE1MIGJ1aWxkZXJzLiBTaG91bGQgYmUgb25seSB1c2VkIGluIHRoZSBgZGVmaW5lKmAgYW5kIHRoZSBgYnVpbGQqTUxgXG4gKiBmdW5jdGlvbnMuXG4gKi9cblxudmFyIF9tYXRobWxHcm91cEJ1aWxkZXJzID0ge307XG5mdW5jdGlvbiBkZWZpbmVGdW5jdGlvbihfcmVmKSB7XG4gIHZhciB0eXBlID0gX3JlZi50eXBlLFxuICAgICAgbmFtZXMgPSBfcmVmLm5hbWVzLFxuICAgICAgcHJvcHMgPSBfcmVmLnByb3BzLFxuICAgICAgaGFuZGxlciA9IF9yZWYuaGFuZGxlcixcbiAgICAgIGh0bWxCdWlsZGVyID0gX3JlZi5odG1sQnVpbGRlcixcbiAgICAgIG1hdGhtbEJ1aWxkZXIgPSBfcmVmLm1hdGhtbEJ1aWxkZXI7XG4gIC8vIFNldCBkZWZhdWx0IHZhbHVlcyBvZiBmdW5jdGlvbnNcbiAgdmFyIGRhdGEgPSB7XG4gICAgdHlwZTogdHlwZSxcbiAgICBudW1BcmdzOiBwcm9wcy5udW1BcmdzLFxuICAgIGFyZ1R5cGVzOiBwcm9wcy5hcmdUeXBlcyxcbiAgICBncmVlZGluZXNzOiBwcm9wcy5ncmVlZGluZXNzID09PSB1bmRlZmluZWQgPyAxIDogcHJvcHMuZ3JlZWRpbmVzcyxcbiAgICBhbGxvd2VkSW5UZXh0OiAhIXByb3BzLmFsbG93ZWRJblRleHQsXG4gICAgYWxsb3dlZEluTWF0aDogcHJvcHMuYWxsb3dlZEluTWF0aCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHByb3BzLmFsbG93ZWRJbk1hdGgsXG4gICAgbnVtT3B0aW9uYWxBcmdzOiBwcm9wcy5udW1PcHRpb25hbEFyZ3MgfHwgMCxcbiAgICBpbmZpeDogISFwcm9wcy5pbmZpeCxcbiAgICBjb25zdW1lTW9kZTogcHJvcHMuY29uc3VtZU1vZGUsXG4gICAgaGFuZGxlcjogaGFuZGxlclxuICB9O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyArK2kpIHtcbiAgICBfZnVuY3Rpb25zW25hbWVzW2ldXSA9IGRhdGE7XG4gIH1cblxuICBpZiAodHlwZSkge1xuICAgIGlmIChodG1sQnVpbGRlcikge1xuICAgICAgX2h0bWxHcm91cEJ1aWxkZXJzW3R5cGVdID0gaHRtbEJ1aWxkZXI7XG4gICAgfVxuXG4gICAgaWYgKG1hdGhtbEJ1aWxkZXIpIHtcbiAgICAgIF9tYXRobWxHcm91cEJ1aWxkZXJzW3R5cGVdID0gbWF0aG1sQnVpbGRlcjtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogVXNlIHRoaXMgdG8gcmVnaXN0ZXIgb25seSB0aGUgSFRNTCBhbmQgTWF0aE1MIGJ1aWxkZXJzIGZvciBhIGZ1bmN0aW9uIChlLmcuXG4gKiBpZiB0aGUgZnVuY3Rpb24ncyBQYXJzZU5vZGUgaXMgZ2VuZXJhdGVkIGluIFBhcnNlci5qcyByYXRoZXIgdGhhbiB2aWEgYVxuICogc3RhbmQtYWxvbmUgaGFuZGxlciBwcm92aWRlZCB0byBgZGVmaW5lRnVuY3Rpb25gKS5cbiAqL1xuXG5mdW5jdGlvbiBkZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKF9yZWYyKSB7XG4gIHZhciB0eXBlID0gX3JlZjIudHlwZSxcbiAgICAgIGh0bWxCdWlsZGVyID0gX3JlZjIuaHRtbEJ1aWxkZXIsXG4gICAgICBtYXRobWxCdWlsZGVyID0gX3JlZjIubWF0aG1sQnVpbGRlcjtcbiAgZGVmaW5lRnVuY3Rpb24oe1xuICAgIHR5cGU6IHR5cGUsXG4gICAgbmFtZXM6IFtdLFxuICAgIHByb3BzOiB7XG4gICAgICBudW1BcmdzOiAwXG4gICAgfSxcbiAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaG91bGQgbmV2ZXIgYmUgY2FsbGVkLicpO1xuICAgIH0sXG4gICAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyLFxuICAgIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXJcbiAgfSk7XG59IC8vIFNpbmNlIHRoZSBjb3JyZXNwb25kaW5nIGJ1aWxkSFRNTC9idWlsZE1hdGhNTCBmdW5jdGlvbiBleHBlY3RzIGFcbi8vIGxpc3Qgb2YgZWxlbWVudHMsIHdlIG5vcm1hbGl6ZSBmb3IgZGlmZmVyZW50IGtpbmRzIG9mIGFyZ3VtZW50c1xuXG52YXIgZGVmaW5lRnVuY3Rpb25fb3JkYXJndW1lbnQgPSBmdW5jdGlvbiBvcmRhcmd1bWVudChhcmcpIHtcbiAgdmFyIG5vZGUgPSBjaGVja05vZGVUeXBlKGFyZywgXCJvcmRncm91cFwiKTtcbiAgcmV0dXJuIG5vZGUgPyBub2RlLmJvZHkgOiBbYXJnXTtcbn07XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9idWlsZEhUTUwuanNcbi8qKlxuICogVGhpcyBmaWxlIGRvZXMgdGhlIG1haW4gd29yayBvZiBidWlsZGluZyBhIGRvbVRyZWUgc3RydWN0dXJlIGZyb20gYSBwYXJzZVxuICogdHJlZS4gVGhlIGVudHJ5IHBvaW50IGlzIHRoZSBgYnVpbGRIVE1MYCBmdW5jdGlvbiwgd2hpY2ggdGFrZXMgYSBwYXJzZSB0cmVlLlxuICogVGhlbiwgdGhlIGJ1aWxkRXhwcmVzc2lvbiwgYnVpbGRHcm91cCwgYW5kIHZhcmlvdXMgZ3JvdXBCdWlsZGVycyBmdW5jdGlvbnNcbiAqIGFyZSBjYWxsZWQsIHRvIHByb2R1Y2UgYSBmaW5hbCBIVE1MIHRyZWUuXG4gKi9cblxuXG5cblxuXG5cblxuXG5cbnZhciBidWlsZEhUTUxfbWFrZVNwYW4gPSBidWlsZENvbW1vbi5tYWtlU3BhbjsgLy8gQmluYXJ5IGF0b21zIChmaXJzdCBjbGFzcyBgbWJpbmApIGNoYW5nZSBpbnRvIG9yZGluYXJ5IGF0b21zIChgbW9yZGApXG4vLyBkZXBlbmRpbmcgb24gdGhlaXIgc3Vycm91bmRpbmdzLiBTZWUgVGVYYm9vayBwZy4gNDQyLTQ0NiwgUnVsZXMgNSBhbmQgNixcbi8vIGFuZCB0aGUgdGV4dCBiZWZvcmUgUnVsZSAxOS5cblxudmFyIGJpbkxlZnRDYW5jZWxsZXIgPSBbXCJsZWZ0bW9zdFwiLCBcIm1iaW5cIiwgXCJtb3BlblwiLCBcIm1yZWxcIiwgXCJtb3BcIiwgXCJtcHVuY3RcIl07XG52YXIgYmluUmlnaHRDYW5jZWxsZXIgPSBbXCJyaWdodG1vc3RcIiwgXCJtcmVsXCIsIFwibWNsb3NlXCIsIFwibXB1bmN0XCJdO1xudmFyIHN0eWxlTWFwID0ge1xuICBcImRpc3BsYXlcIjogc3JjX1N0eWxlLkRJU1BMQVksXG4gIFwidGV4dFwiOiBzcmNfU3R5bGUuVEVYVCxcbiAgXCJzY3JpcHRcIjogc3JjX1N0eWxlLlNDUklQVCxcbiAgXCJzY3JpcHRzY3JpcHRcIjogc3JjX1N0eWxlLlNDUklQVFNDUklQVFxufTtcbnZhciBEb21FbnVtID0ge1xuICBtb3JkOiBcIm1vcmRcIixcbiAgbW9wOiBcIm1vcFwiLFxuICBtYmluOiBcIm1iaW5cIixcbiAgbXJlbDogXCJtcmVsXCIsXG4gIG1vcGVuOiBcIm1vcGVuXCIsXG4gIG1jbG9zZTogXCJtY2xvc2VcIixcbiAgbXB1bmN0OiBcIm1wdW5jdFwiLFxuICBtaW5uZXI6IFwibWlubmVyXCJcbn07XG5cbi8qKlxuICogVGFrZSBhIGxpc3Qgb2Ygbm9kZXMsIGJ1aWxkIHRoZW0gaW4gb3JkZXIsIGFuZCByZXR1cm4gYSBsaXN0IG9mIHRoZSBidWlsdFxuICogbm9kZXMuIGRvY3VtZW50RnJhZ21lbnRzIGFyZSBmbGF0dGVuZWQgaW50byB0aGVpciBjb250ZW50cywgc28gdGhlXG4gKiByZXR1cm5lZCBsaXN0IGNvbnRhaW5zIG5vIGZyYWdtZW50cy4gYGlzUmVhbEdyb3VwYCBpcyB0cnVlIGlmIGBleHByZXNzaW9uYFxuICogaXMgYSByZWFsIGdyb3VwIChubyBhdG9tcyB3aWxsIGJlIGFkZGVkIG9uIGVpdGhlciBzaWRlKSwgYXMgb3Bwb3NlZCB0b1xuICogYSBwYXJ0aWFsIGdyb3VwIChlLmcuIG9uZSBjcmVhdGVkIGJ5IFxcY29sb3IpLiBgc3Vycm91bmRpbmdgIGlzIGFuIGFycmF5XG4gKiBjb25zaXN0aW5nIHR5cGUgb2Ygbm9kZXMgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBsZWZ0IGFuZCByaWdodC5cbiAqL1xudmFyIGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24gPSBmdW5jdGlvbiBidWlsZEV4cHJlc3Npb24oZXhwcmVzc2lvbiwgb3B0aW9ucywgaXNSZWFsR3JvdXAsIHN1cnJvdW5kaW5nKSB7XG4gIGlmIChzdXJyb3VuZGluZyA9PT0gdm9pZCAwKSB7XG4gICAgc3Vycm91bmRpbmcgPSBbbnVsbCwgbnVsbF07XG4gIH1cblxuICAvLyBQYXJzZSBleHByZXNzaW9ucyBpbnRvIGBncm91cHNgLlxuICB2YXIgZ3JvdXBzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9uLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG91dHB1dCA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKGV4cHJlc3Npb25baV0sIG9wdGlvbnMpO1xuXG4gICAgaWYgKG91dHB1dCBpbnN0YW5jZW9mIHRyZWVfRG9jdW1lbnRGcmFnbWVudCkge1xuICAgICAgdmFyIGNoaWxkcmVuID0gb3V0cHV0LmNoaWxkcmVuO1xuICAgICAgZ3JvdXBzLnB1c2guYXBwbHkoZ3JvdXBzLCBjaGlsZHJlbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdyb3Vwcy5wdXNoKG91dHB1dCk7XG4gICAgfVxuICB9IC8vIElmIGBleHByZXNzaW9uYCBpcyBhIHBhcnRpYWwgZ3JvdXAsIGxldCB0aGUgcGFyZW50IGhhbmRsZSBzcGFjaW5nc1xuICAvLyB0byBhdm9pZCBwcm9jZXNzaW5nIGdyb3VwcyBtdWx0aXBsZSB0aW1lcy5cblxuXG4gIGlmICghaXNSZWFsR3JvdXApIHtcbiAgICByZXR1cm4gZ3JvdXBzO1xuICB9XG5cbiAgdmFyIGdsdWVPcHRpb25zID0gb3B0aW9ucztcblxuICBpZiAoZXhwcmVzc2lvbi5sZW5ndGggPT09IDEpIHtcbiAgICB2YXIgbm9kZSA9IGNoZWNrTm9kZVR5cGUoZXhwcmVzc2lvblswXSwgXCJzaXppbmdcIikgfHwgY2hlY2tOb2RlVHlwZShleHByZXNzaW9uWzBdLCBcInN0eWxpbmdcIik7XG5cbiAgICBpZiAoIW5vZGUpIHsvLyBObyBtYXRjaC5cbiAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gXCJzaXppbmdcIikge1xuICAgICAgZ2x1ZU9wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1NpemUobm9kZS5zaXplKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gXCJzdHlsaW5nXCIpIHtcbiAgICAgIGdsdWVPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShzdHlsZU1hcFtub2RlLnN0eWxlXSk7XG4gICAgfVxuICB9IC8vIER1bW15IHNwYW5zIGZvciBkZXRlcm1pbmluZyBzcGFjaW5ncyBiZXR3ZWVuIHN1cnJvdW5kaW5nIGF0b21zLlxuICAvLyBJZiBgZXhwcmVzc2lvbmAgaGFzIG5vIGF0b21zIG9uIHRoZSBsZWZ0IG9yIHJpZ2h0LCBjbGFzcyBcImxlZnRtb3N0XCJcbiAgLy8gb3IgXCJyaWdodG1vc3RcIiwgcmVzcGVjdGl2ZWx5LCBpcyB1c2VkIHRvIGluZGljYXRlIGl0LlxuXG5cbiAgdmFyIGR1bW15UHJldiA9IGJ1aWxkSFRNTF9tYWtlU3Bhbihbc3Vycm91bmRpbmdbMF0gfHwgXCJsZWZ0bW9zdFwiXSwgW10sIG9wdGlvbnMpO1xuICB2YXIgZHVtbXlOZXh0ID0gYnVpbGRIVE1MX21ha2VTcGFuKFtzdXJyb3VuZGluZ1sxXSB8fCBcInJpZ2h0bW9zdFwiXSwgW10sIG9wdGlvbnMpOyAvLyBUT0RPOiBUaGVzZSBjb2RlIGFzc3VtZXMgdGhhdCBhIG5vZGUncyBtYXRoIGNsYXNzIGlzIHRoZSBmaXJzdCBlbGVtZW50XG4gIC8vIG9mIGl0cyBgY2xhc3Nlc2AgYXJyYXkuIEEgbGF0ZXIgY2xlYW51cCBzaG91bGQgZW5zdXJlIHRoaXMsIGZvclxuICAvLyBpbnN0YW5jZSBieSBjaGFuZ2luZyB0aGUgc2lnbmF0dXJlIG9mIGBtYWtlU3BhbmAuXG4gIC8vIEJlZm9yZSBkZXRlcm1pbmluZyB3aGF0IHNwYWNlcyB0byBpbnNlcnQsIHBlcmZvcm0gYmluIGNhbmNlbGxhdGlvbi5cbiAgLy8gQmluYXJ5IG9wZXJhdG9ycyBjaGFuZ2UgdG8gb3JkaW5hcnkgc3ltYm9scyBpbiBzb21lIGNvbnRleHRzLlxuXG4gIHRyYXZlcnNlTm9uU3BhY2VOb2Rlcyhncm91cHMsIGZ1bmN0aW9uIChub2RlLCBwcmV2KSB7XG4gICAgdmFyIHByZXZUeXBlID0gcHJldi5jbGFzc2VzWzBdO1xuICAgIHZhciB0eXBlID0gbm9kZS5jbGFzc2VzWzBdO1xuXG4gICAgaWYgKHByZXZUeXBlID09PSBcIm1iaW5cIiAmJiB1dGlscy5jb250YWlucyhiaW5SaWdodENhbmNlbGxlciwgdHlwZSkpIHtcbiAgICAgIHByZXYuY2xhc3Nlc1swXSA9IFwibW9yZFwiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJtYmluXCIgJiYgdXRpbHMuY29udGFpbnMoYmluTGVmdENhbmNlbGxlciwgcHJldlR5cGUpKSB7XG4gICAgICBub2RlLmNsYXNzZXNbMF0gPSBcIm1vcmRcIjtcbiAgICB9XG4gIH0sIHtcbiAgICBub2RlOiBkdW1teVByZXZcbiAgfSwgZHVtbXlOZXh0KTtcbiAgdHJhdmVyc2VOb25TcGFjZU5vZGVzKGdyb3VwcywgZnVuY3Rpb24gKG5vZGUsIHByZXYpIHtcbiAgICB2YXIgcHJldlR5cGUgPSBnZXRUeXBlT2ZEb21UcmVlKHByZXYpO1xuICAgIHZhciB0eXBlID0gZ2V0VHlwZU9mRG9tVHJlZShub2RlKTsgLy8gJ210aWdodCcgaW5kaWNhdGVzIHRoYXQgdGhlIG5vZGUgaXMgc2NyaXB0IG9yIHNjcmlwdHNjcmlwdCBzdHlsZS5cblxuICAgIHZhciBzcGFjZSA9IHByZXZUeXBlICYmIHR5cGUgPyBub2RlLmhhc0NsYXNzKFwibXRpZ2h0XCIpID8gdGlnaHRTcGFjaW5nc1twcmV2VHlwZV1bdHlwZV0gOiBzcGFjaW5nc1twcmV2VHlwZV1bdHlwZV0gOiBudWxsO1xuXG4gICAgaWYgKHNwYWNlKSB7XG4gICAgICAvLyBJbnNlcnQgZ2x1ZSAoc3BhY2luZykgYWZ0ZXIgdGhlIGBwcmV2YC5cbiAgICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlR2x1ZShzcGFjZSwgZ2x1ZU9wdGlvbnMpO1xuICAgIH1cbiAgfSwge1xuICAgIG5vZGU6IGR1bW15UHJldlxuICB9LCBkdW1teU5leHQpO1xuICByZXR1cm4gZ3JvdXBzO1xufTsgLy8gRGVwdGgtZmlyc3QgdHJhdmVyc2Ugbm9uLXNwYWNlIGBub2Rlc2AsIGNhbGxpbmcgYGNhbGxiYWNrYCB3aXRoIHRoZSBjdXJyZW50IGFuZFxuLy8gcHJldmlvdXMgbm9kZSBhcyBhcmd1bWVudHMsIG9wdGlvbmFsbHkgcmV0dXJuaW5nIGEgbm9kZSB0byBpbnNlcnQgYWZ0ZXIgdGhlXG4vLyBwcmV2aW91cyBub2RlLiBgcHJldmAgaXMgYW4gb2JqZWN0IHdpdGggdGhlIHByZXZpb3VzIG5vZGUgYW5kIGBpbnNlcnRBZnRlcmBcbi8vIGZ1bmN0aW9uIHRvIGluc2VydCBhZnRlciBpdC4gYG5leHRgIGlzIGEgbm9kZSB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHJpZ2h0LlxuLy8gVXNlZCBmb3IgYmluIGNhbmNlbGxhdGlvbiBhbmQgaW5zZXJ0aW5nIHNwYWNpbmdzLlxuXG52YXIgdHJhdmVyc2VOb25TcGFjZU5vZGVzID0gZnVuY3Rpb24gdHJhdmVyc2VOb25TcGFjZU5vZGVzKG5vZGVzLCBjYWxsYmFjaywgcHJldiwgbmV4dCkge1xuICBpZiAobmV4dCkge1xuICAgIC8vIHRlbXBvcmFyaWx5IGFwcGVuZCB0aGUgcmlnaHQgbm9kZSwgaWYgZXhpc3RzXG4gICAgbm9kZXMucHVzaChuZXh0KTtcbiAgfVxuXG4gIHZhciBpID0gMDtcblxuICBmb3IgKDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICB2YXIgcGFydGlhbEdyb3VwID0gYnVpbGRIVE1MX2NoZWNrUGFydGlhbEdyb3VwKG5vZGUpO1xuXG4gICAgaWYgKHBhcnRpYWxHcm91cCkge1xuICAgICAgLy8gUmVjdXJzaXZlIERGU1xuICAgICAgLy8gJEZsb3dGaXhNZTogbWFrZSBub2RlcyBhICRSZWFkT25seUFycmF5IGJ5IHJldHVybmluZyBhIG5ldyBhcnJheVxuICAgICAgdHJhdmVyc2VOb25TcGFjZU5vZGVzKHBhcnRpYWxHcm91cC5jaGlsZHJlbiwgY2FsbGJhY2ssIHByZXYpO1xuICAgICAgY29udGludWU7XG4gICAgfSAvLyBJZ25vcmUgZXhwbGljaXQgc3BhY2VzIChlLmcuLCBcXDssIFxcLCkgd2hlbiBkZXRlcm1pbmluZyB3aGF0IGltcGxpY2l0XG4gICAgLy8gc3BhY2luZyBzaG91bGQgZ28gYmV0d2VlbiBhdG9tcyBvZiBkaWZmZXJlbnQgY2xhc3Nlc1xuXG5cbiAgICBpZiAobm9kZS5jbGFzc2VzWzBdID09PSBcIm1zcGFjZVwiKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0ID0gY2FsbGJhY2sobm9kZSwgcHJldi5ub2RlKTtcblxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIGlmIChwcmV2Lmluc2VydEFmdGVyKSB7XG4gICAgICAgIHByZXYuaW5zZXJ0QWZ0ZXIocmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGluc2VydCBhdCBmcm9udFxuICAgICAgICBub2Rlcy51bnNoaWZ0KHJlc3VsdCk7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcmV2Lm5vZGUgPSBub2RlO1xuXG4gICAgcHJldi5pbnNlcnRBZnRlciA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChuKSB7XG4gICAgICAgIG5vZGVzLnNwbGljZShpbmRleCArIDEsIDAsIG4pO1xuICAgICAgICBpKys7XG4gICAgICB9O1xuICAgIH0oaSk7XG4gIH1cblxuICBpZiAobmV4dCkge1xuICAgIG5vZGVzLnBvcCgpO1xuICB9XG59OyAvLyBDaGVjayBpZiBnaXZlbiBub2RlIGlzIGEgcGFydGlhbCBncm91cCwgaS5lLiwgZG9lcyBub3QgYWZmZWN0IHNwYWNpbmcgYXJvdW5kLlxuXG5cbnZhciBidWlsZEhUTUxfY2hlY2tQYXJ0aWFsR3JvdXAgPSBmdW5jdGlvbiBjaGVja1BhcnRpYWxHcm91cChub2RlKSB7XG4gIGlmIChub2RlIGluc3RhbmNlb2YgdHJlZV9Eb2N1bWVudEZyYWdtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBkb21UcmVlX0FuY2hvcikge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59OyAvLyBSZXR1cm4gdGhlIG91dGVybW9zdCBub2RlIG9mIGEgZG9tVHJlZS5cblxuXG52YXIgZ2V0T3V0ZXJtb3N0Tm9kZSA9IGZ1bmN0aW9uIGdldE91dGVybW9zdE5vZGUobm9kZSwgc2lkZSkge1xuICB2YXIgcGFydGlhbEdyb3VwID0gYnVpbGRIVE1MX2NoZWNrUGFydGlhbEdyb3VwKG5vZGUpO1xuXG4gIGlmIChwYXJ0aWFsR3JvdXApIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBwYXJ0aWFsR3JvdXAuY2hpbGRyZW47XG5cbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBpZiAoc2lkZSA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgIHJldHVybiBnZXRPdXRlcm1vc3ROb2RlKGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdLCBcInJpZ2h0XCIpO1xuICAgICAgfSBlbHNlIGlmIChzaWRlID09PSBcImxlZnRcIikge1xuICAgICAgICByZXR1cm4gZ2V0T3V0ZXJtb3N0Tm9kZShjaGlsZHJlblswXSwgXCJsZWZ0XCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub2RlO1xufTsgLy8gUmV0dXJuIG1hdGggYXRvbSBjbGFzcyAobWNsYXNzKSBvZiBhIGRvbVRyZWUuXG4vLyBJZiBgc2lkZWAgaXMgZ2l2ZW4sIGl0IHdpbGwgZ2V0IHRoZSB0eXBlIG9mIHRoZSBvdXRlcm1vc3Qgbm9kZSBhdCBnaXZlbiBzaWRlLlxuXG5cbnZhciBnZXRUeXBlT2ZEb21UcmVlID0gZnVuY3Rpb24gZ2V0VHlwZU9mRG9tVHJlZShub2RlLCBzaWRlKSB7XG4gIGlmICghbm9kZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHNpZGUpIHtcbiAgICBub2RlID0gZ2V0T3V0ZXJtb3N0Tm9kZShub2RlLCBzaWRlKTtcbiAgfSAvLyBUaGlzIG1ha2VzIGEgbG90IG9mIGFzc3VtcHRpb25zIGFzIHRvIHdoZXJlIHRoZSB0eXBlIG9mIGF0b21cbiAgLy8gYXBwZWFycy4gIFdlIHNob3VsZCBkbyBhIGJldHRlciBqb2Igb2YgZW5mb3JjaW5nIHRoaXMuXG5cblxuICByZXR1cm4gRG9tRW51bVtub2RlLmNsYXNzZXNbMF1dIHx8IG51bGw7XG59O1xudmFyIG1ha2VOdWxsRGVsaW1pdGVyID0gZnVuY3Rpb24gbWFrZU51bGxEZWxpbWl0ZXIob3B0aW9ucywgY2xhc3Nlcykge1xuICB2YXIgbW9yZUNsYXNzZXMgPSBbXCJudWxsZGVsaW1pdGVyXCJdLmNvbmNhdChvcHRpb25zLmJhc2VTaXppbmdDbGFzc2VzKCkpO1xuICByZXR1cm4gYnVpbGRIVE1MX21ha2VTcGFuKGNsYXNzZXMuY29uY2F0KG1vcmVDbGFzc2VzKSk7XG59O1xuLyoqXG4gKiBidWlsZEdyb3VwIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgZ3JvdXAgYW5kIGNhbGxzIHRoZSBjb3JyZWN0IGdyb3VwVHlwZVxuICogZnVuY3Rpb24gZm9yIGl0LiBJdCBhbHNvIGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIG9mIHNpemUgYW5kIHN0eWxlIGNoYW5nZXNcbiAqIGJldHdlZW4gcGFyZW50cyBhbmQgY2hpbGRyZW4uXG4gKi9cblxudmFyIGJ1aWxkSFRNTF9idWlsZEdyb3VwID0gZnVuY3Rpb24gYnVpbGRHcm91cChncm91cCwgb3B0aW9ucywgYmFzZU9wdGlvbnMpIHtcbiAgaWYgKCFncm91cCkge1xuICAgIHJldHVybiBidWlsZEhUTUxfbWFrZVNwYW4oKTtcbiAgfVxuXG4gIGlmIChfaHRtbEdyb3VwQnVpbGRlcnNbZ3JvdXAudHlwZV0pIHtcbiAgICAvLyBDYWxsIHRoZSBncm91cEJ1aWxkZXJzIGZ1bmN0aW9uXG4gICAgdmFyIGdyb3VwTm9kZSA9IF9odG1sR3JvdXBCdWlsZGVyc1tncm91cC50eXBlXShncm91cCwgb3B0aW9ucyk7IC8vIElmIHRoZSBzaXplIGNoYW5nZWQgYmV0d2VlbiB0aGUgcGFyZW50IGFuZCB0aGUgY3VycmVudCBncm91cCwgYWNjb3VudFxuICAgIC8vIGZvciB0aGF0IHNpemUgZGlmZmVyZW5jZS5cblxuICAgIGlmIChiYXNlT3B0aW9ucyAmJiBvcHRpb25zLnNpemUgIT09IGJhc2VPcHRpb25zLnNpemUpIHtcbiAgICAgIGdyb3VwTm9kZSA9IGJ1aWxkSFRNTF9tYWtlU3BhbihvcHRpb25zLnNpemluZ0NsYXNzZXMoYmFzZU9wdGlvbnMpLCBbZ3JvdXBOb2RlXSwgb3B0aW9ucyk7XG4gICAgICB2YXIgbXVsdGlwbGllciA9IG9wdGlvbnMuc2l6ZU11bHRpcGxpZXIgLyBiYXNlT3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgICAgIGdyb3VwTm9kZS5oZWlnaHQgKj0gbXVsdGlwbGllcjtcbiAgICAgIGdyb3VwTm9kZS5kZXB0aCAqPSBtdWx0aXBsaWVyO1xuICAgIH1cblxuICAgIHJldHVybiBncm91cE5vZGU7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiR290IGdyb3VwIG9mIHVua25vd24gdHlwZTogJ1wiICsgZ3JvdXAudHlwZSArIFwiJ1wiKTtcbiAgfVxufTtcbi8qKlxuICogQ29tYmluZSBhbiBhcnJheSBvZiBIVE1MIERPTSBub2RlcyAoZS5nLiwgdGhlIG91dHB1dCBvZiBgYnVpbGRFeHByZXNzaW9uYClcbiAqIGludG8gYW4gdW5icmVha2FibGUgSFRNTCBub2RlIG9mIGNsYXNzIC5iYXNlLCB3aXRoIHByb3BlciBzdHJ1dHMgdG9cbiAqIGd1YXJhbnRlZSBjb3JyZWN0IHZlcnRpY2FsIGV4dGVudC4gIGBidWlsZEhUTUxgIGNhbGxzIHRoaXMgcmVwZWF0ZWRseSB0b1xuICogbWFrZSB1cCB0aGUgZW50aXJlIGV4cHJlc3Npb24gYXMgYSBzZXF1ZW5jZSBvZiB1bmJyZWFrYWJsZSB1bml0cy5cbiAqL1xuXG5mdW5jdGlvbiBidWlsZEhUTUxVbmJyZWFrYWJsZShjaGlsZHJlbiwgb3B0aW9ucykge1xuICAvLyBDb21wdXRlIGhlaWdodCBhbmQgZGVwdGggb2YgdGhpcyBjaHVuay5cbiAgdmFyIGJvZHkgPSBidWlsZEhUTUxfbWFrZVNwYW4oW1wiYmFzZVwiXSwgY2hpbGRyZW4sIG9wdGlvbnMpOyAvLyBBZGQgc3RydXQsIHdoaWNoIGVuc3VyZXMgdGhhdCB0aGUgdG9wIG9mIHRoZSBIVE1MIGVsZW1lbnQgZmFsbHMgYXRcbiAgLy8gdGhlIGhlaWdodCBvZiB0aGUgZXhwcmVzc2lvbiwgYW5kIHRoZSBib3R0b20gb2YgdGhlIEhUTUwgZWxlbWVudFxuICAvLyBmYWxscyBhdCB0aGUgZGVwdGggb2YgdGhlIGV4cHJlc3Npb24uXG4gIC8vIFdlIHVzZWQgdG8gaGF2ZSBzZXBhcmF0ZSB0b3AgYW5kIGJvdHRvbSBzdHJ1dHMsIHdoZXJlIHRoZSBib3R0b20gc3RydXRcbiAgLy8gd291bGQgbGlrZSB0byB1c2UgYHZlcnRpY2FsLWFsaWduOiB0b3BgLCBidXQgaW4gSUUgOSB0aGlzIGxvd2VycyB0aGVcbiAgLy8gYmFzZWxpbmUgb2YgdGhlIGJveCB0byB0aGUgYm90dG9tIG9mIHRoaXMgc3RydXQgKGluc3RlYWQgb2Ygc3RheWluZyBpblxuICAvLyB0aGUgbm9ybWFsIHBsYWNlKSBzbyB3ZSB1c2UgYW4gYWJzb2x1dGUgdmFsdWUgZm9yIHZlcnRpY2FsLWFsaWduIGluc3RlYWQuXG5cbiAgdmFyIHN0cnV0ID0gYnVpbGRIVE1MX21ha2VTcGFuKFtcInN0cnV0XCJdKTtcbiAgc3RydXQuc3R5bGUuaGVpZ2h0ID0gYm9keS5oZWlnaHQgKyBib2R5LmRlcHRoICsgXCJlbVwiO1xuICBzdHJ1dC5zdHlsZS52ZXJ0aWNhbEFsaWduID0gLWJvZHkuZGVwdGggKyBcImVtXCI7XG4gIGJvZHkuY2hpbGRyZW4udW5zaGlmdChzdHJ1dCk7XG4gIHJldHVybiBib2R5O1xufVxuLyoqXG4gKiBUYWtlIGFuIGVudGlyZSBwYXJzZSB0cmVlLCBhbmQgYnVpbGQgaXQgaW50byBhbiBhcHByb3ByaWF0ZSBzZXQgb2YgSFRNTFxuICogbm9kZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBidWlsZEhUTUwodHJlZSwgb3B0aW9ucykge1xuICAvLyBTdHJpcCBvZmYgb3V0ZXIgdGFnIHdyYXBwZXIgZm9yIHByb2Nlc3NpbmcgYmVsb3cuXG4gIHZhciB0YWcgPSBudWxsO1xuXG4gIGlmICh0cmVlLmxlbmd0aCA9PT0gMSAmJiB0cmVlWzBdLnR5cGUgPT09IFwidGFnXCIpIHtcbiAgICB0YWcgPSB0cmVlWzBdLnRhZztcbiAgICB0cmVlID0gdHJlZVswXS5ib2R5O1xuICB9IC8vIEJ1aWxkIHRoZSBleHByZXNzaW9uIGNvbnRhaW5lZCBpbiB0aGUgdHJlZVxuXG5cbiAgdmFyIGV4cHJlc3Npb24gPSBidWlsZEhUTUxfYnVpbGRFeHByZXNzaW9uKHRyZWUsIG9wdGlvbnMsIHRydWUpO1xuICB2YXIgY2hpbGRyZW4gPSBbXTsgLy8gQ3JlYXRlIG9uZSBiYXNlIG5vZGUgZm9yIGVhY2ggY2h1bmsgYmV0d2VlbiBwb3RlbnRpYWwgbGluZSBicmVha3MuXG4gIC8vIFRoZSBUZVhCb29rIFtwLjE3M10gc2F5cyBcIkEgZm9ybXVsYSB3aWxsIGJlIGJyb2tlbiBvbmx5IGFmdGVyIGFcbiAgLy8gcmVsYXRpb24gc3ltYm9sIGxpa2UgJD0kIG9yICQ8JCBvciAkXFxyaWdodGFycm93JCwgb3IgYWZ0ZXIgYSBiaW5hcnlcbiAgLy8gb3BlcmF0aW9uIHN5bWJvbCBsaWtlICQrJCBvciAkLSQgb3IgJFxcdGltZXMkLCB3aGVyZSB0aGUgcmVsYXRpb24gb3JcbiAgLy8gYmluYXJ5IG9wZXJhdGlvbiBpcyBvbiB0aGUgYGBvdXRlciBsZXZlbCcnIG9mIHRoZSBmb3JtdWxhIChpLmUuLCBub3RcbiAgLy8gZW5jbG9zZWQgaW4gey4uLn0gYW5kIG5vdCBwYXJ0IG9mIGFuIFxcb3ZlciBjb25zdHJ1Y3Rpb24pLlwiXG5cbiAgdmFyIHBhcnRzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9uLmxlbmd0aDsgaSsrKSB7XG4gICAgcGFydHMucHVzaChleHByZXNzaW9uW2ldKTtcblxuICAgIGlmIChleHByZXNzaW9uW2ldLmhhc0NsYXNzKFwibWJpblwiKSB8fCBleHByZXNzaW9uW2ldLmhhc0NsYXNzKFwibXJlbFwiKSB8fCBleHByZXNzaW9uW2ldLmhhc0NsYXNzKFwiYWxsb3dicmVha1wiKSkge1xuICAgICAgLy8gUHV0IGFueSBwb3N0LW9wZXJhdG9yIGdsdWUgb24gc2FtZSBsaW5lIGFzIG9wZXJhdG9yLlxuICAgICAgLy8gV2F0Y2ggZm9yIFxcbm9icmVhayBhbG9uZyB0aGUgd2F5LCBhbmQgc3RvcCBhdCBcXG5ld2xpbmUuXG4gICAgICB2YXIgbm9icmVhayA9IGZhbHNlO1xuXG4gICAgICB3aGlsZSAoaSA8IGV4cHJlc3Npb24ubGVuZ3RoIC0gMSAmJiBleHByZXNzaW9uW2kgKyAxXS5oYXNDbGFzcyhcIm1zcGFjZVwiKSAmJiAhZXhwcmVzc2lvbltpICsgMV0uaGFzQ2xhc3MoXCJuZXdsaW5lXCIpKSB7XG4gICAgICAgIGkrKztcbiAgICAgICAgcGFydHMucHVzaChleHByZXNzaW9uW2ldKTtcblxuICAgICAgICBpZiAoZXhwcmVzc2lvbltpXS5oYXNDbGFzcyhcIm5vYnJlYWtcIikpIHtcbiAgICAgICAgICBub2JyZWFrID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBEb24ndCBhbGxvdyBicmVhayBpZiBcXG5vYnJlYWsgYW1vbmcgdGhlIHBvc3Qtb3BlcmF0b3IgZ2x1ZS5cblxuXG4gICAgICBpZiAoIW5vYnJlYWspIHtcbiAgICAgICAgY2hpbGRyZW4ucHVzaChidWlsZEhUTUxVbmJyZWFrYWJsZShwYXJ0cywgb3B0aW9ucykpO1xuICAgICAgICBwYXJ0cyA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbltpXS5oYXNDbGFzcyhcIm5ld2xpbmVcIikpIHtcbiAgICAgIC8vIFdyaXRlIHRoZSBsaW5lIGV4Y2VwdCB0aGUgbmV3bGluZVxuICAgICAgcGFydHMucG9wKCk7XG5cbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNoaWxkcmVuLnB1c2goYnVpbGRIVE1MVW5icmVha2FibGUocGFydHMsIG9wdGlvbnMpKTtcbiAgICAgICAgcGFydHMgPSBbXTtcbiAgICAgIH0gLy8gUHV0IHRoZSBuZXdsaW5lIGF0IHRoZSB0b3AgbGV2ZWxcblxuXG4gICAgICBjaGlsZHJlbi5wdXNoKGV4cHJlc3Npb25baV0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgY2hpbGRyZW4ucHVzaChidWlsZEhUTUxVbmJyZWFrYWJsZShwYXJ0cywgb3B0aW9ucykpO1xuICB9IC8vIE5vdywgaWYgdGhlcmUgd2FzIGEgdGFnLCBidWlsZCBpdCB0b28gYW5kIGFwcGVuZCBpdCBhcyBhIGZpbmFsIGNoaWxkLlxuXG5cbiAgdmFyIHRhZ0NoaWxkO1xuXG4gIGlmICh0YWcpIHtcbiAgICB0YWdDaGlsZCA9IGJ1aWxkSFRNTFVuYnJlYWthYmxlKGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24odGFnLCBvcHRpb25zLCB0cnVlKSk7XG4gICAgdGFnQ2hpbGQuY2xhc3NlcyA9IFtcInRhZ1wiXTtcbiAgICBjaGlsZHJlbi5wdXNoKHRhZ0NoaWxkKTtcbiAgfVxuXG4gIHZhciBodG1sTm9kZSA9IGJ1aWxkSFRNTF9tYWtlU3BhbihbXCJrYXRleC1odG1sXCJdLCBjaGlsZHJlbik7XG4gIGh0bWxOb2RlLnNldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIsIFwidHJ1ZVwiKTsgLy8gQWRqdXN0IHRoZSBzdHJ1dCBvZiB0aGUgdGFnIHRvIGJlIHRoZSBtYXhpbXVtIGhlaWdodCBvZiBhbGwgY2hpbGRyZW5cbiAgLy8gKHRoZSBoZWlnaHQgb2YgdGhlIGVuY2xvc2luZyBodG1sTm9kZSkgZm9yIHByb3BlciB2ZXJ0aWNhbCBhbGlnbm1lbnQuXG5cbiAgaWYgKHRhZ0NoaWxkKSB7XG4gICAgdmFyIHN0cnV0ID0gdGFnQ2hpbGQuY2hpbGRyZW5bMF07XG4gICAgc3RydXQuc3R5bGUuaGVpZ2h0ID0gaHRtbE5vZGUuaGVpZ2h0ICsgaHRtbE5vZGUuZGVwdGggKyBcImVtXCI7XG4gICAgc3RydXQuc3R5bGUudmVydGljYWxBbGlnbiA9IC1odG1sTm9kZS5kZXB0aCArIFwiZW1cIjtcbiAgfVxuXG4gIHJldHVybiBodG1sTm9kZTtcbn1cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL21hdGhNTFRyZWUuanNcbi8qKlxuICogVGhlc2Ugb2JqZWN0cyBzdG9yZSBkYXRhIGFib3V0IE1hdGhNTCBub2Rlcy4gVGhpcyBpcyB0aGUgTWF0aE1MIGVxdWl2YWxlbnRcbiAqIG9mIHRoZSB0eXBlcyBpbiBkb21UcmVlLmpzLiBTaW5jZSBNYXRoTUwgaGFuZGxlcyBpdHMgb3duIHJlbmRlcmluZywgYW5kXG4gKiBzaW5jZSB3ZSdyZSBtYWlubHkgdXNpbmcgTWF0aE1MIHRvIGltcHJvdmUgYWNjZXNzaWJpbGl0eSwgd2UgZG9uJ3QgbWFuYWdlXG4gKiBhbnkgb2YgdGhlIHN0eWxpbmcgc3RhdGUgdGhhdCB0aGUgcGxhaW4gRE9NIG5vZGVzIGRvLlxuICpcbiAqIFRoZSBgdG9Ob2RlYCBhbmQgYHRvTWFya3VwYCBmdW5jdGlvbnMgd29yayBzaW1sYXJseSB0byBob3cgdGhleSBkbyBpblxuICogZG9tVHJlZS5qcywgY3JlYXRpbmcgbmFtZXNwYWNlZCBET00gbm9kZXMgYW5kIEhUTUwgdGV4dCBtYXJrdXAgcmVzcGVjdGl2ZWx5LlxuICovXG5cblxuZnVuY3Rpb24gbmV3RG9jdW1lbnRGcmFnbWVudChjaGlsZHJlbikge1xuICByZXR1cm4gbmV3IHRyZWVfRG9jdW1lbnRGcmFnbWVudChjaGlsZHJlbik7XG59XG4vKipcbiAqIFRoaXMgbm9kZSByZXByZXNlbnRzIGEgZ2VuZXJhbCBwdXJwb3NlIE1hdGhNTCBub2RlIG9mIGFueSB0eXBlLiBUaGVcbiAqIGNvbnN0cnVjdG9yIHJlcXVpcmVzIHRoZSB0eXBlIG9mIG5vZGUgdG8gY3JlYXRlIChmb3IgZXhhbXBsZSwgYFwibW9cImAgb3JcbiAqIGBcIm1zcGFjZVwiYCwgY29ycmVzcG9uZGluZyB0byBgPG1vPmAgYW5kIGA8bXNwYWNlPmAgdGFncykuXG4gKi9cblxudmFyIG1hdGhNTFRyZWVfTWF0aE5vZGUgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBNYXRoTm9kZSh0eXBlLCBjaGlsZHJlbikge1xuICAgIHRoaXMudHlwZSA9IHZvaWQgMDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSB2b2lkIDA7XG4gICAgdGhpcy5jaGlsZHJlbiA9IHZvaWQgMDtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHt9O1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbiB8fCBbXTtcbiAgfVxuICAvKipcbiAgICogU2V0cyBhbiBhdHRyaWJ1dGUgb24gYSBNYXRoTUwgbm9kZS4gTWF0aE1MIGRlcGVuZHMgb24gYXR0cmlidXRlcyB0byBjb252ZXkgYVxuICAgKiBzZW1hbnRpYyBjb250ZW50LCBzbyB0aGlzIGlzIHVzZWQgaGVhdmlseS5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gTWF0aE5vZGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbiBzZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpIHtcbiAgICB0aGlzLmF0dHJpYnV0ZXNbbmFtZV0gPSB2YWx1ZTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBhbiBhdHRyaWJ1dGUgb24gYSBNYXRoTUwgbm9kZS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZ2V0QXR0cmlidXRlID0gZnVuY3Rpb24gZ2V0QXR0cmlidXRlKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW25hbWVdO1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgbWF0aCBub2RlIGludG8gYSBNYXRoTUwtbmFtZXNwYWNlZCBET00gZWxlbWVudC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8udG9Ob2RlID0gZnVuY3Rpb24gdG9Ob2RlKCkge1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiLCB0aGlzLnR5cGUpO1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyLCB0aGlzLmF0dHJpYnV0ZXNbYXR0cl0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZS5hcHBlbmRDaGlsZCh0aGlzLmNoaWxkcmVuW2ldLnRvTm9kZSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIG1hdGggbm9kZSBpbnRvIGFuIEhUTUwgbWFya3VwIHN0cmluZy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8udG9NYXJrdXAgPSBmdW5jdGlvbiB0b01hcmt1cCgpIHtcbiAgICB2YXIgbWFya3VwID0gXCI8XCIgKyB0aGlzLnR5cGU7IC8vIEFkZCB0aGUgYXR0cmlidXRlc1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBtYXJrdXAgKz0gXCIgXCIgKyBhdHRyICsgXCI9XFxcIlwiO1xuICAgICAgICBtYXJrdXAgKz0gdXRpbHMuZXNjYXBlKHRoaXMuYXR0cmlidXRlc1thdHRyXSk7XG4gICAgICAgIG1hcmt1cCArPSBcIlxcXCJcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtYXJrdXAgKz0gXCI+XCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1hcmt1cCArPSB0aGlzLmNoaWxkcmVuW2ldLnRvTWFya3VwKCk7XG4gICAgfVxuXG4gICAgbWFya3VwICs9IFwiPC9cIiArIHRoaXMudHlwZSArIFwiPlwiO1xuICAgIHJldHVybiBtYXJrdXA7XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBtYXRoIG5vZGUgaW50byBhIHN0cmluZywgc2ltaWxhciB0byBpbm5lclRleHQsIGJ1dCBlc2NhcGVkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by50b1RleHQgPSBmdW5jdGlvbiB0b1RleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgcmV0dXJuIGNoaWxkLnRvVGV4dCgpO1xuICAgIH0pLmpvaW4oXCJcIik7XG4gIH07XG5cbiAgcmV0dXJuIE1hdGhOb2RlO1xufSgpO1xuLyoqXG4gKiBUaGlzIG5vZGUgcmVwcmVzZW50cyBhIHBpZWNlIG9mIHRleHQuXG4gKi9cblxudmFyIG1hdGhNTFRyZWVfVGV4dE5vZGUgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBUZXh0Tm9kZSh0ZXh0KSB7XG4gICAgdGhpcy50ZXh0ID0gdm9pZCAwO1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSB0ZXh0IG5vZGUgaW50byBhIERPTSB0ZXh0IG5vZGUuXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90bzIgPSBUZXh0Tm9kZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvMi50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMudGV4dCk7XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSB0ZXh0IG5vZGUgaW50byBlc2NhcGVkIEhUTUwgbWFya3VwXG4gICAqIChyZXByZXNlbnRpbmcgdGhlIHRleHQgaXRzZWxmKS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8yLnRvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAoKSB7XG4gICAgcmV0dXJuIHV0aWxzLmVzY2FwZSh0aGlzLnRvVGV4dCgpKTtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIHRleHQgbm9kZSBpbnRvIGEgc3RyaW5nXG4gICAqIChyZXByZXNlbnRpbmcgdGhlIHRleHQgaXRlc2VsZikuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvMi50b1RleHQgPSBmdW5jdGlvbiB0b1RleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dDtcbiAgfTtcblxuICByZXR1cm4gVGV4dE5vZGU7XG59KCk7XG4vKipcbiAqIFRoaXMgbm9kZSByZXByZXNlbnRzIGEgc3BhY2UsIGJ1dCBtYXkgcmVuZGVyIGFzIDxtc3BhY2UuLi4vPiBvciBhcyB0ZXh0LFxuICogZGVwZW5kaW5nIG9uIHRoZSB3aWR0aC5cbiAqL1xuXG52YXIgU3BhY2VOb2RlID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIFNwYWNlIG5vZGUgd2l0aCB3aWR0aCBnaXZlbiBpbiBDU1MgZW1zLlxuICAgKi9cbiAgZnVuY3Rpb24gU3BhY2VOb2RlKHdpZHRoKSB7XG4gICAgdGhpcy53aWR0aCA9IHZvaWQgMDtcbiAgICB0aGlzLmNoYXJhY3RlciA9IHZvaWQgMDtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7IC8vIFNlZSBodHRwczovL3d3dy53My5vcmcvVFIvMjAwMC9XRC1NYXRoTUwyLTIwMDAwMzI4L2NoYXB0ZXI2Lmh0bWxcbiAgICAvLyBmb3IgYSB0YWJsZSBvZiBzcGFjZS1saWtlIGNoYXJhY3RlcnMuICBXZSB1c2UgVW5pY29kZVxuICAgIC8vIHJlcHJlc2VudGF0aW9ucyBpbnN0ZWFkIG9mICZMb25nTmFtZXM7IGFzIGl0J3Mgbm90IGNsZWFyIGhvdyB0b1xuICAgIC8vIG1ha2UgdGhlIGxhdHRlciB2aWEgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUuXG5cbiAgICBpZiAod2lkdGggPj0gMC4wNTU1NSAmJiB3aWR0aCA8PSAwLjA1NTU2KSB7XG4gICAgICB0aGlzLmNoYXJhY3RlciA9IFwiXFx1MjAwQVwiOyAvLyAmVmVyeVRoaW5TcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IDAuMTY2NiAmJiB3aWR0aCA8PSAwLjE2NjcpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gXCJcXHUyMDA5XCI7IC8vICZUaGluU3BhY2U7XG4gICAgfSBlbHNlIGlmICh3aWR0aCA+PSAwLjIyMjIgJiYgd2lkdGggPD0gMC4yMjIzKSB7XG4gICAgICB0aGlzLmNoYXJhY3RlciA9IFwiXFx1MjAwNVwiOyAvLyAmTWVkaXVtU3BhY2U7XG4gICAgfSBlbHNlIGlmICh3aWR0aCA+PSAwLjI3NzcgJiYgd2lkdGggPD0gMC4yNzc4KSB7XG4gICAgICB0aGlzLmNoYXJhY3RlciA9IFwiXFx1MjAwNVxcdTIwMEFcIjsgLy8gJlRoaWNrU3BhY2U7XG4gICAgfSBlbHNlIGlmICh3aWR0aCA+PSAtMC4wNTU1NiAmJiB3aWR0aCA8PSAtMC4wNTU1NSkge1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBcIlxcdTIwMEFcXHUyMDYzXCI7IC8vICZOZWdhdGl2ZVZlcnlUaGluU3BhY2U7XG4gICAgfSBlbHNlIGlmICh3aWR0aCA+PSAtMC4xNjY3ICYmIHdpZHRoIDw9IC0wLjE2NjYpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gXCJcXHUyMDA5XFx1MjA2M1wiOyAvLyAmTmVnYXRpdmVUaGluU3BhY2U7XG4gICAgfSBlbHNlIGlmICh3aWR0aCA+PSAtMC4yMjIzICYmIHdpZHRoIDw9IC0wLjIyMjIpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gXCJcXHUyMDVGXFx1MjA2M1wiOyAvLyAmTmVnYXRpdmVNZWRpdW1TcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IC0wLjI3NzggJiYgd2lkdGggPD0gLTAuMjc3Nykge1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBcIlxcdTIwMDVcXHUyMDYzXCI7IC8vICZOZWdhdGl2ZVRoaWNrU3BhY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBtYXRoIG5vZGUgaW50byBhIE1hdGhNTC1uYW1lc3BhY2VkIERPTSBlbGVtZW50LlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8zID0gU3BhY2VOb2RlLnByb3RvdHlwZTtcblxuICBfcHJvdG8zLnRvTm9kZSA9IGZ1bmN0aW9uIHRvTm9kZSgpIHtcbiAgICBpZiAodGhpcy5jaGFyYWN0ZXIpIHtcbiAgICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLmNoYXJhY3Rlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiLCBcIm1zcGFjZVwiKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgdGhpcy53aWR0aCArIFwiZW1cIik7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBtYXRoIG5vZGUgaW50byBhbiBIVE1MIG1hcmt1cCBzdHJpbmcuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvMy50b01hcmt1cCA9IGZ1bmN0aW9uIHRvTWFya3VwKCkge1xuICAgIGlmICh0aGlzLmNoYXJhY3Rlcikge1xuICAgICAgcmV0dXJuIFwiPG10ZXh0PlwiICsgdGhpcy5jaGFyYWN0ZXIgKyBcIjwvbXRleHQ+XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIjxtc3BhY2Ugd2lkdGg9XFxcIlwiICsgdGhpcy53aWR0aCArIFwiZW1cXFwiLz5cIjtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBtYXRoIG5vZGUgaW50byBhIHN0cmluZywgc2ltaWxhciB0byBpbm5lclRleHQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvMy50b1RleHQgPSBmdW5jdGlvbiB0b1RleHQoKSB7XG4gICAgaWYgKHRoaXMuY2hhcmFjdGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGFyYWN0ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIiBcIjtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFNwYWNlTm9kZTtcbn0oKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbWF0aE1MVHJlZSA9ICh7XG4gIE1hdGhOb2RlOiBtYXRoTUxUcmVlX01hdGhOb2RlLFxuICBUZXh0Tm9kZTogbWF0aE1MVHJlZV9UZXh0Tm9kZSxcbiAgU3BhY2VOb2RlOiBTcGFjZU5vZGUsXG4gIG5ld0RvY3VtZW50RnJhZ21lbnQ6IG5ld0RvY3VtZW50RnJhZ21lbnRcbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvYnVpbGRNYXRoTUwuanNcbi8qKlxuICogVGhpcyBmaWxlIGNvbnZlcnRzIGEgcGFyc2UgdHJlZSBpbnRvIGEgY29vcmVzcG9uZGluZyBNYXRoTUwgdHJlZS4gVGhlIG1haW5cbiAqIGVudHJ5IHBvaW50IGlzIHRoZSBgYnVpbGRNYXRoTUxgIGZ1bmN0aW9uLCB3aGljaCB0YWtlcyBhIHBhcnNlIHRyZWUgZnJvbSB0aGVcbiAqIHBhcnNlci5cbiAqL1xuXG5cblxuXG5cblxuXG5cblxuLyoqXG4gKiBUYWtlcyBhIHN5bWJvbCBhbmQgY29udmVydHMgaXQgaW50byBhIE1hdGhNTCB0ZXh0IG5vZGUgYWZ0ZXIgcGVyZm9ybWluZ1xuICogb3B0aW9uYWwgcmVwbGFjZW1lbnQgZnJvbSBzeW1ib2xzLmpzLlxuICovXG52YXIgYnVpbGRNYXRoTUxfbWFrZVRleHQgPSBmdW5jdGlvbiBtYWtlVGV4dCh0ZXh0LCBtb2RlLCBvcHRpb25zKSB7XG4gIGlmIChzcmNfc3ltYm9sc1ttb2RlXVt0ZXh0XSAmJiBzcmNfc3ltYm9sc1ttb2RlXVt0ZXh0XS5yZXBsYWNlICYmIHRleHQuY2hhckNvZGVBdCgwKSAhPT0gMHhEODM1ICYmICEobGlnYXR1cmVzLmhhc093blByb3BlcnR5KHRleHQpICYmIG9wdGlvbnMgJiYgKG9wdGlvbnMuZm9udEZhbWlseSAmJiBvcHRpb25zLmZvbnRGYW1pbHkuc3Vic3RyKDQsIDIpID09PSBcInR0XCIgfHwgb3B0aW9ucy5mb250ICYmIG9wdGlvbnMuZm9udC5zdWJzdHIoNCwgMikgPT09IFwidHRcIikpKSB7XG4gICAgdGV4dCA9IHNyY19zeW1ib2xzW21vZGVdW3RleHRdLnJlcGxhY2U7XG4gIH1cblxuICByZXR1cm4gbmV3IG1hdGhNTFRyZWUuVGV4dE5vZGUodGV4dCk7XG59O1xuLyoqXG4gKiBXcmFwIHRoZSBnaXZlbiBhcnJheSBvZiBub2RlcyBpbiBhbiA8bXJvdz4gbm9kZSBpZiBuZWVkZWQsIGkuZS4sXG4gKiB1bmxlc3MgdGhlIGFycmF5IGhhcyBsZW5ndGggMS4gIEFsd2F5cyByZXR1cm5zIGEgc2luZ2xlIG5vZGUuXG4gKi9cblxudmFyIGJ1aWxkTWF0aE1MX21ha2VSb3cgPSBmdW5jdGlvbiBtYWtlUm93KGJvZHkpIHtcbiAgaWYgKGJvZHkubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGJvZHlbMF07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXJvd1wiLCBib2R5KTtcbiAgfVxufTtcbi8qKlxuICogUmV0dXJucyB0aGUgbWF0aCB2YXJpYW50IGFzIGEgc3RyaW5nIG9yIG51bGwgaWYgbm9uZSBpcyByZXF1aXJlZC5cbiAqL1xuXG52YXIgYnVpbGRNYXRoTUxfZ2V0VmFyaWFudCA9IGZ1bmN0aW9uIGdldFZhcmlhbnQoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgLy8gSGFuZGxlIFxcdGV4dC4uLiBmb250IHNwZWNpZmllcnMgYXMgYmVzdCB3ZSBjYW4uXG4gIC8vIE1hdGhNTCBoYXMgYSBsaW1pdGVkIGxpc3Qgb2YgYWxsb3dhYmxlIG1hdGh2YXJpYW50IHNwZWNpZmllcnM7IHNlZVxuICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvTWF0aE1MMy9jaGFwdGVyMy5odG1sI3ByZXNtLmNvbW1hdHRcbiAgaWYgKG9wdGlvbnMuZm9udEZhbWlseSA9PT0gXCJ0ZXh0dHRcIikge1xuICAgIHJldHVybiBcIm1vbm9zcGFjZVwiO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9udEZhbWlseSA9PT0gXCJ0ZXh0c2ZcIikge1xuICAgIGlmIChvcHRpb25zLmZvbnRTaGFwZSA9PT0gXCJ0ZXh0aXRcIiAmJiBvcHRpb25zLmZvbnRXZWlnaHQgPT09IFwidGV4dGJmXCIpIHtcbiAgICAgIHJldHVybiBcInNhbnMtc2VyaWYtYm9sZC1pdGFsaWNcIjtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9udFNoYXBlID09PSBcInRleHRpdFwiKSB7XG4gICAgICByZXR1cm4gXCJzYW5zLXNlcmlmLWl0YWxpY1wiO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5mb250V2VpZ2h0ID09PSBcInRleHRiZlwiKSB7XG4gICAgICByZXR1cm4gXCJib2xkLXNhbnMtc2VyaWZcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwic2Fucy1zZXJpZlwiO1xuICAgIH1cbiAgfSBlbHNlIGlmIChvcHRpb25zLmZvbnRTaGFwZSA9PT0gXCJ0ZXh0aXRcIiAmJiBvcHRpb25zLmZvbnRXZWlnaHQgPT09IFwidGV4dGJmXCIpIHtcbiAgICByZXR1cm4gXCJib2xkLWl0YWxpY1wiO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9udFNoYXBlID09PSBcInRleHRpdFwiKSB7XG4gICAgcmV0dXJuIFwiaXRhbGljXCI7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5mb250V2VpZ2h0ID09PSBcInRleHRiZlwiKSB7XG4gICAgcmV0dXJuIFwiYm9sZFwiO1xuICB9XG5cbiAgdmFyIGZvbnQgPSBvcHRpb25zLmZvbnQ7XG5cbiAgaWYgKCFmb250IHx8IGZvbnQgPT09IFwibWF0aG5vcm1hbFwiKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbW9kZSA9IGdyb3VwLm1vZGU7XG5cbiAgaWYgKGZvbnQgPT09IFwibWF0aGl0XCIpIHtcbiAgICByZXR1cm4gXCJpdGFsaWNcIjtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcImJvbGRzeW1ib2xcIikge1xuICAgIHJldHVybiBcImJvbGQtaXRhbGljXCI7XG4gIH0gZWxzZSBpZiAoZm9udCA9PT0gXCJtYXRoYmZcIikge1xuICAgIHJldHVybiBcImJvbGRcIjtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcIm1hdGhiYlwiKSB7XG4gICAgcmV0dXJuIFwiZG91YmxlLXN0cnVja1wiO1xuICB9IGVsc2UgaWYgKGZvbnQgPT09IFwibWF0aGZyYWtcIikge1xuICAgIHJldHVybiBcImZyYWt0dXJcIjtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcIm1hdGhzY3JcIiB8fCBmb250ID09PSBcIm1hdGhjYWxcIikge1xuICAgIC8vIE1hdGhNTCBtYWtlcyBubyBkaXN0aW5jdGlvbiBiZXR3ZWVuIHNjcmlwdCBhbmQgY2FsaWdyYWhwaWNcbiAgICByZXR1cm4gXCJzY3JpcHRcIjtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcIm1hdGhzZlwiKSB7XG4gICAgcmV0dXJuIFwic2Fucy1zZXJpZlwiO1xuICB9IGVsc2UgaWYgKGZvbnQgPT09IFwibWF0aHR0XCIpIHtcbiAgICByZXR1cm4gXCJtb25vc3BhY2VcIjtcbiAgfVxuXG4gIHZhciB0ZXh0ID0gZ3JvdXAudGV4dDtcblxuICBpZiAodXRpbHMuY29udGFpbnMoW1wiXFxcXGltYXRoXCIsIFwiXFxcXGptYXRoXCJdLCB0ZXh0KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHNyY19zeW1ib2xzW21vZGVdW3RleHRdICYmIHNyY19zeW1ib2xzW21vZGVdW3RleHRdLnJlcGxhY2UpIHtcbiAgICB0ZXh0ID0gc3JjX3N5bWJvbHNbbW9kZV1bdGV4dF0ucmVwbGFjZTtcbiAgfVxuXG4gIHZhciBmb250TmFtZSA9IGJ1aWxkQ29tbW9uLmZvbnRNYXBbZm9udF0uZm9udE5hbWU7XG5cbiAgaWYgKGdldENoYXJhY3Rlck1ldHJpY3ModGV4dCwgZm9udE5hbWUsIG1vZGUpKSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLmZvbnRNYXBbZm9udF0udmFyaWFudDtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcbi8qKlxuICogVGFrZXMgYSBsaXN0IG9mIG5vZGVzLCBidWlsZHMgdGhlbSwgYW5kIHJldHVybnMgYSBsaXN0IG9mIHRoZSBnZW5lcmF0ZWRcbiAqIE1hdGhNTCBub2Rlcy4gIEFsc28gY29tYmluZSBjb25zZWN1dGl2ZSA8bXRleHQ+IG91dHB1dHMgaW50byBhIHNpbmdsZVxuICogPG10ZXh0PiB0YWcuXG4gKi9cblxudmFyIGJ1aWxkTWF0aE1MX2J1aWxkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIGJ1aWxkRXhwcmVzc2lvbihleHByZXNzaW9uLCBvcHRpb25zLCBpc09yZGdyb3VwKSB7XG4gIGlmIChleHByZXNzaW9uLmxlbmd0aCA9PT0gMSkge1xuICAgIHZhciBncm91cCA9IGJ1aWxkTWF0aE1MX2J1aWxkR3JvdXAoZXhwcmVzc2lvblswXSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoaXNPcmRncm91cCAmJiBncm91cCBpbnN0YW5jZW9mIG1hdGhNTFRyZWVfTWF0aE5vZGUgJiYgZ3JvdXAudHlwZSA9PT0gXCJtb1wiKSB7XG4gICAgICAvLyBXaGVuIFRlWCB3cml0ZXJzIHdhbnQgdG8gc3VwcHJlc3Mgc3BhY2luZyBvbiBhbiBvcGVyYXRvcixcbiAgICAgIC8vIHRoZXkgb2Z0ZW4gcHV0IHRoZSBvcGVyYXRvciBieSBpdHNlbGYgaW5zaWRlIGJyYWNlcy5cbiAgICAgIGdyb3VwLnNldEF0dHJpYnV0ZShcImxzcGFjZVwiLCBcIjBlbVwiKTtcbiAgICAgIGdyb3VwLnNldEF0dHJpYnV0ZShcInJzcGFjZVwiLCBcIjBlbVwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gW2dyb3VwXTtcbiAgfVxuXG4gIHZhciBncm91cHMgPSBbXTtcbiAgdmFyIGxhc3RHcm91cDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cHJlc3Npb24ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgX2dyb3VwID0gYnVpbGRNYXRoTUxfYnVpbGRHcm91cChleHByZXNzaW9uW2ldLCBvcHRpb25zKTtcblxuICAgIGlmIChfZ3JvdXAgaW5zdGFuY2VvZiBtYXRoTUxUcmVlX01hdGhOb2RlICYmIGxhc3RHcm91cCBpbnN0YW5jZW9mIG1hdGhNTFRyZWVfTWF0aE5vZGUpIHtcbiAgICAgIC8vIENvbmNhdGVuYXRlIGFkamFjZW50IDxtdGV4dD5zXG4gICAgICBpZiAoX2dyb3VwLnR5cGUgPT09ICdtdGV4dCcgJiYgbGFzdEdyb3VwLnR5cGUgPT09ICdtdGV4dCcgJiYgX2dyb3VwLmdldEF0dHJpYnV0ZSgnbWF0aHZhcmlhbnQnKSA9PT0gbGFzdEdyb3VwLmdldEF0dHJpYnV0ZSgnbWF0aHZhcmlhbnQnKSkge1xuICAgICAgICB2YXIgX2xhc3RHcm91cCRjaGlsZHJlbjtcblxuICAgICAgICAoX2xhc3RHcm91cCRjaGlsZHJlbiA9IGxhc3RHcm91cC5jaGlsZHJlbikucHVzaC5hcHBseShfbGFzdEdyb3VwJGNoaWxkcmVuLCBfZ3JvdXAuY2hpbGRyZW4pO1xuXG4gICAgICAgIGNvbnRpbnVlOyAvLyBDb25jYXRlbmF0ZSBhZGphY2VudCA8bW4+c1xuICAgICAgfSBlbHNlIGlmIChfZ3JvdXAudHlwZSA9PT0gJ21uJyAmJiBsYXN0R3JvdXAudHlwZSA9PT0gJ21uJykge1xuICAgICAgICB2YXIgX2xhc3RHcm91cCRjaGlsZHJlbjI7XG5cbiAgICAgICAgKF9sYXN0R3JvdXAkY2hpbGRyZW4yID0gbGFzdEdyb3VwLmNoaWxkcmVuKS5wdXNoLmFwcGx5KF9sYXN0R3JvdXAkY2hpbGRyZW4yLCBfZ3JvdXAuY2hpbGRyZW4pO1xuXG4gICAgICAgIGNvbnRpbnVlOyAvLyBDb25jYXRlbmF0ZSA8bW4+Li4uPC9tbj4gZm9sbG93ZWQgYnkgPG1pPi48L21pPlxuICAgICAgfSBlbHNlIGlmIChfZ3JvdXAudHlwZSA9PT0gJ21pJyAmJiBfZ3JvdXAuY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmIGxhc3RHcm91cC50eXBlID09PSAnbW4nKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IF9ncm91cC5jaGlsZHJlblswXTtcblxuICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBtYXRoTUxUcmVlX1RleHROb2RlICYmIGNoaWxkLnRleHQgPT09ICcuJykge1xuICAgICAgICAgIHZhciBfbGFzdEdyb3VwJGNoaWxkcmVuMztcblxuICAgICAgICAgIChfbGFzdEdyb3VwJGNoaWxkcmVuMyA9IGxhc3RHcm91cC5jaGlsZHJlbikucHVzaC5hcHBseShfbGFzdEdyb3VwJGNoaWxkcmVuMywgX2dyb3VwLmNoaWxkcmVuKTtcblxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGxhc3RHcm91cC50eXBlID09PSAnbWknICYmIGxhc3RHcm91cC5jaGlsZHJlbi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdmFyIGxhc3RDaGlsZCA9IGxhc3RHcm91cC5jaGlsZHJlblswXTtcblxuICAgICAgICBpZiAobGFzdENoaWxkIGluc3RhbmNlb2YgbWF0aE1MVHJlZV9UZXh0Tm9kZSAmJiBsYXN0Q2hpbGQudGV4dCA9PT0gXCJcXHUwMzM4XCIgJiYgKF9ncm91cC50eXBlID09PSAnbW8nIHx8IF9ncm91cC50eXBlID09PSAnbWknIHx8IF9ncm91cC50eXBlID09PSAnbW4nKSkge1xuICAgICAgICAgIHZhciBfY2hpbGQgPSBfZ3JvdXAuY2hpbGRyZW5bMF07XG5cbiAgICAgICAgICBpZiAoX2NoaWxkIGluc3RhbmNlb2YgbWF0aE1MVHJlZV9UZXh0Tm9kZSAmJiBfY2hpbGQudGV4dC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBPdmVybGF5IHdpdGggY29tYmluaW5nIGNoYXJhY3RlciBsb25nIHNvbGlkdXNcbiAgICAgICAgICAgIF9jaGlsZC50ZXh0ID0gX2NoaWxkLnRleHQuc2xpY2UoMCwgMSkgKyBcIlxcdTAzMzhcIiArIF9jaGlsZC50ZXh0LnNsaWNlKDEpO1xuICAgICAgICAgICAgZ3JvdXBzLnBvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGdyb3Vwcy5wdXNoKF9ncm91cCk7XG4gICAgbGFzdEdyb3VwID0gX2dyb3VwO1xuICB9XG5cbiAgcmV0dXJuIGdyb3Vwcztcbn07XG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gYnVpbGRFeHByZXNzaW9uLCBidXQgd3JhcHMgdGhlIGVsZW1lbnRzIGluIGFuIDxtcm93PlxuICogaWYgdGhlcmUncyBtb3JlIHRoYW4gb25lLiAgUmV0dXJucyBhIHNpbmdsZSBub2RlIGluc3RlYWQgb2YgYW4gYXJyYXkuXG4gKi9cblxudmFyIGJ1aWxkRXhwcmVzc2lvblJvdyA9IGZ1bmN0aW9uIGJ1aWxkRXhwcmVzc2lvblJvdyhleHByZXNzaW9uLCBvcHRpb25zLCBpc09yZGdyb3VwKSB7XG4gIHJldHVybiBidWlsZE1hdGhNTF9tYWtlUm93KGJ1aWxkTWF0aE1MX2J1aWxkRXhwcmVzc2lvbihleHByZXNzaW9uLCBvcHRpb25zLCBpc09yZGdyb3VwKSk7XG59O1xuLyoqXG4gKiBUYWtlcyBhIGdyb3VwIGZyb20gdGhlIHBhcnNlciBhbmQgY2FsbHMgdGhlIGFwcHJvcHJpYXRlIGdyb3VwQnVpbGRlcnMgZnVuY3Rpb25cbiAqIG9uIGl0IHRvIHByb2R1Y2UgYSBNYXRoTUwgbm9kZS5cbiAqL1xuXG52YXIgYnVpbGRNYXRoTUxfYnVpbGRHcm91cCA9IGZ1bmN0aW9uIGJ1aWxkR3JvdXAoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgaWYgKCFncm91cCkge1xuICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1yb3dcIik7XG4gIH1cblxuICBpZiAoX21hdGhtbEdyb3VwQnVpbGRlcnNbZ3JvdXAudHlwZV0pIHtcbiAgICAvLyBDYWxsIHRoZSBncm91cEJ1aWxkZXJzIGZ1bmN0aW9uXG4gICAgdmFyIHJlc3VsdCA9IF9tYXRobWxHcm91cEJ1aWxkZXJzW2dyb3VwLnR5cGVdKGdyb3VwLCBvcHRpb25zKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkdvdCBncm91cCBvZiB1bmtub3duIHR5cGU6ICdcIiArIGdyb3VwLnR5cGUgKyBcIidcIik7XG4gIH1cbn07XG4vKipcbiAqIFRha2VzIGEgZnVsbCBwYXJzZSB0cmVlIGFuZCBzZXR0aW5ncyBhbmQgYnVpbGRzIGEgTWF0aE1MIHJlcHJlc2VudGF0aW9uIG9mXG4gKiBpdC4gSW4gcGFydGljdWxhciwgd2UgcHV0IHRoZSBlbGVtZW50cyBmcm9tIGJ1aWxkaW5nIHRoZSBwYXJzZSB0cmVlIGludG8gYVxuICogPHNlbWFudGljcz4gdGFnIHNvIHdlIGNhbiBhbHNvIGluY2x1ZGUgdGhhdCBUZVggc291cmNlIGFzIGFuIGFubm90YXRpb24uXG4gKlxuICogTm90ZSB0aGF0IHdlIGFjdHVhbGx5IHJldHVybiBhIGRvbVRyZWUgZWxlbWVudCB3aXRoIGEgYDxtYXRoPmAgaW5zaWRlIGl0IHNvXG4gKiB3ZSBjYW4gZG8gYXBwcm9wcmlhdGUgc3R5bGluZy5cbiAqL1xuXG5mdW5jdGlvbiBidWlsZE1hdGhNTCh0cmVlLCB0ZXhFeHByZXNzaW9uLCBvcHRpb25zLCBmb3JNYXRobWxPbmx5KSB7XG4gIHZhciBleHByZXNzaW9uID0gYnVpbGRNYXRoTUxfYnVpbGRFeHByZXNzaW9uKHRyZWUsIG9wdGlvbnMpOyAvLyBXcmFwIHVwIHRoZSBleHByZXNzaW9uIGluIGFuIG1yb3cgc28gaXQgaXMgcHJlc2VudGVkIGluIHRoZSBzZW1hbnRpY3NcbiAgLy8gdGFnIGNvcnJlY3RseSwgdW5sZXNzIGl0J3MgYSBzaW5nbGUgPG1yb3c+IG9yIDxtdGFibGU+LlxuXG4gIHZhciB3cmFwcGVyO1xuXG4gIGlmIChleHByZXNzaW9uLmxlbmd0aCA9PT0gMSAmJiBleHByZXNzaW9uWzBdIGluc3RhbmNlb2YgbWF0aE1MVHJlZV9NYXRoTm9kZSAmJiB1dGlscy5jb250YWlucyhbXCJtcm93XCIsIFwibXRhYmxlXCJdLCBleHByZXNzaW9uWzBdLnR5cGUpKSB7XG4gICAgd3JhcHBlciA9IGV4cHJlc3Npb25bMF07XG4gIH0gZWxzZSB7XG4gICAgd3JhcHBlciA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXJvd1wiLCBleHByZXNzaW9uKTtcbiAgfSAvLyBCdWlsZCBhIFRlWCBhbm5vdGF0aW9uIG9mIHRoZSBzb3VyY2VcblxuXG4gIHZhciBhbm5vdGF0aW9uID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJhbm5vdGF0aW9uXCIsIFtuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZSh0ZXhFeHByZXNzaW9uKV0pO1xuICBhbm5vdGF0aW9uLnNldEF0dHJpYnV0ZShcImVuY29kaW5nXCIsIFwiYXBwbGljYXRpb24veC10ZXhcIik7XG4gIHZhciBzZW1hbnRpY3MgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcInNlbWFudGljc1wiLCBbd3JhcHBlciwgYW5ub3RhdGlvbl0pO1xuICB2YXIgbWF0aCA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibWF0aFwiLCBbc2VtYW50aWNzXSk7XG4gIG1hdGguc2V0QXR0cmlidXRlKFwieG1sbnNcIiwgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCIpOyAvLyBZb3UgY2FuJ3Qgc3R5bGUgPG1hdGg+IG5vZGVzLCBzbyB3ZSB3cmFwIHRoZSBub2RlIGluIGEgc3Bhbi5cbiAgLy8gTk9URTogVGhlIHNwYW4gY2xhc3MgaXMgbm90IHR5cGVkIHRvIGhhdmUgPG1hdGg+IG5vZGVzIGFzIGNoaWxkcmVuLCBhbmRcbiAgLy8gd2UgZG9uJ3Qgd2FudCB0byBtYWtlIHRoZSBjaGlsZHJlbiB0eXBlIG1vcmUgZ2VuZXJpYyBzaW5jZSB0aGUgY2hpbGRyZW5cbiAgLy8gb2Ygc3BhbiBhcmUgZXhwZWN0ZWQgdG8gaGF2ZSBtb3JlIGZpZWxkcyBpbiBgYnVpbGRIdG1sYCBjb250ZXh0cy5cblxuICB2YXIgd3JhcHBlckNsYXNzID0gZm9yTWF0aG1sT25seSA/IFwia2F0ZXhcIiA6IFwia2F0ZXgtbWF0aG1sXCI7IC8vICRGbG93Rml4TWVcblxuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW3dyYXBwZXJDbGFzc10sIFttYXRoXSk7XG59XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9idWlsZFRyZWUuanNcblxuXG5cblxuXG5cblxudmFyIGJ1aWxkVHJlZV9vcHRpb25zRnJvbVNldHRpbmdzID0gZnVuY3Rpb24gb3B0aW9uc0Zyb21TZXR0aW5ncyhzZXR0aW5ncykge1xuICByZXR1cm4gbmV3IHNyY19PcHRpb25zKHtcbiAgICBzdHlsZTogc2V0dGluZ3MuZGlzcGxheU1vZGUgPyBzcmNfU3R5bGUuRElTUExBWSA6IHNyY19TdHlsZS5URVhULFxuICAgIG1heFNpemU6IHNldHRpbmdzLm1heFNpemUsXG4gICAgbWluUnVsZVRoaWNrbmVzczogc2V0dGluZ3MubWluUnVsZVRoaWNrbmVzc1xuICB9KTtcbn07XG5cbnZhciBidWlsZFRyZWVfZGlzcGxheVdyYXAgPSBmdW5jdGlvbiBkaXNwbGF5V3JhcChub2RlLCBzZXR0aW5ncykge1xuICBpZiAoc2V0dGluZ3MuZGlzcGxheU1vZGUpIHtcbiAgICB2YXIgY2xhc3NlcyA9IFtcImthdGV4LWRpc3BsYXlcIl07XG5cbiAgICBpZiAoc2V0dGluZ3MubGVxbm8pIHtcbiAgICAgIGNsYXNzZXMucHVzaChcImxlcW5vXCIpO1xuICAgIH1cblxuICAgIGlmIChzZXR0aW5ncy5mbGVxbikge1xuICAgICAgY2xhc3Nlcy5wdXNoKFwiZmxlcW5cIik7XG4gICAgfVxuXG4gICAgbm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKGNsYXNzZXMsIFtub2RlXSk7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn07XG5cbnZhciBidWlsZFRyZWVfYnVpbGRUcmVlID0gZnVuY3Rpb24gYnVpbGRUcmVlKHRyZWUsIGV4cHJlc3Npb24sIHNldHRpbmdzKSB7XG4gIHZhciBvcHRpb25zID0gYnVpbGRUcmVlX29wdGlvbnNGcm9tU2V0dGluZ3Moc2V0dGluZ3MpO1xuICB2YXIga2F0ZXhOb2RlO1xuXG4gIGlmIChzZXR0aW5ncy5vdXRwdXQgPT09IFwibWF0aG1sXCIpIHtcbiAgICByZXR1cm4gYnVpbGRNYXRoTUwodHJlZSwgZXhwcmVzc2lvbiwgb3B0aW9ucywgdHJ1ZSk7XG4gIH0gZWxzZSBpZiAoc2V0dGluZ3Mub3V0cHV0ID09PSBcImh0bWxcIikge1xuICAgIHZhciBodG1sTm9kZSA9IGJ1aWxkSFRNTCh0cmVlLCBvcHRpb25zKTtcbiAgICBrYXRleE5vZGUgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJrYXRleFwiXSwgW2h0bWxOb2RlXSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG1hdGhNTE5vZGUgPSBidWlsZE1hdGhNTCh0cmVlLCBleHByZXNzaW9uLCBvcHRpb25zLCBmYWxzZSk7XG5cbiAgICB2YXIgX2h0bWxOb2RlID0gYnVpbGRIVE1MKHRyZWUsIG9wdGlvbnMpO1xuXG4gICAga2F0ZXhOb2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wia2F0ZXhcIl0sIFttYXRoTUxOb2RlLCBfaHRtbE5vZGVdKTtcbiAgfVxuXG4gIHJldHVybiBidWlsZFRyZWVfZGlzcGxheVdyYXAoa2F0ZXhOb2RlLCBzZXR0aW5ncyk7XG59O1xudmFyIGJ1aWxkVHJlZV9idWlsZEhUTUxUcmVlID0gZnVuY3Rpb24gYnVpbGRIVE1MVHJlZSh0cmVlLCBleHByZXNzaW9uLCBzZXR0aW5ncykge1xuICB2YXIgb3B0aW9ucyA9IGJ1aWxkVHJlZV9vcHRpb25zRnJvbVNldHRpbmdzKHNldHRpbmdzKTtcbiAgdmFyIGh0bWxOb2RlID0gYnVpbGRIVE1MKHRyZWUsIG9wdGlvbnMpO1xuICB2YXIga2F0ZXhOb2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wia2F0ZXhcIl0sIFtodG1sTm9kZV0pO1xuICByZXR1cm4gYnVpbGRUcmVlX2Rpc3BsYXlXcmFwKGthdGV4Tm9kZSwgc2V0dGluZ3MpO1xufTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19idWlsZFRyZWUgPSAoYnVpbGRUcmVlX2J1aWxkVHJlZSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9zdHJldGNoeS5qc1xuLyoqXG4gKiBUaGlzIGZpbGUgcHJvdmlkZXMgc3VwcG9ydCB0byBidWlsZE1hdGhNTC5qcyBhbmQgYnVpbGRIVE1MLmpzXG4gKiBmb3Igc3RyZXRjaHkgd2lkZSBlbGVtZW50cyByZW5kZXJlZCBmcm9tIFNWRyBmaWxlc1xuICogYW5kIG90aGVyIENTUyB0cmlja2VyeS5cbiAqL1xuXG5cblxuXG52YXIgc3RyZXRjaHlDb2RlUG9pbnQgPSB7XG4gIHdpZGVoYXQ6IFwiXlwiLFxuICB3aWRlY2hlY2s6IFwiy4dcIixcbiAgd2lkZXRpbGRlOiBcIn5cIixcbiAgdXRpbGRlOiBcIn5cIixcbiAgb3ZlcmxlZnRhcnJvdzogXCJcXHUyMTkwXCIsXG4gIHVuZGVybGVmdGFycm93OiBcIlxcdTIxOTBcIixcbiAgeGxlZnRhcnJvdzogXCJcXHUyMTkwXCIsXG4gIG92ZXJyaWdodGFycm93OiBcIlxcdTIxOTJcIixcbiAgdW5kZXJyaWdodGFycm93OiBcIlxcdTIxOTJcIixcbiAgeHJpZ2h0YXJyb3c6IFwiXFx1MjE5MlwiLFxuICB1bmRlcmJyYWNlOiBcIlxcdTIzREZcIixcbiAgb3ZlcmJyYWNlOiBcIlxcdTIzREVcIixcbiAgb3Zlcmdyb3VwOiBcIlxcdTIzRTBcIixcbiAgdW5kZXJncm91cDogXCJcXHUyM0UxXCIsXG4gIG92ZXJsZWZ0cmlnaHRhcnJvdzogXCJcXHUyMTk0XCIsXG4gIHVuZGVybGVmdHJpZ2h0YXJyb3c6IFwiXFx1MjE5NFwiLFxuICB4bGVmdHJpZ2h0YXJyb3c6IFwiXFx1MjE5NFwiLFxuICBPdmVycmlnaHRhcnJvdzogXCJcXHUyMUQyXCIsXG4gIHhSaWdodGFycm93OiBcIlxcdTIxRDJcIixcbiAgb3ZlcmxlZnRoYXJwb29uOiBcIlxcdTIxQkNcIixcbiAgeGxlZnRoYXJwb29udXA6IFwiXFx1MjFCQ1wiLFxuICBvdmVycmlnaHRoYXJwb29uOiBcIlxcdTIxQzBcIixcbiAgeHJpZ2h0aGFycG9vbnVwOiBcIlxcdTIxQzBcIixcbiAgeExlZnRhcnJvdzogXCJcXHUyMUQwXCIsXG4gIHhMZWZ0cmlnaHRhcnJvdzogXCJcXHUyMUQ0XCIsXG4gIHhob29rbGVmdGFycm93OiBcIlxcdTIxQTlcIixcbiAgeGhvb2tyaWdodGFycm93OiBcIlxcdTIxQUFcIixcbiAgeG1hcHN0bzogXCJcXHUyMUE2XCIsXG4gIHhyaWdodGhhcnBvb25kb3duOiBcIlxcdTIxQzFcIixcbiAgeGxlZnRoYXJwb29uZG93bjogXCJcXHUyMUJEXCIsXG4gIHhyaWdodGxlZnRoYXJwb29uczogXCJcXHUyMUNDXCIsXG4gIHhsZWZ0cmlnaHRoYXJwb29uczogXCJcXHUyMUNCXCIsXG4gIHh0d29oZWFkbGVmdGFycm93OiBcIlxcdTIxOUVcIixcbiAgeHR3b2hlYWRyaWdodGFycm93OiBcIlxcdTIxQTBcIixcbiAgeGxvbmdlcXVhbDogXCI9XCIsXG4gIHh0b2Zyb206IFwiXFx1MjFDNFwiLFxuICB4cmlnaHRsZWZ0YXJyb3dzOiBcIlxcdTIxQzRcIixcbiAgeHJpZ2h0ZXF1aWxpYnJpdW06IFwiXFx1MjFDQ1wiLFxuICAvLyBOb3QgYSBwZXJmZWN0IG1hdGNoLlxuICB4bGVmdGVxdWlsaWJyaXVtOiBcIlxcdTIxQ0JcIiAvLyBOb25lIGJldHRlciBhdmFpbGFibGUuXG5cbn07XG5cbnZhciBzdHJldGNoeV9tYXRoTUxub2RlID0gZnVuY3Rpb24gbWF0aE1Mbm9kZShsYWJlbCkge1xuICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKHN0cmV0Y2h5Q29kZVBvaW50W2xhYmVsLnN1YnN0cigxKV0pXSk7XG4gIG5vZGUuc2V0QXR0cmlidXRlKFwic3RyZXRjaHlcIiwgXCJ0cnVlXCIpO1xuICByZXR1cm4gbm9kZTtcbn07IC8vIE1hbnkgb2YgdGhlIEthVGVYIFNWRyBpbWFnZXMgaGF2ZSBiZWVuIGFkYXB0ZWQgZnJvbSBnbHlwaHMgaW4gS2FUZVggZm9udHMuXG4vLyBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCwgRGVzaWduIFNjaWVuY2UsIEluYy4gKDx3d3cubWF0aGpheC5vcmc+KVxuLy8gQ29weXJpZ2h0IChjKSAyMDE0LTIwMTcgS2hhbiBBY2FkZW15ICg8d3d3LmtoYW5hY2FkZW15Lm9yZz4pXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgU0lMIE9wZW4gRm9udCBMaWNlbnNlLCBWZXJzaW9uIDEuMS5cbi8vIFNlZSBcXG5odHRwOi8vc2NyaXB0cy5zaWwub3JnL09GTFxuLy8gVmVyeSBMb25nIFNWR3Ncbi8vICAgIE1hbnkgb2YgdGhlIEthVGVYIHN0cmV0Y2h5IHdpZGUgZWxlbWVudHMgdXNlIGEgbG9uZyBTVkcgaW1hZ2UgYW5kIGFuXG4vLyAgICBvdmVyZmxvdzogaGlkZGVuIHRhY3RpYyB0byBhY2hpZXZlIGEgc3RyZXRjaHkgaW1hZ2Ugd2hpbGUgYXZvaWRpbmdcbi8vICAgIGRpc3RvcnRpb24gb2YgYXJyb3doZWFkcyBvciBicmFjZSBjb3JuZXJzLlxuLy8gICAgVGhlIFNWRyB0eXBpY2FsbHkgY29udGFpbnMgYSB2ZXJ5IGxvbmcgKDQwMCBlbSkgYXJyb3cuXG4vLyAgICBUaGUgU1ZHIGlzIGluIGEgY29udGFpbmVyIHNwYW4gdGhhdCBoYXMgb3ZlcmZsb3c6IGhpZGRlbiwgc28gdGhlIHNwYW5cbi8vICAgIGFjdHMgbGlrZSBhIHdpbmRvdyB0aGF0IGV4cG9zZXMgb25seSBwYXJ0IG9mIHRoZSAgU1ZHLlxuLy8gICAgVGhlIFNWRyBhbHdheXMgaGFzIGEgbG9uZ2VyLCB0aGlubmVyIGFzcGVjdCByYXRpbyB0aGFuIHRoZSBjb250YWluZXIgc3Bhbi5cbi8vICAgIEFmdGVyIHRoZSBTVkcgZmlsbHMgMTAwJSBvZiB0aGUgaGVpZ2h0IG9mIHRoZSBjb250YWluZXIgc3Bhbixcbi8vICAgIHRoZXJlIGlzIGEgbG9uZyBhcnJvdyBzaGFmdCBsZWZ0IG92ZXIuIFRoYXQgbGVmdC1vdmVyIHNoYWZ0IGlzIG5vdCBzaG93bi5cbi8vICAgIEluc3RlYWQsIGl0IGlzIHNsaWNlZCBvZmYgYmVjYXVzZSB0aGUgc3BhbidzIENTUyBoYXMgb3ZlcmZsb3c6IGhpZGRlbi5cbi8vICAgIFRodXMsIHRoZSByZWFkZXIgc2VlcyBhbiBhcnJvdyB0aGF0IG1hdGNoZXMgdGhlIHN1YmplY3QgbWF0dGVyIHdpZHRoXG4vLyAgICB3aXRob3V0IGRpc3RvcnRpb24uXG4vLyAgICBTb21lIGZ1bmN0aW9ucywgc3VjaCBhcyBcXGNhbmNlbCwgbmVlZCB0byB2YXJ5IHRoZWlyIGFzcGVjdCByYXRpby4gVGhlc2Vcbi8vICAgIGZ1bmN0aW9ucyBkbyBub3QgZ2V0IHRoZSBvdmVyZmxvdyBTVkcgdHJlYXRtZW50LlxuLy8gU2Vjb25kIEJydXNoIFN0cm9rZVxuLy8gICAgTG93IHJlc29sdXRpb24gbW9uaXRvcnMgc3RydWdnbGUgdG8gZGlzcGxheSBpbWFnZXMgaW4gZmluZSBkZXRhaWwuXG4vLyAgICBTbyBicm93c2VycyBhcHBseSBhbnRpLWFsaWFzaW5nLiBBIGxvbmcgc3RyYWlnaHQgYXJyb3cgc2hhZnQgdGhlcmVmb3JlXG4vLyAgICB3aWxsIHNvbWV0aW1lcyBhcHBlYXIgYXMgaWYgaXQgaGFzIGEgYmx1cnJlZCBlZGdlLlxuLy8gICAgVG8gbWl0aWdhdGUgdGhpcywgdGhlc2UgU1ZHIGZpbGVzIGNvbnRhaW4gYSBzZWNvbmQgXCJicnVzaC1zdHJva2VcIiBvbiB0aGVcbi8vICAgIGFycm93IHNoYWZ0cy4gVGhhdCBpcywgYSBzZWNvbmQgbG9uZyB0aGluIHJlY3Rhbmd1bGFyIFNWRyBwYXRoIGhhcyBiZWVuXG4vLyAgICB3cml0dGVuIGRpcmVjdGx5IG9uIHRvcCBvZiBlYWNoIGFycm93IHNoYWZ0LiBUaGlzIHJlaW5mb3JjZW1lbnQgY2F1c2VzXG4vLyAgICBzb21lIG9mIHRoZSBzY3JlZW4gcGl4ZWxzIHRvIGRpc3BsYXkgYXMgYmxhY2sgaW5zdGVhZCBvZiB0aGUgYW50aS1hbGlhc2VkXG4vLyAgICBncmF5IHBpeGVsIHRoYXQgYSAgc2luZ2xlIHBhdGggd291bGQgZ2VuZXJhdGUuIFNvIHdlIGdldCBhcnJvdyBzaGFmdHNcbi8vICAgIHdob3NlIGVkZ2VzIGFwcGVhciB0byBiZSBzaGFycGVyLlxuLy8gSW4gdGhlIGthdGV4SW1hZ2VzRGF0YSBvYmplY3QganVzdCBiZWxvdywgdGhlIGRpbWVuc2lvbnMgYWxsXG4vLyBjb3JyZXNwb25kIHRvIHBhdGggZ2VvbWV0cnkgaW5zaWRlIHRoZSByZWxldmFudCBTVkcuXG4vLyBGb3IgZXhhbXBsZSwgXFxvdmVycmlnaHRhcnJvdyB1c2VzIHRoZSBzYW1lIGFycm93aGVhZCBhcyBnbHlwaCBVKzIxOTJcbi8vIGZyb20gdGhlIEthVGVYIE1haW4gZm9udC4gVGhlIHNjYWxpbmcgZmFjdG9yIGlzIDEwMDAuXG4vLyBUaGF0IGlzLCBpbnNpZGUgdGhlIGZvbnQsIHRoYXQgYXJyb3doZWFkIGlzIDUyMiB1bml0cyB0YWxsLCB3aGljaFxuLy8gY29ycmVzcG9uZHMgdG8gMC41MjIgZW0gaW5zaWRlIHRoZSBkb2N1bWVudC5cblxuXG52YXIga2F0ZXhJbWFnZXNEYXRhID0ge1xuICAvLyAgIHBhdGgocyksIG1pbldpZHRoLCBoZWlnaHQsIGFsaWduXG4gIG92ZXJyaWdodGFycm93OiBbW1wicmlnaHRhcnJvd1wiXSwgMC44ODgsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgb3ZlcmxlZnRhcnJvdzogW1tcImxlZnRhcnJvd1wiXSwgMC44ODgsIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgdW5kZXJyaWdodGFycm93OiBbW1wicmlnaHRhcnJvd1wiXSwgMC44ODgsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgdW5kZXJsZWZ0YXJyb3c6IFtbXCJsZWZ0YXJyb3dcIl0sIDAuODg4LCA1MjIsIFwieE1pbllNaW5cIl0sXG4gIHhyaWdodGFycm93OiBbW1wicmlnaHRhcnJvd1wiXSwgMS40NjksIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgeGxlZnRhcnJvdzogW1tcImxlZnRhcnJvd1wiXSwgMS40NjksIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgT3ZlcnJpZ2h0YXJyb3c6IFtbXCJkb3VibGVyaWdodGFycm93XCJdLCAwLjg4OCwgNTYwLCBcInhNYXhZTWluXCJdLFxuICB4UmlnaHRhcnJvdzogW1tcImRvdWJsZXJpZ2h0YXJyb3dcIl0sIDEuNTI2LCA1NjAsIFwieE1heFlNaW5cIl0sXG4gIHhMZWZ0YXJyb3c6IFtbXCJkb3VibGVsZWZ0YXJyb3dcIl0sIDEuNTI2LCA1NjAsIFwieE1pbllNaW5cIl0sXG4gIG92ZXJsZWZ0aGFycG9vbjogW1tcImxlZnRoYXJwb29uXCJdLCAwLjg4OCwgNTIyLCBcInhNaW5ZTWluXCJdLFxuICB4bGVmdGhhcnBvb251cDogW1tcImxlZnRoYXJwb29uXCJdLCAwLjg4OCwgNTIyLCBcInhNaW5ZTWluXCJdLFxuICB4bGVmdGhhcnBvb25kb3duOiBbW1wibGVmdGhhcnBvb25kb3duXCJdLCAwLjg4OCwgNTIyLCBcInhNaW5ZTWluXCJdLFxuICBvdmVycmlnaHRoYXJwb29uOiBbW1wicmlnaHRoYXJwb29uXCJdLCAwLjg4OCwgNTIyLCBcInhNYXhZTWluXCJdLFxuICB4cmlnaHRoYXJwb29udXA6IFtbXCJyaWdodGhhcnBvb25cIl0sIDAuODg4LCA1MjIsIFwieE1heFlNaW5cIl0sXG4gIHhyaWdodGhhcnBvb25kb3duOiBbW1wicmlnaHRoYXJwb29uZG93blwiXSwgMC44ODgsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgeGxvbmdlcXVhbDogW1tcImxvbmdlcXVhbFwiXSwgMC44ODgsIDMzNCwgXCJ4TWluWU1pblwiXSxcbiAgeHR3b2hlYWRsZWZ0YXJyb3c6IFtbXCJ0d29oZWFkbGVmdGFycm93XCJdLCAwLjg4OCwgMzM0LCBcInhNaW5ZTWluXCJdLFxuICB4dHdvaGVhZHJpZ2h0YXJyb3c6IFtbXCJ0d29oZWFkcmlnaHRhcnJvd1wiXSwgMC44ODgsIDMzNCwgXCJ4TWF4WU1pblwiXSxcbiAgb3ZlcmxlZnRyaWdodGFycm93OiBbW1wibGVmdGFycm93XCIsIFwicmlnaHRhcnJvd1wiXSwgMC44ODgsIDUyMl0sXG4gIG92ZXJicmFjZTogW1tcImxlZnRicmFjZVwiLCBcIm1pZGJyYWNlXCIsIFwicmlnaHRicmFjZVwiXSwgMS42LCA1NDhdLFxuICB1bmRlcmJyYWNlOiBbW1wibGVmdGJyYWNldW5kZXJcIiwgXCJtaWRicmFjZXVuZGVyXCIsIFwicmlnaHRicmFjZXVuZGVyXCJdLCAxLjYsIDU0OF0sXG4gIHVuZGVybGVmdHJpZ2h0YXJyb3c6IFtbXCJsZWZ0YXJyb3dcIiwgXCJyaWdodGFycm93XCJdLCAwLjg4OCwgNTIyXSxcbiAgeGxlZnRyaWdodGFycm93OiBbW1wibGVmdGFycm93XCIsIFwicmlnaHRhcnJvd1wiXSwgMS43NSwgNTIyXSxcbiAgeExlZnRyaWdodGFycm93OiBbW1wiZG91YmxlbGVmdGFycm93XCIsIFwiZG91YmxlcmlnaHRhcnJvd1wiXSwgMS43NSwgNTYwXSxcbiAgeHJpZ2h0bGVmdGhhcnBvb25zOiBbW1wibGVmdGhhcnBvb25kb3ducGx1c1wiLCBcInJpZ2h0aGFycG9vbnBsdXNcIl0sIDEuNzUsIDcxNl0sXG4gIHhsZWZ0cmlnaHRoYXJwb29uczogW1tcImxlZnRoYXJwb29ucGx1c1wiLCBcInJpZ2h0aGFycG9vbmRvd25wbHVzXCJdLCAxLjc1LCA3MTZdLFxuICB4aG9va2xlZnRhcnJvdzogW1tcImxlZnRhcnJvd1wiLCBcInJpZ2h0aG9va1wiXSwgMS4wOCwgNTIyXSxcbiAgeGhvb2tyaWdodGFycm93OiBbW1wibGVmdGhvb2tcIiwgXCJyaWdodGFycm93XCJdLCAxLjA4LCA1MjJdLFxuICBvdmVybGluZXNlZ21lbnQ6IFtbXCJsZWZ0bGluZXNlZ21lbnRcIiwgXCJyaWdodGxpbmVzZWdtZW50XCJdLCAwLjg4OCwgNTIyXSxcbiAgdW5kZXJsaW5lc2VnbWVudDogW1tcImxlZnRsaW5lc2VnbWVudFwiLCBcInJpZ2h0bGluZXNlZ21lbnRcIl0sIDAuODg4LCA1MjJdLFxuICBvdmVyZ3JvdXA6IFtbXCJsZWZ0Z3JvdXBcIiwgXCJyaWdodGdyb3VwXCJdLCAwLjg4OCwgMzQyXSxcbiAgdW5kZXJncm91cDogW1tcImxlZnRncm91cHVuZGVyXCIsIFwicmlnaHRncm91cHVuZGVyXCJdLCAwLjg4OCwgMzQyXSxcbiAgeG1hcHN0bzogW1tcImxlZnRtYXBzdG9cIiwgXCJyaWdodGFycm93XCJdLCAxLjUsIDUyMl0sXG4gIHh0b2Zyb206IFtbXCJsZWZ0VG9Gcm9tXCIsIFwicmlnaHRUb0Zyb21cIl0sIDEuNzUsIDUyOF0sXG4gIC8vIFRoZSBuZXh0IHRocmVlIGFycm93cyBhcmUgZnJvbSB0aGUgbWhjaGVtIHBhY2thZ2UuXG4gIC8vIEluIG1oY2hlbS5zdHksIG1pbi1sZW5ndGggaXMgMi4wZW0uIEJ1dCB0aGVzZSBhcnJvd3MgbWlnaHQgYXBwZWFyIGluIHRoZVxuICAvLyBkb2N1bWVudCBhcyBcXHhyaWdodGFycm93IG9yIFxceHJpZ2h0bGVmdGhhcnBvb25zLiBUaG9zZSBoYXZlXG4gIC8vIG1pbi1sZW5ndGggPSAxLjc1ZW0sIHNvIHdlIHNldCBtaW4tbGVuZ3RoIG9uIHRoZXNlIG5leHQgdGhyZWUgdG8gbWF0Y2guXG4gIHhyaWdodGxlZnRhcnJvd3M6IFtbXCJiYXJhYm92ZWxlZnRhcnJvd1wiLCBcInJpZ2h0YXJyb3dhYm92ZWJhclwiXSwgMS43NSwgOTAxXSxcbiAgeHJpZ2h0ZXF1aWxpYnJpdW06IFtbXCJiYXJhYm92ZXNob3J0bGVmdGhhcnBvb25cIiwgXCJyaWdodGhhcnBvb25hYm92ZXNob3J0YmFyXCJdLCAxLjc1LCA3MTZdLFxuICB4bGVmdGVxdWlsaWJyaXVtOiBbW1wic2hvcnRiYXJhYm92ZWxlZnRoYXJwb29uXCIsIFwic2hvcnRyaWdodGhhcnBvb25hYm92ZWJhclwiXSwgMS43NSwgNzE2XVxufTtcblxudmFyIGdyb3VwTGVuZ3RoID0gZnVuY3Rpb24gZ3JvdXBMZW5ndGgoYXJnKSB7XG4gIGlmIChhcmcudHlwZSA9PT0gXCJvcmRncm91cFwiKSB7XG4gICAgcmV0dXJuIGFyZy5ib2R5Lmxlbmd0aDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMTtcbiAgfVxufTtcblxudmFyIHN0cmV0Y2h5X3N2Z1NwYW4gPSBmdW5jdGlvbiBzdmdTcGFuKGdyb3VwLCBvcHRpb25zKSB7XG4gIC8vIENyZWF0ZSBhIHNwYW4gd2l0aCBpbmxpbmUgU1ZHIGZvciB0aGUgZWxlbWVudC5cbiAgZnVuY3Rpb24gYnVpbGRTdmdTcGFuXygpIHtcbiAgICB2YXIgdmlld0JveFdpZHRoID0gNDAwMDAwOyAvLyBkZWZhdWx0XG5cbiAgICB2YXIgbGFiZWwgPSBncm91cC5sYWJlbC5zdWJzdHIoMSk7XG5cbiAgICBpZiAodXRpbHMuY29udGFpbnMoW1wid2lkZWhhdFwiLCBcIndpZGVjaGVja1wiLCBcIndpZGV0aWxkZVwiLCBcInV0aWxkZVwiXSwgbGFiZWwpKSB7XG4gICAgICAvLyBFYWNoIHR5cGUgaW4gdGhlIGBpZmAgc3RhdGVtZW50IGNvcnJlc3BvbmRzIHRvIG9uZSBvZiB0aGUgUGFyc2VOb2RlXG4gICAgICAvLyB0eXBlcyBiZWxvdy4gVGhpcyBuYXJyb3dpbmcgaXMgcmVxdWlyZWQgdG8gYWNjZXNzIGBncnAuYmFzZWAuXG4gICAgICB2YXIgZ3JwID0gZ3JvdXA7IC8vIFRoZXJlIGFyZSBmb3VyIFNWRyBpbWFnZXMgYXZhaWxhYmxlIGZvciBlYWNoIGZ1bmN0aW9uLlxuICAgICAgLy8gQ2hvb3NlIGEgdGFsbGVyIGltYWdlIHdoZW4gdGhlcmUgYXJlIG1vcmUgY2hhcmFjdGVycy5cblxuICAgICAgdmFyIG51bUNoYXJzID0gZ3JvdXBMZW5ndGgoZ3JwLmJhc2UpO1xuICAgICAgdmFyIHZpZXdCb3hIZWlnaHQ7XG4gICAgICB2YXIgcGF0aE5hbWU7XG5cbiAgICAgIHZhciBfaGVpZ2h0O1xuXG4gICAgICBpZiAobnVtQ2hhcnMgPiA1KSB7XG4gICAgICAgIGlmIChsYWJlbCA9PT0gXCJ3aWRlaGF0XCIgfHwgbGFiZWwgPT09IFwid2lkZWNoZWNrXCIpIHtcbiAgICAgICAgICB2aWV3Qm94SGVpZ2h0ID0gNDIwO1xuICAgICAgICAgIHZpZXdCb3hXaWR0aCA9IDIzNjQ7XG4gICAgICAgICAgX2hlaWdodCA9IDAuNDI7XG4gICAgICAgICAgcGF0aE5hbWUgPSBsYWJlbCArIFwiNFwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZpZXdCb3hIZWlnaHQgPSAzMTI7XG4gICAgICAgICAgdmlld0JveFdpZHRoID0gMjM0MDtcbiAgICAgICAgICBfaGVpZ2h0ID0gMC4zNDtcbiAgICAgICAgICBwYXRoTmFtZSA9IFwidGlsZGU0XCI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBpbWdJbmRleCA9IFsxLCAxLCAyLCAyLCAzLCAzXVtudW1DaGFyc107XG5cbiAgICAgICAgaWYgKGxhYmVsID09PSBcIndpZGVoYXRcIiB8fCBsYWJlbCA9PT0gXCJ3aWRlY2hlY2tcIikge1xuICAgICAgICAgIHZpZXdCb3hXaWR0aCA9IFswLCAxMDYyLCAyMzY0LCAyMzY0LCAyMzY0XVtpbWdJbmRleF07XG4gICAgICAgICAgdmlld0JveEhlaWdodCA9IFswLCAyMzksIDMwMCwgMzYwLCA0MjBdW2ltZ0luZGV4XTtcbiAgICAgICAgICBfaGVpZ2h0ID0gWzAsIDAuMjQsIDAuMywgMC4zLCAwLjM2LCAwLjQyXVtpbWdJbmRleF07XG4gICAgICAgICAgcGF0aE5hbWUgPSBsYWJlbCArIGltZ0luZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZpZXdCb3hXaWR0aCA9IFswLCA2MDAsIDEwMzMsIDIzMzksIDIzNDBdW2ltZ0luZGV4XTtcbiAgICAgICAgICB2aWV3Qm94SGVpZ2h0ID0gWzAsIDI2MCwgMjg2LCAzMDYsIDMxMl1baW1nSW5kZXhdO1xuICAgICAgICAgIF9oZWlnaHQgPSBbMCwgMC4yNiwgMC4yODYsIDAuMywgMC4zMDYsIDAuMzRdW2ltZ0luZGV4XTtcbiAgICAgICAgICBwYXRoTmFtZSA9IFwidGlsZGVcIiArIGltZ0luZGV4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBwYXRoID0gbmV3IGRvbVRyZWVfUGF0aE5vZGUocGF0aE5hbWUpO1xuICAgICAgdmFyIHN2Z05vZGUgPSBuZXcgU3ZnTm9kZShbcGF0aF0sIHtcbiAgICAgICAgXCJ3aWR0aFwiOiBcIjEwMCVcIixcbiAgICAgICAgXCJoZWlnaHRcIjogX2hlaWdodCArIFwiZW1cIixcbiAgICAgICAgXCJ2aWV3Qm94XCI6IFwiMCAwIFwiICsgdmlld0JveFdpZHRoICsgXCIgXCIgKyB2aWV3Qm94SGVpZ2h0LFxuICAgICAgICBcInByZXNlcnZlQXNwZWN0UmF0aW9cIjogXCJub25lXCJcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3BhbjogYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW10sIFtzdmdOb2RlXSwgb3B0aW9ucyksXG4gICAgICAgIG1pbldpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IF9oZWlnaHRcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzcGFucyA9IFtdO1xuICAgICAgdmFyIGRhdGEgPSBrYXRleEltYWdlc0RhdGFbbGFiZWxdO1xuICAgICAgdmFyIHBhdGhzID0gZGF0YVswXSxcbiAgICAgICAgICBfbWluV2lkdGggPSBkYXRhWzFdLFxuICAgICAgICAgIF92aWV3Qm94SGVpZ2h0ID0gZGF0YVsyXTtcblxuICAgICAgdmFyIF9oZWlnaHQyID0gX3ZpZXdCb3hIZWlnaHQgLyAxMDAwO1xuXG4gICAgICB2YXIgbnVtU3ZnQ2hpbGRyZW4gPSBwYXRocy5sZW5ndGg7XG4gICAgICB2YXIgd2lkdGhDbGFzc2VzO1xuICAgICAgdmFyIGFsaWducztcblxuICAgICAgaWYgKG51bVN2Z0NoaWxkcmVuID09PSAxKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWU6IEFsbCB0aGVzZSBjYXNlcyBtdXN0IGJlIG9mIHRoZSA0LXR1cGxlIHR5cGUuXG4gICAgICAgIHZhciBhbGlnbjEgPSBkYXRhWzNdO1xuICAgICAgICB3aWR0aENsYXNzZXMgPSBbXCJoaWRlLXRhaWxcIl07XG4gICAgICAgIGFsaWducyA9IFthbGlnbjFdO1xuICAgICAgfSBlbHNlIGlmIChudW1TdmdDaGlsZHJlbiA9PT0gMikge1xuICAgICAgICB3aWR0aENsYXNzZXMgPSBbXCJoYWxmYXJyb3ctbGVmdFwiLCBcImhhbGZhcnJvdy1yaWdodFwiXTtcbiAgICAgICAgYWxpZ25zID0gW1wieE1pbllNaW5cIiwgXCJ4TWF4WU1pblwiXTtcbiAgICAgIH0gZWxzZSBpZiAobnVtU3ZnQ2hpbGRyZW4gPT09IDMpIHtcbiAgICAgICAgd2lkdGhDbGFzc2VzID0gW1wiYnJhY2UtbGVmdFwiLCBcImJyYWNlLWNlbnRlclwiLCBcImJyYWNlLXJpZ2h0XCJdO1xuICAgICAgICBhbGlnbnMgPSBbXCJ4TWluWU1pblwiLCBcInhNaWRZTWluXCIsIFwieE1heFlNaW5cIl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3JyZWN0IGthdGV4SW1hZ2VzRGF0YSBvciB1cGRhdGUgY29kZSBoZXJlIHRvIHN1cHBvcnRcXG4gICAgICAgICAgICAgICAgICAgIFwiICsgbnVtU3ZnQ2hpbGRyZW4gKyBcIiBjaGlsZHJlbi5cIik7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtU3ZnQ2hpbGRyZW47IGkrKykge1xuICAgICAgICB2YXIgX3BhdGggPSBuZXcgZG9tVHJlZV9QYXRoTm9kZShwYXRoc1tpXSk7XG5cbiAgICAgICAgdmFyIF9zdmdOb2RlID0gbmV3IFN2Z05vZGUoW19wYXRoXSwge1xuICAgICAgICAgIFwid2lkdGhcIjogXCI0MDBlbVwiLFxuICAgICAgICAgIFwiaGVpZ2h0XCI6IF9oZWlnaHQyICsgXCJlbVwiLFxuICAgICAgICAgIFwidmlld0JveFwiOiBcIjAgMCBcIiArIHZpZXdCb3hXaWR0aCArIFwiIFwiICsgX3ZpZXdCb3hIZWlnaHQsXG4gICAgICAgICAgXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCI6IGFsaWduc1tpXSArIFwiIHNsaWNlXCJcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIF9zcGFuID0gYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW3dpZHRoQ2xhc3Nlc1tpXV0sIFtfc3ZnTm9kZV0sIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChudW1TdmdDaGlsZHJlbiA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzcGFuOiBfc3BhbixcbiAgICAgICAgICAgIG1pbldpZHRoOiBfbWluV2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IF9oZWlnaHQyXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfc3Bhbi5zdHlsZS5oZWlnaHQgPSBfaGVpZ2h0MiArIFwiZW1cIjtcbiAgICAgICAgICBzcGFucy5wdXNoKF9zcGFuKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzcGFuOiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJzdHJldGNoeVwiXSwgc3BhbnMsIG9wdGlvbnMpLFxuICAgICAgICBtaW5XaWR0aDogX21pbldpZHRoLFxuICAgICAgICBoZWlnaHQ6IF9oZWlnaHQyXG4gICAgICB9O1xuICAgIH1cbiAgfSAvLyBidWlsZFN2Z1NwYW5fKClcblxuXG4gIHZhciBfYnVpbGRTdmdTcGFuXyA9IGJ1aWxkU3ZnU3Bhbl8oKSxcbiAgICAgIHNwYW4gPSBfYnVpbGRTdmdTcGFuXy5zcGFuLFxuICAgICAgbWluV2lkdGggPSBfYnVpbGRTdmdTcGFuXy5taW5XaWR0aCxcbiAgICAgIGhlaWdodCA9IF9idWlsZFN2Z1NwYW5fLmhlaWdodDsgLy8gTm90ZSB0aGF0IHdlIGFyZSByZXR1cm5pbmcgc3Bhbi5kZXB0aCA9IDAuXG4gIC8vIEFueSBhZGp1c3RtZW50cyByZWxhdGl2ZSB0byB0aGUgYmFzZWxpbmUgbXVzdCBiZSBkb25lIGluIGJ1aWxkSFRNTC5cblxuXG4gIHNwYW4uaGVpZ2h0ID0gaGVpZ2h0O1xuICBzcGFuLnN0eWxlLmhlaWdodCA9IGhlaWdodCArIFwiZW1cIjtcblxuICBpZiAobWluV2lkdGggPiAwKSB7XG4gICAgc3Bhbi5zdHlsZS5taW5XaWR0aCA9IG1pbldpZHRoICsgXCJlbVwiO1xuICB9XG5cbiAgcmV0dXJuIHNwYW47XG59O1xuXG52YXIgc3RyZXRjaHlfZW5jbG9zZVNwYW4gPSBmdW5jdGlvbiBlbmNsb3NlU3Bhbihpbm5lciwgbGFiZWwsIHBhZCwgb3B0aW9ucykge1xuICAvLyBSZXR1cm4gYW4gaW1hZ2Ugc3BhbiBmb3IgXFxjYW5jZWwsIFxcYmNhbmNlbCwgXFx4Y2FuY2VsLCBvciBcXGZib3hcbiAgdmFyIGltZztcbiAgdmFyIHRvdGFsSGVpZ2h0ID0gaW5uZXIuaGVpZ2h0ICsgaW5uZXIuZGVwdGggKyAyICogcGFkO1xuXG4gIGlmICgvZmJveHxjb2xvci8udGVzdChsYWJlbCkpIHtcbiAgICBpbWcgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJzdHJldGNoeVwiLCBsYWJlbF0sIFtdLCBvcHRpb25zKTtcblxuICAgIGlmIChsYWJlbCA9PT0gXCJmYm94XCIpIHtcbiAgICAgIHZhciBjb2xvciA9IG9wdGlvbnMuY29sb3IgJiYgb3B0aW9ucy5nZXRDb2xvcigpO1xuXG4gICAgICBpZiAoY29sb3IpIHtcbiAgICAgICAgaW1nLnN0eWxlLmJvcmRlckNvbG9yID0gY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFxcY2FuY2VsLCBcXGJjYW5jZWwsIG9yIFxceGNhbmNlbFxuICAgIC8vIFNpbmNlIFxcY2FuY2VsJ3MgU1ZHIGlzIGlubGluZSBhbmQgaXQgb21pdHMgdGhlIHZpZXdCb3ggYXR0cmlidXRlLFxuICAgIC8vIGl0cyBzdHJva2Utd2lkdGggd2lsbCBub3QgdmFyeSB3aXRoIHNwYW4gYXJlYS5cbiAgICB2YXIgbGluZXMgPSBbXTtcblxuICAgIGlmICgvXltieF1jYW5jZWwkLy50ZXN0KGxhYmVsKSkge1xuICAgICAgbGluZXMucHVzaChuZXcgTGluZU5vZGUoe1xuICAgICAgICBcIngxXCI6IFwiMFwiLFxuICAgICAgICBcInkxXCI6IFwiMFwiLFxuICAgICAgICBcIngyXCI6IFwiMTAwJVwiLFxuICAgICAgICBcInkyXCI6IFwiMTAwJVwiLFxuICAgICAgICBcInN0cm9rZS13aWR0aFwiOiBcIjAuMDQ2ZW1cIlxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlmICgvXng/Y2FuY2VsJC8udGVzdChsYWJlbCkpIHtcbiAgICAgIGxpbmVzLnB1c2gobmV3IExpbmVOb2RlKHtcbiAgICAgICAgXCJ4MVwiOiBcIjBcIixcbiAgICAgICAgXCJ5MVwiOiBcIjEwMCVcIixcbiAgICAgICAgXCJ4MlwiOiBcIjEwMCVcIixcbiAgICAgICAgXCJ5MlwiOiBcIjBcIixcbiAgICAgICAgXCJzdHJva2Utd2lkdGhcIjogXCIwLjA0NmVtXCJcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICB2YXIgc3ZnTm9kZSA9IG5ldyBTdmdOb2RlKGxpbmVzLCB7XG4gICAgICBcIndpZHRoXCI6IFwiMTAwJVwiLFxuICAgICAgXCJoZWlnaHRcIjogdG90YWxIZWlnaHQgKyBcImVtXCJcbiAgICB9KTtcbiAgICBpbWcgPSBidWlsZENvbW1vbi5tYWtlU3ZnU3BhbihbXSwgW3N2Z05vZGVdLCBvcHRpb25zKTtcbiAgfVxuXG4gIGltZy5oZWlnaHQgPSB0b3RhbEhlaWdodDtcbiAgaW1nLnN0eWxlLmhlaWdodCA9IHRvdGFsSGVpZ2h0ICsgXCJlbVwiO1xuICByZXR1cm4gaW1nO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3RyZXRjaHkgPSAoe1xuICBlbmNsb3NlU3Bhbjogc3RyZXRjaHlfZW5jbG9zZVNwYW4sXG4gIG1hdGhNTG5vZGU6IHN0cmV0Y2h5X21hdGhNTG5vZGUsXG4gIHN2Z1NwYW46IHN0cmV0Y2h5X3N2Z1NwYW5cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2FjY2VudC5qc1xuXG5cblxuXG5cblxuXG5cblxuLy8gTk9URTogVW5saWtlIG1vc3QgYGh0bWxCdWlsZGVyYHMsIHRoaXMgb25lIGhhbmRsZXMgbm90IG9ubHkgXCJhY2NlbnRcIiwgYnV0XG52YXIgYWNjZW50X2h0bWxCdWlsZGVyID0gZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JwLCBvcHRpb25zKSB7XG4gIC8vIEFjY2VudHMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgcGcuIDQ0MywgcnVsZSAxMi5cbiAgdmFyIGJhc2U7XG4gIHZhciBncm91cDtcbiAgdmFyIHN1cFN1YiA9IGNoZWNrTm9kZVR5cGUoZ3JwLCBcInN1cHN1YlwiKTtcbiAgdmFyIHN1cFN1Ykdyb3VwO1xuXG4gIGlmIChzdXBTdWIpIHtcbiAgICAvLyBJZiBvdXIgYmFzZSBpcyBhIGNoYXJhY3RlciBib3gsIGFuZCB3ZSBoYXZlIHN1cGVyc2NyaXB0cyBhbmRcbiAgICAvLyBzdWJzY3JpcHRzLCB0aGUgc3Vwc3ViIHdpbGwgZGVmZXIgdG8gdXMuIEluIHBhcnRpY3VsYXIsIHdlIHdhbnRcbiAgICAvLyB0byBhdHRhY2ggdGhlIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cyB0byB0aGUgaW5uZXIgYm9keSAoc29cbiAgICAvLyB0aGF0IHRoZSBwb3NpdGlvbiBvZiB0aGUgc3VwZXJzY3JpcHRzIGFuZCBzdWJzY3JpcHRzIHdvbid0IGJlXG4gICAgLy8gYWZmZWN0ZWQgYnkgdGhlIGhlaWdodCBvZiB0aGUgYWNjZW50KS4gV2UgYWNjb21wbGlzaCB0aGlzIGJ5XG4gICAgLy8gc3RpY2tpbmcgdGhlIGJhc2Ugb2YgdGhlIGFjY2VudCBpbnRvIHRoZSBiYXNlIG9mIHRoZSBzdXBzdWIsIGFuZFxuICAgIC8vIHJlbmRlcmluZyB0aGF0LCB3aGlsZSBrZWVwaW5nIHRyYWNrIG9mIHdoZXJlIHRoZSBhY2NlbnQgaXMuXG4gICAgLy8gVGhlIHJlYWwgYWNjZW50IGdyb3VwIGlzIHRoZSBiYXNlIG9mIHRoZSBzdXBzdWIgZ3JvdXBcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKHN1cFN1Yi5iYXNlLCBcImFjY2VudFwiKTsgLy8gVGhlIGNoYXJhY3RlciBib3ggaXMgdGhlIGJhc2Ugb2YgdGhlIGFjY2VudCBncm91cFxuXG4gICAgYmFzZSA9IGdyb3VwLmJhc2U7IC8vIFN0aWNrIHRoZSBjaGFyYWN0ZXIgYm94IGludG8gdGhlIGJhc2Ugb2YgdGhlIHN1cHN1YiBncm91cFxuXG4gICAgc3VwU3ViLmJhc2UgPSBiYXNlOyAvLyBSZXJlbmRlciB0aGUgc3Vwc3ViIGdyb3VwIHdpdGggaXRzIG5ldyBiYXNlLCBhbmQgc3RvcmUgdGhhdFxuICAgIC8vIHJlc3VsdC5cblxuICAgIHN1cFN1Ykdyb3VwID0gYXNzZXJ0U3BhbihidWlsZEhUTUxfYnVpbGRHcm91cChzdXBTdWIsIG9wdGlvbnMpKTsgLy8gcmVzZXQgb3JpZ2luYWwgYmFzZVxuXG4gICAgc3VwU3ViLmJhc2UgPSBncm91cDtcbiAgfSBlbHNlIHtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKGdycCwgXCJhY2NlbnRcIik7XG4gICAgYmFzZSA9IGdyb3VwLmJhc2U7XG4gIH0gLy8gQnVpbGQgdGhlIGJhc2UgZ3JvdXBcblxuXG4gIHZhciBib2R5ID0gYnVpbGRIVE1MX2J1aWxkR3JvdXAoYmFzZSwgb3B0aW9ucy5oYXZpbmdDcmFtcGVkU3R5bGUoKSk7IC8vIERvZXMgdGhlIGFjY2VudCBuZWVkIHRvIHNoaWZ0IGZvciB0aGUgc2tldyBvZiBhIGNoYXJhY3Rlcj9cblxuICB2YXIgbXVzdFNoaWZ0ID0gZ3JvdXAuaXNTaGlmdHkgJiYgdXRpbHMuaXNDaGFyYWN0ZXJCb3goYmFzZSk7IC8vIENhbGN1bGF0ZSB0aGUgc2tldyBvZiB0aGUgYWNjZW50LiBUaGlzIGlzIGJhc2VkIG9uIHRoZSBsaW5lIFwiSWYgdGhlXG4gIC8vIG51Y2xldXMgaXMgbm90IGEgc2luZ2xlIGNoYXJhY3RlciwgbGV0IHMgPSAwOyBvdGhlcndpc2Ugc2V0IHMgdG8gdGhlXG4gIC8vIGtlcm4gYW1vdW50IGZvciB0aGUgbnVjbGV1cyBmb2xsb3dlZCBieSB0aGUgXFxza2V3Y2hhciBvZiBpdHMgZm9udC5cIlxuICAvLyBOb3RlIHRoYXQgb3VyIHNrZXcgbWV0cmljcyBhcmUganVzdCB0aGUga2VybiBiZXR3ZWVuIGVhY2ggY2hhcmFjdGVyXG4gIC8vIGFuZCB0aGUgc2tld2NoYXIuXG5cbiAgdmFyIHNrZXcgPSAwO1xuXG4gIGlmIChtdXN0U2hpZnQpIHtcbiAgICAvLyBJZiB0aGUgYmFzZSBpcyBhIGNoYXJhY3RlciBib3gsIHRoZW4gd2Ugd2FudCB0aGUgc2tldyBvZiB0aGVcbiAgICAvLyBpbm5lcm1vc3QgY2hhcmFjdGVyLiBUbyBkbyB0aGF0LCB3ZSBmaW5kIHRoZSBpbm5lcm1vc3QgY2hhcmFjdGVyOlxuICAgIHZhciBiYXNlQ2hhciA9IHV0aWxzLmdldEJhc2VFbGVtKGJhc2UpOyAvLyBUaGVuLCB3ZSByZW5kZXIgaXRzIGdyb3VwIHRvIGdldCB0aGUgc3ltYm9sIGluc2lkZSBpdFxuXG4gICAgdmFyIGJhc2VHcm91cCA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKGJhc2VDaGFyLCBvcHRpb25zLmhhdmluZ0NyYW1wZWRTdHlsZSgpKTsgLy8gRmluYWxseSwgd2UgcHVsbCB0aGUgc2tldyBvZmYgb2YgdGhlIHN5bWJvbC5cblxuICAgIHNrZXcgPSBhc3NlcnRTeW1ib2xEb21Ob2RlKGJhc2VHcm91cCkuc2tldzsgLy8gTm90ZSB0aGF0IHdlIG5vdyB0aHJvdyBhd2F5IGJhc2VHcm91cCwgYmVjYXVzZSB0aGUgbGF5ZXJzIHdlXG4gICAgLy8gcmVtb3ZlZCB3aXRoIGdldEJhc2VFbGVtIG1pZ2h0IGNvbnRhaW4gdGhpbmdzIGxpa2UgXFxjb2xvciB3aGljaFxuICAgIC8vIHdlIGNhbid0IGdldCByaWQgb2YuXG4gICAgLy8gVE9ETyhlbWlseSk6IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGdldCB0aGUgc2tld1xuICB9IC8vIGNhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIHNwYWNlIGJldHdlZW4gdGhlIGJvZHkgYW5kIHRoZSBhY2NlbnRcblxuXG4gIHZhciBjbGVhcmFuY2UgPSBNYXRoLm1pbihib2R5LmhlaWdodCwgb3B0aW9ucy5mb250TWV0cmljcygpLnhIZWlnaHQpOyAvLyBCdWlsZCB0aGUgYWNjZW50XG5cbiAgdmFyIGFjY2VudEJvZHk7XG5cbiAgaWYgKCFncm91cC5pc1N0cmV0Y2h5KSB7XG4gICAgdmFyIGFjY2VudDtcbiAgICB2YXIgd2lkdGg7XG5cbiAgICBpZiAoZ3JvdXAubGFiZWwgPT09IFwiXFxcXHZlY1wiKSB7XG4gICAgICAvLyBCZWZvcmUgdmVyc2lvbiAwLjksIFxcdmVjIHVzZWQgdGhlIGNvbWJpbmluZyBmb250IGdseXBoIFUrMjBENy5cbiAgICAgIC8vIEJ1dCBicm93c2VycywgZXNwZWNpYWxseSBTYWZhcmksIGFyZSBub3QgY29uc2lzdGVudCBpbiBob3cgdGhleVxuICAgICAgLy8gcmVuZGVyIGNvbWJpbmluZyBjaGFyYWN0ZXJzIHdoZW4gbm90IHByZWNlZGVkIGJ5IGEgY2hhcmFjdGVyLlxuICAgICAgLy8gU28gbm93IHdlIHVzZSBhbiBTVkcuXG4gICAgICAvLyBJZiBTYWZhcmkgcmVmb3Jtcywgd2Ugc2hvdWxkIGNvbnNpZGVyIHJldmVydGluZyB0byB0aGUgZ2x5cGguXG4gICAgICBhY2NlbnQgPSBidWlsZENvbW1vbi5zdGF0aWNTdmcoXCJ2ZWNcIiwgb3B0aW9ucyk7XG4gICAgICB3aWR0aCA9IGJ1aWxkQ29tbW9uLnN2Z0RhdGEudmVjWzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBhY2NlbnQgPSBidWlsZENvbW1vbi5tYWtlU3ltYm9sKGdyb3VwLmxhYmVsLCBcIk1haW4tUmVndWxhclwiLCBncm91cC5tb2RlLCBvcHRpb25zKTsgLy8gUmVtb3ZlIHRoZSBpdGFsaWMgY29ycmVjdGlvbiBvZiB0aGUgYWNjZW50LCBiZWNhdXNlIGl0IG9ubHkgc2VydmVzIHRvXG4gICAgICAvLyBzaGlmdCB0aGUgYWNjZW50IG92ZXIgdG8gYSBwbGFjZSB3ZSBkb24ndCB3YW50LlxuXG4gICAgICBhY2NlbnQuaXRhbGljID0gMDtcbiAgICAgIHdpZHRoID0gYWNjZW50LndpZHRoO1xuICAgIH1cblxuICAgIGFjY2VudEJvZHkgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJhY2NlbnQtYm9keVwiXSwgW2FjY2VudF0pOyAvLyBcIkZ1bGxcIiBhY2NlbnRzIGV4cGFuZCB0aGUgd2lkdGggb2YgdGhlIHJlc3VsdGluZyBzeW1ib2wgdG8gYmVcbiAgICAvLyBhdCBsZWFzdCB0aGUgd2lkdGggb2YgdGhlIGFjY2VudCwgYW5kIG92ZXJsYXAgZGlyZWN0bHkgb250byB0aGVcbiAgICAvLyBjaGFyYWN0ZXIgd2l0aG91dCBhbnkgdmVydGljYWwgb2Zmc2V0LlxuXG4gICAgdmFyIGFjY2VudEZ1bGwgPSBncm91cC5sYWJlbCA9PT0gXCJcXFxcdGV4dGNpcmNsZWRcIjtcblxuICAgIGlmIChhY2NlbnRGdWxsKSB7XG4gICAgICBhY2NlbnRCb2R5LmNsYXNzZXMucHVzaCgnYWNjZW50LWZ1bGwnKTtcbiAgICAgIGNsZWFyYW5jZSA9IGJvZHkuaGVpZ2h0O1xuICAgIH0gLy8gU2hpZnQgdGhlIGFjY2VudCBvdmVyIGJ5IHRoZSBza2V3LlxuXG5cbiAgICB2YXIgbGVmdCA9IHNrZXc7IC8vIENTUyBkZWZpbmVzIGAua2F0ZXggLmFjY2VudCAuYWNjZW50LWJvZHk6bm90KC5hY2NlbnQtZnVsbCkgeyB3aWR0aDogMCB9YFxuICAgIC8vIHNvIHRoYXQgdGhlIGFjY2VudCBkb2Vzbid0IGNvbnRyaWJ1dGUgdG8gdGhlIGJvdW5kaW5nIGJveC5cbiAgICAvLyBXZSBuZWVkIHRvIHNoaWZ0IHRoZSBjaGFyYWN0ZXIgYnkgaXRzIHdpZHRoIChlZmZlY3RpdmVseSBoYWxmXG4gICAgLy8gaXRzIHdpZHRoKSB0byBjb21wZW5zYXRlLlxuXG4gICAgaWYgKCFhY2NlbnRGdWxsKSB7XG4gICAgICBsZWZ0IC09IHdpZHRoIC8gMjtcbiAgICB9XG5cbiAgICBhY2NlbnRCb2R5LnN0eWxlLmxlZnQgPSBsZWZ0ICsgXCJlbVwiOyAvLyBcXHRleHRjaXJjbGVkIHVzZXMgdGhlIFxcYmlnY2lyYyBnbHlwaCwgc28gaXQgbmVlZHMgc29tZVxuICAgIC8vIHZlcnRpY2FsIGFkanVzdG1lbnQgdG8gbWF0Y2ggTGFUZVguXG5cbiAgICBpZiAoZ3JvdXAubGFiZWwgPT09IFwiXFxcXHRleHRjaXJjbGVkXCIpIHtcbiAgICAgIGFjY2VudEJvZHkuc3R5bGUudG9wID0gXCIuMmVtXCI7XG4gICAgfVxuXG4gICAgYWNjZW50Qm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBib2R5XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiAtY2xlYXJhbmNlXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBhY2NlbnRCb2R5XG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIGFjY2VudEJvZHkgPSBzdHJldGNoeS5zdmdTcGFuKGdyb3VwLCBvcHRpb25zKTtcbiAgICBhY2NlbnRCb2R5ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJmaXJzdEJhc2VsaW5lXCIsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJvZHlcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGFjY2VudEJvZHksXG4gICAgICAgIHdyYXBwZXJDbGFzc2VzOiBbXCJzdmctYWxpZ25cIl0sXG4gICAgICAgIHdyYXBwZXJTdHlsZTogc2tldyA+IDAgPyB7XG4gICAgICAgICAgd2lkdGg6IFwiY2FsYygxMDAlIC0gXCIgKyAyICogc2tldyArIFwiZW0pXCIsXG4gICAgICAgICAgbWFyZ2luTGVmdDogMiAqIHNrZXcgKyBcImVtXCJcbiAgICAgICAgfSA6IHVuZGVmaW5lZFxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfVxuXG4gIHZhciBhY2NlbnRXcmFwID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcImFjY2VudFwiXSwgW2FjY2VudEJvZHldLCBvcHRpb25zKTtcblxuICBpZiAoc3VwU3ViR3JvdXApIHtcbiAgICAvLyBIZXJlLCB3ZSByZXBsYWNlIHRoZSBcImJhc2VcIiBjaGlsZCBvZiB0aGUgc3Vwc3ViIHdpdGggb3VyIG5ld2x5XG4gICAgLy8gZ2VuZXJhdGVkIGFjY2VudC5cbiAgICBzdXBTdWJHcm91cC5jaGlsZHJlblswXSA9IGFjY2VudFdyYXA7IC8vIFNpbmNlIHdlIGRvbid0IHJlcnVuIHRoZSBoZWlnaHQgY2FsY3VsYXRpb24gYWZ0ZXIgcmVwbGFjaW5nIHRoZVxuICAgIC8vIGFjY2VudCwgd2UgbWFudWFsbHkgcmVjYWxjdWxhdGUgaGVpZ2h0LlxuXG4gICAgc3VwU3ViR3JvdXAuaGVpZ2h0ID0gTWF0aC5tYXgoYWNjZW50V3JhcC5oZWlnaHQsIHN1cFN1Ykdyb3VwLmhlaWdodCk7IC8vIEFjY2VudHMgc2hvdWxkIGFsd2F5cyBiZSBvcmRzLCBldmVuIHdoZW4gdGhlaXIgaW5uYXJkcyBhcmUgbm90LlxuXG4gICAgc3VwU3ViR3JvdXAuY2xhc3Nlc1swXSA9IFwibW9yZFwiO1xuICAgIHJldHVybiBzdXBTdWJHcm91cDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYWNjZW50V3JhcDtcbiAgfVxufTtcblxudmFyIGFjY2VudF9tYXRobWxCdWlsZGVyID0gZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICB2YXIgYWNjZW50Tm9kZSA9IGdyb3VwLmlzU3RyZXRjaHkgPyBzdHJldGNoeS5tYXRoTUxub2RlKGdyb3VwLmxhYmVsKSA6IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW2J1aWxkTWF0aE1MX21ha2VUZXh0KGdyb3VwLmxhYmVsLCBncm91cC5tb2RlKV0pO1xuICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW92ZXJcIiwgW2J1aWxkTWF0aE1MX2J1aWxkR3JvdXAoZ3JvdXAuYmFzZSwgb3B0aW9ucyksIGFjY2VudE5vZGVdKTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJhY2NlbnRcIiwgXCJ0cnVlXCIpO1xuICByZXR1cm4gbm9kZTtcbn07XG5cbnZhciBOT05fU1RSRVRDSFlfQUNDRU5UX1JFR0VYID0gbmV3IFJlZ0V4cChbXCJcXFxcYWN1dGVcIiwgXCJcXFxcZ3JhdmVcIiwgXCJcXFxcZGRvdFwiLCBcIlxcXFx0aWxkZVwiLCBcIlxcXFxiYXJcIiwgXCJcXFxcYnJldmVcIiwgXCJcXFxcY2hlY2tcIiwgXCJcXFxcaGF0XCIsIFwiXFxcXHZlY1wiLCBcIlxcXFxkb3RcIiwgXCJcXFxcbWF0aHJpbmdcIl0ubWFwKGZ1bmN0aW9uIChhY2NlbnQpIHtcbiAgcmV0dXJuIFwiXFxcXFwiICsgYWNjZW50O1xufSkuam9pbihcInxcIikpOyAvLyBBY2NlbnRzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJhY2NlbnRcIixcbiAgbmFtZXM6IFtcIlxcXFxhY3V0ZVwiLCBcIlxcXFxncmF2ZVwiLCBcIlxcXFxkZG90XCIsIFwiXFxcXHRpbGRlXCIsIFwiXFxcXGJhclwiLCBcIlxcXFxicmV2ZVwiLCBcIlxcXFxjaGVja1wiLCBcIlxcXFxoYXRcIiwgXCJcXFxcdmVjXCIsIFwiXFxcXGRvdFwiLCBcIlxcXFxtYXRocmluZ1wiLCBcIlxcXFx3aWRlY2hlY2tcIiwgXCJcXFxcd2lkZWhhdFwiLCBcIlxcXFx3aWRldGlsZGVcIiwgXCJcXFxcb3ZlcnJpZ2h0YXJyb3dcIiwgXCJcXFxcb3ZlcmxlZnRhcnJvd1wiLCBcIlxcXFxPdmVycmlnaHRhcnJvd1wiLCBcIlxcXFxvdmVybGVmdHJpZ2h0YXJyb3dcIiwgXCJcXFxcb3Zlcmdyb3VwXCIsIFwiXFxcXG92ZXJsaW5lc2VnbWVudFwiLCBcIlxcXFxvdmVybGVmdGhhcnBvb25cIiwgXCJcXFxcb3ZlcnJpZ2h0aGFycG9vblwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoY29udGV4dCwgYXJncykge1xuICAgIHZhciBiYXNlID0gYXJnc1swXTtcbiAgICB2YXIgaXNTdHJldGNoeSA9ICFOT05fU1RSRVRDSFlfQUNDRU5UX1JFR0VYLnRlc3QoY29udGV4dC5mdW5jTmFtZSk7XG4gICAgdmFyIGlzU2hpZnR5ID0gIWlzU3RyZXRjaHkgfHwgY29udGV4dC5mdW5jTmFtZSA9PT0gXCJcXFxcd2lkZWhhdFwiIHx8IGNvbnRleHQuZnVuY05hbWUgPT09IFwiXFxcXHdpZGV0aWxkZVwiIHx8IGNvbnRleHQuZnVuY05hbWUgPT09IFwiXFxcXHdpZGVjaGVja1wiO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImFjY2VudFwiLFxuICAgICAgbW9kZTogY29udGV4dC5wYXJzZXIubW9kZSxcbiAgICAgIGxhYmVsOiBjb250ZXh0LmZ1bmNOYW1lLFxuICAgICAgaXNTdHJldGNoeTogaXNTdHJldGNoeSxcbiAgICAgIGlzU2hpZnR5OiBpc1NoaWZ0eSxcbiAgICAgIGJhc2U6IGJhc2VcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogYWNjZW50X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhY2NlbnRfbWF0aG1sQnVpbGRlclxufSk7IC8vIFRleHQtbW9kZSBhY2NlbnRzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJhY2NlbnRcIixcbiAgbmFtZXM6IFtcIlxcXFwnXCIsIFwiXFxcXGBcIiwgXCJcXFxcXlwiLCBcIlxcXFx+XCIsIFwiXFxcXD1cIiwgXCJcXFxcdVwiLCBcIlxcXFwuXCIsICdcXFxcXCInLCBcIlxcXFxyXCIsIFwiXFxcXEhcIiwgXCJcXFxcdlwiLCBcIlxcXFx0ZXh0Y2lyY2xlZFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgYWxsb3dlZEluTWF0aDogZmFsc2VcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gICAgdmFyIGJhc2UgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImFjY2VudFwiLFxuICAgICAgbW9kZTogY29udGV4dC5wYXJzZXIubW9kZSxcbiAgICAgIGxhYmVsOiBjb250ZXh0LmZ1bmNOYW1lLFxuICAgICAgaXNTdHJldGNoeTogZmFsc2UsXG4gICAgICBpc1NoaWZ0eTogdHJ1ZSxcbiAgICAgIGJhc2U6IGJhc2VcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogYWNjZW50X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhY2NlbnRfbWF0aG1sQnVpbGRlclxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvYWNjZW50dW5kZXIuanNcbi8vIEhvcml6b250YWwgb3ZlcmxhcCBmdW5jdGlvbnNcblxuXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJhY2NlbnRVbmRlclwiLFxuICBuYW1lczogW1wiXFxcXHVuZGVybGVmdGFycm93XCIsIFwiXFxcXHVuZGVycmlnaHRhcnJvd1wiLCBcIlxcXFx1bmRlcmxlZnRyaWdodGFycm93XCIsIFwiXFxcXHVuZGVyZ3JvdXBcIiwgXCJcXFxcdW5kZXJsaW5lc2VnbWVudFwiLCBcIlxcXFx1dGlsZGVcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZi5wYXJzZXIsXG4gICAgICAgIGZ1bmNOYW1lID0gX3JlZi5mdW5jTmFtZTtcbiAgICB2YXIgYmFzZSA9IGFyZ3NbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiYWNjZW50VW5kZXJcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGFiZWw6IGZ1bmNOYW1lLFxuICAgICAgYmFzZTogYmFzZVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIFRyZWF0IHVuZGVyIGFjY2VudHMgbXVjaCBsaWtlIHVuZGVybGluZXMuXG4gICAgdmFyIGlubmVyR3JvdXAgPSBidWlsZEhUTUxfYnVpbGRHcm91cChncm91cC5iYXNlLCBvcHRpb25zKTtcbiAgICB2YXIgYWNjZW50Qm9keSA9IHN0cmV0Y2h5LnN2Z1NwYW4oZ3JvdXAsIG9wdGlvbnMpO1xuICAgIHZhciBrZXJuID0gZ3JvdXAubGFiZWwgPT09IFwiXFxcXHV0aWxkZVwiID8gMC4xMiA6IDA7IC8vIEdlbmVyYXRlIHRoZSB2bGlzdCwgd2l0aCB0aGUgYXBwcm9wcmlhdGUga2VybnNcblxuICAgIHZhciB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IGFjY2VudEJvZHkuaGVpZ2h0ICsga2VybixcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogYWNjZW50Qm9keSxcbiAgICAgICAgd3JhcHBlckNsYXNzZXM6IFtcInN2Zy1hbGlnblwiXVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZToga2VyblxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogaW5uZXJHcm91cFxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcImFjY2VudHVuZGVyXCJdLCBbdmxpc3RdLCBvcHRpb25zKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBhY2NlbnROb2RlID0gc3RyZXRjaHkubWF0aE1Mbm9kZShncm91cC5sYWJlbCk7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm11bmRlclwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5iYXNlLCBvcHRpb25zKSwgYWNjZW50Tm9kZV0pO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiYWNjZW50dW5kZXJcIiwgXCJ0cnVlXCIpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9hcnJvdy5qc1xuXG5cblxuXG5cblxuXG4vLyBIZWxwZXIgZnVuY3Rpb25cbnZhciBhcnJvd19wYWRkZWROb2RlID0gZnVuY3Rpb24gcGFkZGVkTm9kZShncm91cCkge1xuICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBncm91cCA/IFtncm91cF0gOiBbXSk7XG4gIG5vZGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgXCIrMC42ZW1cIik7XG4gIG5vZGUuc2V0QXR0cmlidXRlKFwibHNwYWNlXCIsIFwiMC4zZW1cIik7XG4gIHJldHVybiBub2RlO1xufTsgLy8gU3RyZXRjaHkgYXJyb3dzIHdpdGggYW4gb3B0aW9uYWwgYXJndW1lbnRcblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwieEFycm93XCIsXG4gIG5hbWVzOiBbXCJcXFxceGxlZnRhcnJvd1wiLCBcIlxcXFx4cmlnaHRhcnJvd1wiLCBcIlxcXFx4TGVmdGFycm93XCIsIFwiXFxcXHhSaWdodGFycm93XCIsIFwiXFxcXHhsZWZ0cmlnaHRhcnJvd1wiLCBcIlxcXFx4TGVmdHJpZ2h0YXJyb3dcIiwgXCJcXFxceGhvb2tsZWZ0YXJyb3dcIiwgXCJcXFxceGhvb2tyaWdodGFycm93XCIsIFwiXFxcXHhtYXBzdG9cIiwgXCJcXFxceHJpZ2h0aGFycG9vbmRvd25cIiwgXCJcXFxceHJpZ2h0aGFycG9vbnVwXCIsIFwiXFxcXHhsZWZ0aGFycG9vbmRvd25cIiwgXCJcXFxceGxlZnRoYXJwb29udXBcIiwgXCJcXFxceHJpZ2h0bGVmdGhhcnBvb25zXCIsIFwiXFxcXHhsZWZ0cmlnaHRoYXJwb29uc1wiLCBcIlxcXFx4bG9uZ2VxdWFsXCIsIFwiXFxcXHh0d29oZWFkcmlnaHRhcnJvd1wiLCBcIlxcXFx4dHdvaGVhZGxlZnRhcnJvd1wiLCBcIlxcXFx4dG9mcm9tXCIsIC8vIFRoZSBuZXh0IDMgZnVuY3Rpb25zIGFyZSBoZXJlIHRvIHN1cHBvcnQgdGhlIG1oY2hlbSBleHRlbnNpb24uXG4gIC8vIERpcmVjdCB1c2Ugb2YgdGhlc2UgZnVuY3Rpb25zIGlzIGRpc2NvdXJhZ2VkIGFuZCBtYXkgYnJlYWsgc29tZWRheS5cbiAgXCJcXFxceHJpZ2h0bGVmdGFycm93c1wiLCBcIlxcXFx4cmlnaHRlcXVpbGlicml1bVwiLCBcIlxcXFx4bGVmdGVxdWlsaWJyaXVtXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgbnVtT3B0aW9uYWxBcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInhBcnJvd1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBib2R5OiBhcmdzWzBdLFxuICAgICAgYmVsb3c6IG9wdEFyZ3NbMF1cbiAgICB9O1xuICB9LFxuICAvLyBGbG93IGlzIHVuYWJsZSB0byBjb3JyZWN0bHkgaW5mZXIgdGhlIHR5cGUgb2YgYGdyb3VwYCwgZXZlbiB0aG91Z2ggaXQnc1xuICAvLyB1bmFtaWJpZ3VvdXNseSBkZXRlcm1pbmVkIGZyb20gdGhlIHBhc3NlZC1pbiBgdHlwZWAgYWJvdmUuXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBzdHlsZSA9IG9wdGlvbnMuc3R5bGU7IC8vIEJ1aWxkIHRoZSBhcmd1bWVudCBncm91cHMgaW4gdGhlIGFwcHJvcHJpYXRlIHN0eWxlLlxuICAgIC8vIFJlZjogYW1zbWF0aC5kdHg6ICAgXFxoYm94eyRcXHNjcmlwdHN0eWxlXFxta2VybiMzbXV7IzZ9XFxta2VybiM0bXUkfSVcbiAgICAvLyBTb21lIGdyb3VwcyBjYW4gcmV0dXJuIGRvY3VtZW50IGZyYWdtZW50cy4gIEhhbmRsZSB0aG9zZSBieSB3cmFwcGluZ1xuICAgIC8vIHRoZW0gaW4gYSBzcGFuLlxuXG4gICAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlLnN1cCgpKTtcbiAgICB2YXIgdXBwZXJHcm91cCA9IGJ1aWxkQ29tbW9uLndyYXBGcmFnbWVudChidWlsZEhUTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBuZXdPcHRpb25zLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgdXBwZXJHcm91cC5jbGFzc2VzLnB1c2goXCJ4LWFycm93LXBhZFwiKTtcbiAgICB2YXIgbG93ZXJHcm91cDtcblxuICAgIGlmIChncm91cC5iZWxvdykge1xuICAgICAgLy8gQnVpbGQgdGhlIGxvd2VyIGdyb3VwXG4gICAgICBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShzdHlsZS5zdWIoKSk7XG4gICAgICBsb3dlckdyb3VwID0gYnVpbGRDb21tb24ud3JhcEZyYWdtZW50KGJ1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJlbG93LCBuZXdPcHRpb25zLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgICBsb3dlckdyb3VwLmNsYXNzZXMucHVzaChcIngtYXJyb3ctcGFkXCIpO1xuICAgIH1cblxuICAgIHZhciBhcnJvd0JvZHkgPSBzdHJldGNoeS5zdmdTcGFuKGdyb3VwLCBvcHRpb25zKTsgLy8gUmUgc2hpZnQ6IE5vdGUgdGhhdCBzdHJldGNoeS5zdmdTcGFuIHJldHVybmVkIGFycm93Qm9keS5kZXB0aCA9IDAuXG4gICAgLy8gVGhlIHBvaW50IHdlIHdhbnQgb24gdGhlIG1hdGggYXhpcyBpcyBhdCAwLjUgKiBhcnJvd0JvZHkuaGVpZ2h0LlxuXG4gICAgdmFyIGFycm93U2hpZnQgPSAtb3B0aW9ucy5mb250TWV0cmljcygpLmF4aXNIZWlnaHQgKyAwLjUgKiBhcnJvd0JvZHkuaGVpZ2h0OyAvLyAyIG11IGtlcm4uIFJlZjogYW1zbWF0aC5kdHg6ICM3XFxpZjAjMlxcZWxzZVxcbWtlcm4jMm11XFxmaVxuXG4gICAgdmFyIHVwcGVyU2hpZnQgPSAtb3B0aW9ucy5mb250TWV0cmljcygpLmF4aXNIZWlnaHQgLSAwLjUgKiBhcnJvd0JvZHkuaGVpZ2h0IC0gMC4xMTE7IC8vIDAuMTExIGVtID0gMiBtdVxuXG4gICAgaWYgKHVwcGVyR3JvdXAuZGVwdGggPiAwLjI1IHx8IGdyb3VwLmxhYmVsID09PSBcIlxcXFx4bGVmdGVxdWlsaWJyaXVtXCIpIHtcbiAgICAgIHVwcGVyU2hpZnQgLT0gdXBwZXJHcm91cC5kZXB0aDsgLy8gc2hpZnQgdXAgaWYgZGVwdGggZW5jcm9hY2hlc1xuICAgIH0gLy8gR2VuZXJhdGUgdGhlIHZsaXN0XG5cblxuICAgIHZhciB2bGlzdDtcblxuICAgIGlmIChsb3dlckdyb3VwKSB7XG4gICAgICB2YXIgbG93ZXJTaGlmdCA9IC1vcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCArIGxvd2VyR3JvdXAuaGVpZ2h0ICsgMC41ICogYXJyb3dCb2R5LmhlaWdodCArIDAuMTExO1xuICAgICAgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IHVwcGVyR3JvdXAsXG4gICAgICAgICAgc2hpZnQ6IHVwcGVyU2hpZnRcbiAgICAgICAgfSwge1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IGFycm93Qm9keSxcbiAgICAgICAgICBzaGlmdDogYXJyb3dTaGlmdFxuICAgICAgICB9LCB7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogbG93ZXJHcm91cCxcbiAgICAgICAgICBzaGlmdDogbG93ZXJTaGlmdFxuICAgICAgICB9XVxuICAgICAgfSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiB1cHBlckdyb3VwLFxuICAgICAgICAgIHNoaWZ0OiB1cHBlclNoaWZ0XG4gICAgICAgIH0sIHtcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBhcnJvd0JvZHksXG4gICAgICAgICAgc2hpZnQ6IGFycm93U2hpZnRcbiAgICAgICAgfV1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH0gLy8gJEZsb3dGaXhNZTogUmVwbGFjZSB0aGlzIHdpdGggcGFzc2luZyBcInN2Zy1hbGlnblwiIGludG8gbWFrZVZMaXN0LlxuXG5cbiAgICB2bGlzdC5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jaGlsZHJlblsxXS5jbGFzc2VzLnB1c2goXCJzdmctYWxpZ25cIik7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1yZWxcIiwgXCJ4LWFycm93XCJdLCBbdmxpc3RdLCBvcHRpb25zKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBhcnJvd05vZGUgPSBzdHJldGNoeS5tYXRoTUxub2RlKGdyb3VwLmxhYmVsKTtcbiAgICB2YXIgbm9kZTtcblxuICAgIGlmIChncm91cC5ib2R5KSB7XG4gICAgICB2YXIgdXBwZXJOb2RlID0gYXJyb3dfcGFkZGVkTm9kZShidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpKTtcblxuICAgICAgaWYgKGdyb3VwLmJlbG93KSB7XG4gICAgICAgIHZhciBsb3dlck5vZGUgPSBhcnJvd19wYWRkZWROb2RlKGJ1aWxkTWF0aE1MX2J1aWxkR3JvdXAoZ3JvdXAuYmVsb3csIG9wdGlvbnMpKTtcbiAgICAgICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXVuZGVyb3ZlclwiLCBbYXJyb3dOb2RlLCBsb3dlck5vZGUsIHVwcGVyTm9kZV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW92ZXJcIiwgW2Fycm93Tm9kZSwgdXBwZXJOb2RlXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChncm91cC5iZWxvdykge1xuICAgICAgdmFyIF9sb3dlck5vZGUgPSBhcnJvd19wYWRkZWROb2RlKGJ1aWxkTWF0aE1MX2J1aWxkR3JvdXAoZ3JvdXAuYmVsb3csIG9wdGlvbnMpKTtcblxuICAgICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXVuZGVyXCIsIFthcnJvd05vZGUsIF9sb3dlck5vZGVdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLlxuICAgICAgLy8gUGFyc2VyLmpzIHRocm93cyBhbiBlcnJvciBpZiB0aGVyZSBpcyBubyBhcmd1bWVudC5cbiAgICAgIG5vZGUgPSBhcnJvd19wYWRkZWROb2RlKCk7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb3ZlclwiLCBbYXJyb3dOb2RlLCBub2RlXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2NoYXIuanNcblxuXG4gLy8gXFxAY2hhciBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiB0aGF0IHRha2VzIGEgZ3JvdXBlZCBkZWNpbWFsIGFyZ3VtZW50IGxpa2Vcbi8vIHsxMjN9IGFuZCBjb252ZXJ0cyBpbnRvIHN5bWJvbCB3aXRoIGNvZGUgMTIzLiAgSXQgaXMgdXNlZCBieSB0aGUgKm1hY3JvKlxuLy8gXFxjaGFyIGRlZmluZWQgaW4gbWFjcm9zLmpzLlxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidGV4dG9yZFwiLFxuICBuYW1lczogW1wiXFxcXEBjaGFyXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZi5wYXJzZXI7XG4gICAgdmFyIGFyZyA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwib3JkZ3JvdXBcIik7XG4gICAgdmFyIGdyb3VwID0gYXJnLmJvZHk7XG4gICAgdmFyIG51bWJlciA9IFwiXCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyb3VwLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbm9kZSA9IGFzc2VydE5vZGVUeXBlKGdyb3VwW2ldLCBcInRleHRvcmRcIik7XG4gICAgICBudW1iZXIgKz0gbm9kZS50ZXh0O1xuICAgIH1cblxuICAgIHZhciBjb2RlID0gcGFyc2VJbnQobnVtYmVyKTtcblxuICAgIGlmIChpc05hTihjb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiXFxcXEBjaGFyIGhhcyBub24tbnVtZXJpYyBhcmd1bWVudCBcIiArIG51bWJlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwidGV4dG9yZFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICB0ZXh0OiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgfTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvY29sb3IuanNcblxuXG5cblxuXG5cblxudmFyIGNvbG9yX2h0bWxCdWlsZGVyID0gZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIGVsZW1lbnRzID0gYnVpbGRIVE1MX2J1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zLndpdGhDb2xvcihncm91cC5jb2xvciksIGZhbHNlKTsgLy8gXFxjb2xvciBpc24ndCBzdXBwb3NlZCB0byBhZmZlY3QgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnRzIGl0IGNvbnRhaW5zLlxuICAvLyBUbyBhY2NvbXBsaXNoIHRoaXMsIHdlIHdyYXAgdGhlIHJlc3VsdHMgaW4gYSBmcmFnbWVudCwgc28gdGhlIGlubmVyXG4gIC8vIGVsZW1lbnRzIHdpbGwgYmUgYWJsZSB0byBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIHRoZWlyIG5laWdoYm9ycy4gRm9yXG4gIC8vIGV4YW1wbGUsIGBcXGNvbG9ye3JlZH17MiArfSAzYCBoYXMgdGhlIHNhbWUgc3BhY2luZyBhcyBgMiArIDNgXG5cbiAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VGcmFnbWVudChlbGVtZW50cyk7XG59O1xuXG52YXIgY29sb3JfbWF0aG1sQnVpbGRlciA9IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIGlubmVyID0gYnVpbGRNYXRoTUxfYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMud2l0aENvbG9yKGdyb3VwLmNvbG9yKSk7XG4gIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3R5bGVcIiwgaW5uZXIpO1xuICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGhjb2xvclwiLCBncm91cC5jb2xvcik7XG4gIHJldHVybiBub2RlO1xufTtcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImNvbG9yXCIsXG4gIG5hbWVzOiBbXCJcXFxcdGV4dGNvbG9yXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZSxcbiAgICBncmVlZGluZXNzOiAzLFxuICAgIGFyZ1R5cGVzOiBbXCJjb2xvclwiLCBcIm9yaWdpbmFsXCJdXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICB2YXIgY29sb3IgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcImNvbG9yLXRva2VuXCIpLmNvbG9yO1xuICAgIHZhciBib2R5ID0gYXJnc1sxXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJjb2xvclwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBjb2xvcjogY29sb3IsXG4gICAgICBib2R5OiBkZWZpbmVGdW5jdGlvbl9vcmRhcmd1bWVudChib2R5KVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBjb2xvcl9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogY29sb3JfbWF0aG1sQnVpbGRlclxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiY29sb3JcIixcbiAgbmFtZXM6IFtcIlxcXFxjb2xvclwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgZ3JlZWRpbmVzczogMyxcbiAgICBhcmdUeXBlczogW1wiY29sb3JcIl1cbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmMiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmMi5wYXJzZXIsXG4gICAgICAgIGJyZWFrT25Ub2tlblRleHQgPSBfcmVmMi5icmVha09uVG9rZW5UZXh0O1xuICAgIHZhciBjb2xvciA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwiY29sb3ItdG9rZW5cIikuY29sb3I7IC8vIFNldCBtYWNybyBcXGN1cnJlbnRAY29sb3IgaW4gY3VycmVudCBuYW1lc3BhY2UgdG8gc3RvcmUgdGhlIGN1cnJlbnRcbiAgICAvLyBjb2xvciwgbWltaWNraW5nIHRoZSBiZWhhdmlvciBvZiBjb2xvci5zdHkuXG4gICAgLy8gVGhpcyBpcyBjdXJyZW50bHkgdXNlZCBqdXN0IHRvIGNvcnJlY3RseSBjb2xvciBhIFxccmlnaHRcbiAgICAvLyB0aGF0IGZvbGxvd3MgYSBcXGNvbG9yIGNvbW1hbmQuXG5cbiAgICBwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5zZXQoXCJcXFxcY3VycmVudEBjb2xvclwiLCBjb2xvcik7IC8vIFBhcnNlIG91dCB0aGUgaW1wbGljaXQgYm9keSB0aGF0IHNob3VsZCBiZSBjb2xvcmVkLlxuXG4gICAgdmFyIGJvZHkgPSBwYXJzZXIucGFyc2VFeHByZXNzaW9uKHRydWUsIGJyZWFrT25Ub2tlblRleHQpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImNvbG9yXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgIGJvZHk6IGJvZHlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogY29sb3JfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGNvbG9yX21hdGhtbEJ1aWxkZXJcbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2NyLmpzXG4vLyBSb3cgYnJlYWtzIHdpdGhpbiB0YWJ1bGFyIGVudmlyb25tZW50cywgYW5kIGxpbmUgYnJlYWtzIGF0IHRvcCBsZXZlbFxuXG5cblxuXG5cbiAvLyBcXFxcIGlzIGEgbWFjcm8gbWFwcGluZyB0byBlaXRoZXIgXFxjciBvciBcXG5ld2xpbmUuICBCZWNhdXNlIHRoZXkgaGF2ZSB0aGVcbi8vIHNhbWUgc2lnbmF0dXJlLCB3ZSBpbXBsZW1lbnQgdGhlbSBhcyBvbmUgbWVnYWZ1bmN0aW9uLCB3aXRoIG5ld1Jvd1xuLy8gaW5kaWNhdGluZyB3aGV0aGVyIHdlJ3JlIGluIHRoZSBcXGNyIGNhc2UsIGFuZCBuZXdMaW5lIGluZGljYXRpbmcgd2hldGhlclxuLy8gdG8gYnJlYWsgdGhlIGxpbmUgaW4gdGhlIFxcbmV3bGluZSBjYXNlLlxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiY3JcIixcbiAgbmFtZXM6IFtcIlxcXFxjclwiLCBcIlxcXFxuZXdsaW5lXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgbnVtT3B0aW9uYWxBcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJzaXplXCJdLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzLCBvcHRBcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWYuZnVuY05hbWU7XG4gICAgdmFyIHNpemUgPSBvcHRBcmdzWzBdO1xuICAgIHZhciBuZXdSb3cgPSBmdW5jTmFtZSA9PT0gXCJcXFxcY3JcIjtcbiAgICB2YXIgbmV3TGluZSA9IGZhbHNlO1xuXG4gICAgaWYgKCFuZXdSb3cpIHtcbiAgICAgIGlmIChwYXJzZXIuc2V0dGluZ3MuZGlzcGxheU1vZGUgJiYgcGFyc2VyLnNldHRpbmdzLnVzZVN0cmljdEJlaGF2aW9yKFwibmV3TGluZUluRGlzcGxheU1vZGVcIiwgXCJJbiBMYVRlWCwgXFxcXFxcXFwgb3IgXFxcXG5ld2xpbmUgXCIgKyBcImRvZXMgbm90aGluZyBpbiBkaXNwbGF5IG1vZGVcIikpIHtcbiAgICAgICAgbmV3TGluZSA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3TGluZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiY3JcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbmV3TGluZTogbmV3TGluZSxcbiAgICAgIG5ld1JvdzogbmV3Um93LFxuICAgICAgc2l6ZTogc2l6ZSAmJiBhc3NlcnROb2RlVHlwZShzaXplLCBcInNpemVcIikudmFsdWVcbiAgICB9O1xuICB9LFxuICAvLyBUaGUgZm9sbG93aW5nIGJ1aWxkZXJzIGFyZSBjYWxsZWQgb25seSBhdCB0aGUgdG9wIGxldmVsLFxuICAvLyBub3Qgd2l0aGluIHRhYnVsYXIvYXJyYXkgZW52aXJvbm1lbnRzLlxuICBodG1sQnVpbGRlcjogZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICBpZiAoZ3JvdXAubmV3Um93KSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJcXFxcY3IgdmFsaWQgb25seSB3aXRoaW4gYSB0YWJ1bGFyL2FycmF5IGVudmlyb25tZW50XCIpO1xuICAgIH1cblxuICAgIHZhciBzcGFuID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibXNwYWNlXCJdLCBbXSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoZ3JvdXAubmV3TGluZSkge1xuICAgICAgc3Bhbi5jbGFzc2VzLnB1c2goXCJuZXdsaW5lXCIpO1xuXG4gICAgICBpZiAoZ3JvdXAuc2l6ZSkge1xuICAgICAgICBzcGFuLnN0eWxlLm1hcmdpblRvcCA9IHVuaXRzX2NhbGN1bGF0ZVNpemUoZ3JvdXAuc2l6ZSwgb3B0aW9ucykgKyBcImVtXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNwYW47XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXNwYWNlXCIpO1xuXG4gICAgaWYgKGdyb3VwLm5ld0xpbmUpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibGluZWJyZWFrXCIsIFwibmV3bGluZVwiKTtcblxuICAgICAgaWYgKGdyb3VwLnNpemUpIHtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgdW5pdHNfY2FsY3VsYXRlU2l6ZShncm91cC5zaXplLCBvcHRpb25zKSArIFwiZW1cIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZGVsaW1pdGVyLmpzXG4vKipcbiAqIFRoaXMgZmlsZSBkZWFscyB3aXRoIGNyZWF0aW5nIGRlbGltaXRlcnMgb2YgdmFyaW91cyBzaXplcy4gVGhlIFRlWGJvb2tcbiAqIGRpc2N1c3NlcyB0aGVzZSByb3V0aW5lcyBvbiBwYWdlIDQ0MS00NDIsIGluIHRoZSBcIkFub3RoZXIgc3Vicm91dGluZSBzZXRzIGJveFxuICogeCB0byBhIHNwZWNpZmllZCB2YXJpYWJsZSBkZWxpbWl0ZXJcIiBwYXJhZ3JhcGguXG4gKlxuICogVGhlcmUgYXJlIHRocmVlIG1haW4gcm91dGluZXMgaGVyZS4gYG1ha2VTbWFsbERlbGltYCBtYWtlcyBhIGRlbGltaXRlciBpbiB0aGVcbiAqIG5vcm1hbCBmb250LCBidXQgaW4gZWl0aGVyIHRleHQsIHNjcmlwdCwgb3Igc2NyaXB0c2NyaXB0IHN0eWxlLlxuICogYG1ha2VMYXJnZURlbGltYCBtYWtlcyBhIGRlbGltaXRlciBpbiB0ZXh0c3R5bGUsIGJ1dCBpbiBvbmUgb2YgdGhlIFNpemUxLFxuICogU2l6ZTIsIFNpemUzLCBvciBTaXplNCBmb250cy4gYG1ha2VTdGFja2VkRGVsaW1gIG1ha2VzIGEgZGVsaW1pdGVyIG91dCBvZlxuICogc21hbGxlciBwaWVjZXMgdGhhdCBhcmUgc3RhY2tlZCBvbiB0b3Agb2Ygb25lIGFub3RoZXIuXG4gKlxuICogVGhlIGZ1bmN0aW9ucyB0YWtlIGEgcGFyYW1ldGVyIGBjZW50ZXJgLCB3aGljaCBkZXRlcm1pbmVzIGlmIHRoZSBkZWxpbWl0ZXJcbiAqIHNob3VsZCBiZSBjZW50ZXJlZCBhcm91bmQgdGhlIGF4aXMuXG4gKlxuICogVGhlbiwgdGhlcmUgYXJlIHRocmVlIGV4cG9zZWQgZnVuY3Rpb25zLiBgc2l6ZWREZWxpbWAgbWFrZXMgYSBkZWxpbWl0ZXIgaW5cbiAqIG9uZSBvZiB0aGUgZ2l2ZW4gc2l6ZXMuIFRoaXMgaXMgdXNlZCBmb3IgdGhpbmdzIGxpa2UgYFxcYmlnbGAuXG4gKiBgY3VzdG9tU2l6ZWREZWxpbWAgbWFrZXMgYSBkZWxpbWl0ZXIgd2l0aCBhIGdpdmVuIHRvdGFsIGhlaWdodCtkZXB0aC4gSXQgaXNcbiAqIGNhbGxlZCBpbiBwbGFjZXMgbGlrZSBgXFxzcXJ0YC4gYGxlZnRSaWdodERlbGltYCBtYWtlcyBhbiBhcHByb3ByaWF0ZVxuICogZGVsaW1pdGVyIHdoaWNoIHN1cnJvdW5kcyBhbiBleHByZXNzaW9uIG9mIGEgZ2l2ZW4gaGVpZ2h0IGFuIGRlcHRoLiBJdCBpc1xuICogdXNlZCBpbiBgXFxsZWZ0YCBhbmQgYFxccmlnaHRgLlxuICovXG5cblxuXG5cblxuXG5cblxuXG4vKipcbiAqIEdldCB0aGUgbWV0cmljcyBmb3IgYSBnaXZlbiBzeW1ib2wgYW5kIGZvbnQsIGFmdGVyIHRyYW5zZm9ybWF0aW9uIChpLmUuXG4gKiBhZnRlciBmb2xsb3dpbmcgcmVwbGFjZW1lbnQgZnJvbSBzeW1ib2xzLmpzKVxuICovXG52YXIgZGVsaW1pdGVyX2dldE1ldHJpY3MgPSBmdW5jdGlvbiBnZXRNZXRyaWNzKHN5bWJvbCwgZm9udCwgbW9kZSkge1xuICB2YXIgcmVwbGFjZSA9IHNyY19zeW1ib2xzLm1hdGhbc3ltYm9sXSAmJiBzcmNfc3ltYm9scy5tYXRoW3N5bWJvbF0ucmVwbGFjZTtcbiAgdmFyIG1ldHJpY3MgPSBnZXRDaGFyYWN0ZXJNZXRyaWNzKHJlcGxhY2UgfHwgc3ltYm9sLCBmb250LCBtb2RlKTtcblxuICBpZiAoIW1ldHJpY3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBzeW1ib2wgXCIgKyBzeW1ib2wgKyBcIiBhbmQgZm9udCBzaXplIFwiICsgZm9udCArIFwiLlwiKTtcbiAgfVxuXG4gIHJldHVybiBtZXRyaWNzO1xufTtcbi8qKlxuICogUHV0cyBhIGRlbGltaXRlciBzcGFuIGluIGEgZ2l2ZW4gc3R5bGUsIGFuZCBhZGRzIGFwcHJvcHJpYXRlIGhlaWdodCwgZGVwdGgsXG4gKiBhbmQgbWF4Rm9udFNpemVzLlxuICovXG5cblxudmFyIGRlbGltaXRlcl9zdHlsZVdyYXAgPSBmdW5jdGlvbiBzdHlsZVdyYXAoZGVsaW0sIHRvU3R5bGUsIG9wdGlvbnMsIGNsYXNzZXMpIHtcbiAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ0Jhc2VTdHlsZSh0b1N0eWxlKTtcbiAgdmFyIHNwYW4gPSBidWlsZENvbW1vbi5tYWtlU3BhbihjbGFzc2VzLmNvbmNhdChuZXdPcHRpb25zLnNpemluZ0NsYXNzZXMob3B0aW9ucykpLCBbZGVsaW1dLCBvcHRpb25zKTtcbiAgdmFyIGRlbGltU2l6ZU11bHRpcGxpZXIgPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgc3Bhbi5oZWlnaHQgKj0gZGVsaW1TaXplTXVsdGlwbGllcjtcbiAgc3Bhbi5kZXB0aCAqPSBkZWxpbVNpemVNdWx0aXBsaWVyO1xuICBzcGFuLm1heEZvbnRTaXplID0gbmV3T3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgcmV0dXJuIHNwYW47XG59O1xuXG52YXIgY2VudGVyU3BhbiA9IGZ1bmN0aW9uIGNlbnRlclNwYW4oc3Bhbiwgb3B0aW9ucywgc3R5bGUpIHtcbiAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ0Jhc2VTdHlsZShzdHlsZSk7XG4gIHZhciBzaGlmdCA9ICgxIC0gb3B0aW9ucy5zaXplTXVsdGlwbGllciAvIG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXIpICogb3B0aW9ucy5mb250TWV0cmljcygpLmF4aXNIZWlnaHQ7XG4gIHNwYW4uY2xhc3Nlcy5wdXNoKFwiZGVsaW1jZW50ZXJcIik7XG4gIHNwYW4uc3R5bGUudG9wID0gc2hpZnQgKyBcImVtXCI7XG4gIHNwYW4uaGVpZ2h0IC09IHNoaWZ0O1xuICBzcGFuLmRlcHRoICs9IHNoaWZ0O1xufTtcbi8qKlxuICogTWFrZXMgYSBzbWFsbCBkZWxpbWl0ZXIuIFRoaXMgaXMgYSBkZWxpbWl0ZXIgdGhhdCBjb21lcyBpbiB0aGUgTWFpbi1SZWd1bGFyXG4gKiBmb250LCBidXQgaXMgcmVzdHlsZWQgdG8gZWl0aGVyIGJlIGluIHRleHRzdHlsZSwgc2NyaXB0c3R5bGUsIG9yXG4gKiBzY3JpcHRzY3JpcHRzdHlsZS5cbiAqL1xuXG5cbnZhciBkZWxpbWl0ZXJfbWFrZVNtYWxsRGVsaW0gPSBmdW5jdGlvbiBtYWtlU21hbGxEZWxpbShkZWxpbSwgc3R5bGUsIGNlbnRlciwgb3B0aW9ucywgbW9kZSwgY2xhc3Nlcykge1xuICB2YXIgdGV4dCA9IGJ1aWxkQ29tbW9uLm1ha2VTeW1ib2woZGVsaW0sIFwiTWFpbi1SZWd1bGFyXCIsIG1vZGUsIG9wdGlvbnMpO1xuICB2YXIgc3BhbiA9IGRlbGltaXRlcl9zdHlsZVdyYXAodGV4dCwgc3R5bGUsIG9wdGlvbnMsIGNsYXNzZXMpO1xuXG4gIGlmIChjZW50ZXIpIHtcbiAgICBjZW50ZXJTcGFuKHNwYW4sIG9wdGlvbnMsIHN0eWxlKTtcbiAgfVxuXG4gIHJldHVybiBzcGFuO1xufTtcbi8qKlxuICogQnVpbGRzIGEgc3ltYm9sIGluIHRoZSBnaXZlbiBmb250IHNpemUgKG5vdGUgc2l6ZSBpcyBhbiBpbnRlZ2VyKVxuICovXG5cblxudmFyIGRlbGltaXRlcl9tYXRocm1TaXplID0gZnVuY3Rpb24gbWF0aHJtU2l6ZSh2YWx1ZSwgc2l6ZSwgbW9kZSwgb3B0aW9ucykge1xuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVN5bWJvbCh2YWx1ZSwgXCJTaXplXCIgKyBzaXplICsgXCItUmVndWxhclwiLCBtb2RlLCBvcHRpb25zKTtcbn07XG4vKipcbiAqIE1ha2VzIGEgbGFyZ2UgZGVsaW1pdGVyLiBUaGlzIGlzIGEgZGVsaW1pdGVyIHRoYXQgY29tZXMgaW4gdGhlIFNpemUxLCBTaXplMixcbiAqIFNpemUzLCBvciBTaXplNCBmb250cy4gSXQgaXMgYWx3YXlzIHJlbmRlcmVkIGluIHRleHRzdHlsZS5cbiAqL1xuXG5cbnZhciBkZWxpbWl0ZXJfbWFrZUxhcmdlRGVsaW0gPSBmdW5jdGlvbiBtYWtlTGFyZ2VEZWxpbShkZWxpbSwgc2l6ZSwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKSB7XG4gIHZhciBpbm5lciA9IGRlbGltaXRlcl9tYXRocm1TaXplKGRlbGltLCBzaXplLCBtb2RlLCBvcHRpb25zKTtcbiAgdmFyIHNwYW4gPSBkZWxpbWl0ZXJfc3R5bGVXcmFwKGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImRlbGltc2l6aW5nXCIsIFwic2l6ZVwiICsgc2l6ZV0sIFtpbm5lcl0sIG9wdGlvbnMpLCBzcmNfU3R5bGUuVEVYVCwgb3B0aW9ucywgY2xhc3Nlcyk7XG5cbiAgaWYgKGNlbnRlcikge1xuICAgIGNlbnRlclNwYW4oc3Bhbiwgb3B0aW9ucywgc3JjX1N0eWxlLlRFWFQpO1xuICB9XG5cbiAgcmV0dXJuIHNwYW47XG59O1xuLyoqXG4gKiBNYWtlIGFuIGlubmVyIHNwYW4gd2l0aCB0aGUgZ2l2ZW4gb2Zmc2V0IGFuZCBpbiB0aGUgZ2l2ZW4gZm9udC4gVGhpcyBpcyB1c2VkXG4gKiBpbiBgbWFrZVN0YWNrZWREZWxpbWAgdG8gbWFrZSB0aGUgc3RhY2tpbmcgcGllY2VzIGZvciB0aGUgZGVsaW1pdGVyLlxuICovXG5cblxudmFyIGRlbGltaXRlcl9tYWtlSW5uZXIgPSBmdW5jdGlvbiBtYWtlSW5uZXIoc3ltYm9sLCBmb250LCBtb2RlKSB7XG4gIHZhciBzaXplQ2xhc3M7IC8vIEFwcGx5IHRoZSBjb3JyZWN0IENTUyBjbGFzcyB0byBjaG9vc2UgdGhlIHJpZ2h0IGZvbnQuXG5cbiAgaWYgKGZvbnQgPT09IFwiU2l6ZTEtUmVndWxhclwiKSB7XG4gICAgc2l6ZUNsYXNzID0gXCJkZWxpbS1zaXplMVwiO1xuICB9IGVsc2VcbiAgICAvKiBpZiAoZm9udCA9PT0gXCJTaXplNC1SZWd1bGFyXCIpICovXG4gICAge1xuICAgICAgc2l6ZUNsYXNzID0gXCJkZWxpbS1zaXplNFwiO1xuICAgIH1cblxuICB2YXIgaW5uZXIgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJkZWxpbXNpemluZ2lubmVyXCIsIHNpemVDbGFzc10sIFtidWlsZENvbW1vbi5tYWtlU3BhbihbXSwgW2J1aWxkQ29tbW9uLm1ha2VTeW1ib2woc3ltYm9sLCBmb250LCBtb2RlKV0pXSk7IC8vIFNpbmNlIHRoaXMgd2lsbCBiZSBwYXNzZWQgaW50byBgbWFrZVZMaXN0YCBpbiB0aGUgZW5kLCB3cmFwIHRoZSBlbGVtZW50XG4gIC8vIGluIHRoZSBhcHByb3ByaWF0ZSB0YWcgdGhhdCBWTGlzdCB1c2VzLlxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJlbGVtXCIsXG4gICAgZWxlbTogaW5uZXJcbiAgfTtcbn07IC8vIEhlbHBlciBmb3IgbWFrZVN0YWNrZWREZWxpbVxuXG5cbnZhciBsYXAgPSB7XG4gIHR5cGU6IFwia2VyblwiLFxuICBzaXplOiAtMC4wMDVcbn07XG4vKipcbiAqIE1ha2UgYSBzdGFja2VkIGRlbGltaXRlciBvdXQgb2YgYSBnaXZlbiBkZWxpbWl0ZXIsIHdpdGggdGhlIHRvdGFsIGhlaWdodCBhdFxuICogbGVhc3QgYGhlaWdodFRvdGFsYC4gVGhpcyByb3V0aW5lIGlzIG1lbnRpb25lZCBvbiBwYWdlIDQ0MiBvZiB0aGUgVGVYYm9vay5cbiAqL1xuXG52YXIgZGVsaW1pdGVyX21ha2VTdGFja2VkRGVsaW0gPSBmdW5jdGlvbiBtYWtlU3RhY2tlZERlbGltKGRlbGltLCBoZWlnaHRUb3RhbCwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKSB7XG4gIC8vIFRoZXJlIGFyZSBmb3VyIHBhcnRzLCB0aGUgdG9wLCBhbiBvcHRpb25hbCBtaWRkbGUsIGEgcmVwZWF0ZWQgcGFydCwgYW5kIGFcbiAgLy8gYm90dG9tLlxuICB2YXIgdG9wO1xuICB2YXIgbWlkZGxlO1xuICB2YXIgcmVwZWF0O1xuICB2YXIgYm90dG9tO1xuICB0b3AgPSByZXBlYXQgPSBib3R0b20gPSBkZWxpbTtcbiAgbWlkZGxlID0gbnVsbDsgLy8gQWxzbyBrZWVwIHRyYWNrIG9mIHdoYXQgZm9udCB0aGUgZGVsaW1pdGVycyBhcmUgaW5cblxuICB2YXIgZm9udCA9IFwiU2l6ZTEtUmVndWxhclwiOyAvLyBXZSBzZXQgdGhlIHBhcnRzIGFuZCBmb250IGJhc2VkIG9uIHRoZSBzeW1ib2wuIE5vdGUgdGhhdCB3ZSB1c2VcbiAgLy8gJ1xcdTIzZDAnIGluc3RlYWQgb2YgJ3wnIGFuZCAnXFx1MjAxNicgaW5zdGVhZCBvZiAnXFxcXHwnIGZvciB0aGVcbiAgLy8gcmVwZWF0cyBvZiB0aGUgYXJyb3dzXG5cbiAgaWYgKGRlbGltID09PSBcIlxcXFx1cGFycm93XCIpIHtcbiAgICByZXBlYXQgPSBib3R0b20gPSBcIlxcdTIzRDBcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxcVXBhcnJvd1wiKSB7XG4gICAgcmVwZWF0ID0gYm90dG9tID0gXCJcXHUyMDE2XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXGRvd25hcnJvd1wiKSB7XG4gICAgdG9wID0gcmVwZWF0ID0gXCJcXHUyM0QwXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXERvd25hcnJvd1wiKSB7XG4gICAgdG9wID0gcmVwZWF0ID0gXCJcXHUyMDE2XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXHVwZG93bmFycm93XCIpIHtcbiAgICB0b3AgPSBcIlxcXFx1cGFycm93XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM0QwXCI7XG4gICAgYm90dG9tID0gXCJcXFxcZG93bmFycm93XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXFVwZG93bmFycm93XCIpIHtcbiAgICB0b3AgPSBcIlxcXFxVcGFycm93XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyMDE2XCI7XG4gICAgYm90dG9tID0gXCJcXFxcRG93bmFycm93XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiW1wiIHx8IGRlbGltID09PSBcIlxcXFxsYnJhY2tcIikge1xuICAgIHRvcCA9IFwiXFx1MjNBMVwiO1xuICAgIHJlcGVhdCA9IFwiXFx1MjNBMlwiO1xuICAgIGJvdHRvbSA9IFwiXFx1MjNBM1wiO1xuICAgIGZvbnQgPSBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJdXCIgfHwgZGVsaW0gPT09IFwiXFxcXHJicmFja1wiKSB7XG4gICAgdG9wID0gXCJcXHUyM0E0XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM0E1XCI7XG4gICAgYm90dG9tID0gXCJcXHUyM0E2XCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxsZmxvb3JcIiB8fCBkZWxpbSA9PT0gXCJcXHUyMzBBXCIpIHtcbiAgICByZXBlYXQgPSB0b3AgPSBcIlxcdTIzQTJcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzQTNcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXGxjZWlsXCIgfHwgZGVsaW0gPT09IFwiXFx1MjMwOFwiKSB7XG4gICAgdG9wID0gXCJcXHUyM0ExXCI7XG4gICAgcmVwZWF0ID0gYm90dG9tID0gXCJcXHUyM0EyXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxyZmxvb3JcIiB8fCBkZWxpbSA9PT0gXCJcXHUyMzBCXCIpIHtcbiAgICByZXBlYXQgPSB0b3AgPSBcIlxcdTIzQTVcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzQTZcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXHJjZWlsXCIgfHwgZGVsaW0gPT09IFwiXFx1MjMwOVwiKSB7XG4gICAgdG9wID0gXCJcXHUyM0E0XCI7XG4gICAgcmVwZWF0ID0gYm90dG9tID0gXCJcXHUyM0E1XCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIihcIiB8fCBkZWxpbSA9PT0gXCJcXFxcbHBhcmVuXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzOUJcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzOUNcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzOURcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiKVwiIHx8IGRlbGltID09PSBcIlxcXFxycGFyZW5cIikge1xuICAgIHRvcCA9IFwiXFx1MjM5RVwiO1xuICAgIHJlcGVhdCA9IFwiXFx1MjM5RlwiO1xuICAgIGJvdHRvbSA9IFwiXFx1MjNBMFwiO1xuICAgIGZvbnQgPSBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxce1wiIHx8IGRlbGltID09PSBcIlxcXFxsYnJhY2VcIikge1xuICAgIHRvcCA9IFwiXFx1MjNBN1wiO1xuICAgIG1pZGRsZSA9IFwiXFx1MjNBOFwiO1xuICAgIGJvdHRvbSA9IFwiXFx1MjNBOVwiO1xuICAgIHJlcGVhdCA9IFwiXFx1MjNBQVwiO1xuICAgIGZvbnQgPSBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxcfVwiIHx8IGRlbGltID09PSBcIlxcXFxyYnJhY2VcIikge1xuICAgIHRvcCA9IFwiXFx1MjNBQlwiO1xuICAgIG1pZGRsZSA9IFwiXFx1MjNBQ1wiO1xuICAgIGJvdHRvbSA9IFwiXFx1MjNBRFwiO1xuICAgIHJlcGVhdCA9IFwiXFx1MjNBQVwiO1xuICAgIGZvbnQgPSBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxcbGdyb3VwXCIgfHwgZGVsaW0gPT09IFwiXFx1MjdFRVwiKSB7XG4gICAgdG9wID0gXCJcXHUyM0E3XCI7XG4gICAgYm90dG9tID0gXCJcXHUyM0E5XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM0FBXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxyZ3JvdXBcIiB8fCBkZWxpbSA9PT0gXCJcXHUyN0VGXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzQUJcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzQURcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzQUFcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXGxtb3VzdGFjaGVcIiB8fCBkZWxpbSA9PT0gXCJcXHUyM0IwXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzQTdcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzQURcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzQUFcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXHJtb3VzdGFjaGVcIiB8fCBkZWxpbSA9PT0gXCJcXHUyM0IxXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzQUJcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzQTlcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzQUFcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gLy8gR2V0IHRoZSBtZXRyaWNzIG9mIHRoZSBmb3VyIHNlY3Rpb25zXG5cblxuICB2YXIgdG9wTWV0cmljcyA9IGRlbGltaXRlcl9nZXRNZXRyaWNzKHRvcCwgZm9udCwgbW9kZSk7XG4gIHZhciB0b3BIZWlnaHRUb3RhbCA9IHRvcE1ldHJpY3MuaGVpZ2h0ICsgdG9wTWV0cmljcy5kZXB0aDtcbiAgdmFyIHJlcGVhdE1ldHJpY3MgPSBkZWxpbWl0ZXJfZ2V0TWV0cmljcyhyZXBlYXQsIGZvbnQsIG1vZGUpO1xuICB2YXIgcmVwZWF0SGVpZ2h0VG90YWwgPSByZXBlYXRNZXRyaWNzLmhlaWdodCArIHJlcGVhdE1ldHJpY3MuZGVwdGg7XG4gIHZhciBib3R0b21NZXRyaWNzID0gZGVsaW1pdGVyX2dldE1ldHJpY3MoYm90dG9tLCBmb250LCBtb2RlKTtcbiAgdmFyIGJvdHRvbUhlaWdodFRvdGFsID0gYm90dG9tTWV0cmljcy5oZWlnaHQgKyBib3R0b21NZXRyaWNzLmRlcHRoO1xuICB2YXIgbWlkZGxlSGVpZ2h0VG90YWwgPSAwO1xuICB2YXIgbWlkZGxlRmFjdG9yID0gMTtcblxuICBpZiAobWlkZGxlICE9PSBudWxsKSB7XG4gICAgdmFyIG1pZGRsZU1ldHJpY3MgPSBkZWxpbWl0ZXJfZ2V0TWV0cmljcyhtaWRkbGUsIGZvbnQsIG1vZGUpO1xuICAgIG1pZGRsZUhlaWdodFRvdGFsID0gbWlkZGxlTWV0cmljcy5oZWlnaHQgKyBtaWRkbGVNZXRyaWNzLmRlcHRoO1xuICAgIG1pZGRsZUZhY3RvciA9IDI7IC8vIHJlcGVhdCBzeW1tZXRyaWNhbGx5IGFib3ZlIGFuZCBiZWxvdyBtaWRkbGVcbiAgfSAvLyBDYWxjdWF0ZSB0aGUgbWluaW1hbCBoZWlnaHQgdGhhdCB0aGUgZGVsaW1pdGVyIGNhbiBoYXZlLlxuICAvLyBJdCBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiB0aGUgdG9wLCBib3R0b20sIGFuZCBvcHRpb25hbCBtaWRkbGUgY29tYmluZWQuXG5cblxuICB2YXIgbWluSGVpZ2h0ID0gdG9wSGVpZ2h0VG90YWwgKyBib3R0b21IZWlnaHRUb3RhbCArIG1pZGRsZUhlaWdodFRvdGFsOyAvLyBDb21wdXRlIHRoZSBudW1iZXIgb2YgY29waWVzIG9mIHRoZSByZXBlYXQgc3ltYm9sIHdlIHdpbGwgbmVlZFxuXG4gIHZhciByZXBlYXRDb3VudCA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCgoaGVpZ2h0VG90YWwgLSBtaW5IZWlnaHQpIC8gKG1pZGRsZUZhY3RvciAqIHJlcGVhdEhlaWdodFRvdGFsKSkpOyAvLyBDb21wdXRlIHRoZSB0b3RhbCBoZWlnaHQgb2YgdGhlIGRlbGltaXRlciBpbmNsdWRpbmcgYWxsIHRoZSBzeW1ib2xzXG5cbiAgdmFyIHJlYWxIZWlnaHRUb3RhbCA9IG1pbkhlaWdodCArIHJlcGVhdENvdW50ICogbWlkZGxlRmFjdG9yICogcmVwZWF0SGVpZ2h0VG90YWw7IC8vIFRoZSBjZW50ZXIgb2YgdGhlIGRlbGltaXRlciBpcyBwbGFjZWQgYXQgdGhlIGNlbnRlciBvZiB0aGUgYXhpcy4gTm90ZVxuICAvLyB0aGF0IGluIHRoaXMgY29udGV4dCwgXCJjZW50ZXJcIiBtZWFucyB0aGF0IHRoZSBkZWxpbWl0ZXIgc2hvdWxkIGJlXG4gIC8vIGNlbnRlcmVkIGFyb3VuZCB0aGUgYXhpcyBpbiB0aGUgY3VycmVudCBzdHlsZSwgd2hpbGUgbm9ybWFsbHkgaXQgaXNcbiAgLy8gY2VudGVyZWQgYXJvdW5kIHRoZSBheGlzIGluIHRleHRzdHlsZS5cblxuICB2YXIgYXhpc0hlaWdodCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O1xuXG4gIGlmIChjZW50ZXIpIHtcbiAgICBheGlzSGVpZ2h0ICo9IG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gIH0gLy8gQ2FsY3VsYXRlIHRoZSBkZXB0aFxuXG5cbiAgdmFyIGRlcHRoID0gcmVhbEhlaWdodFRvdGFsIC8gMiAtIGF4aXNIZWlnaHQ7IC8vIFRoaXMgZnVuY3Rpb24gZGlmZmVycyBmcm9tIHRoZSBUZVggcHJvY2VkdXJlIGluIG9uZSB3YXkuXG4gIC8vIFdlIHNoaWZ0IGVhY2ggcmVwZWF0IGVsZW1lbnQgZG93bndhcmRzIGJ5IDAuMDA1ZW0sIHRvIHByZXZlbnQgYSBnYXBcbiAgLy8gZHVlIHRvIGJyb3dzZXIgZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3IuXG4gIC8vIFRoZW4sIGF0IHRoZSBsYXN0IGVsZW1lbnQtdG8gZWxlbWVudCBqb2ludCwgd2UgYWRkIG9uZSBleHRyYSByZXBlYXRcbiAgLy8gZWxlbWVudCB0byBjb3ZlciB0aGUgZ2FwIGNyZWF0ZWQgYnkgdGhlIHNoaWZ0cy5cbiAgLy8gRmluZCB0aGUgc2hpZnQgbmVlZGVkIHRvIGFsaWduIHRoZSB1cHBlciBlbmQgb2YgdGhlIGV4dHJhIGVsZW1lbnQgYXQgYSBwb2ludFxuICAvLyAwLjAwNWVtIGFib3ZlIHRoZSBsb3dlciBlbmQgb2YgdGhlIHRvcCBlbGVtZW50LlxuXG4gIHZhciBzaGlmdE9mRXh0cmFFbGVtZW50ID0gKHJlcGVhdENvdW50ICsgMSkgKiAwLjAwNSAtIHJlcGVhdEhlaWdodFRvdGFsOyAvLyBOb3csIHdlIHN0YXJ0IGJ1aWxkaW5nIHRoZSBwaWVjZXMgdGhhdCB3aWxsIGdvIGludG8gdGhlIHZsaXN0XG4gIC8vIEtlZXAgYSBsaXN0IG9mIHRoZSBpbm5lciBwaWVjZXNcblxuICB2YXIgaW5uZXJzID0gW107IC8vIEFkZCB0aGUgYm90dG9tIHN5bWJvbFxuXG4gIGlubmVycy5wdXNoKGRlbGltaXRlcl9tYWtlSW5uZXIoYm90dG9tLCBmb250LCBtb2RlKSk7XG5cbiAgaWYgKG1pZGRsZSA9PT0gbnVsbCkge1xuICAgIC8vIEFkZCB0aGF0IG1hbnkgc3ltYm9sc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVwZWF0Q291bnQ7IGkrKykge1xuICAgICAgaW5uZXJzLnB1c2gobGFwKTsgLy8gb3ZlcmxhcFxuXG4gICAgICBpbm5lcnMucHVzaChkZWxpbWl0ZXJfbWFrZUlubmVyKHJlcGVhdCwgZm9udCwgbW9kZSkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBXaGVuIHRoZXJlIGlzIGEgbWlkZGxlIGJpdCwgd2UgbmVlZCB0aGUgbWlkZGxlIHBhcnQgYW5kIHR3byByZXBlYXRlZFxuICAgIC8vIHNlY3Rpb25zXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHJlcGVhdENvdW50OyBfaSsrKSB7XG4gICAgICBpbm5lcnMucHVzaChsYXApO1xuICAgICAgaW5uZXJzLnB1c2goZGVsaW1pdGVyX21ha2VJbm5lcihyZXBlYXQsIGZvbnQsIG1vZGUpKTtcbiAgICB9IC8vIEluc2VydCBvbmUgZXh0cmEgcmVwZWF0IGVsZW1lbnQuXG5cblxuICAgIGlubmVycy5wdXNoKHtcbiAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgc2l6ZTogc2hpZnRPZkV4dHJhRWxlbWVudFxuICAgIH0pO1xuICAgIGlubmVycy5wdXNoKGRlbGltaXRlcl9tYWtlSW5uZXIocmVwZWF0LCBmb250LCBtb2RlKSk7XG4gICAgaW5uZXJzLnB1c2gobGFwKTsgLy8gTm93IGluc2VydCB0aGUgbWlkZGxlIG9mIHRoZSBicmFjZS5cblxuICAgIGlubmVycy5wdXNoKGRlbGltaXRlcl9tYWtlSW5uZXIobWlkZGxlLCBmb250LCBtb2RlKSk7XG5cbiAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCByZXBlYXRDb3VudDsgX2kyKyspIHtcbiAgICAgIGlubmVycy5wdXNoKGxhcCk7XG4gICAgICBpbm5lcnMucHVzaChkZWxpbWl0ZXJfbWFrZUlubmVyKHJlcGVhdCwgZm9udCwgbW9kZSkpO1xuICAgIH1cbiAgfSAvLyBUbyBjb3ZlciB0aGUgZ2FwIGNyZWF0ZSBieSB0aGUgb3ZlcmxhcHMsIGluc2VydCBvbmUgbW9yZSByZXBlYXQgZWxlbWVudCxcbiAgLy8gYXQgYSBwb3NpdGlvbiB0aGF0IGp1dHMgMC4wMDUgYWJvdmUgdGhlIGJvdHRvbSBvZiB0aGUgdG9wIGVsZW1lbnQuXG5cblxuICBpbm5lcnMucHVzaCh7XG4gICAgdHlwZTogXCJrZXJuXCIsXG4gICAgc2l6ZTogc2hpZnRPZkV4dHJhRWxlbWVudFxuICB9KTtcbiAgaW5uZXJzLnB1c2goZGVsaW1pdGVyX21ha2VJbm5lcihyZXBlYXQsIGZvbnQsIG1vZGUpKTtcbiAgaW5uZXJzLnB1c2gobGFwKTsgLy8gQWRkIHRoZSB0b3Agc3ltYm9sXG5cbiAgaW5uZXJzLnB1c2goZGVsaW1pdGVyX21ha2VJbm5lcih0b3AsIGZvbnQsIG1vZGUpKTsgLy8gRmluYWxseSwgYnVpbGQgdGhlIHZsaXN0XG5cbiAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ0Jhc2VTdHlsZShzcmNfU3R5bGUuVEVYVCk7XG4gIHZhciBpbm5lciA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgcG9zaXRpb25UeXBlOiBcImJvdHRvbVwiLFxuICAgIHBvc2l0aW9uRGF0YTogZGVwdGgsXG4gICAgY2hpbGRyZW46IGlubmVyc1xuICB9LCBuZXdPcHRpb25zKTtcbiAgcmV0dXJuIGRlbGltaXRlcl9zdHlsZVdyYXAoYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiZGVsaW1zaXppbmdcIiwgXCJtdWx0XCJdLCBbaW5uZXJdLCBuZXdPcHRpb25zKSwgc3JjX1N0eWxlLlRFWFQsIG9wdGlvbnMsIGNsYXNzZXMpO1xufTsgLy8gQWxsIHN1cmRzIGhhdmUgMC4wOGVtIHBhZGRpbmcgYWJvdmUgdGhlIHZpbmljdWx1bSBpbnNpZGUgdGhlIFNWRy5cbi8vIFRoYXQga2VlcHMgYnJvd3NlciBzcGFuIGhlaWdodCByb3VuZGluZyBlcnJvciBmcm9tIHBpbmNoaW5nIHRoZSBsaW5lLlxuXG5cbnZhciB2YlBhZCA9IDgwOyAvLyBwYWRkaW5nIGFib3ZlIHRoZSBzdXJkLCBtZWFzdXJlZCBpbnNpZGUgdGhlIHZpZXdCb3guXG5cbnZhciBlbVBhZCA9IDAuMDg7IC8vIHBhZGRpbmcsIGluIGVtcywgbWVhc3VyZWQgaW4gdGhlIGRvY3VtZW50LlxuXG52YXIgZGVsaW1pdGVyX3NxcnRTdmcgPSBmdW5jdGlvbiBzcXJ0U3ZnKHNxcnROYW1lLCBoZWlnaHQsIHZpZXdCb3hIZWlnaHQsIGV4dHJhVmluaWN1bHVtLCBvcHRpb25zKSB7XG4gIHZhciBwYXRoID0gc3FydFBhdGgoc3FydE5hbWUsIGV4dHJhVmluaWN1bHVtLCB2aWV3Qm94SGVpZ2h0KTtcbiAgdmFyIHBhdGhOb2RlID0gbmV3IGRvbVRyZWVfUGF0aE5vZGUoc3FydE5hbWUsIHBhdGgpO1xuICB2YXIgc3ZnID0gbmV3IFN2Z05vZGUoW3BhdGhOb2RlXSwge1xuICAgIC8vIE5vdGU6IDEwMDA6MSByYXRpbyBvZiB2aWV3Qm94IHRvIGRvY3VtZW50IGVtIHdpZHRoLlxuICAgIFwid2lkdGhcIjogXCI0MDBlbVwiLFxuICAgIFwiaGVpZ2h0XCI6IGhlaWdodCArIFwiZW1cIixcbiAgICBcInZpZXdCb3hcIjogXCIwIDAgNDAwMDAwIFwiICsgdmlld0JveEhlaWdodCxcbiAgICBcInByZXNlcnZlQXNwZWN0UmF0aW9cIjogXCJ4TWluWU1pbiBzbGljZVwiXG4gIH0pO1xuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW1wiaGlkZS10YWlsXCJdLCBbc3ZnXSwgb3B0aW9ucyk7XG59O1xuLyoqXG4gKiBNYWtlIGEgc3FydCBpbWFnZSBvZiB0aGUgZ2l2ZW4gaGVpZ2h0LFxuICovXG5cblxudmFyIG1ha2VTcXJ0SW1hZ2UgPSBmdW5jdGlvbiBtYWtlU3FydEltYWdlKGhlaWdodCwgb3B0aW9ucykge1xuICAvLyBEZWZpbmUgYSBuZXdPcHRpb25zIHRoYXQgcmVtb3ZlcyB0aGUgZWZmZWN0IG9mIHNpemUgY2hhbmdlcyBzdWNoIGFzIFxcSHVnZS5cbiAgLy8gV2UgZG9uJ3QgcGljayBkaWZmZXJlbnQgYSBoZWlnaHQgc3VyZCBmb3IgXFxIdWdlLiBGb3IgaXQsIHdlIHNjYWxlIHVwLlxuICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nQmFzZVNpemluZygpOyAvLyBQaWNrIHRoZSBkZXNpcmVkIHN1cmQgZ2x5cGggZnJvbSBhIHNlcXVlbmNlIG9mIHN1cmRzLlxuXG4gIHZhciBkZWxpbSA9IHRyYXZlcnNlU2VxdWVuY2UoXCJcXFxcc3VyZFwiLCBoZWlnaHQgKiBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyLCBzdGFja0xhcmdlRGVsaW1pdGVyU2VxdWVuY2UsIG5ld09wdGlvbnMpO1xuICB2YXIgc2l6ZU11bHRpcGxpZXIgPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyOyAvLyBkZWZhdWx0XG4gIC8vIFRoZSBzdGFuZGFyZCBzcXJ0IFNWR3MgZWFjaCBoYXZlIGEgMC4wNGVtIHRoaWNrIHZpbmljdWx1bS5cbiAgLy8gSWYgU2V0dGluZ3MubWluUnVsZVRoaWNrbmVzcyBpcyBsYXJnZXIgdGhhbiB0aGF0LCB3ZSBhZGQgZXh0cmFWaW5pY3VsdW0uXG5cbiAgdmFyIGV4dHJhVmluaWN1bHVtID0gTWF0aC5tYXgoMCwgb3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzIC0gb3B0aW9ucy5mb250TWV0cmljcygpLnNxcnRSdWxlVGhpY2tuZXNzKTsgLy8gQ3JlYXRlIGEgc3BhbiBjb250YWluaW5nIGFuIFNWRyBpbWFnZSBvZiBhIHNxcnQgc3ltYm9sLlxuXG4gIHZhciBzcGFuO1xuICB2YXIgc3BhbkhlaWdodCA9IDA7XG4gIHZhciB0ZXhIZWlnaHQgPSAwO1xuICB2YXIgdmlld0JveEhlaWdodCA9IDA7XG4gIHZhciBhZHZhbmNlV2lkdGg7IC8vIFdlIGNyZWF0ZSB2aWV3Qm94ZXMgd2l0aCA4MCB1bml0cyBvZiBcInBhZGRpbmdcIiBhYm92ZSBlYWNoIHN1cmQuXG4gIC8vIFRoZW4gYnJvd3NlciByb3VuZGluZyBlcnJvciBvbiB0aGUgcGFyZW50IHNwYW4gaGVpZ2h0IHdpbGwgbm90XG4gIC8vIGVuY3JvYWNoIG9uIHRoZSBpbmsgb2YgdGhlIHZpbmljdWx1bS4gQnV0IHRoYXQgcGFkZGluZyBpcyBub3RcbiAgLy8gaW5jbHVkZWQgaW4gdGhlIFRlWC1saWtlIGBoZWlnaHRgIHVzZWQgZm9yIGNhbGN1bGF0aW9uIG9mXG4gIC8vIHZlcnRpY2FsIGFsaWdubWVudC4gU28gdGV4SGVpZ2h0ID0gc3Bhbi5oZWlnaHQgPCBzcGFuLnN0eWxlLmhlaWdodC5cblxuICBpZiAoZGVsaW0udHlwZSA9PT0gXCJzbWFsbFwiKSB7XG4gICAgLy8gR2V0IGFuIFNWRyB0aGF0IGlzIGRlcml2ZWQgZnJvbSBnbHlwaCBVKzIyMUEgaW4gZm9udCBLYVRlWC1NYWluLlxuICAgIC8vIDEwMDAgdW5pdCBub3JtYWwgZ2x5cGggaGVpZ2h0LlxuICAgIHZpZXdCb3hIZWlnaHQgPSAxMDAwICsgMTAwMCAqIGV4dHJhVmluaWN1bHVtICsgdmJQYWQ7XG5cbiAgICBpZiAoaGVpZ2h0IDwgMS4wKSB7XG4gICAgICBzaXplTXVsdGlwbGllciA9IDEuMDsgLy8gbWltaWMgYSBcXHRleHRmb250IHJhZGljYWxcbiAgICB9IGVsc2UgaWYgKGhlaWdodCA8IDEuNCkge1xuICAgICAgc2l6ZU11bHRpcGxpZXIgPSAwLjc7IC8vIG1pbWljIGEgXFxzY3JpcHRmb250IHJhZGljYWxcbiAgICB9XG5cbiAgICBzcGFuSGVpZ2h0ID0gKDEuMCArIGV4dHJhVmluaWN1bHVtICsgZW1QYWQpIC8gc2l6ZU11bHRpcGxpZXI7XG4gICAgdGV4SGVpZ2h0ID0gKDEuMDAgKyBleHRyYVZpbmljdWx1bSkgLyBzaXplTXVsdGlwbGllcjtcbiAgICBzcGFuID0gZGVsaW1pdGVyX3NxcnRTdmcoXCJzcXJ0TWFpblwiLCBzcGFuSGVpZ2h0LCB2aWV3Qm94SGVpZ2h0LCBleHRyYVZpbmljdWx1bSwgb3B0aW9ucyk7XG4gICAgc3Bhbi5zdHlsZS5taW5XaWR0aCA9IFwiMC44NTNlbVwiO1xuICAgIGFkdmFuY2VXaWR0aCA9IDAuODMzIC8gc2l6ZU11bHRpcGxpZXI7IC8vIGZyb20gdGhlIGZvbnQuXG4gIH0gZWxzZSBpZiAoZGVsaW0udHlwZSA9PT0gXCJsYXJnZVwiKSB7XG4gICAgLy8gVGhlc2UgU1ZHcyBjb21lIGZyb20gZm9udHM6IEthVGVYX1NpemUxLCBfU2l6ZTIsIGV0Yy5cbiAgICB2aWV3Qm94SGVpZ2h0ID0gKDEwMDAgKyB2YlBhZCkgKiBzaXplVG9NYXhIZWlnaHRbZGVsaW0uc2l6ZV07XG4gICAgdGV4SGVpZ2h0ID0gKHNpemVUb01heEhlaWdodFtkZWxpbS5zaXplXSArIGV4dHJhVmluaWN1bHVtKSAvIHNpemVNdWx0aXBsaWVyO1xuICAgIHNwYW5IZWlnaHQgPSAoc2l6ZVRvTWF4SGVpZ2h0W2RlbGltLnNpemVdICsgZXh0cmFWaW5pY3VsdW0gKyBlbVBhZCkgLyBzaXplTXVsdGlwbGllcjtcbiAgICBzcGFuID0gZGVsaW1pdGVyX3NxcnRTdmcoXCJzcXJ0U2l6ZVwiICsgZGVsaW0uc2l6ZSwgc3BhbkhlaWdodCwgdmlld0JveEhlaWdodCwgZXh0cmFWaW5pY3VsdW0sIG9wdGlvbnMpO1xuICAgIHNwYW4uc3R5bGUubWluV2lkdGggPSBcIjEuMDJlbVwiO1xuICAgIGFkdmFuY2VXaWR0aCA9IDEuMCAvIHNpemVNdWx0aXBsaWVyOyAvLyAxLjAgZnJvbSB0aGUgZm9udC5cbiAgfSBlbHNlIHtcbiAgICAvLyBUYWxsIHNxcnQuIEluIFRlWCwgdGhpcyB3b3VsZCBiZSBzdGFja2VkIHVzaW5nIG11bHRpcGxlIGdseXBocy5cbiAgICAvLyBXZSdsbCB1c2UgYSBzaW5nbGUgU1ZHIHRvIGFjY29tcGxpc2ggdGhlIHNhbWUgdGhpbmcuXG4gICAgc3BhbkhlaWdodCA9IGhlaWdodCArIGV4dHJhVmluaWN1bHVtICsgZW1QYWQ7XG4gICAgdGV4SGVpZ2h0ID0gaGVpZ2h0ICsgZXh0cmFWaW5pY3VsdW07XG4gICAgdmlld0JveEhlaWdodCA9IE1hdGguZmxvb3IoMTAwMCAqIGhlaWdodCArIGV4dHJhVmluaWN1bHVtKSArIHZiUGFkO1xuICAgIHNwYW4gPSBkZWxpbWl0ZXJfc3FydFN2ZyhcInNxcnRUYWxsXCIsIHNwYW5IZWlnaHQsIHZpZXdCb3hIZWlnaHQsIGV4dHJhVmluaWN1bHVtLCBvcHRpb25zKTtcbiAgICBzcGFuLnN0eWxlLm1pbldpZHRoID0gXCIwLjc0MmVtXCI7XG4gICAgYWR2YW5jZVdpZHRoID0gMS4wNTY7XG4gIH1cblxuICBzcGFuLmhlaWdodCA9IHRleEhlaWdodDtcbiAgc3Bhbi5zdHlsZS5oZWlnaHQgPSBzcGFuSGVpZ2h0ICsgXCJlbVwiO1xuICByZXR1cm4ge1xuICAgIHNwYW46IHNwYW4sXG4gICAgYWR2YW5jZVdpZHRoOiBhZHZhbmNlV2lkdGgsXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhY3R1YWwgbGluZSB3aWR0aC5cbiAgICAvLyBUaGlzIGFjdHVhbGx5IHNob3VsZCBkZXBlbmQgb24gdGhlIGNob3NlbiBmb250IC0tIGUuZy4gXFxib2xkbWF0aFxuICAgIC8vIHNob3VsZCB1c2UgdGhlIHRoaWNrZXIgc3VyZCBzeW1ib2xzIGZyb20gZS5nLiBLYVRlWF9NYWluLUJvbGQsIGFuZFxuICAgIC8vIGhhdmUgdGhpY2tlciBydWxlcy5cbiAgICBydWxlV2lkdGg6IChvcHRpb25zLmZvbnRNZXRyaWNzKCkuc3FydFJ1bGVUaGlja25lc3MgKyBleHRyYVZpbmljdWx1bSkgKiBzaXplTXVsdGlwbGllclxuICB9O1xufTsgLy8gVGhlcmUgYXJlIHRocmVlIGtpbmRzIG9mIGRlbGltaXRlcnMsIGRlbGltaXRlcnMgdGhhdCBzdGFjayB3aGVuIHRoZXkgYmVjb21lXG4vLyB0b28gbGFyZ2VcblxuXG52YXIgc3RhY2tMYXJnZURlbGltaXRlcnMgPSBbXCIoXCIsIFwiXFxcXGxwYXJlblwiLCBcIilcIiwgXCJcXFxccnBhcmVuXCIsIFwiW1wiLCBcIlxcXFxsYnJhY2tcIiwgXCJdXCIsIFwiXFxcXHJicmFja1wiLCBcIlxcXFx7XCIsIFwiXFxcXGxicmFjZVwiLCBcIlxcXFx9XCIsIFwiXFxcXHJicmFjZVwiLCBcIlxcXFxsZmxvb3JcIiwgXCJcXFxccmZsb29yXCIsIFwiXFx1MjMwQVwiLCBcIlxcdTIzMEJcIiwgXCJcXFxcbGNlaWxcIiwgXCJcXFxccmNlaWxcIiwgXCJcXHUyMzA4XCIsIFwiXFx1MjMwOVwiLCBcIlxcXFxzdXJkXCJdOyAvLyBkZWxpbWl0ZXJzIHRoYXQgYWx3YXlzIHN0YWNrXG5cbnZhciBzdGFja0Fsd2F5c0RlbGltaXRlcnMgPSBbXCJcXFxcdXBhcnJvd1wiLCBcIlxcXFxkb3duYXJyb3dcIiwgXCJcXFxcdXBkb3duYXJyb3dcIiwgXCJcXFxcVXBhcnJvd1wiLCBcIlxcXFxEb3duYXJyb3dcIiwgXCJcXFxcVXBkb3duYXJyb3dcIiwgXCJ8XCIsIFwiXFxcXHxcIiwgXCJcXFxcdmVydFwiLCBcIlxcXFxWZXJ0XCIsIFwiXFxcXGx2ZXJ0XCIsIFwiXFxcXHJ2ZXJ0XCIsIFwiXFxcXGxWZXJ0XCIsIFwiXFxcXHJWZXJ0XCIsIFwiXFxcXGxncm91cFwiLCBcIlxcXFxyZ3JvdXBcIiwgXCJcXHUyN0VFXCIsIFwiXFx1MjdFRlwiLCBcIlxcXFxsbW91c3RhY2hlXCIsIFwiXFxcXHJtb3VzdGFjaGVcIiwgXCJcXHUyM0IwXCIsIFwiXFx1MjNCMVwiXTsgLy8gYW5kIGRlbGltaXRlcnMgdGhhdCBuZXZlciBzdGFja1xuXG52YXIgc3RhY2tOZXZlckRlbGltaXRlcnMgPSBbXCI8XCIsIFwiPlwiLCBcIlxcXFxsYW5nbGVcIiwgXCJcXFxccmFuZ2xlXCIsIFwiL1wiLCBcIlxcXFxiYWNrc2xhc2hcIiwgXCJcXFxcbHRcIiwgXCJcXFxcZ3RcIl07IC8vIE1ldHJpY3Mgb2YgdGhlIGRpZmZlcmVudCBzaXplcy4gRm91bmQgYnkgbG9va2luZyBhdCBUZVgncyBvdXRwdXQgb2Zcbi8vICRcXGJpZ2x8IC8vIFxcQmlnbHwgXFxiaWdnbHwgXFxCaWdnbHwgXFxzaG93bGlzdHMkXG4vLyBVc2VkIHRvIGNyZWF0ZSBzdGFja2VkIGRlbGltaXRlcnMgb2YgYXBwcm9wcmlhdGUgc2l6ZXMgaW4gbWFrZVNpemVkRGVsaW0uXG5cbnZhciBzaXplVG9NYXhIZWlnaHQgPSBbMCwgMS4yLCAxLjgsIDIuNCwgMy4wXTtcbi8qKlxuICogVXNlZCB0byBjcmVhdGUgYSBkZWxpbWl0ZXIgb2YgYSBzcGVjaWZpYyBzaXplLCB3aGVyZSBgc2l6ZWAgaXMgMSwgMiwgMywgb3IgNC5cbiAqL1xuXG52YXIgZGVsaW1pdGVyX21ha2VTaXplZERlbGltID0gZnVuY3Rpb24gbWFrZVNpemVkRGVsaW0oZGVsaW0sIHNpemUsIG9wdGlvbnMsIG1vZGUsIGNsYXNzZXMpIHtcbiAgLy8gPCBhbmQgPiB0dXJuIGludG8gXFxsYW5nbGUgYW5kIFxccmFuZ2xlIGluIGRlbGltaXRlcnNcbiAgaWYgKGRlbGltID09PSBcIjxcIiB8fCBkZWxpbSA9PT0gXCJcXFxcbHRcIiB8fCBkZWxpbSA9PT0gXCJcXHUyN0U4XCIpIHtcbiAgICBkZWxpbSA9IFwiXFxcXGxhbmdsZVwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIj5cIiB8fCBkZWxpbSA9PT0gXCJcXFxcZ3RcIiB8fCBkZWxpbSA9PT0gXCJcXHUyN0U5XCIpIHtcbiAgICBkZWxpbSA9IFwiXFxcXHJhbmdsZVwiO1xuICB9IC8vIFNpemVkIGRlbGltaXRlcnMgYXJlIG5ldmVyIGNlbnRlcmVkLlxuXG5cbiAgaWYgKHV0aWxzLmNvbnRhaW5zKHN0YWNrTGFyZ2VEZWxpbWl0ZXJzLCBkZWxpbSkgfHwgdXRpbHMuY29udGFpbnMoc3RhY2tOZXZlckRlbGltaXRlcnMsIGRlbGltKSkge1xuICAgIHJldHVybiBkZWxpbWl0ZXJfbWFrZUxhcmdlRGVsaW0oZGVsaW0sIHNpemUsIGZhbHNlLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbiAgfSBlbHNlIGlmICh1dGlscy5jb250YWlucyhzdGFja0Fsd2F5c0RlbGltaXRlcnMsIGRlbGltKSkge1xuICAgIHJldHVybiBkZWxpbWl0ZXJfbWFrZVN0YWNrZWREZWxpbShkZWxpbSwgc2l6ZVRvTWF4SGVpZ2h0W3NpemVdLCBmYWxzZSwgb3B0aW9ucywgbW9kZSwgY2xhc3Nlcyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSWxsZWdhbCBkZWxpbWl0ZXI6ICdcIiArIGRlbGltICsgXCInXCIpO1xuICB9XG59O1xuLyoqXG4gKiBUaGVyZSBhcmUgdGhyZWUgZGlmZmVyZW50IHNlcXVlbmNlcyBvZiBkZWxpbWl0ZXIgc2l6ZXMgdGhhdCB0aGUgZGVsaW1pdGVyc1xuICogZm9sbG93IGRlcGVuZGluZyBvbiB0aGUga2luZCBvZiBkZWxpbWl0ZXIuIFRoaXMgaXMgdXNlZCB3aGVuIGNyZWF0aW5nIGN1c3RvbVxuICogc2l6ZWQgZGVsaW1pdGVycyB0byBkZWNpZGUgd2hldGhlciB0byBjcmVhdGUgYSBzbWFsbCwgbGFyZ2UsIG9yIHN0YWNrZWRcbiAqIGRlbGltaXRlci5cbiAqXG4gKiBJbiByZWFsIFRlWCwgdGhlc2Ugc2VxdWVuY2VzIGFyZW4ndCBleHBsaWNpdGx5IGRlZmluZWQsIGJ1dCBhcmUgaW5zdGVhZFxuICogZGVmaW5lZCBpbnNpZGUgdGhlIGZvbnQgbWV0cmljcy4gU2luY2UgdGhlcmUgYXJlIG9ubHkgdGhyZWUgc2VxdWVuY2VzIHRoYXRcbiAqIGFyZSBwb3NzaWJsZSBmb3IgdGhlIGRlbGltaXRlcnMgdGhhdCBUZVggZGVmaW5lcywgaXQgaXMgZWFzaWVyIHRvIGp1c3QgZW5jb2RlXG4gKiB0aGVtIGV4cGxpY2l0bHkgaGVyZS5cbiAqL1xuXG5cbi8vIERlbGltaXRlcnMgdGhhdCBuZXZlciBzdGFjayB0cnkgc21hbGwgZGVsaW1pdGVycyBhbmQgbGFyZ2UgZGVsaW1pdGVycyBvbmx5XG52YXIgc3RhY2tOZXZlckRlbGltaXRlclNlcXVlbmNlID0gW3tcbiAgdHlwZTogXCJzbWFsbFwiLFxuICBzdHlsZTogc3JjX1N0eWxlLlNDUklQVFNDUklQVFxufSwge1xuICB0eXBlOiBcInNtYWxsXCIsXG4gIHN0eWxlOiBzcmNfU3R5bGUuU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IHNyY19TdHlsZS5URVhUXG59LCB7XG4gIHR5cGU6IFwibGFyZ2VcIixcbiAgc2l6ZTogMVxufSwge1xuICB0eXBlOiBcImxhcmdlXCIsXG4gIHNpemU6IDJcbn0sIHtcbiAgdHlwZTogXCJsYXJnZVwiLFxuICBzaXplOiAzXG59LCB7XG4gIHR5cGU6IFwibGFyZ2VcIixcbiAgc2l6ZTogNFxufV07IC8vIERlbGltaXRlcnMgdGhhdCBhbHdheXMgc3RhY2sgdHJ5IHRoZSBzbWFsbCBkZWxpbWl0ZXJzIGZpcnN0LCB0aGVuIHN0YWNrXG5cbnZhciBzdGFja0Fsd2F5c0RlbGltaXRlclNlcXVlbmNlID0gW3tcbiAgdHlwZTogXCJzbWFsbFwiLFxuICBzdHlsZTogc3JjX1N0eWxlLlNDUklQVFNDUklQVFxufSwge1xuICB0eXBlOiBcInNtYWxsXCIsXG4gIHN0eWxlOiBzcmNfU3R5bGUuU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IHNyY19TdHlsZS5URVhUXG59LCB7XG4gIHR5cGU6IFwic3RhY2tcIlxufV07IC8vIERlbGltaXRlcnMgdGhhdCBzdGFjayB3aGVuIGxhcmdlIHRyeSB0aGUgc21hbGwgYW5kIHRoZW4gbGFyZ2UgZGVsaW1pdGVycywgYW5kXG4vLyBzdGFjayBhZnRlcndhcmRzXG5cbnZhciBzdGFja0xhcmdlRGVsaW1pdGVyU2VxdWVuY2UgPSBbe1xuICB0eXBlOiBcInNtYWxsXCIsXG4gIHN0eWxlOiBzcmNfU3R5bGUuU0NSSVBUU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IHNyY19TdHlsZS5TQ1JJUFRcbn0sIHtcbiAgdHlwZTogXCJzbWFsbFwiLFxuICBzdHlsZTogc3JjX1N0eWxlLlRFWFRcbn0sIHtcbiAgdHlwZTogXCJsYXJnZVwiLFxuICBzaXplOiAxXG59LCB7XG4gIHR5cGU6IFwibGFyZ2VcIixcbiAgc2l6ZTogMlxufSwge1xuICB0eXBlOiBcImxhcmdlXCIsXG4gIHNpemU6IDNcbn0sIHtcbiAgdHlwZTogXCJsYXJnZVwiLFxuICBzaXplOiA0XG59LCB7XG4gIHR5cGU6IFwic3RhY2tcIlxufV07XG4vKipcbiAqIEdldCB0aGUgZm9udCB1c2VkIGluIGEgZGVsaW1pdGVyIGJhc2VkIG9uIHdoYXQga2luZCBvZiBkZWxpbWl0ZXIgaXQgaXMuXG4gKiBUT0RPKCM5NjMpIFVzZSBtb3JlIHNwZWNpZmljIGZvbnQgZmFtaWx5IHJldHVybiB0eXBlIG9uY2UgdGhhdCBpcyBpbnRyb2R1Y2VkLlxuICovXG5cbnZhciBkZWxpbVR5cGVUb0ZvbnQgPSBmdW5jdGlvbiBkZWxpbVR5cGVUb0ZvbnQodHlwZSkge1xuICBpZiAodHlwZS50eXBlID09PSBcInNtYWxsXCIpIHtcbiAgICByZXR1cm4gXCJNYWluLVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmICh0eXBlLnR5cGUgPT09IFwibGFyZ2VcIikge1xuICAgIHJldHVybiBcIlNpemVcIiArIHR5cGUuc2l6ZSArIFwiLVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmICh0eXBlLnR5cGUgPT09IFwic3RhY2tcIikge1xuICAgIHJldHVybiBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBZGQgc3VwcG9ydCBmb3IgZGVsaW0gdHlwZSAnXCIgKyB0eXBlLnR5cGUgKyBcIicgaGVyZS5cIik7XG4gIH1cbn07XG4vKipcbiAqIFRyYXZlcnNlIGEgc2VxdWVuY2Ugb2YgdHlwZXMgb2YgZGVsaW1pdGVycyB0byBkZWNpZGUgd2hhdCBraW5kIG9mIGRlbGltaXRlclxuICogc2hvdWxkIGJlIHVzZWQgdG8gY3JlYXRlIGEgZGVsaW1pdGVyIG9mIHRoZSBnaXZlbiBoZWlnaHQrZGVwdGguXG4gKi9cblxuXG52YXIgdHJhdmVyc2VTZXF1ZW5jZSA9IGZ1bmN0aW9uIHRyYXZlcnNlU2VxdWVuY2UoZGVsaW0sIGhlaWdodCwgc2VxdWVuY2UsIG9wdGlvbnMpIHtcbiAgLy8gSGVyZSwgd2UgY2hvb3NlIHRoZSBpbmRleCB3ZSBzaG91bGQgc3RhcnQgYXQgaW4gdGhlIHNlcXVlbmNlcy4gSW4gc21hbGxlclxuICAvLyBzaXplcyAod2hpY2ggY29ycmVzcG9uZCB0byBsYXJnZXIgbnVtYmVycyBpbiBzdHlsZS5zaXplKSB3ZSBzdGFydCBlYXJsaWVyXG4gIC8vIGluIHRoZSBzZXF1ZW5jZS4gVGh1cywgc2NyaXB0c2NyaXB0IHN0YXJ0cyBhdCBpbmRleCAzLTM9MCwgc2NyaXB0IHN0YXJ0c1xuICAvLyBhdCBpbmRleCAzLTI9MSwgdGV4dCBzdGFydHMgYXQgMy0xPTIsIGFuZCBkaXNwbGF5IHN0YXJ0cyBhdCBtaW4oMiwzLTApPTJcbiAgdmFyIHN0YXJ0ID0gTWF0aC5taW4oMiwgMyAtIG9wdGlvbnMuc3R5bGUuc2l6ZSk7XG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgc2VxdWVuY2UubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc2VxdWVuY2VbaV0udHlwZSA9PT0gXCJzdGFja1wiKSB7XG4gICAgICAvLyBUaGlzIGlzIGFsd2F5cyB0aGUgbGFzdCBkZWxpbWl0ZXIsIHNvIHdlIGp1c3QgYnJlYWsgdGhlIGxvb3Agbm93LlxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIG1ldHJpY3MgPSBkZWxpbWl0ZXJfZ2V0TWV0cmljcyhkZWxpbSwgZGVsaW1UeXBlVG9Gb250KHNlcXVlbmNlW2ldKSwgXCJtYXRoXCIpO1xuICAgIHZhciBoZWlnaHREZXB0aCA9IG1ldHJpY3MuaGVpZ2h0ICsgbWV0cmljcy5kZXB0aDsgLy8gU21hbGwgZGVsaW1pdGVycyBhcmUgc2NhbGVkIGRvd24gdmVyc2lvbnMgb2YgdGhlIHNhbWUgZm9udCwgc28gd2VcbiAgICAvLyBhY2NvdW50IGZvciB0aGUgc3R5bGUgY2hhbmdlIHNpemUuXG5cbiAgICBpZiAoc2VxdWVuY2VbaV0udHlwZSA9PT0gXCJzbWFsbFwiKSB7XG4gICAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nQmFzZVN0eWxlKHNlcXVlbmNlW2ldLnN0eWxlKTtcbiAgICAgIGhlaWdodERlcHRoICo9IG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgfSAvLyBDaGVjayBpZiB0aGUgZGVsaW1pdGVyIGF0IHRoaXMgc2l6ZSB3b3JrcyBmb3IgdGhlIGdpdmVuIGhlaWdodC5cblxuXG4gICAgaWYgKGhlaWdodERlcHRoID4gaGVpZ2h0KSB7XG4gICAgICByZXR1cm4gc2VxdWVuY2VbaV07XG4gICAgfVxuICB9IC8vIElmIHdlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UsIHJldHVybiB0aGUgbGFzdCBzZXF1ZW5jZSBlbGVtZW50LlxuXG5cbiAgcmV0dXJuIHNlcXVlbmNlW3NlcXVlbmNlLmxlbmd0aCAtIDFdO1xufTtcbi8qKlxuICogTWFrZSBhIGRlbGltaXRlciBvZiBhIGdpdmVuIGhlaWdodCtkZXB0aCwgd2l0aCBvcHRpb25hbCBjZW50ZXJpbmcuIEhlcmUsIHdlXG4gKiB0cmF2ZXJzZSB0aGUgc2VxdWVuY2VzLCBhbmQgY3JlYXRlIGEgZGVsaW1pdGVyIHRoYXQgdGhlIHNlcXVlbmNlIHRlbGxzIHVzIHRvLlxuICovXG5cblxudmFyIGRlbGltaXRlcl9tYWtlQ3VzdG9tU2l6ZWREZWxpbSA9IGZ1bmN0aW9uIG1ha2VDdXN0b21TaXplZERlbGltKGRlbGltLCBoZWlnaHQsIGNlbnRlciwgb3B0aW9ucywgbW9kZSwgY2xhc3Nlcykge1xuICBpZiAoZGVsaW0gPT09IFwiPFwiIHx8IGRlbGltID09PSBcIlxcXFxsdFwiIHx8IGRlbGltID09PSBcIlxcdTI3RThcIikge1xuICAgIGRlbGltID0gXCJcXFxcbGFuZ2xlXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiPlwiIHx8IGRlbGltID09PSBcIlxcXFxndFwiIHx8IGRlbGltID09PSBcIlxcdTI3RTlcIikge1xuICAgIGRlbGltID0gXCJcXFxccmFuZ2xlXCI7XG4gIH0gLy8gRGVjaWRlIHdoYXQgc2VxdWVuY2UgdG8gdXNlXG5cblxuICB2YXIgc2VxdWVuY2U7XG5cbiAgaWYgKHV0aWxzLmNvbnRhaW5zKHN0YWNrTmV2ZXJEZWxpbWl0ZXJzLCBkZWxpbSkpIHtcbiAgICBzZXF1ZW5jZSA9IHN0YWNrTmV2ZXJEZWxpbWl0ZXJTZXF1ZW5jZTtcbiAgfSBlbHNlIGlmICh1dGlscy5jb250YWlucyhzdGFja0xhcmdlRGVsaW1pdGVycywgZGVsaW0pKSB7XG4gICAgc2VxdWVuY2UgPSBzdGFja0xhcmdlRGVsaW1pdGVyU2VxdWVuY2U7XG4gIH0gZWxzZSB7XG4gICAgc2VxdWVuY2UgPSBzdGFja0Fsd2F5c0RlbGltaXRlclNlcXVlbmNlO1xuICB9IC8vIExvb2sgdGhyb3VnaCB0aGUgc2VxdWVuY2VcblxuXG4gIHZhciBkZWxpbVR5cGUgPSB0cmF2ZXJzZVNlcXVlbmNlKGRlbGltLCBoZWlnaHQsIHNlcXVlbmNlLCBvcHRpb25zKTsgLy8gR2V0IHRoZSBkZWxpbWl0ZXIgZnJvbSBmb250IGdseXBocy5cbiAgLy8gRGVwZW5kaW5nIG9uIHRoZSBzZXF1ZW5jZSBlbGVtZW50IHdlIGRlY2lkZWQgb24sIGNhbGwgdGhlXG4gIC8vIGFwcHJvcHJpYXRlIGZ1bmN0aW9uLlxuXG4gIGlmIChkZWxpbVR5cGUudHlwZSA9PT0gXCJzbWFsbFwiKSB7XG4gICAgcmV0dXJuIGRlbGltaXRlcl9tYWtlU21hbGxEZWxpbShkZWxpbSwgZGVsaW1UeXBlLnN0eWxlLCBjZW50ZXIsIG9wdGlvbnMsIG1vZGUsIGNsYXNzZXMpO1xuICB9IGVsc2UgaWYgKGRlbGltVHlwZS50eXBlID09PSBcImxhcmdlXCIpIHtcbiAgICByZXR1cm4gZGVsaW1pdGVyX21ha2VMYXJnZURlbGltKGRlbGltLCBkZWxpbVR5cGUuc2l6ZSwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbiAgfSBlbHNlXG4gICAgLyogaWYgKGRlbGltVHlwZS50eXBlID09PSBcInN0YWNrXCIpICovXG4gICAge1xuICAgICAgcmV0dXJuIGRlbGltaXRlcl9tYWtlU3RhY2tlZERlbGltKGRlbGltLCBoZWlnaHQsIGNlbnRlciwgb3B0aW9ucywgbW9kZSwgY2xhc3Nlcyk7XG4gICAgfVxufTtcbi8qKlxuICogTWFrZSBhIGRlbGltaXRlciBmb3IgdXNlIHdpdGggYFxcbGVmdGAgYW5kIGBcXHJpZ2h0YCwgZ2l2ZW4gYSBoZWlnaHQgYW5kIGRlcHRoXG4gKiBvZiBhbiBleHByZXNzaW9uIHRoYXQgdGhlIGRlbGltaXRlcnMgc3Vycm91bmQuXG4gKi9cblxuXG52YXIgbWFrZUxlZnRSaWdodERlbGltID0gZnVuY3Rpb24gbWFrZUxlZnRSaWdodERlbGltKGRlbGltLCBoZWlnaHQsIGRlcHRoLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKSB7XG4gIC8vIFdlIGFsd2F5cyBjZW50ZXIgXFxsZWZ0L1xccmlnaHQgZGVsaW1pdGVycywgc28gdGhlIGF4aXMgaXMgYWx3YXlzIHNoaWZ0ZWRcbiAgdmFyIGF4aXNIZWlnaHQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCAqIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7IC8vIFRha2VuIGZyb20gVGVYIHNvdXJjZSwgdGV4LndlYiwgZnVuY3Rpb24gbWFrZV9sZWZ0X3JpZ2h0XG5cbiAgdmFyIGRlbGltaXRlckZhY3RvciA9IDkwMTtcbiAgdmFyIGRlbGltaXRlckV4dGVuZCA9IDUuMCAvIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5wdFBlckVtO1xuICB2YXIgbWF4RGlzdEZyb21BeGlzID0gTWF0aC5tYXgoaGVpZ2h0IC0gYXhpc0hlaWdodCwgZGVwdGggKyBheGlzSGVpZ2h0KTtcbiAgdmFyIHRvdGFsSGVpZ2h0ID0gTWF0aC5tYXgoIC8vIEluIHJlYWwgVGVYLCBjYWxjdWxhdGlvbnMgYXJlIGRvbmUgdXNpbmcgaW50ZWdyYWwgdmFsdWVzIHdoaWNoIGFyZVxuICAvLyA2NTUzNiBwZXIgcHQsIG9yIDY1NTM2MCBwZXIgZW0uIFNvLCB0aGUgZGl2aXNpb24gaGVyZSB0cnVuY2F0ZXMgaW5cbiAgLy8gVGVYIGJ1dCBkb2Vzbid0IGhlcmUsIHByb2R1Y2luZyBkaWZmZXJlbnQgcmVzdWx0cy4gSWYgd2Ugd2FudGVkIHRvXG4gIC8vIGV4YWN0bHkgbWF0Y2ggVGVYJ3MgY2FsY3VsYXRpb24sIHdlIGNvdWxkIGRvXG4gIC8vICAgTWF0aC5mbG9vcig2NTUzNjAgKiBtYXhEaXN0RnJvbUF4aXMgLyA1MDApICpcbiAgLy8gICAgZGVsaW1pdGVyRmFjdG9yIC8gNjU1MzYwXG4gIC8vIChUbyBzZWUgdGhlIGRpZmZlcmVuY2UsIGNvbXBhcmVcbiAgLy8gICAgeF57eF57XFxsZWZ0KFxccnVsZXswLjFlbX17MC42OGVtfVxccmlnaHQpfX1cbiAgLy8gaW4gVGVYIGFuZCBLYVRlWClcbiAgbWF4RGlzdEZyb21BeGlzIC8gNTAwICogZGVsaW1pdGVyRmFjdG9yLCAyICogbWF4RGlzdEZyb21BeGlzIC0gZGVsaW1pdGVyRXh0ZW5kKTsgLy8gRmluYWxseSwgd2UgZGVmZXIgdG8gYG1ha2VDdXN0b21TaXplZERlbGltYCB3aXRoIG91ciBjYWxjdWxhdGVkIHRvdGFsXG4gIC8vIGhlaWdodFxuXG4gIHJldHVybiBkZWxpbWl0ZXJfbWFrZUN1c3RvbVNpemVkRGVsaW0oZGVsaW0sIHRvdGFsSGVpZ2h0LCB0cnVlLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGRlbGltaXRlciA9ICh7XG4gIHNxcnRJbWFnZTogbWFrZVNxcnRJbWFnZSxcbiAgc2l6ZWREZWxpbTogZGVsaW1pdGVyX21ha2VTaXplZERlbGltLFxuICBjdXN0b21TaXplZERlbGltOiBkZWxpbWl0ZXJfbWFrZUN1c3RvbVNpemVkRGVsaW0sXG4gIGxlZnRSaWdodERlbGltOiBtYWtlTGVmdFJpZ2h0RGVsaW1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2RlbGltc2l6aW5nLmpzXG5cblxuXG5cblxuXG5cblxuXG4vLyBFeHRyYSBkYXRhIG5lZWRlZCBmb3IgdGhlIGRlbGltaXRlciBoYW5kbGVyIGRvd24gYmVsb3dcbnZhciBkZWxpbWl0ZXJTaXplcyA9IHtcbiAgXCJcXFxcYmlnbFwiOiB7XG4gICAgbWNsYXNzOiBcIm1vcGVuXCIsXG4gICAgc2l6ZTogMVxuICB9LFxuICBcIlxcXFxCaWdsXCI6IHtcbiAgICBtY2xhc3M6IFwibW9wZW5cIixcbiAgICBzaXplOiAyXG4gIH0sXG4gIFwiXFxcXGJpZ2dsXCI6IHtcbiAgICBtY2xhc3M6IFwibW9wZW5cIixcbiAgICBzaXplOiAzXG4gIH0sXG4gIFwiXFxcXEJpZ2dsXCI6IHtcbiAgICBtY2xhc3M6IFwibW9wZW5cIixcbiAgICBzaXplOiA0XG4gIH0sXG4gIFwiXFxcXGJpZ3JcIjoge1xuICAgIG1jbGFzczogXCJtY2xvc2VcIixcbiAgICBzaXplOiAxXG4gIH0sXG4gIFwiXFxcXEJpZ3JcIjoge1xuICAgIG1jbGFzczogXCJtY2xvc2VcIixcbiAgICBzaXplOiAyXG4gIH0sXG4gIFwiXFxcXGJpZ2dyXCI6IHtcbiAgICBtY2xhc3M6IFwibWNsb3NlXCIsXG4gICAgc2l6ZTogM1xuICB9LFxuICBcIlxcXFxCaWdnclwiOiB7XG4gICAgbWNsYXNzOiBcIm1jbG9zZVwiLFxuICAgIHNpemU6IDRcbiAgfSxcbiAgXCJcXFxcYmlnbVwiOiB7XG4gICAgbWNsYXNzOiBcIm1yZWxcIixcbiAgICBzaXplOiAxXG4gIH0sXG4gIFwiXFxcXEJpZ21cIjoge1xuICAgIG1jbGFzczogXCJtcmVsXCIsXG4gICAgc2l6ZTogMlxuICB9LFxuICBcIlxcXFxiaWdnbVwiOiB7XG4gICAgbWNsYXNzOiBcIm1yZWxcIixcbiAgICBzaXplOiAzXG4gIH0sXG4gIFwiXFxcXEJpZ2dtXCI6IHtcbiAgICBtY2xhc3M6IFwibXJlbFwiLFxuICAgIHNpemU6IDRcbiAgfSxcbiAgXCJcXFxcYmlnXCI6IHtcbiAgICBtY2xhc3M6IFwibW9yZFwiLFxuICAgIHNpemU6IDFcbiAgfSxcbiAgXCJcXFxcQmlnXCI6IHtcbiAgICBtY2xhc3M6IFwibW9yZFwiLFxuICAgIHNpemU6IDJcbiAgfSxcbiAgXCJcXFxcYmlnZ1wiOiB7XG4gICAgbWNsYXNzOiBcIm1vcmRcIixcbiAgICBzaXplOiAzXG4gIH0sXG4gIFwiXFxcXEJpZ2dcIjoge1xuICAgIG1jbGFzczogXCJtb3JkXCIsXG4gICAgc2l6ZTogNFxuICB9XG59O1xudmFyIGRlbGltaXRlcnMgPSBbXCIoXCIsIFwiXFxcXGxwYXJlblwiLCBcIilcIiwgXCJcXFxccnBhcmVuXCIsIFwiW1wiLCBcIlxcXFxsYnJhY2tcIiwgXCJdXCIsIFwiXFxcXHJicmFja1wiLCBcIlxcXFx7XCIsIFwiXFxcXGxicmFjZVwiLCBcIlxcXFx9XCIsIFwiXFxcXHJicmFjZVwiLCBcIlxcXFxsZmxvb3JcIiwgXCJcXFxccmZsb29yXCIsIFwiXFx1MjMwQVwiLCBcIlxcdTIzMEJcIiwgXCJcXFxcbGNlaWxcIiwgXCJcXFxccmNlaWxcIiwgXCJcXHUyMzA4XCIsIFwiXFx1MjMwOVwiLCBcIjxcIiwgXCI+XCIsIFwiXFxcXGxhbmdsZVwiLCBcIlxcdTI3RThcIiwgXCJcXFxccmFuZ2xlXCIsIFwiXFx1MjdFOVwiLCBcIlxcXFxsdFwiLCBcIlxcXFxndFwiLCBcIlxcXFxsdmVydFwiLCBcIlxcXFxydmVydFwiLCBcIlxcXFxsVmVydFwiLCBcIlxcXFxyVmVydFwiLCBcIlxcXFxsZ3JvdXBcIiwgXCJcXFxccmdyb3VwXCIsIFwiXFx1MjdFRVwiLCBcIlxcdTI3RUZcIiwgXCJcXFxcbG1vdXN0YWNoZVwiLCBcIlxcXFxybW91c3RhY2hlXCIsIFwiXFx1MjNCMFwiLCBcIlxcdTIzQjFcIiwgXCIvXCIsIFwiXFxcXGJhY2tzbGFzaFwiLCBcInxcIiwgXCJcXFxcdmVydFwiLCBcIlxcXFx8XCIsIFwiXFxcXFZlcnRcIiwgXCJcXFxcdXBhcnJvd1wiLCBcIlxcXFxVcGFycm93XCIsIFwiXFxcXGRvd25hcnJvd1wiLCBcIlxcXFxEb3duYXJyb3dcIiwgXCJcXFxcdXBkb3duYXJyb3dcIiwgXCJcXFxcVXBkb3duYXJyb3dcIiwgXCIuXCJdO1xuXG4vLyBEZWxpbWl0ZXIgZnVuY3Rpb25zXG5mdW5jdGlvbiBjaGVja0RlbGltaXRlcihkZWxpbSwgY29udGV4dCkge1xuICB2YXIgc3ltRGVsaW0gPSBjaGVja1N5bWJvbE5vZGVUeXBlKGRlbGltKTtcblxuICBpZiAoc3ltRGVsaW0gJiYgdXRpbHMuY29udGFpbnMoZGVsaW1pdGVycywgc3ltRGVsaW0udGV4dCkpIHtcbiAgICByZXR1cm4gc3ltRGVsaW07XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCBkZWxpbWl0ZXI6ICdcIiArIChzeW1EZWxpbSA/IHN5bURlbGltLnRleHQgOiBKU09OLnN0cmluZ2lmeShkZWxpbSkpICsgXCInIGFmdGVyICdcIiArIGNvbnRleHQuZnVuY05hbWUgKyBcIidcIiwgZGVsaW0pO1xuICB9XG59XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJkZWxpbXNpemluZ1wiLFxuICBuYW1lczogW1wiXFxcXGJpZ2xcIiwgXCJcXFxcQmlnbFwiLCBcIlxcXFxiaWdnbFwiLCBcIlxcXFxCaWdnbFwiLCBcIlxcXFxiaWdyXCIsIFwiXFxcXEJpZ3JcIiwgXCJcXFxcYmlnZ3JcIiwgXCJcXFxcQmlnZ3JcIiwgXCJcXFxcYmlnbVwiLCBcIlxcXFxCaWdtXCIsIFwiXFxcXGJpZ2dtXCIsIFwiXFxcXEJpZ2dtXCIsIFwiXFxcXGJpZ1wiLCBcIlxcXFxCaWdcIiwgXCJcXFxcYmlnZ1wiLCBcIlxcXFxCaWdnXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gICAgdmFyIGRlbGltID0gY2hlY2tEZWxpbWl0ZXIoYXJnc1swXSwgY29udGV4dCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZGVsaW1zaXppbmdcIixcbiAgICAgIG1vZGU6IGNvbnRleHQucGFyc2VyLm1vZGUsXG4gICAgICBzaXplOiBkZWxpbWl0ZXJTaXplc1tjb250ZXh0LmZ1bmNOYW1lXS5zaXplLFxuICAgICAgbWNsYXNzOiBkZWxpbWl0ZXJTaXplc1tjb250ZXh0LmZ1bmNOYW1lXS5tY2xhc3MsXG4gICAgICBkZWxpbTogZGVsaW0udGV4dFxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIGlmIChncm91cC5kZWxpbSA9PT0gXCIuXCIpIHtcbiAgICAgIC8vIEVtcHR5IGRlbGltaXRlcnMgc3RpbGwgY291bnQgYXMgZWxlbWVudHMsIGV2ZW4gdGhvdWdoIHRoZXkgZG9uJ3RcbiAgICAgIC8vIHNob3cgYW55dGhpbmcuXG4gICAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW2dyb3VwLm1jbGFzc10pO1xuICAgIH0gLy8gVXNlIGRlbGltaXRlci5zaXplZERlbGltIHRvIGdlbmVyYXRlIHRoZSBkZWxpbWl0ZXIuXG5cblxuICAgIHJldHVybiBkZWxpbWl0ZXIuc2l6ZWREZWxpbShncm91cC5kZWxpbSwgZ3JvdXAuc2l6ZSwgb3B0aW9ucywgZ3JvdXAubW9kZSwgW2dyb3VwLm1jbGFzc10pO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gW107XG5cbiAgICBpZiAoZ3JvdXAuZGVsaW0gIT09IFwiLlwiKSB7XG4gICAgICBjaGlsZHJlbi5wdXNoKGJ1aWxkTWF0aE1MX21ha2VUZXh0KGdyb3VwLmRlbGltLCBncm91cC5tb2RlKSk7XG4gICAgfVxuXG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIGNoaWxkcmVuKTtcblxuICAgIGlmIChncm91cC5tY2xhc3MgPT09IFwibW9wZW5cIiB8fCBncm91cC5tY2xhc3MgPT09IFwibWNsb3NlXCIpIHtcbiAgICAgIC8vIE9ubHkgc29tZSBvZiB0aGUgZGVsaW1zaXppbmcgZnVuY3Rpb25zIGFjdCBhcyBmZW5jZXMsIGFuZCB0aGV5XG4gICAgICAvLyByZXR1cm4gXCJtb3BlblwiIG9yIFwibWNsb3NlXCIgbWNsYXNzLlxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJmZW5jZVwiLCBcInRydWVcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEV4cGxpY2l0bHkgZGlzYWJsZSBmZW5jaW5nIGlmIGl0J3Mgbm90IGEgZmVuY2UsIHRvIG92ZXJyaWRlIHRoZVxuICAgICAgLy8gZGVmYXVsdHMuXG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImZlbmNlXCIsIFwiZmFsc2VcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBhc3NlcnRQYXJzZWQoZ3JvdXApIHtcbiAgaWYgKCFncm91cC5ib2R5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQnVnOiBUaGUgbGVmdHJpZ2h0IFBhcnNlTm9kZSB3YXNuJ3QgZnVsbHkgcGFyc2VkLlwiKTtcbiAgfVxufVxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibGVmdHJpZ2h0LXJpZ2h0XCIsXG4gIG5hbWVzOiBbXCJcXFxccmlnaHRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKGNvbnRleHQsIGFyZ3MpIHtcbiAgICAvLyBcXGxlZnQgY2FzZSBiZWxvdyB0cmlnZ2VycyBwYXJzaW5nIG9mIFxccmlnaHQgaW5cbiAgICAvLyAgIGBjb25zdCByaWdodCA9IHBhcnNlci5wYXJzZUZ1bmN0aW9uKCk7YFxuICAgIC8vIHVzZXMgdGhpcyByZXR1cm4gdmFsdWUuXG4gICAgdmFyIGNvbG9yID0gY29udGV4dC5wYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5nZXQoXCJcXFxcY3VycmVudEBjb2xvclwiKTtcblxuICAgIGlmIChjb2xvciAmJiB0eXBlb2YgY29sb3IgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlxcXFxjdXJyZW50QGNvbG9yIHNldCB0byBub24tc3RyaW5nIGluIFxcXFxyaWdodFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJsZWZ0cmlnaHQtcmlnaHRcIixcbiAgICAgIG1vZGU6IGNvbnRleHQucGFyc2VyLm1vZGUsXG4gICAgICBkZWxpbTogY2hlY2tEZWxpbWl0ZXIoYXJnc1swXSwgY29udGV4dCkudGV4dCxcbiAgICAgIGNvbG9yOiBjb2xvciAvLyB1bmRlZmluZWQgaWYgbm90IHNldCB2aWEgXFxjb2xvclxuXG4gICAgfTtcbiAgfVxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibGVmdHJpZ2h0XCIsXG4gIG5hbWVzOiBbXCJcXFxcbGVmdFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoY29udGV4dCwgYXJncykge1xuICAgIHZhciBkZWxpbSA9IGNoZWNrRGVsaW1pdGVyKGFyZ3NbMF0sIGNvbnRleHQpO1xuICAgIHZhciBwYXJzZXIgPSBjb250ZXh0LnBhcnNlcjsgLy8gUGFyc2Ugb3V0IHRoZSBpbXBsaWNpdCBib2R5XG5cbiAgICArK3BhcnNlci5sZWZ0cmlnaHREZXB0aDsgLy8gcGFyc2VFeHByZXNzaW9uIHN0b3BzIGJlZm9yZSAnXFxcXHJpZ2h0J1xuXG4gICAgdmFyIGJvZHkgPSBwYXJzZXIucGFyc2VFeHByZXNzaW9uKGZhbHNlKTtcbiAgICAtLXBhcnNlci5sZWZ0cmlnaHREZXB0aDsgLy8gQ2hlY2sgdGhlIG5leHQgdG9rZW5cblxuICAgIHBhcnNlci5leHBlY3QoXCJcXFxccmlnaHRcIiwgZmFsc2UpO1xuICAgIHZhciByaWdodCA9IGFzc2VydE5vZGVUeXBlKHBhcnNlci5wYXJzZUZ1bmN0aW9uKCksIFwibGVmdHJpZ2h0LXJpZ2h0XCIpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImxlZnRyaWdodFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5OiBib2R5LFxuICAgICAgbGVmdDogZGVsaW0udGV4dCxcbiAgICAgIHJpZ2h0OiByaWdodC5kZWxpbSxcbiAgICAgIHJpZ2h0Q29sb3I6IHJpZ2h0LmNvbG9yXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgYXNzZXJ0UGFyc2VkKGdyb3VwKTsgLy8gQnVpbGQgdGhlIGlubmVyIGV4cHJlc3Npb25cblxuICAgIHZhciBpbm5lciA9IGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucywgdHJ1ZSwgW1wibW9wZW5cIiwgXCJtY2xvc2VcIl0pO1xuICAgIHZhciBpbm5lckhlaWdodCA9IDA7XG4gICAgdmFyIGlubmVyRGVwdGggPSAwO1xuICAgIHZhciBoYWRNaWRkbGUgPSBmYWxzZTsgLy8gQ2FsY3VsYXRlIGl0cyBoZWlnaHQgYW5kIGRlcHRoXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlubmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBQcm9wZXJ0eSBgaXNNaWRkbGVgIG5vdCBkZWZpbmVkIG9uIGBzcGFuYC4gU2VlIGNvbW1lbnQgaW5cbiAgICAgIC8vIFwibWlkZGxlXCIncyBodG1sQnVpbGRlci5cbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIGlmIChpbm5lcltpXS5pc01pZGRsZSkge1xuICAgICAgICBoYWRNaWRkbGUgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5uZXJIZWlnaHQgPSBNYXRoLm1heChpbm5lcltpXS5oZWlnaHQsIGlubmVySGVpZ2h0KTtcbiAgICAgICAgaW5uZXJEZXB0aCA9IE1hdGgubWF4KGlubmVyW2ldLmRlcHRoLCBpbm5lckRlcHRoKTtcbiAgICAgIH1cbiAgICB9IC8vIFRoZSBzaXplIG9mIGRlbGltaXRlcnMgaXMgdGhlIHNhbWUsIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBzdHlsZSB3ZSBhcmVcbiAgICAvLyBpbi4gVGh1cywgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiBkZWxpbWl0ZXIgd2UgbmVlZCBhcm91bmRcbiAgICAvLyBhIGdyb3VwLCB3ZSBzY2FsZSBkb3duIHRoZSBpbm5lciBzaXplIGJhc2VkIG9uIHRoZSBzaXplLlxuXG5cbiAgICBpbm5lckhlaWdodCAqPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICAgIGlubmVyRGVwdGggKj0gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgICB2YXIgbGVmdERlbGltO1xuXG4gICAgaWYgKGdyb3VwLmxlZnQgPT09IFwiLlwiKSB7XG4gICAgICAvLyBFbXB0eSBkZWxpbWl0ZXJzIGluIFxcbGVmdCBhbmQgXFxyaWdodCBtYWtlIG51bGwgZGVsaW1pdGVyIHNwYWNlcy5cbiAgICAgIGxlZnREZWxpbSA9IG1ha2VOdWxsRGVsaW1pdGVyKG9wdGlvbnMsIFtcIm1vcGVuXCJdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlLCB1c2UgbGVmdFJpZ2h0RGVsaW0gdG8gZ2VuZXJhdGUgdGhlIGNvcnJlY3Qgc2l6ZWRcbiAgICAgIC8vIGRlbGltaXRlci5cbiAgICAgIGxlZnREZWxpbSA9IGRlbGltaXRlci5sZWZ0UmlnaHREZWxpbShncm91cC5sZWZ0LCBpbm5lckhlaWdodCwgaW5uZXJEZXB0aCwgb3B0aW9ucywgZ3JvdXAubW9kZSwgW1wibW9wZW5cIl0pO1xuICAgIH0gLy8gQWRkIGl0IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGV4cHJlc3Npb25cblxuXG4gICAgaW5uZXIudW5zaGlmdChsZWZ0RGVsaW0pOyAvLyBIYW5kbGUgbWlkZGxlIGRlbGltaXRlcnNcblxuICAgIGlmIChoYWRNaWRkbGUpIHtcbiAgICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBpbm5lci5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdmFyIG1pZGRsZURlbGltID0gaW5uZXJbX2ldOyAvLyBQcm9wZXJ0eSBgaXNNaWRkbGVgIG5vdCBkZWZpbmVkIG9uIGBzcGFuYC4gU2VlIGNvbW1lbnQgaW5cbiAgICAgICAgLy8gXCJtaWRkbGVcIidzIGh0bWxCdWlsZGVyLlxuICAgICAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgICAgdmFyIGlzTWlkZGxlID0gbWlkZGxlRGVsaW0uaXNNaWRkbGU7XG5cbiAgICAgICAgaWYgKGlzTWlkZGxlKSB7XG4gICAgICAgICAgLy8gQXBwbHkgdGhlIG9wdGlvbnMgdGhhdCB3ZXJlIGFjdGl2ZSB3aGVuIFxcbWlkZGxlIHdhcyBjYWxsZWRcbiAgICAgICAgICBpbm5lcltfaV0gPSBkZWxpbWl0ZXIubGVmdFJpZ2h0RGVsaW0oaXNNaWRkbGUuZGVsaW0sIGlubmVySGVpZ2h0LCBpbm5lckRlcHRoLCBpc01pZGRsZS5vcHRpb25zLCBncm91cC5tb2RlLCBbXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmlnaHREZWxpbTsgLy8gU2FtZSBmb3IgdGhlIHJpZ2h0IGRlbGltaXRlciwgYnV0IHVzaW5nIGNvbG9yIHNwZWNpZmllZCBieSBcXGNvbG9yXG5cbiAgICBpZiAoZ3JvdXAucmlnaHQgPT09IFwiLlwiKSB7XG4gICAgICByaWdodERlbGltID0gbWFrZU51bGxEZWxpbWl0ZXIob3B0aW9ucywgW1wibWNsb3NlXCJdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGNvbG9yT3B0aW9ucyA9IGdyb3VwLnJpZ2h0Q29sb3IgPyBvcHRpb25zLndpdGhDb2xvcihncm91cC5yaWdodENvbG9yKSA6IG9wdGlvbnM7XG4gICAgICByaWdodERlbGltID0gZGVsaW1pdGVyLmxlZnRSaWdodERlbGltKGdyb3VwLnJpZ2h0LCBpbm5lckhlaWdodCwgaW5uZXJEZXB0aCwgY29sb3JPcHRpb25zLCBncm91cC5tb2RlLCBbXCJtY2xvc2VcIl0pO1xuICAgIH0gLy8gQWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGV4cHJlc3Npb24uXG5cblxuICAgIGlubmVyLnB1c2gocmlnaHREZWxpbSk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1pbm5lclwiXSwgaW5uZXIsIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgYXNzZXJ0UGFyc2VkKGdyb3VwKTtcbiAgICB2YXIgaW5uZXIgPSBidWlsZE1hdGhNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoZ3JvdXAubGVmdCAhPT0gXCIuXCIpIHtcbiAgICAgIHZhciBsZWZ0Tm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW2J1aWxkTWF0aE1MX21ha2VUZXh0KGdyb3VwLmxlZnQsIGdyb3VwLm1vZGUpXSk7XG4gICAgICBsZWZ0Tm9kZS5zZXRBdHRyaWJ1dGUoXCJmZW5jZVwiLCBcInRydWVcIik7XG4gICAgICBpbm5lci51bnNoaWZ0KGxlZnROb2RlKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JvdXAucmlnaHQgIT09IFwiLlwiKSB7XG4gICAgICB2YXIgcmlnaHROb2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbYnVpbGRNYXRoTUxfbWFrZVRleHQoZ3JvdXAucmlnaHQsIGdyb3VwLm1vZGUpXSk7XG4gICAgICByaWdodE5vZGUuc2V0QXR0cmlidXRlKFwiZmVuY2VcIiwgXCJ0cnVlXCIpO1xuXG4gICAgICBpZiAoZ3JvdXAucmlnaHRDb2xvcikge1xuICAgICAgICByaWdodE5vZGUuc2V0QXR0cmlidXRlKFwibWF0aGNvbG9yXCIsIGdyb3VwLnJpZ2h0Q29sb3IpO1xuICAgICAgfVxuXG4gICAgICBpbm5lci5wdXNoKHJpZ2h0Tm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1aWxkTWF0aE1MX21ha2VSb3coaW5uZXIpO1xuICB9XG59KTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJtaWRkbGVcIixcbiAgbmFtZXM6IFtcIlxcXFxtaWRkbGVcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKGNvbnRleHQsIGFyZ3MpIHtcbiAgICB2YXIgZGVsaW0gPSBjaGVja0RlbGltaXRlcihhcmdzWzBdLCBjb250ZXh0KTtcblxuICAgIGlmICghY29udGV4dC5wYXJzZXIubGVmdHJpZ2h0RGVwdGgpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlxcXFxtaWRkbGUgd2l0aG91dCBwcmVjZWRpbmcgXFxcXGxlZnRcIiwgZGVsaW0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm1pZGRsZVwiLFxuICAgICAgbW9kZTogY29udGV4dC5wYXJzZXIubW9kZSxcbiAgICAgIGRlbGltOiBkZWxpbS50ZXh0XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG1pZGRsZURlbGltO1xuXG4gICAgaWYgKGdyb3VwLmRlbGltID09PSBcIi5cIikge1xuICAgICAgbWlkZGxlRGVsaW0gPSBtYWtlTnVsbERlbGltaXRlcihvcHRpb25zLCBbXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1pZGRsZURlbGltID0gZGVsaW1pdGVyLnNpemVkRGVsaW0oZ3JvdXAuZGVsaW0sIDEsIG9wdGlvbnMsIGdyb3VwLm1vZGUsIFtdKTtcbiAgICAgIHZhciBpc01pZGRsZSA9IHtcbiAgICAgICAgZGVsaW06IGdyb3VwLmRlbGltLFxuICAgICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgICB9OyAvLyBQcm9wZXJ0eSBgaXNNaWRkbGVgIG5vdCBkZWZpbmVkIG9uIGBzcGFuYC4gSXQgaXMgb25seSB1c2VkIGluXG4gICAgICAvLyB0aGlzIGZpbGUgYWJvdmUuXG4gICAgICAvLyBUT0RPOiBGaXggdGhpcyB2aW9sYXRpb24gb2YgdGhlIGBzcGFuYCB0eXBlIGFuZCBwb3NzaWJseSByZW5hbWVcbiAgICAgIC8vIHRoaW5ncyBzaW5jZSBgaXNNaWRkbGVgIHNvdW5kcyBsaWtlIGEgYm9vbGVhbiwgYnV0IGlzIGEgc3RydWN0LlxuICAgICAgLy8gJEZsb3dGaXhNZVxuXG4gICAgICBtaWRkbGVEZWxpbS5pc01pZGRsZSA9IGlzTWlkZGxlO1xuICAgIH1cblxuICAgIHJldHVybiBtaWRkbGVEZWxpbTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIEEgRmlyZWZveCBcXG1pZGRsZSB3aWxsIHN0cmVjaCBhIGNoYXJhY3RlciB2ZXJ0aWNhbGx5IG9ubHkgaWYgaXRcbiAgICAvLyBpcyBpbiB0aGUgZmVuY2UgcGFydCBvZiB0aGUgb3BlcmF0b3IgZGljdGlvbmFyeSBhdDpcbiAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvTWF0aE1MMy9hcHBlbmRpeGMuaHRtbC5cbiAgICAvLyBTbyB3ZSBuZWVkIHRvIGF2b2lkIFUrMjIyMyBhbmQgdXNlIHBsYWluIFwifFwiIGluc3RlYWQuXG4gICAgdmFyIHRleHROb2RlID0gZ3JvdXAuZGVsaW0gPT09IFwiXFxcXHZlcnRcIiB8fCBncm91cC5kZWxpbSA9PT0gXCJ8XCIgPyBidWlsZE1hdGhNTF9tYWtlVGV4dChcInxcIiwgXCJ0ZXh0XCIpIDogYnVpbGRNYXRoTUxfbWFrZVRleHQoZ3JvdXAuZGVsaW0sIGdyb3VwLm1vZGUpO1xuICAgIHZhciBtaWRkbGVOb2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbdGV4dE5vZGVdKTtcbiAgICBtaWRkbGVOb2RlLnNldEF0dHJpYnV0ZShcImZlbmNlXCIsIFwidHJ1ZVwiKTsgLy8gTWF0aE1MIGdpdmVzIDUvMThlbSBzcGFjaW5nIHRvIGVhY2ggPG1vPiBlbGVtZW50LlxuICAgIC8vIFxcbWlkZGxlIHNob3VsZCBnZXQgZGVsaW1pdGVyIHNwYWNpbmcgaW5zdGVhZC5cblxuICAgIG1pZGRsZU5vZGUuc2V0QXR0cmlidXRlKFwibHNwYWNlXCIsIFwiMC4wNWVtXCIpO1xuICAgIG1pZGRsZU5vZGUuc2V0QXR0cmlidXRlKFwicnNwYWNlXCIsIFwiMC4wNWVtXCIpO1xuICAgIHJldHVybiBtaWRkbGVOb2RlO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9lbmNsb3NlLmpzXG5cblxuXG5cblxuXG5cblxuXG52YXIgZW5jbG9zZV9odG1sQnVpbGRlciA9IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gIC8vIFxcY2FuY2VsLCBcXGJjYW5jZWwsIFxceGNhbmNlbCwgXFxzb3V0LCBcXGZib3gsIFxcY29sb3Jib3gsIFxcZmNvbG9yYm94XG4gIC8vIFNvbWUgZ3JvdXBzIGNhbiByZXR1cm4gZG9jdW1lbnQgZnJhZ21lbnRzLiAgSGFuZGxlIHRob3NlIGJ5IHdyYXBwaW5nXG4gIC8vIHRoZW0gaW4gYSBzcGFuLlxuICB2YXIgaW5uZXIgPSBidWlsZENvbW1vbi53cmFwRnJhZ21lbnQoYnVpbGRIVE1MX2J1aWxkR3JvdXAoZ3JvdXAuYm9keSwgb3B0aW9ucyksIG9wdGlvbnMpO1xuICB2YXIgbGFiZWwgPSBncm91cC5sYWJlbC5zdWJzdHIoMSk7XG4gIHZhciBzY2FsZSA9IG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gIHZhciBpbWc7XG4gIHZhciBpbWdTaGlmdCA9IDA7IC8vIEluIHRoZSBMYVRlWCBjYW5jZWwgcGFja2FnZSwgbGluZSBnZW9tZXRyeSBpcyBzbGlnaHRseSBkaWZmZXJlbnRcbiAgLy8gZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIHN1YmplY3QgaXMgd2lkZXIgdGhhbiBpdCBpcyB0YWxsLCBvciB2aWNlIHZlcnNhLlxuICAvLyBXZSBkb24ndCBrbm93IHRoZSB3aWR0aCBvZiBhIGdyb3VwLCBzbyBhcyBhIHByb3h5LCB3ZSB0ZXN0IGlmXG4gIC8vIHRoZSBzdWJqZWN0IGlzIGEgc2luZ2xlIGNoYXJhY3Rlci4gVGhpcyBjYXB0dXJlcyBtb3N0IG9mIHRoZVxuICAvLyBzdWJqZWN0cyB0aGF0IHNob3VsZCBnZXQgdGhlIFwidGFsbFwiIHRyZWF0bWVudC5cblxuICB2YXIgaXNTaW5nbGVDaGFyID0gdXRpbHMuaXNDaGFyYWN0ZXJCb3goZ3JvdXAuYm9keSk7XG5cbiAgaWYgKGxhYmVsID09PSBcInNvdXRcIikge1xuICAgIGltZyA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcInN0cmV0Y2h5XCIsIFwic291dFwiXSk7XG4gICAgaW1nLmhlaWdodCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcyAvIHNjYWxlO1xuICAgIGltZ1NoaWZ0ID0gLTAuNSAqIG9wdGlvbnMuZm9udE1ldHJpY3MoKS54SGVpZ2h0O1xuICB9IGVsc2Uge1xuICAgIC8vIEFkZCBob3Jpem9udGFsIHBhZGRpbmdcbiAgICBpZiAoL2NhbmNlbC8udGVzdChsYWJlbCkpIHtcbiAgICAgIGlmICghaXNTaW5nbGVDaGFyKSB7XG4gICAgICAgIGlubmVyLmNsYXNzZXMucHVzaChcImNhbmNlbC1wYWRcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlubmVyLmNsYXNzZXMucHVzaChcImJveHBhZFwiKTtcbiAgICB9IC8vIEFkZCB2ZXJ0aWNhbCBwYWRkaW5nXG5cblxuICAgIHZhciB2ZXJ0UGFkID0gMDtcbiAgICB2YXIgcnVsZVRoaWNrbmVzcyA9IDA7IC8vIHJlZjogY2FuY2VsIHBhY2thZ2U6IFxcYWR2YW5jZVxcdG90YWxoZWlnaHQyXFxwQCAlIFwiKzJcIlxuXG4gICAgaWYgKC9ib3gvLnRlc3QobGFiZWwpKSB7XG4gICAgICBydWxlVGhpY2tuZXNzID0gTWF0aC5tYXgob3B0aW9ucy5mb250TWV0cmljcygpLmZib3hydWxlLCAvLyBkZWZhdWx0XG4gICAgICBvcHRpb25zLm1pblJ1bGVUaGlja25lc3MgLy8gVXNlciBvdmVycmlkZS5cbiAgICAgICk7XG4gICAgICB2ZXJ0UGFkID0gb3B0aW9ucy5mb250TWV0cmljcygpLmZib3hzZXAgKyAobGFiZWwgPT09IFwiY29sb3Jib3hcIiA/IDAgOiBydWxlVGhpY2tuZXNzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmVydFBhZCA9IGlzU2luZ2xlQ2hhciA/IDAuMiA6IDA7XG4gICAgfVxuXG4gICAgaW1nID0gc3RyZXRjaHkuZW5jbG9zZVNwYW4oaW5uZXIsIGxhYmVsLCB2ZXJ0UGFkLCBvcHRpb25zKTtcblxuICAgIGlmICgvZmJveHxib3hlZHxmY29sb3Jib3gvLnRlc3QobGFiZWwpKSB7XG4gICAgICBpbWcuc3R5bGUuYm9yZGVyU3R5bGUgPSBcInNvbGlkXCI7XG4gICAgICBpbWcuc3R5bGUuYm9yZGVyV2lkdGggPSBydWxlVGhpY2tuZXNzICsgXCJlbVwiO1xuICAgIH1cblxuICAgIGltZ1NoaWZ0ID0gaW5uZXIuZGVwdGggKyB2ZXJ0UGFkO1xuXG4gICAgaWYgKGdyb3VwLmJhY2tncm91bmRDb2xvcikge1xuICAgICAgaW1nLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGdyb3VwLmJhY2tncm91bmRDb2xvcjtcblxuICAgICAgaWYgKGdyb3VwLmJvcmRlckNvbG9yKSB7XG4gICAgICAgIGltZy5zdHlsZS5ib3JkZXJDb2xvciA9IGdyb3VwLmJvcmRlckNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciB2bGlzdDtcblxuICBpZiAoZ3JvdXAuYmFja2dyb3VuZENvbG9yKSB7XG4gICAgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgY2hpbGRyZW46IFsvLyBQdXQgdGhlIGNvbG9yIGJhY2tncm91bmQgYmVoaW5kIGlubmVyO1xuICAgICAge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogaW1nLFxuICAgICAgICBzaGlmdDogaW1nU2hpZnRcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGlubmVyLFxuICAgICAgICBzaGlmdDogMFxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICBjaGlsZHJlbjogWy8vIFdyaXRlIHRoZSBcXGNhbmNlbCBzdHJva2Ugb24gdG9wIG9mIGlubmVyLlxuICAgICAge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogaW5uZXIsXG4gICAgICAgIHNoaWZ0OiAwXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBpbWcsXG4gICAgICAgIHNoaWZ0OiBpbWdTaGlmdCxcbiAgICAgICAgd3JhcHBlckNsYXNzZXM6IC9jYW5jZWwvLnRlc3QobGFiZWwpID8gW1wic3ZnLWFsaWduXCJdIDogW11cbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH1cblxuICBpZiAoL2NhbmNlbC8udGVzdChsYWJlbCkpIHtcbiAgICAvLyBUaGUgY2FuY2VsIHBhY2thZ2UgZG9jdW1lbnRhdGlvbiBzYXlzIHRoYXQgY2FuY2VsIGxpbmVzIGFkZCB0aGVpciBoZWlnaHRcbiAgICAvLyB0byB0aGUgZXhwcmVzc2lvbiwgYnV0IHRlc3RzIHNob3cgdGhhdCBpc24ndCBob3cgaXQgYWN0dWFsbHkgd29ya3MuXG4gICAgdmxpc3QuaGVpZ2h0ID0gaW5uZXIuaGVpZ2h0O1xuICAgIHZsaXN0LmRlcHRoID0gaW5uZXIuZGVwdGg7XG4gIH1cblxuICBpZiAoL2NhbmNlbC8udGVzdChsYWJlbCkgJiYgIWlzU2luZ2xlQ2hhcikge1xuICAgIC8vIGNhbmNlbCBkb2VzIG5vdCBjcmVhdGUgaG9yaXogc3BhY2UgZm9yIGl0cyBsaW5lIGV4dGVuc2lvbi5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcImNhbmNlbC1sYXBcIl0sIFt2bGlzdF0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCJdLCBbdmxpc3RdLCBvcHRpb25zKTtcbiAgfVxufTtcblxudmFyIGVuY2xvc2VfbWF0aG1sQnVpbGRlciA9IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIGZib3hzZXAgPSAwO1xuICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKGdyb3VwLmxhYmVsLmluZGV4T2YoXCJjb2xvcmJveFwiKSA+IC0xID8gXCJtcGFkZGVkXCIgOiBcIm1lbmNsb3NlXCIsIFtidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpXSk7XG5cbiAgc3dpdGNoIChncm91cC5sYWJlbCkge1xuICAgIGNhc2UgXCJcXFxcY2FuY2VsXCI6XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm5vdGF0aW9uXCIsIFwidXBkaWFnb25hbHN0cmlrZVwiKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIlxcXFxiY2FuY2VsXCI6XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm5vdGF0aW9uXCIsIFwiZG93bmRpYWdvbmFsc3RyaWtlXCIpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiXFxcXHNvdXRcIjpcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibm90YXRpb25cIiwgXCJob3Jpem9udGFsc3RyaWtlXCIpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiXFxcXGZib3hcIjpcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibm90YXRpb25cIiwgXCJib3hcIik7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJcXFxcZmNvbG9yYm94XCI6XG4gICAgY2FzZSBcIlxcXFxjb2xvcmJveFwiOlxuICAgICAgLy8gPG1lbmNsb3NlPiBkb2Vzbid0IGhhdmUgYSBnb29kIG5vdGF0aW9uIG9wdGlvbi4gU28gdXNlIDxtcGFkZGVkPlxuICAgICAgLy8gaW5zdGVhZC4gU2V0IHNvbWUgYXR0cmlidXRlcyB0aGF0IGNvbWUgaW5jbHVkZWQgd2l0aCA8bWVuY2xvc2U+LlxuICAgICAgZmJveHNlcCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5mYm94c2VwICogb3B0aW9ucy5mb250TWV0cmljcygpLnB0UGVyRW07XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFwiK1wiICsgMiAqIGZib3hzZXAgKyBcInB0XCIpO1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgXCIrXCIgKyAyICogZmJveHNlcCArIFwicHRcIik7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImxzcGFjZVwiLCBmYm94c2VwICsgXCJwdFwiKTsgLy9cblxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ2b2Zmc2V0XCIsIGZib3hzZXAgKyBcInB0XCIpO1xuXG4gICAgICBpZiAoZ3JvdXAubGFiZWwgPT09IFwiXFxcXGZjb2xvcmJveFwiKSB7XG4gICAgICAgIHZhciB0aGsgPSBNYXRoLm1heChvcHRpb25zLmZvbnRNZXRyaWNzKCkuZmJveHJ1bGUsIC8vIGRlZmF1bHRcbiAgICAgICAgb3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzIC8vIHVzZXIgb3ZlcnJpZGVcbiAgICAgICAgKTtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcImJvcmRlcjogXCIgKyB0aGsgKyBcImVtIHNvbGlkIFwiICsgU3RyaW5nKGdyb3VwLmJvcmRlckNvbG9yKSk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIlxcXFx4Y2FuY2VsXCI6XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm5vdGF0aW9uXCIsIFwidXBkaWFnb25hbHN0cmlrZSBkb3duZGlhZ29uYWxzdHJpa2VcIik7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGlmIChncm91cC5iYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGhiYWNrZ3JvdW5kXCIsIGdyb3VwLmJhY2tncm91bmRDb2xvcik7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJlbmNsb3NlXCIsXG4gIG5hbWVzOiBbXCJcXFxcY29sb3Jib3hcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMixcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGdyZWVkaW5lc3M6IDMsXG4gICAgYXJnVHlwZXM6IFtcImNvbG9yXCIsIFwidGV4dFwiXVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MsIG9wdEFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZi5wYXJzZXIsXG4gICAgICAgIGZ1bmNOYW1lID0gX3JlZi5mdW5jTmFtZTtcbiAgICB2YXIgY29sb3IgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcImNvbG9yLXRva2VuXCIpLmNvbG9yO1xuICAgIHZhciBib2R5ID0gYXJnc1sxXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJlbmNsb3NlXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGxhYmVsOiBmdW5jTmFtZSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogY29sb3IsXG4gICAgICBib2R5OiBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGVuY2xvc2VfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGVuY2xvc2VfbWF0aG1sQnVpbGRlclxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiZW5jbG9zZVwiLFxuICBuYW1lczogW1wiXFxcXGZjb2xvcmJveFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAzLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgZ3JlZWRpbmVzczogMyxcbiAgICBhcmdUeXBlczogW1wiY29sb3JcIiwgXCJjb2xvclwiLCBcInRleHRcIl1cbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmMiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmMi5wYXJzZXIsXG4gICAgICAgIGZ1bmNOYW1lID0gX3JlZjIuZnVuY05hbWU7XG4gICAgdmFyIGJvcmRlckNvbG9yID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXSwgXCJjb2xvci10b2tlblwiKS5jb2xvcjtcbiAgICB2YXIgYmFja2dyb3VuZENvbG9yID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1sxXSwgXCJjb2xvci10b2tlblwiKS5jb2xvcjtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMl07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZW5jbG9zZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IGJhY2tncm91bmRDb2xvcixcbiAgICAgIGJvcmRlckNvbG9yOiBib3JkZXJDb2xvcixcbiAgICAgIGJvZHk6IGJvZHlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZW5jbG9zZV9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogZW5jbG9zZV9tYXRobWxCdWlsZGVyXG59KTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJlbmNsb3NlXCIsXG4gIG5hbWVzOiBbXCJcXFxcZmJveFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJoYm94XCJdLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmMywgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmMy5wYXJzZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZW5jbG9zZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogXCJcXFxcZmJveFwiLFxuICAgICAgYm9keTogYXJnc1swXVxuICAgIH07XG4gIH1cbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImVuY2xvc2VcIixcbiAgbmFtZXM6IFtcIlxcXFxjYW5jZWxcIiwgXCJcXFxcYmNhbmNlbFwiLCBcIlxcXFx4Y2FuY2VsXCIsIFwiXFxcXHNvdXRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWY0LCBhcmdzLCBvcHRBcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWY0LnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmNC5mdW5jTmFtZTtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZW5jbG9zZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBib2R5OiBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGVuY2xvc2VfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGVuY2xvc2VfbWF0aG1sQnVpbGRlclxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9kZWZpbmVFbnZpcm9ubWVudC5qc1xuXG5cbi8qKlxuICogQWxsIHJlZ2lzdGVyZWQgZW52aXJvbm1lbnRzLlxuICogYGVudmlyb25tZW50cy5qc2AgZXhwb3J0cyB0aGlzIHNhbWUgZGljdGlvbmFyeSBhZ2FpbiBhbmQgbWFrZXMgaXQgcHVibGljLlxuICogYFBhcnNlci5qc2AgcmVxdWlyZXMgdGhpcyBkaWN0aW9uYXJ5IHZpYSBgZW52aXJvbm1lbnRzLmpzYC5cbiAqL1xudmFyIF9lbnZpcm9ubWVudHMgPSB7fTtcbmZ1bmN0aW9uIGRlZmluZUVudmlyb25tZW50KF9yZWYpIHtcbiAgdmFyIHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICBuYW1lcyA9IF9yZWYubmFtZXMsXG4gICAgICBwcm9wcyA9IF9yZWYucHJvcHMsXG4gICAgICBoYW5kbGVyID0gX3JlZi5oYW5kbGVyLFxuICAgICAgaHRtbEJ1aWxkZXIgPSBfcmVmLmh0bWxCdWlsZGVyLFxuICAgICAgbWF0aG1sQnVpbGRlciA9IF9yZWYubWF0aG1sQnVpbGRlcjtcbiAgLy8gU2V0IGRlZmF1bHQgdmFsdWVzIG9mIGVudmlyb25tZW50cy5cbiAgdmFyIGRhdGEgPSB7XG4gICAgdHlwZTogdHlwZSxcbiAgICBudW1BcmdzOiBwcm9wcy5udW1BcmdzIHx8IDAsXG4gICAgZ3JlZWRpbmVzczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiBmYWxzZSxcbiAgICBudW1PcHRpb25hbEFyZ3M6IDAsXG4gICAgaGFuZGxlcjogaGFuZGxlclxuICB9O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBUT0RPOiBUaGUgdmFsdWUgdHlwZSBvZiBfZW52aXJvbm1lbnRzIHNob3VsZCBiZSBhIHR5cGUgdW5pb24gb2YgYWxsXG4gICAgLy8gcG9zc2libGUgYEVudlNwZWM8PmAgcG9zc2liaWxpdGllcyBpbnN0ZWFkIG9mIGBFbnZTcGVjPCo+YCwgd2hpY2ggaXNcbiAgICAvLyBhbiBleGlzdGVudGlhbCB0eXBlLlxuICAgIC8vICRGbG93Rml4TWVcbiAgICBfZW52aXJvbm1lbnRzW25hbWVzW2ldXSA9IGRhdGE7XG4gIH1cblxuICBpZiAoaHRtbEJ1aWxkZXIpIHtcbiAgICBfaHRtbEdyb3VwQnVpbGRlcnNbdHlwZV0gPSBodG1sQnVpbGRlcjtcbiAgfVxuXG4gIGlmIChtYXRobWxCdWlsZGVyKSB7XG4gICAgX21hdGhtbEdyb3VwQnVpbGRlcnNbdHlwZV0gPSBtYXRobWxCdWlsZGVyO1xuICB9XG59XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9lbnZpcm9ubWVudHMvYXJyYXkuanNcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuZnVuY3Rpb24gZ2V0SExpbmVzKHBhcnNlcikge1xuICAvLyBSZXR1cm4gYW4gYXJyYXkuIFRoZSBhcnJheSBsZW5ndGggPSBudW1iZXIgb2YgaGxpbmVzLlxuICAvLyBFYWNoIGVsZW1lbnQgaW4gdGhlIGFycmF5IHRlbGxzIGlmIHRoZSBsaW5lIGlzIGRhc2hlZC5cbiAgdmFyIGhsaW5lSW5mbyA9IFtdO1xuICBwYXJzZXIuY29uc3VtZVNwYWNlcygpO1xuICB2YXIgbnh0ID0gcGFyc2VyLm5leHRUb2tlbi50ZXh0O1xuXG4gIHdoaWxlIChueHQgPT09IFwiXFxcXGhsaW5lXCIgfHwgbnh0ID09PSBcIlxcXFxoZGFzaGxpbmVcIikge1xuICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgaGxpbmVJbmZvLnB1c2gobnh0ID09PSBcIlxcXFxoZGFzaGxpbmVcIik7XG4gICAgcGFyc2VyLmNvbnN1bWVTcGFjZXMoKTtcbiAgICBueHQgPSBwYXJzZXIubmV4dFRva2VuLnRleHQ7XG4gIH1cblxuICByZXR1cm4gaGxpbmVJbmZvO1xufVxuLyoqXG4gKiBQYXJzZSB0aGUgYm9keSBvZiB0aGUgZW52aXJvbm1lbnQsIHdpdGggcm93cyBkZWxpbWl0ZWQgYnkgXFxcXCBhbmRcbiAqIGNvbHVtbnMgZGVsaW1pdGVkIGJ5ICYsIGFuZCBjcmVhdGUgYSBuZXN0ZWQgbGlzdCBpbiByb3ctbWFqb3Igb3JkZXJcbiAqIHdpdGggb25lIGdyb3VwIHBlciBjZWxsLiAgSWYgZ2l2ZW4gYW4gb3B0aW9uYWwgYXJndW1lbnQgc3R5bGVcbiAqIChcInRleHRcIiwgXCJkaXNwbGF5XCIsIGV0Yy4pLCB0aGVuIGVhY2ggY2VsbCBpcyBjYXN0IGludG8gdGhhdCBzdHlsZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHBhcnNlQXJyYXkocGFyc2VyLCBfcmVmLCBzdHlsZSkge1xuICB2YXIgaHNraXBCZWZvcmVBbmRBZnRlciA9IF9yZWYuaHNraXBCZWZvcmVBbmRBZnRlcixcbiAgICAgIGFkZEpvdCA9IF9yZWYuYWRkSm90LFxuICAgICAgY29scyA9IF9yZWYuY29scyxcbiAgICAgIGFycmF5c3RyZXRjaCA9IF9yZWYuYXJyYXlzdHJldGNoLFxuICAgICAgY29sU2VwYXJhdGlvblR5cGUgPSBfcmVmLmNvbFNlcGFyYXRpb25UeXBlO1xuICAvLyBQYXJzZSBib2R5IG9mIGFycmF5IHdpdGggXFxcXCB0ZW1wb3JhcmlseSBtYXBwZWQgdG8gXFxjclxuICBwYXJzZXIuZ3VsbGV0LmJlZ2luR3JvdXAoKTtcbiAgcGFyc2VyLmd1bGxldC5tYWNyb3Muc2V0KFwiXFxcXFxcXFxcIiwgXCJcXFxcY3JcIik7IC8vIEdldCBjdXJyZW50IGFycmF5c3RyZXRjaCBpZiBpdCdzIG5vdCBzZXQgYnkgdGhlIGVudmlyb25tZW50XG5cbiAgaWYgKCFhcnJheXN0cmV0Y2gpIHtcbiAgICB2YXIgc3RyZXRjaCA9IHBhcnNlci5ndWxsZXQuZXhwYW5kTWFjcm9Bc1RleHQoXCJcXFxcYXJyYXlzdHJldGNoXCIpO1xuXG4gICAgaWYgKHN0cmV0Y2ggPT0gbnVsbCkge1xuICAgICAgLy8gRGVmYXVsdCBcXGFycmF5c3RyZXRjaCBmcm9tIGx0dGFiLmR0eFxuICAgICAgYXJyYXlzdHJldGNoID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJyYXlzdHJldGNoID0gcGFyc2VGbG9hdChzdHJldGNoKTtcblxuICAgICAgaWYgKCFhcnJheXN0cmV0Y2ggfHwgYXJyYXlzdHJldGNoIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJJbnZhbGlkIFxcXFxhcnJheXN0cmV0Y2g6IFwiICsgc3RyZXRjaCk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIFN0YXJ0IGdyb3VwIGZvciBmaXJzdCBjZWxsXG5cblxuICBwYXJzZXIuZ3VsbGV0LmJlZ2luR3JvdXAoKTtcbiAgdmFyIHJvdyA9IFtdO1xuICB2YXIgYm9keSA9IFtyb3ddO1xuICB2YXIgcm93R2FwcyA9IFtdO1xuICB2YXIgaExpbmVzQmVmb3JlUm93ID0gW107IC8vIFRlc3QgZm9yIFxcaGxpbmUgYXQgdGhlIHRvcCBvZiB0aGUgYXJyYXkuXG5cbiAgaExpbmVzQmVmb3JlUm93LnB1c2goZ2V0SExpbmVzKHBhcnNlcikpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICAvLyBQYXJzZSBlYWNoIGNlbGwgaW4gaXRzIG93biBncm91cCAobmFtZXNwYWNlKVxuICAgIHZhciBjZWxsID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbihmYWxzZSwgXCJcXFxcY3JcIik7XG4gICAgcGFyc2VyLmd1bGxldC5lbmRHcm91cCgpO1xuICAgIHBhcnNlci5ndWxsZXQuYmVnaW5Hcm91cCgpO1xuICAgIGNlbGwgPSB7XG4gICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IGNlbGxcbiAgICB9O1xuXG4gICAgaWYgKHN0eWxlKSB7XG4gICAgICBjZWxsID0ge1xuICAgICAgICB0eXBlOiBcInN0eWxpbmdcIixcbiAgICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgYm9keTogW2NlbGxdXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJvdy5wdXNoKGNlbGwpO1xuICAgIHZhciBuZXh0ID0gcGFyc2VyLm5leHRUb2tlbi50ZXh0O1xuXG4gICAgaWYgKG5leHQgPT09IFwiJlwiKSB7XG4gICAgICBwYXJzZXIuY29uc3VtZSgpO1xuICAgIH0gZWxzZSBpZiAobmV4dCA9PT0gXCJcXFxcZW5kXCIpIHtcbiAgICAgIC8vIEFycmF5cyB0ZXJtaW5hdGUgbmV3bGluZXMgd2l0aCBgXFxjcmNyYCB3aGljaCBjb25zdW1lcyBhIGBcXGNyYCBpZlxuICAgICAgLy8gdGhlIGxhc3QgbGluZSBpcyBlbXB0eS5cbiAgICAgIC8vIE5PVEU6IEN1cnJlbnRseSwgYGNlbGxgIGlzIHRoZSBsYXN0IGl0ZW0gYWRkZWQgaW50byBgcm93YC5cbiAgICAgIGlmIChyb3cubGVuZ3RoID09PSAxICYmIGNlbGwudHlwZSA9PT0gXCJzdHlsaW5nXCIgJiYgY2VsbC5ib2R5WzBdLmJvZHkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGJvZHkucG9wKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChoTGluZXNCZWZvcmVSb3cubGVuZ3RoIDwgYm9keS5sZW5ndGggKyAxKSB7XG4gICAgICAgIGhMaW5lc0JlZm9yZVJvdy5wdXNoKFtdKTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIGlmIChuZXh0ID09PSBcIlxcXFxjclwiKSB7XG4gICAgICB2YXIgY3IgPSBhc3NlcnROb2RlVHlwZShwYXJzZXIucGFyc2VGdW5jdGlvbigpLCBcImNyXCIpO1xuICAgICAgcm93R2Fwcy5wdXNoKGNyLnNpemUpOyAvLyBjaGVjayBmb3IgXFxobGluZShzKSBmb2xsb3dpbmcgdGhlIHJvdyBzZXBhcmF0b3JcblxuICAgICAgaExpbmVzQmVmb3JlUm93LnB1c2goZ2V0SExpbmVzKHBhcnNlcikpO1xuICAgICAgcm93ID0gW107XG4gICAgICBib2R5LnB1c2gocm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiRXhwZWN0ZWQgJiBvciBcXFxcXFxcXCBvciBcXFxcY3Igb3IgXFxcXGVuZFwiLCBwYXJzZXIubmV4dFRva2VuKTtcbiAgICB9XG4gIH0gLy8gRW5kIGNlbGwgZ3JvdXBcblxuXG4gIHBhcnNlci5ndWxsZXQuZW5kR3JvdXAoKTsgLy8gRW5kIGFycmF5IGdyb3VwIGRlZmluaW5nIFxcXFxcblxuICBwYXJzZXIuZ3VsbGV0LmVuZEdyb3VwKCk7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgIGFkZEpvdDogYWRkSm90LFxuICAgIGFycmF5c3RyZXRjaDogYXJyYXlzdHJldGNoLFxuICAgIGJvZHk6IGJvZHksXG4gICAgY29sczogY29scyxcbiAgICByb3dHYXBzOiByb3dHYXBzLFxuICAgIGhza2lwQmVmb3JlQW5kQWZ0ZXI6IGhza2lwQmVmb3JlQW5kQWZ0ZXIsXG4gICAgaExpbmVzQmVmb3JlUm93OiBoTGluZXNCZWZvcmVSb3csXG4gICAgY29sU2VwYXJhdGlvblR5cGU6IGNvbFNlcGFyYXRpb25UeXBlXG4gIH07XG59IC8vIERlY2lkZXMgb24gYSBzdHlsZSBmb3IgY2VsbHMgaW4gYW4gYXJyYXkgYWNjb3JkaW5nIHRvIHdoZXRoZXIgdGhlIGdpdmVuXG4vLyBlbnZpcm9ubWVudCBuYW1lIHN0YXJ0cyB3aXRoIHRoZSBsZXR0ZXIgJ2QnLlxuXG5cbmZ1bmN0aW9uIGRDZWxsU3R5bGUoZW52TmFtZSkge1xuICBpZiAoZW52TmFtZS5zdWJzdHIoMCwgMSkgPT09IFwiZFwiKSB7XG4gICAgcmV0dXJuIFwiZGlzcGxheVwiO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcInRleHRcIjtcbiAgfVxufVxuXG52YXIgYXJyYXlfaHRtbEJ1aWxkZXIgPSBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICB2YXIgcjtcbiAgdmFyIGM7XG4gIHZhciBuciA9IGdyb3VwLmJvZHkubGVuZ3RoO1xuICB2YXIgaExpbmVzQmVmb3JlUm93ID0gZ3JvdXAuaExpbmVzQmVmb3JlUm93O1xuICB2YXIgbmMgPSAwO1xuICB2YXIgYm9keSA9IG5ldyBBcnJheShucik7XG4gIHZhciBobGluZXMgPSBbXTtcbiAgdmFyIHJ1bGVUaGlja25lc3MgPSBNYXRoLm1heCggLy8gRnJvbSBMYVRlWCBcXHNob3d0aGVcXGFycmF5cnVsZXdpZHRoLiBFcXVhbHMgMC4wNCBlbS5cbiAgb3B0aW9ucy5mb250TWV0cmljcygpLmFycmF5UnVsZVdpZHRoLCBvcHRpb25zLm1pblJ1bGVUaGlja25lc3MgLy8gVXNlciBvdmVycmlkZS5cbiAgKTsgLy8gSG9yaXpvbnRhbCBzcGFjaW5nXG5cbiAgdmFyIHB0ID0gMSAvIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5wdFBlckVtO1xuICB2YXIgYXJyYXljb2xzZXAgPSA1ICogcHQ7IC8vIGRlZmF1bHQgdmFsdWUsIGkuZS4gXFxhcnJheWNvbHNlcCBpbiBhcnRpY2xlLmNsc1xuXG4gIGlmIChncm91cC5jb2xTZXBhcmF0aW9uVHlwZSAmJiBncm91cC5jb2xTZXBhcmF0aW9uVHlwZSA9PT0gXCJzbWFsbFwiKSB7XG4gICAgLy8gV2UncmUgaW4gYSB7c21hbGxtYXRyaXh9LiBEZWZhdWx0IGNvbHVtbiBzcGFjZSBpcyBcXHRoaWNrc3BhY2UsXG4gICAgLy8gaS5lLiA1LzE4ZW0gPSAwLjI3NzhlbSwgcGVyIGFtc21hdGguZHR4IGZvciB7c21hbGxtYXRyaXh9LlxuICAgIC8vIEJ1dCB0aGF0IG5lZWRzIGFkanVzdG1lbnQgYmVjYXVzZSBMYVRlWCBhcHBsaWVzIFxcc2NyaXB0c3R5bGUgdG8gdGhlXG4gICAgLy8gZW50aXJlIGFycmF5LCBpbmNsdWRpbmcgdGhlIGNvbHNwYWNlLCBidXQgdGhpcyBmdW5jdGlvbiBhcHBsaWVzXG4gICAgLy8gXFxzY3JpcHRzdHlsZSBvbmx5IGluc2lkZSBlYWNoIGVsZW1lbnQuXG4gICAgdmFyIGxvY2FsTXVsdGlwbGllciA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoc3JjX1N0eWxlLlNDUklQVCkuc2l6ZU11bHRpcGxpZXI7XG4gICAgYXJyYXljb2xzZXAgPSAwLjI3NzggKiAobG9jYWxNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcik7XG4gIH0gLy8gVmVydGljYWwgc3BhY2luZ1xuXG5cbiAgdmFyIGJhc2VsaW5lc2tpcCA9IDEyICogcHQ7IC8vIHNlZSBzaXplMTAuY2xvXG4gIC8vIERlZmF1bHQgXFxqb3QgZnJvbSBsdG1hdGguZHR4XG4gIC8vIFRPRE8oZWRlbWFpbmUpOiBhbGxvdyBvdmVycmlkaW5nIFxcam90IHZpYSBcXHNldGxlbmd0aCAoIzY4NylcblxuICB2YXIgam90ID0gMyAqIHB0O1xuICB2YXIgYXJyYXlza2lwID0gZ3JvdXAuYXJyYXlzdHJldGNoICogYmFzZWxpbmVza2lwO1xuICB2YXIgYXJzdHJ1dEhlaWdodCA9IDAuNyAqIGFycmF5c2tpcDsgLy8gXFxzdHJ1dGJveCBpbiBsdGZzc3RyYy5kdHggYW5kXG5cbiAgdmFyIGFyc3RydXREZXB0aCA9IDAuMyAqIGFycmF5c2tpcDsgLy8gXFxAYXJzdHJ1dGJveCBpbiBsdHRhYi5kdHhcblxuICB2YXIgdG90YWxIZWlnaHQgPSAwOyAvLyBTZXQgYSBwb3NpdGlvbiBmb3IgXFxobGluZShzKSBhdCB0aGUgdG9wIG9mIHRoZSBhcnJheSwgaWYgYW55LlxuXG4gIGZ1bmN0aW9uIHNldEhMaW5lUG9zKGhsaW5lc0luR2FwKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBobGluZXNJbkdhcC5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgIHRvdGFsSGVpZ2h0ICs9IDAuMjU7XG4gICAgICB9XG5cbiAgICAgIGhsaW5lcy5wdXNoKHtcbiAgICAgICAgcG9zOiB0b3RhbEhlaWdodCxcbiAgICAgICAgaXNEYXNoZWQ6IGhsaW5lc0luR2FwW2ldXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzZXRITGluZVBvcyhoTGluZXNCZWZvcmVSb3dbMF0pO1xuXG4gIGZvciAociA9IDA7IHIgPCBncm91cC5ib2R5Lmxlbmd0aDsgKytyKSB7XG4gICAgdmFyIGlucm93ID0gZ3JvdXAuYm9keVtyXTtcbiAgICB2YXIgaGVpZ2h0ID0gYXJzdHJ1dEhlaWdodDsgLy8gXFxAYXJyYXkgYWRkcyBhbiBcXEBhcnN0cnV0XG5cbiAgICB2YXIgZGVwdGggPSBhcnN0cnV0RGVwdGg7IC8vIHRvIGVhY2ggdG93ICh2aWEgdGhlIHRlbXBsYXRlKVxuXG4gICAgaWYgKG5jIDwgaW5yb3cubGVuZ3RoKSB7XG4gICAgICBuYyA9IGlucm93Lmxlbmd0aDtcbiAgICB9XG5cbiAgICB2YXIgb3V0cm93ID0gbmV3IEFycmF5KGlucm93Lmxlbmd0aCk7XG5cbiAgICBmb3IgKGMgPSAwOyBjIDwgaW5yb3cubGVuZ3RoOyArK2MpIHtcbiAgICAgIHZhciBlbHQgPSBidWlsZEhUTUxfYnVpbGRHcm91cChpbnJvd1tjXSwgb3B0aW9ucyk7XG5cbiAgICAgIGlmIChkZXB0aCA8IGVsdC5kZXB0aCkge1xuICAgICAgICBkZXB0aCA9IGVsdC5kZXB0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKGhlaWdodCA8IGVsdC5oZWlnaHQpIHtcbiAgICAgICAgaGVpZ2h0ID0gZWx0LmhlaWdodDtcbiAgICAgIH1cblxuICAgICAgb3V0cm93W2NdID0gZWx0O1xuICAgIH1cblxuICAgIHZhciByb3dHYXAgPSBncm91cC5yb3dHYXBzW3JdO1xuICAgIHZhciBnYXAgPSAwO1xuXG4gICAgaWYgKHJvd0dhcCkge1xuICAgICAgZ2FwID0gdW5pdHNfY2FsY3VsYXRlU2l6ZShyb3dHYXAsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAoZ2FwID4gMCkge1xuICAgICAgICAvLyBcXEBhcmdhcnJheWNyXG4gICAgICAgIGdhcCArPSBhcnN0cnV0RGVwdGg7XG5cbiAgICAgICAgaWYgKGRlcHRoIDwgZ2FwKSB7XG4gICAgICAgICAgZGVwdGggPSBnYXA7IC8vIFxcQHhhcmdhcnJheWNyXG4gICAgICAgIH1cblxuICAgICAgICBnYXAgPSAwO1xuICAgICAgfVxuICAgIH0gLy8gSW4gQU1TIG11bHRpbGluZSBlbnZpcm9ubWVudHMgc3VjaCBhcyBhbGlnbmVkIGFuZCBnYXRoZXJlZCwgcm93c1xuICAgIC8vIGNvcnJlc3BvbmQgdG8gbGluZXMgdGhhdCBoYXZlIGFkZGl0aW9uYWwgXFxqb3QgYWRkZWQgdG8gdGhlXG4gICAgLy8gXFxiYXNlbGluZXNraXAgdmlhIFxcb3BlbnVwLlxuXG5cbiAgICBpZiAoZ3JvdXAuYWRkSm90KSB7XG4gICAgICBkZXB0aCArPSBqb3Q7XG4gICAgfVxuXG4gICAgb3V0cm93LmhlaWdodCA9IGhlaWdodDtcbiAgICBvdXRyb3cuZGVwdGggPSBkZXB0aDtcbiAgICB0b3RhbEhlaWdodCArPSBoZWlnaHQ7XG4gICAgb3V0cm93LnBvcyA9IHRvdGFsSGVpZ2h0O1xuICAgIHRvdGFsSGVpZ2h0ICs9IGRlcHRoICsgZ2FwOyAvLyBcXEB5YXJnYXJyYXljclxuXG4gICAgYm9keVtyXSA9IG91dHJvdzsgLy8gU2V0IGEgcG9zaXRpb24gZm9yIFxcaGxpbmUocyksIGlmIGFueS5cblxuICAgIHNldEhMaW5lUG9zKGhMaW5lc0JlZm9yZVJvd1tyICsgMV0pO1xuICB9XG5cbiAgdmFyIG9mZnNldCA9IHRvdGFsSGVpZ2h0IC8gMiArIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O1xuICB2YXIgY29sRGVzY3JpcHRpb25zID0gZ3JvdXAuY29scyB8fCBbXTtcbiAgdmFyIGNvbHMgPSBbXTtcbiAgdmFyIGNvbFNlcDtcbiAgdmFyIGNvbERlc2NyTnVtO1xuXG4gIGZvciAoYyA9IDAsIGNvbERlc2NyTnVtID0gMDsgLy8gQ29udGludWUgd2hpbGUgZWl0aGVyIHRoZXJlIGFyZSBtb3JlIGNvbHVtbnMgb3IgbW9yZSBjb2x1bW5cbiAgLy8gZGVzY3JpcHRpb25zLCBzbyB0cmFpbGluZyBzZXBhcmF0b3JzIGRvbid0IGdldCBsb3N0LlxuICBjIDwgbmMgfHwgY29sRGVzY3JOdW0gPCBjb2xEZXNjcmlwdGlvbnMubGVuZ3RoOyArK2MsICsrY29sRGVzY3JOdW0pIHtcbiAgICB2YXIgY29sRGVzY3IgPSBjb2xEZXNjcmlwdGlvbnNbY29sRGVzY3JOdW1dIHx8IHt9O1xuICAgIHZhciBmaXJzdFNlcGFyYXRvciA9IHRydWU7XG5cbiAgICB3aGlsZSAoY29sRGVzY3IudHlwZSA9PT0gXCJzZXBhcmF0b3JcIikge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBzZXBhcmF0b3IgaW4gYSByb3csIGFkZCBhIHNwYWNlXG4gICAgICAvLyBiZXR3ZWVuIHRoZW0uXG4gICAgICBpZiAoIWZpcnN0U2VwYXJhdG9yKSB7XG4gICAgICAgIGNvbFNlcCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImFycmF5Y29sc2VwXCJdLCBbXSk7XG4gICAgICAgIGNvbFNlcC5zdHlsZS53aWR0aCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5kb3VibGVSdWxlU2VwICsgXCJlbVwiO1xuICAgICAgICBjb2xzLnB1c2goY29sU2VwKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbERlc2NyLnNlcGFyYXRvciA9PT0gXCJ8XCIgfHwgY29sRGVzY3Iuc2VwYXJhdG9yID09PSBcIjpcIikge1xuICAgICAgICB2YXIgbGluZVR5cGUgPSBjb2xEZXNjci5zZXBhcmF0b3IgPT09IFwifFwiID8gXCJzb2xpZFwiIDogXCJkYXNoZWRcIjtcbiAgICAgICAgdmFyIHNlcGFyYXRvciA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcInZlcnRpY2FsLXNlcGFyYXRvclwiXSwgW10sIG9wdGlvbnMpO1xuICAgICAgICBzZXBhcmF0b3Iuc3R5bGUuaGVpZ2h0ID0gdG90YWxIZWlnaHQgKyBcImVtXCI7XG4gICAgICAgIHNlcGFyYXRvci5zdHlsZS5ib3JkZXJSaWdodFdpZHRoID0gcnVsZVRoaWNrbmVzcyArIFwiZW1cIjtcbiAgICAgICAgc2VwYXJhdG9yLnN0eWxlLmJvcmRlclJpZ2h0U3R5bGUgPSBsaW5lVHlwZTtcbiAgICAgICAgc2VwYXJhdG9yLnN0eWxlLm1hcmdpbiA9IFwiMCAtXCIgKyBydWxlVGhpY2tuZXNzIC8gMiArIFwiZW1cIjtcbiAgICAgICAgc2VwYXJhdG9yLnN0eWxlLnZlcnRpY2FsQWxpZ24gPSAtKHRvdGFsSGVpZ2h0IC0gb2Zmc2V0KSArIFwiZW1cIjtcbiAgICAgICAgY29scy5wdXNoKHNlcGFyYXRvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJJbnZhbGlkIHNlcGFyYXRvciB0eXBlOiBcIiArIGNvbERlc2NyLnNlcGFyYXRvcik7XG4gICAgICB9XG5cbiAgICAgIGNvbERlc2NyTnVtKys7XG4gICAgICBjb2xEZXNjciA9IGNvbERlc2NyaXB0aW9uc1tjb2xEZXNjck51bV0gfHwge307XG4gICAgICBmaXJzdFNlcGFyYXRvciA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChjID49IG5jKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgc2Vwd2lkdGggPSB2b2lkIDA7XG5cbiAgICBpZiAoYyA+IDAgfHwgZ3JvdXAuaHNraXBCZWZvcmVBbmRBZnRlcikge1xuICAgICAgc2Vwd2lkdGggPSB1dGlscy5kZWZsdChjb2xEZXNjci5wcmVnYXAsIGFycmF5Y29sc2VwKTtcblxuICAgICAgaWYgKHNlcHdpZHRoICE9PSAwKSB7XG4gICAgICAgIGNvbFNlcCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImFycmF5Y29sc2VwXCJdLCBbXSk7XG4gICAgICAgIGNvbFNlcC5zdHlsZS53aWR0aCA9IHNlcHdpZHRoICsgXCJlbVwiO1xuICAgICAgICBjb2xzLnB1c2goY29sU2VwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY29sID0gW107XG5cbiAgICBmb3IgKHIgPSAwOyByIDwgbnI7ICsrcikge1xuICAgICAgdmFyIHJvdyA9IGJvZHlbcl07XG4gICAgICB2YXIgZWxlbSA9IHJvd1tjXTtcblxuICAgICAgaWYgKCFlbGVtKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2hpZnQgPSByb3cucG9zIC0gb2Zmc2V0O1xuICAgICAgZWxlbS5kZXB0aCA9IHJvdy5kZXB0aDtcbiAgICAgIGVsZW0uaGVpZ2h0ID0gcm93LmhlaWdodDtcbiAgICAgIGNvbC5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGVsZW0sXG4gICAgICAgIHNoaWZ0OiBzaGlmdFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29sID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJpbmRpdmlkdWFsU2hpZnRcIixcbiAgICAgIGNoaWxkcmVuOiBjb2xcbiAgICB9LCBvcHRpb25zKTtcbiAgICBjb2wgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJjb2wtYWxpZ24tXCIgKyAoY29sRGVzY3IuYWxpZ24gfHwgXCJjXCIpXSwgW2NvbF0pO1xuICAgIGNvbHMucHVzaChjb2wpO1xuXG4gICAgaWYgKGMgPCBuYyAtIDEgfHwgZ3JvdXAuaHNraXBCZWZvcmVBbmRBZnRlcikge1xuICAgICAgc2Vwd2lkdGggPSB1dGlscy5kZWZsdChjb2xEZXNjci5wb3N0Z2FwLCBhcnJheWNvbHNlcCk7XG5cbiAgICAgIGlmIChzZXB3aWR0aCAhPT0gMCkge1xuICAgICAgICBjb2xTZXAgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJhcnJheWNvbHNlcFwiXSwgW10pO1xuICAgICAgICBjb2xTZXAuc3R5bGUud2lkdGggPSBzZXB3aWR0aCArIFwiZW1cIjtcbiAgICAgICAgY29scy5wdXNoKGNvbFNlcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm10YWJsZVwiXSwgY29scyk7IC8vIEFkZCBcXGhsaW5lKHMpLCBpZiBhbnkuXG5cbiAgaWYgKGhsaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGxpbmUgPSBidWlsZENvbW1vbi5tYWtlTGluZVNwYW4oXCJobGluZVwiLCBvcHRpb25zLCBydWxlVGhpY2tuZXNzKTtcbiAgICB2YXIgZGFzaGVzID0gYnVpbGRDb21tb24ubWFrZUxpbmVTcGFuKFwiaGRhc2hsaW5lXCIsIG9wdGlvbnMsIHJ1bGVUaGlja25lc3MpO1xuICAgIHZhciB2TGlzdEVsZW1zID0gW3tcbiAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgZWxlbTogYm9keSxcbiAgICAgIHNoaWZ0OiAwXG4gICAgfV07XG5cbiAgICB3aGlsZSAoaGxpbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBobGluZSA9IGhsaW5lcy5wb3AoKTtcbiAgICAgIHZhciBsaW5lU2hpZnQgPSBobGluZS5wb3MgLSBvZmZzZXQ7XG5cbiAgICAgIGlmIChobGluZS5pc0Rhc2hlZCkge1xuICAgICAgICB2TGlzdEVsZW1zLnB1c2goe1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IGRhc2hlcyxcbiAgICAgICAgICBzaGlmdDogbGluZVNoaWZ0XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdkxpc3RFbGVtcy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBsaW5lLFxuICAgICAgICAgIHNoaWZ0OiBsaW5lU2hpZnRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICBjaGlsZHJlbjogdkxpc3RFbGVtc1xuICAgIH0sIG9wdGlvbnMpO1xuICB9XG5cbiAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIl0sIFtib2R5XSwgb3B0aW9ucyk7XG59O1xuXG52YXIgYWxpZ25NYXAgPSB7XG4gIGM6IFwiY2VudGVyIFwiLFxuICBsOiBcImxlZnQgXCIsXG4gIHI6IFwicmlnaHQgXCJcbn07XG5cbnZhciBhcnJheV9tYXRobWxCdWlsZGVyID0gZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICB2YXIgdGFibGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10YWJsZVwiLCBncm91cC5ib2R5Lm1hcChmdW5jdGlvbiAocm93KSB7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRyXCIsIHJvdy5tYXAoZnVuY3Rpb24gKGNlbGwpIHtcbiAgICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZFwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChjZWxsLCBvcHRpb25zKV0pO1xuICAgIH0pKTtcbiAgfSkpOyAvLyBTZXQgY29sdW1uIGFsaWdubWVudCwgcm93IHNwYWNpbmcsIGNvbHVtbiBzcGFjaW5nLCBhbmRcbiAgLy8gYXJyYXkgbGluZXMgYnkgc2V0dGluZyBhdHRyaWJ1dGVzIG9uIHRoZSB0YWJsZSBlbGVtZW50LlxuICAvLyBTZXQgdGhlIHJvdyBzcGFjaW5nLiBJbiBNYXRoTUwsIHdlIHNwZWNpZnkgYSBnYXAgZGlzdGFuY2UuXG4gIC8vIFdlIGRvIG5vdCB1c2Ugcm93R2FwW10gYmVjYXVzZSBNYXRoTUwgYXV0b21hdGljYWxseSBpbmNyZWFzZXNcbiAgLy8gY2VsbCBoZWlnaHQgd2l0aCB0aGUgaGVpZ2h0L2RlcHRoIG9mIHRoZSBlbGVtZW50IGNvbnRlbnQuXG4gIC8vIExhVGVYIFxcYXJyYXlzdHJldGNoIG11bHRpcGxpZXMgdGhlIHJvdyBiYXNlbGluZS10by1iYXNlbGluZSBkaXN0YW5jZS5cbiAgLy8gV2Ugc2ltdWxhdGUgdGhpcyBieSBhZGRpbmcgKGFycmF5c3RyZXRjaCAtIDEpZW0gdG8gdGhlIGdhcC4gVGhpc1xuICAvLyBkb2VzIGEgcmVhc29uYWJsZSBqb2Igb2YgYWRqdXN0aW5nIGFycmF5cyBjb250YWluaW5nIDEgZW0gdGFsbCBjb250ZW50LlxuICAvLyBUaGUgMC4xNiBhbmQgMC4wOSB2YWx1ZXMgYXJlIGZvdW5kIGVtcHJpY2FsbHkuIFRoZXkgcHJvZHVjZSBhbiBhcnJheVxuICAvLyBzaW1pbGFyIHRvIExhVGVYIGFuZCBpbiB3aGljaCBjb250ZW50IGRvZXMgbm90IGludGVyZmVyZSB3aXRoIFxcaGluZXMuXG5cbiAgdmFyIGdhcCA9IGdyb3VwLmFycmF5c3RyZXRjaCA9PT0gMC41ID8gMC4xIC8vIHtzbWFsbG1hdHJpeH0sIHtzdWJhcnJheX1cbiAgOiAwLjE2ICsgZ3JvdXAuYXJyYXlzdHJldGNoIC0gMSArIChncm91cC5hZGRKb3QgPyAwLjA5IDogMCk7XG4gIHRhYmxlLnNldEF0dHJpYnV0ZShcInJvd3NwYWNpbmdcIiwgZ2FwICsgXCJlbVwiKTsgLy8gTWF0aE1MIHRhYmxlIGxpbmVzIGdvIG9ubHkgYmV0d2VlbiBjZWxscy5cbiAgLy8gVG8gcGxhY2UgYSBsaW5lIG9uIGFuIGVkZ2Ugd2UnbGwgdXNlIDxtZW5jbG9zZT4sIGlmIG5lY2Vzc2FyeS5cblxuICB2YXIgbWVuY2xvc2UgPSBcIlwiO1xuICB2YXIgYWxpZ24gPSBcIlwiO1xuXG4gIGlmIChncm91cC5jb2xzKSB7XG4gICAgLy8gRmluZCBjb2x1bW4gYWxpZ25tZW50LCBjb2x1bW4gc3BhY2luZywgYW5kICB2ZXJ0aWNhbCBsaW5lcy5cbiAgICB2YXIgY29scyA9IGdyb3VwLmNvbHM7XG4gICAgdmFyIGNvbHVtbkxpbmVzID0gXCJcIjtcbiAgICB2YXIgcHJldlR5cGVXYXNBbGlnbiA9IGZhbHNlO1xuICAgIHZhciBpU3RhcnQgPSAwO1xuICAgIHZhciBpRW5kID0gY29scy5sZW5ndGg7XG5cbiAgICBpZiAoY29sc1swXS50eXBlID09PSBcInNlcGFyYXRvclwiKSB7XG4gICAgICBtZW5jbG9zZSArPSBcInRvcCBcIjtcbiAgICAgIGlTdGFydCA9IDE7XG4gICAgfVxuXG4gICAgaWYgKGNvbHNbY29scy5sZW5ndGggLSAxXS50eXBlID09PSBcInNlcGFyYXRvclwiKSB7XG4gICAgICBtZW5jbG9zZSArPSBcImJvdHRvbSBcIjtcbiAgICAgIGlFbmQgLT0gMTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gaVN0YXJ0OyBpIDwgaUVuZDsgaSsrKSB7XG4gICAgICBpZiAoY29sc1tpXS50eXBlID09PSBcImFsaWduXCIpIHtcbiAgICAgICAgYWxpZ24gKz0gYWxpZ25NYXBbY29sc1tpXS5hbGlnbl07XG5cbiAgICAgICAgaWYgKHByZXZUeXBlV2FzQWxpZ24pIHtcbiAgICAgICAgICBjb2x1bW5MaW5lcyArPSBcIm5vbmUgXCI7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2VHlwZVdhc0FsaWduID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoY29sc1tpXS50eXBlID09PSBcInNlcGFyYXRvclwiKSB7XG4gICAgICAgIC8vIE1hdGhNTCBhY2NlcHRzIG9ubHkgc2luZ2xlIGxpbmVzIGJldHdlZW4gY2VsbHMuXG4gICAgICAgIC8vIFNvIHdlIHJlYWQgb25seSB0aGUgZmlyc3Qgb2YgY29uc2VjdXRpdmUgc2VwYXJhdG9ycy5cbiAgICAgICAgaWYgKHByZXZUeXBlV2FzQWxpZ24pIHtcbiAgICAgICAgICBjb2x1bW5MaW5lcyArPSBjb2xzW2ldLnNlcGFyYXRvciA9PT0gXCJ8XCIgPyBcInNvbGlkIFwiIDogXCJkYXNoZWQgXCI7XG4gICAgICAgICAgcHJldlR5cGVXYXNBbGlnbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGFibGUuc2V0QXR0cmlidXRlKFwiY29sdW1uYWxpZ25cIiwgYWxpZ24udHJpbSgpKTtcblxuICAgIGlmICgvW3NkXS8udGVzdChjb2x1bW5MaW5lcykpIHtcbiAgICAgIHRhYmxlLnNldEF0dHJpYnV0ZShcImNvbHVtbmxpbmVzXCIsIGNvbHVtbkxpbmVzLnRyaW0oKSk7XG4gICAgfVxuICB9IC8vIFNldCBjb2x1bW4gc3BhY2luZy5cblxuXG4gIGlmIChncm91cC5jb2xTZXBhcmF0aW9uVHlwZSA9PT0gXCJhbGlnblwiKSB7XG4gICAgdmFyIF9jb2xzID0gZ3JvdXAuY29scyB8fCBbXTtcblxuICAgIHZhciBzcGFjaW5nID0gXCJcIjtcblxuICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBfY29scy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHNwYWNpbmcgKz0gX2kgJSAyID8gXCIwZW0gXCIgOiBcIjFlbSBcIjtcbiAgICB9XG5cbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIHNwYWNpbmcudHJpbSgpKTtcbiAgfSBlbHNlIGlmIChncm91cC5jb2xTZXBhcmF0aW9uVHlwZSA9PT0gXCJhbGlnbmF0XCIpIHtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIFwiMGVtXCIpO1xuICB9IGVsc2UgaWYgKGdyb3VwLmNvbFNlcGFyYXRpb25UeXBlID09PSBcInNtYWxsXCIpIHtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIFwiMC4yNzc4ZW1cIik7XG4gIH0gZWxzZSB7XG4gICAgdGFibGUuc2V0QXR0cmlidXRlKFwiY29sdW1uc3BhY2luZ1wiLCBcIjFlbVwiKTtcbiAgfSAvLyBBZGRyZXNzIFxcaGxpbmUgYW5kIFxcaGRhc2hsaW5lXG5cblxuICB2YXIgcm93TGluZXMgPSBcIlwiO1xuICB2YXIgaGxpbmVzID0gZ3JvdXAuaExpbmVzQmVmb3JlUm93O1xuICBtZW5jbG9zZSArPSBobGluZXNbMF0ubGVuZ3RoID4gMCA/IFwibGVmdCBcIiA6IFwiXCI7XG4gIG1lbmNsb3NlICs9IGhsaW5lc1tobGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoID4gMCA/IFwicmlnaHQgXCIgOiBcIlwiO1xuXG4gIGZvciAodmFyIF9pMiA9IDE7IF9pMiA8IGhsaW5lcy5sZW5ndGggLSAxOyBfaTIrKykge1xuICAgIHJvd0xpbmVzICs9IGhsaW5lc1tfaTJdLmxlbmd0aCA9PT0gMCA/IFwibm9uZSBcIiAvLyBNYXRoTUwgYWNjZXB0cyBvbmx5IGEgc2luZ2xlIGxpbmUgYmV0d2VlbiByb3dzLiBSZWFkIG9uZSBlbGVtZW50LlxuICAgIDogaGxpbmVzW19pMl1bMF0gPyBcImRhc2hlZCBcIiA6IFwic29saWQgXCI7XG4gIH1cblxuICBpZiAoL1tzZF0vLnRlc3Qocm93TGluZXMpKSB7XG4gICAgdGFibGUuc2V0QXR0cmlidXRlKFwicm93bGluZXNcIiwgcm93TGluZXMudHJpbSgpKTtcbiAgfVxuXG4gIGlmIChtZW5jbG9zZSAhPT0gXCJcIikge1xuICAgIHRhYmxlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtZW5jbG9zZVwiLCBbdGFibGVdKTtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJub3RhdGlvblwiLCBtZW5jbG9zZS50cmltKCkpO1xuICB9XG5cbiAgaWYgKGdyb3VwLmFycmF5c3RyZXRjaCAmJiBncm91cC5hcnJheXN0cmV0Y2ggPCAxKSB7XG4gICAgLy8gQSBzbWFsbCBhcnJheS4gV3JhcCBpbiBzY3JpcHRzdHlsZSBzbyByb3cgZ2FwIGlzIG5vdCB0b28gbGFyZ2UuXG4gICAgdGFibGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1zdHlsZVwiLCBbdGFibGVdKTtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJzY3JpcHRsZXZlbFwiLCBcIjFcIik7XG4gIH1cblxuICByZXR1cm4gdGFibGU7XG59OyAvLyBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgYWxpZ25lZCBhbmQgYWxpZ25lZGF0IGVudmlyb25tZW50cy5cblxuXG52YXIgYXJyYXlfYWxpZ25lZEhhbmRsZXIgPSBmdW5jdGlvbiBhbGlnbmVkSGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gIHZhciBjb2xzID0gW107XG4gIHZhciByZXMgPSBwYXJzZUFycmF5KGNvbnRleHQucGFyc2VyLCB7XG4gICAgY29sczogY29scyxcbiAgICBhZGRKb3Q6IHRydWVcbiAgfSwgXCJkaXNwbGF5XCIpOyAvLyBEZXRlcm1pbmluZyBudW1iZXIgb2YgY29sdW1ucy5cbiAgLy8gMS4gSWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGdpdmVuLCB3ZSB1c2UgaXQgYXMgYSBudW1iZXIgb2YgY29sdW1ucyxcbiAgLy8gICAgYW5kIG1ha2VzIHN1cmUgdGhhdCBlYWNoIHJvdyBkb2Vzbid0IGV4Y2VlZCB0aGF0IG51bWJlci5cbiAgLy8gMi4gT3RoZXJ3aXNlLCBqdXN0IGNvdW50IG51bWJlciBvZiBjb2x1bW5zID0gbWF4aW11bSBudW1iZXJcbiAgLy8gICAgb2YgY2VsbHMgaW4gZWFjaCByb3cgKFwiYWxpZ25lZFwiIG1vZGUgLS0gaXNBbGlnbmVkIHdpbGwgYmUgdHJ1ZSkuXG4gIC8vXG4gIC8vIEF0IHRoZSBzYW1lIHRpbWUsIHByZXBlbmQgZW1wdHkgZ3JvdXAge30gYXQgYmVnaW5uaW5nIG9mIGV2ZXJ5IHNlY29uZFxuICAvLyBjZWxsIGluIGVhY2ggcm93IChzdGFydGluZyB3aXRoIHNlY29uZCBjZWxsKSBzbyB0aGF0IG9wZXJhdG9ycyBiZWNvbWVcbiAgLy8gYmluYXJ5LiAgVGhpcyBiZWhhdmlvciBpcyBpbXBsZW1lbnRlZCBpbiBhbXNtYXRoJ3MgXFxzdGFydEBhbGlnbmVkLlxuXG4gIHZhciBudW1NYXRocztcbiAgdmFyIG51bUNvbHMgPSAwO1xuICB2YXIgZW1wdHlHcm91cCA9IHtcbiAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgbW9kZTogY29udGV4dC5tb2RlLFxuICAgIGJvZHk6IFtdXG4gIH07XG4gIHZhciBvcmRncm91cCA9IGNoZWNrTm9kZVR5cGUoYXJnc1swXSwgXCJvcmRncm91cFwiKTtcblxuICBpZiAob3JkZ3JvdXApIHtcbiAgICB2YXIgYXJnMCA9IFwiXCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZGdyb3VwLmJvZHkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB0ZXh0b3JkID0gYXNzZXJ0Tm9kZVR5cGUob3JkZ3JvdXAuYm9keVtpXSwgXCJ0ZXh0b3JkXCIpO1xuICAgICAgYXJnMCArPSB0ZXh0b3JkLnRleHQ7XG4gICAgfVxuXG4gICAgbnVtTWF0aHMgPSBOdW1iZXIoYXJnMCk7XG4gICAgbnVtQ29scyA9IG51bU1hdGhzICogMjtcbiAgfVxuXG4gIHZhciBpc0FsaWduZWQgPSAhbnVtQ29scztcbiAgcmVzLmJvZHkuZm9yRWFjaChmdW5jdGlvbiAocm93KSB7XG4gICAgZm9yICh2YXIgX2kzID0gMTsgX2kzIDwgcm93Lmxlbmd0aDsgX2kzICs9IDIpIHtcbiAgICAgIC8vIE1vZGlmeSBvcmRncm91cCBub2RlIHdpdGhpbiBzdHlsaW5nIG5vZGVcbiAgICAgIHZhciBzdHlsaW5nID0gYXNzZXJ0Tm9kZVR5cGUocm93W19pM10sIFwic3R5bGluZ1wiKTtcblxuICAgICAgdmFyIF9vcmRncm91cCA9IGFzc2VydE5vZGVUeXBlKHN0eWxpbmcuYm9keVswXSwgXCJvcmRncm91cFwiKTtcblxuICAgICAgX29yZGdyb3VwLmJvZHkudW5zaGlmdChlbXB0eUdyb3VwKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzQWxpZ25lZCkge1xuICAgICAgLy8gQ2FzZSAxXG4gICAgICB2YXIgY3VyTWF0aHMgPSByb3cubGVuZ3RoIC8gMjtcblxuICAgICAgaWYgKG51bU1hdGhzIDwgY3VyTWF0aHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiVG9vIG1hbnkgbWF0aCBpbiBhIHJvdzogXCIgKyAoXCJleHBlY3RlZCBcIiArIG51bU1hdGhzICsgXCIsIGJ1dCBnb3QgXCIgKyBjdXJNYXRocyksIHJvd1swXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChudW1Db2xzIDwgcm93Lmxlbmd0aCkge1xuICAgICAgLy8gQ2FzZSAyXG4gICAgICBudW1Db2xzID0gcm93Lmxlbmd0aDtcbiAgICB9XG4gIH0pOyAvLyBBZGp1c3RpbmcgYWxpZ25tZW50LlxuICAvLyBJbiBhbGlnbmVkIG1vZGUsIHdlIGFkZCBvbmUgXFxxcXVhZCBiZXR3ZWVuIGNvbHVtbnM7XG4gIC8vIG90aGVyd2lzZSB3ZSBhZGQgbm90aGluZy5cblxuICBmb3IgKHZhciBfaTQgPSAwOyBfaTQgPCBudW1Db2xzOyArK19pNCkge1xuICAgIHZhciBhbGlnbiA9IFwiclwiO1xuICAgIHZhciBwcmVnYXAgPSAwO1xuXG4gICAgaWYgKF9pNCAlIDIgPT09IDEpIHtcbiAgICAgIGFsaWduID0gXCJsXCI7XG4gICAgfSBlbHNlIGlmIChfaTQgPiAwICYmIGlzQWxpZ25lZCkge1xuICAgICAgLy8gXCJhbGlnbmVkXCIgbW9kZS5cbiAgICAgIHByZWdhcCA9IDE7IC8vIGFkZCBvbmUgXFxxdWFkXG4gICAgfVxuXG4gICAgY29sc1tfaTRdID0ge1xuICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgYWxpZ246IGFsaWduLFxuICAgICAgcHJlZ2FwOiBwcmVnYXAsXG4gICAgICBwb3N0Z2FwOiAwXG4gICAgfTtcbiAgfVxuXG4gIHJlcy5jb2xTZXBhcmF0aW9uVHlwZSA9IGlzQWxpZ25lZCA/IFwiYWxpZ25cIiA6IFwiYWxpZ25hdFwiO1xuICByZXR1cm4gcmVzO1xufTsgLy8gQXJyYXlzIGFyZSBwYXJ0IG9mIExhVGVYLCBkZWZpbmVkIGluIGx0dGFiLmR0eCBzbyBpdHMgZG9jdW1lbnRhdGlvblxuLy8gaXMgcGFydCBvZiB0aGUgc291cmNlMmUucGRmIGZpbGUgb2YgTGFUZVgyZSBzb3VyY2UgZG9jdW1lbnRhdGlvbi5cbi8vIHtkYXJyYXl9IGlzIGFuIHthcnJheX0gZW52aXJvbm1lbnQgd2hlcmUgY2VsbHMgYXJlIHNldCBpbiBcXGRpc3BsYXlzdHlsZSxcbi8vIGFzIGRlZmluZWQgaW4gbmNjbWF0aC5zdHkuXG5cblxuZGVmaW5lRW52aXJvbm1lbnQoe1xuICB0eXBlOiBcImFycmF5XCIsXG4gIG5hbWVzOiBbXCJhcnJheVwiLCBcImRhcnJheVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoY29udGV4dCwgYXJncykge1xuICAgIC8vIFNpbmNlIG5vIHR5cGVzIGFyZSBzcGVjaWZpZWQgYWJvdmUsIHRoZSB0d28gcG9zc2liaWxpdGllcyBhcmVcbiAgICAvLyAtIFRoZSBhcmd1bWVudCBpcyB3cmFwcGVkIGluIHt9IG9yIFtdLCBpbiB3aGljaCBjYXNlIFBhcnNlcidzXG4gICAgLy8gICBwYXJzZUdyb3VwKCkgcmV0dXJucyBhbiBcIm9yZGdyb3VwXCIgd3JhcHBpbmcgc29tZSBzeW1ib2wgbm9kZS5cbiAgICAvLyAtIFRoZSBhcmd1bWVudCBpcyBhIGJhcmUgc3ltYm9sIG5vZGUuXG4gICAgdmFyIHN5bU5vZGUgPSBjaGVja1N5bWJvbE5vZGVUeXBlKGFyZ3NbMF0pO1xuICAgIHZhciBjb2xhbGlnbiA9IHN5bU5vZGUgPyBbYXJnc1swXV0gOiBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcIm9yZGdyb3VwXCIpLmJvZHk7XG4gICAgdmFyIGNvbHMgPSBjb2xhbGlnbi5tYXAoZnVuY3Rpb24gKG5kZSkge1xuICAgICAgdmFyIG5vZGUgPSBhc3NlcnRTeW1ib2xOb2RlVHlwZShuZGUpO1xuICAgICAgdmFyIGNhID0gbm9kZS50ZXh0O1xuXG4gICAgICBpZiAoXCJsY3JcIi5pbmRleE9mKGNhKSAhPT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiBcImFsaWduXCIsXG4gICAgICAgICAgYWxpZ246IGNhXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGNhID09PSBcInxcIikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IFwic2VwYXJhdG9yXCIsXG4gICAgICAgICAgc2VwYXJhdG9yOiBcInxcIlxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChjYSA9PT0gXCI6XCIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiBcInNlcGFyYXRvclwiLFxuICAgICAgICAgIHNlcGFyYXRvcjogXCI6XCJcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiVW5rbm93biBjb2x1bW4gYWxpZ25tZW50OiBcIiArIGNhLCBuZGUpO1xuICAgIH0pO1xuICAgIHZhciByZXMgPSB7XG4gICAgICBjb2xzOiBjb2xzLFxuICAgICAgaHNraXBCZWZvcmVBbmRBZnRlcjogdHJ1ZSAvLyBcXEBwcmVhbWJsZSBpbiBsdHRhYi5kdHhcblxuICAgIH07XG4gICAgcmV0dXJuIHBhcnNlQXJyYXkoY29udGV4dC5wYXJzZXIsIHJlcywgZENlbGxTdHlsZShjb250ZXh0LmVudk5hbWUpKTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGFycmF5X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhcnJheV9tYXRobWxCdWlsZGVyXG59KTsgLy8gVGhlIG1hdHJpeCBlbnZpcm9ubWVudHMgb2YgYW1zbWF0aCBidWlsZHMgb24gdGhlIGFycmF5IGVudmlyb25tZW50XG4vLyBvZiBMYVRlWCwgd2hpY2ggaXMgZGlzY3Vzc2VkIGFib3ZlLlxuXG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcIm1hdHJpeFwiLCBcInBtYXRyaXhcIiwgXCJibWF0cml4XCIsIFwiQm1hdHJpeFwiLCBcInZtYXRyaXhcIiwgXCJWbWF0cml4XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDBcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihjb250ZXh0KSB7XG4gICAgdmFyIGRlbGltaXRlcnMgPSB7XG4gICAgICBcIm1hdHJpeFwiOiBudWxsLFxuICAgICAgXCJwbWF0cml4XCI6IFtcIihcIiwgXCIpXCJdLFxuICAgICAgXCJibWF0cml4XCI6IFtcIltcIiwgXCJdXCJdLFxuICAgICAgXCJCbWF0cml4XCI6IFtcIlxcXFx7XCIsIFwiXFxcXH1cIl0sXG4gICAgICBcInZtYXRyaXhcIjogW1wifFwiLCBcInxcIl0sXG4gICAgICBcIlZtYXRyaXhcIjogW1wiXFxcXFZlcnRcIiwgXCJcXFxcVmVydFwiXVxuICAgIH1bY29udGV4dC5lbnZOYW1lXTsgLy8gXFxoc2tpcCAtXFxhcnJheWNvbHNlcCBpbiBhbXNtYXRoXG5cbiAgICB2YXIgcGF5bG9hZCA9IHtcbiAgICAgIGhza2lwQmVmb3JlQW5kQWZ0ZXI6IGZhbHNlXG4gICAgfTtcbiAgICB2YXIgcmVzID0gcGFyc2VBcnJheShjb250ZXh0LnBhcnNlciwgcGF5bG9hZCwgZENlbGxTdHlsZShjb250ZXh0LmVudk5hbWUpKTtcbiAgICByZXR1cm4gZGVsaW1pdGVycyA/IHtcbiAgICAgIHR5cGU6IFwibGVmdHJpZ2h0XCIsXG4gICAgICBtb2RlOiBjb250ZXh0Lm1vZGUsXG4gICAgICBib2R5OiBbcmVzXSxcbiAgICAgIGxlZnQ6IGRlbGltaXRlcnNbMF0sXG4gICAgICByaWdodDogZGVsaW1pdGVyc1sxXSxcbiAgICAgIHJpZ2h0Q29sb3I6IHVuZGVmaW5lZCAvLyBcXHJpZ2h0IHVuaW5mbHVlbmNlZCBieSBcXGNvbG9yIGluIGFycmF5XG5cbiAgICB9IDogcmVzO1xuICB9LFxuICBodG1sQnVpbGRlcjogYXJyYXlfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGFycmF5X21hdGhtbEJ1aWxkZXJcbn0pO1xuZGVmaW5lRW52aXJvbm1lbnQoe1xuICB0eXBlOiBcImFycmF5XCIsXG4gIG5hbWVzOiBbXCJzbWFsbG1hdHJpeFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoY29udGV4dCkge1xuICAgIHZhciBwYXlsb2FkID0ge1xuICAgICAgYXJyYXlzdHJldGNoOiAwLjVcbiAgICB9O1xuICAgIHZhciByZXMgPSBwYXJzZUFycmF5KGNvbnRleHQucGFyc2VyLCBwYXlsb2FkLCBcInNjcmlwdFwiKTtcbiAgICByZXMuY29sU2VwYXJhdGlvblR5cGUgPSBcInNtYWxsXCI7XG4gICAgcmV0dXJuIHJlcztcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGFycmF5X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhcnJheV9tYXRobWxCdWlsZGVyXG59KTtcbmRlZmluZUVudmlyb25tZW50KHtcbiAgdHlwZTogXCJhcnJheVwiLFxuICBuYW1lczogW1wic3ViYXJyYXlcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKGNvbnRleHQsIGFyZ3MpIHtcbiAgICAvLyBQYXJzaW5nIG9mIHtzdWJhcnJheX0gaXMgc2ltaWxhciB0byB7YXJyYXl9XG4gICAgdmFyIHN5bU5vZGUgPSBjaGVja1N5bWJvbE5vZGVUeXBlKGFyZ3NbMF0pO1xuICAgIHZhciBjb2xhbGlnbiA9IHN5bU5vZGUgPyBbYXJnc1swXV0gOiBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcIm9yZGdyb3VwXCIpLmJvZHk7XG4gICAgdmFyIGNvbHMgPSBjb2xhbGlnbi5tYXAoZnVuY3Rpb24gKG5kZSkge1xuICAgICAgdmFyIG5vZGUgPSBhc3NlcnRTeW1ib2xOb2RlVHlwZShuZGUpO1xuICAgICAgdmFyIGNhID0gbm9kZS50ZXh0OyAvLyB7c3ViYXJyYXl9IG9ubHkgcmVjb2duaXplcyBcImxcIiAmIFwiY1wiXG5cbiAgICAgIGlmIChcImxjXCIuaW5kZXhPZihjYSkgIT09IC0xKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgICAgIGFsaWduOiBjYVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJVbmtub3duIGNvbHVtbiBhbGlnbm1lbnQ6IFwiICsgY2EsIG5kZSk7XG4gICAgfSk7XG5cbiAgICBpZiAoY29scy5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJ7c3ViYXJyYXl9IGNhbiBjb250YWluIG9ubHkgb25lIGNvbHVtblwiKTtcbiAgICB9XG5cbiAgICB2YXIgcmVzID0ge1xuICAgICAgY29sczogY29scyxcbiAgICAgIGhza2lwQmVmb3JlQW5kQWZ0ZXI6IGZhbHNlLFxuICAgICAgYXJyYXlzdHJldGNoOiAwLjVcbiAgICB9O1xuICAgIHJlcyA9IHBhcnNlQXJyYXkoY29udGV4dC5wYXJzZXIsIHJlcywgXCJzY3JpcHRcIik7XG5cbiAgICBpZiAocmVzLmJvZHlbMF0ubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwie3N1YmFycmF5fSBjYW4gY29udGFpbiBvbmx5IG9uZSBjb2x1bW5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGFycmF5X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhcnJheV9tYXRobWxCdWlsZGVyXG59KTsgLy8gQSBjYXNlcyBlbnZpcm9ubWVudCAoaW4gYW1zbWF0aC5zdHkpIGlzIGFsbW9zdCBlcXVpdmFsZW50IHRvXG4vLyBcXGRlZlxcYXJyYXlzdHJldGNoezEuMn0lXG4vLyBcXGxlZnRcXHtcXGJlZ2lue2FycmF5fXtAe31sQHtcXHF1YWR9bEB7fX0g4oCmIFxcZW5ke2FycmF5fVxccmlnaHQuXG4vLyB7ZGNhc2VzfSBpcyBhIHtjYXNlc30gZW52aXJvbm1lbnQgd2hlcmUgY2VsbHMgYXJlIHNldCBpbiBcXGRpc3BsYXlzdHlsZSxcbi8vIGFzIGRlZmluZWQgaW4gbWF0aHRvb2xzLnN0eS5cblxuZGVmaW5lRW52aXJvbm1lbnQoe1xuICB0eXBlOiBcImFycmF5XCIsXG4gIG5hbWVzOiBbXCJjYXNlc1wiLCBcImRjYXNlc1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoY29udGV4dCkge1xuICAgIHZhciBwYXlsb2FkID0ge1xuICAgICAgYXJyYXlzdHJldGNoOiAxLjIsXG4gICAgICBjb2xzOiBbe1xuICAgICAgICB0eXBlOiBcImFsaWduXCIsXG4gICAgICAgIGFsaWduOiBcImxcIixcbiAgICAgICAgcHJlZ2FwOiAwLFxuICAgICAgICAvLyBUT0RPKGtldmluYikgZ2V0IHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAgICAvLyBGb3Igbm93IHdlIHVzZSB0aGUgbWV0cmljcyBmb3IgVEVYVCBzdHlsZSB3aGljaCBpcyB3aGF0IHdlIHdlcmVcbiAgICAgICAgLy8gZG9pbmcgYmVmb3JlLiAgQmVmb3JlIGF0dGVtcHRpbmcgdG8gZ2V0IHRoZSBjdXJyZW50IHN0eWxlIHdlXG4gICAgICAgIC8vIHNob3VsZCBsb29rIGF0IFRlWCdzIGJlaGF2aW9yIGVzcGVjaWFsbHkgZm9yIFxcb3ZlciBhbmQgbWF0cmljZXMuXG4gICAgICAgIHBvc3RnYXA6IDEuMFxuICAgICAgICAvKiAxZW0gcXVhZCAqL1xuXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiYWxpZ25cIixcbiAgICAgICAgYWxpZ246IFwibFwiLFxuICAgICAgICBwcmVnYXA6IDAsXG4gICAgICAgIHBvc3RnYXA6IDBcbiAgICAgIH1dXG4gICAgfTtcbiAgICB2YXIgcmVzID0gcGFyc2VBcnJheShjb250ZXh0LnBhcnNlciwgcGF5bG9hZCwgZENlbGxTdHlsZShjb250ZXh0LmVudk5hbWUpKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJsZWZ0cmlnaHRcIixcbiAgICAgIG1vZGU6IGNvbnRleHQubW9kZSxcbiAgICAgIGJvZHk6IFtyZXNdLFxuICAgICAgbGVmdDogXCJcXFxce1wiLFxuICAgICAgcmlnaHQ6IFwiLlwiLFxuICAgICAgcmlnaHRDb2xvcjogdW5kZWZpbmVkXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGFycmF5X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhcnJheV9tYXRobWxCdWlsZGVyXG59KTsgLy8gQW4gYWxpZ25lZCBlbnZpcm9ubWVudCBpcyBsaWtlIHRoZSBhbGlnbiogZW52aXJvbm1lbnRcbi8vIGV4Y2VwdCBpdCBvcGVyYXRlcyB3aXRoaW4gbWF0aCBtb2RlLlxuLy8gTm90ZSB0aGF0IHdlIGFzc3VtZSBcXG5vbWFsbGluZXNraXBsaW1pdCB0byBiZSB6ZXJvLFxuLy8gc28gdGhhdCBcXHN0cnV0QCBpcyB0aGUgc2FtZSBhcyBcXHN0cnV0LlxuXG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcImFsaWduZWRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuICBoYW5kbGVyOiBhcnJheV9hbGlnbmVkSGFuZGxlcixcbiAgaHRtbEJ1aWxkZXI6IGFycmF5X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhcnJheV9tYXRobWxCdWlsZGVyXG59KTsgLy8gQSBnYXRoZXJlZCBlbnZpcm9ubWVudCBpcyBsaWtlIGFuIGFycmF5IGVudmlyb25tZW50IHdpdGggb25lIGNlbnRlcmVkXG4vLyBjb2x1bW4sIGJ1dCB3aGVyZSByb3dzIGFyZSBjb25zaWRlcmVkIGxpbmVzIHNvIGdldCBcXGpvdCBsaW5lIHNwYWNpbmdcbi8vIGFuZCBjb250ZW50cyBhcmUgc2V0IGluIFxcZGlzcGxheXN0eWxlLlxuXG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcImdhdGhlcmVkXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDBcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihjb250ZXh0KSB7XG4gICAgdmFyIHJlcyA9IHtcbiAgICAgIGNvbHM6IFt7XG4gICAgICAgIHR5cGU6IFwiYWxpZ25cIixcbiAgICAgICAgYWxpZ246IFwiY1wiXG4gICAgICB9XSxcbiAgICAgIGFkZEpvdDogdHJ1ZVxuICAgIH07XG4gICAgcmV0dXJuIHBhcnNlQXJyYXkoY29udGV4dC5wYXJzZXIsIHJlcywgXCJkaXNwbGF5XCIpO1xuICB9LFxuICBodG1sQnVpbGRlcjogYXJyYXlfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGFycmF5X21hdGhtbEJ1aWxkZXJcbn0pOyAvLyBhbGlnbmF0IGVudmlyb25tZW50IGlzIGxpa2UgYW4gYWxpZ24gZW52aXJvbm1lbnQsIGJ1dCBvbmUgbXVzdCBleHBsaWNpdGx5XG4vLyBzcGVjaWZ5IG1heGltdW0gbnVtYmVyIG9mIGNvbHVtbnMgaW4gZWFjaCByb3csIGFuZCBjYW4gYWRqdXN0IHNwYWNpbmcgYmV0d2VlblxuLy8gZWFjaCBjb2x1bW5zLlxuXG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcImFsaWduZWRhdFwiXSxcbiAgLy8gT25lIGZvciBudW1iZXJlZCBhbmQgZm9yIHVubnVtYmVyZWQ7XG4gIC8vIGJ1dCwgS2FUZVggZG9lc24ndCBzdXBwb3J0cyBtYXRoIG51bWJlcmluZyB5ZXQsXG4gIC8vIHRoZXkgbWFrZSBubyBkaWZmZXJlbmNlIGZvciBub3cuXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiBhcnJheV9hbGlnbmVkSGFuZGxlcixcbiAgaHRtbEJ1aWxkZXI6IGFycmF5X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhcnJheV9tYXRobWxCdWlsZGVyXG59KTsgLy8gQ2F0Y2ggXFxobGluZSBvdXRzaWRlIGFycmF5IGVudmlyb25tZW50XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJ0ZXh0XCIsXG4gIC8vIERvZXNuJ3QgbWF0dGVyIHdoYXQgdGhpcyBpcy5cbiAgbmFtZXM6IFtcIlxcXFxobGluZVwiLCBcIlxcXFxoZGFzaGxpbmVcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGFsbG93ZWRJbk1hdGg6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKGNvbnRleHQuZnVuY05hbWUgKyBcIiB2YWxpZCBvbmx5IHdpdGhpbiBhcnJheSBlbnZpcm9ubWVudFwiKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9lbnZpcm9ubWVudHMuanNcblxudmFyIGVudmlyb25tZW50cyA9IF9lbnZpcm9ubWVudHM7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfZW52aXJvbm1lbnRzID0gKGVudmlyb25tZW50cyk7IC8vIEFsbCBlbnZpcm9ubWVudCBkZWZpbml0aW9ucyBzaG91bGQgYmUgaW1wb3J0ZWQgYmVsb3dcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvZW52aXJvbm1lbnQuanNcblxuXG5cbiAvLyBFbnZpcm9ubWVudCBkZWxpbWl0ZXJzLiBIVE1ML01hdGhNTCByZW5kZXJpbmcgaXMgZGVmaW5lZCBpbiB0aGUgY29ycmVzcG9uZGluZ1xuLy8gZGVmaW5lRW52aXJvbm1lbnQgZGVmaW5pdGlvbnMuXG4vLyAkRmxvd0ZpeE1lLCBcImVudmlyb25tZW50XCIgaGFuZGxlciByZXR1cm5zIGFuIGVudmlyb25tZW50IFBhcnNlTm9kZVxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiZW52aXJvbm1lbnRcIixcbiAgbmFtZXM6IFtcIlxcXFxiZWdpblwiLCBcIlxcXFxlbmRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1widGV4dFwiXVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZi5wYXJzZXIsXG4gICAgICAgIGZ1bmNOYW1lID0gX3JlZi5mdW5jTmFtZTtcbiAgICB2YXIgbmFtZUdyb3VwID0gYXJnc1swXTtcblxuICAgIGlmIChuYW1lR3JvdXAudHlwZSAhPT0gXCJvcmRncm91cFwiKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJJbnZhbGlkIGVudmlyb25tZW50IG5hbWVcIiwgbmFtZUdyb3VwKTtcbiAgICB9XG5cbiAgICB2YXIgZW52TmFtZSA9IFwiXCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVHcm91cC5ib2R5Lmxlbmd0aDsgKytpKSB7XG4gICAgICBlbnZOYW1lICs9IGFzc2VydE5vZGVUeXBlKG5hbWVHcm91cC5ib2R5W2ldLCBcInRleHRvcmRcIikudGV4dDtcbiAgICB9XG5cbiAgICBpZiAoZnVuY05hbWUgPT09IFwiXFxcXGJlZ2luXCIpIHtcbiAgICAgIC8vIGJlZ2luLi4uZW5kIGlzIHNpbWlsYXIgdG8gbGVmdC4uLnJpZ2h0XG4gICAgICBpZiAoIXNyY19lbnZpcm9ubWVudHMuaGFzT3duUHJvcGVydHkoZW52TmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiTm8gc3VjaCBlbnZpcm9ubWVudDogXCIgKyBlbnZOYW1lLCBuYW1lR3JvdXApO1xuICAgICAgfSAvLyBCdWlsZCB0aGUgZW52aXJvbm1lbnQgb2JqZWN0LiBBcmd1bWVudHMgYW5kIG90aGVyIGluZm9ybWF0aW9uIHdpbGxcbiAgICAgIC8vIGJlIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBiZWdpbiBhbmQgZW5kIG1ldGhvZHMgdXNpbmcgcHJvcGVydGllcy5cblxuXG4gICAgICB2YXIgZW52ID0gc3JjX2Vudmlyb25tZW50c1tlbnZOYW1lXTtcblxuICAgICAgdmFyIF9wYXJzZXIkcGFyc2VBcmd1bWVudCA9IHBhcnNlci5wYXJzZUFyZ3VtZW50cyhcIlxcXFxiZWdpbntcIiArIGVudk5hbWUgKyBcIn1cIiwgZW52KSxcbiAgICAgICAgICBfYXJncyA9IF9wYXJzZXIkcGFyc2VBcmd1bWVudC5hcmdzLFxuICAgICAgICAgIG9wdEFyZ3MgPSBfcGFyc2VyJHBhcnNlQXJndW1lbnQub3B0QXJncztcblxuICAgICAgdmFyIGNvbnRleHQgPSB7XG4gICAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgICBlbnZOYW1lOiBlbnZOYW1lLFxuICAgICAgICBwYXJzZXI6IHBhcnNlclxuICAgICAgfTtcbiAgICAgIHZhciByZXN1bHQgPSBlbnYuaGFuZGxlcihjb250ZXh0LCBfYXJncywgb3B0QXJncyk7XG4gICAgICBwYXJzZXIuZXhwZWN0KFwiXFxcXGVuZFwiLCBmYWxzZSk7XG4gICAgICB2YXIgZW5kTmFtZVRva2VuID0gcGFyc2VyLm5leHRUb2tlbjtcbiAgICAgIHZhciBlbmQgPSBhc3NlcnROb2RlVHlwZShwYXJzZXIucGFyc2VGdW5jdGlvbigpLCBcImVudmlyb25tZW50XCIpO1xuXG4gICAgICBpZiAoZW5kLm5hbWUgIT09IGVudk5hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiTWlzbWF0Y2g6IFxcXFxiZWdpbntcIiArIGVudk5hbWUgKyBcIn0gbWF0Y2hlZCBieSBcXFxcZW5ke1wiICsgZW5kLm5hbWUgKyBcIn1cIiwgZW5kTmFtZVRva2VuKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJlbnZpcm9ubWVudFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBuYW1lOiBlbnZOYW1lLFxuICAgICAgbmFtZUdyb3VwOiBuYW1lR3JvdXBcbiAgICB9O1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9tY2xhc3MuanNcblxuXG5cblxuXG5cbnZhciBtY2xhc3NfbWFrZVNwYW4gPSBidWlsZENvbW1vbi5tYWtlU3BhbjtcblxuZnVuY3Rpb24gbWNsYXNzX2h0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gIHZhciBlbGVtZW50cyA9IGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucywgdHJ1ZSk7XG4gIHJldHVybiBtY2xhc3NfbWFrZVNwYW4oW2dyb3VwLm1jbGFzc10sIGVsZW1lbnRzLCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gbWNsYXNzX21hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIG5vZGU7XG4gIHZhciBpbm5lciA9IGJ1aWxkTWF0aE1MX2J1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zKTtcblxuICBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1pbm5lclwiKSB7XG4gICAgcmV0dXJuIG1hdGhNTFRyZWUubmV3RG9jdW1lbnRGcmFnbWVudChpbm5lcik7XG4gIH0gZWxzZSBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1vcmRcIikge1xuICAgIGlmIChncm91cC5pc0NoYXJhY3RlckJveCkge1xuICAgICAgbm9kZSA9IGlubmVyWzBdO1xuICAgICAgbm9kZS50eXBlID0gXCJtaVwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtaVwiLCBpbm5lcik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChncm91cC5pc0NoYXJhY3RlckJveCkge1xuICAgICAgbm9kZSA9IGlubmVyWzBdO1xuICAgICAgbm9kZS50eXBlID0gXCJtb1wiO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBpbm5lcik7XG4gICAgfSAvLyBTZXQgc3BhY2luZyBiYXNlZCBvbiB3aGF0IGlzIHRoZSBtb3N0IGxpa2VseSBhZGphY2VudCBhdG9tIHR5cGUuXG4gICAgLy8gU2VlIFRlWGJvb2sgcDE3MC5cblxuXG4gICAgaWYgKGdyb3VwLm1jbGFzcyA9PT0gXCJtYmluXCIpIHtcbiAgICAgIG5vZGUuYXR0cmlidXRlcy5sc3BhY2UgPSBcIjAuMjJlbVwiOyAvLyBtZWRpdW0gc3BhY2VcblxuICAgICAgbm9kZS5hdHRyaWJ1dGVzLnJzcGFjZSA9IFwiMC4yMmVtXCI7XG4gICAgfSBlbHNlIGlmIChncm91cC5tY2xhc3MgPT09IFwibXB1bmN0XCIpIHtcbiAgICAgIG5vZGUuYXR0cmlidXRlcy5sc3BhY2UgPSBcIjBlbVwiO1xuICAgICAgbm9kZS5hdHRyaWJ1dGVzLnJzcGFjZSA9IFwiMC4xN2VtXCI7IC8vIHRoaW5zcGFjZVxuICAgIH0gZWxzZSBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1vcGVuXCIgfHwgZ3JvdXAubWNsYXNzID09PSBcIm1jbG9zZVwiKSB7XG4gICAgICBub2RlLmF0dHJpYnV0ZXMubHNwYWNlID0gXCIwZW1cIjtcbiAgICAgIG5vZGUuYXR0cmlidXRlcy5yc3BhY2UgPSBcIjBlbVwiO1xuICAgIH0gLy8gTWF0aE1MIDxtbz4gZGVmYXVsdCBzcGFjZSBpcyA1LzE4IGVtLCBzbyA8bXJlbD4gbmVlZHMgbm8gYWN0aW9uLlxuICAgIC8vIFJlZjogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvTWF0aE1ML0VsZW1lbnQvbW9cblxuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59IC8vIE1hdGggY2xhc3MgY29tbWFuZHMgZXhjZXB0IFxcbWF0aG9wXG5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcIm1jbGFzc1wiLFxuICBuYW1lczogW1wiXFxcXG1hdGhvcmRcIiwgXCJcXFxcbWF0aGJpblwiLCBcIlxcXFxtYXRocmVsXCIsIFwiXFxcXG1hdGhvcGVuXCIsIFwiXFxcXG1hdGhjbG9zZVwiLCBcIlxcXFxtYXRocHVuY3RcIiwgXCJcXFxcbWF0aGlubmVyXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWYuZnVuY05hbWU7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm1jbGFzc1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBtY2xhc3M6IFwibVwiICsgZnVuY05hbWUuc3Vic3RyKDUpLFxuICAgICAgLy8gVE9ETyhrZXZpbmIpOiBkb24ndCBwcmVmaXggd2l0aCAnbSdcbiAgICAgIGJvZHk6IGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGJvZHkpLFxuICAgICAgaXNDaGFyYWN0ZXJCb3g6IHV0aWxzLmlzQ2hhcmFjdGVyQm94KGJvZHkpXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IG1jbGFzc19odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogbWNsYXNzX21hdGhtbEJ1aWxkZXJcbn0pO1xudmFyIGJpbnJlbENsYXNzID0gZnVuY3Rpb24gYmlucmVsQ2xhc3MoYXJnKSB7XG4gIC8vIFxcYmlucmVsQCBzcGFjaW5nIHZhcmllcyB3aXRoIChiaW58cmVsfG9yZCkgb2YgdGhlIGF0b20gaW4gdGhlIGFyZ3VtZW50LlxuICAvLyAoYnkgcmVuZGVyaW5nIHNlcGFyYXRlbHkgYW5kIHdpdGgge31zIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZCBtZWFzdXJpbmdcbiAgLy8gdGhlIGNoYW5nZSBpbiBzcGFjaW5nKS4gIFdlJ2xsIGRvIHJvdWdobHkgdGhlIHNhbWUgYnkgZGV0ZWN0aW5nIHRoZVxuICAvLyBhdG9tIHR5cGUgZGlyZWN0bHkuXG4gIHZhciBhdG9tID0gYXJnLnR5cGUgPT09IFwib3JkZ3JvdXBcIiAmJiBhcmcuYm9keS5sZW5ndGggPyBhcmcuYm9keVswXSA6IGFyZztcblxuICBpZiAoYXRvbS50eXBlID09PSBcImF0b21cIiAmJiAoYXRvbS5mYW1pbHkgPT09IFwiYmluXCIgfHwgYXRvbS5mYW1pbHkgPT09IFwicmVsXCIpKSB7XG4gICAgcmV0dXJuIFwibVwiICsgYXRvbS5mYW1pbHk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwibW9yZFwiO1xuICB9XG59OyAvLyBcXEBiaW5yZWx7eH17eX0gcmVuZGVycyBsaWtlIHkgYnV0IGFzIG1iaW4vbXJlbC9tb3JkIGlmIHggaXMgbWJpbi9tcmVsL21vcmQuXG4vLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gXFxiaW5yZWxAe3h9XFxiaW5yZWxAQHt5fSBpbiBBTVNUZVguXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJtY2xhc3NcIixcbiAgbmFtZXM6IFtcIlxcXFxAYmlucmVsXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDJcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmMiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmMi5wYXJzZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwibWNsYXNzXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG1jbGFzczogYmlucmVsQ2xhc3MoYXJnc1swXSksXG4gICAgICBib2R5OiBbYXJnc1sxXV0sXG4gICAgICBpc0NoYXJhY3RlckJveDogdXRpbHMuaXNDaGFyYWN0ZXJCb3goYXJnc1sxXSlcbiAgICB9O1xuICB9XG59KTsgLy8gQnVpbGQgYSByZWxhdGlvbiBvciBzdGFja2VkIG9wIGJ5IHBsYWNpbmcgb25lIHN5bWJvbCBvbiB0b3Agb2YgYW5vdGhlclxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibWNsYXNzXCIsXG4gIG5hbWVzOiBbXCJcXFxcc3RhY2tyZWxcIiwgXCJcXFxcb3ZlcnNldFwiLCBcIlxcXFx1bmRlcnNldFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZjMsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZjMucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWYzLmZ1bmNOYW1lO1xuICAgIHZhciBiYXNlQXJnID0gYXJnc1sxXTtcbiAgICB2YXIgc2hpZnRlZEFyZyA9IGFyZ3NbMF07XG4gICAgdmFyIG1jbGFzcztcblxuICAgIGlmIChmdW5jTmFtZSAhPT0gXCJcXFxcc3RhY2tyZWxcIikge1xuICAgICAgLy8gTGFUZVggYXBwbGllcyBcXGJpbnJlbCBzcGFjaW5nIHRvIFxcb3ZlcnNldCBhbmQgXFx1bmRlcnNldC5cbiAgICAgIG1jbGFzcyA9IGJpbnJlbENsYXNzKGJhc2VBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtY2xhc3MgPSBcIm1yZWxcIjsgLy8gZm9yIFxcc3RhY2tyZWxcbiAgICB9XG5cbiAgICB2YXIgYmFzZU9wID0ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogYmFzZUFyZy5tb2RlLFxuICAgICAgbGltaXRzOiB0cnVlLFxuICAgICAgYWx3YXlzSGFuZGxlU3VwU3ViOiB0cnVlLFxuICAgICAgcGFyZW50SXNTdXBTdWI6IGZhbHNlLFxuICAgICAgc3ltYm9sOiBmYWxzZSxcbiAgICAgIHN1cHByZXNzQmFzZVNoaWZ0OiBmdW5jTmFtZSAhPT0gXCJcXFxcc3RhY2tyZWxcIixcbiAgICAgIGJvZHk6IGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGJhc2VBcmcpXG4gICAgfTtcbiAgICB2YXIgc3Vwc3ViID0ge1xuICAgICAgdHlwZTogXCJzdXBzdWJcIixcbiAgICAgIG1vZGU6IHNoaWZ0ZWRBcmcubW9kZSxcbiAgICAgIGJhc2U6IGJhc2VPcCxcbiAgICAgIHN1cDogZnVuY05hbWUgPT09IFwiXFxcXHVuZGVyc2V0XCIgPyBudWxsIDogc2hpZnRlZEFyZyxcbiAgICAgIHN1YjogZnVuY05hbWUgPT09IFwiXFxcXHVuZGVyc2V0XCIgPyBzaGlmdGVkQXJnIDogbnVsbFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwibWNsYXNzXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG1jbGFzczogbWNsYXNzLFxuICAgICAgYm9keTogW3N1cHN1Yl0sXG4gICAgICBpc0NoYXJhY3RlckJveDogdXRpbHMuaXNDaGFyYWN0ZXJCb3goc3Vwc3ViKVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBtY2xhc3NfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IG1jbGFzc19tYXRobWxCdWlsZGVyXG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9mb250LmpzXG4vLyBUT0RPKGtldmluYik6IGltcGxlbWVudCBcXFxcc2wgYW5kIFxcXFxzY1xuXG5cblxuXG5cblxudmFyIGZvbnRfaHRtbEJ1aWxkZXIgPSBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICB2YXIgZm9udCA9IGdyb3VwLmZvbnQ7XG4gIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy53aXRoRm9udChmb250KTtcbiAgcmV0dXJuIGJ1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG5ld09wdGlvbnMpO1xufTtcblxudmFyIGZvbnRfbWF0aG1sQnVpbGRlciA9IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIGZvbnQgPSBncm91cC5mb250O1xuICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMud2l0aEZvbnQoZm9udCk7XG4gIHJldHVybiBidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG5ld09wdGlvbnMpO1xufTtcblxudmFyIGZvbnRBbGlhc2VzID0ge1xuICBcIlxcXFxCYmJcIjogXCJcXFxcbWF0aGJiXCIsXG4gIFwiXFxcXGJvbGRcIjogXCJcXFxcbWF0aGJmXCIsXG4gIFwiXFxcXGZyYWtcIjogXCJcXFxcbWF0aGZyYWtcIixcbiAgXCJcXFxcYm1cIjogXCJcXFxcYm9sZHN5bWJvbFwiXG59O1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImZvbnRcIixcbiAgbmFtZXM6IFsvLyBzdHlsZXMsIGV4Y2VwdCBcXGJvbGRzeW1ib2wgZGVmaW5lZCBiZWxvd1xuICBcIlxcXFxtYXRocm1cIiwgXCJcXFxcbWF0aGl0XCIsIFwiXFxcXG1hdGhiZlwiLCBcIlxcXFxtYXRobm9ybWFsXCIsIC8vIGZhbWlsaWVzXG4gIFwiXFxcXG1hdGhiYlwiLCBcIlxcXFxtYXRoY2FsXCIsIFwiXFxcXG1hdGhmcmFrXCIsIFwiXFxcXG1hdGhzY3JcIiwgXCJcXFxcbWF0aHNmXCIsIFwiXFxcXG1hdGh0dFwiLCAvLyBhbGlhc2VzLCBleGNlcHQgXFxibSBkZWZpbmVkIGJlbG93XG4gIFwiXFxcXEJiYlwiLCBcIlxcXFxib2xkXCIsIFwiXFxcXGZyYWtcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBncmVlZGluZXNzOiAyXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICB2YXIgZnVuYyA9IGZ1bmNOYW1lO1xuXG4gICAgaWYgKGZ1bmMgaW4gZm9udEFsaWFzZXMpIHtcbiAgICAgIGZ1bmMgPSBmb250QWxpYXNlc1tmdW5jXTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJmb250XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGZvbnQ6IGZ1bmMuc2xpY2UoMSksXG4gICAgICBib2R5OiBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZvbnRfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGZvbnRfbWF0aG1sQnVpbGRlclxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibWNsYXNzXCIsXG4gIG5hbWVzOiBbXCJcXFxcYm9sZHN5bWJvbFwiLCBcIlxcXFxibVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGdyZWVkaW5lc3M6IDJcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmMiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmMi5wYXJzZXI7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHZhciBpc0NoYXJhY3RlckJveCA9IHV0aWxzLmlzQ2hhcmFjdGVyQm94KGJvZHkpOyAvLyBhbXNic3kuc3R5J3MgXFxib2xkc3ltYm9sIHVzZXMgXFxiaW5yZWwgc3BhY2luZyB0byBpbmhlcml0IHRoZVxuICAgIC8vIGFyZ3VtZW50J3MgYmlufHJlbHxvcmQgc3RhdHVzXG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJtY2xhc3NcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbWNsYXNzOiBiaW5yZWxDbGFzcyhib2R5KSxcbiAgICAgIGJvZHk6IFt7XG4gICAgICAgIHR5cGU6IFwiZm9udFwiLFxuICAgICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgICAgZm9udDogXCJib2xkc3ltYm9sXCIsXG4gICAgICAgIGJvZHk6IGJvZHlcbiAgICAgIH1dLFxuICAgICAgaXNDaGFyYWN0ZXJCb3g6IGlzQ2hhcmFjdGVyQm94XG4gICAgfTtcbiAgfVxufSk7IC8vIE9sZCBmb250IGNoYW5naW5nIGZ1bmN0aW9uc1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiZm9udFwiLFxuICBuYW1lczogW1wiXFxcXHJtXCIsIFwiXFxcXHNmXCIsIFwiXFxcXHR0XCIsIFwiXFxcXGJmXCIsIFwiXFxcXGl0XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYzLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYzLnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmMy5mdW5jTmFtZSxcbiAgICAgICAgYnJlYWtPblRva2VuVGV4dCA9IF9yZWYzLmJyZWFrT25Ub2tlblRleHQ7XG4gICAgdmFyIG1vZGUgPSBwYXJzZXIubW9kZTtcbiAgICB2YXIgYm9keSA9IHBhcnNlci5wYXJzZUV4cHJlc3Npb24odHJ1ZSwgYnJlYWtPblRva2VuVGV4dCk7XG4gICAgdmFyIHN0eWxlID0gXCJtYXRoXCIgKyBmdW5jTmFtZS5zbGljZSgxKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJmb250XCIsXG4gICAgICBtb2RlOiBtb2RlLFxuICAgICAgZm9udDogc3R5bGUsXG4gICAgICBib2R5OiB7XG4gICAgICAgIHR5cGU6IFwib3JkZ3JvdXBcIixcbiAgICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICAgIGJvZHk6IGJvZHlcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZm9udF9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogZm9udF9tYXRobWxCdWlsZGVyXG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9nZW5mcmFjLmpzXG5cblxuXG5cblxuXG5cblxuXG5cblxudmFyIGdlbmZyYWNfYWRqdXN0U3R5bGUgPSBmdW5jdGlvbiBhZGp1c3RTdHlsZShzaXplLCBvcmlnaW5hbFN0eWxlKSB7XG4gIC8vIEZpZ3VyZSBvdXQgd2hhdCBzdHlsZSB0aGlzIGZyYWN0aW9uIHNob3VsZCBiZSBpbiBiYXNlZCBvbiB0aGVcbiAgLy8gZnVuY3Rpb24gdXNlZFxuICB2YXIgc3R5bGUgPSBvcmlnaW5hbFN0eWxlO1xuXG4gIGlmIChzaXplID09PSBcImRpc3BsYXlcIikge1xuICAgIC8vIEdldCBkaXNwbGF5IHN0eWxlIGFzIGEgZGVmYXVsdC5cbiAgICAvLyBJZiBpbmNvbWluZyBzdHlsZSBpcyBzdWIvc3VwLCB1c2Ugc3R5bGUudGV4dCgpIHRvIGdldCBjb3JyZWN0IHNpemUuXG4gICAgc3R5bGUgPSBzdHlsZS5pZCA+PSBzcmNfU3R5bGUuU0NSSVBULmlkID8gc3R5bGUudGV4dCgpIDogc3JjX1N0eWxlLkRJU1BMQVk7XG4gIH0gZWxzZSBpZiAoc2l6ZSA9PT0gXCJ0ZXh0XCIgJiYgc3R5bGUuc2l6ZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkuc2l6ZSkge1xuICAgIC8vIFdlJ3JlIGluIGEgXFx0ZnJhYyBidXQgaW5jb21pbmcgc3R5bGUgaXMgZGlzcGxheXN0eWxlLCBzbzpcbiAgICBzdHlsZSA9IHNyY19TdHlsZS5URVhUO1xuICB9IGVsc2UgaWYgKHNpemUgPT09IFwic2NyaXB0XCIpIHtcbiAgICBzdHlsZSA9IHNyY19TdHlsZS5TQ1JJUFQ7XG4gIH0gZWxzZSBpZiAoc2l6ZSA9PT0gXCJzY3JpcHRzY3JpcHRcIikge1xuICAgIHN0eWxlID0gc3JjX1N0eWxlLlNDUklQVFNDUklQVDtcbiAgfVxuXG4gIHJldHVybiBzdHlsZTtcbn07XG5cbnZhciBnZW5mcmFjX2h0bWxCdWlsZGVyID0gZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgLy8gRnJhY3Rpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBUZVhib29rIG9uIHBhZ2VzIDQ0NC00NDUsIHJ1bGVzIDE1KGEtZSkuXG4gIHZhciBzdHlsZSA9IGdlbmZyYWNfYWRqdXN0U3R5bGUoZ3JvdXAuc2l6ZSwgb3B0aW9ucy5zdHlsZSk7XG4gIHZhciBuc3R5bGUgPSBzdHlsZS5mcmFjTnVtKCk7XG4gIHZhciBkc3R5bGUgPSBzdHlsZS5mcmFjRGVuKCk7XG4gIHZhciBuZXdPcHRpb25zO1xuICBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShuc3R5bGUpO1xuICB2YXIgbnVtZXJtID0gYnVpbGRIVE1MX2J1aWxkR3JvdXAoZ3JvdXAubnVtZXIsIG5ld09wdGlvbnMsIG9wdGlvbnMpO1xuXG4gIGlmIChncm91cC5jb250aW51ZWQpIHtcbiAgICAvLyBcXGNmcmFjIGluc2VydHMgYSBcXHN0cnV0IGludG8gdGhlIG51bWVyYXRvci5cbiAgICAvLyBHZXQgXFxzdHJ1dCBkaW1lbnNpb25zIGZyb20gVGVYYm9vayBwYWdlIDM1My5cbiAgICB2YXIgaFN0cnV0ID0gOC41IC8gb3B0aW9ucy5mb250TWV0cmljcygpLnB0UGVyRW07XG4gICAgdmFyIGRTdHJ1dCA9IDMuNSAvIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5wdFBlckVtO1xuICAgIG51bWVybS5oZWlnaHQgPSBudW1lcm0uaGVpZ2h0IDwgaFN0cnV0ID8gaFN0cnV0IDogbnVtZXJtLmhlaWdodDtcbiAgICBudW1lcm0uZGVwdGggPSBudW1lcm0uZGVwdGggPCBkU3RydXQgPyBkU3RydXQgOiBudW1lcm0uZGVwdGg7XG4gIH1cblxuICBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShkc3R5bGUpO1xuICB2YXIgZGVub21tID0gYnVpbGRIVE1MX2J1aWxkR3JvdXAoZ3JvdXAuZGVub20sIG5ld09wdGlvbnMsIG9wdGlvbnMpO1xuICB2YXIgcnVsZTtcbiAgdmFyIHJ1bGVXaWR0aDtcbiAgdmFyIHJ1bGVTcGFjaW5nO1xuXG4gIGlmIChncm91cC5oYXNCYXJMaW5lKSB7XG4gICAgaWYgKGdyb3VwLmJhclNpemUpIHtcbiAgICAgIHJ1bGVXaWR0aCA9IHVuaXRzX2NhbGN1bGF0ZVNpemUoZ3JvdXAuYmFyU2l6ZSwgb3B0aW9ucyk7XG4gICAgICBydWxlID0gYnVpbGRDb21tb24ubWFrZUxpbmVTcGFuKFwiZnJhYy1saW5lXCIsIG9wdGlvbnMsIHJ1bGVXaWR0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJ1bGUgPSBidWlsZENvbW1vbi5tYWtlTGluZVNwYW4oXCJmcmFjLWxpbmVcIiwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcnVsZVdpZHRoID0gcnVsZS5oZWlnaHQ7XG4gICAgcnVsZVNwYWNpbmcgPSBydWxlLmhlaWdodDtcbiAgfSBlbHNlIHtcbiAgICBydWxlID0gbnVsbDtcbiAgICBydWxlV2lkdGggPSAwO1xuICAgIHJ1bGVTcGFjaW5nID0gb3B0aW9ucy5mb250TWV0cmljcygpLmRlZmF1bHRSdWxlVGhpY2tuZXNzO1xuICB9IC8vIFJ1bGUgMTViXG5cblxuICB2YXIgbnVtU2hpZnQ7XG4gIHZhciBjbGVhcmFuY2U7XG4gIHZhciBkZW5vbVNoaWZ0O1xuXG4gIGlmIChzdHlsZS5zaXplID09PSBzcmNfU3R5bGUuRElTUExBWS5zaXplIHx8IGdyb3VwLnNpemUgPT09IFwiZGlzcGxheVwiKSB7XG4gICAgbnVtU2hpZnQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkubnVtMTtcblxuICAgIGlmIChydWxlV2lkdGggPiAwKSB7XG4gICAgICBjbGVhcmFuY2UgPSAzICogcnVsZVNwYWNpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFyYW5jZSA9IDcgKiBydWxlU3BhY2luZztcbiAgICB9XG5cbiAgICBkZW5vbVNoaWZ0ID0gb3B0aW9ucy5mb250TWV0cmljcygpLmRlbm9tMTtcbiAgfSBlbHNlIHtcbiAgICBpZiAocnVsZVdpZHRoID4gMCkge1xuICAgICAgbnVtU2hpZnQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkubnVtMjtcbiAgICAgIGNsZWFyYW5jZSA9IHJ1bGVTcGFjaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBudW1TaGlmdCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5udW0zO1xuICAgICAgY2xlYXJhbmNlID0gMyAqIHJ1bGVTcGFjaW5nO1xuICAgIH1cblxuICAgIGRlbm9tU2hpZnQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVub20yO1xuICB9XG5cbiAgdmFyIGZyYWM7XG5cbiAgaWYgKCFydWxlKSB7XG4gICAgLy8gUnVsZSAxNWNcbiAgICB2YXIgY2FuZGlkYXRlQ2xlYXJhbmNlID0gbnVtU2hpZnQgLSBudW1lcm0uZGVwdGggLSAoZGVub21tLmhlaWdodCAtIGRlbm9tU2hpZnQpO1xuXG4gICAgaWYgKGNhbmRpZGF0ZUNsZWFyYW5jZSA8IGNsZWFyYW5jZSkge1xuICAgICAgbnVtU2hpZnQgKz0gMC41ICogKGNsZWFyYW5jZSAtIGNhbmRpZGF0ZUNsZWFyYW5jZSk7XG4gICAgICBkZW5vbVNoaWZ0ICs9IDAuNSAqIChjbGVhcmFuY2UgLSBjYW5kaWRhdGVDbGVhcmFuY2UpO1xuICAgIH1cblxuICAgIGZyYWMgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBkZW5vbW0sXG4gICAgICAgIHNoaWZ0OiBkZW5vbVNoaWZ0XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBudW1lcm0sXG4gICAgICAgIHNoaWZ0OiAtbnVtU2hpZnRcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gUnVsZSAxNWRcbiAgICB2YXIgYXhpc0hlaWdodCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O1xuXG4gICAgaWYgKG51bVNoaWZ0IC0gbnVtZXJtLmRlcHRoIC0gKGF4aXNIZWlnaHQgKyAwLjUgKiBydWxlV2lkdGgpIDwgY2xlYXJhbmNlKSB7XG4gICAgICBudW1TaGlmdCArPSBjbGVhcmFuY2UgLSAobnVtU2hpZnQgLSBudW1lcm0uZGVwdGggLSAoYXhpc0hlaWdodCArIDAuNSAqIHJ1bGVXaWR0aCkpO1xuICAgIH1cblxuICAgIGlmIChheGlzSGVpZ2h0IC0gMC41ICogcnVsZVdpZHRoIC0gKGRlbm9tbS5oZWlnaHQgLSBkZW5vbVNoaWZ0KSA8IGNsZWFyYW5jZSkge1xuICAgICAgZGVub21TaGlmdCArPSBjbGVhcmFuY2UgLSAoYXhpc0hlaWdodCAtIDAuNSAqIHJ1bGVXaWR0aCAtIChkZW5vbW0uaGVpZ2h0IC0gZGVub21TaGlmdCkpO1xuICAgIH1cblxuICAgIHZhciBtaWRTaGlmdCA9IC0oYXhpc0hlaWdodCAtIDAuNSAqIHJ1bGVXaWR0aCk7XG4gICAgZnJhYyA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGRlbm9tbSxcbiAgICAgICAgc2hpZnQ6IGRlbm9tU2hpZnRcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHJ1bGUsXG4gICAgICAgIHNoaWZ0OiBtaWRTaGlmdFxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogbnVtZXJtLFxuICAgICAgICBzaGlmdDogLW51bVNoaWZ0XG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICB9IC8vIFNpbmNlIHdlIG1hbnVhbGx5IGNoYW5nZSB0aGUgc3R5bGUgc29tZXRpbWVzICh3aXRoIFxcZGZyYWMgb3IgXFx0ZnJhYyksXG4gIC8vIGFjY291bnQgZm9yIHRoZSBwb3NzaWJsZSBzaXplIGNoYW5nZSBoZXJlLlxuXG5cbiAgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoc3R5bGUpO1xuICBmcmFjLmhlaWdodCAqPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgZnJhYy5kZXB0aCAqPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjsgLy8gUnVsZSAxNWVcblxuICB2YXIgZGVsaW1TaXplO1xuXG4gIGlmIChzdHlsZS5zaXplID09PSBzcmNfU3R5bGUuRElTUExBWS5zaXplKSB7XG4gICAgZGVsaW1TaXplID0gb3B0aW9ucy5mb250TWV0cmljcygpLmRlbGltMTtcbiAgfSBlbHNlIHtcbiAgICBkZWxpbVNpemUgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVsaW0yO1xuICB9XG5cbiAgdmFyIGxlZnREZWxpbTtcbiAgdmFyIHJpZ2h0RGVsaW07XG5cbiAgaWYgKGdyb3VwLmxlZnREZWxpbSA9PSBudWxsKSB7XG4gICAgbGVmdERlbGltID0gbWFrZU51bGxEZWxpbWl0ZXIob3B0aW9ucywgW1wibW9wZW5cIl0pO1xuICB9IGVsc2Uge1xuICAgIGxlZnREZWxpbSA9IGRlbGltaXRlci5jdXN0b21TaXplZERlbGltKGdyb3VwLmxlZnREZWxpbSwgZGVsaW1TaXplLCB0cnVlLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlKSwgZ3JvdXAubW9kZSwgW1wibW9wZW5cIl0pO1xuICB9XG5cbiAgaWYgKGdyb3VwLmNvbnRpbnVlZCkge1xuICAgIHJpZ2h0RGVsaW0gPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXSk7IC8vIHplcm8gd2lkdGggZm9yIFxcY2ZyYWNcbiAgfSBlbHNlIGlmIChncm91cC5yaWdodERlbGltID09IG51bGwpIHtcbiAgICByaWdodERlbGltID0gbWFrZU51bGxEZWxpbWl0ZXIob3B0aW9ucywgW1wibWNsb3NlXCJdKTtcbiAgfSBlbHNlIHtcbiAgICByaWdodERlbGltID0gZGVsaW1pdGVyLmN1c3RvbVNpemVkRGVsaW0oZ3JvdXAucmlnaHREZWxpbSwgZGVsaW1TaXplLCB0cnVlLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlKSwgZ3JvdXAubW9kZSwgW1wibWNsb3NlXCJdKTtcbiAgfVxuXG4gIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCJdLmNvbmNhdChuZXdPcHRpb25zLnNpemluZ0NsYXNzZXMob3B0aW9ucykpLCBbbGVmdERlbGltLCBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtZnJhY1wiXSwgW2ZyYWNdKSwgcmlnaHREZWxpbV0sIG9wdGlvbnMpO1xufTtcblxudmFyIGdlbmZyYWNfbWF0aG1sQnVpbGRlciA9IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1mcmFjXCIsIFtidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLm51bWVyLCBvcHRpb25zKSwgYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5kZW5vbSwgb3B0aW9ucyldKTtcblxuICBpZiAoIWdyb3VwLmhhc0JhckxpbmUpIHtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImxpbmV0aGlja25lc3NcIiwgXCIwcHhcIik7XG4gIH0gZWxzZSBpZiAoZ3JvdXAuYmFyU2l6ZSkge1xuICAgIHZhciBydWxlV2lkdGggPSB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLmJhclNpemUsIG9wdGlvbnMpO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibGluZXRoaWNrbmVzc1wiLCBydWxlV2lkdGggKyBcImVtXCIpO1xuICB9XG5cbiAgdmFyIHN0eWxlID0gZ2VuZnJhY19hZGp1c3RTdHlsZShncm91cC5zaXplLCBvcHRpb25zLnN0eWxlKTtcblxuICBpZiAoc3R5bGUuc2l6ZSAhPT0gb3B0aW9ucy5zdHlsZS5zaXplKSB7XG4gICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXN0eWxlXCIsIFtub2RlXSk7XG4gICAgdmFyIGlzRGlzcGxheSA9IHN0eWxlLnNpemUgPT09IHNyY19TdHlsZS5ESVNQTEFZLnNpemUgPyBcInRydWVcIiA6IFwiZmFsc2VcIjtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImRpc3BsYXlzdHlsZVwiLCBpc0Rpc3BsYXkpO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic2NyaXB0bGV2ZWxcIiwgXCIwXCIpO1xuICB9XG5cbiAgaWYgKGdyb3VwLmxlZnREZWxpbSAhPSBudWxsIHx8IGdyb3VwLnJpZ2h0RGVsaW0gIT0gbnVsbCkge1xuICAgIHZhciB3aXRoRGVsaW1zID0gW107XG5cbiAgICBpZiAoZ3JvdXAubGVmdERlbGltICE9IG51bGwpIHtcbiAgICAgIHZhciBsZWZ0T3AgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFtuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZShncm91cC5sZWZ0RGVsaW0ucmVwbGFjZShcIlxcXFxcIiwgXCJcIikpXSk7XG4gICAgICBsZWZ0T3Auc2V0QXR0cmlidXRlKFwiZmVuY2VcIiwgXCJ0cnVlXCIpO1xuICAgICAgd2l0aERlbGltcy5wdXNoKGxlZnRPcCk7XG4gICAgfVxuXG4gICAgd2l0aERlbGltcy5wdXNoKG5vZGUpO1xuXG4gICAgaWYgKGdyb3VwLnJpZ2h0RGVsaW0gIT0gbnVsbCkge1xuICAgICAgdmFyIHJpZ2h0T3AgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFtuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZShncm91cC5yaWdodERlbGltLnJlcGxhY2UoXCJcXFxcXCIsIFwiXCIpKV0pO1xuICAgICAgcmlnaHRPcC5zZXRBdHRyaWJ1dGUoXCJmZW5jZVwiLCBcInRydWVcIik7XG4gICAgICB3aXRoRGVsaW1zLnB1c2gocmlnaHRPcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1aWxkTWF0aE1MX21ha2VSb3cod2l0aERlbGltcyk7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJnZW5mcmFjXCIsXG4gIG5hbWVzOiBbXCJcXFxcY2ZyYWNcIiwgXCJcXFxcZGZyYWNcIiwgXCJcXFxcZnJhY1wiLCBcIlxcXFx0ZnJhY1wiLCBcIlxcXFxkYmlub21cIiwgXCJcXFxcYmlub21cIiwgXCJcXFxcdGJpbm9tXCIsIFwiXFxcXFxcXFxhdG9wZnJhY1wiLCAvLyBjYW7igJl0IGJlIGVudGVyZWQgZGlyZWN0bHlcbiAgXCJcXFxcXFxcXGJyYWNlZnJhY1wiLCBcIlxcXFxcXFxcYnJhY2tmcmFjXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgZ3JlZWRpbmVzczogMlxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZi5wYXJzZXIsXG4gICAgICAgIGZ1bmNOYW1lID0gX3JlZi5mdW5jTmFtZTtcbiAgICB2YXIgbnVtZXIgPSBhcmdzWzBdO1xuICAgIHZhciBkZW5vbSA9IGFyZ3NbMV07XG4gICAgdmFyIGhhc0JhckxpbmU7XG4gICAgdmFyIGxlZnREZWxpbSA9IG51bGw7XG4gICAgdmFyIHJpZ2h0RGVsaW0gPSBudWxsO1xuICAgIHZhciBzaXplID0gXCJhdXRvXCI7XG5cbiAgICBzd2l0Y2ggKGZ1bmNOYW1lKSB7XG4gICAgICBjYXNlIFwiXFxcXGNmcmFjXCI6XG4gICAgICBjYXNlIFwiXFxcXGRmcmFjXCI6XG4gICAgICBjYXNlIFwiXFxcXGZyYWNcIjpcbiAgICAgIGNhc2UgXCJcXFxcdGZyYWNcIjpcbiAgICAgICAgaGFzQmFyTGluZSA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiXFxcXFxcXFxhdG9wZnJhY1wiOlxuICAgICAgICBoYXNCYXJMaW5lID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiXFxcXGRiaW5vbVwiOlxuICAgICAgY2FzZSBcIlxcXFxiaW5vbVwiOlxuICAgICAgY2FzZSBcIlxcXFx0Ymlub21cIjpcbiAgICAgICAgaGFzQmFyTGluZSA9IGZhbHNlO1xuICAgICAgICBsZWZ0RGVsaW0gPSBcIihcIjtcbiAgICAgICAgcmlnaHREZWxpbSA9IFwiKVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxcXFxcYnJhY2VmcmFjXCI6XG4gICAgICAgIGhhc0JhckxpbmUgPSBmYWxzZTtcbiAgICAgICAgbGVmdERlbGltID0gXCJcXFxce1wiO1xuICAgICAgICByaWdodERlbGltID0gXCJcXFxcfVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxcXFxcYnJhY2tmcmFjXCI6XG4gICAgICAgIGhhc0JhckxpbmUgPSBmYWxzZTtcbiAgICAgICAgbGVmdERlbGltID0gXCJbXCI7XG4gICAgICAgIHJpZ2h0RGVsaW0gPSBcIl1cIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVucmVjb2duaXplZCBnZW5mcmFjIGNvbW1hbmRcIik7XG4gICAgfVxuXG4gICAgc3dpdGNoIChmdW5jTmFtZSkge1xuICAgICAgY2FzZSBcIlxcXFxjZnJhY1wiOlxuICAgICAgY2FzZSBcIlxcXFxkZnJhY1wiOlxuICAgICAgY2FzZSBcIlxcXFxkYmlub21cIjpcbiAgICAgICAgc2l6ZSA9IFwiZGlzcGxheVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFx0ZnJhY1wiOlxuICAgICAgY2FzZSBcIlxcXFx0Ymlub21cIjpcbiAgICAgICAgc2l6ZSA9IFwidGV4dFwiO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJnZW5mcmFjXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGNvbnRpbnVlZDogZnVuY05hbWUgPT09IFwiXFxcXGNmcmFjXCIsXG4gICAgICBudW1lcjogbnVtZXIsXG4gICAgICBkZW5vbTogZGVub20sXG4gICAgICBoYXNCYXJMaW5lOiBoYXNCYXJMaW5lLFxuICAgICAgbGVmdERlbGltOiBsZWZ0RGVsaW0sXG4gICAgICByaWdodERlbGltOiByaWdodERlbGltLFxuICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgIGJhclNpemU6IG51bGxcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZ2VuZnJhY19odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogZ2VuZnJhY19tYXRobWxCdWlsZGVyXG59KTsgLy8gSW5maXggZ2VuZXJhbGl6ZWQgZnJhY3Rpb25zIC0tIHRoZXNlIGFyZSBub3QgcmVuZGVyZWQgZGlyZWN0bHksIGJ1dCByZXBsYWNlZFxuLy8gaW1tZWRpYXRlbHkgYnkgb25lIG9mIHRoZSB2YXJpYW50cyBhYm92ZS5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImluZml4XCIsXG4gIG5hbWVzOiBbXCJcXFxcb3ZlclwiLCBcIlxcXFxjaG9vc2VcIiwgXCJcXFxcYXRvcFwiLCBcIlxcXFxicmFjZVwiLCBcIlxcXFxicmFja1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIGluZml4OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZjIpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZjIucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWYyLmZ1bmNOYW1lLFxuICAgICAgICB0b2tlbiA9IF9yZWYyLnRva2VuO1xuICAgIHZhciByZXBsYWNlV2l0aDtcblxuICAgIHN3aXRjaCAoZnVuY05hbWUpIHtcbiAgICAgIGNhc2UgXCJcXFxcb3ZlclwiOlxuICAgICAgICByZXBsYWNlV2l0aCA9IFwiXFxcXGZyYWNcIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcY2hvb3NlXCI6XG4gICAgICAgIHJlcGxhY2VXaXRoID0gXCJcXFxcYmlub21cIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcYXRvcFwiOlxuICAgICAgICByZXBsYWNlV2l0aCA9IFwiXFxcXFxcXFxhdG9wZnJhY1wiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxicmFjZVwiOlxuICAgICAgICByZXBsYWNlV2l0aCA9IFwiXFxcXFxcXFxicmFjZWZyYWNcIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcYnJhY2tcIjpcbiAgICAgICAgcmVwbGFjZVdpdGggPSBcIlxcXFxcXFxcYnJhY2tmcmFjXCI7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgaW5maXggZ2VuZnJhYyBjb21tYW5kXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImluZml4XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIHJlcGxhY2VXaXRoOiByZXBsYWNlV2l0aCxcbiAgICAgIHRva2VuOiB0b2tlblxuICAgIH07XG4gIH1cbn0pO1xudmFyIHN0eWxBcnJheSA9IFtcImRpc3BsYXlcIiwgXCJ0ZXh0XCIsIFwic2NyaXB0XCIsIFwic2NyaXB0c2NyaXB0XCJdO1xuXG52YXIgZGVsaW1Gcm9tVmFsdWUgPSBmdW5jdGlvbiBkZWxpbUZyb21WYWx1ZShkZWxpbVN0cmluZykge1xuICB2YXIgZGVsaW0gPSBudWxsO1xuXG4gIGlmIChkZWxpbVN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgZGVsaW0gPSBkZWxpbVN0cmluZztcbiAgICBkZWxpbSA9IGRlbGltID09PSBcIi5cIiA/IG51bGwgOiBkZWxpbTtcbiAgfVxuXG4gIHJldHVybiBkZWxpbTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJnZW5mcmFjXCIsXG4gIG5hbWVzOiBbXCJcXFxcZ2VuZnJhY1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiA2LFxuICAgIGdyZWVkaW5lc3M6IDYsXG4gICAgYXJnVHlwZXM6IFtcIm1hdGhcIiwgXCJtYXRoXCIsIFwic2l6ZVwiLCBcInRleHRcIiwgXCJtYXRoXCIsIFwibWF0aFwiXVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYzLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYzLnBhcnNlcjtcbiAgICB2YXIgbnVtZXIgPSBhcmdzWzRdO1xuICAgIHZhciBkZW5vbSA9IGFyZ3NbNV07IC8vIExvb2sgaW50byB0aGUgcGFyc2Ugbm9kZXMgdG8gZ2V0IHRoZSBkZXNpcmVkIGRlbGltaXRlcnMuXG5cbiAgICB2YXIgbGVmdE5vZGUgPSBjaGVja05vZGVUeXBlKGFyZ3NbMF0sIFwiYXRvbVwiKTtcblxuICAgIGlmIChsZWZ0Tm9kZSkge1xuICAgICAgbGVmdE5vZGUgPSBhc3NlcnRBdG9tRmFtaWx5KGFyZ3NbMF0sIFwib3BlblwiKTtcbiAgICB9XG5cbiAgICB2YXIgbGVmdERlbGltID0gbGVmdE5vZGUgPyBkZWxpbUZyb21WYWx1ZShsZWZ0Tm9kZS50ZXh0KSA6IG51bGw7XG4gICAgdmFyIHJpZ2h0Tm9kZSA9IGNoZWNrTm9kZVR5cGUoYXJnc1sxXSwgXCJhdG9tXCIpO1xuXG4gICAgaWYgKHJpZ2h0Tm9kZSkge1xuICAgICAgcmlnaHROb2RlID0gYXNzZXJ0QXRvbUZhbWlseShhcmdzWzFdLCBcImNsb3NlXCIpO1xuICAgIH1cblxuICAgIHZhciByaWdodERlbGltID0gcmlnaHROb2RlID8gZGVsaW1Gcm9tVmFsdWUocmlnaHROb2RlLnRleHQpIDogbnVsbDtcbiAgICB2YXIgYmFyTm9kZSA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMl0sIFwic2l6ZVwiKTtcbiAgICB2YXIgaGFzQmFyTGluZTtcbiAgICB2YXIgYmFyU2l6ZSA9IG51bGw7XG5cbiAgICBpZiAoYmFyTm9kZS5pc0JsYW5rKSB7XG4gICAgICAvLyBcXGdlbmZyYWMgYWN0cyBkaWZmZXJlbnRseSB0aGFuIFxcYWJvdmUuXG4gICAgICAvLyBcXGdlbmZyYWMgdHJlYXRzIGFuIGVtcHR5IHNpemUgZ3JvdXAgYXMgYSBzaWduYWwgdG8gdXNlIGFcbiAgICAgIC8vIHN0YW5kYXJkIGJhciBzaXplLiBcXGFib3ZlIHdvdWxkIHNlZSBzaXplID0gMCBhbmQgb21pdCB0aGUgYmFyLlxuICAgICAgaGFzQmFyTGluZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhclNpemUgPSBiYXJOb2RlLnZhbHVlO1xuICAgICAgaGFzQmFyTGluZSA9IGJhclNpemUubnVtYmVyID4gMDtcbiAgICB9IC8vIEZpbmQgb3V0IGlmIHdlIHdhbnQgZGlzcGxheXN0eWxlLCB0ZXh0c3R5bGUsIGV0Yy5cblxuXG4gICAgdmFyIHNpemUgPSBcImF1dG9cIjtcbiAgICB2YXIgc3R5bCA9IGNoZWNrTm9kZVR5cGUoYXJnc1szXSwgXCJvcmRncm91cFwiKTtcblxuICAgIGlmIChzdHlsKSB7XG4gICAgICBpZiAoc3R5bC5ib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIHRleHRPcmQgPSBhc3NlcnROb2RlVHlwZShzdHlsLmJvZHlbMF0sIFwidGV4dG9yZFwiKTtcbiAgICAgICAgc2l6ZSA9IHN0eWxBcnJheVtOdW1iZXIodGV4dE9yZC50ZXh0KV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWwgPSBhc3NlcnROb2RlVHlwZShhcmdzWzNdLCBcInRleHRvcmRcIik7XG4gICAgICBzaXplID0gc3R5bEFycmF5W051bWJlcihzdHlsLnRleHQpXTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJnZW5mcmFjXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG51bWVyOiBudW1lcixcbiAgICAgIGRlbm9tOiBkZW5vbSxcbiAgICAgIGNvbnRpbnVlZDogZmFsc2UsXG4gICAgICBoYXNCYXJMaW5lOiBoYXNCYXJMaW5lLFxuICAgICAgYmFyU2l6ZTogYmFyU2l6ZSxcbiAgICAgIGxlZnREZWxpbTogbGVmdERlbGltLFxuICAgICAgcmlnaHREZWxpbTogcmlnaHREZWxpbSxcbiAgICAgIHNpemU6IHNpemVcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZ2VuZnJhY19odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogZ2VuZnJhY19tYXRobWxCdWlsZGVyXG59KTsgLy8gXFxhYm92ZSBpcyBhbiBpbmZpeCBmcmFjdGlvbiB0aGF0IGFsc28gZGVmaW5lcyBhIGZyYWN0aW9uIGJhciBzaXplLlxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaW5maXhcIixcbiAgbmFtZXM6IFtcIlxcXFxhYm92ZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJzaXplXCJdLFxuICAgIGluZml4OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZjQsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZjQucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWY0LmZ1bmNOYW1lLFxuICAgICAgICB0b2tlbiA9IF9yZWY0LnRva2VuO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImluZml4XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIHJlcGxhY2VXaXRoOiBcIlxcXFxcXFxcYWJvdmVmcmFjXCIsXG4gICAgICBzaXplOiBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcInNpemVcIikudmFsdWUsXG4gICAgICB0b2tlbjogdG9rZW5cbiAgICB9O1xuICB9XG59KTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJnZW5mcmFjXCIsXG4gIG5hbWVzOiBbXCJcXFxcXFxcXGFib3ZlZnJhY1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAzLFxuICAgIGFyZ1R5cGVzOiBbXCJtYXRoXCIsIFwic2l6ZVwiLCBcIm1hdGhcIl1cbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmNSwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmNS5wYXJzZXIsXG4gICAgICAgIGZ1bmNOYW1lID0gX3JlZjUuZnVuY05hbWU7XG4gICAgdmFyIG51bWVyID0gYXJnc1swXTtcbiAgICB2YXIgYmFyU2l6ZSA9IGFzc2VydChhc3NlcnROb2RlVHlwZShhcmdzWzFdLCBcImluZml4XCIpLnNpemUpO1xuICAgIHZhciBkZW5vbSA9IGFyZ3NbMl07XG4gICAgdmFyIGhhc0JhckxpbmUgPSBiYXJTaXplLm51bWJlciA+IDA7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZ2VuZnJhY1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBudW1lcjogbnVtZXIsXG4gICAgICBkZW5vbTogZGVub20sXG4gICAgICBjb250aW51ZWQ6IGZhbHNlLFxuICAgICAgaGFzQmFyTGluZTogaGFzQmFyTGluZSxcbiAgICAgIGJhclNpemU6IGJhclNpemUsXG4gICAgICBsZWZ0RGVsaW06IG51bGwsXG4gICAgICByaWdodERlbGltOiBudWxsLFxuICAgICAgc2l6ZTogXCJhdXRvXCJcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZ2VuZnJhY19odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogZ2VuZnJhY19tYXRobWxCdWlsZGVyXG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9ob3JpekJyYWNlLmpzXG5cblxuXG5cblxuXG5cblxuLy8gTk9URTogVW5saWtlIG1vc3QgYGh0bWxCdWlsZGVyYHMsIHRoaXMgb25lIGhhbmRsZXMgbm90IG9ubHkgXCJob3JpekJyYWNlXCIsIGJ1dFxudmFyIGhvcml6QnJhY2VfaHRtbEJ1aWxkZXIgPSBmdW5jdGlvbiBodG1sQnVpbGRlcihncnAsIG9wdGlvbnMpIHtcbiAgdmFyIHN0eWxlID0gb3B0aW9ucy5zdHlsZTsgLy8gUHVsbCBvdXQgdGhlIGBQYXJzZU5vZGU8XCJob3JpekJyYWNlXCI+YCBpZiBgZ3JwYCBpcyBhIFwic3Vwc3ViXCIgbm9kZS5cblxuICB2YXIgc3VwU3ViR3JvdXA7XG4gIHZhciBncm91cDtcbiAgdmFyIHN1cFN1YiA9IGNoZWNrTm9kZVR5cGUoZ3JwLCBcInN1cHN1YlwiKTtcblxuICBpZiAoc3VwU3ViKSB7XG4gICAgLy8gUmVmOiBMYVRlWCBzb3VyY2UyZTogfX19fVxcbGltaXRzfVxuICAgIC8vIGkuZS4gTGFUZVggdHJlYXRzIHRoZSBicmFjZSBzaW1pbGFyIHRvIGFuIG9wIGFuZCBwYXNzZXMgaXRcbiAgICAvLyB3aXRoIFxcbGltaXRzLCBzbyB3ZSBuZWVkIHRvIGFzc2lnbiBzdXBzdWIgc3R5bGUuXG4gICAgc3VwU3ViR3JvdXAgPSBzdXBTdWIuc3VwID8gYnVpbGRIVE1MX2J1aWxkR3JvdXAoc3VwU3ViLnN1cCwgb3B0aW9ucy5oYXZpbmdTdHlsZShzdHlsZS5zdXAoKSksIG9wdGlvbnMpIDogYnVpbGRIVE1MX2J1aWxkR3JvdXAoc3VwU3ViLnN1Yiwgb3B0aW9ucy5oYXZpbmdTdHlsZShzdHlsZS5zdWIoKSksIG9wdGlvbnMpO1xuICAgIGdyb3VwID0gYXNzZXJ0Tm9kZVR5cGUoc3VwU3ViLmJhc2UsIFwiaG9yaXpCcmFjZVwiKTtcbiAgfSBlbHNlIHtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKGdycCwgXCJob3JpekJyYWNlXCIpO1xuICB9IC8vIEJ1aWxkIHRoZSBiYXNlIGdyb3VwXG5cblxuICB2YXIgYm9keSA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJhc2UsIG9wdGlvbnMuaGF2aW5nQmFzZVN0eWxlKHNyY19TdHlsZS5ESVNQTEFZKSk7IC8vIENyZWF0ZSB0aGUgc3RyZXRjaHkgZWxlbWVudFxuXG4gIHZhciBicmFjZUJvZHkgPSBzdHJldGNoeS5zdmdTcGFuKGdyb3VwLCBvcHRpb25zKTsgLy8gR2VuZXJhdGUgdGhlIHZsaXN0LCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBrZXJucyAgICAgICAg4pSP4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSTXG4gIC8vIFRoaXMgZmlyc3Qgdmxpc3QgY29udGFpbnMgdGhlIGNvbnRlbnQgYW5kIHRoZSBicmFjZTogICBlcXVhdGlvblxuXG4gIHZhciB2bGlzdDtcblxuICBpZiAoZ3JvdXAuaXNPdmVyKSB7XG4gICAgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImZpcnN0QmFzZWxpbmVcIixcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogYm9keVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogMC4xXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBicmFjZUJvZHlcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7IC8vICRGbG93Rml4TWU6IFJlcGxhY2UgdGhpcyB3aXRoIHBhc3NpbmcgXCJzdmctYWxpZ25cIiBpbnRvIG1ha2VWTGlzdC5cblxuICAgIHZsaXN0LmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzFdLmNsYXNzZXMucHVzaChcInN2Zy1hbGlnblwiKTtcbiAgfSBlbHNlIHtcbiAgICB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IGJvZHkuZGVwdGggKyAwLjEgKyBicmFjZUJvZHkuaGVpZ2h0LFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBicmFjZUJvZHlcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IDAuMVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogYm9keVxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTsgLy8gJEZsb3dGaXhNZTogUmVwbGFjZSB0aGlzIHdpdGggcGFzc2luZyBcInN2Zy1hbGlnblwiIGludG8gbWFrZVZMaXN0LlxuXG4gICAgdmxpc3QuY2hpbGRyZW5bMF0uY2hpbGRyZW5bMF0uY2hpbGRyZW5bMF0uY2xhc3Nlcy5wdXNoKFwic3ZnLWFsaWduXCIpO1xuICB9XG5cbiAgaWYgKHN1cFN1Ykdyb3VwKSB7XG4gICAgLy8gVG8gd3JpdGUgdGhlIHN1cHN1Yiwgd3JhcCB0aGUgZmlyc3Qgdmxpc3QgaW4gYW5vdGhlciB2bGlzdDpcbiAgICAvLyBUaGV5IGNhbid0IGFsbCBnbyBpbiB0aGUgc2FtZSB2bGlzdCwgYmVjYXVzZSB0aGUgbm90ZSBtaWdodCBiZVxuICAgIC8vIHdpZGVyIHRoYW4gdGhlIGVxdWF0aW9uLiBXZSB3YW50IHRoZSBlcXVhdGlvbiB0byBjb250cm9sIHRoZVxuICAgIC8vIGJyYWNlIHdpZHRoLlxuICAgIC8vICAgICAgbm90ZSAgICAgICAgICBsb25nIG5vdGUgICAgICAgICAgIGxvbmcgbm90ZVxuICAgIC8vICAg4pSP4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSTICAgb3IgICAg4pSP4pSB4pSB4pSB4pSTICAgICBub3QgICAg4pSP4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSTXG4gICAgLy8gICAgZXF1YXRpb24gICAgICAgICAgIGVxbiAgICAgICAgICAgICAgICAgZXFuXG4gICAgdmFyIHZTcGFuID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBncm91cC5pc092ZXIgPyBcIm1vdmVyXCIgOiBcIm11bmRlclwiXSwgW3ZsaXN0XSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoZ3JvdXAuaXNPdmVyKSB7XG4gICAgICB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJmaXJzdEJhc2VsaW5lXCIsXG4gICAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IHZTcGFuXG4gICAgICAgIH0sIHtcbiAgICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgICBzaXplOiAwLjJcbiAgICAgICAgfSwge1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IHN1cFN1Ykdyb3VwXG4gICAgICAgIH1dXG4gICAgICB9LCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICAgIHBvc2l0aW9uRGF0YTogdlNwYW4uZGVwdGggKyAwLjIgKyBzdXBTdWJHcm91cC5oZWlnaHQgKyBzdXBTdWJHcm91cC5kZXB0aCxcbiAgICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogc3VwU3ViR3JvdXBcbiAgICAgICAgfSwge1xuICAgICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICAgIHNpemU6IDAuMlxuICAgICAgICB9LCB7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogdlNwYW5cbiAgICAgICAgfV1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCIsIGdyb3VwLmlzT3ZlciA/IFwibW92ZXJcIiA6IFwibXVuZGVyXCJdLCBbdmxpc3RdLCBvcHRpb25zKTtcbn07XG5cbnZhciBob3JpekJyYWNlX21hdGhtbEJ1aWxkZXIgPSBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gIHZhciBhY2NlbnROb2RlID0gc3RyZXRjaHkubWF0aE1Mbm9kZShncm91cC5sYWJlbCk7XG4gIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShncm91cC5pc092ZXIgPyBcIm1vdmVyXCIgOiBcIm11bmRlclwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5iYXNlLCBvcHRpb25zKSwgYWNjZW50Tm9kZV0pO1xufTsgLy8gSG9yaXpvbnRhbCBzdHJldGNoeSBicmFjZXNcblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaG9yaXpCcmFjZVwiLFxuICBuYW1lczogW1wiXFxcXG92ZXJicmFjZVwiLCBcIlxcXFx1bmRlcmJyYWNlXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWYuZnVuY05hbWU7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiaG9yaXpCcmFjZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBpc092ZXI6IC9eXFxcXG92ZXIvLnRlc3QoZnVuY05hbWUpLFxuICAgICAgYmFzZTogYXJnc1swXVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBob3JpekJyYWNlX2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBob3JpekJyYWNlX21hdGhtbEJ1aWxkZXJcbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2hyZWYuanNcblxuXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJocmVmXCIsXG4gIG5hbWVzOiBbXCJcXFxcaHJlZlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyLFxuICAgIGFyZ1R5cGVzOiBbXCJ1cmxcIiwgXCJvcmlnaW5hbFwiXSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMV07XG4gICAgdmFyIGhyZWYgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcInVybFwiKS51cmw7XG5cbiAgICBpZiAoIXBhcnNlci5zZXR0aW5ncy5pc1RydXN0ZWQoe1xuICAgICAgY29tbWFuZDogXCJcXFxcaHJlZlwiLFxuICAgICAgdXJsOiBocmVmXG4gICAgfSkpIHtcbiAgICAgIHJldHVybiBwYXJzZXIuZm9ybWF0VW5zdXBwb3J0ZWRDbWQoXCJcXFxcaHJlZlwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJocmVmXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICBib2R5OiBkZWZpbmVGdW5jdGlvbl9vcmRhcmd1bWVudChib2R5KVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBlbGVtZW50cyA9IGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucywgZmFsc2UpO1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlQW5jaG9yKGdyb3VwLmhyZWYsIFtdLCBlbGVtZW50cywgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbWF0aCA9IGJ1aWxkRXhwcmVzc2lvblJvdyhncm91cC5ib2R5LCBvcHRpb25zKTtcblxuICAgIGlmICghKG1hdGggaW5zdGFuY2VvZiBtYXRoTUxUcmVlX01hdGhOb2RlKSkge1xuICAgICAgbWF0aCA9IG5ldyBtYXRoTUxUcmVlX01hdGhOb2RlKFwibXJvd1wiLCBbbWF0aF0pO1xuICAgIH1cblxuICAgIG1hdGguc2V0QXR0cmlidXRlKFwiaHJlZlwiLCBncm91cC5ocmVmKTtcbiAgICByZXR1cm4gbWF0aDtcbiAgfVxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaHJlZlwiLFxuICBuYW1lczogW1wiXFxcXHVybFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJ1cmxcIl0sXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYyLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYyLnBhcnNlcjtcbiAgICB2YXIgaHJlZiA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwidXJsXCIpLnVybDtcblxuICAgIGlmICghcGFyc2VyLnNldHRpbmdzLmlzVHJ1c3RlZCh7XG4gICAgICBjb21tYW5kOiBcIlxcXFx1cmxcIixcbiAgICAgIHVybDogaHJlZlxuICAgIH0pKSB7XG4gICAgICByZXR1cm4gcGFyc2VyLmZvcm1hdFVuc3VwcG9ydGVkQ21kKFwiXFxcXHVybFwiKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhcnMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaHJlZi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGMgPSBocmVmW2ldO1xuXG4gICAgICBpZiAoYyA9PT0gXCJ+XCIpIHtcbiAgICAgICAgYyA9IFwiXFxcXHRleHRhc2NpaXRpbGRlXCI7XG4gICAgICB9XG5cbiAgICAgIGNoYXJzLnB1c2goe1xuICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgbW9kZTogXCJ0ZXh0XCIsXG4gICAgICAgIHRleHQ6IGNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBib2R5ID0ge1xuICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGZvbnQ6IFwiXFxcXHRleHR0dFwiLFxuICAgICAgYm9keTogY2hhcnNcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImhyZWZcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgaHJlZjogaHJlZixcbiAgICAgIGJvZHk6IGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGJvZHkpXG4gICAgfTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvaHRtbG1hdGhtbC5qc1xuXG5cblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaHRtbG1hdGhtbFwiLFxuICBuYW1lczogW1wiXFxcXGh0bWxAbWF0aG1sXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZi5wYXJzZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiaHRtbG1hdGhtbFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBodG1sOiBkZWZpbmVGdW5jdGlvbl9vcmRhcmd1bWVudChhcmdzWzBdKSxcbiAgICAgIG1hdGhtbDogZGVmaW5lRnVuY3Rpb25fb3JkYXJndW1lbnQoYXJnc1sxXSlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBidWlsZEhUTUxfYnVpbGRFeHByZXNzaW9uKGdyb3VwLmh0bWwsIG9wdGlvbnMsIGZhbHNlKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUZyYWdtZW50KGVsZW1lbnRzKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHJldHVybiBidWlsZEV4cHJlc3Npb25Sb3coZ3JvdXAubWF0aG1sLCBvcHRpb25zKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvaW5jbHVkZWdyYXBoaWNzLmpzXG5cblxuXG5cblxuXG5cbnZhciBpbmNsdWRlZ3JhcGhpY3Nfc2l6ZURhdGEgPSBmdW5jdGlvbiBzaXplRGF0YShzdHIpIHtcbiAgaWYgKC9eWy0rXT8gKihcXGQrKFxcLlxcZCopP3xcXC5cXGQrKSQvLnRlc3Qoc3RyKSkge1xuICAgIC8vIHN0ciBpcyBhIG51bWJlciB3aXRoIG5vIHVuaXQgc3BlY2lmaWVkLlxuICAgIC8vIGRlZmF1bHQgdW5pdCBpcyBicCwgcGVyIGdyYXBoaXggcGFja2FnZS5cbiAgICByZXR1cm4ge1xuICAgICAgbnVtYmVyOiArc3RyLFxuICAgICAgdW5pdDogXCJicFwiXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbWF0Y2ggPSAvKFstK10/KSAqKFxcZCsoPzpcXC5cXGQqKT98XFwuXFxkKykgKihbYS16XXsyfSkvLmV4ZWMoc3RyKTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgc2l6ZTogJ1wiICsgc3RyICsgXCInIGluIFxcXFxpbmNsdWRlZ3JhcGhpY3NcIik7XG4gICAgfVxuXG4gICAgdmFyIGRhdGEgPSB7XG4gICAgICBudW1iZXI6ICsobWF0Y2hbMV0gKyBtYXRjaFsyXSksXG4gICAgICAvLyBzaWduICsgbWFnbml0dWRlLCBjYXN0IHRvIG51bWJlclxuICAgICAgdW5pdDogbWF0Y2hbM11cbiAgICB9O1xuXG4gICAgaWYgKCF2YWxpZFVuaXQoZGF0YSkpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgdW5pdDogJ1wiICsgZGF0YS51bml0ICsgXCInIGluIFxcXFxpbmNsdWRlZ3JhcGhpY3MuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG59O1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaW5jbHVkZWdyYXBoaWNzXCIsXG4gIG5hbWVzOiBbXCJcXFxcaW5jbHVkZWdyYXBoaWNzXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgbnVtT3B0aW9uYWxBcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJyYXdcIiwgXCJ1cmxcIl0sXG4gICAgYWxsb3dlZEluVGV4dDogZmFsc2VcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzLCBvcHRBcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyO1xuICAgIHZhciB3aWR0aCA9IHtcbiAgICAgIG51bWJlcjogMCxcbiAgICAgIHVuaXQ6IFwiZW1cIlxuICAgIH07XG4gICAgdmFyIGhlaWdodCA9IHtcbiAgICAgIG51bWJlcjogMC45LFxuICAgICAgdW5pdDogXCJlbVwiXG4gICAgfTsgLy8gc29ydGEgY2hhcmFjdGVyIHNpemVkLlxuXG4gICAgdmFyIHRvdGFsaGVpZ2h0ID0ge1xuICAgICAgbnVtYmVyOiAwLFxuICAgICAgdW5pdDogXCJlbVwiXG4gICAgfTtcbiAgICB2YXIgYWx0ID0gXCJcIjtcblxuICAgIGlmIChvcHRBcmdzWzBdKSB7XG4gICAgICB2YXIgYXR0cmlidXRlU3RyID0gYXNzZXJ0Tm9kZVR5cGUob3B0QXJnc1swXSwgXCJyYXdcIikuc3RyaW5nOyAvLyBQYXJzZXIuanMgZG9lcyBub3QgcGFyc2Uga2V5L3ZhbHVlIHBhaXJzLiBXZSBnZXQgYSBzdHJpbmcuXG5cbiAgICAgIHZhciBhdHRyaWJ1dGVzID0gYXR0cmlidXRlU3RyLnNwbGl0KFwiLFwiKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBrZXlWYWwgPSBhdHRyaWJ1dGVzW2ldLnNwbGl0KFwiPVwiKTtcblxuICAgICAgICBpZiAoa2V5VmFsLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHZhciBzdHIgPSBrZXlWYWxbMV0udHJpbSgpO1xuXG4gICAgICAgICAgc3dpdGNoIChrZXlWYWxbMF0udHJpbSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiYWx0XCI6XG4gICAgICAgICAgICAgIGFsdCA9IHN0cjtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJ3aWR0aFwiOlxuICAgICAgICAgICAgICB3aWR0aCA9IGluY2x1ZGVncmFwaGljc19zaXplRGF0YShzdHIpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcImhlaWdodFwiOlxuICAgICAgICAgICAgICBoZWlnaHQgPSBpbmNsdWRlZ3JhcGhpY3Nfc2l6ZURhdGEoc3RyKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJ0b3RhbGhlaWdodFwiOlxuICAgICAgICAgICAgICB0b3RhbGhlaWdodCA9IGluY2x1ZGVncmFwaGljc19zaXplRGF0YShzdHIpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCBrZXk6ICdcIiArIGtleVZhbFswXSArIFwiJyBpbiBcXFxcaW5jbHVkZWdyYXBoaWNzLlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc3JjID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXSwgXCJ1cmxcIikudXJsO1xuXG4gICAgaWYgKGFsdCA9PT0gXCJcIikge1xuICAgICAgLy8gTm8gYWx0IGdpdmVuLiBVc2UgdGhlIGZpbGUgbmFtZS4gU3RyaXAgYXdheSB0aGUgcGF0aC5cbiAgICAgIGFsdCA9IHNyYztcbiAgICAgIGFsdCA9IGFsdC5yZXBsYWNlKC9eLipbXFxcXC9dLywgJycpO1xuICAgICAgYWx0ID0gYWx0LnN1YnN0cmluZygwLCBhbHQubGFzdEluZGV4T2YoJy4nKSk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZXIuc2V0dGluZ3MuaXNUcnVzdGVkKHtcbiAgICAgIGNvbW1hbmQ6IFwiXFxcXGluY2x1ZGVncmFwaGljc1wiLFxuICAgICAgdXJsOiBzcmNcbiAgICB9KSkge1xuICAgICAgcmV0dXJuIHBhcnNlci5mb3JtYXRVbnN1cHBvcnRlZENtZChcIlxcXFxpbmNsdWRlZ3JhcGhpY3NcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiaW5jbHVkZWdyYXBoaWNzXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGFsdDogYWx0LFxuICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICB0b3RhbGhlaWdodDogdG90YWxoZWlnaHQsXG4gICAgICBzcmM6IHNyY1xuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBoZWlnaHQgPSB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLmhlaWdodCwgb3B0aW9ucyk7XG4gICAgdmFyIGRlcHRoID0gMDtcblxuICAgIGlmIChncm91cC50b3RhbGhlaWdodC5udW1iZXIgPiAwKSB7XG4gICAgICBkZXB0aCA9IHVuaXRzX2NhbGN1bGF0ZVNpemUoZ3JvdXAudG90YWxoZWlnaHQsIG9wdGlvbnMpIC0gaGVpZ2h0O1xuICAgICAgZGVwdGggPSBOdW1iZXIoZGVwdGgudG9GaXhlZCgyKSk7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gMDtcblxuICAgIGlmIChncm91cC53aWR0aC5udW1iZXIgPiAwKSB7XG4gICAgICB3aWR0aCA9IHVuaXRzX2NhbGN1bGF0ZVNpemUoZ3JvdXAud2lkdGgsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHZhciBzdHlsZSA9IHtcbiAgICAgIGhlaWdodDogaGVpZ2h0ICsgZGVwdGggKyBcImVtXCJcbiAgICB9O1xuXG4gICAgaWYgKHdpZHRoID4gMCkge1xuICAgICAgc3R5bGUud2lkdGggPSB3aWR0aCArIFwiZW1cIjtcbiAgICB9XG5cbiAgICBpZiAoZGVwdGggPiAwKSB7XG4gICAgICBzdHlsZS52ZXJ0aWNhbEFsaWduID0gLWRlcHRoICsgXCJlbVwiO1xuICAgIH1cblxuICAgIHZhciBub2RlID0gbmV3IGRvbVRyZWVfSW1nKGdyb3VwLnNyYywgZ3JvdXAuYWx0LCBzdHlsZSk7XG4gICAgbm9kZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgbm9kZS5kZXB0aCA9IGRlcHRoO1xuICAgIHJldHVybiBub2RlO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1nbHlwaFwiLCBbXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJhbHRcIiwgZ3JvdXAuYWx0KTtcbiAgICB2YXIgaGVpZ2h0ID0gdW5pdHNfY2FsY3VsYXRlU2l6ZShncm91cC5oZWlnaHQsIG9wdGlvbnMpO1xuICAgIHZhciBkZXB0aCA9IDA7XG5cbiAgICBpZiAoZ3JvdXAudG90YWxoZWlnaHQubnVtYmVyID4gMCkge1xuICAgICAgZGVwdGggPSB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLnRvdGFsaGVpZ2h0LCBvcHRpb25zKSAtIGhlaWdodDtcbiAgICAgIGRlcHRoID0gZGVwdGgudG9GaXhlZCgyKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwidmFsaWduXCIsIFwiLVwiICsgZGVwdGggKyBcImVtXCIpO1xuICAgIH1cblxuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGhlaWdodCArIGRlcHRoICsgXCJlbVwiKTtcblxuICAgIGlmIChncm91cC53aWR0aC5udW1iZXIgPiAwKSB7XG4gICAgICB2YXIgd2lkdGggPSB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLndpZHRoLCBvcHRpb25zKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgd2lkdGggKyBcImVtXCIpO1xuICAgIH1cblxuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic3JjXCIsIGdyb3VwLnNyYyk7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2tlcm4uanNcbi8vIEhvcml6b250YWwgc3BhY2luZyBjb21tYW5kc1xuXG5cblxuXG4gLy8gVE9ETzogXFxoc2tpcCBhbmQgXFxtc2tpcCBzaG91bGQgc3VwcG9ydCBwbHVzIGFuZCBtaW51cyBpbiBsZW5ndGhzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJrZXJuXCIsXG4gIG5hbWVzOiBbXCJcXFxca2VyblwiLCBcIlxcXFxta2VyblwiLCBcIlxcXFxoc2tpcFwiLCBcIlxcXFxtc2tpcFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJzaXplXCJdLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWYuZnVuY05hbWU7XG4gICAgdmFyIHNpemUgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcInNpemVcIik7XG5cbiAgICBpZiAocGFyc2VyLnNldHRpbmdzLnN0cmljdCkge1xuICAgICAgdmFyIG1hdGhGdW5jdGlvbiA9IGZ1bmNOYW1lWzFdID09PSAnbSc7IC8vIFxcbWtlcm4sIFxcbXNraXBcblxuICAgICAgdmFyIG11VW5pdCA9IHNpemUudmFsdWUudW5pdCA9PT0gJ211JztcblxuICAgICAgaWYgKG1hdGhGdW5jdGlvbikge1xuICAgICAgICBpZiAoIW11VW5pdCkge1xuICAgICAgICAgIHBhcnNlci5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJtYXRoVnNUZXh0VW5pdHNcIiwgXCJMYVRlWCdzIFwiICsgZnVuY05hbWUgKyBcIiBzdXBwb3J0cyBvbmx5IG11IHVuaXRzLCBcIiArIChcIm5vdCBcIiArIHNpemUudmFsdWUudW5pdCArIFwiIHVuaXRzXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZXIubW9kZSAhPT0gXCJtYXRoXCIpIHtcbiAgICAgICAgICBwYXJzZXIuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KFwibWF0aFZzVGV4dFVuaXRzXCIsIFwiTGFUZVgncyBcIiArIGZ1bmNOYW1lICsgXCIgd29ya3Mgb25seSBpbiBtYXRoIG1vZGVcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vICFtYXRoRnVuY3Rpb25cbiAgICAgICAgaWYgKG11VW5pdCkge1xuICAgICAgICAgIHBhcnNlci5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJtYXRoVnNUZXh0VW5pdHNcIiwgXCJMYVRlWCdzIFwiICsgZnVuY05hbWUgKyBcIiBkb2Vzbid0IHN1cHBvcnQgbXUgdW5pdHNcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGRpbWVuc2lvbjogc2l6ZS52YWx1ZVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlR2x1ZShncm91cC5kaW1lbnNpb24sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIGRpbWVuc2lvbiA9IHVuaXRzX2NhbGN1bGF0ZVNpemUoZ3JvdXAuZGltZW5zaW9uLCBvcHRpb25zKTtcbiAgICByZXR1cm4gbmV3IG1hdGhNTFRyZWUuU3BhY2VOb2RlKGRpbWVuc2lvbik7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2xhcC5qc1xuLy8gSG9yaXpvbnRhbCBvdmVybGFwIGZ1bmN0aW9uc1xuXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJsYXBcIixcbiAgbmFtZXM6IFtcIlxcXFxtYXRobGxhcFwiLCBcIlxcXFxtYXRocmxhcFwiLCBcIlxcXFxtYXRoY2xhcFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWYuZnVuY05hbWU7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImxhcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBhbGlnbm1lbnQ6IGZ1bmNOYW1lLnNsaWNlKDUpLFxuICAgICAgYm9keTogYm9keVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIG1hdGhsbGFwLCBtYXRocmxhcCwgbWF0aGNsYXBcbiAgICB2YXIgaW5uZXI7XG5cbiAgICBpZiAoZ3JvdXAuYWxpZ25tZW50ID09PSBcImNsYXBcIikge1xuICAgICAgLy8gcmVmOiBodHRwczovL3d3dy5tYXRoLmxzdS5lZHUvfmFwZXJsaXMvcHVibGljYXRpb25zL21hdGhjbGFwL1xuICAgICAgaW5uZXIgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXSwgW2J1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpXSk7IC8vIHdyYXAsIHNpbmNlIENTUyB3aWxsIGNlbnRlciBhIC5jbGFwID4gLmlubmVyID4gc3BhblxuXG4gICAgICBpbm5lciA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImlubmVyXCJdLCBbaW5uZXJdLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5uZXIgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJpbm5lclwiXSwgW2J1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpXSk7XG4gICAgfVxuXG4gICAgdmFyIGZpeCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImZpeFwiXSwgW10pO1xuICAgIHZhciBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW2dyb3VwLmFsaWdubWVudF0sIFtpbm5lciwgZml4XSwgb3B0aW9ucyk7IC8vIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgY29ycmVjdGx5IHNldCBob3Jpem9udGFsIGFsaWdubWVudCBvZiB0aGVcbiAgICAvLyB0d28gaXRlbXMgaW52b2x2ZWQgaW4gdGhlIGxhcC5cbiAgICAvLyBOZXh0LCB1c2UgYSBzdHJ1dCB0byBzZXQgdGhlIGhlaWdodCBvZiB0aGUgSFRNTCBib3VuZGluZyBib3guXG4gICAgLy8gT3RoZXJ3aXNlLCBhIHRhbGwgYXJndW1lbnQgbWF5IGJlIG1pc3BsYWNlZC5cblxuICAgIHZhciBzdHJ1dCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcInN0cnV0XCJdKTtcbiAgICBzdHJ1dC5zdHlsZS5oZWlnaHQgPSBub2RlLmhlaWdodCArIG5vZGUuZGVwdGggKyBcImVtXCI7XG4gICAgc3RydXQuc3R5bGUudmVydGljYWxBbGlnbiA9IC1ub2RlLmRlcHRoICsgXCJlbVwiO1xuICAgIG5vZGUuY2hpbGRyZW4udW5zaGlmdChzdHJ1dCk7IC8vIE5leHQsIHByZXZlbnQgdmVydGljYWwgbWlzcGxhY2VtZW50IHdoZW4gbmV4dCB0byBzb21ldGhpbmcgdGFsbC5cblxuICAgIG5vZGUgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImZpcnN0QmFzZWxpbmVcIixcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogbm9kZVxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTsgLy8gR2V0IHRoZSBob3Jpem9udGFsIHNwYWNpbmcgY29ycmVjdCByZWxhdGl2ZSB0byBhZGphY2VudCBpdGVtcy5cblxuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCJdLCBbbm9kZV0sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gbWF0aGxsYXAsIG1hdGhybGFwLCBtYXRoY2xhcFxuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcGFkZGVkXCIsIFtidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpXSk7XG5cbiAgICBpZiAoZ3JvdXAuYWxpZ25tZW50ICE9PSBcInJsYXBcIikge1xuICAgICAgdmFyIG9mZnNldCA9IGdyb3VwLmFsaWdubWVudCA9PT0gXCJsbGFwXCIgPyBcIi0xXCIgOiBcIi0wLjVcIjtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibHNwYWNlXCIsIG9mZnNldCArIFwid2lkdGhcIik7XG4gICAgfVxuXG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBcIjBweFwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvbWF0aC5qc1xuXG4gLy8gU3dpdGNoaW5nIGZyb20gdGV4dCBtb2RlIGJhY2sgdG8gbWF0aCBtb2RlXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJzdHlsaW5nXCIsXG4gIG5hbWVzOiBbXCJcXFxcKFwiLCBcIiRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGFsbG93ZWRJbk1hdGg6IGZhbHNlLFxuICAgIGNvbnN1bWVNb2RlOiBcIm1hdGhcIlxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lLFxuICAgICAgICBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICB2YXIgb3V0ZXJNb2RlID0gcGFyc2VyLm1vZGU7XG4gICAgcGFyc2VyLnN3aXRjaE1vZGUoXCJtYXRoXCIpO1xuICAgIHZhciBjbG9zZSA9IGZ1bmNOYW1lID09PSBcIlxcXFwoXCIgPyBcIlxcXFwpXCIgOiBcIiRcIjtcbiAgICB2YXIgYm9keSA9IHBhcnNlci5wYXJzZUV4cHJlc3Npb24oZmFsc2UsIGNsb3NlKTsgLy8gV2UgY2FuJ3QgZXhwYW5kIHRoZSBuZXh0IHN5bWJvbCBhZnRlciB0aGUgY2xvc2luZyAkIHVudGlsIGFmdGVyXG4gICAgLy8gc3dpdGNoaW5nIG1vZGVzIGJhY2suICBTbyBkb24ndCBjb25zdW1lIHdpdGhpbiBleHBlY3QuXG5cbiAgICBwYXJzZXIuZXhwZWN0KGNsb3NlLCBmYWxzZSk7XG4gICAgcGFyc2VyLnN3aXRjaE1vZGUob3V0ZXJNb2RlKTtcbiAgICBwYXJzZXIuY29uc3VtZSgpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInN0eWxpbmdcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgc3R5bGU6IFwidGV4dFwiLFxuICAgICAgYm9keTogYm9keVxuICAgIH07XG4gIH1cbn0pOyAvLyBDaGVjayBmb3IgZXh0cmEgY2xvc2luZyBtYXRoIGRlbGltaXRlcnNcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInRleHRcIixcbiAgLy8gRG9lc24ndCBtYXR0ZXIgd2hhdCB0aGlzIGlzLlxuICBuYW1lczogW1wiXFxcXClcIiwgXCJcXFxcXVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgYWxsb3dlZEluTWF0aDogZmFsc2VcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiTWlzbWF0Y2hlZCBcIiArIGNvbnRleHQuZnVuY05hbWUpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9tYXRoY2hvaWNlLmpzXG5cblxuXG5cblxuXG52YXIgbWF0aGNob2ljZV9jaG9vc2VNYXRoU3R5bGUgPSBmdW5jdGlvbiBjaG9vc2VNYXRoU3R5bGUoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgc3dpdGNoIChvcHRpb25zLnN0eWxlLnNpemUpIHtcbiAgICBjYXNlIHNyY19TdHlsZS5ESVNQTEFZLnNpemU6XG4gICAgICByZXR1cm4gZ3JvdXAuZGlzcGxheTtcblxuICAgIGNhc2Ugc3JjX1N0eWxlLlRFWFQuc2l6ZTpcbiAgICAgIHJldHVybiBncm91cC50ZXh0O1xuXG4gICAgY2FzZSBzcmNfU3R5bGUuU0NSSVBULnNpemU6XG4gICAgICByZXR1cm4gZ3JvdXAuc2NyaXB0O1xuXG4gICAgY2FzZSBzcmNfU3R5bGUuU0NSSVBUU0NSSVBULnNpemU6XG4gICAgICByZXR1cm4gZ3JvdXAuc2NyaXB0c2NyaXB0O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBncm91cC50ZXh0O1xuICB9XG59O1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibWF0aGNob2ljZVwiLFxuICBuYW1lczogW1wiXFxcXG1hdGhjaG9pY2VcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogNFxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZi5wYXJzZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwibWF0aGNob2ljZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBkaXNwbGF5OiBkZWZpbmVGdW5jdGlvbl9vcmRhcmd1bWVudChhcmdzWzBdKSxcbiAgICAgIHRleHQ6IGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGFyZ3NbMV0pLFxuICAgICAgc2NyaXB0OiBkZWZpbmVGdW5jdGlvbl9vcmRhcmd1bWVudChhcmdzWzJdKSxcbiAgICAgIHNjcmlwdHNjcmlwdDogZGVmaW5lRnVuY3Rpb25fb3JkYXJndW1lbnQoYXJnc1szXSlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgYm9keSA9IG1hdGhjaG9pY2VfY2hvb3NlTWF0aFN0eWxlKGdyb3VwLCBvcHRpb25zKTtcbiAgICB2YXIgZWxlbWVudHMgPSBidWlsZEhUTUxfYnVpbGRFeHByZXNzaW9uKGJvZHksIG9wdGlvbnMsIGZhbHNlKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUZyYWdtZW50KGVsZW1lbnRzKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBib2R5ID0gbWF0aGNob2ljZV9jaG9vc2VNYXRoU3R5bGUoZ3JvdXAsIG9wdGlvbnMpO1xuICAgIHJldHVybiBidWlsZEV4cHJlc3Npb25Sb3coYm9keSwgb3B0aW9ucyk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3V0aWxzL2Fzc2VtYmxlU3VwU3ViLmpzXG5cblxuLy8gRm9yIGFuIG9wZXJhdG9yIHdpdGggbGltaXRzLCBhc3NlbWJsZSB0aGUgYmFzZSwgc3VwLCBhbmQgc3ViIGludG8gYSBzcGFuLlxudmFyIGFzc2VtYmxlU3VwU3ViX2Fzc2VtYmxlU3VwU3ViID0gZnVuY3Rpb24gYXNzZW1ibGVTdXBTdWIoYmFzZSwgc3VwR3JvdXAsIHN1Ykdyb3VwLCBvcHRpb25zLCBzdHlsZSwgc2xhbnQsIGJhc2VTaGlmdCkge1xuICAvLyBJRSA4IGNsaXBzIFxcaW50IGlmIGl0IGlzIGluIGEgZGlzcGxheTogaW5saW5lLWJsb2NrLiBXZSB3cmFwIGl0XG4gIC8vIGluIGEgbmV3IHNwYW4gc28gaXQgaXMgYW4gaW5saW5lLCBhbmQgd29ya3MuXG4gIGJhc2UgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXSwgW2Jhc2VdKTtcbiAgdmFyIHN1YjtcbiAgdmFyIHN1cDsgLy8gV2UgbWFudWFsbHkgaGF2ZSB0byBoYW5kbGUgdGhlIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cy4gVGhpcyxcbiAgLy8gYXNpZGUgZnJvbSB0aGUga2VybiBjYWxjdWxhdGlvbnMsIGlzIGNvcGllZCBmcm9tIHN1cHN1Yi5cblxuICBpZiAoc3VwR3JvdXApIHtcbiAgICB2YXIgZWxlbSA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKHN1cEdyb3VwLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlLnN1cCgpKSwgb3B0aW9ucyk7XG4gICAgc3VwID0ge1xuICAgICAgZWxlbTogZWxlbSxcbiAgICAgIGtlcm46IE1hdGgubWF4KG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmcxLCBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nMyAtIGVsZW0uZGVwdGgpXG4gICAgfTtcbiAgfVxuXG4gIGlmIChzdWJHcm91cCkge1xuICAgIHZhciBfZWxlbSA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKHN1Ykdyb3VwLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlLnN1YigpKSwgb3B0aW9ucyk7XG5cbiAgICBzdWIgPSB7XG4gICAgICBlbGVtOiBfZWxlbSxcbiAgICAgIGtlcm46IE1hdGgubWF4KG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmcyLCBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNCAtIF9lbGVtLmhlaWdodClcbiAgICB9O1xuICB9IC8vIEJ1aWxkIHRoZSBmaW5hbCBncm91cCBhcyBhIHZsaXN0IG9mIHRoZSBwb3NzaWJsZSBzdWJzY3JpcHQsIGJhc2UsXG4gIC8vIGFuZCBwb3NzaWJsZSBzdXBlcnNjcmlwdC5cblxuXG4gIHZhciBmaW5hbEdyb3VwO1xuXG4gIGlmIChzdXAgJiYgc3ViKSB7XG4gICAgdmFyIGJvdHRvbSA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1ICsgc3ViLmVsZW0uaGVpZ2h0ICsgc3ViLmVsZW0uZGVwdGggKyBzdWIua2VybiArIGJhc2UuZGVwdGggKyBiYXNlU2hpZnQ7XG4gICAgZmluYWxHcm91cCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IGJvdHRvbSxcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogb3B0aW9ucy5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzVcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHN1Yi5lbGVtLFxuICAgICAgICBtYXJnaW5MZWZ0OiAtc2xhbnQgKyBcImVtXCJcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IHN1Yi5rZXJuXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBiYXNlXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiBzdXAua2VyblxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogc3VwLmVsZW0sXG4gICAgICAgIG1hcmdpbkxlZnQ6IHNsYW50ICsgXCJlbVwiXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNVxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfSBlbHNlIGlmIChzdWIpIHtcbiAgICB2YXIgdG9wID0gYmFzZS5oZWlnaHQgLSBiYXNlU2hpZnQ7IC8vIFNoaWZ0IHRoZSBsaW1pdHMgYnkgdGhlIHNsYW50IG9mIHRoZSBzeW1ib2wuIE5vdGVcbiAgICAvLyB0aGF0IHdlIGFyZSBzdXBwb3NlZCB0byBzaGlmdCB0aGUgbGltaXRzIGJ5IDEvMiBvZiB0aGUgc2xhbnQsXG4gICAgLy8gYnV0IHNpbmNlIHdlIGFyZSBjZW50ZXJpbmcgdGhlIGxpbWl0cyBhZGRpbmcgYSBmdWxsIHNsYW50IG9mXG4gICAgLy8gbWFyZ2luIHdpbGwgc2hpZnQgYnkgMS8yIHRoYXQuXG5cbiAgICBmaW5hbEdyb3VwID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJ0b3BcIixcbiAgICAgIHBvc2l0aW9uRGF0YTogdG9wLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogc3ViLmVsZW0sXG4gICAgICAgIG1hcmdpbkxlZnQ6IC1zbGFudCArIFwiZW1cIlxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogc3ViLmtlcm5cbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJhc2VcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSBpZiAoc3VwKSB7XG4gICAgdmFyIF9ib3R0b20gPSBiYXNlLmRlcHRoICsgYmFzZVNoaWZ0O1xuXG4gICAgZmluYWxHcm91cCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IF9ib3R0b20sXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJhc2VcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IHN1cC5rZXJuXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBzdXAuZWxlbSxcbiAgICAgICAgbWFyZ2luTGVmdDogc2xhbnQgKyBcImVtXCJcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1XG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgY2FzZSBwcm9iYWJseSBzaG91bGRuJ3Qgb2NjdXIgKHRoaXMgd291bGQgbWVhbiB0aGVcbiAgICAvLyBzdXBzdWIgd2FzIHNlbmRpbmcgdXMgYSBncm91cCB3aXRoIG5vIHN1cGVyc2NyaXB0IG9yXG4gICAgLy8gc3Vic2NyaXB0KSBidXQgYmUgc2FmZS5cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuXG4gIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3BcIiwgXCJvcC1saW1pdHNcIl0sIFtmaW5hbEdyb3VwXSwgb3B0aW9ucyk7XG59O1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL29wLmpzXG4vLyBMaW1pdHMsIHN5bWJvbHNcblxuXG5cblxuXG5cblxuXG5cblxuLy8gTW9zdCBvcGVyYXRvcnMgaGF2ZSBhIGxhcmdlIHN1Y2Nlc3NvciBzeW1ib2wsIGJ1dCB0aGVzZSBkb24ndC5cbnZhciBub1N1Y2Nlc3NvciA9IFtcIlxcXFxzbWFsbGludFwiXTsgLy8gTk9URTogVW5saWtlIG1vc3QgYGh0bWxCdWlsZGVyYHMsIHRoaXMgb25lIGhhbmRsZXMgbm90IG9ubHkgXCJvcFwiLCBidXQgYWxzb1xuLy8gXCJzdXBzdWJcIiBzaW5jZSBzb21lIG9mIHRoZW0gKGxpa2UgXFxpbnQpIGNhbiBhZmZlY3Qgc3VwZXIvc3Vic2NyaXB0aW5nLlxuXG52YXIgb3BfaHRtbEJ1aWxkZXIgPSBmdW5jdGlvbiBodG1sQnVpbGRlcihncnAsIG9wdGlvbnMpIHtcbiAgLy8gT3BlcmF0b3JzIGFyZSBoYW5kbGVkIGluIHRoZSBUZVhib29rIHBnLiA0NDMtNDQ0LCBydWxlIDEzKGEpLlxuICB2YXIgc3VwR3JvdXA7XG4gIHZhciBzdWJHcm91cDtcbiAgdmFyIGhhc0xpbWl0cyA9IGZhbHNlO1xuICB2YXIgZ3JvdXA7XG4gIHZhciBzdXBTdWIgPSBjaGVja05vZGVUeXBlKGdycCwgXCJzdXBzdWJcIik7XG5cbiAgaWYgKHN1cFN1Yikge1xuICAgIC8vIElmIHdlIGhhdmUgbGltaXRzLCBzdXBzdWIgd2lsbCBwYXNzIHVzIGl0cyBncm91cCB0byBoYW5kbGUuIFB1bGxcbiAgICAvLyBvdXQgdGhlIHN1cGVyc2NyaXB0IGFuZCBzdWJzY3JpcHQgYW5kIHNldCB0aGUgZ3JvdXAgdG8gdGhlIG9wIGluXG4gICAgLy8gaXRzIGJhc2UuXG4gICAgc3VwR3JvdXAgPSBzdXBTdWIuc3VwO1xuICAgIHN1Ykdyb3VwID0gc3VwU3ViLnN1YjtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKHN1cFN1Yi5iYXNlLCBcIm9wXCIpO1xuICAgIGhhc0xpbWl0cyA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgZ3JvdXAgPSBhc3NlcnROb2RlVHlwZShncnAsIFwib3BcIik7XG4gIH1cblxuICB2YXIgc3R5bGUgPSBvcHRpb25zLnN0eWxlO1xuICB2YXIgbGFyZ2UgPSBmYWxzZTtcblxuICBpZiAoc3R5bGUuc2l6ZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkuc2l6ZSAmJiBncm91cC5zeW1ib2wgJiYgIXV0aWxzLmNvbnRhaW5zKG5vU3VjY2Vzc29yLCBncm91cC5uYW1lKSkge1xuICAgIC8vIE1vc3Qgc3ltYm9sIG9wZXJhdG9ycyBnZXQgbGFyZ2VyIGluIGRpc3BsYXlzdHlsZSAocnVsZSAxMylcbiAgICBsYXJnZSA9IHRydWU7XG4gIH1cblxuICB2YXIgYmFzZTtcblxuICBpZiAoZ3JvdXAuc3ltYm9sKSB7XG4gICAgLy8gSWYgdGhpcyBpcyBhIHN5bWJvbCwgY3JlYXRlIHRoZSBzeW1ib2wuXG4gICAgdmFyIGZvbnROYW1lID0gbGFyZ2UgPyBcIlNpemUyLVJlZ3VsYXJcIiA6IFwiU2l6ZTEtUmVndWxhclwiO1xuICAgIHZhciBzdGFzaCA9IFwiXCI7XG5cbiAgICBpZiAoZ3JvdXAubmFtZSA9PT0gXCJcXFxcb2lpbnRcIiB8fCBncm91cC5uYW1lID09PSBcIlxcXFxvaWlpbnRcIikge1xuICAgICAgLy8gTm8gZm9udCBnbHlwaHMgeWV0LCBzbyB1c2UgYSBnbHlwaCB3L28gdGhlIG92YWwuXG4gICAgICAvLyBUT0RPOiBXaGVuIGZvbnQgZ2x5cGhzIGFyZSBhdmFpbGFibGUsIGRlbGV0ZSB0aGlzIGNvZGUuXG4gICAgICBzdGFzaCA9IGdyb3VwLm5hbWUuc3Vic3RyKDEpOyAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgIGdyb3VwLm5hbWUgPSBzdGFzaCA9PT0gXCJvaWludFwiID8gXCJcXFxcaWludFwiIDogXCJcXFxcaWlpbnRcIjtcbiAgICB9XG5cbiAgICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVN5bWJvbChncm91cC5uYW1lLCBmb250TmFtZSwgXCJtYXRoXCIsIG9wdGlvbnMsIFtcIm1vcFwiLCBcIm9wLXN5bWJvbFwiLCBsYXJnZSA/IFwibGFyZ2Utb3BcIiA6IFwic21hbGwtb3BcIl0pO1xuXG4gICAgaWYgKHN0YXNoLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIFdlJ3JlIGluIFxcb2lpbnQgb3IgXFxvaWlpbnQuIE92ZXJsYXkgdGhlIG92YWwuXG4gICAgICAvLyBUT0RPOiBXaGVuIGZvbnQgZ2x5cGhzIGFyZSBhdmFpbGFibGUsIGRlbGV0ZSB0aGlzIGNvZGUuXG4gICAgICB2YXIgaXRhbGljID0gYmFzZS5pdGFsaWM7XG4gICAgICB2YXIgb3ZhbCA9IGJ1aWxkQ29tbW9uLnN0YXRpY1N2ZyhzdGFzaCArIFwiU2l6ZVwiICsgKGxhcmdlID8gXCIyXCIgOiBcIjFcIiksIG9wdGlvbnMpO1xuICAgICAgYmFzZSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJpbmRpdmlkdWFsU2hpZnRcIixcbiAgICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogYmFzZSxcbiAgICAgICAgICBzaGlmdDogMFxuICAgICAgICB9LCB7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogb3ZhbCxcbiAgICAgICAgICBzaGlmdDogbGFyZ2UgPyAwLjA4IDogMFxuICAgICAgICB9XVxuICAgICAgfSwgb3B0aW9ucyk7IC8vICRGbG93Rml4TWVcblxuICAgICAgZ3JvdXAubmFtZSA9IFwiXFxcXFwiICsgc3Rhc2g7XG4gICAgICBiYXNlLmNsYXNzZXMudW5zaGlmdChcIm1vcFwiKTsgLy8gJEZsb3dGaXhNZVxuXG4gICAgICBiYXNlLml0YWxpYyA9IGl0YWxpYztcbiAgICB9XG4gIH0gZWxzZSBpZiAoZ3JvdXAuYm9keSkge1xuICAgIC8vIElmIHRoaXMgaXMgYSBsaXN0LCBjb21wb3NlIHRoYXQgbGlzdC5cbiAgICB2YXIgaW5uZXIgPSBidWlsZEhUTUxfYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMsIHRydWUpO1xuXG4gICAgaWYgKGlubmVyLmxlbmd0aCA9PT0gMSAmJiBpbm5lclswXSBpbnN0YW5jZW9mIGRvbVRyZWVfU3ltYm9sTm9kZSkge1xuICAgICAgYmFzZSA9IGlubmVyWzBdO1xuICAgICAgYmFzZS5jbGFzc2VzWzBdID0gXCJtb3BcIjsgLy8gcmVwbGFjZSBvbGQgbWNsYXNzXG4gICAgfSBlbHNlIHtcbiAgICAgIGJhc2UgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3BcIl0sIGJ1aWxkQ29tbW9uLnRyeUNvbWJpbmVDaGFycyhpbm5lciksIG9wdGlvbnMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2UsIHRoaXMgaXMgYSB0ZXh0IG9wZXJhdG9yLiBCdWlsZCB0aGUgdGV4dCBmcm9tIHRoZVxuICAgIC8vIG9wZXJhdG9yJ3MgbmFtZS5cbiAgICAvLyBUT0RPKGVtaWx5KTogQWRkIGEgc3BhY2UgaW4gdGhlIG1pZGRsZSBvZiBzb21lIG9mIHRoZXNlXG4gICAgLy8gb3BlcmF0b3JzLCBsaWtlIFxcbGltc3VwXG4gICAgdmFyIG91dHB1dCA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBncm91cC5uYW1lLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvdXRwdXQucHVzaChidWlsZENvbW1vbi5tYXRoc3ltKGdyb3VwLm5hbWVbaV0sIGdyb3VwLm1vZGUsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9wXCJdLCBvdXRwdXQsIG9wdGlvbnMpO1xuICB9IC8vIElmIGNvbnRlbnQgb2Ygb3AgaXMgYSBzaW5nbGUgc3ltYm9sLCBzaGlmdCBpdCB2ZXJ0aWNhbGx5LlxuXG5cbiAgdmFyIGJhc2VTaGlmdCA9IDA7XG4gIHZhciBzbGFudCA9IDA7XG5cbiAgaWYgKChiYXNlIGluc3RhbmNlb2YgZG9tVHJlZV9TeW1ib2xOb2RlIHx8IGdyb3VwLm5hbWUgPT09IFwiXFxcXG9paW50XCIgfHwgZ3JvdXAubmFtZSA9PT0gXCJcXFxcb2lpaW50XCIpICYmICFncm91cC5zdXBwcmVzc0Jhc2VTaGlmdCkge1xuICAgIC8vIFdlIHN1cHByZXNzIHRoZSBzaGlmdCBvZiB0aGUgYmFzZSBvZiBcXG92ZXJzZXQgYW5kIFxcdW5kZXJzZXQuIE90aGVyd2lzZSxcbiAgICAvLyBzaGlmdCB0aGUgc3ltYm9sIHNvIGl0cyBjZW50ZXIgbGllcyBvbiB0aGUgYXhpcyAocnVsZSAxMykuIEl0XG4gICAgLy8gYXBwZWFycyB0aGF0IG91ciBmb250cyBoYXZlIHRoZSBjZW50ZXJzIG9mIHRoZSBzeW1ib2xzIGFscmVhZHlcbiAgICAvLyBhbG1vc3Qgb24gdGhlIGF4aXMsIHNvIHRoZXNlIG51bWJlcnMgYXJlIHZlcnkgc21hbGwuIE5vdGUgd2VcbiAgICAvLyBkb24ndCBhY3R1YWxseSBhcHBseSB0aGlzIGhlcmUsIGJ1dCBpbnN0ZWFkIGl0IGlzIHVzZWQgZWl0aGVyIGluXG4gICAgLy8gdGhlIHZsaXN0IGNyZWF0aW9uIG9yIHNlcGFyYXRlbHkgd2hlbiB0aGVyZSBhcmUgbm8gbGltaXRzLlxuICAgIGJhc2VTaGlmdCA9IChiYXNlLmhlaWdodCAtIGJhc2UuZGVwdGgpIC8gMiAtIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0OyAvLyBUaGUgc2xhbnQgb2YgdGhlIHN5bWJvbCBpcyBqdXN0IGl0cyBpdGFsaWMgY29ycmVjdGlvbi5cbiAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICBzbGFudCA9IGJhc2UuaXRhbGljO1xuICB9XG5cbiAgaWYgKGhhc0xpbWl0cykge1xuICAgIHJldHVybiBhc3NlbWJsZVN1cFN1Yl9hc3NlbWJsZVN1cFN1YihiYXNlLCBzdXBHcm91cCwgc3ViR3JvdXAsIG9wdGlvbnMsIHN0eWxlLCBzbGFudCwgYmFzZVNoaWZ0KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoYmFzZVNoaWZ0KSB7XG4gICAgICBiYXNlLnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICAgICAgYmFzZS5zdHlsZS50b3AgPSBiYXNlU2hpZnQgKyBcImVtXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2U7XG4gIH1cbn07XG5cbnZhciBvcF9tYXRobWxCdWlsZGVyID0gZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICB2YXIgbm9kZTtcblxuICBpZiAoZ3JvdXAuc3ltYm9sKSB7XG4gICAgLy8gVGhpcyBpcyBhIHN5bWJvbC4gSnVzdCBhZGQgdGhlIHN5bWJvbC5cbiAgICBub2RlID0gbmV3IG1hdGhNTFRyZWVfTWF0aE5vZGUoXCJtb1wiLCBbYnVpbGRNYXRoTUxfbWFrZVRleHQoZ3JvdXAubmFtZSwgZ3JvdXAubW9kZSldKTtcblxuICAgIGlmICh1dGlscy5jb250YWlucyhub1N1Y2Nlc3NvciwgZ3JvdXAubmFtZSkpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibGFyZ2VvcFwiLCBcImZhbHNlXCIpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChncm91cC5ib2R5KSB7XG4gICAgLy8gVGhpcyBpcyBhbiBvcGVyYXRvciB3aXRoIGNoaWxkcmVuLiBBZGQgdGhlbS5cbiAgICBub2RlID0gbmV3IG1hdGhNTFRyZWVfTWF0aE5vZGUoXCJtb1wiLCBidWlsZE1hdGhNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucykpO1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgaXMgYSB0ZXh0IG9wZXJhdG9yLiBBZGQgYWxsIG9mIHRoZSBjaGFyYWN0ZXJzIGZyb20gdGhlXG4gICAgLy8gb3BlcmF0b3IncyBuYW1lLlxuICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZV9NYXRoTm9kZShcIm1pXCIsIFtuZXcgbWF0aE1MVHJlZV9UZXh0Tm9kZShncm91cC5uYW1lLnNsaWNlKDEpKV0pOyAvLyBBcHBlbmQgYW4gPG1vPiZBcHBseUZ1bmN0aW9uOzwvbW8+LlxuICAgIC8vIHJlZjogaHR0cHM6Ly93d3cudzMub3JnL1RSL1JFQy1NYXRoTUwvY2hhcDNfMi5odG1sI3NlYzMuMi40XG5cbiAgICB2YXIgb3BlcmF0b3IgPSBuZXcgbWF0aE1MVHJlZV9NYXRoTm9kZShcIm1vXCIsIFtidWlsZE1hdGhNTF9tYWtlVGV4dChcIlxcdTIwNjFcIiwgXCJ0ZXh0XCIpXSk7XG5cbiAgICBpZiAoZ3JvdXAucGFyZW50SXNTdXBTdWIpIHtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZV9NYXRoTm9kZShcIm1vXCIsIFtub2RlLCBvcGVyYXRvcl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3RG9jdW1lbnRGcmFnbWVudChbbm9kZSwgb3BlcmF0b3JdKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn07XG5cbnZhciBzaW5nbGVDaGFyQmlnT3BzID0ge1xuICBcIlxcdTIyMEZcIjogXCJcXFxccHJvZFwiLFxuICBcIlxcdTIyMTBcIjogXCJcXFxcY29wcm9kXCIsXG4gIFwiXFx1MjIxMVwiOiBcIlxcXFxzdW1cIixcbiAgXCJcXHUyMkMwXCI6IFwiXFxcXGJpZ3dlZGdlXCIsXG4gIFwiXFx1MjJDMVwiOiBcIlxcXFxiaWd2ZWVcIixcbiAgXCJcXHUyMkMyXCI6IFwiXFxcXGJpZ2NhcFwiLFxuICBcIlxcdTIyQzNcIjogXCJcXFxcYmlnY3VwXCIsXG4gIFwiXFx1MkEwMFwiOiBcIlxcXFxiaWdvZG90XCIsXG4gIFwiXFx1MkEwMVwiOiBcIlxcXFxiaWdvcGx1c1wiLFxuICBcIlxcdTJBMDJcIjogXCJcXFxcYmlnb3RpbWVzXCIsXG4gIFwiXFx1MkEwNFwiOiBcIlxcXFxiaWd1cGx1c1wiLFxuICBcIlxcdTJBMDZcIjogXCJcXFxcYmlnc3FjdXBcIlxufTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcFwiLFxuICBuYW1lczogW1wiXFxcXGNvcHJvZFwiLCBcIlxcXFxiaWd2ZWVcIiwgXCJcXFxcYmlnd2VkZ2VcIiwgXCJcXFxcYmlndXBsdXNcIiwgXCJcXFxcYmlnY2FwXCIsIFwiXFxcXGJpZ2N1cFwiLCBcIlxcXFxpbnRvcFwiLCBcIlxcXFxwcm9kXCIsIFwiXFxcXHN1bVwiLCBcIlxcXFxiaWdvdGltZXNcIiwgXCJcXFxcYmlnb3BsdXNcIiwgXCJcXFxcYmlnb2RvdFwiLCBcIlxcXFxiaWdzcWN1cFwiLCBcIlxcXFxzbWFsbGludFwiLCBcIlxcdTIyMEZcIiwgXCJcXHUyMjEwXCIsIFwiXFx1MjIxMVwiLCBcIlxcdTIyQzBcIiwgXCJcXHUyMkMxXCIsIFwiXFx1MjJDMlwiLCBcIlxcdTIyQzNcIiwgXCJcXHUyQTAwXCIsIFwiXFx1MkEwMVwiLCBcIlxcdTJBMDJcIiwgXCJcXHUyQTA0XCIsIFwiXFx1MkEwNlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lO1xuICAgIHZhciBmTmFtZSA9IGZ1bmNOYW1lO1xuXG4gICAgaWYgKGZOYW1lLmxlbmd0aCA9PT0gMSkge1xuICAgICAgZk5hbWUgPSBzaW5nbGVDaGFyQmlnT3BzW2ZOYW1lXTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsaW1pdHM6IHRydWUsXG4gICAgICBwYXJlbnRJc1N1cFN1YjogZmFsc2UsXG4gICAgICBzeW1ib2w6IHRydWUsXG4gICAgICBuYW1lOiBmTmFtZVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBvcF9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogb3BfbWF0aG1sQnVpbGRlclxufSk7IC8vIE5vdGU6IGNhbGxpbmcgZGVmaW5lRnVuY3Rpb24gd2l0aCBhIHR5cGUgdGhhdCdzIGFscmVhZHkgYmVlbiBkZWZpbmVkIG9ubHlcbi8vIHdvcmtzIGJlY2F1c2UgdGhlIHNhbWUgaHRtbEJ1aWxkZXIgYW5kIG1hdGhtbEJ1aWxkZXIgYXJlIGJlaW5nIHVzZWQuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcFwiLFxuICBuYW1lczogW1wiXFxcXG1hdGhvcFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZjIsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZjIucGFyc2VyO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsaW1pdHM6IGZhbHNlLFxuICAgICAgcGFyZW50SXNTdXBTdWI6IGZhbHNlLFxuICAgICAgc3ltYm9sOiBmYWxzZSxcbiAgICAgIGJvZHk6IGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGJvZHkpXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IG9wX2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBvcF9tYXRobWxCdWlsZGVyXG59KTsgLy8gVGhlcmUgYXJlIDIgZmxhZ3MgZm9yIG9wZXJhdG9yczsgd2hldGhlciB0aGV5IHByb2R1Y2UgbGltaXRzIGluXG4vLyBkaXNwbGF5c3R5bGUsIGFuZCB3aGV0aGVyIHRoZXkgYXJlIHN5bWJvbHMgYW5kIHNob3VsZCBncm93IGluXG4vLyBkaXNwbGF5c3R5bGUuIFRoZXNlIGZvdXIgZ3JvdXBzIGNvdmVyIHRoZSBmb3VyIHBvc3NpYmxlIGNob2ljZXMuXG5cbnZhciBzaW5nbGVDaGFySW50ZWdyYWxzID0ge1xuICBcIlxcdTIyMkJcIjogXCJcXFxcaW50XCIsXG4gIFwiXFx1MjIyQ1wiOiBcIlxcXFxpaW50XCIsXG4gIFwiXFx1MjIyRFwiOiBcIlxcXFxpaWludFwiLFxuICBcIlxcdTIyMkVcIjogXCJcXFxcb2ludFwiLFxuICBcIlxcdTIyMkZcIjogXCJcXFxcb2lpbnRcIixcbiAgXCJcXHUyMjMwXCI6IFwiXFxcXG9paWludFwiXG59OyAvLyBObyBsaW1pdHMsIG5vdCBzeW1ib2xzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcFwiLFxuICBuYW1lczogW1wiXFxcXGFyY3NpblwiLCBcIlxcXFxhcmNjb3NcIiwgXCJcXFxcYXJjdGFuXCIsIFwiXFxcXGFyY3RnXCIsIFwiXFxcXGFyY2N0Z1wiLCBcIlxcXFxhcmdcIiwgXCJcXFxcY2hcIiwgXCJcXFxcY29zXCIsIFwiXFxcXGNvc2VjXCIsIFwiXFxcXGNvc2hcIiwgXCJcXFxcY290XCIsIFwiXFxcXGNvdGdcIiwgXCJcXFxcY290aFwiLCBcIlxcXFxjc2NcIiwgXCJcXFxcY3RnXCIsIFwiXFxcXGN0aFwiLCBcIlxcXFxkZWdcIiwgXCJcXFxcZGltXCIsIFwiXFxcXGV4cFwiLCBcIlxcXFxob21cIiwgXCJcXFxca2VyXCIsIFwiXFxcXGxnXCIsIFwiXFxcXGxuXCIsIFwiXFxcXGxvZ1wiLCBcIlxcXFxzZWNcIiwgXCJcXFxcc2luXCIsIFwiXFxcXHNpbmhcIiwgXCJcXFxcc2hcIiwgXCJcXFxcdGFuXCIsIFwiXFxcXHRhbmhcIiwgXCJcXFxcdGdcIiwgXCJcXFxcdGhcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYzLnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmMy5mdW5jTmFtZTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsaW1pdHM6IGZhbHNlLFxuICAgICAgcGFyZW50SXNTdXBTdWI6IGZhbHNlLFxuICAgICAgc3ltYm9sOiBmYWxzZSxcbiAgICAgIG5hbWU6IGZ1bmNOYW1lXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IG9wX2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBvcF9tYXRobWxCdWlsZGVyXG59KTsgLy8gTGltaXRzLCBub3Qgc3ltYm9sc1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwib3BcIixcbiAgbmFtZXM6IFtcIlxcXFxkZXRcIiwgXCJcXFxcZ2NkXCIsIFwiXFxcXGluZlwiLCBcIlxcXFxsaW1cIiwgXCJcXFxcbWF4XCIsIFwiXFxcXG1pblwiLCBcIlxcXFxQclwiLCBcIlxcXFxzdXBcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWY0KSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWY0LnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmNC5mdW5jTmFtZTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsaW1pdHM6IHRydWUsXG4gICAgICBwYXJlbnRJc1N1cFN1YjogZmFsc2UsXG4gICAgICBzeW1ib2w6IGZhbHNlLFxuICAgICAgbmFtZTogZnVuY05hbWVcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogb3BfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IG9wX21hdGhtbEJ1aWxkZXJcbn0pOyAvLyBObyBsaW1pdHMsIHN5bWJvbHNcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcIm9wXCIsXG4gIG5hbWVzOiBbXCJcXFxcaW50XCIsIFwiXFxcXGlpbnRcIiwgXCJcXFxcaWlpbnRcIiwgXCJcXFxcb2ludFwiLCBcIlxcXFxvaWludFwiLCBcIlxcXFxvaWlpbnRcIiwgXCJcXHUyMjJCXCIsIFwiXFx1MjIyQ1wiLCBcIlxcdTIyMkRcIiwgXCJcXHUyMjJFXCIsIFwiXFx1MjIyRlwiLCBcIlxcdTIyMzBcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWY1KSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWY1LnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmNS5mdW5jTmFtZTtcbiAgICB2YXIgZk5hbWUgPSBmdW5jTmFtZTtcblxuICAgIGlmIChmTmFtZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGZOYW1lID0gc2luZ2xlQ2hhckludGVncmFsc1tmTmFtZV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwib3BcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGltaXRzOiBmYWxzZSxcbiAgICAgIHBhcmVudElzU3VwU3ViOiBmYWxzZSxcbiAgICAgIHN5bWJvbDogdHJ1ZSxcbiAgICAgIG5hbWU6IGZOYW1lXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IG9wX2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBvcF9tYXRobWxCdWlsZGVyXG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9vcGVyYXRvcm5hbWUuanNcblxuXG5cblxuXG5cblxuXG4vLyBOT1RFOiBVbmxpa2UgbW9zdCBgaHRtbEJ1aWxkZXJgcywgdGhpcyBvbmUgaGFuZGxlcyBub3Qgb25seVxuLy8gXCJvcGVyYXRvcm5hbWVcIiwgYnV0IGFsc28gIFwic3Vwc3ViXCIgc2luY2UgXFxvcGVyYXRvcm5hbWUqIGNhblxudmFyIG9wZXJhdG9ybmFtZV9odG1sQnVpbGRlciA9IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdycCwgb3B0aW9ucykge1xuICAvLyBPcGVyYXRvcnMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgcGcuIDQ0My00NDQsIHJ1bGUgMTMoYSkuXG4gIHZhciBzdXBHcm91cDtcbiAgdmFyIHN1Ykdyb3VwO1xuICB2YXIgaGFzTGltaXRzID0gZmFsc2U7XG4gIHZhciBncm91cDtcbiAgdmFyIHN1cFN1YiA9IGNoZWNrTm9kZVR5cGUoZ3JwLCBcInN1cHN1YlwiKTtcblxuICBpZiAoc3VwU3ViKSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBsaW1pdHMsIHN1cHN1YiB3aWxsIHBhc3MgdXMgaXRzIGdyb3VwIHRvIGhhbmRsZS4gUHVsbFxuICAgIC8vIG91dCB0aGUgc3VwZXJzY3JpcHQgYW5kIHN1YnNjcmlwdCBhbmQgc2V0IHRoZSBncm91cCB0byB0aGUgb3AgaW5cbiAgICAvLyBpdHMgYmFzZS5cbiAgICBzdXBHcm91cCA9IHN1cFN1Yi5zdXA7XG4gICAgc3ViR3JvdXAgPSBzdXBTdWIuc3ViO1xuICAgIGdyb3VwID0gYXNzZXJ0Tm9kZVR5cGUoc3VwU3ViLmJhc2UsIFwib3BlcmF0b3JuYW1lXCIpO1xuICAgIGhhc0xpbWl0cyA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgZ3JvdXAgPSBhc3NlcnROb2RlVHlwZShncnAsIFwib3BlcmF0b3JuYW1lXCIpO1xuICB9XG5cbiAgdmFyIGJhc2U7XG5cbiAgaWYgKGdyb3VwLmJvZHkubGVuZ3RoID4gMCkge1xuICAgIHZhciBib2R5ID0gZ3JvdXAuYm9keS5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lOiBDaGVjayBpZiB0aGUgbm9kZSBoYXMgYSBzdHJpbmcgYHRleHRgIHByb3BlcnR5LlxuICAgICAgdmFyIGNoaWxkVGV4dCA9IGNoaWxkLnRleHQ7XG5cbiAgICAgIGlmICh0eXBlb2YgY2hpbGRUZXh0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgICAgbW9kZTogY2hpbGQubW9kZSxcbiAgICAgICAgICB0ZXh0OiBjaGlsZFRleHRcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cbiAgICB9KTsgLy8gQ29uc29saWRhdGUgZnVuY3Rpb24gbmFtZXMgaW50byBzeW1ib2wgY2hhcmFjdGVycy5cblxuICAgIHZhciBleHByZXNzaW9uID0gYnVpbGRIVE1MX2J1aWxkRXhwcmVzc2lvbihib2R5LCBvcHRpb25zLndpdGhGb250KFwibWF0aHJtXCIpLCB0cnVlKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwcmVzc2lvbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoaWxkID0gZXhwcmVzc2lvbltpXTtcblxuICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgZG9tVHJlZV9TeW1ib2xOb2RlKSB7XG4gICAgICAgIC8vIFBlciBhbXNvcG4gcGFja2FnZSxcbiAgICAgICAgLy8gY2hhbmdlIG1pbnVzIHRvIGh5cGhlbiBhbmQgXFxhc3QgdG8gYXN0ZXJpc2tcbiAgICAgICAgY2hpbGQudGV4dCA9IGNoaWxkLnRleHQucmVwbGFjZSgvXFx1MjIxMi8sIFwiLVwiKS5yZXBsYWNlKC9cXHUyMjE3LywgXCIqXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGJhc2UgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3BcIl0sIGV4cHJlc3Npb24sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIGJhc2UgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3BcIl0sIFtdLCBvcHRpb25zKTtcbiAgfVxuXG4gIGlmIChoYXNMaW1pdHMpIHtcbiAgICByZXR1cm4gYXNzZW1ibGVTdXBTdWJfYXNzZW1ibGVTdXBTdWIoYmFzZSwgc3VwR3JvdXAsIHN1Ykdyb3VwLCBvcHRpb25zLCBvcHRpb25zLnN0eWxlLCAwLCAwKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTtcbiAgfVxufTtcblxudmFyIG9wZXJhdG9ybmFtZV9tYXRobWxCdWlsZGVyID0gZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAvLyBUaGUgc3RlcHMgdGFrZW4gaGVyZSBhcmUgc2ltaWxhciB0byB0aGUgaHRtbCB2ZXJzaW9uLlxuICB2YXIgZXhwcmVzc2lvbiA9IGJ1aWxkTWF0aE1MX2J1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zLndpdGhGb250KFwibWF0aHJtXCIpKTsgLy8gSXMgZXhwcmVzc2lvbiBhIHN0cmluZyBvciBoYXMgaXQgc29tZXRoaW5nIGxpa2UgYSBmcmFjdGlvbj9cblxuICB2YXIgaXNBbGxTdHJpbmcgPSB0cnVlOyAvLyBkZWZhdWx0XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9uLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG5vZGUgPSBleHByZXNzaW9uW2ldO1xuXG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBtYXRoTUxUcmVlLlNwYWNlTm9kZSkgey8vIERvIG5vdGhpbmdcbiAgICB9IGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBtYXRoTUxUcmVlLk1hdGhOb2RlKSB7XG4gICAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgICBjYXNlIFwibWlcIjpcbiAgICAgICAgY2FzZSBcIm1uXCI6XG4gICAgICAgIGNhc2UgXCJtc1wiOlxuICAgICAgICBjYXNlIFwibXNwYWNlXCI6XG4gICAgICAgIGNhc2UgXCJtdGV4dFwiOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyBEbyBub3RoaW5nIHlldC5cblxuICAgICAgICBjYXNlIFwibW9cIjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBub2RlLmNoaWxkcmVuWzBdO1xuXG4gICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgY2hpbGQgaW5zdGFuY2VvZiBtYXRoTUxUcmVlLlRleHROb2RlKSB7XG4gICAgICAgICAgICAgIGNoaWxkLnRleHQgPSBjaGlsZC50ZXh0LnJlcGxhY2UoL1xcdTIyMTIvLCBcIi1cIikucmVwbGFjZSgvXFx1MjIxNy8sIFwiKlwiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlzQWxsU3RyaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlzQWxsU3RyaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzQWxsU3RyaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzQWxsU3RyaW5nKSB7XG4gICAgLy8gV3JpdGUgYSBzaW5nbGUgVGV4dE5vZGUgaW5zdGVhZCBvZiBtdWx0aXBsZSBuZXN0ZWQgdGFncy5cbiAgICB2YXIgd29yZCA9IGV4cHJlc3Npb24ubWFwKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICByZXR1cm4gbm9kZS50b1RleHQoKTtcbiAgICB9KS5qb2luKFwiXCIpO1xuICAgIGV4cHJlc3Npb24gPSBbbmV3IG1hdGhNTFRyZWUuVGV4dE5vZGUod29yZCldO1xuICB9XG5cbiAgdmFyIGlkZW50aWZpZXIgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1pXCIsIGV4cHJlc3Npb24pO1xuICBpZGVudGlmaWVyLnNldEF0dHJpYnV0ZShcIm1hdGh2YXJpYW50XCIsIFwibm9ybWFsXCIpOyAvLyBcXHUyMDYxIGlzIHRoZSBzYW1lIGFzICZBcHBseUZ1bmN0aW9uO1xuICAvLyByZWY6IGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vY2hhcnNldHMvcmVmX2h0bWxfZW50aXRpZXNfYS5hc3BcblxuICB2YXIgb3BlcmF0b3IgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFtidWlsZE1hdGhNTF9tYWtlVGV4dChcIlxcdTIwNjFcIiwgXCJ0ZXh0XCIpXSk7XG5cbiAgaWYgKGdyb3VwLnBhcmVudElzU3VwU3ViKSB7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW2lkZW50aWZpZXIsIG9wZXJhdG9yXSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG1hdGhNTFRyZWUubmV3RG9jdW1lbnRGcmFnbWVudChbaWRlbnRpZmllciwgb3BlcmF0b3JdKTtcbiAgfVxufTsgLy8gXFxvcGVyYXRvcm5hbWVcbi8vIGFtc29wbi5kdHg6IFxcbWF0aG9weyMxXFxrZXJuXFx6QFxcb3BlcmF0b3JAZm9udCMzfVxcbmV3bWNvZGVzQFxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcGVyYXRvcm5hbWVcIixcbiAgbmFtZXM6IFtcIlxcXFxvcGVyYXRvcm5hbWVcIiwgXCJcXFxcb3BlcmF0b3JuYW1lKlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcGVyYXRvcm5hbWVcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keTogZGVmaW5lRnVuY3Rpb25fb3JkYXJndW1lbnQoYm9keSksXG4gICAgICBhbHdheXNIYW5kbGVTdXBTdWI6IGZ1bmNOYW1lID09PSBcIlxcXFxvcGVyYXRvcm5hbWUqXCIsXG4gICAgICBsaW1pdHM6IGZhbHNlLFxuICAgICAgcGFyZW50SXNTdXBTdWI6IGZhbHNlXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IG9wZXJhdG9ybmFtZV9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogb3BlcmF0b3JuYW1lX21hdGhtbEJ1aWxkZXJcbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL29yZGdyb3VwLmpzXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uQnVpbGRlcnMoe1xuICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIGlmIChncm91cC5zZW1pc2ltcGxlKSB7XG4gICAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUZyYWdtZW50KGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucywgZmFsc2UpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiXSwgYnVpbGRIVE1MX2J1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zLCB0cnVlKSwgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYnVpbGRFeHByZXNzaW9uUm93KGdyb3VwLmJvZHksIG9wdGlvbnMsIHRydWUpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9vdmVybGluZS5qc1xuXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvdmVybGluZVwiLFxuICBuYW1lczogW1wiXFxcXG92ZXJsaW5lXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvdmVybGluZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5OiBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gT3ZlcmxpbmVzIGFyZSBoYW5kbGVkIGluIHRoZSBUZVhib29rIHBnIDQ0MywgUnVsZSA5LlxuICAgIC8vIEJ1aWxkIHRoZSBpbm5lciBncm91cCBpbiB0aGUgY3JhbXBlZCBzdHlsZS5cbiAgICB2YXIgaW5uZXJHcm91cCA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMuaGF2aW5nQ3JhbXBlZFN0eWxlKCkpOyAvLyBDcmVhdGUgdGhlIGxpbmUgYWJvdmUgdGhlIGJvZHlcblxuICAgIHZhciBsaW5lID0gYnVpbGRDb21tb24ubWFrZUxpbmVTcGFuKFwib3ZlcmxpbmUtbGluZVwiLCBvcHRpb25zKTsgLy8gR2VuZXJhdGUgdGhlIHZsaXN0LCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBrZXJuc1xuXG4gICAgdmFyIGRlZmF1bHRSdWxlVGhpY2tuZXNzID0gb3B0aW9ucy5mb250TWV0cmljcygpLmRlZmF1bHRSdWxlVGhpY2tuZXNzO1xuICAgIHZhciB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBpbm5lckdyb3VwXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiAzICogZGVmYXVsdFJ1bGVUaGlja25lc3NcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGxpbmVcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IGRlZmF1bHRSdWxlVGhpY2tuZXNzXG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCIsIFwib3ZlcmxpbmVcIl0sIFt2bGlzdF0sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG9wZXJhdG9yID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbbmV3IG1hdGhNTFRyZWUuVGV4dE5vZGUoXCJcXHUyMDNFXCIpXSk7XG4gICAgb3BlcmF0b3Iuc2V0QXR0cmlidXRlKFwic3RyZXRjaHlcIiwgXCJ0cnVlXCIpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb3ZlclwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKSwgb3BlcmF0b3JdKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImFjY2VudFwiLCBcInRydWVcIik7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3BoYW50b20uanNcblxuXG5cblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwicGhhbnRvbVwiLFxuICBuYW1lczogW1wiXFxcXHBoYW50b21cIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwicGhhbnRvbVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5OiBkZWZpbmVGdW5jdGlvbl9vcmRhcmd1bWVudChib2R5KVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBlbGVtZW50cyA9IGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucy53aXRoUGhhbnRvbSgpLCBmYWxzZSk7IC8vIFxccGhhbnRvbSBpc24ndCBzdXBwb3NlZCB0byBhZmZlY3QgdGhlIGVsZW1lbnRzIGl0IGNvbnRhaW5zLlxuICAgIC8vIFNlZSBcImNvbG9yXCIgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlRnJhZ21lbnQoZWxlbWVudHMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIGlubmVyID0gYnVpbGRNYXRoTUxfYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMpO1xuICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1waGFudG9tXCIsIGlubmVyKTtcbiAgfVxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaHBoYW50b21cIixcbiAgbmFtZXM6IFtcIlxcXFxocGhhbnRvbVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmMiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmMi5wYXJzZXI7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImhwaGFudG9tXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IGJvZHlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtdLCBbYnVpbGRIVE1MX2J1aWxkR3JvdXAoZ3JvdXAuYm9keSwgb3B0aW9ucy53aXRoUGhhbnRvbSgpKV0pO1xuICAgIG5vZGUuaGVpZ2h0ID0gMDtcbiAgICBub2RlLmRlcHRoID0gMDtcblxuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbm9kZS5jaGlsZHJlbltpXS5oZWlnaHQgPSAwO1xuICAgICAgICBub2RlLmNoaWxkcmVuW2ldLmRlcHRoID0gMDtcbiAgICAgIH1cbiAgICB9IC8vIFNlZSBzbWFzaCBmb3IgY29tbWVudCByZTogdXNlIG9mIG1ha2VWTGlzdFxuXG5cbiAgICBub2RlID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJmaXJzdEJhc2VsaW5lXCIsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IG5vZGVcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7IC8vIEZvciBzcGFjaW5nLCBUZVggdHJlYXRzIFxcc21hc2ggYXMgYSBtYXRoIGdyb3VwIChzYW1lIHNwYWNpbmcgYXMgb3JkKS5cblxuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCJdLCBbbm9kZV0sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIGlubmVyID0gYnVpbGRNYXRoTUxfYnVpbGRFeHByZXNzaW9uKGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGdyb3VwLmJvZHkpLCBvcHRpb25zKTtcbiAgICB2YXIgcGhhbnRvbSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBoYW50b21cIiwgaW5uZXIpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcGFkZGVkXCIsIFtwaGFudG9tXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgXCIwcHhcIik7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJkZXB0aFwiLCBcIjBweFwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidnBoYW50b21cIixcbiAgbmFtZXM6IFtcIlxcXFx2cGhhbnRvbVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmMywgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmMy5wYXJzZXI7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInZwaGFudG9tXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IGJvZHlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgaW5uZXIgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJpbm5lclwiXSwgW2J1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMud2l0aFBoYW50b20oKSldKTtcbiAgICB2YXIgZml4ID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiZml4XCJdLCBbXSk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJybGFwXCJdLCBbaW5uZXIsIGZpeF0sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIGlubmVyID0gYnVpbGRNYXRoTUxfYnVpbGRFeHByZXNzaW9uKGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGdyb3VwLmJvZHkpLCBvcHRpb25zKTtcbiAgICB2YXIgcGhhbnRvbSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBoYW50b21cIiwgaW5uZXIpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcGFkZGVkXCIsIFtwaGFudG9tXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBcIjBweFwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvcmFpc2Vib3guanNcblxuXG5cblxuXG5cbiAvLyBCb3ggbWFuaXB1bGF0aW9uXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJyYWlzZWJveFwiLFxuICBuYW1lczogW1wiXFxcXHJhaXNlYm94XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYXJnVHlwZXM6IFtcInNpemVcIiwgXCJoYm94XCJdLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyO1xuICAgIHZhciBhbW91bnQgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcInNpemVcIikudmFsdWU7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzFdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInJhaXNlYm94XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGR5OiBhbW91bnQsXG4gICAgICBib2R5OiBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIGJvZHkgPSBidWlsZEhUTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKTtcbiAgICB2YXIgZHkgPSB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLmR5LCBvcHRpb25zKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJzaGlmdFwiLFxuICAgICAgcG9zaXRpb25EYXRhOiAtZHksXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJvZHlcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuICAgIHZhciBkeSA9IGdyb3VwLmR5Lm51bWJlciArIGdyb3VwLmR5LnVuaXQ7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ2b2Zmc2V0XCIsIGR5KTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvcnVsZS5qc1xuXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJydWxlXCIsXG4gIG5hbWVzOiBbXCJcXFxccnVsZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyLFxuICAgIG51bU9wdGlvbmFsQXJnczogMSxcbiAgICBhcmdUeXBlczogW1wic2l6ZVwiLCBcInNpemVcIiwgXCJzaXplXCJdXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICB2YXIgc2hpZnQgPSBvcHRBcmdzWzBdO1xuICAgIHZhciB3aWR0aCA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwic2l6ZVwiKTtcbiAgICB2YXIgaGVpZ2h0ID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1sxXSwgXCJzaXplXCIpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInJ1bGVcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgc2hpZnQ6IHNoaWZ0ICYmIGFzc2VydE5vZGVUeXBlKHNoaWZ0LCBcInNpemVcIikudmFsdWUsXG4gICAgICB3aWR0aDogd2lkdGgudmFsdWUsXG4gICAgICBoZWlnaHQ6IGhlaWdodC52YWx1ZVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIE1ha2UgYW4gZW1wdHkgc3BhbiBmb3IgdGhlIHJ1bGVcbiAgICB2YXIgcnVsZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJydWxlXCJdLCBbXSwgb3B0aW9ucyk7IC8vIENhbGN1bGF0ZSB0aGUgc2hpZnQsIHdpZHRoLCBhbmQgaGVpZ2h0IG9mIHRoZSBydWxlLCBhbmQgYWNjb3VudCBmb3IgdW5pdHNcblxuICAgIHZhciB3aWR0aCA9IHVuaXRzX2NhbGN1bGF0ZVNpemUoZ3JvdXAud2lkdGgsIG9wdGlvbnMpO1xuICAgIHZhciBoZWlnaHQgPSB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLmhlaWdodCwgb3B0aW9ucyk7XG4gICAgdmFyIHNoaWZ0ID0gZ3JvdXAuc2hpZnQgPyB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLnNoaWZ0LCBvcHRpb25zKSA6IDA7IC8vIFN0eWxlIHRoZSBydWxlIHRvIHRoZSByaWdodCBzaXplXG5cbiAgICBydWxlLnN0eWxlLmJvcmRlclJpZ2h0V2lkdGggPSB3aWR0aCArIFwiZW1cIjtcbiAgICBydWxlLnN0eWxlLmJvcmRlclRvcFdpZHRoID0gaGVpZ2h0ICsgXCJlbVwiO1xuICAgIHJ1bGUuc3R5bGUuYm90dG9tID0gc2hpZnQgKyBcImVtXCI7IC8vIFJlY29yZCB0aGUgaGVpZ2h0IGFuZCB3aWR0aFxuXG4gICAgcnVsZS53aWR0aCA9IHdpZHRoO1xuICAgIHJ1bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgc2hpZnQ7XG4gICAgcnVsZS5kZXB0aCA9IC1zaGlmdDsgLy8gRm9udCBzaXplIGlzIHRoZSBudW1iZXIgbGFyZ2UgZW5vdWdoIHRoYXQgdGhlIGJyb3dzZXIgd2lsbFxuICAgIC8vIHJlc2VydmUgYXQgbGVhc3QgYGFic0hlaWdodGAgc3BhY2UgYWJvdmUgdGhlIGJhc2VsaW5lLlxuICAgIC8vIFRoZSAxLjEyNSBmYWN0b3Igd2FzIGVtcGlyaWNhbGx5IGRldGVybWluZWRcblxuICAgIHJ1bGUubWF4Rm9udFNpemUgPSBoZWlnaHQgKiAxLjEyNSAqIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgcmV0dXJuIHJ1bGU7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgd2lkdGggPSB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLndpZHRoLCBvcHRpb25zKTtcbiAgICB2YXIgaGVpZ2h0ID0gdW5pdHNfY2FsY3VsYXRlU2l6ZShncm91cC5oZWlnaHQsIG9wdGlvbnMpO1xuICAgIHZhciBzaGlmdCA9IGdyb3VwLnNoaWZ0ID8gdW5pdHNfY2FsY3VsYXRlU2l6ZShncm91cC5zaGlmdCwgb3B0aW9ucykgOiAwO1xuICAgIHZhciBjb2xvciA9IG9wdGlvbnMuY29sb3IgJiYgb3B0aW9ucy5nZXRDb2xvcigpIHx8IFwiYmxhY2tcIjtcbiAgICB2YXIgcnVsZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXNwYWNlXCIpO1xuICAgIHJ1bGUuc2V0QXR0cmlidXRlKFwibWF0aGJhY2tncm91bmRcIiwgY29sb3IpO1xuICAgIHJ1bGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgd2lkdGggKyBcImVtXCIpO1xuICAgIHJ1bGUuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGhlaWdodCArIFwiZW1cIik7XG4gICAgdmFyIHdyYXBwZXIgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1wYWRkZWRcIiwgW3J1bGVdKTtcblxuICAgIGlmIChzaGlmdCA+PSAwKSB7XG4gICAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBcIitcIiArIHNoaWZ0ICsgXCJlbVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgc2hpZnQgKyBcImVtXCIpO1xuICAgICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoXCJkZXB0aFwiLCBcIitcIiArIC1zaGlmdCArIFwiZW1cIik7XG4gICAgfVxuXG4gICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoXCJ2b2Zmc2V0XCIsIHNoaWZ0ICsgXCJlbVwiKTtcbiAgICByZXR1cm4gd3JhcHBlcjtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvc2l6aW5nLmpzXG5cblxuXG5cblxuZnVuY3Rpb24gc2l6aW5nR3JvdXAodmFsdWUsIG9wdGlvbnMsIGJhc2VPcHRpb25zKSB7XG4gIHZhciBpbm5lciA9IGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24odmFsdWUsIG9wdGlvbnMsIGZhbHNlKTtcbiAgdmFyIG11bHRpcGxpZXIgPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gYmFzZU9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7IC8vIEFkZCBzaXplLXJlc2V0dGluZyBjbGFzc2VzIHRvIHRoZSBpbm5lciBsaXN0IGFuZCBzZXQgbWF4Rm9udFNpemVcbiAgLy8gbWFudWFsbHkuIEhhbmRsZSBuZXN0ZWQgc2l6ZSBjaGFuZ2VzLlxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaW5uZXIubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcG9zID0gaW5uZXJbaV0uY2xhc3Nlcy5pbmRleE9mKFwic2l6aW5nXCIpO1xuXG4gICAgaWYgKHBvcyA8IDApIHtcbiAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGlubmVyW2ldLmNsYXNzZXMsIG9wdGlvbnMuc2l6aW5nQ2xhc3NlcyhiYXNlT3B0aW9ucykpO1xuICAgIH0gZWxzZSBpZiAoaW5uZXJbaV0uY2xhc3Nlc1twb3MgKyAxXSA9PT0gXCJyZXNldC1zaXplXCIgKyBvcHRpb25zLnNpemUpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBuZXN0ZWQgc2l6ZSBjaGFuZ2U6IGUuZy4sIGlubmVyW2ldIGlzIHRoZSBcImJcIiBpblxuICAgICAgLy8gYFxcSHVnZSBhIFxcc21hbGwgYmAuIE92ZXJyaWRlIHRoZSBvbGQgc2l6ZSAodGhlIGByZXNldC1gIGNsYXNzKVxuICAgICAgLy8gYnV0IG5vdCB0aGUgbmV3IHNpemUuXG4gICAgICBpbm5lcltpXS5jbGFzc2VzW3BvcyArIDFdID0gXCJyZXNldC1zaXplXCIgKyBiYXNlT3B0aW9ucy5zaXplO1xuICAgIH1cblxuICAgIGlubmVyW2ldLmhlaWdodCAqPSBtdWx0aXBsaWVyO1xuICAgIGlubmVyW2ldLmRlcHRoICo9IG11bHRpcGxpZXI7XG4gIH1cblxuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUZyYWdtZW50KGlubmVyKTtcbn1cbnZhciBzaXplRnVuY3MgPSBbXCJcXFxcdGlueVwiLCBcIlxcXFxzaXhwdHNpemVcIiwgXCJcXFxcc2NyaXB0c2l6ZVwiLCBcIlxcXFxmb290bm90ZXNpemVcIiwgXCJcXFxcc21hbGxcIiwgXCJcXFxcbm9ybWFsc2l6ZVwiLCBcIlxcXFxsYXJnZVwiLCBcIlxcXFxMYXJnZVwiLCBcIlxcXFxMQVJHRVwiLCBcIlxcXFxodWdlXCIsIFwiXFxcXEh1Z2VcIl07XG52YXIgc2l6aW5nX2h0bWxCdWlsZGVyID0gZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgLy8gSGFuZGxlIHNpemluZyBvcGVyYXRvcnMgbGlrZSBcXEh1Z2UuIFJlYWwgVGVYIGRvZXNuJ3QgYWN0dWFsbHkgYWxsb3dcbiAgLy8gdGhlc2UgZnVuY3Rpb25zIGluc2lkZSBvZiBtYXRoIGV4cHJlc3Npb25zLCBzbyB3ZSBkbyBzb21lIHNwZWNpYWxcbiAgLy8gaGFuZGxpbmcuXG4gIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTaXplKGdyb3VwLnNpemUpO1xuICByZXR1cm4gc2l6aW5nR3JvdXAoZ3JvdXAuYm9keSwgbmV3T3B0aW9ucywgb3B0aW9ucyk7XG59O1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInNpemluZ1wiLFxuICBuYW1lczogc2l6ZUZ1bmNzLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgYnJlYWtPblRva2VuVGV4dCA9IF9yZWYuYnJlYWtPblRva2VuVGV4dCxcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lLFxuICAgICAgICBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICB2YXIgYm9keSA9IHBhcnNlci5wYXJzZUV4cHJlc3Npb24oZmFsc2UsIGJyZWFrT25Ub2tlblRleHQpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInNpemluZ1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICAvLyBGaWd1cmUgb3V0IHdoYXQgc2l6ZSB0byB1c2UgYmFzZWQgb24gdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIGFib3ZlXG4gICAgICBzaXplOiBzaXplRnVuY3MuaW5kZXhPZihmdW5jTmFtZSkgKyAxLFxuICAgICAgYm9keTogYm9keVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBzaXppbmdfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU2l6ZShncm91cC5zaXplKTtcbiAgICB2YXIgaW5uZXIgPSBidWlsZE1hdGhNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgbmV3T3B0aW9ucyk7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1zdHlsZVwiLCBpbm5lcik7IC8vIFRPRE8oZW1pbHkpOiBUaGlzIGRvZXNuJ3QgcHJvZHVjZSB0aGUgY29ycmVjdCBzaXplIGZvciBuZXN0ZWQgc2l6ZVxuICAgIC8vIGNoYW5nZXMsIGJlY2F1c2Ugd2UgZG9uJ3Qga2VlcCBzdGF0ZSBvZiB3aGF0IHN0eWxlIHdlJ3JlIGN1cnJlbnRseVxuICAgIC8vIGluLCBzbyB3ZSBjYW4ndCByZXNldCB0aGUgc2l6ZSB0byBub3JtYWwgYmVmb3JlIGNoYW5naW5nIGl0LiAgTm93XG4gICAgLy8gdGhhdCB3ZSdyZSBwYXNzaW5nIGFuIG9wdGlvbnMgcGFyYW1ldGVyIHdlIHNob3VsZCBiZSBhYmxlIHRvIGZpeFxuICAgIC8vIHRoaXMuXG5cbiAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGhzaXplXCIsIG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXIgKyBcImVtXCIpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9zbWFzaC5qc1xuLy8gc21hc2gsIHdpdGggb3B0aW9uYWwgW3RiXSwgYXMgaW4gQU1TXG5cblxuXG5cblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwic21hc2hcIixcbiAgbmFtZXM6IFtcIlxcXFxzbWFzaFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIG51bU9wdGlvbmFsQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICB2YXIgc21hc2hIZWlnaHQgPSBmYWxzZTtcbiAgICB2YXIgc21hc2hEZXB0aCA9IGZhbHNlO1xuICAgIHZhciB0YkFyZyA9IG9wdEFyZ3NbMF0gJiYgYXNzZXJ0Tm9kZVR5cGUob3B0QXJnc1swXSwgXCJvcmRncm91cFwiKTtcblxuICAgIGlmICh0YkFyZykge1xuICAgICAgLy8gT3B0aW9uYWwgW3RiXSBhcmd1bWVudCBpcyBlbmdhZ2VkLlxuICAgICAgLy8gcmVmOiBhbXNtYXRoOiBcXHJlbmV3Y29tbWFuZHtcXHNtYXNofVsxXVt0Yl17JVxuICAgICAgLy8gICAgICAgICAgICAgICBkZWZcXG1iQHR7XFxodH1cXGRlZlxcbWJAYntcXGRwfVxcZGVmXFxtYkB0YntcXGh0XFx6QFxcekBcXGRwfSVcbiAgICAgIHZhciBsZXR0ZXIgPSBcIlwiO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRiQXJnLmJvZHkubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIG5vZGUgPSB0YkFyZy5ib2R5W2ldOyAvLyAkRmxvd0ZpeE1lOiBOb3QgZXZlcnkgbm9kZSB0eXBlIGhhcyBhIGB0ZXh0YCBwcm9wZXJ0eS5cblxuICAgICAgICBsZXR0ZXIgPSBub2RlLnRleHQ7XG5cbiAgICAgICAgaWYgKGxldHRlciA9PT0gXCJ0XCIpIHtcbiAgICAgICAgICBzbWFzaEhlaWdodCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAobGV0dGVyID09PSBcImJcIikge1xuICAgICAgICAgIHNtYXNoRGVwdGggPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNtYXNoSGVpZ2h0ID0gZmFsc2U7XG4gICAgICAgICAgc21hc2hEZXB0aCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNtYXNoSGVpZ2h0ID0gdHJ1ZTtcbiAgICAgIHNtYXNoRGVwdGggPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzbWFzaFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5OiBib2R5LFxuICAgICAgc21hc2hIZWlnaHQ6IHNtYXNoSGVpZ2h0LFxuICAgICAgc21hc2hEZXB0aDogc21hc2hEZXB0aFxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW10sIFtidWlsZEhUTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuXG4gICAgaWYgKCFncm91cC5zbWFzaEhlaWdodCAmJiAhZ3JvdXAuc21hc2hEZXB0aCkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgaWYgKGdyb3VwLnNtYXNoSGVpZ2h0KSB7XG4gICAgICBub2RlLmhlaWdodCA9IDA7IC8vIEluIG9yZGVyIHRvIGluZmx1ZW5jZSBtYWtlVkxpc3QsIHdlIGhhdmUgdG8gcmVzZXQgdGhlIGNoaWxkcmVuLlxuXG4gICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBub2RlLmNoaWxkcmVuW2ldLmhlaWdodCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JvdXAuc21hc2hEZXB0aCkge1xuICAgICAgbm9kZS5kZXB0aCA9IDA7XG5cbiAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgIG5vZGUuY2hpbGRyZW5bX2ldLmRlcHRoID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gQXQgdGhpcyBwb2ludCwgd2UndmUgcmVzZXQgdGhlIFRlWC1saWtlIGhlaWdodCBhbmQgZGVwdGggdmFsdWVzLlxuICAgIC8vIEJ1dCB0aGUgc3BhbiBzdGlsbCBoYXMgYW4gSFRNTCBsaW5lIGhlaWdodC5cbiAgICAvLyBtYWtlVkxpc3QgYXBwbGllcyBcImRpc3BsYXk6IHRhYmxlLWNlbGxcIiwgd2hpY2ggcHJldmVudHMgdGhlIGJyb3dzZXJcbiAgICAvLyBmcm9tIGFjdGluZyBvbiB0aGF0IGxpbmUgaGVpZ2h0LiBTbyB3ZSdsbCBjYWxsIG1ha2VWTGlzdCBub3cuXG5cblxuICAgIHZhciBzbWFzaGVkTm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBub2RlXG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpOyAvLyBGb3Igc3BhY2luZywgVGVYIHRyZWF0cyBcXGhwaGFudG9tIGFzIGEgbWF0aCBncm91cCAoc2FtZSBzcGFjaW5nIGFzIG9yZCkuXG5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiXSwgW3NtYXNoZWROb2RlXSwgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuXG4gICAgaWYgKGdyb3VwLnNtYXNoSGVpZ2h0KSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBcIjBweFwiKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JvdXAuc21hc2hEZXB0aCkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJkZXB0aFwiLCBcIjBweFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvc3FydC5qc1xuXG5cblxuXG5cblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwic3FydFwiLFxuICBuYW1lczogW1wiXFxcXHNxcnRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBudW1PcHRpb25hbEFyZ3M6IDFcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzLCBvcHRBcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyO1xuICAgIHZhciBpbmRleCA9IG9wdEFyZ3NbMF07XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInNxcnRcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keTogYm9keSxcbiAgICAgIGluZGV4OiBpbmRleFxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIFNxdWFyZSByb290cyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBwZy4gNDQzLCBSdWxlIDExLlxuICAgIC8vIEZpcnN0LCB3ZSBkbyB0aGUgc2FtZSBzdGVwcyBhcyBpbiBvdmVybGluZSB0byBidWlsZCB0aGUgaW5uZXIgZ3JvdXBcbiAgICAvLyBhbmQgbGluZVxuICAgIHZhciBpbm5lciA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMuaGF2aW5nQ3JhbXBlZFN0eWxlKCkpO1xuXG4gICAgaWYgKGlubmVyLmhlaWdodCA9PT0gMCkge1xuICAgICAgLy8gUmVuZGVyIGEgc21hbGwgc3VyZC5cbiAgICAgIGlubmVyLmhlaWdodCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS54SGVpZ2h0O1xuICAgIH0gLy8gU29tZSBncm91cHMgY2FuIHJldHVybiBkb2N1bWVudCBmcmFnbWVudHMuICBIYW5kbGUgdGhvc2UgYnkgd3JhcHBpbmdcbiAgICAvLyB0aGVtIGluIGEgc3Bhbi5cblxuXG4gICAgaW5uZXIgPSBidWlsZENvbW1vbi53cmFwRnJhZ21lbnQoaW5uZXIsIG9wdGlvbnMpOyAvLyBDYWxjdWxhdGUgdGhlIG1pbmltdW0gc2l6ZSBmb3IgdGhlIFxcc3VyZCBkZWxpbWl0ZXJcblxuICAgIHZhciBtZXRyaWNzID0gb3B0aW9ucy5mb250TWV0cmljcygpO1xuICAgIHZhciB0aGV0YSA9IG1ldHJpY3MuZGVmYXVsdFJ1bGVUaGlja25lc3M7XG4gICAgdmFyIHBoaSA9IHRoZXRhO1xuXG4gICAgaWYgKG9wdGlvbnMuc3R5bGUuaWQgPCBzcmNfU3R5bGUuVEVYVC5pZCkge1xuICAgICAgcGhpID0gb3B0aW9ucy5mb250TWV0cmljcygpLnhIZWlnaHQ7XG4gICAgfSAvLyBDYWxjdWxhdGUgdGhlIGNsZWFyYW5jZSBiZXR3ZWVuIHRoZSBib2R5IGFuZCBsaW5lXG5cblxuICAgIHZhciBsaW5lQ2xlYXJhbmNlID0gdGhldGEgKyBwaGkgLyA0O1xuICAgIHZhciBtaW5EZWxpbWl0ZXJIZWlnaHQgPSBpbm5lci5oZWlnaHQgKyBpbm5lci5kZXB0aCArIGxpbmVDbGVhcmFuY2UgKyB0aGV0YTsgLy8gQ3JlYXRlIGEgc3FydCBTVkcgb2YgdGhlIHJlcXVpcmVkIG1pbmltdW0gc2l6ZVxuXG4gICAgdmFyIF9kZWxpbWl0ZXIkc3FydEltYWdlID0gZGVsaW1pdGVyLnNxcnRJbWFnZShtaW5EZWxpbWl0ZXJIZWlnaHQsIG9wdGlvbnMpLFxuICAgICAgICBpbWcgPSBfZGVsaW1pdGVyJHNxcnRJbWFnZS5zcGFuLFxuICAgICAgICBydWxlV2lkdGggPSBfZGVsaW1pdGVyJHNxcnRJbWFnZS5ydWxlV2lkdGgsXG4gICAgICAgIGFkdmFuY2VXaWR0aCA9IF9kZWxpbWl0ZXIkc3FydEltYWdlLmFkdmFuY2VXaWR0aDtcblxuICAgIHZhciBkZWxpbURlcHRoID0gaW1nLmhlaWdodCAtIHJ1bGVXaWR0aDsgLy8gQWRqdXN0IHRoZSBjbGVhcmFuY2UgYmFzZWQgb24gdGhlIGRlbGltaXRlciBzaXplXG5cbiAgICBpZiAoZGVsaW1EZXB0aCA+IGlubmVyLmhlaWdodCArIGlubmVyLmRlcHRoICsgbGluZUNsZWFyYW5jZSkge1xuICAgICAgbGluZUNsZWFyYW5jZSA9IChsaW5lQ2xlYXJhbmNlICsgZGVsaW1EZXB0aCAtIGlubmVyLmhlaWdodCAtIGlubmVyLmRlcHRoKSAvIDI7XG4gICAgfSAvLyBTaGlmdCB0aGUgc3FydCBpbWFnZVxuXG5cbiAgICB2YXIgaW1nU2hpZnQgPSBpbWcuaGVpZ2h0IC0gaW5uZXIuaGVpZ2h0IC0gbGluZUNsZWFyYW5jZSAtIHJ1bGVXaWR0aDtcbiAgICBpbm5lci5zdHlsZS5wYWRkaW5nTGVmdCA9IGFkdmFuY2VXaWR0aCArIFwiZW1cIjsgLy8gT3ZlcmxheSB0aGUgaW1hZ2UgYW5kIHRoZSBhcmd1bWVudC5cblxuICAgIHZhciBib2R5ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJmaXJzdEJhc2VsaW5lXCIsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGlubmVyLFxuICAgICAgICB3cmFwcGVyQ2xhc3NlczogW1wic3ZnLWFsaWduXCJdXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiAtKGlubmVyLmhlaWdodCArIGltZ1NoaWZ0KVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogaW1nXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiBydWxlV2lkdGhcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWdyb3VwLmluZGV4KSB7XG4gICAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcInNxcnRcIl0sIFtib2R5XSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEhhbmRsZSB0aGUgb3B0aW9uYWwgcm9vdCBpbmRleFxuICAgICAgLy8gVGhlIGluZGV4IGlzIGFsd2F5cyBpbiBzY3JpcHRzY3JpcHQgc3R5bGVcbiAgICAgIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShzcmNfU3R5bGUuU0NSSVBUU0NSSVBUKTtcbiAgICAgIHZhciByb290bSA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmluZGV4LCBuZXdPcHRpb25zLCBvcHRpb25zKTsgLy8gVGhlIGFtb3VudCB0aGUgaW5kZXggaXMgc2hpZnRlZCBieS4gVGhpcyBpcyB0YWtlbiBmcm9tIHRoZSBUZVhcbiAgICAgIC8vIHNvdXJjZSwgaW4gdGhlIGRlZmluaXRpb24gb2YgYFxcckBAdGAuXG5cbiAgICAgIHZhciB0b1NoaWZ0ID0gMC42ICogKGJvZHkuaGVpZ2h0IC0gYm9keS5kZXB0aCk7IC8vIEJ1aWxkIGEgVkxpc3Qgd2l0aCB0aGUgc3VwZXJzY3JpcHQgc2hpZnRlZCB1cCBjb3JyZWN0bHlcblxuICAgICAgdmFyIHJvb3RWTGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJzaGlmdFwiLFxuICAgICAgICBwb3NpdGlvbkRhdGE6IC10b1NoaWZ0LFxuICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiByb290bVxuICAgICAgICB9XVxuICAgICAgfSwgb3B0aW9ucyk7IC8vIEFkZCBhIGNsYXNzIHN1cnJvdW5kaW5nIGl0IHNvIHdlIGNhbiBhZGQgb24gdGhlIGFwcHJvcHJpYXRlXG4gICAgICAvLyBrZXJuaW5nXG5cbiAgICAgIHZhciByb290Vkxpc3RXcmFwID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wicm9vdFwiXSwgW3Jvb3RWTGlzdF0pO1xuICAgICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJzcXJ0XCJdLCBbcm9vdFZMaXN0V3JhcCwgYm9keV0sIG9wdGlvbnMpO1xuICAgIH1cbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBib2R5ID0gZ3JvdXAuYm9keSxcbiAgICAgICAgaW5kZXggPSBncm91cC5pbmRleDtcbiAgICByZXR1cm4gaW5kZXggPyBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1yb290XCIsIFtidWlsZE1hdGhNTF9idWlsZEdyb3VwKGJvZHksIG9wdGlvbnMpLCBidWlsZE1hdGhNTF9idWlsZEdyb3VwKGluZGV4LCBvcHRpb25zKV0pIDogbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3FydFwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChib2R5LCBvcHRpb25zKV0pO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9zdHlsaW5nLmpzXG5cblxuXG5cblxudmFyIHN0eWxpbmdfc3R5bGVNYXAgPSB7XG4gIFwiZGlzcGxheVwiOiBzcmNfU3R5bGUuRElTUExBWSxcbiAgXCJ0ZXh0XCI6IHNyY19TdHlsZS5URVhULFxuICBcInNjcmlwdFwiOiBzcmNfU3R5bGUuU0NSSVBULFxuICBcInNjcmlwdHNjcmlwdFwiOiBzcmNfU3R5bGUuU0NSSVBUU0NSSVBUXG59O1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInN0eWxpbmdcIixcbiAgbmFtZXM6IFtcIlxcXFxkaXNwbGF5c3R5bGVcIiwgXCJcXFxcdGV4dHN0eWxlXCIsIFwiXFxcXHNjcmlwdHN0eWxlXCIsIFwiXFxcXHNjcmlwdHNjcmlwdHN0eWxlXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgYnJlYWtPblRva2VuVGV4dCA9IF9yZWYuYnJlYWtPblRva2VuVGV4dCxcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lLFxuICAgICAgICBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICAvLyBwYXJzZSBvdXQgdGhlIGltcGxpY2l0IGJvZHlcbiAgICB2YXIgYm9keSA9IHBhcnNlci5wYXJzZUV4cHJlc3Npb24odHJ1ZSwgYnJlYWtPblRva2VuVGV4dCk7IC8vIFRPRE86IFJlZmFjdG9yIHRvIGF2b2lkIGR1cGxpY2F0aW5nIHN0eWxlTWFwIGluIG11bHRpcGxlIHBsYWNlcyAoZS5nLlxuICAgIC8vIGhlcmUgYW5kIGluIGJ1aWxkSFRNTCBhbmQgZGUtZHVwZSB0aGUgZW51bWVyYXRpb24gb2YgYWxsIHRoZSBzdHlsZXMpLlxuICAgIC8vICRGbG93Rml4TWU6IFRoZSBuYW1lcyBhYm92ZSBleGFjdGx5IG1hdGNoIHRoZSBzdHlsZXMuXG5cbiAgICB2YXIgc3R5bGUgPSBmdW5jTmFtZS5zbGljZSgxLCBmdW5jTmFtZS5sZW5ndGggLSA1KTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzdHlsaW5nXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCBzdHlsZSB0byB1c2UgYnkgcHVsbGluZyBvdXQgdGhlIHN0eWxlIGZyb21cbiAgICAgIC8vIHRoZSBmdW5jdGlvbiBuYW1lXG4gICAgICBzdHlsZTogc3R5bGUsXG4gICAgICBib2R5OiBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gU3R5bGUgY2hhbmdlcyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBvbiBwZy4gNDQyLCBSdWxlIDMuXG4gICAgdmFyIG5ld1N0eWxlID0gc3R5bGluZ19zdHlsZU1hcFtncm91cC5zdHlsZV07XG4gICAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1N0eWxlKG5ld1N0eWxlKS53aXRoRm9udCgnJyk7XG4gICAgcmV0dXJuIHNpemluZ0dyb3VwKGdyb3VwLmJvZHksIG5ld09wdGlvbnMsIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gRmlndXJlIG91dCB3aGF0IHN0eWxlIHdlJ3JlIGNoYW5naW5nIHRvLlxuICAgIHZhciBuZXdTdHlsZSA9IHN0eWxpbmdfc3R5bGVNYXBbZ3JvdXAuc3R5bGVdO1xuICAgIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShuZXdTdHlsZSk7XG4gICAgdmFyIGlubmVyID0gYnVpbGRNYXRoTUxfYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG5ld09wdGlvbnMpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3R5bGVcIiwgaW5uZXIpO1xuICAgIHZhciBzdHlsZUF0dHJpYnV0ZXMgPSB7XG4gICAgICBcImRpc3BsYXlcIjogW1wiMFwiLCBcInRydWVcIl0sXG4gICAgICBcInRleHRcIjogW1wiMFwiLCBcImZhbHNlXCJdLFxuICAgICAgXCJzY3JpcHRcIjogW1wiMVwiLCBcImZhbHNlXCJdLFxuICAgICAgXCJzY3JpcHRzY3JpcHRcIjogW1wiMlwiLCBcImZhbHNlXCJdXG4gICAgfTtcbiAgICB2YXIgYXR0ciA9IHN0eWxlQXR0cmlidXRlc1tncm91cC5zdHlsZV07XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzY3JpcHRsZXZlbFwiLCBhdHRyWzBdKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImRpc3BsYXlzdHlsZVwiLCBhdHRyWzFdKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvc3Vwc3ViLmpzXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyoqXG4gKiBTb21ldGltZXMsIGdyb3VwcyBwZXJmb3JtIHNwZWNpYWwgcnVsZXMgd2hlbiB0aGV5IGhhdmUgc3VwZXJzY3JpcHRzIG9yXG4gKiBzdWJzY3JpcHRzIGF0dGFjaGVkIHRvIHRoZW0uIFRoaXMgZnVuY3Rpb24gbGV0cyB0aGUgYHN1cHN1YmAgZ3JvdXAga25vdyB0aGF0XG4gKiBTb21ldGltZXMsIGdyb3VwcyBwZXJmb3JtIHNwZWNpYWwgcnVsZXMgd2hlbiB0aGV5IGhhdmUgc3VwZXJzY3JpcHRzIG9yXG4gKiBpdHMgaW5uZXIgZWxlbWVudCBzaG91bGQgaGFuZGxlIHRoZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMgaW5zdGVhZCBvZlxuICogaGFuZGxpbmcgdGhlbSBpdHNlbGYuXG4gKi9cbnZhciBzdXBzdWJfaHRtbEJ1aWxkZXJEZWxlZ2F0ZSA9IGZ1bmN0aW9uIGh0bWxCdWlsZGVyRGVsZWdhdGUoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIGJhc2UgPSBncm91cC5iYXNlO1xuXG4gIGlmICghYmFzZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2UgaWYgKGJhc2UudHlwZSA9PT0gXCJvcFwiKSB7XG4gICAgLy8gT3BlcmF0b3JzIGhhbmRsZSBzdXBzdWJzIGRpZmZlcmVudGx5IHdoZW4gdGhleSBoYXZlIGxpbWl0c1xuICAgIC8vIChlLmcuIGBcXGRpc3BsYXlzdHlsZVxcc3VtXzJeM2ApXG4gICAgdmFyIGRlbGVnYXRlID0gYmFzZS5saW1pdHMgJiYgKG9wdGlvbnMuc3R5bGUuc2l6ZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkuc2l6ZSB8fCBiYXNlLmFsd2F5c0hhbmRsZVN1cFN1Yik7XG4gICAgcmV0dXJuIGRlbGVnYXRlID8gb3BfaHRtbEJ1aWxkZXIgOiBudWxsO1xuICB9IGVsc2UgaWYgKGJhc2UudHlwZSA9PT0gXCJvcGVyYXRvcm5hbWVcIikge1xuICAgIHZhciBfZGVsZWdhdGUgPSBiYXNlLmFsd2F5c0hhbmRsZVN1cFN1YiAmJiAob3B0aW9ucy5zdHlsZS5zaXplID09PSBzcmNfU3R5bGUuRElTUExBWS5zaXplIHx8IGJhc2UubGltaXRzKTtcblxuICAgIHJldHVybiBfZGVsZWdhdGUgPyBvcGVyYXRvcm5hbWVfaHRtbEJ1aWxkZXIgOiBudWxsO1xuICB9IGVsc2UgaWYgKGJhc2UudHlwZSA9PT0gXCJhY2NlbnRcIikge1xuICAgIHJldHVybiB1dGlscy5pc0NoYXJhY3RlckJveChiYXNlLmJhc2UpID8gYWNjZW50X2h0bWxCdWlsZGVyIDogbnVsbDtcbiAgfSBlbHNlIGlmIChiYXNlLnR5cGUgPT09IFwiaG9yaXpCcmFjZVwiKSB7XG4gICAgdmFyIGlzU3VwID0gIWdyb3VwLnN1YjtcbiAgICByZXR1cm4gaXNTdXAgPT09IGJhc2UuaXNPdmVyID8gaG9yaXpCcmFjZV9odG1sQnVpbGRlciA6IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07IC8vIFN1cGVyIHNjcmlwdHMgYW5kIHN1YnNjcmlwdHMsIHdob3NlIHByZWNpc2UgcGxhY2VtZW50IGNhbiBkZXBlbmQgb24gb3RoZXJcbi8vIGZ1bmN0aW9ucyB0aGF0IHByZWNlZGUgdGhlbS5cblxuXG5kZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKHtcbiAgdHlwZTogXCJzdXBzdWJcIixcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gU3VwZXJzY3JpcHQgYW5kIHN1YnNjcmlwdHMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgb24gcGFnZVxuICAgIC8vIDQ0NS00NDYsIHJ1bGVzIDE4KGEtZikuXG4gICAgLy8gSGVyZSBpcyB3aGVyZSB3ZSBkZWZlciB0byB0aGUgaW5uZXIgZ3JvdXAgaWYgaXQgc2hvdWxkIGhhbmRsZVxuICAgIC8vIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cyBpdHNlbGYuXG4gICAgdmFyIGJ1aWxkZXJEZWxlZ2F0ZSA9IHN1cHN1Yl9odG1sQnVpbGRlckRlbGVnYXRlKGdyb3VwLCBvcHRpb25zKTtcblxuICAgIGlmIChidWlsZGVyRGVsZWdhdGUpIHtcbiAgICAgIHJldHVybiBidWlsZGVyRGVsZWdhdGUoZ3JvdXAsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZUJhc2UgPSBncm91cC5iYXNlLFxuICAgICAgICB2YWx1ZVN1cCA9IGdyb3VwLnN1cCxcbiAgICAgICAgdmFsdWVTdWIgPSBncm91cC5zdWI7XG4gICAgdmFyIGJhc2UgPSBidWlsZEhUTUxfYnVpbGRHcm91cCh2YWx1ZUJhc2UsIG9wdGlvbnMpO1xuICAgIHZhciBzdXBtO1xuICAgIHZhciBzdWJtO1xuICAgIHZhciBtZXRyaWNzID0gb3B0aW9ucy5mb250TWV0cmljcygpOyAvLyBSdWxlIDE4YVxuXG4gICAgdmFyIHN1cFNoaWZ0ID0gMDtcbiAgICB2YXIgc3ViU2hpZnQgPSAwO1xuICAgIHZhciBpc0NoYXJhY3RlckJveCA9IHZhbHVlQmFzZSAmJiB1dGlscy5pc0NoYXJhY3RlckJveCh2YWx1ZUJhc2UpO1xuXG4gICAgaWYgKHZhbHVlU3VwKSB7XG4gICAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUob3B0aW9ucy5zdHlsZS5zdXAoKSk7XG4gICAgICBzdXBtID0gYnVpbGRIVE1MX2J1aWxkR3JvdXAodmFsdWVTdXAsIG5ld09wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAoIWlzQ2hhcmFjdGVyQm94KSB7XG4gICAgICAgIHN1cFNoaWZ0ID0gYmFzZS5oZWlnaHQgLSBuZXdPcHRpb25zLmZvbnRNZXRyaWNzKCkuc3VwRHJvcCAqIG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXIgLyBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWx1ZVN1Yikge1xuICAgICAgdmFyIF9uZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShvcHRpb25zLnN0eWxlLnN1YigpKTtcblxuICAgICAgc3VibSA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKHZhbHVlU3ViLCBfbmV3T3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgICAgIGlmICghaXNDaGFyYWN0ZXJCb3gpIHtcbiAgICAgICAgc3ViU2hpZnQgPSBiYXNlLmRlcHRoICsgX25ld09wdGlvbnMuZm9udE1ldHJpY3MoKS5zdWJEcm9wICogX25ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXIgLyBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICAgICAgfVxuICAgIH0gLy8gUnVsZSAxOGNcblxuXG4gICAgdmFyIG1pblN1cFNoaWZ0O1xuXG4gICAgaWYgKG9wdGlvbnMuc3R5bGUgPT09IHNyY19TdHlsZS5ESVNQTEFZKSB7XG4gICAgICBtaW5TdXBTaGlmdCA9IG1ldHJpY3Muc3VwMTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuc3R5bGUuY3JhbXBlZCkge1xuICAgICAgbWluU3VwU2hpZnQgPSBtZXRyaWNzLnN1cDM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1pblN1cFNoaWZ0ID0gbWV0cmljcy5zdXAyO1xuICAgIH0gLy8gc2NyaXB0c3BhY2UgaXMgYSBmb250LXNpemUtaW5kZXBlbmRlbnQgc2l6ZSwgc28gc2NhbGUgaXRcbiAgICAvLyBhcHByb3ByaWF0ZWx5IGZvciB1c2UgYXMgdGhlIG1hcmdpblJpZ2h0LlxuXG5cbiAgICB2YXIgbXVsdGlwbGllciA9IG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgdmFyIG1hcmdpblJpZ2h0ID0gMC41IC8gbWV0cmljcy5wdFBlckVtIC8gbXVsdGlwbGllciArIFwiZW1cIjtcbiAgICB2YXIgbWFyZ2luTGVmdCA9IG51bGw7XG5cbiAgICBpZiAoc3VibSkge1xuICAgICAgLy8gU3Vic2NyaXB0cyBzaG91bGRuJ3QgYmUgc2hpZnRlZCBieSB0aGUgYmFzZSdzIGl0YWxpYyBjb3JyZWN0aW9uLlxuICAgICAgLy8gQWNjb3VudCBmb3IgdGhhdCBieSBzaGlmdGluZyB0aGUgc3Vic2NyaXB0IGJhY2sgdGhlIGFwcHJvcHJpYXRlXG4gICAgICAvLyBhbW91bnQuIE5vdGUgd2Ugb25seSBkbyB0aGlzIHdoZW4gdGhlIGJhc2UgaXMgYSBzaW5nbGUgc3ltYm9sLlxuICAgICAgdmFyIGlzT2lpbnQgPSBncm91cC5iYXNlICYmIGdyb3VwLmJhc2UudHlwZSA9PT0gXCJvcFwiICYmIGdyb3VwLmJhc2UubmFtZSAmJiAoZ3JvdXAuYmFzZS5uYW1lID09PSBcIlxcXFxvaWludFwiIHx8IGdyb3VwLmJhc2UubmFtZSA9PT0gXCJcXFxcb2lpaW50XCIpO1xuXG4gICAgICBpZiAoYmFzZSBpbnN0YW5jZW9mIGRvbVRyZWVfU3ltYm9sTm9kZSB8fCBpc09paW50KSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgbWFyZ2luTGVmdCA9IC1iYXNlLml0YWxpYyArIFwiZW1cIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc3Vwc3ViO1xuXG4gICAgaWYgKHN1cG0gJiYgc3VibSkge1xuICAgICAgc3VwU2hpZnQgPSBNYXRoLm1heChzdXBTaGlmdCwgbWluU3VwU2hpZnQsIHN1cG0uZGVwdGggKyAwLjI1ICogbWV0cmljcy54SGVpZ2h0KTtcbiAgICAgIHN1YlNoaWZ0ID0gTWF0aC5tYXgoc3ViU2hpZnQsIG1ldHJpY3Muc3ViMik7XG4gICAgICB2YXIgcnVsZVdpZHRoID0gbWV0cmljcy5kZWZhdWx0UnVsZVRoaWNrbmVzczsgLy8gUnVsZSAxOGVcblxuICAgICAgdmFyIG1heFdpZHRoID0gNCAqIHJ1bGVXaWR0aDtcblxuICAgICAgaWYgKHN1cFNoaWZ0IC0gc3VwbS5kZXB0aCAtIChzdWJtLmhlaWdodCAtIHN1YlNoaWZ0KSA8IG1heFdpZHRoKSB7XG4gICAgICAgIHN1YlNoaWZ0ID0gbWF4V2lkdGggLSAoc3VwU2hpZnQgLSBzdXBtLmRlcHRoKSArIHN1Ym0uaGVpZ2h0O1xuICAgICAgICB2YXIgcHNpID0gMC44ICogbWV0cmljcy54SGVpZ2h0IC0gKHN1cFNoaWZ0IC0gc3VwbS5kZXB0aCk7XG5cbiAgICAgICAgaWYgKHBzaSA+IDApIHtcbiAgICAgICAgICBzdXBTaGlmdCArPSBwc2k7XG4gICAgICAgICAgc3ViU2hpZnQgLT0gcHNpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB2bGlzdEVsZW0gPSBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogc3VibSxcbiAgICAgICAgc2hpZnQ6IHN1YlNoaWZ0LFxuICAgICAgICBtYXJnaW5SaWdodDogbWFyZ2luUmlnaHQsXG4gICAgICAgIG1hcmdpbkxlZnQ6IG1hcmdpbkxlZnRcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHN1cG0sXG4gICAgICAgIHNoaWZ0OiAtc3VwU2hpZnQsXG4gICAgICAgIG1hcmdpblJpZ2h0OiBtYXJnaW5SaWdodFxuICAgICAgfV07XG4gICAgICBzdXBzdWIgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICAgIGNoaWxkcmVuOiB2bGlzdEVsZW1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAoc3VibSkge1xuICAgICAgLy8gUnVsZSAxOGJcbiAgICAgIHN1YlNoaWZ0ID0gTWF0aC5tYXgoc3ViU2hpZnQsIG1ldHJpY3Muc3ViMSwgc3VibS5oZWlnaHQgLSAwLjggKiBtZXRyaWNzLnhIZWlnaHQpO1xuICAgICAgdmFyIF92bGlzdEVsZW0gPSBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogc3VibSxcbiAgICAgICAgbWFyZ2luTGVmdDogbWFyZ2luTGVmdCxcbiAgICAgICAgbWFyZ2luUmlnaHQ6IG1hcmdpblJpZ2h0XG4gICAgICB9XTtcbiAgICAgIHN1cHN1YiA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJzaGlmdFwiLFxuICAgICAgICBwb3NpdGlvbkRhdGE6IHN1YlNoaWZ0LFxuICAgICAgICBjaGlsZHJlbjogX3ZsaXN0RWxlbVxuICAgICAgfSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIGlmIChzdXBtKSB7XG4gICAgICAvLyBSdWxlIDE4YywgZFxuICAgICAgc3VwU2hpZnQgPSBNYXRoLm1heChzdXBTaGlmdCwgbWluU3VwU2hpZnQsIHN1cG0uZGVwdGggKyAwLjI1ICogbWV0cmljcy54SGVpZ2h0KTtcbiAgICAgIHN1cHN1YiA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJzaGlmdFwiLFxuICAgICAgICBwb3NpdGlvbkRhdGE6IC1zdXBTaGlmdCxcbiAgICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogc3VwbSxcbiAgICAgICAgICBtYXJnaW5SaWdodDogbWFyZ2luUmlnaHRcbiAgICAgICAgfV1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzdXBzdWIgbXVzdCBoYXZlIGVpdGhlciBzdXAgb3Igc3ViLlwiKTtcbiAgICB9IC8vIFdyYXAgdGhlIHN1cHN1YiB2bGlzdCBpbiBhIHNwYW4ubXN1cHN1YiB0byByZXNldCB0ZXh0LWFsaWduLlxuXG5cbiAgICB2YXIgbWNsYXNzID0gZ2V0VHlwZU9mRG9tVHJlZShiYXNlLCBcInJpZ2h0XCIpIHx8IFwibW9yZFwiO1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbbWNsYXNzXSwgW2Jhc2UsIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1zdXBzdWJcIl0sIFtzdXBzdWJdKV0sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gSXMgdGhlIGlubmVyIGdyb3VwIGEgcmVsZXZhbnQgaG9yaXpvbmFsIGJyYWNlP1xuICAgIHZhciBpc0JyYWNlID0gZmFsc2U7XG4gICAgdmFyIGlzT3ZlcjtcbiAgICB2YXIgaXNTdXA7XG4gICAgdmFyIGhvcml6QnJhY2UgPSBjaGVja05vZGVUeXBlKGdyb3VwLmJhc2UsIFwiaG9yaXpCcmFjZVwiKTtcblxuICAgIGlmIChob3JpekJyYWNlKSB7XG4gICAgICBpc1N1cCA9ICEhZ3JvdXAuc3VwO1xuXG4gICAgICBpZiAoaXNTdXAgPT09IGhvcml6QnJhY2UuaXNPdmVyKSB7XG4gICAgICAgIGlzQnJhY2UgPSB0cnVlO1xuICAgICAgICBpc092ZXIgPSBob3JpekJyYWNlLmlzT3ZlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JvdXAuYmFzZSAmJiAoZ3JvdXAuYmFzZS50eXBlID09PSBcIm9wXCIgfHwgZ3JvdXAuYmFzZS50eXBlID09PSBcIm9wZXJhdG9ybmFtZVwiKSkge1xuICAgICAgZ3JvdXAuYmFzZS5wYXJlbnRJc1N1cFN1YiA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkcmVuID0gW2J1aWxkTWF0aE1MX2J1aWxkR3JvdXAoZ3JvdXAuYmFzZSwgb3B0aW9ucyldO1xuXG4gICAgaWYgKGdyb3VwLnN1Yikge1xuICAgICAgY2hpbGRyZW4ucHVzaChidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLnN1Yiwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIGlmIChncm91cC5zdXApIHtcbiAgICAgIGNoaWxkcmVuLnB1c2goYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5zdXAsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICB2YXIgbm9kZVR5cGU7XG5cbiAgICBpZiAoaXNCcmFjZSkge1xuICAgICAgbm9kZVR5cGUgPSBpc092ZXIgPyBcIm1vdmVyXCIgOiBcIm11bmRlclwiO1xuICAgIH0gZWxzZSBpZiAoIWdyb3VwLnN1Yikge1xuICAgICAgdmFyIGJhc2UgPSBncm91cC5iYXNlO1xuXG4gICAgICBpZiAoYmFzZSAmJiBiYXNlLnR5cGUgPT09IFwib3BcIiAmJiBiYXNlLmxpbWl0cyAmJiAob3B0aW9ucy5zdHlsZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkgfHwgYmFzZS5hbHdheXNIYW5kbGVTdXBTdWIpKSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtb3ZlclwiO1xuICAgICAgfSBlbHNlIGlmIChiYXNlICYmIGJhc2UudHlwZSA9PT0gXCJvcGVyYXRvcm5hbWVcIiAmJiBiYXNlLmFsd2F5c0hhbmRsZVN1cFN1YiAmJiAoYmFzZS5saW1pdHMgfHwgb3B0aW9ucy5zdHlsZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkpKSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtb3ZlclwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm1zdXBcIjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFncm91cC5zdXApIHtcbiAgICAgIHZhciBfYmFzZSA9IGdyb3VwLmJhc2U7XG5cbiAgICAgIGlmIChfYmFzZSAmJiBfYmFzZS50eXBlID09PSBcIm9wXCIgJiYgX2Jhc2UubGltaXRzICYmIChvcHRpb25zLnN0eWxlID09PSBzcmNfU3R5bGUuRElTUExBWSB8fCBfYmFzZS5hbHdheXNIYW5kbGVTdXBTdWIpKSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtdW5kZXJcIjtcbiAgICAgIH0gZWxzZSBpZiAoX2Jhc2UgJiYgX2Jhc2UudHlwZSA9PT0gXCJvcGVyYXRvcm5hbWVcIiAmJiBfYmFzZS5hbHdheXNIYW5kbGVTdXBTdWIgJiYgKF9iYXNlLmxpbWl0cyB8fCBvcHRpb25zLnN0eWxlID09PSBzcmNfU3R5bGUuRElTUExBWSkpIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm11bmRlclwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm1zdWJcIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9iYXNlMiA9IGdyb3VwLmJhc2U7XG5cbiAgICAgIGlmIChfYmFzZTIgJiYgX2Jhc2UyLnR5cGUgPT09IFwib3BcIiAmJiBfYmFzZTIubGltaXRzICYmIG9wdGlvbnMuc3R5bGUgPT09IHNyY19TdHlsZS5ESVNQTEFZKSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtdW5kZXJvdmVyXCI7XG4gICAgICB9IGVsc2UgaWYgKF9iYXNlMiAmJiBfYmFzZTIudHlwZSA9PT0gXCJvcGVyYXRvcm5hbWVcIiAmJiBfYmFzZTIuYWx3YXlzSGFuZGxlU3VwU3ViICYmIChvcHRpb25zLnN0eWxlID09PSBzcmNfU3R5bGUuRElTUExBWSB8fCBfYmFzZTIubGltaXRzKSkge1xuICAgICAgICBub2RlVHlwZSA9IFwibXVuZGVyb3ZlclwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm1zdWJzdXBcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKG5vZGVUeXBlLCBjaGlsZHJlbik7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3N5bWJvbHNPcC5qc1xuXG5cblxuIC8vIE9wZXJhdG9yIFBhcnNlTm9kZXMgY3JlYXRlZCBpbiBQYXJzZXIuanMgZnJvbSBzeW1ib2wgR3JvdXBzIGluIHNyYy9zeW1ib2xzLmpzLlxuXG5kZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKHtcbiAgdHlwZTogXCJhdG9tXCIsXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYXRoc3ltKGdyb3VwLnRleHQsIGdyb3VwLm1vZGUsIG9wdGlvbnMsIFtcIm1cIiArIGdyb3VwLmZhbWlseV0pO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFtidWlsZE1hdGhNTF9tYWtlVGV4dChncm91cC50ZXh0LCBncm91cC5tb2RlKV0pO1xuXG4gICAgaWYgKGdyb3VwLmZhbWlseSA9PT0gXCJiaW5cIikge1xuICAgICAgdmFyIHZhcmlhbnQgPSBidWlsZE1hdGhNTF9nZXRWYXJpYW50KGdyb3VwLCBvcHRpb25zKTtcblxuICAgICAgaWYgKHZhcmlhbnQgPT09IFwiYm9sZC1pdGFsaWNcIikge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGh2YXJpYW50XCIsIHZhcmlhbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZ3JvdXAuZmFtaWx5ID09PSBcInB1bmN0XCIpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic2VwYXJhdG9yXCIsIFwidHJ1ZVwiKTtcbiAgICB9IGVsc2UgaWYgKGdyb3VwLmZhbWlseSA9PT0gXCJvcGVuXCIgfHwgZ3JvdXAuZmFtaWx5ID09PSBcImNsb3NlXCIpIHtcbiAgICAgIC8vIERlbGltcyBidWlsdCBoZXJlIHNob3VsZCBub3Qgc3RyZXRjaCB2ZXJ0aWNhbGx5LlxuICAgICAgLy8gU2VlIGRlbGltc2l6aW5nLmpzIGZvciBzdHJldGNoeSBkZWxpbXMuXG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcInN0cmV0Y2h5XCIsIFwiZmFsc2VcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3N5bWJvbHNPcmQuanNcblxuXG5cblxuLy8gXCJtYXRob3JkXCIgYW5kIFwidGV4dG9yZFwiIFBhcnNlTm9kZXMgY3JlYXRlZCBpbiBQYXJzZXIuanMgZnJvbSBzeW1ib2wgR3JvdXBzIGluXG52YXIgZGVmYXVsdFZhcmlhbnQgPSB7XG4gIFwibWlcIjogXCJpdGFsaWNcIixcbiAgXCJtblwiOiBcIm5vcm1hbFwiLFxuICBcIm10ZXh0XCI6IFwibm9ybWFsXCJcbn07XG5kZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKHtcbiAgdHlwZTogXCJtYXRob3JkXCIsXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlT3JkKGdyb3VwLCBvcHRpb25zLCBcIm1hdGhvcmRcIik7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibWlcIiwgW2J1aWxkTWF0aE1MX21ha2VUZXh0KGdyb3VwLnRleHQsIGdyb3VwLm1vZGUsIG9wdGlvbnMpXSk7XG4gICAgdmFyIHZhcmlhbnQgPSBidWlsZE1hdGhNTF9nZXRWYXJpYW50KGdyb3VwLCBvcHRpb25zKSB8fCBcIml0YWxpY1wiO1xuXG4gICAgaWYgKHZhcmlhbnQgIT09IGRlZmF1bHRWYXJpYW50W25vZGUudHlwZV0pIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWF0aHZhcmlhbnRcIiwgdmFyaWFudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuZGVmaW5lRnVuY3Rpb25CdWlsZGVycyh7XG4gIHR5cGU6IFwidGV4dG9yZFwiLFxuICBodG1sQnVpbGRlcjogZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZU9yZChncm91cCwgb3B0aW9ucywgXCJ0ZXh0b3JkXCIpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIHRleHQgPSBidWlsZE1hdGhNTF9tYWtlVGV4dChncm91cC50ZXh0LCBncm91cC5tb2RlLCBvcHRpb25zKTtcbiAgICB2YXIgdmFyaWFudCA9IGJ1aWxkTWF0aE1MX2dldFZhcmlhbnQoZ3JvdXAsIG9wdGlvbnMpIHx8IFwibm9ybWFsXCI7XG4gICAgdmFyIG5vZGU7XG5cbiAgICBpZiAoZ3JvdXAubW9kZSA9PT0gJ3RleHQnKSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdGV4dFwiLCBbdGV4dF0pO1xuICAgIH0gZWxzZSBpZiAoL1swLTldLy50ZXN0KGdyb3VwLnRleHQpKSB7XG4gICAgICAvLyBUT0RPKGtldmluYikgbWVyZ2UgYWRqYWNlbnQgPG1uPiBub2Rlc1xuICAgICAgLy8gZG8gaXQgYXMgYSBwb3N0IHByb2Nlc3Npbmcgc3RlcFxuICAgICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW5cIiwgW3RleHRdKTtcbiAgICB9IGVsc2UgaWYgKGdyb3VwLnRleHQgPT09IFwiXFxcXHByaW1lXCIpIHtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFt0ZXh0XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1pXCIsIFt0ZXh0XSk7XG4gICAgfVxuXG4gICAgaWYgKHZhcmlhbnQgIT09IGRlZmF1bHRWYXJpYW50W25vZGUudHlwZV0pIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWF0aHZhcmlhbnRcIiwgdmFyaWFudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3N5bWJvbHNTcGFjaW5nLmpzXG5cblxuXG4gLy8gQSBtYXAgb2YgQ1NTLWJhc2VkIHNwYWNpbmcgZnVuY3Rpb25zIHRvIHRoZWlyIENTUyBjbGFzcy5cblxudmFyIGNzc1NwYWNlID0ge1xuICBcIlxcXFxub2JyZWFrXCI6IFwibm9icmVha1wiLFxuICBcIlxcXFxhbGxvd2JyZWFrXCI6IFwiYWxsb3dicmVha1wiXG59OyAvLyBBIGxvb2t1cCB0YWJsZSB0byBkZXRlcm1pbmUgd2hldGhlciBhIHNwYWNpbmcgZnVuY3Rpb24vc3ltYm9sIHNob3VsZCBiZVxuLy8gdHJlYXRlZCBsaWtlIGEgcmVndWxhciBzcGFjZSBjaGFyYWN0ZXIuICBJZiBhIHN5bWJvbCBvciBjb21tYW5kIGlzIGEga2V5XG4vLyBpbiB0aGlzIHRhYmxlLCB0aGVuIGl0IHNob3VsZCBiZSBhIHJlZ3VsYXIgc3BhY2UgY2hhcmFjdGVyLiAgRnVydGhlcm1vcmUsXG4vLyB0aGUgYXNzb2NpYXRlZCB2YWx1ZSBtYXkgaGF2ZSBhIGBjbGFzc05hbWVgIHNwZWNpZnlpbmcgYW4gZXh0cmEgQ1NTIGNsYXNzXG4vLyB0byBhZGQgdG8gdGhlIGNyZWF0ZWQgYHNwYW5gLlxuXG52YXIgcmVndWxhclNwYWNlID0ge1xuICBcIiBcIjoge30sXG4gIFwiXFxcXCBcIjoge30sXG4gIFwiflwiOiB7XG4gICAgY2xhc3NOYW1lOiBcIm5vYnJlYWtcIlxuICB9LFxuICBcIlxcXFxzcGFjZVwiOiB7fSxcbiAgXCJcXFxcbm9icmVha3NwYWNlXCI6IHtcbiAgICBjbGFzc05hbWU6IFwibm9icmVha1wiXG4gIH1cbn07IC8vIFBhcnNlTm9kZTxcInNwYWNpbmdcIj4gY3JlYXRlZCBpbiBQYXJzZXIuanMgZnJvbSB0aGUgXCJzcGFjaW5nXCIgc3ltYm9sIEdyb3VwcyBpblxuLy8gc3JjL3N5bWJvbHMuanMuXG5cbmRlZmluZUZ1bmN0aW9uQnVpbGRlcnMoe1xuICB0eXBlOiBcInNwYWNpbmdcIixcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgaWYgKHJlZ3VsYXJTcGFjZS5oYXNPd25Qcm9wZXJ0eShncm91cC50ZXh0KSkge1xuICAgICAgdmFyIGNsYXNzTmFtZSA9IHJlZ3VsYXJTcGFjZVtncm91cC50ZXh0XS5jbGFzc05hbWUgfHwgXCJcIjsgLy8gU3BhY2VzIGFyZSBnZW5lcmF0ZWQgYnkgYWRkaW5nIGFuIGFjdHVhbCBzcGFjZS4gRWFjaCBvZiB0aGVzZVxuICAgICAgLy8gdGhpbmdzIGhhcyBhbiBlbnRyeSBpbiB0aGUgc3ltYm9scyB0YWJsZSwgc28gdGhlc2Ugd2lsbCBiZSB0dXJuZWRcbiAgICAgIC8vIGludG8gYXBwcm9wcmlhdGUgb3V0cHV0cy5cblxuICAgICAgaWYgKGdyb3VwLm1vZGUgPT09IFwidGV4dFwiKSB7XG4gICAgICAgIHZhciBvcmQgPSBidWlsZENvbW1vbi5tYWtlT3JkKGdyb3VwLCBvcHRpb25zLCBcInRleHRvcmRcIik7XG4gICAgICAgIG9yZC5jbGFzc2VzLnB1c2goY2xhc3NOYW1lKTtcbiAgICAgICAgcmV0dXJuIG9yZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtc3BhY2VcIiwgY2xhc3NOYW1lXSwgW2J1aWxkQ29tbW9uLm1hdGhzeW0oZ3JvdXAudGV4dCwgZ3JvdXAubW9kZSwgb3B0aW9ucyldLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNzc1NwYWNlLmhhc093blByb3BlcnR5KGdyb3VwLnRleHQpKSB7XG4gICAgICAvLyBTcGFjZXMgYmFzZWQgb24ganVzdCBhIENTUyBjbGFzcy5cbiAgICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtc3BhY2VcIiwgY3NzU3BhY2VbZ3JvdXAudGV4dF1dLCBbXSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlVua25vd24gdHlwZSBvZiBzcGFjZSBcXFwiXCIgKyBncm91cC50ZXh0ICsgXCJcXFwiXCIpO1xuICAgIH1cbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBub2RlO1xuXG4gICAgaWYgKHJlZ3VsYXJTcGFjZS5oYXNPd25Qcm9wZXJ0eShncm91cC50ZXh0KSkge1xuICAgICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRleHRcIiwgW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKFwiXFx4QTBcIildKTtcbiAgICB9IGVsc2UgaWYgKGNzc1NwYWNlLmhhc093blByb3BlcnR5KGdyb3VwLnRleHQpKSB7XG4gICAgICAvLyBDU1MtYmFzZWQgTWF0aE1MIHNwYWNlcyAoXFxub2JyZWFrLCBcXGFsbG93YnJlYWspIGFyZSBpZ25vcmVkXG4gICAgICByZXR1cm4gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3BhY2VcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlVua25vd24gdHlwZSBvZiBzcGFjZSBcXFwiXCIgKyBncm91cC50ZXh0ICsgXCJcXFwiXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy90YWcuanNcblxuXG5cblxudmFyIHRhZ19wYWQgPSBmdW5jdGlvbiBwYWQoKSB7XG4gIHZhciBwYWROb2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdGRcIiwgW10pO1xuICBwYWROb2RlLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFwiNTAlXCIpO1xuICByZXR1cm4gcGFkTm9kZTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uQnVpbGRlcnMoe1xuICB0eXBlOiBcInRhZ1wiLFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIHRhYmxlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdGFibGVcIiwgW25ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRyXCIsIFt0YWdfcGFkKCksIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRkXCIsIFtidWlsZEV4cHJlc3Npb25Sb3coZ3JvdXAuYm9keSwgb3B0aW9ucyldKSwgdGFnX3BhZCgpLCBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZFwiLCBbYnVpbGRFeHByZXNzaW9uUm93KGdyb3VwLnRhZywgb3B0aW9ucyldKV0pXSk7XG4gICAgdGFibGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgXCIxMDAlXCIpO1xuICAgIHJldHVybiB0YWJsZTsgLy8gVE9ETzogTGVmdC1hbGlnbmVkIHRhZ3MuXG4gICAgLy8gQ3VycmVudGx5LCB0aGUgZ3JvdXAgYW5kIG9wdGlvbnMgcGFzc2VkIGhlcmUgZG8gbm90IGNvbnRhaW5cbiAgICAvLyBlbm91Z2ggaW5mbyB0byBzZXQgdGFnIGFsaWdubWVudC4gYGxlcW5vYCBpcyBpbiBTZXR0aW5ncyBidXQgaXQgaXNcbiAgICAvLyBub3QgcGFzc2VkIHRvIE9wdGlvbnMuIE9uIHRoZSBIVE1MIHNpZGUsIGxlcW5vIGlzXG4gICAgLy8gc2V0IGJ5IGEgQ1NTIGNsYXNzIGFwcGxpZWQgaW4gYnVpbGRUcmVlLmpzLiBUaGF0IHdvdWxkIGhhdmUgd29ya2VkXG4gICAgLy8gaW4gTWF0aE1MIGlmIGJyb3dzZXJzIHN1cHBvcnRlZCA8bWxhYmVsZWR0cj4uIFNpbmNlIHRoZXkgZG9uJ3QsIHdlXG4gICAgLy8gbmVlZCB0byByZXdyaXRlIHRoZSB3YXkgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuXG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3RleHQuanNcblxuXG5cbiAvLyBOb24tbWF0aHkgdGV4dCwgcG9zc2libHkgaW4gYSBmb250XG5cbnZhciB0ZXh0Rm9udEZhbWlsaWVzID0ge1xuICBcIlxcXFx0ZXh0XCI6IHVuZGVmaW5lZCxcbiAgXCJcXFxcdGV4dHJtXCI6IFwidGV4dHJtXCIsXG4gIFwiXFxcXHRleHRzZlwiOiBcInRleHRzZlwiLFxuICBcIlxcXFx0ZXh0dHRcIjogXCJ0ZXh0dHRcIixcbiAgXCJcXFxcdGV4dG5vcm1hbFwiOiBcInRleHRybVwiXG59O1xudmFyIHRleHRGb250V2VpZ2h0cyA9IHtcbiAgXCJcXFxcdGV4dGJmXCI6IFwidGV4dGJmXCIsXG4gIFwiXFxcXHRleHRtZFwiOiBcInRleHRtZFwiXG59O1xudmFyIHRleHRGb250U2hhcGVzID0ge1xuICBcIlxcXFx0ZXh0aXRcIjogXCJ0ZXh0aXRcIixcbiAgXCJcXFxcdGV4dHVwXCI6IFwidGV4dHVwXCJcbn07XG5cbnZhciBvcHRpb25zV2l0aEZvbnQgPSBmdW5jdGlvbiBvcHRpb25zV2l0aEZvbnQoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIGZvbnQgPSBncm91cC5mb250OyAvLyBDaGVja3MgaWYgdGhlIGFyZ3VtZW50IGlzIGEgZm9udCBmYW1pbHkgb3IgYSBmb250IHN0eWxlLlxuXG4gIGlmICghZm9udCkge1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9IGVsc2UgaWYgKHRleHRGb250RmFtaWxpZXNbZm9udF0pIHtcbiAgICByZXR1cm4gb3B0aW9ucy53aXRoVGV4dEZvbnRGYW1pbHkodGV4dEZvbnRGYW1pbGllc1tmb250XSk7XG4gIH0gZWxzZSBpZiAodGV4dEZvbnRXZWlnaHRzW2ZvbnRdKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMud2l0aFRleHRGb250V2VpZ2h0KHRleHRGb250V2VpZ2h0c1tmb250XSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG9wdGlvbnMud2l0aFRleHRGb250U2hhcGUodGV4dEZvbnRTaGFwZXNbZm9udF0pO1xuICB9XG59O1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidGV4dFwiLFxuICBuYW1lczogWy8vIEZvbnQgZmFtaWxpZXNcbiAgXCJcXFxcdGV4dFwiLCBcIlxcXFx0ZXh0cm1cIiwgXCJcXFxcdGV4dHNmXCIsIFwiXFxcXHRleHR0dFwiLCBcIlxcXFx0ZXh0bm9ybWFsXCIsIC8vIEZvbnQgd2VpZ2h0c1xuICBcIlxcXFx0ZXh0YmZcIiwgXCJcXFxcdGV4dG1kXCIsIC8vIEZvbnQgU2hhcGVzXG4gIFwiXFxcXHRleHRpdFwiLCBcIlxcXFx0ZXh0dXBcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1widGV4dFwiXSxcbiAgICBncmVlZGluZXNzOiAyLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgY29uc3VtZU1vZGU6IFwidGV4dFwiXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGJvZHkpLFxuICAgICAgZm9udDogZnVuY05hbWVcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnNXaXRoRm9udChncm91cCwgb3B0aW9ucyk7XG4gICAgdmFyIGlubmVyID0gYnVpbGRIVE1MX2J1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBuZXdPcHRpb25zLCB0cnVlKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcInRleHRcIl0sIGJ1aWxkQ29tbW9uLnRyeUNvbWJpbmVDaGFycyhpbm5lciksIG5ld09wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zV2l0aEZvbnQoZ3JvdXAsIG9wdGlvbnMpO1xuICAgIHJldHVybiBidWlsZEV4cHJlc3Npb25Sb3coZ3JvdXAuYm9keSwgbmV3T3B0aW9ucyk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3VuZGVybGluZS5qc1xuXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJ1bmRlcmxpbmVcIixcbiAgbmFtZXM6IFtcIlxcXFx1bmRlcmxpbmVcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ1bmRlcmxpbmVcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keTogYXJnc1swXVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIFVuZGVybGluZXMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgcGcgNDQzLCBSdWxlIDEwLlxuICAgIC8vIEJ1aWxkIHRoZSBpbm5lciBncm91cC5cbiAgICB2YXIgaW5uZXJHcm91cCA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpOyAvLyBDcmVhdGUgdGhlIGxpbmUgdG8gZ28gYmVsb3cgdGhlIGJvZHlcblxuICAgIHZhciBsaW5lID0gYnVpbGRDb21tb24ubWFrZUxpbmVTcGFuKFwidW5kZXJsaW5lLWxpbmVcIiwgb3B0aW9ucyk7IC8vIEdlbmVyYXRlIHRoZSB2bGlzdCwgd2l0aCB0aGUgYXBwcm9wcmlhdGUga2VybnNcblxuICAgIHZhciBkZWZhdWx0UnVsZVRoaWNrbmVzcyA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcztcbiAgICB2YXIgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcInRvcFwiLFxuICAgICAgcG9zaXRpb25EYXRhOiBpbm5lckdyb3VwLmhlaWdodCxcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogZGVmYXVsdFJ1bGVUaGlja25lc3NcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGxpbmVcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IDMgKiBkZWZhdWx0UnVsZVRoaWNrbmVzc1xuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogaW5uZXJHcm91cFxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcInVuZGVybGluZVwiXSwgW3ZsaXN0XSwgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3BlcmF0b3IgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFtuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZShcIlxcdTIwM0VcIildKTtcbiAgICBvcGVyYXRvci5zZXRBdHRyaWJ1dGUoXCJzdHJldGNoeVwiLCBcInRydWVcIik7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm11bmRlclwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKSwgb3BlcmF0b3JdKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImFjY2VudHVuZGVyXCIsIFwidHJ1ZVwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvdmVyYi5qc1xuXG5cblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidmVyYlwiLFxuICBuYW1lczogW1wiXFxcXHZlcmJcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoY29udGV4dCwgYXJncywgb3B0QXJncykge1xuICAgIC8vIFxcdmVyYiBhbmQgXFx2ZXJiKiBhcmUgZGVhbHQgd2l0aCBkaXJlY3RseSBpbiBQYXJzZXIuanMuXG4gICAgLy8gSWYgd2UgZW5kIHVwIGhlcmUsIGl0J3MgYmVjYXVzZSBvZiBhIGZhaWx1cmUgdG8gbWF0Y2ggdGhlIHR3byBkZWxpbWl0ZXJzXG4gICAgLy8gaW4gdGhlIHJlZ2V4IGluIExleGVyLmpzLiAgTGFUZVggcmFpc2VzIHRoZSBmb2xsb3dpbmcgZXJyb3Igd2hlbiBcXHZlcmIgaXNcbiAgICAvLyB0ZXJtaW5hdGVkIGJ5IGVuZCBvZiBsaW5lIChvciBmaWxlKS5cbiAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJcXFxcdmVyYiBlbmRlZCBieSBlbmQgb2YgbGluZSBpbnN0ZWFkIG9mIG1hdGNoaW5nIGRlbGltaXRlclwiKTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIHRleHQgPSBtYWtlVmVyYihncm91cCk7XG4gICAgdmFyIGJvZHkgPSBbXTsgLy8gXFx2ZXJiIGVudGVycyB0ZXh0IG1vZGUgYW5kIHRoZXJlZm9yZSBpcyBzaXplZCBsaWtlIFxcdGV4dHN0eWxlXG5cbiAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUob3B0aW9ucy5zdHlsZS50ZXh0KCkpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgYyA9IHRleHRbaV07XG5cbiAgICAgIGlmIChjID09PSAnficpIHtcbiAgICAgICAgYyA9ICdcXFxcdGV4dGFzY2lpdGlsZGUnO1xuICAgICAgfVxuXG4gICAgICBib2R5LnB1c2goYnVpbGRDb21tb24ubWFrZVN5bWJvbChjLCBcIlR5cGV3cml0ZXItUmVndWxhclwiLCBncm91cC5tb2RlLCBuZXdPcHRpb25zLCBbXCJtb3JkXCIsIFwidGV4dHR0XCJdKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJ0ZXh0XCJdLmNvbmNhdChuZXdPcHRpb25zLnNpemluZ0NsYXNzZXMob3B0aW9ucykpLCBidWlsZENvbW1vbi50cnlDb21iaW5lQ2hhcnMoYm9keSksIG5ld09wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIHRleHQgPSBuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZShtYWtlVmVyYihncm91cCkpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdGV4dFwiLCBbdGV4dF0pO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWF0aHZhcmlhbnRcIiwgXCJtb25vc3BhY2VcIik7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLyoqXG4gKiBDb252ZXJ0cyB2ZXJiIGdyb3VwIGludG8gYm9keSBzdHJpbmcuXG4gKlxuICogXFx2ZXJiKiByZXBsYWNlcyBlYWNoIHNwYWNlIHdpdGggYW4gb3BlbiBib3ggXFx1MjQyM1xuICogXFx2ZXJiIHJlcGxhY2VzIGVhY2ggc3BhY2Ugd2l0aCBhIG5vLWJyZWFrIHNwYWNlIFxceEEwXG4gKi9cblxudmFyIG1ha2VWZXJiID0gZnVuY3Rpb24gbWFrZVZlcmIoZ3JvdXApIHtcbiAgcmV0dXJuIGdyb3VwLmJvZHkucmVwbGFjZSgvIC9nLCBncm91cC5zdGFyID8gXCJcXHUyNDIzXCIgOiAnXFx4QTAnKTtcbn07XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMuanNcbi8qKiBJbmNsdWRlIHRoaXMgdG8gZW5zdXJlIHRoYXQgYWxsIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZC4gKi9cblxudmFyIGZ1bmN0aW9ucyA9IF9mdW5jdGlvbnM7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfZnVuY3Rpb25zID0gKGZ1bmN0aW9ucyk7IC8vIFRPRE8oa2V2aW5iKTogaGF2ZSBmdW5jdGlvbnMgcmV0dXJuIGFuIG9iamVjdCBhbmQgY2FsbCBkZWZpbmVGdW5jdGlvbiB3aXRoXG4vLyB0aGF0IG9iamVjdCBpbiB0aGlzIGZpbGUgaW5zdGVhZCBvZiByZWx5aW5nIG9uIHNpZGUtZWZmZWN0cy5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvTGV4ZXIuanNcbi8qKlxuICogVGhlIExleGVyIGNsYXNzIGhhbmRsZXMgdG9rZW5pemluZyB0aGUgaW5wdXQgaW4gdmFyaW91cyB3YXlzLiBTaW5jZSBvdXJcbiAqIHBhcnNlciBleHBlY3RzIHVzIHRvIGJlIGFibGUgdG8gYmFja3RyYWNrLCB0aGUgbGV4ZXIgYWxsb3dzIGxleGluZyBmcm9tIGFueVxuICogZ2l2ZW4gc3RhcnRpbmcgcG9pbnQuXG4gKlxuICogSXRzIG1haW4gZXhwb3NlZCBmdW5jdGlvbiBpcyB0aGUgYGxleGAgZnVuY3Rpb24sIHdoaWNoIHRha2VzIGEgcG9zaXRpb24gdG9cbiAqIGxleCBmcm9tIGFuZCBhIHR5cGUgb2YgdG9rZW4gdG8gbGV4LiBJdCBkZWZlcnMgdG8gdGhlIGFwcHJvcHJpYXRlIGBfaW5uZXJMZXhgXG4gKiBmdW5jdGlvbi5cbiAqXG4gKiBUaGUgdmFyaW91cyBgX2lubmVyTGV4YCBmdW5jdGlvbnMgcGVyZm9ybSB0aGUgYWN0dWFsIGxleGluZyBvZiBkaWZmZXJlbnRcbiAqIGtpbmRzLlxuICovXG5cblxuXG5cbi8qIFRoZSBmb2xsb3dpbmcgdG9rZW5SZWdleFxuICogLSBtYXRjaGVzIHR5cGljYWwgd2hpdGVzcGFjZSAoYnV0IG5vdCBOQlNQIGV0Yy4pIHVzaW5nIGl0cyBmaXJzdCBncm91cFxuICogLSBkb2VzIG5vdCBtYXRjaCBhbnkgY29udHJvbCBjaGFyYWN0ZXIgXFx4MDAtXFx4MWYgZXhjZXB0IHdoaXRlc3BhY2VcbiAqIC0gZG9lcyBub3QgbWF0Y2ggYSBiYXJlIGJhY2tzbGFzaFxuICogLSBtYXRjaGVzIGFueSBBU0NJSSBjaGFyYWN0ZXIgZXhjZXB0IHRob3NlIGp1c3QgbWVudGlvbmVkXG4gKiAtIGRvZXMgbm90IG1hdGNoIHRoZSBCTVAgcHJpdmF0ZSB1c2UgYXJlYSBcXHVFMDAwLVxcdUY4RkZcbiAqIC0gZG9lcyBub3QgbWF0Y2ggYmFyZSBzdXJyb2dhdGUgY29kZSB1bml0c1xuICogLSBtYXRjaGVzIGFueSBCTVAgY2hhcmFjdGVyIGV4Y2VwdCBmb3IgdGhvc2UganVzdCBkZXNjcmliZWRcbiAqIC0gbWF0Y2hlcyBhbnkgdmFsaWQgVW5pY29kZSBzdXJyb2dhdGUgcGFpclxuICogLSBtYXRjaGVzIGEgYmFja3NsYXNoIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIGxldHRlcnNcbiAqIC0gbWF0Y2hlcyBhIGJhY2tzbGFzaCBmb2xsb3dlZCBieSBhbnkgQk1QIGNoYXJhY3RlciwgaW5jbHVkaW5nIG5ld2xpbmVcbiAqIEp1c3QgYmVjYXVzZSB0aGUgTGV4ZXIgbWF0Y2hlcyBzb21ldGhpbmcgZG9lc24ndCBtZWFuIGl0J3MgdmFsaWQgaW5wdXQ6XG4gKiBJZiB0aGVyZSBpcyBubyBtYXRjaGluZyBmdW5jdGlvbiBvciBzeW1ib2wgZGVmaW5pdGlvbiwgdGhlIFBhcnNlciB3aWxsXG4gKiBzdGlsbCByZWplY3QgdGhlIGlucHV0LlxuICovXG52YXIgc3BhY2VSZWdleFN0cmluZyA9IFwiWyBcXHJcXG5cXHRdXCI7XG52YXIgY29udHJvbFdvcmRSZWdleFN0cmluZyA9IFwiXFxcXFxcXFxbYS16QS1aQF0rXCI7XG52YXIgY29udHJvbFN5bWJvbFJlZ2V4U3RyaW5nID0gXCJcXFxcXFxcXFteXFx1RDgwMC1cXHVERkZGXVwiO1xudmFyIGNvbnRyb2xXb3JkV2hpdGVzcGFjZVJlZ2V4U3RyaW5nID0gXCJcIiArIGNvbnRyb2xXb3JkUmVnZXhTdHJpbmcgKyBzcGFjZVJlZ2V4U3RyaW5nICsgXCIqXCI7XG52YXIgY29udHJvbFdvcmRXaGl0ZXNwYWNlUmVnZXggPSBuZXcgUmVnRXhwKFwiXihcIiArIGNvbnRyb2xXb3JkUmVnZXhTdHJpbmcgKyBcIilcIiArIHNwYWNlUmVnZXhTdHJpbmcgKyBcIiokXCIpO1xudmFyIGNvbWJpbmluZ0RpYWNyaXRpY2FsTWFya1N0cmluZyA9IFwiW1xcdTAzMDAtXFx1MDM2Rl1cIjtcbnZhciBjb21iaW5pbmdEaWFjcml0aWNhbE1hcmtzRW5kUmVnZXggPSBuZXcgUmVnRXhwKGNvbWJpbmluZ0RpYWNyaXRpY2FsTWFya1N0cmluZyArIFwiKyRcIik7XG52YXIgdG9rZW5SZWdleFN0cmluZyA9IFwiKFwiICsgc3BhY2VSZWdleFN0cmluZyArIFwiKyl8XCIgKyAvLyB3aGl0ZXNwYWNlXG5cIihbIS1cXFxcW1xcXFxdLVxcdTIwMjdcXHUyMDJBLVxcdUQ3RkZcXHVGOTAwLVxcdUZGRkZdXCIgKyAoIC8vIHNpbmdsZSBjb2RlcG9pbnRcbmNvbWJpbmluZ0RpYWNyaXRpY2FsTWFya1N0cmluZyArIFwiKlwiKSArIC8vIC4uLnBsdXMgYWNjZW50c1xuXCJ8W1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXVwiICsgKCAvLyBzdXJyb2dhdGUgcGFpclxuY29tYmluaW5nRGlhY3JpdGljYWxNYXJrU3RyaW5nICsgXCIqXCIpICsgLy8gLi4ucGx1cyBhY2NlbnRzXG5cInxcXFxcXFxcXHZlcmJcXFxcKihbXl0pLio/XFxcXDNcIiArIC8vIFxcdmVyYipcblwifFxcXFxcXFxcdmVyYihbXiphLXpBLVpdKS4qP1xcXFw0XCIgKyAvLyBcXHZlcmIgdW5zdGFycmVkXG5cInxcXFxcXFxcXG9wZXJhdG9ybmFtZVxcXFwqXCIgKyAoIC8vIFxcb3BlcmF0b3JuYW1lKlxuXCJ8XCIgKyBjb250cm9sV29yZFdoaXRlc3BhY2VSZWdleFN0cmluZykgKyAoIC8vIFxcbWFjcm9OYW1lICsgc3BhY2VzXG5cInxcIiArIGNvbnRyb2xTeW1ib2xSZWdleFN0cmluZyArIFwiKVwiKTsgLy8gXFxcXCwgXFwnLCBldGMuXG5cbi8qKiBNYWluIExleGVyIGNsYXNzICovXG5cbnZhciBMZXhlcl9MZXhlciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIC8vIGNhdGVnb3J5IGNvZGVzLCBvbmx5IHN1cHBvcnRzIGNvbW1lbnQgY2hhcmFjdGVycyAoMTQpIGZvciBub3dcbiAgZnVuY3Rpb24gTGV4ZXIoaW5wdXQsIHNldHRpbmdzKSB7XG4gICAgdGhpcy5pbnB1dCA9IHZvaWQgMDtcbiAgICB0aGlzLnNldHRpbmdzID0gdm9pZCAwO1xuICAgIHRoaXMudG9rZW5SZWdleCA9IHZvaWQgMDtcbiAgICB0aGlzLmNhdGNvZGVzID0gdm9pZCAwO1xuICAgIC8vIFNlcGFyYXRlIGFjY2VudHMgZnJvbSBjaGFyYWN0ZXJzXG4gICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgICB0aGlzLnRva2VuUmVnZXggPSBuZXcgUmVnRXhwKHRva2VuUmVnZXhTdHJpbmcsICdnJyk7XG4gICAgdGhpcy5jYXRjb2RlcyA9IHtcbiAgICAgIFwiJVwiOiAxNCAvLyBjb21tZW50IGNoYXJhY3RlclxuXG4gICAgfTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBMZXhlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldENhdGNvZGUgPSBmdW5jdGlvbiBzZXRDYXRjb2RlKGNoYXIsIGNvZGUpIHtcbiAgICB0aGlzLmNhdGNvZGVzW2NoYXJdID0gY29kZTtcbiAgfVxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBsZXhlcyBhIHNpbmdsZSB0b2tlbi5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ubGV4ID0gZnVuY3Rpb24gbGV4KCkge1xuICAgIHZhciBpbnB1dCA9IHRoaXMuaW5wdXQ7XG4gICAgdmFyIHBvcyA9IHRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXg7XG5cbiAgICBpZiAocG9zID09PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBuZXcgVG9rZW5fVG9rZW4oXCJFT0ZcIiwgbmV3IFNvdXJjZUxvY2F0aW9uKHRoaXMsIHBvcywgcG9zKSk7XG4gICAgfVxuXG4gICAgdmFyIG1hdGNoID0gdGhpcy50b2tlblJlZ2V4LmV4ZWMoaW5wdXQpO1xuXG4gICAgaWYgKG1hdGNoID09PSBudWxsIHx8IG1hdGNoLmluZGV4ICE9PSBwb3MpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlVuZXhwZWN0ZWQgY2hhcmFjdGVyOiAnXCIgKyBpbnB1dFtwb3NdICsgXCInXCIsIG5ldyBUb2tlbl9Ub2tlbihpbnB1dFtwb3NdLCBuZXcgU291cmNlTG9jYXRpb24odGhpcywgcG9zLCBwb3MgKyAxKSkpO1xuICAgIH1cblxuICAgIHZhciB0ZXh0ID0gbWF0Y2hbMl0gfHwgXCIgXCI7XG5cbiAgICBpZiAodGhpcy5jYXRjb2Rlc1t0ZXh0XSA9PT0gMTQpIHtcbiAgICAgIC8vIGNvbW1lbnQgY2hhcmFjdGVyXG4gICAgICB2YXIgbmxJbmRleCA9IGlucHV0LmluZGV4T2YoJ1xcbicsIHRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXgpO1xuXG4gICAgICBpZiAobmxJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgdGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleCA9IGlucHV0Lmxlbmd0aDsgLy8gRU9GXG5cbiAgICAgICAgdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJjb21tZW50QXRFbmRcIiwgXCIlIGNvbW1lbnQgaGFzIG5vIHRlcm1pbmF0aW5nIG5ld2xpbmU7IExhVGVYIHdvdWxkIFwiICsgXCJmYWlsIGJlY2F1c2Ugb2YgY29tbWVudGluZyB0aGUgZW5kIG9mIG1hdGggbW9kZSAoZS5nLiAkKVwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXggPSBubEluZGV4ICsgMTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMubGV4KCk7XG4gICAgfSAvLyBUcmltIGFueSB0cmFpbGluZyB3aGl0ZXNwYWNlIGZyb20gY29udHJvbCB3b3JkIG1hdGNoXG5cblxuICAgIHZhciBjb250cm9sTWF0Y2ggPSB0ZXh0Lm1hdGNoKGNvbnRyb2xXb3JkV2hpdGVzcGFjZVJlZ2V4KTtcblxuICAgIGlmIChjb250cm9sTWF0Y2gpIHtcbiAgICAgIHRleHQgPSBjb250cm9sTWF0Y2hbMV07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUb2tlbl9Ub2tlbih0ZXh0LCBuZXcgU291cmNlTG9jYXRpb24odGhpcywgcG9zLCB0aGlzLnRva2VuUmVnZXgubGFzdEluZGV4KSk7XG4gIH07XG5cbiAgcmV0dXJuIExleGVyO1xufSgpO1xuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL05hbWVzcGFjZS5qc1xuLyoqXG4gKiBBIGBOYW1lc3BhY2VgIHJlZmVycyB0byBhIHNwYWNlIG9mIG5hbWVhYmxlIHRoaW5ncyBsaWtlIG1hY3JvcyBvciBsZW5ndGhzLFxuICogd2hpY2ggY2FuIGJlIGBzZXRgIGVpdGhlciBnbG9iYWxseSBvciBsb2NhbCB0byBhIG5lc3RlZCBncm91cCwgdXNpbmcgYW5cbiAqIHVuZG8gc3RhY2sgc2ltaWxhciB0byBob3cgVGVYIGltcGxlbWVudHMgdGhpcyBmdW5jdGlvbmFsaXR5LlxuICogUGVyZm9ybWFuY2Utd2lzZSwgYGdldGAgYW5kIGxvY2FsIGBzZXRgIHRha2UgY29uc3RhbnQgdGltZSwgd2hpbGUgZ2xvYmFsXG4gKiBgc2V0YCB0YWtlcyB0aW1lIHByb3BvcnRpb25hbCB0byB0aGUgZGVwdGggb2YgZ3JvdXAgbmVzdGluZy5cbiAqL1xuXG5cbnZhciBOYW1lc3BhY2VfTmFtZXNwYWNlID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIEJvdGggYXJndW1lbnRzIGFyZSBvcHRpb25hbC4gIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhbiBvYmplY3Qgb2ZcbiAgICogYnVpbHQtaW4gbWFwcGluZ3Mgd2hpY2ggbmV2ZXIgY2hhbmdlLiAgVGhlIHNlY29uZCBhcmd1bWVudCBpcyBhbiBvYmplY3RcbiAgICogb2YgaW5pdGlhbCAoZ2xvYmFsLWxldmVsKSBtYXBwaW5ncywgd2hpY2ggd2lsbCBjb25zdGFudGx5IGNoYW5nZVxuICAgKiBhY2NvcmRpbmcgdG8gYW55IGdsb2JhbC90b3AtbGV2ZWwgYHNldGBzIGRvbmUuXG4gICAqL1xuICBmdW5jdGlvbiBOYW1lc3BhY2UoYnVpbHRpbnMsIGdsb2JhbE1hY3Jvcykge1xuICAgIGlmIChidWlsdGlucyA9PT0gdm9pZCAwKSB7XG4gICAgICBidWlsdGlucyA9IHt9O1xuICAgIH1cblxuICAgIGlmIChnbG9iYWxNYWNyb3MgPT09IHZvaWQgMCkge1xuICAgICAgZ2xvYmFsTWFjcm9zID0ge307XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50ID0gdm9pZCAwO1xuICAgIHRoaXMuYnVpbHRpbnMgPSB2b2lkIDA7XG4gICAgdGhpcy51bmRlZlN0YWNrID0gdm9pZCAwO1xuICAgIHRoaXMuY3VycmVudCA9IGdsb2JhbE1hY3JvcztcbiAgICB0aGlzLmJ1aWx0aW5zID0gYnVpbHRpbnM7XG4gICAgdGhpcy51bmRlZlN0YWNrID0gW107XG4gIH1cbiAgLyoqXG4gICAqIFN0YXJ0IGEgbmV3IG5lc3RlZCBncm91cCwgYWZmZWN0aW5nIGZ1dHVyZSBsb2NhbCBgc2V0YHMuXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IE5hbWVzcGFjZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJlZ2luR3JvdXAgPSBmdW5jdGlvbiBiZWdpbkdyb3VwKCkge1xuICAgIHRoaXMudW5kZWZTdGFjay5wdXNoKHt9KTtcbiAgfVxuICAvKipcbiAgICogRW5kIGN1cnJlbnQgbmVzdGVkIGdyb3VwLCByZXN0b3JpbmcgdmFsdWVzIGJlZm9yZSB0aGUgZ3JvdXAgYmVnYW4uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmVuZEdyb3VwID0gZnVuY3Rpb24gZW5kR3JvdXAoKSB7XG4gICAgaWYgKHRoaXMudW5kZWZTdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlVuYmFsYW5jZWQgbmFtZXNwYWNlIGRlc3RydWN0aW9uOiBhdHRlbXB0IFwiICsgXCJ0byBwb3AgZ2xvYmFsIG5hbWVzcGFjZTsgcGxlYXNlIHJlcG9ydCB0aGlzIGFzIGEgYnVnXCIpO1xuICAgIH1cblxuICAgIHZhciB1bmRlZnMgPSB0aGlzLnVuZGVmU3RhY2sucG9wKCk7XG5cbiAgICBmb3IgKHZhciB1bmRlZiBpbiB1bmRlZnMpIHtcbiAgICAgIGlmICh1bmRlZnMuaGFzT3duUHJvcGVydHkodW5kZWYpKSB7XG4gICAgICAgIGlmICh1bmRlZnNbdW5kZWZdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkZWxldGUgdGhpcy5jdXJyZW50W3VuZGVmXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRbdW5kZWZdID0gdW5kZWZzW3VuZGVmXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogRGV0ZWN0IHdoZXRoZXIgYG5hbWVgIGhhcyBhIGRlZmluaXRpb24uICBFcXVpdmFsZW50IHRvXG4gICAqIGBnZXQobmFtZSkgIT0gbnVsbGAuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhcyA9IGZ1bmN0aW9uIGhhcyhuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudC5oYXNPd25Qcm9wZXJ0eShuYW1lKSB8fCB0aGlzLmJ1aWx0aW5zLmhhc093blByb3BlcnR5KG5hbWUpO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgYSBuYW1lLCBvciBgdW5kZWZpbmVkYCBpZiB0aGVyZSBpcyBubyB2YWx1ZS5cbiAgICpcbiAgICogTm90ZTogRG8gbm90IHVzZSBgaWYgKG5hbWVzcGFjZS5nZXQoLi4uKSlgIHRvIGRldGVjdCB3aGV0aGVyIGEgbWFjcm9cbiAgICogaXMgZGVmaW5lZCwgYXMgdGhlIGRlZmluaXRpb24gbWF5IGJlIHRoZSBlbXB0eSBzdHJpbmcgd2hpY2ggZXZhbHVhdGVzXG4gICAqIHRvIGBmYWxzZWAgaW4gSmF2YVNjcmlwdC4gIFVzZSBgaWYgKG5hbWVzcGFjZS5nZXQoLi4uKSAhPSBudWxsKWAgb3JcbiAgICogYGlmIChuYW1lc3BhY2UuaGFzKC4uLikpYC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZ2V0ID0gZnVuY3Rpb24gZ2V0KG5hbWUpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50W25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsdGluc1tuYW1lXTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VycmVudCB2YWx1ZSBvZiBhIG5hbWUsIGFuZCBvcHRpb25hbGx5IHNldCBpdCBnbG9iYWxseSB0b28uXG4gICAqIExvY2FsIHNldCgpIHNldHMgdGhlIGN1cnJlbnQgdmFsdWUgYW5kICh3aGVuIGFwcHJvcHJpYXRlKSBhZGRzIGFuIHVuZG9cbiAgICogb3BlcmF0aW9uIHRvIHRoZSB1bmRvIHN0YWNrLiAgR2xvYmFsIHNldCgpIG1heSBjaGFuZ2UgdGhlIHVuZG9cbiAgICogb3BlcmF0aW9uIGF0IGV2ZXJ5IGxldmVsLCBzbyB0YWtlcyB0aW1lIGxpbmVhciBpbiB0aGVpciBudW1iZXIuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldChuYW1lLCB2YWx1ZSwgZ2xvYmFsKSB7XG4gICAgaWYgKGdsb2JhbCA9PT0gdm9pZCAwKSB7XG4gICAgICBnbG9iYWwgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAvLyBHbG9iYWwgc2V0IGlzIGVxdWl2YWxlbnQgdG8gc2V0dGluZyBpbiBhbGwgZ3JvdXBzLiAgU2ltdWxhdGUgdGhpc1xuICAgICAgLy8gYnkgZGVzdHJveWluZyBhbnkgdW5kb3MgY3VycmVudGx5IHNjaGVkdWxlZCBmb3IgdGhpcyBuYW1lLFxuICAgICAgLy8gYW5kIGFkZGluZyBhbiB1bmRvIHdpdGggdGhlICpuZXcqIHZhbHVlIChpbiBjYXNlIGl0IGxhdGVyIGdldHNcbiAgICAgIC8vIGxvY2FsbHkgcmVzZXQgd2l0aGluIHRoaXMgZW52aXJvbm1lbnQpLlxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnVuZGVmU3RhY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZGVsZXRlIHRoaXMudW5kZWZTdGFja1tpXVtuYW1lXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudW5kZWZTdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMudW5kZWZTdGFja1t0aGlzLnVuZGVmU3RhY2subGVuZ3RoIC0gMV1bbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVW5kbyB0aGlzIHNldCBhdCBlbmQgb2YgdGhpcyBncm91cCAocG9zc2libHkgdG8gYHVuZGVmaW5lZGApLFxuICAgICAgLy8gdW5sZXNzIGFuIHVuZG8gaXMgYWxyZWFkeSBpbiBwbGFjZSwgaW4gd2hpY2ggY2FzZSB0aGF0IG9sZGVyXG4gICAgICAvLyB2YWx1ZSBpcyB0aGUgY29ycmVjdCBvbmUuXG4gICAgICB2YXIgdG9wID0gdGhpcy51bmRlZlN0YWNrW3RoaXMudW5kZWZTdGFjay5sZW5ndGggLSAxXTtcblxuICAgICAgaWYgKHRvcCAmJiAhdG9wLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIHRvcFtuYW1lXSA9IHRoaXMuY3VycmVudFtuYW1lXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRbbmFtZV0gPSB2YWx1ZTtcbiAgfTtcblxuICByZXR1cm4gTmFtZXNwYWNlO1xufSgpO1xuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL21hY3Jvcy5qc1xuLyoqXG4gKiBQcmVkZWZpbmVkIG1hY3JvcyBmb3IgS2FUZVguXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGRlZmluZSBzb21lIGNvbW1hbmRzIGluIHRlcm1zIG9mIG90aGVycy5cbiAqL1xuXG5cblxuXG5cbnZhciBidWlsdGluTWFjcm9zID0ge307XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBtYWNyb3MgPSAoYnVpbHRpbk1hY3Jvcyk7IC8vIFRoaXMgZnVuY3Rpb24gbWlnaHQgb25lIGRheSBhY2NlcHQgYW4gYWRkaXRpb25hbCBhcmd1bWVudCBhbmQgZG8gbW9yZSB0aGluZ3MuXG5cbmZ1bmN0aW9uIGRlZmluZU1hY3JvKG5hbWUsIGJvZHkpIHtcbiAgYnVpbHRpbk1hY3Jvc1tuYW1lXSA9IGJvZHk7XG59IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIG1hY3JvIHRvb2xzXG4vLyBMYVRlWCdzIFxcQGZpcnN0b2Z0d297IzF9eyMyfSBleHBhbmRzIHRvICMxLCBza2lwcGluZyAjMlxuLy8gVGVYIHNvdXJjZTogXFxsb25nXFxkZWZcXEBmaXJzdG9mdHdvIzEjMnsjMX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcQGZpcnN0b2Z0d29cIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgdmFyIGFyZ3MgPSBjb250ZXh0LmNvbnN1bWVBcmdzKDIpO1xuICByZXR1cm4ge1xuICAgIHRva2VuczogYXJnc1swXSxcbiAgICBudW1BcmdzOiAwXG4gIH07XG59KTsgLy8gTGFUZVgncyBcXEBzZWNvbmRvZnR3b3sjMX17IzJ9IGV4cGFuZHMgdG8gIzIsIHNraXBwaW5nICMxXG4vLyBUZVggc291cmNlOiBcXGxvbmdcXGRlZlxcQHNlY29uZG9mdHdvIzEjMnsjMn1cblxuZGVmaW5lTWFjcm8oXCJcXFxcQHNlY29uZG9mdHdvXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciBhcmdzID0gY29udGV4dC5jb25zdW1lQXJncygyKTtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbnM6IGFyZ3NbMV0sXG4gICAgbnVtQXJnczogMFxuICB9O1xufSk7IC8vIExhVGVYJ3MgXFxAaWZuZXh0Y2hhcnsjMX17IzJ9eyMzfSBsb29rcyBhaGVhZCB0byB0aGUgbmV4dCAodW5leHBhbmRlZClcbi8vIHN5bWJvbC4gIElmIGl0IG1hdGNoZXMgIzEsIHRoZW4gdGhlIG1hY3JvIGV4cGFuZHMgdG8gIzI7IG90aGVyd2lzZSwgIzMuXG4vLyBOb3RlLCBob3dldmVyLCB0aGF0IGl0IGRvZXMgbm90IGNvbnN1bWUgdGhlIG5leHQgc3ltYm9sIGluIGVpdGhlciBjYXNlLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxAaWZuZXh0Y2hhclwiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICB2YXIgYXJncyA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMyk7IC8vIHN5bWJvbCwgaWYsIGVsc2VcblxuICB2YXIgbmV4dFRva2VuID0gY29udGV4dC5mdXR1cmUoKTtcblxuICBpZiAoYXJnc1swXS5sZW5ndGggPT09IDEgJiYgYXJnc1swXVswXS50ZXh0ID09PSBuZXh0VG9rZW4udGV4dCkge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbnM6IGFyZ3NbMV0sXG4gICAgICBudW1BcmdzOiAwXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW5zOiBhcmdzWzJdLFxuICAgICAgbnVtQXJnczogMFxuICAgIH07XG4gIH1cbn0pOyAvLyBMYVRlWCdzIFxcQGlmc3RhcnsjMX17IzJ9IGxvb2tzIGFoZWFkIHRvIHRoZSBuZXh0ICh1bmV4cGFuZGVkKSBzeW1ib2wuXG4vLyBJZiBpdCBpcyBgKmAsIHRoZW4gaXQgY29uc3VtZXMgdGhlIHN5bWJvbCwgYW5kIHRoZSBtYWNybyBleHBhbmRzIHRvICMxO1xuLy8gb3RoZXJ3aXNlLCB0aGUgbWFjcm8gZXhwYW5kcyB0byAjMiAod2l0aG91dCBjb25zdW1pbmcgdGhlIHN5bWJvbCkuXG4vLyBUZVggc291cmNlOiBcXGRlZlxcQGlmc3RhciMxe1xcQGlmbmV4dGNoYXIgKntcXEBmaXJzdG9mdHdveyMxfX19XG5cbmRlZmluZU1hY3JvKFwiXFxcXEBpZnN0YXJcIiwgXCJcXFxcQGlmbmV4dGNoYXIgKntcXFxcQGZpcnN0b2Z0d297IzF9fVwiKTsgLy8gTGFUZVgncyBcXFRleHRPck1hdGh7IzF9eyMyfSBleHBhbmRzIHRvICMxIGluIHRleHQgbW9kZSwgIzIgaW4gbWF0aCBtb2RlXG5cbmRlZmluZU1hY3JvKFwiXFxcXFRleHRPck1hdGhcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgdmFyIGFyZ3MgPSBjb250ZXh0LmNvbnN1bWVBcmdzKDIpO1xuXG4gIGlmIChjb250ZXh0Lm1vZGUgPT09ICd0ZXh0Jykge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbnM6IGFyZ3NbMF0sXG4gICAgICBudW1BcmdzOiAwXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW5zOiBhcmdzWzFdLFxuICAgICAgbnVtQXJnczogMFxuICAgIH07XG4gIH1cbn0pOyAvLyBMb29rdXAgdGFibGUgZm9yIHBhcnNpbmcgbnVtYmVycyBpbiBiYXNlIDggdGhyb3VnaCAxNlxuXG52YXIgZGlnaXRUb051bWJlciA9IHtcbiAgXCIwXCI6IDAsXG4gIFwiMVwiOiAxLFxuICBcIjJcIjogMixcbiAgXCIzXCI6IDMsXG4gIFwiNFwiOiA0LFxuICBcIjVcIjogNSxcbiAgXCI2XCI6IDYsXG4gIFwiN1wiOiA3LFxuICBcIjhcIjogOCxcbiAgXCI5XCI6IDksXG4gIFwiYVwiOiAxMCxcbiAgXCJBXCI6IDEwLFxuICBcImJcIjogMTEsXG4gIFwiQlwiOiAxMSxcbiAgXCJjXCI6IDEyLFxuICBcIkNcIjogMTIsXG4gIFwiZFwiOiAxMyxcbiAgXCJEXCI6IDEzLFxuICBcImVcIjogMTQsXG4gIFwiRVwiOiAxNCxcbiAgXCJmXCI6IDE1LFxuICBcIkZcIjogMTVcbn07IC8vIFRlWCBcXGNoYXIgbWFrZXMgYSBsaXRlcmFsIGNoYXJhY3RlciAoY2F0Y29kZSAxMikgdXNpbmcgdGhlIGZvbGxvd2luZyBmb3Jtczpcbi8vIChzZWUgVGhlIFRlWEJvb2ssIHAuIDQzKVxuLy8gICBcXGNoYXIxMjMgIC0tIGRlY2ltYWxcbi8vICAgXFxjaGFyJzEyMyAtLSBvY3RhbFxuLy8gICBcXGNoYXJcIjEyMyAtLSBoZXhcbi8vICAgXFxjaGFyYHggICAtLSBjaGFyYWN0ZXIgdGhhdCBjYW4gYmUgd3JpdHRlbiAoaS5lLiBpc24ndCBhY3RpdmUpXG4vLyAgIFxcY2hhcmBcXHggIC0tIGNoYXJhY3RlciB0aGF0IGNhbm5vdCBiZSB3cml0dGVuIChlLmcuICUpXG4vLyBUaGVzZSBhbGwgcmVmZXIgdG8gY2hhcmFjdGVycyBmcm9tIHRoZSBmb250LCBzbyB3ZSB0dXJuIHRoZW0gaW50byBzcGVjaWFsXG4vLyBjYWxscyB0byBhIGZ1bmN0aW9uIFxcQGNoYXIgZGVhbHQgd2l0aCBpbiB0aGUgUGFyc2VyLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxjaGFyXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciB0b2tlbiA9IGNvbnRleHQucG9wVG9rZW4oKTtcbiAgdmFyIGJhc2U7XG4gIHZhciBudW1iZXIgPSAnJztcblxuICBpZiAodG9rZW4udGV4dCA9PT0gXCInXCIpIHtcbiAgICBiYXNlID0gODtcbiAgICB0b2tlbiA9IGNvbnRleHQucG9wVG9rZW4oKTtcbiAgfSBlbHNlIGlmICh0b2tlbi50ZXh0ID09PSAnXCInKSB7XG4gICAgYmFzZSA9IDE2O1xuICAgIHRva2VuID0gY29udGV4dC5wb3BUb2tlbigpO1xuICB9IGVsc2UgaWYgKHRva2VuLnRleHQgPT09IFwiYFwiKSB7XG4gICAgdG9rZW4gPSBjb250ZXh0LnBvcFRva2VuKCk7XG5cbiAgICBpZiAodG9rZW4udGV4dFswXSA9PT0gXCJcXFxcXCIpIHtcbiAgICAgIG51bWJlciA9IHRva2VuLnRleHQuY2hhckNvZGVBdCgxKTtcbiAgICB9IGVsc2UgaWYgKHRva2VuLnRleHQgPT09IFwiRU9GXCIpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlxcXFxjaGFyYCBtaXNzaW5nIGFyZ3VtZW50XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBudW1iZXIgPSB0b2tlbi50ZXh0LmNoYXJDb2RlQXQoMCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGJhc2UgPSAxMDtcbiAgfVxuXG4gIGlmIChiYXNlKSB7XG4gICAgLy8gUGFyc2UgYSBudW1iZXIgaW4gdGhlIGdpdmVuIGJhc2UsIHN0YXJ0aW5nIHdpdGggZmlyc3QgYHRva2VuYC5cbiAgICBudW1iZXIgPSBkaWdpdFRvTnVtYmVyW3Rva2VuLnRleHRdO1xuXG4gICAgaWYgKG51bWJlciA9PSBudWxsIHx8IG51bWJlciA+PSBiYXNlKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJJbnZhbGlkIGJhc2UtXCIgKyBiYXNlICsgXCIgZGlnaXQgXCIgKyB0b2tlbi50ZXh0KTtcbiAgICB9XG5cbiAgICB2YXIgZGlnaXQ7XG5cbiAgICB3aGlsZSAoKGRpZ2l0ID0gZGlnaXRUb051bWJlcltjb250ZXh0LmZ1dHVyZSgpLnRleHRdKSAhPSBudWxsICYmIGRpZ2l0IDwgYmFzZSkge1xuICAgICAgbnVtYmVyICo9IGJhc2U7XG4gICAgICBudW1iZXIgKz0gZGlnaXQ7XG4gICAgICBjb250ZXh0LnBvcFRva2VuKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFwiXFxcXEBjaGFye1wiICsgbnVtYmVyICsgXCJ9XCI7XG59KTsgLy8gQmFzaWMgc3VwcG9ydCBmb3IgbWFjcm8gZGVmaW5pdGlvbnM6XG4vLyAgICAgXFxkZWZcXG1hY3Jve2V4cGFuc2lvbn1cbi8vICAgICBcXGRlZlxcbWFjcm8jMXtleHBhbnNpb259XG4vLyAgICAgXFxkZWZcXG1hY3JvIzEjMntleHBhbnNpb259XG4vLyAgICAgXFxkZWZcXG1hY3JvIzEjMiMzIzQjNSM2IzcjOCM5e2V4cGFuc2lvbn1cbi8vIEFsc28gdGhlIFxcZ2RlZiBhbmQgXFxnbG9iYWxcXGRlZiBlcXVpdmFsZW50c1xuXG52YXIgbWFjcm9zX2RlZiA9IGZ1bmN0aW9uIGRlZihjb250ZXh0LCBnbG9iYWwpIHtcbiAgdmFyIGFyZyA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMSlbMF07XG5cbiAgaWYgKGFyZy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJcXFxcZ2RlZidzIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBtYWNybyBuYW1lXCIpO1xuICB9XG5cbiAgdmFyIG5hbWUgPSBhcmdbMF0udGV4dDsgLy8gQ291bnQgYXJndW1lbnQgc3BlY2lmaWVycywgYW5kIGNoZWNrIHRoZXkgYXJlIGluIHRoZSBvcmRlciAjMSAjMiAuLi5cblxuICB2YXIgbnVtQXJncyA9IDA7XG4gIGFyZyA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMSlbMF07XG5cbiAgd2hpbGUgKGFyZy5sZW5ndGggPT09IDEgJiYgYXJnWzBdLnRleHQgPT09IFwiI1wiKSB7XG4gICAgYXJnID0gY29udGV4dC5jb25zdW1lQXJncygxKVswXTtcblxuICAgIGlmIChhcmcubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50IG51bWJlciBsZW5ndGggXFxcIlwiICsgYXJnLmxlbmd0aCArIFwiXFxcIlwiKTtcbiAgICB9XG5cbiAgICBpZiAoIS9eWzEtOV0kLy50ZXN0KGFyZ1swXS50ZXh0KSkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCBhcmd1bWVudCBudW1iZXIgXFxcIlwiICsgYXJnWzBdLnRleHQgKyBcIlxcXCJcIik7XG4gICAgfVxuXG4gICAgbnVtQXJncysrO1xuXG4gICAgaWYgKHBhcnNlSW50KGFyZ1swXS50ZXh0KSAhPT0gbnVtQXJncykge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiQXJndW1lbnQgbnVtYmVyIFxcXCJcIiArIGFyZ1swXS50ZXh0ICsgXCJcXFwiIG91dCBvZiBvcmRlclwiKTtcbiAgICB9XG5cbiAgICBhcmcgPSBjb250ZXh0LmNvbnN1bWVBcmdzKDEpWzBdO1xuICB9IC8vIEZpbmFsIGFyZyBpcyB0aGUgZXhwYW5zaW9uIG9mIHRoZSBtYWNyb1xuXG5cbiAgY29udGV4dC5tYWNyb3Muc2V0KG5hbWUsIHtcbiAgICB0b2tlbnM6IGFyZyxcbiAgICBudW1BcmdzOiBudW1BcmdzXG4gIH0sIGdsb2JhbCk7XG4gIHJldHVybiAnJztcbn07XG5cbmRlZmluZU1hY3JvKFwiXFxcXGdkZWZcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgcmV0dXJuIG1hY3Jvc19kZWYoY29udGV4dCwgdHJ1ZSk7XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXGRlZlwiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICByZXR1cm4gbWFjcm9zX2RlZihjb250ZXh0LCBmYWxzZSk7XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXGdsb2JhbFwiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICB2YXIgbmV4dCA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMSlbMF07XG5cbiAgaWYgKG5leHQubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCBjb21tYW5kIGFmdGVyIFxcXFxnbG9iYWxcIik7XG4gIH1cblxuICB2YXIgY29tbWFuZCA9IG5leHRbMF0udGV4dDsgLy8gVE9ETzogU2hvdWxkIGV4cGFuZCBjb21tYW5kXG5cbiAgaWYgKGNvbW1hbmQgPT09IFwiXFxcXGRlZlwiKSB7XG4gICAgLy8gXFxnbG9iYWxcXGRlZiBpcyBlcXVpdmFsZW50IHRvIFxcZ2RlZlxuICAgIHJldHVybiBtYWNyb3NfZGVmKGNvbnRleHQsIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgY29tbWFuZCAnXCIgKyBjb21tYW5kICsgXCInIGFmdGVyIFxcXFxnbG9iYWxcIik7XG4gIH1cbn0pOyAvLyBcXG5ld2NvbW1hbmR7XFxtYWNyb31bYXJnc117ZGVmaW5pdGlvbn1cbi8vIFxccmVuZXdjb21tYW5ke1xcbWFjcm99W2FyZ3Nde2RlZmluaXRpb259XG4vLyBUT0RPOiBPcHRpb25hbCBhcmd1bWVudHM6IFxcbmV3Y29tbWFuZHtcXG1hY3JvfVthcmdzXVtkZWZhdWx0XXtkZWZpbml0aW9ufVxuXG52YXIgbWFjcm9zX25ld2NvbW1hbmQgPSBmdW5jdGlvbiBuZXdjb21tYW5kKGNvbnRleHQsIGV4aXN0c09LLCBub25leGlzdHNPSykge1xuICB2YXIgYXJnID0gY29udGV4dC5jb25zdW1lQXJncygxKVswXTtcblxuICBpZiAoYXJnLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlxcXFxuZXdjb21tYW5kJ3MgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIG1hY3JvIG5hbWVcIik7XG4gIH1cblxuICB2YXIgbmFtZSA9IGFyZ1swXS50ZXh0O1xuICB2YXIgZXhpc3RzID0gY29udGV4dC5pc0RlZmluZWQobmFtZSk7XG5cbiAgaWYgKGV4aXN0cyAmJiAhZXhpc3RzT0spIHtcbiAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJcXFxcbmV3Y29tbWFuZHtcIiArIG5hbWUgKyBcIn0gYXR0ZW1wdGluZyB0byByZWRlZmluZSBcIiArIChuYW1lICsgXCI7IHVzZSBcXFxccmVuZXdjb21tYW5kXCIpKTtcbiAgfVxuXG4gIGlmICghZXhpc3RzICYmICFub25leGlzdHNPSykge1xuICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlxcXFxyZW5ld2NvbW1hbmR7XCIgKyBuYW1lICsgXCJ9IHdoZW4gY29tbWFuZCBcIiArIG5hbWUgKyBcIiBcIiArIFwiZG9lcyBub3QgeWV0IGV4aXN0OyB1c2UgXFxcXG5ld2NvbW1hbmRcIik7XG4gIH1cblxuICB2YXIgbnVtQXJncyA9IDA7XG4gIGFyZyA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMSlbMF07XG5cbiAgaWYgKGFyZy5sZW5ndGggPT09IDEgJiYgYXJnWzBdLnRleHQgPT09IFwiW1wiKSB7XG4gICAgdmFyIGFyZ1RleHQgPSAnJztcbiAgICB2YXIgdG9rZW4gPSBjb250ZXh0LmV4cGFuZE5leHRUb2tlbigpO1xuXG4gICAgd2hpbGUgKHRva2VuLnRleHQgIT09IFwiXVwiICYmIHRva2VuLnRleHQgIT09IFwiRU9GXCIpIHtcbiAgICAgIC8vIFRPRE86IFNob3VsZCBwcm9wZXJseSBleHBhbmQgYXJnLCBlLmcuLCBpZ25vcmUge31zXG4gICAgICBhcmdUZXh0ICs9IHRva2VuLnRleHQ7XG4gICAgICB0b2tlbiA9IGNvbnRleHQuZXhwYW5kTmV4dFRva2VuKCk7XG4gICAgfVxuXG4gICAgaWYgKCFhcmdUZXh0Lm1hdGNoKC9eXFxzKlswLTldK1xccyokLykpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50czogXCIgKyBhcmdUZXh0KTtcbiAgICB9XG5cbiAgICBudW1BcmdzID0gcGFyc2VJbnQoYXJnVGV4dCk7XG4gICAgYXJnID0gY29udGV4dC5jb25zdW1lQXJncygxKVswXTtcbiAgfSAvLyBGaW5hbCBhcmcgaXMgdGhlIGV4cGFuc2lvbiBvZiB0aGUgbWFjcm9cblxuXG4gIGNvbnRleHQubWFjcm9zLnNldChuYW1lLCB7XG4gICAgdG9rZW5zOiBhcmcsXG4gICAgbnVtQXJnczogbnVtQXJnc1xuICB9KTtcbiAgcmV0dXJuICcnO1xufTtcblxuZGVmaW5lTWFjcm8oXCJcXFxcbmV3Y29tbWFuZFwiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICByZXR1cm4gbWFjcm9zX25ld2NvbW1hbmQoY29udGV4dCwgZmFsc2UsIHRydWUpO1xufSk7XG5kZWZpbmVNYWNybyhcIlxcXFxyZW5ld2NvbW1hbmRcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgcmV0dXJuIG1hY3Jvc19uZXdjb21tYW5kKGNvbnRleHQsIHRydWUsIGZhbHNlKTtcbn0pO1xuZGVmaW5lTWFjcm8oXCJcXFxccHJvdmlkZWNvbW1hbmRcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgcmV0dXJuIG1hY3Jvc19uZXdjb21tYW5kKGNvbnRleHQsIHRydWUsIHRydWUpO1xufSk7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEdyb3VwaW5nXG4vLyBcXGxldFxcYmdyb3VwPXsgXFxsZXRcXGVncm91cD19XG5cbmRlZmluZU1hY3JvKFwiXFxcXGJncm91cFwiLCBcIntcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxlZ3JvdXBcIiwgXCJ9XCIpOyAvLyBTeW1ib2xzIGZyb20gbGF0ZXgubHR4OlxuLy8gXFxkZWZcXGxxe2B9XG4vLyBcXGRlZlxccnF7J31cbi8vIFxcZGVmIFxcYWEge1xcciBhfVxuLy8gXFxkZWYgXFxBQSB7XFxyIEF9XG5cbmRlZmluZU1hY3JvKFwiXFxcXGxxXCIsIFwiYFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJxXCIsIFwiJ1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGFhXCIsIFwiXFxcXHIgYVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEFBXCIsIFwiXFxcXHIgQVwiKTsgLy8gQ29weXJpZ2h0IChDKSBhbmQgcmVnaXN0ZXJlZCAoUikgc3ltYm9scy4gVXNlIHJhdyBzeW1ib2wgaW4gTWF0aE1MLlxuLy8gXFxEZWNsYXJlVGV4dENvbW1hbmREZWZhdWx0e1xcdGV4dGNvcHlyaWdodH17XFx0ZXh0Y2lyY2xlZHtjfX1cbi8vIFxcRGVjbGFyZVRleHRDb21tYW5kRGVmYXVsdHtcXHRleHRyZWdpc3RlcmVkfXtcXHRleHRjaXJjbGVkeyVcbi8vICAgICAgXFxjaGVja0BtYXRoZm9udHNcXGZvbnRzaXplXFxzZkBzaXplXFx6QFxcbWF0aEBmb250c2ZhbHNlXFxzZWxlY3Rmb250IFJ9fVxuLy8gXFxEZWNsYXJlUm9idXN0Q29tbWFuZHtcXGNvcHlyaWdodH17JVxuLy8gICAgXFxpZm1tb2Rle1xcbmZzc0B0ZXh0e1xcdGV4dGNvcHlyaWdodH19XFxlbHNlXFx0ZXh0Y29weXJpZ2h0XFxmaX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcdGV4dGNvcHlyaWdodFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcdGV4dGNpcmNsZWR7Y319e1xcXFxjaGFyYMKpfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNvcHlyaWdodFwiLCBcIlxcXFxUZXh0T3JNYXRoe1xcXFx0ZXh0Y29weXJpZ2h0fXtcXFxcdGV4dHtcXFxcdGV4dGNvcHlyaWdodH19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGV4dHJlZ2lzdGVyZWRcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXHRleHRjaXJjbGVke1xcXFxzY3JpcHRzaXplIFJ9fXtcXFxcY2hhcmDCrn1cIik7IC8vIENoYXJhY3RlcnMgb21pdHRlZCBmcm9tIFVuaWNvZGUgcmFuZ2UgMUQ0MDDigJMxRDdGRlxuXG5kZWZpbmVNYWNybyhcIlxcdTIxMkNcIiwgXCJcXFxcbWF0aHNjcntCfVwiKTsgLy8gc2NyaXB0XG5cbmRlZmluZU1hY3JvKFwiXFx1MjEzMFwiLCBcIlxcXFxtYXRoc2Nye0V9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMTMxXCIsIFwiXFxcXG1hdGhzY3J7Rn1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIxMEJcIiwgXCJcXFxcbWF0aHNjcntIfVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjExMFwiLCBcIlxcXFxtYXRoc2Nye0l9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMTEyXCIsIFwiXFxcXG1hdGhzY3J7TH1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIxMzNcIiwgXCJcXFxcbWF0aHNjcntNfVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjExQlwiLCBcIlxcXFxtYXRoc2Nye1J9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMTJEXCIsIFwiXFxcXG1hdGhmcmFre0N9XCIpOyAvLyBGcmFrdHVyXG5cbmRlZmluZU1hY3JvKFwiXFx1MjEwQ1wiLCBcIlxcXFxtYXRoZnJha3tIfVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjEyOFwiLCBcIlxcXFxtYXRoZnJha3tafVwiKTsgLy8gRGVmaW5lIFxcQmJiayB3aXRoIGEgbWFjcm8gdGhhdCB3b3JrcyBpbiBib3RoIEhUTUwgYW5kIE1hdGhNTC5cblxuZGVmaW5lTWFjcm8oXCJcXFxcQmJia1wiLCBcIlxcXFxCYmJ7a31cIik7IC8vIFVuaWNvZGUgbWlkZGxlIGRvdFxuLy8gVGhlIEthVGVYIGZvbnRzIGRvIG5vdCBjb250YWluIFUrMDBCNy4gSW5zdGVhZCwgXFxjZG90cCBkaXNwbGF5c1xuLy8gdGhlIGRvdCBhdCBVKzIyQzUgYW5kIGdpdmVzIGl0IHB1bmN0IHNwYWNpbmcuXG5cbmRlZmluZU1hY3JvKFwiXFx4QjdcIiwgXCJcXFxcY2RvdHBcIik7IC8vIFxcbGxhcCBhbmQgXFxybGFwIHJlbmRlciB0aGVpciBjb250ZW50cyBpbiB0ZXh0IG1vZGVcblxuZGVmaW5lTWFjcm8oXCJcXFxcbGxhcFwiLCBcIlxcXFxtYXRobGxhcHtcXFxcdGV4dHJteyMxfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxybGFwXCIsIFwiXFxcXG1hdGhybGFwe1xcXFx0ZXh0cm17IzF9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNsYXBcIiwgXCJcXFxcbWF0aGNsYXB7XFxcXHRleHRybXsjMX19XCIpOyAvLyBcXG5vdCBpcyBkZWZpbmVkIGJ5IGJhc2UvZm9udG1hdGgubHR4IHZpYVxuLy8gXFxEZWNsYXJlTWF0aFN5bWJvbHtcXG5vdH17XFxtYXRocmVsfXtzeW1ib2xzfXtcIjM2fVxuLy8gSXQncyB0aHVzIHRyZWF0ZWQgbGlrZSBhIFxcbWF0aHJlbCwgYnV0IGRlZmluZWQgYnkgYSBzeW1ib2wgdGhhdCBoYXMgemVyb1xuLy8gd2lkdGggYnV0IGV4dGVuZHMgdG8gdGhlIHJpZ2h0LiAgV2UgdXNlIFxccmxhcCB0byBnZXQgdGhhdCBzcGFjaW5nLlxuLy8gRm9yIE1hdGhNTCB3ZSB3cml0ZSBVKzAzMzggaGVyZS4gYnVpbGRNYXRoTUwuanMgd2lsbCB0aGVuIGRvIHRoZSBvdmVybGF5LlxuXG5kZWZpbmVNYWNybyhcIlxcXFxub3RcIiwgJ1xcXFxodG1sQG1hdGhtbHtcXFxcbWF0aHJlbHtcXFxcbWF0aHJsYXBcXFxcQG5vdH19e1xcXFxjaGFyXCIzMzh9Jyk7IC8vIE5lZ2F0ZWQgc3ltYm9scyBmcm9tIGJhc2UvZm9udG1hdGgubHR4OlxuLy8gXFxkZWZcXG5lcXtcXG5vdD19IFxcbGV0XFxuZT1cXG5lcVxuLy8gXFxEZWNsYXJlUm9idXN0Q29tbWFuZFxuLy8gICBcXG5vdGlue1xcbWF0aHJlbHtcXG1AdGhcXG1hdGhwYWxldHRlXFxjQG5jZWxcXGlufX1cbi8vIFxcZGVmXFxjQG5jZWwjMSMye1xcbUB0aFxcb29hbGlnbnskXFxoZmlsIzFcXG1rZXJuMW11L1xcaGZpbCRcXGNyY3IkIzEjMiR9fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxuZXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXG1hdGhyZWx7XFxcXG5vdD19fXtcXFxcbWF0aHJlbHtcXFxcY2hhcmDiiaB9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5lXCIsIFwiXFxcXG5lcVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjI2MFwiLCBcIlxcXFxuZXFcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxub3RpblwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcbWF0aHJlbHt7XFxcXGlufVxcXFxtYXRobGxhcHsvXFxcXG1za2lwMW11fX19XCIgKyBcIntcXFxcbWF0aHJlbHtcXFxcY2hhcmDiiIl9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjIwOVwiLCBcIlxcXFxub3RpblwiKTsgLy8gVW5pY29kZSBzdGFja2VkIHJlbGF0aW9uc1xuXG5kZWZpbmVNYWNybyhcIlxcdTIyNThcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVsez1cXFxca2VybnstMWVtfVxcXFxyYWlzZWJveHswLjRlbX17JFxcXFxzY3JpcHRzaXplXFxcXGZyb3duJH19XCIgKyBcIn17XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjI1OH19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjU5XCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxzdGFja3JlbHtcXFxcdGlueVxcXFx3ZWRnZX17PX19e1xcXFxtYXRocmVse1xcXFxjaGFyYFxcdTIyNTh9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjI1QVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcc3RhY2tyZWx7XFxcXHRpbnlcXFxcdmVlfXs9fX17XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjI1QX19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjVCXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxzdGFja3JlbHtcXFxcc2NyaXB0c2l6ZVxcXFxzdGFyfXs9fX1cIiArIFwie1xcXFxtYXRocmVse1xcXFxjaGFyYFxcdTIyNUJ9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjI1RFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcc3RhY2tyZWx7XFxcXHRpbnlcXFxcbWF0aHJte2RlZn19ez19fVwiICsgXCJ7XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjI1RH19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjVFXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxzdGFja3JlbHtcXFxcdGlueVxcXFxtYXRocm17bX19ez19fVwiICsgXCJ7XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjI1RX19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjVGXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxzdGFja3JlbHtcXFxcdGlueT99ez19fXtcXFxcbWF0aHJlbHtcXFxcY2hhcmBcXHUyMjVGfX1cIik7IC8vIE1pc2MgVW5pY29kZVxuXG5kZWZpbmVNYWNybyhcIlxcdTI3QzJcIiwgXCJcXFxccGVycFwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjAzQ1wiLCBcIlxcXFxtYXRoY2xvc2V7IVxcXFxta2Vybi0wLjhtdSF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjBDXCIsIFwiXFxcXG5vdG5pXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMzFDXCIsIFwiXFxcXHVsY29ybmVyXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMzFEXCIsIFwiXFxcXHVyY29ybmVyXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMzFFXCIsIFwiXFxcXGxsY29ybmVyXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMzFGXCIsIFwiXFxcXGxyY29ybmVyXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHhBOVwiLCBcIlxcXFxjb3B5cmlnaHRcIik7XG5kZWZpbmVNYWNybyhcIlxceEFFXCIsIFwiXFxcXHRleHRyZWdpc3RlcmVkXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHVGRTBGXCIsIFwiXFxcXHRleHRyZWdpc3RlcmVkXCIpOyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBMYVRlWF8yzrVcbi8vIFxcdmRvdHN7XFx2Ym94e1xcYmFzZWxpbmVza2lwNFxccEAgIFxcbGluZXNraXBsaW1pdFxcekBcbi8vIFxca2VybjZcXHBAXFxoYm94ey59XFxoYm94ey59XFxoYm94ey59fX1cbi8vIFdlJ2xsIGNhbGwgXFx2YXJ2ZG90cywgd2hpY2ggZ2V0cyBhIGdseXBoIGZyb20gc3ltYm9scy5qcy5cbi8vIFRoZSB6ZXJvLXdpZHRoIHJ1bGUgZ2V0cyB1cyBhbiBlcXVpdmFsZW50IHRvIHRoZSB2ZXJ0aWNhbCA2cHQga2Vybi5cblxuZGVmaW5lTWFjcm8oXCJcXFxcdmRvdHNcIiwgXCJcXFxcbWF0aG9yZHtcXFxcdmFydmRvdHNcXFxccnVsZXswcHR9ezE1cHR9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjJFRVwiLCBcIlxcXFx2ZG90c1wiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gYW1zbWF0aC5zdHlcbi8vIGh0dHA6Ly9taXJyb3JzLmNvbmNlcnRwYXNzLmNvbS90ZXgtYXJjaGl2ZS9tYWNyb3MvbGF0ZXgvcmVxdWlyZWQvYW1zbWF0aC9hbXNtYXRoLnBkZlxuLy8gSXRhbGljIEdyZWVrIGNhcGl0YWwgbGV0dGVycy4gIEFNUyBkZWZpbmVzIHRoZXNlIHdpdGggXFxEZWNsYXJlTWF0aFN5bWJvbCxcbi8vIGJ1dCB0aGV5IGFyZSBlcXVpdmFsZW50IHRvIFxcbWF0aGl0e1xcTGV0dGVyfS5cblxuZGVmaW5lTWFjcm8oXCJcXFxcdmFyR2FtbWFcIiwgXCJcXFxcbWF0aGl0e1xcXFxHYW1tYX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJEZWx0YVwiLCBcIlxcXFxtYXRoaXR7XFxcXERlbHRhfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhclRoZXRhXCIsIFwiXFxcXG1hdGhpdHtcXFxcVGhldGF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyTGFtYmRhXCIsIFwiXFxcXG1hdGhpdHtcXFxcTGFtYmRhfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhclhpXCIsIFwiXFxcXG1hdGhpdHtcXFxcWGl9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyUGlcIiwgXCJcXFxcbWF0aGl0e1xcXFxQaX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJTaWdtYVwiLCBcIlxcXFxtYXRoaXR7XFxcXFNpZ21hfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhclVwc2lsb25cIiwgXCJcXFxcbWF0aGl0e1xcXFxVcHNpbG9ufVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhclBoaVwiLCBcIlxcXFxtYXRoaXR7XFxcXFBoaX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJQc2lcIiwgXCJcXFxcbWF0aGl0e1xcXFxQc2l9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyT21lZ2FcIiwgXCJcXFxcbWF0aGl0e1xcXFxPbWVnYX1cIik7IC8vXFxuZXdjb21tYW5ke1xcc3Vic3RhY2t9WzFde1xcc3ViYXJyYXl7Y30jMVxcZW5kc3ViYXJyYXl9XG5cbmRlZmluZU1hY3JvKFwiXFxcXHN1YnN0YWNrXCIsIFwiXFxcXGJlZ2lue3N1YmFycmF5fXtjfSMxXFxcXGVuZHtzdWJhcnJheX1cIik7IC8vIFxccmVuZXdjb21tYW5ke1xcY29sb259e1xcbm9icmVha1xcbXNraXAybXVcXG1hdGhwdW5jdHt9XFxub25zY3JpcHRcbi8vIFxcbWtlcm4tXFx0aGlubXVza2lwezp9XFxtc2tpcDZtdXBsdXMxbXVcXHJlbGF4fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxjb2xvblwiLCBcIlxcXFxub2JyZWFrXFxcXG1za2lwMm11XFxcXG1hdGhwdW5jdHt9XCIgKyBcIlxcXFxtYXRoY2hvaWNle1xcXFxta2Vybi0zbXV9e1xcXFxta2Vybi0zbXV9e317fXs6fVxcXFxtc2tpcDZtdVwiKTsgLy8gXFxuZXdjb21tYW5ke1xcYm94ZWR9WzFde1xcZmJveHtcXG1AdGgkXFxkaXNwbGF5c3R5bGUjMSR9fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxib3hlZFwiLCBcIlxcXFxmYm94eyRcXFxcZGlzcGxheXN0eWxleyMxfSR9XCIpOyAvLyBcXGRlZlxcaWZme1xcRE9UU0JcXDtcXExvbmdsZWZ0cmlnaHRhcnJvd1xcO31cbi8vIFxcZGVmXFxpbXBsaWVze1xcRE9UU0JcXDtcXExvbmdyaWdodGFycm93XFw7fVxuLy8gXFxkZWZcXGltcGxpZWRieXtcXERPVFNCXFw7XFxMb25nbGVmdGFycm93XFw7fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxpZmZcIiwgXCJcXFxcRE9UU0JcXFxcO1xcXFxMb25nbGVmdHJpZ2h0YXJyb3dcXFxcO1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGltcGxpZXNcIiwgXCJcXFxcRE9UU0JcXFxcO1xcXFxMb25ncmlnaHRhcnJvd1xcXFw7XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaW1wbGllZGJ5XCIsIFwiXFxcXERPVFNCXFxcXDtcXFxcTG9uZ2xlZnRhcnJvd1xcXFw7XCIpOyAvLyBBTVNNYXRoJ3MgYXV0b21hdGljIFxcZG90cywgYmFzZWQgb24gXFxtZG90c0BAIG1hY3JvLlxuXG52YXIgZG90c0J5VG9rZW4gPSB7XG4gICcsJzogJ1xcXFxkb3RzYycsXG4gICdcXFxcbm90JzogJ1xcXFxkb3RzYicsXG4gIC8vIFxca2V5YmluQCBjaGVja3MgZm9yIHRoZSBmb2xsb3dpbmc6XG4gICcrJzogJ1xcXFxkb3RzYicsXG4gICc9JzogJ1xcXFxkb3RzYicsXG4gICc8JzogJ1xcXFxkb3RzYicsXG4gICc+JzogJ1xcXFxkb3RzYicsXG4gICctJzogJ1xcXFxkb3RzYicsXG4gICcqJzogJ1xcXFxkb3RzYicsXG4gICc6JzogJ1xcXFxkb3RzYicsXG4gIC8vIFN5bWJvbHMgd2hvc2UgZGVmaW5pdGlvbiBzdGFydHMgd2l0aCBcXERPVFNCOlxuICAnXFxcXERPVFNCJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcY29wcm9kJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcYmlndmVlJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcYmlnd2VkZ2UnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWd1cGx1cyc6ICdcXFxcZG90c2InLFxuICAnXFxcXGJpZ2NhcCc6ICdcXFxcZG90c2InLFxuICAnXFxcXGJpZ2N1cCc6ICdcXFxcZG90c2InLFxuICAnXFxcXHByb2QnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxzdW0nOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWdvdGltZXMnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWdvcGx1cyc6ICdcXFxcZG90c2InLFxuICAnXFxcXGJpZ29kb3QnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWdzcWN1cCc6ICdcXFxcZG90c2InLFxuICAnXFxcXEFuZCc6ICdcXFxcZG90c2InLFxuICAnXFxcXGxvbmdyaWdodGFycm93JzogJ1xcXFxkb3RzYicsXG4gICdcXFxcTG9uZ3JpZ2h0YXJyb3cnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxsb25nbGVmdGFycm93JzogJ1xcXFxkb3RzYicsXG4gICdcXFxcTG9uZ2xlZnRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXGxvbmdsZWZ0cmlnaHRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXExvbmdsZWZ0cmlnaHRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXG1hcHN0byc6ICdcXFxcZG90c2InLFxuICAnXFxcXGxvbmdtYXBzdG8nOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxob29rcmlnaHRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXGRvdGVxJzogJ1xcXFxkb3RzYicsXG4gIC8vIFN5bWJvbHMgd2hvc2UgZGVmaW5pdGlvbiBzdGFydHMgd2l0aCBcXG1hdGhiaW46XG4gICdcXFxcbWF0aGJpbic6ICdcXFxcZG90c2InLFxuICAvLyBTeW1ib2xzIHdob3NlIGRlZmluaXRpb24gc3RhcnRzIHdpdGggXFxtYXRocmVsOlxuICAnXFxcXG1hdGhyZWwnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxyZWxiYXInOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxSZWxiYXInOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFx4cmlnaHRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXHhsZWZ0YXJyb3cnOiAnXFxcXGRvdHNiJyxcbiAgLy8gU3ltYm9scyB3aG9zZSBkZWZpbml0aW9uIHN0YXJ0cyB3aXRoIFxcRE9UU0k6XG4gICdcXFxcRE9UU0knOiAnXFxcXGRvdHNpJyxcbiAgJ1xcXFxpbnQnOiAnXFxcXGRvdHNpJyxcbiAgJ1xcXFxvaW50JzogJ1xcXFxkb3RzaScsXG4gICdcXFxcaWludCc6ICdcXFxcZG90c2knLFxuICAnXFxcXGlpaW50JzogJ1xcXFxkb3RzaScsXG4gICdcXFxcaWlpaW50JzogJ1xcXFxkb3RzaScsXG4gICdcXFxcaWRvdHNpbnQnOiAnXFxcXGRvdHNpJyxcbiAgLy8gU3ltYm9scyB3aG9zZSBkZWZpbml0aW9uIHN0YXJ0cyB3aXRoIFxcRE9UU1g6XG4gICdcXFxcRE9UU1gnOiAnXFxcXGRvdHN4J1xufTtcbmRlZmluZU1hY3JvKFwiXFxcXGRvdHNcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgLy8gVE9ETzogSWYgdXNlZCBpbiB0ZXh0IG1vZGUsIHNob3VsZCBleHBhbmQgdG8gXFx0ZXh0ZWxsaXBzaXMuXG4gIC8vIEhvd2V2ZXIsIGluIEthVGVYLCBcXHRleHRlbGxpcHNpcyBhbmQgXFxsZG90cyBiZWhhdmUgdGhlIHNhbWVcbiAgLy8gKGluIHRleHQgbW9kZSksIGFuZCBpdCdzIHVubGlrZWx5IHdlJ2Qgc2VlIGFueSBvZiB0aGUgbWF0aCBjb21tYW5kc1xuICAvLyB0aGF0IGFmZmVjdCB0aGUgYmVoYXZpb3Igb2YgXFxkb3RzIHdoZW4gaW4gdGV4dCBtb2RlLiAgU28gZmluZSBmb3Igbm93XG4gIC8vICh1bnRpbCB3ZSBzdXBwb3J0IFxcaWZtbW9kZSAuLi4gXFxlbHNlIC4uLiBcXGZpKS5cbiAgdmFyIHRoZWRvdHMgPSAnXFxcXGRvdHNvJztcbiAgdmFyIG5leHQgPSBjb250ZXh0LmV4cGFuZEFmdGVyRnV0dXJlKCkudGV4dDtcblxuICBpZiAobmV4dCBpbiBkb3RzQnlUb2tlbikge1xuICAgIHRoZWRvdHMgPSBkb3RzQnlUb2tlbltuZXh0XTtcbiAgfSBlbHNlIGlmIChuZXh0LnN1YnN0cigwLCA0KSA9PT0gJ1xcXFxub3QnKSB7XG4gICAgdGhlZG90cyA9ICdcXFxcZG90c2InO1xuICB9IGVsc2UgaWYgKG5leHQgaW4gc3JjX3N5bWJvbHMubWF0aCkge1xuICAgIGlmICh1dGlscy5jb250YWlucyhbJ2JpbicsICdyZWwnXSwgc3JjX3N5bWJvbHMubWF0aFtuZXh0XS5ncm91cCkpIHtcbiAgICAgIHRoZWRvdHMgPSAnXFxcXGRvdHNiJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhlZG90cztcbn0pO1xudmFyIHNwYWNlQWZ0ZXJEb3RzID0ge1xuICAvLyBcXHJpZ2h0ZGVsaW1AIGNoZWNrcyBmb3IgdGhlIGZvbGxvd2luZzpcbiAgJyknOiB0cnVlLFxuICAnXSc6IHRydWUsXG4gICdcXFxccmJyYWNrJzogdHJ1ZSxcbiAgJ1xcXFx9JzogdHJ1ZSxcbiAgJ1xcXFxyYnJhY2UnOiB0cnVlLFxuICAnXFxcXHJhbmdsZSc6IHRydWUsXG4gICdcXFxccmNlaWwnOiB0cnVlLFxuICAnXFxcXHJmbG9vcic6IHRydWUsXG4gICdcXFxccmdyb3VwJzogdHJ1ZSxcbiAgJ1xcXFxybW91c3RhY2hlJzogdHJ1ZSxcbiAgJ1xcXFxyaWdodCc6IHRydWUsXG4gICdcXFxcYmlncic6IHRydWUsXG4gICdcXFxcYmlnZ3InOiB0cnVlLFxuICAnXFxcXEJpZ3InOiB0cnVlLFxuICAnXFxcXEJpZ2dyJzogdHJ1ZSxcbiAgLy8gXFxleHRyYUAgYWxzbyB0ZXN0cyBmb3IgdGhlIGZvbGxvd2luZzpcbiAgJyQnOiB0cnVlLFxuICAvLyBcXGV4dHJhcEAgY2hlY2tzIGZvciB0aGUgZm9sbG93aW5nOlxuICAnOyc6IHRydWUsXG4gICcuJzogdHJ1ZSxcbiAgJywnOiB0cnVlXG59O1xuZGVmaW5lTWFjcm8oXCJcXFxcZG90c29cIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgdmFyIG5leHQgPSBjb250ZXh0LmZ1dHVyZSgpLnRleHQ7XG5cbiAgaWYgKG5leHQgaW4gc3BhY2VBZnRlckRvdHMpIHtcbiAgICByZXR1cm4gXCJcXFxcbGRvdHNcXFxcLFwiO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIlxcXFxsZG90c1wiO1xuICB9XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXGRvdHNjXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciBuZXh0ID0gY29udGV4dC5mdXR1cmUoKS50ZXh0OyAvLyBcXGRvdHNjIHVzZXMgXFxleHRyYUAgYnV0IG5vdCBcXGV4dHJhcEAsIGluc3RlYWQgc3BlY2lhbGx5IGNoZWNraW5nIGZvclxuICAvLyAnOycgYW5kICcuJywgYnV0IGRvZXNuJ3QgY2hlY2sgZm9yICcsJy5cblxuICBpZiAobmV4dCBpbiBzcGFjZUFmdGVyRG90cyAmJiBuZXh0ICE9PSAnLCcpIHtcbiAgICByZXR1cm4gXCJcXFxcbGRvdHNcXFxcLFwiO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIlxcXFxsZG90c1wiO1xuICB9XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXGNkb3RzXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciBuZXh0ID0gY29udGV4dC5mdXR1cmUoKS50ZXh0O1xuXG4gIGlmIChuZXh0IGluIHNwYWNlQWZ0ZXJEb3RzKSB7XG4gICAgcmV0dXJuIFwiXFxcXEBjZG90c1xcXFwsXCI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwiXFxcXEBjZG90c1wiO1xuICB9XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXGRvdHNiXCIsIFwiXFxcXGNkb3RzXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZG90c21cIiwgXCJcXFxcY2RvdHNcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxkb3RzaVwiLCBcIlxcXFwhXFxcXGNkb3RzXCIpOyAvLyBhbXNtYXRoIGRvZXNuJ3QgYWN0dWFsbHkgZGVmaW5lIFxcZG90c3gsIGJ1dCBcXGRvdHMgZm9sbG93ZWQgYnkgYSBtYWNyb1xuLy8gc3RhcnRpbmcgd2l0aCBcXERPVFNYIGltcGxpZXMgXFxkb3RzbywgYW5kIHRoZW4gXFxleHRyYUAgZGV0ZWN0cyB0aGlzIGNhc2Vcbi8vIGFuZCBmb3JjZXMgdGhlIGFkZGVkIGBcXCxgLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxkb3RzeFwiLCBcIlxcXFxsZG90c1xcXFwsXCIpOyAvLyBcXGxldFxcRE9UU0lcXHJlbGF4XG4vLyBcXGxldFxcRE9UU0JcXHJlbGF4XG4vLyBcXGxldFxcRE9UU1hcXHJlbGF4XG5cbmRlZmluZU1hY3JvKFwiXFxcXERPVFNJXCIsIFwiXFxcXHJlbGF4XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcRE9UU0JcIiwgXCJcXFxccmVsYXhcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxET1RTWFwiLCBcIlxcXFxyZWxheFwiKTsgLy8gU3BhY2luZywgYmFzZWQgb24gYW1zbWF0aC5zdHkncyBvdmVycmlkZSBvZiBMYVRlWCBkZWZhdWx0c1xuLy8gXFxEZWNsYXJlUm9idXN0Q29tbWFuZHtcXHRtc3BhY2V9WzNdeyVcbi8vICAgXFxpZm1tb2RlXFxtc2tpcCMxIzJcXGVsc2VcXGtlcm4jMSMzXFxmaVxccmVsYXh9XG5cbmRlZmluZU1hY3JvKFwiXFxcXHRtc3BhY2VcIiwgXCJcXFxcVGV4dE9yTWF0aHtcXFxca2VybiMxIzN9e1xcXFxtc2tpcCMxIzJ9XFxcXHJlbGF4XCIpOyAvLyBcXHJlbmV3Y29tbWFuZHtcXCx9e1xcdG1zcGFjZStcXHRoaW5tdXNraXB7LjE2NjdlbX19XG4vLyBUT0RPOiBtYXRoIG1vZGUgc2hvdWxkIHVzZSBcXHRoaW5tdXNraXBcblxuZGVmaW5lTWFjcm8oXCJcXFxcLFwiLCBcIlxcXFx0bXNwYWNlK3szbXV9ey4xNjY3ZW19XCIpOyAvLyBcXGxldFxcdGhpbnNwYWNlXFwsXG5cbmRlZmluZU1hY3JvKFwiXFxcXHRoaW5zcGFjZVwiLCBcIlxcXFwsXCIpOyAvLyBcXGRlZlxcPntcXG1za2lwXFxtZWRtdXNraXB9XG4vLyBcXHJlbmV3Y29tbWFuZHtcXDp9e1xcdG1zcGFjZStcXG1lZG11c2tpcHsuMjIyMmVtfX1cbi8vIFRPRE86IFxcPiBhbmQgbWF0aCBtb2RlIG9mIFxcOiBzaG91bGQgdXNlIFxcbWVkbXVza2lwID0gNG11IHBsdXMgMm11IG1pbnVzIDRtdVxuXG5kZWZpbmVNYWNybyhcIlxcXFw+XCIsIFwiXFxcXG1za2lwezRtdX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFw6XCIsIFwiXFxcXHRtc3BhY2UrezRtdX17LjIyMjJlbX1cIik7IC8vIFxcbGV0XFxtZWRzcGFjZVxcOlxuXG5kZWZpbmVNYWNybyhcIlxcXFxtZWRzcGFjZVwiLCBcIlxcXFw6XCIpOyAvLyBcXHJlbmV3Y29tbWFuZHtcXDt9e1xcdG1zcGFjZStcXHRoaWNrbXVza2lwey4yNzc3ZW19fVxuLy8gVE9ETzogbWF0aCBtb2RlIHNob3VsZCB1c2UgXFx0aGlja211c2tpcCA9IDVtdSBwbHVzIDVtdVxuXG5kZWZpbmVNYWNybyhcIlxcXFw7XCIsIFwiXFxcXHRtc3BhY2UrezVtdX17LjI3NzdlbX1cIik7IC8vIFxcbGV0XFx0aGlja3NwYWNlXFw7XG5cbmRlZmluZU1hY3JvKFwiXFxcXHRoaWNrc3BhY2VcIiwgXCJcXFxcO1wiKTsgLy8gXFxyZW5ld2NvbW1hbmR7XFwhfXtcXHRtc3BhY2UtXFx0aGlubXVza2lwey4xNjY3ZW19fVxuLy8gVE9ETzogbWF0aCBtb2RlIHNob3VsZCB1c2UgXFx0aGlubXVza2lwXG5cbmRlZmluZU1hY3JvKFwiXFxcXCFcIiwgXCJcXFxcdG1zcGFjZS17M211fXsuMTY2N2VtfVwiKTsgLy8gXFxsZXRcXG5lZ3RoaW5zcGFjZVxcIVxuXG5kZWZpbmVNYWNybyhcIlxcXFxuZWd0aGluc3BhY2VcIiwgXCJcXFxcIVwiKTsgLy8gXFxuZXdjb21tYW5ke1xcbmVnbWVkc3BhY2V9e1xcdG1zcGFjZS1cXG1lZG11c2tpcHsuMjIyMmVtfX1cbi8vIFRPRE86IG1hdGggbW9kZSBzaG91bGQgdXNlIFxcbWVkbXVza2lwXG5cbmRlZmluZU1hY3JvKFwiXFxcXG5lZ21lZHNwYWNlXCIsIFwiXFxcXHRtc3BhY2UtezRtdX17LjIyMjJlbX1cIik7IC8vIFxcbmV3Y29tbWFuZHtcXG5lZ3RoaWNrc3BhY2V9e1xcdG1zcGFjZS1cXHRoaWNrbXVza2lwey4yNzc3ZW19fVxuLy8gVE9ETzogbWF0aCBtb2RlIHNob3VsZCB1c2UgXFx0aGlja211c2tpcFxuXG5kZWZpbmVNYWNybyhcIlxcXFxuZWd0aGlja3NwYWNlXCIsIFwiXFxcXHRtc3BhY2UtezVtdX17LjI3N2VtfVwiKTsgLy8gXFxkZWZcXGVuc3BhY2V7XFxrZXJuLjVlbSB9XG5cbmRlZmluZU1hY3JvKFwiXFxcXGVuc3BhY2VcIiwgXCJcXFxca2Vybi41ZW0gXCIpOyAvLyBcXGRlZlxcZW5za2lwe1xcaHNraXAuNWVtXFxyZWxheH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcZW5za2lwXCIsIFwiXFxcXGhza2lwLjVlbVxcXFxyZWxheFwiKTsgLy8gXFxkZWZcXHF1YWR7XFxoc2tpcDFlbVxccmVsYXh9XG5cbmRlZmluZU1hY3JvKFwiXFxcXHF1YWRcIiwgXCJcXFxcaHNraXAxZW1cXFxccmVsYXhcIik7IC8vIFxcZGVmXFxxcXVhZHtcXGhza2lwMmVtXFxyZWxheH1cblxuZGVmaW5lTWFjcm8oXCJcXFxccXF1YWRcIiwgXCJcXFxcaHNraXAyZW1cXFxccmVsYXhcIik7IC8vIFxcdGFnQGluQGRpc3BsYXkgZm9ybSBvZiBcXHRhZ1xuXG5kZWZpbmVNYWNybyhcIlxcXFx0YWdcIiwgXCJcXFxcQGlmc3RhclxcXFx0YWdAbGl0ZXJhbFxcXFx0YWdAcGFyZW5cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx0YWdAcGFyZW5cIiwgXCJcXFxcdGFnQGxpdGVyYWx7KHsjMX0pfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHRhZ0BsaXRlcmFsXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIGlmIChjb250ZXh0Lm1hY3Jvcy5nZXQoXCJcXFxcZGZAdGFnXCIpKSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiTXVsdGlwbGUgXFxcXHRhZ1wiKTtcbiAgfVxuXG4gIHJldHVybiBcIlxcXFxnZGVmXFxcXGRmQHRhZ3tcXFxcdGV4dHsjMX19XCI7XG59KTsgLy8gXFxyZW5ld2NvbW1hbmR7XFxibW9kfXtcXG5vbnNjcmlwdFxcbXNraXAtXFxtZWRtdXNraXBcXG1rZXJuNW11XFxtYXRoYmluXG4vLyAgIHtcXG9wZXJhdG9yQGZvbnQgbW9kfVxccGVuYWx0eTkwMFxuLy8gICBcXG1rZXJuNW11XFxub25zY3JpcHRcXG1za2lwLVxcbWVkbXVza2lwfVxuLy8gXFxuZXdjb21tYW5ke1xccG9kfVsxXXtcXGFsbG93YnJlYWtcbi8vICAgXFxpZkBkaXNwbGF5XFxta2VybjE4bXVcXGVsc2VcXG1rZXJuOG11XFxmaSgjMSl9XG4vLyBcXHJlbmV3Y29tbWFuZHtcXHBtb2R9WzFde1xccG9ke3tcXG9wZXJhdG9yQGZvbnQgbW9kfVxcbWtlcm42bXUjMX19XG4vLyBcXG5ld2NvbW1hbmR7XFxtb2R9WzFde1xcYWxsb3dicmVha1xcaWZAZGlzcGxheVxcbWtlcm4xOG11XG4vLyAgIFxcZWxzZVxcbWtlcm4xMm11XFxmaXtcXG9wZXJhdG9yQGZvbnQgbW9kfVxcLFxcLCMxfVxuLy8gVE9ETzogbWF0aCBtb2RlIHNob3VsZCB1c2UgXFxtZWRtdXNraXAgPSA0bXUgcGx1cyAybXUgbWludXMgNG11XG5cbmRlZmluZU1hY3JvKFwiXFxcXGJtb2RcIiwgXCJcXFxcbWF0aGNob2ljZXtcXFxcbXNraXAxbXV9e1xcXFxtc2tpcDFtdX17XFxcXG1za2lwNW11fXtcXFxcbXNraXA1bXV9XCIgKyBcIlxcXFxtYXRoYmlue1xcXFxybSBtb2R9XCIgKyBcIlxcXFxtYXRoY2hvaWNle1xcXFxtc2tpcDFtdX17XFxcXG1za2lwMW11fXtcXFxcbXNraXA1bXV9e1xcXFxtc2tpcDVtdX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwb2RcIiwgXCJcXFxcYWxsb3dicmVha1wiICsgXCJcXFxcbWF0aGNob2ljZXtcXFxcbWtlcm4xOG11fXtcXFxcbWtlcm44bXV9e1xcXFxta2VybjhtdX17XFxcXG1rZXJuOG11fSgjMSlcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwbW9kXCIsIFwiXFxcXHBvZHt7XFxcXHJtIG1vZH1cXFxcbWtlcm42bXUjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtb2RcIiwgXCJcXFxcYWxsb3dicmVha1wiICsgXCJcXFxcbWF0aGNob2ljZXtcXFxcbWtlcm4xOG11fXtcXFxcbWtlcm4xMm11fXtcXFxcbWtlcm4xMm11fXtcXFxcbWtlcm4xMm11fVwiICsgXCJ7XFxcXHJtIG1vZH1cXFxcLFxcXFwsIzFcIik7IC8vIFxccG1iICAgIC0tICAgQSBzaW11bGF0aW9uIG9mIGJvbGQuXG4vLyBUaGUgdmVyc2lvbiBpbiBhbWJzeS5zdHkgd29ya3MgYnkgdHlwZXNldHRpbmcgdGhyZWUgY29waWVzIG9mIHRoZSBhcmd1bWVudFxuLy8gd2l0aCBzbWFsbCBvZmZzZXRzLiBXZSB1c2UgdHdvIGNvcGllcy4gV2Ugb21pdCB0aGUgdmVydGljYWwgb2Zmc2V0IGJlY2F1c2Vcbi8vIG9mIHJlbmRlcmluZyBwcm9ibGVtcyB0aGF0IG1ha2VWTGlzdCBlbmNvdW50ZXJzIGluIFNhZmFyaS5cblxuZGVmaW5lTWFjcm8oXCJcXFxccG1iXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcQGJpbnJlbHsjMX17XFxcXG1hdGhybGFweyMxfVxcXFxrZXJuMC41cHgjMX19XCIgKyBcIntcXFxcbWF0aGJmeyMxfX1cIik7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIExhVGVYIHNvdXJjZTJlXG4vLyBcXFxcIGRlZmF1bHRzIHRvIFxcbmV3bGluZSwgYnV0IGNoYW5nZXMgdG8gXFxjciB3aXRoaW4gYXJyYXkgZW52aXJvbm1lbnRcblxuZGVmaW5lTWFjcm8oXCJcXFxcXFxcXFwiLCBcIlxcXFxuZXdsaW5lXCIpOyAvLyBcXGRlZlxcVGVYe1RcXGtlcm4tLjE2NjdlbVxcbG93ZXIuNWV4XFxoYm94e0V9XFxrZXJuLS4xMjVlbVhcXEB9XG4vLyBUT0RPOiBEb2Vzbid0IG5vcm1hbGx5IHdvcmsgaW4gbWF0aCBtb2RlIGJlY2F1c2UgXFxAIGZhaWxzLiAgS2FUZVggZG9lc24ndFxuLy8gc3VwcG9ydCBcXEAgeWV0LCBzbyB0aGF0J3Mgb21pdHRlZCwgYW5kIHdlIGFkZCBcXHRleHQgc28gdGhhdCB0aGUgcmVzdWx0XG4vLyBkb2Vzbid0IGxvb2sgZnVubnkgaW4gbWF0aCBtb2RlLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxUZVhcIiwgXCJcXFxcdGV4dHJte1xcXFxodG1sQG1hdGhtbHtcIiArIFwiVFxcXFxrZXJuLS4xNjY3ZW1cXFxccmFpc2Vib3h7LS41ZXh9e0V9XFxcXGtlcm4tLjEyNWVtWFwiICsgXCJ9e1RlWH19XCIpOyAvLyBcXERlY2xhcmVSb2J1c3RDb21tYW5ke1xcTGFUZVh9e0xcXGtlcm4tLjM2ZW0lXG4vLyAgICAgICAgIHtcXHNib3hcXHpAIFQlXG4vLyAgICAgICAgICBcXHZib3ggdG9cXGh0XFx6QHtcXGhib3h7XFxjaGVja0BtYXRoZm9udHNcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcZm9udHNpemVcXHNmQHNpemVcXHpAXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG1hdGhAZm9udHNmYWxzZVxcc2VsZWN0Zm9udFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQX0lXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICBcXHZzc30lXG4vLyAgICAgICAgIH0lXG4vLyAgICAgICAgIFxca2Vybi0uMTVlbSVcbi8vICAgICAgICAgXFxUZVh9XG4vLyBUaGlzIGNvZGUgYWxpZ25zIHRoZSB0b3Agb2YgdGhlIEEgd2l0aCB0aGUgVCAoZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgVGVYJ3Ncbi8vIGJveGVzLCB0aG91Z2ggdmlzdWFsbHkgdGhlIEEgYXBwZWFycyB0byBleHRlbmQgYWJvdmUgc2xpZ2h0bHkpLlxuLy8gV2UgY29tcHV0ZSB0aGUgY29ycmVzcG9uZGluZyBcXHJhaXNlYm94IHdoZW4gQSBpcyByZW5kZXJlZCBpbiBcXG5vcm1hbHNpemVcbi8vIFxcc2NyaXB0c3R5bGUsIHdoaWNoIGhhcyBhIHNjYWxlIGZhY3RvciBvZiAwLjcgKHNlZSBPcHRpb25zLmpzKS5cblxudmFyIGxhdGV4UmFpc2VBID0gZm9udE1ldHJpY3NEYXRhWydNYWluLVJlZ3VsYXInXVtcIlRcIi5jaGFyQ29kZUF0KDApXVsxXSAtIDAuNyAqIGZvbnRNZXRyaWNzRGF0YVsnTWFpbi1SZWd1bGFyJ11bXCJBXCIuY2hhckNvZGVBdCgwKV1bMV0gKyBcImVtXCI7XG5kZWZpbmVNYWNybyhcIlxcXFxMYVRlWFwiLCBcIlxcXFx0ZXh0cm17XFxcXGh0bWxAbWF0aG1se1wiICsgKFwiTFxcXFxrZXJuLS4zNmVtXFxcXHJhaXNlYm94e1wiICsgbGF0ZXhSYWlzZUEgKyBcIn17XFxcXHNjcmlwdHN0eWxlIEF9XCIpICsgXCJcXFxca2Vybi0uMTVlbVxcXFxUZVh9e0xhVGVYfX1cIik7IC8vIE5ldyBLYVRlWCBsb2dvIGJhc2VkIG9uIHR3ZWFraW5nIExhVGVYIGxvZ29cblxuZGVmaW5lTWFjcm8oXCJcXFxcS2FUZVhcIiwgXCJcXFxcdGV4dHJte1xcXFxodG1sQG1hdGhtbHtcIiArIChcIktcXFxca2Vybi0uMTdlbVxcXFxyYWlzZWJveHtcIiArIGxhdGV4UmFpc2VBICsgXCJ9e1xcXFxzY3JpcHRzdHlsZSBBfVwiKSArIFwiXFxcXGtlcm4tLjE1ZW1cXFxcVGVYfXtLYVRlWH19XCIpOyAvLyBcXERlY2xhcmVSb2J1c3RDb21tYW5kXFxoc3BhY2V7XFxAaWZzdGFyXFxAaHNwYWNlclxcQGhzcGFjZX1cbi8vIFxcZGVmXFxAaHNwYWNlIzF7XFxoc2tpcCAgIzFcXHJlbGF4fVxuLy8gXFxkZWZcXEBoc3BhY2VyIzF7XFx2cnVsZSBcXEB3aWR0aFxcekBcXG5vYnJlYWtcbi8vICAgICAgICAgICAgICAgICBcXGhza2lwICMxXFxoc2tpcCBcXHpAc2tpcH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcaHNwYWNlXCIsIFwiXFxcXEBpZnN0YXJcXFxcQGhzcGFjZXJcXFxcQGhzcGFjZVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEBoc3BhY2VcIiwgXCJcXFxcaHNraXAgIzFcXFxccmVsYXhcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxAaHNwYWNlclwiLCBcIlxcXFxydWxlezBwdH17MHB0fVxcXFxoc2tpcCAjMVxcXFxyZWxheFwiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gbWF0aHRvb2xzLnN0eVxuLy9cXHByb3ZpZGVjb21tYW5kXFxvcmRpbmFyeWNvbG9uezp9XG5cbmRlZmluZU1hY3JvKFwiXFxcXG9yZGluYXJ5Y29sb25cIiwgXCI6XCIpOyAvL1xcZGVmXFx2Y2VudGNvbG9ue1xcbWF0aHJlbHtcXG1hdGhvcFxcb3JkaW5hcnljb2xvbn19XG4vL1RPRE8oZWRlbWFpbmUpOiBOb3QgeWV0IGNlbnRlcmVkLiBGaXggdmlhIFxccmFpc2Vib3ggb3IgIzcyNlxuXG5kZWZpbmVNYWNybyhcIlxcXFx2Y2VudGNvbG9uXCIsIFwiXFxcXG1hdGhyZWx7XFxcXG1hdGhvcFxcXFxvcmRpbmFyeWNvbG9ufVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGRibGNvbG9ue1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLS45bXV9XFx2Y2VudGNvbG9ufVxuXG5kZWZpbmVNYWNybyhcIlxcXFxkYmxjb2xvblwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXHZjZW50Y29sb25cXFxcbWF0aHJlbHtcXFxcbWtlcm4tLjltdX1cXFxcdmNlbnRjb2xvbn19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjIyMzd9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGNvbG9uZXFxe1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fT19XG5cbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uZXFxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHtcXFxcdmNlbnRjb2xvblxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX09fX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjI1NH19XCIpOyAvLyDiiZRcbi8vIFxccHJvdmlkZWNvbW1hbmQqXFxDb2xvbmVxcXtcXGRibGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9PX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcQ29sb25lcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFxkYmxjb2xvblxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX09fX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjIzN1xcXFxjaGFyXFxcIjNkfX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxjb2xvbmVxe1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcbWF0aHJlbHstfX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25lcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXHZjZW50Y29sb25cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXG1hdGhyZWx7LX19fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIzYVxcXFxjaGFyXFxcIjIyMTJ9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXENvbG9uZXF7XFxkYmxjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcbWF0aHJlbHstfX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcQ29sb25lcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXGRibGNvbG9uXFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxtYXRocmVsey19fX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjIzN1xcXFxjaGFyXFxcIjIyMTJ9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGVxcWNvbG9uez1cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXHZjZW50Y29sb259XG5cbmRlZmluZU1hY3JvKFwiXFxcXGVxcWNvbG9uXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHs9XFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFx2Y2VudGNvbG9ufX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjI1NX19XCIpOyAvLyDiiZVcbi8vIFxccHJvdmlkZWNvbW1hbmQqXFxFcXFjb2xvbns9XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxkYmxjb2xvbn1cblxuZGVmaW5lTWFjcm8oXCJcXFxcRXFxY29sb25cIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVsez1cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXGRibGNvbG9ufX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiM2RcXFxcY2hhclxcXCIyMjM3fX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxlcWNvbG9ue1xcbWF0aHJlbHstfVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcdmNlbnRjb2xvbn1cblxuZGVmaW5lTWFjcm8oXCJcXFxcZXFjb2xvblwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXG1hdGhyZWx7LX1cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXHZjZW50Y29sb259fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMjM5fX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxFcWNvbG9ue1xcbWF0aHJlbHstfVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcZGJsY29sb259XG5cbmRlZmluZU1hY3JvKFwiXFxcXEVxY29sb25cIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFxtYXRocmVsey19XFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxkYmxjb2xvbn19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjIyMTJcXFxcY2hhclxcXCIyMjM3fX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxjb2xvbmFwcHJveHtcXHZjZW50Y29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXGFwcHJveH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25hcHByb3hcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFx2Y2VudGNvbG9uXFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxhcHByb3h9fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIzYVxcXFxjaGFyXFxcIjIyNDh9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXENvbG9uYXBwcm94e1xcZGJsY29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXGFwcHJveH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcQ29sb25hcHByb3hcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFxkYmxjb2xvblxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcYXBwcm94fX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjIzN1xcXFxjaGFyXFxcIjIyNDh9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGNvbG9uc2lte1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcc2ltfVxuXG5kZWZpbmVNYWNybyhcIlxcXFxjb2xvbnNpbVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXHZjZW50Y29sb25cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXHNpbX19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjNhXFxcXGNoYXJcXFwiMjIzY319XCIpOyAvLyBcXHByb3ZpZGVjb21tYW5kKlxcQ29sb25zaW17XFxkYmxjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcc2ltfVxuXG5kZWZpbmVNYWNybyhcIlxcXFxDb2xvbnNpbVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXGRibGNvbG9uXFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxzaW19fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMjM3XFxcXGNoYXJcXFwiMjIzY319XCIpOyAvLyBTb21lIFVuaWNvZGUgY2hhcmFjdGVycyBhcmUgaW1wbGVtZW50ZWQgd2l0aCBtYWNyb3MgdG8gbWF0aHRvb2xzIGZ1bmN0aW9ucy5cblxuZGVmaW5lTWFjcm8oXCJcXHUyMjM3XCIsIFwiXFxcXGRibGNvbG9uXCIpOyAvLyA6OlxuXG5kZWZpbmVNYWNybyhcIlxcdTIyMzlcIiwgXCJcXFxcZXFjb2xvblwiKTsgLy8gLTpcblxuZGVmaW5lTWFjcm8oXCJcXHUyMjU0XCIsIFwiXFxcXGNvbG9uZXFxXCIpOyAvLyA6PVxuXG5kZWZpbmVNYWNybyhcIlxcdTIyNTVcIiwgXCJcXFxcZXFxY29sb25cIik7IC8vID06XG5cbmRlZmluZU1hY3JvKFwiXFx1MkE3NFwiLCBcIlxcXFxDb2xvbmVxcVwiKTsgLy8gOjo9XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBjb2xvbmVxdWFscy5zdHlcbi8vIEFsdGVybmF0ZSBuYW1lcyBmb3IgbWF0aHRvb2xzJ3MgbWFjcm9zOlxuXG5kZWZpbmVNYWNybyhcIlxcXFxyYXRpb1wiLCBcIlxcXFx2Y2VudGNvbG9uXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25jb2xvblwiLCBcIlxcXFxkYmxjb2xvblwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uZXF1YWxzXCIsIFwiXFxcXGNvbG9uZXFxXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25jb2xvbmVxdWFsc1wiLCBcIlxcXFxDb2xvbmVxcVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGVxdWFsc2NvbG9uXCIsIFwiXFxcXGVxcWNvbG9uXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZXF1YWxzY29sb25jb2xvblwiLCBcIlxcXFxFcXFjb2xvblwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9ubWludXNcIiwgXCJcXFxcY29sb25lcVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uY29sb25taW51c1wiLCBcIlxcXFxDb2xvbmVxXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWludXNjb2xvblwiLCBcIlxcXFxlcWNvbG9uXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWludXNjb2xvbmNvbG9uXCIsIFwiXFxcXEVxY29sb25cIik7IC8vIFxcY29sb25hcHByb3ggbmFtZSBpcyBzYW1lIGluIG1hdGh0b29scyBhbmQgY29sb25lcXVhbHMuXG5cbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uY29sb25hcHByb3hcIiwgXCJcXFxcQ29sb25hcHByb3hcIik7IC8vIFxcY29sb25zaW0gbmFtZSBpcyBzYW1lIGluIG1hdGh0b29scyBhbmQgY29sb25lcXVhbHMuXG5cbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uY29sb25zaW1cIiwgXCJcXFxcQ29sb25zaW1cIik7IC8vIEFkZGl0aW9uYWwgbWFjcm9zLCBpbXBsZW1lbnRlZCBieSBhbmFsb2d5IHdpdGggbWF0aHRvb2xzIGRlZmluaXRpb25zOlxuXG5kZWZpbmVNYWNybyhcIlxcXFxzaW1jb2xvblwiLCBcIlxcXFxtYXRocmVse1xcXFxzaW1cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXHZjZW50Y29sb259XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcc2ltY29sb25jb2xvblwiLCBcIlxcXFxtYXRocmVse1xcXFxzaW1cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXGRibGNvbG9ufVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGFwcHJveGNvbG9uXCIsIFwiXFxcXG1hdGhyZWx7XFxcXGFwcHJveFxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcdmNlbnRjb2xvbn1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxhcHByb3hjb2xvbmNvbG9uXCIsIFwiXFxcXG1hdGhyZWx7XFxcXGFwcHJveFxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcZGJsY29sb259XCIpOyAvLyBQcmVzZW50IGluIG5ld3R4bWF0aCwgcHhmb250cyBhbmQgdHhmb250c1xuXG5kZWZpbmVNYWNybyhcIlxcXFxub3RuaVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcbm90XFxcXG5pfXtcXFxcbWF0aHJlbHtcXFxcY2hhcmBcXHUyMjBDfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsaW1zdXBcIiwgXCJcXFxcRE9UU0JcXFxcb3BlcmF0b3JuYW1lKntsaW1cXFxcLHN1cH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsaW1pbmZcIiwgXCJcXFxcRE9UU0JcXFxcb3BlcmF0b3JuYW1lKntsaW1cXFxcLGluZn1cIik7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIE1hdGhNTCBhbHRlcm5hdGVzIGZvciBLYVRlWCBnbHlwaHMgaW4gdGhlIFVuaWNvZGUgcHJpdmF0ZSBhcmVhXG5cbmRlZmluZU1hY3JvKFwiXFxcXGd2ZXJ0bmVxcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQGd2ZXJ0bmVxcX17XFx1MjI2OX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsdmVydG5lcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBsdmVydG5lcXF9e1xcdTIyNjh9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbmdlcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBuZ2VxcX17XFx1MjI3MX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxuZ2Vxc2xhbnRcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBuZ2Vxc2xhbnR9e1xcdTIyNzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbmxlcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBubGVxcX17XFx1MjI3MH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxubGVxc2xhbnRcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBubGVxc2xhbnR9e1xcdTIyNzB9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbnNob3J0bWlkXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAbnNob3J0bWlkfXviiKR9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbnNob3J0cGFyYWxsZWxcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBuc2hvcnRwYXJhbGxlbH174oimfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5zdWJzZXRlcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBuc3Vic2V0ZXFxfXtcXHUyMjg4fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5zdXBzZXRlcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBuc3Vwc2V0ZXFxfXtcXHUyMjg5fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhcnN1YnNldG5lcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQHZhcnN1YnNldG5lcX174oqKfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhcnN1YnNldG5lcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEB2YXJzdWJzZXRuZXFxfXviq4t9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyc3Vwc2V0bmVxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAdmFyc3Vwc2V0bmVxfXviiot9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyc3Vwc2V0bmVxcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQHZhcnN1cHNldG5lcXF9e+KrjH1cIik7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIHN0bWFyeXJkIGFuZCBzZW1hbnRpY1xuLy8gVGhlIHN0bWFyeXJkIGFuZCBzZW1hbnRpYyBwYWNrYWdlcyByZW5kZXIgdGhlIG5leHQgZm91ciBpdGVtcyBieSBjYWxsaW5nIGFcbi8vIGdseXBoLiBUaG9zZSBnbHlwaHMgZG8gbm90IGV4aXN0IGluIHRoZSBLYVRlWCBmb250cy4gSGVuY2UgdGhlIG1hY3Jvcy5cblxuZGVmaW5lTWFjcm8oXCJcXFxcbGxicmFja2V0XCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aG9wZW57W1xcXFxta2Vybi0zLjJtdVt9fVwiICsgXCJ7XFxcXG1hdGhvcGVue1xcXFxjaGFyYFxcdTI3RTZ9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJyYnJhY2tldFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhjbG9zZXtdXFxcXG1rZXJuLTMuMm11XX19XCIgKyBcIntcXFxcbWF0aGNsb3Nle1xcXFxjaGFyYFxcdTI3RTd9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjdFNlwiLCBcIlxcXFxsbGJyYWNrZXRcIik7IC8vIGJsYWNrYm9hcmQgYm9sZCBbXG5cbmRlZmluZU1hY3JvKFwiXFx1MjdFN1wiLCBcIlxcXFxycmJyYWNrZXRcIik7IC8vIGJsYWNrYm9hcmQgYm9sZCBdXG5cbmRlZmluZU1hY3JvKFwiXFxcXGxCcmFjZVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhvcGVue1xcXFx7XFxcXG1rZXJuLTMuMm11W319XCIgKyBcIntcXFxcbWF0aG9wZW57XFxcXGNoYXJgXFx1Mjk4M319XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcckJyYWNlXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aGNsb3Nle11cXFxcbWtlcm4tMy4ybXVcXFxcfX19XCIgKyBcIntcXFxcbWF0aGNsb3Nle1xcXFxjaGFyYFxcdTI5ODR9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1Mjk4M1wiLCBcIlxcXFxsQnJhY2VcIik7IC8vIGJsYWNrYm9hcmQgYm9sZCB7XG5cbmRlZmluZU1hY3JvKFwiXFx1Mjk4NFwiLCBcIlxcXFxyQnJhY2VcIik7IC8vIGJsYWNrYm9hcmQgYm9sZCB9XG4vLyBUT0RPOiBDcmVhdGUgdmFyaWFibGUgc2l6ZWQgdmVyc2lvbnMgb2YgdGhlIGxhc3QgdHdvIGl0ZW1zLiBJIGJlbGlldmUgdGhhdFxuLy8gd2lsbCByZXF1aXJlIG5ldyBmb250IGdseXBocy5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIHRleHZjLnN0eVxuLy8gVGhlIHRleHZjIHBhY2thZ2UgY29udGFpbnMgbWFjcm9zIGF2YWlsYWJsZSBpbiBtZWRpYXdpa2kgcGFnZXMuXG4vLyBXZSBvbWl0IHRoZSBmdW5jdGlvbnMgZGVwcmVjYXRlZCBhdFxuLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSGVscDpEaXNwbGF5aW5nX2FfZm9ybXVsYSNEZXByZWNhdGVkX3N5bnRheFxuLy8gV2UgYWxzbyBvbWl0IHRleHZjJ3MgXFxPLCB3aGljaCBjb25mbGljdHMgd2l0aCBcXHRleHR7XFxPfVxuXG5kZWZpbmVNYWNybyhcIlxcXFxkYXJyXCIsIFwiXFxcXGRvd25hcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGRBcnJcIiwgXCJcXFxcRG93bmFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcRGFyclwiLCBcIlxcXFxEb3duYXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsYW5nXCIsIFwiXFxcXGxhbmdsZVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJhbmdcIiwgXCJcXFxccmFuZ2xlXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdWFyclwiLCBcIlxcXFx1cGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdUFyclwiLCBcIlxcXFxVcGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcVWFyclwiLCBcIlxcXFxVcGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcTlwiLCBcIlxcXFxtYXRoYmJ7Tn1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxSXCIsIFwiXFxcXG1hdGhiYntSfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXFpcIiwgXCJcXFxcbWF0aGJie1p9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYWxlZlwiLCBcIlxcXFxhbGVwaFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGFsZWZzeW1cIiwgXCJcXFxcYWxlcGhcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxBbHBoYVwiLCBcIlxcXFxtYXRocm17QX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxCZXRhXCIsIFwiXFxcXG1hdGhybXtCfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGJ1bGxcIiwgXCJcXFxcYnVsbGV0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcQ2hpXCIsIFwiXFxcXG1hdGhybXtYfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNsdWJzXCIsIFwiXFxcXGNsdWJzdWl0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY251bXNcIiwgXCJcXFxcbWF0aGJie0N9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcQ29tcGxleFwiLCBcIlxcXFxtYXRoYmJ7Q31cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxEYWdnZXJcIiwgXCJcXFxcZGRhZ2dlclwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGRpYW1vbmRzXCIsIFwiXFxcXGRpYW1vbmRzdWl0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZW1wdHlcIiwgXCJcXFxcZW1wdHlzZXRcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxFcHNpbG9uXCIsIFwiXFxcXG1hdGhybXtFfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEV0YVwiLCBcIlxcXFxtYXRocm17SH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxleGlzdFwiLCBcIlxcXFxleGlzdHNcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxoYXJyXCIsIFwiXFxcXGxlZnRyaWdodGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaEFyclwiLCBcIlxcXFxMZWZ0cmlnaHRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEhhcnJcIiwgXCJcXFxcTGVmdHJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxoZWFydHNcIiwgXCJcXFxcaGVhcnRzdWl0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaW1hZ2VcIiwgXCJcXFxcSW1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxpbmZpblwiLCBcIlxcXFxpbmZ0eVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXElvdGFcIiwgXCJcXFxcbWF0aHJte0l9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaXNpblwiLCBcIlxcXFxpblwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEthcHBhXCIsIFwiXFxcXG1hdGhybXtLfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGxhcnJcIiwgXCJcXFxcbGVmdGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbEFyclwiLCBcIlxcXFxMZWZ0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxMYXJyXCIsIFwiXFxcXExlZnRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGxyYXJyXCIsIFwiXFxcXGxlZnRyaWdodGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbHJBcnJcIiwgXCJcXFxcTGVmdHJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxMcmFyclwiLCBcIlxcXFxMZWZ0cmlnaHRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXE11XCIsIFwiXFxcXG1hdGhybXtNfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5hdG51bXNcIiwgXCJcXFxcbWF0aGJie059XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcTnVcIiwgXCJcXFxcbWF0aHJte059XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcT21pY3JvblwiLCBcIlxcXFxtYXRocm17T31cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwbHVzbW5cIiwgXCJcXFxccG1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyYXJyXCIsIFwiXFxcXHJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyQXJyXCIsIFwiXFxcXFJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxSYXJyXCIsIFwiXFxcXFJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyZWFsXCIsIFwiXFxcXFJlXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVhbHNcIiwgXCJcXFxcbWF0aGJie1J9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcUmVhbHNcIiwgXCJcXFxcbWF0aGJie1J9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcUmhvXCIsIFwiXFxcXG1hdGhybXtQfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHNkb3RcIiwgXCJcXFxcY2RvdFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHNlY3RcIiwgXCJcXFxcU1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHNwYWRlc1wiLCBcIlxcXFxzcGFkZXN1aXRcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxzdWJcIiwgXCJcXFxcc3Vic2V0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcc3ViZVwiLCBcIlxcXFxzdWJzZXRlcVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHN1cGVcIiwgXCJcXFxcc3Vwc2V0ZXFcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxUYXVcIiwgXCJcXFxcbWF0aHJte1R9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGhldGFzeW1cIiwgXCJcXFxcdmFydGhldGFcIik7IC8vIFRPRE86IGRlZmluZU1hY3JvKFwiXFxcXHZhcmNvcHBhXCIsIFwiXFxcXFxcbWJveHtcXFxcY29wcGF9XCIpO1xuXG5kZWZpbmVNYWNybyhcIlxcXFx3ZWllcnBcIiwgXCJcXFxcd3BcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxaZXRhXCIsIFwiXFxcXG1hdGhybXtafVwiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gc3RhdG1hdGguc3R5XG4vLyBodHRwczovL2N0YW4ubWF0aC5pbGxpbm9pcy5lZHUvbWFjcm9zL2xhdGV4L2NvbnRyaWIvc3RhdG1hdGgvc3RhdG1hdGgucGRmXG5cbmRlZmluZU1hY3JvKFwiXFxcXGFyZ21pblwiLCBcIlxcXFxET1RTQlxcXFxvcGVyYXRvcm5hbWUqe2FyZ1xcXFwsbWlufVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGFyZ21heFwiLCBcIlxcXFxET1RTQlxcXFxvcGVyYXRvcm5hbWUqe2FyZ1xcXFwsbWF4fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHBsaW1cIiwgXCJcXFxcRE9UU0JcXFxcbWF0aG9we1xcXFxvcGVyYXRvcm5hbWV7cGxpbX19XFxcXGxpbWl0c1wiKTsgLy8gQ3VzdG9tIEtoYW4gQWNhZGVteSBjb2xvcnMsIHNob3VsZCBiZSBtb3ZlZCB0byBhbiBvcHRpb25hbCBwYWNrYWdlXG5cbmRlZmluZU1hY3JvKFwiXFxcXGJsdWVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjNjQ5NWVkfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxvcmFuZ2VcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZmZhNTAwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwaW5rXCIsIFwiXFxcXHRleHRjb2xvcnsjI2ZmMDBhZn17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVkXCIsIFwiXFxcXHRleHRjb2xvcnsjI2RmMDAzMH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JlZW5cIiwgXCJcXFxcdGV4dGNvbG9yeyMjMjhhZTdifXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5XCIsIFwiXFxcXHRleHRjb2xvcntncmF5fXsjIzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccHVycGxlXCIsIFwiXFxcXHRleHRjb2xvcnsjIzlkMzhiZH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYmx1ZUFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjY2NmYWZmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxibHVlQlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM4MGY2ZmZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGJsdWVDXCIsIFwiXFxcXHRleHRjb2xvcnsjIzYzZDllYX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYmx1ZURcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMTFhY2NkfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxibHVlRVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyMwYzdmOTl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHRlYWxBXCIsIFwiXFxcXHRleHRjb2xvcnsjIzk0ZmZmNX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGVhbEJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMjZlZGQ1fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx0ZWFsQ1wiLCBcIlxcXFx0ZXh0Y29sb3J7IyMwMWQxYzF9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHRlYWxEXCIsIFwiXFxcXHRleHRjb2xvcnsjIzAxYTk5NX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGVhbEVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMjA4MTcwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjYjZmZmIwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjOGFmMjgxfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkNcIiwgXCJcXFxcdGV4dGNvbG9yeyMjNzRjZjcwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkRcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMWZhYjU0fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMGQ5MjNmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxnb2xkQVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmZmQwYTl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdvbGRCXCIsIFwiXFxcXHRleHRjb2xvcnsjI2ZmYmI3MX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ29sZENcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZmY5YzM5fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxnb2xkRFwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNlMDdkMTB9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdvbGRFXCIsIFwiXFxcXHRleHRjb2xvcnsjI2E3NWEwNX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVkQVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmY2E5YTl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJlZEJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZmY4NDgyfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyZWRDXCIsIFwiXFxcXHRleHRjb2xvcnsjI2Y5Njg1ZH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVkRFwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNlODRkMzl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJlZEVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjYmMyNjEyfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtYXJvb25BXCIsIFwiXFxcXHRleHRjb2xvcnsjI2ZmYmRlMH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWFyb29uQlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmZjkyYzZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG1hcm9vbkNcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZWQ1ZmE2fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtYXJvb25EXCIsIFwiXFxcXHRleHRjb2xvcnsjI2NhMzM3Y317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWFyb29uRVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM5ZTAzNGV9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHB1cnBsZUFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZGRkN2ZmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwdXJwbGVCXCIsIFwiXFxcXHRleHRjb2xvcnsjI2M2YjlmY317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccHVycGxlQ1wiLCBcIlxcXFx0ZXh0Y29sb3J7IyNhYTg3ZmZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHB1cnBsZURcIiwgXCJcXFxcdGV4dGNvbG9yeyMjNzg1NGFifXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwdXJwbGVFXCIsIFwiXFxcXHRleHRjb2xvcnsjIzU0M2I3OH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWludEFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZjVmOWU4fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtaW50QlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNlZGYyZGZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG1pbnRDXCIsIFwiXFxcXHRleHRjb2xvcnsjI2UwZTVjY317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheUFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZjZmN2Y3fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5QlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmMGYxZjJ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlDXCIsIFwiXFxcXHRleHRjb2xvcnsjI2UzZTVlNn17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheURcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZDZkOGRhfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5RVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNiYWJlYzJ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlGXCIsIFwiXFxcXHRleHRjb2xvcnsjIzg4OGQ5M317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheUdcIiwgXCJcXFxcdGV4dGNvbG9yeyMjNjI2NTY5fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5SFwiLCBcIlxcXFx0ZXh0Y29sb3J7IyMzYjNlNDB9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlJXCIsIFwiXFxcXHRleHRjb2xvcnsjIzIxMjQyY317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxca2FCbHVlXCIsIFwiXFxcXHRleHRjb2xvcnsjIzMxNDQ1M317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxca2FHcmVlblwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM3MUIzMDd9eyMxfVwiKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL01hY3JvRXhwYW5kZXIuanNcbi8qKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSDigJxndWxsZXTigJ0gd2hlcmUgbWFjcm9zIGFyZSBleHBhbmRlZFxuICogdW50aWwgb25seSBub24tbWFjcm8gdG9rZW5zIHJlbWFpbi5cbiAqL1xuXG5cblxuXG5cblxuXG4vLyBMaXN0IG9mIGNvbW1hbmRzIHRoYXQgYWN0IGxpa2UgbWFjcm9zIGJ1dCBhcmVuJ3QgZGVmaW5lZCBhcyBhIG1hY3JvLFxuLy8gZnVuY3Rpb24sIG9yIHN5bWJvbC4gIFVzZWQgaW4gYGlzRGVmaW5lZGAuXG52YXIgaW1wbGljaXRDb21tYW5kcyA9IHtcbiAgXCJcXFxccmVsYXhcIjogdHJ1ZSxcbiAgLy8gTWFjcm9FeHBhbmRlci5qc1xuICBcIl5cIjogdHJ1ZSxcbiAgLy8gUGFyc2VyLmpzXG4gIFwiX1wiOiB0cnVlLFxuICAvLyBQYXJzZXIuanNcbiAgXCJcXFxcbGltaXRzXCI6IHRydWUsXG4gIC8vIFBhcnNlci5qc1xuICBcIlxcXFxub2xpbWl0c1wiOiB0cnVlIC8vIFBhcnNlci5qc1xuXG59O1xuXG52YXIgTWFjcm9FeHBhbmRlcl9NYWNyb0V4cGFuZGVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTWFjcm9FeHBhbmRlcihpbnB1dCwgc2V0dGluZ3MsIG1vZGUpIHtcbiAgICB0aGlzLnNldHRpbmdzID0gdm9pZCAwO1xuICAgIHRoaXMuZXhwYW5zaW9uQ291bnQgPSB2b2lkIDA7XG4gICAgdGhpcy5sZXhlciA9IHZvaWQgMDtcbiAgICB0aGlzLm1hY3JvcyA9IHZvaWQgMDtcbiAgICB0aGlzLnN0YWNrID0gdm9pZCAwO1xuICAgIHRoaXMubW9kZSA9IHZvaWQgMDtcbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgdGhpcy5leHBhbnNpb25Db3VudCA9IDA7XG4gICAgdGhpcy5mZWVkKGlucHV0KTsgLy8gTWFrZSBuZXcgZ2xvYmFsIG5hbWVzcGFjZVxuXG4gICAgdGhpcy5tYWNyb3MgPSBuZXcgTmFtZXNwYWNlX05hbWVzcGFjZShtYWNyb3MsIHNldHRpbmdzLm1hY3Jvcyk7XG4gICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgICB0aGlzLnN0YWNrID0gW107IC8vIGNvbnRhaW5zIHRva2VucyBpbiBSRVZFUlNFIG9yZGVyXG4gIH1cbiAgLyoqXG4gICAqIEZlZWQgYSBuZXcgaW5wdXQgc3RyaW5nIHRvIHRoZSBzYW1lIE1hY3JvRXhwYW5kZXJcbiAgICogKHdpdGggZXhpc3RpbmcgbWFjcm9zIGV0Yy4pLlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBNYWNyb0V4cGFuZGVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZmVlZCA9IGZ1bmN0aW9uIGZlZWQoaW5wdXQpIHtcbiAgICB0aGlzLmxleGVyID0gbmV3IExleGVyX0xleGVyKGlucHV0LCB0aGlzLnNldHRpbmdzKTtcbiAgfVxuICAvKipcbiAgICogU3dpdGNoZXMgYmV0d2VlbiBcInRleHRcIiBhbmQgXCJtYXRoXCIgbW9kZXMuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnN3aXRjaE1vZGUgPSBmdW5jdGlvbiBzd2l0Y2hNb2RlKG5ld01vZGUpIHtcbiAgICB0aGlzLm1vZGUgPSBuZXdNb2RlO1xuICB9XG4gIC8qKlxuICAgKiBTdGFydCBhIG5ldyBncm91cCBuZXN0aW5nIHdpdGhpbiBhbGwgbmFtZXNwYWNlcy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uYmVnaW5Hcm91cCA9IGZ1bmN0aW9uIGJlZ2luR3JvdXAoKSB7XG4gICAgdGhpcy5tYWNyb3MuYmVnaW5Hcm91cCgpO1xuICB9XG4gIC8qKlxuICAgKiBFbmQgY3VycmVudCBncm91cCBuZXN0aW5nIHdpdGhpbiBhbGwgbmFtZXNwYWNlcy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZW5kR3JvdXAgPSBmdW5jdGlvbiBlbmRHcm91cCgpIHtcbiAgICB0aGlzLm1hY3Jvcy5lbmRHcm91cCgpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0b3Btb3N0IHRva2VuIG9uIHRoZSBzdGFjaywgd2l0aG91dCBleHBhbmRpbmcgaXQuXG4gICAqIFNpbWlsYXIgaW4gYmVoYXZpb3IgdG8gVGVYJ3MgYFxcZnV0dXJlbGV0YC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZnV0dXJlID0gZnVuY3Rpb24gZnV0dXJlKCkge1xuICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5wdXNoVG9rZW4odGhpcy5sZXhlci5sZXgoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTtcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlIGFuZCByZXR1cm4gdGhlIG5leHQgdW5leHBhbmRlZCB0b2tlbi5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ucG9wVG9rZW4gPSBmdW5jdGlvbiBwb3BUb2tlbigpIHtcbiAgICB0aGlzLmZ1dHVyZSgpOyAvLyBlbnN1cmUgbm9uLWVtcHR5IHN0YWNrXG5cbiAgICByZXR1cm4gdGhpcy5zdGFjay5wb3AoKTtcbiAgfVxuICAvKipcbiAgICogQWRkIGEgZ2l2ZW4gdG9rZW4gdG8gdGhlIHRva2VuIHN0YWNrLiAgSW4gcGFydGljdWxhciwgdGhpcyBnZXQgYmUgdXNlZFxuICAgKiB0byBwdXQgYmFjayBhIHRva2VuIHJldHVybmVkIGZyb20gb25lIG9mIHRoZSBvdGhlciBtZXRob2RzLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5wdXNoVG9rZW4gPSBmdW5jdGlvbiBwdXNoVG9rZW4odG9rZW4pIHtcbiAgICB0aGlzLnN0YWNrLnB1c2godG9rZW4pO1xuICB9XG4gIC8qKlxuICAgKiBBcHBlbmQgYW4gYXJyYXkgb2YgdG9rZW5zIHRvIHRoZSB0b2tlbiBzdGFjay5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ucHVzaFRva2VucyA9IGZ1bmN0aW9uIHB1c2hUb2tlbnModG9rZW5zKSB7XG4gICAgdmFyIF90aGlzJHN0YWNrO1xuXG4gICAgKF90aGlzJHN0YWNrID0gdGhpcy5zdGFjaykucHVzaC5hcHBseShfdGhpcyRzdGFjaywgdG9rZW5zKTtcbiAgfVxuICAvKipcbiAgICogQ29uc3VtZSBhbGwgZm9sbG93aW5nIHNwYWNlIHRva2Vucywgd2l0aG91dCBleHBhbnNpb24uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmNvbnN1bWVTcGFjZXMgPSBmdW5jdGlvbiBjb25zdW1lU3BhY2VzKCkge1xuICAgIGZvciAoOzspIHtcbiAgICAgIHZhciB0b2tlbiA9IHRoaXMuZnV0dXJlKCk7XG5cbiAgICAgIGlmICh0b2tlbi50ZXh0ID09PSBcIiBcIikge1xuICAgICAgICB0aGlzLnN0YWNrLnBvcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDb25zdW1lIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGFyZ3VtZW50cyBmcm9tIHRoZSB0b2tlbiBzdHJlYW0sXG4gICAqIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBhcnJheSBvZiBhcmd1bWVudHMuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmNvbnN1bWVBcmdzID0gZnVuY3Rpb24gY29uc3VtZUFyZ3MobnVtQXJncykge1xuICAgIHZhciBhcmdzID0gW107IC8vIG9idGFpbiBhcmd1bWVudHMsIGVpdGhlciBzaW5nbGUgdG9rZW4gb3IgYmFsYW5jZWQge+KApn0gZ3JvdXBcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtQXJnczsgKytpKSB7XG4gICAgICB0aGlzLmNvbnN1bWVTcGFjZXMoKTsgLy8gaWdub3JlIHNwYWNlcyBiZWZvcmUgZWFjaCBhcmd1bWVudFxuXG4gICAgICB2YXIgc3RhcnRPZkFyZyA9IHRoaXMucG9wVG9rZW4oKTtcblxuICAgICAgaWYgKHN0YXJ0T2ZBcmcudGV4dCA9PT0gXCJ7XCIpIHtcbiAgICAgICAgdmFyIGFyZyA9IFtdO1xuICAgICAgICB2YXIgZGVwdGggPSAxO1xuXG4gICAgICAgIHdoaWxlIChkZXB0aCAhPT0gMCkge1xuICAgICAgICAgIHZhciB0b2sgPSB0aGlzLnBvcFRva2VuKCk7XG4gICAgICAgICAgYXJnLnB1c2godG9rKTtcblxuICAgICAgICAgIGlmICh0b2sudGV4dCA9PT0gXCJ7XCIpIHtcbiAgICAgICAgICAgICsrZGVwdGg7XG4gICAgICAgICAgfSBlbHNlIGlmICh0b2sudGV4dCA9PT0gXCJ9XCIpIHtcbiAgICAgICAgICAgIC0tZGVwdGg7XG4gICAgICAgICAgfSBlbHNlIGlmICh0b2sudGV4dCA9PT0gXCJFT0ZcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiRW5kIG9mIGlucHV0IGluIG1hY3JvIGFyZ3VtZW50XCIsIHN0YXJ0T2ZBcmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGFyZy5wb3AoKTsgLy8gcmVtb3ZlIGxhc3QgfVxuXG4gICAgICAgIGFyZy5yZXZlcnNlKCk7IC8vIGxpa2UgYWJvdmUsIHRvIGZpdCBpbiB3aXRoIHN0YWNrIG9yZGVyXG5cbiAgICAgICAgYXJnc1tpXSA9IGFyZztcbiAgICAgIH0gZWxzZSBpZiAoc3RhcnRPZkFyZy50ZXh0ID09PSBcIkVPRlwiKSB7XG4gICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkVuZCBvZiBpbnB1dCBleHBlY3RpbmcgbWFjcm8gYXJndW1lbnRcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcmdzW2ldID0gW3N0YXJ0T2ZBcmddO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhcmdzO1xuICB9XG4gIC8qKlxuICAgKiBFeHBhbmQgdGhlIG5leHQgdG9rZW4gb25seSBvbmNlIGlmIHBvc3NpYmxlLlxuICAgKlxuICAgKiBJZiB0aGUgdG9rZW4gaXMgZXhwYW5kZWQsIHRoZSByZXN1bHRpbmcgdG9rZW5zIHdpbGwgYmUgcHVzaGVkIG9udG9cbiAgICogdGhlIHN0YWNrIGluIHJldmVyc2Ugb3JkZXIgYW5kIHdpbGwgYmUgcmV0dXJuZWQgYXMgYW4gYXJyYXksXG4gICAqIGFsc28gaW4gcmV2ZXJzZSBvcmRlci5cbiAgICpcbiAgICogSWYgbm90LCB0aGUgbmV4dCB0b2tlbiB3aWxsIGJlIHJldHVybmVkIHdpdGhvdXQgcmVtb3ZpbmcgaXRcbiAgICogZnJvbSB0aGUgc3RhY2suICBUaGlzIGNhc2UgY2FuIGJlIGRldGVjdGVkIGJ5IGEgYFRva2VuYCByZXR1cm4gdmFsdWVcbiAgICogaW5zdGVhZCBvZiBhbiBgQXJyYXlgIHJldHVybiB2YWx1ZS5cbiAgICpcbiAgICogSW4gZWl0aGVyIGNhc2UsIHRoZSBuZXh0IHRva2VuIHdpbGwgYmUgb24gdGhlIHRvcCBvZiB0aGUgc3RhY2ssXG4gICAqIG9yIHRoZSBzdGFjayB3aWxsIGJlIGVtcHR5LlxuICAgKlxuICAgKiBVc2VkIHRvIGltcGxlbWVudCBgZXhwYW5kQWZ0ZXJGdXR1cmVgIGFuZCBgZXhwYW5kTmV4dFRva2VuYC5cbiAgICpcbiAgICogQXQgdGhlIG1vbWVudCwgbWFjcm8gZXhwYW5zaW9uIGRvZXNuJ3QgaGFuZGxlIGRlbGltaXRlZCBtYWNyb3MsXG4gICAqIGkuZS4gdGhpbmdzIGxpa2UgdGhvc2UgZGVmaW5lZCBieSBcXGRlZlxcZm9vIzFcXGVuZHvigKZ9LlxuICAgKiBTZWUgdGhlIFRlWCBib29rIHBhZ2UgMjAyZmYuIGZvciBkZXRhaWxzIG9uIGhvdyB0aG9zZSBzaG91bGQgYmVoYXZlLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5leHBhbmRPbmNlID0gZnVuY3Rpb24gZXhwYW5kT25jZSgpIHtcbiAgICB2YXIgdG9wVG9rZW4gPSB0aGlzLnBvcFRva2VuKCk7XG4gICAgdmFyIG5hbWUgPSB0b3BUb2tlbi50ZXh0O1xuXG4gICAgdmFyIGV4cGFuc2lvbiA9IHRoaXMuX2dldEV4cGFuc2lvbihuYW1lKTtcblxuICAgIGlmIChleHBhbnNpb24gPT0gbnVsbCkge1xuICAgICAgLy8gbWFpbmx5IGNoZWNraW5nIGZvciB1bmRlZmluZWQgaGVyZVxuICAgICAgLy8gRnVsbHkgZXhwYW5kZWRcbiAgICAgIHRoaXMucHVzaFRva2VuKHRvcFRva2VuKTtcbiAgICAgIHJldHVybiB0b3BUb2tlbjtcbiAgICB9XG5cbiAgICB0aGlzLmV4cGFuc2lvbkNvdW50Kys7XG5cbiAgICBpZiAodGhpcy5leHBhbnNpb25Db3VudCA+IHRoaXMuc2V0dGluZ3MubWF4RXhwYW5kKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJUb28gbWFueSBleHBhbnNpb25zOiBpbmZpbml0ZSBsb29wIG9yIFwiICsgXCJuZWVkIHRvIGluY3JlYXNlIG1heEV4cGFuZCBzZXR0aW5nXCIpO1xuICAgIH1cblxuICAgIHZhciB0b2tlbnMgPSBleHBhbnNpb24udG9rZW5zO1xuXG4gICAgaWYgKGV4cGFuc2lvbi5udW1BcmdzKSB7XG4gICAgICB2YXIgYXJncyA9IHRoaXMuY29uc3VtZUFyZ3MoZXhwYW5zaW9uLm51bUFyZ3MpOyAvLyBwYXN0ZSBhcmd1bWVudHMgaW4gcGxhY2Ugb2YgdGhlIHBsYWNlaG9sZGVyc1xuXG4gICAgICB0b2tlbnMgPSB0b2tlbnMuc2xpY2UoKTsgLy8gbWFrZSBhIHNoYWxsb3cgY29weVxuXG4gICAgICBmb3IgKHZhciBpID0gdG9rZW5zLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciB0b2sgPSB0b2tlbnNbaV07XG5cbiAgICAgICAgaWYgKHRvay50ZXh0ID09PSBcIiNcIikge1xuICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJJbmNvbXBsZXRlIHBsYWNlaG9sZGVyIGF0IGVuZCBvZiBtYWNybyBib2R5XCIsIHRvayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdG9rID0gdG9rZW5zWy0taV07IC8vIG5leHQgdG9rZW4gb24gc3RhY2tcblxuICAgICAgICAgIGlmICh0b2sudGV4dCA9PT0gXCIjXCIpIHtcbiAgICAgICAgICAgIC8vICMjIOKGkiAjXG4gICAgICAgICAgICB0b2tlbnMuc3BsaWNlKGkgKyAxLCAxKTsgLy8gZHJvcCBmaXJzdCAjXG4gICAgICAgICAgfSBlbHNlIGlmICgvXlsxLTldJC8udGVzdCh0b2sudGV4dCkpIHtcbiAgICAgICAgICAgIHZhciBfdG9rZW5zO1xuXG4gICAgICAgICAgICAvLyByZXBsYWNlIHRoZSBwbGFjZWhvbGRlciB3aXRoIHRoZSBpbmRpY2F0ZWQgYXJndW1lbnRcbiAgICAgICAgICAgIChfdG9rZW5zID0gdG9rZW5zKS5zcGxpY2UuYXBwbHkoX3Rva2VucywgW2ksIDJdLmNvbmNhdChhcmdzWyt0b2sudGV4dCAtIDFdKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIk5vdCBhIHZhbGlkIGFyZ3VtZW50IG51bWJlclwiLCB0b2spO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gQ29uY2F0ZW5hdGUgZXhwYW5zaW9uIG9udG8gdG9wIG9mIHN0YWNrLlxuXG5cbiAgICB0aGlzLnB1c2hUb2tlbnModG9rZW5zKTtcbiAgICByZXR1cm4gdG9rZW5zO1xuICB9XG4gIC8qKlxuICAgKiBFeHBhbmQgdGhlIG5leHQgdG9rZW4gb25seSBvbmNlIChpZiBwb3NzaWJsZSksIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZ1xuICAgKiB0b3AgdG9rZW4gb24gdGhlIHN0YWNrICh3aXRob3V0IHJlbW92aW5nIGFueXRoaW5nIGZyb20gdGhlIHN0YWNrKS5cbiAgICogU2ltaWxhciBpbiBiZWhhdmlvciB0byBUZVgncyBgXFxleHBhbmRhZnRlclxcZnV0dXJlbGV0YC5cbiAgICogRXF1aXZhbGVudCB0byBleHBhbmRPbmNlKCkgZm9sbG93ZWQgYnkgZnV0dXJlKCkuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmV4cGFuZEFmdGVyRnV0dXJlID0gZnVuY3Rpb24gZXhwYW5kQWZ0ZXJGdXR1cmUoKSB7XG4gICAgdGhpcy5leHBhbmRPbmNlKCk7XG4gICAgcmV0dXJuIHRoaXMuZnV0dXJlKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGV4cGFuZCBmaXJzdCB0b2tlbiwgdGhlbiByZXR1cm4gZmlyc3Qgbm9uLWV4cGFuZGFibGUgdG9rZW4uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmV4cGFuZE5leHRUb2tlbiA9IGZ1bmN0aW9uIGV4cGFuZE5leHRUb2tlbigpIHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICB2YXIgZXhwYW5kZWQgPSB0aGlzLmV4cGFuZE9uY2UoKTsgLy8gZXhwYW5kT25jZSByZXR1cm5zIFRva2VuIGlmIGFuZCBvbmx5IGlmIGl0J3MgZnVsbHkgZXhwYW5kZWQuXG5cbiAgICAgIGlmIChleHBhbmRlZCBpbnN0YW5jZW9mIFRva2VuX1Rva2VuKSB7XG4gICAgICAgIC8vIFxccmVsYXggc3RvcHMgdGhlIGV4cGFuc2lvbiwgYnV0IHNob3VsZG4ndCBnZXQgcmV0dXJuZWQgKGFcbiAgICAgICAgLy8gbnVsbCByZXR1cm4gdmFsdWUgY291bGRuJ3QgZ2V0IGltcGxlbWVudGVkIGFzIGEgZnVuY3Rpb24pLlxuICAgICAgICBpZiAoZXhwYW5kZWQudGV4dCA9PT0gXCJcXFxccmVsYXhcIikge1xuICAgICAgICAgIHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3RhY2sucG9wKCk7IC8vID09PSBleHBhbmRlZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBGbG93IHVuYWJsZSB0byBmaWd1cmUgb3V0IHRoYXQgdGhpcyBwYXRod2F5IGlzIGltcG9zc2libGUuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzQ4MDhcblxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5yZWFjaGFibGVcbiAgfVxuICAvKipcbiAgICogRnVsbHkgZXhwYW5kIHRoZSBnaXZlbiBtYWNybyBuYW1lIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBsaXN0IG9mXG4gICAqIHRva2Vucywgb3IgcmV0dXJuIGB1bmRlZmluZWRgIGlmIG5vIHN1Y2ggbWFjcm8gaXMgZGVmaW5lZC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZXhwYW5kTWFjcm8gPSBmdW5jdGlvbiBleHBhbmRNYWNybyhuYW1lKSB7XG4gICAgaWYgKCF0aGlzLm1hY3Jvcy5nZXQobmFtZSkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IFtdO1xuICAgIHZhciBvbGRTdGFja0xlbmd0aCA9IHRoaXMuc3RhY2subGVuZ3RoO1xuICAgIHRoaXMucHVzaFRva2VuKG5ldyBUb2tlbl9Ub2tlbihuYW1lKSk7XG5cbiAgICB3aGlsZSAodGhpcy5zdGFjay5sZW5ndGggPiBvbGRTdGFja0xlbmd0aCkge1xuICAgICAgdmFyIGV4cGFuZGVkID0gdGhpcy5leHBhbmRPbmNlKCk7IC8vIGV4cGFuZE9uY2UgcmV0dXJucyBUb2tlbiBpZiBhbmQgb25seSBpZiBpdCdzIGZ1bGx5IGV4cGFuZGVkLlxuXG4gICAgICBpZiAoZXhwYW5kZWQgaW5zdGFuY2VvZiBUb2tlbl9Ub2tlbikge1xuICAgICAgICBvdXRwdXQucHVzaCh0aGlzLnN0YWNrLnBvcCgpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG4gIC8qKlxuICAgKiBGdWxseSBleHBhbmQgdGhlIGdpdmVuIG1hY3JvIG5hbWUgYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIGEgc3RyaW5nLFxuICAgKiBvciByZXR1cm4gYHVuZGVmaW5lZGAgaWYgbm8gc3VjaCBtYWNybyBpcyBkZWZpbmVkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5leHBhbmRNYWNyb0FzVGV4dCA9IGZ1bmN0aW9uIGV4cGFuZE1hY3JvQXNUZXh0KG5hbWUpIHtcbiAgICB2YXIgdG9rZW5zID0gdGhpcy5leHBhbmRNYWNybyhuYW1lKTtcblxuICAgIGlmICh0b2tlbnMpIHtcbiAgICAgIHJldHVybiB0b2tlbnMubWFwKGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICByZXR1cm4gdG9rZW4udGV4dDtcbiAgICAgIH0pLmpvaW4oXCJcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0b2tlbnM7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBleHBhbmRlZCBtYWNybyBhcyBhIHJldmVyc2VkIGFycmF5IG9mIHRva2VucyBhbmQgYSBtYWNyb1xuICAgKiBhcmd1bWVudCBjb3VudC4gIE9yIHJldHVybnMgYG51bGxgIGlmIG5vIHN1Y2ggbWFjcm8uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLl9nZXRFeHBhbnNpb24gPSBmdW5jdGlvbiBfZ2V0RXhwYW5zaW9uKG5hbWUpIHtcbiAgICB2YXIgZGVmaW5pdGlvbiA9IHRoaXMubWFjcm9zLmdldChuYW1lKTtcblxuICAgIGlmIChkZWZpbml0aW9uID09IG51bGwpIHtcbiAgICAgIC8vIG1haW5seSBjaGVja2luZyBmb3IgdW5kZWZpbmVkIGhlcmVcbiAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgIH1cblxuICAgIHZhciBleHBhbnNpb24gPSB0eXBlb2YgZGVmaW5pdGlvbiA9PT0gXCJmdW5jdGlvblwiID8gZGVmaW5pdGlvbih0aGlzKSA6IGRlZmluaXRpb247XG5cbiAgICBpZiAodHlwZW9mIGV4cGFuc2lvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdmFyIG51bUFyZ3MgPSAwO1xuXG4gICAgICBpZiAoZXhwYW5zaW9uLmluZGV4T2YoXCIjXCIpICE9PSAtMSkge1xuICAgICAgICB2YXIgc3RyaXBwZWQgPSBleHBhbnNpb24ucmVwbGFjZSgvIyMvZywgXCJcIik7XG5cbiAgICAgICAgd2hpbGUgKHN0cmlwcGVkLmluZGV4T2YoXCIjXCIgKyAobnVtQXJncyArIDEpKSAhPT0gLTEpIHtcbiAgICAgICAgICArK251bUFyZ3M7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGJvZHlMZXhlciA9IG5ldyBMZXhlcl9MZXhlcihleHBhbnNpb24sIHRoaXMuc2V0dGluZ3MpO1xuICAgICAgdmFyIHRva2VucyA9IFtdO1xuICAgICAgdmFyIHRvayA9IGJvZHlMZXhlci5sZXgoKTtcblxuICAgICAgd2hpbGUgKHRvay50ZXh0ICE9PSBcIkVPRlwiKSB7XG4gICAgICAgIHRva2Vucy5wdXNoKHRvayk7XG4gICAgICAgIHRvayA9IGJvZHlMZXhlci5sZXgoKTtcbiAgICAgIH1cblxuICAgICAgdG9rZW5zLnJldmVyc2UoKTsgLy8gdG8gZml0IGluIHdpdGggc3RhY2sgdXNpbmcgcHVzaCBhbmQgcG9wXG5cbiAgICAgIHZhciBleHBhbmRlZCA9IHtcbiAgICAgICAgdG9rZW5zOiB0b2tlbnMsXG4gICAgICAgIG51bUFyZ3M6IG51bUFyZ3NcbiAgICAgIH07XG4gICAgICByZXR1cm4gZXhwYW5kZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cGFuc2lvbjtcbiAgfVxuICAvKipcbiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgYSBjb21tYW5kIGlzIGN1cnJlbnRseSBcImRlZmluZWRcIiAoaGFzIHNvbWVcbiAgICogZnVuY3Rpb25hbGl0eSksIG1lYW5pbmcgdGhhdCBpdCdzIGEgbWFjcm8gKGluIHRoZSBjdXJyZW50IGdyb3VwKSxcbiAgICogYSBmdW5jdGlvbiwgYSBzeW1ib2wsIG9yIG9uZSBvZiB0aGUgc3BlY2lhbCBjb21tYW5kcyBsaXN0ZWQgaW5cbiAgICogYGltcGxpY2l0Q29tbWFuZHNgLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5pc0RlZmluZWQgPSBmdW5jdGlvbiBpc0RlZmluZWQobmFtZSkge1xuICAgIHJldHVybiB0aGlzLm1hY3Jvcy5oYXMobmFtZSkgfHwgc3JjX2Z1bmN0aW9ucy5oYXNPd25Qcm9wZXJ0eShuYW1lKSB8fCBzcmNfc3ltYm9scy5tYXRoLmhhc093blByb3BlcnR5KG5hbWUpIHx8IHNyY19zeW1ib2xzLnRleHQuaGFzT3duUHJvcGVydHkobmFtZSkgfHwgaW1wbGljaXRDb21tYW5kcy5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcbiAgfTtcblxuICByZXR1cm4gTWFjcm9FeHBhbmRlcjtcbn0oKTtcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy91bmljb2RlQWNjZW50cy5qc1xuLy8gTWFwcGluZyBvZiBVbmljb2RlIGFjY2VudCBjaGFyYWN0ZXJzIHRvIHRoZWlyIExhVGVYIGVxdWl2YWxlbnQgaW4gdGV4dCBhbmRcbi8vIG1hdGggbW9kZSAod2hlbiB0aGV5IGV4aXN0KS5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHVuaWNvZGVBY2NlbnRzID0gKHtcbiAgXCJcXHUwMzAxXCI6IHtcbiAgICB0ZXh0OiBcIlxcXFwnXCIsXG4gICAgbWF0aDogJ1xcXFxhY3V0ZSdcbiAgfSxcbiAgXCJcXHUwMzAwXCI6IHtcbiAgICB0ZXh0OiAnXFxcXGAnLFxuICAgIG1hdGg6ICdcXFxcZ3JhdmUnXG4gIH0sXG4gIFwiXFx1MDMwOFwiOiB7XG4gICAgdGV4dDogJ1xcXFxcIicsXG4gICAgbWF0aDogJ1xcXFxkZG90J1xuICB9LFxuICBcIlxcdTAzMDNcIjoge1xuICAgIHRleHQ6ICdcXFxcficsXG4gICAgbWF0aDogJ1xcXFx0aWxkZSdcbiAgfSxcbiAgXCJcXHUwMzA0XCI6IHtcbiAgICB0ZXh0OiAnXFxcXD0nLFxuICAgIG1hdGg6ICdcXFxcYmFyJ1xuICB9LFxuICBcIlxcdTAzMDZcIjoge1xuICAgIHRleHQ6IFwiXFxcXHVcIixcbiAgICBtYXRoOiAnXFxcXGJyZXZlJ1xuICB9LFxuICBcIlxcdTAzMENcIjoge1xuICAgIHRleHQ6ICdcXFxcdicsXG4gICAgbWF0aDogJ1xcXFxjaGVjaydcbiAgfSxcbiAgXCJcXHUwMzAyXCI6IHtcbiAgICB0ZXh0OiAnXFxcXF4nLFxuICAgIG1hdGg6ICdcXFxcaGF0J1xuICB9LFxuICBcIlxcdTAzMDdcIjoge1xuICAgIHRleHQ6ICdcXFxcLicsXG4gICAgbWF0aDogJ1xcXFxkb3QnXG4gIH0sXG4gIFwiXFx1MDMwQVwiOiB7XG4gICAgdGV4dDogJ1xcXFxyJyxcbiAgICBtYXRoOiAnXFxcXG1hdGhyaW5nJ1xuICB9LFxuICBcIlxcdTAzMEJcIjoge1xuICAgIHRleHQ6ICdcXFxcSCdcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy91bmljb2RlU3ltYm9scy5qc1xuLy8gVGhpcyBmaWxlIGlzIEdFTkVSQVRFRCBieSB1bmljb2RlTWFrZS5qcy4gRE8gTk9UIE1PRElGWS5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHVuaWNvZGVTeW1ib2xzID0gKHtcbiAgXCJcXHhFMVwiOiBcImFcXHUwMzAxXCIsXG4gIC8vIMOhID0gXFwne2F9XG4gIFwiXFx4RTBcIjogXCJhXFx1MDMwMFwiLFxuICAvLyDDoCA9IFxcYHthfVxuICBcIlxceEU0XCI6IFwiYVxcdTAzMDhcIixcbiAgLy8gw6QgPSBcXFwie2F9XG4gIFwiXFx1MDFERlwiOiBcImFcXHUwMzA4XFx1MDMwNFwiLFxuICAvLyDHnyA9IFxcXCJcXD17YX1cbiAgXCJcXHhFM1wiOiBcImFcXHUwMzAzXCIsXG4gIC8vIMOjID0gXFx+e2F9XG4gIFwiXFx1MDEwMVwiOiBcImFcXHUwMzA0XCIsXG4gIC8vIMSBID0gXFw9e2F9XG4gIFwiXFx1MDEwM1wiOiBcImFcXHUwMzA2XCIsXG4gIC8vIMSDID0gXFx1e2F9XG4gIFwiXFx1MUVBRlwiOiBcImFcXHUwMzA2XFx1MDMwMVwiLFxuICAvLyDhuq8gPSBcXHVcXCd7YX1cbiAgXCJcXHUxRUIxXCI6IFwiYVxcdTAzMDZcXHUwMzAwXCIsXG4gIC8vIOG6sSA9IFxcdVxcYHthfVxuICBcIlxcdTFFQjVcIjogXCJhXFx1MDMwNlxcdTAzMDNcIixcbiAgLy8g4bq1ID0gXFx1XFx+e2F9XG4gIFwiXFx1MDFDRVwiOiBcImFcXHUwMzBDXCIsXG4gIC8vIMeOID0gXFx2e2F9XG4gIFwiXFx4RTJcIjogXCJhXFx1MDMwMlwiLFxuICAvLyDDoiA9IFxcXnthfVxuICBcIlxcdTFFQTVcIjogXCJhXFx1MDMwMlxcdTAzMDFcIixcbiAgLy8g4bqlID0gXFxeXFwne2F9XG4gIFwiXFx1MUVBN1wiOiBcImFcXHUwMzAyXFx1MDMwMFwiLFxuICAvLyDhuqcgPSBcXF5cXGB7YX1cbiAgXCJcXHUxRUFCXCI6IFwiYVxcdTAzMDJcXHUwMzAzXCIsXG4gIC8vIOG6qyA9IFxcXlxcfnthfVxuICBcIlxcdTAyMjdcIjogXCJhXFx1MDMwN1wiLFxuICAvLyDIpyA9IFxcLnthfVxuICBcIlxcdTAxRTFcIjogXCJhXFx1MDMwN1xcdTAzMDRcIixcbiAgLy8gx6EgPSBcXC5cXD17YX1cbiAgXCJcXHhFNVwiOiBcImFcXHUwMzBBXCIsXG4gIC8vIMOlID0gXFxye2F9XG4gIFwiXFx1MDFGQlwiOiBcImFcXHUwMzBBXFx1MDMwMVwiLFxuICAvLyDHuyA9IFxcclxcJ3thfVxuICBcIlxcdTFFMDNcIjogXCJiXFx1MDMwN1wiLFxuICAvLyDhuIMgPSBcXC57Yn1cbiAgXCJcXHUwMTA3XCI6IFwiY1xcdTAzMDFcIixcbiAgLy8gxIcgPSBcXCd7Y31cbiAgXCJcXHUwMTBEXCI6IFwiY1xcdTAzMENcIixcbiAgLy8gxI0gPSBcXHZ7Y31cbiAgXCJcXHUwMTA5XCI6IFwiY1xcdTAzMDJcIixcbiAgLy8gxIkgPSBcXF57Y31cbiAgXCJcXHUwMTBCXCI6IFwiY1xcdTAzMDdcIixcbiAgLy8gxIsgPSBcXC57Y31cbiAgXCJcXHUwMTBGXCI6IFwiZFxcdTAzMENcIixcbiAgLy8gxI8gPSBcXHZ7ZH1cbiAgXCJcXHUxRTBCXCI6IFwiZFxcdTAzMDdcIixcbiAgLy8g4biLID0gXFwue2R9XG4gIFwiXFx4RTlcIjogXCJlXFx1MDMwMVwiLFxuICAvLyDDqSA9IFxcJ3tlfVxuICBcIlxceEU4XCI6IFwiZVxcdTAzMDBcIixcbiAgLy8gw6ggPSBcXGB7ZX1cbiAgXCJcXHhFQlwiOiBcImVcXHUwMzA4XCIsXG4gIC8vIMOrID0gXFxcIntlfVxuICBcIlxcdTFFQkRcIjogXCJlXFx1MDMwM1wiLFxuICAvLyDhur0gPSBcXH57ZX1cbiAgXCJcXHUwMTEzXCI6IFwiZVxcdTAzMDRcIixcbiAgLy8gxJMgPSBcXD17ZX1cbiAgXCJcXHUxRTE3XCI6IFwiZVxcdTAzMDRcXHUwMzAxXCIsXG4gIC8vIOG4lyA9IFxcPVxcJ3tlfVxuICBcIlxcdTFFMTVcIjogXCJlXFx1MDMwNFxcdTAzMDBcIixcbiAgLy8g4biVID0gXFw9XFxge2V9XG4gIFwiXFx1MDExNVwiOiBcImVcXHUwMzA2XCIsXG4gIC8vIMSVID0gXFx1e2V9XG4gIFwiXFx1MDExQlwiOiBcImVcXHUwMzBDXCIsXG4gIC8vIMSbID0gXFx2e2V9XG4gIFwiXFx4RUFcIjogXCJlXFx1MDMwMlwiLFxuICAvLyDDqiA9IFxcXntlfVxuICBcIlxcdTFFQkZcIjogXCJlXFx1MDMwMlxcdTAzMDFcIixcbiAgLy8g4bq/ID0gXFxeXFwne2V9XG4gIFwiXFx1MUVDMVwiOiBcImVcXHUwMzAyXFx1MDMwMFwiLFxuICAvLyDhu4EgPSBcXF5cXGB7ZX1cbiAgXCJcXHUxRUM1XCI6IFwiZVxcdTAzMDJcXHUwMzAzXCIsXG4gIC8vIOG7hSA9IFxcXlxcfntlfVxuICBcIlxcdTAxMTdcIjogXCJlXFx1MDMwN1wiLFxuICAvLyDElyA9IFxcLntlfVxuICBcIlxcdTFFMUZcIjogXCJmXFx1MDMwN1wiLFxuICAvLyDhuJ8gPSBcXC57Zn1cbiAgXCJcXHUwMUY1XCI6IFwiZ1xcdTAzMDFcIixcbiAgLy8gx7UgPSBcXCd7Z31cbiAgXCJcXHUxRTIxXCI6IFwiZ1xcdTAzMDRcIixcbiAgLy8g4bihID0gXFw9e2d9XG4gIFwiXFx1MDExRlwiOiBcImdcXHUwMzA2XCIsXG4gIC8vIMSfID0gXFx1e2d9XG4gIFwiXFx1MDFFN1wiOiBcImdcXHUwMzBDXCIsXG4gIC8vIMenID0gXFx2e2d9XG4gIFwiXFx1MDExRFwiOiBcImdcXHUwMzAyXCIsXG4gIC8vIMSdID0gXFxee2d9XG4gIFwiXFx1MDEyMVwiOiBcImdcXHUwMzA3XCIsXG4gIC8vIMShID0gXFwue2d9XG4gIFwiXFx1MUUyN1wiOiBcImhcXHUwMzA4XCIsXG4gIC8vIOG4pyA9IFxcXCJ7aH1cbiAgXCJcXHUwMjFGXCI6IFwiaFxcdTAzMENcIixcbiAgLy8gyJ8gPSBcXHZ7aH1cbiAgXCJcXHUwMTI1XCI6IFwiaFxcdTAzMDJcIixcbiAgLy8gxKUgPSBcXF57aH1cbiAgXCJcXHUxRTIzXCI6IFwiaFxcdTAzMDdcIixcbiAgLy8g4bijID0gXFwue2h9XG4gIFwiXFx4RURcIjogXCJpXFx1MDMwMVwiLFxuICAvLyDDrSA9IFxcJ3tpfVxuICBcIlxceEVDXCI6IFwiaVxcdTAzMDBcIixcbiAgLy8gw6wgPSBcXGB7aX1cbiAgXCJcXHhFRlwiOiBcImlcXHUwMzA4XCIsXG4gIC8vIMOvID0gXFxcIntpfVxuICBcIlxcdTFFMkZcIjogXCJpXFx1MDMwOFxcdTAzMDFcIixcbiAgLy8g4bivID0gXFxcIlxcJ3tpfVxuICBcIlxcdTAxMjlcIjogXCJpXFx1MDMwM1wiLFxuICAvLyDEqSA9IFxcfntpfVxuICBcIlxcdTAxMkJcIjogXCJpXFx1MDMwNFwiLFxuICAvLyDEqyA9IFxcPXtpfVxuICBcIlxcdTAxMkRcIjogXCJpXFx1MDMwNlwiLFxuICAvLyDErSA9IFxcdXtpfVxuICBcIlxcdTAxRDBcIjogXCJpXFx1MDMwQ1wiLFxuICAvLyDHkCA9IFxcdntpfVxuICBcIlxceEVFXCI6IFwiaVxcdTAzMDJcIixcbiAgLy8gw64gPSBcXF57aX1cbiAgXCJcXHUwMUYwXCI6IFwialxcdTAzMENcIixcbiAgLy8gx7AgPSBcXHZ7an1cbiAgXCJcXHUwMTM1XCI6IFwialxcdTAzMDJcIixcbiAgLy8gxLUgPSBcXF57an1cbiAgXCJcXHUxRTMxXCI6IFwia1xcdTAzMDFcIixcbiAgLy8g4bixID0gXFwne2t9XG4gIFwiXFx1MDFFOVwiOiBcImtcXHUwMzBDXCIsXG4gIC8vIMepID0gXFx2e2t9XG4gIFwiXFx1MDEzQVwiOiBcImxcXHUwMzAxXCIsXG4gIC8vIMS6ID0gXFwne2x9XG4gIFwiXFx1MDEzRVwiOiBcImxcXHUwMzBDXCIsXG4gIC8vIMS+ID0gXFx2e2x9XG4gIFwiXFx1MUUzRlwiOiBcIm1cXHUwMzAxXCIsXG4gIC8vIOG4vyA9IFxcJ3ttfVxuICBcIlxcdTFFNDFcIjogXCJtXFx1MDMwN1wiLFxuICAvLyDhuYEgPSBcXC57bX1cbiAgXCJcXHUwMTQ0XCI6IFwiblxcdTAzMDFcIixcbiAgLy8gxYQgPSBcXCd7bn1cbiAgXCJcXHUwMUY5XCI6IFwiblxcdTAzMDBcIixcbiAgLy8gx7kgPSBcXGB7bn1cbiAgXCJcXHhGMVwiOiBcIm5cXHUwMzAzXCIsXG4gIC8vIMOxID0gXFx+e259XG4gIFwiXFx1MDE0OFwiOiBcIm5cXHUwMzBDXCIsXG4gIC8vIMWIID0gXFx2e259XG4gIFwiXFx1MUU0NVwiOiBcIm5cXHUwMzA3XCIsXG4gIC8vIOG5hSA9IFxcLntufVxuICBcIlxceEYzXCI6IFwib1xcdTAzMDFcIixcbiAgLy8gw7MgPSBcXCd7b31cbiAgXCJcXHhGMlwiOiBcIm9cXHUwMzAwXCIsXG4gIC8vIMOyID0gXFxge299XG4gIFwiXFx4RjZcIjogXCJvXFx1MDMwOFwiLFxuICAvLyDDtiA9IFxcXCJ7b31cbiAgXCJcXHUwMjJCXCI6IFwib1xcdTAzMDhcXHUwMzA0XCIsXG4gIC8vIMirID0gXFxcIlxcPXtvfVxuICBcIlxceEY1XCI6IFwib1xcdTAzMDNcIixcbiAgLy8gw7UgPSBcXH57b31cbiAgXCJcXHUxRTREXCI6IFwib1xcdTAzMDNcXHUwMzAxXCIsXG4gIC8vIOG5jSA9IFxcflxcJ3tvfVxuICBcIlxcdTFFNEZcIjogXCJvXFx1MDMwM1xcdTAzMDhcIixcbiAgLy8g4bmPID0gXFx+XFxcIntvfVxuICBcIlxcdTAyMkRcIjogXCJvXFx1MDMwM1xcdTAzMDRcIixcbiAgLy8gyK0gPSBcXH5cXD17b31cbiAgXCJcXHUwMTREXCI6IFwib1xcdTAzMDRcIixcbiAgLy8gxY0gPSBcXD17b31cbiAgXCJcXHUxRTUzXCI6IFwib1xcdTAzMDRcXHUwMzAxXCIsXG4gIC8vIOG5kyA9IFxcPVxcJ3tvfVxuICBcIlxcdTFFNTFcIjogXCJvXFx1MDMwNFxcdTAzMDBcIixcbiAgLy8g4bmRID0gXFw9XFxge299XG4gIFwiXFx1MDE0RlwiOiBcIm9cXHUwMzA2XCIsXG4gIC8vIMWPID0gXFx1e299XG4gIFwiXFx1MDFEMlwiOiBcIm9cXHUwMzBDXCIsXG4gIC8vIMeSID0gXFx2e299XG4gIFwiXFx4RjRcIjogXCJvXFx1MDMwMlwiLFxuICAvLyDDtCA9IFxcXntvfVxuICBcIlxcdTFFRDFcIjogXCJvXFx1MDMwMlxcdTAzMDFcIixcbiAgLy8g4buRID0gXFxeXFwne299XG4gIFwiXFx1MUVEM1wiOiBcIm9cXHUwMzAyXFx1MDMwMFwiLFxuICAvLyDhu5MgPSBcXF5cXGB7b31cbiAgXCJcXHUxRUQ3XCI6IFwib1xcdTAzMDJcXHUwMzAzXCIsXG4gIC8vIOG7lyA9IFxcXlxcfntvfVxuICBcIlxcdTAyMkZcIjogXCJvXFx1MDMwN1wiLFxuICAvLyDIryA9IFxcLntvfVxuICBcIlxcdTAyMzFcIjogXCJvXFx1MDMwN1xcdTAzMDRcIixcbiAgLy8gyLEgPSBcXC5cXD17b31cbiAgXCJcXHUwMTUxXCI6IFwib1xcdTAzMEJcIixcbiAgLy8gxZEgPSBcXEh7b31cbiAgXCJcXHUxRTU1XCI6IFwicFxcdTAzMDFcIixcbiAgLy8g4bmVID0gXFwne3B9XG4gIFwiXFx1MUU1N1wiOiBcInBcXHUwMzA3XCIsXG4gIC8vIOG5lyA9IFxcLntwfVxuICBcIlxcdTAxNTVcIjogXCJyXFx1MDMwMVwiLFxuICAvLyDFlSA9IFxcJ3tyfVxuICBcIlxcdTAxNTlcIjogXCJyXFx1MDMwQ1wiLFxuICAvLyDFmSA9IFxcdntyfVxuICBcIlxcdTFFNTlcIjogXCJyXFx1MDMwN1wiLFxuICAvLyDhuZkgPSBcXC57cn1cbiAgXCJcXHUwMTVCXCI6IFwic1xcdTAzMDFcIixcbiAgLy8gxZsgPSBcXCd7c31cbiAgXCJcXHUxRTY1XCI6IFwic1xcdTAzMDFcXHUwMzA3XCIsXG4gIC8vIOG5pSA9IFxcJ1xcLntzfVxuICBcIlxcdTAxNjFcIjogXCJzXFx1MDMwQ1wiLFxuICAvLyDFoSA9IFxcdntzfVxuICBcIlxcdTFFNjdcIjogXCJzXFx1MDMwQ1xcdTAzMDdcIixcbiAgLy8g4bmnID0gXFx2XFwue3N9XG4gIFwiXFx1MDE1RFwiOiBcInNcXHUwMzAyXCIsXG4gIC8vIMWdID0gXFxee3N9XG4gIFwiXFx1MUU2MVwiOiBcInNcXHUwMzA3XCIsXG4gIC8vIOG5oSA9IFxcLntzfVxuICBcIlxcdTFFOTdcIjogXCJ0XFx1MDMwOFwiLFxuICAvLyDhupcgPSBcXFwie3R9XG4gIFwiXFx1MDE2NVwiOiBcInRcXHUwMzBDXCIsXG4gIC8vIMWlID0gXFx2e3R9XG4gIFwiXFx1MUU2QlwiOiBcInRcXHUwMzA3XCIsXG4gIC8vIOG5qyA9IFxcLnt0fVxuICBcIlxceEZBXCI6IFwidVxcdTAzMDFcIixcbiAgLy8gw7ogPSBcXCd7dX1cbiAgXCJcXHhGOVwiOiBcInVcXHUwMzAwXCIsXG4gIC8vIMO5ID0gXFxge3V9XG4gIFwiXFx4RkNcIjogXCJ1XFx1MDMwOFwiLFxuICAvLyDDvCA9IFxcXCJ7dX1cbiAgXCJcXHUwMUQ4XCI6IFwidVxcdTAzMDhcXHUwMzAxXCIsXG4gIC8vIMeYID0gXFxcIlxcJ3t1fVxuICBcIlxcdTAxRENcIjogXCJ1XFx1MDMwOFxcdTAzMDBcIixcbiAgLy8gx5wgPSBcXFwiXFxge3V9XG4gIFwiXFx1MDFENlwiOiBcInVcXHUwMzA4XFx1MDMwNFwiLFxuICAvLyDHliA9IFxcXCJcXD17dX1cbiAgXCJcXHUwMURBXCI6IFwidVxcdTAzMDhcXHUwMzBDXCIsXG4gIC8vIMeaID0gXFxcIlxcdnt1fVxuICBcIlxcdTAxNjlcIjogXCJ1XFx1MDMwM1wiLFxuICAvLyDFqSA9IFxcfnt1fVxuICBcIlxcdTFFNzlcIjogXCJ1XFx1MDMwM1xcdTAzMDFcIixcbiAgLy8g4bm5ID0gXFx+XFwne3V9XG4gIFwiXFx1MDE2QlwiOiBcInVcXHUwMzA0XCIsXG4gIC8vIMWrID0gXFw9e3V9XG4gIFwiXFx1MUU3QlwiOiBcInVcXHUwMzA0XFx1MDMwOFwiLFxuICAvLyDhubsgPSBcXD1cXFwie3V9XG4gIFwiXFx1MDE2RFwiOiBcInVcXHUwMzA2XCIsXG4gIC8vIMWtID0gXFx1e3V9XG4gIFwiXFx1MDFENFwiOiBcInVcXHUwMzBDXCIsXG4gIC8vIMeUID0gXFx2e3V9XG4gIFwiXFx4RkJcIjogXCJ1XFx1MDMwMlwiLFxuICAvLyDDuyA9IFxcXnt1fVxuICBcIlxcdTAxNkZcIjogXCJ1XFx1MDMwQVwiLFxuICAvLyDFryA9IFxccnt1fVxuICBcIlxcdTAxNzFcIjogXCJ1XFx1MDMwQlwiLFxuICAvLyDFsSA9IFxcSHt1fVxuICBcIlxcdTFFN0RcIjogXCJ2XFx1MDMwM1wiLFxuICAvLyDhub0gPSBcXH57dn1cbiAgXCJcXHUxRTgzXCI6IFwid1xcdTAzMDFcIixcbiAgLy8g4bqDID0gXFwne3d9XG4gIFwiXFx1MUU4MVwiOiBcIndcXHUwMzAwXCIsXG4gIC8vIOG6gSA9IFxcYHt3fVxuICBcIlxcdTFFODVcIjogXCJ3XFx1MDMwOFwiLFxuICAvLyDhuoUgPSBcXFwie3d9XG4gIFwiXFx1MDE3NVwiOiBcIndcXHUwMzAyXCIsXG4gIC8vIMW1ID0gXFxee3d9XG4gIFwiXFx1MUU4N1wiOiBcIndcXHUwMzA3XCIsXG4gIC8vIOG6hyA9IFxcLnt3fVxuICBcIlxcdTFFOThcIjogXCJ3XFx1MDMwQVwiLFxuICAvLyDhupggPSBcXHJ7d31cbiAgXCJcXHUxRThEXCI6IFwieFxcdTAzMDhcIixcbiAgLy8g4bqNID0gXFxcInt4fVxuICBcIlxcdTFFOEJcIjogXCJ4XFx1MDMwN1wiLFxuICAvLyDhuosgPSBcXC57eH1cbiAgXCJcXHhGRFwiOiBcInlcXHUwMzAxXCIsXG4gIC8vIMO9ID0gXFwne3l9XG4gIFwiXFx1MUVGM1wiOiBcInlcXHUwMzAwXCIsXG4gIC8vIOG7syA9IFxcYHt5fVxuICBcIlxceEZGXCI6IFwieVxcdTAzMDhcIixcbiAgLy8gw78gPSBcXFwie3l9XG4gIFwiXFx1MUVGOVwiOiBcInlcXHUwMzAzXCIsXG4gIC8vIOG7uSA9IFxcfnt5fVxuICBcIlxcdTAyMzNcIjogXCJ5XFx1MDMwNFwiLFxuICAvLyDIsyA9IFxcPXt5fVxuICBcIlxcdTAxNzdcIjogXCJ5XFx1MDMwMlwiLFxuICAvLyDFtyA9IFxcXnt5fVxuICBcIlxcdTFFOEZcIjogXCJ5XFx1MDMwN1wiLFxuICAvLyDhuo8gPSBcXC57eX1cbiAgXCJcXHUxRTk5XCI6IFwieVxcdTAzMEFcIixcbiAgLy8g4bqZID0gXFxye3l9XG4gIFwiXFx1MDE3QVwiOiBcInpcXHUwMzAxXCIsXG4gIC8vIMW6ID0gXFwne3p9XG4gIFwiXFx1MDE3RVwiOiBcInpcXHUwMzBDXCIsXG4gIC8vIMW+ID0gXFx2e3p9XG4gIFwiXFx1MUU5MVwiOiBcInpcXHUwMzAyXCIsXG4gIC8vIOG6kSA9IFxcXnt6fVxuICBcIlxcdTAxN0NcIjogXCJ6XFx1MDMwN1wiLFxuICAvLyDFvCA9IFxcLnt6fVxuICBcIlxceEMxXCI6IFwiQVxcdTAzMDFcIixcbiAgLy8gw4EgPSBcXCd7QX1cbiAgXCJcXHhDMFwiOiBcIkFcXHUwMzAwXCIsXG4gIC8vIMOAID0gXFxge0F9XG4gIFwiXFx4QzRcIjogXCJBXFx1MDMwOFwiLFxuICAvLyDDhCA9IFxcXCJ7QX1cbiAgXCJcXHUwMURFXCI6IFwiQVxcdTAzMDhcXHUwMzA0XCIsXG4gIC8vIMeeID0gXFxcIlxcPXtBfVxuICBcIlxceEMzXCI6IFwiQVxcdTAzMDNcIixcbiAgLy8gw4MgPSBcXH57QX1cbiAgXCJcXHUwMTAwXCI6IFwiQVxcdTAzMDRcIixcbiAgLy8gxIAgPSBcXD17QX1cbiAgXCJcXHUwMTAyXCI6IFwiQVxcdTAzMDZcIixcbiAgLy8gxIIgPSBcXHV7QX1cbiAgXCJcXHUxRUFFXCI6IFwiQVxcdTAzMDZcXHUwMzAxXCIsXG4gIC8vIOG6riA9IFxcdVxcJ3tBfVxuICBcIlxcdTFFQjBcIjogXCJBXFx1MDMwNlxcdTAzMDBcIixcbiAgLy8g4bqwID0gXFx1XFxge0F9XG4gIFwiXFx1MUVCNFwiOiBcIkFcXHUwMzA2XFx1MDMwM1wiLFxuICAvLyDhurQgPSBcXHVcXH57QX1cbiAgXCJcXHUwMUNEXCI6IFwiQVxcdTAzMENcIixcbiAgLy8gx40gPSBcXHZ7QX1cbiAgXCJcXHhDMlwiOiBcIkFcXHUwMzAyXCIsXG4gIC8vIMOCID0gXFxee0F9XG4gIFwiXFx1MUVBNFwiOiBcIkFcXHUwMzAyXFx1MDMwMVwiLFxuICAvLyDhuqQgPSBcXF5cXCd7QX1cbiAgXCJcXHUxRUE2XCI6IFwiQVxcdTAzMDJcXHUwMzAwXCIsXG4gIC8vIOG6piA9IFxcXlxcYHtBfVxuICBcIlxcdTFFQUFcIjogXCJBXFx1MDMwMlxcdTAzMDNcIixcbiAgLy8g4bqqID0gXFxeXFx+e0F9XG4gIFwiXFx1MDIyNlwiOiBcIkFcXHUwMzA3XCIsXG4gIC8vIMimID0gXFwue0F9XG4gIFwiXFx1MDFFMFwiOiBcIkFcXHUwMzA3XFx1MDMwNFwiLFxuICAvLyDHoCA9IFxcLlxcPXtBfVxuICBcIlxceEM1XCI6IFwiQVxcdTAzMEFcIixcbiAgLy8gw4UgPSBcXHJ7QX1cbiAgXCJcXHUwMUZBXCI6IFwiQVxcdTAzMEFcXHUwMzAxXCIsXG4gIC8vIMe6ID0gXFxyXFwne0F9XG4gIFwiXFx1MUUwMlwiOiBcIkJcXHUwMzA3XCIsXG4gIC8vIOG4giA9IFxcLntCfVxuICBcIlxcdTAxMDZcIjogXCJDXFx1MDMwMVwiLFxuICAvLyDEhiA9IFxcJ3tDfVxuICBcIlxcdTAxMENcIjogXCJDXFx1MDMwQ1wiLFxuICAvLyDEjCA9IFxcdntDfVxuICBcIlxcdTAxMDhcIjogXCJDXFx1MDMwMlwiLFxuICAvLyDEiCA9IFxcXntDfVxuICBcIlxcdTAxMEFcIjogXCJDXFx1MDMwN1wiLFxuICAvLyDEiiA9IFxcLntDfVxuICBcIlxcdTAxMEVcIjogXCJEXFx1MDMwQ1wiLFxuICAvLyDEjiA9IFxcdntEfVxuICBcIlxcdTFFMEFcIjogXCJEXFx1MDMwN1wiLFxuICAvLyDhuIogPSBcXC57RH1cbiAgXCJcXHhDOVwiOiBcIkVcXHUwMzAxXCIsXG4gIC8vIMOJID0gXFwne0V9XG4gIFwiXFx4QzhcIjogXCJFXFx1MDMwMFwiLFxuICAvLyDDiCA9IFxcYHtFfVxuICBcIlxceENCXCI6IFwiRVxcdTAzMDhcIixcbiAgLy8gw4sgPSBcXFwie0V9XG4gIFwiXFx1MUVCQ1wiOiBcIkVcXHUwMzAzXCIsXG4gIC8vIOG6vCA9IFxcfntFfVxuICBcIlxcdTAxMTJcIjogXCJFXFx1MDMwNFwiLFxuICAvLyDEkiA9IFxcPXtFfVxuICBcIlxcdTFFMTZcIjogXCJFXFx1MDMwNFxcdTAzMDFcIixcbiAgLy8g4biWID0gXFw9XFwne0V9XG4gIFwiXFx1MUUxNFwiOiBcIkVcXHUwMzA0XFx1MDMwMFwiLFxuICAvLyDhuJQgPSBcXD1cXGB7RX1cbiAgXCJcXHUwMTE0XCI6IFwiRVxcdTAzMDZcIixcbiAgLy8gxJQgPSBcXHV7RX1cbiAgXCJcXHUwMTFBXCI6IFwiRVxcdTAzMENcIixcbiAgLy8gxJogPSBcXHZ7RX1cbiAgXCJcXHhDQVwiOiBcIkVcXHUwMzAyXCIsXG4gIC8vIMOKID0gXFxee0V9XG4gIFwiXFx1MUVCRVwiOiBcIkVcXHUwMzAyXFx1MDMwMVwiLFxuICAvLyDhur4gPSBcXF5cXCd7RX1cbiAgXCJcXHUxRUMwXCI6IFwiRVxcdTAzMDJcXHUwMzAwXCIsXG4gIC8vIOG7gCA9IFxcXlxcYHtFfVxuICBcIlxcdTFFQzRcIjogXCJFXFx1MDMwMlxcdTAzMDNcIixcbiAgLy8g4buEID0gXFxeXFx+e0V9XG4gIFwiXFx1MDExNlwiOiBcIkVcXHUwMzA3XCIsXG4gIC8vIMSWID0gXFwue0V9XG4gIFwiXFx1MUUxRVwiOiBcIkZcXHUwMzA3XCIsXG4gIC8vIOG4niA9IFxcLntGfVxuICBcIlxcdTAxRjRcIjogXCJHXFx1MDMwMVwiLFxuICAvLyDHtCA9IFxcJ3tHfVxuICBcIlxcdTFFMjBcIjogXCJHXFx1MDMwNFwiLFxuICAvLyDhuKAgPSBcXD17R31cbiAgXCJcXHUwMTFFXCI6IFwiR1xcdTAzMDZcIixcbiAgLy8gxJ4gPSBcXHV7R31cbiAgXCJcXHUwMUU2XCI6IFwiR1xcdTAzMENcIixcbiAgLy8gx6YgPSBcXHZ7R31cbiAgXCJcXHUwMTFDXCI6IFwiR1xcdTAzMDJcIixcbiAgLy8gxJwgPSBcXF57R31cbiAgXCJcXHUwMTIwXCI6IFwiR1xcdTAzMDdcIixcbiAgLy8gxKAgPSBcXC57R31cbiAgXCJcXHUxRTI2XCI6IFwiSFxcdTAzMDhcIixcbiAgLy8g4bimID0gXFxcIntIfVxuICBcIlxcdTAyMUVcIjogXCJIXFx1MDMwQ1wiLFxuICAvLyDIniA9IFxcdntIfVxuICBcIlxcdTAxMjRcIjogXCJIXFx1MDMwMlwiLFxuICAvLyDEpCA9IFxcXntIfVxuICBcIlxcdTFFMjJcIjogXCJIXFx1MDMwN1wiLFxuICAvLyDhuKIgPSBcXC57SH1cbiAgXCJcXHhDRFwiOiBcIklcXHUwMzAxXCIsXG4gIC8vIMONID0gXFwne0l9XG4gIFwiXFx4Q0NcIjogXCJJXFx1MDMwMFwiLFxuICAvLyDDjCA9IFxcYHtJfVxuICBcIlxceENGXCI6IFwiSVxcdTAzMDhcIixcbiAgLy8gw48gPSBcXFwie0l9XG4gIFwiXFx1MUUyRVwiOiBcIklcXHUwMzA4XFx1MDMwMVwiLFxuICAvLyDhuK4gPSBcXFwiXFwne0l9XG4gIFwiXFx1MDEyOFwiOiBcIklcXHUwMzAzXCIsXG4gIC8vIMSoID0gXFx+e0l9XG4gIFwiXFx1MDEyQVwiOiBcIklcXHUwMzA0XCIsXG4gIC8vIMSqID0gXFw9e0l9XG4gIFwiXFx1MDEyQ1wiOiBcIklcXHUwMzA2XCIsXG4gIC8vIMSsID0gXFx1e0l9XG4gIFwiXFx1MDFDRlwiOiBcIklcXHUwMzBDXCIsXG4gIC8vIMePID0gXFx2e0l9XG4gIFwiXFx4Q0VcIjogXCJJXFx1MDMwMlwiLFxuICAvLyDDjiA9IFxcXntJfVxuICBcIlxcdTAxMzBcIjogXCJJXFx1MDMwN1wiLFxuICAvLyDEsCA9IFxcLntJfVxuICBcIlxcdTAxMzRcIjogXCJKXFx1MDMwMlwiLFxuICAvLyDEtCA9IFxcXntKfVxuICBcIlxcdTFFMzBcIjogXCJLXFx1MDMwMVwiLFxuICAvLyDhuLAgPSBcXCd7S31cbiAgXCJcXHUwMUU4XCI6IFwiS1xcdTAzMENcIixcbiAgLy8gx6ggPSBcXHZ7S31cbiAgXCJcXHUwMTM5XCI6IFwiTFxcdTAzMDFcIixcbiAgLy8gxLkgPSBcXCd7TH1cbiAgXCJcXHUwMTNEXCI6IFwiTFxcdTAzMENcIixcbiAgLy8gxL0gPSBcXHZ7TH1cbiAgXCJcXHUxRTNFXCI6IFwiTVxcdTAzMDFcIixcbiAgLy8g4bi+ID0gXFwne019XG4gIFwiXFx1MUU0MFwiOiBcIk1cXHUwMzA3XCIsXG4gIC8vIOG5gCA9IFxcLntNfVxuICBcIlxcdTAxNDNcIjogXCJOXFx1MDMwMVwiLFxuICAvLyDFgyA9IFxcJ3tOfVxuICBcIlxcdTAxRjhcIjogXCJOXFx1MDMwMFwiLFxuICAvLyDHuCA9IFxcYHtOfVxuICBcIlxceEQxXCI6IFwiTlxcdTAzMDNcIixcbiAgLy8gw5EgPSBcXH57Tn1cbiAgXCJcXHUwMTQ3XCI6IFwiTlxcdTAzMENcIixcbiAgLy8gxYcgPSBcXHZ7Tn1cbiAgXCJcXHUxRTQ0XCI6IFwiTlxcdTAzMDdcIixcbiAgLy8g4bmEID0gXFwue059XG4gIFwiXFx4RDNcIjogXCJPXFx1MDMwMVwiLFxuICAvLyDDkyA9IFxcJ3tPfVxuICBcIlxceEQyXCI6IFwiT1xcdTAzMDBcIixcbiAgLy8gw5IgPSBcXGB7T31cbiAgXCJcXHhENlwiOiBcIk9cXHUwMzA4XCIsXG4gIC8vIMOWID0gXFxcIntPfVxuICBcIlxcdTAyMkFcIjogXCJPXFx1MDMwOFxcdTAzMDRcIixcbiAgLy8gyKogPSBcXFwiXFw9e099XG4gIFwiXFx4RDVcIjogXCJPXFx1MDMwM1wiLFxuICAvLyDDlSA9IFxcfntPfVxuICBcIlxcdTFFNENcIjogXCJPXFx1MDMwM1xcdTAzMDFcIixcbiAgLy8g4bmMID0gXFx+XFwne099XG4gIFwiXFx1MUU0RVwiOiBcIk9cXHUwMzAzXFx1MDMwOFwiLFxuICAvLyDhuY4gPSBcXH5cXFwie099XG4gIFwiXFx1MDIyQ1wiOiBcIk9cXHUwMzAzXFx1MDMwNFwiLFxuICAvLyDIrCA9IFxcflxcPXtPfVxuICBcIlxcdTAxNENcIjogXCJPXFx1MDMwNFwiLFxuICAvLyDFjCA9IFxcPXtPfVxuICBcIlxcdTFFNTJcIjogXCJPXFx1MDMwNFxcdTAzMDFcIixcbiAgLy8g4bmSID0gXFw9XFwne099XG4gIFwiXFx1MUU1MFwiOiBcIk9cXHUwMzA0XFx1MDMwMFwiLFxuICAvLyDhuZAgPSBcXD1cXGB7T31cbiAgXCJcXHUwMTRFXCI6IFwiT1xcdTAzMDZcIixcbiAgLy8gxY4gPSBcXHV7T31cbiAgXCJcXHUwMUQxXCI6IFwiT1xcdTAzMENcIixcbiAgLy8gx5EgPSBcXHZ7T31cbiAgXCJcXHhENFwiOiBcIk9cXHUwMzAyXCIsXG4gIC8vIMOUID0gXFxee099XG4gIFwiXFx1MUVEMFwiOiBcIk9cXHUwMzAyXFx1MDMwMVwiLFxuICAvLyDhu5AgPSBcXF5cXCd7T31cbiAgXCJcXHUxRUQyXCI6IFwiT1xcdTAzMDJcXHUwMzAwXCIsXG4gIC8vIOG7kiA9IFxcXlxcYHtPfVxuICBcIlxcdTFFRDZcIjogXCJPXFx1MDMwMlxcdTAzMDNcIixcbiAgLy8g4buWID0gXFxeXFx+e099XG4gIFwiXFx1MDIyRVwiOiBcIk9cXHUwMzA3XCIsXG4gIC8vIMiuID0gXFwue099XG4gIFwiXFx1MDIzMFwiOiBcIk9cXHUwMzA3XFx1MDMwNFwiLFxuICAvLyDIsCA9IFxcLlxcPXtPfVxuICBcIlxcdTAxNTBcIjogXCJPXFx1MDMwQlwiLFxuICAvLyDFkCA9IFxcSHtPfVxuICBcIlxcdTFFNTRcIjogXCJQXFx1MDMwMVwiLFxuICAvLyDhuZQgPSBcXCd7UH1cbiAgXCJcXHUxRTU2XCI6IFwiUFxcdTAzMDdcIixcbiAgLy8g4bmWID0gXFwue1B9XG4gIFwiXFx1MDE1NFwiOiBcIlJcXHUwMzAxXCIsXG4gIC8vIMWUID0gXFwne1J9XG4gIFwiXFx1MDE1OFwiOiBcIlJcXHUwMzBDXCIsXG4gIC8vIMWYID0gXFx2e1J9XG4gIFwiXFx1MUU1OFwiOiBcIlJcXHUwMzA3XCIsXG4gIC8vIOG5mCA9IFxcLntSfVxuICBcIlxcdTAxNUFcIjogXCJTXFx1MDMwMVwiLFxuICAvLyDFmiA9IFxcJ3tTfVxuICBcIlxcdTFFNjRcIjogXCJTXFx1MDMwMVxcdTAzMDdcIixcbiAgLy8g4bmkID0gXFwnXFwue1N9XG4gIFwiXFx1MDE2MFwiOiBcIlNcXHUwMzBDXCIsXG4gIC8vIMWgID0gXFx2e1N9XG4gIFwiXFx1MUU2NlwiOiBcIlNcXHUwMzBDXFx1MDMwN1wiLFxuICAvLyDhuaYgPSBcXHZcXC57U31cbiAgXCJcXHUwMTVDXCI6IFwiU1xcdTAzMDJcIixcbiAgLy8gxZwgPSBcXF57U31cbiAgXCJcXHUxRTYwXCI6IFwiU1xcdTAzMDdcIixcbiAgLy8g4bmgID0gXFwue1N9XG4gIFwiXFx1MDE2NFwiOiBcIlRcXHUwMzBDXCIsXG4gIC8vIMWkID0gXFx2e1R9XG4gIFwiXFx1MUU2QVwiOiBcIlRcXHUwMzA3XCIsXG4gIC8vIOG5qiA9IFxcLntUfVxuICBcIlxceERBXCI6IFwiVVxcdTAzMDFcIixcbiAgLy8gw5ogPSBcXCd7VX1cbiAgXCJcXHhEOVwiOiBcIlVcXHUwMzAwXCIsXG4gIC8vIMOZID0gXFxge1V9XG4gIFwiXFx4RENcIjogXCJVXFx1MDMwOFwiLFxuICAvLyDDnCA9IFxcXCJ7VX1cbiAgXCJcXHUwMUQ3XCI6IFwiVVxcdTAzMDhcXHUwMzAxXCIsXG4gIC8vIMeXID0gXFxcIlxcJ3tVfVxuICBcIlxcdTAxREJcIjogXCJVXFx1MDMwOFxcdTAzMDBcIixcbiAgLy8gx5sgPSBcXFwiXFxge1V9XG4gIFwiXFx1MDFENVwiOiBcIlVcXHUwMzA4XFx1MDMwNFwiLFxuICAvLyDHlSA9IFxcXCJcXD17VX1cbiAgXCJcXHUwMUQ5XCI6IFwiVVxcdTAzMDhcXHUwMzBDXCIsXG4gIC8vIMeZID0gXFxcIlxcdntVfVxuICBcIlxcdTAxNjhcIjogXCJVXFx1MDMwM1wiLFxuICAvLyDFqCA9IFxcfntVfVxuICBcIlxcdTFFNzhcIjogXCJVXFx1MDMwM1xcdTAzMDFcIixcbiAgLy8g4bm4ID0gXFx+XFwne1V9XG4gIFwiXFx1MDE2QVwiOiBcIlVcXHUwMzA0XCIsXG4gIC8vIMWqID0gXFw9e1V9XG4gIFwiXFx1MUU3QVwiOiBcIlVcXHUwMzA0XFx1MDMwOFwiLFxuICAvLyDhubogPSBcXD1cXFwie1V9XG4gIFwiXFx1MDE2Q1wiOiBcIlVcXHUwMzA2XCIsXG4gIC8vIMWsID0gXFx1e1V9XG4gIFwiXFx1MDFEM1wiOiBcIlVcXHUwMzBDXCIsXG4gIC8vIMeTID0gXFx2e1V9XG4gIFwiXFx4REJcIjogXCJVXFx1MDMwMlwiLFxuICAvLyDDmyA9IFxcXntVfVxuICBcIlxcdTAxNkVcIjogXCJVXFx1MDMwQVwiLFxuICAvLyDFriA9IFxccntVfVxuICBcIlxcdTAxNzBcIjogXCJVXFx1MDMwQlwiLFxuICAvLyDFsCA9IFxcSHtVfVxuICBcIlxcdTFFN0NcIjogXCJWXFx1MDMwM1wiLFxuICAvLyDhubwgPSBcXH57Vn1cbiAgXCJcXHUxRTgyXCI6IFwiV1xcdTAzMDFcIixcbiAgLy8g4bqCID0gXFwne1d9XG4gIFwiXFx1MUU4MFwiOiBcIldcXHUwMzAwXCIsXG4gIC8vIOG6gCA9IFxcYHtXfVxuICBcIlxcdTFFODRcIjogXCJXXFx1MDMwOFwiLFxuICAvLyDhuoQgPSBcXFwie1d9XG4gIFwiXFx1MDE3NFwiOiBcIldcXHUwMzAyXCIsXG4gIC8vIMW0ID0gXFxee1d9XG4gIFwiXFx1MUU4NlwiOiBcIldcXHUwMzA3XCIsXG4gIC8vIOG6hiA9IFxcLntXfVxuICBcIlxcdTFFOENcIjogXCJYXFx1MDMwOFwiLFxuICAvLyDhuowgPSBcXFwie1h9XG4gIFwiXFx1MUU4QVwiOiBcIlhcXHUwMzA3XCIsXG4gIC8vIOG6iiA9IFxcLntYfVxuICBcIlxceEREXCI6IFwiWVxcdTAzMDFcIixcbiAgLy8gw50gPSBcXCd7WX1cbiAgXCJcXHUxRUYyXCI6IFwiWVxcdTAzMDBcIixcbiAgLy8g4buyID0gXFxge1l9XG4gIFwiXFx1MDE3OFwiOiBcIllcXHUwMzA4XCIsXG4gIC8vIMW4ID0gXFxcIntZfVxuICBcIlxcdTFFRjhcIjogXCJZXFx1MDMwM1wiLFxuICAvLyDhu7ggPSBcXH57WX1cbiAgXCJcXHUwMjMyXCI6IFwiWVxcdTAzMDRcIixcbiAgLy8gyLIgPSBcXD17WX1cbiAgXCJcXHUwMTc2XCI6IFwiWVxcdTAzMDJcIixcbiAgLy8gxbYgPSBcXF57WX1cbiAgXCJcXHUxRThFXCI6IFwiWVxcdTAzMDdcIixcbiAgLy8g4bqOID0gXFwue1l9XG4gIFwiXFx1MDE3OVwiOiBcIlpcXHUwMzAxXCIsXG4gIC8vIMW5ID0gXFwne1p9XG4gIFwiXFx1MDE3RFwiOiBcIlpcXHUwMzBDXCIsXG4gIC8vIMW9ID0gXFx2e1p9XG4gIFwiXFx1MUU5MFwiOiBcIlpcXHUwMzAyXCIsXG4gIC8vIOG6kCA9IFxcXntafVxuICBcIlxcdTAxN0JcIjogXCJaXFx1MDMwN1wiLFxuICAvLyDFuyA9IFxcLntafVxuICBcIlxcdTAzQUNcIjogXCJcXHUwM0IxXFx1MDMwMVwiLFxuICAvLyDOrCA9IFxcJ3vOsX1cbiAgXCJcXHUxRjcwXCI6IFwiXFx1MDNCMVxcdTAzMDBcIixcbiAgLy8g4b2wID0gXFxge86xfVxuICBcIlxcdTFGQjFcIjogXCJcXHUwM0IxXFx1MDMwNFwiLFxuICAvLyDhvrEgPSBcXD17zrF9XG4gIFwiXFx1MUZCMFwiOiBcIlxcdTAzQjFcXHUwMzA2XCIsXG4gIC8vIOG+sCA9IFxcdXvOsX1cbiAgXCJcXHUwM0FEXCI6IFwiXFx1MDNCNVxcdTAzMDFcIixcbiAgLy8gzq0gPSBcXCd7zrV9XG4gIFwiXFx1MUY3MlwiOiBcIlxcdTAzQjVcXHUwMzAwXCIsXG4gIC8vIOG9siA9IFxcYHvOtX1cbiAgXCJcXHUwM0FFXCI6IFwiXFx1MDNCN1xcdTAzMDFcIixcbiAgLy8gzq4gPSBcXCd7zrd9XG4gIFwiXFx1MUY3NFwiOiBcIlxcdTAzQjdcXHUwMzAwXCIsXG4gIC8vIOG9tCA9IFxcYHvOt31cbiAgXCJcXHUwM0FGXCI6IFwiXFx1MDNCOVxcdTAzMDFcIixcbiAgLy8gzq8gPSBcXCd7zrl9XG4gIFwiXFx1MUY3NlwiOiBcIlxcdTAzQjlcXHUwMzAwXCIsXG4gIC8vIOG9tiA9IFxcYHvOuX1cbiAgXCJcXHUwM0NBXCI6IFwiXFx1MDNCOVxcdTAzMDhcIixcbiAgLy8gz4ogPSBcXFwie865fVxuICBcIlxcdTAzOTBcIjogXCJcXHUwM0I5XFx1MDMwOFxcdTAzMDFcIixcbiAgLy8gzpAgPSBcXFwiXFwne865fVxuICBcIlxcdTFGRDJcIjogXCJcXHUwM0I5XFx1MDMwOFxcdTAzMDBcIixcbiAgLy8g4b+SID0gXFxcIlxcYHvOuX1cbiAgXCJcXHUxRkQxXCI6IFwiXFx1MDNCOVxcdTAzMDRcIixcbiAgLy8g4b+RID0gXFw9e865fVxuICBcIlxcdTFGRDBcIjogXCJcXHUwM0I5XFx1MDMwNlwiLFxuICAvLyDhv5AgPSBcXHV7zrl9XG4gIFwiXFx1MDNDQ1wiOiBcIlxcdTAzQkZcXHUwMzAxXCIsXG4gIC8vIM+MID0gXFwne86/fVxuICBcIlxcdTFGNzhcIjogXCJcXHUwM0JGXFx1MDMwMFwiLFxuICAvLyDhvbggPSBcXGB7zr99XG4gIFwiXFx1MDNDRFwiOiBcIlxcdTAzQzVcXHUwMzAxXCIsXG4gIC8vIM+NID0gXFwne8+FfVxuICBcIlxcdTFGN0FcIjogXCJcXHUwM0M1XFx1MDMwMFwiLFxuICAvLyDhvbogPSBcXGB7z4V9XG4gIFwiXFx1MDNDQlwiOiBcIlxcdTAzQzVcXHUwMzA4XCIsXG4gIC8vIM+LID0gXFxcInvPhX1cbiAgXCJcXHUwM0IwXCI6IFwiXFx1MDNDNVxcdTAzMDhcXHUwMzAxXCIsXG4gIC8vIM6wID0gXFxcIlxcJ3vPhX1cbiAgXCJcXHUxRkUyXCI6IFwiXFx1MDNDNVxcdTAzMDhcXHUwMzAwXCIsXG4gIC8vIOG/oiA9IFxcXCJcXGB7z4V9XG4gIFwiXFx1MUZFMVwiOiBcIlxcdTAzQzVcXHUwMzA0XCIsXG4gIC8vIOG/oSA9IFxcPXvPhX1cbiAgXCJcXHUxRkUwXCI6IFwiXFx1MDNDNVxcdTAzMDZcIixcbiAgLy8g4b+gID0gXFx1e8+FfVxuICBcIlxcdTAzQ0VcIjogXCJcXHUwM0M5XFx1MDMwMVwiLFxuICAvLyDPjiA9IFxcJ3vPiX1cbiAgXCJcXHUxRjdDXCI6IFwiXFx1MDNDOVxcdTAzMDBcIixcbiAgLy8g4b28ID0gXFxge8+JfVxuICBcIlxcdTAzOEVcIjogXCJcXHUwM0E1XFx1MDMwMVwiLFxuICAvLyDOjiA9IFxcJ3vOpX1cbiAgXCJcXHUxRkVBXCI6IFwiXFx1MDNBNVxcdTAzMDBcIixcbiAgLy8g4b+qID0gXFxge86lfVxuICBcIlxcdTAzQUJcIjogXCJcXHUwM0E1XFx1MDMwOFwiLFxuICAvLyDOqyA9IFxcXCJ7zqV9XG4gIFwiXFx1MUZFOVwiOiBcIlxcdTAzQTVcXHUwMzA0XCIsXG4gIC8vIOG/qSA9IFxcPXvOpX1cbiAgXCJcXHUxRkU4XCI6IFwiXFx1MDNBNVxcdTAzMDZcIixcbiAgLy8g4b+oID0gXFx1e86lfVxuICBcIlxcdTAzOEZcIjogXCJcXHUwM0E5XFx1MDMwMVwiLFxuICAvLyDOjyA9IFxcJ3vOqX1cbiAgXCJcXHUxRkZBXCI6IFwiXFx1MDNBOVxcdTAzMDBcIiAvLyDhv7ogPSBcXGB7zql9XG5cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvUGFyc2VyLmpzXG4vKiBlc2xpbnQgbm8tY29uc3RhbnQtY29uZGl0aW9uOjAgKi9cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKipcbiAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgcGFyc2VyIHVzZWQgdG8gcGFyc2Ugb3V0IGEgVGVYIGV4cHJlc3Npb24gZnJvbSB0aGVcbiAqIGlucHV0LiBTaW5jZSBUZVggaXNuJ3QgY29udGV4dC1mcmVlLCBzdGFuZGFyZCBwYXJzZXJzIGRvbid0IHdvcmsgcGFydGljdWxhcmx5XG4gKiB3ZWxsLlxuICpcbiAqIFRoZSBzdHJhdGVneSBvZiB0aGlzIHBhcnNlciBpcyBhcyBzdWNoOlxuICpcbiAqIFRoZSBtYWluIGZ1bmN0aW9ucyAodGhlIGAucGFyc2UuLi5gIG9uZXMpIHRha2UgYSBwb3NpdGlvbiBpbiB0aGUgY3VycmVudFxuICogcGFyc2Ugc3RyaW5nIHRvIHBhcnNlIHRva2VucyBmcm9tLiBUaGUgbGV4ZXIgKGZvdW5kIGluIExleGVyLmpzLCBzdG9yZWQgYXRcbiAqIHRoaXMuZ3VsbGV0LmxleGVyKSBhbHNvIHN1cHBvcnRzIHB1bGxpbmcgb3V0IHRva2VucyBhdCBhcmJpdHJhcnkgcGxhY2VzLiBXaGVuXG4gKiBpbmRpdmlkdWFsIHRva2VucyBhcmUgbmVlZGVkIGF0IGEgcG9zaXRpb24sIHRoZSBsZXhlciBpcyBjYWxsZWQgdG8gcHVsbCBvdXQgYVxuICogdG9rZW4sIHdoaWNoIGlzIHRoZW4gdXNlZC5cbiAqXG4gKiBUaGUgcGFyc2VyIGhhcyBhIHByb3BlcnR5IGNhbGxlZCBcIm1vZGVcIiBpbmRpY2F0aW5nIHRoZSBtb2RlIHRoYXRcbiAqIHRoZSBwYXJzZXIgaXMgY3VycmVudGx5IGluLiBDdXJyZW50bHkgaXQgaGFzIHRvIGJlIG9uZSBvZiBcIm1hdGhcIiBvclxuICogXCJ0ZXh0XCIsIHdoaWNoIGRlbm90ZXMgd2hldGhlciB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBpcyBhIG1hdGgteVxuICogb25lIG9yIGEgdGV4dC15IG9uZSAoZS5nLiBpbnNpZGUgXFx0ZXh0KS4gQ3VycmVudGx5LCB0aGlzIHNlcnZlcyB0b1xuICogbGltaXQgdGhlIGZ1bmN0aW9ucyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0ZXh0IG1vZGUuXG4gKlxuICogVGhlIG1haW4gZnVuY3Rpb25zIHRoZW4gcmV0dXJuIGFuIG9iamVjdCB3aGljaCBjb250YWlucyB0aGUgdXNlZnVsIGRhdGEgdGhhdFxuICogd2FzIHBhcnNlZCBhdCBpdHMgZ2l2ZW4gcG9pbnQsIGFuZCBhIG5ldyBwb3NpdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBwYXJzZWRcbiAqIGRhdGEuIFRoZSBtYWluIGZ1bmN0aW9ucyBjYW4gY2FsbCBlYWNoIG90aGVyIGFuZCBjb250aW51ZSB0aGUgcGFyc2luZyBieVxuICogdXNpbmcgdGhlIHJldHVybmVkIHBvc2l0aW9uIGFzIGEgbmV3IHN0YXJ0aW5nIHBvaW50LlxuICpcbiAqIFRoZXJlIGFyZSBhbHNvIGV4dHJhIGAuaGFuZGxlLi4uYCBmdW5jdGlvbnMsIHdoaWNoIHB1bGwgb3V0IHNvbWUgcmV1c2VkXG4gKiBmdW5jdGlvbmFsaXR5IGludG8gc2VsZi1jb250YWluZWQgZnVuY3Rpb25zLlxuICpcbiAqIFRoZSBmdW5jdGlvbnMgcmV0dXJuIFBhcnNlTm9kZXMuXG4gKi9cbnZhciBQYXJzZXJfUGFyc2VyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUGFyc2VyKGlucHV0LCBzZXR0aW5ncykge1xuICAgIHRoaXMubW9kZSA9IHZvaWQgMDtcbiAgICB0aGlzLmd1bGxldCA9IHZvaWQgMDtcbiAgICB0aGlzLnNldHRpbmdzID0gdm9pZCAwO1xuICAgIHRoaXMubGVmdHJpZ2h0RGVwdGggPSB2b2lkIDA7XG4gICAgdGhpcy5uZXh0VG9rZW4gPSB2b2lkIDA7XG4gICAgLy8gU3RhcnQgaW4gbWF0aCBtb2RlXG4gICAgdGhpcy5tb2RlID0gXCJtYXRoXCI7IC8vIENyZWF0ZSBhIG5ldyBtYWNybyBleHBhbmRlciAoZ3VsbGV0KSBhbmQgKGluZGlyZWN0bHkgdmlhIHRoYXQpIGFsc28gYVxuICAgIC8vIG5ldyBsZXhlciAobW91dGgpIGZvciB0aGlzIHBhcnNlciAoc3RvbWFjaCwgaW4gdGhlIGxhbmd1YWdlIG9mIFRlWClcblxuICAgIHRoaXMuZ3VsbGV0ID0gbmV3IE1hY3JvRXhwYW5kZXJfTWFjcm9FeHBhbmRlcihpbnB1dCwgc2V0dGluZ3MsIHRoaXMubW9kZSk7IC8vIFN0b3JlIHRoZSBzZXR0aW5ncyBmb3IgdXNlIGluIHBhcnNpbmdcblxuICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5nczsgLy8gQ291bnQgbGVmdHJpZ2h0IGRlcHRoIChmb3IgXFxtaWRkbGUgZXJyb3JzKVxuXG4gICAgdGhpcy5sZWZ0cmlnaHREZXB0aCA9IDA7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrcyBhIHJlc3VsdCB0byBtYWtlIHN1cmUgaXQgaGFzIHRoZSByaWdodCB0eXBlLCBhbmQgdGhyb3dzIGFuXG4gICAqIGFwcHJvcHJpYXRlIGVycm9yIG90aGVyd2lzZS5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gUGFyc2VyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZXhwZWN0ID0gZnVuY3Rpb24gZXhwZWN0KHRleHQsIGNvbnN1bWUpIHtcbiAgICBpZiAoY29uc3VtZSA9PT0gdm9pZCAwKSB7XG4gICAgICBjb25zdW1lID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5uZXh0VG9rZW4udGV4dCAhPT0gdGV4dCkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiRXhwZWN0ZWQgJ1wiICsgdGV4dCArIFwiJywgZ290ICdcIiArIHRoaXMubmV4dFRva2VuLnRleHQgKyBcIidcIiwgdGhpcy5uZXh0VG9rZW4pO1xuICAgIH1cblxuICAgIGlmIChjb25zdW1lKSB7XG4gICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENvbnNpZGVycyB0aGUgY3VycmVudCBsb29rIGFoZWFkIHRva2VuIGFzIGNvbnN1bWVkLFxuICAgKiBhbmQgZmV0Y2hlcyB0aGUgb25lIGFmdGVyIHRoYXQgYXMgdGhlIG5ldyBsb29rIGFoZWFkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jb25zdW1lID0gZnVuY3Rpb24gY29uc3VtZSgpIHtcbiAgICB0aGlzLm5leHRUb2tlbiA9IHRoaXMuZ3VsbGV0LmV4cGFuZE5leHRUb2tlbigpO1xuICB9XG4gIC8qKlxuICAgKiBTd2l0Y2hlcyBiZXR3ZWVuIFwidGV4dFwiIGFuZCBcIm1hdGhcIiBtb2Rlcy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uc3dpdGNoTW9kZSA9IGZ1bmN0aW9uIHN3aXRjaE1vZGUobmV3TW9kZSkge1xuICAgIHRoaXMubW9kZSA9IG5ld01vZGU7XG4gICAgdGhpcy5ndWxsZXQuc3dpdGNoTW9kZShuZXdNb2RlKTtcbiAgfVxuICAvKipcbiAgICogTWFpbiBwYXJzaW5nIGZ1bmN0aW9uLCB3aGljaCBwYXJzZXMgYW4gZW50aXJlIGlucHV0LlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKCkge1xuICAgIC8vIENyZWF0ZSBhIGdyb3VwIG5hbWVzcGFjZSBmb3IgdGhlIG1hdGggZXhwcmVzc2lvbi5cbiAgICAvLyAoTGFUZVggY3JlYXRlcyBhIG5ldyBncm91cCBmb3IgZXZlcnkgJC4uLiQsICQkLi4uJCQsIFxcWy4uLlxcXS4pXG4gICAgdGhpcy5ndWxsZXQuYmVnaW5Hcm91cCgpOyAvLyBVc2Ugb2xkIFxcY29sb3IgYmVoYXZpb3IgKHNhbWUgYXMgTGFUZVgncyBcXHRleHRjb2xvcikgaWYgcmVxdWVzdGVkLlxuICAgIC8vIFdlIGRvIHRoaXMgd2l0aGluIHRoZSBncm91cCBmb3IgdGhlIG1hdGggZXhwcmVzc2lvbiwgc28gaXQgZG9lc24ndFxuICAgIC8vIHBvbGx1dGUgc2V0dGluZ3MubWFjcm9zLlxuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MuY29sb3JJc1RleHRDb2xvcikge1xuICAgICAgdGhpcy5ndWxsZXQubWFjcm9zLnNldChcIlxcXFxjb2xvclwiLCBcIlxcXFx0ZXh0Y29sb3JcIik7XG4gICAgfSAvLyBUcnkgdG8gcGFyc2UgdGhlIGlucHV0XG5cblxuICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIHZhciBwYXJzZSA9IHRoaXMucGFyc2VFeHByZXNzaW9uKGZhbHNlKTsgLy8gSWYgd2Ugc3VjY2VlZGVkLCBtYWtlIHN1cmUgdGhlcmUncyBhbiBFT0YgYXQgdGhlIGVuZFxuXG4gICAgdGhpcy5leHBlY3QoXCJFT0ZcIiwgZmFsc2UpOyAvLyBFbmQgdGhlIGdyb3VwIG5hbWVzcGFjZSBmb3IgdGhlIGV4cHJlc3Npb25cblxuICAgIHRoaXMuZ3VsbGV0LmVuZEdyb3VwKCk7XG4gICAgcmV0dXJuIHBhcnNlO1xuICB9O1xuXG4gIF9wcm90by5wYXJzZUV4cHJlc3Npb24gPSBmdW5jdGlvbiBwYXJzZUV4cHJlc3Npb24oYnJlYWtPbkluZml4LCBicmVha09uVG9rZW5UZXh0KSB7XG4gICAgdmFyIGJvZHkgPSBbXTsgLy8gS2VlcCBhZGRpbmcgYXRvbXMgdG8gdGhlIGJvZHkgdW50aWwgd2UgY2FuJ3QgcGFyc2UgYW55IG1vcmUgYXRvbXMgKGVpdGhlclxuICAgIC8vIHdlIHJlYWNoZWQgdGhlIGVuZCwgYSB9LCBvciBhIFxccmlnaHQpXG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgLy8gSWdub3JlIHNwYWNlcyBpbiBtYXRoIG1vZGVcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09IFwibWF0aFwiKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZVNwYWNlcygpO1xuICAgICAgfVxuXG4gICAgICB2YXIgbGV4ID0gdGhpcy5uZXh0VG9rZW47XG5cbiAgICAgIGlmIChQYXJzZXIuZW5kT2ZFeHByZXNzaW9uLmluZGV4T2YobGV4LnRleHQpICE9PSAtMSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGJyZWFrT25Ub2tlblRleHQgJiYgbGV4LnRleHQgPT09IGJyZWFrT25Ub2tlblRleHQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChicmVha09uSW5maXggJiYgc3JjX2Z1bmN0aW9uc1tsZXgudGV4dF0gJiYgc3JjX2Z1bmN0aW9uc1tsZXgudGV4dF0uaW5maXgpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHZhciBhdG9tID0gdGhpcy5wYXJzZUF0b20oYnJlYWtPblRva2VuVGV4dCk7XG5cbiAgICAgIGlmICghYXRvbSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgYm9keS5wdXNoKGF0b20pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1vZGUgPT09IFwidGV4dFwiKSB7XG4gICAgICB0aGlzLmZvcm1MaWdhdHVyZXMoYm9keSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlSW5maXhOb2Rlcyhib2R5KTtcbiAgfVxuICAvKipcbiAgICogUmV3cml0ZXMgaW5maXggb3BlcmF0b3JzIHN1Y2ggYXMgXFxvdmVyIHdpdGggY29ycmVzcG9uZGluZyBjb21tYW5kcyBzdWNoXG4gICAqIGFzIFxcZnJhYy5cbiAgICpcbiAgICogVGhlcmUgY2FuIG9ubHkgYmUgb25lIGluZml4IG9wZXJhdG9yIHBlciBncm91cC4gIElmIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZVxuICAgKiB0aGVuIHRoZSBleHByZXNzaW9uIGlzIGFtYmlndW91cy4gIFRoaXMgY2FuIGJlIHJlc29sdmVkIGJ5IGFkZGluZyB7fS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlSW5maXhOb2RlcyA9IGZ1bmN0aW9uIGhhbmRsZUluZml4Tm9kZXMoYm9keSkge1xuICAgIHZhciBvdmVySW5kZXggPSAtMTtcbiAgICB2YXIgZnVuY05hbWU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvZHkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBub2RlID0gY2hlY2tOb2RlVHlwZShib2R5W2ldLCBcImluZml4XCIpO1xuXG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICBpZiAob3ZlckluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIm9ubHkgb25lIGluZml4IG9wZXJhdG9yIHBlciBncm91cFwiLCBub2RlLnRva2VuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG92ZXJJbmRleCA9IGk7XG4gICAgICAgIGZ1bmNOYW1lID0gbm9kZS5yZXBsYWNlV2l0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3ZlckluZGV4ICE9PSAtMSAmJiBmdW5jTmFtZSkge1xuICAgICAgdmFyIG51bWVyTm9kZTtcbiAgICAgIHZhciBkZW5vbU5vZGU7XG4gICAgICB2YXIgbnVtZXJCb2R5ID0gYm9keS5zbGljZSgwLCBvdmVySW5kZXgpO1xuICAgICAgdmFyIGRlbm9tQm9keSA9IGJvZHkuc2xpY2Uob3ZlckluZGV4ICsgMSk7XG5cbiAgICAgIGlmIChudW1lckJvZHkubGVuZ3RoID09PSAxICYmIG51bWVyQm9keVswXS50eXBlID09PSBcIm9yZGdyb3VwXCIpIHtcbiAgICAgICAgbnVtZXJOb2RlID0gbnVtZXJCb2R5WzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbnVtZXJOb2RlID0ge1xuICAgICAgICAgIHR5cGU6IFwib3JkZ3JvdXBcIixcbiAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgYm9keTogbnVtZXJCb2R5XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChkZW5vbUJvZHkubGVuZ3RoID09PSAxICYmIGRlbm9tQm9keVswXS50eXBlID09PSBcIm9yZGdyb3VwXCIpIHtcbiAgICAgICAgZGVub21Ob2RlID0gZGVub21Cb2R5WzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVub21Ob2RlID0ge1xuICAgICAgICAgIHR5cGU6IFwib3JkZ3JvdXBcIixcbiAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgYm9keTogZGVub21Cb2R5XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciBfbm9kZTtcblxuICAgICAgaWYgKGZ1bmNOYW1lID09PSBcIlxcXFxcXFxcYWJvdmVmcmFjXCIpIHtcbiAgICAgICAgX25vZGUgPSB0aGlzLmNhbGxGdW5jdGlvbihmdW5jTmFtZSwgW251bWVyTm9kZSwgYm9keVtvdmVySW5kZXhdLCBkZW5vbU5vZGVdLCBbXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfbm9kZSA9IHRoaXMuY2FsbEZ1bmN0aW9uKGZ1bmNOYW1lLCBbbnVtZXJOb2RlLCBkZW5vbU5vZGVdLCBbXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbX25vZGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYm9keTtcbiAgICB9XG4gIH0gLy8gVGhlIGdyZWVkaW5lc3Mgb2YgYSBzdXBlcnNjcmlwdCBvciBzdWJzY3JpcHRcbiAgO1xuXG4gIC8qKlxuICAgKiBIYW5kbGUgYSBzdWJzY3JpcHQgb3Igc3VwZXJzY3JpcHQgd2l0aCBuaWNlIGVycm9ycy5cbiAgICovXG4gIF9wcm90by5oYW5kbGVTdXBTdWJzY3JpcHQgPSBmdW5jdGlvbiBoYW5kbGVTdXBTdWJzY3JpcHQobmFtZSkge1xuICAgIHZhciBzeW1ib2xUb2tlbiA9IHRoaXMubmV4dFRva2VuO1xuICAgIHZhciBzeW1ib2wgPSBzeW1ib2xUb2tlbi50ZXh0O1xuICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIHRoaXMuY29uc3VtZVNwYWNlcygpOyAvLyBpZ25vcmUgc3BhY2VzIGJlZm9yZSBzdXAvc3Vic2NyaXB0IGFyZ3VtZW50XG5cbiAgICB2YXIgZ3JvdXAgPSB0aGlzLnBhcnNlR3JvdXAobmFtZSwgZmFsc2UsIFBhcnNlci5TVVBTVUJfR1JFRURJTkVTUyk7XG5cbiAgICBpZiAoIWdyb3VwKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJFeHBlY3RlZCBncm91cCBhZnRlciAnXCIgKyBzeW1ib2wgKyBcIidcIiwgc3ltYm9sVG9rZW4pO1xuICAgIH1cblxuICAgIHJldHVybiBncm91cDtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIHRleHR1YWwgaW5wdXQgb2YgYW4gdW5zdXBwb3J0ZWQgY29tbWFuZCBpbnRvIGEgdGV4dCBub2RlXG4gICAqIGNvbnRhaW5lZCB3aXRoaW4gYSBjb2xvciBub2RlIHdob3NlIGNvbG9yIGlzIGRldGVybWluZWQgYnkgZXJyb3JDb2xvclxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5mb3JtYXRVbnN1cHBvcnRlZENtZCA9IGZ1bmN0aW9uIGZvcm1hdFVuc3VwcG9ydGVkQ21kKHRleHQpIHtcbiAgICB2YXIgdGV4dG9yZEFycmF5ID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRleHRvcmRBcnJheS5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICB0ZXh0OiB0ZXh0W2ldXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgdGV4dE5vZGUgPSB7XG4gICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIGJvZHk6IHRleHRvcmRBcnJheVxuICAgIH07XG4gICAgdmFyIGNvbG9yTm9kZSA9IHtcbiAgICAgIHR5cGU6IFwiY29sb3JcIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIGNvbG9yOiB0aGlzLnNldHRpbmdzLmVycm9yQ29sb3IsXG4gICAgICBib2R5OiBbdGV4dE5vZGVdXG4gICAgfTtcbiAgICByZXR1cm4gY29sb3JOb2RlO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgYSBncm91cCB3aXRoIG9wdGlvbmFsIHN1cGVyL3N1YnNjcmlwdHMuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnBhcnNlQXRvbSA9IGZ1bmN0aW9uIHBhcnNlQXRvbShicmVha09uVG9rZW5UZXh0KSB7XG4gICAgLy8gVGhlIGJvZHkgb2YgYW4gYXRvbSBpcyBhbiBpbXBsaWNpdCBncm91cCwgc28gdGhhdCB0aGluZ3MgbGlrZVxuICAgIC8vIFxcbGVmdCh4XFxyaWdodCleMiB3b3JrIGNvcnJlY3RseS5cbiAgICB2YXIgYmFzZSA9IHRoaXMucGFyc2VHcm91cChcImF0b21cIiwgZmFsc2UsIG51bGwsIGJyZWFrT25Ub2tlblRleHQpOyAvLyBJbiB0ZXh0IG1vZGUsIHdlIGRvbid0IGhhdmUgc3VwZXJzY3JpcHRzIG9yIHN1YnNjcmlwdHNcblxuICAgIGlmICh0aGlzLm1vZGUgPT09IFwidGV4dFwiKSB7XG4gICAgICByZXR1cm4gYmFzZTtcbiAgICB9IC8vIE5vdGUgdGhhdCBiYXNlIG1heSBiZSBlbXB0eSAoaS5lLiBudWxsKSBhdCB0aGlzIHBvaW50LlxuXG5cbiAgICB2YXIgc3VwZXJzY3JpcHQ7XG4gICAgdmFyIHN1YnNjcmlwdDtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAvLyBHdWFyYW50ZWVkIGluIG1hdGggbW9kZSwgc28gZWF0IGFueSBzcGFjZXMgZmlyc3QuXG4gICAgICB0aGlzLmNvbnN1bWVTcGFjZXMoKTsgLy8gTGV4IHRoZSBmaXJzdCB0b2tlblxuXG4gICAgICB2YXIgbGV4ID0gdGhpcy5uZXh0VG9rZW47XG5cbiAgICAgIGlmIChsZXgudGV4dCA9PT0gXCJcXFxcbGltaXRzXCIgfHwgbGV4LnRleHQgPT09IFwiXFxcXG5vbGltaXRzXCIpIHtcbiAgICAgICAgLy8gV2UgZ290IGEgbGltaXQgY29udHJvbFxuICAgICAgICB2YXIgb3BOb2RlID0gY2hlY2tOb2RlVHlwZShiYXNlLCBcIm9wXCIpO1xuXG4gICAgICAgIGlmIChvcE5vZGUpIHtcbiAgICAgICAgICB2YXIgbGltaXRzID0gbGV4LnRleHQgPT09IFwiXFxcXGxpbWl0c1wiO1xuICAgICAgICAgIG9wTm9kZS5saW1pdHMgPSBsaW1pdHM7XG4gICAgICAgICAgb3BOb2RlLmFsd2F5c0hhbmRsZVN1cFN1YiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3BOb2RlID0gY2hlY2tOb2RlVHlwZShiYXNlLCBcIm9wZXJhdG9ybmFtZVwiKTtcblxuICAgICAgICAgIGlmIChvcE5vZGUgJiYgb3BOb2RlLmFsd2F5c0hhbmRsZVN1cFN1Yikge1xuICAgICAgICAgICAgdmFyIF9saW1pdHMgPSBsZXgudGV4dCA9PT0gXCJcXFxcbGltaXRzXCI7XG5cbiAgICAgICAgICAgIG9wTm9kZS5saW1pdHMgPSBfbGltaXRzO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJMaW1pdCBjb250cm9scyBtdXN0IGZvbGxvdyBhIG1hdGggb3BlcmF0b3JcIiwgbGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgIH0gZWxzZSBpZiAobGV4LnRleHQgPT09IFwiXlwiKSB7XG4gICAgICAgIC8vIFdlIGdvdCBhIHN1cGVyc2NyaXB0IHN0YXJ0XG4gICAgICAgIGlmIChzdXBlcnNjcmlwdCkge1xuICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkRvdWJsZSBzdXBlcnNjcmlwdFwiLCBsZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXJzY3JpcHQgPSB0aGlzLmhhbmRsZVN1cFN1YnNjcmlwdChcInN1cGVyc2NyaXB0XCIpO1xuICAgICAgfSBlbHNlIGlmIChsZXgudGV4dCA9PT0gXCJfXCIpIHtcbiAgICAgICAgLy8gV2UgZ290IGEgc3Vic2NyaXB0IHN0YXJ0XG4gICAgICAgIGlmIChzdWJzY3JpcHQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJEb3VibGUgc3Vic2NyaXB0XCIsIGxleCk7XG4gICAgICAgIH1cblxuICAgICAgICBzdWJzY3JpcHQgPSB0aGlzLmhhbmRsZVN1cFN1YnNjcmlwdChcInN1YnNjcmlwdFwiKTtcbiAgICAgIH0gZWxzZSBpZiAobGV4LnRleHQgPT09IFwiJ1wiKSB7XG4gICAgICAgIC8vIFdlIGdvdCBhIHByaW1lXG4gICAgICAgIGlmIChzdXBlcnNjcmlwdCkge1xuICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkRvdWJsZSBzdXBlcnNjcmlwdFwiLCBsZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHByaW1lID0ge1xuICAgICAgICAgIHR5cGU6IFwidGV4dG9yZFwiLFxuICAgICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgICB0ZXh0OiBcIlxcXFxwcmltZVwiXG4gICAgICAgIH07IC8vIE1hbnkgcHJpbWVzIGNhbiBiZSBncm91cGVkIHRvZ2V0aGVyLCBzbyB3ZSBoYW5kbGUgdGhpcyBoZXJlXG5cbiAgICAgICAgdmFyIHByaW1lcyA9IFtwcmltZV07XG4gICAgICAgIHRoaXMuY29uc3VtZSgpOyAvLyBLZWVwIGxleGluZyB0b2tlbnMgdW50aWwgd2UgZ2V0IHNvbWV0aGluZyB0aGF0J3Mgbm90IGEgcHJpbWVcblxuICAgICAgICB3aGlsZSAodGhpcy5uZXh0VG9rZW4udGV4dCA9PT0gXCInXCIpIHtcbiAgICAgICAgICAvLyBGb3IgZWFjaCBvbmUsIGFkZCBhbm90aGVyIHByaW1lIHRvIHRoZSBsaXN0XG4gICAgICAgICAgcHJpbWVzLnB1c2gocHJpbWUpO1xuICAgICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICB9IC8vIElmIHRoZXJlJ3MgYSBzdXBlcnNjcmlwdCBmb2xsb3dpbmcgdGhlIHByaW1lcywgY29tYmluZSB0aGF0XG4gICAgICAgIC8vIHN1cGVyc2NyaXB0IGluIHdpdGggdGhlIHByaW1lcy5cblxuXG4gICAgICAgIGlmICh0aGlzLm5leHRUb2tlbi50ZXh0ID09PSBcIl5cIikge1xuICAgICAgICAgIHByaW1lcy5wdXNoKHRoaXMuaGFuZGxlU3VwU3Vic2NyaXB0KFwic3VwZXJzY3JpcHRcIikpO1xuICAgICAgICB9IC8vIFB1dCBldmVyeXRoaW5nIGludG8gYW4gb3JkZ3JvdXAgYXMgdGhlIHN1cGVyc2NyaXB0XG5cblxuICAgICAgICBzdXBlcnNjcmlwdCA9IHtcbiAgICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgICAgIGJvZHk6IHByaW1lc1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgaXQgd2Fzbid0IF4sIF8sIG9yICcsIHN0b3AgcGFyc2luZyBzdXBlci9zdWJzY3JpcHRzXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gLy8gQmFzZSBtdXN0IGJlIHNldCBpZiBzdXBlcnNjcmlwdCBvciBzdWJzY3JpcHQgYXJlIHNldCBwZXIgbG9naWMgYWJvdmUsXG4gICAgLy8gYnV0IG5lZWQgdG8gY2hlY2sgaGVyZSBmb3IgdHlwZSBjaGVjayB0byBwYXNzLlxuXG5cbiAgICBpZiAoc3VwZXJzY3JpcHQgfHwgc3Vic2NyaXB0KSB7XG4gICAgICAvLyBJZiB3ZSBnb3QgZWl0aGVyIGEgc3VwZXJzY3JpcHQgb3Igc3Vic2NyaXB0LCBjcmVhdGUgYSBzdXBzdWJcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwic3Vwc3ViXCIsXG4gICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgYmFzZTogYmFzZSxcbiAgICAgICAgc3VwOiBzdXBlcnNjcmlwdCxcbiAgICAgICAgc3ViOiBzdWJzY3JpcHRcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyd2lzZSByZXR1cm4gdGhlIG9yaWdpbmFsIGJvZHlcbiAgICAgIHJldHVybiBiYXNlO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGFuIGVudGlyZSBmdW5jdGlvbiwgaW5jbHVkaW5nIGl0cyBiYXNlIGFuZCBhbGwgb2YgaXRzIGFyZ3VtZW50cy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ucGFyc2VGdW5jdGlvbiA9IGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb24oYnJlYWtPblRva2VuVGV4dCwgbmFtZSwgLy8gRm9yIGVycm9yIHJlcG9ydGluZy5cbiAgZ3JlZWRpbmVzcykge1xuICAgIHZhciB0b2tlbiA9IHRoaXMubmV4dFRva2VuO1xuICAgIHZhciBmdW5jID0gdG9rZW4udGV4dDtcbiAgICB2YXIgZnVuY0RhdGEgPSBzcmNfZnVuY3Rpb25zW2Z1bmNdO1xuXG4gICAgaWYgKCFmdW5jRGF0YSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGdyZWVkaW5lc3MgIT0gbnVsbCAmJiBmdW5jRGF0YS5ncmVlZGluZXNzIDw9IGdyZWVkaW5lc3MpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkdvdCBmdW5jdGlvbiAnXCIgKyBmdW5jICsgXCInIHdpdGggbm8gYXJndW1lbnRzXCIgKyAobmFtZSA/IFwiIGFzIFwiICsgbmFtZSA6IFwiXCIpLCB0b2tlbik7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09IFwidGV4dFwiICYmICFmdW5jRGF0YS5hbGxvd2VkSW5UZXh0KSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJDYW4ndCB1c2UgZnVuY3Rpb24gJ1wiICsgZnVuYyArIFwiJyBpbiB0ZXh0IG1vZGVcIiwgdG9rZW4pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSBcIm1hdGhcIiAmJiBmdW5jRGF0YS5hbGxvd2VkSW5NYXRoID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiQ2FuJ3QgdXNlIGZ1bmN0aW9uICdcIiArIGZ1bmMgKyBcIicgaW4gbWF0aCBtb2RlXCIsIHRva2VuKTtcbiAgICB9IC8vIGh5cGVycmVmIHBhY2thZ2Ugc2V0cyB0aGUgY2F0Y29kZSBvZiAlIGFzIGFuIGFjdGl2ZSBjaGFyYWN0ZXJcblxuXG4gICAgaWYgKGZ1bmNEYXRhLmFyZ1R5cGVzICYmIGZ1bmNEYXRhLmFyZ1R5cGVzWzBdID09PSBcInVybFwiKSB7XG4gICAgICB0aGlzLmd1bGxldC5sZXhlci5zZXRDYXRjb2RlKFwiJVwiLCAxMyk7XG4gICAgfSAvLyBDb25zdW1lIHRoZSBjb21tYW5kIHRva2VuIGFmdGVyIHBvc3NpYmx5IHN3aXRjaGluZyB0byB0aGVcbiAgICAvLyBtb2RlIHNwZWNpZmllZCBieSB0aGUgZnVuY3Rpb24gKGZvciBpbnN0YW50IG1vZGUgc3dpdGNoaW5nKSxcbiAgICAvLyBhbmQgdGhlbiBpbW1lZGlhdGVseSBzd2l0Y2ggYmFjay5cblxuXG4gICAgaWYgKGZ1bmNEYXRhLmNvbnN1bWVNb2RlKSB7XG4gICAgICB2YXIgb2xkTW9kZSA9IHRoaXMubW9kZTtcbiAgICAgIHRoaXMuc3dpdGNoTW9kZShmdW5jRGF0YS5jb25zdW1lTW9kZSk7XG4gICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgIHRoaXMuc3dpdGNoTW9kZShvbGRNb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgfVxuXG4gICAgdmFyIF90aGlzJHBhcnNlQXJndW1lbnRzID0gdGhpcy5wYXJzZUFyZ3VtZW50cyhmdW5jLCBmdW5jRGF0YSksXG4gICAgICAgIGFyZ3MgPSBfdGhpcyRwYXJzZUFyZ3VtZW50cy5hcmdzLFxuICAgICAgICBvcHRBcmdzID0gX3RoaXMkcGFyc2VBcmd1bWVudHMub3B0QXJncztcblxuICAgIHJldHVybiB0aGlzLmNhbGxGdW5jdGlvbihmdW5jLCBhcmdzLCBvcHRBcmdzLCB0b2tlbiwgYnJlYWtPblRva2VuVGV4dCk7XG4gIH1cbiAgLyoqXG4gICAqIENhbGwgYSBmdW5jdGlvbiBoYW5kbGVyIHdpdGggYSBzdWl0YWJsZSBjb250ZXh0IGFuZCBhcmd1bWVudHMuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmNhbGxGdW5jdGlvbiA9IGZ1bmN0aW9uIGNhbGxGdW5jdGlvbihuYW1lLCBhcmdzLCBvcHRBcmdzLCB0b2tlbiwgYnJlYWtPblRva2VuVGV4dCkge1xuICAgIHZhciBjb250ZXh0ID0ge1xuICAgICAgZnVuY05hbWU6IG5hbWUsXG4gICAgICBwYXJzZXI6IHRoaXMsXG4gICAgICB0b2tlbjogdG9rZW4sXG4gICAgICBicmVha09uVG9rZW5UZXh0OiBicmVha09uVG9rZW5UZXh0XG4gICAgfTtcbiAgICB2YXIgZnVuYyA9IHNyY19mdW5jdGlvbnNbbmFtZV07XG5cbiAgICBpZiAoZnVuYyAmJiBmdW5jLmhhbmRsZXIpIHtcbiAgICAgIHJldHVybiBmdW5jLmhhbmRsZXIoY29udGV4dCwgYXJncywgb3B0QXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIk5vIGZ1bmN0aW9uIGhhbmRsZXIgZm9yIFwiICsgbmFtZSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgdGhlIGFyZ3VtZW50cyBvZiBhIGZ1bmN0aW9uIG9yIGVudmlyb25tZW50XG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnBhcnNlQXJndW1lbnRzID0gZnVuY3Rpb24gcGFyc2VBcmd1bWVudHMoZnVuYywgLy8gU2hvdWxkIGxvb2sgbGlrZSBcIlxcbmFtZVwiIG9yIFwiXFxiZWdpbntuYW1lfVwiLlxuICBmdW5jRGF0YSkge1xuICAgIHZhciB0b3RhbEFyZ3MgPSBmdW5jRGF0YS5udW1BcmdzICsgZnVuY0RhdGEubnVtT3B0aW9uYWxBcmdzO1xuXG4gICAgaWYgKHRvdGFsQXJncyA9PT0gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYXJnczogW10sXG4gICAgICAgIG9wdEFyZ3M6IFtdXG4gICAgICB9O1xuICAgIH1cblxuICAgIHZhciBiYXNlR3JlZWRpbmVzcyA9IGZ1bmNEYXRhLmdyZWVkaW5lc3M7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgb3B0QXJncyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEFyZ3M7IGkrKykge1xuICAgICAgdmFyIGFyZ1R5cGUgPSBmdW5jRGF0YS5hcmdUeXBlcyAmJiBmdW5jRGF0YS5hcmdUeXBlc1tpXTtcbiAgICAgIHZhciBpc09wdGlvbmFsID0gaSA8IGZ1bmNEYXRhLm51bU9wdGlvbmFsQXJnczsgLy8gSWdub3JlIHNwYWNlcyBiZXR3ZWVuIGFyZ3VtZW50cy4gIEFzIHRoZSBUZVhib29rIHNheXM6XG4gICAgICAvLyBcIkFmdGVyIHlvdSBoYXZlIHNhaWQg4oCYXFxkZWZcXHJvdyMxIzJ7Li4ufeKAmSwgeW91IGFyZSBhbGxvd2VkIHRvXG4gICAgICAvLyAgcHV0IHNwYWNlcyBiZXR3ZWVuIHRoZSBhcmd1bWVudHMgKGUuZy4sIOKAmFxccm93IHggbuKAmSksIGJlY2F1c2VcbiAgICAgIC8vICBUZVggZG9lc27igJl0IHVzZSBzaW5nbGUgc3BhY2VzIGFzIHVuZGVsaW1pdGVkIGFyZ3VtZW50cy5cIlxuXG4gICAgICBpZiAoaSA+IDAgJiYgIWlzT3B0aW9uYWwpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lU3BhY2VzKCk7XG4gICAgICB9IC8vIEFsc28gY29uc3VtZSBsZWFkaW5nIHNwYWNlcyBpbiBtYXRoIG1vZGUsIGFzIHBhcnNlU3ltYm9sXG4gICAgICAvLyB3b24ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCB0aGVtLiAgVGhpcyBjYW4gb25seSBoYXBwZW4gd2l0aFxuICAgICAgLy8gbWFjcm9zLCBlLmcuIFxcZnJhY1xcZm9vXFxmb28gd2hlcmUgXFxmb28gZXhwYW5kcyB0byBhIHNwYWNlIHN5bWJvbC5cbiAgICAgIC8vIEluIExhVGVYLCB0aGUgXFxmb28ncyBnZXQgdHJlYXRlZCBhcyAoYmxhbmspIGFyZ3VtZW50cykuXG4gICAgICAvLyBJbiBLYVRlWCwgZm9yIG5vdywgYm90aCBzcGFjZXMgd2lsbCBnZXQgY29uc3VtZWQuXG4gICAgICAvLyBUT0RPKGVkZW1haW5lKVxuXG5cbiAgICAgIGlmIChpID09PSAwICYmICFpc09wdGlvbmFsICYmIHRoaXMubW9kZSA9PT0gXCJtYXRoXCIpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lU3BhY2VzKCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXh0VG9rZW4gPSB0aGlzLm5leHRUb2tlbjtcbiAgICAgIHZhciBhcmcgPSB0aGlzLnBhcnNlR3JvdXBPZlR5cGUoXCJhcmd1bWVudCB0byAnXCIgKyBmdW5jICsgXCInXCIsIGFyZ1R5cGUsIGlzT3B0aW9uYWwsIGJhc2VHcmVlZGluZXNzKTtcblxuICAgICAgaWYgKCFhcmcpIHtcbiAgICAgICAgaWYgKGlzT3B0aW9uYWwpIHtcbiAgICAgICAgICBvcHRBcmdzLnB1c2gobnVsbCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJFeHBlY3RlZCBncm91cCBhZnRlciAnXCIgKyBmdW5jICsgXCInXCIsIG5leHRUb2tlbik7XG4gICAgICB9XG5cbiAgICAgIChpc09wdGlvbmFsID8gb3B0QXJncyA6IGFyZ3MpLnB1c2goYXJnKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYXJnczogYXJncyxcbiAgICAgIG9wdEFyZ3M6IG9wdEFyZ3NcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgYSBncm91cCB3aGVuIHRoZSBtb2RlIGlzIGNoYW5naW5nLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5wYXJzZUdyb3VwT2ZUeXBlID0gZnVuY3Rpb24gcGFyc2VHcm91cE9mVHlwZShuYW1lLCB0eXBlLCBvcHRpb25hbCwgZ3JlZWRpbmVzcykge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcImNvbG9yXCI6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlQ29sb3JHcm91cChvcHRpb25hbCk7XG5cbiAgICAgIGNhc2UgXCJzaXplXCI6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlU2l6ZUdyb3VwKG9wdGlvbmFsKTtcblxuICAgICAgY2FzZSBcInVybFwiOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVVybEdyb3VwKG9wdGlvbmFsKTtcblxuICAgICAgY2FzZSBcIm1hdGhcIjpcbiAgICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlR3JvdXAobmFtZSwgb3B0aW9uYWwsIGdyZWVkaW5lc3MsIHVuZGVmaW5lZCwgdHlwZSk7XG5cbiAgICAgIGNhc2UgXCJoYm94XCI6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBoYm94IGFyZ3VtZW50IHR5cGUgd3JhcHMgdGhlIGFyZ3VtZW50IGluIHRoZSBlcXVpdmFsZW50IG9mXG4gICAgICAgICAgLy8gXFxoYm94LCB3aGljaCBpcyBsaWtlIFxcdGV4dCBidXQgc3dpdGNoaW5nIHRvIFxcdGV4dHN0eWxlIHNpemUuXG4gICAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5wYXJzZUdyb3VwKG5hbWUsIG9wdGlvbmFsLCBncmVlZGluZXNzLCB1bmRlZmluZWQsIFwidGV4dFwiKTtcblxuICAgICAgICAgIGlmICghZ3JvdXApIHtcbiAgICAgICAgICAgIHJldHVybiBncm91cDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc3R5bGVkR3JvdXAgPSB7XG4gICAgICAgICAgICB0eXBlOiBcInN0eWxpbmdcIixcbiAgICAgICAgICAgIG1vZGU6IGdyb3VwLm1vZGUsXG4gICAgICAgICAgICBib2R5OiBbZ3JvdXBdLFxuICAgICAgICAgICAgc3R5bGU6IFwidGV4dFwiIC8vIHNpbXVsYXRlIFxcdGV4dHN0eWxlXG5cbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBzdHlsZWRHcm91cDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFwicmF3XCI6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAob3B0aW9uYWwgJiYgdGhpcy5uZXh0VG9rZW4udGV4dCA9PT0gXCJ7XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMucGFyc2VTdHJpbmdHcm91cChcInJhd1wiLCBvcHRpb25hbCwgdHJ1ZSk7XG5cbiAgICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwicmF3XCIsXG4gICAgICAgICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICBzdHJpbmc6IHRva2VuLnRleHRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkV4cGVjdGVkIHJhdyBncm91cFwiLCB0aGlzLm5leHRUb2tlbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgXCJvcmlnaW5hbFwiOlxuICAgICAgY2FzZSBudWxsOlxuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlR3JvdXAobmFtZSwgb3B0aW9uYWwsIGdyZWVkaW5lc3MpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJVbmtub3duIGdyb3VwIHR5cGUgYXMgXCIgKyBuYW1lLCB0aGlzLm5leHRUb2tlbik7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jb25zdW1lU3BhY2VzID0gZnVuY3Rpb24gY29uc3VtZVNwYWNlcygpIHtcbiAgICB3aGlsZSAodGhpcy5uZXh0VG9rZW4udGV4dCA9PT0gXCIgXCIpIHtcbiAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGEgZ3JvdXAsIGVzc2VudGlhbGx5IHJldHVybmluZyB0aGUgc3RyaW5nIGZvcm1lZCBieSB0aGVcbiAgICogYnJhY2UtZW5jbG9zZWQgdG9rZW5zIHBsdXMgc29tZSBwb3NpdGlvbiBpbmZvcm1hdGlvbi5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ucGFyc2VTdHJpbmdHcm91cCA9IGZ1bmN0aW9uIHBhcnNlU3RyaW5nR3JvdXAobW9kZU5hbWUsIC8vIFVzZWQgdG8gZGVzY3JpYmUgdGhlIG1vZGUgaW4gZXJyb3IgbWVzc2FnZXMuXG4gIG9wdGlvbmFsLCByYXcpIHtcbiAgICB2YXIgZ3JvdXBCZWdpbiA9IG9wdGlvbmFsID8gXCJbXCIgOiBcIntcIjtcbiAgICB2YXIgZ3JvdXBFbmQgPSBvcHRpb25hbCA/IFwiXVwiIDogXCJ9XCI7XG4gICAgdmFyIG5leHRUb2tlbiA9IHRoaXMubmV4dFRva2VuO1xuXG4gICAgaWYgKG5leHRUb2tlbi50ZXh0ICE9PSBncm91cEJlZ2luKSB7XG4gICAgICBpZiAob3B0aW9uYWwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHJhdyAmJiBuZXh0VG9rZW4udGV4dCAhPT0gXCJFT0ZcIiAmJiAvW157fVtcXF1dLy50ZXN0KG5leHRUb2tlbi50ZXh0KSkge1xuICAgICAgICAvLyBhbGxvdyBhIHNpbmdsZSBjaGFyYWN0ZXIgaW4gcmF3IHN0cmluZyBncm91cFxuICAgICAgICB0aGlzLmd1bGxldC5sZXhlci5zZXRDYXRjb2RlKFwiJVwiLCAxNCk7IC8vIHJlc2V0IHRoZSBjYXRjb2RlIG9mICVcblxuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgcmV0dXJuIG5leHRUb2tlbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgb3V0ZXJNb2RlID0gdGhpcy5tb2RlO1xuICAgIHRoaXMubW9kZSA9IFwidGV4dFwiO1xuICAgIHRoaXMuZXhwZWN0KGdyb3VwQmVnaW4pO1xuICAgIHZhciBzdHIgPSBcIlwiO1xuICAgIHZhciBmaXJzdFRva2VuID0gdGhpcy5uZXh0VG9rZW47XG4gICAgdmFyIG5lc3RlZCA9IDA7IC8vIGFsbG93IG5lc3RlZCBicmFjZXMgaW4gcmF3IHN0cmluZyBncm91cFxuXG4gICAgdmFyIGxhc3RUb2tlbiA9IGZpcnN0VG9rZW47XG5cbiAgICB3aGlsZSAocmF3ICYmIG5lc3RlZCA+IDAgfHwgdGhpcy5uZXh0VG9rZW4udGV4dCAhPT0gZ3JvdXBFbmQpIHtcbiAgICAgIHN3aXRjaCAodGhpcy5uZXh0VG9rZW4udGV4dCkge1xuICAgICAgICBjYXNlIFwiRU9GXCI6XG4gICAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgaW4gXCIgKyBtb2RlTmFtZSwgZmlyc3RUb2tlbi5yYW5nZShsYXN0VG9rZW4sIHN0cikpO1xuXG4gICAgICAgIGNhc2UgZ3JvdXBCZWdpbjpcbiAgICAgICAgICBuZXN0ZWQrKztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIGdyb3VwRW5kOlxuICAgICAgICAgIG5lc3RlZC0tO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBsYXN0VG9rZW4gPSB0aGlzLm5leHRUb2tlbjtcbiAgICAgIHN0ciArPSBsYXN0VG9rZW4udGV4dDtcbiAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIH1cblxuICAgIHRoaXMubW9kZSA9IG91dGVyTW9kZTtcbiAgICB0aGlzLmd1bGxldC5sZXhlci5zZXRDYXRjb2RlKFwiJVwiLCAxNCk7IC8vIHJlc2V0IHRoZSBjYXRjb2RlIG9mICVcblxuICAgIHRoaXMuZXhwZWN0KGdyb3VwRW5kKTtcbiAgICByZXR1cm4gZmlyc3RUb2tlbi5yYW5nZShsYXN0VG9rZW4sIHN0cik7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhIHJlZ2V4LWRlbGltaXRlZCBncm91cDogdGhlIGxhcmdlc3Qgc2VxdWVuY2Ugb2YgdG9rZW5zXG4gICAqIHdob3NlIGNvbmNhdGVuYXRlZCBzdHJpbmdzIG1hdGNoIGByZWdleGAuIFJldHVybnMgdGhlIHN0cmluZ1xuICAgKiBmb3JtZWQgYnkgdGhlIHRva2VucyBwbHVzIHNvbWUgcG9zaXRpb24gaW5mb3JtYXRpb24uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnBhcnNlUmVnZXhHcm91cCA9IGZ1bmN0aW9uIHBhcnNlUmVnZXhHcm91cChyZWdleCwgbW9kZU5hbWUpIHtcbiAgICB2YXIgb3V0ZXJNb2RlID0gdGhpcy5tb2RlO1xuICAgIHRoaXMubW9kZSA9IFwidGV4dFwiO1xuICAgIHZhciBmaXJzdFRva2VuID0gdGhpcy5uZXh0VG9rZW47XG4gICAgdmFyIGxhc3RUb2tlbiA9IGZpcnN0VG9rZW47XG4gICAgdmFyIHN0ciA9IFwiXCI7XG5cbiAgICB3aGlsZSAodGhpcy5uZXh0VG9rZW4udGV4dCAhPT0gXCJFT0ZcIiAmJiByZWdleC50ZXN0KHN0ciArIHRoaXMubmV4dFRva2VuLnRleHQpKSB7XG4gICAgICBsYXN0VG9rZW4gPSB0aGlzLm5leHRUb2tlbjtcbiAgICAgIHN0ciArPSBsYXN0VG9rZW4udGV4dDtcbiAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIH1cblxuICAgIGlmIChzdHIgPT09IFwiXCIpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgXCIgKyBtb2RlTmFtZSArIFwiOiAnXCIgKyBmaXJzdFRva2VuLnRleHQgKyBcIidcIiwgZmlyc3RUb2tlbik7XG4gICAgfVxuXG4gICAgdGhpcy5tb2RlID0gb3V0ZXJNb2RlO1xuICAgIHJldHVybiBmaXJzdFRva2VuLnJhbmdlKGxhc3RUb2tlbiwgc3RyKTtcbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGEgY29sb3IgZGVzY3JpcHRpb24uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnBhcnNlQ29sb3JHcm91cCA9IGZ1bmN0aW9uIHBhcnNlQ29sb3JHcm91cChvcHRpb25hbCkge1xuICAgIHZhciByZXMgPSB0aGlzLnBhcnNlU3RyaW5nR3JvdXAoXCJjb2xvclwiLCBvcHRpb25hbCk7XG5cbiAgICBpZiAoIXJlcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIG1hdGNoID0gL14oI1thLWYwLTldezN9fCM/W2EtZjAtOV17Nn18W2Etel0rKSQvaS5leGVjKHJlcy50ZXh0KTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgY29sb3I6ICdcIiArIHJlcy50ZXh0ICsgXCInXCIsIHJlcyk7XG4gICAgfVxuXG4gICAgdmFyIGNvbG9yID0gbWF0Y2hbMF07XG5cbiAgICBpZiAoL15bMC05YS1mXXs2fSQvaS50ZXN0KGNvbG9yKSkge1xuICAgICAgLy8gV2UgYWxsb3cgYSA2LWRpZ2l0IEhUTUwgY29sb3Igc3BlYyB3aXRob3V0IGEgbGVhZGluZyBcIiNcIi5cbiAgICAgIC8vIFRoaXMgZm9sbG93cyB0aGUgeGNvbG9yIHBhY2thZ2UncyBIVE1MIGNvbG9yIG1vZGVsLlxuICAgICAgLy8gUHJlZGVmaW5lZCBjb2xvciBuYW1lcyBhcmUgYWxsIG1pc3NlZCBieSB0aGlzIFJlZ0V4IHBhdHRlcm4uXG4gICAgICBjb2xvciA9IFwiI1wiICsgY29sb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiY29sb3ItdG9rZW5cIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIGNvbG9yOiBjb2xvclxuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhIHNpemUgc3BlY2lmaWNhdGlvbiwgY29uc2lzdGluZyBvZiBtYWduaXR1ZGUgYW5kIHVuaXQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnBhcnNlU2l6ZUdyb3VwID0gZnVuY3Rpb24gcGFyc2VTaXplR3JvdXAob3B0aW9uYWwpIHtcbiAgICB2YXIgcmVzO1xuICAgIHZhciBpc0JsYW5rID0gZmFsc2U7XG5cbiAgICBpZiAoIW9wdGlvbmFsICYmIHRoaXMubmV4dFRva2VuLnRleHQgIT09IFwie1wiKSB7XG4gICAgICByZXMgPSB0aGlzLnBhcnNlUmVnZXhHcm91cCgvXlstK10/ICooPzokfFxcZCt8XFxkK1xcLlxcZCp8XFwuXFxkKikgKlthLXpdezAsMn0gKiQvLCBcInNpemVcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IHRoaXMucGFyc2VTdHJpbmdHcm91cChcInNpemVcIiwgb3B0aW9uYWwpO1xuICAgIH1cblxuICAgIGlmICghcmVzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbmFsICYmIHJlcy50ZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gQmVjYXVzZSB3ZSd2ZSB0ZXN0ZWQgZm9yIHdoYXQgaXMgIW9wdGlvbmFsLCB0aGlzIGJsb2NrIHdvbid0XG4gICAgICAvLyBhZmZlY3QgXFxrZXJuLCBcXGhzcGFjZSwgZXRjLiBJdCB3aWxsIGNhcHR1cmUgdGhlIG1hbmRhdG9yeSBhcmd1bWVudHNcbiAgICAgIC8vIHRvIFxcZ2VuZnJhYyBhbmQgXFxhYm92ZS5cbiAgICAgIHJlcy50ZXh0ID0gXCIwcHRcIjsgLy8gRW5hYmxlIFxcYWJvdmV7fVxuXG4gICAgICBpc0JsYW5rID0gdHJ1ZTsgLy8gVGhpcyBpcyBoZXJlIHNwZWNpZmljYWxseSBmb3IgXFxnZW5mcmFjXG4gICAgfVxuXG4gICAgdmFyIG1hdGNoID0gLyhbLStdPykgKihcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspICooW2Etel17Mn0pLy5leGVjKHJlcy50ZXh0KTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgc2l6ZTogJ1wiICsgcmVzLnRleHQgKyBcIidcIiwgcmVzKTtcbiAgICB9XG5cbiAgICB2YXIgZGF0YSA9IHtcbiAgICAgIG51bWJlcjogKyhtYXRjaFsxXSArIG1hdGNoWzJdKSxcbiAgICAgIC8vIHNpZ24gKyBtYWduaXR1ZGUsIGNhc3QgdG8gbnVtYmVyXG4gICAgICB1bml0OiBtYXRjaFszXVxuICAgIH07XG5cbiAgICBpZiAoIXZhbGlkVW5pdChkYXRhKSkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCB1bml0OiAnXCIgKyBkYXRhLnVuaXQgKyBcIidcIiwgcmVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzaXplXCIsXG4gICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICB2YWx1ZTogZGF0YSxcbiAgICAgIGlzQmxhbms6IGlzQmxhbmtcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgYW4gVVJMLCBjaGVja2luZyBlc2NhcGVkIGxldHRlcnMgYW5kIGFsbG93ZWQgcHJvdG9jb2xzLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5wYXJzZVVybEdyb3VwID0gZnVuY3Rpb24gcGFyc2VVcmxHcm91cChvcHRpb25hbCkge1xuICAgIHZhciByZXMgPSB0aGlzLnBhcnNlU3RyaW5nR3JvdXAoXCJ1cmxcIiwgb3B0aW9uYWwsIHRydWUpOyAvLyBnZXQgcmF3IHN0cmluZ1xuXG4gICAgaWYgKCFyZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gaHlwZXJyZWYgcGFja2FnZSBhbGxvd3MgYmFja3NsYXNoZXMgYWxvbmUgaW4gaHJlZiwgYnV0IGRvZXNuJ3RcbiAgICAvLyBnZW5lcmF0ZSB2YWxpZCBsaW5rcyBpbiBzdWNoIGNhc2VzOyB3ZSBpbnRlcnByZXQgdGhpcyBhc1xuICAgIC8vIFwidW5kZWZpbmVkXCIgYmVoYXZpb3VyLCBhbmQga2VlcCB0aGVtIGFzLWlzLiBTb21lIGJyb3dzZXIgd2lsbFxuICAgIC8vIHJlcGxhY2UgYmFja3NsYXNoZXMgd2l0aCBmb3J3YXJkIHNsYXNoZXMuXG5cblxuICAgIHZhciB1cmwgPSByZXMudGV4dC5yZXBsYWNlKC9cXFxcKFsjJCUmfl9ee31dKS9nLCAnJDEnKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ1cmxcIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIHVybDogdXJsXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogSWYgYG9wdGlvbmFsYCBpcyBmYWxzZSBvciBhYnNlbnQsIHRoaXMgcGFyc2VzIGFuIG9yZGluYXJ5IGdyb3VwLFxuICAgKiB3aGljaCBpcyBlaXRoZXIgYSBzaW5nbGUgbnVjbGV1cyAobGlrZSBcInhcIikgb3IgYW4gZXhwcmVzc2lvblxuICAgKiBpbiBicmFjZXMgKGxpa2UgXCJ7eCt5fVwiKSBvciBhbiBpbXBsaWNpdCBncm91cCwgYSBncm91cCB0aGF0IHN0YXJ0c1xuICAgKiBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiwgYW5kIGVuZHMgcmlnaHQgYmVmb3JlIGEgaGlnaGVyIGV4cGxpY2l0XG4gICAqIGdyb3VwIGVuZHMsIG9yIGF0IEVPRi5cbiAgICogSWYgYG9wdGlvbmFsYCBpcyB0cnVlLCBpdCBwYXJzZXMgZWl0aGVyIGEgYnJhY2tldC1kZWxpbWl0ZWQgZXhwcmVzc2lvblxuICAgKiAobGlrZSBcIlt4K3ldXCIpIG9yIHJldHVybnMgbnVsbCB0byBpbmRpY2F0ZSB0aGUgYWJzZW5jZSBvZiBhXG4gICAqIGJyYWNrZXQtZW5jbG9zZWQgZ3JvdXAuXG4gICAqIElmIGBtb2RlYCBpcyBwcmVzZW50LCBzd2l0Y2hlcyB0byB0aGF0IG1vZGUgd2hpbGUgcGFyc2luZyB0aGUgZ3JvdXAsXG4gICAqIGFuZCBzd2l0Y2hlcyBiYWNrIGFmdGVyLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5wYXJzZUdyb3VwID0gZnVuY3Rpb24gcGFyc2VHcm91cChuYW1lLCAvLyBGb3IgZXJyb3IgcmVwb3J0aW5nLlxuICBvcHRpb25hbCwgZ3JlZWRpbmVzcywgYnJlYWtPblRva2VuVGV4dCwgbW9kZSkge1xuICAgIHZhciBvdXRlck1vZGUgPSB0aGlzLm1vZGU7XG4gICAgdmFyIGZpcnN0VG9rZW4gPSB0aGlzLm5leHRUb2tlbjtcbiAgICB2YXIgdGV4dCA9IGZpcnN0VG9rZW4udGV4dDsgLy8gU3dpdGNoIHRvIHNwZWNpZmllZCBtb2RlXG5cbiAgICBpZiAobW9kZSkge1xuICAgICAgdGhpcy5zd2l0Y2hNb2RlKG1vZGUpO1xuICAgIH1cblxuICAgIHZhciBncm91cEVuZDtcbiAgICB2YXIgcmVzdWx0OyAvLyBUcnkgdG8gcGFyc2UgYW4gb3BlbiBicmFjZSBvciBcXGJlZ2luZ3JvdXBcblxuICAgIGlmIChvcHRpb25hbCA/IHRleHQgPT09IFwiW1wiIDogdGV4dCA9PT0gXCJ7XCIgfHwgdGV4dCA9PT0gXCJcXFxcYmVnaW5ncm91cFwiKSB7XG4gICAgICBncm91cEVuZCA9IFBhcnNlci5lbmRPZkdyb3VwW3RleHRdOyAvLyBTdGFydCBhIG5ldyBncm91cCBuYW1lc3BhY2VcblxuICAgICAgdGhpcy5ndWxsZXQuYmVnaW5Hcm91cCgpOyAvLyBJZiB3ZSBnZXQgYSBicmFjZSwgcGFyc2UgYW4gZXhwcmVzc2lvblxuXG4gICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgIHZhciBleHByZXNzaW9uID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oZmFsc2UsIGdyb3VwRW5kKTtcbiAgICAgIHZhciBsYXN0VG9rZW4gPSB0aGlzLm5leHRUb2tlbjsgLy8gRW5kIGdyb3VwIG5hbWVzcGFjZSBiZWZvcmUgY29uc3VtaW5nIHN5bWJvbCBhZnRlciBjbG9zZSBicmFjZVxuXG4gICAgICB0aGlzLmd1bGxldC5lbmRHcm91cCgpO1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgbG9jOiBTb3VyY2VMb2NhdGlvbi5yYW5nZShmaXJzdFRva2VuLCBsYXN0VG9rZW4pLFxuICAgICAgICBib2R5OiBleHByZXNzaW9uLFxuICAgICAgICAvLyBBIGdyb3VwIGZvcm1lZCBieSBcXGJlZ2luZ3JvdXAuLi5cXGVuZGdyb3VwIGlzIGEgc2VtaS1zaW1wbGUgZ3JvdXBcbiAgICAgICAgLy8gd2hpY2ggZG9lc24ndCBhZmZlY3Qgc3BhY2luZyBpbiBtYXRoIG1vZGUsIGkuZS4sIGlzIHRyYW5zcGFyZW50LlxuICAgICAgICAvLyBodHRwczovL3RleC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMTkzMC93aGVuLXNob3VsZC1vbmUtXG4gICAgICAgIC8vIHVzZS1iZWdpbmdyb3VwLWluc3RlYWQtb2YtYmdyb3VwXG4gICAgICAgIHNlbWlzaW1wbGU6IHRleHQgPT09IFwiXFxcXGJlZ2luZ3JvdXBcIiB8fCB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChvcHRpb25hbCkge1xuICAgICAgLy8gUmV0dXJuIG5vdGhpbmcgZm9yIGFuIG9wdGlvbmFsIGdyb3VwXG4gICAgICByZXN1bHQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiB0aGVyZSBleGlzdHMgYSBmdW5jdGlvbiB3aXRoIHRoaXMgbmFtZSwgcGFyc2UgdGhlIGZ1bmN0aW9uLlxuICAgICAgLy8gT3RoZXJ3aXNlLCBqdXN0IHJldHVybiBhIG51Y2xldXNcbiAgICAgIHJlc3VsdCA9IHRoaXMucGFyc2VGdW5jdGlvbihicmVha09uVG9rZW5UZXh0LCBuYW1lLCBncmVlZGluZXNzKSB8fCB0aGlzLnBhcnNlU3ltYm9sKCk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCAmJiB0ZXh0WzBdID09PSBcIlxcXFxcIiAmJiAhaW1wbGljaXRDb21tYW5kcy5oYXNPd25Qcm9wZXJ0eSh0ZXh0KSkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy50aHJvd09uRXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJVbmRlZmluZWQgY29udHJvbCBzZXF1ZW5jZTogXCIgKyB0ZXh0LCBmaXJzdFRva2VuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdCA9IHRoaXMuZm9ybWF0VW5zdXBwb3J0ZWRDbWQodGV4dCk7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgfVxuICAgIH0gLy8gU3dpdGNoIG1vZGUgYmFja1xuXG5cbiAgICBpZiAobW9kZSkge1xuICAgICAgdGhpcy5zd2l0Y2hNb2RlKG91dGVyTW9kZSk7XG4gICAgfSAvLyBNYWtlIHN1cmUgd2UgZ290IGEgY2xvc2UgYnJhY2VcblxuXG4gICAgaWYgKGdyb3VwRW5kKSB7XG4gICAgICB0aGlzLmV4cGVjdChncm91cEVuZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICAvKipcbiAgICogRm9ybSBsaWdhdHVyZS1saWtlIGNvbWJpbmF0aW9ucyBvZiBjaGFyYWN0ZXJzIGZvciB0ZXh0IG1vZGUuXG4gICAqIFRoaXMgaW5jbHVkZXMgaW5wdXRzIGxpa2UgXCItLVwiLCBcIi0tLVwiLCBcImBgXCIgYW5kIFwiJydcIi5cbiAgICogVGhlIHJlc3VsdCB3aWxsIHNpbXBseSByZXBsYWNlIG11bHRpcGxlIHRleHRvcmQgbm9kZXMgd2l0aCBhIHNpbmdsZVxuICAgKiBjaGFyYWN0ZXIgaW4gZWFjaCB2YWx1ZSBieSBhIHNpbmdsZSB0ZXh0b3JkIG5vZGUgaGF2aW5nIG11bHRpcGxlXG4gICAqIGNoYXJhY3RlcnMgaW4gaXRzIHZhbHVlLiAgVGhlIHJlcHJlc2VudGF0aW9uIGlzIHN0aWxsIEFTQ0lJIHNvdXJjZS5cbiAgICogVGhlIGdyb3VwIHdpbGwgYmUgbW9kaWZpZWQgaW4gcGxhY2UuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmZvcm1MaWdhdHVyZXMgPSBmdW5jdGlvbiBmb3JtTGlnYXR1cmVzKGdyb3VwKSB7XG4gICAgdmFyIG4gPSBncm91cC5sZW5ndGggLSAxO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIHZhciBhID0gZ3JvdXBbaV07IC8vICRGbG93Rml4TWU6IE5vdCBldmVyeSBub2RlIHR5cGUgaGFzIGEgYHRleHRgIHByb3BlcnR5LlxuXG4gICAgICB2YXIgdiA9IGEudGV4dDtcblxuICAgICAgaWYgKHYgPT09IFwiLVwiICYmIGdyb3VwW2kgKyAxXS50ZXh0ID09PSBcIi1cIikge1xuICAgICAgICBpZiAoaSArIDEgPCBuICYmIGdyb3VwW2kgKyAyXS50ZXh0ID09PSBcIi1cIikge1xuICAgICAgICAgIGdyb3VwLnNwbGljZShpLCAzLCB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgbG9jOiBTb3VyY2VMb2NhdGlvbi5yYW5nZShhLCBncm91cFtpICsgMl0pLFxuICAgICAgICAgICAgdGV4dDogXCItLS1cIlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIG4gLT0gMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBncm91cC5zcGxpY2UoaSwgMiwge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgICAgICBtb2RlOiBcInRleHRcIixcbiAgICAgICAgICAgIGxvYzogU291cmNlTG9jYXRpb24ucmFuZ2UoYSwgZ3JvdXBbaSArIDFdKSxcbiAgICAgICAgICAgIHRleHQ6IFwiLS1cIlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIG4gLT0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoKHYgPT09IFwiJ1wiIHx8IHYgPT09IFwiYFwiKSAmJiBncm91cFtpICsgMV0udGV4dCA9PT0gdikge1xuICAgICAgICBncm91cC5zcGxpY2UoaSwgMiwge1xuICAgICAgICAgIHR5cGU6IFwidGV4dG9yZFwiLFxuICAgICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICAgIGxvYzogU291cmNlTG9jYXRpb24ucmFuZ2UoYSwgZ3JvdXBbaSArIDFdKSxcbiAgICAgICAgICB0ZXh0OiB2ICsgdlxuICAgICAgICB9KTtcbiAgICAgICAgbiAtPSAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogUGFyc2UgYSBzaW5nbGUgc3ltYm9sIG91dCBvZiB0aGUgc3RyaW5nLiBIZXJlLCB3ZSBoYW5kbGUgc2luZ2xlIGNoYXJhY3RlclxuICAgKiBzeW1ib2xzIGFuZCBzcGVjaWFsIGZ1bmN0aW9ucyBsaWtlIHZlcmJhdGltXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnBhcnNlU3ltYm9sID0gZnVuY3Rpb24gcGFyc2VTeW1ib2woKSB7XG4gICAgdmFyIG51Y2xldXMgPSB0aGlzLm5leHRUb2tlbjtcbiAgICB2YXIgdGV4dCA9IG51Y2xldXMudGV4dDtcblxuICAgIGlmICgvXlxcXFx2ZXJiW15hLXpBLVpdLy50ZXN0KHRleHQpKSB7XG4gICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgIHZhciBhcmcgPSB0ZXh0LnNsaWNlKDUpO1xuICAgICAgdmFyIHN0YXIgPSBhcmcuY2hhckF0KDApID09PSBcIipcIjtcblxuICAgICAgaWYgKHN0YXIpIHtcbiAgICAgICAgYXJnID0gYXJnLnNsaWNlKDEpO1xuICAgICAgfSAvLyBMZXhlcidzIHRva2VuUmVnZXggaXMgY29uc3RydWN0ZWQgdG8gYWx3YXlzIGhhdmUgbWF0Y2hpbmdcbiAgICAgIC8vIGZpcnN0L2xhc3QgY2hhcmFjdGVycy5cblxuXG4gICAgICBpZiAoYXJnLmxlbmd0aCA8IDIgfHwgYXJnLmNoYXJBdCgwKSAhPT0gYXJnLnNsaWNlKC0xKSkge1xuICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJcXFxcdmVyYiBhc3NlcnRpb24gZmFpbGVkIC0tXFxuICAgICAgICAgICAgICAgICAgICBwbGVhc2UgcmVwb3J0IHdoYXQgaW5wdXQgY2F1c2VkIHRoaXMgYnVnXCIpO1xuICAgICAgfVxuXG4gICAgICBhcmcgPSBhcmcuc2xpY2UoMSwgLTEpOyAvLyByZW1vdmUgZmlyc3QgYW5kIGxhc3QgY2hhclxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcInZlcmJcIixcbiAgICAgICAgbW9kZTogXCJ0ZXh0XCIsXG4gICAgICAgIGJvZHk6IGFyZyxcbiAgICAgICAgc3Rhcjogc3RhclxuICAgICAgfTtcbiAgICB9IC8vIEF0IHRoaXMgcG9pbnQsIHdlIHNob3VsZCBoYXZlIGEgc3ltYm9sLCBwb3NzaWJseSB3aXRoIGFjY2VudHMuXG4gICAgLy8gRmlyc3QgZXhwYW5kIGFueSBhY2NlbnRlZCBiYXNlIHN5bWJvbCBhY2NvcmRpbmcgdG8gdW5pY29kZVN5bWJvbHMuXG5cblxuICAgIGlmICh1bmljb2RlU3ltYm9scy5oYXNPd25Qcm9wZXJ0eSh0ZXh0WzBdKSAmJiAhc3JjX3N5bWJvbHNbdGhpcy5tb2RlXVt0ZXh0WzBdXSkge1xuICAgICAgLy8gVGhpcyBiZWhhdmlvciBpcyBub3Qgc3RyaWN0IChYZVRlWC1jb21wYXRpYmxlKSBpbiBtYXRoIG1vZGUuXG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5zdHJpY3QgJiYgdGhpcy5tb2RlID09PSBcIm1hdGhcIikge1xuICAgICAgICB0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcInVuaWNvZGVUZXh0SW5NYXRoTW9kZVwiLCBcIkFjY2VudGVkIFVuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgXFxcIlwiICsgdGV4dFswXSArIFwiXFxcIiB1c2VkIGluIFwiICsgXCJtYXRoIG1vZGVcIiwgbnVjbGV1cyk7XG4gICAgICB9XG5cbiAgICAgIHRleHQgPSB1bmljb2RlU3ltYm9sc1t0ZXh0WzBdXSArIHRleHQuc3Vic3RyKDEpO1xuICAgIH0gLy8gU3RyaXAgb2ZmIGFueSBjb21iaW5pbmcgY2hhcmFjdGVyc1xuXG5cbiAgICB2YXIgbWF0Y2ggPSBjb21iaW5pbmdEaWFjcml0aWNhbE1hcmtzRW5kUmVnZXguZXhlYyh0ZXh0KTtcblxuICAgIGlmIChtYXRjaCkge1xuICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIG1hdGNoLmluZGV4KTtcblxuICAgICAgaWYgKHRleHQgPT09ICdpJykge1xuICAgICAgICB0ZXh0ID0gXCJcXHUwMTMxXCI7IC8vIGRvdGxlc3MgaSwgaW4gbWF0aCBhbmQgdGV4dCBtb2RlXG4gICAgICB9IGVsc2UgaWYgKHRleHQgPT09ICdqJykge1xuICAgICAgICB0ZXh0ID0gXCJcXHUwMjM3XCI7IC8vIGRvdGxlc3MgaiwgaW4gbWF0aCBhbmQgdGV4dCBtb2RlXG4gICAgICB9XG4gICAgfSAvLyBSZWNvZ25pemUgYmFzZSBzeW1ib2xcblxuXG4gICAgdmFyIHN5bWJvbDtcblxuICAgIGlmIChzcmNfc3ltYm9sc1t0aGlzLm1vZGVdW3RleHRdKSB7XG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5zdHJpY3QgJiYgdGhpcy5tb2RlID09PSAnbWF0aCcgJiYgZXh0cmFMYXRpbi5pbmRleE9mKHRleHQpID49IDApIHtcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJ1bmljb2RlVGV4dEluTWF0aE1vZGVcIiwgXCJMYXRpbi0xL1VuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgXFxcIlwiICsgdGV4dFswXSArIFwiXFxcIiB1c2VkIGluIFwiICsgXCJtYXRoIG1vZGVcIiwgbnVjbGV1cyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBncm91cCA9IHNyY19zeW1ib2xzW3RoaXMubW9kZV1bdGV4dF0uZ3JvdXA7XG4gICAgICB2YXIgbG9jID0gU291cmNlTG9jYXRpb24ucmFuZ2UobnVjbGV1cyk7XG4gICAgICB2YXIgcztcblxuICAgICAgaWYgKEFUT01TLmhhc093blByb3BlcnR5KGdyb3VwKSkge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICAgIHZhciBmYW1pbHkgPSBncm91cDtcbiAgICAgICAgcyA9IHtcbiAgICAgICAgICB0eXBlOiBcImF0b21cIixcbiAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgZmFtaWx5OiBmYW1pbHksXG4gICAgICAgICAgbG9jOiBsb2MsXG4gICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICBzID0ge1xuICAgICAgICAgIHR5cGU6IGdyb3VwLFxuICAgICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgICBsb2M6IGxvYyxcbiAgICAgICAgICB0ZXh0OiB0ZXh0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHN5bWJvbCA9IHM7XG4gICAgfSBlbHNlIGlmICh0ZXh0LmNoYXJDb2RlQXQoMCkgPj0gMHg4MCkge1xuICAgICAgLy8gbm8gc3ltYm9sIGZvciBlLmcuIF5cbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLnN0cmljdCkge1xuICAgICAgICBpZiAoIXN1cHBvcnRlZENvZGVwb2ludCh0ZXh0LmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJ1bmtub3duU3ltYm9sXCIsIFwiVW5yZWNvZ25pemVkIFVuaWNvZGUgY2hhcmFjdGVyIFxcXCJcIiArIHRleHRbMF0gKyBcIlxcXCJcIiArIChcIiAoXCIgKyB0ZXh0LmNoYXJDb2RlQXQoMCkgKyBcIilcIiksIG51Y2xldXMpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gXCJtYXRoXCIpIHtcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcInVuaWNvZGVUZXh0SW5NYXRoTW9kZVwiLCBcIlVuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgXFxcIlwiICsgdGV4dFswXSArIFwiXFxcIiB1c2VkIGluIG1hdGggbW9kZVwiLCBudWNsZXVzKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBBbGwgbm9ubWF0aGVtYXRpY2FsIFVuaWNvZGUgY2hhcmFjdGVycyBhcmUgcmVuZGVyZWQgYXMgaWYgdGhleVxuICAgICAgLy8gYXJlIGluIHRleHQgbW9kZSAod3JhcHBlZCBpbiBcXHRleHQpIGJlY2F1c2UgdGhhdCdzIHdoYXQgaXRcbiAgICAgIC8vIHRha2VzIHRvIHJlbmRlciB0aGVtIGluIExhVGVYLiAgU2V0dGluZyBgbW9kZTogdGhpcy5tb2RlYCBpc1xuICAgICAgLy8gYW5vdGhlciBuYXR1cmFsIGNob2ljZSAodGhlIHVzZXIgcmVxdWVzdGVkIG1hdGggbW9kZSksIGJ1dFxuICAgICAgLy8gdGhpcyBtYWtlcyBpdCBtb3JlIGRpZmZpY3VsdCBmb3IgZ2V0Q2hhcmFjdGVyTWV0cmljcygpIHRvXG4gICAgICAvLyBkaXN0aW5ndWlzaCBVbmljb2RlIGNoYXJhY3RlcnMgd2l0aG91dCBtZXRyaWNzIGFuZCB0aG9zZSBmb3JcbiAgICAgIC8vIHdoaWNoIHdlIHdhbnQgdG8gc2ltdWxhdGUgdGhlIGxldHRlciBNLlxuXG5cbiAgICAgIHN5bWJvbCA9IHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICBsb2M6IFNvdXJjZUxvY2F0aW9uLnJhbmdlKG51Y2xldXMpLFxuICAgICAgICB0ZXh0OiB0ZXh0XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gRU9GLCBeLCBfLCB7LCB9LCBldGMuXG4gICAgfVxuXG4gICAgdGhpcy5jb25zdW1lKCk7IC8vIFRyYW5zZm9ybSBjb21iaW5pbmcgY2hhcmFjdGVycyBpbnRvIGFjY2VudHNcblxuICAgIGlmIChtYXRjaCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRjaFswXS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYWNjZW50ID0gbWF0Y2hbMF1baV07XG5cbiAgICAgICAgaWYgKCF1bmljb2RlQWNjZW50c1thY2NlbnRdKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiVW5rbm93biBhY2NlbnQgJyBcIiArIGFjY2VudCArIFwiJ1wiLCBudWNsZXVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjb21tYW5kID0gdW5pY29kZUFjY2VudHNbYWNjZW50XVt0aGlzLm1vZGVdO1xuXG4gICAgICAgIGlmICghY29tbWFuZCkge1xuICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkFjY2VudCBcIiArIGFjY2VudCArIFwiIHVuc3VwcG9ydGVkIGluIFwiICsgdGhpcy5tb2RlICsgXCIgbW9kZVwiLCBudWNsZXVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN5bWJvbCA9IHtcbiAgICAgICAgICB0eXBlOiBcImFjY2VudFwiLFxuICAgICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgICBsb2M6IFNvdXJjZUxvY2F0aW9uLnJhbmdlKG51Y2xldXMpLFxuICAgICAgICAgIGxhYmVsOiBjb21tYW5kLFxuICAgICAgICAgIGlzU3RyZXRjaHk6IGZhbHNlLFxuICAgICAgICAgIGlzU2hpZnR5OiB0cnVlLFxuICAgICAgICAgIGJhc2U6IHN5bWJvbFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzeW1ib2w7XG4gIH07XG5cbiAgcmV0dXJuIFBhcnNlcjtcbn0oKTtcblxuUGFyc2VyX1BhcnNlci5lbmRPZkV4cHJlc3Npb24gPSBbXCJ9XCIsIFwiXFxcXGVuZGdyb3VwXCIsIFwiXFxcXGVuZFwiLCBcIlxcXFxyaWdodFwiLCBcIiZcIl07XG5QYXJzZXJfUGFyc2VyLmVuZE9mR3JvdXAgPSB7XG4gIFwiW1wiOiBcIl1cIixcbiAgXCJ7XCI6IFwifVwiLFxuICBcIlxcXFxiZWdpbmdyb3VwXCI6IFwiXFxcXGVuZGdyb3VwXCJcbiAgLyoqXG4gICAqIFBhcnNlcyBhbiBcImV4cHJlc3Npb25cIiwgd2hpY2ggaXMgYSBsaXN0IG9mIGF0b21zLlxuICAgKlxuICAgKiBgYnJlYWtPbkluZml4YDogU2hvdWxkIHRoZSBwYXJzaW5nIHN0b3Agd2hlbiB3ZSBoaXQgaW5maXggbm9kZXM/IFRoaXNcbiAgICogICAgICAgICAgICAgICAgIGhhcHBlbnMgd2hlbiBmdW5jdGlvbnMgaGF2ZSBoaWdoZXIgcHJlY2VuZGVuY2UgaGFuIGluZml4XG4gICAqICAgICAgICAgICAgICAgICBub2RlcyBpbiBpbXBsaWNpdCBwYXJzZXMuXG4gICAqXG4gICAqIGBicmVha09uVG9rZW5UZXh0YDogVGhlIHRleHQgb2YgdGhlIHRva2VuIHRoYXQgdGhlIGV4cHJlc3Npb24gc2hvdWxkIGVuZFxuICAgKiAgICAgICAgICAgICAgICAgICAgIHdpdGgsIG9yIGBudWxsYCBpZiBzb21ldGhpbmcgZWxzZSBzaG91bGQgZW5kIHRoZVxuICAgKiAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24uXG4gICAqL1xuXG59O1xuUGFyc2VyX1BhcnNlci5TVVBTVUJfR1JFRURJTkVTUyA9IDE7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3BhcnNlVHJlZS5qc1xuLyoqXG4gKiBQcm92aWRlcyBhIHNpbmdsZSBmdW5jdGlvbiBmb3IgcGFyc2luZyBhbiBleHByZXNzaW9uIHVzaW5nIGEgUGFyc2VyXG4gKiBUT0RPKGVtaWx5KTogUmVtb3ZlIHRoaXNcbiAqL1xuXG5cblxuLyoqXG4gKiBQYXJzZXMgYW4gZXhwcmVzc2lvbiB1c2luZyBhIFBhcnNlciwgdGhlbiByZXR1cm5zIHRoZSBwYXJzZWQgcmVzdWx0LlxuICovXG52YXIgcGFyc2VUcmVlX3BhcnNlVHJlZSA9IGZ1bmN0aW9uIHBhcnNlVHJlZSh0b1BhcnNlLCBzZXR0aW5ncykge1xuICBpZiAoISh0eXBlb2YgdG9QYXJzZSA9PT0gJ3N0cmluZycgfHwgdG9QYXJzZSBpbnN0YW5jZW9mIFN0cmluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdLYVRlWCBjYW4gb25seSBwYXJzZSBzdHJpbmcgdHlwZWQgZXhwcmVzc2lvbicpO1xuICB9XG5cbiAgdmFyIHBhcnNlciA9IG5ldyBQYXJzZXJfUGFyc2VyKHRvUGFyc2UsIHNldHRpbmdzKTsgLy8gQmxhbmsgb3V0IGFueSBcXGRmQHRhZyB0byBhdm9pZCBzcHVyaW91cyBcIkR1cGxpY2F0ZSBcXHRhZ1wiIGVycm9yc1xuXG4gIGRlbGV0ZSBwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5jdXJyZW50W1wiXFxcXGRmQHRhZ1wiXTtcbiAgdmFyIHRyZWUgPSBwYXJzZXIucGFyc2UoKTsgLy8gSWYgdGhlIGlucHV0IHVzZWQgXFx0YWcsIGl0IHdpbGwgc2V0IHRoZSBcXGRmQHRhZyBtYWNybyB0byB0aGUgdGFnLlxuICAvLyBJbiB0aGlzIGNhc2UsIHdlIHNlcGFyYXRlbHkgcGFyc2UgdGhlIHRhZyBhbmQgd3JhcCB0aGUgdHJlZS5cblxuICBpZiAocGFyc2VyLmd1bGxldC5tYWNyb3MuZ2V0KFwiXFxcXGRmQHRhZ1wiKSkge1xuICAgIGlmICghc2V0dGluZ3MuZGlzcGxheU1vZGUpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlxcXFx0YWcgd29ya3Mgb25seSBpbiBkaXNwbGF5IGVxdWF0aW9uc1wiKTtcbiAgICB9XG5cbiAgICBwYXJzZXIuZ3VsbGV0LmZlZWQoXCJcXFxcZGZAdGFnXCIpO1xuICAgIHRyZWUgPSBbe1xuICAgICAgdHlwZTogXCJ0YWdcIixcbiAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgYm9keTogdHJlZSxcbiAgICAgIHRhZzogcGFyc2VyLnBhcnNlKClcbiAgICB9XTtcbiAgfVxuXG4gIHJldHVybiB0cmVlO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3BhcnNlVHJlZSA9IChwYXJzZVRyZWVfcGFyc2VUcmVlKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4va2F0ZXguanNcbi8qIGVzbGludCBuby1jb25zb2xlOjAgKi9cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBLYVRlWC4gSGVyZSwgd2UgZXhwb3NlIGZ1bmN0aW9ucyBmb3JcbiAqIHJlbmRlcmluZyBleHByZXNzaW9ucyBlaXRoZXIgdG8gRE9NIG5vZGVzIG9yIHRvIG1hcmt1cCBzdHJpbmdzLlxuICpcbiAqIFdlIGFsc28gZXhwb3NlIHRoZSBQYXJzZUVycm9yIGNsYXNzIHRvIGNoZWNrIGlmIGVycm9ycyB0aHJvd24gZnJvbSBLYVRlWCBhcmVcbiAqIGVycm9ycyBpbiB0aGUgZXhwcmVzc2lvbiwgb3IgZXJyb3JzIGluIGphdmFzY3JpcHQgaGFuZGxpbmcuXG4gKi9cblxuXG5cblxuXG5cblxuXG5cblxuLyoqXG4gKiBQYXJzZSBhbmQgYnVpbGQgYW4gZXhwcmVzc2lvbiwgYW5kIHBsYWNlIHRoYXQgZXhwcmVzc2lvbiBpbiB0aGUgRE9NIG5vZGVcbiAqIGdpdmVuLlxuICovXG52YXIga2F0ZXhfcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKGV4cHJlc3Npb24sIGJhc2VOb2RlLCBvcHRpb25zKSB7XG4gIGJhc2VOb2RlLnRleHRDb250ZW50ID0gXCJcIjtcbiAgdmFyIG5vZGUgPSBrYXRleF9yZW5kZXJUb0RvbVRyZWUoZXhwcmVzc2lvbiwgb3B0aW9ucykudG9Ob2RlKCk7XG4gIGJhc2VOb2RlLmFwcGVuZENoaWxkKG5vZGUpO1xufTsgLy8gS2FUZVgncyBzdHlsZXMgZG9uJ3Qgd29yayBwcm9wZXJseSBpbiBxdWlya3MgbW9kZS4gUHJpbnQgb3V0IGFuIGVycm9yLCBhbmRcbi8vIGRpc2FibGUgcmVuZGVyaW5nLlxuXG5cbmlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgaWYgKGRvY3VtZW50LmNvbXBhdE1vZGUgIT09IFwiQ1NTMUNvbXBhdFwiKSB7XG4gICAgdHlwZW9mIGNvbnNvbGUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29uc29sZS53YXJuKFwiV2FybmluZzogS2FUZVggZG9lc24ndCB3b3JrIGluIHF1aXJrcyBtb2RlLiBNYWtlIHN1cmUgeW91ciBcIiArIFwid2Vic2l0ZSBoYXMgYSBzdWl0YWJsZSBkb2N0eXBlLlwiKTtcblxuICAgIGthdGV4X3JlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkthVGVYIGRvZXNuJ3Qgd29yayBpbiBxdWlya3MgbW9kZS5cIik7XG4gICAgfTtcbiAgfVxufVxuLyoqXG4gKiBQYXJzZSBhbmQgYnVpbGQgYW4gZXhwcmVzc2lvbiwgYW5kIHJldHVybiB0aGUgbWFya3VwIGZvciB0aGF0LlxuICovXG5cblxudmFyIHJlbmRlclRvU3RyaW5nID0gZnVuY3Rpb24gcmVuZGVyVG9TdHJpbmcoZXhwcmVzc2lvbiwgb3B0aW9ucykge1xuICB2YXIgbWFya3VwID0ga2F0ZXhfcmVuZGVyVG9Eb21UcmVlKGV4cHJlc3Npb24sIG9wdGlvbnMpLnRvTWFya3VwKCk7XG4gIHJldHVybiBtYXJrdXA7XG59O1xuLyoqXG4gKiBQYXJzZSBhbiBleHByZXNzaW9uIGFuZCByZXR1cm4gdGhlIHBhcnNlIHRyZWUuXG4gKi9cblxuXG52YXIga2F0ZXhfZ2VuZXJhdGVQYXJzZVRyZWUgPSBmdW5jdGlvbiBnZW5lcmF0ZVBhcnNlVHJlZShleHByZXNzaW9uLCBvcHRpb25zKSB7XG4gIHZhciBzZXR0aW5ncyA9IG5ldyBTZXR0aW5nc19TZXR0aW5ncyhvcHRpb25zKTtcbiAgcmV0dXJuIHNyY19wYXJzZVRyZWUoZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xufTtcbi8qKlxuICogSWYgdGhlIGdpdmVuIGVycm9yIGlzIGEgS2FUZVggUGFyc2VFcnJvciBhbmQgb3B0aW9ucy50aHJvd09uRXJyb3IgaXMgZmFsc2UsXG4gKiByZW5kZXJzIHRoZSBpbnZhbGlkIExhVGVYIGFzIGEgc3BhbiB3aXRoIGhvdmVyIHRpdGxlIGdpdmluZyB0aGUgS2FUZVhcbiAqIGVycm9yIG1lc3NhZ2UuICBPdGhlcndpc2UsIHNpbXBseSB0aHJvd3MgdGhlIGVycm9yLlxuICovXG5cblxudmFyIGthdGV4X3JlbmRlckVycm9yID0gZnVuY3Rpb24gcmVuZGVyRXJyb3IoZXJyb3IsIGV4cHJlc3Npb24sIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMudGhyb3dPbkVycm9yIHx8ICEoZXJyb3IgaW5zdGFuY2VvZiBzcmNfUGFyc2VFcnJvcikpIHtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIHZhciBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wia2F0ZXgtZXJyb3JcIl0sIFtuZXcgZG9tVHJlZV9TeW1ib2xOb2RlKGV4cHJlc3Npb24pXSk7XG4gIG5vZGUuc2V0QXR0cmlidXRlKFwidGl0bGVcIiwgZXJyb3IudG9TdHJpbmcoKSk7XG4gIG5vZGUuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJjb2xvcjpcIiArIG9wdGlvbnMuZXJyb3JDb2xvcik7XG4gIHJldHVybiBub2RlO1xufTtcbi8qKlxuICogR2VuZXJhdGVzIGFuZCByZXR1cm5zIHRoZSBrYXRleCBidWlsZCB0cmVlLiBUaGlzIGlzIHVzZWQgZm9yIGFkdmFuY2VkXG4gKiB1c2UgY2FzZXMgKGxpa2UgcmVuZGVyaW5nIHRvIGN1c3RvbSBvdXRwdXQpLlxuICovXG5cblxudmFyIGthdGV4X3JlbmRlclRvRG9tVHJlZSA9IGZ1bmN0aW9uIHJlbmRlclRvRG9tVHJlZShleHByZXNzaW9uLCBvcHRpb25zKSB7XG4gIHZhciBzZXR0aW5ncyA9IG5ldyBTZXR0aW5nc19TZXR0aW5ncyhvcHRpb25zKTtcblxuICB0cnkge1xuICAgIHZhciB0cmVlID0gc3JjX3BhcnNlVHJlZShleHByZXNzaW9uLCBzZXR0aW5ncyk7XG4gICAgcmV0dXJuIGJ1aWxkVHJlZV9idWlsZFRyZWUodHJlZSwgZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBrYXRleF9yZW5kZXJFcnJvcihlcnJvciwgZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICB9XG59O1xuLyoqXG4gKiBHZW5lcmF0ZXMgYW5kIHJldHVybnMgdGhlIGthdGV4IGJ1aWxkIHRyZWUsIHdpdGgganVzdCBIVE1MIChubyBNYXRoTUwpLlxuICogVGhpcyBpcyB1c2VkIGZvciBhZHZhbmNlZCB1c2UgY2FzZXMgKGxpa2UgcmVuZGVyaW5nIHRvIGN1c3RvbSBvdXRwdXQpLlxuICovXG5cblxudmFyIGthdGV4X3JlbmRlclRvSFRNTFRyZWUgPSBmdW5jdGlvbiByZW5kZXJUb0hUTUxUcmVlKGV4cHJlc3Npb24sIG9wdGlvbnMpIHtcbiAgdmFyIHNldHRpbmdzID0gbmV3IFNldHRpbmdzX1NldHRpbmdzKG9wdGlvbnMpO1xuXG4gIHRyeSB7XG4gICAgdmFyIHRyZWUgPSBzcmNfcGFyc2VUcmVlKGV4cHJlc3Npb24sIHNldHRpbmdzKTtcbiAgICByZXR1cm4gYnVpbGRUcmVlX2J1aWxkSFRNTFRyZWUodHJlZSwgZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBrYXRleF9yZW5kZXJFcnJvcihlcnJvciwgZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICB9XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBrYXRleF8wID0gKHtcbiAgLyoqXG4gICAqIEN1cnJlbnQgS2FUZVggdmVyc2lvblxuICAgKi9cbiAgdmVyc2lvbjogXCIwLjExLjBcIixcblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgZ2l2ZW4gTGFUZVggaW50byBhbiBIVE1MK01hdGhNTCBjb21iaW5hdGlvbiwgYW5kIGFkZHNcbiAgICogaXQgYXMgYSBjaGlsZCB0byB0aGUgc3BlY2lmaWVkIERPTSBub2RlLlxuICAgKi9cbiAgcmVuZGVyOiBrYXRleF9yZW5kZXIsXG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGdpdmVuIExhVGVYIGludG8gYW4gSFRNTCtNYXRoTUwgY29tYmluYXRpb24gc3RyaW5nLFxuICAgKiBmb3Igc2VuZGluZyB0byB0aGUgY2xpZW50LlxuICAgKi9cbiAgcmVuZGVyVG9TdHJpbmc6IHJlbmRlclRvU3RyaW5nLFxuXG4gIC8qKlxuICAgKiBLYVRlWCBlcnJvciwgdXN1YWxseSBkdXJpbmcgcGFyc2luZy5cbiAgICovXG4gIFBhcnNlRXJyb3I6IHNyY19QYXJzZUVycm9yLFxuXG4gIC8qKlxuICAgKiBQYXJzZXMgdGhlIGdpdmVuIExhVGVYIGludG8gS2FUZVgncyBpbnRlcm5hbCBwYXJzZSB0cmVlIHN0cnVjdHVyZSxcbiAgICogd2l0aG91dCByZW5kZXJpbmcgdG8gSFRNTCBvciBNYXRoTUwuXG4gICAqXG4gICAqIE5PVEU6IFRoaXMgbWV0aG9kIGlzIG5vdCBjdXJyZW50bHkgcmVjb21tZW5kZWQgZm9yIHB1YmxpYyB1c2UuXG4gICAqIFRoZSBpbnRlcm5hbCB0cmVlIHJlcHJlc2VudGF0aW9uIGlzIHVuc3RhYmxlIGFuZCBpcyB2ZXJ5IGxpa2VseVxuICAgKiB0byBjaGFuZ2UuIFVzZSBhdCB5b3VyIG93biByaXNrLlxuICAgKi9cbiAgX19wYXJzZToga2F0ZXhfZ2VuZXJhdGVQYXJzZVRyZWUsXG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGdpdmVuIExhVGVYIGludG8gYW4gSFRNTCtNYXRoTUwgaW50ZXJuYWwgRE9NIHRyZWVcbiAgICogcmVwcmVzZW50YXRpb24sIHdpdGhvdXQgZmxhdHRlbmluZyB0aGF0IHJlcHJlc2VudGF0aW9uIHRvIGEgc3RyaW5nLlxuICAgKlxuICAgKiBOT1RFOiBUaGlzIG1ldGhvZCBpcyBub3QgY3VycmVudGx5IHJlY29tbWVuZGVkIGZvciBwdWJsaWMgdXNlLlxuICAgKiBUaGUgaW50ZXJuYWwgdHJlZSByZXByZXNlbnRhdGlvbiBpcyB1bnN0YWJsZSBhbmQgaXMgdmVyeSBsaWtlbHlcbiAgICogdG8gY2hhbmdlLiBVc2UgYXQgeW91ciBvd24gcmlzay5cbiAgICovXG4gIF9fcmVuZGVyVG9Eb21UcmVlOiBrYXRleF9yZW5kZXJUb0RvbVRyZWUsXG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGdpdmVuIExhVGVYIGludG8gYW4gSFRNTCBpbnRlcm5hbCBET00gdHJlZSByZXByZXNlbnRhdGlvbixcbiAgICogd2l0aG91dCBNYXRoTUwgYW5kIHdpdGhvdXQgZmxhdHRlbmluZyB0aGF0IHJlcHJlc2VudGF0aW9uIHRvIGEgc3RyaW5nLlxuICAgKlxuICAgKiBOT1RFOiBUaGlzIG1ldGhvZCBpcyBub3QgY3VycmVudGx5IHJlY29tbWVuZGVkIGZvciBwdWJsaWMgdXNlLlxuICAgKiBUaGUgaW50ZXJuYWwgdHJlZSByZXByZXNlbnRhdGlvbiBpcyB1bnN0YWJsZSBhbmQgaXMgdmVyeSBsaWtlbHlcbiAgICogdG8gY2hhbmdlLiBVc2UgYXQgeW91ciBvd24gcmlzay5cbiAgICovXG4gIF9fcmVuZGVyVG9IVE1MVHJlZToga2F0ZXhfcmVuZGVyVG9IVE1MVHJlZSxcblxuICAvKipcbiAgICogZXh0ZW5kcyBpbnRlcm5hbCBmb250IG1ldHJpY3Mgb2JqZWN0IHdpdGggYSBuZXcgb2JqZWN0XG4gICAqIGVhY2gga2V5IGluIHRoZSBuZXcgb2JqZWN0IHJlcHJlc2VudHMgYSBmb250IG5hbWVcbiAgKi9cbiAgX19zZXRGb250TWV0cmljczogc2V0Rm9udE1ldHJpY3MsXG5cbiAgLyoqXG4gICAqIGFkZHMgYSBuZXcgc3ltYm9sIHRvIGJ1aWx0aW4gc3ltYm9scyB0YWJsZVxuICAgKi9cbiAgX19kZWZpbmVTeW1ib2w6IGRlZmluZVN5bWJvbCxcblxuICAvKipcbiAgICogYWRkcyBhIG5ldyBtYWNybyB0byBidWlsdGluIG1hY3JvIGxpc3RcbiAgICovXG4gIF9fZGVmaW5lTWFjcm86IGRlZmluZU1hY3JvLFxuXG4gIC8qKlxuICAgKiBFeHBvc2UgdGhlIGRvbSB0cmVlIG5vZGUgdHlwZXMsIHdoaWNoIGNhbiBiZSB1c2VmdWwgZm9yIHR5cGUgY2hlY2tpbmcgbm9kZXMuXG4gICAqXG4gICAqIE5PVEU6IFRoaXMgbWV0aG9kIGlzIG5vdCBjdXJyZW50bHkgcmVjb21tZW5kZWQgZm9yIHB1YmxpYyB1c2UuXG4gICAqIFRoZSBpbnRlcm5hbCB0cmVlIHJlcHJlc2VudGF0aW9uIGlzIHVuc3RhYmxlIGFuZCBpcyB2ZXJ5IGxpa2VseVxuICAgKiB0byBjaGFuZ2UuIFVzZSBhdCB5b3VyIG93biByaXNrLlxuICAgKi9cbiAgX19kb21UcmVlOiB7XG4gICAgU3BhbjogZG9tVHJlZV9TcGFuLFxuICAgIEFuY2hvcjogZG9tVHJlZV9BbmNob3IsXG4gICAgU3ltYm9sTm9kZTogZG9tVHJlZV9TeW1ib2xOb2RlLFxuICAgIFN2Z05vZGU6IFN2Z05vZGUsXG4gICAgUGF0aE5vZGU6IGRvbVRyZWVfUGF0aE5vZGUsXG4gICAgTGluZU5vZGU6IExpbmVOb2RlXG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9rYXRleC53ZWJwYWNrLmpzXG4vKipcbiAqIFRoaXMgaXMgdGhlIHdlYnBhY2sgZW50cnkgcG9pbnQgZm9yIEthVGVYLiBBcyBFQ01BU2NyaXB0LCBmbG93WzFdIGFuZCBqZXN0WzJdXG4gKiBkb2Vzbid0IHN1cHBvcnQgQ1NTIG1vZHVsZXMgbmF0aXZlbHksIGEgc2VwYXJhdGUgZW50cnkgcG9pbnQgaXMgdXNlZCBhbmRcbiAqIGl0IGlzIG5vdCBmbG93dHlwZWQuXG4gKlxuICogWzFdIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2xhbWJkYWhhbmRzL2QxOWUwZGE5NjI4NWI3NDlmMGVmXG4gKiBbMl0gaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vamVzdC9kb2NzL2VuL3dlYnBhY2suaHRtbFxuICovXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIga2F0ZXhfd2VicGFjayA9IF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGthdGV4XzApO1xuXG4vKioqLyB9KVxuLyoqKioqKi8gXSlbXCJkZWZhdWx0XCJdO1xufSk7IiwidmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG4vLyBvdXIgY29uc3RydWN0b3JcbmZ1bmN0aW9uIEtleVRyZWVTdG9yZShvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuICAgIHZhciBERUZBVUxUX1NFUEFSQVRPUiA9ICcuJztcblxuICAgIHRoaXMuc3RvcmFnZSA9IHt9O1xuICAgIHRoaXMuc2VwYXJhdG9yID0gb3B0aW9ucy5zZXBhcmF0b3IgfHwgREVGQVVMVF9TRVBBUkFUT1I7XG59XG5cbi8vIGFkZCBhbiBvYmplY3QgdG8gdGhlIHN0b3JlXG5LZXlUcmVlU3RvcmUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChrZXlwYXRoLCBvYmopIHtcbiAgICB2YXIgYXJyID0gdGhpcy5zdG9yYWdlW2tleXBhdGhdIHx8ICh0aGlzLnN0b3JhZ2Vba2V5cGF0aF0gPSBbXSk7XG4gICAgYXJyLnB1c2gob2JqKTtcbn07XG5cbi8vIHJlbW92ZSBhbiBvYmplY3RcbktleVRyZWVTdG9yZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKG9iaikge1xuICAgIHZhciBwYXRoLCBhcnI7XG4gICAgZm9yIChwYXRoIGluIHRoaXMuc3RvcmFnZSkge1xuICAgICAgICBhcnIgPSB0aGlzLnN0b3JhZ2VbcGF0aF07XG4gICAgICAgIGFyci5zb21lKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICAgICAgaWYgKGl0ZW0gPT09IG9iaikge1xuICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG4vLyBnZXQgYXJyYXkgb2YgYWxsIGFsbCByZWxldmFudCBmdW5jdGlvbnMsIHdpdGhvdXQga2V5c1xuS2V5VHJlZVN0b3JlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5cGF0aCkge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIga2V5O1xuXG4gICAgZm9yIChrZXkgaW4gdGhpcy5zdG9yYWdlKSB7XG4gICAgICAgIGlmICgha2V5cGF0aCB8fCBrZXlwYXRoID09PSBrZXkgfHwga2V5LmluZGV4T2Yoa2V5cGF0aCArIHRoaXMuc2VwYXJhdG9yKSA9PT0gMCkge1xuICAgICAgICAgICAgcmVzID0gcmVzLmNvbmNhdCh0aGlzLnN0b3JhZ2Vba2V5XSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xufTtcblxuLy8gZ2V0IGFsbCByZXN1bHRzIHRoYXQgbWF0Y2gga2V5cGF0aCBidXQgc3RpbGwgZ3JvdXBlZCBieSBrZXlcbktleVRyZWVTdG9yZS5wcm90b3R5cGUuZ2V0R3JvdXBlZCA9IGZ1bmN0aW9uIChrZXlwYXRoKSB7XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIHZhciBrZXk7XG5cbiAgICBmb3IgKGtleSBpbiB0aGlzLnN0b3JhZ2UpIHtcbiAgICAgICAgaWYgKCFrZXlwYXRoIHx8IGtleXBhdGggPT09IGtleSB8fCBrZXkuaW5kZXhPZihrZXlwYXRoICsgdGhpcy5zZXBhcmF0b3IpID09PSAwKSB7XG4gICAgICAgICAgICByZXNba2V5XSA9IHNsaWNlLmNhbGwodGhpcy5zdG9yYWdlW2tleV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbn07XG5cbi8vIGdldCBhbGwgcmVzdWx0cyB0aGF0IG1hdGNoIGtleXBhdGggYnV0IHN0aWxsIGdyb3VwZWQgYnkga2V5XG5LZXlUcmVlU3RvcmUucHJvdG90eXBlLmdldEFsbCA9IGZ1bmN0aW9uIChrZXlwYXRoKSB7XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIHZhciBrZXk7XG5cbiAgICBmb3IgKGtleSBpbiB0aGlzLnN0b3JhZ2UpIHtcbiAgICAgICAgaWYgKGtleXBhdGggPT09IGtleSB8fCBrZXkuaW5kZXhPZihrZXlwYXRoICsgdGhpcy5zZXBhcmF0b3IpID09PSAwKSB7XG4gICAgICAgICAgICByZXNba2V5XSA9IHNsaWNlLmNhbGwodGhpcy5zdG9yYWdlW2tleV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbn07XG5cbi8vIHJ1biBhbGwgbWF0Y2hlcyB3aXRoIG9wdGlvbmFsIGNvbnRleHRcbktleVRyZWVTdG9yZS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKGtleXBhdGgsIGNvbnRleHQpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICB0aGlzLmdldChrZXlwYXRoKS5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgICBmbi5hcHBseShjb250ZXh0IHx8IHRoaXMsIGFyZ3MpO1xuICAgIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBLZXlUcmVlU3RvcmU7XG4iLCJmdW5jdGlvbiBpc0hUTUxFbGVtZW50IChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJlxuICAgICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JykgJiZcbiAgICAob2JqLm5vZGVUeXBlID09PSAxKSAmJlxuICAgICh0eXBlb2Ygb2JqLnN0eWxlID09PSAnb2JqZWN0JykgJiZcbiAgICAodHlwZW9mIG9iai5vd25lckRvY3VtZW50ID09PSAnb2JqZWN0Jylcbn1cblxuZnVuY3Rpb24gaXNBIChvYmopIHtcbiAgcmV0dXJuIGlzSFRNTEVsZW1lbnQob2JqKSAmJiBvYmoudGFnTmFtZSA9PT0gJ0EnXG59XG5cbmZ1bmN0aW9uIGNsb3Nlc3RBIChjaGVja05vZGUpIHtcbiAgZG8ge1xuICAgIGlmIChpc0EoY2hlY2tOb2RlKSkge1xuICAgICAgcmV0dXJuIGNoZWNrTm9kZVxuICAgIH1cbiAgfSB3aGlsZSAoKGNoZWNrTm9kZSA9IGNoZWNrTm9kZS5wYXJlbnROb2RlKSlcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTGVhZGluZ1NsYXNoIChwYXRobmFtZSkge1xuICBpZiAocGF0aG5hbWUuY2hhckF0KDApICE9PSAnLycpIHtcbiAgICBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lXG4gIH1cbiAgcmV0dXJuIHBhdGhuYW1lXG59XG5cbmZ1bmN0aW9uIGlzUmVsYXRpdmVVcmwgKGhyZWYpIHtcbiAgdmFyIHIgPSAvXmh0dHBzPzpcXC9cXC98XlxcL1xcLy9pXG4gIHJldHVybiAhci50ZXN0KGhyZWYpXG59XG5cbmZ1bmN0aW9uIGlzU2Vjb25kYXJ5QnV0dG9uIChldmVudCkge1xuICByZXR1cm4gKHR5cGVvZiBldmVudCA9PT0gJ29iamVjdCcpICYmICgnYnV0dG9uJyBpbiBldmVudCkgJiYgZXZlbnQuYnV0dG9uICE9PSAwXG59XG5cbi8vIFsxXSBodHRwOi8vYmxvZ3MubXNkbi5jb20vYi9pZWludGVybmFscy9hcmNoaXZlLzIwMTEvMDIvMjgvaW50ZXJuZXQtZXhwbG9yZXItd2luZG93LWxvY2F0aW9uLXBhdGhuYW1lLW1pc3Npbmctc2xhc2gtYW5kLWhvc3QtaGFzLXBvcnQuYXNweFxuLy8gWzJdIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9jYXRjaC1saW5rcy9ibG9iLzdhZWUyMTljZGMyYzg0NWM3OGNhYWQ2MDcwODg2YTkzODBiOTBlNGMvaW5kZXguanMjTDEzLUwxN1xuLy8gWzNdIElFMTAgKGFuZCBwb3NzaWJseSBsYXRlcikgcmVwb3J0IHRoYXQgYW5jaG9yLnBvcnQgaXMgdGhlIGRlZmF1bHQgcG9ydFxuLy8gICAgIGJ1dCBkb250IGFwcGVuZCBpdCB0byB0aGUgaG9zdG5hbWUsIHNvIGlmIHRoZSBob3N0IGRvZXNudCBlbmQgd2l0aCB0aGUgcG9ydFxuLy8gICAgIGFwcGVuZCBpdCB0byB0aGUgYW5jaG9yIGhvc3QgYXMgd2VsbFxuXG5mdW5jdGlvbiBpc0xvY2FsIChldmVudCwgYW5jaG9yLCBsb29rRm9ySGFzaCkge1xuICBldmVudCB8fCAoZXZlbnQgPSB7fSlcblxuICAvLyBTa2lwIG1vZGlmaWVyIGV2ZW50c1xuICBpZiAoZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtleSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyBTa2lwIG5vbi1wcmltYXJ5IGNsaWNrc1xuICBpZiAoaXNTZWNvbmRhcnlCdXR0b24oZXZlbnQpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIElmIHdlIGhhdmUgYW4gYW5jaG9yIGJ1dCBpdHMgbm90IGFuIEEgdGFnXG4gIC8vIHRyeSB0byBmaW5kIHRoZSBjbG9zZXN0IG9uZVxuICBpZiAoYW5jaG9yICYmICFpc0EoYW5jaG9yKSkge1xuICAgIGFuY2hvciA9IGNsb3Nlc3RBKGFuY2hvcilcbiAgfVxuXG4gIC8vIE9ubHkgdGVzdCBhbmNob3IgZWxlbWVudHNcbiAgaWYgKCFhbmNob3IgfHwgIWlzQShhbmNob3IpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIERvbnQgdGVzdCBhbmNob3JzIHdpdGggdGFyZ2V0PV9ibGFua1xuICBpZiAoYW5jaG9yLnRhcmdldCA9PT0gJ19ibGFuaycpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gSUU5IGRvZXNuJ3QgcHV0IGEgbGVhZGluZyBzbGFzaCBvbiBhbmNob3IucGF0aG5hbWUgWzFdXG4gIHZhciBhUGF0aG5hbWUgPSBub3JtYWxpemVMZWFkaW5nU2xhc2goYW5jaG9yLnBhdGhuYW1lKVxuICB2YXIgd1BhdGhuYW1lID0gbm9ybWFsaXplTGVhZGluZ1NsYXNoKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSlcbiAgdmFyIGFIb3N0ID0gYW5jaG9yLmhvc3RcbiAgdmFyIGFQb3J0ID0gYW5jaG9yLnBvcnRcbiAgdmFyIHdIb3N0ID0gd2luZG93LmxvY2F0aW9uLmhvc3RcbiAgdmFyIHdQb3J0ID0gd2luZG93LmxvY2F0aW9uLnBvcnRcblxuICAvLyBJbiBzb21lIGNhc2VzLCBJRSB3aWxsIGhhdmUgYSBibGFuayBob3N0IHByb3BlcnR5IHdoZW4gdGhlIGhyZWZcbiAgLy8gaXMgYSByZWxhdGl2ZSBVUkwuIFdlIGNhbiBjaGVjayBmb3IgcmVsYXRpdmVuZXNzIHZpYSB0aGUgYWNob3Inc1xuICAvLyBocmVmIGF0dHJpYnV0ZSBhbmQgdGhlbiBzZXQgdGhlIGFuY2hvcidzIGhvc3QgdG8gdGhlIHdpbmRvdydzIGhvc3QuXG4gIGlmIChhSG9zdCA9PT0gJycgJiZcbiAgICAnYXR0cmlidXRlcycgaW4gYW5jaG9yICYmXG4gICAgJ2hyZWYnIGluIGFuY2hvci5hdHRyaWJ1dGVzICYmXG4gICAgJ3ZhbHVlJyBpbiBhbmNob3IuYXR0cmlidXRlcy5ocmVmICYmXG4gICAgaXNSZWxhdGl2ZVVybChhbmNob3IuYXR0cmlidXRlcy5ocmVmLnZhbHVlKSkge1xuICAgIGFIb3N0ID0gd0hvc3RcbiAgfVxuXG4gIC8vIFNvbWUgYnJvd3NlcnMgKENocm9tZSAzNikgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBmb3IgYW5jaG9yLmhhc2hcbiAgLy8gZXZlbiB3aGVuIGhyZWY9XCIjXCIsIHNvIHdlIGFsc28gY2hlY2sgdGhlIGhyZWZcbiAgdmFyIGFIYXNoID0gYW5jaG9yLmhhc2ggfHwgKGFuY2hvci5ocmVmLmluZGV4T2YoJyMnKSA+IC0xID8gJyMnICsgYW5jaG9yLmhyZWYuc3BsaXQoJyMnKVsxXSA6IG51bGwpXG4gIHZhciBpblBhZ2VIYXNoXG5cbiAgLy8gV2luZG93IGhhcyBubyBwb3J0LCBidXQgYW5jaG9yIGhhcyB0aGUgZGVmYXVsdCBwb3J0XG4gIGlmICghd1BvcnQgJiYgYVBvcnQgJiYgKGFQb3J0ID09PSAnODAnIHx8IGFQb3J0ID09PSAnNDQzJykpIHtcbiAgICAvLyBJRTkgc29tZXRpbWVzIGluY2x1ZGVzIHRoZSBkZWZhdWx0IHBvcnQgKDgwIG9yIDQ0Mykgb24gYW5jaG9yLmhvc3RcbiAgICAvLyBzbyB3ZSBhcHBlbmQgdGhlIGRlZmF1bHQgcG9ydCB0byB0aGUgd2luZG93IGhvc3QgaW4gdGhpcyBjYXNlXG4gICAgLy8gc28gdGhleSB3aWxsIG1hdGNoIGZvciB0aGUgaG9zdCBlcXVhbGl0eSBjaGVjayBbMV1cbiAgICB3SG9zdCArPSAnOicgKyBhUG9ydFxuICAgIGFIb3N0ICs9IGFIb3N0LmluZGV4T2YoYVBvcnQsIGFIb3N0Lmxlbmd0aCAtIGFQb3J0Lmxlbmd0aCkgPT09IC0xID8gJzonICsgYVBvcnQgOiAnJyAvLyBbM11cbiAgfVxuXG4gIC8vIEhvc3RzIGFyZSB0aGUgc2FtZSwgaXRzIGEgbG9jYWwgbGlua1xuICBpZiAoYUhvc3QgPT09IHdIb3N0KSB7XG4gICAgLy8gSWYgZXZlcnl0aGluZyBlbHNlIGlzIHRoZSBzYW1lXG4gICAgLy8gYW5kIGhhc2ggZXhpc3RzLCB0aGVuIGl0IGlzIGFuIGluLXBhZ2UgaGFzaCBbMl1cbiAgICBpblBhZ2VIYXNoID1cbiAgICAgIGFQYXRobmFtZSA9PT0gd1BhdGhuYW1lICYmXG4gICAgICBhbmNob3Iuc2VhcmNoID09PSB3aW5kb3cubG9jYXRpb24uc2VhcmNoICYmXG4gICAgICBhSGFzaFxuXG4gICAgaWYgKGxvb2tGb3JIYXNoID09PSB0cnVlKSB7XG4gICAgICAvLyBJZiB3ZSBhcmUgbG9va2luZyBmb3IgdGhlIGhhc2ggdGhlbiB0aGlzIHdpbGxcbiAgICAgIC8vIG9ubHkgcmV0dXJuIGEgdHJ1dGh5IHZhbHVlIGlmIHRoZSBsaW5rXG4gICAgICAvLyBpcyBhbiAqaW4tcGFnZSogaGFzaCBsaW5rXG4gICAgICByZXR1cm4gaW5QYWdlSGFzaFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiB0aGlzIGlzIGFuIGluIHBhZ2UgaGFzaCBsaW5rXG4gICAgICAvLyB0aGVuIGlnbm9yZSBpdCBiZWNhdXNlIHdlIHdlcmVudCBsb29raW5nIGZvciBoYXNoIGxpbmtzXG4gICAgICByZXR1cm4gaW5QYWdlSGFzaFxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiBhUGF0aG5hbWUgKyAoYW5jaG9yLnNlYXJjaCB8fCAnJykgKyAoYUhhc2ggfHwgJycpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuLy8gVGFrZSB0d28gYXJndW1lbnRzIGFuZCByZXR1cm4gYW4gb3JkZXJlZCBhcnJheSBvZiBbZXZlbnQsIGFuY2hvcl1cbmZ1bmN0aW9uIGdldEV2ZW50QW5kQW5jaG9yIChhcmcxLCBhcmcyKSB7XG4gIHZhciBldiA9IG51bGxcbiAgdmFyIGFuY2hvciA9IG51bGxcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIC8vIFR3byBhcmd1bWVudHMgd2lsbCBjb21lIGluIHRoaXMgb3JkZXJcbiAgICBldiA9IGFyZzFcbiAgICBhbmNob3IgPSBhcmcyXG4gIH0gZWxzZSBpZiAoaXNIVE1MRWxlbWVudChhcmcxKSkge1xuICAgIC8vIElmIG91ciBmaXJzdCBhcmcgaXMgYW4gZWxlbWVudFxuICAgIC8vIHRoZW4gdXNlIHRoYXQgYXMgb3VyIGFuY2hvclxuICAgIGFuY2hvciA9IGFyZzFcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2Ugb3VyIGFyZ3VtZW50IGlzIGFuIGV2ZW50XG4gICAgZXYgPSBhcmcxXG4gIH1cblxuICAgIC8vIElmIHRoZXJlIGlzIG5vIGFuY2hvciwgYnV0IHdlIGhhdmUgYW4gZXZlbnRcbiAgICAvLyB0aGVuIHVzZSBldmVudC50YXJnZXRcbiAgaWYgKCFhbmNob3IgJiYgZXYgJiYgZXYudGFyZ2V0KSB7XG4gICAgYW5jaG9yID0gZXYudGFyZ2V0XG4gIH1cblxuICAgIC8vIFJldHVybiBhbiBhcnJheSBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIHdpdGggRnVuY3Rpb24uYXBwbHlcbiAgcmV0dXJuIFtldiwgYW5jaG9yXVxufVxuXG4vLyBGdW5jdGlvbnMgdG8gYmUgdXNlZCBpbiBleHBvcnRzLiBEZWZpbmVkIGhlcmUgZm9yIGFsaWFzIHB1cnBvc2VzXG5mdW5jdGlvbiBwYXRobmFtZSAoKSB7XG4gIHJldHVybiBpc0xvY2FsLmFwcGx5KG51bGwsIGdldEV2ZW50QW5kQW5jaG9yLmFwcGx5KG51bGwsIGFyZ3VtZW50cykpXG59XG5cbmZ1bmN0aW9uIGhhc2ggKCkge1xuICByZXR1cm4gaXNMb2NhbC5hcHBseShudWxsLCBnZXRFdmVudEFuZEFuY2hvci5hcHBseShudWxsLCBhcmd1bWVudHMpLmNvbmNhdCh0cnVlKSlcbn1cblxuZnVuY3Rpb24gYWN0aXZlICgpIHtcbiAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpXG4gIHZhciBsYXN0ID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdXG4gIHZhciBjaGVja1BhdGggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWVcblxuICBpZiAodHlwZW9mIGxhc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgY2hlY2tQYXRoID0gbGFzdFxuICAgIGFyZ3MgPSBhcmdzLnNsaWNlKDAsIC0xKVxuICB9XG5cbiAgcmV0dXJuIHBhdGhuYW1lLmFwcGx5KG51bGwsIGFyZ3MpID09PSBub3JtYWxpemVMZWFkaW5nU2xhc2goY2hlY2tQYXRoKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNMb2NhbDogaXNMb2NhbCxcbiAgcGF0aG5hbWU6IHBhdGhuYW1lLFxuICBnZXRMb2NhbFBhdGhuYW1lOiBwYXRobmFtZSxcbiAgaGFzaDogaGFzaCxcbiAgZ2V0TG9jYWxIYXNoOiBoYXNoLFxuICBhY3RpdmU6IGFjdGl2ZSxcbiAgaXNBY3RpdmU6IGFjdGl2ZVxufVxuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBEYXRhVmlldyA9IGdldE5hdGl2ZShyb290LCAnRGF0YVZpZXcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBEYXRhVmlldztcbiIsInZhciBoYXNoQ2xlYXIgPSByZXF1aXJlKCcuL19oYXNoQ2xlYXInKSxcbiAgICBoYXNoRGVsZXRlID0gcmVxdWlyZSgnLi9faGFzaERlbGV0ZScpLFxuICAgIGhhc2hHZXQgPSByZXF1aXJlKCcuL19oYXNoR2V0JyksXG4gICAgaGFzaEhhcyA9IHJlcXVpcmUoJy4vX2hhc2hIYXMnKSxcbiAgICBoYXNoU2V0ID0gcmVxdWlyZSgnLi9faGFzaFNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoO1xuIiwidmFyIGJhc2VDcmVhdGUgPSByZXF1aXJlKCcuL19iYXNlQ3JlYXRlJyksXG4gICAgYmFzZUxvZGFzaCA9IHJlcXVpcmUoJy4vX2Jhc2VMb2Rhc2gnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdGhlIG1heGltdW0gbGVuZ3RoIGFuZCBpbmRleCBvZiBhbiBhcnJheS4gKi9cbnZhciBNQVhfQVJSQVlfTEVOR1RIID0gNDI5NDk2NzI5NTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbGF6eSB3cmFwcGVyIG9iamVjdCB3aGljaCB3cmFwcyBgdmFsdWVgIHRvIGVuYWJsZSBsYXp5IGV2YWx1YXRpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcC5cbiAqL1xuZnVuY3Rpb24gTGF6eVdyYXBwZXIodmFsdWUpIHtcbiAgdGhpcy5fX3dyYXBwZWRfXyA9IHZhbHVlO1xuICB0aGlzLl9fYWN0aW9uc19fID0gW107XG4gIHRoaXMuX19kaXJfXyA9IDE7XG4gIHRoaXMuX19maWx0ZXJlZF9fID0gZmFsc2U7XG4gIHRoaXMuX19pdGVyYXRlZXNfXyA9IFtdO1xuICB0aGlzLl9fdGFrZUNvdW50X18gPSBNQVhfQVJSQVlfTEVOR1RIO1xuICB0aGlzLl9fdmlld3NfXyA9IFtdO1xufVxuXG4vLyBFbnN1cmUgYExhenlXcmFwcGVyYCBpcyBhbiBpbnN0YW5jZSBvZiBgYmFzZUxvZGFzaGAuXG5MYXp5V3JhcHBlci5wcm90b3R5cGUgPSBiYXNlQ3JlYXRlKGJhc2VMb2Rhc2gucHJvdG90eXBlKTtcbkxhenlXcmFwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExhenlXcmFwcGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExhenlXcmFwcGVyO1xuIiwidmFyIGxpc3RDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlQ2xlYXInKSxcbiAgICBsaXN0Q2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVEZWxldGUnKSxcbiAgICBsaXN0Q2FjaGVHZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVHZXQnKSxcbiAgICBsaXN0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVIYXMnKSxcbiAgICBsaXN0Q2FjaGVTZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExpc3RDYWNoZTtcbiIsInZhciBiYXNlQ3JlYXRlID0gcmVxdWlyZSgnLi9fYmFzZUNyZWF0ZScpLFxuICAgIGJhc2VMb2Rhc2ggPSByZXF1aXJlKCcuL19iYXNlTG9kYXNoJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgY29uc3RydWN0b3IgZm9yIGNyZWF0aW5nIGBsb2Rhc2hgIHdyYXBwZXIgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoYWluQWxsXSBFbmFibGUgZXhwbGljaXQgbWV0aG9kIGNoYWluIHNlcXVlbmNlcy5cbiAqL1xuZnVuY3Rpb24gTG9kYXNoV3JhcHBlcih2YWx1ZSwgY2hhaW5BbGwpIHtcbiAgdGhpcy5fX3dyYXBwZWRfXyA9IHZhbHVlO1xuICB0aGlzLl9fYWN0aW9uc19fID0gW107XG4gIHRoaXMuX19jaGFpbl9fID0gISFjaGFpbkFsbDtcbiAgdGhpcy5fX2luZGV4X18gPSAwO1xuICB0aGlzLl9fdmFsdWVzX18gPSB1bmRlZmluZWQ7XG59XG5cbkxvZGFzaFdyYXBwZXIucHJvdG90eXBlID0gYmFzZUNyZWF0ZShiYXNlTG9kYXNoLnByb3RvdHlwZSk7XG5Mb2Rhc2hXcmFwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvZGFzaFdyYXBwZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gTG9kYXNoV3JhcHBlcjtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdNYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXA7XG4iLCJ2YXIgbWFwQ2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX21hcENhY2hlQ2xlYXInKSxcbiAgICBtYXBDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX21hcENhY2hlRGVsZXRlJyksXG4gICAgbWFwQ2FjaGVHZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZUdldCcpLFxuICAgIG1hcENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVIYXMnKSxcbiAgICBtYXBDYWNoZVNldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcENhY2hlO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBQcm9taXNlID0gZ2V0TmF0aXZlKHJvb3QsICdQcm9taXNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgU2V0ID0gZ2V0TmF0aXZlKHJvb3QsICdTZXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZXQ7XG4iLCJ2YXIgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpLFxuICAgIHNldENhY2hlQWRkID0gcmVxdWlyZSgnLi9fc2V0Q2FjaGVBZGQnKSxcbiAgICBzZXRDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX3NldENhY2hlSGFzJyk7XG5cbi8qKlxuICpcbiAqIENyZWF0ZXMgYW4gYXJyYXkgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIHVuaXF1ZSB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU2V0Q2FjaGUodmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzID09IG51bGwgPyAwIDogdmFsdWVzLmxlbmd0aDtcblxuICB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHRoaXMuYWRkKHZhbHVlc1tpbmRleF0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTZXRDYWNoZWAuXG5TZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBzZXRDYWNoZUFkZDtcblNldENhY2hlLnByb3RvdHlwZS5oYXMgPSBzZXRDYWNoZUhhcztcblxubW9kdWxlLmV4cG9ydHMgPSBTZXRDYWNoZTtcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBzdGFja0NsZWFyID0gcmVxdWlyZSgnLi9fc3RhY2tDbGVhcicpLFxuICAgIHN0YWNrRGVsZXRlID0gcmVxdWlyZSgnLi9fc3RhY2tEZWxldGUnKSxcbiAgICBzdGFja0dldCA9IHJlcXVpcmUoJy4vX3N0YWNrR2V0JyksXG4gICAgc3RhY2tIYXMgPSByZXF1aXJlKCcuL19zdGFja0hhcycpLFxuICAgIHN0YWNrU2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTdGFja2AuXG5TdGFjay5wcm90b3R5cGUuY2xlYXIgPSBzdGFja0NsZWFyO1xuU3RhY2sucHJvdG90eXBlWydkZWxldGUnXSA9IHN0YWNrRGVsZXRlO1xuU3RhY2sucHJvdG90eXBlLmdldCA9IHN0YWNrR2V0O1xuU3RhY2sucHJvdG90eXBlLmhhcyA9IHN0YWNrSGFzO1xuU3RhY2sucHJvdG90eXBlLnNldCA9IHN0YWNrU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YWNrO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbDtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBVaW50OEFycmF5ID0gcm9vdC5VaW50OEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVpbnQ4QXJyYXk7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFdlYWtNYXAgPSBnZXROYXRpdmUocm9vdCwgJ1dlYWtNYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBXZWFrTWFwO1xuIiwiLyoqXG4gKiBBIGZhc3RlciBhbHRlcm5hdGl2ZSB0byBgRnVuY3Rpb24jYXBwbHlgLCB0aGlzIGZ1bmN0aW9uIGludm9rZXMgYGZ1bmNgXG4gKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cbiAqL1xuZnVuY3Rpb24gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncykge1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFwcGx5O1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZm9yRWFjaGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RWFjaChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkgPT09IGZhbHNlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5RWFjaDtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZpbHRlcmAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheUZpbHRlcihhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXNJbmRleCA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUZpbHRlcjtcbiIsInZhciBiYXNlSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Jhc2VJbmRleE9mJyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluY2x1ZGVzYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIHNwZWNpZnlpbmcgYW4gaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHRhcmdldCBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdGFyZ2V0YCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheUluY2x1ZGVzKGFycmF5LCB2YWx1ZSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiAhIWxlbmd0aCAmJiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIDApID4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlJbmNsdWRlcztcbiIsIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBhcnJheUluY2x1ZGVzYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGEgY29tcGFyYXRvci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyYXRvciBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXNXaXRoKGFycmF5LCB2YWx1ZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIGFycmF5W2luZGV4XSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4iLCJ2YXIgYmFzZVRpbWVzID0gcmVxdWlyZSgnLi9fYmFzZVRpbWVzJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TGlrZUtleXM7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TWFwO1xuIiwiLyoqXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXBwZW5kLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHZhbHVlc1tpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5UHVzaDtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheVNvbWUoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlTb21lO1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBhbiBBU0NJSSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXNjaWlUb0FycmF5KHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnNwbGl0KCcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc2NpaVRvQXJyYXk7XG4iLCJ2YXIgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV07XG4gIGlmICghKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGVxKG9ialZhbHVlLCB2YWx1ZSkpIHx8XG4gICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzaWduVmFsdWU7XG4iLCJ2YXIgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGlmIChlcShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XG4gICAgICByZXR1cm4gbGVuZ3RoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzb2NJbmRleE9mO1xuIiwidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbmAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzXG4gKiBvciBgY3VzdG9taXplcmAgZnVuY3Rpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnbihvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnbjtcbiIsInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ25JbihvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQXNzaWduSW47XG4iLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ25WYWx1ZTtcbiIsInZhciBTdGFjayA9IHJlcXVpcmUoJy4vX1N0YWNrJyksXG4gICAgYXJyYXlFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXlFYWNoJyksXG4gICAgYXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25WYWx1ZScpLFxuICAgIGJhc2VBc3NpZ24gPSByZXF1aXJlKCcuL19iYXNlQXNzaWduJyksXG4gICAgYmFzZUFzc2lnbkluID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnbkluJyksXG4gICAgY2xvbmVCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUJ1ZmZlcicpLFxuICAgIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpLFxuICAgIGNvcHlTeW1ib2xzID0gcmVxdWlyZSgnLi9fY29weVN5bWJvbHMnKSxcbiAgICBjb3B5U3ltYm9sc0luID0gcmVxdWlyZSgnLi9fY29weVN5bWJvbHNJbicpLFxuICAgIGdldEFsbEtleXMgPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzJyksXG4gICAgZ2V0QWxsS2V5c0luID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5c0luJyksXG4gICAgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaW5pdENsb25lQXJyYXkgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVBcnJheScpLFxuICAgIGluaXRDbG9uZUJ5VGFnID0gcmVxdWlyZSgnLi9faW5pdENsb25lQnlUYWcnKSxcbiAgICBpbml0Q2xvbmVPYmplY3QgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVPYmplY3QnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNNYXAgPSByZXF1aXJlKCcuL2lzTWFwJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNTZXQgPSByZXF1aXJlKCcuL2lzU2V0JyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX0RFRVBfRkxBRyA9IDEsXG4gICAgQ0xPTkVfRkxBVF9GTEFHID0gMixcbiAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIHN1cHBvcnRlZCBieSBgXy5jbG9uZWAuICovXG52YXIgY2xvbmVhYmxlVGFncyA9IHt9O1xuY2xvbmVhYmxlVGFnc1thcmdzVGFnXSA9IGNsb25lYWJsZVRhZ3NbYXJyYXlUYWddID1cbmNsb25lYWJsZVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gY2xvbmVhYmxlVGFnc1tkYXRhVmlld1RhZ10gPVxuY2xvbmVhYmxlVGFnc1tib29sVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0ZVRhZ10gPVxuY2xvbmVhYmxlVGFnc1tmbG9hdDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZmxvYXQ2NFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbaW50MTZUYWddID1cbmNsb25lYWJsZVRhZ3NbaW50MzJUYWddID0gY2xvbmVhYmxlVGFnc1ttYXBUYWddID1cbmNsb25lYWJsZVRhZ3NbbnVtYmVyVGFnXSA9IGNsb25lYWJsZVRhZ3Nbb2JqZWN0VGFnXSA9XG5jbG9uZWFibGVUYWdzW3JlZ2V4cFRhZ10gPSBjbG9uZWFibGVUYWdzW3NldFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tzdHJpbmdUYWddID0gY2xvbmVhYmxlVGFnc1tzeW1ib2xUYWddID1cbmNsb25lYWJsZVRhZ3NbdWludDhUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50OENsYW1wZWRUYWddID1cbmNsb25lYWJsZVRhZ3NbdWludDE2VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG5jbG9uZWFibGVUYWdzW2Vycm9yVGFnXSA9IGNsb25lYWJsZVRhZ3NbZnVuY1RhZ10gPVxuY2xvbmVhYmxlVGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNsb25lYCBhbmQgYF8uY2xvbmVEZWVwYCB3aGljaCB0cmFja3NcbiAqIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gRGVlcCBjbG9uZVxuICogIDIgLSBGbGF0dGVuIGluaGVyaXRlZCBwcm9wZXJ0aWVzXG4gKiAgNCAtIENsb25lIHN5bWJvbHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gVGhlIGtleSBvZiBgdmFsdWVgLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBwYXJlbnQgb2JqZWN0IG9mIGB2YWx1ZWAuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIG9iamVjdHMgYW5kIHRoZWlyIGNsb25lIGNvdW50ZXJwYXJ0cy5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBjbG9uZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VDbG9uZSh2YWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCBvYmplY3QsIHN0YWNrKSB7XG4gIHZhciByZXN1bHQsXG4gICAgICBpc0RlZXAgPSBiaXRtYXNrICYgQ0xPTkVfREVFUF9GTEFHLFxuICAgICAgaXNGbGF0ID0gYml0bWFzayAmIENMT05FX0ZMQVRfRkxBRyxcbiAgICAgIGlzRnVsbCA9IGJpdG1hc2sgJiBDTE9ORV9TWU1CT0xTX0ZMQUc7XG5cbiAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICByZXN1bHQgPSBvYmplY3QgPyBjdXN0b21pemVyKHZhbHVlLCBrZXksIG9iamVjdCwgc3RhY2spIDogY3VzdG9taXplcih2YWx1ZSk7XG4gIH1cbiAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKTtcbiAgaWYgKGlzQXJyKSB7XG4gICAgcmVzdWx0ID0gaW5pdENsb25lQXJyYXkodmFsdWUpO1xuICAgIGlmICghaXNEZWVwKSB7XG4gICAgICByZXR1cm4gY29weUFycmF5KHZhbHVlLCByZXN1bHQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKSxcbiAgICAgICAgaXNGdW5jID0gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZztcblxuICAgIGlmIChpc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjbG9uZUJ1ZmZlcih2YWx1ZSwgaXNEZWVwKTtcbiAgICB9XG4gICAgaWYgKHRhZyA9PSBvYmplY3RUYWcgfHwgdGFnID09IGFyZ3NUYWcgfHwgKGlzRnVuYyAmJiAhb2JqZWN0KSkge1xuICAgICAgcmVzdWx0ID0gKGlzRmxhdCB8fCBpc0Z1bmMpID8ge30gOiBpbml0Q2xvbmVPYmplY3QodmFsdWUpO1xuICAgICAgaWYgKCFpc0RlZXApIHtcbiAgICAgICAgcmV0dXJuIGlzRmxhdFxuICAgICAgICAgID8gY29weVN5bWJvbHNJbih2YWx1ZSwgYmFzZUFzc2lnbkluKHJlc3VsdCwgdmFsdWUpKVxuICAgICAgICAgIDogY29weVN5bWJvbHModmFsdWUsIGJhc2VBc3NpZ24ocmVzdWx0LCB2YWx1ZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNsb25lYWJsZVRhZ3NbdGFnXSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0ID8gdmFsdWUgOiB7fTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IGluaXRDbG9uZUJ5VGFnKHZhbHVlLCB0YWcsIGlzRGVlcCk7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIGFuZCByZXR1cm4gaXRzIGNvcnJlc3BvbmRpbmcgY2xvbmUuXG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KHZhbHVlKTtcbiAgaWYgKHN0YWNrZWQpIHtcbiAgICByZXR1cm4gc3RhY2tlZDtcbiAgfVxuICBzdGFjay5zZXQodmFsdWUsIHJlc3VsdCk7XG5cbiAgaWYgKGlzU2V0KHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUpIHtcbiAgICAgIHJlc3VsdC5hZGQoYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdWJWYWx1ZSwgdmFsdWUsIHN0YWNrKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKGlzTWFwKHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkge1xuICAgICAgcmVzdWx0LnNldChrZXksIGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2spKTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICB2YXIga2V5c0Z1bmMgPSBpc0Z1bGxcbiAgICA/IChpc0ZsYXQgPyBnZXRBbGxLZXlzSW4gOiBnZXRBbGxLZXlzKVxuICAgIDogKGlzRmxhdCA/IGtleXNJbiA6IGtleXMpO1xuXG4gIHZhciBwcm9wcyA9IGlzQXJyID8gdW5kZWZpbmVkIDoga2V5c0Z1bmModmFsdWUpO1xuICBhcnJheUVhY2gocHJvcHMgfHwgdmFsdWUsIGZ1bmN0aW9uKHN1YlZhbHVlLCBrZXkpIHtcbiAgICBpZiAocHJvcHMpIHtcbiAgICAgIGtleSA9IHN1YlZhbHVlO1xuICAgICAgc3ViVmFsdWUgPSB2YWx1ZVtrZXldO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBwb3B1bGF0ZSBjbG9uZSAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCBiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgdmFsdWUsIHN0YWNrKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VDbG9uZTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXG4gKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xudmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIG9iamVjdCgpIHt9XG4gIHJldHVybiBmdW5jdGlvbihwcm90bykge1xuICAgIGlmICghaXNPYmplY3QocHJvdG8pKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGlmIChvYmplY3RDcmVhdGUpIHtcbiAgICAgIHJldHVybiBvYmplY3RDcmVhdGUocHJvdG8pO1xuICAgIH1cbiAgICBvYmplY3QucHJvdG90eXBlID0gcHJvdG87XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBvYmplY3Q7XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQ3JlYXRlO1xuIiwidmFyIFNldENhY2hlID0gcmVxdWlyZSgnLi9fU2V0Q2FjaGUnKSxcbiAgICBhcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlcycpLFxuICAgIGFycmF5SW5jbHVkZXNXaXRoID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlc1dpdGgnKSxcbiAgICBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgY2FjaGVIYXMgPSByZXF1aXJlKCcuL19jYWNoZUhhcycpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5kaWZmZXJlbmNlYCB3aXRob3V0IHN1cHBvcnRcbiAqIGZvciBleGNsdWRpbmcgbXVsdGlwbGUgYXJyYXlzIG9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gYmFzZURpZmZlcmVuY2UoYXJyYXksIHZhbHVlcywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXMsXG4gICAgICBpc0NvbW1vbiA9IHRydWUsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBbXSxcbiAgICAgIHZhbHVlc0xlbmd0aCA9IHZhbHVlcy5sZW5ndGg7XG5cbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChpdGVyYXRlZSkge1xuICAgIHZhbHVlcyA9IGFycmF5TWFwKHZhbHVlcywgYmFzZVVuYXJ5KGl0ZXJhdGVlKSk7XG4gIH1cbiAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXNXaXRoO1xuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gIH1cbiAgZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA+PSBMQVJHRV9BUlJBWV9TSVpFKSB7XG4gICAgaW5jbHVkZXMgPSBjYWNoZUhhcztcbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIHZhbHVlcyA9IG5ldyBTZXRDYWNoZSh2YWx1ZXMpO1xuICB9XG4gIG91dGVyOlxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA9PSBudWxsID8gdmFsdWUgOiBpdGVyYXRlZSh2YWx1ZSk7XG5cbiAgICB2YWx1ZSA9IChjb21wYXJhdG9yIHx8IHZhbHVlICE9PSAwKSA/IHZhbHVlIDogMDtcbiAgICBpZiAoaXNDb21tb24gJiYgY29tcHV0ZWQgPT09IGNvbXB1dGVkKSB7XG4gICAgICB2YXIgdmFsdWVzSW5kZXggPSB2YWx1ZXNMZW5ndGg7XG4gICAgICB3aGlsZSAodmFsdWVzSW5kZXgtLSkge1xuICAgICAgICBpZiAodmFsdWVzW3ZhbHVlc0luZGV4XSA9PT0gY29tcHV0ZWQpIHtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmICghaW5jbHVkZXModmFsdWVzLCBjb21wdXRlZCwgY29tcGFyYXRvcikpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRGlmZmVyZW5jZTtcbiIsInZhciBiYXNlRm9yT3duID0gcmVxdWlyZSgnLi9fYmFzZUZvck93bicpLFxuICAgIGNyZWF0ZUJhc2VFYWNoID0gcmVxdWlyZSgnLi9fY3JlYXRlQmFzZUVhY2gnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JFYWNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAqL1xudmFyIGJhc2VFYWNoID0gY3JlYXRlQmFzZUVhY2goYmFzZUZvck93bik7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUVhY2g7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbmRJbmRleGAgYW5kIGBfLmZpbmRMYXN0SW5kZXhgIHdpdGhvdXRcbiAqIHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgsIGZyb21SaWdodCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgaW5kZXggPSBmcm9tSW5kZXggKyAoZnJvbVJpZ2h0ID8gMSA6IC0xKTtcblxuICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRmluZEluZGV4O1xuIiwidmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGlzRmxhdHRlbmFibGUgPSByZXF1aXJlKCcuL19pc0ZsYXR0ZW5hYmxlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmxhdHRlbmAgd2l0aCBzdXBwb3J0IGZvciByZXN0cmljdGluZyBmbGF0dGVuaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBkZXB0aCBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcmVkaWNhdGU9aXNGbGF0dGVuYWJsZV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzU3RyaWN0XSBSZXN0cmljdCB0byB2YWx1ZXMgdGhhdCBwYXNzIGBwcmVkaWNhdGVgIGNoZWNrcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHQ9W11dIFRoZSBpbml0aWFsIHJlc3VsdCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZUZsYXR0ZW4oYXJyYXksIGRlcHRoLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgcHJlZGljYXRlIHx8IChwcmVkaWNhdGUgPSBpc0ZsYXR0ZW5hYmxlKTtcbiAgcmVzdWx0IHx8IChyZXN1bHQgPSBbXSk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKGRlcHRoID4gMCAmJiBwcmVkaWNhdGUodmFsdWUpKSB7XG4gICAgICBpZiAoZGVwdGggPiAxKSB7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGZsYXR0ZW4gYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIGJhc2VGbGF0dGVuKHZhbHVlLCBkZXB0aCAtIDEsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcnJheVB1c2gocmVzdWx0LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaXNTdHJpY3QpIHtcbiAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGbGF0dGVuO1xuIiwidmFyIGNyZWF0ZUJhc2VGb3IgPSByZXF1aXJlKCcuL19jcmVhdGVCYXNlRm9yJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGJhc2VGb3JPd25gIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYG9iamVjdGBcbiAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxuICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG52YXIgYmFzZUZvciA9IGNyZWF0ZUJhc2VGb3IoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRm9yO1xuIiwidmFyIGJhc2VGb3IgPSByZXF1aXJlKCcuL19iYXNlRm9yJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZvck93bmAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGb3JPd24ob2JqZWN0LCBpdGVyYXRlZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3Iob2JqZWN0LCBpdGVyYXRlZSwga2V5cyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZvck93bjtcbiIsInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gMCxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgIG9iamVjdCA9IG9iamVjdFt0b0tleShwYXRoW2luZGV4KytdKV07XG4gIH1cbiAgcmV0dXJuIChpbmRleCAmJiBpbmRleCA9PSBsZW5ndGgpID8gb2JqZWN0IDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXQ7XG4iLCJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRBbGxLZXlzYCBhbmQgYGdldEFsbEtleXNJbmAgd2hpY2ggdXNlc1xuICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XG4gIHZhciByZXN1bHQgPSBrZXlzRnVuYyhvYmplY3QpO1xuICByZXR1cm4gaXNBcnJheShvYmplY3QpID8gcmVzdWx0IDogYXJyYXlQdXNoKHJlc3VsdCwgc3ltYm9sc0Z1bmMob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldEFsbEtleXM7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgZ2V0UmF3VGFnID0gcmVxdWlyZSgnLi9fZ2V0UmF3VGFnJyksXG4gICAgb2JqZWN0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19vYmplY3RUb1N0cmluZycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0VGFnO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5oYXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VIYXMob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VIYXM7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmhhc0luYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGtleSBUaGUga2V5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSGFzSW4ob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGtleSBpbiBPYmplY3Qob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSGFzSW47XG4iLCJ2YXIgYmFzZUZpbmRJbmRleCA9IHJlcXVpcmUoJy4vX2Jhc2VGaW5kSW5kZXgnKSxcbiAgICBiYXNlSXNOYU4gPSByZXF1aXJlKCcuL19iYXNlSXNOYU4nKSxcbiAgICBzdHJpY3RJbmRleE9mID0gcmVxdWlyZSgnLi9fc3RyaWN0SW5kZXhPZicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmluZGV4T2ZgIHdpdGhvdXQgYGZyb21JbmRleGAgYm91bmRzIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlXG4gICAgPyBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KVxuICAgIDogYmFzZUZpbmRJbmRleChhcnJheSwgYmFzZUlzTmFOLCBmcm9tSW5kZXgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJbmRleE9mO1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKSxcbiAgICBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgbGFzdCA9IHJlcXVpcmUoJy4vbGFzdCcpLFxuICAgIHBhcmVudCA9IHJlcXVpcmUoJy4vX3BhcmVudCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pbnZva2VgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaW5kaXZpZHVhbFxuICogbWV0aG9kIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIG1ldGhvZCB0byBpbnZva2UuXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIHRoZSBtZXRob2Qgd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGludm9rZWQgbWV0aG9kLlxuICovXG5mdW5jdGlvbiBiYXNlSW52b2tlKG9iamVjdCwgcGF0aCwgYXJncykge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgb2JqZWN0ID0gcGFyZW50KG9iamVjdCwgcGF0aCk7XG4gIHZhciBmdW5jID0gb2JqZWN0ID09IG51bGwgPyBvYmplY3QgOiBvYmplY3RbdG9LZXkobGFzdChwYXRoKSldO1xuICByZXR1cm4gZnVuYyA9PSBudWxsID8gdW5kZWZpbmVkIDogYXBwbHkoZnVuYywgb2JqZWN0LCBhcmdzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSW52b2tlO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICovXG5mdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYXJnc1RhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNBcmd1bWVudHM7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0RhdGVgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZGF0ZSBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRGF0ZSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBkYXRlVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0RhdGU7XG4iLCJ2YXIgYmFzZUlzRXF1YWxEZWVwID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWxEZWVwJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAqICAyIC0gUGFydGlhbCBjb21wYXJpc29uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzT2JqZWN0TGlrZShvdGhlcikpKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gIH1cbiAgcmV0dXJuIGJhc2VJc0VxdWFsRGVlcCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGJhc2VJc0VxdWFsLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWw7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGVxdWFsQXJyYXlzID0gcmVxdWlyZSgnLi9fZXF1YWxBcnJheXMnKSxcbiAgICBlcXVhbEJ5VGFnID0gcmVxdWlyZSgnLi9fZXF1YWxCeVRhZycpLFxuICAgIGVxdWFsT2JqZWN0cyA9IHJlcXVpcmUoJy4vX2VxdWFsT2JqZWN0cycpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcbiAqIGRlZXAgY29tcGFyaXNvbnMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAqIHJlZmVyZW5jZXMgdG8gYmUgY29tcGFyZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBvYmpJc0FyciA9IGlzQXJyYXkob2JqZWN0KSxcbiAgICAgIG90aElzQXJyID0gaXNBcnJheShvdGhlciksXG4gICAgICBvYmpUYWcgPSBvYmpJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG9iamVjdCksXG4gICAgICBvdGhUYWcgPSBvdGhJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG90aGVyKTtcblxuICBvYmpUYWcgPSBvYmpUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG9ialRhZztcbiAgb3RoVGFnID0gb3RoVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvdGhUYWc7XG5cbiAgdmFyIG9iaklzT2JqID0gb2JqVGFnID09IG9iamVjdFRhZyxcbiAgICAgIG90aElzT2JqID0gb3RoVGFnID09IG9iamVjdFRhZyxcbiAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XG5cbiAgaWYgKGlzU2FtZVRhZyAmJiBpc0J1ZmZlcihvYmplY3QpKSB7XG4gICAgaWYgKCFpc0J1ZmZlcihvdGhlcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgb2JqSXNBcnIgPSB0cnVlO1xuICAgIG9iaklzT2JqID0gZmFsc2U7XG4gIH1cbiAgaWYgKGlzU2FtZVRhZyAmJiAhb2JqSXNPYmopIHtcbiAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgIHJldHVybiAob2JqSXNBcnIgfHwgaXNUeXBlZEFycmF5KG9iamVjdCkpXG4gICAgICA/IGVxdWFsQXJyYXlzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXG4gICAgICA6IGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgb2JqVGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgfVxuICBpZiAoIShiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcpKSB7XG4gICAgdmFyIG9iaklzV3JhcHBlZCA9IG9iaklzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAnX193cmFwcGVkX18nKSxcbiAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XG5cbiAgICBpZiAob2JqSXNXcmFwcGVkIHx8IG90aElzV3JhcHBlZCkge1xuICAgICAgdmFyIG9ialVud3JhcHBlZCA9IG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LFxuICAgICAgICAgIG90aFVud3JhcHBlZCA9IG90aElzV3JhcHBlZCA/IG90aGVyLnZhbHVlKCkgOiBvdGhlcjtcblxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgIHJldHVybiBlcXVhbEZ1bmMob2JqVW53cmFwcGVkLCBvdGhVbndyYXBwZWQsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1NhbWVUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgcmV0dXJuIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNFcXVhbERlZXA7XG4iLCJ2YXIgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWFwYCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNNYXAodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSBtYXBUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTWFwO1xuIiwidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBiYXNlSXNFcXVhbCA9IHJlcXVpcmUoJy4vX2Jhc2VJc0VxdWFsJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hdGNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAqIEBwYXJhbSB7QXJyYXl9IG1hdGNoRGF0YSBUaGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3MgdG8gbWF0Y2guXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBpcyBhIG1hdGNoLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBtYXRjaERhdGEsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGluZGV4ID0gbWF0Y2hEYXRhLmxlbmd0aCxcbiAgICAgIGxlbmd0aCA9IGluZGV4LFxuICAgICAgbm9DdXN0b21pemVyID0gIWN1c3RvbWl6ZXI7XG5cbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuICFsZW5ndGg7XG4gIH1cbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgdmFyIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xuICAgIGlmICgobm9DdXN0b21pemVyICYmIGRhdGFbMl0pXG4gICAgICAgICAgPyBkYXRhWzFdICE9PSBvYmplY3RbZGF0YVswXV1cbiAgICAgICAgICA6ICEoZGF0YVswXSBpbiBvYmplY3QpXG4gICAgICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xuICAgIHZhciBrZXkgPSBkYXRhWzBdLFxuICAgICAgICBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICBzcmNWYWx1ZSA9IGRhdGFbMV07XG5cbiAgICBpZiAobm9DdXN0b21pemVyICYmIGRhdGFbMl0pIHtcbiAgICAgIGlmIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3RhY2sgPSBuZXcgU3RhY2s7XG4gICAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgICB2YXIgcmVzdWx0ID0gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UsIHN0YWNrKTtcbiAgICAgIH1cbiAgICAgIGlmICghKHJlc3VsdCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGJhc2VJc0VxdWFsKHNyY1ZhbHVlLCBvYmpWYWx1ZSwgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgfCBDT01QQVJFX1VOT1JERVJFRF9GTEFHLCBjdXN0b21pemVyLCBzdGFjaylcbiAgICAgICAgICAgIDogcmVzdWx0XG4gICAgICAgICAgKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc01hdGNoO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hTmAgd2l0aG91dCBzdXBwb3J0IGZvciBudW1iZXIgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgTmFOYCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYU4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYU47XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTWFza2VkID0gcmVxdWlyZSgnLi9faXNNYXNrZWQnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTmF0aXZlO1xuIiwidmFyIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzZXRUYWcgPSAnW29iamVjdCBTZXRdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1NldGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzZXQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzU2V0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGdldFRhZyh2YWx1ZSkgPT0gc2V0VGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc1NldDtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNUeXBlZEFycmF5O1xuIiwidmFyIGJhc2VNYXRjaGVzID0gcmVxdWlyZSgnLi9fYmFzZU1hdGNoZXMnKSxcbiAgICBiYXNlTWF0Y2hlc1Byb3BlcnR5ID0gcmVxdWlyZSgnLi9fYmFzZU1hdGNoZXNQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBwcm9wZXJ0eSA9IHJlcXVpcmUoJy4vcHJvcGVydHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pdGVyYXRlZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gW3ZhbHVlPV8uaWRlbnRpdHldIFRoZSB2YWx1ZSB0byBjb252ZXJ0IHRvIGFuIGl0ZXJhdGVlLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBpdGVyYXRlZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUl0ZXJhdGVlKHZhbHVlKSB7XG4gIC8vIERvbid0IHN0b3JlIHRoZSBgdHlwZW9mYCByZXN1bHQgaW4gYSB2YXJpYWJsZSB0byBhdm9pZCBhIEpJVCBidWcgaW4gU2FmYXJpIDkuXG4gIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MDM0IGZvciBtb3JlIGRldGFpbHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBpZGVudGl0eTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGlzQXJyYXkodmFsdWUpXG4gICAgICA/IGJhc2VNYXRjaGVzUHJvcGVydHkodmFsdWVbMF0sIHZhbHVlWzFdKVxuICAgICAgOiBiYXNlTWF0Y2hlcyh2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHByb3BlcnR5KHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXRlcmF0ZWU7XG4iLCJ2YXIgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c2Agd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBrZXkgIT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5cztcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAgbmF0aXZlS2V5c0luID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5c0luJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c0luYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzSW4ob2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzSW4ob2JqZWN0KTtcbiAgfVxuICB2YXIgaXNQcm90byA9IGlzUHJvdG90eXBlKG9iamVjdCksXG4gICAgICByZXN1bHQgPSBbXTtcblxuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgaWYgKCEoa2V5ID09ICdjb25zdHJ1Y3RvcicgJiYgKGlzUHJvdG8gfHwgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXNJbjtcbiIsIi8qKlxuICogVGhlIGZ1bmN0aW9uIHdob3NlIHByb3RvdHlwZSBjaGFpbiBzZXF1ZW5jZSB3cmFwcGVycyBpbmhlcml0IGZyb20uXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYmFzZUxvZGFzaCgpIHtcbiAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTG9kYXNoO1xuIiwidmFyIGJhc2VJc01hdGNoID0gcmVxdWlyZSgnLi9fYmFzZUlzTWF0Y2gnKSxcbiAgICBnZXRNYXRjaERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXRjaERhdGEnKSxcbiAgICBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSA9IHJlcXVpcmUoJy4vX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWF0Y2hlc2Agd2hpY2ggZG9lc24ndCBjbG9uZSBgc291cmNlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VNYXRjaGVzKHNvdXJjZSkge1xuICB2YXIgbWF0Y2hEYXRhID0gZ2V0TWF0Y2hEYXRhKHNvdXJjZSk7XG4gIGlmIChtYXRjaERhdGEubGVuZ3RoID09IDEgJiYgbWF0Y2hEYXRhWzBdWzJdKSB7XG4gICAgcmV0dXJuIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKG1hdGNoRGF0YVswXVswXSwgbWF0Y2hEYXRhWzBdWzFdKTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PT0gc291cmNlIHx8IGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBtYXRjaERhdGEpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNYXRjaGVzO1xuIiwidmFyIGJhc2VJc0VxdWFsID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWwnKSxcbiAgICBnZXQgPSByZXF1aXJlKCcuL2dldCcpLFxuICAgIGhhc0luID0gcmVxdWlyZSgnLi9oYXNJbicpLFxuICAgIGlzS2V5ID0gcmVxdWlyZSgnLi9faXNLZXknKSxcbiAgICBpc1N0cmljdENvbXBhcmFibGUgPSByZXF1aXJlKCcuL19pc1N0cmljdENvbXBhcmFibGUnKSxcbiAgICBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSA9IHJlcXVpcmUoJy4vX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlJyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWF0Y2hlc1Byb3BlcnR5YCB3aGljaCBkb2Vzbid0IGNsb25lIGBzcmNWYWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VNYXRjaGVzUHJvcGVydHkocGF0aCwgc3JjVmFsdWUpIHtcbiAgaWYgKGlzS2V5KHBhdGgpICYmIGlzU3RyaWN0Q29tcGFyYWJsZShzcmNWYWx1ZSkpIHtcbiAgICByZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUodG9LZXkocGF0aCksIHNyY1ZhbHVlKTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgdmFyIG9ialZhbHVlID0gZ2V0KG9iamVjdCwgcGF0aCk7XG4gICAgcmV0dXJuIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIG9ialZhbHVlID09PSBzcmNWYWx1ZSlcbiAgICAgID8gaGFzSW4ob2JqZWN0LCBwYXRoKVxuICAgICAgOiBiYXNlSXNFcXVhbChzcmNWYWx1ZSwgb2JqVmFsdWUsIENPTVBBUkVfUEFSVElBTF9GTEFHIHwgQ09NUEFSRV9VTk9SREVSRURfRkxBRyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZU1hdGNoZXNQcm9wZXJ0eTtcbiIsInZhciBiYXNlUGlja0J5ID0gcmVxdWlyZSgnLi9fYmFzZVBpY2tCeScpLFxuICAgIGhhc0luID0gcmVxdWlyZSgnLi9oYXNJbicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnBpY2tgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaW5kaXZpZHVhbFxuICogcHJvcGVydHkgaWRlbnRpZmllcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRocyBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGJhc2VQaWNrKG9iamVjdCwgcGF0aHMpIHtcbiAgcmV0dXJuIGJhc2VQaWNrQnkob2JqZWN0LCBwYXRocywgZnVuY3Rpb24odmFsdWUsIHBhdGgpIHtcbiAgICByZXR1cm4gaGFzSW4ob2JqZWN0LCBwYXRoKTtcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVBpY2s7XG4iLCJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKSxcbiAgICBiYXNlU2V0ID0gcmVxdWlyZSgnLi9fYmFzZVNldCcpLFxuICAgIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiAgYF8ucGlja0J5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRocyBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgcHJvcGVydHkuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBiYXNlUGlja0J5KG9iamVjdCwgcGF0aHMsIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHBhdGhzLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IHt9O1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHBhdGggPSBwYXRoc1tpbmRleF0sXG4gICAgICAgIHZhbHVlID0gYmFzZUdldChvYmplY3QsIHBhdGgpO1xuXG4gICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgcGF0aCkpIHtcbiAgICAgIGJhc2VTZXQocmVzdWx0LCBjYXN0UGF0aChwYXRoLCBvYmplY3QpLCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVBpY2tCeTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucHJvcGVydHlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVByb3BlcnR5KGtleSkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVByb3BlcnR5O1xuIiwidmFyIGJhc2VHZXQgPSByZXF1aXJlKCcuL19iYXNlR2V0Jyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUHJvcGVydHlgIHdoaWNoIHN1cHBvcnRzIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVByb3BlcnR5RGVlcChwYXRoKSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gYmFzZUdldChvYmplY3QsIHBhdGgpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VQcm9wZXJ0eURlZXA7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5T2ZgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eU9mKG9iamVjdCkge1xuICByZXR1cm4gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVByb3BlcnR5T2Y7XG4iLCJ2YXIgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5JyksXG4gICAgb3ZlclJlc3QgPSByZXF1aXJlKCcuL19vdmVyUmVzdCcpLFxuICAgIHNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fc2V0VG9TdHJpbmcnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXN0YCB3aGljaCBkb2Vzbid0IHZhbGlkYXRlIG9yIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCBpZGVudGl0eSksIGZ1bmMgKyAnJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVJlc3Q7XG4iLCJ2YXIgYXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25WYWx1ZScpLFxuICAgIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zZXRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIHBhdGggY3JlYXRpb24uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdmFsdWUsIGN1c3RvbWl6ZXIpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoLFxuICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMSxcbiAgICAgIG5lc3RlZCA9IG9iamVjdDtcblxuICB3aGlsZSAobmVzdGVkICE9IG51bGwgJiYgKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSB0b0tleShwYXRoW2luZGV4XSksXG4gICAgICAgIG5ld1ZhbHVlID0gdmFsdWU7XG5cbiAgICBpZiAoaW5kZXggIT0gbGFzdEluZGV4KSB7XG4gICAgICB2YXIgb2JqVmFsdWUgPSBuZXN0ZWRba2V5XTtcbiAgICAgIG5ld1ZhbHVlID0gY3VzdG9taXplciA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIGtleSwgbmVzdGVkKSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gaXNPYmplY3Qob2JqVmFsdWUpXG4gICAgICAgICAgPyBvYmpWYWx1ZVxuICAgICAgICAgIDogKGlzSW5kZXgocGF0aFtpbmRleCArIDFdKSA/IFtdIDoge30pO1xuICAgICAgfVxuICAgIH1cbiAgICBhc3NpZ25WYWx1ZShuZXN0ZWQsIGtleSwgbmV3VmFsdWUpO1xuICAgIG5lc3RlZCA9IG5lc3RlZFtrZXldO1xuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldDtcbiIsInZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBtZXRhTWFwID0gcmVxdWlyZSgnLi9fbWV0YU1hcCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXREYXRhYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NvY2lhdGUgbWV0YWRhdGEgd2l0aC5cbiAqIEBwYXJhbSB7Kn0gZGF0YSBUaGUgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldERhdGEgPSAhbWV0YU1hcCA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgZGF0YSkge1xuICBtZXRhTWFwLnNldChmdW5jLCBkYXRhKTtcbiAgcmV0dXJuIGZ1bmM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTZXREYXRhO1xuIiwidmFyIGNvbnN0YW50ID0gcmVxdWlyZSgnLi9jb25zdGFudCcpLFxuICAgIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fZGVmaW5lUHJvcGVydHknKSxcbiAgICBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldFRvU3RyaW5nO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zbGljZWAgd2l0aG91dCBhbiBpdGVyYXRlZSBjYWxsIGd1YXJkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2xpY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IC1zdGFydCA+IGxlbmd0aCA/IDAgOiAobGVuZ3RoICsgc3RhcnQpO1xuICB9XG4gIGVuZCA9IGVuZCA+IGxlbmd0aCA/IGxlbmd0aCA6IGVuZDtcbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuZ3RoO1xuICB9XG4gIGxlbmd0aCA9IHN0YXJ0ID4gZW5kID8gMCA6ICgoZW5kIC0gc3RhcnQpID4+PiAwKTtcbiAgc3RhcnQgPj4+PSAwO1xuXG4gIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBhcnJheVtpbmRleCArIHN0YXJ0XTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTbGljZTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRpbWVzO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXG4gKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRvU3RyaW5nO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmFyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBzdG9yaW5nIG1ldGFkYXRhLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmModmFsdWUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbmFyeTtcbiIsInZhciBTZXRDYWNoZSA9IHJlcXVpcmUoJy4vX1NldENhY2hlJyksXG4gICAgYXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXMnKSxcbiAgICBhcnJheUluY2x1ZGVzV2l0aCA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXNXaXRoJyksXG4gICAgY2FjaGVIYXMgPSByZXF1aXJlKCcuL19jYWNoZUhhcycpLFxuICAgIGNyZWF0ZVNldCA9IHJlcXVpcmUoJy4vX2NyZWF0ZVNldCcpLFxuICAgIHNldFRvQXJyYXkgPSByZXF1aXJlKCcuL19zZXRUb0FycmF5Jyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5pcUJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmlxKGFycmF5LCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlcyxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGlzQ29tbW9uID0gdHJ1ZSxcbiAgICAgIHJlc3VsdCA9IFtdLFxuICAgICAgc2VlbiA9IHJlc3VsdDtcblxuICBpZiAoY29tcGFyYXRvcikge1xuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiAgfVxuICBlbHNlIGlmIChsZW5ndGggPj0gTEFSR0VfQVJSQVlfU0laRSkge1xuICAgIHZhciBzZXQgPSBpdGVyYXRlZSA/IG51bGwgOiBjcmVhdGVTZXQoYXJyYXkpO1xuICAgIGlmIChzZXQpIHtcbiAgICAgIHJldHVybiBzZXRUb0FycmF5KHNldCk7XG4gICAgfVxuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgaW5jbHVkZXMgPSBjYWNoZUhhcztcbiAgICBzZWVuID0gbmV3IFNldENhY2hlO1xuICB9XG4gIGVsc2Uge1xuICAgIHNlZW4gPSBpdGVyYXRlZSA/IFtdIDogcmVzdWx0O1xuICB9XG4gIG91dGVyOlxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlKSA6IHZhbHVlO1xuXG4gICAgdmFsdWUgPSAoY29tcGFyYXRvciB8fCB2YWx1ZSAhPT0gMCkgPyB2YWx1ZSA6IDA7XG4gICAgaWYgKGlzQ29tbW9uICYmIGNvbXB1dGVkID09PSBjb21wdXRlZCkge1xuICAgICAgdmFyIHNlZW5JbmRleCA9IHNlZW4ubGVuZ3RoO1xuICAgICAgd2hpbGUgKHNlZW5JbmRleC0tKSB7XG4gICAgICAgIGlmIChzZWVuW3NlZW5JbmRleF0gPT09IGNvbXB1dGVkKSB7XG4gICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpdGVyYXRlZSkge1xuICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmICghaW5jbHVkZXMoc2VlbiwgY29tcHV0ZWQsIGNvbXBhcmF0b3IpKSB7XG4gICAgICBpZiAoc2VlbiAhPT0gcmVzdWx0KSB7XG4gICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuaXE7XG4iLCJ2YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIGxhc3QgPSByZXF1aXJlKCcuL2xhc3QnKSxcbiAgICBwYXJlbnQgPSByZXF1aXJlKCcuL19wYXJlbnQnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5zZXRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHByb3BlcnR5IHBhdGggdG8gdW5zZXQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IGlzIGRlbGV0ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuc2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgb2JqZWN0ID0gcGFyZW50KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCB8fCBkZWxldGUgb2JqZWN0W3RvS2V5KGxhc3QocGF0aCkpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5zZXQ7XG4iLCJ2YXIgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnZhbHVlc2AgYW5kIGBfLnZhbHVlc0luYCB3aGljaCBjcmVhdGVzIGFuXG4gKiBhcnJheSBvZiBgb2JqZWN0YCBwcm9wZXJ0eSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvcGVydHkgbmFtZXNcbiAqIG9mIGBwcm9wc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBuYW1lcyB0byBnZXQgdmFsdWVzIGZvci5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gYmFzZVZhbHVlcyhvYmplY3QsIHByb3BzKSB7XG4gIHJldHVybiBhcnJheU1hcChwcm9wcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIG9iamVjdFtrZXldO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVmFsdWVzO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICByZXR1cm4gY2FjaGUuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FjaGVIYXM7XG4iLCJ2YXIgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5Jyk7XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBgaWRlbnRpdHlgIGlmIGl0J3Mgbm90IGEgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgY2FzdCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY2FzdEZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJyA/IHZhbHVlIDogaWRlbnRpdHk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FzdEZ1bmN0aW9uO1xuIiwidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0tleSA9IHJlcXVpcmUoJy4vX2lzS2V5JyksXG4gICAgc3RyaW5nVG9QYXRoID0gcmVxdWlyZSgnLi9fc3RyaW5nVG9QYXRoJyksXG4gICAgdG9TdHJpbmcgPSByZXF1aXJlKCcuL3RvU3RyaW5nJyk7XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBhIHBhdGggYXJyYXkgaWYgaXQncyBub3Qgb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICovXG5mdW5jdGlvbiBjYXN0UGF0aCh2YWx1ZSwgb2JqZWN0KSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gaXNLZXkodmFsdWUsIG9iamVjdCkgPyBbdmFsdWVdIDogc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FzdFBhdGg7XG4iLCJ2YXIgVWludDhBcnJheSA9IHJlcXVpcmUoJy4vX1VpbnQ4QXJyYXknKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGFycmF5QnVmZmVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYXJyYXlCdWZmZXIgVGhlIGFycmF5IGJ1ZmZlciB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtBcnJheUJ1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGFycmF5IGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gY2xvbmVBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikge1xuICB2YXIgcmVzdWx0ID0gbmV3IGFycmF5QnVmZmVyLmNvbnN0cnVjdG9yKGFycmF5QnVmZmVyLmJ5dGVMZW5ndGgpO1xuICBuZXcgVWludDhBcnJheShyZXN1bHQpLnNldChuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcikpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lQXJyYXlCdWZmZXI7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQsXG4gICAgYWxsb2NVbnNhZmUgPSBCdWZmZXIgPyBCdWZmZXIuYWxsb2NVbnNhZmUgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mICBgYnVmZmVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQnVmZmVyKGJ1ZmZlciwgaXNEZWVwKSB7XG4gIGlmIChpc0RlZXApIHtcbiAgICByZXR1cm4gYnVmZmVyLnNsaWNlKCk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBhbGxvY1Vuc2FmZSA/IGFsbG9jVW5zYWZlKGxlbmd0aCkgOiBuZXcgYnVmZmVyLmNvbnN0cnVjdG9yKGxlbmd0aCk7XG5cbiAgYnVmZmVyLmNvcHkocmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZUJ1ZmZlcjtcbiIsInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgZGF0YVZpZXdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YVZpZXcgVGhlIGRhdGEgdmlldyB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgZGF0YSB2aWV3LlxuICovXG5mdW5jdGlvbiBjbG9uZURhdGFWaWV3KGRhdGFWaWV3LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIoZGF0YVZpZXcuYnVmZmVyKSA6IGRhdGFWaWV3LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyBkYXRhVmlldy5jb25zdHJ1Y3RvcihidWZmZXIsIGRhdGFWaWV3LmJ5dGVPZmZzZXQsIGRhdGFWaWV3LmJ5dGVMZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lRGF0YVZpZXc7XG4iLCIvKiogVXNlZCB0byBtYXRjaCBgUmVnRXhwYCBmbGFncyBmcm9tIHRoZWlyIGNvZXJjZWQgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUZsYWdzID0gL1xcdyokLztcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHJlZ2V4cGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWdleHAgVGhlIHJlZ2V4cCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCByZWdleHAuXG4gKi9cbmZ1bmN0aW9uIGNsb25lUmVnRXhwKHJlZ2V4cCkge1xuICB2YXIgcmVzdWx0ID0gbmV3IHJlZ2V4cC5jb25zdHJ1Y3RvcihyZWdleHAuc291cmNlLCByZUZsYWdzLmV4ZWMocmVnZXhwKSk7XG4gIHJlc3VsdC5sYXN0SW5kZXggPSByZWdleHAubGFzdEluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lUmVnRXhwO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGBzeW1ib2xgIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHN5bWJvbCBUaGUgc3ltYm9sIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBzeW1ib2wgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBjbG9uZVN5bWJvbChzeW1ib2wpIHtcbiAgcmV0dXJuIHN5bWJvbFZhbHVlT2YgPyBPYmplY3Qoc3ltYm9sVmFsdWVPZi5jYWxsKHN5bWJvbCkpIDoge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVTeW1ib2w7XG4iLCJ2YXIgY2xvbmVBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQXJyYXlCdWZmZXInKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHR5cGVkQXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gdHlwZWRBcnJheSBUaGUgdHlwZWQgYXJyYXkgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHR5cGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBjbG9uZVR5cGVkQXJyYXkodHlwZWRBcnJheSwgaXNEZWVwKSB7XG4gIHZhciBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKHR5cGVkQXJyYXkuYnVmZmVyKSA6IHR5cGVkQXJyYXkuYnVmZmVyO1xuICByZXR1cm4gbmV3IHR5cGVkQXJyYXkuY29uc3RydWN0b3IoYnVmZmVyLCB0eXBlZEFycmF5LmJ5dGVPZmZzZXQsIHR5cGVkQXJyYXkubGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVR5cGVkQXJyYXk7XG4iLCIvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMsXG4gKiBwbGFjZWhvbGRlcnMsIGFuZCBwcm92aWRlZCBhcmd1bWVudHMgaW50byBhIHNpbmdsZSBhcnJheSBvZiBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZC5cbiAqIEBwYXJhbSB7QXJyYXl9IGhvbGRlcnMgVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbXMge2Jvb2xlYW59IFtpc0N1cnJpZWRdIFNwZWNpZnkgY29tcG9zaW5nIGZvciBhIGN1cnJpZWQgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21wb3NlZCBhcmd1bWVudHMuXG4gKi9cbmZ1bmN0aW9uIGNvbXBvc2VBcmdzKGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpIHtcbiAgdmFyIGFyZ3NJbmRleCA9IC0xLFxuICAgICAgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoLFxuICAgICAgaG9sZGVyc0xlbmd0aCA9IGhvbGRlcnMubGVuZ3RoLFxuICAgICAgbGVmdEluZGV4ID0gLTEsXG4gICAgICBsZWZ0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgcmFuZ2VMZW5ndGggPSBuYXRpdmVNYXgoYXJnc0xlbmd0aCAtIGhvbGRlcnNMZW5ndGgsIDApLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVmdExlbmd0aCArIHJhbmdlTGVuZ3RoKSxcbiAgICAgIGlzVW5jdXJyaWVkID0gIWlzQ3VycmllZDtcblxuICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgcmVzdWx0W2xlZnRJbmRleF0gPSBwYXJ0aWFsc1tsZWZ0SW5kZXhdO1xuICB9XG4gIHdoaWxlICgrK2FyZ3NJbmRleCA8IGhvbGRlcnNMZW5ndGgpIHtcbiAgICBpZiAoaXNVbmN1cnJpZWQgfHwgYXJnc0luZGV4IDwgYXJnc0xlbmd0aCkge1xuICAgICAgcmVzdWx0W2hvbGRlcnNbYXJnc0luZGV4XV0gPSBhcmdzW2FyZ3NJbmRleF07XG4gICAgfVxuICB9XG4gIHdoaWxlIChyYW5nZUxlbmd0aC0tKSB7XG4gICAgcmVzdWx0W2xlZnRJbmRleCsrXSA9IGFyZ3NbYXJnc0luZGV4KytdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcG9zZUFyZ3M7XG4iLCIvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBjb21wb3NlQXJnc2AgZXhjZXB0IHRoYXQgdGhlIGFyZ3VtZW50cyBjb21wb3NpdGlvblxuICogaXMgdGFpbG9yZWQgZm9yIGBfLnBhcnRpYWxSaWdodGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gYXBwZW5kIHRvIHRob3NlIHByb3ZpZGVkLlxuICogQHBhcmFtIHtBcnJheX0gaG9sZGVycyBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtcyB7Ym9vbGVhbn0gW2lzQ3VycmllZF0gU3BlY2lmeSBjb21wb3NpbmcgZm9yIGEgY3VycmllZCBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbXBvc2VkIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gY29tcG9zZUFyZ3NSaWdodChhcmdzLCBwYXJ0aWFscywgaG9sZGVycywgaXNDdXJyaWVkKSB7XG4gIHZhciBhcmdzSW5kZXggPSAtMSxcbiAgICAgIGFyZ3NMZW5ndGggPSBhcmdzLmxlbmd0aCxcbiAgICAgIGhvbGRlcnNJbmRleCA9IC0xLFxuICAgICAgaG9sZGVyc0xlbmd0aCA9IGhvbGRlcnMubGVuZ3RoLFxuICAgICAgcmlnaHRJbmRleCA9IC0xLFxuICAgICAgcmlnaHRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsXG4gICAgICByYW5nZUxlbmd0aCA9IG5hdGl2ZU1heChhcmdzTGVuZ3RoIC0gaG9sZGVyc0xlbmd0aCwgMCksXG4gICAgICByZXN1bHQgPSBBcnJheShyYW5nZUxlbmd0aCArIHJpZ2h0TGVuZ3RoKSxcbiAgICAgIGlzVW5jdXJyaWVkID0gIWlzQ3VycmllZDtcblxuICB3aGlsZSAoKythcmdzSW5kZXggPCByYW5nZUxlbmd0aCkge1xuICAgIHJlc3VsdFthcmdzSW5kZXhdID0gYXJnc1thcmdzSW5kZXhdO1xuICB9XG4gIHZhciBvZmZzZXQgPSBhcmdzSW5kZXg7XG4gIHdoaWxlICgrK3JpZ2h0SW5kZXggPCByaWdodExlbmd0aCkge1xuICAgIHJlc3VsdFtvZmZzZXQgKyByaWdodEluZGV4XSA9IHBhcnRpYWxzW3JpZ2h0SW5kZXhdO1xuICB9XG4gIHdoaWxlICgrK2hvbGRlcnNJbmRleCA8IGhvbGRlcnNMZW5ndGgpIHtcbiAgICBpZiAoaXNVbmN1cnJpZWQgfHwgYXJnc0luZGV4IDwgYXJnc0xlbmd0aCkge1xuICAgICAgcmVzdWx0W29mZnNldCArIGhvbGRlcnNbaG9sZGVyc0luZGV4XV0gPSBhcmdzW2FyZ3NJbmRleCsrXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb21wb3NlQXJnc1JpZ2h0O1xuIiwiLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBgc291cmNlYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG5cbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weUFycmF5O1xuIiwidmFyIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKTtcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weU9iamVjdDtcbiIsInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGdldFN5bWJvbHMgPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzJyk7XG5cbi8qKlxuICogQ29waWVzIG93biBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5U3ltYm9scyhzb3VyY2UsIG9iamVjdCkge1xuICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHMoc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5U3ltYm9scztcbiIsInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGdldFN5bWJvbHNJbiA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHNJbicpO1xuXG4vKipcbiAqIENvcGllcyBvd24gYW5kIGluaGVyaXRlZCBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5U3ltYm9sc0luKHNvdXJjZSwgb2JqZWN0KSB7XG4gIHJldHVybiBjb3B5T2JqZWN0KHNvdXJjZSwgZ2V0U3ltYm9sc0luKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVN5bWJvbHNJbjtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcmVKc0RhdGE7XG4iLCIvKipcbiAqIEdldHMgdGhlIG51bWJlciBvZiBgcGxhY2Vob2xkZXJgIG9jY3VycmVuY2VzIGluIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBwbGFjZWhvbGRlciBUaGUgcGxhY2Vob2xkZXIgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHBsYWNlaG9sZGVyIGNvdW50LlxuICovXG5mdW5jdGlvbiBjb3VudEhvbGRlcnMoYXJyYXksIHBsYWNlaG9sZGVyKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSAwO1xuXG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGlmIChhcnJheVtsZW5ndGhdID09PSBwbGFjZWhvbGRlcikge1xuICAgICAgKytyZXN1bHQ7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY291bnRIb2xkZXJzO1xuIiwidmFyIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBpc0l0ZXJhdGVlQ2FsbCA9IHJlcXVpcmUoJy4vX2lzSXRlcmF0ZWVDYWxsJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uYXNzaWduYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gYXNzaWduZXIgVGhlIGZ1bmN0aW9uIHRvIGFzc2lnbiB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhc3NpZ25lciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoYXNzaWduZXIpIHtcbiAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwgc291cmNlcykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBzb3VyY2VzLmxlbmd0aCxcbiAgICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA+IDEgPyBzb3VyY2VzW2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkLFxuICAgICAgICBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xuXG4gICAgY3VzdG9taXplciA9IChhc3NpZ25lci5sZW5ndGggPiAzICYmIHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicpXG4gICAgICA/IChsZW5ndGgtLSwgY3VzdG9taXplcilcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHNvdXJjZXNbMF0sIHNvdXJjZXNbMV0sIGd1YXJkKSkge1xuICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiBjdXN0b21pemVyO1xuICAgICAgbGVuZ3RoID0gMTtcbiAgICB9XG4gICAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzW2luZGV4XTtcbiAgICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgYXNzaWduZXIob2JqZWN0LCBzb3VyY2UsIGluZGV4LCBjdXN0b21pemVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQXNzaWduZXI7XG4iLCJ2YXIgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGBiYXNlRWFjaGAgb3IgYGJhc2VFYWNoUmlnaHRgIGZ1bmN0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlYWNoRnVuYyBUaGUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGEgY29sbGVjdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmFzZUVhY2goZWFjaEZ1bmMsIGZyb21SaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICB9XG4gICAgaWYgKCFpc0FycmF5TGlrZShjb2xsZWN0aW9uKSkge1xuICAgICAgcmV0dXJuIGVhY2hGdW5jKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKTtcbiAgICB9XG4gICAgdmFyIGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IGZyb21SaWdodCA/IGxlbmd0aCA6IC0xLFxuICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChjb2xsZWN0aW9uKTtcblxuICAgIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVbaW5kZXhdLCBpbmRleCwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQmFzZUVhY2g7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBiYXNlIGZ1bmN0aW9uIGZvciBtZXRob2RzIGxpa2UgYF8uZm9ySW5gIGFuZCBgXy5mb3JPd25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VGb3IoZnJvbVJpZ2h0KSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzRnVuYykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChvYmplY3QpLFxuICAgICAgICBwcm9wcyA9IGtleXNGdW5jKG9iamVjdCksXG4gICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgdmFyIGtleSA9IHByb3BzW2Zyb21SaWdodCA/IGxlbmd0aCA6ICsraW5kZXhdO1xuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVCYXNlRm9yO1xuIiwidmFyIGNyZWF0ZUN0b3IgPSByZXF1aXJlKCcuL19jcmVhdGVDdG9yJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBpbnZva2UgaXQgd2l0aCB0aGUgb3B0aW9uYWwgYHRoaXNgXG4gKiBiaW5kaW5nIG9mIGB0aGlzQXJnYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmluZChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnKSB7XG4gIHZhciBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICBDdG9yID0gY3JlYXRlQ3RvcihmdW5jKTtcblxuICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgIHZhciBmbiA9ICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpID8gQ3RvciA6IGZ1bmM7XG4gICAgcmV0dXJuIGZuLmFwcGx5KGlzQmluZCA/IHRoaXNBcmcgOiB0aGlzLCBhcmd1bWVudHMpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUJpbmQ7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwcm9kdWNlcyBhbiBpbnN0YW5jZSBvZiBgQ3RvcmAgcmVnYXJkbGVzcyBvZlxuICogd2hldGhlciBpdCB3YXMgaW52b2tlZCBhcyBwYXJ0IG9mIGEgYG5ld2AgZXhwcmVzc2lvbiBvciBieSBgY2FsbGAgb3IgYGFwcGx5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gQ3RvciBUaGUgY29uc3RydWN0b3IgdG8gd3JhcC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUN0b3IoQ3Rvcikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgLy8gVXNlIGEgYHN3aXRjaGAgc3RhdGVtZW50IHRvIHdvcmsgd2l0aCBjbGFzcyBjb25zdHJ1Y3RvcnMuIFNlZVxuICAgIC8vIGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtZnVuY3Rpb24tb2JqZWN0cy1jYWxsLXRoaXNhcmd1bWVudC1hcmd1bWVudHNsaXN0XG4gICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6IHJldHVybiBuZXcgQ3RvcjtcbiAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0pO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICBjYXNlIDM6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSk7XG4gICAgICBjYXNlIDY6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdKTtcbiAgICAgIGNhc2UgNzogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0sIGFyZ3NbNl0pO1xuICAgIH1cbiAgICB2YXIgdGhpc0JpbmRpbmcgPSBiYXNlQ3JlYXRlKEN0b3IucHJvdG90eXBlKSxcbiAgICAgICAgcmVzdWx0ID0gQ3Rvci5hcHBseSh0aGlzQmluZGluZywgYXJncyk7XG5cbiAgICAvLyBNaW1pYyB0aGUgY29uc3RydWN0b3IncyBgcmV0dXJuYCBiZWhhdmlvci5cbiAgICAvLyBTZWUgaHR0cHM6Ly9lczUuZ2l0aHViLmlvLyN4MTMuMi4yIGZvciBtb3JlIGRldGFpbHMuXG4gICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiB0aGlzQmluZGluZztcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDdG9yO1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKSxcbiAgICBjcmVhdGVDdG9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQ3RvcicpLFxuICAgIGNyZWF0ZUh5YnJpZCA9IHJlcXVpcmUoJy4vX2NyZWF0ZUh5YnJpZCcpLFxuICAgIGNyZWF0ZVJlY3VycnkgPSByZXF1aXJlKCcuL19jcmVhdGVSZWN1cnJ5JyksXG4gICAgZ2V0SG9sZGVyID0gcmVxdWlyZSgnLi9fZ2V0SG9sZGVyJyksXG4gICAgcmVwbGFjZUhvbGRlcnMgPSByZXF1aXJlKCcuL19yZXBsYWNlSG9sZGVycycpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGVuYWJsZSBjdXJyeWluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge251bWJlcn0gYXJpdHkgVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUN1cnJ5KGZ1bmMsIGJpdG1hc2ssIGFyaXR5KSB7XG4gIHZhciBDdG9yID0gY3JlYXRlQ3RvcihmdW5jKTtcblxuICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICBhcmdzID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgaW5kZXggPSBsZW5ndGgsXG4gICAgICAgIHBsYWNlaG9sZGVyID0gZ2V0SG9sZGVyKHdyYXBwZXIpO1xuXG4gICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgIGFyZ3NbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICB9XG4gICAgdmFyIGhvbGRlcnMgPSAobGVuZ3RoIDwgMyAmJiBhcmdzWzBdICE9PSBwbGFjZWhvbGRlciAmJiBhcmdzW2xlbmd0aCAtIDFdICE9PSBwbGFjZWhvbGRlcilcbiAgICAgID8gW11cbiAgICAgIDogcmVwbGFjZUhvbGRlcnMoYXJncywgcGxhY2Vob2xkZXIpO1xuXG4gICAgbGVuZ3RoIC09IGhvbGRlcnMubGVuZ3RoO1xuICAgIGlmIChsZW5ndGggPCBhcml0eSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZVJlY3VycnkoXG4gICAgICAgIGZ1bmMsIGJpdG1hc2ssIGNyZWF0ZUh5YnJpZCwgd3JhcHBlci5wbGFjZWhvbGRlciwgdW5kZWZpbmVkLFxuICAgICAgICBhcmdzLCBob2xkZXJzLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYXJpdHkgLSBsZW5ndGgpO1xuICAgIH1cbiAgICB2YXIgZm4gPSAodGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSA/IEN0b3IgOiBmdW5jO1xuICAgIHJldHVybiBhcHBseShmbiwgdGhpcywgYXJncyk7XG4gIH1cbiAgcmV0dXJuIHdyYXBwZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQ3Vycnk7XG4iLCJ2YXIgYmFzZUl0ZXJhdGVlID0gcmVxdWlyZSgnLi9fYmFzZUl0ZXJhdGVlJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgXy5maW5kYCBvciBgXy5maW5kTGFzdGAgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZpbmRJbmRleEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGNvbGxlY3Rpb24gaW5kZXguXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmaW5kIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVGaW5kKGZpbmRJbmRleEZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZnJvbUluZGV4KSB7XG4gICAgdmFyIGl0ZXJhYmxlID0gT2JqZWN0KGNvbGxlY3Rpb24pO1xuICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgIHZhciBpdGVyYXRlZSA9IGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpO1xuICAgICAgY29sbGVjdGlvbiA9IGtleXMoY29sbGVjdGlvbik7XG4gICAgICBwcmVkaWNhdGUgPSBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpOyB9O1xuICAgIH1cbiAgICB2YXIgaW5kZXggPSBmaW5kSW5kZXhGdW5jKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZnJvbUluZGV4KTtcbiAgICByZXR1cm4gaW5kZXggPiAtMSA/IGl0ZXJhYmxlW2l0ZXJhdGVlID8gY29sbGVjdGlvbltpbmRleF0gOiBpbmRleF0gOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlRmluZDtcbiIsInZhciBjb21wb3NlQXJncyA9IHJlcXVpcmUoJy4vX2NvbXBvc2VBcmdzJyksXG4gICAgY29tcG9zZUFyZ3NSaWdodCA9IHJlcXVpcmUoJy4vX2NvbXBvc2VBcmdzUmlnaHQnKSxcbiAgICBjb3VudEhvbGRlcnMgPSByZXF1aXJlKCcuL19jb3VudEhvbGRlcnMnKSxcbiAgICBjcmVhdGVDdG9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQ3RvcicpLFxuICAgIGNyZWF0ZVJlY3VycnkgPSByZXF1aXJlKCcuL19jcmVhdGVSZWN1cnJ5JyksXG4gICAgZ2V0SG9sZGVyID0gcmVxdWlyZSgnLi9fZ2V0SG9sZGVyJyksXG4gICAgcmVvcmRlciA9IHJlcXVpcmUoJy4vX3Jlb3JkZXInKSxcbiAgICByZXBsYWNlSG9sZGVycyA9IHJlcXVpcmUoJy4vX3JlcGxhY2VIb2xkZXJzJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcgPSAxNixcbiAgICBXUkFQX0FSWV9GTEFHID0gMTI4LFxuICAgIFdSQVBfRkxJUF9GTEFHID0gNTEyO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBpbnZva2UgaXQgd2l0aCBvcHRpb25hbCBgdGhpc2BcbiAqIGJpbmRpbmcgb2YgYHRoaXNBcmdgLCBwYXJ0aWFsIGFwcGxpY2F0aW9uLCBhbmQgY3VycnlpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb258c3RyaW5nfSBmdW5jIFRoZSBmdW5jdGlvbiBvciBtZXRob2QgbmFtZSB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0b1xuICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc10gVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc1JpZ2h0XSBUaGUgYXJndW1lbnRzIHRvIGFwcGVuZCB0byB0aG9zZSBwcm92aWRlZFxuICogIHRvIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc1JpZ2h0XSBUaGUgYHBhcnRpYWxzUmlnaHRgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJnUG9zXSBUaGUgYXJndW1lbnQgcG9zaXRpb25zIG9mIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyeV0gVGhlIGFyaXR5IGNhcCBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5XSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSHlicmlkKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBwYXJ0aWFsc1JpZ2h0LCBob2xkZXJzUmlnaHQsIGFyZ1BvcywgYXJ5LCBhcml0eSkge1xuICB2YXIgaXNBcnkgPSBiaXRtYXNrICYgV1JBUF9BUllfRkxBRyxcbiAgICAgIGlzQmluZCA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRyxcbiAgICAgIGlzQmluZEtleSA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfS0VZX0ZMQUcsXG4gICAgICBpc0N1cnJpZWQgPSBiaXRtYXNrICYgKFdSQVBfQ1VSUllfRkxBRyB8IFdSQVBfQ1VSUllfUklHSFRfRkxBRyksXG4gICAgICBpc0ZsaXAgPSBiaXRtYXNrICYgV1JBUF9GTElQX0ZMQUcsXG4gICAgICBDdG9yID0gaXNCaW5kS2V5ID8gdW5kZWZpbmVkIDogY3JlYXRlQ3RvcihmdW5jKTtcblxuICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICBhcmdzID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgaW5kZXggPSBsZW5ndGg7XG5cbiAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgIH1cbiAgICBpZiAoaXNDdXJyaWVkKSB7XG4gICAgICB2YXIgcGxhY2Vob2xkZXIgPSBnZXRIb2xkZXIod3JhcHBlciksXG4gICAgICAgICAgaG9sZGVyc0NvdW50ID0gY291bnRIb2xkZXJzKGFyZ3MsIHBsYWNlaG9sZGVyKTtcbiAgICB9XG4gICAgaWYgKHBhcnRpYWxzKSB7XG4gICAgICBhcmdzID0gY29tcG9zZUFyZ3MoYXJncywgcGFydGlhbHMsIGhvbGRlcnMsIGlzQ3VycmllZCk7XG4gICAgfVxuICAgIGlmIChwYXJ0aWFsc1JpZ2h0KSB7XG4gICAgICBhcmdzID0gY29tcG9zZUFyZ3NSaWdodChhcmdzLCBwYXJ0aWFsc1JpZ2h0LCBob2xkZXJzUmlnaHQsIGlzQ3VycmllZCk7XG4gICAgfVxuICAgIGxlbmd0aCAtPSBob2xkZXJzQ291bnQ7XG4gICAgaWYgKGlzQ3VycmllZCAmJiBsZW5ndGggPCBhcml0eSkge1xuICAgICAgdmFyIG5ld0hvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhhcmdzLCBwbGFjZWhvbGRlcik7XG4gICAgICByZXR1cm4gY3JlYXRlUmVjdXJyeShcbiAgICAgICAgZnVuYywgYml0bWFzaywgY3JlYXRlSHlicmlkLCB3cmFwcGVyLnBsYWNlaG9sZGVyLCB0aGlzQXJnLFxuICAgICAgICBhcmdzLCBuZXdIb2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkgLSBsZW5ndGhcbiAgICAgICk7XG4gICAgfVxuICAgIHZhciB0aGlzQmluZGluZyA9IGlzQmluZCA/IHRoaXNBcmcgOiB0aGlzLFxuICAgICAgICBmbiA9IGlzQmluZEtleSA/IHRoaXNCaW5kaW5nW2Z1bmNdIDogZnVuYztcblxuICAgIGxlbmd0aCA9IGFyZ3MubGVuZ3RoO1xuICAgIGlmIChhcmdQb3MpIHtcbiAgICAgIGFyZ3MgPSByZW9yZGVyKGFyZ3MsIGFyZ1Bvcyk7XG4gICAgfSBlbHNlIGlmIChpc0ZsaXAgJiYgbGVuZ3RoID4gMSkge1xuICAgICAgYXJncy5yZXZlcnNlKCk7XG4gICAgfVxuICAgIGlmIChpc0FyeSAmJiBhcnkgPCBsZW5ndGgpIHtcbiAgICAgIGFyZ3MubGVuZ3RoID0gYXJ5O1xuICAgIH1cbiAgICBpZiAodGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSB7XG4gICAgICBmbiA9IEN0b3IgfHwgY3JlYXRlQ3Rvcihmbik7XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQmluZGluZywgYXJncyk7XG4gIH1cbiAgcmV0dXJuIHdyYXBwZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlSHlicmlkO1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKSxcbiAgICBjcmVhdGVDdG9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQ3RvcicpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gaW52b2tlIGl0IHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nXG4gKiBvZiBgdGhpc0FyZ2AgYW5kIGBwYXJ0aWFsc2AgcHJlcGVuZGVkIHRvIHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBwYXJ0aWFscyBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAqICB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUGFydGlhbChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscykge1xuICB2YXIgaXNCaW5kID0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHLFxuICAgICAgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgYXJnc0luZGV4ID0gLTEsXG4gICAgICAgIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICBsZWZ0SW5kZXggPSAtMSxcbiAgICAgICAgbGVmdExlbmd0aCA9IHBhcnRpYWxzLmxlbmd0aCxcbiAgICAgICAgYXJncyA9IEFycmF5KGxlZnRMZW5ndGggKyBhcmdzTGVuZ3RoKSxcbiAgICAgICAgZm4gPSAodGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSA/IEN0b3IgOiBmdW5jO1xuXG4gICAgd2hpbGUgKCsrbGVmdEluZGV4IDwgbGVmdExlbmd0aCkge1xuICAgICAgYXJnc1tsZWZ0SW5kZXhdID0gcGFydGlhbHNbbGVmdEluZGV4XTtcbiAgICB9XG4gICAgd2hpbGUgKGFyZ3NMZW5ndGgtLSkge1xuICAgICAgYXJnc1tsZWZ0SW5kZXgrK10gPSBhcmd1bWVudHNbKythcmdzSW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gYXBwbHkoZm4sIGlzQmluZCA/IHRoaXNBcmcgOiB0aGlzLCBhcmdzKTtcbiAgfVxuICByZXR1cm4gd3JhcHBlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVQYXJ0aWFsO1xuIiwidmFyIGlzTGF6aWFibGUgPSByZXF1aXJlKCcuL19pc0xhemlhYmxlJyksXG4gICAgc2V0RGF0YSA9IHJlcXVpcmUoJy4vX3NldERhdGEnKSxcbiAgICBzZXRXcmFwVG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRXcmFwVG9TdHJpbmcnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9CT1VORF9GTEFHID0gNCxcbiAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzIsXG4gICAgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgPSA2NDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gY29udGludWUgY3VycnlpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gd3JhcEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgYGZ1bmNgIHdyYXBwZXIuXG4gKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB2YWx1ZS5cbiAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0b1xuICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc10gVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcmdQb3NdIFRoZSBhcmd1bWVudCBwb3NpdGlvbnMgb2YgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVSZWN1cnJ5KGZ1bmMsIGJpdG1hc2ssIHdyYXBGdW5jLCBwbGFjZWhvbGRlciwgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIGFyZ1BvcywgYXJ5LCBhcml0eSkge1xuICB2YXIgaXNDdXJyeSA9IGJpdG1hc2sgJiBXUkFQX0NVUlJZX0ZMQUcsXG4gICAgICBuZXdIb2xkZXJzID0gaXNDdXJyeSA/IGhvbGRlcnMgOiB1bmRlZmluZWQsXG4gICAgICBuZXdIb2xkZXJzUmlnaHQgPSBpc0N1cnJ5ID8gdW5kZWZpbmVkIDogaG9sZGVycyxcbiAgICAgIG5ld1BhcnRpYWxzID0gaXNDdXJyeSA/IHBhcnRpYWxzIDogdW5kZWZpbmVkLFxuICAgICAgbmV3UGFydGlhbHNSaWdodCA9IGlzQ3VycnkgPyB1bmRlZmluZWQgOiBwYXJ0aWFscztcblxuICBiaXRtYXNrIHw9IChpc0N1cnJ5ID8gV1JBUF9QQVJUSUFMX0ZMQUcgOiBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyk7XG4gIGJpdG1hc2sgJj0gfihpc0N1cnJ5ID8gV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgOiBXUkFQX1BBUlRJQUxfRkxBRyk7XG5cbiAgaWYgKCEoYml0bWFzayAmIFdSQVBfQ1VSUllfQk9VTkRfRkxBRykpIHtcbiAgICBiaXRtYXNrICY9IH4oV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX0JJTkRfS0VZX0ZMQUcpO1xuICB9XG4gIHZhciBuZXdEYXRhID0gW1xuICAgIGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIG5ld1BhcnRpYWxzLCBuZXdIb2xkZXJzLCBuZXdQYXJ0aWFsc1JpZ2h0LFxuICAgIG5ld0hvbGRlcnNSaWdodCwgYXJnUG9zLCBhcnksIGFyaXR5XG4gIF07XG5cbiAgdmFyIHJlc3VsdCA9IHdyYXBGdW5jLmFwcGx5KHVuZGVmaW5lZCwgbmV3RGF0YSk7XG4gIGlmIChpc0xhemlhYmxlKGZ1bmMpKSB7XG4gICAgc2V0RGF0YShyZXN1bHQsIG5ld0RhdGEpO1xuICB9XG4gIHJlc3VsdC5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xuICByZXR1cm4gc2V0V3JhcFRvU3RyaW5nKHJlc3VsdCwgZnVuYywgYml0bWFzayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlUmVjdXJyeTtcbiIsInZhciBTZXQgPSByZXF1aXJlKCcuL19TZXQnKSxcbiAgICBub29wID0gcmVxdWlyZSgnLi9ub29wJyksXG4gICAgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4vX3NldFRvQXJyYXknKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2V0IG9iamVjdCBvZiBgdmFsdWVzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYWRkIHRvIHRoZSBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgc2V0LlxuICovXG52YXIgY3JlYXRlU2V0ID0gIShTZXQgJiYgKDEgLyBzZXRUb0FycmF5KG5ldyBTZXQoWywtMF0pKVsxXSkgPT0gSU5GSU5JVFkpID8gbm9vcCA6IGZ1bmN0aW9uKHZhbHVlcykge1xuICByZXR1cm4gbmV3IFNldCh2YWx1ZXMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVTZXQ7XG4iLCJ2YXIgYmFzZVNldERhdGEgPSByZXF1aXJlKCcuL19iYXNlU2V0RGF0YScpLFxuICAgIGNyZWF0ZUJpbmQgPSByZXF1aXJlKCcuL19jcmVhdGVCaW5kJyksXG4gICAgY3JlYXRlQ3VycnkgPSByZXF1aXJlKCcuL19jcmVhdGVDdXJyeScpLFxuICAgIGNyZWF0ZUh5YnJpZCA9IHJlcXVpcmUoJy4vX2NyZWF0ZUh5YnJpZCcpLFxuICAgIGNyZWF0ZVBhcnRpYWwgPSByZXF1aXJlKCcuL19jcmVhdGVQYXJ0aWFsJyksXG4gICAgZ2V0RGF0YSA9IHJlcXVpcmUoJy4vX2dldERhdGEnKSxcbiAgICBtZXJnZURhdGEgPSByZXF1aXJlKCcuL19tZXJnZURhdGEnKSxcbiAgICBzZXREYXRhID0gcmVxdWlyZSgnLi9fc2V0RGF0YScpLFxuICAgIHNldFdyYXBUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFdyYXBUb1N0cmluZycpLFxuICAgIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vdG9JbnRlZ2VyJyk7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfQ1VSUllfRkxBRyA9IDgsXG4gICAgV1JBUF9DVVJSWV9SSUdIVF9GTEFHID0gMTYsXG4gICAgV1JBUF9QQVJUSUFMX0ZMQUcgPSAzMixcbiAgICBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyA9IDY0O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgZWl0aGVyIGN1cnJpZXMgb3IgaW52b2tlcyBgZnVuY2Agd2l0aCBvcHRpb25hbFxuICogYHRoaXNgIGJpbmRpbmcgYW5kIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbnxzdHJpbmd9IGZ1bmMgVGhlIGZ1bmN0aW9uIG9yIG1ldGhvZCBuYW1lIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAgIDEgLSBgXy5iaW5kYFxuICogICAgMiAtIGBfLmJpbmRLZXlgXG4gKiAgICA0IC0gYF8uY3VycnlgIG9yIGBfLmN1cnJ5UmlnaHRgIG9mIGEgYm91bmQgZnVuY3Rpb25cbiAqICAgIDggLSBgXy5jdXJyeWBcbiAqICAgMTYgLSBgXy5jdXJyeVJpZ2h0YFxuICogICAzMiAtIGBfLnBhcnRpYWxgXG4gKiAgIDY0IC0gYF8ucGFydGlhbFJpZ2h0YFxuICogIDEyOCAtIGBfLnJlYXJnYFxuICogIDI1NiAtIGBfLmFyeWBcbiAqICA1MTIgLSBgXy5mbGlwYFxuICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzXSBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVdyYXAoZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIGFyZ1BvcywgYXJ5LCBhcml0eSkge1xuICB2YXIgaXNCaW5kS2V5ID0gYml0bWFzayAmIFdSQVBfQklORF9LRVlfRkxBRztcbiAgaWYgKCFpc0JpbmRLZXkgJiYgdHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB2YXIgbGVuZ3RoID0gcGFydGlhbHMgPyBwYXJ0aWFscy5sZW5ndGggOiAwO1xuICBpZiAoIWxlbmd0aCkge1xuICAgIGJpdG1hc2sgJj0gfihXUkFQX1BBUlRJQUxfRkxBRyB8IFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHKTtcbiAgICBwYXJ0aWFscyA9IGhvbGRlcnMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgYXJ5ID0gYXJ5ID09PSB1bmRlZmluZWQgPyBhcnkgOiBuYXRpdmVNYXgodG9JbnRlZ2VyKGFyeSksIDApO1xuICBhcml0eSA9IGFyaXR5ID09PSB1bmRlZmluZWQgPyBhcml0eSA6IHRvSW50ZWdlcihhcml0eSk7XG4gIGxlbmd0aCAtPSBob2xkZXJzID8gaG9sZGVycy5sZW5ndGggOiAwO1xuXG4gIGlmIChiaXRtYXNrICYgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcpIHtcbiAgICB2YXIgcGFydGlhbHNSaWdodCA9IHBhcnRpYWxzLFxuICAgICAgICBob2xkZXJzUmlnaHQgPSBob2xkZXJzO1xuXG4gICAgcGFydGlhbHMgPSBob2xkZXJzID0gdW5kZWZpbmVkO1xuICB9XG4gIHZhciBkYXRhID0gaXNCaW5kS2V5ID8gdW5kZWZpbmVkIDogZ2V0RGF0YShmdW5jKTtcblxuICB2YXIgbmV3RGF0YSA9IFtcbiAgICBmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LFxuICAgIGFyZ1BvcywgYXJ5LCBhcml0eVxuICBdO1xuXG4gIGlmIChkYXRhKSB7XG4gICAgbWVyZ2VEYXRhKG5ld0RhdGEsIGRhdGEpO1xuICB9XG4gIGZ1bmMgPSBuZXdEYXRhWzBdO1xuICBiaXRtYXNrID0gbmV3RGF0YVsxXTtcbiAgdGhpc0FyZyA9IG5ld0RhdGFbMl07XG4gIHBhcnRpYWxzID0gbmV3RGF0YVszXTtcbiAgaG9sZGVycyA9IG5ld0RhdGFbNF07XG4gIGFyaXR5ID0gbmV3RGF0YVs5XSA9IG5ld0RhdGFbOV0gPT09IHVuZGVmaW5lZFxuICAgID8gKGlzQmluZEtleSA/IDAgOiBmdW5jLmxlbmd0aClcbiAgICA6IG5hdGl2ZU1heChuZXdEYXRhWzldIC0gbGVuZ3RoLCAwKTtcblxuICBpZiAoIWFyaXR5ICYmIGJpdG1hc2sgJiAoV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9DVVJSWV9SSUdIVF9GTEFHKSkge1xuICAgIGJpdG1hc2sgJj0gfihXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpO1xuICB9XG4gIGlmICghYml0bWFzayB8fCBiaXRtYXNrID09IFdSQVBfQklORF9GTEFHKSB7XG4gICAgdmFyIHJlc3VsdCA9IGNyZWF0ZUJpbmQoZnVuYywgYml0bWFzaywgdGhpc0FyZyk7XG4gIH0gZWxzZSBpZiAoYml0bWFzayA9PSBXUkFQX0NVUlJZX0ZMQUcgfHwgYml0bWFzayA9PSBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpIHtcbiAgICByZXN1bHQgPSBjcmVhdGVDdXJyeShmdW5jLCBiaXRtYXNrLCBhcml0eSk7XG4gIH0gZWxzZSBpZiAoKGJpdG1hc2sgPT0gV1JBUF9QQVJUSUFMX0ZMQUcgfHwgYml0bWFzayA9PSAoV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX1BBUlRJQUxfRkxBRykpICYmICFob2xkZXJzLmxlbmd0aCkge1xuICAgIHJlc3VsdCA9IGNyZWF0ZVBhcnRpYWwoZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IGNyZWF0ZUh5YnJpZC5hcHBseSh1bmRlZmluZWQsIG5ld0RhdGEpO1xuICB9XG4gIHZhciBzZXR0ZXIgPSBkYXRhID8gYmFzZVNldERhdGEgOiBzZXREYXRhO1xuICByZXR1cm4gc2V0V3JhcFRvU3RyaW5nKHNldHRlcihyZXN1bHQsIG5ld0RhdGEpLCBmdW5jLCBiaXRtYXNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVXcmFwO1xuIiwidmFyIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuL2lzUGxhaW5PYmplY3QnKTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLm9taXRgIHRvIGN1c3RvbWl6ZSBpdHMgYF8uY2xvbmVEZWVwYCB1c2UgdG8gb25seSBjbG9uZSBwbGFpblxuICogb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB1bmNsb25lZCB2YWx1ZSBvciBgdW5kZWZpbmVkYCB0byBkZWZlciBjbG9uaW5nIHRvIGBfLmNsb25lRGVlcGAuXG4gKi9cbmZ1bmN0aW9uIGN1c3RvbU9taXRDbG9uZSh2YWx1ZSkge1xuICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyB1bmRlZmluZWQgOiB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjdXN0b21PbWl0Q2xvbmU7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICB2YXIgZnVuYyA9IGdldE5hdGl2ZShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xuICAgIGZ1bmMoe30sICcnLCB7fSk7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZVByb3BlcnR5O1xuIiwidmFyIFNldENhY2hlID0gcmVxdWlyZSgnLi9fU2V0Q2FjaGUnKSxcbiAgICBhcnJheVNvbWUgPSByZXF1aXJlKCcuL19hcnJheVNvbWUnKSxcbiAgICBjYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2NhY2hlSGFzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGFycmF5cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtBcnJheX0gb3RoZXIgVGhlIG90aGVyIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBhcnJheWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQXJyYXlzKGFycmF5LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgYXJyTGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoZXIubGVuZ3RoO1xuXG4gIGlmIChhcnJMZW5ndGggIT0gb3RoTGVuZ3RoICYmICEoaXNQYXJ0aWFsICYmIG90aExlbmd0aCA+IGFyckxlbmd0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChhcnJheSk7XG4gIGlmIChzdGFja2VkICYmIHN0YWNrLmdldChvdGhlcikpIHtcbiAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgfVxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IHRydWUsXG4gICAgICBzZWVuID0gKGJpdG1hc2sgJiBDT01QQVJFX1VOT1JERVJFRF9GTEFHKSA/IG5ldyBTZXRDYWNoZSA6IHVuZGVmaW5lZDtcblxuICBzdGFjay5zZXQoYXJyYXksIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBhcnJheSk7XG5cbiAgLy8gSWdub3JlIG5vbi1pbmRleCBwcm9wZXJ0aWVzLlxuICB3aGlsZSAoKytpbmRleCA8IGFyckxlbmd0aCkge1xuICAgIHZhciBhcnJWYWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltpbmRleF07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgYXJyVmFsdWUsIGluZGV4LCBvdGhlciwgYXJyYXksIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIoYXJyVmFsdWUsIG90aFZhbHVlLCBpbmRleCwgYXJyYXksIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIGlmIChjb21wYXJlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY29tcGFyZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmIChzZWVuKSB7XG4gICAgICBpZiAoIWFycmF5U29tZShvdGhlciwgZnVuY3Rpb24ob3RoVmFsdWUsIG90aEluZGV4KSB7XG4gICAgICAgICAgICBpZiAoIWNhY2hlSGFzKHNlZW4sIG90aEluZGV4KSAmJlxuICAgICAgICAgICAgICAgIChhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKSkge1xuICAgICAgICAgICAgICByZXR1cm4gc2Vlbi5wdXNoKG90aEluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSkge1xuICAgICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghKFxuICAgICAgICAgIGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fFxuICAgICAgICAgICAgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShhcnJheSk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxBcnJheXM7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgVWludDhBcnJheSA9IHJlcXVpcmUoJy4vX1VpbnQ4QXJyYXknKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgbWFwVG9BcnJheSA9IHJlcXVpcmUoJy4vX21hcFRvQXJyYXknKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFZhbHVlT2YgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnZhbHVlT2YgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBjb21wYXJpbmcgb2JqZWN0cyBvZlxuICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNvbXBhcmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0cyB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAob2JqZWN0LmJ5dGVPZmZzZXQgIT0gb3RoZXIuYnl0ZU9mZnNldCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgb2JqZWN0ID0gb2JqZWN0LmJ1ZmZlcjtcbiAgICAgIG90aGVyID0gb3RoZXIuYnVmZmVyO1xuXG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBVaW50OEFycmF5KG9iamVjdCksIG5ldyBVaW50OEFycmF5KG90aGVyKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cbiAgICAgIC8vIEludmFsaWQgZGF0ZXMgYXJlIGNvZXJjZWQgdG8gYE5hTmAuXG4gICAgICByZXR1cm4gZXEoK29iamVjdCwgK290aGVyKTtcblxuICAgIGNhc2UgZXJyb3JUYWc6XG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWUgPT0gb3RoZXIubmFtZSAmJiBvYmplY3QubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICAvLyBDb2VyY2UgcmVnZXhlcyB0byBzdHJpbmdzIGFuZCB0cmVhdCBzdHJpbmdzLCBwcmltaXRpdmVzIGFuZCBvYmplY3RzLFxuICAgICAgLy8gYXMgZXF1YWwuIFNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiBvYmplY3QgPT0gKG90aGVyICsgJycpO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICB2YXIgY29udmVydCA9IG1hcFRvQXJyYXk7XG5cbiAgICBjYXNlIHNldFRhZzpcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XG4gICAgICBjb252ZXJ0IHx8IChjb252ZXJ0ID0gc2V0VG9BcnJheSk7XG5cbiAgICAgIGlmIChvYmplY3Quc2l6ZSAhPSBvdGhlci5zaXplICYmICFpc1BhcnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgICAgIGlmIChzdGFja2VkKSB7XG4gICAgICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xuICAgICAgfVxuICAgICAgYml0bWFzayB8PSBDT01QQVJFX1VOT1JERVJFRF9GTEFHO1xuXG4gICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgICAgIHZhciByZXN1bHQgPSBlcXVhbEFycmF5cyhjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgICAgIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgaWYgKHN5bWJvbFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQnlUYWc7XG4iLCJ2YXIgZ2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3Igb2JqZWN0cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgb2JqUHJvcHMgPSBnZXRBbGxLZXlzKG9iamVjdCksXG4gICAgICBvYmpMZW5ndGggPSBvYmpQcm9wcy5sZW5ndGgsXG4gICAgICBvdGhQcm9wcyA9IGdldEFsbEtleXMob3RoZXIpLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoUHJvcHMubGVuZ3RoO1xuXG4gIGlmIChvYmpMZW5ndGggIT0gb3RoTGVuZ3RoICYmICFpc1BhcnRpYWwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGluZGV4ID0gb2JqTGVuZ3RoO1xuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIHZhciBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgaWYgKCEoaXNQYXJ0aWFsID8ga2V5IGluIG90aGVyIDogaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwga2V5KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICBpZiAoc3RhY2tlZCAmJiBzdGFjay5nZXQob3RoZXIpKSB7XG4gICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IHRydWU7XG4gIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBvYmplY3QpO1xuXG4gIHZhciBza2lwQ3RvciA9IGlzUGFydGlhbDtcbiAgd2hpbGUgKCsraW5kZXggPCBvYmpMZW5ndGgpIHtcbiAgICBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJba2V5XTtcblxuICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBvYmpWYWx1ZSwga2V5LCBvdGhlciwgb2JqZWN0LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSwga2V5LCBvYmplY3QsIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmICghKGNvbXBhcmVkID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IChvYmpWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKG9ialZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKVxuICAgICAgICAgIDogY29tcGFyZWRcbiAgICAgICAgKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2tpcEN0b3IgfHwgKHNraXBDdG9yID0ga2V5ID09ICdjb25zdHJ1Y3RvcicpO1xuICB9XG4gIGlmIChyZXN1bHQgJiYgIXNraXBDdG9yKSB7XG4gICAgdmFyIG9iakN0b3IgPSBvYmplY3QuY29uc3RydWN0b3IsXG4gICAgICAgIG90aEN0b3IgPSBvdGhlci5jb25zdHJ1Y3RvcjtcblxuICAgIC8vIE5vbiBgT2JqZWN0YCBvYmplY3QgaW5zdGFuY2VzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWFsLlxuICAgIGlmIChvYmpDdG9yICE9IG90aEN0b3IgJiZcbiAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmXG4gICAgICAgICEodHlwZW9mIG9iakN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvYmpDdG9yIGluc3RhbmNlb2Ygb2JqQ3RvciAmJlxuICAgICAgICAgIHR5cGVvZiBvdGhDdG9yID09ICdmdW5jdGlvbicgJiYgb3RoQ3RvciBpbnN0YW5jZW9mIG90aEN0b3IpKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxPYmplY3RzO1xuIiwidmFyIGJhc2VQcm9wZXJ0eU9mID0gcmVxdWlyZSgnLi9fYmFzZVByb3BlcnR5T2YnKTtcblxuLyoqIFVzZWQgdG8gbWFwIGNoYXJhY3RlcnMgdG8gSFRNTCBlbnRpdGllcy4gKi9cbnZhciBodG1sRXNjYXBlcyA9IHtcbiAgJyYnOiAnJmFtcDsnLFxuICAnPCc6ICcmbHQ7JyxcbiAgJz4nOiAnJmd0OycsXG4gICdcIic6ICcmcXVvdDsnLFxuICBcIidcIjogJyYjMzk7J1xufTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLmVzY2FwZWAgdG8gY29udmVydCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaHIgVGhlIG1hdGNoZWQgY2hhcmFjdGVyIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgY2hhcmFjdGVyLlxuICovXG52YXIgZXNjYXBlSHRtbENoYXIgPSBiYXNlUHJvcGVydHlPZihodG1sRXNjYXBlcyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZXNjYXBlSHRtbENoYXI7XG4iLCJ2YXIgZmxhdHRlbiA9IHJlcXVpcmUoJy4vZmxhdHRlbicpLFxuICAgIG92ZXJSZXN0ID0gcmVxdWlyZSgnLi9fb3ZlclJlc3QnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggZmxhdHRlbnMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gZmxhdFJlc3QoZnVuYykge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgdW5kZWZpbmVkLCBmbGF0dGVuKSwgZnVuYyArICcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0UmVzdDtcbiIsIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbm1vZHVsZS5leHBvcnRzID0gZnJlZUdsb2JhbDtcbiIsInZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5cywgZ2V0U3ltYm9scyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsS2V5cztcbiIsInZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9sc0luID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9sc0luJyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBnZXRBbGxLZXlzSW4ob2JqZWN0KSB7XG4gIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNJbiwgZ2V0U3ltYm9sc0luKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRBbGxLZXlzSW47XG4iLCJ2YXIgbWV0YU1hcCA9IHJlcXVpcmUoJy4vX21ldGFNYXAnKSxcbiAgICBub29wID0gcmVxdWlyZSgnLi9ub29wJyk7XG5cbi8qKlxuICogR2V0cyBtZXRhZGF0YSBmb3IgYGZ1bmNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtZXRhZGF0YSBmb3IgYGZ1bmNgLlxuICovXG52YXIgZ2V0RGF0YSA9ICFtZXRhTWFwID8gbm9vcCA6IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgcmV0dXJuIG1ldGFNYXAuZ2V0KGZ1bmMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXREYXRhO1xuIiwidmFyIHJlYWxOYW1lcyA9IHJlcXVpcmUoJy4vX3JlYWxOYW1lcycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIG5hbWUgb2YgYGZ1bmNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNOYW1lKGZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IChmdW5jLm5hbWUgKyAnJyksXG4gICAgICBhcnJheSA9IHJlYWxOYW1lc1tyZXN1bHRdLFxuICAgICAgbGVuZ3RoID0gaGFzT3duUHJvcGVydHkuY2FsbChyZWFsTmFtZXMsIHJlc3VsdCkgPyBhcnJheS5sZW5ndGggOiAwO1xuXG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIHZhciBkYXRhID0gYXJyYXlbbGVuZ3RoXSxcbiAgICAgICAgb3RoZXJGdW5jID0gZGF0YS5mdW5jO1xuICAgIGlmIChvdGhlckZ1bmMgPT0gbnVsbCB8fCBvdGhlckZ1bmMgPT0gZnVuYykge1xuICAgICAgcmV0dXJuIGRhdGEubmFtZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRGdW5jTmFtZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgYXJndW1lbnQgcGxhY2Vob2xkZXIgdmFsdWUgZm9yIGBmdW5jYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwbGFjZWhvbGRlciB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0SG9sZGVyKGZ1bmMpIHtcbiAgdmFyIG9iamVjdCA9IGZ1bmM7XG4gIHJldHVybiBvYmplY3QucGxhY2Vob2xkZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0SG9sZGVyO1xuIiwidmFyIGlzS2V5YWJsZSA9IHJlcXVpcmUoJy4vX2lzS2V5YWJsZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWFwRGF0YTtcbiIsInZhciBpc1N0cmljdENvbXBhcmFibGUgPSByZXF1aXJlKCcuL19pc1N0cmljdENvbXBhcmFibGUnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3Mgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbWF0Y2ggZGF0YSBvZiBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gZ2V0TWF0Y2hEYXRhKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0ga2V5cyhvYmplY3QpLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICB2YXIga2V5ID0gcmVzdWx0W2xlbmd0aF0sXG4gICAgICAgIHZhbHVlID0gb2JqZWN0W2tleV07XG5cbiAgICByZXN1bHRbbGVuZ3RoXSA9IFtrZXksIHZhbHVlLCBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpXTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE1hdGNoRGF0YTtcbiIsInZhciBiYXNlSXNOYXRpdmUgPSByZXF1aXJlKCcuL19iYXNlSXNOYXRpdmUnKSxcbiAgICBnZXRWYWx1ZSA9IHJlcXVpcmUoJy4vX2dldFZhbHVlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TmF0aXZlO1xuIiwidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFByb3RvdHlwZTtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFJhd1RhZztcbiIsInZhciBhcnJheUZpbHRlciA9IHJlcXVpcmUoJy4vX2FycmF5RmlsdGVyJyksXG4gICAgc3R1YkFycmF5ID0gcmVxdWlyZSgnLi9zdHViQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAqL1xudmFyIGdldFN5bWJvbHMgPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gIHJldHVybiBhcnJheUZpbHRlcihuYXRpdmVHZXRTeW1ib2xzKG9iamVjdCksIGZ1bmN0aW9uKHN5bWJvbCkge1xuICAgIHJldHVybiBwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgc3ltYm9sKTtcbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFN5bWJvbHM7XG4iLCJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBzdHViQXJyYXkgPSByZXF1aXJlKCcuL3N0dWJBcnJheScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzSW4gPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHdoaWxlIChvYmplY3QpIHtcbiAgICBhcnJheVB1c2gocmVzdWx0LCBnZXRTeW1ib2xzKG9iamVjdCkpO1xuICAgIG9iamVjdCA9IGdldFByb3RvdHlwZShvYmplY3QpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFN5bWJvbHNJbjtcbiIsInZhciBEYXRhVmlldyA9IHJlcXVpcmUoJy4vX0RhdGFWaWV3JyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgUHJvbWlzZSA9IHJlcXVpcmUoJy4vX1Byb21pc2UnKSxcbiAgICBTZXQgPSByZXF1aXJlKCcuL19TZXQnKSxcbiAgICBXZWFrTWFwID0gcmVxdWlyZSgnLi9fV2Vha01hcCcpLFxuICAgIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcHJvbWlzZVRhZyA9ICdbb2JqZWN0IFByb21pc2VdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWFwcywgc2V0cywgYW5kIHdlYWttYXBzLiAqL1xudmFyIGRhdGFWaWV3Q3RvclN0cmluZyA9IHRvU291cmNlKERhdGFWaWV3KSxcbiAgICBtYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoTWFwKSxcbiAgICBwcm9taXNlQ3RvclN0cmluZyA9IHRvU291cmNlKFByb21pc2UpLFxuICAgIHNldEN0b3JTdHJpbmcgPSB0b1NvdXJjZShTZXQpLFxuICAgIHdlYWtNYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoV2Vha01hcCk7XG5cbi8qKlxuICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbnZhciBnZXRUYWcgPSBiYXNlR2V0VGFnO1xuXG4vLyBGYWxsYmFjayBmb3IgZGF0YSB2aWV3cywgbWFwcywgc2V0cywgYW5kIHdlYWsgbWFwcyBpbiBJRSAxMSBhbmQgcHJvbWlzZXMgaW4gTm9kZS5qcyA8IDYuXG5pZiAoKERhdGFWaWV3ICYmIGdldFRhZyhuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcpIHx8XG4gICAgKE1hcCAmJiBnZXRUYWcobmV3IE1hcCkgIT0gbWFwVGFnKSB8fFxuICAgIChQcm9taXNlICYmIGdldFRhZyhQcm9taXNlLnJlc29sdmUoKSkgIT0gcHJvbWlzZVRhZykgfHxcbiAgICAoU2V0ICYmIGdldFRhZyhuZXcgU2V0KSAhPSBzZXRUYWcpIHx8XG4gICAgKFdlYWtNYXAgJiYgZ2V0VGFnKG5ldyBXZWFrTWFwKSAhPSB3ZWFrTWFwVGFnKSkge1xuICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhciByZXN1bHQgPSBiYXNlR2V0VGFnKHZhbHVlKSxcbiAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgY3RvclN0cmluZyA9IEN0b3IgPyB0b1NvdXJjZShDdG9yKSA6ICcnO1xuXG4gICAgaWYgKGN0b3JTdHJpbmcpIHtcbiAgICAgIHN3aXRjaCAoY3RvclN0cmluZykge1xuICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xuICAgICAgICBjYXNlIG1hcEN0b3JTdHJpbmc6IHJldHVybiBtYXBUYWc7XG4gICAgICAgIGNhc2UgcHJvbWlzZUN0b3JTdHJpbmc6IHJldHVybiBwcm9taXNlVGFnO1xuICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XG4gICAgICAgIGNhc2Ugd2Vha01hcEN0b3JTdHJpbmc6IHJldHVybiB3ZWFrTWFwVGFnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFRhZztcbiIsIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFZhbHVlO1xuIiwiLyoqIFVzZWQgdG8gbWF0Y2ggd3JhcCBkZXRhaWwgY29tbWVudHMuICovXG52YXIgcmVXcmFwRGV0YWlscyA9IC9cXHtcXG5cXC9cXCogXFxbd3JhcHBlZCB3aXRoICguKylcXF0gXFwqLyxcbiAgICByZVNwbGl0RGV0YWlscyA9IC8sPyAmIC87XG5cbi8qKlxuICogRXh0cmFjdHMgd3JhcHBlciBkZXRhaWxzIGZyb20gdGhlIGBzb3VyY2VgIGJvZHkgY29tbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBUaGUgc291cmNlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHdyYXBwZXIgZGV0YWlscy5cbiAqL1xuZnVuY3Rpb24gZ2V0V3JhcERldGFpbHMoc291cmNlKSB7XG4gIHZhciBtYXRjaCA9IHNvdXJjZS5tYXRjaChyZVdyYXBEZXRhaWxzKTtcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0uc3BsaXQocmVTcGxpdERldGFpbHMpIDogW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0V3JhcERldGFpbHM7XG4iLCJ2YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHBhdGhgIGV4aXN0cyBvbiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYXNGdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjayBwcm9wZXJ0aWVzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzUGF0aChvYmplY3QsIHBhdGgsIGhhc0Z1bmMpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHRvS2V5KHBhdGhbaW5kZXhdKTtcbiAgICBpZiAoIShyZXN1bHQgPSBvYmplY3QgIT0gbnVsbCAmJiBoYXNGdW5jKG9iamVjdCwga2V5KSkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBvYmplY3QgPSBvYmplY3Rba2V5XTtcbiAgfVxuICBpZiAocmVzdWx0IHx8ICsraW5kZXggIT0gbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBsZW5ndGggPSBvYmplY3QgPT0gbnVsbCA/IDAgOiBvYmplY3QubGVuZ3RoO1xuICByZXR1cm4gISFsZW5ndGggJiYgaXNMZW5ndGgobGVuZ3RoKSAmJiBpc0luZGV4KGtleSwgbGVuZ3RoKSAmJlxuICAgIChpc0FycmF5KG9iamVjdCkgfHwgaXNBcmd1bWVudHMob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzUGF0aDtcbiIsIi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjaGFyYWN0ZXIgY2xhc3Nlcy4gKi9cbnZhciByc0FzdHJhbFJhbmdlID0gJ1xcXFx1ZDgwMC1cXFxcdWRmZmYnLFxuICAgIHJzQ29tYm9NYXJrc1JhbmdlID0gJ1xcXFx1MDMwMC1cXFxcdTAzNmYnLFxuICAgIHJlQ29tYm9IYWxmTWFya3NSYW5nZSA9ICdcXFxcdWZlMjAtXFxcXHVmZTJmJyxcbiAgICByc0NvbWJvU3ltYm9sc1JhbmdlID0gJ1xcXFx1MjBkMC1cXFxcdTIwZmYnLFxuICAgIHJzQ29tYm9SYW5nZSA9IHJzQ29tYm9NYXJrc1JhbmdlICsgcmVDb21ib0hhbGZNYXJrc1JhbmdlICsgcnNDb21ib1N5bWJvbHNSYW5nZSxcbiAgICByc1ZhclJhbmdlID0gJ1xcXFx1ZmUwZVxcXFx1ZmUwZic7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjYXB0dXJlIGdyb3Vwcy4gKi9cbnZhciByc1pXSiA9ICdcXFxcdTIwMGQnO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgc3RyaW5ncyB3aXRoIFt6ZXJvLXdpZHRoIGpvaW5lcnMgb3IgY29kZSBwb2ludHMgZnJvbSB0aGUgYXN0cmFsIHBsYW5lc10oaHR0cDovL2Vldi5lZS9ibG9nLzIwMTUvMDkvMTIvZGFyay1jb3JuZXJzLW9mLXVuaWNvZGUvKS4gKi9cbnZhciByZUhhc1VuaWNvZGUgPSBSZWdFeHAoJ1snICsgcnNaV0ogKyByc0FzdHJhbFJhbmdlICArIHJzQ29tYm9SYW5nZSArIHJzVmFyUmFuZ2UgKyAnXScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgc3RyaW5nYCBjb250YWlucyBVbmljb2RlIHN5bWJvbHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGEgc3ltYm9sIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc1VuaWNvZGUoc3RyaW5nKSB7XG4gIHJldHVybiByZUhhc1VuaWNvZGUudGVzdChzdHJpbmcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc1VuaWNvZGU7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKi9cbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gdGhpcy5oYXMoa2V5KSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaERlbGV0ZTtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hHZXQ7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgaGFzaCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoSGFzO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoU2V0O1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBhcnJheSBjbG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lQXJyYXkoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IG5ldyBhcnJheS5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIC8vIEFkZCBwcm9wZXJ0aWVzIGFzc2lnbmVkIGJ5IGBSZWdFeHAjZXhlY2AuXG4gIGlmIChsZW5ndGggJiYgdHlwZW9mIGFycmF5WzBdID09ICdzdHJpbmcnICYmIGhhc093blByb3BlcnR5LmNhbGwoYXJyYXksICdpbmRleCcpKSB7XG4gICAgcmVzdWx0LmluZGV4ID0gYXJyYXkuaW5kZXg7XG4gICAgcmVzdWx0LmlucHV0ID0gYXJyYXkuaW5wdXQ7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVBcnJheTtcbiIsInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpLFxuICAgIGNsb25lRGF0YVZpZXcgPSByZXF1aXJlKCcuL19jbG9uZURhdGFWaWV3JyksXG4gICAgY2xvbmVSZWdFeHAgPSByZXF1aXJlKCcuL19jbG9uZVJlZ0V4cCcpLFxuICAgIGNsb25lU3ltYm9sID0gcmVxdWlyZSgnLi9fY2xvbmVTeW1ib2wnKSxcbiAgICBjbG9uZVR5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19jbG9uZVR5cGVkQXJyYXknKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lIGJhc2VkIG9uIGl0cyBgdG9TdHJpbmdUYWdgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY2xvbmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE1hcGAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgYFNldGAsIG9yIGBTdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZUJ5VGFnKG9iamVjdCwgdGFnLCBpc0RlZXApIHtcbiAgdmFyIEN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIHJldHVybiBjbG9uZUFycmF5QnVmZmVyKG9iamVjdCk7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yKCtvYmplY3QpO1xuXG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIHJldHVybiBjbG9uZURhdGFWaWV3KG9iamVjdCwgaXNEZWVwKTtcblxuICAgIGNhc2UgZmxvYXQzMlRhZzogY2FzZSBmbG9hdDY0VGFnOlxuICAgIGNhc2UgaW50OFRhZzogY2FzZSBpbnQxNlRhZzogY2FzZSBpbnQzMlRhZzpcbiAgICBjYXNlIHVpbnQ4VGFnOiBjYXNlIHVpbnQ4Q2xhbXBlZFRhZzogY2FzZSB1aW50MTZUYWc6IGNhc2UgdWludDMyVGFnOlxuICAgICAgcmV0dXJuIGNsb25lVHlwZWRBcnJheShvYmplY3QsIGlzRGVlcCk7XG5cbiAgICBjYXNlIG1hcFRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcjtcblxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yKG9iamVjdCk7XG5cbiAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICAgIHJldHVybiBjbG9uZVJlZ0V4cChvYmplY3QpO1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3I7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIHJldHVybiBjbG9uZVN5bWJvbChvYmplY3QpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5pdENsb25lQnlUYWc7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xuICByZXR1cm4gKHR5cGVvZiBvYmplY3QuY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNQcm90b3R5cGUob2JqZWN0KSlcbiAgICA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpXG4gICAgOiB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVPYmplY3Q7XG4iLCIvKiogVXNlZCB0byBtYXRjaCB3cmFwIGRldGFpbCBjb21tZW50cy4gKi9cbnZhciByZVdyYXBDb21tZW50ID0gL1xceyg/OlxcblxcL1xcKiBcXFt3cmFwcGVkIHdpdGggLitcXF0gXFwqXFwvKT9cXG4/LztcblxuLyoqXG4gKiBJbnNlcnRzIHdyYXBwZXIgYGRldGFpbHNgIGluIGEgY29tbWVudCBhdCB0aGUgdG9wIG9mIHRoZSBgc291cmNlYCBib2R5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIFRoZSBzb3VyY2UgdG8gbW9kaWZ5LlxuICogQHJldHVybnMge0FycmF5fSBkZXRhaWxzIFRoZSBkZXRhaWxzIHRvIGluc2VydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIG1vZGlmaWVkIHNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gaW5zZXJ0V3JhcERldGFpbHMoc291cmNlLCBkZXRhaWxzKSB7XG4gIHZhciBsZW5ndGggPSBkZXRhaWxzLmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBsZW5ndGggLSAxO1xuICBkZXRhaWxzW2xhc3RJbmRleF0gPSAobGVuZ3RoID4gMSA/ICcmICcgOiAnJykgKyBkZXRhaWxzW2xhc3RJbmRleF07XG4gIGRldGFpbHMgPSBkZXRhaWxzLmpvaW4obGVuZ3RoID4gMiA/ICcsICcgOiAnICcpO1xuICByZXR1cm4gc291cmNlLnJlcGxhY2UocmVXcmFwQ29tbWVudCwgJ3tcXG4vKiBbd3JhcHBlZCB3aXRoICcgKyBkZXRhaWxzICsgJ10gKi9cXG4nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRXcmFwRGV0YWlscztcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwcmVhZGFibGVTeW1ib2wgPSBTeW1ib2wgPyBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgZmxhdHRlbmFibGUgYGFyZ3VtZW50c2Agb2JqZWN0IG9yIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZsYXR0ZW5hYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzRmxhdHRlbmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIGlzQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSB8fFxuICAgICEhKHNwcmVhZGFibGVTeW1ib2wgJiYgdmFsdWUgJiYgdmFsdWVbc3ByZWFkYWJsZVN5bWJvbF0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRmxhdHRlbmFibGU7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xudmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJbmRleDtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgKSB7XG4gICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJdGVyYXRlZUNhbGw7XG4iLCJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxcbiAgICByZUlzUGxhaW5Qcm9wID0gL15cXHcqJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lIGFuZCBub3QgYSBwcm9wZXJ0eSBwYXRoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXkodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGlmICh0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicgfHxcbiAgICAgIHZhbHVlID09IG51bGwgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIHJlSXNQbGFpblByb3AudGVzdCh2YWx1ZSkgfHwgIXJlSXNEZWVwUHJvcC50ZXN0KHZhbHVlKSB8fFxuICAgIChvYmplY3QgIT0gbnVsbCAmJiB2YWx1ZSBpbiBPYmplY3Qob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXk7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXlhYmxlO1xuIiwidmFyIExhenlXcmFwcGVyID0gcmVxdWlyZSgnLi9fTGF6eVdyYXBwZXInKSxcbiAgICBnZXREYXRhID0gcmVxdWlyZSgnLi9fZ2V0RGF0YScpLFxuICAgIGdldEZ1bmNOYW1lID0gcmVxdWlyZSgnLi9fZ2V0RnVuY05hbWUnKSxcbiAgICBsb2Rhc2ggPSByZXF1aXJlKCcuL3dyYXBwZXJMb2Rhc2gnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBhIGxhenkgY291bnRlcnBhcnQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBoYXMgYSBsYXp5IGNvdW50ZXJwYXJ0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNMYXppYWJsZShmdW5jKSB7XG4gIHZhciBmdW5jTmFtZSA9IGdldEZ1bmNOYW1lKGZ1bmMpLFxuICAgICAgb3RoZXIgPSBsb2Rhc2hbZnVuY05hbWVdO1xuXG4gIGlmICh0eXBlb2Ygb3RoZXIgIT0gJ2Z1bmN0aW9uJyB8fCAhKGZ1bmNOYW1lIGluIExhenlXcmFwcGVyLnByb3RvdHlwZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGZ1bmMgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIGRhdGEgPSBnZXREYXRhKG90aGVyKTtcbiAgcmV0dXJuICEhZGF0YSAmJiBmdW5jID09PSBkYXRhWzBdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTGF6aWFibGU7XG4iLCJ2YXIgY29yZUpzRGF0YSA9IHJlcXVpcmUoJy4vX2NvcmVKc0RhdGEnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc01hc2tlZDtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb3RvdHlwZTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcbiAqICBlcXVhbGl0eSBjb21wYXJpc29ucywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSAmJiAhaXNPYmplY3QodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyaWN0Q29tcGFyYWJsZTtcbiIsIi8qKlxuICogQ29udmVydHMgYGl0ZXJhdG9yYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGl0ZXJhdG9yIFRoZSBpdGVyYXRvciB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGl0ZXJhdG9yVG9BcnJheShpdGVyYXRvcikge1xuICB2YXIgZGF0YSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICghKGRhdGEgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICByZXN1bHQucHVzaChkYXRhLnZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGl0ZXJhdG9yVG9BcnJheTtcbiIsIi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVDbGVhcjtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgLS10aGlzLnNpemU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZURlbGV0ZTtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVHZXQ7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUhhcztcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICArK3RoaXMuc2l6ZTtcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZVNldDtcbiIsInZhciBIYXNoID0gcmVxdWlyZSgnLi9fSGFzaCcpLFxuICAgIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVDbGVhcjtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZURlbGV0ZTtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVHZXQ7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUhhcztcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVTZXQ7XG4iLCIvKipcbiAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gKi9cbmZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobWFwLnNpemUpO1xuXG4gIG1hcC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSBba2V5LCB2YWx1ZV07XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFRvQXJyYXk7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgbWF0Y2hlc1Byb3BlcnR5YCBmb3Igc291cmNlIHZhbHVlcyBzdWl0YWJsZVxuICogZm9yIHN0cmljdCBlcXVhbGl0eSBjb21wYXJpc29ucywgaS5lLiBgPT09YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKGtleSwgc3JjVmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0W2tleV0gPT09IHNyY1ZhbHVlICYmXG4gICAgICAoc3JjVmFsdWUgIT09IHVuZGVmaW5lZCB8fCAoa2V5IGluIE9iamVjdChvYmplY3QpKSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWF0Y2hlc1N0cmljdENvbXBhcmFibGU7XG4iLCJ2YXIgbWVtb2l6ZSA9IHJlcXVpcmUoJy4vbWVtb2l6ZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgbWF4aW11bSBtZW1vaXplIGNhY2hlIHNpemUuICovXG52YXIgTUFYX01FTU9JWkVfU0laRSA9IDUwMDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XG4gIHZhciByZXN1bHQgPSBtZW1vaXplKGZ1bmMsIGZ1bmN0aW9uKGtleSkge1xuICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XG4gICAgICBjYWNoZS5jbGVhcigpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9KTtcblxuICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZUNhcHBlZDtcbiIsInZhciBjb21wb3NlQXJncyA9IHJlcXVpcmUoJy4vX2NvbXBvc2VBcmdzJyksXG4gICAgY29tcG9zZUFyZ3NSaWdodCA9IHJlcXVpcmUoJy4vX2NvbXBvc2VBcmdzUmlnaHQnKSxcbiAgICByZXBsYWNlSG9sZGVycyA9IHJlcXVpcmUoJy4vX3JlcGxhY2VIb2xkZXJzJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBpbnRlcm5hbCBhcmd1bWVudCBwbGFjZWhvbGRlci4gKi9cbnZhciBQTEFDRUhPTERFUiA9ICdfX2xvZGFzaF9wbGFjZWhvbGRlcl9fJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9CT1VORF9GTEFHID0gNCxcbiAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgIFdSQVBfQVJZX0ZMQUcgPSAxMjgsXG4gICAgV1JBUF9SRUFSR19GTEFHID0gMjU2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWluID0gTWF0aC5taW47XG5cbi8qKlxuICogTWVyZ2VzIHRoZSBmdW5jdGlvbiBtZXRhZGF0YSBvZiBgc291cmNlYCBpbnRvIGBkYXRhYC5cbiAqXG4gKiBNZXJnaW5nIG1ldGFkYXRhIHJlZHVjZXMgdGhlIG51bWJlciBvZiB3cmFwcGVycyB1c2VkIHRvIGludm9rZSBhIGZ1bmN0aW9uLlxuICogVGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIG1ldGhvZHMgbGlrZSBgXy5iaW5kYCwgYF8uY3VycnlgLCBhbmQgYF8ucGFydGlhbGBcbiAqIG1heSBiZSBhcHBsaWVkIHJlZ2FyZGxlc3Mgb2YgZXhlY3V0aW9uIG9yZGVyLiBNZXRob2RzIGxpa2UgYF8uYXJ5YCBhbmRcbiAqIGBfLnJlYXJnYCBtb2RpZnkgZnVuY3Rpb24gYXJndW1lbnRzLCBtYWtpbmcgdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlXG4gKiBleGVjdXRlZCBpbXBvcnRhbnQsIHByZXZlbnRpbmcgdGhlIG1lcmdpbmcgb2YgbWV0YWRhdGEuIEhvd2V2ZXIsIHdlIG1ha2VcbiAqIGFuIGV4Y2VwdGlvbiBmb3IgYSBzYWZlIGNvbWJpbmVkIGNhc2Ugd2hlcmUgY3VycmllZCBmdW5jdGlvbnMgaGF2ZSBgXy5hcnlgXG4gKiBhbmQgb3IgYF8ucmVhcmdgIGFwcGxpZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgVGhlIGRlc3RpbmF0aW9uIG1ldGFkYXRhLlxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBzb3VyY2UgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGRhdGFgLlxuICovXG5mdW5jdGlvbiBtZXJnZURhdGEoZGF0YSwgc291cmNlKSB7XG4gIHZhciBiaXRtYXNrID0gZGF0YVsxXSxcbiAgICAgIHNyY0JpdG1hc2sgPSBzb3VyY2VbMV0sXG4gICAgICBuZXdCaXRtYXNrID0gYml0bWFzayB8IHNyY0JpdG1hc2ssXG4gICAgICBpc0NvbW1vbiA9IG5ld0JpdG1hc2sgPCAoV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX0JJTkRfS0VZX0ZMQUcgfCBXUkFQX0FSWV9GTEFHKTtcblxuICB2YXIgaXNDb21ibyA9XG4gICAgKChzcmNCaXRtYXNrID09IFdSQVBfQVJZX0ZMQUcpICYmIChiaXRtYXNrID09IFdSQVBfQ1VSUllfRkxBRykpIHx8XG4gICAgKChzcmNCaXRtYXNrID09IFdSQVBfQVJZX0ZMQUcpICYmIChiaXRtYXNrID09IFdSQVBfUkVBUkdfRkxBRykgJiYgKGRhdGFbN10ubGVuZ3RoIDw9IHNvdXJjZVs4XSkpIHx8XG4gICAgKChzcmNCaXRtYXNrID09IChXUkFQX0FSWV9GTEFHIHwgV1JBUF9SRUFSR19GTEFHKSkgJiYgKHNvdXJjZVs3XS5sZW5ndGggPD0gc291cmNlWzhdKSAmJiAoYml0bWFzayA9PSBXUkFQX0NVUlJZX0ZMQUcpKTtcblxuICAvLyBFeGl0IGVhcmx5IGlmIG1ldGFkYXRhIGNhbid0IGJlIG1lcmdlZC5cbiAgaWYgKCEoaXNDb21tb24gfHwgaXNDb21ibykpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGB0aGlzQXJnYCBpZiBhdmFpbGFibGUuXG4gIGlmIChzcmNCaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcpIHtcbiAgICBkYXRhWzJdID0gc291cmNlWzJdO1xuICAgIC8vIFNldCB3aGVuIGN1cnJ5aW5nIGEgYm91bmQgZnVuY3Rpb24uXG4gICAgbmV3Qml0bWFzayB8PSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcgPyAwIDogV1JBUF9DVVJSWV9CT1VORF9GTEFHO1xuICB9XG4gIC8vIENvbXBvc2UgcGFydGlhbCBhcmd1bWVudHMuXG4gIHZhciB2YWx1ZSA9IHNvdXJjZVszXTtcbiAgaWYgKHZhbHVlKSB7XG4gICAgdmFyIHBhcnRpYWxzID0gZGF0YVszXTtcbiAgICBkYXRhWzNdID0gcGFydGlhbHMgPyBjb21wb3NlQXJncyhwYXJ0aWFscywgdmFsdWUsIHNvdXJjZVs0XSkgOiB2YWx1ZTtcbiAgICBkYXRhWzRdID0gcGFydGlhbHMgPyByZXBsYWNlSG9sZGVycyhkYXRhWzNdLCBQTEFDRUhPTERFUikgOiBzb3VyY2VbNF07XG4gIH1cbiAgLy8gQ29tcG9zZSBwYXJ0aWFsIHJpZ2h0IGFyZ3VtZW50cy5cbiAgdmFsdWUgPSBzb3VyY2VbNV07XG4gIGlmICh2YWx1ZSkge1xuICAgIHBhcnRpYWxzID0gZGF0YVs1XTtcbiAgICBkYXRhWzVdID0gcGFydGlhbHMgPyBjb21wb3NlQXJnc1JpZ2h0KHBhcnRpYWxzLCB2YWx1ZSwgc291cmNlWzZdKSA6IHZhbHVlO1xuICAgIGRhdGFbNl0gPSBwYXJ0aWFscyA/IHJlcGxhY2VIb2xkZXJzKGRhdGFbNV0sIFBMQUNFSE9MREVSKSA6IHNvdXJjZVs2XTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGBhcmdQb3NgIGlmIGF2YWlsYWJsZS5cbiAgdmFsdWUgPSBzb3VyY2VbN107XG4gIGlmICh2YWx1ZSkge1xuICAgIGRhdGFbN10gPSB2YWx1ZTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGBhcnlgIGlmIGl0J3Mgc21hbGxlci5cbiAgaWYgKHNyY0JpdG1hc2sgJiBXUkFQX0FSWV9GTEFHKSB7XG4gICAgZGF0YVs4XSA9IGRhdGFbOF0gPT0gbnVsbCA/IHNvdXJjZVs4XSA6IG5hdGl2ZU1pbihkYXRhWzhdLCBzb3VyY2VbOF0pO1xuICB9XG4gIC8vIFVzZSBzb3VyY2UgYGFyaXR5YCBpZiBvbmUgaXMgbm90IHByb3ZpZGVkLlxuICBpZiAoZGF0YVs5XSA9PSBudWxsKSB7XG4gICAgZGF0YVs5XSA9IHNvdXJjZVs5XTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGBmdW5jYCBhbmQgbWVyZ2UgYml0bWFza3MuXG4gIGRhdGFbMF0gPSBzb3VyY2VbMF07XG4gIGRhdGFbMV0gPSBuZXdCaXRtYXNrO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlRGF0YTtcbiIsInZhciBXZWFrTWFwID0gcmVxdWlyZSgnLi9fV2Vha01hcCcpO1xuXG4vKiogVXNlZCB0byBzdG9yZSBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBtZXRhTWFwID0gV2Vha01hcCAmJiBuZXcgV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBtZXRhTWFwO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgbmF0aXZlQ3JlYXRlID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2NyZWF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUNyZWF0ZTtcbiIsInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlS2V5cyA9IG92ZXJBcmcoT2JqZWN0LmtleXMsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5cztcbiIsIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBleGNlcHQgdGhhdCBpdCBpbmNsdWRlcyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUtleXNJbjtcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGVVdGlsO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0VG9TdHJpbmc7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgfVxuICAgIGluZGV4ID0gLTE7XG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgIH1cbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcbiAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyUmVzdDtcbiIsInZhciBiYXNlR2V0ID0gcmVxdWlyZSgnLi9fYmFzZUdldCcpLFxuICAgIGJhc2VTbGljZSA9IHJlcXVpcmUoJy4vX2Jhc2VTbGljZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIHBhcmVudCB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhdGggVGhlIHBhdGggdG8gZ2V0IHRoZSBwYXJlbnQgdmFsdWUgb2YuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcGFyZW50IHZhbHVlLlxuICovXG5mdW5jdGlvbiBwYXJlbnQob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBwYXRoLmxlbmd0aCA8IDIgPyBvYmplY3QgOiBiYXNlR2V0KG9iamVjdCwgYmFzZVNsaWNlKHBhdGgsIDAsIC0xKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiLyoqIFVzZWQgdG8gbG9va3VwIHVubWluaWZpZWQgZnVuY3Rpb24gbmFtZXMuICovXG52YXIgcmVhbE5hbWVzID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gcmVhbE5hbWVzO1xuIiwidmFyIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBSZW9yZGVyIGBhcnJheWAgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgaW5kZXhlcyB3aGVyZSB0aGUgZWxlbWVudCBhdFxuICogdGhlIGZpcnN0IGluZGV4IGlzIGFzc2lnbmVkIGFzIHRoZSBmaXJzdCBlbGVtZW50LCB0aGUgZWxlbWVudCBhdFxuICogdGhlIHNlY29uZCBpbmRleCBpcyBhc3NpZ25lZCBhcyB0aGUgc2Vjb25kIGVsZW1lbnQsIGFuZCBzbyBvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHJlb3JkZXIuXG4gKiBAcGFyYW0ge0FycmF5fSBpbmRleGVzIFRoZSBhcnJhbmdlZCBhcnJheSBpbmRleGVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIHJlb3JkZXIoYXJyYXksIGluZGV4ZXMpIHtcbiAgdmFyIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGxlbmd0aCA9IG5hdGl2ZU1pbihpbmRleGVzLmxlbmd0aCwgYXJyTGVuZ3RoKSxcbiAgICAgIG9sZEFycmF5ID0gY29weUFycmF5KGFycmF5KTtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICB2YXIgaW5kZXggPSBpbmRleGVzW2xlbmd0aF07XG4gICAgYXJyYXlbbGVuZ3RoXSA9IGlzSW5kZXgoaW5kZXgsIGFyckxlbmd0aCkgPyBvbGRBcnJheVtpbmRleF0gOiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlb3JkZXI7XG4iLCIvKiogVXNlZCBhcyB0aGUgaW50ZXJuYWwgYXJndW1lbnQgcGxhY2Vob2xkZXIuICovXG52YXIgUExBQ0VIT0xERVIgPSAnX19sb2Rhc2hfcGxhY2Vob2xkZXJfXyc7XG5cbi8qKlxuICogUmVwbGFjZXMgYWxsIGBwbGFjZWhvbGRlcmAgZWxlbWVudHMgaW4gYGFycmF5YCB3aXRoIGFuIGludGVybmFsIHBsYWNlaG9sZGVyXG4gKiBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiB0aGVpciBpbmRleGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHsqfSBwbGFjZWhvbGRlciBUaGUgcGxhY2Vob2xkZXIgdG8gcmVwbGFjZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2VIb2xkZXJzKGFycmF5LCBwbGFjZWhvbGRlcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmICh2YWx1ZSA9PT0gcGxhY2Vob2xkZXIgfHwgdmFsdWUgPT09IFBMQUNFSE9MREVSKSB7XG4gICAgICBhcnJheVtpbmRleF0gPSBQTEFDRUhPTERFUjtcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcGxhY2VIb2xkZXJzO1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxubW9kdWxlLmV4cG9ydHMgPSByb290O1xuIiwiLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIEFkZHMgYHZhbHVlYCB0byB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGFkZFxuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAYWxpYXMgcHVzaFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2FjaGUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVBZGQodmFsdWUpIHtcbiAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVBZGQ7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVIYXM7XG4iLCJ2YXIgYmFzZVNldERhdGEgPSByZXF1aXJlKCcuL19iYXNlU2V0RGF0YScpLFxuICAgIHNob3J0T3V0ID0gcmVxdWlyZSgnLi9fc2hvcnRPdXQnKTtcblxuLyoqXG4gKiBTZXRzIG1ldGFkYXRhIGZvciBgZnVuY2AuXG4gKlxuICogKipOb3RlOioqIElmIHRoaXMgZnVuY3Rpb24gYmVjb21lcyBob3QsIGkuZS4gaXMgaW52b2tlZCBhIGxvdCBpbiBhIHNob3J0XG4gKiBwZXJpb2Qgb2YgdGltZSwgaXQgd2lsbCB0cmlwIGl0cyBicmVha2VyIGFuZCB0cmFuc2l0aW9uIHRvIGFuIGlkZW50aXR5XG4gKiBmdW5jdGlvbiB0byBhdm9pZCBnYXJiYWdlIGNvbGxlY3Rpb24gcGF1c2VzIGluIFY4LiBTZWVcbiAqIFtWOCBpc3N1ZSAyMDcwXShodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0yMDcwKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXNzb2NpYXRlIG1ldGFkYXRhIHdpdGguXG4gKiBAcGFyYW0geyp9IGRhdGEgVGhlIG1ldGFkYXRhLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldERhdGEgPSBzaG9ydE91dChiYXNlU2V0RGF0YSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0RGF0YTtcbiIsIi8qKlxuICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9BcnJheTtcbiIsInZhciBiYXNlU2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlU2V0VG9TdHJpbmcnKSxcbiAgICBzaG9ydE91dCA9IHJlcXVpcmUoJy4vX3Nob3J0T3V0Jyk7XG5cbi8qKlxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBzZXRUb1N0cmluZyA9IHNob3J0T3V0KGJhc2VTZXRUb1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9TdHJpbmc7XG4iLCJ2YXIgZ2V0V3JhcERldGFpbHMgPSByZXF1aXJlKCcuL19nZXRXcmFwRGV0YWlscycpLFxuICAgIGluc2VydFdyYXBEZXRhaWxzID0gcmVxdWlyZSgnLi9faW5zZXJ0V3JhcERldGFpbHMnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyksXG4gICAgdXBkYXRlV3JhcERldGFpbHMgPSByZXF1aXJlKCcuL191cGRhdGVXcmFwRGV0YWlscycpO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGB3cmFwcGVyYCB0byBtaW1pYyB0aGUgc291cmNlIG9mIGByZWZlcmVuY2VgXG4gKiB3aXRoIHdyYXBwZXIgZGV0YWlscyBpbiBhIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgc291cmNlIGJvZHkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHdyYXBwZXIgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlZmVyZW5jZSBUaGUgcmVmZXJlbmNlIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgd3JhcHBlcmAuXG4gKi9cbmZ1bmN0aW9uIHNldFdyYXBUb1N0cmluZyh3cmFwcGVyLCByZWZlcmVuY2UsIGJpdG1hc2spIHtcbiAgdmFyIHNvdXJjZSA9IChyZWZlcmVuY2UgKyAnJyk7XG4gIHJldHVybiBzZXRUb1N0cmluZyh3cmFwcGVyLCBpbnNlcnRXcmFwRGV0YWlscyhzb3VyY2UsIHVwZGF0ZVdyYXBEZXRhaWxzKGdldFdyYXBEZXRhaWxzKHNvdXJjZSksIGJpdG1hc2spKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0V3JhcFRvU3RyaW5nO1xuIiwiLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xudmFyIEhPVF9DT1VOVCA9IDgwMCxcbiAgICBIT1RfU1BBTiA9IDE2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAqIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgdmFyIGNvdW50ID0gMCxcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3J0T3V0O1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIFN0YWNrXG4gKi9cbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrQ2xlYXI7XG4iLCIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgcmVzdWx0ID0gZGF0YVsnZGVsZXRlJ10oa2V5KTtcblxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tEZWxldGU7XG4iLCIvKipcbiAqIEdldHMgdGhlIHN0YWNrIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzdGFja0dldChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tHZXQ7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBhIHN0YWNrIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrSGFzO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBzdGFjayBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTGlzdENhY2hlKSB7XG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcbiAgICBpZiAoIU1hcCB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XG4gICAgICBwYWlycy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlycyk7XG4gIH1cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tTZXQ7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5pbmRleE9mYCB3aGljaCBwZXJmb3JtcyBzdHJpY3QgZXF1YWxpdHlcbiAqIGNvbXBhcmlzb25zIG9mIHZhbHVlcywgaS5lLiBgPT09YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gIHZhciBpbmRleCA9IGZyb21JbmRleCAtIDEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoYXJyYXlbaW5kZXhdID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaWN0SW5kZXhPZjtcbiIsInZhciBhc2NpaVRvQXJyYXkgPSByZXF1aXJlKCcuL19hc2NpaVRvQXJyYXknKSxcbiAgICBoYXNVbmljb2RlID0gcmVxdWlyZSgnLi9faGFzVW5pY29kZScpLFxuICAgIHVuaWNvZGVUb0FycmF5ID0gcmVxdWlyZSgnLi9fdW5pY29kZVRvQXJyYXknKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gc3RyaW5nVG9BcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIGhhc1VuaWNvZGUoc3RyaW5nKVxuICAgID8gdW5pY29kZVRvQXJyYXkoc3RyaW5nKVxuICAgIDogYXNjaWlUb0FycmF5KHN0cmluZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nVG9BcnJheTtcbiIsInZhciBtZW1vaXplQ2FwcGVkID0gcmVxdWlyZSgnLi9fbWVtb2l6ZUNhcHBlZCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVQcm9wTmFtZSA9IC9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IG1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XG4gICAgcmVzdWx0LnB1c2goJycpO1xuICB9XG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcbiAgICByZXN1bHQucHVzaChxdW90ZSA/IHN1YlN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nVG9QYXRoO1xuIiwidmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcga2V5IGlmIGl0J3Mgbm90IGEgc3RyaW5nIG9yIHN5bWJvbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtzdHJpbmd8c3ltYm9sfSBSZXR1cm5zIHRoZSBrZXkuXG4gKi9cbmZ1bmN0aW9uIHRvS2V5KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0tleTtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1NvdXJjZTtcbiIsIi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjaGFyYWN0ZXIgY2xhc3Nlcy4gKi9cbnZhciByc0FzdHJhbFJhbmdlID0gJ1xcXFx1ZDgwMC1cXFxcdWRmZmYnLFxuICAgIHJzQ29tYm9NYXJrc1JhbmdlID0gJ1xcXFx1MDMwMC1cXFxcdTAzNmYnLFxuICAgIHJlQ29tYm9IYWxmTWFya3NSYW5nZSA9ICdcXFxcdWZlMjAtXFxcXHVmZTJmJyxcbiAgICByc0NvbWJvU3ltYm9sc1JhbmdlID0gJ1xcXFx1MjBkMC1cXFxcdTIwZmYnLFxuICAgIHJzQ29tYm9SYW5nZSA9IHJzQ29tYm9NYXJrc1JhbmdlICsgcmVDb21ib0hhbGZNYXJrc1JhbmdlICsgcnNDb21ib1N5bWJvbHNSYW5nZSxcbiAgICByc1ZhclJhbmdlID0gJ1xcXFx1ZmUwZVxcXFx1ZmUwZic7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjYXB0dXJlIGdyb3Vwcy4gKi9cbnZhciByc0FzdHJhbCA9ICdbJyArIHJzQXN0cmFsUmFuZ2UgKyAnXScsXG4gICAgcnNDb21ibyA9ICdbJyArIHJzQ29tYm9SYW5nZSArICddJyxcbiAgICByc0ZpdHogPSAnXFxcXHVkODNjW1xcXFx1ZGZmYi1cXFxcdWRmZmZdJyxcbiAgICByc01vZGlmaWVyID0gJyg/OicgKyByc0NvbWJvICsgJ3wnICsgcnNGaXR6ICsgJyknLFxuICAgIHJzTm9uQXN0cmFsID0gJ1teJyArIHJzQXN0cmFsUmFuZ2UgKyAnXScsXG4gICAgcnNSZWdpb25hbCA9ICcoPzpcXFxcdWQ4M2NbXFxcXHVkZGU2LVxcXFx1ZGRmZl0pezJ9JyxcbiAgICByc1N1cnJQYWlyID0gJ1tcXFxcdWQ4MDAtXFxcXHVkYmZmXVtcXFxcdWRjMDAtXFxcXHVkZmZmXScsXG4gICAgcnNaV0ogPSAnXFxcXHUyMDBkJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIHJlZ2V4ZXMuICovXG52YXIgcmVPcHRNb2QgPSByc01vZGlmaWVyICsgJz8nLFxuICAgIHJzT3B0VmFyID0gJ1snICsgcnNWYXJSYW5nZSArICddPycsXG4gICAgcnNPcHRKb2luID0gJyg/OicgKyByc1pXSiArICcoPzonICsgW3JzTm9uQXN0cmFsLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyXS5qb2luKCd8JykgKyAnKScgKyByc09wdFZhciArIHJlT3B0TW9kICsgJykqJyxcbiAgICByc1NlcSA9IHJzT3B0VmFyICsgcmVPcHRNb2QgKyByc09wdEpvaW4sXG4gICAgcnNTeW1ib2wgPSAnKD86JyArIFtyc05vbkFzdHJhbCArIHJzQ29tYm8gKyAnPycsIHJzQ29tYm8sIHJzUmVnaW9uYWwsIHJzU3VyclBhaXIsIHJzQXN0cmFsXS5qb2luKCd8JykgKyAnKSc7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIFtzdHJpbmcgc3ltYm9sc10oaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtdW5pY29kZSkuICovXG52YXIgcmVVbmljb2RlID0gUmVnRXhwKHJzRml0eiArICcoPz0nICsgcnNGaXR6ICsgJyl8JyArIHJzU3ltYm9sICsgcnNTZXEsICdnJyk7XG5cbi8qKlxuICogQ29udmVydHMgYSBVbmljb2RlIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiB1bmljb2RlVG9BcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5tYXRjaChyZVVuaWNvZGUpIHx8IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHVuaWNvZGVUb0FycmF5O1xuIiwidmFyIGFycmF5RWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5RWFjaCcpLFxuICAgIGFycmF5SW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfQ1VSUllfRkxBRyA9IDgsXG4gICAgV1JBUF9DVVJSWV9SSUdIVF9GTEFHID0gMTYsXG4gICAgV1JBUF9QQVJUSUFMX0ZMQUcgPSAzMixcbiAgICBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyA9IDY0LFxuICAgIFdSQVBfQVJZX0ZMQUcgPSAxMjgsXG4gICAgV1JBUF9SRUFSR19GTEFHID0gMjU2LFxuICAgIFdSQVBfRkxJUF9GTEFHID0gNTEyO1xuXG4vKiogVXNlZCB0byBhc3NvY2lhdGUgd3JhcCBtZXRob2RzIHdpdGggdGhlaXIgYml0IGZsYWdzLiAqL1xudmFyIHdyYXBGbGFncyA9IFtcbiAgWydhcnknLCBXUkFQX0FSWV9GTEFHXSxcbiAgWydiaW5kJywgV1JBUF9CSU5EX0ZMQUddLFxuICBbJ2JpbmRLZXknLCBXUkFQX0JJTkRfS0VZX0ZMQUddLFxuICBbJ2N1cnJ5JywgV1JBUF9DVVJSWV9GTEFHXSxcbiAgWydjdXJyeVJpZ2h0JywgV1JBUF9DVVJSWV9SSUdIVF9GTEFHXSxcbiAgWydmbGlwJywgV1JBUF9GTElQX0ZMQUddLFxuICBbJ3BhcnRpYWwnLCBXUkFQX1BBUlRJQUxfRkxBR10sXG4gIFsncGFydGlhbFJpZ2h0JywgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUddLFxuICBbJ3JlYXJnJywgV1JBUF9SRUFSR19GTEFHXVxuXTtcblxuLyoqXG4gKiBVcGRhdGVzIHdyYXBwZXIgYGRldGFpbHNgIGJhc2VkIG9uIGBiaXRtYXNrYCBmbGFncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybnMge0FycmF5fSBkZXRhaWxzIFRoZSBkZXRhaWxzIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGRldGFpbHNgLlxuICovXG5mdW5jdGlvbiB1cGRhdGVXcmFwRGV0YWlscyhkZXRhaWxzLCBiaXRtYXNrKSB7XG4gIGFycmF5RWFjaCh3cmFwRmxhZ3MsIGZ1bmN0aW9uKHBhaXIpIHtcbiAgICB2YXIgdmFsdWUgPSAnXy4nICsgcGFpclswXTtcbiAgICBpZiAoKGJpdG1hc2sgJiBwYWlyWzFdKSAmJiAhYXJyYXlJbmNsdWRlcyhkZXRhaWxzLCB2YWx1ZSkpIHtcbiAgICAgIGRldGFpbHMucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRldGFpbHMuc29ydCgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHVwZGF0ZVdyYXBEZXRhaWxzO1xuIiwidmFyIExhenlXcmFwcGVyID0gcmVxdWlyZSgnLi9fTGF6eVdyYXBwZXInKSxcbiAgICBMb2Rhc2hXcmFwcGVyID0gcmVxdWlyZSgnLi9fTG9kYXNoV3JhcHBlcicpLFxuICAgIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgd3JhcHBlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSB3cmFwcGVyIFRoZSB3cmFwcGVyIHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHdyYXBwZXIuXG4gKi9cbmZ1bmN0aW9uIHdyYXBwZXJDbG9uZSh3cmFwcGVyKSB7XG4gIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpIHtcbiAgICByZXR1cm4gd3JhcHBlci5jbG9uZSgpO1xuICB9XG4gIHZhciByZXN1bHQgPSBuZXcgTG9kYXNoV3JhcHBlcih3cmFwcGVyLl9fd3JhcHBlZF9fLCB3cmFwcGVyLl9fY2hhaW5fXyk7XG4gIHJlc3VsdC5fX2FjdGlvbnNfXyA9IGNvcHlBcnJheSh3cmFwcGVyLl9fYWN0aW9uc19fKTtcbiAgcmVzdWx0Ll9faW5kZXhfXyAgPSB3cmFwcGVyLl9faW5kZXhfXztcbiAgcmVzdWx0Ll9fdmFsdWVzX18gPSB3cmFwcGVyLl9fdmFsdWVzX187XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd3JhcHBlckNsb25lO1xuIiwidmFyIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGNyZWF0ZUFzc2lnbmVyID0gcmVxdWlyZSgnLi9fY3JlYXRlQXNzaWduZXInKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2Ygc291cmNlIG9iamVjdHMgdG8gdGhlXG4gKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC5cbiAqIFN1YnNlcXVlbnQgc291cmNlcyBvdmVyd3JpdGUgcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgc291cmNlcy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YCBhbmQgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BPYmplY3QuYXNzaWduYF0oaHR0cHM6Ly9tZG4uaW8vT2JqZWN0L2Fzc2lnbikuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEwLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBzZWUgXy5hc3NpZ25JblxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogZnVuY3Rpb24gQmFyKCkge1xuICogICB0aGlzLmMgPSAzO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYiA9IDI7XG4gKiBCYXIucHJvdG90eXBlLmQgPSA0O1xuICpcbiAqIF8uYXNzaWduKHsgJ2EnOiAwIH0sIG5ldyBGb28sIG5ldyBCYXIpO1xuICogLy8gPT4geyAnYSc6IDEsICdjJzogMyB9XG4gKi9cbnZhciBhc3NpZ24gPSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSkge1xuICBpZiAoaXNQcm90b3R5cGUoc291cmNlKSB8fCBpc0FycmF5TGlrZShzb3VyY2UpKSB7XG4gICAgY29weU9iamVjdChzb3VyY2UsIGtleXMoc291cmNlKSwgb2JqZWN0KTtcbiAgICByZXR1cm47XG4gIH1cbiAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICB9XG4gIH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnbjtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL3RvSW50ZWdlcicpO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgLCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBhbmQgYXJndW1lbnRzXG4gKiBvZiB0aGUgY3JlYXRlZCBmdW5jdGlvbiwgd2hpbGUgaXQncyBjYWxsZWQgbGVzcyB0aGFuIGBuYCB0aW1lcy4gU3Vic2VxdWVudFxuICogY2FsbHMgdG8gdGhlIGNyZWF0ZWQgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgIGludm9jYXRpb24uXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGNhbGxzIGF0IHdoaWNoIGBmdW5jYCBpcyBubyBsb25nZXIgaW52b2tlZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmVzdHJpY3RlZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIF8uYmVmb3JlKDUsIGFkZENvbnRhY3RUb0xpc3QpKTtcbiAqIC8vID0+IEFsbG93cyBhZGRpbmcgdXAgdG8gNCBjb250YWN0cyB0byB0aGUgbGlzdC5cbiAqL1xuZnVuY3Rpb24gYmVmb3JlKG4sIGZ1bmMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgbiA9IHRvSW50ZWdlcihuKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGlmICgtLW4gPiAwKSB7XG4gICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIGlmIChuIDw9IDEpIHtcbiAgICAgIGZ1bmMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmVmb3JlO1xuIiwidmFyIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBjcmVhdGVXcmFwID0gcmVxdWlyZSgnLi9fY3JlYXRlV3JhcCcpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlcGxhY2VIb2xkZXJzID0gcmVxdWlyZSgnLi9fcmVwbGFjZUhvbGRlcnMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzI7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgXG4gKiBhbmQgYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAqXG4gKiBUaGUgYF8uYmluZC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljIGJ1aWxkcyxcbiAqIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIG5hdGl2ZSBgRnVuY3Rpb24jYmluZGAsIHRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiXG4gKiBwcm9wZXJ0eSBvZiBib3VuZCBmdW5jdGlvbnMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBiaW5kLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0gey4uLip9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJvdW5kIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBncmVldChncmVldGluZywgcHVuY3R1YXRpb24pIHtcbiAqICAgcmV0dXJuIGdyZWV0aW5nICsgJyAnICsgdGhpcy51c2VyICsgcHVuY3R1YXRpb247XG4gKiB9XG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ3VzZXInOiAnZnJlZCcgfTtcbiAqXG4gKiB2YXIgYm91bmQgPSBfLmJpbmQoZ3JlZXQsIG9iamVjdCwgJ2hpJyk7XG4gKiBib3VuZCgnIScpO1xuICogLy8gPT4gJ2hpIGZyZWQhJ1xuICpcbiAqIC8vIEJvdW5kIHdpdGggcGxhY2Vob2xkZXJzLlxuICogdmFyIGJvdW5kID0gXy5iaW5kKGdyZWV0LCBvYmplY3QsIF8sICchJyk7XG4gKiBib3VuZCgnaGknKTtcbiAqIC8vID0+ICdoaSBmcmVkISdcbiAqL1xudmFyIGJpbmQgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCB0aGlzQXJnLCBwYXJ0aWFscykge1xuICB2YXIgYml0bWFzayA9IFdSQVBfQklORF9GTEFHO1xuICBpZiAocGFydGlhbHMubGVuZ3RoKSB7XG4gICAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgZ2V0SG9sZGVyKGJpbmQpKTtcbiAgICBiaXRtYXNrIHw9IFdSQVBfUEFSVElBTF9GTEFHO1xuICB9XG4gIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzKTtcbn0pO1xuXG4vLyBBc3NpZ24gZGVmYXVsdCBwbGFjZWhvbGRlcnMuXG5iaW5kLnBsYWNlaG9sZGVyID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gYmluZDtcbiIsInZhciBiYXNlQ2xvbmUgPSByZXF1aXJlKCcuL19iYXNlQ2xvbmUnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzaGFsbG93IGNsb25lIG9mIGB2YWx1ZWAuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb24gdGhlXG4gKiBbc3RydWN0dXJlZCBjbG9uZSBhbGdvcml0aG1dKGh0dHBzOi8vbWRuLmlvL1N0cnVjdHVyZWRfY2xvbmVfYWxnb3JpdGhtKVxuICogYW5kIHN1cHBvcnRzIGNsb25pbmcgYXJyYXlzLCBhcnJheSBidWZmZXJzLCBib29sZWFucywgZGF0ZSBvYmplY3RzLCBtYXBzLFxuICogbnVtYmVycywgYE9iamVjdGAgb2JqZWN0cywgcmVnZXhlcywgc2V0cywgc3RyaW5ncywgc3ltYm9scywgYW5kIHR5cGVkXG4gKiBhcnJheXMuIFRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9mIGBhcmd1bWVudHNgIG9iamVjdHMgYXJlIGNsb25lZFxuICogYXMgcGxhaW4gb2JqZWN0cy4gQW4gZW1wdHkgb2JqZWN0IGlzIHJldHVybmVkIGZvciB1bmNsb25lYWJsZSB2YWx1ZXMgc3VjaFxuICogYXMgZXJyb3Igb2JqZWN0cywgZnVuY3Rpb25zLCBET00gbm9kZXMsIGFuZCBXZWFrTWFwcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgY2xvbmVkIHZhbHVlLlxuICogQHNlZSBfLmNsb25lRGVlcFxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFt7ICdhJzogMSB9LCB7ICdiJzogMiB9XTtcbiAqXG4gKiB2YXIgc2hhbGxvdyA9IF8uY2xvbmUob2JqZWN0cyk7XG4gKiBjb25zb2xlLmxvZyhzaGFsbG93WzBdID09PSBvYmplY3RzWzBdKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gY2xvbmUodmFsdWUpIHtcbiAgcmV0dXJuIGJhc2VDbG9uZSh2YWx1ZSwgQ0xPTkVfU1lNQk9MU19GTEFHKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZTtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnN0YW50O1xuIiwidmFyIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBpc0l0ZXJhdGVlQ2FsbCA9IHJlcXVpcmUoJy4vX2lzSXRlcmF0ZWVDYWxsJyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBc3NpZ25zIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2Ygc291cmNlXG4gKiBvYmplY3RzIHRvIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QgZm9yIGFsbCBkZXN0aW5hdGlvbiBwcm9wZXJ0aWVzIHRoYXRcbiAqIHJlc29sdmUgdG8gYHVuZGVmaW5lZGAuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC5cbiAqIE9uY2UgYSBwcm9wZXJ0eSBpcyBzZXQsIGFkZGl0aW9uYWwgdmFsdWVzIG9mIHRoZSBzYW1lIHByb3BlcnR5IGFyZSBpZ25vcmVkLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBzZWUgXy5kZWZhdWx0c0RlZXBcbiAqIEBleGFtcGxlXG4gKlxuICogXy5kZWZhdWx0cyh7ICdhJzogMSB9LCB7ICdiJzogMiB9LCB7ICdhJzogMyB9KTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICovXG52YXIgZGVmYXVsdHMgPSBiYXNlUmVzdChmdW5jdGlvbihvYmplY3QsIHNvdXJjZXMpIHtcbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gLTE7XG4gIHZhciBsZW5ndGggPSBzb3VyY2VzLmxlbmd0aDtcbiAgdmFyIGd1YXJkID0gbGVuZ3RoID4gMiA/IHNvdXJjZXNbMl0gOiB1bmRlZmluZWQ7XG5cbiAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHNvdXJjZXNbMF0sIHNvdXJjZXNbMV0sIGd1YXJkKSkge1xuICAgIGxlbmd0aCA9IDE7XG4gIH1cblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzW2luZGV4XTtcbiAgICB2YXIgcHJvcHMgPSBrZXlzSW4oc291cmNlKTtcbiAgICB2YXIgcHJvcHNJbmRleCA9IC0xO1xuICAgIHZhciBwcm9wc0xlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICAgIHdoaWxlICgrK3Byb3BzSW5kZXggPCBwcm9wc0xlbmd0aCkge1xuICAgICAgdmFyIGtleSA9IHByb3BzW3Byb3BzSW5kZXhdO1xuICAgICAgdmFyIHZhbHVlID0gb2JqZWN0W2tleV07XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgKGVxKHZhbHVlLCBvYmplY3RQcm90b1trZXldKSAmJiAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSB7XG4gICAgICAgIG9iamVjdFtrZXldID0gc291cmNlW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iamVjdDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRzO1xuIiwidmFyIGJhc2VEaWZmZXJlbmNlID0gcmVxdWlyZSgnLi9fYmFzZURpZmZlcmVuY2UnKSxcbiAgICBiYXNlRmxhdHRlbiA9IHJlcXVpcmUoJy4vX2Jhc2VGbGF0dGVuJyksXG4gICAgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGlzQXJyYXlMaWtlT2JqZWN0ID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZU9iamVjdCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgYGFycmF5YCB2YWx1ZXMgbm90IGluY2x1ZGVkIGluIHRoZSBvdGhlciBnaXZlbiBhcnJheXNcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIFRoZSBvcmRlciBhbmQgcmVmZXJlbmNlcyBvZiByZXN1bHQgdmFsdWVzIGFyZVxuICogZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuXG4gKlxuICogKipOb3RlOioqIFVubGlrZSBgXy5wdWxsQWxsYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsuLi5BcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICogQHNlZSBfLndpdGhvdXQsIF8ueG9yXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGlmZmVyZW5jZShbMiwgMV0sIFsyLCAzXSk7XG4gKiAvLyA9PiBbMV1cbiAqL1xudmFyIGRpZmZlcmVuY2UgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheSwgdmFsdWVzKSB7XG4gIHJldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSlcbiAgICA/IGJhc2VEaWZmZXJlbmNlKGFycmF5LCBiYXNlRmxhdHRlbih2YWx1ZXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSlcbiAgICA6IFtdO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGlmZmVyZW5jZTtcbiIsIi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxO1xuIiwidmFyIGVzY2FwZUh0bWxDaGFyID0gcmVxdWlyZSgnLi9fZXNjYXBlSHRtbENoYXInKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggSFRNTCBlbnRpdGllcyBhbmQgSFRNTCBjaGFyYWN0ZXJzLiAqL1xudmFyIHJlVW5lc2NhcGVkSHRtbCA9IC9bJjw+XCInXS9nLFxuICAgIHJlSGFzVW5lc2NhcGVkSHRtbCA9IFJlZ0V4cChyZVVuZXNjYXBlZEh0bWwuc291cmNlKTtcblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgY2hhcmFjdGVycyBcIiZcIiwgXCI8XCIsIFwiPlwiLCAnXCInLCBhbmQgXCInXCIgaW4gYHN0cmluZ2AgdG8gdGhlaXJcbiAqIGNvcnJlc3BvbmRpbmcgSFRNTCBlbnRpdGllcy5cbiAqXG4gKiAqKk5vdGU6KiogTm8gb3RoZXIgY2hhcmFjdGVycyBhcmUgZXNjYXBlZC4gVG8gZXNjYXBlIGFkZGl0aW9uYWxcbiAqIGNoYXJhY3RlcnMgdXNlIGEgdGhpcmQtcGFydHkgbGlicmFyeSBsaWtlIFtfaGVfXShodHRwczovL210aHMuYmUvaGUpLlxuICpcbiAqIFRob3VnaCB0aGUgXCI+XCIgY2hhcmFjdGVyIGlzIGVzY2FwZWQgZm9yIHN5bW1ldHJ5LCBjaGFyYWN0ZXJzIGxpa2VcbiAqIFwiPlwiIGFuZCBcIi9cIiBkb24ndCBuZWVkIGVzY2FwaW5nIGluIEhUTUwgYW5kIGhhdmUgbm8gc3BlY2lhbCBtZWFuaW5nXG4gKiB1bmxlc3MgdGhleSdyZSBwYXJ0IG9mIGEgdGFnIG9yIHVucXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZS4gU2VlXG4gKiBbTWF0aGlhcyBCeW5lbnMncyBhcnRpY2xlXShodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvYW1iaWd1b3VzLWFtcGVyc2FuZHMpXG4gKiAodW5kZXIgXCJzZW1pLXJlbGF0ZWQgZnVuIGZhY3RcIikgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBXaGVuIHdvcmtpbmcgd2l0aCBIVE1MIHlvdSBzaG91bGQgYWx3YXlzXG4gKiBbcXVvdGUgYXR0cmlidXRlIHZhbHVlc10oaHR0cDovL3dvbmtvLmNvbS9wb3N0L2h0bWwtZXNjYXBpbmcpIHRvIHJlZHVjZVxuICogWFNTIHZlY3RvcnMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gZXNjYXBlLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZXNjYXBlKCdmcmVkLCBiYXJuZXksICYgcGViYmxlcycpO1xuICogLy8gPT4gJ2ZyZWQsIGJhcm5leSwgJmFtcDsgcGViYmxlcydcbiAqL1xuZnVuY3Rpb24gZXNjYXBlKHN0cmluZykge1xuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICByZXR1cm4gKHN0cmluZyAmJiByZUhhc1VuZXNjYXBlZEh0bWwudGVzdChzdHJpbmcpKVxuICAgID8gc3RyaW5nLnJlcGxhY2UocmVVbmVzY2FwZWRIdG1sLCBlc2NhcGVIdG1sQ2hhcilcbiAgICA6IHN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlc2NhcGU7XG4iLCJ2YXIgY3JlYXRlRmluZCA9IHJlcXVpcmUoJy4vX2NyZWF0ZUZpbmQnKSxcbiAgICBmaW5kSW5kZXggPSByZXF1aXJlKCcuL2ZpbmRJbmRleCcpO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gLCByZXR1cm5pbmcgdGhlIGZpcnN0IGVsZW1lbnRcbiAqIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hdGNoZWQgZWxlbWVudCwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHVzZXJzID0gW1xuICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IHRydWUgfVxuICogXTtcbiAqXG4gKiBfLmZpbmQodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWdlIDwgNDA7IH0pO1xuICogLy8gPT4gb2JqZWN0IGZvciAnYmFybmV5J1xuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmQodXNlcnMsIHsgJ2FnZSc6IDEsICdhY3RpdmUnOiB0cnVlIH0pO1xuICogLy8gPT4gb2JqZWN0IGZvciAncGViYmxlcydcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmQodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IG9iamVjdCBmb3IgJ2ZyZWQnXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmQodXNlcnMsICdhY3RpdmUnKTtcbiAqIC8vID0+IG9iamVjdCBmb3IgJ2Jhcm5leSdcbiAqL1xudmFyIGZpbmQgPSBjcmVhdGVGaW5kKGZpbmRJbmRleCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmluZDtcbiIsInZhciBiYXNlRmluZEluZGV4ID0gcmVxdWlyZSgnLi9fYmFzZUZpbmRJbmRleCcpLFxuICAgIGJhc2VJdGVyYXRlZSA9IHJlcXVpcmUoJy4vX2Jhc2VJdGVyYXRlZScpLFxuICAgIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vdG9JbnRlZ2VyJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZpbmRgIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdFxuICogZWxlbWVudCBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgaW5zdGVhZCBvZiB0aGUgZWxlbWVudCBpdHNlbGYuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAxLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmb3VuZCBlbGVtZW50LCBlbHNlIGAtMWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogdHJ1ZSB9XG4gKiBdO1xuICpcbiAqIF8uZmluZEluZGV4KHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLnVzZXIgPT0gJ2Jhcm5leSc7IH0pO1xuICogLy8gPT4gMFxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmRJbmRleCh1c2VycywgeyAndXNlcic6ICdmcmVkJywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICogLy8gPT4gMVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmluZEluZGV4KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gKiAvLyA9PiAwXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmRJbmRleCh1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gMlxuICovXG5mdW5jdGlvbiBmaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSwgZnJvbUluZGV4KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgdmFyIGluZGV4ID0gZnJvbUluZGV4ID09IG51bGwgPyAwIDogdG9JbnRlZ2VyKGZyb21JbmRleCk7XG4gIGlmIChpbmRleCA8IDApIHtcbiAgICBpbmRleCA9IG5hdGl2ZU1heChsZW5ndGggKyBpbmRleCwgMCk7XG4gIH1cbiAgcmV0dXJuIGJhc2VGaW5kSW5kZXgoYXJyYXksIGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCBpbmRleCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmluZEluZGV4O1xuIiwidmFyIGJhc2VGbGF0dGVuID0gcmVxdWlyZSgnLi9fYmFzZUZsYXR0ZW4nKTtcblxuLyoqXG4gKiBGbGF0dGVucyBgYXJyYXlgIGEgc2luZ2xlIGxldmVsIGRlZXAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5mbGF0dGVuKFsxLCBbMiwgWzMsIFs0XV0sIDVdXSk7XG4gKiAvLyA9PiBbMSwgMiwgWzMsIFs0XV0sIDVdXG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYmFzZUZsYXR0ZW4oYXJyYXksIDEpIDogW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdHRlbjtcbiIsInZhciBhcnJheUVhY2ggPSByZXF1aXJlKCcuL19hcnJheUVhY2gnKSxcbiAgICBiYXNlRWFjaCA9IHJlcXVpcmUoJy4vX2Jhc2VFYWNoJyksXG4gICAgY2FzdEZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fY2FzdEZ1bmN0aW9uJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gIGFuZCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggZWxlbWVudC5cbiAqIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gKiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gKlxuICogKipOb3RlOioqIEFzIHdpdGggb3RoZXIgXCJDb2xsZWN0aW9uc1wiIG1ldGhvZHMsIG9iamVjdHMgd2l0aCBhIFwibGVuZ3RoXCJcbiAqIHByb3BlcnR5IGFyZSBpdGVyYXRlZCBsaWtlIGFycmF5cy4gVG8gYXZvaWQgdGhpcyBiZWhhdmlvciB1c2UgYF8uZm9ySW5gXG4gKiBvciBgXy5mb3JPd25gIGZvciBvYmplY3QgaXRlcmF0aW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBhbGlhcyBlYWNoXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAqIEBzZWUgXy5mb3JFYWNoUmlnaHRcbiAqIEBleGFtcGxlXG4gKlxuICogXy5mb3JFYWNoKFsxLCAyXSwgZnVuY3Rpb24odmFsdWUpIHtcbiAqICAgY29uc29sZS5sb2codmFsdWUpO1xuICogfSk7XG4gKiAvLyA9PiBMb2dzIGAxYCB0aGVuIGAyYC5cbiAqXG4gKiBfLmZvckVhY2goeyAnYSc6IDEsICdiJzogMiB9LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gKiB9KTtcbiAqIC8vID0+IExvZ3MgJ2EnIHRoZW4gJ2InIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICovXG5mdW5jdGlvbiBmb3JFYWNoKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RWFjaCA6IGJhc2VFYWNoO1xuICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBjYXN0RnVuY3Rpb24oaXRlcmF0ZWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmb3JFYWNoO1xuIiwidmFyIGJhc2VGb3JPd24gPSByZXF1aXJlKCcuL19iYXNlRm9yT3duJyksXG4gICAgY2FzdEZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fY2FzdEZ1bmN0aW9uJyk7XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBhbiBvYmplY3QgYW5kXG4gKiBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggcHJvcGVydHkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAqIGFyZ3VtZW50czogKHZhbHVlLCBrZXksIG9iamVjdCkuIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb25cbiAqIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjMuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBzZWUgXy5mb3JPd25SaWdodFxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmZvck93bihuZXcgRm9vLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gKiB9KTtcbiAqIC8vID0+IExvZ3MgJ2EnIHRoZW4gJ2InIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICovXG5mdW5jdGlvbiBmb3JPd24ob2JqZWN0LCBpdGVyYXRlZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3JPd24ob2JqZWN0LCBjYXN0RnVuY3Rpb24oaXRlcmF0ZWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmb3JPd247XG4iLCJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIHRoZSByZXNvbHZlZCB2YWx1ZSBpc1xuICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjcuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGZvciBgdW5kZWZpbmVkYCByZXNvbHZlZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gKlxuICogXy5nZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsICdhLmIuYycsICdkZWZhdWx0Jyk7XG4gKiAvLyA9PiAnZGVmYXVsdCdcbiAqL1xuZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldDtcbiIsInZhciBiYXNlSGFzID0gcmVxdWlyZSgnLi9fYmFzZUhhcycpLFxuICAgIGhhc1BhdGggPSByZXF1aXJlKCcuL19oYXNQYXRoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBwcm9wZXJ0eSBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogeyAnYic6IDIgfSB9O1xuICogdmFyIG90aGVyID0gXy5jcmVhdGUoeyAnYSc6IF8uY3JlYXRlKHsgJ2InOiAyIH0pIH0pO1xuICpcbiAqIF8uaGFzKG9iamVjdCwgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhcyhvYmplY3QsICdhLmInKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhcyhvYmplY3QsIFsnYScsICdiJ10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzKG90aGVyLCAnYScpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaGFzKG9iamVjdCwgcGF0aCkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYgaGFzUGF0aChvYmplY3QsIHBhdGgsIGJhc2VIYXMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhcztcbiIsInZhciBiYXNlSGFzSW4gPSByZXF1aXJlKCcuL19iYXNlSGFzSW4nKSxcbiAgICBoYXNQYXRoID0gcmVxdWlyZSgnLi9faGFzUGF0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgcGF0aGAgaXMgYSBkaXJlY3Qgb3IgaW5oZXJpdGVkIHByb3BlcnR5IG9mIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IF8uY3JlYXRlKHsgJ2EnOiBfLmNyZWF0ZSh7ICdiJzogMiB9KSB9KTtcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EuYicpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2InKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGhhc0luKG9iamVjdCwgcGF0aCkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYgaGFzUGF0aChvYmplY3QsIHBhdGgsIGJhc2VIYXNJbik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzSW47XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuIiwidmFyIGJhc2VJbmRleE9mID0gcmVxdWlyZSgnLi9fYmFzZUluZGV4T2YnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc1N0cmluZyA9IHJlcXVpcmUoJy4vaXNTdHJpbmcnKSxcbiAgICB0b0ludGVnZXIgPSByZXF1aXJlKCcuL3RvSW50ZWdlcicpLFxuICAgIHZhbHVlcyA9IHJlcXVpcmUoJy4vdmFsdWVzJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiBgY29sbGVjdGlvbmAuIElmIGBjb2xsZWN0aW9uYCBpcyBhIHN0cmluZywgaXQnc1xuICogY2hlY2tlZCBmb3IgYSBzdWJzdHJpbmcgb2YgYHZhbHVlYCwgb3RoZXJ3aXNlXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogaXMgdXNlZCBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIElmIGBmcm9tSW5kZXhgIGlzIG5lZ2F0aXZlLCBpdCdzIHVzZWQgYXNcbiAqIHRoZSBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIGBjb2xsZWN0aW9uYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ucmVkdWNlYC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaW5jbHVkZXMoWzEsIDIsIDNdLCAxKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmluY2x1ZGVzKFsxLCAyLCAzXSwgMSwgMik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaW5jbHVkZXMoeyAnYSc6IDEsICdiJzogMiB9LCAxKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmluY2x1ZGVzKCdhYmNkJywgJ2JjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGluY2x1ZGVzKGNvbGxlY3Rpb24sIHZhbHVlLCBmcm9tSW5kZXgsIGd1YXJkKSB7XG4gIGNvbGxlY3Rpb24gPSBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSA/IGNvbGxlY3Rpb24gOiB2YWx1ZXMoY29sbGVjdGlvbik7XG4gIGZyb21JbmRleCA9IChmcm9tSW5kZXggJiYgIWd1YXJkKSA/IHRvSW50ZWdlcihmcm9tSW5kZXgpIDogMDtcblxuICB2YXIgbGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7XG4gIGlmIChmcm9tSW5kZXggPCAwKSB7XG4gICAgZnJvbUluZGV4ID0gbmF0aXZlTWF4KGxlbmd0aCArIGZyb21JbmRleCwgMCk7XG4gIH1cbiAgcmV0dXJuIGlzU3RyaW5nKGNvbGxlY3Rpb24pXG4gICAgPyAoZnJvbUluZGV4IDw9IGxlbmd0aCAmJiBjb2xsZWN0aW9uLmluZGV4T2YodmFsdWUsIGZyb21JbmRleCkgPiAtMSlcbiAgICA6ICghIWxlbmd0aCAmJiBiYXNlSW5kZXhPZihjb2xsZWN0aW9uLCB2YWx1ZSwgZnJvbUluZGV4KSA+IC0xKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbmNsdWRlcztcbiIsInZhciBhcHBseSA9IHJlcXVpcmUoJy4vX2FwcGx5JyksXG4gICAgYmFzZUVhY2ggPSByZXF1aXJlKCcuL19iYXNlRWFjaCcpLFxuICAgIGJhc2VJbnZva2UgPSByZXF1aXJlKCcuL19iYXNlSW52b2tlJyksXG4gICAgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIEludm9rZXMgdGhlIG1ldGhvZCBhdCBgcGF0aGAgb2YgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYCwgcmV0dXJuaW5nXG4gKiBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiBlYWNoIGludm9rZWQgbWV0aG9kLiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHNcbiAqIGFyZSBwcm92aWRlZCB0byBlYWNoIGludm9rZWQgbWV0aG9kLiBJZiBgcGF0aGAgaXMgYSBmdW5jdGlvbiwgaXQncyBpbnZva2VkXG4gKiBmb3IsIGFuZCBgdGhpc2AgYm91bmQgdG8sIGVhY2ggZWxlbWVudCBpbiBgY29sbGVjdGlvbmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb258c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBtZXRob2QgdG8gaW52b2tlIG9yXG4gKiAgdGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGVhY2ggbWV0aG9kIHdpdGguXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaW52b2tlTWFwKFtbNSwgMSwgN10sIFszLCAyLCAxXV0sICdzb3J0Jyk7XG4gKiAvLyA9PiBbWzEsIDUsIDddLCBbMSwgMiwgM11dXG4gKlxuICogXy5pbnZva2VNYXAoWzEyMywgNDU2XSwgU3RyaW5nLnByb3RvdHlwZS5zcGxpdCwgJycpO1xuICogLy8gPT4gW1snMScsICcyJywgJzMnXSwgWyc0JywgJzUnLCAnNiddXVxuICovXG52YXIgaW52b2tlTWFwID0gYmFzZVJlc3QoZnVuY3Rpb24oY29sbGVjdGlvbiwgcGF0aCwgYXJncykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGlzRnVuYyA9IHR5cGVvZiBwYXRoID09ICdmdW5jdGlvbicsXG4gICAgICByZXN1bHQgPSBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSA/IEFycmF5KGNvbGxlY3Rpb24ubGVuZ3RoKSA6IFtdO1xuXG4gIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gaXNGdW5jID8gYXBwbHkocGF0aCwgdmFsdWUsIGFyZ3MpIDogYmFzZUludm9rZSh2YWx1ZSwgcGF0aCwgYXJncyk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gaW52b2tlTWFwO1xuIiwidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheTtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlO1xuIiwidmFyIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc0FycmF5TGlrZWAgZXhjZXB0IHRoYXQgaXQgYWxzbyBjaGVja3MgaWYgYHZhbHVlYFxuICogaXMgYW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LWxpa2Ugb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZU9iamVjdDtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpLFxuICAgIHN0dWJGYWxzZSA9IHJlcXVpcmUoJy4vc3R1YkZhbHNlJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0J1ZmZlcjtcbiIsInZhciBiYXNlSXNEYXRlID0gcmVxdWlyZSgnLi9fYmFzZUlzRGF0ZScpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNEYXRlID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNEYXRlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRGF0ZWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZGF0ZSBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0RhdGUobmV3IERhdGUpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNEYXRlKCdNb24gQXByaWwgMjMgMjAxMicpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzRGF0ZSA9IG5vZGVJc0RhdGUgPyBiYXNlVW5hcnkobm9kZUlzRGF0ZSkgOiBiYXNlSXNEYXRlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRGF0ZTtcbiIsInZhciBiYXNlS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzJyksXG4gICAgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gZW1wdHkgb2JqZWN0LCBjb2xsZWN0aW9uLCBtYXAsIG9yIHNldC5cbiAqXG4gKiBPYmplY3RzIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBubyBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWRcbiAqIHByb3BlcnRpZXMuXG4gKlxuICogQXJyYXktbGlrZSB2YWx1ZXMgc3VjaCBhcyBgYXJndW1lbnRzYCBvYmplY3RzLCBhcnJheXMsIGJ1ZmZlcnMsIHN0cmluZ3MsIG9yXG4gKiBqUXVlcnktbGlrZSBjb2xsZWN0aW9ucyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgYSBgbGVuZ3RoYCBvZiBgMGAuXG4gKiBTaW1pbGFybHksIG1hcHMgYW5kIHNldHMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIGEgYHNpemVgIG9mIGAwYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBlbXB0eSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRW1wdHkobnVsbCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0VtcHR5KHRydWUpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbXB0eSgxKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRW1wdHkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0VtcHR5KHsgJ2EnOiAxIH0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiZcbiAgICAgIChpc0FycmF5KHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlLnNwbGljZSA9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIGlzQnVmZmVyKHZhbHVlKSB8fCBpc1R5cGVkQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSkpIHtcbiAgICByZXR1cm4gIXZhbHVlLmxlbmd0aDtcbiAgfVxuICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKTtcbiAgaWYgKHRhZyA9PSBtYXBUYWcgfHwgdGFnID09IHNldFRhZykge1xuICAgIHJldHVybiAhdmFsdWUuc2l6ZTtcbiAgfVxuICBpZiAoaXNQcm90b3R5cGUodmFsdWUpKSB7XG4gICAgcmV0dXJuICFiYXNlS2V5cyh2YWx1ZSkubGVuZ3RoO1xuICB9XG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRW1wdHk7XG4iLCJ2YXIgYmFzZUlzRXF1YWwgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbCcpO1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmVcbiAqIGVxdWl2YWxlbnQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIHN1cHBvcnRzIGNvbXBhcmluZyBhcnJheXMsIGFycmF5IGJ1ZmZlcnMsIGJvb2xlYW5zLFxuICogZGF0ZSBvYmplY3RzLCBlcnJvciBvYmplY3RzLCBtYXBzLCBudW1iZXJzLCBgT2JqZWN0YCBvYmplY3RzLCByZWdleGVzLFxuICogc2V0cywgc3RyaW5ncywgc3ltYm9scywgYW5kIHR5cGVkIGFycmF5cy4gYE9iamVjdGAgb2JqZWN0cyBhcmUgY29tcGFyZWRcbiAqIGJ5IHRoZWlyIG93biwgbm90IGluaGVyaXRlZCwgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLiBGdW5jdGlvbnMgYW5kIERPTVxuICogbm9kZXMgYXJlIGNvbXBhcmVkIGJ5IHN0cmljdCBlcXVhbGl0eSwgaS5lLiBgPT09YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5pc0VxdWFsKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIG9iamVjdCA9PT0gb3RoZXI7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0VxdWFsKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0VxdWFsO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGdW5jdGlvbjtcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xlbmd0aDtcbiIsInZhciBiYXNlSXNNYXAgPSByZXF1aXJlKCcuL19iYXNlSXNNYXAnKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzTWFwID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNNYXA7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBNYXBgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTWFwKG5ldyBNYXApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNNYXAobmV3IFdlYWtNYXApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzTWFwID0gbm9kZUlzTWFwID8gYmFzZVVuYXJ5KG5vZGVJc01hcCkgOiBiYXNlSXNNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNNYXA7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0TGlrZTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGdldFByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2dldFByb3RvdHlwZScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cbnZhciBvYmplY3RDdG9yU3RyaW5nID0gZnVuY1RvU3RyaW5nLmNhbGwoT2JqZWN0KTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgdGhhdCBpcywgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlXG4gKiBgT2JqZWN0YCBjb25zdHJ1Y3RvciBvciBvbmUgd2l0aCBhIGBbW1Byb3RvdHlwZV1dYCBvZiBgbnVsbGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjguMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogfVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChuZXcgRm9vKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdCh7ICd4JzogMCwgJ3knOiAwIH0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgfHwgYmFzZUdldFRhZyh2YWx1ZSkgIT0gb2JqZWN0VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwcm90byA9IGdldFByb3RvdHlwZSh2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmXG4gICAgZnVuY1RvU3RyaW5nLmNhbGwoQ3RvcikgPT0gb2JqZWN0Q3RvclN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1BsYWluT2JqZWN0O1xuIiwidmFyIGJhc2VJc1NldCA9IHJlcXVpcmUoJy4vX2Jhc2VJc1NldCcpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNTZXQgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1NldDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFNldGAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTZXQobmV3IFNldCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1NldChuZXcgV2Vha1NldCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNTZXQgPSBub2RlSXNTZXQgPyBiYXNlVW5hcnkobm9kZUlzU2V0KSA6IGJhc2VJc1NldDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1NldDtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTdHJpbmdgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzdHJpbmcsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N0cmluZygnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N0cmluZygxKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHxcbiAgICAoIWlzQXJyYXkodmFsdWUpICYmIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3RyaW5nVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N0cmluZztcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N5bWJvbDtcbiIsInZhciBiYXNlSXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fYmFzZUlzVHlwZWRBcnJheScpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNUeXBlZEFycmF5O1xuIiwidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXMgPSByZXF1aXJlKCcuL19iYXNlS2V5cycpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5cyhuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLmtleXMoJ2hpJyk7XG4gKiAvLyA9PiBbJzAnLCAnMSddXG4gKi9cbmZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzO1xuIiwidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXNJbiA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzSW4nKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c0luO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5sYXN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAzXG4gKi9cbmZ1bmN0aW9uIGxhc3QoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYXJyYXlbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGFzdDtcbiIsInZhciBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyk7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgbWVtb2l6ZXMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuIElmIGByZXNvbHZlcmAgaXNcbiAqIHByb3ZpZGVkLCBpdCBkZXRlcm1pbmVzIHRoZSBjYWNoZSBrZXkgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGVcbiAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudFxuICogcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uIGlzIHVzZWQgYXMgdGhlIG1hcCBjYWNoZSBrZXkuIFRoZSBgZnVuY2BcbiAqIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlIG1lbW9pemVkIGZ1bmN0aW9uLlxuICpcbiAqICoqTm90ZToqKiBUaGUgY2FjaGUgaXMgZXhwb3NlZCBhcyB0aGUgYGNhY2hlYCBwcm9wZXJ0eSBvbiB0aGUgbWVtb2l6ZWRcbiAqIGZ1bmN0aW9uLiBJdHMgY3JlYXRpb24gbWF5IGJlIGN1c3RvbWl6ZWQgYnkgcmVwbGFjaW5nIHRoZSBgXy5tZW1vaXplLkNhY2hlYFxuICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5zdGFuY2VzIGltcGxlbWVudCB0aGVcbiAqIFtgTWFwYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcHJvcGVydGllcy1vZi10aGUtbWFwLXByb3RvdHlwZS1vYmplY3QpXG4gKiBtZXRob2QgaW50ZXJmYWNlIG9mIGBjbGVhcmAsIGBkZWxldGVgLCBgZ2V0YCwgYGhhc2AsIGFuZCBgc2V0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0gVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiB9O1xuICogdmFyIG90aGVyID0geyAnYyc6IDMsICdkJzogNCB9O1xuICpcbiAqIHZhciB2YWx1ZXMgPSBfLm1lbW9pemUoXy52YWx1ZXMpO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiB2YWx1ZXMob3RoZXIpO1xuICogLy8gPT4gWzMsIDRdXG4gKlxuICogb2JqZWN0LmEgPSAyO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiAvLyBNb2RpZnkgdGhlIHJlc3VsdCBjYWNoZS5cbiAqIHZhbHVlcy5jYWNoZS5zZXQob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWydhJywgJ2InXVxuICpcbiAqIC8vIFJlcGxhY2UgYF8ubWVtb2l6ZS5DYWNoZWAuXG4gKiBfLm1lbW9pemUuQ2FjaGUgPSBXZWFrTWFwO1xuICovXG5mdW5jdGlvbiBtZW1vaXplKGZ1bmMsIHJlc29sdmVyKSB7XG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAhPSBudWxsICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXG4gICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XG5cbiAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpIHx8IGNhY2hlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IE1hcENhY2hlKTtcbiAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG4vLyBFeHBvc2UgYE1hcENhY2hlYC5cbm1lbW9pemUuQ2FjaGUgPSBNYXBDYWNoZTtcblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGB1bmRlZmluZWRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi4zLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5ub29wKTtcbiAqIC8vID0+IFt1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAqL1xuZnVuY3Rpb24gbm9vcCgpIHtcbiAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBub29wO1xuIiwidmFyIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBiYXNlQ2xvbmUgPSByZXF1aXJlKCcuL19iYXNlQ2xvbmUnKSxcbiAgICBiYXNlVW5zZXQgPSByZXF1aXJlKCcuL19iYXNlVW5zZXQnKSxcbiAgICBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBjdXN0b21PbWl0Q2xvbmUgPSByZXF1aXJlKCcuL19jdXN0b21PbWl0Q2xvbmUnKSxcbiAgICBmbGF0UmVzdCA9IHJlcXVpcmUoJy4vX2ZsYXRSZXN0JyksXG4gICAgZ2V0QWxsS2V5c0luID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5c0luJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG52YXIgQ0xPTkVfREVFUF9GTEFHID0gMSxcbiAgICBDTE9ORV9GTEFUX0ZMQUcgPSAyLFxuICAgIENMT05FX1NZTUJPTFNfRkxBRyA9IDQ7XG5cbi8qKlxuICogVGhlIG9wcG9zaXRlIG9mIGBfLnBpY2tgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGVcbiAqIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgcGF0aHMgb2YgYG9iamVjdGAgdGhhdCBhcmUgbm90IG9taXR0ZWQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGNvbnNpZGVyYWJseSBzbG93ZXIgdGhhbiBgXy5waWNrYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gb21pdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAnMicsICdjJzogMyB9O1xuICpcbiAqIF8ub21pdChvYmplY3QsIFsnYScsICdjJ10pO1xuICogLy8gPT4geyAnYic6ICcyJyB9XG4gKi9cbnZhciBvbWl0ID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBwYXRocykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgdmFyIGlzRGVlcCA9IGZhbHNlO1xuICBwYXRocyA9IGFycmF5TWFwKHBhdGhzLCBmdW5jdGlvbihwYXRoKSB7XG4gICAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG4gICAgaXNEZWVwIHx8IChpc0RlZXAgPSBwYXRoLmxlbmd0aCA+IDEpO1xuICAgIHJldHVybiBwYXRoO1xuICB9KTtcbiAgY29weU9iamVjdChvYmplY3QsIGdldEFsbEtleXNJbihvYmplY3QpLCByZXN1bHQpO1xuICBpZiAoaXNEZWVwKSB7XG4gICAgcmVzdWx0ID0gYmFzZUNsb25lKHJlc3VsdCwgQ0xPTkVfREVFUF9GTEFHIHwgQ0xPTkVfRkxBVF9GTEFHIHwgQ0xPTkVfU1lNQk9MU19GTEFHLCBjdXN0b21PbWl0Q2xvbmUpO1xuICB9XG4gIHZhciBsZW5ndGggPSBwYXRocy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGJhc2VVbnNldChyZXN1bHQsIHBhdGhzW2xlbmd0aF0pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBvbWl0O1xuIiwidmFyIGJlZm9yZSA9IHJlcXVpcmUoJy4vYmVmb3JlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaXMgcmVzdHJpY3RlZCB0byBpbnZva2luZyBgZnVuY2Agb25jZS4gUmVwZWF0IGNhbGxzXG4gKiB0byB0aGUgZnVuY3Rpb24gcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgaW52b2NhdGlvbi4gVGhlIGBmdW5jYCBpc1xuICogaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBhbmQgYXJndW1lbnRzIG9mIHRoZSBjcmVhdGVkIGZ1bmN0aW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyByZXN0cmljdGVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgaW5pdGlhbGl6ZSA9IF8ub25jZShjcmVhdGVBcHBsaWNhdGlvbik7XG4gKiBpbml0aWFsaXplKCk7XG4gKiBpbml0aWFsaXplKCk7XG4gKiAvLyA9PiBgY3JlYXRlQXBwbGljYXRpb25gIGlzIGludm9rZWQgb25jZVxuICovXG5mdW5jdGlvbiBvbmNlKGZ1bmMpIHtcbiAgcmV0dXJuIGJlZm9yZSgyLCBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvbmNlO1xuIiwidmFyIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBjcmVhdGVXcmFwID0gcmVxdWlyZSgnLi9fY3JlYXRlV3JhcCcpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlcGxhY2VIb2xkZXJzID0gcmVxdWlyZSgnLi9fcmVwbGFjZUhvbGRlcnMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9QQVJUSUFMX0ZMQUcgPSAzMjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGBwYXJ0aWFsc2AgcHJlcGVuZGVkIHRvIHRoZVxuICogYXJndW1lbnRzIGl0IHJlY2VpdmVzLiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmJpbmRgIGV4Y2VwdCBpdCBkb2VzICoqbm90KipcbiAqIGFsdGVyIHRoZSBgdGhpc2AgYmluZGluZy5cbiAqXG4gKiBUaGUgYF8ucGFydGlhbC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljXG4gKiBidWlsZHMsIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgcGFydGlhbGx5XG4gKiBhcHBsaWVkIGZ1bmN0aW9ucy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMi4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHBhcnRpYWxseSBhcHBseSBhcmd1bWVudHMgdG8uXG4gKiBAcGFyYW0gey4uLip9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhcnRpYWxseSBhcHBsaWVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBncmVldChncmVldGluZywgbmFtZSkge1xuICogICByZXR1cm4gZ3JlZXRpbmcgKyAnICcgKyBuYW1lO1xuICogfVxuICpcbiAqIHZhciBzYXlIZWxsb1RvID0gXy5wYXJ0aWFsKGdyZWV0LCAnaGVsbG8nKTtcbiAqIHNheUhlbGxvVG8oJ2ZyZWQnKTtcbiAqIC8vID0+ICdoZWxsbyBmcmVkJ1xuICpcbiAqIC8vIFBhcnRpYWxseSBhcHBsaWVkIHdpdGggcGxhY2Vob2xkZXJzLlxuICogdmFyIGdyZWV0RnJlZCA9IF8ucGFydGlhbChncmVldCwgXywgJ2ZyZWQnKTtcbiAqIGdyZWV0RnJlZCgnaGknKTtcbiAqIC8vID0+ICdoaSBmcmVkJ1xuICovXG52YXIgcGFydGlhbCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIHBhcnRpYWxzKSB7XG4gIHZhciBob2xkZXJzID0gcmVwbGFjZUhvbGRlcnMocGFydGlhbHMsIGdldEhvbGRlcihwYXJ0aWFsKSk7XG4gIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfUEFSVElBTF9GTEFHLCB1bmRlZmluZWQsIHBhcnRpYWxzLCBob2xkZXJzKTtcbn0pO1xuXG4vLyBBc3NpZ24gZGVmYXVsdCBwbGFjZWhvbGRlcnMuXG5wYXJ0aWFsLnBsYWNlaG9sZGVyID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gcGFydGlhbDtcbiIsInZhciBiYXNlUGljayA9IHJlcXVpcmUoJy4vX2Jhc2VQaWNrJyksXG4gICAgZmxhdFJlc3QgPSByZXF1aXJlKCcuL19mbGF0UmVzdCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZSBwaWNrZWQgYG9iamVjdGAgcHJvcGVydGllcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAnMicsICdjJzogMyB9O1xuICpcbiAqIF8ucGljayhvYmplY3QsIFsnYScsICdjJ10pO1xuICogLy8gPT4geyAnYSc6IDEsICdjJzogMyB9XG4gKi9cbnZhciBwaWNrID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBwYXRocykge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB7fSA6IGJhc2VQaWNrKG9iamVjdCwgcGF0aHMpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGljaztcbiIsInZhciBiYXNlUHJvcGVydHkgPSByZXF1aXJlKCcuL19iYXNlUHJvcGVydHknKSxcbiAgICBiYXNlUHJvcGVydHlEZWVwID0gcmVxdWlyZSgnLi9fYmFzZVByb3BlcnR5RGVlcCcpLFxuICAgIGlzS2V5ID0gcmVxdWlyZSgnLi9faXNLZXknKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGEgZ2l2ZW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW1xuICogICB7ICdhJzogeyAnYic6IDIgfSB9LFxuICogICB7ICdhJzogeyAnYic6IDEgfSB9XG4gKiBdO1xuICpcbiAqIF8ubWFwKG9iamVjdHMsIF8ucHJvcGVydHkoJ2EuYicpKTtcbiAqIC8vID0+IFsyLCAxXVxuICpcbiAqIF8ubWFwKF8uc29ydEJ5KG9iamVjdHMsIF8ucHJvcGVydHkoWydhJywgJ2InXSkpLCAnYS5iJyk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqL1xuZnVuY3Rpb24gcHJvcGVydHkocGF0aCkge1xuICByZXR1cm4gaXNLZXkocGF0aCkgPyBiYXNlUHJvcGVydHkodG9LZXkocGF0aCkpIDogYmFzZVByb3BlcnR5RGVlcChwYXRoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwcm9wZXJ0eTtcbiIsInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmdldGAgZXhjZXB0IHRoYXQgaWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzIGFcbiAqIGZ1bmN0aW9uIGl0J3MgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBpdHMgcGFyZW50IG9iamVjdCBhbmRcbiAqIGl0cyByZXN1bHQgaXMgcmV0dXJuZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHJlc29sdmUuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYzEnOiAzLCAnYzInOiBfLmNvbnN0YW50KDQpIH0gfV0gfTtcbiAqXG4gKiBfLnJlc3VsdChvYmplY3QsICdhWzBdLmIuYzEnKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLnJlc3VsdChvYmplY3QsICdhWzBdLmIuYzInKTtcbiAqIC8vID0+IDRcbiAqXG4gKiBfLnJlc3VsdChvYmplY3QsICdhWzBdLmIuYzMnLCAnZGVmYXVsdCcpO1xuICogLy8gPT4gJ2RlZmF1bHQnXG4gKlxuICogXy5yZXN1bHQob2JqZWN0LCAnYVswXS5iLmMzJywgXy5jb25zdGFudCgnZGVmYXVsdCcpKTtcbiAqIC8vID0+ICdkZWZhdWx0J1xuICovXG5mdW5jdGlvbiByZXN1bHQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICAvLyBFbnN1cmUgdGhlIGxvb3AgaXMgZW50ZXJlZCB3aGVuIHBhdGggaXMgZW1wdHkuXG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gMTtcbiAgICBvYmplY3QgPSB1bmRlZmluZWQ7XG4gIH1cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFt0b0tleShwYXRoW2luZGV4XSldO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbmRleCA9IGxlbmd0aDtcbiAgICAgIHZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgICBvYmplY3QgPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHZhbHVlLmNhbGwob2JqZWN0KSA6IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVzdWx0O1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheXMgPSBfLnRpbWVzKDIsIF8uc3R1YkFycmF5KTtcbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXMpO1xuICogLy8gPT4gW1tdLCBbXV1cbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXNbMF0gPT09IGFycmF5c1sxXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBzdHViQXJyYXkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViQXJyYXk7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkZhbHNlO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzU3RyaW5nID0gcmVxdWlyZSgnLi9pc1N0cmluZycpLFxuICAgIGl0ZXJhdG9yVG9BcnJheSA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9yVG9BcnJheScpLFxuICAgIG1hcFRvQXJyYXkgPSByZXF1aXJlKCcuL19tYXBUb0FycmF5JyksXG4gICAgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4vX3NldFRvQXJyYXknKSxcbiAgICBzdHJpbmdUb0FycmF5ID0gcmVxdWlyZSgnLi9fc3RyaW5nVG9BcnJheScpLFxuICAgIHZhbHVlcyA9IHJlcXVpcmUoJy4vdmFsdWVzJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltSXRlcmF0b3IgPSBTeW1ib2wgPyBTeW1ib2wuaXRlcmF0b3IgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvQXJyYXkoeyAnYSc6IDEsICdiJzogMiB9KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIF8udG9BcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ11cbiAqXG4gKiBfLnRvQXJyYXkoMSk7XG4gKiAvLyA9PiBbXVxuICpcbiAqIF8udG9BcnJheShudWxsKTtcbiAqIC8vID0+IFtdXG4gKi9cbmZ1bmN0aW9uIHRvQXJyYXkodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBpZiAoaXNBcnJheUxpa2UodmFsdWUpKSB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlKSA/IHN0cmluZ1RvQXJyYXkodmFsdWUpIDogY29weUFycmF5KHZhbHVlKTtcbiAgfVxuICBpZiAoc3ltSXRlcmF0b3IgJiYgdmFsdWVbc3ltSXRlcmF0b3JdKSB7XG4gICAgcmV0dXJuIGl0ZXJhdG9yVG9BcnJheSh2YWx1ZVtzeW1JdGVyYXRvcl0oKSk7XG4gIH1cbiAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSksXG4gICAgICBmdW5jID0gdGFnID09IG1hcFRhZyA/IG1hcFRvQXJyYXkgOiAodGFnID09IHNldFRhZyA/IHNldFRvQXJyYXkgOiB2YWx1ZXMpO1xuXG4gIHJldHVybiBmdW5jKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0FycmF5O1xuIiwidmFyIHRvTnVtYmVyID0gcmVxdWlyZSgnLi90b051bWJlcicpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwLFxuICAgIE1BWF9JTlRFR0VSID0gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIGZpbml0ZSBudW1iZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEyLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b0Zpbml0ZSgzLjIpO1xuICogLy8gPT4gMy4yXG4gKlxuICogXy50b0Zpbml0ZShOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDVlLTMyNFxuICpcbiAqIF8udG9GaW5pdGUoSW5maW5pdHkpO1xuICogLy8gPT4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhcbiAqXG4gKiBfLnRvRmluaXRlKCczLjInKTtcbiAqIC8vID0+IDMuMlxuICovXG5mdW5jdGlvbiB0b0Zpbml0ZSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiAwO1xuICB9XG4gIHZhbHVlID0gdG9OdW1iZXIodmFsdWUpO1xuICBpZiAodmFsdWUgPT09IElORklOSVRZIHx8IHZhbHVlID09PSAtSU5GSU5JVFkpIHtcbiAgICB2YXIgc2lnbiA9ICh2YWx1ZSA8IDAgPyAtMSA6IDEpO1xuICAgIHJldHVybiBzaWduICogTUFYX0lOVEVHRVI7XG4gIH1cbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/IHZhbHVlIDogMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0Zpbml0ZTtcbiIsInZhciB0b0Zpbml0ZSA9IHJlcXVpcmUoJy4vdG9GaW5pdGUnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGFuIGludGVnZXIuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9JbnRlZ2VyYF0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvaW50ZWdlcikuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgaW50ZWdlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b0ludGVnZXIoMy4yKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLnRvSW50ZWdlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDBcbiAqXG4gKiBfLnRvSW50ZWdlcihJbmZpbml0eSk7XG4gKiAvLyA9PiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFxuICpcbiAqIF8udG9JbnRlZ2VyKCczLjInKTtcbiAqIC8vID0+IDNcbiAqL1xuZnVuY3Rpb24gdG9JbnRlZ2VyKHZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSB0b0Zpbml0ZSh2YWx1ZSksXG4gICAgICByZW1haW5kZXIgPSByZXN1bHQgJSAxO1xuXG4gIHJldHVybiByZXN1bHQgPT09IHJlc3VsdCA/IChyZW1haW5kZXIgPyByZXN1bHQgLSByZW1haW5kZXIgOiByZXN1bHQpIDogMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0ludGVnZXI7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE5BTiA9IDAgLyAwO1xuXG4vKiogVXNlZCB0byBtYXRjaCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLiAqL1xudmFyIHJlVHJpbSA9IC9eXFxzK3xcXHMrJC9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmFkIHNpZ25lZCBoZXhhZGVjaW1hbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCYWRIZXggPSAvXlstK10weFswLTlhLWZdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGJpbmFyeSBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCaW5hcnkgPSAvXjBiWzAxXSskL2k7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvY3RhbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNPY3RhbCA9IC9eMG9bMC03XSskL2k7XG5cbi8qKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB3aXRob3V0IGEgZGVwZW5kZW5jeSBvbiBgcm9vdGAuICovXG52YXIgZnJlZVBhcnNlSW50ID0gcGFyc2VJbnQ7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIG51bWJlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b051bWJlcigzLjIpO1xuICogLy8gPT4gMy4yXG4gKlxuICogXy50b051bWJlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDVlLTMyNFxuICpcbiAqIF8udG9OdW1iZXIoSW5maW5pdHkpO1xuICogLy8gPT4gSW5maW5pdHlcbiAqXG4gKiBfLnRvTnVtYmVyKCczLjInKTtcbiAqIC8vID0+IDMuMlxuICovXG5mdW5jdGlvbiB0b051bWJlcih2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gTkFOO1xuICB9XG4gIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICB2YXIgb3RoZXIgPSB0eXBlb2YgdmFsdWUudmFsdWVPZiA9PSAnZnVuY3Rpb24nID8gdmFsdWUudmFsdWVPZigpIDogdmFsdWU7XG4gICAgdmFsdWUgPSBpc09iamVjdChvdGhlcikgPyAob3RoZXIgKyAnJykgOiBvdGhlcjtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiArdmFsdWU7XG4gIH1cbiAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHJlVHJpbSwgJycpO1xuICB2YXIgaXNCaW5hcnkgPSByZUlzQmluYXJ5LnRlc3QodmFsdWUpO1xuICByZXR1cm4gKGlzQmluYXJ5IHx8IHJlSXNPY3RhbC50ZXN0KHZhbHVlKSlcbiAgICA/IGZyZWVQYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgaXNCaW5hcnkgPyAyIDogOClcbiAgICA6IChyZUlzQmFkSGV4LnRlc3QodmFsdWUpID8gTkFOIDogK3ZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b051bWJlcjtcbiIsInZhciBiYXNlVG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlVG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU3RyaW5nO1xuIiwidmFyIGJhc2VGbGF0dGVuID0gcmVxdWlyZSgnLi9fYmFzZUZsYXR0ZW4nKSxcbiAgICBiYXNlUmVzdCA9IHJlcXVpcmUoJy4vX2Jhc2VSZXN0JyksXG4gICAgYmFzZVVuaXEgPSByZXF1aXJlKCcuL19iYXNlVW5pcScpLFxuICAgIGlzQXJyYXlMaWtlT2JqZWN0ID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZU9iamVjdCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcywgaW4gb3JkZXIsIGZyb20gYWxsIGdpdmVuIGFycmF5cyB1c2luZ1xuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbWJpbmVkIHZhbHVlcy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy51bmlvbihbMl0sIFsxLCAyXSk7XG4gKiAvLyA9PiBbMiwgMV1cbiAqL1xudmFyIHVuaW9uID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gIHJldHVybiBiYXNlVW5pcShiYXNlRmxhdHRlbihhcnJheXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmlvbjtcbiIsInZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqIFVzZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIElEcy4gKi9cbnZhciBpZENvdW50ZXIgPSAwO1xuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHVuaXF1ZSBJRC4gSWYgYHByZWZpeGAgaXMgZ2l2ZW4sIHRoZSBJRCBpcyBhcHBlbmRlZCB0byBpdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtzdHJpbmd9IFtwcmVmaXg9JyddIFRoZSB2YWx1ZSB0byBwcmVmaXggdGhlIElEIHdpdGguXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB1bmlxdWUgSUQuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udW5pcXVlSWQoJ2NvbnRhY3RfJyk7XG4gKiAvLyA9PiAnY29udGFjdF8xMDQnXG4gKlxuICogXy51bmlxdWVJZCgpO1xuICogLy8gPT4gJzEwNSdcbiAqL1xuZnVuY3Rpb24gdW5pcXVlSWQocHJlZml4KSB7XG4gIHZhciBpZCA9ICsraWRDb3VudGVyO1xuICByZXR1cm4gdG9TdHJpbmcocHJlZml4KSArIGlkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHVuaXF1ZUlkO1xuIiwidmFyIGJhc2VWYWx1ZXMgPSByZXF1aXJlKCcuL19iYXNlVmFsdWVzJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8udmFsdWVzKG5ldyBGb28pO1xuICogLy8gPT4gWzEsIDJdIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKlxuICogXy52YWx1ZXMoJ2hpJyk7XG4gKiAvLyA9PiBbJ2gnLCAnaSddXG4gKi9cbmZ1bmN0aW9uIHZhbHVlcyhvYmplY3QpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gW10gOiBiYXNlVmFsdWVzKG9iamVjdCwga2V5cyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2YWx1ZXM7XG4iLCJ2YXIgTGF6eVdyYXBwZXIgPSByZXF1aXJlKCcuL19MYXp5V3JhcHBlcicpLFxuICAgIExvZGFzaFdyYXBwZXIgPSByZXF1aXJlKCcuL19Mb2Rhc2hXcmFwcGVyJyksXG4gICAgYmFzZUxvZGFzaCA9IHJlcXVpcmUoJy4vX2Jhc2VMb2Rhc2gnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKSxcbiAgICB3cmFwcGVyQ2xvbmUgPSByZXF1aXJlKCcuL193cmFwcGVyQ2xvbmUnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgYGxvZGFzaGAgb2JqZWN0IHdoaWNoIHdyYXBzIGB2YWx1ZWAgdG8gZW5hYmxlIGltcGxpY2l0IG1ldGhvZFxuICogY2hhaW4gc2VxdWVuY2VzLiBNZXRob2RzIHRoYXQgb3BlcmF0ZSBvbiBhbmQgcmV0dXJuIGFycmF5cywgY29sbGVjdGlvbnMsXG4gKiBhbmQgZnVuY3Rpb25zIGNhbiBiZSBjaGFpbmVkIHRvZ2V0aGVyLiBNZXRob2RzIHRoYXQgcmV0cmlldmUgYSBzaW5nbGUgdmFsdWVcbiAqIG9yIG1heSByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IGVuZCB0aGUgY2hhaW4gc2VxdWVuY2VcbiAqIGFuZCByZXR1cm4gdGhlIHVud3JhcHBlZCB2YWx1ZS4gT3RoZXJ3aXNlLCB0aGUgdmFsdWUgbXVzdCBiZSB1bndyYXBwZWRcbiAqIHdpdGggYF8jdmFsdWVgLlxuICpcbiAqIEV4cGxpY2l0IGNoYWluIHNlcXVlbmNlcywgd2hpY2ggbXVzdCBiZSB1bndyYXBwZWQgd2l0aCBgXyN2YWx1ZWAsIG1heSBiZVxuICogZW5hYmxlZCB1c2luZyBgXy5jaGFpbmAuXG4gKlxuICogVGhlIGV4ZWN1dGlvbiBvZiBjaGFpbmVkIG1ldGhvZHMgaXMgbGF6eSwgdGhhdCBpcywgaXQncyBkZWZlcnJlZCB1bnRpbFxuICogYF8jdmFsdWVgIGlzIGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBjYWxsZWQuXG4gKlxuICogTGF6eSBldmFsdWF0aW9uIGFsbG93cyBzZXZlcmFsIG1ldGhvZHMgdG8gc3VwcG9ydCBzaG9ydGN1dCBmdXNpb24uXG4gKiBTaG9ydGN1dCBmdXNpb24gaXMgYW4gb3B0aW1pemF0aW9uIHRvIG1lcmdlIGl0ZXJhdGVlIGNhbGxzOyB0aGlzIGF2b2lkc1xuICogdGhlIGNyZWF0aW9uIG9mIGludGVybWVkaWF0ZSBhcnJheXMgYW5kIGNhbiBncmVhdGx5IHJlZHVjZSB0aGUgbnVtYmVyIG9mXG4gKiBpdGVyYXRlZSBleGVjdXRpb25zLiBTZWN0aW9ucyBvZiBhIGNoYWluIHNlcXVlbmNlIHF1YWxpZnkgZm9yIHNob3J0Y3V0XG4gKiBmdXNpb24gaWYgdGhlIHNlY3Rpb24gaXMgYXBwbGllZCB0byBhbiBhcnJheSBhbmQgaXRlcmF0ZWVzIGFjY2VwdCBvbmx5XG4gKiBvbmUgYXJndW1lbnQuIFRoZSBoZXVyaXN0aWMgZm9yIHdoZXRoZXIgYSBzZWN0aW9uIHF1YWxpZmllcyBmb3Igc2hvcnRjdXRcbiAqIGZ1c2lvbiBpcyBzdWJqZWN0IHRvIGNoYW5nZS5cbiAqXG4gKiBDaGFpbmluZyBpcyBzdXBwb3J0ZWQgaW4gY3VzdG9tIGJ1aWxkcyBhcyBsb25nIGFzIHRoZSBgXyN2YWx1ZWAgbWV0aG9kIGlzXG4gKiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluY2x1ZGVkIGluIHRoZSBidWlsZC5cbiAqXG4gKiBJbiBhZGRpdGlvbiB0byBsb2Rhc2ggbWV0aG9kcywgd3JhcHBlcnMgaGF2ZSBgQXJyYXlgIGFuZCBgU3RyaW5nYCBtZXRob2RzLlxuICpcbiAqIFRoZSB3cmFwcGVyIGBBcnJheWAgbWV0aG9kcyBhcmU6XG4gKiBgY29uY2F0YCwgYGpvaW5gLCBgcG9wYCwgYHB1c2hgLCBgc2hpZnRgLCBgc29ydGAsIGBzcGxpY2VgLCBhbmQgYHVuc2hpZnRgXG4gKlxuICogVGhlIHdyYXBwZXIgYFN0cmluZ2AgbWV0aG9kcyBhcmU6XG4gKiBgcmVwbGFjZWAgYW5kIGBzcGxpdGBcbiAqXG4gKiBUaGUgd3JhcHBlciBtZXRob2RzIHRoYXQgc3VwcG9ydCBzaG9ydGN1dCBmdXNpb24gYXJlOlxuICogYGF0YCwgYGNvbXBhY3RgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLCBgZHJvcFdoaWxlYCwgYGZpbHRlcmAsIGBmaW5kYCxcbiAqIGBmaW5kTGFzdGAsIGBoZWFkYCwgYGluaXRpYWxgLCBgbGFzdGAsIGBtYXBgLCBgcmVqZWN0YCwgYHJldmVyc2VgLCBgc2xpY2VgLFxuICogYHRhaWxgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLCBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYW5kIGB0b0FycmF5YFxuICpcbiAqIFRoZSBjaGFpbmFibGUgd3JhcHBlciBtZXRob2RzIGFyZTpcbiAqIGBhZnRlcmAsIGBhcnlgLCBgYXNzaWduYCwgYGFzc2lnbkluYCwgYGFzc2lnbkluV2l0aGAsIGBhc3NpZ25XaXRoYCwgYGF0YCxcbiAqIGBiZWZvcmVgLCBgYmluZGAsIGBiaW5kQWxsYCwgYGJpbmRLZXlgLCBgY2FzdEFycmF5YCwgYGNoYWluYCwgYGNodW5rYCxcbiAqIGBjb21taXRgLCBgY29tcGFjdGAsIGBjb25jYXRgLCBgY29uZm9ybXNgLCBgY29uc3RhbnRgLCBgY291bnRCeWAsIGBjcmVhdGVgLFxuICogYGN1cnJ5YCwgYGRlYm91bmNlYCwgYGRlZmF1bHRzYCwgYGRlZmF1bHRzRGVlcGAsIGBkZWZlcmAsIGBkZWxheWAsXG4gKiBgZGlmZmVyZW5jZWAsIGBkaWZmZXJlbmNlQnlgLCBgZGlmZmVyZW5jZVdpdGhgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLFxuICogYGRyb3BSaWdodFdoaWxlYCwgYGRyb3BXaGlsZWAsIGBleHRlbmRgLCBgZXh0ZW5kV2l0aGAsIGBmaWxsYCwgYGZpbHRlcmAsXG4gKiBgZmxhdE1hcGAsIGBmbGF0TWFwRGVlcGAsIGBmbGF0TWFwRGVwdGhgLCBgZmxhdHRlbmAsIGBmbGF0dGVuRGVlcGAsXG4gKiBgZmxhdHRlbkRlcHRoYCwgYGZsaXBgLCBgZmxvd2AsIGBmbG93UmlnaHRgLCBgZnJvbVBhaXJzYCwgYGZ1bmN0aW9uc2AsXG4gKiBgZnVuY3Rpb25zSW5gLCBgZ3JvdXBCeWAsIGBpbml0aWFsYCwgYGludGVyc2VjdGlvbmAsIGBpbnRlcnNlY3Rpb25CeWAsXG4gKiBgaW50ZXJzZWN0aW9uV2l0aGAsIGBpbnZlcnRgLCBgaW52ZXJ0QnlgLCBgaW52b2tlTWFwYCwgYGl0ZXJhdGVlYCwgYGtleUJ5YCxcbiAqIGBrZXlzYCwgYGtleXNJbmAsIGBtYXBgLCBgbWFwS2V5c2AsIGBtYXBWYWx1ZXNgLCBgbWF0Y2hlc2AsIGBtYXRjaGVzUHJvcGVydHlgLFxuICogYG1lbW9pemVgLCBgbWVyZ2VgLCBgbWVyZ2VXaXRoYCwgYG1ldGhvZGAsIGBtZXRob2RPZmAsIGBtaXhpbmAsIGBuZWdhdGVgLFxuICogYG50aEFyZ2AsIGBvbWl0YCwgYG9taXRCeWAsIGBvbmNlYCwgYG9yZGVyQnlgLCBgb3ZlcmAsIGBvdmVyQXJnc2AsXG4gKiBgb3ZlckV2ZXJ5YCwgYG92ZXJTb21lYCwgYHBhcnRpYWxgLCBgcGFydGlhbFJpZ2h0YCwgYHBhcnRpdGlvbmAsIGBwaWNrYCxcbiAqIGBwaWNrQnlgLCBgcGxhbnRgLCBgcHJvcGVydHlgLCBgcHJvcGVydHlPZmAsIGBwdWxsYCwgYHB1bGxBbGxgLCBgcHVsbEFsbEJ5YCxcbiAqIGBwdWxsQWxsV2l0aGAsIGBwdWxsQXRgLCBgcHVzaGAsIGByYW5nZWAsIGByYW5nZVJpZ2h0YCwgYHJlYXJnYCwgYHJlamVjdGAsXG4gKiBgcmVtb3ZlYCwgYHJlc3RgLCBgcmV2ZXJzZWAsIGBzYW1wbGVTaXplYCwgYHNldGAsIGBzZXRXaXRoYCwgYHNodWZmbGVgLFxuICogYHNsaWNlYCwgYHNvcnRgLCBgc29ydEJ5YCwgYHNwbGljZWAsIGBzcHJlYWRgLCBgdGFpbGAsIGB0YWtlYCwgYHRha2VSaWdodGAsXG4gKiBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYHRhcGAsIGB0aHJvdHRsZWAsIGB0aHJ1YCwgYHRvQXJyYXlgLFxuICogYHRvUGFpcnNgLCBgdG9QYWlyc0luYCwgYHRvUGF0aGAsIGB0b1BsYWluT2JqZWN0YCwgYHRyYW5zZm9ybWAsIGB1bmFyeWAsXG4gKiBgdW5pb25gLCBgdW5pb25CeWAsIGB1bmlvbldpdGhgLCBgdW5pcWAsIGB1bmlxQnlgLCBgdW5pcVdpdGhgLCBgdW5zZXRgLFxuICogYHVuc2hpZnRgLCBgdW56aXBgLCBgdW56aXBXaXRoYCwgYHVwZGF0ZWAsIGB1cGRhdGVXaXRoYCwgYHZhbHVlc2AsXG4gKiBgdmFsdWVzSW5gLCBgd2l0aG91dGAsIGB3cmFwYCwgYHhvcmAsIGB4b3JCeWAsIGB4b3JXaXRoYCwgYHppcGAsXG4gKiBgemlwT2JqZWN0YCwgYHppcE9iamVjdERlZXBgLCBhbmQgYHppcFdpdGhgXG4gKlxuICogVGhlIHdyYXBwZXIgbWV0aG9kcyB0aGF0IGFyZSAqKm5vdCoqIGNoYWluYWJsZSBieSBkZWZhdWx0IGFyZTpcbiAqIGBhZGRgLCBgYXR0ZW1wdGAsIGBjYW1lbENhc2VgLCBgY2FwaXRhbGl6ZWAsIGBjZWlsYCwgYGNsYW1wYCwgYGNsb25lYCxcbiAqIGBjbG9uZURlZXBgLCBgY2xvbmVEZWVwV2l0aGAsIGBjbG9uZVdpdGhgLCBgY29uZm9ybXNUb2AsIGBkZWJ1cnJgLFxuICogYGRlZmF1bHRUb2AsIGBkaXZpZGVgLCBgZWFjaGAsIGBlYWNoUmlnaHRgLCBgZW5kc1dpdGhgLCBgZXFgLCBgZXNjYXBlYCxcbiAqIGBlc2NhcGVSZWdFeHBgLCBgZXZlcnlgLCBgZmluZGAsIGBmaW5kSW5kZXhgLCBgZmluZEtleWAsIGBmaW5kTGFzdGAsXG4gKiBgZmluZExhc3RJbmRleGAsIGBmaW5kTGFzdEtleWAsIGBmaXJzdGAsIGBmbG9vcmAsIGBmb3JFYWNoYCwgYGZvckVhY2hSaWdodGAsXG4gKiBgZm9ySW5gLCBgZm9ySW5SaWdodGAsIGBmb3JPd25gLCBgZm9yT3duUmlnaHRgLCBgZ2V0YCwgYGd0YCwgYGd0ZWAsIGBoYXNgLFxuICogYGhhc0luYCwgYGhlYWRgLCBgaWRlbnRpdHlgLCBgaW5jbHVkZXNgLCBgaW5kZXhPZmAsIGBpblJhbmdlYCwgYGludm9rZWAsXG4gKiBgaXNBcmd1bWVudHNgLCBgaXNBcnJheWAsIGBpc0FycmF5QnVmZmVyYCwgYGlzQXJyYXlMaWtlYCwgYGlzQXJyYXlMaWtlT2JqZWN0YCxcbiAqIGBpc0Jvb2xlYW5gLCBgaXNCdWZmZXJgLCBgaXNEYXRlYCwgYGlzRWxlbWVudGAsIGBpc0VtcHR5YCwgYGlzRXF1YWxgLFxuICogYGlzRXF1YWxXaXRoYCwgYGlzRXJyb3JgLCBgaXNGaW5pdGVgLCBgaXNGdW5jdGlvbmAsIGBpc0ludGVnZXJgLCBgaXNMZW5ndGhgLFxuICogYGlzTWFwYCwgYGlzTWF0Y2hgLCBgaXNNYXRjaFdpdGhgLCBgaXNOYU5gLCBgaXNOYXRpdmVgLCBgaXNOaWxgLCBgaXNOdWxsYCxcbiAqIGBpc051bWJlcmAsIGBpc09iamVjdGAsIGBpc09iamVjdExpa2VgLCBgaXNQbGFpbk9iamVjdGAsIGBpc1JlZ0V4cGAsXG4gKiBgaXNTYWZlSW50ZWdlcmAsIGBpc1NldGAsIGBpc1N0cmluZ2AsIGBpc1VuZGVmaW5lZGAsIGBpc1R5cGVkQXJyYXlgLFxuICogYGlzV2Vha01hcGAsIGBpc1dlYWtTZXRgLCBgam9pbmAsIGBrZWJhYkNhc2VgLCBgbGFzdGAsIGBsYXN0SW5kZXhPZmAsXG4gKiBgbG93ZXJDYXNlYCwgYGxvd2VyRmlyc3RgLCBgbHRgLCBgbHRlYCwgYG1heGAsIGBtYXhCeWAsIGBtZWFuYCwgYG1lYW5CeWAsXG4gKiBgbWluYCwgYG1pbkJ5YCwgYG11bHRpcGx5YCwgYG5vQ29uZmxpY3RgLCBgbm9vcGAsIGBub3dgLCBgbnRoYCwgYHBhZGAsXG4gKiBgcGFkRW5kYCwgYHBhZFN0YXJ0YCwgYHBhcnNlSW50YCwgYHBvcGAsIGByYW5kb21gLCBgcmVkdWNlYCwgYHJlZHVjZVJpZ2h0YCxcbiAqIGByZXBlYXRgLCBgcmVzdWx0YCwgYHJvdW5kYCwgYHJ1bkluQ29udGV4dGAsIGBzYW1wbGVgLCBgc2hpZnRgLCBgc2l6ZWAsXG4gKiBgc25ha2VDYXNlYCwgYHNvbWVgLCBgc29ydGVkSW5kZXhgLCBgc29ydGVkSW5kZXhCeWAsIGBzb3J0ZWRMYXN0SW5kZXhgLFxuICogYHNvcnRlZExhc3RJbmRleEJ5YCwgYHN0YXJ0Q2FzZWAsIGBzdGFydHNXaXRoYCwgYHN0dWJBcnJheWAsIGBzdHViRmFsc2VgLFxuICogYHN0dWJPYmplY3RgLCBgc3R1YlN0cmluZ2AsIGBzdHViVHJ1ZWAsIGBzdWJ0cmFjdGAsIGBzdW1gLCBgc3VtQnlgLFxuICogYHRlbXBsYXRlYCwgYHRpbWVzYCwgYHRvRmluaXRlYCwgYHRvSW50ZWdlcmAsIGB0b0pTT05gLCBgdG9MZW5ndGhgLFxuICogYHRvTG93ZXJgLCBgdG9OdW1iZXJgLCBgdG9TYWZlSW50ZWdlcmAsIGB0b1N0cmluZ2AsIGB0b1VwcGVyYCwgYHRyaW1gLFxuICogYHRyaW1FbmRgLCBgdHJpbVN0YXJ0YCwgYHRydW5jYXRlYCwgYHVuZXNjYXBlYCwgYHVuaXF1ZUlkYCwgYHVwcGVyQ2FzZWAsXG4gKiBgdXBwZXJGaXJzdGAsIGB2YWx1ZWAsIGFuZCBgd29yZHNgXG4gKlxuICogQG5hbWUgX1xuICogQGNvbnN0cnVjdG9yXG4gKiBAY2F0ZWdvcnkgU2VxXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwIGluIGEgYGxvZGFzaGAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAqICAgcmV0dXJuIG4gKiBuO1xuICogfVxuICpcbiAqIHZhciB3cmFwcGVkID0gXyhbMSwgMiwgM10pO1xuICpcbiAqIC8vIFJldHVybnMgYW4gdW53cmFwcGVkIHZhbHVlLlxuICogd3JhcHBlZC5yZWR1Y2UoXy5hZGQpO1xuICogLy8gPT4gNlxuICpcbiAqIC8vIFJldHVybnMgYSB3cmFwcGVkIHZhbHVlLlxuICogdmFyIHNxdWFyZXMgPSB3cmFwcGVkLm1hcChzcXVhcmUpO1xuICpcbiAqIF8uaXNBcnJheShzcXVhcmVzKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KHNxdWFyZXMudmFsdWUoKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGxvZGFzaCh2YWx1ZSkge1xuICBpZiAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNBcnJheSh2YWx1ZSkgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIExvZGFzaFdyYXBwZXIpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdfX3dyYXBwZWRfXycpKSB7XG4gICAgICByZXR1cm4gd3JhcHBlckNsb25lKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHZhbHVlKTtcbn1cblxuLy8gRW5zdXJlIHdyYXBwZXJzIGFyZSBpbnN0YW5jZXMgb2YgYGJhc2VMb2Rhc2hgLlxubG9kYXNoLnByb3RvdHlwZSA9IGJhc2VMb2Rhc2gucHJvdG90eXBlO1xubG9kYXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGxvZGFzaDtcblxubW9kdWxlLmV4cG9ydHMgPSBsb2Rhc2g7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBwcm90byA9IHR5cGVvZiBFbGVtZW50ICE9PSAndW5kZWZpbmVkJyA/IEVsZW1lbnQucHJvdG90eXBlIDoge307XG52YXIgdmVuZG9yID0gcHJvdG8ubWF0Y2hlc1xuICB8fCBwcm90by5tYXRjaGVzU2VsZWN0b3JcbiAgfHwgcHJvdG8ud2Via2l0TWF0Y2hlc1NlbGVjdG9yXG4gIHx8IHByb3RvLm1vek1hdGNoZXNTZWxlY3RvclxuICB8fCBwcm90by5tc01hdGNoZXNTZWxlY3RvclxuICB8fCBwcm90by5vTWF0Y2hlc1NlbGVjdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1hdGNoO1xuXG4vKipcbiAqIE1hdGNoIGBlbGAgdG8gYHNlbGVjdG9yYC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3JcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIG1hdGNoKGVsLCBzZWxlY3Rvcikge1xuICBpZiAoIWVsIHx8IGVsLm5vZGVUeXBlICE9PSAxKSByZXR1cm4gZmFsc2U7XG4gIGlmICh2ZW5kb3IpIHJldHVybiB2ZW5kb3IuY2FsbChlbCwgc2VsZWN0b3IpO1xuICB2YXIgbm9kZXMgPSBlbC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG5vZGVzW2ldID09IGVsKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4iLCIvKipcbiAqIG1lZGlhLXR5cGVcbiAqIEBhdXRob3IgTG92ZWxsIEZ1bGxlclxuICpcbiAqIFRoaXMgY29kZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIHRoZSB0ZXJtcyBvZlxuICogd2hpY2ggbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMC5odG1sXG4gKi9cblxudmFyIE1lZGlhVHlwZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnR5cGUgPSBudWxsO1xuICB0aGlzLl9zZXRTdWJ0eXBlQW5kU3VmZml4KG51bGwpO1xuICB0aGlzLnBhcmFtZXRlcnMgPSB7fTtcbn07XG5cbk1lZGlhVHlwZS5wcm90b3R5cGUuaXNWYWxpZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy50eXBlICE9PSBudWxsICYmIHRoaXMuc3VidHlwZSAhPT0gbnVsbCAmJiB0aGlzLnN1YnR5cGUgIT09IFwiZXhhbXBsZVwiO1xufTtcblxuTWVkaWFUeXBlLnByb3RvdHlwZS5fc2V0U3VidHlwZUFuZFN1ZmZpeCA9IGZ1bmN0aW9uKHN1YnR5cGUpIHtcbiAgdGhpcy5zdWJ0eXBlID0gc3VidHlwZTtcbiAgdGhpcy5zdWJ0eXBlRmFjZXRzID0gW107XG4gIHRoaXMuc3VmZml4ID0gbnVsbDtcbiAgaWYgKHN1YnR5cGUpIHtcbiAgICBpZiAoc3VidHlwZS5pbmRleE9mKFwiK1wiKSA+IC0xICYmIHN1YnR5cGUuc3Vic3RyKC0xKSAhPT0gXCIrXCIpIHtcbiAgICAgIHZhciBmaXhlcyA9IHN1YnR5cGUuc3BsaXQoXCIrXCIsIDIpO1xuICAgICAgdGhpcy5zdWJ0eXBlID0gZml4ZXNbMF07XG4gICAgICB0aGlzLnN1YnR5cGVGYWNldHMgPSBmaXhlc1swXS5zcGxpdChcIi5cIik7XG4gICAgICB0aGlzLnN1ZmZpeCA9IGZpeGVzWzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN1YnR5cGVGYWNldHMgPSBzdWJ0eXBlLnNwbGl0KFwiLlwiKTtcbiAgICB9XG4gIH1cbn07XG5cbk1lZGlhVHlwZS5wcm90b3R5cGUuaGFzU3VmZml4ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAhIXRoaXMuc3VmZml4O1xufTtcblxuTWVkaWFUeXBlLnByb3RvdHlwZS5fZmlyc3RTdWJ0eXBlRmFjZXRFcXVhbHMgPSBmdW5jdGlvbihzdHIpIHtcbiAgcmV0dXJuIHRoaXMuc3VidHlwZUZhY2V0cy5sZW5ndGggPiAwICYmIHRoaXMuc3VidHlwZUZhY2V0c1swXSA9PT0gc3RyO1xufTtcblxuTWVkaWFUeXBlLnByb3RvdHlwZS5pc1ZlbmRvciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fZmlyc3RTdWJ0eXBlRmFjZXRFcXVhbHMoXCJ2bmRcIik7XG59O1xuXG5NZWRpYVR5cGUucHJvdG90eXBlLmlzUGVyc29uYWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX2ZpcnN0U3VidHlwZUZhY2V0RXF1YWxzKFwicHJzXCIpO1xufTtcblxuTWVkaWFUeXBlLnByb3RvdHlwZS5pc0V4cGVyaW1lbnRhbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fZmlyc3RTdWJ0eXBlRmFjZXRFcXVhbHMoXCJ4XCIpIHx8IHRoaXMuc3VidHlwZS5zdWJzdHJpbmcoMCwgMikudG9Mb3dlckNhc2UoKSA9PT0gXCJ4LVwiO1xufTtcblxuTWVkaWFUeXBlLnByb3RvdHlwZS5hc1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgc3RyID0gXCJcIjtcbiAgaWYgKHRoaXMuaXNWYWxpZCgpKSB7XG4gICAgc3RyID0gc3RyICsgdGhpcy50eXBlICsgXCIvXCIgKyB0aGlzLnN1YnR5cGU7XG4gICAgaWYgKHRoaXMuaGFzU3VmZml4KCkpIHtcbiAgICAgIHN0ciA9IHN0ciArIFwiK1wiICsgdGhpcy5zdWZmaXg7XG4gICAgfVxuICAgIHZhciBwYXJhbWV0ZXJLZXlzID0gT2JqZWN0LmtleXModGhpcy5wYXJhbWV0ZXJzKTtcbiAgICBpZiAocGFyYW1ldGVyS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgcGFyYW1ldGVycyA9IFtdO1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgcGFyYW1ldGVyS2V5cy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGEubG9jYWxlQ29tcGFyZShiKTtcbiAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICBwYXJhbWV0ZXJzLnB1c2goZWxlbWVudCArIFwiPVwiICsgd3JhcFF1b3Rlcyh0aGF0LnBhcmFtZXRlcnNbZWxlbWVudF0pKTtcbiAgICAgIH0pO1xuICAgICAgc3RyID0gc3RyICsgXCI7XCIgKyBwYXJhbWV0ZXJzLmpvaW4oXCI7XCIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyO1xufTtcblxudmFyIHdyYXBRdW90ZXMgPSBmdW5jdGlvbihzdHIpIHtcbiAgcmV0dXJuIChzdHIuaW5kZXhPZihcIjtcIikgPiAtMSkgPyAnXCInICsgc3RyICsgJ1wiJyA6IHN0cjtcbn07XG5cbnZhciB1bndyYXBRdW90ZXMgPSBmdW5jdGlvbihzdHIpIHtcbiAgcmV0dXJuIChzdHIuc3Vic3RyKDAsIDEpID09PSAnXCInICYmIHN0ci5zdWJzdHIoLTEpID09PSAnXCInKSA/IHN0ci5zdWJzdHIoMSwgc3RyLmxlbmd0aCAtIDIpIDogc3RyO1xufTtcblxudmFyIG1lZGlhVHlwZU1hdGNoZXIgPSAvXihhcHBsaWNhdGlvbnxhdWRpb3xpbWFnZXxtZXNzYWdlfG1vZGVsfG11bHRpcGFydHx0ZXh0fHZpZGVvfFxcKilcXC8oW2EtekEtWjAtOSEjJCVeJlxcKl9cXC1cXCt7fVxcfCcuYH5dezEsMTI3fSkoOy4qKT8kLztcblxudmFyIHBhcmFtZXRlclNwbGl0dGVyID0gLzsoPz0oPzpbXlxcXCJdKlxcXCJbXlxcXCJdKlxcXCIpKig/IVteXFxcIl0qXFxcIikpLztcblxuZXhwb3J0cy5mcm9tU3RyaW5nID0gZnVuY3Rpb24oc3RyKSB7XG4gIHZhciBtZWRpYVR5cGUgPSBuZXcgTWVkaWFUeXBlKCk7XG4gIGlmIChzdHIpIHtcbiAgICB2YXIgbWF0Y2ggPSBzdHIubWF0Y2gobWVkaWFUeXBlTWF0Y2hlcik7XG4gICAgaWYgKG1hdGNoICYmICEobWF0Y2hbMV0gPT09ICcqJyAmJiBtYXRjaFsyXSAhPT0gJyonKSkgeyBcbiAgICAgIG1lZGlhVHlwZS50eXBlID0gbWF0Y2hbMV07XG4gICAgICBtZWRpYVR5cGUuX3NldFN1YnR5cGVBbmRTdWZmaXgobWF0Y2hbMl0pO1xuICAgICAgaWYgKG1hdGNoWzNdKSB7XG4gICAgICAgIG1hdGNoWzNdLnN1YnN0cigxKS5zcGxpdChwYXJhbWV0ZXJTcGxpdHRlcikuZm9yRWFjaChmdW5jdGlvbihwYXJhbWV0ZXIpIHtcbiAgICAgICAgICB2YXIga2V5QW5kVmFsdWUgPSBwYXJhbWV0ZXIuc3BsaXQoJz0nLCAyKTtcbiAgICAgICAgICBpZiAoa2V5QW5kVmFsdWUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBtZWRpYVR5cGUucGFyYW1ldGVyc1trZXlBbmRWYWx1ZVswXS50b0xvd2VyQ2FzZSgpLnRyaW0oKV0gPSB1bndyYXBRdW90ZXMoa2V5QW5kVmFsdWVbMV0udHJpbSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbWVkaWFUeXBlO1xufTtcbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgaXNBcmdzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpO1xuXG52YXIgb3JpZ0tleXMgPSBPYmplY3Qua2V5cztcbnZhciBrZXlzU2hpbSA9IG9yaWdLZXlzID8gZnVuY3Rpb24ga2V5cyhvKSB7IHJldHVybiBvcmlnS2V5cyhvKTsgfSA6IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxudmFyIG9yaWdpbmFsS2V5cyA9IE9iamVjdC5rZXlzO1xuXG5rZXlzU2hpbS5zaGltID0gZnVuY3Rpb24gc2hpbU9iamVjdEtleXMoKSB7XG5cdGlmIChPYmplY3Qua2V5cykge1xuXHRcdHZhciBrZXlzV29ya3NXaXRoQXJndW1lbnRzID0gKGZ1bmN0aW9uICgpIHtcblx0XHRcdC8vIFNhZmFyaSA1LjAgYnVnXG5cdFx0XHR2YXIgYXJncyA9IE9iamVjdC5rZXlzKGFyZ3VtZW50cyk7XG5cdFx0XHRyZXR1cm4gYXJncyAmJiBhcmdzLmxlbmd0aCA9PT0gYXJndW1lbnRzLmxlbmd0aDtcblx0XHR9KDEsIDIpKTtcblx0XHRpZiAoIWtleXNXb3Jrc1dpdGhBcmd1bWVudHMpIHtcblx0XHRcdE9iamVjdC5rZXlzID0gZnVuY3Rpb24ga2V5cyhvYmplY3QpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBmdW5jLW5hbWUtbWF0Y2hpbmdcblx0XHRcdFx0aWYgKGlzQXJncyhvYmplY3QpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9yaWdpbmFsS2V5cyhzbGljZS5jYWxsKG9iamVjdCkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMob2JqZWN0KTtcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdE9iamVjdC5rZXlzID0ga2V5c1NoaW07XG5cdH1cblx0cmV0dXJuIE9iamVjdC5rZXlzIHx8IGtleXNTaGltO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzU2hpbTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0FyZ3VtZW50cyh2YWx1ZSkge1xuXHR2YXIgc3RyID0gdG9TdHIuY2FsbCh2YWx1ZSk7XG5cdHZhciBpc0FyZ3MgPSBzdHIgPT09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXHRpZiAoIWlzQXJncykge1xuXHRcdGlzQXJncyA9IHN0ciAhPT0gJ1tvYmplY3QgQXJyYXldJyAmJlxuXHRcdFx0dmFsdWUgIT09IG51bGwgJiZcblx0XHRcdHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcblx0XHRcdHR5cGVvZiB2YWx1ZS5sZW5ndGggPT09ICdudW1iZXInICYmXG5cdFx0XHR2YWx1ZS5sZW5ndGggPj0gMCAmJlxuXHRcdFx0dG9TdHIuY2FsbCh2YWx1ZS5jYWxsZWUpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHR9XG5cdHJldHVybiBpc0FyZ3M7XG59O1xuIiwidmFyIHRyaW0gPSByZXF1aXJlKCdzdHJpbmcucHJvdG90eXBlLnRyaW0nKVxuICAsIGZvckVhY2ggPSByZXF1aXJlKCdmb3ItZWFjaCcpXG4gICwgaXNBcnJheSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGVhZGVycykge1xuICBpZiAoIWhlYWRlcnMpXG4gICAgcmV0dXJuIHt9XG5cbiAgdmFyIHJlc3VsdCA9IHt9XG5cbiAgZm9yRWFjaChcbiAgICAgIHRyaW0oaGVhZGVycykuc3BsaXQoJ1xcbicpXG4gICAgLCBmdW5jdGlvbiAocm93KSB7XG4gICAgICAgIHZhciBpbmRleCA9IHJvdy5pbmRleE9mKCc6JylcbiAgICAgICAgICAsIGtleSA9IHRyaW0ocm93LnNsaWNlKDAsIGluZGV4KSkudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICwgdmFsdWUgPSB0cmltKHJvdy5zbGljZShpbmRleCArIDEpKVxuXG4gICAgICAgIGlmICh0eXBlb2YocmVzdWx0W2tleV0pID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWVcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KHJlc3VsdFtrZXldKSkge1xuICAgICAgICAgIHJlc3VsdFtrZXldLnB1c2godmFsdWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBbIHJlc3VsdFtrZXldLCB2YWx1ZSBdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgKVxuXG4gIHJldHVybiByZXN1bHRcbn1cbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLyoqIVxuICogQGZpbGVPdmVydmlldyBLaWNrYXNzIGxpYnJhcnkgdG8gY3JlYXRlIGFuZCBwbGFjZSBwb3BwZXJzIG5lYXIgdGhlaXIgcmVmZXJlbmNlIGVsZW1lbnRzLlxuICogQHZlcnNpb24gMS4xNS4wXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE2IEZlZGVyaWNvIFppdm9sbyBhbmQgY29udHJpYnV0b3JzXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xudmFyIGlzQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbnZhciBsb25nZXJUaW1lb3V0QnJvd3NlcnMgPSBbJ0VkZ2UnLCAnVHJpZGVudCcsICdGaXJlZm94J107XG52YXIgdGltZW91dER1cmF0aW9uID0gMDtcbmZvciAodmFyIGkgPSAwOyBpIDwgbG9uZ2VyVGltZW91dEJyb3dzZXJzLmxlbmd0aDsgaSArPSAxKSB7XG4gIGlmIChpc0Jyb3dzZXIgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKGxvbmdlclRpbWVvdXRCcm93c2Vyc1tpXSkgPj0gMCkge1xuICAgIHRpbWVvdXREdXJhdGlvbiA9IDE7XG4gICAgYnJlYWs7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWljcm90YXNrRGVib3VuY2UoZm4pIHtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmIChjYWxsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2FsbGVkID0gdHJ1ZTtcbiAgICB3aW5kb3cuUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsZWQgPSBmYWxzZTtcbiAgICAgIGZuKCk7XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRhc2tEZWJvdW5jZShmbikge1xuICB2YXIgc2NoZWR1bGVkID0gZmFsc2U7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFzY2hlZHVsZWQpIHtcbiAgICAgIHNjaGVkdWxlZCA9IHRydWU7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2NoZWR1bGVkID0gZmFsc2U7XG4gICAgICAgIGZuKCk7XG4gICAgICB9LCB0aW1lb3V0RHVyYXRpb24pO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIHN1cHBvcnRzTWljcm9UYXNrcyA9IGlzQnJvd3NlciAmJiB3aW5kb3cuUHJvbWlzZTtcblxuLyoqXG4qIENyZWF0ZSBhIGRlYm91bmNlZCB2ZXJzaW9uIG9mIGEgbWV0aG9kLCB0aGF0J3MgYXN5bmNocm9ub3VzbHkgZGVmZXJyZWRcbiogYnV0IGNhbGxlZCBpbiB0aGUgbWluaW11bSB0aW1lIHBvc3NpYmxlLlxuKlxuKiBAbWV0aG9kXG4qIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiogQGFyZ3VtZW50IHtGdW5jdGlvbn0gZm5cbiogQHJldHVybnMge0Z1bmN0aW9ufVxuKi9cbnZhciBkZWJvdW5jZSA9IHN1cHBvcnRzTWljcm9UYXNrcyA/IG1pY3JvdGFza0RlYm91bmNlIDogdGFza0RlYm91bmNlO1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBnaXZlbiB2YXJpYWJsZSBpcyBhIGZ1bmN0aW9uXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0FueX0gZnVuY3Rpb25Ub0NoZWNrIC0gdmFyaWFibGUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtCb29sZWFufSBhbnN3ZXIgdG86IGlzIGEgZnVuY3Rpb24/XG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oZnVuY3Rpb25Ub0NoZWNrKSB7XG4gIHZhciBnZXRUeXBlID0ge307XG4gIHJldHVybiBmdW5jdGlvblRvQ2hlY2sgJiYgZ2V0VHlwZS50b1N0cmluZy5jYWxsKGZ1bmN0aW9uVG9DaGVjaykgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5cbi8qKlxuICogR2V0IENTUyBjb21wdXRlZCBwcm9wZXJ0eSBvZiB0aGUgZ2l2ZW4gZWxlbWVudFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFZW1lbnR9IGVsZW1lbnRcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBwcm9wZXJ0eVxuICovXG5mdW5jdGlvbiBnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkoZWxlbWVudCwgcHJvcGVydHkpIHtcbiAgaWYgKGVsZW1lbnQubm9kZVR5cGUgIT09IDEpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgLy8gTk9URTogMSBET00gYWNjZXNzIGhlcmVcbiAgdmFyIHdpbmRvdyA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcbiAgdmFyIGNzcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIG51bGwpO1xuICByZXR1cm4gcHJvcGVydHkgPyBjc3NbcHJvcGVydHldIDogY3NzO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBhcmVudE5vZGUgb3IgdGhlIGhvc3Qgb2YgdGhlIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0VsZW1lbnR9IHBhcmVudFxuICovXG5mdW5jdGlvbiBnZXRQYXJlbnROb2RlKGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQubm9kZU5hbWUgPT09ICdIVE1MJykge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG4gIHJldHVybiBlbGVtZW50LnBhcmVudE5vZGUgfHwgZWxlbWVudC5ob3N0O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHNjcm9sbGluZyBwYXJlbnQgb2YgdGhlIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0VsZW1lbnR9IHNjcm9sbCBwYXJlbnRcbiAqL1xuZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KGVsZW1lbnQpIHtcbiAgLy8gUmV0dXJuIGJvZHksIGBnZXRTY3JvbGxgIHdpbGwgdGFrZSBjYXJlIHRvIGdldCB0aGUgY29ycmVjdCBgc2Nyb2xsVG9wYCBmcm9tIGl0XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiBkb2N1bWVudC5ib2R5O1xuICB9XG5cbiAgc3dpdGNoIChlbGVtZW50Lm5vZGVOYW1lKSB7XG4gICAgY2FzZSAnSFRNTCc6XG4gICAgY2FzZSAnQk9EWSc6XG4gICAgICByZXR1cm4gZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHk7XG4gICAgY2FzZSAnI2RvY3VtZW50JzpcbiAgICAgIHJldHVybiBlbGVtZW50LmJvZHk7XG4gIH1cblxuICAvLyBGaXJlZm94IHdhbnQgdXMgdG8gY2hlY2sgYC14YCBhbmQgYC15YCB2YXJpYXRpb25zIGFzIHdlbGxcblxuICB2YXIgX2dldFN0eWxlQ29tcHV0ZWRQcm9wID0gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGVsZW1lbnQpLFxuICAgICAgb3ZlcmZsb3cgPSBfZ2V0U3R5bGVDb21wdXRlZFByb3Aub3ZlcmZsb3csXG4gICAgICBvdmVyZmxvd1ggPSBfZ2V0U3R5bGVDb21wdXRlZFByb3Aub3ZlcmZsb3dYLFxuICAgICAgb3ZlcmZsb3dZID0gX2dldFN0eWxlQ29tcHV0ZWRQcm9wLm92ZXJmbG93WTtcblxuICBpZiAoLyhhdXRvfHNjcm9sbHxvdmVybGF5KS8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCkpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiBnZXRTY3JvbGxQYXJlbnQoZ2V0UGFyZW50Tm9kZShlbGVtZW50KSk7XG59XG5cbnZhciBpc0lFMTEgPSBpc0Jyb3dzZXIgJiYgISEod2luZG93Lk1TSW5wdXRNZXRob2RDb250ZXh0ICYmIGRvY3VtZW50LmRvY3VtZW50TW9kZSk7XG52YXIgaXNJRTEwID0gaXNCcm93c2VyICYmIC9NU0lFIDEwLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGJyb3dzZXIgaXMgSW50ZXJuZXQgRXhwbG9yZXJcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7TnVtYmVyfSB2ZXJzaW9uIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gaXNJRVxuICovXG5mdW5jdGlvbiBpc0lFKHZlcnNpb24pIHtcbiAgaWYgKHZlcnNpb24gPT09IDExKSB7XG4gICAgcmV0dXJuIGlzSUUxMTtcbiAgfVxuICBpZiAodmVyc2lvbiA9PT0gMTApIHtcbiAgICByZXR1cm4gaXNJRTEwO1xuICB9XG4gIHJldHVybiBpc0lFMTEgfHwgaXNJRTEwO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG9mZnNldCBwYXJlbnQgb2YgdGhlIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0VsZW1lbnR9IG9mZnNldCBwYXJlbnRcbiAqL1xuZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfVxuXG4gIHZhciBub09mZnNldFBhcmVudCA9IGlzSUUoMTApID8gZG9jdW1lbnQuYm9keSA6IG51bGw7XG5cbiAgLy8gTk9URTogMSBET00gYWNjZXNzIGhlcmVcbiAgdmFyIG9mZnNldFBhcmVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50IHx8IG51bGw7XG4gIC8vIFNraXAgaGlkZGVuIGVsZW1lbnRzIHdoaWNoIGRvbid0IGhhdmUgYW4gb2Zmc2V0UGFyZW50XG4gIHdoaWxlIChvZmZzZXRQYXJlbnQgPT09IG5vT2Zmc2V0UGFyZW50ICYmIGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKSB7XG4gICAgb2Zmc2V0UGFyZW50ID0gKGVsZW1lbnQgPSBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZykub2Zmc2V0UGFyZW50O1xuICB9XG5cbiAgdmFyIG5vZGVOYW1lID0gb2Zmc2V0UGFyZW50ICYmIG9mZnNldFBhcmVudC5ub2RlTmFtZTtcblxuICBpZiAoIW5vZGVOYW1lIHx8IG5vZGVOYW1lID09PSAnQk9EWScgfHwgbm9kZU5hbWUgPT09ICdIVE1MJykge1xuICAgIHJldHVybiBlbGVtZW50ID8gZWxlbWVudC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfVxuXG4gIC8vIC5vZmZzZXRQYXJlbnQgd2lsbCByZXR1cm4gdGhlIGNsb3Nlc3QgVEgsIFREIG9yIFRBQkxFIGluIGNhc2VcbiAgLy8gbm8gb2Zmc2V0UGFyZW50IGlzIHByZXNlbnQsIEkgaGF0ZSB0aGlzIGpvYi4uLlxuICBpZiAoWydUSCcsICdURCcsICdUQUJMRSddLmluZGV4T2Yob2Zmc2V0UGFyZW50Lm5vZGVOYW1lKSAhPT0gLTEgJiYgZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KG9mZnNldFBhcmVudCwgJ3Bvc2l0aW9uJykgPT09ICdzdGF0aWMnKSB7XG4gICAgcmV0dXJuIGdldE9mZnNldFBhcmVudChvZmZzZXRQYXJlbnQpO1xuICB9XG5cbiAgcmV0dXJuIG9mZnNldFBhcmVudDtcbn1cblxuZnVuY3Rpb24gaXNPZmZzZXRDb250YWluZXIoZWxlbWVudCkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lO1xuXG4gIGlmIChub2RlTmFtZSA9PT0gJ0JPRFknKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBub2RlTmFtZSA9PT0gJ0hUTUwnIHx8IGdldE9mZnNldFBhcmVudChlbGVtZW50LmZpcnN0RWxlbWVudENoaWxkKSA9PT0gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgcm9vdCBub2RlIChkb2N1bWVudCwgc2hhZG93RE9NIHJvb3QpIG9mIHRoZSBnaXZlbiBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IG5vZGVcbiAqIEByZXR1cm5zIHtFbGVtZW50fSByb290IG5vZGVcbiAqL1xuZnVuY3Rpb24gZ2V0Um9vdChub2RlKSB7XG4gIGlmIChub2RlLnBhcmVudE5vZGUgIT09IG51bGwpIHtcbiAgICByZXR1cm4gZ2V0Um9vdChub2RlLnBhcmVudE5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIG9mZnNldCBwYXJlbnQgY29tbW9uIHRvIHRoZSB0d28gcHJvdmlkZWQgbm9kZXNcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudDFcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudDJcbiAqIEByZXR1cm5zIHtFbGVtZW50fSBjb21tb24gb2Zmc2V0IHBhcmVudFxuICovXG5mdW5jdGlvbiBmaW5kQ29tbW9uT2Zmc2V0UGFyZW50KGVsZW1lbnQxLCBlbGVtZW50Mikge1xuICAvLyBUaGlzIGNoZWNrIGlzIG5lZWRlZCB0byBhdm9pZCBlcnJvcnMgaW4gY2FzZSBvbmUgb2YgdGhlIGVsZW1lbnRzIGlzbid0IGRlZmluZWQgZm9yIGFueSByZWFzb25cbiAgaWYgKCFlbGVtZW50MSB8fCAhZWxlbWVudDEubm9kZVR5cGUgfHwgIWVsZW1lbnQyIHx8ICFlbGVtZW50Mi5ub2RlVHlwZSkge1xuICAgIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIH1cblxuICAvLyBIZXJlIHdlIG1ha2Ugc3VyZSB0byBnaXZlIGFzIFwic3RhcnRcIiB0aGUgZWxlbWVudCB0aGF0IGNvbWVzIGZpcnN0IGluIHRoZSBET01cbiAgdmFyIG9yZGVyID0gZWxlbWVudDEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZWxlbWVudDIpICYgTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkc7XG4gIHZhciBzdGFydCA9IG9yZGVyID8gZWxlbWVudDEgOiBlbGVtZW50MjtcbiAgdmFyIGVuZCA9IG9yZGVyID8gZWxlbWVudDIgOiBlbGVtZW50MTtcblxuICAvLyBHZXQgY29tbW9uIGFuY2VzdG9yIGNvbnRhaW5lclxuICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICByYW5nZS5zZXRTdGFydChzdGFydCwgMCk7XG4gIHJhbmdlLnNldEVuZChlbmQsIDApO1xuICB2YXIgY29tbW9uQW5jZXN0b3JDb250YWluZXIgPSByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtcblxuICAvLyBCb3RoIG5vZGVzIGFyZSBpbnNpZGUgI2RvY3VtZW50XG5cbiAgaWYgKGVsZW1lbnQxICE9PSBjb21tb25BbmNlc3RvckNvbnRhaW5lciAmJiBlbGVtZW50MiAhPT0gY29tbW9uQW5jZXN0b3JDb250YWluZXIgfHwgc3RhcnQuY29udGFpbnMoZW5kKSkge1xuICAgIGlmIChpc09mZnNldENvbnRhaW5lcihjb21tb25BbmNlc3RvckNvbnRhaW5lcikpIHtcbiAgICAgIHJldHVybiBjb21tb25BbmNlc3RvckNvbnRhaW5lcjtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0T2Zmc2V0UGFyZW50KGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKTtcbiAgfVxuXG4gIC8vIG9uZSBvZiB0aGUgbm9kZXMgaXMgaW5zaWRlIHNoYWRvd0RPTSwgZmluZCB3aGljaCBvbmVcbiAgdmFyIGVsZW1lbnQxcm9vdCA9IGdldFJvb3QoZWxlbWVudDEpO1xuICBpZiAoZWxlbWVudDFyb290Lmhvc3QpIHtcbiAgICByZXR1cm4gZmluZENvbW1vbk9mZnNldFBhcmVudChlbGVtZW50MXJvb3QuaG9zdCwgZWxlbWVudDIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmaW5kQ29tbW9uT2Zmc2V0UGFyZW50KGVsZW1lbnQxLCBnZXRSb290KGVsZW1lbnQyKS5ob3N0KTtcbiAgfVxufVxuXG4vKipcbiAqIEdldHMgdGhlIHNjcm9sbCB2YWx1ZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudCBpbiB0aGUgZ2l2ZW4gc2lkZSAodG9wIGFuZCBsZWZ0KVxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50XG4gKiBAYXJndW1lbnQge1N0cmluZ30gc2lkZSBgdG9wYCBvciBgbGVmdGBcbiAqIEByZXR1cm5zIHtudW1iZXJ9IGFtb3VudCBvZiBzY3JvbGxlZCBwaXhlbHNcbiAqL1xuZnVuY3Rpb24gZ2V0U2Nyb2xsKGVsZW1lbnQpIHtcbiAgdmFyIHNpZGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICd0b3AnO1xuXG4gIHZhciB1cHBlclNpZGUgPSBzaWRlID09PSAndG9wJyA/ICdzY3JvbGxUb3AnIDogJ3Njcm9sbExlZnQnO1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lO1xuXG4gIGlmIChub2RlTmFtZSA9PT0gJ0JPRFknIHx8IG5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICB2YXIgaHRtbCA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgdmFyIHNjcm9sbGluZ0VsZW1lbnQgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCB8fCBodG1sO1xuICAgIHJldHVybiBzY3JvbGxpbmdFbGVtZW50W3VwcGVyU2lkZV07XG4gIH1cblxuICByZXR1cm4gZWxlbWVudFt1cHBlclNpZGVdO1xufVxuXG4vKlxuICogU3VtIG9yIHN1YnRyYWN0IHRoZSBlbGVtZW50IHNjcm9sbCB2YWx1ZXMgKGxlZnQgYW5kIHRvcCkgZnJvbSBhIGdpdmVuIHJlY3Qgb2JqZWN0XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge09iamVjdH0gcmVjdCAtIFJlY3Qgb2JqZWN0IHlvdSB3YW50IHRvIGNoYW5nZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIFRoZSBlbGVtZW50IGZyb20gdGhlIGZ1bmN0aW9uIHJlYWRzIHRoZSBzY3JvbGwgdmFsdWVzXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHN1YnRyYWN0IC0gc2V0IHRvIHRydWUgaWYgeW91IHdhbnQgdG8gc3VidHJhY3QgdGhlIHNjcm9sbCB2YWx1ZXNcbiAqIEByZXR1cm4ge09iamVjdH0gcmVjdCAtIFRoZSBtb2RpZmllciByZWN0IG9iamVjdFxuICovXG5mdW5jdGlvbiBpbmNsdWRlU2Nyb2xsKHJlY3QsIGVsZW1lbnQpIHtcbiAgdmFyIHN1YnRyYWN0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcblxuICB2YXIgc2Nyb2xsVG9wID0gZ2V0U2Nyb2xsKGVsZW1lbnQsICd0b3AnKTtcbiAgdmFyIHNjcm9sbExlZnQgPSBnZXRTY3JvbGwoZWxlbWVudCwgJ2xlZnQnKTtcbiAgdmFyIG1vZGlmaWVyID0gc3VidHJhY3QgPyAtMSA6IDE7XG4gIHJlY3QudG9wICs9IHNjcm9sbFRvcCAqIG1vZGlmaWVyO1xuICByZWN0LmJvdHRvbSArPSBzY3JvbGxUb3AgKiBtb2RpZmllcjtcbiAgcmVjdC5sZWZ0ICs9IHNjcm9sbExlZnQgKiBtb2RpZmllcjtcbiAgcmVjdC5yaWdodCArPSBzY3JvbGxMZWZ0ICogbW9kaWZpZXI7XG4gIHJldHVybiByZWN0O1xufVxuXG4vKlxuICogSGVscGVyIHRvIGRldGVjdCBib3JkZXJzIG9mIGEgZ2l2ZW4gZWxlbWVudFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHtDU1NTdHlsZURlY2xhcmF0aW9ufSBzdHlsZXNcbiAqIFJlc3VsdCBvZiBgZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5YCBvbiB0aGUgZ2l2ZW4gZWxlbWVudFxuICogQHBhcmFtIHtTdHJpbmd9IGF4aXMgLSBgeGAgb3IgYHlgXG4gKiBAcmV0dXJuIHtudW1iZXJ9IGJvcmRlcnMgLSBUaGUgYm9yZGVycyBzaXplIG9mIHRoZSBnaXZlbiBheGlzXG4gKi9cblxuZnVuY3Rpb24gZ2V0Qm9yZGVyc1NpemUoc3R5bGVzLCBheGlzKSB7XG4gIHZhciBzaWRlQSA9IGF4aXMgPT09ICd4JyA/ICdMZWZ0JyA6ICdUb3AnO1xuICB2YXIgc2lkZUIgPSBzaWRlQSA9PT0gJ0xlZnQnID8gJ1JpZ2h0JyA6ICdCb3R0b20nO1xuXG4gIHJldHVybiBwYXJzZUZsb2F0KHN0eWxlc1snYm9yZGVyJyArIHNpZGVBICsgJ1dpZHRoJ10sIDEwKSArIHBhcnNlRmxvYXQoc3R5bGVzWydib3JkZXInICsgc2lkZUIgKyAnV2lkdGgnXSwgMTApO1xufVxuXG5mdW5jdGlvbiBnZXRTaXplKGF4aXMsIGJvZHksIGh0bWwsIGNvbXB1dGVkU3R5bGUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KGJvZHlbJ29mZnNldCcgKyBheGlzXSwgYm9keVsnc2Nyb2xsJyArIGF4aXNdLCBodG1sWydjbGllbnQnICsgYXhpc10sIGh0bWxbJ29mZnNldCcgKyBheGlzXSwgaHRtbFsnc2Nyb2xsJyArIGF4aXNdLCBpc0lFKDEwKSA/IHBhcnNlSW50KGh0bWxbJ29mZnNldCcgKyBheGlzXSkgKyBwYXJzZUludChjb21wdXRlZFN0eWxlWydtYXJnaW4nICsgKGF4aXMgPT09ICdIZWlnaHQnID8gJ1RvcCcgOiAnTGVmdCcpXSkgKyBwYXJzZUludChjb21wdXRlZFN0eWxlWydtYXJnaW4nICsgKGF4aXMgPT09ICdIZWlnaHQnID8gJ0JvdHRvbScgOiAnUmlnaHQnKV0pIDogMCk7XG59XG5cbmZ1bmN0aW9uIGdldFdpbmRvd1NpemVzKGRvY3VtZW50KSB7XG4gIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgdmFyIGh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIHZhciBjb21wdXRlZFN0eWxlID0gaXNJRSgxMCkgJiYgZ2V0Q29tcHV0ZWRTdHlsZShodG1sKTtcblxuICByZXR1cm4ge1xuICAgIGhlaWdodDogZ2V0U2l6ZSgnSGVpZ2h0JywgYm9keSwgaHRtbCwgY29tcHV0ZWRTdHlsZSksXG4gICAgd2lkdGg6IGdldFNpemUoJ1dpZHRoJywgYm9keSwgaHRtbCwgY29tcHV0ZWRTdHlsZSlcbiAgfTtcbn1cblxudmFyIGNsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn07XG5cbnZhciBjcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfTtcbn0oKTtcblxuXG5cblxuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59O1xuXG4vKipcbiAqIEdpdmVuIGVsZW1lbnQgb2Zmc2V0cywgZ2VuZXJhdGUgYW4gb3V0cHV0IHNpbWlsYXIgdG8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge09iamVjdH0gb2Zmc2V0c1xuICogQHJldHVybnMge09iamVjdH0gQ2xpZW50UmVjdCBsaWtlIG91dHB1dFxuICovXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0KG9mZnNldHMpIHtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvZmZzZXRzLCB7XG4gICAgcmlnaHQ6IG9mZnNldHMubGVmdCArIG9mZnNldHMud2lkdGgsXG4gICAgYm90dG9tOiBvZmZzZXRzLnRvcCArIG9mZnNldHMuaGVpZ2h0XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBib3VuZGluZyBjbGllbnQgcmVjdCBvZiBnaXZlbiBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHtPYmplY3R9IGNsaWVudCByZWN0XG4gKi9cbmZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50KSB7XG4gIHZhciByZWN0ID0ge307XG5cbiAgLy8gSUUxMCAxMCBGSVg6IFBsZWFzZSwgZG9uJ3QgYXNrLCB0aGUgZWxlbWVudCBpc24ndFxuICAvLyBjb25zaWRlcmVkIGluIERPTSBpbiBzb21lIGNpcmN1bXN0YW5jZXMuLi5cbiAgLy8gVGhpcyBpc24ndCByZXByb2R1Y2libGUgaW4gSUUxMCBjb21wYXRpYmlsaXR5IG1vZGUgb2YgSUUxMVxuICB0cnkge1xuICAgIGlmIChpc0lFKDEwKSkge1xuICAgICAgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB2YXIgc2Nyb2xsVG9wID0gZ2V0U2Nyb2xsKGVsZW1lbnQsICd0b3AnKTtcbiAgICAgIHZhciBzY3JvbGxMZWZ0ID0gZ2V0U2Nyb2xsKGVsZW1lbnQsICdsZWZ0Jyk7XG4gICAgICByZWN0LnRvcCArPSBzY3JvbGxUb3A7XG4gICAgICByZWN0LmxlZnQgKz0gc2Nyb2xsTGVmdDtcbiAgICAgIHJlY3QuYm90dG9tICs9IHNjcm9sbFRvcDtcbiAgICAgIHJlY3QucmlnaHQgKz0gc2Nyb2xsTGVmdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSB7XG4gICAgbGVmdDogcmVjdC5sZWZ0LFxuICAgIHRvcDogcmVjdC50b3AsXG4gICAgd2lkdGg6IHJlY3QucmlnaHQgLSByZWN0LmxlZnQsXG4gICAgaGVpZ2h0OiByZWN0LmJvdHRvbSAtIHJlY3QudG9wXG4gIH07XG5cbiAgLy8gc3VidHJhY3Qgc2Nyb2xsYmFyIHNpemUgZnJvbSBzaXplc1xuICB2YXIgc2l6ZXMgPSBlbGVtZW50Lm5vZGVOYW1lID09PSAnSFRNTCcgPyBnZXRXaW5kb3dTaXplcyhlbGVtZW50Lm93bmVyRG9jdW1lbnQpIDoge307XG4gIHZhciB3aWR0aCA9IHNpemVzLndpZHRoIHx8IGVsZW1lbnQuY2xpZW50V2lkdGggfHwgcmVzdWx0LnJpZ2h0IC0gcmVzdWx0LmxlZnQ7XG4gIHZhciBoZWlnaHQgPSBzaXplcy5oZWlnaHQgfHwgZWxlbWVudC5jbGllbnRIZWlnaHQgfHwgcmVzdWx0LmJvdHRvbSAtIHJlc3VsdC50b3A7XG5cbiAgdmFyIGhvcml6U2Nyb2xsYmFyID0gZWxlbWVudC5vZmZzZXRXaWR0aCAtIHdpZHRoO1xuICB2YXIgdmVydFNjcm9sbGJhciA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gaGVpZ2h0O1xuXG4gIC8vIGlmIGFuIGh5cG90aGV0aWNhbCBzY3JvbGxiYXIgaXMgZGV0ZWN0ZWQsIHdlIG11c3QgYmUgc3VyZSBpdCdzIG5vdCBhIGBib3JkZXJgXG4gIC8vIHdlIG1ha2UgdGhpcyBjaGVjayBjb25kaXRpb25hbCBmb3IgcGVyZm9ybWFuY2UgcmVhc29uc1xuICBpZiAoaG9yaXpTY3JvbGxiYXIgfHwgdmVydFNjcm9sbGJhcikge1xuICAgIHZhciBzdHlsZXMgPSBnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkoZWxlbWVudCk7XG4gICAgaG9yaXpTY3JvbGxiYXIgLT0gZ2V0Qm9yZGVyc1NpemUoc3R5bGVzLCAneCcpO1xuICAgIHZlcnRTY3JvbGxiYXIgLT0gZ2V0Qm9yZGVyc1NpemUoc3R5bGVzLCAneScpO1xuXG4gICAgcmVzdWx0LndpZHRoIC09IGhvcml6U2Nyb2xsYmFyO1xuICAgIHJlc3VsdC5oZWlnaHQgLT0gdmVydFNjcm9sbGJhcjtcbiAgfVxuXG4gIHJldHVybiBnZXRDbGllbnRSZWN0KHJlc3VsdCk7XG59XG5cbmZ1bmN0aW9uIGdldE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJiaXRyYXJ5Tm9kZShjaGlsZHJlbiwgcGFyZW50KSB7XG4gIHZhciBmaXhlZFBvc2l0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcblxuICB2YXIgaXNJRTEwID0gaXNJRSgxMCk7XG4gIHZhciBpc0hUTUwgPSBwYXJlbnQubm9kZU5hbWUgPT09ICdIVE1MJztcbiAgdmFyIGNoaWxkcmVuUmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChjaGlsZHJlbik7XG4gIHZhciBwYXJlbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHBhcmVudCk7XG4gIHZhciBzY3JvbGxQYXJlbnQgPSBnZXRTY3JvbGxQYXJlbnQoY2hpbGRyZW4pO1xuXG4gIHZhciBzdHlsZXMgPSBnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkocGFyZW50KTtcbiAgdmFyIGJvcmRlclRvcFdpZHRoID0gcGFyc2VGbG9hdChzdHlsZXMuYm9yZGVyVG9wV2lkdGgsIDEwKTtcbiAgdmFyIGJvcmRlckxlZnRXaWR0aCA9IHBhcnNlRmxvYXQoc3R5bGVzLmJvcmRlckxlZnRXaWR0aCwgMTApO1xuXG4gIC8vIEluIGNhc2VzIHdoZXJlIHRoZSBwYXJlbnQgaXMgZml4ZWQsIHdlIG11c3QgaWdub3JlIG5lZ2F0aXZlIHNjcm9sbCBpbiBvZmZzZXQgY2FsY1xuICBpZiAoZml4ZWRQb3NpdGlvbiAmJiBpc0hUTUwpIHtcbiAgICBwYXJlbnRSZWN0LnRvcCA9IE1hdGgubWF4KHBhcmVudFJlY3QudG9wLCAwKTtcbiAgICBwYXJlbnRSZWN0LmxlZnQgPSBNYXRoLm1heChwYXJlbnRSZWN0LmxlZnQsIDApO1xuICB9XG4gIHZhciBvZmZzZXRzID0gZ2V0Q2xpZW50UmVjdCh7XG4gICAgdG9wOiBjaGlsZHJlblJlY3QudG9wIC0gcGFyZW50UmVjdC50b3AgLSBib3JkZXJUb3BXaWR0aCxcbiAgICBsZWZ0OiBjaGlsZHJlblJlY3QubGVmdCAtIHBhcmVudFJlY3QubGVmdCAtIGJvcmRlckxlZnRXaWR0aCxcbiAgICB3aWR0aDogY2hpbGRyZW5SZWN0LndpZHRoLFxuICAgIGhlaWdodDogY2hpbGRyZW5SZWN0LmhlaWdodFxuICB9KTtcbiAgb2Zmc2V0cy5tYXJnaW5Ub3AgPSAwO1xuICBvZmZzZXRzLm1hcmdpbkxlZnQgPSAwO1xuXG4gIC8vIFN1YnRyYWN0IG1hcmdpbnMgb2YgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgaXQncyBiZWluZyB1c2VkIGFzIHBhcmVudFxuICAvLyB3ZSBkbyB0aGlzIG9ubHkgb24gSFRNTCBiZWNhdXNlIGl0J3MgdGhlIG9ubHkgZWxlbWVudCB0aGF0IGJlaGF2ZXNcbiAgLy8gZGlmZmVyZW50bHkgd2hlbiBtYXJnaW5zIGFyZSBhcHBsaWVkIHRvIGl0LiBUaGUgbWFyZ2lucyBhcmUgaW5jbHVkZWQgaW5cbiAgLy8gdGhlIGJveCBvZiB0aGUgZG9jdW1lbnRFbGVtZW50LCBpbiB0aGUgb3RoZXIgY2FzZXMgbm90LlxuICBpZiAoIWlzSUUxMCAmJiBpc0hUTUwpIHtcbiAgICB2YXIgbWFyZ2luVG9wID0gcGFyc2VGbG9hdChzdHlsZXMubWFyZ2luVG9wLCAxMCk7XG4gICAgdmFyIG1hcmdpbkxlZnQgPSBwYXJzZUZsb2F0KHN0eWxlcy5tYXJnaW5MZWZ0LCAxMCk7XG5cbiAgICBvZmZzZXRzLnRvcCAtPSBib3JkZXJUb3BXaWR0aCAtIG1hcmdpblRvcDtcbiAgICBvZmZzZXRzLmJvdHRvbSAtPSBib3JkZXJUb3BXaWR0aCAtIG1hcmdpblRvcDtcbiAgICBvZmZzZXRzLmxlZnQgLT0gYm9yZGVyTGVmdFdpZHRoIC0gbWFyZ2luTGVmdDtcbiAgICBvZmZzZXRzLnJpZ2h0IC09IGJvcmRlckxlZnRXaWR0aCAtIG1hcmdpbkxlZnQ7XG5cbiAgICAvLyBBdHRhY2ggbWFyZ2luVG9wIGFuZCBtYXJnaW5MZWZ0IGJlY2F1c2UgaW4gc29tZSBjaXJjdW1zdGFuY2VzIHdlIG1heSBuZWVkIHRoZW1cbiAgICBvZmZzZXRzLm1hcmdpblRvcCA9IG1hcmdpblRvcDtcbiAgICBvZmZzZXRzLm1hcmdpbkxlZnQgPSBtYXJnaW5MZWZ0O1xuICB9XG5cbiAgaWYgKGlzSUUxMCAmJiAhZml4ZWRQb3NpdGlvbiA/IHBhcmVudC5jb250YWlucyhzY3JvbGxQYXJlbnQpIDogcGFyZW50ID09PSBzY3JvbGxQYXJlbnQgJiYgc2Nyb2xsUGFyZW50Lm5vZGVOYW1lICE9PSAnQk9EWScpIHtcbiAgICBvZmZzZXRzID0gaW5jbHVkZVNjcm9sbChvZmZzZXRzLCBwYXJlbnQpO1xuICB9XG5cbiAgcmV0dXJuIG9mZnNldHM7XG59XG5cbmZ1bmN0aW9uIGdldFZpZXdwb3J0T2Zmc2V0UmVjdFJlbGF0aXZlVG9BcnRiaXRyYXJ5Tm9kZShlbGVtZW50KSB7XG4gIHZhciBleGNsdWRlU2Nyb2xsID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcblxuICB2YXIgaHRtbCA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIHZhciByZWxhdGl2ZU9mZnNldCA9IGdldE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJiaXRyYXJ5Tm9kZShlbGVtZW50LCBodG1sKTtcbiAgdmFyIHdpZHRoID0gTWF0aC5tYXgoaHRtbC5jbGllbnRXaWR0aCwgd2luZG93LmlubmVyV2lkdGggfHwgMCk7XG4gIHZhciBoZWlnaHQgPSBNYXRoLm1heChodG1sLmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IDApO1xuXG4gIHZhciBzY3JvbGxUb3AgPSAhZXhjbHVkZVNjcm9sbCA/IGdldFNjcm9sbChodG1sKSA6IDA7XG4gIHZhciBzY3JvbGxMZWZ0ID0gIWV4Y2x1ZGVTY3JvbGwgPyBnZXRTY3JvbGwoaHRtbCwgJ2xlZnQnKSA6IDA7XG5cbiAgdmFyIG9mZnNldCA9IHtcbiAgICB0b3A6IHNjcm9sbFRvcCAtIHJlbGF0aXZlT2Zmc2V0LnRvcCArIHJlbGF0aXZlT2Zmc2V0Lm1hcmdpblRvcCxcbiAgICBsZWZ0OiBzY3JvbGxMZWZ0IC0gcmVsYXRpdmVPZmZzZXQubGVmdCArIHJlbGF0aXZlT2Zmc2V0Lm1hcmdpbkxlZnQsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG5cbiAgcmV0dXJuIGdldENsaWVudFJlY3Qob2Zmc2V0KTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBmaXhlZCBvciBpcyBpbnNpZGUgYSBmaXhlZCBwYXJlbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQGFyZ3VtZW50IHtFbGVtZW50fSBjdXN0b21Db250YWluZXJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBhbnN3ZXIgdG8gXCJpc0ZpeGVkP1wiXG4gKi9cbmZ1bmN0aW9uIGlzRml4ZWQoZWxlbWVudCkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lO1xuICBpZiAobm9kZU5hbWUgPT09ICdCT0RZJyB8fCBub2RlTmFtZSA9PT0gJ0hUTUwnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIGlmICghcGFyZW50Tm9kZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gaXNGaXhlZChwYXJlbnROb2RlKTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgZmlyc3QgcGFyZW50IG9mIGFuIGVsZW1lbnQgdGhhdCBoYXMgYSB0cmFuc2Zvcm1lZCBwcm9wZXJ0eSBkZWZpbmVkXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtFbGVtZW50fSBmaXJzdCB0cmFuc2Zvcm1lZCBwYXJlbnQgb3IgZG9jdW1lbnRFbGVtZW50XG4gKi9cblxuZnVuY3Rpb24gZ2V0Rml4ZWRQb3NpdGlvbk9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIC8vIFRoaXMgY2hlY2sgaXMgbmVlZGVkIHRvIGF2b2lkIGVycm9ycyBpbiBjYXNlIG9uZSBvZiB0aGUgZWxlbWVudHMgaXNuJ3QgZGVmaW5lZCBmb3IgYW55IHJlYXNvblxuICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQucGFyZW50RWxlbWVudCB8fCBpc0lFKCkpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB9XG4gIHZhciBlbCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgd2hpbGUgKGVsICYmIGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShlbCwgJ3RyYW5zZm9ybScpID09PSAnbm9uZScpIHtcbiAgICBlbCA9IGVsLnBhcmVudEVsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIGVsIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbn1cblxuLyoqXG4gKiBDb21wdXRlZCB0aGUgYm91bmRhcmllcyBsaW1pdHMgYW5kIHJldHVybiB0aGVtXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwb3BwZXJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJlZmVyZW5jZVxuICogQHBhcmFtIHtudW1iZXJ9IHBhZGRpbmdcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGJvdW5kYXJpZXNFbGVtZW50IC0gRWxlbWVudCB1c2VkIHRvIGRlZmluZSB0aGUgYm91bmRhcmllc1xuICogQHBhcmFtIHtCb29sZWFufSBmaXhlZFBvc2l0aW9uIC0gSXMgaW4gZml4ZWQgcG9zaXRpb24gbW9kZVxuICogQHJldHVybnMge09iamVjdH0gQ29vcmRpbmF0ZXMgb2YgdGhlIGJvdW5kYXJpZXNcbiAqL1xuZnVuY3Rpb24gZ2V0Qm91bmRhcmllcyhwb3BwZXIsIHJlZmVyZW5jZSwgcGFkZGluZywgYm91bmRhcmllc0VsZW1lbnQpIHtcbiAgdmFyIGZpeGVkUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IGZhbHNlO1xuXG4gIC8vIE5PVEU6IDEgRE9NIGFjY2VzcyBoZXJlXG5cbiAgdmFyIGJvdW5kYXJpZXMgPSB7IHRvcDogMCwgbGVmdDogMCB9O1xuICB2YXIgb2Zmc2V0UGFyZW50ID0gZml4ZWRQb3NpdGlvbiA/IGdldEZpeGVkUG9zaXRpb25PZmZzZXRQYXJlbnQocG9wcGVyKSA6IGZpbmRDb21tb25PZmZzZXRQYXJlbnQocG9wcGVyLCByZWZlcmVuY2UpO1xuXG4gIC8vIEhhbmRsZSB2aWV3cG9ydCBjYXNlXG4gIGlmIChib3VuZGFyaWVzRWxlbWVudCA9PT0gJ3ZpZXdwb3J0Jykge1xuICAgIGJvdW5kYXJpZXMgPSBnZXRWaWV3cG9ydE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJ0Yml0cmFyeU5vZGUob2Zmc2V0UGFyZW50LCBmaXhlZFBvc2l0aW9uKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBIYW5kbGUgb3RoZXIgY2FzZXMgYmFzZWQgb24gRE9NIGVsZW1lbnQgdXNlZCBhcyBib3VuZGFyaWVzXG4gICAgdmFyIGJvdW5kYXJpZXNOb2RlID0gdm9pZCAwO1xuICAgIGlmIChib3VuZGFyaWVzRWxlbWVudCA9PT0gJ3Njcm9sbFBhcmVudCcpIHtcbiAgICAgIGJvdW5kYXJpZXNOb2RlID0gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUocmVmZXJlbmNlKSk7XG4gICAgICBpZiAoYm91bmRhcmllc05vZGUubm9kZU5hbWUgPT09ICdCT0RZJykge1xuICAgICAgICBib3VuZGFyaWVzTm9kZSA9IHBvcHBlci5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGJvdW5kYXJpZXNFbGVtZW50ID09PSAnd2luZG93Jykge1xuICAgICAgYm91bmRhcmllc05vZGUgPSBwb3BwZXIub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvdW5kYXJpZXNOb2RlID0gYm91bmRhcmllc0VsZW1lbnQ7XG4gICAgfVxuXG4gICAgdmFyIG9mZnNldHMgPSBnZXRPZmZzZXRSZWN0UmVsYXRpdmVUb0FyYml0cmFyeU5vZGUoYm91bmRhcmllc05vZGUsIG9mZnNldFBhcmVudCwgZml4ZWRQb3NpdGlvbik7XG5cbiAgICAvLyBJbiBjYXNlIG9mIEhUTUwsIHdlIG5lZWQgYSBkaWZmZXJlbnQgY29tcHV0YXRpb25cbiAgICBpZiAoYm91bmRhcmllc05vZGUubm9kZU5hbWUgPT09ICdIVE1MJyAmJiAhaXNGaXhlZChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICB2YXIgX2dldFdpbmRvd1NpemVzID0gZ2V0V2luZG93U2l6ZXMocG9wcGVyLm93bmVyRG9jdW1lbnQpLFxuICAgICAgICAgIGhlaWdodCA9IF9nZXRXaW5kb3dTaXplcy5oZWlnaHQsXG4gICAgICAgICAgd2lkdGggPSBfZ2V0V2luZG93U2l6ZXMud2lkdGg7XG5cbiAgICAgIGJvdW5kYXJpZXMudG9wICs9IG9mZnNldHMudG9wIC0gb2Zmc2V0cy5tYXJnaW5Ub3A7XG4gICAgICBib3VuZGFyaWVzLmJvdHRvbSA9IGhlaWdodCArIG9mZnNldHMudG9wO1xuICAgICAgYm91bmRhcmllcy5sZWZ0ICs9IG9mZnNldHMubGVmdCAtIG9mZnNldHMubWFyZ2luTGVmdDtcbiAgICAgIGJvdW5kYXJpZXMucmlnaHQgPSB3aWR0aCArIG9mZnNldHMubGVmdDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZm9yIGFsbCB0aGUgb3RoZXIgRE9NIGVsZW1lbnRzLCB0aGlzIG9uZSBpcyBnb29kXG4gICAgICBib3VuZGFyaWVzID0gb2Zmc2V0cztcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgcGFkZGluZ3NcbiAgcGFkZGluZyA9IHBhZGRpbmcgfHwgMDtcbiAgdmFyIGlzUGFkZGluZ051bWJlciA9IHR5cGVvZiBwYWRkaW5nID09PSAnbnVtYmVyJztcbiAgYm91bmRhcmllcy5sZWZ0ICs9IGlzUGFkZGluZ051bWJlciA/IHBhZGRpbmcgOiBwYWRkaW5nLmxlZnQgfHwgMDtcbiAgYm91bmRhcmllcy50b3AgKz0gaXNQYWRkaW5nTnVtYmVyID8gcGFkZGluZyA6IHBhZGRpbmcudG9wIHx8IDA7XG4gIGJvdW5kYXJpZXMucmlnaHQgLT0gaXNQYWRkaW5nTnVtYmVyID8gcGFkZGluZyA6IHBhZGRpbmcucmlnaHQgfHwgMDtcbiAgYm91bmRhcmllcy5ib3R0b20gLT0gaXNQYWRkaW5nTnVtYmVyID8gcGFkZGluZyA6IHBhZGRpbmcuYm90dG9tIHx8IDA7XG5cbiAgcmV0dXJuIGJvdW5kYXJpZXM7XG59XG5cbmZ1bmN0aW9uIGdldEFyZWEoX3JlZikge1xuICB2YXIgd2lkdGggPSBfcmVmLndpZHRoLFxuICAgICAgaGVpZ2h0ID0gX3JlZi5oZWlnaHQ7XG5cbiAgcmV0dXJuIHdpZHRoICogaGVpZ2h0O1xufVxuXG4vKipcbiAqIFV0aWxpdHkgdXNlZCB0byB0cmFuc2Zvcm0gdGhlIGBhdXRvYCBwbGFjZW1lbnQgdG8gdGhlIHBsYWNlbWVudCB3aXRoIG1vcmVcbiAqIGF2YWlsYWJsZSBzcGFjZS5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSB1cGRhdGUgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVBdXRvUGxhY2VtZW50KHBsYWNlbWVudCwgcmVmUmVjdCwgcG9wcGVyLCByZWZlcmVuY2UsIGJvdW5kYXJpZXNFbGVtZW50KSB7XG4gIHZhciBwYWRkaW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgJiYgYXJndW1lbnRzWzVdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNV0gOiAwO1xuXG4gIGlmIChwbGFjZW1lbnQuaW5kZXhPZignYXV0bycpID09PSAtMSkge1xuICAgIHJldHVybiBwbGFjZW1lbnQ7XG4gIH1cblxuICB2YXIgYm91bmRhcmllcyA9IGdldEJvdW5kYXJpZXMocG9wcGVyLCByZWZlcmVuY2UsIHBhZGRpbmcsIGJvdW5kYXJpZXNFbGVtZW50KTtcblxuICB2YXIgcmVjdHMgPSB7XG4gICAgdG9wOiB7XG4gICAgICB3aWR0aDogYm91bmRhcmllcy53aWR0aCxcbiAgICAgIGhlaWdodDogcmVmUmVjdC50b3AgLSBib3VuZGFyaWVzLnRvcFxuICAgIH0sXG4gICAgcmlnaHQ6IHtcbiAgICAgIHdpZHRoOiBib3VuZGFyaWVzLnJpZ2h0IC0gcmVmUmVjdC5yaWdodCxcbiAgICAgIGhlaWdodDogYm91bmRhcmllcy5oZWlnaHRcbiAgICB9LFxuICAgIGJvdHRvbToge1xuICAgICAgd2lkdGg6IGJvdW5kYXJpZXMud2lkdGgsXG4gICAgICBoZWlnaHQ6IGJvdW5kYXJpZXMuYm90dG9tIC0gcmVmUmVjdC5ib3R0b21cbiAgICB9LFxuICAgIGxlZnQ6IHtcbiAgICAgIHdpZHRoOiByZWZSZWN0LmxlZnQgLSBib3VuZGFyaWVzLmxlZnQsXG4gICAgICBoZWlnaHQ6IGJvdW5kYXJpZXMuaGVpZ2h0XG4gICAgfVxuICB9O1xuXG4gIHZhciBzb3J0ZWRBcmVhcyA9IE9iamVjdC5rZXlzKHJlY3RzKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgICBrZXk6IGtleVxuICAgIH0sIHJlY3RzW2tleV0sIHtcbiAgICAgIGFyZWE6IGdldEFyZWEocmVjdHNba2V5XSlcbiAgICB9KTtcbiAgfSkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBiLmFyZWEgLSBhLmFyZWE7XG4gIH0pO1xuXG4gIHZhciBmaWx0ZXJlZEFyZWFzID0gc29ydGVkQXJlYXMuZmlsdGVyKGZ1bmN0aW9uIChfcmVmMikge1xuICAgIHZhciB3aWR0aCA9IF9yZWYyLndpZHRoLFxuICAgICAgICBoZWlnaHQgPSBfcmVmMi5oZWlnaHQ7XG4gICAgcmV0dXJuIHdpZHRoID49IHBvcHBlci5jbGllbnRXaWR0aCAmJiBoZWlnaHQgPj0gcG9wcGVyLmNsaWVudEhlaWdodDtcbiAgfSk7XG5cbiAgdmFyIGNvbXB1dGVkUGxhY2VtZW50ID0gZmlsdGVyZWRBcmVhcy5sZW5ndGggPiAwID8gZmlsdGVyZWRBcmVhc1swXS5rZXkgOiBzb3J0ZWRBcmVhc1swXS5rZXk7XG5cbiAgdmFyIHZhcmlhdGlvbiA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzFdO1xuXG4gIHJldHVybiBjb21wdXRlZFBsYWNlbWVudCArICh2YXJpYXRpb24gPyAnLScgKyB2YXJpYXRpb24gOiAnJyk7XG59XG5cbi8qKlxuICogR2V0IG9mZnNldHMgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7RWxlbWVudH0gcG9wcGVyIC0gdGhlIHBvcHBlciBlbGVtZW50XG4gKiBAcGFyYW0ge0VsZW1lbnR9IHJlZmVyZW5jZSAtIHRoZSByZWZlcmVuY2UgZWxlbWVudCAodGhlIHBvcHBlciB3aWxsIGJlIHJlbGF0aXZlIHRvIHRoaXMpXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGZpeGVkUG9zaXRpb24gLSBpcyBpbiBmaXhlZCBwb3NpdGlvbiBtb2RlXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgb2Zmc2V0cyB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlclxuICovXG5mdW5jdGlvbiBnZXRSZWZlcmVuY2VPZmZzZXRzKHN0YXRlLCBwb3BwZXIsIHJlZmVyZW5jZSkge1xuICB2YXIgZml4ZWRQb3NpdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogbnVsbDtcblxuICB2YXIgY29tbW9uT2Zmc2V0UGFyZW50ID0gZml4ZWRQb3NpdGlvbiA/IGdldEZpeGVkUG9zaXRpb25PZmZzZXRQYXJlbnQocG9wcGVyKSA6IGZpbmRDb21tb25PZmZzZXRQYXJlbnQocG9wcGVyLCByZWZlcmVuY2UpO1xuICByZXR1cm4gZ2V0T2Zmc2V0UmVjdFJlbGF0aXZlVG9BcmJpdHJhcnlOb2RlKHJlZmVyZW5jZSwgY29tbW9uT2Zmc2V0UGFyZW50LCBmaXhlZFBvc2l0aW9uKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG91dGVyIHNpemVzIG9mIHRoZSBnaXZlbiBlbGVtZW50IChvZmZzZXQgc2l6ZSArIG1hcmdpbnMpXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtPYmplY3R9IG9iamVjdCBjb250YWluaW5nIHdpZHRoIGFuZCBoZWlnaHQgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBnZXRPdXRlclNpemVzKGVsZW1lbnQpIHtcbiAgdmFyIHdpbmRvdyA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcbiAgdmFyIHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICB2YXIgeCA9IHBhcnNlRmxvYXQoc3R5bGVzLm1hcmdpblRvcCB8fCAwKSArIHBhcnNlRmxvYXQoc3R5bGVzLm1hcmdpbkJvdHRvbSB8fCAwKTtcbiAgdmFyIHkgPSBwYXJzZUZsb2F0KHN0eWxlcy5tYXJnaW5MZWZ0IHx8IDApICsgcGFyc2VGbG9hdChzdHlsZXMubWFyZ2luUmlnaHQgfHwgMCk7XG4gIHZhciByZXN1bHQgPSB7XG4gICAgd2lkdGg6IGVsZW1lbnQub2Zmc2V0V2lkdGggKyB5LFxuICAgIGhlaWdodDogZWxlbWVudC5vZmZzZXRIZWlnaHQgKyB4XG4gIH07XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogR2V0IHRoZSBvcHBvc2l0ZSBwbGFjZW1lbnQgb2YgdGhlIGdpdmVuIG9uZVxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtTdHJpbmd9IHBsYWNlbWVudFxuICogQHJldHVybnMge1N0cmluZ30gZmxpcHBlZCBwbGFjZW1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHZhciBoYXNoID0geyBsZWZ0OiAncmlnaHQnLCByaWdodDogJ2xlZnQnLCBib3R0b206ICd0b3AnLCB0b3A6ICdib3R0b20nIH07XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBvZmZzZXRzIHRvIHRoZSBwb3BwZXJcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwb3NpdGlvbiAtIENTUyBwb3NpdGlvbiB0aGUgUG9wcGVyIHdpbGwgZ2V0IGFwcGxpZWRcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBvcHBlciAtIHRoZSBwb3BwZXIgZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IHJlZmVyZW5jZU9mZnNldHMgLSB0aGUgcmVmZXJlbmNlIG9mZnNldHMgKHRoZSBwb3BwZXIgd2lsbCBiZSByZWxhdGl2ZSB0byB0aGlzKVxuICogQHBhcmFtIHtTdHJpbmd9IHBsYWNlbWVudCAtIG9uZSBvZiB0aGUgdmFsaWQgcGxhY2VtZW50IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IHBvcHBlck9mZnNldHMgLSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgb2Zmc2V0cyB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlclxuICovXG5mdW5jdGlvbiBnZXRQb3BwZXJPZmZzZXRzKHBvcHBlciwgcmVmZXJlbmNlT2Zmc2V0cywgcGxhY2VtZW50KSB7XG4gIHBsYWNlbWVudCA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuXG4gIC8vIEdldCBwb3BwZXIgbm9kZSBzaXplc1xuICB2YXIgcG9wcGVyUmVjdCA9IGdldE91dGVyU2l6ZXMocG9wcGVyKTtcblxuICAvLyBBZGQgcG9zaXRpb24sIHdpZHRoIGFuZCBoZWlnaHQgdG8gb3VyIG9mZnNldHMgb2JqZWN0XG4gIHZhciBwb3BwZXJPZmZzZXRzID0ge1xuICAgIHdpZHRoOiBwb3BwZXJSZWN0LndpZHRoLFxuICAgIGhlaWdodDogcG9wcGVyUmVjdC5oZWlnaHRcbiAgfTtcblxuICAvLyBkZXBlbmRpbmcgYnkgdGhlIHBvcHBlciBwbGFjZW1lbnQgd2UgaGF2ZSB0byBjb21wdXRlIGl0cyBvZmZzZXRzIHNsaWdodGx5IGRpZmZlcmVudGx5XG4gIHZhciBpc0hvcml6ID0gWydyaWdodCcsICdsZWZ0J10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMTtcbiAgdmFyIG1haW5TaWRlID0gaXNIb3JpeiA/ICd0b3AnIDogJ2xlZnQnO1xuICB2YXIgc2Vjb25kYXJ5U2lkZSA9IGlzSG9yaXogPyAnbGVmdCcgOiAndG9wJztcbiAgdmFyIG1lYXN1cmVtZW50ID0gaXNIb3JpeiA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgdmFyIHNlY29uZGFyeU1lYXN1cmVtZW50ID0gIWlzSG9yaXogPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgcG9wcGVyT2Zmc2V0c1ttYWluU2lkZV0gPSByZWZlcmVuY2VPZmZzZXRzW21haW5TaWRlXSArIHJlZmVyZW5jZU9mZnNldHNbbWVhc3VyZW1lbnRdIC8gMiAtIHBvcHBlclJlY3RbbWVhc3VyZW1lbnRdIC8gMjtcbiAgaWYgKHBsYWNlbWVudCA9PT0gc2Vjb25kYXJ5U2lkZSkge1xuICAgIHBvcHBlck9mZnNldHNbc2Vjb25kYXJ5U2lkZV0gPSByZWZlcmVuY2VPZmZzZXRzW3NlY29uZGFyeVNpZGVdIC0gcG9wcGVyUmVjdFtzZWNvbmRhcnlNZWFzdXJlbWVudF07XG4gIH0gZWxzZSB7XG4gICAgcG9wcGVyT2Zmc2V0c1tzZWNvbmRhcnlTaWRlXSA9IHJlZmVyZW5jZU9mZnNldHNbZ2V0T3Bwb3NpdGVQbGFjZW1lbnQoc2Vjb25kYXJ5U2lkZSldO1xuICB9XG5cbiAgcmV0dXJuIHBvcHBlck9mZnNldHM7XG59XG5cbi8qKlxuICogTWltaWNzIHRoZSBgZmluZGAgbWV0aG9kIG9mIEFycmF5XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0FycmF5fSBhcnJcbiAqIEBhcmd1bWVudCBwcm9wXG4gKiBAYXJndW1lbnQgdmFsdWVcbiAqIEByZXR1cm5zIGluZGV4IG9yIC0xXG4gKi9cbmZ1bmN0aW9uIGZpbmQoYXJyLCBjaGVjaykge1xuICAvLyB1c2UgbmF0aXZlIGZpbmQgaWYgc3VwcG9ydGVkXG4gIGlmIChBcnJheS5wcm90b3R5cGUuZmluZCkge1xuICAgIHJldHVybiBhcnIuZmluZChjaGVjayk7XG4gIH1cblxuICAvLyB1c2UgYGZpbHRlcmAgdG8gb2J0YWluIHRoZSBzYW1lIGJlaGF2aW9yIG9mIGBmaW5kYFxuICByZXR1cm4gYXJyLmZpbHRlcihjaGVjaylbMF07XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hpbmcgb2JqZWN0XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0FycmF5fSBhcnJcbiAqIEBhcmd1bWVudCBwcm9wXG4gKiBAYXJndW1lbnQgdmFsdWVcbiAqIEByZXR1cm5zIGluZGV4IG9yIC0xXG4gKi9cbmZ1bmN0aW9uIGZpbmRJbmRleChhcnIsIHByb3AsIHZhbHVlKSB7XG4gIC8vIHVzZSBuYXRpdmUgZmluZEluZGV4IGlmIHN1cHBvcnRlZFxuICBpZiAoQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleCkge1xuICAgIHJldHVybiBhcnIuZmluZEluZGV4KGZ1bmN0aW9uIChjdXIpIHtcbiAgICAgIHJldHVybiBjdXJbcHJvcF0gPT09IHZhbHVlO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gdXNlIGBmaW5kYCArIGBpbmRleE9mYCBpZiBgZmluZEluZGV4YCBpc24ndCBzdXBwb3J0ZWRcbiAgdmFyIG1hdGNoID0gZmluZChhcnIsIGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqW3Byb3BdID09PSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiBhcnIuaW5kZXhPZihtYXRjaCk7XG59XG5cbi8qKlxuICogTG9vcCB0cm91Z2ggdGhlIGxpc3Qgb2YgbW9kaWZpZXJzIGFuZCBydW4gdGhlbSBpbiBvcmRlcixcbiAqIGVhY2ggb2YgdGhlbSB3aWxsIHRoZW4gZWRpdCB0aGUgZGF0YSBvYmplY3QuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge2RhdGFPYmplY3R9IGRhdGFcbiAqIEBwYXJhbSB7QXJyYXl9IG1vZGlmaWVyc1xuICogQHBhcmFtIHtTdHJpbmd9IGVuZHMgLSBPcHRpb25hbCBtb2RpZmllciBuYW1lIHVzZWQgYXMgc3RvcHBlclxuICogQHJldHVybnMge2RhdGFPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHJ1bk1vZGlmaWVycyhtb2RpZmllcnMsIGRhdGEsIGVuZHMpIHtcbiAgdmFyIG1vZGlmaWVyc1RvUnVuID0gZW5kcyA9PT0gdW5kZWZpbmVkID8gbW9kaWZpZXJzIDogbW9kaWZpZXJzLnNsaWNlKDAsIGZpbmRJbmRleChtb2RpZmllcnMsICduYW1lJywgZW5kcykpO1xuXG4gIG1vZGlmaWVyc1RvUnVuLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgaWYgKG1vZGlmaWVyWydmdW5jdGlvbiddKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGRvdC1ub3RhdGlvblxuICAgICAgY29uc29sZS53YXJuKCdgbW9kaWZpZXIuZnVuY3Rpb25gIGlzIGRlcHJlY2F0ZWQsIHVzZSBgbW9kaWZpZXIuZm5gIScpO1xuICAgIH1cbiAgICB2YXIgZm4gPSBtb2RpZmllclsnZnVuY3Rpb24nXSB8fCBtb2RpZmllci5mbjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICBpZiAobW9kaWZpZXIuZW5hYmxlZCAmJiBpc0Z1bmN0aW9uKGZuKSkge1xuICAgICAgLy8gQWRkIHByb3BlcnRpZXMgdG8gb2Zmc2V0cyB0byBtYWtlIHRoZW0gYSBjb21wbGV0ZSBjbGllbnRSZWN0IG9iamVjdFxuICAgICAgLy8gd2UgZG8gdGhpcyBiZWZvcmUgZWFjaCBtb2RpZmllciB0byBtYWtlIHN1cmUgdGhlIHByZXZpb3VzIG9uZSBkb2Vzbid0XG4gICAgICAvLyBtZXNzIHdpdGggdGhlc2UgdmFsdWVzXG4gICAgICBkYXRhLm9mZnNldHMucG9wcGVyID0gZ2V0Q2xpZW50UmVjdChkYXRhLm9mZnNldHMucG9wcGVyKTtcbiAgICAgIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UgPSBnZXRDbGllbnRSZWN0KGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UpO1xuXG4gICAgICBkYXRhID0gZm4oZGF0YSwgbW9kaWZpZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcHBlciwgY29tcHV0aW5nIHRoZSBuZXcgb2Zmc2V0cyBhbmQgYXBwbHlpbmdcbiAqIHRoZSBuZXcgc3R5bGUuPGJyIC8+XG4gKiBQcmVmZXIgYHNjaGVkdWxlVXBkYXRlYCBvdmVyIGB1cGRhdGVgIGJlY2F1c2Ugb2YgcGVyZm9ybWFuY2UgcmVhc29ucy5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXJcbiAqL1xuZnVuY3Rpb24gdXBkYXRlKCkge1xuICAvLyBpZiBwb3BwZXIgaXMgZGVzdHJveWVkLCBkb24ndCBwZXJmb3JtIGFueSBmdXJ0aGVyIHVwZGF0ZVxuICBpZiAodGhpcy5zdGF0ZS5pc0Rlc3Ryb3llZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBkYXRhID0ge1xuICAgIGluc3RhbmNlOiB0aGlzLFxuICAgIHN0eWxlczoge30sXG4gICAgYXJyb3dTdHlsZXM6IHt9LFxuICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgIGZsaXBwZWQ6IGZhbHNlLFxuICAgIG9mZnNldHM6IHt9XG4gIH07XG5cbiAgLy8gY29tcHV0ZSByZWZlcmVuY2UgZWxlbWVudCBvZmZzZXRzXG4gIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UgPSBnZXRSZWZlcmVuY2VPZmZzZXRzKHRoaXMuc3RhdGUsIHRoaXMucG9wcGVyLCB0aGlzLnJlZmVyZW5jZSwgdGhpcy5vcHRpb25zLnBvc2l0aW9uRml4ZWQpO1xuXG4gIC8vIGNvbXB1dGUgYXV0byBwbGFjZW1lbnQsIHN0b3JlIHBsYWNlbWVudCBpbnNpZGUgdGhlIGRhdGEgb2JqZWN0LFxuICAvLyBtb2RpZmllcnMgd2lsbCBiZSBhYmxlIHRvIGVkaXQgYHBsYWNlbWVudGAgaWYgbmVlZGVkXG4gIC8vIGFuZCByZWZlciB0byBvcmlnaW5hbFBsYWNlbWVudCB0byBrbm93IHRoZSBvcmlnaW5hbCB2YWx1ZVxuICBkYXRhLnBsYWNlbWVudCA9IGNvbXB1dGVBdXRvUGxhY2VtZW50KHRoaXMub3B0aW9ucy5wbGFjZW1lbnQsIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UsIHRoaXMucG9wcGVyLCB0aGlzLnJlZmVyZW5jZSwgdGhpcy5vcHRpb25zLm1vZGlmaWVycy5mbGlwLmJvdW5kYXJpZXNFbGVtZW50LCB0aGlzLm9wdGlvbnMubW9kaWZpZXJzLmZsaXAucGFkZGluZyk7XG5cbiAgLy8gc3RvcmUgdGhlIGNvbXB1dGVkIHBsYWNlbWVudCBpbnNpZGUgYG9yaWdpbmFsUGxhY2VtZW50YFxuICBkYXRhLm9yaWdpbmFsUGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQ7XG5cbiAgZGF0YS5wb3NpdGlvbkZpeGVkID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uRml4ZWQ7XG5cbiAgLy8gY29tcHV0ZSB0aGUgcG9wcGVyIG9mZnNldHNcbiAgZGF0YS5vZmZzZXRzLnBvcHBlciA9IGdldFBvcHBlck9mZnNldHModGhpcy5wb3BwZXIsIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UsIGRhdGEucGxhY2VtZW50KTtcblxuICBkYXRhLm9mZnNldHMucG9wcGVyLnBvc2l0aW9uID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uRml4ZWQgPyAnZml4ZWQnIDogJ2Fic29sdXRlJztcblxuICAvLyBydW4gdGhlIG1vZGlmaWVyc1xuICBkYXRhID0gcnVuTW9kaWZpZXJzKHRoaXMubW9kaWZpZXJzLCBkYXRhKTtcblxuICAvLyB0aGUgZmlyc3QgYHVwZGF0ZWAgd2lsbCBjYWxsIGBvbkNyZWF0ZWAgY2FsbGJhY2tcbiAgLy8gdGhlIG90aGVyIG9uZXMgd2lsbCBjYWxsIGBvblVwZGF0ZWAgY2FsbGJhY2tcbiAgaWYgKCF0aGlzLnN0YXRlLmlzQ3JlYXRlZCkge1xuICAgIHRoaXMuc3RhdGUuaXNDcmVhdGVkID0gdHJ1ZTtcbiAgICB0aGlzLm9wdGlvbnMub25DcmVhdGUoZGF0YSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5vcHRpb25zLm9uVXBkYXRlKGRhdGEpO1xuICB9XG59XG5cbi8qKlxuICogSGVscGVyIHVzZWQgdG8ga25vdyBpZiB0aGUgZ2l2ZW4gbW9kaWZpZXIgaXMgZW5hYmxlZC5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBpc01vZGlmaWVyRW5hYmxlZChtb2RpZmllcnMsIG1vZGlmaWVyTmFtZSkge1xuICByZXR1cm4gbW9kaWZpZXJzLnNvbWUoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgICAgZW5hYmxlZCA9IF9yZWYuZW5hYmxlZDtcbiAgICByZXR1cm4gZW5hYmxlZCAmJiBuYW1lID09PSBtb2RpZmllck5hbWU7XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcHJlZml4ZWQgc3VwcG9ydGVkIHByb3BlcnR5IG5hbWVcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBwcm9wZXJ0eSAoY2FtZWxDYXNlKVxuICogQHJldHVybnMge1N0cmluZ30gcHJlZml4ZWQgcHJvcGVydHkgKGNhbWVsQ2FzZSBvciBQYXNjYWxDYXNlLCBkZXBlbmRpbmcgb24gdGhlIHZlbmRvciBwcmVmaXgpXG4gKi9cbmZ1bmN0aW9uIGdldFN1cHBvcnRlZFByb3BlcnR5TmFtZShwcm9wZXJ0eSkge1xuICB2YXIgcHJlZml4ZXMgPSBbZmFsc2UsICdtcycsICdXZWJraXQnLCAnTW96JywgJ08nXTtcbiAgdmFyIHVwcGVyUHJvcCA9IHByb3BlcnR5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcHJvcGVydHkuc2xpY2UoMSk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmVmaXhlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwcmVmaXggPSBwcmVmaXhlc1tpXTtcbiAgICB2YXIgdG9DaGVjayA9IHByZWZpeCA/ICcnICsgcHJlZml4ICsgdXBwZXJQcm9wIDogcHJvcGVydHk7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudC5ib2R5LnN0eWxlW3RvQ2hlY2tdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRvQ2hlY2s7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBwb3BwZXIuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyXG4gKi9cbmZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gIHRoaXMuc3RhdGUuaXNEZXN0cm95ZWQgPSB0cnVlO1xuXG4gIC8vIHRvdWNoIERPTSBvbmx5IGlmIGBhcHBseVN0eWxlYCBtb2RpZmllciBpcyBlbmFibGVkXG4gIGlmIChpc01vZGlmaWVyRW5hYmxlZCh0aGlzLm1vZGlmaWVycywgJ2FwcGx5U3R5bGUnKSkge1xuICAgIHRoaXMucG9wcGVyLnJlbW92ZUF0dHJpYnV0ZSgneC1wbGFjZW1lbnQnKTtcbiAgICB0aGlzLnBvcHBlci5zdHlsZS5wb3NpdGlvbiA9ICcnO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlLnRvcCA9ICcnO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlLmxlZnQgPSAnJztcbiAgICB0aGlzLnBvcHBlci5zdHlsZS5yaWdodCA9ICcnO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlLmJvdHRvbSA9ICcnO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlLndpbGxDaGFuZ2UgPSAnJztcbiAgICB0aGlzLnBvcHBlci5zdHlsZVtnZXRTdXBwb3J0ZWRQcm9wZXJ0eU5hbWUoJ3RyYW5zZm9ybScpXSA9ICcnO1xuICB9XG5cbiAgdGhpcy5kaXNhYmxlRXZlbnRMaXN0ZW5lcnMoKTtcblxuICAvLyByZW1vdmUgdGhlIHBvcHBlciBpZiB1c2VyIGV4cGxpY2l0eSBhc2tlZCBmb3IgdGhlIGRlbGV0aW9uIG9uIGRlc3Ryb3lcbiAgLy8gZG8gbm90IHVzZSBgcmVtb3ZlYCBiZWNhdXNlIElFMTEgZG9lc24ndCBzdXBwb3J0IGl0XG4gIGlmICh0aGlzLm9wdGlvbnMucmVtb3ZlT25EZXN0cm95KSB7XG4gICAgdGhpcy5wb3BwZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnBvcHBlcik7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogR2V0IHRoZSB3aW5kb3cgYXNzb2NpYXRlZCB3aXRoIHRoZSBlbGVtZW50XG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtXaW5kb3d9XG4gKi9cbmZ1bmN0aW9uIGdldFdpbmRvdyhlbGVtZW50KSB7XG4gIHZhciBvd25lckRvY3VtZW50ID0gZWxlbWVudC5vd25lckRvY3VtZW50O1xuICByZXR1cm4gb3duZXJEb2N1bWVudCA/IG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgOiB3aW5kb3c7XG59XG5cbmZ1bmN0aW9uIGF0dGFjaFRvU2Nyb2xsUGFyZW50cyhzY3JvbGxQYXJlbnQsIGV2ZW50LCBjYWxsYmFjaywgc2Nyb2xsUGFyZW50cykge1xuICB2YXIgaXNCb2R5ID0gc2Nyb2xsUGFyZW50Lm5vZGVOYW1lID09PSAnQk9EWSc7XG4gIHZhciB0YXJnZXQgPSBpc0JvZHkgPyBzY3JvbGxQYXJlbnQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyA6IHNjcm9sbFBhcmVudDtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGNhbGxiYWNrLCB7IHBhc3NpdmU6IHRydWUgfSk7XG5cbiAgaWYgKCFpc0JvZHkpIHtcbiAgICBhdHRhY2hUb1Njcm9sbFBhcmVudHMoZ2V0U2Nyb2xsUGFyZW50KHRhcmdldC5wYXJlbnROb2RlKSwgZXZlbnQsIGNhbGxiYWNrLCBzY3JvbGxQYXJlbnRzKTtcbiAgfVxuICBzY3JvbGxQYXJlbnRzLnB1c2godGFyZ2V0KTtcbn1cblxuLyoqXG4gKiBTZXR1cCBuZWVkZWQgZXZlbnQgbGlzdGVuZXJzIHVzZWQgdG8gdXBkYXRlIHRoZSBwb3BwZXIgcG9zaXRpb25cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNldHVwRXZlbnRMaXN0ZW5lcnMocmVmZXJlbmNlLCBvcHRpb25zLCBzdGF0ZSwgdXBkYXRlQm91bmQpIHtcbiAgLy8gUmVzaXplIGV2ZW50IGxpc3RlbmVyIG9uIHdpbmRvd1xuICBzdGF0ZS51cGRhdGVCb3VuZCA9IHVwZGF0ZUJvdW5kO1xuICBnZXRXaW5kb3cocmVmZXJlbmNlKS5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBzdGF0ZS51cGRhdGVCb3VuZCwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuXG4gIC8vIFNjcm9sbCBldmVudCBsaXN0ZW5lciBvbiBzY3JvbGwgcGFyZW50c1xuICB2YXIgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbFBhcmVudChyZWZlcmVuY2UpO1xuICBhdHRhY2hUb1Njcm9sbFBhcmVudHMoc2Nyb2xsRWxlbWVudCwgJ3Njcm9sbCcsIHN0YXRlLnVwZGF0ZUJvdW5kLCBzdGF0ZS5zY3JvbGxQYXJlbnRzKTtcbiAgc3RhdGUuc2Nyb2xsRWxlbWVudCA9IHNjcm9sbEVsZW1lbnQ7XG4gIHN0YXRlLmV2ZW50c0VuYWJsZWQgPSB0cnVlO1xuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBJdCB3aWxsIGFkZCByZXNpemUvc2Nyb2xsIGV2ZW50cyBhbmQgc3RhcnQgcmVjYWxjdWxhdGluZ1xuICogcG9zaXRpb24gb2YgdGhlIHBvcHBlciBlbGVtZW50IHdoZW4gdGhleSBhcmUgdHJpZ2dlcmVkLlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG5mdW5jdGlvbiBlbmFibGVFdmVudExpc3RlbmVycygpIHtcbiAgaWYgKCF0aGlzLnN0YXRlLmV2ZW50c0VuYWJsZWQpIHtcbiAgICB0aGlzLnN0YXRlID0gc2V0dXBFdmVudExpc3RlbmVycyh0aGlzLnJlZmVyZW5jZSwgdGhpcy5vcHRpb25zLCB0aGlzLnN0YXRlLCB0aGlzLnNjaGVkdWxlVXBkYXRlKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMgdXNlZCB0byB1cGRhdGUgdGhlIHBvcHBlciBwb3NpdGlvblxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcnMocmVmZXJlbmNlLCBzdGF0ZSkge1xuICAvLyBSZW1vdmUgcmVzaXplIGV2ZW50IGxpc3RlbmVyIG9uIHdpbmRvd1xuICBnZXRXaW5kb3cocmVmZXJlbmNlKS5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBzdGF0ZS51cGRhdGVCb3VuZCk7XG5cbiAgLy8gUmVtb3ZlIHNjcm9sbCBldmVudCBsaXN0ZW5lciBvbiBzY3JvbGwgcGFyZW50c1xuICBzdGF0ZS5zY3JvbGxQYXJlbnRzLmZvckVhY2goZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzdGF0ZS51cGRhdGVCb3VuZCk7XG4gIH0pO1xuXG4gIC8vIFJlc2V0IHN0YXRlXG4gIHN0YXRlLnVwZGF0ZUJvdW5kID0gbnVsbDtcbiAgc3RhdGUuc2Nyb2xsUGFyZW50cyA9IFtdO1xuICBzdGF0ZS5zY3JvbGxFbGVtZW50ID0gbnVsbDtcbiAgc3RhdGUuZXZlbnRzRW5hYmxlZCA9IGZhbHNlO1xuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogSXQgd2lsbCByZW1vdmUgcmVzaXplL3Njcm9sbCBldmVudHMgYW5kIHdvbid0IHJlY2FsY3VsYXRlIHBvcHBlciBwb3NpdGlvblxuICogd2hlbiB0aGV5IGFyZSB0cmlnZ2VyZWQuIEl0IGFsc28gd29uJ3QgdHJpZ2dlciBgb25VcGRhdGVgIGNhbGxiYWNrIGFueW1vcmUsXG4gKiB1bmxlc3MgeW91IGNhbGwgYHVwZGF0ZWAgbWV0aG9kIG1hbnVhbGx5LlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG5mdW5jdGlvbiBkaXNhYmxlRXZlbnRMaXN0ZW5lcnMoKSB7XG4gIGlmICh0aGlzLnN0YXRlLmV2ZW50c0VuYWJsZWQpIHtcbiAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnNjaGVkdWxlVXBkYXRlKTtcbiAgICB0aGlzLnN0YXRlID0gcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy5yZWZlcmVuY2UsIHRoaXMuc3RhdGUpO1xuICB9XG59XG5cbi8qKlxuICogVGVsbHMgaWYgYSBnaXZlbiBpbnB1dCBpcyBhIG51bWJlclxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHsqfSBpbnB1dCB0byBjaGVja1xuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNOdW1lcmljKG4pIHtcbiAgcmV0dXJuIG4gIT09ICcnICYmICFpc05hTihwYXJzZUZsb2F0KG4pKSAmJiBpc0Zpbml0ZShuKTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIHN0eWxlIHRvIHRoZSBnaXZlbiBwb3BwZXJcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gYXBwbHkgdGhlIHN0eWxlIHRvXG4gKiBAYXJndW1lbnQge09iamVjdH0gc3R5bGVzXG4gKiBPYmplY3Qgd2l0aCBhIGxpc3Qgb2YgcHJvcGVydGllcyBhbmQgdmFsdWVzIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgZWxlbWVudFxuICovXG5mdW5jdGlvbiBzZXRTdHlsZXMoZWxlbWVudCwgc3R5bGVzKSB7XG4gIE9iamVjdC5rZXlzKHN0eWxlcykuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgIHZhciB1bml0ID0gJyc7XG4gICAgLy8gYWRkIHVuaXQgaWYgdGhlIHZhbHVlIGlzIG51bWVyaWMgYW5kIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nXG4gICAgaWYgKFsnd2lkdGgnLCAnaGVpZ2h0JywgJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddLmluZGV4T2YocHJvcCkgIT09IC0xICYmIGlzTnVtZXJpYyhzdHlsZXNbcHJvcF0pKSB7XG4gICAgICB1bml0ID0gJ3B4JztcbiAgICB9XG4gICAgZWxlbWVudC5zdHlsZVtwcm9wXSA9IHN0eWxlc1twcm9wXSArIHVuaXQ7XG4gIH0pO1xufVxuXG4vKipcbiAqIFNldCB0aGUgYXR0cmlidXRlcyB0byB0aGUgZ2l2ZW4gcG9wcGVyXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGFwcGx5IHRoZSBhdHRyaWJ1dGVzIHRvXG4gKiBAYXJndW1lbnQge09iamVjdH0gc3R5bGVzXG4gKiBPYmplY3Qgd2l0aCBhIGxpc3Qgb2YgcHJvcGVydGllcyBhbmQgdmFsdWVzIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgZWxlbWVudFxuICovXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIGF0dHJpYnV0ZXMpIHtcbiAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgIHZhciB2YWx1ZSA9IGF0dHJpYnV0ZXNbcHJvcF07XG4gICAgaWYgKHZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUocHJvcCwgYXR0cmlidXRlc1twcm9wXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHByb3ApO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgYHVwZGF0ZWAgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YS5zdHlsZXMgLSBMaXN0IG9mIHN0eWxlIHByb3BlcnRpZXMgLSB2YWx1ZXMgdG8gYXBwbHkgdG8gcG9wcGVyIGVsZW1lbnRcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhLmF0dHJpYnV0ZXMgLSBMaXN0IG9mIGF0dHJpYnV0ZSBwcm9wZXJ0aWVzIC0gdmFsdWVzIHRvIGFwcGx5IHRvIHBvcHBlciBlbGVtZW50XG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgc2FtZSBkYXRhIG9iamVjdFxuICovXG5mdW5jdGlvbiBhcHBseVN0eWxlKGRhdGEpIHtcbiAgLy8gYW55IHByb3BlcnR5IHByZXNlbnQgaW4gYGRhdGEuc3R5bGVzYCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlcixcbiAgLy8gaW4gdGhpcyB3YXkgd2UgY2FuIG1ha2UgdGhlIDNyZCBwYXJ0eSBtb2RpZmllcnMgYWRkIGN1c3RvbSBzdHlsZXMgdG8gaXRcbiAgLy8gQmUgYXdhcmUsIG1vZGlmaWVycyBjb3VsZCBvdmVycmlkZSB0aGUgcHJvcGVydGllcyBkZWZpbmVkIGluIHRoZSBwcmV2aW91c1xuICAvLyBsaW5lcyBvZiB0aGlzIG1vZGlmaWVyIVxuICBzZXRTdHlsZXMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEuc3R5bGVzKTtcblxuICAvLyBhbnkgcHJvcGVydHkgcHJlc2VudCBpbiBgZGF0YS5hdHRyaWJ1dGVzYCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlcixcbiAgLy8gdGhleSB3aWxsIGJlIHNldCBhcyBIVE1MIGF0dHJpYnV0ZXMgb2YgdGhlIGVsZW1lbnRcbiAgc2V0QXR0cmlidXRlcyhkYXRhLmluc3RhbmNlLnBvcHBlciwgZGF0YS5hdHRyaWJ1dGVzKTtcblxuICAvLyBpZiBhcnJvd0VsZW1lbnQgaXMgZGVmaW5lZCBhbmQgYXJyb3dTdHlsZXMgaGFzIHNvbWUgcHJvcGVydGllc1xuICBpZiAoZGF0YS5hcnJvd0VsZW1lbnQgJiYgT2JqZWN0LmtleXMoZGF0YS5hcnJvd1N0eWxlcykubGVuZ3RoKSB7XG4gICAgc2V0U3R5bGVzKGRhdGEuYXJyb3dFbGVtZW50LCBkYXRhLmFycm93U3R5bGVzKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIFNldCB0aGUgeC1wbGFjZW1lbnQgYXR0cmlidXRlIGJlZm9yZSBldmVyeXRoaW5nIGVsc2UgYmVjYXVzZSBpdCBjb3VsZCBiZSB1c2VkXG4gKiB0byBhZGQgbWFyZ2lucyB0byB0aGUgcG9wcGVyIG1hcmdpbnMgbmVlZHMgdG8gYmUgY2FsY3VsYXRlZCB0byBnZXQgdGhlXG4gKiBjb3JyZWN0IHBvcHBlciBvZmZzZXRzLlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5tb2RpZmllcnNcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgZWxlbWVudCB1c2VkIHRvIHBvc2l0aW9uIHRoZSBwb3BwZXJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBvcHBlciAtIFRoZSBIVE1MIGVsZW1lbnQgdXNlZCBhcyBwb3BwZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUG9wcGVyLmpzIG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gYXBwbHlTdHlsZU9uTG9hZChyZWZlcmVuY2UsIHBvcHBlciwgb3B0aW9ucywgbW9kaWZpZXJPcHRpb25zLCBzdGF0ZSkge1xuICAvLyBjb21wdXRlIHJlZmVyZW5jZSBlbGVtZW50IG9mZnNldHNcbiAgdmFyIHJlZmVyZW5jZU9mZnNldHMgPSBnZXRSZWZlcmVuY2VPZmZzZXRzKHN0YXRlLCBwb3BwZXIsIHJlZmVyZW5jZSwgb3B0aW9ucy5wb3NpdGlvbkZpeGVkKTtcblxuICAvLyBjb21wdXRlIGF1dG8gcGxhY2VtZW50LCBzdG9yZSBwbGFjZW1lbnQgaW5zaWRlIHRoZSBkYXRhIG9iamVjdCxcbiAgLy8gbW9kaWZpZXJzIHdpbGwgYmUgYWJsZSB0byBlZGl0IGBwbGFjZW1lbnRgIGlmIG5lZWRlZFxuICAvLyBhbmQgcmVmZXIgdG8gb3JpZ2luYWxQbGFjZW1lbnQgdG8ga25vdyB0aGUgb3JpZ2luYWwgdmFsdWVcbiAgdmFyIHBsYWNlbWVudCA9IGNvbXB1dGVBdXRvUGxhY2VtZW50KG9wdGlvbnMucGxhY2VtZW50LCByZWZlcmVuY2VPZmZzZXRzLCBwb3BwZXIsIHJlZmVyZW5jZSwgb3B0aW9ucy5tb2RpZmllcnMuZmxpcC5ib3VuZGFyaWVzRWxlbWVudCwgb3B0aW9ucy5tb2RpZmllcnMuZmxpcC5wYWRkaW5nKTtcblxuICBwb3BwZXIuc2V0QXR0cmlidXRlKCd4LXBsYWNlbWVudCcsIHBsYWNlbWVudCk7XG5cbiAgLy8gQXBwbHkgYHBvc2l0aW9uYCB0byBwb3BwZXIgYmVmb3JlIGFueXRoaW5nIGVsc2UgYmVjYXVzZVxuICAvLyB3aXRob3V0IHRoZSBwb3NpdGlvbiBhcHBsaWVkIHdlIGNhbid0IGd1YXJhbnRlZSBjb3JyZWN0IGNvbXB1dGF0aW9uc1xuICBzZXRTdHlsZXMocG9wcGVyLCB7IHBvc2l0aW9uOiBvcHRpb25zLnBvc2l0aW9uRml4ZWQgPyAnZml4ZWQnIDogJ2Fic29sdXRlJyB9KTtcblxuICByZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAqIEBhcmd1bWVudCB7Qm9vbGVhbn0gc2hvdWxkUm91bmQgLSBJZiB0aGUgb2Zmc2V0cyBzaG91bGQgYmUgcm91bmRlZCBhdCBhbGxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBwb3BwZXIncyBwb3NpdGlvbiBvZmZzZXRzIHJvdW5kZWRcbiAqXG4gKiBUaGUgdGFsZSBvZiBwaXhlbC1wZXJmZWN0IHBvc2l0aW9uaW5nLiBJdCdzIHN0aWxsIG5vdCAxMDAlIHBlcmZlY3QsIGJ1dCBhc1xuICogZ29vZCBhcyBpdCBjYW4gYmUgd2l0aGluIHJlYXNvbi5cbiAqIERpc2N1c3Npb24gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL0ZlelZyYXN0YS9wb3BwZXIuanMvcHVsbC83MTVcbiAqXG4gKiBMb3cgRFBJIHNjcmVlbnMgY2F1c2UgYSBwb3BwZXIgdG8gYmUgYmx1cnJ5IGlmIG5vdCB1c2luZyBmdWxsIHBpeGVscyAoU2FmYXJpXG4gKiBhcyB3ZWxsIG9uIEhpZ2ggRFBJIHNjcmVlbnMpLlxuICpcbiAqIEZpcmVmb3ggcHJlZmVycyBubyByb3VuZGluZyBmb3IgcG9zaXRpb25pbmcgYW5kIGRvZXMgbm90IGhhdmUgYmx1cnJpbmVzcyBvblxuICogaGlnaCBEUEkgc2NyZWVucy5cbiAqXG4gKiBPbmx5IGhvcml6b250YWwgcGxhY2VtZW50IGFuZCBsZWZ0L3JpZ2h0IHZhbHVlcyBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuXG4gKi9cbmZ1bmN0aW9uIGdldFJvdW5kZWRPZmZzZXRzKGRhdGEsIHNob3VsZFJvdW5kKSB7XG4gIHZhciBfZGF0YSRvZmZzZXRzID0gZGF0YS5vZmZzZXRzLFxuICAgICAgcG9wcGVyID0gX2RhdGEkb2Zmc2V0cy5wb3BwZXIsXG4gICAgICByZWZlcmVuY2UgPSBfZGF0YSRvZmZzZXRzLnJlZmVyZW5jZTtcbiAgdmFyIHJvdW5kID0gTWF0aC5yb3VuZCxcbiAgICAgIGZsb29yID0gTWF0aC5mbG9vcjtcblxuICB2YXIgbm9Sb3VuZCA9IGZ1bmN0aW9uIG5vUm91bmQodikge1xuICAgIHJldHVybiB2O1xuICB9O1xuXG4gIHZhciByZWZlcmVuY2VXaWR0aCA9IHJvdW5kKHJlZmVyZW5jZS53aWR0aCk7XG4gIHZhciBwb3BwZXJXaWR0aCA9IHJvdW5kKHBvcHBlci53aWR0aCk7XG5cbiAgdmFyIGlzVmVydGljYWwgPSBbJ2xlZnQnLCAncmlnaHQnXS5pbmRleE9mKGRhdGEucGxhY2VtZW50KSAhPT0gLTE7XG4gIHZhciBpc1ZhcmlhdGlvbiA9IGRhdGEucGxhY2VtZW50LmluZGV4T2YoJy0nKSAhPT0gLTE7XG4gIHZhciBzYW1lV2lkdGhQYXJpdHkgPSByZWZlcmVuY2VXaWR0aCAlIDIgPT09IHBvcHBlcldpZHRoICUgMjtcbiAgdmFyIGJvdGhPZGRXaWR0aCA9IHJlZmVyZW5jZVdpZHRoICUgMiA9PT0gMSAmJiBwb3BwZXJXaWR0aCAlIDIgPT09IDE7XG5cbiAgdmFyIGhvcml6b250YWxUb0ludGVnZXIgPSAhc2hvdWxkUm91bmQgPyBub1JvdW5kIDogaXNWZXJ0aWNhbCB8fCBpc1ZhcmlhdGlvbiB8fCBzYW1lV2lkdGhQYXJpdHkgPyByb3VuZCA6IGZsb29yO1xuICB2YXIgdmVydGljYWxUb0ludGVnZXIgPSAhc2hvdWxkUm91bmQgPyBub1JvdW5kIDogcm91bmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBsZWZ0OiBob3Jpem9udGFsVG9JbnRlZ2VyKGJvdGhPZGRXaWR0aCAmJiAhaXNWYXJpYXRpb24gJiYgc2hvdWxkUm91bmQgPyBwb3BwZXIubGVmdCAtIDEgOiBwb3BwZXIubGVmdCksXG4gICAgdG9wOiB2ZXJ0aWNhbFRvSW50ZWdlcihwb3BwZXIudG9wKSxcbiAgICBib3R0b206IHZlcnRpY2FsVG9JbnRlZ2VyKHBvcHBlci5ib3R0b20pLFxuICAgIHJpZ2h0OiBob3Jpem9udGFsVG9JbnRlZ2VyKHBvcHBlci5yaWdodClcbiAgfTtcbn1cblxudmFyIGlzRmlyZWZveCA9IGlzQnJvd3NlciAmJiAvRmlyZWZveC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgYHVwZGF0ZWAgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVTdHlsZShkYXRhLCBvcHRpb25zKSB7XG4gIHZhciB4ID0gb3B0aW9ucy54LFxuICAgICAgeSA9IG9wdGlvbnMueTtcbiAgdmFyIHBvcHBlciA9IGRhdGEub2Zmc2V0cy5wb3BwZXI7XG5cbiAgLy8gUmVtb3ZlIHRoaXMgbGVnYWN5IHN1cHBvcnQgaW4gUG9wcGVyLmpzIHYyXG5cbiAgdmFyIGxlZ2FjeUdwdUFjY2VsZXJhdGlvbk9wdGlvbiA9IGZpbmQoZGF0YS5pbnN0YW5jZS5tb2RpZmllcnMsIGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIHJldHVybiBtb2RpZmllci5uYW1lID09PSAnYXBwbHlTdHlsZSc7XG4gIH0pLmdwdUFjY2VsZXJhdGlvbjtcbiAgaWYgKGxlZ2FjeUdwdUFjY2VsZXJhdGlvbk9wdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc29sZS53YXJuKCdXQVJOSU5HOiBgZ3B1QWNjZWxlcmF0aW9uYCBvcHRpb24gbW92ZWQgdG8gYGNvbXB1dGVTdHlsZWAgbW9kaWZpZXIgYW5kIHdpbGwgbm90IGJlIHN1cHBvcnRlZCBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgUG9wcGVyLmpzIScpO1xuICB9XG4gIHZhciBncHVBY2NlbGVyYXRpb24gPSBsZWdhY3lHcHVBY2NlbGVyYXRpb25PcHRpb24gIT09IHVuZGVmaW5lZCA/IGxlZ2FjeUdwdUFjY2VsZXJhdGlvbk9wdGlvbiA6IG9wdGlvbnMuZ3B1QWNjZWxlcmF0aW9uO1xuXG4gIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQoZGF0YS5pbnN0YW5jZS5wb3BwZXIpO1xuICB2YXIgb2Zmc2V0UGFyZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQpO1xuXG4gIC8vIFN0eWxlc1xuICB2YXIgc3R5bGVzID0ge1xuICAgIHBvc2l0aW9uOiBwb3BwZXIucG9zaXRpb25cbiAgfTtcblxuICB2YXIgb2Zmc2V0cyA9IGdldFJvdW5kZWRPZmZzZXRzKGRhdGEsIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDwgMiB8fCAhaXNGaXJlZm94KTtcblxuICB2YXIgc2lkZUEgPSB4ID09PSAnYm90dG9tJyA/ICd0b3AnIDogJ2JvdHRvbSc7XG4gIHZhciBzaWRlQiA9IHkgPT09ICdyaWdodCcgPyAnbGVmdCcgOiAncmlnaHQnO1xuXG4gIC8vIGlmIGdwdUFjY2VsZXJhdGlvbiBpcyBzZXQgdG8gYHRydWVgIGFuZCB0cmFuc2Zvcm0gaXMgc3VwcG9ydGVkLFxuICAvLyAgd2UgdXNlIGB0cmFuc2xhdGUzZGAgdG8gYXBwbHkgdGhlIHBvc2l0aW9uIHRvIHRoZSBwb3BwZXIgd2VcbiAgLy8gYXV0b21hdGljYWxseSB1c2UgdGhlIHN1cHBvcnRlZCBwcmVmaXhlZCB2ZXJzaW9uIGlmIG5lZWRlZFxuICB2YXIgcHJlZml4ZWRQcm9wZXJ0eSA9IGdldFN1cHBvcnRlZFByb3BlcnR5TmFtZSgndHJhbnNmb3JtJyk7XG5cbiAgLy8gbm93LCBsZXQncyBtYWtlIGEgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHRoaXMgY29kZSBjbG9zZWx5ICh3dGY/KVxuICAvLyBJZiB0aGUgY29udGVudCBvZiB0aGUgcG9wcGVyIGdyb3dzIG9uY2UgaXQncyBiZWVuIHBvc2l0aW9uZWQsIGl0XG4gIC8vIG1heSBoYXBwZW4gdGhhdCB0aGUgcG9wcGVyIGdldHMgbWlzcGxhY2VkIGJlY2F1c2Ugb2YgdGhlIG5ldyBjb250ZW50XG4gIC8vIG92ZXJmbG93aW5nIGl0cyByZWZlcmVuY2UgZWxlbWVudFxuICAvLyBUbyBhdm9pZCB0aGlzIHByb2JsZW0sIHdlIHByb3ZpZGUgdHdvIG9wdGlvbnMgKHggYW5kIHkpLCB3aGljaCBhbGxvd1xuICAvLyB0aGUgY29uc3VtZXIgdG8gZGVmaW5lIHRoZSBvZmZzZXQgb3JpZ2luLlxuICAvLyBJZiB3ZSBwb3NpdGlvbiBhIHBvcHBlciBvbiB0b3Agb2YgYSByZWZlcmVuY2UgZWxlbWVudCwgd2UgY2FuIHNldFxuICAvLyBgeGAgdG8gYHRvcGAgdG8gbWFrZSB0aGUgcG9wcGVyIGdyb3cgdG93YXJkcyBpdHMgdG9wIGluc3RlYWQgb2ZcbiAgLy8gaXRzIGJvdHRvbS5cbiAgdmFyIGxlZnQgPSB2b2lkIDAsXG4gICAgICB0b3AgPSB2b2lkIDA7XG4gIGlmIChzaWRlQSA9PT0gJ2JvdHRvbScpIHtcbiAgICAvLyB3aGVuIG9mZnNldFBhcmVudCBpcyA8aHRtbD4gdGhlIHBvc2l0aW9uaW5nIGlzIHJlbGF0aXZlIHRvIHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbiAoZXhjbHVkaW5nIHRoZSBzY3JvbGxiYXIpXG4gICAgLy8gYW5kIG5vdCB0aGUgYm90dG9tIG9mIHRoZSBodG1sIGVsZW1lbnRcbiAgICBpZiAob2Zmc2V0UGFyZW50Lm5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICAgIHRvcCA9IC1vZmZzZXRQYXJlbnQuY2xpZW50SGVpZ2h0ICsgb2Zmc2V0cy5ib3R0b207XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvcCA9IC1vZmZzZXRQYXJlbnRSZWN0LmhlaWdodCArIG9mZnNldHMuYm90dG9tO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0b3AgPSBvZmZzZXRzLnRvcDtcbiAgfVxuICBpZiAoc2lkZUIgPT09ICdyaWdodCcpIHtcbiAgICBpZiAob2Zmc2V0UGFyZW50Lm5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICAgIGxlZnQgPSAtb2Zmc2V0UGFyZW50LmNsaWVudFdpZHRoICsgb2Zmc2V0cy5yaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGVmdCA9IC1vZmZzZXRQYXJlbnRSZWN0LndpZHRoICsgb2Zmc2V0cy5yaWdodDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGVmdCA9IG9mZnNldHMubGVmdDtcbiAgfVxuICBpZiAoZ3B1QWNjZWxlcmF0aW9uICYmIHByZWZpeGVkUHJvcGVydHkpIHtcbiAgICBzdHlsZXNbcHJlZml4ZWRQcm9wZXJ0eV0gPSAndHJhbnNsYXRlM2QoJyArIGxlZnQgKyAncHgsICcgKyB0b3AgKyAncHgsIDApJztcbiAgICBzdHlsZXNbc2lkZUFdID0gMDtcbiAgICBzdHlsZXNbc2lkZUJdID0gMDtcbiAgICBzdHlsZXMud2lsbENoYW5nZSA9ICd0cmFuc2Zvcm0nO1xuICB9IGVsc2Uge1xuICAgIC8vIG90aHdlcmlzZSwgd2UgdXNlIHRoZSBzdGFuZGFyZCBgdG9wYCwgYGxlZnRgLCBgYm90dG9tYCBhbmQgYHJpZ2h0YCBwcm9wZXJ0aWVzXG4gICAgdmFyIGludmVydFRvcCA9IHNpZGVBID09PSAnYm90dG9tJyA/IC0xIDogMTtcbiAgICB2YXIgaW52ZXJ0TGVmdCA9IHNpZGVCID09PSAncmlnaHQnID8gLTEgOiAxO1xuICAgIHN0eWxlc1tzaWRlQV0gPSB0b3AgKiBpbnZlcnRUb3A7XG4gICAgc3R5bGVzW3NpZGVCXSA9IGxlZnQgKiBpbnZlcnRMZWZ0O1xuICAgIHN0eWxlcy53aWxsQ2hhbmdlID0gc2lkZUEgKyAnLCAnICsgc2lkZUI7XG4gIH1cblxuICAvLyBBdHRyaWJ1dGVzXG4gIHZhciBhdHRyaWJ1dGVzID0ge1xuICAgICd4LXBsYWNlbWVudCc6IGRhdGEucGxhY2VtZW50XG4gIH07XG5cbiAgLy8gVXBkYXRlIGBkYXRhYCBhdHRyaWJ1dGVzLCBzdHlsZXMgYW5kIGFycm93U3R5bGVzXG4gIGRhdGEuYXR0cmlidXRlcyA9IF9leHRlbmRzKHt9LCBhdHRyaWJ1dGVzLCBkYXRhLmF0dHJpYnV0ZXMpO1xuICBkYXRhLnN0eWxlcyA9IF9leHRlbmRzKHt9LCBzdHlsZXMsIGRhdGEuc3R5bGVzKTtcbiAgZGF0YS5hcnJvd1N0eWxlcyA9IF9leHRlbmRzKHt9LCBkYXRhLm9mZnNldHMuYXJyb3csIGRhdGEuYXJyb3dTdHlsZXMpO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEhlbHBlciB1c2VkIHRvIGtub3cgaWYgdGhlIGdpdmVuIG1vZGlmaWVyIGRlcGVuZHMgZnJvbSBhbm90aGVyIG9uZS48YnIgLz5cbiAqIEl0IGNoZWNrcyBpZiB0aGUgbmVlZGVkIG1vZGlmaWVyIGlzIGxpc3RlZCBhbmQgZW5hYmxlZC5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7QXJyYXl9IG1vZGlmaWVycyAtIGxpc3Qgb2YgbW9kaWZpZXJzXG4gKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdGluZ05hbWUgLSBuYW1lIG9mIHJlcXVlc3RpbmcgbW9kaWZpZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0ZWROYW1lIC0gbmFtZSBvZiByZXF1ZXN0ZWQgbW9kaWZpZXJcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBpc01vZGlmaWVyUmVxdWlyZWQobW9kaWZpZXJzLCByZXF1ZXN0aW5nTmFtZSwgcmVxdWVzdGVkTmFtZSkge1xuICB2YXIgcmVxdWVzdGluZyA9IGZpbmQobW9kaWZpZXJzLCBmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBuYW1lID0gX3JlZi5uYW1lO1xuICAgIHJldHVybiBuYW1lID09PSByZXF1ZXN0aW5nTmFtZTtcbiAgfSk7XG5cbiAgdmFyIGlzUmVxdWlyZWQgPSAhIXJlcXVlc3RpbmcgJiYgbW9kaWZpZXJzLnNvbWUoZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgcmV0dXJuIG1vZGlmaWVyLm5hbWUgPT09IHJlcXVlc3RlZE5hbWUgJiYgbW9kaWZpZXIuZW5hYmxlZCAmJiBtb2RpZmllci5vcmRlciA8IHJlcXVlc3Rpbmcub3JkZXI7XG4gIH0pO1xuXG4gIGlmICghaXNSZXF1aXJlZCkge1xuICAgIHZhciBfcmVxdWVzdGluZyA9ICdgJyArIHJlcXVlc3RpbmdOYW1lICsgJ2AnO1xuICAgIHZhciByZXF1ZXN0ZWQgPSAnYCcgKyByZXF1ZXN0ZWROYW1lICsgJ2AnO1xuICAgIGNvbnNvbGUud2FybihyZXF1ZXN0ZWQgKyAnIG1vZGlmaWVyIGlzIHJlcXVpcmVkIGJ5ICcgKyBfcmVxdWVzdGluZyArICcgbW9kaWZpZXIgaW4gb3JkZXIgdG8gd29yaywgYmUgc3VyZSB0byBpbmNsdWRlIGl0IGJlZm9yZSAnICsgX3JlcXVlc3RpbmcgKyAnIScpO1xuICB9XG4gIHJldHVybiBpc1JlcXVpcmVkO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHVwZGF0ZSBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gYXJyb3coZGF0YSwgb3B0aW9ucykge1xuICB2YXIgX2RhdGEkb2Zmc2V0cyRhcnJvdztcblxuICAvLyBhcnJvdyBkZXBlbmRzIG9uIGtlZXBUb2dldGhlciBpbiBvcmRlciB0byB3b3JrXG4gIGlmICghaXNNb2RpZmllclJlcXVpcmVkKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCAnYXJyb3cnLCAna2VlcFRvZ2V0aGVyJykpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHZhciBhcnJvd0VsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQ7XG5cbiAgLy8gaWYgYXJyb3dFbGVtZW50IGlzIGEgc3RyaW5nLCBzdXBwb3NlIGl0J3MgYSBDU1Mgc2VsZWN0b3JcbiAgaWYgKHR5cGVvZiBhcnJvd0VsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgYXJyb3dFbGVtZW50ID0gZGF0YS5pbnN0YW5jZS5wb3BwZXIucXVlcnlTZWxlY3RvcihhcnJvd0VsZW1lbnQpO1xuXG4gICAgLy8gaWYgYXJyb3dFbGVtZW50IGlzIG5vdCBmb3VuZCwgZG9uJ3QgcnVuIHRoZSBtb2RpZmllclxuICAgIGlmICghYXJyb3dFbGVtZW50KSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgdGhlIGFycm93RWxlbWVudCBpc24ndCBhIHF1ZXJ5IHNlbGVjdG9yIHdlIG11c3QgY2hlY2sgdGhhdCB0aGVcbiAgICAvLyBwcm92aWRlZCBET00gbm9kZSBpcyBjaGlsZCBvZiBpdHMgcG9wcGVyIG5vZGVcbiAgICBpZiAoIWRhdGEuaW5zdGFuY2UucG9wcGVyLmNvbnRhaW5zKGFycm93RWxlbWVudCkpIHtcbiAgICAgIGNvbnNvbGUud2FybignV0FSTklORzogYGFycm93LmVsZW1lbnRgIG11c3QgYmUgY2hpbGQgb2YgaXRzIHBvcHBlciBlbGVtZW50IScpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICB9XG5cbiAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gIHZhciBfZGF0YSRvZmZzZXRzID0gZGF0YS5vZmZzZXRzLFxuICAgICAgcG9wcGVyID0gX2RhdGEkb2Zmc2V0cy5wb3BwZXIsXG4gICAgICByZWZlcmVuY2UgPSBfZGF0YSRvZmZzZXRzLnJlZmVyZW5jZTtcblxuICB2YXIgaXNWZXJ0aWNhbCA9IFsnbGVmdCcsICdyaWdodCddLmluZGV4T2YocGxhY2VtZW50KSAhPT0gLTE7XG5cbiAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gIHZhciBzaWRlQ2FwaXRhbGl6ZWQgPSBpc1ZlcnRpY2FsID8gJ1RvcCcgOiAnTGVmdCc7XG4gIHZhciBzaWRlID0gc2lkZUNhcGl0YWxpemVkLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBhbHRTaWRlID0gaXNWZXJ0aWNhbCA/ICdsZWZ0JyA6ICd0b3AnO1xuICB2YXIgb3BTaWRlID0gaXNWZXJ0aWNhbCA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgdmFyIGFycm93RWxlbWVudFNpemUgPSBnZXRPdXRlclNpemVzKGFycm93RWxlbWVudClbbGVuXTtcblxuICAvL1xuICAvLyBleHRlbmRzIGtlZXBUb2dldGhlciBiZWhhdmlvciBtYWtpbmcgc3VyZSB0aGUgcG9wcGVyIGFuZCBpdHNcbiAgLy8gcmVmZXJlbmNlIGhhdmUgZW5vdWdoIHBpeGVscyBpbiBjb25qdW5jdGlvblxuICAvL1xuXG4gIC8vIHRvcC9sZWZ0IHNpZGVcbiAgaWYgKHJlZmVyZW5jZVtvcFNpZGVdIC0gYXJyb3dFbGVtZW50U2l6ZSA8IHBvcHBlcltzaWRlXSkge1xuICAgIGRhdGEub2Zmc2V0cy5wb3BwZXJbc2lkZV0gLT0gcG9wcGVyW3NpZGVdIC0gKHJlZmVyZW5jZVtvcFNpZGVdIC0gYXJyb3dFbGVtZW50U2l6ZSk7XG4gIH1cbiAgLy8gYm90dG9tL3JpZ2h0IHNpZGVcbiAgaWYgKHJlZmVyZW5jZVtzaWRlXSArIGFycm93RWxlbWVudFNpemUgPiBwb3BwZXJbb3BTaWRlXSkge1xuICAgIGRhdGEub2Zmc2V0cy5wb3BwZXJbc2lkZV0gKz0gcmVmZXJlbmNlW3NpZGVdICsgYXJyb3dFbGVtZW50U2l6ZSAtIHBvcHBlcltvcFNpZGVdO1xuICB9XG4gIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSBnZXRDbGllbnRSZWN0KGRhdGEub2Zmc2V0cy5wb3BwZXIpO1xuXG4gIC8vIGNvbXB1dGUgY2VudGVyIG9mIHRoZSBwb3BwZXJcbiAgdmFyIGNlbnRlciA9IHJlZmVyZW5jZVtzaWRlXSArIHJlZmVyZW5jZVtsZW5dIC8gMiAtIGFycm93RWxlbWVudFNpemUgLyAyO1xuXG4gIC8vIENvbXB1dGUgdGhlIHNpZGVWYWx1ZSB1c2luZyB0aGUgdXBkYXRlZCBwb3BwZXIgb2Zmc2V0c1xuICAvLyB0YWtlIHBvcHBlciBtYXJnaW4gaW4gYWNjb3VudCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdGhpcyBpbmZvIGF2YWlsYWJsZVxuICB2YXIgY3NzID0gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGRhdGEuaW5zdGFuY2UucG9wcGVyKTtcbiAgdmFyIHBvcHBlck1hcmdpblNpZGUgPSBwYXJzZUZsb2F0KGNzc1snbWFyZ2luJyArIHNpZGVDYXBpdGFsaXplZF0sIDEwKTtcbiAgdmFyIHBvcHBlckJvcmRlclNpZGUgPSBwYXJzZUZsb2F0KGNzc1snYm9yZGVyJyArIHNpZGVDYXBpdGFsaXplZCArICdXaWR0aCddLCAxMCk7XG4gIHZhciBzaWRlVmFsdWUgPSBjZW50ZXIgLSBkYXRhLm9mZnNldHMucG9wcGVyW3NpZGVdIC0gcG9wcGVyTWFyZ2luU2lkZSAtIHBvcHBlckJvcmRlclNpZGU7XG5cbiAgLy8gcHJldmVudCBhcnJvd0VsZW1lbnQgZnJvbSBiZWluZyBwbGFjZWQgbm90IGNvbnRpZ3VvdXNseSB0byBpdHMgcG9wcGVyXG4gIHNpZGVWYWx1ZSA9IE1hdGgubWF4KE1hdGgubWluKHBvcHBlcltsZW5dIC0gYXJyb3dFbGVtZW50U2l6ZSwgc2lkZVZhbHVlKSwgMCk7XG5cbiAgZGF0YS5hcnJvd0VsZW1lbnQgPSBhcnJvd0VsZW1lbnQ7XG4gIGRhdGEub2Zmc2V0cy5hcnJvdyA9IChfZGF0YSRvZmZzZXRzJGFycm93ID0ge30sIGRlZmluZVByb3BlcnR5KF9kYXRhJG9mZnNldHMkYXJyb3csIHNpZGUsIE1hdGgucm91bmQoc2lkZVZhbHVlKSksIGRlZmluZVByb3BlcnR5KF9kYXRhJG9mZnNldHMkYXJyb3csIGFsdFNpZGUsICcnKSwgX2RhdGEkb2Zmc2V0cyRhcnJvdyk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogR2V0IHRoZSBvcHBvc2l0ZSBwbGFjZW1lbnQgdmFyaWF0aW9uIG9mIHRoZSBnaXZlbiBvbmVcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBwbGFjZW1lbnQgdmFyaWF0aW9uXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBmbGlwcGVkIHBsYWNlbWVudCB2YXJpYXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVWYXJpYXRpb24odmFyaWF0aW9uKSB7XG4gIGlmICh2YXJpYXRpb24gPT09ICdlbmQnKSB7XG4gICAgcmV0dXJuICdzdGFydCc7XG4gIH0gZWxzZSBpZiAodmFyaWF0aW9uID09PSAnc3RhcnQnKSB7XG4gICAgcmV0dXJuICdlbmQnO1xuICB9XG4gIHJldHVybiB2YXJpYXRpb247XG59XG5cbi8qKlxuICogTGlzdCBvZiBhY2NlcHRlZCBwbGFjZW1lbnRzIHRvIHVzZSBhcyB2YWx1ZXMgb2YgdGhlIGBwbGFjZW1lbnRgIG9wdGlvbi48YnIgLz5cbiAqIFZhbGlkIHBsYWNlbWVudHMgYXJlOlxuICogLSBgYXV0b2BcbiAqIC0gYHRvcGBcbiAqIC0gYHJpZ2h0YFxuICogLSBgYm90dG9tYFxuICogLSBgbGVmdGBcbiAqXG4gKiBFYWNoIHBsYWNlbWVudCBjYW4gaGF2ZSBhIHZhcmlhdGlvbiBmcm9tIHRoaXMgbGlzdDpcbiAqIC0gYC1zdGFydGBcbiAqIC0gYC1lbmRgXG4gKlxuICogVmFyaWF0aW9ucyBhcmUgaW50ZXJwcmV0ZWQgZWFzaWx5IGlmIHlvdSB0aGluayBvZiB0aGVtIGFzIHRoZSBsZWZ0IHRvIHJpZ2h0XG4gKiB3cml0dGVuIGxhbmd1YWdlcy4gSG9yaXpvbnRhbGx5IChgdG9wYCBhbmQgYGJvdHRvbWApLCBgc3RhcnRgIGlzIGxlZnQgYW5kIGBlbmRgXG4gKiBpcyByaWdodC48YnIgLz5cbiAqIFZlcnRpY2FsbHkgKGBsZWZ0YCBhbmQgYHJpZ2h0YCksIGBzdGFydGAgaXMgdG9wIGFuZCBgZW5kYCBpcyBib3R0b20uXG4gKlxuICogU29tZSB2YWxpZCBleGFtcGxlcyBhcmU6XG4gKiAtIGB0b3AtZW5kYCAob24gdG9wIG9mIHJlZmVyZW5jZSwgcmlnaHQgYWxpZ25lZClcbiAqIC0gYHJpZ2h0LXN0YXJ0YCAob24gcmlnaHQgb2YgcmVmZXJlbmNlLCB0b3AgYWxpZ25lZClcbiAqIC0gYGJvdHRvbWAgKG9uIGJvdHRvbSwgY2VudGVyZWQpXG4gKiAtIGBhdXRvLWVuZGAgKG9uIHRoZSBzaWRlIHdpdGggbW9yZSBzcGFjZSBhdmFpbGFibGUsIGFsaWdubWVudCBkZXBlbmRzIGJ5IHBsYWNlbWVudClcbiAqXG4gKiBAc3RhdGljXG4gKiBAdHlwZSB7QXJyYXl9XG4gKiBAZW51bSB7U3RyaW5nfVxuICogQHJlYWRvbmx5XG4gKiBAbWV0aG9kIHBsYWNlbWVudHNcbiAqIEBtZW1iZXJvZiBQb3BwZXJcbiAqL1xudmFyIHBsYWNlbWVudHMgPSBbJ2F1dG8tc3RhcnQnLCAnYXV0bycsICdhdXRvLWVuZCcsICd0b3Atc3RhcnQnLCAndG9wJywgJ3RvcC1lbmQnLCAncmlnaHQtc3RhcnQnLCAncmlnaHQnLCAncmlnaHQtZW5kJywgJ2JvdHRvbS1lbmQnLCAnYm90dG9tJywgJ2JvdHRvbS1zdGFydCcsICdsZWZ0LWVuZCcsICdsZWZ0JywgJ2xlZnQtc3RhcnQnXTtcblxuLy8gR2V0IHJpZCBvZiBgYXV0b2AgYGF1dG8tc3RhcnRgIGFuZCBgYXV0by1lbmRgXG52YXIgdmFsaWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cy5zbGljZSgzKTtcblxuLyoqXG4gKiBHaXZlbiBhbiBpbml0aWFsIHBsYWNlbWVudCwgcmV0dXJucyBhbGwgdGhlIHN1YnNlcXVlbnQgcGxhY2VtZW50c1xuICogY2xvY2t3aXNlIChvciBjb3VudGVyLWNsb2Nrd2lzZSkuXG4gKlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtTdHJpbmd9IHBsYWNlbWVudCAtIEEgdmFsaWQgcGxhY2VtZW50IChpdCBhY2NlcHRzIHZhcmlhdGlvbnMpXG4gKiBAYXJndW1lbnQge0Jvb2xlYW59IGNvdW50ZXIgLSBTZXQgdG8gdHJ1ZSB0byB3YWxrIHRoZSBwbGFjZW1lbnRzIGNvdW50ZXJjbG9ja3dpc2VcbiAqIEByZXR1cm5zIHtBcnJheX0gcGxhY2VtZW50cyBpbmNsdWRpbmcgdGhlaXIgdmFyaWF0aW9uc1xuICovXG5mdW5jdGlvbiBjbG9ja3dpc2UocGxhY2VtZW50KSB7XG4gIHZhciBjb3VudGVyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcblxuICB2YXIgaW5kZXggPSB2YWxpZFBsYWNlbWVudHMuaW5kZXhPZihwbGFjZW1lbnQpO1xuICB2YXIgYXJyID0gdmFsaWRQbGFjZW1lbnRzLnNsaWNlKGluZGV4ICsgMSkuY29uY2F0KHZhbGlkUGxhY2VtZW50cy5zbGljZSgwLCBpbmRleCkpO1xuICByZXR1cm4gY291bnRlciA/IGFyci5yZXZlcnNlKCkgOiBhcnI7XG59XG5cbnZhciBCRUhBVklPUlMgPSB7XG4gIEZMSVA6ICdmbGlwJyxcbiAgQ0xPQ0tXSVNFOiAnY2xvY2t3aXNlJyxcbiAgQ09VTlRFUkNMT0NLV0lTRTogJ2NvdW50ZXJjbG9ja3dpc2UnXG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHVwZGF0ZSBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gZmxpcChkYXRhLCBvcHRpb25zKSB7XG4gIC8vIGlmIGBpbm5lcmAgbW9kaWZpZXIgaXMgZW5hYmxlZCwgd2UgY2FuJ3QgdXNlIHRoZSBgZmxpcGAgbW9kaWZpZXJcbiAgaWYgKGlzTW9kaWZpZXJFbmFibGVkKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCAnaW5uZXInKSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgaWYgKGRhdGEuZmxpcHBlZCAmJiBkYXRhLnBsYWNlbWVudCA9PT0gZGF0YS5vcmlnaW5hbFBsYWNlbWVudCkge1xuICAgIC8vIHNlZW1zIGxpa2UgZmxpcCBpcyB0cnlpbmcgdG8gbG9vcCwgcHJvYmFibHkgdGhlcmUncyBub3QgZW5vdWdoIHNwYWNlIG9uIGFueSBvZiB0aGUgZmxpcHBhYmxlIHNpZGVzXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICB2YXIgYm91bmRhcmllcyA9IGdldEJvdW5kYXJpZXMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEuaW5zdGFuY2UucmVmZXJlbmNlLCBvcHRpb25zLnBhZGRpbmcsIG9wdGlvbnMuYm91bmRhcmllc0VsZW1lbnQsIGRhdGEucG9zaXRpb25GaXhlZCk7XG5cbiAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gIHZhciBwbGFjZW1lbnRPcHBvc2l0ZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHZhciB2YXJpYXRpb24gPSBkYXRhLnBsYWNlbWVudC5zcGxpdCgnLScpWzFdIHx8ICcnO1xuXG4gIHZhciBmbGlwT3JkZXIgPSBbXTtcblxuICBzd2l0Y2ggKG9wdGlvbnMuYmVoYXZpb3IpIHtcbiAgICBjYXNlIEJFSEFWSU9SUy5GTElQOlxuICAgICAgZmxpcE9yZGVyID0gW3BsYWNlbWVudCwgcGxhY2VtZW50T3Bwb3NpdGVdO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBCRUhBVklPUlMuQ0xPQ0tXSVNFOlxuICAgICAgZmxpcE9yZGVyID0gY2xvY2t3aXNlKHBsYWNlbWVudCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIEJFSEFWSU9SUy5DT1VOVEVSQ0xPQ0tXSVNFOlxuICAgICAgZmxpcE9yZGVyID0gY2xvY2t3aXNlKHBsYWNlbWVudCwgdHJ1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgZmxpcE9yZGVyID0gb3B0aW9ucy5iZWhhdmlvcjtcbiAgfVxuXG4gIGZsaXBPcmRlci5mb3JFYWNoKGZ1bmN0aW9uIChzdGVwLCBpbmRleCkge1xuICAgIGlmIChwbGFjZW1lbnQgIT09IHN0ZXAgfHwgZmxpcE9yZGVyLmxlbmd0aCA9PT0gaW5kZXggKyAxKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICAgIHBsYWNlbWVudE9wcG9zaXRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcblxuICAgIHZhciBwb3BwZXJPZmZzZXRzID0gZGF0YS5vZmZzZXRzLnBvcHBlcjtcbiAgICB2YXIgcmVmT2Zmc2V0cyA9IGRhdGEub2Zmc2V0cy5yZWZlcmVuY2U7XG5cbiAgICAvLyB1c2luZyBmbG9vciBiZWNhdXNlIHRoZSByZWZlcmVuY2Ugb2Zmc2V0cyBtYXkgY29udGFpbiBkZWNpbWFscyB3ZSBhcmUgbm90IGdvaW5nIHRvIGNvbnNpZGVyIGhlcmVcbiAgICB2YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuICAgIHZhciBvdmVybGFwc1JlZiA9IHBsYWNlbWVudCA9PT0gJ2xlZnQnICYmIGZsb29yKHBvcHBlck9mZnNldHMucmlnaHQpID4gZmxvb3IocmVmT2Zmc2V0cy5sZWZ0KSB8fCBwbGFjZW1lbnQgPT09ICdyaWdodCcgJiYgZmxvb3IocG9wcGVyT2Zmc2V0cy5sZWZ0KSA8IGZsb29yKHJlZk9mZnNldHMucmlnaHQpIHx8IHBsYWNlbWVudCA9PT0gJ3RvcCcgJiYgZmxvb3IocG9wcGVyT2Zmc2V0cy5ib3R0b20pID4gZmxvb3IocmVmT2Zmc2V0cy50b3ApIHx8IHBsYWNlbWVudCA9PT0gJ2JvdHRvbScgJiYgZmxvb3IocG9wcGVyT2Zmc2V0cy50b3ApIDwgZmxvb3IocmVmT2Zmc2V0cy5ib3R0b20pO1xuXG4gICAgdmFyIG92ZXJmbG93c0xlZnQgPSBmbG9vcihwb3BwZXJPZmZzZXRzLmxlZnQpIDwgZmxvb3IoYm91bmRhcmllcy5sZWZ0KTtcbiAgICB2YXIgb3ZlcmZsb3dzUmlnaHQgPSBmbG9vcihwb3BwZXJPZmZzZXRzLnJpZ2h0KSA+IGZsb29yKGJvdW5kYXJpZXMucmlnaHQpO1xuICAgIHZhciBvdmVyZmxvd3NUb3AgPSBmbG9vcihwb3BwZXJPZmZzZXRzLnRvcCkgPCBmbG9vcihib3VuZGFyaWVzLnRvcCk7XG4gICAgdmFyIG92ZXJmbG93c0JvdHRvbSA9IGZsb29yKHBvcHBlck9mZnNldHMuYm90dG9tKSA+IGZsb29yKGJvdW5kYXJpZXMuYm90dG9tKTtcblxuICAgIHZhciBvdmVyZmxvd3NCb3VuZGFyaWVzID0gcGxhY2VtZW50ID09PSAnbGVmdCcgJiYgb3ZlcmZsb3dzTGVmdCB8fCBwbGFjZW1lbnQgPT09ICdyaWdodCcgJiYgb3ZlcmZsb3dzUmlnaHQgfHwgcGxhY2VtZW50ID09PSAndG9wJyAmJiBvdmVyZmxvd3NUb3AgfHwgcGxhY2VtZW50ID09PSAnYm90dG9tJyAmJiBvdmVyZmxvd3NCb3R0b207XG5cbiAgICAvLyBmbGlwIHRoZSB2YXJpYXRpb24gaWYgcmVxdWlyZWRcbiAgICB2YXIgaXNWZXJ0aWNhbCA9IFsndG9wJywgJ2JvdHRvbSddLmluZGV4T2YocGxhY2VtZW50KSAhPT0gLTE7XG5cbiAgICAvLyBmbGlwcyB2YXJpYXRpb24gaWYgcmVmZXJlbmNlIGVsZW1lbnQgb3ZlcmZsb3dzIGJvdW5kYXJpZXNcbiAgICB2YXIgZmxpcHBlZFZhcmlhdGlvbkJ5UmVmID0gISFvcHRpb25zLmZsaXBWYXJpYXRpb25zICYmIChpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ3N0YXJ0JyAmJiBvdmVyZmxvd3NMZWZ0IHx8IGlzVmVydGljYWwgJiYgdmFyaWF0aW9uID09PSAnZW5kJyAmJiBvdmVyZmxvd3NSaWdodCB8fCAhaXNWZXJ0aWNhbCAmJiB2YXJpYXRpb24gPT09ICdzdGFydCcgJiYgb3ZlcmZsb3dzVG9wIHx8ICFpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ2VuZCcgJiYgb3ZlcmZsb3dzQm90dG9tKTtcblxuICAgIC8vIGZsaXBzIHZhcmlhdGlvbiBpZiBwb3BwZXIgY29udGVudCBvdmVyZmxvd3MgYm91bmRhcmllc1xuICAgIHZhciBmbGlwcGVkVmFyaWF0aW9uQnlDb250ZW50ID0gISFvcHRpb25zLmZsaXBWYXJpYXRpb25zQnlDb250ZW50ICYmIChpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ3N0YXJ0JyAmJiBvdmVyZmxvd3NSaWdodCB8fCBpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ2VuZCcgJiYgb3ZlcmZsb3dzTGVmdCB8fCAhaXNWZXJ0aWNhbCAmJiB2YXJpYXRpb24gPT09ICdzdGFydCcgJiYgb3ZlcmZsb3dzQm90dG9tIHx8ICFpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ2VuZCcgJiYgb3ZlcmZsb3dzVG9wKTtcblxuICAgIHZhciBmbGlwcGVkVmFyaWF0aW9uID0gZmxpcHBlZFZhcmlhdGlvbkJ5UmVmIHx8IGZsaXBwZWRWYXJpYXRpb25CeUNvbnRlbnQ7XG5cbiAgICBpZiAob3ZlcmxhcHNSZWYgfHwgb3ZlcmZsb3dzQm91bmRhcmllcyB8fCBmbGlwcGVkVmFyaWF0aW9uKSB7XG4gICAgICAvLyB0aGlzIGJvb2xlYW4gdG8gZGV0ZWN0IGFueSBmbGlwIGxvb3BcbiAgICAgIGRhdGEuZmxpcHBlZCA9IHRydWU7XG5cbiAgICAgIGlmIChvdmVybGFwc1JlZiB8fCBvdmVyZmxvd3NCb3VuZGFyaWVzKSB7XG4gICAgICAgIHBsYWNlbWVudCA9IGZsaXBPcmRlcltpbmRleCArIDFdO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmxpcHBlZFZhcmlhdGlvbikge1xuICAgICAgICB2YXJpYXRpb24gPSBnZXRPcHBvc2l0ZVZhcmlhdGlvbih2YXJpYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBkYXRhLnBsYWNlbWVudCA9IHBsYWNlbWVudCArICh2YXJpYXRpb24gPyAnLScgKyB2YXJpYXRpb24gOiAnJyk7XG5cbiAgICAgIC8vIHRoaXMgb2JqZWN0IGNvbnRhaW5zIGBwb3NpdGlvbmAsIHdlIHdhbnQgdG8gcHJlc2VydmUgaXQgYWxvbmcgd2l0aFxuICAgICAgLy8gYW55IGFkZGl0aW9uYWwgcHJvcGVydHkgd2UgbWF5IGFkZCBpbiB0aGUgZnV0dXJlXG4gICAgICBkYXRhLm9mZnNldHMucG9wcGVyID0gX2V4dGVuZHMoe30sIGRhdGEub2Zmc2V0cy5wb3BwZXIsIGdldFBvcHBlck9mZnNldHMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UsIGRhdGEucGxhY2VtZW50KSk7XG5cbiAgICAgIGRhdGEgPSBydW5Nb2RpZmllcnMoZGF0YS5pbnN0YW5jZS5tb2RpZmllcnMsIGRhdGEsICdmbGlwJyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgdXBkYXRlIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBrZWVwVG9nZXRoZXIoZGF0YSkge1xuICB2YXIgX2RhdGEkb2Zmc2V0cyA9IGRhdGEub2Zmc2V0cyxcbiAgICAgIHBvcHBlciA9IF9kYXRhJG9mZnNldHMucG9wcGVyLFxuICAgICAgcmVmZXJlbmNlID0gX2RhdGEkb2Zmc2V0cy5yZWZlcmVuY2U7XG5cbiAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gIHZhciBmbG9vciA9IE1hdGguZmxvb3I7XG4gIHZhciBpc1ZlcnRpY2FsID0gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMTtcbiAgdmFyIHNpZGUgPSBpc1ZlcnRpY2FsID8gJ3JpZ2h0JyA6ICdib3R0b20nO1xuICB2YXIgb3BTaWRlID0gaXNWZXJ0aWNhbCA/ICdsZWZ0JyA6ICd0b3AnO1xuICB2YXIgbWVhc3VyZW1lbnQgPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuXG4gIGlmIChwb3BwZXJbc2lkZV0gPCBmbG9vcihyZWZlcmVuY2Vbb3BTaWRlXSkpIHtcbiAgICBkYXRhLm9mZnNldHMucG9wcGVyW29wU2lkZV0gPSBmbG9vcihyZWZlcmVuY2Vbb3BTaWRlXSkgLSBwb3BwZXJbbWVhc3VyZW1lbnRdO1xuICB9XG4gIGlmIChwb3BwZXJbb3BTaWRlXSA+IGZsb29yKHJlZmVyZW5jZVtzaWRlXSkpIHtcbiAgICBkYXRhLm9mZnNldHMucG9wcGVyW29wU2lkZV0gPSBmbG9vcihyZWZlcmVuY2Vbc2lkZV0pO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgY29udGFpbmluZyB2YWx1ZSArIHVuaXQgaW50byBhIHB4IHZhbHVlIG51bWJlclxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2Yge21vZGlmaWVyc35vZmZzZXR9XG4gKiBAcHJpdmF0ZVxuICogQGFyZ3VtZW50IHtTdHJpbmd9IHN0ciAtIFZhbHVlICsgdW5pdCBzdHJpbmdcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBtZWFzdXJlbWVudCAtIGBoZWlnaHRgIG9yIGB3aWR0aGBcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBwb3BwZXJPZmZzZXRzXG4gKiBAYXJndW1lbnQge09iamVjdH0gcmVmZXJlbmNlT2Zmc2V0c1xuICogQHJldHVybnMge051bWJlcnxTdHJpbmd9XG4gKiBWYWx1ZSBpbiBwaXhlbHMsIG9yIG9yaWdpbmFsIHN0cmluZyBpZiBubyB2YWx1ZXMgd2VyZSBleHRyYWN0ZWRcbiAqL1xuZnVuY3Rpb24gdG9WYWx1ZShzdHIsIG1lYXN1cmVtZW50LCBwb3BwZXJPZmZzZXRzLCByZWZlcmVuY2VPZmZzZXRzKSB7XG4gIC8vIHNlcGFyYXRlIHZhbHVlIGZyb20gdW5pdFxuICB2YXIgc3BsaXQgPSBzdHIubWF0Y2goLygoPzpcXC18XFwrKT9cXGQqXFwuP1xcZCopKC4qKS8pO1xuICB2YXIgdmFsdWUgPSArc3BsaXRbMV07XG4gIHZhciB1bml0ID0gc3BsaXRbMl07XG5cbiAgLy8gSWYgaXQncyBub3QgYSBudW1iZXIgaXQncyBhbiBvcGVyYXRvciwgSSBndWVzc1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIGlmICh1bml0LmluZGV4T2YoJyUnKSA9PT0gMCkge1xuICAgIHZhciBlbGVtZW50ID0gdm9pZCAwO1xuICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgY2FzZSAnJXAnOlxuICAgICAgICBlbGVtZW50ID0gcG9wcGVyT2Zmc2V0cztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICclJzpcbiAgICAgIGNhc2UgJyVyJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGVsZW1lbnQgPSByZWZlcmVuY2VPZmZzZXRzO1xuICAgIH1cblxuICAgIHZhciByZWN0ID0gZ2V0Q2xpZW50UmVjdChlbGVtZW50KTtcbiAgICByZXR1cm4gcmVjdFttZWFzdXJlbWVudF0gLyAxMDAgKiB2YWx1ZTtcbiAgfSBlbHNlIGlmICh1bml0ID09PSAndmgnIHx8IHVuaXQgPT09ICd2dycpIHtcbiAgICAvLyBpZiBpcyBhIHZoIG9yIHZ3LCB3ZSBjYWxjdWxhdGUgdGhlIHNpemUgYmFzZWQgb24gdGhlIHZpZXdwb3J0XG4gICAgdmFyIHNpemUgPSB2b2lkIDA7XG4gICAgaWYgKHVuaXQgPT09ICd2aCcpIHtcbiAgICAgIHNpemUgPSBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNpemUgPSBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApO1xuICAgIH1cbiAgICByZXR1cm4gc2l6ZSAvIDEwMCAqIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIC8vIGlmIGlzIGFuIGV4cGxpY2l0IHBpeGVsIHVuaXQsIHdlIGdldCByaWQgb2YgdGhlIHVuaXQgYW5kIGtlZXAgdGhlIHZhbHVlXG4gICAgLy8gaWYgaXMgYW4gaW1wbGljaXQgdW5pdCwgaXQncyBweCwgYW5kIHdlIHJldHVybiBqdXN0IHRoZSB2YWx1ZVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlIGFuIGBvZmZzZXRgIHN0cmluZyB0byBleHRyYXBvbGF0ZSBgeGAgYW5kIGB5YCBudW1lcmljIG9mZnNldHMuXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiB7bW9kaWZpZXJzfm9mZnNldH1cbiAqIEBwcml2YXRlXG4gKiBAYXJndW1lbnQge1N0cmluZ30gb2Zmc2V0XG4gKiBAYXJndW1lbnQge09iamVjdH0gcG9wcGVyT2Zmc2V0c1xuICogQGFyZ3VtZW50IHtPYmplY3R9IHJlZmVyZW5jZU9mZnNldHNcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBiYXNlUGxhY2VtZW50XG4gKiBAcmV0dXJucyB7QXJyYXl9IGEgdHdvIGNlbGxzIGFycmF5IHdpdGggeCBhbmQgeSBvZmZzZXRzIGluIG51bWJlcnNcbiAqL1xuZnVuY3Rpb24gcGFyc2VPZmZzZXQob2Zmc2V0LCBwb3BwZXJPZmZzZXRzLCByZWZlcmVuY2VPZmZzZXRzLCBiYXNlUGxhY2VtZW50KSB7XG4gIHZhciBvZmZzZXRzID0gWzAsIDBdO1xuXG4gIC8vIFVzZSBoZWlnaHQgaWYgcGxhY2VtZW50IGlzIGxlZnQgb3IgcmlnaHQgYW5kIGluZGV4IGlzIDAgb3RoZXJ3aXNlIHVzZSB3aWR0aFxuICAvLyBpbiB0aGlzIHdheSB0aGUgZmlyc3Qgb2Zmc2V0IHdpbGwgdXNlIGFuIGF4aXMgYW5kIHRoZSBzZWNvbmQgb25lXG4gIC8vIHdpbGwgdXNlIHRoZSBvdGhlciBvbmVcbiAgdmFyIHVzZUhlaWdodCA9IFsncmlnaHQnLCAnbGVmdCddLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgIT09IC0xO1xuXG4gIC8vIFNwbGl0IHRoZSBvZmZzZXQgc3RyaW5nIHRvIG9idGFpbiBhIGxpc3Qgb2YgdmFsdWVzIGFuZCBvcGVyYW5kc1xuICAvLyBUaGUgcmVnZXggYWRkcmVzc2VzIHZhbHVlcyB3aXRoIHRoZSBwbHVzIG9yIG1pbnVzIHNpZ24gaW4gZnJvbnQgKCsxMCwgLTIwLCBldGMpXG4gIHZhciBmcmFnbWVudHMgPSBvZmZzZXQuc3BsaXQoLyhcXCt8XFwtKS8pLm1hcChmdW5jdGlvbiAoZnJhZykge1xuICAgIHJldHVybiBmcmFnLnRyaW0oKTtcbiAgfSk7XG5cbiAgLy8gRGV0ZWN0IGlmIHRoZSBvZmZzZXQgc3RyaW5nIGNvbnRhaW5zIGEgcGFpciBvZiB2YWx1ZXMgb3IgYSBzaW5nbGUgb25lXG4gIC8vIHRoZXkgY291bGQgYmUgc2VwYXJhdGVkIGJ5IGNvbW1hIG9yIHNwYWNlXG4gIHZhciBkaXZpZGVyID0gZnJhZ21lbnRzLmluZGV4T2YoZmluZChmcmFnbWVudHMsIGZ1bmN0aW9uIChmcmFnKSB7XG4gICAgcmV0dXJuIGZyYWcuc2VhcmNoKC8sfFxccy8pICE9PSAtMTtcbiAgfSkpO1xuXG4gIGlmIChmcmFnbWVudHNbZGl2aWRlcl0gJiYgZnJhZ21lbnRzW2RpdmlkZXJdLmluZGV4T2YoJywnKSA9PT0gLTEpIHtcbiAgICBjb25zb2xlLndhcm4oJ09mZnNldHMgc2VwYXJhdGVkIGJ5IHdoaXRlIHNwYWNlKHMpIGFyZSBkZXByZWNhdGVkLCB1c2UgYSBjb21tYSAoLCkgaW5zdGVhZC4nKTtcbiAgfVxuXG4gIC8vIElmIGRpdmlkZXIgaXMgZm91bmQsIHdlIGRpdmlkZSB0aGUgbGlzdCBvZiB2YWx1ZXMgYW5kIG9wZXJhbmRzIHRvIGRpdmlkZVxuICAvLyB0aGVtIGJ5IG9mc2V0IFggYW5kIFkuXG4gIHZhciBzcGxpdFJlZ2V4ID0gL1xccyosXFxzKnxcXHMrLztcbiAgdmFyIG9wcyA9IGRpdmlkZXIgIT09IC0xID8gW2ZyYWdtZW50cy5zbGljZSgwLCBkaXZpZGVyKS5jb25jYXQoW2ZyYWdtZW50c1tkaXZpZGVyXS5zcGxpdChzcGxpdFJlZ2V4KVswXV0pLCBbZnJhZ21lbnRzW2RpdmlkZXJdLnNwbGl0KHNwbGl0UmVnZXgpWzFdXS5jb25jYXQoZnJhZ21lbnRzLnNsaWNlKGRpdmlkZXIgKyAxKSldIDogW2ZyYWdtZW50c107XG5cbiAgLy8gQ29udmVydCB0aGUgdmFsdWVzIHdpdGggdW5pdHMgdG8gYWJzb2x1dGUgcGl4ZWxzIHRvIGFsbG93IG91ciBjb21wdXRhdGlvbnNcbiAgb3BzID0gb3BzLm1hcChmdW5jdGlvbiAob3AsIGluZGV4KSB7XG4gICAgLy8gTW9zdCBvZiB0aGUgdW5pdHMgcmVseSBvbiB0aGUgb3JpZW50YXRpb24gb2YgdGhlIHBvcHBlclxuICAgIHZhciBtZWFzdXJlbWVudCA9IChpbmRleCA9PT0gMSA/ICF1c2VIZWlnaHQgOiB1c2VIZWlnaHQpID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgIHZhciBtZXJnZVdpdGhQcmV2aW91cyA9IGZhbHNlO1xuICAgIHJldHVybiBvcFxuICAgIC8vIFRoaXMgYWdncmVnYXRlcyBhbnkgYCtgIG9yIGAtYCBzaWduIHRoYXQgYXJlbid0IGNvbnNpZGVyZWQgb3BlcmF0b3JzXG4gICAgLy8gZS5nLjogMTAgKyArNSA9PiBbMTAsICssICs1XVxuICAgIC5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIGlmIChhW2EubGVuZ3RoIC0gMV0gPT09ICcnICYmIFsnKycsICctJ10uaW5kZXhPZihiKSAhPT0gLTEpIHtcbiAgICAgICAgYVthLmxlbmd0aCAtIDFdID0gYjtcbiAgICAgICAgbWVyZ2VXaXRoUHJldmlvdXMgPSB0cnVlO1xuICAgICAgICByZXR1cm4gYTtcbiAgICAgIH0gZWxzZSBpZiAobWVyZ2VXaXRoUHJldmlvdXMpIHtcbiAgICAgICAgYVthLmxlbmd0aCAtIDFdICs9IGI7XG4gICAgICAgIG1lcmdlV2l0aFByZXZpb3VzID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGEuY29uY2F0KGIpO1xuICAgICAgfVxuICAgIH0sIFtdKVxuICAgIC8vIEhlcmUgd2UgY29udmVydCB0aGUgc3RyaW5nIHZhbHVlcyBpbnRvIG51bWJlciB2YWx1ZXMgKGluIHB4KVxuICAgIC5tYXAoZnVuY3Rpb24gKHN0cikge1xuICAgICAgcmV0dXJuIHRvVmFsdWUoc3RyLCBtZWFzdXJlbWVudCwgcG9wcGVyT2Zmc2V0cywgcmVmZXJlbmNlT2Zmc2V0cyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIExvb3AgdHJvdWdoIHRoZSBvZmZzZXRzIGFycmF5cyBhbmQgZXhlY3V0ZSB0aGUgb3BlcmF0aW9uc1xuICBvcHMuZm9yRWFjaChmdW5jdGlvbiAob3AsIGluZGV4KSB7XG4gICAgb3AuZm9yRWFjaChmdW5jdGlvbiAoZnJhZywgaW5kZXgyKSB7XG4gICAgICBpZiAoaXNOdW1lcmljKGZyYWcpKSB7XG4gICAgICAgIG9mZnNldHNbaW5kZXhdICs9IGZyYWcgKiAob3BbaW5kZXgyIC0gMV0gPT09ICctJyA/IC0xIDogMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gb2Zmc2V0cztcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBNb2RpZmllcnNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSB1cGRhdGUgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAYXJndW1lbnQge051bWJlcnxTdHJpbmd9IG9wdGlvbnMub2Zmc2V0PTBcbiAqIFRoZSBvZmZzZXQgdmFsdWUgYXMgZGVzY3JpYmVkIGluIHRoZSBtb2RpZmllciBkZXNjcmlwdGlvblxuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBvZmZzZXQoZGF0YSwgX3JlZikge1xuICB2YXIgb2Zmc2V0ID0gX3JlZi5vZmZzZXQ7XG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudCxcbiAgICAgIF9kYXRhJG9mZnNldHMgPSBkYXRhLm9mZnNldHMsXG4gICAgICBwb3BwZXIgPSBfZGF0YSRvZmZzZXRzLnBvcHBlcixcbiAgICAgIHJlZmVyZW5jZSA9IF9kYXRhJG9mZnNldHMucmVmZXJlbmNlO1xuXG4gIHZhciBiYXNlUGxhY2VtZW50ID0gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG5cbiAgdmFyIG9mZnNldHMgPSB2b2lkIDA7XG4gIGlmIChpc051bWVyaWMoK29mZnNldCkpIHtcbiAgICBvZmZzZXRzID0gWytvZmZzZXQsIDBdO1xuICB9IGVsc2Uge1xuICAgIG9mZnNldHMgPSBwYXJzZU9mZnNldChvZmZzZXQsIHBvcHBlciwgcmVmZXJlbmNlLCBiYXNlUGxhY2VtZW50KTtcbiAgfVxuXG4gIGlmIChiYXNlUGxhY2VtZW50ID09PSAnbGVmdCcpIHtcbiAgICBwb3BwZXIudG9wICs9IG9mZnNldHNbMF07XG4gICAgcG9wcGVyLmxlZnQgLT0gb2Zmc2V0c1sxXTtcbiAgfSBlbHNlIGlmIChiYXNlUGxhY2VtZW50ID09PSAncmlnaHQnKSB7XG4gICAgcG9wcGVyLnRvcCArPSBvZmZzZXRzWzBdO1xuICAgIHBvcHBlci5sZWZ0ICs9IG9mZnNldHNbMV07XG4gIH0gZWxzZSBpZiAoYmFzZVBsYWNlbWVudCA9PT0gJ3RvcCcpIHtcbiAgICBwb3BwZXIubGVmdCArPSBvZmZzZXRzWzBdO1xuICAgIHBvcHBlci50b3AgLT0gb2Zmc2V0c1sxXTtcbiAgfSBlbHNlIGlmIChiYXNlUGxhY2VtZW50ID09PSAnYm90dG9tJykge1xuICAgIHBvcHBlci5sZWZ0ICs9IG9mZnNldHNbMF07XG4gICAgcG9wcGVyLnRvcCArPSBvZmZzZXRzWzFdO1xuICB9XG5cbiAgZGF0YS5wb3BwZXIgPSBwb3BwZXI7XG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IGB1cGRhdGVgIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBwcmV2ZW50T3ZlcmZsb3coZGF0YSwgb3B0aW9ucykge1xuICB2YXIgYm91bmRhcmllc0VsZW1lbnQgPSBvcHRpb25zLmJvdW5kYXJpZXNFbGVtZW50IHx8IGdldE9mZnNldFBhcmVudChkYXRhLmluc3RhbmNlLnBvcHBlcik7XG5cbiAgLy8gSWYgb2Zmc2V0UGFyZW50IGlzIHRoZSByZWZlcmVuY2UgZWxlbWVudCwgd2UgcmVhbGx5IHdhbnQgdG9cbiAgLy8gZ28gb25lIHN0ZXAgdXAgYW5kIHVzZSB0aGUgbmV4dCBvZmZzZXRQYXJlbnQgYXMgcmVmZXJlbmNlIHRvXG4gIC8vIGF2b2lkIHRvIG1ha2UgdGhpcyBtb2RpZmllciBjb21wbGV0ZWx5IHVzZWxlc3MgYW5kIGxvb2sgbGlrZSBicm9rZW5cbiAgaWYgKGRhdGEuaW5zdGFuY2UucmVmZXJlbmNlID09PSBib3VuZGFyaWVzRWxlbWVudCkge1xuICAgIGJvdW5kYXJpZXNFbGVtZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGJvdW5kYXJpZXNFbGVtZW50KTtcbiAgfVxuXG4gIC8vIE5PVEU6IERPTSBhY2Nlc3MgaGVyZVxuICAvLyByZXNldHMgdGhlIHBvcHBlcidzIHBvc2l0aW9uIHNvIHRoYXQgdGhlIGRvY3VtZW50IHNpemUgY2FuIGJlIGNhbGN1bGF0ZWQgZXhjbHVkaW5nXG4gIC8vIHRoZSBzaXplIG9mIHRoZSBwb3BwZXIgZWxlbWVudCBpdHNlbGZcbiAgdmFyIHRyYW5zZm9ybVByb3AgPSBnZXRTdXBwb3J0ZWRQcm9wZXJ0eU5hbWUoJ3RyYW5zZm9ybScpO1xuICB2YXIgcG9wcGVyU3R5bGVzID0gZGF0YS5pbnN0YW5jZS5wb3BwZXIuc3R5bGU7IC8vIGFzc2lnbm1lbnQgdG8gaGVscCBtaW5pZmljYXRpb25cbiAgdmFyIHRvcCA9IHBvcHBlclN0eWxlcy50b3AsXG4gICAgICBsZWZ0ID0gcG9wcGVyU3R5bGVzLmxlZnQsXG4gICAgICB0cmFuc2Zvcm0gPSBwb3BwZXJTdHlsZXNbdHJhbnNmb3JtUHJvcF07XG5cbiAgcG9wcGVyU3R5bGVzLnRvcCA9ICcnO1xuICBwb3BwZXJTdHlsZXMubGVmdCA9ICcnO1xuICBwb3BwZXJTdHlsZXNbdHJhbnNmb3JtUHJvcF0gPSAnJztcblxuICB2YXIgYm91bmRhcmllcyA9IGdldEJvdW5kYXJpZXMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEuaW5zdGFuY2UucmVmZXJlbmNlLCBvcHRpb25zLnBhZGRpbmcsIGJvdW5kYXJpZXNFbGVtZW50LCBkYXRhLnBvc2l0aW9uRml4ZWQpO1xuXG4gIC8vIE5PVEU6IERPTSBhY2Nlc3MgaGVyZVxuICAvLyByZXN0b3JlcyB0aGUgb3JpZ2luYWwgc3R5bGUgcHJvcGVydGllcyBhZnRlciB0aGUgb2Zmc2V0cyBoYXZlIGJlZW4gY29tcHV0ZWRcbiAgcG9wcGVyU3R5bGVzLnRvcCA9IHRvcDtcbiAgcG9wcGVyU3R5bGVzLmxlZnQgPSBsZWZ0O1xuICBwb3BwZXJTdHlsZXNbdHJhbnNmb3JtUHJvcF0gPSB0cmFuc2Zvcm07XG5cbiAgb3B0aW9ucy5ib3VuZGFyaWVzID0gYm91bmRhcmllcztcblxuICB2YXIgb3JkZXIgPSBvcHRpb25zLnByaW9yaXR5O1xuICB2YXIgcG9wcGVyID0gZGF0YS5vZmZzZXRzLnBvcHBlcjtcblxuICB2YXIgY2hlY2sgPSB7XG4gICAgcHJpbWFyeTogZnVuY3Rpb24gcHJpbWFyeShwbGFjZW1lbnQpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHBvcHBlcltwbGFjZW1lbnRdO1xuICAgICAgaWYgKHBvcHBlcltwbGFjZW1lbnRdIDwgYm91bmRhcmllc1twbGFjZW1lbnRdICYmICFvcHRpb25zLmVzY2FwZVdpdGhSZWZlcmVuY2UpIHtcbiAgICAgICAgdmFsdWUgPSBNYXRoLm1heChwb3BwZXJbcGxhY2VtZW50XSwgYm91bmRhcmllc1twbGFjZW1lbnRdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eSh7fSwgcGxhY2VtZW50LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZWNvbmRhcnk6IGZ1bmN0aW9uIHNlY29uZGFyeShwbGFjZW1lbnQpIHtcbiAgICAgIHZhciBtYWluU2lkZSA9IHBsYWNlbWVudCA9PT0gJ3JpZ2h0JyA/ICdsZWZ0JyA6ICd0b3AnO1xuICAgICAgdmFyIHZhbHVlID0gcG9wcGVyW21haW5TaWRlXTtcbiAgICAgIGlmIChwb3BwZXJbcGxhY2VtZW50XSA+IGJvdW5kYXJpZXNbcGxhY2VtZW50XSAmJiAhb3B0aW9ucy5lc2NhcGVXaXRoUmVmZXJlbmNlKSB7XG4gICAgICAgIHZhbHVlID0gTWF0aC5taW4ocG9wcGVyW21haW5TaWRlXSwgYm91bmRhcmllc1twbGFjZW1lbnRdIC0gKHBsYWNlbWVudCA9PT0gJ3JpZ2h0JyA/IHBvcHBlci53aWR0aCA6IHBvcHBlci5oZWlnaHQpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eSh7fSwgbWFpblNpZGUsIHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgb3JkZXIuZm9yRWFjaChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgdmFyIHNpZGUgPSBbJ2xlZnQnLCAndG9wJ10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMSA/ICdwcmltYXJ5JyA6ICdzZWNvbmRhcnknO1xuICAgIHBvcHBlciA9IF9leHRlbmRzKHt9LCBwb3BwZXIsIGNoZWNrW3NpZGVdKHBsYWNlbWVudCkpO1xuICB9KTtcblxuICBkYXRhLm9mZnNldHMucG9wcGVyID0gcG9wcGVyO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IGB1cGRhdGVgIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBzaGlmdChkYXRhKSB7XG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbiAgdmFyIHNoaWZ0dmFyaWF0aW9uID0gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG5cbiAgLy8gaWYgc2hpZnQgc2hpZnR2YXJpYXRpb24gaXMgc3BlY2lmaWVkLCBydW4gdGhlIG1vZGlmaWVyXG4gIGlmIChzaGlmdHZhcmlhdGlvbikge1xuICAgIHZhciBfZGF0YSRvZmZzZXRzID0gZGF0YS5vZmZzZXRzLFxuICAgICAgICByZWZlcmVuY2UgPSBfZGF0YSRvZmZzZXRzLnJlZmVyZW5jZSxcbiAgICAgICAgcG9wcGVyID0gX2RhdGEkb2Zmc2V0cy5wb3BwZXI7XG5cbiAgICB2YXIgaXNWZXJ0aWNhbCA9IFsnYm90dG9tJywgJ3RvcCddLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgIT09IC0xO1xuICAgIHZhciBzaWRlID0gaXNWZXJ0aWNhbCA/ICdsZWZ0JyA6ICd0b3AnO1xuICAgIHZhciBtZWFzdXJlbWVudCA9IGlzVmVydGljYWwgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG5cbiAgICB2YXIgc2hpZnRPZmZzZXRzID0ge1xuICAgICAgc3RhcnQ6IGRlZmluZVByb3BlcnR5KHt9LCBzaWRlLCByZWZlcmVuY2Vbc2lkZV0pLFxuICAgICAgZW5kOiBkZWZpbmVQcm9wZXJ0eSh7fSwgc2lkZSwgcmVmZXJlbmNlW3NpZGVdICsgcmVmZXJlbmNlW21lYXN1cmVtZW50XSAtIHBvcHBlclttZWFzdXJlbWVudF0pXG4gICAgfTtcblxuICAgIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSBfZXh0ZW5kcyh7fSwgcG9wcGVyLCBzaGlmdE9mZnNldHNbc2hpZnR2YXJpYXRpb25dKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHVwZGF0ZSBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gaGlkZShkYXRhKSB7XG4gIGlmICghaXNNb2RpZmllclJlcXVpcmVkKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCAnaGlkZScsICdwcmV2ZW50T3ZlcmZsb3cnKSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgdmFyIHJlZlJlY3QgPSBkYXRhLm9mZnNldHMucmVmZXJlbmNlO1xuICB2YXIgYm91bmQgPSBmaW5kKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCBmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICByZXR1cm4gbW9kaWZpZXIubmFtZSA9PT0gJ3ByZXZlbnRPdmVyZmxvdyc7XG4gIH0pLmJvdW5kYXJpZXM7XG5cbiAgaWYgKHJlZlJlY3QuYm90dG9tIDwgYm91bmQudG9wIHx8IHJlZlJlY3QubGVmdCA+IGJvdW5kLnJpZ2h0IHx8IHJlZlJlY3QudG9wID4gYm91bmQuYm90dG9tIHx8IHJlZlJlY3QucmlnaHQgPCBib3VuZC5sZWZ0KSB7XG4gICAgLy8gQXZvaWQgdW5uZWNlc3NhcnkgRE9NIGFjY2VzcyBpZiB2aXNpYmlsaXR5IGhhc24ndCBjaGFuZ2VkXG4gICAgaWYgKGRhdGEuaGlkZSA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgZGF0YS5oaWRlID0gdHJ1ZTtcbiAgICBkYXRhLmF0dHJpYnV0ZXNbJ3gtb3V0LW9mLWJvdW5kYXJpZXMnXSA9ICcnO1xuICB9IGVsc2Uge1xuICAgIC8vIEF2b2lkIHVubmVjZXNzYXJ5IERPTSBhY2Nlc3MgaWYgdmlzaWJpbGl0eSBoYXNuJ3QgY2hhbmdlZFxuICAgIGlmIChkYXRhLmhpZGUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBkYXRhLmhpZGUgPSBmYWxzZTtcbiAgICBkYXRhLmF0dHJpYnV0ZXNbJ3gtb3V0LW9mLWJvdW5kYXJpZXMnXSA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgYHVwZGF0ZWAgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cbmZ1bmN0aW9uIGlubmVyKGRhdGEpIHtcbiAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICB2YXIgX2RhdGEkb2Zmc2V0cyA9IGRhdGEub2Zmc2V0cyxcbiAgICAgIHBvcHBlciA9IF9kYXRhJG9mZnNldHMucG9wcGVyLFxuICAgICAgcmVmZXJlbmNlID0gX2RhdGEkb2Zmc2V0cy5yZWZlcmVuY2U7XG5cbiAgdmFyIGlzSG9yaXogPSBbJ2xlZnQnLCAncmlnaHQnXS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMTtcblxuICB2YXIgc3VidHJhY3RMZW5ndGggPSBbJ3RvcCcsICdsZWZ0J10uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA9PT0gLTE7XG5cbiAgcG9wcGVyW2lzSG9yaXogPyAnbGVmdCcgOiAndG9wJ10gPSByZWZlcmVuY2VbYmFzZVBsYWNlbWVudF0gLSAoc3VidHJhY3RMZW5ndGggPyBwb3BwZXJbaXNIb3JpeiA/ICd3aWR0aCcgOiAnaGVpZ2h0J10gOiAwKTtcblxuICBkYXRhLnBsYWNlbWVudCA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSBnZXRDbGllbnRSZWN0KHBvcHBlcik7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogTW9kaWZpZXIgZnVuY3Rpb24sIGVhY2ggbW9kaWZpZXIgY2FuIGhhdmUgYSBmdW5jdGlvbiBvZiB0aGlzIHR5cGUgYXNzaWduZWRcbiAqIHRvIGl0cyBgZm5gIHByb3BlcnR5LjxiciAvPlxuICogVGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggdXBkYXRlLCB0aGlzIG1lYW5zIHRoYXQgeW91IG11c3RcbiAqIG1ha2Ugc3VyZSB0aGV5IGFyZSBwZXJmb3JtYW50IGVub3VnaCB0byBhdm9pZCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy5cbiAqXG4gKiBAZnVuY3Rpb24gTW9kaWZpZXJGblxuICogQGFyZ3VtZW50IHtkYXRhT2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtkYXRhT2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cblxuLyoqXG4gKiBNb2RpZmllcnMgYXJlIHBsdWdpbnMgdXNlZCB0byBhbHRlciB0aGUgYmVoYXZpb3Igb2YgeW91ciBwb3BwZXJzLjxiciAvPlxuICogUG9wcGVyLmpzIHVzZXMgYSBzZXQgb2YgOSBtb2RpZmllcnMgdG8gcHJvdmlkZSBhbGwgdGhlIGJhc2ljIGZ1bmN0aW9uYWxpdGllc1xuICogbmVlZGVkIGJ5IHRoZSBsaWJyYXJ5LlxuICpcbiAqIFVzdWFsbHkgeW91IGRvbid0IHdhbnQgdG8gb3ZlcnJpZGUgdGhlIGBvcmRlcmAsIGBmbmAgYW5kIGBvbkxvYWRgIHByb3BzLlxuICogQWxsIHRoZSBvdGhlciBwcm9wZXJ0aWVzIGFyZSBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIGJlIHR3ZWFrZWQuXG4gKiBAbmFtZXNwYWNlIG1vZGlmaWVyc1xuICovXG52YXIgbW9kaWZpZXJzID0ge1xuICAvKipcbiAgICogTW9kaWZpZXIgdXNlZCB0byBzaGlmdCB0aGUgcG9wcGVyIG9uIHRoZSBzdGFydCBvciBlbmQgb2YgaXRzIHJlZmVyZW5jZVxuICAgKiBlbGVtZW50LjxiciAvPlxuICAgKiBJdCB3aWxsIHJlYWQgdGhlIHZhcmlhdGlvbiBvZiB0aGUgYHBsYWNlbWVudGAgcHJvcGVydHkuPGJyIC8+XG4gICAqIEl0IGNhbiBiZSBvbmUgZWl0aGVyIGAtZW5kYCBvciBgLXN0YXJ0YC5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIHNoaWZ0OiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTEwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogMTAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogc2hpZnRcbiAgfSxcblxuICAvKipcbiAgICogVGhlIGBvZmZzZXRgIG1vZGlmaWVyIGNhbiBzaGlmdCB5b3VyIHBvcHBlciBvbiBib3RoIGl0cyBheGlzLlxuICAgKlxuICAgKiBJdCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgdW5pdHM6XG4gICAqIC0gYHB4YCBvciB1bml0LWxlc3MsIGludGVycHJldGVkIGFzIHBpeGVsc1xuICAgKiAtIGAlYCBvciBgJXJgLCBwZXJjZW50YWdlIHJlbGF0aXZlIHRvIHRoZSBsZW5ndGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50XG4gICAqIC0gYCVwYCwgcGVyY2VudGFnZSByZWxhdGl2ZSB0byB0aGUgbGVuZ3RoIG9mIHRoZSBwb3BwZXIgZWxlbWVudFxuICAgKiAtIGB2d2AsIENTUyB2aWV3cG9ydCB3aWR0aCB1bml0XG4gICAqIC0gYHZoYCwgQ1NTIHZpZXdwb3J0IGhlaWdodCB1bml0XG4gICAqXG4gICAqIEZvciBsZW5ndGggaXMgaW50ZW5kZWQgdGhlIG1haW4gYXhpcyByZWxhdGl2ZSB0byB0aGUgcGxhY2VtZW50IG9mIHRoZSBwb3BwZXIuPGJyIC8+XG4gICAqIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgcGxhY2VtZW50IGlzIGB0b3BgIG9yIGBib3R0b21gLCB0aGUgbGVuZ3RoIHdpbGwgYmUgdGhlXG4gICAqIGB3aWR0aGAuIEluIGNhc2Ugb2YgYGxlZnRgIG9yIGByaWdodGAsIGl0IHdpbGwgYmUgdGhlIGBoZWlnaHRgLlxuICAgKlxuICAgKiBZb3UgY2FuIHByb3ZpZGUgYSBzaW5nbGUgdmFsdWUgKGFzIGBOdW1iZXJgIG9yIGBTdHJpbmdgKSwgb3IgYSBwYWlyIG9mIHZhbHVlc1xuICAgKiBhcyBgU3RyaW5nYCBkaXZpZGVkIGJ5IGEgY29tbWEgb3Igb25lIChvciBtb3JlKSB3aGl0ZSBzcGFjZXMuPGJyIC8+XG4gICAqIFRoZSBsYXR0ZXIgaXMgYSBkZXByZWNhdGVkIG1ldGhvZCBiZWNhdXNlIGl0IGxlYWRzIHRvIGNvbmZ1c2lvbiBhbmQgd2lsbCBiZVxuICAgKiByZW1vdmVkIGluIHYyLjxiciAvPlxuICAgKiBBZGRpdGlvbmFsbHksIGl0IGFjY2VwdHMgYWRkaXRpb25zIGFuZCBzdWJ0cmFjdGlvbnMgYmV0d2VlbiBkaWZmZXJlbnQgdW5pdHMuXG4gICAqIE5vdGUgdGhhdCBtdWx0aXBsaWNhdGlvbnMgYW5kIGRpdmlzaW9ucyBhcmVuJ3Qgc3VwcG9ydGVkLlxuICAgKlxuICAgKiBWYWxpZCBleGFtcGxlcyBhcmU6XG4gICAqIGBgYFxuICAgKiAxMFxuICAgKiAnMTAlJ1xuICAgKiAnMTAsIDEwJ1xuICAgKiAnMTAlLCAxMCdcbiAgICogJzEwICsgMTAlJ1xuICAgKiAnMTAgLSA1dmggKyAzJSdcbiAgICogJy0xMHB4ICsgNXZoLCA1cHggLSA2JSdcbiAgICogYGBgXG4gICAqID4gKipOQioqOiBJZiB5b3UgZGVzaXJlIHRvIGFwcGx5IG9mZnNldHMgdG8geW91ciBwb3BwZXJzIGluIGEgd2F5IHRoYXQgbWF5IG1ha2UgdGhlbSBvdmVybGFwXG4gICAqID4gd2l0aCB0aGVpciByZWZlcmVuY2UgZWxlbWVudCwgdW5mb3J0dW5hdGVseSwgeW91IHdpbGwgaGF2ZSB0byBkaXNhYmxlIHRoZSBgZmxpcGAgbW9kaWZpZXIuXG4gICAqID4gWW91IGNhbiByZWFkIG1vcmUgb24gdGhpcyBhdCB0aGlzIFtpc3N1ZV0oaHR0cHM6Ly9naXRodWIuY29tL0ZlelZyYXN0YS9wb3BwZXIuanMvaXNzdWVzLzM3MykuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBvZmZzZXQ6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9MjAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiAyMDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBvZmZzZXQsXG4gICAgLyoqIEBwcm9wIHtOdW1iZXJ8U3RyaW5nfSBvZmZzZXQ9MFxuICAgICAqIFRoZSBvZmZzZXQgdmFsdWUgYXMgZGVzY3JpYmVkIGluIHRoZSBtb2RpZmllciBkZXNjcmlwdGlvblxuICAgICAqL1xuICAgIG9mZnNldDogMFxuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIHByZXZlbnQgdGhlIHBvcHBlciBmcm9tIGJlaW5nIHBvc2l0aW9uZWQgb3V0c2lkZSB0aGUgYm91bmRhcnkuXG4gICAqXG4gICAqIEEgc2NlbmFyaW8gZXhpc3RzIHdoZXJlIHRoZSByZWZlcmVuY2UgaXRzZWxmIGlzIG5vdCB3aXRoaW4gdGhlIGJvdW5kYXJpZXMuPGJyIC8+XG4gICAqIFdlIGNhbiBzYXkgaXQgaGFzIFwiZXNjYXBlZCB0aGUgYm91bmRhcmllc1wiIOKAlCBvciBqdXN0IFwiZXNjYXBlZFwiLjxiciAvPlxuICAgKiBJbiB0aGlzIGNhc2Ugd2UgbmVlZCB0byBkZWNpZGUgd2hldGhlciB0aGUgcG9wcGVyIHNob3VsZCBlaXRoZXI6XG4gICAqXG4gICAqIC0gZGV0YWNoIGZyb20gdGhlIHJlZmVyZW5jZSBhbmQgcmVtYWluIFwidHJhcHBlZFwiIGluIHRoZSBib3VuZGFyaWVzLCBvclxuICAgKiAtIGlmIGl0IHNob3VsZCBpZ25vcmUgdGhlIGJvdW5kYXJ5IGFuZCBcImVzY2FwZSB3aXRoIGl0cyByZWZlcmVuY2VcIlxuICAgKlxuICAgKiBXaGVuIGBlc2NhcGVXaXRoUmVmZXJlbmNlYCBpcyBzZXQgdG9gdHJ1ZWAgYW5kIHJlZmVyZW5jZSBpcyBjb21wbGV0ZWx5XG4gICAqIG91dHNpZGUgaXRzIGJvdW5kYXJpZXMsIHRoZSBwb3BwZXIgd2lsbCBvdmVyZmxvdyAob3IgY29tcGxldGVseSBsZWF2ZSlcbiAgICogdGhlIGJvdW5kYXJpZXMgaW4gb3JkZXIgdG8gcmVtYWluIGF0dGFjaGVkIHRvIHRoZSBlZGdlIG9mIHRoZSByZWZlcmVuY2UuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBwcmV2ZW50T3ZlcmZsb3c6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9MzAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiAzMDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBwcmV2ZW50T3ZlcmZsb3csXG4gICAgLyoqXG4gICAgICogQHByb3Age0FycmF5fSBbcHJpb3JpdHk9WydsZWZ0JywncmlnaHQnLCd0b3AnLCdib3R0b20nXV1cbiAgICAgKiBQb3BwZXIgd2lsbCB0cnkgdG8gcHJldmVudCBvdmVyZmxvdyBmb2xsb3dpbmcgdGhlc2UgcHJpb3JpdGllcyBieSBkZWZhdWx0LFxuICAgICAqIHRoZW4sIGl0IGNvdWxkIG92ZXJmbG93IG9uIHRoZSBsZWZ0IGFuZCBvbiB0b3Agb2YgdGhlIGBib3VuZGFyaWVzRWxlbWVudGBcbiAgICAgKi9cbiAgICBwcmlvcml0eTogWydsZWZ0JywgJ3JpZ2h0JywgJ3RvcCcsICdib3R0b20nXSxcbiAgICAvKipcbiAgICAgKiBAcHJvcCB7bnVtYmVyfSBwYWRkaW5nPTVcbiAgICAgKiBBbW91bnQgb2YgcGl4ZWwgdXNlZCB0byBkZWZpbmUgYSBtaW5pbXVtIGRpc3RhbmNlIGJldHdlZW4gdGhlIGJvdW5kYXJpZXNcbiAgICAgKiBhbmQgdGhlIHBvcHBlci4gVGhpcyBtYWtlcyBzdXJlIHRoZSBwb3BwZXIgYWx3YXlzIGhhcyBhIGxpdHRsZSBwYWRkaW5nXG4gICAgICogYmV0d2VlbiB0aGUgZWRnZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuICAgIHBhZGRpbmc6IDUsXG4gICAgLyoqXG4gICAgICogQHByb3Age1N0cmluZ3xIVE1MRWxlbWVudH0gYm91bmRhcmllc0VsZW1lbnQ9J3Njcm9sbFBhcmVudCdcbiAgICAgKiBCb3VuZGFyaWVzIHVzZWQgYnkgdGhlIG1vZGlmaWVyLiBDYW4gYmUgYHNjcm9sbFBhcmVudGAsIGB3aW5kb3dgLFxuICAgICAqIGB2aWV3cG9ydGAgb3IgYW55IERPTSBlbGVtZW50LlxuICAgICAqL1xuICAgIGJvdW5kYXJpZXNFbGVtZW50OiAnc2Nyb2xsUGFyZW50J1xuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIG1ha2Ugc3VyZSB0aGUgcmVmZXJlbmNlIGFuZCBpdHMgcG9wcGVyIHN0YXkgbmVhciBlYWNoIG90aGVyXG4gICAqIHdpdGhvdXQgbGVhdmluZyBhbnkgZ2FwIGJldHdlZW4gdGhlIHR3by4gRXNwZWNpYWxseSB1c2VmdWwgd2hlbiB0aGUgYXJyb3cgaXNcbiAgICogZW5hYmxlZCBhbmQgeW91IHdhbnQgdG8gZW5zdXJlIHRoYXQgaXQgcG9pbnRzIHRvIGl0cyByZWZlcmVuY2UgZWxlbWVudC5cbiAgICogSXQgY2FyZXMgb25seSBhYm91dCB0aGUgZmlyc3QgYXhpcy4gWW91IGNhbiBzdGlsbCBoYXZlIHBvcHBlcnMgd2l0aCBtYXJnaW5cbiAgICogYmV0d2VlbiB0aGUgcG9wcGVyIGFuZCBpdHMgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBrZWVwVG9nZXRoZXI6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9NDAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA0MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBrZWVwVG9nZXRoZXJcbiAgfSxcblxuICAvKipcbiAgICogVGhpcyBtb2RpZmllciBpcyB1c2VkIHRvIG1vdmUgdGhlIGBhcnJvd0VsZW1lbnRgIG9mIHRoZSBwb3BwZXIgdG8gbWFrZVxuICAgKiBzdXJlIGl0IGlzIHBvc2l0aW9uZWQgYmV0d2VlbiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQgYW5kIGl0cyBwb3BwZXIgZWxlbWVudC5cbiAgICogSXQgd2lsbCByZWFkIHRoZSBvdXRlciBzaXplIG9mIHRoZSBgYXJyb3dFbGVtZW50YCBub2RlIHRvIGRldGVjdCBob3cgbWFueVxuICAgKiBwaXhlbHMgb2YgY29uanVuY3Rpb24gYXJlIG5lZWRlZC5cbiAgICpcbiAgICogSXQgaGFzIG5vIGVmZmVjdCBpZiBubyBgYXJyb3dFbGVtZW50YCBpcyBwcm92aWRlZC5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGFycm93OiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTUwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogNTAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogYXJyb3csXG4gICAgLyoqIEBwcm9wIHtTdHJpbmd8SFRNTEVsZW1lbnR9IGVsZW1lbnQ9J1t4LWFycm93XScgLSBTZWxlY3RvciBvciBub2RlIHVzZWQgYXMgYXJyb3cgKi9cbiAgICBlbGVtZW50OiAnW3gtYXJyb3ddJ1xuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIGZsaXAgdGhlIHBvcHBlcidzIHBsYWNlbWVudCB3aGVuIGl0IHN0YXJ0cyB0byBvdmVybGFwIGl0c1xuICAgKiByZWZlcmVuY2UgZWxlbWVudC5cbiAgICpcbiAgICogUmVxdWlyZXMgdGhlIGBwcmV2ZW50T3ZlcmZsb3dgIG1vZGlmaWVyIGJlZm9yZSBpdCBpbiBvcmRlciB0byB3b3JrLlxuICAgKlxuICAgKiAqKk5PVEU6KiogdGhpcyBtb2RpZmllciB3aWxsIGludGVycnVwdCB0aGUgY3VycmVudCB1cGRhdGUgY3ljbGUgYW5kIHdpbGxcbiAgICogcmVzdGFydCBpdCBpZiBpdCBkZXRlY3RzIHRoZSBuZWVkIHRvIGZsaXAgdGhlIHBsYWNlbWVudC5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGZsaXA6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9NjAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA2MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBmbGlwLFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtTdHJpbmd8QXJyYXl9IGJlaGF2aW9yPSdmbGlwJ1xuICAgICAqIFRoZSBiZWhhdmlvciB1c2VkIHRvIGNoYW5nZSB0aGUgcG9wcGVyJ3MgcGxhY2VtZW50LiBJdCBjYW4gYmUgb25lIG9mXG4gICAgICogYGZsaXBgLCBgY2xvY2t3aXNlYCwgYGNvdW50ZXJjbG9ja3dpc2VgIG9yIGFuIGFycmF5IHdpdGggYSBsaXN0IG9mIHZhbGlkXG4gICAgICogcGxhY2VtZW50cyAod2l0aCBvcHRpb25hbCB2YXJpYXRpb25zKVxuICAgICAqL1xuICAgIGJlaGF2aW9yOiAnZmxpcCcsXG4gICAgLyoqXG4gICAgICogQHByb3Age251bWJlcn0gcGFkZGluZz01XG4gICAgICogVGhlIHBvcHBlciB3aWxsIGZsaXAgaWYgaXQgaGl0cyB0aGUgZWRnZXMgb2YgdGhlIGBib3VuZGFyaWVzRWxlbWVudGBcbiAgICAgKi9cbiAgICBwYWRkaW5nOiA1LFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtTdHJpbmd8SFRNTEVsZW1lbnR9IGJvdW5kYXJpZXNFbGVtZW50PSd2aWV3cG9ydCdcbiAgICAgKiBUaGUgZWxlbWVudCB3aGljaCB3aWxsIGRlZmluZSB0aGUgYm91bmRhcmllcyBvZiB0aGUgcG9wcGVyIHBvc2l0aW9uLlxuICAgICAqIFRoZSBwb3BwZXIgd2lsbCBuZXZlciBiZSBwbGFjZWQgb3V0c2lkZSBvZiB0aGUgZGVmaW5lZCBib3VuZGFyaWVzXG4gICAgICogKGV4Y2VwdCBpZiBga2VlcFRvZ2V0aGVyYCBpcyBlbmFibGVkKVxuICAgICAqL1xuICAgIGJvdW5kYXJpZXNFbGVtZW50OiAndmlld3BvcnQnLFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtCb29sZWFufSBmbGlwVmFyaWF0aW9ucz1mYWxzZVxuICAgICAqIFRoZSBwb3BwZXIgd2lsbCBzd2l0Y2ggcGxhY2VtZW50IHZhcmlhdGlvbiBiZXR3ZWVuIGAtc3RhcnRgIGFuZCBgLWVuZGAgd2hlblxuICAgICAqIHRoZSByZWZlcmVuY2UgZWxlbWVudCBvdmVybGFwcyBpdHMgYm91bmRhcmllcy5cbiAgICAgKlxuICAgICAqIFRoZSBvcmlnaW5hbCBwbGFjZW1lbnQgc2hvdWxkIGhhdmUgYSBzZXQgdmFyaWF0aW9uLlxuICAgICAqL1xuICAgIGZsaXBWYXJpYXRpb25zOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAcHJvcCB7Qm9vbGVhbn0gZmxpcFZhcmlhdGlvbnNCeUNvbnRlbnQ9ZmFsc2VcbiAgICAgKiBUaGUgcG9wcGVyIHdpbGwgc3dpdGNoIHBsYWNlbWVudCB2YXJpYXRpb24gYmV0d2VlbiBgLXN0YXJ0YCBhbmQgYC1lbmRgIHdoZW5cbiAgICAgKiB0aGUgcG9wcGVyIGVsZW1lbnQgb3ZlcmxhcHMgaXRzIHJlZmVyZW5jZSBib3VuZGFyaWVzLlxuICAgICAqXG4gICAgICogVGhlIG9yaWdpbmFsIHBsYWNlbWVudCBzaG91bGQgaGF2ZSBhIHNldCB2YXJpYXRpb24uXG4gICAgICovXG4gICAgZmxpcFZhcmlhdGlvbnNCeUNvbnRlbnQ6IGZhbHNlXG4gIH0sXG5cbiAgLyoqXG4gICAqIE1vZGlmaWVyIHVzZWQgdG8gbWFrZSB0aGUgcG9wcGVyIGZsb3cgdG93YXJkIHRoZSBpbm5lciBvZiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAqIEJ5IGRlZmF1bHQsIHdoZW4gdGhpcyBtb2RpZmllciBpcyBkaXNhYmxlZCwgdGhlIHBvcHBlciB3aWxsIGJlIHBsYWNlZCBvdXRzaWRlXG4gICAqIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGlubmVyOiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTcwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogNzAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD1mYWxzZSAtIFdoZXRoZXIgdGhlIG1vZGlmaWVyIGlzIGVuYWJsZWQgb3Igbm90ICovXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBpbm5lclxuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIGhpZGUgdGhlIHBvcHBlciB3aGVuIGl0cyByZWZlcmVuY2UgZWxlbWVudCBpcyBvdXRzaWRlIG9mIHRoZVxuICAgKiBwb3BwZXIgYm91bmRhcmllcy4gSXQgd2lsbCBzZXQgYSBgeC1vdXQtb2YtYm91bmRhcmllc2AgYXR0cmlidXRlIHdoaWNoIGNhblxuICAgKiBiZSB1c2VkIHRvIGhpZGUgd2l0aCBhIENTUyBzZWxlY3RvciB0aGUgcG9wcGVyIHdoZW4gaXRzIHJlZmVyZW5jZSBpc1xuICAgKiBvdXQgb2YgYm91bmRhcmllcy5cbiAgICpcbiAgICogUmVxdWlyZXMgdGhlIGBwcmV2ZW50T3ZlcmZsb3dgIG1vZGlmaWVyIGJlZm9yZSBpdCBpbiBvcmRlciB0byB3b3JrLlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgaGlkZToge1xuICAgIC8qKiBAcHJvcCB7bnVtYmVyfSBvcmRlcj04MDAgLSBJbmRleCB1c2VkIHRvIGRlZmluZSB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uICovXG4gICAgb3JkZXI6IDgwMCxcbiAgICAvKiogQHByb3Age0Jvb2xlYW59IGVuYWJsZWQ9dHJ1ZSAtIFdoZXRoZXIgdGhlIG1vZGlmaWVyIGlzIGVuYWJsZWQgb3Igbm90ICovXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAvKiogQHByb3Age01vZGlmaWVyRm59ICovXG4gICAgZm46IGhpZGVcbiAgfSxcblxuICAvKipcbiAgICogQ29tcHV0ZXMgdGhlIHN0eWxlIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBwb3BwZXIgZWxlbWVudCB0byBnZXRzXG4gICAqIHByb3Blcmx5IHBvc2l0aW9uZWQuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGlzIG1vZGlmaWVyIHdpbGwgbm90IHRvdWNoIHRoZSBET00sIGl0IGp1c3QgcHJlcGFyZXMgdGhlIHN0eWxlc1xuICAgKiBzbyB0aGF0IGBhcHBseVN0eWxlYCBtb2RpZmllciBjYW4gYXBwbHkgaXQuIFRoaXMgc2VwYXJhdGlvbiBpcyB1c2VmdWxcbiAgICogaW4gY2FzZSB5b3UgbmVlZCB0byByZXBsYWNlIGBhcHBseVN0eWxlYCB3aXRoIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uLlxuICAgKlxuICAgKiBUaGlzIG1vZGlmaWVyIGhhcyBgODUwYCBhcyBgb3JkZXJgIHZhbHVlIHRvIG1haW50YWluIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICogd2l0aCBwcmV2aW91cyB2ZXJzaW9ucyBvZiBQb3BwZXIuanMuIEV4cGVjdCB0aGUgbW9kaWZpZXJzIG9yZGVyaW5nIG1ldGhvZFxuICAgKiB0byBjaGFuZ2UgaW4gZnV0dXJlIG1ham9yIHZlcnNpb25zIG9mIHRoZSBsaWJyYXJ5LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgY29tcHV0ZVN0eWxlOiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTg1MCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogODUwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogY29tcHV0ZVN0eWxlLFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtCb29sZWFufSBncHVBY2NlbGVyYXRpb249dHJ1ZVxuICAgICAqIElmIHRydWUsIGl0IHVzZXMgdGhlIENTUyAzRCB0cmFuc2Zvcm1hdGlvbiB0byBwb3NpdGlvbiB0aGUgcG9wcGVyLlxuICAgICAqIE90aGVyd2lzZSwgaXQgd2lsbCB1c2UgdGhlIGB0b3BgIGFuZCBgbGVmdGAgcHJvcGVydGllc1xuICAgICAqL1xuICAgIGdwdUFjY2VsZXJhdGlvbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAcHJvcCB7c3RyaW5nfSBbeD0nYm90dG9tJ11cbiAgICAgKiBXaGVyZSB0byBhbmNob3IgdGhlIFggYXhpcyAoYGJvdHRvbWAgb3IgYHRvcGApLiBBS0EgWCBvZmZzZXQgb3JpZ2luLlxuICAgICAqIENoYW5nZSB0aGlzIGlmIHlvdXIgcG9wcGVyIHNob3VsZCBncm93IGluIGEgZGlyZWN0aW9uIGRpZmZlcmVudCBmcm9tIGBib3R0b21gXG4gICAgICovXG4gICAgeDogJ2JvdHRvbScsXG4gICAgLyoqXG4gICAgICogQHByb3Age3N0cmluZ30gW3g9J2xlZnQnXVxuICAgICAqIFdoZXJlIHRvIGFuY2hvciB0aGUgWSBheGlzIChgbGVmdGAgb3IgYHJpZ2h0YCkuIEFLQSBZIG9mZnNldCBvcmlnaW4uXG4gICAgICogQ2hhbmdlIHRoaXMgaWYgeW91ciBwb3BwZXIgc2hvdWxkIGdyb3cgaW4gYSBkaXJlY3Rpb24gZGlmZmVyZW50IGZyb20gYHJpZ2h0YFxuICAgICAqL1xuICAgIHk6ICdyaWdodCdcbiAgfSxcblxuICAvKipcbiAgICogQXBwbGllcyB0aGUgY29tcHV0ZWQgc3R5bGVzIHRvIHRoZSBwb3BwZXIgZWxlbWVudC5cbiAgICpcbiAgICogQWxsIHRoZSBET00gbWFuaXB1bGF0aW9ucyBhcmUgbGltaXRlZCB0byB0aGlzIG1vZGlmaWVyLiBUaGlzIGlzIHVzZWZ1bCBpbiBjYXNlXG4gICAqIHlvdSB3YW50IHRvIGludGVncmF0ZSBQb3BwZXIuanMgaW5zaWRlIGEgZnJhbWV3b3JrIG9yIHZpZXcgbGlicmFyeSBhbmQgeW91XG4gICAqIHdhbnQgdG8gZGVsZWdhdGUgYWxsIHRoZSBET00gbWFuaXB1bGF0aW9ucyB0byBpdC5cbiAgICpcbiAgICogTm90ZSB0aGF0IGlmIHlvdSBkaXNhYmxlIHRoaXMgbW9kaWZpZXIsIHlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcG9wcGVyIGVsZW1lbnRcbiAgICogaGFzIGl0cyBwb3NpdGlvbiBzZXQgdG8gYGFic29sdXRlYCBiZWZvcmUgUG9wcGVyLmpzIGNhbiBkbyBpdHMgd29yayFcbiAgICpcbiAgICogSnVzdCBkaXNhYmxlIHRoaXMgbW9kaWZpZXIgYW5kIGRlZmluZSB5b3VyIG93biB0byBhY2hpZXZlIHRoZSBkZXNpcmVkIGVmZmVjdC5cbiAgICpcbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGFwcGx5U3R5bGU6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9OTAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA5MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBhcHBseVN0eWxlLFxuICAgIC8qKiBAcHJvcCB7RnVuY3Rpb259ICovXG4gICAgb25Mb2FkOiBhcHBseVN0eWxlT25Mb2FkLFxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMS4xMC4wLCB0aGUgcHJvcGVydHkgbW92ZWQgdG8gYGNvbXB1dGVTdHlsZWAgbW9kaWZpZXJcbiAgICAgKiBAcHJvcCB7Qm9vbGVhbn0gZ3B1QWNjZWxlcmF0aW9uPXRydWVcbiAgICAgKiBJZiB0cnVlLCBpdCB1c2VzIHRoZSBDU1MgM0QgdHJhbnNmb3JtYXRpb24gdG8gcG9zaXRpb24gdGhlIHBvcHBlci5cbiAgICAgKiBPdGhlcndpc2UsIGl0IHdpbGwgdXNlIHRoZSBgdG9wYCBhbmQgYGxlZnRgIHByb3BlcnRpZXNcbiAgICAgKi9cbiAgICBncHVBY2NlbGVyYXRpb246IHVuZGVmaW5lZFxuICB9XG59O1xuXG4vKipcbiAqIFRoZSBgZGF0YU9iamVjdGAgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIGJ5IFBvcHBlci5qcy5cbiAqIFRoaXMgb2JqZWN0IGlzIHBhc3NlZCB0byBtb2RpZmllcnMgYW5kIHRvIHRoZSBgb25DcmVhdGVgIGFuZCBgb25VcGRhdGVgIGNhbGxiYWNrcy5cbiAqIEBuYW1lIGRhdGFPYmplY3RcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkYXRhLmluc3RhbmNlIFRoZSBQb3BwZXIuanMgaW5zdGFuY2VcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBkYXRhLnBsYWNlbWVudCBQbGFjZW1lbnQgYXBwbGllZCB0byBwb3BwZXJcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBkYXRhLm9yaWdpbmFsUGxhY2VtZW50IFBsYWNlbWVudCBvcmlnaW5hbGx5IGRlZmluZWQgb24gaW5pdFxuICogQHByb3BlcnR5IHtCb29sZWFufSBkYXRhLmZsaXBwZWQgVHJ1ZSBpZiBwb3BwZXIgaGFzIGJlZW4gZmxpcHBlZCBieSBmbGlwIG1vZGlmaWVyXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGRhdGEuaGlkZSBUcnVlIGlmIHRoZSByZWZlcmVuY2UgZWxlbWVudCBpcyBvdXQgb2YgYm91bmRhcmllcywgdXNlZnVsIHRvIGtub3cgd2hlbiB0byBoaWRlIHRoZSBwb3BwZXJcbiAqIEBwcm9wZXJ0eSB7SFRNTEVsZW1lbnR9IGRhdGEuYXJyb3dFbGVtZW50IE5vZGUgdXNlZCBhcyBhcnJvdyBieSBhcnJvdyBtb2RpZmllclxuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEuc3R5bGVzIEFueSBDU1MgcHJvcGVydHkgZGVmaW5lZCBoZXJlIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyLiBJdCBleHBlY3RzIHRoZSBKYXZhU2NyaXB0IG5vbWVuY2xhdHVyZSAoZWcuIGBtYXJnaW5Cb3R0b21gKVxuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEuYXJyb3dTdHlsZXMgQW55IENTUyBwcm9wZXJ0eSBkZWZpbmVkIGhlcmUgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBwb3BwZXIgYXJyb3cuIEl0IGV4cGVjdHMgdGhlIEphdmFTY3JpcHQgbm9tZW5jbGF0dXJlIChlZy4gYG1hcmdpbkJvdHRvbWApXG4gKiBAcHJvcGVydHkge09iamVjdH0gZGF0YS5ib3VuZGFyaWVzIE9mZnNldHMgb2YgdGhlIHBvcHBlciBib3VuZGFyaWVzXG4gKiBAcHJvcGVydHkge09iamVjdH0gZGF0YS5vZmZzZXRzIFRoZSBtZWFzdXJlbWVudHMgb2YgcG9wcGVyLCByZWZlcmVuY2UgYW5kIGFycm93IGVsZW1lbnRzXG4gKiBAcHJvcGVydHkge09iamVjdH0gZGF0YS5vZmZzZXRzLnBvcHBlciBgdG9wYCwgYGxlZnRgLCBgd2lkdGhgLCBgaGVpZ2h0YCB2YWx1ZXNcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkYXRhLm9mZnNldHMucmVmZXJlbmNlIGB0b3BgLCBgbGVmdGAsIGB3aWR0aGAsIGBoZWlnaHRgIHZhbHVlc1xuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEub2Zmc2V0cy5hcnJvd10gYHRvcGAgYW5kIGBsZWZ0YCBvZmZzZXRzLCBvbmx5IG9uZSBvZiB0aGVtIHdpbGwgYmUgZGlmZmVyZW50IGZyb20gMFxuICovXG5cbi8qKlxuICogRGVmYXVsdCBvcHRpb25zIHByb3ZpZGVkIHRvIFBvcHBlci5qcyBjb25zdHJ1Y3Rvci48YnIgLz5cbiAqIFRoZXNlIGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSBgb3B0aW9uc2AgYXJndW1lbnQgb2YgUG9wcGVyLmpzLjxiciAvPlxuICogVG8gb3ZlcnJpZGUgYW4gb3B0aW9uLCBzaW1wbHkgcGFzcyBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZVxuICogc3RydWN0dXJlIG9mIHRoZSBgb3B0aW9uc2Agb2JqZWN0LCBhcyB0aGUgM3JkIGFyZ3VtZW50LiBGb3IgZXhhbXBsZTpcbiAqIGBgYFxuICogbmV3IFBvcHBlcihyZWYsIHBvcCwge1xuICogICBtb2RpZmllcnM6IHtcbiAqICAgICBwcmV2ZW50T3ZlcmZsb3c6IHsgZW5hYmxlZDogZmFsc2UgfVxuICogICB9XG4gKiB9KVxuICogYGBgXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHN0YXRpY1xuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG52YXIgRGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBQb3BwZXIncyBwbGFjZW1lbnQuXG4gICAqIEBwcm9wIHtQb3BwZXIucGxhY2VtZW50c30gcGxhY2VtZW50PSdib3R0b20nXG4gICAqL1xuICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuXG4gIC8qKlxuICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIHlvdSB3YW50IHBvcHBlciB0byBwb3NpdGlvbiBpdCBzZWxmIGluICdmaXhlZCcgbW9kZVxuICAgKiBAcHJvcCB7Qm9vbGVhbn0gcG9zaXRpb25GaXhlZD1mYWxzZVxuICAgKi9cbiAgcG9zaXRpb25GaXhlZDogZmFsc2UsXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgZXZlbnRzIChyZXNpemUsIHNjcm9sbCkgYXJlIGluaXRpYWxseSBlbmFibGVkLlxuICAgKiBAcHJvcCB7Qm9vbGVhbn0gZXZlbnRzRW5hYmxlZD10cnVlXG4gICAqL1xuICBldmVudHNFbmFibGVkOiB0cnVlLFxuXG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0byBhdXRvbWF0aWNhbGx5IHJlbW92ZSB0aGUgcG9wcGVyIHdoZW5cbiAgICogeW91IGNhbGwgdGhlIGBkZXN0cm95YCBtZXRob2QuXG4gICAqIEBwcm9wIHtCb29sZWFufSByZW1vdmVPbkRlc3Ryb3k9ZmFsc2VcbiAgICovXG4gIHJlbW92ZU9uRGVzdHJveTogZmFsc2UsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGNhbGxlZCB3aGVuIHRoZSBwb3BwZXIgaXMgY3JlYXRlZC48YnIgLz5cbiAgICogQnkgZGVmYXVsdCwgaXQgaXMgc2V0IHRvIG5vLW9wLjxiciAvPlxuICAgKiBBY2Nlc3MgUG9wcGVyLmpzIGluc3RhbmNlIHdpdGggYGRhdGEuaW5zdGFuY2VgLlxuICAgKiBAcHJvcCB7b25DcmVhdGV9XG4gICAqL1xuICBvbkNyZWF0ZTogZnVuY3Rpb24gb25DcmVhdGUoKSB7fSxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgY2FsbGVkIHdoZW4gdGhlIHBvcHBlciBpcyB1cGRhdGVkLiBUaGlzIGNhbGxiYWNrIGlzIG5vdCBjYWxsZWRcbiAgICogb24gdGhlIGluaXRpYWxpemF0aW9uL2NyZWF0aW9uIG9mIHRoZSBwb3BwZXIsIGJ1dCBvbmx5IG9uIHN1YnNlcXVlbnRcbiAgICogdXBkYXRlcy48YnIgLz5cbiAgICogQnkgZGVmYXVsdCwgaXQgaXMgc2V0IHRvIG5vLW9wLjxiciAvPlxuICAgKiBBY2Nlc3MgUG9wcGVyLmpzIGluc3RhbmNlIHdpdGggYGRhdGEuaW5zdGFuY2VgLlxuICAgKiBAcHJvcCB7b25VcGRhdGV9XG4gICAqL1xuICBvblVwZGF0ZTogZnVuY3Rpb24gb25VcGRhdGUoKSB7fSxcblxuICAvKipcbiAgICogTGlzdCBvZiBtb2RpZmllcnMgdXNlZCB0byBtb2RpZnkgdGhlIG9mZnNldHMgYmVmb3JlIHRoZXkgYXJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlci5cbiAgICogVGhleSBwcm92aWRlIG1vc3Qgb2YgdGhlIGZ1bmN0aW9uYWxpdGllcyBvZiBQb3BwZXIuanMuXG4gICAqIEBwcm9wIHttb2RpZmllcnN9XG4gICAqL1xuICBtb2RpZmllcnM6IG1vZGlmaWVyc1xufTtcblxuLyoqXG4gKiBAY2FsbGJhY2sgb25DcmVhdGVcbiAqIEBwYXJhbSB7ZGF0YU9iamVjdH0gZGF0YVxuICovXG5cbi8qKlxuICogQGNhbGxiYWNrIG9uVXBkYXRlXG4gKiBAcGFyYW0ge2RhdGFPYmplY3R9IGRhdGFcbiAqL1xuXG4vLyBVdGlsc1xuLy8gTWV0aG9kc1xudmFyIFBvcHBlciA9IGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgUG9wcGVyLmpzIGluc3RhbmNlLlxuICAgKiBAY2xhc3MgUG9wcGVyXG4gICAqIEBwYXJhbSB7RWxlbWVudHxyZWZlcmVuY2VPYmplY3R9IHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgZWxlbWVudCB1c2VkIHRvIHBvc2l0aW9uIHRoZSBwb3BwZXJcbiAgICogQHBhcmFtIHtFbGVtZW50fSBwb3BwZXIgLSBUaGUgSFRNTCAvIFhNTCBlbGVtZW50IHVzZWQgYXMgdGhlIHBvcHBlclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFlvdXIgY3VzdG9tIG9wdGlvbnMgdG8gb3ZlcnJpZGUgdGhlIG9uZXMgZGVmaW5lZCBpbiBbRGVmYXVsdHNdKCNkZWZhdWx0cylcbiAgICogQHJldHVybiB7T2JqZWN0fSBpbnN0YW5jZSAtIFRoZSBnZW5lcmF0ZWQgUG9wcGVyLmpzIGluc3RhbmNlXG4gICAqL1xuICBmdW5jdGlvbiBQb3BwZXIocmVmZXJlbmNlLCBwb3BwZXIpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIFBvcHBlcik7XG5cbiAgICB0aGlzLnNjaGVkdWxlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy51cGRhdGUpO1xuICAgIH07XG5cbiAgICAvLyBtYWtlIHVwZGF0ZSgpIGRlYm91bmNlZCwgc28gdGhhdCBpdCBvbmx5IHJ1bnMgYXQgbW9zdCBvbmNlLXBlci10aWNrXG4gICAgdGhpcy51cGRhdGUgPSBkZWJvdW5jZSh0aGlzLnVwZGF0ZS5iaW5kKHRoaXMpKTtcblxuICAgIC8vIHdpdGgge30gd2UgY3JlYXRlIGEgbmV3IG9iamVjdCB3aXRoIHRoZSBvcHRpb25zIGluc2lkZSBpdFxuICAgIHRoaXMub3B0aW9ucyA9IF9leHRlbmRzKHt9LCBQb3BwZXIuRGVmYXVsdHMsIG9wdGlvbnMpO1xuXG4gICAgLy8gaW5pdCBzdGF0ZVxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBpc0Rlc3Ryb3llZDogZmFsc2UsXG4gICAgICBpc0NyZWF0ZWQ6IGZhbHNlLFxuICAgICAgc2Nyb2xsUGFyZW50czogW11cbiAgICB9O1xuXG4gICAgLy8gZ2V0IHJlZmVyZW5jZSBhbmQgcG9wcGVyIGVsZW1lbnRzIChhbGxvdyBqUXVlcnkgd3JhcHBlcnMpXG4gICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2UgJiYgcmVmZXJlbmNlLmpxdWVyeSA/IHJlZmVyZW5jZVswXSA6IHJlZmVyZW5jZTtcbiAgICB0aGlzLnBvcHBlciA9IHBvcHBlciAmJiBwb3BwZXIuanF1ZXJ5ID8gcG9wcGVyWzBdIDogcG9wcGVyO1xuXG4gICAgLy8gRGVlcCBtZXJnZSBtb2RpZmllcnMgb3B0aW9uc1xuICAgIHRoaXMub3B0aW9ucy5tb2RpZmllcnMgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhfZXh0ZW5kcyh7fSwgUG9wcGVyLkRlZmF1bHRzLm1vZGlmaWVycywgb3B0aW9ucy5tb2RpZmllcnMpKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICBfdGhpcy5vcHRpb25zLm1vZGlmaWVyc1tuYW1lXSA9IF9leHRlbmRzKHt9LCBQb3BwZXIuRGVmYXVsdHMubW9kaWZpZXJzW25hbWVdIHx8IHt9LCBvcHRpb25zLm1vZGlmaWVycyA/IG9wdGlvbnMubW9kaWZpZXJzW25hbWVdIDoge30pO1xuICAgIH0pO1xuXG4gICAgLy8gUmVmYWN0b3JpbmcgbW9kaWZpZXJzJyBsaXN0IChPYmplY3QgPT4gQXJyYXkpXG4gICAgdGhpcy5tb2RpZmllcnMgPSBPYmplY3Qua2V5cyh0aGlzLm9wdGlvbnMubW9kaWZpZXJzKS5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgICAgIG5hbWU6IG5hbWVcbiAgICAgIH0sIF90aGlzLm9wdGlvbnMubW9kaWZpZXJzW25hbWVdKTtcbiAgICB9KVxuICAgIC8vIHNvcnQgdGhlIG1vZGlmaWVycyBieSBvcmRlclxuICAgIC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYS5vcmRlciAtIGIub3JkZXI7XG4gICAgfSk7XG5cbiAgICAvLyBtb2RpZmllcnMgaGF2ZSB0aGUgYWJpbGl0eSB0byBleGVjdXRlIGFyYml0cmFyeSBjb2RlIHdoZW4gUG9wcGVyLmpzIGdldCBpbml0ZWRcbiAgICAvLyBzdWNoIGNvZGUgaXMgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgb2YgaXRzIG1vZGlmaWVyXG4gICAgLy8gdGhleSBjb3VsZCBhZGQgbmV3IHByb3BlcnRpZXMgdG8gdGhlaXIgb3B0aW9ucyBjb25maWd1cmF0aW9uXG4gICAgLy8gQkUgQVdBUkU6IGRvbid0IGFkZCBvcHRpb25zIHRvIGBvcHRpb25zLm1vZGlmaWVycy5uYW1lYCBidXQgdG8gYG1vZGlmaWVyT3B0aW9uc2AhXG4gICAgdGhpcy5tb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXJPcHRpb25zKSB7XG4gICAgICBpZiAobW9kaWZpZXJPcHRpb25zLmVuYWJsZWQgJiYgaXNGdW5jdGlvbihtb2RpZmllck9wdGlvbnMub25Mb2FkKSkge1xuICAgICAgICBtb2RpZmllck9wdGlvbnMub25Mb2FkKF90aGlzLnJlZmVyZW5jZSwgX3RoaXMucG9wcGVyLCBfdGhpcy5vcHRpb25zLCBtb2RpZmllck9wdGlvbnMsIF90aGlzLnN0YXRlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGZpcmUgdGhlIGZpcnN0IHVwZGF0ZSB0byBwb3NpdGlvbiB0aGUgcG9wcGVyIGluIHRoZSByaWdodCBwbGFjZVxuICAgIHRoaXMudXBkYXRlKCk7XG5cbiAgICB2YXIgZXZlbnRzRW5hYmxlZCA9IHRoaXMub3B0aW9ucy5ldmVudHNFbmFibGVkO1xuICAgIGlmIChldmVudHNFbmFibGVkKSB7XG4gICAgICAvLyBzZXR1cCBldmVudCBsaXN0ZW5lcnMsIHRoZXkgd2lsbCB0YWtlIGNhcmUgb2YgdXBkYXRlIHRoZSBwb3NpdGlvbiBpbiBzcGVjaWZpYyBzaXR1YXRpb25zXG4gICAgICB0aGlzLmVuYWJsZUV2ZW50TGlzdGVuZXJzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZS5ldmVudHNFbmFibGVkID0gZXZlbnRzRW5hYmxlZDtcbiAgfVxuXG4gIC8vIFdlIGNhbid0IHVzZSBjbGFzcyBwcm9wZXJ0aWVzIGJlY2F1c2UgdGhleSBkb24ndCBnZXQgbGlzdGVkIGluIHRoZVxuICAvLyBjbGFzcyBwcm90b3R5cGUgYW5kIGJyZWFrIHN0dWZmIGxpa2UgU2lub24gc3R1YnNcblxuXG4gIGNyZWF0ZUNsYXNzKFBvcHBlciwgW3tcbiAgICBrZXk6ICd1cGRhdGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGUkJDEoKSB7XG4gICAgICByZXR1cm4gdXBkYXRlLmNhbGwodGhpcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZGVzdHJveScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRlc3Ryb3kkJDEoKSB7XG4gICAgICByZXR1cm4gZGVzdHJveS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2VuYWJsZUV2ZW50TGlzdGVuZXJzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZW5hYmxlRXZlbnRMaXN0ZW5lcnMkJDEoKSB7XG4gICAgICByZXR1cm4gZW5hYmxlRXZlbnRMaXN0ZW5lcnMuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdkaXNhYmxlRXZlbnRMaXN0ZW5lcnMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBkaXNhYmxlRXZlbnRMaXN0ZW5lcnMkJDEoKSB7XG4gICAgICByZXR1cm4gZGlzYWJsZUV2ZW50TGlzdGVuZXJzLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2NoZWR1bGVzIGFuIHVwZGF0ZS4gSXQgd2lsbCBydW4gb24gdGhlIG5leHQgVUkgdXBkYXRlIGF2YWlsYWJsZS5cbiAgICAgKiBAbWV0aG9kIHNjaGVkdWxlVXBkYXRlXG4gICAgICogQG1lbWJlcm9mIFBvcHBlclxuICAgICAqL1xuXG5cbiAgICAvKipcbiAgICAgKiBDb2xsZWN0aW9uIG9mIHV0aWxpdGllcyB1c2VmdWwgd2hlbiB3cml0aW5nIGN1c3RvbSBtb2RpZmllcnMuXG4gICAgICogU3RhcnRpbmcgZnJvbSB2ZXJzaW9uIDEuNywgdGhpcyBtZXRob2QgaXMgYXZhaWxhYmxlIG9ubHkgaWYgeW91XG4gICAgICogaW5jbHVkZSBgcG9wcGVyLXV0aWxzLmpzYCBiZWZvcmUgYHBvcHBlci5qc2AuXG4gICAgICpcbiAgICAgKiAqKkRFUFJFQ0FUSU9OKio6IFRoaXMgd2F5IHRvIGFjY2VzcyBQb3BwZXJVdGlscyBpcyBkZXByZWNhdGVkXG4gICAgICogYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB2MiEgVXNlIHRoZSBQb3BwZXJVdGlscyBtb2R1bGUgZGlyZWN0bHkgaW5zdGVhZC5cbiAgICAgKiBEdWUgdG8gdGhlIGhpZ2ggaW5zdGFiaWxpdHkgb2YgdGhlIG1ldGhvZHMgY29udGFpbmVkIGluIFV0aWxzLCB3ZSBjYW4ndFxuICAgICAqIGd1YXJhbnRlZSB0aGVtIHRvIGZvbGxvdyBzZW12ZXIuIFVzZSB0aGVtIGF0IHlvdXIgb3duIHJpc2shXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDEuOFxuICAgICAqIEBtZW1iZXIgVXRpbHNcbiAgICAgKiBAbWVtYmVyb2YgUG9wcGVyXG4gICAgICovXG5cbiAgfV0pO1xuICByZXR1cm4gUG9wcGVyO1xufSgpO1xuXG4vKipcbiAqIFRoZSBgcmVmZXJlbmNlT2JqZWN0YCBpcyBhbiBvYmplY3QgdGhhdCBwcm92aWRlcyBhbiBpbnRlcmZhY2UgY29tcGF0aWJsZSB3aXRoIFBvcHBlci5qc1xuICogYW5kIGxldHMgeW91IHVzZSBpdCBhcyByZXBsYWNlbWVudCBvZiBhIHJlYWwgRE9NIG5vZGUuPGJyIC8+XG4gKiBZb3UgY2FuIHVzZSB0aGlzIG1ldGhvZCB0byBwb3NpdGlvbiBhIHBvcHBlciByZWxhdGl2ZWx5IHRvIGEgc2V0IG9mIGNvb3JkaW5hdGVzXG4gKiBpbiBjYXNlIHlvdSBkb24ndCBoYXZlIGEgRE9NIG5vZGUgdG8gdXNlIGFzIHJlZmVyZW5jZS5cbiAqXG4gKiBgYGBcbiAqIG5ldyBQb3BwZXIocmVmZXJlbmNlT2JqZWN0LCBwb3BwZXJOb2RlKTtcbiAqIGBgYFxuICpcbiAqIE5COiBUaGlzIGZlYXR1cmUgaXNuJ3Qgc3VwcG9ydGVkIGluIEludGVybmV0IEV4cGxvcmVyIDEwLlxuICogQG5hbWUgcmVmZXJlbmNlT2JqZWN0XG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBkYXRhLmdldEJvdW5kaW5nQ2xpZW50UmVjdFxuICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBzZXQgb2YgY29vcmRpbmF0ZXMgY29tcGF0aWJsZSB3aXRoIHRoZSBuYXRpdmUgYGdldEJvdW5kaW5nQ2xpZW50UmVjdGAgbWV0aG9kLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGRhdGEuY2xpZW50V2lkdGhcbiAqIEFuIEVTNiBnZXR0ZXIgdGhhdCB3aWxsIHJldHVybiB0aGUgd2lkdGggb2YgdGhlIHZpcnR1YWwgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gZGF0YS5jbGllbnRIZWlnaHRcbiAqIEFuIEVTNiBnZXR0ZXIgdGhhdCB3aWxsIHJldHVybiB0aGUgaGVpZ2h0IG9mIHRoZSB2aXJ0dWFsIHJlZmVyZW5jZSBlbGVtZW50LlxuICovXG5cblxuUG9wcGVyLlV0aWxzID0gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsKS5Qb3BwZXJVdGlscztcblBvcHBlci5wbGFjZW1lbnRzID0gcGxhY2VtZW50cztcblBvcHBlci5EZWZhdWx0cyA9IERlZmF1bHRzO1xuXG5leHBvcnQgZGVmYXVsdCBQb3BwZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wb3BwZXIuanMubWFwXG4iLCJ2YXIgcHVnID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvcHVnLXJ1bnRpbWUvaW5kZXguanNcIik7XG5cbmZ1bmN0aW9uIHRlbXBsYXRlKGxvY2Fscykge3ZhciBwdWdfaHRtbCA9IFwiXCIsIHB1Z19taXhpbnMgPSB7fSwgcHVnX2ludGVycDtwdWdfaHRtbCA9IHB1Z19odG1sICsgXCJcXHUwMDNDYm9keVxcdTAwM0VcXHUwMDNDbmF2IGNsYXNzPVxcXCJuYXZiYXIgbmF2YmFyLWV4cGFuZC1sZyBwLTEgbmF2YmFyLWxpZ2h0IGJnLWxpZ2h0IGZpeGVkLXRvcFxcXCJcXHUwMDNFXFx1MDAzQ2EgY2xhc3M9XFxcIm5hdmJhci1icmFuZFxcXCIgaHJlZj1cXFwiXFx1MDAyRmh1YlxcdTAwMkZzcGF3blxcXCJcXHUwMDNFXFx1MDAzQ2ltZyBzdHlsZT1cXFwiaGVpZ2h0OiAzOHB4O21hcmdpbi1sZWZ0OiAtMS4yZW07XFxcIiBzcmM9XFxcInN0YXRpY1xcdTAwMkZzdG9jaHNzLWxvZ28ucG5nXFxcIlxcdTAwM0VcXHUwMDNDXFx1MDAyRmFcXHUwMDNFXFx1MDAzQ2RpdiBjbGFzcz1cXFwiY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlIGp1c3RpZnktY29udGVudC1lbmRcXFwiIGlkPVxcXCJuYXZiYXJcXFwiXFx1MDAzRVxcdTAwM0N1bCBjbGFzcz1cXFwibmF2YmFyLW5hdiBmbG9hdC1yaWdodFxcXCJcXHUwMDNFXFx1MDAzQ2xpIGNsYXNzPVxcXCJuYXYtaXRlbVxcXCJcXHUwMDNFXFx1MDAzQ2EgY2xhc3M9XFxcIm5hdi1saW5rXFxcIiBocmVmPVxcXCJodHRwOlxcdTAwMkZcXHUwMDJGd3d3LnN0b2Noc3Mub3JnXFxcIiB0YXJnZXQ9XFxcIl9ibGFua1xcXCJcXHUwMDNFQWJvdXRcXHUwMDNDXFx1MDAyRmFcXHUwMDNFXFx1MDAzQ1xcdTAwMkZsaVxcdTAwM0VcXHUwMDNDbGkgY2xhc3M9XFxcIm5hdi1pdGVtXFxcIlxcdTAwM0VcXHUwMDNDYSBjbGFzcz1cXFwibmF2LWxpbmtcXFwiIGhyZWY9XFxcImh0dHA6XFx1MDAyRlxcdTAwMkZ3d3cuc3RvY2hzcy5vcmdcXHUwMDJGP3BhZ2VfaWQ9NDc2XFxcIiB0YXJnZXQ9XFxcIl9ibGFua1xcXCJcXHUwMDNFRG9jdW1lbnRhdGlvblxcdTAwM0NcXHUwMDJGYVxcdTAwM0VcXHUwMDNDXFx1MDAyRmxpXFx1MDAzRVxcdTAwM0NsaSBjbGFzcz1cXFwibmF2LWl0ZW1cXFwiXFx1MDAzRVxcdTAwM0NhIGNsYXNzPVxcXCJuYXYtbGlua1xcXCIgaHJlZj1cXFwibWFpbHRvOnN0b2Noc3MtdXNlcnNAZ29vZ2xlZ3JvdXBzLmNvbVxcXCJcXHUwMDNFQ29udGFjdFxcdTAwM0NcXHUwMDJGYVxcdTAwM0VcXHUwMDNDXFx1MDAyRmxpXFx1MDAzRVxcdTAwM0NsaSBjbGFzcz1cXFwibmF2LWl0ZW1cXFwiXFx1MDAzRVxcdTAwM0NhIGNsYXNzPVxcXCJuYXYtbGlua1xcXCIgaHJlZj1cXFwiaHR0cHM6XFx1MDAyRlxcdTAwMkZnaXRodWIuY29tXFx1MDAyRlN0b2NoU1NcXHUwMDJGc3RvY2hzc1xcdTAwMkZpc3N1ZXNcXHUwMDJGbmV3XFxcIiB0YXJnZXQ9XFxcIl9ibGFua1xcXCJcXHUwMDNFUmVwb3J0IElzc3VlXFx1MDAzQ1xcdTAwMkZhXFx1MDAzRVxcdTAwM0NcXHUwMDJGbGlcXHUwMDNFXFx1MDAzQ2xpIGNsYXNzPVxcXCJuYXYtaXRlbVxcXCJcXHUwMDNFXFx1MDAzQ2EgY2xhc3M9XFxcIm5hdi1saW5rXFxcIiBocmVmPVxcXCJcXHUwMDJGbG9nb3V0XFxcIlxcdTAwM0VTaWduIE91dFxcdTAwM0NcXHUwMDJGYVxcdTAwM0VcXHUwMDNDXFx1MDAyRmxpXFx1MDAzRVxcdTAwM0NcXHUwMDJGdWxcXHUwMDNFXFx1MDAzQ1xcdTAwMkZkaXZcXHUwMDNFXFx1MDAzQ1xcdTAwMkZuYXZcXHUwMDNFXFx1MDAzQ2RpdiBjbGFzcz1cXFwiY29udGFpbmVyLWZsdWlkXFxcIlxcdTAwM0VcXHUwMDNDZGl2IGNsYXNzPVxcXCJyb3cgZmxleC1ub3dyYXBcXFwiXFx1MDAzRVxcdTAwM0NkaXYgY2xhc3M9XFxcImNvbC1tZC0yXFxcIlxcdTAwM0VcXHUwMDNDbmF2IGNsYXNzPVxcXCJzaWRlYmFyIGQtbWQtYmxvY2tcXFwiXFx1MDAzRVxcdTAwM0NkaXYgY2xhc3M9XFxcInNpZGViYXItc3RpY2t5IHRvb2xzXFxcIlxcdTAwM0VcXHUwMDNDdWwgY2xhc3M9XFxcIm5hdiBmbGV4LWNvbHVtblxcXCJcXHUwMDNFXFx1MDAzQ2xpIGNsYXNzPVxcXCJuYXYtaXRlbVxcXCJcXHUwMDNFXFx1MDAzQ2g1IGNsYXNzPVxcXCJpY29uLWZsYXNrXFxcIlxcdTAwM0VUb29sc1xcdTAwM0NcXHUwMDJGaDVcXHUwMDNFXFx1MDAzQ1xcdTAwMkZsaVxcdTAwM0VcXHUwMDNDbGkgY2xhc3M9XFxcIm5hdi1pdGVtXFxcIlxcdTAwM0VcXHUwMDNDYSBjbGFzcz1cXFwibmF2LWxpbmtcXFwiIGhyZWY9XFxcInN0b2Noc3NcXHUwMDJGbW9kZWxzXFxcIiB0aXRsZT1cXFwiRXhwbG9yZSB5b3VyIFN0b2NoU1MgbW9kZWxzXFxcIlxcdTAwM0VCcm93c2VyXFx1MDAzQ1xcdTAwMkZhXFx1MDAzRVxcdTAwM0NcXHUwMDJGbGlcXHUwMDNFXFx1MDAzQ2xpIGNsYXNzPVxcXCJuYXYtaXRlbVxcXCJcXHUwMDNFXFx1MDAzQ2EgY2xhc3M9XFxcIm5hdi1saW5rXFxcIiB0YXJnZXQ9XFxcIl9ibGFua1xcXCIgaHJlZj1cXFwidHJlZVxcXCIgdGl0bGU9XFxcIkJyb3dzZSB5b3VyIGZpbGVzIGluIGEgSnVweXRlciBpbnRlcmZhY2VcXFwiXFx1MDAzRUp1cHl0ZXJcXHUwMDNDXFx1MDAyRmFcXHUwMDNFXFx1MDAzQ1xcdTAwMkZsaVxcdTAwM0VcXHUwMDNDIS0tbGkubmF2LWl0ZW06IGEubmF2LWxpbmsoZGF0YS1ob29rPVxcXCJnZW5lcmFsLWhlbHAtbGlua1xcXCIsIHRhcmdldD1cXFwiX2JsYW5rXFxcIiwgaHJlZj1cXFwiI1xcXCIsIHRpdGxlPVxcXCJIZWxwXFxcIilcXHUwMDJGXFx1MDAyRiB8IEhlbHBcXG4tLVxcdTAwM0VcXHUwMDNDXFx1MDAyRnVsXFx1MDAzRVxcdTAwM0NcXHUwMDJGZGl2XFx1MDAzRVxcdTAwM0NcXHUwMDJGbmF2XFx1MDAzRVxcdTAwM0NcXHUwMDJGZGl2XFx1MDAzRVxcdTAwM0NtYWluIGNsYXNzPVxcXCJjb2wtbWQtMTAgYm9keVxcXCIgcm9sZT1cXFwibWFpblxcXCJcXHUwMDNFXFx1MDAzQ2RpdiBjbGFzcz1cXFwiY29udGFpbmVyLWZsdWlkXFxcIiBkYXRhLWhvb2s9XFxcInBhZ2UtY29udGFpbmVyXFxcIlxcdTAwM0VcXHUwMDNDXFx1MDAyRmRpdlxcdTAwM0VcXHUwMDNDXFx1MDAyRm1haW5cXHUwMDNFXFx1MDAzQ1xcdTAwMkZkaXZcXHUwMDNFXFx1MDAzQ1xcdTAwMkZkaXZcXHUwMDNFXFx1MDAzQ1xcdTAwMkZib2R5XFx1MDAzRVwiOztyZXR1cm4gcHVnX2h0bWw7fTtcbm1vZHVsZS5leHBvcnRzID0gdGVtcGxhdGU7IiwidmFyIHB1ZyA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3B1Zy1ydW50aW1lL2luZGV4LmpzXCIpO1xuXG5mdW5jdGlvbiB0ZW1wbGF0ZShsb2NhbHMpIHt2YXIgcHVnX2h0bWwgPSBcIlwiLCBwdWdfbWl4aW5zID0ge30sIHB1Z19pbnRlcnA7cHVnX2h0bWwgPSBwdWdfaHRtbCArIFwiXFx1MDAzQ2hlYWRcXHUwMDNFXFx1MDAzQ21ldGEgY2hhcnNldD1cXFwidXRmLThcXFwiXFx1MDAzRVxcdTAwM0N0aXRsZVxcdTAwM0VTdG9jaFNTOiBTdG9jaGFzdGljIFNpbWxhdGlvbiBTZXJ2aWNlXFx1MDAzQ1xcdTAwMkZ0aXRsZVxcdTAwM0VcXHUwMDNDbWV0YSBuYW1lPVxcXCJ2aWV3cG9ydFxcXCIgY29udGVudD1cXFwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMFxcXCJcXHUwMDNFXFx1MDAzQ21ldGEgbmFtZT1cXFwiZGVzY3JpcHRpb25cXFwiIGNvbnRlbnQ9XFxcIlxcXCJcXHUwMDNFXFx1MDAzQ21ldGEgbmFtZT1cXFwiYXV0aG9yXFxcIiBjb250ZW50PVxcXCJcXFwiXFx1MDAzRVxcdTAwM0NcXHUwMDJGaGVhZFxcdTAwM0VcIjs7cmV0dXJuIHB1Z19odG1sO307XG5tb2R1bGUuZXhwb3J0cyA9IHRlbXBsYXRlOyIsIid1c2Ugc3RyaWN0JztcblxudmFyIHB1Z19oYXNfb3duX3Byb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBNZXJnZSB0d28gYXR0cmlidXRlIG9iamVjdHMgZ2l2aW5nIHByZWNlZGVuY2VcbiAqIHRvIHZhbHVlcyBpbiBvYmplY3QgYGJgLiBDbGFzc2VzIGFyZSBzcGVjaWFsLWNhc2VkXG4gKiBhbGxvd2luZyBmb3IgYXJyYXlzIGFuZCBtZXJnaW5nL2pvaW5pbmcgYXBwcm9wcmlhdGVseVxuICogcmVzdWx0aW5nIGluIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhXG4gKiBAcGFyYW0ge09iamVjdH0gYlxuICogQHJldHVybiB7T2JqZWN0fSBhXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLm1lcmdlID0gcHVnX21lcmdlO1xuZnVuY3Rpb24gcHVnX21lcmdlKGEsIGIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICB2YXIgYXR0cnMgPSBhWzBdO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgYXR0cnMgPSBwdWdfbWVyZ2UoYXR0cnMsIGFbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gYXR0cnM7XG4gIH1cblxuICBmb3IgKHZhciBrZXkgaW4gYikge1xuICAgIGlmIChrZXkgPT09ICdjbGFzcycpIHtcbiAgICAgIHZhciB2YWxBID0gYVtrZXldIHx8IFtdO1xuICAgICAgYVtrZXldID0gKEFycmF5LmlzQXJyYXkodmFsQSkgPyB2YWxBIDogW3ZhbEFdKS5jb25jYXQoYltrZXldIHx8IFtdKTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3N0eWxlJykge1xuICAgICAgdmFyIHZhbEEgPSBwdWdfc3R5bGUoYVtrZXldKTtcbiAgICAgIHZhbEEgPSB2YWxBICYmIHZhbEFbdmFsQS5sZW5ndGggLSAxXSAhPT0gJzsnID8gdmFsQSArICc7JyA6IHZhbEE7XG4gICAgICB2YXIgdmFsQiA9IHB1Z19zdHlsZShiW2tleV0pO1xuICAgICAgdmFsQiA9IHZhbEIgJiYgdmFsQlt2YWxCLmxlbmd0aCAtIDFdICE9PSAnOycgPyB2YWxCICsgJzsnIDogdmFsQjtcbiAgICAgIGFba2V5XSA9IHZhbEEgKyB2YWxCO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSBiW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGE7XG59O1xuXG4vKipcbiAqIFByb2Nlc3MgYXJyYXksIG9iamVjdCwgb3Igc3RyaW5nIGFzIGEgc3RyaW5nIG9mIGNsYXNzZXMgZGVsaW1pdGVkIGJ5IGEgc3BhY2UuXG4gKlxuICogSWYgYHZhbGAgaXMgYW4gYXJyYXksIGFsbCBtZW1iZXJzIG9mIGl0IGFuZCBpdHMgc3ViYXJyYXlzIGFyZSBjb3VudGVkIGFzXG4gKiBjbGFzc2VzLiBJZiBgZXNjYXBpbmdgIGlzIGFuIGFycmF5LCB0aGVuIHdoZXRoZXIgb3Igbm90IHRoZSBpdGVtIGluIGB2YWxgIGlzXG4gKiBlc2NhcGVkIGRlcGVuZHMgb24gdGhlIGNvcnJlc3BvbmRpbmcgaXRlbSBpbiBgZXNjYXBpbmdgLiBJZiBgZXNjYXBpbmdgIGlzXG4gKiBub3QgYW4gYXJyYXksIG5vIGVzY2FwaW5nIGlzIGRvbmUuXG4gKlxuICogSWYgYHZhbGAgaXMgYW4gb2JqZWN0LCBhbGwgdGhlIGtleXMgd2hvc2UgdmFsdWUgaXMgdHJ1dGh5IGFyZSBjb3VudGVkIGFzXG4gKiBjbGFzc2VzLiBObyBlc2NhcGluZyBpcyBkb25lLlxuICpcbiAqIElmIGB2YWxgIGlzIGEgc3RyaW5nLCBpdCBpcyBjb3VudGVkIGFzIGEgY2xhc3MuIE5vIGVzY2FwaW5nIGlzIGRvbmUuXG4gKlxuICogQHBhcmFtIHsoQXJyYXkuPHN0cmluZz58T2JqZWN0LjxzdHJpbmcsIGJvb2xlYW4+fHN0cmluZyl9IHZhbFxuICogQHBhcmFtIHs/QXJyYXkuPHN0cmluZz59IGVzY2FwaW5nXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmV4cG9ydHMuY2xhc3NlcyA9IHB1Z19jbGFzc2VzO1xuZnVuY3Rpb24gcHVnX2NsYXNzZXNfYXJyYXkodmFsLCBlc2NhcGluZykge1xuICB2YXIgY2xhc3NTdHJpbmcgPSAnJywgY2xhc3NOYW1lLCBwYWRkaW5nID0gJycsIGVzY2FwZUVuYWJsZWQgPSBBcnJheS5pc0FycmF5KGVzY2FwaW5nKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICBjbGFzc05hbWUgPSBwdWdfY2xhc3Nlcyh2YWxbaV0pO1xuICAgIGlmICghY2xhc3NOYW1lKSBjb250aW51ZTtcbiAgICBlc2NhcGVFbmFibGVkICYmIGVzY2FwaW5nW2ldICYmIChjbGFzc05hbWUgPSBwdWdfZXNjYXBlKGNsYXNzTmFtZSkpO1xuICAgIGNsYXNzU3RyaW5nID0gY2xhc3NTdHJpbmcgKyBwYWRkaW5nICsgY2xhc3NOYW1lO1xuICAgIHBhZGRpbmcgPSAnICc7XG4gIH1cbiAgcmV0dXJuIGNsYXNzU3RyaW5nO1xufVxuZnVuY3Rpb24gcHVnX2NsYXNzZXNfb2JqZWN0KHZhbCkge1xuICB2YXIgY2xhc3NTdHJpbmcgPSAnJywgcGFkZGluZyA9ICcnO1xuICBmb3IgKHZhciBrZXkgaW4gdmFsKSB7XG4gICAgaWYgKGtleSAmJiB2YWxba2V5XSAmJiBwdWdfaGFzX293bl9wcm9wZXJ0eS5jYWxsKHZhbCwga2V5KSkge1xuICAgICAgY2xhc3NTdHJpbmcgPSBjbGFzc1N0cmluZyArIHBhZGRpbmcgKyBrZXk7XG4gICAgICBwYWRkaW5nID0gJyAnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2xhc3NTdHJpbmc7XG59XG5mdW5jdGlvbiBwdWdfY2xhc3Nlcyh2YWwsIGVzY2FwaW5nKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICByZXR1cm4gcHVnX2NsYXNzZXNfYXJyYXkodmFsLCBlc2NhcGluZyk7XG4gIH0gZWxzZSBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHB1Z19jbGFzc2VzX29iamVjdCh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWwgfHwgJyc7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0IG9iamVjdCBvciBzdHJpbmcgdG8gYSBzdHJpbmcgb2YgQ1NTIHN0eWxlcyBkZWxpbWl0ZWQgYnkgYSBzZW1pY29sb24uXG4gKlxuICogQHBhcmFtIHsoT2JqZWN0LjxzdHJpbmcsIHN0cmluZz58c3RyaW5nKX0gdmFsXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cblxuZXhwb3J0cy5zdHlsZSA9IHB1Z19zdHlsZTtcbmZ1bmN0aW9uIHB1Z19zdHlsZSh2YWwpIHtcbiAgaWYgKCF2YWwpIHJldHVybiAnJztcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgdmFyIG91dCA9ICcnO1xuICAgIGZvciAodmFyIHN0eWxlIGluIHZhbCkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChwdWdfaGFzX293bl9wcm9wZXJ0eS5jYWxsKHZhbCwgc3R5bGUpKSB7XG4gICAgICAgIG91dCA9IG91dCArIHN0eWxlICsgJzonICsgdmFsW3N0eWxlXSArICc7JztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsICsgJyc7XG4gIH1cbn07XG5cbi8qKlxuICogUmVuZGVyIHRoZSBnaXZlbiBhdHRyaWJ1dGUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGtleVxuICogQHBhcmFtIHtTdHJpbmd9IHZhbFxuICogQHBhcmFtIHtCb29sZWFufSBlc2NhcGVkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHRlcnNlXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmV4cG9ydHMuYXR0ciA9IHB1Z19hdHRyO1xuZnVuY3Rpb24gcHVnX2F0dHIoa2V5LCB2YWwsIGVzY2FwZWQsIHRlcnNlKSB7XG4gIGlmICh2YWwgPT09IGZhbHNlIHx8IHZhbCA9PSBudWxsIHx8ICF2YWwgJiYgKGtleSA9PT0gJ2NsYXNzJyB8fCBrZXkgPT09ICdzdHlsZScpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGlmICh2YWwgPT09IHRydWUpIHtcbiAgICByZXR1cm4gJyAnICsgKHRlcnNlID8ga2V5IDoga2V5ICsgJz1cIicgKyBrZXkgKyAnXCInKTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbC50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YWwgPSB2YWwudG9KU09OKCk7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWwgIT09ICdzdHJpbmcnKSB7XG4gICAgdmFsID0gSlNPTi5zdHJpbmdpZnkodmFsKTtcbiAgICBpZiAoIWVzY2FwZWQgJiYgdmFsLmluZGV4T2YoJ1wiJykgIT09IC0xKSB7XG4gICAgICByZXR1cm4gJyAnICsga2V5ICsgJz1cXCcnICsgdmFsLnJlcGxhY2UoLycvZywgJyYjMzk7JykgKyAnXFwnJztcbiAgICB9XG4gIH1cbiAgaWYgKGVzY2FwZWQpIHZhbCA9IHB1Z19lc2NhcGUodmFsKTtcbiAgcmV0dXJuICcgJyArIGtleSArICc9XCInICsgdmFsICsgJ1wiJztcbn07XG5cbi8qKlxuICogUmVuZGVyIHRoZSBnaXZlbiBhdHRyaWJ1dGVzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge09iamVjdH0gdGVyc2Ugd2hldGhlciB0byB1c2UgSFRNTDUgdGVyc2UgYm9vbGVhbiBhdHRyaWJ1dGVzXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmV4cG9ydHMuYXR0cnMgPSBwdWdfYXR0cnM7XG5mdW5jdGlvbiBwdWdfYXR0cnMob2JqLCB0ZXJzZSl7XG4gIHZhciBhdHRycyA9ICcnO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBpZiAocHVnX2hhc19vd25fcHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgIHZhciB2YWwgPSBvYmpba2V5XTtcblxuICAgICAgaWYgKCdjbGFzcycgPT09IGtleSkge1xuICAgICAgICB2YWwgPSBwdWdfY2xhc3Nlcyh2YWwpO1xuICAgICAgICBhdHRycyA9IHB1Z19hdHRyKGtleSwgdmFsLCBmYWxzZSwgdGVyc2UpICsgYXR0cnM7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCdzdHlsZScgPT09IGtleSkge1xuICAgICAgICB2YWwgPSBwdWdfc3R5bGUodmFsKTtcbiAgICAgIH1cbiAgICAgIGF0dHJzICs9IHB1Z19hdHRyKGtleSwgdmFsLCBmYWxzZSwgdGVyc2UpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhdHRycztcbn07XG5cbi8qKlxuICogRXNjYXBlIHRoZSBnaXZlbiBzdHJpbmcgb2YgYGh0bWxgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBodG1sXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG52YXIgcHVnX21hdGNoX2h0bWwgPSAvW1wiJjw+XS87XG5leHBvcnRzLmVzY2FwZSA9IHB1Z19lc2NhcGU7XG5mdW5jdGlvbiBwdWdfZXNjYXBlKF9odG1sKXtcbiAgdmFyIGh0bWwgPSAnJyArIF9odG1sO1xuICB2YXIgcmVnZXhSZXN1bHQgPSBwdWdfbWF0Y2hfaHRtbC5leGVjKGh0bWwpO1xuICBpZiAoIXJlZ2V4UmVzdWx0KSByZXR1cm4gX2h0bWw7XG5cbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgaSwgbGFzdEluZGV4LCBlc2NhcGU7XG4gIGZvciAoaSA9IHJlZ2V4UmVzdWx0LmluZGV4LCBsYXN0SW5kZXggPSAwOyBpIDwgaHRtbC5sZW5ndGg7IGkrKykge1xuICAgIHN3aXRjaCAoaHRtbC5jaGFyQ29kZUF0KGkpKSB7XG4gICAgICBjYXNlIDM0OiBlc2NhcGUgPSAnJnF1b3Q7JzsgYnJlYWs7XG4gICAgICBjYXNlIDM4OiBlc2NhcGUgPSAnJmFtcDsnOyBicmVhaztcbiAgICAgIGNhc2UgNjA6IGVzY2FwZSA9ICcmbHQ7JzsgYnJlYWs7XG4gICAgICBjYXNlIDYyOiBlc2NhcGUgPSAnJmd0Oyc7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogY29udGludWU7XG4gICAgfVxuICAgIGlmIChsYXN0SW5kZXggIT09IGkpIHJlc3VsdCArPSBodG1sLnN1YnN0cmluZyhsYXN0SW5kZXgsIGkpO1xuICAgIGxhc3RJbmRleCA9IGkgKyAxO1xuICAgIHJlc3VsdCArPSBlc2NhcGU7XG4gIH1cbiAgaWYgKGxhc3RJbmRleCAhPT0gaSkgcmV0dXJuIHJlc3VsdCArIGh0bWwuc3Vic3RyaW5nKGxhc3RJbmRleCwgaSk7XG4gIGVsc2UgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogUmUtdGhyb3cgdGhlIGdpdmVuIGBlcnJgIGluIGNvbnRleHQgdG8gdGhlXG4gKiB0aGUgcHVnIGluIGBmaWxlbmFtZWAgYXQgdGhlIGdpdmVuIGBsaW5lbm9gLlxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IGVyclxuICogQHBhcmFtIHtTdHJpbmd9IGZpbGVuYW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gbGluZW5vXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIG9yaWdpbmFsIHNvdXJjZVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5yZXRocm93ID0gcHVnX3JldGhyb3c7XG5mdW5jdGlvbiBwdWdfcmV0aHJvdyhlcnIsIGZpbGVuYW1lLCBsaW5lbm8sIHN0cil7XG4gIGlmICghKGVyciBpbnN0YW5jZW9mIEVycm9yKSkgdGhyb3cgZXJyO1xuICBpZiAoKHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgfHwgIWZpbGVuYW1lKSAmJiAhc3RyKSB7XG4gICAgZXJyLm1lc3NhZ2UgKz0gJyBvbiBsaW5lICcgKyBsaW5lbm87XG4gICAgdGhyb3cgZXJyO1xuICB9XG4gIHRyeSB7XG4gICAgc3RyID0gc3RyIHx8IHJlcXVpcmUoJ2ZzJykucmVhZEZpbGVTeW5jKGZpbGVuYW1lLCAndXRmOCcpXG4gIH0gY2F0Y2ggKGV4KSB7XG4gICAgcHVnX3JldGhyb3coZXJyLCBudWxsLCBsaW5lbm8pXG4gIH1cbiAgdmFyIGNvbnRleHQgPSAzXG4gICAgLCBsaW5lcyA9IHN0ci5zcGxpdCgnXFxuJylcbiAgICAsIHN0YXJ0ID0gTWF0aC5tYXgobGluZW5vIC0gY29udGV4dCwgMClcbiAgICAsIGVuZCA9IE1hdGgubWluKGxpbmVzLmxlbmd0aCwgbGluZW5vICsgY29udGV4dCk7XG5cbiAgLy8gRXJyb3IgY29udGV4dFxuICB2YXIgY29udGV4dCA9IGxpbmVzLnNsaWNlKHN0YXJ0LCBlbmQpLm1hcChmdW5jdGlvbihsaW5lLCBpKXtcbiAgICB2YXIgY3VyciA9IGkgKyBzdGFydCArIDE7XG4gICAgcmV0dXJuIChjdXJyID09IGxpbmVubyA/ICcgID4gJyA6ICcgICAgJylcbiAgICAgICsgY3VyclxuICAgICAgKyAnfCAnXG4gICAgICArIGxpbmU7XG4gIH0pLmpvaW4oJ1xcbicpO1xuXG4gIC8vIEFsdGVyIGV4Y2VwdGlvbiBtZXNzYWdlXG4gIGVyci5wYXRoID0gZmlsZW5hbWU7XG4gIGVyci5tZXNzYWdlID0gKGZpbGVuYW1lIHx8ICdQdWcnKSArICc6JyArIGxpbmVub1xuICAgICsgJ1xcbicgKyBjb250ZXh0ICsgJ1xcblxcbicgKyBlcnIubWVzc2FnZTtcbiAgdGhyb3cgZXJyO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG52YXIgcGVyY2VudFR3ZW50aWVzID0gLyUyMC9nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAnZGVmYXVsdCc6ICdSRkMzOTg2JyxcbiAgICBmb3JtYXR0ZXJzOiB7XG4gICAgICAgIFJGQzE3Mzg6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2UuY2FsbCh2YWx1ZSwgcGVyY2VudFR3ZW50aWVzLCAnKycpO1xuICAgICAgICB9LFxuICAgICAgICBSRkMzOTg2OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgUkZDMTczODogJ1JGQzE3MzgnLFxuICAgIFJGQzM5ODY6ICdSRkMzOTg2J1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vc3RyaW5naWZ5Jyk7XG52YXIgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJyk7XG52YXIgZm9ybWF0cyA9IHJlcXVpcmUoJy4vZm9ybWF0cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBmb3JtYXRzOiBmb3JtYXRzLFxuICAgIHBhcnNlOiBwYXJzZSxcbiAgICBzdHJpbmdpZnk6IHN0cmluZ2lmeVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIGRlZmF1bHRzID0ge1xuICAgIGFsbG93RG90czogZmFsc2UsXG4gICAgYWxsb3dQcm90b3R5cGVzOiBmYWxzZSxcbiAgICBhcnJheUxpbWl0OiAyMCxcbiAgICBjaGFyc2V0OiAndXRmLTgnLFxuICAgIGNoYXJzZXRTZW50aW5lbDogZmFsc2UsXG4gICAgY29tbWE6IGZhbHNlLFxuICAgIGRlY29kZXI6IHV0aWxzLmRlY29kZSxcbiAgICBkZWxpbWl0ZXI6ICcmJyxcbiAgICBkZXB0aDogNSxcbiAgICBpZ25vcmVRdWVyeVByZWZpeDogZmFsc2UsXG4gICAgaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzOiBmYWxzZSxcbiAgICBwYXJhbWV0ZXJMaW1pdDogMTAwMCxcbiAgICBwYXJzZUFycmF5czogdHJ1ZSxcbiAgICBwbGFpbk9iamVjdHM6IGZhbHNlLFxuICAgIHN0cmljdE51bGxIYW5kbGluZzogZmFsc2Vcbn07XG5cbnZhciBpbnRlcnByZXROdW1lcmljRW50aXRpZXMgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8mIyhcXGQrKTsvZywgZnVuY3Rpb24gKCQwLCBudW1iZXJTdHIpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQobnVtYmVyU3RyLCAxMCkpO1xuICAgIH0pO1xufTtcblxuLy8gVGhpcyBpcyB3aGF0IGJyb3dzZXJzIHdpbGwgc3VibWl0IHdoZW4gdGhlIOKckyBjaGFyYWN0ZXIgb2NjdXJzIGluIGFuXG4vLyBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgYm9keSBhbmQgdGhlIGVuY29kaW5nIG9mIHRoZSBwYWdlIGNvbnRhaW5pbmdcbi8vIHRoZSBmb3JtIGlzIGlzby04ODU5LTEsIG9yIHdoZW4gdGhlIHN1Ym1pdHRlZCBmb3JtIGhhcyBhbiBhY2NlcHQtY2hhcnNldFxuLy8gYXR0cmlidXRlIG9mIGlzby04ODU5LTEuIFByZXN1bWFibHkgYWxzbyB3aXRoIG90aGVyIGNoYXJzZXRzIHRoYXQgZG8gbm90IGNvbnRhaW5cbi8vIHRoZSDinJMgY2hhcmFjdGVyLCBzdWNoIGFzIHVzLWFzY2lpLlxudmFyIGlzb1NlbnRpbmVsID0gJ3V0Zjg9JTI2JTIzMTAwMDMlM0InOyAvLyBlbmNvZGVVUklDb21wb25lbnQoJyYjMTAwMDM7JylcblxuLy8gVGhlc2UgYXJlIHRoZSBwZXJjZW50LWVuY29kZWQgdXRmLTggb2N0ZXRzIHJlcHJlc2VudGluZyBhIGNoZWNrbWFyaywgaW5kaWNhdGluZyB0aGF0IHRoZSByZXF1ZXN0IGFjdHVhbGx5IGlzIHV0Zi04IGVuY29kZWQuXG52YXIgY2hhcnNldFNlbnRpbmVsID0gJ3V0Zjg9JUUyJTlDJTkzJzsgLy8gZW5jb2RlVVJJQ29tcG9uZW50KCfinJMnKVxuXG52YXIgcGFyc2VWYWx1ZXMgPSBmdW5jdGlvbiBwYXJzZVF1ZXJ5U3RyaW5nVmFsdWVzKHN0ciwgb3B0aW9ucykge1xuICAgIHZhciBvYmogPSB7fTtcbiAgICB2YXIgY2xlYW5TdHIgPSBvcHRpb25zLmlnbm9yZVF1ZXJ5UHJlZml4ID8gc3RyLnJlcGxhY2UoL15cXD8vLCAnJykgOiBzdHI7XG4gICAgdmFyIGxpbWl0ID0gb3B0aW9ucy5wYXJhbWV0ZXJMaW1pdCA9PT0gSW5maW5pdHkgPyB1bmRlZmluZWQgOiBvcHRpb25zLnBhcmFtZXRlckxpbWl0O1xuICAgIHZhciBwYXJ0cyA9IGNsZWFuU3RyLnNwbGl0KG9wdGlvbnMuZGVsaW1pdGVyLCBsaW1pdCk7XG4gICAgdmFyIHNraXBJbmRleCA9IC0xOyAvLyBLZWVwIHRyYWNrIG9mIHdoZXJlIHRoZSB1dGY4IHNlbnRpbmVsIHdhcyBmb3VuZFxuICAgIHZhciBpO1xuXG4gICAgdmFyIGNoYXJzZXQgPSBvcHRpb25zLmNoYXJzZXQ7XG4gICAgaWYgKG9wdGlvbnMuY2hhcnNldFNlbnRpbmVsKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKHBhcnRzW2ldLmluZGV4T2YoJ3V0Zjg9JykgPT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAocGFydHNbaV0gPT09IGNoYXJzZXRTZW50aW5lbCkge1xuICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gJ3V0Zi04JztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcnRzW2ldID09PSBpc29TZW50aW5lbCkge1xuICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gJ2lzby04ODU5LTEnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBza2lwSW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIGkgPSBwYXJ0cy5sZW5ndGg7IC8vIFRoZSBlc2xpbnQgc2V0dGluZ3MgZG8gbm90IGFsbG93IGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChpID09PSBza2lwSW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwYXJ0ID0gcGFydHNbaV07XG5cbiAgICAgICAgdmFyIGJyYWNrZXRFcXVhbHNQb3MgPSBwYXJ0LmluZGV4T2YoJ109Jyk7XG4gICAgICAgIHZhciBwb3MgPSBicmFja2V0RXF1YWxzUG9zID09PSAtMSA/IHBhcnQuaW5kZXhPZignPScpIDogYnJhY2tldEVxdWFsc1BvcyArIDE7XG5cbiAgICAgICAgdmFyIGtleSwgdmFsO1xuICAgICAgICBpZiAocG9zID09PSAtMSkge1xuICAgICAgICAgICAga2V5ID0gb3B0aW9ucy5kZWNvZGVyKHBhcnQsIGRlZmF1bHRzLmRlY29kZXIsIGNoYXJzZXQpO1xuICAgICAgICAgICAgdmFsID0gb3B0aW9ucy5zdHJpY3ROdWxsSGFuZGxpbmcgPyBudWxsIDogJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXkgPSBvcHRpb25zLmRlY29kZXIocGFydC5zbGljZSgwLCBwb3MpLCBkZWZhdWx0cy5kZWNvZGVyLCBjaGFyc2V0KTtcbiAgICAgICAgICAgIHZhbCA9IG9wdGlvbnMuZGVjb2RlcihwYXJ0LnNsaWNlKHBvcyArIDEpLCBkZWZhdWx0cy5kZWNvZGVyLCBjaGFyc2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWwgJiYgb3B0aW9ucy5pbnRlcnByZXROdW1lcmljRW50aXRpZXMgJiYgY2hhcnNldCA9PT0gJ2lzby04ODU5LTEnKSB7XG4gICAgICAgICAgICB2YWwgPSBpbnRlcnByZXROdW1lcmljRW50aXRpZXModmFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWwgJiYgb3B0aW9ucy5jb21tYSAmJiB2YWwuaW5kZXhPZignLCcpID4gLTEpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5zcGxpdCgnLCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhcy5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgICAgb2JqW2tleV0gPSB1dGlscy5jb21iaW5lKG9ialtrZXldLCB2YWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JqW2tleV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xufTtcblxudmFyIHBhcnNlT2JqZWN0ID0gZnVuY3Rpb24gKGNoYWluLCB2YWwsIG9wdGlvbnMpIHtcbiAgICB2YXIgbGVhZiA9IHZhbDtcblxuICAgIGZvciAodmFyIGkgPSBjaGFpbi5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgb2JqO1xuICAgICAgICB2YXIgcm9vdCA9IGNoYWluW2ldO1xuXG4gICAgICAgIGlmIChyb290ID09PSAnW10nICYmIG9wdGlvbnMucGFyc2VBcnJheXMpIHtcbiAgICAgICAgICAgIG9iaiA9IFtdLmNvbmNhdChsZWFmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9iaiA9IG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuICAgICAgICAgICAgdmFyIGNsZWFuUm9vdCA9IHJvb3QuY2hhckF0KDApID09PSAnWycgJiYgcm9vdC5jaGFyQXQocm9vdC5sZW5ndGggLSAxKSA9PT0gJ10nID8gcm9vdC5zbGljZSgxLCAtMSkgOiByb290O1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gcGFyc2VJbnQoY2xlYW5Sb290LCAxMCk7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMucGFyc2VBcnJheXMgJiYgY2xlYW5Sb290ID09PSAnJykge1xuICAgICAgICAgICAgICAgIG9iaiA9IHsgMDogbGVhZiB9O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAhaXNOYU4oaW5kZXgpXG4gICAgICAgICAgICAgICAgJiYgcm9vdCAhPT0gY2xlYW5Sb290XG4gICAgICAgICAgICAgICAgJiYgU3RyaW5nKGluZGV4KSA9PT0gY2xlYW5Sb290XG4gICAgICAgICAgICAgICAgJiYgaW5kZXggPj0gMFxuICAgICAgICAgICAgICAgICYmIChvcHRpb25zLnBhcnNlQXJyYXlzICYmIGluZGV4IDw9IG9wdGlvbnMuYXJyYXlMaW1pdClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG9iaiA9IFtdO1xuICAgICAgICAgICAgICAgIG9ialtpbmRleF0gPSBsZWFmO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvYmpbY2xlYW5Sb290XSA9IGxlYWY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZWFmID0gb2JqO1xuICAgIH1cblxuICAgIHJldHVybiBsZWFmO1xufTtcblxudmFyIHBhcnNlS2V5cyA9IGZ1bmN0aW9uIHBhcnNlUXVlcnlTdHJpbmdLZXlzKGdpdmVuS2V5LCB2YWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWdpdmVuS2V5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUcmFuc2Zvcm0gZG90IG5vdGF0aW9uIHRvIGJyYWNrZXQgbm90YXRpb25cbiAgICB2YXIga2V5ID0gb3B0aW9ucy5hbGxvd0RvdHMgPyBnaXZlbktleS5yZXBsYWNlKC9cXC4oW14uW10rKS9nLCAnWyQxXScpIDogZ2l2ZW5LZXk7XG5cbiAgICAvLyBUaGUgcmVnZXggY2h1bmtzXG5cbiAgICB2YXIgYnJhY2tldHMgPSAvKFxcW1teW1xcXV0qXSkvO1xuICAgIHZhciBjaGlsZCA9IC8oXFxbW15bXFxdXSpdKS9nO1xuXG4gICAgLy8gR2V0IHRoZSBwYXJlbnRcblxuICAgIHZhciBzZWdtZW50ID0gYnJhY2tldHMuZXhlYyhrZXkpO1xuICAgIHZhciBwYXJlbnQgPSBzZWdtZW50ID8ga2V5LnNsaWNlKDAsIHNlZ21lbnQuaW5kZXgpIDoga2V5O1xuXG4gICAgLy8gU3Rhc2ggdGhlIHBhcmVudCBpZiBpdCBleGlzdHNcblxuICAgIHZhciBrZXlzID0gW107XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgICAvLyBJZiB3ZSBhcmVuJ3QgdXNpbmcgcGxhaW4gb2JqZWN0cywgb3B0aW9uYWxseSBwcmVmaXgga2V5cyB0aGF0IHdvdWxkIG92ZXJ3cml0ZSBvYmplY3QgcHJvdG90eXBlIHByb3BlcnRpZXNcbiAgICAgICAgaWYgKCFvcHRpb25zLnBsYWluT2JqZWN0cyAmJiBoYXMuY2FsbChPYmplY3QucHJvdG90eXBlLCBwYXJlbnQpKSB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuYWxsb3dQcm90b3R5cGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAga2V5cy5wdXNoKHBhcmVudCk7XG4gICAgfVxuXG4gICAgLy8gTG9vcCB0aHJvdWdoIGNoaWxkcmVuIGFwcGVuZGluZyB0byB0aGUgYXJyYXkgdW50aWwgd2UgaGl0IGRlcHRoXG5cbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKChzZWdtZW50ID0gY2hpbGQuZXhlYyhrZXkpKSAhPT0gbnVsbCAmJiBpIDwgb3B0aW9ucy5kZXB0aCkge1xuICAgICAgICBpICs9IDE7XG4gICAgICAgIGlmICghb3B0aW9ucy5wbGFpbk9iamVjdHMgJiYgaGFzLmNhbGwoT2JqZWN0LnByb3RvdHlwZSwgc2VnbWVudFsxXS5zbGljZSgxLCAtMSkpKSB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuYWxsb3dQcm90b3R5cGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGtleXMucHVzaChzZWdtZW50WzFdKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSdzIGEgcmVtYWluZGVyLCBqdXN0IGFkZCB3aGF0ZXZlciBpcyBsZWZ0XG5cbiAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICBrZXlzLnB1c2goJ1snICsga2V5LnNsaWNlKHNlZ21lbnQuaW5kZXgpICsgJ10nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VPYmplY3Qoa2V5cywgdmFsLCBvcHRpb25zKTtcbn07XG5cbnZhciBub3JtYWxpemVQYXJzZU9wdGlvbnMgPSBmdW5jdGlvbiBub3JtYWxpemVQYXJzZU9wdGlvbnMob3B0cykge1xuICAgIGlmICghb3B0cykge1xuICAgICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuZGVjb2RlciAhPT0gbnVsbCAmJiBvcHRzLmRlY29kZXIgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0cy5kZWNvZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0RlY29kZXIgaGFzIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRzLmNoYXJzZXQgIT09ICd1bmRlZmluZWQnICYmIG9wdHMuY2hhcnNldCAhPT0gJ3V0Zi04JyAmJiBvcHRzLmNoYXJzZXQgIT09ICdpc28tODg1OS0xJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBjaGFyc2V0IG9wdGlvbiBtdXN0IGJlIGVpdGhlciB1dGYtOCwgaXNvLTg4NTktMSwgb3IgdW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIHZhciBjaGFyc2V0ID0gdHlwZW9mIG9wdHMuY2hhcnNldCA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0cy5jaGFyc2V0IDogb3B0cy5jaGFyc2V0O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWxsb3dEb3RzOiB0eXBlb2Ygb3B0cy5hbGxvd0RvdHMgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdHMuYWxsb3dEb3RzIDogISFvcHRzLmFsbG93RG90cyxcbiAgICAgICAgYWxsb3dQcm90b3R5cGVzOiB0eXBlb2Ygb3B0cy5hbGxvd1Byb3RvdHlwZXMgPT09ICdib29sZWFuJyA/IG9wdHMuYWxsb3dQcm90b3R5cGVzIDogZGVmYXVsdHMuYWxsb3dQcm90b3R5cGVzLFxuICAgICAgICBhcnJheUxpbWl0OiB0eXBlb2Ygb3B0cy5hcnJheUxpbWl0ID09PSAnbnVtYmVyJyA/IG9wdHMuYXJyYXlMaW1pdCA6IGRlZmF1bHRzLmFycmF5TGltaXQsXG4gICAgICAgIGNoYXJzZXQ6IGNoYXJzZXQsXG4gICAgICAgIGNoYXJzZXRTZW50aW5lbDogdHlwZW9mIG9wdHMuY2hhcnNldFNlbnRpbmVsID09PSAnYm9vbGVhbicgPyBvcHRzLmNoYXJzZXRTZW50aW5lbCA6IGRlZmF1bHRzLmNoYXJzZXRTZW50aW5lbCxcbiAgICAgICAgY29tbWE6IHR5cGVvZiBvcHRzLmNvbW1hID09PSAnYm9vbGVhbicgPyBvcHRzLmNvbW1hIDogZGVmYXVsdHMuY29tbWEsXG4gICAgICAgIGRlY29kZXI6IHR5cGVvZiBvcHRzLmRlY29kZXIgPT09ICdmdW5jdGlvbicgPyBvcHRzLmRlY29kZXIgOiBkZWZhdWx0cy5kZWNvZGVyLFxuICAgICAgICBkZWxpbWl0ZXI6IHR5cGVvZiBvcHRzLmRlbGltaXRlciA9PT0gJ3N0cmluZycgfHwgdXRpbHMuaXNSZWdFeHAob3B0cy5kZWxpbWl0ZXIpID8gb3B0cy5kZWxpbWl0ZXIgOiBkZWZhdWx0cy5kZWxpbWl0ZXIsXG4gICAgICAgIGRlcHRoOiB0eXBlb2Ygb3B0cy5kZXB0aCA9PT0gJ251bWJlcicgPyBvcHRzLmRlcHRoIDogZGVmYXVsdHMuZGVwdGgsXG4gICAgICAgIGlnbm9yZVF1ZXJ5UHJlZml4OiBvcHRzLmlnbm9yZVF1ZXJ5UHJlZml4ID09PSB0cnVlLFxuICAgICAgICBpbnRlcnByZXROdW1lcmljRW50aXRpZXM6IHR5cGVvZiBvcHRzLmludGVycHJldE51bWVyaWNFbnRpdGllcyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5pbnRlcnByZXROdW1lcmljRW50aXRpZXMgOiBkZWZhdWx0cy5pbnRlcnByZXROdW1lcmljRW50aXRpZXMsXG4gICAgICAgIHBhcmFtZXRlckxpbWl0OiB0eXBlb2Ygb3B0cy5wYXJhbWV0ZXJMaW1pdCA9PT0gJ251bWJlcicgPyBvcHRzLnBhcmFtZXRlckxpbWl0IDogZGVmYXVsdHMucGFyYW1ldGVyTGltaXQsXG4gICAgICAgIHBhcnNlQXJyYXlzOiBvcHRzLnBhcnNlQXJyYXlzICE9PSBmYWxzZSxcbiAgICAgICAgcGxhaW5PYmplY3RzOiB0eXBlb2Ygb3B0cy5wbGFpbk9iamVjdHMgPT09ICdib29sZWFuJyA/IG9wdHMucGxhaW5PYmplY3RzIDogZGVmYXVsdHMucGxhaW5PYmplY3RzLFxuICAgICAgICBzdHJpY3ROdWxsSGFuZGxpbmc6IHR5cGVvZiBvcHRzLnN0cmljdE51bGxIYW5kbGluZyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5zdHJpY3ROdWxsSGFuZGxpbmcgOiBkZWZhdWx0cy5zdHJpY3ROdWxsSGFuZGxpbmdcbiAgICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RyLCBvcHRzKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBub3JtYWxpemVQYXJzZU9wdGlvbnMob3B0cyk7XG5cbiAgICBpZiAoc3RyID09PSAnJyB8fCBzdHIgPT09IG51bGwgfHwgdHlwZW9mIHN0ciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuICAgIH1cblxuICAgIHZhciB0ZW1wT2JqID0gdHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgPyBwYXJzZVZhbHVlcyhzdHIsIG9wdGlvbnMpIDogc3RyO1xuICAgIHZhciBvYmogPSBvcHRpb25zLnBsYWluT2JqZWN0cyA/IE9iamVjdC5jcmVhdGUobnVsbCkgOiB7fTtcblxuICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUga2V5cyBhbmQgc2V0dXAgdGhlIG5ldyBvYmplY3RcblxuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModGVtcE9iaik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICB2YXIgbmV3T2JqID0gcGFyc2VLZXlzKGtleSwgdGVtcE9ialtrZXldLCBvcHRpb25zKTtcbiAgICAgICAgb2JqID0gdXRpbHMubWVyZ2Uob2JqLCBuZXdPYmosIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiB1dGlscy5jb21wYWN0KG9iaik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgZm9ybWF0cyA9IHJlcXVpcmUoJy4vZm9ybWF0cycpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBhcnJheVByZWZpeEdlbmVyYXRvcnMgPSB7XG4gICAgYnJhY2tldHM6IGZ1bmN0aW9uIGJyYWNrZXRzKHByZWZpeCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZ1bmMtbmFtZS1tYXRjaGluZ1xuICAgICAgICByZXR1cm4gcHJlZml4ICsgJ1tdJztcbiAgICB9LFxuICAgIGNvbW1hOiAnY29tbWEnLFxuICAgIGluZGljZXM6IGZ1bmN0aW9uIGluZGljZXMocHJlZml4LCBrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBmdW5jLW5hbWUtbWF0Y2hpbmdcbiAgICAgICAgcmV0dXJuIHByZWZpeCArICdbJyArIGtleSArICddJztcbiAgICB9LFxuICAgIHJlcGVhdDogZnVuY3Rpb24gcmVwZWF0KHByZWZpeCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZ1bmMtbmFtZS1tYXRjaGluZ1xuICAgICAgICByZXR1cm4gcHJlZml4O1xuICAgIH1cbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbnZhciBwdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2g7XG52YXIgcHVzaFRvQXJyYXkgPSBmdW5jdGlvbiAoYXJyLCB2YWx1ZU9yQXJyYXkpIHtcbiAgICBwdXNoLmFwcGx5KGFyciwgaXNBcnJheSh2YWx1ZU9yQXJyYXkpID8gdmFsdWVPckFycmF5IDogW3ZhbHVlT3JBcnJheV0pO1xufTtcblxudmFyIHRvSVNPID0gRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc7XG5cbnZhciBkZWZhdWx0cyA9IHtcbiAgICBhZGRRdWVyeVByZWZpeDogZmFsc2UsXG4gICAgYWxsb3dEb3RzOiBmYWxzZSxcbiAgICBjaGFyc2V0OiAndXRmLTgnLFxuICAgIGNoYXJzZXRTZW50aW5lbDogZmFsc2UsXG4gICAgZGVsaW1pdGVyOiAnJicsXG4gICAgZW5jb2RlOiB0cnVlLFxuICAgIGVuY29kZXI6IHV0aWxzLmVuY29kZSxcbiAgICBlbmNvZGVWYWx1ZXNPbmx5OiBmYWxzZSxcbiAgICBmb3JtYXR0ZXI6IGZvcm1hdHMuZm9ybWF0dGVyc1tmb3JtYXRzWydkZWZhdWx0J11dLFxuICAgIC8vIGRlcHJlY2F0ZWRcbiAgICBpbmRpY2VzOiBmYWxzZSxcbiAgICBzZXJpYWxpemVEYXRlOiBmdW5jdGlvbiBzZXJpYWxpemVEYXRlKGRhdGUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBmdW5jLW5hbWUtbWF0Y2hpbmdcbiAgICAgICAgcmV0dXJuIHRvSVNPLmNhbGwoZGF0ZSk7XG4gICAgfSxcbiAgICBza2lwTnVsbHM6IGZhbHNlLFxuICAgIHN0cmljdE51bGxIYW5kbGluZzogZmFsc2Vcbn07XG5cbnZhciBzdHJpbmdpZnkgPSBmdW5jdGlvbiBzdHJpbmdpZnkoIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG4gICAgb2JqZWN0LFxuICAgIHByZWZpeCxcbiAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgIHN0cmljdE51bGxIYW5kbGluZyxcbiAgICBza2lwTnVsbHMsXG4gICAgZW5jb2RlcixcbiAgICBmaWx0ZXIsXG4gICAgc29ydCxcbiAgICBhbGxvd0RvdHMsXG4gICAgc2VyaWFsaXplRGF0ZSxcbiAgICBmb3JtYXR0ZXIsXG4gICAgZW5jb2RlVmFsdWVzT25seSxcbiAgICBjaGFyc2V0XG4pIHtcbiAgICB2YXIgb2JqID0gb2JqZWN0O1xuICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG9iaiA9IGZpbHRlcihwcmVmaXgsIG9iaik7XG4gICAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIG9iaiA9IHNlcmlhbGl6ZURhdGUob2JqKTtcbiAgICB9IGVsc2UgaWYgKGdlbmVyYXRlQXJyYXlQcmVmaXggPT09ICdjb21tYScgJiYgaXNBcnJheShvYmopKSB7XG4gICAgICAgIG9iaiA9IG9iai5qb2luKCcsJyk7XG4gICAgfVxuXG4gICAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgICAgICBpZiAoc3RyaWN0TnVsbEhhbmRsaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gZW5jb2RlciAmJiAhZW5jb2RlVmFsdWVzT25seSA/IGVuY29kZXIocHJlZml4LCBkZWZhdWx0cy5lbmNvZGVyLCBjaGFyc2V0KSA6IHByZWZpeDtcbiAgICAgICAgfVxuXG4gICAgICAgIG9iaiA9ICcnO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJyB8fCB0eXBlb2Ygb2JqID09PSAnbnVtYmVyJyB8fCB0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicgfHwgdXRpbHMuaXNCdWZmZXIob2JqKSkge1xuICAgICAgICBpZiAoZW5jb2Rlcikge1xuICAgICAgICAgICAgdmFyIGtleVZhbHVlID0gZW5jb2RlVmFsdWVzT25seSA/IHByZWZpeCA6IGVuY29kZXIocHJlZml4LCBkZWZhdWx0cy5lbmNvZGVyLCBjaGFyc2V0KTtcbiAgICAgICAgICAgIHJldHVybiBbZm9ybWF0dGVyKGtleVZhbHVlKSArICc9JyArIGZvcm1hdHRlcihlbmNvZGVyKG9iaiwgZGVmYXVsdHMuZW5jb2RlciwgY2hhcnNldCkpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2Zvcm1hdHRlcihwcmVmaXgpICsgJz0nICsgZm9ybWF0dGVyKFN0cmluZyhvYmopKV07XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfVxuXG4gICAgdmFyIG9iaktleXM7XG4gICAgaWYgKGlzQXJyYXkoZmlsdGVyKSkge1xuICAgICAgICBvYmpLZXlzID0gZmlsdGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICAgICAgb2JqS2V5cyA9IHNvcnQgPyBrZXlzLnNvcnQoc29ydCkgOiBrZXlzO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqS2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIga2V5ID0gb2JqS2V5c1tpXTtcblxuICAgICAgICBpZiAoc2tpcE51bGxzICYmIG9ialtrZXldID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgIHB1c2hUb0FycmF5KHZhbHVlcywgc3RyaW5naWZ5KFxuICAgICAgICAgICAgICAgIG9ialtrZXldLFxuICAgICAgICAgICAgICAgIHR5cGVvZiBnZW5lcmF0ZUFycmF5UHJlZml4ID09PSAnZnVuY3Rpb24nID8gZ2VuZXJhdGVBcnJheVByZWZpeChwcmVmaXgsIGtleSkgOiBwcmVmaXgsXG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVBcnJheVByZWZpeCxcbiAgICAgICAgICAgICAgICBzdHJpY3ROdWxsSGFuZGxpbmcsXG4gICAgICAgICAgICAgICAgc2tpcE51bGxzLFxuICAgICAgICAgICAgICAgIGVuY29kZXIsXG4gICAgICAgICAgICAgICAgZmlsdGVyLFxuICAgICAgICAgICAgICAgIHNvcnQsXG4gICAgICAgICAgICAgICAgYWxsb3dEb3RzLFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZURhdGUsXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyLFxuICAgICAgICAgICAgICAgIGVuY29kZVZhbHVlc09ubHksXG4gICAgICAgICAgICAgICAgY2hhcnNldFxuICAgICAgICAgICAgKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwdXNoVG9BcnJheSh2YWx1ZXMsIHN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICBvYmpba2V5XSxcbiAgICAgICAgICAgICAgICBwcmVmaXggKyAoYWxsb3dEb3RzID8gJy4nICsga2V5IDogJ1snICsga2V5ICsgJ10nKSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgICAgICAgICAgICAgIHN0cmljdE51bGxIYW5kbGluZyxcbiAgICAgICAgICAgICAgICBza2lwTnVsbHMsXG4gICAgICAgICAgICAgICAgZW5jb2RlcixcbiAgICAgICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICAgICAgc29ydCxcbiAgICAgICAgICAgICAgICBhbGxvd0RvdHMsXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgZW5jb2RlVmFsdWVzT25seSxcbiAgICAgICAgICAgICAgICBjaGFyc2V0XG4gICAgICAgICAgICApKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZXM7XG59O1xuXG52YXIgbm9ybWFsaXplU3RyaW5naWZ5T3B0aW9ucyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZVN0cmluZ2lmeU9wdGlvbnMob3B0cykge1xuICAgIGlmICghb3B0cykge1xuICAgICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuZW5jb2RlciAhPT0gbnVsbCAmJiBvcHRzLmVuY29kZXIgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0cy5lbmNvZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0VuY29kZXIgaGFzIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgdmFyIGNoYXJzZXQgPSBvcHRzLmNoYXJzZXQgfHwgZGVmYXVsdHMuY2hhcnNldDtcbiAgICBpZiAodHlwZW9mIG9wdHMuY2hhcnNldCAhPT0gJ3VuZGVmaW5lZCcgJiYgb3B0cy5jaGFyc2V0ICE9PSAndXRmLTgnICYmIG9wdHMuY2hhcnNldCAhPT0gJ2lzby04ODU5LTEnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBjaGFyc2V0IG9wdGlvbiBtdXN0IGJlIGVpdGhlciB1dGYtOCwgaXNvLTg4NTktMSwgb3IgdW5kZWZpbmVkJyk7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdCA9IGZvcm1hdHNbJ2RlZmF1bHQnXTtcbiAgICBpZiAodHlwZW9mIG9wdHMuZm9ybWF0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpZiAoIWhhcy5jYWxsKGZvcm1hdHMuZm9ybWF0dGVycywgb3B0cy5mb3JtYXQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGZvcm1hdCBvcHRpb24gcHJvdmlkZWQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgZm9ybWF0ID0gb3B0cy5mb3JtYXQ7XG4gICAgfVxuICAgIHZhciBmb3JtYXR0ZXIgPSBmb3JtYXRzLmZvcm1hdHRlcnNbZm9ybWF0XTtcblxuICAgIHZhciBmaWx0ZXIgPSBkZWZhdWx0cy5maWx0ZXI7XG4gICAgaWYgKHR5cGVvZiBvcHRzLmZpbHRlciA9PT0gJ2Z1bmN0aW9uJyB8fCBpc0FycmF5KG9wdHMuZmlsdGVyKSkge1xuICAgICAgICBmaWx0ZXIgPSBvcHRzLmZpbHRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBhZGRRdWVyeVByZWZpeDogdHlwZW9mIG9wdHMuYWRkUXVlcnlQcmVmaXggPT09ICdib29sZWFuJyA/IG9wdHMuYWRkUXVlcnlQcmVmaXggOiBkZWZhdWx0cy5hZGRRdWVyeVByZWZpeCxcbiAgICAgICAgYWxsb3dEb3RzOiB0eXBlb2Ygb3B0cy5hbGxvd0RvdHMgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdHMuYWxsb3dEb3RzIDogISFvcHRzLmFsbG93RG90cyxcbiAgICAgICAgY2hhcnNldDogY2hhcnNldCxcbiAgICAgICAgY2hhcnNldFNlbnRpbmVsOiB0eXBlb2Ygb3B0cy5jaGFyc2V0U2VudGluZWwgPT09ICdib29sZWFuJyA/IG9wdHMuY2hhcnNldFNlbnRpbmVsIDogZGVmYXVsdHMuY2hhcnNldFNlbnRpbmVsLFxuICAgICAgICBkZWxpbWl0ZXI6IHR5cGVvZiBvcHRzLmRlbGltaXRlciA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0cy5kZWxpbWl0ZXIgOiBvcHRzLmRlbGltaXRlcixcbiAgICAgICAgZW5jb2RlOiB0eXBlb2Ygb3B0cy5lbmNvZGUgPT09ICdib29sZWFuJyA/IG9wdHMuZW5jb2RlIDogZGVmYXVsdHMuZW5jb2RlLFxuICAgICAgICBlbmNvZGVyOiB0eXBlb2Ygb3B0cy5lbmNvZGVyID09PSAnZnVuY3Rpb24nID8gb3B0cy5lbmNvZGVyIDogZGVmYXVsdHMuZW5jb2RlcixcbiAgICAgICAgZW5jb2RlVmFsdWVzT25seTogdHlwZW9mIG9wdHMuZW5jb2RlVmFsdWVzT25seSA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5lbmNvZGVWYWx1ZXNPbmx5IDogZGVmYXVsdHMuZW5jb2RlVmFsdWVzT25seSxcbiAgICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICAgIGZvcm1hdHRlcjogZm9ybWF0dGVyLFxuICAgICAgICBzZXJpYWxpemVEYXRlOiB0eXBlb2Ygb3B0cy5zZXJpYWxpemVEYXRlID09PSAnZnVuY3Rpb24nID8gb3B0cy5zZXJpYWxpemVEYXRlIDogZGVmYXVsdHMuc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgc2tpcE51bGxzOiB0eXBlb2Ygb3B0cy5za2lwTnVsbHMgPT09ICdib29sZWFuJyA/IG9wdHMuc2tpcE51bGxzIDogZGVmYXVsdHMuc2tpcE51bGxzLFxuICAgICAgICBzb3J0OiB0eXBlb2Ygb3B0cy5zb3J0ID09PSAnZnVuY3Rpb24nID8gb3B0cy5zb3J0IDogbnVsbCxcbiAgICAgICAgc3RyaWN0TnVsbEhhbmRsaW5nOiB0eXBlb2Ygb3B0cy5zdHJpY3ROdWxsSGFuZGxpbmcgPT09ICdib29sZWFuJyA/IG9wdHMuc3RyaWN0TnVsbEhhbmRsaW5nIDogZGVmYXVsdHMuc3RyaWN0TnVsbEhhbmRsaW5nXG4gICAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgb3B0cykge1xuICAgIHZhciBvYmogPSBvYmplY3Q7XG4gICAgdmFyIG9wdGlvbnMgPSBub3JtYWxpemVTdHJpbmdpZnlPcHRpb25zKG9wdHMpO1xuXG4gICAgdmFyIG9iaktleXM7XG4gICAgdmFyIGZpbHRlcjtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5maWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgICAgIG9iaiA9IGZpbHRlcignJywgb2JqKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob3B0aW9ucy5maWx0ZXIpKSB7XG4gICAgICAgIGZpbHRlciA9IG9wdGlvbnMuZmlsdGVyO1xuICAgICAgICBvYmpLZXlzID0gZmlsdGVyO1xuICAgIH1cblxuICAgIHZhciBrZXlzID0gW107XG5cbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICB2YXIgYXJyYXlGb3JtYXQ7XG4gICAgaWYgKG9wdHMgJiYgb3B0cy5hcnJheUZvcm1hdCBpbiBhcnJheVByZWZpeEdlbmVyYXRvcnMpIHtcbiAgICAgICAgYXJyYXlGb3JtYXQgPSBvcHRzLmFycmF5Rm9ybWF0O1xuICAgIH0gZWxzZSBpZiAob3B0cyAmJiAnaW5kaWNlcycgaW4gb3B0cykge1xuICAgICAgICBhcnJheUZvcm1hdCA9IG9wdHMuaW5kaWNlcyA/ICdpbmRpY2VzJyA6ICdyZXBlYXQnO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5Rm9ybWF0ID0gJ2luZGljZXMnO1xuICAgIH1cblxuICAgIHZhciBnZW5lcmF0ZUFycmF5UHJlZml4ID0gYXJyYXlQcmVmaXhHZW5lcmF0b3JzW2FycmF5Rm9ybWF0XTtcblxuICAgIGlmICghb2JqS2V5cykge1xuICAgICAgICBvYmpLZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zb3J0KSB7XG4gICAgICAgIG9iaktleXMuc29ydChvcHRpb25zLnNvcnQpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqS2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIga2V5ID0gb2JqS2V5c1tpXTtcblxuICAgICAgICBpZiAob3B0aW9ucy5za2lwTnVsbHMgJiYgb2JqW2tleV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHB1c2hUb0FycmF5KGtleXMsIHN0cmluZ2lmeShcbiAgICAgICAgICAgIG9ialtrZXldLFxuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgZ2VuZXJhdGVBcnJheVByZWZpeCxcbiAgICAgICAgICAgIG9wdGlvbnMuc3RyaWN0TnVsbEhhbmRsaW5nLFxuICAgICAgICAgICAgb3B0aW9ucy5za2lwTnVsbHMsXG4gICAgICAgICAgICBvcHRpb25zLmVuY29kZSA/IG9wdGlvbnMuZW5jb2RlciA6IG51bGwsXG4gICAgICAgICAgICBvcHRpb25zLmZpbHRlcixcbiAgICAgICAgICAgIG9wdGlvbnMuc29ydCxcbiAgICAgICAgICAgIG9wdGlvbnMuYWxsb3dEb3RzLFxuICAgICAgICAgICAgb3B0aW9ucy5zZXJpYWxpemVEYXRlLFxuICAgICAgICAgICAgb3B0aW9ucy5mb3JtYXR0ZXIsXG4gICAgICAgICAgICBvcHRpb25zLmVuY29kZVZhbHVlc09ubHksXG4gICAgICAgICAgICBvcHRpb25zLmNoYXJzZXRcbiAgICAgICAgKSk7XG4gICAgfVxuXG4gICAgdmFyIGpvaW5lZCA9IGtleXMuam9pbihvcHRpb25zLmRlbGltaXRlcik7XG4gICAgdmFyIHByZWZpeCA9IG9wdGlvbnMuYWRkUXVlcnlQcmVmaXggPT09IHRydWUgPyAnPycgOiAnJztcblxuICAgIGlmIChvcHRpb25zLmNoYXJzZXRTZW50aW5lbCkge1xuICAgICAgICBpZiAob3B0aW9ucy5jaGFyc2V0ID09PSAnaXNvLTg4NTktMScpIHtcbiAgICAgICAgICAgIC8vIGVuY29kZVVSSUNvbXBvbmVudCgnJiMxMDAwMzsnKSwgdGhlIFwibnVtZXJpYyBlbnRpdHlcIiByZXByZXNlbnRhdGlvbiBvZiBhIGNoZWNrbWFya1xuICAgICAgICAgICAgcHJlZml4ICs9ICd1dGY4PSUyNiUyMzEwMDAzJTNCJic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBlbmNvZGVVUklDb21wb25lbnQoJ+KckycpXG4gICAgICAgICAgICBwcmVmaXggKz0gJ3V0Zjg9JUUyJTlDJTkzJic7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gam9pbmVkLmxlbmd0aCA+IDAgPyBwcmVmaXggKyBqb2luZWQgOiAnJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG52YXIgaGV4VGFibGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgICAgICAgYXJyYXkucHVzaCgnJScgKyAoKGkgPCAxNiA/ICcwJyA6ICcnKSArIGkudG9TdHJpbmcoMTYpKS50b1VwcGVyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG59KCkpO1xuXG52YXIgY29tcGFjdFF1ZXVlID0gZnVuY3Rpb24gY29tcGFjdFF1ZXVlKHF1ZXVlKSB7XG4gICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdmFyIGl0ZW0gPSBxdWV1ZS5wb3AoKTtcbiAgICAgICAgdmFyIG9iaiA9IGl0ZW0ub2JqW2l0ZW0ucHJvcF07XG5cbiAgICAgICAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgICAgICAgICAgdmFyIGNvbXBhY3RlZCA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG9iai5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqW2pdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wYWN0ZWQucHVzaChvYmpbal0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXRlbS5vYmpbaXRlbS5wcm9wXSA9IGNvbXBhY3RlZDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbnZhciBhcnJheVRvT2JqZWN0ID0gZnVuY3Rpb24gYXJyYXlUb09iamVjdChzb3VyY2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqID0gb3B0aW9ucyAmJiBvcHRpb25zLnBsYWluT2JqZWN0cyA/IE9iamVjdC5jcmVhdGUobnVsbCkgOiB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAodHlwZW9mIHNvdXJjZVtpXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIG9ialtpXSA9IHNvdXJjZVtpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG59O1xuXG52YXIgbWVyZ2UgPSBmdW5jdGlvbiBtZXJnZSh0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucykge1xuICAgIGlmICghc291cmNlKSB7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHRhcmdldCkpIHtcbiAgICAgICAgICAgIHRhcmdldC5wdXNoKHNvdXJjZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ICYmIHR5cGVvZiB0YXJnZXQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAoKG9wdGlvbnMgJiYgKG9wdGlvbnMucGxhaW5PYmplY3RzIHx8IG9wdGlvbnMuYWxsb3dQcm90b3R5cGVzKSkgfHwgIWhhcy5jYWxsKE9iamVjdC5wcm90b3R5cGUsIHNvdXJjZSkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbc291cmNlXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW3RhcmdldCwgc291cmNlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXQgfHwgdHlwZW9mIHRhcmdldCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIFt0YXJnZXRdLmNvbmNhdChzb3VyY2UpO1xuICAgIH1cblxuICAgIHZhciBtZXJnZVRhcmdldCA9IHRhcmdldDtcbiAgICBpZiAoaXNBcnJheSh0YXJnZXQpICYmICFpc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgbWVyZ2VUYXJnZXQgPSBhcnJheVRvT2JqZWN0KHRhcmdldCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKGlzQXJyYXkodGFyZ2V0KSAmJiBpc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgc291cmNlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGkpIHtcbiAgICAgICAgICAgIGlmIChoYXMuY2FsbCh0YXJnZXQsIGkpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRhcmdldEl0ZW0gPSB0YXJnZXRbaV07XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldEl0ZW0gJiYgdHlwZW9mIHRhcmdldEl0ZW0gPT09ICdvYmplY3QnICYmIGl0ZW0gJiYgdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtpXSA9IG1lcmdlKHRhcmdldEl0ZW0sIGl0ZW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W2ldID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHNvdXJjZSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBzb3VyY2Vba2V5XTtcblxuICAgICAgICBpZiAoaGFzLmNhbGwoYWNjLCBrZXkpKSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IG1lcmdlKGFjY1trZXldLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbWVyZ2VUYXJnZXQpO1xufTtcblxudmFyIGFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnblNpbmdsZVNvdXJjZSh0YXJnZXQsIHNvdXJjZSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhzb3VyY2UpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBrZXkpIHtcbiAgICAgICAgYWNjW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB0YXJnZXQpO1xufTtcblxudmFyIGRlY29kZSA9IGZ1bmN0aW9uIChzdHIsIGRlY29kZXIsIGNoYXJzZXQpIHtcbiAgICB2YXIgc3RyV2l0aG91dFBsdXMgPSBzdHIucmVwbGFjZSgvXFwrL2csICcgJyk7XG4gICAgaWYgKGNoYXJzZXQgPT09ICdpc28tODg1OS0xJykge1xuICAgICAgICAvLyB1bmVzY2FwZSBuZXZlciB0aHJvd3MsIG5vIHRyeS4uLmNhdGNoIG5lZWRlZDpcbiAgICAgICAgcmV0dXJuIHN0cldpdGhvdXRQbHVzLnJlcGxhY2UoLyVbMC05YS1mXXsyfS9naSwgdW5lc2NhcGUpO1xuICAgIH1cbiAgICAvLyB1dGYtOFxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoc3RyV2l0aG91dFBsdXMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHN0cldpdGhvdXRQbHVzO1xuICAgIH1cbn07XG5cbnZhciBlbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoc3RyLCBkZWZhdWx0RW5jb2RlciwgY2hhcnNldCkge1xuICAgIC8vIFRoaXMgY29kZSB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5IEJyaWFuIFdoaXRlIChtc2NkZXgpIGZvciB0aGUgaW8uanMgY29yZSBxdWVyeXN0cmluZyBsaWJyYXJ5LlxuICAgIC8vIEl0IGhhcyBiZWVuIGFkYXB0ZWQgaGVyZSBmb3Igc3RyaWN0ZXIgYWRoZXJlbmNlIHRvIFJGQyAzOTg2XG4gICAgaWYgKHN0ci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG5cbiAgICB2YXIgc3RyaW5nID0gdHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgPyBzdHIgOiBTdHJpbmcoc3RyKTtcblxuICAgIGlmIChjaGFyc2V0ID09PSAnaXNvLTg4NTktMScpIHtcbiAgICAgICAgcmV0dXJuIGVzY2FwZShzdHJpbmcpLnJlcGxhY2UoLyV1WzAtOWEtZl17NH0vZ2ksIGZ1bmN0aW9uICgkMCkge1xuICAgICAgICAgICAgcmV0dXJuICclMjYlMjMnICsgcGFyc2VJbnQoJDAuc2xpY2UoMiksIDE2KSArICclM0InO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgb3V0ID0gJyc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGMgPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjID09PSAweDJEIC8vIC1cbiAgICAgICAgICAgIHx8IGMgPT09IDB4MkUgLy8gLlxuICAgICAgICAgICAgfHwgYyA9PT0gMHg1RiAvLyBfXG4gICAgICAgICAgICB8fCBjID09PSAweDdFIC8vIH5cbiAgICAgICAgICAgIHx8IChjID49IDB4MzAgJiYgYyA8PSAweDM5KSAvLyAwLTlcbiAgICAgICAgICAgIHx8IChjID49IDB4NDEgJiYgYyA8PSAweDVBKSAvLyBhLXpcbiAgICAgICAgICAgIHx8IChjID49IDB4NjEgJiYgYyA8PSAweDdBKSAvLyBBLVpcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBvdXQgKz0gc3RyaW5nLmNoYXJBdChpKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgPCAweDgwKSB7XG4gICAgICAgICAgICBvdXQgPSBvdXQgKyBoZXhUYWJsZVtjXTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgPCAweDgwMCkge1xuICAgICAgICAgICAgb3V0ID0gb3V0ICsgKGhleFRhYmxlWzB4QzAgfCAoYyA+PiA2KV0gKyBoZXhUYWJsZVsweDgwIHwgKGMgJiAweDNGKV0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYyA8IDB4RDgwMCB8fCBjID49IDB4RTAwMCkge1xuICAgICAgICAgICAgb3V0ID0gb3V0ICsgKGhleFRhYmxlWzB4RTAgfCAoYyA+PiAxMildICsgaGV4VGFibGVbMHg4MCB8ICgoYyA+PiA2KSAmIDB4M0YpXSArIGhleFRhYmxlWzB4ODAgfCAoYyAmIDB4M0YpXSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGkgKz0gMTtcbiAgICAgICAgYyA9IDB4MTAwMDAgKyAoKChjICYgMHgzRkYpIDw8IDEwKSB8IChzdHJpbmcuY2hhckNvZGVBdChpKSAmIDB4M0ZGKSk7XG4gICAgICAgIG91dCArPSBoZXhUYWJsZVsweEYwIHwgKGMgPj4gMTgpXVxuICAgICAgICAgICAgKyBoZXhUYWJsZVsweDgwIHwgKChjID4+IDEyKSAmIDB4M0YpXVxuICAgICAgICAgICAgKyBoZXhUYWJsZVsweDgwIHwgKChjID4+IDYpICYgMHgzRildXG4gICAgICAgICAgICArIGhleFRhYmxlWzB4ODAgfCAoYyAmIDB4M0YpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxudmFyIGNvbXBhY3QgPSBmdW5jdGlvbiBjb21wYWN0KHZhbHVlKSB7XG4gICAgdmFyIHF1ZXVlID0gW3sgb2JqOiB7IG86IHZhbHVlIH0sIHByb3A6ICdvJyB9XTtcbiAgICB2YXIgcmVmcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgaXRlbSA9IHF1ZXVlW2ldO1xuICAgICAgICB2YXIgb2JqID0gaXRlbS5vYmpbaXRlbS5wcm9wXTtcblxuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwga2V5cy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbal07XG4gICAgICAgICAgICB2YXIgdmFsID0gb2JqW2tleV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsICE9PSBudWxsICYmIHJlZnMuaW5kZXhPZih2YWwpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHF1ZXVlLnB1c2goeyBvYmo6IG9iaiwgcHJvcDoga2V5IH0pO1xuICAgICAgICAgICAgICAgIHJlZnMucHVzaCh2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29tcGFjdFF1ZXVlKHF1ZXVlKTtcblxuICAgIHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBpc1JlZ0V4cCA9IGZ1bmN0aW9uIGlzUmVnRXhwKG9iaikge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59O1xuXG52YXIgaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlcihvYmopIHtcbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICEhKG9iai5jb25zdHJ1Y3RvciAmJiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iaikpO1xufTtcblxudmFyIGNvbWJpbmUgPSBmdW5jdGlvbiBjb21iaW5lKGEsIGIpIHtcbiAgICByZXR1cm4gW10uY29uY2F0KGEsIGIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYXJyYXlUb09iamVjdDogYXJyYXlUb09iamVjdCxcbiAgICBhc3NpZ246IGFzc2lnbixcbiAgICBjb21iaW5lOiBjb21iaW5lLFxuICAgIGNvbXBhY3Q6IGNvbXBhY3QsXG4gICAgZGVjb2RlOiBkZWNvZGUsXG4gICAgZW5jb2RlOiBlbmNvZGUsXG4gICAgaXNCdWZmZXI6IGlzQnVmZmVyLFxuICAgIGlzUmVnRXhwOiBpc1JlZ0V4cCxcbiAgICBtZXJnZTogbWVyZ2Vcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xudmFyIEVTID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvZXM1Jyk7XG52YXIgcmVwbGFjZSA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpO1xuXG52YXIgbGVmdFdoaXRlc3BhY2UgPSAvXltcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkZdKy87XG52YXIgcmlnaHRXaGl0ZXNwYWNlID0gL1tcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkZdKyQvO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRyaW0oKSB7XG5cdHZhciBTID0gRVMuVG9TdHJpbmcoRVMuQ2hlY2tPYmplY3RDb2VyY2libGUodGhpcykpO1xuXHRyZXR1cm4gcmVwbGFjZShyZXBsYWNlKFMsIGxlZnRXaGl0ZXNwYWNlLCAnJyksIHJpZ2h0V2hpdGVzcGFjZSwgJycpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCdmdW5jdGlvbi1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kVHJpbSA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBnZXRQb2x5ZmlsbCgpKTtcblxuZGVmaW5lKGJvdW5kVHJpbSwge1xuXHRnZXRQb2x5ZmlsbDogZ2V0UG9seWZpbGwsXG5cdGltcGxlbWVudGF0aW9uOiBpbXBsZW1lbnRhdGlvbixcblx0c2hpbTogc2hpbVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gYm91bmRUcmltO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciB6ZXJvV2lkdGhTcGFjZSA9ICdcXHUyMDBiJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKFN0cmluZy5wcm90b3R5cGUudHJpbSAmJiB6ZXJvV2lkdGhTcGFjZS50cmltKCkgPT09IHplcm9XaWR0aFNwYWNlKSB7XG5cdFx0cmV0dXJuIFN0cmluZy5wcm90b3R5cGUudHJpbTtcblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaGltU3RyaW5nVHJpbSgpIHtcblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0ZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIHsgdHJpbTogcG9seWZpbGwgfSwgeyB0cmltOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTdHJpbmcucHJvdG90eXBlLnRyaW0gIT09IHBvbHlmaWxsOyB9IH0pO1xuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIiwiLypcblx0TUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcblx0QXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cblxudmFyIHN0eWxlc0luRG9tID0ge307XG5cbnZhclx0bWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuXHR2YXIgbWVtbztcblxuXHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdGlmICh0eXBlb2YgbWVtbyA9PT0gXCJ1bmRlZmluZWRcIikgbWVtbyA9IGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0cmV0dXJuIG1lbW87XG5cdH07XG59O1xuXG52YXIgaXNPbGRJRSA9IG1lbW9pemUoZnVuY3Rpb24gKCkge1xuXHQvLyBUZXN0IGZvciBJRSA8PSA5IGFzIHByb3Bvc2VkIGJ5IEJyb3dzZXJoYWNrc1xuXHQvLyBAc2VlIGh0dHA6Ly9icm93c2VyaGFja3MuY29tLyNoYWNrLWU3MWQ4NjkyZjY1MzM0MTczZmVlNzE1YzIyMmNiODA1XG5cdC8vIFRlc3RzIGZvciBleGlzdGVuY2Ugb2Ygc3RhbmRhcmQgZ2xvYmFscyBpcyB0byBhbGxvdyBzdHlsZS1sb2FkZXJcblx0Ly8gdG8gb3BlcmF0ZSBjb3JyZWN0bHkgaW50byBub24tc3RhbmRhcmQgZW52aXJvbm1lbnRzXG5cdC8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2stY29udHJpYi9zdHlsZS1sb2FkZXIvaXNzdWVzLzE3N1xuXHRyZXR1cm4gd2luZG93ICYmIGRvY3VtZW50ICYmIGRvY3VtZW50LmFsbCAmJiAhd2luZG93LmF0b2I7XG59KTtcblxudmFyIGdldFRhcmdldCA9IGZ1bmN0aW9uICh0YXJnZXQsIHBhcmVudCkge1xuICBpZiAocGFyZW50KXtcbiAgICByZXR1cm4gcGFyZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTtcbiAgfVxuICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXQpO1xufTtcblxudmFyIGdldEVsZW1lbnQgPSAoZnVuY3Rpb24gKGZuKSB7XG5cdHZhciBtZW1vID0ge307XG5cblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldCwgcGFyZW50KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgcGFzc2luZyBmdW5jdGlvbiBpbiBvcHRpb25zLCB0aGVuIHVzZSBpdCBmb3IgcmVzb2x2ZSBcImhlYWRcIiBlbGVtZW50LlxuICAgICAgICAgICAgICAgIC8vIFVzZWZ1bCBmb3IgU2hhZG93IFJvb3Qgc3R5bGUgaS5lXG4gICAgICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgICAgIC8vICAgaW5zZXJ0SW50bzogZnVuY3Rpb24gKCkgeyByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNmb29cIikuc2hhZG93Um9vdCB9XG4gICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVtb1t0YXJnZXRdID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR2YXIgc3R5bGVUYXJnZXQgPSBnZXRUYXJnZXQuY2FsbCh0aGlzLCB0YXJnZXQsIHBhcmVudCk7XG5cdFx0XHQvLyBTcGVjaWFsIGNhc2UgdG8gcmV0dXJuIGhlYWQgb2YgaWZyYW1lIGluc3RlYWQgb2YgaWZyYW1lIGl0c2VsZlxuXHRcdFx0aWYgKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCAmJiBzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG5cdFx0XHRcdFx0Ly8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcblx0XHRcdFx0XHRzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuXHRcdFx0XHR9IGNhdGNoKGUpIHtcblx0XHRcdFx0XHRzdHlsZVRhcmdldCA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuXHRcdH1cblx0XHRyZXR1cm4gbWVtb1t0YXJnZXRdXG5cdH07XG59KSgpO1xuXG52YXIgc2luZ2xldG9uID0gbnVsbDtcbnZhclx0c2luZ2xldG9uQ291bnRlciA9IDA7XG52YXJcdHN0eWxlc0luc2VydGVkQXRUb3AgPSBbXTtcblxudmFyXHRmaXhVcmxzID0gcmVxdWlyZShcIi4vdXJsc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihsaXN0LCBvcHRpb25zKSB7XG5cdGlmICh0eXBlb2YgREVCVUcgIT09IFwidW5kZWZpbmVkXCIgJiYgREVCVUcpIHtcblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgc3R5bGUtbG9hZGVyIGNhbm5vdCBiZSB1c2VkIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnRcIik7XG5cdH1cblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRvcHRpb25zLmF0dHJzID0gdHlwZW9mIG9wdGlvbnMuYXR0cnMgPT09IFwib2JqZWN0XCIgPyBvcHRpb25zLmF0dHJzIDoge307XG5cblx0Ly8gRm9yY2Ugc2luZ2xlLXRhZyBzb2x1dGlvbiBvbiBJRTYtOSwgd2hpY2ggaGFzIGEgaGFyZCBsaW1pdCBvbiB0aGUgIyBvZiA8c3R5bGU+XG5cdC8vIHRhZ3MgaXQgd2lsbCBhbGxvdyBvbiBhIHBhZ2Vcblx0aWYgKCFvcHRpb25zLnNpbmdsZXRvbiAmJiB0eXBlb2Ygb3B0aW9ucy5zaW5nbGV0b24gIT09IFwiYm9vbGVhblwiKSBvcHRpb25zLnNpbmdsZXRvbiA9IGlzT2xkSUUoKTtcblxuXHQvLyBCeSBkZWZhdWx0LCBhZGQgPHN0eWxlPiB0YWdzIHRvIHRoZSA8aGVhZD4gZWxlbWVudFxuICAgICAgICBpZiAoIW9wdGlvbnMuaW5zZXJ0SW50bykgb3B0aW9ucy5pbnNlcnRJbnRvID0gXCJoZWFkXCI7XG5cblx0Ly8gQnkgZGVmYXVsdCwgYWRkIDxzdHlsZT4gdGFncyB0byB0aGUgYm90dG9tIG9mIHRoZSB0YXJnZXRcblx0aWYgKCFvcHRpb25zLmluc2VydEF0KSBvcHRpb25zLmluc2VydEF0ID0gXCJib3R0b21cIjtcblxuXHR2YXIgc3R5bGVzID0gbGlzdFRvU3R5bGVzKGxpc3QsIG9wdGlvbnMpO1xuXG5cdGFkZFN0eWxlc1RvRG9tKHN0eWxlcywgb3B0aW9ucyk7XG5cblx0cmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZSAobmV3TGlzdCkge1xuXHRcdHZhciBtYXlSZW1vdmUgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaXRlbSA9IHN0eWxlc1tpXTtcblx0XHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuXG5cdFx0XHRkb21TdHlsZS5yZWZzLS07XG5cdFx0XHRtYXlSZW1vdmUucHVzaChkb21TdHlsZSk7XG5cdFx0fVxuXG5cdFx0aWYobmV3TGlzdCkge1xuXHRcdFx0dmFyIG5ld1N0eWxlcyA9IGxpc3RUb1N0eWxlcyhuZXdMaXN0LCBvcHRpb25zKTtcblx0XHRcdGFkZFN0eWxlc1RvRG9tKG5ld1N0eWxlcywgb3B0aW9ucyk7XG5cdFx0fVxuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtYXlSZW1vdmUubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBkb21TdHlsZSA9IG1heVJlbW92ZVtpXTtcblxuXHRcdFx0aWYoZG9tU3R5bGUucmVmcyA9PT0gMCkge1xuXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSBkb21TdHlsZS5wYXJ0c1tqXSgpO1xuXG5cdFx0XHRcdGRlbGV0ZSBzdHlsZXNJbkRvbVtkb21TdHlsZS5pZF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufTtcblxuZnVuY3Rpb24gYWRkU3R5bGVzVG9Eb20gKHN0eWxlcywgb3B0aW9ucykge1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBpdGVtID0gc3R5bGVzW2ldO1xuXHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuXG5cdFx0aWYoZG9tU3R5bGUpIHtcblx0XHRcdGRvbVN0eWxlLnJlZnMrKztcblxuXHRcdFx0Zm9yKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGRvbVN0eWxlLnBhcnRzW2pdKGl0ZW0ucGFydHNbal0pO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IoOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRkb21TdHlsZS5wYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0sIG9wdGlvbnMpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIHBhcnRzID0gW107XG5cblx0XHRcdGZvcih2YXIgaiA9IDA7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdHBhcnRzLnB1c2goYWRkU3R5bGUoaXRlbS5wYXJ0c1tqXSwgb3B0aW9ucykpO1xuXHRcdFx0fVxuXG5cdFx0XHRzdHlsZXNJbkRvbVtpdGVtLmlkXSA9IHtpZDogaXRlbS5pZCwgcmVmczogMSwgcGFydHM6IHBhcnRzfTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gbGlzdFRvU3R5bGVzIChsaXN0LCBvcHRpb25zKSB7XG5cdHZhciBzdHlsZXMgPSBbXTtcblx0dmFyIG5ld1N0eWxlcyA9IHt9O1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBpdGVtID0gbGlzdFtpXTtcblx0XHR2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcblx0XHR2YXIgY3NzID0gaXRlbVsxXTtcblx0XHR2YXIgbWVkaWEgPSBpdGVtWzJdO1xuXHRcdHZhciBzb3VyY2VNYXAgPSBpdGVtWzNdO1xuXHRcdHZhciBwYXJ0ID0ge2NzczogY3NzLCBtZWRpYTogbWVkaWEsIHNvdXJjZU1hcDogc291cmNlTWFwfTtcblxuXHRcdGlmKCFuZXdTdHlsZXNbaWRdKSBzdHlsZXMucHVzaChuZXdTdHlsZXNbaWRdID0ge2lkOiBpZCwgcGFydHM6IFtwYXJ0XX0pO1xuXHRcdGVsc2UgbmV3U3R5bGVzW2lkXS5wYXJ0cy5wdXNoKHBhcnQpO1xuXHR9XG5cblx0cmV0dXJuIHN0eWxlcztcbn1cblxuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50IChvcHRpb25zLCBzdHlsZSkge1xuXHR2YXIgdGFyZ2V0ID0gZ2V0RWxlbWVudChvcHRpb25zLmluc2VydEludG8pXG5cblx0aWYgKCF0YXJnZXQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydEludG8nIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcblx0fVxuXG5cdHZhciBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcCA9IHN0eWxlc0luc2VydGVkQXRUb3Bbc3R5bGVzSW5zZXJ0ZWRBdFRvcC5sZW5ndGggLSAxXTtcblxuXHRpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJ0b3BcIikge1xuXHRcdGlmICghbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3ApIHtcblx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIHRhcmdldC5maXJzdENoaWxkKTtcblx0XHR9IGVsc2UgaWYgKGxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wLm5leHRTaWJsaW5nKSB7XG5cdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcC5uZXh0U2libGluZyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdFx0fVxuXHRcdHN0eWxlc0luc2VydGVkQXRUb3AucHVzaChzdHlsZSk7XG5cdH0gZWxzZSBpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJib3R0b21cIikge1xuXHRcdHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwib2JqZWN0XCIgJiYgb3B0aW9ucy5pbnNlcnRBdC5iZWZvcmUpIHtcblx0XHR2YXIgbmV4dFNpYmxpbmcgPSBnZXRFbGVtZW50KG9wdGlvbnMuaW5zZXJ0QXQuYmVmb3JlLCB0YXJnZXQpO1xuXHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIG5leHRTaWJsaW5nKTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJbU3R5bGUgTG9hZGVyXVxcblxcbiBJbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgJ2luc2VydEF0JyAoJ29wdGlvbnMuaW5zZXJ0QXQnKSBmb3VuZC5cXG4gTXVzdCBiZSAndG9wJywgJ2JvdHRvbScsIG9yIE9iamVjdC5cXG4gKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrLWNvbnRyaWIvc3R5bGUtbG9hZGVyI2luc2VydGF0KVxcblwiKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQgKHN0eWxlKSB7XG5cdGlmIChzdHlsZS5wYXJlbnROb2RlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cdHN0eWxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGUpO1xuXG5cdHZhciBpZHggPSBzdHlsZXNJbnNlcnRlZEF0VG9wLmluZGV4T2Yoc3R5bGUpO1xuXHRpZihpZHggPj0gMCkge1xuXHRcdHN0eWxlc0luc2VydGVkQXRUb3Auc3BsaWNlKGlkeCwgMSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50IChvcHRpb25zKSB7XG5cdHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcblxuXHRpZihvcHRpb25zLmF0dHJzLnR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdG9wdGlvbnMuYXR0cnMudHlwZSA9IFwidGV4dC9jc3NcIjtcblx0fVxuXG5cdGlmKG9wdGlvbnMuYXR0cnMubm9uY2UgPT09IHVuZGVmaW5lZCkge1xuXHRcdHZhciBub25jZSA9IGdldE5vbmNlKCk7XG5cdFx0aWYgKG5vbmNlKSB7XG5cdFx0XHRvcHRpb25zLmF0dHJzLm5vbmNlID0gbm9uY2U7XG5cdFx0fVxuXHR9XG5cblx0YWRkQXR0cnMoc3R5bGUsIG9wdGlvbnMuYXR0cnMpO1xuXHRpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucywgc3R5bGUpO1xuXG5cdHJldHVybiBzdHlsZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTGlua0VsZW1lbnQgKG9wdGlvbnMpIHtcblx0dmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcblxuXHRpZihvcHRpb25zLmF0dHJzLnR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdG9wdGlvbnMuYXR0cnMudHlwZSA9IFwidGV4dC9jc3NcIjtcblx0fVxuXHRvcHRpb25zLmF0dHJzLnJlbCA9IFwic3R5bGVzaGVldFwiO1xuXG5cdGFkZEF0dHJzKGxpbmssIG9wdGlvbnMuYXR0cnMpO1xuXHRpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucywgbGluayk7XG5cblx0cmV0dXJuIGxpbms7XG59XG5cbmZ1bmN0aW9uIGFkZEF0dHJzIChlbCwgYXR0cnMpIHtcblx0T2JqZWN0LmtleXMoYXR0cnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXHRcdGVsLnNldEF0dHJpYnV0ZShrZXksIGF0dHJzW2tleV0pO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0Tm9uY2UoKSB7XG5cdGlmICh0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRyZXR1cm4gX193ZWJwYWNrX25vbmNlX187XG59XG5cbmZ1bmN0aW9uIGFkZFN0eWxlIChvYmosIG9wdGlvbnMpIHtcblx0dmFyIHN0eWxlLCB1cGRhdGUsIHJlbW92ZSwgcmVzdWx0O1xuXG5cdC8vIElmIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHdhcyBkZWZpbmVkLCBydW4gaXQgb24gdGhlIGNzc1xuXHRpZiAob3B0aW9ucy50cmFuc2Zvcm0gJiYgb2JqLmNzcykge1xuXHQgICAgcmVzdWx0ID0gdHlwZW9mIG9wdGlvbnMudHJhbnNmb3JtID09PSAnZnVuY3Rpb24nXG5cdFx0ID8gb3B0aW9ucy50cmFuc2Zvcm0ob2JqLmNzcykgXG5cdFx0IDogb3B0aW9ucy50cmFuc2Zvcm0uZGVmYXVsdChvYmouY3NzKTtcblxuXHQgICAgaWYgKHJlc3VsdCkge1xuXHQgICAgXHQvLyBJZiB0cmFuc2Zvcm0gcmV0dXJucyBhIHZhbHVlLCB1c2UgdGhhdCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBjc3MuXG5cdCAgICBcdC8vIFRoaXMgYWxsb3dzIHJ1bm5pbmcgcnVudGltZSB0cmFuc2Zvcm1hdGlvbnMgb24gdGhlIGNzcy5cblx0ICAgIFx0b2JqLmNzcyA9IHJlc3VsdDtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdC8vIElmIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gcmV0dXJucyBhIGZhbHN5IHZhbHVlLCBkb24ndCBhZGQgdGhpcyBjc3MuXG5cdCAgICBcdC8vIFRoaXMgYWxsb3dzIGNvbmRpdGlvbmFsIGxvYWRpbmcgb2YgY3NzXG5cdCAgICBcdHJldHVybiBmdW5jdGlvbigpIHtcblx0ICAgIFx0XHQvLyBub29wXG5cdCAgICBcdH07XG5cdCAgICB9XG5cdH1cblxuXHRpZiAob3B0aW9ucy5zaW5nbGV0b24pIHtcblx0XHR2YXIgc3R5bGVJbmRleCA9IHNpbmdsZXRvbkNvdW50ZXIrKztcblxuXHRcdHN0eWxlID0gc2luZ2xldG9uIHx8IChzaW5nbGV0b24gPSBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykpO1xuXG5cdFx0dXBkYXRlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCBmYWxzZSk7XG5cdFx0cmVtb3ZlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCB0cnVlKTtcblxuXHR9IGVsc2UgaWYgKFxuXHRcdG9iai5zb3VyY2VNYXAgJiZcblx0XHR0eXBlb2YgVVJMID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgVVJMLmNyZWF0ZU9iamVjdFVSTCA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIFVSTC5yZXZva2VPYmplY3RVUkwgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBCbG9iID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiXG5cdCkge1xuXHRcdHN0eWxlID0gY3JlYXRlTGlua0VsZW1lbnQob3B0aW9ucyk7XG5cdFx0dXBkYXRlID0gdXBkYXRlTGluay5iaW5kKG51bGwsIHN0eWxlLCBvcHRpb25zKTtcblx0XHRyZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuXG5cdFx0XHRpZihzdHlsZS5ocmVmKSBVUkwucmV2b2tlT2JqZWN0VVJMKHN0eWxlLmhyZWYpO1xuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0c3R5bGUgPSBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG5cdFx0dXBkYXRlID0gYXBwbHlUb1RhZy5iaW5kKG51bGwsIHN0eWxlKTtcblx0XHRyZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuXHRcdH07XG5cdH1cblxuXHR1cGRhdGUob2JqKTtcblxuXHRyZXR1cm4gZnVuY3Rpb24gdXBkYXRlU3R5bGUgKG5ld09iaikge1xuXHRcdGlmIChuZXdPYmopIHtcblx0XHRcdGlmIChcblx0XHRcdFx0bmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJlxuXHRcdFx0XHRuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJlxuXHRcdFx0XHRuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR1cGRhdGUob2JqID0gbmV3T2JqKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVtb3ZlKCk7XG5cdFx0fVxuXHR9O1xufVxuXG52YXIgcmVwbGFjZVRleHQgPSAoZnVuY3Rpb24gKCkge1xuXHR2YXIgdGV4dFN0b3JlID0gW107XG5cblx0cmV0dXJuIGZ1bmN0aW9uIChpbmRleCwgcmVwbGFjZW1lbnQpIHtcblx0XHR0ZXh0U3RvcmVbaW5kZXhdID0gcmVwbGFjZW1lbnQ7XG5cblx0XHRyZXR1cm4gdGV4dFN0b3JlLmZpbHRlcihCb29sZWFuKS5qb2luKCdcXG4nKTtcblx0fTtcbn0pKCk7XG5cbmZ1bmN0aW9uIGFwcGx5VG9TaW5nbGV0b25UYWcgKHN0eWxlLCBpbmRleCwgcmVtb3ZlLCBvYmopIHtcblx0dmFyIGNzcyA9IHJlbW92ZSA/IFwiXCIgOiBvYmouY3NzO1xuXG5cdGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG5cdFx0c3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gcmVwbGFjZVRleHQoaW5kZXgsIGNzcyk7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIGNzc05vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpO1xuXHRcdHZhciBjaGlsZE5vZGVzID0gc3R5bGUuY2hpbGROb2RlcztcblxuXHRcdGlmIChjaGlsZE5vZGVzW2luZGV4XSkgc3R5bGUucmVtb3ZlQ2hpbGQoY2hpbGROb2Rlc1tpbmRleF0pO1xuXG5cdFx0aWYgKGNoaWxkTm9kZXMubGVuZ3RoKSB7XG5cdFx0XHRzdHlsZS5pbnNlcnRCZWZvcmUoY3NzTm9kZSwgY2hpbGROb2Rlc1tpbmRleF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdHlsZS5hcHBlbmRDaGlsZChjc3NOb2RlKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gYXBwbHlUb1RhZyAoc3R5bGUsIG9iaikge1xuXHR2YXIgY3NzID0gb2JqLmNzcztcblx0dmFyIG1lZGlhID0gb2JqLm1lZGlhO1xuXG5cdGlmKG1lZGlhKSB7XG5cdFx0c3R5bGUuc2V0QXR0cmlidXRlKFwibWVkaWFcIiwgbWVkaWEpXG5cdH1cblxuXHRpZihzdHlsZS5zdHlsZVNoZWV0KSB7XG5cdFx0c3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuXHR9IGVsc2Uge1xuXHRcdHdoaWxlKHN0eWxlLmZpcnN0Q2hpbGQpIHtcblx0XHRcdHN0eWxlLnJlbW92ZUNoaWxkKHN0eWxlLmZpcnN0Q2hpbGQpO1xuXHRcdH1cblxuXHRcdHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxpbmsgKGxpbmssIG9wdGlvbnMsIG9iaikge1xuXHR2YXIgY3NzID0gb2JqLmNzcztcblx0dmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG5cblx0Lypcblx0XHRJZiBjb252ZXJ0VG9BYnNvbHV0ZVVybHMgaXNuJ3QgZGVmaW5lZCwgYnV0IHNvdXJjZW1hcHMgYXJlIGVuYWJsZWRcblx0XHRhbmQgdGhlcmUgaXMgbm8gcHVibGljUGF0aCBkZWZpbmVkIHRoZW4gbGV0cyB0dXJuIGNvbnZlcnRUb0Fic29sdXRlVXJsc1xuXHRcdG9uIGJ5IGRlZmF1bHQuICBPdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgY29udmVydFRvQWJzb2x1dGVVcmxzIG9wdGlvblxuXHRcdGRpcmVjdGx5XG5cdCovXG5cdHZhciBhdXRvRml4VXJscyA9IG9wdGlvbnMuY29udmVydFRvQWJzb2x1dGVVcmxzID09PSB1bmRlZmluZWQgJiYgc291cmNlTWFwO1xuXG5cdGlmIChvcHRpb25zLmNvbnZlcnRUb0Fic29sdXRlVXJscyB8fCBhdXRvRml4VXJscykge1xuXHRcdGNzcyA9IGZpeFVybHMoY3NzKTtcblx0fVxuXG5cdGlmIChzb3VyY2VNYXApIHtcblx0XHQvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNjYwMzg3NVxuXHRcdGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIgKyBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpICsgXCIgKi9cIjtcblx0fVxuXG5cdHZhciBibG9iID0gbmV3IEJsb2IoW2Nzc10sIHsgdHlwZTogXCJ0ZXh0L2Nzc1wiIH0pO1xuXG5cdHZhciBvbGRTcmMgPSBsaW5rLmhyZWY7XG5cblx0bGluay5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblxuXHRpZihvbGRTcmMpIFVSTC5yZXZva2VPYmplY3RVUkwob2xkU3JjKTtcbn1cbiIsIlxuLyoqXG4gKiBXaGVuIHNvdXJjZSBtYXBzIGFyZSBlbmFibGVkLCBgc3R5bGUtbG9hZGVyYCB1c2VzIGEgbGluayBlbGVtZW50IHdpdGggYSBkYXRhLXVyaSB0b1xuICogZW1iZWQgdGhlIGNzcyBvbiB0aGUgcGFnZS4gVGhpcyBicmVha3MgYWxsIHJlbGF0aXZlIHVybHMgYmVjYXVzZSBub3cgdGhleSBhcmUgcmVsYXRpdmUgdG8gYVxuICogYnVuZGxlIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQgcGFnZS5cbiAqXG4gKiBPbmUgc29sdXRpb24gaXMgdG8gb25seSB1c2UgZnVsbCB1cmxzLCBidXQgdGhhdCBtYXkgYmUgaW1wb3NzaWJsZS5cbiAqXG4gKiBJbnN0ZWFkLCB0aGlzIGZ1bmN0aW9uIFwiZml4ZXNcIiB0aGUgcmVsYXRpdmUgdXJscyB0byBiZSBhYnNvbHV0ZSBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgcGFnZSBsb2NhdGlvbi5cbiAqXG4gKiBBIHJ1ZGltZW50YXJ5IHRlc3Qgc3VpdGUgaXMgbG9jYXRlZCBhdCBgdGVzdC9maXhVcmxzLmpzYCBhbmQgY2FuIGJlIHJ1biB2aWEgdGhlIGBucG0gdGVzdGAgY29tbWFuZC5cbiAqXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzKSB7XG4gIC8vIGdldCBjdXJyZW50IGxvY2F0aW9uXG4gIHZhciBsb2NhdGlvbiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LmxvY2F0aW9uO1xuXG4gIGlmICghbG9jYXRpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJmaXhVcmxzIHJlcXVpcmVzIHdpbmRvdy5sb2NhdGlvblwiKTtcbiAgfVxuXG5cdC8vIGJsYW5rIG9yIG51bGw/XG5cdGlmICghY3NzIHx8IHR5cGVvZiBjc3MgIT09IFwic3RyaW5nXCIpIHtcblx0ICByZXR1cm4gY3NzO1xuICB9XG5cbiAgdmFyIGJhc2VVcmwgPSBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIGxvY2F0aW9uLmhvc3Q7XG4gIHZhciBjdXJyZW50RGlyID0gYmFzZVVybCArIGxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1xcL1teXFwvXSokLywgXCIvXCIpO1xuXG5cdC8vIGNvbnZlcnQgZWFjaCB1cmwoLi4uKVxuXHQvKlxuXHRUaGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBqdXN0IGEgd2F5IHRvIHJlY3Vyc2l2ZWx5IG1hdGNoIGJyYWNrZXRzIHdpdGhpblxuXHRhIHN0cmluZy5cblxuXHQgL3VybFxccypcXCggID0gTWF0Y2ggb24gdGhlIHdvcmQgXCJ1cmxcIiB3aXRoIGFueSB3aGl0ZXNwYWNlIGFmdGVyIGl0IGFuZCB0aGVuIGEgcGFyZW5zXG5cdCAgICggID0gU3RhcnQgYSBjYXB0dXJpbmcgZ3JvdXBcblx0ICAgICAoPzogID0gU3RhcnQgYSBub24tY2FwdHVyaW5nIGdyb3VwXG5cdCAgICAgICAgIFteKShdICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICB8ICA9IE9SXG5cdCAgICAgICAgIFxcKCAgPSBNYXRjaCBhIHN0YXJ0IHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAoPzogID0gU3RhcnQgYW5vdGhlciBub24tY2FwdHVyaW5nIGdyb3Vwc1xuXHQgICAgICAgICAgICAgICAgIFteKShdKyAgPSBNYXRjaCBhbnl0aGluZyB0aGF0IGlzbid0IGEgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICAgICB8ICA9IE9SXG5cdCAgICAgICAgICAgICAgICAgXFwoICA9IE1hdGNoIGEgc3RhcnQgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICAgICAgICAgW14pKF0qICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgIFxcKSAgPSBNYXRjaCBhIGVuZCBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgKSAgPSBFbmQgR3JvdXBcbiAgICAgICAgICAgICAgKlxcKSA9IE1hdGNoIGFueXRoaW5nIGFuZCB0aGVuIGEgY2xvc2UgcGFyZW5zXG4gICAgICAgICAgKSAgPSBDbG9zZSBub24tY2FwdHVyaW5nIGdyb3VwXG4gICAgICAgICAgKiAgPSBNYXRjaCBhbnl0aGluZ1xuICAgICAgICkgID0gQ2xvc2UgY2FwdHVyaW5nIGdyb3VwXG5cdCBcXCkgID0gTWF0Y2ggYSBjbG9zZSBwYXJlbnNcblxuXHQgL2dpICA9IEdldCBhbGwgbWF0Y2hlcywgbm90IHRoZSBmaXJzdC4gIEJlIGNhc2UgaW5zZW5zaXRpdmUuXG5cdCAqL1xuXHR2YXIgZml4ZWRDc3MgPSBjc3MucmVwbGFjZSgvdXJsXFxzKlxcKCgoPzpbXikoXXxcXCgoPzpbXikoXSt8XFwoW14pKF0qXFwpKSpcXCkpKilcXCkvZ2ksIGZ1bmN0aW9uKGZ1bGxNYXRjaCwgb3JpZ1VybCkge1xuXHRcdC8vIHN0cmlwIHF1b3RlcyAoaWYgdGhleSBleGlzdClcblx0XHR2YXIgdW5xdW90ZWRPcmlnVXJsID0gb3JpZ1VybFxuXHRcdFx0LnRyaW0oKVxuXHRcdFx0LnJlcGxhY2UoL15cIiguKilcIiQvLCBmdW5jdGlvbihvLCAkMSl7IHJldHVybiAkMTsgfSlcblx0XHRcdC5yZXBsYWNlKC9eJyguKiknJC8sIGZ1bmN0aW9uKG8sICQxKXsgcmV0dXJuICQxOyB9KTtcblxuXHRcdC8vIGFscmVhZHkgYSBmdWxsIHVybD8gbm8gY2hhbmdlXG5cdFx0aWYgKC9eKCN8ZGF0YTp8aHR0cDpcXC9cXC98aHR0cHM6XFwvXFwvfGZpbGU6XFwvXFwvXFwvfFxccyokKS9pLnRlc3QodW5xdW90ZWRPcmlnVXJsKSkge1xuXHRcdCAgcmV0dXJuIGZ1bGxNYXRjaDtcblx0XHR9XG5cblx0XHQvLyBjb252ZXJ0IHRoZSB1cmwgdG8gYSBmdWxsIHVybFxuXHRcdHZhciBuZXdVcmw7XG5cblx0XHRpZiAodW5xdW90ZWRPcmlnVXJsLmluZGV4T2YoXCIvL1wiKSA9PT0gMCkge1xuXHRcdCAgXHQvL1RPRE86IHNob3VsZCB3ZSBhZGQgcHJvdG9jb2w/XG5cdFx0XHRuZXdVcmwgPSB1bnF1b3RlZE9yaWdVcmw7XG5cdFx0fSBlbHNlIGlmICh1bnF1b3RlZE9yaWdVcmwuaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdC8vIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBiYXNlIHVybFxuXHRcdFx0bmV3VXJsID0gYmFzZVVybCArIHVucXVvdGVkT3JpZ1VybDsgLy8gYWxyZWFkeSBzdGFydHMgd2l0aCAnLydcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gcGF0aCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gY3VycmVudCBkaXJlY3Rvcnlcblx0XHRcdG5ld1VybCA9IGN1cnJlbnREaXIgKyB1bnF1b3RlZE9yaWdVcmwucmVwbGFjZSgvXlxcLlxcLy8sIFwiXCIpOyAvLyBTdHJpcCBsZWFkaW5nICcuLydcblx0XHR9XG5cblx0XHQvLyBzZW5kIGJhY2sgdGhlIGZpeGVkIHVybCguLi4pXG5cdFx0cmV0dXJuIFwidXJsKFwiICsgSlNPTi5zdHJpbmdpZnkobmV3VXJsKSArIFwiKVwiO1xuXHR9KTtcblxuXHQvLyBzZW5kIGJhY2sgdGhlIGZpeGVkIGNzc1xuXHRyZXR1cm4gZml4ZWRDc3M7XG59O1xuIiwiLy8gICAgIFVuZGVyc2NvcmUuanMgMS45LjFcbi8vICAgICBodHRwOi8vdW5kZXJzY29yZWpzLm9yZ1xuLy8gICAgIChjKSAyMDA5LTIwMTggSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbi8vICAgICBVbmRlcnNjb3JlIG1heSBiZSBmcmVlbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuXG4oZnVuY3Rpb24oKSB7XG5cbiAgLy8gQmFzZWxpbmUgc2V0dXBcbiAgLy8gLS0tLS0tLS0tLS0tLS1cblxuICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgLy8gb24gdGhlIHNlcnZlciwgb3IgYHRoaXNgIGluIHNvbWUgdmlydHVhbCBtYWNoaW5lcy4gV2UgdXNlIGBzZWxmYFxuICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICB2YXIgcm9vdCA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmIHx8XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbC5nbG9iYWwgPT09IGdsb2JhbCAmJiBnbG9iYWwgfHxcbiAgICAgICAgICAgIHRoaXMgfHxcbiAgICAgICAgICAgIHt9O1xuXG4gIC8vIFNhdmUgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBgX2AgdmFyaWFibGUuXG4gIHZhciBwcmV2aW91c1VuZGVyc2NvcmUgPSByb290Ll87XG5cbiAgLy8gU2F2ZSBieXRlcyBpbiB0aGUgbWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBlZCkgdmVyc2lvbjpcbiAgdmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsIE9ialByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIFN5bWJvbFByb3RvID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wucHJvdG90eXBlIDogbnVsbDtcblxuICAvLyBDcmVhdGUgcXVpY2sgcmVmZXJlbmNlIHZhcmlhYmxlcyBmb3Igc3BlZWQgYWNjZXNzIHRvIGNvcmUgcHJvdG90eXBlcy5cbiAgdmFyIHB1c2ggPSBBcnJheVByb3RvLnB1c2gsXG4gICAgICBzbGljZSA9IEFycmF5UHJvdG8uc2xpY2UsXG4gICAgICB0b1N0cmluZyA9IE9ialByb3RvLnRvU3RyaW5nLFxuICAgICAgaGFzT3duUHJvcGVydHkgPSBPYmpQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuICAvLyBBbGwgKipFQ01BU2NyaXB0IDUqKiBuYXRpdmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2UgaG9wZSB0byB1c2VcbiAgLy8gYXJlIGRlY2xhcmVkIGhlcmUuXG4gIHZhciBuYXRpdmVJc0FycmF5ID0gQXJyYXkuaXNBcnJheSxcbiAgICAgIG5hdGl2ZUtleXMgPSBPYmplY3Qua2V5cyxcbiAgICAgIG5hdGl2ZUNyZWF0ZSA9IE9iamVjdC5jcmVhdGU7XG5cbiAgLy8gTmFrZWQgZnVuY3Rpb24gcmVmZXJlbmNlIGZvciBzdXJyb2dhdGUtcHJvdG90eXBlLXN3YXBwaW5nLlxuICB2YXIgQ3RvciA9IGZ1bmN0aW9uKCl7fTtcblxuICAvLyBDcmVhdGUgYSBzYWZlIHJlZmVyZW5jZSB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QgZm9yIHVzZSBiZWxvdy5cbiAgdmFyIF8gPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgXykgcmV0dXJuIG9iajtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgXykpIHJldHVybiBuZXcgXyhvYmopO1xuICAgIHRoaXMuX3dyYXBwZWQgPSBvYmo7XG4gIH07XG5cbiAgLy8gRXhwb3J0IHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3IgKipOb2RlLmpzKiosIHdpdGhcbiAgLy8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZm9yIHRoZWlyIG9sZCBtb2R1bGUgQVBJLiBJZiB3ZSdyZSBpblxuICAvLyB0aGUgYnJvd3NlciwgYWRkIGBfYCBhcyBhIGdsb2JhbCBvYmplY3QuXG4gIC8vIChgbm9kZVR5cGVgIGlzIGNoZWNrZWQgdG8gZW5zdXJlIHRoYXQgYG1vZHVsZWBcbiAgLy8gYW5kIGBleHBvcnRzYCBhcmUgbm90IEhUTUwgZWxlbWVudHMuKVxuICBpZiAodHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVmaW5lZCcgJiYgIWV4cG9ydHMubm9kZVR5cGUpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZpbmVkJyAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBfO1xuICAgIH1cbiAgICBleHBvcnRzLl8gPSBfO1xuICB9IGVsc2Uge1xuICAgIHJvb3QuXyA9IF87XG4gIH1cblxuICAvLyBDdXJyZW50IHZlcnNpb24uXG4gIF8uVkVSU0lPTiA9ICcxLjkuMSc7XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGVmZmljaWVudCAoZm9yIGN1cnJlbnQgZW5naW5lcykgdmVyc2lvblxuICAvLyBvZiB0aGUgcGFzc2VkLWluIGNhbGxiYWNrLCB0byBiZSByZXBlYXRlZGx5IGFwcGxpZWQgaW4gb3RoZXIgVW5kZXJzY29yZVxuICAvLyBmdW5jdGlvbnMuXG4gIHZhciBvcHRpbWl6ZUNiID0gZnVuY3Rpb24oZnVuYywgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgICBpZiAoY29udGV4dCA9PT0gdm9pZCAwKSByZXR1cm4gZnVuYztcbiAgICBzd2l0Y2ggKGFyZ0NvdW50ID09IG51bGwgPyAzIDogYXJnQ291bnQpIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUpO1xuICAgICAgfTtcbiAgICAgIC8vIFRoZSAyLWFyZ3VtZW50IGNhc2UgaXMgb21pdHRlZCBiZWNhdXNlIHdl4oCZcmUgbm90IHVzaW5nIGl0LlxuICAgICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH07XG4gICAgICBjYXNlIDQ6IHJldHVybiBmdW5jdGlvbihhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH07XG5cbiAgdmFyIGJ1aWx0aW5JdGVyYXRlZTtcblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBjYWxsYmFja3MgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBlYWNoXG4gIC8vIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uLCByZXR1cm5pbmcgdGhlIGRlc2lyZWQgcmVzdWx0IOKAlCBlaXRoZXIgYGlkZW50aXR5YCxcbiAgLy8gYW4gYXJiaXRyYXJ5IGNhbGxiYWNrLCBhIHByb3BlcnR5IG1hdGNoZXIsIG9yIGEgcHJvcGVydHkgYWNjZXNzb3IuXG4gIHZhciBjYiA9IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICAgIGlmIChfLml0ZXJhdGVlICE9PSBidWlsdGluSXRlcmF0ZWUpIHJldHVybiBfLml0ZXJhdGVlKHZhbHVlLCBjb250ZXh0KTtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIF8uaWRlbnRpdHk7XG4gICAgaWYgKF8uaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybiBvcHRpbWl6ZUNiKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCk7XG4gICAgaWYgKF8uaXNPYmplY3QodmFsdWUpICYmICFfLmlzQXJyYXkodmFsdWUpKSByZXR1cm4gXy5tYXRjaGVyKHZhbHVlKTtcbiAgICByZXR1cm4gXy5wcm9wZXJ0eSh2YWx1ZSk7XG4gIH07XG5cbiAgLy8gRXh0ZXJuYWwgd3JhcHBlciBmb3Igb3VyIGNhbGxiYWNrIGdlbmVyYXRvci4gVXNlcnMgbWF5IGN1c3RvbWl6ZVxuICAvLyBgXy5pdGVyYXRlZWAgaWYgdGhleSB3YW50IGFkZGl0aW9uYWwgcHJlZGljYXRlL2l0ZXJhdGVlIHNob3J0aGFuZCBzdHlsZXMuXG4gIC8vIFRoaXMgYWJzdHJhY3Rpb24gaGlkZXMgdGhlIGludGVybmFsLW9ubHkgYXJnQ291bnQgYXJndW1lbnQuXG4gIF8uaXRlcmF0ZWUgPSBidWlsdGluSXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBjYih2YWx1ZSwgY29udGV4dCwgSW5maW5pdHkpO1xuICB9O1xuXG4gIC8vIFNvbWUgZnVuY3Rpb25zIHRha2UgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLCBvciBhIGZldyBleHBlY3RlZFxuICAvLyBhcmd1bWVudHMgYXQgdGhlIGJlZ2lubmluZyBhbmQgdGhlbiBhIHZhcmlhYmxlIG51bWJlciBvZiB2YWx1ZXMgdG8gb3BlcmF0ZVxuICAvLyBvbi4gVGhpcyBoZWxwZXIgYWNjdW11bGF0ZXMgYWxsIHJlbWFpbmluZyBhcmd1bWVudHMgcGFzdCB0aGUgZnVuY3Rpb27igJlzXG4gIC8vIGFyZ3VtZW50IGxlbmd0aCAob3IgYW4gZXhwbGljaXQgYHN0YXJ0SW5kZXhgKSwgaW50byBhbiBhcnJheSB0aGF0IGJlY29tZXNcbiAgLy8gdGhlIGxhc3QgYXJndW1lbnQuIFNpbWlsYXIgdG8gRVM24oCZcyBcInJlc3QgcGFyYW1ldGVyXCIuXG4gIHZhciByZXN0QXJndW1lbnRzID0gZnVuY3Rpb24oZnVuYywgc3RhcnRJbmRleCkge1xuICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoYXJndW1lbnRzLmxlbmd0aCAtIHN0YXJ0SW5kZXgsIDApLFxuICAgICAgICAgIHJlc3QgPSBBcnJheShsZW5ndGgpLFxuICAgICAgICAgIGluZGV4ID0gMDtcbiAgICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIGFyZ3VtZW50c1swXSwgcmVzdCk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXSwgcmVzdCk7XG4gICAgICB9XG4gICAgICB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgfVxuICAgICAgYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIG5ldyBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIGFub3RoZXIuXG4gIHZhciBiYXNlQ3JlYXRlID0gZnVuY3Rpb24ocHJvdG90eXBlKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KHByb3RvdHlwZSkpIHJldHVybiB7fTtcbiAgICBpZiAobmF0aXZlQ3JlYXRlKSByZXR1cm4gbmF0aXZlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgQ3Rvci5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBDdG9yO1xuICAgIEN0b3IucHJvdG90eXBlID0gbnVsbDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciBzaGFsbG93UHJvcGVydHkgPSBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpba2V5XTtcbiAgICB9O1xuICB9O1xuXG4gIHZhciBoYXMgPSBmdW5jdGlvbihvYmosIHBhdGgpIHtcbiAgICByZXR1cm4gb2JqICE9IG51bGwgJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHBhdGgpO1xuICB9XG5cbiAgdmFyIGRlZXBHZXQgPSBmdW5jdGlvbihvYmosIHBhdGgpIHtcbiAgICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgICAgb2JqID0gb2JqW3BhdGhbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gbGVuZ3RoID8gb2JqIDogdm9pZCAwO1xuICB9O1xuXG4gIC8vIEhlbHBlciBmb3IgY29sbGVjdGlvbiBtZXRob2RzIHRvIGRldGVybWluZSB3aGV0aGVyIGEgY29sbGVjdGlvblxuICAvLyBzaG91bGQgYmUgaXRlcmF0ZWQgYXMgYW4gYXJyYXkgb3IgYXMgYW4gb2JqZWN0LlxuICAvLyBSZWxhdGVkOiBodHRwOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy10b2xlbmd0aFxuICAvLyBBdm9pZHMgYSB2ZXJ5IG5hc3R5IGlPUyA4IEpJVCBidWcgb24gQVJNLTY0LiAjMjA5NFxuICB2YXIgTUFYX0FSUkFZX0lOREVYID0gTWF0aC5wb3coMiwgNTMpIC0gMTtcbiAgdmFyIGdldExlbmd0aCA9IHNoYWxsb3dQcm9wZXJ0eSgnbGVuZ3RoJyk7XG4gIHZhciBpc0FycmF5TGlrZSA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24pIHtcbiAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKGNvbGxlY3Rpb24pO1xuICAgIHJldHVybiB0eXBlb2YgbGVuZ3RoID09ICdudW1iZXInICYmIGxlbmd0aCA+PSAwICYmIGxlbmd0aCA8PSBNQVhfQVJSQVlfSU5ERVg7XG4gIH07XG5cbiAgLy8gQ29sbGVjdGlvbiBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBUaGUgY29ybmVyc3RvbmUsIGFuIGBlYWNoYCBpbXBsZW1lbnRhdGlvbiwgYWthIGBmb3JFYWNoYC5cbiAgLy8gSGFuZGxlcyByYXcgb2JqZWN0cyBpbiBhZGRpdGlvbiB0byBhcnJheS1saWtlcy4gVHJlYXRzIGFsbFxuICAvLyBzcGFyc2UgYXJyYXktbGlrZXMgYXMgaWYgdGhleSB3ZXJlIGRlbnNlLlxuICBfLmVhY2ggPSBfLmZvckVhY2ggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIgaSwgbGVuZ3RoO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSB7XG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaXRlcmF0ZWUob2JqW2ldLCBpLCBvYmopO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVyYXRlZShvYmpba2V5c1tpXV0sIGtleXNbaV0sIG9iaik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQuXG4gIF8ubWFwID0gXy5jb2xsZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAgICByZXN1bHRzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgcmVzdWx0c1tpbmRleF0gPSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIHJlZHVjaW5nIGZ1bmN0aW9uIGl0ZXJhdGluZyBsZWZ0IG9yIHJpZ2h0LlxuICB2YXIgY3JlYXRlUmVkdWNlID0gZnVuY3Rpb24oZGlyKSB7XG4gICAgLy8gV3JhcCBjb2RlIHRoYXQgcmVhc3NpZ25zIGFyZ3VtZW50IHZhcmlhYmxlcyBpbiBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRoYW5cbiAgICAvLyB0aGUgb25lIHRoYXQgYWNjZXNzZXMgYGFyZ3VtZW50cy5sZW5ndGhgIHRvIGF2b2lkIGEgcGVyZiBoaXQuICgjMTk5MSlcbiAgICB2YXIgcmVkdWNlciA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGluaXRpYWwpIHtcbiAgICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICAgICAgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4gICAgICBpZiAoIWluaXRpYWwpIHtcbiAgICAgICAgbWVtbyA9IG9ialtrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGRpcjtcbiAgICAgIH1cbiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgICAgbWVtbyA9IGl0ZXJhdGVlKG1lbW8sIG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgbWVtbywgY29udGV4dCkge1xuICAgICAgdmFyIGluaXRpYWwgPSBhcmd1bWVudHMubGVuZ3RoID49IDM7XG4gICAgICByZXR1cm4gcmVkdWNlcihvYmosIG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDQpLCBtZW1vLCBpbml0aWFsKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vICoqUmVkdWNlKiogYnVpbGRzIHVwIGEgc2luZ2xlIHJlc3VsdCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFrYSBgaW5qZWN0YCxcbiAgLy8gb3IgYGZvbGRsYC5cbiAgXy5yZWR1Y2UgPSBfLmZvbGRsID0gXy5pbmplY3QgPSBjcmVhdGVSZWR1Y2UoMSk7XG5cbiAgLy8gVGhlIHJpZ2h0LWFzc29jaWF0aXZlIHZlcnNpb24gb2YgcmVkdWNlLCBhbHNvIGtub3duIGFzIGBmb2xkcmAuXG4gIF8ucmVkdWNlUmlnaHQgPSBfLmZvbGRyID0gY3JlYXRlUmVkdWNlKC0xKTtcblxuICAvLyBSZXR1cm4gdGhlIGZpcnN0IHZhbHVlIHdoaWNoIHBhc3NlcyBhIHRydXRoIHRlc3QuIEFsaWFzZWQgYXMgYGRldGVjdGAuXG4gIF8uZmluZCA9IF8uZGV0ZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIga2V5RmluZGVyID0gaXNBcnJheUxpa2Uob2JqKSA/IF8uZmluZEluZGV4IDogXy5maW5kS2V5O1xuICAgIHZhciBrZXkgPSBrZXlGaW5kZXIob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIGlmIChrZXkgIT09IHZvaWQgMCAmJiBrZXkgIT09IC0xKSByZXR1cm4gb2JqW2tleV07XG4gIH07XG5cbiAgLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBwYXNzIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNlZCBhcyBgc2VsZWN0YC5cbiAgXy5maWx0ZXIgPSBfLnNlbGVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGxpc3QpKSByZXN1bHRzLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBhIHRydXRoIHRlc3QgZmFpbHMuXG4gIF8ucmVqZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIob2JqLCBfLm5lZ2F0ZShjYihwcmVkaWNhdGUpKSwgY29udGV4dCk7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgYWxsIG9mIHRoZSBlbGVtZW50cyBtYXRjaCBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYGFsbGAuXG4gIF8uZXZlcnkgPSBfLmFsbCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKCFwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIERldGVybWluZSBpZiBhdCBsZWFzdCBvbmUgZWxlbWVudCBpbiB0aGUgb2JqZWN0IG1hdGNoZXMgYSB0cnV0aCB0ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBhbnlgLlxuICBfLnNvbWUgPSBfLmFueSA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBhcnJheSBvciBvYmplY3QgY29udGFpbnMgYSBnaXZlbiBpdGVtICh1c2luZyBgPT09YCkuXG4gIC8vIEFsaWFzZWQgYXMgYGluY2x1ZGVzYCBhbmQgYGluY2x1ZGVgLlxuICBfLmNvbnRhaW5zID0gXy5pbmNsdWRlcyA9IF8uaW5jbHVkZSA9IGZ1bmN0aW9uKG9iaiwgaXRlbSwgZnJvbUluZGV4LCBndWFyZCkge1xuICAgIGlmICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gXy52YWx1ZXMob2JqKTtcbiAgICBpZiAodHlwZW9mIGZyb21JbmRleCAhPSAnbnVtYmVyJyB8fCBndWFyZCkgZnJvbUluZGV4ID0gMDtcbiAgICByZXR1cm4gXy5pbmRleE9mKG9iaiwgaXRlbSwgZnJvbUluZGV4KSA+PSAwO1xuICB9O1xuXG4gIC8vIEludm9rZSBhIG1ldGhvZCAod2l0aCBhcmd1bWVudHMpIG9uIGV2ZXJ5IGl0ZW0gaW4gYSBjb2xsZWN0aW9uLlxuICBfLmludm9rZSA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24ob2JqLCBwYXRoLCBhcmdzKSB7XG4gICAgdmFyIGNvbnRleHRQYXRoLCBmdW5jO1xuICAgIGlmIChfLmlzRnVuY3Rpb24ocGF0aCkpIHtcbiAgICAgIGZ1bmMgPSBwYXRoO1xuICAgIH0gZWxzZSBpZiAoXy5pc0FycmF5KHBhdGgpKSB7XG4gICAgICBjb250ZXh0UGF0aCA9IHBhdGguc2xpY2UoMCwgLTEpO1xuICAgICAgcGF0aCA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcbiAgICB9XG4gICAgcmV0dXJuIF8ubWFwKG9iaiwgZnVuY3Rpb24oY29udGV4dCkge1xuICAgICAgdmFyIG1ldGhvZCA9IGZ1bmM7XG4gICAgICBpZiAoIW1ldGhvZCkge1xuICAgICAgICBpZiAoY29udGV4dFBhdGggJiYgY29udGV4dFBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgY29udGV4dCA9IGRlZXBHZXQoY29udGV4dCwgY29udGV4dFBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZXh0ID09IG51bGwpIHJldHVybiB2b2lkIDA7XG4gICAgICAgIG1ldGhvZCA9IGNvbnRleHRbcGF0aF07XG4gICAgICB9XG4gICAgICByZXR1cm4gbWV0aG9kID09IG51bGwgPyBtZXRob2QgOiBtZXRob2QuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYG1hcGA6IGZldGNoaW5nIGEgcHJvcGVydHkuXG4gIF8ucGx1Y2sgPSBmdW5jdGlvbihvYmosIGtleSkge1xuICAgIHJldHVybiBfLm1hcChvYmosIF8ucHJvcGVydHkoa2V5KSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgZmlsdGVyYDogc2VsZWN0aW5nIG9ubHkgb2JqZWN0c1xuICAvLyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLndoZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykge1xuICAgIHJldHVybiBfLmZpbHRlcihvYmosIF8ubWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbmRgOiBnZXR0aW5nIHRoZSBmaXJzdCBvYmplY3RcbiAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5maW5kV2hlcmUgPSBmdW5jdGlvbihvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIF8uZmluZChvYmosIF8ubWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWF4aW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5tYXggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IC1JbmZpbml0eSwgbGFzdENvbXB1dGVkID0gLUluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwgfHwgdHlwZW9mIGl0ZXJhdGVlID09ICdudW1iZXInICYmIHR5cGVvZiBvYmpbMF0gIT0gJ29iamVjdCcgJiYgb2JqICE9IG51bGwpIHtcbiAgICAgIG9iaiA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgPiByZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHYsIGluZGV4LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodiwgaW5kZXgsIGxpc3QpO1xuICAgICAgICBpZiAoY29tcHV0ZWQgPiBsYXN0Q29tcHV0ZWQgfHwgY29tcHV0ZWQgPT09IC1JbmZpbml0eSAmJiByZXN1bHQgPT09IC1JbmZpbml0eSkge1xuICAgICAgICAgIHJlc3VsdCA9IHY7XG4gICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWluaW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5taW4gPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IEluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSBJbmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICAgIGlmIChpdGVyYXRlZSA9PSBudWxsIHx8IHR5cGVvZiBpdGVyYXRlZSA9PSAnbnVtYmVyJyAmJiB0eXBlb2Ygb2JqWzBdICE9ICdvYmplY3QnICYmIG9iaiAhPSBudWxsKSB7XG4gICAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlIDwgcmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2LCBpbmRleCwgbGlzdCkge1xuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHYsIGluZGV4LCBsaXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVkIDwgbGFzdENvbXB1dGVkIHx8IGNvbXB1dGVkID09PSBJbmZpbml0eSAmJiByZXN1bHQgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdjtcbiAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gU2h1ZmZsZSBhIGNvbGxlY3Rpb24uXG4gIF8uc2h1ZmZsZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBfLnNhbXBsZShvYmosIEluZmluaXR5KTtcbiAgfTtcblxuICAvLyBTYW1wbGUgKipuKiogcmFuZG9tIHZhbHVlcyBmcm9tIGEgY29sbGVjdGlvbiB1c2luZyB0aGUgbW9kZXJuIHZlcnNpb24gb2YgdGhlXG4gIC8vIFtGaXNoZXItWWF0ZXMgc2h1ZmZsZV0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXLigJNZYXRlc19zaHVmZmxlKS5cbiAgLy8gSWYgKipuKiogaXMgbm90IHNwZWNpZmllZCwgcmV0dXJucyBhIHNpbmdsZSByYW5kb20gZWxlbWVudC5cbiAgLy8gVGhlIGludGVybmFsIGBndWFyZGAgYXJndW1lbnQgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgbWFwYC5cbiAgXy5zYW1wbGUgPSBmdW5jdGlvbihvYmosIG4sIGd1YXJkKSB7XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkge1xuICAgICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSBfLnZhbHVlcyhvYmopO1xuICAgICAgcmV0dXJuIG9ialtfLnJhbmRvbShvYmoubGVuZ3RoIC0gMSldO1xuICAgIH1cbiAgICB2YXIgc2FtcGxlID0gaXNBcnJheUxpa2Uob2JqKSA/IF8uY2xvbmUob2JqKSA6IF8udmFsdWVzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChzYW1wbGUpO1xuICAgIG4gPSBNYXRoLm1heChNYXRoLm1pbihuLCBsZW5ndGgpLCAwKTtcbiAgICB2YXIgbGFzdCA9IGxlbmd0aCAtIDE7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG47IGluZGV4KyspIHtcbiAgICAgIHZhciByYW5kID0gXy5yYW5kb20oaW5kZXgsIGxhc3QpO1xuICAgICAgdmFyIHRlbXAgPSBzYW1wbGVbaW5kZXhdO1xuICAgICAgc2FtcGxlW2luZGV4XSA9IHNhbXBsZVtyYW5kXTtcbiAgICAgIHNhbXBsZVtyYW5kXSA9IHRlbXA7XG4gICAgfVxuICAgIHJldHVybiBzYW1wbGUuc2xpY2UoMCwgbik7XG4gIH07XG5cbiAgLy8gU29ydCB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uIHByb2R1Y2VkIGJ5IGFuIGl0ZXJhdGVlLlxuICBfLnNvcnRCeSA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHJldHVybiBfLnBsdWNrKF8ubWFwKG9iaiwgZnVuY3Rpb24odmFsdWUsIGtleSwgbGlzdCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBpbmRleDogaW5kZXgrKyxcbiAgICAgICAgY3JpdGVyaWE6IGl0ZXJhdGVlKHZhbHVlLCBrZXksIGxpc3QpXG4gICAgICB9O1xuICAgIH0pLnNvcnQoZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYTtcbiAgICAgIHZhciBiID0gcmlnaHQuY3JpdGVyaWE7XG4gICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICBpZiAoYSA+IGIgfHwgYSA9PT0gdm9pZCAwKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgPCBiIHx8IGIgPT09IHZvaWQgMCkgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxlZnQuaW5kZXggLSByaWdodC5pbmRleDtcbiAgICB9KSwgJ3ZhbHVlJyk7XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBmb3IgYWdncmVnYXRlIFwiZ3JvdXAgYnlcIiBvcGVyYXRpb25zLlxuICB2YXIgZ3JvdXAgPSBmdW5jdGlvbihiZWhhdmlvciwgcGFydGl0aW9uKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICAgIHZhciByZXN1bHQgPSBwYXJ0aXRpb24gPyBbW10sIFtdXSA6IHt9O1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGtleSA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgb2JqKTtcbiAgICAgICAgYmVoYXZpb3IocmVzdWx0LCB2YWx1ZSwga2V5KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEdyb3VwcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLiBQYXNzIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGVcbiAgLy8gdG8gZ3JvdXAgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjcml0ZXJpb24uXG4gIF8uZ3JvdXBCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChoYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XS5wdXNoKHZhbHVlKTsgZWxzZSByZXN1bHRba2V5XSA9IFt2YWx1ZV07XG4gIH0pO1xuXG4gIC8vIEluZGV4ZXMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiwgc2ltaWxhciB0byBgZ3JvdXBCeWAsIGJ1dCBmb3JcbiAgLy8gd2hlbiB5b3Uga25vdyB0aGF0IHlvdXIgaW5kZXggdmFsdWVzIHdpbGwgYmUgdW5pcXVlLlxuICBfLmluZGV4QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICB9KTtcblxuICAvLyBDb3VudHMgaW5zdGFuY2VzIG9mIGFuIG9iamVjdCB0aGF0IGdyb3VwIGJ5IGEgY2VydGFpbiBjcml0ZXJpb24uIFBhc3NcbiAgLy8gZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZSB0byBjb3VudCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gIC8vIGNyaXRlcmlvbi5cbiAgXy5jb3VudEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgaWYgKGhhcyhyZXN1bHQsIGtleSkpIHJlc3VsdFtrZXldKys7IGVsc2UgcmVzdWx0W2tleV0gPSAxO1xuICB9KTtcblxuICB2YXIgcmVTdHJTeW1ib2wgPSAvW15cXHVkODAwLVxcdWRmZmZdfFtcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl18W1xcdWQ4MDAtXFx1ZGZmZl0vZztcbiAgLy8gU2FmZWx5IGNyZWF0ZSBhIHJlYWwsIGxpdmUgYXJyYXkgZnJvbSBhbnl0aGluZyBpdGVyYWJsZS5cbiAgXy50b0FycmF5ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFvYmopIHJldHVybiBbXTtcbiAgICBpZiAoXy5pc0FycmF5KG9iaikpIHJldHVybiBzbGljZS5jYWxsKG9iaik7XG4gICAgaWYgKF8uaXNTdHJpbmcob2JqKSkge1xuICAgICAgLy8gS2VlcCBzdXJyb2dhdGUgcGFpciBjaGFyYWN0ZXJzIHRvZ2V0aGVyXG4gICAgICByZXR1cm4gb2JqLm1hdGNoKHJlU3RyU3ltYm9sKTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHJldHVybiBfLm1hcChvYmosIF8uaWRlbnRpdHkpO1xuICAgIHJldHVybiBfLnZhbHVlcyhvYmopO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFuIG9iamVjdC5cbiAgXy5zaXplID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gMDtcbiAgICByZXR1cm4gaXNBcnJheUxpa2Uob2JqKSA/IG9iai5sZW5ndGggOiBfLmtleXMob2JqKS5sZW5ndGg7XG4gIH07XG5cbiAgLy8gU3BsaXQgYSBjb2xsZWN0aW9uIGludG8gdHdvIGFycmF5czogb25lIHdob3NlIGVsZW1lbnRzIGFsbCBzYXRpc2Z5IHRoZSBnaXZlblxuICAvLyBwcmVkaWNhdGUsIGFuZCBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIGRvIG5vdCBzYXRpc2Z5IHRoZSBwcmVkaWNhdGUuXG4gIF8ucGFydGl0aW9uID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwgcGFzcykge1xuICAgIHJlc3VsdFtwYXNzID8gMCA6IDFdLnB1c2godmFsdWUpO1xuICB9LCB0cnVlKTtcblxuICAvLyBBcnJheSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gR2V0IHRoZSBmaXJzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuIEFsaWFzZWQgYXMgYGhlYWRgIGFuZCBgdGFrZWAuIFRoZSAqKmd1YXJkKiogY2hlY2tcbiAgLy8gYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgXy5tYXBgLlxuICBfLmZpcnN0ID0gXy5oZWFkID0gXy50YWtlID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgaWYgKGFycmF5ID09IG51bGwgfHwgYXJyYXkubGVuZ3RoIDwgMSkgcmV0dXJuIG4gPT0gbnVsbCA/IHZvaWQgMCA6IFtdO1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVswXTtcbiAgICByZXR1cm4gXy5pbml0aWFsKGFycmF5LCBhcnJheS5sZW5ndGggLSBuKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBsYXN0IGVudHJ5IG9mIHRoZSBhcnJheS4gRXNwZWNpYWxseSB1c2VmdWwgb25cbiAgLy8gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gYWxsIHRoZSB2YWx1ZXMgaW5cbiAgLy8gdGhlIGFycmF5LCBleGNsdWRpbmcgdGhlIGxhc3QgTi5cbiAgXy5pbml0aWFsID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIDAsIE1hdGgubWF4KDAsIGFycmF5Lmxlbmd0aCAtIChuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbikpKTtcbiAgfTtcblxuICAvLyBHZXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgbGFzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuXG4gIF8ubGFzdCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsIHx8IGFycmF5Lmxlbmd0aCA8IDEpIHJldHVybiBuID09IG51bGwgPyB2b2lkIDAgOiBbXTtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIF8ucmVzdChhcnJheSwgTWF0aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gbikpO1xuICB9O1xuXG4gIC8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBhcnJheS4gQWxpYXNlZCBhcyBgdGFpbGAgYW5kIGBkcm9wYC5cbiAgLy8gRXNwZWNpYWxseSB1c2VmdWwgb24gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgYW4gKipuKiogd2lsbCByZXR1cm5cbiAgLy8gdGhlIHJlc3QgTiB2YWx1ZXMgaW4gdGhlIGFycmF5LlxuICBfLnJlc3QgPSBfLnRhaWwgPSBfLmRyb3AgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgbiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pO1xuICB9O1xuXG4gIC8vIFRyaW0gb3V0IGFsbCBmYWxzeSB2YWx1ZXMgZnJvbSBhbiBhcnJheS5cbiAgXy5jb21wYWN0ID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIoYXJyYXksIEJvb2xlYW4pO1xuICB9O1xuXG4gIC8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIGEgcmVjdXJzaXZlIGBmbGF0dGVuYCBmdW5jdGlvbi5cbiAgdmFyIGZsYXR0ZW4gPSBmdW5jdGlvbihpbnB1dCwgc2hhbGxvdywgc3RyaWN0LCBvdXRwdXQpIHtcbiAgICBvdXRwdXQgPSBvdXRwdXQgfHwgW107XG4gICAgdmFyIGlkeCA9IG91dHB1dC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChpbnB1dCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gaW5wdXRbaV07XG4gICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYmIChfLmlzQXJyYXkodmFsdWUpIHx8IF8uaXNBcmd1bWVudHModmFsdWUpKSkge1xuICAgICAgICAvLyBGbGF0dGVuIGN1cnJlbnQgbGV2ZWwgb2YgYXJyYXkgb3IgYXJndW1lbnRzIG9iamVjdC5cbiAgICAgICAgaWYgKHNoYWxsb3cpIHtcbiAgICAgICAgICB2YXIgaiA9IDAsIGxlbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoaiA8IGxlbikgb3V0cHV0W2lkeCsrXSA9IHZhbHVlW2orK107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmxhdHRlbih2YWx1ZSwgc2hhbGxvdywgc3RyaWN0LCBvdXRwdXQpO1xuICAgICAgICAgIGlkeCA9IG91dHB1dC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCkge1xuICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG5cbiAgLy8gRmxhdHRlbiBvdXQgYW4gYXJyYXksIGVpdGhlciByZWN1cnNpdmVseSAoYnkgZGVmYXVsdCksIG9yIGp1c3Qgb25lIGxldmVsLlxuICBfLmZsYXR0ZW4gPSBmdW5jdGlvbihhcnJheSwgc2hhbGxvdykge1xuICAgIHJldHVybiBmbGF0dGVuKGFycmF5LCBzaGFsbG93LCBmYWxzZSk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgdmVyc2lvbiBvZiB0aGUgYXJyYXkgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBzcGVjaWZpZWQgdmFsdWUocykuXG4gIF8ud2l0aG91dCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oYXJyYXksIG90aGVyQXJyYXlzKSB7XG4gICAgcmV0dXJuIF8uZGlmZmVyZW5jZShhcnJheSwgb3RoZXJBcnJheXMpO1xuICB9KTtcblxuICAvLyBQcm9kdWNlIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiB0aGUgYXJyYXkuIElmIHRoZSBhcnJheSBoYXMgYWxyZWFkeVxuICAvLyBiZWVuIHNvcnRlZCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiB1c2luZyBhIGZhc3RlciBhbGdvcml0aG0uXG4gIC8vIFRoZSBmYXN0ZXIgYWxnb3JpdGhtIHdpbGwgbm90IHdvcmsgd2l0aCBhbiBpdGVyYXRlZSBpZiB0aGUgaXRlcmF0ZWVcbiAgLy8gaXMgbm90IGEgb25lLXRvLW9uZSBmdW5jdGlvbiwgc28gcHJvdmlkaW5nIGFuIGl0ZXJhdGVlIHdpbGwgZGlzYWJsZVxuICAvLyB0aGUgZmFzdGVyIGFsZ29yaXRobS5cbiAgLy8gQWxpYXNlZCBhcyBgdW5pcXVlYC5cbiAgXy51bmlxID0gXy51bmlxdWUgPSBmdW5jdGlvbihhcnJheSwgaXNTb3J0ZWQsIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaWYgKCFfLmlzQm9vbGVhbihpc1NvcnRlZCkpIHtcbiAgICAgIGNvbnRleHQgPSBpdGVyYXRlZTtcbiAgICAgIGl0ZXJhdGVlID0gaXNTb3J0ZWQ7XG4gICAgICBpc1NvcnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaXRlcmF0ZWUgIT0gbnVsbCkgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBzZWVuID0gW107XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaV0sXG4gICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlLCBpLCBhcnJheSkgOiB2YWx1ZTtcbiAgICAgIGlmIChpc1NvcnRlZCAmJiAhaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKCFpIHx8IHNlZW4gIT09IGNvbXB1dGVkKSByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIHNlZW4gPSBjb21wdXRlZDtcbiAgICAgIH0gZWxzZSBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKHNlZW4sIGNvbXB1dGVkKSkge1xuICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFfLmNvbnRhaW5zKHJlc3VsdCwgdmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgdGhlIHVuaW9uOiBlYWNoIGRpc3RpbmN0IGVsZW1lbnQgZnJvbSBhbGwgb2ZcbiAgLy8gdGhlIHBhc3NlZC1pbiBhcnJheXMuXG4gIF8udW5pb24gPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGFycmF5cykge1xuICAgIHJldHVybiBfLnVuaXEoZmxhdHRlbihhcnJheXMsIHRydWUsIHRydWUpKTtcbiAgfSk7XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGl0ZW0gc2hhcmVkIGJldHdlZW4gYWxsIHRoZVxuICAvLyBwYXNzZWQtaW4gYXJyYXlzLlxuICBfLmludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGFycmF5W2ldO1xuICAgICAgaWYgKF8uY29udGFpbnMocmVzdWx0LCBpdGVtKSkgY29udGludWU7XG4gICAgICB2YXIgajtcbiAgICAgIGZvciAoaiA9IDE7IGogPCBhcmdzTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKGFyZ3VtZW50c1tqXSwgaXRlbSkpIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGogPT09IGFyZ3NMZW5ndGgpIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFRha2UgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBvbmUgYXJyYXkgYW5kIGEgbnVtYmVyIG9mIG90aGVyIGFycmF5cy5cbiAgLy8gT25seSB0aGUgZWxlbWVudHMgcHJlc2VudCBpbiBqdXN0IHRoZSBmaXJzdCBhcnJheSB3aWxsIHJlbWFpbi5cbiAgXy5kaWZmZXJlbmNlID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihhcnJheSwgcmVzdCkge1xuICAgIHJlc3QgPSBmbGF0dGVuKHJlc3QsIHRydWUsIHRydWUpO1xuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgZnVuY3Rpb24odmFsdWUpe1xuICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKHJlc3QsIHZhbHVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gQ29tcGxlbWVudCBvZiBfLnppcC4gVW56aXAgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgYW5kIGdyb3Vwc1xuICAvLyBlYWNoIGFycmF5J3MgZWxlbWVudHMgb24gc2hhcmVkIGluZGljZXMuXG4gIF8udW56aXAgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHZhciBsZW5ndGggPSBhcnJheSAmJiBfLm1heChhcnJheSwgZ2V0TGVuZ3RoKS5sZW5ndGggfHwgMDtcbiAgICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHJlc3VsdFtpbmRleF0gPSBfLnBsdWNrKGFycmF5LCBpbmRleCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gWmlwIHRvZ2V0aGVyIG11bHRpcGxlIGxpc3RzIGludG8gYSBzaW5nbGUgYXJyYXkgLS0gZWxlbWVudHMgdGhhdCBzaGFyZVxuICAvLyBhbiBpbmRleCBnbyB0b2dldGhlci5cbiAgXy56aXAgPSByZXN0QXJndW1lbnRzKF8udW56aXApO1xuXG4gIC8vIENvbnZlcnRzIGxpc3RzIGludG8gb2JqZWN0cy4gUGFzcyBlaXRoZXIgYSBzaW5nbGUgYXJyYXkgb2YgYFtrZXksIHZhbHVlXWBcbiAgLy8gcGFpcnMsIG9yIHR3byBwYXJhbGxlbCBhcnJheXMgb2YgdGhlIHNhbWUgbGVuZ3RoIC0tIG9uZSBvZiBrZXlzLCBhbmQgb25lIG9mXG4gIC8vIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy4gUGFzc2luZyBieSBwYWlycyBpcyB0aGUgcmV2ZXJzZSBvZiBfLnBhaXJzLlxuICBfLm9iamVjdCA9IGZ1bmN0aW9uKGxpc3QsIHZhbHVlcykge1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGxpc3QpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1dID0gdmFsdWVzW2ldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1bMF1dID0gbGlzdFtpXVsxXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBHZW5lcmF0b3IgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBmaW5kSW5kZXggYW5kIGZpbmRMYXN0SW5kZXggZnVuY3Rpb25zLlxuICB2YXIgY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIgPSBmdW5jdGlvbihkaXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgICAgdmFyIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkgcmV0dXJuIGluZGV4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3QgaW5kZXggb24gYW4gYXJyYXktbGlrZSB0aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0LlxuICBfLmZpbmRJbmRleCA9IGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKDEpO1xuICBfLmZpbmRMYXN0SW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigtMSk7XG5cbiAgLy8gVXNlIGEgY29tcGFyYXRvciBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IHRoZSBzbWFsbGVzdCBpbmRleCBhdCB3aGljaFxuICAvLyBhbiBvYmplY3Qgc2hvdWxkIGJlIGluc2VydGVkIHNvIGFzIHRvIG1haW50YWluIG9yZGVyLiBVc2VzIGJpbmFyeSBzZWFyY2guXG4gIF8uc29ydGVkSW5kZXggPSBmdW5jdGlvbihhcnJheSwgb2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpO1xuICAgIHZhciB2YWx1ZSA9IGl0ZXJhdGVlKG9iaik7XG4gICAgdmFyIGxvdyA9IDAsIGhpZ2ggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgICB2YXIgbWlkID0gTWF0aC5mbG9vcigobG93ICsgaGlnaCkgLyAyKTtcbiAgICAgIGlmIChpdGVyYXRlZShhcnJheVttaWRdKSA8IHZhbHVlKSBsb3cgPSBtaWQgKyAxOyBlbHNlIGhpZ2ggPSBtaWQ7XG4gICAgfVxuICAgIHJldHVybiBsb3c7XG4gIH07XG5cbiAgLy8gR2VuZXJhdG9yIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgaW5kZXhPZiBhbmQgbGFzdEluZGV4T2YgZnVuY3Rpb25zLlxuICB2YXIgY3JlYXRlSW5kZXhGaW5kZXIgPSBmdW5jdGlvbihkaXIsIHByZWRpY2F0ZUZpbmQsIHNvcnRlZEluZGV4KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBpZHgpIHtcbiAgICAgIHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICAgIGlmICh0eXBlb2YgaWR4ID09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChkaXIgPiAwKSB7XG4gICAgICAgICAgaSA9IGlkeCA+PSAwID8gaWR4IDogTWF0aC5tYXgoaWR4ICsgbGVuZ3RoLCBpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZW5ndGggPSBpZHggPj0gMCA/IE1hdGgubWluKGlkeCArIDEsIGxlbmd0aCkgOiBpZHggKyBsZW5ndGggKyAxO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNvcnRlZEluZGV4ICYmIGlkeCAmJiBsZW5ndGgpIHtcbiAgICAgICAgaWR4ID0gc29ydGVkSW5kZXgoYXJyYXksIGl0ZW0pO1xuICAgICAgICByZXR1cm4gYXJyYXlbaWR4XSA9PT0gaXRlbSA/IGlkeCA6IC0xO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW0gIT09IGl0ZW0pIHtcbiAgICAgICAgaWR4ID0gcHJlZGljYXRlRmluZChzbGljZS5jYWxsKGFycmF5LCBpLCBsZW5ndGgpLCBfLmlzTmFOKTtcbiAgICAgICAgcmV0dXJuIGlkeCA+PSAwID8gaWR4ICsgaSA6IC0xO1xuICAgICAgfVxuICAgICAgZm9yIChpZHggPSBkaXIgPiAwID8gaSA6IGxlbmd0aCAtIDE7IGlkeCA+PSAwICYmIGlkeCA8IGxlbmd0aDsgaWR4ICs9IGRpcikge1xuICAgICAgICBpZiAoYXJyYXlbaWR4XSA9PT0gaXRlbSkgcmV0dXJuIGlkeDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYW4gaXRlbSBpbiBhbiBhcnJheSxcbiAgLy8gb3IgLTEgaWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1ZGVkIGluIHRoZSBhcnJheS5cbiAgLy8gSWYgdGhlIGFycmF5IGlzIGxhcmdlIGFuZCBhbHJlYWR5IGluIHNvcnQgb3JkZXIsIHBhc3MgYHRydWVgXG4gIC8vIGZvciAqKmlzU29ydGVkKiogdG8gdXNlIGJpbmFyeSBzZWFyY2guXG4gIF8uaW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKDEsIF8uZmluZEluZGV4LCBfLnNvcnRlZEluZGV4KTtcbiAgXy5sYXN0SW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKC0xLCBfLmZpbmRMYXN0SW5kZXgpO1xuXG4gIC8vIEdlbmVyYXRlIGFuIGludGVnZXIgQXJyYXkgY29udGFpbmluZyBhbiBhcml0aG1ldGljIHByb2dyZXNzaW9uLiBBIHBvcnQgb2ZcbiAgLy8gdGhlIG5hdGl2ZSBQeXRob24gYHJhbmdlKClgIGZ1bmN0aW9uLiBTZWVcbiAgLy8gW3RoZSBQeXRob24gZG9jdW1lbnRhdGlvbl0oaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3JhbmdlKS5cbiAgXy5yYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gICAgaWYgKHN0b3AgPT0gbnVsbCkge1xuICAgICAgc3RvcCA9IHN0YXJ0IHx8IDA7XG4gICAgICBzdGFydCA9IDA7XG4gICAgfVxuICAgIGlmICghc3RlcCkge1xuICAgICAgc3RlcCA9IHN0b3AgPCBzdGFydCA/IC0xIDogMTtcbiAgICB9XG5cbiAgICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCksIDApO1xuICAgIHZhciByYW5nZSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBsZW5ndGg7IGlkeCsrLCBzdGFydCArPSBzdGVwKSB7XG4gICAgICByYW5nZVtpZHhdID0gc3RhcnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhbmdlO1xuICB9O1xuXG4gIC8vIENodW5rIGEgc2luZ2xlIGFycmF5IGludG8gbXVsdGlwbGUgYXJyYXlzLCBlYWNoIGNvbnRhaW5pbmcgYGNvdW50YCBvciBmZXdlclxuICAvLyBpdGVtcy5cbiAgXy5jaHVuayA9IGZ1bmN0aW9uKGFycmF5LCBjb3VudCkge1xuICAgIGlmIChjb3VudCA9PSBudWxsIHx8IGNvdW50IDwgMSkgcmV0dXJuIFtdO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgaSA9IDAsIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgICAgcmVzdWx0LnB1c2goc2xpY2UuY2FsbChhcnJheSwgaSwgaSArPSBjb3VudCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIEZ1bmN0aW9uIChhaGVtKSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGV4ZWN1dGUgYSBmdW5jdGlvbiBhcyBhIGNvbnN0cnVjdG9yXG4gIC8vIG9yIGEgbm9ybWFsIGZ1bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgdmFyIGV4ZWN1dGVCb3VuZCA9IGZ1bmN0aW9uKHNvdXJjZUZ1bmMsIGJvdW5kRnVuYywgY29udGV4dCwgY2FsbGluZ0NvbnRleHQsIGFyZ3MpIHtcbiAgICBpZiAoIShjYWxsaW5nQ29udGV4dCBpbnN0YW5jZW9mIGJvdW5kRnVuYykpIHJldHVybiBzb3VyY2VGdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgIHZhciBzZWxmID0gYmFzZUNyZWF0ZShzb3VyY2VGdW5jLnByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IHNvdXJjZUZ1bmMuYXBwbHkoc2VsZiwgYXJncyk7XG4gICAgaWYgKF8uaXNPYmplY3QocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICByZXR1cm4gc2VsZjtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSBmdW5jdGlvbiBib3VuZCB0byBhIGdpdmVuIG9iamVjdCAoYXNzaWduaW5nIGB0aGlzYCwgYW5kIGFyZ3VtZW50cyxcbiAgLy8gb3B0aW9uYWxseSkuIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBGdW5jdGlvbi5iaW5kYCBpZlxuICAvLyBhdmFpbGFibGUuXG4gIF8uYmluZCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oZnVuYywgY29udGV4dCwgYXJncykge1xuICAgIGlmICghXy5pc0Z1bmN0aW9uKGZ1bmMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdCaW5kIG11c3QgYmUgY2FsbGVkIG9uIGEgZnVuY3Rpb24nKTtcbiAgICB2YXIgYm91bmQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGNhbGxBcmdzKSB7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCBjb250ZXh0LCB0aGlzLCBhcmdzLmNvbmNhdChjYWxsQXJncykpO1xuICAgIH0pO1xuICAgIHJldHVybiBib3VuZDtcbiAgfSk7XG5cbiAgLy8gUGFydGlhbGx5IGFwcGx5IGEgZnVuY3Rpb24gYnkgY3JlYXRpbmcgYSB2ZXJzaW9uIHRoYXQgaGFzIGhhZCBzb21lIG9mIGl0c1xuICAvLyBhcmd1bWVudHMgcHJlLWZpbGxlZCwgd2l0aG91dCBjaGFuZ2luZyBpdHMgZHluYW1pYyBgdGhpc2AgY29udGV4dC4gXyBhY3RzXG4gIC8vIGFzIGEgcGxhY2Vob2xkZXIgYnkgZGVmYXVsdCwgYWxsb3dpbmcgYW55IGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyB0byBiZVxuICAvLyBwcmUtZmlsbGVkLiBTZXQgYF8ucGFydGlhbC5wbGFjZWhvbGRlcmAgZm9yIGEgY3VzdG9tIHBsYWNlaG9sZGVyIGFyZ3VtZW50LlxuICBfLnBhcnRpYWwgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGZ1bmMsIGJvdW5kQXJncykge1xuICAgIHZhciBwbGFjZWhvbGRlciA9IF8ucGFydGlhbC5wbGFjZWhvbGRlcjtcbiAgICB2YXIgYm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBwb3NpdGlvbiA9IDAsIGxlbmd0aCA9IGJvdW5kQXJncy5sZW5ndGg7XG4gICAgICB2YXIgYXJncyA9IEFycmF5KGxlbmd0aCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFyZ3NbaV0gPSBib3VuZEFyZ3NbaV0gPT09IHBsYWNlaG9sZGVyID8gYXJndW1lbnRzW3Bvc2l0aW9uKytdIDogYm91bmRBcmdzW2ldO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgYXJndW1lbnRzLmxlbmd0aCkgYXJncy5wdXNoKGFyZ3VtZW50c1twb3NpdGlvbisrXSk7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCB0aGlzLCB0aGlzLCBhcmdzKTtcbiAgICB9O1xuICAgIHJldHVybiBib3VuZDtcbiAgfSk7XG5cbiAgXy5wYXJ0aWFsLnBsYWNlaG9sZGVyID0gXztcblxuICAvLyBCaW5kIGEgbnVtYmVyIG9mIGFuIG9iamVjdCdzIG1ldGhvZHMgdG8gdGhhdCBvYmplY3QuIFJlbWFpbmluZyBhcmd1bWVudHNcbiAgLy8gYXJlIHRoZSBtZXRob2QgbmFtZXMgdG8gYmUgYm91bmQuIFVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhhdCBhbGwgY2FsbGJhY2tzXG4gIC8vIGRlZmluZWQgb24gYW4gb2JqZWN0IGJlbG9uZyB0byBpdC5cbiAgXy5iaW5kQWxsID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihvYmosIGtleXMpIHtcbiAgICBrZXlzID0gZmxhdHRlbihrZXlzLCBmYWxzZSwgZmFsc2UpO1xuICAgIHZhciBpbmRleCA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChpbmRleCA8IDEpIHRocm93IG5ldyBFcnJvcignYmluZEFsbCBtdXN0IGJlIHBhc3NlZCBmdW5jdGlvbiBuYW1lcycpO1xuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpbmRleF07XG4gICAgICBvYmpba2V5XSA9IF8uYmluZChvYmpba2V5XSwgb2JqKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIE1lbW9pemUgYW4gZXhwZW5zaXZlIGZ1bmN0aW9uIGJ5IHN0b3JpbmcgaXRzIHJlc3VsdHMuXG4gIF8ubWVtb2l6ZSA9IGZ1bmN0aW9uKGZ1bmMsIGhhc2hlcikge1xuICAgIHZhciBtZW1vaXplID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgICB2YXIgY2FjaGUgPSBtZW1vaXplLmNhY2hlO1xuICAgICAgdmFyIGFkZHJlc3MgPSAnJyArIChoYXNoZXIgPyBoYXNoZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGtleSk7XG4gICAgICBpZiAoIWhhcyhjYWNoZSwgYWRkcmVzcykpIGNhY2hlW2FkZHJlc3NdID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgcmV0dXJuIGNhY2hlW2FkZHJlc3NdO1xuICAgIH07XG4gICAgbWVtb2l6ZS5jYWNoZSA9IHt9O1xuICAgIHJldHVybiBtZW1vaXplO1xuICB9O1xuXG4gIC8vIERlbGF5cyBhIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgYW5kIHRoZW4gY2FsbHNcbiAgLy8gaXQgd2l0aCB0aGUgYXJndW1lbnRzIHN1cHBsaWVkLlxuICBfLmRlbGF5ID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihmdW5jLCB3YWl0LCBhcmdzKSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9LCB3YWl0KTtcbiAgfSk7XG5cbiAgLy8gRGVmZXJzIGEgZnVuY3Rpb24sIHNjaGVkdWxpbmcgaXQgdG8gcnVuIGFmdGVyIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzXG4gIC8vIGNsZWFyZWQuXG4gIF8uZGVmZXIgPSBfLnBhcnRpYWwoXy5kZWxheSwgXywgMSk7XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCB3aGVuIGludm9rZWQsIHdpbGwgb25seSBiZSB0cmlnZ2VyZWQgYXQgbW9zdCBvbmNlXG4gIC8vIGR1cmluZyBhIGdpdmVuIHdpbmRvdyBvZiB0aW1lLiBOb3JtYWxseSwgdGhlIHRocm90dGxlZCBmdW5jdGlvbiB3aWxsIHJ1blxuICAvLyBhcyBtdWNoIGFzIGl0IGNhbiwgd2l0aG91dCBldmVyIGdvaW5nIG1vcmUgdGhhbiBvbmNlIHBlciBgd2FpdGAgZHVyYXRpb247XG4gIC8vIGJ1dCBpZiB5b3UnZCBsaWtlIHRvIGRpc2FibGUgdGhlIGV4ZWN1dGlvbiBvbiB0aGUgbGVhZGluZyBlZGdlLCBwYXNzXG4gIC8vIGB7bGVhZGluZzogZmFsc2V9YC4gVG8gZGlzYWJsZSBleGVjdXRpb24gb24gdGhlIHRyYWlsaW5nIGVkZ2UsIGRpdHRvLlxuICBfLnRocm90dGxlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICAgIHZhciB0aW1lb3V0LCBjb250ZXh0LCBhcmdzLCByZXN1bHQ7XG4gICAgdmFyIHByZXZpb3VzID0gMDtcbiAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcblxuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcHJldmlvdXMgPSBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlID8gMCA6IF8ubm93KCk7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICB9O1xuXG4gICAgdmFyIHRocm90dGxlZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG5vdyA9IF8ubm93KCk7XG4gICAgICBpZiAoIXByZXZpb3VzICYmIG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UpIHByZXZpb3VzID0gbm93O1xuICAgICAgdmFyIHJlbWFpbmluZyA9IHdhaXQgLSAobm93IC0gcHJldmlvdXMpO1xuICAgICAgY29udGV4dCA9IHRoaXM7XG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQpIHtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXMgPSBub3c7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxzZSkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgcmVtYWluaW5nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHRocm90dGxlZC5jYW5jZWwgPSBmdW5jdGlvbigpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIHByZXZpb3VzID0gMDtcbiAgICAgIHRpbWVvdXQgPSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgfTtcblxuICAgIHJldHVybiB0aHJvdHRsZWQ7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCBhcyBsb25nIGFzIGl0IGNvbnRpbnVlcyB0byBiZSBpbnZva2VkLCB3aWxsIG5vdFxuICAvLyBiZSB0cmlnZ2VyZWQuIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciBpdCBzdG9wcyBiZWluZyBjYWxsZWQgZm9yXG4gIC8vIE4gbWlsbGlzZWNvbmRzLiBJZiBgaW1tZWRpYXRlYCBpcyBwYXNzZWQsIHRyaWdnZXIgdGhlIGZ1bmN0aW9uIG9uIHRoZVxuICAvLyBsZWFkaW5nIGVkZ2UsIGluc3RlYWQgb2YgdGhlIHRyYWlsaW5nLlxuICBfLmRlYm91bmNlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XG4gICAgdmFyIHRpbWVvdXQsIHJlc3VsdDtcblxuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKGNvbnRleHQsIGFyZ3MpIHtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgaWYgKGFyZ3MpIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfTtcblxuICAgIHZhciBkZWJvdW5jZWQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgIGlmICh0aW1lb3V0KSBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBpZiAoaW1tZWRpYXRlKSB7XG4gICAgICAgIHZhciBjYWxsTm93ID0gIXRpbWVvdXQ7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgICAgICAgaWYgKGNhbGxOb3cpIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aW1lb3V0ID0gXy5kZWxheShsYXRlciwgd2FpdCwgdGhpcywgYXJncyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG5cbiAgICBkZWJvdW5jZWQuY2FuY2VsID0gZnVuY3Rpb24oKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGRlYm91bmNlZDtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBmdW5jdGlvbiBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIHNlY29uZCxcbiAgLy8gYWxsb3dpbmcgeW91IHRvIGFkanVzdCBhcmd1bWVudHMsIHJ1biBjb2RlIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZFxuICAvLyBjb25kaXRpb25hbGx5IGV4ZWN1dGUgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxuICBfLndyYXAgPSBmdW5jdGlvbihmdW5jLCB3cmFwcGVyKSB7XG4gICAgcmV0dXJuIF8ucGFydGlhbCh3cmFwcGVyLCBmdW5jKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgbmVnYXRlZCB2ZXJzaW9uIG9mIHRoZSBwYXNzZWQtaW4gcHJlZGljYXRlLlxuICBfLm5lZ2F0ZSA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBpcyB0aGUgY29tcG9zaXRpb24gb2YgYSBsaXN0IG9mIGZ1bmN0aW9ucywgZWFjaFxuICAvLyBjb25zdW1pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCBmb2xsb3dzLlxuICBfLmNvbXBvc2UgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2YXIgc3RhcnQgPSBhcmdzLmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGkgPSBzdGFydDtcbiAgICAgIHZhciByZXN1bHQgPSBhcmdzW3N0YXJ0XS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgd2hpbGUgKGktLSkgcmVzdWx0ID0gYXJnc1tpXS5jYWxsKHRoaXMsIHJlc3VsdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIG9uIGFuZCBhZnRlciB0aGUgTnRoIGNhbGwuXG4gIF8uYWZ0ZXIgPSBmdW5jdGlvbih0aW1lcywgZnVuYykge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgtLXRpbWVzIDwgMSkge1xuICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIHVwIHRvIChidXQgbm90IGluY2x1ZGluZykgdGhlIE50aCBjYWxsLlxuICBfLmJlZm9yZSA9IGZ1bmN0aW9uKHRpbWVzLCBmdW5jKSB7XG4gICAgdmFyIG1lbW87XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKC0tdGltZXMgPiAwKSB7XG4gICAgICAgIG1lbW8gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgICBpZiAodGltZXMgPD0gMSkgZnVuYyA9IG51bGw7XG4gICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgYXQgbW9zdCBvbmUgdGltZSwgbm8gbWF0dGVyIGhvd1xuICAvLyBvZnRlbiB5b3UgY2FsbCBpdC4gVXNlZnVsIGZvciBsYXp5IGluaXRpYWxpemF0aW9uLlxuICBfLm9uY2UgPSBfLnBhcnRpYWwoXy5iZWZvcmUsIDIpO1xuXG4gIF8ucmVzdEFyZ3VtZW50cyA9IHJlc3RBcmd1bWVudHM7XG5cbiAgLy8gT2JqZWN0IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gS2V5cyBpbiBJRSA8IDkgdGhhdCB3b24ndCBiZSBpdGVyYXRlZCBieSBgZm9yIGtleSBpbiAuLi5gIGFuZCB0aHVzIG1pc3NlZC5cbiAgdmFyIGhhc0VudW1CdWcgPSAhe3RvU3RyaW5nOiBudWxsfS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgndG9TdHJpbmcnKTtcbiAgdmFyIG5vbkVudW1lcmFibGVQcm9wcyA9IFsndmFsdWVPZicsICdpc1Byb3RvdHlwZU9mJywgJ3RvU3RyaW5nJyxcbiAgICAncHJvcGVydHlJc0VudW1lcmFibGUnLCAnaGFzT3duUHJvcGVydHknLCAndG9Mb2NhbGVTdHJpbmcnXTtcblxuICB2YXIgY29sbGVjdE5vbkVudW1Qcm9wcyA9IGZ1bmN0aW9uKG9iaiwga2V5cykge1xuICAgIHZhciBub25FbnVtSWR4ID0gbm9uRW51bWVyYWJsZVByb3BzLmxlbmd0aDtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBvYmouY29uc3RydWN0b3I7XG4gICAgdmFyIHByb3RvID0gXy5pc0Z1bmN0aW9uKGNvbnN0cnVjdG9yKSAmJiBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgfHwgT2JqUHJvdG87XG5cbiAgICAvLyBDb25zdHJ1Y3RvciBpcyBhIHNwZWNpYWwgY2FzZS5cbiAgICB2YXIgcHJvcCA9ICdjb25zdHJ1Y3Rvcic7XG4gICAgaWYgKGhhcyhvYmosIHByb3ApICYmICFfLmNvbnRhaW5zKGtleXMsIHByb3ApKSBrZXlzLnB1c2gocHJvcCk7XG5cbiAgICB3aGlsZSAobm9uRW51bUlkeC0tKSB7XG4gICAgICBwcm9wID0gbm9uRW51bWVyYWJsZVByb3BzW25vbkVudW1JZHhdO1xuICAgICAgaWYgKHByb3AgaW4gb2JqICYmIG9ialtwcm9wXSAhPT0gcHJvdG9bcHJvcF0gJiYgIV8uY29udGFpbnMoa2V5cywgcHJvcCkpIHtcbiAgICAgICAga2V5cy5wdXNoKHByb3ApO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3Mgb3duIHByb3BlcnRpZXMuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBPYmplY3Qua2V5c2AuXG4gIF8ua2V5cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gW107XG4gICAgaWYgKG5hdGl2ZUtleXMpIHJldHVybiBuYXRpdmVLZXlzKG9iaik7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBpZiAoaGFzKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gICAgLy8gQWhlbSwgSUUgPCA5LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgYWxsIHRoZSBwcm9wZXJ0eSBuYW1lcyBvZiBhbiBvYmplY3QuXG4gIF8uYWxsS2V5cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gW107XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBrZXlzLnB1c2goa2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5cztcbiAgfTtcblxuICAvLyBSZXRyaWV2ZSB0aGUgdmFsdWVzIG9mIGFuIG9iamVjdCdzIHByb3BlcnRpZXMuXG4gIF8udmFsdWVzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIHZhbHVlcyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWVzW2ldID0gb2JqW2tleXNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9O1xuXG4gIC8vIFJldHVybnMgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxlbWVudCBvZiB0aGUgb2JqZWN0LlxuICAvLyBJbiBjb250cmFzdCB0byBfLm1hcCBpdCByZXR1cm5zIGFuIG9iamVjdC5cbiAgXy5tYXBPYmplY3QgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0ga2V5cy5sZW5ndGgsXG4gICAgICAgIHJlc3VsdHMgPSB7fTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgcmVzdWx0c1tjdXJyZW50S2V5XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gQ29udmVydCBhbiBvYmplY3QgaW50byBhIGxpc3Qgb2YgYFtrZXksIHZhbHVlXWAgcGFpcnMuXG4gIC8vIFRoZSBvcHBvc2l0ZSBvZiBfLm9iamVjdC5cbiAgXy5wYWlycyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBwYWlycyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcGFpcnNbaV0gPSBba2V5c1tpXSwgb2JqW2tleXNbaV1dXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhaXJzO1xuICB9O1xuXG4gIC8vIEludmVydCB0aGUga2V5cyBhbmQgdmFsdWVzIG9mIGFuIG9iamVjdC4gVGhlIHZhbHVlcyBtdXN0IGJlIHNlcmlhbGl6YWJsZS5cbiAgXy5pbnZlcnQgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W29ialtrZXlzW2ldXV0gPSBrZXlzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHNvcnRlZCBsaXN0IG9mIHRoZSBmdW5jdGlvbiBuYW1lcyBhdmFpbGFibGUgb24gdGhlIG9iamVjdC5cbiAgLy8gQWxpYXNlZCBhcyBgbWV0aG9kc2AuXG4gIF8uZnVuY3Rpb25zID0gXy5tZXRob2RzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIG5hbWVzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihvYmpba2V5XSkpIG5hbWVzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWVzLnNvcnQoKTtcbiAgfTtcblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYXNzaWduZXIgZnVuY3Rpb25zLlxuICB2YXIgY3JlYXRlQXNzaWduZXIgPSBmdW5jdGlvbihrZXlzRnVuYywgZGVmYXVsdHMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIGlmIChkZWZhdWx0cykgb2JqID0gT2JqZWN0KG9iaik7XG4gICAgICBpZiAobGVuZ3RoIDwgMiB8fCBvYmogPT0gbnVsbCkgcmV0dXJuIG9iajtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF0sXG4gICAgICAgICAgICBrZXlzID0ga2V5c0Z1bmMoc291cmNlKSxcbiAgICAgICAgICAgIGwgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAoIWRlZmF1bHRzIHx8IG9ialtrZXldID09PSB2b2lkIDApIG9ialtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfTtcbiAgfTtcblxuICAvLyBFeHRlbmQgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIHByb3BlcnRpZXMgaW4gcGFzc2VkLWluIG9iamVjdChzKS5cbiAgXy5leHRlbmQgPSBjcmVhdGVBc3NpZ25lcihfLmFsbEtleXMpO1xuXG4gIC8vIEFzc2lnbnMgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIG93biBwcm9wZXJ0aWVzIGluIHRoZSBwYXNzZWQtaW4gb2JqZWN0KHMpLlxuICAvLyAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnbilcbiAgXy5leHRlbmRPd24gPSBfLmFzc2lnbiA9IGNyZWF0ZUFzc2lnbmVyKF8ua2V5cyk7XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3Qga2V5IG9uIGFuIG9iamVjdCB0aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0LlxuICBfLmZpbmRLZXkgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKSwga2V5O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpba2V5XSwga2V5LCBvYmopKSByZXR1cm4ga2V5O1xuICAgIH1cbiAgfTtcblxuICAvLyBJbnRlcm5hbCBwaWNrIGhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgYG9iamAgaGFzIGtleSBga2V5YC5cbiAgdmFyIGtleUluT2JqID0gZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqKSB7XG4gICAgcmV0dXJuIGtleSBpbiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IG9ubHkgY29udGFpbmluZyB0aGUgd2hpdGVsaXN0ZWQgcHJvcGVydGllcy5cbiAgXy5waWNrID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihvYmosIGtleXMpIHtcbiAgICB2YXIgcmVzdWx0ID0ge30sIGl0ZXJhdGVlID0ga2V5c1swXTtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiByZXN1bHQ7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihpdGVyYXRlZSkpIHtcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwga2V5c1sxXSk7XG4gICAgICBrZXlzID0gXy5hbGxLZXlzKG9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVlID0ga2V5SW5PYmo7XG4gICAgICBrZXlzID0gZmxhdHRlbihrZXlzLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgb2JqID0gT2JqZWN0KG9iaik7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgaWYgKGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9iaikpIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuXG4gIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCB3aXRob3V0IHRoZSBibGFja2xpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLm9taXQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwga2V5cykge1xuICAgIHZhciBpdGVyYXRlZSA9IGtleXNbMF0sIGNvbnRleHQ7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihpdGVyYXRlZSkpIHtcbiAgICAgIGl0ZXJhdGVlID0gXy5uZWdhdGUoaXRlcmF0ZWUpO1xuICAgICAgaWYgKGtleXMubGVuZ3RoID4gMSkgY29udGV4dCA9IGtleXNbMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleXMgPSBfLm1hcChmbGF0dGVuKGtleXMsIGZhbHNlLCBmYWxzZSksIFN0cmluZyk7XG4gICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKGtleXMsIGtleSk7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gXy5waWNrKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpO1xuICB9KTtcblxuICAvLyBGaWxsIGluIGEgZ2l2ZW4gb2JqZWN0IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzLlxuICBfLmRlZmF1bHRzID0gY3JlYXRlQXNzaWduZXIoXy5hbGxLZXlzLCB0cnVlKTtcblxuICAvLyBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIGdpdmVuIHByb3RvdHlwZSBvYmplY3QuXG4gIC8vIElmIGFkZGl0aW9uYWwgcHJvcGVydGllcyBhcmUgcHJvdmlkZWQgdGhlbiB0aGV5IHdpbGwgYmUgYWRkZWQgdG8gdGhlXG4gIC8vIGNyZWF0ZWQgb2JqZWN0LlxuICBfLmNyZWF0ZSA9IGZ1bmN0aW9uKHByb3RvdHlwZSwgcHJvcHMpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUNyZWF0ZShwcm90b3R5cGUpO1xuICAgIGlmIChwcm9wcykgXy5leHRlbmRPd24ocmVzdWx0LCBwcm9wcyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSAoc2hhbGxvdy1jbG9uZWQpIGR1cGxpY2F0ZSBvZiBhbiBvYmplY3QuXG4gIF8uY2xvbmUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajtcbiAgICByZXR1cm4gXy5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF8uZXh0ZW5kKHt9LCBvYmopO1xuICB9O1xuXG4gIC8vIEludm9rZXMgaW50ZXJjZXB0b3Igd2l0aCB0aGUgb2JqLCBhbmQgdGhlbiByZXR1cm5zIG9iai5cbiAgLy8gVGhlIHByaW1hcnkgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBcInRhcCBpbnRvXCIgYSBtZXRob2QgY2hhaW4sIGluXG4gIC8vIG9yZGVyIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBpbnRlcm1lZGlhdGUgcmVzdWx0cyB3aXRoaW4gdGhlIGNoYWluLlxuICBfLnRhcCA9IGZ1bmN0aW9uKG9iaiwgaW50ZXJjZXB0b3IpIHtcbiAgICBpbnRlcmNlcHRvcihvYmopO1xuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2YgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8uaXNNYXRjaCA9IGZ1bmN0aW9uKG9iamVjdCwgYXR0cnMpIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhhdHRycyksIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuICFsZW5ndGg7XG4gICAgdmFyIG9iaiA9IE9iamVjdChvYmplY3QpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKGF0dHJzW2tleV0gIT09IG9ialtrZXldIHx8ICEoa2V5IGluIG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cblxuICAvLyBJbnRlcm5hbCByZWN1cnNpdmUgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgYGlzRXF1YWxgLlxuICB2YXIgZXEsIGRlZXBFcTtcbiAgZXEgPSBmdW5jdGlvbihhLCBiLCBhU3RhY2ssIGJTdGFjaykge1xuICAgIC8vIElkZW50aWNhbCBvYmplY3RzIGFyZSBlcXVhbC4gYDAgPT09IC0wYCwgYnV0IHRoZXkgYXJlbid0IGlkZW50aWNhbC5cbiAgICAvLyBTZWUgdGhlIFtIYXJtb255IGBlZ2FsYCBwcm9wb3NhbF0oaHR0cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTplZ2FsKS5cbiAgICBpZiAoYSA9PT0gYikgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT09IDEgLyBiO1xuICAgIC8vIGBudWxsYCBvciBgdW5kZWZpbmVkYCBvbmx5IGVxdWFsIHRvIGl0c2VsZiAoc3RyaWN0IGNvbXBhcmlzb24pLlxuICAgIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2ZS5cbiAgICBpZiAoYSAhPT0gYSkgcmV0dXJuIGIgIT09IGI7XG4gICAgLy8gRXhoYXVzdCBwcmltaXRpdmUgY2hlY2tzXG4gICAgdmFyIHR5cGUgPSB0eXBlb2YgYTtcbiAgICBpZiAodHlwZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBkZWVwRXEoYSwgYiwgYVN0YWNrLCBiU3RhY2spO1xuICB9O1xuXG4gIC8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBgaXNFcXVhbGAuXG4gIGRlZXBFcSA9IGZ1bmN0aW9uKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7XG4gICAgLy8gVW53cmFwIGFueSB3cmFwcGVkIG9iamVjdHMuXG4gICAgaWYgKGEgaW5zdGFuY2VvZiBfKSBhID0gYS5fd3JhcHBlZDtcbiAgICBpZiAoYiBpbnN0YW5jZW9mIF8pIGIgPSBiLl93cmFwcGVkO1xuICAgIC8vIENvbXBhcmUgYFtbQ2xhc3NdXWAgbmFtZXMuXG4gICAgdmFyIGNsYXNzTmFtZSA9IHRvU3RyaW5nLmNhbGwoYSk7XG4gICAgaWYgKGNsYXNzTmFtZSAhPT0gdG9TdHJpbmcuY2FsbChiKSkgcmV0dXJuIGZhbHNlO1xuICAgIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4gICAgICAvLyBTdHJpbmdzLCBudW1iZXJzLCByZWd1bGFyIGV4cHJlc3Npb25zLCBkYXRlcywgYW5kIGJvb2xlYW5zIGFyZSBjb21wYXJlZCBieSB2YWx1ZS5cbiAgICAgIGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XG4gICAgICAvLyBSZWdFeHBzIGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MgZm9yIGNvbXBhcmlzb24gKE5vdGU6ICcnICsgL2EvaSA9PT0gJy9hL2knKVxuICAgICAgY2FzZSAnW29iamVjdCBTdHJpbmddJzpcbiAgICAgICAgLy8gUHJpbWl0aXZlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBvYmplY3Qgd3JhcHBlcnMgYXJlIGVxdWl2YWxlbnQ7IHRodXMsIGBcIjVcImAgaXNcbiAgICAgICAgLy8gZXF1aXZhbGVudCB0byBgbmV3IFN0cmluZyhcIjVcIilgLlxuICAgICAgICByZXR1cm4gJycgKyBhID09PSAnJyArIGI7XG4gICAgICBjYXNlICdbb2JqZWN0IE51bWJlcl0nOlxuICAgICAgICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICAgICAgICAvLyBPYmplY3QoTmFOKSBpcyBlcXVpdmFsZW50IHRvIE5hTi5cbiAgICAgICAgaWYgKCthICE9PSArYSkgcmV0dXJuICtiICE9PSArYjtcbiAgICAgICAgLy8gQW4gYGVnYWxgIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkIGZvciBvdGhlciBudW1lcmljIHZhbHVlcy5cbiAgICAgICAgcmV0dXJuICthID09PSAwID8gMSAvICthID09PSAxIC8gYiA6ICthID09PSArYjtcbiAgICAgIGNhc2UgJ1tvYmplY3QgRGF0ZV0nOlxuICAgICAgY2FzZSAnW29iamVjdCBCb29sZWFuXSc6XG4gICAgICAgIC8vIENvZXJjZSBkYXRlcyBhbmQgYm9vbGVhbnMgdG8gbnVtZXJpYyBwcmltaXRpdmUgdmFsdWVzLiBEYXRlcyBhcmUgY29tcGFyZWQgYnkgdGhlaXJcbiAgICAgICAgLy8gbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zLiBOb3RlIHRoYXQgaW52YWxpZCBkYXRlcyB3aXRoIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9uc1xuICAgICAgICAvLyBvZiBgTmFOYCBhcmUgbm90IGVxdWl2YWxlbnQuXG4gICAgICAgIHJldHVybiArYSA9PT0gK2I7XG4gICAgICBjYXNlICdbb2JqZWN0IFN5bWJvbF0nOlxuICAgICAgICByZXR1cm4gU3ltYm9sUHJvdG8udmFsdWVPZi5jYWxsKGEpID09PSBTeW1ib2xQcm90by52YWx1ZU9mLmNhbGwoYik7XG4gICAgfVxuXG4gICAgdmFyIGFyZUFycmF5cyA9IGNsYXNzTmFtZSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICBpZiAoIWFyZUFycmF5cykge1xuICAgICAgaWYgKHR5cGVvZiBhICE9ICdvYmplY3QnIHx8IHR5cGVvZiBiICE9ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIE9iamVjdHMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1aXZhbGVudCwgYnV0IGBPYmplY3RgcyBvciBgQXJyYXlgc1xuICAgICAgLy8gZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFyZS5cbiAgICAgIHZhciBhQ3RvciA9IGEuY29uc3RydWN0b3IsIGJDdG9yID0gYi5jb25zdHJ1Y3RvcjtcbiAgICAgIGlmIChhQ3RvciAhPT0gYkN0b3IgJiYgIShfLmlzRnVuY3Rpb24oYUN0b3IpICYmIGFDdG9yIGluc3RhbmNlb2YgYUN0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmlzRnVuY3Rpb24oYkN0b3IpICYmIGJDdG9yIGluc3RhbmNlb2YgYkN0b3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICYmICgnY29uc3RydWN0b3InIGluIGEgJiYgJ2NvbnN0cnVjdG9yJyBpbiBiKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFzc3VtZSBlcXVhbGl0eSBmb3IgY3ljbGljIHN0cnVjdHVyZXMuIFRoZSBhbGdvcml0aG0gZm9yIGRldGVjdGluZyBjeWNsaWNcbiAgICAvLyBzdHJ1Y3R1cmVzIGlzIGFkYXB0ZWQgZnJvbSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLCBhYnN0cmFjdCBvcGVyYXRpb24gYEpPYC5cblxuICAgIC8vIEluaXRpYWxpemluZyBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAvLyBJdCdzIGRvbmUgaGVyZSBzaW5jZSB3ZSBvbmx5IG5lZWQgdGhlbSBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzIGNvbXBhcmlzb24uXG4gICAgYVN0YWNrID0gYVN0YWNrIHx8IFtdO1xuICAgIGJTdGFjayA9IGJTdGFjayB8fCBbXTtcbiAgICB2YXIgbGVuZ3RoID0gYVN0YWNrLmxlbmd0aDtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIC8vIExpbmVhciBzZWFyY2guIFBlcmZvcm1hbmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZlxuICAgICAgLy8gdW5pcXVlIG5lc3RlZCBzdHJ1Y3R1cmVzLlxuICAgICAgaWYgKGFTdGFja1tsZW5ndGhdID09PSBhKSByZXR1cm4gYlN0YWNrW2xlbmd0aF0gPT09IGI7XG4gICAgfVxuXG4gICAgLy8gQWRkIHRoZSBmaXJzdCBvYmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIGFTdGFjay5wdXNoKGEpO1xuICAgIGJTdGFjay5wdXNoKGIpO1xuXG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgaWYgKGFyZUFycmF5cykge1xuICAgICAgLy8gQ29tcGFyZSBhcnJheSBsZW5ndGhzIHRvIGRldGVybWluZSBpZiBhIGRlZXAgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkuXG4gICAgICBsZW5ndGggPSBhLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgdGhlIGNvbnRlbnRzLCBpZ25vcmluZyBub24tbnVtZXJpYyBwcm9wZXJ0aWVzLlxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIGlmICghZXEoYVtsZW5ndGhdLCBiW2xlbmd0aF0sIGFTdGFjaywgYlN0YWNrKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgb2JqZWN0cy5cbiAgICAgIHZhciBrZXlzID0gXy5rZXlzKGEpLCBrZXk7XG4gICAgICBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICAgIC8vIEVuc3VyZSB0aGF0IGJvdGggb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIG51bWJlciBvZiBwcm9wZXJ0aWVzIGJlZm9yZSBjb21wYXJpbmcgZGVlcCBlcXVhbGl0eS5cbiAgICAgIGlmIChfLmtleXMoYikubGVuZ3RoICE9PSBsZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICAvLyBEZWVwIGNvbXBhcmUgZWFjaCBtZW1iZXJcbiAgICAgICAga2V5ID0ga2V5c1tsZW5ndGhdO1xuICAgICAgICBpZiAoIShoYXMoYiwga2V5KSAmJiBlcShhW2tleV0sIGJba2V5XSwgYVN0YWNrLCBiU3RhY2spKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBSZW1vdmUgdGhlIGZpcnN0IG9iamVjdCBmcm9tIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3RhY2sucG9wKCk7XG4gICAgYlN0YWNrLnBvcCgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIFBlcmZvcm0gYSBkZWVwIGNvbXBhcmlzb24gdG8gY2hlY2sgaWYgdHdvIG9iamVjdHMgYXJlIGVxdWFsLlxuICBfLmlzRXF1YWwgPSBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGVxKGEsIGIpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gYXJyYXksIHN0cmluZywgb3Igb2JqZWN0IGVtcHR5P1xuICAvLyBBbiBcImVtcHR5XCIgb2JqZWN0IGhhcyBubyBlbnVtZXJhYmxlIG93bi1wcm9wZXJ0aWVzLlxuICBfLmlzRW1wdHkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopICYmIChfLmlzQXJyYXkob2JqKSB8fCBfLmlzU3RyaW5nKG9iaikgfHwgXy5pc0FyZ3VtZW50cyhvYmopKSkgcmV0dXJuIG9iai5sZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIF8ua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgRE9NIGVsZW1lbnQ/XG4gIF8uaXNFbGVtZW50ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgPT09IDEpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYW4gYXJyYXk/XG4gIC8vIERlbGVnYXRlcyB0byBFQ01BNSdzIG5hdGl2ZSBBcnJheS5pc0FycmF5XG4gIF8uaXNBcnJheSA9IG5hdGl2ZUlzQXJyYXkgfHwgZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIGFuIG9iamVjdD9cbiAgXy5pc09iamVjdCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgfTtcblxuICAvLyBBZGQgc29tZSBpc1R5cGUgbWV0aG9kczogaXNBcmd1bWVudHMsIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBpc051bWJlciwgaXNEYXRlLCBpc1JlZ0V4cCwgaXNFcnJvciwgaXNNYXAsIGlzV2Vha01hcCwgaXNTZXQsIGlzV2Vha1NldC5cbiAgXy5lYWNoKFsnQXJndW1lbnRzJywgJ0Z1bmN0aW9uJywgJ1N0cmluZycsICdOdW1iZXInLCAnRGF0ZScsICdSZWdFeHAnLCAnRXJyb3InLCAnU3ltYm9sJywgJ01hcCcsICdXZWFrTWFwJywgJ1NldCcsICdXZWFrU2V0J10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBfWydpcycgKyBuYW1lXSA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgJyArIG5hbWUgKyAnXSc7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRGVmaW5lIGEgZmFsbGJhY2sgdmVyc2lvbiBvZiB0aGUgbWV0aG9kIGluIGJyb3dzZXJzIChhaGVtLCBJRSA8IDkpLCB3aGVyZVxuICAvLyB0aGVyZSBpc24ndCBhbnkgaW5zcGVjdGFibGUgXCJBcmd1bWVudHNcIiB0eXBlLlxuICBpZiAoIV8uaXNBcmd1bWVudHMoYXJndW1lbnRzKSkge1xuICAgIF8uaXNBcmd1bWVudHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBoYXMob2JqLCAnY2FsbGVlJyk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIE9wdGltaXplIGBpc0Z1bmN0aW9uYCBpZiBhcHByb3ByaWF0ZS4gV29yayBhcm91bmQgc29tZSB0eXBlb2YgYnVncyBpbiBvbGQgdjgsXG4gIC8vIElFIDExICgjMTYyMSksIFNhZmFyaSA4ICgjMTkyOSksIGFuZCBQaGFudG9tSlMgKCMyMjM2KS5cbiAgdmFyIG5vZGVsaXN0ID0gcm9vdC5kb2N1bWVudCAmJiByb290LmRvY3VtZW50LmNoaWxkTm9kZXM7XG4gIGlmICh0eXBlb2YgLy4vICE9ICdmdW5jdGlvbicgJiYgdHlwZW9mIEludDhBcnJheSAhPSAnb2JqZWN0JyAmJiB0eXBlb2Ygbm9kZWxpc3QgIT0gJ2Z1bmN0aW9uJykge1xuICAgIF8uaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT0gJ2Z1bmN0aW9uJyB8fCBmYWxzZTtcbiAgICB9O1xuICB9XG5cbiAgLy8gSXMgYSBnaXZlbiBvYmplY3QgYSBmaW5pdGUgbnVtYmVyP1xuICBfLmlzRmluaXRlID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuICFfLmlzU3ltYm9sKG9iaikgJiYgaXNGaW5pdGUob2JqKSAmJiAhaXNOYU4ocGFyc2VGbG9hdChvYmopKTtcbiAgfTtcblxuICAvLyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYE5hTmA/XG4gIF8uaXNOYU4gPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gXy5pc051bWJlcihvYmopICYmIGlzTmFOKG9iaik7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIGJvb2xlYW4/XG4gIF8uaXNCb29sZWFuID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdHJ1ZSB8fCBvYmogPT09IGZhbHNlIHx8IHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQm9vbGVhbl0nO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgZXF1YWwgdG8gbnVsbD9cbiAgXy5pc051bGwgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSBudWxsO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgdW5kZWZpbmVkP1xuICBfLmlzVW5kZWZpbmVkID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdm9pZCAwO1xuICB9O1xuXG4gIC8vIFNob3J0Y3V0IGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gcHJvcGVydHkgZGlyZWN0bHlcbiAgLy8gb24gaXRzZWxmIChpbiBvdGhlciB3b3Jkcywgbm90IG9uIGEgcHJvdG90eXBlKS5cbiAgXy5oYXMgPSBmdW5jdGlvbihvYmosIHBhdGgpIHtcbiAgICBpZiAoIV8uaXNBcnJheShwYXRoKSkge1xuICAgICAgcmV0dXJuIGhhcyhvYmosIHBhdGgpO1xuICAgIH1cbiAgICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHBhdGhbaV07XG4gICAgICBpZiAob2JqID09IG51bGwgfHwgIWhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIG9iaiA9IG9ialtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gISFsZW5ndGg7XG4gIH07XG5cbiAgLy8gVXRpbGl0eSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBSdW4gVW5kZXJzY29yZS5qcyBpbiAqbm9Db25mbGljdCogbW9kZSwgcmV0dXJuaW5nIHRoZSBgX2AgdmFyaWFibGUgdG8gaXRzXG4gIC8vIHByZXZpb3VzIG93bmVyLiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdC5cbiAgXy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgcm9vdC5fID0gcHJldmlvdXNVbmRlcnNjb3JlO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIEtlZXAgdGhlIGlkZW50aXR5IGZ1bmN0aW9uIGFyb3VuZCBmb3IgZGVmYXVsdCBpdGVyYXRlZXMuXG4gIF8uaWRlbnRpdHkgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcblxuICAvLyBQcmVkaWNhdGUtZ2VuZXJhdGluZyBmdW5jdGlvbnMuIE9mdGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuXG4gIF8uY29uc3RhbnQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICB9O1xuXG4gIF8ubm9vcCA9IGZ1bmN0aW9uKCl7fTtcblxuICAvLyBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBwYXNzZWQgYW4gb2JqZWN0LCB3aWxsIHRyYXZlcnNlIHRoYXQgb2JqZWN04oCZc1xuICAvLyBwcm9wZXJ0aWVzIGRvd24gdGhlIGdpdmVuIGBwYXRoYCwgc3BlY2lmaWVkIGFzIGFuIGFycmF5IG9mIGtleXMgb3IgaW5kZXhlcy5cbiAgXy5wcm9wZXJ0eSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICBpZiAoIV8uaXNBcnJheShwYXRoKSkge1xuICAgICAgcmV0dXJuIHNoYWxsb3dQcm9wZXJ0eShwYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIGRlZXBHZXQob2JqLCBwYXRoKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEdlbmVyYXRlcyBhIGZ1bmN0aW9uIGZvciBhIGdpdmVuIG9iamVjdCB0aGF0IHJldHVybnMgYSBnaXZlbiBwcm9wZXJ0eS5cbiAgXy5wcm9wZXJ0eU9mID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKXt9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24ocGF0aCkge1xuICAgICAgcmV0dXJuICFfLmlzQXJyYXkocGF0aCkgPyBvYmpbcGF0aF0gOiBkZWVwR2V0KG9iaiwgcGF0aCk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgcHJlZGljYXRlIGZvciBjaGVja2luZyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2ZcbiAgLy8gYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8ubWF0Y2hlciA9IF8ubWF0Y2hlcyA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gICAgYXR0cnMgPSBfLmV4dGVuZE93bih7fSwgYXR0cnMpO1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBfLmlzTWF0Y2gob2JqLCBhdHRycyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSdW4gYSBmdW5jdGlvbiAqKm4qKiB0aW1lcy5cbiAgXy50aW1lcyA9IGZ1bmN0aW9uKG4sIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIGFjY3VtID0gQXJyYXkoTWF0aC5tYXgoMCwgbikpO1xuICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgMSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIGFjY3VtW2ldID0gaXRlcmF0ZWUoaSk7XG4gICAgcmV0dXJuIGFjY3VtO1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXggKGluY2x1c2l2ZSkuXG4gIF8ucmFuZG9tID0gZnVuY3Rpb24obWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID09IG51bGwpIHtcbiAgICAgIG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuICAgIHJldHVybiBtaW4gKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpO1xuICB9O1xuXG4gIC8vIEEgKHBvc3NpYmx5IGZhc3Rlcikgd2F5IHRvIGdldCB0aGUgY3VycmVudCB0aW1lc3RhbXAgYXMgYW4gaW50ZWdlci5cbiAgXy5ub3cgPSBEYXRlLm5vdyB8fCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH07XG5cbiAgLy8gTGlzdCBvZiBIVE1MIGVudGl0aWVzIGZvciBlc2NhcGluZy5cbiAgdmFyIGVzY2FwZU1hcCA9IHtcbiAgICAnJic6ICcmYW1wOycsXG4gICAgJzwnOiAnJmx0OycsXG4gICAgJz4nOiAnJmd0OycsXG4gICAgJ1wiJzogJyZxdW90OycsXG4gICAgXCInXCI6ICcmI3gyNzsnLFxuICAgICdgJzogJyYjeDYwOydcbiAgfTtcbiAgdmFyIHVuZXNjYXBlTWFwID0gXy5pbnZlcnQoZXNjYXBlTWFwKTtcblxuICAvLyBGdW5jdGlvbnMgZm9yIGVzY2FwaW5nIGFuZCB1bmVzY2FwaW5nIHN0cmluZ3MgdG8vZnJvbSBIVE1MIGludGVycG9sYXRpb24uXG4gIHZhciBjcmVhdGVFc2NhcGVyID0gZnVuY3Rpb24obWFwKSB7XG4gICAgdmFyIGVzY2FwZXIgPSBmdW5jdGlvbihtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hcFttYXRjaF07XG4gICAgfTtcbiAgICAvLyBSZWdleGVzIGZvciBpZGVudGlmeWluZyBhIGtleSB0aGF0IG5lZWRzIHRvIGJlIGVzY2FwZWQuXG4gICAgdmFyIHNvdXJjZSA9ICcoPzonICsgXy5rZXlzKG1hcCkuam9pbignfCcpICsgJyknO1xuICAgIHZhciB0ZXN0UmVnZXhwID0gUmVnRXhwKHNvdXJjZSk7XG4gICAgdmFyIHJlcGxhY2VSZWdleHAgPSBSZWdFeHAoc291cmNlLCAnZycpO1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHN0cmluZyA9PSBudWxsID8gJycgOiAnJyArIHN0cmluZztcbiAgICAgIHJldHVybiB0ZXN0UmVnZXhwLnRlc3Qoc3RyaW5nKSA/IHN0cmluZy5yZXBsYWNlKHJlcGxhY2VSZWdleHAsIGVzY2FwZXIpIDogc3RyaW5nO1xuICAgIH07XG4gIH07XG4gIF8uZXNjYXBlID0gY3JlYXRlRXNjYXBlcihlc2NhcGVNYXApO1xuICBfLnVuZXNjYXBlID0gY3JlYXRlRXNjYXBlcih1bmVzY2FwZU1hcCk7XG5cbiAgLy8gVHJhdmVyc2VzIHRoZSBjaGlsZHJlbiBvZiBgb2JqYCBhbG9uZyBgcGF0aGAuIElmIGEgY2hpbGQgaXMgYSBmdW5jdGlvbiwgaXRcbiAgLy8gaXMgaW52b2tlZCB3aXRoIGl0cyBwYXJlbnQgYXMgY29udGV4dC4gUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpbmFsXG4gIC8vIGNoaWxkLCBvciBgZmFsbGJhY2tgIGlmIGFueSBjaGlsZCBpcyB1bmRlZmluZWQuXG4gIF8ucmVzdWx0ID0gZnVuY3Rpb24ob2JqLCBwYXRoLCBmYWxsYmFjaykge1xuICAgIGlmICghXy5pc0FycmF5KHBhdGgpKSBwYXRoID0gW3BhdGhdO1xuICAgIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDtcbiAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgcmV0dXJuIF8uaXNGdW5jdGlvbihmYWxsYmFjaykgPyBmYWxsYmFjay5jYWxsKG9iaikgOiBmYWxsYmFjaztcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3AgPSBvYmogPT0gbnVsbCA/IHZvaWQgMCA6IG9ialtwYXRoW2ldXTtcbiAgICAgIGlmIChwcm9wID09PSB2b2lkIDApIHtcbiAgICAgICAgcHJvcCA9IGZhbGxiYWNrO1xuICAgICAgICBpID0gbGVuZ3RoOyAvLyBFbnN1cmUgd2UgZG9uJ3QgY29udGludWUgaXRlcmF0aW5nLlxuICAgICAgfVxuICAgICAgb2JqID0gXy5pc0Z1bmN0aW9uKHByb3ApID8gcHJvcC5jYWxsKG9iaikgOiBwcm9wO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGludGVnZXIgaWQgKHVuaXF1ZSB3aXRoaW4gdGhlIGVudGlyZSBjbGllbnQgc2Vzc2lvbikuXG4gIC8vIFVzZWZ1bCBmb3IgdGVtcG9yYXJ5IERPTSBpZHMuXG4gIHZhciBpZENvdW50ZXIgPSAwO1xuICBfLnVuaXF1ZUlkID0gZnVuY3Rpb24ocHJlZml4KSB7XG4gICAgdmFyIGlkID0gKytpZENvdW50ZXIgKyAnJztcbiAgICByZXR1cm4gcHJlZml4ID8gcHJlZml4ICsgaWQgOiBpZDtcbiAgfTtcblxuICAvLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRlbGltaXRlcnMsIGNoYW5nZSB0aGVcbiAgLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICBfLnRlbXBsYXRlU2V0dGluZ3MgPSB7XG4gICAgZXZhbHVhdGU6IC88JShbXFxzXFxTXSs/KSU+L2csXG4gICAgaW50ZXJwb2xhdGU6IC88JT0oW1xcc1xcU10rPyklPi9nLFxuICAgIGVzY2FwZTogLzwlLShbXFxzXFxTXSs/KSU+L2dcbiAgfTtcblxuICAvLyBXaGVuIGN1c3RvbWl6aW5nIGB0ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuXG4gIC8vIGludGVycG9sYXRpb24sIGV2YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25lIHRoYXQgaXNcbiAgLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2guXG4gIHZhciBub01hdGNoID0gLyguKV4vO1xuXG4gIC8vIENlcnRhaW4gY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28gdGhhdCB0aGV5IGNhbiBiZSBwdXQgaW50byBhXG4gIC8vIHN0cmluZyBsaXRlcmFsLlxuICB2YXIgZXNjYXBlcyA9IHtcbiAgICBcIidcIjogXCInXCIsXG4gICAgJ1xcXFwnOiAnXFxcXCcsXG4gICAgJ1xccic6ICdyJyxcbiAgICAnXFxuJzogJ24nLFxuICAgICdcXHUyMDI4JzogJ3UyMDI4JyxcbiAgICAnXFx1MjAyOSc6ICd1MjAyOSdcbiAgfTtcblxuICB2YXIgZXNjYXBlUmVnRXhwID0gL1xcXFx8J3xcXHJ8XFxufFxcdTIwMjh8XFx1MjAyOS9nO1xuXG4gIHZhciBlc2NhcGVDaGFyID0gZnVuY3Rpb24obWF0Y2gpIHtcbiAgICByZXR1cm4gJ1xcXFwnICsgZXNjYXBlc1ttYXRjaF07XG4gIH07XG5cbiAgLy8gSmF2YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi5cbiAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLFxuICAvLyBhbmQgY29ycmVjdGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS5cbiAgLy8gTkI6IGBvbGRTZXR0aW5nc2Agb25seSBleGlzdHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICBfLnRlbXBsYXRlID0gZnVuY3Rpb24odGV4dCwgc2V0dGluZ3MsIG9sZFNldHRpbmdzKSB7XG4gICAgaWYgKCFzZXR0aW5ncyAmJiBvbGRTZXR0aW5ncykgc2V0dGluZ3MgPSBvbGRTZXR0aW5ncztcbiAgICBzZXR0aW5ncyA9IF8uZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfLnRlbXBsYXRlU2V0dGluZ3MpO1xuXG4gICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uXG4gICAgdmFyIG1hdGNoZXIgPSBSZWdFeHAoW1xuICAgICAgKHNldHRpbmdzLmVzY2FwZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmV2YWx1YXRlIHx8IG5vTWF0Y2gpLnNvdXJjZVxuICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTtcblxuICAgIC8vIENvbXBpbGUgdGhlIHRlbXBsYXRlIHNvdXJjZSwgZXNjYXBpbmcgc3RyaW5nIGxpdGVyYWxzIGFwcHJvcHJpYXRlbHkuXG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgc291cmNlID0gXCJfX3ArPSdcIjtcbiAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHtcbiAgICAgIHNvdXJjZSArPSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UoZXNjYXBlUmVnRXhwLCBlc2NhcGVDaGFyKTtcbiAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4gICAgICBpZiAoZXNjYXBlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgZXNjYXBlICsgXCIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcXG4nXCI7XG4gICAgICB9IGVsc2UgaWYgKGludGVycG9sYXRlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgaW50ZXJwb2xhdGUgKyBcIikpPT1udWxsPycnOl9fdCkrXFxuJ1wiO1xuICAgICAgfSBlbHNlIGlmIChldmFsdWF0ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInO1xcblwiICsgZXZhbHVhdGUgKyBcIlxcbl9fcCs9J1wiO1xuICAgICAgfVxuXG4gICAgICAvLyBBZG9iZSBWTXMgbmVlZCB0aGUgbWF0Y2ggcmV0dXJuZWQgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBvZmZzZXQuXG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfSk7XG4gICAgc291cmNlICs9IFwiJztcXG5cIjtcblxuICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuXG4gICAgaWYgKCFzZXR0aW5ncy52YXJpYWJsZSkgc291cmNlID0gJ3dpdGgob2JqfHx7fSl7XFxuJyArIHNvdXJjZSArICd9XFxuJztcblxuICAgIHNvdXJjZSA9IFwidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLFwiICtcbiAgICAgIFwicHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcXG5cIiArXG4gICAgICBzb3VyY2UgKyAncmV0dXJuIF9fcDtcXG4nO1xuXG4gICAgdmFyIHJlbmRlcjtcbiAgICB0cnkge1xuICAgICAgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBfKTtcbiAgICB9O1xuXG4gICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLlxuICAgIHZhciBhcmd1bWVudCA9IHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonO1xuICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsgYXJndW1lbnQgKyAnKXtcXG4nICsgc291cmNlICsgJ30nO1xuXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9O1xuXG4gIC8vIEFkZCBhIFwiY2hhaW5cIiBmdW5jdGlvbi4gU3RhcnQgY2hhaW5pbmcgYSB3cmFwcGVkIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLmNoYWluID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGluc3RhbmNlID0gXyhvYmopO1xuICAgIGluc3RhbmNlLl9jaGFpbiA9IHRydWU7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xuXG4gIC8vIE9PUFxuICAvLyAtLS0tLS0tLS0tLS0tLS1cbiAgLy8gSWYgVW5kZXJzY29yZSBpcyBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgaXQgcmV0dXJucyBhIHdyYXBwZWQgb2JqZWN0IHRoYXRcbiAgLy8gY2FuIGJlIHVzZWQgT08tc3R5bGUuIFRoaXMgd3JhcHBlciBob2xkcyBhbHRlcmVkIHZlcnNpb25zIG9mIGFsbCB0aGVcbiAgLy8gdW5kZXJzY29yZSBmdW5jdGlvbnMuIFdyYXBwZWQgb2JqZWN0cyBtYXkgYmUgY2hhaW5lZC5cblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29udGludWUgY2hhaW5pbmcgaW50ZXJtZWRpYXRlIHJlc3VsdHMuXG4gIHZhciBjaGFpblJlc3VsdCA9IGZ1bmN0aW9uKGluc3RhbmNlLCBvYmopIHtcbiAgICByZXR1cm4gaW5zdGFuY2UuX2NoYWluID8gXyhvYmopLmNoYWluKCkgOiBvYmo7XG4gIH07XG5cbiAgLy8gQWRkIHlvdXIgb3duIGN1c3RvbSBmdW5jdGlvbnMgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLm1peGluID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgXy5lYWNoKF8uZnVuY3Rpb25zKG9iaiksIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHZhciBmdW5jID0gX1tuYW1lXSA9IG9ialtuYW1lXTtcbiAgICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gW3RoaXMuX3dyYXBwZWRdO1xuICAgICAgICBwdXNoLmFwcGx5KGFyZ3MsIGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBmdW5jLmFwcGx5KF8sIGFyZ3MpKTtcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIF87XG4gIH07XG5cbiAgLy8gQWRkIGFsbCBvZiB0aGUgVW5kZXJzY29yZSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIgb2JqZWN0LlxuICBfLm1peGluKF8pO1xuXG4gIC8vIEFkZCBhbGwgbXV0YXRvciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIF8uZWFjaChbJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvYmogPSB0aGlzLl93cmFwcGVkO1xuICAgICAgbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRzKTtcbiAgICAgIGlmICgobmFtZSA9PT0gJ3NoaWZ0JyB8fCBuYW1lID09PSAnc3BsaWNlJykgJiYgb2JqLmxlbmd0aCA9PT0gMCkgZGVsZXRlIG9ialswXTtcbiAgICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBvYmopO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIEFkZCBhbGwgYWNjZXNzb3IgQXJyYXkgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLlxuICBfLmVhY2goWydjb25jYXQnLCAnam9pbicsICdzbGljZSddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBtZXRob2QuYXBwbHkodGhpcy5fd3JhcHBlZCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRXh0cmFjdHMgdGhlIHJlc3VsdCBmcm9tIGEgd3JhcHBlZCBhbmQgY2hhaW5lZCBvYmplY3QuXG4gIF8ucHJvdG90eXBlLnZhbHVlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyYXBwZWQ7XG4gIH07XG5cbiAgLy8gUHJvdmlkZSB1bndyYXBwaW5nIHByb3h5IGZvciBzb21lIG1ldGhvZHMgdXNlZCBpbiBlbmdpbmUgb3BlcmF0aW9uc1xuICAvLyBzdWNoIGFzIGFyaXRobWV0aWMgYW5kIEpTT04gc3RyaW5naWZpY2F0aW9uLlxuICBfLnByb3RvdHlwZS52YWx1ZU9mID0gXy5wcm90b3R5cGUudG9KU09OID0gXy5wcm90b3R5cGUudmFsdWU7XG5cbiAgXy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuX3dyYXBwZWQpO1xuICB9O1xuXG4gIC8vIEFNRCByZWdpc3RyYXRpb24gaGFwcGVucyBhdCB0aGUgZW5kIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQU1EIGxvYWRlcnNcbiAgLy8gdGhhdCBtYXkgbm90IGVuZm9yY2UgbmV4dC10dXJuIHNlbWFudGljcyBvbiBtb2R1bGVzLiBFdmVuIHRob3VnaCBnZW5lcmFsXG4gIC8vIHByYWN0aWNlIGZvciBBTUQgcmVnaXN0cmF0aW9uIGlzIHRvIGJlIGFub255bW91cywgdW5kZXJzY29yZSByZWdpc3RlcnNcbiAgLy8gYXMgYSBuYW1lZCBtb2R1bGUgYmVjYXVzZSwgbGlrZSBqUXVlcnksIGl0IGlzIGEgYmFzZSBsaWJyYXJ5IHRoYXQgaXNcbiAgLy8gcG9wdWxhciBlbm91Z2ggdG8gYmUgYnVuZGxlZCBpbiBhIHRoaXJkIHBhcnR5IGxpYiwgYnV0IG5vdCBiZSBwYXJ0IG9mXG4gIC8vIGFuIEFNRCBsb2FkIHJlcXVlc3QuIFRob3NlIGNhc2VzIGNvdWxkIGdlbmVyYXRlIGFuIGVycm9yIHdoZW4gYW5cbiAgLy8gYW5vbnltb3VzIGRlZmluZSgpIGlzIGNhbGxlZCBvdXRzaWRlIG9mIGEgbG9hZGVyIHJlcXVlc3QuXG4gIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZSgndW5kZXJzY29yZScsIFtdLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBfO1xuICAgIH0pO1xuICB9XG59KCkpO1xuIiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihtb2R1bGUpIHtcblx0aWYgKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XG5cdFx0bW9kdWxlLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKCkge307XG5cdFx0bW9kdWxlLnBhdGhzID0gW107XG5cdFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XG5cdFx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwibG9hZGVkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmw7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJpZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xuXHR9XG5cdHJldHVybiBtb2R1bGU7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgd2luZG93ID0gcmVxdWlyZShcImdsb2JhbC93aW5kb3dcIilcbnZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZShcImlzLWZ1bmN0aW9uXCIpXG52YXIgcGFyc2VIZWFkZXJzID0gcmVxdWlyZShcInBhcnNlLWhlYWRlcnNcIilcbnZhciB4dGVuZCA9IHJlcXVpcmUoXCJ4dGVuZFwiKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVhIUlxuLy8gQWxsb3cgdXNlIG9mIGRlZmF1bHQgaW1wb3J0IHN5bnRheCBpbiBUeXBlU2NyaXB0XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gY3JlYXRlWEhSO1xuY3JlYXRlWEhSLlhNTEh0dHBSZXF1ZXN0ID0gd2luZG93LlhNTEh0dHBSZXF1ZXN0IHx8IG5vb3BcbmNyZWF0ZVhIUi5YRG9tYWluUmVxdWVzdCA9IFwid2l0aENyZWRlbnRpYWxzXCIgaW4gKG5ldyBjcmVhdGVYSFIuWE1MSHR0cFJlcXVlc3QoKSkgPyBjcmVhdGVYSFIuWE1MSHR0cFJlcXVlc3QgOiB3aW5kb3cuWERvbWFpblJlcXVlc3RcblxuZm9yRWFjaEFycmF5KFtcImdldFwiLCBcInB1dFwiLCBcInBvc3RcIiwgXCJwYXRjaFwiLCBcImhlYWRcIiwgXCJkZWxldGVcIl0sIGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgIGNyZWF0ZVhIUlttZXRob2QgPT09IFwiZGVsZXRlXCIgPyBcImRlbFwiIDogbWV0aG9kXSA9IGZ1bmN0aW9uKHVyaSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRQYXJhbXModXJpLCBvcHRpb25zLCBjYWxsYmFjaylcbiAgICAgICAgb3B0aW9ucy5tZXRob2QgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuICAgICAgICByZXR1cm4gX2NyZWF0ZVhIUihvcHRpb25zKVxuICAgIH1cbn0pXG5cbmZ1bmN0aW9uIGZvckVhY2hBcnJheShhcnJheSwgaXRlcmF0b3IpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGFycmF5W2ldKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNFbXB0eShvYmope1xuICAgIGZvcih2YXIgaSBpbiBvYmope1xuICAgICAgICBpZihvYmouaGFzT3duUHJvcGVydHkoaSkpIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBpbml0UGFyYW1zKHVyaSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICB2YXIgcGFyYW1zID0gdXJpXG5cbiAgICBpZiAoaXNGdW5jdGlvbihvcHRpb25zKSkge1xuICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnNcbiAgICAgICAgaWYgKHR5cGVvZiB1cmkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IHt1cmk6dXJpfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW1zID0geHRlbmQob3B0aW9ucywge3VyaTogdXJpfSlcbiAgICB9XG5cbiAgICBwYXJhbXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHJldHVybiBwYXJhbXNcbn1cblxuZnVuY3Rpb24gY3JlYXRlWEhSKHVyaSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICBvcHRpb25zID0gaW5pdFBhcmFtcyh1cmksIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAgIHJldHVybiBfY3JlYXRlWEhSKG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVYSFIob3B0aW9ucykge1xuICAgIGlmKHR5cGVvZiBvcHRpb25zLmNhbGxiYWNrID09PSBcInVuZGVmaW5lZFwiKXtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2FsbGJhY2sgYXJndW1lbnQgbWlzc2luZ1wiKVxuICAgIH1cblxuICAgIHZhciBjYWxsZWQgPSBmYWxzZVxuICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uIGNiT25jZShlcnIsIHJlc3BvbnNlLCBib2R5KXtcbiAgICAgICAgaWYoIWNhbGxlZCl7XG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlXG4gICAgICAgICAgICBvcHRpb25zLmNhbGxiYWNrKGVyciwgcmVzcG9uc2UsIGJvZHkpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkeXN0YXRlY2hhbmdlKCkge1xuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQobG9hZEZ1bmMsIDApXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRCb2R5KCkge1xuICAgICAgICAvLyBDaHJvbWUgd2l0aCByZXF1ZXN0VHlwZT1ibG9iIHRocm93cyBlcnJvcnMgYXJyb3VuZCB3aGVuIGV2ZW4gdGVzdGluZyBhY2Nlc3MgdG8gcmVzcG9uc2VUZXh0XG4gICAgICAgIHZhciBib2R5ID0gdW5kZWZpbmVkXG5cbiAgICAgICAgaWYgKHhoci5yZXNwb25zZSkge1xuICAgICAgICAgICAgYm9keSA9IHhoci5yZXNwb25zZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYm9keSA9IHhoci5yZXNwb25zZVRleHQgfHwgZ2V0WG1sKHhocilcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0pzb24pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYm9keSA9IEpTT04ucGFyc2UoYm9keSlcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYm9keVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVycm9yRnVuYyhldnQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRUaW1lcilcbiAgICAgICAgaWYoIShldnQgaW5zdGFuY2VvZiBFcnJvcikpe1xuICAgICAgICAgICAgZXZ0ID0gbmV3IEVycm9yKFwiXCIgKyAoZXZ0IHx8IFwiVW5rbm93biBYTUxIdHRwUmVxdWVzdCBFcnJvclwiKSApXG4gICAgICAgIH1cbiAgICAgICAgZXZ0LnN0YXR1c0NvZGUgPSAwXG4gICAgICAgIHJldHVybiBjYWxsYmFjayhldnQsIGZhaWx1cmVSZXNwb25zZSlcbiAgICB9XG5cbiAgICAvLyB3aWxsIGxvYWQgdGhlIGRhdGEgJiBwcm9jZXNzIHRoZSByZXNwb25zZSBpbiBhIHNwZWNpYWwgcmVzcG9uc2Ugb2JqZWN0XG4gICAgZnVuY3Rpb24gbG9hZEZ1bmMoKSB7XG4gICAgICAgIGlmIChhYm9ydGVkKSByZXR1cm5cbiAgICAgICAgdmFyIHN0YXR1c1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dFRpbWVyKVxuICAgICAgICBpZihvcHRpb25zLnVzZVhEUiAmJiB4aHIuc3RhdHVzPT09dW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvL0lFOCBDT1JTIEdFVCBzdWNjZXNzZnVsIHJlc3BvbnNlIGRvZXNuJ3QgaGF2ZSBhIHN0YXR1cyBmaWVsZCwgYnV0IGJvZHkgaXMgZmluZVxuICAgICAgICAgICAgc3RhdHVzID0gMjAwXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0dXMgPSAoeGhyLnN0YXR1cyA9PT0gMTIyMyA/IDIwNCA6IHhoci5zdGF0dXMpXG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlc3BvbnNlID0gZmFpbHVyZVJlc3BvbnNlXG4gICAgICAgIHZhciBlcnIgPSBudWxsXG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gMCl7XG4gICAgICAgICAgICByZXNwb25zZSA9IHtcbiAgICAgICAgICAgICAgICBib2R5OiBnZXRCb2R5KCksXG4gICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogc3RhdHVzLFxuICAgICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgICAgICAgIHVybDogdXJpLFxuICAgICAgICAgICAgICAgIHJhd1JlcXVlc3Q6IHhoclxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycyl7IC8vcmVtZW1iZXIgeGhyIGNhbiBpbiBmYWN0IGJlIFhEUiBmb3IgQ09SUyBpbiBJRVxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBwYXJzZUhlYWRlcnMoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyID0gbmV3IEVycm9yKFwiSW50ZXJuYWwgWE1MSHR0cFJlcXVlc3QgRXJyb3JcIilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyLCByZXNwb25zZSwgcmVzcG9uc2UuYm9keSlcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gb3B0aW9ucy54aHIgfHwgbnVsbFxuXG4gICAgaWYgKCF4aHIpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuY29ycyB8fCBvcHRpb25zLnVzZVhEUikge1xuICAgICAgICAgICAgeGhyID0gbmV3IGNyZWF0ZVhIUi5YRG9tYWluUmVxdWVzdCgpXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgeGhyID0gbmV3IGNyZWF0ZVhIUi5YTUxIdHRwUmVxdWVzdCgpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5XG4gICAgdmFyIGFib3J0ZWRcbiAgICB2YXIgdXJpID0geGhyLnVybCA9IG9wdGlvbnMudXJpIHx8IG9wdGlvbnMudXJsXG4gICAgdmFyIG1ldGhvZCA9IHhoci5tZXRob2QgPSBvcHRpb25zLm1ldGhvZCB8fCBcIkdFVFwiXG4gICAgdmFyIGJvZHkgPSBvcHRpb25zLmJvZHkgfHwgb3B0aW9ucy5kYXRhXG4gICAgdmFyIGhlYWRlcnMgPSB4aHIuaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyB8fCB7fVxuICAgIHZhciBzeW5jID0gISFvcHRpb25zLnN5bmNcbiAgICB2YXIgaXNKc29uID0gZmFsc2VcbiAgICB2YXIgdGltZW91dFRpbWVyXG4gICAgdmFyIGZhaWx1cmVSZXNwb25zZSA9IHtcbiAgICAgICAgYm9keTogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgc3RhdHVzQ29kZTogMCxcbiAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgIHVybDogdXJpLFxuICAgICAgICByYXdSZXF1ZXN0OiB4aHJcbiAgICB9XG5cbiAgICBpZiAoXCJqc29uXCIgaW4gb3B0aW9ucyAmJiBvcHRpb25zLmpzb24gIT09IGZhbHNlKSB7XG4gICAgICAgIGlzSnNvbiA9IHRydWVcbiAgICAgICAgaGVhZGVyc1tcImFjY2VwdFwiXSB8fCBoZWFkZXJzW1wiQWNjZXB0XCJdIHx8IChoZWFkZXJzW1wiQWNjZXB0XCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCIpIC8vRG9uJ3Qgb3ZlcnJpZGUgZXhpc3RpbmcgYWNjZXB0IGhlYWRlciBkZWNsYXJlZCBieSB1c2VyXG4gICAgICAgIGlmIChtZXRob2QgIT09IFwiR0VUXCIgJiYgbWV0aG9kICE9PSBcIkhFQURcIikge1xuICAgICAgICAgICAgaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSB8fCBoZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdIHx8IChoZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCIpIC8vRG9uJ3Qgb3ZlcnJpZGUgZXhpc3RpbmcgYWNjZXB0IGhlYWRlciBkZWNsYXJlZCBieSB1c2VyXG4gICAgICAgICAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5qc29uID09PSB0cnVlID8gYm9keSA6IG9wdGlvbnMuanNvbilcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSByZWFkeXN0YXRlY2hhbmdlXG4gICAgeGhyLm9ubG9hZCA9IGxvYWRGdW5jXG4gICAgeGhyLm9uZXJyb3IgPSBlcnJvckZ1bmNcbiAgICAvLyBJRTkgbXVzdCBoYXZlIG9ucHJvZ3Jlc3MgYmUgc2V0IHRvIGEgdW5pcXVlIGZ1bmN0aW9uLlxuICAgIHhoci5vbnByb2dyZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBJRSBtdXN0IGRpZVxuICAgIH1cbiAgICB4aHIub25hYm9ydCA9IGZ1bmN0aW9uKCl7XG4gICAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICB4aHIub250aW1lb3V0ID0gZXJyb3JGdW5jXG4gICAgeGhyLm9wZW4obWV0aG9kLCB1cmksICFzeW5jLCBvcHRpb25zLnVzZXJuYW1lLCBvcHRpb25zLnBhc3N3b3JkKVxuICAgIC8vaGFzIHRvIGJlIGFmdGVyIG9wZW5cbiAgICBpZighc3luYykge1xuICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gISFvcHRpb25zLndpdGhDcmVkZW50aWFsc1xuICAgIH1cbiAgICAvLyBDYW5ub3Qgc2V0IHRpbWVvdXQgd2l0aCBzeW5jIHJlcXVlc3RcbiAgICAvLyBub3Qgc2V0dGluZyB0aW1lb3V0IG9uIHRoZSB4aHIgb2JqZWN0LCBiZWNhdXNlIG9mIG9sZCB3ZWJraXRzIGV0Yy4gbm90IGhhbmRsaW5nIHRoYXQgY29ycmVjdGx5XG4gICAgLy8gYm90aCBucG0ncyByZXF1ZXN0IGFuZCBqcXVlcnkgMS54IHVzZSB0aGlzIGtpbmQgb2YgdGltZW91dCwgc28gdGhpcyBpcyBiZWluZyBjb25zaXN0ZW50XG4gICAgaWYgKCFzeW5jICYmIG9wdGlvbnMudGltZW91dCA+IDAgKSB7XG4gICAgICAgIHRpbWVvdXRUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGlmIChhYm9ydGVkKSByZXR1cm5cbiAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlLy9JRTkgbWF5IHN0aWxsIGNhbGwgcmVhZHlzdGF0ZWNoYW5nZVxuICAgICAgICAgICAgeGhyLmFib3J0KFwidGltZW91dFwiKVxuICAgICAgICAgICAgdmFyIGUgPSBuZXcgRXJyb3IoXCJYTUxIdHRwUmVxdWVzdCB0aW1lb3V0XCIpXG4gICAgICAgICAgICBlLmNvZGUgPSBcIkVUSU1FRE9VVFwiXG4gICAgICAgICAgICBlcnJvckZ1bmMoZSlcbiAgICAgICAgfSwgb3B0aW9ucy50aW1lb3V0IClcbiAgICB9XG5cbiAgICBpZiAoeGhyLnNldFJlcXVlc3RIZWFkZXIpIHtcbiAgICAgICAgZm9yKGtleSBpbiBoZWFkZXJzKXtcbiAgICAgICAgICAgIGlmKGhlYWRlcnMuaGFzT3duUHJvcGVydHkoa2V5KSl7XG4gICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoa2V5LCBoZWFkZXJzW2tleV0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaGVhZGVycyAmJiAhaXNFbXB0eShvcHRpb25zLmhlYWRlcnMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkhlYWRlcnMgY2Fubm90IGJlIHNldCBvbiBhbiBYRG9tYWluUmVxdWVzdCBvYmplY3RcIilcbiAgICB9XG5cbiAgICBpZiAoXCJyZXNwb25zZVR5cGVcIiBpbiBvcHRpb25zKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBvcHRpb25zLnJlc3BvbnNlVHlwZVxuICAgIH1cblxuICAgIGlmIChcImJlZm9yZVNlbmRcIiBpbiBvcHRpb25zICYmXG4gICAgICAgIHR5cGVvZiBvcHRpb25zLmJlZm9yZVNlbmQgPT09IFwiZnVuY3Rpb25cIlxuICAgICkge1xuICAgICAgICBvcHRpb25zLmJlZm9yZVNlbmQoeGhyKVxuICAgIH1cblxuICAgIC8vIE1pY3Jvc29mdCBFZGdlIGJyb3dzZXIgc2VuZHMgXCJ1bmRlZmluZWRcIiB3aGVuIHNlbmQgaXMgY2FsbGVkIHdpdGggdW5kZWZpbmVkIHZhbHVlLlxuICAgIC8vIFhNTEh0dHBSZXF1ZXN0IHNwZWMgc2F5cyB0byBwYXNzIG51bGwgYXMgYm9keSB0byBpbmRpY2F0ZSBubyBib2R5XG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9uYXVndHVyL3hoci9pc3N1ZXMvMTAwLlxuICAgIHhoci5zZW5kKGJvZHkgfHwgbnVsbClcblxuICAgIHJldHVybiB4aHJcblxuXG59XG5cbmZ1bmN0aW9uIGdldFhtbCh4aHIpIHtcbiAgICAvLyB4aHIucmVzcG9uc2VYTUwgd2lsbCB0aHJvdyBFeGNlcHRpb24gXCJJbnZhbGlkU3RhdGVFcnJvclwiIG9yIFwiRE9NRXhjZXB0aW9uXCJcbiAgICAvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1hNTEh0dHBSZXF1ZXN0L3Jlc3BvbnNlWE1MLlxuICAgIHRyeSB7XG4gICAgICAgIGlmICh4aHIucmVzcG9uc2VUeXBlID09PSBcImRvY3VtZW50XCIpIHtcbiAgICAgICAgICAgIHJldHVybiB4aHIucmVzcG9uc2VYTUxcbiAgICAgICAgfVxuICAgICAgICB2YXIgZmlyZWZveEJ1Z1Rha2VuRWZmZWN0ID0geGhyLnJlc3BvbnNlWE1MICYmIHhoci5yZXNwb25zZVhNTC5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWUgPT09IFwicGFyc2VyZXJyb3JcIlxuICAgICAgICBpZiAoeGhyLnJlc3BvbnNlVHlwZSA9PT0gXCJcIiAmJiAhZmlyZWZveEJ1Z1Rha2VuRWZmZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4geGhyLnJlc3BvbnNlWE1MXG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7fVxuXG4gICAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gbm9vcCgpIHt9XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGV4dGVuZFxuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5mdW5jdGlvbiBleHRlbmQoKSB7XG4gICAgdmFyIHRhcmdldCA9IHt9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldXG5cbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldFxufVxuIiwiLyogKGlnbm9yZWQpICovIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file From 087cf98d4a5bcdfc2fddfe23076ea7953a301baa Mon Sep 17 00:00:00 2001 From: Bryan Rumsey Date: Thu, 30 Apr 2020 11:35:02 -0400 Subject: [PATCH 3/5] Added check to see if the original workflow timestamp exists before retreiving or removing it. --- stochss-pkg/handlers/util/duplicate.py | 8 +++++++- stochss-pkg/handlers/util/parameter_sweep.py | 7 ++++++- stochss-pkg/handlers/util/run_model.py | 7 ++++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/stochss-pkg/handlers/util/duplicate.py b/stochss-pkg/handlers/util/duplicate.py index bc930aa549..090412bcf7 100644 --- a/stochss-pkg/handlers/util/duplicate.py +++ b/stochss-pkg/handlers/util/duplicate.py @@ -161,7 +161,13 @@ def duplicate_wkfl_as_new(wkfl_path, only_model, time_stamp): resp = {"message":"A copy of the model in {0} has been created".format(wkfl_path),"mdlPath":model_path,"File":model_file} else: # Get base name for new workflow name (current workflow name - timestamp) - wkfl_base_name = '_'.join(full_path.split('/').pop().split('_')[:-2]) + wkfl_base_name = full_path.split('/').pop().split('.')[0] + try: + date, time = wkfl_base_name.split('_')[-2:] + if date.isDigit() and time.isDigit(): + wkfl_base_name = '_'.join(wkfl_base_name.split('_')[:-2]) + except: + pass # Make new workflow path in parent directory new_wkfl_dir = ''.join([wkfl_base_name, time_stamp, ".wkfl"]) new_wkfl_path = path.join(parent_dir, new_wkfl_dir) diff --git a/stochss-pkg/handlers/util/parameter_sweep.py b/stochss-pkg/handlers/util/parameter_sweep.py index ab0192e3cf..4b38a9a967 100755 --- a/stochss-pkg/handlers/util/parameter_sweep.py +++ b/stochss-pkg/handlers/util/parameter_sweep.py @@ -393,7 +393,12 @@ def __init__(self, wkfl_path, mdl_path): self.res_path = os.path.join(wkfl_path, 'results') wkfl_name_elements = wkfl_path.split('/').pop().split('.')[0].split('_') try: - self.wkfl_timestamp = '_'.join(["",wkfl_name_elements[-2],wkfl_name_elements[-1]]) + date = wkfl_name_elements[-2] + time = wkfl_name_elements[-1] + if date.isDigit() and time.isDigit(): + self.wkfl_timestamp = '_'.join(["",date,time]) + else: + self.wkfl_timestamp = None except: self.wkfl_timestamp = None diff --git a/stochss-pkg/handlers/util/run_model.py b/stochss-pkg/handlers/util/run_model.py index fe1cb69f7d..62a727b309 100755 --- a/stochss-pkg/handlers/util/run_model.py +++ b/stochss-pkg/handlers/util/run_model.py @@ -45,7 +45,12 @@ def __init__(self, wkfl_path, mdl_path): self.res_path = os.path.join(wkfl_path, 'results') wkfl_name_elements = wkfl_path.split('/').pop().split('.')[0].split('_') try: - self.wkfl_timestamp = '_'.join(["",wkfl_name_elements[-2],wkfl_name_elements[-1]]) + date = wkfl_name_elements[-2] + time = wkfl_name_elements[-1] + if date.isDigit() and time.isDigit(): + self.wkfl_timestamp = '_'.join(["",date,time]) + else: + self.wkfl_timestamp = None except: self.wkfl_timestamp = None From aa947bab74329e98dc5107d9b1faf08eef08735f Mon Sep 17 00:00:00 2001 From: Bryan Rumsey Date: Thu, 30 Apr 2020 12:40:44 -0400 Subject: [PATCH 4/5] Fixed bug with updating the workflow model path in the info file for workflows that have started and been moved. Added function to update the workflow model path if a workflow is renamed after it has started. Fixed bug with workflow timestamp check. --- stochss-pkg/handlers/file_browser.py | 26 +++++++++++++------- stochss-pkg/handlers/util/duplicate.py | 2 +- stochss-pkg/handlers/util/parameter_sweep.py | 5 ++-- stochss-pkg/handlers/util/rename.py | 11 ++++++++- stochss-pkg/handlers/util/run_model.py | 5 ++-- 5 files changed, 32 insertions(+), 17 deletions(-) diff --git a/stochss-pkg/handlers/file_browser.py b/stochss-pkg/handlers/file_browser.py index d3173ab8e2..07fe5c5184 100644 --- a/stochss-pkg/handlers/file_browser.py +++ b/stochss-pkg/handlers/file_browser.py @@ -135,23 +135,31 @@ async def get(self): ---------- ''' user_dir = "/home/jovyan" - old_path = os.path.join(user_dir, self.get_query_argument(name="srcPath")) - log.debug("Path to the file: {0}".format(old_path)) - new_path = os.path.join(user_dir, self.get_query_argument(name="dstPath")) - log.debug("Destination path: {0}".format(new_path)) + src_path = self.get_query_argument(name="srcPath") + log.debug("Path to the file: {0}".format(src_path)) + old_path = os.path.join(user_dir, src_path) + log.debug("Full path to the file: {0}".format(old_path)) + dst_path = self.get_query_argument(name="dstPath") + log.debug("Destination path: {0}".format(dst_path)) + new_path = os.path.join(user_dir, dst_path) + log.debug("Full destination path: {0}".format(new_path)) try: if os.path.isdir(old_path): - move(old_path, new_path) # If directory is wkfl and has been started, update wkfl model path - if old_path.endswith('.wkfl') and "RUNNING" in os.listdir(path=new_path): - old_parent_dir = os.path.dirname(old_path) - new_parent_dir = os.path.dirname(new_path) - with open(os.path.join(new_path, "info.json"), "r+") as info_file: + if old_path.endswith('.wkfl') and "RUNNING" in os.listdir(path=old_path): + old_parent_dir = os.path.dirname(src_path) + log.debug("Old parent directory: {0}".format(old_parent_dir)) + new_parent_dir = os.path.dirname(dst_path) + log.debug("New parent directory: {0}".format(new_parent_dir)) + with open(os.path.join(old_path, "info.json"), "r+") as info_file: info = json.load(info_file) + log.debug("Old wkfl info: {0}".format(info)) info['wkfl_model'] = info['wkfl_model'].replace(old_parent_dir, new_parent_dir) info_file.seek(0) + log.debug("New wkfl info: {0}".format(info)) json.dump(info, info_file) info_file.truncate() + move(old_path, new_path) else: os.rename(old_path, new_path) self.write("Success! {0} was moved to {1}.".format(old_path, new_path)) diff --git a/stochss-pkg/handlers/util/duplicate.py b/stochss-pkg/handlers/util/duplicate.py index 090412bcf7..dddd18242f 100644 --- a/stochss-pkg/handlers/util/duplicate.py +++ b/stochss-pkg/handlers/util/duplicate.py @@ -164,7 +164,7 @@ def duplicate_wkfl_as_new(wkfl_path, only_model, time_stamp): wkfl_base_name = full_path.split('/').pop().split('.')[0] try: date, time = wkfl_base_name.split('_')[-2:] - if date.isDigit() and time.isDigit(): + if date.isdigit() and time.isdigit(): wkfl_base_name = '_'.join(wkfl_base_name.split('_')[:-2]) except: pass diff --git a/stochss-pkg/handlers/util/parameter_sweep.py b/stochss-pkg/handlers/util/parameter_sweep.py index 4b38a9a967..edf7945b57 100755 --- a/stochss-pkg/handlers/util/parameter_sweep.py +++ b/stochss-pkg/handlers/util/parameter_sweep.py @@ -393,9 +393,8 @@ def __init__(self, wkfl_path, mdl_path): self.res_path = os.path.join(wkfl_path, 'results') wkfl_name_elements = wkfl_path.split('/').pop().split('.')[0].split('_') try: - date = wkfl_name_elements[-2] - time = wkfl_name_elements[-1] - if date.isDigit() and time.isDigit(): + date, time = wkfl_name_elements[-2:] + if date.isdigit() and time.isdigit(): self.wkfl_timestamp = '_'.join(["",date,time]) else: self.wkfl_timestamp = None diff --git a/stochss-pkg/handlers/util/rename.py b/stochss-pkg/handlers/util/rename.py index e61f1c64df..2e2ba38cb9 100644 --- a/stochss-pkg/handlers/util/rename.py +++ b/stochss-pkg/handlers/util/rename.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 import os +import json import shutil try: from .stochss_errors import StochSSFileNotFoundError, StochSSPermissionsError @@ -82,7 +83,15 @@ def rename(path, new_name): old_name = old_name.replace('/','') new_name = new_name.replace('/','') new_path = new_path.replace(user_dir + '/', '') - + + if path.endswith('.wkfl') and "RUNNING" in os.listdir(path=new_path): + with open(os.path.join(new_path, "info.json"), 'r+') as info_file: + info = json.load(info_file) + info['wkfl_model'] = info['wkfl_model'].replace(path, new_path) + info_file.seek(0) + json.dump(info, info_file) + info_file.truncate() + if changed: message = "A file already exists with that name, {0} was renamed to {1} in order to prevent a file from being overwriten.".format(old_path.split('/').pop(), new_name) else: diff --git a/stochss-pkg/handlers/util/run_model.py b/stochss-pkg/handlers/util/run_model.py index 62a727b309..e0f23aff27 100755 --- a/stochss-pkg/handlers/util/run_model.py +++ b/stochss-pkg/handlers/util/run_model.py @@ -45,9 +45,8 @@ def __init__(self, wkfl_path, mdl_path): self.res_path = os.path.join(wkfl_path, 'results') wkfl_name_elements = wkfl_path.split('/').pop().split('.')[0].split('_') try: - date = wkfl_name_elements[-2] - time = wkfl_name_elements[-1] - if date.isDigit() and time.isDigit(): + date, time = wkfl_name_elements[-2:] + if date.isdigit() and time.isdigit(): self.wkfl_timestamp = '_'.join(["",date,time]) else: self.wkfl_timestamp = None From 465c1430cef3cb2b4eb7feb4946cf43e77c8bf0b Mon Sep 17 00:00:00 2001 From: Bryan Rumsey Date: Thu, 30 Apr 2020 13:17:15 -0400 Subject: [PATCH 5/5] Added checks to disable move and rename option for workflows that are currently running. --- client/models/simulation-settings.js | 1 - client/pages/file-browser.js | 7 +++++-- stochss-pkg/dist/stochss-common.bundle.js | 3 +-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/client/models/simulation-settings.js b/client/models/simulation-settings.js index 373f736b82..5c47d5d699 100644 --- a/client/models/simulation-settings.js +++ b/client/models/simulation-settings.js @@ -19,7 +19,6 @@ module.exports = State.extend({ if(defaultMode === "dynamic"){ var species = this.parent.species var discreteSpecies = species.filter(function (specie) { - console.log(specie.mode) if(specie.mode === "discrete") return specie }); diff --git a/client/pages/file-browser.js b/client/pages/file-browser.js index 27eb022e87..f7a2f3dbb3 100644 --- a/client/pages/file-browser.js +++ b/client/pages/file-browser.js @@ -38,6 +38,9 @@ let treeSettings = { 'multiple' : false, 'animation': 0, 'check_callback': function (op, node, par, pos, more) { + if(op === 'move_node' && node && node.type && node.type === "workflow" && node.original && node.original._status && node.original._status === "running"){ + return false + } if(op === 'move_node' && more && more.ref && more.ref.type && !(more.ref.type == 'folder' || more.ref.type == 'root')){ return false } @@ -63,7 +66,7 @@ let treeSettings = { return false } if(op === 'move_node' && more && more.core) { - var newDir = par.original._path + var newDir = par.type !== "root" ? par.original._path : "" var file = node.original._path.split('/').pop() var oldPath = node.original._path let queryStr = "?srcPath="+oldPath+"&dstPath="+path.join(newDir, file) @@ -616,7 +619,7 @@ let FileBrowser = PageView.extend({ }, "Rename" : { "label" : "Rename", - "_disabled" : false, + "_disabled" : (o.type === "workflow" && o.original._status === "running"), "separator_before" : false, "separator_after" : false, "action" : function (data) { diff --git a/stochss-pkg/dist/stochss-common.bundle.js b/stochss-pkg/dist/stochss-common.bundle.js index 611d4b6238..461a6b6e7f 100644 --- a/stochss-pkg/dist/stochss-common.bundle.js +++ b/stochss-pkg/dist/stochss-common.bundle.js @@ -1118,7 +1118,6 @@ module.exports = State.extend({ if(defaultMode === "dynamic"){ var species = this.parent.species var discreteSpecies = species.filter(function (specie) { - console.log(specie.mode) if(specie.mode === "discrete") return specie }); @@ -57955,4 +57954,4 @@ function extend() { /***/ }) }]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvYXBwLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9saWIvcGxvdGx5LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RhbHMuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9ldmVudC1hc3NpZ25tZW50LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvZXZlbnQtYXNzaWdubWVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9ldmVudC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbW9kZWxzL2V2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbW9kZWxzL2Z1bmN0aW9uLWRlZmluaXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9mdW5jdGlvbi1kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbW9kZWxzL2luaXRpYWwtY29uZGl0aW9uLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvaW5pdGlhbC1jb25kaXRpb25zLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvbWVzaC1zZXR0aW5ncy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbW9kZWxzL21vZGVsLXNldHRpbmdzLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvbW9kZWwuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9wYXJhbWV0ZXItc3dlZXAtc2V0dGluZ3MuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9wYXJhbWV0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9wYXJhbWV0ZXJzLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvcmVhY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9yZWFjdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9ydWxlLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvcnVsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9zaW11bGF0aW9uLXNldHRpbmdzLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvc3BlY2llLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvc3BlY2llcy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbW9kZWxzL3N0b2ljaC1zcGVjaWUuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9zdG9pY2gtc3BlY2llcy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbW9kZWxzL3N1YmRvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbW9kZWxzL3N1YmRvbWFpbnMuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3BhZ2UtaGVscC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvcGFnZXMvYmFzZS5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvcGFnZXMvcGFnZS5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc3R5bGVzL2Jvb3RzdHJhcC5jc3M/MmM5OSIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc3R5bGVzL3N0eWxlcy5jc3M/OGU4OCIsIndlYnBhY2s6Ly8vLi9jbGllbnQvdGVtcGxhdGVzL3BhZ2VzL2hvbWUucHVnIiwid2VicGFjazovLy8uL2NsaWVudC90b29sdGlwcy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvdmlld3MvaW5wdXQuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3ZpZXdzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3ZpZXdzL3Rlc3RzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtZnJlZS9jc3Mvc3ZnLXdpdGgtanMubWluLmNzcz82NWJiIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hbXBlcnNhbmQtYXBwL2FtcGVyc2FuZC1hcHAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FtcGVyc2FuZC1jbGFzcy1leHRlbmQvYW1wZXJzYW5kLWNsYXNzLWV4dGVuZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLWNvbGxlY3Rpb24tdmlldy9hbXBlcnNhbmQtY29sbGVjdGlvbi12aWV3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hbXBlcnNhbmQtY29sbGVjdGlvbi9hbXBlcnNhbmQtY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLWRvbS1iaW5kaW5ncy9hbXBlcnNhbmQtZG9tLWJpbmRpbmdzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hbXBlcnNhbmQtZG9tL2FtcGVyc2FuZC1kb20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FtcGVyc2FuZC1ldmVudHMvYW1wZXJzYW5kLWV2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLWV2ZW50cy9saWJzL3V0aWxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hbXBlcnNhbmQtaW5wdXQtdmlldy9hbXBlcnNhbmQtaW5wdXQtdmlldy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLW1vZGVsL2FtcGVyc2FuZC1tb2RlbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLXNlbGVjdC12aWV3L2FtcGVyc2FuZC1zZWxlY3Qtdmlldy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLXN0YXRlL2FtcGVyc2FuZC1zdGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLXN5bmMvYW1wZXJzYW5kLXN5bmMtYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLXN5bmMvY29yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLXZpZXctc3dpdGNoZXIvYW1wZXJzYW5kLXZpZXctc3dpdGNoZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FtcGVyc2FuZC12aWV3L2FtcGVyc2FuZC12aWV3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hcnJheS1uZXh0L2FycmF5LW5leHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9kaXN0L2pzL2Jvb3RzdHJhcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xvc2VzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xvc2VzdC9ub2RlX21vZHVsZXMvbWF0Y2hlcy1zZWxlY3Rvci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29tcG9uZW50LWV2ZW50L2luZGV4LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9zdHlsZXMvYm9vdHN0cmFwLmNzcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc3R5bGVzL3N0eWxlcy5jc3MiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1mcmVlL2Nzcy9zdmctd2l0aC1qcy5taW4uY3NzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RlZmluZS1wcm9wZXJ0aWVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZWxlZ2F0ZS1ldmVudHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RvbWlmeS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZG9tcmVhZHkvcmVhZHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvZXM1LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL2Fzc2VydFJlY29yZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc05hTi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9tb2QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtdG8tcHJpbWl0aXZlL2VzNS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtdG8tcHJpbWl0aXZlL2hlbHBlcnMvaXNQcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2V2ZW50cy1taXhpbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZm9yLWVhY2gvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW1wbGVtZW50YXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2dsb2JhbC93aW5kb3cuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2lzLWNhbGxhYmxlL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pcy1mdW5jdGlvbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvanF1ZXJ5L2Rpc3QvanF1ZXJ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9rYXRleC9kaXN0L2thdGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9rZXktdHJlZS1zdG9yZS9rZXktdHJlZS1zdG9yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9jYWwtbGlua3MvbG9jYWwtbGlua3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fRGF0YVZpZXcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fSGFzaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MYXp5V3JhcHBlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MaXN0Q2FjaGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTG9kYXNoV3JhcHBlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwQ2FjaGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fUHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0Q2FjaGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3RhY2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1VpbnQ4QXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fV2Vha01hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlGaWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlJbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUluY2x1ZGVzV2l0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUxpa2VLZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5UHVzaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVNvbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNjaWlUb0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc2lnblZhbHVlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc29jSW5kZXhPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25Jbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduVmFsdWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUNsb25lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZURpZmZlcmVuY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZpbmRJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRmxhdHRlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRm9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGb3JPd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0QWxsS2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VIYXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUhhc0luLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJbmRleE9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJbnZva2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzQXJndW1lbnRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0RhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzRXF1YWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzRXF1YWxEZWVwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc01hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNNYXRjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYU4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1NldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJdGVyYXRlZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VMb2Rhc2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1hdGNoZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1hdGNoZXNQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUGljay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUGlja0J5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUHJvcGVydHlEZWVwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VQcm9wZXJ0eU9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VSZXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldERhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTbGljZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVGltZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5pcS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5zZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYWNoZUhhcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYXN0RnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FzdFBhdGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVBcnJheUJ1ZmZlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUJ1ZmZlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZURhdGFWaWV3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lUmVnRXhwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lU3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lVHlwZWRBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb21wb3NlQXJncy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb21wb3NlQXJnc1JpZ2h0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcHlBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5T2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcHlTeW1ib2xzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcHlTeW1ib2xzSW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29yZUpzRGF0YS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3VudEhvbGRlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQXNzaWduZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQmFzZUVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQmFzZUZvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQ3VycnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlRmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVIeWJyaWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlUGFydGlhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVSZWN1cnJ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZVNldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVXcmFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2N1c3RvbU9taXRDbG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbEFycmF5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbEJ5VGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2VxdWFsT2JqZWN0cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lc2NhcGVIdG1sQ2hhci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mbGF0UmVzdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0QWxsS2V5c0luLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldERhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0RnVuY05hbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0SG9sZGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hcERhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWF0Y2hEYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE5hdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRQcm90b3R5cGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0U3ltYm9sc0luLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFRhZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRWYWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRXcmFwRGV0YWlscy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNQYXRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc1VuaWNvZGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaENsZWFyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hEZWxldGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEdldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoSGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hTZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lQnlUYWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2luc2VydFdyYXBEZXRhaWxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzRmxhdHRlbmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0l0ZXJhdGVlQ2FsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNMYXppYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc01hc2tlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1Byb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1N0cmljdENvbXBhcmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXRlcmF0b3JUb0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUNsZWFyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlRGVsZXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlR2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlSGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlU2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWVtb2l6ZUNhcHBlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tZXJnZURhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWV0YU1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVDcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlS2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzSW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbm9kZVV0aWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb2JqZWN0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyUmVzdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19wYXJlbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcmVhbE5hbWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jlb3JkZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcmVwbGFjZUhvbGRlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcm9vdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUFkZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUhhcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXREYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0V3JhcFRvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Nob3J0T3V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrQ2xlYXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tEZWxldGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tHZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tIYXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tTZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RyaWN0SW5kZXhPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdHJpbmdUb0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1RvUGF0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b1NvdXJjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL191bmljb2RlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL191cGRhdGVXcmFwRGV0YWlscy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL193cmFwcGVyQ2xvbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9iZWZvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvY2xvbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9jb25zdGFudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2RlZmF1bHRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZGlmZmVyZW5jZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VxLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXNjYXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2ZpbmRJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2ZsYXR0ZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9mb3JFYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZm9yT3duLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZ2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaGFzSW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2luY2x1ZGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaW52b2tlTWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZU9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQnVmZmVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNEYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNFbXB0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRXF1YWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc01hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNQbGFpbk9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzVHlwZWRBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzSW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9sYXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbWVtb2l6ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL25vb3AuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9vbWl0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvb25jZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL3BhcnRpYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9waWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9yZXN1bHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViRmFsc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9GaW5pdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b0ludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b051bWJlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdW5pb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC91bmlxdWVJZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL3ZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL3dyYXBwZXJMb2Rhc2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21hdGNoZXMtc2VsZWN0b3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21lZGlhLXR5cGUvbGliL21lZGlhVHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbm9kZS1saWJzLWJyb3dzZXIvbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL29iamVjdC1rZXlzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGFyc2UtaGVhZGVycy9wYXJzZS1oZWFkZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3BvcHBlci5qcy9kaXN0L2VzbS9wb3BwZXIuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3RlbXBsYXRlcy9ib2R5LnB1ZyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvdGVtcGxhdGVzL2hlYWQucHVnIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wdWctcnVudGltZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcXMvbGliL2Zvcm1hdHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3FzL2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcXMvbGliL3BhcnNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9xcy9saWIvc3RyaW5naWZ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9xcy9saWIvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUudHJpbS9pbXBsZW1lbnRhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS50cmltL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zdHJpbmcucHJvdG90eXBlLnRyaW0vcG9seWZpbGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUudHJpbS9zaGltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi91cmxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL3VuZGVyc2NvcmUuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vbW9kdWxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy94aHIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3h0ZW5kL2ltbXV0YWJsZS5qcyIsIndlYnBhY2s6Ly8vZnMgKGlnbm9yZWQpIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0EsV0FBVyxtQkFBTyxDQUFDLHFEQUFNOztBQUV6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxHQUFHLElBQW9ELG9CQUFvQixLQUFLLEVBQStLLENBQUMsWUFBWSxrQkFBa0IseUJBQXlCLGdCQUFnQixVQUFVLFVBQVUsMENBQTBDLGdCQUFnQixPQUFDLE9BQU8sb0JBQW9CLDhDQUE4QyxrQ0FBa0MsWUFBWSxZQUFZLG1DQUFtQyx3QkFBd0Isc0JBQXNCLG9CQUFvQixrREFBa0QsV0FBVyxZQUFZLFVBQVUsSUFBSSxtQkFBbUIsYUFBYSx5QkFBeUIseUJBQXlCLG9EQUFvRCxTQUFTLFVBQVUsMEVBQTBFLCtDQUErQyw4QkFBOEIsb0NBQW9DLHlDQUF5QyxrREFBa0Qsc0JBQXNCLHFCQUFxQixvQkFBb0IsaUJBQWlCLDJCQUEyQiwwQkFBMEIsZ0NBQWdDLG1DQUFtQyxNQUFNLE9BQU8sb0JBQW9CLCtDQUErQyxzQ0FBc0Msc0NBQXNDLDBDQUEwQyxnQ0FBZ0MsNENBQTRDLDRDQUE0QywwQ0FBMEMsMENBQTBDLDBDQUEwQyx3Q0FBd0MsMENBQTBDLHdDQUF3Qyx3Q0FBd0MsMENBQTBDLHdDQUF3QywwQ0FBMEMsd0NBQXdDLFlBQVksa0NBQWtDLFFBQVEsVUFBVSxpRUFBaUUsOENBQThDLDZDQUE2Qyw0Q0FBNEMseUNBQXlDLGtEQUFrRCx3Q0FBd0MscUNBQXFDLG9DQUFvQyxtQ0FBbUMsZ0NBQWdDLHNEQUFzRCxpQ0FBaUMscUJBQXFCLHNCQUFzQixpQkFBaUIsa0JBQWtCLHNCQUFzQixtQkFBbUIsc0NBQXNDLGVBQWUsZ0JBQWdCLFlBQVksZUFBZSxtQkFBbUIsc0JBQXNCLDBDQUEwQyxRQUFRLHNDQUFzQyxzQkFBc0IsZUFBZSx1QkFBdUIsZ0JBQWdCLHNDQUFzQyxzREFBc0QsV0FBVyxpQkFBaUIsbUJBQW1CLG1FQUFtRSxrQkFBa0Isa0VBQWtFLHVDQUF1QyxvQ0FBb0MsbUNBQW1DLGtDQUFrQywrQkFBK0IsYUFBYSxVQUFVLGFBQWEsb0JBQW9CLFNBQVMsVUFBVSwwRUFBMEUsVUFBVSxzQ0FBc0Msa0JBQWtCLHVCQUF1Qiw2QkFBNkIsYUFBYSxpQkFBaUIsNEJBQTRCLGtCQUFrQixtREFBbUQsbUJBQW1CLFlBQVksaUJBQWlCLGVBQWUsaUJBQWlCLG1CQUFtQixtQkFBbUIsa0JBQWtCLDJFQUEyRSxXQUFXLGtFQUFrRSwwQkFBMEIsZUFBZSxtQkFBbUIsaUNBQWlDLGVBQWUsMkJBQTJCLHNDQUFzQyxzQ0FBc0MseUJBQXlCLDZCQUE2QixlQUFlLFNBQVMsV0FBVyxjQUFjLGVBQWUsZ0JBQWdCLGtCQUFrQixzQ0FBc0MsZ0JBQWdCLHNCQUFzQixhQUFhLFNBQVMseUJBQXlCLHVDQUF1QyxXQUFXLGFBQWEseUJBQXlCLHFCQUFxQixpQkFBaUIscUJBQXFCLGFBQWEsa0NBQWtDLFlBQVksWUFBWSxjQUFjLGdCQUFnQixZQUFZLGVBQWUsaUJBQWlCLGlCQUFpQix3Q0FBd0MscUJBQXFCLGVBQWUsR0FBRyxnQkFBZ0Isb0dBQW9HLHdCQUF3QixFQUFFLGlCQUFpQixxQkFBcUIsYUFBYSxXQUFXLE1BQU0scVpBQXFaLE9BQU8sd1hBQXdYLGlCQUFpQixpZkFBaWYsVUFBVSx5UUFBeVEsTUFBTSwyT0FBMk8sWUFBWSxrTEFBa0wsYUFBYSxrSUFBa0ksWUFBWSxvZUFBb2UsZ0JBQWdCLHNIQUFzSCxrQkFBa0Isc0tBQXNLLGFBQWEsbVFBQW1RLFdBQVcscWdCQUFxZ0IsY0FBYyxpa0JBQWlrQixTQUFTLDBoQkFBMGhCLFFBQVEsa2hCQUFraEIsV0FBVywwZkFBMGYsT0FBTyxzZEFBc2QsUUFBUSxtbUJBQW1tQixZQUFZLHdjQUF3YyxZQUFZLDhQQUE4UCxnQkFBZ0IsNkdBQTZHLGVBQWUsU0FBUyxlQUFlLFNBQVMsWUFBWSx1dUJBQXV1QixHQUFHLHFCQUFxQixhQUFhLDJDQUEyQyxFQUFFLG1DQUFtQyxxQkFBcUIsYUFBYSxpQ0FBaUMsRUFBRSx3QkFBd0IscUJBQXFCLGFBQWEsc0NBQXNDLEVBQUUsNkJBQTZCLHFCQUFxQixhQUFhLGlDQUFpQyxFQUFFLHdCQUF3QixxQkFBcUIsYUFBYSwyQ0FBMkMsRUFBRSxrQ0FBa0MscUJBQXFCLGFBQWEseUNBQXlDLEVBQUUsZ0NBQWdDLHFCQUFxQixhQUFhLG9DQUFvQyxFQUFFLDJCQUEyQixzQkFBc0IsYUFBYSx3Q0FBd0MsRUFBRSwrQkFBK0Isc0JBQXNCLGFBQWEsa0NBQWtDLEVBQUUseUJBQXlCLHNCQUFzQixhQUFhLHFDQUFxQyxFQUFFLDRCQUE0QixzQkFBc0IsYUFBYSwyQ0FBMkMsRUFBRSxrQ0FBa0Msc0JBQXNCLGFBQWEsMkJBQTJCLEVBQUUsa0JBQWtCLHNCQUFzQixhQUFhLHdDQUF3QyxFQUFFLGdDQUFnQyxzQkFBc0IsYUFBYSx5Q0FBeUMsRUFBRSxpQ0FBaUMsc0JBQXNCLGFBQWEscUNBQXFDLEVBQUUsNEJBQTRCLHNCQUFzQixhQUFhLHVDQUF1QyxFQUFFLDhCQUE4QixzQkFBc0IsYUFBYSx1Q0FBdUMsRUFBRSw4QkFBOEIsc0JBQXNCLGFBQWEseUNBQXlDLEVBQUUsZ0NBQWdDLHNCQUFzQixhQUFhLGdEQUFnRCxFQUFFLHVDQUF1QyxzQkFBc0IsYUFBYSxrQkFBa0IscXZCQUFxdkIsRUFBRSxvc0JBQW9zQixzQkFBc0IsYUFBYSx3Q0FBd0MsRUFBRSwrQkFBK0Isc0JBQXNCLGFBQWEsb0NBQW9DLEVBQUUsMkJBQTJCLHNCQUFzQixhQUFhLGtDQUFrQyxFQUFFLDBCQUEwQixzQkFBc0IsYUFBYSxxQ0FBcUMsRUFBRSw2QkFBNkIsc0JBQXNCLGFBQWEsdUNBQXVDLEVBQUUsK0JBQStCLHNCQUFzQixhQUFhLGlDQUFpQyxFQUFFLHlCQUF5QixzQkFBc0IsYUFBYSx3Q0FBd0MsRUFBRSxnQ0FBZ0Msc0JBQXNCLGFBQWEsb0NBQW9DLEVBQUUsNEJBQTRCLHNCQUFzQixhQUFhLHVDQUF1QyxFQUFFLCtCQUErQixzQkFBc0IsYUFBYSwyQ0FBMkMsRUFBRSxtQ0FBbUMsc0JBQXNCLGFBQWEsd0NBQXdDLEVBQUUsZ0NBQWdDLHNCQUFzQixhQUFhLHVDQUF1QyxFQUFFLCtCQUErQixzQkFBc0IsYUFBYSwyQ0FBMkMsRUFBRSxtQ0FBbUMsc0JBQXNCLGFBQWEsMENBQTBDLEVBQUUsa0NBQWtDLHNCQUFzQixhQUFhLDRDQUE0QyxFQUFFLG9DQUFvQyxzQkFBc0IsYUFBYSw0Q0FBNEMsRUFBRSxvQ0FBb0Msc0JBQXNCLGFBQWEsc0NBQXNDLEVBQUUsOEJBQThCLHNCQUFzQixhQUFhLG1DQUFtQyxFQUFFLDJCQUEyQixzQkFBc0IsYUFBYSx3Q0FBd0MsRUFBRSxnQ0FBZ0Msc0JBQXNCLGFBQWEsc0NBQXNDLEVBQUUsOEJBQThCLHNCQUFzQixhQUFhLHFDQUFxQyxFQUFFLDZCQUE2QixzQkFBc0IsYUFBYSxtQ0FBbUMsRUFBRSwyQkFBMkIsc0JBQXNCLGFBQWEsb0NBQW9DLEVBQUUsNEJBQTRCLHNCQUFzQixhQUFhLG9DQUFvQyxFQUFFLDRCQUE0QixzQkFBc0IsYUFBYSx1Q0FBdUMsRUFBRSwrQkFBK0Isc0JBQXNCLGFBQWEsc0JBQXNCLGNBQWMsdUhBQXVILGlLQUFpSyw2QkFBNkIsS0FBSyxzR0FBc0csZ0JBQWdCLGdHQUFnRyxZQUFZLG9XQUFvVyxrQkFBa0IsMkpBQTJKLHdCQUF3QixPQUFPLGtCQUFrQixtQ0FBbUMsWUFBWSxZQUFZLEtBQUssNkJBQTZCLEVBQUUsc0NBQXNDLDZCQUE2Qiw2QkFBNkIsMkJBQTJCLG1DQUFtQyxpQ0FBaUMseUNBQXlDLG9CQUFvQiw0QkFBNEIsdUJBQXVCLG1CQUFtQix1Q0FBdUMsV0FBVyw2RUFBNkUsa1RBQWtULHNCQUFzQixtQkFBbUIsRUFBRSwrRkFBK0Ysc0JBQXNCLFFBQVEsMkJBQTJCLGFBQWEsY0FBYyxzQkFBc0IsZ0JBQWdCLHdDQUF3QyxjQUFjLGtCQUFrQixVQUFVLGdCQUFnQiw2Q0FBNkMsZ0JBQWdCLDZDQUE2QyxnQkFBZ0IsaUJBQWlCLGNBQWMsZUFBZSxjQUFjLG9CQUFvQixjQUFjLDJCQUEyQixjQUFjLDJCQUEyQixjQUFjLGVBQWUsY0FBYyxlQUFlLGNBQWMsZUFBZSxnQkFBZ0IsZUFBZSxxQ0FBcUMsU0FBUyxjQUFjLHlCQUF5QixjQUFjLHlCQUF5QixvQkFBb0Isd0RBQXdELGFBQWEsT0FBTyw2REFBNkQsbUJBQW1CLDhCQUE4Qiw0Q0FBNEMsRUFBRSx1QkFBdUIsOEJBQThCLFVBQVUsMEJBQTBCLDRIQUE0SCxFQUFFLGdCQUFnQiw0QkFBNEIsZ0VBQWdFLEVBQUUsZ0JBQWdCLFVBQVUsdUJBQXVCLFNBQVMsbUNBQW1DLDRDQUE0Qyx3Q0FBd0MsRUFBRSxFQUFFLHVCQUF1QixTQUFTLG1DQUFtQyw2Q0FBNkMsd0NBQXdDLEVBQUUsRUFBRSxvQkFBb0IsNEJBQTRCLHlFQUF5RSxFQUFFLGdCQUFnQiwrQkFBK0IsWUFBWSx5REFBeUQsZ0JBQWdCLEVBQUUsWUFBWSwwQkFBMEIsZ0JBQWdCLGtCQUFrQixXQUFXLDBCQUEwQixzQ0FBc0MsRUFBRSxzQkFBc0Isd0JBQXdCLHdCQUF3QixFQUFFLDhCQUE4QixrQkFBa0IsRUFBRSxRQUFRLGdCQUFnQixJQUFJLDJCQUEyQixjQUFjLHNCQUFzQixzQkFBc0IseUJBQXlCLDZEQUE2RCxpQkFBaUIsRUFBRSxFQUFFLGNBQWMsd0NBQXdDLHNCQUFzQix5QkFBeUIsNkRBQTZELGlCQUFpQixFQUFFLEVBQUUsYUFBYSxzQkFBc0IseUJBQXlCLGtCQUFrQixJQUFJLG9EQUFvRCwyQ0FBMkMsS0FBSyxvREFBb0QsR0FBRyxXQUFXLGNBQWMsNEJBQTRCLDRDQUE0Qyw4QkFBOEIsZUFBZSxrQ0FBa0MsNEJBQTRCLG9DQUFvQyw0QkFBNEIsRUFBRSxFQUFFLDRCQUE0QixjQUFjLHNCQUFzQiw0REFBNEQseUJBQXlCLDREQUE0RCx5QkFBeUIsbUNBQW1DLDJCQUEyQixtQ0FBbUMscUJBQXFCLDREQUE0RCxxQkFBcUIsNERBQTRELG9CQUFvQiw0REFBNEQsc0JBQXNCLHNGQUFzRiwwQkFBMEIsbUNBQW1DLEdBQUcsNEJBQTRCLG9GQUFvRiwwQkFBMEIsZUFBZSw2QkFBNkIsb0JBQW9CLHFEQUFxRCw4Q0FBOEMsdUNBQXVDLFNBQVMsRUFBRSw4R0FBOEcsaUJBQWlCLEVBQUUsa0RBQWtELHNCQUFzQixhQUFhLCtGQUErRixzQkFBc0IseUVBQXlFLHVCQUF1QiwrQ0FBK0MsU0FBUyw2QkFBNkIsaUNBQWlDLG1EQUFtRCxFQUFFLDRDQUE0QyxzQkFBc0Isc0JBQXNCLG9CQUFvQix5QkFBeUIseUNBQXlDLHlCQUF5Qix3QkFBd0IsTUFBTSxnQkFBZ0IsTUFBTSxnQkFBZ0IsTUFBTSxvQkFBb0IsV0FBVyxxQkFBcUIsVUFBVSxnQkFBZ0IsTUFBTSxlQUFlLE1BQU0sZUFBZSxNQUFNLDBCQUEwQixNQUFNLHdDQUF3QyxTQUFTLEdBQUcsR0FBRyxzQkFBc0Isb0JBQW9CLDBCQUEwQixtQ0FBbUMscURBQXFELDJCQUEyQix3Q0FBd0MsYUFBYSxjQUFjLEVBQUUsZUFBZSxzQkFBc0IsYUFBYSxzQkFBc0IsZUFBZSxrQkFBa0IsbUJBQW1CLHlDQUF5QyxJQUFJLDRCQUE0QixxQ0FBcUMsYUFBYSxVQUFVLDhCQUE4QixnQkFBZ0IsNkJBQTZCLFdBQVcsY0FBYyxRQUFRLFlBQVksS0FBSyxtQkFBbUIsS0FBSyxLQUFLLDJCQUEyQixJQUFJLDJCQUEyQixPQUFPLDhCQUE4QixVQUFVLEVBQUUseUJBQXlCLHNCQUFzQixhQUFhLHdCQUF3QiwrQkFBK0Isa0NBQWtDLFdBQVcsaUJBQWlCLGdCQUFnQixHQUFHLG9EQUFvRCxFQUFFLDRDQUE0QyxzQkFBc0Isd0JBQXdCLGtCQUFrQiw0REFBNEQsRUFBRSxxREFBcUQsc0JBQXNCLGFBQWEsd0JBQXdCLGlFQUFpRSwwQkFBMEIseUJBQXlCLElBQUksS0FBSyxvQ0FBb0MsSUFBSSx1Q0FBdUMsZ0JBQWdCLFVBQVUsR0FBRyxzQkFBc0IsYUFBYSx3QkFBd0IsMEJBQTBCLGlFQUFpRSxlQUFlLG9CQUFvQixZQUFZLElBQUksS0FBSyxtQ0FBbUMsNkJBQTZCLElBQUksbUNBQW1DLHdCQUF3QixJQUFJLHVCQUF1Qix5QkFBeUIsSUFBSSx1QkFBdUIsS0FBSyxVQUFVLFFBQVEsSUFBSSwrQkFBK0IsVUFBVSxFQUFFLGtCQUFrQixzQkFBc0Isd0JBQXdCLDhDQUE4QyxnQ0FBZ0Msb0JBQW9CLHdEQUF3RCwrQkFBK0IsSUFBSSxlQUFlLFVBQVUsR0FBRyxzQkFBc0IsYUFBYSxhQUFhLGdCQUFnQixrQkFBa0Isa0RBQWtELElBQUksb0JBQW9CLGNBQWMsTUFBTSxzQkFBc0IsY0FBYyxvR0FBb0csaUdBQWlHLE1BQU0sY0FBYyx5Q0FBeUMsY0FBYywyTEFBMkwsa0RBQWtELGNBQWMsb0JBQW9CLG1CQUFtQiw0QkFBNEIsZ0JBQWdCLGdCQUFnQixxREFBcUQsY0FBYywyQ0FBMkMsV0FBVyxvQ0FBb0Msc0JBQXNCLDRCQUE0Qiw4REFBOEQsRUFBRSxnQkFBZ0IsdUJBQXVCLG9CQUFvQixrQkFBa0IsZ0NBQWdDLDZEQUE2RCxtS0FBbUssK0RBQStELG9KQUFvSix3QkFBd0IsYUFBYSxzQkFBc0Isb0JBQW9CLGdHQUFnRyw2QkFBNkIsbURBQW1ELG1FQUFtRSxrQkFBa0IseUJBQXlCLDZDQUE2QyxzQkFBc0IsZ0NBQWdDLG1DQUFtQyxLQUFLLDRCQUE0QixpQkFBaUIsS0FBSyx5Q0FBeUMsU0FBUyxXQUFXLG9CQUFvQixjQUFjLDhEQUE4RCxnQkFBZ0IsbUJBQW1CLHlFQUF5RSxJQUFJLDJCQUEyQixVQUFVLDZDQUE2QyxJQUFJLG9CQUFvQixNQUFNLG1GQUFtRiwrQ0FBK0MsTUFBTSxJQUFJLElBQUksU0FBUyxJQUFJLFNBQVMsa0dBQWtHLHFDQUFxQyx1R0FBdUcsNkJBQTZCLE1BQU0sd1FBQXdRLDhCQUE4QiwyREFBMkQsS0FBSyxnQkFBZ0IsWUFBWSx5Q0FBeUMsU0FBUywwQkFBMEIsbUJBQW1CLGVBQWUsNEVBQTRFLDRCQUE0Qiw0QkFBNEIsK0JBQStCLDZCQUE2Qiw0Q0FBNEMsbUNBQW1DLHdEQUF3RCxnQ0FBZ0Msa0RBQWtELHdDQUF3QywyQ0FBMkMsK0JBQStCLG9DQUFvQyxrQ0FBa0MsdUNBQXVDLDBCQUEwQixZQUFZLGdDQUFnQyxZQUFZLHVCQUF1QixjQUFjLCtCQUErQixTQUFTLHNDQUFzQyxVQUFVLGdIQUFnSCxFQUFFLEVBQUUsV0FBVyxzQkFBc0IseURBQXlELGtEQUFrRCxhQUFhLG1EQUFtRCxFQUFFLHlCQUF5QixXQUFXLG1CQUFtQixxRUFBcUUsR0FBRyxzQkFBc0Isc0JBQXNCLG9IQUFvSCxHQUFHLHNCQUFzQixlQUFlLGlCQUFpQixxQkFBcUIsVUFBVSxpQkFBaUIsbUJBQW1CLDRCQUE0QixtQkFBbUIsSUFBSSxpRUFBaUUsc0JBQXNCLGlCQUFpQixVQUFVLCtCQUErQiwrQkFBK0IsYUFBYSw4QkFBOEIsU0FBUyxtQkFBbUIsa0JBQWtCLFNBQVMsSUFBSSwwQ0FBMEMsU0FBUywyQkFBMkIsa0NBQWtDLCtDQUErQyxpQ0FBaUMsU0FBUyxrQkFBa0IsT0FBTyx5Q0FBeUMsMERBQTBELGlDQUFpQyxXQUFXLGdCQUFnQixPQUFPLG1CQUFtQiw0U0FBNFMsZ0JBQWdCLGtCQUFrQixtRUFBbUUsZ0JBQWdCLFNBQVMsa0JBQWtCLDJHQUEyRyxxQkFBcUIsNEJBQTRCLG9CQUFvQixrREFBa0QsU0FBUyw2RkFBNkYsNkJBQTZCLHdDQUF3Qyx5Q0FBeUMsd0NBQXdDLE1BQU0sY0FBYyxtQ0FBbUMsU0FBUywrQkFBK0IsUUFBUSxJQUFJLElBQUksNEhBQTRILGlCQUFpQixTQUFTLDRCQUE0Qiw4Q0FBOEMscUVBQXFFLGlFQUFpRSxvQkFBb0IscUJBQXFCLElBQUksR0FBRyw4RUFBOEUsK1JBQStSLDRCQUE0QixJQUFJLDhEQUE4RCw2QkFBNkIsMENBQTBDLElBQUksOEJBQThCLHNCQUFzQiwrQkFBK0IsMEJBQTBCLDBFQUEwRSxvRUFBb0Usd0NBQXdDLHFCQUFxQixjQUFjLCtDQUErQyx3QkFBd0IsVUFBVSw2Q0FBNkMsV0FBVyxxUkFBcVIsYUFBYSwwREFBMEQsY0FBYyx5REFBeUQsZ0NBQWdDLDhNQUE4TSxnQkFBZ0IsY0FBYyx3QkFBd0IsY0FBYywwQkFBMEIsY0FBYyxnQkFBZ0IsY0FBYyx5QkFBeUIsY0FBYyx5QkFBeUIsY0FBYyxrQkFBa0IsY0FBYyxzQ0FBc0MsY0FBYyxtQ0FBbUMsY0FBYyxvQ0FBb0MsY0FBYywyREFBMkQsY0FBYywyQkFBMkIsY0FBYyx5Q0FBeUMsY0FBYyw4Q0FBOEMsdUJBQXVCLG9HQUFvRyxZQUFZLGdCQUFnQixrQ0FBa0Msa0NBQWtDLHVCQUF1QixZQUFZLHVCQUF1QixzTEFBc0wsV0FBVyx3SEFBd0gsc0VBQXNFLGVBQWUsa0RBQWtELHlCQUF5QiwyR0FBMkcsd0hBQXdILG9DQUFvQyxnRkFBZ0YsZ0JBQWdCLGlEQUFpRCxpQkFBaUIsUUFBUSw0S0FBNEssa0RBQWtELHNCQUFzQixvQ0FBb0MsSUFBSSxpQkFBaUIsVUFBVSw4SEFBOEgsRUFBRSxFQUFFLGlEQUFpRCxzQkFBc0Isc0JBQXNCLGdCQUFnQixHQUFHLHNCQUFzQixhQUFhLHdCQUF3Qix3Q0FBd0MsSUFBSSxLQUFLLDZCQUE2QixLQUFLLGlCQUFpQixPQUFPLG9CQUFvQixZQUFZLEtBQUssY0FBYyw2QkFBNkIsSUFBSSxjQUFjLE9BQU8seUJBQXlCLGFBQWEsNkJBQTZCLEtBQUssbUJBQW1CLFVBQVUsK0JBQStCLGNBQWMsZ0JBQWdCLFdBQVcsWUFBWSxVQUFVLEVBQUUsMEJBQTBCLHNCQUFzQixhQUFhLHlCQUF5Qix5QkFBeUIsbUJBQW1CLDJCQUEyQix1REFBdUQsbUJBQW1CLDZCQUE2QixJQUFJLGtKQUFrSixzRUFBc0UsK0dBQStHLFNBQVMsNkJBQTZCLDBDQUEwQyxJQUFJLDRDQUE0QywwSEFBMEgsbUJBQW1CLHdKQUF3SixJQUFJLG1DQUFtQyxjQUFjLGVBQWUsMkVBQTJFLHFCQUFxQixzQ0FBc0Msa0JBQWtCLHFCQUFxQixJQUFJLGlIQUFpSCxrQkFBa0IsZ0RBQWdELEdBQUcsc0JBQXNCLGFBQWEsNkJBQTZCLHdCQUF3Qiw2REFBNkQsRUFBRSx1QkFBdUIsc0JBQXNCLGFBQWEsd0JBQXdCLDJDQUEyQyxHQUFHLHNCQUFzQixhQUFhLDZCQUE2Qix3QkFBd0IseUNBQXlDLEVBQUUsdUJBQXVCLHNCQUFzQixhQUFhLDJIQUEySCwwQkFBMEIsdURBQXVELFFBQVEsUUFBUSxvQkFBb0Isa0NBQWtDLEtBQUssMkJBQTJCLDRCQUE0QixLQUFLLEtBQUssa0JBQWtCLDJCQUEyQixRQUFRLG1DQUFtQyx5QkFBeUIsa0NBQWtDLHNDQUFzQyxLQUFLLEtBQUssa0JBQWtCLDJCQUEyQixPQUFPLFlBQVksc0NBQXNDLGVBQWUsRUFBRSwyR0FBMkcsc0JBQXNCLGFBQWEsdUJBQXVCLHNCQUFzQix5REFBeUQsRUFBRSxpQkFBaUIsc0JBQXNCLGFBQWEsaUJBQWlCLHNCQUFzQix3QkFBd0IsRUFBRSxXQUFXLHNCQUFzQixhQUFhLHFCQUFxQixzQkFBc0IsNkJBQTZCLGdCQUFnQixtQ0FBbUMsaUJBQWlCLElBQUksS0FBSyxXQUFXLDBCQUEwQixlQUFlLEVBQUUsZUFBZSxzQkFBc0IsYUFBYSw2REFBNkQsc0JBQXNCLGlCQUFpQixpQkFBaUIsaUJBQWlCLGtCQUFrQixhQUFhLEVBQUUsbUNBQW1DLHNCQUFzQixhQUFhLFdBQVcsc0JBQXNCLGdEQUFnRCxFQUFFLFdBQVcsc0JBQXNCLGFBQWEsb0NBQW9DLHNCQUFzQixvQkFBb0IsNERBQTRELEVBQUUsNkJBQTZCLHNCQUFzQixhQUFhLHdDQUF3Qyx3QkFBd0Isa0JBQWtCLDJCQUEyQiwyQkFBMkIsMkJBQTJCLGVBQWUsdUNBQXVDLGFBQWEsRUFBRSxnQ0FBZ0Msc0JBQXNCLGFBQWEsaUJBQWlCLHNCQUFzQixpQkFBaUIsRUFBRSxXQUFXLHNCQUFzQixhQUFhLDZCQUE2Qix3QkFBd0IseUNBQXlDLEVBQUUsdUJBQXVCLHNCQUFzQixhQUFhLHlCQUF5QixzQkFBc0Isd0JBQXdCLEVBQUUsbUJBQW1CLHNCQUFzQixhQUFhLDZCQUE2Qix3QkFBd0IsNkRBQTZELEVBQUUsdUJBQXVCLHNCQUFzQixhQUFhLDRDQUE0QyxzQkFBc0Isa0JBQWtCLDBCQUEwQixvRkFBb0YsNEJBQTRCLE1BQU0seUNBQXlDLDhCQUE4QixpRUFBaUUsZ0ZBQWdGLEVBQUUsb0NBQW9DLHNCQUFzQixhQUFhLHdCQUF3Qiw4Q0FBOEMsZ0NBQWdDLFlBQVksd0NBQXdDLG1DQUFtQyxVQUFVLFNBQVMsY0FBYyxZQUFZLGFBQWEsVUFBVSxTQUFTLGNBQWMsWUFBWSxVQUFVLElBQUksbUJBQW1CLEtBQUssTUFBTSxpQkFBaUIsS0FBSyxNQUFNLFlBQVksd0JBQXdCLHFCQUFxQixjQUFjLG9CQUFvQix5TUFBeU0sWUFBWSwyQkFBMkIsdUVBQXVFLEtBQUssc0VBQXNFLEtBQUssMkJBQTJCLHFFQUFxRSxLQUFLLHFFQUFxRSx1Q0FBdUMsV0FBVyxnR0FBZ0csR0FBRyxzQkFBc0IsYUFBYSxjQUFjLFNBQVMsc0hBQXNILHVFQUF1RSxrQkFBa0IsbUJBQW1CLFlBQVksY0FBYyxxQkFBcUIsc0JBQXNCLHFCQUFxQixzQkFBc0Isc0JBQXNCLG1CQUFtQixvQkFBb0IsUUFBUSxzR0FBc0cscUJBQXFCLHlGQUF5Rix3QkFBd0IsaUdBQWlHLCtDQUErQyxzRUFBc0Usd0JBQXdCLCtEQUErRCxzQkFBc0Isc0RBQXNELHFCQUFxQixhQUFhLFlBQVksTUFBTSxLQUFLLGdCQUFnQixXQUFXLEVBQUUsd0JBQXdCLGVBQWUsMEJBQTBCLG9FQUFvRSw2QkFBNkIsdU1BQXVNLCtCQUErQix1SEFBdUgsK0JBQStCLHNUQUFzVCwrQkFBK0IseUhBQXlILCtCQUErQixZQUFZLGdDQUFnQyxHQUFHLHNCQUFzQixhQUFhLGlCQUFpQix3QkFBd0IsUUFBUSxFQUFFLG1HQUFtRyw0Q0FBNEMsa0dBQWtHLHNFQUFzRSxnWkFBZ1osMEtBQTBLLElBQUksc0JBQXNCLHNFQUFzRSw0RUFBNEUsY0FBYyxJQUFJLEtBQUssV0FBVyxvR0FBb0csa0NBQWtDLCtEQUErRCxjQUFjLElBQUksb0NBQW9DLFVBQVUsV0FBVywwQkFBMEIsWUFBWSxJQUFJLEtBQUssWUFBWSxJQUFJLGtCQUFrQixxQkFBcUIsSUFBSSxrQkFBa0IsUUFBUSxJQUFJLEtBQUssUUFBUSxJQUFJLGtCQUFrQixxQkFBcUIsSUFBSSw4QkFBOEIsc0JBQXNCLHVCQUF1QixnQkFBZ0IsSUFBSSxLQUFLLHNEQUFzRCxRQUFRLG1EQUFtRCwwQkFBMEIsWUFBWSxJQUFJLEtBQUssS0FBSyxTQUFTLEtBQUssaUNBQWlDLEVBQUUsVUFBVSxzQkFBc0IsZUFBZSxhQUFhLGdCQUFnQiw2Q0FBNkMsZ0JBQWdCLFdBQVcsbUJBQW1CLG9FQUFvRSxrQkFBa0Isc0JBQXNCLHNJQUFzSSxNQUFNLDJEQUEyRCxJQUFJLHFCQUFxQixVQUFVLGtCQUFrQix1Q0FBdUMsSUFBSSxLQUFLLHlCQUF5Qix3REFBd0QsU0FBUyxvQkFBb0IsdUNBQXVDLElBQUksS0FBSyx5QkFBeUIsc0NBQXNDLFNBQVMsbUJBQW1CLGlIQUFpSCxxQkFBcUIsc0JBQXNCLHFCQUFxQixzQkFBc0IsbUNBQW1DLHFEQUFxRCxvREFBb0QsNENBQTRDLFFBQVEsNkxBQTZMLHlDQUF5QyxnU0FBZ1Msd0NBQXdDLHFGQUFxRixvRUFBb0UsWUFBWSxjQUFjLG9CQUFvQixZQUFZLGlDQUFpQyxLQUFLLHlIQUF5SCw2QkFBNkIsV0FBVyx5SEFBeUgsb0JBQW9CLHFDQUFxQyx3RUFBd0UsWUFBWSxjQUFjLG9CQUFvQixZQUFZLHFCQUFxQixLQUFLLDBHQUEwRyxvR0FBb0csd0NBQXdDLDZCQUE2QixnQkFBZ0IsWUFBWSxTQUFTLFlBQVksdURBQXVELElBQUksMkZBQTJGLFVBQVUsUUFBUSw0QkFBNEIsSUFBSSxTQUFTLHdFQUF3RSw4QkFBOEIsK0JBQStCLFlBQVksY0FBYyw2QkFBNkIsNkRBQTZELDhCQUE4QixrQkFBa0Isc0JBQXNCLGlDQUFpQyxLQUFLLGNBQWMsNkJBQTZCLFlBQVksOEJBQThCLEtBQUssNkNBQTZDLGVBQWUsd0JBQXdCLGtDQUFrQyxrRUFBa0UsZ0NBQWdDLDBEQUEwRCwreEJBQSt4QixrQkFBa0IsaUNBQWlDLDBCQUEwQixtQkFBbUIsb0VBQW9FLGFBQWEsWUFBWSxJQUFJLEtBQUssa0ZBQWtGLEtBQUssS0FBSyxZQUFZLG1FQUFtRSxxQkFBcUIsaURBQWlELG1DQUFtQyxNQUFNLHVDQUF1QyxLQUFLLG9CQUFvQixjQUFjLEtBQUssdURBQXVELDZGQUE2RixnQ0FBZ0MsY0FBYyxTQUFTLHNDQUFzQywyQkFBMkIsa0JBQWtCLEtBQUssbUJBQW1CLGlCQUFpQixZQUFZLEVBQUUsNEJBQTRCLGdEQUFnRCw2QkFBNkIsY0FBYyxTQUFTLHNDQUFzQyx3Q0FBd0MsaUNBQWlDLG9CQUFvQix3TkFBd04sK0JBQStCLHlCQUF5QixvQ0FBb0Msd0RBQXdELG1DQUFtQyxtQ0FBbUMseUNBQXlDLDJDQUEyQyxrR0FBa0csNkNBQTZDLE1BQU0sUUFBUSxZQUFZLHNDQUFzQyxLQUFLLElBQUksV0FBVyxLQUFLLFFBQVEsTUFBTSxXQUFXLFFBQVEsWUFBWSwwQ0FBMEMsU0FBUywrQ0FBK0Msd0JBQXdCLG9DQUFvQyxZQUFZLGlHQUFpRyxtQ0FBbUMsbUJBQW1CLFlBQVksK0hBQStILGtDQUFrQyxxREFBcUQsNEJBQTRCLGlDQUFpQywwQkFBMEIsZ0JBQWdCLGNBQWMsS0FBSyxvQ0FBb0MscUJBQXFCLFNBQVMsbUNBQW1DLHFDQUFxQyxnQ0FBZ0MsbUVBQW1FLGtDQUFrQyxpRUFBaUUsOEJBQThCLHlCQUF5Qiw0QkFBNEIsMkJBQTJCLDZCQUE2Qiw4Q0FBOEMsOEJBQThCLEtBQUsscUJBQXFCLDZCQUE2QixZQUFZLFdBQVcsMkNBQTJDLG9CQUFvQiw2QkFBNkIscURBQXFELDRCQUE0QixvRUFBb0UsNkJBQTZCLHNFQUFzRSwrQkFBK0IsTUFBTSw4QkFBOEIsWUFBWSxXQUFXLDJDQUEyQyx5Q0FBeUMsOEJBQThCLHNEQUFzRCw2QkFBNkIsc0VBQXNFLDhCQUE4Qix3RUFBd0UsK0JBQStCLFFBQVEsK0NBQStDLFlBQVksV0FBVyx3Q0FBd0MsaUJBQWlCLFdBQVcsNkJBQTZCLHlDQUF5Qyw4QkFBOEIsc0RBQXNELDZCQUE2QixzRUFBc0UsOEJBQThCLHdFQUF3RSwrQkFBK0IsNEJBQTRCLCtCQUErQix5QkFBeUIsWUFBWSxJQUFJLDBDQUEwQyx1RUFBdUUsOEJBQThCLDZCQUE2QixnQ0FBZ0MsNEJBQTRCLG9CQUFvQiwrRkFBK0YsOEJBQThCLFVBQVUsNkdBQTZHLG1HQUFtRywrQ0FBK0MsZ0JBQWdCLFdBQVcsd0VBQXdFLEtBQUssa0JBQWtCLHlEQUF5RCxzRUFBc0Usc0JBQXNCLFdBQVcsNkJBQTZCLFlBQVksNkJBQTZCLE1BQU0seU9BQXlPLDhCQUE4QixtQkFBbUIsYUFBYSxtQkFBbUIsa0NBQWtDLDBGQUEwRixzQkFBc0IsbUVBQW1FLDhCQUE4QixnQkFBZ0IsV0FBVyx1RUFBdUUsS0FBSyxrQkFBa0Isd0RBQXdELG9DQUFvQyxXQUFXLDZCQUE2QixvRkFBb0YsNkJBQTZCLDZCQUE2QixzQkFBc0Isa21CQUFrbUIsNkNBQTZDLHVGQUF1RixtSUFBbUksK0ZBQStGLDJOQUEyTiwrRkFBK0YsK1NBQStTLCtGQUErRixtWUFBbVksZ0dBQWdHLDBkQUEwZCxrR0FBa0csa2pCQUFrakIsa0dBQWtHLDBvQkFBMG9CLGtHQUFrRyxrdUJBQWt1QixrR0FBa0csMHpCQUEwekIsa0dBQWtHLHN1QkFBc3VCLGtHQUFrRyxrcEJBQWtwQixrR0FBa0csOGpCQUE4akIsa0dBQWtHLDBlQUEwZSxrR0FBa0csb1pBQW9aLGtHQUFrRyw0VEFBNFQsa0dBQWtHLG9PQUFvTyxrR0FBa0csNElBQTRJLGtHQUFrRyxnRUFBZ0UsMEZBQTBGLG1RQUFtUSxrQkFBa0IsMEJBQTBCLGdCQUFnQixrQkFBa0IsaURBQWlELDJCQUEyQiwyRkFBMkYsNERBQTRELG9CQUFvQixhQUFhLEtBQUssUUFBUSxJQUFJLHlFQUF5RSxLQUFLLEtBQUssdURBQXVELCtFQUErRSxxQkFBcUIsK0NBQStDLHVCQUF1QixpQ0FBaUMseURBQXlELElBQUksNEJBQTRCLFNBQVMsb0NBQW9DLDJCQUEyQixnQkFBZ0IsSUFBSSwwQkFBMEIsU0FBUywyQ0FBMkMsWUFBWSxJQUFJLDhCQUE4Qiw2Q0FBNkMsMEJBQTBCLFlBQVksSUFBSSx5RUFBeUUsSUFBSSx5QkFBeUIsSUFBSSxLQUFLLHNEQUFzRCxnR0FBZ0csdUNBQXVDLGdDQUFnQyxZQUFZLEVBQUUsV0FBVyxnQkFBZ0IsdUNBQXVDLHVCQUF1QixNQUFNLEtBQUssV0FBVyw0REFBNEQsd0NBQXdDLGdCQUFnQixNQUFNLEtBQUsseURBQXlELDRDQUE0QyxTQUFTLDBDQUEwQyxnQkFBZ0IsSUFBSSw0REFBNEQsVUFBVSxJQUFJLFdBQVcseUJBQXlCLDhCQUE4QiwyQkFBMkIsSUFBSSxXQUFXLFNBQVMsa0NBQWtDLGlMQUFpTCwrSUFBK0ksWUFBWSxJQUFJLEtBQUssMEJBQTBCLGdDQUFnQyw0S0FBNEssNkJBQTZCLGtCQUFrQiwrREFBK0QsOEJBQThCLGtCQUFrQiwyREFBMkQsOEJBQThCLGtDQUFrQywrQkFBK0Isb0NBQW9DLGdCQUFnQixjQUFjLEtBQUssc0RBQXNELDBEQUEwRCxtREFBbUQsOEJBQThCLDZCQUE2Qiw0QkFBNEIsc0JBQXNCLDZCQUE2QiwrQkFBK0IsNkJBQTZCLGtCQUFrQix1Q0FBdUMsV0FBVyxLQUFLLG9CQUFvQiwyQkFBMkIsU0FBUyxJQUFJLGdDQUFnQyxtQkFBbUIscUJBQXFCLGVBQWUsa0NBQWtDLFdBQVcscUNBQXFDLFNBQVMsZ0NBQWdDLDRCQUE0QixnREFBZ0QsVUFBVSxRQUFRLFFBQVEsY0FBYyxLQUFLLCtDQUErQyw2QkFBNkIsbUNBQW1DLFVBQVUsb0JBQW9CLEtBQUssa0NBQWtDLFFBQVEsSUFBSSxvQkFBb0IsZUFBZSxvQkFBb0IsK0JBQStCLDJDQUEyQyxvQ0FBb0MsTUFBTSw4Q0FBOEMsMkVBQTJFLDJCQUEyQixZQUFZLElBQUksNkJBQTZCLFdBQVcsVUFBVSw2Q0FBNkMsY0FBYyxrQ0FBa0MsbUNBQW1DLFFBQVEsb0JBQW9CLG9CQUFvQixLQUFLLHNCQUFzQixrQ0FBa0MsdUdBQXVHLG1DQUFtQywrQ0FBK0MsOEJBQThCLDZCQUE2QiwrQkFBK0IsOEJBQThCLDhCQUE4Qiw2QkFBNkIsK0JBQStCLDhCQUE4QiwrQkFBK0IsNEJBQTRCLDZCQUE2Qiw2Q0FBNkMsZ0NBQWdDLDRCQUE0QixzQkFBc0IsNkZBQTZGLHlEQUF5RCwrQkFBK0IsNkJBQTZCLG9CQUFvQiwrQkFBK0IsOEJBQThCLCtCQUErQixrUEFBa1AsZ0NBQWdDLGlCQUFpQixZQUFZLHVDQUF1QyxrRkFBa0Ysa0RBQWtELCtCQUErQixpRUFBaUUsK0VBQStFLGtHQUFrRyxpQkFBaUIsK0JBQStCLCtDQUErQyxvQkFBb0IsOEJBQThCLDZCQUE2Qiw4QkFBOEIsNkJBQTZCLDZCQUE2Qiw0QkFBNEIsNEJBQTRCLDJCQUEyQiwwQ0FBMEMscUJBQXFCLGdCQUFnQixRQUFRLFFBQVEsV0FBVyxLQUFLLHdCQUF3Qix1QkFBdUIsa0VBQWtFLEtBQUssZ0JBQWdCLCtEQUErRCw2QkFBNkIsc0JBQXNCLGNBQWMsNERBQTRELG9DQUFvQyxvQ0FBb0Msd0VBQXdFLGtGQUFrRiwwQkFBMEIsY0FBYyx1REFBdUQsWUFBWSxXQUFXLGlCQUFpQixvQ0FBb0Msd0NBQXdDLGNBQWMsS0FBSyxLQUFLLGlFQUFpRSxxREFBcUQsZUFBZSxvRUFBb0Usa0JBQWtCLDZEQUE2RCxtQkFBbUIsb0NBQW9DLHFDQUFxQywwQkFBMEIsaUpBQWlKLFlBQVksMEZBQTBGLGdCQUFnQix5SEFBeUgsZ0JBQWdCLHVDQUF1QyxzQkFBc0IseUJBQXlCLG1DQUFtQyxZQUFZLDBDQUEwQyxFQUFFLDJEQUEyRCxvQkFBb0IsVUFBVSw2QkFBNkIsbUNBQW1DLDZCQUE2QixtQ0FBbUMsOEJBQThCLG1DQUFtQyxrQ0FBa0MscUJBQXFCLCtCQUErQixrRkFBa0YsZ0ZBQWdGLDhCQUE4QixlQUFlLHdDQUF3QyxLQUFLLGdDQUFnQyxTQUFTLCtCQUErQixlQUFlLDRCQUE0QixLQUFLLEtBQUssbUNBQW1DLDBCQUEwQixvQkFBb0IsOEJBQThCLDZCQUE2Qiw4QkFBOEIsaUNBQWlDLHVCQUF1QixxQ0FBcUMsd0RBQXdELHVCQUF1Qiw2QkFBNkIsZ0NBQWdDLFlBQVksRUFBRSxnQkFBZ0Isd0JBQXdCLFdBQVcsdUJBQXVCLE9BQU8sdUVBQXVFLGdCQUFnQix3QkFBd0IsV0FBVyx1QkFBdUIsT0FBTyx1RUFBdUUsNEVBQTRFLE9BQU8seUJBQXlCLGdDQUFnQyxpQ0FBaUMsdUJBQXVCLHFDQUFxQyw0Q0FBNEMseUJBQXlCLEVBQUUsZ0JBQWdCLHdCQUF3QixXQUFXLHVCQUF1QixPQUFPLGtDQUFrQyxnQkFBZ0Isd0JBQXdCLFdBQVcsdUJBQXVCLE9BQU8sa0NBQWtDLHdEQUF3RCxtREFBbUQsNkJBQTZCLGdDQUFnQyxnQ0FBZ0MsK0JBQStCLDBCQUEwQixZQUFZLHVCQUF1Qiw0QkFBNEIsTUFBTSxFQUFFLEtBQUssV0FBVyxhQUFhLEtBQUssV0FBVyxhQUFhLGVBQWUsUUFBUSxRQUFRLFFBQVEsbUNBQW1DLFVBQVUsbUJBQW1CLDhCQUE4Qiw4QkFBOEIsK0JBQStCLDRCQUE0Qiw4QkFBOEIsNEJBQTRCLCtCQUErQix1QkFBdUIsK0JBQStCLHNCQUFzQiw2QkFBNkIsaUVBQWlFLGdCQUFnQixxQkFBcUIsS0FBSyxzQkFBc0IsMENBQTBDLG1EQUFtRCwrQkFBK0IsMENBQTBDLDhCQUE4QixZQUFZLGtDQUFrQyxpQ0FBaUMsa0NBQWtDLEtBQUssNkNBQTZDLHNCQUFzQixtQkFBbUIsZ0NBQWdDLDZCQUE2Qiw4Q0FBOEMsOENBQThDLG1CQUFtQixnQ0FBZ0MsOEJBQThCLGlDQUFpQyxpQ0FBaUMsNEJBQTRCLEtBQUssS0FBSyxxQ0FBcUMsVUFBVSxvQkFBb0IsT0FBTyxTQUFTLDZCQUE2Qix3QkFBd0IsNEJBQTRCLHVCQUF1Qiw4QkFBOEIsdUJBQXVCLDZCQUE2QixzQkFBc0IsNkJBQTZCLHdCQUF3Qiw0QkFBNEIsdUJBQXVCLDhCQUE4Qix1QkFBdUIsNkJBQTZCLHNCQUFzQiw2QkFBNkIsd0JBQXdCLDRCQUE0Qix1QkFBdUIsbUJBQW1CLGdCQUFnQiwrQkFBK0IsZ0pBQWdKLGdDQUFnQyxxR0FBcUcsbUNBQW1DLHVCQUF1QixrQ0FBa0MsOEVBQThFLGdDQUFnQyw2RUFBNkUsaUNBQWlDLCtFQUErRSxnQ0FBZ0MsNkVBQTZFLGlDQUFpQywrRUFBK0UsZ0NBQWdDLDZFQUE2RSxnQ0FBZ0MsdUdBQXVHLGlDQUFpQyx3R0FBd0csK0JBQStCLG1HQUFtRyxnQ0FBZ0MscUdBQXFHLGdDQUFnQyxxR0FBcUcsZ0NBQWdDLHFHQUFxRywrQkFBK0IsbUdBQW1HLGdDQUFnQyw2RkFBNkYsT0FBTywyQ0FBMkMsZ0JBQWdCLDBIQUEwSCxhQUFhLDhGQUE4RixhQUFhLHFGQUFxRixhQUFhLDRFQUE0RSxhQUFhLDJGQUEyRixjQUFjLHVCQUF1QixrQkFBa0Isd0JBQXdCLDJFQUEyRSxjQUFjLHVUQUF1VCw0QkFBNEIsa0JBQWtCLGlEQUFpRCxpQ0FBaUMsVUFBVSxHQUFHLDBFQUEwRSxnQkFBZ0IsaUNBQWlDLHNFQUFzRSxpQ0FBaUMscUJBQXFCLCtCQUErQixzQkFBc0Isd0NBQXdDLG1DQUFtQyxJQUFJLDBCQUEwQiwrREFBK0QsaUJBQWlCLHVDQUF1QyxXQUFXLEtBQUssbUJBQW1CLHdDQUF3QyxvRUFBb0UsK0JBQStCLHNEQUFzRCxnQkFBZ0IsV0FBVyxLQUFLLG1CQUFtQixxREFBcUQsbUZBQW1GLG9EQUFvRCxnQkFBZ0IsV0FBVyxLQUFLLHVDQUF1Qyx5QkFBeUIsd0NBQXdDLHNCQUFzQixvQkFBb0IsTUFBTSxzQkFBc0IsMkJBQTJCLDJCQUEyQixLQUFLLG9EQUFvRCxRQUFRLGdCQUFnQixrQ0FBa0MsNkZBQTZGLG9DQUFvQyx3SEFBd0gsOEJBQThCLHVGQUF1Riw2QkFBNkIsMERBQTBELCtCQUErQixtQkFBbUIsZUFBZSwwREFBMEQsZ0NBQWdDLG1CQUFtQixnQkFBZ0IsMENBQTBDLCtCQUErQixtQkFBbUIsZUFBZSxxREFBcUQsZ0NBQWdDLG1CQUFtQixnQkFBZ0IscUNBQXFDLCtCQUErQiw4Q0FBOEMsZ0NBQWdDLCtDQUErQywrQkFBK0IsOENBQThDLDhCQUE4Qiw4QkFBOEIsNkJBQTZCLHFCQUFxQiw4QkFBOEIsK0JBQStCLHNCQUFzQixvQkFBb0IscUNBQXFDLHFCQUFxQiw2QkFBNkIsNEJBQTRCLGlCQUFpQixlQUFlLHdGQUF3RiwrQkFBK0IseUJBQXlCLGNBQWMsOEVBQThFLGFBQWEsRUFBRSxnQkFBZ0IsYUFBYSxpQkFBaUIsT0FBTyx5Q0FBeUMsNkNBQTZDLFNBQVMsOEJBQThCLHVCQUF1Qix3RUFBd0UsK0JBQStCLDBDQUEwQyxrQ0FBa0Msb0JBQW9CLGlDQUFpQyxZQUFZLFdBQVcsNEJBQTRCLHNDQUFzQywrQkFBK0IsS0FBSyxLQUFLLDJCQUEyQixLQUFLLEtBQUssYUFBYSw4R0FBOEcsS0FBSyxTQUFTLG1DQUFtQyxxQkFBcUIseUJBQXlCLHFDQUFxQyxnQkFBZ0Isb0JBQW9CLG9CQUFvQixnQkFBZ0IsMENBQTBDLHNDQUFzQyxxQ0FBcUMsa0NBQWtDLG9CQUFvQixnQ0FBZ0MsMkRBQTJELHVIQUF1SCwyRkFBMkYsK0JBQStCLDBEQUEwRCxzSEFBc0gsMkZBQTJGLDhCQUE4QixpRUFBaUUsZ0NBQWdDLEVBQUUsVUFBVSxzQkFBc0IsYUFBYSxzQkFBc0IseUJBQXlCLFFBQVEsSUFBSSxtQkFBbUIsdUJBQXVCLFFBQVEsSUFBSSxLQUFLLHNCQUFzQixRQUFRLElBQUksS0FBSyxnQ0FBZ0MsUUFBUSxJQUFJLHlCQUF5QixRQUFRLFdBQVcsbUJBQW1CLFVBQVUsR0FBRyxzQkFBc0IsYUFBYSwwQkFBMEIseUJBQXlCLG1DQUFtQyw0REFBNEQsMEJBQTBCLE1BQU0sMEJBQTBCLDREQUE0RCxPQUFPLHVFQUF1RSxnQkFBZ0IsWUFBWSxJQUFJLGdDQUFnQyxTQUFTLG9CQUFvQiwrQkFBK0IsSUFBSSxLQUFLLFdBQVcsWUFBWSxZQUFZLE1BQU0sZ0JBQWdCLFVBQVUsU0FBUyxvQkFBb0IsMEJBQTBCLGtCQUFrQixzQkFBc0IsWUFBWSxpREFBaUQscUJBQXFCLDZEQUE2RCxLQUFLLCtDQUErQyx1SEFBdUgsb0JBQW9CLFdBQVcsZ0JBQWdCLGVBQWUsRUFBRSw0REFBNEQsc0JBQXNCLGFBQWEsbUpBQW1KLGNBQWMseURBQXlELG1CQUFtQixxQ0FBcUMsR0FBRyxnQkFBZ0Isc0JBQXNCLGlHQUFpRyxxQkFBcUIsd0NBQXdDLFFBQVEsa0JBQWtCLGtFQUFrRSx1Q0FBdUMsUUFBUSxrQkFBa0IsK0VBQStFLEVBQUUsZ0ZBQWdGLHVDQUF1QyxvQ0FBb0MsNkJBQTZCLFFBQVEsS0FBSyx3RkFBd0YsZ0NBQWdDLCtEQUErRCxrQ0FBa0MsSUFBSSx3QkFBd0IsUUFBUSx1REFBdUQsR0FBRyxvQ0FBb0Msd0JBQXdCLEtBQUssZ0NBQWdDLHFCQUFxQixLQUFLLHNCQUFzQixLQUFLLFVBQVUscUJBQXFCLEtBQUsscUJBQXFCLGNBQWMsWUFBWSw0QkFBNEIseUJBQXlCLDZCQUE2QixHQUFHLHNCQUFzQixhQUFhLHNDQUFzQyxlQUFlLDhDQUE4QywyQ0FBMkMsc0JBQXNCLHFDQUFxQyxRQUFRLGdCQUFnQixnRUFBZ0UsS0FBSyxJQUFJLEVBQUUsMEhBQTBILHlGQUF5RixnQkFBZ0IsTUFBTSxnQkFBZ0IsK0RBQStELFVBQVUsS0FBSyxzQkFBc0Isb0RBQW9ELFNBQVMsWUFBWSxrRUFBa0UsVUFBVSx5QkFBeUIscUJBQXFCLG9EQUFvRCxpQkFBaUIsdUdBQXVHLG1FQUFtRSxRQUFRLHNEQUFzRCxtR0FBbUcsaUZBQWlGLGNBQWMsT0FBTyxNQUFNLDhCQUE4QiwwQkFBMEIsWUFBWSxzRUFBc0UseUVBQXlFLHdIQUF3SCwyTkFBMk4sK1dBQStXLDhCQUE4QixVQUFVLG9EQUFvRCxVQUFVLGdCQUFnQixrQ0FBa0MseUJBQXlCLG9CQUFvQixJQUFJLFVBQVUsd0JBQXdCLDZCQUE2Qix1QkFBdUIsSUFBSSxLQUFLLG9CQUFvQix3QkFBd0IsdUJBQXVCLDJDQUEyQyxnQ0FBZ0MseUJBQXlCLG9CQUFvQixJQUFJLFVBQVUsV0FBVyxVQUFVLHdCQUF3QixnQkFBZ0IsY0FBYyxJQUFJLEtBQUssb0JBQW9CLHdCQUF3Qix1QkFBdUIsYUFBYSwyQkFBMkIsRUFBRSxnR0FBZ0csc0JBQXNCLGFBQWEsZ0NBQWdDLG1CQUFtQiwyQ0FBMkMsS0FBSyxJQUFJLEVBQUUsVUFBVSwwQkFBMEIsTUFBTSw2R0FBNkcscUZBQXFGLDRCQUE0QixJQUFJLGFBQWEsV0FBVyxpQkFBaUIsYUFBYSx3Q0FBd0MsNEJBQTRCLElBQUksYUFBYSxXQUFXLGlCQUFpQixhQUFhLDJCQUEyQixVQUFVLHNCQUFzQixNQUFNLEtBQUssS0FBSyxnQkFBZ0IsVUFBVSxrQkFBa0IsT0FBTyxnQ0FBZ0MsMkNBQTJDLHdCQUF3QixnQ0FBZ0MsSUFBSSxzQ0FBc0MsY0FBYyxVQUFVLHNCQUFzQixJQUFJLGFBQWEsV0FBVyxpQkFBaUIsV0FBVyx1QkFBdUIsRUFBRSxpQkFBaUIsc0JBQXNCLGFBQWEsd0JBQXdCLHdDQUF3Qyx3Q0FBd0Msd0NBQXdDLGdGQUFnRixpREFBaUQsSUFBSSxVQUFVLE1BQU0sd0JBQXdCLEtBQUssWUFBWSxJQUFJLEtBQUssYUFBYSxxQkFBcUIsV0FBVyxvQkFBb0IsVUFBVSxHQUFHLHNCQUFzQixhQUFhLHdCQUF3QixvQ0FBb0MsdUZBQXVGLHdCQUF3Qix3QkFBd0Isd0JBQXdCLHdCQUF3Qix3QkFBd0Isd0JBQXdCLHdCQUF3Qix3QkFBd0Isd0JBQXdCLGFBQWEsZUFBZSxhQUFhLGVBQWUsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsWUFBWSxJQUFJLEtBQUssK0JBQStCLDJCQUEyQixTQUFTLFNBQVMsWUFBWSxLQUFLLHNDQUFzQywwQkFBMEIsRUFBRSxlQUFlLCtDQUErQyxNQUFNLGVBQWUsZUFBZSxlQUFlLCtCQUErQixpQ0FBaUMseUJBQXlCLFdBQVcsU0FBUyxrQkFBa0Isd0JBQXdCLEtBQUssS0FBSyxvQ0FBb0MsT0FBTyxFQUFFLHNCQUFzQixhQUFhLG9CQUFvQixxQkFBcUIsaUJBQWlCLGtCQUFrQixLQUFLLHVCQUF1Qix3Q0FBd0Msa0JBQWtCLGdDQUFnQyxvQkFBb0IsVUFBVSx1QkFBdUIsZ0VBQWdFLHNCQUFzQixnREFBZ0Qsa0JBQWtCLEtBQUsscUJBQXFCLHFDQUFxQyxvQkFBb0IsY0FBYyw2QkFBNkIsR0FBRyxzQkFBc0IsYUFBYSxXQUFXLGlCQUFpQixvQkFBb0IsMkNBQTJDLDJDQUEyQywyQ0FBMkMsMkNBQTJDLDJDQUEyQywyQ0FBMkMsVUFBVSw0Q0FBNEMsOENBQThDLGtDQUFrQyxJQUFJLEtBQUssaUJBQWlCLG1EQUFtRCxZQUFZLElBQUksS0FBSyxtQkFBbUIsK0NBQStDLFlBQVksT0FBTyxvQkFBb0IsSUFBSSxLQUFLLGlCQUFpQiwyQkFBMkIsMEJBQTBCLGVBQWUsU0FBUyxZQUFZLElBQUksS0FBSyxnQkFBZ0IsdUJBQXVCLGFBQWEsS0FBSyxTQUFTLFlBQVksSUFBSSxLQUFLLGdCQUFnQix1QkFBdUIsZUFBZSw2Q0FBNkMsa0NBQWtDLElBQUksS0FBSyxzQkFBc0IsK0NBQStDLFlBQVksSUFBSSxLQUFLLHNCQUFzQixtREFBbUQsWUFBWSxPQUFPLHdCQUF3QixJQUFJLEtBQUssdUJBQXVCLDZDQUE2Qyx3QkFBd0IsSUFBSSxLQUFLLGdCQUFnQix1QkFBdUIscUJBQXFCLElBQUksS0FBSyxnQkFBZ0IsdUJBQXVCLHFCQUFxQixJQUFJLEtBQUssZ0JBQWdCLHVCQUF1QiwwREFBMEQsS0FBSyxlQUFlLDREQUE0RCxpREFBaUQsZ0NBQWdDLFVBQVUsWUFBWSxJQUFJLEtBQUssZ0JBQWdCLCtDQUErQyxZQUFZLElBQUksS0FBSyxnQkFBZ0Isd0JBQXdCLFlBQVksT0FBTyxnQkFBZ0IsSUFBSSxLQUFLLGlCQUFpQixRQUFRLGNBQWMsZ0RBQWdELEtBQUsseUNBQXlDLGNBQWMsSUFBSSxLQUFLLGlCQUFpQixnQ0FBZ0MsY0FBYyxJQUFJLG1EQUFtRCxhQUFhLDRDQUE0QyxxQkFBcUIsOENBQThDLGdDQUFnQyxJQUFJLEtBQUssZ0JBQWdCLCtDQUErQyxZQUFZLElBQUksS0FBSyxnQkFBZ0Isd0JBQXdCLFlBQVksT0FBTyxnQkFBZ0IsSUFBSSxLQUFLLGlCQUFpQixRQUFRLFNBQVMsbUJBQW1CLEtBQUssNENBQTRDLGNBQWMsSUFBSSxLQUFLLGtCQUFrQixlQUFlLFVBQVUsZ0NBQWdDLGNBQWMsSUFBSSxtREFBbUQsYUFBYSwwQkFBMEIsS0FBSyxvQkFBb0IsS0FBSyxpQkFBaUIsY0FBYyxJQUFJLGdCQUFnQixNQUFNLFFBQVEsK05BQStOLG9CQUFvQixvQkFBb0IsY0FBYyxvQkFBb0IsZUFBZSxFQUFFLG1EQUFtRCx1QkFBdUIsR0FBRyxzQkFBc0IsaUNBQWlDLG1CQUFtQiwyQkFBMkIsNEJBQTRCLFNBQVMsb0VBQW9FLFNBQVMsd0NBQXdDLFdBQVcsa0JBQWtCLDhCQUE4QixhQUFhLDZKQUE2Six5RkFBeUYsV0FBVyxJQUFJLFNBQVMsb0RBQW9ELFFBQVEsWUFBWSxTQUFTLEtBQUssY0FBYyxzRUFBc0Usb0JBQW9CLFVBQVUsc0ZBQXNGLGlKQUFpSiw0R0FBNEcsWUFBWSw4SkFBOEosNEpBQTRKLCtCQUErQixTQUFTLGFBQWEsd0dBQXdHLDhDQUE4QywyREFBMkQsd0VBQXdFLHFGQUFxRixrREFBa0QsV0FBVyxzQkFBc0Isb0NBQW9DLGtCQUFrQixPQUFPLGtEQUFrRCxlQUFlLGlDQUFpQyxrQkFBa0IsZ0JBQWdCLGVBQWUsV0FBVyxrRUFBa0Usa0NBQWtDLFdBQVcsNkJBQTZCLFNBQVMscUJBQXFCLGNBQWMsbUJBQW1CLE1BQU0sV0FBVyxpQ0FBaUMscUJBQXFCLFNBQVMsZ0JBQWdCLDJCQUEyQixJQUFJLGNBQWMsU0FBUyxpREFBaUQsNkJBQTZCLFNBQVMsaUJBQWlCLHdHQUF3RyxLQUFLLGtFQUFrRSxtR0FBbUcsaUNBQWlDLHdDQUF3QyxlQUFlLDhCQUE4Qiw4QkFBOEIscUNBQXFDLG9CQUFvQixNQUFNLG1FQUFtRSxvREFBb0Qsb0JBQW9CLHNCQUFzQiwyQkFBMkIsMkJBQTJCLHdCQUF3QixlQUFlLHFDQUFxQyxJQUFJLGlCQUFpQixXQUFXLE1BQU0sMEJBQTBCLGlCQUFpQixxQ0FBcUMsSUFBSSxtQkFBbUIsd0JBQXdCLE1BQU0sNEJBQTRCLG1CQUFtQixxQ0FBcUMsSUFBSSxxQkFBcUIscUNBQXFDLE1BQU0sOEJBQThCLHFCQUFxQixxQ0FBcUMsSUFBSSx1QkFBdUIsa0RBQWtELE1BQU0saUNBQWlDLElBQUksd0JBQXdCLG1CQUFtQixrQkFBa0IscUNBQXFDLElBQUksb0JBQW9CLGFBQWEsU0FBUyx1Q0FBdUMsc0JBQXNCLGtGQUFrRixzQkFBc0IsZ0NBQWdDLHNGQUFzRixtQ0FBbUMsK0NBQStDLHNGQUFzRixnREFBZ0QsMENBQTBDLGNBQWMsc0ZBQXNGLGlDQUFpQyx5QkFBeUIsaUpBQWlKLDhCQUE4QixzQkFBc0IsS0FBSyxvQ0FBb0Msb0JBQW9CLE1BQU0sbUJBQW1CLDhCQUE4Qiw2QkFBNkIsSUFBSSxvQkFBb0IsUUFBUSxxRkFBcUYsWUFBWSw0Q0FBNEMsVUFBVSxpQ0FBaUMsaUtBQWlLLHlCQUF5QixhQUFhLFFBQVEsV0FBVyw0REFBNEQsK0ZBQStGLHVEQUF1RCwyQkFBMkIsS0FBSyxnQ0FBZ0MsWUFBWSxtQ0FBbUMsb0JBQW9CLHNDQUFzQyxvQkFBb0IsK0JBQStCLHdFQUF3RSwrREFBK0QsNkRBQTZELEdBQUcsc0JBQXNCLGFBQWEsb0NBQW9DLG9DQUFvQyxhQUFhLG1CQUFtQix3QkFBd0IsaUJBQWlCLGNBQWMsOEVBQThFLHdCQUF3QixpQ0FBaUMsa0JBQWtCLHVCQUF1QixnSEFBZ0gsWUFBWSxnQkFBZ0Isa0JBQWtCLDJDQUEyQyx1Q0FBdUMsZ0VBQWdFLHFDQUFxQyx3QkFBd0IsU0FBUyxNQUFNLHFDQUFxQyx1SkFBdUosdUVBQXVFLG9GQUFvRixzRkFBc0YsTUFBTSxnR0FBZ0csaUNBQWlDLFFBQVEsbUhBQW1ILDZCQUE2Qix1Q0FBdUMsa0JBQWtCLGtCQUFrQiwyQkFBMkIsMENBQTBDLDRFQUE0RSw2REFBNkQsSUFBSSxjQUFjLHFKQUFxSixnSkFBZ0osY0FBYyxvRkFBb0YsOEVBQThFLGNBQWMsNEJBQTRCLGNBQWMsZ0RBQWdELElBQUksbUJBQW1CLFNBQVMsY0FBYyxnSEFBZ0gsV0FBVyxnQkFBZ0IsaUNBQWlDLCtEQUErRCwrSUFBK0ksdURBQXVELHNCQUFzQixjQUFjLFdBQVcsK0NBQStDLDBDQUEwQywrREFBK0QsdUJBQXVCLGdDQUFnQyxxQ0FBcUMsNkJBQTZCLGtCQUFrQixXQUFXLGlCQUFpQixzQkFBc0IseUJBQXlCLHNKQUFzSixjQUFjLGFBQWEsYUFBYSxlQUFlLElBQUkseUZBQXlGLDJMQUEyTCw0REFBNEQsc0JBQXNCLGdDQUFnQyxtR0FBbUcsbUNBQW1DLG1CQUFtQixnQkFBZ0Isc0NBQXNDLE1BQU0sU0FBUyxRQUFRLElBQUksbUNBQW1DLHNDQUFzQywwQkFBMEIsNEJBQTRCLEtBQUssS0FBSyxpQkFBaUIsSUFBSSwwQkFBMEIsS0FBSyxNQUFNLGNBQWMsU0FBUyxvQkFBb0IsZUFBZSxpQkFBaUIsNkJBQTZCLGVBQWUsZUFBZSxZQUFZLElBQUksS0FBSyxtQ0FBbUMsaUJBQWlCLFNBQVMsU0FBUyxvQkFBb0IsZ0NBQWdDLG9CQUFvQixxQkFBcUIsaUJBQWlCLFdBQVcsZ0NBQWdDLFNBQVMsV0FBVyxvQkFBb0Isa0JBQWtCLG9CQUFvQixxQkFBcUIsb0JBQW9CLHVCQUF1Qix1QkFBdUIsd0JBQXdCLHlEQUF5RCxTQUFTLHNCQUFzQixrQkFBa0IsNEVBQTRFLGtCQUFrQix1QkFBdUIsaUJBQWlCLElBQUksRUFBRSxzREFBc0Qsb0JBQW9CLG9CQUFvQixNQUFNLDREQUE0RCxNQUFNLG1IQUFtSCxNQUFNLDZJQUE2SSxtR0FBbUcsbUJBQW1CLGVBQWUsbURBQW1ELGFBQWEsS0FBSyxJQUFJLHNEQUFzRCxTQUFTLElBQUksZ0RBQWdELElBQUksd0JBQXdCLG9CQUFvQiw4Q0FBOEMsV0FBVyxjQUFjLFNBQVMsVUFBVSxvU0FBb1MsNkJBQTZCLHdDQUF3Qyw4Q0FBOEMsNkJBQTZCLDRDQUE0QyxtSEFBbUgscURBQXFELHlDQUF5QyxnQkFBZ0IsMkZBQTJGLHVCQUF1QixxRkFBcUYsUUFBUSwyQkFBMkIsWUFBWSwrQkFBK0IsWUFBWSx3QkFBd0Isa0RBQWtELHlCQUF5Qix5T0FBeU8sa0JBQWtCLGtEQUFrRCxJQUFJLG9CQUFvQixjQUFjLE1BQU0sc0JBQXNCLDBCQUEwQixnQ0FBZ0MsaUpBQWlKLGtCQUFrQix3QkFBd0Isd0ZBQXdGLGtDQUFrQyxNQUFNLDBCQUEwQixXQUFXLG1CQUFtQiwyQkFBMkIsUUFBUSxXQUFXLEtBQUssV0FBVyxvSEFBb0gsd0JBQXdCLFNBQVMsdUVBQXVFLGtCQUFrQiw0RUFBNEUsWUFBWSxJQUFJLG1CQUFtQixZQUFZLCtCQUErQixrQkFBa0IsNEVBQTRFLFlBQVksSUFBSSxtQ0FBbUMsWUFBWSwrQkFBK0Isa0JBQWtCLDRFQUE0RSxZQUFZLElBQUksbUVBQW1FLFlBQVksaUNBQWlDLGtCQUFrQixpRUFBaUUsU0FBUyxtREFBbUQsOERBQThELCtCQUErQixtQkFBbUIsV0FBVyw2QkFBNkIsMENBQTBDLCtCQUErQiw2Q0FBNkMsZ0NBQWdDLHVFQUF1RSx5REFBeUQsNkJBQTZCLHVCQUF1QixnRkFBZ0YsbUVBQW1FLHVDQUF1QyxnQ0FBZ0MsK0JBQStCLDhDQUE4QyxFQUFFLCtEQUErRCx5Q0FBeUMsc0xBQXNMLCtLQUErSyx1QkFBdUIsaUJBQWlCLGlCQUFpQixxQkFBcUIscUdBQXFHLElBQUksb0JBQW9CLGNBQWMsTUFBTSxzQkFBc0Isc0NBQXNDLCtCQUErQixxQ0FBcUMsd0JBQXdCLHlDQUF5Qyx3QkFBd0IscUNBQXFDLHlDQUF5Qyw2REFBNkQsS0FBSywyR0FBMkcsa0VBQWtFLG9CQUFvQixpSUFBaUksY0FBYyxjQUFjLFdBQVcsK0JBQStCLDRDQUE0QyxpQ0FBaUMsK0NBQStDLGtDQUFrQyx5RUFBeUUseURBQXlELDZCQUE2QiwrQkFBK0IsT0FBTyxtRUFBbUUsV0FBVyxrQkFBa0IsU0FBUyx1QkFBdUIsWUFBWSxJQUFJLHFDQUFxQyxTQUFTLGtCQUFrQixTQUFTLHVCQUF1QixZQUFZLElBQUksaUNBQWlDLFNBQVMsa0JBQWtCLGVBQWUsdUNBQXVDLGlCQUFpQixJQUFJLGVBQWUsU0FBUyxrQkFBa0IsZ0NBQWdDLFdBQVcsNkNBQTZDLFNBQVMsa0JBQWtCLDBEQUEwRCx1RUFBdUUsd0JBQXdCLHFGQUFxRixzRUFBc0UsMkRBQTJELHdCQUF3QiwyREFBMkQsa0RBQWtELHNCQUFzQiwyREFBMkQsc0JBQXNCLDJEQUEyRCxnQ0FBZ0Msa0JBQWtCLGtHQUFrRyx5QkFBeUIsaUNBQWlDLHdDQUF3QyxvQ0FBb0MsMEJBQTBCLGdCQUFnQixnQkFBZ0IsU0FBUyx3Q0FBd0Msb0NBQW9DLDBCQUEwQixjQUFjLGtCQUFrQixTQUFTLHFDQUFxQyw0Q0FBNEMsd0NBQXdDLHlEQUF5RCx3Q0FBd0MseURBQXlELHdDQUF3Qyw0RkFBNEYsd0NBQXdDLDRGQUE0Rix1Q0FBdUMsb0NBQW9DLDBCQUEwQixnQkFBZ0IsZ0JBQWdCLDJDQUEyQyx1Q0FBdUMsb0NBQW9DLDhCQUE4QixjQUFjLGtCQUFrQiwyQ0FBMkMsb0NBQW9DLDJFQUEyRSx1Q0FBdUMsNkJBQTZCLDJCQUEyQiw4QkFBOEIsdUNBQXVDLDZCQUE2QiwyQkFBMkIsOEJBQThCLHVDQUF1QyxxRkFBcUYsdUNBQXVDLHFGQUFxRix1Q0FBdUMsMkRBQTJELHVDQUF1QywyREFBMkQsd0NBQXdDLDJEQUEyRCx3Q0FBd0MsMkRBQTJELDJDQUEyQywwREFBMEQsWUFBWSxrQkFBa0IsZ0JBQWdCLG1CQUFtQixXQUFXLDJDQUEyQywwREFBMEQsY0FBYyxvQkFBb0IsaUJBQWlCLG1CQUFtQixXQUFXLHdDQUF3Qyw0REFBNEQsMkNBQTJDLDhFQUE4RSwyQ0FBMkMsOEVBQThFLDJDQUEyQyxxSEFBcUgsMkNBQTJDLHFIQUFxSCwwQ0FBMEMsbUJBQW1CLHdCQUF3QixxQkFBcUIsZ0JBQWdCLGtCQUFrQixnQkFBZ0IsNkRBQTZELFdBQVcsMENBQTBDLG1CQUFtQix3QkFBd0IscUJBQXFCLGtCQUFrQixvQkFBb0IsaUJBQWlCLDZEQUE2RCxXQUFXLHVDQUF1QyxnRkFBZ0YsMENBQTBDLG1GQUFtRiwwQ0FBMEMsbUZBQW1GLDBDQUEwQywrSEFBK0gsMENBQTBDLHVKQUF1SiwwQ0FBMEMsd0JBQXdCLDBDQUEwQyx3QkFBd0IsMkNBQTJDLHdCQUF3QiwyQ0FBMkMsd0JBQXdCLG9DQUFvQyxxRUFBcUUsd0dBQXdHLDBDQUEwQyx5REFBeUQsa0VBQWtFLHVEQUF1RCxnRUFBZ0UsVUFBVSx1RkFBdUYseUNBQXlDLEtBQUsscUJBQXFCLDJEQUEyRCxTQUFTLG9DQUFvQyx1QkFBdUIsc0tBQXNLLG9GQUFvRixpQkFBaUIsc0JBQXNCLDBDQUEwQyxpQ0FBaUMsZ0ZBQWdGLG9CQUFvQixNQUFNLDZFQUE2RSxJQUFJLGNBQWMsS0FBSyw2Q0FBNkMsa0ZBQWtGLFFBQVEsTUFBTSxxQkFBcUIsYUFBYSwyQkFBMkIsY0FBYyw4Q0FBOEMsZ0JBQWdCLE1BQU0sU0FBUyxtQ0FBbUMsSUFBSSxLQUFLLHVDQUF1QyxPQUFPLFlBQVksK0JBQStCLFNBQVMsWUFBWSwrQkFBK0IsU0FBUyxJQUFJLFNBQVMsWUFBWSxtQ0FBbUMsU0FBUyw4QkFBOEIsdUNBQXVDLGlCQUFpQixrQkFBa0IsVUFBVSxnQkFBZ0Isa0JBQWtCLDBCQUEwQixpQkFBaUIsa0JBQWtCLHVDQUF1QyxLQUFLLHNEQUFzRCxrQkFBa0IscURBQXFELFNBQVMsY0FBYyxpQ0FBaUMsa0VBQWtFLEtBQUssY0FBYyxRQUFRLFNBQVMsS0FBSyxvQkFBb0IsWUFBWSxtQ0FBbUMsZ0JBQWdCLFNBQVMsZ0JBQWdCLDJHQUEyRyxjQUFjLGFBQWEsRUFBRSwyQkFBMkIsc0JBQXNCLGFBQWEsK0ZBQStGLGNBQWMsZ0RBQWdELGdCQUFnQiw0QkFBNEIsa0JBQWtCLHFCQUFxQiwwQkFBMEIseUJBQXlCLGtCQUFrQixPQUFPLGdHQUFnRyxpQ0FBaUMsYUFBYSxnQkFBZ0IsaUNBQWlDLHdCQUF3QixTQUFTLFdBQVcsS0FBSyxXQUFXLDhCQUE4QiwyREFBMkQsVUFBVSxFQUFFLHFGQUFxRixzQkFBc0IsYUFBYSwrQkFBK0IsMEJBQTBCLHdCQUF3QixzQkFBc0IsV0FBVyxRQUFRLFFBQVEsb0JBQW9CLDREQUE0RCx3QkFBd0Isc0NBQXNDLElBQUksdUJBQXVCLFdBQVcsTUFBTSxXQUFXLGlDQUFpQywwQkFBMEIsV0FBVyxvQkFBb0IsT0FBTyxNQUFNLDRDQUE0QyxLQUFLLFdBQVcsRUFBRSxpREFBaUQsV0FBVyxNQUFNLG9CQUFvQix1QkFBdUIsbUhBQW1ILEVBQUUsa0RBQWtELHNCQUFzQixhQUFhLGtDQUFrQywwQkFBMEIsc0dBQXNHLGdCQUFnQix1Q0FBdUMsMEJBQTBCLG9CQUFvQixtQ0FBbUMsSUFBSSxLQUFLLGdDQUFnQyw0REFBNEQsVUFBVSwyQkFBMkIsV0FBVyxXQUFXLHVEQUF1RCxVQUFVLG1DQUFtQyxJQUFJLHVCQUF1QixJQUFJLEtBQUssZ0dBQWdHLDBEQUEwRCxTQUFTLE1BQU0scURBQXFELDRFQUE0RSxLQUFLLHVCQUF1QixFQUFFLEtBQUssV0FBVyxFQUFFLGNBQWMsY0FBYyxPQUFPLEtBQUssWUFBWSxJQUFJLEtBQUssZUFBZSwwREFBMEQsUUFBUSx3QkFBd0Isc0JBQXNCLGdCQUFnQixXQUFXLDRCQUE0QixvQkFBb0IsUUFBUSxpQ0FBaUMsU0FBUywrQ0FBK0MsZ0JBQWdCLG9HQUFvRyxFQUFFLEVBQUUsMkJBQTJCLHVCQUF1QixhQUFhLHlFQUF5RSxzQkFBc0IsNkRBQTZELG9CQUFvQix5Q0FBeUMsZ0JBQWdCLGtEQUFrRCx5REFBeUQsZ0JBQWdCLG9CQUFvQixzQkFBc0Isd0NBQXdDLElBQUksS0FBSyx1Q0FBdUMsZ0NBQWdDLGdDQUFnQyxxQkFBcUIsaUJBQWlCLGVBQWUsZ0NBQWdDLGdDQUFnQyxzQkFBc0IsZ0JBQWdCLE1BQU0scUhBQXFILGtCQUFrQixzREFBc0QsMERBQTBELGtCQUFrQixVQUFVLGNBQWMseUJBQXlCLHlDQUF5Qyx3QkFBd0IsdUNBQXVDLElBQUksaUNBQWlDLFlBQVksSUFBSSxLQUFLLCtCQUErQixpR0FBaUcsVUFBVSxzSEFBc0gsSUFBSSxLQUFLLG9CQUFvQixpREFBaUQsVUFBVSxFQUFFLG9EQUFvRCx1QkFBdUIsYUFBYSxnQ0FBZ0MsZ0JBQWdCLDBCQUEwQix3QkFBd0IsMkJBQTJCLElBQUksWUFBWSxtQkFBbUIsa0JBQWtCLGtCQUFrQix1QkFBdUIsSUFBSSxpRkFBaUYsMEJBQTBCLFlBQVksZ0JBQWdCLDRCQUE0QixxQkFBcUIsc0VBQXNFLG9DQUFvQyxpQkFBaUIsb0NBQW9DLCtCQUErQixpQkFBaUIsNkNBQTZDLDBCQUEwQix1Q0FBdUMsSUFBSSwrQkFBK0IsU0FBUyxzQkFBc0IsOENBQThDLHNHQUFzRyxvQkFBb0IseUNBQXlDLElBQUksa0NBQWtDLElBQUksMkJBQTJCLFNBQVMsb0JBQW9CLHlDQUF5QyxJQUFJLGtDQUFrQyxJQUFJLE1BQU0sb0JBQW9CLGlDQUFpQyxVQUFVLEVBQUUsMkJBQTJCLHVCQUF1QixhQUFhLHNCQUFzQiw4Q0FBOEMsZ0NBQWdDLFlBQVkseUJBQXlCLG1DQUFtQyxVQUFVLFNBQVMsY0FBYyxZQUFZLGFBQWEsVUFBVSxTQUFTLGNBQWMsWUFBWSxVQUFVLElBQUksbUJBQW1CLEtBQUssTUFBTSxpQkFBaUIsS0FBSyxNQUFNLFlBQVksd0JBQXdCLHFCQUFxQixjQUFjLG9CQUFvQiw4SEFBOEgsMkJBQTJCLCtEQUErRCxLQUFLLDhEQUE4RCx1Q0FBdUMsV0FBVyxnR0FBZ0csR0FBRyx1QkFBdUIsYUFBYSxzQkFBc0IsZ0JBQWdCLFdBQVcsZ0JBQWdCLElBQUksc0JBQXNCLDZCQUE2QixVQUFVLEdBQUcsdUJBQXVCLGFBQWEsMENBQTBDLGdCQUFnQiwyQkFBMkIsSUFBSSxpQkFBaUIsU0FBUyxjQUFjLGVBQWUsa0JBQWtCLFlBQVksdURBQXVELFVBQVUsWUFBWSxJQUFJLEtBQUssWUFBWSxLQUFLLG1DQUFtQyxrQkFBa0IsMEJBQTBCLFFBQVEsV0FBVyxZQUFZLG1CQUFtQixRQUFRLElBQUksS0FBSyxPQUFPLFFBQVEsUUFBUSxXQUFXLFlBQVksU0FBUyxTQUFTLGNBQWMseUJBQXlCLDBDQUEwQyxXQUFXLGdCQUFnQixJQUFJLHVCQUF1QixTQUFTLDZCQUE2QixFQUFFLGtDQUFrQyx1QkFBdUIsc0JBQXNCLHVCQUF1QixXQUFXLHVCQUF1QixXQUFXLDZCQUE2Qiw4QkFBOEIsd0JBQXdCLEVBQUUsaUJBQWlCLHVCQUF1QiwwQkFBMEIsd0NBQXdDLEdBQUcsdUJBQXVCLGFBQWEsMEJBQTBCLE1BQU0sTUFBTSxJQUFJLGtDQUFrQyxXQUFXLEtBQUssV0FBVyxzQkFBc0IsSUFBSSxzQkFBc0IsbUJBQW1CLG9CQUFvQixVQUFVLEtBQUssV0FBVyxNQUFNLFNBQVMsc0JBQXNCLFlBQVksV0FBVyxLQUFLLFdBQVcsa0NBQWtDLFVBQVUsb01BQW9NLGNBQWMsV0FBVywyQkFBMkIsY0FBYyxrQ0FBa0MsV0FBVyxLQUFLLFdBQVcseURBQXlELFNBQVMsa0JBQWtCLHVDQUF1QyxXQUFXLEtBQUssK0JBQStCLDREQUE0RCxrQkFBa0IsWUFBWSxFQUFFLHdCQUF3QixRQUFRLElBQUksS0FBSyxxRkFBcUYsaUJBQWlCLFFBQVEsUUFBUSxJQUFJLEtBQUssTUFBTSwrQ0FBK0MsV0FBVyxRQUFRLElBQUksZ0NBQWdDLFNBQVMsZ0JBQWdCLDRCQUE0QixnQkFBZ0IsMkJBQTJCLHVDQUF1QyxrQkFBa0IsaUJBQWlCLGlCQUFpQixXQUFXLEtBQUssK0JBQStCLHNDQUFzQyxhQUFhLFdBQVcsS0FBSyxNQUFNLHFCQUFxQixzQ0FBc0Msc0JBQXNCLFFBQVEsUUFBUSxXQUFXLEtBQUssb0JBQW9CLHVEQUF1RCxZQUFZLGtCQUFrQixvQkFBb0Isa0NBQWtDLFdBQVcsS0FBSywrQkFBK0IscUhBQXFILFNBQVMsd0JBQXdCLFNBQVMseUJBQXlCLGtCQUFrQix1REFBdUQsNENBQTRDLDJCQUEyQixJQUFJLG1DQUFtQyxTQUFTLDJCQUEyQixXQUFXLHVCQUF1QiwrQkFBK0IsMkJBQTJCLElBQUksb0NBQW9DLDRCQUE0Qix3QkFBd0IsRUFBRSxRQUFRLFdBQVcsS0FBSyxXQUFXLE9BQU8sMEVBQTBFLE1BQU0sZUFBZSx5REFBeUQseUJBQXlCLGdDQUFnQyx3QkFBd0Isa0NBQWtDLGVBQWUsS0FBSyxLQUFLLG1EQUFtRCw2QkFBNkIsUUFBUSxRQUFRLE9BQU8sa0JBQWtCLGdCQUFnQixtQkFBbUIsRUFBRSxzQkFBc0Isb0NBQW9DLGdDQUFnQyxTQUFTLGFBQWEsK0NBQStDLEVBQUUsaUxBQWlMLHVCQUF1QixhQUFhLDRCQUE0QiwrQkFBK0Isd0JBQXdCLHdDQUF3QyxlQUFlLDJJQUEySSxnQkFBZ0IscUNBQXFDLEVBQUUsNEhBQTRILHVCQUF1QixhQUFhLGlCQUFpQixnQkFBZ0IsZ0JBQWdCLGdDQUFnQyw2SkFBNkosd0RBQXdELDhEQUE4RCxrREFBa0QsRUFBRSxVQUFVLHVCQUF1QixhQUFhLFdBQVcsbTBHQUFtMEcsR0FBRyx1QkFBdUIsYUFBYSxnREFBZ0Qsd0JBQXdCLDRGQUE0RixzREFBc0Qsd0ZBQXdGLGtLQUFrSyx1VUFBdVUsRUFBRSxxQ0FBcUMsdUJBQXVCLGFBQWEsYUFBYSx5REFBeUQsc0JBQXNCLGlCQUFpQixxREFBcUQsZ0RBQWdELG1DQUFtQyxtQ0FBbUMsNlJBQTZSLHNHQUFzRyxnQ0FBZ0MsSUFBSSxrQ0FBa0MsaURBQWlELDZGQUE2RixlQUFlLHVDQUF1Qyw2QkFBNkIscUJBQXFCLHlEQUF5RCxvRkFBb0YscUJBQXFCLGlEQUFpRCwwQkFBMEIsNEJBQTRCLG9OQUFvTixxSUFBcUksNENBQTRDLE9BQU8sMkJBQTJCLE9BQU8sMERBQTBELGdIQUFnSCxFQUFFLEVBQUUsZ0RBQWdELHVCQUF1QixhQUFhLDJEQUEyRCxzQkFBc0IsYUFBYSxzS0FBc0ssRUFBRSxrREFBa0QsdUJBQXVCLGFBQWEsaUJBQWlCLFdBQVcsZ0hBQWdILCtDQUErQyw2QkFBNkIseUNBQXlDLFlBQVksSUFBSSxxR0FBcUcsVUFBVSxtQkFBbUIsbUZBQW1GLHNLQUFzSyxFQUFFLFlBQVksdUJBQXVCLGFBQWEsV0FBVyx1RkFBdUYsR0FBRyx1QkFBdUIsV0FBVyxNQUFNLHNCQUFzQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLHlCQUF5QixFQUFFLHNCQUFzQixRQUFRLHNCQUFzQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLHNCQUFzQixRQUFRLG9CQUFvQixFQUFFLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixTQUFTLHdCQUF3QixFQUFFLHdCQUF3QixXQUFXLHdCQUF3QixFQUFFLHdCQUF3QixXQUFXLHdCQUF3QixFQUFFLDBCQUEwQixXQUFXLHNCQUFzQixFQUFFLHdCQUF3QixXQUFXLHNCQUFzQixFQUFFLHdCQUF3QixTQUFTLG9CQUFvQixFQUFFLDJCQUEyQixFQUFFLDZCQUE2QixFQUFFLDBCQUEwQixXQUFXLG9CQUFvQixFQUFFLDZCQUE2QixFQUFFLDBCQUEwQixVQUFVLG9CQUFvQixFQUFFLDBCQUEwQixXQUFXLHNCQUFzQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDRCQUE0QixFQUFFLDBCQUEwQixFQUFFLDZCQUE2QixFQUFFLDRCQUE0QixFQUFFLDZCQUE2QixFQUFFLDBCQUEwQixXQUFXLHNCQUFzQixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDZCQUE2QixFQUFFLDRCQUE0QixFQUFFLDZCQUE2QixFQUFFLDBCQUEwQixXQUFXLHVCQUF1QixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixFQUFFLDZCQUE2QixFQUFFLDBCQUEwQixZQUFZLHNCQUFzQixFQUFFLHNCQUFzQixTQUFTLHVCQUF1QixFQUFFLDRCQUE0QixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLHdCQUF3QixXQUFXLHNCQUFzQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLHNCQUFzQixZQUFZLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLHNCQUFzQixhQUFhLHdCQUF3QixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLHdCQUF3QixjQUFjLG9CQUFvQixFQUFFLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixVQUFVLHNCQUFzQixFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixhQUFhLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixVQUFVLDRCQUE0QixFQUFFLDRCQUE0QixZQUFZLHNCQUFzQixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLHlCQUF5QixZQUFZLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixVQUFVLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDRCQUE0QixFQUFFLDBCQUEwQixXQUFXLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLHlCQUF5QixTQUFTLHdCQUF3QixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLHdCQUF3QixTQUFTLHdCQUF3QixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixFQUFFLHdCQUF3QixtQkFBbUIsd0JBQXdCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUsd0JBQXdCLEVBQUUseUJBQXlCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUsd0JBQXdCLGVBQWUsdUJBQXVCLEVBQUUseUJBQXlCLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsMEJBQTBCLFNBQVMsdUJBQXVCLEVBQUUseUJBQXlCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsMkJBQTJCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsMEJBQTBCLGdCQUFnQix1QkFBdUIsRUFBRSx5QkFBeUIsRUFBRSx5QkFBeUIsRUFBRSwwQkFBMEIsRUFBRSx5QkFBeUIsRUFBRSwwQkFBMEIsRUFBRSw0QkFBNEIsRUFBRSw0QkFBNEIsRUFBRSwwQkFBMEIsWUFBWSx1QkFBdUIsRUFBRSx5QkFBeUIsRUFBRSwyQkFBMkIsRUFBRSwyQkFBMkIsRUFBRSwyQkFBMkIsRUFBRSw0QkFBNEIsRUFBRSw0QkFBNEIsRUFBRSw0QkFBNEIsRUFBRSwwQkFBMEIsdUJBQXVCLHVCQUF1QixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixFQUFFLDBCQUEwQixzQkFBc0Isc0JBQXNCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsMEJBQTBCLFdBQVcscUJBQXFCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLFFBQVEsdUJBQXVCLEVBQUUseUJBQXlCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUseUJBQXlCLFVBQVUseUJBQXlCLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLGFBQWEsd0JBQXdCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVB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QTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7O0FDalJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztB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QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGdEQUFnRDtBQUNoRCxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7Ozs7Ozs7O0FDOVBEO0FBQ0EsWUFBWSxtQkFBTyxDQUFDLDBFQUFpQjtBQUNyQyxXQUFXLG1CQUFPLENBQUMsK0VBQWdCO0FBQ25DLGFBQWEsbUJBQU8sQ0FBQyxzREFBZTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsMERBQWlCO0FBQ3hDLFlBQVksbUJBQU8sQ0FBQyxvREFBYztBQUNsQyxhQUFhLG1CQUFPLENBQUMsc0RBQWU7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDRDQUE0QyxXQUFXO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCx1QkFBdUI7QUFDdkI7O0FBRUEsMEJBQTBCLGVBQWU7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhEQUE4RDtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7Ozs7Ozs7Ozs7OztBQzdJQTtBQUNBLGFBQWEsbUJBQU8sQ0FBQyw4Q0FBUTtBQUM3QixVQUFVLG1CQUFPLENBQUMsb0VBQWU7QUFDakMsY0FBYyxtQkFBTyxDQUFDLGtFQUFrQjtBQUN4QyxXQUFXLG1CQUFPLENBQUMsdUVBQWdCOztBQUVuQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOzs7QUFHTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLGdCQUFnQixJQUFJO0FBQ3BCLGdCQUFnQjtBQUNoQixnQkFBZ0IsV0FBVztBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixXQUFXO0FBQzNCLGdCQUFnQixNQUFNO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVEQUF1RDtBQUN2RCxvREFBb0QsS0FBSztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsV0FBVztBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFdBQVc7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLGdCQUFnQixXQUFXO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLGdCQUFnQixFQUFFO0FBQ2xCLGdCQUFnQixFQUFFO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxxREFBcUQsUUFBUTtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7OztBQUlMO0FBQ0E7QUFDQSxnQkFBZ0IsRUFBRTtBQUNsQixnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSzs7OztBQUlMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7OztBQzliWTtBQUNiO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLDBEQUFpQjtBQUN4QyxhQUFhLG1CQUFPLENBQUMsc0RBQWU7QUFDcEMsOEJBQThCLGlCQUFpQixPQUFPO0FBQ3RELFdBQVcsbUJBQU8sQ0FBQyxrREFBYTtBQUNoQyxhQUFhLG1CQUFPLENBQUMsc0RBQWU7QUFDcEMsYUFBYSxtQkFBTyxDQUFDLHNEQUFlO0FBQ3BDLGVBQWUsbUJBQU8sQ0FBQywwREFBaUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLDBEQUFpQjtBQUN4QyxlQUFlLG1CQUFPLENBQUMsMERBQWlCO0FBQ3hDLGFBQWEsbUJBQU8sQ0FBQyxzREFBZTtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyw4REFBbUI7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLHdEQUFnQixFQUFFO0FBQ3pDLFVBQVUsbUJBQU8sQ0FBQyxnREFBWTtBQUM5QixhQUFhLG1CQUFPLENBQUMsc0RBQWU7QUFDcEMsWUFBWSxtQkFBTyxDQUFDLG9EQUFjO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyw2RUFBa0I7QUFDdkMsY0FBYyxtQkFBTyxDQUFDLHVFQUFnQjtBQUN0QyxnQkFBZ0IsbUJBQU8sQ0FBQywyREFBWTtBQUNwQztBQUNBOztBQUVBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLDRCQUE0QjtBQUNuRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLGdDQUFnQyxzQkFBc0IsR0FBRyxpQkFBaUI7QUFDMUUsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsWUFBWTtBQUMzQzs7QUFFQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNENBQTRDLFdBQVc7QUFDdkQ7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUVBQXFFLFNBQVM7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMseUNBQXlDO0FBQ3BGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixtREFBbUQsWUFBWSxZQUFZO0FBQzNFO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQSxpRUFBaUUsR0FBRyx1QkFBdUI7QUFDM0Y7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLGVBQWU7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1FQUFtRSxhQUFhO0FBQ2hGO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RCxHQUFHLGFBQWE7QUFDN0U7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsMkJBQTJCO0FBQ2xFO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLEtBQUs7QUFDTDtBQUNBLDBCQUEwQixhQUFhLEVBQUU7QUFDekMsMEJBQTBCO0FBQzFCO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSw4QkFBOEIsWUFBWTtBQUMxQztBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLFNBQVMsNkJBQTZCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUMxYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLEtBQTRELG9CQUFvQixtQkFBTyxDQUFDLG9EQUFRLEdBQUcsbUJBQU8sQ0FBQyw4REFBVztBQUN4SCxFQUFFLFNBQ3VGO0FBQ3pGLENBQUMsc0NBQXNDOztBQUV2QztBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLGtCQUFrQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0VBQWdFO0FBQ2hFOztBQUVBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUMsT0FBTzs7QUFFUDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7O0FBRTdEO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLE9BQU87OztBQUdQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCOztBQUU5QiwrQkFBK0I7O0FBRS9CLG1DQUFtQzs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7OztBQUdMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbURBQW1EOztBQUVuRDtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0M7O0FBRXRDO0FBQ0Esb0NBQW9DO0FBQ3BDOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUNBQW1DOztBQUVuQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBLDJDQUEyQyxTQUFTO0FBQ3BEOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4Q0FBOEMsU0FBUztBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1QkFBdUIsd0JBQXdCO0FBQy9DO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLCtCQUErQjtBQUMvQiw2Q0FBNkM7O0FBRTdDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNDQUFzQyw2RUFBNkU7O0FBRW5IO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjs7QUFFMUIseUJBQXlCOztBQUV6QixzQkFBc0I7O0FBRXRCLDRCQUE0Qjs7QUFFNUIsOEJBQThCOztBQUU5QixtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7O0FBR0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9EQUFvRDs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQ0FBMkM7O0FBRTNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EseUNBQXlDLDBFQUEwRTtBQUNuSDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsMkNBQTJDLFNBQVM7QUFDcEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCOztBQUU1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87O0FBRVA7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0dBQWdHOztBQUVoRztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsRUFBRTs7QUFFWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsRUFBRTs7QUFFWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxFQUFFOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLEVBQUU7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsc0NBQXNDLCtFQUErRTs7QUFFckg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHlFQUF5RTs7QUFFekU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSzs7QUFFTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVJQUF1STs7QUFFdkk7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLLEVBQUU7O0FBRVAsc0NBQXNDLE9BQU87QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQSwwQ0FBMEMsU0FBUztBQUNuRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7O0FBR0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwyQ0FBMkM7QUFDM0M7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHlDQUF5Qyx3RUFBd0U7QUFDakg7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxXQUFXO0FBQ1g7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLCtCQUErQiw4RkFBOEY7O0FBRTdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCxzQ0FBc0M7QUFDdEM7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUNBQXlDOztBQUV6Qzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQSxLQUFLOzs7QUFHTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsK0JBQStCLCtEQUErRDs7QUFFOUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxnQ0FBZ0MsS0FBSztBQUNyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE9BQU87O0FBRVA7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsMkNBQTJDO0FBQzNDOztBQUVBLHdJQUF3STs7QUFFeEk7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBLGtDQUFrQyxLQUFLO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOzs7QUFHTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsK0JBQStCLHdGQUF3RjtBQUN2SDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdEQUFnRCxjQUFjOztBQUU5RCxDQUFDO0FBQ0Q7Ozs7Ozs7Ozs7OztBQ2wxSUEsY0FBYyxtQkFBTyxDQUFDLHVGQUFrQjs7QUFFeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDUkE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0EsQzs7Ozs7Ozs7Ozs7QUN2Q0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsUUFBUTtBQUNuQixZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsU0FBUztBQUNwQixXQUFXLFFBQVE7QUFDbkIsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRTs7Ozs7Ozs7Ozs7QUNsQ0EsMkJBQTJCLG1CQUFPLENBQUMsd0dBQW1EO0FBQ3RGO0FBQ0EsY0FBYyxRQUFTLHdPQUF3TyxvQkFBb0Isc0JBQXNCLHNCQUFzQixvQkFBb0IsbUJBQW1CLHNCQUFzQixzQkFBc0IscUJBQXFCLG9CQUFvQixvQkFBb0Isa0JBQWtCLG9CQUFvQix5QkFBeUIsdUJBQXVCLHlCQUF5Qix1QkFBdUIsb0JBQW9CLHVCQUF1QixzQkFBc0IscUJBQXFCLG9CQUFvQix1QkFBdUIsMkJBQTJCLDJCQUEyQiwyQkFBMkIsNEJBQTRCLGtPQUFrTyxzSEFBc0gsR0FBRyw4QkFBOEIsMkJBQTJCLEdBQUcsVUFBVSw0QkFBNEIsc0JBQXNCLG1DQUFtQyxrREFBa0QsR0FBRyxvRkFBb0YsbUJBQW1CLEdBQUcsVUFBVSxjQUFjLHFOQUFxTixvQkFBb0IscUJBQXFCLHFCQUFxQixtQkFBbUIscUJBQXFCLDJCQUEyQixHQUFHLDZCQUE2QiwwQkFBMEIsR0FBRyxRQUFRLDRCQUE0QixjQUFjLHNCQUFzQixHQUFHLDRCQUE0QixrQkFBa0IsMEJBQTBCLEdBQUcsT0FBTyxrQkFBa0Isd0JBQXdCLEdBQUcsNkNBQTZDLCtCQUErQiw4Q0FBOEMsc0NBQXNDLGlCQUFpQixxQkFBcUIsMkNBQTJDLG1DQUFtQyxHQUFHLGFBQWEsd0JBQXdCLHVCQUF1Qix5QkFBeUIsR0FBRyxrQkFBa0Isa0JBQWtCLHdCQUF3QixHQUFHLG1DQUFtQyxxQkFBcUIsR0FBRyxRQUFRLHFCQUFxQixHQUFHLFFBQVEseUJBQXlCLG1CQUFtQixHQUFHLGdCQUFnQixxQkFBcUIsR0FBRyxnQkFBZ0Isd0JBQXdCLEdBQUcsV0FBVyxtQkFBbUIsR0FBRyxlQUFlLHVCQUF1QixtQkFBbUIsbUJBQW1CLDZCQUE2QixHQUFHLFNBQVMsbUJBQW1CLEdBQUcsU0FBUyxlQUFlLEdBQUcsT0FBTyxtQkFBbUIsMEJBQTBCLGtDQUFrQyxHQUFHLGFBQWEsbUJBQW1CLCtCQUErQixHQUFHLG1DQUFtQyxtQkFBbUIsMEJBQTBCLEdBQUcsOEVBQThFLG1CQUFtQiwwQkFBMEIsR0FBRyx5Q0FBeUMsZUFBZSxHQUFHLDZCQUE2QiwwR0FBMEcsbUJBQW1CLEdBQUcsU0FBUyxrQkFBa0Isd0JBQXdCLG1CQUFtQixHQUFHLFlBQVkscUJBQXFCLEdBQUcsU0FBUywyQkFBMkIsdUJBQXVCLEdBQUcsU0FBUyxxQkFBcUIsMkJBQTJCLEdBQUcsV0FBVyw4QkFBOEIsR0FBRyxhQUFhLHlCQUF5Qiw0QkFBNEIsbUJBQW1CLHFCQUFxQix5QkFBeUIsR0FBRyxRQUFRLHdCQUF3QixHQUFHLFdBQVcsMEJBQTBCLDBCQUEwQixHQUFHLFlBQVkscUJBQXFCLEdBQUcsa0JBQWtCLHdCQUF3QiwrQ0FBK0MsR0FBRyxtREFBbUQsY0FBYyx5QkFBeUIsdUJBQXVCLHlCQUF5QixHQUFHLG9CQUFvQixzQkFBc0IsR0FBRyxxQkFBcUIseUJBQXlCLEdBQUcsWUFBWSxzQkFBc0IsR0FBRyx1RUFBdUUsK0JBQStCLEdBQUcsbUlBQW1JLG9CQUFvQixHQUFHLCtJQUErSSxlQUFlLHVCQUF1QixHQUFHLHNEQUFzRCwyQkFBMkIsZUFBZSxHQUFHLDBHQUEwRyxnQ0FBZ0MsR0FBRyxjQUFjLG1CQUFtQixxQkFBcUIsR0FBRyxjQUFjLGlCQUFpQixlQUFlLGNBQWMsY0FBYyxHQUFHLFlBQVksbUJBQW1CLGdCQUFnQixvQkFBb0IsZUFBZSx5QkFBeUIsc0JBQXNCLHlCQUF5QixtQkFBbUIsd0JBQXdCLEdBQUcsY0FBYyw2QkFBNkIsR0FBRyxpR0FBaUcsaUJBQWlCLEdBQUcsdUJBQXVCLHlCQUF5Qiw2QkFBNkIsR0FBRyxrREFBa0QsNkJBQTZCLEdBQUcsa0NBQWtDLGtCQUFrQiwrQkFBK0IsR0FBRyxZQUFZLDBCQUEwQixHQUFHLGFBQWEsdUJBQXVCLG9CQUFvQixHQUFHLGNBQWMsa0JBQWtCLEdBQUcsY0FBYyw2QkFBNkIsR0FBRywyREFBMkQsMEJBQTBCLHFCQUFxQixxQkFBcUIsR0FBRyxhQUFhLHNCQUFzQixHQUFHLGFBQWEsb0JBQW9CLEdBQUcsYUFBYSx1QkFBdUIsR0FBRyxhQUFhLHNCQUFzQixHQUFHLGFBQWEsdUJBQXVCLEdBQUcsYUFBYSxvQkFBb0IsR0FBRyxXQUFXLHVCQUF1QixxQkFBcUIsR0FBRyxnQkFBZ0Isb0JBQW9CLHFCQUFxQixxQkFBcUIsR0FBRyxnQkFBZ0Isc0JBQXNCLHFCQUFxQixxQkFBcUIsR0FBRyxnQkFBZ0Isc0JBQXNCLHFCQUFxQixxQkFBcUIsR0FBRyxnQkFBZ0Isc0JBQXNCLHFCQUFxQixxQkFBcUIsR0FBRyxRQUFRLHFCQUFxQix3QkFBd0IsY0FBYyw2Q0FBNkMsR0FBRyxvQkFBb0IsbUJBQW1CLHFCQUFxQixHQUFHLGtCQUFrQixtQkFBbUIsOEJBQThCLEdBQUcsb0JBQW9CLG9CQUFvQixxQkFBcUIsR0FBRyxrQkFBa0Isb0JBQW9CLHFCQUFxQixHQUFHLHVCQUF1QiwwQkFBMEIsR0FBRyx3Q0FBd0MseUJBQXlCLEdBQUcsaUJBQWlCLG1CQUFtQiw4QkFBOEIsR0FBRyxpQkFBaUIsd0JBQXdCLHVCQUF1QixHQUFHLHdCQUF3QixtQkFBbUIsbUJBQW1CLG1CQUFtQixHQUFHLGdDQUFnQyw4QkFBOEIsR0FBRyxnQkFBZ0Isb0JBQW9CLGlCQUFpQixHQUFHLG9CQUFvQixxQkFBcUIsMkJBQTJCLDhCQUE4QiwyQkFBMkIsb0JBQW9CLGlCQUFpQixHQUFHLGFBQWEsMEJBQTBCLEdBQUcsaUJBQWlCLDBCQUEwQixtQkFBbUIsR0FBRyxxQkFBcUIsbUJBQW1CLG1CQUFtQixHQUFHLFVBQVUscUJBQXFCLG1CQUFtQiwyQkFBMkIsR0FBRyxjQUFjLG1CQUFtQixHQUFHLFNBQVMsMkJBQTJCLHFCQUFxQixnQkFBZ0IsOEJBQThCLDBCQUEwQixHQUFHLGFBQWEsZUFBZSxvQkFBb0IscUJBQXFCLEdBQUcsU0FBUyxtQkFBbUIscUJBQXFCLG1CQUFtQixHQUFHLGNBQWMsdUJBQXVCLG1CQUFtQix1QkFBdUIsR0FBRyxxQkFBcUIsc0JBQXNCLHVCQUF1QixHQUFHLGdCQUFnQixnQkFBZ0Isd0JBQXdCLHVCQUF1Qix1QkFBdUIsc0JBQXNCLEdBQUcsK0JBQStCLGdCQUFnQix1QkFBdUIsS0FBSyxHQUFHLCtCQUErQixnQkFBZ0IsdUJBQXVCLEtBQUssR0FBRywrQkFBK0IsZ0JBQWdCLHVCQUF1QixLQUFLLEdBQUcsZ0NBQWdDLGdCQUFnQix3QkFBd0IsS0FBSyxHQUFHLHNCQUFzQixnQkFBZ0Isd0JBQXdCLHVCQUF1Qix1QkFBdUIsc0JBQXNCLEdBQUcsVUFBVSx5QkFBeUIsa0JBQWtCLHdCQUF3QixvQkFBb0Isd0JBQXdCLHVCQUF1QixHQUFHLGlCQUFpQixvQkFBb0IsbUJBQW1CLEdBQUcsMERBQTBELHFCQUFxQixvQkFBb0IsR0FBRyxxdkJBQXF2Qix1QkFBdUIsZ0JBQWdCLHdCQUF3Qix1QkFBdUIsR0FBRyxVQUFVLCtCQUErQixrQkFBa0IseUJBQXlCLGlCQUFpQixvQkFBb0IsR0FBRyxlQUFlLHVCQUF1QixtQkFBbUIsZ0JBQWdCLG9CQUFvQixHQUFHLFlBQVksNEJBQTRCLHdCQUF3Qix5QkFBeUIsR0FBRyxZQUFZLDZCQUE2Qix5QkFBeUIsMEJBQTBCLEdBQUcsWUFBWSxzQkFBc0Isa0JBQWtCLG1CQUFtQixHQUFHLFlBQVksNkJBQTZCLHlCQUF5QiwwQkFBMEIsR0FBRyxZQUFZLDZCQUE2Qix5QkFBeUIsMEJBQTBCLEdBQUcsWUFBWSxzQkFBc0Isa0JBQWtCLG1CQUFtQixHQUFHLFlBQVksNkJBQTZCLHlCQUF5QiwwQkFBMEIsR0FBRyxZQUFZLDZCQUE2Qix5QkFBeUIsMEJBQTBCLEdBQUcsWUFBWSxzQkFBc0Isa0JBQWtCLG1CQUFtQixHQUFHLGFBQWEsNkJBQTZCLHlCQUF5QiwwQkFBMEIsR0FBRyxhQUFhLDZCQUE2Qix5QkFBeUIsMEJBQTBCLEdBQUcsYUFBYSx1QkFBdUIsbUJBQW1CLG9CQUFvQixHQUFHLGtCQUFrQix1QkFBdUIsY0FBYyxHQUFHLGlCQUFpQix1QkFBdUIsY0FBYyxHQUFHLGNBQWMsc0JBQXNCLGFBQWEsR0FBRyxjQUFjLHNCQUFzQixhQUFhLEdBQUcsY0FBYyxzQkFBc0IsYUFBYSxHQUFHLGNBQWMsc0JBQXNCLGFBQWEsR0FBRyxjQUFjLHNCQUFzQixhQUFhLEdBQUcsY0FBYyxzQkFBc0IsYUFBYSxHQUFHLGNBQWMsc0JBQXNCLGFBQWEsR0FBRyxjQUFjLHNCQUFzQixhQUFhLEdBQUcsY0FBYyxzQkFBc0IsYUFBYSxHQUFHLGNBQWMsc0JBQXNCLGFBQWEsR0FBRyxlQUFlLHVCQUF1QixjQUFjLEdBQUcsZUFBZSx1QkFBdUIsY0FBYyxHQUFHLGVBQWUsdUJBQXVCLGNBQWMsR0FBRyxlQUFlLDJCQUEyQixHQUFHLGVBQWUsNEJBQTRCLEdBQUcsZUFBZSxxQkFBcUIsR0FBRyxlQUFlLDRCQUE0QixHQUFHLGVBQWUsNEJBQTRCLEdBQUcsZUFBZSxxQkFBcUIsR0FBRyxlQUFlLDRCQUE0QixHQUFHLGVBQWUsNEJBQTRCLEdBQUcsZUFBZSxxQkFBcUIsR0FBRyxnQkFBZ0IsNEJBQTRCLEdBQUcsZ0JBQWdCLDRCQUE0QixHQUFHLCtCQUErQixhQUFhLGlDQUFpQyxvQkFBb0IsMkJBQTJCLG1CQUFtQixzQkFBc0IsS0FBSyxrQkFBa0IseUJBQXlCLHFCQUFxQixrQkFBa0Isc0JBQXNCLEtBQUssZUFBZSw4QkFBOEIsMEJBQTBCLDJCQUEyQixLQUFLLGVBQWUsK0JBQStCLDJCQUEyQiw0QkFBNEIsS0FBSyxlQUFlLHdCQUF3QixvQkFBb0IscUJBQXFCLEtBQUssZUFBZSwrQkFBK0IsMkJBQTJCLDRCQUE0QixLQUFLLGVBQWUsK0JBQStCLDJCQUEyQiw0QkFBNEIsS0FBSyxlQUFlLHdCQUF3QixvQkFBb0IscUJBQXFCLEtBQUssZUFBZSwrQkFBK0IsMkJBQTJCLDRCQUE0QixLQUFLLGVBQWUsK0JBQStCLDJCQUEyQiw0QkFBNEIsS0FBSyxlQUFlLHdCQUF3QixvQkFBb0IscUJBQXFCLEtBQUssZ0JBQWdCLCtCQUErQiwyQkFBMkIsNEJBQTRCLEtBQUssZ0JBQWdCLCtCQUErQiwyQkFBMkIsNEJBQTRCLEtBQUssZ0JBQWdCLHlCQUF5QixxQkFBcUIsc0JBQXNCLEtBQUsscUJBQXFCLHlCQUF5QixnQkFBZ0IsS0FBSyxvQkFBb0IseUJBQXlCLGdCQUFnQixLQUFLLGlCQUFpQix3QkFBd0IsZUFBZSxLQUFLLGlCQUFpQix3QkFBd0IsZUFBZSxLQUFLLGlCQUFpQix3QkFBd0IsZUFBZSxLQUFLLGlCQUFpQix3QkFBd0IsZUFBZSxLQUFLLGlCQUFpQix3QkFBd0IsZUFBZSxLQUFLLGlCQUFpQix3QkFBd0IsZUFBZSxLQUFLLGlCQUFpQix3QkFBd0IsZUFBZSxLQUFLLGlCQUFpQix3QkFBd0IsZUFBZSxLQUFLLGlCQUFpQix3QkFBd0IsZUFBZSxLQUFLLGlCQUFpQix3QkFBd0IsZUFBZSxLQUFLLGtCQUFrQix5QkFBeUIsZ0JBQWdCLEtBQUssa0JBQWtCLHlCQUF5QixnQkFBZ0IsS0FBSyxrQkFBa0IseUJBQXlCLGdCQUFnQixLQUFLLGtCQUFrQixxQkFBcUIsS0FBSyxrQkFBa0IsNkJBQTZCLEtBQUssa0JBQWtCLDhCQUE4QixLQUFLLGtCQUFrQix1QkFBdUIsS0FBSyxrQkFBa0IsOEJBQThCLEtBQUssa0JBQWtCLDhCQUE4QixLQUFLLGtCQUFrQix1QkFBdUIsS0FBSyxrQkFBa0IsOEJBQThCLEtBQUssa0JBQWtCLDhCQUE4QixLQUFLLGtCQUFrQix1QkFBdUIsS0FBSyxtQkFBbUIsOEJBQThCLEtBQUssbUJBQW1CLDhCQUE4QixLQUFLLEdBQUcsK0JBQStCLGFBQWEsaUNBQWlDLG9CQUFvQiwyQkFBMkIsbUJBQW1CLHNCQUFzQixLQUFLLGtCQUFrQix5QkFBeUIscUJBQXFCLGtCQUFrQixzQkFBc0IsS0FBSyxlQUFlLDhCQUE4QiwwQkFBMEIsMkJBQTJCLEtBQUssZUFBZSwrQkFBK0IsMkJBQTJCLDRCQUE0QixLQUFLLGVBQWUsd0JBQXdCLG9CQUFvQixxQkFBcUIsS0FBSyxlQUFlLCtCQUErQiwyQkFBMkIsNEJBQTRCLEtBQUssZUFBZSwrQkFBK0IsMkJBQTJCLDRCQUE0QixLQUFLLGVBQWUsd0JBQXdCLG9CQUFvQixxQkFBcUIsS0FBSyxlQUFlLCtCQUErQiwyQkFBMkIsNEJBQTRCLEtBQUssZUFBZSwrQkFBK0IsMkJBQTJCLDRCQUE0QixLQUFLLGVBQWUsd0JBQXdCLG9CQUFvQixxQkFBcUIsS0FBSyxnQkFBZ0IsK0JBQStCLDJCQUEyQiw0QkFBNEIsS0FBSyxnQkFBZ0IsK0JBQStCLDJCQUEyQiw0QkFBNEIsS0FBSyxnQkFBZ0IseUJBQXlCLHFCQUFxQixzQkFBc0IsS0FBSyxxQkFBcUIseUJBQXlCLGdCQUFnQixLQUFLLG9CQUFvQix5QkFBeUIsZ0JBQWdCLEtBQUssaUJBQWlCLHdCQUF3QixlQUFlLEtBQUssaUJBQWlCLHdCQUF3QixlQUFlLEtBQUssaUJBQWlCLHdCQUF3QixlQUFlLEtBQUssaUJBQWlCLHdCQUF3QixlQUFlLEtBQUssaUJBQWlCLHdCQUF3QixlQUFlLEtBQUssaUJBQWlCLHdCQUF3QixlQUFlLEtBQUssaUJBQWlCLHdCQUF3QixlQUFlLEtBQUssaUJBQWlCLHdCQUF3QixlQUFlLEtBQUssaUJBQWlCLHdCQUF3QixlQUFlLEtBQUssaUJBQWlCLHdCQUF3QixlQUFlLEtBQUssa0JBQWtCLHlCQUF5QixnQkFBZ0IsS0FBSyxrQkFBa0IseUJBQXlCLGdCQUFnQixLQUFLLGtCQUFrQix5QkFBeUIsZ0JBQWdCLEtBQUssa0JBQWtCLHFCQUFxQixLQUFLLGtCQUFrQiw2QkFBNkIsS0FBSyxrQkFBa0IsOEJBQThCLEtBQUssa0JBQWtCLHVCQUF1QixLQUFLLGtCQUFrQiw4QkFBOEIsS0FBSyxrQkFBa0IsOEJBQThCLEtBQUssa0JBQWtCLHVCQUF1QixLQUFLLGtCQUFrQiw4QkFBOEIsS0FBSyxrQkFBa0IsOEJBQThCLEtBQUssa0JBQWtCLHVCQUF1QixLQUFLLG1CQUFtQiw4QkFBOEIsS0FBSyxtQkFBbUIsOEJBQThCLEtBQUssR0FBRywrQkFBK0IsYUFBYSxpQ0FBaUMsb0JBQW9CLDJCQUEyQixtQkFBbUIsc0JBQXNCLEtBQUssa0JBQWtCLHlCQUF5QixxQkFBcUIsa0JBQWtCLHNCQUFzQixLQUFLLGVBQWUsOEJBQThCLDBCQUEwQiwyQkFBMkIsS0FBSyxlQUFlLCtCQUErQiwyQkFBMkIsNEJBQTRCLEtBQUssZUFBZSx3QkFBd0Isb0JBQW9CLHFCQUFxQixLQUFLLGVBQWUsK0JBQStCLDJCQUEyQiw0QkFBNEIsS0FBSyxlQUFlLCtCQUErQiwyQkFBMkIsNEJBQTRCLEtBQUssZUFBZSx3QkFBd0Isb0JBQW9CLHFCQUFxQixLQUFLLGVBQWUsK0JBQStCLDJCQUEyQiw0QkFBNEIsS0FBSyxlQUFlLCtCQUErQiwyQkFBMkIsNEJBQTRCLEtBQUssZUFBZSx3QkFBd0Isb0JBQW9CLHFCQUFxQixLQUFLLGdCQUFnQiwrQkFBK0IsMkJBQTJCLDRCQUE0QixLQUFLLGdCQUFnQiwrQkFBK0IsMkJBQTJCLDRCQUE0QixLQUFLLGdCQUFnQix5QkFBeUIscUJBQXFCLHNCQUFzQixLQUFLLHFCQUFxQix5QkFBeUIsZ0JBQWdCLEtBQUssb0JBQW9CLHlCQUF5QixnQkFBZ0IsS0FBSyxpQkFBaUIsd0JBQXdCLGVBQWUsS0FBSyxpQkFBaUIsd0JBQXdCLGVBQWUsS0FBSyxpQkFBaUIsd0JBQXdCLGVBQWUsS0FBSyxpQkFBaUIsd0JBQXdCLGVBQWUsS0FBSyxpQkFBaUIsd0JBQXdCLGVBQWUsS0FBSyxpQkFBaUIsd0JBQXdCLGVBQWUsS0FBSyxpQkFBaUIsd0JBQXdCLGVBQWUsS0FBSyxpQkFBaUIsd0JBQXdCLGVBQWUsS0FBSyxpQkFBaUIsd0JBQXdCLGVBQWUsS0FBSyxpQkFBaUIsd0JBQXdCLGVBQWUsS0FBSyxrQkFBa0IseUJBQXlCLGdCQUFnQixLQUFLLGtCQUFrQix5QkFBeUIsZ0JBQWdCLEtBQUssa0JBQWtCLHlCQUF5QixnQkFBZ0IsS0FBSyxrQkFBa0IscUJBQXFCLEtBQUssa0JBQWtCLDZCQUE2QixLQUFLLGtCQUFrQiw4QkFBOEIsS0FBSyxrQkFBa0IsdUJBQXVCLEtBQUssa0JBQWtCLDhCQUE4QixLQUFLLGtCQUFrQiw4QkFBOEIsS0FBSyxrQkFBa0IsdUJBQXVCLEtBQUssa0JBQWtCLDhCQUE4QixLQUFLLGtCQUFrQiw4QkFBOEIsS0FBSyxrQkFBa0IsdUJBQXVCLEtBQUssbUJBQW1CLDhCQUE4QixLQUFLLG1CQUFtQiw4QkFBOEIsS0FBSyxHQUFHLGdDQUFnQyxhQUFhLGlDQUFpQyxvQkFBb0IsMkJBQTJCLG1CQUFtQixzQkFBc0IsS0FBSyxrQkFBa0IseUJBQXlCLHFCQUFxQixrQkFBa0Isc0JBQXNCLEtBQUssZUFBZSw4QkFBOEIsMEJBQTBCLDJCQUEyQixLQUFLLGVBQWUsK0JBQStCLDJCQUEyQiw0QkFBNEIsS0FBSyxlQUFlLHdCQUF3QixvQkFBb0IscUJBQXFCLEtBQUssZUFBZSwrQkFBK0IsMkJBQTJCLDRCQUE0QixLQUFLLGVBQWUsK0JBQStCLDJCQUEyQiw0QkFBNEIsS0FBSyxlQUFlLHdCQUF3QixvQkFBb0IscUJBQXFCLEtBQUssZUFBZSwrQkFBK0IsMkJBQTJCLDRCQUE0QixLQUFLLGVBQWUsK0JBQStCLDJCQUEyQiw0QkFBNEIsS0FBSyxlQUFlLHdCQUF3QixvQkFBb0IscUJBQXFCLEtBQUssZ0JBQWdCLCtCQUErQiwyQkFBMkIsNEJBQTRCLEtBQUssZ0JBQWdCLCtCQUErQiwyQkFBMkIsNEJBQTRCLEtBQUssZ0JBQWdCLHlCQUF5QixxQkFBcUIsc0JBQXNCLEtBQUsscUJBQXFCLHlCQUF5QixnQkFBZ0IsS0FBSyxvQkFBb0IseUJBQXlCLGdCQUFnQixLQUFLLGlCQUFpQix3QkFBd0IsZUFBZSxLQUFLLGlCQUFpQix3QkFBd0IsZUFBZSxLQUFLLGlCQUFpQix3QkFBd0IsZUFBZSxLQUFLLGlCQUFpQix3QkFBd0IsZUFBZSxLQUFLLGlCQUFpQix3QkFBd0IsZUFBZSxLQUFLLGlCQUFpQix3QkFBd0IsZUFBZSxLQUFLLGlCQUFpQix3QkFBd0IsZUFBZSxLQUFLLGlCQUFpQix3QkFBd0IsZUFBZSxLQUFLLGlCQUFpQix3QkFBd0IsZUFBZSxLQUFLLGlCQUFpQix3QkFBd0IsZUFBZSxLQUFLLGtCQUFrQix5QkFBeUIsZ0JBQWdCLEtBQUssa0JBQWtCLHlCQUF5QixnQkFBZ0IsS0FBSyxrQkFBa0IseUJBQXlCLGdCQUFnQixLQUFLLGtCQUFrQixxQkFBcUIsS0FBSyxrQkFBa0IsNkJBQTZCLEtBQUssa0JBQWtCLDhCQUE4QixLQUFLLGtCQUFrQix1QkFBdUIsS0FBSyxrQkFBa0IsOEJBQThCLEtBQUssa0JBQWtCLDhCQUE4QixLQUFLLGtCQUFrQix1QkFBdUIsS0FBSyxrQkFBa0IsOEJBQThCLEtBQUssa0JBQWtCLDhCQUE4QixLQUFLLGtCQUFrQix1QkFBdUIsS0FBSyxtQkFBbUIsOEJBQThCLEtBQUssbUJBQW1CLDhCQUE4QixLQUFLLEdBQUcsWUFBWSxnQkFBZ0Isd0JBQXdCLG1CQUFtQixHQUFHLDJCQUEyQixxQkFBcUIsd0JBQXdCLGtDQUFrQyxHQUFHLHFCQUFxQiwyQkFBMkIscUNBQXFDLEdBQUcsMEJBQTBCLGtDQUFrQyxHQUFHLGlDQUFpQyxvQkFBb0IsR0FBRyxxQkFBcUIsOEJBQThCLEdBQUcsNkNBQTZDLDhCQUE4QixHQUFHLHlEQUF5RCw2QkFBNkIsR0FBRyxnSEFBZ0gsY0FBYyxHQUFHLDhDQUE4QywwQ0FBMEMsR0FBRyxpQ0FBaUMsbUJBQW1CLDJDQUEyQyxHQUFHLGdFQUFnRSw4QkFBOEIsR0FBRyxvR0FBb0csMEJBQTBCLEdBQUcsdUNBQXVDLDhCQUE4QixHQUFHLHFGQUFxRiw4QkFBOEIsR0FBRyxzRUFBc0UsOEJBQThCLEdBQUcsNEdBQTRHLDBCQUEwQixHQUFHLHlDQUF5Qyw4QkFBOEIsR0FBRyx5RkFBeUYsOEJBQThCLEdBQUcsZ0VBQWdFLDhCQUE4QixHQUFHLG9HQUFvRywwQkFBMEIsR0FBRyx1Q0FBdUMsOEJBQThCLEdBQUcscUZBQXFGLDhCQUE4QixHQUFHLHVEQUF1RCw4QkFBOEIsR0FBRyx3RkFBd0YsMEJBQTBCLEdBQUcsb0NBQW9DLDhCQUE4QixHQUFHLCtFQUErRSw4QkFBOEIsR0FBRyxnRUFBZ0UsOEJBQThCLEdBQUcsb0dBQW9HLDBCQUEwQixHQUFHLHVDQUF1Qyw4QkFBOEIsR0FBRyxxRkFBcUYsOEJBQThCLEdBQUcsNkRBQTZELDhCQUE4QixHQUFHLGdHQUFnRywwQkFBMEIsR0FBRyxzQ0FBc0MsOEJBQThCLEdBQUcsbUZBQW1GLDhCQUE4QixHQUFHLDBEQUEwRCw4QkFBOEIsR0FBRyw0RkFBNEYsMEJBQTBCLEdBQUcscUNBQXFDLDhCQUE4QixHQUFHLGlGQUFpRiw4QkFBOEIsR0FBRyx1REFBdUQsOEJBQThCLEdBQUcsd0ZBQXdGLDBCQUEwQixHQUFHLG9DQUFvQyw4QkFBOEIsR0FBRywrRUFBK0UsOEJBQThCLEdBQUcsNkRBQTZELDJDQUEyQyxHQUFHLHNDQUFzQywyQ0FBMkMsR0FBRyxtRkFBbUYsMkNBQTJDLEdBQUcsMkJBQTJCLGdCQUFnQiw4QkFBOEIsMEJBQTBCLEdBQUcsNEJBQTRCLG1CQUFtQiw4QkFBOEIsMEJBQTBCLEdBQUcsaUJBQWlCLGdCQUFnQiw4QkFBOEIsR0FBRyw0REFBNEQsMEJBQTBCLEdBQUcsZ0NBQWdDLGNBQWMsR0FBRyx5REFBeUQsZ0RBQWdELEdBQUcsNENBQTRDLGdCQUFnQixpREFBaUQsR0FBRyxrQ0FBa0MsMEJBQTBCLHFCQUFxQixrQkFBa0IsdUJBQXVCLHdDQUF3QyxLQUFLLDRDQUE0QyxnQkFBZ0IsS0FBSyxHQUFHLGtDQUFrQywwQkFBMEIscUJBQXFCLGtCQUFrQix1QkFBdUIsd0NBQXdDLEtBQUssNENBQTRDLGdCQUFnQixLQUFLLEdBQUcsa0NBQWtDLDBCQUEwQixxQkFBcUIsa0JBQWtCLHVCQUF1Qix3Q0FBd0MsS0FBSyw0Q0FBNEMsZ0JBQWdCLEtBQUssR0FBRyxtQ0FBbUMsMEJBQTBCLHFCQUFxQixrQkFBa0IsdUJBQXVCLHdDQUF3QyxLQUFLLDRDQUE0QyxnQkFBZ0IsS0FBSyxHQUFHLHVCQUF1QixtQkFBbUIsZ0JBQWdCLHFCQUFxQixzQ0FBc0MsR0FBRyx5Q0FBeUMsY0FBYyxHQUFHLG1CQUFtQixtQkFBbUIsZ0JBQWdCLHdDQUF3Qyw4QkFBOEIsb0JBQW9CLHFCQUFxQixxQkFBcUIsbUJBQW1CLDJCQUEyQixpQ0FBaUMsOEJBQThCLDJCQUEyQiw2RUFBNkUsR0FBRyw2Q0FBNkMsbUJBQW1CLHVCQUF1QixLQUFLLEdBQUcsK0JBQStCLGtDQUFrQyxjQUFjLEdBQUcseUJBQXlCLG1CQUFtQiwyQkFBMkIsMEJBQTBCLGVBQWUscURBQXFELEdBQUcsOENBQThDLG1CQUFtQixlQUFlLEdBQUcscUNBQXFDLG1CQUFtQixlQUFlLEdBQUcseUNBQXlDLG1CQUFtQixlQUFlLEdBQUcsMENBQTBDLG1CQUFtQixlQUFlLEdBQUcsZ0NBQWdDLG1CQUFtQixlQUFlLEdBQUcscURBQXFELDhCQUE4QixlQUFlLEdBQUcsMENBQTBDLG1CQUFtQiwyQkFBMkIsR0FBRyw4Q0FBOEMsbUJBQW1CLGdCQUFnQixHQUFHLHFCQUFxQixzQ0FBc0MseUNBQXlDLHFCQUFxQix1QkFBdUIscUJBQXFCLEdBQUcsd0JBQXdCLG9DQUFvQyx1Q0FBdUMsdUJBQXVCLHFCQUFxQixHQUFHLHdCQUF3QixxQ0FBcUMsd0NBQXdDLHdCQUF3QixxQkFBcUIsR0FBRyw2QkFBNkIsbUJBQW1CLGdCQUFnQiwwQkFBMEIsNkJBQTZCLHFCQUFxQixxQkFBcUIsbUJBQW1CLGtDQUFrQyw4QkFBOEIsd0JBQXdCLEdBQUcsc0ZBQXNGLHFCQUFxQixvQkFBb0IsR0FBRyxzQkFBc0IsdUNBQXVDLDRCQUE0Qix3QkFBd0IscUJBQXFCLDBCQUEwQixHQUFHLHNCQUFzQixxQ0FBcUMseUJBQXlCLHVCQUF1QixxQkFBcUIsMEJBQTBCLEdBQUcsOERBQThELGlCQUFpQixHQUFHLDJCQUEyQixpQkFBaUIsR0FBRyxpQkFBaUIsd0JBQXdCLEdBQUcsZ0JBQWdCLG1CQUFtQix3QkFBd0IsR0FBRyxlQUFlLHlCQUF5QixrQkFBa0Isd0JBQXdCLG9CQUFvQix1QkFBdUIsc0JBQXNCLEdBQUcsc0RBQXNELHVCQUF1QixzQkFBc0IsR0FBRyxpQkFBaUIsdUJBQXVCLG1CQUFtQiwwQkFBMEIsR0FBRyx1QkFBdUIsdUJBQXVCLHVCQUF1QiwwQkFBMEIsR0FBRyxvREFBb0QsbUJBQW1CLEdBQUcsdUJBQXVCLHFCQUFxQixHQUFHLHdCQUF3QixnQ0FBZ0MseUJBQXlCLDJCQUEyQix3QkFBd0Isb0JBQW9CLDBCQUEwQixHQUFHLDBDQUEwQyxxQkFBcUIsa0JBQWtCLDRCQUE0QixtQkFBbUIsR0FBRyxxQkFBcUIsa0JBQWtCLGdCQUFnQix3QkFBd0IsbUJBQW1CLG1CQUFtQixHQUFHLG9CQUFvQix1QkFBdUIsY0FBYyxlQUFlLGtCQUFrQixvQkFBb0IsNEJBQTRCLHNCQUFzQix3QkFBd0IscUJBQXFCLGdCQUFnQiw2Q0FBNkMsMkJBQTJCLEdBQUcsZ0VBQWdFLDBCQUEwQix5Q0FBeUMsbVFBQW1RLGlDQUFpQyxnRUFBZ0UscUVBQXFFLEdBQUcsNEVBQTRFLDBCQUEwQixxREFBcUQsR0FBRyxvTUFBb00sbUJBQW1CLEdBQUcsZ0ZBQWdGLHlDQUF5Qyx1RkFBdUYsR0FBRyxrRUFBa0UsMEJBQTBCLDJEQUEyRCxzaEJBQXNoQixHQUFHLDhFQUE4RSwwQkFBMEIscURBQXFELEdBQUcsd01BQXdNLG1CQUFtQixHQUFHLHdOQUF3TixtQkFBbUIsR0FBRyxnSEFBZ0gsbUJBQW1CLEdBQUcsb05BQW9OLG1CQUFtQixHQUFHLGdJQUFnSSxtQkFBbUIsR0FBRyxnSkFBZ0osMEJBQTBCLEdBQUcsb09BQW9PLG1CQUFtQixHQUFHLGdLQUFnSywwQkFBMEIsOEJBQThCLEdBQUcsNEpBQTRKLHFEQUFxRCxHQUFHLHdMQUF3TCwwQkFBMEIsR0FBRyxvSEFBb0gsMEJBQTBCLEdBQUcsd05BQXdOLG1CQUFtQixHQUFHLGdJQUFnSSwwQkFBMEIscURBQXFELEdBQUcsdUJBQXVCLGtCQUFrQixnQkFBZ0Isd0JBQXdCLG1CQUFtQixtQkFBbUIsR0FBRyxzQkFBc0IsdUJBQXVCLGNBQWMsZUFBZSxrQkFBa0Isb0JBQW9CLDRCQUE0QixzQkFBc0Isd0JBQXdCLHFCQUFxQixnQkFBZ0IsNkNBQTZDLDJCQUEyQixHQUFHLG9FQUFvRSwwQkFBMEIseUNBQXlDLDZTQUE2UyxpQ0FBaUMsZ0VBQWdFLHFFQUFxRSxHQUFHLGdGQUFnRiwwQkFBMEIscURBQXFELEdBQUcsb05BQW9OLG1CQUFtQixHQUFHLG9GQUFvRix5Q0FBeUMsdUZBQXVGLEdBQUcsc0VBQXNFLDBCQUEwQiwyREFBMkQsZ2tCQUFna0IsR0FBRyxrRkFBa0YsMEJBQTBCLHFEQUFxRCxHQUFHLHdOQUF3TixtQkFBbUIsR0FBRyx3T0FBd08sbUJBQW1CLEdBQUcsb0hBQW9ILG1CQUFtQixHQUFHLG9PQUFvTyxtQkFBbUIsR0FBRyxvSUFBb0ksbUJBQW1CLEdBQUcsb0pBQW9KLDBCQUEwQixHQUFHLG9QQUFvUCxtQkFBbUIsR0FBRyxvS0FBb0ssMEJBQTBCLDhCQUE4QixHQUFHLGdLQUFnSyxxREFBcUQsR0FBRyw0TEFBNEwsMEJBQTBCLEdBQUcsd0hBQXdILDBCQUEwQixHQUFHLHdPQUF3TyxtQkFBbUIsR0FBRyxvSUFBb0ksMEJBQTBCLHFEQUFxRCxHQUFHLGtCQUFrQix5QkFBeUIsa0JBQWtCLDRCQUE0Qix3QkFBd0IsMkJBQTJCLHdCQUF3QixHQUFHLDhCQUE4QixnQkFBZ0IsR0FBRywrQkFBK0Isd0JBQXdCLDJCQUEyQixvQkFBb0IsNkJBQTZCLDBCQUEwQiw0QkFBNEIsOEJBQThCLHVCQUF1QixLQUFLLDhCQUE4QiwyQkFBMkIsb0JBQW9CLHlCQUF5QixxQkFBcUIsOEJBQThCLDBCQUEwQiw2QkFBNkIsMEJBQTBCLHVCQUF1QixLQUFLLGdDQUFnQyw0QkFBNEIsa0JBQWtCLDZCQUE2QixLQUFLLDBDQUEwQyw0QkFBNEIsS0FBSywrREFBK0Qsa0JBQWtCLEtBQUssOEJBQThCLDJCQUEyQixvQkFBb0IsNkJBQTZCLDBCQUEwQiw0QkFBNEIsOEJBQThCLGtCQUFrQixzQkFBc0IsS0FBSyxvQ0FBb0MseUJBQXlCLDJCQUEyQixxQkFBcUIsb0JBQW9CLDRCQUE0QixxQkFBcUIsS0FBSyxrQ0FBa0MsNkJBQTZCLDBCQUEwQiw0QkFBNEIsOEJBQThCLEtBQUssd0NBQXdDLHVCQUF1QixLQUFLLEdBQUcsVUFBVSwwQkFBMEIscUJBQXFCLG1CQUFtQix1QkFBdUIsMkJBQTJCLDhCQUE4QiwyQkFBMkIsMEJBQTBCLHNCQUFzQixrQ0FBa0Msa0NBQWtDLDhCQUE4QixvQkFBb0IscUJBQXFCLDJCQUEyQiwwSUFBMEksR0FBRyw2Q0FBNkMsVUFBVSx1QkFBdUIsS0FBSyxHQUFHLGdCQUFnQixtQkFBbUIsMEJBQTBCLEdBQUcsNEJBQTRCLGVBQWUscURBQXFELEdBQUcsa0NBQWtDLGtCQUFrQixHQUFHLDhDQUE4Qyx5QkFBeUIsR0FBRyxrQkFBa0IsZ0JBQWdCLDhCQUE4QiwwQkFBMEIsR0FBRyx3QkFBd0IsZ0JBQWdCLDhCQUE4QiwwQkFBMEIsR0FBRyw0Q0FBNEMscURBQXFELEdBQUcsa0RBQWtELGdCQUFnQiw4QkFBOEIsMEJBQTBCLEdBQUcsaUpBQWlKLGdCQUFnQiw4QkFBOEIsMEJBQTBCLEdBQUcsbUtBQW1LLHFEQUFxRCxHQUFHLG9CQUFvQixnQkFBZ0IsOEJBQThCLDBCQUEwQixHQUFHLDBCQUEwQixnQkFBZ0IsOEJBQThCLDBCQUEwQixHQUFHLGdEQUFnRCxzREFBc0QsR0FBRyxzREFBc0QsZ0JBQWdCLDhCQUE4QiwwQkFBMEIsR0FBRyx1SkFBdUosZ0JBQWdCLDhCQUE4QiwwQkFBMEIsR0FBRyx5S0FBeUssc0RBQXNELEdBQUcsa0JBQWtCLGdCQUFnQiw4QkFBOEIsMEJBQTBCLEdBQUcsd0JBQXdCLGdCQUFnQiw4QkFBOEIsMEJBQTBCLEdBQUcsNENBQTRDLG9EQUFvRCxHQUFHLGtEQUFrRCxnQkFBZ0IsOEJBQThCLDBCQUEwQixHQUFHLGlKQUFpSixnQkFBZ0IsOEJBQThCLDBCQUEwQixHQUFHLG1LQUFtSyxvREFBb0QsR0FBRyxlQUFlLGdCQUFnQiw4QkFBOEIsMEJBQTBCLEdBQUcscUJBQXFCLGdCQUFnQiw4QkFBOEIsMEJBQTBCLEdBQUcsc0NBQXNDLHFEQUFxRCxHQUFHLDRDQUE0QyxnQkFBZ0IsOEJBQThCLDBCQUEwQixHQUFHLHdJQUF3SSxnQkFBZ0IsOEJBQThCLDBCQUEwQixHQUFHLDBKQUEwSixxREFBcUQsR0FBRyxrQkFBa0IsbUJBQW1CLDhCQUE4QiwwQkFBMEIsR0FBRyx3QkFBd0IsbUJBQW1CLDhCQUE4QiwwQkFBMEIsR0FBRyw0Q0FBNEMscURBQXFELEdBQUcsa0RBQWtELG1CQUFtQiw4QkFBOEIsMEJBQTBCLEdBQUcsaUpBQWlKLG1CQUFtQiw4QkFBOEIsMEJBQTBCLEdBQUcsbUtBQW1LLHFEQUFxRCxHQUFHLGlCQUFpQixnQkFBZ0IsOEJBQThCLDBCQUEwQixHQUFHLHVCQUF1QixnQkFBZ0IsOEJBQThCLDBCQUEwQixHQUFHLDBDQUEwQyxvREFBb0QsR0FBRyxnREFBZ0QsZ0JBQWdCLDhCQUE4QiwwQkFBMEIsR0FBRyw4SUFBOEksZ0JBQWdCLDhCQUE4QiwwQkFBMEIsR0FBRyxnS0FBZ0ssb0RBQW9ELEdBQUcsZ0JBQWdCLG1CQUFtQiw4QkFBOEIsMEJBQTBCLEdBQUcsc0JBQXNCLG1CQUFtQiw4QkFBOEIsMEJBQTBCLEdBQUcsd0NBQXdDLHNEQUFzRCxHQUFHLDhDQUE4QyxtQkFBbUIsOEJBQThCLDBCQUEwQixHQUFHLDJJQUEySSxtQkFBbUIsOEJBQThCLDBCQUEwQixHQUFHLDZKQUE2SixzREFBc0QsR0FBRyxlQUFlLGdCQUFnQiw4QkFBOEIsMEJBQTBCLEdBQUcscUJBQXFCLGdCQUFnQiw4QkFBOEIsMEJBQTBCLEdBQUcsc0NBQXNDLG1EQUFtRCxHQUFHLDRDQUE0QyxnQkFBZ0IsOEJBQThCLDBCQUEwQixHQUFHLHdJQUF3SSxnQkFBZ0IsOEJBQThCLDBCQUEwQixHQUFHLDBKQUEwSixtREFBbUQsR0FBRywwQkFBMEIsbUJBQW1CLDBCQUEwQixHQUFHLGdDQUFnQyxnQkFBZ0IsOEJBQThCLDBCQUEwQixHQUFHLDREQUE0RCxvREFBb0QsR0FBRyxrRUFBa0UsbUJBQW1CLGtDQUFrQyxHQUFHLHlLQUF5SyxnQkFBZ0IsOEJBQThCLDBCQUEwQixHQUFHLDJMQUEyTCxvREFBb0QsR0FBRyw0QkFBNEIsbUJBQW1CLDBCQUEwQixHQUFHLGtDQUFrQyxnQkFBZ0IsOEJBQThCLDBCQUEwQixHQUFHLGdFQUFnRSxzREFBc0QsR0FBRyxzRUFBc0UsbUJBQW1CLGtDQUFrQyxHQUFHLCtLQUErSyxnQkFBZ0IsOEJBQThCLDBCQUEwQixHQUFHLGlNQUFpTSxzREFBc0QsR0FBRywwQkFBMEIsbUJBQW1CLDBCQUEwQixHQUFHLGdDQUFnQyxnQkFBZ0IsOEJBQThCLDBCQUEwQixHQUFHLDREQUE0RCxvREFBb0QsR0FBRyxrRUFBa0UsbUJBQW1CLGtDQUFrQyxHQUFHLHlLQUF5SyxnQkFBZ0IsOEJBQThCLDBCQUEwQixHQUFHLDJMQUEyTCxvREFBb0QsR0FBRyx1QkFBdUIsbUJBQW1CLDBCQUEwQixHQUFHLDZCQUE2QixnQkFBZ0IsOEJBQThCLDBCQUEwQixHQUFHLHNEQUFzRCxxREFBcUQsR0FBRyw0REFBNEQsbUJBQW1CLGtDQUFrQyxHQUFHLGdLQUFnSyxnQkFBZ0IsOEJBQThCLDBCQUEwQixHQUFHLGtMQUFrTCxxREFBcUQsR0FBRywwQkFBMEIsbUJBQW1CLDBCQUEwQixHQUFHLGdDQUFnQyxtQkFBbUIsOEJBQThCLDBCQUEwQixHQUFHLDREQUE0RCxvREFBb0QsR0FBRyxrRUFBa0UsbUJBQW1CLGtDQUFrQyxHQUFHLHlLQUF5SyxtQkFBbUIsOEJBQThCLDBCQUEwQixHQUFHLDJMQUEyTCxvREFBb0QsR0FBRyx5QkFBeUIsbUJBQW1CLDBCQUEwQixHQUFHLCtCQUErQixnQkFBZ0IsOEJBQThCLDBCQUEwQixHQUFHLDBEQUEwRCxvREFBb0QsR0FBRyxnRUFBZ0UsbUJBQW1CLGtDQUFrQyxHQUFHLHNLQUFzSyxnQkFBZ0IsOEJBQThCLDBCQUEwQixHQUFHLHdMQUF3TCxvREFBb0QsR0FBRyx3QkFBd0IsbUJBQW1CLDBCQUEwQixHQUFHLDhCQUE4QixtQkFBbUIsOEJBQThCLDBCQUEwQixHQUFHLHdEQUF3RCxzREFBc0QsR0FBRyw4REFBOEQsbUJBQW1CLGtDQUFrQyxHQUFHLG1LQUFtSyxtQkFBbUIsOEJBQThCLDBCQUEwQixHQUFHLHFMQUFxTCxzREFBc0QsR0FBRyx1QkFBdUIsbUJBQW1CLDBCQUEwQixHQUFHLDZCQUE2QixnQkFBZ0IsOEJBQThCLDBCQUEwQixHQUFHLHNEQUFzRCxtREFBbUQsR0FBRyw0REFBNEQsbUJBQW1CLGtDQUFrQyxHQUFHLGdLQUFnSyxnQkFBZ0IsOEJBQThCLDBCQUEwQixHQUFHLGtMQUFrTCxtREFBbUQsR0FBRyxlQUFlLHFCQUFxQixtQkFBbUIsMEJBQTBCLEdBQUcscUJBQXFCLG1CQUFtQiwrQkFBK0IsR0FBRyxzQ0FBc0MsK0JBQStCLHFCQUFxQixHQUFHLDRDQUE0QyxtQkFBbUIseUJBQXlCLEdBQUcsbUNBQW1DLHlCQUF5Qix1QkFBdUIscUJBQXFCLDBCQUEwQixHQUFHLG1DQUFtQyw0QkFBNEIsd0JBQXdCLHFCQUFxQiwwQkFBMEIsR0FBRyxnQkFBZ0IsbUJBQW1CLGdCQUFnQixHQUFHLDZCQUE2Qix1QkFBdUIsR0FBRywyR0FBMkcsZ0JBQWdCLEdBQUcsV0FBVyxxQ0FBcUMsR0FBRyw2Q0FBNkMsV0FBVyx1QkFBdUIsS0FBSyxHQUFHLHNCQUFzQixlQUFlLEdBQUcsMEJBQTBCLGtCQUFrQixHQUFHLGlCQUFpQix1QkFBdUIsY0FBYyxxQkFBcUIsa0NBQWtDLEdBQUcsNkNBQTZDLGlCQUFpQix1QkFBdUIsS0FBSyxHQUFHLGtEQUFrRCx1QkFBdUIsR0FBRyxzQkFBc0Isd0JBQXdCLEdBQUcsNkJBQTZCLDBCQUEwQix5QkFBeUIsNEJBQTRCLGtCQUFrQiw0QkFBNEIsMENBQTBDLHFCQUFxQix5Q0FBeUMsR0FBRyxtQ0FBbUMsbUJBQW1CLEdBQUcsb0JBQW9CLHVCQUF1QixjQUFjLFlBQVksa0JBQWtCLGtCQUFrQixnQkFBZ0IscUJBQXFCLHNCQUFzQix5QkFBeUIsb0JBQW9CLG1CQUFtQixxQkFBcUIscUJBQXFCLDJCQUEyQixpQ0FBaUMsMENBQTBDLDJCQUEyQixHQUFHLHlCQUF5QixnQkFBZ0IsWUFBWSxHQUFHLDBCQUEwQixhQUFhLGVBQWUsR0FBRywrQkFBK0IsNEJBQTRCLGtCQUFrQixjQUFjLEtBQUssNkJBQTZCLGVBQWUsaUJBQWlCLEtBQUssR0FBRywrQkFBK0IsNEJBQTRCLGtCQUFrQixjQUFjLEtBQUssNkJBQTZCLGVBQWUsaUJBQWlCLEtBQUssR0FBRywrQkFBK0IsNEJBQTRCLGtCQUFrQixjQUFjLEtBQUssNkJBQTZCLGVBQWUsaUJBQWlCLEtBQUssR0FBRyxnQ0FBZ0MsNEJBQTRCLGtCQUFrQixjQUFjLEtBQUssNkJBQTZCLGVBQWUsaUJBQWlCLEtBQUssR0FBRyw0QkFBNEIsY0FBYyxpQkFBaUIsa0JBQWtCLDRCQUE0QixHQUFHLHFDQUFxQywwQkFBMEIseUJBQXlCLDRCQUE0QixrQkFBa0Isa0JBQWtCLDBDQUEwQywrQkFBK0IseUNBQXlDLEdBQUcsMkNBQTJDLG1CQUFtQixHQUFHLCtCQUErQixXQUFXLGdCQUFnQixlQUFlLGtCQUFrQiwwQkFBMEIsR0FBRyx3Q0FBd0MsMEJBQTBCLHlCQUF5Qiw0QkFBNEIsa0JBQWtCLHdDQUF3QyxvQkFBb0IsMkNBQTJDLDZCQUE2QixHQUFHLDhDQUE4QyxtQkFBbUIsR0FBRyx3Q0FBd0Msc0JBQXNCLEdBQUcsOEJBQThCLFdBQVcsZ0JBQWdCLGVBQWUsa0JBQWtCLDJCQUEyQixHQUFHLHVDQUF1QywwQkFBMEIseUJBQXlCLDRCQUE0QixrQkFBa0IsR0FBRyx1Q0FBdUMsa0JBQWtCLEdBQUcsd0NBQXdDLDBCQUEwQiwwQkFBMEIsNEJBQTRCLGtCQUFrQix3Q0FBd0MsOEJBQThCLDJDQUEyQyxHQUFHLDZDQUE2QyxtQkFBbUIsR0FBRyx3Q0FBd0Msc0JBQXNCLEdBQUcsa0tBQWtLLGdCQUFnQixpQkFBaUIsR0FBRyx1QkFBdUIsY0FBYyxxQkFBcUIscUJBQXFCLGtDQUFrQyxHQUFHLG9CQUFvQixtQkFBbUIsZ0JBQWdCLDRCQUE0QixnQkFBZ0IscUJBQXFCLG1CQUFtQix3QkFBd0Isd0JBQXdCLGtDQUFrQyxjQUFjLEdBQUcsZ0RBQWdELG1CQUFtQiwwQkFBMEIsOEJBQThCLEdBQUcsa0RBQWtELGdCQUFnQiwwQkFBMEIsOEJBQThCLEdBQUcsc0RBQXNELG1CQUFtQix5QkFBeUIsa0NBQWtDLEdBQUcseUJBQXlCLG1CQUFtQixHQUFHLHNCQUFzQixtQkFBbUIsMkJBQTJCLHFCQUFxQix3QkFBd0IsbUJBQW1CLHdCQUF3QixHQUFHLHlCQUF5QixtQkFBbUIsNEJBQTRCLG1CQUFtQixHQUFHLHNDQUFzQyx1QkFBdUIsZ0NBQWdDLHlCQUF5QiwyQkFBMkIsR0FBRyxvREFBb0QsdUJBQXVCLHVCQUF1QixtQkFBbUIsR0FBRyxnRUFBZ0UsZUFBZSxHQUFHLDRMQUE0TCxlQUFlLEdBQUcsa0JBQWtCLHlCQUF5QixrQkFBa0Isd0JBQXdCLG9CQUFvQix5QkFBeUIsZ0NBQWdDLEdBQUcsK0JBQStCLGdCQUFnQixHQUFHLHFGQUFxRixzQkFBc0IsR0FBRyxnSEFBZ0gsK0JBQStCLGtDQUFrQyxHQUFHLDRGQUE0Riw4QkFBOEIsaUNBQWlDLEdBQUcsNEJBQTRCLDZCQUE2Qiw0QkFBNEIsR0FBRyxzSEFBc0gsbUJBQW1CLEdBQUcsOENBQThDLG9CQUFvQixHQUFHLHFGQUFxRiw0QkFBNEIsMkJBQTJCLEdBQUcscUZBQXFGLDJCQUEyQiwwQkFBMEIsR0FBRyx5QkFBeUIsK0JBQStCLDJCQUEyQiwwQkFBMEIsNEJBQTRCLDBCQUEwQiw0QkFBNEIsR0FBRyxtRUFBbUUsZ0JBQWdCLEdBQUcsdUdBQXVHLHFCQUFxQixHQUFHLGtJQUFrSSxrQ0FBa0MsaUNBQWlDLEdBQUcsOEdBQThHLDhCQUE4QiwrQkFBK0IsR0FBRyxzRUFBc0UscUJBQXFCLEdBQUcsdU9BQXVPLHVCQUF1QiwyQkFBMkIseUJBQXlCLEdBQUcsa0JBQWtCLHVCQUF1Qix5QkFBeUIsa0JBQWtCLHdCQUF3QixvQkFBb0IsNEJBQTRCLHlCQUF5QixnQkFBZ0IsR0FBRyx5SUFBeUksdUJBQXVCLHVCQUF1QixtQkFBbUIsY0FBYyxxQkFBcUIsR0FBRyxxbEJBQXFsQixzQkFBc0IsR0FBRywwSkFBMEosZUFBZSxHQUFHLDBEQUEwRCxlQUFlLEdBQUcsb0dBQW9HLCtCQUErQixrQ0FBa0MsR0FBRyxzR0FBc0csOEJBQThCLGlDQUFpQyxHQUFHLGlDQUFpQyx5QkFBeUIsa0JBQWtCLDJCQUEyQix3QkFBd0IsR0FBRyw4SUFBOEksK0JBQStCLGtDQUFrQyxHQUFHLHNFQUFzRSw4QkFBOEIsaUNBQWlDLEdBQUcsZ0RBQWdELHlCQUF5QixrQkFBa0IsR0FBRywwREFBMEQsdUJBQXVCLGVBQWUsR0FBRyxzRUFBc0UsZUFBZSxHQUFHLCtYQUErWCxzQkFBc0IsR0FBRywwQkFBMEIsdUJBQXVCLEdBQUcseUJBQXlCLHNCQUFzQixHQUFHLHVCQUF1Qix5QkFBeUIsa0JBQWtCLDJCQUEyQix3QkFBd0IsOEJBQThCLHFCQUFxQixvQkFBb0IscUJBQXFCLHFCQUFxQixtQkFBbUIsdUJBQXVCLHdCQUF3Qiw4QkFBOEIsOEJBQThCLDJCQUEyQixHQUFHLDBGQUEwRixrQkFBa0IsR0FBRyxzRkFBc0YscUNBQXFDLEdBQUcsZ1NBQWdTLHlCQUF5Qix1QkFBdUIscUJBQXFCLDBCQUEwQixHQUFHLHNGQUFzRix1Q0FBdUMsR0FBRyxnU0FBZ1MsNEJBQTRCLHdCQUF3QixxQkFBcUIsMEJBQTBCLEdBQUcseUVBQXlFLDJCQUEyQixHQUFHLG9hQUFvYSwrQkFBK0Isa0NBQWtDLEdBQUcsc1pBQXNaLDhCQUE4QixpQ0FBaUMsR0FBRyxxQkFBcUIsdUJBQXVCLG1CQUFtQix1QkFBdUIseUJBQXlCLEdBQUcsNEJBQTRCLGdDQUFnQyx5QkFBeUIsdUJBQXVCLEdBQUcsMkJBQTJCLHVCQUF1QixnQkFBZ0IsZUFBZSxHQUFHLG1FQUFtRSxnQkFBZ0IsMEJBQTBCLDhCQUE4QixHQUFHLGlFQUFpRSxxREFBcUQsR0FBRywrRUFBK0UsMEJBQTBCLEdBQUcsaUZBQWlGLGdCQUFnQiw4QkFBOEIsMEJBQTBCLEdBQUcsNERBQTRELG1CQUFtQixHQUFHLG9FQUFvRSw4QkFBOEIsR0FBRywyQkFBMkIsdUJBQXVCLHFCQUFxQix3QkFBd0IsR0FBRyxtQ0FBbUMsdUJBQXVCLGlCQUFpQixrQkFBa0IsbUJBQW1CLGdCQUFnQixpQkFBaUIseUJBQXlCLGtCQUFrQiwyQkFBMkIsOEJBQThCLEdBQUcsa0NBQWtDLHVCQUF1QixpQkFBaUIsa0JBQWtCLG1CQUFtQixnQkFBZ0IsaUJBQWlCLGtCQUFrQix3Q0FBd0MsR0FBRyxvREFBb0QsMkJBQTJCLEdBQUcsbUZBQW1GLG9OQUFvTixHQUFHLDBGQUEwRiwwQkFBMEIsOEJBQThCLEdBQUcseUZBQXlGLGlLQUFpSyxHQUFHLDZGQUE2Riw2Q0FBNkMsR0FBRyxtR0FBbUcsNkNBQTZDLEdBQUcsaURBQWlELHVCQUF1QixHQUFHLGdGQUFnRiw4SkFBOEosR0FBRywwRkFBMEYsNkNBQTZDLEdBQUcsb0JBQW9CLDBCQUEwQixHQUFHLGtEQUFrRCxtQkFBbUIsbUJBQW1CLHdCQUF3QiwwQkFBMEIsR0FBRyxpREFBaUQsNkJBQTZCLCtCQUErQiw0QkFBNEIsNkJBQTZCLDhCQUE4QiwwQkFBMEIsc0pBQXNKLDhJQUE4SSxtTEFBbUwsR0FBRyw2Q0FBNkMsaURBQWlELHVCQUF1QixLQUFLLEdBQUcsaUZBQWlGLDJCQUEyQiwyQ0FBMkMsbUNBQW1DLEdBQUcsMkZBQTJGLDZDQUE2QyxHQUFHLG9CQUFvQiwwQkFBMEIsZ0JBQWdCLHdDQUF3QywrQ0FBK0Msb0JBQW9CLHFCQUFxQixxQkFBcUIsbUJBQW1CLDJCQUEyQixvTkFBb04sMkJBQTJCLDhCQUE4QiwyQkFBMkIsNkJBQTZCLDBCQUEwQixxQkFBcUIsR0FBRywwQkFBMEIsMEJBQTBCLGVBQWUscURBQXFELEdBQUcscUNBQXFDLG1CQUFtQiwyQkFBMkIsR0FBRyxzRUFBc0UsaUJBQWlCLDJCQUEyQiwyQkFBMkIsR0FBRyw2QkFBNkIsbUJBQW1CLDhCQUE4QixHQUFHLGdDQUFnQyxrQkFBa0IsR0FBRyx1QkFBdUIsdUNBQXVDLHlCQUF5Qiw0QkFBNEIseUJBQXlCLHdCQUF3QixHQUFHLHVCQUF1QixxQ0FBcUMsd0JBQXdCLDJCQUEyQix1QkFBdUIsdUJBQXVCLEdBQUcsa0JBQWtCLHVCQUF1QiwwQkFBMEIsZ0JBQWdCLHdDQUF3QyxxQkFBcUIsR0FBRyx3QkFBd0IsdUJBQXVCLGVBQWUsZ0JBQWdCLHdDQUF3QyxjQUFjLGVBQWUsR0FBRyxtREFBbUQsMEJBQTBCLHFEQUFxRCxHQUFHLHNEQUFzRCw4QkFBOEIsR0FBRyw2REFBNkQsd0JBQXdCLEdBQUcsaUVBQWlFLCtCQUErQixHQUFHLHdCQUF3Qix1QkFBdUIsV0FBVyxhQUFhLFlBQVksZUFBZSx3Q0FBd0MsOEJBQThCLHFCQUFxQixxQkFBcUIsbUJBQW1CLDJCQUEyQiw4QkFBOEIsMkJBQTJCLEdBQUcsK0JBQStCLHVCQUF1QixXQUFXLGFBQWEsY0FBYyxlQUFlLG1CQUFtQixrQ0FBa0MsOEJBQThCLHFCQUFxQixtQkFBbUIsd0JBQXdCLDhCQUE4Qix5QkFBeUIsdUNBQXVDLEdBQUcsbUJBQW1CLGdCQUFnQixnQ0FBZ0MsZUFBZSxrQ0FBa0MsNkJBQTZCLDBCQUEwQixxQkFBcUIsR0FBRyx5QkFBeUIsa0JBQWtCLEdBQUcsK0NBQStDLHFFQUFxRSxHQUFHLDJDQUEyQyxxRUFBcUUsR0FBRyxvQ0FBb0MscUVBQXFFLEdBQUcscUNBQXFDLGNBQWMsR0FBRyx5Q0FBeUMsZ0JBQWdCLGlCQUFpQix5QkFBeUIsOEJBQThCLGNBQWMsd0JBQXdCLGlIQUFpSCw2QkFBNkIscUJBQXFCLEdBQUcsNkNBQTZDLHlDQUF5Qyx1QkFBdUIsS0FBSyxHQUFHLGdEQUFnRCw4QkFBOEIsR0FBRyxrREFBa0QsZ0JBQWdCLG1CQUFtQix1QkFBdUIsb0JBQW9CLDhCQUE4Qiw4QkFBOEIsd0JBQXdCLEdBQUcscUNBQXFDLGdCQUFnQixpQkFBaUIsOEJBQThCLGNBQWMsd0JBQXdCLGlIQUFpSCwwQkFBMEIscUJBQXFCLEdBQUcsNkNBQTZDLHFDQUFxQyx1QkFBdUIsS0FBSyxHQUFHLDRDQUE0Qyw4QkFBOEIsR0FBRyxxQ0FBcUMsZ0JBQWdCLG1CQUFtQix1QkFBdUIsb0JBQW9CLDhCQUE4Qiw4QkFBOEIsd0JBQXdCLEdBQUcsOEJBQThCLGdCQUFnQixpQkFBaUIsa0JBQWtCLHlCQUF5Qix3QkFBd0IsOEJBQThCLGNBQWMsd0JBQXdCLGlIQUFpSCxxQkFBcUIsR0FBRyw2Q0FBNkMsOEJBQThCLHVCQUF1QixLQUFLLEdBQUcscUNBQXFDLDhCQUE4QixHQUFHLDhCQUE4QixnQkFBZ0IsbUJBQW1CLHVCQUF1QixvQkFBb0Isa0NBQWtDLDhCQUE4Qix5QkFBeUIsR0FBRyxtQ0FBbUMsOEJBQThCLHdCQUF3QixHQUFHLG1DQUFtQyx1QkFBdUIsOEJBQThCLHdCQUF3QixHQUFHLGtEQUFrRCw4QkFBOEIsR0FBRywyREFBMkQsb0JBQW9CLEdBQUcsOENBQThDLDhCQUE4QixHQUFHLDhDQUE4QyxvQkFBb0IsR0FBRyx1Q0FBdUMsOEJBQThCLEdBQUcseUVBQXlFLGlIQUFpSCxHQUFHLDZDQUE2Qyw2RUFBNkUsdUJBQXVCLEtBQUssR0FBRyxVQUFVLHlCQUF5QixrQkFBa0Isd0JBQXdCLG9CQUFvQixvQkFBb0IscUJBQXFCLHFCQUFxQixHQUFHLGVBQWUsbUJBQW1CLHlCQUF5QixHQUFHLHNDQUFzQywwQkFBMEIsR0FBRyx3QkFBd0IsbUJBQW1CLHlCQUF5QixvQkFBb0IsR0FBRyxlQUFlLHFDQUFxQyxHQUFHLHlCQUF5Qix3QkFBd0IsR0FBRyx5QkFBeUIsa0NBQWtDLG9DQUFvQyxxQ0FBcUMsR0FBRywwREFBMEQsMENBQTBDLEdBQUcsa0NBQWtDLG1CQUFtQixrQ0FBa0MsOEJBQThCLEdBQUcscUVBQXFFLG1CQUFtQiwyQkFBMkIsdUNBQXVDLEdBQUcsOEJBQThCLHFCQUFxQiw4QkFBOEIsK0JBQStCLEdBQUcsMEJBQTBCLDJCQUEyQixHQUFHLGdFQUFnRSxnQkFBZ0IsOEJBQThCLEdBQUcseUJBQXlCLHVCQUF1QixtQkFBbUIsdUJBQXVCLEdBQUcsOEJBQThCLCtCQUErQixrQkFBa0IseUJBQXlCLGlCQUFpQix1QkFBdUIsR0FBRyw4QkFBOEIsa0JBQWtCLEdBQUcsNEJBQTRCLG1CQUFtQixHQUFHLGFBQWEsdUJBQXVCLHlCQUF5QixrQkFBa0Isd0JBQXdCLG9CQUFvQiwyQkFBMkIsd0JBQXdCLDJCQUEyQixtQ0FBbUMseUJBQXlCLEdBQUcsdURBQXVELHlCQUF5QixrQkFBa0Isd0JBQXdCLG9CQUFvQiwyQkFBMkIsd0JBQXdCLDJCQUEyQixtQ0FBbUMsR0FBRyxtQkFBbUIsMEJBQTBCLDJCQUEyQiw4QkFBOEIsdUJBQXVCLHVCQUF1Qix5QkFBeUIsd0JBQXdCLEdBQUcsOENBQThDLDBCQUEwQixHQUFHLGlCQUFpQix5QkFBeUIsa0JBQWtCLCtCQUErQiwyQkFBMkIsb0JBQW9CLHFCQUFxQixxQkFBcUIsR0FBRywyQkFBMkIscUJBQXFCLG9CQUFvQixHQUFHLGdDQUFnQyxxQkFBcUIsZ0JBQWdCLEdBQUcsa0JBQWtCLDBCQUEwQix3QkFBd0IsMkJBQTJCLEdBQUcsc0JBQXNCLGtDQUFrQyxxQkFBcUIseUJBQXlCLGlCQUFpQiwyQkFBMkIsd0JBQXdCLEdBQUcscUJBQXFCLDZCQUE2Qix1QkFBdUIsbUJBQW1CLGtDQUFrQyxrQ0FBa0MsMkJBQTJCLEdBQUcsa0RBQWtELDBCQUEwQixHQUFHLDBCQUEwQiwwQkFBMEIsaUJBQWlCLGtCQUFrQiwyQkFBMkIsa0JBQWtCLHdDQUF3QywrQkFBK0IsR0FBRyxrQ0FBa0MsNkVBQTZFLHVCQUF1QixzQkFBc0IsS0FBSyxHQUFHLCtCQUErQix1QkFBdUIsZ0NBQWdDLDRCQUE0QiwyQkFBMkIsa0NBQWtDLEtBQUssbUNBQW1DLDhCQUE4QiwwQkFBMEIsS0FBSyxrREFBa0QseUJBQXlCLEtBQUssNkNBQTZDLDRCQUE0QiwyQkFBMkIsS0FBSyw2RUFBNkUsNEJBQTRCLHdCQUF3QixLQUFLLHdDQUF3QyxzQ0FBc0MsK0JBQStCLG9DQUFvQyx1QkFBdUIsS0FBSyx1Q0FBdUMsb0JBQW9CLEtBQUssR0FBRyxrQ0FBa0MsNkVBQTZFLHVCQUF1QixzQkFBc0IsS0FBSyxHQUFHLCtCQUErQix1QkFBdUIsZ0NBQWdDLDRCQUE0QiwyQkFBMkIsa0NBQWtDLEtBQUssbUNBQW1DLDhCQUE4QiwwQkFBMEIsS0FBSyxrREFBa0QseUJBQXlCLEtBQUssNkNBQTZDLDRCQUE0QiwyQkFBMkIsS0FBSyw2RUFBNkUsNEJBQTRCLHdCQUF3QixLQUFLLHdDQUF3QyxzQ0FBc0MsK0JBQStCLG9DQUFvQyx1QkFBdUIsS0FBSyx1Q0FBdUMsb0JBQW9CLEtBQUssR0FBRyxrQ0FBa0MsNkVBQTZFLHVCQUF1QixzQkFBc0IsS0FBSyxHQUFHLCtCQUErQix1QkFBdUIsZ0NBQWdDLDRCQUE0QiwyQkFBMkIsa0NBQWtDLEtBQUssbUNBQW1DLDhCQUE4QiwwQkFBMEIsS0FBSyxrREFBa0QseUJBQXlCLEtBQUssNkNBQTZDLDRCQUE0QiwyQkFBMkIsS0FBSyw2RUFBNkUsNEJBQTRCLHdCQUF3QixLQUFLLHdDQUF3QyxzQ0FBc0MsK0JBQStCLG9DQUFvQyx1QkFBdUIsS0FBSyx1Q0FBdUMsb0JBQW9CLEtBQUssR0FBRyxtQ0FBbUMsNkVBQTZFLHVCQUF1QixzQkFBc0IsS0FBSyxHQUFHLGdDQUFnQyx1QkFBdUIsZ0NBQWdDLDRCQUE0QiwyQkFBMkIsa0NBQWtDLEtBQUssbUNBQW1DLDhCQUE4QiwwQkFBMEIsS0FBSyxrREFBa0QseUJBQXlCLEtBQUssNkNBQTZDLDRCQUE0QiwyQkFBMkIsS0FBSyw2RUFBNkUsNEJBQTRCLHdCQUF3QixLQUFLLHdDQUF3QyxzQ0FBc0MsK0JBQStCLG9DQUFvQyx1QkFBdUIsS0FBSyx1Q0FBdUMsb0JBQW9CLEtBQUssR0FBRyxvQkFBb0IsOEJBQThCLDBCQUEwQix5QkFBeUIsZ0NBQWdDLEdBQUcscUVBQXFFLHFCQUFxQixvQkFBb0IsR0FBRyxnQ0FBZ0MsNEJBQTRCLHdCQUF3QixHQUFHLCtDQUErQyx1QkFBdUIsR0FBRywwQ0FBMEMsMEJBQTBCLHlCQUF5QixHQUFHLHFFQUFxRSwwQkFBMEIsc0JBQXNCLEdBQUcscUNBQXFDLG9DQUFvQyw2QkFBNkIsa0NBQWtDLHFCQUFxQixHQUFHLG9DQUFvQyxrQkFBa0IsR0FBRyxpQ0FBaUMsOEJBQThCLEdBQUcsMEVBQTBFLDhCQUE4QixHQUFHLHlDQUF5Qyw4QkFBOEIsR0FBRywwRkFBMEYsOEJBQThCLEdBQUcsa0RBQWtELDhCQUE4QixHQUFHLHlMQUF5TCw4QkFBOEIsR0FBRyxtQ0FBbUMsOEJBQThCLHFDQUFxQyxHQUFHLHdDQUF3QywrUEFBK1AsR0FBRyxnQ0FBZ0MsOEJBQThCLEdBQUcsa0NBQWtDLDhCQUE4QixHQUFHLDRFQUE0RSw4QkFBOEIsR0FBRyxnQ0FBZ0MsZ0JBQWdCLEdBQUcsd0VBQXdFLGdCQUFnQixHQUFHLHdDQUF3QyxvQ0FBb0MsR0FBRyx3RkFBd0YscUNBQXFDLEdBQUcsaURBQWlELHFDQUFxQyxHQUFHLHFMQUFxTCxnQkFBZ0IsR0FBRyxrQ0FBa0Msb0NBQW9DLDJDQUEyQyxHQUFHLHVDQUF1QyxxUUFBcVEsR0FBRywrQkFBK0Isb0NBQW9DLEdBQUcsaUNBQWlDLGdCQUFnQixHQUFHLDBFQUEwRSxnQkFBZ0IsR0FBRyxXQUFXLHVCQUF1Qix5QkFBeUIsa0JBQWtCLCtCQUErQiwyQkFBMkIsaUJBQWlCLDBCQUEwQiwyQkFBMkIsZ0NBQWdDLDJDQUEyQywyQkFBMkIsR0FBRyxnQkFBZ0Isb0JBQW9CLG1CQUFtQixHQUFHLGtFQUFrRSxvQ0FBb0MscUNBQXFDLEdBQUcsZ0VBQWdFLHdDQUF3Qyx1Q0FBdUMsR0FBRyxnQkFBZ0IsdUJBQXVCLG1CQUFtQixxQkFBcUIsR0FBRyxpQkFBaUIsMkJBQTJCLEdBQUcsb0JBQW9CLDBCQUEwQixxQkFBcUIsR0FBRywyQkFBMkIscUJBQXFCLEdBQUcsc0JBQXNCLDBCQUEwQixHQUFHLDZCQUE2Qix5QkFBeUIsR0FBRyxrQkFBa0IsNkJBQTZCLHFCQUFxQiwwQ0FBMEMsa0RBQWtELEdBQUcsOEJBQThCLCtEQUErRCxHQUFHLDZEQUE2RCxrQkFBa0IsR0FBRyxrQkFBa0IsNkJBQTZCLDBDQUEwQywrQ0FBK0MsR0FBRyw2QkFBNkIsK0RBQStELEdBQUcsdUJBQXVCLDRCQUE0Qiw0QkFBNEIsMkJBQTJCLHFCQUFxQixHQUFHLHdCQUF3Qiw0QkFBNEIsMkJBQTJCLEdBQUcsdUJBQXVCLHVCQUF1QixXQUFXLGFBQWEsY0FBYyxZQUFZLHFCQUFxQixHQUFHLGVBQWUsZ0JBQWdCLHVDQUF1QyxHQUFHLG1CQUFtQixnQkFBZ0IsZ0RBQWdELGlEQUFpRCxHQUFHLHNCQUFzQixnQkFBZ0Isb0RBQW9ELG1EQUFtRCxHQUFHLGdCQUFnQix5QkFBeUIsa0JBQWtCLCtCQUErQiwyQkFBMkIsR0FBRyxzQkFBc0Isd0JBQXdCLEdBQUcsK0JBQStCLGdCQUFnQiw4QkFBOEIsMEJBQTBCLDBCQUEwQix5QkFBeUIsS0FBSyxzQkFBc0IsMkJBQTJCLG9CQUFvQix1QkFBdUIsbUJBQW1CLGlDQUFpQyw2QkFBNkIseUJBQXlCLHVCQUF1Qix3QkFBd0IsS0FBSyxHQUFHLGlCQUFpQix5QkFBeUIsa0JBQWtCLCtCQUErQiwyQkFBMkIsR0FBRyx5QkFBeUIsd0JBQXdCLEdBQUcsK0JBQStCLGlCQUFpQiw4QkFBOEIsMEJBQTBCLEtBQUsseUJBQXlCLHVCQUF1QixtQkFBbUIsdUJBQXVCLEtBQUssaUNBQWlDLHFCQUFxQixxQkFBcUIsS0FBSywwQ0FBMEMsaUNBQWlDLG9DQUFvQyxLQUFLLDhHQUE4RyxpQ0FBaUMsS0FBSyxpSEFBaUgsb0NBQW9DLEtBQUssMkNBQTJDLGdDQUFnQyxtQ0FBbUMsS0FBSyxnSEFBZ0gsZ0NBQWdDLEtBQUssbUhBQW1ILG1DQUFtQyxLQUFLLEdBQUcseUJBQXlCLDJCQUEyQixHQUFHLCtCQUErQixtQkFBbUIsOEJBQThCLDJCQUEyQixzQkFBc0Isa0NBQWtDLCtCQUErQiwwQkFBMEIsaUJBQWlCLGdCQUFnQixLQUFLLHlCQUF5Qiw0QkFBNEIsa0JBQWtCLEtBQUssR0FBRyx3QkFBd0IscUJBQXFCLEdBQUcscUVBQXFFLHFCQUFxQixHQUFHLCtEQUErRCxxQkFBcUIscUJBQXFCLEdBQUcsc0NBQXNDLHFCQUFxQixrQ0FBa0MsaUNBQWlDLEdBQUcscUNBQXFDLDhCQUE4QiwrQkFBK0IsR0FBRyxxQ0FBcUMsd0JBQXdCLEdBQUcsaUJBQWlCLHlCQUF5QixrQkFBa0Isd0JBQXdCLG9CQUFvQiwwQkFBMEIsd0JBQXdCLHFCQUFxQiw4QkFBOEIsMkJBQTJCLEdBQUcseUNBQXlDLHlCQUF5QixHQUFHLGlEQUFpRCwwQkFBMEIsMEJBQTBCLG1CQUFtQixtQkFBbUIsR0FBRyx1REFBdUQsK0JBQStCLEdBQUcsdURBQXVELDBCQUEwQixHQUFHLDZCQUE2QixtQkFBbUIsR0FBRyxpQkFBaUIseUJBQXlCLGtCQUFrQixvQkFBb0IscUJBQXFCLDJCQUEyQixHQUFHLGdCQUFnQix1QkFBdUIsbUJBQW1CLDRCQUE0QixzQkFBc0Isc0JBQXNCLG1CQUFtQiwyQkFBMkIsOEJBQThCLEdBQUcsc0JBQXNCLGVBQWUsbUJBQW1CLDBCQUEwQiw4QkFBOEIsMEJBQTBCLEdBQUcsc0JBQXNCLGVBQWUsZUFBZSxxREFBcUQsR0FBRyx1Q0FBdUMsbUJBQW1CLG9DQUFvQyx1Q0FBdUMsR0FBRyxzQ0FBc0MscUNBQXFDLHdDQUF3QyxHQUFHLGtDQUFrQyxlQUFlLGdCQUFnQiw4QkFBOEIsMEJBQTBCLEdBQUcsb0NBQW9DLG1CQUFtQix5QkFBeUIsaUJBQWlCLDJCQUEyQiwwQkFBMEIsR0FBRywrQkFBK0IsNEJBQTRCLHVCQUF1QixxQkFBcUIsR0FBRyxzREFBc0QsbUNBQW1DLHNDQUFzQyxHQUFHLHFEQUFxRCxvQ0FBb0MsdUNBQXVDLEdBQUcsK0JBQStCLDRCQUE0Qix3QkFBd0IscUJBQXFCLEdBQUcsc0RBQXNELG1DQUFtQyxzQ0FBc0MsR0FBRyxxREFBcUQsb0NBQW9DLHVDQUF1QyxHQUFHLFlBQVksMEJBQTBCLDBCQUEwQixtQkFBbUIscUJBQXFCLG1CQUFtQix1QkFBdUIsd0JBQXdCLDZCQUE2QiwyQkFBMkIsMElBQTBJLEdBQUcsNkNBQTZDLFlBQVksdUJBQXVCLEtBQUssR0FBRyxrQ0FBa0MsMEJBQTBCLEdBQUcsa0JBQWtCLGtCQUFrQixHQUFHLGlCQUFpQix1QkFBdUIsY0FBYyxHQUFHLGlCQUFpQix5QkFBeUIsd0JBQXdCLHlCQUF5QixHQUFHLG9CQUFvQixnQkFBZ0IsOEJBQThCLEdBQUcsa0RBQWtELGdCQUFnQiw4QkFBOEIsR0FBRyxrREFBa0QsZUFBZSxvREFBb0QsR0FBRyxzQkFBc0IsZ0JBQWdCLDhCQUE4QixHQUFHLHNEQUFzRCxnQkFBZ0IsOEJBQThCLEdBQUcsc0RBQXNELGVBQWUsc0RBQXNELEdBQUcsb0JBQW9CLGdCQUFnQiw4QkFBOEIsR0FBRyxrREFBa0QsZ0JBQWdCLDhCQUE4QixHQUFHLGtEQUFrRCxlQUFlLG9EQUFvRCxHQUFHLGlCQUFpQixnQkFBZ0IsOEJBQThCLEdBQUcsNENBQTRDLGdCQUFnQiw4QkFBOEIsR0FBRyw0Q0FBNEMsZUFBZSxxREFBcUQsR0FBRyxvQkFBb0IsbUJBQW1CLDhCQUE4QixHQUFHLGtEQUFrRCxtQkFBbUIsOEJBQThCLEdBQUcsa0RBQWtELGVBQWUsb0RBQW9ELEdBQUcsbUJBQW1CLGdCQUFnQiw4QkFBOEIsR0FBRyxnREFBZ0QsZ0JBQWdCLDhCQUE4QixHQUFHLGdEQUFnRCxlQUFlLG9EQUFvRCxHQUFHLGtCQUFrQixtQkFBbUIsOEJBQThCLEdBQUcsOENBQThDLG1CQUFtQiw4QkFBOEIsR0FBRyw4Q0FBOEMsZUFBZSxzREFBc0QsR0FBRyxpQkFBaUIsZ0JBQWdCLDhCQUE4QixHQUFHLDRDQUE0QyxnQkFBZ0IsOEJBQThCLEdBQUcsNENBQTRDLGVBQWUsbURBQW1ELEdBQUcsZ0JBQWdCLHVCQUF1Qix3QkFBd0IsOEJBQThCLDBCQUEwQixHQUFHLCtCQUErQixnQkFBZ0IseUJBQXlCLEtBQUssR0FBRyxzQkFBc0IscUJBQXFCLG9CQUFvQixxQkFBcUIsR0FBRyxZQUFZLHVCQUF1Qiw2QkFBNkIsd0JBQXdCLGtDQUFrQywyQkFBMkIsR0FBRyxvQkFBb0IsbUJBQW1CLEdBQUcsaUJBQWlCLHFCQUFxQixHQUFHLHdCQUF3Qix3QkFBd0IsR0FBRywrQkFBK0IsdUJBQXVCLFdBQVcsYUFBYSw2QkFBNkIsbUJBQW1CLEdBQUcsb0JBQW9CLG1CQUFtQiw4QkFBOEIsMEJBQTBCLEdBQUcsdUJBQXVCLDhCQUE4QixHQUFHLGdDQUFnQyxtQkFBbUIsR0FBRyxzQkFBc0IsbUJBQW1CLDhCQUE4QiwwQkFBMEIsR0FBRyx5QkFBeUIsOEJBQThCLEdBQUcsa0NBQWtDLG1CQUFtQixHQUFHLG9CQUFvQixtQkFBbUIsOEJBQThCLDBCQUEwQixHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyxnQ0FBZ0MsbUJBQW1CLEdBQUcsaUJBQWlCLG1CQUFtQiw4QkFBOEIsMEJBQTBCLEdBQUcsb0JBQW9CLDhCQUE4QixHQUFHLDZCQUE2QixtQkFBbUIsR0FBRyxvQkFBb0IsbUJBQW1CLDhCQUE4QiwwQkFBMEIsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsZ0NBQWdDLG1CQUFtQixHQUFHLG1CQUFtQixtQkFBbUIsOEJBQThCLDBCQUEwQixHQUFHLHNCQUFzQiw4QkFBOEIsR0FBRywrQkFBK0IsbUJBQW1CLEdBQUcsa0JBQWtCLG1CQUFtQiw4QkFBOEIsMEJBQTBCLEdBQUcscUJBQXFCLDhCQUE4QixHQUFHLDhCQUE4QixtQkFBbUIsR0FBRyxpQkFBaUIsbUJBQW1CLDhCQUE4QiwwQkFBMEIsR0FBRyxvQkFBb0IsOEJBQThCLEdBQUcsNkJBQTZCLG1CQUFtQixHQUFHLDZDQUE2QyxVQUFVLGtDQUFrQyxLQUFLLFFBQVEsK0JBQStCLEtBQUssR0FBRyxxQ0FBcUMsVUFBVSxrQ0FBa0MsS0FBSyxRQUFRLCtCQUErQixLQUFLLEdBQUcsZUFBZSx5QkFBeUIsa0JBQWtCLGlCQUFpQixxQkFBcUIsdUJBQXVCLDhCQUE4QiwyQkFBMkIsR0FBRyxtQkFBbUIseUJBQXlCLGtCQUFrQiwrQkFBK0IsMkJBQTJCLDBCQUEwQiw0QkFBNEIsZ0JBQWdCLHVCQUF1Qix3QkFBd0IsOEJBQThCLGdDQUFnQyxHQUFHLDZDQUE2QyxtQkFBbUIsdUJBQXVCLEtBQUssR0FBRywyQkFBMkIsME1BQTBNLCtCQUErQixHQUFHLDRCQUE0QiwrREFBK0QsdURBQXVELEdBQUcsNkNBQTZDLDRCQUE0Qiw4QkFBOEIsc0JBQXNCLEtBQUssR0FBRyxZQUFZLHlCQUF5QixrQkFBa0IsMEJBQTBCLDRCQUE0QixHQUFHLGlCQUFpQixnQkFBZ0IsWUFBWSxHQUFHLGlCQUFpQix5QkFBeUIsa0JBQWtCLCtCQUErQiwyQkFBMkIsb0JBQW9CLHFCQUFxQixHQUFHLDZCQUE2QixnQkFBZ0IsbUJBQW1CLHdCQUF3QixHQUFHLGtFQUFrRSxlQUFlLG1CQUFtQiwwQkFBMEIsOEJBQThCLEdBQUcsb0NBQW9DLG1CQUFtQiw4QkFBOEIsR0FBRyxzQkFBc0IsdUJBQXVCLG1CQUFtQiw2QkFBNkIsd0JBQXdCLDJCQUEyQiwyQ0FBMkMsR0FBRyxrQ0FBa0Msb0NBQW9DLHFDQUFxQyxHQUFHLGlDQUFpQyxxQkFBcUIsd0NBQXdDLHVDQUF1QyxHQUFHLDBEQUEwRCxtQkFBbUIseUJBQXlCLDJCQUEyQixHQUFHLDZCQUE2QixlQUFlLGdCQUFnQiw4QkFBOEIsMEJBQTBCLEdBQUcsNEJBQTRCLDRCQUE0Qix3QkFBd0IsR0FBRyw2Q0FBNkMsdUJBQXVCLHFCQUFxQixHQUFHLHlEQUF5RCxvQ0FBb0MsdUNBQXVDLCtCQUErQixHQUFHLHdEQUF3RCxvQkFBb0IscUNBQXFDLHdDQUF3QyxpQ0FBaUMsR0FBRywrQkFBK0IsK0JBQStCLDhCQUE4QiwwQkFBMEIsS0FBSyxnREFBZ0QseUJBQXlCLHVCQUF1QixLQUFLLDREQUE0RCxzQ0FBc0MseUNBQXlDLGlDQUFpQyxLQUFLLDJEQUEyRCxzQkFBc0IsdUNBQXVDLDBDQUEwQyxtQ0FBbUMsS0FBSyxHQUFHLCtCQUErQiwrQkFBK0IsOEJBQThCLDBCQUEwQixLQUFLLGdEQUFnRCx5QkFBeUIsdUJBQXVCLEtBQUssNERBQTRELHNDQUFzQyx5Q0FBeUMsaUNBQWlDLEtBQUssMkRBQTJELHNCQUFzQix1Q0FBdUMsMENBQTBDLG1DQUFtQyxLQUFLLEdBQUcsK0JBQStCLCtCQUErQiw4QkFBOEIsMEJBQTBCLEtBQUssZ0RBQWdELHlCQUF5Qix1QkFBdUIsS0FBSyw0REFBNEQsc0NBQXNDLHlDQUF5QyxpQ0FBaUMsS0FBSywyREFBMkQsc0JBQXNCLHVDQUF1QywwQ0FBMEMsbUNBQW1DLEtBQUssR0FBRyxnQ0FBZ0MsK0JBQStCLDhCQUE4QiwwQkFBMEIsS0FBSyxnREFBZ0QseUJBQXlCLHVCQUF1QixLQUFLLDREQUE0RCxzQ0FBc0MseUNBQXlDLGlDQUFpQyxLQUFLLDJEQUEyRCxzQkFBc0IsdUNBQXVDLDBDQUEwQyxtQ0FBbUMsS0FBSyxHQUFHLHdDQUF3QyxvQkFBb0IsbUJBQW1CLHFCQUFxQixHQUFHLG1EQUFtRCx3QkFBd0IsR0FBRyxnRUFBZ0Usa0JBQWtCLEdBQUcsOERBQThELHFCQUFxQixxQkFBcUIsR0FBRyw4QkFBOEIsbUJBQW1CLDhCQUE4QixHQUFHLGtIQUFrSCxtQkFBbUIsOEJBQThCLEdBQUcsNERBQTRELGdCQUFnQiw4QkFBOEIsMEJBQTBCLEdBQUcsZ0NBQWdDLG1CQUFtQiw4QkFBOEIsR0FBRyxzSEFBc0gsbUJBQW1CLDhCQUE4QixHQUFHLDhEQUE4RCxnQkFBZ0IsOEJBQThCLDBCQUEwQixHQUFHLDhCQUE4QixtQkFBbUIsOEJBQThCLEdBQUcsa0hBQWtILG1CQUFtQiw4QkFBOEIsR0FBRyw0REFBNEQsZ0JBQWdCLDhCQUE4QiwwQkFBMEIsR0FBRywyQkFBMkIsbUJBQW1CLDhCQUE4QixHQUFHLDRHQUE0RyxtQkFBbUIsOEJBQThCLEdBQUcseURBQXlELGdCQUFnQiw4QkFBOEIsMEJBQTBCLEdBQUcsOEJBQThCLG1CQUFtQiw4QkFBOEIsR0FBRyxrSEFBa0gsbUJBQW1CLDhCQUE4QixHQUFHLDREQUE0RCxnQkFBZ0IsOEJBQThCLDBCQUEwQixHQUFHLDZCQUE2QixtQkFBbUIsOEJBQThCLEdBQUcsZ0hBQWdILG1CQUFtQiw4QkFBOEIsR0FBRywyREFBMkQsZ0JBQWdCLDhCQUE4QiwwQkFBMEIsR0FBRyw0QkFBNEIsbUJBQW1CLDhCQUE4QixHQUFHLDhHQUE4RyxtQkFBbUIsOEJBQThCLEdBQUcsMERBQTBELGdCQUFnQiw4QkFBOEIsMEJBQTBCLEdBQUcsMkJBQTJCLG1CQUFtQiw4QkFBOEIsR0FBRyw0R0FBNEcsbUJBQW1CLDhCQUE4QixHQUFHLHlEQUF5RCxnQkFBZ0IsOEJBQThCLDBCQUEwQixHQUFHLFlBQVksaUJBQWlCLHNCQUFzQixxQkFBcUIsbUJBQW1CLGdCQUFnQiw4QkFBOEIsZ0JBQWdCLEdBQUcsa0JBQWtCLGdCQUFnQiwwQkFBMEIsR0FBRyw0RkFBNEYsaUJBQWlCLEdBQUcsa0JBQWtCLGVBQWUsa0NBQWtDLGNBQWMsNkJBQTZCLDBCQUEwQixxQkFBcUIsR0FBRyxzQkFBc0IseUJBQXlCLEdBQUcsWUFBWSxxQkFBcUIscUJBQXFCLHdCQUF3QixnREFBZ0QsaUNBQWlDLHlDQUF5QyxxREFBcUQsd0NBQXdDLGdDQUFnQyxlQUFlLDJCQUEyQixHQUFHLDZCQUE2QiwyQkFBMkIsR0FBRyxvQkFBb0IsZUFBZSxHQUFHLGlCQUFpQixtQkFBbUIsZUFBZSxHQUFHLGlCQUFpQixrQkFBa0IsR0FBRyxtQkFBbUIseUJBQXlCLGtCQUFrQiwyQkFBMkIsd0JBQXdCLDZCQUE2QixtQkFBbUIsZ0RBQWdELGlDQUFpQyxpREFBaUQsR0FBRyxpQkFBaUIscUJBQXFCLEdBQUcsaUJBQWlCLHFCQUFxQixHQUFHLHdCQUF3Qix1QkFBdUIscUJBQXFCLEdBQUcsWUFBWSxvQkFBb0IsV0FBVyxZQUFZLGtCQUFrQixrQkFBa0IsZ0JBQWdCLGlCQUFpQixxQkFBcUIsZUFBZSxHQUFHLG1CQUFtQix1QkFBdUIsZ0JBQWdCLG1CQUFtQix5QkFBeUIsR0FBRywrQkFBK0IsZ0RBQWdELHdDQUF3Qyx5RUFBeUUsMkNBQTJDLG1DQUFtQyxHQUFHLDZDQUE2QywrQkFBK0IsdUJBQXVCLEtBQUssR0FBRywrQkFBK0IsNEJBQTRCLG9CQUFvQixHQUFHLDhCQUE4Qix5QkFBeUIsa0JBQWtCLGtDQUFrQyxHQUFHLDZDQUE2QyxtQ0FBbUMscUJBQXFCLEdBQUcscUZBQXFGLHlCQUF5QixtQkFBbUIsR0FBRywwQ0FBMEMscUJBQXFCLEdBQUcsNEJBQTRCLHlCQUF5QixrQkFBa0IsMkJBQTJCLHdCQUF3QixrQ0FBa0MsR0FBRyxvQ0FBb0MsbUJBQW1CLCtCQUErQixrQkFBa0IsR0FBRyxvREFBb0QsK0JBQStCLDJCQUEyQiwwQkFBMEIsNEJBQTRCLGlCQUFpQixHQUFHLG1FQUFtRSxxQkFBcUIsR0FBRyw0REFBNEQsa0JBQWtCLEdBQUcsb0JBQW9CLHVCQUF1Qix5QkFBeUIsa0JBQWtCLCtCQUErQiwyQkFBMkIsZ0JBQWdCLHlCQUF5QiwyQkFBMkIsaUNBQWlDLHlDQUF5QywwQkFBMEIsZUFBZSxHQUFHLHFCQUFxQixvQkFBb0IsV0FBVyxZQUFZLGtCQUFrQixpQkFBaUIsa0JBQWtCLDJCQUEyQixHQUFHLDBCQUEwQixlQUFlLEdBQUcsMEJBQTBCLGlCQUFpQixHQUFHLG1CQUFtQix5QkFBeUIsa0JBQWtCLDBCQUEwQiw0QkFBNEIsMkJBQTJCLG1DQUFtQyx1QkFBdUIscUNBQXFDLG1DQUFtQyxvQ0FBb0MsR0FBRywwQkFBMEIsdUJBQXVCLG1DQUFtQyxHQUFHLGtCQUFrQixxQkFBcUIscUJBQXFCLEdBQUcsaUJBQWlCLHVCQUF1Qix1QkFBdUIsbUJBQW1CLGtCQUFrQixHQUFHLG1CQUFtQix5QkFBeUIsa0JBQWtCLDJCQUEyQix3QkFBd0IsdUJBQXVCLDhCQUE4QixrQkFBa0Isa0NBQWtDLHVDQUF1QyxzQ0FBc0MsR0FBRyx3Q0FBd0Msd0JBQXdCLEdBQUcsdUNBQXVDLHlCQUF5QixHQUFHLDhCQUE4Qix1QkFBdUIsaUJBQWlCLGdCQUFnQixpQkFBaUIscUJBQXFCLEdBQUcsK0JBQStCLG1CQUFtQix1QkFBdUIsMkJBQTJCLEtBQUssOEJBQThCLHNDQUFzQyxLQUFLLDZDQUE2Qyx1Q0FBdUMsS0FBSyw0QkFBNEIsc0NBQXNDLEtBQUssb0NBQW9DLG1DQUFtQyxLQUFLLGVBQWUsdUJBQXVCLEtBQUssR0FBRywrQkFBK0IsNkJBQTZCLHVCQUF1QixLQUFLLEdBQUcsZ0NBQWdDLGVBQWUsd0JBQXdCLEtBQUssR0FBRyxjQUFjLHVCQUF1QixrQkFBa0IsbUJBQW1CLGNBQWMscU5BQXFOLHVCQUF1QixxQkFBcUIscUJBQXFCLHFCQUFxQixzQkFBc0IsMEJBQTBCLHNCQUFzQix5QkFBeUIsMkJBQTJCLHVCQUF1Qix5QkFBeUIsd0JBQXdCLHFCQUFxQix3QkFBd0IsMEJBQTBCLGVBQWUsR0FBRyxtQkFBbUIsaUJBQWlCLEdBQUcscUJBQXFCLHVCQUF1QixtQkFBbUIsa0JBQWtCLG1CQUFtQixHQUFHLDZCQUE2Qix1QkFBdUIsa0JBQWtCLDhCQUE4Qix3QkFBd0IsR0FBRyw2REFBNkQsc0JBQXNCLEdBQUcsMkVBQTJFLGNBQWMsR0FBRywyRkFBMkYsV0FBVyxrQ0FBa0MsMkJBQTJCLEdBQUcsaUVBQWlFLHNCQUFzQixHQUFHLCtFQUErRSxZQUFZLGtCQUFrQixtQkFBbUIsR0FBRywrRkFBK0YsYUFBYSx5Q0FBeUMsNkJBQTZCLEdBQUcsbUVBQW1FLHNCQUFzQixHQUFHLGlGQUFpRixXQUFXLEdBQUcsaUdBQWlHLGNBQWMsa0NBQWtDLDhCQUE4QixHQUFHLCtEQUErRCxzQkFBc0IsR0FBRyw2RUFBNkUsYUFBYSxrQkFBa0IsbUJBQW1CLEdBQUcsNkZBQTZGLFlBQVkseUNBQXlDLDRCQUE0QixHQUFHLG9CQUFvQixxQkFBcUIsNEJBQTRCLG1CQUFtQix1QkFBdUIsMkJBQTJCLDJCQUEyQixHQUFHLGNBQWMsdUJBQXVCLFdBQVcsWUFBWSxrQkFBa0IsbUJBQW1CLHFCQUFxQixxTkFBcU4sdUJBQXVCLHFCQUFxQixxQkFBcUIscUJBQXFCLHNCQUFzQiwwQkFBMEIsc0JBQXNCLHlCQUF5QiwyQkFBMkIsdUJBQXVCLHlCQUF5Qix3QkFBd0IscUJBQXFCLHdCQUF3QiwwQkFBMEIsMkJBQTJCLGlDQUFpQyx5Q0FBeUMsMEJBQTBCLEdBQUcscUJBQXFCLHVCQUF1QixtQkFBbUIsZ0JBQWdCLG1CQUFtQixxQkFBcUIsR0FBRyxxREFBcUQsdUJBQXVCLG1CQUFtQixrQkFBa0IsOEJBQThCLHdCQUF3QixHQUFHLDZEQUE2RCwwQkFBMEIsR0FBRywrRUFBK0Usc0NBQXNDLEdBQUcsK0ZBQStGLGNBQWMsa0NBQWtDLDBDQUEwQyxHQUFHLDZGQUE2RixnQkFBZ0Isa0NBQWtDLDJCQUEyQixHQUFHLGlFQUFpRSx3QkFBd0IsR0FBRyxtRkFBbUYsb0NBQW9DLGtCQUFrQixpQkFBaUIscUJBQXFCLEdBQUcsbUdBQW1HLFlBQVkseUNBQXlDLDRDQUE0QyxHQUFHLGlHQUFpRyxjQUFjLHlDQUF5Qyw2QkFBNkIsR0FBRyxtRUFBbUUsdUJBQXVCLEdBQUcscUZBQXFGLG1DQUFtQyxHQUFHLHFHQUFxRyxXQUFXLHlDQUF5Qyw2Q0FBNkMsR0FBRyxtR0FBbUcsYUFBYSx5Q0FBeUMsOEJBQThCLEdBQUcsbUhBQW1ILHVCQUF1QixXQUFXLGNBQWMsbUJBQW1CLGdCQUFnQix5QkFBeUIsa0JBQWtCLHFDQUFxQyxHQUFHLCtEQUErRCx5QkFBeUIsR0FBRyxpRkFBaUYscUNBQXFDLGtCQUFrQixpQkFBaUIscUJBQXFCLEdBQUcsaUdBQWlHLGFBQWEseUNBQXlDLDJDQUEyQyxHQUFHLCtGQUErRixlQUFlLHlDQUF5Qyw0QkFBNEIsR0FBRyxxQkFBcUIsNEJBQTRCLHFCQUFxQixvQkFBb0IsOEJBQThCLHFDQUFxQywrQ0FBK0MsZ0RBQWdELEdBQUcsMkJBQTJCLGtCQUFrQixHQUFHLG1CQUFtQiw0QkFBNEIsbUJBQW1CLEdBQUcsZUFBZSx1QkFBdUIsR0FBRyw2QkFBNkIsNEJBQTRCLHdCQUF3QixHQUFHLHFCQUFxQix1QkFBdUIsZ0JBQWdCLHFCQUFxQixHQUFHLDRCQUE0QixtQkFBbUIsZ0JBQWdCLGtCQUFrQixHQUFHLG9CQUFvQix1QkFBdUIsa0JBQWtCLGdCQUFnQixnQkFBZ0Isd0JBQXdCLHdDQUF3QyxnQ0FBZ0MsbURBQW1ELDJDQUEyQywrRUFBK0UsR0FBRyw2Q0FBNkMsb0JBQW9CLHVCQUF1QixLQUFLLEdBQUcsdUVBQXVFLG1CQUFtQixHQUFHLGdGQUFnRix3Q0FBd0MsZ0NBQWdDLEdBQUcsZ0ZBQWdGLHlDQUF5QyxpQ0FBaUMsR0FBRyxtQ0FBbUMsZUFBZSxpQ0FBaUMsNEJBQTRCLG9CQUFvQixHQUFHLDJKQUEySixlQUFlLGVBQWUsR0FBRyw0RkFBNEYsZUFBZSxlQUFlLGdDQUFnQyxHQUFHLDZDQUE2Qyw4RkFBOEYsdUJBQXVCLEtBQUssR0FBRyxxREFBcUQsdUJBQXVCLFdBQVcsY0FBYyxlQUFlLHlCQUF5QixrQkFBa0IsMkJBQTJCLHdCQUF3QiwwQkFBMEIsNEJBQTRCLGVBQWUsZ0JBQWdCLHVCQUF1QixpQkFBaUIsbUNBQW1DLEdBQUcsNkNBQTZDLHVEQUF1RCx1QkFBdUIsS0FBSyxHQUFHLDhIQUE4SCxnQkFBZ0IsMEJBQTBCLGVBQWUsaUJBQWlCLEdBQUcsNEJBQTRCLFlBQVksR0FBRyw0QkFBNEIsYUFBYSxHQUFHLCtEQUErRCwwQkFBMEIsZ0JBQWdCLGlCQUFpQiwwQ0FBMEMsR0FBRyxpQ0FBaUMsME1BQTBNLEdBQUcsaUNBQWlDLDBNQUEwTSxHQUFHLDBCQUEwQix1QkFBdUIsYUFBYSxjQUFjLFlBQVksZ0JBQWdCLHlCQUF5QixrQkFBa0IsMEJBQTBCLDRCQUE0QixvQkFBb0Isc0JBQXNCLHFCQUFxQixxQkFBcUIsR0FBRyw2QkFBNkIsNEJBQTRCLHVCQUF1QixtQkFBbUIsZ0JBQWdCLGdCQUFnQixzQkFBc0IscUJBQXFCLHdCQUF3QixvQkFBb0IsMkJBQTJCLGlDQUFpQyx1Q0FBdUMsMENBQTBDLGdCQUFnQixrQ0FBa0MsR0FBRyw2Q0FBNkMsNkJBQTZCLHVCQUF1QixLQUFLLEdBQUcsa0NBQWtDLGVBQWUsR0FBRyx1QkFBdUIsdUJBQXVCLGVBQWUsaUJBQWlCLGNBQWMsZ0JBQWdCLHNCQUFzQix5QkFBeUIsZ0JBQWdCLHVCQUF1QixHQUFHLHVDQUF1QyxRQUFRLHdDQUF3QyxnQ0FBZ0MsS0FBSyxHQUFHLCtCQUErQixRQUFRLHdDQUF3QyxnQ0FBZ0MsS0FBSyxHQUFHLHFCQUFxQiwwQkFBMEIsZ0JBQWdCLGlCQUFpQixnQ0FBZ0Msc0NBQXNDLG9DQUFvQyx1QkFBdUIsMkRBQTJELG1EQUFtRCxHQUFHLHdCQUF3QixnQkFBZ0IsaUJBQWlCLHdCQUF3QixHQUFHLHFDQUFxQyxRQUFRLGtDQUFrQywwQkFBMEIsS0FBSyxTQUFTLGlCQUFpQixLQUFLLEdBQUcsNkJBQTZCLFFBQVEsa0NBQWtDLDBCQUEwQixLQUFLLFNBQVMsaUJBQWlCLEtBQUssR0FBRyxtQkFBbUIsMEJBQTBCLGdCQUFnQixpQkFBaUIsZ0NBQWdDLG1DQUFtQyx1QkFBdUIsZUFBZSx5REFBeUQsaURBQWlELEdBQUcsc0JBQXNCLGdCQUFnQixpQkFBaUIsR0FBRyxxQkFBcUIsd0NBQXdDLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLG1CQUFtQixzQ0FBc0MsR0FBRyxtQkFBbUIsc0NBQXNDLEdBQUcsd0JBQXdCLDJDQUEyQyxHQUFHLHFCQUFxQix3Q0FBd0MsR0FBRyxpQkFBaUIseUNBQXlDLEdBQUcsZ0dBQWdHLHlDQUF5QyxHQUFHLG1CQUFtQix5Q0FBeUMsR0FBRyx3R0FBd0cseUNBQXlDLEdBQUcsaUJBQWlCLHlDQUF5QyxHQUFHLGdHQUFnRyx5Q0FBeUMsR0FBRyxjQUFjLHlDQUF5QyxHQUFHLG9GQUFvRix5Q0FBeUMsR0FBRyxpQkFBaUIseUNBQXlDLEdBQUcsZ0dBQWdHLHlDQUF5QyxHQUFHLGdCQUFnQix5Q0FBeUMsR0FBRyw0RkFBNEYseUNBQXlDLEdBQUcsZUFBZSx5Q0FBeUMsR0FBRyx3RkFBd0YseUNBQXlDLEdBQUcsY0FBYyx5Q0FBeUMsR0FBRyxvRkFBb0YseUNBQXlDLEdBQUcsZUFBZSxzQ0FBc0MsR0FBRyxxQkFBcUIsNkNBQTZDLEdBQUcsYUFBYSx5Q0FBeUMsR0FBRyxpQkFBaUIsNkNBQTZDLEdBQUcsbUJBQW1CLCtDQUErQyxHQUFHLG9CQUFvQixnREFBZ0QsR0FBRyxrQkFBa0IsOENBQThDLEdBQUcsZUFBZSx5QkFBeUIsR0FBRyxtQkFBbUIsNkJBQTZCLEdBQUcscUJBQXFCLCtCQUErQixHQUFHLHNCQUFzQixnQ0FBZ0MsR0FBRyxvQkFBb0IsOEJBQThCLEdBQUcscUJBQXFCLHFDQUFxQyxHQUFHLHVCQUF1QixxQ0FBcUMsR0FBRyxxQkFBcUIscUNBQXFDLEdBQUcsa0JBQWtCLHFDQUFxQyxHQUFHLHFCQUFxQixxQ0FBcUMsR0FBRyxvQkFBb0IscUNBQXFDLEdBQUcsbUJBQW1CLHFDQUFxQyxHQUFHLGtCQUFrQixxQ0FBcUMsR0FBRyxtQkFBbUIsa0NBQWtDLEdBQUcsaUJBQWlCLHFDQUFxQyxHQUFHLGNBQWMsc0NBQXNDLEdBQUcsa0JBQWtCLCtDQUErQyxnREFBZ0QsR0FBRyxvQkFBb0IsZ0RBQWdELG1EQUFtRCxHQUFHLHFCQUFxQixtREFBbUQsa0RBQWtELEdBQUcsbUJBQW1CLCtDQUErQyxrREFBa0QsR0FBRyxpQkFBaUIscUNBQXFDLEdBQUcscUJBQXFCLGtDQUFrQyxHQUFHLG1CQUFtQixvQ0FBb0MsR0FBRyxnQkFBZ0IsZ0NBQWdDLEdBQUcsc0JBQXNCLG1CQUFtQixnQkFBZ0Isa0JBQWtCLEdBQUcsYUFBYSw2QkFBNkIsR0FBRyxlQUFlLCtCQUErQixHQUFHLHFCQUFxQixxQ0FBcUMsR0FBRyxjQUFjLDhCQUE4QixHQUFHLGNBQWMsOEJBQThCLEdBQUcsa0JBQWtCLGtDQUFrQyxHQUFHLG1CQUFtQixtQ0FBbUMsR0FBRyxhQUFhLG9DQUFvQyw2QkFBNkIsR0FBRyxvQkFBb0IsMkNBQTJDLG9DQUFvQyxHQUFHLCtCQUErQixnQkFBZ0IsK0JBQStCLEtBQUssa0JBQWtCLGlDQUFpQyxLQUFLLHdCQUF3Qix1Q0FBdUMsS0FBSyxpQkFBaUIsZ0NBQWdDLEtBQUssaUJBQWlCLGdDQUFnQyxLQUFLLHFCQUFxQixvQ0FBb0MsS0FBSyxzQkFBc0IscUNBQXFDLEtBQUssZ0JBQWdCLHNDQUFzQywrQkFBK0IsS0FBSyx1QkFBdUIsNkNBQTZDLHNDQUFzQyxLQUFLLEdBQUcsK0JBQStCLGdCQUFnQiwrQkFBK0IsS0FBSyxrQkFBa0IsaUNBQWlDLEtBQUssd0JBQXdCLHVDQUF1QyxLQUFLLGlCQUFpQixnQ0FBZ0MsS0FBSyxpQkFBaUIsZ0NBQWdDLEtBQUsscUJBQXFCLG9DQUFvQyxLQUFLLHNCQUFzQixxQ0FBcUMsS0FBSyxnQkFBZ0Isc0NBQXNDLCtCQUErQixLQUFLLHVCQUF1Qiw2Q0FBNkMsc0NBQXNDLEtBQUssR0FBRywrQkFBK0IsZ0JBQWdCLCtCQUErQixLQUFLLGtCQUFrQixpQ0FBaUMsS0FBSyx3QkFBd0IsdUNBQXVDLEtBQUssaUJBQWlCLGdDQUFnQyxLQUFLLGlCQUFpQixnQ0FBZ0MsS0FBSyxxQkFBcUIsb0NBQW9DLEtBQUssc0JBQXNCLHFDQUFxQyxLQUFLLGdCQUFnQixzQ0FBc0MsK0JBQStCLEtBQUssdUJBQXVCLDZDQUE2QyxzQ0FBc0MsS0FBSyxHQUFHLGdDQUFnQyxnQkFBZ0IsK0JBQStCLEtBQUssa0JBQWtCLGlDQUFpQyxLQUFLLHdCQUF3Qix1Q0FBdUMsS0FBSyxpQkFBaUIsZ0NBQWdDLEtBQUssaUJBQWlCLGdDQUFnQyxLQUFLLHFCQUFxQixvQ0FBb0MsS0FBSyxzQkFBc0IscUNBQXFDLEtBQUssZ0JBQWdCLHNDQUFzQywrQkFBK0IsS0FBSyx1QkFBdUIsNkNBQTZDLHNDQUFzQyxLQUFLLEdBQUcsa0JBQWtCLG1CQUFtQiwrQkFBK0IsS0FBSyxxQkFBcUIsaUNBQWlDLEtBQUssMkJBQTJCLHVDQUF1QyxLQUFLLG9CQUFvQixnQ0FBZ0MsS0FBSyxvQkFBb0IsZ0NBQWdDLEtBQUssd0JBQXdCLG9DQUFvQyxLQUFLLHlCQUF5QixxQ0FBcUMsS0FBSyxtQkFBbUIsc0NBQXNDLCtCQUErQixLQUFLLDBCQUEwQiw2Q0FBNkMsc0NBQXNDLEtBQUssR0FBRyx1QkFBdUIsdUJBQXVCLG1CQUFtQixnQkFBZ0IsZUFBZSxxQkFBcUIsR0FBRywrQkFBK0IsbUJBQW1CLGtCQUFrQixHQUFHLHdKQUF3Six1QkFBdUIsV0FBVyxjQUFjLFlBQVksZ0JBQWdCLGlCQUFpQixjQUFjLEdBQUcscUNBQXFDLDRCQUE0QixHQUFHLHFDQUFxQyx3QkFBd0IsR0FBRyxvQ0FBb0MscUJBQXFCLEdBQUcsb0NBQW9DLHNCQUFzQixHQUFHLGVBQWUsdUNBQXVDLG1DQUFtQyxHQUFHLGtCQUFrQiwwQ0FBMEMsc0NBQXNDLEdBQUcsdUJBQXVCLCtDQUErQywyQ0FBMkMsR0FBRywwQkFBMEIsa0RBQWtELDhDQUE4QyxHQUFHLGdCQUFnQixtQ0FBbUMsK0JBQStCLEdBQUcsa0JBQWtCLHFDQUFxQyxpQ0FBaUMsR0FBRyx3QkFBd0IsMkNBQTJDLHVDQUF1QyxHQUFHLGdCQUFnQixrQ0FBa0MsOEJBQThCLEdBQUcsa0JBQWtCLG9DQUFvQyw0QkFBNEIsR0FBRyxrQkFBa0Isb0NBQW9DLDRCQUE0QixHQUFHLG9CQUFvQixvQ0FBb0MsOEJBQThCLEdBQUcsb0JBQW9CLG9DQUFvQyw4QkFBOEIsR0FBRyw0QkFBNEIsb0NBQW9DLDJDQUEyQyxHQUFHLDBCQUEwQixrQ0FBa0MseUNBQXlDLEdBQUcsNkJBQTZCLHFDQUFxQyx1Q0FBdUMsR0FBRyw4QkFBOEIsc0NBQXNDLDhDQUE4QyxHQUFHLDZCQUE2Qix5Q0FBeUMsNkNBQTZDLEdBQUcsd0JBQXdCLHFDQUFxQyx1Q0FBdUMsR0FBRyxzQkFBc0IsbUNBQW1DLHFDQUFxQyxHQUFHLHlCQUF5QixzQ0FBc0MsbUNBQW1DLEdBQUcsMkJBQTJCLHdDQUF3QyxxQ0FBcUMsR0FBRywwQkFBMEIsdUNBQXVDLG9DQUFvQyxHQUFHLDBCQUEwQix5Q0FBeUMseUNBQXlDLEdBQUcsd0JBQXdCLHVDQUF1Qyx1Q0FBdUMsR0FBRywyQkFBMkIsMENBQTBDLHFDQUFxQyxHQUFHLDRCQUE0QiwyQ0FBMkMsNENBQTRDLEdBQUcsMkJBQTJCLDhDQUE4QywyQ0FBMkMsR0FBRyw0QkFBNEIsMkNBQTJDLHNDQUFzQyxHQUFHLHNCQUFzQix5Q0FBeUMsZ0NBQWdDLEdBQUcsdUJBQXVCLDBDQUEwQyxzQ0FBc0MsR0FBRyxxQkFBcUIsd0NBQXdDLG9DQUFvQyxHQUFHLHdCQUF3QiwyQ0FBMkMsa0NBQWtDLEdBQUcsMEJBQTBCLDZDQUE2QyxvQ0FBb0MsR0FBRyx5QkFBeUIsNENBQTRDLG1DQUFtQyxHQUFHLCtCQUErQixrQkFBa0IseUNBQXlDLHFDQUFxQyxLQUFLLHFCQUFxQiw0Q0FBNEMsd0NBQXdDLEtBQUssMEJBQTBCLGlEQUFpRCw2Q0FBNkMsS0FBSyw2QkFBNkIsb0RBQW9ELGdEQUFnRCxLQUFLLG1CQUFtQixxQ0FBcUMsaUNBQWlDLEtBQUsscUJBQXFCLHVDQUF1QyxtQ0FBbUMsS0FBSywyQkFBMkIsNkNBQTZDLHlDQUF5QyxLQUFLLG1CQUFtQixvQ0FBb0MsZ0NBQWdDLEtBQUsscUJBQXFCLHNDQUFzQyw4QkFBOEIsS0FBSyxxQkFBcUIsc0NBQXNDLDhCQUE4QixLQUFLLHVCQUF1QixzQ0FBc0MsZ0NBQWdDLEtBQUssdUJBQXVCLHNDQUFzQyxnQ0FBZ0MsS0FBSywrQkFBK0Isc0NBQXNDLDZDQUE2QyxLQUFLLDZCQUE2QixvQ0FBb0MsMkNBQTJDLEtBQUssZ0NBQWdDLHVDQUF1Qyx5Q0FBeUMsS0FBSyxpQ0FBaUMsd0NBQXdDLGdEQUFnRCxLQUFLLGdDQUFnQywyQ0FBMkMsK0NBQStDLEtBQUssMkJBQTJCLHVDQUF1Qyx5Q0FBeUMsS0FBSyx5QkFBeUIscUNBQXFDLHVDQUF1QyxLQUFLLDRCQUE0Qix3Q0FBd0MscUNBQXFDLEtBQUssOEJBQThCLDBDQUEwQyx1Q0FBdUMsS0FBSyw2QkFBNkIseUNBQXlDLHNDQUFzQyxLQUFLLDZCQUE2QiwyQ0FBMkMsMkNBQTJDLEtBQUssMkJBQTJCLHlDQUF5Qyx5Q0FBeUMsS0FBSyw4QkFBOEIsNENBQTRDLHVDQUF1QyxLQUFLLCtCQUErQiw2Q0FBNkMsOENBQThDLEtBQUssOEJBQThCLGdEQUFnRCw2Q0FBNkMsS0FBSywrQkFBK0IsNkNBQTZDLHdDQUF3QyxLQUFLLHlCQUF5QiwyQ0FBMkMsa0NBQWtDLEtBQUssMEJBQTBCLDRDQUE0Qyx3Q0FBd0MsS0FBSyx3QkFBd0IsMENBQTBDLHNDQUFzQyxLQUFLLDJCQUEyQiw2Q0FBNkMsb0NBQW9DLEtBQUssNkJBQTZCLCtDQUErQyxzQ0FBc0MsS0FBSyw0QkFBNEIsOENBQThDLHFDQUFxQyxLQUFLLEdBQUcsK0JBQStCLGtCQUFrQix5Q0FBeUMscUNBQXFDLEtBQUsscUJBQXFCLDRDQUE0Qyx3Q0FBd0MsS0FBSywwQkFBMEIsaURBQWlELDZDQUE2QyxLQUFLLDZCQUE2QixvREFBb0QsZ0RBQWdELEtBQUssbUJBQW1CLHFDQUFxQyxpQ0FBaUMsS0FBSyxxQkFBcUIsdUNBQXVDLG1DQUFtQyxLQUFLLDJCQUEyQiw2Q0FBNkMseUNBQXlDLEtBQUssbUJBQW1CLG9DQUFvQyxnQ0FBZ0MsS0FBSyxxQkFBcUIsc0NBQXNDLDhCQUE4QixLQUFLLHFCQUFxQixzQ0FBc0MsOEJBQThCLEtBQUssdUJBQXVCLHNDQUFzQyxnQ0FBZ0MsS0FBSyx1QkFBdUIsc0NBQXNDLGdDQUFnQyxLQUFLLCtCQUErQixzQ0FBc0MsNkNBQTZDLEtBQUssNkJBQTZCLG9DQUFvQywyQ0FBMkMsS0FBSyxnQ0FBZ0MsdUNBQXVDLHlDQUF5QyxLQUFLLGlDQUFpQyx3Q0FBd0MsZ0RBQWdELEtBQUssZ0NBQWdDLDJDQUEyQywrQ0FBK0MsS0FBSywyQkFBMkIsdUNBQXVDLHlDQUF5QyxLQUFLLHlCQUF5QixxQ0FBcUMsdUNBQXVDLEtBQUssNEJBQTRCLHdDQUF3QyxxQ0FBcUMsS0FBSyw4QkFBOEIsMENBQTBDLHVDQUF1QyxLQUFLLDZCQUE2Qix5Q0FBeUMsc0NBQXNDLEtBQUssNkJBQTZCLDJDQUEyQywyQ0FBMkMsS0FBSywyQkFBMkIseUNBQXlDLHlDQUF5QyxLQUFLLDhCQUE4Qiw0Q0FBNEMsdUNBQXVDLEtBQUssK0JBQStCLDZDQUE2Qyw4Q0FBOEMsS0FBSyw4QkFBOEIsZ0RBQWdELDZDQUE2QyxLQUFLLCtCQUErQiw2Q0FBNkMsd0NBQXdDLEtBQUsseUJBQXlCLDJDQUEyQyxrQ0FBa0MsS0FBSywwQkFBMEIsNENBQTRDLHdDQUF3QyxLQUFLLHdCQUF3QiwwQ0FBMEMsc0NBQXNDLEtBQUssMkJBQTJCLDZDQUE2QyxvQ0FBb0MsS0FBSyw2QkFBNkIsK0NBQStDLHNDQUFzQyxLQUFLLDRCQUE0Qiw4Q0FBOEMscUNBQXFDLEtBQUssR0FBRywrQkFBK0Isa0JBQWtCLHlDQUF5QyxxQ0FBcUMsS0FBSyxxQkFBcUIsNENBQTRDLHdDQUF3QyxLQUFLLDBCQUEwQixpREFBaUQsNkNBQTZDLEtBQUssNkJBQTZCLG9EQUFvRCxnREFBZ0QsS0FBSyxtQkFBbUIscUNBQXFDLGlDQUFpQyxLQUFLLHFCQUFxQix1Q0FBdUMsbUNBQW1DLEtBQUssMkJBQTJCLDZDQUE2Qyx5Q0FBeUMsS0FBSyxtQkFBbUIsb0NBQW9DLGdDQUFnQyxLQUFLLHFCQUFxQixzQ0FBc0MsOEJBQThCLEtBQUsscUJBQXFCLHNDQUFzQyw4QkFBOEIsS0FBSyx1QkFBdUIsc0NBQXNDLGdDQUFnQyxLQUFLLHVCQUF1QixzQ0FBc0MsZ0NBQWdDLEtBQUssK0JBQStCLHNDQUFzQyw2Q0FBNkMsS0FBSyw2QkFBNkIsb0NBQW9DLDJDQUEyQyxLQUFLLGdDQUFnQyx1Q0FBdUMseUNBQXlDLEtBQUssaUNBQWlDLHdDQUF3QyxnREFBZ0QsS0FBSyxnQ0FBZ0MsMkNBQTJDLCtDQUErQyxLQUFLLDJCQUEyQix1Q0FBdUMseUNBQXlDLEtBQUsseUJBQXlCLHFDQUFxQyx1Q0FBdUMsS0FBSyw0QkFBNEIsd0NBQXdDLHFDQUFxQyxLQUFLLDhCQUE4QiwwQ0FBMEMsdUNBQXVDLEtBQUssNkJBQTZCLHlDQUF5QyxzQ0FBc0MsS0FBSyw2QkFBNkIsMkNBQTJDLDJDQUEyQyxLQUFLLDJCQUEyQix5Q0FBeUMseUNBQXlDLEtBQUssOEJBQThCLDRDQUE0Qyx1Q0FBdUMsS0FBSywrQkFBK0IsNkNBQTZDLDhDQUE4QyxLQUFLLDhCQUE4QixnREFBZ0QsNkNBQTZDLEtBQUssK0JBQStCLDZDQUE2Qyx3Q0FBd0MsS0FBSyx5QkFBeUIsMkNBQTJDLGtDQUFrQyxLQUFLLDBCQUEwQiw0Q0FBNEMsd0NBQXdDLEtBQUssd0JBQXdCLDBDQUEwQyxzQ0FBc0MsS0FBSywyQkFBMkIsNkNBQTZDLG9DQUFvQyxLQUFLLDZCQUE2QiwrQ0FBK0Msc0NBQXNDLEtBQUssNEJBQTRCLDhDQUE4QyxxQ0FBcUMsS0FBSyxHQUFHLGdDQUFnQyxrQkFBa0IseUNBQXlDLHFDQUFxQyxLQUFLLHFCQUFxQiw0Q0FBNEMsd0NBQXdDLEtBQUssMEJBQTBCLGlEQUFpRCw2Q0FBNkMsS0FBSyw2QkFBNkIsb0RBQW9ELGdEQUFnRCxLQUFLLG1CQUFtQixxQ0FBcUMsaUNBQWlDLEtBQUsscUJBQXFCLHVDQUF1QyxtQ0FBbUMsS0FBSywyQkFBMkIsNkNBQTZDLHlDQUF5QyxLQUFLLG1CQUFtQixvQ0FBb0MsZ0NBQWdDLEtBQUsscUJBQXFCLHNDQUFzQyw4QkFBOEIsS0FBSyxxQkFBcUIsc0NBQXNDLDhCQUE4QixLQUFLLHVCQUF1QixzQ0FBc0MsZ0NBQWdDLEtBQUssdUJBQXVCLHNDQUFzQyxnQ0FBZ0MsS0FBSywrQkFBK0Isc0NBQXNDLDZDQUE2QyxLQUFLLDZCQUE2QixvQ0FBb0MsMkNBQTJDLEtBQUssZ0NBQWdDLHVDQUF1Qyx5Q0FBeUMsS0FBSyxpQ0FBaUMsd0NBQXdDLGdEQUFnRCxLQUFLLGdDQUFnQywyQ0FBMkMsK0NBQStDLEtBQUssMkJBQTJCLHVDQUF1Qyx5Q0FBeUMsS0FBSyx5QkFBeUIscUNBQXFDLHVDQUF1QyxLQUFLLDRCQUE0Qix3Q0FBd0MscUNBQXFDLEtBQUssOEJBQThCLDBDQUEwQyx1Q0FBdUMsS0FBSyw2QkFBNkIseUNBQXlDLHNDQUFzQyxLQUFLLDZCQUE2QiwyQ0FBMkMsMkNBQTJDLEtBQUssMkJBQTJCLHlDQUF5Qyx5Q0FBeUMsS0FBSyw4QkFBOEIsNENBQTRDLHVDQUF1QyxLQUFLLCtCQUErQiw2Q0FBNkMsOENBQThDLEtBQUssOEJBQThCLGdEQUFnRCw2Q0FBNkMsS0FBSywrQkFBK0IsNkNBQTZDLHdDQUF3QyxLQUFLLHlCQUF5QiwyQ0FBMkMsa0NBQWtDLEtBQUssMEJBQTBCLDRDQUE0Qyx3Q0FBd0MsS0FBSyx3QkFBd0IsMENBQTBDLHNDQUFzQyxLQUFLLDJCQUEyQiw2Q0FBNkMsb0NBQW9DLEtBQUssNkJBQTZCLCtDQUErQyxzQ0FBc0MsS0FBSyw0QkFBNEIsOENBQThDLHFDQUFxQyxLQUFLLEdBQUcsaUJBQWlCLDJCQUEyQixHQUFHLGtCQUFrQiw0QkFBNEIsR0FBRyxpQkFBaUIsMkJBQTJCLEdBQUcsK0JBQStCLG9CQUFvQiw2QkFBNkIsS0FBSyxxQkFBcUIsOEJBQThCLEtBQUssb0JBQW9CLDZCQUE2QixLQUFLLEdBQUcsK0JBQStCLG9CQUFvQiw2QkFBNkIsS0FBSyxxQkFBcUIsOEJBQThCLEtBQUssb0JBQW9CLDZCQUE2QixLQUFLLEdBQUcsK0JBQStCLG9CQUFvQiw2QkFBNkIsS0FBSyxxQkFBcUIsOEJBQThCLEtBQUssb0JBQW9CLDZCQUE2QixLQUFLLEdBQUcsZ0NBQWdDLG9CQUFvQiw2QkFBNkIsS0FBSyxxQkFBcUIsOEJBQThCLEtBQUssb0JBQW9CLDZCQUE2QixLQUFLLEdBQUcsb0JBQW9CLDhCQUE4QixHQUFHLHNCQUFzQixnQ0FBZ0MsR0FBRyxzQkFBc0IsZ0NBQWdDLEdBQUcsd0JBQXdCLGtDQUFrQyxHQUFHLHdCQUF3QixrQ0FBa0MsR0FBRyxxQkFBcUIsK0JBQStCLEdBQUcsc0JBQXNCLHdDQUF3QyxnQ0FBZ0MsR0FBRyxnQkFBZ0Isb0JBQW9CLFdBQVcsYUFBYSxZQUFZLGtCQUFrQixHQUFHLG1CQUFtQixvQkFBb0IsYUFBYSxjQUFjLFlBQVksa0JBQWtCLEdBQUcsa0VBQWtFLGlCQUFpQiwrQkFBK0IsdUJBQXVCLGFBQWEsb0JBQW9CLEtBQUssR0FBRyxjQUFjLHVCQUF1QixlQUFlLGdCQUFnQixlQUFlLHFCQUFxQiwyQkFBMkIsd0JBQXdCLGNBQWMsR0FBRyx5REFBeUQscUJBQXFCLGdCQUFnQixpQkFBaUIsc0JBQXNCLGVBQWUsd0JBQXdCLEdBQUcsZ0JBQWdCLG1FQUFtRSxHQUFHLGFBQWEsNkRBQTZELEdBQUcsZ0JBQWdCLDREQUE0RCxHQUFHLGtCQUFrQixnQ0FBZ0MsR0FBRyxXQUFXLDBCQUEwQixHQUFHLFdBQVcsMEJBQTBCLEdBQUcsV0FBVywwQkFBMEIsR0FBRyxZQUFZLDJCQUEyQixHQUFHLGFBQWEsMkJBQTJCLEdBQUcsV0FBVywyQkFBMkIsR0FBRyxXQUFXLDJCQUEyQixHQUFHLFdBQVcsMkJBQTJCLEdBQUcsWUFBWSw0QkFBNEIsR0FBRyxhQUFhLDRCQUE0QixHQUFHLGFBQWEsK0JBQStCLEdBQUcsYUFBYSxnQ0FBZ0MsR0FBRyxpQkFBaUIsZ0NBQWdDLEdBQUcsaUJBQWlCLGlDQUFpQyxHQUFHLGFBQWEsNEJBQTRCLEdBQUcsYUFBYSw2QkFBNkIsR0FBRyw0QkFBNEIsdUJBQXVCLFdBQVcsYUFBYSxjQUFjLFlBQVksZUFBZSx5QkFBeUIsa0JBQWtCLHVDQUF1QyxHQUFHLFVBQVUseUJBQXlCLEdBQUcsbUJBQW1CLDZCQUE2QixHQUFHLG1CQUFtQiwrQkFBK0IsR0FBRyxtQkFBbUIsZ0NBQWdDLEdBQUcsbUJBQW1CLDhCQUE4QixHQUFHLFVBQVUsK0JBQStCLEdBQUcsbUJBQW1CLG1DQUFtQyxHQUFHLG1CQUFtQixxQ0FBcUMsR0FBRyxtQkFBbUIsc0NBQXNDLEdBQUcsbUJBQW1CLG9DQUFvQyxHQUFHLFVBQVUsOEJBQThCLEdBQUcsbUJBQW1CLGtDQUFrQyxHQUFHLG1CQUFtQixvQ0FBb0MsR0FBRyxtQkFBbUIscUNBQXFDLEdBQUcsbUJBQW1CLG1DQUFtQyxHQUFHLFVBQVUsNEJBQTRCLEdBQUcsbUJBQW1CLGdDQUFnQyxHQUFHLG1CQUFtQixrQ0FBa0MsR0FBRyxtQkFBbUIsbUNBQW1DLEdBQUcsbUJBQW1CLGlDQUFpQyxHQUFHLFVBQVUsOEJBQThCLEdBQUcsbUJBQW1CLGtDQUFrQyxHQUFHLG1CQUFtQixvQ0FBb0MsR0FBRyxtQkFBbUIscUNBQXFDLEdBQUcsbUJBQW1CLG1DQUFtQyxHQUFHLFVBQVUsNEJBQTRCLEdBQUcsbUJBQW1CLGdDQUFnQyxHQUFHLG1CQUFtQixrQ0FBa0MsR0FBRyxtQkFBbUIsbUNBQW1DLEdBQUcsbUJBQW1CLGlDQUFpQyxHQUFHLFVBQVUsMEJBQTBCLEdBQUcsbUJBQW1CLDhCQUE4QixHQUFHLG1CQUFtQixnQ0FBZ0MsR0FBRyxtQkFBbUIsaUNBQWlDLEdBQUcsbUJBQW1CLCtCQUErQixHQUFHLFVBQVUsZ0NBQWdDLEdBQUcsbUJBQW1CLG9DQUFvQyxHQUFHLG1CQUFtQixzQ0FBc0MsR0FBRyxtQkFBbUIsdUNBQXVDLEdBQUcsbUJBQW1CLHFDQUFxQyxHQUFHLFVBQVUsK0JBQStCLEdBQUcsbUJBQW1CLG1DQUFtQyxHQUFHLG1CQUFtQixxQ0FBcUMsR0FBRyxtQkFBbUIsc0NBQXNDLEdBQUcsbUJBQW1CLG9DQUFvQyxHQUFHLFVBQVUsNkJBQTZCLEdBQUcsbUJBQW1CLGlDQUFpQyxHQUFHLG1CQUFtQixtQ0FBbUMsR0FBRyxtQkFBbUIsb0NBQW9DLEdBQUcsbUJBQW1CLGtDQUFrQyxHQUFHLFVBQVUsK0JBQStCLEdBQUcsbUJBQW1CLG1DQUFtQyxHQUFHLG1CQUFtQixxQ0FBcUMsR0FBRyxtQkFBbUIsc0NBQXNDLEdBQUcsbUJBQW1CLG9DQUFvQyxHQUFHLFVBQVUsNkJBQTZCLEdBQUcsbUJBQW1CLGlDQUFpQyxHQUFHLG1CQUFtQixtQ0FBbUMsR0FBRyxtQkFBbUIsb0NBQW9DLEdBQUcsbUJBQW1CLGtDQUFrQyxHQUFHLFdBQVcsZ0NBQWdDLEdBQUcscUJBQXFCLG9DQUFvQyxHQUFHLHFCQUFxQixzQ0FBc0MsR0FBRyxxQkFBcUIsdUNBQXVDLEdBQUcscUJBQXFCLHFDQUFxQyxHQUFHLFdBQVcsK0JBQStCLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixxQ0FBcUMsR0FBRyxxQkFBcUIsc0NBQXNDLEdBQUcscUJBQXFCLG9DQUFvQyxHQUFHLFdBQVcsNkJBQTZCLEdBQUcscUJBQXFCLGlDQUFpQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsb0NBQW9DLEdBQUcscUJBQXFCLGtDQUFrQyxHQUFHLFdBQVcsK0JBQStCLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixxQ0FBcUMsR0FBRyxxQkFBcUIsc0NBQXNDLEdBQUcscUJBQXFCLG9DQUFvQyxHQUFHLFdBQVcsNkJBQTZCLEdBQUcscUJBQXFCLGlDQUFpQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsb0NBQW9DLEdBQUcscUJBQXFCLGtDQUFrQyxHQUFHLGFBQWEsNEJBQTRCLEdBQUcseUJBQXlCLGdDQUFnQyxHQUFHLHlCQUF5QixrQ0FBa0MsR0FBRyx5QkFBeUIsbUNBQW1DLEdBQUcseUJBQXlCLGlDQUFpQyxHQUFHLCtCQUErQixhQUFhLDJCQUEyQixLQUFLLDJCQUEyQiwrQkFBK0IsS0FBSywyQkFBMkIsaUNBQWlDLEtBQUssMkJBQTJCLGtDQUFrQyxLQUFLLDJCQUEyQixnQ0FBZ0MsS0FBSyxhQUFhLGlDQUFpQyxLQUFLLDJCQUEyQixxQ0FBcUMsS0FBSywyQkFBMkIsdUNBQXVDLEtBQUssMkJBQTJCLHdDQUF3QyxLQUFLLDJCQUEyQixzQ0FBc0MsS0FBSyxhQUFhLGdDQUFnQyxLQUFLLDJCQUEyQixvQ0FBb0MsS0FBSywyQkFBMkIsc0NBQXNDLEtBQUssMkJBQTJCLHVDQUF1QyxLQUFLLDJCQUEyQixxQ0FBcUMsS0FBSyxhQUFhLDhCQUE4QixLQUFLLDJCQUEyQixrQ0FBa0MsS0FBSywyQkFBMkIsb0NBQW9DLEtBQUssMkJBQTJCLHFDQUFxQyxLQUFLLDJCQUEyQixtQ0FBbUMsS0FBSyxhQUFhLGdDQUFnQyxLQUFLLDJCQUEyQixvQ0FBb0MsS0FBSywyQkFBMkIsc0NBQXNDLEtBQUssMkJBQTJCLHVDQUF1QyxLQUFLLDJCQUEyQixxQ0FBcUMsS0FBSyxhQUFhLDhCQUE4QixLQUFLLDJCQUEyQixrQ0FBa0MsS0FBSywyQkFBMkIsb0NBQW9DLEtBQUssMkJBQTJCLHFDQUFxQyxLQUFLLDJCQUEyQixtQ0FBbUMsS0FBSyxhQUFhLDRCQUE0QixLQUFLLDJCQUEyQixnQ0FBZ0MsS0FBSywyQkFBMkIsa0NBQWtDLEtBQUssMkJBQTJCLG1DQUFtQyxLQUFLLDJCQUEyQixpQ0FBaUMsS0FBSyxhQUFhLGtDQUFrQyxLQUFLLDJCQUEyQixzQ0FBc0MsS0FBSywyQkFBMkIsd0NBQXdDLEtBQUssMkJBQTJCLHlDQUF5QyxLQUFLLDJCQUEyQix1Q0FBdUMsS0FBSyxhQUFhLGlDQUFpQyxLQUFLLDJCQUEyQixxQ0FBcUMsS0FBSywyQkFBMkIsdUNBQXVDLEtBQUssMkJBQTJCLHdDQUF3QyxLQUFLLDJCQUEyQixzQ0FBc0MsS0FBSyxhQUFhLCtCQUErQixLQUFLLDJCQUEyQixtQ0FBbUMsS0FBSywyQkFBMkIscUNBQXFDLEtBQUssMkJBQTJCLHNDQUFzQyxLQUFLLDJCQUEyQixvQ0FBb0MsS0FBSyxhQUFhLGlDQUFpQyxLQUFLLDJCQUEyQixxQ0FBcUMsS0FBSywyQkFBMkIsdUNBQXVDLEtBQUssMkJBQTJCLHdDQUF3QyxLQUFLLDJCQUEyQixzQ0FBc0MsS0FBSyxhQUFhLCtCQUErQixLQUFLLDJCQUEyQixtQ0FBbUMsS0FBSywyQkFBMkIscUNBQXFDLEtBQUssMkJBQTJCLHNDQUFzQyxLQUFLLDJCQUEyQixvQ0FBb0MsS0FBSyxjQUFjLGtDQUFrQyxLQUFLLDZCQUE2QixzQ0FBc0MsS0FBSyw2QkFBNkIsd0NBQXdDLEtBQUssNkJBQTZCLHlDQUF5QyxLQUFLLDZCQUE2Qix1Q0FBdUMsS0FBSyxjQUFjLGlDQUFpQyxLQUFLLDZCQUE2QixxQ0FBcUMsS0FBSyw2QkFBNkIsdUNBQXVDLEtBQUssNkJBQTZCLHdDQUF3QyxLQUFLLDZCQUE2QixzQ0FBc0MsS0FBSyxjQUFjLCtCQUErQixLQUFLLDZCQUE2QixtQ0FBbUMsS0FBSyw2QkFBNkIscUNBQXFDLEtBQUssNkJBQTZCLHNDQUFzQyxLQUFLLDZCQUE2QixvQ0FBb0MsS0FBSyxjQUFjLGlDQUFpQyxLQUFLLDZCQUE2QixxQ0FBcUMsS0FBSyw2QkFBNkIsdUNBQXVDLEtBQUssNkJBQTZCLHdDQUF3QyxLQUFLLDZCQUE2QixzQ0FBc0MsS0FBSyxjQUFjLCtCQUErQixLQUFLLDZCQUE2QixtQ0FBbUMsS0FBSyw2QkFBNkIscUNBQXFDLEtBQUssNkJBQTZCLHNDQUFzQyxLQUFLLDZCQUE2QixvQ0FBb0MsS0FBSyxnQkFBZ0IsOEJBQThCLEtBQUssaUNBQWlDLGtDQUFrQyxLQUFLLGlDQUFpQyxvQ0FBb0MsS0FBSyxpQ0FBaUMscUNBQXFDLEtBQUssaUNBQWlDLG1DQUFtQyxLQUFLLEdBQUcsK0JBQStCLGFBQWEsMkJBQTJCLEtBQUssMkJBQTJCLCtCQUErQixLQUFLLDJCQUEyQixpQ0FBaUMsS0FBSywyQkFBMkIsa0NBQWtDLEtBQUssMkJBQTJCLGdDQUFnQyxLQUFLLGFBQWEsaUNBQWlDLEtBQUssMkJBQTJCLHFDQUFxQyxLQUFLLDJCQUEyQix1Q0FBdUMsS0FBSywyQkFBMkIsd0NBQXdDLEtBQUssMkJBQTJCLHNDQUFzQyxLQUFLLGFBQWEsZ0NBQWdDLEtBQUssMkJBQTJCLG9DQUFvQyxLQUFLLDJCQUEyQixzQ0FBc0MsS0FBSywyQkFBMkIsdUNBQXVDLEtBQUssMkJBQTJCLHFDQUFxQyxLQUFLLGFBQWEsOEJBQThCLEtBQUssMkJBQTJCLGtDQUFrQyxLQUFLLDJCQUEyQixvQ0FBb0MsS0FBSywyQkFBMkIscUNBQXFDLEtBQUssMkJBQTJCLG1DQUFtQyxLQUFLLGFBQWEsZ0NBQWdDLEtBQUssMkJBQTJCLG9DQUFvQyxLQUFLLDJCQUEyQixzQ0FBc0MsS0FBSywyQkFBMkIsdUNBQXVDLEtBQUssMkJBQTJCLHFDQUFxQyxLQUFLLGFBQWEsOEJBQThCLEtBQUssMkJBQTJCLGtDQUFrQyxLQUFLLDJCQUEyQixvQ0FBb0MsS0FBSywyQkFBMkIscUNBQXFDLEtBQUssMkJBQTJCLG1DQUFtQyxLQUFLLGFBQWEsNEJBQTRCLEtBQUssMkJBQTJCLGdDQUFnQyxLQUFLLDJCQUEyQixrQ0FBa0MsS0FBSywyQkFBMkIsbUNBQW1DLEtBQUssMkJBQTJCLGlDQUFpQyxLQUFLLGFBQWEsa0NBQWtDLEtBQUssMkJBQTJCLHNDQUFzQyxLQUFLLDJCQUEyQix3Q0FBd0MsS0FBSywyQkFBMkIseUNBQXlDLEtBQUssMkJBQTJCLHVDQUF1QyxLQUFLLGFBQWEsaUNBQWlDLEtBQUssMkJBQTJCLHFDQUFxQyxLQUFLLDJCQUEyQix1Q0FBdUMsS0FBSywyQkFBMkIsd0NBQXdDLEtBQUssMkJBQTJCLHNDQUFzQyxLQUFLLGFBQWEsK0JBQStCLEtBQUssMkJBQTJCLG1DQUFtQyxLQUFLLDJCQUEyQixxQ0FBcUMsS0FBSywyQkFBMkIsc0NBQXNDLEtBQUssMkJBQTJCLG9DQUFvQyxLQUFLLGFBQWEsaUNBQWlDLEtBQUssMkJBQTJCLHFDQUFxQyxLQUFLLDJCQUEyQix1Q0FBdUMsS0FBSywyQkFBMkIsd0NBQXdDLEtBQUssMkJBQTJCLHNDQUFzQyxLQUFLLGFBQWEsK0JBQStCLEtBQUssMkJBQTJCLG1DQUFtQyxLQUFLLDJCQUEyQixxQ0FBcUMsS0FBSywyQkFBMkIsc0NBQXNDLEtBQUssMkJBQTJCLG9DQUFvQyxLQUFLLGNBQWMsa0NBQWtDLEtBQUssNkJBQTZCLHNDQUFzQyxLQUFLLDZCQUE2Qix3Q0FBd0MsS0FBSyw2QkFBNkIseUNBQXlDLEtBQUssNkJBQTZCLHVDQUF1QyxLQUFLLGNBQWMsaUNBQWlDLEtBQUssNkJBQTZCLHFDQUFxQyxLQUFLLDZCQUE2Qix1Q0FBdUMsS0FBSyw2QkFBNkIsd0NBQXdDLEtBQUssNkJBQTZCLHNDQUFzQyxLQUFLLGNBQWMsK0JBQStCLEtBQUssNkJBQTZCLG1DQUFtQyxLQUFLLDZCQUE2QixxQ0FBcUMsS0FBSyw2QkFBNkIsc0NBQXNDLEtBQUssNkJBQTZCLG9DQUFvQyxLQUFLLGNBQWMsaUNBQWlDLEtBQUssNkJBQTZCLHFDQUFxQyxLQUFLLDZCQUE2Qix1Q0FBdUMsS0FBSyw2QkFBNkIsd0NBQXdDLEtBQUssNkJBQTZCLHNDQUFzQyxLQUFLLGNBQWMsK0JBQStCLEtBQUssNkJBQTZCLG1DQUFtQyxLQUFLLDZCQUE2QixxQ0FBcUMsS0FBSyw2QkFBNkIsc0NBQXNDLEtBQUssNkJBQTZCLG9DQUFvQyxLQUFLLGdCQUFnQiw4QkFBOEIsS0FBSyxpQ0FBaUMsa0NBQWtDLEtBQUssaUNBQWlDLG9DQUFvQyxLQUFLLGlDQUFpQyxxQ0FBcUMsS0FBSyxpQ0FBaUMsbUNBQW1DLEtBQUssR0FBRywrQkFBK0IsYUFBYSwyQkFBMkIsS0FBSywyQkFBMkIsK0JBQStCLEtBQUssMkJBQTJCLGlDQUFpQyxLQUFLLDJCQUEyQixrQ0FBa0MsS0FBSywyQkFBMkIsZ0NBQWdDLEtBQUssYUFBYSxpQ0FBaUMsS0FBSywyQkFBMkIscUNBQXFDLEtBQUssMkJBQTJCLHVDQUF1QyxLQUFLLDJCQUEyQix3Q0FBd0MsS0FBSywyQkFBMkIsc0NBQXNDLEtBQUssYUFBYSxnQ0FBZ0MsS0FBSywyQkFBMkIsb0NBQW9DLEtBQUssMkJBQTJCLHNDQUFzQyxLQUFLLDJCQUEyQix1Q0FBdUMsS0FBSywyQkFBMkIscUNBQXFDLEtBQUssYUFBYSw4QkFBOEIsS0FBSywyQkFBMkIsa0NBQWtDLEtBQUssMkJBQTJCLG9DQUFvQyxLQUFLLDJCQUEyQixxQ0FBcUMsS0FBSywyQkFBMkIsbUNBQW1DLEtBQUssYUFBYSxnQ0FBZ0MsS0FBSywyQkFBMkIsb0NBQW9DLEtBQUssMkJBQTJCLHNDQUFzQyxLQUFLLDJCQUEyQix1Q0FBdUMsS0FBSywyQkFBMkIscUNBQXFDLEtBQUssYUFBYSw4QkFBOEIsS0FBSywyQkFBMkIsa0NBQWtDLEtBQUssMkJBQTJCLG9DQUFvQyxLQUFLLDJCQUEyQixxQ0FBcUMsS0FBSywyQkFBMkIsbUNBQW1DLEtBQUssYUFBYSw0QkFBNEIsS0FBSywyQkFBMkIsZ0NBQWdDLEtBQUssMkJBQTJCLGtDQUFrQyxLQUFLLDJCQUEyQixtQ0FBbUMsS0FBSywyQkFBMkIsaUNBQWlDLEtBQUssYUFBYSxrQ0FBa0MsS0FBSywyQkFBMkIsc0NBQXNDLEtBQUssMkJBQTJCLHdDQUF3QyxLQUFLLDJCQUEyQix5Q0FBeUMsS0FBSywyQkFBMkIsdUNBQXVDLEtBQUssYUFBYSxpQ0FBaUMsS0FBSywyQkFBMkIscUNBQXFDLEtBQUssMkJBQTJCLHVDQUF1QyxLQUFLLDJCQUEyQix3Q0FBd0MsS0FBSywyQkFBMkIsc0NBQXNDLEtBQUssYUFBYSwrQkFBK0IsS0FBSywyQkFBMkIsbUNBQW1DLEtBQUssMkJBQTJCLHFDQUFxQyxLQUFLLDJCQUEyQixzQ0FBc0MsS0FBSywyQkFBMkIsb0NBQW9DLEtBQUssYUFBYSxpQ0FBaUMsS0FBSywyQkFBMkIscUNBQXFDLEtBQUssMkJBQTJCLHVDQUF1QyxLQUFLLDJCQUEyQix3Q0FBd0MsS0FBSywyQkFBMkIsc0NBQXNDLEtBQUssYUFBYSwrQkFBK0IsS0FBSywyQkFBMkIsbUNBQW1DLEtBQUssMkJBQTJCLHFDQUFxQyxLQUFLLDJCQUEyQixzQ0FBc0MsS0FBSywyQkFBMkIsb0NBQW9DLEtBQUssY0FBYyxrQ0FBa0MsS0FBSyw2QkFBNkIsc0NBQXNDLEtBQUssNkJBQTZCLHdDQUF3QyxLQUFLLDZCQUE2Qix5Q0FBeUMsS0FBSyw2QkFBNkIsdUNBQXVDLEtBQUssY0FBYyxpQ0FBaUMsS0FBSyw2QkFBNkIscUNBQXFDLEtBQUssNkJBQTZCLHVDQUF1QyxLQUFLLDZCQUE2Qix3Q0FBd0MsS0FBSyw2QkFBNkIsc0NBQXNDLEtBQUssY0FBYywrQkFBK0IsS0FBSyw2QkFBNkIsbUNBQW1DLEtBQUssNkJBQTZCLHFDQUFxQyxLQUFLLDZCQUE2QixzQ0FBc0MsS0FBSyw2QkFBNkIsb0NBQW9DLEtBQUssY0FBYyxpQ0FBaUMsS0FBSyw2QkFBNkIscUNBQXFDLEtBQUssNkJBQTZCLHVDQUF1QyxLQUFLLDZCQUE2Qix3Q0FBd0MsS0FBSyw2QkFBNkIsc0NBQXNDLEtBQUssY0FBYywrQkFBK0IsS0FBSyw2QkFBNkIsbUNBQW1DLEtBQUssNkJBQTZCLHFDQUFxQyxLQUFLLDZCQUE2QixzQ0FBc0MsS0FBSyw2QkFBNkIsb0NBQW9DLEtBQUssZ0JBQWdCLDhCQUE4QixLQUFLLGlDQUFpQyxrQ0FBa0MsS0FBSyxpQ0FBaUMsb0NBQW9DLEtBQUssaUNBQWlDLHFDQUFxQyxLQUFLLGlDQUFpQyxtQ0FBbUMsS0FBSyxHQUFHLGdDQUFnQyxhQUFhLDJCQUEyQixLQUFLLDJCQUEyQiwrQkFBK0IsS0FBSywyQkFBMkIsaUNBQWlDLEtBQUssMkJBQTJCLGtDQUFrQyxLQUFLLDJCQUEyQixnQ0FBZ0MsS0FBSyxhQUFhLGlDQUFpQyxLQUFLLDJCQUEyQixxQ0FBcUMsS0FBSywyQkFBMkIsdUNBQXVDLEtBQUssMkJBQTJCLHdDQUF3QyxLQUFLLDJCQUEyQixzQ0FBc0MsS0FBSyxhQUFhLGdDQUFnQyxLQUFLLDJCQUEyQixvQ0FBb0MsS0FBSywyQkFBMkIsc0NBQXNDLEtBQUssMkJBQTJCLHVDQUF1QyxLQUFLLDJCQUEyQixxQ0FBcUMsS0FBSyxhQUFhLDhCQUE4QixLQUFLLDJCQUEyQixrQ0FBa0MsS0FBSywyQkFBMkIsb0NBQW9DLEtBQUssMkJBQTJCLHFDQUFxQyxLQUFLLDJCQUEyQixtQ0FBbUMsS0FBSyxhQUFhLGdDQUFnQyxLQUFLLDJCQUEyQixvQ0FBb0MsS0FBSywyQkFBMkIsc0NBQXNDLEtBQUssMkJBQTJCLHVDQUF1QyxLQUFLLDJCQUEyQixxQ0FBcUMsS0FBSyxhQUFhLDhCQUE4QixLQUFLLDJCQUEyQixrQ0FBa0MsS0FBSywyQkFBMkIsb0NBQW9DLEtBQUssMkJBQTJCLHFDQUFxQyxLQUFLLDJCQUEyQixtQ0FBbUMsS0FBSyxhQUFhLDRCQUE0QixLQUFLLDJCQUEyQixnQ0FBZ0MsS0FBSywyQkFBMkIsa0NBQWtDLEtBQUssMkJBQTJCLG1DQUFtQyxLQUFLLDJCQUEyQixpQ0FBaUMsS0FBSyxhQUFhLGtDQUFrQyxLQUFLLDJCQUEyQixzQ0FBc0MsS0FBSywyQkFBMkIsd0NBQXdDLEtBQUssMkJBQTJCLHlDQUF5QyxLQUFLLDJCQUEyQix1Q0FBdUMsS0FBSyxhQUFhLGlDQUFpQyxLQUFLLDJCQUEyQixxQ0FBcUMsS0FBSywyQkFBMkIsdUNBQXVDLEtBQUssMkJBQTJCLHdDQUF3QyxLQUFLLDJCQUEyQixzQ0FBc0MsS0FBSyxhQUFhLCtCQUErQixLQUFLLDJCQUEyQixtQ0FBbUMsS0FBSywyQkFBMkIscUNBQXFDLEtBQUssMkJBQTJCLHNDQUFzQyxLQUFLLDJCQUEyQixvQ0FBb0MsS0FBSyxhQUFhLGlDQUFpQyxLQUFLLDJCQUEyQixxQ0FBcUMsS0FBSywyQkFBMkIsdUNBQXVDLEtBQUssMkJBQTJCLHdDQUF3QyxLQUFLLDJCQUEyQixzQ0FBc0MsS0FBSyxhQUFhLCtCQUErQixLQUFLLDJCQUEyQixtQ0FBbUMsS0FBSywyQkFBMkIscUNBQXFDLEtBQUssMkJBQTJCLHNDQUFzQyxLQUFLLDJCQUEyQixvQ0FBb0MsS0FBSyxjQUFjLGtDQUFrQyxLQUFLLDZCQUE2QixzQ0FBc0MsS0FBSyw2QkFBNkIsd0NBQXdDLEtBQUssNkJBQTZCLHlDQUF5QyxLQUFLLDZCQUE2Qix1Q0FBdUMsS0FBSyxjQUFjLGlDQUFpQyxLQUFLLDZCQUE2QixxQ0FBcUMsS0FBSyw2QkFBNkIsdUNBQXVDLEtBQUssNkJBQTZCLHdDQUF3QyxLQUFLLDZCQUE2QixzQ0FBc0MsS0FBSyxjQUFjLCtCQUErQixLQUFLLDZCQUE2QixtQ0FBbUMsS0FBSyw2QkFBNkIscUNBQXFDLEtBQUssNkJBQTZCLHNDQUFzQyxLQUFLLDZCQUE2QixvQ0FBb0MsS0FBSyxjQUFjLGlDQUFpQyxLQUFLLDZCQUE2QixxQ0FBcUMsS0FBSyw2QkFBNkIsdUNBQXVDLEtBQUssNkJBQTZCLHdDQUF3QyxLQUFLLDZCQUE2QixzQ0FBc0MsS0FBSyxjQUFjLCtCQUErQixLQUFLLDZCQUE2QixtQ0FBbUMsS0FBSyw2QkFBNkIscUNBQXFDLEtBQUssNkJBQTZCLHNDQUFzQyxLQUFLLDZCQUE2QixvQ0FBb0MsS0FBSyxnQkFBZ0IsOEJBQThCLEtBQUssaUNBQWlDLGtDQUFrQyxLQUFLLGlDQUFpQyxvQ0FBb0MsS0FBSyxpQ0FBaUMscUNBQXFDLEtBQUssaUNBQWlDLG1DQUFtQyxLQUFLLEdBQUcscUJBQXFCLHFIQUFxSCxHQUFHLG1CQUFtQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsa0JBQWtCLG1DQUFtQyxHQUFHLG9CQUFvQixxQkFBcUIsNEJBQTRCLHdCQUF3QixHQUFHLGdCQUFnQixnQ0FBZ0MsR0FBRyxpQkFBaUIsaUNBQWlDLEdBQUcsa0JBQWtCLGtDQUFrQyxHQUFHLCtCQUErQixtQkFBbUIsa0NBQWtDLEtBQUssb0JBQW9CLG1DQUFtQyxLQUFLLHFCQUFxQixvQ0FBb0MsS0FBSyxHQUFHLCtCQUErQixtQkFBbUIsa0NBQWtDLEtBQUssb0JBQW9CLG1DQUFtQyxLQUFLLHFCQUFxQixvQ0FBb0MsS0FBSyxHQUFHLCtCQUErQixtQkFBbUIsa0NBQWtDLEtBQUssb0JBQW9CLG1DQUFtQyxLQUFLLHFCQUFxQixvQ0FBb0MsS0FBSyxHQUFHLGdDQUFnQyxtQkFBbUIsa0NBQWtDLEtBQUssb0JBQW9CLG1DQUFtQyxLQUFLLHFCQUFxQixvQ0FBb0MsS0FBSyxHQUFHLHFCQUFxQix5Q0FBeUMsR0FBRyxxQkFBcUIseUNBQXlDLEdBQUcsc0JBQXNCLDBDQUEwQyxHQUFHLHdCQUF3QixnQ0FBZ0MsR0FBRywwQkFBMEIsb0NBQW9DLEdBQUcseUJBQXlCLGdDQUFnQyxHQUFHLHVCQUF1QixnQ0FBZ0MsR0FBRyx5QkFBeUIsbUNBQW1DLEdBQUcsa0JBQWtCLGtDQUFrQyxHQUFHLGlCQUFpQiwyQkFBMkIsR0FBRyxtQkFBbUIsOEJBQThCLEdBQUcsZ0RBQWdELDhCQUE4QixHQUFHLHFCQUFxQiw4QkFBOEIsR0FBRyxvREFBb0QsOEJBQThCLEdBQUcsbUJBQW1CLDhCQUE4QixHQUFHLGdEQUFnRCw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsMENBQTBDLDhCQUE4QixHQUFHLG1CQUFtQiw4QkFBOEIsR0FBRyxnREFBZ0QsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLDhDQUE4Qyw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsNENBQTRDLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRywwQ0FBMEMsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxvQkFBb0IseUNBQXlDLEdBQUcsb0JBQW9CLCtDQUErQyxHQUFHLGdCQUFnQixnQkFBZ0IsdUJBQXVCLHNCQUFzQixrQ0FBa0MsY0FBYyxHQUFHLDJCQUEyQixxQ0FBcUMsR0FBRyxpQkFBaUIsc0NBQXNDLHlDQUF5QyxHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGdCQUFnQixrQ0FBa0MsR0FBRyxrQkFBa0Isa0NBQWtDLG1DQUFtQyxrQ0FBa0MsS0FBSyxpQkFBaUIsaUNBQWlDLEtBQUssd0JBQXdCLHdDQUF3QyxLQUFLLFNBQVMsdUNBQXVDLEtBQUssd0JBQXdCLGdDQUFnQywrQkFBK0IsS0FBSyxXQUFXLGtDQUFrQyxLQUFLLGdCQUFnQiwrQkFBK0IsS0FBSyxxQkFBcUIsaUJBQWlCLGdCQUFnQixLQUFLLGVBQWUsOEJBQThCLEtBQUssV0FBVyxlQUFlLEtBQUssVUFBVSxrQ0FBa0MsS0FBSyxnQkFBZ0Isa0NBQWtDLEtBQUssYUFBYSxvQkFBb0IsS0FBSyxZQUFZLDZCQUE2QixLQUFLLFlBQVksMkNBQTJDLEtBQUssNkJBQTZCLHdDQUF3QyxLQUFLLCtDQUErQywyQ0FBMkMsS0FBSyxpQkFBaUIscUJBQXFCLEtBQUssOEZBQThGLDRCQUE0QixLQUFLLDJCQUEyQixxQkFBcUIsNEJBQTRCLEtBQUssR0FBRzs7Ozs7Ozs7Ozs7OztBQ0ZuNXJNLDJCQUEyQixtQkFBTyxDQUFDLHdHQUFtRDtBQUN0RjtBQUNBLGNBQWMsUUFBUyxTQUFTLEtBQUssV0FBVywwQkFBMEIsR0FBRyxjQUFjLHNCQUFzQixxQkFBcUIsb0JBQW9CLHlCQUF5QixxQkFBcUIsc0JBQXNCLHFCQUFxQixHQUFHLFlBQVkscUNBQXFDLEdBQUcsVUFBVSxvQkFBb0IsR0FBRyxZQUFZLHNCQUFzQixHQUFHLFdBQVcsMkJBQTJCLGdCQUFnQixHQUFHLGlCQUFpQiwyQkFBMkIsMEJBQTBCLEdBQUcsbUJBQW1CLG9CQUFvQixHQUFHLGdCQUFnQix5QkFBeUIsb0JBQW9CLEdBQUcsZUFBZSwwQkFBMEIsR0FBRyxlQUFlLHdDQUF3QyxHQUFHLDZCQUE2QixzQkFBc0IsR0FBRyxXQUFXLGdCQUFnQixHQUFHLGlCQUFpQixnQkFBZ0IsR0FBRyx5QkFBeUIsZUFBZSxHQUFHLGlDQUFpQyx1QkFBdUIsR0FBRyxrQ0FBa0MsMkJBQTJCLG1CQUFtQiwyQkFBMkIsMkJBQTJCLCtCQUErQixzQkFBc0Isd0NBQXdDLHlJQUF5SSxzQ0FBc0MsMkJBQTJCLG1CQUFtQiwyQkFBMkIsMkJBQTJCLCtCQUErQixzQkFBc0Isd0NBQXdDLHlJQUF5SSx3Q0FBd0MsZ0JBQWdCLDhCQUE4QiwwQkFBMEIsR0FBRyx3QkFBd0IsdUJBQXVCLEdBQUcsNEJBQTRCLHVCQUF1QixHQUFHLDZCQUE2Qix1QkFBdUIsR0FBRyxtQkFBbUIsdUJBQXVCLEdBQUcsa0JBQWtCLG1CQUFtQixvQkFBb0IsR0FBRyxrQkFBa0Isa0JBQWtCLHdCQUF3Qiw0QkFBNEIsR0FBRyxVQUFVLG9CQUFvQixHQUFHLHFCQUFxQixvQkFBb0IsR0FBRyxZQUFZLG9CQUFvQixJQUFJLFdBQVcsZ0NBQWdDLElBQUksaUJBQWlCLGlCQUFpQixHQUFHLHVCQUF1Qix1QkFBdUIsdUJBQXVCLHlCQUF5QiwwQkFBMEIsR0FBRyxxQkFBcUIsb0JBQW9CLEdBQUcsc0JBQXNCLG1CQUFtQiwwQkFBMEIseUJBQXlCLHFCQUFxQixHQUFHLFdBQVcsb0JBQW9CLGVBQWUsd0JBQXdCLEdBQUcsbUJBQW1CLDBCQUEwQixvQkFBb0Isc0JBQXNCLHVCQUF1Qix3QkFBd0IsbUJBQW1CLEdBQUcseUJBQXlCLDBCQUEwQixvQkFBb0IsdUJBQXVCLHdCQUF3QiwyQkFBMkIsbUJBQW1CLEdBQUcsNEJBQTRCLG1CQUFtQixHQUFHLDJCQUEyQixnQkFBZ0Isc0JBQXNCLG9CQUFvQiwyQkFBMkIsMkJBQTJCLEdBQUcsaUNBQWlDLG1CQUFtQixHQUFHLGtCQUFrQix3Q0FBd0MsR0FBRyx5QkFBeUIsOEJBQThCLGNBQWMsR0FBRyxpQ0FBaUMsNkJBQTZCLEdBQUcsdUJBQXVCLG1CQUFtQix5QkFBeUIscUJBQXFCLEdBQUcsNkJBQTZCLG1CQUFtQixHQUFHLDJCQUEyQix1QkFBdUIsb0JBQW9CLEdBQUcseUJBQXlCLGdCQUFnQixHQUFHLG9DQUFvQyxlQUFlLEdBQUcscUJBQXFCLGtCQUFrQix1QkFBdUIsaUJBQWlCLGNBQWMsZ0JBQWdCLGlCQUFpQiw0Q0FBNEMsZ0NBQWdDLEdBQUcsYUFBYSxrQkFBa0IsR0FBRyxtQkFBbUIsMEJBQTBCLEdBQUcsNkJBQTZCLE9BQU8sb0NBQW9DLDRCQUE0QixJQUFJLFFBQVEsa0JBQWtCLG9DQUFvQyw0QkFBNEIsSUFBSSxHQUFHLHVEQUF1RCxrQkFBa0IsaUJBQWlCLDJCQUEyQixHQUFHLG9CQUFvQixtQkFBbUIsR0FBRyxtQkFBbUIsbUJBQW1CLEdBQUcsd0JBQXdCLG1CQUFtQixHQUFHLG9CQUFvQixrQ0FBa0MsZUFBZSxlQUFlLEdBQUcsbUJBQW1CLG9CQUFvQixrQkFBa0Isc0JBQXNCLDBCQUEwQixHQUFHLHNEQUFzRCxxQkFBcUIsMEJBQTBCLEdBQUcsOEJBQThCLHFCQUFxQixHQUFHLG1CQUFtQiwyQkFBMkIsR0FBRyxZQUFZLHVCQUF1QixHQUFHLHlCQUF5QixpQ0FBaUMsR0FBRyxvQkFBb0IscUJBQXFCLDRCQUE0QixnQkFBZ0IscUJBQXFCLDJCQUEyQiwyQkFBMkIsR0FBRyxxQkFBcUIseUJBQXlCLEdBQUcsdUJBQXVCLHNCQUFzQix1QkFBdUIsR0FBRyxnQkFBZ0IsMkJBQTJCLHVCQUF1QixpQkFBaUIsR0FBRyxtQkFBbUIsb0JBQW9CLHVCQUF1QixHQUFHLFdBQVcsMkJBQTJCLHVCQUF1QixHQUFHLGVBQWUsZ0JBQWdCLHNCQUFzQixHQUFHLHNCQUFzQiwyQkFBMkIsb0JBQW9CLG1CQUFtQiwwQkFBMEIsR0FBRyxnQkFBZ0IsbUJBQW1CLEdBQUcsZUFBZSx1QkFBdUIsR0FBRyxhQUFhLHNCQUFzQix5QkFBeUIsb0JBQW9CLEdBQUcsY0FBYyxzQkFBc0IsR0FBRyw0Q0FBNEMsb0xBQW9MOzs7Ozs7Ozs7Ozs7O0FDRmw5TCwyQkFBMkIsbUJBQU8sQ0FBQyw4RkFBeUM7QUFDNUU7QUFDQSxjQUFjLFFBQVMsK09BQStPLGlCQUFpQixnQkFBZ0IscUJBQXFCLGtCQUFrQixXQUFXLHVCQUF1QixzQkFBc0IsdUJBQXVCLHVCQUF1QixjQUFjLHVCQUF1QixhQUFhLHVCQUF1QixjQUFjLHVCQUF1QixZQUFZLHVCQUF1QixjQUFjLHVCQUF1QixhQUFhLHVCQUF1QixjQUFjLHVCQUF1QixXQUFXLHVCQUF1QixjQUFjLHdCQUF3QixhQUFhLHdCQUF3QixjQUFjLHdCQUF3QixZQUFZLHdCQUF3QixjQUFjLHdCQUF3QixhQUFhLHdCQUF3QixjQUFjLHdCQUF3QixVQUFVLHdCQUF3QixlQUFlLHdCQUF3QixjQUFjLHdCQUF3QixlQUFlLHdCQUF3QixhQUFhLDZCQUE2QixrQkFBa0IsV0FBVyw4QkFBOEIsaUJBQWlCLFdBQVcsMEJBQTBCLGFBQWEsc0JBQXNCLFVBQVUsc0JBQXNCLGFBQWEsOEJBQThCLFNBQVMsT0FBTyxZQUFZLGtCQUFrQixRQUFRLE1BQU0sV0FBVyxxQkFBcUIsV0FBVyxrQkFBa0Isa0JBQWtCLHVCQUF1QixVQUFVLDhCQUE4Qix1Q0FBdUMsK0JBQStCLG1DQUFtQyxxQkFBcUIsa0JBQWtCLGtCQUFrQixnQkFBZ0IsU0FBUyxRQUFRLHVDQUF1QywrQkFBK0IsdUNBQXVDLCtCQUErQixtQkFBbUIseUJBQXlCLGtCQUFrQiw4QkFBOEIsc0JBQXNCLFdBQVcsYUFBYSxjQUFjLGNBQWMsZ0JBQWdCLGdCQUFnQixjQUFjLFFBQVEsdUJBQXVCLE1BQU0sNkJBQTZCLHFCQUFxQixtQ0FBbUMsMkJBQTJCLHdCQUF3QixTQUFTLFFBQVEsU0FBUyw2QkFBNkIscUJBQXFCLHNDQUFzQyw4QkFBOEIsdUJBQXVCLFNBQVMsT0FBTyxXQUFXLFNBQVMsNkJBQTZCLHFCQUFxQixxQ0FBcUMsNkJBQTZCLHFCQUFxQixRQUFRLE1BQU0sNkJBQTZCLHFCQUFxQixtQ0FBbUMsMkJBQTJCLG9CQUFvQixPQUFPLFdBQVcsTUFBTSw2QkFBNkIscUJBQXFCLGtDQUFrQywwQkFBMEIsT0FBTyxvQkFBb0Isa0JBQWtCLHdCQUF3QixPQUFPLGdCQUFnQixPQUFPLGlCQUFpQixPQUFPLGNBQWMsT0FBTyxjQUFjLE9BQU8sY0FBYyxPQUFPLGNBQWMsT0FBTyxjQUFjLE9BQU8sY0FBYyxPQUFPLGNBQWMsT0FBTyxjQUFjLE9BQU8sY0FBYyxRQUFRLGVBQWUsT0FBTyxrQkFBa0IsYUFBYSxPQUFPLHFCQUFxQixrQkFBa0IsZUFBZSxVQUFVLGtCQUFrQixPQUFPLFVBQVUsa0JBQWtCLGtCQUFrQixVQUFVLG9CQUFvQixXQUFXLHdCQUF3QixtQkFBbUIseUJBQXlCLGNBQWMsV0FBVyxlQUFlLFlBQVkseUZBQXlGLGtCQUFrQiw4RkFBOEYsaUJBQWlCLFNBQVMsNkNBQTZDLHFDQUFxQyxVQUFVLCtDQUErQyx1Q0FBdUMsMkJBQTJCLEdBQUcsK0JBQStCLHVCQUF1QixHQUFHLGdDQUFnQyx5QkFBeUIsbUJBQW1CLEdBQUcsK0JBQStCLHVCQUF1QixHQUFHLGdDQUFnQyx5QkFBeUIsY0FBYyx3RUFBd0UsZ0NBQWdDLHdCQUF3QixlQUFlLHdFQUF3RSxpQ0FBaUMseUJBQXlCLGVBQWUsd0VBQXdFLGlDQUFpQyx5QkFBeUIsb0JBQW9CLGtGQUFrRiw2QkFBNkIscUJBQXFCLGtCQUFrQiw2QkFBNkIscUJBQXFCLHFFQUFxRSxrRkFBa0YsbURBQW1ELDRCQUE0QixvQkFBb0Isb0lBQW9JLG9CQUFvQixZQUFZLFVBQVUscUJBQXFCLFdBQVcsa0JBQWtCLFlBQVksMEJBQTBCLFNBQVMsT0FBTyxZQUFZLGtCQUFrQixRQUFRLE1BQU0sNEJBQTRCLFdBQVcsYUFBYSw0QkFBNEIsV0FBVyxZQUFZLFlBQVksV0FBVyxTQUFTLFNBQVMsbUJBQW1CLFdBQVcsWUFBWSxnQkFBZ0IsVUFBVSxrQkFBa0IsVUFBVSxtREFBbUQsVUFBVSxZQUFZLFNBQVMsaUJBQWlCLGdCQUFnQixXQUFXLDRCQUE0QiwwQ0FBMEMsVUFBVSxvQ0FBb0MsOEJBQThCLDRDQUE0QywwRUFBMEUsV0FBVyx1Q0FBdUMsOENBQThDLFVBQVUsb0NBQW9DLG9FQUFvRSxVQUFVLGdCQUFnQixXQUFXOzs7Ozs7Ozs7Ozs7OztBQ0Zsdk07O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1Q0FBdUMsZ0JBQWdCO0FBQ3ZELE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLG1CQUFtQixpQkFBaUI7QUFDcEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZUFBZSxvQkFBb0I7QUFDbkMsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxjQUFjO0FBQ25FO0FBQ0EsQzs7Ozs7Ozs7Ozs7O0FDcEZhOztBQUViLFdBQVcsbUJBQU8sQ0FBQyx3REFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxnQ0FBZ0M7QUFDaEU7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0EsRUFBRSxZQUFZO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isa0JBQWtCO0FBQ2xDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7Ozs7Ozs7Ozs7O0FDekRBO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsZ0RBQVM7QUFDL0IsWUFBWSxtQkFBTyxDQUFDLGdFQUFpQjs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsU0FBUztBQUNwQixXQUFXLFFBQVE7QUFDbkIsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsT0FBTztBQUNsQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDaERBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLFNBQVM7QUFDcEIsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx3Q0FBd0M7O0FBRXhDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7O0FDL0dBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU0sSUFBNEI7QUFDbEMsT0FBTyxFQUN5Qjs7QUFFaEMsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7OztBQzdCWTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYzs7QUFFZDtBQUNBLGlCQUFpQixpRUFBaUUsRUFBRTtBQUNwRixnQkFBZ0IsdUJBQXVCOztBQUV2Qzs7QUFFQSxzREFBc0Qsb0JBQW9CLEdBQUc7O0FBRTdFLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNoTGE7O0FBRWIsbUJBQW1CLG1CQUFPLENBQUMsa0VBQWdCOztBQUUzQztBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLG1CQUFPLENBQUMsa0ZBQXdCO0FBQ25ELGFBQWEsbUJBQU8sQ0FBQyxvRUFBaUI7QUFDdEMsZ0JBQWdCLG1CQUFPLENBQUMsMEVBQW9COztBQUU1QyxXQUFXLG1CQUFPLENBQUMsa0VBQWdCO0FBQ25DLFVBQVUsbUJBQU8sQ0FBQyxnRUFBZTs7QUFFakMsaUJBQWlCLG1CQUFPLENBQUMsd0RBQWE7QUFDdEMsa0JBQWtCLG1CQUFPLENBQUMsa0VBQXFCOztBQUUvQyxVQUFVLG1CQUFPLENBQUMsNENBQUs7O0FBRXZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsZ0JBQWdCO0FBQ2hCLEVBQUU7QUFDRjtBQUNBO0FBQ0EsdUJBQXVCLFVBQVU7QUFDakMsMkNBQTJDLGVBQWU7QUFDMUQ7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSw2REFBNkQsVUFBVTtBQUN2RTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGlCQUFpQix3QkFBd0I7QUFDekM7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7Ozs7Ozs7Ozs7QUMxT2E7O0FBRWIsbUJBQW1CLG1CQUFPLENBQUMsbUVBQWlCOztBQUU1QztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyw0Q0FBSzs7QUFFdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDaERBLDJDQUEyQyxnQkFBZ0I7O0FBRTNELGtEQUFrRCxpRkFBaUY7Ozs7Ozs7Ozs7OztBQ0ZuSTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ0ZBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNIQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNGYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxvRkFBdUI7O0FBRWpELGlCQUFpQixtQkFBTyxDQUFDLHdEQUFhOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLG9CQUFvQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQzVDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNEQTtBQUNBO0FBQ0E7O0FBRUEsYUFBYSxtQkFBTyxDQUFDLGdFQUFpQjtBQUN0QyxlQUFlLG1CQUFPLENBQUMsZ0VBQWlCO0FBQ3hDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0IsV0FBVyxFQUFFO0FBQ2IsWUFBWSxTQUFTO0FBQ3JCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0IsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNoTmE7O0FBRWIsaUJBQWlCLG1CQUFPLENBQUMsd0RBQWE7O0FBRXRDO0FBQ0E7O0FBRUE7QUFDQSx1Q0FBdUMsU0FBUztBQUNoRDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdDQUF3QyxTQUFTO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7Ozs7Ozs7Ozs7Ozs7QUM3RGE7O0FBRWI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsaUJBQWlCO0FBQ3BDO0FBQ0E7O0FBRUEsOEVBQThFLHFDQUFxQyxFQUFFOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7OztBQ25EYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyx3RUFBa0I7O0FBRS9DOzs7Ozs7Ozs7Ozs7QUNKQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7Ozs7Ozs7Ozs7Ozs7O0FDWmE7O0FBRWIsV0FBVyxtQkFBTyxDQUFDLDREQUFlOztBQUVsQzs7Ozs7Ozs7Ozs7OztBQ0phOztBQUViOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0YsZUFBZTtBQUNmO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRCQUE0QixjQUFjO0FBQzFDO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGNBQWM7QUFDNUIsZ0VBQWdFLGNBQWM7QUFDOUUsdURBQXVELGFBQWE7QUFDcEUsc0JBQXNCLGlDQUFpQztBQUN2RCwyQkFBMkIsY0FBYztBQUN6QztBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ3BDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE1BQU0sS0FBMEI7O0FBRWhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEsWUFBWTs7QUFFcEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGLG9CQUFvQjs7QUFFcEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLGtCQUFrQixrQ0FBa0M7QUFDcEQsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVLFlBQVk7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsU0FBUztBQUNsQjtBQUNBOztBQUVBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVMsWUFBWTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsWUFBWTtBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLFNBQVM7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLElBQUk7O0FBRXBCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHdDQUF3QyxJQUFJO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWEseUJBQXlCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsU0FBUztBQUNwQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFFBQVEsNkJBQTZCO0FBQ2hEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0IsYUFBYSx1QkFBdUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLGVBQWU7QUFDMUIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsZ0NBQWdDLE1BQU07QUFDdEM7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsZUFBZTs7QUFFZixTQUFTOztBQUVUO0FBQ0EsUUFBUSxpQ0FBaUM7QUFDekMsUUFBUSxvQkFBb0I7QUFDNUIsUUFBUSxzQ0FBc0M7QUFDOUMsUUFBUTtBQUNSLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixhQUFhLEVBQUU7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDREQUE0RDs7QUFFNUQ7QUFDQTtBQUNBO0FBQ0EseUNBQXlDOztBQUV6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7O0FBRTdEO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQzs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnRUFBZ0U7O0FBRWhFO0FBQ0E7QUFDQTtBQUNBLDZDQUE2Qzs7QUFFN0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxpRUFBaUUsVUFBVTtBQUMzRSxzQ0FBc0MsMkJBQTJCO0FBQ2pFO0FBQ0EsZ0NBQWdDLE1BQU07QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsVUFBVSxZQUFZO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLFVBQVUsWUFBWTtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsVUFBVTtBQUNwQjtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxVQUFVLGNBQWM7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxZQUFZLHVFQUF1RTtBQUNuRjtBQUNBO0FBQ0EsWUFBWSw0QkFBNEI7QUFDeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxTQUFTO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsMkRBQTJEOztBQUUzRDtBQUNBO0FBQ0Esb0ZBQW9GOztBQUVwRjtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLFNBQVM7QUFDakI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEsU0FBUztBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCxRQUFRLFNBQVM7QUFDakI7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLGlEQUFpRDtBQUN4RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlEQUFpRDtBQUNqRCxVQUFVLHdDQUF3QztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLE1BQU07QUFDakIsV0FBVyxNQUFNO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBOztBQUVBLENBQUM7Ozs7QUFJRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQSxRQUFRLEdBQUc7QUFDWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTs7OztBQUlBOztBQUVBOztBQUVBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnQkFBZ0IsU0FBUztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTs7QUFFQSxjQUFjLFNBQVM7QUFDdkI7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSztBQUNMOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVLE9BQU87QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsT0FBTztBQUNqQiwwQkFBMEIsd0JBQXdCOztBQUVsRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSwwQ0FBMEM7QUFDMUMsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENB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QUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVOztBQUVWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7QUFFUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTixLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0NBQW9DO0FBQ3BDLHFDQUFxQztBQUNyQyxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7Ozs7QUFLQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVLFNBQVM7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixhQUFhO0FBQ3BDLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLFNBQVM7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSixHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEdBQUc7QUFDSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7OztBQUdBOztBQUVBOzs7O0FBSUE7QUFDQTtBQUNBLEdBQUc7QUFDSCxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLGdCQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsZ0JBQWdCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7O0FBRUE7Ozs7QUFJQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEVBQUU7QUFDRjs7QUFFQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsUUFBUSxPQUFPO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLHNCQUFzQjs7QUFFdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEsT0FBTztBQUNmOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLGdCQUFnQjtBQUNsQjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsV0FBVzs7QUFFWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDJDQUEyQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7O0FBRUE7QUFDQTs7QUFFQSxjQUFjLHNCQUFzQjtBQUNwQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwrREFBK0Q7QUFDL0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLGNBQWM7O0FBRXhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsbUJBQW1CO0FBQ3BDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsdUNBQXVDO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qix1REFBdUQ7QUFDOUU7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssK0NBQStDO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNDQUFzQztBQUN0QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFDQUFxQyxjQUFjO0FBQ25EO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxjQUFjLHFDQUFxQztBQUNuRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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O0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0YsQ0FBQzs7O0FBR0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLCtEQUErRDtBQUMzRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLE9BQU87O0FBRWY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixnQkFBZ0I7QUFDbEM7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7O0FBRUEsVUFBVSxPQUFPO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsV0FBVyxTQUFTO0FBQ3BCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7O0FBRVg7QUFDQTtBQUNBO0FBQ0EsUUFBUSxPQUFPO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLGdCQUFnQjtBQUN4Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaURBQWlELDBCQUEwQjtBQUMzRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFVBQVUsZ0JBQWdCO0FBQzFCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQSxxQkFBcUI7QUFDckI7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7O0FBRUEsNkNBQTZDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQSxRQUFRLGdCQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFNBQVMsZ0JBQWdCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLGlFQUFpRTtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGNBQWM7QUFDbEMsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaURBQWlEOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtCQUErQixTQUFTO0FBQ3hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLCtCQUErQixTQUFTO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsZ0JBQWdCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxrQkFBa0I7QUFDNUIsV0FBVyxrQkFBa0I7QUFDN0IsY0FBYztBQUNkLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsUUFBUSxtQkFBbUI7QUFDM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7QUFLRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7QUFLRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7Ozs7O0FBS0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQSxpQ0FBaUM7QUFDakM7QUFDQTs7QUFFQSxJQUFJO0FBQ0o7O0FBRUEsSUFBSTtBQUNKO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7OztBQUtEOzs7QUFHQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQ0FBMkM7QUFDM0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLEtBQUs7QUFDZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlEQUFpRDtBQUNqRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHFDQUFxQzs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTs7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVILEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsS0FBSztBQUNMOztBQUVBLFdBQVc7QUFDWCxHQUFHO0FBQ0g7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEIsZ0RBQWdEO0FBQ2hEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdEQUF3RDtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUI7QUFDakIsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkI7O0FBRTNCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQ0FBa0M7O0FBRWxDO0FBQ0Esc0JBQXNCO0FBQ3RCLDJCQUEyQjs7QUFFM0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3REO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFROztBQUVSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUEsbURBQW1EO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx1QkFBdUI7QUFDbEMsV0FBVyx5QkFBeUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7O0FBS0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0IsYUFBYSx1Q0FBdUM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7QUFLRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7O0FBS0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxJQUFJO0FBQ0osR0FBRztBQUNIOztBQUVBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7QUFLRDtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxxREFBcUQ7QUFDckQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1COztBQUVuQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLGNBQWMsc0RBQXNEO0FBQ3BFOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0EsY0FBYyxtQ0FBbUM7QUFDakQsZUFBZSw2REFBNkQ7QUFDNUU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLEVBQUU7QUFDRixDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7QUFLRDs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNB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QUNBLEVBQUU7OztBQUdGOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGFBQWE7QUFDYixZQUFZO0FBQ1osWUFBWTtBQUNaLGVBQWU7QUFDZixjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLG9DQUFvQzs7QUFFcEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0VBQWdFO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQyxHQUFHO0FBQ0o7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaLHNOQUFzTjs7QUFFdE47QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5Qzs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1EO0FBQ25EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1RUFBdUU7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QUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCOztBQUU1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHdFQUF3RTs7QUFFeEU7O0FBRUE7QUFDQTtBQUNBLHVFQUF1RTtBQUN2RTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNEQUFzRDs7QUFFdEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLG9EQUFvRDtBQUNwRDs7QUFFQTtBQUNBO0FBQ0EsdUVBQXVFO0FBQ3ZFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0Esc0RBQXNEOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQiwwQkFBMEI7QUFDN0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCOztBQUV4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLG1CQUFtQiwwQkFBMEI7QUFDN0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHVEQUF1RDs7QUFFdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixRQUFRLFlBQVksUUFBUSxPQUFPLFNBQVM7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUVBQXFFO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsTUFBTTtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQjs7QUFFMUI7QUFDQSxnQkFBZ0I7O0FBRWhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUVBQXFFLGdEQUFnRCxlQUFlOztBQUVwSTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLEtBQUs7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsT0FBTztBQUN4RCxvREFBb0QsT0FBTztBQUMzRCxvREFBb0Q7QUFDcEQsa0RBQWtELE9BQU87QUFDekQsb0RBQW9ELE9BQU87QUFDM0Qsb0RB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QTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDOztBQUVqQyxpQ0FBaUM7O0FBRWpDO0FBQ0Esa0NBQWtDOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCOztBQUV6QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSxxQkFBcUIsaUJBQWlCO0FBQ3RDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FB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QUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxjQUFjO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILFVBQVU7QUFDVixVQUFVO0FBQ1YsV0FBVztBQUNYO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLCtDQUErQztBQUMvQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsMEJBQTBCO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxtQkFBbUIsMEJBQTBCO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7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OztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7O0FBRTlCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQSxxQkFBcUIsb0JBQW9CO0FBQ3pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztB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Q0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RDtBQUM3RDtBQUNBO0FBQ0E7O0FBRUEsdURBQXVEOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4SUFBOEk7QUFDOUk7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7O0FBRWhCLDZCQUE2QjtBQUM3QjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLHdCQUF3QjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyx3QkFBd0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLEdBQUc7QUFDSDs7O0FBR0EseUVBQXlFOztBQUV6RSwyR0FBMkc7O0FBRTNHLG1GQUFtRjtBQUNuRjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7OztBQUdILCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMEVBQTBFO0FBQzFFOztBQUVBLGtCQUFrQjs7QUFFbEI7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQixpQkFBaUI7QUFDcEMsdUJBQXVCOztBQUV2QjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxvQkFBb0Isa0JBQWtCO0FBQ3RDO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxxQkFBcUI7O0FBRXJCOztBQUVBLHFCQUFxQixtQkFBbUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7O0FBRW5CLG9EQUFvRDs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEVBQUU7QUFDRjs7O0FBR0EsZUFBZTs7QUFFZixpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7O0FBRTlDO0FBQ0EsaURBQWlEO0FBQ2pEO0FBQ0E7O0FBRUEsdUdBQXVHOztBQUV2RztBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQixLQUFLO0FBQ0wsMkJBQTJCO0FBQzNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEMsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOzs7QUFHQSxvR0FBb0csbUJBQW1CLCtHQUErRzs7QUFFdE8sbVNBQW1TOztBQUVuUyxrR0FBa0c7QUFDbEc7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDLEVBQUU7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUMsRUFBRTtBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIscUJBQXFCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscURBQXFEO0FBQ3JEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7OztBQUdILHFFQUFxRTtBQUNyRTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsNkVBQTZFOztBQUU3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRyxZQUFZLE9BQU8sT0FBTztBQUN4QztBQUNBLGtGQUFrRjtBQUNsRjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7Ozs7Ozs7Ozs7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7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QTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtEOztBQUVsRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7O0FBRTNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBLDRCQUE0Qjs7QUFFNUI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSCwyQkFBMkI7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTtBQUNBLHdDQUF3Qzs7QUFFeEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSx3Q0FBd0M7QUFDeEMsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7O0FBRUE7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUUsYUFBYSxHQUFHLEVBQUU7QUFDcEIsa0NBQWtDLEVBQUUsVUFBVSxFQUFFOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFFOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxzQkFBc0I7QUFDdEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFFOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7Ozs7Ozs7Ozs7OztBQVlBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBLG1FQUFtRTs7QUFFbkU7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0EsMENBQTBDO0FBQzFDLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdCQUF3QjtBQUN4Qix5QkFBeUI7QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDLEVBQUU7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7O0FBRXhCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQyxFQUFFOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7QUFDRDs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUNBLDRCQUE0Qjs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRzs7O0FBR0gsMEZBQTBGOztBQUUxRixtREFBbUQ7QUFDbkQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLLFdBQVc7O0FBRWhCO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSyxXQUFXOztBQUVoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7QUFDRDs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQSxtQkFBbUIsaUJBQWlCO0FBQ3BDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsd0RBQXdELEVBQUU7O0FBRTFEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrRUFBa0U7O0FBRWxFOztBQUVBLHFCQUFxQix1QkFBdUI7QUFDNUM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7Ozs7QUFLQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZDQUE2Qzs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhEQUE4RDtBQUM5RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7Ozs7Ozs7Ozs7Ozs7OztBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUU7QUFDRjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDOztBQUV4QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQ7O0FBRW5EOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7O0FBSUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDOztBQUV0Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpREFBaUQ7O0FBRWpELDRGQUE0RjtBQUM1RixPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7OztBQUdMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1R0FBdUc7QUFDdkc7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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bEM7QUFDQTtBQUNBLEtBQUs7QUFDTDs7O0FBR0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1Q0FBdUM7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUI7O0FBRXZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNa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OztBQUVBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7QUFFVjtBQUNBLHVCQUF1Qjs7QUFFdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7OztBQUdBO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtGQUErRixLQUFLO0FBQ3BHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsZUFBZTtBQUNsQztBQUNBLG9EQUFvRDtBQUNwRCw0Q0FBNEMsSUFBSTtBQUNoRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVELG1DQUFtQztBQUNuQztBQUNBO0FBQ0EsSUFBSSxLQUFLO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9EQUFvRDs7QUFFcEQ7QUFDQSw0QkFBNEI7QUFDNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OztBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQSxDQUFDLEU7Ozs7Ozs7Ozs7O0FDemdpQkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBOzs7Ozs7Ozs7Ozs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFD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Q0EsMkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQzFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHNCQUFzQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUFDekM7QUFDQSxLQUFLO0FBQ0w7QUFDQSw0Q0FBNEM7QUFDNUM7QUFDQSxLQUFLO0FBQ0wscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRDtBQUNqRDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsb0JBQW9CO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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LEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1REFBdUQ7QUFDdkQ7O0FBRUEsNkJBQTZCLG1CQUFtQjs7QUFFaEQ7O0FBRUE7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7OztBQzlZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsV0FBVyxFQUFFO0FBQ3JELHdDQUF3QyxXQUFXLEVBQUU7O0FBRXJEO0FBQ0E7QUFDQTtB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLFlBQVk7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLFlBQVk7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsV0FBVztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEMsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsWUFBWTtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsWUFBWTtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsWUFBWTtBQUMxRDtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsZ0JBQWdCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsWUFBWTtBQUN6RDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSw4QkFBOEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRDtBQUN0RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQywwQkFBMEI7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHFCQUFxQixjQUFjO0FBQ25DO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsWUFBWTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sZUFBZTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHFCQUFxQixlQUFlO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsWUFBWTtBQUMvQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsWUFBWTtBQUMvQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxZQUFZO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsZ0JBQWdCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixPQUFPO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLFlBQVk7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxZQUFZO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQ7QUFDckQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixZQUFZO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZFQUE2RTtBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sS0FBd0I7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsWUFB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QUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTs7Ozs7Ozs7Ozs7O0FDdFBBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLHNCQUFzQjtBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7O0FDbEJBLGUiLCJmaWxlIjoic3RvY2hzcy1jb21tb24uYnVuZGxlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy92YXIgY29uZmlnID0gcmVxdWlyZSgnLi9jb25maWcuanMnKShwcm9jZXNzLmVudi5OT0RFX0VOVik7XG5sZXQgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcblxubGV0IHJvdXRlUHJlZml4ID0gJ3N0b2Noc3MnO1xubGV0IGFwaVByZWZpeCA9ICBwYXRoLmpvaW4ocm91dGVQcmVmaXgsICdhcGknKTtcbmxldCBnZXRCYXNlUGF0aCA9ICgpID0+IHtcbiAgdHJ5IHtcbiAgICBsZXQgYmFzZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Jhc2UnKVxuICAgIGxldCBocmVmID0gYmFzZS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKVxuICAgIHJldHVybiBocmVmXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICcvJ1xuICB9XG59O1xubGV0IGdldEFwaVBhdGggPSAoKSA9PiBwYXRoLmpvaW4oZ2V0QmFzZVBhdGgoKSwgYXBpUHJlZml4KTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgcm91dGVQcmVmaXg6IHJvdXRlUHJlZml4LFxuICAgIGdldEFwaVBhdGg6IGdldEFwaVBhdGgsXG4gICAgZ2V0QmFzZVBhdGg6IGdldEJhc2VQYXRoXG59O1xuIiwiLyoqXG4qIHBsb3RseS5qcyB2MS40Ny4xXG4qIENvcHlyaWdodCAyMDEyLTIwMTksIFBsb3RseSwgSW5jLlxuKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiovXG4hZnVuY3Rpb24odCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9dCgpO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSx0KTtlbHNleyhcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMpLlBsb3RseT10KCl9fShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUscixuKXtmdW5jdGlvbiBpKG8scyl7aWYoIXJbb10pe2lmKCFlW29dKXt2YXIgbD1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFzJiZsKXJldHVybiBsKG8sITApO2lmKGEpcmV0dXJuIGEobywhMCk7dmFyIGM9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBjLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsY312YXIgdT1yW29dPXtleHBvcnRzOnt9fTtlW29dWzBdLmNhbGwodS5leHBvcnRzLGZ1bmN0aW9uKHQpe3JldHVybiBpKGVbb11bMV1bdF18fHQpfSx1LHUuZXhwb3J0cyx0LGUscixuKX1yZXR1cm4gcltvXS5leHBvcnRzfWZvcih2YXIgYT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLG89MDtvPG4ubGVuZ3RoO28rKylpKG5bb10pO3JldHVybiBpfX0oKSh7MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9zcmMvbGliXCIpLGk9e1wiWCxYIGRpdlwiOlwiZGlyZWN0aW9uOmx0cjtmb250LWZhbWlseTonT3BlbiBTYW5zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7bWFyZ2luOjA7cGFkZGluZzowO1wiLFwiWCBpbnB1dCxYIGJ1dHRvblwiOlwiZm9udC1mYW1pbHk6J09wZW4gU2FucycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO1wiLFwiWCBpbnB1dDpmb2N1cyxYIGJ1dHRvbjpmb2N1c1wiOlwib3V0bGluZTpub25lO1wiLFwiWCBhXCI6XCJ0ZXh0LWRlY29yYXRpb246bm9uZTtcIixcIlggYTpob3ZlclwiOlwidGV4dC1kZWNvcmF0aW9uOm5vbmU7XCIsXCJYIC5jcmlzcFwiOlwic2hhcGUtcmVuZGVyaW5nOmNyaXNwRWRnZXM7XCIsXCJYIC51c2VyLXNlbGVjdC1ub25lXCI6XCItd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lOy1vLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtcIixcIlggc3ZnXCI6XCJvdmVyZmxvdzpoaWRkZW47XCIsXCJYIHN2ZyBhXCI6XCJmaWxsOiM0NDdhZGI7XCIsXCJYIHN2ZyBhOmhvdmVyXCI6XCJmaWxsOiMzYzZkYzU7XCIsXCJYIC5tYWluLXN2Z1wiOlwicG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3BvaW50ZXItZXZlbnRzOm5vbmU7XCIsXCJYIC5tYWluLXN2ZyAuZHJhZ2xheWVyXCI6XCJwb2ludGVyLWV2ZW50czphbGw7XCIsXCJYIC5jdXJzb3ItZGVmYXVsdFwiOlwiY3Vyc29yOmRlZmF1bHQ7XCIsXCJYIC5jdXJzb3ItcG9pbnRlclwiOlwiY3Vyc29yOnBvaW50ZXI7XCIsXCJYIC5jdXJzb3ItY3Jvc3NoYWlyXCI6XCJjdXJzb3I6Y3Jvc3NoYWlyO1wiLFwiWCAuY3Vyc29yLW1vdmVcIjpcImN1cnNvcjptb3ZlO1wiLFwiWCAuY3Vyc29yLWNvbC1yZXNpemVcIjpcImN1cnNvcjpjb2wtcmVzaXplO1wiLFwiWCAuY3Vyc29yLXJvdy1yZXNpemVcIjpcImN1cnNvcjpyb3ctcmVzaXplO1wiLFwiWCAuY3Vyc29yLW5zLXJlc2l6ZVwiOlwiY3Vyc29yOm5zLXJlc2l6ZTtcIixcIlggLmN1cnNvci1ldy1yZXNpemVcIjpcImN1cnNvcjpldy1yZXNpemU7XCIsXCJYIC5jdXJzb3Itc3ctcmVzaXplXCI6XCJjdXJzb3I6c3ctcmVzaXplO1wiLFwiWCAuY3Vyc29yLXMtcmVzaXplXCI6XCJjdXJzb3I6cy1yZXNpemU7XCIsXCJYIC5jdXJzb3Itc2UtcmVzaXplXCI6XCJjdXJzb3I6c2UtcmVzaXplO1wiLFwiWCAuY3Vyc29yLXctcmVzaXplXCI6XCJjdXJzb3I6dy1yZXNpemU7XCIsXCJYIC5jdXJzb3ItZS1yZXNpemVcIjpcImN1cnNvcjplLXJlc2l6ZTtcIixcIlggLmN1cnNvci1udy1yZXNpemVcIjpcImN1cnNvcjpudy1yZXNpemU7XCIsXCJYIC5jdXJzb3Itbi1yZXNpemVcIjpcImN1cnNvcjpuLXJlc2l6ZTtcIixcIlggLmN1cnNvci1uZS1yZXNpemVcIjpcImN1cnNvcjpuZS1yZXNpemU7XCIsXCJYIC5jdXJzb3ItZ3JhYlwiOlwiY3Vyc29yOi13ZWJraXQtZ3JhYjtjdXJzb3I6Z3JhYjtcIixcIlggLm1vZGViYXJcIjpcInBvc2l0aW9uOmFic29sdXRlO3RvcDoycHg7cmlnaHQ6MnB4O1wiLFwiWCAuZWFzZS1iZ1wiOlwiLXdlYmtpdC10cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMC4zcyBlYXNlIDBzOy1tb3otdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZSAwczstbXMtdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZSAwczstby10cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMC4zcyBlYXNlIDBzO3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAwLjNzIGVhc2UgMHM7XCIsXCJYIC5tb2RlYmFyLS1ob3Zlcj46bm90KC53YXRlcm1hcmspXCI6XCJvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgMC4zcyBlYXNlIDBzOy1tb3otdHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZSAwczstbXMtdHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZSAwczstby10cmFuc2l0aW9uOm9wYWNpdHkgMC4zcyBlYXNlIDBzO3RyYW5zaXRpb246b3BhY2l0eSAwLjNzIGVhc2UgMHM7XCIsXCJYOmhvdmVyIC5tb2RlYmFyLS1ob3ZlciAubW9kZWJhci1ncm91cFwiOlwib3BhY2l0eToxO1wiLFwiWCAubW9kZWJhci1ncm91cFwiOlwiZmxvYXQ6bGVmdDtkaXNwbGF5OmlubGluZS1ibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZy1sZWZ0OjhweDtwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2hpdGUtc3BhY2U6bm93cmFwO1wiLFwiWCAubW9kZWJhci1idG5cIjpcInBvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZToxNnB4O3BhZGRpbmc6M3B4IDRweDtoZWlnaHQ6MjJweDtjdXJzb3I6cG9pbnRlcjtsaW5lLWhlaWdodDpub3JtYWw7Ym94LXNpemluZzpib3JkZXItYm94O1wiLFwiWCAubW9kZWJhci1idG4gc3ZnXCI6XCJwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6MnB4O1wiLFwiWCAubW9kZWJhci52ZXJ0aWNhbFwiOlwiZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LXdyYXA6d3JhcDthbGlnbi1jb250ZW50OmZsZXgtZW5kO21heC1oZWlnaHQ6MTAwJTtcIixcIlggLm1vZGViYXIudmVydGljYWwgc3ZnXCI6XCJ0b3A6LTFweDtcIixcIlggLm1vZGViYXIudmVydGljYWwgLm1vZGViYXItZ3JvdXBcIjpcImRpc3BsYXk6YmxvY2s7ZmxvYXQ6bm9uZTtwYWRkaW5nLWxlZnQ6MHB4O3BhZGRpbmctYm90dG9tOjhweDtcIixcIlggLm1vZGViYXIudmVydGljYWwgLm1vZGViYXItZ3JvdXAgLm1vZGViYXItYnRuXCI6XCJkaXNwbGF5OmJsb2NrO3RleHQtYWxpZ246Y2VudGVyO1wiLFwiWCBbZGF0YS10aXRsZV06YmVmb3JlLFggW2RhdGEtdGl0bGVdOmFmdGVyXCI6XCJwb3NpdGlvbjphYnNvbHV0ZTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApOy1vLXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7ZGlzcGxheTpub25lO29wYWNpdHk6MDt6LWluZGV4OjEwMDE7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MTEwJTtyaWdodDo1MCU7XCIsXCJYIFtkYXRhLXRpdGxlXTpob3ZlcjpiZWZvcmUsWCBbZGF0YS10aXRsZV06aG92ZXI6YWZ0ZXJcIjpcImRpc3BsYXk6YmxvY2s7b3BhY2l0eToxO1wiLFwiWCBbZGF0YS10aXRsZV06YmVmb3JlXCI6XCJjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOjZweCBzb2xpZCB0cmFuc3BhcmVudDt6LWluZGV4OjEwMDI7bWFyZ2luLXRvcDotMTJweDtib3JkZXItYm90dG9tLWNvbG9yOiM2OTczOGE7bWFyZ2luLXJpZ2h0Oi02cHg7XCIsXCJYIFtkYXRhLXRpdGxlXTphZnRlclwiOlwiY29udGVudDphdHRyKGRhdGEtdGl0bGUpO2JhY2tncm91bmQ6IzY5NzM4YTtjb2xvcjp3aGl0ZTtwYWRkaW5nOjhweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEycHg7d2hpdGUtc3BhY2U6bm93cmFwO21hcmdpbi1yaWdodDotMThweDtib3JkZXItcmFkaXVzOjJweDtcIixcIlggLnZlcnRpY2FsIFtkYXRhLXRpdGxlXTpiZWZvcmUsWCAudmVydGljYWwgW2RhdGEtdGl0bGVdOmFmdGVyXCI6XCJ0b3A6MCU7cmlnaHQ6MjAwJTtcIixcIlggLnZlcnRpY2FsIFtkYXRhLXRpdGxlXTpiZWZvcmVcIjpcImJvcmRlcjo2cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQtY29sb3I6IzY5NzM4YTttYXJnaW4tdG9wOjhweDttYXJnaW4tcmlnaHQ6LTMwcHg7XCIsXCJYIC5zZWxlY3Qtb3V0bGluZVwiOlwiZmlsbDpub25lO3N0cm9rZS13aWR0aDoxO3NoYXBlLXJlbmRlcmluZzpjcmlzcEVkZ2VzO1wiLFwiWCAuc2VsZWN0LW91dGxpbmUtMVwiOlwic3Ryb2tlOndoaXRlO1wiLFwiWCAuc2VsZWN0LW91dGxpbmUtMlwiOlwic3Ryb2tlOmJsYWNrO3N0cm9rZS1kYXNoYXJyYXk6MnB4IDJweDtcIixZOlwiZm9udC1mYW1pbHk6J09wZW4gU2Fucyc7cG9zaXRpb246Zml4ZWQ7dG9wOjUwcHg7cmlnaHQ6MjBweDt6LWluZGV4OjEwMDAwO2ZvbnQtc2l6ZToxMHB0O21heC13aWR0aDoxODBweDtcIixcIlkgcFwiOlwibWFyZ2luOjA7XCIsXCJZIC5ub3RpZmllci1ub3RlXCI6XCJtaW4td2lkdGg6MTgwcHg7bWF4LXdpZHRoOjI1MHB4O2JvcmRlcjoxcHggc29saWQgI2ZmZjt6LWluZGV4OjMwMDA7bWFyZ2luOjA7YmFja2dyb3VuZC1jb2xvcjojOGM5N2FmO2JhY2tncm91bmQtY29sb3I6cmdiYSgxNDAsMTUxLDE3NSwwLjkpO2NvbG9yOiNmZmY7cGFkZGluZzoxMHB4O292ZXJmbG93LXdyYXA6YnJlYWstd29yZDt3b3JkLXdyYXA6YnJlYWstd29yZDstbXMtaHlwaGVuczphdXRvOy13ZWJraXQtaHlwaGVuczphdXRvO2h5cGhlbnM6YXV0bztcIixcIlkgLm5vdGlmaWVyLWNsb3NlXCI6XCJjb2xvcjojZmZmO29wYWNpdHk6MC44O2Zsb2F0OnJpZ2h0O3BhZGRpbmc6MCA1cHg7YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2ZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OmJvbGQ7bGluZS1oZWlnaHQ6MjBweDtcIixcIlkgLm5vdGlmaWVyLWNsb3NlOmhvdmVyXCI6XCJjb2xvcjojNDQ0O3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpwb2ludGVyO1wifTtmb3IodmFyIGEgaW4gaSl7dmFyIG89YS5yZXBsYWNlKC9eLC8sXCIgLFwiKS5yZXBsYWNlKC9YL2csXCIuanMtcGxvdGx5LXBsb3QgLnBsb3RseVwiKS5yZXBsYWNlKC9ZL2csXCIucGxvdGx5LW5vdGlmaWVyXCIpO24uYWRkU3R5bGVSdWxlKG8saVthXSl9fSx7XCIuLi9zcmMvbGliXCI6NzAxfV0sMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17dW5kbzp7d2lkdGg6ODU3LjEsaGVpZ2h0OjFlMyxwYXRoOlwibTg1NyAzNTBxMC04Ny0zNC0xNjZ0LTkxLTEzNy0xMzctOTItMTY2LTM0cS05NiAwLTE4MyA0MXQtMTQ3IDExNHEtNCA2LTQgMTN0NSAxMWw3NiA3N3E2IDUgMTQgNSA5LTEgMTMtNyA0MS01MyAxMDAtODJ0MTI2LTI5cTU4IDAgMTEwIDIzdDkyIDYxIDYxIDkxIDIyIDExMS0yMiAxMTEtNjEgOTEtOTIgNjEtMTEwIDIzcS01NSAwLTEwNS0yMHQtOTAtNTdsNzctNzdxMTctMTYgOC0zOC0xMC0yMy0zMy0yM2gtMjUwcS0xNSAwLTI1IDExdC0xMSAyNXYyNTBxMCAyNCAyMiAzMyAyMiAxMCAzOS04bDcyLTcycTYwIDU3IDEzNyA4OHQxNTkgMzFxODcgMCAxNjYtMzR0MTM3LTkyIDkxLTEzNyAzNC0xNjZ6XCIsdHJhbnNmb3JtOlwibWF0cml4KDEgMCAwIC0xIDAgODUwKVwifSxob21lOnt3aWR0aDo5MjguNixoZWlnaHQ6MWUzLHBhdGg6XCJtNzg2IDI5NnYtMjY3cTAtMTUtMTEtMjZ0LTI1LTEwaC0yMTR2MjE0aC0xNDN2LTIxNGgtMjE0cS0xNSAwLTI1IDEwdC0xMSAyNnYyNjdxMCAxIDAgMnQwIDJsMzIxIDI2NCAzMjEtMjY0cTEtMSAxLTR6IG0xMjQgMzlsLTM0LTQxcS01LTUtMTItNmgtMnEtNyAwLTEyIDNsLTM4NiAzMjItMzg2LTMyMnEtNy00LTEzLTQtNyAyLTEyIDdsLTM1IDQxcS00IDUtMyAxM3Q2IDEybDQwMSAzMzRxMTggMTUgNDIgMTV0NDMtMTVsMTM2LTExNHYxMDlxMCA4IDUgMTN0MTMgNWgxMDdxOCAwIDEzLTV0NS0xM3YtMjI3bDEyMi0xMDJxNS01IDYtMTJ0LTQtMTN6XCIsdHJhbnNmb3JtOlwibWF0cml4KDEgMCAwIC0xIDAgODUwKVwifSxcImNhbWVyYS1yZXRyb1wiOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOlwibTUxOCAzODZxMCA4LTUgMTN0LTEzIDVxLTM3IDAtNjMtMjd0LTI2LTYzcTAtOCA1LTEzdDEzLTUgMTIgNSA1IDEzcTAgMjMgMTYgMzh0MzggMTZxOCAwIDEzIDV0NSAxM3ogbTEyNS03M3EwLTU5LTQyLTEwMXQtMTAxLTQyLTEwMSA0Mi00MiAxMDEgNDIgMTAxIDEwMSA0MiAxMDEtNDIgNDItMTAxeiBtLTU3Mi0zMjBoODU4djcxaC04NTh2LTcxeiBtNjQzIDMyMHEwIDg5LTYyIDE1MnQtMTUyIDYyLTE1MS02Mi02My0xNTIgNjMtMTUxIDE1MS02MyAxNTIgNjMgNjIgMTUxeiBtLTU3MSAzNThoMjE0djcyaC0yMTR2LTcyeiBtLTcyLTEwN2g4NTh2MTQzaC00NjJsLTM2LTcxaC0zNjB2LTcyeiBtOTI5IDE0M3YtNzE0cTAtMzAtMjEtNTF0LTUwLTIxaC04NThxLTI5IDAtNTAgMjF0LTIxIDUxdjcxNHEwIDMwIDIxIDUxdDUwIDIxaDg1OHEyOSAwIDUwLTIxdDIxLTUxelwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0sem9vbWJveDp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDpcIm0xMDAwLTI1bC0yNTAgMjUxYzQwIDYzIDYzIDEzOCA2MyAyMTggMCAyMjQtMTgyIDQwNi00MDcgNDA2LTIyNCAwLTQwNi0xODItNDA2LTQwNnMxODMtNDA2IDQwNy00MDZjODAgMCAxNTUgMjIgMjE4IDYybDI1MC0yNTAgMTI1IDEyNXogbS04MTIgMjUwbDAgNDM4IDQzNyAwIDAtNDM4LTQzNyAweiBtNjIgMzc1bDMxMyAwIDAtMzEyLTMxMyAwIDAgMzEyelwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0scGFuOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOlwibTEwMDAgMzUwbC0xODcgMTg4IDAtMTI1LTI1MCAwIDAgMjUwIDEyNSAwLTE4OCAxODctMTg3LTE4NyAxMjUgMCAwLTI1MC0yNTAgMCAwIDEyNS0xODgtMTg4IDE4Ni0xODcgMCAxMjUgMjUyIDAgMC0yNTAtMTI1IDAgMTg3LTE4OCAxODggMTg4LTEyNSAwIDAgMjUwIDI1MCAwIDAtMTI2IDE4NyAxODh6XCIsdHJhbnNmb3JtOlwibWF0cml4KDEgMCAwIC0xIDAgODUwKVwifSx6b29tX3BsdXM6e3dpZHRoOjg3NSxoZWlnaHQ6MWUzLHBhdGg6XCJtMSA3ODdsMC04NzUgODc1IDAgMCA4NzUtODc1IDB6IG02ODctNTAwbC0xODcgMCAwLTE4Ny0xMjUgMCAwIDE4Ny0xODggMCAwIDEyNSAxODggMCAwIDE4NyAxMjUgMCAwLTE4NyAxODcgMCAwLTEyNXpcIix0cmFuc2Zvcm06XCJtYXRyaXgoMSAwIDAgLTEgMCA4NTApXCJ9LHpvb21fbWludXM6e3dpZHRoOjg3NSxoZWlnaHQ6MWUzLHBhdGg6XCJtMCA3ODhsMC04NzYgODc1IDAgMCA4NzYtODc1IDB6IG02ODgtNTAwbC01MDAgMCAwIDEyNSA1MDAgMCAwLTEyNXpcIix0cmFuc2Zvcm06XCJtYXRyaXgoMSAwIDAgLTEgMCA4NTApXCJ9LGF1dG9zY2FsZTp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDpcIm0yNTAgODUwbC0xODcgMC02MyAwIDAtNjIgMC0xODggNjMgMCAwIDE4OCAxODcgMCAwIDYyeiBtNjg4IDBsLTE4OCAwIDAtNjIgMTg4IDAgMC0xODggNjIgMCAwIDE4OCAwIDYyLTYyIDB6IG0tODc1LTkzOGwwIDE4OC02MyAwIDAtMTg4IDAtNjIgNjMgMCAxODcgMCAwIDYyLTE4NyAweiBtODc1IDE4OGwwLTE4OC0xODggMCAwLTYyIDE4OCAwIDYyIDAgMCA2MiAwIDE4OC02MiAweiBtLTEyNSAxODhsLTEgMC05My05NC0xNTYgMTU2IDE1NiAxNTYgOTItOTMgMiAwIDAgMjUwLTI1MCAwIDAtMiA5My05Mi0xNTYtMTU2LTE1NiAxNTYgOTQgOTIgMCAyLTI1MCAwIDAtMjUwIDAgMCA5MyA5MyAxNTctMTU2LTE1Ny0xNTYtOTMgOTQgMCAwIDAtMjUwIDI1MCAwIDAgMC05NCA5MyAxNTYgMTU3IDE1Ni0xNTctOTMtOTMgMCAwIDI1MCAwIDAgMjUwelwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0sdG9vbHRpcF9iYXNpYzp7d2lkdGg6MTUwMCxoZWlnaHQ6MWUzLHBhdGg6XCJtMzc1IDcyNWwwIDAtMzc1LTM3NSAzNzUtMzc0IDAtMSAxMTI1IDAgMCA3NTAtMTEyNSAwelwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0sdG9vbHRpcF9jb21wYXJlOnt3aWR0aDoxMTI1LGhlaWdodDoxZTMscGF0aDpcIm0xODcgNzg2bDAgMi0xODctMTg4IDE4OC0xODcgMCAwIDkzNyAwIDAgMzczLTkzOCAweiBtMC00OTlsMCAxLTE4Ny0xODggMTg4LTE4OCAwIDAgOTM3IDAgMCAzNzYtOTM4LTF6XCIsdHJhbnNmb3JtOlwibWF0cml4KDEgMCAwIC0xIDAgODUwKVwifSxwbG90bHlsb2dvOnt3aWR0aDoxNTQyLGhlaWdodDoxZTMscGF0aDpcIm0wLTEwaDE4MnYtMTQwaC0xODJ2MTQweiBtMjI4IDE0NmgxODN2LTI4NmgtMTgzdjI4NnogbTIyNSA3MTRoMTgydi0xMDAwaC0xODJ2MTAwMHogbTIyNS0yODVoMTgydi03MTVoLTE4MnY3MTV6IG0yMjUgMTQyaDE4M3YtODU3aC0xODN2ODU3eiBtMjMxLTQyOGgxODJ2LTQyOWgtMTgydjQyOXogbTIyNS0yOTFoMTgzdi0xMzhoLTE4M3YxMzh6XCIsdHJhbnNmb3JtOlwibWF0cml4KDEgMCAwIC0xIDAgODUwKVwifSxcInotYXhpc1wiOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOlwibTgzMyA1bC0xNyAxMDh2NDFsLTEzMC02NSAxMzAtNjZjMCAwIDAgMzggMCAzOSAwLTEgMzYtMTQgMzktMjUgNC0xNS02LTIyLTE2LTMwLTE1LTEyLTM5LTE2LTU2LTIwLTkwLTIyLTE4Ny0yMy0yNzktMjMtMjYxIDAtMzQxIDM0LTM1MyA1OSAzIDYwIDIyOCAxMTAgMjI4IDExMC0xNDAtOC0zNTEtMzUtMzUxLTExNiAwLTEyMCAyOTMtMTQyIDQ3NC0xNDIgMTU1IDAgNDc3IDIyIDQ3NyAxNDIgMCA1MC03NCA3OS0xNjMgOTZ6IG0tMzc0IDk0Yy01OC01LTk5LTIxLTk5LTQwIDAtMjQgNjUtNDMgMTQ0LTQzIDc5IDAgMTQzIDE5IDE0MyA0MyAwIDE5LTQyIDM0LTk4IDQwdjIxNmg4N2wtMTMyIDEzNS0xMzMtMTM1aDg4di0yMTZ6IG0xNjcgNTE1aC0xMzZ2MWMxNiAxNiAzMSAzNCA0NiA1Mmw4NCAxMDl2NTRoLTIzMHYtNzFoMTI0di0xYy0xNi0xNy0yOC0zMi00NC01MWwtODktMTE0di01MWgyNDV2NzJ6XCIsdHJhbnNmb3JtOlwibWF0cml4KDEgMCAwIC0xIDAgODUwKVwifSxcIjNkX3JvdGF0ZVwiOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOlwibTkyMiA2NjBjLTUgNC05IDctMTQgMTEtMzU5IDI2My01ODAtMzEtNTgwLTMxbC0xMDIgMjggNTgtNDAwYzAgMSAxIDEgMiAyIDExOCAxMDggMzUxIDI0OSAzNTEgMjQ5cy02MiAyNy0xMDAgNDJjODggODMgMjIyIDE4MyAzNDcgMTIyIDE2LTggMzAtMTcgNDQtMjctMiAxLTQgMi02IDR6IG0zNi0zMjljMCAwIDY0IDIyOS04OCAyOTYtNjIgMjctMTI0IDE0LTE3NS0xMSAxNTctNzggMjI1LTIwOCAyNDktMjY2IDgtMTkgMTEtMzEgMTEtMzEgMiA1IDYgMTUgMTEgMzItNS0xMy04LTIwLTgtMjB6IG0tNzc1LTIzOWM3MC0zMSAxMTctNTAgMTk4LTMyLTEyMSA4MC0xOTkgMzQ2LTE5OSAzNDZsLTk2LTE1LTU4LTEyYzAgMCA1NS0yMjYgMTU1LTI4N3ogbTYwMyAxMzNsLTMxNy0xMzljMCAwIDQtNCAxOS0xNCA3LTUgMjQtMTUgMjQtMTVzLTE3Ny0xNDctMzg5IDRjMjM1LTI4NyA1MzYtMTEyIDUzNi0xMTJsMzEtMjIgMTAwIDI5OS00LTF6IG0tMjk4LTE1M2M2LTQgMTQtOSAyNC0xNSAwIDAtMTcgMTAtMjQgMTV6XCIsdHJhbnNmb3JtOlwibWF0cml4KDEgMCAwIC0xIDAgODUwKVwifSxjYW1lcmE6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6XCJtNTAwIDQ1MGMtODMgMC0xNTAtNjctMTUwLTE1MCAwLTgzIDY3LTE1MCAxNTAtMTUwIDgzIDAgMTUwIDY3IDE1MCAxNTAgMCA4My02NyAxNTAtMTUwIDE1MHogbTQwMCAxNTBoLTEyMGMtMTYgMC0zNCAxMy0zOSAyOWwtMzEgOTNjLTYgMTUtMjMgMjgtNDAgMjhoLTM0MGMtMTYgMC0zNC0xMy0zOS0yOGwtMzEtOTRjLTYtMTUtMjMtMjgtNDAtMjhoLTEyMGMtNTUgMC0xMDAtNDUtMTAwLTEwMHYtNDUwYzAtNTUgNDUtMTAwIDEwMC0xMDBoODAwYzU1IDAgMTAwIDQ1IDEwMCAxMDB2NDUwYzAgNTUtNDUgMTAwLTEwMCAxMDB6IG0tNDAwLTU1MGMtMTM4IDAtMjUwIDExMi0yNTAgMjUwIDAgMTM4IDExMiAyNTAgMjUwIDI1MCAxMzggMCAyNTAtMTEyIDI1MC0yNTAgMC0xMzgtMTEyLTI1MC0yNTAtMjUweiBtMzY1IDM4MGMtMTkgMC0zNSAxNi0zNSAzNSAwIDE5IDE2IDM1IDM1IDM1IDE5IDAgMzUtMTYgMzUtMzUgMC0xOS0xNi0zNS0zNS0zNXpcIix0cmFuc2Zvcm06XCJtYXRyaXgoMSAwIDAgLTEgMCA4NTApXCJ9LG1vdmllOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOlwibTkzOCA0MTNsLTE4OC0xMjVjMCAzNy0xNyA3MS00NCA5NCA2NCAzOCAxMDcgMTA3IDEwNyAxODcgMCAxMjEtOTggMjE5LTIxOSAyMTktMTIxIDAtMjE5LTk4LTIxOS0yMTkgMC02MSAyNS0xMTcgNjYtMTU2aC0xMTVjMzAgMzMgNDkgNzYgNDkgMTI1IDAgMTAzLTg0IDE4Ny0xODcgMTg3cy0xODgtODQtMTg4LTE4N2MwLTU3IDI2LTEwNyA2NS0xNDEtMzgtMjItNjUtNjItNjUtMTA5di0yNTBjMC03MCA1Ni0xMjYgMTI1LTEyNmg1MDBjNjkgMCAxMjUgNTYgMTI1IDEyNmwxODgtMTI2YzM0IDAgNjIgMjggNjIgNjN2Mzc1YzAgMzUtMjggNjMtNjIgNjN6IG0tNzUwIDBjLTY5IDAtMTI1IDU2LTEyNSAxMjVzNTYgMTI1IDEyNSAxMjUgMTI1LTU2IDEyNS0xMjUtNTYtMTI1LTEyNS0xMjV6IG00MDYtMWMtODcgMC0xNTcgNzAtMTU3IDE1NyAwIDg2IDcwIDE1NiAxNTcgMTU2czE1Ni03MCAxNTYtMTU2LTcwLTE1Ny0xNTYtMTU3elwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0scXVlc3Rpb246e3dpZHRoOjg1Ny4xLGhlaWdodDoxZTMscGF0aDpcIm01MDAgODJ2MTA3cTAgOC01IDEzdC0xMyA1aC0xMDdxLTggMC0xMy01dC01LTEzdi0xMDdxMC04IDUtMTN0MTMtNWgxMDdxOCAwIDEzIDV0NSAxM3ogbTE0MyAzNzVxMCA0OS0zMSA5MXQtNzcgNjUtOTUgMjNxLTEzNiAwLTIwNy0xMTktOS0xNCA0LTI0bDc0LTU1cTQtNCAxMC00IDkgMCAxNCA3IDMwIDM4IDQ4IDUxIDE5IDE0IDQ4IDE0IDI3IDAgNDgtMTV0MjEtMzNxMC0yMS0xMS0zNHQtMzgtMjVxLTM1LTE2LTY1LTQ4dC0yOS03MHYtMjBxMC04IDUtMTN0MTMtNWgxMDdxOCAwIDEzIDV0NSAxM3EwIDEwIDEyIDI3dDMwIDI4cTE4IDEwIDI4IDE2dDI1IDE5IDI1IDI3IDE2IDM0IDcgNDV6IG0yMTQtMTA3cTAtMTE3LTU3LTIxNXQtMTU2LTE1Ni0yMTUtNTgtMjE2IDU4LTE1NSAxNTYtNTggMjE1IDU4IDIxNSAxNTUgMTU2IDIxNiA1OCAyMTUtNTggMTU2LTE1NiA1Ny0yMTV6XCIsdHJhbnNmb3JtOlwibWF0cml4KDEgMCAwIC0xIDAgODUwKVwifSxkaXNrOnt3aWR0aDo4NTcuMSxoZWlnaHQ6MWUzLHBhdGg6XCJtMjE0LTdoNDI5djIxNGgtNDI5di0yMTR6IG01MDAgMGg3MnY1MDBxMCA4LTYgMjF0LTExIDIwbC0xNTcgMTU2cS01IDYtMTkgMTJ0LTIyIDV2LTIzMnEwLTIyLTE1LTM4dC0zOC0xNmgtMzIycS0yMiAwLTM3IDE2dC0xNiAzOHYyMzJoLTcydi03MTRoNzJ2MjMycTAgMjIgMTYgMzh0MzcgMTZoNDY1cTIyIDAgMzgtMTZ0MTUtMzh2LTIzMnogbS0yMTQgNTE4djE3OHEwIDgtNSAxM3QtMTMgNWgtMTA3cS03IDAtMTMtNXQtNS0xM3YtMTc4cTAtOCA1LTEzdDEzLTVoMTA3cTcgMCAxMyA1dDUgMTN6IG0zNTctMTh2LTUxOHEwLTIyLTE1LTM4dC0zOC0xNmgtNzUwcS0yMyAwLTM4IDE2dC0xNiAzOHY3NTBxMCAyMiAxNiAzOHQzOCAxNmg1MTdxMjMgMCA1MC0xMnQ0Mi0yNmwxNTYtMTU3cTE2LTE1IDI3LTQydDExLTQ5elwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0sbGFzc286e3dpZHRoOjEwMzEsaGVpZ2h0OjFlMyxwYXRoOlwibTEwMTggNTM4Yy0zNiAyMDctMjkwIDMzNi01NjggMjg2LTI3Ny00OC00NzMtMjU2LTQzNi00NjMgMTAtNTcgMzYtMTA4IDc2LTE1MS0xMy02NiAxMS0xMzcgNjgtMTgzIDM0LTI4IDc1LTQxIDExNC00MmwtNTUtNzAgMCAwYy0yLTEtMy0yLTQtMy0xMC0xNC04LTM0IDUtNDUgMTQtMTEgMzQtOCA0NSA0IDEgMSAyIDMgMiA1bDAgMCAxMTMgMTQwYzE2IDExIDMxIDI0IDQ1IDQwIDQgMyA2IDcgOCAxMSA0OC0zIDEwMCAwIDE1MSA5IDI3OCA0OCA0NzMgMjU1IDQzNiA0NjJ6IG0tNjI0LTM3OWMtODAgMTQtMTQ5IDQ4LTE5NyA5NiA0MiA0MiAxMDkgNDcgMTU2IDkgMzMtMjYgNDctNjYgNDEtMTA1eiBtLTE4Ny03NGMtMTkgMTYtMzMgMzctMzkgNjAgNTAtMzIgMTA5LTU1IDE3NC02OC00Mi0yNS05NS0yNC0xMzUgOHogbTM2MCA3NWMtMzQtNy02OS05LTEwMi04IDggNjItMTYgMTI4LTY4IDE3MC03MyA1OS0xNzUgNTQtMjQ0LTUtOSAyMC0xNiA0MC0yMCA2MS0yOCAxNTkgMTIxIDMxNyAzMzMgMzU0czQwNy02MCA0MzQtMjE3YzI4LTE1OS0xMjEtMzE4LTMzMy0zNTV6XCIsdHJhbnNmb3JtOlwibWF0cml4KDEgMCAwIC0xIDAgODUwKVwifSxzZWxlY3Rib3g6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6XCJtMCA4NTBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODYgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NSAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg2IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0tODU3LTI4NmwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTg1NyAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtLTg1Ny0yODVsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG04NTcgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbS04NTctMjg2bDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg2IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODUgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAwelwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0sc3Bpa2VsaW5lOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOlwiTTUxMiA0MDljMC01Ny00Ni0xMDQtMTAzLTEwNC01NyAwLTEwNCA0Ny0xMDQgMTA0IDAgNTcgNDcgMTAzIDEwNCAxMDMgNTcgMCAxMDMtNDYgMTAzLTEwM3ogbS0zMjctMzlsOTIgMCAwIDkyLTkyIDB6IG0tMTg1IDBsOTIgMCAwIDkyLTkyIDB6IG0zNzAtMTg2bDkyIDAgMCA5My05MiAweiBtMC0xODRsOTIgMCAwIDkyLTkyIDB6XCIsdHJhbnNmb3JtOlwibWF0cml4KDEuNSAwIDAgLTEuNSAwIDg1MClcIn0sbmV3cGxvdGx5bG9nbzp7bmFtZTpcIm5ld3Bsb3RseWxvZ29cIixzdmc6XCI8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDEzMiAxMzInPjxkZWZzPjxzdHlsZT4uY2xzLTEge2ZpbGw6ICMxMTlkZmY7fSAuY2xzLTIge2ZpbGw6ICMyNWZlZmQ7fSAuY2xzLTMge2ZpbGw6ICNmZmY7fTwvc3R5bGU+PC9kZWZzPjx0aXRsZT5wbG90bHktbG9nb21hcms8L3RpdGxlPjxnIGlkPSdzeW1ib2wnPjxyZWN0IGNsYXNzPSdjbHMtMScgd2lkdGg9JzEzMicgaGVpZ2h0PScxMzInIHJ4PSc2JyByeT0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nNzgnIGN5PSc1NCcgcj0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nMTAyJyBjeT0nMzAnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9Jzc4JyBjeT0nMzAnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9JzU0JyBjeT0nMzAnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9JzMwJyBjeT0nMzAnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9JzMwJyBjeT0nNTQnIHI9JzYnLz48cGF0aCBjbGFzcz0nY2xzLTMnIGQ9J00zMCw3MmE2LDYsMCwwLDAtNiw2djI0YTYsNiwwLDAsMCwxMiwwVjc4QTYsNiwwLDAsMCwzMCw3MlonLz48cGF0aCBjbGFzcz0nY2xzLTMnIGQ9J003OCw3MmE2LDYsMCwwLDAtNiw2djI0YTYsNiwwLDAsMCwxMiwwVjc4QTYsNiwwLDAsMCw3OCw3MlonLz48cGF0aCBjbGFzcz0nY2xzLTMnIGQ9J001NCw0OGE2LDYsMCwwLDAtNiw2djQ4YTYsNiwwLDAsMCwxMiwwVjU0QTYsNiwwLDAsMCw1NCw0OFonLz48cGF0aCBjbGFzcz0nY2xzLTMnIGQ9J00xMDIsNDhhNiw2LDAsMCwwLTYsNnY0OGE2LDYsMCwwLDAsMTIsMFY1NEE2LDYsMCwwLDAsMTAyLDQ4WicvPjwvZz48L3N2Zz5cIn19fSx7fV0sMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYW5zZm9ybXMvYWdncmVnYXRlXCIpfSx7XCIuLi9zcmMvdHJhbnNmb3Jtcy9hZ2dyZWdhdGVcIjoxMTg4fV0sNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9iYXJcIil9LHtcIi4uL3NyYy90cmFjZXMvYmFyXCI6ODQ2fV0sNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9iYXJwb2xhclwiKX0se1wiLi4vc3JjL3RyYWNlcy9iYXJwb2xhclwiOjg1OH1dLDY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvYm94XCIpfSx7XCIuLi9zcmMvdHJhY2VzL2JveFwiOjg2OH1dLDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy9jb21wb25lbnRzL2NhbGVuZGFyc1wiKX0se1wiLi4vc3JjL2NvbXBvbmVudHMvY2FsZW5kYXJzXCI6NTc2fV0sODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9jYW5kbGVzdGlja1wiKX0se1wiLi4vc3JjL3RyYWNlcy9jYW5kbGVzdGlja1wiOjg3N31dLDk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvY2FycGV0XCIpfSx7XCIuLi9zcmMvdHJhY2VzL2NhcnBldFwiOjg5Nn1dLDEwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL2Nob3JvcGxldGhcIil9LHtcIi4uL3NyYy90cmFjZXMvY2hvcm9wbGV0aFwiOjkxMH1dLDExOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL2NvbmVcIil9LHtcIi4uL3NyYy90cmFjZXMvY29uZVwiOjkxOH1dLDEyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL2NvbnRvdXJcIil9LHtcIi4uL3NyYy90cmFjZXMvY29udG91clwiOjkzM31dLDEzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL2NvbnRvdXJjYXJwZXRcIil9LHtcIi4uL3NyYy90cmFjZXMvY29udG91cmNhcnBldFwiOjk0NH1dLDE0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvY29yZVwiKX0se1wiLi4vc3JjL2NvcmVcIjo2ODB9XSwxNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYW5zZm9ybXMvZmlsdGVyXCIpfSx7XCIuLi9zcmMvdHJhbnNmb3Jtcy9maWx0ZXJcIjoxMTg5fV0sMTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFuc2Zvcm1zL2dyb3VwYnlcIil9LHtcIi4uL3NyYy90cmFuc2Zvcm1zL2dyb3VwYnlcIjoxMTkwfV0sMTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvaGVhdG1hcFwiKX0se1wiLi4vc3JjL3RyYWNlcy9oZWF0bWFwXCI6OTU2fV0sMTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvaGVhdG1hcGdsXCIpfSx7XCIuLi9zcmMvdHJhY2VzL2hlYXRtYXBnbFwiOjk2NX1dLDE5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL2hpc3RvZ3JhbVwiKX0se1wiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW1cIjo5Nzd9XSwyMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZFwiKX0se1wiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZFwiOjk4NH1dLDIxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL2hpc3RvZ3JhbTJkY29udG91clwiKX0se1wiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZGNvbnRvdXJcIjo5ODh9XSwyMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2NvcmVcIik7bi5yZWdpc3RlcihbdChcIi4vYmFyXCIpLHQoXCIuL2JveFwiKSx0KFwiLi9oZWF0bWFwXCIpLHQoXCIuL2hpc3RvZ3JhbVwiKSx0KFwiLi9oaXN0b2dyYW0yZFwiKSx0KFwiLi9oaXN0b2dyYW0yZGNvbnRvdXJcIiksdChcIi4vY29udG91clwiKSx0KFwiLi9zY2F0dGVydGVybmFyeVwiKSx0KFwiLi92aW9saW5cIiksdChcIi4vd2F0ZXJmYWxsXCIpLHQoXCIuL3BpZVwiKSx0KFwiLi9zdW5idXJzdFwiKSx0KFwiLi9zY2F0dGVyM2RcIiksdChcIi4vc3VyZmFjZVwiKSx0KFwiLi9pc29zdXJmYWNlXCIpLHQoXCIuL3ZvbHVtZVwiKSx0KFwiLi9tZXNoM2RcIiksdChcIi4vY29uZVwiKSx0KFwiLi9zdHJlYW10dWJlXCIpLHQoXCIuL3NjYXR0ZXJnZW9cIiksdChcIi4vY2hvcm9wbGV0aFwiKSx0KFwiLi9zY2F0dGVyZ2xcIiksdChcIi4vc3Bsb21cIiksdChcIi4vcG9pbnRjbG91ZFwiKSx0KFwiLi9oZWF0bWFwZ2xcIiksdChcIi4vcGFyY29vcmRzXCIpLHQoXCIuL3BhcmNhdHNcIiksdChcIi4vc2NhdHRlcm1hcGJveFwiKSx0KFwiLi9zYW5rZXlcIiksdChcIi4vdGFibGVcIiksdChcIi4vY2FycGV0XCIpLHQoXCIuL3NjYXR0ZXJjYXJwZXRcIiksdChcIi4vY29udG91cmNhcnBldFwiKSx0KFwiLi9vaGxjXCIpLHQoXCIuL2NhbmRsZXN0aWNrXCIpLHQoXCIuL3NjYXR0ZXJwb2xhclwiKSx0KFwiLi9zY2F0dGVycG9sYXJnbFwiKSx0KFwiLi9iYXJwb2xhclwiKV0pLG4ucmVnaXN0ZXIoW3QoXCIuL2FnZ3JlZ2F0ZVwiKSx0KFwiLi9maWx0ZXJcIiksdChcIi4vZ3JvdXBieVwiKSx0KFwiLi9zb3J0XCIpXSksbi5yZWdpc3RlcihbdChcIi4vY2FsZW5kYXJzXCIpXSksZS5leHBvcnRzPW59LHtcIi4vYWdncmVnYXRlXCI6MyxcIi4vYmFyXCI6NCxcIi4vYmFycG9sYXJcIjo1LFwiLi9ib3hcIjo2LFwiLi9jYWxlbmRhcnNcIjo3LFwiLi9jYW5kbGVzdGlja1wiOjgsXCIuL2NhcnBldFwiOjksXCIuL2Nob3JvcGxldGhcIjoxMCxcIi4vY29uZVwiOjExLFwiLi9jb250b3VyXCI6MTIsXCIuL2NvbnRvdXJjYXJwZXRcIjoxMyxcIi4vY29yZVwiOjE0LFwiLi9maWx0ZXJcIjoxNSxcIi4vZ3JvdXBieVwiOjE2LFwiLi9oZWF0bWFwXCI6MTcsXCIuL2hlYXRtYXBnbFwiOjE4LFwiLi9oaXN0b2dyYW1cIjoxOSxcIi4vaGlzdG9ncmFtMmRcIjoyMCxcIi4vaGlzdG9ncmFtMmRjb250b3VyXCI6MjEsXCIuL2lzb3N1cmZhY2VcIjoyMyxcIi4vbWVzaDNkXCI6MjQsXCIuL29obGNcIjoyNSxcIi4vcGFyY2F0c1wiOjI2LFwiLi9wYXJjb29yZHNcIjoyNyxcIi4vcGllXCI6MjgsXCIuL3BvaW50Y2xvdWRcIjoyOSxcIi4vc2Fua2V5XCI6MzAsXCIuL3NjYXR0ZXIzZFwiOjMxLFwiLi9zY2F0dGVyY2FycGV0XCI6MzIsXCIuL3NjYXR0ZXJnZW9cIjozMyxcIi4vc2NhdHRlcmdsXCI6MzQsXCIuL3NjYXR0ZXJtYXBib3hcIjozNSxcIi4vc2NhdHRlcnBvbGFyXCI6MzYsXCIuL3NjYXR0ZXJwb2xhcmdsXCI6MzcsXCIuL3NjYXR0ZXJ0ZXJuYXJ5XCI6MzgsXCIuL3NvcnRcIjozOSxcIi4vc3Bsb21cIjo0MCxcIi4vc3RyZWFtdHViZVwiOjQxLFwiLi9zdW5idXJzdFwiOjQyLFwiLi9zdXJmYWNlXCI6NDMsXCIuL3RhYmxlXCI6NDQsXCIuL3Zpb2xpblwiOjQ1LFwiLi92b2x1bWVcIjo0NixcIi4vd2F0ZXJmYWxsXCI6NDd9XSwyMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9pc29zdXJmYWNlXCIpfSx7XCIuLi9zcmMvdHJhY2VzL2lzb3N1cmZhY2VcIjo5OTN9XSwyNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9tZXNoM2RcIil9LHtcIi4uL3NyYy90cmFjZXMvbWVzaDNkXCI6OTk4fV0sMjU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvb2hsY1wiKX0se1wiLi4vc3JjL3RyYWNlcy9vaGxjXCI6MTAwM31dLDI2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3BhcmNhdHNcIil9LHtcIi4uL3NyYy90cmFjZXMvcGFyY2F0c1wiOjEwMTJ9XSwyNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9wYXJjb29yZHNcIil9LHtcIi4uL3NyYy90cmFjZXMvcGFyY29vcmRzXCI6MTAyMX1dLDI4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3BpZVwiKX0se1wiLi4vc3JjL3RyYWNlcy9waWVcIjoxMDMyfV0sMjk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvcG9pbnRjbG91ZFwiKX0se1wiLi4vc3JjL3RyYWNlcy9wb2ludGNsb3VkXCI6MTA0MX1dLDMwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3NhbmtleVwiKX0se1wiLi4vc3JjL3RyYWNlcy9zYW5rZXlcIjoxMDQ3fV0sMzE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvc2NhdHRlcjNkXCIpfSx7XCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXIzZFwiOjEwODR9XSwzMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9zY2F0dGVyY2FycGV0XCIpfSx7XCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJjYXJwZXRcIjoxMDkwfV0sMzM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvc2NhdHRlcmdlb1wiKX0se1wiLi4vc3JjL3RyYWNlcy9zY2F0dGVyZ2VvXCI6MTA5N31dLDM0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJnbFwiKX0se1wiLi4vc3JjL3RyYWNlcy9zY2F0dGVyZ2xcIjoxMTA1fV0sMzU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvc2NhdHRlcm1hcGJveFwiKX0se1wiLi4vc3JjL3RyYWNlcy9zY2F0dGVybWFwYm94XCI6MTExMX1dLDM2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJwb2xhclwiKX0se1wiLi4vc3JjL3RyYWNlcy9zY2F0dGVycG9sYXJcIjoxMTE4fV0sMzc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvc2NhdHRlcnBvbGFyZ2xcIil9LHtcIi4uL3NyYy90cmFjZXMvc2NhdHRlcnBvbGFyZ2xcIjoxMTIyfV0sMzg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvc2NhdHRlcnRlcm5hcnlcIil9LHtcIi4uL3NyYy90cmFjZXMvc2NhdHRlcnRlcm5hcnlcIjoxMTI4fV0sMzk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFuc2Zvcm1zL3NvcnRcIil9LHtcIi4uL3NyYy90cmFuc2Zvcm1zL3NvcnRcIjoxMTkyfV0sNDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvc3Bsb21cIil9LHtcIi4uL3NyYy90cmFjZXMvc3Bsb21cIjoxMTMzfV0sNDE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvc3RyZWFtdHViZVwiKX0se1wiLi4vc3JjL3RyYWNlcy9zdHJlYW10dWJlXCI6MTEzOH1dLDQyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3N1bmJ1cnN0XCIpfSx7XCIuLi9zcmMvdHJhY2VzL3N1bmJ1cnN0XCI6MTE0NH1dLDQzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3N1cmZhY2VcIil9LHtcIi4uL3NyYy90cmFjZXMvc3VyZmFjZVwiOjExNTN9XSw0NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy90YWJsZVwiKX0se1wiLi4vc3JjL3RyYWNlcy90YWJsZVwiOjExNjF9XSw0NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy92aW9saW5cIil9LHtcIi4uL3NyYy90cmFjZXMvdmlvbGluXCI6MTE2OX1dLDQ2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3ZvbHVtZVwiKX0se1wiLi4vc3JjL3RyYWNlcy92b2x1bWVcIjoxMTc3fV0sNDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvd2F0ZXJmYWxsXCIpfSx7XCIuLi9zcmMvdHJhY2VzL3dhdGVyZmFsbFwiOjExODN9XSw0ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuZXllfHxbMCwwLDFdLHI9dC5jZW50ZXJ8fFswLDAsMF0scz10LnVwfHxbMCwxLDBdLGw9dC5kaXN0YW5jZUxpbWl0c3x8WzAsMS8wXSxjPXQubW9kZXx8XCJ0dXJudGFibGVcIix1PW4oKSxoPWkoKSxmPWEoKTtyZXR1cm4gdS5zZXREaXN0YW5jZUxpbWl0cyhsWzBdLGxbMV0pLHUubG9va0F0KDAsZSxyLHMpLGguc2V0RGlzdGFuY2VMaW1pdHMobFswXSxsWzFdKSxoLmxvb2tBdCgwLGUscixzKSxmLnNldERpc3RhbmNlTGltaXRzKGxbMF0sbFsxXSksZi5sb29rQXQoMCxlLHIscyksbmV3IG8oe3R1cm50YWJsZTp1LG9yYml0OmgsbWF0cml4OmZ9LGMpfTt2YXIgbj10KFwidHVybnRhYmxlLWNhbWVyYS1jb250cm9sbGVyXCIpLGk9dChcIm9yYml0LWNhbWVyYS1jb250cm9sbGVyXCIpLGE9dChcIm1hdHJpeC1jYW1lcmEtY29udHJvbGxlclwiKTtmdW5jdGlvbiBvKHQsZSl7dGhpcy5fY29udHJvbGxlck5hbWVzPU9iamVjdC5rZXlzKHQpLHRoaXMuX2NvbnRyb2xsZXJMaXN0PXRoaXMuX2NvbnRyb2xsZXJOYW1lcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSx0aGlzLl9tb2RlPWUsdGhpcy5fYWN0aXZlPXRbZV0sdGhpcy5fYWN0aXZlfHwodGhpcy5fbW9kZT1cInR1cm50YWJsZVwiLHRoaXMuX2FjdGl2ZT10LnR1cm50YWJsZSksdGhpcy5tb2Rlcz10aGlzLl9jb250cm9sbGVyTmFtZXMsdGhpcy5jb21wdXRlZE1hdHJpeD10aGlzLl9hY3RpdmUuY29tcHV0ZWRNYXRyaXgsdGhpcy5jb21wdXRlZEV5ZT10aGlzLl9hY3RpdmUuY29tcHV0ZWRFeWUsdGhpcy5jb21wdXRlZFVwPXRoaXMuX2FjdGl2ZS5jb21wdXRlZFVwLHRoaXMuY29tcHV0ZWRDZW50ZXI9dGhpcy5fYWN0aXZlLmNvbXB1dGVkQ2VudGVyLHRoaXMuY29tcHV0ZWRSYWRpdXM9dGhpcy5fYWN0aXZlLmNvbXB1dGVkUmFkaXVzfXZhciBzPW8ucHJvdG90eXBlO1tbXCJmbHVzaFwiLDFdLFtcImlkbGVcIiwxXSxbXCJsb29rQXRcIiw0XSxbXCJyb3RhdGVcIiw0XSxbXCJwYW5cIiw0XSxbXCJ0cmFuc2xhdGVcIiw0XSxbXCJzZXRNYXRyaXhcIiwyXSxbXCJzZXREaXN0YW5jZUxpbWl0c1wiLDJdLFtcInNldERpc3RhbmNlXCIsMl1dLmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF0scj1bXSxuPTA7bjx0WzFdOysrbilyLnB1c2goXCJhXCIrbik7dmFyIGk9XCJ2YXIgY2M9dGhpcy5fY29udHJvbGxlckxpc3Q7Zm9yKHZhciBpPTA7aTxjYy5sZW5ndGg7KytpKXtjY1tpXS5cIit0WzBdK1wiKFwiK3Iuam9pbigpK1wiKX1cIjtzW2VdPUZ1bmN0aW9uLmFwcGx5KG51bGwsci5jb25jYXQoaSkpfSkscy5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dGhpcy5fYWN0aXZlLnJlY2FsY01hdHJpeCh0KX0scy5nZXREaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYWN0aXZlLmdldERpc3RhbmNlKHQpfSxzLmdldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hY3RpdmUuZ2V0RGlzdGFuY2VMaW1pdHModCl9LHMubGFzdFQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlLmxhc3RUKCl9LHMuc2V0TW9kZT1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5fbW9kZSl7dmFyIGU9dGhpcy5fY29udHJvbGxlck5hbWVzLmluZGV4T2YodCk7aWYoIShlPDApKXt2YXIgcj10aGlzLl9hY3RpdmUsbj10aGlzLl9jb250cm9sbGVyTGlzdFtlXSxpPU1hdGgubWF4KHIubGFzdFQoKSxuLmxhc3RUKCkpO3IucmVjYWxjTWF0cml4KGkpLG4uc2V0TWF0cml4KGksci5jb21wdXRlZE1hdHJpeCksdGhpcy5fYWN0aXZlPW4sdGhpcy5fbW9kZT10LHRoaXMuY29tcHV0ZWRNYXRyaXg9dGhpcy5fYWN0aXZlLmNvbXB1dGVkTWF0cml4LHRoaXMuY29tcHV0ZWRFeWU9dGhpcy5fYWN0aXZlLmNvbXB1dGVkRXllLHRoaXMuY29tcHV0ZWRVcD10aGlzLl9hY3RpdmUuY29tcHV0ZWRVcCx0aGlzLmNvbXB1dGVkQ2VudGVyPXRoaXMuX2FjdGl2ZS5jb21wdXRlZENlbnRlcix0aGlzLmNvbXB1dGVkUmFkaXVzPXRoaXMuX2FjdGl2ZS5jb21wdXRlZFJhZGl1c319fSxzLmdldE1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9kZX19LHtcIm1hdHJpeC1jYW1lcmEtY29udHJvbGxlclwiOjQyNixcIm9yYml0LWNhbWVyYS1jb250cm9sbGVyXCI6NDQ5LFwidHVybnRhYmxlLWNhbWVyYS1jb250cm9sbGVyXCI6NTI3fV0sNDk6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbixpO249dGhpcyxpPWZ1bmN0aW9uKHQsZSxyLG4pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQudGFyZ2V0LmRlcHRofWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gdC5zb3VyY2VMaW5rcy5sZW5ndGg/dC5kZXB0aDplLTF9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBjKHQuc291cmNlLGUuc291cmNlKXx8dC5pbmRleC1lLmluZGV4fWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gYyh0LnRhcmdldCxlLnRhcmdldCl8fHQuaW5kZXgtZS5pbmRleH1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHQueTAtZS55MH1mdW5jdGlvbiB1KHQpe3JldHVybiB0LnZhbHVlfWZ1bmN0aW9uIGgodCl7cmV0dXJuKHQueTArdC55MSkvMn1mdW5jdGlvbiBmKHQpe3JldHVybiBoKHQuc291cmNlKSp0LnZhbHVlfWZ1bmN0aW9uIHAodCl7cmV0dXJuIGgodC50YXJnZXQpKnQudmFsdWV9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiBnKHQpe3JldHVybiB0Lm5vZGVzfWZ1bmN0aW9uIHYodCl7cmV0dXJuIHQubGlua3N9ZnVuY3Rpb24gbSh0LGUpe3ZhciByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcihcIm1pc3Npbmc6IFwiK2UpO3JldHVybiByfWZ1bmN0aW9uIHkodCl7cmV0dXJuW3Quc291cmNlLngxLHQueTBdfWZ1bmN0aW9uIHgodCl7cmV0dXJuW3QudGFyZ2V0LngwLHQueTFdfXQuc2Fua2V5PWZ1bmN0aW9uKCl7dmFyIHQ9MCxuPTAsaT0xLHk9MSx4PTI0LGI9OCxfPWQsdz1hLGs9ZyxBPXYsVD0zMixNPTIvMztmdW5jdGlvbiBTKCl7dmFyIGE9e25vZGVzOmsuYXBwbHkobnVsbCxhcmd1bWVudHMpLGxpbmtzOkEuYXBwbHkobnVsbCxhcmd1bWVudHMpfTtyZXR1cm4gZnVuY3Rpb24odCl7dC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dC5pbmRleD1lLHQuc291cmNlTGlua3M9W10sdC50YXJnZXRMaW5rcz1bXX0pO3ZhciBlPXIubWFwKHQubm9kZXMsXyk7dC5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQscil7dC5pbmRleD1yO3ZhciBuPXQuc291cmNlLGk9dC50YXJnZXQ7XCJvYmplY3RcIiE9dHlwZW9mIG4mJihuPXQuc291cmNlPW0oZSxuKSksXCJvYmplY3RcIiE9dHlwZW9mIGkmJihpPXQudGFyZ2V0PW0oZSxpKSksbi5zb3VyY2VMaW5rcy5wdXNoKHQpLGkudGFyZ2V0TGlua3MucHVzaCh0KX0pfShhKSxmdW5jdGlvbih0KXt0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dC52YWx1ZT1NYXRoLm1heChlLnN1bSh0LnNvdXJjZUxpbmtzLHUpLGUuc3VtKHQudGFyZ2V0TGlua3MsdSkpfSl9KGEpLGZ1bmN0aW9uKGUpe3ZhciByLG4sYTtmb3Iocj1lLm5vZGVzLG49W10sYT0wO3IubGVuZ3RoOysrYSxyPW4sbj1bXSlyLmZvckVhY2goZnVuY3Rpb24odCl7dC5kZXB0aD1hLHQuc291cmNlTGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXtuLmluZGV4T2YodC50YXJnZXQpPDAmJm4ucHVzaCh0LnRhcmdldCl9KX0pO2ZvcihyPWUubm9kZXMsbj1bXSxhPTA7ci5sZW5ndGg7KythLHI9bixuPVtdKXIuZm9yRWFjaChmdW5jdGlvbih0KXt0LmhlaWdodD1hLHQudGFyZ2V0TGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXtuLmluZGV4T2YodC5zb3VyY2UpPDAmJm4ucHVzaCh0LnNvdXJjZSl9KX0pO3ZhciBvPShpLXQteCkvKGEtMSk7ZS5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UueDE9KGUueDA9dCtNYXRoLm1heCgwLE1hdGgubWluKGEtMSxNYXRoLmZsb29yKHcuY2FsbChudWxsLGUsYSkpKSkqbykreH0pfShhKSxmdW5jdGlvbih0KXt2YXIgaT1yLm5lc3QoKS5rZXkoZnVuY3Rpb24odCl7cmV0dXJuIHQueDB9KS5zb3J0S2V5cyhlLmFzY2VuZGluZykuZW50cmllcyh0Lm5vZGVzKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWVzfSk7KGZ1bmN0aW9uKCl7dmFyIHI9ZS5tYXgoaSxmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGh9KSxhPU0qKHktbikvKHItMSk7Yj5hJiYoYj1hKTt2YXIgbz1lLm1pbihpLGZ1bmN0aW9uKHQpe3JldHVybih5LW4tKHQubGVuZ3RoLTEpKmIpL2Uuc3VtKHQsdSl9KTtpLmZvckVhY2goZnVuY3Rpb24odCl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dC55MT0odC55MD1lKSt0LnZhbHVlKm99KX0pLHQubGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LndpZHRoPXQudmFsdWUqb30pfSkoKSxkKCk7Zm9yKHZhciBhPTEsbz1UO28+MDstLW8pbChhKj0uOTkpLGQoKSxzKGEpLGQoKTtmdW5jdGlvbiBzKHQpe2kuZm9yRWFjaChmdW5jdGlvbihyKXtyLmZvckVhY2goZnVuY3Rpb24ocil7aWYoci50YXJnZXRMaW5rcy5sZW5ndGgpe3ZhciBuPShlLnN1bShyLnRhcmdldExpbmtzLGYpL2Uuc3VtKHIudGFyZ2V0TGlua3MsdSktaChyKSkqdDtyLnkwKz1uLHIueTErPW59fSl9KX1mdW5jdGlvbiBsKHQpe2kuc2xpY2UoKS5yZXZlcnNlKCkuZm9yRWFjaChmdW5jdGlvbihyKXtyLmZvckVhY2goZnVuY3Rpb24ocil7aWYoci5zb3VyY2VMaW5rcy5sZW5ndGgpe3ZhciBuPShlLnN1bShyLnNvdXJjZUxpbmtzLHApL2Uuc3VtKHIuc291cmNlTGlua3MsdSktaChyKSkqdDtyLnkwKz1uLHIueTErPW59fSl9KX1mdW5jdGlvbiBkKCl7aS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxhPW4sbz10Lmxlbmd0aDtmb3IodC5zb3J0KGMpLGk9MDtpPG87KytpKWU9dFtpXSwocj1hLWUueTApPjAmJihlLnkwKz1yLGUueTErPXIpLGE9ZS55MStiO2lmKChyPWEtYi15KT4wKWZvcihhPWUueTAtPXIsZS55MS09cixpPW8tMjtpPj0wOy0taSllPXRbaV0sKHI9ZS55MStiLWEpPjAmJihlLnkwLT1yLGUueTEtPXIpLGE9ZS55MH0pfX0oYSksRShhKSxhfWZ1bmN0aW9uIEUodCl7dC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc291cmNlTGlua3Muc29ydChsKSx0LnRhcmdldExpbmtzLnNvcnQocyl9KSx0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC55MCxyPWU7dC5zb3VyY2VMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QueTA9ZSt0LndpZHRoLzIsZSs9dC53aWR0aH0pLHQudGFyZ2V0TGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LnkxPXIrdC53aWR0aC8yLHIrPXQud2lkdGh9KX0pfXJldHVybiBTLnVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gRSh0KSx0fSxTLm5vZGVJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6byh0KSxTKTpffSxTLm5vZGVBbGlnbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6byh0KSxTKTp3fSxTLm5vZGVXaWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD0rdCxTKTp4fSxTLm5vZGVQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPSt0LFMpOmJ9LFMubm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8odCksUyk6a30sUy5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6byh0KSxTKTpBfSxTLnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bj0wLGk9K2VbMF0seT0rZVsxXSxTKTpbaS10LHktbl19LFMuZXh0ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStlWzBdWzBdLGk9K2VbMV1bMF0sbj0rZVswXVsxXSx5PStlWzFdWzFdLFMpOltbdCxuXSxbaSx5XV19LFMuaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD0rdCxTKTpUfSxTfSx0LnNhbmtleUNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdC50YXJnZXRMaW5rcy5sZW5ndGg/dC5kZXB0aDp0LnNvdXJjZUxpbmtzLmxlbmd0aD9lLm1pbih0LnNvdXJjZUxpbmtzLGkpLTE6MH0sdC5zYW5rZXlMZWZ0PWZ1bmN0aW9uKHQpe3JldHVybiB0LmRlcHRofSx0LnNhbmtleVJpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtMS10LmhlaWdodH0sdC5zYW5rZXlKdXN0aWZ5PWEsdC5zYW5rZXlMaW5rSG9yaXpvbnRhbD1mdW5jdGlvbigpe3JldHVybiBuLmxpbmtIb3Jpem9udGFsKCkuc291cmNlKHkpLnRhcmdldCh4KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LFwib2JqZWN0XCI9PXR5cGVvZiByJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZT9pKHIsdChcImQzLWFycmF5XCIpLHQoXCJkMy1jb2xsZWN0aW9uXCIpLHQoXCJkMy1zaGFwZVwiKSk6aShuLmQzPW4uZDN8fHt9LG4uZDMsbi5kMyxuLmQzKX0se1wiZDMtYXJyYXlcIjoxNDMsXCJkMy1jb2xsZWN0aW9uXCI6MTQ0LFwiZDMtc2hhcGVcIjoxNTN9XSw1MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPVwidW5kZWZpbmVkXCI9PXR5cGVvZiBXZWFrTWFwP3QoXCJ3ZWFrLW1hcFwiKTpXZWFrTWFwLGk9dChcImdsLWJ1ZmZlclwiKSxhPXQoXCJnbC12YW9cIiksbz1uZXcgbjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9by5nZXQodCkscj1lJiYoZS5fdHJpYW5nbGVCdWZmZXIuaGFuZGxlfHxlLl90cmlhbmdsZUJ1ZmZlci5idWZmZXIpO2lmKCFyfHwhdC5pc0J1ZmZlcihyKSl7dmFyIG49aSh0LG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC0xLDQsNCwtMV0pKTsoZT1hKHQsW3tidWZmZXI6bix0eXBlOnQuRkxPQVQsc2l6ZToyfV0pKS5fdHJpYW5nbGVCdWZmZXI9bixvLnNldCh0LGUpfWUuYmluZCgpLHQuZHJhd0FycmF5cyh0LlRSSUFOR0xFUywwLDMpLGUudW5iaW5kKCl9fSx7XCJnbC1idWZmZXJcIjoyMzgsXCJnbC12YW9cIjozMjAsXCJ3ZWFrLW1hcFwiOjUzN31dLDUxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPTAscj0wLG49MCxpPTA7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3ZhciBhPSh0PXQuc2xpY2UoKSlbMF0sbz1hLnRvVXBwZXJDYXNlKCk7aWYoYSE9bylzd2l0Y2godFswXT1vLGEpe2Nhc2VcImFcIjp0WzZdKz1uLHRbN10rPWk7YnJlYWs7Y2FzZVwidlwiOnRbMV0rPWk7YnJlYWs7Y2FzZVwiaFwiOnRbMV0rPW47YnJlYWs7ZGVmYXVsdDpmb3IodmFyIHM9MTtzPHQubGVuZ3RoOyl0W3MrK10rPW4sdFtzKytdKz1pfXN3aXRjaChvKXtjYXNlXCJaXCI6bj1lLGk9cjticmVhaztjYXNlXCJIXCI6bj10WzFdO2JyZWFrO2Nhc2VcIlZcIjppPXRbMV07YnJlYWs7Y2FzZVwiTVwiOm49ZT10WzFdLGk9cj10WzJdO2JyZWFrO2RlZmF1bHQ6bj10W3QubGVuZ3RoLTJdLGk9dFt0Lmxlbmd0aC0xXX1yZXR1cm4gdH0pfX0se31dLDUyOltmdW5jdGlvbih0LGUscil7dmFyIG49dChcInBhZC1sZWZ0XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZT1cIm51bWJlclwiPT10eXBlb2YgZT9lOjEscj1yfHxcIjogXCI7dmFyIGk9dC5zcGxpdCgvXFxyP1xcbi8pLGE9U3RyaW5nKGkubGVuZ3RoK2UtMSkubGVuZ3RoO3JldHVybiBpLm1hcChmdW5jdGlvbih0LGkpe3ZhciBvPWkrZSxzPVN0cmluZyhvKS5sZW5ndGgsbD1uKG8sYS1zKTtyZXR1cm4gbCtyK3R9KS5qb2luKFwiXFxuXCIpfX0se1wicGFkLWxlZnRcIjo0NTB9XSw1MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtpZigwPT09ZSlyZXR1cm5bXTtpZigxPT09ZSlyZXR1cm5bMF07Zm9yKHZhciByPXRbMF0ubGVuZ3RoLG49W3RbMF1dLGE9WzBdLG89MTtvPGU7KytvKWlmKG4ucHVzaCh0W29dKSxpKG4scikpe2lmKGEucHVzaChvKSxhLmxlbmd0aD09PXIrMSlyZXR1cm4gYX1lbHNlIG4ucG9wKCk7cmV0dXJuIGF9O3ZhciBuPXQoXCJyb2J1c3Qtb3JpZW50YXRpb25cIik7ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZSsxKSxpPTA7aTx0Lmxlbmd0aDsrK2kpcltpXT10W2ldO2ZvcihpPTA7aTw9dC5sZW5ndGg7KytpKXtmb3IodmFyIGE9dC5sZW5ndGg7YTw9ZTsrK2Epe2Zvcih2YXIgbz1uZXcgQXJyYXkoZSkscz0wO3M8ZTsrK3Mpb1tzXT1NYXRoLnBvdyhhKzEtaSxzKTtyW2FdPW99aWYobi5hcHBseSh2b2lkIDAscikpcmV0dXJuITB9cmV0dXJuITF9fSx7XCJyb2J1c3Qtb3JpZW50YXRpb25cIjo0OTV9XSw1NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKGUpLmZpbHRlcihmdW5jdGlvbihyKXtmb3IodmFyIG49bmV3IEFycmF5KHIubGVuZ3RoKSxhPTA7YTxyLmxlbmd0aDsrK2EpblthXT1lW3JbYV1dO3JldHVybiBpKG4pKnQ8MX0pfTt2YXIgbj10KFwiZGVsYXVuYXktdHJpYW5ndWxhdGVcIiksaT10KFwiY2lyY3VtcmFkaXVzXCIpfSx7Y2lyY3VtcmFkaXVzOjEwNSxcImRlbGF1bmF5LXRyaWFuZ3VsYXRlXCI6MTU3fV0sNTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaShuKHQsZSkpfTt2YXIgbj10KFwiYWxwaGEtY29tcGxleFwiKSxpPXQoXCJzaW1wbGljaWFsLWNvbXBsZXgtYm91bmRhcnlcIil9LHtcImFscGhhLWNvbXBsZXhcIjo1NCxcInNpbXBsaWNpYWwtY29tcGxleC1ib3VuZGFyeVwiOjUwMn1dLDU2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIXR8fG51bGw9PXQubGVuZ3RoKXRocm93IEVycm9yKFwiQXJndW1lbnQgc2hvdWxkIGJlIGFuIGFycmF5XCIpO2U9bnVsbD09ZT8xOk1hdGguZmxvb3IoZSk7Zm9yKHZhciByPUFycmF5KDIqZSksbj0wO248ZTtuKyspe2Zvcih2YXIgaT0tMS8wLGE9MS8wLG89bixzPXQubGVuZ3RoO288cztvKz1lKXRbb10+aSYmKGk9dFtvXSksdFtvXTxhJiYoYT10W29dKTtyW25dPWEscltlK25dPWl9cmV0dXJuIHJ9fSx7fV0sNTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiYXJyYXktYm91bmRzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoIXR8fG51bGw9PXQubGVuZ3RoKXRocm93IEVycm9yKFwiQXJndW1lbnQgc2hvdWxkIGJlIGFuIGFycmF5XCIpO251bGw9PWUmJihlPTEpO251bGw9PXImJihyPW4odCxlKSk7Zm9yKHZhciBpPTA7aTxlO2krKyl7dmFyIGE9cltlK2ldLG89cltpXSxzPWksbD10Lmxlbmd0aDtpZihhPT09MS8wJiZvPT09LTEvMClmb3Iocz1pO3M8bDtzKz1lKXRbc109dFtzXT09PWE/MTp0W3NdPT09bz8wOi41O2Vsc2UgaWYoYT09PTEvMClmb3Iocz1pO3M8bDtzKz1lKXRbc109dFtzXT09PWE/MTowO2Vsc2UgaWYobz09PS0xLzApZm9yKHM9aTtzPGw7cys9ZSl0W3NdPXRbc109PT1vPzA6MTtlbHNle3ZhciBjPWEtbztmb3Iocz1pO3M8bDtzKz1lKXRbc109MD09PWM/LjU6KHRbc10tbykvY319cmV0dXJuIHR9fSx7XCJhcnJheS1ib3VuZHNcIjo1Nn1dLDU4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9XCJudW1iZXJcIj09dHlwZW9mIHQsbj1cIm51bWJlclwiPT10eXBlb2YgZTtyJiYhbj8oZT10LHQ9MCk6cnx8bnx8KHQ9MCxlPTApO3ZhciBpPShlfD0wKS0odHw9MCk7aWYoaTwwKXRocm93IG5ldyBFcnJvcihcImFycmF5IGxlbmd0aCBtdXN0IGJlIHBvc2l0aXZlXCIpO2Zvcih2YXIgYT1uZXcgQXJyYXkoaSksbz0wLHM9dDtvPGk7bysrLHMrKylhW29dPXM7cmV0dXJuIGF9fSx7fV0sNTk6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKHQ9PT1lKXJldHVybiAwO2Zvcih2YXIgcj10Lmxlbmd0aCxuPWUubGVuZ3RoLGk9MCxhPU1hdGgubWluKHIsbik7aTxhOysraSlpZih0W2ldIT09ZVtpXSl7cj10W2ldLG49ZVtpXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gci5CdWZmZXImJlwiZnVuY3Rpb25cIj09dHlwZW9mIHIuQnVmZmVyLmlzQnVmZmVyP3IuQnVmZmVyLmlzQnVmZmVyKHQpOiEobnVsbD09dHx8IXQuX2lzQnVmZmVyKX12YXIgYT10KFwidXRpbC9cIiksbz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHM9QXJyYXkucHJvdG90eXBlLnNsaWNlLGw9XCJmb29cIj09PWZ1bmN0aW9uKCl7fS5uYW1lO2Z1bmN0aW9uIGModCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiB1KHQpe3JldHVybiFpKHQpJiYoXCJmdW5jdGlvblwiPT10eXBlb2Ygci5BcnJheUJ1ZmZlciYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcodCk6ISF0JiYodCBpbnN0YW5jZW9mIERhdGFWaWV3fHwhISh0LmJ1ZmZlciYmdC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpKSl9dmFyIGg9ZS5leHBvcnRzPW0sZj0vXFxzKmZ1bmN0aW9uXFxzKyhbXlxcKFxcc10qKVxccyovO2Z1bmN0aW9uIHAodCl7aWYoYS5pc0Z1bmN0aW9uKHQpKXtpZihsKXJldHVybiB0Lm5hbWU7dmFyIGU9dC50b1N0cmluZygpLm1hdGNoKGYpO3JldHVybiBlJiZlWzFdfX1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQ/dC5sZW5ndGg8ZT90OnQuc2xpY2UoMCxlKTp0fWZ1bmN0aW9uIGcodCl7aWYobHx8IWEuaXNGdW5jdGlvbih0KSlyZXR1cm4gYS5pbnNwZWN0KHQpO3ZhciBlPXAodCk7cmV0dXJuXCJbRnVuY3Rpb25cIisoZT9cIjogXCIrZTpcIlwiKStcIl1cIn1mdW5jdGlvbiB2KHQsZSxyLG4saSl7dGhyb3cgbmV3IGguQXNzZXJ0aW9uRXJyb3Ioe21lc3NhZ2U6cixhY3R1YWw6dCxleHBlY3RlZDplLG9wZXJhdG9yOm4sc3RhY2tTdGFydEZ1bmN0aW9uOml9KX1mdW5jdGlvbiBtKHQsZSl7dHx8dih0LCEwLGUsXCI9PVwiLGgub2spfWZ1bmN0aW9uIHkodCxlLHIsbyl7aWYodD09PWUpcmV0dXJuITA7aWYoaSh0KSYmaShlKSlyZXR1cm4gMD09PW4odCxlKTtpZihhLmlzRGF0ZSh0KSYmYS5pc0RhdGUoZSkpcmV0dXJuIHQuZ2V0VGltZSgpPT09ZS5nZXRUaW1lKCk7aWYoYS5pc1JlZ0V4cCh0KSYmYS5pc1JlZ0V4cChlKSlyZXR1cm4gdC5zb3VyY2U9PT1lLnNvdXJjZSYmdC5nbG9iYWw9PT1lLmdsb2JhbCYmdC5tdWx0aWxpbmU9PT1lLm11bHRpbGluZSYmdC5sYXN0SW5kZXg9PT1lLmxhc3RJbmRleCYmdC5pZ25vcmVDYXNlPT09ZS5pZ25vcmVDYXNlO2lmKG51bGwhPT10JiZcIm9iamVjdFwiPT10eXBlb2YgdHx8bnVsbCE9PWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlKXtpZih1KHQpJiZ1KGUpJiZjKHQpPT09YyhlKSYmISh0IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5fHx0IGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5KSlyZXR1cm4gMD09PW4obmV3IFVpbnQ4QXJyYXkodC5idWZmZXIpLG5ldyBVaW50OEFycmF5KGUuYnVmZmVyKSk7aWYoaSh0KSE9PWkoZSkpcmV0dXJuITE7dmFyIGw9KG89b3x8e2FjdHVhbDpbXSxleHBlY3RlZDpbXX0pLmFjdHVhbC5pbmRleE9mKHQpO3JldHVybi0xIT09bCYmbD09PW8uZXhwZWN0ZWQuaW5kZXhPZihlKXx8KG8uYWN0dWFsLnB1c2godCksby5leHBlY3RlZC5wdXNoKGUpLGZ1bmN0aW9uKHQsZSxyLG4pe2lmKG51bGw9PXR8fG51bGw9PWUpcmV0dXJuITE7aWYoYS5pc1ByaW1pdGl2ZSh0KXx8YS5pc1ByaW1pdGl2ZShlKSlyZXR1cm4gdD09PWU7aWYociYmT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKXJldHVybiExO3ZhciBpPXgodCksbz14KGUpO2lmKGkmJiFvfHwhaSYmbylyZXR1cm4hMTtpZihpKXJldHVybiB0PXMuY2FsbCh0KSxlPXMuY2FsbChlKSx5KHQsZSxyKTt2YXIgbCxjLHU9dyh0KSxoPXcoZSk7aWYodS5sZW5ndGghPT1oLmxlbmd0aClyZXR1cm4hMTtmb3IodS5zb3J0KCksaC5zb3J0KCksYz11Lmxlbmd0aC0xO2M+PTA7Yy0tKWlmKHVbY10hPT1oW2NdKXJldHVybiExO2ZvcihjPXUubGVuZ3RoLTE7Yz49MDtjLS0paWYobD11W2NdLCF5KHRbbF0sZVtsXSxyLG4pKXJldHVybiExO3JldHVybiEwfSh0LGUscixvKSl9cmV0dXJuIHI/dD09PWU6dD09ZX1mdW5jdGlvbiB4KHQpe3JldHVyblwiW29iamVjdCBBcmd1bWVudHNdXCI9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBiKHQsZSl7aWYoIXR8fCFlKXJldHVybiExO2lmKFwiW29iamVjdCBSZWdFeHBdXCI9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSlyZXR1cm4gZS50ZXN0KHQpO3RyeXtpZih0IGluc3RhbmNlb2YgZSlyZXR1cm4hMH1jYXRjaCh0KXt9cmV0dXJuIUVycm9yLmlzUHJvdG90eXBlT2YoZSkmJiEwPT09ZS5jYWxsKHt9LHQpfWZ1bmN0aW9uIF8odCxlLHIsbil7dmFyIGk7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJsb2NrXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XCJzdHJpbmdcIj09dHlwZW9mIHImJihuPXIscj1udWxsKSxpPWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXt0KCl9Y2F0Y2godCl7ZT10fXJldHVybiBlfShlKSxuPShyJiZyLm5hbWU/XCIgKFwiK3IubmFtZStcIikuXCI6XCIuXCIpKyhuP1wiIFwiK246XCIuXCIpLHQmJiFpJiZ2KGkscixcIk1pc3NpbmcgZXhwZWN0ZWQgZXhjZXB0aW9uXCIrbik7dmFyIG89XCJzdHJpbmdcIj09dHlwZW9mIG4scz0hdCYmaSYmIXI7aWYoKCF0JiZhLmlzRXJyb3IoaSkmJm8mJmIoaSxyKXx8cykmJnYoaSxyLFwiR290IHVud2FudGVkIGV4Y2VwdGlvblwiK24pLHQmJmkmJnImJiFiKGkscil8fCF0JiZpKXRocm93IGl9aC5Bc3NlcnRpb25FcnJvcj1mdW5jdGlvbih0KXt2YXIgZTt0aGlzLm5hbWU9XCJBc3NlcnRpb25FcnJvclwiLHRoaXMuYWN0dWFsPXQuYWN0dWFsLHRoaXMuZXhwZWN0ZWQ9dC5leHBlY3RlZCx0aGlzLm9wZXJhdG9yPXQub3BlcmF0b3IsdC5tZXNzYWdlPyh0aGlzLm1lc3NhZ2U9dC5tZXNzYWdlLHRoaXMuZ2VuZXJhdGVkTWVzc2FnZT0hMSk6KHRoaXMubWVzc2FnZT1kKGcoKGU9dGhpcykuYWN0dWFsKSwxMjgpK1wiIFwiK2Uub3BlcmF0b3IrXCIgXCIrZChnKGUuZXhwZWN0ZWQpLDEyOCksdGhpcy5nZW5lcmF0ZWRNZXNzYWdlPSEwKTt2YXIgcj10LnN0YWNrU3RhcnRGdW5jdGlvbnx8djtpZihFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHIpO2Vsc2V7dmFyIG49bmV3IEVycm9yO2lmKG4uc3RhY2spe3ZhciBpPW4uc3RhY2ssYT1wKHIpLG89aS5pbmRleE9mKFwiXFxuXCIrYSk7aWYobz49MCl7dmFyIHM9aS5pbmRleE9mKFwiXFxuXCIsbysxKTtpPWkuc3Vic3RyaW5nKHMrMSl9dGhpcy5zdGFjaz1pfX19LGEuaW5oZXJpdHMoaC5Bc3NlcnRpb25FcnJvcixFcnJvciksaC5mYWlsPXYsaC5vaz1tLGguZXF1YWw9ZnVuY3Rpb24odCxlLHIpe3QhPWUmJnYodCxlLHIsXCI9PVwiLGguZXF1YWwpfSxoLm5vdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0PT1lJiZ2KHQsZSxyLFwiIT1cIixoLm5vdEVxdWFsKX0saC5kZWVwRXF1YWw9ZnVuY3Rpb24odCxlLHIpe3kodCxlLCExKXx8dih0LGUscixcImRlZXBFcXVhbFwiLGguZGVlcEVxdWFsKX0saC5kZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3kodCxlLCEwKXx8dih0LGUscixcImRlZXBTdHJpY3RFcXVhbFwiLGguZGVlcFN0cmljdEVxdWFsKX0saC5ub3REZWVwRXF1YWw9ZnVuY3Rpb24odCxlLHIpe3kodCxlLCExKSYmdih0LGUscixcIm5vdERlZXBFcXVhbFwiLGgubm90RGVlcEVxdWFsKX0saC5ub3REZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24gdChlLHIsbil7eShlLHIsITApJiZ2KGUscixuLFwibm90RGVlcFN0cmljdEVxdWFsXCIsdCl9LGguc3RyaWN0RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3QhPT1lJiZ2KHQsZSxyLFwiPT09XCIsaC5zdHJpY3RFcXVhbCl9LGgubm90U3RyaWN0RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3Q9PT1lJiZ2KHQsZSxyLFwiIT09XCIsaC5ub3RTdHJpY3RFcXVhbCl9LGgudGhyb3dzPWZ1bmN0aW9uKHQsZSxyKXtfKCEwLHQsZSxyKX0saC5kb2VzTm90VGhyb3c9ZnVuY3Rpb24odCxlLHIpe18oITEsdCxlLHIpfSxoLmlmRXJyb3I9ZnVuY3Rpb24odCl7aWYodCl0aHJvdyB0fTt2YXIgdz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpby5jYWxsKHQscikmJmUucHVzaChyKTtyZXR1cm4gZX19KS5jYWxsKHRoaXMsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHtcInV0aWwvXCI6NjJ9XSw2MDpbZnVuY3Rpb24odCxlLHIpe1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5zdXBlcl89ZSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KX06ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH19LHt9XSw2MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmXCJvYmplY3RcIj09dHlwZW9mIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQuY29weSYmXCJmdW5jdGlvblwiPT10eXBlb2YgdC5maWxsJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnJlYWRVSW50OH19LHt9XSw2MjpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlLG4pe3ZhciBpPS8lW3NkaiVdL2c7ci5mb3JtYXQ9ZnVuY3Rpb24odCl7aWYoIW0odCkpe2Zvcih2YXIgZT1bXSxyPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyllLnB1c2gocyhhcmd1bWVudHNbcl0pKTtyZXR1cm4gZS5qb2luKFwiIFwiKX1yPTE7Zm9yKHZhciBuPWFyZ3VtZW50cyxhPW4ubGVuZ3RoLG89U3RyaW5nKHQpLnJlcGxhY2UoaSxmdW5jdGlvbih0KXtpZihcIiUlXCI9PT10KXJldHVyblwiJVwiO2lmKHI+PWEpcmV0dXJuIHQ7c3dpdGNoKHQpe2Nhc2VcIiVzXCI6cmV0dXJuIFN0cmluZyhuW3IrK10pO2Nhc2VcIiVkXCI6cmV0dXJuIE51bWJlcihuW3IrK10pO2Nhc2VcIiVqXCI6dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShuW3IrK10pfWNhdGNoKHQpe3JldHVyblwiW0NpcmN1bGFyXVwifWRlZmF1bHQ6cmV0dXJuIHR9fSksbD1uW3JdO3I8YTtsPW5bKytyXSlnKGwpfHwhYihsKT9vKz1cIiBcIitsOm8rPVwiIFwiK3MobCk7cmV0dXJuIG99LHIuZGVwcmVjYXRlPWZ1bmN0aW9uKHQsaSl7aWYoeShuLnByb2Nlc3MpKXJldHVybiBmdW5jdGlvbigpe3JldHVybiByLmRlcHJlY2F0ZSh0LGkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07aWYoITA9PT1lLm5vRGVwcmVjYXRpb24pcmV0dXJuIHQ7dmFyIGE9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIWEpe2lmKGUudGhyb3dEZXByZWNhdGlvbil0aHJvdyBuZXcgRXJyb3IoaSk7ZS50cmFjZURlcHJlY2F0aW9uP2NvbnNvbGUudHJhY2UoaSk6Y29uc29sZS5lcnJvcihpKSxhPSEwfXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O3ZhciBhLG89e307ZnVuY3Rpb24gcyh0LGUpe3ZhciBuPXtzZWVuOltdLHN0eWxpemU6Y307cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTMmJihuLmRlcHRoPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD49NCYmKG4uY29sb3JzPWFyZ3VtZW50c1szXSksZChlKT9uLnNob3dIaWRkZW49ZTplJiZyLl9leHRlbmQobixlKSx5KG4uc2hvd0hpZGRlbikmJihuLnNob3dIaWRkZW49ITEpLHkobi5kZXB0aCkmJihuLmRlcHRoPTIpLHkobi5jb2xvcnMpJiYobi5jb2xvcnM9ITEpLHkobi5jdXN0b21JbnNwZWN0KSYmKG4uY3VzdG9tSW5zcGVjdD0hMCksbi5jb2xvcnMmJihuLnN0eWxpemU9bCksdShuLHQsbi5kZXB0aCl9ZnVuY3Rpb24gbCh0LGUpe3ZhciByPXMuc3R5bGVzW2VdO3JldHVybiByP1wiXFx4MWJbXCIrcy5jb2xvcnNbcl1bMF0rXCJtXCIrdCtcIlxceDFiW1wiK3MuY29sb3JzW3JdWzFdK1wibVwiOnR9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiB0fWZ1bmN0aW9uIHUodCxlLG4pe2lmKHQuY3VzdG9tSW5zcGVjdCYmZSYmayhlLmluc3BlY3QpJiZlLmluc3BlY3QhPT1yLmluc3BlY3QmJighZS5jb25zdHJ1Y3Rvcnx8ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUhPT1lKSl7dmFyIGk9ZS5pbnNwZWN0KG4sdCk7cmV0dXJuIG0oaSl8fChpPXUodCxpLG4pKSxpfXZhciBhPWZ1bmN0aW9uKHQsZSl7aWYoeShlKSlyZXR1cm4gdC5zdHlsaXplKFwidW5kZWZpbmVkXCIsXCJ1bmRlZmluZWRcIik7aWYobShlKSl7dmFyIHI9XCInXCIrSlNPTi5zdHJpbmdpZnkoZSkucmVwbGFjZSgvXlwifFwiJC9nLFwiXCIpLnJlcGxhY2UoLycvZyxcIlxcXFwnXCIpLnJlcGxhY2UoL1xcXFxcIi9nLCdcIicpK1wiJ1wiO3JldHVybiB0LnN0eWxpemUocixcInN0cmluZ1wiKX1pZih2KGUpKXJldHVybiB0LnN0eWxpemUoXCJcIitlLFwibnVtYmVyXCIpO2lmKGQoZSkpcmV0dXJuIHQuc3R5bGl6ZShcIlwiK2UsXCJib29sZWFuXCIpO2lmKGcoZSkpcmV0dXJuIHQuc3R5bGl6ZShcIm51bGxcIixcIm51bGxcIil9KHQsZSk7aWYoYSlyZXR1cm4gYTt2YXIgbz1PYmplY3Qua2V5cyhlKSxzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCxyKXtlW3RdPSEwfSksZX0obyk7aWYodC5zaG93SGlkZGVuJiYobz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKSksdyhlKSYmKG8uaW5kZXhPZihcIm1lc3NhZ2VcIik+PTB8fG8uaW5kZXhPZihcImRlc2NyaXB0aW9uXCIpPj0wKSlyZXR1cm4gaChlKTtpZigwPT09by5sZW5ndGgpe2lmKGsoZSkpe3ZhciBsPWUubmFtZT9cIjogXCIrZS5uYW1lOlwiXCI7cmV0dXJuIHQuc3R5bGl6ZShcIltGdW5jdGlvblwiK2wrXCJdXCIsXCJzcGVjaWFsXCIpfWlmKHgoZSkpcmV0dXJuIHQuc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSksXCJyZWdleHBcIik7aWYoXyhlKSlyZXR1cm4gdC5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSksXCJkYXRlXCIpO2lmKHcoZSkpcmV0dXJuIGgoZSl9dmFyIGMsYj1cIlwiLEE9ITEsVD1bXCJ7XCIsXCJ9XCJdOyhwKGUpJiYoQT0hMCxUPVtcIltcIixcIl1cIl0pLGsoZSkpJiYoYj1cIiBbRnVuY3Rpb25cIisoZS5uYW1lP1wiOiBcIitlLm5hbWU6XCJcIikrXCJdXCIpO3JldHVybiB4KGUpJiYoYj1cIiBcIitSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpLF8oZSkmJihiPVwiIFwiK0RhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwoZSkpLHcoZSkmJihiPVwiIFwiK2goZSkpLDAhPT1vLmxlbmd0aHx8QSYmMCE9ZS5sZW5ndGg/bjwwP3goZSk/dC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSxcInJlZ2V4cFwiKTp0LnN0eWxpemUoXCJbT2JqZWN0XVwiLFwic3BlY2lhbFwiKToodC5zZWVuLnB1c2goZSksYz1BP2Z1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBhPVtdLG89MCxzPWUubGVuZ3RoO288czsrK28pUyhlLFN0cmluZyhvKSk/YS5wdXNoKGYodCxlLHIsbixTdHJpbmcobyksITApKTphLnB1c2goXCJcIik7cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbihpKXtpLm1hdGNoKC9eXFxkKyQvKXx8YS5wdXNoKGYodCxlLHIsbixpLCEwKSl9KSxhfSh0LGUsbixzLG8pOm8ubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBmKHQsZSxuLHMscixBKX0pLHQuc2Vlbi5wb3AoKSxmdW5jdGlvbih0LGUscil7aWYodC5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gMCxlLmluZGV4T2YoXCJcXG5cIik+PTAmJjAsdCtlLnJlcGxhY2UoL1xcdTAwMWJcXFtcXGRcXGQ/bS9nLFwiXCIpLmxlbmd0aCsxfSwwKT42MClyZXR1cm4gclswXSsoXCJcIj09PWU/XCJcIjplK1wiXFxuIFwiKStcIiBcIit0LmpvaW4oXCIsXFxuICBcIikrXCIgXCIrclsxXTtyZXR1cm4gclswXStlK1wiIFwiK3Quam9pbihcIiwgXCIpK1wiIFwiK3JbMV19KGMsYixUKSk6VFswXStiK1RbMV19ZnVuY3Rpb24gaCh0KXtyZXR1cm5cIltcIitFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KStcIl1cIn1mdW5jdGlvbiBmKHQsZSxyLG4saSxhKXt2YXIgbyxzLGw7aWYoKGw9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLGkpfHx7dmFsdWU6ZVtpXX0pLmdldD9zPWwuc2V0P3Quc3R5bGl6ZShcIltHZXR0ZXIvU2V0dGVyXVwiLFwic3BlY2lhbFwiKTp0LnN0eWxpemUoXCJbR2V0dGVyXVwiLFwic3BlY2lhbFwiKTpsLnNldCYmKHM9dC5zdHlsaXplKFwiW1NldHRlcl1cIixcInNwZWNpYWxcIikpLFMobixpKXx8KG89XCJbXCIraStcIl1cIiksc3x8KHQuc2Vlbi5pbmRleE9mKGwudmFsdWUpPDA/KHM9ZyhyKT91KHQsbC52YWx1ZSxudWxsKTp1KHQsbC52YWx1ZSxyLTEpKS5pbmRleE9mKFwiXFxuXCIpPi0xJiYocz1hP3Muc3BsaXQoXCJcXG5cIikubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiICBcIit0fSkuam9pbihcIlxcblwiKS5zdWJzdHIoMik6XCJcXG5cIitzLnNwbGl0KFwiXFxuXCIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cIiAgIFwiK3R9KS5qb2luKFwiXFxuXCIpKTpzPXQuc3R5bGl6ZShcIltDaXJjdWxhcl1cIixcInNwZWNpYWxcIikpLHkobykpe2lmKGEmJmkubWF0Y2goL15cXGQrJC8pKXJldHVybiBzOyhvPUpTT04uc3RyaW5naWZ5KFwiXCIraSkpLm1hdGNoKC9eXCIoW2EtekEtWl9dW2EtekEtWl8wLTldKilcIiQvKT8obz1vLnN1YnN0cigxLG8ubGVuZ3RoLTIpLG89dC5zdHlsaXplKG8sXCJuYW1lXCIpKToobz1vLnJlcGxhY2UoLycvZyxcIlxcXFwnXCIpLnJlcGxhY2UoL1xcXFxcIi9nLCdcIicpLnJlcGxhY2UoLyheXCJ8XCIkKS9nLFwiJ1wiKSxvPXQuc3R5bGl6ZShvLFwic3RyaW5nXCIpKX1yZXR1cm4gbytcIjogXCIrc31mdW5jdGlvbiBwKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfWZ1bmN0aW9uIGQodCl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIGcodCl7cmV0dXJuIG51bGw9PT10fWZ1bmN0aW9uIHYodCl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIHR9ZnVuY3Rpb24gbSh0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdH1mdW5jdGlvbiB5KHQpe3JldHVybiB2b2lkIDA9PT10fWZ1bmN0aW9uIHgodCl7cmV0dXJuIGIodCkmJlwiW29iamVjdCBSZWdFeHBdXCI9PT1BKHQpfWZ1bmN0aW9uIGIodCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHQmJm51bGwhPT10fWZ1bmN0aW9uIF8odCl7cmV0dXJuIGIodCkmJlwiW29iamVjdCBEYXRlXVwiPT09QSh0KX1mdW5jdGlvbiB3KHQpe3JldHVybiBiKHQpJiYoXCJbb2JqZWN0IEVycm9yXVwiPT09QSh0KXx8dCBpbnN0YW5jZW9mIEVycm9yKX1mdW5jdGlvbiBrKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHR9ZnVuY3Rpb24gQSh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIFQodCl7cmV0dXJuIHQ8MTA/XCIwXCIrdC50b1N0cmluZygxMCk6dC50b1N0cmluZygxMCl9ci5kZWJ1Z2xvZz1mdW5jdGlvbih0KXtpZih5KGEpJiYoYT1lLmVudi5OT0RFX0RFQlVHfHxcIlwiKSx0PXQudG9VcHBlckNhc2UoKSwhb1t0XSlpZihuZXcgUmVnRXhwKFwiXFxcXGJcIit0K1wiXFxcXGJcIixcImlcIikudGVzdChhKSl7dmFyIG49ZS5waWQ7b1t0XT1mdW5jdGlvbigpe3ZhciBlPXIuZm9ybWF0LmFwcGx5KHIsYXJndW1lbnRzKTtjb25zb2xlLmVycm9yKFwiJXMgJWQ6ICVzXCIsdCxuLGUpfX1lbHNlIG9bdF09ZnVuY3Rpb24oKXt9O3JldHVybiBvW3RdfSxyLmluc3BlY3Q9cyxzLmNvbG9ycz17Ym9sZDpbMSwyMl0saXRhbGljOlszLDIzXSx1bmRlcmxpbmU6WzQsMjRdLGludmVyc2U6WzcsMjddLHdoaXRlOlszNywzOV0sZ3JleTpbOTAsMzldLGJsYWNrOlszMCwzOV0sYmx1ZTpbMzQsMzldLGN5YW46WzM2LDM5XSxncmVlbjpbMzIsMzldLG1hZ2VudGE6WzM1LDM5XSxyZWQ6WzMxLDM5XSx5ZWxsb3c6WzMzLDM5XX0scy5zdHlsZXM9e3NwZWNpYWw6XCJjeWFuXCIsbnVtYmVyOlwieWVsbG93XCIsYm9vbGVhbjpcInllbGxvd1wiLHVuZGVmaW5lZDpcImdyZXlcIixudWxsOlwiYm9sZFwiLHN0cmluZzpcImdyZWVuXCIsZGF0ZTpcIm1hZ2VudGFcIixyZWdleHA6XCJyZWRcIn0sci5pc0FycmF5PXAsci5pc0Jvb2xlYW49ZCxyLmlzTnVsbD1nLHIuaXNOdWxsT3JVbmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXR9LHIuaXNOdW1iZXI9dixyLmlzU3RyaW5nPW0sci5pc1N5bWJvbD1mdW5jdGlvbih0KXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgdH0sci5pc1VuZGVmaW5lZD15LHIuaXNSZWdFeHA9eCxyLmlzT2JqZWN0PWIsci5pc0RhdGU9XyxyLmlzRXJyb3I9dyxyLmlzRnVuY3Rpb249ayxyLmlzUHJpbWl0aXZlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dHx8XCJib29sZWFuXCI9PXR5cGVvZiB0fHxcIm51bWJlclwiPT10eXBlb2YgdHx8XCJzdHJpbmdcIj09dHlwZW9mIHR8fFwic3ltYm9sXCI9PXR5cGVvZiB0fHxcInVuZGVmaW5lZFwiPT10eXBlb2YgdH0sci5pc0J1ZmZlcj10KFwiLi9zdXBwb3J0L2lzQnVmZmVyXCIpO3ZhciBNPVtcIkphblwiLFwiRmViXCIsXCJNYXJcIixcIkFwclwiLFwiTWF5XCIsXCJKdW5cIixcIkp1bFwiLFwiQXVnXCIsXCJTZXBcIixcIk9jdFwiLFwiTm92XCIsXCJEZWNcIl07ZnVuY3Rpb24gUyh0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX1yLmxvZz1mdW5jdGlvbigpe3ZhciB0LGU7Y29uc29sZS5sb2coXCIlcyAtICVzXCIsKHQ9bmV3IERhdGUsZT1bVCh0LmdldEhvdXJzKCkpLFQodC5nZXRNaW51dGVzKCkpLFQodC5nZXRTZWNvbmRzKCkpXS5qb2luKFwiOlwiKSxbdC5nZXREYXRlKCksTVt0LmdldE1vbnRoKCldLGVdLmpvaW4oXCIgXCIpKSxyLmZvcm1hdC5hcHBseShyLGFyZ3VtZW50cykpfSxyLmluaGVyaXRzPXQoXCJpbmhlcml0c1wiKSxyLl9leHRlbmQ9ZnVuY3Rpb24odCxlKXtpZighZXx8IWIoZSkpcmV0dXJuIHQ7Zm9yKHZhciByPU9iamVjdC5rZXlzKGUpLG49ci5sZW5ndGg7bi0tOyl0W3Jbbl1dPWVbcltuXV07cmV0dXJuIHR9fSkuY2FsbCh0aGlzLHQoXCJfcHJvY2Vzc1wiKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se1wiLi9zdXBwb3J0L2lzQnVmZmVyXCI6NjEsX3Byb2Nlc3M6NDc1LGluaGVyaXRzOjYwfV0sNjM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGF0b2IodCl9fSx7fV0sNjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5sZW5ndGgsYT1uZXcgQXJyYXkocisxKSxvPTA7bzxyOysrbyl7Zm9yKHZhciBzPW5ldyBBcnJheShyKzEpLGw9MDtsPD1yOysrbClzW2xdPXRbbF1bb107YVtvXT1zfWFbcl09bmV3IEFycmF5KHIrMSk7Zm9yKHZhciBvPTA7bzw9cjsrK28pYVtyXVtvXT0xO2Zvcih2YXIgYz1uZXcgQXJyYXkocisxKSxvPTA7bzxyOysrbyljW29dPWVbb107Y1tyXT0xO3ZhciB1PW4oYSxjKSxoPWkodVtyKzFdKTswPT09aCYmKGg9MSk7Zm9yKHZhciBmPW5ldyBBcnJheShyKzEpLG89MDtvPD1yOysrbylmW29dPWkodVtvXSkvaDtyZXR1cm4gZn07dmFyIG49dChcInJvYnVzdC1saW5lYXItc29sdmVcIik7ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDsrK3IpZSs9dFtyXTtyZXR1cm4gZX19LHtcInJvYnVzdC1saW5lYXItc29sdmVcIjo0OTR9XSw2NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IuYnl0ZUxlbmd0aD1mdW5jdGlvbih0KXt2YXIgZT1jKHQpLHI9ZVswXSxuPWVbMV07cmV0dXJuIDMqKHIrbikvNC1ufSxyLnRvQnl0ZUFycmF5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPWModCksbj1yWzBdLG89clsxXSxzPW5ldyBhKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMyooZStyKS80LXJ9KDAsbixvKSksbD0wLHU9bz4wP24tNDpuLGg9MDtoPHU7aCs9NCllPWlbdC5jaGFyQ29kZUF0KGgpXTw8MTh8aVt0LmNoYXJDb2RlQXQoaCsxKV08PDEyfGlbdC5jaGFyQ29kZUF0KGgrMildPDw2fGlbdC5jaGFyQ29kZUF0KGgrMyldLHNbbCsrXT1lPj4xNiYyNTUsc1tsKytdPWU+PjgmMjU1LHNbbCsrXT0yNTUmZTsyPT09byYmKGU9aVt0LmNoYXJDb2RlQXQoaCldPDwyfGlbdC5jaGFyQ29kZUF0KGgrMSldPj40LHNbbCsrXT0yNTUmZSk7MT09PW8mJihlPWlbdC5jaGFyQ29kZUF0KGgpXTw8MTB8aVt0LmNoYXJDb2RlQXQoaCsxKV08PDR8aVt0LmNoYXJDb2RlQXQoaCsyKV0+PjIsc1tsKytdPWU+PjgmMjU1LHNbbCsrXT0yNTUmZSk7cmV0dXJuIHN9LHIuZnJvbUJ5dGVBcnJheT1mdW5jdGlvbih0KXtmb3IodmFyIGUscj10Lmxlbmd0aCxpPXIlMyxhPVtdLG89MCxzPXItaTtvPHM7bys9MTYzODMpYS5wdXNoKHUodCxvLG8rMTYzODM+cz9zOm8rMTYzODMpKTsxPT09aT8oZT10W3ItMV0sYS5wdXNoKG5bZT4+Ml0rbltlPDw0JjYzXStcIj09XCIpKToyPT09aSYmKGU9KHRbci0yXTw8OCkrdFtyLTFdLGEucHVzaChuW2U+PjEwXStuW2U+PjQmNjNdK25bZTw8MiY2M10rXCI9XCIpKTtyZXR1cm4gYS5qb2luKFwiXCIpfTtmb3IodmFyIG49W10saT1bXSxhPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksbz1cIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky9cIixzPTAsbD1vLmxlbmd0aDtzPGw7KytzKW5bc109b1tzXSxpW28uY2hhckNvZGVBdChzKV09cztmdW5jdGlvbiBjKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGUlND4wKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDRcIik7dmFyIHI9dC5pbmRleE9mKFwiPVwiKTtyZXR1cm4tMT09PXImJihyPWUpLFtyLHI9PT1lPzA6NC1yJTRdfWZ1bmN0aW9uIHUodCxlLHIpe2Zvcih2YXIgaSxhLG89W10scz1lO3M8cjtzKz0zKWk9KHRbc108PDE2JjE2NzExNjgwKSsodFtzKzFdPDw4JjY1MjgwKSsoMjU1JnRbcysyXSksby5wdXNoKG5bKGE9aSk+PjE4JjYzXStuW2E+PjEyJjYzXStuW2E+PjYmNjNdK25bNjMmYV0pO3JldHVybiBvLmpvaW4oXCJcIil9aVtcIi1cIi5jaGFyQ29kZUF0KDApXT02MixpW1wiX1wiLmNoYXJDb2RlQXQoMCldPTYzfSx7fV0sNjY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9saWIvcmF0aW9uYWxpemVcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odFswXS5tdWwoZVsxXSkuYWRkKGVbMF0ubXVsKHRbMV0pKSx0WzFdLm11bChlWzFdKSl9fSx7XCIuL2xpYi9yYXRpb25hbGl6ZVwiOjc2fV0sNjc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXS5tdWwoZVsxXSkuY21wKGVbMF0ubXVsKHRbMV0pKX19LHt9XSw2ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2xpYi9yYXRpb25hbGl6ZVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0WzBdLm11bChlWzFdKSx0WzFdLm11bChlWzBdKSl9fSx7XCIuL2xpYi9yYXRpb25hbGl6ZVwiOjc2fV0sNjk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9pcy1yYXRcIiksaT10KFwiLi9saWIvaXMtYm5cIiksYT10KFwiLi9saWIvbnVtLXRvLWJuXCIpLG89dChcIi4vbGliL3N0ci10by1iblwiKSxzPXQoXCIuL2xpYi9yYXRpb25hbGl6ZVwiKSxsPXQoXCIuL2RpdlwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24gdChlLHIpe2lmKG4oZSkpcmV0dXJuIHI/bChlLHQocikpOltlWzBdLmNsb25lKCksZVsxXS5jbG9uZSgpXTt2YXIgYz0wO3ZhciB1LGg7aWYoaShlKSl1PWUuY2xvbmUoKTtlbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXU9byhlKTtlbHNle2lmKDA9PT1lKXJldHVyblthKDApLGEoMSldO2lmKGU9PT1NYXRoLmZsb29yKGUpKXU9YShlKTtlbHNle2Zvcig7ZSE9PU1hdGguZmxvb3IoZSk7KWUqPU1hdGgucG93KDIsMjU2KSxjLT0yNTY7dT1hKGUpfX1pZihuKHIpKXUubXVsKHJbMV0pLGg9clswXS5jbG9uZSgpO2Vsc2UgaWYoaShyKSloPXIuY2xvbmUoKTtlbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiByKWg9byhyKTtlbHNlIGlmKHIpaWYocj09PU1hdGguZmxvb3IocikpaD1hKHIpO2Vsc2V7Zm9yKDtyIT09TWF0aC5mbG9vcihyKTspcio9TWF0aC5wb3coMiwyNTYpLGMrPTI1NjtoPWEocil9ZWxzZSBoPWEoMSk7Yz4wP3U9dS51c2hsbihjKTpjPDAmJihoPWgudXNobG4oLWMpKTtyZXR1cm4gcyh1LGgpfX0se1wiLi9kaXZcIjo2OCxcIi4vaXMtcmF0XCI6NzAsXCIuL2xpYi9pcy1iblwiOjc0LFwiLi9saWIvbnVtLXRvLWJuXCI6NzUsXCIuL2xpYi9yYXRpb25hbGl6ZVwiOjc2LFwiLi9saWIvc3RyLXRvLWJuXCI6Nzd9XSw3MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2xpYi9pcy1iblwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJjI9PT10Lmxlbmd0aCYmbih0WzBdKSYmbih0WzFdKX19LHtcIi4vbGliL2lzLWJuXCI6NzR9XSw3MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJibi5qc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY21wKG5ldyBuKDApKX19LHtcImJuLmpzXCI6ODV9XSw3MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2JuLXNpZ25cIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLHI9dC53b3JkcyxpPTA7aWYoMT09PWUpaT1yWzBdO2Vsc2UgaWYoMj09PWUpaT1yWzBdKzY3MTA4ODY0KnJbMV07ZWxzZSBmb3IodmFyIGE9MDthPGU7YSsrKXt2YXIgbz1yW2FdO2krPW8qTWF0aC5wb3coNjcxMDg4NjQsYSl9cmV0dXJuIG4odCkqaX19LHtcIi4vYm4tc2lnblwiOjcxfV0sNzM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZG91YmxlLWJpdHNcIiksaT10KFwiYml0LXR3aWRkbGVcIikuY291bnRUcmFpbGluZ1plcm9zO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1pKG4ubG8odCkpO2lmKGU8MzIpcmV0dXJuIGU7dmFyIHI9aShuLmhpKHQpKTtpZihyPjIwKXJldHVybiA1MjtyZXR1cm4gciszMn19LHtcImJpdC10d2lkZGxlXCI6ODMsXCJkb3VibGUtYml0c1wiOjE1OX1dLDc0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dChcImJuLmpzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmXCJvYmplY3RcIj09dHlwZW9mIHQmJkJvb2xlYW4odC53b3Jkcyl9fSx7XCJibi5qc1wiOjg1fV0sNzU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiYm4uanNcIiksaT10KFwiZG91YmxlLWJpdHNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWkuZXhwb25lbnQodCk7cmV0dXJuIGU8NTI/bmV3IG4odCk6bmV3IG4odCpNYXRoLnBvdygyLDUyLWUpKS51c2hsbihlLTUyKX19LHtcImJuLmpzXCI6ODUsXCJkb3VibGUtYml0c1wiOjE1OX1dLDc2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vbnVtLXRvLWJuXCIpLGk9dChcIi4vYm4tc2lnblwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1pKHQpLGE9aShlKTtpZigwPT09cilyZXR1cm5bbigwKSxuKDEpXTtpZigwPT09YSlyZXR1cm5bbigwKSxuKDApXTthPDAmJih0PXQubmVnKCksZT1lLm5lZygpKTt2YXIgbz10LmdjZChlKTtpZihvLmNtcG4oMSkpcmV0dXJuW3QuZGl2KG8pLGUuZGl2KG8pXTtyZXR1cm5bdCxlXX19LHtcIi4vYm4tc2lnblwiOjcxLFwiLi9udW0tdG8tYm5cIjo3NX1dLDc3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImJuLmpzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG4odCl9fSx7XCJibi5qc1wiOjg1fV0sNzg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9saWIvcmF0aW9uYWxpemVcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odFswXS5tdWwoZVswXSksdFsxXS5tdWwoZVsxXSkpfX0se1wiLi9saWIvcmF0aW9uYWxpemVcIjo3Nn1dLDc5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vbGliL2JuLXNpZ25cIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRbMF0pKm4odFsxXSl9fSx7XCIuL2xpYi9ibi1zaWduXCI6NzF9XSw4MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2xpYi9yYXRpb25hbGl6ZVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0WzBdLm11bChlWzFdKS5zdWIodFsxXS5tdWwoZVswXSkpLHRbMV0ubXVsKGVbMV0pKX19LHtcIi4vbGliL3JhdGlvbmFsaXplXCI6NzZ9XSw4MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2xpYi9ibi10by1udW1cIiksaT10KFwiLi9saWIvY3R6XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXTtpZigwPT09ZS5jbXBuKDApKXJldHVybiAwO3ZhciBhPWUuYWJzKCkuZGl2bW9kKHIuYWJzKCkpLG89YS5kaXYscz1uKG8pLGw9YS5tb2QsYz1lLm5lZ2F0aXZlIT09ci5uZWdhdGl2ZT8tMToxO2lmKDA9PT1sLmNtcG4oMCkpcmV0dXJuIGMqcztpZihzKXt2YXIgdT1pKHMpKzQsaD1uKGwudXNobG4odSkuZGl2Um91bmQocikpO3JldHVybiBjKihzK2gqTWF0aC5wb3coMiwtdSkpfXZhciBmPXIuYml0TGVuZ3RoKCktbC5iaXRMZW5ndGgoKSs1MyxoPW4obC51c2hsbihmKS5kaXZSb3VuZChyKSk7cmV0dXJuIGY8MTAyMz9jKmgqTWF0aC5wb3coMiwtZik6KGgqPU1hdGgucG93KDIsLTEwMjMpLGMqaCpNYXRoLnBvdygyLDEwMjMtZikpfX0se1wiLi9saWIvYm4tdG8tbnVtXCI6NzIsXCIuL2xpYi9jdHpcIjo3M31dLDgyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUscixuLGksYSl7dmFyIG89W1wiZnVuY3Rpb24gXCIsdCxcIihhLGwsaCxcIixuLmpvaW4oXCIsXCIpLFwiKXtcIixhP1wiXCI6XCJ2YXIgaT1cIixyP1wibC0xXCI6XCJoKzFcIixcIjt3aGlsZShsPD1oKXt2YXIgbT0obCtoKT4+PjEseD1hXCIsaT9cIi5nZXQobSlcIjpcIlttXVwiXTtyZXR1cm4gYT9lLmluZGV4T2YoXCJjXCIpPDA/by5wdXNoKFwiO2lmKHg9PT15KXtyZXR1cm4gbX1lbHNlIGlmKHg8PXkpe1wiKTpvLnB1c2goXCI7dmFyIHA9Yyh4LHkpO2lmKHA9PT0wKXtyZXR1cm4gbX1lbHNlIGlmKHA8PTApe1wiKTpvLnB1c2goXCI7aWYoXCIsZSxcIil7aT1tO1wiKSxyP28ucHVzaChcImw9bSsxfWVsc2V7aD1tLTF9XCIpOm8ucHVzaChcImg9bS0xfWVsc2V7bD1tKzF9XCIpLG8ucHVzaChcIn1cIiksYT9vLnB1c2goXCJyZXR1cm4gLTF9O1wiKTpvLnB1c2goXCJyZXR1cm4gaX07XCIpLG8uam9pbihcIlwiKX1mdW5jdGlvbiBpKHQsZSxyLGkpe3JldHVybiBuZXcgRnVuY3Rpb24oW24oXCJBXCIsXCJ4XCIrdCtcInlcIixlLFtcInlcIl0sITEsaSksbihcIkJcIixcInhcIit0K1wieVwiLGUsW1wieVwiXSwhMCxpKSxuKFwiUFwiLFwiYyh4LHkpXCIrdCtcIjBcIixlLFtcInlcIixcImNcIl0sITEsaSksbihcIlFcIixcImMoeCx5KVwiK3QrXCIwXCIsZSxbXCJ5XCIsXCJjXCJdLCEwLGkpLFwiZnVuY3Rpb24gZGlzcGF0Y2hCc2VhcmNoXCIscixcIihhLHksYyxsLGgpe2lmKGEuc2hhcGUpe2lmKHR5cGVvZihjKT09PSdmdW5jdGlvbicpe3JldHVybiBRKGEsKGw9PT11bmRlZmluZWQpPzA6bHwwLChoPT09dW5kZWZpbmVkKT9hLnNoYXBlWzBdLTE6aHwwLHksYyl9ZWxzZXtyZXR1cm4gQihhLChjPT09dW5kZWZpbmVkKT8wOmN8MCwobD09PXVuZGVmaW5lZCk/YS5zaGFwZVswXS0xOmx8MCx5KX19ZWxzZXtpZih0eXBlb2YoYyk9PT0nZnVuY3Rpb24nKXtyZXR1cm4gUChhLChsPT09dW5kZWZpbmVkKT8wOmx8MCwoaD09PXVuZGVmaW5lZCk/YS5sZW5ndGgtMTpofDAseSxjKX1lbHNle3JldHVybiBBKGEsKGM9PT11bmRlZmluZWQpPzA6Y3wwLChsPT09dW5kZWZpbmVkKT9hLmxlbmd0aC0xOmx8MCx5KX19fXJldHVybiBkaXNwYXRjaEJzZWFyY2hcIixyXS5qb2luKFwiXCIpKSgpfWUuZXhwb3J0cz17Z2U6aShcIj49XCIsITEsXCJHRVwiKSxndDppKFwiPlwiLCExLFwiR1RcIiksbHQ6aShcIjxcIiwhMCxcIkxUXCIpLGxlOmkoXCI8PVwiLCEwLFwiTEVcIiksZXE6aShcIi1cIiwhMCxcIkVRXCIsITApfX0se31dLDgzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXt2YXIgZT0zMjtyZXR1cm4odCY9LXQpJiZlLS0sNjU1MzUmdCYmKGUtPTE2KSwxNjcxMTkzNSZ0JiYoZS09OCksMjUyNjQ1MTM1JnQmJihlLT00KSw4NTg5OTM0NTkmdCYmKGUtPTIpLDE0MzE2NTU3NjUmdCYmKGUtPTEpLGV9ci5JTlRfQklUUz0zMixyLklOVF9NQVg9MjE0NzQ4MzY0NyxyLklOVF9NSU49LTE8PDMxLHIuc2lnbj1mdW5jdGlvbih0KXtyZXR1cm4odD4wKS0odDwwKX0sci5hYnM9ZnVuY3Rpb24odCl7dmFyIGU9dD4+MzE7cmV0dXJuKHReZSktZX0sci5taW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gZV4odF5lKSYtKHQ8ZSl9LHIubWF4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHReKHReZSkmLSh0PGUpfSxyLmlzUG93Mj1mdW5jdGlvbih0KXtyZXR1cm4hKHQmdC0xfHwhdCl9LHIubG9nMj1mdW5jdGlvbih0KXt2YXIgZSxyO3JldHVybiBlPSh0PjY1NTM1KTw8NCxlfD1yPSgodD4+Pj1lKT4yNTUpPDwzLGV8PXI9KCh0Pj4+PXIpPjE1KTw8MiwoZXw9cj0oKHQ+Pj49cik+Myk8PDEpfCh0Pj4+PXIpPj4xfSxyLmxvZzEwPWZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xZTk/OTp0Pj0xZTg/ODp0Pj0xZTc/Nzp0Pj0xZTY/Njp0Pj0xZTU/NTp0Pj0xZTQ/NDp0Pj0xZTM/Mzp0Pj0xMDA/Mjp0Pj0xMD8xOjB9LHIucG9wQ291bnQ9ZnVuY3Rpb24odCl7cmV0dXJuIDE2ODQzMDA5KigodD0oODU4OTkzNDU5Jih0LT10Pj4+MSYxNDMxNjU1NzY1KSkrKHQ+Pj4yJjg1ODk5MzQ1OSkpKyh0Pj4+NCkmMjUyNjQ1MTM1KT4+PjI0fSxyLmNvdW50VHJhaWxpbmdaZXJvcz1uLHIubmV4dFBvdzI9ZnVuY3Rpb24odCl7cmV0dXJuIHQrPTA9PT10LC0tdCx0fD10Pj4+MSx0fD10Pj4+Mix0fD10Pj4+NCx0fD10Pj4+OCwodHw9dD4+PjE2KSsxfSxyLnByZXZQb3cyPWZ1bmN0aW9uKHQpe3JldHVybiB0fD10Pj4+MSx0fD10Pj4+Mix0fD10Pj4+NCx0fD10Pj4+OCwodHw9dD4+PjE2KS0odD4+PjEpfSxyLnBhcml0eT1mdW5jdGlvbih0KXtyZXR1cm4gdF49dD4+PjE2LHRePXQ+Pj44LHRePXQ+Pj40LDI3MDMwPj4+KHQmPTE1KSYxfTt2YXIgaT1uZXcgQXJyYXkoMjU2KTshZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTwyNTY7KytlKXt2YXIgcj1lLG49ZSxpPTc7Zm9yKHI+Pj49MTtyO3I+Pj49MSluPDw9MSxufD0xJnIsLS1pO3RbZV09bjw8aSYyNTV9fShpKSxyLnJldmVyc2U9ZnVuY3Rpb24odCl7cmV0dXJuIGlbMjU1JnRdPDwyNHxpW3Q+Pj44JjI1NV08PDE2fGlbdD4+PjE2JjI1NV08PDh8aVt0Pj4+MjQmMjU1XX0sci5pbnRlcmxlYXZlMj1mdW5jdGlvbih0LGUpe3JldHVybih0PTE0MzE2NTU3NjUmKCh0PTg1ODk5MzQ1OSYoKHQ9MjUyNjQ1MTM1JigodD0xNjcxMTkzNSYoKHQmPTY1NTM1KXx0PDw4KSl8dDw8NCkpfHQ8PDIpKXx0PDwxKSl8KGU9MTQzMTY1NTc2NSYoKGU9ODU4OTkzNDU5JigoZT0yNTI2NDUxMzUmKChlPTE2NzExOTM1JigoZSY9NjU1MzUpfGU8PDgpKXxlPDw0KSl8ZTw8MikpfGU8PDEpKTw8MX0sci5kZWludGVybGVhdmUyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQ9NjU1MzUmKCh0PTE2NzExOTM1JigodD0yNTI2NDUxMzUmKCh0PTg1ODk5MzQ1OSYoKHQ9dD4+PmUmMTQzMTY1NTc2NSl8dD4+PjEpKXx0Pj4+MikpfHQ+Pj40KSl8dD4+PjE2KSk8PDE2Pj4xNn0sci5pbnRlcmxlYXZlMz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9MTIyNzEzMzUxMyYoKHQ9MzI3MjM1NjAzNSYoKHQ9MjUxNzE5Njk1JigodD00Mjc4MTkwMzM1JigodCY9MTAyMyl8dDw8MTYpKXx0PDw4KSl8dDw8NCkpfHQ8PDIpLCh0fD0oZT0xMjI3MTMzNTEzJigoZT0zMjcyMzU2MDM1JigoZT0yNTE3MTk2OTUmKChlPTQyNzgxOTAzMzUmKChlJj0xMDIzKXxlPDwxNikpfGU8PDgpKXxlPDw0KSl8ZTw8MikpPDwxKXwocj0xMjI3MTMzNTEzJigocj0zMjcyMzU2MDM1Jigocj0yNTE3MTk2OTUmKChyPTQyNzgxOTAzMzUmKChyJj0xMDIzKXxyPDwxNikpfHI8PDgpKXxyPDw0KSl8cjw8MikpPDwyfSxyLmRlaW50ZXJsZWF2ZTM9ZnVuY3Rpb24odCxlKXtyZXR1cm4odD0xMDIzJigodD00Mjc4MTkwMzM1JigodD0yNTE3MTk2OTUmKCh0PTMyNzIzNTYwMzUmKCh0PXQ+Pj5lJjEyMjcxMzM1MTMpfHQ+Pj4yKSl8dD4+PjQpKXx0Pj4+OCkpfHQ+Pj4xNikpPDwyMj4+MjJ9LHIubmV4dENvbWJpbmF0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXR8dC0xO3JldHVybiBlKzF8KH5lJi1+ZSktMT4+Pm4odCkrMX19LHt9XSw4NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJjbGFtcFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlfHwoZT17fSk7dmFyIHIsbyxzLGwsYyx1LGgsZixwLGQsZyx2PW51bGw9PWUuY3V0b2ZmPy4yNTplLmN1dG9mZixtPW51bGw9PWUucmFkaXVzPzg6ZS5yYWRpdXMseT1lLmNoYW5uZWx8fDA7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHQpfHxBcnJheS5pc0FycmF5KHQpKXtpZighZS53aWR0aHx8IWUuaGVpZ2h0KXRocm93IEVycm9yKFwiRm9yIHJhdyBkYXRhIHdpZHRoIGFuZCBoZWlnaHQgc2hvdWxkIGJlIHByb3ZpZGVkIGJ5IG9wdGlvbnNcIik7cj1lLndpZHRoLG89ZS5oZWlnaHQsbD10LHU9ZS5zdHJpZGU/ZS5zdHJpZGU6TWF0aC5mbG9vcih0Lmxlbmd0aC9yL28pfWVsc2Ugd2luZG93LkhUTUxDYW52YXNFbGVtZW50JiZ0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxDYW52YXNFbGVtZW50PyhoPShmPXQpLmdldENvbnRleHQoXCIyZFwiKSxyPWYud2lkdGgsbz1mLmhlaWdodCxwPWguZ2V0SW1hZ2VEYXRhKDAsMCxyLG8pLGw9cC5kYXRhLHU9NCk6d2luZG93LkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCYmdCBpbnN0YW5jZW9mIHdpbmRvdy5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ/KGY9dC5jYW52YXMsaD10LHI9Zi53aWR0aCxvPWYuaGVpZ2h0LHA9aC5nZXRJbWFnZURhdGEoMCwwLHIsbyksbD1wLmRhdGEsdT00KTp3aW5kb3cuSW1hZ2VEYXRhJiZ0IGluc3RhbmNlb2Ygd2luZG93LkltYWdlRGF0YSYmKHA9dCxyPXQud2lkdGgsbz10LmhlaWdodCxsPXAuZGF0YSx1PTQpO2lmKHM9TWF0aC5tYXgocixvKSx3aW5kb3cuVWludDhDbGFtcGVkQXJyYXkmJmwgaW5zdGFuY2VvZiB3aW5kb3cuVWludDhDbGFtcGVkQXJyYXl8fHdpbmRvdy5VaW50OEFycmF5JiZsIGluc3RhbmNlb2Ygd2luZG93LlVpbnQ4QXJyYXkpZm9yKGM9bCxsPUFycmF5KHIqbyksZD0wLGc9Yy5sZW5ndGg7ZDxnO2QrKylsW2RdPWNbZCp1K3ldLzI1NTtlbHNlIGlmKDEhPT11KXRocm93IEVycm9yKFwiUmF3IGRhdGEgY2FuIGhhdmUgb25seSAxIHZhbHVlIHBlciBwaXhlbFwiKTt2YXIgeD1BcnJheShyKm8pLGI9QXJyYXkocipvKSxfPUFycmF5KHMpLHc9QXJyYXkocyksaz1BcnJheShzKzEpLEE9QXJyYXkocyk7Zm9yKGQ9MCxnPXIqbztkPGc7ZCsrKXt2YXIgVD1sW2RdO3hbZF09MT09PVQ/MDowPT09VD9pOk1hdGgucG93KE1hdGgubWF4KDAsLjUtVCksMiksYltkXT0xPT09VD9pOjA9PT1UPzA6TWF0aC5wb3coTWF0aC5tYXgoMCxULS41KSwyKX1hKHgscixvLF8sdyxBLGspLGEoYixyLG8sXyx3LEEsayk7dmFyIE09d2luZG93LkZsb2F0MzJBcnJheT9uZXcgRmxvYXQzMkFycmF5KHIqbyk6bmV3IEFycmF5KHIqbyk7Zm9yKGQ9MCxnPXIqbztkPGc7ZCsrKU1bZF09bigxLSgoeFtkXS1iW2RdKS9tK3YpLDAsMSk7cmV0dXJuIE19O3ZhciBpPTFlMjA7ZnVuY3Rpb24gYSh0LGUscixuLGksYSxzKXtmb3IodmFyIGw9MDtsPGU7bCsrKXtmb3IodmFyIGM9MDtjPHI7YysrKW5bY109dFtjKmUrbF07Zm9yKG8obixpLGEscyxyKSxjPTA7YzxyO2MrKyl0W2MqZStsXT1pW2NdfWZvcihjPTA7YzxyO2MrKyl7Zm9yKGw9MDtsPGU7bCsrKW5bbF09dFtjKmUrbF07Zm9yKG8obixpLGEscyxlKSxsPTA7bDxlO2wrKyl0W2MqZStsXT1NYXRoLnNxcnQoaVtsXSl9fWZ1bmN0aW9uIG8odCxlLHIsbixhKXtyWzBdPTAsblswXT0taSxuWzFdPStpO2Zvcih2YXIgbz0xLHM9MDtvPGE7bysrKXtmb3IodmFyIGw9KHRbb10rbypvLSh0W3Jbc11dK3Jbc10qcltzXSkpLygyKm8tMipyW3NdKTtsPD1uW3NdOylzLS0sbD0odFtvXStvKm8tKHRbcltzXV0rcltzXSpyW3NdKSkvKDIqby0yKnJbc10pO3JbKytzXT1vLG5bc109bCxuW3MrMV09K2l9Zm9yKG89MCxzPTA7bzxhO28rKyl7Zm9yKDtuW3MrMV08bzspcysrO2Vbb109KG8tcltzXSkqKG8tcltzXSkrdFtyW3NdXX19fSx7Y2xhbXA6MTA2fV0sODU6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24oZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fFwiQXNzZXJ0aW9uIGZhaWxlZFwiKX1mdW5jdGlvbiBpKHQsZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH1mdW5jdGlvbiBhKHQsZSxyKXtpZihhLmlzQk4odCkpcmV0dXJuIHQ7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PXQmJihcImxlXCIhPT1lJiZcImJlXCIhPT1lfHwocj1lLGU9MTApLHRoaXMuX2luaXQodHx8MCxlfHwxMCxyfHxcImJlXCIpKX12YXIgbztcIm9iamVjdFwiPT10eXBlb2YgZT9lLmV4cG9ydHM9YTpyLkJOPWEsYS5CTj1hLGEud29yZFNpemU9MjY7dHJ5e289dChcImJ1ZmZlclwiKS5CdWZmZXJ9Y2F0Y2godCl7fWZ1bmN0aW9uIHModCxlLHIpe2Zvcih2YXIgbj0wLGk9TWF0aC5taW4odC5sZW5ndGgsciksYT1lO2E8aTthKyspe3ZhciBvPXQuY2hhckNvZGVBdChhKS00ODtuPDw9NCxufD1vPj00OSYmbzw9NTQ/by00OSsxMDpvPj0xNyYmbzw9MjI/by0xNysxMDoxNSZvfXJldHVybiBufWZ1bmN0aW9uIGwodCxlLHIsbil7Zm9yKHZhciBpPTAsYT1NYXRoLm1pbih0Lmxlbmd0aCxyKSxvPWU7bzxhO28rKyl7dmFyIHM9dC5jaGFyQ29kZUF0KG8pLTQ4O2kqPW4saSs9cz49NDk/cy00OSsxMDpzPj0xNz9zLTE3KzEwOnN9cmV0dXJuIGl9YS5pc0JOPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgYXx8bnVsbCE9PXQmJlwib2JqZWN0XCI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yLndvcmRTaXplPT09YS53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheSh0LndvcmRzKX0sYS5tYXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jbXAoZSk+MD90OmV9LGEubWluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY21wKGUpPDA/dDplfSxhLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0LGUscil7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIodCxlLHIpO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0QXJyYXkodCxlLHIpO1wiaGV4XCI9PT1lJiYoZT0xNiksbihlPT09KDB8ZSkmJmU+PTImJmU8PTM2KTt2YXIgaT0wO1wiLVwiPT09KHQ9dC50b1N0cmluZygpLnJlcGxhY2UoL1xccysvZyxcIlwiKSlbMF0mJmkrKywxNj09PWU/dGhpcy5fcGFyc2VIZXgodCxpKTp0aGlzLl9wYXJzZUJhc2UodCxlLGkpLFwiLVwiPT09dFswXSYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpLFwibGVcIj09PXImJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxlLHIpfSxhLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbih0LGUscil7dDwwJiYodGhpcy5uZWdhdGl2ZT0xLHQ9LXQpLHQ8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnRdLHRoaXMubGVuZ3RoPTEpOnQ8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdCx0LzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToobih0PDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnQsdC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSxcImxlXCI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKX0sYS5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbih0LGUscil7aWYobihcIm51bWJlclwiPT10eXBlb2YgdC5sZW5ndGgpLHQubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHQubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPTA7dmFyIGEsbyxzPTA7aWYoXCJiZVwiPT09cilmb3IoaT10Lmxlbmd0aC0xLGE9MDtpPj0wO2ktPTMpbz10W2ldfHRbaS0xXTw8OHx0W2ktMl08PDE2LHRoaXMud29yZHNbYV18PW88PHMmNjcxMDg4NjMsdGhpcy53b3Jkc1thKzFdPW8+Pj4yNi1zJjY3MTA4ODYzLChzKz0yNCk+PTI2JiYocy09MjYsYSsrKTtlbHNlIGlmKFwibGVcIj09PXIpZm9yKGk9MCxhPTA7aTx0Lmxlbmd0aDtpKz0zKW89dFtpXXx0W2krMV08PDh8dFtpKzJdPDwxNix0aGlzLndvcmRzW2FdfD1vPDxzJjY3MTA4ODYzLHRoaXMud29yZHNbYSsxXT1vPj4+MjYtcyY2NzEwODg2Mywocys9MjQpPj0yNiYmKHMtPTI2LGErKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHQsZSl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKCh0Lmxlbmd0aC1lKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciByPTA7cjx0aGlzLmxlbmd0aDtyKyspdGhpcy53b3Jkc1tyXT0wO3ZhciBuLGksYT0wO2ZvcihyPXQubGVuZ3RoLTYsbj0wO3I+PWU7ci09NilpPXModCxyLHIrNiksdGhpcy53b3Jkc1tuXXw9aTw8YSY2NzEwODg2Myx0aGlzLndvcmRzW24rMV18PWk+Pj4yNi1hJjQxOTQzMDMsKGErPTI0KT49MjYmJihhLT0yNixuKyspO3IrNiE9PWUmJihpPXModCxlLHIrNiksdGhpcy53b3Jkc1tuXXw9aTw8YSY2NzEwODg2Myx0aGlzLndvcmRzW24rMV18PWk+Pj4yNi1hJjQxOTQzMDMpLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbih0LGUscil7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIG49MCxpPTE7aTw9NjcxMDg4NjM7aSo9ZSluKys7bi0tLGk9aS9lfDA7Zm9yKHZhciBhPXQubGVuZ3RoLXIsbz1hJW4scz1NYXRoLm1pbihhLGEtbykrcixjPTAsdT1yO3U8czt1Kz1uKWM9bCh0LHUsdStuLGUpLHRoaXMuaW11bG4oaSksdGhpcy53b3Jkc1swXStjPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWM6dGhpcy5faWFkZG4oYyk7aWYoMCE9PW8pe3ZhciBoPTE7Zm9yKGM9bCh0LHUsdC5sZW5ndGgsZSksdT0wO3U8bzt1KyspaCo9ZTt0aGlzLmltdWxuKGgpLHRoaXMud29yZHNbMF0rYzw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1jOnRoaXMuX2lhZGRuKGMpfX0sYS5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXt0LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aDtlKyspdC53b3Jkc1tlXT10aGlzLndvcmRzW2VdO3QubGVuZ3RoPXRoaXMubGVuZ3RoLHQubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSx0LnJlZD10aGlzLnJlZH0sYS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgYShudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHQpLHR9LGEucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24odCl7Zm9yKDt0aGlzLmxlbmd0aDx0Oyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LGEucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sYS5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LGEucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/XCI8Qk4tUjogXCI6XCI8Qk46IFwiKSt0aGlzLnRvU3RyaW5nKDE2KStcIj5cIn07dmFyIGM9W1wiXCIsXCIwXCIsXCIwMFwiLFwiMDAwXCIsXCIwMDAwXCIsXCIwMDAwMFwiLFwiMDAwMDAwXCIsXCIwMDAwMDAwXCIsXCIwMDAwMDAwMFwiLFwiMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCJdLHU9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0saD1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBmKHQsZSxyKXtyLm5lZ2F0aXZlPWUubmVnYXRpdmVedC5uZWdhdGl2ZTt2YXIgbj10Lmxlbmd0aCtlLmxlbmd0aHwwO3IubGVuZ3RoPW4sbj1uLTF8MDt2YXIgaT0wfHQud29yZHNbMF0sYT0wfGUud29yZHNbMF0sbz1pKmEscz02NzEwODg2MyZvLGw9by82NzEwODg2NHwwO3Iud29yZHNbMF09cztmb3IodmFyIGM9MTtjPG47YysrKXtmb3IodmFyIHU9bD4+PjI2LGg9NjcxMDg4NjMmbCxmPU1hdGgubWluKGMsZS5sZW5ndGgtMSkscD1NYXRoLm1heCgwLGMtdC5sZW5ndGgrMSk7cDw9ZjtwKyspe3ZhciBkPWMtcHwwO3UrPShvPShpPTB8dC53b3Jkc1tkXSkqKGE9MHxlLndvcmRzW3BdKStoKS82NzEwODg2NHwwLGg9NjcxMDg4NjMmb31yLndvcmRzW2NdPTB8aCxsPTB8dX1yZXR1cm4gMCE9PWw/ci53b3Jkc1tjXT0wfGw6ci5sZW5ndGgtLSxyLnN0cmlwKCl9YS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24odCxlKXt2YXIgcjtpZihlPTB8ZXx8MSwxNj09PSh0PXR8fDEwKXx8XCJoZXhcIj09PXQpe3I9XCJcIjtmb3IodmFyIGk9MCxhPTAsbz0wO288dGhpcy5sZW5ndGg7bysrKXt2YXIgcz10aGlzLndvcmRzW29dLGw9KDE2Nzc3MjE1JihzPDxpfGEpKS50b1N0cmluZygxNik7cj0wIT09KGE9cz4+PjI0LWkmMTY3NzcyMTUpfHxvIT09dGhpcy5sZW5ndGgtMT9jWzYtbC5sZW5ndGhdK2wrcjpsK3IsKGkrPTIpPj0yNiYmKGktPTI2LG8tLSl9Zm9yKDAhPT1hJiYocj1hLnRvU3RyaW5nKDE2KStyKTtyLmxlbmd0aCVlIT0wOylyPVwiMFwiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj1cIi1cIityKSxyfWlmKHQ9PT0oMHx0KSYmdD49MiYmdDw9MzYpe3ZhciBmPXVbdF0scD1oW3RdO3I9XCJcIjt2YXIgZD10aGlzLmNsb25lKCk7Zm9yKGQubmVnYXRpdmU9MDshZC5pc1plcm8oKTspe3ZhciBnPWQubW9kbihwKS50b1N0cmluZyh0KTtyPShkPWQuaWRpdm4ocCkpLmlzWmVybygpP2crcjpjW2YtZy5sZW5ndGhdK2crcn1mb3IodGhpcy5pc1plcm8oKSYmKHI9XCIwXCIrcik7ci5sZW5ndGglZSE9MDspcj1cIjBcIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9XCItXCIrcikscn1uKCExLFwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNlwiKX0sYS5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/dCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3QrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZuKCExLFwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzXCIpLDAhPT10aGlzLm5lZ2F0aXZlPy10OnR9LGEucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sYS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihcInVuZGVmaW5lZFwiIT10eXBlb2YgbyksdGhpcy50b0FycmF5TGlrZShvLHQsZSl9LGEucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSx0LGUpfSxhLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5ieXRlTGVuZ3RoKCksYT1yfHxNYXRoLm1heCgxLGkpO24oaTw9YSxcImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGhcIiksbihhPjAsXCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDBcIiksdGhpcy5zdHJpcCgpO3ZhciBvLHMsbD1cImxlXCI9PT1lLGM9bmV3IHQoYSksdT10aGlzLmNsb25lKCk7aWYobCl7Zm9yKHM9MDshdS5pc1plcm8oKTtzKyspbz11LmFuZGxuKDI1NSksdS5pdXNocm4oOCksY1tzXT1vO2Zvcig7czxhO3MrKyljW3NdPTB9ZWxzZXtmb3Iocz0wO3M8YS1pO3MrKyljW3NdPTA7Zm9yKHM9MDshdS5pc1plcm8oKTtzKyspbz11LmFuZGxuKDI1NSksdS5pdXNocm4oOCksY1thLXMtMV09b31yZXR1cm4gY30sTWF0aC5jbHozMj9hLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uKHQpe3JldHVybiAzMi1NYXRoLmNsejMyKHQpfTphLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQscj0wO3JldHVybiBlPj00MDk2JiYocis9MTMsZT4+Pj0xMyksZT49NjQmJihyKz03LGU+Pj49NyksZT49OCYmKHIrPTQsZT4+Pj00KSxlPj0yJiYocis9MixlPj4+PTIpLHIrZX0sYS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHQpe2lmKDA9PT10KXJldHVybiAyNjt2YXIgZT10LHI9MDtyZXR1cm4gMD09KDgxOTEmZSkmJihyKz0xMyxlPj4+PTEzKSwwPT0oMTI3JmUpJiYocis9NyxlPj4+PTcpLDA9PSgxNSZlKSYmKHIrPTQsZT4+Pj00KSwwPT0oMyZlKSYmKHIrPTIsZT4+Pj0yKSwwPT0oMSZlKSYmcisrLHJ9LGEucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciB0PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0sZT10aGlzLl9jb3VudEJpdHModCk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStlfSxhLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciB0PTAsZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2VdKTtpZih0Kz1yLDI2IT09cilicmVha31yZXR1cm4gdH0sYS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sYS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHQpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHQpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sYS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGVzdG4odC0xKT90aGlzLm5vdG4odCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sYS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LGEucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxhLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxhLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHQpe2Zvcig7dGhpcy5sZW5ndGg8dC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLndvcmRzW2VdPXRoaXMud29yZHNbZV18dC53b3Jkc1tlXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXVvcih0KX0sYS5wcm90b3R5cGUub3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IodCk6dC5jbG9uZSgpLmlvcih0aGlzKX0sYS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcih0KTp0LmNsb25lKCkuaXVvcih0aGlzKX0sYS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24odCl7dmFyIGU7ZT10aGlzLmxlbmd0aD50Lmxlbmd0aD90OnRoaXM7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdGhpcy53b3Jkc1tyXT10aGlzLndvcmRzW3JdJnQud29yZHNbcl07cmV0dXJuIHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdWFuZCh0KX0sYS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZCh0KTp0LmNsb25lKCkuaWFuZCh0aGlzKX0sYS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHQpOnQuY2xvbmUoKS5pdWFuZCh0aGlzKX0sYS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24odCl7dmFyIGUscjt0aGlzLmxlbmd0aD50Lmxlbmd0aD8oZT10aGlzLHI9dCk6KGU9dCxyPXRoaXMpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09ZS53b3Jkc1tuXV5yLndvcmRzW25dO2lmKHRoaXMhPT1lKWZvcig7bjxlLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT1lLndvcmRzW25dO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IodCl9LGEucHJvdG90eXBlLnhvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IodCk6dC5jbG9uZSgpLml4b3IodGhpcyl9LGEucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcih0KTp0LmNsb25lKCkuaXV4b3IodGhpcyl9LGEucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPTB8TWF0aC5jZWlsKHQvMjYpLHI9dCUyNjt0aGlzLl9leHBhbmQoZSkscj4wJiZlLS07Zm9yKHZhciBpPTA7aTxlO2krKyl0aGlzLndvcmRzW2ldPTY3MTA4ODYzJn50aGlzLndvcmRzW2ldO3JldHVybiByPjAmJih0aGlzLndvcmRzW2ldPX50aGlzLndvcmRzW2ldJjY3MTA4ODYzPj4yNi1yKSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bih0KX0sYS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbih0LGUpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciByPXQvMjZ8MCxpPXQlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLHRoaXMud29yZHNbcl09ZT90aGlzLndvcmRzW3JdfDE8PGk6dGhpcy53b3Jkc1tyXSZ+KDE8PGkpLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0KXt2YXIgZSxyLG47aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsZT10aGlzLmlzdWIodCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZSlyZXR1cm4gdC5uZWdhdGl2ZT0wLGU9dGhpcy5pc3ViKHQpLHQubmVnYXRpdmU9MSxlLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnQubGVuZ3RoPyhyPXRoaXMsbj10KToocj10LG49dGhpcyk7Zm9yKHZhciBpPTAsYT0wO2E8bi5sZW5ndGg7YSsrKWU9KDB8ci53b3Jkc1thXSkrKDB8bi53b3Jkc1thXSkraSx0aGlzLndvcmRzW2FdPTY3MTA4ODYzJmUsaT1lPj4+MjY7Zm9yKDswIT09aSYmYTxyLmxlbmd0aDthKyspZT0oMHxyLndvcmRzW2FdKStpLHRoaXMud29yZHNbYV09NjcxMDg4NjMmZSxpPWU+Pj4yNjtpZih0aGlzLmxlbmd0aD1yLmxlbmd0aCwwIT09aSl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1pLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihyIT09dGhpcylmb3IoO2E8ci5sZW5ndGg7YSsrKXRoaXMud29yZHNbYV09ci53b3Jkc1thXTtyZXR1cm4gdGhpc30sYS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiAwIT09dC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHQubmVnYXRpdmU9MCxlPXRoaXMuc3ViKHQpLHQubmVnYXRpdmVePTEsZSk6MD09PXQubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsZT10LnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsZSk6dGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQodCk6dC5jbG9uZSgpLmlhZGQodGhpcyl9LGEucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24odCl7aWYoMCE9PXQubmVnYXRpdmUpe3QubmVnYXRpdmU9MDt2YXIgZT10aGlzLmlhZGQodCk7cmV0dXJuIHQubmVnYXRpdmU9MSxlLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciByLG4saT10aGlzLmNtcCh0KTtpZigwPT09aSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7aT4wPyhyPXRoaXMsbj10KToocj10LG49dGhpcyk7Zm9yKHZhciBhPTAsbz0wO288bi5sZW5ndGg7bysrKWE9KGU9KDB8ci53b3Jkc1tvXSktKDB8bi53b3Jkc1tvXSkrYSk+PjI2LHRoaXMud29yZHNbb109NjcxMDg4NjMmZTtmb3IoOzAhPT1hJiZvPHIubGVuZ3RoO28rKylhPShlPSgwfHIud29yZHNbb10pK2EpPj4yNix0aGlzLndvcmRzW29dPTY3MTA4ODYzJmU7aWYoMD09PWEmJm88ci5sZW5ndGgmJnIhPT10aGlzKWZvcig7bzxyLmxlbmd0aDtvKyspdGhpcy53b3Jkc1tvXT1yLndvcmRzW29dO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxvKSxyIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHQpfTt2YXIgcD1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG89dC53b3JkcyxzPWUud29yZHMsbD1yLndvcmRzLGM9MCx1PTB8b1swXSxoPTgxOTEmdSxmPXU+Pj4xMyxwPTB8b1sxXSxkPTgxOTEmcCxnPXA+Pj4xMyx2PTB8b1syXSxtPTgxOTEmdix5PXY+Pj4xMyx4PTB8b1szXSxiPTgxOTEmeCxfPXg+Pj4xMyx3PTB8b1s0XSxrPTgxOTEmdyxBPXc+Pj4xMyxUPTB8b1s1XSxNPTgxOTEmVCxTPVQ+Pj4xMyxFPTB8b1s2XSxDPTgxOTEmRSxMPUU+Pj4xMyx6PTB8b1s3XSxPPTgxOTEmeixJPXo+Pj4xMyxEPTB8b1s4XSxQPTgxOTEmRCxSPUQ+Pj4xMyxGPTB8b1s5XSxCPTgxOTEmRixOPUY+Pj4xMyxqPTB8c1swXSxWPTgxOTEmaixVPWo+Pj4xMyxxPTB8c1sxXSxIPTgxOTEmcSxHPXE+Pj4xMyxZPTB8c1syXSxXPTgxOTEmWSxYPVk+Pj4xMyxaPTB8c1szXSwkPTgxOTEmWixKPVo+Pj4xMyxLPTB8c1s0XSxRPTgxOTEmSyx0dD1LPj4+MTMsZXQ9MHxzWzVdLHJ0PTgxOTEmZXQsbnQ9ZXQ+Pj4xMyxpdD0wfHNbNl0sYXQ9ODE5MSZpdCxvdD1pdD4+PjEzLHN0PTB8c1s3XSxsdD04MTkxJnN0LGN0PXN0Pj4+MTMsdXQ9MHxzWzhdLGh0PTgxOTEmdXQsZnQ9dXQ+Pj4xMyxwdD0wfHNbOV0sZHQ9ODE5MSZwdCxndD1wdD4+PjEzO3IubmVnYXRpdmU9dC5uZWdhdGl2ZV5lLm5lZ2F0aXZlLHIubGVuZ3RoPTE5O3ZhciB2dD0oYysobj1NYXRoLmltdWwoaCxWKSl8MCkrKCg4MTkxJihpPShpPU1hdGguaW11bChoLFUpKStNYXRoLmltdWwoZixWKXwwKSk8PDEzKXwwO2M9KChhPU1hdGguaW11bChmLFUpKSsoaT4+PjEzKXwwKSsodnQ+Pj4yNil8MCx2dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoZCxWKSxpPShpPU1hdGguaW11bChkLFUpKStNYXRoLmltdWwoZyxWKXwwLGE9TWF0aC5pbXVsKGcsVSk7dmFyIG10PShjKyhuPW4rTWF0aC5pbXVsKGgsSCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGgsRyl8MCkrTWF0aC5pbXVsKGYsSCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChmLEcpfDApKyhpPj4+MTMpfDApKyhtdD4+PjI2KXwwLG10Jj02NzEwODg2MyxuPU1hdGguaW11bChtLFYpLGk9KGk9TWF0aC5pbXVsKG0sVSkpK01hdGguaW11bCh5LFYpfDAsYT1NYXRoLmltdWwoeSxVKSxuPW4rTWF0aC5pbXVsKGQsSCl8MCxpPShpPWkrTWF0aC5pbXVsKGQsRyl8MCkrTWF0aC5pbXVsKGcsSCl8MCxhPWErTWF0aC5pbXVsKGcsRyl8MDt2YXIgeXQ9KGMrKG49bitNYXRoLmltdWwoaCxXKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxYKXwwKStNYXRoLmltdWwoZixXKXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGYsWCl8MCkrKGk+Pj4xMyl8MCkrKHl0Pj4+MjYpfDAseXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGIsViksaT0oaT1NYXRoLmltdWwoYixVKSkrTWF0aC5pbXVsKF8sVil8MCxhPU1hdGguaW11bChfLFUpLG49bitNYXRoLmltdWwobSxIKXwwLGk9KGk9aStNYXRoLmltdWwobSxHKXwwKStNYXRoLmltdWwoeSxIKXwwLGE9YStNYXRoLmltdWwoeSxHKXwwLG49bitNYXRoLmltdWwoZCxXKXwwLGk9KGk9aStNYXRoLmltdWwoZCxYKXwwKStNYXRoLmltdWwoZyxXKXwwLGE9YStNYXRoLmltdWwoZyxYKXwwO3ZhciB4dD0oYysobj1uK01hdGguaW11bChoLCQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChoLEopfDApK01hdGguaW11bChmLCQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZixKKXwwKSsoaT4+PjEzKXwwKSsoeHQ+Pj4yNil8MCx4dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoayxWKSxpPShpPU1hdGguaW11bChrLFUpKStNYXRoLmltdWwoQSxWKXwwLGE9TWF0aC5pbXVsKEEsVSksbj1uK01hdGguaW11bChiLEgpfDAsaT0oaT1pK01hdGguaW11bChiLEcpfDApK01hdGguaW11bChfLEgpfDAsYT1hK01hdGguaW11bChfLEcpfDAsbj1uK01hdGguaW11bChtLFcpfDAsaT0oaT1pK01hdGguaW11bChtLFgpfDApK01hdGguaW11bCh5LFcpfDAsYT1hK01hdGguaW11bCh5LFgpfDAsbj1uK01hdGguaW11bChkLCQpfDAsaT0oaT1pK01hdGguaW11bChkLEopfDApK01hdGguaW11bChnLCQpfDAsYT1hK01hdGguaW11bChnLEopfDA7dmFyIGJ0PShjKyhuPW4rTWF0aC5pbXVsKGgsUSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGgsdHQpfDApK01hdGguaW11bChmLFEpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZix0dCl8MCkrKGk+Pj4xMyl8MCkrKGJ0Pj4+MjYpfDAsYnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKE0sViksaT0oaT1NYXRoLmltdWwoTSxVKSkrTWF0aC5pbXVsKFMsVil8MCxhPU1hdGguaW11bChTLFUpLG49bitNYXRoLmltdWwoayxIKXwwLGk9KGk9aStNYXRoLmltdWwoayxHKXwwKStNYXRoLmltdWwoQSxIKXwwLGE9YStNYXRoLmltdWwoQSxHKXwwLG49bitNYXRoLmltdWwoYixXKXwwLGk9KGk9aStNYXRoLmltdWwoYixYKXwwKStNYXRoLmltdWwoXyxXKXwwLGE9YStNYXRoLmltdWwoXyxYKXwwLG49bitNYXRoLmltdWwobSwkKXwwLGk9KGk9aStNYXRoLmltdWwobSxKKXwwKStNYXRoLmltdWwoeSwkKXwwLGE9YStNYXRoLmltdWwoeSxKKXwwLG49bitNYXRoLmltdWwoZCxRKXwwLGk9KGk9aStNYXRoLmltdWwoZCx0dCl8MCkrTWF0aC5pbXVsKGcsUSl8MCxhPWErTWF0aC5pbXVsKGcsdHQpfDA7dmFyIF90PShjKyhuPW4rTWF0aC5pbXVsKGgscnQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChoLG50KXwwKStNYXRoLmltdWwoZixydCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChmLG50KXwwKSsoaT4+PjEzKXwwKSsoX3Q+Pj4yNil8MCxfdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQyxWKSxpPShpPU1hdGguaW11bChDLFUpKStNYXRoLmltdWwoTCxWKXwwLGE9TWF0aC5pbXVsKEwsVSksbj1uK01hdGguaW11bChNLEgpfDAsaT0oaT1pK01hdGguaW11bChNLEcpfDApK01hdGguaW11bChTLEgpfDAsYT1hK01hdGguaW11bChTLEcpfDAsbj1uK01hdGguaW11bChrLFcpfDAsaT0oaT1pK01hdGguaW11bChrLFgpfDApK01hdGguaW11bChBLFcpfDAsYT1hK01hdGguaW11bChBLFgpfDAsbj1uK01hdGguaW11bChiLCQpfDAsaT0oaT1pK01hdGguaW11bChiLEopfDApK01hdGguaW11bChfLCQpfDAsYT1hK01hdGguaW11bChfLEopfDAsbj1uK01hdGguaW11bChtLFEpfDAsaT0oaT1pK01hdGguaW11bChtLHR0KXwwKStNYXRoLmltdWwoeSxRKXwwLGE9YStNYXRoLmltdWwoeSx0dCl8MCxuPW4rTWF0aC5pbXVsKGQscnQpfDAsaT0oaT1pK01hdGguaW11bChkLG50KXwwKStNYXRoLmltdWwoZyxydCl8MCxhPWErTWF0aC5pbXVsKGcsbnQpfDA7dmFyIHd0PShjKyhuPW4rTWF0aC5pbXVsKGgsYXQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChoLG90KXwwKStNYXRoLmltdWwoZixhdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChmLG90KXwwKSsoaT4+PjEzKXwwKSsod3Q+Pj4yNil8MCx3dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoTyxWKSxpPShpPU1hdGguaW11bChPLFUpKStNYXRoLmltdWwoSSxWKXwwLGE9TWF0aC5pbXVsKEksVSksbj1uK01hdGguaW11bChDLEgpfDAsaT0oaT1pK01hdGguaW11bChDLEcpfDApK01hdGguaW11bChMLEgpfDAsYT1hK01hdGguaW11bChMLEcpfDAsbj1uK01hdGguaW11bChNLFcpfDAsaT0oaT1pK01hdGguaW11bChNLFgpfDApK01hdGguaW11bChTLFcpfDAsYT1hK01hdGguaW11bChTLFgpfDAsbj1uK01hdGguaW11bChrLCQpfDAsaT0oaT1pK01hdGguaW11bChrLEopfDApK01hdGguaW11bChBLCQpfDAsYT1hK01hdGguaW11bChBLEopfDAsbj1uK01hdGguaW11bChiLFEpfDAsaT0oaT1pK01hdGguaW11bChiLHR0KXwwKStNYXRoLmltdWwoXyxRKXwwLGE9YStNYXRoLmltdWwoXyx0dCl8MCxuPW4rTWF0aC5pbXVsKG0scnQpfDAsaT0oaT1pK01hdGguaW11bChtLG50KXwwKStNYXRoLmltdWwoeSxydCl8MCxhPWErTWF0aC5pbXVsKHksbnQpfDAsbj1uK01hdGguaW11bChkLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoZCxvdCl8MCkrTWF0aC5pbXVsKGcsYXQpfDAsYT1hK01hdGguaW11bChnLG90KXwwO3ZhciBrdD0oYysobj1uK01hdGguaW11bChoLGx0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxjdCl8MCkrTWF0aC5pbXVsKGYsbHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZixjdCl8MCkrKGk+Pj4xMyl8MCkrKGt0Pj4+MjYpfDAsa3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFAsViksaT0oaT1NYXRoLmltdWwoUCxVKSkrTWF0aC5pbXVsKFIsVil8MCxhPU1hdGguaW11bChSLFUpLG49bitNYXRoLmltdWwoTyxIKXwwLGk9KGk9aStNYXRoLmltdWwoTyxHKXwwKStNYXRoLmltdWwoSSxIKXwwLGE9YStNYXRoLmltdWwoSSxHKXwwLG49bitNYXRoLmltdWwoQyxXKXwwLGk9KGk9aStNYXRoLmltdWwoQyxYKXwwKStNYXRoLmltdWwoTCxXKXwwLGE9YStNYXRoLmltdWwoTCxYKXwwLG49bitNYXRoLmltdWwoTSwkKXwwLGk9KGk9aStNYXRoLmltdWwoTSxKKXwwKStNYXRoLmltdWwoUywkKXwwLGE9YStNYXRoLmltdWwoUyxKKXwwLG49bitNYXRoLmltdWwoayxRKXwwLGk9KGk9aStNYXRoLmltdWwoayx0dCl8MCkrTWF0aC5pbXVsKEEsUSl8MCxhPWErTWF0aC5pbXVsKEEsdHQpfDAsbj1uK01hdGguaW11bChiLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoYixudCl8MCkrTWF0aC5pbXVsKF8scnQpfDAsYT1hK01hdGguaW11bChfLG50KXwwLG49bitNYXRoLmltdWwobSxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKG0sb3QpfDApK01hdGguaW11bCh5LGF0KXwwLGE9YStNYXRoLmltdWwoeSxvdCl8MCxuPW4rTWF0aC5pbXVsKGQsbHQpfDAsaT0oaT1pK01hdGguaW11bChkLGN0KXwwKStNYXRoLmltdWwoZyxsdCl8MCxhPWErTWF0aC5pbXVsKGcsY3QpfDA7dmFyIEF0PShjKyhuPW4rTWF0aC5pbXVsKGgsaHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChoLGZ0KXwwKStNYXRoLmltdWwoZixodCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChmLGZ0KXwwKSsoaT4+PjEzKXwwKSsoQXQ+Pj4yNil8MCxBdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixWKSxpPShpPU1hdGguaW11bChCLFUpKStNYXRoLmltdWwoTixWKXwwLGE9TWF0aC5pbXVsKE4sVSksbj1uK01hdGguaW11bChQLEgpfDAsaT0oaT1pK01hdGguaW11bChQLEcpfDApK01hdGguaW11bChSLEgpfDAsYT1hK01hdGguaW11bChSLEcpfDAsbj1uK01hdGguaW11bChPLFcpfDAsaT0oaT1pK01hdGguaW11bChPLFgpfDApK01hdGguaW11bChJLFcpfDAsYT1hK01hdGguaW11bChJLFgpfDAsbj1uK01hdGguaW11bChDLCQpfDAsaT0oaT1pK01hdGguaW11bChDLEopfDApK01hdGguaW11bChMLCQpfDAsYT1hK01hdGguaW11bChMLEopfDAsbj1uK01hdGguaW11bChNLFEpfDAsaT0oaT1pK01hdGguaW11bChNLHR0KXwwKStNYXRoLmltdWwoUyxRKXwwLGE9YStNYXRoLmltdWwoUyx0dCl8MCxuPW4rTWF0aC5pbXVsKGsscnQpfDAsaT0oaT1pK01hdGguaW11bChrLG50KXwwKStNYXRoLmltdWwoQSxydCl8MCxhPWErTWF0aC5pbXVsKEEsbnQpfDAsbj1uK01hdGguaW11bChiLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoYixvdCl8MCkrTWF0aC5pbXVsKF8sYXQpfDAsYT1hK01hdGguaW11bChfLG90KXwwLG49bitNYXRoLmltdWwobSxsdCl8MCxpPShpPWkrTWF0aC5pbXVsKG0sY3QpfDApK01hdGguaW11bCh5LGx0KXwwLGE9YStNYXRoLmltdWwoeSxjdCl8MCxuPW4rTWF0aC5pbXVsKGQsaHQpfDAsaT0oaT1pK01hdGguaW11bChkLGZ0KXwwKStNYXRoLmltdWwoZyxodCl8MCxhPWErTWF0aC5pbXVsKGcsZnQpfDA7dmFyIFR0PShjKyhuPW4rTWF0aC5pbXVsKGgsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChoLGd0KXwwKStNYXRoLmltdWwoZixkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChmLGd0KXwwKSsoaT4+PjEzKXwwKSsoVHQ+Pj4yNil8MCxUdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixIKSxpPShpPU1hdGguaW11bChCLEcpKStNYXRoLmltdWwoTixIKXwwLGE9TWF0aC5pbXVsKE4sRyksbj1uK01hdGguaW11bChQLFcpfDAsaT0oaT1pK01hdGguaW11bChQLFgpfDApK01hdGguaW11bChSLFcpfDAsYT1hK01hdGguaW11bChSLFgpfDAsbj1uK01hdGguaW11bChPLCQpfDAsaT0oaT1pK01hdGguaW11bChPLEopfDApK01hdGguaW11bChJLCQpfDAsYT1hK01hdGguaW11bChJLEopfDAsbj1uK01hdGguaW11bChDLFEpfDAsaT0oaT1pK01hdGguaW11bChDLHR0KXwwKStNYXRoLmltdWwoTCxRKXwwLGE9YStNYXRoLmltdWwoTCx0dCl8MCxuPW4rTWF0aC5pbXVsKE0scnQpfDAsaT0oaT1pK01hdGguaW11bChNLG50KXwwKStNYXRoLmltdWwoUyxydCl8MCxhPWErTWF0aC5pbXVsKFMsbnQpfDAsbj1uK01hdGguaW11bChrLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoayxvdCl8MCkrTWF0aC5pbXVsKEEsYXQpfDAsYT1hK01hdGguaW11bChBLG90KXwwLG49bitNYXRoLmltdWwoYixsdCl8MCxpPShpPWkrTWF0aC5pbXVsKGIsY3QpfDApK01hdGguaW11bChfLGx0KXwwLGE9YStNYXRoLmltdWwoXyxjdCl8MCxuPW4rTWF0aC5pbXVsKG0saHQpfDAsaT0oaT1pK01hdGguaW11bChtLGZ0KXwwKStNYXRoLmltdWwoeSxodCl8MCxhPWErTWF0aC5pbXVsKHksZnQpfDA7dmFyIE10PShjKyhuPW4rTWF0aC5pbXVsKGQsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChkLGd0KXwwKStNYXRoLmltdWwoZyxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChnLGd0KXwwKSsoaT4+PjEzKXwwKSsoTXQ+Pj4yNil8MCxNdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixXKSxpPShpPU1hdGguaW11bChCLFgpKStNYXRoLmltdWwoTixXKXwwLGE9TWF0aC5pbXVsKE4sWCksbj1uK01hdGguaW11bChQLCQpfDAsaT0oaT1pK01hdGguaW11bChQLEopfDApK01hdGguaW11bChSLCQpfDAsYT1hK01hdGguaW11bChSLEopfDAsbj1uK01hdGguaW11bChPLFEpfDAsaT0oaT1pK01hdGguaW11bChPLHR0KXwwKStNYXRoLmltdWwoSSxRKXwwLGE9YStNYXRoLmltdWwoSSx0dCl8MCxuPW4rTWF0aC5pbXVsKEMscnQpfDAsaT0oaT1pK01hdGguaW11bChDLG50KXwwKStNYXRoLmltdWwoTCxydCl8MCxhPWErTWF0aC5pbXVsKEwsbnQpfDAsbj1uK01hdGguaW11bChNLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoTSxvdCl8MCkrTWF0aC5pbXVsKFMsYXQpfDAsYT1hK01hdGguaW11bChTLG90KXwwLG49bitNYXRoLmltdWwoayxsdCl8MCxpPShpPWkrTWF0aC5pbXVsKGssY3QpfDApK01hdGguaW11bChBLGx0KXwwLGE9YStNYXRoLmltdWwoQSxjdCl8MCxuPW4rTWF0aC5pbXVsKGIsaHQpfDAsaT0oaT1pK01hdGguaW11bChiLGZ0KXwwKStNYXRoLmltdWwoXyxodCl8MCxhPWErTWF0aC5pbXVsKF8sZnQpfDA7dmFyIFN0PShjKyhuPW4rTWF0aC5pbXVsKG0sZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChtLGd0KXwwKStNYXRoLmltdWwoeSxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bCh5LGd0KXwwKSsoaT4+PjEzKXwwKSsoU3Q+Pj4yNil8MCxTdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQiwkKSxpPShpPU1hdGguaW11bChCLEopKStNYXRoLmltdWwoTiwkKXwwLGE9TWF0aC5pbXVsKE4sSiksbj1uK01hdGguaW11bChQLFEpfDAsaT0oaT1pK01hdGguaW11bChQLHR0KXwwKStNYXRoLmltdWwoUixRKXwwLGE9YStNYXRoLmltdWwoUix0dCl8MCxuPW4rTWF0aC5pbXVsKE8scnQpfDAsaT0oaT1pK01hdGguaW11bChPLG50KXwwKStNYXRoLmltdWwoSSxydCl8MCxhPWErTWF0aC5pbXVsKEksbnQpfDAsbj1uK01hdGguaW11bChDLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoQyxvdCl8MCkrTWF0aC5pbXVsKEwsYXQpfDAsYT1hK01hdGguaW11bChMLG90KXwwLG49bitNYXRoLmltdWwoTSxsdCl8MCxpPShpPWkrTWF0aC5pbXVsKE0sY3QpfDApK01hdGguaW11bChTLGx0KXwwLGE9YStNYXRoLmltdWwoUyxjdCl8MCxuPW4rTWF0aC5pbXVsKGssaHQpfDAsaT0oaT1pK01hdGguaW11bChrLGZ0KXwwKStNYXRoLmltdWwoQSxodCl8MCxhPWErTWF0aC5pbXVsKEEsZnQpfDA7dmFyIEV0PShjKyhuPW4rTWF0aC5pbXVsKGIsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChiLGd0KXwwKStNYXRoLmltdWwoXyxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChfLGd0KXwwKSsoaT4+PjEzKXwwKSsoRXQ+Pj4yNil8MCxFdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixRKSxpPShpPU1hdGguaW11bChCLHR0KSkrTWF0aC5pbXVsKE4sUSl8MCxhPU1hdGguaW11bChOLHR0KSxuPW4rTWF0aC5pbXVsKFAscnQpfDAsaT0oaT1pK01hdGguaW11bChQLG50KXwwKStNYXRoLmltdWwoUixydCl8MCxhPWErTWF0aC5pbXVsKFIsbnQpfDAsbj1uK01hdGguaW11bChPLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoTyxvdCl8MCkrTWF0aC5pbXVsKEksYXQpfDAsYT1hK01hdGguaW11bChJLG90KXwwLG49bitNYXRoLmltdWwoQyxsdCl8MCxpPShpPWkrTWF0aC5pbXVsKEMsY3QpfDApK01hdGguaW11bChMLGx0KXwwLGE9YStNYXRoLmltdWwoTCxjdCl8MCxuPW4rTWF0aC5pbXVsKE0saHQpfDAsaT0oaT1pK01hdGguaW11bChNLGZ0KXwwKStNYXRoLmltdWwoUyxodCl8MCxhPWErTWF0aC5pbXVsKFMsZnQpfDA7dmFyIEN0PShjKyhuPW4rTWF0aC5pbXVsKGssZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChrLGd0KXwwKStNYXRoLmltdWwoQSxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChBLGd0KXwwKSsoaT4+PjEzKXwwKSsoQ3Q+Pj4yNil8MCxDdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixydCksaT0oaT1NYXRoLmltdWwoQixudCkpK01hdGguaW11bChOLHJ0KXwwLGE9TWF0aC5pbXVsKE4sbnQpLG49bitNYXRoLmltdWwoUCxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKFAsb3QpfDApK01hdGguaW11bChSLGF0KXwwLGE9YStNYXRoLmltdWwoUixvdCl8MCxuPW4rTWF0aC5pbXVsKE8sbHQpfDAsaT0oaT1pK01hdGguaW11bChPLGN0KXwwKStNYXRoLmltdWwoSSxsdCl8MCxhPWErTWF0aC5pbXVsKEksY3QpfDAsbj1uK01hdGguaW11bChDLGh0KXwwLGk9KGk9aStNYXRoLmltdWwoQyxmdCl8MCkrTWF0aC5pbXVsKEwsaHQpfDAsYT1hK01hdGguaW11bChMLGZ0KXwwO3ZhciBMdD0oYysobj1uK01hdGguaW11bChNLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoTSxndCl8MCkrTWF0aC5pbXVsKFMsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoUyxndCl8MCkrKGk+Pj4xMyl8MCkrKEx0Pj4+MjYpfDAsTHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsYXQpLGk9KGk9TWF0aC5pbXVsKEIsb3QpKStNYXRoLmltdWwoTixhdCl8MCxhPU1hdGguaW11bChOLG90KSxuPW4rTWF0aC5pbXVsKFAsbHQpfDAsaT0oaT1pK01hdGguaW11bChQLGN0KXwwKStNYXRoLmltdWwoUixsdCl8MCxhPWErTWF0aC5pbXVsKFIsY3QpfDAsbj1uK01hdGguaW11bChPLGh0KXwwLGk9KGk9aStNYXRoLmltdWwoTyxmdCl8MCkrTWF0aC5pbXVsKEksaHQpfDAsYT1hK01hdGguaW11bChJLGZ0KXwwO3ZhciB6dD0oYysobj1uK01hdGguaW11bChDLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoQyxndCl8MCkrTWF0aC5pbXVsKEwsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoTCxndCl8MCkrKGk+Pj4xMyl8MCkrKHp0Pj4+MjYpfDAsenQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsbHQpLGk9KGk9TWF0aC5pbXVsKEIsY3QpKStNYXRoLmltdWwoTixsdCl8MCxhPU1hdGguaW11bChOLGN0KSxuPW4rTWF0aC5pbXVsKFAsaHQpfDAsaT0oaT1pK01hdGguaW11bChQLGZ0KXwwKStNYXRoLmltdWwoUixodCl8MCxhPWErTWF0aC5pbXVsKFIsZnQpfDA7dmFyIE90PShjKyhuPW4rTWF0aC5pbXVsKE8sZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChPLGd0KXwwKStNYXRoLmltdWwoSSxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChJLGd0KXwwKSsoaT4+PjEzKXwwKSsoT3Q+Pj4yNil8MCxPdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixodCksaT0oaT1NYXRoLmltdWwoQixmdCkpK01hdGguaW11bChOLGh0KXwwLGE9TWF0aC5pbXVsKE4sZnQpO3ZhciBJdD0oYysobj1uK01hdGguaW11bChQLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoUCxndCl8MCkrTWF0aC5pbXVsKFIsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoUixndCl8MCkrKGk+Pj4xMyl8MCkrKEl0Pj4+MjYpfDAsSXQmPTY3MTA4ODYzO3ZhciBEdD0oYysobj1NYXRoLmltdWwoQixkdCkpfDApKygoODE5MSYoaT0oaT1NYXRoLmltdWwoQixndCkpK01hdGguaW11bChOLGR0KXwwKSk8PDEzKXwwO3JldHVybiBjPSgoYT1NYXRoLmltdWwoTixndCkpKyhpPj4+MTMpfDApKyhEdD4+PjI2KXwwLER0Jj02NzEwODg2MyxsWzBdPXZ0LGxbMV09bXQsbFsyXT15dCxsWzNdPXh0LGxbNF09YnQsbFs1XT1fdCxsWzZdPXd0LGxbN109a3QsbFs4XT1BdCxsWzldPVR0LGxbMTBdPU10LGxbMTFdPVN0LGxbMTJdPUV0LGxbMTNdPUN0LGxbMTRdPUx0LGxbMTVdPXp0LGxbMTZdPU90LGxbMTddPUl0LGxbMThdPUR0LDAhPT1jJiYobFsxOV09YyxyLmxlbmd0aCsrKSxyfTtmdW5jdGlvbiBkKHQsZSxyKXtyZXR1cm4obmV3IGcpLm11bHAodCxlLHIpfWZ1bmN0aW9uIGcodCxlKXt0aGlzLng9dCx0aGlzLnk9ZX1NYXRoLmltdWx8fChwPWYpLGEucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGgrdC5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09dC5sZW5ndGg/cCh0aGlzLHQsZSk6cjw2Mz9mKHRoaXMsdCxlKTpyPDEwMjQ/ZnVuY3Rpb24odCxlLHIpe3IubmVnYXRpdmU9ZS5uZWdhdGl2ZV50Lm5lZ2F0aXZlLHIubGVuZ3RoPXQubGVuZ3RoK2UubGVuZ3RoO2Zvcih2YXIgbj0wLGk9MCxhPTA7YTxyLmxlbmd0aC0xO2ErKyl7dmFyIG89aTtpPTA7Zm9yKHZhciBzPTY3MTA4ODYzJm4sbD1NYXRoLm1pbihhLGUubGVuZ3RoLTEpLGM9TWF0aC5tYXgoMCxhLXQubGVuZ3RoKzEpO2M8PWw7YysrKXt2YXIgdT1hLWMsaD0oMHx0LndvcmRzW3VdKSooMHxlLndvcmRzW2NdKSxmPTY3MTA4ODYzJmg7cz02NzEwODg2MyYoZj1mK3N8MCksaSs9KG89KG89bysoaC82NzEwODg2NHwwKXwwKSsoZj4+PjI2KXwwKT4+PjI2LG8mPTY3MTA4ODYzfXIud29yZHNbYV09cyxuPW8sbz1pfXJldHVybiAwIT09bj9yLndvcmRzW2FdPW46ci5sZW5ndGgtLSxyLnN0cmlwKCl9KHRoaXMsdCxlKTpkKHRoaXMsdCxlKX0sZy5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9YS5wcm90b3R5cGUuX2NvdW50Qml0cyh0KS0xLG49MDtuPHQ7bisrKWVbbl09dGhpcy5yZXZCaW4obixyLHQpO3JldHVybiBlfSxnLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24odCxlLHIpe2lmKDA9PT10fHx0PT09ci0xKXJldHVybiB0O2Zvcih2YXIgbj0wLGk9MDtpPGU7aSsrKW58PSgxJnQpPDxlLWktMSx0Pj49MTtyZXR1cm4gbn0sZy5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvPTA7bzxhO28rKyluW29dPWVbdFtvXV0saVtvXT1yW3Rbb11dfSxnLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMucGVybXV0ZShhLHQsZSxyLG4saSk7Zm9yKHZhciBvPTE7bzxpO288PD0xKWZvcih2YXIgcz1vPDwxLGw9TWF0aC5jb3MoMipNYXRoLlBJL3MpLGM9TWF0aC5zaW4oMipNYXRoLlBJL3MpLHU9MDt1PGk7dSs9cylmb3IodmFyIGg9bCxmPWMscD0wO3A8bztwKyspe3ZhciBkPXJbdStwXSxnPW5bdStwXSx2PXJbdStwK29dLG09blt1K3Arb10seT1oKnYtZiptO209aCptK2Yqdix2PXksclt1K3BdPWQrdixuW3UrcF09ZyttLHJbdStwK29dPWQtdixuW3UrcCtvXT1nLW0scCE9PXMmJih5PWwqaC1jKmYsZj1sKmYrYypoLGg9eSl9fSxnLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbih0LGUpe3ZhciByPTF8TWF0aC5tYXgoZSx0KSxuPTEmcixpPTA7Zm9yKHI9ci8yfDA7cjtyPj4+PTEpaSsrO3JldHVybiAxPDxpKzErbn0sZy5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZighKHI8PTEpKWZvcih2YXIgbj0wO248ci8yO24rKyl7dmFyIGk9dFtuXTt0W25dPXRbci1uLTFdLHRbci1uLTFdPWksaT1lW25dLGVbbl09LWVbci1uLTFdLGVbci1uLTFdPS1pfX0sZy5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wO248ZS8yO24rKyl7dmFyIGk9ODE5MipNYXRoLnJvdW5kKHRbMipuKzFdL2UpK01hdGgucm91bmQodFsyKm5dL2UpK3I7dFtuXT02NzEwODg2MyZpLHI9aTw2NzEwODg2ND8wOmkvNjcxMDg4NjR8MH1yZXR1cm4gdH0sZy5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbih0LGUscixpKXtmb3IodmFyIGE9MCxvPTA7bzxlO28rKylhKz0wfHRbb10sclsyKm9dPTgxOTEmYSxhPj4+PTEzLHJbMipvKzFdPTgxOTEmYSxhPj4+PTEzO2ZvcihvPTIqZTtvPGk7KytvKXJbb109MDtuKDA9PT1hKSxuKDA9PSgtODE5MiZhKSl9LGcucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPTA7cmV0dXJuIGV9LGcucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTIqdGhpcy5ndWVzc0xlbjEzYih0Lmxlbmd0aCxlLmxlbmd0aCksaT10aGlzLm1ha2VSQlQobiksYT10aGlzLnN0dWIobiksbz1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobiksbD1uZXcgQXJyYXkobiksYz1uZXcgQXJyYXkobiksdT1uZXcgQXJyYXkobiksaD1uZXcgQXJyYXkobiksZj1yLndvcmRzO2YubGVuZ3RoPW4sdGhpcy5jb252ZXJ0MTNiKHQud29yZHMsdC5sZW5ndGgsbyxuKSx0aGlzLmNvbnZlcnQxM2IoZS53b3JkcyxlLmxlbmd0aCxjLG4pLHRoaXMudHJhbnNmb3JtKG8sYSxzLGwsbixpKSx0aGlzLnRyYW5zZm9ybShjLGEsdSxoLG4saSk7Zm9yKHZhciBwPTA7cDxuO3ArKyl7dmFyIGQ9c1twXSp1W3BdLWxbcF0qaFtwXTtsW3BdPXNbcF0qaFtwXStsW3BdKnVbcF0sc1twXT1kfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShzLGwsbiksdGhpcy50cmFuc2Zvcm0ocyxsLGYsYSxuLGkpLHRoaXMuY29uanVnYXRlKGYsYSxuKSx0aGlzLm5vcm1hbGl6ZTEzYihmLG4pLHIubmVnYXRpdmU9dC5uZWdhdGl2ZV5lLm5lZ2F0aXZlLHIubGVuZ3RoPXQubGVuZ3RoK2UubGVuZ3RoLHIuc3RyaXAoKX0sYS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBhKG51bGwpO3JldHVybiBlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt0Lmxlbmd0aCksdGhpcy5tdWxUbyh0LGUpfSxhLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBhKG51bGwpO3JldHVybiBlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt0Lmxlbmd0aCksZCh0aGlzLHQsZSl9LGEucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyh0LHRoaXMpfSxhLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpO2Zvcih2YXIgZT0wLHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl7dmFyIGk9KDB8dGhpcy53b3Jkc1tyXSkqdCxhPSg2NzEwODg2MyZpKSsoNjcxMDg4NjMmZSk7ZT4+PTI2LGUrPWkvNjcxMDg4NjR8MCxlKz1hPj4+MjYsdGhpcy53b3Jkc1tyXT02NzEwODg2MyZhfXJldHVybiAwIT09ZSYmKHRoaXMud29yZHNbcl09ZSx0aGlzLmxlbmd0aCsrKSx0aGlzfSxhLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4odCl9LGEucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sYS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sYS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5iaXRMZW5ndGgoKSkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1yLzI2fDAsaT1yJTI2O2Vbcl09KHQud29yZHNbbl0mMTw8aSk+Pj5pfXJldHVybiBlfSh0KTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIG5ldyBhKDEpO2Zvcih2YXIgcj10aGlzLG49MDtuPGUubGVuZ3RoJiYwPT09ZVtuXTtuKysscj1yLnNxcigpKTtpZigrK248ZS5sZW5ndGgpZm9yKHZhciBpPXIuc3FyKCk7bjxlLmxlbmd0aDtuKyssaT1pLnNxcigpKTAhPT1lW25dJiYocj1yLm11bChpKSk7cmV0dXJuIHJ9LGEucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZSxyPXQlMjYsaT0odC1yKS8yNixhPTY3MTA4ODYzPj4+MjYtcjw8MjYtcjtpZigwIT09cil7dmFyIG89MDtmb3IoZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgcz10aGlzLndvcmRzW2VdJmEsbD0oMHx0aGlzLndvcmRzW2VdKS1zPDxyO3RoaXMud29yZHNbZV09bHxvLG89cz4+PjI2LXJ9byYmKHRoaXMud29yZHNbZV09byx0aGlzLmxlbmd0aCsrKX1pZigwIT09aSl7Zm9yKGU9dGhpcy5sZW5ndGgtMTtlPj0wO2UtLSl0aGlzLndvcmRzW2UraV09dGhpcy53b3Jkc1tlXTtmb3IoZT0wO2U8aTtlKyspdGhpcy53b3Jkc1tlXT0wO3RoaXMubGVuZ3RoKz1pfXJldHVybiB0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbih0KX0sYS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaTtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKSxpPWU/KGUtZSUyNikvMjY6MDt2YXIgYT10JTI2LG89TWF0aC5taW4oKHQtYSkvMjYsdGhpcy5sZW5ndGgpLHM9NjcxMDg4NjNeNjcxMDg4NjM+Pj5hPDxhLGw9cjtpZihpLT1vLGk9TWF0aC5tYXgoMCxpKSxsKXtmb3IodmFyIGM9MDtjPG87YysrKWwud29yZHNbY109dGhpcy53b3Jkc1tjXTtsLmxlbmd0aD1vfWlmKDA9PT1vKTtlbHNlIGlmKHRoaXMubGVuZ3RoPm8pZm9yKHRoaXMubGVuZ3RoLT1vLGM9MDtjPHRoaXMubGVuZ3RoO2MrKyl0aGlzLndvcmRzW2NdPXRoaXMud29yZHNbYytvXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciB1PTA7Zm9yKGM9dGhpcy5sZW5ndGgtMTtjPj0wJiYoMCE9PXV8fGM+PWkpO2MtLSl7dmFyIGg9MHx0aGlzLndvcmRzW2NdO3RoaXMud29yZHNbY109dTw8MjYtYXxoPj4+YSx1PWgmc31yZXR1cm4gbCYmMCE9PXUmJihsLndvcmRzW2wubGVuZ3RoKytdPXUpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4odCxlLHIpfSxhLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4odCl9LGEucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHQpfSxhLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4odCl9LGEucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHQpfSxhLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT10JTI2LHI9KHQtZSkvMjYsaT0xPDxlO3JldHVybiEodGhpcy5sZW5ndGg8PXIpJiYhISh0aGlzLndvcmRzW3JdJmkpfSxhLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2O2lmKG4oMD09PXRoaXMubmVnYXRpdmUsXCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnNcIiksdGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXM7aWYoMCE9PWUmJnIrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihyLHRoaXMubGVuZ3RoKSwwIT09ZSl7dmFyIGk9NjcxMDg4NjNeNjcxMDg4NjM+Pj5lPDxlO3RoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24odCl9LGEucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHQpe3JldHVybiBuKFwibnVtYmVyXCI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpLHQ8MD90aGlzLmlzdWJuKC10KTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHQ/KHRoaXMud29yZHNbMF09dC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbih0KX0sYS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHQpe3RoaXMud29yZHNbMF0rPXQ7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tlXT49NjcxMDg4NjQ7ZSsrKXRoaXMud29yZHNbZV0tPTY3MTA4ODY0LGU9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbZSsxXT0xOnRoaXMud29yZHNbZSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxlKzEpLHRoaXN9LGEucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHQpe2lmKG4oXCJudW1iZXJcIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCksdDwwKXJldHVybiB0aGlzLmlhZGRuKC10KTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4odCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09dCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZV08MDtlKyspdGhpcy53b3Jkc1tlXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tlKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbih0KX0sYS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHQpfSxhLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxhLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sYS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLG89dC5sZW5ndGgrcjt0aGlzLl9leHBhbmQobyk7dmFyIHM9MDtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKXthPSgwfHRoaXMud29yZHNbaStyXSkrczt2YXIgbD0oMHx0LndvcmRzW2ldKSplO3M9KChhLT02NzEwODg2MyZsKT4+MjYpLShsLzY3MTA4ODY0fDApLHRoaXMud29yZHNbaStyXT02NzEwODg2MyZhfWZvcig7aTx0aGlzLmxlbmd0aC1yO2krKylzPShhPSgwfHRoaXMud29yZHNbaStyXSkrcyk+PjI2LHRoaXMud29yZHNbaStyXT02NzEwODg2MyZhO2lmKDA9PT1zKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKG4oLTE9PT1zKSxzPTAsaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXM9KGE9LSgwfHRoaXMud29yZHNbaV0pK3MpPj4yNix0aGlzLndvcmRzW2ldPTY3MTA4ODYzJmE7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHRoaXMubGVuZ3RoLHQubGVuZ3RoKSxuPXRoaXMuY2xvbmUoKSxpPXQsbz0wfGkud29yZHNbaS5sZW5ndGgtMV07MCE9PShyPTI2LXRoaXMuX2NvdW50Qml0cyhvKSkmJihpPWkudXNobG4ociksbi5pdXNobG4ociksbz0wfGkud29yZHNbaS5sZW5ndGgtMV0pO3ZhciBzLGw9bi5sZW5ndGgtaS5sZW5ndGg7aWYoXCJtb2RcIiE9PWUpeyhzPW5ldyBhKG51bGwpKS5sZW5ndGg9bCsxLHMud29yZHM9bmV3IEFycmF5KHMubGVuZ3RoKTtmb3IodmFyIGM9MDtjPHMubGVuZ3RoO2MrKylzLndvcmRzW2NdPTB9dmFyIHU9bi5jbG9uZSgpLl9pc2hsbnN1Ym11bChpLDEsbCk7MD09PXUubmVnYXRpdmUmJihuPXUscyYmKHMud29yZHNbbF09MSkpO2Zvcih2YXIgaD1sLTE7aD49MDtoLS0pe3ZhciBmPTY3MTA4ODY0KigwfG4ud29yZHNbaS5sZW5ndGgraF0pKygwfG4ud29yZHNbaS5sZW5ndGgraC0xXSk7Zm9yKGY9TWF0aC5taW4oZi9vfDAsNjcxMDg4NjMpLG4uX2lzaGxuc3VibXVsKGksZixoKTswIT09bi5uZWdhdGl2ZTspZi0tLG4ubmVnYXRpdmU9MCxuLl9pc2hsbnN1Ym11bChpLDEsaCksbi5pc1plcm8oKXx8KG4ubmVnYXRpdmVePTEpO3MmJihzLndvcmRzW2hdPWYpfXJldHVybiBzJiZzLnN0cmlwKCksbi5zdHJpcCgpLFwiZGl2XCIhPT1lJiYwIT09ciYmbi5pdXNocm4ocikse2RpdjpzfHxudWxsLG1vZDpufX0sYS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbighdC5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBhKDApLG1vZDpuZXcgYSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlPyhzPXRoaXMubmVnKCkuZGl2bW9kKHQsZSksXCJtb2RcIiE9PWUmJihpPXMuZGl2Lm5lZygpKSxcImRpdlwiIT09ZSYmKG89cy5tb2QubmVnKCksciYmMCE9PW8ubmVnYXRpdmUmJm8uaWFkZCh0KSkse2RpdjppLG1vZDpvfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlPyhzPXRoaXMuZGl2bW9kKHQubmVnKCksZSksXCJtb2RcIiE9PWUmJihpPXMuZGl2Lm5lZygpKSx7ZGl2OmksbW9kOnMubW9kfSk6MCE9KHRoaXMubmVnYXRpdmUmdC5uZWdhdGl2ZSk/KHM9dGhpcy5uZWcoKS5kaXZtb2QodC5uZWcoKSxlKSxcImRpdlwiIT09ZSYmKG89cy5tb2QubmVnKCksciYmMCE9PW8ubmVnYXRpdmUmJm8uaXN1Yih0KSkse2RpdjpzLmRpdixtb2Q6b30pOnQubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcCh0KTwwP3tkaXY6bmV3IGEoMCksbW9kOnRoaXN9OjE9PT10Lmxlbmd0aD9cImRpdlwiPT09ZT97ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bnVsbH06XCJtb2RcIj09PWU/e2RpdjpudWxsLG1vZDpuZXcgYSh0aGlzLm1vZG4odC53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bmV3IGEodGhpcy5tb2RuKHQud29yZHNbMF0pKX06dGhpcy5fd29yZERpdih0LGUpO3ZhciBpLG8sc30sYS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LFwiZGl2XCIsITEpLmRpdn0sYS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LFwibW9kXCIsITEpLm1vZH0sYS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCxcIm1vZFwiLCEwKS5tb2R9LGEucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGl2bW9kKHQpO2lmKGUubW9kLmlzWmVybygpKXJldHVybiBlLmRpdjt2YXIgcj0wIT09ZS5kaXYubmVnYXRpdmU/ZS5tb2QuaXN1Yih0KTplLm1vZCxuPXQudXNocm4oMSksaT10LmFuZGxuKDEpLGE9ci5jbXAobik7cmV0dXJuIGE8MHx8MT09PWkmJjA9PT1hP2UuZGl2OjAhPT1lLmRpdi5uZWdhdGl2ZT9lLmRpdi5pc3VibigxKTplLmRpdi5pYWRkbigxKX0sYS5wcm90b3R5cGUubW9kbj1mdW5jdGlvbih0KXtuKHQ8PTY3MTA4ODYzKTtmb3IodmFyIGU9KDE8PDI2KSV0LHI9MCxpPXRoaXMubGVuZ3RoLTE7aT49MDtpLS0pcj0oZSpyKygwfHRoaXMud29yZHNbaV0pKSV0O3JldHVybiByfSxhLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbih0KXtuKHQ8PTY3MTA4ODYzKTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBpPSgwfHRoaXMud29yZHNbcl0pKzY3MTA4ODY0KmU7dGhpcy53b3Jkc1tyXT1pL3R8MCxlPWkldH1yZXR1cm4gdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4odCl9LGEucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSksbighdC5pc1plcm8oKSk7dmFyIGU9dGhpcyxyPXQuY2xvbmUoKTtlPTAhPT1lLm5lZ2F0aXZlP2UudW1vZCh0KTplLmNsb25lKCk7Zm9yKHZhciBpPW5ldyBhKDEpLG89bmV3IGEoMCkscz1uZXcgYSgwKSxsPW5ldyBhKDEpLGM9MDtlLmlzRXZlbigpJiZyLmlzRXZlbigpOyllLml1c2hybigxKSxyLml1c2hybigxKSwrK2M7Zm9yKHZhciB1PXIuY2xvbmUoKSxoPWUuY2xvbmUoKTshZS5pc1plcm8oKTspe2Zvcih2YXIgZj0wLHA9MTswPT0oZS53b3Jkc1swXSZwKSYmZjwyNjsrK2YscDw8PTEpO2lmKGY+MClmb3IoZS5pdXNocm4oZik7Zi0tID4wOykoaS5pc09kZCgpfHxvLmlzT2RkKCkpJiYoaS5pYWRkKHUpLG8uaXN1YihoKSksaS5pdXNocm4oMSksby5pdXNocm4oMSk7Zm9yKHZhciBkPTAsZz0xOzA9PShyLndvcmRzWzBdJmcpJiZkPDI2OysrZCxnPDw9MSk7aWYoZD4wKWZvcihyLml1c2hybihkKTtkLS0gPjA7KShzLmlzT2RkKCl8fGwuaXNPZGQoKSkmJihzLmlhZGQodSksbC5pc3ViKGgpKSxzLml1c2hybigxKSxsLml1c2hybigxKTtlLmNtcChyKT49MD8oZS5pc3ViKHIpLGkuaXN1YihzKSxvLmlzdWIobCkpOihyLmlzdWIoZSkscy5pc3ViKGkpLGwuaXN1YihvKSl9cmV0dXJue2E6cyxiOmwsZ2NkOnIuaXVzaGxuKGMpfX0sYS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUpLG4oIXQuaXNaZXJvKCkpO3ZhciBlPXRoaXMscj10LmNsb25lKCk7ZT0wIT09ZS5uZWdhdGl2ZT9lLnVtb2QodCk6ZS5jbG9uZSgpO2Zvcih2YXIgaSxvPW5ldyBhKDEpLHM9bmV3IGEoMCksbD1yLmNsb25lKCk7ZS5jbXBuKDEpPjAmJnIuY21wbigxKT4wOyl7Zm9yKHZhciBjPTAsdT0xOzA9PShlLndvcmRzWzBdJnUpJiZjPDI2OysrYyx1PDw9MSk7aWYoYz4wKWZvcihlLml1c2hybihjKTtjLS0gPjA7KW8uaXNPZGQoKSYmby5pYWRkKGwpLG8uaXVzaHJuKDEpO2Zvcih2YXIgaD0wLGY9MTswPT0oci53b3Jkc1swXSZmKSYmaDwyNjsrK2gsZjw8PTEpO2lmKGg+MClmb3Ioci5pdXNocm4oaCk7aC0tID4wOylzLmlzT2RkKCkmJnMuaWFkZChsKSxzLml1c2hybigxKTtlLmNtcChyKT49MD8oZS5pc3ViKHIpLG8uaXN1YihzKSk6KHIuaXN1YihlKSxzLmlzdWIobykpfXJldHVybihpPTA9PT1lLmNtcG4oMSk/bzpzKS5jbXBuKDApPDAmJmkuaWFkZCh0KSxpfSxhLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24odCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gdC5hYnMoKTtpZih0LmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBlPXRoaXMuY2xvbmUoKSxyPXQuY2xvbmUoKTtlLm5lZ2F0aXZlPTAsci5uZWdhdGl2ZT0wO2Zvcih2YXIgbj0wO2UuaXNFdmVuKCkmJnIuaXNFdmVuKCk7bisrKWUuaXVzaHJuKDEpLHIuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtlLmlzRXZlbigpOyllLml1c2hybigxKTtmb3IoO3IuaXNFdmVuKCk7KXIuaXVzaHJuKDEpO3ZhciBpPWUuY21wKHIpO2lmKGk8MCl7dmFyIGE9ZTtlPXIscj1hfWVsc2UgaWYoMD09PWl8fDA9PT1yLmNtcG4oMSkpYnJlYWs7ZS5pc3ViKHIpfXJldHVybiByLml1c2hsbihuKX0sYS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lZ2NkKHQpLmEudW1vZCh0KX0sYS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxhLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sYS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMud29yZHNbMF0mdH0sYS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2LGk9MTw8ZTtpZih0aGlzLmxlbmd0aDw9cilyZXR1cm4gdGhpcy5fZXhwYW5kKHIrMSksdGhpcy53b3Jkc1tyXXw9aSx0aGlzO2Zvcih2YXIgYT1pLG89cjswIT09YSYmbzx0aGlzLmxlbmd0aDtvKyspe3ZhciBzPTB8dGhpcy53b3Jkc1tvXTthPShzKz1hKT4+PjI2LHMmPTY3MTA4ODYzLHRoaXMud29yZHNbb109c31yZXR1cm4gMCE9PWEmJih0aGlzLndvcmRzW29dPWEsdGhpcy5sZW5ndGgrKyksdGhpc30sYS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LGEucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24odCl7dmFyIGUscj10PDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFyKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZyKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKWU9MTtlbHNle3ImJih0PS10KSxuKHQ8PTY3MTA4ODYzLFwiTnVtYmVyIGlzIHRvbyBiaWdcIik7dmFyIGk9MHx0aGlzLndvcmRzWzBdO2U9aT09PXQ/MDppPHQ/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtZTplfSxhLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24odCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgZT10aGlzLnVjbXAodCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWU6ZX0sYS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbih0KXtpZih0aGlzLmxlbmd0aD50Lmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDx0Lmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBuPTB8dGhpcy53b3Jkc1tyXSxpPTB8dC53b3Jkc1tyXTtpZihuIT09aSl7bjxpP2U9LTE6bj5pJiYoZT0xKTticmVha319cmV0dXJuIGV9LGEucHJvdG90eXBlLmd0bj1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXRoaXMuY21wbih0KX0sYS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10aGlzLmNtcCh0KX0sYS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPj0wfSxhLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPj0wfSxhLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24odCl7cmV0dXJuLTE9PT10aGlzLmNtcG4odCl9LGEucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHQpe3JldHVybi0xPT09dGhpcy5jbXAodCl9LGEucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KTw9MH0sYS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KTw9MH0sYS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5jbXBuKHQpfSxhLnByb3RvdHlwZS5lcT1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuY21wKHQpfSxhLnJlZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHcodCl9LGEucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuKCF0aGlzLnJlZCxcIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHRcIiksbigwPT09dGhpcy5uZWdhdGl2ZSxcInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzXCIpLHQuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZCh0KX0sYS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dFwiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sYS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlZD10LHRoaXN9LGEucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuKCF0aGlzLnJlZCxcIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHRcIiksdGhpcy5fZm9yY2VSZWQodCl9LGEucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuYWRkKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5pYWRkKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuc3ViKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5pc3ViKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuc2hsKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyx0KSx0aGlzLnJlZC5tdWwodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyx0KSx0aGlzLnJlZC5pbXVsKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LGEucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LGEucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LGEucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LGEucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LGEucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCYmIXQucmVkLFwicmVkUG93KG5vcm1hbE51bSlcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsdCl9O3ZhciB2PXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gbSh0LGUpe3RoaXMubmFtZT10LHRoaXMucD1uZXcgYShlLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgYSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24geSgpe20uY2FsbCh0aGlzLFwiazI1NlwiLFwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmZcIil9ZnVuY3Rpb24geCgpe20uY2FsbCh0aGlzLFwicDIyNFwiLFwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDFcIil9ZnVuY3Rpb24gYigpe20uY2FsbCh0aGlzLFwicDE5MlwiLFwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmZcIil9ZnVuY3Rpb24gXygpe20uY2FsbCh0aGlzLFwiMjU1MTlcIixcIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWRcIil9ZnVuY3Rpb24gdyh0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7dmFyIGU9YS5fcHJpbWUodCk7dGhpcy5tPWUucCx0aGlzLnByaW1lPWV9ZWxzZSBuKHQuZ3RuKDEpLFwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxXCIpLHRoaXMubT10LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBrKHQpe3cuY2FsbCh0aGlzLHQpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IGEoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9bS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciB0PW5ldyBhKG51bGwpO3JldHVybiB0LndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksdH0sbS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbih0KXt2YXIgZSxyPXQ7ZG97dGhpcy5zcGxpdChyLHRoaXMudG1wKSxlPShyPShyPXRoaXMuaW11bEsocikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShlPnRoaXMubik7dmFyIG49ZTx0aGlzLm4/LTE6ci51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1uPyhyLndvcmRzWzBdPTAsci5sZW5ndGg9MSk6bj4wP3IuaXN1Yih0aGlzLnApOnIuc3RyaXAoKSxyfSxtLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LGUpe3QuaXVzaHJuKHRoaXMubiwwLGUpfSxtLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXtyZXR1cm4gdC5pbXVsKHRoaXMuayl9LGkoeSxtKSx5LnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1NYXRoLm1pbih0Lmxlbmd0aCw5KSxuPTA7bjxyO24rKyllLndvcmRzW25dPXQud29yZHNbbl07aWYoZS5sZW5ndGg9cix0Lmxlbmd0aDw9OSlyZXR1cm4gdC53b3Jkc1swXT0wLHZvaWQodC5sZW5ndGg9MSk7dmFyIGk9dC53b3Jkc1s5XTtmb3IoZS53b3Jkc1tlLmxlbmd0aCsrXT00MTk0MzAzJmksbj0xMDtuPHQubGVuZ3RoO24rKyl7dmFyIGE9MHx0LndvcmRzW25dO3Qud29yZHNbbi0xMF09KDQxOTQzMDMmYSk8PDR8aT4+PjIyLGk9YX1pPj4+PTIyLHQud29yZHNbbi0xMF09aSwwPT09aSYmdC5sZW5ndGg+MTA/dC5sZW5ndGgtPTEwOnQubGVuZ3RoLT05fSx5LnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXt0LndvcmRzW3QubGVuZ3RoXT0wLHQud29yZHNbdC5sZW5ndGgrMV09MCx0Lmxlbmd0aCs9Mjtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPTB8dC53b3Jkc1tyXTtlKz05Nzcqbix0LndvcmRzW3JdPTY3MTA4ODYzJmUsZT02NCpuKyhlLzY3MTA4ODY0fDApfXJldHVybiAwPT09dC53b3Jkc1t0Lmxlbmd0aC0xXSYmKHQubGVuZ3RoLS0sMD09PXQud29yZHNbdC5sZW5ndGgtMV0mJnQubGVuZ3RoLS0pLHR9LGkoeCxtKSxpKGIsbSksaShfLG0pLF8ucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49MTkqKDB8dC53b3Jkc1tyXSkrZSxpPTY3MTA4ODYzJm47bj4+Pj0yNix0LndvcmRzW3JdPWksZT1ufXJldHVybiAwIT09ZSYmKHQud29yZHNbdC5sZW5ndGgrK109ZSksdH0sYS5fcHJpbWU9ZnVuY3Rpb24odCl7aWYodlt0XSlyZXR1cm4gdlt0XTt2YXIgZTtpZihcImsyNTZcIj09PXQpZT1uZXcgeTtlbHNlIGlmKFwicDIyNFwiPT09dCllPW5ldyB4O2Vsc2UgaWYoXCJwMTkyXCI9PT10KWU9bmV3IGI7ZWxzZXtpZihcInAyNTUxOVwiIT09dCl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHByaW1lIFwiK3QpO2U9bmV3IF99cmV0dXJuIHZbdF09ZSxlfSx3LnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlLFwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXNcIiksbih0LnJlZCxcInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIil9LHcucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHQsZSl7bigwPT0odC5uZWdhdGl2ZXxlLm5lZ2F0aXZlKSxcInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzXCIpLG4odC5yZWQmJnQucmVkPT09ZS5yZWQsXCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpfSx3LnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZSh0KS5fZm9yY2VSZWQodGhpcyk6dC51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNaZXJvKCk/dC5jbG9uZSgpOnRoaXMubS5zdWIodCkuX2ZvcmNlUmVkKHRoaXMpfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5hZGQoZSk7cmV0dXJuIHIuY21wKHRoaXMubSk+PTAmJnIuaXN1Yih0aGlzLm0pLHIuX2ZvcmNlUmVkKHRoaXMpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuaWFkZChlKTtyZXR1cm4gci5jbXAodGhpcy5tKT49MCYmci5pc3ViKHRoaXMubSkscn0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuc3ViKGUpO3JldHVybiByLmNtcG4oMCk8MCYmci5pYWRkKHRoaXMubSksci5fZm9yY2VSZWQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5pc3ViKGUpO3JldHVybiByLmNtcG4oMCk8MCYmci5pYWRkKHRoaXMubSkscn0sdy5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEodCksdGhpcy5pbW9kKHQudXNobG4oZSkpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIodCxlKSx0aGlzLmltb2QodC5pbXVsKGUpKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIodCxlKSx0aGlzLmltb2QodC5tdWwoZSkpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltdWwodCx0LmNsb25lKCkpfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubXVsKHQsdCl9LHcucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24odCl7aWYodC5pc1plcm8oKSlyZXR1cm4gdC5jbG9uZSgpO3ZhciBlPXRoaXMubS5hbmRsbigzKTtpZihuKGUlMj09MSksMz09PWUpe3ZhciByPXRoaXMubS5hZGQobmV3IGEoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3codCxyKX1mb3IodmFyIGk9dGhpcy5tLnN1Ym4oMSksbz0wOyFpLmlzWmVybygpJiYwPT09aS5hbmRsbigxKTspbysrLGkuaXVzaHJuKDEpO24oIWkuaXNaZXJvKCkpO3ZhciBzPW5ldyBhKDEpLnRvUmVkKHRoaXMpLGw9cy5yZWROZWcoKSxjPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSx1PXRoaXMubS5iaXRMZW5ndGgoKTtmb3IodT1uZXcgYSgyKnUqdSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHUsYykuY21wKGwpOyl1LnJlZElBZGQobCk7Zm9yKHZhciBoPXRoaXMucG93KHUsaSksZj10aGlzLnBvdyh0LGkuYWRkbigxKS5pdXNocm4oMSkpLHA9dGhpcy5wb3codCxpKSxkPW87MCE9PXAuY21wKHMpOyl7Zm9yKHZhciBnPXAsdj0wOzAhPT1nLmNtcChzKTt2KyspZz1nLnJlZFNxcigpO24odjxkKTt2YXIgbT10aGlzLnBvdyhoLG5ldyBhKDEpLml1c2hsbihkLXYtMSkpO2Y9Zi5yZWRNdWwobSksaD1tLnJlZFNxcigpLHA9cC5yZWRNdWwoaCksZD12fXJldHVybiBmfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1lLm5lZ2F0aXZlPyhlLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGUpLnJlZE5lZygpKTp0aGlzLmltb2QoZSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbih0LGUpe2lmKGUuaXNaZXJvKCkpcmV0dXJuIG5ldyBhKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1lLmNtcG4oMSkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgcj1uZXcgQXJyYXkoMTYpO3JbMF09bmV3IGEoMSkudG9SZWQodGhpcyksclsxXT10O2Zvcih2YXIgbj0yO248ci5sZW5ndGg7bisrKXJbbl09dGhpcy5tdWwocltuLTFdLHQpO3ZhciBpPXJbMF0sbz0wLHM9MCxsPWUuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1sJiYobD0yNiksbj1lLmxlbmd0aC0xO24+PTA7bi0tKXtmb3IodmFyIGM9ZS53b3Jkc1tuXSx1PWwtMTt1Pj0wO3UtLSl7dmFyIGg9Yz4+dSYxO2khPT1yWzBdJiYoaT10aGlzLnNxcihpKSksMCE9PWh8fDAhPT1vPyhvPDw9MSxvfD1oLCg0PT09KytzfHwwPT09biYmMD09PXUpJiYoaT10aGlzLm11bChpLHJbb10pLHM9MCxvPTApKTpzPTB9bD0yNn1yZXR1cm4gaX0sdy5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHQpe3ZhciBlPXQudW1vZCh0aGlzLm0pO3JldHVybiBlPT09dD9lLmNsb25lKCk6ZX0sdy5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24odCl7dmFyIGU9dC5jbG9uZSgpO3JldHVybiBlLnJlZD1udWxsLGV9LGEubW9udD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGsodCl9LGkoayx3KSxrLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW1vZCh0LnVzaGxuKHRoaXMuc2hpZnQpKX0say5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbW9kKHQubXVsKHRoaXMucmludikpO3JldHVybiBlLnJlZD1udWxsLGV9LGsucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCxlKXtpZih0LmlzWmVybygpfHxlLmlzWmVybygpKXJldHVybiB0LndvcmRzWzBdPTAsdC5sZW5ndGg9MSx0O3ZhciByPXQuaW11bChlKSxuPXIubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGk9ci5pc3ViKG4pLml1c2hybih0aGlzLnNoaWZ0KSxhPWk7cmV0dXJuIGkuY21wKHRoaXMubSk+PTA/YT1pLmlzdWIodGhpcy5tKTppLmNtcG4oMCk8MCYmKGE9aS5pYWRkKHRoaXMubSkpLGEuX2ZvcmNlUmVkKHRoaXMpfSxrLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCxlKXtpZih0LmlzWmVybygpfHxlLmlzWmVybygpKXJldHVybiBuZXcgYSgwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHI9dC5tdWwoZSksbj1yLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxpPXIuaXN1YihuKS5pdXNocm4odGhpcy5zaGlmdCksbz1pO3JldHVybiBpLmNtcCh0aGlzLm0pPj0wP289aS5pc3ViKHRoaXMubSk6aS5jbXBuKDApPDAmJihvPWkuaWFkZCh0aGlzLm0pKSxvLl9mb3JjZVJlZCh0aGlzKX0say5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbW9kKHQuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShcInVuZGVmaW5lZFwiPT10eXBlb2YgZXx8ZSx0aGlzKX0se2J1ZmZlcjo5NH1dLDg2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXQubGVuZ3RoLGE9MDtmb3IoZT0wO2U8aTsrK2UpYSs9dFtlXS5sZW5ndGg7dmFyIG89bmV3IEFycmF5KGEpLHM9MDtmb3IoZT0wO2U8aTsrK2Upe3ZhciBsPXRbZV0sYz1sLmxlbmd0aDtmb3Iocj0wO3I8YzsrK3Ipe3ZhciB1PW9bcysrXT1uZXcgQXJyYXkoYy0xKSxoPTA7Zm9yKG49MDtuPGM7KytuKW4hPT1yJiYodVtoKytdPWxbbl0pO2lmKDEmcil7dmFyIGY9dVsxXTt1WzFdPXVbMF0sdVswXT1mfX19cmV0dXJuIG99fSx7fV0sODc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDE6cmV0dXJuIG49W10sYyhpPXQsaSx1LCEwKSxuO2Nhc2UgMjpyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2ModCx0LGUsITApOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG49W10sYyh0LGUsdSwhMSksbn0odCxlKTtjYXNlIDM6cmV0dXJuIGModCxlLHIsITEpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiYm94LWludGVyc2VjdDogSW52YWxpZCBhcmd1bWVudHNcIil9dmFyIGl9O3ZhciBuLGk9dChcInR5cGVkYXJyYXktcG9vbFwiKSxhPXQoXCIuL2xpYi9zd2VlcFwiKSxvPXQoXCIuL2xpYi9pbnRlcnNlY3RcIik7ZnVuY3Rpb24gcyh0LGUpe2Zvcih2YXIgcj0wO3I8dDsrK3IpaWYoIShlW3JdPD1lW3IrdF0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGwodCxlLHIsbil7Zm9yKHZhciBpPTAsYT0wLG89MCxsPXQubGVuZ3RoO288bDsrK28pe3ZhciBjPXRbb107aWYoIXMoZSxjKSl7Zm9yKHZhciB1PTA7dTwyKmU7Kyt1KXJbaSsrXT1jW3VdO25bYSsrXT1vfX1yZXR1cm4gYX1mdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBzPXQubGVuZ3RoLGM9ZS5sZW5ndGg7aWYoIShzPD0wfHxjPD0wKSl7dmFyIHU9dFswXS5sZW5ndGg+Pj4xO2lmKCEodTw9MCkpe3ZhciBoLGY9aS5tYWxsb2NEb3VibGUoMip1KnMpLHA9aS5tYWxsb2NJbnQzMihzKTtpZigocz1sKHQsdSxmLHApKT4wKXtpZigxPT09dSYmbilhLmluaXQocyksaD1hLnN3ZWVwQ29tcGxldGUodSxyLDAscyxmLHAsMCxzLGYscCk7ZWxzZXt2YXIgZD1pLm1hbGxvY0RvdWJsZSgyKnUqYyksZz1pLm1hbGxvY0ludDMyKGMpOyhjPWwoZSx1LGQsZykpPjAmJihhLmluaXQocytjKSxoPTE9PT11P2Euc3dlZXBCaXBhcnRpdGUodSxyLDAscyxmLHAsMCxjLGQsZyk6byh1LHIsbixzLGYscCxjLGQsZyksaS5mcmVlKGQpLGkuZnJlZShnKSl9aS5mcmVlKGYpLGkuZnJlZShwKX1yZXR1cm4gaH19fWZ1bmN0aW9uIHUodCxlKXtuLnB1c2goW3QsZV0pfX0se1wiLi9saWIvaW50ZXJzZWN0XCI6ODksXCIuL2xpYi9zd2VlcFwiOjkzLFwidHlwZWRhcnJheS1wb29sXCI6NTMwfV0sODg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1cImRcIixpPVwiYXhcIixhPVwidnZcIixvPVwiZnBcIixzPVwiZXNcIixsPVwicnNcIixjPVwicmVcIix1PVwicmJcIixoPVwicmlcIixmPVwicnBcIixwPVwiYnNcIixkPVwiYmVcIixnPVwiYmJcIix2PVwiYmlcIixtPVwiYnBcIix5PVwicnZcIix4PVwiUVwiLGI9W24saSxhLGwsYyx1LGgscCxkLGcsdl07ZnVuY3Rpb24gXyh0KXt2YXIgZT1cImJydXRlRm9yY2VcIisodD9cIkZ1bGxcIjpcIlBhcnRpYWxcIikscj1bXSxfPWIuc2xpY2UoKTt0fHxfLnNwbGljZSgzLDAsbyk7dmFyIHc9W1wiZnVuY3Rpb24gXCIrZStcIihcIitfLmpvaW4oKStcIil7XCJdO2Z1bmN0aW9uIGsoZSxvKXt2YXIgXz1mdW5jdGlvbih0LGUscil7dmFyIG89XCJicnV0ZUZvcmNlXCIrKHQ/XCJSZWRcIjpcIkJsdWVcIikrKGU/XCJGbGlwXCI6XCJcIikrKHI/XCJGdWxsXCI6XCJcIiksXz1bXCJmdW5jdGlvbiBcIixvLFwiKFwiLGIuam9pbigpLFwiKXtcIixcInZhciBcIixzLFwiPTIqXCIsbixcIjtcIl0sdz1cImZvcih2YXIgaT1cIitsK1wiLFwiK2YrXCI9XCIrcytcIipcIitsK1wiO2k8XCIrYytcIjsrK2ksXCIrZitcIis9XCIrcytcIil7dmFyIHgwPVwiK3UrXCJbXCIraStcIitcIitmK1wiXSx4MT1cIit1K1wiW1wiK2krXCIrXCIrZitcIitcIituK1wiXSx4aT1cIitoK1wiW2ldO1wiLGs9XCJmb3IodmFyIGo9XCIrcCtcIixcIittK1wiPVwiK3MrXCIqXCIrcCtcIjtqPFwiK2QrXCI7KytqLFwiK20rXCIrPVwiK3MrXCIpe3ZhciB5MD1cIitnK1wiW1wiK2krXCIrXCIrbStcIl0sXCIrKHI/XCJ5MT1cIitnK1wiW1wiK2krXCIrXCIrbStcIitcIituK1wiXSxcIjpcIlwiKStcInlpPVwiK3YrXCJbal07XCI7cmV0dXJuIHQ/Xy5wdXNoKHcseCxcIjpcIixrKTpfLnB1c2goayx4LFwiOlwiLHcpLHI/Xy5wdXNoKFwiaWYoeTE8eDB8fHgxPHkwKWNvbnRpbnVlO1wiKTplP18ucHVzaChcImlmKHkwPD14MHx8eDE8eTApY29udGludWU7XCIpOl8ucHVzaChcImlmKHkwPHgwfHx4MTx5MCljb250aW51ZTtcIiksXy5wdXNoKFwiZm9yKHZhciBrPVwiK2krXCIrMTtrPFwiK24rXCI7KytrKXt2YXIgcjA9XCIrdStcIltrK1wiK2YrXCJdLHIxPVwiK3UrXCJbaytcIituK1wiK1wiK2YrXCJdLGIwPVwiK2crXCJbaytcIittK1wiXSxiMT1cIitnK1wiW2srXCIrbitcIitcIittK1wiXTtpZihyMTxiMHx8YjE8cjApY29udGludWUgXCIreCtcIjt9dmFyIFwiK3krXCI9XCIrYStcIihcIiksZT9fLnB1c2goXCJ5aSx4aVwiKTpfLnB1c2goXCJ4aSx5aVwiKSxfLnB1c2goXCIpO2lmKFwiK3krXCIhPT12b2lkIDApcmV0dXJuIFwiK3krXCI7fX19XCIpLHtuYW1lOm8sY29kZTpfLmpvaW4oXCJcIil9fShlLG8sdCk7ci5wdXNoKF8uY29kZSksdy5wdXNoKFwicmV0dXJuIFwiK18ubmFtZStcIihcIitiLmpvaW4oKStcIik7XCIpfXcucHVzaChcImlmKFwiK2MrXCItXCIrbCtcIj5cIitkK1wiLVwiK3ArXCIpe1wiKSx0PyhrKCEwLCExKSx3LnB1c2goXCJ9ZWxzZXtcIiksayghMSwhMSkpOih3LnB1c2goXCJpZihcIitvK1wiKXtcIiksayghMCwhMCksdy5wdXNoKFwifWVsc2V7XCIpLGsoITAsITEpLHcucHVzaChcIn19ZWxzZXtpZihcIitvK1wiKXtcIiksayghMSwhMCksdy5wdXNoKFwifWVsc2V7XCIpLGsoITEsITEpLHcucHVzaChcIn1cIikpLHcucHVzaChcIn19cmV0dXJuIFwiK2UpO3ZhciBBPXIuam9pbihcIlwiKSt3LmpvaW4oXCJcIik7cmV0dXJuIG5ldyBGdW5jdGlvbihBKSgpfXIucGFydGlhbD1fKCExKSxyLmZ1bGw9XyghMCl9LHt9XSw4OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLHUsUyxFLEMsTCl7IWZ1bmN0aW9uKHQsZSl7dmFyIHI9OCppLmxvZzIoZSsxKSoodCsxKXwwLGE9aS5uZXh0UG93MihiKnIpO3cubGVuZ3RoPGEmJihuLmZyZWUodyksdz1uLm1hbGxvY0ludDMyKGEpKTt2YXIgbz1pLm5leHRQb3cyKF8qcik7azxvJiYobi5mcmVlKGspLGs9bi5tYWxsb2NEb3VibGUobykpfSh0LGErRSk7dmFyIHosTz0wLEk9Mip0O0EoTysrLDAsMCxhLDAsRSxyPzE2OjAsLTEvMCwxLzApLHJ8fEEoTysrLDAsMCxFLDAsYSwxLC0xLzAsMS8wKTtmb3IoO08+MDspe3ZhciBEPShPLT0xKSpiLFA9d1tEXSxSPXdbRCsxXSxGPXdbRCsyXSxCPXdbRCszXSxOPXdbRCs0XSxqPXdbRCs1XSxWPU8qXyxVPWtbVl0scT1rW1YrMV0sSD0xJmosRz0hISgxNiZqKSxZPXUsVz1TLFg9QyxaPUw7aWYoSCYmKFk9QyxXPUwsWD11LFo9UyksISgyJmomJihGPXYodCxQLFIsRixZLFcscSksUj49Ril8fDQmaiYmKFI9bSh0LFAsUixGLFksVyxVKSk+PUYpKXt2YXIgJD1GLVIsSj1OLUI7aWYoRyl7aWYodCokKigkK0opPHApe2lmKHZvaWQgMCE9PSh6PWwuc2NhbkNvbXBsZXRlKHQsUCxlLFIsRixZLFcsQixOLFgsWikpKXJldHVybiB6O2NvbnRpbnVlfX1lbHNle2lmKHQqTWF0aC5taW4oJCxKKTxoKXtpZih2b2lkIDAhPT0oej1vKHQsUCxlLEgsUixGLFksVyxCLE4sWCxaKSkpcmV0dXJuIHo7Y29udGludWV9aWYodCokKko8Zil7aWYodm9pZCAwIT09KHo9bC5zY2FuQmlwYXJ0aXRlKHQsUCxlLEgsUixGLFksVyxCLE4sWCxaKSkpcmV0dXJuIHo7Y29udGludWV9fXZhciBLPWQodCxQLFIsRixZLFcsVSxxKTtpZihSPEspaWYodCooSy1SKTxoKXtpZih2b2lkIDAhPT0oej1zKHQsUCsxLGUsUixLLFksVyxCLE4sWCxaKSkpcmV0dXJuIHp9ZWxzZSBpZihQPT09dC0yKXtpZih2b2lkIDAhPT0oej1IP2wuc3dlZXBCaXBhcnRpdGUodCxlLEIsTixYLFosUixLLFksVyk6bC5zd2VlcEJpcGFydGl0ZSh0LGUsUixLLFksVyxCLE4sWCxaKSkpcmV0dXJuIHp9ZWxzZSBBKE8rKyxQKzEsUixLLEIsTixILC0xLzAsMS8wKSxBKE8rKyxQKzEsQixOLFIsSywxXkgsLTEvMCwxLzApO2lmKEs8Ril7dmFyIFE9Yyh0LFAsQixOLFgsWiksdHQ9WFtJKlErUF0sZXQ9Zyh0LFAsUSxOLFgsWix0dCk7aWYoZXQ8TiYmQShPKyssUCxLLEYsZXQsTiwoNHxIKSsoRz8xNjowKSx0dCxxKSxCPFEmJkEoTysrLFAsSyxGLEIsUSwoMnxIKSsoRz8xNjowKSxVLHR0KSxRKzE9PT1ldCl7aWYodm9pZCAwIT09KHo9Rz9NKHQsUCxlLEssRixZLFcsUSxYLFpbUV0pOlQodCxQLGUsSCxLLEYsWSxXLFEsWCxaW1FdKSkpcmV0dXJuIHp9ZWxzZSBpZihRPGV0KXt2YXIgcnQ7aWYoRyl7aWYocnQ9eSh0LFAsSyxGLFksVyx0dCksSzxydCl7dmFyIG50PWcodCxQLEsscnQsWSxXLHR0KTtpZihQPT09dC0yKXtpZihLPG50JiZ2b2lkIDAhPT0oej1sLnN3ZWVwQ29tcGxldGUodCxlLEssbnQsWSxXLFEsZXQsWCxaKSkpcmV0dXJuIHo7aWYobnQ8cnQmJnZvaWQgMCE9PSh6PWwuc3dlZXBCaXBhcnRpdGUodCxlLG50LHJ0LFksVyxRLGV0LFgsWikpKXJldHVybiB6fWVsc2UgSzxudCYmQShPKyssUCsxLEssbnQsUSxldCwxNiwtMS8wLDEvMCksbnQ8cnQmJihBKE8rKyxQKzEsbnQscnQsUSxldCwwLC0xLzAsMS8wKSxBKE8rKyxQKzEsUSxldCxudCxydCwxLC0xLzAsMS8wKSl9fWVsc2UgcnQ9SD94KHQsUCxLLEYsWSxXLHR0KTp5KHQsUCxLLEYsWSxXLHR0KSxLPHJ0JiYoUD09PXQtMj96PUg/bC5zd2VlcEJpcGFydGl0ZSh0LGUsUSxldCxYLFosSyxydCxZLFcpOmwuc3dlZXBCaXBhcnRpdGUodCxlLEsscnQsWSxXLFEsZXQsWCxaKTooQShPKyssUCsxLEsscnQsUSxldCxILC0xLzAsMS8wKSxBKE8rKyxQKzEsUSxldCxLLHJ0LDFeSCwtMS8wLDEvMCkpKX19fX19O3ZhciBuPXQoXCJ0eXBlZGFycmF5LXBvb2xcIiksaT10KFwiYml0LXR3aWRkbGVcIiksYT10KFwiLi9icnV0ZVwiKSxvPWEucGFydGlhbCxzPWEuZnVsbCxsPXQoXCIuL3N3ZWVwXCIpLGM9dChcIi4vbWVkaWFuXCIpLHU9dChcIi4vcGFydGl0aW9uXCIpLGg9MTI4LGY9MTw8MjIscD0xPDwyMixkPXUoXCIhKGxvPj1wMCkmJiEocDE+PWhpKVwiLFtcInAwXCIsXCJwMVwiXSksZz11KFwibG89PT1wMFwiLFtcInAwXCJdKSx2PXUoXCJsbzxwMFwiLFtcInAwXCJdKSxtPXUoXCJoaTw9cDBcIixbXCJwMFwiXSkseT11KFwibG88PXAwJiZwMDw9aGlcIixbXCJwMFwiXSkseD11KFwibG88cDAmJnAwPD1oaVwiLFtcInAwXCJdKSxiPTYsXz0yLHc9bi5tYWxsb2NJbnQzMigxMDI0KSxrPW4ubWFsbG9jRG91YmxlKDEwMjQpO2Z1bmN0aW9uIEEodCxlLHIsbixpLGEsbyxzLGwpe3ZhciBjPWIqdDt3W2NdPWUsd1tjKzFdPXIsd1tjKzJdPW4sd1tjKzNdPWksd1tjKzRdPWEsd1tjKzVdPW87dmFyIHU9Xyp0O2tbdV09cyxrW3UrMV09bH1mdW5jdGlvbiBUKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7dmFyIGg9Mip0LGY9bCpoLHA9Y1tmK2VdO3Q6Zm9yKHZhciBkPWksZz1pKmg7ZDxhOysrZCxnKz1oKXt2YXIgdj1vW2crZV0sbT1vW2crZSt0XTtpZighKHA8dnx8bTxwKSYmKCFufHxwIT09dikpe2Zvcih2YXIgeSx4PXNbZF0sYj1lKzE7Yjx0OysrYil7dj1vW2crYl0sbT1vW2crYit0XTt2YXIgXz1jW2YrYl0sdz1jW2YrYit0XTtpZihtPF98fHc8diljb250aW51ZSB0fWlmKHZvaWQgMCE9PSh5PW4/cih1LHgpOnIoeCx1KSkpcmV0dXJuIHl9fX1mdW5jdGlvbiBNKHQsZSxyLG4saSxhLG8scyxsLGMpe3ZhciB1PTIqdCxoPXMqdSxmPWxbaCtlXTt0OmZvcih2YXIgcD1uLGQ9bip1O3A8aTsrK3AsZCs9dSl7dmFyIGc9b1twXTtpZihnIT09Yyl7dmFyIHY9YVtkK2VdLG09YVtkK2UrdF07aWYoIShmPHZ8fG08Zikpe2Zvcih2YXIgeT1lKzE7eTx0OysreSl7dj1hW2QreV0sbT1hW2QreSt0XTt2YXIgeD1sW2greV0sYj1sW2greSt0XTtpZihtPHh8fGI8diljb250aW51ZSB0fXZhciBfPXIoZyxjKTtpZih2b2lkIDAhPT1fKXJldHVybiBffX19fX0se1wiLi9icnV0ZVwiOjg4LFwiLi9tZWRpYW5cIjo5MCxcIi4vcGFydGl0aW9uXCI6OTEsXCIuL3N3ZWVwXCI6OTMsXCJiaXQtdHdpZGRsZVwiOjgzLFwidHlwZWRhcnJheS1wb29sXCI6NTMwfV0sOTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzLGwpe2lmKG88PXIrMSlyZXR1cm4gcjt2YXIgYz1yLHU9byxoPW8rcj4+PjEsZj0yKnQscD1oLGQ9c1tmKmgrZV07Zm9yKDtjPHU7KXtpZih1LWM8aSl7YSh0LGUsYyx1LHMsbCksZD1zW2YqaCtlXTticmVha312YXIgZz11LWMsdj1NYXRoLnJhbmRvbSgpKmcrY3wwLG09c1tmKnYrZV0seT1NYXRoLnJhbmRvbSgpKmcrY3wwLHg9c1tmKnkrZV0sYj1NYXRoLnJhbmRvbSgpKmcrY3wwLF89c1tmKmIrZV07bTw9eD9fPj14PyhwPXksZD14KTptPj1fPyhwPXYsZD1tKToocD1iLGQ9Xyk6eD49Xz8ocD15LGQ9eCk6Xz49bT8ocD12LGQ9bSk6KHA9YixkPV8pO2Zvcih2YXIgdz1mKih1LTEpLGs9ZipwLEE9MDtBPGY7KytBLCsrdywrK2spe3ZhciBUPXNbd107c1t3XT1zW2tdLHNba109VH12YXIgTT1sW3UtMV07bFt1LTFdPWxbcF0sbFtwXT1NLHA9bih0LGUsYyx1LTEscyxsLGQpO2Zvcih2YXIgdz1mKih1LTEpLGs9ZipwLEE9MDtBPGY7KytBLCsrdywrK2spe3ZhciBUPXNbd107c1t3XT1zW2tdLHNba109VH12YXIgTT1sW3UtMV07aWYobFt1LTFdPWxbcF0sbFtwXT1NLGg8cCl7Zm9yKHU9cC0xO2M8dSYmc1tmKih1LTEpK2VdPT09ZDspdS09MTt1Kz0xfWVsc2V7aWYoIShwPGgpKWJyZWFrO2ZvcihjPXArMTtjPHUmJnNbZipjK2VdPT09ZDspYys9MX19cmV0dXJuIG4odCxlLHIsaCxzLGwsc1tmKmgrZV0pfTt2YXIgbj10KFwiLi9wYXJ0aXRpb25cIikoXCJsbzxwMFwiLFtcInAwXCJdKSxpPTg7ZnVuY3Rpb24gYSh0LGUscixuLGksYSl7Zm9yKHZhciBvPTIqdCxzPW8qKHIrMSkrZSxsPXIrMTtsPG47KytsLHMrPW8pZm9yKHZhciBjPWlbc10sdT1sLGg9byoobC0xKTt1PnImJmlbaCtlXT5jOy0tdSxoLT1vKXtmb3IodmFyIGY9aCxwPWgrbyxkPTA7ZDxvOysrZCwrK2YsKytwKXt2YXIgZz1pW2ZdO2lbZl09aVtwXSxpW3BdPWd9dmFyIHY9YVt1XTthW3VdPWFbdS0xXSxhW3UtMV09dn19fSx7XCIuL3BhcnRpdGlvblwiOjkxfV0sOTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1cImFiY2RlZlwiLnNwbGl0KFwiXCIpLmNvbmNhdChlKSxpPVtdO3QuaW5kZXhPZihcImxvXCIpPj0wJiZpLnB1c2goXCJsbz1lW2srbl1cIik7dC5pbmRleE9mKFwiaGlcIik+PTAmJmkucHVzaChcImhpPWVbaytvXVwiKTtyZXR1cm4gci5wdXNoKG4ucmVwbGFjZShcIl9cIixpLmpvaW4oKSkucmVwbGFjZShcIiRcIix0KSksRnVuY3Rpb24uYXBwbHkodm9pZCAwLHIpfTt2YXIgbj1cImZvcih2YXIgaj0yKmEsaz1qKmMsbD1rLG09YyxuPWIsbz1hK2IscD1jO2Q+cDsrK3Asays9ail7dmFyIF87aWYoJClpZihtPT09cCltKz0xLGwrPWo7ZWxzZXtmb3IodmFyIHM9MDtqPnM7KytzKXt2YXIgdD1lW2src107ZVtrK3NdPWVbbF0sZVtsKytdPXR9dmFyIHU9ZltwXTtmW3BdPWZbbV0sZlttKytdPXV9fXJldHVybiBtXCJ9LHt9XSw5MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2U8PTQqbj9pKDAsZS0xLHQpOmZ1bmN0aW9uIHQoZSxyLGgpe3ZhciBmPShyLWUrMSkvNnwwLHA9ZStmLGQ9ci1mLGc9ZStyPj4xLHY9Zy1mLG09ZytmLHk9cCx4PXYsYj1nLF89bSx3PWQsaz1lKzEsQT1yLTEsVD0wO2MoeSx4LGgpJiYoVD15LHk9eCx4PVQpO2MoXyx3LGgpJiYoVD1fLF89dyx3PVQpO2MoeSxiLGgpJiYoVD15LHk9YixiPVQpO2MoeCxiLGgpJiYoVD14LHg9YixiPVQpO2MoeSxfLGgpJiYoVD15LHk9XyxfPVQpO2MoYixfLGgpJiYoVD1iLGI9XyxfPVQpO2MoeCx3LGgpJiYoVD14LHg9dyx3PVQpO2MoeCxiLGgpJiYoVD14LHg9YixiPVQpO2MoXyx3LGgpJiYoVD1fLF89dyx3PVQpO3ZhciBNPWhbMip4XTt2YXIgUz1oWzIqeCsxXTt2YXIgRT1oWzIqX107dmFyIEM9aFsyKl8rMV07dmFyIEw9Mip5O3ZhciB6PTIqYjt2YXIgTz0yKnc7dmFyIEk9MipwO3ZhciBEPTIqZzt2YXIgUD0yKmQ7Zm9yKHZhciBSPTA7UjwyOysrUil7dmFyIEY9aFtMK1JdLEI9aFt6K1JdLE49aFtPK1JdO2hbSStSXT1GLGhbRCtSXT1CLGhbUCtSXT1OfW8odixlLGgpO28obSxyLGgpO2Zvcih2YXIgaj1rO2o8PUE7KytqKWlmKHUoaixNLFMsaCkpaiE9PWsmJmEoaixrLGgpLCsraztlbHNlIGlmKCF1KGosRSxDLGgpKWZvcig7Oyl7aWYodShBLEUsQyxoKSl7dShBLE0sUyxoKT8ocyhqLGssQSxoKSwrK2ssLS1BKTooYShqLEEsaCksLS1BKTticmVha31pZigtLUE8ailicmVha31sKGUsay0xLE0sUyxoKTtsKHIsQSsxLEUsQyxoKTtrLTItZTw9bj9pKGUsay0yLGgpOnQoZSxrLTIsaCk7ci0oQSsyKTw9bj9pKEErMixyLGgpOnQoQSsyLHIsaCk7QS1rPD1uP2koayxBLGgpOnQoayxBLGgpfSgwLGUtMSx0KX07dmFyIG49MzI7ZnVuY3Rpb24gaSh0LGUscil7Zm9yKHZhciBuPTIqKHQrMSksaT10KzE7aTw9ZTsrK2kpe2Zvcih2YXIgYT1yW24rK10sbz1yW24rK10scz1pLGw9bi0yO3MtLSA+dDspe3ZhciBjPXJbbC0yXSx1PXJbbC0xXTtpZihjPGEpYnJlYWs7aWYoYz09PWEmJnU8bylicmVhaztyW2xdPWMscltsKzFdPXUsbC09Mn1yW2xdPWEscltsKzFdPW99fWZ1bmN0aW9uIGEodCxlLHIpe2UqPTI7dmFyIG49clt0Kj0yXSxpPXJbdCsxXTtyW3RdPXJbZV0sclt0KzFdPXJbZSsxXSxyW2VdPW4scltlKzFdPWl9ZnVuY3Rpb24gbyh0LGUscil7ZSo9MixyW3QqPTJdPXJbZV0sclt0KzFdPXJbZSsxXX1mdW5jdGlvbiBzKHQsZSxyLG4pe2UqPTIscio9Mjt2YXIgaT1uW3QqPTJdLGE9blt0KzFdO25bdF09bltlXSxuW3QrMV09bltlKzFdLG5bZV09bltyXSxuW2UrMV09bltyKzFdLG5bcl09aSxuW3IrMV09YX1mdW5jdGlvbiBsKHQsZSxyLG4saSl7ZSo9MixpW3QqPTJdPWlbZV0saVtlXT1yLGlbdCsxXT1pW2UrMV0saVtlKzFdPW59ZnVuY3Rpb24gYyh0LGUscil7ZSo9Mjt2YXIgbj1yW3QqPTJdLGk9cltlXTtyZXR1cm4hKG48aSkmJihuIT09aXx8clt0KzFdPnJbZSsxXSl9ZnVuY3Rpb24gdSh0LGUscixuKXt2YXIgaT1uW3QqPTJdO3JldHVybiBpPGV8fGk9PT1lJiZuW3QrMV08cn19LHt9XSw5MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17aW5pdDpmdW5jdGlvbih0KXt2YXIgZT1pLm5leHRQb3cyKHQpO3MubGVuZ3RoPGUmJihuLmZyZWUocykscz1uLm1hbGxvY0ludDMyKGUpKTtsLmxlbmd0aDxlJiYobi5mcmVlKGwpLGw9bi5tYWxsb2NJbnQzMihlKSk7Yy5sZW5ndGg8ZSYmKG4uZnJlZShjKSxjPW4ubWFsbG9jSW50MzIoZSkpO3UubGVuZ3RoPGUmJihuLmZyZWUodSksdT1uLm1hbGxvY0ludDMyKGUpKTtoLmxlbmd0aDxlJiYobi5mcmVlKGgpLGg9bi5tYWxsb2NJbnQzMihlKSk7Zi5sZW5ndGg8ZSYmKG4uZnJlZShmKSxmPW4ubWFsbG9jSW50MzIoZSkpO3ZhciByPTgqZTtwLmxlbmd0aDxyJiYobi5mcmVlKHApLHA9bi5tYWxsb2NEb3VibGUocikpfSxzd2VlcEJpcGFydGl0ZTpmdW5jdGlvbih0LGUscixuLGksaCxmLHYsbSx5KXtmb3IodmFyIHg9MCxiPTIqdCxfPXQtMSx3PWItMSxrPXI7azxuOysrayl7dmFyIEE9aFtrXSxUPWIqaztwW3grK109aVtUK19dLHBbeCsrXT0tKEErMSkscFt4KytdPWlbVCt3XSxwW3grK109QX1mb3IodmFyIGs9ZjtrPHY7KytrKXt2YXIgQT15W2tdK28sTT1iKms7cFt4KytdPW1bTStfXSxwW3grK109LUEscFt4KytdPW1bTSt3XSxwW3grK109QX12YXIgUz14Pj4+MTthKHAsUyk7Zm9yKHZhciBFPTAsQz0wLGs9MDtrPFM7KytrKXt2YXIgTD0wfHBbMiprKzFdO2lmKEw+PW8pZChjLHUsQy0tLEw9TC1vfDApO2Vsc2UgaWYoTD49MClkKHMsbCxFLS0sTCk7ZWxzZSBpZihMPD0tbyl7TD0tTC1vfDA7Zm9yKHZhciB6PTA7ejxFOysreil7dmFyIE89ZShzW3pdLEwpO2lmKHZvaWQgMCE9PU8pcmV0dXJuIE99ZyhjLHUsQysrLEwpfWVsc2V7TD0tTC0xfDA7Zm9yKHZhciB6PTA7ejxDOysreil7dmFyIE89ZShMLGNbel0pO2lmKHZvaWQgMCE9PU8pcmV0dXJuIE99ZyhzLGwsRSsrLEwpfX19LHN3ZWVwQ29tcGxldGU6ZnVuY3Rpb24odCxlLHIsbixpLG8sdixtLHkseCl7Zm9yKHZhciBiPTAsXz0yKnQsdz10LTEsaz1fLTEsQT1yO0E8bjsrK0Epe3ZhciBUPW9bQV0rMTw8MSxNPV8qQTtwW2IrK109aVtNK3ddLHBbYisrXT0tVCxwW2IrK109aVtNK2tdLHBbYisrXT1UfWZvcih2YXIgQT12O0E8bTsrK0Epe3ZhciBUPXhbQV0rMTw8MSxTPV8qQTtwW2IrK109eVtTK3ddLHBbYisrXT0xfC1ULHBbYisrXT15W1Mra10scFtiKytdPTF8VH12YXIgRT1iPj4+MTthKHAsRSk7Zm9yKHZhciBDPTAsTD0wLHo9MCxBPTA7QTxFOysrQSl7dmFyIE89MHxwWzIqQSsxXSxJPTEmTztpZihBPEUtMSYmTz4+MT09cFsyKkErM10+PjEmJihJPTIsQSs9MSksTzwwKXtmb3IodmFyIEQ9LShPPj4xKS0xLFA9MDtQPHo7KytQKXt2YXIgUj1lKGhbUF0sRCk7aWYodm9pZCAwIT09UilyZXR1cm4gUn1pZigwIT09SSlmb3IodmFyIFA9MDtQPEM7KytQKXt2YXIgUj1lKHNbUF0sRCk7aWYodm9pZCAwIT09UilyZXR1cm4gUn1pZigxIT09SSlmb3IodmFyIFA9MDtQPEw7KytQKXt2YXIgUj1lKGNbUF0sRCk7aWYodm9pZCAwIT09UilyZXR1cm4gUn0wPT09ST9nKHMsbCxDKyssRCk6MT09PUk/ZyhjLHUsTCsrLEQpOjI9PT1JJiZnKGgsZix6KyssRCl9ZWxzZXt2YXIgRD0oTz4+MSktMTswPT09ST9kKHMsbCxDLS0sRCk6MT09PUk/ZChjLHUsTC0tLEQpOjI9PT1JJiZkKGgsZix6LS0sRCl9fX0sc2NhbkJpcGFydGl0ZTpmdW5jdGlvbih0LGUscixuLGksYyx1LGgsZix2LG0seSl7dmFyIHg9MCxiPTIqdCxfPWUsdz1lK3Qsaz0xLEE9MTtuP0E9bzprPW87Zm9yKHZhciBUPWk7VDxjOysrVCl7dmFyIE09VCtrLFM9YipUO3BbeCsrXT11W1MrX10scFt4KytdPS1NLHBbeCsrXT11W1Mrd10scFt4KytdPU19Zm9yKHZhciBUPWY7VDx2OysrVCl7dmFyIE09VCtBLEU9YipUO3BbeCsrXT1tW0UrX10scFt4KytdPS1NfXZhciBDPXg+Pj4xO2EocCxDKTtmb3IodmFyIEw9MCxUPTA7VDxDOysrVCl7dmFyIHo9MHxwWzIqVCsxXTtpZih6PDApe3ZhciBNPS16LE89ITE7aWYoTT49bz8oTz0hbixNLT1vKTooTz0hIW4sTS09MSksTylnKHMsbCxMKyssTSk7ZWxzZXt2YXIgST15W01dLEQ9YipNLFA9bVtEK2UrMV0sUj1tW0QrZSsxK3RdO3Q6Zm9yKHZhciBGPTA7RjxMOysrRil7dmFyIEI9c1tGXSxOPWIqQjtpZighKFI8dVtOK2UrMV18fHVbTitlKzErdF08UCkpe2Zvcih2YXIgaj1lKzI7ajx0OysrailpZihtW0Qrait0XTx1W04ral18fHVbTitqK3RdPG1bRCtqXSljb250aW51ZSB0O3ZhciBWLFU9aFtCXTtpZih2b2lkIDAhPT0oVj1uP3IoSSxVKTpyKFUsSSkpKXJldHVybiBWfX19fWVsc2UgZChzLGwsTC0tLHotayl9fSxzY2FuQ29tcGxldGU6ZnVuY3Rpb24odCxlLHIsbixpLGwsYyx1LGgsZixkKXtmb3IodmFyIGc9MCx2PTIqdCxtPWUseT1lK3QseD1uO3g8aTsrK3gpe3ZhciBiPXgrbyxfPXYqeDtwW2crK109bFtfK21dLHBbZysrXT0tYixwW2crK109bFtfK3ldLHBbZysrXT1ifWZvcih2YXIgeD11O3g8aDsrK3gpe3ZhciBiPXgrMSx3PXYqeDtwW2crK109Zlt3K21dLHBbZysrXT0tYn12YXIgaz1nPj4+MTthKHAsayk7Zm9yKHZhciBBPTAseD0wO3g8azsrK3gpe3ZhciBUPTB8cFsyKngrMV07aWYoVDwwKXt2YXIgYj0tVDtpZihiPj1vKXNbQSsrXT1iLW87ZWxzZXt2YXIgTT1kW2ItPTFdLFM9dipiLEU9ZltTK2UrMV0sQz1mW1MrZSsxK3RdO3Q6Zm9yKHZhciBMPTA7TDxBOysrTCl7dmFyIHo9c1tMXSxPPWNbel07aWYoTz09PU0pYnJlYWs7dmFyIEk9dip6O2lmKCEoQzxsW0krZSsxXXx8bFtJK2UrMSt0XTxFKSl7Zm9yKHZhciBEPWUrMjtEPHQ7KytEKWlmKGZbUytEK3RdPGxbSStEXXx8bFtJK0QrdF08ZltTK0RdKWNvbnRpbnVlIHQ7dmFyIFA9cihPLE0pO2lmKHZvaWQgMCE9PVApcmV0dXJuIFB9fX19ZWxzZXtmb3IodmFyIGI9VC1vLEw9QS0xO0w+PTA7LS1MKWlmKHNbTF09PT1iKXtmb3IodmFyIEQ9TCsxO0Q8QTsrK0Qpc1tELTFdPXNbRF07YnJlYWt9LS1BfX19fTt2YXIgbj10KFwidHlwZWRhcnJheS1wb29sXCIpLGk9dChcImJpdC10d2lkZGxlXCIpLGE9dChcIi4vc29ydFwiKSxvPTE8PDI4LHM9bi5tYWxsb2NJbnQzMigxMDI0KSxsPW4ubWFsbG9jSW50MzIoMTAyNCksYz1uLm1hbGxvY0ludDMyKDEwMjQpLHU9bi5tYWxsb2NJbnQzMigxMDI0KSxoPW4ubWFsbG9jSW50MzIoMTAyNCksZj1uLm1hbGxvY0ludDMyKDEwMjQpLHA9bi5tYWxsb2NEb3VibGUoODE5Mik7ZnVuY3Rpb24gZCh0LGUscixuKXt2YXIgaT1lW25dLGE9dFtyLTFdO3RbaV09YSxlW2FdPWl9ZnVuY3Rpb24gZyh0LGUscixuKXt0W3JdPW4sZVtuXT1yfX0se1wiLi9zb3J0XCI6OTIsXCJiaXQtdHdpZGRsZVwiOjgzLFwidHlwZWRhcnJheS1wb29sXCI6NTMwfV0sOTQ6W2Z1bmN0aW9uKHQsZSxyKXt9LHt9XSw5NTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKCl7fTtyZXR1cm4gZS5wcm90b3R5cGU9dCxuZXcgZX0saT1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikmJmUucHVzaChyKTtyZXR1cm4gcn0sYT1GdW5jdGlvbi5wcm90b3R5cGUuYmluZHx8ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0LGFyZ3VtZW50cyl9fTtmdW5jdGlvbiBvKCl7dGhpcy5fZXZlbnRzJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcyxcIl9ldmVudHNcIil8fCh0aGlzLl9ldmVudHM9bihudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKSx0aGlzLl9tYXhMaXN0ZW5lcnM9dGhpcy5fbWF4TGlzdGVuZXJzfHx2b2lkIDB9ZS5leHBvcnRzPW8sby5FdmVudEVtaXR0ZXI9byxvLnByb3RvdHlwZS5fZXZlbnRzPXZvaWQgMCxvLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQgMDt2YXIgcyxsPTEwO3RyeXt2YXIgYz17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLFwieFwiLHt2YWx1ZTowfSkscz0wPT09Yy54fWNhdGNoKHQpe3M9ITF9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdm9pZCAwPT09dC5fbWF4TGlzdGVuZXJzP28uZGVmYXVsdE1heExpc3RlbmVyczp0Ll9tYXhMaXN0ZW5lcnN9ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYSxvLHM7aWYoXCJmdW5jdGlvblwiIT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RlbmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7aWYoKG89dC5fZXZlbnRzKT8oby5uZXdMaXN0ZW5lciYmKHQuZW1pdChcIm5ld0xpc3RlbmVyXCIsZSxyLmxpc3RlbmVyP3IubGlzdGVuZXI6ciksbz10Ll9ldmVudHMpLHM9b1tlXSk6KG89dC5fZXZlbnRzPW4obnVsbCksdC5fZXZlbnRzQ291bnQ9MCkscyl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygcz9zPW9bZV09aT9bcixzXTpbcyxyXTppP3MudW5zaGlmdChyKTpzLnB1c2gociksIXMud2FybmVkJiYoYT11KHQpKSYmYT4wJiZzLmxlbmd0aD5hKXtzLndhcm5lZD0hMDt2YXIgbD1uZXcgRXJyb3IoXCJQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuIFwiK3MubGVuZ3RoKycgXCInK1N0cmluZyhlKSsnXCIgbGlzdGVuZXJzIGFkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdC4nKTtsLm5hbWU9XCJNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmdcIixsLmVtaXR0ZXI9dCxsLnR5cGU9ZSxsLmNvdW50PXMubGVuZ3RoLFwib2JqZWN0XCI9PXR5cGVvZiBjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybihcIiVzOiAlc1wiLGwubmFtZSxsLm1lc3NhZ2UpfX1lbHNlIHM9b1tlXT1yLCsrdC5fZXZlbnRzQ291bnQ7cmV0dXJuIHR9ZnVuY3Rpb24gZigpe2lmKCF0aGlzLmZpcmVkKXN3aXRjaCh0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsdGhpcy53cmFwRm4pLHRoaXMuZmlyZWQ9ITAsYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOnJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpO2Nhc2UgMTpyZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0LGFyZ3VtZW50c1swXSk7Y2FzZSAyOnJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQsYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSk7Y2FzZSAzOnJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQsYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0pO2RlZmF1bHQ6Zm9yKHZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxlPTA7ZTx0Lmxlbmd0aDsrK2UpdFtlXT1hcmd1bWVudHNbZV07dGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCx0KX19ZnVuY3Rpb24gcCh0LGUscil7dmFyIG49e2ZpcmVkOiExLHdyYXBGbjp2b2lkIDAsdGFyZ2V0OnQsdHlwZTplLGxpc3RlbmVyOnJ9LGk9YS5jYWxsKGYsbik7cmV0dXJuIGkubGlzdGVuZXI9cixuLndyYXBGbj1pLGl9ZnVuY3Rpb24gZCh0LGUscil7dmFyIG49dC5fZXZlbnRzO2lmKCFuKXJldHVybltdO3ZhciBpPW5bZV07cmV0dXJuIGk/XCJmdW5jdGlvblwiPT10eXBlb2YgaT9yP1tpLmxpc3RlbmVyfHxpXTpbaV06cj9mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjxlLmxlbmd0aDsrK3IpZVtyXT10W3JdLmxpc3RlbmVyfHx0W3JdO3JldHVybiBlfShpKTp2KGksaS5sZW5ndGgpOltdfWZ1bmN0aW9uIGcodCl7dmFyIGU9dGhpcy5fZXZlbnRzO2lmKGUpe3ZhciByPWVbdF07aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgcilyZXR1cm4gMTtpZihyKXJldHVybiByLmxlbmd0aH1yZXR1cm4gMH1mdW5jdGlvbiB2KHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPXRbbl07cmV0dXJuIHJ9cz9PYmplY3QuZGVmaW5lUHJvcGVydHkobyxcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbH0sc2V0OmZ1bmN0aW9uKHQpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0fHx0PDB8fHQhPXQpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJkZWZhdWx0TWF4TGlzdGVuZXJzXCIgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO2w9dH19KTpvLmRlZmF1bHRNYXhMaXN0ZW5lcnM9bCxvLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24odCl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHR8fHQ8MHx8aXNOYU4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJuXCIgYXJndW1lbnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9dCx0aGlzfSxvLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzKX0sby5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scz1cImVycm9yXCI9PT10O2lmKG89dGhpcy5fZXZlbnRzKXM9cyYmbnVsbD09by5lcnJvcjtlbHNlIGlmKCFzKXJldHVybiExO2lmKHMpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSYmKGU9YXJndW1lbnRzWzFdKSxlIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgZTt2YXIgbD1uZXcgRXJyb3IoJ1VuaGFuZGxlZCBcImVycm9yXCIgZXZlbnQuICgnK2UrXCIpXCIpO3Rocm93IGwuY29udGV4dD1lLGx9aWYoIShyPW9bdF0pKXJldHVybiExO3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHI7c3dpdGNoKG49YXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAxOiFmdW5jdGlvbih0LGUscil7aWYoZSl0LmNhbGwocik7ZWxzZSBmb3IodmFyIG49dC5sZW5ndGgsaT12KHQsbiksYT0wO2E8bjsrK2EpaVthXS5jYWxsKHIpfShyLGMsdGhpcyk7YnJlYWs7Y2FzZSAyOiFmdW5jdGlvbih0LGUscixuKXtpZihlKXQuY2FsbChyLG4pO2Vsc2UgZm9yKHZhciBpPXQubGVuZ3RoLGE9dih0LGkpLG89MDtvPGk7KytvKWFbb10uY2FsbChyLG4pfShyLGMsdGhpcyxhcmd1bWVudHNbMV0pO2JyZWFrO2Nhc2UgMzohZnVuY3Rpb24odCxlLHIsbixpKXtpZihlKXQuY2FsbChyLG4saSk7ZWxzZSBmb3IodmFyIGE9dC5sZW5ndGgsbz12KHQsYSkscz0wO3M8YTsrK3Mpb1tzXS5jYWxsKHIsbixpKX0ocixjLHRoaXMsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSk7YnJlYWs7Y2FzZSA0OiFmdW5jdGlvbih0LGUscixuLGksYSl7aWYoZSl0LmNhbGwocixuLGksYSk7ZWxzZSBmb3IodmFyIG89dC5sZW5ndGgscz12KHQsbyksbD0wO2w8bzsrK2wpc1tsXS5jYWxsKHIsbixpLGEpfShyLGMsdGhpcyxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXSk7YnJlYWs7ZGVmYXVsdDpmb3IoaT1uZXcgQXJyYXkobi0xKSxhPTE7YTxuO2ErKylpW2EtMV09YXJndW1lbnRzW2FdOyFmdW5jdGlvbih0LGUscixuKXtpZihlKXQuYXBwbHkocixuKTtlbHNlIGZvcih2YXIgaT10Lmxlbmd0aCxhPXYodCxpKSxvPTA7bzxpOysrbylhW29dLmFwcGx5KHIsbil9KHIsYyx0aGlzLGkpfXJldHVybiEwfSxvLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3JldHVybiBoKHRoaXMsdCxlLCExKX0sby5wcm90b3R5cGUub249by5wcm90b3R5cGUuYWRkTGlzdGVuZXIsby5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgodGhpcyx0LGUsITApfSxvLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKHQsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RlbmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIHRoaXMub24odCxwKHRoaXMsdCxlKSksdGhpc30sby5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO3JldHVybiB0aGlzLnByZXBlbmRMaXN0ZW5lcih0LHAodGhpcyx0LGUpKSx0aGlzfSxvLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3ZhciByLGksYSxvLHM7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RlbmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7aWYoIShpPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYoIShyPWlbdF0pKXJldHVybiB0aGlzO2lmKHI9PT1lfHxyLmxpc3RlbmVyPT09ZSkwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1uKG51bGwpOihkZWxldGUgaVt0XSxpLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoXCJyZW1vdmVMaXN0ZW5lclwiLHQsci5saXN0ZW5lcnx8ZSkpO2Vsc2UgaWYoXCJmdW5jdGlvblwiIT10eXBlb2Ygcil7Zm9yKGE9LTEsbz1yLmxlbmd0aC0xO28+PTA7by0tKWlmKHJbb109PT1lfHxyW29dLmxpc3RlbmVyPT09ZSl7cz1yW29dLmxpc3RlbmVyLGE9bzticmVha31pZihhPDApcmV0dXJuIHRoaXM7MD09PWE/ci5zaGlmdCgpOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUsbj1yKzEsaT10Lmxlbmd0aDtuPGk7cis9MSxuKz0xKXRbcl09dFtuXTt0LnBvcCgpfShyLGEpLDE9PT1yLmxlbmd0aCYmKGlbdF09clswXSksaS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KFwicmVtb3ZlTGlzdGVuZXJcIix0LHN8fGUpfXJldHVybiB0aGlzfSxvLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24odCl7dmFyIGUscixhO2lmKCEocj10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKCFyLnJlbW92ZUxpc3RlbmVyKXJldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD8odGhpcy5fZXZlbnRzPW4obnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCk6clt0XSYmKDA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPW4obnVsbCk6ZGVsZXRlIHJbdF0pLHRoaXM7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBvLHM9aShyKTtmb3IoYT0wO2E8cy5sZW5ndGg7KythKVwicmVtb3ZlTGlzdGVuZXJcIiE9PShvPXNbYV0pJiZ0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhvKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoXCJyZW1vdmVMaXN0ZW5lclwiKSx0aGlzLl9ldmVudHM9bihudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wLHRoaXN9aWYoXCJmdW5jdGlvblwiPT10eXBlb2YoZT1yW3RdKSl0aGlzLnJlbW92ZUxpc3RlbmVyKHQsZSk7ZWxzZSBpZihlKWZvcihhPWUubGVuZ3RoLTE7YT49MDthLS0pdGhpcy5yZW1vdmVMaXN0ZW5lcih0LGVbYV0pO3JldHVybiB0aGlzfSxvLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24odCl7cmV0dXJuIGQodGhpcyx0LCEwKX0sby5wcm90b3R5cGUucmF3TGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBkKHRoaXMsdCwhMSl9LG8ubGlzdGVuZXJDb3VudD1mdW5jdGlvbih0LGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQubGlzdGVuZXJDb3VudD90Lmxpc3RlbmVyQ291bnQoZSk6Zy5jYWxsKHQsZSl9LG8ucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9ZyxvLnByb3RvdHlwZS5ldmVudE5hbWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50PjA/UmVmbGVjdC5vd25LZXlzKHRoaXMuX2V2ZW50cyk6W119fSx7fV0sOTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiYmFzZTY0LWpzXCIpLGk9dChcImllZWU3NTRcIik7ci5CdWZmZXI9cyxyLlNsb3dCdWZmZXI9ZnVuY3Rpb24odCl7K3QhPXQmJih0PTApO3JldHVybiBzLmFsbG9jKCt0KX0sci5JTlNQRUNUX01BWF9CWVRFUz01MDt2YXIgYT0yMTQ3NDgzNjQ3O2Z1bmN0aW9uIG8odCl7aWYodD5hKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgXCInK3QrJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpO3ZhciBlPW5ldyBVaW50OEFycmF5KHQpO3JldHVybiBlLl9fcHJvdG9fXz1zLnByb3RvdHlwZSxlfWZ1bmN0aW9uIHModCxlLHIpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3JldHVybiB1KHQpfXJldHVybiBsKHQsZSxyKX1mdW5jdGlvbiBsKHQsZSxyKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdClyZXR1cm4gZnVuY3Rpb24odCxlKXtcInN0cmluZ1wiPT10eXBlb2YgZSYmXCJcIiE9PWV8fChlPVwidXRmOFwiKTtpZighcy5pc0VuY29kaW5nKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIitlKTt2YXIgcj0wfHAodCxlKSxuPW8ociksaT1uLndyaXRlKHQsZSk7aSE9PXImJihuPW4uc2xpY2UoMCxpKSk7cmV0dXJuIG59KHQsZSk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHQpKXJldHVybiBoKHQpO2lmKG51bGw9PXQpdGhyb3cgVHlwZUVycm9yKFwiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgXCIrdHlwZW9mIHQpO2lmKGoodCxBcnJheUJ1ZmZlcil8fHQmJmoodC5idWZmZXIsQXJyYXlCdWZmZXIpKXJldHVybiBmdW5jdGlvbih0LGUscil7aWYoZTwwfHx0LmJ5dGVMZW5ndGg8ZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJvZmZzZXRcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtpZih0LmJ5dGVMZW5ndGg8ZSsocnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wibGVuZ3RoXCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7dmFyIG47bj12b2lkIDA9PT1lJiZ2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQpOnZvaWQgMD09PXI/bmV3IFVpbnQ4QXJyYXkodCxlKTpuZXcgVWludDhBcnJheSh0LGUscik7cmV0dXJuIG4uX19wcm90b19fPXMucHJvdG90eXBlLG59KHQsZSxyKTtpZihcIm51bWJlclwiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3ZhciBuPXQudmFsdWVPZiYmdC52YWx1ZU9mKCk7aWYobnVsbCE9biYmbiE9PXQpcmV0dXJuIHMuZnJvbShuLGUscik7dmFyIGk9ZnVuY3Rpb24odCl7aWYocy5pc0J1ZmZlcih0KSl7dmFyIGU9MHxmKHQubGVuZ3RoKSxyPW8oZSk7cmV0dXJuIDA9PT1yLmxlbmd0aD9yOih0LmNvcHkociwwLDAsZSkscil9aWYodm9pZCAwIT09dC5sZW5ndGgpcmV0dXJuXCJudW1iZXJcIiE9dHlwZW9mIHQubGVuZ3RofHxWKHQubGVuZ3RoKT9vKDApOmgodCk7aWYoXCJCdWZmZXJcIj09PXQudHlwZSYmQXJyYXkuaXNBcnJheSh0LmRhdGEpKXJldHVybiBoKHQuZGF0YSl9KHQpO2lmKGkpcmV0dXJuIGk7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9U3ltYm9sLnRvUHJpbWl0aXZlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0W1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIHMuZnJvbSh0W1N5bWJvbC50b1ByaW1pdGl2ZV0oXCJzdHJpbmdcIiksZSxyKTt0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgXCIrdHlwZW9mIHQpfWZ1bmN0aW9uIGModCl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpO2lmKHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJyt0KydcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKX1mdW5jdGlvbiB1KHQpe3JldHVybiBjKHQpLG8odDwwPzA6MHxmKHQpKX1mdW5jdGlvbiBoKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDwwPzA6MHxmKHQubGVuZ3RoKSxyPW8oZSksbj0wO248ZTtuKz0xKXJbbl09MjU1JnRbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gZih0KXtpZih0Pj1hKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweFwiK2EudG9TdHJpbmcoMTYpK1wiIGJ5dGVzXCIpO3JldHVybiAwfHR9ZnVuY3Rpb24gcCh0LGUpe2lmKHMuaXNCdWZmZXIodCkpcmV0dXJuIHQubGVuZ3RoO2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KXx8aih0LEFycmF5QnVmZmVyKSlyZXR1cm4gdC5ieXRlTGVuZ3RoO2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInN0cmluZ1wiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHQpO3ZhciByPXQubGVuZ3RoLG49YXJndW1lbnRzLmxlbmd0aD4yJiYhMD09PWFyZ3VtZW50c1syXTtpZighbiYmMD09PXIpcmV0dXJuIDA7Zm9yKHZhciBpPSExOzspc3dpdGNoKGUpe2Nhc2VcImFzY2lpXCI6Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIHI7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIEYodCkubGVuZ3RoO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiAyKnI7Y2FzZVwiaGV4XCI6cmV0dXJuIHI+Pj4xO2Nhc2VcImJhc2U2NFwiOnJldHVybiBCKHQpLmxlbmd0aDtkZWZhdWx0OmlmKGkpcmV0dXJuIG4/LTE6Rih0KS5sZW5ndGg7ZT0oXCJcIitlKS50b0xvd2VyQ2FzZSgpLGk9ITB9fWZ1bmN0aW9uIGQodCxlLHIpe3ZhciBuPXRbZV07dFtlXT10W3JdLHRbcl09bn1mdW5jdGlvbiBnKHQsZSxyLG4saSl7aWYoMD09PXQubGVuZ3RoKXJldHVybi0xO2lmKFwic3RyaW5nXCI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxWKHI9K3IpJiYocj1pPzA6dC5sZW5ndGgtMSkscjwwJiYocj10Lmxlbmd0aCtyKSxyPj10Lmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtyPXQubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFpKXJldHVybi0xO3I9MH1pZihcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9cy5mcm9tKGUsbikpLHMuaXNCdWZmZXIoZSkpcmV0dXJuIDA9PT1lLmxlbmd0aD8tMTp2KHQsZSxyLG4saSk7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIGUmPTI1NSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2k/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHQsZSxyKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKHQsZSxyKTp2KHQsW2VdLHIsbixpKTt0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyXCIpfWZ1bmN0aW9uIHYodCxlLHIsbixpKXt2YXIgYSxvPTEscz10Lmxlbmd0aCxsPWUubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJihcInVjczJcIj09PShuPVN0cmluZyhuKS50b0xvd2VyQ2FzZSgpKXx8XCJ1Y3MtMlwiPT09bnx8XCJ1dGYxNmxlXCI9PT1ufHxcInV0Zi0xNmxlXCI9PT1uKSl7aWYodC5sZW5ndGg8Mnx8ZS5sZW5ndGg8MilyZXR1cm4tMTtvPTIscy89MixsLz0yLHIvPTJ9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiAxPT09bz90W2VdOnQucmVhZFVJbnQxNkJFKGUqbyl9aWYoaSl7dmFyIHU9LTE7Zm9yKGE9cjthPHM7YSsrKWlmKGModCxhKT09PWMoZSwtMT09PXU/MDphLXUpKXtpZigtMT09PXUmJih1PWEpLGEtdSsxPT09bClyZXR1cm4gdSpvfWVsc2UtMSE9PXUmJihhLT1hLXUpLHU9LTF9ZWxzZSBmb3IocitsPnMmJihyPXMtbCksYT1yO2E+PTA7YS0tKXtmb3IodmFyIGg9ITAsZj0wO2Y8bDtmKyspaWYoYyh0LGErZikhPT1jKGUsZikpe2g9ITE7YnJlYWt9aWYoaClyZXR1cm4gYX1yZXR1cm4tMX1mdW5jdGlvbiBtKHQsZSxyLG4pe3I9TnVtYmVyKHIpfHwwO3ZhciBpPXQubGVuZ3RoLXI7bj8obj1OdW1iZXIobikpPmkmJihuPWkpOm49aTt2YXIgYT1lLmxlbmd0aDtuPmEvMiYmKG49YS8yKTtmb3IodmFyIG89MDtvPG47KytvKXt2YXIgcz1wYXJzZUludChlLnN1YnN0cigyKm8sMiksMTYpO2lmKFYocykpcmV0dXJuIG87dFtyK29dPXN9cmV0dXJuIG99ZnVuY3Rpb24geSh0LGUscixuKXtyZXR1cm4gTihGKGUsdC5sZW5ndGgtciksdCxyLG4pfWZ1bmN0aW9uIHgodCxlLHIsbil7cmV0dXJuIE4oZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2goMjU1JnQuY2hhckNvZGVBdChyKSk7cmV0dXJuIGV9KGUpLHQscixuKX1mdW5jdGlvbiBiKHQsZSxyLG4pe3JldHVybiB4KHQsZSxyLG4pfWZ1bmN0aW9uIF8odCxlLHIsbil7cmV0dXJuIE4oQihlKSx0LHIsbil9ZnVuY3Rpb24gdyh0LGUscixuKXtyZXR1cm4gTihmdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLGksYT1bXSxvPTA7bzx0Lmxlbmd0aCYmISgoZS09Mik8MCk7KytvKXI9dC5jaGFyQ29kZUF0KG8pLG49cj4+OCxpPXIlMjU2LGEucHVzaChpKSxhLnB1c2gobik7cmV0dXJuIGF9KGUsdC5sZW5ndGgtciksdCxyLG4pfWZ1bmN0aW9uIGsodCxlLHIpe3JldHVybiAwPT09ZSYmcj09PXQubGVuZ3RoP24uZnJvbUJ5dGVBcnJheSh0KTpuLmZyb21CeXRlQXJyYXkodC5zbGljZShlLHIpKX1mdW5jdGlvbiBBKHQsZSxyKXtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgbj1bXSxpPWU7aTxyOyl7dmFyIGEsbyxzLGwsYz10W2ldLHU9bnVsbCxoPWM+MjM5PzQ6Yz4yMjM/MzpjPjE5MT8yOjE7aWYoaStoPD1yKXN3aXRjaChoKXtjYXNlIDE6YzwxMjgmJih1PWMpO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKGE9dFtpKzFdKSkmJihsPSgzMSZjKTw8Nnw2MyZhKT4xMjcmJih1PWwpO2JyZWFrO2Nhc2UgMzphPXRbaSsxXSxvPXRbaSsyXSwxMjg9PSgxOTImYSkmJjEyOD09KDE5MiZvKSYmKGw9KDE1JmMpPDwxMnwoNjMmYSk8PDZ8NjMmbyk+MjA0NyYmKGw8NTUyOTZ8fGw+NTczNDMpJiYodT1sKTticmVhaztjYXNlIDQ6YT10W2krMV0sbz10W2krMl0scz10W2krM10sMTI4PT0oMTkyJmEpJiYxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmKGw9KDE1JmMpPDwxOHwoNjMmYSk8PDEyfCg2MyZvKTw8Nnw2MyZzKT42NTUzNSYmbDwxMTE0MTEyJiYodT1sKX1udWxsPT09dT8odT02NTUzMyxoPTEpOnU+NjU1MzUmJih1LT02NTUzNixuLnB1c2godT4+PjEwJjEwMjN8NTUyOTYpLHU9NTYzMjB8MTAyMyZ1KSxuLnB1c2godSksaSs9aH1yZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoZTw9VClyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsdCk7dmFyIHI9XCJcIixuPTA7Zm9yKDtuPGU7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLHQuc2xpY2UobixuKz1UKSk7cmV0dXJuIHJ9KG4pfXIua01heExlbmd0aD1hLHMuVFlQRURfQVJSQVlfU1VQUE9SVD1mdW5jdGlvbigpe3RyeXt2YXIgdD1uZXcgVWludDhBcnJheSgxKTtyZXR1cm4gdC5fX3Byb3RvX189e19fcHJvdG9fXzpVaW50OEFycmF5LnByb3RvdHlwZSxmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fSw0Mj09PXQuZm9vKCl9Y2F0Y2godCl7cmV0dXJuITF9fSgpLHMuVFlQRURfQVJSQVlfU1VQUE9SVHx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIGNvbnNvbGV8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGNvbnNvbGUuZXJyb3J8fGNvbnNvbGUuZXJyb3IoXCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC5cIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMucHJvdG90eXBlLFwicGFyZW50XCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYocy5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMucHJvdG90eXBlLFwib2Zmc2V0XCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYocy5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5ieXRlT2Zmc2V0fX0pLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPVN5bWJvbC5zcGVjaWVzJiZzW1N5bWJvbC5zcGVjaWVzXT09PXMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLFN5bWJvbC5zcGVjaWVzLHt2YWx1ZTpudWxsLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExfSkscy5wb29sU2l6ZT04MTkyLHMuZnJvbT1mdW5jdGlvbih0LGUscil7cmV0dXJuIGwodCxlLHIpfSxzLnByb3RvdHlwZS5fX3Byb3RvX189VWludDhBcnJheS5wcm90b3R5cGUscy5fX3Byb3RvX189VWludDhBcnJheSxzLmFsbG9jPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3JldHVybiBjKHQpLHQ8PTA/byh0KTp2b2lkIDAhPT1lP1wic3RyaW5nXCI9PXR5cGVvZiByP28odCkuZmlsbChlLHIpOm8odCkuZmlsbChlKTpvKHQpfSh0LGUscil9LHMuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odCl7cmV0dXJuIHUodCl9LHMuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHQpe3JldHVybiB1KHQpfSxzLmlzQnVmZmVyPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10JiYhMD09PXQuX2lzQnVmZmVyJiZ0IT09cy5wcm90b3R5cGV9LHMuY29tcGFyZT1mdW5jdGlvbih0LGUpe2lmKGoodCxVaW50OEFycmF5KSYmKHQ9cy5mcm9tKHQsdC5vZmZzZXQsdC5ieXRlTGVuZ3RoKSksaihlLFVpbnQ4QXJyYXkpJiYoZT1zLmZyb20oZSxlLm9mZnNldCxlLmJ5dGVMZW5ndGgpKSwhcy5pc0J1ZmZlcih0KXx8IXMuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiYnVmMVwiLCBcImJ1ZjJcIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKHQ9PT1lKXJldHVybiAwO2Zvcih2YXIgcj10Lmxlbmd0aCxuPWUubGVuZ3RoLGk9MCxhPU1hdGgubWluKHIsbik7aTxhOysraSlpZih0W2ldIT09ZVtpXSl7cj10W2ldLG49ZVtpXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9LHMuaXNFbmNvZGluZz1mdW5jdGlvbih0KXtzd2l0Y2goU3RyaW5nKHQpLnRvTG93ZXJDYXNlKCkpe2Nhc2VcImhleFwiOmNhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOmNhc2VcImFzY2lpXCI6Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6Y2FzZVwiYmFzZTY0XCI6Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LHMuY29uY2F0PWZ1bmN0aW9uKHQsZSl7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PXQubGVuZ3RoKXJldHVybiBzLmFsbG9jKDApO3ZhciByO2lmKHZvaWQgMD09PWUpZm9yKGU9MCxyPTA7cjx0Lmxlbmd0aDsrK3IpZSs9dFtyXS5sZW5ndGg7dmFyIG49cy5hbGxvY1Vuc2FmZShlKSxpPTA7Zm9yKHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIGE9dFtyXTtpZihqKGEsVWludDhBcnJheSkmJihhPXMuZnJvbShhKSksIXMuaXNCdWZmZXIoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7YS5jb3B5KG4saSksaSs9YS5sZW5ndGh9cmV0dXJuIG59LHMuYnl0ZUxlbmd0aD1wLHMucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxzLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtpZih0JTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0c1wiKTtmb3IodmFyIGU9MDtlPHQ7ZSs9MilkKHRoaXMsZSxlKzEpO3JldHVybiB0aGlzfSxzLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtpZih0JTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0c1wiKTtmb3IodmFyIGU9MDtlPHQ7ZSs9NClkKHRoaXMsZSxlKzMpLGQodGhpcyxlKzEsZSsyKTtyZXR1cm4gdGhpc30scy5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHNcIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTgpZCh0aGlzLGUsZSs3KSxkKHRoaXMsZSsxLGUrNiksZCh0aGlzLGUrMixlKzUpLGQodGhpcyxlKzMsZSs0KTtyZXR1cm4gdGhpc30scy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtyZXR1cm4gMD09PXQ/XCJcIjowPT09YXJndW1lbnRzLmxlbmd0aD9BKHRoaXMsMCx0KTpmdW5jdGlvbih0LGUscil7dmFyIG49ITE7aWYoKHZvaWQgMD09PWV8fGU8MCkmJihlPTApLGU+dGhpcy5sZW5ndGgpcmV0dXJuXCJcIjtpZigodm9pZCAwPT09cnx8cj50aGlzLmxlbmd0aCkmJihyPXRoaXMubGVuZ3RoKSxyPD0wKXJldHVyblwiXCI7aWYoKHI+Pj49MCk8PShlPj4+PTApKXJldHVyblwiXCI7Zm9yKHR8fCh0PVwidXRmOFwiKTs7KXN3aXRjaCh0KXtjYXNlXCJoZXhcIjpyZXR1cm4gRSh0aGlzLGUscik7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIEEodGhpcyxlLHIpO2Nhc2VcImFzY2lpXCI6cmV0dXJuIE0odGhpcyxlLHIpO2Nhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOnJldHVybiBTKHRoaXMsZSxyKTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gayh0aGlzLGUscik7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuIEModGhpcyxlLHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrdCk7dD0odCtcIlwiKS50b0xvd2VyQ2FzZSgpLG49ITB9fS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHMucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nPXMucHJvdG90eXBlLnRvU3RyaW5nLHMucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtpZighcy5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlclwiKTtyZXR1cm4gdGhpcz09PXR8fDA9PT1zLmNvbXBhcmUodGhpcyx0KX0scy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciB0PVwiXCIsZT1yLklOU1BFQ1RfTUFYX0JZVEVTO3JldHVybiB0PXRoaXMudG9TdHJpbmcoXCJoZXhcIiwwLGUpLnJlcGxhY2UoLyguezJ9KS9nLFwiJDEgXCIpLnRyaW0oKSx0aGlzLmxlbmd0aD5lJiYodCs9XCIgLi4uIFwiKSxcIjxCdWZmZXIgXCIrdCtcIj5cIn0scy5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbih0LGUscixuLGkpe2lmKGoodCxVaW50OEFycmF5KSYmKHQ9cy5mcm9tKHQsdC5vZmZzZXQsdC5ieXRlTGVuZ3RoKSksIXMuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwidGFyZ2V0XCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiB0KTtpZih2b2lkIDA9PT1lJiYoZT0wKSx2b2lkIDA9PT1yJiYocj10P3QubGVuZ3RoOjApLHZvaWQgMD09PW4mJihuPTApLHZvaWQgMD09PWkmJihpPXRoaXMubGVuZ3RoKSxlPDB8fHI+dC5sZW5ndGh8fG48MHx8aT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIm91dCBvZiByYW5nZSBpbmRleFwiKTtpZihuPj1pJiZlPj1yKXJldHVybiAwO2lmKG4+PWkpcmV0dXJuLTE7aWYoZT49cilyZXR1cm4gMTtpZih0aGlzPT09dClyZXR1cm4gMDtmb3IodmFyIGE9KGk+Pj49MCktKG4+Pj49MCksbz0ocj4+Pj0wKS0oZT4+Pj0wKSxsPU1hdGgubWluKGEsbyksYz10aGlzLnNsaWNlKG4saSksdT10LnNsaWNlKGUsciksaD0wO2g8bDsrK2gpaWYoY1toXSE9PXVbaF0pe2E9Y1toXSxvPXVbaF07YnJlYWt9cmV0dXJuIGE8bz8tMTpvPGE/MTowfSxzLnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbih0LGUscil7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YodCxlLHIpfSxzLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZyh0aGlzLHQsZSxyLCEwKX0scy5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBnKHRoaXMsdCxlLHIsITEpfSxzLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0LGUscixuKXtpZih2b2lkIDA9PT1lKW49XCJ1dGY4XCIscj10aGlzLmxlbmd0aCxlPTA7ZWxzZSBpZih2b2lkIDA9PT1yJiZcInN0cmluZ1wiPT10eXBlb2YgZSluPWUscj10aGlzLmxlbmd0aCxlPTA7ZWxzZXtpZighaXNGaW5pdGUoZSkpdGhyb3cgbmV3IEVycm9yKFwiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWRcIik7ZT4+Pj0wLGlzRmluaXRlKHIpPyhyPj4+PTAsdm9pZCAwPT09biYmKG49XCJ1dGY4XCIpKToobj1yLHI9dm9pZCAwKX12YXIgaT10aGlzLmxlbmd0aC1lO2lmKCh2b2lkIDA9PT1yfHxyPmkpJiYocj1pKSx0Lmxlbmd0aD4wJiYocjwwfHxlPDApfHxlPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHNcIik7bnx8KG49XCJ1dGY4XCIpO2Zvcih2YXIgYT0hMTs7KXN3aXRjaChuKXtjYXNlXCJoZXhcIjpyZXR1cm4gbSh0aGlzLHQsZSxyKTtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4geSh0aGlzLHQsZSxyKTtjYXNlXCJhc2NpaVwiOnJldHVybiB4KHRoaXMsdCxlLHIpO2Nhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOnJldHVybiBiKHRoaXMsdCxlLHIpO2Nhc2VcImJhc2U2NFwiOnJldHVybiBfKHRoaXMsdCxlLHIpO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiB3KHRoaXMsdCxlLHIpO2RlZmF1bHQ6aWYoYSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrbik7bj0oXCJcIituKS50b0xvd2VyQ2FzZSgpLGE9ITB9fSxzLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpcIkJ1ZmZlclwiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIFQ9NDA5NjtmdW5jdGlvbiBNKHQsZSxyKXt2YXIgbj1cIlwiO3I9TWF0aC5taW4odC5sZW5ndGgscik7Zm9yKHZhciBpPWU7aTxyOysraSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZ0W2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBTKHQsZSxyKXt2YXIgbj1cIlwiO3I9TWF0aC5taW4odC5sZW5ndGgscik7Zm9yKHZhciBpPWU7aTxyOysraSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbaV0pO3JldHVybiBufWZ1bmN0aW9uIEUodCxlLHIpe3ZhciBuPXQubGVuZ3RoOyghZXx8ZTwwKSYmKGU9MCksKCFyfHxyPDB8fHI+bikmJihyPW4pO2Zvcih2YXIgaT1cIlwiLGE9ZTthPHI7KythKWkrPVIodFthXSk7cmV0dXJuIGl9ZnVuY3Rpb24gQyh0LGUscil7Zm9yKHZhciBuPXQuc2xpY2UoZSxyKSxpPVwiXCIsYT0wO2E8bi5sZW5ndGg7YSs9MilpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG5bYV0rMjU2Km5bYSsxXSk7cmV0dXJuIGl9ZnVuY3Rpb24gTCh0LGUscil7aWYodCUxIT0wfHx0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvZmZzZXQgaXMgbm90IHVpbnRcIik7aWYodCtlPnIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoXCIpfWZ1bmN0aW9uIHoodCxlLHIsbixpLGEpe2lmKCFzLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKGU+aXx8ZTxhKXRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKHIrbj50Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiBPKHQsZSxyLG4saSxhKXtpZihyK24+dC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW5kZXggb3V0IG9mIHJhbmdlXCIpfWZ1bmN0aW9uIEkodCxlLHIsbixhKXtyZXR1cm4gZT0rZSxyPj4+PTAsYXx8Tyh0LDAsciw0KSxpLndyaXRlKHQsZSxyLG4sMjMsNCkscis0fWZ1bmN0aW9uIEQodCxlLHIsbixhKXtyZXR1cm4gZT0rZSxyPj4+PTAsYXx8Tyh0LDAsciw4KSxpLndyaXRlKHQsZSxyLG4sNTIsOCkscis4fXMucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGg7KHQ9fn50KTwwPyh0Kz1yKTwwJiYodD0wKTp0PnImJih0PXIpLChlPXZvaWQgMD09PWU/cjp+fmUpPDA/KGUrPXIpPDAmJihlPTApOmU+ciYmKGU9ciksZTx0JiYoZT10KTt2YXIgbj10aGlzLnN1YmFycmF5KHQsZSk7cmV0dXJuIG4uX19wcm90b19fPXMucHJvdG90eXBlLG59LHMucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8TCh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3RdLGk9MSxhPTA7KythPGUmJihpKj0yNTYpOyluKz10aGlzW3QrYV0qaTtyZXR1cm4gbn0scy5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbih0LGUscil7dD4+Pj0wLGU+Pj49MCxyfHxMKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdCstLWVdLGk9MTtlPjAmJihpKj0yNTYpOyluKz10aGlzW3QrLS1lXSppO3JldHVybiBufSxzLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCwxLHRoaXMubGVuZ3RoKSx0aGlzW3RdfSxzLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCwyLHRoaXMubGVuZ3RoKSx0aGlzW3RdfHRoaXNbdCsxXTw8OH0scy5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxMKHQsMix0aGlzLmxlbmd0aCksdGhpc1t0XTw8OHx0aGlzW3QrMV19LHMucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8TCh0LDQsdGhpcy5sZW5ndGgpLCh0aGlzW3RdfHRoaXNbdCsxXTw8OHx0aGlzW3QrMl08PDE2KSsxNjc3NzIxNip0aGlzW3QrM119LHMucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8TCh0LDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbdF0rKHRoaXNbdCsxXTw8MTZ8dGhpc1t0KzJdPDw4fHRoaXNbdCszXSl9LHMucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbih0LGUscil7dD4+Pj0wLGU+Pj49MCxyfHxMKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdF0saT0xLGE9MDsrK2E8ZSYmKGkqPTI1Nik7KW4rPXRoaXNbdCthXSppO3JldHVybiBuPj0oaSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCplKSksbn0scy5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKHQsZSxyKXt0Pj4+PTAsZT4+Pj0wLHJ8fEwodCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49ZSxpPTEsYT10aGlzW3QrLS1uXTtuPjAmJihpKj0yNTYpOylhKz10aGlzW3QrLS1uXSppO3JldHVybiBhPj0oaSo9MTI4KSYmKGEtPU1hdGgucG93KDIsOCplKSksYX0scy5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1t0XT8tMSooMjU1LXRoaXNbdF0rMSk6dGhpc1t0XX0scy5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24odCxlKXt0Pj4+PTAsZXx8TCh0LDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbdF18dGhpc1t0KzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxzLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbih0LGUpe3Q+Pj49MCxlfHxMKHQsMix0aGlzLmxlbmd0aCk7dmFyIHI9dGhpc1t0KzFdfHRoaXNbdF08PDg7cmV0dXJuIDMyNzY4JnI/NDI5NDkwMTc2MHxyOnJ9LHMucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxMKHQsNCx0aGlzLmxlbmd0aCksdGhpc1t0XXx0aGlzW3QrMV08PDh8dGhpc1t0KzJdPDwxNnx0aGlzW3QrM108PDI0fSxzLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8TCh0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdF08PDI0fHRoaXNbdCsxXTw8MTZ8dGhpc1t0KzJdPDw4fHRoaXNbdCszXX0scy5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCw0LHRoaXMubGVuZ3RoKSxpLnJlYWQodGhpcyx0LCEwLDIzLDQpfSxzLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8TCh0LDQsdGhpcy5sZW5ndGgpLGkucmVhZCh0aGlzLHQsITEsMjMsNCl9LHMucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8TCh0LDgsdGhpcy5sZW5ndGgpLGkucmVhZCh0aGlzLHQsITAsNTIsOCl9LHMucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8TCh0LDgsdGhpcy5sZW5ndGgpLGkucmVhZCh0aGlzLHQsITEsNTIsOCl9LHMucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKHQsZSxyLG4peyh0PSt0LGU+Pj49MCxyPj4+PTAsbil8fHoodGhpcyx0LGUscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgaT0xLGE9MDtmb3IodGhpc1tlXT0yNTUmdDsrK2E8ciYmKGkqPTI1Nik7KXRoaXNbZSthXT10L2kmMjU1O3JldHVybiBlK3J9LHMucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKHQsZSxyLG4peyh0PSt0LGU+Pj49MCxyPj4+PTAsbil8fHoodGhpcyx0LGUscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgaT1yLTEsYT0xO2Zvcih0aGlzW2UraV09MjU1JnQ7LS1pPj0wJiYoYSo9MjU2KTspdGhpc1tlK2ldPXQvYSYyNTU7cmV0dXJuIGUrcn0scy5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fHoodGhpcyx0LGUsMSwyNTUsMCksdGhpc1tlXT0yNTUmdCxlKzF9LHMucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDIsNjU1MzUsMCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsZSsyfSxzLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8eih0aGlzLHQsZSwyLDY1NTM1LDApLHRoaXNbZV09dD4+PjgsdGhpc1tlKzFdPTI1NSZ0LGUrMn0scy5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fHoodGhpcyx0LGUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbZSszXT10Pj4+MjQsdGhpc1tlKzJdPXQ+Pj4xNix0aGlzW2UrMV09dD4+PjgsdGhpc1tlXT0yNTUmdCxlKzR9LHMucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW2VdPXQ+Pj4yNCx0aGlzW2UrMV09dD4+PjE2LHRoaXNbZSsyXT10Pj4+OCx0aGlzW2UrM109MjU1JnQsZSs0fSxzLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZT4+Pj0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTt6KHRoaXMsdCxlLHIsaS0xLC1pKX12YXIgYT0wLG89MSxzPTA7Zm9yKHRoaXNbZV09MjU1JnQ7KythPHImJihvKj0yNTYpOyl0PDAmJjA9PT1zJiYwIT09dGhpc1tlK2EtMV0mJihzPTEpLHRoaXNbZSthXT0odC9vPj4wKS1zJjI1NTtyZXR1cm4gZStyfSxzLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZT4+Pj0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTt6KHRoaXMsdCxlLHIsaS0xLC1pKX12YXIgYT1yLTEsbz0xLHM9MDtmb3IodGhpc1tlK2FdPTI1NSZ0Oy0tYT49MCYmKG8qPTI1Nik7KXQ8MCYmMD09PXMmJjAhPT10aGlzW2UrYSsxXSYmKHM9MSksdGhpc1tlK2FdPSh0L28+PjApLXMmMjU1O3JldHVybiBlK3J9LHMucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fHoodGhpcyx0LGUsMSwxMjcsLTEyOCksdDwwJiYodD0yNTUrdCsxKSx0aGlzW2VdPTI1NSZ0LGUrMX0scy5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8eih0aGlzLHQsZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsZSsyfSxzLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW2VdPXQ+Pj44LHRoaXNbZSsxXT0yNTUmdCxlKzJ9LHMucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fHoodGhpcyx0LGUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW2VdPTI1NSZ0LHRoaXNbZSsxXT10Pj4+OCx0aGlzW2UrMl09dD4+PjE2LHRoaXNbZSszXT10Pj4+MjQsZSs0fSxzLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdDwwJiYodD00Mjk0OTY3Mjk1K3QrMSksdGhpc1tlXT10Pj4+MjQsdGhpc1tlKzFdPXQ+Pj4xNix0aGlzW2UrMl09dD4+PjgsdGhpc1tlKzNdPTI1NSZ0LGUrNH0scy5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gSSh0aGlzLHQsZSwhMCxyKX0scy5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gSSh0aGlzLHQsZSwhMSxyKX0scy5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIEQodGhpcyx0LGUsITAscil9LHMucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBEKHRoaXMsdCxlLCExLHIpfSxzLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQsZSxyLG4pe2lmKCFzLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBzaG91bGQgYmUgYSBCdWZmZXJcIik7aWYocnx8KHI9MCksbnx8MD09PW58fChuPXRoaXMubGVuZ3RoKSxlPj10Lmxlbmd0aCYmKGU9dC5sZW5ndGgpLGV8fChlPTApLG4+MCYmbjxyJiYobj1yKSxuPT09cilyZXR1cm4gMDtpZigwPT09dC5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZihlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzXCIpO2lmKHI8MHx8cj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwic291cmNlRW5kIG91dCBvZiBib3VuZHNcIik7bj50aGlzLmxlbmd0aCYmKG49dGhpcy5sZW5ndGgpLHQubGVuZ3RoLWU8bi1yJiYobj10Lmxlbmd0aC1lK3IpO3ZhciBpPW4tcjtpZih0aGlzPT09dCYmXCJmdW5jdGlvblwiPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbil0aGlzLmNvcHlXaXRoaW4oZSxyLG4pO2Vsc2UgaWYodGhpcz09PXQmJnI8ZSYmZTxuKWZvcih2YXIgYT1pLTE7YT49MDstLWEpdFthK2VdPXRoaXNbYStyXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKHQsdGhpcy5zdWJhcnJheShyLG4pLGUpO3JldHVybiBpfSxzLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgZT8obj1lLGU9MCxyPXRoaXMubGVuZ3RoKTpcInN0cmluZ1wiPT10eXBlb2YgciYmKG49cixyPXRoaXMubGVuZ3RoKSx2b2lkIDAhPT1uJiZcInN0cmluZ1wiIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKFwiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZ1wiKTtpZihcInN0cmluZ1wiPT10eXBlb2YgbiYmIXMuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrbik7aWYoMT09PXQubGVuZ3RoKXt2YXIgaT10LmNoYXJDb2RlQXQoMCk7KFwidXRmOFwiPT09biYmaTwxMjh8fFwibGF0aW4xXCI9PT1uKSYmKHQ9aSl9fWVsc2VcIm51bWJlclwiPT10eXBlb2YgdCYmKHQmPTI1NSk7aWYoZTwwfHx0aGlzLmxlbmd0aDxlfHx0aGlzLmxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKFwiT3V0IG9mIHJhbmdlIGluZGV4XCIpO2lmKHI8PWUpcmV0dXJuIHRoaXM7dmFyIGE7aWYoZT4+Pj0wLHI9dm9pZCAwPT09cj90aGlzLmxlbmd0aDpyPj4+MCx0fHwodD0wKSxcIm51bWJlclwiPT10eXBlb2YgdClmb3IoYT1lO2E8cjsrK2EpdGhpc1thXT10O2Vsc2V7dmFyIG89cy5pc0J1ZmZlcih0KT90OnMuZnJvbSh0LG4pLGw9by5sZW5ndGg7aWYoMD09PWwpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlIFwiJyt0KydcIiBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCBcInZhbHVlXCInKTtmb3IoYT0wO2E8ci1lOysrYSl0aGlzW2ErZV09b1thJWxdfXJldHVybiB0aGlzfTt2YXIgUD0vW14rXFwvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gUih0KXtyZXR1cm4gdDwxNj9cIjBcIit0LnRvU3RyaW5nKDE2KTp0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBGKHQsZSl7dmFyIHI7ZT1lfHwxLzA7Zm9yKHZhciBuPXQubGVuZ3RoLGk9bnVsbCxhPVtdLG89MDtvPG47KytvKXtpZigocj10LmNoYXJDb2RlQXQobykpPjU1Mjk1JiZyPDU3MzQ0KXtpZighaSl7aWYocj41NjMxOSl7KGUtPTMpPi0xJiZhLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKG8rMT09PW4peyhlLT0zKT4tMSYmYS5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pPXI7Y29udGludWV9aWYocjw1NjMyMCl7KGUtPTMpPi0xJiZhLnB1c2goMjM5LDE5MSwxODkpLGk9cjtjb250aW51ZX1yPTY1NTM2KyhpLTU1Mjk2PDwxMHxyLTU2MzIwKX1lbHNlIGkmJihlLT0zKT4tMSYmYS5wdXNoKDIzOSwxOTEsMTg5KTtpZihpPW51bGwscjwxMjgpe2lmKChlLT0xKTwwKWJyZWFrO2EucHVzaChyKX1lbHNlIGlmKHI8MjA0OCl7aWYoKGUtPTIpPDApYnJlYWs7YS5wdXNoKHI+PjZ8MTkyLDYzJnJ8MTI4KX1lbHNlIGlmKHI8NjU1MzYpe2lmKChlLT0zKTwwKWJyZWFrO2EucHVzaChyPj4xMnwyMjQscj4+NiY2M3wxMjgsNjMmcnwxMjgpfWVsc2V7aWYoIShyPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY29kZSBwb2ludFwiKTtpZigoZS09NCk8MClicmVhazthLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBhfWZ1bmN0aW9uIEIodCl7cmV0dXJuIG4udG9CeXRlQXJyYXkoZnVuY3Rpb24odCl7aWYoKHQ9KHQ9dC5zcGxpdChcIj1cIilbMF0pLnRyaW0oKS5yZXBsYWNlKFAsXCJcIikpLmxlbmd0aDwyKXJldHVyblwiXCI7Zm9yKDt0Lmxlbmd0aCU0IT0wOyl0Kz1cIj1cIjtyZXR1cm4gdH0odCkpfWZ1bmN0aW9uIE4odCxlLHIsbil7Zm9yKHZhciBpPTA7aTxuJiYhKGkrcj49ZS5sZW5ndGh8fGk+PXQubGVuZ3RoKTsrK2kpZVtpK3JdPXRbaV07cmV0dXJuIGl9ZnVuY3Rpb24gaih0LGUpe3JldHVybiB0IGluc3RhbmNlb2YgZXx8bnVsbCE9dCYmbnVsbCE9dC5jb25zdHJ1Y3RvciYmbnVsbCE9dC5jb25zdHJ1Y3Rvci5uYW1lJiZ0LmNvbnN0cnVjdG9yLm5hbWU9PT1lLm5hbWV9ZnVuY3Rpb24gVih0KXtyZXR1cm4gdCE9dH19LHtcImJhc2U2NC1qc1wiOjY1LGllZWU3NTQ6NDA1fV0sOTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9saWIvbW9ub3RvbmVcIiksaT10KFwiLi9saWIvdHJpYW5ndWxhdGlvblwiKSxhPXQoXCIuL2xpYi9kZWxhdW5heVwiKSxvPXQoXCIuL2xpYi9maWx0ZXJcIik7ZnVuY3Rpb24gcyh0KXtyZXR1cm5bTWF0aC5taW4odFswXSx0WzFdKSxNYXRoLm1heCh0WzBdLHRbMV0pXX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIGModCxlLHIpe3JldHVybiBlIGluIHQ/dFtlXTpyfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7QXJyYXkuaXNBcnJheShlKT8ocj1yfHx7fSxlPWV8fFtdKToocj1lfHx7fSxlPVtdKTt2YXIgdT0hIWMocixcImRlbGF1bmF5XCIsITApLGg9ISFjKHIsXCJpbnRlcmlvclwiLCEwKSxmPSEhYyhyLFwiZXh0ZXJpb3JcIiwhMCkscD0hIWMocixcImluZmluaXR5XCIsITEpO2lmKCFoJiYhZnx8MD09PXQubGVuZ3RoKXJldHVybltdO3ZhciBkPW4odCxlKTtpZih1fHxoIT09Znx8cCl7Zm9yKHZhciBnPWkodC5sZW5ndGgsZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKHMpLnNvcnQobCl9KGUpKSx2PTA7djxkLmxlbmd0aDsrK3Ype3ZhciBtPWRbdl07Zy5hZGRUcmlhbmdsZShtWzBdLG1bMV0sbVsyXSl9cmV0dXJuIHUmJmEodCxnKSxmP2g/cD9vKGcsMCxwKTpnLmNlbGxzKCk6byhnLDEscCk6byhnLC0xKX1yZXR1cm4gZH19LHtcIi4vbGliL2RlbGF1bmF5XCI6OTgsXCIuL2xpYi9maWx0ZXJcIjo5OSxcIi4vbGliL21vbm90b25lXCI6MTAwLFwiLi9saWIvdHJpYW5ndWxhdGlvblwiOjEwMX1dLDk4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInJvYnVzdC1pbi1zcGhlcmVcIilbNF07dChcImJpbmFyeS1zZWFyY2gtYm91bmRzXCIpO2Z1bmN0aW9uIGkodCxlLHIsaSxhLG8pe3ZhciBzPWUub3Bwb3NpdGUoaSxhKTtpZighKHM8MCkpe2lmKGE8aSl7dmFyIGw9aTtpPWEsYT1sLGw9byxvPXMscz1sfWUuaXNDb25zdHJhaW50KGksYSl8fG4odFtpXSx0W2FdLHRbb10sdFtzXSk8MCYmci5wdXNoKGksYSl9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxhPXQubGVuZ3RoLG89ZS5zdGFycyxzPTA7czxhOysrcylmb3IodmFyIGw9b1tzXSxjPTE7YzxsLmxlbmd0aDtjKz0yKXt2YXIgdT1sW2NdO2lmKCEodTxzKSYmIWUuaXNDb25zdHJhaW50KHMsdSkpe2Zvcih2YXIgaD1sW2MtMV0sZj0tMSxwPTE7cDxsLmxlbmd0aDtwKz0yKWlmKGxbcC0xXT09PXUpe2Y9bFtwXTticmVha31mPDB8fG4odFtzXSx0W3VdLHRbaF0sdFtmXSk8MCYmci5wdXNoKHMsdSl9fWZvcig7ci5sZW5ndGg+MDspe2Zvcih2YXIgdT1yLnBvcCgpLHM9ci5wb3AoKSxoPS0xLGY9LTEsbD1vW3NdLGQ9MTtkPGwubGVuZ3RoO2QrPTIpe3ZhciBnPWxbZC0xXSx2PWxbZF07Zz09PXU/Zj12OnY9PT11JiYoaD1nKX1oPDB8fGY8MHx8KG4odFtzXSx0W3VdLHRbaF0sdFtmXSk+PTB8fChlLmZsaXAocyx1KSxpKHQsZSxyLGgscyxmKSxpKHQsZSxyLHMsZixoKSxpKHQsZSxyLGYsdSxoKSxpKHQsZSxyLHUsaCxmKSkpfX19LHtcImJpbmFyeS1zZWFyY2gtYm91bmRzXCI6MTAyLFwicm9idXN0LWluLXNwaGVyZVwiOjQ5M31dLDk5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saT10KFwiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIik7ZnVuY3Rpb24gYSh0LGUscixuLGksYSxvKXt0aGlzLmNlbGxzPXQsdGhpcy5uZWlnaGJvcj1lLHRoaXMuZmxhZ3M9bix0aGlzLmNvbnN0cmFpbnQ9cix0aGlzLmFjdGl2ZT1pLHRoaXMubmV4dD1hLHRoaXMuYm91bmRhcnk9b31mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfHx0WzJdLWVbMl19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNlbGxzKCksbj1yLmxlbmd0aCxpPTA7aTxuOysraSl7dmFyIHM9cltpXSxsPXNbMF0sYz1zWzFdLHU9c1syXTtjPHU/YzxsJiYoc1swXT1jLHNbMV09dSxzWzJdPWwpOnU8bCYmKHNbMF09dSxzWzFdPWwsc1syXT1jKX1yLnNvcnQobyk7Zm9yKHZhciBoPW5ldyBBcnJheShuKSxpPTA7aTxoLmxlbmd0aDsrK2kpaFtpXT0wO3ZhciBmPVtdLHA9W10sZD1uZXcgQXJyYXkoMypuKSxnPW5ldyBBcnJheSgzKm4pLHY9bnVsbDtlJiYodj1bXSk7Zm9yKHZhciBtPW5ldyBhKHIsZCxnLGgsZixwLHYpLGk9MDtpPG47KytpKWZvcih2YXIgcz1yW2ldLHk9MDt5PDM7Kyt5KXt2YXIgbD1zW3ldLGM9c1soeSsxKSUzXSx4PWRbMyppK3ldPW0ubG9jYXRlKGMsbCx0Lm9wcG9zaXRlKGMsbCkpLGI9Z1szKmkreV09dC5pc0NvbnN0cmFpbnQobCxjKTt4PDAmJihiP3AucHVzaChpKTooZi5wdXNoKGkpLGhbaV09MSksZSYmdi5wdXNoKFtjLGwsLTFdKSl9cmV0dXJuIG19KHQscik7aWYoMD09PWUpcmV0dXJuIHI/bi5jZWxscy5jb25jYXQobi5ib3VuZGFyeSk6bi5jZWxsczt2YXIgaT0xLHM9bi5hY3RpdmUsbD1uLm5leHQsYz1uLmZsYWdzLHU9bi5jZWxscyxoPW4uY29uc3RyYWludCxmPW4ubmVpZ2hib3I7Zm9yKDtzLmxlbmd0aD4wfHxsLmxlbmd0aD4wOyl7Zm9yKDtzLmxlbmd0aD4wOyl7dmFyIHA9cy5wb3AoKTtpZihjW3BdIT09LWkpe2NbcF09aTt1W3BdO2Zvcih2YXIgZD0wO2Q8MzsrK2Qpe3ZhciBnPWZbMypwK2RdO2c+PTAmJjA9PT1jW2ddJiYoaFszKnArZF0/bC5wdXNoKGcpOihzLnB1c2goZyksY1tnXT1pKSl9fX12YXIgdj1sO2w9cyxzPXYsbC5sZW5ndGg9MCxpPS1pfXZhciBtPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MCxpPTA7aTx0Lmxlbmd0aDsrK2kpZVtpXT09PXImJih0W24rK109dFtpXSk7cmV0dXJuIHQubGVuZ3RoPW4sdH0odSxjLGUpO2lmKHIpcmV0dXJuIG0uY29uY2F0KG4uYm91bmRhcnkpO3JldHVybiBtfSxhLnByb3RvdHlwZS5sb2NhdGU9KG49WzAsMCwwXSxmdW5jdGlvbih0LGUscil7dmFyIGE9dCxzPWUsbD1yO3JldHVybiBlPHI/ZTx0JiYoYT1lLHM9cixsPXQpOnI8dCYmKGE9cixzPXQsbD1lKSxhPDA/LTE6KG5bMF09YSxuWzFdPXMsblsyXT1sLGkuZXEodGhpcy5jZWxscyxuLG8pKX0pfSx7XCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiOjEwMn1dLDEwMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiKSxpPXQoXCJyb2J1c3Qtb3JpZW50YXRpb25cIilbM10sYT0wLG89MSxzPTI7ZnVuY3Rpb24gbCh0LGUscixuLGkpe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuaWR4PXIsdGhpcy5sb3dlcklkcz1uLHRoaXMudXBwZXJJZHM9aX1mdW5jdGlvbiBjKHQsZSxyLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMudHlwZT1yLHRoaXMuaWR4PW59ZnVuY3Rpb24gdSh0LGUpe3ZhciByPXQuYVswXS1lLmFbMF18fHQuYVsxXS1lLmFbMV18fHQudHlwZS1lLnR5cGU7cmV0dXJuIHJ8fCh0LnR5cGUhPT1hJiYocj1pKHQuYSx0LmIsZS5iKSk/cjp0LmlkeC1lLmlkeCl9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBpKHQuYSx0LmIsZSl9ZnVuY3Rpb24gZih0LGUscixhLG8pe2Zvcih2YXIgcz1uLmx0KGUsYSxoKSxsPW4uZ3QoZSxhLGgpLGM9cztjPGw7KytjKXtmb3IodmFyIHU9ZVtjXSxmPXUubG93ZXJJZHMscD1mLmxlbmd0aDtwPjEmJmkocltmW3AtMl1dLHJbZltwLTFdXSxhKT4wOyl0LnB1c2goW2ZbcC0xXSxmW3AtMl0sb10pLHAtPTE7Zi5sZW5ndGg9cCxmLnB1c2gobyk7dmFyIGQ9dS51cHBlcklkcztmb3IocD1kLmxlbmd0aDtwPjEmJmkocltkW3AtMl1dLHJbZFtwLTFdXSxhKTwwOyl0LnB1c2goW2RbcC0yXSxkW3AtMV0sb10pLHAtPTE7ZC5sZW5ndGg9cCxkLnB1c2gobyl9fWZ1bmN0aW9uIHAodCxlKXt2YXIgcjtyZXR1cm4ocj10LmFbMF08ZS5hWzBdP2kodC5hLHQuYixlLmEpOmkoZS5iLGUuYSx0LmEpKT9yOihyPWUuYlswXTx0LmJbMF0/aSh0LmEsdC5iLGUuYik6aShlLmIsZS5hLHQuYikpfHx0LmlkeC1lLmlkeH1mdW5jdGlvbiBkKHQsZSxyKXt2YXIgaT1uLmxlKHQscixwKSxhPXRbaV0sbz1hLnVwcGVySWRzLHM9b1tvLmxlbmd0aC0xXTthLnVwcGVySWRzPVtzXSx0LnNwbGljZShpKzEsMCxuZXcgbChyLmEsci5iLHIuaWR4LFtzXSxvKSl9ZnVuY3Rpb24gZyh0LGUscil7dmFyIGk9ci5hO3IuYT1yLmIsci5iPWk7dmFyIGE9bi5lcSh0LHIscCksbz10W2FdO3RbYS0xXS51cHBlcklkcz1vLnVwcGVySWRzLHQuc3BsaWNlKGEsMSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49ZS5sZW5ndGgsaT1bXSxoPTA7aDxyOysraClpLnB1c2gobmV3IGModFtoXSxudWxsLGEsaCkpO2Zvcih2YXIgaD0wO2g8bjsrK2gpe3ZhciBwPWVbaF0sdj10W3BbMF1dLG09dFtwWzFdXTt2WzBdPG1bMF0/aS5wdXNoKG5ldyBjKHYsbSxzLGgpLG5ldyBjKG0sdixvLGgpKTp2WzBdPm1bMF0mJmkucHVzaChuZXcgYyhtLHYscyxoKSxuZXcgYyh2LG0sbyxoKSl9aS5zb3J0KHUpO2Zvcih2YXIgeT1pWzBdLmFbMF0tKDErTWF0aC5hYnMoaVswXS5hWzBdKSkqTWF0aC5wb3coMiwtNTIpLHg9W25ldyBsKFt5LDFdLFt5LDBdLC0xLFtdLFtdLFtdLFtdKV0sYj1bXSxoPTAsXz1pLmxlbmd0aDtoPF87KytoKXt2YXIgdz1pW2hdLGs9dy50eXBlO2s9PT1hP2YoYix4LHQsdy5hLHcuaWR4KTprPT09cz9kKHgsdCx3KTpnKHgsdCx3KX1yZXR1cm4gYn19LHtcImJpbmFyeS1zZWFyY2gtYm91bmRzXCI6MTAyLFwicm9idXN0LW9yaWVudGF0aW9uXCI6NDk1fV0sMTAxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImJpbmFyeS1zZWFyY2gtYm91bmRzXCIpO2Z1bmN0aW9uIGkodCxlKXt0aGlzLnN0YXJzPXQsdGhpcy5lZGdlcz1lfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodCksbj0wO248dDsrK24pcltuXT1bXTtyZXR1cm4gbmV3IGkocixlKX07dmFyIGE9aS5wcm90b3R5cGU7ZnVuY3Rpb24gbyh0LGUscil7Zm9yKHZhciBuPTEsaT10Lmxlbmd0aDtuPGk7bis9MilpZih0W24tMV09PT1lJiZ0W25dPT09cilyZXR1cm4gdFtuLTFdPXRbaS0yXSx0W25dPXRbaS0xXSx2b2lkKHQubGVuZ3RoPWktMil9YS5pc0NvbnN0cmFpbnQ9ZnVuY3Rpb24oKXt2YXIgdD1bMCwwXTtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfXJldHVybiBmdW5jdGlvbihyLGkpe3JldHVybiB0WzBdPU1hdGgubWluKHIsaSksdFsxXT1NYXRoLm1heChyLGkpLG4uZXEodGhpcy5lZGdlcyx0LGUpPj0wfX0oKSxhLnJlbW92ZVRyaWFuZ2xlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnN0YXJzO28oblt0XSxlLHIpLG8obltlXSxyLHQpLG8obltyXSx0LGUpfSxhLmFkZFRyaWFuZ2xlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnN0YXJzO25bdF0ucHVzaChlLHIpLG5bZV0ucHVzaChyLHQpLG5bcl0ucHVzaCh0LGUpfSxhLm9wcG9zaXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuc3RhcnNbZV0sbj0xLGk9ci5sZW5ndGg7bjxpO24rPTIpaWYocltuXT09PXQpcmV0dXJuIHJbbi0xXTtyZXR1cm4tMX0sYS5mbGlwPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5vcHBvc2l0ZSh0LGUpLG49dGhpcy5vcHBvc2l0ZShlLHQpO3RoaXMucmVtb3ZlVHJpYW5nbGUodCxlLHIpLHRoaXMucmVtb3ZlVHJpYW5nbGUoZSx0LG4pLHRoaXMuYWRkVHJpYW5nbGUodCxuLHIpLHRoaXMuYWRkVHJpYW5nbGUoZSxyLG4pfSxhLmVkZ2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuc3RhcnMsZT1bXSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWZvcih2YXIgaT10W3JdLGE9MCxvPWkubGVuZ3RoO2E8bzthKz0yKWUucHVzaChbaVthXSxpW2ErMV1dKTtyZXR1cm4gZX0sYS5jZWxscz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN0YXJzLGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxhPTAsbz1pLmxlbmd0aDthPG87YSs9Mil7dmFyIHM9aVthXSxsPWlbYSsxXTtyPE1hdGgubWluKHMsbCkmJmUucHVzaChbcixzLGxdKX1yZXR1cm4gZX19LHtcImJpbmFyeS1zZWFyY2gtYm91bmRzXCI6MTAyfV0sMTAyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUscixuLGkpe3ZhciBhPVtcImZ1bmN0aW9uIFwiLHQsXCIoYSxsLGgsXCIsbi5qb2luKFwiLFwiKSxcIil7XCIsaT9cIlwiOlwidmFyIGk9XCIscj9cImwtMVwiOlwiaCsxXCIsXCI7d2hpbGUobDw9aCl7dmFyIG09KGwraCk+Pj4xLHg9YVttXVwiXTtyZXR1cm4gaT9lLmluZGV4T2YoXCJjXCIpPDA/YS5wdXNoKFwiO2lmKHg9PT15KXtyZXR1cm4gbX1lbHNlIGlmKHg8PXkpe1wiKTphLnB1c2goXCI7dmFyIHA9Yyh4LHkpO2lmKHA9PT0wKXtyZXR1cm4gbX1lbHNlIGlmKHA8PTApe1wiKTphLnB1c2goXCI7aWYoXCIsZSxcIil7aT1tO1wiKSxyP2EucHVzaChcImw9bSsxfWVsc2V7aD1tLTF9XCIpOmEucHVzaChcImg9bS0xfWVsc2V7bD1tKzF9XCIpLGEucHVzaChcIn1cIiksaT9hLnB1c2goXCJyZXR1cm4gLTF9O1wiKTphLnB1c2goXCJyZXR1cm4gaX07XCIpLGEuam9pbihcIlwiKX1mdW5jdGlvbiBpKHQsZSxyLGkpe3JldHVybiBuZXcgRnVuY3Rpb24oW24oXCJBXCIsXCJ4XCIrdCtcInlcIixlLFtcInlcIl0saSksbihcIlBcIixcImMoeCx5KVwiK3QrXCIwXCIsZSxbXCJ5XCIsXCJjXCJdLGkpLFwiZnVuY3Rpb24gZGlzcGF0Y2hCc2VhcmNoXCIscixcIihhLHksYyxsLGgpe2lmKHR5cGVvZihjKT09PSdmdW5jdGlvbicpe3JldHVybiBQKGEsKGw9PT12b2lkIDApPzA6bHwwLChoPT09dm9pZCAwKT9hLmxlbmd0aC0xOmh8MCx5LGMpfWVsc2V7cmV0dXJuIEEoYSwoYz09PXZvaWQgMCk/MDpjfDAsKGw9PT12b2lkIDApP2EubGVuZ3RoLTE6bHwwLHkpfX1yZXR1cm4gZGlzcGF0Y2hCc2VhcmNoXCIscl0uam9pbihcIlwiKSkoKX1lLmV4cG9ydHM9e2dlOmkoXCI+PVwiLCExLFwiR0VcIiksZ3Q6aShcIj5cIiwhMSxcIkdUXCIpLGx0OmkoXCI8XCIsITAsXCJMVFwiKSxsZTppKFwiPD1cIiwhMCxcIkxFXCIpLGVxOmkoXCItXCIsITAsXCJFUVwiLCEwKX19LHt9XSwxMDM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTEscj0xO3I8dC5sZW5ndGg7KytyKWZvcih2YXIgbj0wO248cjsrK24paWYodFtyXTx0W25dKWU9LWU7ZWxzZSBpZih0W25dPT09dFtyXSlyZXR1cm4gMDtyZXR1cm4gZX19LHt9XSwxMDQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZHVwXCIpLGk9dChcInJvYnVzdC1saW5lYXItc29sdmVcIik7ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGgsaT0wO2k8bjsrK2kpcis9dFtpXSplW2ldO3JldHVybiByfWZ1bmN0aW9uIG8odCl7dmFyIGU9dC5sZW5ndGg7aWYoMD09PWUpcmV0dXJuW107dFswXS5sZW5ndGg7dmFyIHI9bihbdC5sZW5ndGgrMSx0Lmxlbmd0aCsxXSwxKSxvPW4oW3QubGVuZ3RoKzFdLDEpO3JbZV1bZV09MDtmb3IodmFyIHM9MDtzPGU7KytzKXtmb3IodmFyIGw9MDtsPD1zOysrbClyW2xdW3NdPXJbc11bbF09MiphKHRbc10sdFtsXSk7b1tzXT1hKHRbc10sdFtzXSl9dmFyIGM9aShyLG8pLHU9MCxoPWNbZSsxXTtmb3Iocz0wO3M8aC5sZW5ndGg7KytzKXUrPWhbc107dmFyIGY9bmV3IEFycmF5KGUpO2ZvcihzPTA7czxlOysrcyl7aD1jW3NdO3ZhciBwPTA7Zm9yKGw9MDtsPGgubGVuZ3RoOysrbClwKz1oW2xdO2Zbc109cC91fXJldHVybiBmfWZ1bmN0aW9uIHModCl7aWYoMD09PXQubGVuZ3RoKXJldHVybltdO2Zvcih2YXIgZT10WzBdLmxlbmd0aCxyPW4oW2VdKSxpPW8odCksYT0wO2E8dC5sZW5ndGg7KythKWZvcih2YXIgcz0wO3M8ZTsrK3MpcltzXSs9dFthXVtzXSppW2FdO3JldHVybiByfXMuYmFyeWNlbmV0cmljPW8sZS5leHBvcnRzPXN9LHtkdXA6MTYyLFwicm9idXN0LWxpbmVhci1zb2x2ZVwiOjQ5NH1dLDEwNTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bih0KSxyPTAsaT0wO2k8dC5sZW5ndGg7KytpKWZvcih2YXIgYT10W2ldLG89MDtvPGUubGVuZ3RoOysrbylyKz1NYXRoLnBvdyhhW29dLWVbb10sMik7cmV0dXJuIE1hdGguc3FydChyL3QubGVuZ3RoKX07dmFyIG49dChcImNpcmN1bWNlbnRlclwiKX0se2NpcmN1bWNlbnRlcjoxMDR9XSwxMDY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPHI/dDxlP2U6dD5yP3I6dDp0PHI/cjp0PmU/ZTp0fX0se31dLDEwNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG47aWYocil7bj1lO2Zvcih2YXIgaT1uZXcgQXJyYXkoZS5sZW5ndGgpLGE9MDthPGUubGVuZ3RoOysrYSl7dmFyIG89ZVthXTtpW2FdPVtvWzBdLG9bMV0sclthXV19ZT1pfXZhciBzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1kKHQsW10scCh0KSk7cmV0dXJuIG0oZSxuLHIpLCEhbn0odCxlLCEhcik7Zm9yKDt5KHQsZSwhIXIpOylzPSEwO2lmKHImJnMpe24ubGVuZ3RoPTAsci5sZW5ndGg9MDtmb3IodmFyIGE9MDthPGUubGVuZ3RoOysrYSl7dmFyIG89ZVthXTtuLnB1c2goW29bMF0sb1sxXV0pLHIucHVzaChvWzJdKX19cmV0dXJuIHN9O3ZhciBuPXQoXCJ1bmlvbi1maW5kXCIpLGk9dChcImJveC1pbnRlcnNlY3RcIiksYT10KFwicm9idXN0LXNlZ21lbnQtaW50ZXJzZWN0XCIpLG89dChcImJpZy1yYXRcIikscz10KFwiYmlnLXJhdC9jbXBcIiksbD10KFwiYmlnLXJhdC90by1mbG9hdFwiKSxjPXQoXCJyYXQtdmVjXCIpLHU9dChcIm5leHRhZnRlclwiKSxoPXQoXCIuL2xpYi9yYXQtc2VnLWludGVyc2VjdFwiKTtmdW5jdGlvbiBmKHQpe3ZhciBlPWwodCk7cmV0dXJuW3UoZSwtMS8wKSx1KGUsMS8wKV19ZnVuY3Rpb24gcCh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDsrK3Ipe3ZhciBuPXRbcl07ZVtyXT1bdShuWzBdLC0xLzApLHUoblsxXSwtMS8wKSx1KG5bMF0sMS8wKSx1KG5bMV0sMS8wKV19cmV0dXJuIGV9ZnVuY3Rpb24gZCh0LGUscil7Zm9yKHZhciBhPWUubGVuZ3RoLG89bmV3IG4oYSkscz1bXSxsPTA7bDxlLmxlbmd0aDsrK2wpe3ZhciBjPWVbbF0saD1mKGNbMF0pLHA9ZihjWzFdKTtzLnB1c2goW3UoaFswXSwtMS8wKSx1KHBbMF0sLTEvMCksdShoWzFdLDEvMCksdShwWzFdLDEvMCldKX1pKHMsZnVuY3Rpb24odCxlKXtvLmxpbmsodCxlKX0pO3ZhciBkPSEwLGc9bmV3IEFycmF5KGEpO2ZvcihsPTA7bDxhOysrbCl7KG09by5maW5kKGwpKSE9PWwmJihkPSExLHRbbV09W01hdGgubWluKHRbbF1bMF0sdFttXVswXSksTWF0aC5taW4odFtsXVsxXSx0W21dWzFdKV0pfWlmKGQpcmV0dXJuIG51bGw7dmFyIHY9MDtmb3IobD0wO2w8YTsrK2wpe3ZhciBtOyhtPW8uZmluZChsKSk9PT1sPyhnW2xdPXYsdFt2KytdPXRbbF0pOmdbbF09LTF9dC5sZW5ndGg9djtmb3IobD0wO2w8YTsrK2wpZ1tsXTwwJiYoZ1tsXT1nW28uZmluZChsKV0pO3JldHVybiBnfWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gdFswXS1lWzBdfHx0WzFdLWVbMV19ZnVuY3Rpb24gdih0LGUpe3ZhciByPXRbMF0tZVswXXx8dFsxXS1lWzFdO3JldHVybiByfHwodFsyXTxlWzJdPy0xOnRbMl0+ZVsyXT8xOjApfWZ1bmN0aW9uIG0odCxlLHIpe2lmKDAhPT10Lmxlbmd0aCl7aWYoZSlmb3IodmFyIG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGk9ZVsobz10W25dKVswXV0sYT1lW29bMV1dO29bMF09TWF0aC5taW4oaSxhKSxvWzFdPU1hdGgubWF4KGksYSl9ZWxzZSBmb3Iobj0wO248dC5sZW5ndGg7KytuKXt2YXIgbztpPShvPXRbbl0pWzBdLGE9b1sxXTtvWzBdPU1hdGgubWluKGksYSksb1sxXT1NYXRoLm1heChpLGEpfXI/dC5zb3J0KHYpOnQuc29ydChnKTt2YXIgcz0xO2ZvcihuPTE7bjx0Lmxlbmd0aDsrK24pe3ZhciBsPXRbbi0xXSxjPXRbbl07KGNbMF0hPT1sWzBdfHxjWzFdIT09bFsxXXx8ciYmY1syXSE9PWxbMl0pJiYodFtzKytdPWMpfXQubGVuZ3RoPXN9fWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBuPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlLmxlbmd0aCksbj0wO248ZS5sZW5ndGg7KytuKXt2YXIgaT1lW25dLGE9dFtpWzBdXSxvPXRbaVsxXV07cltuXT1bdShNYXRoLm1pbihhWzBdLG9bMF0pLC0xLzApLHUoTWF0aC5taW4oYVsxXSxvWzFdKSwtMS8wKSx1KE1hdGgubWF4KGFbMF0sb1swXSksMS8wKSx1KE1hdGgubWF4KGFbMV0sb1sxXSksMS8wKV19cmV0dXJuIHJ9KHQsZSksZj1mdW5jdGlvbih0LGUscil7dmFyIG49W107cmV0dXJuIGkocixmdW5jdGlvbihyLGkpe3ZhciBvPWVbcl0scz1lW2ldO2lmKG9bMF0hPT1zWzBdJiZvWzBdIT09c1sxXSYmb1sxXSE9PXNbMF0mJm9bMV0hPT1zWzFdKXt2YXIgbD10W29bMF1dLGM9dFtvWzFdXSx1PXRbc1swXV0saD10W3NbMV1dO2EobCxjLHUsaCkmJm4ucHVzaChbcixpXSl9fSksbn0odCxlLG4pLGc9cCh0KSx2PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBvPVtdO3JldHVybiBpKHIsbixmdW5jdGlvbihyLG4pe3ZhciBpPWVbcl07aWYoaVswXSE9PW4mJmlbMV0hPT1uKXt2YXIgcz10W25dLGw9dFtpWzBdXSxjPXRbaVsxXV07YShsLGMscyxzKSYmby5wdXNoKFtyLG5dKX19KSxvfSh0LGUsbixnKSx5PWQodCxmdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLHUsZj10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm5bbyh0WzBdKSxvKHRbMV0pXX0pO2ZvcihhPTA7YTxyLmxlbmd0aDsrK2Epe3ZhciBwPXJbYV07dT1wWzBdO3ZhciBkPXBbMV0sZz1lW3VdLHY9ZVtkXSxtPWgoYyh0W2dbMF1dKSxjKHRbZ1sxXV0pLGModFt2WzBdXSksYyh0W3ZbMV1dKSk7aWYobSl7dmFyIHk9dC5sZW5ndGg7dC5wdXNoKFtsKG1bMF0pLGwobVsxXSldKSxmLnB1c2gobSksbi5wdXNoKFt1LHldLFtkLHldKX19Zm9yKG4uc29ydChmdW5jdGlvbih0LGUpe2lmKHRbMF0hPT1lWzBdKXJldHVybiB0WzBdLWVbMF07dmFyIHI9Zlt0WzFdXSxuPWZbZVsxXV07cmV0dXJuIHMoclswXSxuWzBdKXx8cyhyWzFdLG5bMV0pfSksYT1uLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgeD1lW3U9KFM9blthXSlbMF1dLGI9eFswXSxfPXhbMV0sdz10W2JdLGs9dFtfXTtpZigod1swXS1rWzBdfHx3WzFdLWtbMV0pPDApe3ZhciBBPWI7Yj1fLF89QX14WzBdPWI7dmFyIFQsTT14WzFdPVNbMV07Zm9yKGkmJihUPXhbMl0pO2E+MCYmblthLTFdWzBdPT09dTspe3ZhciBTLEU9KFM9blstLWFdKVsxXTtpP2UucHVzaChbTSxFLFRdKTplLnB1c2goW00sRV0pLE09RX1pP2UucHVzaChbTSxfLFRdKTplLnB1c2goW00sX10pfXJldHVybiBmfSh0LGUsZix2LHIpKTtyZXR1cm4gbShlLHksciksISF5fHwoZi5sZW5ndGg+MHx8di5sZW5ndGg+MCl9fSx7XCIuL2xpYi9yYXQtc2VnLWludGVyc2VjdFwiOjEwOCxcImJpZy1yYXRcIjo2OSxcImJpZy1yYXQvY21wXCI6NjcsXCJiaWctcmF0L3RvLWZsb2F0XCI6ODEsXCJib3gtaW50ZXJzZWN0XCI6ODcsbmV4dGFmdGVyOjQ0NCxcInJhdC12ZWNcIjo0NzksXCJyb2J1c3Qtc2VnbWVudC1pbnRlcnNlY3RcIjo0OTgsXCJ1bmlvbi1maW5kXCI6NTMxfV0sMTA4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXMoZSx0KSxoPXMobixyKSxmPXUoYSxoKTtpZigwPT09byhmKSlyZXR1cm4gbnVsbDt2YXIgcD1zKHQsciksZD11KGgscCksZz1pKGQsZiksdj1jKGEsZyk7cmV0dXJuIGwodCx2KX07dmFyIG49dChcImJpZy1yYXQvbXVsXCIpLGk9dChcImJpZy1yYXQvZGl2XCIpLGE9dChcImJpZy1yYXQvc3ViXCIpLG89dChcImJpZy1yYXQvc2lnblwiKSxzPXQoXCJyYXQtdmVjL3N1YlwiKSxsPXQoXCJyYXQtdmVjL2FkZFwiKSxjPXQoXCJyYXQtdmVjL211bHNcIik7ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBhKG4odFswXSxlWzFdKSxuKHRbMV0sZVswXSkpfX0se1wiYmlnLXJhdC9kaXZcIjo2OCxcImJpZy1yYXQvbXVsXCI6NzgsXCJiaWctcmF0L3NpZ25cIjo3OSxcImJpZy1yYXQvc3ViXCI6ODAsXCJyYXQtdmVjL2FkZFwiOjQ3OCxcInJhdC12ZWMvbXVsc1wiOjQ4MCxcInJhdC12ZWMvc3ViXCI6NDgxfV0sMTA5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImNsYW1wXCIpO2Z1bmN0aW9uIGkodCxlKXtudWxsPT1lJiYoZT0hMCk7dmFyIHI9dFswXSxpPXRbMV0sYT10WzJdLG89dFszXTtyZXR1cm4gbnVsbD09byYmKG89ZT8xOjI1NSksZSYmKHIqPTI1NSxpKj0yNTUsYSo9MjU1LG8qPTI1NSksMTY3NzcyMTYqKHI9MjU1Jm4ociwwLDI1NSkpKygoaT0yNTUmbihpLDAsMjU1KSk8PDE2KSsoKGE9MjU1Jm4oYSwwLDI1NSkpPDw4KSsobz0yNTUmbihvLDAsMjU1KSl9ZS5leHBvcnRzPWksZS5leHBvcnRzLnRvPWksZS5leHBvcnRzLmZyb209ZnVuY3Rpb24odCxlKXt2YXIgcj0odD0rdCk+Pj4yNCxuPSgxNjcxMTY4MCZ0KT4+PjE2LGk9KDY1MjgwJnQpPj4+OCxhPTI1NSZ0O3JldHVybiExPT09ZT9bcixuLGksYV06W3IvMjU1LG4vMjU1LGkvMjU1LGEvMjU1XX19LHtjbGFtcDoxMDZ9XSwxMTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e2FsaWNlYmx1ZTpbMjQwLDI0OCwyNTVdLGFudGlxdWV3aGl0ZTpbMjUwLDIzNSwyMTVdLGFxdWE6WzAsMjU1LDI1NV0sYXF1YW1hcmluZTpbMTI3LDI1NSwyMTJdLGF6dXJlOlsyNDAsMjU1LDI1NV0sYmVpZ2U6WzI0NSwyNDUsMjIwXSxiaXNxdWU6WzI1NSwyMjgsMTk2XSxibGFjazpbMCwwLDBdLGJsYW5jaGVkYWxtb25kOlsyNTUsMjM1LDIwNV0sYmx1ZTpbMCwwLDI1NV0sYmx1ZXZpb2xldDpbMTM4LDQzLDIyNl0sYnJvd246WzE2NSw0Miw0Ml0sYnVybHl3b29kOlsyMjIsMTg0LDEzNV0sY2FkZXRibHVlOls5NSwxNTgsMTYwXSxjaGFydHJldXNlOlsxMjcsMjU1LDBdLGNob2NvbGF0ZTpbMjEwLDEwNSwzMF0sY29yYWw6WzI1NSwxMjcsODBdLGNvcm5mbG93ZXJibHVlOlsxMDAsMTQ5LDIzN10sY29ybnNpbGs6WzI1NSwyNDgsMjIwXSxjcmltc29uOlsyMjAsMjAsNjBdLGN5YW46WzAsMjU1LDI1NV0sZGFya2JsdWU6WzAsMCwxMzldLGRhcmtjeWFuOlswLDEzOSwxMzldLGRhcmtnb2xkZW5yb2Q6WzE4NCwxMzQsMTFdLGRhcmtncmF5OlsxNjksMTY5LDE2OV0sZGFya2dyZWVuOlswLDEwMCwwXSxkYXJrZ3JleTpbMTY5LDE2OSwxNjldLGRhcmtraGFraTpbMTg5LDE4MywxMDddLGRhcmttYWdlbnRhOlsxMzksMCwxMzldLGRhcmtvbGl2ZWdyZWVuOls4NSwxMDcsNDddLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMF0sZGFya29yY2hpZDpbMTUzLDUwLDIwNF0sZGFya3JlZDpbMTM5LDAsMF0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjJdLGRhcmtzZWFncmVlbjpbMTQzLDE4OCwxNDNdLGRhcmtzbGF0ZWJsdWU6WzcyLDYxLDEzOV0sZGFya3NsYXRlZ3JheTpbNDcsNzksNzldLGRhcmtzbGF0ZWdyZXk6WzQ3LDc5LDc5XSxkYXJrdHVycXVvaXNlOlswLDIwNiwyMDldLGRhcmt2aW9sZXQ6WzE0OCwwLDIxMV0sZGVlcHBpbms6WzI1NSwyMCwxNDddLGRlZXBza3libHVlOlswLDE5MSwyNTVdLGRpbWdyYXk6WzEwNSwxMDUsMTA1XSxkaW1ncmV5OlsxMDUsMTA1LDEwNV0sZG9kZ2VyYmx1ZTpbMzAsMTQ0LDI1NV0sZmlyZWJyaWNrOlsxNzgsMzQsMzRdLGZsb3JhbHdoaXRlOlsyNTUsMjUwLDI0MF0sZm9yZXN0Z3JlZW46WzM0LDEzOSwzNF0sZnVjaHNpYTpbMjU1LDAsMjU1XSxnYWluc2Jvcm86WzIyMCwyMjAsMjIwXSxnaG9zdHdoaXRlOlsyNDgsMjQ4LDI1NV0sZ29sZDpbMjU1LDIxNSwwXSxnb2xkZW5yb2Q6WzIxOCwxNjUsMzJdLGdyYXk6WzEyOCwxMjgsMTI4XSxncmVlbjpbMCwxMjgsMF0sZ3JlZW55ZWxsb3c6WzE3MywyNTUsNDddLGdyZXk6WzEyOCwxMjgsMTI4XSxob25leWRldzpbMjQwLDI1NSwyNDBdLGhvdHBpbms6WzI1NSwxMDUsMTgwXSxpbmRpYW5yZWQ6WzIwNSw5Miw5Ml0saW5kaWdvOls3NSwwLDEzMF0saXZvcnk6WzI1NSwyNTUsMjQwXSxraGFraTpbMjQwLDIzMCwxNDBdLGxhdmVuZGVyOlsyMzAsMjMwLDI1MF0sbGF2ZW5kZXJibHVzaDpbMjU1LDI0MCwyNDVdLGxhd25ncmVlbjpbMTI0LDI1MiwwXSxsZW1vbmNoaWZmb246WzI1NSwyNTAsMjA1XSxsaWdodGJsdWU6WzE3MywyMTYsMjMwXSxsaWdodGNvcmFsOlsyNDAsMTI4LDEyOF0sbGlnaHRjeWFuOlsyMjQsMjU1LDI1NV0sbGlnaHRnb2xkZW5yb2R5ZWxsb3c6WzI1MCwyNTAsMjEwXSxsaWdodGdyYXk6WzIxMSwyMTEsMjExXSxsaWdodGdyZWVuOlsxNDQsMjM4LDE0NF0sbGlnaHRncmV5OlsyMTEsMjExLDIxMV0sbGlnaHRwaW5rOlsyNTUsMTgyLDE5M10sbGlnaHRzYWxtb246WzI1NSwxNjAsMTIyXSxsaWdodHNlYWdyZWVuOlszMiwxNzgsMTcwXSxsaWdodHNreWJsdWU6WzEzNSwyMDYsMjUwXSxsaWdodHNsYXRlZ3JheTpbMTE5LDEzNiwxNTNdLGxpZ2h0c2xhdGVncmV5OlsxMTksMTM2LDE1M10sbGlnaHRzdGVlbGJsdWU6WzE3NiwxOTYsMjIyXSxsaWdodHllbGxvdzpbMjU1LDI1NSwyMjRdLGxpbWU6WzAsMjU1LDBdLGxpbWVncmVlbjpbNTAsMjA1LDUwXSxsaW5lbjpbMjUwLDI0MCwyMzBdLG1hZ2VudGE6WzI1NSwwLDI1NV0sbWFyb29uOlsxMjgsMCwwXSxtZWRpdW1hcXVhbWFyaW5lOlsxMDIsMjA1LDE3MF0sbWVkaXVtYmx1ZTpbMCwwLDIwNV0sbWVkaXVtb3JjaGlkOlsxODYsODUsMjExXSxtZWRpdW1wdXJwbGU6WzE0NywxMTIsMjE5XSxtZWRpdW1zZWFncmVlbjpbNjAsMTc5LDExM10sbWVkaXVtc2xhdGVibHVlOlsxMjMsMTA0LDIzOF0sbWVkaXVtc3ByaW5nZ3JlZW46WzAsMjUwLDE1NF0sbWVkaXVtdHVycXVvaXNlOls3MiwyMDksMjA0XSxtZWRpdW12aW9sZXRyZWQ6WzE5OSwyMSwxMzNdLG1pZG5pZ2h0Ymx1ZTpbMjUsMjUsMTEyXSxtaW50Y3JlYW06WzI0NSwyNTUsMjUwXSxtaXN0eXJvc2U6WzI1NSwyMjgsMjI1XSxtb2NjYXNpbjpbMjU1LDIyOCwxODFdLG5hdmFqb3doaXRlOlsyNTUsMjIyLDE3M10sbmF2eTpbMCwwLDEyOF0sb2xkbGFjZTpbMjUzLDI0NSwyMzBdLG9saXZlOlsxMjgsMTI4LDBdLG9saXZlZHJhYjpbMTA3LDE0MiwzNV0sb3JhbmdlOlsyNTUsMTY1LDBdLG9yYW5nZXJlZDpbMjU1LDY5LDBdLG9yY2hpZDpbMjE4LDExMiwyMTRdLHBhbGVnb2xkZW5yb2Q6WzIzOCwyMzIsMTcwXSxwYWxlZ3JlZW46WzE1MiwyNTEsMTUyXSxwYWxldHVycXVvaXNlOlsxNzUsMjM4LDIzOF0scGFsZXZpb2xldHJlZDpbMjE5LDExMiwxNDddLHBhcGF5YXdoaXA6WzI1NSwyMzksMjEzXSxwZWFjaHB1ZmY6WzI1NSwyMTgsMTg1XSxwZXJ1OlsyMDUsMTMzLDYzXSxwaW5rOlsyNTUsMTkyLDIwM10scGx1bTpbMjIxLDE2MCwyMjFdLHBvd2RlcmJsdWU6WzE3NiwyMjQsMjMwXSxwdXJwbGU6WzEyOCwwLDEyOF0scmViZWNjYXB1cnBsZTpbMTAyLDUxLDE1M10scmVkOlsyNTUsMCwwXSxyb3N5YnJvd246WzE4OCwxNDMsMTQzXSxyb3lhbGJsdWU6WzY1LDEwNSwyMjVdLHNhZGRsZWJyb3duOlsxMzksNjksMTldLHNhbG1vbjpbMjUwLDEyOCwxMTRdLHNhbmR5YnJvd246WzI0NCwxNjQsOTZdLHNlYWdyZWVuOls0NiwxMzksODddLHNlYXNoZWxsOlsyNTUsMjQ1LDIzOF0sc2llbm5hOlsxNjAsODIsNDVdLHNpbHZlcjpbMTkyLDE5MiwxOTJdLHNreWJsdWU6WzEzNSwyMDYsMjM1XSxzbGF0ZWJsdWU6WzEwNiw5MCwyMDVdLHNsYXRlZ3JheTpbMTEyLDEyOCwxNDRdLHNsYXRlZ3JleTpbMTEyLDEyOCwxNDRdLHNub3c6WzI1NSwyNTAsMjUwXSxzcHJpbmdncmVlbjpbMCwyNTUsMTI3XSxzdGVlbGJsdWU6WzcwLDEzMCwxODBdLHRhbjpbMjEwLDE4MCwxNDBdLHRlYWw6WzAsMTI4LDEyOF0sdGhpc3RsZTpbMjE2LDE5MSwyMTZdLHRvbWF0bzpbMjU1LDk5LDcxXSx0dXJxdW9pc2U6WzY0LDIyNCwyMDhdLHZpb2xldDpbMjM4LDEzMCwyMzhdLHdoZWF0OlsyNDUsMjIyLDE3OV0sd2hpdGU6WzI1NSwyNTUsMjU1XSx3aGl0ZXNtb2tlOlsyNDUsMjQ1LDI0NV0seWVsbG93OlsyNTUsMjU1LDBdLHllbGxvd2dyZWVuOlsxNTQsMjA1LDUwXX19LHt9XSwxMTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiY29sb3ItcmdiYVwiKSxpPXQoXCJjbGFtcFwiKSxhPXQoXCJkdHlwZVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtcImZsb2F0XCIhPT1lJiZlfHwoZT1cImFycmF5XCIpLFwidWludFwiPT09ZSYmKGU9XCJ1aW50OFwiKSxcInVpbnRfY2xhbXBlZFwiPT09ZSYmKGU9XCJ1aW50OF9jbGFtcGVkXCIpO3ZhciByPW5ldyhhKGUpKSg0KSxvPVwidWludDhcIiE9PWUmJlwidWludDhfY2xhbXBlZFwiIT09ZTtyZXR1cm4gdC5sZW5ndGgmJlwic3RyaW5nXCIhPXR5cGVvZiB0fHwoKHQ9bih0KSlbMF0vPTI1NSx0WzFdLz0yNTUsdFsyXS89MjU1KSxmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheXx8ISEoQXJyYXkuaXNBcnJheSh0KSYmKHRbMF0+MXx8MD09PXRbMF0pJiYodFsxXT4xfHwwPT09dFsxXSkmJih0WzJdPjF8fDA9PT10WzJdKSYmKCF0WzNdfHx0WzNdPjEpKX0odCk/KHJbMF09dFswXSxyWzFdPXRbMV0sclsyXT10WzJdLHJbM109bnVsbCE9dFszXT90WzNdOjI1NSxvJiYoclswXS89MjU1LHJbMV0vPTI1NSxyWzJdLz0yNTUsclszXS89MjU1KSxyKToobz8oclswXT10WzBdLHJbMV09dFsxXSxyWzJdPXRbMl0sclszXT1udWxsIT10WzNdP3RbM106MSk6KHJbMF09aShNYXRoLmZsb29yKDI1NSp0WzBdKSwwLDI1NSksclsxXT1pKE1hdGguZmxvb3IoMjU1KnRbMV0pLDAsMjU1KSxyWzJdPWkoTWF0aC5mbG9vcigyNTUqdFsyXSksMCwyNTUpLHJbM109bnVsbD09dFszXT8yNTU6aShNYXRoLmZsb29yKDI1NSp0WzNdKSwwLDI1NSkpLHIpfX0se2NsYW1wOjEwNixcImNvbG9yLXJnYmFcIjoxMTMsZHR5cGU6MTYxfV0sMTEyOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJjb2xvci1uYW1lXCIpLGk9dChcImlzLXBsYWluLW9ialwiKSxhPXQoXCJkZWZpbmVkXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxzLGw9W10sYz0xO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KWlmKG5bdF0pbD1uW3RdLnNsaWNlKCkscz1cInJnYlwiO2Vsc2UgaWYoXCJ0cmFuc3BhcmVudFwiPT09dCljPTAscz1cInJnYlwiLGw9WzAsMCwwXTtlbHNlIGlmKC9eI1tBLUZhLWYwLTldKyQvLnRlc3QodCkpe3ZhciB1PXQuc2xpY2UoMSksaD11Lmxlbmd0aCxmPWg8PTQ7Yz0xLGY/KGw9W3BhcnNlSW50KHVbMF0rdVswXSwxNikscGFyc2VJbnQodVsxXSt1WzFdLDE2KSxwYXJzZUludCh1WzJdK3VbMl0sMTYpXSw0PT09aCYmKGM9cGFyc2VJbnQodVszXSt1WzNdLDE2KS8yNTUpKToobD1bcGFyc2VJbnQodVswXSt1WzFdLDE2KSxwYXJzZUludCh1WzJdK3VbM10sMTYpLHBhcnNlSW50KHVbNF0rdVs1XSwxNildLDg9PT1oJiYoYz1wYXJzZUludCh1WzZdK3VbN10sMTYpLzI1NSkpLGxbMF18fChsWzBdPTApLGxbMV18fChsWzFdPTApLGxbMl18fChsWzJdPTApLHM9XCJyZ2JcIn1lbHNlIGlmKGU9L14oKD86cmdifGhzW2x2Yl18aHdifGNteWs/fHh5W3p5XXxncmF5fGxhYnxsY2h1P3Y/fFtseV11dnxsbXMpYT8pXFxzKlxcKChbXlxcKV0qKVxcKS8uZXhlYyh0KSl7dmFyIHA9ZVsxXSx1PXAucmVwbGFjZSgvYSQvLFwiXCIpO3M9dTt2YXIgaD1cImNteWtcIj09PXU/NDpcImdyYXlcIj09PXU/MTozO2w9ZVsyXS50cmltKCkuc3BsaXQoL1xccyosXFxzKi8pLm1hcChmdW5jdGlvbih0LGUpe2lmKC8lJC8udGVzdCh0KSlyZXR1cm4gZT09PWg/cGFyc2VGbG9hdCh0KS8xMDA6XCJyZ2JcIj09PXU/MjU1KnBhcnNlRmxvYXQodCkvMTAwOnBhcnNlRmxvYXQodCk7aWYoXCJoXCI9PT11W2VdKXtpZigvZGVnJC8udGVzdCh0KSlyZXR1cm4gcGFyc2VGbG9hdCh0KTtpZih2b2lkIDAhPT1vW3RdKXJldHVybiBvW3RdfXJldHVybiBwYXJzZUZsb2F0KHQpfSkscD09PXUmJmwucHVzaCgxKSxjPXZvaWQgMD09PWxbaF0/MTpsW2hdLGw9bC5zbGljZSgwLGgpfWVsc2UgdC5sZW5ndGg+MTAmJi9bMC05XSg/Olxcc3xcXC8pLy50ZXN0KHQpJiYobD10Lm1hdGNoKC8oWzAtOV0rKS9nKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlRmxvYXQodCl9KSxzPXQubWF0Y2goLyhbYS16XSkvZ2kpLmpvaW4oXCJcIikudG9Mb3dlckNhc2UoKSk7ZWxzZSBpZihpc05hTih0KSlpZihpKHQpKXt2YXIgZD1hKHQucix0LnJlZCx0LlIsbnVsbCk7bnVsbCE9PWQ/KHM9XCJyZ2JcIixsPVtkLGEodC5nLHQuZ3JlZW4sdC5HKSxhKHQuYix0LmJsdWUsdC5CKV0pOihzPVwiaHNsXCIsbD1bYSh0LmgsdC5odWUsdC5IKSxhKHQucyx0LnNhdHVyYXRpb24sdC5TKSxhKHQubCx0LmxpZ2h0bmVzcyx0LkwsdC5iLHQuYnJpZ2h0bmVzcyldKSxjPWEodC5hLHQuYWxwaGEsdC5vcGFjaXR5LDEpLG51bGwhPXQub3BhY2l0eSYmKGMvPTEwMCl9ZWxzZShBcnJheS5pc0FycmF5KHQpfHxyLkFycmF5QnVmZmVyJiZBcnJheUJ1ZmZlci5pc1ZpZXcmJkFycmF5QnVmZmVyLmlzVmlldyh0KSkmJihsPVt0WzBdLHRbMV0sdFsyXV0scz1cInJnYlwiLGM9ND09PXQubGVuZ3RoP3RbM106MSk7ZWxzZSBzPVwicmdiXCIsbD1bdD4+PjE2LCg2NTI4MCZ0KT4+PjgsMjU1JnRdO3JldHVybntzcGFjZTpzLHZhbHVlczpsLGFscGhhOmN9fTt2YXIgbz17cmVkOjAsb3JhbmdlOjYwLHllbGxvdzoxMjAsZ3JlZW46MTgwLGJsdWU6MjQwLHB1cnBsZTozMDB9fSkuY2FsbCh0aGlzLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7XCJjb2xvci1uYW1lXCI6MTEwLGRlZmluZWQ6MTU2LFwiaXMtcGxhaW4tb2JqXCI6NDE1fV0sMTEzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImNvbG9yLXBhcnNlXCIpLGk9dChcImNvbG9yLXNwYWNlL2hzbFwiKSxhPXQoXCJjbGFtcFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscj1uKHQpO3JldHVybiByLnNwYWNlPygoZT1BcnJheSgzKSlbMF09YShyLnZhbHVlc1swXSwwLDI1NSksZVsxXT1hKHIudmFsdWVzWzFdLDAsMjU1KSxlWzJdPWEoci52YWx1ZXNbMl0sMCwyNTUpLFwiaFwiPT09ci5zcGFjZVswXSYmKGU9aS5yZ2IoZSkpLGUucHVzaChhKHIuYWxwaGEsMCwxKSksZSk6W119fSx7Y2xhbXA6MTA2LFwiY29sb3ItcGFyc2VcIjoxMTIsXCJjb2xvci1zcGFjZS9oc2xcIjoxMTR9XSwxMTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9yZ2JcIik7ZS5leHBvcnRzPXtuYW1lOlwiaHNsXCIsbWluOlswLDAsMF0sbWF4OlszNjAsMTAwLDEwMF0sY2hhbm5lbDpbXCJodWVcIixcInNhdHVyYXRpb25cIixcImxpZ2h0bmVzc1wiXSxhbGlhczpbXCJIU0xcIl0scmdiOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbz10WzBdLzM2MCxzPXRbMV0vMTAwLGw9dFsyXS8xMDA7aWYoMD09PXMpcmV0dXJuW2E9MjU1KmwsYSxhXTtlPTIqbC0ocj1sPC41P2wqKDErcyk6bCtzLWwqcyksaT1bMCwwLDBdO2Zvcih2YXIgYz0wO2M8MztjKyspKG49bysxLzMqLShjLTEpKTwwP24rKzpuPjEmJm4tLSxhPTYqbjwxP2UrNiooci1lKSpuOjIqbjwxP3I6MypuPDI/ZSsoci1lKSooMi8zLW4pKjY6ZSxpW2NdPTI1NSphO3JldHVybiBpfX0sbi5oc2w9ZnVuY3Rpb24odCl7dmFyIGUscixuPXRbMF0vMjU1LGk9dFsxXS8yNTUsYT10WzJdLzI1NSxvPU1hdGgubWluKG4saSxhKSxzPU1hdGgubWF4KG4saSxhKSxsPXMtbztyZXR1cm4gcz09PW8/ZT0wOm49PT1zP2U9KGktYSkvbDppPT09cz9lPTIrKGEtbikvbDphPT09cyYmKGU9NCsobi1pKS9sKSwoZT1NYXRoLm1pbig2MCplLDM2MCkpPDAmJihlKz0zNjApLHI9KG8rcykvMixbZSwxMDAqKHM9PT1vPzA6cjw9LjU/bC8ocytvKTpsLygyLXMtbykpLDEwMCpyXX19LHtcIi4vcmdiXCI6MTE1fV0sMTE1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtuYW1lOlwicmdiXCIsbWluOlswLDAsMF0sbWF4OlsyNTUsMjU1LDI1NV0sY2hhbm5lbDpbXCJyZWRcIixcImdyZWVuXCIsXCJibHVlXCJdLGFsaWFzOltcIlJHQlwiXX19LHt9XSwxMTY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e2pldDpbe2luZGV4OjAscmdiOlswLDAsMTMxXX0se2luZGV4Oi4xMjUscmdiOlswLDYwLDE3MF19LHtpbmRleDouMzc1LHJnYjpbNSwyNTUsMjU1XX0se2luZGV4Oi42MjUscmdiOlsyNTUsMjU1LDBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzI1MCwwLDBdfSx7aW5kZXg6MSxyZ2I6WzEyOCwwLDBdfV0saHN2Olt7aW5kZXg6MCxyZ2I6WzI1NSwwLDBdfSx7aW5kZXg6LjE2OSxyZ2I6WzI1MywyNTUsMl19LHtpbmRleDouMTczLHJnYjpbMjQ3LDI1NSwyXX0se2luZGV4Oi4zMzcscmdiOlswLDI1Miw0XX0se2luZGV4Oi4zNDEscmdiOlswLDI1MiwxMF19LHtpbmRleDouNTA2LHJnYjpbMSwyNDksMjU1XX0se2luZGV4Oi42NzEscmdiOlsyLDAsMjUzXX0se2luZGV4Oi42NzUscmdiOls4LDAsMjUzXX0se2luZGV4Oi44MzkscmdiOlsyNTUsMCwyNTFdfSx7aW5kZXg6Ljg0MyxyZ2I6WzI1NSwwLDI0NV19LHtpbmRleDoxLHJnYjpbMjU1LDAsNl19XSxob3Q6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjMscmdiOlsyMzAsMCwwXX0se2luZGV4Oi42LHJnYjpbMjU1LDIxMCwwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NV19XSxjb29sOlt7aW5kZXg6MCxyZ2I6WzAsMjU1LDI1NV19LHtpbmRleDoxLHJnYjpbMjU1LDAsMjU1XX1dLHNwcmluZzpbe2luZGV4OjAscmdiOlsyNTUsMCwyNTVdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMF19XSxzdW1tZXI6W3tpbmRleDowLHJnYjpbMCwxMjgsMTAyXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDEwMl19XSxhdXR1bW46W3tpbmRleDowLHJnYjpbMjU1LDAsMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwwXX1dLHdpbnRlcjpbe2luZGV4OjAscmdiOlswLDAsMjU1XX0se2luZGV4OjEscmdiOlswLDI1NSwxMjhdfV0sYm9uZTpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMzc2LHJnYjpbODQsODQsMTE2XX0se2luZGV4Oi43NTMscmdiOlsxNjksMjAwLDIwMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyNTVdfV0sY29wcGVyOlt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi44MDQscmdiOlsyNTUsMTYwLDEwMl19LHtpbmRleDoxLHJnYjpbMjU1LDE5OSwxMjddfV0sZ3JleXM6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1XX1dLHlpZ25idTpbe2luZGV4OjAscmdiOls4LDI5LDg4XX0se2luZGV4Oi4xMjUscmdiOlszNyw1MiwxNDhdfSx7aW5kZXg6LjI1LHJnYjpbMzQsOTQsMTY4XX0se2luZGV4Oi4zNzUscmdiOlsyOSwxNDUsMTkyXX0se2luZGV4Oi41LHJnYjpbNjUsMTgyLDE5Nl19LHtpbmRleDouNjI1LHJnYjpbMTI3LDIwNSwxODddfSx7aW5kZXg6Ljc1LHJnYjpbMTk5LDIzMywxODBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzIzNywyNDgsMjE3XX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDIxN119XSxncmVlbnM6W3tpbmRleDowLHJnYjpbMCw2OCwyN119LHtpbmRleDouMTI1LHJnYjpbMCwxMDksNDRdfSx7aW5kZXg6LjI1LHJnYjpbMzUsMTM5LDY5XX0se2luZGV4Oi4zNzUscmdiOls2NSwxNzEsOTNdfSx7aW5kZXg6LjUscmdiOlsxMTYsMTk2LDExOF19LHtpbmRleDouNjI1LHJnYjpbMTYxLDIxNywxNTVdfSx7aW5kZXg6Ljc1LHJnYjpbMTk5LDIzMywxOTJdfSx7aW5kZXg6Ljg3NSxyZ2I6WzIyOSwyNDUsMjI0XX0se2luZGV4OjEscmdiOlsyNDcsMjUyLDI0NV19XSx5aW9ycmQ6W3tpbmRleDowLHJnYjpbMTI4LDAsMzhdfSx7aW5kZXg6LjEyNSxyZ2I6WzE4OSwwLDM4XX0se2luZGV4Oi4yNSxyZ2I6WzIyNywyNiwyOF19LHtpbmRleDouMzc1LHJnYjpbMjUyLDc4LDQyXX0se2luZGV4Oi41LHJnYjpbMjUzLDE0MSw2MF19LHtpbmRleDouNjI1LHJnYjpbMjU0LDE3OCw3Nl19LHtpbmRleDouNzUscmdiOlsyNTQsMjE3LDExOF19LHtpbmRleDouODc1LHJnYjpbMjU1LDIzNywxNjBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjA0XX1dLGJsdWVyZWQ6W3tpbmRleDowLHJnYjpbMCwwLDI1NV19LHtpbmRleDoxLHJnYjpbMjU1LDAsMF19XSxyZGJ1Olt7aW5kZXg6MCxyZ2I6WzUsMTAsMTcyXX0se2luZGV4Oi4zNSxyZ2I6WzEwNiwxMzcsMjQ3XX0se2luZGV4Oi41LHJnYjpbMTkwLDE5MCwxOTBdfSx7aW5kZXg6LjYscmdiOlsyMjAsMTcwLDEzMl19LHtpbmRleDouNyxyZ2I6WzIzMCwxNDUsOTBdfSx7aW5kZXg6MSxyZ2I6WzE3OCwxMCwyOF19XSxwaWNuaWM6W3tpbmRleDowLHJnYjpbMCwwLDI1NV19LHtpbmRleDouMSxyZ2I6WzUxLDE1MywyNTVdfSx7aW5kZXg6LjIscmdiOlsxMDIsMjA0LDI1NV19LHtpbmRleDouMyxyZ2I6WzE1MywyMDQsMjU1XX0se2luZGV4Oi40LHJnYjpbMjA0LDIwNCwyNTVdfSx7aW5kZXg6LjUscmdiOlsyNTUsMjU1LDI1NV19LHtpbmRleDouNixyZ2I6WzI1NSwyMDQsMjU1XX0se2luZGV4Oi43LHJnYjpbMjU1LDE1MywyNTVdfSx7aW5kZXg6LjgscmdiOlsyNTUsMTAyLDIwNF19LHtpbmRleDouOSxyZ2I6WzI1NSwxMDIsMTAyXX0se2luZGV4OjEscmdiOlsyNTUsMCwwXX1dLHJhaW5ib3c6W3tpbmRleDowLHJnYjpbMTUwLDAsOTBdfSx7aW5kZXg6LjEyNSxyZ2I6WzAsMCwyMDBdfSx7aW5kZXg6LjI1LHJnYjpbMCwyNSwyNTVdfSx7aW5kZXg6LjM3NSxyZ2I6WzAsMTUyLDI1NV19LHtpbmRleDouNSxyZ2I6WzQ0LDI1NSwxNTBdfSx7aW5kZXg6LjYyNSxyZ2I6WzE1MSwyNTUsMF19LHtpbmRleDouNzUscmdiOlsyNTUsMjM0LDBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzI1NSwxMTEsMF19LHtpbmRleDoxLHJnYjpbMjU1LDAsMF19XSxwb3J0bGFuZDpbe2luZGV4OjAscmdiOlsxMiw1MSwxMzFdfSx7aW5kZXg6LjI1LHJnYjpbMTAsMTM2LDE4Nl19LHtpbmRleDouNSxyZ2I6WzI0MiwyMTEsNTZdfSx7aW5kZXg6Ljc1LHJnYjpbMjQyLDE0Myw1Nl19LHtpbmRleDoxLHJnYjpbMjE3LDMwLDMwXX1dLGJsYWNrYm9keTpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMixyZ2I6WzIzMCwwLDBdfSx7aW5kZXg6LjQscmdiOlsyMzAsMjEwLDBdfSx7aW5kZXg6LjcscmdiOlsyNTUsMjU1LDI1NV19LHtpbmRleDoxLHJnYjpbMTYwLDIwMCwyNTVdfV0sZWFydGg6W3tpbmRleDowLHJnYjpbMCwwLDEzMF19LHtpbmRleDouMSxyZ2I6WzAsMTgwLDE4MF19LHtpbmRleDouMixyZ2I6WzQwLDIxMCw0MF19LHtpbmRleDouNCxyZ2I6WzIzMCwyMzAsNTBdfSx7aW5kZXg6LjYscmdiOlsxMjAsNzAsMjBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1XX1dLGVsZWN0cmljOlt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi4xNSxyZ2I6WzMwLDAsMTAwXX0se2luZGV4Oi40LHJnYjpbMTIwLDAsMTAwXX0se2luZGV4Oi42LHJnYjpbMTYwLDkwLDBdfSx7aW5kZXg6LjgscmdiOlsyMzAsMjAwLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTAsMjIwXX1dLGFscGhhOlt7aW5kZXg6MCxyZ2I6WzI1NSwyNTUsMjU1LDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1LDFdfV0sdmlyaWRpczpbe2luZGV4OjAscmdiOls2OCwxLDg0XX0se2luZGV4Oi4xMyxyZ2I6WzcxLDQ0LDEyMl19LHtpbmRleDouMjUscmdiOls1OSw4MSwxMzldfSx7aW5kZXg6LjM4LHJnYjpbNDQsMTEzLDE0Ml19LHtpbmRleDouNSxyZ2I6WzMzLDE0NCwxNDFdfSx7aW5kZXg6LjYzLHJnYjpbMzksMTczLDEyOV19LHtpbmRleDouNzUscmdiOls5MiwyMDAsOTldfSx7aW5kZXg6Ljg4LHJnYjpbMTcwLDIyMCw1MF19LHtpbmRleDoxLHJnYjpbMjUzLDIzMSwzN119XSxpbmZlcm5vOlt7aW5kZXg6MCxyZ2I6WzAsMCw0XX0se2luZGV4Oi4xMyxyZ2I6WzMxLDEyLDcyXX0se2luZGV4Oi4yNSxyZ2I6Wzg1LDE1LDEwOV19LHtpbmRleDouMzgscmdiOlsxMzYsMzQsMTA2XX0se2luZGV4Oi41LHJnYjpbMTg2LDU0LDg1XX0se2luZGV4Oi42MyxyZ2I6WzIyNyw4OSw1MV19LHtpbmRleDouNzUscmdiOlsyNDksMTQwLDEwXX0se2luZGV4Oi44OCxyZ2I6WzI0OSwyMDEsNTBdfSx7aW5kZXg6MSxyZ2I6WzI1MiwyNTUsMTY0XX1dLG1hZ21hOlt7aW5kZXg6MCxyZ2I6WzAsMCw0XX0se2luZGV4Oi4xMyxyZ2I6WzI4LDE2LDY4XX0se2luZGV4Oi4yNSxyZ2I6Wzc5LDE4LDEyM119LHtpbmRleDouMzgscmdiOlsxMjksMzcsMTI5XX0se2luZGV4Oi41LHJnYjpbMTgxLDU0LDEyMl19LHtpbmRleDouNjMscmdiOlsyMjksODAsMTAwXX0se2luZGV4Oi43NSxyZ2I6WzI1MSwxMzUsOTddfSx7aW5kZXg6Ljg4LHJnYjpbMjU0LDE5NCwxMzVdfSx7aW5kZXg6MSxyZ2I6WzI1MiwyNTMsMTkxXX1dLHBsYXNtYTpbe2luZGV4OjAscmdiOlsxMyw4LDEzNV19LHtpbmRleDouMTMscmdiOls3NSwzLDE2MV19LHtpbmRleDouMjUscmdiOlsxMjUsMywxNjhdfSx7aW5kZXg6LjM4LHJnYjpbMTY4LDM0LDE1MF19LHtpbmRleDouNSxyZ2I6WzIwMyw3MCwxMjFdfSx7aW5kZXg6LjYzLHJnYjpbMjI5LDEwNyw5M119LHtpbmRleDouNzUscmdiOlsyNDgsMTQ4LDY1XX0se2luZGV4Oi44OCxyZ2I6WzI1MywxOTUsNDBdfSx7aW5kZXg6MSxyZ2I6WzI0MCwyNDksMzNdfV0sd2FybTpbe2luZGV4OjAscmdiOlsxMjUsMCwxNzldfSx7aW5kZXg6LjEzLHJnYjpbMTcyLDAsMTg3XX0se2luZGV4Oi4yNSxyZ2I6WzIxOSwwLDE3MF19LHtpbmRleDouMzgscmdiOlsyNTUsMCwxMzBdfSx7aW5kZXg6LjUscmdiOlsyNTUsNjMsNzRdfSx7aW5kZXg6LjYzLHJnYjpbMjU1LDEyMywwXX0se2luZGV4Oi43NSxyZ2I6WzIzNCwxNzYsMF19LHtpbmRleDouODgscmdiOlsxOTAsMjI4LDBdfSx7aW5kZXg6MSxyZ2I6WzE0NywyNTUsMF19XSxjb29sOlt7aW5kZXg6MCxyZ2I6WzEyNSwwLDE3OV19LHtpbmRleDouMTMscmdiOlsxMTYsMCwyMThdfSx7aW5kZXg6LjI1LHJnYjpbOTgsNzQsMjM3XX0se2luZGV4Oi4zOCxyZ2I6WzY4LDE0NiwyMzFdfSx7aW5kZXg6LjUscmdiOlswLDIwNCwxOTddfSx7aW5kZXg6LjYzLHJnYjpbMCwyNDcsMTQ2XX0se2luZGV4Oi43NSxyZ2I6WzAsMjU1LDg4XX0se2luZGV4Oi44OCxyZ2I6WzQwLDI1NSw4XX0se2luZGV4OjEscmdiOlsxNDcsMjU1LDBdfV0sXCJyYWluYm93LXNvZnRcIjpbe2luZGV4OjAscmdiOlsxMjUsMCwxNzldfSx7aW5kZXg6LjEscmdiOlsxOTksMCwxODBdfSx7aW5kZXg6LjIscmdiOlsyNTUsMCwxMjFdfSx7aW5kZXg6LjMscmdiOlsyNTUsMTA4LDBdfSx7aW5kZXg6LjQscmdiOlsyMjIsMTk0LDBdfSx7aW5kZXg6LjUscmdiOlsxNTAsMjU1LDBdfSx7aW5kZXg6LjYscmdiOlswLDI1NSw1NV19LHtpbmRleDouNyxyZ2I6WzAsMjQ2LDE1MF19LHtpbmRleDouOCxyZ2I6WzUwLDE2NywyMjJdfSx7aW5kZXg6LjkscmdiOlsxMDMsNTEsMjM1XX0se2luZGV4OjEscmdiOlsxMjQsMCwxODZdfV0sYmF0aHltZXRyeTpbe2luZGV4OjAscmdiOls0MCwyNiw0NF19LHtpbmRleDouMTMscmdiOls1OSw0OSw5MF19LHtpbmRleDouMjUscmdiOls2NCw3NiwxMzldfSx7aW5kZXg6LjM4LHJnYjpbNjMsMTEwLDE1MV19LHtpbmRleDouNSxyZ2I6WzcyLDE0MiwxNThdfSx7aW5kZXg6LjYzLHJnYjpbODUsMTc0LDE2M119LHtpbmRleDouNzUscmdiOlsxMjAsMjA2LDE2M119LHtpbmRleDouODgscmdiOlsxODcsMjMwLDE3Ml19LHtpbmRleDoxLHJnYjpbMjUzLDI1NCwyMDRdfV0sY2RvbTpbe2luZGV4OjAscmdiOls0NywxNSw2Ml19LHtpbmRleDouMTMscmdiOls4NywyMyw4Nl19LHtpbmRleDouMjUscmdiOlsxMzAsMjgsOTldfSx7aW5kZXg6LjM4LHJnYjpbMTcxLDQxLDk2XX0se2luZGV4Oi41LHJnYjpbMjA2LDY3LDg2XX0se2luZGV4Oi42MyxyZ2I6WzIzMCwxMDYsODRdfSx7aW5kZXg6Ljc1LHJnYjpbMjQyLDE0OSwxMDNdfSx7aW5kZXg6Ljg4LHJnYjpbMjQ5LDE5MywxMzVdfSx7aW5kZXg6MSxyZ2I6WzI1NCwyMzcsMTc2XX1dLGNobG9yb3BoeWxsOlt7aW5kZXg6MCxyZ2I6WzE4LDM2LDIwXX0se2luZGV4Oi4xMyxyZ2I6WzI1LDYzLDQxXX0se2luZGV4Oi4yNSxyZ2I6WzI0LDkxLDU5XX0se2luZGV4Oi4zOCxyZ2I6WzEzLDExOSw3Ml19LHtpbmRleDouNSxyZ2I6WzE4LDE0OCw4MF19LHtpbmRleDouNjMscmdiOls4MCwxNzMsODldfSx7aW5kZXg6Ljc1LHJnYjpbMTMyLDE5NiwxMjJdfSx7aW5kZXg6Ljg4LHJnYjpbMTc1LDIyMSwxNjJdfSx7aW5kZXg6MSxyZ2I6WzIxNSwyNDksMjA4XX1dLGRlbnNpdHk6W3tpbmRleDowLHJnYjpbNTQsMTQsMzZdfSx7aW5kZXg6LjEzLHJnYjpbODksMjMsODBdfSx7aW5kZXg6LjI1LHJnYjpbMTEwLDQ1LDEzMl19LHtpbmRleDouMzgscmdiOlsxMjAsNzcsMTc4XX0se2luZGV4Oi41LHJnYjpbMTIwLDExMywyMTNdfSx7aW5kZXg6LjYzLHJnYjpbMTE1LDE1MSwyMjhdfSx7aW5kZXg6Ljc1LHJnYjpbMTM0LDE4NSwyMjddfSx7aW5kZXg6Ljg4LHJnYjpbMTc3LDIxNCwyMjddfSx7aW5kZXg6MSxyZ2I6WzIzMCwyNDEsMjQxXX1dLFwiZnJlZXN1cmZhY2UtYmx1ZVwiOlt7aW5kZXg6MCxyZ2I6WzMwLDQsMTEwXX0se2luZGV4Oi4xMyxyZ2I6WzQ3LDE0LDE3Nl19LHtpbmRleDouMjUscmdiOls0MSw0NSwyMzZdfSx7aW5kZXg6LjM4LHJnYjpbMjUsOTksMjEyXX0se2luZGV4Oi41LHJnYjpbNjgsMTMxLDIwMF19LHtpbmRleDouNjMscmdiOlsxMTQsMTU2LDE5N119LHtpbmRleDouNzUscmdiOlsxNTcsMTgxLDIwM119LHtpbmRleDouODgscmdiOlsyMDAsMjA4LDIxNl19LHtpbmRleDoxLHJnYjpbMjQxLDIzNywyMzZdfV0sXCJmcmVlc3VyZmFjZS1yZWRcIjpbe2luZGV4OjAscmdiOls2MCw5LDE4XX0se2luZGV4Oi4xMyxyZ2I6WzEwMCwxNywyN119LHtpbmRleDouMjUscmdiOlsxNDIsMjAsMjldfSx7aW5kZXg6LjM4LHJnYjpbMTc3LDQzLDI3XX0se2luZGV4Oi41LHJnYjpbMTkyLDg3LDYzXX0se2luZGV4Oi42MyxyZ2I6WzIwNSwxMjUsMTA1XX0se2luZGV4Oi43NSxyZ2I6WzIxNiwxNjIsMTQ4XX0se2luZGV4Oi44OCxyZ2I6WzIyNywxOTksMTkzXX0se2luZGV4OjEscmdiOlsyNDEsMjM3LDIzNl19XSxveHlnZW46W3tpbmRleDowLHJnYjpbNjQsNSw1XX0se2luZGV4Oi4xMyxyZ2I6WzEwNiw2LDE1XX0se2luZGV4Oi4yNSxyZ2I6WzE0NCwyNiw3XX0se2luZGV4Oi4zOCxyZ2I6WzE2OCw2NCwzXX0se2luZGV4Oi41LHJnYjpbMTg4LDEwMCw0XX0se2luZGV4Oi42MyxyZ2I6WzIwNiwxMzYsMTFdfSx7aW5kZXg6Ljc1LHJnYjpbMjIwLDE3NCwyNV19LHtpbmRleDouODgscmdiOlsyMzEsMjE1LDQ0XX0se2luZGV4OjEscmdiOlsyNDgsMjU0LDEwNV19XSxwYXI6W3tpbmRleDowLHJnYjpbNTEsMjAsMjRdfSx7aW5kZXg6LjEzLHJnYjpbOTAsMzIsMzVdfSx7aW5kZXg6LjI1LHJnYjpbMTI5LDQ0LDM0XX0se2luZGV4Oi4zOCxyZ2I6WzE1OSw2OCwyNV19LHtpbmRleDouNSxyZ2I6WzE4Miw5OSwxOV19LHtpbmRleDouNjMscmdiOlsxOTksMTM0LDIyXX0se2luZGV4Oi43NSxyZ2I6WzIxMiwxNzEsMzVdfSx7aW5kZXg6Ljg4LHJnYjpbMjIxLDIxMCw1NF19LHtpbmRleDoxLHJnYjpbMjI1LDI1Myw3NV19XSxwaGFzZTpbe2luZGV4OjAscmdiOlsxNDUsMTA1LDE4XX0se2luZGV4Oi4xMyxyZ2I6WzE4NCw3MSwzOF19LHtpbmRleDouMjUscmdiOlsxODYsNTgsMTE1XX0se2luZGV4Oi4zOCxyZ2I6WzE2MCw3MSwxODVdfSx7aW5kZXg6LjUscmdiOlsxMTAsOTcsMjE4XX0se2luZGV4Oi42MyxyZ2I6WzUwLDEyMywxNjRdfSx7aW5kZXg6Ljc1LHJnYjpbMzEsMTMxLDExMF19LHtpbmRleDouODgscmdiOls3NywxMjksMzRdfSx7aW5kZXg6MSxyZ2I6WzE0NSwxMDUsMThdfV0sc2FsaW5pdHk6W3tpbmRleDowLHJnYjpbNDIsMjQsMTA4XX0se2luZGV4Oi4xMyxyZ2I6WzMzLDUwLDE2Ml19LHtpbmRleDouMjUscmdiOlsxNSw5MCwxNDVdfSx7aW5kZXg6LjM4LHJnYjpbNDAsMTE4LDEzN119LHtpbmRleDouNSxyZ2I6WzU5LDE0NiwxMzVdfSx7aW5kZXg6LjYzLHJnYjpbNzksMTc1LDEyNl19LHtpbmRleDouNzUscmdiOlsxMjAsMjAzLDEwNF19LHtpbmRleDouODgscmdiOlsxOTMsMjIxLDEwMF19LHtpbmRleDoxLHJnYjpbMjUzLDIzOSwxNTRdfV0sdGVtcGVyYXR1cmU6W3tpbmRleDowLHJnYjpbNCwzNSw1MV19LHtpbmRleDouMTMscmdiOlsyMyw1MSwxMjJdfSx7aW5kZXg6LjI1LHJnYjpbODUsNTksMTU3XX0se2luZGV4Oi4zOCxyZ2I6WzEyOSw3OSwxNDNdfSx7aW5kZXg6LjUscmdiOlsxNzUsOTUsMTMwXX0se2luZGV4Oi42MyxyZ2I6WzIyMiwxMTIsMTAxXX0se2luZGV4Oi43NSxyZ2I6WzI0OSwxNDYsNjZdfSx7aW5kZXg6Ljg4LHJnYjpbMjQ5LDE5Niw2NV19LHtpbmRleDoxLHJnYjpbMjMyLDI1MCw5MV19XSx0dXJiaWRpdHk6W3tpbmRleDowLHJnYjpbMzQsMzEsMjddfSx7aW5kZXg6LjEzLHJnYjpbNjUsNTAsNDFdfSx7aW5kZXg6LjI1LHJnYjpbOTgsNjksNTJdfSx7aW5kZXg6LjM4LHJnYjpbMTMxLDg5LDU3XX0se2luZGV4Oi41LHJnYjpbMTYxLDExMiw1OV19LHtpbmRleDouNjMscmdiOlsxODUsMTQwLDY2XX0se2luZGV4Oi43NSxyZ2I6WzIwMiwxNzQsODhdfSx7aW5kZXg6Ljg4LHJnYjpbMjE2LDIwOSwxMjZdfSx7aW5kZXg6MSxyZ2I6WzIzMywyNDYsMTcxXX1dLFwidmVsb2NpdHktYmx1ZVwiOlt7aW5kZXg6MCxyZ2I6WzE3LDMyLDY0XX0se2luZGV4Oi4xMyxyZ2I6WzM1LDUyLDExNl19LHtpbmRleDouMjUscmdiOlsyOSw4MSwxNTZdfSx7aW5kZXg6LjM4LHJnYjpbMzEsMTEzLDE2Ml19LHtpbmRleDouNSxyZ2I6WzUwLDE0NCwxNjldfSx7aW5kZXg6LjYzLHJnYjpbODcsMTczLDE3Nl19LHtpbmRleDouNzUscmdiOlsxNDksMTk2LDE4OV19LHtpbmRleDouODgscmdiOlsyMDMsMjIxLDIxMV19LHtpbmRleDoxLHJnYjpbMjU0LDI1MSwyMzBdfV0sXCJ2ZWxvY2l0eS1ncmVlblwiOlt7aW5kZXg6MCxyZ2I6WzIzLDM1LDE5XX0se2luZGV4Oi4xMyxyZ2I6WzI0LDY0LDM4XX0se2luZGV4Oi4yNSxyZ2I6WzExLDk1LDQ1XX0se2luZGV4Oi4zOCxyZ2I6WzM5LDEyMywzNV19LHtpbmRleDouNSxyZ2I6Wzk1LDE0NiwxMl19LHtpbmRleDouNjMscmdiOlsxNTIsMTY1LDE4XX0se2luZGV4Oi43NSxyZ2I6WzIwMSwxODYsNjldfSx7aW5kZXg6Ljg4LHJnYjpbMjMzLDIxNiwxMzddfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTMsMjA1XX1dLGN1YmVoZWxpeDpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMDcscmdiOlsyMiw1LDU5XX0se2luZGV4Oi4xMyxyZ2I6WzYwLDQsMTA1XX0se2luZGV4Oi4yLHJnYjpbMTA5LDEsMTM1XX0se2luZGV4Oi4yNyxyZ2I6WzE2MSwwLDE0N119LHtpbmRleDouMzMscmdiOlsyMTAsMiwxNDJdfSx7aW5kZXg6LjQscmdiOlsyNTEsMTEsMTIzXX0se2luZGV4Oi40NyxyZ2I6WzI1NSwyOSw5N119LHtpbmRleDouNTMscmdiOlsyNTUsNTQsNjldfSx7aW5kZXg6LjYscmdiOlsyNTUsODUsNDZdfSx7aW5kZXg6LjY3LHJnYjpbMjU1LDEyMCwzNF19LHtpbmRleDouNzMscmdiOlsyNTUsMTU3LDM3XX0se2luZGV4Oi44LHJnYjpbMjQxLDE5MSw1N119LHtpbmRleDouODcscmdiOlsyMjQsMjIwLDkzXX0se2luZGV4Oi45MyxyZ2I6WzIxOCwyNDEsMTQyXX0se2luZGV4OjEscmdiOlsyMjcsMjUzLDE5OF19XX19LHt9XSwxMTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9jb2xvclNjYWxlXCIpLGk9dChcImxlcnBcIik7ZnVuY3Rpb24gYSh0KXtyZXR1cm5bdFswXS8yNTUsdFsxXS8yNTUsdFsyXS8yNTUsdFszXV19ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGUscj1cIiNcIixuPTA7bjwzOysrbilyKz0oXCIwMFwiKyhlPShlPXRbbl0pLnRvU3RyaW5nKDE2KSkpLnN1YnN0cihlLmxlbmd0aCk7cmV0dXJuIHJ9ZnVuY3Rpb24gcyh0KXtyZXR1cm5cInJnYmEoXCIrdC5qb2luKFwiLFwiKStcIilcIn1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixsLGMsdSxoLGYscCxkLGc7dHx8KHQ9e30pO3A9KHQubnNoYWRlc3x8NzIpLTEsZj10LmZvcm1hdHx8XCJoZXhcIiwoaD10LmNvbG9ybWFwKXx8KGg9XCJqZXRcIik7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGgpe2lmKGg9aC50b0xvd2VyQ2FzZSgpLCFuW2hdKXRocm93IEVycm9yKGgrXCIgbm90IGEgc3VwcG9ydGVkIGNvbG9yc2NhbGVcIik7dT1uW2hdfWVsc2V7aWYoIUFycmF5LmlzQXJyYXkoaCkpdGhyb3cgRXJyb3IoXCJ1bnN1cHBvcnRlZCBjb2xvcm1hcCBvcHRpb25cIixoKTt1PWguc2xpY2UoKX1pZih1Lmxlbmd0aD5wKzEpdGhyb3cgbmV3IEVycm9yKGgrXCIgbWFwIHJlcXVpcmVzIG5zaGFkZXMgdG8gYmUgYXQgbGVhc3Qgc2l6ZSBcIit1Lmxlbmd0aCk7ZD1BcnJheS5pc0FycmF5KHQuYWxwaGEpPzIhPT10LmFscGhhLmxlbmd0aD9bMSwxXTp0LmFscGhhLnNsaWNlKCk6XCJudW1iZXJcIj09dHlwZW9mIHQuYWxwaGE/W3QuYWxwaGEsdC5hbHBoYV06WzEsMV07ZT11Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0LmluZGV4KnApfSksZFswXT1NYXRoLm1pbihNYXRoLm1heChkWzBdLDApLDEpLGRbMV09TWF0aC5taW4oTWF0aC5tYXgoZFsxXSwwKSwxKTt2YXIgdj11Lm1hcChmdW5jdGlvbih0LGUpe3ZhciByPXVbZV0uaW5kZXgsbj11W2VdLnJnYi5zbGljZSgpO3JldHVybiA0PT09bi5sZW5ndGgmJm5bM10+PTAmJm5bM108PTE/bjooblszXT1kWzBdKyhkWzFdLWRbMF0pKnIsbil9KSxtPVtdO2ZvcihnPTA7ZzxlLmxlbmd0aC0xOysrZyl7Yz1lW2crMV0tZVtnXSxyPXZbZ10sbD12W2crMV07Zm9yKHZhciB5PTA7eTxjO3krKyl7dmFyIHg9eS9jO20ucHVzaChbTWF0aC5yb3VuZChpKHJbMF0sbFswXSx4KSksTWF0aC5yb3VuZChpKHJbMV0sbFsxXSx4KSksTWF0aC5yb3VuZChpKHJbMl0sbFsyXSx4KSksaShyWzNdLGxbM10seCldKX19bS5wdXNoKHVbdS5sZW5ndGgtMV0ucmdiLmNvbmNhdChkWzFdKSksXCJoZXhcIj09PWY/bT1tLm1hcChvKTpcInJnYmFTdHJpbmdcIj09PWY/bT1tLm1hcChzKTpcImZsb2F0XCI9PT1mJiYobT1tLm1hcChhKSk7cmV0dXJuIG19fSx7XCIuL2NvbG9yU2NhbGVcIjoxMTYsbGVycDo0MTh9XSwxMTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89bihlLHIsYSk7aWYoMD09PW8pe3ZhciBzPWkobih0LGUscikpLGM9aShuKHQsZSxhKSk7aWYocz09PWMpe2lmKDA9PT1zKXt2YXIgdT1sKHQsZSxyKSxoPWwodCxlLGEpO3JldHVybiB1PT09aD8wOnU/MTotMX1yZXR1cm4gMH1yZXR1cm4gMD09PWM/cz4wPy0xOmwodCxlLGEpPy0xOjE6MD09PXM/Yz4wPzE6bCh0LGUscik/MTotMTppKGMtcyl9dmFyIGY9bih0LGUscik7aWYoZj4wKXJldHVybiBvPjAmJm4odCxlLGEpPjA/MTotMTtpZihmPDApcmV0dXJuIG8+MHx8bih0LGUsYSk+MD8xOi0xO3ZhciBwPW4odCxlLGEpO3JldHVybiBwPjA/MTpsKHQsZSxyKT8xOi0xfTt2YXIgbj10KFwicm9idXN0LW9yaWVudGF0aW9uXCIpLGk9dChcInNpZ251bVwiKSxhPXQoXCJ0d28tc3VtXCIpLG89dChcInJvYnVzdC1wcm9kdWN0XCIpLHM9dChcInJvYnVzdC1zdW1cIik7ZnVuY3Rpb24gbCh0LGUscil7dmFyIG49YSh0WzBdLC1lWzBdKSxpPWEodFsxXSwtZVsxXSksbD1hKHJbMF0sLWVbMF0pLGM9YShyWzFdLC1lWzFdKSx1PXMobyhuLGwpLG8oaSxjKSk7cmV0dXJuIHVbdS5sZW5ndGgtMV0+PTB9fSx7XCJyb2J1c3Qtb3JpZW50YXRpb25cIjo0OTUsXCJyb2J1c3QtcHJvZHVjdFwiOjQ5NixcInJvYnVzdC1zdW1cIjo1MDAsc2lnbnVtOjUwMSxcInR3by1zdW1cIjo1Mjl9XSwxMTk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lmxlbmd0aCxhPXQubGVuZ3RoLWUubGVuZ3RoO2lmKGEpcmV0dXJuIGE7c3dpdGNoKHIpe2Nhc2UgMDpyZXR1cm4gMDtjYXNlIDE6cmV0dXJuIHRbMF0tZVswXTtjYXNlIDI6cmV0dXJuIHRbMF0rdFsxXS1lWzBdLWVbMV18fG4odFswXSx0WzFdKS1uKGVbMF0sZVsxXSk7Y2FzZSAzOnZhciBvPXRbMF0rdFsxXSxzPWVbMF0rZVsxXTtpZihhPW8rdFsyXS0ocytlWzJdKSlyZXR1cm4gYTt2YXIgbD1uKHRbMF0sdFsxXSksYz1uKGVbMF0sZVsxXSk7cmV0dXJuIG4obCx0WzJdKS1uKGMsZVsyXSl8fG4obCt0WzJdLG8pLW4oYytlWzJdLHMpO2Nhc2UgNDp2YXIgdT10WzBdLGg9dFsxXSxmPXRbMl0scD10WzNdLGQ9ZVswXSxnPWVbMV0sdj1lWzJdLG09ZVszXTtyZXR1cm4gdStoK2YrcC0oZCtnK3YrbSl8fG4odSxoLGYscCktbihkLGcsdixtLGQpfHxuKHUraCx1K2YsdStwLGgrZixoK3AsZitwKS1uKGQrZyxkK3YsZCttLGcrdixnK20sdittKXx8bih1K2grZix1K2grcCx1K2YrcCxoK2YrcCktbihkK2crdixkK2crbSxkK3YrbSxnK3YrbSk7ZGVmYXVsdDpmb3IodmFyIHk9dC5zbGljZSgpLnNvcnQoaSkseD1lLnNsaWNlKCkuc29ydChpKSxiPTA7YjxyOysrYilpZihhPXlbYl0teFtiXSlyZXR1cm4gYTtyZXR1cm4gMH19O3ZhciBuPU1hdGgubWluO2Z1bmN0aW9uIGkodCxlKXtyZXR1cm4gdC1lfX0se31dLDEyMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJjb21wYXJlLWNlbGxcIiksaT10KFwiY2VsbC1vcmllbnRhdGlvblwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LGUpfHxpKHQpLWkoZSl9fSx7XCJjZWxsLW9yaWVudGF0aW9uXCI6MTAzLFwiY29tcGFyZS1jZWxsXCI6MTE5fV0sMTIxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vbGliL2NoMWRcIiksaT10KFwiLi9saWIvY2gyZFwiKSxhPXQoXCIuL2xpYi9jaG5kXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtpZigwPT09ZSlyZXR1cm5bXTtpZigxPT09ZSlyZXR1cm5bWzBdXTt2YXIgcj10WzBdLmxlbmd0aDtpZigwPT09cilyZXR1cm5bXTtpZigxPT09cilyZXR1cm4gbih0KTtpZigyPT09cilyZXR1cm4gaSh0KTtyZXR1cm4gYSh0LHIpfX0se1wiLi9saWIvY2gxZFwiOjEyMixcIi4vbGliL2NoMmRcIjoxMjMsXCIuL2xpYi9jaG5kXCI6MTI0fV0sMTIyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MCxuPTE7bjx0Lmxlbmd0aDsrK24pdFtuXVswXTx0W2VdWzBdJiYoZT1uKSx0W25dWzBdPnRbcl1bMF0mJihyPW4pO3JldHVybiBlPHI/W1tlXSxbcl1dOmU+cj9bW3JdLFtlXV06W1tlXV19fSx7fV0sMTIzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCkscj1lLmxlbmd0aDtpZihyPD0yKXJldHVybltdO2Zvcih2YXIgaT1uZXcgQXJyYXkociksYT1lW3ItMV0sbz0wO288cjsrK28pe3ZhciBzPWVbb107aVtvXT1bYSxzXSxhPXN9cmV0dXJuIGl9O3ZhciBuPXQoXCJtb25vdG9uZS1jb252ZXgtaHVsbC0yZFwiKX0se1wibW9ub3RvbmUtY29udmV4LWh1bGwtMmRcIjo0Mjd9XSwxMjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0cnl7cmV0dXJuIG4odCwhMCl9Y2F0Y2gocyl7dmFyIHI9aSh0KTtpZihyLmxlbmd0aDw9ZSlyZXR1cm5bXTt2YXIgYT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxlLmxlbmd0aDsrK2kpbltpXT10W2VbaV1dO2Zvcih2YXIgYT1lLmxlbmd0aCxpPTA7aTxyOysraSllLmluZGV4T2YoaSk8MCYmKG5bYSsrXT10W2ldKTtyZXR1cm4gbn0odCxyKSxvPW4oYSwhMCk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49ZS5sZW5ndGgsaT0wO2k8cjsrK2kpZm9yKHZhciBhPXRbaV0sbz0wO288YS5sZW5ndGg7KytvKXt2YXIgcz1hW29dO2lmKHM8bilhW29dPWVbc107ZWxzZXtzLT1uO2Zvcih2YXIgbD0wO2w8bjsrK2wpcz49ZVtsXSYmKHMrPTEpO2Fbb109c319cmV0dXJuIHR9KG8scil9fTt2YXIgbj10KFwiaW5jcmVtZW50YWwtY29udmV4LWh1bGxcIiksaT10KFwiYWZmaW5lLWh1bGxcIil9LHtcImFmZmluZS1odWxsXCI6NTMsXCJpbmNyZW1lbnRhbC1jb252ZXgtaHVsbFwiOjQwNn1dLDEyNTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17QUZHOlwiYWZnaGFuXCIsQUxBOlwiXFxcXGJcXFxcd2xhbmRcIixBTEI6XCJhbGJhbmlhXCIsRFpBOlwiYWxnZXJpYVwiLEFTTTpcIl4oPz0uKmFtZXJpYykuKnNhbW9hXCIsQU5EOlwiYW5kb3JyYVwiLEFHTzpcImFuZ29sYVwiLEFJQTpcImFuZ3VpbGw/YVwiLEFUQTpcImFudGFyY3RpY2FcIixBVEc6XCJhbnRpZ3VhXCIsQVJHOlwiYXJnZW50aW5cIixBUk06XCJhcm1lbmlhXCIsQUJXOlwiXig/IS4qYm9uYWlyZSkuKlxcXFxiYXJ1YmFcIixBVVM6XCJhdXN0cmFsaWFcIixBVVQ6XCJeKD8hLipodW5nYXJ5KS4qYXVzdHJpYXxcXFxcYmF1c3RyaS4qXFxcXGJlbXBcIixBWkU6XCJhemVyYmFpamFuXCIsQkhTOlwiYmFoYW1hc1wiLEJIUjpcImJhaHJhaW5cIixCR0Q6XCJiYW5nbGFkZXNofF4oPz0uKmVhc3QpLipwYWtpP3N0YW5cIixCUkI6XCJiYXJiYWRvc1wiLEJMUjpcImJlbGFydXN8YnllbG9cIixCRUw6XCJeKD8hLipsdXhlbSkuKmJlbGdpdW1cIixCTFo6XCJiZWxpemV8Xig/PS4qYnJpdGlzaCkuKmhvbmR1cmFzXCIsQkVOOlwiYmVuaW58ZGFob21lXCIsQk1VOlwiYmVybXVkYVwiLEJUTjpcImJodXRhblwiLEJPTDpcImJvbGl2aWFcIixCRVM6XCJeKD89Lipib25haXJlKS4qZXVzdGF0aXVzfF4oPz0uKmNhcmliKS4qbmV0aGVybGFuZHN8XFxcXGJiZXMuP2lzbGFuZHNcIixCSUg6XCJoZXJ6ZWdvdmluYXxib3NuaWFcIixCV0E6XCJib3Rzd2FuYXxiZWNodWFuYVwiLEJWVDpcImJvdXZldFwiLEJSQTpcImJyYXppbFwiLElPVDpcImJyaXRpc2guP2luZGlhbi4/b2NlYW5cIixCUk46XCJicnVuZWlcIixCR1I6XCJidWxnYXJpYVwiLEJGQTpcImJ1cmtpbmF8XFxcXGJmYXNvfHVwcGVyLj92b2x0YVwiLEJESTpcImJ1cnVuZGlcIixDUFY6XCJ2ZXJkZVwiLEtITTpcImNhbWJvZGlhfGthbXB1Y2hlYXxraG1lclwiLENNUjpcImNhbWVyb29uXCIsQ0FOOlwiY2FuYWRhXCIsQ1lNOlwiY2F5bWFuXCIsQ0FGOlwiXFxcXGJjZW50cmFsLmFmcmljYW4ucmVwdWJsaWNcIixUQ0Q6XCJcXFxcYmNoYWRcIixDSEw6XCJcXFxcYmNoaWxlXCIsQ0hOOlwiXig/IS4qXFxcXGJtYWMpKD8hLipcXFxcYmhvbmcpKD8hLipcXFxcYnRhaSkoPyEuKlxcXFxicmVwKS4qY2hpbmF8Xig/PS4qcGVvKSg/PS4qcmVwKS4qY2hpbmFcIixDWFI6XCJjaHJpc3RtYXNcIixDQ0s6XCJcXFxcYmNvY29zfGtlZWxpbmdcIixDT0w6XCJjb2xvbWJpYVwiLENPTTpcImNvbW9yb1wiLENPRzpcIl4oPyEuKlxcXFxiZGVtKSg/IS4qXFxcXGJkW1xcXFwuXT9yKSg/IS4qa2luc2hhc2EpKD8hLip6YWlyZSkoPyEuKmJlbGcpKD8hLipsLm9wb2xkdmlsbGUpKD8hLipmcmVlKS4qXFxcXGJjb25nb1wiLENPSzpcIlxcXFxiY29va1wiLENSSTpcImNvc3RhLj9yaWNhXCIsQ0lWOlwiaXZvaXJlfGl2b3J5XCIsSFJWOlwiY3JvYXRpYVwiLENVQjpcIlxcXFxiY3ViYVwiLENVVzpcIl4oPyEuKmJvbmFpcmUpLipcXFxcYmN1cmEoY3xcXHhlNylhb1wiLENZUDpcImN5cHJ1c1wiLENTSzpcImN6ZWNob3Nsb3Zha2lhXCIsQ1pFOlwiXig/PS4qcmVwKS4qY3plY2h8Y3plY2hpYXxib2hlbWlhXCIsQ09EOlwiXFxcXGJkZW0uKmNvbmdvfGNvbmdvLipcXFxcYmRlbXxjb25nby4qXFxcXGJkW1xcXFwuXT9yfFxcXFxiZFtcXFxcLl0/ci4qY29uZ298YmVsZ2lhbi4/Y29uZ298Y29uZ28uP2ZyZWUuP3N0YXRlfGtpbnNoYXNhfHphaXJlfGwub3BvbGR2aWxsZXxkcmN8ZHJvY3xyZGNcIixETks6XCJkZW5tYXJrXCIsREpJOlwiZGppYm91dGlcIixETUE6XCJkb21pbmljYSg/IW4pXCIsRE9NOlwiZG9taW5pY2FuLnJlcFwiLEVDVTpcImVjdWFkb3JcIixFR1k6XCJlZ3lwdFwiLFNMVjpcImVsLj9zYWx2YWRvclwiLEdOUTpcImd1aW5lLiplcXxlcS4qZ3VpbmV8Xig/PS4qc3BhbikuKmd1aW5lYVwiLEVSSTpcImVyaXRyZWFcIixFU1Q6XCJlc3RvbmlhXCIsRVRIOlwiZXRoaW9waWF8YWJ5c3NpbmlhXCIsRkxLOlwiZmFsa2xhbmR8bWFsdmluYXNcIixGUk86XCJmYXJvZXxmYWVyb2VcIixGSkk6XCJmaWppXCIsRklOOlwiZmlubGFuZFwiLEZSQTpcIl4oPyEuKlxcXFxiZGVwKSg/IS4qbWFydGluaXF1ZSkuKmZyYW5jZXxmcmVuY2guP3JlcHVibGljfFxcXFxiZ2F1bFwiLEdVRjpcIl4oPz0uKmZyZW5jaCkuKmd1aWFuYVwiLFBZRjpcImZyZW5jaC4/cG9seW5lc2lhfHRhaGl0aVwiLEFURjpcImZyZW5jaC4/c291dGhlcm5cIixHQUI6XCJnYWJvblwiLEdNQjpcImdhbWJpYVwiLEdFTzpcIl4oPyEuKnNvdXRoKS4qZ2VvcmdpYVwiLEREUjpcImdlcm1hbi4/ZGVtb2NyYXRpYy4/cmVwdWJsaWN8ZGVtb2NyYXRpYy4/cmVwdWJsaWMuKmdlcm1hbnl8ZWFzdC5nZXJtYW55XCIsREVVOlwiXig/IS4qZWFzdCkuKmdlcm1hbnl8Xig/PS4qXFxcXGJmZWQuKlxcXFxicmVwKS4qZ2VybWFuXCIsR0hBOlwiZ2hhbmF8Z29sZC4/Y29hc3RcIixHSUI6XCJnaWJyYWx0YXJcIixHUkM6XCJncmVlY2V8aGVsbGVuaWN8aGVsbGFzXCIsR1JMOlwiZ3JlZW5sYW5kXCIsR1JEOlwiZ3JlbmFkYVwiLEdMUDpcImd1YWRlbG91cGVcIixHVU06XCJcXFxcYmd1YW1cIixHVE06XCJndWF0ZW1hbGFcIixHR1k6XCJndWVybnNleVwiLEdJTjpcIl4oPyEuKmVxKSg/IS4qc3BhbikoPyEuKmJpc3NhdSkoPyEuKnBvcnR1KSg/IS4qbmV3KS4qZ3VpbmVhXCIsR05COlwiYmlzc2F1fF4oPz0uKnBvcnR1KS4qZ3VpbmVhXCIsR1VZOlwiZ3V5YW5hfGJyaXRpc2guP2d1aWFuYVwiLEhUSTpcImhhaXRpXCIsSE1EOlwiaGVhcmQuKm1jZG9uYWxkXCIsVkFUOlwiaG9seS4/c2VlfHZhdGljYW58cGFwYWwuP3N0XCIsSE5EOlwiXig/IS4qYnJpdCkuKmhvbmR1cmFzXCIsSEtHOlwiaG9uZy4/a29uZ1wiLEhVTjpcIl4oPyEuKmF1c3RyKS4qaHVuZ2FyeVwiLElTTDpcImljZWxhbmRcIixJTkQ6XCJpbmRpYSg/IS4qb2NlYSlcIixJRE46XCJpbmRvbmVzaWFcIixJUk46XCJcXFxcYmlyYW58cGVyc2lhXCIsSVJROlwiXFxcXGJpcmFxfG1lc29wb3RhbWlhXCIsSVJMOlwiKF5pcmVsYW5kKXwoXnJlcHVibGljLippcmVsYW5kKVwiLElNTjpcIl4oPz0uKmlzbGUpLipcXFxcYm1hblwiLElTUjpcImlzcmFlbFwiLElUQTpcIml0YWx5XCIsSkFNOlwiamFtYWljYVwiLEpQTjpcImphcGFuXCIsSkVZOlwiamVyc2V5XCIsSk9SOlwiam9yZGFuXCIsS0FaOlwia2F6YWtcIixLRU46XCJrZW55YXxicml0aXNoLj9lYXN0Lj9hZnJpY2F8ZWFzdC4/YWZyaWNhLj9wcm90XCIsS0lSOlwia2lyaWJhdGlcIixQUks6XCJeKD89LipkZW1vY3JhdHxwZW9wbGV8bm9ydGh8ZC4qcC4qLnIpLipcXFxcYmtvcmVhfGRwcmt8a29yZWEuKihkLipwLipyKVwiLEtXVDpcImt1d2FpdFwiLEtHWjpcImt5cmd5enxraXJnaGl6XCIsTEFPOlwiXFxcXGJsYW9zP1xcXFxiXCIsTFZBOlwibGF0dmlhXCIsTEJOOlwibGViYW5vblwiLExTTzpcImxlc290aG98YmFzdXRvXCIsTEJSOlwibGliZXJpYVwiLExCWTpcImxpYnlhXCIsTElFOlwibGllY2h0ZW5zdGVpblwiLExUVTpcImxpdGh1YW5pYVwiLExVWDpcIl4oPyEuKmJlbGcpLipsdXhlbVwiLE1BQzpcIm1hY2Eob3x1KVwiLE1ERzpcIm1hZGFnYXNjYXJ8bWFsYWdhc3lcIixNV0k6XCJtYWxhd2l8bnlhc2FcIixNWVM6XCJtYWxheXNpYVwiLE1EVjpcIm1hbGRpdmVcIixNTEk6XCJcXFxcYm1hbGlcXFxcYlwiLE1MVDpcIlxcXFxibWFsdGFcIixNSEw6XCJtYXJzaGFsbFwiLE1UUTpcIm1hcnRpbmlxdWVcIixNUlQ6XCJtYXVyaXRhbmlhXCIsTVVTOlwibWF1cml0aXVzXCIsTVlUOlwiXFxcXGJtYXlvdHRlXCIsTUVYOlwiXFxcXGJtZXhpY1wiLEZTTTpcImZlZC4qbWljcm9uZXNpYXxtaWNyb25lc2lhLipmZWRcIixNQ086XCJtb25hY29cIixNTkc6XCJtb25nb2xpYVwiLE1ORTpcIl4oPyEuKnNlcmJpYSkuKm1vbnRlbmVncm9cIixNU1I6XCJtb250c2VycmF0XCIsTUFSOlwibW9yb2Njb3xcXFxcYm1hcm9jXCIsTU9aOlwibW96YW1iaXF1ZVwiLE1NUjpcIm15YW5tYXJ8YnVybWFcIixOQU06XCJuYW1pYmlhXCIsTlJVOlwibmF1cnVcIixOUEw6XCJuZXBhbFwiLE5MRDpcIl4oPyEuKlxcXFxiYW50KSg/IS4qXFxcXGJjYXJpYikuKm5ldGhlcmxhbmRzXCIsQU5UOlwiXig/PS4qXFxcXGJhbnQpLioobmV0aGVyfGR1dGNoKVwiLE5DTDpcIm5ldy4/Y2FsZWRvbmlhXCIsTlpMOlwibmV3Lj96ZWFsYW5kXCIsTklDOlwibmljYXJhZ3VhXCIsTkVSOlwiXFxcXGJuaWdlcig/IWlhKVwiLE5HQTpcIm5pZ2VyaWFcIixOSVU6XCJuaXVlXCIsTkZLOlwibm9yZm9sa1wiLE1OUDpcIm1hcmlhbmFcIixOT1I6XCJub3J3YXlcIixPTU46XCJcXFxcYm9tYW58dHJ1Y2lhbFwiLFBBSzpcIl4oPyEuKmVhc3QpLipwYWtpP3N0YW5cIixQTFc6XCJwYWxhdVwiLFBTRTpcInBhbGVzdGlufFxcXFxiZ2F6YXx3ZXN0Lj9iYW5rXCIsUEFOOlwicGFuYW1hXCIsUE5HOlwicGFwdWF8bmV3Lj9ndWluZWFcIixQUlk6XCJwYXJhZ3VheVwiLFBFUjpcInBlcnVcIixQSEw6XCJwaGlsaXBwaW5lc1wiLFBDTjpcInBpdGNhaXJuXCIsUE9MOlwicG9sYW5kXCIsUFJUOlwicG9ydHVnYWxcIixQUkk6XCJwdWVydG8uP3JpY29cIixRQVQ6XCJxYXRhclwiLEtPUjpcIl4oPyEuKmQuKnAuKnIpKD8hLipkZW1vY3JhdCkoPyEuKnBlb3BsZSkoPyEuKm5vcnRoKS4qXFxcXGJrb3JlYSg/IS4qZC4qcC4qcilcIixNREE6XCJtb2xkb3Z8YihhfGUpc3NhcmFiaWFcIixSRVU6XCJyKGV8XFx4ZTkpdW5pb25cIixST1U6XCJyKG98dXxvdSltYW5pYVwiLFJVUzpcIlxcXFxicnVzc2lhfHNvdmlldC4/dW5pb258dVxcXFwuP3NcXFxcLj9zXFxcXC4/cnxzb2NpYWxpc3QuP3JlcHVibGljc1wiLFJXQTpcInJ3YW5kYVwiLEJMTTpcImJhcnRoKGV8XFx4ZTkpbGVteVwiLFNITjpcImhlbGVuYVwiLEtOQTpcImtpdHRzfFxcXFxibmV2aXNcIixMQ0E6XCJcXFxcYmx1Y2lhXCIsTUFGOlwiXig/PS4qY29sbGVjdGl2aXR5KS4qbWFydGlufF4oPz0uKmZyYW5jZSkuKm1hcnRpbig/IWlxdWUpfF4oPz0uKmZyZW5jaCkuKm1hcnRpbig/IWlxdWUpXCIsU1BNOlwibWlxdWVsb25cIixWQ1Q6XCJ2aW5jZW50XCIsV1NNOlwiXig/IS4qYW1lcikuKnNhbW9hXCIsU01SOlwic2FuLj9tYXJpbm9cIixTVFA6XCJcXFxcYnMoYXxcXHhlMylvLj90b20oZXxcXHhlOSlcIixTQVU6XCJcXFxcYnNhXFxcXHcqLj9hcmFiaWFcIixTRU46XCJzZW5lZ2FsXCIsU1JCOlwiXig/IS4qbW9udGUpLipzZXJiaWFcIixTWUM6XCJzZXljaGVsbFwiLFNMRTpcInNpZXJyYVwiLFNHUDpcInNpbmdhcG9yZVwiLFNYTTpcIl4oPyEuKm1hcnRpbikoPyEuKnNhYmEpLiptYWFydGVuXCIsU1ZLOlwiXig/IS4qY3plKS4qc2xvdmFrXCIsU1ZOOlwic2xvdmVuaWFcIixTTEI6XCJzb2xvbW9uXCIsU09NOlwic29tYWxpXCIsWkFGOlwic291dGguYWZyaWNhfHNcXFxcXFxcXC4uP2FmcmljYVwiLFNHUzpcInNvdXRoLj9nZW9yZ2lhfHNhbmR3aWNoXCIsU1NEOlwiXFxcXGJzXFxcXHcqLj9zdWRhblwiLEVTUDpcInNwYWluXCIsTEtBOlwic3JpLj9sYW5rYXxjZXlsb25cIixTRE46XCJeKD8hLipcXFxcYnMoPyF1KSkuKnN1ZGFuXCIsU1VSOlwic3VyaW5hbXxkdXRjaC4/Z3VpYW5hXCIsU0pNOlwic3ZhbGJhcmRcIixTV1o6XCJzd2F6aWxhbmRcIixTV0U6XCJzd2VkZW5cIixDSEU6XCJzd2l0enxzd2lzc1wiLFNZUjpcInN5cmlhXCIsVFdOOlwidGFpd2FufHRhaXBlaXxmb3Jtb3NhfF4oPyEuKnBlbykoPz0uKnJlcCkuKmNoaW5hXCIsVEpLOlwidGFqaWtcIixUSEE6XCJ0aGFpbGFuZHxcXFxcYnNpYW1cIixNS0Q6XCJtYWNlZG9uaWF8Znlyb21cIixUTFM6XCJeKD89LipsZXN0ZSkuKnRpbW9yfF4oPz0uKmVhc3QpLip0aW1vclwiLFRHTzpcInRvZ29cIixUS0w6XCJ0b2tlbGF1XCIsVE9OOlwidG9uZ2FcIixUVE86XCJ0cmluaWRhZHx0b2JhZ29cIixUVU46XCJ0dW5pc2lhXCIsVFVSOlwidHVya2V5XCIsVEtNOlwidHVya21lblwiLFRDQTpcInR1cmtzXCIsVFVWOlwidHV2YWx1XCIsVUdBOlwidWdhbmRhXCIsVUtSOlwidWtyYWluXCIsQVJFOlwiZW1pcmF0ZXN8XnVcXFxcLj9hXFxcXC4/ZVxcXFwuPyR8dW5pdGVkLj9hcmFiLj9lbVwiLEdCUjpcInVuaXRlZC4/a2luZ2RvbXxicml0YWlufF51XFxcXC4/a1xcXFwuPyRcIixUWkE6XCJ0YW56YW5pYVwiLFVTQTpcInVuaXRlZC4/c3RhdGVzXFxcXGIoPyEuKmlzbGFuZHMpfFxcXFxidVxcXFwuP3NcXFxcLj9hXFxcXC4/XFxcXGJ8XlxcXFxzKnVcXFxcLj9zXFxcXC4/XFxcXGIoPyEuKmlzbGFuZHMpXCIsVU1JOlwibWlub3IuP291dGx5aW5nLj9pc1wiLFVSWTpcInVydWd1YXlcIixVWkI6XCJ1emJla1wiLFZVVDpcInZhbnVhdHV8bmV3Lj9oZWJyaWRlc1wiLFZFTjpcInZlbmV6dWVsYVwiLFZOTTpcIl4oPyEuKnJlcHVibGljKS4qdmlldC4/bmFtfF4oPz0uKnNvY2lhbGlzdCkuKnZpZXQuP25hbVwiLFZHQjpcIl4oPz0uKlxcXFxidVxcXFwuP1xcXFxzP2spLip2aXJnaW58Xig/PS4qYnJpdCkuKnZpcmdpbnxeKD89LipraW5nZG9tKS4qdmlyZ2luXCIsVklSOlwiXig/PS4qXFxcXGJ1XFxcXC4/XFxcXHM/cykuKnZpcmdpbnxeKD89LipzdGF0ZXMpLip2aXJnaW5cIixXTEY6XCJmdXR1bmF8d2FsbGlzXCIsRVNIOlwid2VzdGVybi5zYWhhcmFcIixZRU06XCJeKD8hLiphcmFiKSg/IS4qbm9ydGgpKD8hLipzYW5hKSg/IS4qcGVvKSg/IS4qZGVtKSg/IS4qc291dGgpKD8hLiphZGVuKSg/IS4qXFxcXGJwXFxcXC4/ZFxcXFwuP3IpLip5ZW1lblwiLFlNRDpcIl4oPz0uKnBlbykuKnllbWVufF4oPyEuKnJlcCkoPz0uKmRlbSkuKnllbWVufF4oPz0uKnNvdXRoKS4qeWVtZW58Xig/PS4qYWRlbikuKnllbWVufF4oPz0uKlxcXFxicFxcXFwuP2RcXFxcLj9yKS4qeWVtZW5cIixZVUc6XCJ5dWdvc2xhdmlhXCIsWk1COlwiemFtYmlhfG5vcnRoZXJuLj9yaG9kZXNpYVwiLEVBWjpcInphbnppYmFyXCIsWldFOlwiemltYmFid2V8Xig/IS4qbm9ydGhlcm4pLipyaG9kZXNpYVwifX0se31dLDEyNjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bXCJ4eC1zbWFsbFwiLFwieC1zbWFsbFwiLFwic21hbGxcIixcIm1lZGl1bVwiLFwibGFyZ2VcIixcIngtbGFyZ2VcIixcInh4LWxhcmdlXCIsXCJsYXJnZXJcIixcInNtYWxsZXJcIl19LHt9XSwxMjc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9W1wibm9ybWFsXCIsXCJjb25kZW5zZWRcIixcInNlbWktY29uZGVuc2VkXCIsXCJleHRyYS1jb25kZW5zZWRcIixcInVsdHJhLWNvbmRlbnNlZFwiLFwiZXhwYW5kZWRcIixcInNlbWktZXhwYW5kZWRcIixcImV4dHJhLWV4cGFuZGVkXCIsXCJ1bHRyYS1leHBhbmRlZFwiXX0se31dLDEyODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bXCJub3JtYWxcIixcIml0YWxpY1wiLFwib2JsaXF1ZVwiXX0se31dLDEyOTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bXCJub3JtYWxcIixcImJvbGRcIixcImJvbGRlclwiLFwibGlnaHRlclwiLFwiMTAwXCIsXCIyMDBcIixcIjMwMFwiLFwiNDAwXCIsXCI1MDBcIixcIjYwMFwiLFwiNzAwXCIsXCI4MDBcIixcIjkwMFwiXX0se31dLDEzMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17cGFyc2U6dChcIi4vcGFyc2VcIiksc3RyaW5naWZ5OnQoXCIuL3N0cmluZ2lmeVwiKX19LHtcIi4vcGFyc2VcIjoxMzIsXCIuL3N0cmluZ2lmeVwiOjEzM31dLDEzMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJjc3MtZm9udC1zaXplLWtleXdvcmRzXCIpO2UuZXhwb3J0cz17aXNTaXplOmZ1bmN0aW9uKHQpe3JldHVybi9eW1xcZFxcLl0vLnRlc3QodCl8fC0xIT09dC5pbmRleE9mKFwiL1wiKXx8LTEhPT1uLmluZGV4T2YodCl9fX0se1wiY3NzLWZvbnQtc2l6ZS1rZXl3b3Jkc1wiOjEyNn1dLDEzMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJ1bnF1b3RlXCIpLGk9dChcImNzcy1nbG9iYWwta2V5d29yZHNcIiksYT10KFwiY3NzLXN5c3RlbS1mb250LWtleXdvcmRzXCIpLG89dChcImNzcy1mb250LXdlaWdodC1rZXl3b3Jkc1wiKSxzPXQoXCJjc3MtZm9udC1zdHlsZS1rZXl3b3Jkc1wiKSxsPXQoXCJjc3MtZm9udC1zdHJldGNoLWtleXdvcmRzXCIpLGM9dChcInN0cmluZy1zcGxpdC1ieVwiKSx1PXQoXCIuL2xpYi91dGlsXCIpLmlzU2l6ZTtlLmV4cG9ydHM9Zjt2YXIgaD1mLmNhY2hlPXt9O2Z1bmN0aW9uIGYodCl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKFwiRm9udCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLlwiKTtpZihoW3RdKXJldHVybiBoW3RdO2lmKFwiXCI9PT10KXRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBwYXJzZSBhbiBlbXB0eSBzdHJpbmcuXCIpO2lmKC0xIT09YS5pbmRleE9mKHQpKXJldHVybiBoW3RdPXtzeXN0ZW06dH07Zm9yKHZhciBlLHI9e3N0eWxlOlwibm9ybWFsXCIsdmFyaWFudDpcIm5vcm1hbFwiLHdlaWdodDpcIm5vcm1hbFwiLHN0cmV0Y2g6XCJub3JtYWxcIixsaW5lSGVpZ2h0Olwibm9ybWFsXCIsc2l6ZTpcIjFyZW1cIixmYW1pbHk6W1wic2VyaWZcIl19LGY9Yyh0LC9cXHMrLyk7ZT1mLnNoaWZ0KCk7KXtpZigtMSE9PWkuaW5kZXhPZihlKSlyZXR1cm5bXCJzdHlsZVwiLFwidmFyaWFudFwiLFwid2VpZ2h0XCIsXCJzdHJldGNoXCJdLmZvckVhY2goZnVuY3Rpb24odCl7clt0XT1lfSksaFt0XT1yO2lmKC0xPT09cy5pbmRleE9mKGUpKWlmKFwibm9ybWFsXCIhPT1lJiZcInNtYWxsLWNhcHNcIiE9PWUpaWYoLTE9PT1sLmluZGV4T2YoZSkpe2lmKC0xPT09by5pbmRleE9mKGUpKXtpZih1KGUpKXt2YXIgZD1jKGUsXCIvXCIpO2lmKHIuc2l6ZT1kWzBdLG51bGwhPWRbMV0/ci5saW5lSGVpZ2h0PXAoZFsxXSk6XCIvXCI9PT1mWzBdJiYoZi5zaGlmdCgpLHIubGluZUhlaWdodD1wKGYuc2hpZnQoKSkpLCFmLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIHJlcXVpcmVkIGZvbnQtZmFtaWx5LlwiKTtyZXR1cm4gci5mYW1pbHk9YyhmLmpvaW4oXCIgXCIpLC9cXHMqLFxccyovKS5tYXAobiksaFt0XT1yfXRocm93IG5ldyBFcnJvcihcIlVua25vd24gb3IgdW5zdXBwb3J0ZWQgZm9udCB0b2tlbjogXCIrZSl9ci53ZWlnaHQ9ZX1lbHNlIHIuc3RyZXRjaD1lO2Vsc2Ugci52YXJpYW50PWU7ZWxzZSByLnN0eWxlPWV9dGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyByZXF1aXJlZCBmb250LXNpemUuXCIpfWZ1bmN0aW9uIHAodCl7dmFyIGU9cGFyc2VGbG9hdCh0KTtyZXR1cm4gZS50b1N0cmluZygpPT09dD9lOnR9fSx7XCIuL2xpYi91dGlsXCI6MTMxLFwiY3NzLWZvbnQtc3RyZXRjaC1rZXl3b3Jkc1wiOjEyNyxcImNzcy1mb250LXN0eWxlLWtleXdvcmRzXCI6MTI4LFwiY3NzLWZvbnQtd2VpZ2h0LWtleXdvcmRzXCI6MTI5LFwiY3NzLWdsb2JhbC1rZXl3b3Jkc1wiOjEzNCxcImNzcy1zeXN0ZW0tZm9udC1rZXl3b3Jkc1wiOjEzNSxcInN0cmluZy1zcGxpdC1ieVwiOjUxNCx1bnF1b3RlOjUzM31dLDEzMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJwaWNrLWJ5LWFsaWFzXCIpLGk9dChcIi4vbGliL3V0aWxcIikuaXNTaXplLGE9Zyh0KFwiY3NzLWdsb2JhbC1rZXl3b3Jkc1wiKSksbz1nKHQoXCJjc3Mtc3lzdGVtLWZvbnQta2V5d29yZHNcIikpLHM9Zyh0KFwiY3NzLWZvbnQtd2VpZ2h0LWtleXdvcmRzXCIpKSxsPWcodChcImNzcy1mb250LXN0eWxlLWtleXdvcmRzXCIpKSxjPWcodChcImNzcy1mb250LXN0cmV0Y2gta2V5d29yZHNcIikpLHU9e25vcm1hbDoxLFwic21hbGwtY2Fwc1wiOjF9LGg9e3NlcmlmOjEsXCJzYW5zLXNlcmlmXCI6MSxtb25vc3BhY2U6MSxjdXJzaXZlOjEsZmFudGFzeToxLFwic3lzdGVtLXVpXCI6MX0sZj1cIjFyZW1cIixwPVwic2VyaWZcIjtmdW5jdGlvbiBkKHQsZSl7aWYodCYmIWVbdF0mJiFhW3RdKXRocm93IEVycm9yKFwiVW5rbm93biBrZXl3b3JkIGBcIit0K1wiYFwiKTtyZXR1cm4gdH1mdW5jdGlvbiBnKHQpe2Zvcih2YXIgZT17fSxyPTA7cjx0Lmxlbmd0aDtyKyspZVt0W3JdXT0xO3JldHVybiBlfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigodD1uKHQse3N0eWxlOlwic3R5bGUgZm9udHN0eWxlIGZvbnRTdHlsZSBmb250LXN0eWxlIHNsb3BlIGRpc3RpbmN0aW9uXCIsdmFyaWFudDpcInZhcmlhbnQgZm9udC12YXJpYW50IGZvbnRWYXJpYW50IGZvbnR2YXJpYW50IHZhciBjYXBpdGFsaXphdGlvblwiLHdlaWdodDpcIndlaWdodCB3IGZvbnQtd2VpZ2h0IGZvbnRXZWlnaHQgZm9udHdlaWdodFwiLHN0cmV0Y2g6XCJzdHJldGNoIGZvbnQtc3RyZXRjaCBmb250U3RyZXRjaCBmb250c3RyZXRjaCB3aWR0aFwiLHNpemU6XCJzaXplIHMgZm9udC1zaXplIGZvbnRTaXplIGZvbnRzaXplIGhlaWdodCBlbSBlbVNpemVcIixsaW5lSGVpZ2h0OlwibGggbGluZS1oZWlnaHQgbGluZUhlaWdodCBsaW5laGVpZ2h0IGxlYWRpbmdcIixmYW1pbHk6XCJmb250IGZhbWlseSBmb250RmFtaWx5IGZvbnQtZmFtaWx5IGZvbnRmYW1pbHkgdHlwZSB0eXBlZmFjZSBmYWNlXCIsc3lzdGVtOlwic3lzdGVtIHJlc2VydmVkIGRlZmF1bHQgZ2xvYmFsXCJ9KSkuc3lzdGVtKXJldHVybiB0LnN5c3RlbSYmZCh0LnN5c3RlbSxvKSx0LnN5c3RlbTtpZihkKHQuc3R5bGUsbCksZCh0LnZhcmlhbnQsdSksZCh0LndlaWdodCxzKSxkKHQuc3RyZXRjaCxjKSxudWxsPT10LnNpemUmJih0LnNpemU9ZiksXCJudW1iZXJcIj09dHlwZW9mIHQuc2l6ZSYmKHQuc2l6ZSs9XCJweFwiKSwhaSl0aHJvdyBFcnJvcihcIkJhZCBzaXplIHZhbHVlIGBcIit0LnNpemUrXCJgXCIpO3QuZmFtaWx5fHwodC5mYW1pbHk9cCksQXJyYXkuaXNBcnJheSh0LmZhbWlseSkmJih0LmZhbWlseS5sZW5ndGh8fCh0LmZhbWlseT1bcF0pLHQuZmFtaWx5PXQuZmFtaWx5Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gaFt0XT90OidcIicrdCsnXCInfSkuam9pbihcIiwgXCIpKTt2YXIgZT1bXTtyZXR1cm4gZS5wdXNoKHQuc3R5bGUpLHQudmFyaWFudCE9PXQuc3R5bGUmJmUucHVzaCh0LnZhcmlhbnQpLHQud2VpZ2h0IT09dC52YXJpYW50JiZ0LndlaWdodCE9PXQuc3R5bGUmJmUucHVzaCh0LndlaWdodCksdC5zdHJldGNoIT09dC53ZWlnaHQmJnQuc3RyZXRjaCE9PXQudmFyaWFudCYmdC5zdHJldGNoIT09dC5zdHlsZSYmZS5wdXNoKHQuc3RyZXRjaCksZS5wdXNoKHQuc2l6ZSsobnVsbD09dC5saW5lSGVpZ2h0fHxcIm5vcm1hbFwiPT09dC5saW5lSGVpZ2h0fHx0LmxpbmVIZWlnaHQrXCJcIj09XCIxXCI/XCJcIjpcIi9cIit0LmxpbmVIZWlnaHQpKSxlLnB1c2godC5mYW1pbHkpLGUuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfX0se1wiLi9saWIvdXRpbFwiOjEzMSxcImNzcy1mb250LXN0cmV0Y2gta2V5d29yZHNcIjoxMjcsXCJjc3MtZm9udC1zdHlsZS1rZXl3b3Jkc1wiOjEyOCxcImNzcy1mb250LXdlaWdodC1rZXl3b3Jkc1wiOjEyOSxcImNzcy1nbG9iYWwta2V5d29yZHNcIjoxMzQsXCJjc3Mtc3lzdGVtLWZvbnQta2V5d29yZHNcIjoxMzUsXCJwaWNrLWJ5LWFsaWFzXCI6NDU4fV0sMTM0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVtcImluaGVyaXRcIixcImluaXRpYWxcIixcInVuc2V0XCJdfSx7fV0sMTM1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVtcImNhcHRpb25cIixcImljb25cIixcIm1lbnVcIixcIm1lc3NhZ2UtYm94XCIsXCJzbWFsbC1jYXB0aW9uXCIsXCJzdGF0dXMtYmFyXCJdfSx7fV0sMTM2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1pLTEscz1pKmksbD1vKm8sYz0oMSsyKmkpKmwsdT1pKmwsaD1zKigzLTIqaSksZj1zKm87aWYodC5sZW5ndGgpe2F8fChhPW5ldyBBcnJheSh0Lmxlbmd0aCkpO2Zvcih2YXIgcD10Lmxlbmd0aC0xO3A+PTA7LS1wKWFbcF09Yyp0W3BdK3UqZVtwXStoKnJbcF0rZipuW3BdO3JldHVybiBhfXJldHVybiBjKnQrdSplK2gqcitmKm59LGUuZXhwb3J0cy5kZXJpdmF0aXZlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz02KmkqaS02Kmkscz0zKmkqaS00KmkrMSxsPS02KmkqaSs2KmksYz0zKmkqaS0yKmk7aWYodC5sZW5ndGgpe2F8fChhPW5ldyBBcnJheSh0Lmxlbmd0aCkpO2Zvcih2YXIgdT10Lmxlbmd0aC0xO3U+PTA7LS11KWFbdV09byp0W3VdK3MqZVt1XStsKnJbdV0rYypuW3VdO3JldHVybiBhfXJldHVybiBvKnQrcyplK2wqclt1XStjKm59fSx7fV0sMTM3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vbGliL3RodW5rLmpzXCIpO2Z1bmN0aW9uIGkoKXt0aGlzLmFyZ1R5cGVzPVtdLHRoaXMuc2hpbUFyZ3M9W10sdGhpcy5hcnJheUFyZ3M9W10sdGhpcy5hcnJheUJsb2NrSW5kaWNlcz1bXSx0aGlzLnNjYWxhckFyZ3M9W10sdGhpcy5vZmZzZXRBcmdzPVtdLHRoaXMub2Zmc2V0QXJnSW5kZXg9W10sdGhpcy5pbmRleEFyZ3M9W10sdGhpcy5zaGFwZUFyZ3M9W10sdGhpcy5mdW5jTmFtZT1cIlwiLHRoaXMucHJlPW51bGwsdGhpcy5ib2R5PW51bGwsdGhpcy5wb3N0PW51bGwsdGhpcy5kZWJ1Zz0hMX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGk7ZS5wcmU9dC5wcmUsZS5ib2R5PXQuYm9keSxlLnBvc3Q9dC5wb3N0O3ZhciByPXQuYXJncy5zbGljZSgwKTtlLmFyZ1R5cGVzPXI7Zm9yKHZhciBhPTA7YTxyLmxlbmd0aDsrK2Epe3ZhciBvPXJbYV07aWYoXCJhcnJheVwiPT09b3x8XCJvYmplY3RcIj09dHlwZW9mIG8mJm8uYmxvY2tJbmRpY2VzKXtpZihlLmFyZ1R5cGVzW2FdPVwiYXJyYXlcIixlLmFycmF5QXJncy5wdXNoKGEpLGUuYXJyYXlCbG9ja0luZGljZXMucHVzaChvLmJsb2NrSW5kaWNlcz9vLmJsb2NrSW5kaWNlczowKSxlLnNoaW1BcmdzLnB1c2goXCJhcnJheVwiK2EpLGE8ZS5wcmUuYXJncy5sZW5ndGgmJmUucHJlLmFyZ3NbYV0uY291bnQ+MCl0aHJvdyBuZXcgRXJyb3IoXCJjd2lzZTogcHJlKCkgYmxvY2sgbWF5IG5vdCByZWZlcmVuY2UgYXJyYXkgYXJnc1wiKTtpZihhPGUucG9zdC5hcmdzLmxlbmd0aCYmZS5wb3N0LmFyZ3NbYV0uY291bnQ+MCl0aHJvdyBuZXcgRXJyb3IoXCJjd2lzZTogcG9zdCgpIGJsb2NrIG1heSBub3QgcmVmZXJlbmNlIGFycmF5IGFyZ3NcIil9ZWxzZSBpZihcInNjYWxhclwiPT09byllLnNjYWxhckFyZ3MucHVzaChhKSxlLnNoaW1BcmdzLnB1c2goXCJzY2FsYXJcIithKTtlbHNlIGlmKFwiaW5kZXhcIj09PW8pe2lmKGUuaW5kZXhBcmdzLnB1c2goYSksYTxlLnByZS5hcmdzLmxlbmd0aCYmZS5wcmUuYXJnc1thXS5jb3VudD4wKXRocm93IG5ldyBFcnJvcihcImN3aXNlOiBwcmUoKSBibG9jayBtYXkgbm90IHJlZmVyZW5jZSBhcnJheSBpbmRleFwiKTtpZihhPGUuYm9keS5hcmdzLmxlbmd0aCYmZS5ib2R5LmFyZ3NbYV0ubHZhbHVlKXRocm93IG5ldyBFcnJvcihcImN3aXNlOiBib2R5KCkgYmxvY2sgbWF5IG5vdCB3cml0ZSB0byBhcnJheSBpbmRleFwiKTtpZihhPGUucG9zdC5hcmdzLmxlbmd0aCYmZS5wb3N0LmFyZ3NbYV0uY291bnQ+MCl0aHJvdyBuZXcgRXJyb3IoXCJjd2lzZTogcG9zdCgpIGJsb2NrIG1heSBub3QgcmVmZXJlbmNlIGFycmF5IGluZGV4XCIpfWVsc2UgaWYoXCJzaGFwZVwiPT09byl7aWYoZS5zaGFwZUFyZ3MucHVzaChhKSxhPGUucHJlLmFyZ3MubGVuZ3RoJiZlLnByZS5hcmdzW2FdLmx2YWx1ZSl0aHJvdyBuZXcgRXJyb3IoXCJjd2lzZTogcHJlKCkgYmxvY2sgbWF5IG5vdCB3cml0ZSB0byBhcnJheSBzaGFwZVwiKTtpZihhPGUuYm9keS5hcmdzLmxlbmd0aCYmZS5ib2R5LmFyZ3NbYV0ubHZhbHVlKXRocm93IG5ldyBFcnJvcihcImN3aXNlOiBib2R5KCkgYmxvY2sgbWF5IG5vdCB3cml0ZSB0byBhcnJheSBzaGFwZVwiKTtpZihhPGUucG9zdC5hcmdzLmxlbmd0aCYmZS5wb3N0LmFyZ3NbYV0ubHZhbHVlKXRocm93IG5ldyBFcnJvcihcImN3aXNlOiBwb3N0KCkgYmxvY2sgbWF5IG5vdCB3cml0ZSB0byBhcnJheSBzaGFwZVwiKX1lbHNle2lmKFwib2JqZWN0XCIhPXR5cGVvZiBvfHwhby5vZmZzZXQpdGhyb3cgbmV3IEVycm9yKFwiY3dpc2U6IFVua25vd24gYXJndW1lbnQgdHlwZSBcIityW2FdKTtlLmFyZ1R5cGVzW2FdPVwib2Zmc2V0XCIsZS5vZmZzZXRBcmdzLnB1c2goe2FycmF5Om8uYXJyYXksb2Zmc2V0Om8ub2Zmc2V0fSksZS5vZmZzZXRBcmdJbmRleC5wdXNoKGEpfX1pZihlLmFycmF5QXJncy5sZW5ndGg8PTApdGhyb3cgbmV3IEVycm9yKFwiY3dpc2U6IE5vIGFycmF5IGFyZ3VtZW50cyBzcGVjaWZpZWRcIik7aWYoZS5wcmUuYXJncy5sZW5ndGg+ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiY3dpc2U6IFRvbyBtYW55IGFyZ3VtZW50cyBpbiBwcmUoKSBibG9ja1wiKTtpZihlLmJvZHkuYXJncy5sZW5ndGg+ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiY3dpc2U6IFRvbyBtYW55IGFyZ3VtZW50cyBpbiBib2R5KCkgYmxvY2tcIik7aWYoZS5wb3N0LmFyZ3MubGVuZ3RoPnIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImN3aXNlOiBUb28gbWFueSBhcmd1bWVudHMgaW4gcG9zdCgpIGJsb2NrXCIpO3JldHVybiBlLmRlYnVnPSEhdC5wcmludENvZGV8fCEhdC5kZWJ1ZyxlLmZ1bmNOYW1lPXQuZnVuY05hbWV8fFwiY3dpc2VcIixlLmJsb2NrU2l6ZT10LmJsb2NrU2l6ZXx8NjQsbihlKX19LHtcIi4vbGliL3RodW5rLmpzXCI6MTM5fV0sMTM4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInVuaXFcIik7ZnVuY3Rpb24gaSh0LGUscil7dmFyIG4saSxhPXQubGVuZ3RoLG89ZS5hcnJheUFyZ3MubGVuZ3RoLHM9ZS5pbmRleEFyZ3MubGVuZ3RoPjAsbD1bXSxjPVtdLHU9MCxoPTA7Zm9yKG49MDtuPGE7KytuKWMucHVzaChbXCJpXCIsbixcIj0wXCJdLmpvaW4oXCJcIikpO2ZvcihpPTA7aTxvOysraSlmb3Iobj0wO248YTsrK24paD11LHU9dFtuXSwwPT09bj9jLnB1c2goW1wiZFwiLGksXCJzXCIsbixcIj10XCIsaSxcInBcIix1XS5qb2luKFwiXCIpKTpjLnB1c2goW1wiZFwiLGksXCJzXCIsbixcIj0odFwiLGksXCJwXCIsdSxcIi1zXCIsaCxcIip0XCIsaSxcInBcIixoLFwiKVwiXS5qb2luKFwiXCIpKTtmb3IoYy5sZW5ndGg+MCYmbC5wdXNoKFwidmFyIFwiK2Muam9pbihcIixcIikpLG49YS0xO24+PTA7LS1uKXU9dFtuXSxsLnB1c2goW1wiZm9yKGlcIixuLFwiPTA7aVwiLG4sXCI8c1wiLHUsXCI7KytpXCIsbixcIil7XCJdLmpvaW4oXCJcIikpO2ZvcihsLnB1c2gociksbj0wO248YTsrK24pe2ZvcihoPXUsdT10W25dLGk9MDtpPG87KytpKWwucHVzaChbXCJwXCIsaSxcIis9ZFwiLGksXCJzXCIsbl0uam9pbihcIlwiKSk7cyYmKG4+MCYmbC5wdXNoKFtcImluZGV4W1wiLGgsXCJdLT1zXCIsaF0uam9pbihcIlwiKSksbC5wdXNoKFtcIisraW5kZXhbXCIsdSxcIl1cIl0uam9pbihcIlwiKSkpLGwucHVzaChcIn1cIil9cmV0dXJuIGwuam9pbihcIlxcblwiKX1mdW5jdGlvbiBhKHQsZSxyKXtmb3IodmFyIG49dC5ib2R5LGk9W10sYT1bXSxvPTA7bzx0LmFyZ3MubGVuZ3RoOysrbyl7dmFyIHM9dC5hcmdzW29dO2lmKCEocy5jb3VudDw9MCkpe3ZhciBsPW5ldyBSZWdFeHAocy5uYW1lLFwiZ1wiKSxjPVwiXCIsdT1lLmFycmF5QXJncy5pbmRleE9mKG8pO3N3aXRjaChlLmFyZ1R5cGVzW29dKXtjYXNlXCJvZmZzZXRcIjp2YXIgaD1lLm9mZnNldEFyZ0luZGV4LmluZGV4T2Yobyk7dT1lLm9mZnNldEFyZ3NbaF0uYXJyYXksYz1cIitxXCIraDtjYXNlXCJhcnJheVwiOmM9XCJwXCIrdStjO3ZhciBmPVwibFwiK28scD1cImFcIit1O2lmKDA9PT1lLmFycmF5QmxvY2tJbmRpY2VzW3VdKTE9PT1zLmNvdW50P1wiZ2VuZXJpY1wiPT09clt1XT9zLmx2YWx1ZT8oaS5wdXNoKFtcInZhciBcIixmLFwiPVwiLHAsXCIuZ2V0KFwiLGMsXCIpXCJdLmpvaW4oXCJcIikpLG49bi5yZXBsYWNlKGwsZiksYS5wdXNoKFtwLFwiLnNldChcIixjLFwiLFwiLGYsXCIpXCJdLmpvaW4oXCJcIikpKTpuPW4ucmVwbGFjZShsLFtwLFwiLmdldChcIixjLFwiKVwiXS5qb2luKFwiXCIpKTpuPW4ucmVwbGFjZShsLFtwLFwiW1wiLGMsXCJdXCJdLmpvaW4oXCJcIikpOlwiZ2VuZXJpY1wiPT09clt1XT8oaS5wdXNoKFtcInZhciBcIixmLFwiPVwiLHAsXCIuZ2V0KFwiLGMsXCIpXCJdLmpvaW4oXCJcIikpLG49bi5yZXBsYWNlKGwsZikscy5sdmFsdWUmJmEucHVzaChbcCxcIi5zZXQoXCIsYyxcIixcIixmLFwiKVwiXS5qb2luKFwiXCIpKSk6KGkucHVzaChbXCJ2YXIgXCIsZixcIj1cIixwLFwiW1wiLGMsXCJdXCJdLmpvaW4oXCJcIikpLG49bi5yZXBsYWNlKGwsZikscy5sdmFsdWUmJmEucHVzaChbcCxcIltcIixjLFwiXT1cIixmXS5qb2luKFwiXCIpKSk7ZWxzZXtmb3IodmFyIGQ9W3MubmFtZV0sZz1bY10sdj0wO3Y8TWF0aC5hYnMoZS5hcnJheUJsb2NrSW5kaWNlc1t1XSk7disrKWQucHVzaChcIlxcXFxzKlxcXFxbKFteXFxcXF1dKylcXFxcXVwiKSxnLnB1c2goXCIkXCIrKHYrMSkrXCIqdFwiK3UrXCJiXCIrdik7aWYobD1uZXcgUmVnRXhwKGQuam9pbihcIlwiKSxcImdcIiksYz1nLmpvaW4oXCIrXCIpLFwiZ2VuZXJpY1wiPT09clt1XSl0aHJvdyBuZXcgRXJyb3IoXCJjd2lzZTogR2VuZXJpYyBhcnJheXMgbm90IHN1cHBvcnRlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGJsb2NrcyFcIik7bj1uLnJlcGxhY2UobCxbcCxcIltcIixjLFwiXVwiXS5qb2luKFwiXCIpKX1icmVhaztjYXNlXCJzY2FsYXJcIjpuPW4ucmVwbGFjZShsLFwiWVwiK2Uuc2NhbGFyQXJncy5pbmRleE9mKG8pKTticmVhaztjYXNlXCJpbmRleFwiOm49bi5yZXBsYWNlKGwsXCJpbmRleFwiKTticmVhaztjYXNlXCJzaGFwZVwiOm49bi5yZXBsYWNlKGwsXCJzaGFwZVwiKX19fXJldHVybltpLmpvaW4oXCJcXG5cIiksbixhLmpvaW4oXCJcXG5cIildLmpvaW4oXCJcXG5cIikudHJpbSgpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lWzFdLmxlbmd0aC1NYXRoLmFicyh0LmFycmF5QmxvY2tJbmRpY2VzWzBdKXwwLG89bmV3IEFycmF5KHQuYXJyYXlBcmdzLmxlbmd0aCkscz1uZXcgQXJyYXkodC5hcnJheUFyZ3MubGVuZ3RoKSxsPTA7bDx0LmFycmF5QXJncy5sZW5ndGg7KytsKXNbbF09ZVsyKmxdLG9bbF09ZVsyKmwrMV07dmFyIGM9W10sdT1bXSxoPVtdLGY9W10scD1bXTtmb3IobD0wO2w8dC5hcnJheUFyZ3MubGVuZ3RoOysrbCl7dC5hcnJheUJsb2NrSW5kaWNlc1tsXTwwPyhoLnB1c2goMCksZi5wdXNoKHIpLGMucHVzaChyKSx1LnB1c2gocit0LmFycmF5QmxvY2tJbmRpY2VzW2xdKSk6KGgucHVzaCh0LmFycmF5QmxvY2tJbmRpY2VzW2xdKSxmLnB1c2godC5hcnJheUJsb2NrSW5kaWNlc1tsXStyKSxjLnB1c2goMCksdS5wdXNoKHQuYXJyYXlCbG9ja0luZGljZXNbbF0pKTtmb3IodmFyIGQ9W10sZz0wO2c8b1tsXS5sZW5ndGg7ZysrKWhbbF08PW9bbF1bZ10mJm9bbF1bZ108ZltsXSYmZC5wdXNoKG9bbF1bZ10taFtsXSk7cC5wdXNoKGQpfXZhciB2PVtcIlNTXCJdLG09W1wiJ3VzZSBzdHJpY3QnXCJdLHk9W107Zm9yKGc9MDtnPHI7KytnKXkucHVzaChbXCJzXCIsZyxcIj1TU1tcIixnLFwiXVwiXS5qb2luKFwiXCIpKTtmb3IobD0wO2w8dC5hcnJheUFyZ3MubGVuZ3RoOysrbCl7Zm9yKHYucHVzaChcImFcIitsKSx2LnB1c2goXCJ0XCIrbCksdi5wdXNoKFwicFwiK2wpLGc9MDtnPHI7KytnKXkucHVzaChbXCJ0XCIsbCxcInBcIixnLFwiPXRcIixsLFwiW1wiLGhbbF0rZyxcIl1cIl0uam9pbihcIlwiKSk7Zm9yKGc9MDtnPE1hdGguYWJzKHQuYXJyYXlCbG9ja0luZGljZXNbbF0pOysrZyl5LnB1c2goW1widFwiLGwsXCJiXCIsZyxcIj10XCIsbCxcIltcIixjW2xdK2csXCJdXCJdLmpvaW4oXCJcIikpfWZvcihsPTA7bDx0LnNjYWxhckFyZ3MubGVuZ3RoOysrbCl2LnB1c2goXCJZXCIrbCk7aWYodC5zaGFwZUFyZ3MubGVuZ3RoPjAmJnkucHVzaChcInNoYXBlPVNTLnNsaWNlKDApXCIpLHQuaW5kZXhBcmdzLmxlbmd0aD4wKXt2YXIgeD1uZXcgQXJyYXkocik7Zm9yKGw9MDtsPHI7KytsKXhbbF09XCIwXCI7eS5wdXNoKFtcImluZGV4PVtcIix4LmpvaW4oXCIsXCIpLFwiXVwiXS5qb2luKFwiXCIpKX1mb3IobD0wO2w8dC5vZmZzZXRBcmdzLmxlbmd0aDsrK2wpe3ZhciBiPXQub2Zmc2V0QXJnc1tsXSxfPVtdO2ZvcihnPTA7ZzxiLm9mZnNldC5sZW5ndGg7KytnKTAhPT1iLm9mZnNldFtnXSYmKDE9PT1iLm9mZnNldFtnXT9fLnB1c2goW1widFwiLGIuYXJyYXksXCJwXCIsZ10uam9pbihcIlwiKSk6Xy5wdXNoKFtiLm9mZnNldFtnXSxcIip0XCIsYi5hcnJheSxcInBcIixnXS5qb2luKFwiXCIpKSk7MD09PV8ubGVuZ3RoP3kucHVzaChcInFcIitsK1wiPTBcIik6eS5wdXNoKFtcInFcIixsLFwiPVwiLF8uam9pbihcIitcIildLmpvaW4oXCJcIikpfXZhciB3PW4oW10uY29uY2F0KHQucHJlLnRoaXNWYXJzKS5jb25jYXQodC5ib2R5LnRoaXNWYXJzKS5jb25jYXQodC5wb3N0LnRoaXNWYXJzKSk7Zm9yKCh5PXkuY29uY2F0KHcpKS5sZW5ndGg+MCYmbS5wdXNoKFwidmFyIFwiK3kuam9pbihcIixcIikpLGw9MDtsPHQuYXJyYXlBcmdzLmxlbmd0aDsrK2wpbS5wdXNoKFwicFwiK2wrXCJ8PTBcIik7dC5wcmUuYm9keS5sZW5ndGg+MyYmbS5wdXNoKGEodC5wcmUsdCxzKSk7dmFyIGs9YSh0LmJvZHksdCxzKSxBPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dFswXS5sZW5ndGg7ZTxyOyl7Zm9yKHZhciBuPTE7bjx0Lmxlbmd0aDsrK24paWYodFtuXVtlXSE9PXRbMF1bZV0pcmV0dXJuIGU7KytlfXJldHVybiBlfShwKTtBPHI/bS5wdXNoKGZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgYT1lLmxlbmd0aCxvPXIuYXJyYXlBcmdzLmxlbmd0aCxzPXIuYmxvY2tTaXplLGw9ci5pbmRleEFyZ3MubGVuZ3RoPjAsYz1bXSx1PTA7dTxvOysrdSljLnB1c2goW1widmFyIG9mZnNldFwiLHUsXCI9cFwiLHVdLmpvaW4oXCJcIikpO2Zvcih1PXQ7dTxhOysrdSljLnB1c2goW1wiZm9yKHZhciBqXCIrdStcIj1TU1tcIixlW3VdLFwiXXwwO2pcIix1LFwiPjA7KXtcIl0uam9pbihcIlwiKSksYy5wdXNoKFtcImlmKGpcIix1LFwiPFwiLHMsXCIpe1wiXS5qb2luKFwiXCIpKSxjLnB1c2goW1wic1wiLGVbdV0sXCI9alwiLHVdLmpvaW4oXCJcIikpLGMucHVzaChbXCJqXCIsdSxcIj0wXCJdLmpvaW4oXCJcIikpLGMucHVzaChbXCJ9ZWxzZXtzXCIsZVt1XSxcIj1cIixzXS5qb2luKFwiXCIpKSxjLnB1c2goW1wialwiLHUsXCItPVwiLHMsXCJ9XCJdLmpvaW4oXCJcIikpLGwmJmMucHVzaChbXCJpbmRleFtcIixlW3VdLFwiXT1qXCIsdV0uam9pbihcIlwiKSk7Zm9yKHU9MDt1PG87Kyt1KXtmb3IodmFyIGg9W1wib2Zmc2V0XCIrdV0sZj10O2Y8YTsrK2YpaC5wdXNoKFtcImpcIixmLFwiKnRcIix1LFwicFwiLGVbZl1dLmpvaW4oXCJcIikpO2MucHVzaChbXCJwXCIsdSxcIj0oXCIsaC5qb2luKFwiK1wiKSxcIilcIl0uam9pbihcIlwiKSl9Zm9yKGMucHVzaChpKGUscixuKSksdT10O3U8YTsrK3UpYy5wdXNoKFwifVwiKTtyZXR1cm4gYy5qb2luKFwiXFxuXCIpfShBLHBbMF0sdCxrKSk6bS5wdXNoKGkocFswXSx0LGspKSx0LnBvc3QuYm9keS5sZW5ndGg+MyYmbS5wdXNoKGEodC5wb3N0LHQscykpLHQuZGVidWcmJmNvbnNvbGUubG9nKFwiLS0tLS1HZW5lcmF0ZWQgY3dpc2Ugcm91dGluZSBmb3IgXCIsZSxcIjpcXG5cIittLmpvaW4oXCJcXG5cIikrXCJcXG4tLS0tLS0tLS0tXCIpO3ZhciBUPVt0LmZ1bmNOYW1lfHxcInVubmFtZWRcIixcIl9jd2lzZV9sb29wX1wiLG9bMF0uam9pbihcInNcIiksXCJtXCIsQSxmdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPSEwLG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGk9dFtuXSxhPWkubWF0Y2goL1xcZCsvKTthPWE/YVswXTpcIlwiLDA9PT1pLmNoYXJBdCgwKT9lW25dPVwidVwiK2kuY2hhckF0KDEpK2E6ZVtuXT1pLmNoYXJBdCgwKSthLG4+MCYmKHI9ciYmZVtuXT09PWVbbi0xXSl9cmV0dXJuIHI/ZVswXTplLmpvaW4oXCJcIil9KHMpXS5qb2luKFwiXCIpO3JldHVybiBuZXcgRnVuY3Rpb24oW1wiZnVuY3Rpb24gXCIsVCxcIihcIix2LmpvaW4oXCIsXCIpLFwiKXtcIixtLmpvaW4oXCJcXG5cIiksXCJ9IHJldHVybiBcIixUXS5qb2luKFwiXCIpKSgpfX0se3VuaXE6NTMyfV0sMTM5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vY29tcGlsZS5qc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9W1wiJ3VzZSBzdHJpY3QnXCIsXCJ2YXIgQ0FDSEVEPXt9XCJdLHI9W10saT10LmZ1bmNOYW1lK1wiX2N3aXNlX3RodW5rXCI7ZS5wdXNoKFtcInJldHVybiBmdW5jdGlvbiBcIixpLFwiKFwiLHQuc2hpbUFyZ3Muam9pbihcIixcIiksXCIpe1wiXS5qb2luKFwiXCIpKTtmb3IodmFyIGE9W10sbz1bXSxzPVtbXCJhcnJheVwiLHQuYXJyYXlBcmdzWzBdLFwiLnNoYXBlLnNsaWNlKFwiLE1hdGgubWF4KDAsdC5hcnJheUJsb2NrSW5kaWNlc1swXSksdC5hcnJheUJsb2NrSW5kaWNlc1swXTwwP1wiLFwiK3QuYXJyYXlCbG9ja0luZGljZXNbMF0rXCIpXCI6XCIpXCJdLmpvaW4oXCJcIildLGw9W10sYz1bXSx1PTA7dTx0LmFycmF5QXJncy5sZW5ndGg7Kyt1KXt2YXIgaD10LmFycmF5QXJnc1t1XTtyLnB1c2goW1widFwiLGgsXCI9YXJyYXlcIixoLFwiLmR0eXBlLFwiLFwiclwiLGgsXCI9YXJyYXlcIixoLFwiLm9yZGVyXCJdLmpvaW4oXCJcIikpLGEucHVzaChcInRcIitoKSxhLnB1c2goXCJyXCIraCksby5wdXNoKFwidFwiK2gpLG8ucHVzaChcInJcIitoK1wiLmpvaW4oKVwiKSxzLnB1c2goXCJhcnJheVwiK2grXCIuZGF0YVwiKSxzLnB1c2goXCJhcnJheVwiK2grXCIuc3RyaWRlXCIpLHMucHVzaChcImFycmF5XCIraCtcIi5vZmZzZXR8MFwiKSx1PjAmJihsLnB1c2goXCJhcnJheVwiK3QuYXJyYXlBcmdzWzBdK1wiLnNoYXBlLmxlbmd0aD09PWFycmF5XCIraCtcIi5zaGFwZS5sZW5ndGgrXCIrKE1hdGguYWJzKHQuYXJyYXlCbG9ja0luZGljZXNbMF0pLU1hdGguYWJzKHQuYXJyYXlCbG9ja0luZGljZXNbdV0pKSksYy5wdXNoKFwiYXJyYXlcIit0LmFycmF5QXJnc1swXStcIi5zaGFwZVtzaGFwZUluZGV4K1wiK01hdGgubWF4KDAsdC5hcnJheUJsb2NrSW5kaWNlc1swXSkrXCJdPT09YXJyYXlcIitoK1wiLnNoYXBlW3NoYXBlSW5kZXgrXCIrTWF0aC5tYXgoMCx0LmFycmF5QmxvY2tJbmRpY2VzW3VdKStcIl1cIikpfWZvcih0LmFycmF5QXJncy5sZW5ndGg+MSYmKGUucHVzaChcImlmICghKFwiK2wuam9pbihcIiAmJiBcIikrXCIpKSB0aHJvdyBuZXcgRXJyb3IoJ2N3aXNlOiBBcnJheXMgZG8gbm90IGFsbCBoYXZlIHRoZSBzYW1lIGRpbWVuc2lvbmFsaXR5IScpXCIpLGUucHVzaChcImZvcih2YXIgc2hhcGVJbmRleD1hcnJheVwiK3QuYXJyYXlBcmdzWzBdK1wiLnNoYXBlLmxlbmd0aC1cIitNYXRoLmFicyh0LmFycmF5QmxvY2tJbmRpY2VzWzBdKStcIjsgc2hhcGVJbmRleC0tXFx4M2UwOykge1wiKSxlLnB1c2goXCJpZiAoIShcIitjLmpvaW4oXCIgJiYgXCIpK1wiKSkgdGhyb3cgbmV3IEVycm9yKCdjd2lzZTogQXJyYXlzIGRvIG5vdCBhbGwgaGF2ZSB0aGUgc2FtZSBzaGFwZSEnKVwiKSxlLnB1c2goXCJ9XCIpKSx1PTA7dTx0LnNjYWxhckFyZ3MubGVuZ3RoOysrdSlzLnB1c2goXCJzY2FsYXJcIit0LnNjYWxhckFyZ3NbdV0pO3JldHVybiByLnB1c2goW1widHlwZT1bXCIsby5qb2luKFwiLFwiKSxcIl0uam9pbigpXCJdLmpvaW4oXCJcIikpLHIucHVzaChcInByb2M9Q0FDSEVEW3R5cGVdXCIpLGUucHVzaChcInZhciBcIityLmpvaW4oXCIsXCIpKSxlLnB1c2goW1wiaWYoIXByb2Mpe1wiLFwiQ0FDSEVEW3R5cGVdPXByb2M9Y29tcGlsZShbXCIsYS5qb2luKFwiLFwiKSxcIl0pfVwiLFwicmV0dXJuIHByb2MoXCIscy5qb2luKFwiLFwiKSxcIil9XCJdLmpvaW4oXCJcIikpLHQuZGVidWcmJmNvbnNvbGUubG9nKFwiLS0tLS1HZW5lcmF0ZWQgdGh1bms6XFxuXCIrZS5qb2luKFwiXFxuXCIpK1wiXFxuLS0tLS0tLS0tLVwiKSxuZXcgRnVuY3Rpb24oXCJjb21waWxlXCIsZS5qb2luKFwiXFxuXCIpKShuLmJpbmQodm9pZCAwLHQpKX19LHtcIi4vY29tcGlsZS5qc1wiOjEzOH1dLDE0MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KFwiY3dpc2UtY29tcGlsZXJcIil9LHtcImN3aXNlLWNvbXBpbGVyXCI6MTM3fV0sMTQxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saT10KFwiZXM1LWV4dC9vYmplY3QvY29weVwiKSxhPXQoXCJlczUtZXh0L29iamVjdC9ub3JtYWxpemUtb3B0aW9uc1wiKSxvPXQoXCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZVwiKSxzPXQoXCJlczUtZXh0L29iamVjdC9tYXBcIiksbD10KFwiZXM1LWV4dC9vYmplY3QvdmFsaWQtY2FsbGFibGVcIiksYz10KFwiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWVcIiksdT1GdW5jdGlvbi5wcm90b3R5cGUuYmluZCxoPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxmPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7bj1mdW5jdGlvbih0LGUscil7dmFyIG4sYT1jKGUpJiZsKGUudmFsdWUpO3JldHVybiBkZWxldGUobj1pKGUpKS53cml0YWJsZSxkZWxldGUgbi52YWx1ZSxuLmdldD1mdW5jdGlvbigpe3JldHVybiFyLm92ZXJ3cml0ZURlZmluaXRpb24mJmYuY2FsbCh0aGlzLHQpP2E6KGUudmFsdWU9dS5jYWxsKGEsci5yZXNvbHZlQ29udGV4dD9yLnJlc29sdmVDb250ZXh0KHRoaXMpOnRoaXMpLGgodGhpcyx0LGUpLHRoaXNbdF0pfSxufSxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9YShhcmd1bWVudHNbMV0pO3JldHVybiBudWxsIT1lLnJlc29sdmVDb250ZXh0JiZvKGUucmVzb2x2ZUNvbnRleHQpLHModCxmdW5jdGlvbih0LHIpe3JldHVybiBuKHIsdCxlKX0pfX0se1wiZXM1LWV4dC9vYmplY3QvY29weVwiOjE4MixcImVzNS1leHQvb2JqZWN0L21hcFwiOjE5MSxcImVzNS1leHQvb2JqZWN0L25vcm1hbGl6ZS1vcHRpb25zXCI6MTkyLFwiZXM1LWV4dC9vYmplY3QvdmFsaWQtY2FsbGFibGVcIjoxOTYsXCJlczUtZXh0L29iamVjdC92YWxpZC12YWx1ZVwiOjE5OH1dLDE0MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJlczUtZXh0L29iamVjdC9hc3NpZ25cIiksaT10KFwiZXM1LWV4dC9vYmplY3Qvbm9ybWFsaXplLW9wdGlvbnNcIiksYT10KFwiZXM1LWV4dC9vYmplY3QvaXMtY2FsbGFibGVcIiksbz10KFwiZXM1LWV4dC9zdHJpbmcvIy9jb250YWluc1wiKTsoZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxzLGwsYztyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyfHxcInN0cmluZ1wiIT10eXBlb2YgdD8obD1lLGU9dCx0PW51bGwpOmw9YXJndW1lbnRzWzJdLG51bGw9PXQ/KHI9cz0hMCxhPSExKToocj1vLmNhbGwodCxcImNcIiksYT1vLmNhbGwodCxcImVcIikscz1vLmNhbGwodCxcIndcIikpLGM9e3ZhbHVlOmUsY29uZmlndXJhYmxlOnIsZW51bWVyYWJsZTphLHdyaXRhYmxlOnN9LGw/bihpKGwpLGMpOmN9KS5ncz1mdW5jdGlvbih0LGUscil7dmFyIHMsbCxjLHU7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIHQ/KGM9cixyPWUsZT10LHQ9bnVsbCk6Yz1hcmd1bWVudHNbM10sbnVsbD09ZT9lPXZvaWQgMDphKGUpP251bGw9PXI/cj12b2lkIDA6YShyKXx8KGM9cixyPXZvaWQgMCk6KGM9ZSxlPXI9dm9pZCAwKSxudWxsPT10PyhzPSEwLGw9ITEpOihzPW8uY2FsbCh0LFwiY1wiKSxsPW8uY2FsbCh0LFwiZVwiKSksdT17Z2V0OmUsc2V0OnIsY29uZmlndXJhYmxlOnMsZW51bWVyYWJsZTpsfSxjP24oaShjKSx1KTp1fX0se1wiZXM1LWV4dC9vYmplY3QvYXNzaWduXCI6MTc5LFwiZXM1LWV4dC9vYmplY3QvaXMtY2FsbGFibGVcIjoxODUsXCJlczUtZXh0L29iamVjdC9ub3JtYWxpemUtb3B0aW9uc1wiOjE5MixcImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnNcIjoxOTl9XSwxNDM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbjtuPXRoaXMsZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiByKHQpe3ZhciByO3JldHVybiAxPT09dC5sZW5ndGgmJihyPXQsdD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHIodCksbil9KSx7bGVmdDpmdW5jdGlvbihlLHIsbixpKXtmb3IobnVsbD09biYmKG49MCksbnVsbD09aSYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPDA/bj1hKzE6aT1hfXJldHVybiBufSxyaWdodDpmdW5jdGlvbihlLHIsbixpKXtmb3IobnVsbD09biYmKG49MCksbnVsbD09aSYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPjA/aT1hOm49YSsxfXJldHVybiBufX19dmFyIG49cihlKSxpPW4ucmlnaHQsYT1uLmxlZnQ7ZnVuY3Rpb24gbyh0LGUpe3JldHVyblt0LGVdfWZ1bmN0aW9uIHModCl7cmV0dXJuIG51bGw9PT10P05hTjordH1mdW5jdGlvbiBsKHQsZSl7dmFyIHIsbixpPXQubGVuZ3RoLGE9MCxvPS0xLGw9MCxjPTA7aWYobnVsbD09ZSlmb3IoOysrbzxpOylpc05hTihyPXModFtvXSkpfHwoYys9KG49ci1sKSooci0obCs9bi8rK2EpKSk7ZWxzZSBmb3IoOysrbzxpOylpc05hTihyPXMoZSh0W29dLG8sdCkpKXx8KGMrPShuPXItbCkqKHItKGwrPW4vKythKSkpO2lmKGE+MSlyZXR1cm4gYy8oYS0xKX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9bCh0LGUpO3JldHVybiByP01hdGguc3FydChyKTpyfWZ1bmN0aW9uIHUodCxlKXt2YXIgcixuLGksYT10Lmxlbmd0aCxvPS0xO2lmKG51bGw9PWUpe2Zvcig7KytvPGE7KWlmKG51bGwhPShyPXRbb10pJiZyPj1yKWZvcihuPWk9cjsrK288YTspbnVsbCE9KHI9dFtvXSkmJihuPnImJihuPXIpLGk8ciYmKGk9cikpfWVsc2UgZm9yKDsrK288YTspaWYobnVsbCE9KHI9ZSh0W29dLG8sdCkpJiZyPj1yKWZvcihuPWk9cjsrK288YTspbnVsbCE9KHI9ZSh0W29dLG8sdCkpJiYobj5yJiYobj1yKSxpPHImJihpPXIpKTtyZXR1cm5bbixpXX12YXIgaD1BcnJheS5wcm90b3R5cGUsZj1oLnNsaWNlLHA9aC5tYXA7ZnVuY3Rpb24gZCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdH1mdW5jdGlvbiB2KHQsZSxyKXt0PSt0LGU9K2Uscj0oaT1hcmd1bWVudHMubGVuZ3RoKTwyPyhlPXQsdD0wLDEpOmk8Mz8xOityO2Zvcih2YXIgbj0tMSxpPTB8TWF0aC5tYXgoMCxNYXRoLmNlaWwoKGUtdCkvcikpLGE9bmV3IEFycmF5KGkpOysrbjxpOylhW25dPXQrbipyO3JldHVybiBhfXZhciBtPU1hdGguc3FydCg1MCkseT1NYXRoLnNxcnQoMTApLHg9TWF0aC5zcXJ0KDIpO2Z1bmN0aW9uIGIodCxlLHIpe3ZhciBuPShlLXQpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksYT1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhhPj1tPzEwOmE+PXk/NTphPj14PzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8oYT49bT8xMDphPj15PzU6YT49eD8yOjEpfWZ1bmN0aW9uIF8odCxlLHIpe3ZhciBuPU1hdGguYWJzKGUtdCkvTWF0aC5tYXgoMCxyKSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSksYT1uL2k7cmV0dXJuIGE+PW0/aSo9MTA6YT49eT9pKj01OmE+PXgmJihpKj0yKSxlPHQ/LWk6aX1mdW5jdGlvbiB3KHQpe3JldHVybiBNYXRoLmNlaWwoTWF0aC5sb2codC5sZW5ndGgpL01hdGguTE4yKSsxfWZ1bmN0aW9uIGsodCxlLHIpe2lmKG51bGw9PXImJihyPXMpLG49dC5sZW5ndGgpe2lmKChlPStlKTw9MHx8bjwyKXJldHVybityKHRbMF0sMCx0KTtpZihlPj0xKXJldHVybityKHRbbi0xXSxuLTEsdCk7dmFyIG4saT0obi0xKSplLGE9TWF0aC5mbG9vcihpKSxvPStyKHRbYV0sYSx0KTtyZXR1cm4gbysoK3IodFthKzFdLGErMSx0KS1vKSooaS1hKX19ZnVuY3Rpb24gQSh0LGUpe3ZhciByLG4saT10Lmxlbmd0aCxhPS0xO2lmKG51bGw9PWUpe2Zvcig7KythPGk7KWlmKG51bGwhPShyPXRbYV0pJiZyPj1yKWZvcihuPXI7KythPGk7KW51bGwhPShyPXRbYV0pJiZuPnImJihuPXIpfWVsc2UgZm9yKDsrK2E8aTspaWYobnVsbCE9KHI9ZSh0W2FdLGEsdCkpJiZyPj1yKWZvcihuPXI7KythPGk7KW51bGwhPShyPWUodFthXSxhLHQpKSYmbj5yJiYobj1yKTtyZXR1cm4gbn1mdW5jdGlvbiBUKHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBlPS0xLHI9QSh0LE0pLG49bmV3IEFycmF5KHIpOysrZTxyOylmb3IodmFyIGksYT0tMSxvPW5bZV09bmV3IEFycmF5KGkpOysrYTxpOylvW2FdPXRbYV1bZV07cmV0dXJuIG59ZnVuY3Rpb24gTSh0KXtyZXR1cm4gdC5sZW5ndGh9dC5iaXNlY3Q9aSx0LmJpc2VjdFJpZ2h0PWksdC5iaXNlY3RMZWZ0PWEsdC5hc2NlbmRpbmc9ZSx0LmJpc2VjdG9yPXIsdC5jcm9zcz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLHMsbD10Lmxlbmd0aCxjPWUubGVuZ3RoLHU9bmV3IEFycmF5KGwqYyk7Zm9yKG51bGw9PXImJihyPW8pLG49YT0wO248bDsrK24pZm9yKHM9dFtuXSxpPTA7aTxjOysraSwrK2EpdVthXT1yKHMsZVtpXSk7cmV0dXJuIHV9LHQuZGVzY2VuZGluZz1mdW5jdGlvbih0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn0sdC5kZXZpYXRpb249Yyx0LmV4dGVudD11LHQuaGlzdG9ncmFtPWZ1bmN0aW9uKCl7dmFyIHQ9ZyxlPXUscj13O2Z1bmN0aW9uIG4obil7dmFyIGEsbyxzPW4ubGVuZ3RoLGw9bmV3IEFycmF5KHMpO2ZvcihhPTA7YTxzOysrYSlsW2FdPXQoblthXSxhLG4pO3ZhciBjPWUobCksdT1jWzBdLGg9Y1sxXSxmPXIobCx1LGgpO0FycmF5LmlzQXJyYXkoZil8fChmPV8odSxoLGYpLGY9dihNYXRoLmNlaWwodS9mKSpmLGgsZikpO2Zvcih2YXIgcD1mLmxlbmd0aDtmWzBdPD11OylmLnNoaWZ0KCksLS1wO2Zvcig7ZltwLTFdPmg7KWYucG9wKCksLS1wO3ZhciBkLGc9bmV3IEFycmF5KHArMSk7Zm9yKGE9MDthPD1wOysrYSkoZD1nW2FdPVtdKS54MD1hPjA/ZlthLTFdOnUsZC54MT1hPHA/ZlthXTpoO2ZvcihhPTA7YTxzOysrYSl1PD0obz1sW2FdKSYmbzw9aCYmZ1tpKGYsbywwLHApXS5wdXNoKG5bYV0pO3JldHVybiBnfXJldHVybiBuLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTpkKGUpLG4pOnR9LG4uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpkKFt0WzBdLHRbMV1dKSxuKTplfSxuLnRocmVzaG9sZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/ZChmLmNhbGwodCkpOmQodCksbik6cn0sbn0sdC50aHJlc2hvbGRGcmVlZG1hbkRpYWNvbmlzPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gdD1wLmNhbGwodCxzKS5zb3J0KGUpLE1hdGguY2VpbCgobi1yKS8oMiooayh0LC43NSktayh0LC4yNSkpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LHQudGhyZXNob2xkU2NvdHQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBNYXRoLmNlaWwoKHItZSkvKDMuNSpjKHQpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LHQudGhyZXNob2xkU3R1cmdlcz13LHQubWF4PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXQubGVuZ3RoLGE9LTE7aWYobnVsbD09ZSl7Zm9yKDsrK2E8aTspaWYobnVsbCE9KHI9dFthXSkmJnI+PXIpZm9yKG49cjsrK2E8aTspbnVsbCE9KHI9dFthXSkmJnI+biYmKG49cil9ZWxzZSBmb3IoOysrYTxpOylpZihudWxsIT0ocj1lKHRbYV0sYSx0KSkmJnI+PXIpZm9yKG49cjsrK2E8aTspbnVsbCE9KHI9ZSh0W2FdLGEsdCkpJiZyPm4mJihuPXIpO3JldHVybiBufSx0Lm1lYW49ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQubGVuZ3RoLGk9bixhPS0xLG89MDtpZihudWxsPT1lKWZvcig7KythPG47KWlzTmFOKHI9cyh0W2FdKSk/LS1pOm8rPXI7ZWxzZSBmb3IoOysrYTxuOylpc05hTihyPXMoZSh0W2FdLGEsdCkpKT8tLWk6bys9cjtpZihpKXJldHVybiBvL2l9LHQubWVkaWFuPWZ1bmN0aW9uKHQscil7dmFyIG4saT10Lmxlbmd0aCxhPS0xLG89W107aWYobnVsbD09cilmb3IoOysrYTxpOylpc05hTihuPXModFthXSkpfHxvLnB1c2gobik7ZWxzZSBmb3IoOysrYTxpOylpc05hTihuPXMocih0W2FdLGEsdCkpKXx8by5wdXNoKG4pO3JldHVybiBrKG8uc29ydChlKSwuNSl9LHQubWVyZ2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpPXQubGVuZ3RoLGE9LTEsbz0wOysrYTxpOylvKz10W2FdLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobyk7LS1pPj0wOylmb3IoZT0obj10W2ldKS5sZW5ndGg7LS1lPj0wOylyWy0tb109bltlXTtyZXR1cm4gcn0sdC5taW49QSx0LnBhaXJzPWZ1bmN0aW9uKHQsZSl7bnVsbD09ZSYmKGU9byk7Zm9yKHZhciByPTAsbj10Lmxlbmd0aC0xLGk9dFswXSxhPW5ldyBBcnJheShuPDA/MDpuKTtyPG47KWFbcl09ZShpLGk9dFsrK3JdKTtyZXR1cm4gYX0sdC5wZXJtdXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUubGVuZ3RoLG49bmV3IEFycmF5KHIpO3ItLTspbltyXT10W2Vbcl1dO3JldHVybiBufSx0LnF1YW50aWxlPWssdC5yYW5nZT12LHQuc2Nhbj1mdW5jdGlvbih0LHIpe2lmKG49dC5sZW5ndGgpe3ZhciBuLGksYT0wLG89MCxzPXRbb107Zm9yKG51bGw9PXImJihyPWUpOysrYTxuOykocihpPXRbYV0scyk8MHx8MCE9PXIocyxzKSkmJihzPWksbz1hKTtyZXR1cm4gMD09PXIocyxzKT9vOnZvaWQgMH19LHQuc2h1ZmZsZT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGksYT0obnVsbD09cj90Lmxlbmd0aDpyKS0oZT1udWxsPT1lPzA6K2UpO2E7KWk9TWF0aC5yYW5kb20oKSphLS18MCxuPXRbYStlXSx0W2ErZV09dFtpK2VdLHRbaStlXT1uO3JldHVybiB0fSx0LnN1bT1mdW5jdGlvbih0LGUpe3ZhciByLG49dC5sZW5ndGgsaT0tMSxhPTA7aWYobnVsbD09ZSlmb3IoOysraTxuOykocj0rdFtpXSkmJihhKz1yKTtlbHNlIGZvcig7KytpPG47KShyPStlKHRbaV0saSx0KSkmJihhKz1yKTtyZXR1cm4gYX0sdC50aWNrcz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scz0tMTtpZihyPStyLCh0PSt0KT09KGU9K2UpJiZyPjApcmV0dXJuW3RdO2lmKChuPWU8dCkmJihpPXQsdD1lLGU9aSksMD09PShvPWIodCxlLHIpKXx8IWlzRmluaXRlKG8pKXJldHVybltdO2lmKG8+MClmb3IodD1NYXRoLmNlaWwodC9vKSxlPU1hdGguZmxvb3IoZS9vKSxhPW5ldyBBcnJheShpPU1hdGguY2VpbChlLXQrMSkpOysrczxpOylhW3NdPSh0K3MpKm87ZWxzZSBmb3IodD1NYXRoLmZsb29yKHQqbyksZT1NYXRoLmNlaWwoZSpvKSxhPW5ldyBBcnJheShpPU1hdGguY2VpbCh0LWUrMSkpOysrczxpOylhW3NdPSh0LXMpL287cmV0dXJuIG4mJmEucmV2ZXJzZSgpLGF9LHQudGlja0luY3JlbWVudD1iLHQudGlja1N0ZXA9Xyx0LnRyYW5zcG9zZT1ULHQudmFyaWFuY2U9bCx0LnppcD1mdW5jdGlvbigpe3JldHVybiBUKGFyZ3VtZW50cyl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfShcIm9iamVjdFwiPT10eXBlb2YgciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGU/cjpuLmQzPW4uZDN8fHt9KX0se31dLDE0NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuO249dGhpcyxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKCl7fWZ1bmN0aW9uIHIodCxyKXt2YXIgbj1uZXcgZTtpZih0IGluc3RhbmNlb2YgZSl0LmVhY2goZnVuY3Rpb24odCxlKXtuLnNldChlLHQpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgaSxhPS0xLG89dC5sZW5ndGg7aWYobnVsbD09cilmb3IoOysrYTxvOyluLnNldChhLHRbYV0pO2Vsc2UgZm9yKDsrK2E8bzspbi5zZXQocihpPXRbYV0sYSx0KSxpKX1lbHNlIGlmKHQpZm9yKHZhciBzIGluIHQpbi5zZXQocyx0W3NdKTtyZXR1cm4gbn1lLnByb3RvdHlwZT1yLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZSxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuXCIkXCIrdCBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbXCIkXCIrdF19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzW1wiJFwiK3RdPWUsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPVwiJFwiK3Q7cmV0dXJuIGUgaW4gdGhpcyYmZGVsZXRlIHRoaXNbZV19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpXCIkXCI9PT10WzBdJiZkZWxldGUgdGhpc1t0XX0sa2V5czpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKVwiJFwiPT09ZVswXSYmdC5wdXNoKGUuc2xpY2UoMSkpO3JldHVybiB0fSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcylcIiRcIj09PWVbMF0mJnQucHVzaCh0aGlzW2VdKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKVwiJFwiPT09ZVswXSYmdC5wdXNoKHtrZXk6ZS5zbGljZSgxKSx2YWx1ZTp0aGlzW2VdfSk7cmV0dXJuIHR9LHNpemU6ZnVuY3Rpb24oKXt2YXIgdD0wO2Zvcih2YXIgZSBpbiB0aGlzKVwiJFwiPT09ZVswXSYmKyt0O3JldHVybiB0fSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKWlmKFwiJFwiPT09dFswXSlyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcylcIiRcIj09PWVbMF0mJnQodGhpc1tlXSxlLnNsaWNlKDEpLHRoaXMpfX07ZnVuY3Rpb24gbigpe3JldHVybnt9fWZ1bmN0aW9uIGkodCxlLHIpe3RbZV09cn1mdW5jdGlvbiBhKCl7cmV0dXJuIHIoKX1mdW5jdGlvbiBvKHQsZSxyKXt0LnNldChlLHIpfWZ1bmN0aW9uIHMoKXt9dmFyIGw9ci5wcm90b3R5cGU7ZnVuY3Rpb24gYyh0LGUpe3ZhciByPW5ldyBzO2lmKHQgaW5zdGFuY2VvZiBzKXQuZWFjaChmdW5jdGlvbih0KXtyLmFkZCh0KX0pO2Vsc2UgaWYodCl7dmFyIG49LTEsaT10Lmxlbmd0aDtpZihudWxsPT1lKWZvcig7KytuPGk7KXIuYWRkKHRbbl0pO2Vsc2UgZm9yKDsrK248aTspci5hZGQoZSh0W25dLG4sdCkpfXJldHVybiByfXMucHJvdG90eXBlPWMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzLGhhczpsLmhhcyxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbXCIkXCIrKHQrPVwiXCIpXT10LHRoaXN9LHJlbW92ZTpsLnJlbW92ZSxjbGVhcjpsLmNsZWFyLHZhbHVlczpsLmtleXMsc2l6ZTpsLnNpemUsZW1wdHk6bC5lbXB0eSxlYWNoOmwuZWFjaH07dC5uZXN0PWZ1bmN0aW9uKCl7dmFyIHQsZSxzLGw9W10sYz1bXTtmdW5jdGlvbiB1KG4saSxhLG8pe2lmKGk+PWwubGVuZ3RoKXJldHVybiBudWxsIT10JiZuLnNvcnQodCksbnVsbCE9ZT9lKG4pOm47Zm9yKHZhciBzLGMsaCxmPS0xLHA9bi5sZW5ndGgsZD1sW2krK10sZz1yKCksdj1hKCk7KytmPHA7KShoPWcuZ2V0KHM9ZChjPW5bZl0pK1wiXCIpKT9oLnB1c2goYyk6Zy5zZXQocyxbY10pO3JldHVybiBnLmVhY2goZnVuY3Rpb24odCxlKXtvKHYsZSx1KHQsaSxhLG8pKX0pLHZ9cmV0dXJuIHM9e29iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdSh0LDAsbixpKX0sbWFwOmZ1bmN0aW9uKHQpe3JldHVybiB1KHQsMCxhLG8pfSxlbnRyaWVzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbiB0KHIsbil7aWYoKytuPmwubGVuZ3RoKXJldHVybiByO3ZhciBpLGE9Y1tuLTFdO3JldHVybiBudWxsIT1lJiZuPj1sLmxlbmd0aD9pPXIuZW50cmllcygpOihpPVtdLHIuZWFjaChmdW5jdGlvbihlLHIpe2kucHVzaCh7a2V5OnIsdmFsdWVzOnQoZSxuKX0pfSkpLG51bGwhPWE/aS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEodC5rZXksZS5rZXkpfSk6aX0odSh0LDAsYSxvKSwwKX0sa2V5OmZ1bmN0aW9uKHQpe3JldHVybiBsLnB1c2godCksc30sc29ydEtleXM6ZnVuY3Rpb24odCl7cmV0dXJuIGNbbC5sZW5ndGgtMV09dCxzfSxzb3J0VmFsdWVzOmZ1bmN0aW9uKGUpe3JldHVybiB0PWUsc30scm9sbHVwOmZ1bmN0aW9uKHQpe3JldHVybiBlPXQsc319fSx0LnNldD1jLHQubWFwPXIsdC5rZXlzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaChyKTtyZXR1cm4gZX0sdC52YWx1ZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHRbcl0pO3JldHVybiBlfSx0LmVudHJpZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHtrZXk6cix2YWx1ZTp0W3JdfSk7cmV0dXJuIGV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfShcIm9iamVjdFwiPT10eXBlb2YgciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGU/cjpuLmQzPW4uZDN8fHt9KX0se31dLDE0NTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuO249dGhpcyxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKHQsZSxyKXt0LnByb3RvdHlwZT1lLnByb3RvdHlwZT1yLHIuY29uc3RydWN0b3I9dH1mdW5jdGlvbiByKHQsZSl7dmFyIHI9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciBuIGluIGUpcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIG4oKXt9dmFyIGk9XCJcXFxccyooWystXT9cXFxcZCspXFxcXHMqXCIsYT1cIlxcXFxzKihbKy1dP1xcXFxkKlxcXFwuP1xcXFxkKyg/OltlRV1bKy1dP1xcXFxkKyk/KVxcXFxzKlwiLG89XCJcXFxccyooWystXT9cXFxcZCpcXFxcLj9cXFxcZCsoPzpbZUVdWystXT9cXFxcZCspPyklXFxcXHMqXCIscz0vXiMoWzAtOWEtZl17M30pJC8sbD0vXiMoWzAtOWEtZl17Nn0pJC8sYz1uZXcgUmVnRXhwKFwiXnJnYlxcXFwoXCIrW2ksaSxpXStcIlxcXFwpJFwiKSx1PW5ldyBSZWdFeHAoXCJecmdiXFxcXChcIitbbyxvLG9dK1wiXFxcXCkkXCIpLGg9bmV3IFJlZ0V4cChcIl5yZ2JhXFxcXChcIitbaSxpLGksYV0rXCJcXFxcKSRcIiksZj1uZXcgUmVnRXhwKFwiXnJnYmFcXFxcKFwiK1tvLG8sbyxhXStcIlxcXFwpJFwiKSxwPW5ldyBSZWdFeHAoXCJeaHNsXFxcXChcIitbYSxvLG9dK1wiXFxcXCkkXCIpLGQ9bmV3IFJlZ0V4cChcIl5oc2xhXFxcXChcIitbYSxvLG8sYV0rXCJcXFxcKSRcIiksZz17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiB2KHQpe3ZhciBlO3JldHVybiB0PSh0K1wiXCIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPXMuZXhlYyh0KSk/bmV3IF8oKGU9cGFyc2VJbnQoZVsxXSwxNikpPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKDE1JmUpPDw0fDE1JmUsMSk6KGU9bC5leGVjKHQpKT9tKHBhcnNlSW50KGVbMV0sMTYpKTooZT1jLmV4ZWModCkpP25ldyBfKGVbMV0sZVsyXSxlWzNdLDEpOihlPXUuZXhlYyh0KSk/bmV3IF8oMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9aC5leGVjKHQpKT95KGVbMV0sZVsyXSxlWzNdLGVbNF0pOihlPWYuZXhlYyh0KSk/eSgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT1wLmV4ZWModCkpP2soZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1kLmV4ZWModCkpP2soZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCxlWzRdKTpnLmhhc093blByb3BlcnR5KHQpP20oZ1t0XSk6XCJ0cmFuc3BhcmVudFwiPT09dD9uZXcgXyhOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIG0odCl7cmV0dXJuIG5ldyBfKHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiB5KHQsZSxyLG4pe3JldHVybiBuPD0wJiYodD1lPXI9TmFOKSxuZXcgXyh0LGUscixuKX1mdW5jdGlvbiB4KHQpe3JldHVybiB0IGluc3RhbmNlb2Ygbnx8KHQ9dih0KSksdD9uZXcgXygodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgX31mdW5jdGlvbiBiKHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD94KHQpOm5ldyBfKHQsZSxyLG51bGw9PW4/MTpuKX1mdW5jdGlvbiBfKHQsZSxyLG4pe3RoaXMucj0rdCx0aGlzLmc9K2UsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiB3KHQpe3JldHVybigodD1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHQpfHwwKSkpPDE2P1wiMFwiOlwiXCIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIGsodCxlLHIsbil7cmV0dXJuIG48PTA/dD1lPXI9TmFOOnI8PTB8fHI+PTE/dD1lPU5hTjplPD0wJiYodD1OYU4pLG5ldyBUKHQsZSxyLG4pfWZ1bmN0aW9uIEEodCxlLHIsaSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2Z1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBUKXJldHVybiBuZXcgVCh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBufHwodD12KHQpKSwhdClyZXR1cm4gbmV3IFQ7aWYodCBpbnN0YW5jZW9mIFQpcmV0dXJuIHQ7dmFyIGU9KHQ9dC5yZ2IoKSkuci8yNTUscj10LmcvMjU1LGk9dC5iLzI1NSxhPU1hdGgubWluKGUscixpKSxvPU1hdGgubWF4KGUscixpKSxzPU5hTixsPW8tYSxjPShvK2EpLzI7cmV0dXJuIGw/KHM9ZT09PW8/KHItaSkvbCs2KihyPGkpOnI9PT1vPyhpLWUpL2wrMjooZS1yKS9sKzQsbC89YzwuNT9vK2E6Mi1vLWEscyo9NjApOmw9Yz4wJiZjPDE/MDpzLG5ldyBUKHMsbCxjLHQub3BhY2l0eSl9KHQpOm5ldyBUKHQsZSxyLG51bGw9PWk/MTppKX1mdW5jdGlvbiBUKHQsZSxyLG4pe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBNKHQsZSxyKXtyZXR1cm4gMjU1Kih0PDYwP2UrKHItZSkqdC82MDp0PDE4MD9yOnQ8MjQwP2UrKHItZSkqKDI0MC10KS82MDplKX1lKG4sdix7ZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5oZXgoKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKStcIlwifX0pLGUoXyxiLHIobix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IF8odGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IF8odGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PXRoaXMuciYmdGhpcy5yPD0yNTUmJjA8PXRoaXMuZyYmdGhpcy5nPD0yNTUmJjA8PXRoaXMuYiYmdGhpcy5iPD0yNTUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6ZnVuY3Rpb24oKXtyZXR1cm5cIiNcIit3KHRoaXMucikrdyh0aGlzLmcpK3codGhpcy5iKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpP1wicmdiKFwiOlwicmdiYShcIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrXCIsIFwiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpK1wiLCBcIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoMT09PXQ/XCIpXCI6XCIsIFwiK3QrXCIpXCIpfX0pKSxlKFQsQSxyKG4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBUKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IFQodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGU9aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSplLGk9MipyLW47cmV0dXJuIG5ldyBfKE0odD49MjQwP3QtMjQwOnQrMTIwLGksbiksTSh0LGksbiksTSh0PDEyMD90KzI0MDp0LTEyMCxpLG4pLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfX0pKTt2YXIgUz1NYXRoLlBJLzE4MCxFPTE4MC9NYXRoLlBJLEM9Ljk2NDIyLEw9MSx6PS44MjUyMSxPPTQvMjksST02LzI5LEQ9MypJKkksUD1JKkkqSTtmdW5jdGlvbiBSKHQpe2lmKHQgaW5zdGFuY2VvZiBCKXJldHVybiBuZXcgQih0LmwsdC5hLHQuYix0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBHKXtpZihpc05hTih0LmgpKXJldHVybiBuZXcgQih0LmwsMCwwLHQub3BhY2l0eSk7dmFyIGU9dC5oKlM7cmV0dXJuIG5ldyBCKHQubCxNYXRoLmNvcyhlKSp0LmMsTWF0aC5zaW4oZSkqdC5jLHQub3BhY2l0eSl9dCBpbnN0YW5jZW9mIF98fCh0PXgodCkpO3ZhciByLG4saT1VKHQuciksYT1VKHQuZyksbz1VKHQuYikscz1OKCguMjIyNTA0NSppKy43MTY4Nzg2KmErLjA2MDYxNjkqbykvTCk7cmV0dXJuIGk9PT1hJiZhPT09bz9yPW49czoocj1OKCguNDM2MDc0NyppKy4zODUwNjQ5KmErLjE0MzA4MDQqbykvQyksbj1OKCguMDEzOTMyMippKy4wOTcxMDQ1KmErLjcxNDE3MzMqbykveikpLG5ldyBCKDExNipzLTE2LDUwMCooci1zKSwyMDAqKHMtbiksdC5vcGFjaXR5KX1mdW5jdGlvbiBGKHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9SKHQpOm5ldyBCKHQsZSxyLG51bGw9PW4/MTpuKX1mdW5jdGlvbiBCKHQsZSxyLG4pe3RoaXMubD0rdCx0aGlzLmE9K2UsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBOKHQpe3JldHVybiB0PlA/TWF0aC5wb3codCwxLzMpOnQvRCtPfWZ1bmN0aW9uIGoodCl7cmV0dXJuIHQ+ST90KnQqdDpEKih0LU8pfWZ1bmN0aW9uIFYodCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiBVKHQpe3JldHVybih0Lz0yNTUpPD0uMDQwNDU/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIHEodCl7aWYodCBpbnN0YW5jZW9mIEcpcmV0dXJuIG5ldyBHKHQuaCx0LmMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIEJ8fCh0PVIodCkpLDA9PT10LmEmJjA9PT10LmIpcmV0dXJuIG5ldyBHKE5hTiwwLHQubCx0Lm9wYWNpdHkpO3ZhciBlPU1hdGguYXRhbjIodC5iLHQuYSkqRTtyZXR1cm4gbmV3IEcoZTwwP2UrMzYwOmUsTWF0aC5zcXJ0KHQuYSp0LmErdC5iKnQuYiksdC5sLHQub3BhY2l0eSl9ZnVuY3Rpb24gSCh0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/cSh0KTpuZXcgRyh0LGUscixudWxsPT1uPzE6bil9ZnVuY3Rpb24gRyh0LGUscixuKXt0aGlzLmg9K3QsdGhpcy5jPStlLHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZShCLEYscihuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEIodGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBCKHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9KHRoaXMubCsxNikvMTE2LGU9aXNOYU4odGhpcy5hKT90OnQrdGhpcy5hLzUwMCxyPWlzTmFOKHRoaXMuYik/dDp0LXRoaXMuYi8yMDA7cmV0dXJuIG5ldyBfKFYoMy4xMzM4NTYxKihlPUMqaihlKSktMS42MTY4NjY3Kih0PUwqaih0KSktLjQ5MDYxNDYqKHI9eipqKHIpKSksVigtLjk3ODc2ODQqZSsxLjkxNjE0MTUqdCsuMDMzNDU0KnIpLFYoLjA3MTk0NTMqZS0uMjI4OTkxNCp0KzEuNDA1MjQyNypyKSx0aGlzLm9wYWNpdHkpfX0pKSxlKEcsSCxyKG4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRyh0aGlzLmgsdGhpcy5jLHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEcodGhpcy5oLHRoaXMuYyx0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gUih0aGlzKS5yZ2IoKX19KSk7dmFyIFk9LS4xNDg2MSxXPTEuNzgyNzcsWD0tLjI5MjI3LFo9LS45MDY0OSwkPTEuOTcyOTQsSj0kKlosSz0kKlcsUT1XKlgtWipZO2Z1bmN0aW9uIHR0KHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgZXQpcmV0dXJuIG5ldyBldCh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO3QgaW5zdGFuY2VvZiBffHwodD14KHQpKTt2YXIgZT10LnIvMjU1LHI9dC5nLzI1NSxuPXQuYi8yNTUsaT0oUSpuK0oqZS1LKnIpLyhRK0otSyksYT1uLWksbz0oJCooci1pKS1YKmEpL1oscz1NYXRoLnNxcnQobypvK2EqYSkvKCQqaSooMS1pKSksbD1zP01hdGguYXRhbjIobyxhKSpFLTEyMDpOYU47cmV0dXJuIG5ldyBldChsPDA/bCszNjA6bCxzLGksdC5vcGFjaXR5KX0odCk6bmV3IGV0KHQsZSxyLG51bGw9PW4/MTpuKX1mdW5jdGlvbiBldCh0LGUscixuKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZShldCx0dCxyKG4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBldCh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBldCh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqUyxlPSt0aGlzLmwscj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKmUqKDEtZSksbj1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiBuZXcgXygyNTUqKGUrciooWSpuK1cqaSkpLDI1NSooZStyKihYKm4rWippKSksMjU1KihlK3IqKCQqbikpLHRoaXMub3BhY2l0eSl9fSkpLHQuY29sb3I9dix0LnJnYj1iLHQuaHNsPUEsdC5sYWI9Rix0LmhjbD1ILHQubGNoPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9xKHQpOm5ldyBHKHIsZSx0LG51bGw9PW4/MTpuKX0sdC5ncmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBCKHQsMCwwLG51bGw9PWU/MTplKX0sdC5jdWJlaGVsaXg9dHQsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9KFwib2JqZWN0XCI9PXR5cGVvZiByJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZT9yOm4uZDM9bi5kM3x8e30pfSx7fV0sMTQ2OltmdW5jdGlvbih0LGUscil7dmFyIG47bj10aGlzLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO3ZhciBlPXt2YWx1ZTpmdW5jdGlvbigpe319O2Z1bmN0aW9uIHIoKXtmb3IodmFyIHQsZT0wLHI9YXJndW1lbnRzLmxlbmd0aCxpPXt9O2U8cjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rXCJcIil8fHQgaW4gaSl0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIHR5cGU6IFwiK3QpO2lbdF09W119cmV0dXJuIG5ldyBuKGkpfWZ1bmN0aW9uIG4odCl7dGhpcy5fPXR9ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgcixuPTAsaT10Lmxlbmd0aDtuPGk7KytuKWlmKChyPXRbbl0pLm5hbWU9PT1lKXJldHVybiByLnZhbHVlfWZ1bmN0aW9uIGEodCxyLG4pe2Zvcih2YXIgaT0wLGE9dC5sZW5ndGg7aTxhOysraSlpZih0W2ldLm5hbWU9PT1yKXt0W2ldPWUsdD10LnNsaWNlKDAsaSkuY29uY2F0KHQuc2xpY2UoaSsxKSk7YnJlYWt9cmV0dXJuIG51bGwhPW4mJnQucHVzaCh7bmFtZTpyLHZhbHVlOm59KSx0fW4ucHJvdG90eXBlPXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpuLG9uOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbixvPXRoaXMuXyxzPShuPW8sKHQrXCJcIikudHJpbSgpLnNwbGl0KC9efFxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIGU9XCJcIixyPXQuaW5kZXhPZihcIi5cIik7aWYocj49MCYmKGU9dC5zbGljZShyKzEpLHQ9dC5zbGljZSgwLHIpKSx0JiYhbi5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiK3QpO3JldHVybnt0eXBlOnQsbmFtZTplfX0pKSxsPS0xLGM9cy5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgY2FsbGJhY2s6IFwiK2UpO2Zvcig7KytsPGM7KWlmKHI9KHQ9c1tsXSkudHlwZSlvW3JdPWEob1tyXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihyIGluIG8pb1tyXT1hKG9bcl0sdC5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KytsPGM7KWlmKChyPSh0PXNbbF0pLnR5cGUpJiYocj1pKG9bcl0sdC5uYW1lKSkpcmV0dXJuIHJ9LGNvcHk6ZnVuY3Rpb24oKXt2YXIgdD17fSxlPXRoaXMuXztmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl0uc2xpY2UoKTtyZXR1cm4gbmV3IG4odCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigocj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByLG4saT1uZXcgQXJyYXkociksYT0wO2E8cjsrK2EpaVthXT1hcmd1bWVudHNbYSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIrdCk7Zm9yKGE9MCxyPShuPXRoaXMuX1t0XSkubGVuZ3RoO2E8cjsrK2EpblthXS52YWx1ZS5hcHBseShlLGkpfSxhcHBseTpmdW5jdGlvbih0LGUscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiK3QpO2Zvcih2YXIgbj10aGlzLl9bdF0saT0wLGE9bi5sZW5ndGg7aTxhOysraSluW2ldLnZhbHVlLmFwcGx5KGUscil9fSx0LmRpc3BhdGNoPXIsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9KFwib2JqZWN0XCI9PXR5cGVvZiByJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZT9yOm4uZDM9bi5kM3x8e30pfSx7fV0sMTQ3OltmdW5jdGlvbih0LGUscil7dmFyIG4saTtuPXRoaXMsaT1mdW5jdGlvbih0LGUscixuLGkpe1widXNlIHN0cmljdFwiO3ZhciBhPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sbz1mdW5jdGlvbigpe3JldHVybiAxZS02KihNYXRoLnJhbmRvbSgpLS41KX07ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdC54K3Qudnh9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdC55K3Qudnl9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9dC5nZXQoZSk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKFwibWlzc2luZzogXCIrZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQueX12YXIgcD0xMCxkPU1hdGguUEkqKDMtTWF0aC5zcXJ0KDUpKTt0LmZvcmNlQ2VudGVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI7ZnVuY3Rpb24gbigpe3ZhciBuLGksYT1yLmxlbmd0aCxvPTAscz0wO2ZvcihuPTA7bjxhOysrbilvKz0oaT1yW25dKS54LHMrPWkueTtmb3Iobz1vL2EtdCxzPXMvYS1lLG49MDtuPGE7KytuKShpPXJbbl0pLngtPW8saS55LT1zfXJldHVybiBudWxsPT10JiYodD0wKSxudWxsPT1lJiYoZT0wKSxuLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7cj10fSxuLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2Usbik6dH0sbi55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LG4pOmV9LG59LHQuZm9yY2VDb2xsaWRlPWZ1bmN0aW9uKHQpe3ZhciByLG4saT0xLGM9MTtmdW5jdGlvbiB1KCl7Zm9yKHZhciB0LGEsdSxmLHAsZCxnLHY9ci5sZW5ndGgsbT0wO208YzsrK20pZm9yKGE9ZS5xdWFkdHJlZShyLHMsbCkudmlzaXRBZnRlcihoKSx0PTA7dDx2OysrdCl1PXJbdF0sZD1uW3UuaW5kZXhdLGc9ZCpkLGY9dS54K3UudngscD11LnkrdS52eSxhLnZpc2l0KHkpO2Z1bmN0aW9uIHkodCxlLHIsbixhKXt2YXIgcz10LmRhdGEsbD10LnIsYz1kK2w7aWYoIXMpcmV0dXJuIGU+ZitjfHxuPGYtY3x8cj5wK2N8fGE8cC1jO2lmKHMuaW5kZXg+dS5pbmRleCl7dmFyIGg9Zi1zLngtcy52eCx2PXAtcy55LXMudnksbT1oKmgrdip2O208YypjJiYoMD09PWgmJihtKz0oaD1vKCkpKmgpLDA9PT12JiYobSs9KHY9bygpKSp2KSxtPShjLShtPU1hdGguc3FydChtKSkpL20qaSx1LnZ4Kz0oaCo9bSkqKGM9KGwqPWwpLyhnK2wpKSx1LnZ5Kz0odio9bSkqYyxzLnZ4LT1oKihjPTEtYykscy52eS09dipjKX19fWZ1bmN0aW9uIGgodCl7aWYodC5kYXRhKXJldHVybiB0LnI9blt0LmRhdGEuaW5kZXhdO2Zvcih2YXIgZT10LnI9MDtlPDQ7KytlKXRbZV0mJnRbZV0ucj50LnImJih0LnI9dFtlXS5yKX1mdW5jdGlvbiBmKCl7aWYocil7dmFyIGUsaSxhPXIubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShhKSxlPTA7ZTxhOysrZSlpPXJbZV0sbltpLmluZGV4XT0rdChpLGUscil9fXJldHVyblwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJih0PWEobnVsbD09dD8xOit0KSksdS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe3I9dCxmKCl9LHUuaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdCx1KTpjfSx1LnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LHUpOml9LHUucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTphKCtlKSxmKCksdSk6dH0sdX0sdC5mb3JjZUxpbms9ZnVuY3Rpb24odCl7dmFyIGUsbixpLHMsbCxoPWMsZj1mdW5jdGlvbih0KXtyZXR1cm4gMS9NYXRoLm1pbihzW3Quc291cmNlLmluZGV4XSxzW3QudGFyZ2V0LmluZGV4XSl9LHA9YSgzMCksZD0xO2Z1bmN0aW9uIGcocil7Zm9yKHZhciBpPTAsYT10Lmxlbmd0aDtpPGQ7KytpKWZvcih2YXIgcyxjLHUsaCxmLHAsZyx2PTA7djxhOysrdiljPShzPXRbdl0pLnNvdXJjZSxoPSh1PXMudGFyZ2V0KS54K3UudngtYy54LWMudnh8fG8oKSxmPXUueSt1LnZ5LWMueS1jLnZ5fHxvKCksaCo9cD0oKHA9TWF0aC5zcXJ0KGgqaCtmKmYpKS1uW3ZdKS9wKnIqZVt2XSxmKj1wLHUudngtPWgqKGc9bFt2XSksdS52eS09ZipnLGMudngrPWgqKGc9MS1nKSxjLnZ5Kz1mKmd9ZnVuY3Rpb24gdigpe2lmKGkpe3ZhciBhLG8sYz1pLmxlbmd0aCxmPXQubGVuZ3RoLHA9ci5tYXAoaSxoKTtmb3IoYT0wLHM9bmV3IEFycmF5KGMpO2E8ZjsrK2EpKG89dFthXSkuaW5kZXg9YSxcIm9iamVjdFwiIT10eXBlb2Ygby5zb3VyY2UmJihvLnNvdXJjZT11KHAsby5zb3VyY2UpKSxcIm9iamVjdFwiIT10eXBlb2Ygby50YXJnZXQmJihvLnRhcmdldD11KHAsby50YXJnZXQpKSxzW28uc291cmNlLmluZGV4XT0oc1tvLnNvdXJjZS5pbmRleF18fDApKzEsc1tvLnRhcmdldC5pbmRleF09KHNbby50YXJnZXQuaW5kZXhdfHwwKSsxO2ZvcihhPTAsbD1uZXcgQXJyYXkoZik7YTxmOysrYSlvPXRbYV0sbFthXT1zW28uc291cmNlLmluZGV4XS8oc1tvLnNvdXJjZS5pbmRleF0rc1tvLnRhcmdldC5pbmRleF0pO2U9bmV3IEFycmF5KGYpLG0oKSxuPW5ldyBBcnJheShmKSx5KCl9fWZ1bmN0aW9uIG0oKXtpZihpKWZvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuOysrcillW3JdPStmKHRbcl0scix0KX1mdW5jdGlvbiB5KCl7aWYoaSlmb3IodmFyIGU9MCxyPXQubGVuZ3RoO2U8cjsrK2UpbltlXT0rcCh0W2VdLGUsdCl9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxnLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7aT10LHYoKX0sZy5saW5rcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLHYoKSxnKTp0fSxnLmlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXQsZyk6aH0sZy5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSt0LGcpOmR9LGcuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OmEoK3QpLG0oKSxnKTpmfSxnLmRpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDphKCt0KSx5KCksZyk6cH0sZ30sdC5mb3JjZU1hbnlCb2R5PWZ1bmN0aW9uKCl7dmFyIHQscixuLGkscz1hKC0zMCksbD0xLGM9MS8wLHU9LjgxO2Z1bmN0aW9uIHAoaSl7dmFyIGEsbz10Lmxlbmd0aCxzPWUucXVhZHRyZWUodCxoLGYpLnZpc2l0QWZ0ZXIoZyk7Zm9yKG49aSxhPTA7YTxvOysrYSlyPXRbYV0scy52aXNpdCh2KX1mdW5jdGlvbiBkKCl7aWYodCl7dmFyIGUscixuPXQubGVuZ3RoO2ZvcihpPW5ldyBBcnJheShuKSxlPTA7ZTxuOysrZSlyPXRbZV0saVtyLmluZGV4XT0rcyhyLGUsdCl9fWZ1bmN0aW9uIGcodCl7dmFyIGUscixuLGEsbyxzPTAsbD0wO2lmKHQubGVuZ3RoKXtmb3Iobj1hPW89MDtvPDQ7KytvKShlPXRbb10pJiYocj1NYXRoLmFicyhlLnZhbHVlKSkmJihzKz1lLnZhbHVlLGwrPXIsbis9ciplLngsYSs9ciplLnkpO3QueD1uL2wsdC55PWEvbH1lbHNleyhlPXQpLng9ZS5kYXRhLngsZS55PWUuZGF0YS55O2Rve3MrPWlbZS5kYXRhLmluZGV4XX13aGlsZShlPWUubmV4dCl9dC52YWx1ZT1zfWZ1bmN0aW9uIHYodCxlLGEscyl7aWYoIXQudmFsdWUpcmV0dXJuITA7dmFyIGg9dC54LXIueCxmPXQueS1yLnkscD1zLWUsZD1oKmgrZipmO2lmKHAqcC91PGQpcmV0dXJuIGQ8YyYmKDA9PT1oJiYoZCs9KGg9bygpKSpoKSwwPT09ZiYmKGQrPShmPW8oKSkqZiksZDxsJiYoZD1NYXRoLnNxcnQobCpkKSksci52eCs9aCp0LnZhbHVlKm4vZCxyLnZ5Kz1mKnQudmFsdWUqbi9kKSwhMDtpZighKHQubGVuZ3RofHxkPj1jKSl7KHQuZGF0YSE9PXJ8fHQubmV4dCkmJigwPT09aCYmKGQrPShoPW8oKSkqaCksMD09PWYmJihkKz0oZj1vKCkpKmYpLGQ8bCYmKGQ9TWF0aC5zcXJ0KGwqZCkpKTtkb3t0LmRhdGEhPT1yJiYocD1pW3QuZGF0YS5pbmRleF0qbi9kLHIudngrPWgqcCxyLnZ5Kz1mKnApfXdoaWxlKHQ9dC5uZXh0KX19cmV0dXJuIHAuaW5pdGlhbGl6ZT1mdW5jdGlvbihlKXt0PWUsZCgpfSxwLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDphKCt0KSxkKCkscCk6c30scC5kaXN0YW5jZU1pbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10KnQscCk6TWF0aC5zcXJ0KGwpfSxwLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQqdCxwKTpNYXRoLnNxcnQoYyl9LHAudGhldGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCp0LHApOk1hdGguc3FydCh1KX0scH0sdC5mb3JjZVJhZGlhbD1mdW5jdGlvbih0LGUscil7dmFyIG4saSxvLHM9YSguMSk7ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2Epe3ZhciBsPW5bYV0sYz1sLngtZXx8MWUtNix1PWwueS1yfHwxZS02LGg9TWF0aC5zcXJ0KGMqYyt1KnUpLGY9KG9bYV0taCkqaVthXSp0L2g7bC52eCs9YypmLGwudnkrPXUqZn19ZnVuY3Rpb24gYygpe2lmKG4pe3ZhciBlLHI9bi5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLGU9MDtlPHI7KytlKW9bZV09K3QobltlXSxlLG4pLGlbZV09aXNOYU4ob1tlXSk/MDorcyhuW2VdLGUsbil9fXJldHVyblwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJih0PWEoK3QpKSxudWxsPT1lJiYoZT0wKSxudWxsPT1yJiYocj0wKSxsLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7bj10LGMoKX0sbC5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6YSgrdCksYygpLGwpOnN9LGwucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTphKCtlKSxjKCksbCk6dH0sbC54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LGwpOmV9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxsKTpyfSxsfSx0LmZvcmNlU2ltdWxhdGlvbj1mdW5jdGlvbih0KXt2YXIgZSxhPTEsbz0uMDAxLHM9MS1NYXRoLnBvdyhvLDEvMzAwKSxsPTAsYz0uNix1PXIubWFwKCksaD1pLnRpbWVyKGcpLGY9bi5kaXNwYXRjaChcInRpY2tcIixcImVuZFwiKTtmdW5jdGlvbiBnKCl7digpLGYuY2FsbChcInRpY2tcIixlKSxhPG8mJihoLnN0b3AoKSxmLmNhbGwoXCJlbmRcIixlKSl9ZnVuY3Rpb24gdigpe3ZhciBlLHIsbj10Lmxlbmd0aDtmb3IoYSs9KGwtYSkqcyx1LmVhY2goZnVuY3Rpb24odCl7dChhKX0pLGU9MDtlPG47KytlKW51bGw9PShyPXRbZV0pLmZ4P3IueCs9ci52eCo9Yzooci54PXIuZngsci52eD0wKSxudWxsPT1yLmZ5P3IueSs9ci52eSo9Yzooci55PXIuZnksci52eT0wKX1mdW5jdGlvbiBtKCl7Zm9yKHZhciBlLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3Ipe2lmKChlPXRbcl0pLmluZGV4PXIsaXNOYU4oZS54KXx8aXNOYU4oZS55KSl7dmFyIGk9cCpNYXRoLnNxcnQociksYT1yKmQ7ZS54PWkqTWF0aC5jb3MoYSksZS55PWkqTWF0aC5zaW4oYSl9KGlzTmFOKGUudngpfHxpc05hTihlLnZ5KSkmJihlLnZ4PWUudnk9MCl9fWZ1bmN0aW9uIHkoZSl7cmV0dXJuIGUuaW5pdGlhbGl6ZSYmZS5pbml0aWFsaXplKHQpLGV9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxtKCksZT17dGljazp2LHJlc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gaC5yZXN0YXJ0KGcpLGV9LHN0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gaC5zdG9wKCksZX0sbm9kZXM6ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9cixtKCksdS5lYWNoKHkpLGUpOnR9LGFscGhhOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LGUpOmF9LGFscGhhTWluOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LGUpOm99LGFscGhhRGVjYXk6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsZSk6K3N9LGFscGhhVGFyZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSt0LGUpOmx9LHZlbG9jaXR5RGVjYXk6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9MS10LGUpOjEtY30sZm9yY2U6ZnVuY3Rpb24odCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhudWxsPT1yP3UucmVtb3ZlKHQpOnUuc2V0KHQseShyKSksZSk6dS5nZXQodCl9LGZpbmQ6ZnVuY3Rpb24oZSxyLG4pe3ZhciBpLGEsbyxzLGwsYz0wLHU9dC5sZW5ndGg7Zm9yKG51bGw9PW4/bj0xLzA6bio9bixjPTA7Yzx1OysrYykobz0oaT1lLShzPXRbY10pLngpKmkrKGE9ci1zLnkpKmEpPG4mJihsPXMsbj1vKTtyZXR1cm4gbH0sb246ZnVuY3Rpb24odCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhmLm9uKHQsciksZSk6Zi5vbih0KX19fSx0LmZvcmNlWD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT1hKC4xKTtmdW5jdGlvbiBvKHQpe2Zvcih2YXIgaSxhPTAsbz1lLmxlbmd0aDthPG87KythKShpPWVbYV0pLnZ4Kz0oblthXS1pLngpKnJbYV0qdH1mdW5jdGlvbiBzKCl7aWYoZSl7dmFyIGEsbz1lLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobyksbj1uZXcgQXJyYXkobyksYT0wO2E8bzsrK2EpclthXT1pc05hTihuW2FdPSt0KGVbYV0sYSxlKSk/MDoraShlW2FdLGEsZSl9fXJldHVyblwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJih0PWEobnVsbD09dD8wOit0KSksby5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2U9dCxzKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OmEoK3QpLHMoKSxvKTppfSxvLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOmEoK2UpLHMoKSxvKTp0fSxvfSx0LmZvcmNlWT1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT1hKC4xKTtmdW5jdGlvbiBvKHQpe2Zvcih2YXIgaSxhPTAsbz1lLmxlbmd0aDthPG87KythKShpPWVbYV0pLnZ5Kz0oblthXS1pLnkpKnJbYV0qdH1mdW5jdGlvbiBzKCl7aWYoZSl7dmFyIGEsbz1lLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobyksbj1uZXcgQXJyYXkobyksYT0wO2E8bzsrK2EpclthXT1pc05hTihuW2FdPSt0KGVbYV0sYSxlKSk/MDoraShlW2FdLGEsZSl9fXJldHVyblwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJih0PWEobnVsbD09dD8wOit0KSksby5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2U9dCxzKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OmEoK3QpLHMoKSxvKTppfSxvLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOmEoK2UpLHMoKSxvKTp0fSxvfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sXCJvYmplY3RcIj09dHlwZW9mIHImJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBlP2kocix0KFwiZDMtcXVhZHRyZWVcIiksdChcImQzLWNvbGxlY3Rpb25cIiksdChcImQzLWRpc3BhdGNoXCIpLHQoXCJkMy10aW1lclwiKSk6aShuLmQzPW4uZDN8fHt9LG4uZDMsbi5kMyxuLmQzLG4uZDMpfSx7XCJkMy1jb2xsZWN0aW9uXCI6MTQ0LFwiZDMtZGlzcGF0Y2hcIjoxNDYsXCJkMy1xdWFkdHJlZVwiOjE1MSxcImQzLXRpbWVyXCI6MTU0fV0sMTQ4OltmdW5jdGlvbih0LGUscil7dmFyIG47bj10aGlzLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUodCxlKXtyZXR1cm4gdC5wYXJlbnQ9PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gcih0LGUpe3JldHVybiB0K2UueH1mdW5jdGlvbiBuKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsZS55KX1mdW5jdGlvbiBpKHQpe3ZhciBlPTAscj10LmNoaWxkcmVuLG49ciYmci5sZW5ndGg7aWYobilmb3IoOy0tbj49MDspZSs9cltuXS52YWx1ZTtlbHNlIGU9MTt0LnZhbHVlPWV9ZnVuY3Rpb24gYSh0LGUpe3ZhciByLG4saSxhLHMsdT1uZXcgYyh0KSxoPSt0LnZhbHVlJiYodS52YWx1ZT10LnZhbHVlKSxmPVt1XTtmb3IobnVsbD09ZSYmKGU9byk7cj1mLnBvcCgpOylpZihoJiYoci52YWx1ZT0rci5kYXRhLnZhbHVlKSwoaT1lKHIuZGF0YSkpJiYocz1pLmxlbmd0aCkpZm9yKHIuY2hpbGRyZW49bmV3IEFycmF5KHMpLGE9cy0xO2E+PTA7LS1hKWYucHVzaChuPXIuY2hpbGRyZW5bYV09bmV3IGMoaVthXSkpLG4ucGFyZW50PXIsbi5kZXB0aD1yLmRlcHRoKzE7cmV0dXJuIHUuZWFjaEJlZm9yZShsKX1mdW5jdGlvbiBvKHQpe3JldHVybiB0LmNoaWxkcmVufWZ1bmN0aW9uIHModCl7dC5kYXRhPXQuZGF0YS5kYXRhfWZ1bmN0aW9uIGwodCl7dmFyIGU9MDtkb3t0LmhlaWdodD1lfXdoaWxlKCh0PXQucGFyZW50KSYmdC5oZWlnaHQ8KytlKX1mdW5jdGlvbiBjKHQpe3RoaXMuZGF0YT10LHRoaXMuZGVwdGg9dGhpcy5oZWlnaHQ9MCx0aGlzLnBhcmVudD1udWxsfWMucHJvdG90eXBlPWEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjLGNvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKGkpfSxlYWNoOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9dGhpcyxvPVthXTtkb3tmb3IoZT1vLnJldmVyc2UoKSxvPVtdO2E9ZS5wb3AoKTspaWYodChhKSxyPWEuY2hpbGRyZW4pZm9yKG49MCxpPXIubGVuZ3RoO248aTsrK24pby5wdXNoKHJbbl0pfXdoaWxlKG8ubGVuZ3RoKTtyZXR1cm4gdGhpc30sZWFjaEFmdGVyOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saT10aGlzLGE9W2ldLG89W107aT1hLnBvcCgpOylpZihvLnB1c2goaSksZT1pLmNoaWxkcmVuKWZvcihyPTAsbj1lLmxlbmd0aDtyPG47KytyKWEucHVzaChlW3JdKTtmb3IoO2k9by5wb3AoKTspdChpKTtyZXR1cm4gdGhpc30sZWFjaEJlZm9yZTpmdW5jdGlvbih0KXtmb3IodmFyIGUscixuPXRoaXMsaT1bbl07bj1pLnBvcCgpOylpZih0KG4pLGU9bi5jaGlsZHJlbilmb3Iocj1lLmxlbmd0aC0xO3I+PTA7LS1yKWkucHVzaChlW3JdKTtyZXR1cm4gdGhpc30sc3VtOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hBZnRlcihmdW5jdGlvbihlKXtmb3IodmFyIHI9K3QoZS5kYXRhKXx8MCxuPWUuY2hpbGRyZW4saT1uJiZuLmxlbmd0aDstLWk+PTA7KXIrPW5baV0udmFsdWU7ZS52YWx1ZT1yfSl9LHNvcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaEJlZm9yZShmdW5jdGlvbihlKXtlLmNoaWxkcmVuJiZlLmNoaWxkcmVuLnNvcnQodCl9KX0scGF0aDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxyPWZ1bmN0aW9uKHQsZSl7aWYodD09PWUpcmV0dXJuIHQ7dmFyIHI9dC5hbmNlc3RvcnMoKSxuPWUuYW5jZXN0b3JzKCksaT1udWxsO2Zvcih0PXIucG9wKCksZT1uLnBvcCgpO3Q9PT1lOylpPXQsdD1yLnBvcCgpLGU9bi5wb3AoKTtyZXR1cm4gaX0oZSx0KSxuPVtlXTtlIT09cjspZT1lLnBhcmVudCxuLnB1c2goZSk7Zm9yKHZhciBpPW4ubGVuZ3RoO3QhPT1yOyluLnNwbGljZShpLDAsdCksdD10LnBhcmVudDtyZXR1cm4gbn0sYW5jZXN0b3JzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1bdF07dD10LnBhcmVudDspZS5wdXNoKHQpO3JldHVybiBlfSxkZXNjZW5kYW50czpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZSl7dC5wdXNoKGUpfSksdH0sbGVhdmVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaEJlZm9yZShmdW5jdGlvbihlKXtlLmNoaWxkcmVufHx0LnB1c2goZSl9KSx0fSxsaW5rczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1bXTtyZXR1cm4gdC5lYWNoKGZ1bmN0aW9uKHIpe3IhPT10JiZlLnB1c2goe3NvdXJjZTpyLnBhcmVudCx0YXJnZXQ6cn0pfSksZX0sY29weTpmdW5jdGlvbigpe3JldHVybiBhKHRoaXMpLmVhY2hCZWZvcmUocyl9fTt2YXIgdT1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gaCh0KXtmb3IodmFyIGUscixuPTAsaT0odD1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuPXQubGVuZ3RoO247KXI9TWF0aC5yYW5kb20oKSpuLS18MCxlPXRbbl0sdFtuXT10W3JdLHRbcl09ZTtyZXR1cm4gdH0odS5jYWxsKHQpKSkubGVuZ3RoLGE9W107bjxpOyllPXRbbl0sciYmZChyLGUpPysrbjoocj12KGE9ZihhLGUpKSxuPTApO3JldHVybiByfWZ1bmN0aW9uIGYodCxlKXt2YXIgcixuO2lmKGcoZSx0KSlyZXR1cm5bZV07Zm9yKHI9MDtyPHQubGVuZ3RoOysrcilpZihwKGUsdFtyXSkmJmcobSh0W3JdLGUpLHQpKXJldHVyblt0W3JdLGVdO2ZvcihyPTA7cjx0Lmxlbmd0aC0xOysrcilmb3Iobj1yKzE7bjx0Lmxlbmd0aDsrK24paWYocChtKHRbcl0sdFtuXSksZSkmJnAobSh0W3JdLGUpLHRbbl0pJiZwKG0odFtuXSxlKSx0W3JdKSYmZyh5KHRbcl0sdFtuXSxlKSx0KSlyZXR1cm5bdFtyXSx0W25dLGVdO3Rocm93IG5ldyBFcnJvcn1mdW5jdGlvbiBwKHQsZSl7dmFyIHI9dC5yLWUucixuPWUueC10LngsaT1lLnktdC55O3JldHVybiByPDB8fHIqcjxuKm4raSppfWZ1bmN0aW9uIGQodCxlKXt2YXIgcj10LnItZS5yKzFlLTYsbj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gcj4wJiZyKnI+bipuK2kqaX1mdW5jdGlvbiBnKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpaWYoIWQodCxlW3JdKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiB2KHQpe3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOnJldHVybnt4OihlPXRbMF0pLngseTplLnkscjplLnJ9O2Nhc2UgMjpyZXR1cm4gbSh0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4geSh0WzBdLHRbMV0sdFsyXSl9dmFyIGV9ZnVuY3Rpb24gbSh0LGUpe3ZhciByPXQueCxuPXQueSxpPXQucixhPWUueCxvPWUueSxzPWUucixsPWEtcixjPW8tbix1PXMtaSxoPU1hdGguc3FydChsKmwrYypjKTtyZXR1cm57eDoocithK2wvaCp1KS8yLHk6KG4rbytjL2gqdSkvMixyOihoK2krcykvMn19ZnVuY3Rpb24geSh0LGUscil7dmFyIG49dC54LGk9dC55LGE9dC5yLG89ZS54LHM9ZS55LGw9ZS5yLGM9ci54LHU9ci55LGg9ci5yLGY9bi1vLHA9bi1jLGQ9aS1zLGc9aS11LHY9bC1hLG09aC1hLHk9bipuK2kqaS1hKmEseD15LW8qby1zKnMrbCpsLGI9eS1jKmMtdSp1K2gqaCxfPXAqZC1mKmcsdz0oZCpiLWcqeCkvKDIqXyktbixrPShnKnYtZCptKS9fLEE9KHAqeC1mKmIpLygyKl8pLWksVD0oZiptLXAqdikvXyxNPWsqaytUKlQtMSxTPTIqKGErdyprK0EqVCksRT13KncrQSpBLWEqYSxDPS0oTT8oUytNYXRoLnNxcnQoUypTLTQqTSpFKSkvKDIqTSk6RS9TKTtyZXR1cm57eDpuK3craypDLHk6aStBK1QqQyxyOkN9fWZ1bmN0aW9uIHgodCxlLHIpe3ZhciBuLGksYSxvLHM9dC54LWUueCxsPXQueS1lLnksYz1zKnMrbCpsO2M/KGk9ZS5yK3IucixpKj1pLG89dC5yK3IucixpPihvKj1vKT8obj0oYytvLWkpLygyKmMpLGE9TWF0aC5zcXJ0KE1hdGgubWF4KDAsby9jLW4qbikpLHIueD10LngtbipzLWEqbCxyLnk9dC55LW4qbCthKnMpOihuPShjK2ktbykvKDIqYyksYT1NYXRoLnNxcnQoTWF0aC5tYXgoMCxpL2MtbipuKSksci54PWUueCtuKnMtYSpsLHIueT1lLnkrbipsK2EqcykpOihyLng9ZS54K3IucixyLnk9ZS55KX1mdW5jdGlvbiBiKHQsZSl7dmFyIHI9dC5yK2Uuci0xZS02LG49ZS54LXQueCxpPWUueS10Lnk7cmV0dXJuIHI+MCYmcipyPm4qbitpKml9ZnVuY3Rpb24gXyh0KXt2YXIgZT10Ll8scj10Lm5leHQuXyxuPWUucityLnIsaT0oZS54KnIucityLngqZS5yKS9uLGE9KGUueSpyLnIrci55KmUucikvbjtyZXR1cm4gaSppK2EqYX1mdW5jdGlvbiB3KHQpe3RoaXMuXz10LHRoaXMubmV4dD1udWxsLHRoaXMucHJldmlvdXM9bnVsbH1mdW5jdGlvbiBrKHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuIDA7dmFyIGUscixuLGksYSxvLHMsbCxjLHUsZjtpZigoZT10WzBdKS54PTAsZS55PTAsIShpPjEpKXJldHVybiBlLnI7aWYocj10WzFdLGUueD0tci5yLHIueD1lLnIsci55PTAsIShpPjIpKXJldHVybiBlLnIrci5yO3gocixlLG49dFsyXSksZT1uZXcgdyhlKSxyPW5ldyB3KHIpLG49bmV3IHcobiksZS5uZXh0PW4ucHJldmlvdXM9cixyLm5leHQ9ZS5wcmV2aW91cz1uLG4ubmV4dD1yLnByZXZpb3VzPWU7dDpmb3Iocz0zO3M8aTsrK3Mpe3goZS5fLHIuXyxuPXRbc10pLG49bmV3IHcobiksbD1yLm5leHQsYz1lLnByZXZpb3VzLHU9ci5fLnIsZj1lLl8ucjtkb3tpZih1PD1mKXtpZihiKGwuXyxuLl8pKXtyPWwsZS5uZXh0PXIsci5wcmV2aW91cz1lLC0tcztjb250aW51ZSB0fXUrPWwuXy5yLGw9bC5uZXh0fWVsc2V7aWYoYihjLl8sbi5fKSl7KGU9YykubmV4dD1yLHIucHJldmlvdXM9ZSwtLXM7Y29udGludWUgdH1mKz1jLl8ucixjPWMucHJldmlvdXN9fXdoaWxlKGwhPT1jLm5leHQpO2ZvcihuLnByZXZpb3VzPWUsbi5uZXh0PXIsZS5uZXh0PXIucHJldmlvdXM9cj1uLGE9XyhlKTsobj1uLm5leHQpIT09cjspKG89XyhuKSk8YSYmKGU9bixhPW8pO3I9ZS5uZXh0fWZvcihlPVtyLl9dLG49cjsobj1uLm5leHQpIT09cjspZS5wdXNoKG4uXyk7Zm9yKG49aChlKSxzPTA7czxpOysrcykoZT10W3NdKS54LT1uLngsZS55LT1uLnk7cmV0dXJuIG4ucn1mdW5jdGlvbiBBKHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0fWZ1bmN0aW9uIFQoKXtyZXR1cm4gMH1mdW5jdGlvbiBNKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBTKHQpe3JldHVybiBNYXRoLnNxcnQodC52YWx1ZSl9ZnVuY3Rpb24gRSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8KGUucj1NYXRoLm1heCgwLCt0KGUpfHwwKSl9fWZ1bmN0aW9uIEModCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7aWYobj1yLmNoaWxkcmVuKXt2YXIgbixpLGEsbz1uLmxlbmd0aCxzPXQocikqZXx8MDtpZihzKWZvcihpPTA7aTxvOysraSluW2ldLnIrPXM7aWYoYT1rKG4pLHMpZm9yKGk9MDtpPG87KytpKW5baV0uci09cztyLnI9YStzfX19ZnVuY3Rpb24gTCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9ZS5wYXJlbnQ7ZS5yKj10LHImJihlLng9ci54K3QqZS54LGUueT1yLnkrdCplLnkpfX1mdW5jdGlvbiB6KHQpe3QueDA9TWF0aC5yb3VuZCh0LngwKSx0LnkwPU1hdGgucm91bmQodC55MCksdC54MT1NYXRoLnJvdW5kKHQueDEpLHQueTE9TWF0aC5yb3VuZCh0LnkxKX1mdW5jdGlvbiBPKHQsZSxyLG4saSl7Zm9yKHZhciBhLG89dC5jaGlsZHJlbixzPS0xLGw9by5sZW5ndGgsYz10LnZhbHVlJiYobi1lKS90LnZhbHVlOysrczxsOykoYT1vW3NdKS55MD1yLGEueTE9aSxhLngwPWUsYS54MT1lKz1hLnZhbHVlKmN9dmFyIEk9XCIkXCIsRD17ZGVwdGg6LTF9LFA9e307ZnVuY3Rpb24gUih0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBGKHQpe3JldHVybiB0LnBhcmVudElkfWZ1bmN0aW9uIEIodCxlKXtyZXR1cm4gdC5wYXJlbnQ9PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gTih0KXt2YXIgZT10LmNoaWxkcmVuO3JldHVybiBlP2VbMF06dC50fWZ1bmN0aW9uIGoodCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZT9lW2UubGVuZ3RoLTFdOnQudH1mdW5jdGlvbiBWKHQsZSxyKXt2YXIgbj1yLyhlLmktdC5pKTtlLmMtPW4sZS5zKz1yLHQuYys9bixlLnorPXIsZS5tKz1yfWZ1bmN0aW9uIFUodCxlLHIpe3JldHVybiB0LmEucGFyZW50PT09ZS5wYXJlbnQ/dC5hOnJ9ZnVuY3Rpb24gcSh0LGUpe3RoaXMuXz10LHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1udWxsLHRoaXMuQT1udWxsLHRoaXMuYT10aGlzLHRoaXMuej0wLHRoaXMubT0wLHRoaXMuYz0wLHRoaXMucz0wLHRoaXMudD1udWxsLHRoaXMuaT1lfWZ1bmN0aW9uIEgodCxlLHIsbixpKXtmb3IodmFyIGEsbz10LmNoaWxkcmVuLHM9LTEsbD1vLmxlbmd0aCxjPXQudmFsdWUmJihpLXIpL3QudmFsdWU7KytzPGw7KShhPW9bc10pLngwPWUsYS54MT1uLGEueTA9cixhLnkxPXIrPWEudmFsdWUqY31xLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMucHJvdG90eXBlKTt2YXIgRz0oMStNYXRoLnNxcnQoNSkpLzI7ZnVuY3Rpb24gWSh0LGUscixuLGksYSl7Zm9yKHZhciBvLHMsbCxjLHUsaCxmLHAsZCxnLHYsbT1bXSx5PWUuY2hpbGRyZW4seD0wLGI9MCxfPXkubGVuZ3RoLHc9ZS52YWx1ZTt4PF87KXtsPWktcixjPWEtbjtkb3t1PXlbYisrXS52YWx1ZX13aGlsZSghdSYmYjxfKTtmb3IoaD1mPXUsdj11KnUqKGc9TWF0aC5tYXgoYy9sLGwvYykvKHcqdCkpLGQ9TWF0aC5tYXgoZi92LHYvaCk7YjxfOysrYil7aWYodSs9cz15W2JdLnZhbHVlLHM8aCYmKGg9cykscz5mJiYoZj1zKSx2PXUqdSpnLChwPU1hdGgubWF4KGYvdix2L2gpKT5kKXt1LT1zO2JyZWFrfWQ9cH1tLnB1c2gobz17dmFsdWU6dSxkaWNlOmw8YyxjaGlsZHJlbjp5LnNsaWNlKHgsYil9KSxvLmRpY2U/TyhvLHIsbixpLHc/bis9Yyp1L3c6YSk6SChvLHIsbix3P3IrPWwqdS93OmksYSksdy09dSx4PWJ9cmV0dXJuIG19dmFyIFc9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQscixuLGksYSl7WShlLHQscixuLGksYSl9cmV0dXJuIHIucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIHQoKGU9K2UpPjE/ZToxKX0scn0oRyk7dmFyIFg9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQscixuLGksYSl7aWYoKG89dC5fc3F1YXJpZnkpJiZvLnJhdGlvPT09ZSlmb3IodmFyIG8scyxsLGMsdSxoPS0xLGY9by5sZW5ndGgscD10LnZhbHVlOysraDxmOyl7Zm9yKGw9KHM9b1toXSkuY2hpbGRyZW4sYz1zLnZhbHVlPTAsdT1sLmxlbmd0aDtjPHU7KytjKXMudmFsdWUrPWxbY10udmFsdWU7cy5kaWNlP08ocyxyLG4saSxuKz0oYS1uKSpzLnZhbHVlL3ApOkgocyxyLG4scis9KGktcikqcy52YWx1ZS9wLGEpLHAtPXMudmFsdWV9ZWxzZSB0Ll9zcXVhcmlmeT1vPVkoZSx0LHIsbixpLGEpLG8ucmF0aW89ZX1yZXR1cm4gci5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gdCgoZT0rZSk+MT9lOjEpfSxyfShHKTt0LmNsdXN0ZXI9ZnVuY3Rpb24oKXt2YXIgdD1lLGk9MSxhPTEsbz0hMTtmdW5jdGlvbiBzKGUpe3ZhciBzLGw9MDtlLmVhY2hBZnRlcihmdW5jdGlvbihlKXt2YXIgaT1lLmNoaWxkcmVuO2k/KGUueD1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UociwwKS90Lmxlbmd0aH0oaSksZS55PWZ1bmN0aW9uKHQpe3JldHVybiAxK3QucmVkdWNlKG4sMCl9KGkpKTooZS54PXM/bCs9dChlLHMpOjAsZS55PTAscz1lKX0pO3ZhciBjPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZTtlPXQuY2hpbGRyZW47KXQ9ZVswXTtyZXR1cm4gdH0oZSksdT1mdW5jdGlvbih0KXtmb3IodmFyIGU7ZT10LmNoaWxkcmVuOyl0PWVbZS5sZW5ndGgtMV07cmV0dXJuIHR9KGUpLGg9Yy54LXQoYyx1KS8yLGY9dS54K3QodSxjKS8yO3JldHVybiBlLmVhY2hBZnRlcihvP2Z1bmN0aW9uKHQpe3QueD0odC54LWUueCkqaSx0Lnk9KGUueS10LnkpKmF9OmZ1bmN0aW9uKHQpe3QueD0odC54LWgpLyhmLWgpKmksdC55PSgxLShlLnk/dC55L2UueToxKSkqYX0pfXJldHVybiBzLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxzKTp0fSxzLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ITEsaT0rdFswXSxhPSt0WzFdLHMpOm8/bnVsbDpbaSxhXX0scy5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0hMCxpPSt0WzBdLGE9K3RbMV0scyk6bz9baSxhXTpudWxsfSxzfSx0LmhpZXJhcmNoeT1hLHQucGFjaz1mdW5jdGlvbigpe3ZhciB0PW51bGwsZT0xLHI9MSxuPVQ7ZnVuY3Rpb24gaShpKXtyZXR1cm4gaS54PWUvMixpLnk9ci8yLHQ/aS5lYWNoQmVmb3JlKEUodCkpLmVhY2hBZnRlcihDKG4sLjUpKS5lYWNoQmVmb3JlKEwoMSkpOmkuZWFjaEJlZm9yZShFKFMpKS5lYWNoQWZ0ZXIoQyhULDEpKS5lYWNoQWZ0ZXIoQyhuLGkuci9NYXRoLm1pbihlLHIpKSkuZWFjaEJlZm9yZShMKE1hdGgubWluKGUscikvKDIqaS5yKSkpLGl9cmV0dXJuIGkucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW51bGw9PShyPWUpP251bGw6QShyKSxpKTp0O3ZhciByfSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3RbMF0scj0rdFsxXSxpKTpbZSxyXX0saS5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpNKCt0KSxpKTpufSxpfSx0LnBhY2tTaWJsaW5ncz1mdW5jdGlvbih0KXtyZXR1cm4gayh0KSx0fSx0LnBhY2tFbmNsb3NlPWgsdC5wYXJ0aXRpb249ZnVuY3Rpb24oKXt2YXIgdD0xLGU9MSxyPTAsbj0hMTtmdW5jdGlvbiBpKGkpe3ZhciBhPWkuaGVpZ2h0KzE7cmV0dXJuIGkueDA9aS55MD1yLGkueDE9dCxpLnkxPWUvYSxpLmVhY2hCZWZvcmUoZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24obil7bi5jaGlsZHJlbiYmTyhuLG4ueDAsdCoobi5kZXB0aCsxKS9lLG4ueDEsdCoobi5kZXB0aCsyKS9lKTt2YXIgaT1uLngwLGE9bi55MCxvPW4ueDEtcixzPW4ueTEtcjtvPGkmJihpPW89KGkrbykvMiksczxhJiYoYT1zPShhK3MpLzIpLG4ueDA9aSxuLnkwPWEsbi54MT1vLG4ueTE9c319KGUsYSkpLG4mJmkuZWFjaEJlZm9yZSh6KSxpfXJldHVybiBpLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhdCxpKTpufSxpLnNpemU9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K3JbMF0sZT0rclsxXSxpKTpbdCxlXX0saS5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0LGkpOnJ9LGl9LHQuc3RyYXRpZnk9ZnVuY3Rpb24oKXt2YXIgdD1SLGU9RjtmdW5jdGlvbiByKHIpe3ZhciBuLGksYSxvLHMsdSxoLGY9ci5sZW5ndGgscD1uZXcgQXJyYXkoZiksZD17fTtmb3IoaT0wO2k8ZjsrK2kpbj1yW2ldLHM9cFtpXT1uZXcgYyhuKSxudWxsIT0odT10KG4saSxyKSkmJih1Kz1cIlwiKSYmKGRbaD1JKyhzLmlkPXUpXT1oIGluIGQ/UDpzKTtmb3IoaT0wO2k8ZjsrK2kpaWYocz1wW2ldLG51bGwhPSh1PWUocltpXSxpLHIpKSYmKHUrPVwiXCIpKXtpZighKG89ZFtJK3VdKSl0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nOiBcIit1KTtpZihvPT09UCl0aHJvdyBuZXcgRXJyb3IoXCJhbWJpZ3VvdXM6IFwiK3UpO28uY2hpbGRyZW4/by5jaGlsZHJlbi5wdXNoKHMpOm8uY2hpbGRyZW49W3NdLHMucGFyZW50PW99ZWxzZXtpZihhKXRocm93IG5ldyBFcnJvcihcIm11bHRpcGxlIHJvb3RzXCIpO2E9c31pZighYSl0aHJvdyBuZXcgRXJyb3IoXCJubyByb290XCIpO2lmKGEucGFyZW50PUQsYS5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QuZGVwdGg9dC5wYXJlbnQuZGVwdGgrMSwtLWZ9KS5lYWNoQmVmb3JlKGwpLGEucGFyZW50PW51bGwsZj4wKXRocm93IG5ldyBFcnJvcihcImN5Y2xlXCIpO3JldHVybiBhfXJldHVybiByLmlkPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PUEoZSkscik6dH0sci5wYXJlbnRJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1BKHQpLHIpOmV9LHJ9LHQudHJlZT1mdW5jdGlvbigpe3ZhciB0PUIsZT0xLHI9MSxuPW51bGw7ZnVuY3Rpb24gaShpKXt2YXIgbD1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksYSxvPW5ldyBxKHQsMCkscz1bb107ZT1zLnBvcCgpOylpZihuPWUuXy5jaGlsZHJlbilmb3IoZS5jaGlsZHJlbj1uZXcgQXJyYXkoYT1uLmxlbmd0aCksaT1hLTE7aT49MDstLWkpcy5wdXNoKHI9ZS5jaGlsZHJlbltpXT1uZXcgcShuW2ldLGkpKSxyLnBhcmVudD1lO3JldHVybihvLnBhcmVudD1uZXcgcShudWxsLDApKS5jaGlsZHJlbj1bb10sb30oaSk7aWYobC5lYWNoQWZ0ZXIoYSksbC5wYXJlbnQubT0tbC56LGwuZWFjaEJlZm9yZShvKSxuKWkuZWFjaEJlZm9yZShzKTtlbHNle3ZhciBjPWksdT1pLGg9aTtpLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC54PGMueCYmKGM9dCksdC54PnUueCYmKHU9dCksdC5kZXB0aD5oLmRlcHRoJiYoaD10KX0pO3ZhciBmPWM9PT11PzE6dChjLHUpLzIscD1mLWMueCxkPWUvKHUueCtmK3ApLGc9ci8oaC5kZXB0aHx8MSk7aS5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QueD0odC54K3ApKmQsdC55PXQuZGVwdGgqZ30pfXJldHVybiBpfWZ1bmN0aW9uIGEoZSl7dmFyIHI9ZS5jaGlsZHJlbixuPWUucGFyZW50LmNoaWxkcmVuLGk9ZS5pP25bZS5pLTFdOm51bGw7aWYocil7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPTAsbj0wLGk9dC5jaGlsZHJlbixhPWkubGVuZ3RoOy0tYT49MDspKGU9aVthXSkueis9cixlLm0rPXIscis9ZS5zKyhuKz1lLmMpfShlKTt2YXIgYT0oclswXS56K3Jbci5sZW5ndGgtMV0ueikvMjtpPyhlLno9aS56K3QoZS5fLGkuXyksZS5tPWUuei1hKTplLno9YX1lbHNlIGkmJihlLno9aS56K3QoZS5fLGkuXykpO2UucGFyZW50LkE9ZnVuY3Rpb24oZSxyLG4pe2lmKHIpe2Zvcih2YXIgaSxhPWUsbz1lLHM9cixsPWEucGFyZW50LmNoaWxkcmVuWzBdLGM9YS5tLHU9by5tLGg9cy5tLGY9bC5tO3M9aihzKSxhPU4oYSkscyYmYTspbD1OKGwpLChvPWoobykpLmE9ZSwoaT1zLnoraC1hLnotYyt0KHMuXyxhLl8pKT4wJiYoVihVKHMsZSxuKSxlLGkpLGMrPWksdSs9aSksaCs9cy5tLGMrPWEubSxmKz1sLm0sdSs9by5tO3MmJiFqKG8pJiYoby50PXMsby5tKz1oLXUpLGEmJiFOKGwpJiYobC50PWEsbC5tKz1jLWYsbj1lKX1yZXR1cm4gbn0oZSxpLGUucGFyZW50LkF8fG5bMF0pfWZ1bmN0aW9uIG8odCl7dC5fLng9dC56K3QucGFyZW50Lm0sdC5tKz10LnBhcmVudC5tfWZ1bmN0aW9uIHModCl7dC54Kj1lLHQueT10LmRlcHRoKnJ9cmV0dXJuIGkuc2VwYXJhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGkpOnR9LGkuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMSxlPSt0WzBdLHI9K3RbMV0saSk6bj9udWxsOltlLHJdfSxpLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEwLGU9K3RbMF0scj0rdFsxXSxpKTpuP1tlLHJdOm51bGx9LGl9LHQudHJlZW1hcD1mdW5jdGlvbigpe3ZhciB0PVcsZT0hMSxyPTEsbj0xLGk9WzBdLGE9VCxvPVQscz1ULGw9VCxjPVQ7ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC54MD10LnkwPTAsdC54MT1yLHQueTE9bix0LmVhY2hCZWZvcmUoaCksaT1bMF0sZSYmdC5lYWNoQmVmb3JlKHopLHR9ZnVuY3Rpb24gaChlKXt2YXIgcj1pW2UuZGVwdGhdLG49ZS54MCtyLHU9ZS55MCtyLGg9ZS54MS1yLGY9ZS55MS1yO2g8biYmKG49aD0obitoKS8yKSxmPHUmJih1PWY9KHUrZikvMiksZS54MD1uLGUueTA9dSxlLngxPWgsZS55MT1mLGUuY2hpbGRyZW4mJihyPWlbZS5kZXB0aCsxXT1hKGUpLzIsbis9YyhlKS1yLHUrPW8oZSktciwoaC09cyhlKS1yKTxuJiYobj1oPShuK2gpLzIpLChmLT1sKGUpLXIpPHUmJih1PWY9KHUrZikvMiksdChlLG4sdSxoLGYpKX1yZXR1cm4gdS5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0hIXQsdSk6ZX0sdS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0WzBdLG49K3RbMV0sdSk6W3Isbl19LHUudGlsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1BKGUpLHUpOnR9LHUucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdJbm5lcih0KS5wYWRkaW5nT3V0ZXIodCk6dS5wYWRkaW5nSW5uZXIoKX0sdS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Ok0oK3QpLHUpOmF9LHUucGFkZGluZ091dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3UucGFkZGluZ1RvcCh0KS5wYWRkaW5nUmlnaHQodCkucGFkZGluZ0JvdHRvbSh0KS5wYWRkaW5nTGVmdCh0KTp1LnBhZGRpbmdUb3AoKX0sdS5wYWRkaW5nVG9wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpNKCt0KSx1KTpvfSx1LnBhZGRpbmdSaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6TSgrdCksdSk6c30sdS5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpNKCt0KSx1KTpsfSx1LnBhZGRpbmdMZWZ0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpNKCt0KSx1KTpjfSx1fSx0LnRyZWVtYXBCaW5hcnk9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxvLHM9dC5jaGlsZHJlbixsPXMubGVuZ3RoLGM9bmV3IEFycmF5KGwrMSk7Zm9yKGNbMF09bz1hPTA7YTxsOysrYSljW2ErMV09bys9c1thXS52YWx1ZTshZnVuY3Rpb24gdChlLHIsbixpLGEsbyxsKXtpZihlPj1yLTEpe3ZhciB1PXNbZV07cmV0dXJuIHUueDA9aSx1LnkwPWEsdS54MT1vLHZvaWQodS55MT1sKX1mb3IodmFyIGg9Y1tlXSxmPW4vMitoLHA9ZSsxLGQ9ci0xO3A8ZDspe3ZhciBnPXArZD4+PjE7Y1tnXTxmP3A9ZysxOmQ9Z31mLWNbcC0xXTxjW3BdLWYmJmUrMTxwJiYtLXA7dmFyIHY9Y1twXS1oLG09bi12O2lmKG8taT5sLWEpe3ZhciB5PShpKm0rbyp2KS9uO3QoZSxwLHYsaSxhLHksbCksdChwLHIsbSx5LGEsbyxsKX1lbHNle3ZhciB4PShhKm0rbCp2KS9uO3QoZSxwLHYsaSxhLG8seCksdChwLHIsbSxpLHgsbyxsKX19KDAsbCx0LnZhbHVlLGUscixuLGkpfSx0LnRyZWVtYXBEaWNlPU8sdC50cmVlbWFwU2xpY2U9SCx0LnRyZWVtYXBTbGljZURpY2U9ZnVuY3Rpb24odCxlLHIsbixpKXsoMSZ0LmRlcHRoP0g6TykodCxlLHIsbixpKX0sdC50cmVlbWFwU3F1YXJpZnk9Vyx0LnRyZWVtYXBSZXNxdWFyaWZ5PVgsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9KFwib2JqZWN0XCI9PXR5cGVvZiByJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZT9yOm4uZDM9bi5kM3x8e30pfSx7fV0sMTQ5OltmdW5jdGlvbih0LGUscil7dmFyIG4saTtuPXRoaXMsaT1mdW5jdGlvbih0LGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHIodCxlLHIsbixpKXt2YXIgYT10KnQsbz1hKnQ7cmV0dXJuKCgxLTMqdCszKmEtbykqZSsoNC02KmErMypvKSpyKygxKzMqdCszKmEtMypvKSpuK28qaSkvNn1mdW5jdGlvbiBuKHQpe3ZhciBlPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPW48PTA/bj0wOm4+PTE/KG49MSxlLTEpOk1hdGguZmxvb3IobiplKSxhPXRbaV0sbz10W2krMV0scz1pPjA/dFtpLTFdOjIqYS1vLGw9aTxlLTE/dFtpKzJdOjIqby1hO3JldHVybiByKChuLWkvZSkqZSxzLGEsbyxsKX19ZnVuY3Rpb24gaSh0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9TWF0aC5mbG9vcigoKG4lPTEpPDA/KytuOm4pKmUpLGE9dFsoaStlLTEpJWVdLG89dFtpJWVdLHM9dFsoaSsxKSVlXSxsPXRbKGkrMiklZV07cmV0dXJuIHIoKG4taS9lKSplLGEsbyxzLGwpfX1mdW5jdGlvbiBhKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0K3IqZX19ZnVuY3Rpb24gcyh0LGUpe3ZhciByPWUtdDtyZXR1cm4gcj9vKHQscj4xODB8fHI8LTE4MD9yLTM2MCpNYXRoLnJvdW5kKHIvMzYwKTpyKTphKGlzTmFOKHQpP2U6dCl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gMT09KHQ9K3QpP2M6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gci1lP2Z1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD1NYXRoLnBvdyh0LHIpLGU9TWF0aC5wb3coZSxyKS10LHI9MS9yLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnBvdyh0K24qZSxyKX19KGUscix0KTphKGlzTmFOKGUpP3I6ZSl9fWZ1bmN0aW9uIGModCxlKXt2YXIgcj1lLXQ7cmV0dXJuIHI/byh0LHIpOmEoaXNOYU4odCk/ZTp0KX12YXIgdT1mdW5jdGlvbiB0KHIpe3ZhciBuPWwocik7ZnVuY3Rpb24gaSh0LHIpe3ZhciBpPW4oKHQ9ZS5yZ2IodCkpLnIsKHI9ZS5yZ2IocikpLnIpLGE9bih0Lmcsci5nKSxvPW4odC5iLHIuYikscz1jKHQub3BhY2l0eSxyLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5yPWkoZSksdC5nPWEoZSksdC5iPW8oZSksdC5vcGFjaXR5PXMoZSksdCtcIlwifX1yZXR1cm4gaS5nYW1tYT10LGl9KDEpO2Z1bmN0aW9uIGgodCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuLGksYT1yLmxlbmd0aCxvPW5ldyBBcnJheShhKSxzPW5ldyBBcnJheShhKSxsPW5ldyBBcnJheShhKTtmb3Iobj0wO248YTsrK24paT1lLnJnYihyW25dKSxvW25dPWkucnx8MCxzW25dPWkuZ3x8MCxsW25dPWkuYnx8MDtyZXR1cm4gbz10KG8pLHM9dChzKSxsPXQobCksaS5vcGFjaXR5PTEsZnVuY3Rpb24odCl7cmV0dXJuIGkucj1vKHQpLGkuZz1zKHQpLGkuYj1sKHQpLGkrXCJcIn19fXZhciBmPWgobikscD1oKGkpO2Z1bmN0aW9uIGQodCxlKXt2YXIgcixuPWU/ZS5sZW5ndGg6MCxpPXQ/TWF0aC5taW4obix0Lmxlbmd0aCk6MCxhPW5ldyBBcnJheShpKSxvPW5ldyBBcnJheShuKTtmb3Iocj0wO3I8aTsrK3IpYVtyXT1fKHRbcl0sZVtyXSk7Zm9yKDtyPG47KytyKW9bcl09ZVtyXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHI9MDtyPGk7KytyKW9bcl09YVtyXSh0KTtyZXR1cm4gb319ZnVuY3Rpb24gZyh0LGUpe3ZhciByPW5ldyBEYXRlO3JldHVybiBlLT10PSt0LGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUodCtlKm4pLHJ9fWZ1bmN0aW9uIHYodCxlKXtyZXR1cm4gZS09dD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gdCtlKnJ9fWZ1bmN0aW9uIG0odCxlKXt2YXIgcixuPXt9LGk9e307Zm9yKHIgaW4gbnVsbCE9PXQmJlwib2JqZWN0XCI9PXR5cGVvZiB0fHwodD17fSksbnVsbCE9PWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlfHwoZT17fSksZSlyIGluIHQ/bltyXT1fKHRbcl0sZVtyXSk6aVtyXT1lW3JdO3JldHVybiBmdW5jdGlvbih0KXtmb3IociBpbiBuKWlbcl09bltyXSh0KTtyZXR1cm4gaX19dmFyIHk9L1stK10/KD86XFxkK1xcLj9cXGQqfFxcLj9cXGQrKSg/OltlRV1bLStdP1xcZCspPy9nLHg9bmV3IFJlZ0V4cCh5LnNvdXJjZSxcImdcIik7ZnVuY3Rpb24gYih0LGUpe3ZhciByLG4saSxhPXkubGFzdEluZGV4PXgubGFzdEluZGV4PTAsbz0tMSxzPVtdLGw9W107Zm9yKHQrPVwiXCIsZSs9XCJcIjsocj15LmV4ZWModCkpJiYobj14LmV4ZWMoZSkpOykoaT1uLmluZGV4KT5hJiYoaT1lLnNsaWNlKGEsaSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSwocj1yWzBdKT09PShuPW5bMF0pP3Nbb10/c1tvXSs9bjpzWysrb109bjooc1srK29dPW51bGwsbC5wdXNoKHtpOm8seDp2KHIsbil9KSksYT14Lmxhc3RJbmRleDtyZXR1cm4gYTxlLmxlbmd0aCYmKGk9ZS5zbGljZShhKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLHMubGVuZ3RoPDI/bFswXT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrXCJcIn19KGxbMF0ueCk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fShlKTooZT1sLmxlbmd0aCxmdW5jdGlvbih0KXtmb3IodmFyIHIsbj0wO248ZTsrK24pc1socj1sW25dKS5pXT1yLngodCk7cmV0dXJuIHMuam9pbihcIlwiKX0pfWZ1bmN0aW9uIF8odCxyKXt2YXIgbixpPXR5cGVvZiByO3JldHVybiBudWxsPT1yfHxcImJvb2xlYW5cIj09PWk/YShyKTooXCJudW1iZXJcIj09PWk/djpcInN0cmluZ1wiPT09aT8obj1lLmNvbG9yKHIpKT8ocj1uLHUpOmI6ciBpbnN0YW5jZW9mIGUuY29sb3I/dTpyIGluc3RhbmNlb2YgRGF0ZT9nOkFycmF5LmlzQXJyYXkocik/ZDpcImZ1bmN0aW9uXCIhPXR5cGVvZiByLnZhbHVlT2YmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHIudG9TdHJpbmd8fGlzTmFOKHIpP206dikodCxyKX12YXIgdyxrLEEsVCxNPTE4MC9NYXRoLlBJLFM9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24gRSh0LGUscixuLGksYSl7dmFyIG8scyxsO3JldHVybihvPU1hdGguc3FydCh0KnQrZSplKSkmJih0Lz1vLGUvPW8pLChsPXQqcitlKm4pJiYoci09dCpsLG4tPWUqbCksKHM9TWF0aC5zcXJ0KHIqcituKm4pKSYmKHIvPXMsbi89cyxsLz1zKSx0Km48ZSpyJiYodD0tdCxlPS1lLGw9LWwsbz0tbykse3RyYW5zbGF0ZVg6aSx0cmFuc2xhdGVZOmEscm90YXRlOk1hdGguYXRhbjIoZSx0KSpNLHNrZXdYOk1hdGguYXRhbihsKSpNLHNjYWxlWDpvLHNjYWxlWTpzfX1mdW5jdGlvbiBDKHQsZSxyLG4pe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrXCIgXCI6XCJcIn1yZXR1cm4gZnVuY3Rpb24oYSxvKXt2YXIgcz1bXSxsPVtdO3JldHVybiBhPXQoYSksbz10KG8pLGZ1bmN0aW9uKHQsbixpLGEsbyxzKXtpZih0IT09aXx8biE9PWEpe3ZhciBsPW8ucHVzaChcInRyYW5zbGF0ZShcIixudWxsLGUsbnVsbCxyKTtzLnB1c2goe2k6bC00LHg6dih0LGkpfSx7aTpsLTIseDp2KG4sYSl9KX1lbHNlKGl8fGEpJiZvLnB1c2goXCJ0cmFuc2xhdGUoXCIraStlK2Ercil9KGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVksby50cmFuc2xhdGVYLG8udHJhbnNsYXRlWSxzLGwpLGZ1bmN0aW9uKHQsZSxyLGEpe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxhLnB1c2goe2k6ci5wdXNoKGkocikrXCJyb3RhdGUoXCIsbnVsbCxuKS0yLHg6dih0LGUpfSkpOmUmJnIucHVzaChpKHIpK1wicm90YXRlKFwiK2Urbil9KGEucm90YXRlLG8ucm90YXRlLHMsbCksZnVuY3Rpb24odCxlLHIsYSl7dCE9PWU/YS5wdXNoKHtpOnIucHVzaChpKHIpK1wic2tld1goXCIsbnVsbCxuKS0yLHg6dih0LGUpfSk6ZSYmci5wdXNoKGkocikrXCJza2V3WChcIitlK24pfShhLnNrZXdYLG8uc2tld1gscyxsKSxmdW5jdGlvbih0LGUscixuLGEsbyl7aWYodCE9PXJ8fGUhPT1uKXt2YXIgcz1hLnB1c2goaShhKStcInNjYWxlKFwiLG51bGwsXCIsXCIsbnVsbCxcIilcIik7by5wdXNoKHtpOnMtNCx4OnYodCxyKX0se2k6cy0yLHg6dihlLG4pfSl9ZWxzZSAxPT09ciYmMT09PW58fGEucHVzaChpKGEpK1wic2NhbGUoXCIrcitcIixcIituK1wiKVwiKX0oYS5zY2FsZVgsYS5zY2FsZVksby5zY2FsZVgsby5zY2FsZVkscyxsKSxhPW89bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGUscj0tMSxuPWwubGVuZ3RoOysrcjxuOylzWyhlPWxbcl0pLmldPWUueCh0KTtyZXR1cm4gcy5qb2luKFwiXCIpfX19dmFyIEw9QyhmdW5jdGlvbih0KXtyZXR1cm5cIm5vbmVcIj09PXQ/Uzood3x8KHc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIkRJVlwiKSxrPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxBPWRvY3VtZW50LmRlZmF1bHRWaWV3KSx3LnN0eWxlLnRyYW5zZm9ybT10LHQ9QS5nZXRDb21wdXRlZFN0eWxlKGsuYXBwZW5kQ2hpbGQodyksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShcInRyYW5zZm9ybVwiKSxrLnJlbW92ZUNoaWxkKHcpLEUoKyh0PXQuc2xpY2UoNywtMSkuc3BsaXQoXCIsXCIpKVswXSwrdFsxXSwrdFsyXSwrdFszXSwrdFs0XSwrdFs1XSkpfSxcInB4LCBcIixcInB4KVwiLFwiZGVnKVwiKSx6PUMoZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/UzooVHx8KFQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcImdcIikpLFQuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsdCksKHQ9VC50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT9FKCh0PXQubWF0cml4KS5hLHQuYix0LmMsdC5kLHQuZSx0LmYpOlMpfSxcIiwgXCIsXCIpXCIsXCIpXCIpLE89TWF0aC5TUVJUMixJPTIsRD00LFA9MWUtMTI7ZnVuY3Rpb24gUih0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn1mdW5jdGlvbiBGKHQpe3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBpPXQoKHI9ZS5oc2wocikpLmgsKG49ZS5oc2wobikpLmgpLGE9YyhyLnMsbi5zKSxvPWMoci5sLG4ubCkscz1jKHIub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5oPWkodCksci5zPWEodCksci5sPW8odCksci5vcGFjaXR5PXModCkscitcIlwifX19dmFyIEI9RihzKSxOPUYoYyk7ZnVuY3Rpb24gaih0KXtyZXR1cm4gZnVuY3Rpb24ocixuKXt2YXIgaT10KChyPWUuaGNsKHIpKS5oLChuPWUuaGNsKG4pKS5oKSxhPWMoci5jLG4uYyksbz1jKHIubCxuLmwpLHM9YyhyLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIuaD1pKHQpLHIuYz1hKHQpLHIubD1vKHQpLHIub3BhY2l0eT1zKHQpLHIrXCJcIn19fXZhciBWPWoocyksVT1qKGMpO2Z1bmN0aW9uIHEodCl7cmV0dXJuIGZ1bmN0aW9uIHIobil7ZnVuY3Rpb24gaShyLGkpe3ZhciBhPXQoKHI9ZS5jdWJlaGVsaXgocikpLmgsKGk9ZS5jdWJlaGVsaXgoaSkpLmgpLG89YyhyLnMsaS5zKSxzPWMoci5sLGkubCksbD1jKHIub3BhY2l0eSxpLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5oPWEodCksci5zPW8odCksci5sPXMoTWF0aC5wb3codCxuKSksci5vcGFjaXR5PWwodCkscitcIlwifX1yZXR1cm4gbj0rbixpLmdhbW1hPXIsaX0oMSl9dmFyIEg9cShzKSxHPXEoYyk7dC5pbnRlcnBvbGF0ZT1fLHQuaW50ZXJwb2xhdGVBcnJheT1kLHQuaW50ZXJwb2xhdGVCYXNpcz1uLHQuaW50ZXJwb2xhdGVCYXNpc0Nsb3NlZD1pLHQuaW50ZXJwb2xhdGVEYXRlPWcsdC5pbnRlcnBvbGF0ZURpc2NyZXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdFtNYXRoLm1heCgwLE1hdGgubWluKGUtMSxNYXRoLmZsb29yKHIqZSkpKV19fSx0LmludGVycG9sYXRlSHVlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9cygrdCwrZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXIodCk7cmV0dXJuIGUtMzYwKk1hdGguZmxvb3IoZS8zNjApfX0sdC5pbnRlcnBvbGF0ZU51bWJlcj12LHQuaW50ZXJwb2xhdGVPYmplY3Q9bSx0LmludGVycG9sYXRlUm91bmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS09dD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZCh0K2Uqcil9fSx0LmludGVycG9sYXRlU3RyaW5nPWIsdC5pbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcz1MLHQuaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc9eix0LmludGVycG9sYXRlWm9vbT1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10WzBdLGE9dFsxXSxvPXRbMl0scz1lWzBdLGw9ZVsxXSxjPWVbMl0sdT1zLWksaD1sLWEsZj11KnUraCpoO2lmKGY8UCluPU1hdGgubG9nKGMvbykvTyxyPWZ1bmN0aW9uKHQpe3JldHVybltpK3QqdSxhK3QqaCxvKk1hdGguZXhwKE8qdCpuKV19O2Vsc2V7dmFyIHA9TWF0aC5zcXJ0KGYpLGQ9KGMqYy1vKm8rRCpmKS8oMipvKkkqcCksZz0oYypjLW8qby1EKmYpLygyKmMqSSpwKSx2PU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCksbT1NYXRoLmxvZyhNYXRoLnNxcnQoZypnKzEpLWcpO249KG0tdikvTyxyPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dCpuLHM9Uih2KSxsPW8vKEkqcCkqKHMqKGU9TypyK3YsKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpKS1mdW5jdGlvbih0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpLTEvdCkvMn0odikpO3JldHVybltpK2wqdSxhK2wqaCxvKnMvUihPKnIrdildfX1yZXR1cm4gci5kdXJhdGlvbj0xZTMqbixyfSx0LmludGVycG9sYXRlUmdiPXUsdC5pbnRlcnBvbGF0ZVJnYkJhc2lzPWYsdC5pbnRlcnBvbGF0ZVJnYkJhc2lzQ2xvc2VkPXAsdC5pbnRlcnBvbGF0ZUhzbD1CLHQuaW50ZXJwb2xhdGVIc2xMb25nPU4sdC5pbnRlcnBvbGF0ZUxhYj1mdW5jdGlvbih0LHIpe3ZhciBuPWMoKHQ9ZS5sYWIodCkpLmwsKHI9ZS5sYWIocikpLmwpLGk9Yyh0LmEsci5hKSxhPWModC5iLHIuYiksbz1jKHQub3BhY2l0eSxyLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5sPW4oZSksdC5hPWkoZSksdC5iPWEoZSksdC5vcGFjaXR5PW8oZSksdCtcIlwifX0sdC5pbnRlcnBvbGF0ZUhjbD1WLHQuaW50ZXJwb2xhdGVIY2xMb25nPVUsdC5pbnRlcnBvbGF0ZUN1YmVoZWxpeD1ILHQuaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nPUcsdC5waWVjZXdpc2U9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLTEsaT1lWzBdLGE9bmV3IEFycmF5KG48MD8wOm4pO3I8bjspYVtyXT10KGksaT1lWysrcl0pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKG4tMSxNYXRoLmZsb29yKHQqPW4pKSk7cmV0dXJuIGFbZV0odC1lKX19LHQucXVhbnRpemU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09dChuLyhlLTEpKTtyZXR1cm4gcn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LFwib2JqZWN0XCI9PXR5cGVvZiByJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZT9pKHIsdChcImQzLWNvbG9yXCIpKTppKG4uZDM9bi5kM3x8e30sbi5kMyl9LHtcImQzLWNvbG9yXCI6MTQ1fV0sMTUwOltmdW5jdGlvbih0LGUscil7dmFyIG47bj10aGlzLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO3ZhciBlPU1hdGguUEkscj0yKmUsbj1yLTFlLTY7ZnVuY3Rpb24gaSgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPVwiXCJ9ZnVuY3Rpb24gYSgpe3JldHVybiBuZXcgaX1pLnByb3RvdHlwZT1hLnByb3RvdHlwZT17Y29uc3RydWN0b3I6aSxtb3ZlVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPVwiTVwiKyh0aGlzLl94MD10aGlzLl94MT0rdCkrXCIsXCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz1cIlpcIil9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9XCJMXCIrKHRoaXMuX3gxPSt0KStcIixcIisodGhpcy5feTE9K2UpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuXys9XCJRXCIrICt0K1wiLFwiKyArZStcIixcIisodGhpcy5feDE9K3IpK1wiLFwiKyh0aGlzLl95MT0rbil9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuXys9XCJDXCIrICt0K1wiLFwiKyArZStcIixcIisgK3IrXCIsXCIrICtuK1wiLFwiKyh0aGlzLl94MT0raSkrXCIsXCIrKHRoaXMuX3kxPSthKX0sYXJjVG86ZnVuY3Rpb24odCxyLG4saSxhKXt0PSt0LHI9K3Isbj0rbixpPStpLGE9K2E7dmFyIG89dGhpcy5feDEscz10aGlzLl95MSxsPW4tdCxjPWktcix1PW8tdCxoPXMtcixmPXUqdStoKmg7aWYoYTwwKXRocm93IG5ldyBFcnJvcihcIm5lZ2F0aXZlIHJhZGl1czogXCIrYSk7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuXys9XCJNXCIrKHRoaXMuX3gxPXQpK1wiLFwiKyh0aGlzLl95MT1yKTtlbHNlIGlmKGY+MWUtNilpZihNYXRoLmFicyhoKmwtYyp1KT4xZS02JiZhKXt2YXIgcD1uLW8sZD1pLXMsZz1sKmwrYypjLHY9cCpwK2QqZCxtPU1hdGguc3FydChnKSx5PU1hdGguc3FydChmKSx4PWEqTWF0aC50YW4oKGUtTWF0aC5hY29zKChnK2YtdikvKDIqbSp5KSkpLzIpLGI9eC95LF89eC9tO01hdGguYWJzKGItMSk+MWUtNiYmKHRoaXMuXys9XCJMXCIrKHQrYip1KStcIixcIisocitiKmgpKSx0aGlzLl8rPVwiQVwiK2ErXCIsXCIrYStcIiwwLDAsXCIrICsoaCpwPnUqZCkrXCIsXCIrKHRoaXMuX3gxPXQrXypsKStcIixcIisodGhpcy5feTE9citfKmMpfWVsc2UgdGhpcy5fKz1cIkxcIisodGhpcy5feDE9dCkrXCIsXCIrKHRoaXMuX3kxPXIpO2Vsc2U7fSxhcmM6ZnVuY3Rpb24odCxpLGEsbyxzLGwpe3Q9K3QsaT0raTt2YXIgYz0oYT0rYSkqTWF0aC5jb3MobyksdT1hKk1hdGguc2luKG8pLGg9dCtjLGY9aSt1LHA9MV5sLGQ9bD9vLXM6cy1vO2lmKGE8MCl0aHJvdyBuZXcgRXJyb3IoXCJuZWdhdGl2ZSByYWRpdXM6IFwiK2EpO251bGw9PT10aGlzLl94MT90aGlzLl8rPVwiTVwiK2grXCIsXCIrZjooTWF0aC5hYnModGhpcy5feDEtaCk+MWUtNnx8TWF0aC5hYnModGhpcy5feTEtZik+MWUtNikmJih0aGlzLl8rPVwiTFwiK2grXCIsXCIrZiksYSYmKGQ8MCYmKGQ9ZCVyK3IpLGQ+bj90aGlzLl8rPVwiQVwiK2ErXCIsXCIrYStcIiwwLDEsXCIrcCtcIixcIisodC1jKStcIixcIisoaS11KStcIkFcIithK1wiLFwiK2ErXCIsMCwxLFwiK3ArXCIsXCIrKHRoaXMuX3gxPWgpK1wiLFwiKyh0aGlzLl95MT1mKTpkPjFlLTYmJih0aGlzLl8rPVwiQVwiK2ErXCIsXCIrYStcIiwwLFwiKyArKGQ+PWUpK1wiLFwiK3ArXCIsXCIrKHRoaXMuX3gxPXQrYSpNYXRoLmNvcyhzKSkrXCIsXCIrKHRoaXMuX3kxPWkrYSpNYXRoLnNpbihzKSkpKX0scmVjdDpmdW5jdGlvbih0LGUscixuKXt0aGlzLl8rPVwiTVwiKyh0aGlzLl94MD10aGlzLl94MT0rdCkrXCIsXCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKStcImhcIisgK3IrXCJ2XCIrICtuK1wiaFwiKy1yK1wiWlwifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fSx0LnBhdGg9YSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0oXCJvYmplY3RcIj09dHlwZW9mIHImJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBlP3I6bi5kMz1uLmQzfHx7fSl9LHt9XSwxNTE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbjtuPXRoaXMsZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZSh0LGUscixuKXtpZihpc05hTihlKXx8aXNOYU4ocikpcmV0dXJuIHQ7dmFyIGksYSxvLHMsbCxjLHUsaCxmLHA9dC5fcm9vdCxkPXtkYXRhOm59LGc9dC5feDAsdj10Ll95MCxtPXQuX3gxLHk9dC5feTE7aWYoIXApcmV0dXJuIHQuX3Jvb3Q9ZCx0O2Zvcig7cC5sZW5ndGg7KWlmKChjPWU+PShhPShnK20pLzIpKT9nPWE6bT1hLCh1PXI+PShvPSh2K3kpLzIpKT92PW86eT1vLGk9cCwhKHA9cFtoPXU8PDF8Y10pKXJldHVybiBpW2hdPWQsdDtpZihzPSt0Ll94LmNhbGwobnVsbCxwLmRhdGEpLGw9K3QuX3kuY2FsbChudWxsLHAuZGF0YSksZT09PXMmJnI9PT1sKXJldHVybiBkLm5leHQ9cCxpP2lbaF09ZDp0Ll9yb290PWQsdDtkb3tpPWk/aVtoXT1uZXcgQXJyYXkoNCk6dC5fcm9vdD1uZXcgQXJyYXkoNCksKGM9ZT49KGE9KGcrbSkvMikpP2c9YTptPWEsKHU9cj49KG89KHYreSkvMikpP3Y9bzp5PW99d2hpbGUoKGg9dTw8MXxjKT09KGY9KGw+PW8pPDwxfHM+PWEpKTtyZXR1cm4gaVtmXT1wLGlbaF09ZCx0fXZhciByPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5ub2RlPXQsdGhpcy54MD1lLHRoaXMueTA9cix0aGlzLngxPW4sdGhpcy55MT1pfTtmdW5jdGlvbiBuKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gYSh0LGUscil7dmFyIGE9bmV3IG8obnVsbD09ZT9uOmUsbnVsbD09cj9pOnIsTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gbnVsbD09dD9hOmEuYWRkQWxsKHQpfWZ1bmN0aW9uIG8odCxlLHIsbixpLGEpe3RoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9YSx0aGlzLl9yb290PXZvaWQgMH1mdW5jdGlvbiBzKHQpe2Zvcih2YXIgZT17ZGF0YTp0LmRhdGF9LHI9ZTt0PXQubmV4dDspcj1yLm5leHQ9e2RhdGE6dC5kYXRhfTtyZXR1cm4gZX12YXIgbD1hLnByb3RvdHlwZT1vLnByb3RvdHlwZTtsLmNvcHk9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9bmV3IG8odGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSxuPXRoaXMuX3Jvb3Q7aWYoIW4pcmV0dXJuIHI7aWYoIW4ubGVuZ3RoKXJldHVybiByLl9yb290PXMobikscjtmb3IodD1be3NvdXJjZTpuLHRhcmdldDpyLl9yb290PW5ldyBBcnJheSg0KX1dO249dC5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkoZT1uLnNvdXJjZVtpXSkmJihlLmxlbmd0aD90LnB1c2goe3NvdXJjZTplLHRhcmdldDpuLnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTpuLnRhcmdldFtpXT1zKGUpKTtyZXR1cm4gcn0sbC5hZGQ9ZnVuY3Rpb24odCl7dmFyIHI9K3RoaXMuX3guY2FsbChudWxsLHQpLG49K3RoaXMuX3kuY2FsbChudWxsLHQpO3JldHVybiBlKHRoaXMuY292ZXIocixuKSxyLG4sdCl9LGwuYWRkQWxsPWZ1bmN0aW9uKHQpe3ZhciByLG4saSxhLG89dC5sZW5ndGgscz1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0xLzAsdT0xLzAsaD0tMS8wLGY9LTEvMDtmb3Iobj0wO248bzsrK24paXNOYU4oaT0rdGhpcy5feC5jYWxsKG51bGwscj10W25dKSl8fGlzTmFOKGE9K3RoaXMuX3kuY2FsbChudWxsLHIpKXx8KHNbbl09aSxsW25dPWEsaTxjJiYoYz1pKSxpPmgmJihoPWkpLGE8dSYmKHU9YSksYT5mJiYoZj1hKSk7Zm9yKGg8YyYmKGM9dGhpcy5feDAsaD10aGlzLl94MSksZjx1JiYodT10aGlzLl95MCxmPXRoaXMuX3kxKSx0aGlzLmNvdmVyKGMsdSkuY292ZXIoaCxmKSxuPTA7bjxvOysrbillKHRoaXMsc1tuXSxsW25dLHRbbl0pO3JldHVybiB0aGlzfSxsLmNvdmVyPWZ1bmN0aW9uKHQsZSl7aWYoaXNOYU4odD0rdCl8fGlzTmFOKGU9K2UpKXJldHVybiB0aGlzO3ZhciByPXRoaXMuX3gwLG49dGhpcy5feTAsaT10aGlzLl94MSxhPXRoaXMuX3kxO2lmKGlzTmFOKHIpKWk9KHI9TWF0aC5mbG9vcih0KSkrMSxhPShuPU1hdGguZmxvb3IoZSkpKzE7ZWxzZXtpZighKHI+dHx8dD5pfHxuPmV8fGU+YSkpcmV0dXJuIHRoaXM7dmFyIG8scyxsPWktcixjPXRoaXMuX3Jvb3Q7c3dpdGNoKHM9KGU8KG4rYSkvMik8PDF8dDwocitpKS8yKXtjYXNlIDA6ZG97KG89bmV3IEFycmF5KDQpKVtzXT1jLGM9b313aGlsZShhPW4rKGwqPTIpLHQ+KGk9citsKXx8ZT5hKTticmVhaztjYXNlIDE6ZG97KG89bmV3IEFycmF5KDQpKVtzXT1jLGM9b313aGlsZShhPW4rKGwqPTIpLChyPWktbCk+dHx8ZT5hKTticmVhaztjYXNlIDI6ZG97KG89bmV3IEFycmF5KDQpKVtzXT1jLGM9b313aGlsZShuPWEtKGwqPTIpLHQ+KGk9citsKXx8bj5lKTticmVhaztjYXNlIDM6ZG97KG89bmV3IEFycmF5KDQpKVtzXT1jLGM9b313aGlsZShuPWEtKGwqPTIpLChyPWktbCk+dHx8bj5lKX10aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9Yyl9cmV0dXJuIHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPWEsdGhpc30sbC5kYXRhPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24oZSl7aWYoIWUubGVuZ3RoKWRve3QucHVzaChlLmRhdGEpfXdoaWxlKGU9ZS5uZXh0KX0pLHR9LGwuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuY292ZXIoK3RbMF1bMF0sK3RbMF1bMV0pLmNvdmVyKCt0WzFdWzBdLCt0WzFdWzFdKTppc05hTih0aGlzLl94MCk/dm9pZCAwOltbdGhpcy5feDAsdGhpcy5feTBdLFt0aGlzLl94MSx0aGlzLl95MV1dfSxsLmZpbmQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGEsbyxzLGwsYyx1LGg9dGhpcy5feDAsZj10aGlzLl95MCxwPXRoaXMuX3gxLGQ9dGhpcy5feTEsZz1bXSx2PXRoaXMuX3Jvb3Q7Zm9yKHYmJmcucHVzaChuZXcgcih2LGgsZixwLGQpKSxudWxsPT1uP249MS8wOihoPXQtbixmPWUtbixwPXQrbixkPWUrbixuKj1uKTtjPWcucG9wKCk7KWlmKCEoISh2PWMubm9kZSl8fChhPWMueDApPnB8fChvPWMueTApPmR8fChzPWMueDEpPGh8fChsPWMueTEpPGYpKWlmKHYubGVuZ3RoKXt2YXIgbT0oYStzKS8yLHk9KG8rbCkvMjtnLnB1c2gobmV3IHIodlszXSxtLHkscyxsKSxuZXcgcih2WzJdLGEseSxtLGwpLG5ldyByKHZbMV0sbSxvLHMseSksbmV3IHIodlswXSxhLG8sbSx5KSksKHU9KGU+PXkpPDwxfHQ+PW0pJiYoYz1nW2cubGVuZ3RoLTFdLGdbZy5sZW5ndGgtMV09Z1tnLmxlbmd0aC0xLXVdLGdbZy5sZW5ndGgtMS11XT1jKX1lbHNle3ZhciB4PXQtK3RoaXMuX3guY2FsbChudWxsLHYuZGF0YSksYj1lLSt0aGlzLl95LmNhbGwobnVsbCx2LmRhdGEpLF89eCp4K2IqYjtpZihfPG4pe3ZhciB3PU1hdGguc3FydChuPV8pO2g9dC13LGY9ZS13LHA9dCt3LGQ9ZSt3LGk9di5kYXRhfX1yZXR1cm4gaX0sbC5yZW1vdmU9ZnVuY3Rpb24odCl7aWYoaXNOYU4oYT0rdGhpcy5feC5jYWxsKG51bGwsdCkpfHxpc05hTihvPSt0aGlzLl95LmNhbGwobnVsbCx0KSkpcmV0dXJuIHRoaXM7dmFyIGUscixuLGksYSxvLHMsbCxjLHUsaCxmLHA9dGhpcy5fcm9vdCxkPXRoaXMuX3gwLGc9dGhpcy5feTAsdj10aGlzLl94MSxtPXRoaXMuX3kxO2lmKCFwKXJldHVybiB0aGlzO2lmKHAubGVuZ3RoKWZvcig7Oyl7aWYoKGM9YT49KHM9KGQrdikvMikpP2Q9czp2PXMsKHU9bz49KGw9KGcrbSkvMikpP2c9bDptPWwsZT1wLCEocD1wW2g9dTw8MXxjXSkpcmV0dXJuIHRoaXM7aWYoIXAubGVuZ3RoKWJyZWFrOyhlW2grMSYzXXx8ZVtoKzImM118fGVbaCszJjNdKSYmKHI9ZSxmPWgpfWZvcig7cC5kYXRhIT09dDspaWYobj1wLCEocD1wLm5leHQpKXJldHVybiB0aGlzO3JldHVybihpPXAubmV4dCkmJmRlbGV0ZSBwLm5leHQsbj8oaT9uLm5leHQ9aTpkZWxldGUgbi5uZXh0LHRoaXMpOmU/KGk/ZVtoXT1pOmRlbGV0ZSBlW2hdLChwPWVbMF18fGVbMV18fGVbMl18fGVbM10pJiZwPT09KGVbM118fGVbMl18fGVbMV18fGVbMF0pJiYhcC5sZW5ndGgmJihyP3JbZl09cDp0aGlzLl9yb290PXApLHRoaXMpOih0aGlzLl9yb290PWksdGhpcyl9LGwucmVtb3ZlQWxsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGg7ZTxyOysrZSl0aGlzLnJlbW92ZSh0W2VdKTtyZXR1cm4gdGhpc30sbC5yb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3R9LGwuc2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24oZSl7aWYoIWUubGVuZ3RoKWRveysrdH13aGlsZShlPWUubmV4dCl9KSx0fSxsLnZpc2l0PWZ1bmN0aW9uKHQpe3ZhciBlLG4saSxhLG8scyxsPVtdLGM9dGhpcy5fcm9vdDtmb3IoYyYmbC5wdXNoKG5ldyByKGMsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtlPWwucG9wKCk7KWlmKCF0KGM9ZS5ub2RlLGk9ZS54MCxhPWUueTAsbz1lLngxLHM9ZS55MSkmJmMubGVuZ3RoKXt2YXIgdT0oaStvKS8yLGg9KGErcykvMjsobj1jWzNdKSYmbC5wdXNoKG5ldyByKG4sdSxoLG8scykpLChuPWNbMl0pJiZsLnB1c2gobmV3IHIobixpLGgsdSxzKSksKG49Y1sxXSkmJmwucHVzaChuZXcgcihuLHUsYSxvLGgpKSwobj1jWzBdKSYmbC5wdXNoKG5ldyByKG4saSxhLHUsaCkpfXJldHVybiB0aGlzfSxsLnZpc2l0QWZ0ZXI9ZnVuY3Rpb24odCl7dmFyIGUsbj1bXSxpPVtdO2Zvcih0aGlzLl9yb290JiZuLnB1c2gobmV3IHIodGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9bi5wb3AoKTspe3ZhciBhPWUubm9kZTtpZihhLmxlbmd0aCl7dmFyIG8scz1lLngwLGw9ZS55MCxjPWUueDEsdT1lLnkxLGg9KHMrYykvMixmPShsK3UpLzI7KG89YVswXSkmJm4ucHVzaChuZXcgcihvLHMsbCxoLGYpKSwobz1hWzFdKSYmbi5wdXNoKG5ldyByKG8saCxsLGMsZikpLChvPWFbMl0pJiZuLnB1c2gobmV3IHIobyxzLGYsaCx1KSksKG89YVszXSkmJm4ucHVzaChuZXcgcihvLGgsZixjLHUpKX1pLnB1c2goZSl9Zm9yKDtlPWkucG9wKCk7KXQoZS5ub2RlLGUueDAsZS55MCxlLngxLGUueTEpO3JldHVybiB0aGlzfSxsLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3g9dCx0aGlzKTp0aGlzLl94fSxsLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3k9dCx0aGlzKTp0aGlzLl95fSx0LnF1YWR0cmVlPWEsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9KFwib2JqZWN0XCI9PXR5cGVvZiByJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZT9yOm4uZDM9bi5kM3x8e30pfSx7fV0sMTUyOltmdW5jdGlvbih0LGUscil7dmFyIG4saTtuPXRoaXMsaT1mdW5jdGlvbih0LGUscixuLGkpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGEodCl7cmV0dXJuIHQudGFyZ2V0LmRlcHRofWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gdC5zb3VyY2VMaW5rcy5sZW5ndGg/dC5kZXB0aDplLTF9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19aT1pJiZpLmhhc093blByb3BlcnR5KFwiZGVmYXVsdFwiKT9pLmRlZmF1bHQ6aTt2YXIgbD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOnR5cGVvZiB0fTtmdW5jdGlvbiBjKHQsZSl7cmV0dXJuIGgodC5zb3VyY2UsZS5zb3VyY2UpfHx0LmluZGV4LWUuaW5kZXh9ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBoKHQudGFyZ2V0LGUudGFyZ2V0KXx8dC5pbmRleC1lLmluZGV4fWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdC5wYXJ0T2ZDeWNsZT09PWUucGFydE9mQ3ljbGU/dC55MC1lLnkwOlwidG9wXCI9PT10LmNpcmN1bGFyTGlua1R5cGV8fFwiYm90dG9tXCI9PT1lLmNpcmN1bGFyTGlua1R5cGU/LTE6MX1mdW5jdGlvbiBmKHQpe3JldHVybiB0LnZhbHVlfWZ1bmN0aW9uIHAodCl7cmV0dXJuKHQueTArdC55MSkvMn1mdW5jdGlvbiBkKHQpe3JldHVybiBwKHQuc291cmNlKX1mdW5jdGlvbiBnKHQpe3JldHVybiBwKHQudGFyZ2V0KX1mdW5jdGlvbiB2KHQpe3JldHVybiB0LmluZGV4fWZ1bmN0aW9uIG0odCl7cmV0dXJuIHQubm9kZXN9ZnVuY3Rpb24geSh0KXtyZXR1cm4gdC5saW5rc31mdW5jdGlvbiB4KHQsZSl7dmFyIHI9dC5nZXQoZSk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKFwibWlzc2luZzogXCIrZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gYih0LGUpe3JldHVybiBlKHQpfXZhciBfPTI1LHc9MTAsaz0uMztmdW5jdGlvbiBBKHQsZSl7dmFyIHI9MCxuPTA7dC5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kuY2lyY3VsYXImJihpLnNvdXJjZS5jaXJjdWxhckxpbmtUeXBlfHxpLnRhcmdldC5jaXJjdWxhckxpbmtUeXBlP2kuY2lyY3VsYXJMaW5rVHlwZT1pLnNvdXJjZS5jaXJjdWxhckxpbmtUeXBlP2kuc291cmNlLmNpcmN1bGFyTGlua1R5cGU6aS50YXJnZXQuY2lyY3VsYXJMaW5rVHlwZTppLmNpcmN1bGFyTGlua1R5cGU9cjxuP1widG9wXCI6XCJib3R0b21cIixcInRvcFwiPT1pLmNpcmN1bGFyTGlua1R5cGU/cis9MTpuKz0xLHQubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXtiKHQsZSkhPWIoaS5zb3VyY2UsZSkmJmIodCxlKSE9YihpLnRhcmdldCxlKXx8KHQuY2lyY3VsYXJMaW5rVHlwZT1pLmNpcmN1bGFyTGlua1R5cGUpfSkpfSksdC5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY2lyY3VsYXImJih0LnNvdXJjZS5jaXJjdWxhckxpbmtUeXBlPT10LnRhcmdldC5jaXJjdWxhckxpbmtUeXBlJiYodC5jaXJjdWxhckxpbmtUeXBlPXQuc291cmNlLmNpcmN1bGFyTGlua1R5cGUpLFkodCxlKSYmKHQuY2lyY3VsYXJMaW5rVHlwZT10LnNvdXJjZS5jaXJjdWxhckxpbmtUeXBlKSl9KX1mdW5jdGlvbiBUKHQpe3ZhciBlPU1hdGguYWJzKHQueTEtdC55MCkscj1NYXRoLmFicyh0LnRhcmdldC54MC10LnNvdXJjZS54MSk7cmV0dXJuIE1hdGguYXRhbihyL2UpfWZ1bmN0aW9uIE0odCxlKXt2YXIgcj0wO3Quc291cmNlTGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXtyPXQuY2lyY3VsYXImJiFZKHQsZSk/cisxOnJ9KTt2YXIgbj0wO3JldHVybiB0LnRhcmdldExpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7bj10LmNpcmN1bGFyJiYhWSh0LGUpP24rMTpufSkscitufWZ1bmN0aW9uIFModCl7dmFyIGU9dC5zb3VyY2Uuc291cmNlTGlua3Mscj0wO2UuZm9yRWFjaChmdW5jdGlvbih0KXtyPXQuY2lyY3VsYXI/cisxOnJ9KTt2YXIgbj10LnRhcmdldC50YXJnZXRMaW5rcyxpPTA7cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbih0KXtpPXQuY2lyY3VsYXI/aSsxOml9KSwhKHI+MXx8aT4xKX1mdW5jdGlvbiBFKHQsZSxyKXtyZXR1cm4gdC5zb3J0KEwpLHQuZm9yRWFjaChmdW5jdGlvbihuLGkpe3ZhciBhLG8scz0wO2lmKFkobixyKSYmUyhuKSluLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxCdWZmZXI9cytuLndpZHRoLzI7ZWxzZXtmb3IodmFyIGw9MDtsPGk7bCsrKWlmKGE9dFtpXSxvPXRbbF0sIShhLnNvdXJjZS5jb2x1bW48by50YXJnZXQuY29sdW1ufHxhLnRhcmdldC5jb2x1bW4+by5zb3VyY2UuY29sdW1uKSl7dmFyIGM9dFtsXS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyK3RbbF0ud2lkdGgvMitlO3M9Yz5zP2M6c31uLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxCdWZmZXI9cytuLndpZHRoLzJ9fSksdH1mdW5jdGlvbiBDKHQscixpLGEpe3ZhciBvPWUubWluKHQubGlua3MsZnVuY3Rpb24odCl7cmV0dXJuIHQuc291cmNlLnkwfSk7dC5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY2lyY3VsYXImJih0LmNpcmN1bGFyUGF0aERhdGE9e30pfSksRSh0LmxpbmtzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm5cInRvcFwiPT10LmNpcmN1bGFyTGlua1R5cGV9KSxyLGEpLEUodC5saW5rcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuXCJib3R0b21cIj09dC5jaXJjdWxhckxpbmtUeXBlfSkscixhKSx0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoZS5jaXJjdWxhcil7aWYoZS5jaXJjdWxhclBhdGhEYXRhLmFyY1JhZGl1cz1lLndpZHRoK3csZS5jaXJjdWxhclBhdGhEYXRhLmxlZnROb2RlQnVmZmVyPTUsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0Tm9kZUJ1ZmZlcj01LGUuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VXaWR0aD1lLnNvdXJjZS54MS1lLnNvdXJjZS54MCxlLmNpcmN1bGFyUGF0aERhdGEuc291cmNlWD1lLnNvdXJjZS54MCtlLmNpcmN1bGFyUGF0aERhdGEuc291cmNlV2lkdGgsZS5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFg9ZS50YXJnZXQueDAsZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVk9ZS55MCxlLmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WT1lLnkxLFkoZSxhKSYmUyhlKSllLmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzPXcrZS53aWR0aC8yLGUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXM9dytlLndpZHRoLzIsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXM9dytlLndpZHRoLzIsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXM9dytlLndpZHRoLzIsXCJib3R0b21cIj09ZS5jaXJjdWxhckxpbmtUeXBlPyhlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50PWUuc291cmNlLnkxK18rZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50LWUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50LWUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKTooZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudD1lLnNvdXJjZS55MC1fLWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCtlLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCtlLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cyk7ZWxzZXt2YXIgcz1lLnNvdXJjZS5jb2x1bW4sbD1lLmNpcmN1bGFyTGlua1R5cGUsYz10LmxpbmtzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5zb3VyY2UuY29sdW1uPT1zJiZ0LmNpcmN1bGFyTGlua1R5cGU9PWx9KTtcImJvdHRvbVwiPT1lLmNpcmN1bGFyTGlua1R5cGU/Yy5zb3J0KE8pOmMuc29ydCh6KTt2YXIgdT0wO2MuZm9yRWFjaChmdW5jdGlvbih0LG4pe3QuY2lyY3VsYXJMaW5rSUQ9PWUuY2lyY3VsYXJMaW5rSUQmJihlLmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzPXcrZS53aWR0aC8yK3UsZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cz13K2Uud2lkdGgvMituKnIrdSksdSs9dC53aWR0aH0pLHM9ZS50YXJnZXQuY29sdW1uLGM9dC5saW5rcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQudGFyZ2V0LmNvbHVtbj09cyYmdC5jaXJjdWxhckxpbmtUeXBlPT1sfSksXCJib3R0b21cIj09ZS5jaXJjdWxhckxpbmtUeXBlP2Muc29ydChEKTpjLnNvcnQoSSksdT0wLGMuZm9yRWFjaChmdW5jdGlvbih0LG4pe3QuY2lyY3VsYXJMaW5rSUQ9PWUuY2lyY3VsYXJMaW5rSUQmJihlLmNpcmN1bGFyUGF0aERhdGEucmlnaHRTbWFsbEFyY1JhZGl1cz13K2Uud2lkdGgvMit1LGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzPXcrZS53aWR0aC8yK24qcit1KSx1Kz10LndpZHRofSksXCJib3R0b21cIj09ZS5jaXJjdWxhckxpbmtUeXBlPyhlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50PU1hdGgubWF4KGksZS5zb3VyY2UueTEsZS50YXJnZXQueTEpK18rZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50LWUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50LWUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKTooZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudD1vLV8tZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K2UuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K2UuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKX1lLmNpcmN1bGFyUGF0aERhdGEubGVmdElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VYK2UuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0Tm9kZUJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEucmlnaHRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WC1lLmNpcmN1bGFyUGF0aERhdGEucmlnaHROb2RlQnVmZmVyLGUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0RnVsbEV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEuc291cmNlWCtlLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzK2UuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0Tm9kZUJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEucmlnaHRGdWxsRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRYLWUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzLWUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodE5vZGVCdWZmZXJ9aWYoZS5jaXJjdWxhcillLnBhdGg9ZnVuY3Rpb24odCl7dmFyIGU9XCJcIjtlPVwidG9wXCI9PXQuY2lyY3VsYXJMaW5rVHlwZT9cIk1cIit0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWCtcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWStcIiBMXCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudCtcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWStcIiBBXCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cytcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzK1wiIDAgMCAwIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0RnVsbEV4dGVudCtcIiBcIisodC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVktdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRTbWFsbEFyY1JhZGl1cykrXCIgTFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0RnVsbEV4dGVudCtcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQrXCIgQVwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cytcIiAwIDAgMCBcIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdElubmVyRXh0ZW50K1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQrXCIgTFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodElubmVyRXh0ZW50K1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQrXCIgQVwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzK1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzK1wiIDAgMCAwIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodEZ1bGxFeHRlbnQrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudCtcIiBMXCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0RnVsbEV4dGVudCtcIiBcIisodC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFktdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXMpK1wiIEFcIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cytcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRTbWFsbEFyY1JhZGl1cytcIiAwIDAgMCBcIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRJbm5lckV4dGVudCtcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WStcIiBMXCIrdC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFgrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFk6XCJNXCIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVgrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVkrXCIgTFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0SW5uZXJFeHRlbnQrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVkrXCIgQVwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRTbWFsbEFyY1JhZGl1cytcIiAwIDAgMSBcIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdEZ1bGxFeHRlbnQrXCIgXCIrKHQuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0U21hbGxBcmNSYWRpdXMpK1wiIExcIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdEZ1bGxFeHRlbnQrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50K1wiIEFcIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzK1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMrXCIgMCAwIDEgXCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudCtcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K1wiIExcIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRJbm5lckV4dGVudCtcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K1wiIEFcIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cytcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cytcIiAwIDAgMSBcIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRGdWxsRXh0ZW50K1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQrXCIgTFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodEZ1bGxFeHRlbnQrXCIgXCIrKHQuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodFNtYWxsQXJjUmFkaXVzKStcIiBBXCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXMrXCIgMCAwIDEgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFkrXCIgTFwiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRYK1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZO3JldHVybiBlfShlKTtlbHNle3ZhciBoPW4ubGlua0hvcml6b250YWwoKS5zb3VyY2UoZnVuY3Rpb24odCl7cmV0dXJuW3Quc291cmNlLngwKyh0LnNvdXJjZS54MS10LnNvdXJjZS54MCksdC55MF19KS50YXJnZXQoZnVuY3Rpb24odCl7cmV0dXJuW3QudGFyZ2V0LngwLHQueTFdfSk7ZS5wYXRoPWgoZSl9fSl9ZnVuY3Rpb24gTCh0LGUpe3JldHVybiBQKHQpPT1QKGUpP1wiYm90dG9tXCI9PXQuY2lyY3VsYXJMaW5rVHlwZT9PKHQsZSk6eih0LGUpOlAoZSktUCh0KX1mdW5jdGlvbiB6KHQsZSl7cmV0dXJuIHQueTAtZS55MH1mdW5jdGlvbiBPKHQsZSl7cmV0dXJuIGUueTAtdC55MH1mdW5jdGlvbiBJKHQsZSl7cmV0dXJuIHQueTEtZS55MX1mdW5jdGlvbiBEKHQsZSl7cmV0dXJuIGUueTEtdC55MX1mdW5jdGlvbiBQKHQpe3JldHVybiB0LnRhcmdldC5jb2x1bW4tdC5zb3VyY2UuY29sdW1ufWZ1bmN0aW9uIFIodCl7cmV0dXJuIHQudGFyZ2V0LngwLXQuc291cmNlLngxfWZ1bmN0aW9uIEYodCxlKXt2YXIgcj1UKHQpLG49UihlKS9NYXRoLnRhbihyKTtyZXR1cm5cInVwXCI9PUcodCk/dC55MStuOnQueTEtbn1mdW5jdGlvbiBCKHQsZSl7dmFyIHI9VCh0KSxuPVIoZSkvTWF0aC50YW4ocik7cmV0dXJuXCJ1cFwiPT1HKHQpP3QueTEtbjp0LnkxK259ZnVuY3Rpb24gTih0LGUscixuKXt0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24oaSl7aWYoIWkuY2lyY3VsYXImJmkudGFyZ2V0LmNvbHVtbi1pLnNvdXJjZS5jb2x1bW4+MSl7dmFyIGE9aS5zb3VyY2UuY29sdW1uKzEsbz1pLnRhcmdldC5jb2x1bW4tMSxzPTEsbD1vLWErMTtmb3Iocz0xO2E8PW87YSsrLHMrKyl0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24obyl7aWYoby5jb2x1bW49PWEpe3ZhciBjLHU9cy8obCsxKSxoPU1hdGgucG93KDEtdSwzKSxmPTMqdSpNYXRoLnBvdygxLXUsMikscD0zKk1hdGgucG93KHUsMikqKDEtdSksZD1NYXRoLnBvdyh1LDMpLGc9aCppLnkwK2YqaS55MCtwKmkueTErZCppLnkxLHY9Zy1pLndpZHRoLzIsbT1nK2kud2lkdGgvMjt2Pm8ueTAmJnY8by55MT8oYz1vLnkxLXYrMTAsYz1cImJvdHRvbVwiPT1vLmNpcmN1bGFyTGlua1R5cGU/YzotYyxvPVYobyxjLGUsciksdC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2IodCxuKSE9YihvLG4pJiZ0LmNvbHVtbj09by5jb2x1bW4mJmoobyx0KSYmVih0LGMsZSxyKX0pKTptPm8ueTAmJm08by55MT8oYz1tLW8ueTArMTAsbz1WKG8sYyxlLHIpLHQubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXtiKHQsbikhPWIobyxuKSYmdC5jb2x1bW49PW8uY29sdW1uJiZ0LnkwPG8ueTEmJnQueTE+by55MSYmVih0LGMsZSxyKX0pKTp2PG8ueTAmJm0+by55MSYmKGM9bS1vLnkwKzEwLG89VihvLGMsZSxyKSx0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7Yih0LG4pIT1iKG8sbikmJnQuY29sdW1uPT1vLmNvbHVtbiYmdC55MDxvLnkxJiZ0LnkxPm8ueTEmJlYodCxjLGUscil9KSl9fSl9fSl9ZnVuY3Rpb24gaih0LGUpe3JldHVybiB0LnkwPmUueTAmJnQueTA8ZS55MXx8KHQueTE+ZS55MCYmdC55MTxlLnkxfHx0LnkwPGUueTAmJnQueTE+ZS55MSl9ZnVuY3Rpb24gVih0LGUscixuKXtyZXR1cm4gdC55MCtlPj1yJiZ0LnkxK2U8PW4mJih0LnkwPXQueTArZSx0LnkxPXQueTErZSx0LnRhcmdldExpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC55MT10LnkxK2V9KSx0LnNvdXJjZUxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC55MD10LnkwK2V9KSksdH1mdW5jdGlvbiBVKHQsZSxyLG4pe3Qubm9kZXMuZm9yRWFjaChmdW5jdGlvbihpKXtuJiZpLnkrKGkueTEtaS55MCk+ZSYmKGkueT1pLnktKGkueSsoaS55MS1pLnkwKS1lKSk7dmFyIGE9dC5saW5rcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGIodC5zb3VyY2Uscik9PWIoaSxyKX0pLG89YS5sZW5ndGg7bz4xJiZhLnNvcnQoZnVuY3Rpb24odCxlKXtpZighdC5jaXJjdWxhciYmIWUuY2lyY3VsYXIpe2lmKHQudGFyZ2V0LmNvbHVtbj09ZS50YXJnZXQuY29sdW1uKXJldHVybiB0LnkxLWUueTE7aWYoIUgodCxlKSlyZXR1cm4gdC55MS1lLnkxO2lmKHQudGFyZ2V0LmNvbHVtbj5lLnRhcmdldC5jb2x1bW4pe3ZhciByPUIoZSx0KTtyZXR1cm4gdC55MS1yfWlmKGUudGFyZ2V0LmNvbHVtbj50LnRhcmdldC5jb2x1bW4pcmV0dXJuIEIodCxlKS1lLnkxfXJldHVybiB0LmNpcmN1bGFyJiYhZS5jaXJjdWxhcj9cInRvcFwiPT10LmNpcmN1bGFyTGlua1R5cGU/LTE6MTplLmNpcmN1bGFyJiYhdC5jaXJjdWxhcj9cInRvcFwiPT1lLmNpcmN1bGFyTGlua1R5cGU/MTotMTp0LmNpcmN1bGFyJiZlLmNpcmN1bGFyP3QuY2lyY3VsYXJMaW5rVHlwZT09PWUuY2lyY3VsYXJMaW5rVHlwZSYmXCJ0b3BcIj09dC5jaXJjdWxhckxpbmtUeXBlP3QudGFyZ2V0LmNvbHVtbj09PWUudGFyZ2V0LmNvbHVtbj90LnRhcmdldC55MS1lLnRhcmdldC55MTplLnRhcmdldC5jb2x1bW4tdC50YXJnZXQuY29sdW1uOnQuY2lyY3VsYXJMaW5rVHlwZT09PWUuY2lyY3VsYXJMaW5rVHlwZSYmXCJib3R0b21cIj09dC5jaXJjdWxhckxpbmtUeXBlP3QudGFyZ2V0LmNvbHVtbj09PWUudGFyZ2V0LmNvbHVtbj9lLnRhcmdldC55MS10LnRhcmdldC55MTp0LnRhcmdldC5jb2x1bW4tZS50YXJnZXQuY29sdW1uOlwidG9wXCI9PXQuY2lyY3VsYXJMaW5rVHlwZT8tMToxOnZvaWQgMH0pO3ZhciBzPWkueTA7YS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QueTA9cyt0LndpZHRoLzIscys9dC53aWR0aH0pLGEuZm9yRWFjaChmdW5jdGlvbih0LGUpe2lmKFwiYm90dG9tXCI9PXQuY2lyY3VsYXJMaW5rVHlwZSl7Zm9yKHZhciByPWUrMSxuPTA7cjxvO3IrKyluKz1hW3JdLndpZHRoO3QueTA9aS55MS1uLXQud2lkdGgvMn19KX0pfWZ1bmN0aW9uIHEodCxlLHIpe3Qubm9kZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj10LmxpbmtzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gYih0LnRhcmdldCxyKT09YihlLHIpfSksaT1uLmxlbmd0aDtpPjEmJm4uc29ydChmdW5jdGlvbih0LGUpe2lmKCF0LmNpcmN1bGFyJiYhZS5jaXJjdWxhcil7aWYodC5zb3VyY2UuY29sdW1uPT1lLnNvdXJjZS5jb2x1bW4pcmV0dXJuIHQueTAtZS55MDtpZighSCh0LGUpKXJldHVybiB0LnkwLWUueTA7aWYoZS5zb3VyY2UuY29sdW1uPHQuc291cmNlLmNvbHVtbil7dmFyIHI9RihlLHQpO3JldHVybiB0LnkwLXJ9aWYodC5zb3VyY2UuY29sdW1uPGUuc291cmNlLmNvbHVtbilyZXR1cm4gRih0LGUpLWUueTB9cmV0dXJuIHQuY2lyY3VsYXImJiFlLmNpcmN1bGFyP1widG9wXCI9PXQuY2lyY3VsYXJMaW5rVHlwZT8tMToxOmUuY2lyY3VsYXImJiF0LmNpcmN1bGFyP1widG9wXCI9PWUuY2lyY3VsYXJMaW5rVHlwZT8xOi0xOnQuY2lyY3VsYXImJmUuY2lyY3VsYXI/dC5jaXJjdWxhckxpbmtUeXBlPT09ZS5jaXJjdWxhckxpbmtUeXBlJiZcInRvcFwiPT10LmNpcmN1bGFyTGlua1R5cGU/dC5zb3VyY2UuY29sdW1uPT09ZS5zb3VyY2UuY29sdW1uP3Quc291cmNlLnkxLWUuc291cmNlLnkxOnQuc291cmNlLmNvbHVtbi1lLnNvdXJjZS5jb2x1bW46dC5jaXJjdWxhckxpbmtUeXBlPT09ZS5jaXJjdWxhckxpbmtUeXBlJiZcImJvdHRvbVwiPT10LmNpcmN1bGFyTGlua1R5cGU/dC5zb3VyY2UuY29sdW1uPT09ZS5zb3VyY2UuY29sdW1uP3Quc291cmNlLnkxLWUuc291cmNlLnkxOmUuc291cmNlLmNvbHVtbi10LnNvdXJjZS5jb2x1bW46XCJ0b3BcIj09dC5jaXJjdWxhckxpbmtUeXBlPy0xOjE6dm9pZCAwfSk7dmFyIGE9ZS55MDtuLmZvckVhY2goZnVuY3Rpb24odCl7dC55MT1hK3Qud2lkdGgvMixhKz10LndpZHRofSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQscil7aWYoXCJib3R0b21cIj09dC5jaXJjdWxhckxpbmtUeXBlKXtmb3IodmFyIGE9cisxLG89MDthPGk7YSsrKW8rPW5bYV0ud2lkdGg7dC55MT1lLnkxLW8tdC53aWR0aC8yfX0pfSl9ZnVuY3Rpb24gSCh0LGUpe3JldHVybiBHKHQpPT1HKGUpfWZ1bmN0aW9uIEcodCl7cmV0dXJuIHQueTAtdC55MT4wP1widXBcIjpcImRvd25cIn1mdW5jdGlvbiBZKHQsZSl7cmV0dXJuIGIodC5zb3VyY2UsZSk9PWIodC50YXJnZXQsZSl9dC5zYW5rZXlDaXJjdWxhcj1mdW5jdGlvbigpe3ZhciB0LG4sYT0wLGI9MCxUPTEsUz0xLEU9MjQsTD12LHo9byxPPW0sST15LEQ9MzIsUD0yLFI9bnVsbDtmdW5jdGlvbiBGKCl7dmFyIG89e25vZGVzOk8uYXBwbHkobnVsbCxhcmd1bWVudHMpLGxpbmtzOkkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTshZnVuY3Rpb24odCl7dC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dC5pbmRleD1lLHQuc291cmNlTGlua3M9W10sdC50YXJnZXRMaW5rcz1bXX0pO3ZhciBlPXIubWFwKHQubm9kZXMsTCk7dC5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQscil7dC5pbmRleD1yO3ZhciBuPXQuc291cmNlLGk9dC50YXJnZXQ7XCJvYmplY3RcIiE9PShcInVuZGVmaW5lZFwiPT10eXBlb2Ygbj9cInVuZGVmaW5lZFwiOmwobikpJiYobj10LnNvdXJjZT14KGUsbikpLFwib2JqZWN0XCIhPT0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIGk/XCJ1bmRlZmluZWRcIjpsKGkpKSYmKGk9dC50YXJnZXQ9eChlLGkpKSxuLnNvdXJjZUxpbmtzLnB1c2godCksaS50YXJnZXRMaW5rcy5wdXNoKHQpfSl9KG8pLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0wO2lmKG51bGw9PT1yKXtmb3IodmFyIGE9W10sbz0wO288dC5saW5rcy5sZW5ndGg7bysrKXt2YXIgcz10LmxpbmtzW29dLGw9cy5zb3VyY2UuaW5kZXgsYz1zLnRhcmdldC5pbmRleDthW2xdfHwoYVtsXT1bXSksYVtjXXx8KGFbY109W10pLC0xPT09YVtsXS5pbmRleE9mKGMpJiZhW2xdLnB1c2goYyl9dmFyIHU9aShhKTt1LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGgtZS5sZW5ndGh9KTt2YXIgaD17fTtmb3Iobz0wO288dS5sZW5ndGg7bysrKXtmb3IodmFyIGY9dVtvXSxwPSExLGQ9MDtkPGYubGVuZ3RoLTE7ZCsrKWlmKGhbZltkXV18fChoW2ZbZF1dPXt9KSxoW2ZbZF1dJiZoW2ZbZF1dW2ZbZCsxXV0pe3A9ITA7YnJlYWt9aWYoIXApe3ZhciBnPWYuc2xpY2UoLTIpO2hbZ1swXV1bZ1sxXV09ITB9fXQubGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LnRhcmdldC5pbmRleCxyPXQuc291cmNlLmluZGV4O2U9PT1yfHxoW3JdJiZoW3JdW2VdPyh0LmNpcmN1bGFyPSEwLHQuY2lyY3VsYXJMaW5rSUQ9bixuKz0xKTp0LmNpcmN1bGFyPSExfSl9ZWxzZSB0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC5zb3VyY2Vbcl08dC50YXJnZXRbcl0/dC5jaXJjdWxhcj0hMToodC5jaXJjdWxhcj0hMCx0LmNpcmN1bGFyTGlua0lEPW4sbis9MSl9KX0obywwLFIpLGZ1bmN0aW9uKHQpe3Qubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnBhcnRPZkN5Y2xlPSExLHQudmFsdWU9TWF0aC5tYXgoZS5zdW0odC5zb3VyY2VMaW5rcyxmKSxlLnN1bSh0LnRhcmdldExpbmtzLGYpKSx0LnNvdXJjZUxpbmtzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5jaXJjdWxhciYmKHQucGFydE9mQ3ljbGU9ITAsdC5jaXJjdWxhckxpbmtUeXBlPWUuY2lyY3VsYXJMaW5rVHlwZSl9KSx0LnRhcmdldExpbmtzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5jaXJjdWxhciYmKHQucGFydE9mQ3ljbGU9ITAsdC5jaXJjdWxhckxpbmtUeXBlPWUuY2lyY3VsYXJMaW5rVHlwZSl9KX0pfShvKSxmdW5jdGlvbih0KXt2YXIgZSxyLG47Zm9yKGU9dC5ub2RlcyxyPVtdLG49MDtlLmxlbmd0aDsrK24sZT1yLHI9W10pZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZGVwdGg9bix0LnNvdXJjZUxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7ci5pbmRleE9mKHQudGFyZ2V0KTwwJiYhdC5jaXJjdWxhciYmci5wdXNoKHQudGFyZ2V0KX0pfSk7Zm9yKGU9dC5ub2RlcyxyPVtdLG49MDtlLmxlbmd0aDsrK24sZT1yLHI9W10pZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuaGVpZ2h0PW4sdC50YXJnZXRMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3IuaW5kZXhPZih0LnNvdXJjZSk8MCYmIXQuY2lyY3VsYXImJnIucHVzaCh0LnNvdXJjZSl9KX0pO3Qubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNvbHVtbj1NYXRoLmZsb29yKHouY2FsbChudWxsLHQsbikpfSl9KG8pLEEobyxMKSxmdW5jdGlvbihpLG8scyl7dmFyIGw9ci5uZXN0KCkua2V5KGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbn0pLnNvcnRLZXlzKGUuYXNjZW5kaW5nKS5lbnRyaWVzKGkubm9kZXMpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZXN9KTsoZnVuY3Rpb24ocil7aWYobil7dmFyIG89MS8wO2wuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1TKm4vKHQubGVuZ3RoKzEpO289ZTxvP2U6b30pLHQ9b312YXIgcz1lLm1pbihsLGZ1bmN0aW9uKHIpe3JldHVybihTLWItKHIubGVuZ3RoLTEpKnQpL2Uuc3VtKHIsZil9KTtzKj1rLGkubGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LndpZHRoPXQudmFsdWUqc30pO3ZhciBjPWZ1bmN0aW9uKHQpe3ZhciByPTAsbj0wLGk9MCxhPTAsbz1lLm1heCh0Lm5vZGVzLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbn0pO3JldHVybiB0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC5jaXJjdWxhciYmKFwidG9wXCI9PXQuY2lyY3VsYXJMaW5rVHlwZT9yKz10LndpZHRoOm4rPXQud2lkdGgsMD09dC50YXJnZXQuY29sdW1uJiYoYSs9dC53aWR0aCksdC5zb3VyY2UuY29sdW1uPT1vJiYoaSs9dC53aWR0aCkpfSkse3RvcDpyPXI+MD9yK18rdzpyLGJvdHRvbTpuPW4+MD9uK18rdzpuLGxlZnQ6YT1hPjA/YStfK3c6YSxyaWdodDppPWk+MD9pK18rdzppfX0oaSksdT1mdW5jdGlvbih0LHIpe3ZhciBuPWUubWF4KHQubm9kZXMsZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sdW1ufSksaT1ULWEsbz1TLWIscz1pK3IucmlnaHQrci5sZWZ0LGw9bytyLnRvcCtyLmJvdHRvbSxjPWkvcyx1PW8vbDtyZXR1cm4gYT1hKmMrci5sZWZ0LFQ9MD09ci5yaWdodD9UOlQqYyxiPWIqdStyLnRvcCxTKj11LHQubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LngwPWErdC5jb2x1bW4qKChULWEtRSkvbiksdC54MT10LngwK0V9KSx1fShpLGMpO3MqPXUsaS5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Qud2lkdGg9dC52YWx1ZSpzfSksbC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3QuZm9yRWFjaChmdW5jdGlvbih0LG4pe3QuZGVwdGg9PWwubGVuZ3RoLTEmJjE9PWU/KHQueTA9Uy8yLXQudmFsdWUqcyx0LnkxPXQueTArdC52YWx1ZSpzKTowPT10LmRlcHRoJiYxPT1lPyh0LnkwPVMvMi10LnZhbHVlKnMsdC55MT10LnkwK3QudmFsdWUqcyk6dC5wYXJ0T2ZDeWNsZT8wPT1NKHQscik/KHQueTA9Uy8yK24sdC55MT10LnkwK3QudmFsdWUqcyk6XCJ0b3BcIj09dC5jaXJjdWxhckxpbmtUeXBlPyh0LnkwPWIrbix0LnkxPXQueTArdC52YWx1ZSpzKToodC55MD1TLXQudmFsdWUqcy1uLHQueTE9dC55MCt0LnZhbHVlKnMpOjA9PWMudG9wfHwwPT1jLmJvdHRvbT8odC55MD0oUy1iKS9lKm4sdC55MT10LnkwK3QudmFsdWUqcyk6KHQueTA9KFMtYikvMi1lLzIrbix0LnkxPXQueTArdC52YWx1ZSpzKX0pfSl9KShzKSxtKCk7Zm9yKHZhciBjPTEsdT1vO3U+MDstLXUpdihjKj0uOTkscyksbSgpO2Z1bmN0aW9uIHYodCxyKXt2YXIgbj1sLmxlbmd0aDtsLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIGE9aS5sZW5ndGgsbz1pWzBdLmRlcHRoO2kuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgcztpZihpLnNvdXJjZUxpbmtzLmxlbmd0aHx8aS50YXJnZXRMaW5rcy5sZW5ndGgpaWYoaS5wYXJ0T2ZDeWNsZSYmTShpLHIpPjApO2Vsc2UgaWYoMD09byYmMT09YSlzPWkueTEtaS55MCxpLnkwPVMvMi1zLzIsaS55MT1TLzIrcy8yO2Vsc2UgaWYobz09bi0xJiYxPT1hKXM9aS55MS1pLnkwLGkueTA9Uy8yLXMvMixpLnkxPVMvMitzLzI7ZWxzZXt2YXIgbD1lLm1lYW4oaS5zb3VyY2VMaW5rcyxnKSxjPWUubWVhbihpLnRhcmdldExpbmtzLGQpLHU9KChsJiZjPyhsK2MpLzI6bHx8YyktcChpKSkqdDtpLnkwKz11LGkueTErPXV9fSl9KX1mdW5jdGlvbiBtKCl7bC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByLG4saSxhPWIsbz1lLmxlbmd0aDtmb3IoZS5zb3J0KGgpLGk9MDtpPG87KytpKXI9ZVtpXSwobj1hLXIueTApPjAmJihyLnkwKz1uLHIueTErPW4pLGE9ci55MSt0O2lmKChuPWEtdC1TKT4wKWZvcihhPXIueTAtPW4sci55MS09bixpPW8tMjtpPj0wOy0taSlyPWVbaV0sKG49ci55MSt0LWEpPjAmJihyLnkwLT1uLHIueTEtPW4pLGE9ci55MH0pfX0obyxELEwpLEIobyk7Zm9yKHZhciBzPTA7czw0O3MrKylVKG8sUyxMKSxxKG8sMCxMKSxOKG8sYixTLEwpLFUobyxTLEwpLHEobywwLEwpO3JldHVybiBmdW5jdGlvbih0LHIsbil7dmFyIGk9dC5ub2RlcyxhPXQubGlua3Msbz0hMSxzPSExO2lmKGEuZm9yRWFjaChmdW5jdGlvbih0KXtcInRvcFwiPT10LmNpcmN1bGFyTGlua1R5cGU/bz0hMDpcImJvdHRvbVwiPT10LmNpcmN1bGFyTGlua1R5cGUmJihzPSEwKX0pLDA9PW98fDA9PXMpe3ZhciBsPWUubWluKGksZnVuY3Rpb24odCl7cmV0dXJuIHQueTB9KSxjPWUubWF4KGksZnVuY3Rpb24odCl7cmV0dXJuIHQueTF9KSx1PWMtbCxoPW4tcixmPWgvdTtpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9KHQueTEtdC55MCkqZjt0LnkwPSh0LnkwLWwpKmYsdC55MT10LnkwK2V9KSxhLmZvckVhY2goZnVuY3Rpb24odCl7dC55MD0odC55MC1sKSpmLHQueTE9KHQueTEtbCkqZix0LndpZHRoPXQud2lkdGgqZn0pfX0obyxiLFMpLEMobyxQLFMsTCksb31mdW5jdGlvbiBCKHQpe3Qubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnNvdXJjZUxpbmtzLnNvcnQodSksdC50YXJnZXRMaW5rcy5zb3J0KGMpfSksdC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQueTAscj1lLG49dC55MSxpPW47dC5zb3VyY2VMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY2lyY3VsYXI/KHQueTA9bi10LndpZHRoLzIsbi09dC53aWR0aCk6KHQueTA9ZSt0LndpZHRoLzIsZSs9dC53aWR0aCl9KSx0LnRhcmdldExpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC5jaXJjdWxhcj8odC55MT1pLXQud2lkdGgvMixpLT10LndpZHRoKToodC55MT1yK3Qud2lkdGgvMixyKz10LndpZHRoKX0pfSl9cmV0dXJuIEYubm9kZUlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhMPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpzKHQpLEYpOkx9LEYubm9kZUFsaWduPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh6PVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpzKHQpLEYpOnp9LEYubm9kZVdpZHRoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPSt0LEYpOkV9LEYubm9kZVBhZGRpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2UsRik6dH0sRi5ub2Rlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cyh0KSxGKTpPfSxGLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhJPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpzKHQpLEYpOkl9LEYuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1iPTAsVD0rdFswXSxTPSt0WzFdLEYpOltULWEsUy1iXX0sRi5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3RbMF1bMF0sVD0rdFsxXVswXSxiPSt0WzBdWzFdLFM9K3RbMV1bMV0sRik6W1thLGJdLFtULFNdXX0sRi5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhEPSt0LEYpOkR9LEYuY2lyY3VsYXJMaW5rR2FwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhQPSt0LEYpOlB9LEYubm9kZVBhZGRpbmdSYXRpbz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxGKTpufSxGLnNvcnROb2Rlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUj10LEYpOlJ9LEYudXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBBKHQsTCksQih0KSx0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC5jaXJjdWxhciYmKHQuY2lyY3VsYXJMaW5rVHlwZT10LnkwK3QueTE8Uz9cInRvcFwiOlwiYm90dG9tXCIsdC5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZT10LmNpcmN1bGFyTGlua1R5cGUsdC50YXJnZXQuY2lyY3VsYXJMaW5rVHlwZT10LmNpcmN1bGFyTGlua1R5cGUpfSksVSh0LFMsTCwhMSkscSh0LDAsTCksQyh0LFAsUyxMKSx0fSxGfSx0LnNhbmtleUNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdC50YXJnZXRMaW5rcy5sZW5ndGg/dC5kZXB0aDp0LnNvdXJjZUxpbmtzLmxlbmd0aD9lLm1pbih0LnNvdXJjZUxpbmtzLGEpLTE6MH0sdC5zYW5rZXlMZWZ0PWZ1bmN0aW9uKHQpe3JldHVybiB0LmRlcHRofSx0LnNhbmtleVJpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtMS10LmhlaWdodH0sdC5zYW5rZXlKdXN0aWZ5PW8sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LFwib2JqZWN0XCI9PXR5cGVvZiByJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZT9pKHIsdChcImQzLWFycmF5XCIpLHQoXCJkMy1jb2xsZWN0aW9uXCIpLHQoXCJkMy1zaGFwZVwiKSx0KFwiZWxlbWVudGFyeS1jaXJjdWl0cy1kaXJlY3RlZC1ncmFwaFwiKSk6aShuLmQzPW4uZDN8fHt9LG4uZDMsbi5kMyxuLmQzLG51bGwpfSx7XCJkMy1hcnJheVwiOjE0MyxcImQzLWNvbGxlY3Rpb25cIjoxNDQsXCJkMy1zaGFwZVwiOjE1MyxcImVsZW1lbnRhcnktY2lyY3VpdHMtZGlyZWN0ZWQtZ3JhcGhcIjoxNjV9XSwxNTM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbixpO249dGhpcyxpPWZ1bmN0aW9uKHQsZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19dmFyIG49TWF0aC5hYnMsaT1NYXRoLmF0YW4yLGE9TWF0aC5jb3Msbz1NYXRoLm1heCxzPU1hdGgubWluLGw9TWF0aC5zaW4sYz1NYXRoLnNxcnQsdT0xZS0xMixoPU1hdGguUEksZj1oLzIscD0yKmg7ZnVuY3Rpb24gZCh0KXtyZXR1cm4gdD49MT9mOnQ8PS0xPy1mOk1hdGguYXNpbih0KX1mdW5jdGlvbiBnKHQpe3JldHVybiB0LmlubmVyUmFkaXVzfWZ1bmN0aW9uIHYodCl7cmV0dXJuIHQub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIHkodCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24geCh0KXtyZXR1cm4gdCYmdC5wYWRBbmdsZX1mdW5jdGlvbiBiKHQsZSxyLG4saSxhLHMpe3ZhciBsPXQtcix1PWUtbixoPShzP2E6LWEpL2MobCpsK3UqdSksZj1oKnUscD0taCpsLGQ9dCtmLGc9ZStwLHY9citmLG09bitwLHk9KGQrdikvMix4PShnK20pLzIsYj12LWQsXz1tLWcsdz1iKmIrXypfLGs9aS1hLEE9ZCptLXYqZyxUPShfPDA/LTE6MSkqYyhvKDAsayprKnctQSpBKSksTT0oQSpfLWIqVCkvdyxTPSgtQSpiLV8qVCkvdyxFPShBKl8rYipUKS93LEM9KC1BKmIrXypUKS93LEw9TS15LHo9Uy14LE89RS15LEk9Qy14O3JldHVybiBMKkwreip6Pk8qTytJKkkmJihNPUUsUz1DKSx7Y3g6TSxjeTpTLHgwMTotZix5MDE6LXAseDExOk0qKGkvay0xKSx5MTE6UyooaS9rLTEpfX1mdW5jdGlvbiBfKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiB3KHQpe3JldHVybiBuZXcgXyh0KX1mdW5jdGlvbiBrKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIEEodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gVCgpe3ZhciB0PWssbj1BLGk9cighMCksYT1udWxsLG89dyxzPW51bGw7ZnVuY3Rpb24gbChyKXt2YXIgbCxjLHUsaD1yLmxlbmd0aCxmPSExO2ZvcihudWxsPT1hJiYocz1vKHU9ZS5wYXRoKCkpKSxsPTA7bDw9aDsrK2wpIShsPGgmJmkoYz1yW2xdLGwscikpPT09ZiYmKChmPSFmKT9zLmxpbmVTdGFydCgpOnMubGluZUVuZCgpKSxmJiZzLnBvaW50KCt0KGMsbCxyKSwrbihjLGwscikpO2lmKHUpcmV0dXJuIHM9bnVsbCx1K1wiXCJ8fG51bGx9cmV0dXJuIGwueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6cigrZSksbCk6dH0sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCt0KSxsKTpufSxsLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoISF0KSxsKTppfSxsLmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsbnVsbCE9YSYmKHM9byhhKSksbCk6b30sbC5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2E9cz1udWxsOnM9byhhPXQpLGwpOmF9LGx9ZnVuY3Rpb24gTSgpe3ZhciB0PWssbj1udWxsLGk9cigwKSxhPUEsbz1yKCEwKSxzPW51bGwsbD13LGM9bnVsbDtmdW5jdGlvbiB1KHIpe3ZhciB1LGgsZixwLGQsZz1yLmxlbmd0aCx2PSExLG09bmV3IEFycmF5KGcpLHk9bmV3IEFycmF5KGcpO2ZvcihudWxsPT1zJiYoYz1sKGQ9ZS5wYXRoKCkpKSx1PTA7dTw9ZzsrK3Upe2lmKCEodTxnJiZvKHA9clt1XSx1LHIpKT09PXYpaWYodj0hdiloPXUsYy5hcmVhU3RhcnQoKSxjLmxpbmVTdGFydCgpO2Vsc2V7Zm9yKGMubGluZUVuZCgpLGMubGluZVN0YXJ0KCksZj11LTE7Zj49aDstLWYpYy5wb2ludChtW2ZdLHlbZl0pO2MubGluZUVuZCgpLGMuYXJlYUVuZCgpfXYmJihtW3VdPSt0KHAsdSxyKSx5W3VdPStpKHAsdSxyKSxjLnBvaW50KG4/K24ocCx1LHIpOm1bdV0sYT8rYShwLHUscik6eVt1XSkpfWlmKGQpcmV0dXJuIGM9bnVsbCxkK1wiXCJ8fG51bGx9ZnVuY3Rpb24gaCgpe3JldHVybiBUKCkuZGVmaW5lZChvKS5jdXJ2ZShsKS5jb250ZXh0KHMpfXJldHVybiB1Lng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOnIoK2UpLG49bnVsbCx1KTp0fSx1LngwPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTpyKCtlKSx1KTp0fSx1LngxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/bnVsbDpcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cigrdCksdSk6bn0sdS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCt0KSxhPW51bGwsdSk6aX0sdS55MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cigrdCksdSk6aX0sdS55MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1udWxsPT10P251bGw6XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoK3QpLHUpOmF9LHUubGluZVgwPXUubGluZVkwPWZ1bmN0aW9uKCl7cmV0dXJuIGgoKS54KHQpLnkoaSl9LHUubGluZVkxPWZ1bmN0aW9uKCl7cmV0dXJuIGgoKS54KHQpLnkoYSl9LHUubGluZVgxPWZ1bmN0aW9uKCl7cmV0dXJuIGgoKS54KG4pLnkoaSl9LHUuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cighIXQpLHUpOm99LHUuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCxudWxsIT1zJiYoYz1sKHMpKSx1KTpsfSx1LmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/cz1jPW51bGw6Yz1sKHM9dCksdSk6c30sdX1mdW5jdGlvbiBTKHQsZSl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfWZ1bmN0aW9uIEUodCl7cmV0dXJuIHR9Xy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5saW5lVG8odCxlKX19fTt2YXIgQz16KHcpO2Z1bmN0aW9uIEwodCl7dGhpcy5fY3VydmU9dH1mdW5jdGlvbiB6KHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIG5ldyBMKHQoZSkpfXJldHVybiBlLl9jdXJ2ZT10LGV9ZnVuY3Rpb24gTyh0KXt2YXIgZT10LmN1cnZlO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZSh6KHQpKTplKCkuX2N1cnZlfSx0fWZ1bmN0aW9uIEkoKXtyZXR1cm4gTyhUKCkuY3VydmUoQykpfWZ1bmN0aW9uIEQoKXt2YXIgdD1NKCkuY3VydmUoQyksZT10LmN1cnZlLHI9dC5saW5lWDAsbj10LmxpbmVYMSxpPXQubGluZVkwLGE9dC5saW5lWTE7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5zdGFydEFuZ2xlPXQueDAsZGVsZXRlIHQueDAsdC5lbmRBbmdsZT10LngxLGRlbGV0ZSB0LngxLHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuaW5uZXJSYWRpdXM9dC55MCxkZWxldGUgdC55MCx0Lm91dGVyUmFkaXVzPXQueTEsZGVsZXRlIHQueTEsdC5saW5lU3RhcnRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBPKHIoKSl9LGRlbGV0ZSB0LmxpbmVYMCx0LmxpbmVFbmRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBPKG4oKSl9LGRlbGV0ZSB0LmxpbmVYMSx0LmxpbmVJbm5lclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBPKGkoKSl9LGRlbGV0ZSB0LmxpbmVZMCx0LmxpbmVPdXRlclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBPKGEoKSl9LGRlbGV0ZSB0LmxpbmVZMSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2Uoeih0KSk6ZSgpLl9jdXJ2ZX0sdH1mdW5jdGlvbiBQKHQsZSl7cmV0dXJuWyhlPStlKSpNYXRoLmNvcyh0LT1NYXRoLlBJLzIpLGUqTWF0aC5zaW4odCldfUwucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhU3RhcnQoKX0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFFbmQoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5fY3VydmUucG9pbnQoZSpNYXRoLnNpbih0KSxlKi1NYXRoLmNvcyh0KSl9fTt2YXIgUj1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gRih0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gQih0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gTih0KXt2YXIgbj1GLGk9QixhPWssbz1BLHM9bnVsbDtmdW5jdGlvbiBsKCl7dmFyIHIsbD1SLmNhbGwoYXJndW1lbnRzKSxjPW4uYXBwbHkodGhpcyxsKSx1PWkuYXBwbHkodGhpcyxsKTtpZihzfHwocz1yPWUucGF0aCgpKSx0KHMsK2EuYXBwbHkodGhpcywobFswXT1jLGwpKSwrby5hcHBseSh0aGlzLGwpLCthLmFwcGx5KHRoaXMsKGxbMF09dSxsKSksK28uYXBwbHkodGhpcyxsKSkscilyZXR1cm4gcz1udWxsLHIrXCJcInx8bnVsbH1yZXR1cm4gbC5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxsKTpufSxsLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGwpOml9LGwueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cigrdCksbCk6YX0sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCt0KSxsKTpvfSxsLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bnVsbD09dD9udWxsOnQsbCk6c30sbH1mdW5jdGlvbiBqKHQsZSxyLG4saSl7dC5tb3ZlVG8oZSxyKSx0LmJlemllckN1cnZlVG8oZT0oZStuKS8yLHIsZSxpLG4saSl9ZnVuY3Rpb24gVih0LGUscixuLGkpe3QubW92ZVRvKGUsciksdC5iZXppZXJDdXJ2ZVRvKGUscj0ocitpKS8yLG4scixuLGkpfWZ1bmN0aW9uIFUodCxlLHIsbixpKXt2YXIgYT1QKGUsciksbz1QKGUscj0ocitpKS8yKSxzPVAobixyKSxsPVAobixpKTt0Lm1vdmVUbyhhWzBdLGFbMV0pLHQuYmV6aWVyQ3VydmVUbyhvWzBdLG9bMV0sc1swXSxzWzFdLGxbMF0sbFsxXSl9dmFyIHE9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNxcnQoZS9oKTt0Lm1vdmVUbyhyLDApLHQuYXJjKDAsMCxyLDAscCl9fSxIPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KGUvNSkvMjt0Lm1vdmVUbygtMypyLC1yKSx0LmxpbmVUbygtciwtciksdC5saW5lVG8oLXIsLTMqciksdC5saW5lVG8ociwtMypyKSx0LmxpbmVUbyhyLC1yKSx0LmxpbmVUbygzKnIsLXIpLHQubGluZVRvKDMqcixyKSx0LmxpbmVUbyhyLHIpLHQubGluZVRvKHIsMypyKSx0LmxpbmVUbygtciwzKnIpLHQubGluZVRvKC1yLHIpLHQubGluZVRvKC0zKnIsciksdC5jbG9zZVBhdGgoKX19LEc9TWF0aC5zcXJ0KDEvMyksWT0yKkcsVz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc3FydChlL1kpLG49cipHO3QubW92ZVRvKDAsLXIpLHQubGluZVRvKG4sMCksdC5saW5lVG8oMCxyKSx0LmxpbmVUbygtbiwwKSx0LmNsb3NlUGF0aCgpfX0sWD1NYXRoLnNpbihoLzEwKS9NYXRoLnNpbig3KmgvMTApLFo9TWF0aC5zaW4ocC8xMCkqWCwkPS1NYXRoLmNvcyhwLzEwKSpYLEo9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNxcnQoLjg5MDgxMzA5MTUyOTI4NTIqZSksbj1aKnIsaT0kKnI7dC5tb3ZlVG8oMCwtciksdC5saW5lVG8obixpKTtmb3IodmFyIGE9MTthPDU7KythKXt2YXIgbz1wKmEvNSxzPU1hdGguY29zKG8pLGw9TWF0aC5zaW4obyk7dC5saW5lVG8obCpyLC1zKnIpLHQubGluZVRvKHMqbi1sKmksbCpuK3MqaSl9dC5jbG9zZVBhdGgoKX19LEs9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNxcnQoZSksbj0tci8yO3QucmVjdChuLG4scixyKX19LFE9TWF0aC5zcXJ0KDMpLHR0PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9LU1hdGguc3FydChlLygzKlEpKTt0Lm1vdmVUbygwLDIqciksdC5saW5lVG8oLVEqciwtciksdC5saW5lVG8oUSpyLC1yKSx0LmNsb3NlUGF0aCgpfX0sZXQ9LS41LHJ0PU1hdGguc3FydCgzKS8yLG50PTEvTWF0aC5zcXJ0KDEyKSxpdD0zKihudC8yKzEpLGF0PXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KGUvaXQpLG49ci8yLGk9cipudCxhPW4sbz1yKm50K3Iscz0tYSxsPW87dC5tb3ZlVG8obixpKSx0LmxpbmVUbyhhLG8pLHQubGluZVRvKHMsbCksdC5saW5lVG8oZXQqbi1ydCppLHJ0Km4rZXQqaSksdC5saW5lVG8oZXQqYS1ydCpvLHJ0KmErZXQqbyksdC5saW5lVG8oZXQqcy1ydCpsLHJ0KnMrZXQqbCksdC5saW5lVG8oZXQqbitydCppLGV0KmktcnQqbiksdC5saW5lVG8oZXQqYStydCpvLGV0Km8tcnQqYSksdC5saW5lVG8oZXQqcytydCpsLGV0KmwtcnQqcyksdC5jbG9zZVBhdGgoKX19LG90PVtxLEgsVyxLLEosdHQsYXRdO2Z1bmN0aW9uIHN0KCl7fWZ1bmN0aW9uIGx0KHQsZSxyKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oKDIqdC5feDArdC5feDEpLzMsKDIqdC5feTArdC5feTEpLzMsKHQuX3gwKzIqdC5feDEpLzMsKHQuX3kwKzIqdC5feTEpLzMsKHQuX3gwKzQqdC5feDErZSkvNiwodC5feTArNCp0Ll95MStyKS82KX1mdW5jdGlvbiBjdCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gdXQodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIGh0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBmdCh0LGUpe3RoaXMuX2Jhc2lzPW5ldyBjdCh0KSx0aGlzLl9iZXRhPWV9Y3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMzpsdCh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKTtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9jb250ZXh0LmxpbmVUbygoNSp0aGlzLl94MCt0aGlzLl94MSkvNiwoNSp0aGlzLl95MCt0aGlzLl95MSkvNik7ZGVmYXVsdDpsdCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX0sdXQucHJvdG90eXBlPXthcmVhU3RhcnQ6c3QsYXJlYUVuZDpzdCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDIrMip0aGlzLl94MykvMywodGhpcy5feTIrMip0aGlzLl95MykvMyksdGhpcy5fY29udGV4dC5saW5lVG8oKHRoaXMuX3gzKzIqdGhpcy5feDIpLzMsKHRoaXMuX3kzKzIqdGhpcy5feTIpLzMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mj10LHRoaXMuX3kyPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSx0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDArNCp0aGlzLl94MSt0KS82LCh0aGlzLl95MCs0KnRoaXMuX3kxK2UpLzYpO2JyZWFrO2RlZmF1bHQ6bHQodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19LGh0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO3ZhciByPSh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYsbj0odGhpcy5feTArNCp0aGlzLl95MStlKS82O3RoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8ocixuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhyLG4pO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6bHQodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19LGZ0LnByb3RvdHlwZT17bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdLHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxlPXRoaXMuX3kscj10Lmxlbmd0aC0xO2lmKHI+MClmb3IodmFyIG4saT10WzBdLGE9ZVswXSxvPXRbcl0taSxzPWVbcl0tYSxsPS0xOysrbDw9cjspbj1sL3IsdGhpcy5fYmFzaXMucG9pbnQodGhpcy5fYmV0YSp0W2xdKygxLXRoaXMuX2JldGEpKihpK24qbyksdGhpcy5fYmV0YSplW2xdKygxLXRoaXMuX2JldGEpKihhK24qcykpO3RoaXMuX3g9dGhpcy5feT1udWxsLHRoaXMuX2Jhc2lzLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrZSl9fTt2YXIgcHQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiAxPT09ZT9uZXcgY3QodCk6bmV3IGZ0KHQsZSl9cmV0dXJuIHIuYmV0YT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KC44NSk7ZnVuY3Rpb24gZHQodCxlLHIpe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0Ll94MSt0Ll9rKih0Ll94Mi10Ll94MCksdC5feTErdC5fayoodC5feTItdC5feTApLHQuX3gyK3QuX2sqKHQuX3gxLWUpLHQuX3kyK3QuX2sqKHQuX3kxLXIpLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiBndCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9Z3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOmR0KHRoaXMsdGhpcy5feDEsdGhpcy5feTEpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94MT10LHRoaXMuX3kxPWU7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpkdCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIHZ0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gbmV3IGd0KHQsZSl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KDApO2Z1bmN0aW9uIG10KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1tdC5wcm90b3R5cGU9e2FyZWFTdGFydDpzdCxhcmVhRW5kOnN0LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6ZHQodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciB5dD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIG5ldyBtdCh0LGUpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxyfSgwKTtmdW5jdGlvbiB4dCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9eHQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6ZHQodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBidD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIG5ldyB4dCh0LGUpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxyfSgwKTtmdW5jdGlvbiBfdCh0LGUscil7dmFyIG49dC5feDEsaT10Ll95MSxhPXQuX3gyLG89dC5feTI7aWYodC5fbDAxX2E+dSl7dmFyIHM9Mip0Ll9sMDFfMmErMyp0Ll9sMDFfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsbD0zKnQuX2wwMV9hKih0Ll9sMDFfYSt0Ll9sMTJfYSk7bj0obipzLXQuX3gwKnQuX2wxMl8yYSt0Ll94Mip0Ll9sMDFfMmEpL2wsaT0oaSpzLXQuX3kwKnQuX2wxMl8yYSt0Ll95Mip0Ll9sMDFfMmEpL2x9aWYodC5fbDIzX2E+dSl7dmFyIGM9Mip0Ll9sMjNfMmErMyp0Ll9sMjNfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsaD0zKnQuX2wyM19hKih0Ll9sMjNfYSt0Ll9sMTJfYSk7YT0oYSpjK3QuX3gxKnQuX2wyM18yYS1lKnQuX2wxMl8yYSkvaCxvPShvKmMrdC5feTEqdC5fbDIzXzJhLXIqdC5fbDEyXzJhKS9ofXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuLGksYSxvLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiB3dCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfXd0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi10LG49dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6X3QodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIga3Q9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlP25ldyB3dCh0LGUpOm5ldyBndCh0LDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oLjUpO2Z1bmN0aW9uIEF0KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9QXQucHJvdG90eXBlPXthcmVhU3RhcnQ6c3QsYXJlYUVuZDpzdCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItdCxuPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDpfdCh0aGlzLHQsZSl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBUdD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGU/bmV3IEF0KHQsZSk6bmV3IG10KHQsMCl9cmV0dXJuIHIuYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxyfSguNSk7ZnVuY3Rpb24gTXQodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1NdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLXQsbj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6X3QodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgU3Q9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlP25ldyBNdCh0LGUpOm5ldyB4dCh0LDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oLjUpO2Z1bmN0aW9uIEV0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBDdCh0KXtyZXR1cm4gdDwwPy0xOjF9ZnVuY3Rpb24gTHQodCxlLHIpe3ZhciBuPXQuX3gxLXQuX3gwLGk9ZS10Ll94MSxhPSh0Ll95MS10Ll95MCkvKG58fGk8MCYmLTApLG89KHItdC5feTEpLyhpfHxuPDAmJi0wKSxzPShhKmkrbypuKS8obitpKTtyZXR1cm4oQ3QoYSkrQ3QobykpKk1hdGgubWluKE1hdGguYWJzKGEpLE1hdGguYWJzKG8pLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiB6dCh0LGUpe3ZhciByPXQuX3gxLXQuX3gwO3JldHVybiByPygzKih0Ll95MS10Ll95MCkvci1lKS8yOmV9ZnVuY3Rpb24gT3QodCxlLHIpe3ZhciBuPXQuX3gwLGk9dC5feTAsYT10Ll94MSxvPXQuX3kxLHM9KGEtbikvMzt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8obitzLGkrcyplLGEtcyxvLXMqcixhLG8pfWZ1bmN0aW9uIEl0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBEdCh0KXt0aGlzLl9jb250ZXh0PW5ldyBQdCh0KX1mdW5jdGlvbiBQdCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gUnQodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEZ0KHQpe3ZhciBlLHIsbj10Lmxlbmd0aC0xLGk9bmV3IEFycmF5KG4pLGE9bmV3IEFycmF5KG4pLG89bmV3IEFycmF5KG4pO2ZvcihpWzBdPTAsYVswXT0yLG9bMF09dFswXSsyKnRbMV0sZT0xO2U8bi0xOysrZSlpW2VdPTEsYVtlXT00LG9bZV09NCp0W2VdKzIqdFtlKzFdO2ZvcihpW24tMV09MixhW24tMV09NyxvW24tMV09OCp0W24tMV0rdFtuXSxlPTE7ZTxuOysrZSlyPWlbZV0vYVtlLTFdLGFbZV0tPXIsb1tlXS09cipvW2UtMV07Zm9yKGlbbi0xXT1vW24tMV0vYVtuLTFdLGU9bi0yO2U+PTA7LS1lKWlbZV09KG9bZV0taVtlKzFdKS9hW2VdO2ZvcihhW24tMV09KHRbbl0raVtuLTFdKS8yLGU9MDtlPG4tMTsrK2UpYVtlXT0yKnRbZSsxXS1pW2UrMV07cmV0dXJuW2ksYV19ZnVuY3Rpb24gQnQodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fdD1lfWZ1bmN0aW9uIE50KHQsZSl7aWYoKGk9dC5sZW5ndGgpPjEpZm9yKHZhciByLG4saSxhPTEsbz10W2VbMF1dLHM9by5sZW5ndGg7YTxpOysrYSlmb3Iobj1vLG89dFtlW2FdXSxyPTA7cjxzOysrcilvW3JdWzFdKz1vW3JdWzBdPWlzTmFOKG5bcl1bMV0pP25bcl1bMF06bltyXVsxXX1mdW5jdGlvbiBqdCh0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSk7LS1lPj0wOylyW2VdPWU7cmV0dXJuIHJ9ZnVuY3Rpb24gVnQodCxlKXtyZXR1cm4gdFtlXX1mdW5jdGlvbiBVdCh0KXt2YXIgZT10Lm1hcChxdCk7cmV0dXJuIGp0KHQpLnNvcnQoZnVuY3Rpb24odCxyKXtyZXR1cm4gZVt0XS1lW3JdfSl9ZnVuY3Rpb24gcXQodCl7Zm9yKHZhciBlLHI9LTEsbj0wLGk9dC5sZW5ndGgsYT0tMS8wOysrcjxpOykoZT0rdFtyXVsxXSk+YSYmKGE9ZSxuPXIpO3JldHVybiBufWZ1bmN0aW9uIEh0KHQpe3ZhciBlPXQubWFwKEd0KTtyZXR1cm4ganQodCkuc29ydChmdW5jdGlvbih0LHIpe3JldHVybiBlW3RdLWVbcl19KX1mdW5jdGlvbiBHdCh0KXtmb3IodmFyIGUscj0wLG49LTEsaT10Lmxlbmd0aDsrK248aTspKGU9K3Rbbl1bMV0pJiYocis9ZSk7cmV0dXJuIHJ9RXQucHJvdG90eXBlPXthcmVhU3RhcnQ6c3QsYXJlYUVuZDpzdCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dD0rdCxlPStlLHRoaXMuX3BvaW50P3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6KHRoaXMuX3BvaW50PTEsdGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKSl9fSxJdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT10aGlzLl90MD1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVhaztjYXNlIDM6T3QodGhpcyx0aGlzLl90MCx6dCh0aGlzLHRoaXMuX3QwKSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3ZhciByPU5hTjtpZihlPStlLCh0PSt0KSE9PXRoaXMuX3gxfHxlIT09dGhpcy5feTEpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsT3QodGhpcyx6dCh0aGlzLHI9THQodGhpcyx0LGUpKSxyKTticmVhaztkZWZhdWx0Ok90KHRoaXMsdGhpcy5fdDAscj1MdCh0aGlzLHQsZSkpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZSx0aGlzLl90MD1yfX19LChEdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJdC5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbih0LGUpe0l0LnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsZSx0KX0sUHQucHJvdG90eXBlPXttb3ZlVG86ZnVuY3Rpb24odCxlKXt0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oZSx0LG4scixhLGkpfX0sUnQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxlPXRoaXMuX3kscj10Lmxlbmd0aDtpZihyKWlmKHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odFswXSxlWzBdKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0WzBdLGVbMF0pLDI9PT1yKXRoaXMuX2NvbnRleHQubGluZVRvKHRbMV0sZVsxXSk7ZWxzZSBmb3IodmFyIG49RnQodCksaT1GdChlKSxhPTAsbz0xO288cjsrK2EsKytvKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuWzBdW2FdLGlbMF1bYV0sblsxXVthXSxpWzFdW2FdLHRbb10sZVtvXSk7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09cikmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfX0sQnQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD10aGlzLl95PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MDx0aGlzLl90JiZ0aGlzLl90PDEmJjI9PT10aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCx0aGlzLl95KSwodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT49MCYmKHRoaXMuX3Q9MS10aGlzLl90LHRoaXMuX2xpbmU9MS10aGlzLl9saW5lKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OmlmKHRoaXMuX3Q8PTApdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCxlKSx0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpO2Vsc2V7dmFyIHI9dGhpcy5feCooMS10aGlzLl90KSt0KnRoaXMuX3Q7dGhpcy5fY29udGV4dC5saW5lVG8ocix0aGlzLl95KSx0aGlzLl9jb250ZXh0LmxpbmVUbyhyLGUpfX10aGlzLl94PXQsdGhpcy5feT1lfX0sdC5hcmM9ZnVuY3Rpb24oKXt2YXIgdD1nLG89dixfPXIoMCksdz1udWxsLGs9bSxBPXksVD14LE09bnVsbDtmdW5jdGlvbiBTKCl7dmFyIHIsZyx2LG09K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLHk9K28uYXBwbHkodGhpcyxhcmd1bWVudHMpLHg9ay5hcHBseSh0aGlzLGFyZ3VtZW50cyktZixTPUEuYXBwbHkodGhpcyxhcmd1bWVudHMpLWYsRT1uKFMteCksQz1TPng7aWYoTXx8KE09cj1lLnBhdGgoKSkseTxtJiYoZz15LHk9bSxtPWcpLHk+dSlpZihFPnAtdSlNLm1vdmVUbyh5KmEoeCkseSpsKHgpKSxNLmFyYygwLDAseSx4LFMsIUMpLG0+dSYmKE0ubW92ZVRvKG0qYShTKSxtKmwoUykpLE0uYXJjKDAsMCxtLFMseCxDKSk7ZWxzZXt2YXIgTCx6LE89eCxJPVMsRD14LFA9UyxSPUUsRj1FLEI9VC5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixOPUI+dSYmKHc/K3cuYXBwbHkodGhpcyxhcmd1bWVudHMpOmMobSptK3kqeSkpLGo9cyhuKHktbSkvMiwrXy5hcHBseSh0aGlzLGFyZ3VtZW50cykpLFY9aixVPWo7aWYoTj51KXt2YXIgcT1kKE4vbSpsKEIpKSxIPWQoTi95KmwoQikpOyhSLT0yKnEpPnU/KEQrPXEqPUM/MTotMSxQLT1xKTooUj0wLEQ9UD0oeCtTKS8yKSwoRi09MipIKT51PyhPKz1IKj1DPzE6LTEsSS09SCk6KEY9MCxPPUk9KHgrUykvMil9dmFyIEc9eSphKE8pLFk9eSpsKE8pLFc9bSphKFApLFg9bSpsKFApO2lmKGo+dSl7dmFyIFosJD15KmEoSSksSj15KmwoSSksSz1tKmEoRCksUT1tKmwoRCk7aWYoRTxoJiYoWj1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3ZhciBsPXItdCxjPW4tZSxoPW8taSxmPXMtYSxwPWYqbC1oKmM7aWYoIShwKnA8dSkpcmV0dXJuW3QrKHA9KGgqKGUtYSktZioodC1pKSkvcCkqbCxlK3AqY119KEcsWSxLLFEsJCxKLFcsWCkpKXt2YXIgdHQ9Ry1aWzBdLGV0PVktWlsxXSxydD0kLVpbMF0sbnQ9Si1aWzFdLGl0PTEvbCgoKHY9KHR0KnJ0K2V0Km50KS8oYyh0dCp0dCtldCpldCkqYyhydCpydCtudCpudCkpKT4xPzA6djwtMT9oOk1hdGguYWNvcyh2KSkvMiksYXQ9YyhaWzBdKlpbMF0rWlsxXSpaWzFdKTtWPXMoaiwobS1hdCkvKGl0LTEpKSxVPXMoaiwoeS1hdCkvKGl0KzEpKX19Rj51P1U+dT8oTD1iKEssUSxHLFkseSxVLEMpLHo9YigkLEosVyxYLHksVSxDKSxNLm1vdmVUbyhMLmN4K0wueDAxLEwuY3krTC55MDEpLFU8aj9NLmFyYyhMLmN4LEwuY3ksVSxpKEwueTAxLEwueDAxKSxpKHoueTAxLHoueDAxKSwhQyk6KE0uYXJjKEwuY3gsTC5jeSxVLGkoTC55MDEsTC54MDEpLGkoTC55MTEsTC54MTEpLCFDKSxNLmFyYygwLDAseSxpKEwuY3krTC55MTEsTC5jeCtMLngxMSksaSh6LmN5K3oueTExLHouY3grei54MTEpLCFDKSxNLmFyYyh6LmN4LHouY3ksVSxpKHoueTExLHoueDExKSxpKHoueTAxLHoueDAxKSwhQykpKTooTS5tb3ZlVG8oRyxZKSxNLmFyYygwLDAseSxPLEksIUMpKTpNLm1vdmVUbyhHLFkpLG0+dSYmUj51P1Y+dT8oTD1iKFcsWCwkLEosbSwtVixDKSx6PWIoRyxZLEssUSxtLC1WLEMpLE0ubGluZVRvKEwuY3grTC54MDEsTC5jeStMLnkwMSksVjxqP00uYXJjKEwuY3gsTC5jeSxWLGkoTC55MDEsTC54MDEpLGkoei55MDEsei54MDEpLCFDKTooTS5hcmMoTC5jeCxMLmN5LFYsaShMLnkwMSxMLngwMSksaShMLnkxMSxMLngxMSksIUMpLE0uYXJjKDAsMCxtLGkoTC5jeStMLnkxMSxMLmN4K0wueDExKSxpKHouY3krei55MTEsei5jeCt6LngxMSksQyksTS5hcmMoei5jeCx6LmN5LFYsaSh6LnkxMSx6LngxMSksaSh6LnkwMSx6LngwMSksIUMpKSk6TS5hcmMoMCwwLG0sUCxELEMpOk0ubGluZVRvKFcsWCl9ZWxzZSBNLm1vdmVUbygwLDApO2lmKE0uY2xvc2VQYXRoKCkscilyZXR1cm4gTT1udWxsLHIrXCJcInx8bnVsbH1yZXR1cm4gUy5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciBlPSgrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMixyPSgray5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtBLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi1oLzI7cmV0dXJuW2EocikqZSxsKHIpKmVdfSxTLmlubmVyUmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTpyKCtlKSxTKTp0fSxTLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCt0KSxTKTpvfSxTLmNvcm5lclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cigrdCksUyk6X30sUy5wYWRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9bnVsbD09dD9udWxsOlwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCt0KSxTKTp3fSxTLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoK3QpLFMpOmt9LFMuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEE9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoK3QpLFMpOkF9LFMucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoK3QpLFMpOlR9LFMuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT1udWxsPT10P251bGw6dCxTKTpNfSxTfSx0LmFyZWE9TSx0LmxpbmU9VCx0LnBpZT1mdW5jdGlvbigpe3ZhciB0PUUsZT1TLG49bnVsbCxpPXIoMCksYT1yKHApLG89cigwKTtmdW5jdGlvbiBzKHIpe3ZhciBzLGwsYyx1LGgsZj1yLmxlbmd0aCxkPTAsZz1uZXcgQXJyYXkoZiksdj1uZXcgQXJyYXkoZiksbT0raS5hcHBseSh0aGlzLGFyZ3VtZW50cykseT1NYXRoLm1pbihwLE1hdGgubWF4KC1wLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpLW0pKSx4PU1hdGgubWluKE1hdGguYWJzKHkpL2Ysby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGI9eCooeTwwPy0xOjEpO2ZvcihzPTA7czxmOysrcykoaD12W2dbc109c109K3QocltzXSxzLHIpKT4wJiYoZCs9aCk7Zm9yKG51bGwhPWU/Zy5zb3J0KGZ1bmN0aW9uKHQscil7cmV0dXJuIGUodlt0XSx2W3JdKX0pOm51bGwhPW4mJmcuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBuKHJbdF0scltlXSl9KSxzPTAsYz1kPyh5LWYqYikvZDowO3M8ZjsrK3MsbT11KWw9Z1tzXSx1PW0rKChoPXZbbF0pPjA/aCpjOjApK2IsdltsXT17ZGF0YTpyW2xdLGluZGV4OnMsdmFsdWU6aCxzdGFydEFuZ2xlOm0sZW5kQW5nbGU6dSxwYWRBbmdsZTp4fTtyZXR1cm4gdn1yZXR1cm4gcy52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6cigrZSkscyk6dH0scy5zb3J0VmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbj1udWxsLHMpOmV9LHMuc29ydD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGU9bnVsbCxzKTpufSxzLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoK3QpLHMpOml9LHMuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoK3QpLHMpOmF9LHMucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoK3QpLHMpOm99LHN9LHQuYXJlYVJhZGlhbD1ELHQucmFkaWFsQXJlYT1ELHQubGluZVJhZGlhbD1JLHQucmFkaWFsTGluZT1JLHQucG9pbnRSYWRpYWw9UCx0LmxpbmtIb3Jpem9udGFsPWZ1bmN0aW9uKCl7cmV0dXJuIE4oail9LHQubGlua1ZlcnRpY2FsPWZ1bmN0aW9uKCl7cmV0dXJuIE4oVil9LHQubGlua1JhZGlhbD1mdW5jdGlvbigpe3ZhciB0PU4oVSk7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5yYWRpdXM9dC55LGRlbGV0ZSB0LnksdH0sdC5zeW1ib2w9ZnVuY3Rpb24oKXt2YXIgdD1yKHEpLG49cig2NCksaT1udWxsO2Z1bmN0aW9uIGEoKXt2YXIgcjtpZihpfHwoaT1yPWUucGF0aCgpKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKS5kcmF3KGksK24uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxyKXJldHVybiBpPW51bGwscitcIlwifHxudWxsfXJldHVybiBhLnR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOnIoZSksYSk6dH0sYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCt0KSxhKTpufSxhLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09dD9udWxsOnQsYSk6aX0sYX0sdC5zeW1ib2xzPW90LHQuc3ltYm9sQ2lyY2xlPXEsdC5zeW1ib2xDcm9zcz1ILHQuc3ltYm9sRGlhbW9uZD1XLHQuc3ltYm9sU3F1YXJlPUssdC5zeW1ib2xTdGFyPUosdC5zeW1ib2xUcmlhbmdsZT10dCx0LnN5bWJvbFd5ZT1hdCx0LmN1cnZlQmFzaXNDbG9zZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB1dCh0KX0sdC5jdXJ2ZUJhc2lzT3Blbj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGh0KHQpfSx0LmN1cnZlQmFzaXM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBjdCh0KX0sdC5jdXJ2ZUJ1bmRsZT1wdCx0LmN1cnZlQ2FyZGluYWxDbG9zZWQ9eXQsdC5jdXJ2ZUNhcmRpbmFsT3Blbj1idCx0LmN1cnZlQ2FyZGluYWw9dnQsdC5jdXJ2ZUNhdG11bGxSb21DbG9zZWQ9VHQsdC5jdXJ2ZUNhdG11bGxSb21PcGVuPVN0LHQuY3VydmVDYXRtdWxsUm9tPWt0LHQuY3VydmVMaW5lYXJDbG9zZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBFdCh0KX0sdC5jdXJ2ZUxpbmVhcj13LHQuY3VydmVNb25vdG9uZVg9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBJdCh0KX0sdC5jdXJ2ZU1vbm90b25lWT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IER0KHQpfSx0LmN1cnZlTmF0dXJhbD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFJ0KHQpfSx0LmN1cnZlU3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEJ0KHQsLjUpfSx0LmN1cnZlU3RlcEFmdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQnQodCwxKX0sdC5jdXJ2ZVN0ZXBCZWZvcmU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBCdCh0LDApfSx0LnN0YWNrPWZ1bmN0aW9uKCl7dmFyIHQ9cihbXSksZT1qdCxuPU50LGk9VnQ7ZnVuY3Rpb24gYShyKXt2YXIgYSxvLHM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbD1yLmxlbmd0aCxjPXMubGVuZ3RoLHU9bmV3IEFycmF5KGMpO2ZvcihhPTA7YTxjOysrYSl7Zm9yKHZhciBoLGY9c1thXSxwPXVbYV09bmV3IEFycmF5KGwpLGQ9MDtkPGw7KytkKXBbZF09aD1bMCwraShyW2RdLGYsZCxyKV0saC5kYXRhPXJbZF07cC5rZXk9Zn1mb3IoYT0wLG89ZSh1KTthPGM7KythKXVbb1thXV0uaW5kZXg9YTtyZXR1cm4gbih1LG8pLHV9cmV0dXJuIGEua2V5cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6cihSLmNhbGwoZSkpLGEpOnR9LGEudmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoK3QpLGEpOml9LGEub3JkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9qdDpcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cihSLmNhbGwodCkpLGEpOmV9LGEub2Zmc2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/TnQ6dCxhKTpufSxhfSx0LnN0YWNrT2Zmc2V0RXhwYW5kPWZ1bmN0aW9uKHQsZSl7aWYoKG49dC5sZW5ndGgpPjApe2Zvcih2YXIgcixuLGksYT0wLG89dFswXS5sZW5ndGg7YTxvOysrYSl7Zm9yKGk9cj0wO3I8bjsrK3IpaSs9dFtyXVthXVsxXXx8MDtpZihpKWZvcihyPTA7cjxuOysrcil0W3JdW2FdWzFdLz1pfU50KHQsZSl9fSx0LnN0YWNrT2Zmc2V0RGl2ZXJnaW5nPWZ1bmN0aW9uKHQsZSl7aWYoKHM9dC5sZW5ndGgpPjEpZm9yKHZhciByLG4saSxhLG8scyxsPTAsYz10W2VbMF1dLmxlbmd0aDtsPGM7KytsKWZvcihhPW89MCxyPTA7cjxzOysrcikoaT0obj10W2Vbcl1dW2xdKVsxXS1uWzBdKT49MD8oblswXT1hLG5bMV09YSs9aSk6aTwwPyhuWzFdPW8sblswXT1vKz1pKTpuWzBdPWF9LHQuc3RhY2tPZmZzZXROb25lPU50LHQuc3RhY2tPZmZzZXRTaWxob3VldHRlPWZ1bmN0aW9uKHQsZSl7aWYoKHI9dC5sZW5ndGgpPjApe2Zvcih2YXIgcixuPTAsaT10W2VbMF1dLGE9aS5sZW5ndGg7bjxhOysrbil7Zm9yKHZhciBvPTAscz0wO288cjsrK28pcys9dFtvXVtuXVsxXXx8MDtpW25dWzFdKz1pW25dWzBdPS1zLzJ9TnQodCxlKX19LHQuc3RhY2tPZmZzZXRXaWdnbGU9ZnVuY3Rpb24odCxlKXtpZigoaT10Lmxlbmd0aCk+MCYmKG49KHI9dFtlWzBdXSkubGVuZ3RoKT4wKXtmb3IodmFyIHIsbixpLGE9MCxvPTE7bzxuOysrbyl7Zm9yKHZhciBzPTAsbD0wLGM9MDtzPGk7KytzKXtmb3IodmFyIHU9dFtlW3NdXSxoPXVbb11bMV18fDAsZj0oaC0odVtvLTFdWzFdfHwwKSkvMixwPTA7cDxzOysrcCl7dmFyIGQ9dFtlW3BdXTtmKz0oZFtvXVsxXXx8MCktKGRbby0xXVsxXXx8MCl9bCs9aCxjKz1mKmh9cltvLTFdWzFdKz1yW28tMV1bMF09YSxsJiYoYS09Yy9sKX1yW28tMV1bMV0rPXJbby0xXVswXT1hLE50KHQsZSl9fSx0LnN0YWNrT3JkZXJBcHBlYXJhbmNlPVV0LHQuc3RhY2tPcmRlckFzY2VuZGluZz1IdCx0LnN0YWNrT3JkZXJEZXNjZW5kaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBIdCh0KS5yZXZlcnNlKCl9LHQuc3RhY2tPcmRlckluc2lkZU91dD1mdW5jdGlvbih0KXt2YXIgZSxyLG49dC5sZW5ndGgsaT10Lm1hcChHdCksYT1VdCh0KSxvPTAscz0wLGw9W10sYz1bXTtmb3IoZT0wO2U8bjsrK2Upcj1hW2VdLG88cz8obys9aVtyXSxsLnB1c2gocikpOihzKz1pW3JdLGMucHVzaChyKSk7cmV0dXJuIGMucmV2ZXJzZSgpLmNvbmNhdChsKX0sdC5zdGFja09yZGVyTm9uZT1qdCx0LnN0YWNrT3JkZXJSZXZlcnNlPWZ1bmN0aW9uKHQpe3JldHVybiBqdCh0KS5yZXZlcnNlKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSxcIm9iamVjdFwiPT10eXBlb2YgciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGU/aShyLHQoXCJkMy1wYXRoXCIpKTppKG4uZDM9bi5kM3x8e30sbi5kMyl9LHtcImQzLXBhdGhcIjoxNTB9XSwxNTQ6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbjtuPXRoaXMsZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGUscixuPTAsaT0wLGE9MCxvPTFlMyxzPTAsbD0wLGM9MCx1PVwib2JqZWN0XCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsaD1cIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O2Z1bmN0aW9uIGYoKXtyZXR1cm4gbHx8KGgocCksbD11Lm5vdygpK2MpfWZ1bmN0aW9uIHAoKXtsPTB9ZnVuY3Rpb24gZCgpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gZyh0LGUscil7dmFyIG49bmV3IGQ7cmV0dXJuIG4ucmVzdGFydCh0LGUsciksbn1mdW5jdGlvbiB2KCl7ZigpLCsrbjtmb3IodmFyIHQscj1lO3I7KSh0PWwtci5fdGltZSk+PTAmJnIuX2NhbGwuY2FsbChudWxsLHQpLHI9ci5fbmV4dDstLW59ZnVuY3Rpb24gbSgpe2w9KHM9dS5ub3coKSkrYyxuPWk9MDt0cnl7digpfWZpbmFsbHl7bj0wLGZ1bmN0aW9uKCl7dmFyIHQsbixpPWUsYT0xLzA7Zm9yKDtpOylpLl9jYWxsPyhhPmkuX3RpbWUmJihhPWkuX3RpbWUpLHQ9aSxpPWkuX25leHQpOihuPWkuX25leHQsaS5fbmV4dD1udWxsLGk9dD90Ll9uZXh0PW46ZT1uKTtyPXQseChhKX0oKSxsPTB9fWZ1bmN0aW9uIHkoKXt2YXIgdD11Lm5vdygpLGU9dC1zO2U+byYmKGMtPWUscz10KX1mdW5jdGlvbiB4KHQpe258fChpJiYoaT1jbGVhclRpbWVvdXQoaSkpLHQtbD4yND8odDwxLzAmJihpPXNldFRpbWVvdXQobSx0LXUubm93KCktYykpLGEmJihhPWNsZWFySW50ZXJ2YWwoYSkpKTooYXx8KHM9dS5ub3coKSxhPXNldEludGVydmFsKHksbykpLG49MSxoKG0pKSl9ZC5wcm90b3R5cGU9Zy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmQscmVzdGFydDpmdW5jdGlvbih0LG4saSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb25cIik7aT0obnVsbD09aT9mKCk6K2kpKyhudWxsPT1uPzA6K24pLHRoaXMuX25leHR8fHI9PT10aGlzfHwocj9yLl9uZXh0PXRoaXM6ZT10aGlzLHI9dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9aSx4KCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLHgoKSl9fTt0Lm5vdz1mLHQudGltZXI9Zyx0LnRpbWVyRmx1c2g9dix0LnRpbWVvdXQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW5ldyBkO3JldHVybiBlPW51bGw9PWU/MDorZSxuLnJlc3RhcnQoZnVuY3Rpb24ocil7bi5zdG9wKCksdChyK2UpfSxlLHIpLG59LHQuaW50ZXJ2YWw9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW5ldyBkLGk9ZTtyZXR1cm4gbnVsbD09ZT8obi5yZXN0YXJ0KHQsZSxyKSxuKTooZT0rZSxyPW51bGw9PXI/ZigpOityLG4ucmVzdGFydChmdW5jdGlvbiBhKG8pe28rPWksbi5yZXN0YXJ0KGEsaSs9ZSxyKSx0KG8pfSxlLHIpLG4pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0oXCJvYmplY3RcIj09dHlwZW9mIHImJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBlP3I6bi5kMz1uLmQzfHx7fSl9LHt9XSwxNTU6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24oKXt2YXIgdD17dmVyc2lvbjpcIjMuNS4xN1wifSxyPVtdLnNsaWNlLG49ZnVuY3Rpb24odCl7cmV0dXJuIHIuY2FsbCh0KX0saT10aGlzLmRvY3VtZW50O2Z1bmN0aW9uIGEodCl7cmV0dXJuIHQmJih0Lm93bmVyRG9jdW1lbnR8fHQuZG9jdW1lbnR8fHQpLmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiBvKHQpe3JldHVybiB0JiYodC5vd25lckRvY3VtZW50JiZ0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHQuZG9jdW1lbnQmJnR8fHQuZGVmYXVsdFZpZXcpfWlmKGkpdHJ5e24oaS5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2RlcylbMF0ubm9kZVR5cGV9Y2F0Y2godCl7bj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSk7ZS0tOylyW2VdPXRbZV07cmV0dXJuIHJ9fWlmKERhdGUubm93fHwoRGF0ZS5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9KSxpKXRyeXtpLmNyZWF0ZUVsZW1lbnQoXCJESVZcIikuc3R5bGUuc2V0UHJvcGVydHkoXCJvcGFjaXR5XCIsMCxcIlwiKX1jYXRjaCh0KXt2YXIgcz10aGlzLkVsZW1lbnQucHJvdG90eXBlLGw9cy5zZXRBdHRyaWJ1dGUsYz1zLnNldEF0dHJpYnV0ZU5TLHU9dGhpcy5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZSxoPXUuc2V0UHJvcGVydHk7cy5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlKXtsLmNhbGwodGhpcyx0LGUrXCJcIil9LHMuc2V0QXR0cmlidXRlTlM9ZnVuY3Rpb24odCxlLHIpe2MuY2FsbCh0aGlzLHQsZSxyK1wiXCIpfSx1LnNldFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxyKXtoLmNhbGwodGhpcyx0LGUrXCJcIixyKX19ZnVuY3Rpb24gZih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiBwKHQpe3JldHVybiBudWxsPT09dD9OYU46K3R9ZnVuY3Rpb24gZCh0KXtyZXR1cm4haXNOYU4odCl9ZnVuY3Rpb24gZyh0KXtyZXR1cm57bGVmdDpmdW5jdGlvbihlLHIsbixpKXtmb3IoYXJndW1lbnRzLmxlbmd0aDwzJiYobj0wKSxhcmd1bWVudHMubGVuZ3RoPDQmJihpPWUubGVuZ3RoKTtuPGk7KXt2YXIgYT1uK2k+Pj4xO3QoZVthXSxyKTwwP249YSsxOmk9YX1yZXR1cm4gbn0scmlnaHQ6ZnVuY3Rpb24oZSxyLG4saSl7Zm9yKGFyZ3VtZW50cy5sZW5ndGg8MyYmKG49MCksYXJndW1lbnRzLmxlbmd0aDw0JiYoaT1lLmxlbmd0aCk7bjxpOyl7dmFyIGE9bitpPj4+MTt0KGVbYV0scik+MD9pPWE6bj1hKzF9cmV0dXJuIG59fX10LmFzY2VuZGluZz1mLHQuZGVzY2VuZGluZz1mdW5jdGlvbih0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn0sdC5taW49ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9LTEsYT10Lmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK2k8YTspaWYobnVsbCE9KG49dFtpXSkmJm4+PW4pe3I9bjticmVha31mb3IoOysraTxhOyludWxsIT0obj10W2ldKSYmcj5uJiYocj1uKX1lbHNle2Zvcig7KytpPGE7KWlmKG51bGwhPShuPWUuY2FsbCh0LHRbaV0saSkpJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2k8YTspbnVsbCE9KG49ZS5jYWxsKHQsdFtpXSxpKSkmJnI+biYmKHI9bil9cmV0dXJuIHJ9LHQubWF4PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPS0xLGE9dC5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KytpPGE7KWlmKG51bGwhPShuPXRbaV0pJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2k8YTspbnVsbCE9KG49dFtpXSkmJm4+ciYmKHI9bil9ZWxzZXtmb3IoOysraTxhOylpZihudWxsIT0obj1lLmNhbGwodCx0W2ldLGkpKSYmbj49bil7cj1uO2JyZWFrfWZvcig7KytpPGE7KW51bGwhPShuPWUuY2FsbCh0LHRbaV0saSkpJiZuPnImJihyPW4pfXJldHVybiByfSx0LmV4dGVudD1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPS0xLG89dC5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KythPG87KWlmKG51bGwhPShuPXRbYV0pJiZuPj1uKXtyPWk9bjticmVha31mb3IoOysrYTxvOyludWxsIT0obj10W2FdKSYmKHI+biYmKHI9biksaTxuJiYoaT1uKSl9ZWxzZXtmb3IoOysrYTxvOylpZihudWxsIT0obj1lLmNhbGwodCx0W2FdLGEpKSYmbj49bil7cj1pPW47YnJlYWt9Zm9yKDsrK2E8bzspbnVsbCE9KG49ZS5jYWxsKHQsdFthXSxhKSkmJihyPm4mJihyPW4pLGk8biYmKGk9bikpfXJldHVybltyLGldfSx0LnN1bT1mdW5jdGlvbih0LGUpe3ZhciByLG49MCxpPXQubGVuZ3RoLGE9LTE7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2E8aTspZChyPSt0W2FdKSYmKG4rPXIpO2Vsc2UgZm9yKDsrK2E8aTspZChyPStlLmNhbGwodCx0W2FdLGEpKSYmKG4rPXIpO3JldHVybiBufSx0Lm1lYW49ZnVuY3Rpb24odCxlKXt2YXIgcixuPTAsaT10Lmxlbmd0aCxhPS0xLG89aTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrYTxpOylkKHI9cCh0W2FdKSk/bis9cjotLW87ZWxzZSBmb3IoOysrYTxpOylkKHI9cChlLmNhbGwodCx0W2FdLGEpKSk/bis9cjotLW87aWYobylyZXR1cm4gbi9vfSx0LnF1YW50aWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHQubGVuZ3RoLTEpKmUrMSxuPU1hdGguZmxvb3IociksaT0rdFtuLTFdLGE9ci1uO3JldHVybiBhP2krYSoodFtuXS1pKTppfSx0Lm1lZGlhbj1mdW5jdGlvbihlLHIpe3ZhciBuLGk9W10sYT1lLmxlbmd0aCxvPS0xO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KytvPGE7KWQobj1wKGVbb10pKSYmaS5wdXNoKG4pO2Vsc2UgZm9yKDsrK288YTspZChuPXAoci5jYWxsKGUsZVtvXSxvKSkpJiZpLnB1c2gobik7aWYoaS5sZW5ndGgpcmV0dXJuIHQucXVhbnRpbGUoaS5zb3J0KGYpLC41KX0sdC52YXJpYW5jZT1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10Lmxlbmd0aCxhPTAsbz0wLHM9LTEsbD0wO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KytzPGk7KWQocj1wKHRbc10pKSYmKG8rPShuPXItYSkqKHItKGErPW4vKytsKSkpO2Vsc2UgZm9yKDsrK3M8aTspZChyPXAoZS5jYWxsKHQsdFtzXSxzKSkpJiYobys9KG49ci1hKSooci0oYSs9bi8rK2wpKSk7aWYobD4xKXJldHVybiBvLyhsLTEpfSx0LmRldmlhdGlvbj1mdW5jdGlvbigpe3ZhciBlPXQudmFyaWFuY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBlP01hdGguc3FydChlKTplfTt2YXIgdj1nKGYpO2Z1bmN0aW9uIG0odCl7cmV0dXJuIHQubGVuZ3RofXQuYmlzZWN0TGVmdD12LmxlZnQsdC5iaXNlY3Q9dC5iaXNlY3RSaWdodD12LnJpZ2h0LHQuYmlzZWN0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIGcoMT09PXQubGVuZ3RoP2Z1bmN0aW9uKGUscil7cmV0dXJuIGYodChlKSxyKX06dCl9LHQuc2h1ZmZsZT1mdW5jdGlvbih0LGUscil7KGE9YXJndW1lbnRzLmxlbmd0aCk8MyYmKHI9dC5sZW5ndGgsYTwyJiYoZT0wKSk7Zm9yKHZhciBuLGksYT1yLWU7YTspaT1NYXRoLnJhbmRvbSgpKmEtLXwwLG49dFthK2VdLHRbYStlXT10W2krZV0sdFtpK2VdPW47cmV0dXJuIHR9LHQucGVybXV0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09dFtlW3JdXTtyZXR1cm4gbn0sdC5wYWlycz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLTEsbj10WzBdLGk9bmV3IEFycmF5KHI8MD8wOnIpO2U8cjspaVtlXT1bbixuPXRbKytlXV07cmV0dXJuIGl9LHQudHJhbnNwb3NlPWZ1bmN0aW9uKGUpe2lmKCEoYT1lLmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciByPS0xLG49dC5taW4oZSxtKSxpPW5ldyBBcnJheShuKTsrK3I8bjspZm9yKHZhciBhLG89LTEscz1pW3JdPW5ldyBBcnJheShhKTsrK288YTspc1tvXT1lW29dW3JdO3JldHVybiBpfSx0LnppcD1mdW5jdGlvbigpe3JldHVybiB0LnRyYW5zcG9zZShhcmd1bWVudHMpfSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHIpO3JldHVybiBlfSx0LnZhbHVlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2godFtyXSk7cmV0dXJuIGV9LHQuZW50cmllcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2goe2tleTpyLHZhbHVlOnRbcl19KTtyZXR1cm4gZX0sdC5tZXJnZT1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGk9dC5sZW5ndGgsYT0tMSxvPTA7KythPGk7KW8rPXRbYV0ubGVuZ3RoO2ZvcihyPW5ldyBBcnJheShvKTstLWk+PTA7KWZvcihlPShuPXRbaV0pLmxlbmd0aDstLWU+PTA7KXJbLS1vXT1uW2VdO3JldHVybiByfTt2YXIgeT1NYXRoLmFicztmdW5jdGlvbiB4KHQsZSl7Zm9yKHZhciByIGluIGUpT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLHIse3ZhbHVlOmVbcl0sZW51bWVyYWJsZTohMX0pfWZ1bmN0aW9uIGIoKXt0aGlzLl89T2JqZWN0LmNyZWF0ZShudWxsKX10LnJhbmdlPWZ1bmN0aW9uKHQsZSxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDMmJihyPTEsYXJndW1lbnRzLmxlbmd0aDwyJiYoZT10LHQ9MCkpLChlLXQpL3I9PTEvMCl0aHJvdyBuZXcgRXJyb3IoXCJpbmZpbml0ZSByYW5nZVwiKTt2YXIgbixpPVtdLGE9ZnVuY3Rpb24odCl7dmFyIGU9MTtmb3IoO3QqZSUxOyllKj0xMDtyZXR1cm4gZX0oeShyKSksbz0tMTtpZih0Kj1hLGUqPWEsKHIqPWEpPDApZm9yKDsobj10K3IqKytvKT5lOylpLnB1c2gobi9hKTtlbHNlIGZvcig7KG49dCtyKisrbyk8ZTspaS5wdXNoKG4vYSk7cmV0dXJuIGl9LHQubWFwPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IGI7aWYodCBpbnN0YW5jZW9mIGIpdC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7ci5zZXQodCxlKX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIG4saT0tMSxhPXQubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KytpPGE7KXIuc2V0KGksdFtpXSk7ZWxzZSBmb3IoOysraTxhOylyLnNldChlLmNhbGwodCxuPXRbaV0saSksbil9ZWxzZSBmb3IodmFyIG8gaW4gdClyLnNldChvLHRbb10pO3JldHVybiByfTt2YXIgXz1cIl9fcHJvdG9fX1wiLHc9XCJcXDBcIjtmdW5jdGlvbiBrKHQpe3JldHVybih0Kz1cIlwiKT09PV98fHRbMF09PT13P3crdDp0fWZ1bmN0aW9uIEEodCl7cmV0dXJuKHQrPVwiXCIpWzBdPT09dz90LnNsaWNlKDEpOnR9ZnVuY3Rpb24gVCh0KXtyZXR1cm4gayh0KWluIHRoaXMuX31mdW5jdGlvbiBNKHQpe3JldHVybih0PWsodCkpaW4gdGhpcy5fJiZkZWxldGUgdGhpcy5fW3RdfWZ1bmN0aW9uIFMoKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcy5fKXQucHVzaChBKGUpKTtyZXR1cm4gdH1mdW5jdGlvbiBFKCl7dmFyIHQ9MDtmb3IodmFyIGUgaW4gdGhpcy5fKSsrdDtyZXR1cm4gdH1mdW5jdGlvbiBDKCl7Zm9yKHZhciB0IGluIHRoaXMuXylyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBMKCl7dGhpcy5fPU9iamVjdC5jcmVhdGUobnVsbCl9ZnVuY3Rpb24geih0KXtyZXR1cm4gdH1mdW5jdGlvbiBPKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1yLmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm4gbj09PWU/dDpufX1mdW5jdGlvbiBJKHQsZSl7aWYoZSBpbiB0KXJldHVybiBlO2U9ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnNsaWNlKDEpO2Zvcih2YXIgcj0wLG49RC5sZW5ndGg7cjxuOysrcil7dmFyIGk9RFtyXStlO2lmKGkgaW4gdClyZXR1cm4gaX19eChiLHtoYXM6VCxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX1trKHQpXX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX1trKHQpXT1lfSxyZW1vdmU6TSxrZXlzOlMsdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuXyl0LnB1c2godGhpcy5fW2VdKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl8pdC5wdXNoKHtrZXk6QShlKSx2YWx1ZTp0aGlzLl9bZV19KTtyZXR1cm4gdH0sc2l6ZTpFLGVtcHR5OkMsZm9yRWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fKXQuY2FsbCh0aGlzLEEoZSksdGhpcy5fW2VdKX19KSx0Lm5lc3Q9ZnVuY3Rpb24oKXt2YXIgZSxyLG49e30saT1bXSxhPVtdO2Z1bmN0aW9uIG8odCxhLHMpe2lmKHM+PWkubGVuZ3RoKXJldHVybiByP3IuY2FsbChuLGEpOmU/YS5zb3J0KGUpOmE7Zm9yKHZhciBsLGMsdSxoLGY9LTEscD1hLmxlbmd0aCxkPWlbcysrXSxnPW5ldyBiOysrZjxwOykoaD1nLmdldChsPWQoYz1hW2ZdKSkpP2gucHVzaChjKTpnLnNldChsLFtjXSk7cmV0dXJuIHQ/KGM9dCgpLHU9ZnVuY3Rpb24oZSxyKXtjLnNldChlLG8odCxyLHMpKX0pOihjPXt9LHU9ZnVuY3Rpb24oZSxyKXtjW2VdPW8odCxyLHMpfSksZy5mb3JFYWNoKHUpLGN9cmV0dXJuIG4ubWFwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8oZSx0LDApfSxuLmVudHJpZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyKXtpZihyPj1pLmxlbmd0aClyZXR1cm4gZTt2YXIgbj1bXSxvPWFbcisrXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUsaSl7bi5wdXNoKHtrZXk6ZSx2YWx1ZXM6dChpLHIpfSl9KSxvP24uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBvKHQua2V5LGUua2V5KX0pOm59KG8odC5tYXAsZSwwKSwwKX0sbi5rZXk9ZnVuY3Rpb24odCl7cmV0dXJuIGkucHVzaCh0KSxufSxuLnNvcnRLZXlzPWZ1bmN0aW9uKHQpe3JldHVybiBhW2kubGVuZ3RoLTFdPXQsbn0sbi5zb3J0VmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBlPXQsbn0sbi5yb2xsdXA9ZnVuY3Rpb24odCl7cmV0dXJuIHI9dCxufSxufSx0LnNldD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgTDtpZih0KWZvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuOysrcillLmFkZCh0W3JdKTtyZXR1cm4gZX0seChMLHtoYXM6VCxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX1trKHQrPVwiXCIpXT0hMCx0fSxyZW1vdmU6TSx2YWx1ZXM6UyxzaXplOkUsZW1wdHk6Qyxmb3JFYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLl8pdC5jYWxsKHRoaXMsQShlKSl9fSksdC5iZWhhdmlvcj17fSx0LnJlYmluZD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuPTEsaT1hcmd1bWVudHMubGVuZ3RoOysrbjxpOyl0W3I9YXJndW1lbnRzW25dXT1PKHQsZSxlW3JdKTtyZXR1cm4gdH07dmFyIEQ9W1wid2Via2l0XCIsXCJtc1wiLFwibW96XCIsXCJNb3pcIixcIm9cIixcIk9cIl07ZnVuY3Rpb24gUCgpe31mdW5jdGlvbiBSKCl7fWZ1bmN0aW9uIEYodCl7dmFyIGU9W10scj1uZXcgYjtmdW5jdGlvbiBuKCl7Zm9yKHZhciByLG49ZSxpPS0xLGE9bi5sZW5ndGg7KytpPGE7KShyPW5baV0ub24pJiZyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdH1yZXR1cm4gbi5vbj1mdW5jdGlvbihuLGkpe3ZhciBhLG89ci5nZXQobik7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9vJiZvLm9uOihvJiYoby5vbj1udWxsLGU9ZS5zbGljZSgwLGE9ZS5pbmRleE9mKG8pKS5jb25jYXQoZS5zbGljZShhKzEpKSxyLnJlbW92ZShuKSksaSYmZS5wdXNoKHIuc2V0KG4se29uOml9KSksdCl9LG59ZnVuY3Rpb24gQigpe3QuZXZlbnQucHJldmVudERlZmF1bHQoKX1mdW5jdGlvbiBOKCl7Zm9yKHZhciBlLHI9dC5ldmVudDtlPXIuc291cmNlRXZlbnQ7KXI9ZTtyZXR1cm4gcn1mdW5jdGlvbiBqKGUpe2Zvcih2YXIgcj1uZXcgUixuPTAsaT1hcmd1bWVudHMubGVuZ3RoOysrbjxpOylyW2FyZ3VtZW50c1tuXV09RihyKTtyZXR1cm4gci5vZj1mdW5jdGlvbihuLGkpe3JldHVybiBmdW5jdGlvbihhKXt0cnl7dmFyIG89YS5zb3VyY2VFdmVudD10LmV2ZW50O2EudGFyZ2V0PWUsdC5ldmVudD1hLHJbYS50eXBlXS5hcHBseShuLGkpfWZpbmFsbHl7dC5ldmVudD1vfX19LHJ9dC5kaXNwYXRjaD1mdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgUixlPS0xLHI9YXJndW1lbnRzLmxlbmd0aDsrK2U8cjspdFthcmd1bWVudHNbZV1dPUYodCk7cmV0dXJuIHR9LFIucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pbmRleE9mKFwiLlwiKSxuPVwiXCI7aWYocj49MCYmKG49dC5zbGljZShyKzEpLHQ9dC5zbGljZSgwLHIpKSx0KXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/dGhpc1t0XS5vbihuKTp0aGlzW3RdLm9uKG4sZSk7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgpe2lmKG51bGw9PWUpZm9yKHQgaW4gdGhpcyl0aGlzLmhhc093blByb3BlcnR5KHQpJiZ0aGlzW3RdLm9uKG4sbnVsbCk7cmV0dXJuIHRoaXN9fSx0LmV2ZW50PW51bGwsdC5yZXF1b3RlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoVixcIlxcXFwkJlwiKX07dmFyIFY9L1tcXFxcXFxeXFwkXFwqXFwrXFw/XFx8XFxbXFxdXFwoXFwpXFwuXFx7XFx9XS9nLFU9e30uX19wcm90b19fP2Z1bmN0aW9uKHQsZSl7dC5fX3Byb3RvX189ZX06ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl19O2Z1bmN0aW9uIHEodCl7cmV0dXJuIFUodCxXKSx0fXZhciBIPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUucXVlcnlTZWxlY3Rvcih0KX0sRz1mdW5jdGlvbih0LGUpe3JldHVybiBlLnF1ZXJ5U2VsZWN0b3JBbGwodCl9LFk9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lm1hdGNoZXN8fHRbSSh0LFwibWF0Y2hlc1NlbGVjdG9yXCIpXTtyZXR1cm4oWT1mdW5jdGlvbih0LGUpe3JldHVybiByLmNhbGwodCxlKX0pKHQsZSl9O1wiZnVuY3Rpb25cIj09dHlwZW9mIFNpenpsZSYmKEg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gU2l6emxlKHQsZSlbMF18fG51bGx9LEc9U2l6emxlLFk9U2l6emxlLm1hdGNoZXNTZWxlY3RvciksdC5zZWxlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdC5zZWxlY3QoaS5kb2N1bWVudEVsZW1lbnQpfTt2YXIgVz10LnNlbGVjdGlvbi5wcm90b3R5cGU9W107ZnVuY3Rpb24gWCh0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oKXtyZXR1cm4gSCh0LHRoaXMpfX1mdW5jdGlvbiBaKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpmdW5jdGlvbigpe3JldHVybiBHKHQsdGhpcyl9fVcuc2VsZWN0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9W107dD1YKHQpO2Zvcih2YXIgbz0tMSxzPXRoaXMubGVuZ3RoOysrbzxzOyl7YS5wdXNoKGU9W10pLGUucGFyZW50Tm9kZT0obj10aGlzW29dKS5wYXJlbnROb2RlO2Zvcih2YXIgbD0tMSxjPW4ubGVuZ3RoOysrbDxjOykoaT1uW2xdKT8oZS5wdXNoKHI9dC5jYWxsKGksaS5fX2RhdGFfXyxsLG8pKSxyJiZcIl9fZGF0YV9fXCJpbiBpJiYoci5fX2RhdGFfXz1pLl9fZGF0YV9fKSk6ZS5wdXNoKG51bGwpfXJldHVybiBxKGEpfSxXLnNlbGVjdEFsbD1mdW5jdGlvbih0KXt2YXIgZSxyLGk9W107dD1aKHQpO2Zvcih2YXIgYT0tMSxvPXRoaXMubGVuZ3RoOysrYTxvOylmb3IodmFyIHM9dGhpc1thXSxsPS0xLGM9cy5sZW5ndGg7KytsPGM7KShyPXNbbF0pJiYoaS5wdXNoKGU9bih0LmNhbGwocixyLl9fZGF0YV9fLGwsYSkpKSxlLnBhcmVudE5vZGU9cik7cmV0dXJuIHEoaSl9O3ZhciAkPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLEo9e3N2ZzpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIseGh0bWw6JCx4bGluazpcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIix4bWw6XCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvXCJ9O2Z1bmN0aW9uIEsoZSxyKXtyZXR1cm4gZT10Lm5zLnF1YWxpZnkoZSksbnVsbD09cj9lLmxvY2FsP2Z1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfTpmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfTpcImZ1bmN0aW9uXCI9PXR5cGVvZiByP2UubG9jYWw/ZnVuY3Rpb24oKXt2YXIgdD1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT10P3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0KX06ZnVuY3Rpb24oKXt2YXIgdD1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT10P3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUsdCl9OmUubG9jYWw/ZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxyKX06ZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHIpfX1mdW5jdGlvbiBRKHQpe3JldHVybiB0LnRyaW0oKS5yZXBsYWNlKC9cXHMrL2csXCIgXCIpfWZ1bmN0aW9uIHR0KGUpe3JldHVybiBuZXcgUmVnRXhwKFwiKD86XnxcXFxccyspXCIrdC5yZXF1b3RlKGUpK1wiKD86XFxcXHMrfCQpXCIsXCJnXCIpfWZ1bmN0aW9uIGV0KHQpe3JldHVybih0K1wiXCIpLnRyaW0oKS5zcGxpdCgvXnxcXHMrLyl9ZnVuY3Rpb24gcnQodCxlKXt2YXIgcj0odD1ldCh0KS5tYXAobnQpKS5sZW5ndGg7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9mdW5jdGlvbigpe2Zvcih2YXIgbj0tMSxpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOysrbjxyOyl0W25dKHRoaXMsaSl9OmZ1bmN0aW9uKCl7Zm9yKHZhciBuPS0xOysrbjxyOyl0W25dKHRoaXMsZSl9fWZ1bmN0aW9uIG50KHQpe3ZhciBlPXR0KHQpO3JldHVybiBmdW5jdGlvbihyLG4pe2lmKGk9ci5jbGFzc0xpc3QpcmV0dXJuIG4/aS5hZGQodCk6aS5yZW1vdmUodCk7dmFyIGk9ci5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIjtuPyhlLmxhc3RJbmRleD0wLGUudGVzdChpKXx8ci5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLFEoaStcIiBcIit0KSkpOnIuc2V0QXR0cmlidXRlKFwiY2xhc3NcIixRKGkucmVwbGFjZShlLFwiIFwiKSkpfX1mdW5jdGlvbiBpdCh0LGUscil7cmV0dXJuIG51bGw9PWU/ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2Z1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxuLHIpfTpmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLHIpfX1mdW5jdGlvbiBhdCh0LGUpe3JldHVybiBudWxsPT1lP2Z1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19OlwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZnVuY3Rpb24oKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP2RlbGV0ZSB0aGlzW3RdOnRoaXNbdF09cn06ZnVuY3Rpb24oKXt0aGlzW3RdPWV9fWZ1bmN0aW9uIG90KGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTooZT10Lm5zLnF1YWxpZnkoZSkpLmxvY2FsP2Z1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZS5zcGFjZSxlLmxvY2FsKX06ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQscj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gcj09PSQmJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PSQ/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIHN0KCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gbHQodCl7cmV0dXJue19fZGF0YV9fOnR9fWZ1bmN0aW9uIGN0KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBZKHRoaXMsdCl9fWZ1bmN0aW9uIHV0KHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aDtyPG47cisrKWZvcih2YXIgaSxhPXRbcl0sbz0wLHM9YS5sZW5ndGg7bzxzO28rKykoaT1hW29dKSYmZShpLG8scik7cmV0dXJuIHR9ZnVuY3Rpb24gaHQodCl7cmV0dXJuIFUodCxmdCksdH10Lm5zPXtwcmVmaXg6SixxdWFsaWZ5OmZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZihcIjpcIikscj10O3JldHVybiBlPj0wJiZcInhtbG5zXCIhPT0ocj10LnNsaWNlKDAsZSkpJiYodD10LnNsaWNlKGUrMSkpLEouaGFzT3duUHJvcGVydHkocik/e3NwYWNlOkpbcl0sbG9jYWw6dH06dH19LFcuYXR0cj1mdW5jdGlvbihlLHIpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybihlPXQubnMucXVhbGlmeShlKSkubG9jYWw/bi5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOm4uZ2V0QXR0cmlidXRlKGUpfWZvcihyIGluIGUpdGhpcy5lYWNoKEsocixlW3JdKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaChLKGUscikpfSxXLmNsYXNzZWQ9ZnVuY3Rpb24odCxlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXt2YXIgcj10aGlzLm5vZGUoKSxuPSh0PWV0KHQpKS5sZW5ndGgsaT0tMTtpZihlPXIuY2xhc3NMaXN0KXtmb3IoOysraTxuOylpZighZS5jb250YWlucyh0W2ldKSlyZXR1cm4hMX1lbHNlIGZvcihlPXIuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIik7KytpPG47KWlmKCF0dCh0W2ldKS50ZXN0KGUpKXJldHVybiExO3JldHVybiEwfWZvcihlIGluIHQpdGhpcy5lYWNoKHJ0KGUsdFtlXSkpO3JldHVybiB0aGlzfXJldHVybiB0aGlzLmVhY2gocnQodCxlKSl9LFcuc3R5bGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7aWYobjwzKXtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl7Zm9yKHIgaW4gbjwyJiYoZT1cIlwiKSx0KXRoaXMuZWFjaChpdChyLHRbcl0sZSkpO3JldHVybiB0aGlzfWlmKG48Mil7dmFyIGk9dGhpcy5ub2RlKCk7cmV0dXJuIG8oaSkuZ2V0Q29tcHV0ZWRTdHlsZShpLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCl9cj1cIlwifXJldHVybiB0aGlzLmVhY2goaXQodCxlLHIpKX0sVy5wcm9wZXJ0eT1mdW5jdGlvbih0LGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpcmV0dXJuIHRoaXMubm9kZSgpW3RdO2ZvcihlIGluIHQpdGhpcy5lYWNoKGF0KGUsdFtlXSkpO3JldHVybiB0aGlzfXJldHVybiB0aGlzLmVhY2goYXQodCxlKSl9LFcudGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goXCJmdW5jdGlvblwiPT10eXBlb2YgdD9mdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT9cIlwiOmV9Om51bGw9PXQ/ZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PVwiXCJ9OmZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LFcuaHRtbD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goXCJmdW5jdGlvblwiPT10eXBlb2YgdD9mdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PWU/XCJcIjplfTpudWxsPT10P2Z1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9XCJcIn06ZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxXLmFwcGVuZD1mdW5jdGlvbih0KXtyZXR1cm4gdD1vdCh0KSx0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfSxXLmluc2VydD1mdW5jdGlvbih0LGUpe3JldHVybiB0PW90KHQpLGU9WChlKSx0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZSh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX0sVy5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKHN0KX0sVy5kYXRhPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPS0xLGE9dGhpcy5sZW5ndGg7aWYoIWFyZ3VtZW50cy5sZW5ndGgpe2Zvcih0PW5ldyBBcnJheShhPShyPXRoaXNbMF0pLmxlbmd0aCk7KytpPGE7KShuPXJbaV0pJiYodFtpXT1uLl9fZGF0YV9fKTtyZXR1cm4gdH1mdW5jdGlvbiBvKHQscil7dmFyIG4saSxhLG89dC5sZW5ndGgsdT1yLmxlbmd0aCxoPU1hdGgubWluKG8sdSksZj1uZXcgQXJyYXkodSkscD1uZXcgQXJyYXkodSksZD1uZXcgQXJyYXkobyk7aWYoZSl7dmFyIGcsdj1uZXcgYixtPW5ldyBBcnJheShvKTtmb3Iobj0tMTsrK248bzspKGk9dFtuXSkmJih2LmhhcyhnPWUuY2FsbChpLGkuX19kYXRhX18sbikpP2Rbbl09aTp2LnNldChnLGkpLG1bbl09Zyk7Zm9yKG49LTE7KytuPHU7KShpPXYuZ2V0KGc9ZS5jYWxsKHIsYT1yW25dLG4pKSk/ITAhPT1pJiYoZltuXT1pLGkuX19kYXRhX189YSk6cFtuXT1sdChhKSx2LnNldChnLCEwKTtmb3Iobj0tMTsrK248bzspbiBpbiBtJiYhMCE9PXYuZ2V0KG1bbl0pJiYoZFtuXT10W25dKX1lbHNle2ZvcihuPS0xOysrbjxoOylpPXRbbl0sYT1yW25dLGk/KGkuX19kYXRhX189YSxmW25dPWkpOnBbbl09bHQoYSk7Zm9yKDtuPHU7KytuKXBbbl09bHQocltuXSk7Zm9yKDtuPG87KytuKWRbbl09dFtuXX1wLnVwZGF0ZT1mLHAucGFyZW50Tm9kZT1mLnBhcmVudE5vZGU9ZC5wYXJlbnROb2RlPXQucGFyZW50Tm9kZSxzLnB1c2gocCksbC5wdXNoKGYpLGMucHVzaChkKX12YXIgcz1odChbXSksbD1xKFtdKSxjPXEoW10pO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpZm9yKDsrK2k8YTspbyhyPXRoaXNbaV0sdC5jYWxsKHIsci5wYXJlbnROb2RlLl9fZGF0YV9fLGkpKTtlbHNlIGZvcig7KytpPGE7KW8ocj10aGlzW2ldLHQpO3JldHVybiBsLmVudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHN9LGwuZXhpdD1mdW5jdGlvbigpe3JldHVybiBjfSxsfSxXLmRhdHVtPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoXCJfX2RhdGFfX1wiLHQpOnRoaXMucHJvcGVydHkoXCJfX2RhdGFfX1wiKX0sVy5maWx0ZXI9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9W107XCJmdW5jdGlvblwiIT10eXBlb2YgdCYmKHQ9Y3QodCkpO2Zvcih2YXIgYT0wLG89dGhpcy5sZW5ndGg7YTxvO2ErKyl7aS5wdXNoKGU9W10pLGUucGFyZW50Tm9kZT0ocj10aGlzW2FdKS5wYXJlbnROb2RlO2Zvcih2YXIgcz0wLGw9ci5sZW5ndGg7czxsO3MrKykobj1yW3NdKSYmdC5jYWxsKG4sbi5fX2RhdGFfXyxzLGEpJiZlLnB1c2gobil9cmV0dXJuIHEoaSl9LFcub3JkZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTEsZT10aGlzLmxlbmd0aDsrK3Q8ZTspZm9yKHZhciByLG49dGhpc1t0XSxpPW4ubGVuZ3RoLTEsYT1uW2ldOy0taT49MDspKHI9bltpXSkmJihhJiZhIT09ci5uZXh0U2libGluZyYmYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLGEpLGE9cik7cmV0dXJuIHRoaXN9LFcuc29ydD1mdW5jdGlvbih0KXt0PWZ1bmN0aW9uKHQpe2FyZ3VtZW50cy5sZW5ndGh8fCh0PWYpO3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVybiBlJiZyP3QoZS5fX2RhdGFfXyxyLl9fZGF0YV9fKTohZS0hcn19LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtmb3IodmFyIGU9LTEscj10aGlzLmxlbmd0aDsrK2U8cjspdGhpc1tlXS5zb3J0KHQpO3JldHVybiB0aGlzLm9yZGVyKCl9LFcuZWFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdXQodGhpcyxmdW5jdGlvbihlLHIsbil7dC5jYWxsKGUsZS5fX2RhdGFfXyxyLG4pfSl9LFcuY2FsbD1mdW5jdGlvbih0KXt2YXIgZT1uKGFyZ3VtZW50cyk7cmV0dXJuIHQuYXBwbHkoZVswXT10aGlzLGUpLHRoaXN9LFcuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LFcubm9kZT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9dGhpcy5sZW5ndGg7dDxlO3QrKylmb3IodmFyIHI9dGhpc1t0XSxuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXt2YXIgYT1yW25dO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9LFcuc2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHV0KHRoaXMsZnVuY3Rpb24oKXsrK3R9KSx0fTt2YXIgZnQ9W107ZnVuY3Rpb24gcHQoZSxyLGkpe3ZhciBhPVwiX19vblwiK2Usbz1lLmluZGV4T2YoXCIuXCIpLHM9Z3Q7bz4wJiYoZT1lLnNsaWNlKDAsbykpO3ZhciBsPWR0LmdldChlKTtmdW5jdGlvbiBjKCl7dmFyIHQ9dGhpc1thXTt0JiYodGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGUsdCx0LiQpLGRlbGV0ZSB0aGlzW2FdKX1yZXR1cm4gbCYmKGU9bCxzPXZ0KSxvP3I/ZnVuY3Rpb24oKXt2YXIgdD1zKHIsbihhcmd1bWVudHMpKTtjLmNhbGwodGhpcyksdGhpcy5hZGRFdmVudExpc3RlbmVyKGUsdGhpc1thXT10LHQuJD1pKSx0Ll89cn06YzpyP1A6ZnVuY3Rpb24oKXt2YXIgcixuPW5ldyBSZWdFeHAoXCJeX19vbihbXi5dKylcIit0LnJlcXVvdGUoZSkrXCIkXCIpO2Zvcih2YXIgaSBpbiB0aGlzKWlmKHI9aS5tYXRjaChuKSl7dmFyIGE9dGhpc1tpXTt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoclsxXSxhLGEuJCksZGVsZXRlIHRoaXNbaV19fX10LnNlbGVjdGlvbi5lbnRlcj1odCx0LnNlbGVjdGlvbi5lbnRlci5wcm90b3R5cGU9ZnQsZnQuYXBwZW5kPVcuYXBwZW5kLGZ0LmVtcHR5PVcuZW1wdHksZnQubm9kZT1XLm5vZGUsZnQuY2FsbD1XLmNhbGwsZnQuc2l6ZT1XLnNpemUsZnQuc2VsZWN0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxhLG89W10scz0tMSxsPXRoaXMubGVuZ3RoOysrczxsOyl7bj0oaT10aGlzW3NdKS51cGRhdGUsby5wdXNoKGU9W10pLGUucGFyZW50Tm9kZT1pLnBhcmVudE5vZGU7Zm9yKHZhciBjPS0xLHU9aS5sZW5ndGg7KytjPHU7KShhPWlbY10pPyhlLnB1c2gobltjXT1yPXQuY2FsbChpLnBhcmVudE5vZGUsYS5fX2RhdGFfXyxjLHMpKSxyLl9fZGF0YV9fPWEuX19kYXRhX18pOmUucHVzaChudWxsKX1yZXR1cm4gcShvKX0sZnQuaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDImJihyPXRoaXMsZT1mdW5jdGlvbih0LGUsYSl7dmFyIG8scz1yW2FdLnVwZGF0ZSxsPXMubGVuZ3RoO2ZvcihhIT1pJiYoaT1hLG49MCksZT49biYmKG49ZSsxKTshKG89c1tuXSkmJisrbjxsOyk7cmV0dXJuIG99KSxXLmluc2VydC5jYWxsKHRoaXMsdCxlKX0sdC5zZWxlY3Q9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQ/KGU9W0godCxpKV0pLnBhcmVudE5vZGU9aS5kb2N1bWVudEVsZW1lbnQ6KGU9W3RdKS5wYXJlbnROb2RlPWEodCkscShbZV0pfSx0LnNlbGVjdEFsbD1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdD8oZT1uKEcodCxpKSkpLnBhcmVudE5vZGU9aS5kb2N1bWVudEVsZW1lbnQ6KGU9bih0KSkucGFyZW50Tm9kZT1udWxsLHEoW2VdKX0sVy5vbj1mdW5jdGlvbih0LGUscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtpZihuPDMpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXtmb3IociBpbiBuPDImJihlPSExKSx0KXRoaXMuZWFjaChwdChyLHRbcl0sZSkpO3JldHVybiB0aGlzfWlmKG48MilyZXR1cm4obj10aGlzLm5vZGUoKVtcIl9fb25cIit0XSkmJm4uXztyPSExfXJldHVybiB0aGlzLmVhY2gocHQodCxlLHIpKX07dmFyIGR0PXQubWFwKHttb3VzZWVudGVyOlwibW91c2VvdmVyXCIsbW91c2VsZWF2ZTpcIm1vdXNlb3V0XCJ9KTtmdW5jdGlvbiBndChlLHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT10LmV2ZW50O3QuZXZlbnQ9bixyWzBdPXRoaXMuX19kYXRhX187dHJ5e2UuYXBwbHkodGhpcyxyKX1maW5hbGx5e3QuZXZlbnQ9aX19fWZ1bmN0aW9uIHZ0KHQsZSl7dmFyIHI9Z3QodCxlKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5yZWxhdGVkVGFyZ2V0O2UmJihlPT09dGhpc3x8OCZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8ci5jYWxsKHRoaXMsdCl9fWkmJmR0LmZvckVhY2goZnVuY3Rpb24odCl7XCJvblwiK3QgaW4gaSYmZHQucmVtb3ZlKHQpfSk7dmFyIG10LHl0PTA7ZnVuY3Rpb24geHQoZSl7dmFyIHI9XCIuZHJhZ3N1cHByZXNzLVwiKyArK3l0LG49XCJjbGlja1wiK3IsaT10LnNlbGVjdChvKGUpKS5vbihcInRvdWNobW92ZVwiK3IsQikub24oXCJkcmFnc3RhcnRcIityLEIpLm9uKFwic2VsZWN0c3RhcnRcIityLEIpO2lmKG51bGw9PW10JiYobXQ9IShcIm9uc2VsZWN0c3RhcnRcImluIGUpJiZJKGUuc3R5bGUsXCJ1c2VyU2VsZWN0XCIpKSxtdCl7dmFyIHM9YShlKS5zdHlsZSxsPXNbbXRdO3NbbXRdPVwibm9uZVwifXJldHVybiBmdW5jdGlvbih0KXtpZihpLm9uKHIsbnVsbCksbXQmJihzW210XT1sKSx0KXt2YXIgZT1mdW5jdGlvbigpe2kub24obixudWxsKX07aS5vbihuLGZ1bmN0aW9uKCl7QigpLGUoKX0sITApLHNldFRpbWVvdXQoZSwwKX19fXQubW91c2U9ZnVuY3Rpb24odCl7cmV0dXJuIF90KHQsTigpKX07dmFyIGJ0PXRoaXMubmF2aWdhdG9yJiYvV2ViS2l0Ly50ZXN0KHRoaXMubmF2aWdhdG9yLnVzZXJBZ2VudCk/LTE6MDtmdW5jdGlvbiBfdChlLHIpe3IuY2hhbmdlZFRvdWNoZXMmJihyPXIuY2hhbmdlZFRvdWNoZXNbMF0pO3ZhciBuPWUub3duZXJTVkdFbGVtZW50fHxlO2lmKG4uY3JlYXRlU1ZHUG9pbnQpe3ZhciBpPW4uY3JlYXRlU1ZHUG9pbnQoKTtpZihidDwwKXt2YXIgYT1vKGUpO2lmKGEuc2Nyb2xsWHx8YS5zY3JvbGxZKXt2YXIgcz0obj10LnNlbGVjdChcImJvZHlcIikuYXBwZW5kKFwic3ZnXCIpLnN0eWxlKHtwb3NpdGlvbjpcImFic29sdXRlXCIsdG9wOjAsbGVmdDowLG1hcmdpbjowLHBhZGRpbmc6MCxib3JkZXI6XCJub25lXCJ9LFwiaW1wb3J0YW50XCIpKVswXVswXS5nZXRTY3JlZW5DVE0oKTtidD0hKHMuZnx8cy5lKSxuLnJlbW92ZSgpfX1yZXR1cm4gYnQ/KGkueD1yLnBhZ2VYLGkueT1yLnBhZ2VZKTooaS54PXIuY2xpZW50WCxpLnk9ci5jbGllbnRZKSxbKGk9aS5tYXRyaXhUcmFuc2Zvcm0oZS5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpKS54LGkueV19dmFyIGw9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bci5jbGllbnRYLWwubGVmdC1lLmNsaWVudExlZnQsci5jbGllbnRZLWwudG9wLWUuY2xpZW50VG9wXX1mdW5jdGlvbiB3dCgpe3JldHVybiB0LmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXJ9dC50b3VjaD1mdW5jdGlvbih0LGUscil7aWYoYXJndW1lbnRzLmxlbmd0aDwzJiYocj1lLGU9TigpLmNoYW5nZWRUb3VjaGVzKSxlKWZvcih2YXIgbixpPTAsYT1lLmxlbmd0aDtpPGE7KytpKWlmKChuPWVbaV0pLmlkZW50aWZpZXI9PT1yKXJldHVybiBfdCh0LG4pfSx0LmJlaGF2aW9yLmRyYWc9ZnVuY3Rpb24oKXt2YXIgZT1qKGEsXCJkcmFnXCIsXCJkcmFnc3RhcnRcIixcImRyYWdlbmRcIikscj1udWxsLG49cyhQLHQubW91c2UsbyxcIm1vdXNlbW92ZVwiLFwibW91c2V1cFwiKSxpPXMod3QsdC50b3VjaCx6LFwidG91Y2htb3ZlXCIsXCJ0b3VjaGVuZFwiKTtmdW5jdGlvbiBhKCl7dGhpcy5vbihcIm1vdXNlZG93bi5kcmFnXCIsbikub24oXCJ0b3VjaHN0YXJ0LmRyYWdcIixpKX1mdW5jdGlvbiBzKG4saSxhLG8scyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGwsYz10LmV2ZW50LnRhcmdldC5jb3JyZXNwb25kaW5nRWxlbWVudHx8dC5ldmVudC50YXJnZXQsdT10aGlzLnBhcmVudE5vZGUsaD1lLm9mKHRoaXMsYXJndW1lbnRzKSxmPTAscD1uKCksZD1cIi5kcmFnXCIrKG51bGw9PXA/XCJcIjpcIi1cIitwKSxnPXQuc2VsZWN0KGEoYykpLm9uKG8rZCxmdW5jdGlvbigpe3ZhciB0LGUscj1pKHUscCk7aWYoIXIpcmV0dXJuO3Q9clswXS1tWzBdLGU9clsxXS1tWzFdLGZ8PXR8ZSxtPXIsaCh7dHlwZTpcImRyYWdcIix4OnJbMF0rbFswXSx5OnJbMV0rbFsxXSxkeDp0LGR5OmV9KX0pLm9uKHMrZCxmdW5jdGlvbigpe2lmKCFpKHUscCkpcmV0dXJuO2cub24obytkLG51bGwpLm9uKHMrZCxudWxsKSx2KGYpLGgoe3R5cGU6XCJkcmFnZW5kXCJ9KX0pLHY9eHQoYyksbT1pKHUscCk7bD1yP1sobD1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkueC1tWzBdLGwueS1tWzFdXTpbMCwwXSxoKHt0eXBlOlwiZHJhZ3N0YXJ0XCJ9KX19cmV0dXJuIGEub3JpZ2luPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sdC5yZWJpbmQoYSxlLFwib25cIil9LHQudG91Y2hlcz1mdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDImJihlPU4oKS50b3VjaGVzKSxlP24oZSkubWFwKGZ1bmN0aW9uKGUpe3ZhciByPV90KHQsZSk7cmV0dXJuIHIuaWRlbnRpZmllcj1lLmlkZW50aWZpZXIscn0pOltdfTt2YXIga3Q9MWUtNixBdD1rdCprdCxUdD1NYXRoLlBJLE10PTIqVHQsU3Q9TXQta3QsRXQ9VHQvMixDdD1UdC8xODAsTHQ9MTgwL1R0O2Z1bmN0aW9uIHp0KHQpe3JldHVybiB0PjA/MTp0PDA/LTE6MH1mdW5jdGlvbiBPdCh0LGUscil7cmV0dXJuKGVbMF0tdFswXSkqKHJbMV0tdFsxXSktKGVbMV0tdFsxXSkqKHJbMF0tdFswXSl9ZnVuY3Rpb24gSXQodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/VHQ6TWF0aC5hY29zKHQpfWZ1bmN0aW9uIER0KHQpe3JldHVybiB0PjE/RXQ6dDwtMT8tRXQ6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIFB0KHQpe3JldHVybigodD1NYXRoLmV4cCh0KSkrMS90KS8yfWZ1bmN0aW9uIFJ0KHQpe3JldHVybih0PU1hdGguc2luKHQvMikpKnR9dmFyIEZ0PU1hdGguU1FSVDI7dC5pbnRlcnBvbGF0ZVpvb209ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dFswXSxhPXRbMV0sbz10WzJdLHM9ZVswXSxsPWVbMV0sYz1lWzJdLHU9cy1pLGg9bC1hLGY9dSp1K2gqaDtpZihmPEF0KW49TWF0aC5sb2coYy9vKS9GdCxyPWZ1bmN0aW9uKHQpe3JldHVybltpK3QqdSxhK3QqaCxvKk1hdGguZXhwKEZ0KnQqbildfTtlbHNle3ZhciBwPU1hdGguc3FydChmKSxkPShjKmMtbypvKzQqZikvKDIqbyoyKnApLGc9KGMqYy1vKm8tNCpmKS8oMipjKjIqcCksdj1NYXRoLmxvZyhNYXRoLnNxcnQoZCpkKzEpLWQpLG09TWF0aC5sb2coTWF0aC5zcXJ0KGcqZysxKS1nKTtuPShtLXYpL0Z0LHI9ZnVuY3Rpb24odCl7dmFyIGUscj10Km4scz1QdCh2KSxsPW8vKDIqcCkqKHMqKGU9RnQqcit2LCgoZT1NYXRoLmV4cCgyKmUpKS0xKS8oZSsxKSktZnVuY3Rpb24odCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKS0xL3QpLzJ9KHYpKTtyZXR1cm5baStsKnUsYStsKmgsbypzL1B0KEZ0KnIrdildfX1yZXR1cm4gci5kdXJhdGlvbj0xZTMqbixyfSx0LmJlaGF2aW9yLnpvb209ZnVuY3Rpb24oKXt2YXIgZSxyLG4sYSxzLGwsYyx1LGgsZj17eDowLHk6MCxrOjF9LHA9Wzk2MCw1MDBdLGQ9anQsZz0yNTAsdj0wLG09XCJtb3VzZWRvd24uem9vbVwiLHk9XCJtb3VzZW1vdmUuem9vbVwiLHg9XCJtb3VzZXVwLnpvb21cIixiPVwidG91Y2hzdGFydC56b29tXCIsXz1qKHcsXCJ6b29tc3RhcnRcIixcInpvb21cIixcInpvb21lbmRcIik7ZnVuY3Rpb24gdyh0KXt0Lm9uKG0seikub24oTnQrXCIuem9vbVwiLEkpLm9uKFwiZGJsY2xpY2suem9vbVwiLEQpLm9uKGIsTyl9ZnVuY3Rpb24gayh0KXtyZXR1cm5bKHRbMF0tZi54KS9mLmssKHRbMV0tZi55KS9mLmtdfWZ1bmN0aW9uIEEodCl7Zi5rPU1hdGgubWF4KGRbMF0sTWF0aC5taW4oZFsxXSx0KSl9ZnVuY3Rpb24gVCh0LGUpe2U9ZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0qZi5rK2YueCx0WzFdKmYuaytmLnldfShlKSxmLngrPXRbMF0tZVswXSxmLnkrPXRbMV0tZVsxXX1mdW5jdGlvbiBNKGUsbixpLGEpe2UuX19jaGFydF9fPXt4OmYueCx5OmYueSxrOmYua30sQShNYXRoLnBvdygyLGEpKSxUKHI9bixpKSxlPXQuc2VsZWN0KGUpLGc+MCYmKGU9ZS50cmFuc2l0aW9uKCkuZHVyYXRpb24oZykpLGUuY2FsbCh3LmV2ZW50KX1mdW5jdGlvbiBTKCl7YyYmYy5kb21haW4obC5yYW5nZSgpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4odC1mLngpL2Yua30pLm1hcChsLmludmVydCkpLGgmJmguZG9tYWluKHUucmFuZ2UoKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuKHQtZi55KS9mLmt9KS5tYXAodS5pbnZlcnQpKX1mdW5jdGlvbiBFKHQpe3YrK3x8dCh7dHlwZTpcInpvb21zdGFydFwifSl9ZnVuY3Rpb24gQyh0KXtTKCksdCh7dHlwZTpcInpvb21cIixzY2FsZTpmLmssdHJhbnNsYXRlOltmLngsZi55XX0pfWZ1bmN0aW9uIEwodCl7LS12fHwodCh7dHlwZTpcInpvb21lbmRcIn0pLHI9bnVsbCl9ZnVuY3Rpb24geigpe3ZhciBlPXRoaXMscj1fLm9mKGUsYXJndW1lbnRzKSxuPTAsaT10LnNlbGVjdChvKGUpKS5vbih5LGZ1bmN0aW9uKCl7bj0xLFQodC5tb3VzZShlKSxhKSxDKHIpfSkub24oeCxmdW5jdGlvbigpe2kub24oeSxudWxsKS5vbih4LG51bGwpLHMobiksTChyKX0pLGE9ayh0Lm1vdXNlKGUpKSxzPXh0KGUpO2hzLmNhbGwoZSksRShyKX1mdW5jdGlvbiBPKCl7dmFyIGUscj10aGlzLG49Xy5vZihyLGFyZ3VtZW50cyksaT17fSxhPTAsbz1cIi56b29tLVwiK3QuZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uaWRlbnRpZmllcixsPVwidG91Y2htb3ZlXCIrbyxjPVwidG91Y2hlbmRcIitvLHU9W10saD10LnNlbGVjdChyKSxwPXh0KHIpO2Z1bmN0aW9uIGQoKXt2YXIgbj10LnRvdWNoZXMocik7cmV0dXJuIGU9Zi5rLG4uZm9yRWFjaChmdW5jdGlvbih0KXt0LmlkZW50aWZpZXIgaW4gaSYmKGlbdC5pZGVudGlmaWVyXT1rKHQpKX0pLG59ZnVuY3Rpb24gZygpe3ZhciBlPXQuZXZlbnQudGFyZ2V0O3Quc2VsZWN0KGUpLm9uKGwsdikub24oYyx5KSx1LnB1c2goZSk7Zm9yKHZhciBuPXQuZXZlbnQuY2hhbmdlZFRvdWNoZXMsbz0wLGg9bi5sZW5ndGg7bzxoOysrbylpW25bb10uaWRlbnRpZmllcl09bnVsbDt2YXIgcD1kKCksZz1EYXRlLm5vdygpO2lmKDE9PT1wLmxlbmd0aCl7aWYoZy1zPDUwMCl7dmFyIG09cFswXTtNKHIsbSxpW20uaWRlbnRpZmllcl0sTWF0aC5mbG9vcihNYXRoLmxvZyhmLmspL01hdGguTE4yKSsxKSxCKCl9cz1nfWVsc2UgaWYocC5sZW5ndGg+MSl7bT1wWzBdO3ZhciB4PXBbMV0sYj1tWzBdLXhbMF0sXz1tWzFdLXhbMV07YT1iKmIrXypffX1mdW5jdGlvbiB2KCl7dmFyIG8sbCxjLHUsaD10LnRvdWNoZXMocik7aHMuY2FsbChyKTtmb3IodmFyIGY9MCxwPWgubGVuZ3RoO2Y8cDsrK2YsdT1udWxsKWlmKGM9aFtmXSx1PWlbYy5pZGVudGlmaWVyXSl7aWYobClicmVhaztvPWMsbD11fWlmKHUpe3ZhciBkPShkPWNbMF0tb1swXSkqZCsoZD1jWzFdLW9bMV0pKmQsZz1hJiZNYXRoLnNxcnQoZC9hKTtvPVsob1swXStjWzBdKS8yLChvWzFdK2NbMV0pLzJdLGw9WyhsWzBdK3VbMF0pLzIsKGxbMV0rdVsxXSkvMl0sQShnKmUpfXM9bnVsbCxUKG8sbCksQyhuKX1mdW5jdGlvbiB5KCl7aWYodC5ldmVudC50b3VjaGVzLmxlbmd0aCl7Zm9yKHZhciBlPXQuZXZlbnQuY2hhbmdlZFRvdWNoZXMscj0wLGE9ZS5sZW5ndGg7cjxhOysrcilkZWxldGUgaVtlW3JdLmlkZW50aWZpZXJdO2Zvcih2YXIgcyBpbiBpKXJldHVybiB2b2lkIGQoKX10LnNlbGVjdEFsbCh1KS5vbihvLG51bGwpLGgub24obSx6KS5vbihiLE8pLHAoKSxMKG4pfWcoKSxFKG4pLGgub24obSxudWxsKS5vbihiLGcpfWZ1bmN0aW9uIEkoKXt2YXIgaT1fLm9mKHRoaXMsYXJndW1lbnRzKTthP2NsZWFyVGltZW91dChhKTooaHMuY2FsbCh0aGlzKSxlPWsocj1ufHx0Lm1vdXNlKHRoaXMpKSxFKGkpKSxhPXNldFRpbWVvdXQoZnVuY3Rpb24oKXthPW51bGwsTChpKX0sNTApLEIoKSxBKE1hdGgucG93KDIsLjAwMipCdCgpKSpmLmspLFQocixlKSxDKGkpfWZ1bmN0aW9uIEQoKXt2YXIgZT10Lm1vdXNlKHRoaXMpLHI9TWF0aC5sb2coZi5rKS9NYXRoLkxOMjtNKHRoaXMsZSxrKGUpLHQuZXZlbnQuc2hpZnRLZXk/TWF0aC5jZWlsKHIpLTE6TWF0aC5mbG9vcihyKSsxKX1yZXR1cm4gTnR8fChOdD1cIm9ud2hlZWxcImluIGk/KEJ0PWZ1bmN0aW9uKCl7cmV0dXJuLXQuZXZlbnQuZGVsdGFZKih0LmV2ZW50LmRlbHRhTW9kZT8xMjA6MSl9LFwid2hlZWxcIik6XCJvbm1vdXNld2hlZWxcImluIGk/KEJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuZXZlbnQud2hlZWxEZWx0YX0sXCJtb3VzZXdoZWVsXCIpOihCdD1mdW5jdGlvbigpe3JldHVybi10LmV2ZW50LmRldGFpbH0sXCJNb3pNb3VzZVBpeGVsU2Nyb2xsXCIpKSx3LmV2ZW50PWZ1bmN0aW9uKGUpe2UuZWFjaChmdW5jdGlvbigpe3ZhciBlPV8ub2YodGhpcyxhcmd1bWVudHMpLG49Zjtkcz90LnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZWFjaChcInN0YXJ0Lnpvb21cIixmdW5jdGlvbigpe2Y9dGhpcy5fX2NoYXJ0X198fHt4OjAseTowLGs6MX0sRShlKX0pLnR3ZWVuKFwiem9vbTp6b29tXCIsZnVuY3Rpb24oKXt2YXIgaT1wWzBdLGE9cFsxXSxvPXI/clswXTppLzIscz1yP3JbMV06YS8yLGw9dC5pbnRlcnBvbGF0ZVpvb20oWyhvLWYueCkvZi5rLChzLWYueSkvZi5rLGkvZi5rXSxbKG8tbi54KS9uLmssKHMtbi55KS9uLmssaS9uLmtdKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9bCh0KSxuPWkvclsyXTt0aGlzLl9fY2hhcnRfXz1mPXt4Om8tclswXSpuLHk6cy1yWzFdKm4sazpufSxDKGUpfX0pLmVhY2goXCJpbnRlcnJ1cHQuem9vbVwiLGZ1bmN0aW9uKCl7TChlKX0pLmVhY2goXCJlbmQuem9vbVwiLGZ1bmN0aW9uKCl7TChlKX0pOih0aGlzLl9fY2hhcnRfXz1mLEUoZSksQyhlKSxMKGUpKX0pfSx3LnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj17eDordFswXSx5Oit0WzFdLGs6Zi5rfSxTKCksdyk6W2YueCxmLnldfSx3LnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPXt4OmYueCx5OmYueSxrOm51bGx9LEEoK3QpLFMoKSx3KTpmLmt9LHcuc2NhbGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9bnVsbD09dD9qdDpbK3RbMF0sK3RbMV1dLHcpOmR9LHcuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQmJlsrdFswXSwrdFsxXV0sdyk6bn0sdy5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPXQmJlsrdFswXSwrdFsxXV0sdyk6cH0sdy5kdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0rdCx3KTpnfSx3Lng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCxsPXQuY29weSgpLGY9e3g6MCx5OjAsazoxfSx3KTpjfSx3Lnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9dCx1PXQuY29weSgpLGY9e3g6MCx5OjAsazoxfSx3KTpofSx0LnJlYmluZCh3LF8sXCJvblwiKX07dmFyIEJ0LE50LGp0PVswLDEvMF07ZnVuY3Rpb24gVnQoKXt9ZnVuY3Rpb24gVXQodCxlLHIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgVXQ/KHRoaXMuaD0rdCx0aGlzLnM9K2Usdm9pZCh0aGlzLmw9K3IpKTphcmd1bWVudHMubGVuZ3RoPDI/dCBpbnN0YW5jZW9mIFV0P25ldyBVdCh0LmgsdC5zLHQubCk6dWUoXCJcIit0LGhlLFV0KTpuZXcgVXQodCxlLHIpfXQuY29sb3I9VnQsVnQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrXCJcIn0sdC5oc2w9VXQ7dmFyIHF0PVV0LnByb3RvdHlwZT1uZXcgVnQ7ZnVuY3Rpb24gSHQodCxlLHIpe3ZhciBuLGk7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gTWF0aC5yb3VuZCgyNTUqZnVuY3Rpb24odCl7cmV0dXJuIHQ+MzYwP3QtPTM2MDp0PDAmJih0Kz0zNjApLHQ8NjA/bisoaS1uKSp0LzYwOnQ8MTgwP2k6dDwyNDA/bisoaS1uKSooMjQwLXQpLzYwOm59KHQpKX1yZXR1cm4gdD1pc05hTih0KT8wOih0JT0zNjApPDA/dCszNjA6dCxlPWlzTmFOKGUpPzA6ZTwwPzA6ZT4xPzE6ZSxuPTIqKHI9cjwwPzA6cj4xPzE6ciktKGk9cjw9LjU/ciooMStlKTpyK2UtciplKSxuZXcgYWUoYSh0KzEyMCksYSh0KSxhKHQtMTIwKSl9ZnVuY3Rpb24gR3QoZSxyLG4pe3JldHVybiB0aGlzIGluc3RhbmNlb2YgR3Q/KHRoaXMuaD0rZSx0aGlzLmM9K3Isdm9pZCh0aGlzLmw9K24pKTphcmd1bWVudHMubGVuZ3RoPDI/ZSBpbnN0YW5jZW9mIEd0P25ldyBHdChlLmgsZS5jLGUubCk6ZWUoZSBpbnN0YW5jZW9mIFh0P2UubDooZT1mZSgoZT10LnJnYihlKSkucixlLmcsZS5iKSkubCxlLmEsZS5iKTpuZXcgR3QoZSxyLG4pfXF0LmJyaWdodGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/dDoxKSxuZXcgVXQodGhpcy5oLHRoaXMucyx0aGlzLmwvdCl9LHF0LmRhcmtlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP3Q6MSksbmV3IFV0KHRoaXMuaCx0aGlzLnMsdCp0aGlzLmwpfSxxdC5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4gSHQodGhpcy5oLHRoaXMucyx0aGlzLmwpfSx0LmhjbD1HdDt2YXIgWXQ9R3QucHJvdG90eXBlPW5ldyBWdDtmdW5jdGlvbiBXdCh0LGUscil7cmV0dXJuIGlzTmFOKHQpJiYodD0wKSxpc05hTihlKSYmKGU9MCksbmV3IFh0KHIsTWF0aC5jb3ModCo9Q3QpKmUsTWF0aC5zaW4odCkqZSl9ZnVuY3Rpb24gWHQodCxlLHIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgWHQ/KHRoaXMubD0rdCx0aGlzLmE9K2Usdm9pZCh0aGlzLmI9K3IpKTphcmd1bWVudHMubGVuZ3RoPDI/dCBpbnN0YW5jZW9mIFh0P25ldyBYdCh0LmwsdC5hLHQuYik6dCBpbnN0YW5jZW9mIEd0P1d0KHQuaCx0LmMsdC5sKTpmZSgodD1hZSh0KSkucix0LmcsdC5iKTpuZXcgWHQodCxlLHIpfVl0LmJyaWdodGVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgR3QodGhpcy5oLHRoaXMuYyxNYXRoLm1pbigxMDAsdGhpcy5sK1p0Kihhcmd1bWVudHMubGVuZ3RoP3Q6MSkpKX0sWXQuZGFya2VyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgR3QodGhpcy5oLHRoaXMuYyxNYXRoLm1heCgwLHRoaXMubC1adCooYXJndW1lbnRzLmxlbmd0aD90OjEpKSl9LFl0LnJnYj1mdW5jdGlvbigpe3JldHVybiBXdCh0aGlzLmgsdGhpcy5jLHRoaXMubCkucmdiKCl9LHQubGFiPVh0O3ZhciBadD0xOCwkdD0uOTUwNDcsSnQ9MSxLdD0xLjA4ODgzLFF0PVh0LnByb3RvdHlwZT1uZXcgVnQ7ZnVuY3Rpb24gdGUodCxlLHIpe3ZhciBuPSh0KzE2KS8xMTYsaT1uK2UvNTAwLGE9bi1yLzIwMDtyZXR1cm4gbmV3IGFlKGllKDMuMjQwNDU0MiooaT1yZShpKSokdCktMS41MzcxMzg1KihuPXJlKG4pKkp0KS0uNDk4NTMxNCooYT1yZShhKSpLdCkpLGllKC0uOTY5MjY2KmkrMS44NzYwMTA4Km4rLjA0MTU1NiphKSxpZSguMDU1NjQzNCppLS4yMDQwMjU5Km4rMS4wNTcyMjUyKmEpKX1mdW5jdGlvbiBlZSh0LGUscil7cmV0dXJuIHQ+MD9uZXcgR3QoTWF0aC5hdGFuMihyLGUpKkx0LE1hdGguc3FydChlKmUrcipyKSx0KTpuZXcgR3QoTmFOLE5hTix0KX1mdW5jdGlvbiByZSh0KXtyZXR1cm4gdD4uMjA2ODkzMDM0P3QqdCp0Oih0LTQvMjkpLzcuNzg3MDM3fWZ1bmN0aW9uIG5lKHQpe3JldHVybiB0Pi4wMDg4NTY/TWF0aC5wb3codCwxLzMpOjcuNzg3MDM3KnQrNC8yOX1mdW5jdGlvbiBpZSh0KXtyZXR1cm4gTWF0aC5yb3VuZCgyNTUqKHQ8PS4wMDMwND8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsMS8yLjQpLS4wNTUpKX1mdW5jdGlvbiBhZSh0LGUscil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBhZT8odGhpcy5yPX5+dCx0aGlzLmc9fn5lLHZvaWQodGhpcy5iPX5+cikpOmFyZ3VtZW50cy5sZW5ndGg8Mj90IGluc3RhbmNlb2YgYWU/bmV3IGFlKHQucix0LmcsdC5iKTp1ZShcIlwiK3QsYWUsSHQpOm5ldyBhZSh0LGUscil9ZnVuY3Rpb24gb2UodCl7cmV0dXJuIG5ldyBhZSh0Pj4xNix0Pj44JjI1NSwyNTUmdCl9ZnVuY3Rpb24gc2UodCl7cmV0dXJuIG9lKHQpK1wiXCJ9UXQuYnJpZ2h0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBYdChNYXRoLm1pbigxMDAsdGhpcy5sK1p0Kihhcmd1bWVudHMubGVuZ3RoP3Q6MSkpLHRoaXMuYSx0aGlzLmIpfSxRdC5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBYdChNYXRoLm1heCgwLHRoaXMubC1adCooYXJndW1lbnRzLmxlbmd0aD90OjEpKSx0aGlzLmEsdGhpcy5iKX0sUXQucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIHRlKHRoaXMubCx0aGlzLmEsdGhpcy5iKX0sdC5yZ2I9YWU7dmFyIGxlPWFlLnByb3RvdHlwZT1uZXcgVnQ7ZnVuY3Rpb24gY2UodCl7cmV0dXJuIHQ8MTY/XCIwXCIrTWF0aC5tYXgoMCx0KS50b1N0cmluZygxNik6TWF0aC5taW4oMjU1LHQpLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiB1ZSh0LGUscil7dmFyIG4saSxhLG89MCxzPTAsbD0wO2lmKG49LyhbYS16XSspXFwoKC4qKVxcKS8uZXhlYyh0PXQudG9Mb3dlckNhc2UoKSkpc3dpdGNoKGk9blsyXS5zcGxpdChcIixcIiksblsxXSl7Y2FzZVwiaHNsXCI6cmV0dXJuIHIocGFyc2VGbG9hdChpWzBdKSxwYXJzZUZsb2F0KGlbMV0pLzEwMCxwYXJzZUZsb2F0KGlbMl0pLzEwMCk7Y2FzZVwicmdiXCI6cmV0dXJuIGUoZGUoaVswXSksZGUoaVsxXSksZGUoaVsyXSkpfXJldHVybihhPWdlLmdldCh0KSk/ZShhLnIsYS5nLGEuYik6KG51bGw9PXR8fFwiI1wiIT09dC5jaGFyQXQoMCl8fGlzTmFOKGE9cGFyc2VJbnQodC5zbGljZSgxKSwxNikpfHwoND09PXQubGVuZ3RoPyhvPSgzODQwJmEpPj40LG98PW8+PjQscz0yNDAmYSxzfD1zPj40LGw9MTUmYSxsfD1sPDw0KTo3PT09dC5sZW5ndGgmJihvPSgxNjcxMTY4MCZhKT4+MTYscz0oNjUyODAmYSk+PjgsbD0yNTUmYSkpLGUobyxzLGwpKX1mdW5jdGlvbiBoZSh0LGUscil7dmFyIG4saSxhPU1hdGgubWluKHQvPTI1NSxlLz0yNTUsci89MjU1KSxvPU1hdGgubWF4KHQsZSxyKSxzPW8tYSxsPShvK2EpLzI7cmV0dXJuIHM/KGk9bDwuNT9zLyhvK2EpOnMvKDItby1hKSxuPXQ9PW8/KGUtcikvcysoZTxyPzY6MCk6ZT09bz8oci10KS9zKzI6KHQtZSkvcys0LG4qPTYwKToobj1OYU4saT1sPjAmJmw8MT8wOm4pLG5ldyBVdChuLGksbCl9ZnVuY3Rpb24gZmUodCxlLHIpe3ZhciBuPW5lKCguNDEyNDU2NCoodD1wZSh0KSkrLjM1NzU3NjEqKGU9cGUoZSkpKy4xODA0Mzc1KihyPXBlKHIpKSkvJHQpLGk9bmUoKC4yMTI2NzI5KnQrLjcxNTE1MjIqZSsuMDcyMTc1KnIpL0p0KTtyZXR1cm4gWHQoMTE2KmktMTYsNTAwKihuLWkpLDIwMCooaS1uZSgoLjAxOTMzMzkqdCsuMTE5MTkyKmUrLjk1MDMwNDEqcikvS3QpKSl9ZnVuY3Rpb24gcGUodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gZGUodCl7dmFyIGU9cGFyc2VGbG9hdCh0KTtyZXR1cm5cIiVcIj09PXQuY2hhckF0KHQubGVuZ3RoLTEpP01hdGgucm91bmQoMi41NSplKTplfWxlLmJyaWdodGVyPWZ1bmN0aW9uKHQpe3Q9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD90OjEpO3ZhciBlPXRoaXMucixyPXRoaXMuZyxuPXRoaXMuYixpPTMwO3JldHVybiBlfHxyfHxuPyhlJiZlPGkmJihlPWkpLHImJnI8aSYmKHI9aSksbiYmbjxpJiYobj1pKSxuZXcgYWUoTWF0aC5taW4oMjU1LGUvdCksTWF0aC5taW4oMjU1LHIvdCksTWF0aC5taW4oMjU1LG4vdCkpKTpuZXcgYWUoaSxpLGkpfSxsZS5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhZSgodD1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP3Q6MSkpKnRoaXMucix0KnRoaXMuZyx0KnRoaXMuYil9LGxlLmhzbD1mdW5jdGlvbigpe3JldHVybiBoZSh0aGlzLnIsdGhpcy5nLHRoaXMuYil9LGxlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCIjXCIrY2UodGhpcy5yKStjZSh0aGlzLmcpK2NlKHRoaXMuYil9O3ZhciBnZT10Lm1hcCh7YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSk7ZnVuY3Rpb24gdmUodCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdD90OmZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIG1lKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiByJiYobj1yLHI9bnVsbCkseWUoZSxyLHQsbil9fWZ1bmN0aW9uIHllKGUscixpLGEpe3ZhciBvPXt9LHM9dC5kaXNwYXRjaChcImJlZm9yZXNlbmRcIixcInByb2dyZXNzXCIsXCJsb2FkXCIsXCJlcnJvclwiKSxsPXt9LGM9bmV3IFhNTEh0dHBSZXF1ZXN0LHU9bnVsbDtmdW5jdGlvbiBoKCl7dmFyIHQsZT1jLnN0YXR1cztpZighZSYmZnVuY3Rpb24odCl7dmFyIGU9dC5yZXNwb25zZVR5cGU7cmV0dXJuIGUmJlwidGV4dFwiIT09ZT90LnJlc3BvbnNlOnQucmVzcG9uc2VUZXh0fShjKXx8ZT49MjAwJiZlPDMwMHx8MzA0PT09ZSl7dHJ5e3Q9aS5jYWxsKG8sYyl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcy5lcnJvci5jYWxsKG8sdCl9cy5sb2FkLmNhbGwobyx0KX1lbHNlIHMuZXJyb3IuY2FsbChvLGMpfXJldHVybiF0aGlzLlhEb21haW5SZXF1ZXN0fHxcIndpdGhDcmVkZW50aWFsc1wiaW4gY3x8IS9eKGh0dHAocyk/Oik/XFwvXFwvLy50ZXN0KGUpfHwoYz1uZXcgWERvbWFpblJlcXVlc3QpLFwib25sb2FkXCJpbiBjP2Mub25sb2FkPWMub25lcnJvcj1oOmMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7Yy5yZWFkeVN0YXRlPjMmJmgoKX0sYy5vbnByb2dyZXNzPWZ1bmN0aW9uKGUpe3ZhciByPXQuZXZlbnQ7dC5ldmVudD1lO3RyeXtzLnByb2dyZXNzLmNhbGwobyxjKX1maW5hbGx5e3QuZXZlbnQ9cn19LG8uaGVhZGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9KHQrXCJcIikudG9Mb3dlckNhc2UoKSxhcmd1bWVudHMubGVuZ3RoPDI/bFt0XToobnVsbD09ZT9kZWxldGUgbFt0XTpsW3RdPWUrXCJcIixvKX0sby5taW1lVHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10P251bGw6dCtcIlwiLG8pOnJ9LG8ucmVzcG9uc2VUeXBlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsbyk6dX0sby5yZXNwb25zZT1mdW5jdGlvbih0KXtyZXR1cm4gaT10LG99LFtcImdldFwiLFwicG9zdFwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe29bdF09ZnVuY3Rpb24oKXtyZXR1cm4gby5zZW5kLmFwcGx5KG8sW3RdLmNvbmNhdChuKGFyZ3VtZW50cykpKX19KSxvLnNlbmQ9ZnVuY3Rpb24odCxuLGkpe2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBuJiYoaT1uLG49bnVsbCksYy5vcGVuKHQsZSwhMCksbnVsbD09cnx8XCJhY2NlcHRcImluIGx8fChsLmFjY2VwdD1yK1wiLCovKlwiKSxjLnNldFJlcXVlc3RIZWFkZXIpZm9yKHZhciBhIGluIGwpYy5zZXRSZXF1ZXN0SGVhZGVyKGEsbFthXSk7cmV0dXJuIG51bGwhPXImJmMub3ZlcnJpZGVNaW1lVHlwZSYmYy5vdmVycmlkZU1pbWVUeXBlKHIpLG51bGwhPXUmJihjLnJlc3BvbnNlVHlwZT11KSxudWxsIT1pJiZvLm9uKFwiZXJyb3JcIixpKS5vbihcImxvYWRcIixmdW5jdGlvbih0KXtpKG51bGwsdCl9KSxzLmJlZm9yZXNlbmQuY2FsbChvLGMpLGMuc2VuZChudWxsPT1uP251bGw6biksb30sby5hYm9ydD1mdW5jdGlvbigpe3JldHVybiBjLmFib3J0KCksb30sdC5yZWJpbmQobyxzLFwib25cIiksbnVsbD09YT9vOm8uZ2V0KGZ1bmN0aW9uKHQpe3JldHVybiAxPT09dC5sZW5ndGg/ZnVuY3Rpb24oZSxyKXt0KG51bGw9PWU/cjpudWxsKX06dH0oYSkpfWdlLmZvckVhY2goZnVuY3Rpb24odCxlKXtnZS5zZXQodCxvZShlKSl9KSx0LmZ1bmN0b3I9dmUsdC54aHI9bWUoeiksdC5kc3Y9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgUmVnRXhwKCdbXCInK3QrXCJcXG5dXCIpLG49dC5jaGFyQ29kZUF0KDApO2Z1bmN0aW9uIGkodCxyLG4pe2FyZ3VtZW50cy5sZW5ndGg8MyYmKG49cixyPW51bGwpO3ZhciBpPXllKHQsZSxudWxsPT1yP2E6byhyKSxuKTtyZXR1cm4gaS5yb3c9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aS5yZXNwb25zZShudWxsPT0ocj10KT9hOm8odCkpOnJ9LGl9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gaS5wYXJzZSh0LnJlc3BvbnNlVGV4dCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGkucGFyc2UoZS5yZXNwb25zZVRleHQsdCl9fWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGUubWFwKGwpLmpvaW4odCl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gci50ZXN0KHQpPydcIicrdC5yZXBsYWNlKC9cXFwiL2csJ1wiXCInKSsnXCInOnR9cmV0dXJuIGkucGFyc2U9ZnVuY3Rpb24odCxlKXt2YXIgcjtyZXR1cm4gaS5wYXJzZVJvd3ModCxmdW5jdGlvbih0LG4pe2lmKHIpcmV0dXJuIHIodCxuLTEpO3ZhciBpPW5ldyBGdW5jdGlvbihcImRcIixcInJldHVybiB7XCIrdC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrXCI6IGRbXCIrZStcIl1cIn0pLmpvaW4oXCIsXCIpK1wifVwiKTtyPWU/ZnVuY3Rpb24odCxyKXtyZXR1cm4gZShpKHQpLHIpfTppfSl9LGkucGFyc2VSb3dzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhPXt9LG89e30scz1bXSxsPXQubGVuZ3RoLGM9MCx1PTA7ZnVuY3Rpb24gaCgpe2lmKGM+PWwpcmV0dXJuIG87aWYoaSlyZXR1cm4gaT0hMSxhO3ZhciBlPWM7aWYoMzQ9PT10LmNoYXJDb2RlQXQoZSkpe2Zvcih2YXIgcj1lO3IrKzxsOylpZigzND09PXQuY2hhckNvZGVBdChyKSl7aWYoMzQhPT10LmNoYXJDb2RlQXQocisxKSlicmVhazsrK3J9cmV0dXJuIGM9cisyLDEzPT09KHM9dC5jaGFyQ29kZUF0KHIrMSkpPyhpPSEwLDEwPT09dC5jaGFyQ29kZUF0KHIrMikmJisrYyk6MTA9PT1zJiYoaT0hMCksdC5zbGljZShlKzEscikucmVwbGFjZSgvXCJcIi9nLCdcIicpfWZvcig7YzxsOyl7dmFyIHMsdT0xO2lmKDEwPT09KHM9dC5jaGFyQ29kZUF0KGMrKykpKWk9ITA7ZWxzZSBpZigxMz09PXMpaT0hMCwxMD09PXQuY2hhckNvZGVBdChjKSYmKCsrYywrK3UpO2Vsc2UgaWYocyE9PW4pY29udGludWU7cmV0dXJuIHQuc2xpY2UoZSxjLXUpfXJldHVybiB0LnNsaWNlKGUpfWZvcig7KHI9aCgpKSE9PW87KXtmb3IodmFyIGY9W107ciE9PWEmJnIhPT1vOylmLnB1c2gocikscj1oKCk7ZSYmbnVsbD09KGY9ZShmLHUrKykpfHxzLnB1c2goZil9cmV0dXJuIHN9LGkuZm9ybWF0PWZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZVswXSkpcmV0dXJuIGkuZm9ybWF0Um93cyhlKTt2YXIgcj1uZXcgTCxuPVtdO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHQpci5oYXMoZSl8fG4ucHVzaChyLmFkZChlKSl9KSxbbi5tYXAobCkuam9pbih0KV0uY29uY2F0KGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbChlW3RdKX0pLmpvaW4odCl9KSkuam9pbihcIlxcblwiKX0saS5mb3JtYXRSb3dzPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChzKS5qb2luKFwiXFxuXCIpfSxpfSx0LmNzdj10LmRzdihcIixcIixcInRleHQvY3N2XCIpLHQudHN2PXQuZHN2KFwiXFx0XCIsXCJ0ZXh0L3RhYi1zZXBhcmF0ZWQtdmFsdWVzXCIpO3ZhciB4ZSxiZSxfZSx3ZSxrZT10aGlzW0kodGhpcyxcInJlcXVlc3RBbmltYXRpb25GcmFtZVwiKV18fGZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O2Z1bmN0aW9uIEFlKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoO248MiYmKGU9MCksbjwzJiYocj1EYXRlLm5vdygpKTt2YXIgaT17Yzp0LHQ6citlLG46bnVsbH07cmV0dXJuIGJlP2JlLm49aTp4ZT1pLGJlPWksX2V8fCh3ZT1jbGVhclRpbWVvdXQod2UpLF9lPTEsa2UoVGUpKSxpfWZ1bmN0aW9uIFRlKCl7dmFyIHQ9TWUoKSxlPVNlKCktdDtlPjI0Pyhpc0Zpbml0ZShlKSYmKGNsZWFyVGltZW91dCh3ZSksd2U9c2V0VGltZW91dChUZSxlKSksX2U9MCk6KF9lPTEsa2UoVGUpKX1mdW5jdGlvbiBNZSgpe2Zvcih2YXIgdD1EYXRlLm5vdygpLGU9eGU7ZTspdD49ZS50JiZlLmModC1lLnQpJiYoZS5jPW51bGwpLGU9ZS5uO3JldHVybiB0fWZ1bmN0aW9uIFNlKCl7Zm9yKHZhciB0LGU9eGUscj0xLzA7ZTspZS5jPyhlLnQ8ciYmKHI9ZS50KSxlPSh0PWUpLm4pOmU9dD90Lm49ZS5uOnhlPWUubjtyZXR1cm4gYmU9dCxyfWZ1bmN0aW9uIEVlKHQsZSl7cmV0dXJuIGUtKHQ/TWF0aC5jZWlsKE1hdGgubG9nKHQpL01hdGguTE4xMCk6MSl9dC50aW1lcj1mdW5jdGlvbigpe0FlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdC50aW1lci5mbHVzaD1mdW5jdGlvbigpe01lKCksU2UoKX0sdC5yb3VuZD1mdW5jdGlvbih0LGUpe3JldHVybiBlP01hdGgucm91bmQodCooZT1NYXRoLnBvdygxMCxlKSkpL2U6TWF0aC5yb3VuZCh0KX07dmFyIENlPVtcInlcIixcInpcIixcImFcIixcImZcIixcInBcIixcIm5cIixcIlxceGI1XCIsXCJtXCIsXCJcIixcImtcIixcIk1cIixcIkdcIixcIlRcIixcIlBcIixcIkVcIixcIlpcIixcIllcIl0ubWFwKGZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5wb3coMTAsMyp5KDgtZSkpO3JldHVybntzY2FsZTplPjg/ZnVuY3Rpb24odCl7cmV0dXJuIHQvcn06ZnVuY3Rpb24odCl7cmV0dXJuIHQqcn0sc3ltYm9sOnR9fSk7dC5mb3JtYXRQcmVmaXg9ZnVuY3Rpb24oZSxyKXt2YXIgbj0wO3JldHVybihlPStlKSYmKGU8MCYmKGUqPS0xKSxyJiYoZT10LnJvdW5kKGUsRWUoZSxyKSkpLG49MStNYXRoLmZsb29yKDFlLTEyK01hdGgubG9nKGUpL01hdGguTE4xMCksbj1NYXRoLm1heCgtMjQsTWF0aC5taW4oMjQsMypNYXRoLmZsb29yKChuLTEpLzMpKSkpLENlWzgrbi8zXX07dmFyIExlPS8oPzooW157XSk/KFs8Pj1eXSkpPyhbK1xcLSBdKT8oWyQjXSk/KDApPyhcXGQrKT8oLCk/KFxcLi0/XFxkKyk/KFthLXolXSk/L2ksemU9dC5tYXAoe2I6ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodCl9LG86ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoOCl9LHg6ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoMTYpfSxYOmZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSxnOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9QcmVjaXNpb24oZSl9LGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0V4cG9uZW50aWFsKGUpfSxmOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9GaXhlZChlKX0scjpmdW5jdGlvbihlLHIpe3JldHVybihlPXQucm91bmQoZSxFZShlLHIpKSkudG9GaXhlZChNYXRoLm1heCgwLE1hdGgubWluKDIwLEVlKGUqKDErMWUtMTUpLHIpKSkpfX0pO2Z1bmN0aW9uIE9lKHQpe3JldHVybiB0K1wiXCJ9dmFyIEllPXQudGltZT17fSxEZT1EYXRlO2Z1bmN0aW9uIFBlKCl7dGhpcy5fPW5ldyBEYXRlKGFyZ3VtZW50cy5sZW5ndGg+MT9EYXRlLlVUQy5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YXJndW1lbnRzWzBdKX1QZS5wcm90b3R5cGU9e2dldERhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0RhdGUoKX0sZ2V0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENEYXkoKX0sZ2V0RnVsbFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0Z1bGxZZWFyKCl9LGdldEhvdXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENIb3VycygpfSxnZXRNaWxsaXNlY29uZHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ01pbGxpc2Vjb25kcygpfSxnZXRNaW51dGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNaW51dGVzKCl9LGdldE1vbnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNb250aCgpfSxnZXRTZWNvbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENTZWNvbmRzKCl9LGdldFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFRpbWUoKX0sZ2V0VGltZXpvbmVPZmZzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8udmFsdWVPZigpfSxzZXREYXRlOmZ1bmN0aW9uKCl7UmUuc2V0VVRDRGF0ZS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0RGF5OmZ1bmN0aW9uKCl7UmUuc2V0VVRDRGF5LmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRGdWxsWWVhcjpmdW5jdGlvbigpe1JlLnNldFVUQ0Z1bGxZZWFyLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRIb3VyczpmdW5jdGlvbigpe1JlLnNldFVUQ0hvdXJzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNaWxsaXNlY29uZHM6ZnVuY3Rpb24oKXtSZS5zZXRVVENNaWxsaXNlY29uZHMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldE1pbnV0ZXM6ZnVuY3Rpb24oKXtSZS5zZXRVVENNaW51dGVzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNb250aDpmdW5jdGlvbigpe1JlLnNldFVUQ01vbnRoLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRTZWNvbmRzOmZ1bmN0aW9uKCl7UmUuc2V0VVRDU2Vjb25kcy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0VGltZTpmdW5jdGlvbigpe1JlLnNldFRpbWUuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9fTt2YXIgUmU9RGF0ZS5wcm90b3R5cGU7ZnVuY3Rpb24gRmUodCxlLHIpe2Z1bmN0aW9uIG4oZSl7dmFyIHI9dChlKSxuPWEociwxKTtyZXR1cm4gZS1yPG4tZT9yOm59ZnVuY3Rpb24gaShyKXtyZXR1cm4gZShyPXQobmV3IERlKHItMSkpLDEpLHJ9ZnVuY3Rpb24gYSh0LHIpe3JldHVybiBlKHQ9bmV3IERlKCt0KSxyKSx0fWZ1bmN0aW9uIG8odCxuLGEpe3ZhciBvPWkodCkscz1bXTtpZihhPjEpZm9yKDtvPG47KXIobyklYXx8cy5wdXNoKG5ldyBEYXRlKCtvKSksZShvLDEpO2Vsc2UgZm9yKDtvPG47KXMucHVzaChuZXcgRGF0ZSgrbykpLGUobywxKTtyZXR1cm4gc310LmZsb29yPXQsdC5yb3VuZD1uLHQuY2VpbD1pLHQub2Zmc2V0PWEsdC5yYW5nZT1vO3ZhciBzPXQudXRjPUJlKHQpO3JldHVybiBzLmZsb29yPXMscy5yb3VuZD1CZShuKSxzLmNlaWw9QmUoaSkscy5vZmZzZXQ9QmUoYSkscy5yYW5nZT1mdW5jdGlvbih0LGUscil7dHJ5e0RlPVBlO3ZhciBuPW5ldyBQZTtyZXR1cm4gbi5fPXQsbyhuLGUscil9ZmluYWxseXtEZT1EYXRlfX0sdH1mdW5jdGlvbiBCZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt0cnl7RGU9UGU7dmFyIG49bmV3IFBlO3JldHVybiBuLl89ZSx0KG4scikuX31maW5hbGx5e0RlPURhdGV9fX1JZS55ZWFyPUZlKGZ1bmN0aW9uKHQpe3JldHVybih0PUllLmRheSh0KSkuc2V0TW9udGgoMCwxKSx0fSxmdW5jdGlvbih0LGUpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK2UpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSksSWUueWVhcnM9SWUueWVhci5yYW5nZSxJZS55ZWFycy51dGM9SWUueWVhci51dGMucmFuZ2UsSWUuZGF5PUZlKGZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBEZSgyZTMsMCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSx0LmdldERhdGUoKSksZX0sZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrZSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKS0xfSksSWUuZGF5cz1JZS5kYXkucmFuZ2UsSWUuZGF5cy51dGM9SWUuZGF5LnV0Yy5yYW5nZSxJZS5kYXlPZlllYXI9ZnVuY3Rpb24odCl7dmFyIGU9SWUueWVhcih0KTtyZXR1cm4gTWF0aC5mbG9vcigodC1lLTZlNCoodC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkpLzg2NGU1KX0sW1wic3VuZGF5XCIsXCJtb25kYXlcIixcInR1ZXNkYXlcIixcIndlZG5lc2RheVwiLFwidGh1cnNkYXlcIixcImZyaWRheVwiLFwic2F0dXJkYXlcIl0uZm9yRWFjaChmdW5jdGlvbih0LGUpe2U9Ny1lO3ZhciByPUllW3RdPUZlKGZ1bmN0aW9uKHQpe3JldHVybih0PUllLmRheSh0KSkuc2V0RGF0ZSh0LmdldERhdGUoKS0odC5nZXREYXkoKStlKSU3KSx0fSxmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKSs3Kk1hdGguZmxvb3IoZSkpfSxmdW5jdGlvbih0KXt2YXIgcj1JZS55ZWFyKHQpLmdldERheSgpO3JldHVybiBNYXRoLmZsb29yKChJZS5kYXlPZlllYXIodCkrKHIrZSklNykvNyktKHIhPT1lKX0pO0llW3QrXCJzXCJdPXIucmFuZ2UsSWVbdCtcInNcIl0udXRjPXIudXRjLnJhbmdlLEllW3QrXCJPZlllYXJcIl09ZnVuY3Rpb24odCl7dmFyIHI9SWUueWVhcih0KS5nZXREYXkoKTtyZXR1cm4gTWF0aC5mbG9vcigoSWUuZGF5T2ZZZWFyKHQpKyhyK2UpJTcpLzcpfX0pLEllLndlZWs9SWUuc3VuZGF5LEllLndlZWtzPUllLnN1bmRheS5yYW5nZSxJZS53ZWVrcy51dGM9SWUuc3VuZGF5LnV0Yy5yYW5nZSxJZS53ZWVrT2ZZZWFyPUllLnN1bmRheU9mWWVhcjt2YXIgTmU9e1wiLVwiOlwiXCIsXzpcIiBcIiwwOlwiMFwifSxqZT0vXlxccypcXGQrLyxWZT0vXiUvO2Z1bmN0aW9uIFVlKHQsZSxyKXt2YXIgbj10PDA/XCItXCI6XCJcIixpPShuPy10OnQpK1wiXCIsYT1pLmxlbmd0aDtyZXR1cm4gbisoYTxyP25ldyBBcnJheShyLWErMSkuam9pbihlKStpOmkpfWZ1bmN0aW9uIHFlKGUpe3JldHVybiBuZXcgUmVnRXhwKFwiXig/OlwiK2UubWFwKHQucmVxdW90ZSkuam9pbihcInxcIikrXCIpXCIsXCJpXCIpfWZ1bmN0aW9uIEhlKHQpe2Zvcih2YXIgZT1uZXcgYixyPS0xLG49dC5sZW5ndGg7KytyPG47KWUuc2V0KHRbcl0udG9Mb3dlckNhc2UoKSxyKTtyZXR1cm4gZX1mdW5jdGlvbiBHZSh0LGUscil7amUubGFzdEluZGV4PTA7dmFyIG49amUuZXhlYyhlLnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KHQudz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZZSh0LGUscil7amUubGFzdEluZGV4PTA7dmFyIG49amUuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5VPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFdlKHQsZSxyKXtqZS5sYXN0SW5kZXg9MDt2YXIgbj1qZS5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Llc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWGUodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrNCkpO3JldHVybiBuPyh0Lnk9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWmUodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuLGk9amUuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIGk/KHQueT0obj0raVswXSkrKG4+Njg/MTkwMDoyZTMpLHIraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uICRlKHQsZSxyKXtyZXR1cm4vXlsrLV1cXGR7NH0kLy50ZXN0KGU9ZS5zbGljZShyLHIrNSkpPyh0Llo9LWUscis1KTotMX1mdW5jdGlvbiBKZSh0LGUscil7amUubGFzdEluZGV4PTA7dmFyIG49amUuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQubT1uWzBdLTEscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gS2UodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0LmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUWUodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMykpO3JldHVybiBuPyh0Lmo9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdHIodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lkg9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZXIodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lk09K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcnIodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0LlM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbnIodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMykpO3JldHVybiBuPyh0Lkw9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaXIodCl7dmFyIGU9dC5nZXRUaW1lem9uZU9mZnNldCgpLHI9ZT4wP1wiLVwiOlwiK1wiLG49eShlKS82MHwwLGk9eShlKSU2MDtyZXR1cm4gcitVZShuLFwiMFwiLDIpK1VlKGksXCIwXCIsMil9ZnVuY3Rpb24gYXIodCxlLHIpe1ZlLmxhc3RJbmRleD0wO3ZhciBuPVZlLmV4ZWMoZS5zbGljZShyLHIrMSkpO3JldHVybiBuP3IrblswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gb3IodCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9LTE7KytyPGU7KXRbcl1bMF09dGhpcyh0W3JdWzBdKTtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciByPTAsbj10W3JdOyFuWzFdKGUpOyluPXRbKytyXTtyZXR1cm4gblswXShlKX19dC5sb2NhbGU9ZnVuY3Rpb24oZSl7cmV0dXJue251bWJlckZvcm1hdDpmdW5jdGlvbihlKXt2YXIgcj1lLmRlY2ltYWwsbj1lLnRob3VzYW5kcyxpPWUuZ3JvdXBpbmcsYT1lLmN1cnJlbmN5LG89aSYmbj9mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxhPVtdLG89MCxzPWlbMF0sbD0wO3I+MCYmcz4wJiYobCtzKzE+ZSYmKHM9TWF0aC5tYXgoMSxlLWwpKSxhLnB1c2godC5zdWJzdHJpbmcoci09cyxyK3MpKSwhKChsKz1zKzEpPmUpKTspcz1pW289KG8rMSklaS5sZW5ndGhdO3JldHVybiBhLnJldmVyc2UoKS5qb2luKG4pfTp6O3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1MZS5leGVjKGUpLGk9blsxXXx8XCIgXCIscz1uWzJdfHxcIj5cIixsPW5bM118fFwiLVwiLGM9bls0XXx8XCJcIix1PW5bNV0saD0rbls2XSxmPW5bN10scD1uWzhdLGQ9bls5XSxnPTEsdj1cIlwiLG09XCJcIix5PSExLHg9ITA7c3dpdGNoKHAmJihwPStwLnN1YnN0cmluZygxKSksKHV8fFwiMFwiPT09aSYmXCI9XCI9PT1zKSYmKHU9aT1cIjBcIixzPVwiPVwiKSxkKXtjYXNlXCJuXCI6Zj0hMCxkPVwiZ1wiO2JyZWFrO2Nhc2VcIiVcIjpnPTEwMCxtPVwiJVwiLGQ9XCJmXCI7YnJlYWs7Y2FzZVwicFwiOmc9MTAwLG09XCIlXCIsZD1cInJcIjticmVhaztjYXNlXCJiXCI6Y2FzZVwib1wiOmNhc2VcInhcIjpjYXNlXCJYXCI6XCIjXCI9PT1jJiYodj1cIjBcIitkLnRvTG93ZXJDYXNlKCkpO2Nhc2VcImNcIjp4PSExO2Nhc2VcImRcIjp5PSEwLHA9MDticmVhaztjYXNlXCJzXCI6Zz0tMSxkPVwiclwifVwiJFwiPT09YyYmKHY9YVswXSxtPWFbMV0pLFwiclwiIT1kfHxwfHwoZD1cImdcIiksbnVsbCE9cCYmKFwiZ1wiPT1kP3A9TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxwKSk6XCJlXCIhPWQmJlwiZlwiIT1kfHwocD1NYXRoLm1heCgwLE1hdGgubWluKDIwLHApKSkpLGQ9emUuZ2V0KGQpfHxPZTt2YXIgYj11JiZmO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1tO2lmKHkmJmUlMSlyZXR1cm5cIlwiO3ZhciBhPWU8MHx8MD09PWUmJjEvZTwwPyhlPS1lLFwiLVwiKTpcIi1cIj09PWw/XCJcIjpsO2lmKGc8MCl7dmFyIGM9dC5mb3JtYXRQcmVmaXgoZSxwKTtlPWMuc2NhbGUoZSksbj1jLnN5bWJvbCttfWVsc2UgZSo9Zzt2YXIgXyx3LGs9KGU9ZChlLHApKS5sYXN0SW5kZXhPZihcIi5cIik7aWYoazwwKXt2YXIgQT14P2UubGFzdEluZGV4T2YoXCJlXCIpOi0xO0E8MD8oXz1lLHc9XCJcIik6KF89ZS5zdWJzdHJpbmcoMCxBKSx3PWUuc3Vic3RyaW5nKEEpKX1lbHNlIF89ZS5zdWJzdHJpbmcoMCxrKSx3PXIrZS5zdWJzdHJpbmcoaysxKTshdSYmZiYmKF89byhfLDEvMCkpO3ZhciBUPXYubGVuZ3RoK18ubGVuZ3RoK3cubGVuZ3RoKyhiPzA6YS5sZW5ndGgpLE09VDxoP25ldyBBcnJheShUPWgtVCsxKS5qb2luKGkpOlwiXCI7cmV0dXJuIGImJihfPW8oTStfLE0ubGVuZ3RoP2gtdy5sZW5ndGg6MS8wKSksYSs9dixlPV8rdywoXCI8XCI9PT1zP2ErZStNOlwiPlwiPT09cz9NK2ErZTpcIl5cIj09PXM/TS5zdWJzdHJpbmcoMCxUPj49MSkrYStlK00uc3Vic3RyaW5nKFQpOmErKGI/ZTpNK2UpKStufX19KGUpLHRpbWVGb3JtYXQ6ZnVuY3Rpb24oZSl7dmFyIHI9ZS5kYXRlVGltZSxuPWUuZGF0ZSxpPWUudGltZSxhPWUucGVyaW9kcyxvPWUuZGF5cyxzPWUuc2hvcnREYXlzLGw9ZS5tb250aHMsYz1lLnNob3J0TW9udGhzO2Z1bmN0aW9uIHUodCl7dmFyIGU9dC5sZW5ndGg7ZnVuY3Rpb24gcihyKXtmb3IodmFyIG4saSxhLG89W10scz0tMSxsPTA7KytzPGU7KTM3PT09dC5jaGFyQ29kZUF0KHMpJiYoby5wdXNoKHQuc2xpY2UobCxzKSksbnVsbCE9KGk9TmVbbj10LmNoYXJBdCgrK3MpXSkmJihuPXQuY2hhckF0KCsrcykpLChhPV9bbl0pJiYobj1hKHIsbnVsbD09aT9cImVcIj09PW4/XCIgXCI6XCIwXCI6aSkpLG8ucHVzaChuKSxsPXMrMSk7cmV0dXJuIG8ucHVzaCh0LnNsaWNlKGwscykpLG8uam9pbihcIlwiKX1yZXR1cm4gci5wYXJzZT1mdW5jdGlvbihlKXt2YXIgcj17eToxOTAwLG06MCxkOjEsSDowLE06MCxTOjAsTDowLFo6bnVsbH07aWYoaChyLHQsZSwwKSE9ZS5sZW5ndGgpcmV0dXJuIG51bGw7XCJwXCJpbiByJiYoci5IPXIuSCUxMisxMipyLnApO3ZhciBuPW51bGwhPXIuWiYmRGUhPT1QZSxpPW5ldyhuP1BlOkRlKTtyZXR1cm5cImpcImluIHI/aS5zZXRGdWxsWWVhcihyLnksMCxyLmopOlwiV1wiaW4gcnx8XCJVXCJpbiByPyhcIndcImluIHJ8fChyLnc9XCJXXCJpbiByPzE6MCksaS5zZXRGdWxsWWVhcihyLnksMCwxKSxpLnNldEZ1bGxZZWFyKHIueSwwLFwiV1wiaW4gcj8oci53KzYpJTcrNypyLlctKGkuZ2V0RGF5KCkrNSklNzpyLncrNypyLlUtKGkuZ2V0RGF5KCkrNiklNykpOmkuc2V0RnVsbFllYXIoci55LHIubSxyLmQpLGkuc2V0SG91cnMoci5IKyhyLlovMTAwfDApLHIuTStyLlolMTAwLHIuUyxyLkwpLG4/aS5fOml9LHIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0scn1mdW5jdGlvbiBoKHQsZSxyLG4pe2Zvcih2YXIgaSxhLG8scz0wLGw9ZS5sZW5ndGgsYz1yLmxlbmd0aDtzPGw7KXtpZihuPj1jKXJldHVybi0xO2lmKDM3PT09KGk9ZS5jaGFyQ29kZUF0KHMrKykpKXtpZihvPWUuY2hhckF0KHMrKyksIShhPXdbbyBpbiBOZT9lLmNoYXJBdChzKyspOm9dKXx8KG49YSh0LHIsbikpPDApcmV0dXJuLTF9ZWxzZSBpZihpIT1yLmNoYXJDb2RlQXQobisrKSlyZXR1cm4tMX1yZXR1cm4gbn11LnV0Yz1mdW5jdGlvbih0KXt2YXIgZT11KHQpO2Z1bmN0aW9uIHIodCl7dHJ5e3ZhciByPW5ldyhEZT1QZSk7cmV0dXJuIHIuXz10LGUocil9ZmluYWxseXtEZT1EYXRlfX1yZXR1cm4gci5wYXJzZT1mdW5jdGlvbih0KXt0cnl7RGU9UGU7dmFyIHI9ZS5wYXJzZSh0KTtyZXR1cm4gciYmci5ffWZpbmFsbHl7RGU9RGF0ZX19LHIudG9TdHJpbmc9ZS50b1N0cmluZyxyfSx1Lm11bHRpPXUudXRjLm11bHRpPW9yO3ZhciBmPXQubWFwKCkscD1xZShvKSxkPUhlKG8pLGc9cWUocyksdj1IZShzKSxtPXFlKGwpLHk9SGUobCkseD1xZShjKSxiPUhlKGMpO2EuZm9yRWFjaChmdW5jdGlvbih0LGUpe2Yuc2V0KHQudG9Mb3dlckNhc2UoKSxlKX0pO3ZhciBfPXthOmZ1bmN0aW9uKHQpe3JldHVybiBzW3QuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiBvW3QuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBjW3QuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIGxbdC5nZXRNb250aCgpXX0sYzp1KHIpLGQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVWUodC5nZXREYXRlKCksZSwyKX0sZTpmdW5jdGlvbih0LGUpe3JldHVybiBVZSh0LmdldERhdGUoKSxlLDIpfSxIOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0SG91cnMoKSxlLDIpfSxJOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0SG91cnMoKSUxMnx8MTIsZSwyKX0sajpmdW5jdGlvbih0LGUpe3JldHVybiBVZSgxK0llLmRheU9mWWVhcih0KSxlLDMpfSxMOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0TWlsbGlzZWNvbmRzKCksZSwzKX0sbTpmdW5jdGlvbih0LGUpe3JldHVybiBVZSh0LmdldE1vbnRoKCkrMSxlLDIpfSxNOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0TWludXRlcygpLGUsMil9LHA6ZnVuY3Rpb24odCl7cmV0dXJuIGFbKyh0LmdldEhvdXJzKCk+PTEyKV19LFM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVWUodC5nZXRTZWNvbmRzKCksZSwyKX0sVTpmdW5jdGlvbih0LGUpe3JldHVybiBVZShJZS5zdW5kYXlPZlllYXIodCksZSwyKX0sdzpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKX0sVzpmdW5jdGlvbih0LGUpe3JldHVybiBVZShJZS5tb25kYXlPZlllYXIodCksZSwyKX0seDp1KG4pLFg6dShpKSx5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX0sWTpmdW5jdGlvbih0LGUpe3JldHVybiBVZSh0LmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9LFo6aXIsXCIlXCI6ZnVuY3Rpb24oKXtyZXR1cm5cIiVcIn19LHc9e2E6ZnVuY3Rpb24odCxlLHIpe2cubGFzdEluZGV4PTA7dmFyIG49Zy5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Lnc9di5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSxyK25bMF0ubGVuZ3RoKTotMX0sQTpmdW5jdGlvbih0LGUscil7cC5sYXN0SW5kZXg9MDt2YXIgbj1wLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQudz1kLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLHIrblswXS5sZW5ndGgpOi0xfSxiOmZ1bmN0aW9uKHQsZSxyKXt4Lmxhc3RJbmRleD0wO3ZhciBuPXguZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5tPWIuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSkscituWzBdLmxlbmd0aCk6LTF9LEI6ZnVuY3Rpb24odCxlLHIpe20ubGFzdEluZGV4PTA7dmFyIG49bS5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Lm09eS5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSxyK25bMF0ubGVuZ3RoKTotMX0sYzpmdW5jdGlvbih0LGUscil7cmV0dXJuIGgodCxfLmMudG9TdHJpbmcoKSxlLHIpfSxkOktlLGU6S2UsSDp0cixJOnRyLGo6UWUsTDpucixtOkplLE06ZXIscDpmdW5jdGlvbih0LGUscil7dmFyIG49Zi5nZXQoZS5zbGljZShyLHIrPTIpLnRvTG93ZXJDYXNlKCkpO3JldHVybiBudWxsPT1uPy0xOih0LnA9bixyKX0sUzpycixVOlllLHc6R2UsVzpXZSx4OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gaCh0LF8ueC50b1N0cmluZygpLGUscil9LFg6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBoKHQsXy5YLnRvU3RyaW5nKCksZSxyKX0seTpaZSxZOlhlLFo6JGUsXCIlXCI6YXJ9O3JldHVybiB1fShlKX19O3ZhciBzcj10LmxvY2FsZSh7ZGVjaW1hbDpcIi5cIix0aG91c2FuZHM6XCIsXCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OltcIiRcIixcIlwiXSxkYXRlVGltZTpcIiVhICViICVlICVYICVZXCIsZGF0ZTpcIiVtLyVkLyVZXCIsdGltZTpcIiVIOiVNOiVTXCIscGVyaW9kczpbXCJBTVwiLFwiUE1cIl0sZGF5czpbXCJTdW5kYXlcIixcIk1vbmRheVwiLFwiVHVlc2RheVwiLFwiV2VkbmVzZGF5XCIsXCJUaHVyc2RheVwiLFwiRnJpZGF5XCIsXCJTYXR1cmRheVwiXSxzaG9ydERheXM6W1wiU3VuXCIsXCJNb25cIixcIlR1ZVwiLFwiV2VkXCIsXCJUaHVcIixcIkZyaVwiLFwiU2F0XCJdLG1vbnRoczpbXCJKYW51YXJ5XCIsXCJGZWJydWFyeVwiLFwiTWFyY2hcIixcIkFwcmlsXCIsXCJNYXlcIixcIkp1bmVcIixcIkp1bHlcIixcIkF1Z3VzdFwiLFwiU2VwdGVtYmVyXCIsXCJPY3RvYmVyXCIsXCJOb3ZlbWJlclwiLFwiRGVjZW1iZXJcIl0sc2hvcnRNb250aHM6W1wiSmFuXCIsXCJGZWJcIixcIk1hclwiLFwiQXByXCIsXCJNYXlcIixcIkp1blwiLFwiSnVsXCIsXCJBdWdcIixcIlNlcFwiLFwiT2N0XCIsXCJOb3ZcIixcIkRlY1wiXX0pO2Z1bmN0aW9uIGxyKCl7fXQuZm9ybWF0PXNyLm51bWJlckZvcm1hdCx0Lmdlbz17fSxsci5wcm90b3R5cGU9e3M6MCx0OjAsYWRkOmZ1bmN0aW9uKHQpe3VyKHQsdGhpcy50LGNyKSx1cihjci5zLHRoaXMucyx0aGlzKSx0aGlzLnM/dGhpcy50Kz1jci50OnRoaXMucz1jci50fSxyZXNldDpmdW5jdGlvbigpe3RoaXMucz10aGlzLnQ9MH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgY3I9bmV3IGxyO2Z1bmN0aW9uIHVyKHQsZSxyKXt2YXIgbj1yLnM9dCtlLGk9bi10LGE9bi1pO3IudD10LWErKGUtaSl9ZnVuY3Rpb24gaHIodCxlKXt0JiZwci5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpJiZwclt0LnR5cGVdKHQsZSl9dC5nZW8uc3RyZWFtPWZ1bmN0aW9uKHQsZSl7dCYmZnIuaGFzT3duUHJvcGVydHkodC50eXBlKT9mclt0LnR5cGVdKHQsZSk6aHIodCxlKX07dmFyIGZyPXtGZWF0dXJlOmZ1bmN0aW9uKHQsZSl7aHIodC5nZW9tZXRyeSxlKX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5mZWF0dXJlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWhyKHJbbl0uZ2VvbWV0cnksZSl9fSxwcj17U3BoZXJlOmZ1bmN0aW9uKHQsZSl7ZS5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24odCxlKXt0PXQuY29vcmRpbmF0ZXMsZS5wb2ludCh0WzBdLHRbMV0sdFsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KXQ9cltuXSxlLnBvaW50KHRbMF0sdFsxXSx0WzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe2RyKHQuY29vcmRpbmF0ZXMsZSwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylkcihyW25dLGUsMCl9LFBvbHlnb246ZnVuY3Rpb24odCxlKXtncih0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWdyKHJbbl0sZSl9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmdlb21ldHJpZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylocihyW25dLGUpfX07ZnVuY3Rpb24gZHIodCxlLHIpe3ZhciBuLGk9LTEsYT10Lmxlbmd0aC1yO2ZvcihlLmxpbmVTdGFydCgpOysraTxhOyluPXRbaV0sZS5wb2ludChuWzBdLG5bMV0sblsyXSk7ZS5saW5lRW5kKCl9ZnVuY3Rpb24gZ3IodCxlKXt2YXIgcj0tMSxuPXQubGVuZ3RoO2ZvcihlLnBvbHlnb25TdGFydCgpOysrcjxuOylkcih0W3JdLGUsMSk7ZS5wb2x5Z29uRW5kKCl9dC5nZW8uYXJlYT1mdW5jdGlvbihlKXtyZXR1cm4gdnI9MCx0Lmdlby5zdHJlYW0oZSxDciksdnJ9O3ZhciB2cixtcix5cix4cixicixfcix3cixrcixBcixUcixNcixTcixFcj1uZXcgbHIsQ3I9e3NwaGVyZTpmdW5jdGlvbigpe3ZyKz00KlR0fSxwb2ludDpQLGxpbmVTdGFydDpQLGxpbmVFbmQ6UCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtFci5yZXNldCgpLENyLmxpbmVTdGFydD1Mcn0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciB0PTIqRXI7dnIrPXQ8MD80KlR0K3Q6dCxDci5saW5lU3RhcnQ9Q3IubGluZUVuZD1Dci5wb2ludD1QfX07ZnVuY3Rpb24gTHIoKXt2YXIgdCxlLHIsbixpO2Z1bmN0aW9uIGEodCxlKXtlPWUqQ3QvMitUdC80O3ZhciBhPSh0Kj1DdCktcixvPWE+PTA/MTotMSxzPW8qYSxsPU1hdGguY29zKGUpLGM9TWF0aC5zaW4oZSksdT1pKmMsaD1uKmwrdSpNYXRoLmNvcyhzKSxmPXUqbypNYXRoLnNpbihzKTtFci5hZGQoTWF0aC5hdGFuMihmLGgpKSxyPXQsbj1sLGk9Y31Dci5wb2ludD1mdW5jdGlvbihvLHMpe0NyLnBvaW50PWEscj0odD1vKSpDdCxuPU1hdGguY29zKHM9KGU9cykqQ3QvMitUdC80KSxpPU1hdGguc2luKHMpfSxDci5saW5lRW5kPWZ1bmN0aW9uKCl7YSh0LGUpfX1mdW5jdGlvbiB6cih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPU1hdGguY29zKHIpO3JldHVybltuKk1hdGguY29zKGUpLG4qTWF0aC5zaW4oZSksTWF0aC5zaW4ocildfWZ1bmN0aW9uIE9yKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdfWZ1bmN0aW9uIElyKHQsZSl7cmV0dXJuW3RbMV0qZVsyXS10WzJdKmVbMV0sdFsyXSplWzBdLXRbMF0qZVsyXSx0WzBdKmVbMV0tdFsxXSplWzBdXX1mdW5jdGlvbiBEcih0LGUpe3RbMF0rPWVbMF0sdFsxXSs9ZVsxXSx0WzJdKz1lWzJdfWZ1bmN0aW9uIFByKHQsZSl7cmV0dXJuW3RbMF0qZSx0WzFdKmUsdFsyXSplXX1mdW5jdGlvbiBScih0KXt2YXIgZT1NYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSt0WzJdKnRbMl0pO3RbMF0vPWUsdFsxXS89ZSx0WzJdLz1lfWZ1bmN0aW9uIEZyKHQpe3JldHVybltNYXRoLmF0YW4yKHRbMV0sdFswXSksRHQodFsyXSldfWZ1bmN0aW9uIEJyKHQsZSl7cmV0dXJuIHkodFswXS1lWzBdKTxrdCYmeSh0WzFdLWVbMV0pPGt0fXQuZ2VvLmJvdW5kcz1mdW5jdGlvbigpe3ZhciBlLHIsbixpLGEsbyxzLGwsYyx1LGgsZj17cG9pbnQ6cCxsaW5lU3RhcnQ6ZyxsaW5lRW5kOnYscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Zi5wb2ludD1tLGYubGluZVN0YXJ0PXgsZi5saW5lRW5kPWIsYz0wLENyLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7Q3IucG9seWdvbkVuZCgpLGYucG9pbnQ9cCxmLmxpbmVTdGFydD1nLGYubGluZUVuZD12LEVyPDA/KGU9LShuPTE4MCkscj0tKGk9OTApKTpjPmt0P2k9OTA6Yzwta3QmJihyPS05MCksaFswXT1lLGhbMV09bn19O2Z1bmN0aW9uIHAodCxhKXt1LnB1c2goaD1bZT10LG49dF0pLGE8ciYmKHI9YSksYT5pJiYoaT1hKX1mdW5jdGlvbiBkKHQsbyl7dmFyIHM9enIoW3QqQ3QsbypDdF0pO2lmKGwpe3ZhciBjPUlyKGwscyksdT1JcihbY1sxXSwtY1swXSwwXSxjKTtScih1KSx1PUZyKHUpO3ZhciBoPXQtYSxmPWg+MD8xOi0xLGQ9dVswXSpMdCpmLGc9eShoKT4xODA7aWYoZ14oZiphPGQmJmQ8Zip0KSkodj11WzFdKkx0KT5pJiYoaT12KTtlbHNlIGlmKGdeKGYqYTwoZD0oZCszNjApJTM2MC0xODApJiZkPGYqdCkpe3ZhciB2Oyh2PS11WzFdKkx0KTxyJiYocj12KX1lbHNlIG88ciYmKHI9byksbz5pJiYoaT1vKTtnP3Q8YT9fKGUsdCk+XyhlLG4pJiYobj10KTpfKHQsbik+XyhlLG4pJiYoZT10KTpuPj1lPyh0PGUmJihlPXQpLHQ+biYmKG49dCkpOnQ+YT9fKGUsdCk+XyhlLG4pJiYobj10KTpfKHQsbik+XyhlLG4pJiYoZT10KX1lbHNlIHAodCxvKTtsPXMsYT10fWZ1bmN0aW9uIGcoKXtmLnBvaW50PWR9ZnVuY3Rpb24gdigpe2hbMF09ZSxoWzFdPW4sZi5wb2ludD1wLGw9bnVsbH1mdW5jdGlvbiBtKHQsZSl7aWYobCl7dmFyIHI9dC1hO2MrPXkocik+MTgwP3IrKHI+MD8zNjA6LTM2MCk6cn1lbHNlIG89dCxzPWU7Q3IucG9pbnQodCxlKSxkKHQsZSl9ZnVuY3Rpb24geCgpe0NyLmxpbmVTdGFydCgpfWZ1bmN0aW9uIGIoKXttKG8scyksQ3IubGluZUVuZCgpLHkoYyk+a3QmJihlPS0obj0xODApKSxoWzBdPWUsaFsxXT1uLGw9bnVsbH1mdW5jdGlvbiBfKHQsZSl7cmV0dXJuKGUtPXQpPDA/ZSszNjA6ZX1mdW5jdGlvbiB3KHQsZSl7cmV0dXJuIHRbMF0tZVswXX1mdW5jdGlvbiBrKHQsZSl7cmV0dXJuIGVbMF08PWVbMV0/ZVswXTw9dCYmdDw9ZVsxXTp0PGVbMF18fGVbMV08dH1yZXR1cm4gZnVuY3Rpb24oYSl7aWYoaT1uPS0oZT1yPTEvMCksdT1bXSx0Lmdlby5zdHJlYW0oYSxmKSxjPXUubGVuZ3RoKXt1LnNvcnQodyk7Zm9yKHZhciBvPTEscz1bZz11WzBdXTtvPGM7KytvKWsoKHA9dVtvXSlbMF0sZyl8fGsocFsxXSxnKT8oXyhnWzBdLHBbMV0pPl8oZ1swXSxnWzFdKSYmKGdbMV09cFsxXSksXyhwWzBdLGdbMV0pPl8oZ1swXSxnWzFdKSYmKGdbMF09cFswXSkpOnMucHVzaChnPXApO2Zvcih2YXIgbCxjLHAsZD0tMS8wLGc9KG89MCxzW2M9cy5sZW5ndGgtMV0pO288PWM7Zz1wLCsrbylwPXNbb10sKGw9XyhnWzFdLHBbMF0pKT5kJiYoZD1sLGU9cFswXSxuPWdbMV0pfXJldHVybiB1PWg9bnVsbCxlPT09MS8wfHxyPT09MS8wP1tbTmFOLE5hTl0sW05hTixOYU5dXTpbW2Uscl0sW24saV1dfX0oKSx0Lmdlby5jZW50cm9pZD1mdW5jdGlvbihlKXttcj15cj14cj1icj1fcj13cj1rcj1Bcj1Ucj1Ncj1Tcj0wLHQuZ2VvLnN0cmVhbShlLE5yKTt2YXIgcj1UcixuPU1yLGk9U3IsYT1yKnIrbipuK2kqaTtyZXR1cm4gYTxBdCYmKHI9d3Isbj1rcixpPUFyLHlyPGt0JiYocj14cixuPWJyLGk9X3IpLChhPXIqcituKm4raSppKTxBdCk/W05hTixOYU5dOltNYXRoLmF0YW4yKG4scikqTHQsRHQoaS9NYXRoLnNxcnQoYSkpKkx0XX07dmFyIE5yPXtzcGhlcmU6UCxwb2ludDpqcixsaW5lU3RhcnQ6VXIsbGluZUVuZDpxcixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtOci5saW5lU3RhcnQ9SHJ9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtOci5saW5lU3RhcnQ9VXJ9fTtmdW5jdGlvbiBqcih0LGUpe3QqPUN0O3ZhciByPU1hdGguY29zKGUqPUN0KTtWcihyKk1hdGguY29zKHQpLHIqTWF0aC5zaW4odCksTWF0aC5zaW4oZSkpfWZ1bmN0aW9uIFZyKHQsZSxyKXt4cis9KHQteHIpLysrbXIsYnIrPShlLWJyKS9tcixfcis9KHItX3IpL21yfWZ1bmN0aW9uIFVyKCl7dmFyIHQsZSxyO2Z1bmN0aW9uIG4obixpKXtuKj1DdDt2YXIgYT1NYXRoLmNvcyhpKj1DdCksbz1hKk1hdGguY29zKG4pLHM9YSpNYXRoLnNpbihuKSxsPU1hdGguc2luKGkpLGM9TWF0aC5hdGFuMihNYXRoLnNxcnQoKGM9ZSpsLXIqcykqYysoYz1yKm8tdCpsKSpjKyhjPXQqcy1lKm8pKmMpLHQqbytlKnMrcipsKTt5cis9Yyx3cis9YyoodCsodD1vKSksa3IrPWMqKGUrKGU9cykpLEFyKz1jKihyKyhyPWwpKSxWcih0LGUscil9TnIucG9pbnQ9ZnVuY3Rpb24oaSxhKXtpKj1DdDt2YXIgbz1NYXRoLmNvcyhhKj1DdCk7dD1vKk1hdGguY29zKGkpLGU9bypNYXRoLnNpbihpKSxyPU1hdGguc2luKGEpLE5yLnBvaW50PW4sVnIodCxlLHIpfX1mdW5jdGlvbiBxcigpe05yLnBvaW50PWpyfWZ1bmN0aW9uIEhyKCl7dmFyIHQsZSxyLG4saTtmdW5jdGlvbiBhKHQsZSl7dCo9Q3Q7dmFyIGE9TWF0aC5jb3MoZSo9Q3QpLG89YSpNYXRoLmNvcyh0KSxzPWEqTWF0aC5zaW4odCksbD1NYXRoLnNpbihlKSxjPW4qbC1pKnMsdT1pKm8tcipsLGg9cipzLW4qbyxmPU1hdGguc3FydChjKmMrdSp1K2gqaCkscD1yKm8rbipzK2kqbCxkPWYmJi1JdChwKS9mLGc9TWF0aC5hdGFuMihmLHApO1RyKz1kKmMsTXIrPWQqdSxTcis9ZCpoLHlyKz1nLHdyKz1nKihyKyhyPW8pKSxrcis9Zyoobisobj1zKSksQXIrPWcqKGkrKGk9bCkpLFZyKHIsbixpKX1Oci5wb2ludD1mdW5jdGlvbihvLHMpe3Q9byxlPXMsTnIucG9pbnQ9YSxvKj1DdDt2YXIgbD1NYXRoLmNvcyhzKj1DdCk7cj1sKk1hdGguY29zKG8pLG49bCpNYXRoLnNpbihvKSxpPU1hdGguc2luKHMpLFZyKHIsbixpKX0sTnIubGluZUVuZD1mdW5jdGlvbigpe2EodCxlKSxOci5saW5lRW5kPXFyLE5yLnBvaW50PWpyfX1mdW5jdGlvbiBHcih0LGUpe2Z1bmN0aW9uIHIocixuKXtyZXR1cm4gcj10KHIsbiksZShyWzBdLHJbMV0pfXJldHVybiB0LmludmVydCYmZS5pbnZlcnQmJihyLmludmVydD1mdW5jdGlvbihyLG4pe3JldHVybihyPWUuaW52ZXJ0KHIsbikpJiZ0LmludmVydChyWzBdLHJbMV0pfSkscn1mdW5jdGlvbiBZcigpe3JldHVybiEwfWZ1bmN0aW9uIFdyKHQsZSxyLG4saSl7dmFyIGE9W10sbz1bXTtpZih0LmZvckVhY2goZnVuY3Rpb24odCl7aWYoISgoZT10Lmxlbmd0aC0xKTw9MCkpe3ZhciBlLHI9dFswXSxuPXRbZV07aWYoQnIocixuKSl7aS5saW5lU3RhcnQoKTtmb3IodmFyIHM9MDtzPGU7KytzKWkucG9pbnQoKHI9dFtzXSlbMF0sclsxXSk7aS5saW5lRW5kKCl9ZWxzZXt2YXIgbD1uZXcgWnIocix0LG51bGwsITApLGM9bmV3IFpyKHIsbnVsbCxsLCExKTtsLm89YyxhLnB1c2gobCksby5wdXNoKGMpLGw9bmV3IFpyKG4sdCxudWxsLCExKSxjPW5ldyBacihuLG51bGwsbCwhMCksbC5vPWMsYS5wdXNoKGwpLG8ucHVzaChjKX19fSksby5zb3J0KGUpLFhyKGEpLFhyKG8pLGEubGVuZ3RoKXtmb3IodmFyIHM9MCxsPXIsYz1vLmxlbmd0aDtzPGM7KytzKW9bc10uZT1sPSFsO2Zvcih2YXIgdSxoLGY9YVswXTs7KXtmb3IodmFyIHA9ZixkPSEwO3AudjspaWYoKHA9cC5uKT09PWYpcmV0dXJuO3U9cC56LGkubGluZVN0YXJ0KCk7ZG97aWYocC52PXAuby52PSEwLHAuZSl7aWYoZClmb3Iocz0wLGM9dS5sZW5ndGg7czxjOysrcylpLnBvaW50KChoPXVbc10pWzBdLGhbMV0pO2Vsc2UgbihwLngscC5uLngsMSxpKTtwPXAubn1lbHNle2lmKGQpZm9yKHM9KHU9cC5wLnopLmxlbmd0aC0xO3M+PTA7LS1zKWkucG9pbnQoKGg9dVtzXSlbMF0saFsxXSk7ZWxzZSBuKHAueCxwLnAueCwtMSxpKTtwPXAucH11PShwPXAubykueixkPSFkfXdoaWxlKCFwLnYpO2kubGluZUVuZCgpfX19ZnVuY3Rpb24gWHIodCl7aWYoZT10Lmxlbmd0aCl7Zm9yKHZhciBlLHIsbj0wLGk9dFswXTsrK248ZTspaS5uPXI9dFtuXSxyLnA9aSxpPXI7aS5uPXI9dFswXSxyLnA9aX19ZnVuY3Rpb24gWnIodCxlLHIsbil7dGhpcy54PXQsdGhpcy56PWUsdGhpcy5vPXIsdGhpcy5lPW4sdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH1mdW5jdGlvbiAkcihlLHIsbixpKXtyZXR1cm4gZnVuY3Rpb24oYSxvKXt2YXIgcyxsPXIobyksYz1hLmludmVydChpWzBdLGlbMV0pLHU9e3BvaW50OmgsbGluZVN0YXJ0OnAsbGluZUVuZDpkLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3UucG9pbnQ9Yix1LmxpbmVTdGFydD1fLHUubGluZUVuZD13LHM9W10sZz1bXX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3UucG9pbnQ9aCx1LmxpbmVTdGFydD1wLHUubGluZUVuZD1kLHM9dC5tZXJnZShzKTt2YXIgZT1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0sbj10WzFdLGk9W01hdGguc2luKHIpLC1NYXRoLmNvcyhyKSwwXSxhPTAsbz0wO0VyLnJlc2V0KCk7Zm9yKHZhciBzPTAsbD1lLmxlbmd0aDtzPGw7KytzKXt2YXIgYz1lW3NdLHU9Yy5sZW5ndGg7aWYodSlmb3IodmFyIGg9Y1swXSxmPWhbMF0scD1oWzFdLzIrVHQvNCxkPU1hdGguc2luKHApLGc9TWF0aC5jb3MocCksdj0xOzspe3Y9PT11JiYodj0wKTt2YXIgbT0odD1jW3ZdKVswXSx5PXRbMV0vMitUdC80LHg9TWF0aC5zaW4oeSksYj1NYXRoLmNvcyh5KSxfPW0tZix3PV8+PTA/MTotMSxrPXcqXyxBPWs+VHQsVD1kKng7aWYoRXIuYWRkKE1hdGguYXRhbjIoVCp3Kk1hdGguc2luKGspLGcqYitUKk1hdGguY29zKGspKSksYSs9QT9fK3cqTXQ6XyxBXmY+PXJebT49cil7dmFyIE09SXIoenIoaCksenIodCkpO1JyKE0pO3ZhciBTPUlyKGksTSk7UnIoUyk7dmFyIEU9KEFeXz49MD8tMToxKSpEdChTWzJdKTsobj5FfHxuPT09RSYmKE1bMF18fE1bMV0pKSYmKG8rPUFeXz49MD8xOi0xKX1pZighdisrKWJyZWFrO2Y9bSxkPXgsZz1iLGg9dH19cmV0dXJuKGE8LWt0fHxhPGt0JiZFcjwta3QpXjEmb30oYyxnKTtzLmxlbmd0aD8oeHx8KG8ucG9seWdvblN0YXJ0KCkseD0hMCksV3IocyxRcixlLG4sbykpOmUmJih4fHwoby5wb2x5Z29uU3RhcnQoKSx4PSEwKSxvLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsbyksby5saW5lRW5kKCkpLHgmJihvLnBvbHlnb25FbmQoKSx4PSExKSxzPWc9bnVsbH0sc3BoZXJlOmZ1bmN0aW9uKCl7by5wb2x5Z29uU3RhcnQoKSxvLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsbyksby5saW5lRW5kKCksby5wb2x5Z29uRW5kKCl9fTtmdW5jdGlvbiBoKHQscil7dmFyIG49YSh0LHIpO2UodD1uWzBdLHI9blsxXSkmJm8ucG9pbnQodCxyKX1mdW5jdGlvbiBmKHQsZSl7dmFyIHI9YSh0LGUpO2wucG9pbnQoclswXSxyWzFdKX1mdW5jdGlvbiBwKCl7dS5wb2ludD1mLGwubGluZVN0YXJ0KCl9ZnVuY3Rpb24gZCgpe3UucG9pbnQ9aCxsLmxpbmVFbmQoKX12YXIgZyx2LG09S3IoKSx5PXIobSkseD0hMTtmdW5jdGlvbiBiKHQsZSl7di5wdXNoKFt0LGVdKTt2YXIgcj1hKHQsZSk7eS5wb2ludChyWzBdLHJbMV0pfWZ1bmN0aW9uIF8oKXt5LmxpbmVTdGFydCgpLHY9W119ZnVuY3Rpb24gdygpe2IodlswXVswXSx2WzBdWzFdKSx5LmxpbmVFbmQoKTt2YXIgdCxlPXkuY2xlYW4oKSxyPW0uYnVmZmVyKCksbj1yLmxlbmd0aDtpZih2LnBvcCgpLGcucHVzaCh2KSx2PW51bGwsbilpZigxJmUpe3ZhciBpLGE9LTE7aWYoKG49KHQ9clswXSkubGVuZ3RoLTEpPjApe2Zvcih4fHwoby5wb2x5Z29uU3RhcnQoKSx4PSEwKSxvLmxpbmVTdGFydCgpOysrYTxuOylvLnBvaW50KChpPXRbYV0pWzBdLGlbMV0pO28ubGluZUVuZCgpfX1lbHNlIG4+MSYmMiZlJiZyLnB1c2goci5wb3AoKS5jb25jYXQoci5zaGlmdCgpKSkscy5wdXNoKHIuZmlsdGVyKEpyKSl9cmV0dXJuIHV9fWZ1bmN0aW9uIEpyKHQpe3JldHVybiB0Lmxlbmd0aD4xfWZ1bmN0aW9uIEtyKCl7dmFyIHQsZT1bXTtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5wdXNoKHQ9W10pfSxwb2ludDpmdW5jdGlvbihlLHIpe3QucHVzaChbZSxyXSl9LGxpbmVFbmQ6UCxidWZmZXI6ZnVuY3Rpb24oKXt2YXIgcj1lO3JldHVybiBlPVtdLHQ9bnVsbCxyfSxyZWpvaW46ZnVuY3Rpb24oKXtlLmxlbmd0aD4xJiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5zaGlmdCgpKSl9fX1mdW5jdGlvbiBRcih0LGUpe3JldHVybigodD10LngpWzBdPDA/dFsxXS1FdC1rdDpFdC10WzFdKS0oKGU9ZS54KVswXTwwP2VbMV0tRXQta3Q6RXQtZVsxXSl9dmFyIHRuPSRyKFlyLGZ1bmN0aW9uKHQpe3ZhciBlLHI9TmFOLG49TmFOLGk9TmFOO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpLGU9MX0scG9pbnQ6ZnVuY3Rpb24oYSxvKXt2YXIgcz1hPjA/VHQ6LVR0LGw9eShhLXIpO3kobC1UdCk8a3Q/KHQucG9pbnQocixuPShuK28pLzI+MD9FdDotRXQpLHQucG9pbnQoaSxuKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQocyxuKSx0LnBvaW50KGEsbiksZT0wKTppIT09cyYmbD49VHQmJih5KHItaSk8a3QmJihyLT1pKmt0KSx5KGEtcyk8a3QmJihhLT1zKmt0KSxuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbz1NYXRoLnNpbih0LXIpO3JldHVybiB5KG8pPmt0P01hdGguYXRhbigoTWF0aC5zaW4oZSkqKGE9TWF0aC5jb3MobikpKk1hdGguc2luKHIpLU1hdGguc2luKG4pKihpPU1hdGguY29zKGUpKSpNYXRoLnNpbih0KSkvKGkqYSpvKSk6KGUrbikvMn0ocixuLGEsbyksdC5wb2ludChpLG4pLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludChzLG4pLGU9MCksdC5wb2ludChyPWEsbj1vKSxpPXN9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0LmxpbmVFbmQoKSxyPW49TmFOfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiAyLWV9fX0sZnVuY3Rpb24odCxlLHIsbil7dmFyIGk7aWYobnVsbD09dClpPXIqRXQsbi5wb2ludCgtVHQsaSksbi5wb2ludCgwLGkpLG4ucG9pbnQoVHQsaSksbi5wb2ludChUdCwwKSxuLnBvaW50KFR0LC1pKSxuLnBvaW50KDAsLWkpLG4ucG9pbnQoLVR0LC1pKSxuLnBvaW50KC1UdCwwKSxuLnBvaW50KC1UdCxpKTtlbHNlIGlmKHkodFswXS1lWzBdKT5rdCl7dmFyIGE9dFswXTxlWzBdP1R0Oi1UdDtpPXIqYS8yLG4ucG9pbnQoLWEsaSksbi5wb2ludCgwLGkpLG4ucG9pbnQoYSxpKX1lbHNlIG4ucG9pbnQoZVswXSxlWzFdKX0sWy1UdCwtVHQvMl0pO2Z1bmN0aW9uIGVuKHQsZSxyLG4pe3JldHVybiBmdW5jdGlvbihpKXt2YXIgYSxvPWkuYSxzPWkuYixsPW8ueCxjPW8ueSx1PTAsaD0xLGY9cy54LWwscD1zLnktYztpZihhPXQtbCxmfHwhKGE+MCkpe2lmKGEvPWYsZjwwKXtpZihhPHUpcmV0dXJuO2E8aCYmKGg9YSl9ZWxzZSBpZihmPjApe2lmKGE+aClyZXR1cm47YT51JiYodT1hKX1pZihhPXItbCxmfHwhKGE8MCkpe2lmKGEvPWYsZjwwKXtpZihhPmgpcmV0dXJuO2E+dSYmKHU9YSl9ZWxzZSBpZihmPjApe2lmKGE8dSlyZXR1cm47YTxoJiYoaD1hKX1pZihhPWUtYyxwfHwhKGE+MCkpe2lmKGEvPXAscDwwKXtpZihhPHUpcmV0dXJuO2E8aCYmKGg9YSl9ZWxzZSBpZihwPjApe2lmKGE+aClyZXR1cm47YT51JiYodT1hKX1pZihhPW4tYyxwfHwhKGE8MCkpe2lmKGEvPXAscDwwKXtpZihhPmgpcmV0dXJuO2E+dSYmKHU9YSl9ZWxzZSBpZihwPjApe2lmKGE8dSlyZXR1cm47YTxoJiYoaD1hKX1yZXR1cm4gdT4wJiYoaS5hPXt4OmwrdSpmLHk6Yyt1KnB9KSxoPDEmJihpLmI9e3g6bCtoKmYseTpjK2gqcH0pLGl9fX19fX12YXIgcm49MWU5O2Z1bmN0aW9uIG5uKGUscixuLGkpe3JldHVybiBmdW5jdGlvbihsKXt2YXIgYyx1LGgsZixwLGQsZyx2LG0seSx4LGI9bCxfPUtyKCksdz1lbihlLHIsbixpKSxrPXtwb2ludDpNLGxpbmVTdGFydDpmdW5jdGlvbigpe2sucG9pbnQ9Uyx1JiZ1LnB1c2goaD1bXSk7eT0hMCxtPSExLGc9dj1OYU59LGxpbmVFbmQ6ZnVuY3Rpb24oKXtjJiYoUyhmLHApLGQmJm0mJl8ucmVqb2luKCksYy5wdXNoKF8uYnVmZmVyKCkpKTtrLnBvaW50PU0sbSYmbC5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2w9XyxjPVtdLHU9W10seD0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe2w9YixjPXQubWVyZ2UoYyk7dmFyIHI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj11Lmxlbmd0aCxuPXRbMV0saT0wO2k8cjsrK2kpZm9yKHZhciBhLG89MSxzPXVbaV0sbD1zLmxlbmd0aCxjPXNbMF07bzxsOysrbylhPXNbb10sY1sxXTw9bj9hWzFdPm4mJk90KGMsYSx0KT4wJiYrK2U6YVsxXTw9biYmT3QoYyxhLHQpPDAmJi0tZSxjPWE7cmV0dXJuIDAhPT1lfShbZSxpXSksbj14JiZyLGE9Yy5sZW5ndGg7KG58fGEpJiYobC5wb2x5Z29uU3RhcnQoKSxuJiYobC5saW5lU3RhcnQoKSxBKG51bGwsbnVsbCwxLGwpLGwubGluZUVuZCgpKSxhJiZXcihjLG8scixBLGwpLGwucG9seWdvbkVuZCgpKSxjPXU9aD1udWxsfX07ZnVuY3Rpb24gQSh0LG8sbCxjKXt2YXIgdT0wLGg9MDtpZihudWxsPT10fHwodT1hKHQsbCkpIT09KGg9YShvLGwpKXx8cyh0LG8pPDBebD4wKWRve2MucG9pbnQoMD09PXV8fDM9PT11P2U6bix1PjE/aTpyKX13aGlsZSgodT0odStsKzQpJTQpIT09aCk7ZWxzZSBjLnBvaW50KG9bMF0sb1sxXSl9ZnVuY3Rpb24gVCh0LGEpe3JldHVybiBlPD10JiZ0PD1uJiZyPD1hJiZhPD1pfWZ1bmN0aW9uIE0odCxlKXtUKHQsZSkmJmwucG9pbnQodCxlKX1mdW5jdGlvbiBTKHQsZSl7dmFyIHI9VCh0PU1hdGgubWF4KC1ybixNYXRoLm1pbihybix0KSksZT1NYXRoLm1heCgtcm4sTWF0aC5taW4ocm4sZSkpKTtpZih1JiZoLnB1c2goW3QsZV0pLHkpZj10LHA9ZSxkPXIseT0hMSxyJiYobC5saW5lU3RhcnQoKSxsLnBvaW50KHQsZSkpO2Vsc2UgaWYociYmbSlsLnBvaW50KHQsZSk7ZWxzZXt2YXIgbj17YTp7eDpnLHk6dn0sYjp7eDp0LHk6ZX19O3cobik/KG18fChsLmxpbmVTdGFydCgpLGwucG9pbnQobi5hLngsbi5hLnkpKSxsLnBvaW50KG4uYi54LG4uYi55KSxyfHxsLmxpbmVFbmQoKSx4PSExKTpyJiYobC5saW5lU3RhcnQoKSxsLnBvaW50KHQsZSkseD0hMSl9Zz10LHY9ZSxtPXJ9cmV0dXJuIGt9O2Z1bmN0aW9uIGEodCxpKXtyZXR1cm4geSh0WzBdLWUpPGt0P2k+MD8wOjM6eSh0WzBdLW4pPGt0P2k+MD8yOjE6eSh0WzFdLXIpPGt0P2k+MD8xOjA6aT4wPzM6Mn1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHModC54LGUueCl9ZnVuY3Rpb24gcyh0LGUpe3ZhciByPWEodCwxKSxuPWEoZSwxKTtyZXR1cm4gciE9PW4/ci1uOjA9PT1yP2VbMV0tdFsxXToxPT09cj90WzBdLWVbMF06Mj09PXI/dFsxXS1lWzFdOmVbMF0tdFswXX19ZnVuY3Rpb24gYW4odCl7dmFyIGU9MCxyPVR0LzMsbj1Dbih0KSxpPW4oZSxyKTtyZXR1cm4gaS5wYXJhbGxlbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bihlPXRbMF0qVHQvMTgwLHI9dFsxXSpUdC8xODApOltlL1R0KjE4MCxyL1R0KjE4MF19LGl9ZnVuY3Rpb24gb24odCxlKXt2YXIgcj1NYXRoLnNpbih0KSxuPShyK01hdGguc2luKGUpKS8yLGk9MStyKigyKm4tciksYT1NYXRoLnNxcnQoaSkvbjtmdW5jdGlvbiBvKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KGktMipuKk1hdGguc2luKGUpKS9uO3JldHVybltyKk1hdGguc2luKHQqPW4pLGEtcipNYXRoLmNvcyh0KV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9YS1lO3JldHVybltNYXRoLmF0YW4yKHQscikvbixEdCgoaS0odCp0K3IqcikqbipuKS8oMipuKSldfSxvfXQuZ2VvLmNsaXBFeHRlbnQ9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbixpLGEsbz17c3RyZWFtOmZ1bmN0aW9uKHQpe3JldHVybiBpJiYoaS52YWxpZD0hMSksKGk9YSh0KSkudmFsaWQ9ITAsaX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW5uKHQ9K3NbMF1bMF0sZT0rc1swXVsxXSxyPStzWzFdWzBdLG49K3NbMV1bMV0pLGkmJihpLnZhbGlkPSExLGk9bnVsbCksbyk6W1t0LGVdLFtyLG5dXX19O3JldHVybiBvLmV4dGVudChbWzAsMF0sWzk2MCw1MDBdXSl9LCh0Lmdlby5jb25pY0VxdWFsQXJlYT1mdW5jdGlvbigpe3JldHVybiBhbihvbil9KS5yYXc9b24sdC5nZW8uYWxiZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFs5NiwwXSkuY2VudGVyKFstLjYsMzguN10pLnBhcmFsbGVscyhbMjkuNSw0NS41XSkuc2NhbGUoMTA3MCl9LHQuZ2VvLmFsYmVyc1VzYT1mdW5jdGlvbigpe3ZhciBlLHIsbixpLGE9dC5nZW8uYWxiZXJzKCksbz10Lmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbMTU0LDBdKS5jZW50ZXIoWy0yLDU4LjVdKS5wYXJhbGxlbHMoWzU1LDY1XSkscz10Lmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxsPXtwb2ludDpmdW5jdGlvbih0LHIpe2U9W3Qscl19fTtmdW5jdGlvbiBjKHQpe3ZhciBhPXRbMF0sbz10WzFdO3JldHVybiBlPW51bGwscihhLG8pLGV8fChuKGEsbyksZSl8fGkoYSxvKSxlfXJldHVybiBjLmludmVydD1mdW5jdGlvbih0KXt2YXIgZT1hLnNjYWxlKCkscj1hLnRyYW5zbGF0ZSgpLG49KHRbMF0tclswXSkvZSxpPSh0WzFdLXJbMV0pL2U7cmV0dXJuKGk+PS4xMiYmaTwuMjM0JiZuPj0tLjQyNSYmbjwtLjIxND9vOmk+PS4xNjYmJmk8LjIzNCYmbj49LS4yMTQmJm48LS4xMTU/czphKS5pbnZlcnQodCl9LGMuc3RyZWFtPWZ1bmN0aW9uKHQpe3ZhciBlPWEuc3RyZWFtKHQpLHI9by5zdHJlYW0odCksbj1zLnN0cmVhbSh0KTtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24odCxpKXtlLnBvaW50KHQsaSksci5wb2ludCh0LGkpLG4ucG9pbnQodCxpKX0sc3BoZXJlOmZ1bmN0aW9uKCl7ZS5zcGhlcmUoKSxyLnNwaGVyZSgpLG4uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2UubGluZVN0YXJ0KCksci5saW5lU3RhcnQoKSxuLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7ZS5saW5lRW5kKCksci5saW5lRW5kKCksbi5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2UucG9seWdvblN0YXJ0KCksci5wb2x5Z29uU3RhcnQoKSxuLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZS5wb2x5Z29uRW5kKCksci5wb2x5Z29uRW5kKCksbi5wb2x5Z29uRW5kKCl9fX0sYy5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEucHJlY2lzaW9uKHQpLG8ucHJlY2lzaW9uKHQpLHMucHJlY2lzaW9uKHQpLGMpOmEucHJlY2lzaW9uKCl9LGMuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEuc2NhbGUodCksby5zY2FsZSguMzUqdCkscy5zY2FsZSh0KSxjLnRyYW5zbGF0ZShhLnRyYW5zbGF0ZSgpKSk6YS5zY2FsZSgpfSxjLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYS50cmFuc2xhdGUoKTt2YXIgZT1hLnNjYWxlKCksdT0rdFswXSxoPSt0WzFdO3JldHVybiByPWEudHJhbnNsYXRlKHQpLmNsaXBFeHRlbnQoW1t1LS40NTUqZSxoLS4yMzgqZV0sW3UrLjQ1NSplLGgrLjIzOCplXV0pLnN0cmVhbShsKS5wb2ludCxuPW8udHJhbnNsYXRlKFt1LS4zMDcqZSxoKy4yMDEqZV0pLmNsaXBFeHRlbnQoW1t1LS40MjUqZStrdCxoKy4xMiplK2t0XSxbdS0uMjE0KmUta3QsaCsuMjM0KmUta3RdXSkuc3RyZWFtKGwpLnBvaW50LGk9cy50cmFuc2xhdGUoW3UtLjIwNSplLGgrLjIxMiplXSkuY2xpcEV4dGVudChbW3UtLjIxNCplK2t0LGgrLjE2NiplK2t0XSxbdS0uMTE1KmUta3QsaCsuMjM0KmUta3RdXSkuc3RyZWFtKGwpLnBvaW50LGN9LGMuc2NhbGUoMTA3MCl9O3ZhciBzbixsbixjbix1bixobixmbixwbj17cG9pbnQ6UCxsaW5lU3RhcnQ6UCxsaW5lRW5kOlAscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bG49MCxwbi5saW5lU3RhcnQ9ZG59LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtwbi5saW5lU3RhcnQ9cG4ubGluZUVuZD1wbi5wb2ludD1QLHNuKz15KGxuLzIpfX07ZnVuY3Rpb24gZG4oKXt2YXIgdCxlLHIsbjtmdW5jdGlvbiBpKHQsZSl7bG4rPW4qdC1yKmUscj10LG49ZX1wbi5wb2ludD1mdW5jdGlvbihhLG8pe3BuLnBvaW50PWksdD1yPWEsZT1uPW99LHBuLmxpbmVFbmQ9ZnVuY3Rpb24oKXtpKHQsZSl9fXZhciBnbj17cG9pbnQ6ZnVuY3Rpb24odCxlKXt0PGNuJiYoY249dCk7dD5obiYmKGhuPXQpO2U8dW4mJih1bj1lKTtlPmZuJiYoZm49ZSl9LGxpbmVTdGFydDpQLGxpbmVFbmQ6UCxwb2x5Z29uU3RhcnQ6UCxwb2x5Z29uRW5kOlB9O2Z1bmN0aW9uIHZuKCl7dmFyIHQ9bW4oNC41KSxlPVtdLHI9e3BvaW50Om4sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ci5wb2ludD1pfSxsaW5lRW5kOm8scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7ci5saW5lRW5kPXN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtyLmxpbmVFbmQ9byxyLnBvaW50PW59LHBvaW50UmFkaXVzOmZ1bmN0aW9uKGUpe3JldHVybiB0PW1uKGUpLHJ9LHJlc3VsdDpmdW5jdGlvbigpe2lmKGUubGVuZ3RoKXt2YXIgdD1lLmpvaW4oXCJcIik7cmV0dXJuIGU9W10sdH19fTtmdW5jdGlvbiBuKHIsbil7ZS5wdXNoKFwiTVwiLHIsXCIsXCIsbix0KX1mdW5jdGlvbiBpKHQsbil7ZS5wdXNoKFwiTVwiLHQsXCIsXCIsbiksci5wb2ludD1hfWZ1bmN0aW9uIGEodCxyKXtlLnB1c2goXCJMXCIsdCxcIixcIixyKX1mdW5jdGlvbiBvKCl7ci5wb2ludD1ufWZ1bmN0aW9uIHMoKXtlLnB1c2goXCJaXCIpfXJldHVybiByfWZ1bmN0aW9uIG1uKHQpe3JldHVyblwibTAsXCIrdCtcImFcIit0K1wiLFwiK3QrXCIgMCAxLDEgMCxcIistMip0K1wiYVwiK3QrXCIsXCIrdCtcIiAwIDEsMSAwLFwiKzIqdCtcInpcIn12YXIgeW4seG49e3BvaW50OmJuLGxpbmVTdGFydDpfbixsaW5lRW5kOnduLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3huLmxpbmVTdGFydD1rbn0scG9seWdvbkVuZDpmdW5jdGlvbigpe3huLnBvaW50PWJuLHhuLmxpbmVTdGFydD1fbix4bi5saW5lRW5kPXdufX07ZnVuY3Rpb24gYm4odCxlKXt4cis9dCxicis9ZSwrK19yfWZ1bmN0aW9uIF9uKCl7dmFyIHQsZTtmdW5jdGlvbiByKHIsbil7dmFyIGk9ci10LGE9bi1lLG89TWF0aC5zcXJ0KGkqaSthKmEpO3dyKz1vKih0K3IpLzIsa3IrPW8qKGUrbikvMixBcis9byxibih0PXIsZT1uKX14bi5wb2ludD1mdW5jdGlvbihuLGkpe3huLnBvaW50PXIsYm4odD1uLGU9aSl9fWZ1bmN0aW9uIHduKCl7eG4ucG9pbnQ9Ym59ZnVuY3Rpb24ga24oKXt2YXIgdCxlLHIsbjtmdW5jdGlvbiBpKHQsZSl7dmFyIGk9dC1yLGE9ZS1uLG89TWF0aC5zcXJ0KGkqaSthKmEpO3dyKz1vKihyK3QpLzIsa3IrPW8qKG4rZSkvMixBcis9byxUcis9KG89bip0LXIqZSkqKHIrdCksTXIrPW8qKG4rZSksU3IrPTMqbyxibihyPXQsbj1lKX14bi5wb2ludD1mdW5jdGlvbihhLG8pe3huLnBvaW50PWksYm4odD1yPWEsZT1uPW8pfSx4bi5saW5lRW5kPWZ1bmN0aW9uKCl7aSh0LGUpfX1mdW5jdGlvbiBBbih0KXt2YXIgZT00LjUscj17cG9pbnQ6bixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtyLnBvaW50PWl9LGxpbmVFbmQ6byxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtyLmxpbmVFbmQ9c30scG9seWdvbkVuZDpmdW5jdGlvbigpe3IubGluZUVuZD1vLHIucG9pbnQ9bn0scG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIGU9dCxyfSxyZXN1bHQ6UH07ZnVuY3Rpb24gbihyLG4pe3QubW92ZVRvKHIrZSxuKSx0LmFyYyhyLG4sZSwwLE10KX1mdW5jdGlvbiBpKGUsbil7dC5tb3ZlVG8oZSxuKSxyLnBvaW50PWF9ZnVuY3Rpb24gYShlLHIpe3QubGluZVRvKGUscil9ZnVuY3Rpb24gbygpe3IucG9pbnQ9bn1mdW5jdGlvbiBzKCl7dC5jbG9zZVBhdGgoKX1yZXR1cm4gcn1mdW5jdGlvbiBUbih0KXt2YXIgZT0uNSxyPU1hdGguY29zKDMwKkN0KSxuPTE2O2Z1bmN0aW9uIGkoZSl7cmV0dXJuKG4/ZnVuY3Rpb24oZSl7dmFyIHIsaSxvLHMsbCxjLHUsaCxmLHAsZCxnLHY9e3BvaW50Om0sbGluZVN0YXJ0OnksbGluZUVuZDpiLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2UucG9seWdvblN0YXJ0KCksdi5saW5lU3RhcnQ9X30scG9seWdvbkVuZDpmdW5jdGlvbigpe2UucG9seWdvbkVuZCgpLHYubGluZVN0YXJ0PXl9fTtmdW5jdGlvbiBtKHIsbil7cj10KHIsbiksZS5wb2ludChyWzBdLHJbMV0pfWZ1bmN0aW9uIHkoKXtoPU5hTix2LnBvaW50PXgsZS5saW5lU3RhcnQoKX1mdW5jdGlvbiB4KHIsaSl7dmFyIG89enIoW3IsaV0pLHM9dChyLGkpO2EoaCxmLHUscCxkLGcsaD1zWzBdLGY9c1sxXSx1PXIscD1vWzBdLGQ9b1sxXSxnPW9bMl0sbixlKSxlLnBvaW50KGgsZil9ZnVuY3Rpb24gYigpe3YucG9pbnQ9bSxlLmxpbmVFbmQoKX1mdW5jdGlvbiBfKCl7eSgpLHYucG9pbnQ9dyx2LmxpbmVFbmQ9a31mdW5jdGlvbiB3KHQsZSl7eChyPXQsZSksaT1oLG89ZixzPXAsbD1kLGM9Zyx2LnBvaW50PXh9ZnVuY3Rpb24gaygpe2EoaCxmLHUscCxkLGcsaSxvLHIscyxsLGMsbixlKSx2LmxpbmVFbmQ9YixiKCl9cmV0dXJuIHZ9OmZ1bmN0aW9uKGUpe3JldHVybiBTbihlLGZ1bmN0aW9uKHIsbil7cj10KHIsbiksZS5wb2ludChyWzBdLHJbMV0pfSl9KShlKX1mdW5jdGlvbiBhKG4saSxvLHMsbCxjLHUsaCxmLHAsZCxnLHYsbSl7dmFyIHg9dS1uLGI9aC1pLF89eCp4K2IqYjtpZihfPjQqZSYmdi0tKXt2YXIgdz1zK3Asaz1sK2QsQT1jK2csVD1NYXRoLnNxcnQodyp3K2sqaytBKkEpLE09TWF0aC5hc2luKEEvPVQpLFM9eSh5KEEpLTEpPGt0fHx5KG8tZik8a3Q/KG8rZikvMjpNYXRoLmF0YW4yKGssdyksRT10KFMsTSksQz1FWzBdLEw9RVsxXSx6PUMtbixPPUwtaSxJPWIqei14Kk87KEkqSS9fPmV8fHkoKHgqeitiKk8pL18tLjUpPi4zfHxzKnArbCpkK2MqZzxyKSYmKGEobixpLG8scyxsLGMsQyxMLFMsdy89VCxrLz1ULEEsdixtKSxtLnBvaW50KEMsTCksYShDLEwsUyx3LGssQSx1LGgsZixwLGQsZyx2LG0pKX19cmV0dXJuIGkucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPShlPXQqdCk+MCYmMTYsaSk6TWF0aC5zcXJ0KGUpfSxpfWZ1bmN0aW9uIE1uKHQpe3RoaXMuc3RyZWFtPXR9ZnVuY3Rpb24gU24odCxlKXtyZXR1cm57cG9pbnQ6ZSxzcGhlcmU6ZnVuY3Rpb24oKXt0LnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3QucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25FbmQoKX19fWZ1bmN0aW9uIEVuKHQpe3JldHVybiBDbihmdW5jdGlvbigpe3JldHVybiB0fSkoKX1mdW5jdGlvbiBDbihlKXt2YXIgcixuLGksYSxvLHMsbD1UbihmdW5jdGlvbih0LGUpe3JldHVyblsodD1yKHQsZSkpWzBdKmMrYSxvLXRbMV0qY119KSxjPTE1MCx1PTQ4MCxoPTI1MCxmPTAscD0wLGQ9MCxnPTAsdj0wLG09dG4seD16LGI9bnVsbCxfPW51bGw7ZnVuY3Rpb24gdyh0KXtyZXR1cm5bKHQ9aSh0WzBdKkN0LHRbMV0qQ3QpKVswXSpjK2Esby10WzFdKmNdfWZ1bmN0aW9uIGsodCl7cmV0dXJuKHQ9aS5pbnZlcnQoKHRbMF0tYSkvYywoby10WzFdKS9jKSkmJlt0WzBdKkx0LHRbMV0qTHRdfWZ1bmN0aW9uIEEoKXtpPUdyKG49SW4oZCxnLHYpLHIpO3ZhciB0PXIoZixwKTtyZXR1cm4gYT11LXRbMF0qYyxvPWgrdFsxXSpjLFQoKX1mdW5jdGlvbiBUKCl7cmV0dXJuIHMmJihzLnZhbGlkPSExLHM9bnVsbCksd31yZXR1cm4gdy5zdHJlYW09ZnVuY3Rpb24odCl7cmV0dXJuIHMmJihzLnZhbGlkPSExKSwocz1MbihtKG4sbCh4KHQpKSkpKS52YWxpZD0hMCxzfSx3LmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1udWxsPT10PyhiPXQsdG4pOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguY29zKHQpLHI9ZT4wLG49eShlKT5rdDtyZXR1cm4gJHIoaSxmdW5jdGlvbih0KXt2YXIgZSxzLGwsYyx1O3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtjPWw9ITEsdT0xfSxwb2ludDpmdW5jdGlvbihoLGYpe3ZhciBwLGQ9W2gsZl0sZz1pKGgsZiksdj1yP2c/MDpvKGgsZik6Zz9vKGgrKGg8MD9UdDotVHQpLGYpOjA7aWYoIWUmJihjPWw9ZykmJnQubGluZVN0YXJ0KCksZyE9PWwmJihwPWEoZSxkKSwoQnIoZSxwKXx8QnIoZCxwKSkmJihkWzBdKz1rdCxkWzFdKz1rdCxnPWkoZFswXSxkWzFdKSkpLGchPT1sKXU9MCxnPyh0LmxpbmVTdGFydCgpLHA9YShkLGUpLHQucG9pbnQocFswXSxwWzFdKSk6KHA9YShlLGQpLHQucG9pbnQocFswXSxwWzFdKSx0LmxpbmVFbmQoKSksZT1wO2Vsc2UgaWYobiYmZSYmcl5nKXt2YXIgbTt2JnN8fCEobT1hKGQsZSwhMCkpfHwodT0wLHI/KHQubGluZVN0YXJ0KCksdC5wb2ludChtWzBdWzBdLG1bMF1bMV0pLHQucG9pbnQobVsxXVswXSxtWzFdWzFdKSx0LmxpbmVFbmQoKSk6KHQucG9pbnQobVsxXVswXSxtWzFdWzFdKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQobVswXVswXSxtWzBdWzFdKSkpfSFnfHxlJiZCcihlLGQpfHx0LnBvaW50KGRbMF0sZFsxXSksZT1kLGw9ZyxzPXZ9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtsJiZ0LmxpbmVFbmQoKSxlPW51bGx9LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIHV8KGMmJmwpPDwxfX19LEZuKHQsNipDdCkscj9bMCwtdF06Wy1UdCx0LVR0XSk7ZnVuY3Rpb24gaSh0LHIpe3JldHVybiBNYXRoLmNvcyh0KSpNYXRoLmNvcyhyKT5lfWZ1bmN0aW9uIGEodCxyLG4pe3ZhciBpPVsxLDAsMF0sYT1Jcih6cih0KSx6cihyKSksbz1PcihhLGEpLHM9YVswXSxsPW8tcypzO2lmKCFsKXJldHVybiFuJiZ0O3ZhciBjPWUqby9sLHU9LWUqcy9sLGg9SXIoaSxhKSxmPVByKGksYyk7RHIoZixQcihhLHUpKTt2YXIgcD1oLGQ9T3IoZixwKSxnPU9yKHAscCksdj1kKmQtZyooT3IoZixmKS0xKTtpZighKHY8MCkpe3ZhciBtPU1hdGguc3FydCh2KSx4PVByKHAsKC1kLW0pL2cpO2lmKERyKHgsZikseD1Gcih4KSwhbilyZXR1cm4geDt2YXIgYixfPXRbMF0sdz1yWzBdLGs9dFsxXSxBPXJbMV07dzxfJiYoYj1fLF89dyx3PWIpO3ZhciBUPXctXyxNPXkoVC1UdCk8a3Q7aWYoIU0mJkE8ayYmKGI9ayxrPUEsQT1iKSxNfHxUPGt0P00/aytBPjBeeFsxXTwoeSh4WzBdLV8pPGt0P2s6QSk6azw9eFsxXSYmeFsxXTw9QTpUPlR0XihfPD14WzBdJiZ4WzBdPD13KSl7dmFyIFM9UHIocCwoLWQrbSkvZyk7cmV0dXJuIERyKFMsZiksW3gsRnIoUyldfX19ZnVuY3Rpb24gbyhlLG4pe3ZhciBpPXI/dDpUdC10LGE9MDtyZXR1cm4gZTwtaT9hfD0xOmU+aSYmKGF8PTIpLG48LWk/YXw9NDpuPmkmJihhfD04KSxhfX0oKGI9K3QpKkN0KSxUKCkpOmJ9LHcuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz10LHg9dD9ubih0WzBdWzBdLHRbMF1bMV0sdFsxXVswXSx0WzFdWzFdKTp6LFQoKSk6X30sdy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdCxBKCkpOmN9LHcudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0WzBdLGg9K3RbMV0sQSgpKTpbdSxoXX0sdy5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9dFswXSUzNjAqQ3QscD10WzFdJTM2MCpDdCxBKCkpOltmKkx0LHAqTHRdfSx3LnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD10WzBdJTM2MCpDdCxnPXRbMV0lMzYwKkN0LHY9dC5sZW5ndGg+Mj90WzJdJTM2MCpDdDowLEEoKSk6W2QqTHQsZypMdCx2Kkx0XX0sdC5yZWJpbmQodyxsLFwicHJlY2lzaW9uXCIpLGZ1bmN0aW9uKCl7cmV0dXJuIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdy5pbnZlcnQ9ci5pbnZlcnQmJmssQSgpfX1mdW5jdGlvbiBMbih0KXtyZXR1cm4gU24odCxmdW5jdGlvbihlLHIpe3QucG9pbnQoZSpDdCxyKkN0KX0pfWZ1bmN0aW9uIHpuKHQsZSl7cmV0dXJuW3QsZV19ZnVuY3Rpb24gT24odCxlKXtyZXR1cm5bdD5UdD90LU10OnQ8LVR0P3QrTXQ6dCxlXX1mdW5jdGlvbiBJbih0LGUscil7cmV0dXJuIHQ/ZXx8cj9HcihQbih0KSxSbihlLHIpKTpQbih0KTplfHxyP1JuKGUscik6T259ZnVuY3Rpb24gRG4odCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7cmV0dXJuWyhlKz10KT5UdD9lLU10OmU8LVR0P2UrTXQ6ZSxyXX19ZnVuY3Rpb24gUG4odCl7dmFyIGU9RG4odCk7cmV0dXJuIGUuaW52ZXJ0PURuKC10KSxlfWZ1bmN0aW9uIFJuKHQsZSl7dmFyIHI9TWF0aC5jb3ModCksbj1NYXRoLnNpbih0KSxpPU1hdGguY29zKGUpLGE9TWF0aC5zaW4oZSk7ZnVuY3Rpb24gbyh0LGUpe3ZhciBvPU1hdGguY29zKGUpLHM9TWF0aC5jb3ModCkqbyxsPU1hdGguc2luKHQpKm8sYz1NYXRoLnNpbihlKSx1PWMqcitzKm47cmV0dXJuW01hdGguYXRhbjIobCppLXUqYSxzKnItYypuKSxEdCh1KmkrbCphKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIG89TWF0aC5jb3MoZSkscz1NYXRoLmNvcyh0KSpvLGw9TWF0aC5zaW4odCkqbyxjPU1hdGguc2luKGUpLHU9YyppLWwqYTtyZXR1cm5bTWF0aC5hdGFuMihsKmkrYyphLHMqcit1Km4pLER0KHUqci1zKm4pXX0sb31mdW5jdGlvbiBGbih0LGUpe3ZhciByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCk7cmV0dXJuIGZ1bmN0aW9uKGksYSxvLHMpe3ZhciBsPW8qZTtudWxsIT1pPyhpPUJuKHIsaSksYT1CbihyLGEpLChvPjA/aTxhOmk+YSkmJihpKz1vKk10KSk6KGk9dCtvKk10LGE9dC0uNSpsKTtmb3IodmFyIGMsdT1pO28+MD91PmE6dTxhO3UtPWwpcy5wb2ludCgoYz1GcihbciwtbipNYXRoLmNvcyh1KSwtbipNYXRoLnNpbih1KV0pKVswXSxjWzFdKX19ZnVuY3Rpb24gQm4odCxlKXt2YXIgcj16cihlKTtyWzBdLT10LFJyKHIpO3ZhciBuPUl0KC1yWzFdKTtyZXR1cm4oKC1yWzJdPDA/LW46bikrMipNYXRoLlBJLWt0KSUoMipNYXRoLlBJKX1mdW5jdGlvbiBObihlLHIsbil7dmFyIGk9dC5yYW5nZShlLHIta3QsbikuY29uY2F0KHIpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuW3QsZV19KX19ZnVuY3Rpb24gam4oZSxyLG4pe3ZhciBpPXQucmFuZ2UoZSxyLWt0LG4pLmNvbmNhdChyKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkubWFwKGZ1bmN0aW9uKGUpe3JldHVybltlLHRdfSl9fWZ1bmN0aW9uIFZuKHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiBVbih0KXtyZXR1cm4gdC50YXJnZXR9dC5nZW8ucGF0aD1mdW5jdGlvbigpe3ZhciBlLHIsbixpLGEsbz00LjU7ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZSYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG8mJmkucG9pbnRSYWRpdXMoK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxhJiZhLnZhbGlkfHwoYT1uKGkpKSx0Lmdlby5zdHJlYW0oZSxhKSksaS5yZXN1bHQoKX1mdW5jdGlvbiBsKCl7cmV0dXJuIGE9bnVsbCxzfXJldHVybiBzLmFyZWE9ZnVuY3Rpb24oZSl7cmV0dXJuIHNuPTAsdC5nZW8uc3RyZWFtKGUsbihwbikpLHNufSxzLmNlbnRyb2lkPWZ1bmN0aW9uKGUpe3JldHVybiB4cj1icj1fcj13cj1rcj1Bcj1Ucj1Ncj1Tcj0wLHQuZ2VvLnN0cmVhbShlLG4oeG4pKSxTcj9bVHIvU3IsTXIvU3JdOkFyP1t3ci9Bcixrci9Bcl06X3I/W3hyL19yLGJyL19yXTpbTmFOLE5hTl19LHMuYm91bmRzPWZ1bmN0aW9uKGUpe3JldHVybiBobj1mbj0tKGNuPXVuPTEvMCksdC5nZW8uc3RyZWFtKGUsbihnbikpLFtbY24sdW5dLFtobixmbl1dfSxzLnByb2plY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49KGU9dCk/dC5zdHJlYW18fChyPXQsaT1UbihmdW5jdGlvbih0LGUpe3JldHVybiByKFt0Kkx0LGUqTHRdKX0pLGZ1bmN0aW9uKHQpe3JldHVybiBMbihpKHQpKX0pOnosbCgpKTplO3ZhciByLGl9LHMuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT0ocj10KT9uZXcgdm46bmV3IEFuKHQpLFwiZnVuY3Rpb25cIiE9dHlwZW9mIG8mJmkucG9pbnRSYWRpdXMobyksbCgpKTpyfSxzLnBvaW50UmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDooaS5wb2ludFJhZGl1cygrdCksK3QpLHMpOm99LHMucHJvamVjdGlvbih0Lmdlby5hbGJlcnNVc2EoKSkuY29udGV4dChudWxsKX0sdC5nZW8udHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3JldHVybntzdHJlYW06ZnVuY3Rpb24oZSl7dmFyIHI9bmV3IE1uKGUpO2Zvcih2YXIgbiBpbiB0KXJbbl09dFtuXTtyZXR1cm4gcn19fSxNbi5wcm90b3R5cGU9e3BvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5zdHJlYW0ucG9pbnQodCxlKX0sc3BoZXJlOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19LHQuZ2VvLnByb2plY3Rpb249RW4sdC5nZW8ucHJvamVjdGlvbk11dGF0b3I9Q24sKHQuZ2VvLmVxdWlyZWN0YW5ndWxhcj1mdW5jdGlvbigpe3JldHVybiBFbih6bil9KS5yYXc9em4uaW52ZXJ0PXpuLHQuZ2VvLnJvdGF0aW9uPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuKGU9dChlWzBdKkN0LGVbMV0qQ3QpKVswXSo9THQsZVsxXSo9THQsZX1yZXR1cm4gdD1Jbih0WzBdJTM2MCpDdCx0WzFdKkN0LHQubGVuZ3RoPjI/dFsyXSpDdDowKSxlLmludmVydD1mdW5jdGlvbihlKXtyZXR1cm4oZT10LmludmVydChlWzBdKkN0LGVbMV0qQ3QpKVswXSo9THQsZVsxXSo9THQsZX0sZX0sT24uaW52ZXJ0PXpuLHQuZ2VvLmNpcmNsZT1mdW5jdGlvbigpe3ZhciB0LGUscj1bMCwwXSxuPTY7ZnVuY3Rpb24gaSgpe3ZhciB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHI/ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6cixuPUluKC10WzBdKkN0LC10WzFdKkN0LDApLmludmVydCxpPVtdO3JldHVybiBlKG51bGwsbnVsbCwxLHtwb2ludDpmdW5jdGlvbih0LGUpe2kucHVzaCh0PW4odCxlKSksdFswXSo9THQsdFsxXSo9THR9fSkse3R5cGU6XCJQb2x5Z29uXCIsY29vcmRpbmF0ZXM6W2ldfX1yZXR1cm4gaS5vcmlnaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxpKTpyfSxpLmFuZ2xlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPUZuKCh0PStyKSpDdCxuKkN0KSxpKTp0fSxpLnByZWNpc2lvbj1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1Gbih0KkN0LChuPStyKSpDdCksaSk6bn0saS5hbmdsZSg5MCl9LHQuZ2VvLmRpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj0oZVswXS10WzBdKSpDdCxpPXRbMV0qQ3QsYT1lWzFdKkN0LG89TWF0aC5zaW4obikscz1NYXRoLmNvcyhuKSxsPU1hdGguc2luKGkpLGM9TWF0aC5jb3MoaSksdT1NYXRoLnNpbihhKSxoPU1hdGguY29zKGEpO3JldHVybiBNYXRoLmF0YW4yKE1hdGguc3FydCgocj1oKm8pKnIrKHI9Yyp1LWwqaCpzKSpyKSxsKnUrYypoKnMpfSx0Lmdlby5ncmF0aWN1bGU9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saSxhLG8scyxsLGMsdSxoLGYscD0xMCxkPXAsZz05MCx2PTM2MCxtPTIuNTtmdW5jdGlvbiB4KCl7cmV0dXJue3R5cGU6XCJNdWx0aUxpbmVTdHJpbmdcIixjb29yZGluYXRlczpiKCl9fWZ1bmN0aW9uIGIoKXtyZXR1cm4gdC5yYW5nZShNYXRoLmNlaWwoaS9nKSpnLG4sZykubWFwKGgpLmNvbmNhdCh0LnJhbmdlKE1hdGguY2VpbChsL3YpKnYscyx2KS5tYXAoZikpLmNvbmNhdCh0LnJhbmdlKE1hdGguY2VpbChyL3ApKnAsZSxwKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHkodCVnKT5rdH0pLm1hcChjKSkuY29uY2F0KHQucmFuZ2UoTWF0aC5jZWlsKG8vZCkqZCxhLGQpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4geSh0JXYpPmt0fSkubWFwKHUpKX1yZXR1cm4geC5saW5lcz1mdW5jdGlvbigpe3JldHVybiBiKCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybnt0eXBlOlwiTGluZVN0cmluZ1wiLGNvb3JkaW5hdGVzOnR9fSl9LHgub3V0bGluZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOlwiUG9seWdvblwiLGNvb3JkaW5hdGVzOltoKGkpLmNvbmNhdChmKHMpLnNsaWNlKDEpLGgobikucmV2ZXJzZSgpLnNsaWNlKDEpLGYobCkucmV2ZXJzZSgpLnNsaWNlKDEpKV19fSx4LmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD94Lm1ham9yRXh0ZW50KHQpLm1pbm9yRXh0ZW50KHQpOngubWlub3JFeHRlbnQoKX0seC5tYWpvckV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdFswXVswXSxuPSt0WzFdWzBdLGw9K3RbMF1bMV0scz0rdFsxXVsxXSxpPm4mJih0PWksaT1uLG49dCksbD5zJiYodD1sLGw9cyxzPXQpLHgucHJlY2lzaW9uKG0pKTpbW2ksbF0sW24sc11dfSx4Lm1pbm9yRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0WzBdWzBdLGU9K3RbMV1bMF0sbz0rdFswXVsxXSxhPSt0WzFdWzFdLHI+ZSYmKHQ9cixyPWUsZT10KSxvPmEmJih0PW8sbz1hLGE9dCkseC5wcmVjaXNpb24obSkpOltbcixvXSxbZSxhXV19LHguc3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD94Lm1ham9yU3RlcCh0KS5taW5vclN0ZXAodCk6eC5taW5vclN0ZXAoKX0seC5tYWpvclN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9K3RbMF0sdj0rdFsxXSx4KTpbZyx2XX0seC5taW5vclN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9K3RbMF0sZD0rdFsxXSx4KTpbcCxkXX0seC5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09K3QsYz1ObihvLGEsOTApLHU9am4ocixlLG0pLGg9Tm4obCxzLDkwKSxmPWpuKGksbixtKSx4KTptfSx4Lm1ham9yRXh0ZW50KFtbLTE4MCwtOTAra3RdLFsxODAsOTAta3RdXSkubWlub3JFeHRlbnQoW1stMTgwLC04MC1rdF0sWzE4MCw4MCtrdF1dKX0sdC5nZW8uZ3JlYXRBcmM9ZnVuY3Rpb24oKXt2YXIgZSxyLG49Vm4saT1VbjtmdW5jdGlvbiBhKCl7cmV0dXJue3R5cGU6XCJMaW5lU3RyaW5nXCIsY29vcmRpbmF0ZXM6W2V8fG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHJ8fGkuYXBwbHkodGhpcyxhcmd1bWVudHMpXX19cmV0dXJuIGEuZGlzdGFuY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdC5nZW8uZGlzdGFuY2UoZXx8bi5hcHBseSh0aGlzLGFyZ3VtZW50cykscnx8aS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxhLnNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGU9XCJmdW5jdGlvblwiPT10eXBlb2YgdD9udWxsOnQsYSk6bn0sYS50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxyPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/bnVsbDp0LGEpOml9LGEucHJlY2lzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/YTowfSxhfSx0Lmdlby5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiByPXRbMF0qQ3Qsbj10WzFdKkN0LGk9ZVswXSpDdCxhPWVbMV0qQ3Qsbz1NYXRoLmNvcyhuKSxzPU1hdGguc2luKG4pLGw9TWF0aC5jb3MoYSksYz1NYXRoLnNpbihhKSx1PW8qTWF0aC5jb3MociksaD1vKk1hdGguc2luKHIpLGY9bCpNYXRoLmNvcyhpKSxwPWwqTWF0aC5zaW4oaSksZD0yKk1hdGguYXNpbihNYXRoLnNxcnQoUnQoYS1uKStvKmwqUnQoaS1yKSkpLGc9MS9NYXRoLnNpbihkKSwodj1kP2Z1bmN0aW9uKHQpe3ZhciBlPU1hdGguc2luKHQqPWQpKmcscj1NYXRoLnNpbihkLXQpKmcsbj1yKnUrZSpmLGk9cipoK2UqcCxhPXIqcytlKmM7cmV0dXJuW01hdGguYXRhbjIoaSxuKSpMdCxNYXRoLmF0YW4yKGEsTWF0aC5zcXJ0KG4qbitpKmkpKSpMdF19OmZ1bmN0aW9uKCl7cmV0dXJuW3IqTHQsbipMdF19KS5kaXN0YW5jZT1kLHY7dmFyIHIsbixpLGEsbyxzLGwsYyx1LGgsZixwLGQsZyx2fSx0Lmdlby5sZW5ndGg9ZnVuY3Rpb24oZSl7cmV0dXJuIHluPTAsdC5nZW8uc3RyZWFtKGUscW4pLHlufTt2YXIgcW49e3NwaGVyZTpQLHBvaW50OlAsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dmFyIHQsZSxyO2Z1bmN0aW9uIG4obixpKXt2YXIgYT1NYXRoLnNpbihpKj1DdCksbz1NYXRoLmNvcyhpKSxzPXkoKG4qPUN0KS10KSxsPU1hdGguY29zKHMpO3luKz1NYXRoLmF0YW4yKE1hdGguc3FydCgocz1vKk1hdGguc2luKHMpKSpzKyhzPXIqYS1lKm8qbCkqcyksZSphK3IqbypsKSx0PW4sZT1hLHI9b31xbi5wb2ludD1mdW5jdGlvbihpLGEpe3Q9aSpDdCxlPU1hdGguc2luKGEqPUN0KSxyPU1hdGguY29zKGEpLHFuLnBvaW50PW59LHFuLmxpbmVFbmQ9ZnVuY3Rpb24oKXtxbi5wb2ludD1xbi5saW5lRW5kPVB9fSxsaW5lRW5kOlAscG9seWdvblN0YXJ0OlAscG9seWdvbkVuZDpQfTtmdW5jdGlvbiBIbih0LGUpe2Z1bmN0aW9uIHIoZSxyKXt2YXIgbj1NYXRoLmNvcyhlKSxpPU1hdGguY29zKHIpLGE9dChuKmkpO3JldHVyblthKmkqTWF0aC5zaW4oZSksYSpNYXRoLnNpbihyKV19cmV0dXJuIHIuaW52ZXJ0PWZ1bmN0aW9uKHQscil7dmFyIG49TWF0aC5zcXJ0KHQqdCtyKnIpLGk9ZShuKSxhPU1hdGguc2luKGkpLG89TWF0aC5jb3MoaSk7cmV0dXJuW01hdGguYXRhbjIodCphLG4qbyksTWF0aC5hc2luKG4mJnIqYS9uKV19LHJ9dmFyIEduPUhuKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoMi8oMSt0KSl9LGZ1bmN0aW9uKHQpe3JldHVybiAyKk1hdGguYXNpbih0LzIpfSk7KHQuZ2VvLmF6aW11dGhhbEVxdWFsQXJlYT1mdW5jdGlvbigpe3JldHVybiBFbihHbil9KS5yYXc9R247dmFyIFluPUhuKGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguYWNvcyh0KTtyZXR1cm4gZSYmZS9NYXRoLnNpbihlKX0seik7ZnVuY3Rpb24gV24odCxlKXt2YXIgcj1NYXRoLmNvcyh0KSxuPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnRhbihUdC80K3QvMil9LGk9dD09PWU/TWF0aC5zaW4odCk6TWF0aC5sb2coci9NYXRoLmNvcyhlKSkvTWF0aC5sb2cobihlKS9uKHQpKSxhPXIqTWF0aC5wb3cobih0KSxpKS9pO2lmKCFpKXJldHVybiAkbjtmdW5jdGlvbiBvKHQsZSl7YT4wP2U8LUV0K2t0JiYoZT0tRXQra3QpOmU+RXQta3QmJihlPUV0LWt0KTt2YXIgcj1hL01hdGgucG93KG4oZSksaSk7cmV0dXJuW3IqTWF0aC5zaW4oaSp0KSxhLXIqTWF0aC5jb3MoaSp0KV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9YS1lLG49enQoaSkqTWF0aC5zcXJ0KHQqdCtyKnIpO3JldHVybltNYXRoLmF0YW4yKHQscikvaSwyKk1hdGguYXRhbihNYXRoLnBvdyhhL24sMS9pKSktRXRdfSxvfWZ1bmN0aW9uIFhuKHQsZSl7dmFyIHI9TWF0aC5jb3ModCksbj10PT09ZT9NYXRoLnNpbih0KTooci1NYXRoLmNvcyhlKSkvKGUtdCksaT1yL24rdDtpZih5KG4pPGt0KXJldHVybiB6bjtmdW5jdGlvbiBhKHQsZSl7dmFyIHI9aS1lO3JldHVybltyKk1hdGguc2luKG4qdCksaS1yKk1hdGguY29zKG4qdCldfXJldHVybiBhLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWktZTtyZXR1cm5bTWF0aC5hdGFuMih0LHIpL24saS16dChuKSpNYXRoLnNxcnQodCp0K3IqcildfSxhfSh0Lmdlby5hemltdXRoYWxFcXVpZGlzdGFudD1mdW5jdGlvbigpe3JldHVybiBFbihZbil9KS5yYXc9WW4sKHQuZ2VvLmNvbmljQ29uZm9ybWFsPWZ1bmN0aW9uKCl7cmV0dXJuIGFuKFduKX0pLnJhdz1XbiwodC5nZW8uY29uaWNFcXVpZGlzdGFudD1mdW5jdGlvbigpe3JldHVybiBhbihYbil9KS5yYXc9WG47dmFyIFpuPUhuKGZ1bmN0aW9uKHQpe3JldHVybiAxL3R9LE1hdGguYXRhbik7ZnVuY3Rpb24gJG4odCxlKXtyZXR1cm5bdCxNYXRoLmxvZyhNYXRoLnRhbihUdC80K2UvMikpXX1mdW5jdGlvbiBKbih0KXt2YXIgZSxyPUVuKHQpLG49ci5zY2FsZSxpPXIudHJhbnNsYXRlLGE9ci5jbGlwRXh0ZW50O3JldHVybiByLnNjYWxlPWZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseShyLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1yP2U/ci5jbGlwRXh0ZW50KG51bGwpOnI6dH0sci50cmFuc2xhdGU9ZnVuY3Rpb24oKXt2YXIgdD1pLmFwcGx5KHIsYXJndW1lbnRzKTtyZXR1cm4gdD09PXI/ZT9yLmNsaXBFeHRlbnQobnVsbCk6cjp0fSxyLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIG89YS5hcHBseShyLGFyZ3VtZW50cyk7aWYobz09PXIpe2lmKGU9bnVsbD09dCl7dmFyIHM9VHQqbigpLGw9aSgpO2EoW1tsWzBdLXMsbFsxXS1zXSxbbFswXStzLGxbMV0rc11dKX19ZWxzZSBlJiYobz1udWxsKTtyZXR1cm4gb30sci5jbGlwRXh0ZW50KG51bGwpfSh0Lmdlby5nbm9tb25pYz1mdW5jdGlvbigpe3JldHVybiBFbihabil9KS5yYXc9Wm4sJG4uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QsMipNYXRoLmF0YW4oTWF0aC5leHAoZSkpLUV0XX0sKHQuZ2VvLm1lcmNhdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIEpuKCRuKX0pLnJhdz0kbjt2YXIgS249SG4oZnVuY3Rpb24oKXtyZXR1cm4gMX0sTWF0aC5hc2luKTsodC5nZW8ub3J0aG9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIEVuKEtuKX0pLnJhdz1Lbjt2YXIgUW49SG4oZnVuY3Rpb24odCl7cmV0dXJuIDEvKDErdCl9LGZ1bmN0aW9uKHQpe3JldHVybiAyKk1hdGguYXRhbih0KX0pO2Z1bmN0aW9uIHRpKHQsZSl7cmV0dXJuW01hdGgubG9nKE1hdGgudGFuKFR0LzQrZS8yKSksLXRdfWZ1bmN0aW9uIGVpKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIHJpKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIG5pKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPVswLDFdLG49MixpPTI7aTxlO2krKyl7Zm9yKDtuPjEmJk90KHRbcltuLTJdXSx0W3Jbbi0xXV0sdFtpXSk8PTA7KS0tbjtyW24rK109aX1yZXR1cm4gci5zbGljZSgwLG4pfWZ1bmN0aW9uIGlpKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfSh0Lmdlby5zdGVyZW9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIEVuKFFuKX0pLnJhdz1Rbix0aS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bLWUsMipNYXRoLmF0YW4oTWF0aC5leHAodCkpLUV0XX0sKHQuZ2VvLnRyYW5zdmVyc2VNZXJjYXRvcj1mdW5jdGlvbigpe3ZhciB0PUpuKHRpKSxlPXQuY2VudGVyLHI9dC5yb3RhdGU7cmV0dXJuIHQuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0P2UoWy10WzFdLHRbMF1dKTpbKHQ9ZSgpKVsxXSwtdFswXV19LHQucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0P3IoW3RbMF0sdFsxXSx0Lmxlbmd0aD4yP3RbMl0rOTA6OTBdKTpbKHQ9cigpKVswXSx0WzFdLHRbMl0tOTBdfSxyKFswLDAsOTBdKX0pLnJhdz10aSx0Lmdlb209e30sdC5nZW9tLmh1bGw9ZnVuY3Rpb24odCl7dmFyIGU9ZWkscj1yaTtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBuKHQpO2Z1bmN0aW9uIG4odCl7aWYodC5sZW5ndGg8MylyZXR1cm5bXTt2YXIgbixpPXZlKGUpLGE9dmUociksbz10Lmxlbmd0aCxzPVtdLGw9W107Zm9yKG49MDtuPG87bisrKXMucHVzaChbK2kuY2FsbCh0aGlzLHRbbl0sbiksK2EuY2FsbCh0aGlzLHRbbl0sbiksbl0pO2ZvcihzLnNvcnQoaWkpLG49MDtuPG87bisrKWwucHVzaChbc1tuXVswXSwtc1tuXVsxXV0pO3ZhciBjPW5pKHMpLHU9bmkobCksaD11WzBdPT09Y1swXSxmPXVbdS5sZW5ndGgtMV09PT1jW2MubGVuZ3RoLTFdLHA9W107Zm9yKG49Yy5sZW5ndGgtMTtuPj0wOy0tbilwLnB1c2godFtzW2Nbbl1dWzJdXSk7Zm9yKG49K2g7bjx1Lmxlbmd0aC1mOysrbilwLnB1c2godFtzW3Vbbl1dWzJdXSk7cmV0dXJuIHB9cmV0dXJuIG4ueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG59LHQuZ2VvbS5wb2x5Z29uPWZ1bmN0aW9uKHQpe3JldHVybiBVKHQsYWkpLHR9O3ZhciBhaT10Lmdlb20ucG9seWdvbi5wcm90b3R5cGU9W107ZnVuY3Rpb24gb2kodCxlLHIpe3JldHVybihyWzBdLWVbMF0pKih0WzFdLWVbMV0pPChyWzFdLWVbMV0pKih0WzBdLWVbMF0pfWZ1bmN0aW9uIHNpKHQsZSxyLG4pe3ZhciBpPXRbMF0sYT1yWzBdLG89ZVswXS1pLHM9blswXS1hLGw9dFsxXSxjPXJbMV0sdT1lWzFdLWwsaD1uWzFdLWMsZj0ocyoobC1jKS1oKihpLWEpKS8oaCpvLXMqdSk7cmV0dXJuW2krZipvLGwrZip1XX1mdW5jdGlvbiBsaSh0KXt2YXIgZT10WzBdLHI9dFt0Lmxlbmd0aC0xXTtyZXR1cm4hKGVbMF0tclswXXx8ZVsxXS1yWzFdKX1haS5hcmVhPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9LTEscj10aGlzLmxlbmd0aCxuPXRoaXNbci0xXSxpPTA7KytlPHI7KXQ9bixuPXRoaXNbZV0saSs9dFsxXSpuWzBdLXRbMF0qblsxXTtyZXR1cm4uNSppfSxhaS5jZW50cm9pZD1mdW5jdGlvbih0KXt2YXIgZSxyLG49LTEsaT10aGlzLmxlbmd0aCxhPTAsbz0wLHM9dGhpc1tpLTFdO2Zvcihhcmd1bWVudHMubGVuZ3RofHwodD0tMS8oNip0aGlzLmFyZWEoKSkpOysrbjxpOyllPXMscz10aGlzW25dLHI9ZVswXSpzWzFdLXNbMF0qZVsxXSxhKz0oZVswXStzWzBdKSpyLG8rPShlWzFdK3NbMV0pKnI7cmV0dXJuW2EqdCxvKnRdfSxhaS5jbGlwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxhLG8scz1saSh0KSxsPS0xLGM9dGhpcy5sZW5ndGgtbGkodGhpcyksdT10aGlzW2MtMV07KytsPGM7KXtmb3IoZT10LnNsaWNlKCksdC5sZW5ndGg9MCxpPXRoaXNbbF0sYT1lWyhuPWUubGVuZ3RoLXMpLTFdLHI9LTE7KytyPG47KW9pKG89ZVtyXSx1LGkpPyhvaShhLHUsaSl8fHQucHVzaChzaShhLG8sdSxpKSksdC5wdXNoKG8pKTpvaShhLHUsaSkmJnQucHVzaChzaShhLG8sdSxpKSksYT1vO3MmJnQucHVzaCh0WzBdKSx1PWl9cmV0dXJuIHR9O3ZhciBjaSx1aSxoaSxmaSxwaSxkaT1bXSxnaT1bXTtmdW5jdGlvbiB2aSgpe0RpKHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBtaSh0KXt2YXIgZT1kaS5wb3AoKXx8bmV3IHZpO3JldHVybiBlLnNpdGU9dCxlfWZ1bmN0aW9uIHlpKHQpe1NpKHQpLGhpLnJlbW92ZSh0KSxkaS5wdXNoKHQpLERpKHQpfWZ1bmN0aW9uIHhpKHQpe3ZhciBlPXQuY2lyY2xlLHI9ZS54LG49ZS5jeSxpPXt4OnIseTpufSxhPXQuUCxvPXQuTixzPVt0XTt5aSh0KTtmb3IodmFyIGw9YTtsLmNpcmNsZSYmeShyLWwuY2lyY2xlLngpPGt0JiZ5KG4tbC5jaXJjbGUuY3kpPGt0OylhPWwuUCxzLnVuc2hpZnQobCkseWkobCksbD1hO3MudW5zaGlmdChsKSxTaShsKTtmb3IodmFyIGM9bztjLmNpcmNsZSYmeShyLWMuY2lyY2xlLngpPGt0JiZ5KG4tYy5jaXJjbGUuY3kpPGt0OylvPWMuTixzLnB1c2goYykseWkoYyksYz1vO3MucHVzaChjKSxTaShjKTt2YXIgdSxoPXMubGVuZ3RoO2Zvcih1PTE7dTxoOysrdSljPXNbdV0sbD1zW3UtMV0semkoYy5lZGdlLGwuc2l0ZSxjLnNpdGUsaSk7bD1zWzBdLChjPXNbaC0xXSkuZWRnZT1MaShsLnNpdGUsYy5zaXRlLG51bGwsaSksTWkobCksTWkoYyl9ZnVuY3Rpb24gYmkodCl7Zm9yKHZhciBlLHIsbixpLGE9dC54LG89dC55LHM9aGkuXztzOylpZigobj1faShzLG8pLWEpPmt0KXM9cy5MO2Vsc2V7aWYoISgoaT1hLXdpKHMsbykpPmt0KSl7bj4ta3Q/KGU9cy5QLHI9cyk6aT4ta3Q/KGU9cyxyPXMuTik6ZT1yPXM7YnJlYWt9aWYoIXMuUil7ZT1zO2JyZWFrfXM9cy5SfXZhciBsPW1pKHQpO2lmKGhpLmluc2VydChlLGwpLGV8fHIpe2lmKGU9PT1yKXJldHVybiBTaShlKSxyPW1pKGUuc2l0ZSksaGkuaW5zZXJ0KGwsciksbC5lZGdlPXIuZWRnZT1MaShlLnNpdGUsbC5zaXRlKSxNaShlKSx2b2lkIE1pKHIpO2lmKHIpe1NpKGUpLFNpKHIpO3ZhciBjPWUuc2l0ZSx1PWMueCxoPWMueSxmPXQueC11LHA9dC55LWgsZD1yLnNpdGUsZz1kLngtdSx2PWQueS1oLG09MiooZip2LXAqZykseT1mKmYrcCpwLHg9ZypnK3YqdixiPXt4Oih2KnktcCp4KS9tK3UseTooZip4LWcqeSkvbStofTt6aShyLmVkZ2UsYyxkLGIpLGwuZWRnZT1MaShjLHQsbnVsbCxiKSxyLmVkZ2U9TGkodCxkLG51bGwsYiksTWkoZSksTWkocil9ZWxzZSBsLmVkZ2U9TGkoZS5zaXRlLGwuc2l0ZSl9fWZ1bmN0aW9uIF9pKHQsZSl7dmFyIHI9dC5zaXRlLG49ci54LGk9ci55LGE9aS1lO2lmKCFhKXJldHVybiBuO3ZhciBvPXQuUDtpZighbylyZXR1cm4tMS8wO3ZhciBzPShyPW8uc2l0ZSkueCxsPXIueSxjPWwtZTtpZighYylyZXR1cm4gczt2YXIgdT1zLW4saD0xL2EtMS9jLGY9dS9jO3JldHVybiBoPygtZitNYXRoLnNxcnQoZipmLTIqaCoodSp1LygtMipjKS1sK2MvMitpLWEvMikpKS9oK246KG4rcykvMn1mdW5jdGlvbiB3aSh0LGUpe3ZhciByPXQuTjtpZihyKXJldHVybiBfaShyLGUpO3ZhciBuPXQuc2l0ZTtyZXR1cm4gbi55PT09ZT9uLng6MS8wfWZ1bmN0aW9uIGtpKHQpe3RoaXMuc2l0ZT10LHRoaXMuZWRnZXM9W119ZnVuY3Rpb24gQWkodCxlKXtyZXR1cm4gZS5hbmdsZS10LmFuZ2xlfWZ1bmN0aW9uIFRpKCl7RGkodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIE1pKHQpe3ZhciBlPXQuUCxyPXQuTjtpZihlJiZyKXt2YXIgbj1lLnNpdGUsaT10LnNpdGUsYT1yLnNpdGU7aWYobiE9PWEpe3ZhciBvPWkueCxzPWkueSxsPW4ueC1vLGM9bi55LXMsdT1hLngtbyxoPTIqKGwqKHY9YS55LXMpLWMqdSk7aWYoIShoPj0tQXQpKXt2YXIgZj1sKmwrYypjLHA9dSp1K3YqdixkPSh2KmYtYypwKS9oLGc9KGwqcC11KmYpL2gsdj1nK3MsbT1naS5wb3AoKXx8bmV3IFRpO20uYXJjPXQsbS5zaXRlPWksbS54PWQrbyxtLnk9ditNYXRoLnNxcnQoZCpkK2cqZyksbS5jeT12LHQuY2lyY2xlPW07Zm9yKHZhciB5PW51bGwseD1waS5fO3g7KWlmKG0ueTx4Lnl8fG0ueT09PXgueSYmbS54PD14Lngpe2lmKCF4Lkwpe3k9eC5QO2JyZWFrfXg9eC5MfWVsc2V7aWYoIXguUil7eT14O2JyZWFrfXg9eC5SfXBpLmluc2VydCh5LG0pLHl8fChmaT1tKX19fX1mdW5jdGlvbiBTaSh0KXt2YXIgZT10LmNpcmNsZTtlJiYoZS5QfHwoZmk9ZS5OKSxwaS5yZW1vdmUoZSksZ2kucHVzaChlKSxEaShlKSx0LmNpcmNsZT1udWxsKX1mdW5jdGlvbiBFaSh0LGUpe3ZhciByPXQuYjtpZihyKXJldHVybiEwO3ZhciBuLGksYT10LmEsbz1lWzBdWzBdLHM9ZVsxXVswXSxsPWVbMF1bMV0sYz1lWzFdWzFdLHU9dC5sLGg9dC5yLGY9dS54LHA9dS55LGQ9aC54LGc9aC55LHY9KGYrZCkvMixtPShwK2cpLzI7aWYoZz09PXApe2lmKHY8b3x8dj49cylyZXR1cm47aWYoZj5kKXtpZihhKXtpZihhLnk+PWMpcmV0dXJufWVsc2UgYT17eDp2LHk6bH07cj17eDp2LHk6Y319ZWxzZXtpZihhKXtpZihhLnk8bClyZXR1cm59ZWxzZSBhPXt4OnYseTpjfTtyPXt4OnYseTpsfX19ZWxzZSBpZihpPW0tKG49KGYtZCkvKGctcCkpKnYsbjwtMXx8bj4xKWlmKGY+ZCl7aWYoYSl7aWYoYS55Pj1jKXJldHVybn1lbHNlIGE9e3g6KGwtaSkvbix5Omx9O3I9e3g6KGMtaSkvbix5OmN9fWVsc2V7aWYoYSl7aWYoYS55PGwpcmV0dXJufWVsc2UgYT17eDooYy1pKS9uLHk6Y307cj17eDoobC1pKS9uLHk6bH19ZWxzZSBpZihwPGcpe2lmKGEpe2lmKGEueD49cylyZXR1cm59ZWxzZSBhPXt4Om8seTpuKm8raX07cj17eDpzLHk6bipzK2l9fWVsc2V7aWYoYSl7aWYoYS54PG8pcmV0dXJufWVsc2UgYT17eDpzLHk6bipzK2l9O3I9e3g6byx5Om4qbytpfX1yZXR1cm4gdC5hPWEsdC5iPXIsITB9ZnVuY3Rpb24gQ2kodCxlKXt0aGlzLmw9dCx0aGlzLnI9ZSx0aGlzLmE9dGhpcy5iPW51bGx9ZnVuY3Rpb24gTGkodCxlLHIsbil7dmFyIGk9bmV3IENpKHQsZSk7cmV0dXJuIGNpLnB1c2goaSksciYmemkoaSx0LGUsciksbiYmemkoaSxlLHQsbiksdWlbdC5pXS5lZGdlcy5wdXNoKG5ldyBPaShpLHQsZSkpLHVpW2UuaV0uZWRnZXMucHVzaChuZXcgT2koaSxlLHQpKSxpfWZ1bmN0aW9uIHppKHQsZSxyLG4pe3QuYXx8dC5iP3QubD09PXI/dC5iPW46dC5hPW46KHQuYT1uLHQubD1lLHQucj1yKX1mdW5jdGlvbiBPaSh0LGUscil7dmFyIG49dC5hLGk9dC5iO3RoaXMuZWRnZT10LHRoaXMuc2l0ZT1lLHRoaXMuYW5nbGU9cj9NYXRoLmF0YW4yKHIueS1lLnksci54LWUueCk6dC5sPT09ZT9NYXRoLmF0YW4yKGkueC1uLngsbi55LWkueSk6TWF0aC5hdGFuMihuLngtaS54LGkueS1uLnkpfWZ1bmN0aW9uIElpKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gRGkodCl7dC5VPXQuQz10Lkw9dC5SPXQuUD10Lk49bnVsbH1mdW5jdGlvbiBQaSh0LGUpe3ZhciByPWUsbj1lLlIsaT1yLlU7aT9pLkw9PT1yP2kuTD1uOmkuUj1uOnQuXz1uLG4uVT1pLHIuVT1uLHIuUj1uLkwsci5SJiYoci5SLlU9ciksbi5MPXJ9ZnVuY3Rpb24gUmkodCxlKXt2YXIgcj1lLG49ZS5MLGk9ci5VO2k/aS5MPT09cj9pLkw9bjppLlI9bjp0Ll89bixuLlU9aSxyLlU9bixyLkw9bi5SLHIuTCYmKHIuTC5VPXIpLG4uUj1yfWZ1bmN0aW9uIEZpKHQpe2Zvcig7dC5MOyl0PXQuTDtyZXR1cm4gdH1mdW5jdGlvbiBCaSh0LGUpe3ZhciByLG4saSxhPXQuc29ydChOaSkucG9wKCk7Zm9yKGNpPVtdLHVpPW5ldyBBcnJheSh0Lmxlbmd0aCksaGk9bmV3IElpLHBpPW5ldyBJaTs7KWlmKGk9ZmksYSYmKCFpfHxhLnk8aS55fHxhLnk9PT1pLnkmJmEueDxpLngpKWEueD09PXImJmEueT09PW58fCh1aVthLmldPW5ldyBraShhKSxiaShhKSxyPWEueCxuPWEueSksYT10LnBvcCgpO2Vsc2V7aWYoIWkpYnJlYWs7eGkoaS5hcmMpfWUmJihmdW5jdGlvbih0KXtmb3IodmFyIGUscj1jaSxuPWVuKHRbMF1bMF0sdFswXVsxXSx0WzFdWzBdLHRbMV1bMV0pLGk9ci5sZW5ndGg7aS0tOykoIUVpKGU9cltpXSx0KXx8IW4oZSl8fHkoZS5hLngtZS5iLngpPGt0JiZ5KGUuYS55LWUuYi55KTxrdCkmJihlLmE9ZS5iPW51bGwsci5zcGxpY2UoaSwxKSl9KGUpLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxhLG8scyxsLGMsdSxoPXRbMF1bMF0sZj10WzFdWzBdLHA9dFswXVsxXSxkPXRbMV1bMV0sZz11aSx2PWcubGVuZ3RoO3YtLTspaWYoKGE9Z1t2XSkmJmEucHJlcGFyZSgpKWZvcihsPShzPWEuZWRnZXMpLmxlbmd0aCxvPTA7bzxsOyluPSh1PXNbb10uZW5kKCkpLngsaT11LnksZT0oYz1zWysrbyVsXS5zdGFydCgpKS54LHI9Yy55LCh5KG4tZSk+a3R8fHkoaS1yKT5rdCkmJihzLnNwbGljZShvLDAsbmV3IE9pKChtPWEuc2l0ZSx4PXUsYj15KG4taCk8a3QmJmQtaT5rdD97eDpoLHk6eShlLWgpPGt0P3I6ZH06eShpLWQpPGt0JiZmLW4+a3Q/e3g6eShyLWQpPGt0P2U6Zix5OmR9Onkobi1mKTxrdCYmaS1wPmt0P3t4OmYseTp5KGUtZik8a3Q/cjpwfTp5KGktcCk8a3QmJm4taD5rdD97eDp5KHItcCk8a3Q/ZTpoLHk6cH06bnVsbCxfPXZvaWQgMCxfPW5ldyBDaShtLG51bGwpLF8uYT14LF8uYj1iLGNpLnB1c2goXyksXyksYS5zaXRlLG51bGwpKSwrK2wpO3ZhciBtLHgsYixffShlKSk7dmFyIG89e2NlbGxzOnVpLGVkZ2VzOmNpfTtyZXR1cm4gaGk9cGk9Y2k9dWk9bnVsbCxvfWZ1bmN0aW9uIE5pKHQsZSl7cmV0dXJuIGUueS10Lnl8fGUueC10Lnh9a2kucHJvdG90eXBlLnByZXBhcmU9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT10aGlzLmVkZ2VzLHI9ZS5sZW5ndGg7ci0tOykodD1lW3JdLmVkZ2UpLmImJnQuYXx8ZS5zcGxpY2UociwxKTtyZXR1cm4gZS5zb3J0KEFpKSxlLmxlbmd0aH0sT2kucHJvdG90eXBlPXtzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2UubD09PXRoaXMuc2l0ZT90aGlzLmVkZ2UuYTp0aGlzLmVkZ2UuYn0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZS5sPT09dGhpcy5zaXRlP3RoaXMuZWRnZS5iOnRoaXMuZWRnZS5hfX0sSWkucHJvdG90eXBlPXtpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk7aWYodCl7aWYoZS5QPXQsZS5OPXQuTix0Lk4mJih0Lk4uUD1lKSx0Lk49ZSx0LlIpe2Zvcih0PXQuUjt0Lkw7KXQ9dC5MO3QuTD1lfWVsc2UgdC5SPWU7cj10fWVsc2UgdGhpcy5fPyh0PUZpKHRoaXMuXyksZS5QPW51bGwsZS5OPXQsdC5QPXQuTD1lLHI9dCk6KGUuUD1lLk49bnVsbCx0aGlzLl89ZSxyPW51bGwpO2ZvcihlLkw9ZS5SPW51bGwsZS5VPXIsZS5DPSEwLHQ9ZTtyJiZyLkM7KXI9PT0obj1yLlUpLkw/KGk9bi5SKSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCx0PW4pOih0PT09ci5SJiYoUGkodGhpcyxyKSxyPSh0PXIpLlUpLHIuQz0hMSxuLkM9ITAsUmkodGhpcyxuKSk6KGk9bi5MKSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCx0PW4pOih0PT09ci5MJiYoUmkodGhpcyxyKSxyPSh0PXIpLlUpLHIuQz0hMSxuLkM9ITAsUGkodGhpcyxuKSkscj10LlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbih0KXt0Lk4mJih0Lk4uUD10LlApLHQuUCYmKHQuUC5OPXQuTiksdC5OPXQuUD1udWxsO3ZhciBlLHIsbixpPXQuVSxhPXQuTCxvPXQuUjtpZihyPWE/bz9GaShvKTphOm8saT9pLkw9PT10P2kuTD1yOmkuUj1yOnRoaXMuXz1yLGEmJm8/KG49ci5DLHIuQz10LkMsci5MPWEsYS5VPXIsciE9PW8/KGk9ci5VLHIuVT10LlUsdD1yLlIsaS5MPXQsci5SPW8sby5VPXIpOihyLlU9aSxpPXIsdD1yLlIpKToobj10LkMsdD1yKSx0JiYodC5VPWkpLCFuKWlmKHQmJnQuQyl0LkM9ITE7ZWxzZXtkb3tpZih0PT09dGhpcy5fKWJyZWFrO2lmKHQ9PT1pLkwpe2lmKChlPWkuUikuQyYmKGUuQz0hMSxpLkM9ITAsUGkodGhpcyxpKSxlPWkuUiksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5SJiZlLlIuQ3x8KGUuTC5DPSExLGUuQz0hMCxSaSh0aGlzLGUpLGU9aS5SKSxlLkM9aS5DLGkuQz1lLlIuQz0hMSxQaSh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfX1lbHNlIGlmKChlPWkuTCkuQyYmKGUuQz0hMSxpLkM9ITAsUmkodGhpcyxpKSxlPWkuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5MJiZlLkwuQ3x8KGUuUi5DPSExLGUuQz0hMCxQaSh0aGlzLGUpLGU9aS5MKSxlLkM9aS5DLGkuQz1lLkwuQz0hMSxSaSh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfWUuQz0hMCx0PWksaT1pLlV9d2hpbGUoIXQuQyk7dCYmKHQuQz0hMSl9fX0sdC5nZW9tLnZvcm9ub2k9ZnVuY3Rpb24odCl7dmFyIGU9ZWkscj1yaSxuPWUsaT1yLGE9amk7aWYodClyZXR1cm4gbyh0KTtmdW5jdGlvbiBvKHQpe3ZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj1hWzBdWzBdLG49YVswXVsxXSxpPWFbMV1bMF0sbz1hWzFdWzFdO3JldHVybiBCaShzKHQpLGEpLmNlbGxzLmZvckVhY2goZnVuY3Rpb24oYSxzKXt2YXIgbD1hLmVkZ2VzLGM9YS5zaXRlOyhlW3NdPWwubGVuZ3RoP2wubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPXQuc3RhcnQoKTtyZXR1cm5bZS54LGUueV19KTpjLng+PXImJmMueDw9aSYmYy55Pj1uJiZjLnk8PW8/W1tyLG9dLFtpLG9dLFtpLG5dLFtyLG5dXTpbXSkucG9pbnQ9dFtzXX0pLGV9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm57eDpNYXRoLnJvdW5kKG4odCxlKS9rdCkqa3QseTpNYXRoLnJvdW5kKGkodCxlKS9rdCkqa3QsaTplfX0pfXJldHVybiBvLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBCaShzKHQpKS5lZGdlcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQubCYmdC5yfSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6dFtlLmwuaV0sdGFyZ2V0OnRbZS5yLmldfX0pfSxvLnRyaWFuZ2xlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gQmkocyh0KSkuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihyLG4pe2Zvcih2YXIgaSxhLG8scyxsPXIuc2l0ZSxjPXIuZWRnZXMuc29ydChBaSksdT0tMSxoPWMubGVuZ3RoLGY9Y1toLTFdLmVkZ2UscD1mLmw9PT1sP2YucjpmLmw7Kyt1PGg7KWYsaT1wLHA9KGY9Y1t1XS5lZGdlKS5sPT09bD9mLnI6Zi5sLG48aS5pJiZuPHAuaSYmKG89aSxzPXAsKChhPWwpLngtcy54KSooby55LWEueSktKGEueC1vLngpKihzLnktYS55KTwwKSYmZS5wdXNoKFt0W25dLHRbaS5pXSx0W3AuaV1dKX0pLGV9LG8ueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj12ZShlPXQpLG8pOmV9LG8ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT12ZShyPXQpLG8pOnJ9LG8uY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1udWxsPT10P2ppOnQsbyk6YT09PWppP251bGw6YX0sby5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP28uY2xpcEV4dGVudCh0JiZbWzAsMF0sdF0pOmE9PT1qaT9udWxsOmEmJmFbMV19LG99O3ZhciBqaT1bWy0xZTYsLTFlNl0sWzFlNiwxZTZdXTtmdW5jdGlvbiBWaSh0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIFVpKHQpe3JldHVybiB0Lnl9ZnVuY3Rpb24gcWkoZSxyKXtlPXQucmdiKGUpLHI9dC5yZ2Iocik7dmFyIG49ZS5yLGk9ZS5nLGE9ZS5iLG89ci5yLW4scz1yLmctaSxsPXIuYi1hO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm5cIiNcIitjZShNYXRoLnJvdW5kKG4rbyp0KSkrY2UoTWF0aC5yb3VuZChpK3MqdCkpK2NlKE1hdGgucm91bmQoYStsKnQpKX19ZnVuY3Rpb24gSGkodCxlKXt2YXIgcixuPXt9LGk9e307Zm9yKHIgaW4gdClyIGluIGU/bltyXT1aaSh0W3JdLGVbcl0pOmlbcl09dFtyXTtmb3IociBpbiBlKXIgaW4gdHx8KGlbcl09ZVtyXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihyIGluIG4paVtyXT1uW3JdKHQpO3JldHVybiBpfX1mdW5jdGlvbiBHaSh0LGUpe3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24ocil7cmV0dXJuIHQqKDEtcikrZSpyfX1mdW5jdGlvbiBZaSh0LGUpe3ZhciByLG4saSxhPVdpLmxhc3RJbmRleD1YaS5sYXN0SW5kZXg9MCxvPS0xLHM9W10sbD1bXTtmb3IodCs9XCJcIixlKz1cIlwiOyhyPVdpLmV4ZWModCkpJiYobj1YaS5leGVjKGUpKTspKGk9bi5pbmRleCk+YSYmKGk9ZS5zbGljZShhLGkpLHNbb10/c1tvXSs9aTpzWysrb109aSksKHI9clswXSk9PT0obj1uWzBdKT9zW29dP3Nbb10rPW46c1srK29dPW46KHNbKytvXT1udWxsLGwucHVzaCh7aTpvLHg6R2kocixuKX0pKSxhPVhpLmxhc3RJbmRleDtyZXR1cm4gYTxlLmxlbmd0aCYmKGk9ZS5zbGljZShhKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLHMubGVuZ3RoPDI/bFswXT8oZT1sWzBdLngsZnVuY3Rpb24odCl7cmV0dXJuIGUodCkrXCJcIn0pOmZ1bmN0aW9uKCl7cmV0dXJuIGV9OihlPWwubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgcixuPTA7bjxlOysrbilzWyhyPWxbbl0pLmldPXIueCh0KTtyZXR1cm4gcy5qb2luKFwiXCIpfSl9dC5nZW9tLmRlbGF1bmF5PWZ1bmN0aW9uKGUpe3JldHVybiB0Lmdlb20udm9yb25vaSgpLnRyaWFuZ2xlcyhlKX0sdC5nZW9tLnF1YWR0cmVlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbz1laSxzPXJpO2lmKGE9YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbz1WaSxzPVVpLDM9PT1hJiYoaT1yLG49ZSxyPWU9MCksbCh0KTtmdW5jdGlvbiBsKHQpe3ZhciBsLGMsdSxoLGYscCxkLGcsdixtPXZlKG8pLHg9dmUocyk7aWYobnVsbCE9ZSlwPWUsZD1yLGc9bix2PWk7ZWxzZSBpZihnPXY9LShwPWQ9MS8wKSxjPVtdLHU9W10sZj10Lmxlbmd0aCxhKWZvcihoPTA7aDxmOysraCkobD10W2hdKS54PHAmJihwPWwueCksbC55PGQmJihkPWwueSksbC54PmcmJihnPWwueCksbC55PnYmJih2PWwueSksYy5wdXNoKGwueCksdS5wdXNoKGwueSk7ZWxzZSBmb3IoaD0wO2g8ZjsrK2gpe3ZhciBiPSttKGw9dFtoXSxoKSxfPSt4KGwsaCk7YjxwJiYocD1iKSxfPGQmJihkPV8pLGI+ZyYmKGc9YiksXz52JiYodj1fKSxjLnB1c2goYiksdS5wdXNoKF8pfXZhciB3PWctcCxrPXYtZDtmdW5jdGlvbiBBKHQsZSxyLG4saSxhLG8scyl7aWYoIWlzTmFOKHIpJiYhaXNOYU4obikpaWYodC5sZWFmKXt2YXIgbD10LngsYz10Lnk7aWYobnVsbCE9bClpZih5KGwtcikreShjLW4pPC4wMSlUKHQsZSxyLG4saSxhLG8scyk7ZWxzZXt2YXIgdT10LnBvaW50O3QueD10Lnk9dC5wb2ludD1udWxsLFQodCx1LGwsYyxpLGEsbyxzKSxUKHQsZSxyLG4saSxhLG8scyl9ZWxzZSB0Lng9cix0Lnk9bix0LnBvaW50PWV9ZWxzZSBUKHQsZSxyLG4saSxhLG8scyl9ZnVuY3Rpb24gVCh0LGUscixuLGksYSxvLHMpe3ZhciBsPS41KihpK28pLGM9LjUqKGErcyksdT1yPj1sLGg9bj49YyxmPWg8PDF8dTt0LmxlYWY9ITEsdT9pPWw6bz1sLGg/YT1jOnM9YyxBKHQ9dC5ub2Rlc1tmXXx8KHQubm9kZXNbZl09e2xlYWY6ITAsbm9kZXM6W10scG9pbnQ6bnVsbCx4Om51bGwseTpudWxsLGFkZDpmdW5jdGlvbih0KXtBKE0sdCwrbSh0LCsraCksK3godCxoKSxwLGQsZyx2KX19KSxlLHIsbixpLGEsbyxzKX13Pms/dj1kK3c6Zz1wK2s7dmFyIE09e2xlYWY6ITAsbm9kZXM6W10scG9pbnQ6bnVsbCx4Om51bGwseTpudWxsLGFkZDpmdW5jdGlvbih0KXtBKE0sdCwrbSh0LCsraCksK3godCxoKSxwLGQsZyx2KX19O2lmKE0udmlzaXQ9ZnVuY3Rpb24odCl7IWZ1bmN0aW9uIHQoZSxyLG4saSxhLG8pe2lmKCFlKHIsbixpLGEsbykpe3ZhciBzPS41KihuK2EpLGw9LjUqKGkrbyksYz1yLm5vZGVzO2NbMF0mJnQoZSxjWzBdLG4saSxzLGwpLGNbMV0mJnQoZSxjWzFdLHMsaSxhLGwpLGNbMl0mJnQoZSxjWzJdLG4sbCxzLG8pLGNbM10mJnQoZSxjWzNdLHMsbCxhLG8pfX0odCxNLHAsZCxnLHYpfSxNLmZpbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzLGw9MS8wO3JldHVybiBmdW5jdGlvbiB0KGMsdSxoLGYscCl7aWYoISh1PmF8fGg+b3x8ZjxufHxwPGkpKXtpZihkPWMucG9pbnQpe3ZhciBkLGc9ZS1jLngsdj1yLWMueSxtPWcqZyt2KnY7aWYobTxsKXt2YXIgeT1NYXRoLnNxcnQobD1tKTtuPWUteSxpPXIteSxhPWUreSxvPXIreSxzPWR9fWZvcih2YXIgeD1jLm5vZGVzLGI9LjUqKHUrZiksXz0uNSooaCtwKSx3PShyPj1fKTw8MXxlPj1iLGs9dys0O3c8azsrK3cpaWYoYz14WzMmd10pc3dpdGNoKDMmdyl7Y2FzZSAwOnQoYyx1LGgsYixfKTticmVhaztjYXNlIDE6dChjLGIsaCxmLF8pO2JyZWFrO2Nhc2UgMjp0KGMsdSxfLGIscCk7YnJlYWs7Y2FzZSAzOnQoYyxiLF8sZixwKX19fSh0LG4saSxhLG8pLHN9KE0sdFswXSx0WzFdLHAsZCxnLHYpfSxoPS0xLG51bGw9PWUpe2Zvcig7KytoPGY7KUEoTSx0W2hdLGNbaF0sdVtoXSxwLGQsZyx2KTstLWh9ZWxzZSB0LmZvckVhY2goTS5hZGQpO3JldHVybiBjPXU9dD1sPW51bGwsTX1yZXR1cm4gbC54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsbCk6b30sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsbCk6c30sbC5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/ZT1yPW49aT1udWxsOihlPSt0WzBdWzBdLHI9K3RbMF1bMV0sbj0rdFsxXVswXSxpPSt0WzFdWzFdKSxsKTpudWxsPT1lP251bGw6W1tlLHJdLFtuLGldXX0sbC5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2U9cj1uPWk9bnVsbDooZT1yPTAsbj0rdFswXSxpPSt0WzFdKSxsKTpudWxsPT1lP251bGw6W24tZSxpLXJdfSxsfSx0LmludGVycG9sYXRlUmdiPXFpLHQuaW50ZXJwb2xhdGVPYmplY3Q9SGksdC5pbnRlcnBvbGF0ZU51bWJlcj1HaSx0LmludGVycG9sYXRlU3RyaW5nPVlpO3ZhciBXaT0vWy0rXT8oPzpcXGQrXFwuP1xcZCp8XFwuP1xcZCspKD86W2VFXVstK10/XFxkKyk/L2csWGk9bmV3IFJlZ0V4cChXaS5zb3VyY2UsXCJnXCIpO2Z1bmN0aW9uIFppKGUscil7Zm9yKHZhciBuLGk9dC5pbnRlcnBvbGF0b3JzLmxlbmd0aDstLWk+PTAmJiEobj10LmludGVycG9sYXRvcnNbaV0oZSxyKSk7KTtyZXR1cm4gbn1mdW5jdGlvbiAkaSh0LGUpe3ZhciByLG49W10saT1bXSxhPXQubGVuZ3RoLG89ZS5sZW5ndGgscz1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCk7Zm9yKHI9MDtyPHM7KytyKW4ucHVzaChaaSh0W3JdLGVbcl0pKTtmb3IoO3I8YTsrK3IpaVtyXT10W3JdO2Zvcig7cjxvOysrcilpW3JdPWVbcl07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihyPTA7cjxzOysrcilpW3JdPW5bcl0odCk7cmV0dXJuIGl9fXQuaW50ZXJwb2xhdGU9WmksdC5pbnRlcnBvbGF0b3JzPVtmdW5jdGlvbih0LGUpe3ZhciByPXR5cGVvZiBlO3JldHVybihcInN0cmluZ1wiPT09cj9nZS5oYXMoZS50b0xvd2VyQ2FzZSgpKXx8L14oI3xyZ2JcXCh8aHNsXFwoKS9pLnRlc3QoZSk/cWk6WWk6ZSBpbnN0YW5jZW9mIFZ0P3FpOkFycmF5LmlzQXJyYXkoZSk/JGk6XCJvYmplY3RcIj09PXImJmlzTmFOKGUpP0hpOkdpKSh0LGUpfV0sdC5pbnRlcnBvbGF0ZUFycmF5PSRpO3ZhciBKaT1mdW5jdGlvbigpe3JldHVybiB6fSxLaT10Lm1hcCh7bGluZWFyOkppLHBvbHk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnBvdyhlLHQpfX0scXVhZDpmdW5jdGlvbigpe3JldHVybiByYX0sY3ViaWM6ZnVuY3Rpb24oKXtyZXR1cm4gbmF9LHNpbjpmdW5jdGlvbigpe3JldHVybiBhYX0sZXhwOmZ1bmN0aW9uKCl7cmV0dXJuIG9hfSxjaXJjbGU6ZnVuY3Rpb24oKXtyZXR1cm4gc2F9LGVsYXN0aWM6ZnVuY3Rpb24odCxlKXt2YXIgcjthcmd1bWVudHMubGVuZ3RoPDImJihlPS40NSk7YXJndW1lbnRzLmxlbmd0aD9yPWUvTXQqTWF0aC5hc2luKDEvdCk6KHQ9MSxyPWUvNCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiAxK3QqTWF0aC5wb3coMiwtMTAqbikqTWF0aC5zaW4oKG4tcikqTXQvZSl9fSxiYWNrOmZ1bmN0aW9uKHQpe3R8fCh0PTEuNzAxNTgpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZSplKigodCsxKSplLXQpfX0sYm91bmNlOmZ1bmN0aW9uKCl7cmV0dXJuIGxhfX0pLFFpPXQubWFwKHtpbjp6LG91dDp0YSxcImluLW91dFwiOmVhLFwib3V0LWluXCI6ZnVuY3Rpb24odCl7cmV0dXJuIGVhKHRhKHQpKX19KTtmdW5jdGlvbiB0YSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIDEtdCgxLWUpfX1mdW5jdGlvbiBlYSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuLjUqKGU8LjU/dCgyKmUpOjItdCgyLTIqZSkpfX1mdW5jdGlvbiByYSh0KXtyZXR1cm4gdCp0fWZ1bmN0aW9uIG5hKHQpe3JldHVybiB0KnQqdH1mdW5jdGlvbiBpYSh0KXtpZih0PD0wKXJldHVybiAwO2lmKHQ+PTEpcmV0dXJuIDE7dmFyIGU9dCp0LHI9ZSp0O3JldHVybiA0Kih0PC41P3I6MyoodC1lKStyLS43NSl9ZnVuY3Rpb24gYWEodCl7cmV0dXJuIDEtTWF0aC5jb3ModCpFdCl9ZnVuY3Rpb24gb2EodCl7cmV0dXJuIE1hdGgucG93KDIsMTAqKHQtMSkpfWZ1bmN0aW9uIHNhKHQpe3JldHVybiAxLU1hdGguc3FydCgxLXQqdCl9ZnVuY3Rpb24gbGEodCl7cmV0dXJuIHQ8MS8yLjc1PzcuNTYyNSp0KnQ6dDwyLzIuNzU/Ny41NjI1Kih0LT0xLjUvMi43NSkqdCsuNzU6dDwyLjUvMi43NT83LjU2MjUqKHQtPTIuMjUvMi43NSkqdCsuOTM3NTo3LjU2MjUqKHQtPTIuNjI1LzIuNzUpKnQrLjk4NDM3NX1mdW5jdGlvbiBjYSh0LGUpe3JldHVybiBlLT10LGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnJvdW5kKHQrZSpyKX19ZnVuY3Rpb24gdWEodCl7dmFyIGUscixuLGk9W3QuYSx0LmJdLGE9W3QuYyx0LmRdLG89ZmEoaSkscz1oYShpLGEpLGw9ZmEoKChlPWEpWzBdKz0obj0tcykqKHI9aSlbMF0sZVsxXSs9bipyWzFdLGUpKXx8MDtpWzBdKmFbMV08YVswXSppWzFdJiYoaVswXSo9LTEsaVsxXSo9LTEsbyo9LTEscyo9LTEpLHRoaXMucm90YXRlPShvP01hdGguYXRhbjIoaVsxXSxpWzBdKTpNYXRoLmF0YW4yKC1hWzBdLGFbMV0pKSpMdCx0aGlzLnRyYW5zbGF0ZT1bdC5lLHQuZl0sdGhpcy5zY2FsZT1bbyxsXSx0aGlzLnNrZXc9bD9NYXRoLmF0YW4yKHMsbCkqTHQ6MH1mdW5jdGlvbiBoYSh0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdfWZ1bmN0aW9uIGZhKHQpe3ZhciBlPU1hdGguc3FydChoYSh0LHQpKTtyZXR1cm4gZSYmKHRbMF0vPWUsdFsxXS89ZSksZX10LmVhc2U9ZnVuY3Rpb24odCl7dmFyIGUsbj10LmluZGV4T2YoXCItXCIpLGk9bj49MD90LnNsaWNlKDAsbik6dCxhPW4+PTA/dC5zbGljZShuKzEpOlwiaW5cIjtyZXR1cm4gaT1LaS5nZXQoaSl8fEppLGE9UWkuZ2V0KGEpfHx6LGU9YShpLmFwcGx5KG51bGwsci5jYWxsKGFyZ3VtZW50cywxKSkpLGZ1bmN0aW9uKHQpe3JldHVybiB0PD0wPzA6dD49MT8xOmUodCl9fSx0LmludGVycG9sYXRlSGNsPWZ1bmN0aW9uKGUscil7ZT10LmhjbChlKSxyPXQuaGNsKHIpO3ZhciBuPWUuaCxpPWUuYyxhPWUubCxvPXIuaC1uLHM9ci5jLWksbD1yLmwtYTtpc05hTihzKSYmKHM9MCxpPWlzTmFOKGkpP3IuYzppKTtpc05hTihvKT8obz0wLG49aXNOYU4obik/ci5oOm4pOm8+MTgwP28tPTM2MDpvPC0xODAmJihvKz0zNjApO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gV3QobitvKnQsaStzKnQsYStsKnQpK1wiXCJ9fSx0LmludGVycG9sYXRlSHNsPWZ1bmN0aW9uKGUscil7ZT10LmhzbChlKSxyPXQuaHNsKHIpO3ZhciBuPWUuaCxpPWUucyxhPWUubCxvPXIuaC1uLHM9ci5zLWksbD1yLmwtYTtpc05hTihzKSYmKHM9MCxpPWlzTmFOKGkpP3IuczppKTtpc05hTihvKT8obz0wLG49aXNOYU4obik/ci5oOm4pOm8+MTgwP28tPTM2MDpvPC0xODAmJihvKz0zNjApO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gSHQobitvKnQsaStzKnQsYStsKnQpK1wiXCJ9fSx0LmludGVycG9sYXRlTGFiPWZ1bmN0aW9uKGUscil7ZT10LmxhYihlKSxyPXQubGFiKHIpO3ZhciBuPWUubCxpPWUuYSxhPWUuYixvPXIubC1uLHM9ci5hLWksbD1yLmItYTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHRlKG4rbyp0LGkrcyp0LGErbCp0KStcIlwifX0sdC5pbnRlcnBvbGF0ZVJvdW5kPWNhLHQudHJhbnNmb3JtPWZ1bmN0aW9uKGUpe3ZhciByPWkuY3JlYXRlRWxlbWVudE5TKHQubnMucHJlZml4LnN2ZyxcImdcIik7cmV0dXJuKHQudHJhbnNmb3JtPWZ1bmN0aW9uKHQpe2lmKG51bGwhPXQpe3Iuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsdCk7dmFyIGU9ci50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpfXJldHVybiBuZXcgdWEoZT9lLm1hdHJpeDpwYSl9KShlKX0sdWEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrdGhpcy50cmFuc2xhdGUrXCIpcm90YXRlKFwiK3RoaXMucm90YXRlK1wiKXNrZXdYKFwiK3RoaXMuc2tldytcIilzY2FsZShcIit0aGlzLnNjYWxlK1wiKVwifTt2YXIgcGE9e2E6MSxiOjAsYzowLGQ6MSxlOjAsZjowfTtmdW5jdGlvbiBkYSh0KXtyZXR1cm4gdC5sZW5ndGg/dC5wb3AoKStcIixcIjpcIlwifWZ1bmN0aW9uIGdhKGUscil7dmFyIG49W10saT1bXTtyZXR1cm4gZT10LnRyYW5zZm9ybShlKSxyPXQudHJhbnNmb3JtKHIpLGZ1bmN0aW9uKHQsZSxyLG4pe2lmKHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXSl7dmFyIGk9ci5wdXNoKFwidHJhbnNsYXRlKFwiLG51bGwsXCIsXCIsbnVsbCxcIilcIik7bi5wdXNoKHtpOmktNCx4OkdpKHRbMF0sZVswXSl9LHtpOmktMix4OkdpKHRbMV0sZVsxXSl9KX1lbHNlKGVbMF18fGVbMV0pJiZyLnB1c2goXCJ0cmFuc2xhdGUoXCIrZStcIilcIil9KGUudHJhbnNsYXRlLHIudHJhbnNsYXRlLG4saSksZnVuY3Rpb24odCxlLHIsbil7dCE9PWU/KHQtZT4xODA/ZSs9MzYwOmUtdD4xODAmJih0Kz0zNjApLG4ucHVzaCh7aTpyLnB1c2goZGEocikrXCJyb3RhdGUoXCIsbnVsbCxcIilcIiktMix4OkdpKHQsZSl9KSk6ZSYmci5wdXNoKGRhKHIpK1wicm90YXRlKFwiK2UrXCIpXCIpfShlLnJvdGF0ZSxyLnJvdGF0ZSxuLGkpLGZ1bmN0aW9uKHQsZSxyLG4pe3QhPT1lP24ucHVzaCh7aTpyLnB1c2goZGEocikrXCJza2V3WChcIixudWxsLFwiKVwiKS0yLHg6R2kodCxlKX0pOmUmJnIucHVzaChkYShyKStcInNrZXdYKFwiK2UrXCIpXCIpfShlLnNrZXcsci5za2V3LG4saSksZnVuY3Rpb24odCxlLHIsbil7aWYodFswXSE9PWVbMF18fHRbMV0hPT1lWzFdKXt2YXIgaT1yLnB1c2goZGEocikrXCJzY2FsZShcIixudWxsLFwiLFwiLG51bGwsXCIpXCIpO24ucHVzaCh7aTppLTQseDpHaSh0WzBdLGVbMF0pfSx7aTppLTIseDpHaSh0WzFdLGVbMV0pfSl9ZWxzZSAxPT09ZVswXSYmMT09PWVbMV18fHIucHVzaChkYShyKStcInNjYWxlKFwiK2UrXCIpXCIpfShlLnNjYWxlLHIuc2NhbGUsbixpKSxlPXI9bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGUscj0tMSxhPWkubGVuZ3RoOysrcjxhOyluWyhlPWlbcl0pLmldPWUueCh0KTtyZXR1cm4gbi5qb2luKFwiXCIpfX1mdW5jdGlvbiB2YSh0LGUpe3JldHVybiBlPShlLT10PSt0KXx8MS9lLGZ1bmN0aW9uKHIpe3JldHVybihyLXQpL2V9fWZ1bmN0aW9uIG1hKHQsZSl7cmV0dXJuIGU9KGUtPXQ9K3QpfHwxL2UsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMSwoci10KS9lKSl9fWZ1bmN0aW9uIHlhKHQpe2Zvcih2YXIgZT10LnNvdXJjZSxyPXQudGFyZ2V0LG49ZnVuY3Rpb24odCxlKXtpZih0PT09ZSlyZXR1cm4gdDt2YXIgcj14YSh0KSxuPXhhKGUpLGk9ci5wb3AoKSxhPW4ucG9wKCksbz1udWxsO2Zvcig7aT09PWE7KW89aSxpPXIucG9wKCksYT1uLnBvcCgpO3JldHVybiBvfShlLHIpLGk9W2VdO2UhPT1uOyllPWUucGFyZW50LGkucHVzaChlKTtmb3IodmFyIGE9aS5sZW5ndGg7ciE9PW47KWkuc3BsaWNlKGEsMCxyKSxyPXIucGFyZW50O3JldHVybiBpfWZ1bmN0aW9uIHhhKHQpe2Zvcih2YXIgZT1bXSxyPXQucGFyZW50O251bGwhPXI7KWUucHVzaCh0KSx0PXIscj1yLnBhcmVudDtyZXR1cm4gZS5wdXNoKHQpLGV9ZnVuY3Rpb24gYmEodCl7dC5maXhlZHw9Mn1mdW5jdGlvbiBfYSh0KXt0LmZpeGVkJj0tN31mdW5jdGlvbiB3YSh0KXt0LmZpeGVkfD00LHQucHg9dC54LHQucHk9dC55fWZ1bmN0aW9uIGthKHQpe3QuZml4ZWQmPS01fXQuaW50ZXJwb2xhdGVUcmFuc2Zvcm09Z2EsdC5sYXlvdXQ9e30sdC5sYXlvdXQuYnVuZGxlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPS0xLG49dC5sZW5ndGg7KytyPG47KWUucHVzaCh5YSh0W3JdKSk7cmV0dXJuIGV9fSx0LmxheW91dC5jaG9yZD1mdW5jdGlvbigpe3ZhciBlLHIsbixpLGEsbyxzLGw9e30sYz0wO2Z1bmN0aW9uIHUoKXt2YXIgbCx1LGYscCxkLGc9e30sdj1bXSxtPXQucmFuZ2UoaSkseT1bXTtmb3IoZT1bXSxyPVtdLGw9MCxwPS0xOysrcDxpOyl7Zm9yKHU9MCxkPS0xOysrZDxpOyl1Kz1uW3BdW2RdO3YucHVzaCh1KSx5LnB1c2godC5yYW5nZShpKSksbCs9dX1mb3IoYSYmbS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEodlt0XSx2W2VdKX0pLG8mJnkuZm9yRWFjaChmdW5jdGlvbih0LGUpe3Quc29ydChmdW5jdGlvbih0LHIpe3JldHVybiBvKG5bZV1bdF0sbltlXVtyXSl9KX0pLGw9KE10LWMqaSkvbCx1PTAscD0tMTsrK3A8aTspe2ZvcihmPXUsZD0tMTsrK2Q8aTspe3ZhciB4PW1bcF0sYj15W3hdW2RdLF89blt4XVtiXSx3PXUsaz11Kz1fKmw7Z1t4K1wiLVwiK2JdPXtpbmRleDp4LHN1YmluZGV4OmIsc3RhcnRBbmdsZTp3LGVuZEFuZ2xlOmssdmFsdWU6X319clt4XT17aW5kZXg6eCxzdGFydEFuZ2xlOmYsZW5kQW5nbGU6dSx2YWx1ZTp2W3hdfSx1Kz1jfWZvcihwPS0xOysrcDxpOylmb3IoZD1wLTE7KytkPGk7KXt2YXIgQT1nW3ArXCItXCIrZF0sVD1nW2QrXCItXCIrcF07KEEudmFsdWV8fFQudmFsdWUpJiZlLnB1c2goQS52YWx1ZTxULnZhbHVlP3tzb3VyY2U6VCx0YXJnZXQ6QX06e3NvdXJjZTpBLHRhcmdldDpUfSl9cyYmaCgpfWZ1bmN0aW9uIGgoKXtlLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gcygodC5zb3VyY2UudmFsdWUrdC50YXJnZXQudmFsdWUpLzIsKGUuc291cmNlLnZhbHVlK2UudGFyZ2V0LnZhbHVlKS8yKX0pfXJldHVybiBsLm1hdHJpeD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0obj10KSYmbi5sZW5ndGgsZT1yPW51bGwsbCk6bn0sbC5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsZT1yPW51bGwsbCk6Y30sbC5zb3J0R3JvdXBzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsZT1yPW51bGwsbCk6YX0sbC5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsZT1udWxsLGwpOm99LGwuc29ydENob3Jkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGUmJmgoKSxsKTpzfSxsLmNob3Jkcz1mdW5jdGlvbigpe3JldHVybiBlfHx1KCksZX0sbC5ncm91cHM9ZnVuY3Rpb24oKXtyZXR1cm4gcnx8dSgpLHJ9LGx9LHQubGF5b3V0LmZvcmNlPWZ1bmN0aW9uKCl7dmFyIGUscixuLGksYSxvLHM9e30sbD10LmRpc3BhdGNoKFwic3RhcnRcIixcInRpY2tcIixcImVuZFwiKSxjPVsxLDFdLHU9LjksaD1BYSxmPVRhLHA9LTMwLGQ9TWEsZz0uMSx2PS42NCxtPVtdLHk9W107ZnVuY3Rpb24geCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4saSl7aWYoZS5wb2ludCE9PXQpe3ZhciBhPWUuY3gtdC54LG89ZS5jeS10Lnkscz1pLXIsbD1hKmErbypvO2lmKHMqcy92PGwpe2lmKGw8ZCl7dmFyIGM9ZS5jaGFyZ2UvbDt0LnB4LT1hKmMsdC5weS09bypjfXJldHVybiEwfWlmKGUucG9pbnQmJmwmJmw8ZCl7Yz1lLnBvaW50Q2hhcmdlL2w7dC5weC09YSpjLHQucHktPW8qY319cmV0dXJuIWUuY2hhcmdlfX1mdW5jdGlvbiBiKGUpe2UucHg9dC5ldmVudC54LGUucHk9dC5ldmVudC55LHMucmVzdW1lKCl9cmV0dXJuIHMudGljaz1mdW5jdGlvbigpe2lmKChuKj0uOTkpPC4wMDUpcmV0dXJuIGU9bnVsbCxsLmVuZCh7dHlwZTpcImVuZFwiLGFscGhhOm49MH0pLCEwO3ZhciByLHMsaCxmLGQsdixiLF8sdyxrPW0ubGVuZ3RoLEE9eS5sZW5ndGg7Zm9yKHM9MDtzPEE7KytzKWY9KGg9eVtzXSkuc291cmNlLCh2PShfPShkPWgudGFyZ2V0KS54LWYueCkqXysodz1kLnktZi55KSp3KSYmKF8qPXY9biphW3NdKigodj1NYXRoLnNxcnQodikpLWlbc10pL3Ysdyo9dixkLngtPV8qKGI9Zi53ZWlnaHQrZC53ZWlnaHQ/Zi53ZWlnaHQvKGYud2VpZ2h0K2Qud2VpZ2h0KTouNSksZC55LT13KmIsZi54Kz1fKihiPTEtYiksZi55Kz13KmIpO2lmKChiPW4qZykmJihfPWNbMF0vMix3PWNbMV0vMixzPS0xLGIpKWZvcig7KytzPGs7KShoPW1bc10pLngrPShfLWgueCkqYixoLnkrPSh3LWgueSkqYjtpZihwKWZvcighZnVuY3Rpb24gdChlLHIsbil7dmFyIGk9MCxhPTA7ZS5jaGFyZ2U9MDtpZighZS5sZWFmKWZvcih2YXIgbyxzPWUubm9kZXMsbD1zLmxlbmd0aCxjPS0xOysrYzxsOyludWxsIT0obz1zW2NdKSYmKHQobyxyLG4pLGUuY2hhcmdlKz1vLmNoYXJnZSxpKz1vLmNoYXJnZSpvLmN4LGErPW8uY2hhcmdlKm8uY3kpO2lmKGUucG9pbnQpe2UubGVhZnx8KGUucG9pbnQueCs9TWF0aC5yYW5kb20oKS0uNSxlLnBvaW50LnkrPU1hdGgucmFuZG9tKCktLjUpO3ZhciB1PXIqbltlLnBvaW50LmluZGV4XTtlLmNoYXJnZSs9ZS5wb2ludENoYXJnZT11LGkrPXUqZS5wb2ludC54LGErPXUqZS5wb2ludC55fWUuY3g9aS9lLmNoYXJnZTtlLmN5PWEvZS5jaGFyZ2V9KHI9dC5nZW9tLnF1YWR0cmVlKG0pLG4sbykscz0tMTsrK3M8azspKGg9bVtzXSkuZml4ZWR8fHIudmlzaXQoeChoKSk7Zm9yKHM9LTE7KytzPGs7KShoPW1bc10pLmZpeGVkPyhoLng9aC5weCxoLnk9aC5weSk6KGgueC09KGgucHgtKGgucHg9aC54KSkqdSxoLnktPShoLnB5LShoLnB5PWgueSkpKnUpO2wudGljayh7dHlwZTpcInRpY2tcIixhbHBoYTpufSl9LHMubm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09dCxzKTptfSxzLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PXQscyk6eX0scy5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQscyk6Y30scy5saW5rRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Oit0LHMpOmh9LHMuZGlzdGFuY2U9cy5saW5rRGlzdGFuY2Uscy5saW5rU3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Oit0LHMpOmZ9LHMuZnJpY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K3Qscyk6dX0scy5jaGFyZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Oit0LHMpOnB9LHMuY2hhcmdlRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9dCp0LHMpOk1hdGguc3FydChkKX0scy5ncmF2aXR5PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSt0LHMpOmd9LHMudGhldGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9dCp0LHMpOk1hdGguc3FydCh2KX0scy5hbHBoYT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rdCxuP3Q+MD9uPXQ6KGUuYz1udWxsLGUudD1OYU4sZT1udWxsLGwuZW5kKHt0eXBlOlwiZW5kXCIsYWxwaGE6bj0wfSkpOnQ+MCYmKGwuc3RhcnQoe3R5cGU6XCJzdGFydFwiLGFscGhhOm49dH0pLGU9QWUocy50aWNrKSkscyk6bn0scy5zdGFydD1mdW5jdGlvbigpe3ZhciB0LGUscixuPW0ubGVuZ3RoLGw9eS5sZW5ndGgsdT1jWzBdLGQ9Y1sxXTtmb3IodD0wO3Q8bjsrK3QpKHI9bVt0XSkuaW5kZXg9dCxyLndlaWdodD0wO2Zvcih0PTA7dDxsOysrdClcIm51bWJlclwiPT10eXBlb2Yocj15W3RdKS5zb3VyY2UmJihyLnNvdXJjZT1tW3Iuc291cmNlXSksXCJudW1iZXJcIj09dHlwZW9mIHIudGFyZ2V0JiYoci50YXJnZXQ9bVtyLnRhcmdldF0pLCsrci5zb3VyY2Uud2VpZ2h0LCsrci50YXJnZXQud2VpZ2h0O2Zvcih0PTA7dDxuOysrdClyPW1bdF0saXNOYU4oci54KSYmKHIueD1nKFwieFwiLHUpKSxpc05hTihyLnkpJiYoci55PWcoXCJ5XCIsZCkpLGlzTmFOKHIucHgpJiYoci5weD1yLngpLGlzTmFOKHIucHkpJiYoci5weT1yLnkpO2lmKGk9W10sXCJmdW5jdGlvblwiPT10eXBlb2YgaClmb3IodD0wO3Q8bDsrK3QpaVt0XT0raC5jYWxsKHRoaXMseVt0XSx0KTtlbHNlIGZvcih0PTA7dDxsOysrdClpW3RdPWg7aWYoYT1bXSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBmKWZvcih0PTA7dDxsOysrdClhW3RdPStmLmNhbGwodGhpcyx5W3RdLHQpO2Vsc2UgZm9yKHQ9MDt0PGw7Kyt0KWFbdF09ZjtpZihvPVtdLFwiZnVuY3Rpb25cIj09dHlwZW9mIHApZm9yKHQ9MDt0PG47Kyt0KW9bdF09K3AuY2FsbCh0aGlzLG1bdF0sdCk7ZWxzZSBmb3IodD0wO3Q8bjsrK3Qpb1t0XT1wO2Z1bmN0aW9uIGcocixpKXtpZighZSl7Zm9yKGU9bmV3IEFycmF5KG4pLGM9MDtjPG47KytjKWVbY109W107Zm9yKGM9MDtjPGw7KytjKXt2YXIgYT15W2NdO2VbYS5zb3VyY2UuaW5kZXhdLnB1c2goYS50YXJnZXQpLGVbYS50YXJnZXQuaW5kZXhdLnB1c2goYS5zb3VyY2UpfX1mb3IodmFyIG8scz1lW3RdLGM9LTEsdT1zLmxlbmd0aDsrK2M8dTspaWYoIWlzTmFOKG89c1tjXVtyXSkpcmV0dXJuIG87cmV0dXJuIE1hdGgucmFuZG9tKCkqaX1yZXR1cm4gcy5yZXN1bWUoKX0scy5yZXN1bWU9ZnVuY3Rpb24oKXtyZXR1cm4gcy5hbHBoYSguMSl9LHMuc3RvcD1mdW5jdGlvbigpe3JldHVybiBzLmFscGhhKDApfSxzLmRyYWc9ZnVuY3Rpb24oKXtpZihyfHwocj10LmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oeikub24oXCJkcmFnc3RhcnQuZm9yY2VcIixiYSkub24oXCJkcmFnLmZvcmNlXCIsYikub24oXCJkcmFnZW5kLmZvcmNlXCIsX2EpKSwhYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcjt0aGlzLm9uKFwibW91c2VvdmVyLmZvcmNlXCIsd2EpLm9uKFwibW91c2VvdXQuZm9yY2VcIixrYSkuY2FsbChyKX0sdC5yZWJpbmQocyxsLFwib25cIil9O3ZhciBBYT0yMCxUYT0xLE1hPTEvMDtmdW5jdGlvbiBTYShlLHIpe3JldHVybiB0LnJlYmluZChlLHIsXCJzb3J0XCIsXCJjaGlsZHJlblwiLFwidmFsdWVcIiksZS5ub2Rlcz1lLGUubGlua3M9SWEsZX1mdW5jdGlvbiBFYSh0LGUpe2Zvcih2YXIgcj1bdF07bnVsbCE9KHQ9ci5wb3AoKSk7KWlmKGUodCksKGk9dC5jaGlsZHJlbikmJihuPWkubGVuZ3RoKSlmb3IodmFyIG4saTstLW4+PTA7KXIucHVzaChpW25dKX1mdW5jdGlvbiBDYSh0LGUpe2Zvcih2YXIgcj1bdF0sbj1bXTtudWxsIT0odD1yLnBvcCgpKTspaWYobi5wdXNoKHQpLChhPXQuY2hpbGRyZW4pJiYoaT1hLmxlbmd0aCkpZm9yKHZhciBpLGEsbz0tMTsrK288aTspci5wdXNoKGFbb10pO2Zvcig7bnVsbCE9KHQ9bi5wb3AoKSk7KWUodCl9ZnVuY3Rpb24gTGEodCl7cmV0dXJuIHQuY2hpbGRyZW59ZnVuY3Rpb24gemEodCl7cmV0dXJuIHQudmFsdWV9ZnVuY3Rpb24gT2EodCxlKXtyZXR1cm4gZS52YWx1ZS10LnZhbHVlfWZ1bmN0aW9uIElhKGUpe3JldHVybiB0Lm1lcmdlKGUubWFwKGZ1bmN0aW9uKHQpe3JldHVybih0LmNoaWxkcmVufHxbXSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6dCx0YXJnZXQ6ZX19KX0pKX10LmxheW91dC5oaWVyYXJjaHk9ZnVuY3Rpb24oKXt2YXIgdD1PYSxlPUxhLHI9emE7ZnVuY3Rpb24gbihpKXt2YXIgYSxvPVtpXSxzPVtdO2ZvcihpLmRlcHRoPTA7bnVsbCE9KGE9by5wb3AoKSk7KWlmKHMucHVzaChhKSwoYz1lLmNhbGwobixhLGEuZGVwdGgpKSYmKGw9Yy5sZW5ndGgpKXtmb3IodmFyIGwsYyx1Oy0tbD49MDspby5wdXNoKHU9Y1tsXSksdS5wYXJlbnQ9YSx1LmRlcHRoPWEuZGVwdGgrMTtyJiYoYS52YWx1ZT0wKSxhLmNoaWxkcmVuPWN9ZWxzZSByJiYoYS52YWx1ZT0rci5jYWxsKG4sYSxhLmRlcHRoKXx8MCksZGVsZXRlIGEuY2hpbGRyZW47cmV0dXJuIENhKGksZnVuY3Rpb24oZSl7dmFyIG4saTt0JiYobj1lLmNoaWxkcmVuKSYmbi5zb3J0KHQpLHImJihpPWUucGFyZW50KSYmKGkudmFsdWUrPWUudmFsdWUpfSksc31yZXR1cm4gbi5zb3J0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbik6dH0sbi5jaGlsZHJlbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4udmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxuLnJldmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHImJihFYSh0LGZ1bmN0aW9uKHQpe3QuY2hpbGRyZW4mJih0LnZhbHVlPTApfSksQ2EodCxmdW5jdGlvbih0KXt2YXIgZTt0LmNoaWxkcmVufHwodC52YWx1ZT0rci5jYWxsKG4sdCx0LmRlcHRoKXx8MCksKGU9dC5wYXJlbnQpJiYoZS52YWx1ZSs9dC52YWx1ZSl9KSksdH0sbn0sdC5sYXlvdXQucGFydGl0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dC5sYXlvdXQuaGllcmFyY2h5KCkscj1bMSwxXTtmdW5jdGlvbiBuKHQsbil7dmFyIGk9ZS5jYWxsKHRoaXMsdCxuKTtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgYT1lLmNoaWxkcmVuO2lmKGUueD1yLGUueT1lLmRlcHRoKmksZS5keD1uLGUuZHk9aSxhJiYobz1hLmxlbmd0aCkpe3ZhciBvLHMsbCxjPS0xO2ZvcihuPWUudmFsdWU/bi9lLnZhbHVlOjA7KytjPG87KXQocz1hW2NdLHIsbD1zLnZhbHVlKm4saSkscis9bH19KGlbMF0sMCxyWzBdLHJbMV0vZnVuY3Rpb24gdChlKXt2YXIgcj1lLmNoaWxkcmVuLG49MDtpZihyJiYoaT1yLmxlbmd0aCkpZm9yKHZhciBpLGE9LTE7KythPGk7KW49TWF0aC5tYXgobix0KHJbYV0pKTtyZXR1cm4gMStufShpWzBdKSksaX1yZXR1cm4gbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sU2EobixlKX0sdC5sYXlvdXQucGllPWZ1bmN0aW9uKCl7dmFyIGU9TnVtYmVyLHI9RGEsbj0wLGk9TXQsYT0wO2Z1bmN0aW9uIG8ocyl7dmFyIGwsYz1zLmxlbmd0aCx1PXMubWFwKGZ1bmN0aW9uKHQscil7cmV0dXJuK2UuY2FsbChvLHQscil9KSxoPSsoXCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuKSxmPShcImZ1bmN0aW9uXCI9PXR5cGVvZiBpP2kuYXBwbHkodGhpcyxhcmd1bWVudHMpOmkpLWgscD1NYXRoLm1pbihNYXRoLmFicyhmKS9jLCsoXCJmdW5jdGlvblwiPT10eXBlb2YgYT9hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTphKSksZD1wKihmPDA/LTE6MSksZz10LnN1bSh1KSx2PWc/KGYtYypkKS9nOjAsbT10LnJhbmdlKGMpLHk9W107cmV0dXJuIG51bGwhPXImJm0uc29ydChyPT09RGE/ZnVuY3Rpb24odCxlKXtyZXR1cm4gdVtlXS11W3RdfTpmdW5jdGlvbih0LGUpe3JldHVybiByKHNbdF0sc1tlXSl9KSxtLmZvckVhY2goZnVuY3Rpb24odCl7eVt0XT17ZGF0YTpzW3RdLHZhbHVlOmw9dVt0XSxzdGFydEFuZ2xlOmgsZW5kQW5nbGU6aCs9bCp2K2QscGFkQW5nbGU6cH19KSx5fXJldHVybiBvLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbyk6ZX0sby5zb3J0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbyk6cn0sby5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsbyk6bn0sby5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LG8pOml9LG8ucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxvKTphfSxvfTt2YXIgRGE9e307ZnVuY3Rpb24gUGEodCl7cmV0dXJuIHQueH1mdW5jdGlvbiBSYSh0KXtyZXR1cm4gdC55fWZ1bmN0aW9uIEZhKHQsZSxyKXt0LnkwPWUsdC55PXJ9dC5sYXlvdXQuc3RhY2s9ZnVuY3Rpb24oKXt2YXIgZT16LHI9amEsbj1WYSxpPUZhLGE9UGEsbz1SYTtmdW5jdGlvbiBzKGwsYyl7aWYoIShwPWwubGVuZ3RoKSlyZXR1cm4gbDt2YXIgdT1sLm1hcChmdW5jdGlvbih0LHIpe3JldHVybiBlLmNhbGwocyx0LHIpfSksaD11Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm5bYS5jYWxsKHMsdCxlKSxvLmNhbGwocyx0LGUpXX0pfSksZj1yLmNhbGwocyxoLGMpO3U9dC5wZXJtdXRlKHUsZiksaD10LnBlcm11dGUoaCxmKTt2YXIgcCxkLGcsdixtPW4uY2FsbChzLGgsYykseT11WzBdLmxlbmd0aDtmb3IoZz0wO2c8eTsrK2cpZm9yKGkuY2FsbChzLHVbMF1bZ10sdj1tW2ddLGhbMF1bZ11bMV0pLGQ9MTtkPHA7KytkKWkuY2FsbChzLHVbZF1bZ10sdis9aFtkLTFdW2ddWzFdLGhbZF1bZ11bMV0pO3JldHVybiBsfXJldHVybiBzLnZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LHMpOmV9LHMub3JkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OkJhLmdldCh0KXx8amEscyk6cn0scy5vZmZzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Ok5hLmdldCh0KXx8VmEscyk6bn0scy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQscyk6YX0scy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQscyk6b30scy5vdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxzKTppfSxzfTt2YXIgQmE9dC5tYXAoe1wiaW5zaWRlLW91dFwiOmZ1bmN0aW9uKGUpe3ZhciByLG4saT1lLmxlbmd0aCxhPWUubWFwKFVhKSxvPWUubWFwKHFhKSxzPXQucmFuZ2UoaSkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBhW3RdLWFbZV19KSxsPTAsYz0wLHU9W10saD1bXTtmb3Iocj0wO3I8aTsrK3Ipbj1zW3JdLGw8Yz8obCs9b1tuXSx1LnB1c2gobikpOihjKz1vW25dLGgucHVzaChuKSk7cmV0dXJuIGgucmV2ZXJzZSgpLmNvbmNhdCh1KX0scmV2ZXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gdC5yYW5nZShlLmxlbmd0aCkucmV2ZXJzZSgpfSxkZWZhdWx0OmphfSksTmE9dC5tYXAoe3NpbGhvdWV0dGU6ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9dC5sZW5ndGgsYT10WzBdLmxlbmd0aCxvPVtdLHM9MCxsPVtdO2ZvcihyPTA7cjxhOysrcil7Zm9yKGU9MCxuPTA7ZTxpO2UrKyluKz10W2VdW3JdWzFdO24+cyYmKHM9biksby5wdXNoKG4pfWZvcihyPTA7cjxhOysrcilsW3JdPShzLW9bcl0pLzI7cmV0dXJuIGx9LHdpZ2dsZTpmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scyxsLGMsdT10Lmxlbmd0aCxoPXRbMF0sZj1oLmxlbmd0aCxwPVtdO2ZvcihwWzBdPWw9Yz0wLHI9MTtyPGY7KytyKXtmb3IoZT0wLGk9MDtlPHU7KytlKWkrPXRbZV1bcl1bMV07Zm9yKGU9MCxhPTAscz1oW3JdWzBdLWhbci0xXVswXTtlPHU7KytlKXtmb3Iobj0wLG89KHRbZV1bcl1bMV0tdFtlXVtyLTFdWzFdKS8oMipzKTtuPGU7KytuKW8rPSh0W25dW3JdWzFdLXRbbl1bci0xXVsxXSkvczthKz1vKnRbZV1bcl1bMV19cFtyXT1sLT1pP2EvaSpzOjAsbDxjJiYoYz1sKX1mb3Iocj0wO3I8ZjsrK3IpcFtyXS09YztyZXR1cm4gcH0sZXhwYW5kOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXQubGVuZ3RoLGE9dFswXS5sZW5ndGgsbz0xL2kscz1bXTtmb3Iocj0wO3I8YTsrK3Ipe2ZvcihlPTAsbj0wO2U8aTtlKyspbis9dFtlXVtyXVsxXTtpZihuKWZvcihlPTA7ZTxpO2UrKyl0W2VdW3JdWzFdLz1uO2Vsc2UgZm9yKGU9MDtlPGk7ZSsrKXRbZV1bcl1bMV09b31mb3Iocj0wO3I8YTsrK3Ipc1tyXT0wO3JldHVybiBzfSx6ZXJvOlZhfSk7ZnVuY3Rpb24gamEoZSl7cmV0dXJuIHQucmFuZ2UoZS5sZW5ndGgpfWZ1bmN0aW9uIFZhKHQpe2Zvcih2YXIgZT0tMSxyPXRbMF0ubGVuZ3RoLG49W107KytlPHI7KW5bZV09MDtyZXR1cm4gbn1mdW5jdGlvbiBVYSh0KXtmb3IodmFyIGUscj0xLG49MCxpPXRbMF1bMV0sYT10Lmxlbmd0aDtyPGE7KytyKShlPXRbcl1bMV0pPmkmJihuPXIsaT1lKTtyZXR1cm4gbn1mdW5jdGlvbiBxYSh0KXtyZXR1cm4gdC5yZWR1Y2UoSGEsMCl9ZnVuY3Rpb24gSGEodCxlKXtyZXR1cm4gdCtlWzFdfWZ1bmN0aW9uIEdhKHQsZSl7cmV0dXJuIFlhKHQsTWF0aC5jZWlsKE1hdGgubG9nKGUubGVuZ3RoKS9NYXRoLkxOMisxKSl9ZnVuY3Rpb24gWWEodCxlKXtmb3IodmFyIHI9LTEsbj0rdFswXSxpPSh0WzFdLW4pL2UsYT1bXTsrK3I8PWU7KWFbcl09aSpyK247cmV0dXJuIGF9ZnVuY3Rpb24gV2EoZSl7cmV0dXJuW3QubWluKGUpLHQubWF4KGUpXX1mdW5jdGlvbiBYYSh0LGUpe3JldHVybiB0LnZhbHVlLWUudmFsdWV9ZnVuY3Rpb24gWmEodCxlKXt2YXIgcj10Ll9wYWNrX25leHQ7dC5fcGFja19uZXh0PWUsZS5fcGFja19wcmV2PXQsZS5fcGFja19uZXh0PXIsci5fcGFja19wcmV2PWV9ZnVuY3Rpb24gJGEodCxlKXt0Ll9wYWNrX25leHQ9ZSxlLl9wYWNrX3ByZXY9dH1mdW5jdGlvbiBKYSh0LGUpe3ZhciByPWUueC10Lngsbj1lLnktdC55LGk9dC5yK2UucjtyZXR1cm4uOTk5KmkqaT5yKnIrbipufWZ1bmN0aW9uIEthKHQpe2lmKChlPXQuY2hpbGRyZW4pJiYobD1lLmxlbmd0aCkpe3ZhciBlLHIsbixpLGEsbyxzLGwsYz0xLzAsdT0tMS8wLGg9MS8wLGY9LTEvMDtpZihlLmZvckVhY2goUWEpLChyPWVbMF0pLng9LXIucixyLnk9MCx4KHIpLGw+MSYmKChuPWVbMV0pLng9bi5yLG4ueT0wLHgobiksbD4yKSlmb3IoZW8ocixuLGk9ZVsyXSkseChpKSxaYShyLGkpLHIuX3BhY2tfcHJldj1pLFphKGksbiksbj1yLl9wYWNrX25leHQsYT0zO2E8bDthKyspe2VvKHIsbixpPWVbYV0pO3ZhciBwPTAsZD0xLGc9MTtmb3Iobz1uLl9wYWNrX25leHQ7byE9PW47bz1vLl9wYWNrX25leHQsZCsrKWlmKEphKG8saSkpe3A9MTticmVha31pZigxPT1wKWZvcihzPXIuX3BhY2tfcHJldjtzIT09by5fcGFja19wcmV2JiYhSmEocyxpKTtzPXMuX3BhY2tfcHJldixnKyspO3A/KGQ8Z3x8ZD09ZyYmbi5yPHIucj8kYShyLG49byk6JGEocj1zLG4pLGEtLSk6KFphKHIsaSksbj1pLHgoaSkpfXZhciB2PShjK3UpLzIsbT0oaCtmKS8yLHk9MDtmb3IoYT0wO2E8bDthKyspKGk9ZVthXSkueC09dixpLnktPW0seT1NYXRoLm1heCh5LGkucitNYXRoLnNxcnQoaS54KmkueCtpLnkqaS55KSk7dC5yPXksZS5mb3JFYWNoKHRvKX1mdW5jdGlvbiB4KHQpe2M9TWF0aC5taW4odC54LXQucixjKSx1PU1hdGgubWF4KHQueCt0LnIsdSksaD1NYXRoLm1pbih0LnktdC5yLGgpLGY9TWF0aC5tYXgodC55K3QucixmKX19ZnVuY3Rpb24gUWEodCl7dC5fcGFja19uZXh0PXQuX3BhY2tfcHJldj10fWZ1bmN0aW9uIHRvKHQpe2RlbGV0ZSB0Ll9wYWNrX25leHQsZGVsZXRlIHQuX3BhY2tfcHJldn1mdW5jdGlvbiBlbyh0LGUscil7dmFyIG49dC5yK3IucixpPWUueC10LngsYT1lLnktdC55O2lmKG4mJihpfHxhKSl7dmFyIG89ZS5yK3IucixzPWkqaSthKmEsbD0uNSsoKG4qPW4pLShvKj1vKSkvKDIqcyksYz1NYXRoLnNxcnQoTWF0aC5tYXgoMCwyKm8qKG4rcyktKG4tPXMpKm4tbypvKSkvKDIqcyk7ci54PXQueCtsKmkrYyphLHIueT10LnkrbCphLWMqaX1lbHNlIHIueD10LngrbixyLnk9dC55fWZ1bmN0aW9uIHJvKHQsZSl7cmV0dXJuIHQucGFyZW50PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gbm8odCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZS5sZW5ndGg/ZVswXTp0LnR9ZnVuY3Rpb24gaW8odCl7dmFyIGUscj10LmNoaWxkcmVuO3JldHVybihlPXIubGVuZ3RoKT9yW2UtMV06dC50fWZ1bmN0aW9uIGFvKHQsZSxyKXt2YXIgbj1yLyhlLmktdC5pKTtlLmMtPW4sZS5zKz1yLHQuYys9bixlLnorPXIsZS5tKz1yfWZ1bmN0aW9uIG9vKHQsZSxyKXtyZXR1cm4gdC5hLnBhcmVudD09PWUucGFyZW50P3QuYTpyfWZ1bmN0aW9uIHNvKHQpe3JldHVybnt4OnQueCx5OnQueSxkeDp0LmR4LGR5OnQuZHl9fWZ1bmN0aW9uIGxvKHQsZSl7dmFyIHI9dC54K2VbM10sbj10LnkrZVswXSxpPXQuZHgtZVsxXS1lWzNdLGE9dC5keS1lWzBdLWVbMl07cmV0dXJuIGk8MCYmKHIrPWkvMixpPTApLGE8MCYmKG4rPWEvMixhPTApLHt4OnIseTpuLGR4OmksZHk6YX19ZnVuY3Rpb24gY28odCl7dmFyIGU9dFswXSxyPXRbdC5sZW5ndGgtMV07cmV0dXJuIGU8cj9bZSxyXTpbcixlXX1mdW5jdGlvbiB1byh0KXtyZXR1cm4gdC5yYW5nZUV4dGVudD90LnJhbmdlRXh0ZW50KCk6Y28odC5yYW5nZSgpKX1mdW5jdGlvbiBobyh0LGUscixuKXt2YXIgaT1yKHRbMF0sdFsxXSksYT1uKGVbMF0sZVsxXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBhKGkodCkpfX1mdW5jdGlvbiBmbyh0LGUpe3ZhciByLG49MCxpPXQubGVuZ3RoLTEsYT10W25dLG89dFtpXTtyZXR1cm4gbzxhJiYocj1uLG49aSxpPXIscj1hLGE9byxvPXIpLHRbbl09ZS5mbG9vcihhKSx0W2ldPWUuY2VpbChvKSx0fWZ1bmN0aW9uIHBvKHQpe3JldHVybiB0P3tmbG9vcjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5mbG9vcihlL3QpKnR9LGNlaWw6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguY2VpbChlL3QpKnR9fTpnb310LmxheW91dC5oaXN0b2dyYW09ZnVuY3Rpb24oKXt2YXIgZT0hMCxyPU51bWJlcixuPVdhLGk9R2E7ZnVuY3Rpb24gYShhLG8pe2Zvcih2YXIgcyxsLGM9W10sdT1hLm1hcChyLHRoaXMpLGg9bi5jYWxsKHRoaXMsdSxvKSxmPWkuY2FsbCh0aGlzLGgsdSxvKSxwPShvPS0xLHUubGVuZ3RoKSxkPWYubGVuZ3RoLTEsZz1lPzE6MS9wOysrbzxkOykocz1jW29dPVtdKS5keD1mW28rMV0tKHMueD1mW29dKSxzLnk9MDtpZihkPjApZm9yKG89LTE7KytvPHA7KShsPXVbb10pPj1oWzBdJiZsPD1oWzFdJiYoKHM9Y1t0LmJpc2VjdChmLGwsMSxkKS0xXSkueSs9ZyxzLnB1c2goYVtvXSkpO3JldHVybiBjfXJldHVybiBhLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sYS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj12ZSh0KSxhKTpufSxhLmJpbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9XCJudW1iZXJcIj09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7cmV0dXJuIFlhKGUsdCl9OnZlKHQpLGEpOml9LGEuZnJlcXVlbmN5PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSEhdCxhKTplfSxhfSx0LmxheW91dC5wYWNrPWZ1bmN0aW9uKCl7dmFyIGUscj10LmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KFhhKSxuPTAsaT1bMSwxXTtmdW5jdGlvbiBhKHQsYSl7dmFyIG89ci5jYWxsKHRoaXMsdCxhKSxzPW9bMF0sbD1pWzBdLGM9aVsxXSx1PW51bGw9PWU/TWF0aC5zcXJ0OlwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTpmdW5jdGlvbigpe3JldHVybiBlfTtpZihzLng9cy55PTAsQ2EocyxmdW5jdGlvbih0KXt0LnI9K3UodC52YWx1ZSl9KSxDYShzLEthKSxuKXt2YXIgaD1uKihlPzE6TWF0aC5tYXgoMipzLnIvbCwyKnMuci9jKSkvMjtDYShzLGZ1bmN0aW9uKHQpe3Qucis9aH0pLENhKHMsS2EpLENhKHMsZnVuY3Rpb24odCl7dC5yLT1ofSl9cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4saSl7dmFyIGE9ZS5jaGlsZHJlbjtlLng9cis9aSplLng7ZS55PW4rPWkqZS55O2Uucio9aTtpZihhKWZvcih2YXIgbz0tMSxzPWEubGVuZ3RoOysrbzxzOyl0KGFbb10scixuLGkpfShzLGwvMixjLzIsZT8xOjEvTWF0aC5tYXgoMipzLnIvbCwyKnMuci9jKSksb31yZXR1cm4gYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsYSk6aX0sYS5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dHx8XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Oit0LGEpOmV9LGEucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxhKTpufSxTYShhLHIpfSx0LmxheW91dC50cmVlPWZ1bmN0aW9uKCl7dmFyIGU9dC5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChudWxsKS52YWx1ZShudWxsKSxyPXJvLG49WzEsMV0saT1udWxsO2Z1bmN0aW9uIGEodCxhKXt2YXIgYz1lLmNhbGwodGhpcyx0LGEpLHU9Y1swXSxoPWZ1bmN0aW9uKHQpe3ZhciBlLHI9e0E6bnVsbCxjaGlsZHJlbjpbdF19LG49W3JdO2Zvcig7bnVsbCE9KGU9bi5wb3AoKSk7KWZvcih2YXIgaSxhPWUuY2hpbGRyZW4sbz0wLHM9YS5sZW5ndGg7bzxzOysrbyluLnB1c2goKGFbb109aT17XzphW29dLHBhcmVudDplLGNoaWxkcmVuOihpPWFbb10uY2hpbGRyZW4pJiZpLnNsaWNlKCl8fFtdLEE6bnVsbCxhOm51bGwsejowLG06MCxjOjAsczowLHQ6bnVsbCxpOm99KS5hPWkpO3JldHVybiByLmNoaWxkcmVuWzBdfSh1KTtpZihDYShoLG8pLGgucGFyZW50Lm09LWgueixFYShoLHMpLGkpRWEodSxsKTtlbHNle3ZhciBmPXUscD11LGQ9dTtFYSh1LGZ1bmN0aW9uKHQpe3QueDxmLngmJihmPXQpLHQueD5wLngmJihwPXQpLHQuZGVwdGg+ZC5kZXB0aCYmKGQ9dCl9KTt2YXIgZz1yKGYscCkvMi1mLngsdj1uWzBdLyhwLngrcihwLGYpLzIrZyksbT1uWzFdLyhkLmRlcHRofHwxKTtFYSh1LGZ1bmN0aW9uKHQpe3QueD0odC54K2cpKnYsdC55PXQuZGVwdGgqbX0pfXJldHVybiBjfWZ1bmN0aW9uIG8odCl7dmFyIGU9dC5jaGlsZHJlbixuPXQucGFyZW50LmNoaWxkcmVuLGk9dC5pP25bdC5pLTFdOm51bGw7aWYoZS5sZW5ndGgpeyFmdW5jdGlvbih0KXt2YXIgZSxyPTAsbj0wLGk9dC5jaGlsZHJlbixhPWkubGVuZ3RoO2Zvcig7LS1hPj0wOykoZT1pW2FdKS56Kz1yLGUubSs9cixyKz1lLnMrKG4rPWUuYyl9KHQpO3ZhciBhPShlWzBdLnorZVtlLmxlbmd0aC0xXS56KS8yO2k/KHQuej1pLnorcih0Ll8saS5fKSx0Lm09dC56LWEpOnQuej1hfWVsc2UgaSYmKHQuej1pLnorcih0Ll8saS5fKSk7dC5wYXJlbnQuQT1mdW5jdGlvbih0LGUsbil7aWYoZSl7Zm9yKHZhciBpLGE9dCxvPXQscz1lLGw9YS5wYXJlbnQuY2hpbGRyZW5bMF0sYz1hLm0sdT1vLm0saD1zLm0sZj1sLm07cz1pbyhzKSxhPW5vKGEpLHMmJmE7KWw9bm8obCksKG89aW8obykpLmE9dCwoaT1zLnoraC1hLnotYytyKHMuXyxhLl8pKT4wJiYoYW8ob28ocyx0LG4pLHQsaSksYys9aSx1Kz1pKSxoKz1zLm0sYys9YS5tLGYrPWwubSx1Kz1vLm07cyYmIWlvKG8pJiYoby50PXMsby5tKz1oLXUpLGEmJiFubyhsKSYmKGwudD1hLGwubSs9Yy1mLG49dCl9cmV0dXJuIG59KHQsaSx0LnBhcmVudC5BfHxuWzBdKX1mdW5jdGlvbiBzKHQpe3QuXy54PXQueit0LnBhcmVudC5tLHQubSs9dC5wYXJlbnQubX1mdW5jdGlvbiBsKHQpe3QueCo9blswXSx0Lnk9dC5kZXB0aCpuWzFdfXJldHVybiBhLnNlcGFyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxhKTpyfSxhLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09KG49dCk/bDpudWxsLGEpOmk/bnVsbDpufSxhLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PShuPXQpP251bGw6bCxhKTppP246bnVsbH0sU2EoYSxlKX0sdC5sYXlvdXQuY2x1c3Rlcj1mdW5jdGlvbigpe3ZhciBlPXQubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQobnVsbCkudmFsdWUobnVsbCkscj1ybyxuPVsxLDFdLGk9ITE7ZnVuY3Rpb24gYShhLG8pe3ZhciBzLGw9ZS5jYWxsKHRoaXMsYSxvKSxjPWxbMF0sdT0wO0NhKGMsZnVuY3Rpb24oZSl7dmFyIG49ZS5jaGlsZHJlbjtuJiZuLmxlbmd0aD8oZS54PWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0K2UueH0sMCkvdC5sZW5ndGh9KG4pLGUueT1mdW5jdGlvbihlKXtyZXR1cm4gMSt0Lm1heChlLGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KX0obikpOihlLng9cz91Kz1yKGUscyk6MCxlLnk9MCxzPWUpfSk7dmFyIGg9ZnVuY3Rpb24gdChlKXt2YXIgcj1lLmNoaWxkcmVuO3JldHVybiByJiZyLmxlbmd0aD90KHJbMF0pOmV9KGMpLGY9ZnVuY3Rpb24gdChlKXt2YXIgcixuPWUuY2hpbGRyZW47cmV0dXJuIG4mJihyPW4ubGVuZ3RoKT90KG5bci0xXSk6ZX0oYykscD1oLngtcihoLGYpLzIsZD1mLngrcihmLGgpLzI7cmV0dXJuIENhKGMsaT9mdW5jdGlvbih0KXt0Lng9KHQueC1jLngpKm5bMF0sdC55PShjLnktdC55KSpuWzFdfTpmdW5jdGlvbih0KXt0Lng9KHQueC1wKS8oZC1wKSpuWzBdLHQueT0oMS0oYy55P3QueS9jLnk6MSkpKm5bMV19KSxsfXJldHVybiBhLnNlcGFyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxhKTpyfSxhLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09KG49dCksYSk6aT9udWxsOm59LGEubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbCE9KG49dCksYSk6aT9uOm51bGx9LFNhKGEsZSl9LHQubGF5b3V0LnRyZWVtYXA9ZnVuY3Rpb24oKXt2YXIgZSxyPXQubGF5b3V0LmhpZXJhcmNoeSgpLG49TWF0aC5yb3VuZCxpPVsxLDFdLGE9bnVsbCxvPXNvLHM9ITEsbD1cInNxdWFyaWZ5XCIsYz0uNSooMStNYXRoLnNxcnQoNSkpO2Z1bmN0aW9uIHUodCxlKXtmb3IodmFyIHIsbixpPS0xLGE9dC5sZW5ndGg7KytpPGE7KW49KHI9dFtpXSkudmFsdWUqKGU8MD8wOmUpLHIuYXJlYT1pc05hTihuKXx8bjw9MD8wOm59ZnVuY3Rpb24gaCh0KXt2YXIgZT10LmNoaWxkcmVuO2lmKGUmJmUubGVuZ3RoKXt2YXIgcixuLGksYT1vKHQpLHM9W10sYz1lLnNsaWNlKCksZj0xLzAsZz1cInNsaWNlXCI9PT1sP2EuZHg6XCJkaWNlXCI9PT1sP2EuZHk6XCJzbGljZS1kaWNlXCI9PT1sPzEmdC5kZXB0aD9hLmR5OmEuZHg6TWF0aC5taW4oYS5keCxhLmR5KTtmb3IodShjLGEuZHgqYS5keS90LnZhbHVlKSxzLmFyZWE9MDsoaT1jLmxlbmd0aCk+MDspcy5wdXNoKHI9Y1tpLTFdKSxzLmFyZWErPXIuYXJlYSxcInNxdWFyaWZ5XCIhPT1sfHwobj1wKHMsZykpPD1mPyhjLnBvcCgpLGY9bik6KHMuYXJlYS09cy5wb3AoKS5hcmVhLGQocyxnLGEsITEpLGc9TWF0aC5taW4oYS5keCxhLmR5KSxzLmxlbmd0aD1zLmFyZWE9MCxmPTEvMCk7cy5sZW5ndGgmJihkKHMsZyxhLCEwKSxzLmxlbmd0aD1zLmFyZWE9MCksZS5mb3JFYWNoKGgpfX1mdW5jdGlvbiBmKHQpe3ZhciBlPXQuY2hpbGRyZW47aWYoZSYmZS5sZW5ndGgpe3ZhciByLG49byh0KSxpPWUuc2xpY2UoKSxhPVtdO2Zvcih1KGksbi5keCpuLmR5L3QudmFsdWUpLGEuYXJlYT0wO3I9aS5wb3AoKTspYS5wdXNoKHIpLGEuYXJlYSs9ci5hcmVhLG51bGwhPXIueiYmKGQoYSxyLno/bi5keDpuLmR5LG4sIWkubGVuZ3RoKSxhLmxlbmd0aD1hLmFyZWE9MCk7ZS5mb3JFYWNoKGYpfX1mdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByLG49dC5hcmVhLGk9MCxhPTEvMCxvPS0xLHM9dC5sZW5ndGg7KytvPHM7KShyPXRbb10uYXJlYSkmJihyPGEmJihhPXIpLHI+aSYmKGk9cikpO3JldHVybiBlKj1lLChuKj1uKT9NYXRoLm1heChlKmkqYy9uLG4vKGUqYSpjKSk6MS8wfWZ1bmN0aW9uIGQodCxlLHIsaSl7dmFyIGEsbz0tMSxzPXQubGVuZ3RoLGw9ci54LGM9ci55LHU9ZT9uKHQuYXJlYS9lKTowO2lmKGU9PXIuZHgpe2ZvcigoaXx8dT5yLmR5KSYmKHU9ci5keSk7KytvPHM7KShhPXRbb10pLng9bCxhLnk9YyxhLmR5PXUsbCs9YS5keD1NYXRoLm1pbihyLngrci5keC1sLHU/bihhLmFyZWEvdSk6MCk7YS56PSEwLGEuZHgrPXIueCtyLmR4LWwsci55Kz11LHIuZHktPXV9ZWxzZXtmb3IoKGl8fHU+ci5keCkmJih1PXIuZHgpOysrbzxzOykoYT10W29dKS54PWwsYS55PWMsYS5keD11LGMrPWEuZHk9TWF0aC5taW4oci55K3IuZHktYyx1P24oYS5hcmVhL3UpOjApO2Euej0hMSxhLmR5Kz1yLnkrci5keS1jLHIueCs9dSxyLmR4LT11fX1mdW5jdGlvbiBnKHQpe3ZhciBuPWV8fHIodCksYT1uWzBdO3JldHVybiBhLng9YS55PTAsYS52YWx1ZT8oYS5keD1pWzBdLGEuZHk9aVsxXSk6YS5keD1hLmR5PTAsZSYmci5yZXZhbHVlKGEpLHUoW2FdLGEuZHgqYS5keS9hLnZhbHVlKSwoZT9mOmgpKGEpLHMmJihlPW4pLG59cmV0dXJuIGcuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGcpOml9LGcucGFkZGluZz1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYTtmdW5jdGlvbiBlKGUpe3JldHVybiBsbyhlLHQpfXZhciByO3JldHVybiBvPW51bGw9PShhPXQpP3NvOlwiZnVuY3Rpb25cIj09KHI9dHlwZW9mIHQpP2Z1bmN0aW9uKGUpe3ZhciByPXQuY2FsbChnLGUsZS5kZXB0aCk7cmV0dXJuIG51bGw9PXI/c28oZSk6bG8oZSxcIm51bWJlclwiPT10eXBlb2Ygcj9bcixyLHIscl06cil9OlwibnVtYmVyXCI9PT1yPyh0PVt0LHQsdCx0XSxlKTplLGd9LGcucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dD9NYXRoLnJvdW5kOk51bWJlcixnKTpuIT1OdW1iZXJ9LGcuc3RpY2t5PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsZT1udWxsLGcpOnN9LGcucmF0aW89ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCxnKTpjfSxnLm1vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCtcIlwiLGcpOmx9LFNhKGcscil9LHQucmFuZG9tPXtub3JtYWw6ZnVuY3Rpb24odCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoO3JldHVybiByPDImJihlPTEpLHI8MSYmKHQ9MCksZnVuY3Rpb24oKXt2YXIgcixuLGk7ZG97aT0ocj0yKk1hdGgucmFuZG9tKCktMSkqcisobj0yKk1hdGgucmFuZG9tKCktMSkqbn13aGlsZSghaXx8aT4xKTtyZXR1cm4gdCtlKnIqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGkpL2kpfX0sbG9nTm9ybWFsOmZ1bmN0aW9uKCl7dmFyIGU9dC5yYW5kb20ubm9ybWFsLmFwcGx5KHQsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAoZSgpKX19LGJhdGVzOmZ1bmN0aW9uKGUpe3ZhciByPXQucmFuZG9tLmlyd2luSGFsbChlKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcigpL2V9fSxpcndpbkhhbGw6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAscj0wO3I8dDtyKyspZSs9TWF0aC5yYW5kb20oKTtyZXR1cm4gZX19fSx0LnNjYWxlPXt9O3ZhciBnbz17Zmxvb3I6eixjZWlsOnp9O2Z1bmN0aW9uIHZvKGUscixuLGkpe3ZhciBhPVtdLG89W10scz0wLGw9TWF0aC5taW4oZS5sZW5ndGgsci5sZW5ndGgpLTE7Zm9yKGVbbF08ZVswXSYmKGU9ZS5zbGljZSgpLnJldmVyc2UoKSxyPXIuc2xpY2UoKS5yZXZlcnNlKCkpOysrczw9bDspYS5wdXNoKG4oZVtzLTFdLGVbc10pKSxvLnB1c2goaShyW3MtMV0scltzXSkpO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj10LmJpc2VjdChlLHIsMSxsKS0xO3JldHVybiBvW25dKGFbbl0ocikpfX1mdW5jdGlvbiBtbyhlLHIpe3JldHVybiB0LnJlYmluZChlLHIsXCJyYW5nZVwiLFwicmFuZ2VSb3VuZFwiLFwiaW50ZXJwb2xhdGVcIixcImNsYW1wXCIpfWZ1bmN0aW9uIHlvKHQsZSl7cmV0dXJuIGZvKHQscG8oeG8odCxlKVsyXSkpLGZvKHQscG8oeG8odCxlKVsyXSkpLHR9ZnVuY3Rpb24geG8odCxlKXtudWxsPT1lJiYoZT0xMCk7dmFyIHI9Y28odCksbj1yWzFdLXJbMF0saT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKG4vZSkvTWF0aC5MTjEwKSksYT1lL24qaTtyZXR1cm4gYTw9LjE1P2kqPTEwOmE8PS4zNT9pKj01OmE8PS43NSYmKGkqPTIpLHJbMF09TWF0aC5jZWlsKHJbMF0vaSkqaSxyWzFdPU1hdGguZmxvb3IoclsxXS9pKSppKy41KmksclsyXT1pLHJ9ZnVuY3Rpb24gYm8oZSxyKXtyZXR1cm4gdC5yYW5nZS5hcHBseSh0LHhvKGUscikpfWZ1bmN0aW9uIF9vKGUscixuKXt2YXIgaT14byhlLHIpO2lmKG4pe3ZhciBhPUxlLmV4ZWMobik7aWYoYS5zaGlmdCgpLFwic1wiPT09YVs4XSl7dmFyIG89dC5mb3JtYXRQcmVmaXgoTWF0aC5tYXgoeShpWzBdKSx5KGlbMV0pKSk7cmV0dXJuIGFbN118fChhWzddPVwiLlwiK2tvKG8uc2NhbGUoaVsyXSkpKSxhWzhdPVwiZlwiLG49dC5mb3JtYXQoYS5qb2luKFwiXCIpKSxmdW5jdGlvbih0KXtyZXR1cm4gbihvLnNjYWxlKHQpKStvLnN5bWJvbH19YVs3XXx8KGFbN109XCIuXCIrZnVuY3Rpb24odCxlKXt2YXIgcj1rbyhlWzJdKTtyZXR1cm4gdCBpbiB3bz9NYXRoLmFicyhyLWtvKE1hdGgubWF4KHkoZVswXSkseShlWzFdKSkpKSsgKyhcImVcIiE9PXQpOnItMiooXCIlXCI9PT10KX0oYVs4XSxpKSksbj1hLmpvaW4oXCJcIil9ZWxzZSBuPVwiLC5cIitrbyhpWzJdKStcImZcIjtyZXR1cm4gdC5mb3JtYXQobil9dC5zY2FsZS5saW5lYXI9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgYSxvO2Z1bmN0aW9uIHMoKXt2YXIgdD1NYXRoLm1pbihlLmxlbmd0aCxyLmxlbmd0aCk+Mj92bzpobyxzPWk/bWE6dmE7cmV0dXJuIGE9dChlLHIscyxuKSxvPXQocixlLHMsWmkpLGx9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gYSh0KX1sLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gbyh0KX07bC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dC5tYXAoTnVtYmVyKSxzKCkpOmV9O2wucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxzKCkpOnJ9O2wucmFuZ2VSb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gbC5yYW5nZSh0KS5pbnRlcnBvbGF0ZShjYSl9O2wuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxzKCkpOml9O2wuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxzKCkpOm59O2wudGlja3M9ZnVuY3Rpb24odCl7cmV0dXJuIGJvKGUsdCl9O2wudGlja0Zvcm1hdD1mdW5jdGlvbih0LHIpe3JldHVybiBfbyhlLHQscil9O2wubmljZT1mdW5jdGlvbih0KXtyZXR1cm4geW8oZSx0KSxzKCl9O2wuY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUscixuLGkpfTtyZXR1cm4gcygpfShbMCwxXSxbMCwxXSxaaSwhMSl9O3ZhciB3bz17czoxLGc6MSxwOjEscjoxLGU6MX07ZnVuY3Rpb24ga28odCl7cmV0dXJuLU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjEwKy4wMSl9dC5zY2FsZS5sb2c9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZShyLG4saSxhKXtmdW5jdGlvbiBvKHQpe3JldHVybihpP01hdGgubG9nKHQ8MD8wOnQpOi1NYXRoLmxvZyh0PjA/MDotdCkpL01hdGgubG9nKG4pfWZ1bmN0aW9uIHModCl7cmV0dXJuIGk/TWF0aC5wb3cobix0KTotTWF0aC5wb3cobiwtdCl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gcihvKHQpKX1sLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gcyhyLmludmVydCh0KSl9O2wuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXRbMF0+PTAsci5kb21haW4oKGE9dC5tYXAoTnVtYmVyKSkubWFwKG8pKSxsKTphfTtsLmJhc2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3Qsci5kb21haW4oYS5tYXAobykpLGwpOm59O2wubmljZT1mdW5jdGlvbigpe3ZhciB0PWZvKGEubWFwKG8pLGk/TWF0aDpUbyk7cmV0dXJuIHIuZG9tYWluKHQpLGE9dC5tYXAocyksbH07bC50aWNrcz1mdW5jdGlvbigpe3ZhciB0PWNvKGEpLGU9W10scj10WzBdLGw9dFsxXSxjPU1hdGguZmxvb3IobyhyKSksdT1NYXRoLmNlaWwobyhsKSksaD1uJTE/MjpuO2lmKGlzRmluaXRlKHUtYykpe2lmKGkpe2Zvcig7Yzx1O2MrKylmb3IodmFyIGY9MTtmPGg7ZisrKWUucHVzaChzKGMpKmYpO2UucHVzaChzKGMpKX1lbHNlIGZvcihlLnB1c2gocyhjKSk7YysrPHU7KWZvcih2YXIgZj1oLTE7Zj4wO2YtLSllLnB1c2gocyhjKSpmKTtmb3IoYz0wO2VbY108cjtjKyspO2Zvcih1PWUubGVuZ3RoO2VbdS0xXT5sO3UtLSk7ZT1lLnNsaWNlKGMsdSl9cmV0dXJuIGV9O2wudGlja0Zvcm1hdD1mdW5jdGlvbihlLHIpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBBbzthcmd1bWVudHMubGVuZ3RoPDI/cj1BbzpcImZ1bmN0aW9uXCIhPXR5cGVvZiByJiYocj10LmZvcm1hdChyKSk7dmFyIGk9TWF0aC5tYXgoMSxuKmUvbC50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQvcyhNYXRoLnJvdW5kKG8odCkpKTtyZXR1cm4gZSpuPG4tLjUmJihlKj1uKSxlPD1pP3IodCk6XCJcIn19O2wuY29weT1mdW5jdGlvbigpe3JldHVybiBlKHIuY29weSgpLG4saSxhKX07cmV0dXJuIG1vKGwscil9KHQuc2NhbGUubGluZWFyKCkuZG9tYWluKFswLDFdKSwxMCwhMCxbMSwxMF0pfTt2YXIgQW89dC5mb3JtYXQoXCIuMGVcIiksVG89e2Zsb29yOmZ1bmN0aW9uKHQpe3JldHVybi1NYXRoLmNlaWwoLXQpfSxjZWlsOmZ1bmN0aW9uKHQpe3JldHVybi1NYXRoLmZsb29yKC10KX19O2Z1bmN0aW9uIE1vKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZTwwPy1NYXRoLnBvdygtZSx0KTpNYXRoLnBvdyhlLHQpfX10LnNjYWxlLnBvdz1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUscixuKXt2YXIgaT1NbyhyKSxhPU1vKDEvcik7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZShpKHQpKX1vLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gYShlLmludmVydCh0KSl9O28uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlLmRvbWFpbigobj10Lm1hcChOdW1iZXIpKS5tYXAoaSkpLG8pOm59O28udGlja3M9ZnVuY3Rpb24odCl7cmV0dXJuIGJvKG4sdCl9O28udGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVybiBfbyhuLHQsZSl9O28ubmljZT1mdW5jdGlvbih0KXtyZXR1cm4gby5kb21haW4oeW8obix0KSl9O28uZXhwb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9TW8ocj10KSxhPU1vKDEvciksZS5kb21haW4obi5tYXAoaSkpLG8pOnJ9O28uY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUuY29weSgpLHIsbil9O3JldHVybiBtbyhvLGUpfSh0LnNjYWxlLmxpbmVhcigpLDEsWzAsMV0pfSx0LnNjYWxlLnNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zY2FsZS5wb3coKS5leHBvbmVudCguNSl9LHQuc2NhbGUub3JkaW5hbD1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHIsbil7dmFyIGksYSxvO2Z1bmN0aW9uIHModCl7cmV0dXJuIGFbKChpLmdldCh0KXx8KFwicmFuZ2VcIj09PW4udD9pLnNldCh0LHIucHVzaCh0KSk6TmFOKSktMSklYS5sZW5ndGhdfWZ1bmN0aW9uIGwoZSxuKXtyZXR1cm4gdC5yYW5nZShyLmxlbmd0aCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlK24qdH0pfXMuZG9tYWluPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByO3I9W10saT1uZXcgYjtmb3IodmFyIGUsYT0tMSxvPXQubGVuZ3RoOysrYTxvOylpLmhhcyhlPXRbYV0pfHxpLnNldChlLHIucHVzaChlKSk7cmV0dXJuIHNbbi50XS5hcHBseShzLG4uYSl9O3MucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxvPTAsbj17dDpcInJhbmdlXCIsYTphcmd1bWVudHN9LHMpOmF9O3MucmFuZ2VQb2ludHM9ZnVuY3Rpb24odCxlKXthcmd1bWVudHMubGVuZ3RoPDImJihlPTApO3ZhciBpPXRbMF0sYz10WzFdLHU9ci5sZW5ndGg8Mj8oaT0oaStjKS8yLDApOihjLWkpLyhyLmxlbmd0aC0xK2UpO3JldHVybiBhPWwoaSt1KmUvMix1KSxvPTAsbj17dDpcInJhbmdlUG9pbnRzXCIsYTphcmd1bWVudHN9LHN9O3MucmFuZ2VSb3VuZFBvaW50cz1mdW5jdGlvbih0LGUpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9MCk7dmFyIGk9dFswXSxjPXRbMV0sdT1yLmxlbmd0aDwyPyhpPWM9TWF0aC5yb3VuZCgoaStjKS8yKSwwKTooYy1pKS8oci5sZW5ndGgtMStlKXwwO3JldHVybiBhPWwoaStNYXRoLnJvdW5kKHUqZS8yKyhjLWktKHIubGVuZ3RoLTErZSkqdSkvMiksdSksbz0wLG49e3Q6XCJyYW5nZVJvdW5kUG9pbnRzXCIsYTphcmd1bWVudHN9LHN9O3MucmFuZ2VCYW5kcz1mdW5jdGlvbih0LGUsaSl7YXJndW1lbnRzLmxlbmd0aDwyJiYoZT0wKSxhcmd1bWVudHMubGVuZ3RoPDMmJihpPWUpO3ZhciBjPXRbMV08dFswXSx1PXRbYy0wXSxoPXRbMS1jXSxmPShoLXUpLyhyLmxlbmd0aC1lKzIqaSk7cmV0dXJuIGE9bCh1K2YqaSxmKSxjJiZhLnJldmVyc2UoKSxvPWYqKDEtZSksbj17dDpcInJhbmdlQmFuZHNcIixhOmFyZ3VtZW50c30sc307cy5yYW5nZVJvdW5kQmFuZHM9ZnVuY3Rpb24odCxlLGkpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9MCksYXJndW1lbnRzLmxlbmd0aDwzJiYoaT1lKTt2YXIgYz10WzFdPHRbMF0sdT10W2MtMF0saD10WzEtY10sZj1NYXRoLmZsb29yKChoLXUpLyhyLmxlbmd0aC1lKzIqaSkpO3JldHVybiBhPWwodStNYXRoLnJvdW5kKChoLXUtKHIubGVuZ3RoLWUpKmYpLzIpLGYpLGMmJmEucmV2ZXJzZSgpLG89TWF0aC5yb3VuZChmKigxLWUpKSxuPXt0OlwicmFuZ2VSb3VuZEJhbmRzXCIsYTphcmd1bWVudHN9LHN9O3MucmFuZ2VCYW5kPWZ1bmN0aW9uKCl7cmV0dXJuIG99O3MucmFuZ2VFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gY28obi5hWzBdKX07cy5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGUocixuKX07cmV0dXJuIHMuZG9tYWluKHIpfShbXSx7dDpcInJhbmdlXCIsYTpbW11dfSl9LHQuc2NhbGUuY2F0ZWdvcnkxMD1mdW5jdGlvbigpe3JldHVybiB0LnNjYWxlLm9yZGluYWwoKS5yYW5nZShTbyl9LHQuc2NhbGUuY2F0ZWdvcnkyMD1mdW5jdGlvbigpe3JldHVybiB0LnNjYWxlLm9yZGluYWwoKS5yYW5nZShFbyl9LHQuc2NhbGUuY2F0ZWdvcnkyMGI9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoQ28pfSx0LnNjYWxlLmNhdGVnb3J5MjBjPWZ1bmN0aW9uKCl7cmV0dXJuIHQuc2NhbGUub3JkaW5hbCgpLnJhbmdlKExvKX07dmFyIFNvPVsyMDYyMjYwLDE2NzQ0MjA2LDI5MjQ1ODgsMTQwMzQ3MjgsOTcyNTg4NSw5MTk3MTMxLDE0OTA3MzMwLDgzNTU3MTEsMTIzNjkxODYsMTU1NjE3NV0ubWFwKHNlKSxFbz1bMjA2MjI2MCwxMTQ1NDQ0MCwxNjc0NDIwNiwxNjc1OTY3MiwyOTI0NTg4LDEwMDE4Njk4LDE0MDM0NzI4LDE2NzUwNzQyLDk3MjU4ODUsMTI5NTU4NjEsOTE5NzEzMSwxMjg4NTE0MCwxNDkwNzMzMCwxNjIzNDE5NCw4MzU1NzExLDEzMDkyODA3LDEyMzY5MTg2LDE0NDA4NTg5LDE1NTYxNzUsMTA0MTA3MjVdLm1hcChzZSksQ289WzM3NTA3NzcsNTM5NTYxOSw3MDQwNzE5LDEwMjY0Mjg2LDY1MTkwOTcsOTIxNjU5NCwxMTkxNTExNSwxMzU1NjYzNiw5MjAyOTkzLDEyNDI2ODA5LDE1MTg2NTE0LDE1MTkwOTMyLDg2NjYxNjksMTEzNTY0OTAsMTQwNDk2NDMsMTUxNzczNzIsODA3NzY4MywxMDgzNDMyNCwxMzUyODUwOSwxNDU4OTY1NF0ubWFwKHNlKSxMbz1bMzI0NDczMyw3MDU3MTEwLDEwNDA2NjI1LDEzMDMyNDMxLDE1MDk1MDUzLDE2NjE2NzY0LDE2NjI1MjU5LDE2NjM0MDE4LDMyNTMwNzYsNzY1MjQ3MCwxMDYwNzAwMywxMzEwMTUwNCw3Njk1MjgxLDEwMzk0MzEyLDEyMzY5MzcyLDE0MzQyODkxLDY1MTM1MDcsOTg2ODk1MCwxMjQzNDg3NywxNDI3NzA4MV0ubWFwKHNlKTtmdW5jdGlvbiB6bygpe3JldHVybiAwfXQuc2NhbGUucXVhbnRpbGU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZShyLG4pe3ZhciBpO2Z1bmN0aW9uIGEoKXt2YXIgZT0wLGE9bi5sZW5ndGg7Zm9yKGk9W107KytlPGE7KWlbZS0xXT10LnF1YW50aWxlKHIsZS9hKTtyZXR1cm4gb31mdW5jdGlvbiBvKGUpe2lmKCFpc05hTihlPStlKSlyZXR1cm4gblt0LmJpc2VjdChpLGUpXX1vLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10Lm1hcChwKS5maWx0ZXIoZCkuc29ydChmKSxhKCkpOnJ9O28ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxhKCkpOm59O28ucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGl9O28uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybih0PW4uaW5kZXhPZih0KSk8MD9bTmFOLE5hTl06W3Q+MD9pW3QtMV06clswXSx0PGkubGVuZ3RoP2lbdF06cltyLmxlbmd0aC0xXV19O28uY29weT1mdW5jdGlvbigpe3JldHVybiBlKHIsbil9O3JldHVybiBhKCl9KFtdLFtdKX0sdC5zY2FsZS5xdWFudGl6ZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUscixuKXt2YXIgaSxhO2Z1bmN0aW9uIG8odCl7cmV0dXJuIG5bTWF0aC5tYXgoMCxNYXRoLm1pbihhLE1hdGguZmxvb3IoaSoodC1lKSkpKV19ZnVuY3Rpb24gcygpe3JldHVybiBpPW4ubGVuZ3RoLyhyLWUpLGE9bi5sZW5ndGgtMSxvfW8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLHI9K3RbdC5sZW5ndGgtMV0scygpKTpbZSxyXX07by5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LHMoKSk6bn07by5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuW3Q9KHQ9bi5pbmRleE9mKHQpKTwwP05hTjp0L2krZSx0KzEvaV19O28uY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUscixuKX07cmV0dXJuIHMoKX0oMCwxLFswLDFdKX0sdC5zY2FsZS50aHJlc2hvbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZShyLG4pe2Z1bmN0aW9uIGkoZSl7aWYoZTw9ZSlyZXR1cm4gblt0LmJpc2VjdChyLGUpXX1pLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGkpOnJ9O2kucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxpKTpufTtpLmludmVydEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gdD1uLmluZGV4T2YodCksW3JbdC0xXSxyW3RdXX07aS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGUocixuKX07cmV0dXJuIGl9KFsuNV0sWzAsMV0pfSx0LnNjYWxlLmlkZW50aXR5PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4rdH1yLmludmVydD1yO3IuZG9tYWluPXIucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dC5tYXAocikscik6ZX07ci50aWNrcz1mdW5jdGlvbih0KXtyZXR1cm4gYm8oZSx0KX07ci50aWNrRm9ybWF0PWZ1bmN0aW9uKHQscil7cmV0dXJuIF9vKGUsdCxyKX07ci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoZSl9O3JldHVybiByfShbMCwxXSl9LHQuc3ZnPXt9LHQuc3ZnLmFyYz1mdW5jdGlvbigpe3ZhciB0PUlvLGU9RG8scj16byxuPU9vLGk9UG8sYT1SbyxvPUZvO2Z1bmN0aW9uIHMoKXt2YXIgcz1NYXRoLm1heCgwLCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYz1NYXRoLm1heCgwLCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksdT1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1FdCxoPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLUV0LGY9TWF0aC5hYnMoaC11KSxwPXU+aD8wOjE7aWYoYzxzJiYoZD1jLGM9cyxzPWQpLGY+PVN0KXJldHVybiBsKGMscCkrKHM/bChzLDEtcCk6XCJcIikrXCJaXCI7dmFyIGQsZyx2LG0seSx4LGIsXyx3LGssQSxULE09MCxTPTAsRT1bXTtpZigobT0oK28uYXBwbHkodGhpcyxhcmd1bWVudHMpfHwwKS8yKSYmKHY9bj09PU9vP01hdGguc3FydChzKnMrYypjKTorbi5hcHBseSh0aGlzLGFyZ3VtZW50cykscHx8KFMqPS0xKSxjJiYoUz1EdCh2L2MqTWF0aC5zaW4obSkpKSxzJiYoTT1EdCh2L3MqTWF0aC5zaW4obSkpKSksYyl7eT1jKk1hdGguY29zKHUrUykseD1jKk1hdGguc2luKHUrUyksYj1jKk1hdGguY29zKGgtUyksXz1jKk1hdGguc2luKGgtUyk7dmFyIEM9TWF0aC5hYnMoaC11LTIqUyk8PVR0PzA6MTtpZihTJiZCbyh5LHgsYixfKT09PXBeQyl7dmFyIEw9KHUraCkvMjt5PWMqTWF0aC5jb3MoTCkseD1jKk1hdGguc2luKEwpLGI9Xz1udWxsfX1lbHNlIHk9eD0wO2lmKHMpe3c9cypNYXRoLmNvcyhoLU0pLGs9cypNYXRoLnNpbihoLU0pLEE9cypNYXRoLmNvcyh1K00pLFQ9cypNYXRoLnNpbih1K00pO3ZhciB6PU1hdGguYWJzKHUtaCsyKk0pPD1UdD8wOjE7aWYoTSYmQm8odyxrLEEsVCk9PT0xLXBeeil7dmFyIE89KHUraCkvMjt3PXMqTWF0aC5jb3MoTyksaz1zKk1hdGguc2luKE8pLEE9VD1udWxsfX1lbHNlIHc9az0wO2lmKGY+a3QmJihkPU1hdGgubWluKE1hdGguYWJzKGMtcykvMiwrci5hcHBseSh0aGlzLGFyZ3VtZW50cykpKT4uMDAxKXtnPXM8Y15wPzA6MTt2YXIgST1kLEQ9ZDtpZihmPFR0KXt2YXIgUD1udWxsPT1BP1t3LGtdOm51bGw9PWI/W3kseF06c2koW3kseF0sW0EsVF0sW2IsX10sW3csa10pLFI9eS1QWzBdLEY9eC1QWzFdLEI9Yi1QWzBdLE49Xy1QWzFdLGo9MS9NYXRoLnNpbihNYXRoLmFjb3MoKFIqQitGKk4pLyhNYXRoLnNxcnQoUipSK0YqRikqTWF0aC5zcXJ0KEIqQitOKk4pKSkvMiksVj1NYXRoLnNxcnQoUFswXSpQWzBdK1BbMV0qUFsxXSk7RD1NYXRoLm1pbihkLChzLVYpLyhqLTEpKSxJPU1hdGgubWluKGQsKGMtVikvKGorMSkpfWlmKG51bGwhPWIpe3ZhciBVPU5vKG51bGw9PUE/W3csa106W0EsVF0sW3kseF0sYyxJLHApLHE9Tm8oW2IsX10sW3csa10sYyxJLHApO2Q9PT1JP0UucHVzaChcIk1cIixVWzBdLFwiQVwiLEksXCIsXCIsSSxcIiAwIDAsXCIsZyxcIiBcIixVWzFdLFwiQVwiLGMsXCIsXCIsYyxcIiAwIFwiLDEtcF5CbyhVWzFdWzBdLFVbMV1bMV0scVsxXVswXSxxWzFdWzFdKSxcIixcIixwLFwiIFwiLHFbMV0sXCJBXCIsSSxcIixcIixJLFwiIDAgMCxcIixnLFwiIFwiLHFbMF0pOkUucHVzaChcIk1cIixVWzBdLFwiQVwiLEksXCIsXCIsSSxcIiAwIDEsXCIsZyxcIiBcIixxWzBdKX1lbHNlIEUucHVzaChcIk1cIix5LFwiLFwiLHgpO2lmKG51bGwhPUEpe3ZhciBIPU5vKFt5LHhdLFtBLFRdLHMsLUQscCksRz1ObyhbdyxrXSxudWxsPT1iP1t5LHhdOltiLF9dLHMsLUQscCk7ZD09PUQ/RS5wdXNoKFwiTFwiLEdbMF0sXCJBXCIsRCxcIixcIixELFwiIDAgMCxcIixnLFwiIFwiLEdbMV0sXCJBXCIscyxcIixcIixzLFwiIDAgXCIscF5CbyhHWzFdWzBdLEdbMV1bMV0sSFsxXVswXSxIWzFdWzFdKSxcIixcIiwxLXAsXCIgXCIsSFsxXSxcIkFcIixELFwiLFwiLEQsXCIgMCAwLFwiLGcsXCIgXCIsSFswXSk6RS5wdXNoKFwiTFwiLEdbMF0sXCJBXCIsRCxcIixcIixELFwiIDAgMCxcIixnLFwiIFwiLEhbMF0pfWVsc2UgRS5wdXNoKFwiTFwiLHcsXCIsXCIsayl9ZWxzZSBFLnB1c2goXCJNXCIseSxcIixcIix4KSxudWxsIT1iJiZFLnB1c2goXCJBXCIsYyxcIixcIixjLFwiIDAgXCIsQyxcIixcIixwLFwiIFwiLGIsXCIsXCIsXyksRS5wdXNoKFwiTFwiLHcsXCIsXCIsayksbnVsbCE9QSYmRS5wdXNoKFwiQVwiLHMsXCIsXCIscyxcIiAwIFwiLHosXCIsXCIsMS1wLFwiIFwiLEEsXCIsXCIsVCk7cmV0dXJuIEUucHVzaChcIlpcIiksRS5qb2luKFwiXCIpfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm5cIk0wLFwiK3QrXCJBXCIrdCtcIixcIit0K1wiIDAgMSxcIitlK1wiIDAsXCIrLXQrXCJBXCIrdCtcIixcIit0K1wiIDAgMSxcIitlK1wiIDAsXCIrdH1yZXR1cm4gcy5pbm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD12ZShlKSxzKTp0fSxzLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXZlKHQpLHMpOmV9LHMuY29ybmVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXZlKHQpLHMpOnJ9LHMucGFkUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQ9PU9vP09vOnZlKHQpLHMpOm59LHMuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT12ZSh0KSxzKTppfSxzLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXZlKHQpLHMpOmF9LHMucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dmUodCkscyk6b30scy5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciByPSgrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMixuPSgraS5hcHBseSh0aGlzLGFyZ3VtZW50cykrICthLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi1FdDtyZXR1cm5bTWF0aC5jb3MobikqcixNYXRoLnNpbihuKSpyXX0sc307dmFyIE9vPVwiYXV0b1wiO2Z1bmN0aW9uIElvKHQpe3JldHVybiB0LmlubmVyUmFkaXVzfWZ1bmN0aW9uIERvKHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uIFBvKHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gUm8odCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24gRm8odCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gQm8odCxlLHIsbil7cmV0dXJuKHQtcikqZS0oZS1uKSp0PjA/MDoxfWZ1bmN0aW9uIE5vKHQsZSxyLG4saSl7dmFyIGE9dFswXS1lWzBdLG89dFsxXS1lWzFdLHM9KGk/bjotbikvTWF0aC5zcXJ0KGEqYStvKm8pLGw9cypvLGM9LXMqYSx1PXRbMF0rbCxoPXRbMV0rYyxmPWVbMF0rbCxwPWVbMV0rYyxkPSh1K2YpLzIsZz0oaCtwKS8yLHY9Zi11LG09cC1oLHk9dip2K20qbSx4PXItbixiPXUqcC1mKmgsXz0obTwwPy0xOjEpKk1hdGguc3FydChNYXRoLm1heCgwLHgqeCp5LWIqYikpLHc9KGIqbS12Kl8pL3ksaz0oLWIqdi1tKl8pL3ksQT0oYiptK3YqXykveSxUPSgtYip2K20qXykveSxNPXctZCxTPWstZyxFPUEtZCxDPVQtZztyZXR1cm4gTSpNK1MqUz5FKkUrQypDJiYodz1BLGs9VCksW1t3LWwsay1jXSxbdypyL3gsaypyL3hdXX1mdW5jdGlvbiBqbyh0KXt2YXIgZT1laSxyPXJpLG49WXIsaT1VbyxhPWkua2V5LG89Ljc7ZnVuY3Rpb24gcyhhKXt2YXIgcyxsPVtdLGM9W10sdT0tMSxoPWEubGVuZ3RoLGY9dmUoZSkscD12ZShyKTtmdW5jdGlvbiBkKCl7bC5wdXNoKFwiTVwiLGkodChjKSxvKSl9Zm9yKDsrK3U8aDspbi5jYWxsKHRoaXMscz1hW3VdLHUpP2MucHVzaChbK2YuY2FsbCh0aGlzLHMsdSksK3AuY2FsbCh0aGlzLHMsdSldKTpjLmxlbmd0aCYmKGQoKSxjPVtdKTtyZXR1cm4gYy5sZW5ndGgmJmQoKSxsLmxlbmd0aD9sLmpvaW4oXCJcIik6bnVsbH1yZXR1cm4gcy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQscyk6ZX0scy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQscyk6cn0scy5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQscyk6bn0scy5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2k9dDooaT1Wby5nZXQodCl8fFVvKS5rZXkscyk6YX0scy50ZW5zaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQscyk6b30sc310LnN2Zy5saW5lPWZ1bmN0aW9uKCl7cmV0dXJuIGpvKHopfTt2YXIgVm89dC5tYXAoe2xpbmVhcjpVbyxcImxpbmVhci1jbG9zZWRcIjpxbyxzdGVwOmZ1bmN0aW9uKHQpe3ZhciBlPTAscj10Lmxlbmd0aCxuPXRbMF0saT1bblswXSxcIixcIixuWzFdXTtmb3IoOysrZTxyOylpLnB1c2goXCJIXCIsKG5bMF0rKG49dFtlXSlbMF0pLzIsXCJWXCIsblsxXSk7cj4xJiZpLnB1c2goXCJIXCIsblswXSk7cmV0dXJuIGkuam9pbihcIlwiKX0sXCJzdGVwLWJlZm9yZVwiOkhvLFwic3RlcC1hZnRlclwiOkdvLGJhc2lzOlhvLFwiYmFzaXMtb3BlblwiOmZ1bmN0aW9uKHQpe2lmKHQubGVuZ3RoPDQpcmV0dXJuIFVvKHQpO3ZhciBlLHI9W10sbj0tMSxpPXQubGVuZ3RoLGE9WzBdLG89WzBdO2Zvcig7KytuPDM7KWU9dFtuXSxhLnB1c2goZVswXSksby5wdXNoKGVbMV0pO3IucHVzaChabyhLbyxhKStcIixcIitabyhLbyxvKSksLS1uO2Zvcig7KytuPGk7KWU9dFtuXSxhLnNoaWZ0KCksYS5wdXNoKGVbMF0pLG8uc2hpZnQoKSxvLnB1c2goZVsxXSksUW8ocixhLG8pO3JldHVybiByLmpvaW4oXCJcIil9LFwiYmFzaXMtY2xvc2VkXCI6ZnVuY3Rpb24odCl7dmFyIGUscixuPS0xLGk9dC5sZW5ndGgsYT1pKzQsbz1bXSxzPVtdO2Zvcig7KytuPDQ7KXI9dFtuJWldLG8ucHVzaChyWzBdKSxzLnB1c2goclsxXSk7ZT1bWm8oS28sbyksXCIsXCIsWm8oS28scyldLC0tbjtmb3IoOysrbjxhOylyPXRbbiVpXSxvLnNoaWZ0KCksby5wdXNoKHJbMF0pLHMuc2hpZnQoKSxzLnB1c2goclsxXSksUW8oZSxvLHMpO3JldHVybiBlLmpvaW4oXCJcIil9LGJ1bmRsZTpmdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoLTE7aWYocilmb3IodmFyIG4saSxhPXRbMF1bMF0sbz10WzBdWzFdLHM9dFtyXVswXS1hLGw9dFtyXVsxXS1vLGM9LTE7KytjPD1yOyluPXRbY10saT1jL3IsblswXT1lKm5bMF0rKDEtZSkqKGEraSpzKSxuWzFdPWUqblsxXSsoMS1lKSoobytpKmwpO3JldHVybiBYbyh0KX0sY2FyZGluYWw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGg8Mz9Vbyh0KTp0WzBdK1lvKHQsV28odCxlKSl9LFwiY2FyZGluYWwtb3BlblwiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoPDQ/VW8odCk6dFsxXStZbyh0LnNsaWNlKDEsLTEpLFdvKHQsZSkpfSxcImNhcmRpbmFsLWNsb3NlZFwiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoPDM/cW8odCk6dFswXStZbygodC5wdXNoKHRbMF0pLHQpLFdvKFt0W3QubGVuZ3RoLTJdXS5jb25jYXQodCxbdFsxXV0pLGUpKX0sbW9ub3RvbmU6ZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RoPDM/VW8odCk6dFswXStZbyh0LGZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9W10sbz1mdW5jdGlvbih0KXt2YXIgZT0wLHI9dC5sZW5ndGgtMSxuPVtdLGk9dFswXSxhPXRbMV0sbz1uWzBdPXRzKGksYSk7Zm9yKDsrK2U8cjspbltlXT0obysobz10cyhpPWEsYT10W2UrMV0pKSkvMjtyZXR1cm4gbltlXT1vLG59KHQpLHM9LTEsbD10Lmxlbmd0aC0xO2Zvcig7KytzPGw7KWU9dHModFtzXSx0W3MrMV0pLHkoZSk8a3Q/b1tzXT1vW3MrMV09MDoocj1vW3NdL2Usbj1vW3MrMV0vZSwoaT1yKnIrbipuKT45JiYoaT0zKmUvTWF0aC5zcXJ0KGkpLG9bc109aSpyLG9bcysxXT1pKm4pKTtzPS0xO2Zvcig7KytzPD1sOylpPSh0W01hdGgubWluKGwscysxKV1bMF0tdFtNYXRoLm1heCgwLHMtMSldWzBdKS8oNiooMStvW3NdKm9bc10pKSxhLnB1c2goW2l8fDAsb1tzXSppfHwwXSk7cmV0dXJuIGF9KHQpKX19KTtmdW5jdGlvbiBVbyh0KXtyZXR1cm4gdC5sZW5ndGg+MT90LmpvaW4oXCJMXCIpOnQrXCJaXCJ9ZnVuY3Rpb24gcW8odCl7cmV0dXJuIHQuam9pbihcIkxcIikrXCJaXCJ9ZnVuY3Rpb24gSG8odCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aCxuPXRbMF0saT1bblswXSxcIixcIixuWzFdXTsrK2U8cjspaS5wdXNoKFwiVlwiLChuPXRbZV0pWzFdLFwiSFwiLG5bMF0pO3JldHVybiBpLmpvaW4oXCJcIil9ZnVuY3Rpb24gR28odCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aCxuPXRbMF0saT1bblswXSxcIixcIixuWzFdXTsrK2U8cjspaS5wdXNoKFwiSFwiLChuPXRbZV0pWzBdLFwiVlwiLG5bMV0pO3JldHVybiBpLmpvaW4oXCJcIil9ZnVuY3Rpb24gWW8odCxlKXtpZihlLmxlbmd0aDwxfHx0Lmxlbmd0aCE9ZS5sZW5ndGgmJnQubGVuZ3RoIT1lLmxlbmd0aCsyKXJldHVybiBVbyh0KTt2YXIgcj10Lmxlbmd0aCE9ZS5sZW5ndGgsbj1cIlwiLGk9dFswXSxhPXRbMV0sbz1lWzBdLHM9byxsPTE7aWYociYmKG4rPVwiUVwiKyhhWzBdLTIqb1swXS8zKStcIixcIisoYVsxXS0yKm9bMV0vMykrXCIsXCIrYVswXStcIixcIithWzFdLGk9dFsxXSxsPTIpLGUubGVuZ3RoPjEpe3M9ZVsxXSxhPXRbbF0sbCsrLG4rPVwiQ1wiKyhpWzBdK29bMF0pK1wiLFwiKyhpWzFdK29bMV0pK1wiLFwiKyhhWzBdLXNbMF0pK1wiLFwiKyhhWzFdLXNbMV0pK1wiLFwiK2FbMF0rXCIsXCIrYVsxXTtmb3IodmFyIGM9MjtjPGUubGVuZ3RoO2MrKyxsKyspYT10W2xdLHM9ZVtjXSxuKz1cIlNcIisoYVswXS1zWzBdKStcIixcIisoYVsxXS1zWzFdKStcIixcIithWzBdK1wiLFwiK2FbMV19aWYocil7dmFyIHU9dFtsXTtuKz1cIlFcIisoYVswXSsyKnNbMF0vMykrXCIsXCIrKGFbMV0rMipzWzFdLzMpK1wiLFwiK3VbMF0rXCIsXCIrdVsxXX1yZXR1cm4gbn1mdW5jdGlvbiBXbyh0LGUpe2Zvcih2YXIgcixuPVtdLGk9KDEtZSkvMixhPXRbMF0sbz10WzFdLHM9MSxsPXQubGVuZ3RoOysrczxsOylyPWEsYT1vLG89dFtzXSxuLnB1c2goW2kqKG9bMF0tclswXSksaSoob1sxXS1yWzFdKV0pO3JldHVybiBufWZ1bmN0aW9uIFhvKHQpe2lmKHQubGVuZ3RoPDMpcmV0dXJuIFVvKHQpO3ZhciBlPTEscj10Lmxlbmd0aCxuPXRbMF0saT1uWzBdLGE9blsxXSxvPVtpLGksaSwobj10WzFdKVswXV0scz1bYSxhLGEsblsxXV0sbD1baSxcIixcIixhLFwiTFwiLFpvKEtvLG8pLFwiLFwiLFpvKEtvLHMpXTtmb3IodC5wdXNoKHRbci0xXSk7KytlPD1yOyluPXRbZV0sby5zaGlmdCgpLG8ucHVzaChuWzBdKSxzLnNoaWZ0KCkscy5wdXNoKG5bMV0pLFFvKGwsbyxzKTtyZXR1cm4gdC5wb3AoKSxsLnB1c2goXCJMXCIsbiksbC5qb2luKFwiXCIpfWZ1bmN0aW9uIFpvKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdK3RbM10qZVszXX1Wby5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7ZS5rZXk9dCxlLmNsb3NlZD0vLWNsb3NlZCQvLnRlc3QodCl9KTt2YXIgJG89WzAsMi8zLDEvMywwXSxKbz1bMCwxLzMsMi8zLDBdLEtvPVswLDEvNiwyLzMsMS82XTtmdW5jdGlvbiBRbyh0LGUscil7dC5wdXNoKFwiQ1wiLFpvKCRvLGUpLFwiLFwiLFpvKCRvLHIpLFwiLFwiLFpvKEpvLGUpLFwiLFwiLFpvKEpvLHIpLFwiLFwiLFpvKEtvLGUpLFwiLFwiLFpvKEtvLHIpKX1mdW5jdGlvbiB0cyh0LGUpe3JldHVybihlWzFdLXRbMV0pLyhlWzBdLXRbMF0pfWZ1bmN0aW9uIGVzKHQpe2Zvcih2YXIgZSxyLG4saT0tMSxhPXQubGVuZ3RoOysraTxhOylyPShlPXRbaV0pWzBdLG49ZVsxXS1FdCxlWzBdPXIqTWF0aC5jb3MobiksZVsxXT1yKk1hdGguc2luKG4pO3JldHVybiB0fWZ1bmN0aW9uIHJzKHQpe3ZhciBlPWVpLHI9ZWksbj0wLGk9cmksYT1ZcixvPVVvLHM9by5rZXksbD1vLGM9XCJMXCIsdT0uNztmdW5jdGlvbiBoKHMpe3ZhciBoLGYscCxkPVtdLGc9W10sdj1bXSxtPS0xLHk9cy5sZW5ndGgseD12ZShlKSxiPXZlKG4pLF89ZT09PXI/ZnVuY3Rpb24oKXtyZXR1cm4gZn06dmUociksdz1uPT09aT9mdW5jdGlvbigpe3JldHVybiBwfTp2ZShpKTtmdW5jdGlvbiBrKCl7ZC5wdXNoKFwiTVwiLG8odCh2KSx1KSxjLGwodChnLnJldmVyc2UoKSksdSksXCJaXCIpfWZvcig7KyttPHk7KWEuY2FsbCh0aGlzLGg9c1ttXSxtKT8oZy5wdXNoKFtmPSt4LmNhbGwodGhpcyxoLG0pLHA9K2IuY2FsbCh0aGlzLGgsbSldKSx2LnB1c2goWytfLmNhbGwodGhpcyxoLG0pLCt3LmNhbGwodGhpcyxoLG0pXSkpOmcubGVuZ3RoJiYoaygpLGc9W10sdj1bXSk7cmV0dXJuIGcubGVuZ3RoJiZrKCksZC5sZW5ndGg/ZC5qb2luKFwiXCIpOm51bGx9cmV0dXJuIGgueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1yPXQsaCk6cn0saC54MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LGgpOmV9LGgueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxoKTpyfSxoLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49aT10LGgpOml9LGgueTA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxoKTpufSxoLnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsaCk6aX0saC5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsaCk6YX0saC5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P289dDoobz1Wby5nZXQodCl8fFVvKS5rZXksbD1vLnJldmVyc2V8fG8sYz1vLmNsb3NlZD9cIk1cIjpcIkxcIixoKTpzfSxoLnRlbnNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxoKTp1fSxofWZ1bmN0aW9uIG5zKHQpe3JldHVybiB0LnJhZGl1c31mdW5jdGlvbiBpcyh0KXtyZXR1cm5bdC54LHQueV19ZnVuY3Rpb24gYXMoKXtyZXR1cm4gNjR9ZnVuY3Rpb24gb3MoKXtyZXR1cm5cImNpcmNsZVwifWZ1bmN0aW9uIHNzKHQpe3ZhciBlPU1hdGguc3FydCh0L1R0KTtyZXR1cm5cIk0wLFwiK2UrXCJBXCIrZStcIixcIitlK1wiIDAgMSwxIDAsXCIrLWUrXCJBXCIrZStcIixcIitlK1wiIDAgMSwxIDAsXCIrZStcIlpcIn10LnN2Zy5saW5lLnJhZGlhbD1mdW5jdGlvbigpe3ZhciB0PWpvKGVzKTtyZXR1cm4gdC5yYWRpdXM9dC54LGRlbGV0ZSB0LngsdC5hbmdsZT10LnksZGVsZXRlIHQueSx0fSxIby5yZXZlcnNlPUdvLEdvLnJldmVyc2U9SG8sdC5zdmcuYXJlYT1mdW5jdGlvbigpe3JldHVybiBycyh6KX0sdC5zdmcuYXJlYS5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgdD1ycyhlcyk7cmV0dXJuIHQucmFkaXVzPXQueCxkZWxldGUgdC54LHQuaW5uZXJSYWRpdXM9dC54MCxkZWxldGUgdC54MCx0Lm91dGVyUmFkaXVzPXQueDEsZGVsZXRlIHQueDEsdC5hbmdsZT10LnksZGVsZXRlIHQueSx0LnN0YXJ0QW5nbGU9dC55MCxkZWxldGUgdC55MCx0LmVuZEFuZ2xlPXQueTEsZGVsZXRlIHQueTEsdH0sdC5zdmcuY2hvcmQ9ZnVuY3Rpb24oKXt2YXIgdD1WbixlPVVuLHI9bnMsbj1QbyxpPVJvO2Z1bmN0aW9uIGEocixuKXt2YXIgaSxhLGM9byh0aGlzLHQscixuKSx1PW8odGhpcyxlLHIsbik7cmV0dXJuXCJNXCIrYy5wMCtzKGMucixjLnAxLGMuYTEtYy5hMCkrKGE9dSwoaT1jKS5hMD09YS5hMCYmaS5hMT09YS5hMT9sKGMucixjLnAxLGMucixjLnAwKTpsKGMucixjLnAxLHUucix1LnAwKStzKHUucix1LnAxLHUuYTEtdS5hMCkrbCh1LnIsdS5wMSxjLnIsYy5wMCkpK1wiWlwifWZ1bmN0aW9uIG8odCxlLGEsbyl7dmFyIHM9ZS5jYWxsKHQsYSxvKSxsPXIuY2FsbCh0LHMsbyksYz1uLmNhbGwodCxzLG8pLUV0LHU9aS5jYWxsKHQscyxvKS1FdDtyZXR1cm57cjpsLGEwOmMsYTE6dSxwMDpbbCpNYXRoLmNvcyhjKSxsKk1hdGguc2luKGMpXSxwMTpbbCpNYXRoLmNvcyh1KSxsKk1hdGguc2luKHUpXX19ZnVuY3Rpb24gcyh0LGUscil7cmV0dXJuXCJBXCIrdCtcIixcIit0K1wiIDAgXCIrICsocj5UdCkrXCIsMSBcIitlfWZ1bmN0aW9uIGwodCxlLHIsbil7cmV0dXJuXCJRIDAsMCBcIitufXJldHVybiBhLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj12ZSh0KSxhKTpyfSxhLnNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD12ZShlKSxhKTp0fSxhLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT12ZSh0KSxhKTplfSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dmUodCksYSk6bn0sYS5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT12ZSh0KSxhKTppfSxhfSx0LnN2Zy5kaWFnb25hbD1mdW5jdGlvbigpe3ZhciB0PVZuLGU9VW4scj1pcztmdW5jdGlvbiBuKG4saSl7dmFyIGE9dC5jYWxsKHRoaXMsbixpKSxvPWUuY2FsbCh0aGlzLG4saSkscz0oYS55K28ueSkvMixsPVthLHt4OmEueCx5OnN9LHt4Om8ueCx5OnN9LG9dO3JldHVyblwiTVwiKyhsPWwubWFwKHIpKVswXStcIkNcIitsWzFdK1wiIFwiK2xbMl0rXCIgXCIrbFszXX1yZXR1cm4gbi5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dmUoZSksbik6dH0sbi50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dmUodCksbik6ZX0sbi5wcm9qZWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sbn0sdC5zdmcuZGlhZ29uYWwucmFkaWFsPWZ1bmN0aW9uKCl7dmFyIGU9dC5zdmcuZGlhZ29uYWwoKSxyPWlzLG49ZS5wcm9qZWN0aW9uO3JldHVybiBlLnByb2plY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bihmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyPWVbMF0sbj1lWzFdLUV0O3JldHVybltyKk1hdGguY29zKG4pLHIqTWF0aC5zaW4obildfX0ocj10KSk6cn0sZX0sdC5zdmcuc3ltYm9sPWZ1bmN0aW9uKCl7dmFyIHQ9b3MsZT1hcztmdW5jdGlvbiByKHIsbil7cmV0dXJuKGxzLmdldCh0LmNhbGwodGhpcyxyLG4pKXx8c3MpKGUuY2FsbCh0aGlzLHIsbikpfXJldHVybiByLnR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dmUoZSkscik6dH0sci5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXZlKHQpLHIpOmV9LHJ9O3ZhciBscz10Lm1hcCh7Y2lyY2xlOnNzLGNyb3NzOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0LzUpLzI7cmV0dXJuXCJNXCIrLTMqZStcIixcIistZStcIkhcIistZStcIlZcIistMyplK1wiSFwiK2UrXCJWXCIrLWUrXCJIXCIrMyplK1wiVlwiK2UrXCJIXCIrZStcIlZcIiszKmUrXCJIXCIrLWUrXCJWXCIrZStcIkhcIistMyplK1wiWlwifSxkaWFtb25kOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0LygyKnVzKSkscj1lKnVzO3JldHVyblwiTTAsXCIrLWUrXCJMXCIrcitcIiwwIDAsXCIrZStcIiBcIistcitcIiwwWlwifSxzcXVhcmU6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQpLzI7cmV0dXJuXCJNXCIrLWUrXCIsXCIrLWUrXCJMXCIrZStcIixcIistZStcIiBcIitlK1wiLFwiK2UrXCIgXCIrLWUrXCIsXCIrZStcIlpcIn0sXCJ0cmlhbmdsZS1kb3duXCI6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQvY3MpLHI9ZSpjcy8yO3JldHVyblwiTTAsXCIrcitcIkxcIitlK1wiLFwiKy1yK1wiIFwiKy1lK1wiLFwiKy1yK1wiWlwifSxcInRyaWFuZ2xlLXVwXCI6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQvY3MpLHI9ZSpjcy8yO3JldHVyblwiTTAsXCIrLXIrXCJMXCIrZStcIixcIityK1wiIFwiKy1lK1wiLFwiK3IrXCJaXCJ9fSk7dC5zdmcuc3ltYm9sVHlwZXM9bHMua2V5cygpO3ZhciBjcz1NYXRoLnNxcnQoMyksdXM9TWF0aC50YW4oMzAqQ3QpO1cudHJhbnNpdGlvbj1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuPWRzfHwrK21zLGk9YnModCksYT1bXSxvPWdzfHx7dGltZTpEYXRlLm5vdygpLGVhc2U6aWEsZGVsYXk6MCxkdXJhdGlvbjoyNTB9LHM9LTEsbD10aGlzLmxlbmd0aDsrK3M8bDspe2EucHVzaChlPVtdKTtmb3IodmFyIGM9dGhpc1tzXSx1PS0xLGg9Yy5sZW5ndGg7Kyt1PGg7KShyPWNbdV0pJiZfcyhyLHUsaSxuLG8pLGUucHVzaChyKX1yZXR1cm4gcHMoYSxpLG4pfSxXLmludGVycnVwdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKG51bGw9PXQ/aHM6ZnMoYnModCkpKX07dmFyIGhzPWZzKGJzKCkpO2Z1bmN0aW9uIGZzKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlLHIsbjsoZT10aGlzW3RdKSYmKG49ZVtyPWUuYWN0aXZlXSkmJihuLnRpbWVyLmM9bnVsbCxuLnRpbWVyLnQ9TmFOLC0tZS5jb3VudD9kZWxldGUgZVtyXTpkZWxldGUgdGhpc1t0XSxlLmFjdGl2ZSs9LjUsbi5ldmVudCYmbi5ldmVudC5pbnRlcnJ1cHQuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sbi5pbmRleCkpfX1mdW5jdGlvbiBwcyh0LGUscil7cmV0dXJuIFUodCx2cyksdC5uYW1lc3BhY2U9ZSx0LmlkPXIsdH12YXIgZHMsZ3MsdnM9W10sbXM9MDtmdW5jdGlvbiB5cyh0LGUscixuKXt2YXIgaT10LmlkLGE9dC5uYW1lc3BhY2U7cmV0dXJuIHV0KHQsXCJmdW5jdGlvblwiPT10eXBlb2Ygcj9mdW5jdGlvbih0LG8scyl7dFthXVtpXS50d2Vlbi5zZXQoZSxuKHIuY2FsbCh0LHQuX19kYXRhX18sbyxzKSkpfToocj1uKHIpLGZ1bmN0aW9uKHQpe3RbYV1baV0udHdlZW4uc2V0KGUscil9KSl9ZnVuY3Rpb24geHModCl7cmV0dXJuIG51bGw9PXQmJih0PVwiXCIpLGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBicyh0KXtyZXR1cm4gbnVsbD09dD9cIl9fdHJhbnNpdGlvbl9fXCI6XCJfX3RyYW5zaXRpb25fXCIrdCtcIl9fXCJ9ZnVuY3Rpb24gX3ModCxlLHIsbixpKXt2YXIgYSxvLHMsbCxjLHU9dFtyXXx8KHRbcl09e2FjdGl2ZTowLGNvdW50OjB9KSxoPXVbbl07ZnVuY3Rpb24gZihyKXt2YXIgaT11LmFjdGl2ZSxmPXVbaV07Zm9yKHZhciBkIGluIGYmJihmLnRpbWVyLmM9bnVsbCxmLnRpbWVyLnQ9TmFOLC0tdS5jb3VudCxkZWxldGUgdVtpXSxmLmV2ZW50JiZmLmV2ZW50LmludGVycnVwdC5jYWxsKHQsdC5fX2RhdGFfXyxmLmluZGV4KSksdSlpZigrZDxuKXt2YXIgZz11W2RdO2cudGltZXIuYz1udWxsLGcudGltZXIudD1OYU4sLS11LmNvdW50LGRlbGV0ZSB1W2RdfW8uYz1wLEFlKGZ1bmN0aW9uKCl7cmV0dXJuIG8uYyYmcChyfHwxKSYmKG8uYz1udWxsLG8udD1OYU4pLDF9LDAsYSksdS5hY3RpdmU9bixoLmV2ZW50JiZoLmV2ZW50LnN0YXJ0LmNhbGwodCx0Ll9fZGF0YV9fLGUpLGM9W10saC50d2Vlbi5mb3JFYWNoKGZ1bmN0aW9uKHIsbil7KG49bi5jYWxsKHQsdC5fX2RhdGFfXyxlKSkmJmMucHVzaChuKX0pLGw9aC5lYXNlLHM9aC5kdXJhdGlvbn1mdW5jdGlvbiBwKGkpe2Zvcih2YXIgYT1pL3Msbz1sKGEpLGY9Yy5sZW5ndGg7Zj4wOyljWy0tZl0uY2FsbCh0LG8pO2lmKGE+PTEpcmV0dXJuIGguZXZlbnQmJmguZXZlbnQuZW5kLmNhbGwodCx0Ll9fZGF0YV9fLGUpLC0tdS5jb3VudD9kZWxldGUgdVtuXTpkZWxldGUgdFtyXSwxfWh8fChhPWkudGltZSxvPUFlKGZ1bmN0aW9uKHQpe3ZhciBlPWguZGVsYXk7aWYoby50PWUrYSxlPD10KXJldHVybiBmKHQtZSk7by5jPWZ9LDAsYSksaD11W25dPXt0d2VlbjpuZXcgYix0aW1lOmEsdGltZXI6byxkZWxheTppLmRlbGF5LGR1cmF0aW9uOmkuZHVyYXRpb24sZWFzZTppLmVhc2UsaW5kZXg6ZX0saT1udWxsLCsrdS5jb3VudCl9dnMuY2FsbD1XLmNhbGwsdnMuZW1wdHk9Vy5lbXB0eSx2cy5ub2RlPVcubm9kZSx2cy5zaXplPVcuc2l6ZSx0LnRyYW5zaXRpb249ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZSYmZS50cmFuc2l0aW9uP2RzP2UudHJhbnNpdGlvbihyKTplOnQuc2VsZWN0aW9uKCkudHJhbnNpdGlvbihlKX0sdC50cmFuc2l0aW9uLnByb3RvdHlwZT12cyx2cy5zZWxlY3Q9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9dGhpcy5pZCxhPXRoaXMubmFtZXNwYWNlLG89W107dD1YKHQpO2Zvcih2YXIgcz0tMSxsPXRoaXMubGVuZ3RoOysrczxsOyl7by5wdXNoKGU9W10pO2Zvcih2YXIgYz10aGlzW3NdLHU9LTEsaD1jLmxlbmd0aDsrK3U8aDspKG49Y1t1XSkmJihyPXQuY2FsbChuLG4uX19kYXRhX18sdSxzKSk/KFwiX19kYXRhX19cImluIG4mJihyLl9fZGF0YV9fPW4uX19kYXRhX18pLF9zKHIsdSxhLGksblthXVtpXSksZS5wdXNoKHIpKTplLnB1c2gobnVsbCl9cmV0dXJuIHBzKG8sYSxpKX0sdnMuc2VsZWN0QWxsPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbz10aGlzLmlkLHM9dGhpcy5uYW1lc3BhY2UsbD1bXTt0PVoodCk7Zm9yKHZhciBjPS0xLHU9dGhpcy5sZW5ndGg7KytjPHU7KWZvcih2YXIgaD10aGlzW2NdLGY9LTEscD1oLmxlbmd0aDsrK2Y8cDspaWYobj1oW2ZdKXthPW5bc11bb10scj10LmNhbGwobixuLl9fZGF0YV9fLGYsYyksbC5wdXNoKGU9W10pO2Zvcih2YXIgZD0tMSxnPXIubGVuZ3RoOysrZDxnOykoaT1yW2RdKSYmX3MoaSxkLHMsbyxhKSxlLnB1c2goaSl9cmV0dXJuIHBzKGwscyxvKX0sdnMuZmlsdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj1bXTtcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiYodD1jdCh0KSk7Zm9yKHZhciBpPTAsYT10aGlzLmxlbmd0aDtpPGE7aSsrKXtuLnB1c2goZT1bXSk7Zm9yKHZhciBvLHM9MCxsPShvPXRoaXNbaV0pLmxlbmd0aDtzPGw7cysrKShyPW9bc10pJiZ0LmNhbGwocixyLl9fZGF0YV9fLHMsaSkmJmUucHVzaChyKX1yZXR1cm4gcHMobix0aGlzLm5hbWVzcGFjZSx0aGlzLmlkKX0sdnMudHdlZW49ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmlkLG49dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj90aGlzLm5vZGUoKVtuXVtyXS50d2Vlbi5nZXQodCk6dXQodGhpcyxudWxsPT1lP2Z1bmN0aW9uKGUpe2Vbbl1bcl0udHdlZW4ucmVtb3ZlKHQpfTpmdW5jdGlvbihpKXtpW25dW3JdLnR3ZWVuLnNldCh0LGUpfSl9LHZzLmF0dHI9ZnVuY3Rpb24oZSxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2ZvcihyIGluIGUpdGhpcy5hdHRyKHIsZVtyXSk7cmV0dXJuIHRoaXN9dmFyIG49XCJ0cmFuc2Zvcm1cIj09ZT9nYTpaaSxpPXQubnMucXVhbGlmeShlKTtmdW5jdGlvbiBhKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoaSl9ZnVuY3Rpb24gbygpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsKX1yZXR1cm4geXModGhpcyxcImF0dHIuXCIrZSxyLGkubG9jYWw/ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/bzoodCs9XCJcIixmdW5jdGlvbigpe3ZhciBlLHI9dGhpcy5nZXRBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwpO3JldHVybiByIT09dCYmKGU9bihyLHQpLGZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsLGUodCkpfSl9KX06ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/YToodCs9XCJcIixmdW5jdGlvbigpe3ZhciBlLHI9dGhpcy5nZXRBdHRyaWJ1dGUoaSk7cmV0dXJuIHIhPT10JiYoZT1uKHIsdCksZnVuY3Rpb24odCl7dGhpcy5zZXRBdHRyaWJ1dGUoaSxlKHQpKX0pfSl9KX0sdnMuYXR0clR3ZWVuPWZ1bmN0aW9uKGUscil7dmFyIG49dC5ucy5xdWFsaWZ5KGUpO3JldHVybiB0aGlzLnR3ZWVuKFwiYXR0ci5cIitlLG4ubG9jYWw/ZnVuY3Rpb24odCxlKXt2YXIgaT1yLmNhbGwodGhpcyx0LGUsdGhpcy5nZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpKTtyZXR1cm4gaSYmZnVuY3Rpb24odCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwsaSh0KSl9fTpmdW5jdGlvbih0LGUpe3ZhciBpPXIuY2FsbCh0aGlzLHQsZSx0aGlzLmdldEF0dHJpYnV0ZShuKSk7cmV0dXJuIGkmJmZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlKG4saSh0KSl9fSl9LHZzLnN0eWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoO2lmKG48Myl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpe2ZvcihyIGluIG48MiYmKGU9XCJcIiksdCl0aGlzLnN0eWxlKHIsdFtyXSxlKTtyZXR1cm4gdGhpc31yPVwiXCJ9ZnVuY3Rpb24gaSgpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9cmV0dXJuIHlzKHRoaXMsXCJzdHlsZS5cIit0LGUsZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/aTooZSs9XCJcIixmdW5jdGlvbigpe3ZhciBuLGk9byh0aGlzKS5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KTtyZXR1cm4gaSE9PWUmJihuPVppKGksZSksZnVuY3Rpb24oZSl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4oZSkscil9KX0pfSl9LHZzLnN0eWxlVHdlZW49ZnVuY3Rpb24odCxlLHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDMmJihyPVwiXCIpLHRoaXMudHdlZW4oXCJzdHlsZS5cIit0LGZ1bmN0aW9uKG4saSl7dmFyIGE9ZS5jYWxsKHRoaXMsbixpLG8odGhpcykuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCkpO3JldHVybiBhJiZmdW5jdGlvbihlKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsYShlKSxyKX19KX0sdnMudGV4dD1mdW5jdGlvbih0KXtyZXR1cm4geXModGhpcyxcInRleHRcIix0LHhzKX0sdnMucmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIHRoaXMuZWFjaChcImVuZC50cmFuc2l0aW9uXCIsZnVuY3Rpb24oKXt2YXIgZTt0aGlzW3RdLmNvdW50PDImJihlPXRoaXMucGFyZW50Tm9kZSkmJmUucmVtb3ZlQ2hpbGQodGhpcyl9KX0sdnMuZWFzZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzLmlkLG49dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtuXVtyXS5lYXNlOihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiYoZT10LmVhc2UuYXBwbHkodCxhcmd1bWVudHMpKSx1dCh0aGlzLGZ1bmN0aW9uKHQpe3Rbbl1bcl0uZWFzZT1lfSkpfSx2cy5kZWxheT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlkLHI9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtyXVtlXS5kZWxheTp1dCh0aGlzLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZnVuY3Rpb24obixpLGEpe25bcl1bZV0uZGVsYXk9K3QuY2FsbChuLG4uX19kYXRhX18saSxhKX06KHQ9K3QsZnVuY3Rpb24obil7bltyXVtlXS5kZWxheT10fSkpfSx2cy5kdXJhdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlkLHI9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtyXVtlXS5kdXJhdGlvbjp1dCh0aGlzLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZnVuY3Rpb24obixpLGEpe25bcl1bZV0uZHVyYXRpb249TWF0aC5tYXgoMSx0LmNhbGwobixuLl9fZGF0YV9fLGksYSkpfToodD1NYXRoLm1heCgxLHQpLGZ1bmN0aW9uKG4pe25bcl1bZV0uZHVyYXRpb249dH0pKX0sdnMuZWFjaD1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMuaWQsaT10aGlzLm5hbWVzcGFjZTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBhPWdzLG89ZHM7dHJ5e2RzPW4sdXQodGhpcyxmdW5jdGlvbih0LHIsYSl7Z3M9dFtpXVtuXSxlLmNhbGwodCx0Ll9fZGF0YV9fLHIsYSl9KX1maW5hbGx5e2dzPWEsZHM9b319ZWxzZSB1dCh0aGlzLGZ1bmN0aW9uKGEpe3ZhciBvPWFbaV1bbl07KG8uZXZlbnR8fChvLmV2ZW50PXQuZGlzcGF0Y2goXCJzdGFydFwiLFwiZW5kXCIsXCJpbnRlcnJ1cHRcIikpKS5vbihlLHIpfSk7cmV0dXJuIHRoaXN9LHZzLnRyYW5zaXRpb249ZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxyLG49dGhpcy5pZCxpPSsrbXMsYT10aGlzLm5hbWVzcGFjZSxvPVtdLHM9MCxsPXRoaXMubGVuZ3RoO3M8bDtzKyspe28ucHVzaCh0PVtdKTtmb3IodmFyIGMsdT0wLGg9KGM9dGhpc1tzXSkubGVuZ3RoO3U8aDt1KyspKGU9Y1t1XSkmJl9zKGUsdSxhLGkse3RpbWU6KHI9ZVthXVtuXSkudGltZSxlYXNlOnIuZWFzZSxkZWxheTpyLmRlbGF5K3IuZHVyYXRpb24sZHVyYXRpb246ci5kdXJhdGlvbn0pLHQucHVzaChlKX1yZXR1cm4gcHMobyxhLGkpfSx0LnN2Zy5heGlzPWZ1bmN0aW9uKCl7dmFyIGUscj10LnNjYWxlLmxpbmVhcigpLGk9d3MsYT02LG89NixzPTMsbD1bMTBdLGM9bnVsbDtmdW5jdGlvbiB1KG4pe24uZWFjaChmdW5jdGlvbigpe3ZhciBuLHU9dC5zZWxlY3QodGhpcyksaD10aGlzLl9fY2hhcnRfX3x8cixmPXRoaXMuX19jaGFydF9fPXIuY29weSgpLHA9bnVsbD09Yz9mLnRpY2tzP2YudGlja3MuYXBwbHkoZixsKTpmLmRvbWFpbigpOmMsZD1udWxsPT1lP2YudGlja0Zvcm1hdD9mLnRpY2tGb3JtYXQuYXBwbHkoZixsKTp6OmUsZz11LnNlbGVjdEFsbChcIi50aWNrXCIpLmRhdGEocCxmKSx2PWcuZW50ZXIoKS5pbnNlcnQoXCJnXCIsXCIuZG9tYWluXCIpLmF0dHIoXCJjbGFzc1wiLFwidGlja1wiKS5zdHlsZShcIm9wYWNpdHlcIixrdCksbT10LnRyYW5zaXRpb24oZy5leGl0KCkpLnN0eWxlKFwib3BhY2l0eVwiLGt0KS5yZW1vdmUoKSx5PXQudHJhbnNpdGlvbihnLm9yZGVyKCkpLnN0eWxlKFwib3BhY2l0eVwiLDEpLHg9TWF0aC5tYXgoYSwwKStzLGI9dW8oZiksXz11LnNlbGVjdEFsbChcIi5kb21haW5cIikuZGF0YShbMF0pLHc9KF8uZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJjbGFzc1wiLFwiZG9tYWluXCIpLHQudHJhbnNpdGlvbihfKSk7di5hcHBlbmQoXCJsaW5lXCIpLHYuYXBwZW5kKFwidGV4dFwiKTt2YXIgayxBLFQsTSxTPXYuc2VsZWN0KFwibGluZVwiKSxFPXkuc2VsZWN0KFwibGluZVwiKSxDPWcuc2VsZWN0KFwidGV4dFwiKS50ZXh0KGQpLEw9di5zZWxlY3QoXCJ0ZXh0XCIpLE89eS5zZWxlY3QoXCJ0ZXh0XCIpLEk9XCJ0b3BcIj09PWl8fFwibGVmdFwiPT09aT8tMToxO2lmKFwiYm90dG9tXCI9PT1pfHxcInRvcFwiPT09aT8obj1BcyxrPVwieFwiLFQ9XCJ5XCIsQT1cIngyXCIsTT1cInkyXCIsQy5hdHRyKFwiZHlcIixJPDA/XCIwZW1cIjpcIi43MWVtXCIpLnN0eWxlKFwidGV4dC1hbmNob3JcIixcIm1pZGRsZVwiKSx3LmF0dHIoXCJkXCIsXCJNXCIrYlswXStcIixcIitJKm8rXCJWMEhcIitiWzFdK1wiVlwiK0kqbykpOihuPVRzLGs9XCJ5XCIsVD1cInhcIixBPVwieTJcIixNPVwieDJcIixDLmF0dHIoXCJkeVwiLFwiLjMyZW1cIikuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLEk8MD9cImVuZFwiOlwic3RhcnRcIiksdy5hdHRyKFwiZFwiLFwiTVwiK0kqbytcIixcIitiWzBdK1wiSDBWXCIrYlsxXStcIkhcIitJKm8pKSxTLmF0dHIoTSxJKmEpLEwuYXR0cihULEkqeCksRS5hdHRyKEEsMCkuYXR0cihNLEkqYSksTy5hdHRyKGssMCkuYXR0cihULEkqeCksZi5yYW5nZUJhbmQpe3ZhciBEPWYsUD1ELnJhbmdlQmFuZCgpLzI7aD1mPWZ1bmN0aW9uKHQpe3JldHVybiBEKHQpK1B9fWVsc2UgaC5yYW5nZUJhbmQ/aD1mOm0uY2FsbChuLGYsaCk7di5jYWxsKG4saCxmKSx5LmNhbGwobixmLGYpfSl9cmV0dXJuIHUuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCx1KTpyfSx1Lm9yaWVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10IGluIGtzP3QrXCJcIjp3cyx1KTppfSx1LnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9bihhcmd1bWVudHMpLHUpOmx9LHUudGlja1ZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LHUpOmN9LHUudGlja0Zvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LHUpOmV9LHUudGlja1NpemU9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gZT8oYT0rdCxvPSthcmd1bWVudHNbZS0xXSx1KTphfSx1LmlubmVyVGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3QsdSk6YX0sdS5vdXRlclRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LHUpOm99LHUudGlja1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsdSk6c30sdS50aWNrU3ViZGl2aWRlPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJnV9LHV9O3ZhciB3cz1cImJvdHRvbVwiLGtzPXt0b3A6MSxyaWdodDoxLGJvdHRvbToxLGxlZnQ6MX07ZnVuY3Rpb24gQXModCxlLHIpe3QuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3ZhciBuPWUodCk7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrKGlzRmluaXRlKG4pP246cih0KSkrXCIsMClcIn0pfWZ1bmN0aW9uIFRzKHQsZSxyKXt0LmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXt2YXIgbj1lKHQpO3JldHVyblwidHJhbnNsYXRlKDAsXCIrKGlzRmluaXRlKG4pP246cih0KSkrXCIpXCJ9KX10LnN2Zy5icnVzaD1mdW5jdGlvbigpe3ZhciBlLHIsbj1qKGYsXCJicnVzaHN0YXJ0XCIsXCJicnVzaFwiLFwiYnJ1c2hlbmRcIiksaT1udWxsLGE9bnVsbCxzPVswLDBdLGw9WzAsMF0sYz0hMCx1PSEwLGg9U3NbMF07ZnVuY3Rpb24gZihlKXtlLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10LnNlbGVjdCh0aGlzKS5zdHlsZShcInBvaW50ZXItZXZlbnRzXCIsXCJhbGxcIikuc3R5bGUoXCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3JcIixcInJnYmEoMCwwLDAsMClcIikub24oXCJtb3VzZWRvd24uYnJ1c2hcIix2KS5vbihcInRvdWNoc3RhcnQuYnJ1c2hcIix2KSxyPWUuc2VsZWN0QWxsKFwiLmJhY2tncm91bmRcIikuZGF0YShbMF0pO3IuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoXCJjbGFzc1wiLFwiYmFja2dyb3VuZFwiKS5zdHlsZShcInZpc2liaWxpdHlcIixcImhpZGRlblwiKS5zdHlsZShcImN1cnNvclwiLFwiY3Jvc3NoYWlyXCIpLGUuc2VsZWN0QWxsKFwiLmV4dGVudFwiKS5kYXRhKFswXSkuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoXCJjbGFzc1wiLFwiZXh0ZW50XCIpLnN0eWxlKFwiY3Vyc29yXCIsXCJtb3ZlXCIpO3ZhciBuPWUuc2VsZWN0QWxsKFwiLnJlc2l6ZVwiKS5kYXRhKGgseik7bi5leGl0KCkucmVtb3ZlKCksbi5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJyZXNpemUgXCIrdH0pLnN0eWxlKFwiY3Vyc29yXCIsZnVuY3Rpb24odCl7cmV0dXJuIE1zW3RdfSkuYXBwZW5kKFwicmVjdFwiKS5hdHRyKFwieFwiLGZ1bmN0aW9uKHQpe3JldHVybi9bZXddJC8udGVzdCh0KT8tMzpudWxsfSkuYXR0cihcInlcIixmdW5jdGlvbih0KXtyZXR1cm4vXltuc10vLnRlc3QodCk/LTM6bnVsbH0pLmF0dHIoXCJ3aWR0aFwiLDYpLmF0dHIoXCJoZWlnaHRcIiw2KS5zdHlsZShcInZpc2liaWxpdHlcIixcImhpZGRlblwiKSxuLnN0eWxlKFwiZGlzcGxheVwiLGYuZW1wdHkoKT9cIm5vbmVcIjpudWxsKTt2YXIgbyxzPXQudHJhbnNpdGlvbihlKSxsPXQudHJhbnNpdGlvbihyKTtpJiYobz11byhpKSxsLmF0dHIoXCJ4XCIsb1swXSkuYXR0cihcIndpZHRoXCIsb1sxXS1vWzBdKSxkKHMpKSxhJiYobz11byhhKSxsLmF0dHIoXCJ5XCIsb1swXSkuYXR0cihcImhlaWdodFwiLG9bMV0tb1swXSksZyhzKSkscChzKX0pfWZ1bmN0aW9uIHAodCl7dC5zZWxlY3RBbGwoXCIucmVzaXplXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXtyZXR1cm5cInRyYW5zbGF0ZShcIitzWysvZSQvLnRlc3QodCldK1wiLFwiK2xbKy9ecy8udGVzdCh0KV0rXCIpXCJ9KX1mdW5jdGlvbiBkKHQpe3Quc2VsZWN0KFwiLmV4dGVudFwiKS5hdHRyKFwieFwiLHNbMF0pLHQuc2VsZWN0QWxsKFwiLmV4dGVudCwubj5yZWN0LC5zPnJlY3RcIikuYXR0cihcIndpZHRoXCIsc1sxXS1zWzBdKX1mdW5jdGlvbiBnKHQpe3Quc2VsZWN0KFwiLmV4dGVudFwiKS5hdHRyKFwieVwiLGxbMF0pLHQuc2VsZWN0QWxsKFwiLmV4dGVudCwuZT5yZWN0LC53PnJlY3RcIikuYXR0cihcImhlaWdodFwiLGxbMV0tbFswXSl9ZnVuY3Rpb24gdigpe3ZhciBoLHYsbT10aGlzLHk9dC5zZWxlY3QodC5ldmVudC50YXJnZXQpLHg9bi5vZihtLGFyZ3VtZW50cyksYj10LnNlbGVjdChtKSxfPXkuZGF0dW0oKSx3PSEvXihufHMpJC8udGVzdChfKSYmaSxrPSEvXihlfHcpJC8udGVzdChfKSYmYSxBPXkuY2xhc3NlZChcImV4dGVudFwiKSxUPXh0KG0pLE09dC5tb3VzZShtKSxTPXQuc2VsZWN0KG8obSkpLm9uKFwia2V5ZG93bi5icnVzaFwiLGZ1bmN0aW9uKCl7MzI9PXQuZXZlbnQua2V5Q29kZSYmKEF8fChoPW51bGwsTVswXS09c1sxXSxNWzFdLT1sWzFdLEE9MiksQigpKX0pLm9uKFwia2V5dXAuYnJ1c2hcIixmdW5jdGlvbigpezMyPT10LmV2ZW50LmtleUNvZGUmJjI9PUEmJihNWzBdKz1zWzFdLE1bMV0rPWxbMV0sQT0wLEIoKSl9KTtpZih0LmV2ZW50LmNoYW5nZWRUb3VjaGVzP1Mub24oXCJ0b3VjaG1vdmUuYnJ1c2hcIixMKS5vbihcInRvdWNoZW5kLmJydXNoXCIsTyk6Uy5vbihcIm1vdXNlbW92ZS5icnVzaFwiLEwpLm9uKFwibW91c2V1cC5icnVzaFwiLE8pLGIuaW50ZXJydXB0KCkuc2VsZWN0QWxsKFwiKlwiKS5pbnRlcnJ1cHQoKSxBKU1bMF09c1swXS1NWzBdLE1bMV09bFswXS1NWzFdO2Vsc2UgaWYoXyl7dmFyIEU9Ky93JC8udGVzdChfKSxDPSsvXm4vLnRlc3QoXyk7dj1bc1sxLUVdLU1bMF0sbFsxLUNdLU1bMV1dLE1bMF09c1tFXSxNWzFdPWxbQ119ZWxzZSB0LmV2ZW50LmFsdEtleSYmKGg9TS5zbGljZSgpKTtmdW5jdGlvbiBMKCl7dmFyIGU9dC5tb3VzZShtKSxyPSExO3YmJihlWzBdKz12WzBdLGVbMV0rPXZbMV0pLEF8fCh0LmV2ZW50LmFsdEtleT8oaHx8KGg9WyhzWzBdK3NbMV0pLzIsKGxbMF0rbFsxXSkvMl0pLE1bMF09c1srKGVbMF08aFswXSldLE1bMV09bFsrKGVbMV08aFsxXSldKTpoPW51bGwpLHcmJnooZSxpLDApJiYoZChiKSxyPSEwKSxrJiZ6KGUsYSwxKSYmKGcoYikscj0hMCksciYmKHAoYikseCh7dHlwZTpcImJydXNoXCIsbW9kZTpBP1wibW92ZVwiOlwicmVzaXplXCJ9KSl9ZnVuY3Rpb24geih0LG4saSl7dmFyIGEsbyxmPXVvKG4pLHA9ZlswXSxkPWZbMV0sZz1NW2ldLHY9aT9sOnMsbT12WzFdLXZbMF07aWYoQSYmKHAtPWcsZC09bStnKSxhPShpP3U6Yyk/TWF0aC5tYXgocCxNYXRoLm1pbihkLHRbaV0pKTp0W2ldLEE/bz0oYSs9ZykrbTooaCYmKGc9TWF0aC5tYXgocCxNYXRoLm1pbihkLDIqaFtpXS1hKSkpLGc8YT8obz1hLGE9Zyk6bz1nKSx2WzBdIT1hfHx2WzFdIT1vKXJldHVybiBpP3I9bnVsbDplPW51bGwsdlswXT1hLHZbMV09bywhMH1mdW5jdGlvbiBPKCl7TCgpLGIuc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpLnNlbGVjdEFsbChcIi5yZXNpemVcIikuc3R5bGUoXCJkaXNwbGF5XCIsZi5lbXB0eSgpP1wibm9uZVwiOm51bGwpLHQuc2VsZWN0KFwiYm9keVwiKS5zdHlsZShcImN1cnNvclwiLG51bGwpLFMub24oXCJtb3VzZW1vdmUuYnJ1c2hcIixudWxsKS5vbihcIm1vdXNldXAuYnJ1c2hcIixudWxsKS5vbihcInRvdWNobW92ZS5icnVzaFwiLG51bGwpLm9uKFwidG91Y2hlbmQuYnJ1c2hcIixudWxsKS5vbihcImtleWRvd24uYnJ1c2hcIixudWxsKS5vbihcImtleXVwLmJydXNoXCIsbnVsbCksVCgpLHgoe3R5cGU6XCJicnVzaGVuZFwifSl9Yi5zdHlsZShcInBvaW50ZXItZXZlbnRzXCIsXCJub25lXCIpLnNlbGVjdEFsbChcIi5yZXNpemVcIikuc3R5bGUoXCJkaXNwbGF5XCIsbnVsbCksdC5zZWxlY3QoXCJib2R5XCIpLnN0eWxlKFwiY3Vyc29yXCIseS5zdHlsZShcImN1cnNvclwiKSkseCh7dHlwZTpcImJydXNoc3RhcnRcIn0pLEwoKX1yZXR1cm4gZi5ldmVudD1mdW5jdGlvbihpKXtpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1uLm9mKHRoaXMsYXJndW1lbnRzKSxhPXt4OnMseTpsLGk6ZSxqOnJ9LG89dGhpcy5fX2NoYXJ0X198fGE7dGhpcy5fX2NoYXJ0X189YSxkcz90LnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZWFjaChcInN0YXJ0LmJydXNoXCIsZnVuY3Rpb24oKXtlPW8uaSxyPW8uaixzPW8ueCxsPW8ueSxpKHt0eXBlOlwiYnJ1c2hzdGFydFwifSl9KS50d2VlbihcImJydXNoOmJydXNoXCIsZnVuY3Rpb24oKXt2YXIgdD0kaShzLGEueCksbj0kaShsLGEueSk7cmV0dXJuIGU9cj1udWxsLGZ1bmN0aW9uKGUpe3M9YS54PXQoZSksbD1hLnk9bihlKSxpKHt0eXBlOlwiYnJ1c2hcIixtb2RlOlwicmVzaXplXCJ9KX19KS5lYWNoKFwiZW5kLmJydXNoXCIsZnVuY3Rpb24oKXtlPWEuaSxyPWEuaixpKHt0eXBlOlwiYnJ1c2hcIixtb2RlOlwicmVzaXplXCJ9KSxpKHt0eXBlOlwiYnJ1c2hlbmRcIn0pfSk6KGkoe3R5cGU6XCJicnVzaHN0YXJ0XCJ9KSxpKHt0eXBlOlwiYnJ1c2hcIixtb2RlOlwicmVzaXplXCJ9KSxpKHt0eXBlOlwiYnJ1c2hlbmRcIn0pKX0pfSxmLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9U3NbIShpPXQpPDwxfCFhXSxmKTppfSxmLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9U3NbIWk8PDF8IShhPXQpXSxmKTphfSxmLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpJiZhPyhjPSEhdFswXSx1PSEhdFsxXSk6aT9jPSEhdDphJiYodT0hIXQpLGYpOmkmJmE/W2MsdV06aT9jOmE/dTpudWxsfSxmLmV4dGVudD1mdW5jdGlvbih0KXt2YXIgbixvLGMsdSxoO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpJiYobj10WzBdLG89dFsxXSxhJiYobj1uWzBdLG89b1swXSksZT1bbixvXSxpLmludmVydCYmKG49aShuKSxvPWkobykpLG88biYmKGg9bixuPW8sbz1oKSxuPT1zWzBdJiZvPT1zWzFdfHwocz1bbixvXSkpLGEmJihjPXRbMF0sdT10WzFdLGkmJihjPWNbMV0sdT11WzFdKSxyPVtjLHVdLGEuaW52ZXJ0JiYoYz1hKGMpLHU9YSh1KSksdTxjJiYoaD1jLGM9dSx1PWgpLGM9PWxbMF0mJnU9PWxbMV18fChsPVtjLHVdKSksZik6KGkmJihlPyhuPWVbMF0sbz1lWzFdKToobj1zWzBdLG89c1sxXSxpLmludmVydCYmKG49aS5pbnZlcnQobiksbz1pLmludmVydChvKSksbzxuJiYoaD1uLG49byxvPWgpKSksYSYmKHI/KGM9clswXSx1PXJbMV0pOihjPWxbMF0sdT1sWzFdLGEuaW52ZXJ0JiYoYz1hLmludmVydChjKSx1PWEuaW52ZXJ0KHUpKSx1PGMmJihoPWMsYz11LHU9aCkpKSxpJiZhP1tbbixjXSxbbyx1XV06aT9bbixvXTphJiZbYyx1XSl9LGYuY2xlYXI9ZnVuY3Rpb24oKXtyZXR1cm4gZi5lbXB0eSgpfHwocz1bMCwwXSxsPVswLDBdLGU9cj1udWxsKSxmfSxmLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuISFpJiZzWzBdPT1zWzFdfHwhIWEmJmxbMF09PWxbMV19LHQucmViaW5kKGYsbixcIm9uXCIpfTt2YXIgTXM9e246XCJucy1yZXNpemVcIixlOlwiZXctcmVzaXplXCIsczpcIm5zLXJlc2l6ZVwiLHc6XCJldy1yZXNpemVcIixudzpcIm53c2UtcmVzaXplXCIsbmU6XCJuZXN3LXJlc2l6ZVwiLHNlOlwibndzZS1yZXNpemVcIixzdzpcIm5lc3ctcmVzaXplXCJ9LFNzPVtbXCJuXCIsXCJlXCIsXCJzXCIsXCJ3XCIsXCJud1wiLFwibmVcIixcInNlXCIsXCJzd1wiXSxbXCJlXCIsXCJ3XCJdLFtcIm5cIixcInNcIl0sW11dLEVzPUllLmZvcm1hdD1zci50aW1lRm9ybWF0LENzPUVzLnV0YyxMcz1DcyhcIiVZLSVtLSVkVCVIOiVNOiVTLiVMWlwiKTtmdW5jdGlvbiB6cyh0KXtyZXR1cm4gdC50b0lTT1N0cmluZygpfWZ1bmN0aW9uIE9zKGUscixuKXtmdW5jdGlvbiBpKHQpe3JldHVybiBlKHQpfWZ1bmN0aW9uIGEoZSxuKXt2YXIgaT0oZVsxXS1lWzBdKS9uLGE9dC5iaXNlY3QoRHMsaSk7cmV0dXJuIGE9PURzLmxlbmd0aD9bci55ZWFyLHhvKGUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LzMxNTM2ZTZ9KSxuKVsyXV06YT9yW2kvRHNbYS0xXTxEc1thXS9pP2EtMTphXTpbRnMseG8oZSxuKVsyXV19cmV0dXJuIGkuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBJcyhlLmludmVydCh0KSl9LGkuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlLmRvbWFpbih0KSxpKTplLmRvbWFpbigpLm1hcChJcyl9LGkubmljZT1mdW5jdGlvbih0LGUpe3ZhciByPWkuZG9tYWluKCksbj1jbyhyKSxvPW51bGw9PXQ/YShuLDEwKTpcIm51bWJlclwiPT10eXBlb2YgdCYmYShuLHQpO2Z1bmN0aW9uIHMocil7cmV0dXJuIWlzTmFOKHIpJiYhdC5yYW5nZShyLElzKCtyKzEpLGUpLmxlbmd0aH1yZXR1cm4gbyYmKHQ9b1swXSxlPW9bMV0pLGkuZG9tYWluKGZvKHIsZT4xP3tmbG9vcjpmdW5jdGlvbihlKXtmb3IoO3MoZT10LmZsb29yKGUpKTspZT1JcyhlLTEpO3JldHVybiBlfSxjZWlsOmZ1bmN0aW9uKGUpe2Zvcig7cyhlPXQuY2VpbChlKSk7KWU9SXMoK2UrMSk7cmV0dXJuIGV9fTp0KSl9LGkudGlja3M9ZnVuY3Rpb24odCxlKXt2YXIgcj1jbyhpLmRvbWFpbigpKSxuPW51bGw9PXQ/YShyLDEwKTpcIm51bWJlclwiPT10eXBlb2YgdD9hKHIsdCk6IXQucmFuZ2UmJlt7cmFuZ2U6dH0sZV07cmV0dXJuIG4mJih0PW5bMF0sZT1uWzFdKSx0LnJhbmdlKHJbMF0sSXMoK3JbMV0rMSksZTwxPzE6ZSl9LGkudGlja0Zvcm1hdD1mdW5jdGlvbigpe3JldHVybiBufSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gT3MoZS5jb3B5KCkscixuKX0sbW8oaSxlKX1mdW5jdGlvbiBJcyh0KXtyZXR1cm4gbmV3IERhdGUodCl9RXMuaXNvPURhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nJiYrbmV3IERhdGUoXCIyMDAwLTAxLTAxVDAwOjAwOjAwLjAwMFpcIik/enM6THMsenMucGFyc2U9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IERhdGUodCk7cmV0dXJuIGlzTmFOKGUpP251bGw6ZX0senMudG9TdHJpbmc9THMudG9TdHJpbmcsSWUuc2Vjb25kPUZlKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRGUoMWUzKk1hdGguZmxvb3IodC8xZTMpKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUodC5nZXRUaW1lKCkrMWUzKk1hdGguZmxvb3IoZSkpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRTZWNvbmRzKCl9KSxJZS5zZWNvbmRzPUllLnNlY29uZC5yYW5nZSxJZS5zZWNvbmRzLnV0Yz1JZS5zZWNvbmQudXRjLnJhbmdlLEllLm1pbnV0ZT1GZShmdW5jdGlvbih0KXtyZXR1cm4gbmV3IERlKDZlNCpNYXRoLmZsb29yKHQvNmU0KSl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKHQuZ2V0VGltZSgpKzZlNCpNYXRoLmZsb29yKGUpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TWludXRlcygpfSksSWUubWludXRlcz1JZS5taW51dGUucmFuZ2UsSWUubWludXRlcy51dGM9SWUubWludXRlLnV0Yy5yYW5nZSxJZS5ob3VyPUZlKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKS82MDtyZXR1cm4gbmV3IERlKDM2ZTUqKE1hdGguZmxvb3IodC8zNmU1LWUpK2UpKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUodC5nZXRUaW1lKCkrMzZlNSpNYXRoLmZsb29yKGUpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0pLEllLmhvdXJzPUllLmhvdXIucmFuZ2UsSWUuaG91cnMudXRjPUllLmhvdXIudXRjLnJhbmdlLEllLm1vbnRoPUZlKGZ1bmN0aW9uKHQpe3JldHVybih0PUllLmRheSh0KSkuc2V0RGF0ZSgxKSx0fSxmdW5jdGlvbih0LGUpe3Quc2V0TW9udGgodC5nZXRNb250aCgpK2UpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSksSWUubW9udGhzPUllLm1vbnRoLnJhbmdlLEllLm1vbnRocy51dGM9SWUubW9udGgudXRjLnJhbmdlO3ZhciBEcz1bMWUzLDVlMywxNWUzLDNlNCw2ZTQsM2U1LDllNSwxOGU1LDM2ZTUsMTA4ZTUsMjE2ZTUsNDMyZTUsODY0ZTUsMTcyOGU1LDYwNDhlNSwyNTkyZTYsNzc3NmU2LDMxNTM2ZTZdLFBzPVtbSWUuc2Vjb25kLDFdLFtJZS5zZWNvbmQsNV0sW0llLnNlY29uZCwxNV0sW0llLnNlY29uZCwzMF0sW0llLm1pbnV0ZSwxXSxbSWUubWludXRlLDVdLFtJZS5taW51dGUsMTVdLFtJZS5taW51dGUsMzBdLFtJZS5ob3VyLDFdLFtJZS5ob3VyLDNdLFtJZS5ob3VyLDZdLFtJZS5ob3VyLDEyXSxbSWUuZGF5LDFdLFtJZS5kYXksMl0sW0llLndlZWssMV0sW0llLm1vbnRoLDFdLFtJZS5tb250aCwzXSxbSWUueWVhciwxXV0sUnM9RXMubXVsdGkoW1tcIi4lTFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbGxpc2Vjb25kcygpfV0sW1wiOiVTXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0U2Vjb25kcygpfV0sW1wiJUk6JU1cIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaW51dGVzKCl9XSxbXCIlSSAlcFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9XSxbXCIlYSAlZFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERheSgpJiYxIT10LmdldERhdGUoKX1dLFtcIiViICVkXCIsZnVuY3Rpb24odCl7cmV0dXJuIDEhPXQuZ2V0RGF0ZSgpfV0sW1wiJUJcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfV0sW1wiJVlcIixZcl1dKSxGcz17cmFuZ2U6ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LnJhbmdlKE1hdGguY2VpbChlL24pKm4sK3IsbikubWFwKElzKX0sZmxvb3I6eixjZWlsOnp9O1BzLnllYXI9SWUueWVhcixJZS5zY2FsZT1mdW5jdGlvbigpe3JldHVybiBPcyh0LnNjYWxlLmxpbmVhcigpLFBzLFJzKX07dmFyIEJzPVBzLm1hcChmdW5jdGlvbih0KXtyZXR1cm5bdFswXS51dGMsdFsxXV19KSxOcz1Dcy5tdWx0aShbW1wiLiVMXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCl9XSxbXCI6JVNcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENTZWNvbmRzKCl9XSxbXCIlSTolTVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX1dLFtcIiVJICVwXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDSG91cnMoKX1dLFtcIiVhICVkXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRGF5KCkmJjEhPXQuZ2V0VVRDRGF0ZSgpfV0sW1wiJWIgJWRcIixmdW5jdGlvbih0KXtyZXR1cm4gMSE9dC5nZXRVVENEYXRlKCl9XSxbXCIlQlwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCl9XSxbXCIlWVwiLFlyXV0pO2Z1bmN0aW9uIGpzKHQpe3JldHVybiBKU09OLnBhcnNlKHQucmVzcG9uc2VUZXh0KX1mdW5jdGlvbiBWcyh0KXt2YXIgZT1pLmNyZWF0ZVJhbmdlKCk7cmV0dXJuIGUuc2VsZWN0Tm9kZShpLmJvZHkpLGUuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHQucmVzcG9uc2VUZXh0KX1Ccy55ZWFyPUllLnllYXIudXRjLEllLnNjYWxlLnV0Yz1mdW5jdGlvbigpe3JldHVybiBPcyh0LnNjYWxlLmxpbmVhcigpLEJzLE5zKX0sdC50ZXh0PW1lKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc3BvbnNlVGV4dH0pLHQuanNvbj1mdW5jdGlvbih0LGUpe3JldHVybiB5ZSh0LFwiYXBwbGljYXRpb24vanNvblwiLGpzLGUpfSx0Lmh0bWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4geWUodCxcInRleHQvaHRtbFwiLFZzLGUpfSx0LnhtbD1tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXNwb25zZVhNTH0pLFwib2JqZWN0XCI9PXR5cGVvZiBlJiZlLmV4cG9ydHM/ZS5leHBvcnRzPXQ6dGhpcy5kMz10fSgpfSx7fV0sMTU2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKylpZih2b2lkIDAhPT1hcmd1bWVudHNbdF0pcmV0dXJuIGFyZ3VtZW50c1t0XX19LHt9XSwxNTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiaW5jcmVtZW50YWwtY29udmV4LWh1bGxcIiksaT10KFwidW5pcVwiKTtmdW5jdGlvbiBhKHQsZSl7dGhpcy5wb2ludD10LHRoaXMuaW5kZXg9ZX1mdW5jdGlvbiBvKHQsZSl7Zm9yKHZhciByPXQucG9pbnQsbj1lLnBvaW50LGk9ci5sZW5ndGgsYT0wO2E8aTsrK2Epe3ZhciBvPW5bYV0tclthXTtpZihvKXJldHVybiBvfXJldHVybiAwfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoO2lmKDA9PT1yKXJldHVybltdO3ZhciBzPXRbMF0ubGVuZ3RoO2lmKHM8MSlyZXR1cm5bXTtpZigxPT09cylyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKDE9PT10KXJldHVybiByP1tbLTEsMF1dOltdO3ZhciBuPWUubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RbMF0sZV19KTtuLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXS1lWzBdfSk7Zm9yKHZhciBpPW5ldyBBcnJheSh0LTEpLGE9MTthPHQ7KythKXt2YXIgbz1uW2EtMV0scz1uW2FdO2lbYS0xXT1bb1sxXSxzWzFdXX1yJiZpLnB1c2goWy0xLGlbMF1bMV1dLFtpW3QtMV1bMV0sLTFdKTtyZXR1cm4gaX0ocix0LGUpO2Zvcih2YXIgbD1uZXcgQXJyYXkociksYz0xLHU9MDt1PHI7Kyt1KXtmb3IodmFyIGg9dFt1XSxmPW5ldyBBcnJheShzKzEpLHA9MCxkPTA7ZDxzOysrZCl7dmFyIGc9aFtkXTtmW2RdPWcscCs9ZypnfWZbc109cCxsW3VdPW5ldyBhKGYsdSksYz1NYXRoLm1heChwLGMpfWkobCxvKSxyPWwubGVuZ3RoO2Zvcih2YXIgdj1uZXcgQXJyYXkocitzKzEpLG09bmV3IEFycmF5KHIrcysxKSx5PShzKzEpKihzKzEpKmMseD1uZXcgQXJyYXkocysxKSx1PTA7dTw9czsrK3UpeFt1XT0wO3hbc109eSx2WzBdPXguc2xpY2UoKSxtWzBdPS0xO2Zvcih2YXIgdT0wO3U8PXM7Kyt1KXt2YXIgZj14LnNsaWNlKCk7Zlt1XT0xLHZbdSsxXT1mLG1bdSsxXT0tMX1mb3IodmFyIHU9MDt1PHI7Kyt1KXt2YXIgYj1sW3VdO3ZbdStzKzFdPWIucG9pbnQsbVt1K3MrMV09Yi5pbmRleH12YXIgXz1uKHYsITEpO189ZT9fLmZpbHRlcihmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTA7cjw9czsrK3Ipe3ZhciBuPW1bdFtyXV07aWYobjwwJiYrK2U+PTIpcmV0dXJuITE7dFtyXT1ufXJldHVybiEwfSk6Xy5maWx0ZXIoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTw9czsrK2Upe3ZhciByPW1bdFtlXV07aWYocjwwKXJldHVybiExO3RbZV09cn1yZXR1cm4hMH0pO2lmKDEmcylmb3IodmFyIHU9MDt1PF8ubGVuZ3RoOysrdSl7dmFyIGI9X1t1XSxmPWJbMF07YlswXT1iWzFdLGJbMV09Zn1yZXR1cm4gX319LHtcImluY3JlbWVudGFsLWNvbnZleC1odWxsXCI6NDA2LHVuaXE6NTMyfV0sMTU4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWE7dmFyIG49KGEuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIikpLmdldENvbnRleHQoXCIyZFwiKSxpPW8oWzMyLDEyNl0pO2Z1bmN0aW9uIGEodCxlKXtBcnJheS5pc0FycmF5KHQpJiYodD10LmpvaW4oXCIsIFwiKSk7dmFyIHIsYT17fSxzPTE2LGw9LjA1O2UmJigyPT09ZS5sZW5ndGgmJlwibnVtYmVyXCI9PXR5cGVvZiBlWzBdP3I9byhlKTpBcnJheS5pc0FycmF5KGUpP3I9ZTooZS5vP3I9byhlLm8pOmUucGFpcnMmJihyPWUucGFpcnMpLGUuZm9udFNpemUmJihzPWUuZm9udFNpemUpLG51bGwhPWUudGhyZXNob2xkJiYobD1lLnRocmVzaG9sZCkpKSxyfHwocj1pKSxuLmZvbnQ9cytcInB4IFwiK3Q7Zm9yKHZhciBjPTA7YzxyLmxlbmd0aDtjKyspe3ZhciB1PXJbY10saD1uLm1lYXN1cmVUZXh0KHVbMF0pLndpZHRoK24ubWVhc3VyZVRleHQodVsxXSkud2lkdGgsZj1uLm1lYXN1cmVUZXh0KHUpLndpZHRoO2lmKE1hdGguYWJzKGgtZik+cypsKXt2YXIgcD0oZi1oKS9zO2FbdV09MWUzKnB9fXJldHVybiBhfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPVtdLHI9dFswXTtyPD10WzFdO3IrKylmb3IodmFyIG49U3RyaW5nLmZyb21DaGFyQ29kZShyKSxpPXRbMF07aTx0WzFdO2krKyl7dmFyIGE9bitTdHJpbmcuZnJvbUNoYXJDb2RlKGkpO2UucHVzaChhKX1yZXR1cm4gZX1hLmNyZWF0ZVBhaXJzPW8sYS5hc2NpaT1pfSx7fV0sMTU5OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe3ZhciByPSExO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBGbG9hdDY0QXJyYXkpe3ZhciBuPW5ldyBGbG9hdDY0QXJyYXkoMSksaT1uZXcgVWludDMyQXJyYXkobi5idWZmZXIpO2lmKG5bMF09MSxyPSEwLDEwNzI2OTMyNDg9PT1pWzFdKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxbaVswXSxpWzFdXX0sZS5leHBvcnRzLnBhY2s9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaVswXT10LGlbMV09ZSxuWzBdfSxlLmV4cG9ydHMubG89ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxpWzBdfSxlLmV4cG9ydHMuaGk9ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxpWzFdfX1lbHNlIGlmKDEwNzI2OTMyNDg9PT1pWzBdKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxbaVsxXSxpWzBdXX0sZS5leHBvcnRzLnBhY2s9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaVsxXT10LGlbMF09ZSxuWzBdfSxlLmV4cG9ydHMubG89ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxpWzFdfSxlLmV4cG9ydHMuaGk9ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxpWzBdfX1lbHNlIHI9ITF9aWYoIXIpe3ZhciBhPW5ldyB0KDgpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYS53cml0ZURvdWJsZUxFKHQsMCwhMCksW2EucmVhZFVJbnQzMkxFKDAsITApLGEucmVhZFVJbnQzMkxFKDQsITApXX0sZS5leHBvcnRzLnBhY2s9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYS53cml0ZVVJbnQzMkxFKHQsMCwhMCksYS53cml0ZVVJbnQzMkxFKGUsNCwhMCksYS5yZWFkRG91YmxlTEUoMCwhMCl9LGUuZXhwb3J0cy5sbz1mdW5jdGlvbih0KXtyZXR1cm4gYS53cml0ZURvdWJsZUxFKHQsMCwhMCksYS5yZWFkVUludDMyTEUoMCwhMCl9LGUuZXhwb3J0cy5oaT1mdW5jdGlvbih0KXtyZXR1cm4gYS53cml0ZURvdWJsZUxFKHQsMCwhMCksYS5yZWFkVUludDMyTEUoNCwhMCl9fWUuZXhwb3J0cy5zaWduPWZ1bmN0aW9uKHQpe3JldHVybiBlLmV4cG9ydHMuaGkodCk+Pj4zMX0sZS5leHBvcnRzLmV4cG9uZW50PWZ1bmN0aW9uKHQpe3JldHVybihlLmV4cG9ydHMuaGkodCk8PDE+Pj4yMSktMTAyM30sZS5leHBvcnRzLmZyYWN0aW9uPWZ1bmN0aW9uKHQpe3ZhciByPWUuZXhwb3J0cy5sbyh0KSxuPWUuZXhwb3J0cy5oaSh0KSxpPTEwNDg1NzUmbjtyZXR1cm4gMjE0NjQzNTA3MiZuJiYoaSs9MTw8MjApLFtyLGldfSxlLmV4cG9ydHMuZGVub3JtYWxpemVkPWZ1bmN0aW9uKHQpe3JldHVybiEoMjE0NjQzNTA3MiZlLmV4cG9ydHMuaGkodCkpfX0pLmNhbGwodGhpcyx0KFwiYnVmZmVyXCIpLkJ1ZmZlcil9LHtidWZmZXI6OTZ9XSwxNjA6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiYWJzLXN2Zy1wYXRoXCIpLGk9dChcIm5vcm1hbGl6ZS1zdmctcGF0aFwiKSxhPXtNOlwibW92ZVRvXCIsQzpcImJlemllckN1cnZlVG9cIn07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5iZWdpblBhdGgoKSxpKG4oZSkpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHI9ZVswXSxuPWUuc2xpY2UoMSk7dFthW3JdXS5hcHBseSh0LG4pfSksdC5jbG9zZVBhdGgoKX19LHtcImFicy1zdmctcGF0aFwiOjUxLFwibm9ybWFsaXplLXN2Zy1wYXRoXCI6NDQ1fV0sMTYxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlXCJpbnQ4XCI6cmV0dXJuIEludDhBcnJheTtjYXNlXCJpbnQxNlwiOnJldHVybiBJbnQxNkFycmF5O2Nhc2VcImludDMyXCI6cmV0dXJuIEludDMyQXJyYXk7Y2FzZVwidWludDhcIjpyZXR1cm4gVWludDhBcnJheTtjYXNlXCJ1aW50MTZcIjpyZXR1cm4gVWludDE2QXJyYXk7Y2FzZVwidWludDMyXCI6cmV0dXJuIFVpbnQzMkFycmF5O2Nhc2VcImZsb2F0MzJcIjpyZXR1cm4gRmxvYXQzMkFycmF5O2Nhc2VcImZsb2F0NjRcIjpyZXR1cm4gRmxvYXQ2NEFycmF5O2Nhc2VcImFycmF5XCI6cmV0dXJuIEFycmF5O2Nhc2VcInVpbnQ4X2NsYW1wZWRcIjpyZXR1cm4gVWludDhDbGFtcGVkQXJyYXl9fX0se31dLDE2MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3N3aXRjaChcInVuZGVmaW5lZFwiPT10eXBlb2YgZSYmKGU9MCksdHlwZW9mIHQpe2Nhc2VcIm51bWJlclwiOmlmKHQ+MClyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcixuO2ZvcihyPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWU7cmV0dXJuIHJ9KDB8dCxlKTticmVhaztjYXNlXCJvYmplY3RcIjppZihcIm51bWJlclwiPT10eXBlb2YgdC5sZW5ndGgpcmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4pe3ZhciBpPTB8ZVtuXTtpZihpPD0wKXJldHVybltdO3ZhciBhLG89bmV3IEFycmF5KGkpO2lmKG49PT1lLmxlbmd0aC0xKWZvcihhPTA7YTxpOysrYSlvW2FdPXI7ZWxzZSBmb3IoYT0wO2E8aTsrK2Epb1thXT10KGUscixuKzEpO3JldHVybiBvfSh0LGUsMCl9cmV0dXJuW119fSx7fV0sMTYzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUscil7cj1yfHwyO3ZhciBuLHMsbCxjLHUscCxnLHY9ZSYmZS5sZW5ndGgsbT12P2VbMF0qcjp0Lmxlbmd0aCx5PWkodCwwLG0sciwhMCkseD1bXTtpZigheSlyZXR1cm4geDtpZih2JiYoeT1mdW5jdGlvbih0LGUscixuKXt2YXIgbyxzLGwsYyx1LHA9W107Zm9yKG89MCxzPWUubGVuZ3RoO288cztvKyspbD1lW29dKm4sYz1vPHMtMT9lW28rMV0qbjp0Lmxlbmd0aCwodT1pKHQsbCxjLG4sITEpKT09PXUubmV4dCYmKHUuc3RlaW5lcj0hMCkscC5wdXNoKGQodSkpO2ZvcihwLnNvcnQoaCksbz0wO288cC5sZW5ndGg7bysrKWYocFtvXSxyKSxyPWEocixyLm5leHQpO3JldHVybiByfSh0LGUseSxyKSksdC5sZW5ndGg+ODAqcil7bj1sPXRbMF0scz1jPXRbMV07Zm9yKHZhciBiPXI7YjxtO2IrPXIpKHU9dFtiXSk8biYmKG49dSksKHA9dFtiKzFdKTxzJiYocz1wKSx1PmwmJihsPXUpLHA+YyYmKGM9cCk7Zz0wIT09KGc9TWF0aC5tYXgobC1uLGMtcykpPzEvZzowfXJldHVybiBvKHkseCxyLG4scyxnKSx4fWZ1bmN0aW9uIGkodCxlLHIsbixpKXt2YXIgYSxvO2lmKGk9PT1UKHQsZSxyLG4pPjApZm9yKGE9ZTthPHI7YSs9bilvPXcoYSx0W2FdLHRbYSsxXSxvKTtlbHNlIGZvcihhPXItbjthPj1lO2EtPW4pbz13KGEsdFthXSx0W2ErMV0sbyk7cmV0dXJuIG8mJnkobyxvLm5leHQpJiYoayhvKSxvPW8ubmV4dCksb31mdW5jdGlvbiBhKHQsZSl7aWYoIXQpcmV0dXJuIHQ7ZXx8KGU9dCk7dmFyIHIsbj10O2Rve2lmKHI9ITEsbi5zdGVpbmVyfHwheShuLG4ubmV4dCkmJjAhPT1tKG4ucHJldixuLG4ubmV4dCkpbj1uLm5leHQ7ZWxzZXtpZihrKG4pLChuPWU9bi5wcmV2KT09PW4ubmV4dClicmVhaztyPSEwfX13aGlsZShyfHxuIT09ZSk7cmV0dXJuIGV9ZnVuY3Rpb24gbyh0LGUscixuLGksaCxmKXtpZih0KXshZiYmaCYmZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dDtkb3tudWxsPT09aS56JiYoaS56PXAoaS54LGkueSxlLHIsbikpLGkucHJldlo9aS5wcmV2LGkubmV4dFo9aS5uZXh0LGk9aS5uZXh0fXdoaWxlKGkhPT10KTtpLnByZXZaLm5leHRaPW51bGwsaS5wcmV2Wj1udWxsLGZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbyxzLGwsYz0xO2Rve2ZvcihyPXQsdD1udWxsLGE9bnVsbCxvPTA7cjspe2ZvcihvKyssbj1yLHM9MCxlPTA7ZTxjJiYocysrLG49bi5uZXh0Wik7ZSsrKTtmb3IobD1jO3M+MHx8bD4wJiZuOykwIT09cyYmKDA9PT1sfHwhbnx8ci56PD1uLnopPyhpPXIscj1yLm5leHRaLHMtLSk6KGk9bixuPW4ubmV4dFosbC0tKSxhP2EubmV4dFo9aTp0PWksaS5wcmV2Wj1hLGE9aTtyPW59YS5uZXh0Wj1udWxsLGMqPTJ9d2hpbGUobz4xKX0oaSl9KHQsbixpLGgpO2Zvcih2YXIgZCxnLHY9dDt0LnByZXYhPT10Lm5leHQ7KWlmKGQ9dC5wcmV2LGc9dC5uZXh0LGg/bCh0LG4saSxoKTpzKHQpKWUucHVzaChkLmkvciksZS5wdXNoKHQuaS9yKSxlLnB1c2goZy5pL3IpLGsodCksdD1nLm5leHQsdj1nLm5leHQ7ZWxzZSBpZigodD1nKT09PXYpe2Y/MT09PWY/byh0PWModCxlLHIpLGUscixuLGksaCwyKToyPT09ZiYmdSh0LGUscixuLGksaCk6byhhKHQpLGUscixuLGksaCwxKTticmVha319fWZ1bmN0aW9uIHModCl7dmFyIGU9dC5wcmV2LHI9dCxuPXQubmV4dDtpZihtKGUscixuKT49MClyZXR1cm4hMTtmb3IodmFyIGk9dC5uZXh0Lm5leHQ7aSE9PXQucHJldjspe2lmKGcoZS54LGUueSxyLngsci55LG4ueCxuLnksaS54LGkueSkmJm0oaS5wcmV2LGksaS5uZXh0KT49MClyZXR1cm4hMTtpPWkubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBsKHQsZSxyLG4pe3ZhciBpPXQucHJldixhPXQsbz10Lm5leHQ7aWYobShpLGEsbyk+PTApcmV0dXJuITE7Zm9yKHZhciBzPWkueDxhLng/aS54PG8ueD9pLng6by54OmEueDxvLng/YS54Om8ueCxsPWkueTxhLnk/aS55PG8ueT9pLnk6by55OmEueTxvLnk/YS55Om8ueSxjPWkueD5hLng/aS54Pm8ueD9pLng6by54OmEueD5vLng/YS54Om8ueCx1PWkueT5hLnk/aS55Pm8ueT9pLnk6by55OmEueT5vLnk/YS55Om8ueSxoPXAocyxsLGUscixuKSxmPXAoYyx1LGUscixuKSxkPXQucHJldlosdj10Lm5leHRaO2QmJmQuej49aCYmdiYmdi56PD1mOyl7aWYoZCE9PXQucHJldiYmZCE9PXQubmV4dCYmZyhpLngsaS55LGEueCxhLnksby54LG8ueSxkLngsZC55KSYmbShkLnByZXYsZCxkLm5leHQpPj0wKXJldHVybiExO2lmKGQ9ZC5wcmV2Wix2IT09dC5wcmV2JiZ2IT09dC5uZXh0JiZnKGkueCxpLnksYS54LGEueSxvLngsby55LHYueCx2LnkpJiZtKHYucHJldix2LHYubmV4dCk+PTApcmV0dXJuITE7dj12Lm5leHRafWZvcig7ZCYmZC56Pj1oOyl7aWYoZCE9PXQucHJldiYmZCE9PXQubmV4dCYmZyhpLngsaS55LGEueCxhLnksby54LG8ueSxkLngsZC55KSYmbShkLnByZXYsZCxkLm5leHQpPj0wKXJldHVybiExO2Q9ZC5wcmV2Wn1mb3IoO3YmJnYuejw9Zjspe2lmKHYhPT10LnByZXYmJnYhPT10Lm5leHQmJmcoaS54LGkueSxhLngsYS55LG8ueCxvLnksdi54LHYueSkmJm0odi5wcmV2LHYsdi5uZXh0KT49MClyZXR1cm4hMTt2PXYubmV4dFp9cmV0dXJuITB9ZnVuY3Rpb24gYyh0LGUscil7dmFyIG49dDtkb3t2YXIgaT1uLnByZXYsYT1uLm5leHQubmV4dDsheShpLGEpJiZ4KGksbixuLm5leHQsYSkmJmIoaSxhKSYmYihhLGkpJiYoZS5wdXNoKGkuaS9yKSxlLnB1c2gobi5pL3IpLGUucHVzaChhLmkvciksayhuKSxrKG4ubmV4dCksbj10PWEpLG49bi5uZXh0fXdoaWxlKG4hPT10KTtyZXR1cm4gbn1mdW5jdGlvbiB1KHQsZSxyLG4saSxzKXt2YXIgbD10O2Rve2Zvcih2YXIgYz1sLm5leHQubmV4dDtjIT09bC5wcmV2Oyl7aWYobC5pIT09Yy5pJiZ2KGwsYykpe3ZhciB1PV8obCxjKTtyZXR1cm4gbD1hKGwsbC5uZXh0KSx1PWEodSx1Lm5leHQpLG8obCxlLHIsbixpLHMpLHZvaWQgbyh1LGUscixuLGkscyl9Yz1jLm5leHR9bD1sLm5leHR9d2hpbGUobCE9PXQpfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdC54LWUueH1mdW5jdGlvbiBmKHQsZSl7aWYoZT1mdW5jdGlvbih0LGUpe3ZhciByLG49ZSxpPXQueCxhPXQueSxvPS0xLzA7ZG97aWYoYTw9bi55JiZhPj1uLm5leHQueSYmbi5uZXh0LnkhPT1uLnkpe3ZhciBzPW4ueCsoYS1uLnkpKihuLm5leHQueC1uLngpLyhuLm5leHQueS1uLnkpO2lmKHM8PWkmJnM+byl7aWYobz1zLHM9PT1pKXtpZihhPT09bi55KXJldHVybiBuO2lmKGE9PT1uLm5leHQueSlyZXR1cm4gbi5uZXh0fXI9bi54PG4ubmV4dC54P246bi5uZXh0fX1uPW4ubmV4dH13aGlsZShuIT09ZSk7aWYoIXIpcmV0dXJuIG51bGw7aWYoaT09PW8pcmV0dXJuIHIucHJldjt2YXIgbCxjPXIsdT1yLngsaD1yLnksZj0xLzA7bj1yLm5leHQ7Zm9yKDtuIT09YzspaT49bi54JiZuLng+PXUmJmkhPT1uLngmJmcoYTxoP2k6byxhLHUsaCxhPGg/bzppLGEsbi54LG4ueSkmJigobD1NYXRoLmFicyhhLW4ueSkvKGktbi54KSk8Znx8bD09PWYmJm4ueD5yLngpJiZiKG4sdCkmJihyPW4sZj1sKSxuPW4ubmV4dDtyZXR1cm4gcn0odCxlKSl7dmFyIHI9XyhlLHQpO2EocixyLm5leHQpfX1mdW5jdGlvbiBwKHQsZSxyLG4saSl7cmV0dXJuKHQ9MTQzMTY1NTc2NSYoKHQ9ODU4OTkzNDU5JigodD0yNTI2NDUxMzUmKCh0PTE2NzExOTM1JigodD0zMjc2NyoodC1yKSppKXx0PDw4KSl8dDw8NCkpfHQ8PDIpKXx0PDwxKSl8KGU9MTQzMTY1NTc2NSYoKGU9ODU4OTkzNDU5JigoZT0yNTI2NDUxMzUmKChlPTE2NzExOTM1JigoZT0zMjc2NyooZS1uKSppKXxlPDw4KSl8ZTw8NCkpfGU8PDIpKXxlPDwxKSk8PDF9ZnVuY3Rpb24gZCh0KXt2YXIgZT10LHI9dDtkb3tlLng8ci54JiYocj1lKSxlPWUubmV4dH13aGlsZShlIT09dCk7cmV0dXJuIHJ9ZnVuY3Rpb24gZyh0LGUscixuLGksYSxvLHMpe3JldHVybihpLW8pKihlLXMpLSh0LW8pKihhLXMpPj0wJiYodC1vKSoobi1zKS0oci1vKSooZS1zKT49MCYmKHItbykqKGEtcyktKGktbykqKG4tcyk+PTB9ZnVuY3Rpb24gdih0LGUpe3JldHVybiB0Lm5leHQuaSE9PWUuaSYmdC5wcmV2LmkhPT1lLmkmJiFmdW5jdGlvbih0LGUpe3ZhciByPXQ7ZG97aWYoci5pIT09dC5pJiZyLm5leHQuaSE9PXQuaSYmci5pIT09ZS5pJiZyLm5leHQuaSE9PWUuaSYmeChyLHIubmV4dCx0LGUpKXJldHVybiEwO3I9ci5uZXh0fXdoaWxlKHIhPT10KTtyZXR1cm4hMX0odCxlKSYmYih0LGUpJiZiKGUsdCkmJmZ1bmN0aW9uKHQsZSl7dmFyIHI9dCxuPSExLGk9KHQueCtlLngpLzIsYT0odC55K2UueSkvMjtkb3tyLnk+YSE9ci5uZXh0Lnk+YSYmci5uZXh0LnkhPT1yLnkmJmk8KHIubmV4dC54LXIueCkqKGEtci55KS8oci5uZXh0Lnktci55KStyLngmJihuPSFuKSxyPXIubmV4dH13aGlsZShyIT09dCk7cmV0dXJuIG59KHQsZSl9ZnVuY3Rpb24gbSh0LGUscil7cmV0dXJuKGUueS10LnkpKihyLngtZS54KS0oZS54LXQueCkqKHIueS1lLnkpfWZ1bmN0aW9uIHkodCxlKXtyZXR1cm4gdC54PT09ZS54JiZ0Lnk9PT1lLnl9ZnVuY3Rpb24geCh0LGUscixuKXtyZXR1cm4hISh5KHQsZSkmJnkocixuKXx8eSh0LG4pJiZ5KHIsZSkpfHxtKHQsZSxyKT4wIT1tKHQsZSxuKT4wJiZtKHIsbix0KT4wIT1tKHIsbixlKT4wfWZ1bmN0aW9uIGIodCxlKXtyZXR1cm4gbSh0LnByZXYsdCx0Lm5leHQpPDA/bSh0LGUsdC5uZXh0KT49MCYmbSh0LHQucHJldixlKT49MDptKHQsZSx0LnByZXYpPDB8fG0odCx0Lm5leHQsZSk8MH1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9bmV3IEEodC5pLHQueCx0LnkpLG49bmV3IEEoZS5pLGUueCxlLnkpLGk9dC5uZXh0LGE9ZS5wcmV2O3JldHVybiB0Lm5leHQ9ZSxlLnByZXY9dCxyLm5leHQ9aSxpLnByZXY9cixuLm5leHQ9cixyLnByZXY9bixhLm5leHQ9bixuLnByZXY9YSxufWZ1bmN0aW9uIHcodCxlLHIsbil7dmFyIGk9bmV3IEEodCxlLHIpO3JldHVybiBuPyhpLm5leHQ9bi5uZXh0LGkucHJldj1uLG4ubmV4dC5wcmV2PWksbi5uZXh0PWkpOihpLnByZXY9aSxpLm5leHQ9aSksaX1mdW5jdGlvbiBrKHQpe3QubmV4dC5wcmV2PXQucHJldix0LnByZXYubmV4dD10Lm5leHQsdC5wcmV2WiYmKHQucHJldloubmV4dFo9dC5uZXh0WiksdC5uZXh0WiYmKHQubmV4dFoucHJldlo9dC5wcmV2Wil9ZnVuY3Rpb24gQSh0LGUscil7dGhpcy5pPXQsdGhpcy54PWUsdGhpcy55PXIsdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy56PW51bGwsdGhpcy5wcmV2Wj1udWxsLHRoaXMubmV4dFo9bnVsbCx0aGlzLnN0ZWluZXI9ITF9ZnVuY3Rpb24gVCh0LGUscixuKXtmb3IodmFyIGk9MCxhPWUsbz1yLW47YTxyO2ErPW4paSs9KHRbb10tdFthXSkqKHRbYSsxXSt0W28rMV0pLG89YTtyZXR1cm4gaX1lLmV4cG9ydHM9bixlLmV4cG9ydHMuZGVmYXVsdD1uLG4uZGV2aWF0aW9uPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWUmJmUubGVuZ3RoLGE9aT9lWzBdKnI6dC5sZW5ndGgsbz1NYXRoLmFicyhUKHQsMCxhLHIpKTtpZihpKWZvcih2YXIgcz0wLGw9ZS5sZW5ndGg7czxsO3MrKyl7dmFyIGM9ZVtzXSpyLHU9czxsLTE/ZVtzKzFdKnI6dC5sZW5ndGg7by09TWF0aC5hYnMoVCh0LGMsdSxyKSl9dmFyIGg9MDtmb3Iocz0wO3M8bi5sZW5ndGg7cys9Myl7dmFyIGY9bltzXSpyLHA9bltzKzFdKnIsZD1uW3MrMl0qcjtoKz1NYXRoLmFicygodFtmXS10W2RdKSoodFtwKzFdLXRbZisxXSktKHRbZl0tdFtwXSkqKHRbZCsxXS10W2YrMV0pKX1yZXR1cm4gMD09PW8mJjA9PT1oPzA6TWF0aC5hYnMoKGgtbykvbyl9LG4uZmxhdHRlbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dFswXVswXS5sZW5ndGgscj17dmVydGljZXM6W10saG9sZXM6W10sZGltZW5zaW9uczplfSxuPTAsaT0wO2k8dC5sZW5ndGg7aSsrKXtmb3IodmFyIGE9MDthPHRbaV0ubGVuZ3RoO2ErKylmb3IodmFyIG89MDtvPGU7bysrKXIudmVydGljZXMucHVzaCh0W2ldW2FdW29dKTtpPjAmJihuKz10W2ktMV0ubGVuZ3RoLHIuaG9sZXMucHVzaChuKSl9cmV0dXJuIHJ9fSx7fV0sMTY0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUpe2U9MDtmb3IodmFyIGk9MDtpPHI7KytpKXt2YXIgYT10W2ldO2U9TWF0aC5tYXgoZSxhWzBdLGFbMV0pfWU9MSsoMHxlKX1lfD0wO2Zvcih2YXIgbz1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpb1tpXT1bXTtmb3IodmFyIGk9MDtpPHI7KytpKXt2YXIgYT10W2ldO29bYVswXV0ucHVzaChhWzFdKSxvW2FbMV1dLnB1c2goYVswXSl9Zm9yKHZhciBzPTA7czxlOysrcyluKG9bc10sZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSk7cmV0dXJuIG99O3ZhciBuPXQoXCJ1bmlxXCIpfSx7dW5pcTo1MzJ9XSwxNjU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwic3Ryb25nbHktY29ubmVjdGVkLWNvbXBvbmVudHNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHI9W10saT1bXSxhPVtdLG89e30scz1bXTtmdW5jdGlvbiBsKHQpe3ZhciByLG4sdT0hMTtmb3IoaS5wdXNoKHQpLGFbdF09ITAscj0wO3I8c1t0XS5sZW5ndGg7cisrKShuPXNbdF1bcl0pPT09ZT8oYyhlLGkpLHU9ITApOmFbbl18fCh1PWwobikpO2lmKHUpIWZ1bmN0aW9uIHQoZSl7YVtlXT0hMSxvLmhhc093blByb3BlcnR5KGUpJiZPYmplY3Qua2V5cyhvW2VdKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2RlbGV0ZSBvW2VdW3JdLGFbcl0mJnQocil9KX0odCk7ZWxzZSBmb3Iocj0wO3I8c1t0XS5sZW5ndGg7cisrKXtuPXNbdF1bcl07dmFyIGg9b1tuXTtofHwoaD17fSxvW25dPWgpLGhbbl09ITB9cmV0dXJuIGkucG9wKCksdX1mdW5jdGlvbiBjKHQsZSl7dmFyIG49W10uY29uY2F0KGUpLmNvbmNhdCh0KTtyLnB1c2gobil9ZnVuY3Rpb24gdShlKXshZnVuY3Rpb24oZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspcjxlJiYodFtyXT1bXSksdFtyXT10W3JdLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdD49ZX0pfShlKTtmb3IodmFyIHIsaT1uKHQpLmNvbXBvbmVudHMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aD4xfSksYT0xLzAsbz0wO288aS5sZW5ndGg7bysrKWZvcih2YXIgcz0wO3M8aVtvXS5sZW5ndGg7cysrKWlbb11bc108YSYmKGE9aVtvXVtzXSxyPW8pO3ZhciBsPWlbcl07cmV0dXJuISFsJiZ7bGVhc3RWZXJ0ZXg6YSxhZGpMaXN0OnQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuLTE9PT1sLmluZGV4T2YoZSk/W106dC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1sLmluZGV4T2YodCl9KX0pfX1lPTA7Zm9yKHZhciBoPXQubGVuZ3RoO2U8aDspe3ZhciBmPXUoZSk7aWYoZT1mLmxlYXN0VmVydGV4LHM9Zi5hZGpMaXN0KXtmb3IodmFyIHA9MDtwPHMubGVuZ3RoO3ArKylmb3IodmFyIGQ9MDtkPHNbcF0ubGVuZ3RoO2QrKyl7dmFyIGc9c1twXVtkXTthWytnXT0hMSxvW2ddPXt9fWwoZSksZSs9MX1lbHNlIGU9aH1yZXR1cm4gcn19LHtcInN0cm9uZ2x5LWNvbm5lY3RlZC1jb21wb25lbnRzXCI6NTE1fV0sMTY2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL29iamVjdC92YWxpZC12YWx1ZVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzKS5sZW5ndGg9MCx0aGlzfX0se1wiLi4vLi4vb2JqZWN0L3ZhbGlkLXZhbHVlXCI6MTk4fV0sMTY3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuL2lzLWltcGxlbWVudGVkXCIpKCk/QXJyYXkuZnJvbTp0KFwiLi9zaGltXCIpfSx7XCIuL2lzLWltcGxlbWVudGVkXCI6MTY4LFwiLi9zaGltXCI6MTY5fV0sMTY4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQsZSxyPUFycmF5LmZyb207cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgciYmKGU9cih0PVtcInJhelwiLFwiZHdhXCJdKSxCb29sZWFuKGUmJmUhPT10JiZcImR3YVwiPT09ZVsxXSkpfX0se31dLDE2OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJlczYtc3ltYm9sXCIpLml0ZXJhdG9yLGk9dChcIi4uLy4uL2Z1bmN0aW9uL2lzLWFyZ3VtZW50c1wiKSxhPXQoXCIuLi8uLi9mdW5jdGlvbi9pcy1mdW5jdGlvblwiKSxvPXQoXCIuLi8uLi9udW1iZXIvdG8tcG9zLWludGVnZXJcIikscz10KFwiLi4vLi4vb2JqZWN0L3ZhbGlkLWNhbGxhYmxlXCIpLGw9dChcIi4uLy4uL29iamVjdC92YWxpZC12YWx1ZVwiKSxjPXQoXCIuLi8uLi9vYmplY3QvaXMtdmFsdWVcIiksdT10KFwiLi4vLi4vc3RyaW5nL2lzLXN0cmluZ1wiKSxoPUFycmF5LmlzQXJyYXksZj1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxwPXtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpudWxsfSxkPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixnLHYsbSx5LHgsYixfLHcsaz1hcmd1bWVudHNbMV0sQT1hcmd1bWVudHNbMl07aWYodD1PYmplY3QobCh0KSksYyhrKSYmcyhrKSx0aGlzJiZ0aGlzIT09QXJyYXkmJmEodGhpcykpZT10aGlzO2Vsc2V7aWYoIWspe2lmKGkodCkpcmV0dXJuIDEhPT0obT10Lmxlbmd0aCk/QXJyYXkuYXBwbHkobnVsbCx0KTooKHY9bmV3IEFycmF5KDEpKVswXT10WzBdLHYpO2lmKGgodCkpe2Zvcih2PW5ldyBBcnJheShtPXQubGVuZ3RoKSxyPTA7cjxtOysrcil2W3JdPXRbcl07cmV0dXJuIHZ9fXY9W119aWYoIWgodCkpaWYodm9pZCAwIT09KF89dFtuXSkpe2Zvcih4PXMoXykuY2FsbCh0KSxlJiYodj1uZXcgZSksYj14Lm5leHQoKSxyPTA7IWIuZG9uZTspdz1rP2YuY2FsbChrLEEsYi52YWx1ZSxyKTpiLnZhbHVlLGU/KHAudmFsdWU9dyxkKHYscixwKSk6dltyXT13LGI9eC5uZXh0KCksKytyO209cn1lbHNlIGlmKHUodCkpe2ZvcihtPXQubGVuZ3RoLGUmJih2PW5ldyBlKSxyPTAsZz0wO3I8bTsrK3Ipdz10W3JdLHIrMTxtJiYoeT13LmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmeTw9NTYzMTkmJih3Kz10Wysrcl0pLHc9az9mLmNhbGwoayxBLHcsZyk6dyxlPyhwLnZhbHVlPXcsZCh2LGcscCkpOnZbZ109dywrK2c7bT1nfWlmKHZvaWQgMD09PW0pZm9yKG09byh0Lmxlbmd0aCksZSYmKHY9bmV3IGUobSkpLHI9MDtyPG07KytyKXc9az9mLmNhbGwoayxBLHRbcl0scik6dFtyXSxlPyhwLnZhbHVlPXcsZCh2LHIscCkpOnZbcl09dztyZXR1cm4gZSYmKHAudmFsdWU9bnVsbCx2Lmxlbmd0aD1tKSx2fX0se1wiLi4vLi4vZnVuY3Rpb24vaXMtYXJndW1lbnRzXCI6MTcwLFwiLi4vLi4vZnVuY3Rpb24vaXMtZnVuY3Rpb25cIjoxNzEsXCIuLi8uLi9udW1iZXIvdG8tcG9zLWludGVnZXJcIjoxNzcsXCIuLi8uLi9vYmplY3QvaXMtdmFsdWVcIjoxODcsXCIuLi8uLi9vYmplY3QvdmFsaWQtY2FsbGFibGVcIjoxOTYsXCIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWVcIjoxOTgsXCIuLi8uLi9zdHJpbmcvaXMtc3RyaW5nXCI6MjAyLFwiZXM2LXN5bWJvbFwiOjIxMn1dLDE3MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaT1uLmNhbGwoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4uY2FsbCh0KT09PWl9fSx7fV0sMTcxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxpPW4uY2FsbCh0KFwiLi9ub29wXCIpKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmbi5jYWxsKHQpPT09aX19LHtcIi4vbm9vcFwiOjE3Mn1dLDE3MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbigpe319LHt9XSwxNzM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4vaXMtaW1wbGVtZW50ZWRcIikoKT9NYXRoLnNpZ246dChcIi4vc2hpbVwiKX0se1wiLi9pcy1pbXBsZW1lbnRlZFwiOjE3NCxcIi4vc2hpbVwiOjE3NX1dLDE3NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PU1hdGguc2lnbjtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiYoMT09PXQoMTApJiYtMT09PXQoLTIwKSl9fSx7fV0sMTc1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PU51bWJlcih0KSxpc05hTih0KXx8MD09PXQ/dDp0PjA/MTotMX19LHt9XSwxNzY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vbWF0aC9zaWduXCIpLGk9TWF0aC5hYnMsYT1NYXRoLmZsb29yO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaXNOYU4odCk/MDowIT09KHQ9TnVtYmVyKHQpKSYmaXNGaW5pdGUodCk/bih0KSphKGkodCkpOnR9fSx7XCIuLi9tYXRoL3NpZ25cIjoxNzN9XSwxNzc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi90by1pbnRlZ2VyXCIpLGk9TWF0aC5tYXg7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKDAsbih0KSl9fSx7XCIuL3RvLWludGVnZXJcIjoxNzZ9XSwxNzg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi92YWxpZC1jYWxsYWJsZVwiKSxpPXQoXCIuL3ZhbGlkLXZhbHVlXCIpLGE9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsbz1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxzPU9iamVjdC5rZXlzLGw9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocixjKXt2YXIgdSxoPWFyZ3VtZW50c1syXSxmPWFyZ3VtZW50c1szXTtyZXR1cm4gcj1PYmplY3QoaShyKSksbihjKSx1PXMociksZiYmdS5zb3J0KFwiZnVuY3Rpb25cIj09dHlwZW9mIGY/YS5jYWxsKGYscik6dm9pZCAwKSxcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiYodD11W3RdKSxvLmNhbGwodCx1LGZ1bmN0aW9uKHQsbil7cmV0dXJuIGwuY2FsbChyLHQpP28uY2FsbChjLGgsclt0XSx0LHIsbik6ZX0pfX19LHtcIi4vdmFsaWQtY2FsbGFibGVcIjoxOTYsXCIuL3ZhbGlkLXZhbHVlXCI6MTk4fV0sMTc5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuL2lzLWltcGxlbWVudGVkXCIpKCk/T2JqZWN0LmFzc2lnbjp0KFwiLi9zaGltXCIpfSx7XCIuL2lzLWltcGxlbWVudGVkXCI6MTgwLFwiLi9zaGltXCI6MTgxfV0sMTgwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQsZT1PYmplY3QuYXNzaWduO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihlKHQ9e2ZvbzpcInJhelwifSx7YmFyOlwiZHdhXCJ9LHt0cnp5OlwidHJ6eVwifSksdC5mb28rdC5iYXIrdC50cnp5PT09XCJyYXpkd2F0cnp5XCIpfX0se31dLDE4MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9rZXlzXCIpLGk9dChcIi4uL3ZhbGlkLXZhbHVlXCIpLGE9TWF0aC5tYXg7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbyxzLGw9YShhcmd1bWVudHMubGVuZ3RoLDIpO2Zvcih0PU9iamVjdChpKHQpKSxzPWZ1bmN0aW9uKG4pe3RyeXt0W25dPWVbbl19Y2F0Y2godCl7cnx8KHI9dCl9fSxvPTE7bzxsOysrbyllPWFyZ3VtZW50c1tvXSxuKGUpLmZvckVhY2gocyk7aWYodm9pZCAwIT09cil0aHJvdyByO3JldHVybiB0fX0se1wiLi4va2V5c1wiOjE4OCxcIi4uL3ZhbGlkLXZhbHVlXCI6MTk4fV0sMTgyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2FycmF5L2Zyb21cIiksaT10KFwiLi9hc3NpZ25cIiksYT10KFwiLi92YWxpZC12YWx1ZVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KGEodCkpLHI9YXJndW1lbnRzWzFdLG89T2JqZWN0KGFyZ3VtZW50c1syXSk7aWYoZSE9PXQmJiFyKXJldHVybiBlO3ZhciBzPXt9O3JldHVybiByP24ocixmdW5jdGlvbihlKXsoby5lbnN1cmV8fGUgaW4gdCkmJihzW2VdPXRbZV0pfSk6aShzLHQpLHN9fSx7XCIuLi9hcnJheS9mcm9tXCI6MTY3LFwiLi9hc3NpZ25cIjoxNzksXCIuL3ZhbGlkLXZhbHVlXCI6MTk4fV0sMTgzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saSxhLG8scz1PYmplY3QuY3JlYXRlO3QoXCIuL3NldC1wcm90b3R5cGUtb2YvaXMtaW1wbGVtZW50ZWRcIikoKXx8KG49dChcIi4vc2V0LXByb3RvdHlwZS1vZi9zaGltXCIpKSxlLmV4cG9ydHM9bj8xIT09bi5sZXZlbD9zOihpPXt9LGE9e30sbz17Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSxPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPYmplY3QucHJvdG90eXBlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2FbdF09XCJfX3Byb3RvX19cIiE9PXQ/bzp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGksYSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sXCJudWxsUG9seWZpbGxcIix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITEsdmFsdWU6aX0pLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHMobnVsbD09PXQ/aTp0LGUpfSk6c30se1wiLi9zZXQtcHJvdG90eXBlLW9mL2lzLWltcGxlbWVudGVkXCI6MTk0LFwiLi9zZXQtcHJvdG90eXBlLW9mL3NoaW1cIjoxOTV9XSwxODQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4vX2l0ZXJhdGVcIikoXCJmb3JFYWNoXCIpfSx7XCIuL19pdGVyYXRlXCI6MTc4fV0sMTg1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHR9fSx7fV0sMTg2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vaXMtdmFsdWVcIiksaT17ZnVuY3Rpb246ITAsb2JqZWN0OiEwfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4odCkmJmlbdHlwZW9mIHRdfHwhMX19LHtcIi4vaXMtdmFsdWVcIjoxODd9XSwxODc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vZnVuY3Rpb24vbm9vcFwiKSgpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCE9PW4mJm51bGwhPT10fX0se1wiLi4vZnVuY3Rpb24vbm9vcFwiOjE3Mn1dLDE4ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi9pcy1pbXBsZW1lbnRlZFwiKSgpP09iamVjdC5rZXlzOnQoXCIuL3NoaW1cIil9LHtcIi4vaXMtaW1wbGVtZW50ZWRcIjoxODksXCIuL3NoaW1cIjoxOTB9XSwxODk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIE9iamVjdC5rZXlzKFwicHJpbWl0aXZlXCIpLCEwfWNhdGNoKHQpe3JldHVybiExfX19LHt9XSwxOTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vaXMtdmFsdWVcIiksaT1PYmplY3Qua2V5cztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkobih0KT9PYmplY3QodCk6dCl9fSx7XCIuLi9pcy12YWx1ZVwiOjE4N31dLDE5MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL3ZhbGlkLWNhbGxhYmxlXCIpLGk9dChcIi4vZm9yLWVhY2hcIiksYT1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17fSxvPWFyZ3VtZW50c1syXTtyZXR1cm4gbihlKSxpKHQsZnVuY3Rpb24odCxuLGkscyl7cltuXT1hLmNhbGwoZSxvLHQsbixpLHMpfSkscn19LHtcIi4vZm9yLWVhY2hcIjoxODQsXCIuL3ZhbGlkLWNhbGxhYmxlXCI6MTk2fV0sMTkyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vaXMtdmFsdWVcIiksaT1BcnJheS5wcm90b3R5cGUuZm9yRWFjaCxhPU9iamVjdC5jcmVhdGU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWEobnVsbCk7cmV0dXJuIGkuY2FsbChhcmd1bWVudHMsZnVuY3Rpb24odCl7bih0KSYmZnVuY3Rpb24odCxlKXt2YXIgcjtmb3IociBpbiB0KWVbcl09dFtyXX0oT2JqZWN0KHQpLGUpfSksZX19LHtcIi4vaXMtdmFsdWVcIjoxODd9XSwxOTM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4vaXMtaW1wbGVtZW50ZWRcIikoKT9PYmplY3Quc2V0UHJvdG90eXBlT2Y6dChcIi4vc2hpbVwiKX0se1wiLi9pcy1pbXBsZW1lbnRlZFwiOjE5NCxcIi4vc2hpbVwiOjE5NX1dLDE5NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPU9iamVjdC5jcmVhdGUsaT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYT17fTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1PYmplY3Quc2V0UHJvdG90eXBlT2YsZT1hcmd1bWVudHNbMF18fG47cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmaSh0KGUobnVsbCksYSkpPT09YX19LHt9XSwxOTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbixpLGEsbyxzPXQoXCIuLi9pcy1vYmplY3RcIiksbD10KFwiLi4vdmFsaWQtdmFsdWVcIiksYz1PYmplY3QucHJvdG90eXBlLmlzUHJvdG90eXBlT2YsdT1PYmplY3QuZGVmaW5lUHJvcGVydHksaD17Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfTtuPWZ1bmN0aW9uKHQsZSl7aWYobCh0KSxudWxsPT09ZXx8cyhlKSlyZXR1cm4gdDt0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJvdG90eXBlIG11c3QgYmUgbnVsbCBvciBhbiBvYmplY3RcIil9LGUuZXhwb3J0cz0oaT1mdW5jdGlvbigpe3ZhciB0LGU9T2JqZWN0LmNyZWF0ZShudWxsKSxyPXt9LG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLFwiX19wcm90b19fXCIpO2lmKG4pe3RyeXsodD1uLnNldCkuY2FsbChlLHIpfWNhdGNoKHQpe31pZihPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1yKXJldHVybntzZXQ6dCxsZXZlbDoyfX1yZXR1cm4gZS5fX3Byb3RvX189cixPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1yP3tsZXZlbDoyfTooKGU9e30pLl9fcHJvdG9fXz1yLE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PXImJntsZXZlbDoxfSl9KCkpPygyPT09aS5sZXZlbD9pLnNldD8obz1pLnNldCxhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8uY2FsbChuKHQsZSksZSksdH0pOmE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LGUpLl9fcHJvdG9fXz1lLHR9OmE9ZnVuY3Rpb24gdChlLHIpe3ZhciBpO3JldHVybiBuKGUsciksKGk9Yy5jYWxsKHQubnVsbFBvbHlmaWxsLGUpKSYmZGVsZXRlIHQubnVsbFBvbHlmaWxsLl9fcHJvdG9fXyxudWxsPT09ciYmKHI9dC5udWxsUG9seWZpbGwpLGUuX19wcm90b19fPXIsaSYmdSh0Lm51bGxQb2x5ZmlsbCxcIl9fcHJvdG9fX1wiLGgpLGV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLFwibGV2ZWxcIix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITEsdmFsdWU6aS5sZXZlbH0pKTpudWxsLHQoXCIuLi9jcmVhdGVcIil9LHtcIi4uL2NyZWF0ZVwiOjE4MyxcIi4uL2lzLW9iamVjdFwiOjE4NixcIi4uL3ZhbGlkLXZhbHVlXCI6MTk4fV0sMTk2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO3JldHVybiB0fX0se31dLDE5NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2lzLW9iamVjdFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhbiBPYmplY3RcIik7cmV0dXJuIHR9fSx7XCIuL2lzLW9iamVjdFwiOjE4Nn1dLDE5ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2lzLXZhbHVlXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSBudWxsIG9yIHVuZGVmaW5lZFwiKTtyZXR1cm4gdH19LHtcIi4vaXMtdmFsdWVcIjoxODd9XSwxOTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4vaXMtaW1wbGVtZW50ZWRcIikoKT9TdHJpbmcucHJvdG90eXBlLmNvbnRhaW5zOnQoXCIuL3NoaW1cIil9LHtcIi4vaXMtaW1wbGVtZW50ZWRcIjoyMDAsXCIuL3NoaW1cIjoyMDF9XSwyMDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1cInJhemR3YXRyenlcIjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBuLmNvbnRhaW5zJiYoITA9PT1uLmNvbnRhaW5zKFwiZHdhXCIpJiYhMT09PW4uY29udGFpbnMoXCJmb29cIikpfX0se31dLDIwMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPVN0cmluZy5wcm90b3R5cGUuaW5kZXhPZjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4uY2FsbCh0aGlzLHQsYXJndW1lbnRzWzFdKT4tMX19LHt9XSwyMDI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGk9bi5jYWxsKFwiXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdHx8dCYmXCJvYmplY3RcIj09dHlwZW9mIHQmJih0IGluc3RhbmNlb2YgU3RyaW5nfHxuLmNhbGwodCk9PT1pKXx8ITF9fSx7fV0sMjAzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxpPU1hdGgucmFuZG9tO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0O2Rve3Q9aSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKX13aGlsZShuW3RdKTtyZXR1cm4gdH19LHt9XSwyMDQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbixpPXQoXCJlczUtZXh0L29iamVjdC9zZXQtcHJvdG90eXBlLW9mXCIpLGE9dChcImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnNcIiksbz10KFwiZFwiKSxzPXQoXCJlczYtc3ltYm9sXCIpLGw9dChcIi4vXCIpLGM9T2JqZWN0LmRlZmluZVByb3BlcnR5O249ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgbikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnXCIpO2wuY2FsbCh0aGlzLHQpLGU9ZT9hLmNhbGwoZSxcImtleSt2YWx1ZVwiKT9cImtleSt2YWx1ZVwiOmEuY2FsbChlLFwia2V5XCIpP1wia2V5XCI6XCJ2YWx1ZVwiOlwidmFsdWVcIixjKHRoaXMsXCJfX2tpbmRfX1wiLG8oXCJcIixlKSl9LGkmJmkobixsKSxkZWxldGUgbi5wcm90b3R5cGUuY29uc3RydWN0b3Isbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShsLnByb3RvdHlwZSx7X3Jlc29sdmU6byhmdW5jdGlvbih0KXtyZXR1cm5cInZhbHVlXCI9PT10aGlzLl9fa2luZF9fP3RoaXMuX19saXN0X19bdF06XCJrZXkrdmFsdWVcIj09PXRoaXMuX19raW5kX18/W3QsdGhpcy5fX2xpc3RfX1t0XV06dH0pfSksYyhuLnByb3RvdHlwZSxzLnRvU3RyaW5nVGFnLG8oXCJjXCIsXCJBcnJheSBJdGVyYXRvclwiKSl9LHtcIi4vXCI6MjA3LGQ6MTQyLFwiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZlwiOjE5MyxcImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnNcIjoxOTksXCJlczYtc3ltYm9sXCI6MjEyfV0sMjA1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzXCIpLGk9dChcImVzNS1leHQvb2JqZWN0L3ZhbGlkLWNhbGxhYmxlXCIpLGE9dChcImVzNS1leHQvc3RyaW5nL2lzLXN0cmluZ1wiKSxvPXQoXCIuL2dldFwiKSxzPUFycmF5LmlzQXJyYXksbD1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxjPUFycmF5LnByb3RvdHlwZS5zb21lO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLHUsaCxmLHAsZCxnLHYsbT1hcmd1bWVudHNbMl07aWYocyh0KXx8bih0KT9yPVwiYXJyYXlcIjphKHQpP3I9XCJzdHJpbmdcIjp0PW8odCksaShlKSxoPWZ1bmN0aW9uKCl7Zj0hMH0sXCJhcnJheVwiIT09cilpZihcInN0cmluZ1wiIT09cilmb3IodT10Lm5leHQoKTshdS5kb25lOyl7aWYobC5jYWxsKGUsbSx1LnZhbHVlLGgpLGYpcmV0dXJuO3U9dC5uZXh0KCl9ZWxzZSBmb3IoZD10Lmxlbmd0aCxwPTA7cDxkJiYoZz10W3BdLHArMTxkJiYodj1nLmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmdjw9NTYzMTkmJihnKz10WysrcF0pLGwuY2FsbChlLG0sZyxoKSwhZik7KytwKTtlbHNlIGMuY2FsbCh0LGZ1bmN0aW9uKHQpe3JldHVybiBsLmNhbGwoZSxtLHQsaCksZn0pfX0se1wiLi9nZXRcIjoyMDYsXCJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50c1wiOjE3MCxcImVzNS1leHQvb2JqZWN0L3ZhbGlkLWNhbGxhYmxlXCI6MTk2LFwiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nXCI6MjAyfV0sMjA2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzXCIpLGk9dChcImVzNS1leHQvc3RyaW5nL2lzLXN0cmluZ1wiKSxhPXQoXCIuL2FycmF5XCIpLG89dChcIi4vc3RyaW5nXCIpLHM9dChcIi4vdmFsaWQtaXRlcmFibGVcIiksbD10KFwiZXM2LXN5bWJvbFwiKS5pdGVyYXRvcjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2Ygcyh0KVtsXT90W2xdKCk6bih0KT9uZXcgYSh0KTppKHQpP25ldyBvKHQpOm5ldyBhKHQpfX0se1wiLi9hcnJheVwiOjIwNCxcIi4vc3RyaW5nXCI6MjA5LFwiLi92YWxpZC1pdGVyYWJsZVwiOjIxMCxcImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzXCI6MTcwLFwiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nXCI6MjAyLFwiZXM2LXN5bWJvbFwiOjIxMn1dLDIwNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuLGk9dChcImVzNS1leHQvYXJyYXkvIy9jbGVhclwiKSxhPXQoXCJlczUtZXh0L29iamVjdC9hc3NpZ25cIiksbz10KFwiZXM1LWV4dC9vYmplY3QvdmFsaWQtY2FsbGFibGVcIikscz10KFwiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWVcIiksbD10KFwiZFwiKSxjPXQoXCJkL2F1dG8tYmluZFwiKSx1PXQoXCJlczYtc3ltYm9sXCIpLGg9T2JqZWN0LmRlZmluZVByb3BlcnR5LGY9T2JqZWN0LmRlZmluZVByb3BlcnRpZXM7ZS5leHBvcnRzPW49ZnVuY3Rpb24odCxlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ29uc3RydWN0b3IgcmVxdWlyZXMgJ25ldydcIik7Zih0aGlzLHtfX2xpc3RfXzpsKFwid1wiLHModCkpLF9fY29udGV4dF9fOmwoXCJ3XCIsZSksX19uZXh0SW5kZXhfXzpsKFwid1wiLDApfSksZSYmKG8oZS5vbiksZS5vbihcIl9hZGRcIix0aGlzLl9vbkFkZCksZS5vbihcIl9kZWxldGVcIix0aGlzLl9vbkRlbGV0ZSksZS5vbihcIl9jbGVhclwiLHRoaXMuX29uQ2xlYXIpKX0sZGVsZXRlIG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yLGYobi5wcm90b3R5cGUsYSh7X25leHQ6bChmdW5jdGlvbigpe3ZhciB0O2lmKHRoaXMuX19saXN0X18pcmV0dXJuIHRoaXMuX19yZWRvX18mJnZvaWQgMCE9PSh0PXRoaXMuX19yZWRvX18uc2hpZnQoKSk/dDp0aGlzLl9fbmV4dEluZGV4X188dGhpcy5fX2xpc3RfXy5sZW5ndGg/dGhpcy5fX25leHRJbmRleF9fKys6dm9pZCB0aGlzLl91bkJpbmQoKX0pLG5leHQ6bChmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVhdGVSZXN1bHQodGhpcy5fbmV4dCgpKX0pLF9jcmVhdGVSZXN1bHQ6bChmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD97ZG9uZTohMCx2YWx1ZTp2b2lkIDB9Ontkb25lOiExLHZhbHVlOnRoaXMuX3Jlc29sdmUodCl9fSksX3Jlc29sdmU6bChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2xpc3RfX1t0XX0pLF91bkJpbmQ6bChmdW5jdGlvbigpe3RoaXMuX19saXN0X189bnVsbCxkZWxldGUgdGhpcy5fX3JlZG9fXyx0aGlzLl9fY29udGV4dF9fJiYodGhpcy5fX2NvbnRleHRfXy5vZmYoXCJfYWRkXCIsdGhpcy5fb25BZGQpLHRoaXMuX19jb250ZXh0X18ub2ZmKFwiX2RlbGV0ZVwiLHRoaXMuX29uRGVsZXRlKSx0aGlzLl9fY29udGV4dF9fLm9mZihcIl9jbGVhclwiLHRoaXMuX29uQ2xlYXIpLHRoaXMuX19jb250ZXh0X189bnVsbCl9KSx0b1N0cmluZzpsKGZ1bmN0aW9uKCl7cmV0dXJuXCJbb2JqZWN0IFwiKyh0aGlzW3UudG9TdHJpbmdUYWddfHxcIk9iamVjdFwiKStcIl1cIn0pfSxjKHtfb25BZGQ6bChmdW5jdGlvbih0KXt0Pj10aGlzLl9fbmV4dEluZGV4X198fCgrK3RoaXMuX19uZXh0SW5kZXhfXyx0aGlzLl9fcmVkb19fPyh0aGlzLl9fcmVkb19fLmZvckVhY2goZnVuY3Rpb24oZSxyKXtlPj10JiYodGhpcy5fX3JlZG9fX1tyXT0rK2UpfSx0aGlzKSx0aGlzLl9fcmVkb19fLnB1c2godCkpOmgodGhpcyxcIl9fcmVkb19fXCIsbChcImNcIixbdF0pKSl9KSxfb25EZWxldGU6bChmdW5jdGlvbih0KXt2YXIgZTt0Pj10aGlzLl9fbmV4dEluZGV4X198fCgtLXRoaXMuX19uZXh0SW5kZXhfXyx0aGlzLl9fcmVkb19fJiYoLTEhPT0oZT10aGlzLl9fcmVkb19fLmluZGV4T2YodCkpJiZ0aGlzLl9fcmVkb19fLnNwbGljZShlLDEpLHRoaXMuX19yZWRvX18uZm9yRWFjaChmdW5jdGlvbihlLHIpe2U+dCYmKHRoaXMuX19yZWRvX19bcl09LS1lKX0sdGhpcykpKX0pLF9vbkNsZWFyOmwoZnVuY3Rpb24oKXt0aGlzLl9fcmVkb19fJiZpLmNhbGwodGhpcy5fX3JlZG9fXyksdGhpcy5fX25leHRJbmRleF9fPTB9KX0pKSksaChuLnByb3RvdHlwZSx1Lml0ZXJhdG9yLGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKX0se2Q6MTQyLFwiZC9hdXRvLWJpbmRcIjoxNDEsXCJlczUtZXh0L2FycmF5LyMvY2xlYXJcIjoxNjYsXCJlczUtZXh0L29iamVjdC9hc3NpZ25cIjoxNzksXCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZVwiOjE5NixcImVzNS1leHQvb2JqZWN0L3ZhbGlkLXZhbHVlXCI6MTk4LFwiZXM2LXN5bWJvbFwiOjIxMn1dLDIwODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50c1wiKSxpPXQoXCJlczUtZXh0L29iamVjdC9pcy12YWx1ZVwiKSxhPXQoXCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmdcIiksbz10KFwiZXM2LXN5bWJvbFwiKS5pdGVyYXRvcixzPUFycmF5LmlzQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEhaSh0KSYmKCEhcyh0KXx8KCEhYSh0KXx8KCEhbih0KXx8XCJmdW5jdGlvblwiPT10eXBlb2YgdFtvXSkpKX19LHtcImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzXCI6MTcwLFwiZXM1LWV4dC9vYmplY3QvaXMtdmFsdWVcIjoxODcsXCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmdcIjoyMDIsXCJlczYtc3ltYm9sXCI6MjEyfV0sMjA5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saT10KFwiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZlwiKSxhPXQoXCJkXCIpLG89dChcImVzNi1zeW1ib2xcIikscz10KFwiLi9cIiksbD1PYmplY3QuZGVmaW5lUHJvcGVydHk7bj1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoISh0aGlzIGluc3RhbmNlb2YgbikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnXCIpO3Q9U3RyaW5nKHQpLHMuY2FsbCh0aGlzLHQpLGwodGhpcyxcIl9fbGVuZ3RoX19cIixhKFwiXCIsdC5sZW5ndGgpKX0saSYmaShuLHMpLGRlbGV0ZSBuLnByb3RvdHlwZS5jb25zdHJ1Y3RvcixuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHMucHJvdG90eXBlLHtfbmV4dDphKGZ1bmN0aW9uKCl7aWYodGhpcy5fX2xpc3RfXylyZXR1cm4gdGhpcy5fX25leHRJbmRleF9fPHRoaXMuX19sZW5ndGhfXz90aGlzLl9fbmV4dEluZGV4X18rKzp2b2lkIHRoaXMuX3VuQmluZCgpfSksX3Jlc29sdmU6YShmdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuX19saXN0X19bdF07cmV0dXJuIHRoaXMuX19uZXh0SW5kZXhfXz09PXRoaXMuX19sZW5ndGhfXz9yOihlPXIuY2hhckNvZGVBdCgwKSk+PTU1Mjk2JiZlPD01NjMxOT9yK3RoaXMuX19saXN0X19bdGhpcy5fX25leHRJbmRleF9fKytdOnJ9KX0pLGwobi5wcm90b3R5cGUsby50b1N0cmluZ1RhZyxhKFwiY1wiLFwiU3RyaW5nIEl0ZXJhdG9yXCIpKX0se1wiLi9cIjoyMDcsZDoxNDIsXCJlczUtZXh0L29iamVjdC9zZXQtcHJvdG90eXBlLW9mXCI6MTkzLFwiZXM2LXN5bWJvbFwiOjIxMn1dLDIxMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2lzLWl0ZXJhYmxlXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKHQrXCIgaXMgbm90IGl0ZXJhYmxlXCIpO3JldHVybiB0fX0se1wiLi9pcy1pdGVyYWJsZVwiOjIwOH1dLDIxMTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihuLGkpeyFmdW5jdGlvbih0LG4pe1wib2JqZWN0XCI9PXR5cGVvZiByJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZT9lLmV4cG9ydHM9bigpOnQuRVM2UHJvbWlzZT1uKCl9KHRoaXMsZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHR9dmFyIHI9QXJyYXkuaXNBcnJheT9BcnJheS5pc0FycmF5OmZ1bmN0aW9uKHQpe3JldHVyblwiW29iamVjdCBBcnJheV1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0sYT0wLG89dm9pZCAwLHM9dm9pZCAwLGw9ZnVuY3Rpb24odCxlKXtnW2FdPXQsZ1thKzFdPWUsMj09PShhKz0yKSYmKHM/cyh2KTpfKCkpfTt2YXIgYz1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp2b2lkIDAsdT1jfHx7fSxoPXUuTXV0YXRpb25PYnNlcnZlcnx8dS5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLGY9XCJ1bmRlZmluZWRcIj09dHlwZW9mIHNlbGYmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBuJiZcIltvYmplY3QgcHJvY2Vzc11cIj09PXt9LnRvU3RyaW5nLmNhbGwobikscD1cInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDhDbGFtcGVkQXJyYXkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBpbXBvcnRTY3JpcHRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgTWVzc2FnZUNoYW5uZWw7ZnVuY3Rpb24gZCgpe3ZhciB0PXNldFRpbWVvdXQ7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodiwxKX19dmFyIGc9bmV3IEFycmF5KDFlMyk7ZnVuY3Rpb24gdigpe2Zvcih2YXIgdD0wO3Q8YTt0Kz0yKXsoMCxnW3RdKShnW3QrMV0pLGdbdF09dm9pZCAwLGdbdCsxXT12b2lkIDB9YT0wfXZhciBtLHkseCxiLF89dm9pZCAwO2Z1bmN0aW9uIHcodCxlKXt2YXIgcj1hcmd1bWVudHMsbj10aGlzLGk9bmV3IHRoaXMuY29uc3RydWN0b3IoVCk7dm9pZCAwPT09aVtBXSYmVShpKTt2YXIgYSxvPW4uX3N0YXRlO3JldHVybiBvPyhhPXJbby0xXSxsKGZ1bmN0aW9uKCl7cmV0dXJuIGoobyxpLGEsbi5fcmVzdWx0KX0pKTpSKG4saSx0LGUpLGl9ZnVuY3Rpb24gayh0KXtpZih0JiZcIm9iamVjdFwiPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3Rvcj09PXRoaXMpcmV0dXJuIHQ7dmFyIGU9bmV3IHRoaXMoVCk7cmV0dXJuIE8oZSx0KSxlfWY/Xz1mdW5jdGlvbigpe3JldHVybiBuLm5leHRUaWNrKHYpfTpoPyh5PTAseD1uZXcgaCh2KSxiPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpLHgub2JzZXJ2ZShiLHtjaGFyYWN0ZXJEYXRhOiEwfSksXz1mdW5jdGlvbigpe2IuZGF0YT15PSsreSUyfSk6cD8oKG09bmV3IE1lc3NhZ2VDaGFubmVsKS5wb3J0MS5vbm1lc3NhZ2U9dixfPWZ1bmN0aW9uKCl7cmV0dXJuIG0ucG9ydDIucG9zdE1lc3NhZ2UoMCl9KTpfPXZvaWQgMD09PWMmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZnVuY3Rpb24oKXt0cnl7dmFyIGU9dChcInZlcnR4XCIpO3JldHVybiBvPWUucnVuT25Mb29wfHxlLnJ1bk9uQ29udGV4dCxmdW5jdGlvbigpe28odil9fWNhdGNoKHQpe3JldHVybiBkKCl9fSgpOmQoKTt2YXIgQT1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMTYpO2Z1bmN0aW9uIFQoKXt9dmFyIE09dm9pZCAwLFM9MSxFPTIsQz1uZXcgQjtmdW5jdGlvbiBMKHQpe3RyeXtyZXR1cm4gdC50aGVufWNhdGNoKHQpe3JldHVybiBDLmVycm9yPXQsQ319ZnVuY3Rpb24geih0LHIsbil7ci5jb25zdHJ1Y3Rvcj09PXQuY29uc3RydWN0b3ImJm49PT13JiZyLmNvbnN0cnVjdG9yLnJlc29sdmU9PT1rP2Z1bmN0aW9uKHQsZSl7ZS5fc3RhdGU9PT1TP0QodCxlLl9yZXN1bHQpOmUuX3N0YXRlPT09RT9QKHQsZS5fcmVzdWx0KTpSKGUsdm9pZCAwLGZ1bmN0aW9uKGUpe3JldHVybiBPKHQsZSl9LGZ1bmN0aW9uKGUpe3JldHVybiBQKHQsZSl9KX0odCxyKTpuPT09Qz9QKHQsQy5lcnJvcik6dm9pZCAwPT09bj9EKHQscik6ZShuKT9mdW5jdGlvbih0LGUscil7bChmdW5jdGlvbih0KXt2YXIgbj0hMSxpPWZ1bmN0aW9uKHQsZSxyLG4pe3RyeXt0LmNhbGwoZSxyLG4pfWNhdGNoKHQpe3JldHVybiB0fX0ocixlLGZ1bmN0aW9uKHIpe258fChuPSEwLGUhPT1yP08odCxyKTpEKHQscikpfSxmdW5jdGlvbihlKXtufHwobj0hMCxQKHQsZSkpfSx0Ll9sYWJlbCk7IW4mJmkmJihuPSEwLFAodCxpKSl9LHQpfSh0LHIsbik6RCh0LHIpfWZ1bmN0aW9uIE8odCxlKXt2YXIgcjt0PT09ZT9QKHQsbmV3IFR5cGVFcnJvcihcIllvdSBjYW5ub3QgcmVzb2x2ZSBhIHByb21pc2Ugd2l0aCBpdHNlbGZcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mKHI9ZSl8fFwib2JqZWN0XCI9PXR5cGVvZiByJiZudWxsIT09cj96KHQsZSxMKGUpKTpEKHQsZSl9ZnVuY3Rpb24gSSh0KXt0Ll9vbmVycm9yJiZ0Ll9vbmVycm9yKHQuX3Jlc3VsdCksRih0KX1mdW5jdGlvbiBEKHQsZSl7dC5fc3RhdGU9PT1NJiYodC5fcmVzdWx0PWUsdC5fc3RhdGU9UywwIT09dC5fc3Vic2NyaWJlcnMubGVuZ3RoJiZsKEYsdCkpfWZ1bmN0aW9uIFAodCxlKXt0Ll9zdGF0ZT09PU0mJih0Ll9zdGF0ZT1FLHQuX3Jlc3VsdD1lLGwoSSx0KSl9ZnVuY3Rpb24gUih0LGUscixuKXt2YXIgaT10Ll9zdWJzY3JpYmVycyxhPWkubGVuZ3RoO3QuX29uZXJyb3I9bnVsbCxpW2FdPWUsaVthK1NdPXIsaVthK0VdPW4sMD09PWEmJnQuX3N0YXRlJiZsKEYsdCl9ZnVuY3Rpb24gRih0KXt2YXIgZT10Ll9zdWJzY3JpYmVycyxyPXQuX3N0YXRlO2lmKDAhPT1lLmxlbmd0aCl7Zm9yKHZhciBuPXZvaWQgMCxpPXZvaWQgMCxhPXQuX3Jlc3VsdCxvPTA7bzxlLmxlbmd0aDtvKz0zKW49ZVtvXSxpPWVbbytyXSxuP2oocixuLGksYSk6aShhKTt0Ll9zdWJzY3JpYmVycy5sZW5ndGg9MH19ZnVuY3Rpb24gQigpe3RoaXMuZXJyb3I9bnVsbH12YXIgTj1uZXcgQjtmdW5jdGlvbiBqKHQscixuLGkpe3ZhciBhPWUobiksbz12b2lkIDAscz12b2lkIDAsbD12b2lkIDAsYz12b2lkIDA7aWYoYSl7aWYoKG89ZnVuY3Rpb24odCxlKXt0cnl7cmV0dXJuIHQoZSl9Y2F0Y2godCl7cmV0dXJuIE4uZXJyb3I9dCxOfX0obixpKSk9PT1OPyhjPSEwLHM9by5lcnJvcixvPW51bGwpOmw9ITAscj09PW8pcmV0dXJuIHZvaWQgUChyLG5ldyBUeXBlRXJyb3IoXCJBIHByb21pc2VzIGNhbGxiYWNrIGNhbm5vdCByZXR1cm4gdGhhdCBzYW1lIHByb21pc2UuXCIpKX1lbHNlIG89aSxsPSEwO3IuX3N0YXRlIT09TXx8KGEmJmw/TyhyLG8pOmM/UChyLHMpOnQ9PT1TP0QocixvKTp0PT09RSYmUChyLG8pKX12YXIgVj0wO2Z1bmN0aW9uIFUodCl7dFtBXT1WKyssdC5fc3RhdGU9dm9pZCAwLHQuX3Jlc3VsdD12b2lkIDAsdC5fc3Vic2NyaWJlcnM9W119ZnVuY3Rpb24gcSh0LGUpe3RoaXMuX2luc3RhbmNlQ29uc3RydWN0b3I9dCx0aGlzLnByb21pc2U9bmV3IHQoVCksdGhpcy5wcm9taXNlW0FdfHxVKHRoaXMucHJvbWlzZSkscihlKT8odGhpcy5faW5wdXQ9ZSx0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLl9yZW1haW5pbmc9ZS5sZW5ndGgsdGhpcy5fcmVzdWx0PW5ldyBBcnJheSh0aGlzLmxlbmd0aCksMD09PXRoaXMubGVuZ3RoP0QodGhpcy5wcm9taXNlLHRoaXMuX3Jlc3VsdCk6KHRoaXMubGVuZ3RoPXRoaXMubGVuZ3RofHwwLHRoaXMuX2VudW1lcmF0ZSgpLDA9PT10aGlzLl9yZW1haW5pbmcmJkQodGhpcy5wcm9taXNlLHRoaXMuX3Jlc3VsdCkpKTpQKHRoaXMucHJvbWlzZSxuZXcgRXJyb3IoXCJBcnJheSBNZXRob2RzIG11c3QgYmUgcHJvdmlkZWQgYW4gQXJyYXlcIikpfWZ1bmN0aW9uIEgodCl7dGhpc1tBXT1WKyssdGhpcy5fcmVzdWx0PXRoaXMuX3N0YXRlPXZvaWQgMCx0aGlzLl9zdWJzY3JpYmVycz1bXSxUIT09dCYmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJmZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIllvdSBtdXN0IHBhc3MgYSByZXNvbHZlciBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIHByb21pc2UgY29uc3RydWN0b3JcIil9KCksdGhpcyBpbnN0YW5jZW9mIEg/ZnVuY3Rpb24odCxlKXt0cnl7ZShmdW5jdGlvbihlKXtPKHQsZSl9LGZ1bmN0aW9uKGUpe1AodCxlKX0pfWNhdGNoKGUpe1AodCxlKX19KHRoaXMsdCk6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUHJvbWlzZSc6IFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yLCB0aGlzIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpfSgpKX1mdW5jdGlvbiBHKCl7dmFyIHQ9dm9pZCAwO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBpKXQ9aTtlbHNlIGlmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmKXQ9c2VsZjtlbHNlIHRyeXt0PUZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKX1jYXRjaCh0KXt0aHJvdyBuZXcgRXJyb3IoXCJwb2x5ZmlsbCBmYWlsZWQgYmVjYXVzZSBnbG9iYWwgb2JqZWN0IGlzIHVuYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnRcIil9dmFyIGU9dC5Qcm9taXNlO2lmKGUpe3ZhciByPW51bGw7dHJ5e3I9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUucmVzb2x2ZSgpKX1jYXRjaCh0KXt9aWYoXCJbb2JqZWN0IFByb21pc2VdXCI9PT1yJiYhZS5jYXN0KXJldHVybn10LlByb21pc2U9SH1yZXR1cm4gcS5wcm90b3R5cGUuX2VudW1lcmF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmxlbmd0aCxlPXRoaXMuX2lucHV0LHI9MDt0aGlzLl9zdGF0ZT09PU0mJnI8dDtyKyspdGhpcy5fZWFjaEVudHJ5KGVbcl0scil9LHEucHJvdG90eXBlLl9lYWNoRW50cnk9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yLG49ci5yZXNvbHZlO2lmKG49PT1rKXt2YXIgaT1MKHQpO2lmKGk9PT13JiZ0Ll9zdGF0ZSE9PU0pdGhpcy5fc2V0dGxlZEF0KHQuX3N0YXRlLGUsdC5fcmVzdWx0KTtlbHNlIGlmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGkpdGhpcy5fcmVtYWluaW5nLS0sdGhpcy5fcmVzdWx0W2VdPXQ7ZWxzZSBpZihyPT09SCl7dmFyIGE9bmV3IHIoVCk7eihhLHQsaSksdGhpcy5fd2lsbFNldHRsZUF0KGEsZSl9ZWxzZSB0aGlzLl93aWxsU2V0dGxlQXQobmV3IHIoZnVuY3Rpb24oZSl7cmV0dXJuIGUodCl9KSxlKX1lbHNlIHRoaXMuX3dpbGxTZXR0bGVBdChuKHQpLGUpfSxxLnByb3RvdHlwZS5fc2V0dGxlZEF0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnByb21pc2U7bi5fc3RhdGU9PT1NJiYodGhpcy5fcmVtYWluaW5nLS0sdD09PUU/UChuLHIpOnRoaXMuX3Jlc3VsdFtlXT1yKSwwPT09dGhpcy5fcmVtYWluaW5nJiZEKG4sdGhpcy5fcmVzdWx0KX0scS5wcm90b3R5cGUuX3dpbGxTZXR0bGVBdD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7Uih0LHZvaWQgMCxmdW5jdGlvbih0KXtyZXR1cm4gci5fc2V0dGxlZEF0KFMsZSx0KX0sZnVuY3Rpb24odCl7cmV0dXJuIHIuX3NldHRsZWRBdChFLGUsdCl9KX0sSC5hbGw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBxKHRoaXMsdCkucHJvbWlzZX0sSC5yYWNlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHIodCk/bmV3IGUoZnVuY3Rpb24ocixuKXtmb3IodmFyIGk9dC5sZW5ndGgsYT0wO2E8aTthKyspZS5yZXNvbHZlKHRbYV0pLnRoZW4ocixuKX0pOm5ldyBlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUobmV3IFR5cGVFcnJvcihcIllvdSBtdXN0IHBhc3MgYW4gYXJyYXkgdG8gcmFjZS5cIikpfSl9LEgucmVzb2x2ZT1rLEgucmVqZWN0PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB0aGlzKFQpO3JldHVybiBQKGUsdCksZX0sSC5fc2V0U2NoZWR1bGVyPWZ1bmN0aW9uKHQpe3M9dH0sSC5fc2V0QXNhcD1mdW5jdGlvbih0KXtsPXR9LEguX2FzYXA9bCxILnByb3RvdHlwZT17Y29uc3RydWN0b3I6SCx0aGVuOncsY2F0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGhlbihudWxsLHQpfX0sRygpLEgucG9seWZpbGw9RyxILlByb21pc2U9SCxIfSl9KS5jYWxsKHRoaXMsdChcIl9wcm9jZXNzXCIpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7X3Byb2Nlc3M6NDc1fV0sMjEyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuL2lzLWltcGxlbWVudGVkXCIpKCk/U3ltYm9sOnQoXCIuL3BvbHlmaWxsXCIpfSx7XCIuL2lzLWltcGxlbWVudGVkXCI6MjEzLFwiLi9wb2x5ZmlsbFwiOjIxNX1dLDIxMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXtvYmplY3Q6ITAsc3ltYm9sOiEwfTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdDtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBTeW1ib2wpcmV0dXJuITE7dD1TeW1ib2woXCJ0ZXN0IHN5bWJvbFwiKTt0cnl7U3RyaW5nKHQpfWNhdGNoKHQpe3JldHVybiExfXJldHVybiEhblt0eXBlb2YgU3ltYm9sLml0ZXJhdG9yXSYmKCEhblt0eXBlb2YgU3ltYm9sLnRvUHJpbWl0aXZlXSYmISFuW3R5cGVvZiBTeW1ib2wudG9TdHJpbmdUYWddKX19LHt9XSwyMTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuISF0JiYoXCJzeW1ib2xcIj09dHlwZW9mIHR8fCEhdC5jb25zdHJ1Y3RvciYmKFwiU3ltYm9sXCI9PT10LmNvbnN0cnVjdG9yLm5hbWUmJlwiU3ltYm9sXCI9PT10W3QuY29uc3RydWN0b3IudG9TdHJpbmdUYWddKSl9fSx7fV0sMjE1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saSxhLG8scz10KFwiZFwiKSxsPXQoXCIuL3ZhbGlkYXRlLXN5bWJvbFwiKSxjPU9iamVjdC5jcmVhdGUsdT1PYmplY3QuZGVmaW5lUHJvcGVydGllcyxoPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxmPU9iamVjdC5wcm90b3R5cGUscD1jKG51bGwpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCl7bj1TeW1ib2w7dHJ5e1N0cmluZyhuKCkpLG89ITB9Y2F0Y2godCl7fX12YXIgZCxnPShkPWMobnVsbCksZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbj0wO2RbdCsobnx8XCJcIildOykrK247cmV0dXJuIGRbdCs9bnx8XCJcIl09ITAsaChmLGU9XCJAQFwiK3Qscy5ncyhudWxsLGZ1bmN0aW9uKHQpe3J8fChyPSEwLGgodGhpcyxlLHModCkpLHI9ITEpfSkpLGV9KTthPWZ1bmN0aW9uKHQpe2lmKHRoaXMgaW5zdGFuY2VvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3JcIik7cmV0dXJuIGkodCl9LGUuZXhwb3J0cz1pPWZ1bmN0aW9uIHQoZSl7dmFyIHI7aWYodGhpcyBpbnN0YW5jZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvclwiKTtyZXR1cm4gbz9uKGUpOihyPWMoYS5wcm90b3R5cGUpLGU9dm9pZCAwPT09ZT9cIlwiOlN0cmluZyhlKSx1KHIse19fZGVzY3JpcHRpb25fXzpzKFwiXCIsZSksX19uYW1lX186cyhcIlwiLGcoZSkpfSkpfSx1KGkse2ZvcjpzKGZ1bmN0aW9uKHQpe3JldHVybiBwW3RdP3BbdF06cFt0XT1pKFN0cmluZyh0KSl9KSxrZXlGb3I6cyhmdW5jdGlvbih0KXt2YXIgZTtmb3IoZSBpbiBsKHQpLHApaWYocFtlXT09PXQpcmV0dXJuIGV9KSxoYXNJbnN0YW5jZTpzKFwiXCIsbiYmbi5oYXNJbnN0YW5jZXx8aShcImhhc0luc3RhbmNlXCIpKSxpc0NvbmNhdFNwcmVhZGFibGU6cyhcIlwiLG4mJm4uaXNDb25jYXRTcHJlYWRhYmxlfHxpKFwiaXNDb25jYXRTcHJlYWRhYmxlXCIpKSxpdGVyYXRvcjpzKFwiXCIsbiYmbi5pdGVyYXRvcnx8aShcIml0ZXJhdG9yXCIpKSxtYXRjaDpzKFwiXCIsbiYmbi5tYXRjaHx8aShcIm1hdGNoXCIpKSxyZXBsYWNlOnMoXCJcIixuJiZuLnJlcGxhY2V8fGkoXCJyZXBsYWNlXCIpKSxzZWFyY2g6cyhcIlwiLG4mJm4uc2VhcmNofHxpKFwic2VhcmNoXCIpKSxzcGVjaWVzOnMoXCJcIixuJiZuLnNwZWNpZXN8fGkoXCJzcGVjaWVzXCIpKSxzcGxpdDpzKFwiXCIsbiYmbi5zcGxpdHx8aShcInNwbGl0XCIpKSx0b1ByaW1pdGl2ZTpzKFwiXCIsbiYmbi50b1ByaW1pdGl2ZXx8aShcInRvUHJpbWl0aXZlXCIpKSx0b1N0cmluZ1RhZzpzKFwiXCIsbiYmbi50b1N0cmluZ1RhZ3x8aShcInRvU3RyaW5nVGFnXCIpKSx1bnNjb3BhYmxlczpzKFwiXCIsbiYmbi51bnNjb3BhYmxlc3x8aShcInVuc2NvcGFibGVzXCIpKX0pLHUoYS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnMoaSksdG9TdHJpbmc6cyhcIlwiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19uYW1lX199KX0pLHUoaS5wcm90b3R5cGUse3RvU3RyaW5nOnMoZnVuY3Rpb24oKXtyZXR1cm5cIlN5bWJvbCAoXCIrbCh0aGlzKS5fX2Rlc2NyaXB0aW9uX18rXCIpXCJ9KSx2YWx1ZU9mOnMoZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzKX0pfSksaChpLnByb3RvdHlwZSxpLnRvUHJpbWl0aXZlLHMoXCJcIixmdW5jdGlvbigpe3ZhciB0PWwodGhpcyk7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIHQ/dDp0LnRvU3RyaW5nKCl9KSksaChpLnByb3RvdHlwZSxpLnRvU3RyaW5nVGFnLHMoXCJjXCIsXCJTeW1ib2xcIikpLGgoYS5wcm90b3R5cGUsaS50b1N0cmluZ1RhZyxzKFwiY1wiLGkucHJvdG90eXBlW2kudG9TdHJpbmdUYWddKSksaChhLnByb3RvdHlwZSxpLnRvUHJpbWl0aXZlLHMoXCJjXCIsaS5wcm90b3R5cGVbaS50b1ByaW1pdGl2ZV0pKX0se1wiLi92YWxpZGF0ZS1zeW1ib2xcIjoyMTYsZDoxNDJ9XSwyMTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9pcy1zeW1ib2xcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFuKHQpKXRocm93IG5ldyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYSBzeW1ib2xcIik7cmV0dXJuIHR9fSx7XCIuL2lzLXN5bWJvbFwiOjIxNH1dLDIxNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi9pcy1pbXBsZW1lbnRlZFwiKSgpP1dlYWtNYXA6dChcIi4vcG9seWZpbGxcIil9LHtcIi4vaXMtaW1wbGVtZW50ZWRcIjoyMTgsXCIuL3BvbHlmaWxsXCI6MjIwfV0sMjE4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQsZTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBXZWFrTWFwKXJldHVybiExO3RyeXt0PW5ldyBXZWFrTWFwKFtbZT17fSxcIm9uZVwiXSxbe30sXCJ0d29cIl0sW3t9LFwidGhyZWVcIl1dKX1jYXRjaCh0KXtyZXR1cm4hMX1yZXR1cm5cIltvYmplY3QgV2Vha01hcF1cIj09PVN0cmluZyh0KSYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQuc2V0JiYodC5zZXQoe30sMSk9PT10JiYoXCJmdW5jdGlvblwiPT10eXBlb2YgdC5kZWxldGUmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmhhcyYmXCJvbmVcIj09PXQuZ2V0KGUpKSkpKX19LHt9XSwyMTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9XCJmdW5jdGlvblwiPT10eXBlb2YgV2Vha01hcCYmXCJbb2JqZWN0IFdlYWtNYXBdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3IFdlYWtNYXApfSx7fV0sMjIwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saT10KFwiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZlwiKSxhPXQoXCJlczUtZXh0L29iamVjdC92YWxpZC1vYmplY3RcIiksbz10KFwiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWVcIikscz10KFwiZXM1LWV4dC9zdHJpbmcvcmFuZG9tLXVuaXFcIiksbD10KFwiZFwiKSxjPXQoXCJlczYtaXRlcmF0b3IvZ2V0XCIpLHU9dChcImVzNi1pdGVyYXRvci9mb3Itb2ZcIiksaD10KFwiZXM2LXN5bWJvbFwiKS50b1N0cmluZ1RhZyxmPXQoXCIuL2lzLW5hdGl2ZS1pbXBsZW1lbnRlZFwiKSxwPUFycmF5LmlzQXJyYXksZD1PYmplY3QuZGVmaW5lUHJvcGVydHksZz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHY9T2JqZWN0LmdldFByb3RvdHlwZU9mO2UuZXhwb3J0cz1uPWZ1bmN0aW9uKCl7dmFyIHQsZT1hcmd1bWVudHNbMF07aWYoISh0aGlzIGluc3RhbmNlb2YgbikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnXCIpO3JldHVybiB0PWYmJmkmJldlYWtNYXAhPT1uP2kobmV3IFdlYWtNYXAsdih0aGlzKSk6dGhpcyxudWxsIT1lJiYocChlKXx8KGU9YyhlKSkpLGQodCxcIl9fd2Vha01hcERhdGFfX1wiLGwoXCJjXCIsXCIkd2Vha01hcCRcIitzKCkpKSxlPyh1KGUsZnVuY3Rpb24oZSl7byhlKSx0LnNldChlWzBdLGVbMV0pfSksdCk6dH0sZiYmKGkmJmkobixXZWFrTWFwKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFdlYWtNYXAucHJvdG90eXBlLHtjb25zdHJ1Y3RvcjpsKG4pfSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4ucHJvdG90eXBlLHtkZWxldGU6bChmdW5jdGlvbih0KXtyZXR1cm4hIWcuY2FsbChhKHQpLHRoaXMuX193ZWFrTWFwRGF0YV9fKSYmKGRlbGV0ZSB0W3RoaXMuX193ZWFrTWFwRGF0YV9fXSwhMCl9KSxnZXQ6bChmdW5jdGlvbih0KXtpZihnLmNhbGwoYSh0KSx0aGlzLl9fd2Vha01hcERhdGFfXykpcmV0dXJuIHRbdGhpcy5fX3dlYWtNYXBEYXRhX19dfSksaGFzOmwoZnVuY3Rpb24odCl7cmV0dXJuIGcuY2FsbChhKHQpLHRoaXMuX193ZWFrTWFwRGF0YV9fKX0pLHNldDpsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQoYSh0KSx0aGlzLl9fd2Vha01hcERhdGFfXyxsKFwiY1wiLGUpKSx0aGlzfSksdG9TdHJpbmc6bChmdW5jdGlvbigpe3JldHVyblwiW29iamVjdCBXZWFrTWFwXVwifSl9KSxkKG4ucHJvdG90eXBlLGgsbChcImNcIixcIldlYWtNYXBcIikpfSx7XCIuL2lzLW5hdGl2ZS1pbXBsZW1lbnRlZFwiOjIxOSxkOjE0MixcImVzNS1leHQvb2JqZWN0L3NldC1wcm90b3R5cGUtb2ZcIjoxOTMsXCJlczUtZXh0L29iamVjdC92YWxpZC1vYmplY3RcIjoxOTcsXCJlczUtZXh0L29iamVjdC92YWxpZC12YWx1ZVwiOjE5OCxcImVzNS1leHQvc3RyaW5nL3JhbmRvbS11bmlxXCI6MjAzLFwiZXM2LWl0ZXJhdG9yL2Zvci1vZlwiOjIwNSxcImVzNi1pdGVyYXRvci9nZXRcIjoyMDYsXCJlczYtc3ltYm9sXCI6MjEyfV0sMjIxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lfHwwLGk9cnx8MTtyZXR1cm5bW3RbMTJdK3RbMF0sdFsxM10rdFsxXSx0WzE0XSt0WzJdLHRbMTVdK3RbM11dLFt0WzEyXS10WzBdLHRbMTNdLXRbMV0sdFsxNF0tdFsyXSx0WzE1XS10WzNdXSxbdFsxMl0rdFs0XSx0WzEzXSt0WzVdLHRbMTRdK3RbNl0sdFsxNV0rdFs3XV0sW3RbMTJdLXRbNF0sdFsxM10tdFs1XSx0WzE0XS10WzZdLHRbMTVdLXRbN11dLFtuKnRbMTJdK3RbOF0sbip0WzEzXSt0WzldLG4qdFsxNF0rdFsxMF0sbip0WzE1XSt0WzExXV0sW2kqdFsxMl0tdFs4XSxpKnRbMTNdLXRbOV0saSp0WzE0XS10WzEwXSxpKnRbMTVdLXRbMTFdXV19fSx7fV0sMjIyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImlzLXN0cmluZy1ibGFua1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dHlwZW9mIHQ7aWYoXCJzdHJpbmdcIj09PWUpe3ZhciByPXQ7aWYoMD09PSh0PSt0KSYmbihyKSlyZXR1cm4hMX1lbHNlIGlmKFwibnVtYmVyXCIhPT1lKXJldHVybiExO3JldHVybiB0LXQ8MX19LHtcImlzLXN0cmluZy1ibGFua1wiOjQxNn1dLDIyMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IG8oWzBdLFswXSwwKTtjYXNlIDE6aWYoXCJudW1iZXJcIj09dHlwZW9mIHQpe3ZhciBuPWwodCk7cmV0dXJuIG5ldyBvKG4sbiwwKX1yZXR1cm4gbmV3IG8odCxsKHQubGVuZ3RoKSwwKTtjYXNlIDI6aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpe3ZhciBuPWwodC5sZW5ndGgpO3JldHVybiBuZXcgbyh0LG4sK2UpfXI9MDtjYXNlIDM6aWYodC5sZW5ndGghPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJzdGF0ZSBhbmQgdmVsb2NpdHkgbGVuZ3RocyBtdXN0IG1hdGNoXCIpO3JldHVybiBuZXcgbyh0LGUscil9fTt2YXIgbj10KFwiY3ViaWMtaGVybWl0ZVwiKSxpPXQoXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiKTtmdW5jdGlvbiBhKHQsZSxyKXtyZXR1cm4gTWF0aC5taW4oZSxNYXRoLm1heCh0LHIpKX1mdW5jdGlvbiBvKHQsZSxyKXt0aGlzLmRpbWVuc2lvbj10Lmxlbmd0aCx0aGlzLmJvdW5kcz1bbmV3IEFycmF5KHRoaXMuZGltZW5zaW9uKSxuZXcgQXJyYXkodGhpcy5kaW1lbnNpb24pXTtmb3IodmFyIG49MDtuPHRoaXMuZGltZW5zaW9uOysrbil0aGlzLmJvdW5kc1swXVtuXT0tMS8wLHRoaXMuYm91bmRzWzFdW25dPTEvMDt0aGlzLl9zdGF0ZT10LnNsaWNlKCkucmV2ZXJzZSgpLHRoaXMuX3ZlbG9jaXR5PWUuc2xpY2UoKS5yZXZlcnNlKCksdGhpcy5fdGltZT1bcl0sdGhpcy5fc2NyYXRjaD1bdC5zbGljZSgpLHQuc2xpY2UoKSx0LnNsaWNlKCksdC5zbGljZSgpLHQuc2xpY2UoKV19dmFyIHM9by5wcm90b3R5cGU7ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKWVbcl09MDtyZXR1cm4gZX1zLmZsdXNoPWZ1bmN0aW9uKHQpe3ZhciBlPWkuZ3QodGhpcy5fdGltZSx0KS0xO2U8PTB8fCh0aGlzLl90aW1lLnNwbGljZSgwLGUpLHRoaXMuX3N0YXRlLnNwbGljZSgwLGUqdGhpcy5kaW1lbnNpb24pLHRoaXMuX3ZlbG9jaXR5LnNwbGljZSgwLGUqdGhpcy5kaW1lbnNpb24pKX0scy5jdXJ2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aW1lLHI9ZS5sZW5ndGgsbz1pLmxlKGUsdCkscz10aGlzLl9zY3JhdGNoWzBdLGw9dGhpcy5fc3RhdGUsYz10aGlzLl92ZWxvY2l0eSx1PXRoaXMuZGltZW5zaW9uLGg9dGhpcy5ib3VuZHM7aWYobzwwKWZvcih2YXIgZj11LTEscD0wO3A8dTsrK3AsLS1mKXNbcF09bFtmXTtlbHNlIGlmKG8+PXItMSl7Zj1sLmxlbmd0aC0xO3ZhciBkPXQtZVtyLTFdO2ZvcihwPTA7cDx1OysrcCwtLWYpc1twXT1sW2ZdK2QqY1tmXX1lbHNle2Y9dSoobysxKS0xO3ZhciBnPWVbb10sdj1lW28rMV0tZ3x8MSxtPXRoaXMuX3NjcmF0Y2hbMV0seT10aGlzLl9zY3JhdGNoWzJdLHg9dGhpcy5fc2NyYXRjaFszXSxiPXRoaXMuX3NjcmF0Y2hbNF0sXz0hMDtmb3IocD0wO3A8dTsrK3AsLS1mKW1bcF09bFtmXSx4W3BdPWNbZl0qdix5W3BdPWxbZit1XSxiW3BdPWNbZit1XSp2LF89XyYmbVtwXT09PXlbcF0mJnhbcF09PT1iW3BdJiYwPT09eFtwXTtpZihfKWZvcihwPTA7cDx1OysrcClzW3BdPW1bcF07ZWxzZSBuKG0seCx5LGIsKHQtZykvdixzKX12YXIgdz1oWzBdLGs9aFsxXTtmb3IocD0wO3A8dTsrK3Apc1twXT1hKHdbcF0sa1twXSxzW3BdKTtyZXR1cm4gc30scy5kY3VydmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGltZSxyPWUubGVuZ3RoLGE9aS5sZShlLHQpLG89dGhpcy5fc2NyYXRjaFswXSxzPXRoaXMuX3N0YXRlLGw9dGhpcy5fdmVsb2NpdHksYz10aGlzLmRpbWVuc2lvbjtpZihhPj1yLTEpZm9yKHZhciB1PXMubGVuZ3RoLTEsaD0oZVtyLTFdLDApO2g8YzsrK2gsLS11KW9baF09bFt1XTtlbHNle3U9YyooYSsxKS0xO3ZhciBmPWVbYV0scD1lW2ErMV0tZnx8MSxkPXRoaXMuX3NjcmF0Y2hbMV0sZz10aGlzLl9zY3JhdGNoWzJdLHY9dGhpcy5fc2NyYXRjaFszXSxtPXRoaXMuX3NjcmF0Y2hbNF0seT0hMDtmb3IoaD0wO2g8YzsrK2gsLS11KWRbaF09c1t1XSx2W2hdPWxbdV0qcCxnW2hdPXNbdStjXSxtW2hdPWxbdStjXSpwLHk9eSYmZFtoXT09PWdbaF0mJnZbaF09PT1tW2hdJiYwPT09dltoXTtpZih5KWZvcihoPTA7aDxjOysraClvW2hdPTA7ZWxzZXtuLmRlcml2YXRpdmUoZCx2LGcsbSwodC1mKS9wLG8pO2ZvcihoPTA7aDxjOysraClvW2hdLz1wfX1yZXR1cm4gb30scy5sYXN0VD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RpbWU7cmV0dXJuIHRbdC5sZW5ndGgtMV19LHMuc3RhYmxlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX3ZlbG9jaXR5LGU9dC5sZW5ndGgscj10aGlzLmRpbWVuc2lvbi0xO3I+PTA7LS1yKWlmKHRbLS1lXSlyZXR1cm4hMTtyZXR1cm4hMH0scy5qdW1wPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXRoaXMuZGltZW5zaW9uO2lmKCEodDxlfHxhcmd1bWVudHMubGVuZ3RoIT09cisxKSl7dmFyIG49dGhpcy5fc3RhdGUsaT10aGlzLl92ZWxvY2l0eSxvPW4ubGVuZ3RoLXRoaXMuZGltZW5zaW9uLHM9dGhpcy5ib3VuZHMsbD1zWzBdLGM9c1sxXTt0aGlzLl90aW1lLnB1c2goZSx0KTtmb3IodmFyIHU9MDt1PDI7Kyt1KWZvcih2YXIgaD0wO2g8cjsrK2gpbi5wdXNoKG5bbysrXSksaS5wdXNoKDApO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IoaD1yO2g+MDstLWgpbi5wdXNoKGEobFtoLTFdLGNbaC0xXSxhcmd1bWVudHNbaF0pKSxpLnB1c2goMCl9fSxzLnB1c2g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXN0VCgpLHI9dGhpcy5kaW1lbnNpb247aWYoISh0PGV8fGFyZ3VtZW50cy5sZW5ndGghPT1yKzEpKXt2YXIgbj10aGlzLl9zdGF0ZSxpPXRoaXMuX3ZlbG9jaXR5LG89bi5sZW5ndGgtdGhpcy5kaW1lbnNpb24scz10LWUsbD10aGlzLmJvdW5kcyxjPWxbMF0sdT1sWzFdLGg9cz4xZS02PzEvczowO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGY9cjtmPjA7LS1mKXt2YXIgcD1hKGNbZi0xXSx1W2YtMV0sYXJndW1lbnRzW2ZdKTtuLnB1c2gocCksaS5wdXNoKChwLW5bbysrXSkqaCl9fX0scy5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kaW1lbnNpb247aWYoISh0PHRoaXMubGFzdFQoKXx8YXJndW1lbnRzLmxlbmd0aCE9PWUrMSkpe3ZhciByPXRoaXMuX3N0YXRlLG49dGhpcy5fdmVsb2NpdHksaT10aGlzLmJvdW5kcyxvPWlbMF0scz1pWzFdO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGw9ZTtsPjA7LS1sKXIucHVzaChhKG9bbC0xXSxzW2wtMV0sYXJndW1lbnRzW2xdKSksbi5wdXNoKDApfX0scy5tb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXRoaXMuZGltZW5zaW9uO2lmKCEodDw9ZXx8YXJndW1lbnRzLmxlbmd0aCE9PXIrMSkpe3ZhciBuPXRoaXMuX3N0YXRlLGk9dGhpcy5fdmVsb2NpdHksbz1uLmxlbmd0aC10aGlzLmRpbWVuc2lvbixzPXRoaXMuYm91bmRzLGw9c1swXSxjPXNbMV0sdT10LWUsaD11PjFlLTY/MS91OjA7dGhpcy5fdGltZS5wdXNoKHQpO2Zvcih2YXIgZj1yO2Y+MDstLWYpe3ZhciBwPWFyZ3VtZW50c1tmXTtuLnB1c2goYShsW2YtMV0sY1tmLTFdLG5bbysrXStwKSksaS5wdXNoKHAqaCl9fX0scy5pZGxlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKTtpZighKHQ8ZSkpe3ZhciByPXRoaXMuZGltZW5zaW9uLG49dGhpcy5fc3RhdGUsaT10aGlzLl92ZWxvY2l0eSxvPW4ubGVuZ3RoLXIscz10aGlzLmJvdW5kcyxsPXNbMF0sYz1zWzFdLHU9dC1lO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGg9ci0xO2g+PTA7LS1oKW4ucHVzaChhKGxbaF0sY1toXSxuW29dK3UqaVtvXSkpLGkucHVzaCgwKSxvKz0xfX19LHtcImJpbmFyeS1zZWFyY2gtYm91bmRzXCI6ODIsXCJjdWJpYy1oZXJtaXRlXCI6MTM2fV0sMjI0OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcImR0eXBlXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIm11c3Qgc3BlY2lmeSBkYXRhIGFzIGZpcnN0IHBhcmFtZXRlclwiKTtpZihyPTB8KyhyfHwwKSxBcnJheS5pc0FycmF5KHQpJiZ0WzBdJiZcIm51bWJlclwiPT10eXBlb2YgdFswXVswXSl7dmFyIGksYSxvLHMsbD10WzBdLmxlbmd0aCxjPXQubGVuZ3RoKmw7ZSYmXCJzdHJpbmdcIiE9dHlwZW9mIGV8fChlPW5ldyhuKGV8fFwiZmxvYXQzMlwiKSkoYytyKSk7dmFyIHU9ZS5sZW5ndGgtcjtpZihjIT09dSl0aHJvdyBuZXcgRXJyb3IoXCJzb3VyY2UgbGVuZ3RoIFwiK2MrXCIgKFwiK2wrXCJ4XCIrdC5sZW5ndGgrXCIpIGRvZXMgbm90IG1hdGNoIGRlc3RpbmF0aW9uIGxlbmd0aCBcIit1KTtmb3IoaT0wLG89cjtpPHQubGVuZ3RoO2krKylmb3IoYT0wO2E8bDthKyspZVtvKytdPW51bGw9PT10W2ldW2FdP05hTjp0W2ldW2FdfWVsc2UgaWYoZSYmXCJzdHJpbmdcIiE9dHlwZW9mIGUpZS5zZXQodCxyKTtlbHNle3ZhciBoPW4oZXx8XCJmbG9hdDMyXCIpO2lmKEFycmF5LmlzQXJyYXkodCl8fFwiYXJyYXlcIj09PWUpZm9yKGU9bmV3IGgodC5sZW5ndGgrciksaT0wLG89cixzPWUubGVuZ3RoO288cztvKyssaSsrKWVbb109bnVsbD09PXRbaV0/TmFOOnRbaV07ZWxzZSAwPT09cj9lPW5ldyBoKHQpOihlPW5ldyBoKHQubGVuZ3RoK3IpKS5zZXQodCxyKX1yZXR1cm4gZX19LHtkdHlwZToxNjF9XSwyMjU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiY3NzLWZvbnQvc3RyaW5naWZ5XCIpLGk9WzMyLDEyNl07ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PXR8fHt9KS5zaGFwZT90LnNoYXBlOnQuY2FudmFzP1t0LmNhbnZhcy53aWR0aCx0LmNhbnZhcy5oZWlnaHRdOls1MTIsNTEyXSxyPXQuY2FudmFzfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLGE9dC5mb250LG89XCJudW1iZXJcIj09dHlwZW9mIHQuc3RlcD9bdC5zdGVwLHQuc3RlcF06dC5zdGVwfHxbMzIsMzJdLHM9dC5jaGFyc3x8aTthJiZcInN0cmluZ1wiIT10eXBlb2YgYSYmKGE9bihhKSk7aWYoQXJyYXkuaXNBcnJheShzKSl7aWYoMj09PXMubGVuZ3RoJiZcIm51bWJlclwiPT10eXBlb2Ygc1swXSYmXCJudW1iZXJcIj09dHlwZW9mIHNbMV0pe2Zvcih2YXIgbD1bXSxjPXNbMF0sdT0wO2M8PXNbMV07YysrKWxbdSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGMpO3M9bH19ZWxzZSBzPVN0cmluZyhzKS5zcGxpdChcIlwiKTtlPWUuc2xpY2UoKSxyLndpZHRoPWVbMF0sci5oZWlnaHQ9ZVsxXTt2YXIgaD1yLmdldENvbnRleHQoXCIyZFwiKTtoLmZpbGxTdHlsZT1cIiMwMDBcIixoLmZpbGxSZWN0KDAsMCxyLndpZHRoLHIuaGVpZ2h0KSxoLmZvbnQ9YSxoLnRleHRBbGlnbj1cImNlbnRlclwiLGgudGV4dEJhc2VsaW5lPVwibWlkZGxlXCIsaC5maWxsU3R5bGU9XCIjZmZmXCI7Zm9yKHZhciBmPW9bMF0vMixwPW9bMV0vMixjPTA7YzxzLmxlbmd0aDtjKyspaC5maWxsVGV4dChzW2NdLGYscCksKGYrPW9bMF0pPmVbMF0tb1swXS8yJiYoZj1vWzBdLzIscCs9b1sxXSk7cmV0dXJuIHJ9fSx7XCJjc3MtZm9udC9zdHJpbmdpZnlcIjoxMzN9XSwyMjY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7ZXx8KGU9e30pLChcInN0cmluZ1wiPT10eXBlb2YgdHx8QXJyYXkuaXNBcnJheSh0KSkmJihlLmZhbWlseT10KTt2YXIgcj1BcnJheS5pc0FycmF5KGUuZmFtaWx5KT9lLmZhbWlseS5qb2luKFwiLCBcIik6ZS5mYW1pbHk7aWYoIXIpdGhyb3cgRXJyb3IoXCJgZmFtaWx5YCBtdXN0IGJlIGRlZmluZWRcIik7dmFyIHM9ZS5zaXplfHxlLmZvbnRTaXplfHxlLmVtfHw0OCxsPWUud2VpZ2h0fHxlLmZvbnRXZWlnaHR8fFwiXCIsYz0odD1bZS5zdHlsZXx8ZS5mb250U3R5bGV8fFwiXCIsbCxzXS5qb2luKFwiIFwiKStcInB4IFwiK3IsZS5vcmlnaW58fFwidG9wXCIpO2lmKG4uY2FjaGVbcl0mJnM8PW4uY2FjaGVbcl0uZW0pcmV0dXJuIGkobi5jYWNoZVtyXSxjKTt2YXIgdT1lLmNhbnZhc3x8bi5jYW52YXMsaD11LmdldENvbnRleHQoXCIyZFwiKSxmPXt1cHBlcjp2b2lkIDAhPT1lLnVwcGVyP2UudXBwZXI6XCJIXCIsbG93ZXI6dm9pZCAwIT09ZS5sb3dlcj9lLmxvd2VyOlwieFwiLGRlc2NlbnQ6dm9pZCAwIT09ZS5kZXNjZW50P2UuZGVzY2VudDpcInBcIixhc2NlbnQ6dm9pZCAwIT09ZS5hc2NlbnQ/ZS5hc2NlbnQ6XCJoXCIsdGl0dGxlOnZvaWQgMCE9PWUudGl0dGxlP2UudGl0dGxlOlwiaVwiLG92ZXJzaG9vdDp2b2lkIDAhPT1lLm92ZXJzaG9vdD9lLm92ZXJzaG9vdDpcIk9cIn0scD1NYXRoLmNlaWwoMS41KnMpO3UuaGVpZ2h0PXAsdS53aWR0aD0uNSpwLGguZm9udD10O3ZhciBkPXt0b3A6MH07aC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9XCJ0b3BcIixoLmZpbGxTdHlsZT1cImJsYWNrXCIsaC5maWxsVGV4dChcIkhcIiwwLDApO3ZhciBnPWEoaC5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2guY2xlYXJSZWN0KDAsMCxwLHApLGgudGV4dEJhc2VsaW5lPVwiYm90dG9tXCIsaC5maWxsVGV4dChcIkhcIiwwLHApO3ZhciB2PWEoaC5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2QubGluZUhlaWdodD1kLmJvdHRvbT1wLXYrZyxoLmNsZWFyUmVjdCgwLDAscCxwKSxoLnRleHRCYXNlbGluZT1cImFscGhhYmV0aWNcIixoLmZpbGxUZXh0KFwiSFwiLDAscCk7dmFyIG09cC1hKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKS0xK2c7ZC5iYXNlbGluZT1kLmFscGhhYmV0aWM9bSxoLmNsZWFyUmVjdCgwLDAscCxwKSxoLnRleHRCYXNlbGluZT1cIm1pZGRsZVwiLGguZmlsbFRleHQoXCJIXCIsMCwuNSpwKTt2YXIgeT1hKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtkLm1lZGlhbj1kLm1pZGRsZT1wLXktMStnLS41KnAsaC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9XCJoYW5naW5nXCIsaC5maWxsVGV4dChcIkhcIiwwLC41KnApO3ZhciB4PWEoaC5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2QuaGFuZ2luZz1wLXgtMStnLS41KnAsaC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9XCJpZGVvZ3JhcGhpY1wiLGguZmlsbFRleHQoXCJIXCIsMCxwKTt2YXIgYj1hKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtpZihkLmlkZW9ncmFwaGljPXAtYi0xK2csZi51cHBlciYmKGguY2xlYXJSZWN0KDAsMCxwLHApLGgudGV4dEJhc2VsaW5lPVwidG9wXCIsaC5maWxsVGV4dChmLnVwcGVyLDAsMCksZC51cHBlcj1hKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKSxkLmNhcEhlaWdodD1kLmJhc2VsaW5lLWQudXBwZXIpLGYubG93ZXImJihoLmNsZWFyUmVjdCgwLDAscCxwKSxoLnRleHRCYXNlbGluZT1cInRvcFwiLGguZmlsbFRleHQoZi5sb3dlciwwLDApLGQubG93ZXI9YShoLmdldEltYWdlRGF0YSgwLDAscCxwKSksZC54SGVpZ2h0PWQuYmFzZWxpbmUtZC5sb3dlciksZi50aXR0bGUmJihoLmNsZWFyUmVjdCgwLDAscCxwKSxoLnRleHRCYXNlbGluZT1cInRvcFwiLGguZmlsbFRleHQoZi50aXR0bGUsMCwwKSxkLnRpdHRsZT1hKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKSksZi5hc2NlbnQmJihoLmNsZWFyUmVjdCgwLDAscCxwKSxoLnRleHRCYXNlbGluZT1cInRvcFwiLGguZmlsbFRleHQoZi5hc2NlbnQsMCwwKSxkLmFzY2VudD1hKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKSksZi5kZXNjZW50JiYoaC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9XCJ0b3BcIixoLmZpbGxUZXh0KGYuZGVzY2VudCwwLDApLGQuZGVzY2VudD1vKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKSksZi5vdmVyc2hvb3Qpe2guY2xlYXJSZWN0KDAsMCxwLHApLGgudGV4dEJhc2VsaW5lPVwidG9wXCIsaC5maWxsVGV4dChmLm92ZXJzaG9vdCwwLDApO3ZhciBfPW8oaC5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2Qub3ZlcnNob290PV8tbX1mb3IodmFyIHcgaW4gZClkW3ddLz1zO3JldHVybiBkLmVtPXMsbi5jYWNoZVtyXT1kLGkoZCxjKX1mdW5jdGlvbiBpKHQsZSl7dmFyIHI9e307Zm9yKHZhciBuIGluXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPXRbZV0pLHQpXCJlbVwiIT09biYmKHJbbl09dFtuXS1lKTtyZXR1cm4gcn1mdW5jdGlvbiBhKHQpe2Zvcih2YXIgZT10LmhlaWdodCxyPXQuZGF0YSxuPTM7bjxyLmxlbmd0aDtuKz00KWlmKDAhPT1yW25dKXJldHVybiBNYXRoLmZsb29yKC4yNSoobi0zKS9lKX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT10LmhlaWdodCxyPXQuZGF0YSxuPXIubGVuZ3RoLTE7bj4wO24tPTQpaWYoMCE9PXJbbl0pcmV0dXJuIE1hdGguZmxvb3IoLjI1KihuLTMpL2UpfWUuZXhwb3J0cz1uLG4uY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksbi5jYWNoZT17fX0se31dLDIyNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGModHx8ZCxudWxsKX07dmFyIG49MCxpPTE7ZnVuY3Rpb24gYSh0LGUscixuLGksYSl7dGhpcy5fY29sb3I9dCx0aGlzLmtleT1lLHRoaXMudmFsdWU9cix0aGlzLmxlZnQ9bix0aGlzLnJpZ2h0PWksdGhpcy5fY291bnQ9YX1mdW5jdGlvbiBvKHQpe3JldHVybiBuZXcgYSh0Ll9jb2xvcix0LmtleSx0LnZhbHVlLHQubGVmdCx0LnJpZ2h0LHQuX2NvdW50KX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIG5ldyBhKHQsZS5rZXksZS52YWx1ZSxlLmxlZnQsZS5yaWdodCxlLl9jb3VudCl9ZnVuY3Rpb24gbCh0KXt0Ll9jb3VudD0xKyh0LmxlZnQ/dC5sZWZ0Ll9jb3VudDowKSsodC5yaWdodD90LnJpZ2h0Ll9jb3VudDowKX1mdW5jdGlvbiBjKHQsZSl7dGhpcy5fY29tcGFyZT10LHRoaXMucm9vdD1lfXZhciB1PWMucHJvdG90eXBlO2Z1bmN0aW9uIGgodCxlKXt0aGlzLnRyZWU9dCx0aGlzLl9zdGFjaz1lfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LFwia2V5c1wiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGUscil7dC5wdXNoKGUpfSksdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodSxcInZhbHVlc1wiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGUscil7dC5wdXNoKHIpfSksdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodSxcImxlbmd0aFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290P3RoaXMucm9vdC5fY291bnQ6MH19KSx1Lmluc2VydD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLl9jb21wYXJlLG89dGhpcy5yb290LHU9W10saD1bXTtvOyl7dmFyIGY9cih0LG8ua2V5KTt1LnB1c2gobyksaC5wdXNoKGYpLG89Zjw9MD9vLmxlZnQ6by5yaWdodH11LnB1c2gobmV3IGEobix0LGUsbnVsbCxudWxsLDEpKTtmb3IodmFyIHA9dS5sZW5ndGgtMjtwPj0wOy0tcCl7bz11W3BdO2hbcF08PTA/dVtwXT1uZXcgYShvLl9jb2xvcixvLmtleSxvLnZhbHVlLHVbcCsxXSxvLnJpZ2h0LG8uX2NvdW50KzEpOnVbcF09bmV3IGEoby5fY29sb3Isby5rZXksby52YWx1ZSxvLmxlZnQsdVtwKzFdLG8uX2NvdW50KzEpfWZvcihwPXUubGVuZ3RoLTE7cD4xOy0tcCl7dmFyIGQ9dVtwLTFdO289dVtwXTtpZihkLl9jb2xvcj09PWl8fG8uX2NvbG9yPT09aSlicmVhazt2YXIgZz11W3AtMl07aWYoZy5sZWZ0PT09ZClpZihkLmxlZnQ9PT1vKXtpZighKHY9Zy5yaWdodCl8fHYuX2NvbG9yIT09bil7aWYoZy5fY29sb3I9bixnLmxlZnQ9ZC5yaWdodCxkLl9jb2xvcj1pLGQucmlnaHQ9Zyx1W3AtMl09ZCx1W3AtMV09byxsKGcpLGwoZCkscD49MykobT11W3AtM10pLmxlZnQ9PT1nP20ubGVmdD1kOm0ucmlnaHQ9ZDticmVha31kLl9jb2xvcj1pLGcucmlnaHQ9cyhpLHYpLGcuX2NvbG9yPW4scC09MX1lbHNle2lmKCEodj1nLnJpZ2h0KXx8di5fY29sb3IhPT1uKXtpZihkLnJpZ2h0PW8ubGVmdCxnLl9jb2xvcj1uLGcubGVmdD1vLnJpZ2h0LG8uX2NvbG9yPWksby5sZWZ0PWQsby5yaWdodD1nLHVbcC0yXT1vLHVbcC0xXT1kLGwoZyksbChkKSxsKG8pLHA+PTMpKG09dVtwLTNdKS5sZWZ0PT09Zz9tLmxlZnQ9bzptLnJpZ2h0PW87YnJlYWt9ZC5fY29sb3I9aSxnLnJpZ2h0PXMoaSx2KSxnLl9jb2xvcj1uLHAtPTF9ZWxzZSBpZihkLnJpZ2h0PT09byl7aWYoISh2PWcubGVmdCl8fHYuX2NvbG9yIT09bil7aWYoZy5fY29sb3I9bixnLnJpZ2h0PWQubGVmdCxkLl9jb2xvcj1pLGQubGVmdD1nLHVbcC0yXT1kLHVbcC0xXT1vLGwoZyksbChkKSxwPj0zKShtPXVbcC0zXSkucmlnaHQ9PT1nP20ucmlnaHQ9ZDptLmxlZnQ9ZDticmVha31kLl9jb2xvcj1pLGcubGVmdD1zKGksdiksZy5fY29sb3I9bixwLT0xfWVsc2V7dmFyIHY7aWYoISh2PWcubGVmdCl8fHYuX2NvbG9yIT09bil7dmFyIG07aWYoZC5sZWZ0PW8ucmlnaHQsZy5fY29sb3I9bixnLnJpZ2h0PW8ubGVmdCxvLl9jb2xvcj1pLG8ucmlnaHQ9ZCxvLmxlZnQ9Zyx1W3AtMl09byx1W3AtMV09ZCxsKGcpLGwoZCksbChvKSxwPj0zKShtPXVbcC0zXSkucmlnaHQ9PT1nP20ucmlnaHQ9bzptLmxlZnQ9bzticmVha31kLl9jb2xvcj1pLGcubGVmdD1zKGksdiksZy5fY29sb3I9bixwLT0xfX1yZXR1cm4gdVswXS5fY29sb3I9aSxuZXcgYyhyLHVbMF0pfSx1LmZvckVhY2g9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMucm9vdClzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbiB0KGUscil7dmFyIG47aWYoci5sZWZ0JiYobj10KGUsci5sZWZ0KSkpcmV0dXJuIG47cmV0dXJuKG49ZShyLmtleSxyLnZhbHVlKSl8fChyLnJpZ2h0P3QoZSxyLnJpZ2h0KTp2b2lkIDApfSh0LHRoaXMucm9vdCk7Y2FzZSAyOnJldHVybiBmdW5jdGlvbiB0KGUscixuLGkpe2lmKHIoZSxpLmtleSk8PTApe3ZhciBhO2lmKGkubGVmdCYmKGE9dChlLHIsbixpLmxlZnQpKSlyZXR1cm4gYTtpZihhPW4oaS5rZXksaS52YWx1ZSkpcmV0dXJuIGF9aWYoaS5yaWdodClyZXR1cm4gdChlLHIsbixpLnJpZ2h0KX0oZSx0aGlzLl9jb21wYXJlLHQsdGhpcy5yb290KTtjYXNlIDM6aWYodGhpcy5fY29tcGFyZShlLHIpPj0wKXJldHVybjtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbixpLGEpe3ZhciBvLHM9bihlLGEua2V5KSxsPW4ocixhLmtleSk7aWYoczw9MCl7aWYoYS5sZWZ0JiYobz10KGUscixuLGksYS5sZWZ0KSkpcmV0dXJuIG87aWYobD4wJiYobz1pKGEua2V5LGEudmFsdWUpKSlyZXR1cm4gb31pZihsPjAmJmEucmlnaHQpcmV0dXJuIHQoZSxyLG4saSxhLnJpZ2h0KX0oZSxyLHRoaXMuX2NvbXBhcmUsdCx0aGlzLnJvb3QpfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsXCJiZWdpblwiLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT10aGlzLnJvb3Q7ZTspdC5wdXNoKGUpLGU9ZS5sZWZ0O3JldHVybiBuZXcgaCh0aGlzLHQpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LFwiZW5kXCIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPXRoaXMucm9vdDtlOyl0LnB1c2goZSksZT1lLnJpZ2h0O3JldHVybiBuZXcgaCh0aGlzLHQpfX0pLHUuYXQ9ZnVuY3Rpb24odCl7aWYodDwwKXJldHVybiBuZXcgaCh0aGlzLFtdKTtmb3IodmFyIGU9dGhpcy5yb290LHI9W107Oyl7aWYoci5wdXNoKGUpLGUubGVmdCl7aWYodDxlLmxlZnQuX2NvdW50KXtlPWUubGVmdDtjb250aW51ZX10LT1lLmxlZnQuX2NvdW50fWlmKCF0KXJldHVybiBuZXcgaCh0aGlzLHIpO2lmKHQtPTEsIWUucmlnaHQpYnJlYWs7aWYodD49ZS5yaWdodC5fY291bnQpYnJlYWs7ZT1lLnJpZ2h0fXJldHVybiBuZXcgaCh0aGlzLFtdKX0sdS5nZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYTw9MCYmKGk9bi5sZW5ndGgpLHI9YTw9MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbi5sZW5ndGg9aSxuZXcgaCh0aGlzLG4pfSx1Lmd0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290LG49W10saT0wO3I7KXt2YXIgYT1lKHQsci5rZXkpO24ucHVzaChyKSxhPDAmJihpPW4ubGVuZ3RoKSxyPWE8MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbi5sZW5ndGg9aSxuZXcgaCh0aGlzLG4pfSx1Lmx0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290LG49W10saT0wO3I7KXt2YXIgYT1lKHQsci5rZXkpO24ucHVzaChyKSxhPjAmJihpPW4ubGVuZ3RoKSxyPWE8PTA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG4ubGVuZ3RoPWksbmV3IGgodGhpcyxuKX0sdS5sZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYT49MCYmKGk9bi5sZW5ndGgpLHI9YTwwP3IubGVmdDpyLnJpZ2h0fXJldHVybiBuLmxlbmd0aD1pLG5ldyBoKHRoaXMsbil9LHUuZmluZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdO3I7KXt2YXIgaT1lKHQsci5rZXkpO2lmKG4ucHVzaChyKSwwPT09aSlyZXR1cm4gbmV3IGgodGhpcyxuKTtyPWk8PTA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG5ldyBoKHRoaXMsW10pfSx1LnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZpbmQodCk7cmV0dXJuIGU/ZS5yZW1vdmUoKTp0aGlzfSx1LmdldD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdDtyOyl7dmFyIG49ZSh0LHIua2V5KTtpZigwPT09bilyZXR1cm4gci52YWx1ZTtyPW48PTA/ci5sZWZ0OnIucmlnaHR9fTt2YXIgZj1oLnByb3RvdHlwZTtmdW5jdGlvbiBwKHQsZSl7dC5rZXk9ZS5rZXksdC52YWx1ZT1lLnZhbHVlLHQubGVmdD1lLmxlZnQsdC5yaWdodD1lLnJpZ2h0LHQuX2NvbG9yPWUuX2NvbG9yLHQuX2NvdW50PWUuX2NvdW50fWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9T2JqZWN0LmRlZmluZVByb3BlcnR5KGYsXCJ2YWxpZFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhY2subGVuZ3RoPjB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsXCJub2RlXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGFjay5sZW5ndGg+MD90aGlzLl9zdGFja1t0aGlzLl9zdGFjay5sZW5ndGgtMV06bnVsbH0sZW51bWVyYWJsZTohMH0pLGYuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGgodGhpcy50cmVlLHRoaXMuX3N0YWNrLnNsaWNlKCkpfSxmLnJlbW92ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N0YWNrO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gdGhpcy50cmVlO3ZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj10W3QubGVuZ3RoLTFdO2VbZS5sZW5ndGgtMV09bmV3IGEoci5fY29sb3Isci5rZXksci52YWx1ZSxyLmxlZnQsci5yaWdodCxyLl9jb3VudCk7Zm9yKHZhciB1PXQubGVuZ3RoLTI7dT49MDstLXUpeyhyPXRbdV0pLmxlZnQ9PT10W3UrMV0/ZVt1XT1uZXcgYShyLl9jb2xvcixyLmtleSxyLnZhbHVlLGVbdSsxXSxyLnJpZ2h0LHIuX2NvdW50KTplW3VdPW5ldyBhKHIuX2NvbG9yLHIua2V5LHIudmFsdWUsci5sZWZ0LGVbdSsxXSxyLl9jb3VudCl9aWYoKHI9ZVtlLmxlbmd0aC0xXSkubGVmdCYmci5yaWdodCl7dmFyIGg9ZS5sZW5ndGg7Zm9yKHI9ci5sZWZ0O3IucmlnaHQ7KWUucHVzaChyKSxyPXIucmlnaHQ7dmFyIGY9ZVtoLTFdO2UucHVzaChuZXcgYShyLl9jb2xvcixmLmtleSxmLnZhbHVlLHIubGVmdCxyLnJpZ2h0LHIuX2NvdW50KSksZVtoLTFdLmtleT1yLmtleSxlW2gtMV0udmFsdWU9ci52YWx1ZTtmb3IodT1lLmxlbmd0aC0yO3U+PWg7LS11KXI9ZVt1XSxlW3VdPW5ldyBhKHIuX2NvbG9yLHIua2V5LHIudmFsdWUsci5sZWZ0LGVbdSsxXSxyLl9jb3VudCk7ZVtoLTFdLmxlZnQ9ZVtoXX1pZigocj1lW2UubGVuZ3RoLTFdKS5fY29sb3I9PT1uKXt2YXIgZD1lW2UubGVuZ3RoLTJdO2QubGVmdD09PXI/ZC5sZWZ0PW51bGw6ZC5yaWdodD09PXImJihkLnJpZ2h0PW51bGwpLGUucG9wKCk7Zm9yKHU9MDt1PGUubGVuZ3RoOysrdSllW3VdLl9jb3VudC0tO3JldHVybiBuZXcgYyh0aGlzLnRyZWUuX2NvbXBhcmUsZVswXSl9aWYoci5sZWZ0fHxyLnJpZ2h0KXtyLmxlZnQ/cChyLHIubGVmdCk6ci5yaWdodCYmcChyLHIucmlnaHQpLHIuX2NvbG9yPWk7Zm9yKHU9MDt1PGUubGVuZ3RoLTE7Kyt1KWVbdV0uX2NvdW50LS07cmV0dXJuIG5ldyBjKHRoaXMudHJlZS5fY29tcGFyZSxlWzBdKX1pZigxPT09ZS5sZW5ndGgpcmV0dXJuIG5ldyBjKHRoaXMudHJlZS5fY29tcGFyZSxudWxsKTtmb3IodT0wO3U8ZS5sZW5ndGg7Kyt1KWVbdV0uX2NvdW50LS07dmFyIGc9ZVtlLmxlbmd0aC0yXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsYSxjLHU9dC5sZW5ndGgtMTt1Pj0wOy0tdSl7aWYoZT10W3VdLDA9PT11KXJldHVybiB2b2lkKGUuX2NvbG9yPWkpO2lmKChyPXRbdS0xXSkubGVmdD09PWUpe2lmKChhPXIucmlnaHQpLnJpZ2h0JiZhLnJpZ2h0Ll9jb2xvcj09PW4pcmV0dXJuIGM9KGE9ci5yaWdodD1vKGEpKS5yaWdodD1vKGEucmlnaHQpLHIucmlnaHQ9YS5sZWZ0LGEubGVmdD1yLGEucmlnaHQ9YyxhLl9jb2xvcj1yLl9jb2xvcixlLl9jb2xvcj1pLHIuX2NvbG9yPWksYy5fY29sb3I9aSxsKHIpLGwoYSksdT4xJiYoKGg9dFt1LTJdKS5sZWZ0PT09cj9oLmxlZnQ9YTpoLnJpZ2h0PWEpLHZvaWQodFt1LTFdPWEpO2lmKGEubGVmdCYmYS5sZWZ0Ll9jb2xvcj09PW4pcmV0dXJuIGM9KGE9ci5yaWdodD1vKGEpKS5sZWZ0PW8oYS5sZWZ0KSxyLnJpZ2h0PWMubGVmdCxhLmxlZnQ9Yy5yaWdodCxjLmxlZnQ9cixjLnJpZ2h0PWEsYy5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9aSxhLl9jb2xvcj1pLGUuX2NvbG9yPWksbChyKSxsKGEpLGwoYyksdT4xJiYoKGg9dFt1LTJdKS5sZWZ0PT09cj9oLmxlZnQ9YzpoLnJpZ2h0PWMpLHZvaWQodFt1LTFdPWMpO2lmKGEuX2NvbG9yPT09aSl7aWYoci5fY29sb3I9PT1uKXJldHVybiByLl9jb2xvcj1pLHZvaWQoci5yaWdodD1zKG4sYSkpO3IucmlnaHQ9cyhuLGEpO2NvbnRpbnVlfWE9byhhKSxyLnJpZ2h0PWEubGVmdCxhLmxlZnQ9cixhLl9jb2xvcj1yLl9jb2xvcixyLl9jb2xvcj1uLGwociksbChhKSx1PjEmJigoaD10W3UtMl0pLmxlZnQ9PT1yP2gubGVmdD1hOmgucmlnaHQ9YSksdFt1LTFdPWEsdFt1XT1yLHUrMTx0Lmxlbmd0aD90W3UrMV09ZTp0LnB1c2goZSksdSs9Mn1lbHNle2lmKChhPXIubGVmdCkubGVmdCYmYS5sZWZ0Ll9jb2xvcj09PW4pcmV0dXJuIGM9KGE9ci5sZWZ0PW8oYSkpLmxlZnQ9byhhLmxlZnQpLHIubGVmdD1hLnJpZ2h0LGEucmlnaHQ9cixhLmxlZnQ9YyxhLl9jb2xvcj1yLl9jb2xvcixlLl9jb2xvcj1pLHIuX2NvbG9yPWksYy5fY29sb3I9aSxsKHIpLGwoYSksdT4xJiYoKGg9dFt1LTJdKS5yaWdodD09PXI/aC5yaWdodD1hOmgubGVmdD1hKSx2b2lkKHRbdS0xXT1hKTtpZihhLnJpZ2h0JiZhLnJpZ2h0Ll9jb2xvcj09PW4pcmV0dXJuIGM9KGE9ci5sZWZ0PW8oYSkpLnJpZ2h0PW8oYS5yaWdodCksci5sZWZ0PWMucmlnaHQsYS5yaWdodD1jLmxlZnQsYy5yaWdodD1yLGMubGVmdD1hLGMuX2NvbG9yPXIuX2NvbG9yLHIuX2NvbG9yPWksYS5fY29sb3I9aSxlLl9jb2xvcj1pLGwociksbChhKSxsKGMpLHU+MSYmKChoPXRbdS0yXSkucmlnaHQ9PT1yP2gucmlnaHQ9YzpoLmxlZnQ9Yyksdm9pZCh0W3UtMV09Yyk7aWYoYS5fY29sb3I9PT1pKXtpZihyLl9jb2xvcj09PW4pcmV0dXJuIHIuX2NvbG9yPWksdm9pZChyLmxlZnQ9cyhuLGEpKTtyLmxlZnQ9cyhuLGEpO2NvbnRpbnVlfXZhciBoO2E9byhhKSxyLmxlZnQ9YS5yaWdodCxhLnJpZ2h0PXIsYS5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9bixsKHIpLGwoYSksdT4xJiYoKGg9dFt1LTJdKS5yaWdodD09PXI/aC5yaWdodD1hOmgubGVmdD1hKSx0W3UtMV09YSx0W3VdPXIsdSsxPHQubGVuZ3RoP3RbdSsxXT1lOnQucHVzaChlKSx1Kz0yfX19KGUpLGcubGVmdD09PXI/Zy5sZWZ0PW51bGw6Zy5yaWdodD1udWxsLG5ldyBjKHRoaXMudHJlZS5fY29tcGFyZSxlWzBdKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsXCJrZXlcIix7Z2V0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RhY2subGVuZ3RoPjApcmV0dXJuIHRoaXMuX3N0YWNrW3RoaXMuX3N0YWNrLmxlbmd0aC0xXS5rZXl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZixcInZhbHVlXCIse2dldDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0YWNrLmxlbmd0aD4wKXJldHVybiB0aGlzLl9zdGFja1t0aGlzLl9zdGFjay5sZW5ndGgtMV0udmFsdWV9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZixcImluZGV4XCIse2dldDpmdW5jdGlvbigpe3ZhciB0PTAsZT10aGlzLl9zdGFjaztpZigwPT09ZS5sZW5ndGgpe3ZhciByPXRoaXMudHJlZS5yb290O3JldHVybiByP3IuX2NvdW50OjB9ZVtlLmxlbmd0aC0xXS5sZWZ0JiYodD1lW2UubGVuZ3RoLTFdLmxlZnQuX2NvdW50KTtmb3IodmFyIG49ZS5sZW5ndGgtMjtuPj0wOy0tbillW24rMV09PT1lW25dLnJpZ2h0JiYoKyt0LGVbbl0ubGVmdCYmKHQrPWVbbl0ubGVmdC5fY291bnQpKTtyZXR1cm4gdH0sZW51bWVyYWJsZTohMH0pLGYubmV4dD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N0YWNrO2lmKDAhPT10Lmxlbmd0aCl7dmFyIGU9dFt0Lmxlbmd0aC0xXTtpZihlLnJpZ2h0KWZvcihlPWUucmlnaHQ7ZTspdC5wdXNoKGUpLGU9ZS5sZWZ0O2Vsc2UgZm9yKHQucG9wKCk7dC5sZW5ndGg+MCYmdFt0Lmxlbmd0aC0xXS5yaWdodD09PWU7KWU9dFt0Lmxlbmd0aC0xXSx0LnBvcCgpfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsXCJoYXNOZXh0XCIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N0YWNrO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4hMTtpZih0W3QubGVuZ3RoLTFdLnJpZ2h0KXJldHVybiEwO2Zvcih2YXIgZT10Lmxlbmd0aC0xO2U+MDstLWUpaWYodFtlLTFdLmxlZnQ9PT10W2VdKXJldHVybiEwO3JldHVybiExfX0pLGYudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3N0YWNrO2lmKDA9PT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCB1cGRhdGUgZW1wdHkgbm9kZSFcIik7dmFyIHI9bmV3IEFycmF5KGUubGVuZ3RoKSxuPWVbZS5sZW5ndGgtMV07cltyLmxlbmd0aC0xXT1uZXcgYShuLl9jb2xvcixuLmtleSx0LG4ubGVmdCxuLnJpZ2h0LG4uX2NvdW50KTtmb3IodmFyIGk9ZS5sZW5ndGgtMjtpPj0wOy0taSkobj1lW2ldKS5sZWZ0PT09ZVtpKzFdP3JbaV09bmV3IGEobi5fY29sb3Isbi5rZXksbi52YWx1ZSxyW2krMV0sbi5yaWdodCxuLl9jb3VudCk6cltpXT1uZXcgYShuLl9jb2xvcixuLmtleSxuLnZhbHVlLG4ubGVmdCxyW2krMV0sbi5fY291bnQpO3JldHVybiBuZXcgYyh0aGlzLnRyZWUuX2NvbXBhcmUsclswXSl9LGYucHJldj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N0YWNrO2lmKDAhPT10Lmxlbmd0aCl7dmFyIGU9dFt0Lmxlbmd0aC0xXTtpZihlLmxlZnQpZm9yKGU9ZS5sZWZ0O2U7KXQucHVzaChlKSxlPWUucmlnaHQ7ZWxzZSBmb3IodC5wb3AoKTt0Lmxlbmd0aD4wJiZ0W3QubGVuZ3RoLTFdLmxlZnQ9PT1lOyllPXRbdC5sZW5ndGgtMV0sdC5wb3AoKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLFwiaGFzUHJldlwiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwPT09dC5sZW5ndGgpcmV0dXJuITE7aWYodFt0Lmxlbmd0aC0xXS5sZWZ0KXJldHVybiEwO2Zvcih2YXIgZT10Lmxlbmd0aC0xO2U+MDstLWUpaWYodFtlLTFdLnJpZ2h0PT09dFtlXSlyZXR1cm4hMDtyZXR1cm4hMX19KX0se31dLDIyODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPVsuOTk5OTk5OTk5OTk5ODA5OSw2NzYuNTIwMzY4MTIxODg1MSwtMTI1OS4xMzkyMTY3MjI0MDI4LDc3MS4zMjM0Mjg3Nzc2NTMxLC0xNzYuNjE1MDI5MTYyMTQwNiwxMi41MDczNDMyNzg2ODY5MDUsLS4xMzg1NzEwOTUyNjU3MjAxMiw5OTg0MzY5NTc4MDE5NTcyZS0yMSwxLjUwNTYzMjczNTE0OTMxMTZlLTddLGk9NjA3LzEyOCxhPVsuOTk5OTk5OTk5OTk5OTk3MSw1Ny4xNTYyMzU2NjU4NjI5MiwtNTkuNTk3OTYwMzU1NDc1NDksMTQuMTM2MDk3OTc0NzQxNzQ2LC0uNDkxOTEzODE2MDk3NjIwMiwzMzk5NDY0OTk4NDgxMTg5ZS0yMCw0NjUyMzYyODkyNzA0ODU4ZS0yMCwtOTgzNzQ0NzUzMDQ4Nzk1NmUtMjAsLjAwMDE1ODA4ODcwMzIyNDkxMjUsLS4wMDAyMTAyNjQ0NDE3MjQxMDQ4OCwuMDAwMjE3NDM5NjE4MTE1MjEyNjUsLS4wMDAxNjQzMTgxMDY1MzY3NjM5LDg0NDE4MjIzOTgzODUyNzVlLTIwLC0yNjE5MDgzODQwMTU4MTQwOGUtMjEsMzY4OTkxODI2NTk1MzE2MjVlLTIyXTtmdW5jdGlvbiBvKHQpe2lmKHQ8MClyZXR1cm4gTnVtYmVyKFwiMC8wXCIpO2Zvcih2YXIgZT1hWzBdLHI9YS5sZW5ndGgtMTtyPjA7LS1yKWUrPWFbcl0vKHQrcik7dmFyIG49dCtpKy41O3JldHVybi41Kk1hdGgubG9nKDIqTWF0aC5QSSkrKHQrLjUpKk1hdGgubG9nKG4pLW4rTWF0aC5sb2coZSktTWF0aC5sb2codCl9ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSl7aWYoZTwuNSlyZXR1cm4gTWF0aC5QSS8oTWF0aC5zaW4oTWF0aC5QSSplKSp0KDEtZSkpO2lmKGU+MTAwKXJldHVybiBNYXRoLmV4cChvKGUpKTtlLT0xO2Zvcih2YXIgcj1uWzBdLGk9MTtpPDk7aSsrKXIrPW5baV0vKGUraSk7dmFyIGE9ZSs3Ky41O3JldHVybiBNYXRoLnNxcnQoMipNYXRoLlBJKSpNYXRoLnBvdyhhLGUrLjUpKk1hdGguZXhwKC1hKSpyfSxlLmV4cG9ydHMubG9nPW99LHt9XSwyMjk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwibXVzdCBzcGVjaWZ5IHR5cGUgc3RyaW5nXCIpO2lmKGU9ZXx8e30sXCJ1bmRlZmluZWRcIj09dHlwZW9mIGRvY3VtZW50JiYhZS5jYW52YXMpcmV0dXJuIG51bGw7dmFyIHI9ZS5jYW52YXN8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XCJudW1iZXJcIj09dHlwZW9mIGUud2lkdGgmJihyLndpZHRoPWUud2lkdGgpO1wibnVtYmVyXCI9PXR5cGVvZiBlLmhlaWdodCYmKHIuaGVpZ2h0PWUuaGVpZ2h0KTt2YXIgbixpPWU7dHJ5e3ZhciBhPVt0XTswPT09dC5pbmRleE9mKFwid2ViZ2xcIikmJmEucHVzaChcImV4cGVyaW1lbnRhbC1cIit0KTtmb3IodmFyIG89MDtvPGEubGVuZ3RoO28rKylpZihuPXIuZ2V0Q29udGV4dChhW29dLGkpKXJldHVybiBufWNhdGNoKHQpe249bnVsbH1yZXR1cm4gbnx8bnVsbH19LHt9XSwyMzA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgdSh0KTtyZXR1cm4gci51cGRhdGUoZSkscn07dmFyIG49dChcIi4vbGliL3RleHQuanNcIiksaT10KFwiLi9saWIvbGluZXMuanNcIiksYT10KFwiLi9saWIvYmFja2dyb3VuZC5qc1wiKSxvPXQoXCIuL2xpYi9jdWJlLmpzXCIpLHM9dChcIi4vbGliL3RpY2tzLmpzXCIpLGw9bmV3IEZsb2F0MzJBcnJheShbMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0pO2Z1bmN0aW9uIGModCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdH1mdW5jdGlvbiB1KHQpe3RoaXMuZ2w9dCx0aGlzLnBpeGVsUmF0aW89MSx0aGlzLmJvdW5kcz1bWy0xMCwtMTAsLTEwXSxbMTAsMTAsMTBdXSx0aGlzLnRpY2tzPVtbXSxbXSxbXV0sdGhpcy5hdXRvVGlja3M9ITAsdGhpcy50aWNrU3BhY2luZz1bMSwxLDFdLHRoaXMudGlja0VuYWJsZT1bITAsITAsITBdLHRoaXMudGlja0ZvbnQ9W1wic2Fucy1zZXJpZlwiLFwic2Fucy1zZXJpZlwiLFwic2Fucy1zZXJpZlwiXSx0aGlzLnRpY2tTaXplPVsxMiwxMiwxMl0sdGhpcy50aWNrQW5nbGU9WzAsMCwwXSx0aGlzLnRpY2tBbGlnbj1bXCJhdXRvXCIsXCJhdXRvXCIsXCJhdXRvXCJdLHRoaXMudGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aWNrUGFkPVsxMCwxMCwxMF0sdGhpcy5sYXN0Q3ViZVByb3BzPXtjdWJlRWRnZXM6WzAsMCwwXSxheGlzOlswLDAsMF19LHRoaXMubGFiZWxzPVtcInhcIixcInlcIixcInpcIl0sdGhpcy5sYWJlbEVuYWJsZT1bITAsITAsITBdLHRoaXMubGFiZWxGb250PVwic2Fucy1zZXJpZlwiLHRoaXMubGFiZWxTaXplPVsyMCwyMCwyMF0sdGhpcy5sYWJlbEFuZ2xlPVswLDAsMF0sdGhpcy5sYWJlbEFsaWduPVtcImF1dG9cIixcImF1dG9cIixcImF1dG9cIl0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5sYWJlbFBhZD1bMTAsMTAsMTBdLHRoaXMubGluZUVuYWJsZT1bITAsITAsITBdLHRoaXMubGluZU1pcnJvcj1bITEsITEsITFdLHRoaXMubGluZVdpZHRoPVsxLDEsMV0sdGhpcy5saW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxpbmVUaWNrRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5saW5lVGlja01pcnJvcj1bITEsITEsITFdLHRoaXMubGluZVRpY2tMZW5ndGg9WzAsMCwwXSx0aGlzLmxpbmVUaWNrV2lkdGg9WzEsMSwxXSx0aGlzLmxpbmVUaWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmdyaWRFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmdyaWRXaWR0aD1bMSwxLDFdLHRoaXMuZ3JpZENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy56ZXJvRW5hYmxlPVshMCwhMCwhMF0sdGhpcy56ZXJvTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy56ZXJvTGluZVdpZHRoPVsyLDIsMl0sdGhpcy5iYWNrZ3JvdW5kRW5hYmxlPVshMSwhMSwhMV0sdGhpcy5iYWNrZ3JvdW5kQ29sb3I9W1suOCwuOCwuOCwuNV0sWy44LC44LC44LC41XSxbLjgsLjgsLjgsLjVdXSx0aGlzLl9maXJzdEluaXQ9ITAsdGhpcy5fdGV4dD1udWxsLHRoaXMuX2xpbmVzPW51bGwsdGhpcy5fYmFja2dyb3VuZD1hKHQpfXZhciBoPXUucHJvdG90eXBlO2Z1bmN0aW9uIGYoKXt0aGlzLnByaW1hbE9mZnNldD1bMCwwLDBdLHRoaXMucHJpbWFsTWlub3I9WzAsMCwwXSx0aGlzLm1pcnJvck9mZnNldD1bMCwwLDBdLHRoaXMubWlycm9yTWlub3I9WzAsMCwwXX1oLnVwZGF0ZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscixuKXtpZihuIGluIHQpe3ZhciBpLGE9dFtuXSxvPXRoaXNbbl07KGU/QXJyYXkuaXNBcnJheShhKSYmQXJyYXkuaXNBcnJheShhWzBdKTpBcnJheS5pc0FycmF5KGEpKT90aGlzW25dPWk9W3IoYVswXSkscihhWzFdKSxyKGFbMl0pXTp0aGlzW25dPWk9W3IoYSkscihhKSxyKGEpXTtmb3IodmFyIHM9MDtzPDM7KytzKWlmKGlbc10hPT1vW3NdKXJldHVybiEwfXJldHVybiExfXQ9dHx8e307dmFyIHIsYT1lLmJpbmQodGhpcywhMSxOdW1iZXIpLG89ZS5iaW5kKHRoaXMsITEsQm9vbGVhbiksbD1lLmJpbmQodGhpcywhMSxTdHJpbmcpLGM9ZS5iaW5kKHRoaXMsITAsZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYoMz09PXQubGVuZ3RoKXJldHVyblsrdFswXSwrdFsxXSwrdFsyXSwxXTtpZig0PT09dC5sZW5ndGgpcmV0dXJuWyt0WzBdLCt0WzFdLCt0WzJdLCt0WzNdXX1yZXR1cm5bMCwwLDAsMV19KSx1PSExLGg9ITE7aWYoXCJib3VuZHNcImluIHQpZm9yKHZhciBmPXQuYm91bmRzLHA9MDtwPDI7KytwKWZvcih2YXIgZD0wO2Q8MzsrK2QpZltwXVtkXSE9PXRoaXMuYm91bmRzW3BdW2RdJiYoaD0hMCksdGhpcy5ib3VuZHNbcF1bZF09ZltwXVtkXTtpZihcInRpY2tzXCJpbiB0KXtyPXQudGlja3MsdT0hMCx0aGlzLmF1dG9UaWNrcz0hMTtmb3IocD0wO3A8MzsrK3ApdGhpcy50aWNrU3BhY2luZ1twXT0wfWVsc2UgYShcInRpY2tTcGFjaW5nXCIpJiYodGhpcy5hdXRvVGlja3M9ITAsaD0hMCk7aWYodGhpcy5fZmlyc3RJbml0JiYoXCJ0aWNrc1wiaW4gdHx8XCJ0aWNrU3BhY2luZ1wiaW4gdHx8KHRoaXMuYXV0b1RpY2tzPSEwKSxoPSEwLHU9ITAsdGhpcy5fZmlyc3RJbml0PSExKSxoJiZ0aGlzLmF1dG9UaWNrcyYmKHI9cy5jcmVhdGUodGhpcy5ib3VuZHMsdGhpcy50aWNrU3BhY2luZyksdT0hMCksdSl7Zm9yKHA9MDtwPDM7KytwKXJbcF0uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LngtZS54fSk7cy5lcXVhbChyLHRoaXMudGlja3MpP3U9ITE6dGhpcy50aWNrcz1yfW8oXCJ0aWNrRW5hYmxlXCIpLGwoXCJ0aWNrRm9udFwiKSYmKHU9ITApLGEoXCJ0aWNrU2l6ZVwiKSxhKFwidGlja0FuZ2xlXCIpLGEoXCJ0aWNrUGFkXCIpLGMoXCJ0aWNrQ29sb3JcIik7dmFyIGc9bChcImxhYmVsc1wiKTtsKFwibGFiZWxGb250XCIpJiYoZz0hMCksbyhcImxhYmVsRW5hYmxlXCIpLGEoXCJsYWJlbFNpemVcIiksYShcImxhYmVsUGFkXCIpLGMoXCJsYWJlbENvbG9yXCIpLG8oXCJsaW5lRW5hYmxlXCIpLG8oXCJsaW5lTWlycm9yXCIpLGEoXCJsaW5lV2lkdGhcIiksYyhcImxpbmVDb2xvclwiKSxvKFwibGluZVRpY2tFbmFibGVcIiksbyhcImxpbmVUaWNrTWlycm9yXCIpLGEoXCJsaW5lVGlja0xlbmd0aFwiKSxhKFwibGluZVRpY2tXaWR0aFwiKSxjKFwibGluZVRpY2tDb2xvclwiKSxvKFwiZ3JpZEVuYWJsZVwiKSxhKFwiZ3JpZFdpZHRoXCIpLGMoXCJncmlkQ29sb3JcIiksbyhcInplcm9FbmFibGVcIiksYyhcInplcm9MaW5lQ29sb3JcIiksYShcInplcm9MaW5lV2lkdGhcIiksbyhcImJhY2tncm91bmRFbmFibGVcIiksYyhcImJhY2tncm91bmRDb2xvclwiKSx0aGlzLl90ZXh0P3RoaXMuX3RleHQmJihnfHx1KSYmdGhpcy5fdGV4dC51cGRhdGUodGhpcy5ib3VuZHMsdGhpcy5sYWJlbHMsdGhpcy5sYWJlbEZvbnQsdGhpcy50aWNrcyx0aGlzLnRpY2tGb250KTp0aGlzLl90ZXh0PW4odGhpcy5nbCx0aGlzLmJvdW5kcyx0aGlzLmxhYmVscyx0aGlzLmxhYmVsRm9udCx0aGlzLnRpY2tzLHRoaXMudGlja0ZvbnQpLHRoaXMuX2xpbmVzJiZ1JiYodGhpcy5fbGluZXMuZGlzcG9zZSgpLHRoaXMuX2xpbmVzPW51bGwpLHRoaXMuX2xpbmVzfHwodGhpcy5fbGluZXM9aSh0aGlzLmdsLHRoaXMuYm91bmRzLHRoaXMudGlja3MpKX07dmFyIHA9W25ldyBmLG5ldyBmLG5ldyBmXTtmdW5jdGlvbiBkKHQsZSxyLG4saSl7Zm9yKHZhciBhPXQucHJpbWFsT2Zmc2V0LG89dC5wcmltYWxNaW5vcixzPXQubWlycm9yT2Zmc2V0LGw9dC5taXJyb3JNaW5vcixjPW5bZV0sdT0wO3U8MzsrK3UpaWYoZSE9PXUpe3ZhciBoPWEsZj1zLHA9byxkPWw7YyYxPDx1JiYoaD1zLGY9YSxwPWwsZD1vKSxoW3VdPXJbMF1bdV0sZlt1XT1yWzFdW3VdLGlbdV0+MD8ocFt1XT0tMSxkW3VdPTApOihwW3VdPTAsZFt1XT0xKX19dmFyIGc9WzAsMCwwXSx2PXttb2RlbDpsLHZpZXc6bCxwcm9qZWN0aW9uOmwsX29ydGhvOiExfTtoLmlzT3BhcXVlPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiExfSxoLmRyYXdUcmFuc3BhcmVudD1mdW5jdGlvbih0KXt9O3ZhciBtPVswLDAsMF0seT1bMCwwLDBdLHg9WzAsMCwwXTtoLmRyYXc9ZnVuY3Rpb24odCl7dD10fHx2O2Zvcih2YXIgZT10aGlzLmdsLHI9dC5tb2RlbHx8bCxuPXQudmlld3x8bCxpPXQucHJvamVjdGlvbnx8bCxhPXRoaXMuYm91bmRzLHM9dC5fb3J0aG98fCExLHU9byhyLG4saSxhLHMpLGg9dS5jdWJlRWRnZXMsZj11LmF4aXMsYj1uWzEyXSxfPW5bMTNdLHc9blsxNF0saz1uWzE1XSxBPShzPzI6MSkqdGhpcy5waXhlbFJhdGlvKihpWzNdKmIraVs3XSpfK2lbMTFdKncraVsxNV0qaykvZS5kcmF3aW5nQnVmZmVySGVpZ2h0LFQ9MDtUPDM7KytUKXRoaXMubGFzdEN1YmVQcm9wcy5jdWJlRWRnZXNbVF09aFtUXSx0aGlzLmxhc3RDdWJlUHJvcHMuYXhpc1tUXT1mW1RdO3ZhciBNPXA7Zm9yKFQ9MDtUPDM7KytUKWQocFtUXSxULHRoaXMuYm91bmRzLGgsZik7ZT10aGlzLmdsO3ZhciBTLEU9Zztmb3IoVD0wO1Q8MzsrK1QpdGhpcy5iYWNrZ3JvdW5kRW5hYmxlW1RdP0VbVF09ZltUXTpFW1RdPTA7dGhpcy5fYmFja2dyb3VuZC5kcmF3KHIsbixpLGEsRSx0aGlzLmJhY2tncm91bmRDb2xvciksdGhpcy5fbGluZXMuYmluZChyLG4saSx0aGlzKTtmb3IoVD0wO1Q8MzsrK1Qpe3ZhciBDPVswLDAsMF07ZltUXT4wP0NbVF09YVsxXVtUXTpDW1RdPWFbMF1bVF07Zm9yKHZhciBMPTA7TDwyOysrTCl7dmFyIHo9KFQrMStMKSUzLE89KFQrMSsoMV5MKSklMzt0aGlzLmdyaWRFbmFibGVbel0mJnRoaXMuX2xpbmVzLmRyYXdHcmlkKHosTyx0aGlzLmJvdW5kcyxDLHRoaXMuZ3JpZENvbG9yW3pdLHRoaXMuZ3JpZFdpZHRoW3pdKnRoaXMucGl4ZWxSYXRpbyl9Zm9yKEw9MDtMPDI7KytMKXt6PShUKzErTCklMyxPPShUKzErKDFeTCkpJTM7dGhpcy56ZXJvRW5hYmxlW09dJiZNYXRoLm1pbihhWzBdW09dLGFbMV1bT10pPD0wJiZNYXRoLm1heChhWzBdW09dLGFbMV1bT10pPj0wJiZ0aGlzLl9saW5lcy5kcmF3WmVybyh6LE8sdGhpcy5ib3VuZHMsQyx0aGlzLnplcm9MaW5lQ29sb3JbT10sdGhpcy56ZXJvTGluZVdpZHRoW09dKnRoaXMucGl4ZWxSYXRpbyl9fWZvcihUPTA7VDwzOysrVCl7dGhpcy5saW5lRW5hYmxlW1RdJiZ0aGlzLl9saW5lcy5kcmF3QXhpc0xpbmUoVCx0aGlzLmJvdW5kcyxNW1RdLnByaW1hbE9mZnNldCx0aGlzLmxpbmVDb2xvcltUXSx0aGlzLmxpbmVXaWR0aFtUXSp0aGlzLnBpeGVsUmF0aW8pLHRoaXMubGluZU1pcnJvcltUXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNMaW5lKFQsdGhpcy5ib3VuZHMsTVtUXS5taXJyb3JPZmZzZXQsdGhpcy5saW5lQ29sb3JbVF0sdGhpcy5saW5lV2lkdGhbVF0qdGhpcy5waXhlbFJhdGlvKTt2YXIgST1jKG0sTVtUXS5wcmltYWxNaW5vciksRD1jKHksTVtUXS5taXJyb3JNaW5vciksUD10aGlzLmxpbmVUaWNrTGVuZ3RoO2ZvcihMPTA7TDwzOysrTCl7dmFyIFI9QS9yWzUqTF07SVtMXSo9UFtMXSpSLERbTF0qPVBbTF0qUn10aGlzLmxpbmVUaWNrRW5hYmxlW1RdJiZ0aGlzLl9saW5lcy5kcmF3QXhpc1RpY2tzKFQsTVtUXS5wcmltYWxPZmZzZXQsSSx0aGlzLmxpbmVUaWNrQ29sb3JbVF0sdGhpcy5saW5lVGlja1dpZHRoW1RdKnRoaXMucGl4ZWxSYXRpbyksdGhpcy5saW5lVGlja01pcnJvcltUXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNUaWNrcyhULE1bVF0ubWlycm9yT2Zmc2V0LEQsdGhpcy5saW5lVGlja0NvbG9yW1RdLHRoaXMubGluZVRpY2tXaWR0aFtUXSp0aGlzLnBpeGVsUmF0aW8pfXRoaXMuX2xpbmVzLnVuYmluZCgpLHRoaXMuX3RleHQuYmluZChyLG4saSx0aGlzLnBpeGVsUmF0aW8pO3ZhciBGLEI7ZnVuY3Rpb24gTih0KXsoQj1bMCwwLDBdKVt0XT0xfWZ1bmN0aW9uIGoodCxlLHIpe3ZhciBuPSh0KzEpJTMsaT0odCsyKSUzLGE9ZVtuXSxvPWVbaV0scz1yW25dLGw9cltpXTthPjAmJmw+MD9OKG4pOmE+MCYmbDwwP04obik6YTwwJiZsPjA/TihuKTphPDAmJmw8MD9OKG4pOm8+MCYmcz4wP04oaSk6bz4wJiZzPDA/TihpKTpvPDAmJnM+MD9OKGkpOm88MCYmczwwJiZOKGkpfWZvcihUPTA7VDwzOysrVCl7dmFyIFY9TVtUXS5wcmltYWxNaW5vcixVPU1bVF0ubWlycm9yTWlub3IscT1jKHgsTVtUXS5wcmltYWxPZmZzZXQpO2ZvcihMPTA7TDwzOysrTCl0aGlzLmxpbmVUaWNrRW5hYmxlW1RdJiYocVtMXSs9QSpWW0xdKk1hdGgubWF4KHRoaXMubGluZVRpY2tMZW5ndGhbTF0sMCkvcls1KkxdKTt2YXIgSD1bMCwwLDBdO2lmKEhbVF09MSx0aGlzLnRpY2tFbmFibGVbVF0pey0zNjAwPT09dGhpcy50aWNrQW5nbGVbVF0/KHRoaXMudGlja0FuZ2xlW1RdPTAsdGhpcy50aWNrQWxpZ25bVF09XCJhdXRvXCIpOnRoaXMudGlja0FsaWduW1RdPS0xLEY9MSxcImF1dG9cIj09PShTPVt0aGlzLnRpY2tBbGlnbltUXSwuNSxGXSlbMF0/U1swXT0wOlNbMF09cGFyc2VJbnQoXCJcIitTWzBdKSxCPVswLDAsMF0saihULFYsVSk7Zm9yKEw9MDtMPDM7KytMKXFbTF0rPUEqVltMXSp0aGlzLnRpY2tQYWRbTF0vcls1KkxdO3RoaXMuX3RleHQuZHJhd1RpY2tzKFQsdGhpcy50aWNrU2l6ZVtUXSx0aGlzLnRpY2tBbmdsZVtUXSxxLHRoaXMudGlja0NvbG9yW1RdLEgsQixTKX1pZih0aGlzLmxhYmVsRW5hYmxlW1RdKXtGPTAsQj1bMCwwLDBdLHRoaXMubGFiZWxzW1RdLmxlbmd0aD40JiYoTihUKSxGPTEpLFwiYXV0b1wiPT09KFM9W3RoaXMubGFiZWxBbGlnbltUXSwuNSxGXSlbMF0/U1swXT0wOlNbMF09cGFyc2VJbnQoXCJcIitTWzBdKTtmb3IoTD0wO0w8MzsrK0wpcVtMXSs9QSpWW0xdKnRoaXMubGFiZWxQYWRbTF0vcls1KkxdO3FbVF0rPS41KihhWzBdW1RdK2FbMV1bVF0pLHRoaXMuX3RleHQuZHJhd0xhYmVsKFQsdGhpcy5sYWJlbFNpemVbVF0sdGhpcy5sYWJlbEFuZ2xlW1RdLHEsdGhpcy5sYWJlbENvbG9yW1RdLFswLDAsMF0sQixTKX19dGhpcy5fdGV4dC51bmJpbmQoKX0saC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fdGV4dC5kaXNwb3NlKCksdGhpcy5fbGluZXMuZGlzcG9zZSgpLHRoaXMuX2JhY2tncm91bmQuZGlzcG9zZSgpLHRoaXMuX2xpbmVzPW51bGwsdGhpcy5fdGV4dD1udWxsLHRoaXMuX2JhY2tncm91bmQ9bnVsbCx0aGlzLmdsPW51bGx9fSx7XCIuL2xpYi9iYWNrZ3JvdW5kLmpzXCI6MjMxLFwiLi9saWIvY3ViZS5qc1wiOjIzMixcIi4vbGliL2xpbmVzLmpzXCI6MjMzLFwiLi9saWIvdGV4dC5qc1wiOjIzNSxcIi4vbGliL3RpY2tzLmpzXCI6MjM2fV0sMjMxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPVtdLHM9MCxsPTA7bDwzOysrbClmb3IodmFyIGM9KGwrMSklMyx1PShsKzIpJTMsaD1bMCwwLDBdLGY9WzAsMCwwXSxwPS0xO3A8PTE7cCs9Mil7ci5wdXNoKHMscysyLHMrMSxzKzEscysyLHMrMyksaFtsXT1wLGZbbF09cDtmb3IodmFyIGQ9LTE7ZDw9MTtkKz0yKXtoW2NdPWQ7Zm9yKHZhciBnPS0xO2c8PTE7Zys9MiloW3VdPWcsZS5wdXNoKGhbMF0saFsxXSxoWzJdLGZbMF0sZlsxXSxmWzJdKSxzKz0xfXZhciB2PWM7Yz11LHU9dn12YXIgbT1uKHQsbmV3IEZsb2F0MzJBcnJheShlKSkseT1uKHQsbmV3IFVpbnQxNkFycmF5KHIpLHQuRUxFTUVOVF9BUlJBWV9CVUZGRVIpLHg9aSh0LFt7YnVmZmVyOm0sdHlwZTp0LkZMT0FULHNpemU6MyxvZmZzZXQ6MCxzdHJpZGU6MjR9LHtidWZmZXI6bSx0eXBlOnQuRkxPQVQsc2l6ZTozLG9mZnNldDoxMixzdHJpZGU6MjR9XSx5KSxiPWEodCk7cmV0dXJuIGIuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGIuYXR0cmlidXRlcy5ub3JtYWwubG9jYXRpb249MSxuZXcgbyh0LG0seCxiKX07dmFyIG49dChcImdsLWJ1ZmZlclwiKSxpPXQoXCJnbC12YW9cIiksYT10KFwiLi9zaGFkZXJzXCIpLmJnO2Z1bmN0aW9uIG8odCxlLHIsbil7dGhpcy5nbD10LHRoaXMuYnVmZmVyPWUsdGhpcy52YW89cix0aGlzLnNoYWRlcj1ufXZhciBzPW8ucHJvdG90eXBlO3MuZHJhdz1mdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvPSExLHM9MDtzPDM7KytzKW89b3x8aVtzXTtpZihvKXt2YXIgbD10aGlzLmdsO2wuZW5hYmxlKGwuUE9MWUdPTl9PRkZTRVRfRklMTCksbC5wb2x5Z29uT2Zmc2V0KDEsMiksdGhpcy5zaGFkZXIuYmluZCgpLHRoaXMuc2hhZGVyLnVuaWZvcm1zPXttb2RlbDp0LHZpZXc6ZSxwcm9qZWN0aW9uOnIsYm91bmRzOm4sZW5hYmxlOmksY29sb3JzOmF9LHRoaXMudmFvLmJpbmQoKSx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLDM2KSx0aGlzLnZhby51bmJpbmQoKSxsLmRpc2FibGUobC5QT0xZR09OX09GRlNFVF9GSUxMKX19LHMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlci5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0se1wiLi9zaGFkZXJzXCI6MjM0LFwiZ2wtYnVmZmVyXCI6MjM4LFwiZ2wtdmFvXCI6MzIwfV0sMjMyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEscCl7aShzLGUsdCksaShzLHIscyk7Zm9yKHZhciB5PTAseD0wO3g8MjsrK3gpe3VbMl09YVt4XVsyXTtmb3IodmFyIGI9MDtiPDI7KytiKXt1WzFdPWFbYl1bMV07Zm9yKHZhciBfPTA7XzwyOysrXyl1WzBdPWFbX11bMF0sZihsW3ldLHUscykseSs9MX19Zm9yKHZhciB3PS0xLHg9MDt4PDg7Kyt4KXtmb3IodmFyIGs9bFt4XVszXSxBPTA7QTwzOysrQSljW3hdW0FdPWxbeF1bQV0vaztwJiYoY1t4XVsyXSo9LTEpLGs8MCYmKHc8MD93PXg6Y1t4XVsyXTxjW3ddWzJdJiYodz14KSl9aWYodzwwKXt3PTA7Zm9yKHZhciBUPTA7VDwzOysrVCl7Zm9yKHZhciBNPShUKzIpJTMsUz0oVCsxKSUzLEU9LTEsQz0tMSxMPTA7TDwyOysrTCl7dmFyIHo9TDw8VCxPPXorKEw8PE0pKygxLUw8PFMpLEk9eisoMS1MPDxNKSsoTDw8Uyk7byhjW3pdLGNbT10sY1tJXSxoKTwwfHwoTD9FPTE6Qz0xKX1pZihFPDB8fEM8MClDPkUmJih3fD0xPDxUKTtlbHNle2Zvcih2YXIgTD0wO0w8MjsrK0wpe3ZhciB6PUw8PFQsTz16KyhMPDxNKSsoMS1MPDxTKSxJPXorKDEtTDw8TSkrKEw8PFMpLEQ9ZChbbFt6XSxsW09dLGxbSV0sbFt6KygxPDxNKSsoMTw8UyldXSk7TD9FPUQ6Qz1EfUM+RSYmKHd8PTE8PFQpfX19Zm9yKHZhciBQPTdedyxSPS0xLHg9MDt4PDg7Kyt4KXghPT13JiZ4IT09UCYmKFI8MD9SPXg6Y1tSXVsxXT5jW3hdWzFdJiYoUj14KSk7Zm9yKHZhciBGPS0xLHg9MDt4PDM7Kyt4KXt2YXIgQj1SXjE8PHg7aWYoQiE9PXcmJkIhPT1QKXtGPDAmJihGPUIpO3ZhciBTPWNbQl07U1swXTxjW0ZdWzBdJiYoRj1CKX19Zm9yKHZhciBOPS0xLHg9MDt4PDM7Kyt4KXt2YXIgQj1SXjE8PHg7aWYoQiE9PXcmJkIhPT1QJiZCIT09Ril7TjwwJiYoTj1CKTt2YXIgUz1jW0JdO1NbMF0+Y1tOXVswXSYmKE49Qil9fXZhciBqPWc7alswXT1qWzFdPWpbMl09MCxqW24ubG9nMihGXlIpXT1SJkYsaltuLmxvZzIoUl5OKV09UiZOO3ZhciBWPTdeTjtWPT09d3x8Vj09PVA/KFY9N15GLGpbbi5sb2cyKE5eVildPVYmTik6altuLmxvZzIoRl5WKV09ViZGO2Zvcih2YXIgVT12LHE9dyxUPTA7VDwzOysrVClVW1RdPXEmMTw8VD8tMToxO3JldHVybiBtfTt2YXIgbj10KFwiYml0LXR3aWRkbGVcIiksaT10KFwiZ2wtbWF0NC9tdWx0aXBseVwiKSxhPXQoXCJzcGxpdC1wb2x5Z29uXCIpLG89dChcInJvYnVzdC1vcmllbnRhdGlvblwiKSxzPW5ldyBBcnJheSgxNiksbD1uZXcgQXJyYXkoOCksYz1uZXcgQXJyYXkoOCksdT1uZXcgQXJyYXkoMyksaD1bMCwwLDBdO2Z1bmN0aW9uIGYodCxlLHIpe2Zvcih2YXIgbj0wO248NDsrK24pe3Rbbl09clsxMituXTtmb3IodmFyIGk9MDtpPDM7KytpKXRbbl0rPWVbaV0qcls0Kmkrbl19fSFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8ODsrK3QpbFt0XT1bMSwxLDEsMV0sY1t0XT1bMSwxLDFdfSgpO3ZhciBwPVtbMCwwLDEsMCwwXSxbMCwwLC0xLDEsMF0sWzAsLTEsMCwxLDBdLFswLDEsMCwxLDBdLFstMSwwLDAsMSwwXSxbMSwwLDAsMSwwXV07ZnVuY3Rpb24gZCh0KXtmb3IodmFyIGU9MDtlPHAubGVuZ3RoOysrZSlpZigodD1hLnBvc2l0aXZlKHQscFtlXSkpLmxlbmd0aDwzKXJldHVybiAwO3ZhciByPXRbMF0sbj1yWzBdL3JbM10saT1yWzFdL3JbM10sbz0wO2ZvcihlPTE7ZSsxPHQubGVuZ3RoOysrZSl7dmFyIHM9dFtlXSxsPXRbZSsxXSxjPXNbMF0vc1szXS1uLHU9c1sxXS9zWzNdLWksaD1sWzBdL2xbM10tbixmPWxbMV0vbFszXS1pO28rPU1hdGguYWJzKGMqZi11KmgpfXJldHVybiBvfXZhciBnPVsxLDEsMV0sdj1bMCwwLDBdLG09e2N1YmVFZGdlczpnLGF4aXM6dn19LHtcImJpdC10d2lkZGxlXCI6ODMsXCJnbC1tYXQ0L211bHRpcGx5XCI6MjY0LFwicm9idXN0LW9yaWVudGF0aW9uXCI6NDk1LFwic3BsaXQtcG9seWdvblwiOjUxMn1dLDIzMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG89W10scz1bMCwwLDBdLGw9WzAsMCwwXSxjPVswLDAsMF0sdT1bMCwwLDBdO28ucHVzaCgwLDAsMSwwLDEsMSwwLDAsLTEsMCwwLC0xLDAsMSwxLDAsMSwtMSk7Zm9yKHZhciBoPTA7aDwzOysraCl7Zm9yKHZhciBmPW8ubGVuZ3RoLzN8MCxkPTA7ZDxyW2hdLmxlbmd0aDsrK2Qpe3ZhciBnPStyW2hdW2RdLng7by5wdXNoKGcsMCwxLGcsMSwxLGcsMCwtMSxnLDAsLTEsZywxLDEsZywxLC0xKX12YXIgdj1vLmxlbmd0aC8zfDA7c1toXT1mLGxbaF09di1mO2Zvcih2YXIgZj1vLmxlbmd0aC8zfDAsbT0wO208cltoXS5sZW5ndGg7KyttKXt2YXIgZz0rcltoXVttXS54O28ucHVzaChnLDAsMSxnLDEsMSxnLDAsLTEsZywwLC0xLGcsMSwxLGcsMSwtMSl9dmFyIHY9by5sZW5ndGgvM3wwO2NbaF09Zix1W2hdPXYtZn12YXIgeT1uKHQsbmV3IEZsb2F0MzJBcnJheShvKSkseD1pKHQsW3tidWZmZXI6eSx0eXBlOnQuRkxPQVQsc2l6ZTozLHN0cmlkZTowLG9mZnNldDowfV0pLGI9YSh0KTtyZXR1cm4gYi5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsbmV3IHAodCx5LHgsYixsLHMsdSxjKX07dmFyIG49dChcImdsLWJ1ZmZlclwiKSxpPXQoXCJnbC12YW9cIiksYT10KFwiLi9zaGFkZXJzXCIpLmxpbmUsbz1bMCwwLDBdLHM9WzAsMCwwXSxsPVswLDAsMF0sYz1bMCwwLDBdLHU9WzEsMV07ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdFswXT10WzFdPXRbMl09MCx0fWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdH1mdW5jdGlvbiBwKHQsZSxyLG4saSxhLG8scyl7dGhpcy5nbD10LHRoaXMudmVydEJ1ZmZlcj1lLHRoaXMudmFvPXIsdGhpcy5zaGFkZXI9bix0aGlzLnRpY2tDb3VudD1pLHRoaXMudGlja09mZnNldD1hLHRoaXMuZ3JpZENvdW50PW8sdGhpcy5ncmlkT2Zmc2V0PXN9dmFyIGQ9cC5wcm90b3R5cGU7ZC5iaW5kPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnNoYWRlci5iaW5kKCksdGhpcy5zaGFkZXIudW5pZm9ybXMubW9kZWw9dCx0aGlzLnNoYWRlci51bmlmb3Jtcy52aWV3PWUsdGhpcy5zaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbj1yLHVbMF09dGhpcy5nbC5kcmF3aW5nQnVmZmVyV2lkdGgsdVsxXT10aGlzLmdsLmRyYXdpbmdCdWZmZXJIZWlnaHQsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuU2hhcGU9dSx0aGlzLnZhby5iaW5kKCl9LGQudW5iaW5kPWZ1bmN0aW9uKCl7dGhpcy52YW8udW5iaW5kKCl9LGQuZHJhd0F4aXNMaW5lPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9aChzKTt0aGlzLnNoYWRlci51bmlmb3Jtcy5tYWpvckF4aXM9cyxhW3RdPWVbMV1bdF0tZVswXVt0XSx0aGlzLnNoYWRlci51bmlmb3Jtcy5taW5vckF4aXM9YTt2YXIgbyx1PWYoYyxyKTt1W3RdKz1lWzBdW3RdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD11LHRoaXMuc2hhZGVyLnVuaWZvcm1zLmxpbmVXaWR0aD1pLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPW4sKG89aChsKSlbKHQrMiklM109MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5BeGlzPW8sdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyw2KSwobz1oKGwpKVsodCsxKSUzXT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlbkF4aXM9byx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLDYpfSxkLmRyYXdBeGlzVGlja3M9ZnVuY3Rpb24odCxlLHIsbixpKXtpZih0aGlzLnRpY2tDb3VudFt0XSl7dmFyIGE9aChvKTthW3RdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMubWFqb3JBeGlzPWEsdGhpcy5zaGFkZXIudW5pZm9ybXMub2Zmc2V0PWUsdGhpcy5zaGFkZXIudW5pZm9ybXMubWlub3JBeGlzPXIsdGhpcy5zaGFkZXIudW5pZm9ybXMuY29sb3I9bix0aGlzLnNoYWRlci51bmlmb3Jtcy5saW5lV2lkdGg9aTt2YXIgcz1oKGwpO3NbdF09MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5BeGlzPXMsdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyx0aGlzLnRpY2tDb3VudFt0XSx0aGlzLnRpY2tPZmZzZXRbdF0pfX0sZC5kcmF3R3JpZD1mdW5jdGlvbih0LGUscixuLGksYSl7aWYodGhpcy5ncmlkQ291bnRbdF0pe3ZhciB1PWgocyk7dVtlXT1yWzFdW2VdLXJbMF1bZV0sdGhpcy5zaGFkZXIudW5pZm9ybXMubWlub3JBeGlzPXU7dmFyIHA9ZihjLG4pO3BbZV0rPXJbMF1bZV0sdGhpcy5zaGFkZXIudW5pZm9ybXMub2Zmc2V0PXA7dmFyIGQ9aChvKTtkW3RdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMubWFqb3JBeGlzPWQ7dmFyIGc9aChsKTtnW3RdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1nLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmxpbmVXaWR0aD1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPWksdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyx0aGlzLmdyaWRDb3VudFt0XSx0aGlzLmdyaWRPZmZzZXRbdF0pfX0sZC5kcmF3WmVybz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89aChzKTt0aGlzLnNoYWRlci51bmlmb3Jtcy5tYWpvckF4aXM9byxvW3RdPXJbMV1bdF0tclswXVt0XSx0aGlzLnNoYWRlci51bmlmb3Jtcy5taW5vckF4aXM9bzt2YXIgdT1mKGMsbik7dVt0XSs9clswXVt0XSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9dTt2YXIgcD1oKGwpO3BbZV09MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5BeGlzPXAsdGhpcy5zaGFkZXIudW5pZm9ybXMubGluZVdpZHRoPWEsdGhpcy5zaGFkZXIudW5pZm9ybXMuY29sb3I9aSx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLDYpfSxkLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZhby5kaXNwb3NlKCksdGhpcy52ZXJ0QnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7XCIuL3NoYWRlcnNcIjoyMzQsXCJnbC1idWZmZXJcIjoyMzgsXCJnbC12YW9cIjozMjB9XSwyMzQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2xzbGlmeVwiKSxpPXQoXCJnbC1zaGFkZXJcIiksYT1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xcblxcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcXG51bmlmb3JtIHZlYzMgb2Zmc2V0LCBtYWpvckF4aXMsIG1pbm9yQXhpcywgc2NyZWVuQXhpcztcXG51bmlmb3JtIGZsb2F0IGxpbmVXaWR0aDtcXG51bmlmb3JtIHZlYzIgc2NyZWVuU2hhcGU7XFxuXFxudmVjMyBwcm9qZWN0KHZlYzMgcCkge1xcbiAgdmVjNCBwcCA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHAsIDEuMCk7XFxuICByZXR1cm4gcHAueHl6IC8gbWF4KHBwLncsIDAuMDAwMSk7XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzMgbWFqb3IgPSBwb3NpdGlvbi54ICogbWFqb3JBeGlzO1xcbiAgdmVjMyBtaW5vciA9IHBvc2l0aW9uLnkgKiBtaW5vckF4aXM7XFxuXFxuICB2ZWMzIHZQb3NpdGlvbiA9IG1ham9yICsgbWlub3IgKyBvZmZzZXQ7XFxuICB2ZWMzIHBQb3NpdGlvbiA9IHByb2plY3QodlBvc2l0aW9uKTtcXG4gIHZlYzMgb2Zmc2V0ID0gcHJvamVjdCh2UG9zaXRpb24gKyBzY3JlZW5BeGlzICogcG9zaXRpb24ueik7XFxuXFxuICB2ZWMyIHNjcmVlbiA9IG5vcm1hbGl6ZSgob2Zmc2V0IC0gcFBvc2l0aW9uKS54eSAqIHNjcmVlblNoYXBlKSAvIHNjcmVlblNoYXBlO1xcblxcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBQb3NpdGlvbiArIHZlYzMoMC41ICogc2NyZWVuICogbGluZVdpZHRoLCAwKSwgMS4wKTtcXG59XFxuXCJdKSxvPW4oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxudW5pZm9ybSB2ZWM0IGNvbG9yO1xcbnZvaWQgbWFpbigpIHtcXG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cIl0pO3IubGluZT1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZTpcInBvc2l0aW9uXCIsdHlwZTpcInZlYzNcIn1dKX07dmFyIHM9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcXG5cXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XFxudW5pZm9ybSB2ZWMzIG9mZnNldCwgYXhpcywgYWxpZ25EaXIsIGFsaWduT3B0O1xcbnVuaWZvcm0gZmxvYXQgc2NhbGUsIGFuZ2xlLCBwaXhlbFNjYWxlO1xcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xcblxcbnZlYzMgcHJvamVjdCh2ZWMzIHApIHtcXG4gIHZlYzQgcHAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwLCAxLjApO1xcbiAgcmV0dXJuIHBwLnh5eiAvIG1heChwcC53LCAwLjAwMDEpO1xcbn1cXG5cXG5mbG9hdCBjb21wdXRlVmlld0FuZ2xlKHZlYzMgYSwgdmVjMyBiKSB7XFxuICB2ZWMzIEEgPSBwcm9qZWN0KGEpO1xcbiAgdmVjMyBCID0gcHJvamVjdChiKTtcXG5cXG4gIHJldHVybiBhdGFuKFxcbiAgICAoQi55IC0gQS55KSAqIHJlc29sdXRpb24ueSxcXG4gICAgKEIueCAtIEEueCkgKiByZXNvbHV0aW9uLnhcXG4gICk7XFxufVxcblxcbmNvbnN0IGZsb2F0IFBJID0gMy4xNDE1OTI7XFxuY29uc3QgZmxvYXQgVFdPX1BJID0gMi4wICogUEk7XFxuY29uc3QgZmxvYXQgSEFMRl9QSSA9IDAuNSAqIFBJO1xcbmNvbnN0IGZsb2F0IE9ORV9BTkRfSEFMRl9QSSA9IDEuNSAqIFBJO1xcblxcbmludCBvcHRpb24gPSBpbnQoZmxvb3IoYWxpZ25PcHQueCArIDAuMDAxKSk7XFxuZmxvYXQgaHZfcmF0aW8gPSAgICAgICBhbGlnbk9wdC55O1xcbmJvb2wgZW5hYmxlQWxpZ24gPSAgICAoYWxpZ25PcHQueiAhPSAwLjApO1xcblxcbmZsb2F0IG1vZF9hbmdsZShmbG9hdCBhKSB7XFxuICByZXR1cm4gbW9kKGEsIFBJKTtcXG59XFxuXFxuZmxvYXQgcG9zaXRpdmVfYW5nbGUoZmxvYXQgYSkge1xcbiAgcmV0dXJuIG1vZF9hbmdsZSgoYSA8IDAuMCkgP1xcbiAgICBhICsgVFdPX1BJIDpcXG4gICAgYVxcbiAgKTtcXG59XFxuXFxuZmxvYXQgbG9va191cHdhcmRzKGZsb2F0IGEpIHtcXG4gIGZsb2F0IGIgPSBwb3NpdGl2ZV9hbmdsZShhKTtcXG4gIHJldHVybiAoKGIgPiBIQUxGX1BJKSAmJiAoYiA8PSBPTkVfQU5EX0hBTEZfUEkpKSA/XFxuICAgIGIgLSBQSSA6XFxuICAgIGI7XFxufVxcblxcbmZsb2F0IGxvb2tfaG9yaXpvbnRhbF9vcl92ZXJ0aWNhbChmbG9hdCBhLCBmbG9hdCByYXRpbykge1xcbiAgLy8gcmF0aW8gY29udHJvbHMgdGhlIHJhdGlvIGJldHdlZW4gYmVpbmcgaG9yaXpvbnRhbCB0byAodmVydGljYWwgKyBob3Jpem9udGFsKVxcbiAgLy8gaWYgcmF0aW8gaXMgc2V0IHRvIDAuNSB0aGVuIGl0IGlzIDUwJSwgNTAlLlxcbiAgLy8gd2hlbiB1c2luZyBhIGhpZ2hlciByYXRpbyBlLmcuIDAuNzUgdGhlIHJlc3VsdCB3b3VsZFxcbiAgLy8gbGlrZWx5IGJlIG1vcmUgaG9yaXpvbnRhbCB0aGFuIHZlcnRpY2FsLlxcblxcbiAgZmxvYXQgYiA9IHBvc2l0aXZlX2FuZ2xlKGEpO1xcblxcbiAgcmV0dXJuXFxuICAgIChiIDwgKCAgICAgIHJhdGlvKSAqIEhBTEZfUEkpID8gMC4wIDpcXG4gICAgKGIgPCAoMi4wIC0gcmF0aW8pICogSEFMRl9QSSkgPyAtSEFMRl9QSSA6XFxuICAgIChiIDwgKDIuMCArIHJhdGlvKSAqIEhBTEZfUEkpID8gMC4wIDpcXG4gICAgKGIgPCAoNC4wIC0gcmF0aW8pICogSEFMRl9QSSkgPyBIQUxGX1BJIDpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjA7XFxufVxcblxcbmZsb2F0IHJvdW5kVG8oZmxvYXQgYSwgZmxvYXQgYikge1xcbiAgcmV0dXJuIGZsb2F0KGIgKiBmbG9vcigoYSArIDAuNSAqIGIpIC8gYikpO1xcbn1cXG5cXG5mbG9hdCBsb29rX3JvdW5kX25fZGlyZWN0aW9ucyhmbG9hdCBhLCBpbnQgbikge1xcbiAgZmxvYXQgYiA9IHBvc2l0aXZlX2FuZ2xlKGEpO1xcbiAgZmxvYXQgZGl2ID0gVFdPX1BJIC8gZmxvYXQobik7XFxuICBmbG9hdCBjID0gcm91bmRUbyhiLCBkaXYpO1xcbiAgcmV0dXJuIGxvb2tfdXB3YXJkcyhjKTtcXG59XFxuXFxuZmxvYXQgYXBwbHlBbGlnbk9wdGlvbihmbG9hdCByYXdBbmdsZSwgZmxvYXQgZGVsdGEpIHtcXG4gIHJldHVyblxcbiAgICAob3B0aW9uID4gIDIpID8gbG9va19yb3VuZF9uX2RpcmVjdGlvbnMocmF3QW5nbGUgKyBkZWx0YSwgb3B0aW9uKSA6ICAgICAgIC8vIG9wdGlvbiAzLW46IHJvdW5kIHRvIG4gZGlyZWN0aW9uc1xcbiAgICAob3B0aW9uID09IDIpID8gbG9va19ob3Jpem9udGFsX29yX3ZlcnRpY2FsKHJhd0FuZ2xlICsgZGVsdGEsIGh2X3JhdGlvKSA6IC8vIGhvcml6b250YWwgb3IgdmVydGljYWxcXG4gICAgKG9wdGlvbiA9PSAxKSA/IHJhd0FuZ2xlICsgZGVsdGEgOiAgICAgICAvLyB1c2UgZnJlZSBhbmdsZSwgYW5kIGZsaXAgdG8gYWxpZ24gd2l0aCBvbmUgZGlyZWN0aW9uIG9mIHRoZSBheGlzXFxuICAgIChvcHRpb24gPT0gMCkgPyBsb29rX3Vwd2FyZHMocmF3QW5nbGUpIDogLy8gdXNlIGZyZWUgYW5nbGUsIGFuZCBzdGF5IHVwd2FyZHNcXG4gICAgKG9wdGlvbiA9PS0xKSA/IDAuMCA6ICAgICAgICAgICAgICAgICAgICAvLyB1c2VmdWwgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGFsbCB0ZXh0cyByZW1haW5zIGhvcml6b250YWxcXG4gICAgICAgICAgICAgICAgICAgIHJhd0FuZ2xlOyAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgcmV0dXJuIGJhY2sgcmF3IGlucHV0IGFuZ2xlXFxufVxcblxcbmJvb2wgaXNBeGlzVGl0bGUgPSAoYXhpcy54ID09IDAuMCkgJiZcXG4gICAgICAgICAgICAgICAgICAgKGF4aXMueSA9PSAwLjApICYmXFxuICAgICAgICAgICAgICAgICAgIChheGlzLnogPT0gMC4wKTtcXG5cXG52b2lkIG1haW4oKSB7XFxuICAvL0NvbXB1dGUgd29ybGQgb2Zmc2V0XFxuICBmbG9hdCBheGlzRGlzdGFuY2UgPSBwb3NpdGlvbi56O1xcbiAgdmVjMyBkYXRhUG9zaXRpb24gPSBheGlzRGlzdGFuY2UgKiBheGlzICsgb2Zmc2V0O1xcblxcbiAgZmxvYXQgYmV0YSA9IGFuZ2xlOyAvLyBpLmUuIHVzZXIgZGVmaW5lZCBhdHRyaWJ1dGVzIGZvciBlYWNoIHRpY2tcXG5cXG4gIGZsb2F0IGF4aXNBbmdsZTtcXG4gIGZsb2F0IGNsaXBBbmdsZTtcXG4gIGZsb2F0IGZsaXA7XFxuXFxuICBpZiAoZW5hYmxlQWxpZ24pIHtcXG4gICAgYXhpc0FuZ2xlID0gKGlzQXhpc1RpdGxlKSA/IEhBTEZfUEkgOlxcbiAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlVmlld0FuZ2xlKGRhdGFQb3NpdGlvbiwgZGF0YVBvc2l0aW9uICsgYXhpcyk7XFxuICAgIGNsaXBBbmdsZSA9IGNvbXB1dGVWaWV3QW5nbGUoZGF0YVBvc2l0aW9uLCBkYXRhUG9zaXRpb24gKyBhbGlnbkRpcik7XFxuXFxuICAgIGF4aXNBbmdsZSArPSAoc2luKGF4aXNBbmdsZSkgPCAwLjApID8gUEkgOiAwLjA7XFxuICAgIGNsaXBBbmdsZSArPSAoc2luKGNsaXBBbmdsZSkgPCAwLjApID8gUEkgOiAwLjA7XFxuXFxuICAgIGZsaXAgPSAoZG90KHZlYzIoY29zKGF4aXNBbmdsZSksIHNpbihheGlzQW5nbGUpKSxcXG4gICAgICAgICAgICAgICAgdmVjMihzaW4oY2xpcEFuZ2xlKSwtY29zKGNsaXBBbmdsZSkpKSA+IDAuMCkgPyAxLjAgOiAwLjA7XFxuXFxuICAgIGJldGEgKz0gYXBwbHlBbGlnbk9wdGlvbihjbGlwQW5nbGUsIGZsaXAgKiBQSSk7XFxuICB9XFxuXFxuICAvL0NvbXB1dGUgcGxhbmUgb2Zmc2V0XFxuICB2ZWMyIHBsYW5lQ29vcmQgPSBwb3NpdGlvbi54eSAqIHBpeGVsU2NhbGU7XFxuXFxuICBtYXQyIHBsYW5lWGZvcm0gPSBzY2FsZSAqIG1hdDIoXFxuICAgICBjb3MoYmV0YSksIHNpbihiZXRhKSxcXG4gICAgLXNpbihiZXRhKSwgY29zKGJldGEpXFxuICApO1xcblxcbiAgdmVjMiB2aWV3T2Zmc2V0ID0gMi4wICogcGxhbmVYZm9ybSAqIHBsYW5lQ29vcmQgLyByZXNvbHV0aW9uO1xcblxcbiAgLy9Db21wdXRlIGNsaXAgcG9zaXRpb25cXG4gIHZlYzMgY2xpcFBvc2l0aW9uID0gcHJvamVjdChkYXRhUG9zaXRpb24pO1xcblxcbiAgLy9BcHBseSB0ZXh0IG9mZnNldCBpbiBjbGlwIGNvb3JkaW5hdGVzXFxuICBjbGlwUG9zaXRpb24gKz0gdmVjMyh2aWV3T2Zmc2V0LCAwLjApO1xcblxcbiAgLy9Eb25lXFxuICBnbF9Qb3NpdGlvbiA9IHZlYzQoY2xpcFBvc2l0aW9uLCAxLjApO1xcbn1cIl0pLGw9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG51bmlmb3JtIHZlYzQgY29sb3I7XFxudm9pZCBtYWluKCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVwiXSk7ci50ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBpKHQscyxsLG51bGwsW3tuYW1lOlwicG9zaXRpb25cIix0eXBlOlwidmVjM1wifV0pfTt2YXIgYz1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDtcXG5cXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XFxudW5pZm9ybSB2ZWMzIGVuYWJsZTtcXG51bmlmb3JtIHZlYzMgYm91bmRzWzJdO1xcblxcbnZhcnlpbmcgdmVjMyBjb2xvckNoYW5uZWw7XFxuXFxudm9pZCBtYWluKCkge1xcblxcbiAgdmVjMyBzaWduQXhpcyA9IHNpZ24oYm91bmRzWzFdIC0gYm91bmRzWzBdKTtcXG5cXG4gIHZlYzMgcmVhbE5vcm1hbCA9IHNpZ25BeGlzICogbm9ybWFsO1xcblxcbiAgaWYoZG90KHJlYWxOb3JtYWwsIGVuYWJsZSkgPiAwLjApIHtcXG4gICAgdmVjMyBtaW5SYW5nZSA9IG1pbihib3VuZHNbMF0sIGJvdW5kc1sxXSk7XFxuICAgIHZlYzMgbWF4UmFuZ2UgPSBtYXgoYm91bmRzWzBdLCBib3VuZHNbMV0pO1xcbiAgICB2ZWMzIG5Qb3NpdGlvbiA9IG1peChtaW5SYW5nZSwgbWF4UmFuZ2UsIDAuNSAqIChwb3NpdGlvbiArIDEuMCkpO1xcbiAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KG5Qb3NpdGlvbiwgMS4wKTtcXG4gIH0gZWxzZSB7XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLDAsMCwwKTtcXG4gIH1cXG5cXG4gIGNvbG9yQ2hhbm5lbCA9IGFicyhyZWFsTm9ybWFsKTtcXG59XCJdKSx1PW4oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxudW5pZm9ybSB2ZWM0IGNvbG9yc1szXTtcXG5cXG52YXJ5aW5nIHZlYzMgY29sb3JDaGFubmVsO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yQ2hhbm5lbC54ICogY29sb3JzWzBdICtcXG4gICAgICAgICAgICAgICAgIGNvbG9yQ2hhbm5lbC55ICogY29sb3JzWzFdICtcXG4gICAgICAgICAgICAgICAgIGNvbG9yQ2hhbm5lbC56ICogY29sb3JzWzJdO1xcbn1cIl0pO3IuYmc9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxjLHUsbnVsbCxbe25hbWU6XCJwb3NpdGlvblwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwibm9ybWFsXCIsdHlwZTpcInZlYzNcIn1dKX19LHtcImdsLXNoYWRlclwiOjI5OCxnbHNsaWZ5OjQwMn1dLDIzNTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxzLGwpe3ZhciB1PW4odCksaD1pKHQsW3tidWZmZXI6dSxzaXplOjN9XSksZj1vKHQpO2YuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wO3ZhciBwPW5ldyBjKHQsZix1LGgpO3JldHVybiBwLnVwZGF0ZShlLHIsYSxzLGwpLHB9O3ZhciBuPXQoXCJnbC1idWZmZXJcIiksaT10KFwiZ2wtdmFvXCIpLGE9dChcInZlY3Rvcml6ZS10ZXh0XCIpLG89dChcIi4vc2hhZGVyc1wiKS50ZXh0LHM9d2luZG93fHxyLmdsb2JhbHx8e30sbD1zLl9fVEVYVF9DQUNIRXx8e307cy5fX1RFWFRfQ0FDSEU9e307ZnVuY3Rpb24gYyh0LGUscixuKXt0aGlzLmdsPXQsdGhpcy5zaGFkZXI9ZSx0aGlzLmJ1ZmZlcj1yLHRoaXMudmFvPW4sdGhpcy50aWNrT2Zmc2V0PXRoaXMudGlja0NvdW50PXRoaXMubGFiZWxPZmZzZXQ9dGhpcy5sYWJlbENvdW50PW51bGx9dmFyIHU9Yy5wcm90b3R5cGUsaD1bMCwwXTt1LmJpbmQ9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy52YW8uYmluZCgpLHRoaXMuc2hhZGVyLmJpbmQoKTt2YXIgaT10aGlzLnNoYWRlci51bmlmb3JtcztpLm1vZGVsPXQsaS52aWV3PWUsaS5wcm9qZWN0aW9uPXIsaS5waXhlbFNjYWxlPW4saFswXT10aGlzLmdsLmRyYXdpbmdCdWZmZXJXaWR0aCxoWzFdPXRoaXMuZ2wuZHJhd2luZ0J1ZmZlckhlaWdodCx0aGlzLnNoYWRlci51bmlmb3Jtcy5yZXNvbHV0aW9uPWh9LHUudW5iaW5kPWZ1bmN0aW9uKCl7dGhpcy52YW8udW5iaW5kKCl9LHUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG89W107ZnVuY3Rpb24gcyh0LGUscixuLGkscyl7dmFyIGM9bFtyXTtjfHwoYz1sW3JdPXt9KTt2YXIgdT1jW2VdO3V8fCh1PWNbZV09ZnVuY3Rpb24odCxlKXt0cnl7cmV0dXJuIGEodCxlKX1jYXRjaChlKXtyZXR1cm4gY29uc29sZS53YXJuKCdlcnJvciB2ZWN0b3JpemluZyB0ZXh0OlwiJyt0KydcIiBlcnJvcjonLGUpLHtjZWxsczpbXSxwb3NpdGlvbnM6W119fX0oZSx7dHJpYW5nbGVzOiEwLGZvbnQ6cix0ZXh0QWxpZ246XCJjZW50ZXJcIix0ZXh0QmFzZWxpbmU6XCJtaWRkbGVcIixsaW5lU3BhY2luZzppLHN0eWxldGFnczpzfSkpO2Zvcih2YXIgaD0obnx8MTIpLzEyLGY9dS5wb3NpdGlvbnMscD11LmNlbGxzLGQ9MCxnPXAubGVuZ3RoO2Q8ZzsrK2QpZm9yKHZhciB2PXBbZF0sbT0yO20+PTA7LS1tKXt2YXIgeT1mW3ZbbV1dO28ucHVzaChoKnlbMF0sLWgqeVsxXSx0KX19Zm9yKHZhciBjPVswLDAsMF0sdT1bMCwwLDBdLGg9WzAsMCwwXSxmPVswLDAsMF0scD17YnJlYWtsaW5lczohMCxib2xkczohMCxpdGFsaWNzOiEwLHN1YnNjcmlwdHM6ITAsc3VwZXJzY3JpcHRzOiEwfSxkPTA7ZDwzOysrZCl7aFtkXT1vLmxlbmd0aC8zfDAscyguNSoodFswXVtkXSt0WzFdW2RdKSxlW2RdLHJbZF0sMTIsMS4yNSxwKSxmW2RdPShvLmxlbmd0aC8zfDApLWhbZF0sY1tkXT1vLmxlbmd0aC8zfDA7Zm9yKHZhciBnPTA7ZzxuW2RdLmxlbmd0aDsrK2cpbltkXVtnXS50ZXh0JiZzKG5bZF1bZ10ueCxuW2RdW2ddLnRleHQsbltkXVtnXS5mb250fHxpLG5bZF1bZ10uZm9udFNpemV8fDEyLDEuMjUscCk7dVtkXT0oby5sZW5ndGgvM3wwKS1jW2RdfXRoaXMuYnVmZmVyLnVwZGF0ZShvKSx0aGlzLnRpY2tPZmZzZXQ9Yyx0aGlzLnRpY2tDb3VudD11LHRoaXMubGFiZWxPZmZzZXQ9aCx0aGlzLmxhYmVsQ291bnQ9Zn0sdS5kcmF3VGlja3M9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt0aGlzLnRpY2tDb3VudFt0XSYmKHRoaXMuc2hhZGVyLnVuaWZvcm1zLmF4aXM9YSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1pLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFuZ2xlPXIsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NhbGU9ZSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9bix0aGlzLnNoYWRlci51bmlmb3Jtcy5hbGlnbkRpcj1vLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFsaWduT3B0PXMsdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyx0aGlzLnRpY2tDb3VudFt0XSx0aGlzLnRpY2tPZmZzZXRbdF0pKX0sdS5kcmF3TGFiZWw9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt0aGlzLmxhYmVsQ291bnRbdF0mJih0aGlzLnNoYWRlci51bmlmb3Jtcy5heGlzPWEsdGhpcy5zaGFkZXIudW5pZm9ybXMuY29sb3I9aSx0aGlzLnNoYWRlci51bmlmb3Jtcy5hbmdsZT1yLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjYWxlPWUsdGhpcy5zaGFkZXIudW5pZm9ybXMub2Zmc2V0PW4sdGhpcy5zaGFkZXIudW5pZm9ybXMuYWxpZ25EaXI9byx0aGlzLnNoYWRlci51bmlmb3Jtcy5hbGlnbk9wdD1zLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy5sYWJlbENvdW50W3RdLHRoaXMubGFiZWxPZmZzZXRbdF0pKX0sdS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlci5kaXNwb3NlKCl9fSkuY2FsbCh0aGlzLHQoXCJfcHJvY2Vzc1wiKSl9LHtcIi4vc2hhZGVyc1wiOjIzNCxfcHJvY2Vzczo0NzUsXCJnbC1idWZmZXJcIjoyMzgsXCJnbC12YW9cIjozMjAsXCJ2ZWN0b3JpemUtdGV4dFwiOjUzNX1dLDIzNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj10K1wiXCIsbj1yLmluZGV4T2YoXCIuXCIpLGk9MDtuPj0wJiYoaT1yLmxlbmd0aC1uLTEpO3ZhciBhPU1hdGgucG93KDEwLGkpLG89TWF0aC5yb3VuZCh0KmUqYSkscz1vK1wiXCI7aWYocy5pbmRleE9mKFwiZVwiKT49MClyZXR1cm4gczt2YXIgbD1vL2EsYz1vJWE7bzwwPyhsPTB8LU1hdGguY2VpbChsKSxjPTB8LWMpOihsPTB8TWF0aC5mbG9vcihsKSxjfD0wKTt2YXIgdT1cIlwiK2w7aWYobzwwJiYodT1cIi1cIit1KSxpKXtmb3IodmFyIGg9XCJcIitjO2gubGVuZ3RoPGk7KWg9XCIwXCIraDtyZXR1cm4gdStcIi5cIitofXJldHVybiB1fXIuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLGk9MDtpPDM7KytpKXtmb3IodmFyIGE9W10sbz0odFswXVtpXSx0WzFdW2ldLDApO28qZVtpXTw9dFsxXVtpXTsrK28pYS5wdXNoKHt4Om8qZVtpXSx0ZXh0Om4oZVtpXSxvKX0pO2Zvcih2YXIgbz0tMTtvKmVbaV0+PXRbMF1baV07LS1vKWEucHVzaCh7eDpvKmVbaV0sdGV4dDpuKGVbaV0sbyl9KTtyLnB1c2goYSl9cmV0dXJuIHJ9LHIuZXF1YWw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPDM7KytyKXtpZih0W3JdLmxlbmd0aCE9PWVbcl0ubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dFtyXS5sZW5ndGg7KytuKXt2YXIgaT10W3JdW25dLGE9ZVtyXVtuXTtpZihpLnghPT1hLnh8fGkudGV4dCE9PWEudGV4dHx8aS5mb250IT09YS5mb250fHxpLmZvbnRDb2xvciE9PWEuZm9udENvbG9yfHxpLmZvbnRTaXplIT09YS5mb250U2l6ZXx8aS5keCE9PWEuZHh8fGkuZHkhPT1hLmR5KXJldHVybiExfX1yZXR1cm4hMH19LHt9XSwyMzc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCxoKXt2YXIgZj1lLm1vZGVsfHxjLHA9ZS52aWV3fHxjLG09ZS5wcm9qZWN0aW9ufHxjLHk9ZS5fb3J0aG98fCExLHg9dC5ib3VuZHMsYj0oaD1ofHxhKGYscCxtLHgseSkpLmF4aXM7byh1LHAsZiksbyh1LG0sdSk7Zm9yKHZhciBfPWcsdz0wO3c8MzsrK3cpX1t3XS5sbz0xLzAsX1t3XS5oaT0tMS8wLF9bd10ucGl4ZWxzUGVyRGF0YVVuaXQ9MS8wO3ZhciBrPW4ocyh1LHUpKTtzKHUsdSk7Zm9yKHZhciBBPTA7QTwzOysrQSl7dmFyIFQ9KEErMSklMyxNPShBKzIpJTMsUz12O3Q6Zm9yKHZhciB3PTA7dzwyOysrdyl7dmFyIEU9W107aWYoYltBXTwwIT0hIXcpe1NbQV09eFt3XVtBXTtmb3IodmFyIEM9MDtDPDI7KytDKXtTW1RdPXhbQ153XVtUXTtmb3IodmFyIEw9MDtMPDI7KytMKVNbTV09eFtMXkNed11bTV0sRS5wdXNoKFMuc2xpY2UoKSl9Zm9yKHZhciB6PXk/NTo0LEM9ejtDPT09ejsrK0Mpe2lmKDA9PT1FLmxlbmd0aCljb250aW51ZSB0O0U9aS5wb3NpdGl2ZShFLGtbQ10pfWZvcih2YXIgQz0wO0M8RS5sZW5ndGg7KytDKWZvcih2YXIgTT1FW0NdLE89ZCh2LHUsTSxyLGwpLEw9MDtMPDM7KytMKV9bTF0ubG89TWF0aC5taW4oX1tMXS5sbyxNW0xdKSxfW0xdLmhpPU1hdGgubWF4KF9bTF0uaGksTVtMXSksTCE9PUEmJihfW0xdLnBpeGVsc1BlckRhdGFVbml0PU1hdGgubWluKF9bTF0ucGl4ZWxzUGVyRGF0YVVuaXQsTWF0aC5hYnMoT1tMXSkpKX19fXJldHVybiBffTt2YXIgbj10KFwiZXh0cmFjdC1mcnVzdHVtLXBsYW5lc1wiKSxpPXQoXCJzcGxpdC1wb2x5Z29uXCIpLGE9dChcIi4vbGliL2N1YmUuanNcIiksbz10KFwiZ2wtbWF0NC9tdWx0aXBseVwiKSxzPXQoXCJnbC1tYXQ0L3RyYW5zcG9zZVwiKSxsPXQoXCJnbC12ZWM0L3RyYW5zZm9ybU1hdDRcIiksYz1uZXcgRmxvYXQzMkFycmF5KFsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSksdT1uZXcgRmxvYXQzMkFycmF5KDE2KTtmdW5jdGlvbiBoKHQsZSxyKXt0aGlzLmxvPXQsdGhpcy5oaT1lLHRoaXMucGl4ZWxzUGVyRGF0YVVuaXQ9cn12YXIgZj1bMCwwLDAsMV0scD1bMCwwLDAsMV07ZnVuY3Rpb24gZCh0LGUscixuLGkpe2Zvcih2YXIgYT0wO2E8MzsrK2Epe2Zvcih2YXIgbz1mLHM9cCxjPTA7YzwzOysrYylzW2NdPW9bY109cltjXTtzWzNdPW9bM109MSxzW2FdKz0xLGwocyxzLGUpLHNbM108MCYmKHRbYV09MS8wKSxvW2FdLT0xLGwobyxvLGUpLG9bM108MCYmKHRbYV09MS8wKTt2YXIgdT0ob1swXS9vWzNdLXNbMF0vc1szXSkqbixoPShvWzFdL29bM10tc1sxXS9zWzNdKSppO3RbYV09LjI1Kk1hdGguc3FydCh1KnUraCpoKX1yZXR1cm4gdH12YXIgZz1bbmV3IGgoMS8wLC0xLzAsMS8wKSxuZXcgaCgxLzAsLTEvMCwxLzApLG5ldyBoKDEvMCwtMS8wLDEvMCldLHY9WzAsMCwwXX0se1wiLi9saWIvY3ViZS5qc1wiOjIzMixcImV4dHJhY3QtZnJ1c3R1bS1wbGFuZXNcIjoyMjEsXCJnbC1tYXQ0L211bHRpcGx5XCI6MjY0LFwiZ2wtbWF0NC90cmFuc3Bvc2VcIjoyNzMsXCJnbC12ZWM0L3RyYW5zZm9ybU1hdDRcIjozOTEsXCJzcGxpdC1wb2x5Z29uXCI6NTEyfV0sMjM4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInR5cGVkYXJyYXktcG9vbFwiKSxpPXQoXCJuZGFycmF5LW9wc1wiKSxhPXQoXCJuZGFycmF5XCIpLG89W1widWludDhcIixcInVpbnQ4X2NsYW1wZWRcIixcInVpbnQxNlwiLFwidWludDMyXCIsXCJpbnQ4XCIsXCJpbnQxNlwiLFwiaW50MzJcIixcImZsb2F0MzJcIl07ZnVuY3Rpb24gcyh0LGUscixuLGkpe3RoaXMuZ2w9dCx0aGlzLnR5cGU9ZSx0aGlzLmhhbmRsZT1yLHRoaXMubGVuZ3RoPW4sdGhpcy51c2FnZT1pfXZhciBsPXMucHJvdG90eXBlO2Z1bmN0aW9uIGModCxlLHIsbixpLGEpe3ZhciBvPWkubGVuZ3RoKmkuQllURVNfUEVSX0VMRU1FTlQ7aWYoYTwwKXJldHVybiB0LmJ1ZmZlckRhdGEoZSxpLG4pLG87aWYobythPnIpdGhyb3cgbmV3IEVycm9yKFwiZ2wtYnVmZmVyOiBJZiByZXNpemluZyBidWZmZXIsIG11c3Qgbm90IHNwZWNpZnkgb2Zmc2V0XCIpO3JldHVybiB0LmJ1ZmZlclN1YkRhdGEoZSxhLGkpLHJ9ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcj1uLm1hbGxvYyh0Lmxlbmd0aCxlKSxpPXQubGVuZ3RoLGE9MDthPGk7KythKXJbYV09dFthXTtyZXR1cm4gcn1sLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmdsLmJpbmRCdWZmZXIodGhpcy50eXBlLHRoaXMuaGFuZGxlKX0sbC51bmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmdsLmJpbmRCdWZmZXIodGhpcy50eXBlLG51bGwpfSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmhhbmRsZSl9LGwudXBkYXRlPWZ1bmN0aW9uKHQsZSl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUmJihlPS0xKSx0aGlzLmJpbmQoKSxcIm9iamVjdFwiPT10eXBlb2YgdCYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHQuc2hhcGUpe3ZhciByPXQuZHR5cGU7aWYoby5pbmRleE9mKHIpPDAmJihyPVwiZmxvYXQzMlwiKSx0aGlzLnR5cGU9PT10aGlzLmdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSKXI9Z2wuZ2V0RXh0ZW5zaW9uKFwiT0VTX2VsZW1lbnRfaW5kZXhfdWludFwiKSYmXCJ1aW50MTZcIiE9PXI/XCJ1aW50MzJcIjpcInVpbnQxNlwiO2lmKHI9PT10LmR0eXBlJiZmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xLG49ZS5sZW5ndGgtMTtuPj0wOy0tbil7aWYoZVtuXSE9PXIpcmV0dXJuITE7cio9dFtuXX1yZXR1cm4hMH0odC5zaGFwZSx0LnN0cmlkZSkpMD09PXQub2Zmc2V0JiZ0LmRhdGEubGVuZ3RoPT09dC5zaGFwZVswXT90aGlzLmxlbmd0aD1jKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsdC5kYXRhLGUpOnRoaXMubGVuZ3RoPWModGhpcy5nbCx0aGlzLnR5cGUsdGhpcy5sZW5ndGgsdGhpcy51c2FnZSx0LmRhdGEuc3ViYXJyYXkodC5vZmZzZXQsdC5zaGFwZVswXSksZSk7ZWxzZXt2YXIgcz1uLm1hbGxvYyh0LnNpemUsciksbD1hKHMsdC5zaGFwZSk7aS5hc3NpZ24obCx0KSx0aGlzLmxlbmd0aD1jKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsZTwwP3M6cy5zdWJhcnJheSgwLHQuc2l6ZSksZSksbi5mcmVlKHMpfX1lbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBoO2g9dGhpcy50eXBlPT09dGhpcy5nbC5FTEVNRU5UX0FSUkFZX0JVRkZFUj91KHQsXCJ1aW50MTZcIik6dSh0LFwiZmxvYXQzMlwiKSx0aGlzLmxlbmd0aD1jKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsZTwwP2g6aC5zdWJhcnJheSgwLHQubGVuZ3RoKSxlKSxuLmZyZWUoaCl9ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgdCYmXCJudW1iZXJcIj09dHlwZW9mIHQubGVuZ3RoKXRoaXMubGVuZ3RoPWModGhpcy5nbCx0aGlzLnR5cGUsdGhpcy5sZW5ndGgsdGhpcy51c2FnZSx0LGUpO2Vsc2V7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHQmJnZvaWQgMCE9PXQpdGhyb3cgbmV3IEVycm9yKFwiZ2wtYnVmZmVyOiBJbnZhbGlkIGRhdGEgdHlwZVwiKTtpZihlPj0wKXRocm93IG5ldyBFcnJvcihcImdsLWJ1ZmZlcjogQ2Fubm90IHNwZWNpZnkgb2Zmc2V0IHdoZW4gcmVzaXppbmcgYnVmZmVyXCIpOyh0fD0wKTw9MCYmKHQ9MSksdGhpcy5nbC5idWZmZXJEYXRhKHRoaXMudHlwZSwwfHQsdGhpcy51c2FnZSksdGhpcy5sZW5ndGg9dH19LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtpZihyPXJ8fHQuQVJSQVlfQlVGRkVSLG49bnx8dC5EWU5BTUlDX0RSQVcsciE9PXQuQVJSQVlfQlVGRkVSJiZyIT09dC5FTEVNRU5UX0FSUkFZX0JVRkZFUil0aHJvdyBuZXcgRXJyb3IoXCJnbC1idWZmZXI6IEludmFsaWQgdHlwZSBmb3Igd2ViZ2wgYnVmZmVyLCBtdXN0IGJlIGVpdGhlciBnbC5BUlJBWV9CVUZGRVIgb3IgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVJcIik7aWYobiE9PXQuRFlOQU1JQ19EUkFXJiZuIT09dC5TVEFUSUNfRFJBVyYmbiE9PXQuU1RSRUFNX0RSQVcpdGhyb3cgbmV3IEVycm9yKFwiZ2wtYnVmZmVyOiBJbnZhbGlkIHVzYWdlIGZvciBidWZmZXIsIG11c3QgYmUgZWl0aGVyIGdsLkRZTkFNSUNfRFJBVywgZ2wuU1RBVElDX0RSQVcgb3IgZ2wuU1RSRUFNX0RSQVdcIik7dmFyIGk9dC5jcmVhdGVCdWZmZXIoKSxhPW5ldyBzKHQscixpLDAsbik7cmV0dXJuIGEudXBkYXRlKGUpLGF9fSx7bmRhcnJheTo0NDMsXCJuZGFycmF5LW9wc1wiOjQzNyxcInR5cGVkYXJyYXktcG9vbFwiOjUzMH1dLDIzOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbC12ZWMzXCIpLGk9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZih0W3JdPj1lKXJldHVybiByLTE7cmV0dXJuIHJ9LGE9bi5jcmVhdGUoKSxvPW4uY3JlYXRlKCkscz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ8ZT9lOnQ+cj9yOnR9LGw9ZnVuY3Rpb24odCxlLHIsbCl7dmFyIGM9dFswXSx1PXRbMV0saD10WzJdLGY9clswXS5sZW5ndGgscD1yWzFdLmxlbmd0aCxkPXJbMl0ubGVuZ3RoLGc9aShyWzBdLGMpLHY9aShyWzFdLHUpLG09aShyWzJdLGgpLHk9ZysxLHg9disxLGI9bSsxO2lmKGwmJihnPXMoZywwLGYtMSkseT1zKHksMCxmLTEpLHY9cyh2LDAscC0xKSx4PXMoeCwwLHAtMSksbT1zKG0sMCxkLTEpLGI9cyhiLDAsZC0xKSksZzwwfHx2PDB8fG08MHx8eT49Znx8eD49cHx8Yj49ZClyZXR1cm4gbi5jcmVhdGUoKTt2YXIgXz0oYy1yWzBdW2ddKS8oclswXVt5XS1yWzBdW2ddKSx3PSh1LXJbMV1bdl0pLyhyWzFdW3hdLXJbMV1bdl0pLGs9KGgtclsyXVttXSkvKHJbMl1bYl0tclsyXVttXSk7KF88MHx8Xz4xfHxpc05hTihfKSkmJihfPTApLCh3PDB8fHc+MXx8aXNOYU4odykpJiYodz0wKSwoazwwfHxrPjF8fGlzTmFOKGspKSYmKGs9MCk7dmFyIEE9bSpmKnAsVD1iKmYqcCxNPXYqZixTPXgqZixFPWcsQz15LEw9ZVtNK0ErRV0sej1lW00rQStDXSxPPWVbUytBK0VdLEk9ZVtTK0ErQ10sRD1lW00rVCtFXSxQPWVbTStUK0NdLFI9ZVtTK1QrRV0sRj1lW1MrVCtDXSxCPW4uY3JlYXRlKCk7cmV0dXJuIG4ubGVycChCLEwseixfKSxuLmxlcnAoYSxPLEksXyksbi5sZXJwKEIsQixhLHcpLG4ubGVycChhLEQsUCxfKSxuLmxlcnAobyxSLEYsXyksbi5sZXJwKGEsYSxvLHcpLG4ubGVycChCLEIsYSxrKSxCfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcjtyPXQucG9zaXRpb25zP3QucG9zaXRpb25zOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl0saT1bXSxhPTA7YTxuLmxlbmd0aDthKyspZm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspZm9yKHZhciBzPTA7czxlLmxlbmd0aDtzKyspaS5wdXNoKFtuW2FdLHJbb10sZVtzXV0pO3JldHVybiBpfSh0Lm1lc2hncmlkKTt2YXIgaT10Lm1lc2hncmlkLGE9dC52ZWN0b3JzLG89e3Bvc2l0aW9uczpbXSx2ZXJ0ZXhJbnRlbnNpdHk6W10sdmVydGV4SW50ZW5zaXR5Qm91bmRzOnQudmVydGV4SW50ZW5zaXR5Qm91bmRzLHZlcnRleE5vcm1hbHM6W10sdmVjdG9yczpbXSxjZWxsczpbXSxjb25lT2Zmc2V0OnQuY29uZU9mZnNldCxjb2xvcm1hcDp0LmNvbG9ybWFwfTtpZigwPT09dC5wb3NpdGlvbnMubGVuZ3RoKXJldHVybiBlJiYoZVswXT1bMCwwLDBdLGVbMV09WzAsMCwwXSksbztmb3IodmFyIHM9MCxjPTEvMCx1PS0xLzAsaD0xLzAsZj0tMS8wLHA9MS8wLGQ9LTEvMCxnPW51bGwsdj1udWxsLG09W10seT0xLzAseD0wO3g8ci5sZW5ndGg7eCsrKXt2YXIgYixfPXJbeF07Yz1NYXRoLm1pbihfWzBdLGMpLHU9TWF0aC5tYXgoX1swXSx1KSxoPU1hdGgubWluKF9bMV0saCksZj1NYXRoLm1heChfWzFdLGYpLHA9TWF0aC5taW4oX1syXSxwKSxkPU1hdGgubWF4KF9bMl0sZCksYj1pP2woXyxhLGksITApOmFbeF0sbi5sZW5ndGgoYik+cyYmKHM9bi5sZW5ndGgoYikpLHgmJih5PU1hdGgubWluKHksMipuLmRpc3RhbmNlKGcsXykvKG4ubGVuZ3RoKHYpK24ubGVuZ3RoKGIpKSkpLGc9Xyx2PWIsbS5wdXNoKGIpfXZhciB3PVtjLGgscF0saz1bdSxmLGRdO2UmJihlWzBdPXcsZVsxXT1rKSwwPT09cyYmKHM9MSk7dmFyIEE9MS9zO2lzRmluaXRlKHkpJiYhaXNOYU4oeSl8fCh5PTEpLG8udmVjdG9yU2NhbGU9eTt2YXIgVD1mdW5jdGlvbih0LGUscil7dmFyIGk9bi5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09dCYmbi5zZXQoaSx0LGUsciksaX0oMCwxLDApLE09dC5jb25lU2l6ZXx8LjU7dC5hYnNvbHV0ZUNvbmVTaXplJiYoTT10LmFic29sdXRlQ29uZVNpemUqQSksby5jb25lU2NhbGU9TTt4PTA7Zm9yKHZhciBTPTA7eDxyLmxlbmd0aDt4KyspZm9yKHZhciBFPShfPXJbeF0pWzBdLEM9X1sxXSxMPV9bMl0sej1tW3hdLE89bi5sZW5ndGgoeikqQSxJPTA7STw4O0krKyl7by5wb3NpdGlvbnMucHVzaChbRSxDLEwsUysrXSksby5wb3NpdGlvbnMucHVzaChbRSxDLEwsUysrXSksby5wb3NpdGlvbnMucHVzaChbRSxDLEwsUysrXSksby5wb3NpdGlvbnMucHVzaChbRSxDLEwsUysrXSksby5wb3NpdGlvbnMucHVzaChbRSxDLEwsUysrXSksby5wb3NpdGlvbnMucHVzaChbRSxDLEwsUysrXSksby52ZWN0b3JzLnB1c2goeiksby52ZWN0b3JzLnB1c2goeiksby52ZWN0b3JzLnB1c2goeiksby52ZWN0b3JzLnB1c2goeiksby52ZWN0b3JzLnB1c2goeiksby52ZWN0b3JzLnB1c2goeiksby52ZXJ0ZXhJbnRlbnNpdHkucHVzaChPLE8sTyksby52ZXJ0ZXhJbnRlbnNpdHkucHVzaChPLE8sTyksby52ZXJ0ZXhOb3JtYWxzLnB1c2goVCxULFQpLG8udmVydGV4Tm9ybWFscy5wdXNoKFQsVCxUKTt2YXIgRD1vLnBvc2l0aW9ucy5sZW5ndGg7by5jZWxscy5wdXNoKFtELTYsRC01LEQtNF0sW0QtMyxELTIsRC0xXSl9cmV0dXJuIG99LGUuZXhwb3J0cy5jcmVhdGVDb25lTWVzaD10KFwiLi9saWIvY29uZW1lc2hcIil9LHtcIi4vbGliL2NvbmVtZXNoXCI6MjQwLFwiZ2wtdmVjM1wiOjMzOX1dLDI0MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbC1zaGFkZXJcIiksaT10KFwiZ2wtYnVmZmVyXCIpLGE9dChcImdsLXZhb1wiKSxvPXQoXCJnbC10ZXh0dXJlMmRcIikscz10KFwibm9ybWFsc1wiKSxsPXQoXCJnbC1tYXQ0L211bHRpcGx5XCIpLGM9dChcImdsLW1hdDQvaW52ZXJ0XCIpLHU9dChcIm5kYXJyYXlcIiksaD10KFwiY29sb3JtYXBcIiksZj10KFwic2ltcGxpY2lhbC1jb21wbGV4LWNvbnRvdXJcIikscD10KFwidHlwZWRhcnJheS1wb29sXCIpLGQ9dChcIi4vc2hhZGVyc1wiKSxnPWQubWVzaFNoYWRlcix2PWQucGlja1NoYWRlcixtPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiB5KHQsZSxyLG4saSxhLG8scyxsLGMsdSxoLGYscCxkLGcsdix5LHgsYixfLHcsayxBKXt0aGlzLmdsPXQsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5jZWxscz1bXSx0aGlzLnBvc2l0aW9ucz1bXSx0aGlzLmludGVuc2l0eT1bXSx0aGlzLnRleHR1cmU9ZSx0aGlzLmRpcnR5PSEwLHRoaXMudHJpU2hhZGVyPXIsdGhpcy5waWNrU2hhZGVyPW4sdGhpcy50cmlhbmdsZVBvc2l0aW9ucz1pLHRoaXMudHJpYW5nbGVWZWN0b3JzPWEsdGhpcy50cmlhbmdsZUNvbG9ycz1zLHRoaXMudHJpYW5nbGVOb3JtYWxzPWMsdGhpcy50cmlhbmdsZVVWcz1sLHRoaXMudHJpYW5nbGVJZHM9byx0aGlzLnRyaWFuZ2xlVkFPPXUsdGhpcy50cmlhbmdsZUNvdW50PTAsdGhpcy5saW5lV2lkdGg9MSx0aGlzLmVkZ2VQb3NpdGlvbnM9aCx0aGlzLmVkZ2VDb2xvcnM9cCx0aGlzLmVkZ2VVVnM9ZCx0aGlzLmVkZ2VJZHM9Zix0aGlzLmVkZ2VWQU89Zyx0aGlzLmVkZ2VDb3VudD0wLHRoaXMucG9pbnRQb3NpdGlvbnM9dix0aGlzLnBvaW50Q29sb3JzPXgsdGhpcy5wb2ludFVWcz1iLHRoaXMucG9pbnRTaXplcz1fLHRoaXMucG9pbnRJZHM9eSx0aGlzLnBvaW50VkFPPXcsdGhpcy5wb2ludENvdW50PTAsdGhpcy5jb250b3VyTGluZVdpZHRoPTEsdGhpcy5jb250b3VyUG9zaXRpb25zPWssdGhpcy5jb250b3VyVkFPPUEsdGhpcy5jb250b3VyQ291bnQ9MCx0aGlzLmNvbnRvdXJDb2xvcj1bMCwwLDBdLHRoaXMuY29udG91ckVuYWJsZT0hMCx0aGlzLnBpY2tJZD0xLHRoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmxpZ2h0UG9zaXRpb249WzFlNSwxZTUsMF0sdGhpcy5hbWJpZW50TGlnaHQ9LjgsdGhpcy5kaWZmdXNlTGlnaHQ9LjgsdGhpcy5zcGVjdWxhckxpZ2h0PTIsdGhpcy5yb3VnaG5lc3M9LjUsdGhpcy5mcmVzbmVsPTEuNSx0aGlzLm9wYWNpdHk9MSx0aGlzLmNvbmVTY2FsZT0yLHRoaXMudmVjdG9yU2NhbGU9MSx0aGlzLmNvbmVPZmZzZXQ9LjI1LHRoaXMuX21vZGVsPW0sdGhpcy5fdmlldz1tLHRoaXMuX3Byb2plY3Rpb249bSx0aGlzLl9yZXNvbHV0aW9uPVsxLDFdfXZhciB4PXkucHJvdG90eXBlO2Z1bmN0aW9uIGIodCl7dmFyIGU9bih0LHYudmVydGV4LHYuZnJhZ21lbnQsbnVsbCx2LmF0dHJpYnV0ZXMpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuaWQubG9jYXRpb249MSxlLmF0dHJpYnV0ZXMudmVjdG9yLmxvY2F0aW9uPTUsZX14LmlzT3BhcXVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BhY2l0eT49MX0seC5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BhY2l0eTwxfSx4LnBpY2tTbG90cz0xLHguc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH0seC5oaWdobGlnaHQ9ZnVuY3Rpb24odCl7aWYodCYmdGhpcy5jb250b3VyRW5hYmxlKXtmb3IodmFyIGU9Zih0aGlzLmNlbGxzLHRoaXMuaW50ZW5zaXR5LHQuaW50ZW5zaXR5KSxyPWUuY2VsbHMsbj1lLnZlcnRleElkcyxpPWUudmVydGV4V2VpZ2h0cyxhPXIubGVuZ3RoLG89cC5tYWxsb2NGbG9hdDMyKDYqYSkscz0wLGw9MDtsPGE7KytsKWZvcih2YXIgYz1yW2xdLHU9MDt1PDI7Kyt1KXt2YXIgaD1jWzBdOzI9PT1jLmxlbmd0aCYmKGg9Y1t1XSk7Zm9yKHZhciBkPW5baF1bMF0sZz1uW2hdWzFdLHY9aVtoXSxtPTEtdix5PXRoaXMucG9zaXRpb25zW2RdLHg9dGhpcy5wb3NpdGlvbnNbZ10sYj0wO2I8MzsrK2Ipb1tzKytdPXYqeVtiXSttKnhbYl19dGhpcy5jb250b3VyQ291bnQ9cy8zfDAsdGhpcy5jb250b3VyUG9zaXRpb25zLnVwZGF0ZShvLnN1YmFycmF5KDAscykpLHAuZnJlZShvKX1lbHNlIHRoaXMuY29udG91ckNvdW50PTB9LHgudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e307dmFyIGU9dGhpcy5nbDt0aGlzLmRpcnR5PSEwLFwiY29udG91ckVuYWJsZVwiaW4gdCYmKHRoaXMuY29udG91ckVuYWJsZT10LmNvbnRvdXJFbmFibGUpLFwiY29udG91ckNvbG9yXCJpbiB0JiYodGhpcy5jb250b3VyQ29sb3I9dC5jb250b3VyQ29sb3IpLFwibGluZVdpZHRoXCJpbiB0JiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgpLFwibGlnaHRQb3NpdGlvblwiaW4gdCYmKHRoaXMubGlnaHRQb3NpdGlvbj10LmxpZ2h0UG9zaXRpb24pLFwib3BhY2l0eVwiaW4gdCYmKHRoaXMub3BhY2l0eT10Lm9wYWNpdHkpLFwiYW1iaWVudFwiaW4gdCYmKHRoaXMuYW1iaWVudExpZ2h0PXQuYW1iaWVudCksXCJkaWZmdXNlXCJpbiB0JiYodGhpcy5kaWZmdXNlTGlnaHQ9dC5kaWZmdXNlKSxcInNwZWN1bGFyXCJpbiB0JiYodGhpcy5zcGVjdWxhckxpZ2h0PXQuc3BlY3VsYXIpLFwicm91Z2huZXNzXCJpbiB0JiYodGhpcy5yb3VnaG5lc3M9dC5yb3VnaG5lc3MpLFwiZnJlc25lbFwiaW4gdCYmKHRoaXMuZnJlc25lbD10LmZyZXNuZWwpLHZvaWQgMCE9PXQudmVjdG9yU2NhbGUmJih0aGlzLnZlY3RvclNjYWxlPXQudmVjdG9yU2NhbGUpLHZvaWQgMCE9PXQuY29uZVNjYWxlJiYodGhpcy5jb25lU2NhbGU9dC5jb25lU2NhbGUpLHZvaWQgMCE9PXQuY29uZU9mZnNldCYmKHRoaXMuY29uZU9mZnNldD10LmNvbmVPZmZzZXQpLHQudGV4dHVyZT8odGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRleHR1cmU9byhlLHQudGV4dHVyZSkpOnQuY29sb3JtYXAmJih0aGlzLnRleHR1cmUuc2hhcGU9WzI1NiwyNTZdLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZS5MSU5FQVJfTUlQTUFQX0xJTkVBUix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUuTElORUFSLHRoaXMudGV4dHVyZS5zZXRQaXhlbHMoZnVuY3Rpb24odCl7Zm9yKHZhciBlPWgoe2NvbG9ybWFwOnQsbnNoYWRlczoyNTYsZm9ybWF0OlwicmdiYVwifSkscj1uZXcgVWludDhBcnJheSgxMDI0KSxuPTA7bjwyNTY7KytuKXtmb3IodmFyIGk9ZVtuXSxhPTA7YTwzOysrYSlyWzQqbithXT1pW2FdO3JbNCpuKzNdPTI1NSppWzNdfXJldHVybiB1KHIsWzI1NiwyNTYsNF0sWzQsMCwxXSl9KHQuY29sb3JtYXApKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXAoKSk7dmFyIHI9dC5jZWxscyxuPXQucG9zaXRpb25zLGk9dC52ZWN0b3JzO2lmKG4mJnImJmkpe3ZhciBhPVtdLGw9W10sYz1bXSxmPVtdLHA9W10sZD1bXSxnPVtdLHY9W10sbT1bXSx5PVtdLHg9W10sYj1bXSxfPVtdLHc9W10saz1bXTt0aGlzLmNlbGxzPXIsdGhpcy5wb3NpdGlvbnM9bjt2YXIgQT10LnZlcnRleE5vcm1hbHMsVD10LmNlbGxOb3JtYWxzLE09dm9pZCAwPT09dC52ZXJ0ZXhOb3JtYWxzRXBzaWxvbj8xZS02OnQudmVydGV4Tm9ybWFsc0Vwc2lsb24sUz12b2lkIDA9PT10LmZhY2VOb3JtYWxzRXBzaWxvbj8xZS02OnQuZmFjZU5vcm1hbHNFcHNpbG9uO3QudXNlRmFjZXROb3JtYWxzJiYhVCYmKFQ9cy5mYWNlTm9ybWFscyhyLG4sUykpLFR8fEF8fChBPXMudmVydGV4Tm9ybWFscyhyLG4sTSkpO3ZhciBFPXQudmVydGV4Q29sb3JzLEM9dC5jZWxsQ29sb3JzLEw9dC5tZXNoQ29sb3J8fFsxLDEsMSwxXSx6PXQudmVydGV4VVZzLE89dC52ZXJ0ZXhJbnRlbnNpdHksST10LmNlbGxVVnMsRD10LmNlbGxJbnRlbnNpdHksUD0xLzAsUj0tMS8wO2lmKCF6JiYhSSlpZihPKWlmKHQudmVydGV4SW50ZW5zaXR5Qm91bmRzKVA9K3QudmVydGV4SW50ZW5zaXR5Qm91bmRzWzBdLFI9K3QudmVydGV4SW50ZW5zaXR5Qm91bmRzWzFdO2Vsc2UgZm9yKHZhciBGPTA7RjxPLmxlbmd0aDsrK0Ype3ZhciBCPU9bRl07UD1NYXRoLm1pbihQLEIpLFI9TWF0aC5tYXgoUixCKX1lbHNlIGlmKEQpZm9yKEY9MDtGPEQubGVuZ3RoOysrRil7Qj1EW0ZdO1A9TWF0aC5taW4oUCxCKSxSPU1hdGgubWF4KFIsQil9ZWxzZSBmb3IoRj0wO0Y8bi5sZW5ndGg7KytGKXtCPW5bRl1bMl07UD1NYXRoLm1pbihQLEIpLFI9TWF0aC5tYXgoUixCKX10aGlzLmludGVuc2l0eT1PfHwoRD9mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSluW2ldPTA7dmFyIGE9dC5sZW5ndGg7Zm9yKGk9MDtpPGE7KytpKWZvcih2YXIgbz10W2ldLHM9MDtzPG8ubGVuZ3RoOysrcyluW29bc11dPXJbaV07cmV0dXJuIG59KHIsbi5sZW5ndGgsRCk6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09dFtuXVsyXTtyZXR1cm4gcn0obikpO3ZhciBOPXQucG9pbnRTaXplcyxqPXQucG9pbnRTaXplfHwxO3RoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dO2ZvcihGPTA7RjxuLmxlbmd0aDsrK0YpZm9yKHZhciBWPW5bRl0sVT0wO1U8MzsrK1UpIWlzTmFOKFZbVV0pJiZpc0Zpbml0ZShWW1VdKSYmKHRoaXMuYm91bmRzWzBdW1VdPU1hdGgubWluKHRoaXMuYm91bmRzWzBdW1VdLFZbVV0pLHRoaXMuYm91bmRzWzFdW1VdPU1hdGgubWF4KHRoaXMuYm91bmRzWzFdW1VdLFZbVV0pKTt2YXIgcT0wLEg9MCxHPTA7dDpmb3IoRj0wO0Y8ci5sZW5ndGg7KytGKXt2YXIgWT1yW0ZdO3N3aXRjaChZLmxlbmd0aCl7Y2FzZSAxOmZvcihWPW5bWD1ZWzBdXSxVPTA7VTwzOysrVSlpZihpc05hTihWW1VdKXx8IWlzRmluaXRlKFZbVV0pKWNvbnRpbnVlIHQ7eC5wdXNoKFZbMF0sVlsxXSxWWzJdLFZbM10pLDM9PT0oWj1FP0VbWF06Qz9DW0ZdOkwpLmxlbmd0aD9iLnB1c2goWlswXSxaWzFdLFpbMl0sMSk6Yi5wdXNoKFpbMF0sWlsxXSxaWzJdLFpbM10pLCQ9ej96W1hdOk8/WyhPW1hdLVApLyhSLVApLDBdOkk/SVtGXTpEP1soRFtGXS1QKS8oUi1QKSwwXTpbKFZbMl0tUCkvKFItUCksMF0sXy5wdXNoKCRbMF0sJFsxXSksTj93LnB1c2goTltYXSk6dy5wdXNoKGopLGsucHVzaChGKSxHKz0xO2JyZWFrO2Nhc2UgMjpmb3IoVT0wO1U8MjsrK1Upe1Y9bltYPVlbVV1dO2Zvcih2YXIgVz0wO1c8MzsrK1cpaWYoaXNOYU4oVltXXSl8fCFpc0Zpbml0ZShWW1ddKSljb250aW51ZSB0fWZvcihVPTA7VTwyOysrVSl7Vj1uW1g9WVtVXV07Zy5wdXNoKFZbMF0sVlsxXSxWWzJdKSwzPT09KFo9RT9FW1hdOkM/Q1tGXTpMKS5sZW5ndGg/di5wdXNoKFpbMF0sWlsxXSxaWzJdLDEpOnYucHVzaChaWzBdLFpbMV0sWlsyXSxaWzNdKSwkPXo/eltYXTpPP1soT1tYXS1QKS8oUi1QKSwwXTpJP0lbRl06RD9bKERbRl0tUCkvKFItUCksMF06WyhWWzJdLVApLyhSLVApLDBdLG0ucHVzaCgkWzBdLCRbMV0pLHkucHVzaChGKX1IKz0xO2JyZWFrO2Nhc2UgMzpmb3IoVT0wO1U8MzsrK1UpZm9yKFY9bltYPVlbVV1dLFc9MDtXPDM7KytXKWlmKGlzTmFOKFZbV10pfHwhaXNGaW5pdGUoVltXXSkpY29udGludWUgdDtmb3IoVT0wO1U8MzsrK1Upe3ZhciBYO1Y9bltYPVlbMi1VXV07YS5wdXNoKFZbMF0sVlsxXSxWWzJdLFZbM10pO3ZhciBaLCQsSixLPWlbWF07bC5wdXNoKEtbMF0sS1sxXSxLWzJdKSwzPT09KFo9RT9FW1hdOkM/Q1tGXTpMKS5sZW5ndGg/Yy5wdXNoKFpbMF0sWlsxXSxaWzJdLDEpOmMucHVzaChaWzBdLFpbMV0sWlsyXSxaWzNdKSwkPXo/eltYXTpPP1soT1tYXS1QKS8oUi1QKSwwXTpJP0lbRl06RD9bKERbRl0tUCkvKFItUCksMF06WyhWWzJdLVApLyhSLVApLDBdLHAucHVzaCgkWzBdLCRbMV0pLEo9QT9BW1hdOlRbRl0sZi5wdXNoKEpbMF0sSlsxXSxKWzJdKSxkLnB1c2goRil9cSs9MX19dGhpcy5wb2ludENvdW50PUcsdGhpcy5lZGdlQ291bnQ9SCx0aGlzLnRyaWFuZ2xlQ291bnQ9cSx0aGlzLnBvaW50UG9zaXRpb25zLnVwZGF0ZSh4KSx0aGlzLnBvaW50Q29sb3JzLnVwZGF0ZShiKSx0aGlzLnBvaW50VVZzLnVwZGF0ZShfKSx0aGlzLnBvaW50U2l6ZXMudXBkYXRlKHcpLHRoaXMucG9pbnRJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheShrKSksdGhpcy5lZGdlUG9zaXRpb25zLnVwZGF0ZShnKSx0aGlzLmVkZ2VDb2xvcnMudXBkYXRlKHYpLHRoaXMuZWRnZVVWcy51cGRhdGUobSksdGhpcy5lZGdlSWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoeSkpLHRoaXMudHJpYW5nbGVQb3NpdGlvbnMudXBkYXRlKGEpLHRoaXMudHJpYW5nbGVWZWN0b3JzLnVwZGF0ZShsKSx0aGlzLnRyaWFuZ2xlQ29sb3JzLnVwZGF0ZShjKSx0aGlzLnRyaWFuZ2xlVVZzLnVwZGF0ZShwKSx0aGlzLnRyaWFuZ2xlTm9ybWFscy51cGRhdGUoZiksdGhpcy50cmlhbmdsZUlkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KGQpKX19LHguZHJhd1RyYW5zcGFyZW50PXguZHJhdz1mdW5jdGlvbih0KXt0PXR8fHt9O2Zvcih2YXIgZT10aGlzLmdsLHI9dC5tb2RlbHx8bSxuPXQudmlld3x8bSxpPXQucHJvamVjdGlvbnx8bSxhPVtbLTFlNiwtMWU2LC0xZTZdLFsxZTYsMWU2LDFlNl1dLG89MDtvPDM7KytvKWFbMF1bb109TWF0aC5tYXgoYVswXVtvXSx0aGlzLmNsaXBCb3VuZHNbMF1bb10pLGFbMV1bb109TWF0aC5taW4oYVsxXVtvXSx0aGlzLmNsaXBCb3VuZHNbMV1bb10pO3ZhciBzPXttb2RlbDpyLHZpZXc6bixwcm9qZWN0aW9uOmksaW52ZXJzZU1vZGVsOm0uc2xpY2UoKSxjbGlwQm91bmRzOmEsa2FtYmllbnQ6dGhpcy5hbWJpZW50TGlnaHQsa2RpZmZ1c2U6dGhpcy5kaWZmdXNlTGlnaHQsa3NwZWN1bGFyOnRoaXMuc3BlY3VsYXJMaWdodCxyb3VnaG5lc3M6dGhpcy5yb3VnaG5lc3MsZnJlc25lbDp0aGlzLmZyZXNuZWwsZXllUG9zaXRpb246WzAsMCwwXSxsaWdodFBvc2l0aW9uOlswLDAsMF0sb3BhY2l0eTp0aGlzLm9wYWNpdHksdmVjdG9yU2NhbGU6dGhpcy52ZWN0b3JTY2FsZSxjb25lU2NhbGU6dGhpcy5jb25lU2NhbGUsY29uZU9mZnNldDp0aGlzLmNvbmVPZmZzZXQsY29udG91ckNvbG9yOnRoaXMuY29udG91ckNvbG9yLHRleHR1cmU6MH07cy5pbnZlcnNlTW9kZWw9YyhzLmludmVyc2VNb2RlbCxzLm1vZGVsKSxlLmRpc2FibGUoZS5DVUxMX0ZBQ0UpLHRoaXMudGV4dHVyZS5iaW5kKDApO3ZhciB1PW5ldyBBcnJheSgxNik7bCh1LHMudmlldyxzLm1vZGVsKSxsKHUscy5wcm9qZWN0aW9uLHUpLGModSx1KTtmb3Iobz0wO288MzsrK28pcy5leWVQb3NpdGlvbltvXT11WzEyK29dL3VbMTVdO3ZhciBoPXVbMTVdO2ZvcihvPTA7bzwzOysrbyloKz10aGlzLmxpZ2h0UG9zaXRpb25bb10qdVs0Km8rM107Zm9yKG89MDtvPDM7KytvKXtmb3IodmFyIGY9dVsxMitvXSxwPTA7cDwzOysrcClmKz11WzQqcCtvXSp0aGlzLmxpZ2h0UG9zaXRpb25bcF07cy5saWdodFBvc2l0aW9uW29dPWYvaH1pZih0aGlzLnRyaWFuZ2xlQ291bnQ+MCl7dmFyIGQ9dGhpcy50cmlTaGFkZXI7ZC5iaW5kKCksZC51bmlmb3Jtcz1zLHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpfX0seC5kcmF3UGljaz1mdW5jdGlvbih0KXt0PXR8fHt9O2Zvcih2YXIgZT10aGlzLmdsLHI9dC5tb2RlbHx8bSxuPXQudmlld3x8bSxpPXQucHJvamVjdGlvbnx8bSxhPVtbLTFlNiwtMWU2LC0xZTZdLFsxZTYsMWU2LDFlNl1dLG89MDtvPDM7KytvKWFbMF1bb109TWF0aC5tYXgoYVswXVtvXSx0aGlzLmNsaXBCb3VuZHNbMF1bb10pLGFbMV1bb109TWF0aC5taW4oYVsxXVtvXSx0aGlzLmNsaXBCb3VuZHNbMV1bb10pO3RoaXMuX21vZGVsPVtdLnNsaWNlLmNhbGwociksdGhpcy5fdmlldz1bXS5zbGljZS5jYWxsKG4pLHRoaXMuX3Byb2plY3Rpb249W10uc2xpY2UuY2FsbChpKSx0aGlzLl9yZXNvbHV0aW9uPVtlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdO3ZhciBzPXttb2RlbDpyLHZpZXc6bixwcm9qZWN0aW9uOmksY2xpcEJvdW5kczphLHZlY3RvclNjYWxlOnRoaXMudmVjdG9yU2NhbGUsY29uZVNjYWxlOnRoaXMuY29uZVNjYWxlLGNvbmVPZmZzZXQ6dGhpcy5jb25lT2Zmc2V0LHBpY2tJZDp0aGlzLnBpY2tJZC8yNTV9LGw9dGhpcy5waWNrU2hhZGVyO2wuYmluZCgpLGwudW5pZm9ybXM9cyx0aGlzLnRyaWFuZ2xlQ291bnQ+MCYmKHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpKSx0aGlzLmVkZ2VDb3VudD4wJiYodGhpcy5lZGdlVkFPLmJpbmQoKSxlLmxpbmVXaWR0aCh0aGlzLmxpbmVXaWR0aCp0aGlzLnBpeGVsUmF0aW8pLGUuZHJhd0FycmF5cyhlLkxJTkVTLDAsMip0aGlzLmVkZ2VDb3VudCksdGhpcy5lZGdlVkFPLnVuYmluZCgpKX0seC5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDt2YXIgZT10LnZhbHVlWzBdKzI1Nip0LnZhbHVlWzFdKzY1NTM2KnQudmFsdWVbMl0scj10aGlzLmNlbGxzW2VdLG49dGhpcy5wb3NpdGlvbnNbclsxXV0uc2xpY2UoMCwzKTtyZXR1cm57aW5kZXg6TWF0aC5mbG9vcihyWzFdLzQ4KSxwb3NpdGlvbjpuLGRhdGFDb29yZGluYXRlOm59fSx4LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnRleHR1cmUuZGlzcG9zZSgpLHRoaXMudHJpU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVWQU8uZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVWZWN0b3JzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlQ29sb3JzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVVZzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlTm9ybWFscy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZUlkcy5kaXNwb3NlKCksdGhpcy5lZGdlVkFPLmRpc3Bvc2UoKSx0aGlzLmVkZ2VQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMuZWRnZUNvbG9ycy5kaXNwb3NlKCksdGhpcy5lZGdlVVZzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VJZHMuZGlzcG9zZSgpLHRoaXMucG9pbnRWQU8uZGlzcG9zZSgpLHRoaXMucG9pbnRQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMucG9pbnRDb2xvcnMuZGlzcG9zZSgpLHRoaXMucG9pbnRVVnMuZGlzcG9zZSgpLHRoaXMucG9pbnRTaXplcy5kaXNwb3NlKCksdGhpcy5wb2ludElkcy5kaXNwb3NlKCksdGhpcy5jb250b3VyVkFPLmRpc3Bvc2UoKSx0aGlzLmNvbnRvdXJQb3NpdGlvbnMuZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXsxPT09YXJndW1lbnRzLmxlbmd0aCYmKHQ9KGU9dCkuZ2wpO3ZhciByPWUudHJpU2hhZGVyfHxmdW5jdGlvbih0KXt2YXIgZT1uKHQsZy52ZXJ0ZXgsZy5mcmFnbWVudCxudWxsLGcuYXR0cmlidXRlcyk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0yLGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0zLGUuYXR0cmlidXRlcy52ZWN0b3IubG9jYXRpb249NSxlfSh0KSxzPWIodCksbD1vKHQsdShuZXcgVWludDhBcnJheShbMjU1LDI1NSwyNTUsMjU1XSksWzEsMSw0XSkpO2wuZ2VuZXJhdGVNaXBtYXAoKSxsLm1pbkZpbHRlcj10LkxJTkVBUl9NSVBNQVBfTElORUFSLGwubWFnRmlsdGVyPXQuTElORUFSO3ZhciBjPWkodCksaD1pKHQpLGY9aSh0KSxwPWkodCksZD1pKHQpLHY9aSh0KSxtPWEodCxbe2J1ZmZlcjpjLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6dix0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjpmLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6cCx0eXBlOnQuRkxPQVQsc2l6ZToyfSx7YnVmZmVyOmQsdHlwZTp0LkZMT0FULHNpemU6M30se2J1ZmZlcjpoLHR5cGU6dC5GTE9BVCxzaXplOjN9XSkseD1pKHQpLF89aSh0KSx3PWkodCksaz1pKHQpLEE9YSh0LFt7YnVmZmVyOngsdHlwZTp0LkZMT0FULHNpemU6M30se2J1ZmZlcjprLHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOl8sdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjp3LHR5cGU6dC5GTE9BVCxzaXplOjJ9XSksVD1pKHQpLE09aSh0KSxTPWkodCksRT1pKHQpLEM9aSh0KSxMPWEodCxbe2J1ZmZlcjpULHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6Qyx0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjpNLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6Uyx0eXBlOnQuRkxPQVQsc2l6ZToyfSx7YnVmZmVyOkUsdHlwZTp0LkZMT0FULHNpemU6MX1dKSx6PWkodCksTz1uZXcgeSh0LGwscixzLGMsaCx2LGYscCxkLG0seCxrLF8sdyxBLFQsQyxNLFMsRSxMLHosYSh0LFt7YnVmZmVyOnosdHlwZTp0LkZMT0FULHNpemU6M31dKSk7cmV0dXJuIE8udXBkYXRlKGUpLE99fSx7XCIuL3NoYWRlcnNcIjoyNDEsY29sb3JtYXA6MTE3LFwiZ2wtYnVmZmVyXCI6MjM4LFwiZ2wtbWF0NC9pbnZlcnRcIjoyNjIsXCJnbC1tYXQ0L211bHRpcGx5XCI6MjY0LFwiZ2wtc2hhZGVyXCI6Mjk4LFwiZ2wtdGV4dHVyZTJkXCI6MzE1LFwiZ2wtdmFvXCI6MzIwLG5kYXJyYXk6NDQzLG5vcm1hbHM6NDQ2LFwic2ltcGxpY2lhbC1jb21wbGV4LWNvbnRvdXJcIjo1MDMsXCJ0eXBlZGFycmF5LXBvb2xcIjo1MzB9XSwyNDE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiZ2xzbGlmeVwiKSxpPW4oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcblxcbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnZlYzMgZ2V0T3J0aG9nb25hbFZlY3Rvcih2ZWMzIHYpIHtcXG4gIC8vIFJldHVybiB1cC12ZWN0b3IgZm9yIG9ubHkteiB2ZWN0b3IuXFxuICAvLyBSZXR1cm4gYXggKyBieSArIGN6ID0gMCwgYSBwb2ludCB0aGF0IGxpZXMgb24gdGhlIHBsYW5lIHRoYXQgaGFzIHYgYXMgYSBub3JtYWwgYW5kIHRoYXQgaXNuJ3QgKDAsMCwwKS5cXG4gIC8vIEZyb20gdGhlIGFib3ZlIGlmLXN0YXRlbWVudCB3ZSBoYXZlIHx8YXx8ID4gMCAgVSAgfHxifHwgPiAwLlxcbiAgLy8gQXNzaWduIHogPSAwLCB4ID0gLWIsIHkgPSBhOlxcbiAgLy8gYSotYiArIGIqYSArIGMqMCA9IC1iYSArIGJhICsgMCA9IDBcXG4gIGlmICh2Lngqdi54ID4gdi56KnYueiB8fCB2Lnkqdi55ID4gdi56KnYueikge1xcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoLXYueSwgdi54LCAwLjApKTtcXG4gIH0gZWxzZSB7XFxuICAgIHJldHVybiBub3JtYWxpemUodmVjMygwLjAsIHYueiwgLXYueSkpO1xcbiAgfVxcbn1cXG5cXG4vLyBDYWxjdWxhdGUgdGhlIGNvbmUgdmVydGV4IGFuZCBub3JtYWwgYXQgdGhlIGdpdmVuIGluZGV4Llxcbi8vXFxuLy8gVGhlIHJldHVybmVkIHZlcnRleCBpcyBmb3IgYSBjb25lIHdpdGggaXRzIHRvcCBhdCBvcmlnaW4gYW5kIGhlaWdodCBvZiAxLjAsXFxuLy8gcG9pbnRpbmcgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgdmVjdG9yIGF0dHJpYnV0ZS5cXG4vL1xcbi8vIEVhY2ggY29uZSBpcyBtYWRlIHVwIG9mIGEgdG9wIHZlcnRleCwgYSBjZW50ZXIgYmFzZSB2ZXJ0ZXggYW5kIGJhc2UgcGVyaW1ldGVyIHZlcnRpY2VzLlxcbi8vIFRoZXNlIHZlcnRpY2VzIGFyZSB1c2VkIHRvIG1ha2UgdXAgdGhlIHRyaWFuZ2xlcyBvZiB0aGUgY29uZSBieSB0aGUgZm9sbG93aW5nOlxcbi8vICAgc2VnbWVudCArIDAgdG9wIHZlcnRleFxcbi8vICAgc2VnbWVudCArIDEgcGVyaW1ldGVyIHZlcnRleCBhKzFcXG4vLyAgIHNlZ21lbnQgKyAyIHBlcmltZXRlciB2ZXJ0ZXggYVxcbi8vICAgc2VnbWVudCArIDMgY2VudGVyIGJhc2UgdmVydGV4XFxuLy8gICBzZWdtZW50ICsgNCBwZXJpbWV0ZXIgdmVydGV4IGFcXG4vLyAgIHNlZ21lbnQgKyA1IHBlcmltZXRlciB2ZXJ0ZXggYSsxXFxuLy8gV2hlcmUgc2VnbWVudCBpcyB0aGUgbnVtYmVyIG9mIHRoZSByYWRpYWwgc2VnbWVudCAqIDYgYW5kIGEgaXMgdGhlIGFuZ2xlIGF0IHRoYXQgcmFkaWFsIHNlZ21lbnQuXFxuLy8gVG8gZ28gZnJvbSBpbmRleCB0byBzZWdtZW50LCBmbG9vcihpbmRleCAvIDYpXFxuLy8gVG8gZ28gZnJvbSBzZWdtZW50IHRvIGFuZ2xlLCAyKnBpICogKHNlZ21lbnQvc2VnbWVudENvdW50KVxcbi8vIFRvIGdvIGZyb20gaW5kZXggdG8gc2VnbWVudCBpbmRleCwgaW5kZXggLSAoc2VnbWVudCo2KVxcbi8vXFxudmVjMyBnZXRDb25lUG9zaXRpb24odmVjMyBkLCBmbG9hdCByYXdJbmRleCwgZmxvYXQgY29uZU9mZnNldCwgb3V0IHZlYzMgbm9ybWFsKSB7XFxuXFxuICBjb25zdCBmbG9hdCBzZWdtZW50Q291bnQgPSA4LjA7XFxuXFxuICBmbG9hdCBpbmRleCA9IHJhd0luZGV4IC0gZmxvb3IocmF3SW5kZXggL1xcbiAgICAoc2VnbWVudENvdW50ICogNi4wKSkgKlxcbiAgICAoc2VnbWVudENvdW50ICogNi4wKTtcXG5cXG4gIGZsb2F0IHNlZ21lbnQgPSBmbG9vcigwLjAwMSArIGluZGV4LzYuMCk7XFxuICBmbG9hdCBzZWdtZW50SW5kZXggPSBpbmRleCAtIChzZWdtZW50KjYuMCk7XFxuXFxuICBub3JtYWwgPSAtbm9ybWFsaXplKGQpO1xcblxcbiAgaWYgKHNlZ21lbnRJbmRleCA+IDIuOTkgJiYgc2VnbWVudEluZGV4IDwgMy4wMSkge1xcbiAgICByZXR1cm4gbWl4KHZlYzMoMC4wKSwgLWQsIGNvbmVPZmZzZXQpO1xcbiAgfVxcblxcbiAgZmxvYXQgbmV4dEFuZ2xlID0gKFxcbiAgICAoc2VnbWVudEluZGV4ID4gMC45OSAmJiAgc2VnbWVudEluZGV4IDwgMS4wMSkgfHxcXG4gICAgKHNlZ21lbnRJbmRleCA+IDQuOTkgJiYgIHNlZ21lbnRJbmRleCA8IDUuMDEpXFxuICApID8gMS4wIDogMC4wO1xcbiAgZmxvYXQgYW5nbGUgPSAyLjAgKiAzLjE0MTU5ICogKChzZWdtZW50ICsgbmV4dEFuZ2xlKSAvIHNlZ21lbnRDb3VudCk7XFxuXFxuICB2ZWMzIHYxID0gbWl4KGQsIHZlYzMoMC4wKSwgY29uZU9mZnNldCk7XFxuICB2ZWMzIHYyID0gdjEgLSBkO1xcblxcbiAgdmVjMyB1ID0gZ2V0T3J0aG9nb25hbFZlY3RvcihkKTtcXG4gIHZlYzMgdiA9IG5vcm1hbGl6ZShjcm9zcyh1LCBkKSk7XFxuXFxuICB2ZWMzIHggPSB1ICogY29zKGFuZ2xlKSAqIGxlbmd0aChkKSowLjI1O1xcbiAgdmVjMyB5ID0gdiAqIHNpbihhbmdsZSkgKiBsZW5ndGgoZCkqMC4yNTtcXG4gIHZlYzMgdjMgPSB2MiArIHggKyB5O1xcbiAgaWYgKHNlZ21lbnRJbmRleCA8IDMuMCkge1xcbiAgICB2ZWMzIHR4ID0gdSAqIHNpbihhbmdsZSk7XFxuICAgIHZlYzMgdHkgPSB2ICogLWNvcyhhbmdsZSk7XFxuICAgIHZlYzMgdGFuZ2VudCA9IHR4ICsgdHk7XFxuICAgIG5vcm1hbCA9IG5vcm1hbGl6ZShjcm9zcyh2MyAtIHYxLCB0YW5nZW50KSk7XFxuICB9XFxuXFxuICBpZiAoc2VnbWVudEluZGV4ID09IDAuMCkge1xcbiAgICByZXR1cm4gbWl4KGQsIHZlYzMoMC4wKSwgY29uZU9mZnNldCk7XFxuICB9XFxuICByZXR1cm4gdjM7XFxufVxcblxcbmF0dHJpYnV0ZSB2ZWMzIHZlY3RvcjtcXG5hdHRyaWJ1dGUgdmVjNCBjb2xvciwgcG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgdXY7XFxudW5pZm9ybSBmbG9hdCB2ZWN0b3JTY2FsZTtcXG51bmlmb3JtIGZsb2F0IGNvbmVTY2FsZTtcXG5cXG51bmlmb3JtIGZsb2F0IGNvbmVPZmZzZXQ7XFxuXFxudW5pZm9ybSBtYXQ0IG1vZGVsXFxuICAgICAgICAgICAsIHZpZXdcXG4gICAgICAgICAgICwgcHJvamVjdGlvblxcbiAgICAgICAgICAgLCBpbnZlcnNlTW9kZWw7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uXFxuICAgICAgICAgICAsIGxpZ2h0UG9zaXRpb247XFxuXFxudmFyeWluZyB2ZWMzIGZfbm9ybWFsXFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cXG4gICAgICAgICAgICwgZl9leWVEaXJlY3Rpb25cXG4gICAgICAgICAgICwgZl9kYXRhXFxuICAgICAgICAgICAsIGZfcG9zaXRpb247XFxudmFyeWluZyB2ZWM0IGZfY29sb3I7XFxudmFyeWluZyB2ZWMyIGZfdXY7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgLy8gU2NhbGUgdGhlIHZlY3RvciBtYWduaXR1ZGUgdG8gc3RheSBjb25zdGFudCB3aXRoXFxuICAvLyBtb2RlbCAmIHZpZXcgY2hhbmdlcy5cXG4gIHZlYzMgbm9ybWFsO1xcbiAgdmVjMyBYWVogPSBnZXRDb25lUG9zaXRpb24obWF0Myhtb2RlbCkgKiAoKHZlY3RvclNjYWxlICogY29uZVNjYWxlKSAqIHZlY3RvciksIHBvc2l0aW9uLncsIGNvbmVPZmZzZXQsIG5vcm1hbCk7XFxuICB2ZWM0IGNvbmVQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbi54eXosIDEuMCkgKyB2ZWM0KFhZWiwgMC4wKTtcXG5cXG4gIC8vTGlnaHRpbmcgZ2VvbWV0cnkgcGFyYW1ldGVyc1xcbiAgdmVjNCBjYW1lcmFDb29yZGluYXRlID0gdmlldyAqIGNvbmVQb3NpdGlvbjtcXG4gIGNhbWVyYUNvb3JkaW5hdGUueHl6IC89IGNhbWVyYUNvb3JkaW5hdGUudztcXG4gIGZfbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XFxuICBmX2V5ZURpcmVjdGlvbiAgID0gZXllUG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcXG4gIGZfbm9ybWFsID0gbm9ybWFsaXplKCh2ZWM0KG5vcm1hbCwwLjApICogaW52ZXJzZU1vZGVsKS54eXopO1xcblxcbiAgLy8gdmVjNCBtX3Bvc2l0aW9uICA9IG1vZGVsICogdmVjNChjb25lUG9zaXRpb24sIDEuMCk7XFxuICB2ZWM0IHRfcG9zaXRpb24gID0gdmlldyAqIGNvbmVQb3NpdGlvbjtcXG4gIGdsX1Bvc2l0aW9uICAgICAgPSBwcm9qZWN0aW9uICogdF9wb3NpdGlvbjtcXG5cXG4gIGZfY29sb3IgICAgICAgICAgPSBjb2xvcjtcXG4gIGZfZGF0YSAgICAgICAgICAgPSBjb25lUG9zaXRpb24ueHl6O1xcbiAgZl9wb3NpdGlvbiAgICAgICA9IHBvc2l0aW9uLnh5ejtcXG4gIGZfdXYgICAgICAgICAgICAgPSB1djtcXG59XFxuXCJdKSxhPW4oW1wiI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGVcXG5cXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5mbG9hdCBiZWNrbWFubkRpc3RyaWJ1dGlvbihmbG9hdCB4LCBmbG9hdCByb3VnaG5lc3MpIHtcXG4gIGZsb2F0IE5kb3RIID0gbWF4KHgsIDAuMDAwMSk7XFxuICBmbG9hdCBjb3MyQWxwaGEgPSBOZG90SCAqIE5kb3RIO1xcbiAgZmxvYXQgdGFuMkFscGhhID0gKGNvczJBbHBoYSAtIDEuMCkgLyBjb3MyQWxwaGE7XFxuICBmbG9hdCByb3VnaG5lc3MyID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xcbiAgZmxvYXQgZGVub20gPSAzLjE0MTU5MjY1MzU4OTc5MyAqIHJvdWdobmVzczIgKiBjb3MyQWxwaGEgKiBjb3MyQWxwaGE7XFxuICByZXR1cm4gZXhwKHRhbjJBbHBoYSAvIHJvdWdobmVzczIpIC8gZGVub207XFxufVxcblxcbmZsb2F0IGNvb2tUb3JyYW5jZVNwZWN1bGFyKFxcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcXG4gIHZlYzMgdmlld0RpcmVjdGlvbixcXG4gIHZlYzMgc3VyZmFjZU5vcm1hbCxcXG4gIGZsb2F0IHJvdWdobmVzcyxcXG4gIGZsb2F0IGZyZXNuZWwpIHtcXG5cXG4gIGZsb2F0IFZkb3ROID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSwgMC4wKTtcXG4gIGZsb2F0IExkb3ROID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XFxuXFxuICAvL0hhbGYgYW5nbGUgdmVjdG9yXFxuICB2ZWMzIEggPSBub3JtYWxpemUobGlnaHREaXJlY3Rpb24gKyB2aWV3RGlyZWN0aW9uKTtcXG5cXG4gIC8vR2VvbWV0cmljIHRlcm1cXG4gIGZsb2F0IE5kb3RIID0gbWF4KGRvdChzdXJmYWNlTm9ybWFsLCBIKSwgMC4wKTtcXG4gIGZsb2F0IFZkb3RIID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xcbiAgZmxvYXQgTGRvdEggPSBtYXgoZG90KGxpZ2h0RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xcbiAgZmxvYXQgRzEgPSAoMi4wICogTmRvdEggKiBWZG90TikgLyBWZG90SDtcXG4gIGZsb2F0IEcyID0gKDIuMCAqIE5kb3RIICogTGRvdE4pIC8gTGRvdEg7XFxuICBmbG9hdCBHID0gbWluKDEuMCwgbWluKEcxLCBHMikpO1xcbiAgXFxuICAvL0Rpc3RyaWJ1dGlvbiB0ZXJtXFxuICBmbG9hdCBEID0gYmVja21hbm5EaXN0cmlidXRpb24oTmRvdEgsIHJvdWdobmVzcyk7XFxuXFxuICAvL0ZyZXNuZWwgdGVybVxcbiAgZmxvYXQgRiA9IHBvdygxLjAgLSBWZG90TiwgZnJlc25lbCk7XFxuXFxuICAvL011bHRpcGx5IHRlcm1zIGFuZCBkb25lXFxuICByZXR1cm4gIEcgKiBGICogRCAvIG1heCgzLjE0MTU5MjY1ICogVmRvdE4sIDAuMDAwMDAxKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcXG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XFxuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcXG59XFxuXFxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XFxudW5pZm9ybSBmbG9hdCByb3VnaG5lc3NcXG4gICAgICAgICAgICAsIGZyZXNuZWxcXG4gICAgICAgICAgICAsIGthbWJpZW50XFxuICAgICAgICAgICAgLCBrZGlmZnVzZVxcbiAgICAgICAgICAgICwga3NwZWN1bGFyXFxuICAgICAgICAgICAgLCBvcGFjaXR5O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxuXFxudmFyeWluZyB2ZWMzIGZfbm9ybWFsXFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cXG4gICAgICAgICAgICwgZl9leWVEaXJlY3Rpb25cXG4gICAgICAgICAgICwgZl9kYXRhXFxuICAgICAgICAgICAsIGZfcG9zaXRpb247XFxudmFyeWluZyB2ZWM0IGZfY29sb3I7XFxudmFyeWluZyB2ZWMyIGZfdXY7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9wb3NpdGlvbikpIGRpc2NhcmQ7XFxuICB2ZWMzIE4gPSBub3JtYWxpemUoZl9ub3JtYWwpO1xcbiAgdmVjMyBMID0gbm9ybWFsaXplKGZfbGlnaHREaXJlY3Rpb24pO1xcbiAgdmVjMyBWID0gbm9ybWFsaXplKGZfZXllRGlyZWN0aW9uKTtcXG5cXG4gIGlmKGdsX0Zyb250RmFjaW5nKSB7XFxuICAgIE4gPSAtTjtcXG4gIH1cXG5cXG4gIGZsb2F0IHNwZWN1bGFyID0gbWluKDEuMCwgbWF4KDAuMCwgY29va1RvcnJhbmNlU3BlY3VsYXIoTCwgViwgTiwgcm91Z2huZXNzLCBmcmVzbmVsKSkpO1xcbiAgZmxvYXQgZGlmZnVzZSAgPSBtaW4oa2FtYmllbnQgKyBrZGlmZnVzZSAqIG1heChkb3QoTiwgTCksIDAuMCksIDEuMCk7XFxuXFxuICB2ZWM0IHN1cmZhY2VDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dik7XFxuICB2ZWM0IGxpdENvbG9yID0gc3VyZmFjZUNvbG9yLmEgKiB2ZWM0KGRpZmZ1c2UgKiBzdXJmYWNlQ29sb3IucmdiICsga3NwZWN1bGFyICogdmVjMygxLDEsMSkgKiBzcGVjdWxhciwgIDEuMCk7XFxuXFxuICBnbF9GcmFnQ29sb3IgPSBsaXRDb2xvciAqIG9wYWNpdHk7XFxufVxcblwiXSksbz1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG52ZWMzIGdldE9ydGhvZ29uYWxWZWN0b3IodmVjMyB2KSB7XFxuICAvLyBSZXR1cm4gdXAtdmVjdG9yIGZvciBvbmx5LXogdmVjdG9yLlxcbiAgLy8gUmV0dXJuIGF4ICsgYnkgKyBjeiA9IDAsIGEgcG9pbnQgdGhhdCBsaWVzIG9uIHRoZSBwbGFuZSB0aGF0IGhhcyB2IGFzIGEgbm9ybWFsIGFuZCB0aGF0IGlzbid0ICgwLDAsMCkuXFxuICAvLyBGcm9tIHRoZSBhYm92ZSBpZi1zdGF0ZW1lbnQgd2UgaGF2ZSB8fGF8fCA+IDAgIFUgIHx8Ynx8ID4gMC5cXG4gIC8vIEFzc2lnbiB6ID0gMCwgeCA9IC1iLCB5ID0gYTpcXG4gIC8vIGEqLWIgKyBiKmEgKyBjKjAgPSAtYmEgKyBiYSArIDAgPSAwXFxuICBpZiAodi54KnYueCA+IHYueip2LnogfHwgdi55KnYueSA+IHYueip2LnopIHtcXG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKC12LnksIHYueCwgMC4wKSk7XFxuICB9IGVsc2Uge1xcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoMC4wLCB2LnosIC12LnkpKTtcXG4gIH1cXG59XFxuXFxuLy8gQ2FsY3VsYXRlIHRoZSBjb25lIHZlcnRleCBhbmQgbm9ybWFsIGF0IHRoZSBnaXZlbiBpbmRleC5cXG4vL1xcbi8vIFRoZSByZXR1cm5lZCB2ZXJ0ZXggaXMgZm9yIGEgY29uZSB3aXRoIGl0cyB0b3AgYXQgb3JpZ2luIGFuZCBoZWlnaHQgb2YgMS4wLFxcbi8vIHBvaW50aW5nIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHZlY3RvciBhdHRyaWJ1dGUuXFxuLy9cXG4vLyBFYWNoIGNvbmUgaXMgbWFkZSB1cCBvZiBhIHRvcCB2ZXJ0ZXgsIGEgY2VudGVyIGJhc2UgdmVydGV4IGFuZCBiYXNlIHBlcmltZXRlciB2ZXJ0aWNlcy5cXG4vLyBUaGVzZSB2ZXJ0aWNlcyBhcmUgdXNlZCB0byBtYWtlIHVwIHRoZSB0cmlhbmdsZXMgb2YgdGhlIGNvbmUgYnkgdGhlIGZvbGxvd2luZzpcXG4vLyAgIHNlZ21lbnQgKyAwIHRvcCB2ZXJ0ZXhcXG4vLyAgIHNlZ21lbnQgKyAxIHBlcmltZXRlciB2ZXJ0ZXggYSsxXFxuLy8gICBzZWdtZW50ICsgMiBwZXJpbWV0ZXIgdmVydGV4IGFcXG4vLyAgIHNlZ21lbnQgKyAzIGNlbnRlciBiYXNlIHZlcnRleFxcbi8vICAgc2VnbWVudCArIDQgcGVyaW1ldGVyIHZlcnRleCBhXFxuLy8gICBzZWdtZW50ICsgNSBwZXJpbWV0ZXIgdmVydGV4IGErMVxcbi8vIFdoZXJlIHNlZ21lbnQgaXMgdGhlIG51bWJlciBvZiB0aGUgcmFkaWFsIHNlZ21lbnQgKiA2IGFuZCBhIGlzIHRoZSBhbmdsZSBhdCB0aGF0IHJhZGlhbCBzZWdtZW50Llxcbi8vIFRvIGdvIGZyb20gaW5kZXggdG8gc2VnbWVudCwgZmxvb3IoaW5kZXggLyA2KVxcbi8vIFRvIGdvIGZyb20gc2VnbWVudCB0byBhbmdsZSwgMipwaSAqIChzZWdtZW50L3NlZ21lbnRDb3VudClcXG4vLyBUbyBnbyBmcm9tIGluZGV4IHRvIHNlZ21lbnQgaW5kZXgsIGluZGV4IC0gKHNlZ21lbnQqNilcXG4vL1xcbnZlYzMgZ2V0Q29uZVBvc2l0aW9uKHZlYzMgZCwgZmxvYXQgcmF3SW5kZXgsIGZsb2F0IGNvbmVPZmZzZXQsIG91dCB2ZWMzIG5vcm1hbCkge1xcblxcbiAgY29uc3QgZmxvYXQgc2VnbWVudENvdW50ID0gOC4wO1xcblxcbiAgZmxvYXQgaW5kZXggPSByYXdJbmRleCAtIGZsb29yKHJhd0luZGV4IC9cXG4gICAgKHNlZ21lbnRDb3VudCAqIDYuMCkpICpcXG4gICAgKHNlZ21lbnRDb3VudCAqIDYuMCk7XFxuXFxuICBmbG9hdCBzZWdtZW50ID0gZmxvb3IoMC4wMDEgKyBpbmRleC82LjApO1xcbiAgZmxvYXQgc2VnbWVudEluZGV4ID0gaW5kZXggLSAoc2VnbWVudCo2LjApO1xcblxcbiAgbm9ybWFsID0gLW5vcm1hbGl6ZShkKTtcXG5cXG4gIGlmIChzZWdtZW50SW5kZXggPiAyLjk5ICYmIHNlZ21lbnRJbmRleCA8IDMuMDEpIHtcXG4gICAgcmV0dXJuIG1peCh2ZWMzKDAuMCksIC1kLCBjb25lT2Zmc2V0KTtcXG4gIH1cXG5cXG4gIGZsb2F0IG5leHRBbmdsZSA9IChcXG4gICAgKHNlZ21lbnRJbmRleCA+IDAuOTkgJiYgIHNlZ21lbnRJbmRleCA8IDEuMDEpIHx8XFxuICAgIChzZWdtZW50SW5kZXggPiA0Ljk5ICYmICBzZWdtZW50SW5kZXggPCA1LjAxKVxcbiAgKSA/IDEuMCA6IDAuMDtcXG4gIGZsb2F0IGFuZ2xlID0gMi4wICogMy4xNDE1OSAqICgoc2VnbWVudCArIG5leHRBbmdsZSkgLyBzZWdtZW50Q291bnQpO1xcblxcbiAgdmVjMyB2MSA9IG1peChkLCB2ZWMzKDAuMCksIGNvbmVPZmZzZXQpO1xcbiAgdmVjMyB2MiA9IHYxIC0gZDtcXG5cXG4gIHZlYzMgdSA9IGdldE9ydGhvZ29uYWxWZWN0b3IoZCk7XFxuICB2ZWMzIHYgPSBub3JtYWxpemUoY3Jvc3ModSwgZCkpO1xcblxcbiAgdmVjMyB4ID0gdSAqIGNvcyhhbmdsZSkgKiBsZW5ndGgoZCkqMC4yNTtcXG4gIHZlYzMgeSA9IHYgKiBzaW4oYW5nbGUpICogbGVuZ3RoKGQpKjAuMjU7XFxuICB2ZWMzIHYzID0gdjIgKyB4ICsgeTtcXG4gIGlmIChzZWdtZW50SW5kZXggPCAzLjApIHtcXG4gICAgdmVjMyB0eCA9IHUgKiBzaW4oYW5nbGUpO1xcbiAgICB2ZWMzIHR5ID0gdiAqIC1jb3MoYW5nbGUpO1xcbiAgICB2ZWMzIHRhbmdlbnQgPSB0eCArIHR5O1xcbiAgICBub3JtYWwgPSBub3JtYWxpemUoY3Jvc3ModjMgLSB2MSwgdGFuZ2VudCkpO1xcbiAgfVxcblxcbiAgaWYgKHNlZ21lbnRJbmRleCA9PSAwLjApIHtcXG4gICAgcmV0dXJuIG1peChkLCB2ZWMzKDAuMCksIGNvbmVPZmZzZXQpO1xcbiAgfVxcbiAgcmV0dXJuIHYzO1xcbn1cXG5cXG5hdHRyaWJ1dGUgdmVjMyB2ZWN0b3I7XFxuYXR0cmlidXRlIHZlYzQgcG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzQgaWQ7XFxuXFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcblxcbnVuaWZvcm0gZmxvYXQgdmVjdG9yU2NhbGU7XFxudW5pZm9ybSBmbG9hdCBjb25lU2NhbGU7XFxudW5pZm9ybSBmbG9hdCBjb25lT2Zmc2V0O1xcblxcbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjNCBmX2lkO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzMgbm9ybWFsO1xcbiAgdmVjMyBYWVogPSBnZXRDb25lUG9zaXRpb24obWF0Myhtb2RlbCkgKiAoKHZlY3RvclNjYWxlICogY29uZVNjYWxlKSAqIHZlY3RvciksIHBvc2l0aW9uLncsIGNvbmVPZmZzZXQsIG5vcm1hbCk7XFxuICB2ZWM0IGNvbmVQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbi54eXosIDEuMCkgKyB2ZWM0KFhZWiwgMC4wKTtcXG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBjb25lUG9zaXRpb247XFxuICBmX2lkICAgICAgICA9IGlkO1xcbiAgZl9wb3NpdGlvbiAgPSBwb3NpdGlvbi54eXo7XFxufVxcblwiXSkscz1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XFxuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XFxufVxcblxcbnVuaWZvcm0gdmVjMyAgY2xpcEJvdW5kc1syXTtcXG51bmlmb3JtIGZsb2F0IHBpY2tJZDtcXG5cXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzQgZl9pZDtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBmX3Bvc2l0aW9uKSkgZGlzY2FyZDtcXG5cXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLCBmX2lkLnh5eik7XFxufVwiXSk7ci5tZXNoU2hhZGVyPXt2ZXJ0ZXg6aSxmcmFnbWVudDphLGF0dHJpYnV0ZXM6W3tuYW1lOlwicG9zaXRpb25cIix0eXBlOlwidmVjNFwifSx7bmFtZTpcIm5vcm1hbFwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwiY29sb3JcIix0eXBlOlwidmVjNFwifSx7bmFtZTpcInV2XCIsdHlwZTpcInZlYzJcIn0se25hbWU6XCJ2ZWN0b3JcIix0eXBlOlwidmVjM1wifV19LHIucGlja1NoYWRlcj17dmVydGV4Om8sZnJhZ21lbnQ6cyxhdHRyaWJ1dGVzOlt7bmFtZTpcInBvc2l0aW9uXCIsdHlwZTpcInZlYzRcIn0se25hbWU6XCJpZFwiLHR5cGU6XCJ2ZWM0XCJ9LHtuYW1lOlwidmVjdG9yXCIsdHlwZTpcInZlYzNcIn1dfX0se2dsc2xpZnk6NDAyfV0sMjQyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXswOlwiTk9ORVwiLDE6XCJPTkVcIiwyOlwiTElORV9MT09QXCIsMzpcIkxJTkVfU1RSSVBcIiw0OlwiVFJJQU5HTEVTXCIsNTpcIlRSSUFOR0xFX1NUUklQXCIsNjpcIlRSSUFOR0xFX0ZBTlwiLDI1NjpcIkRFUFRIX0JVRkZFUl9CSVRcIiw1MTI6XCJORVZFUlwiLDUxMzpcIkxFU1NcIiw1MTQ6XCJFUVVBTFwiLDUxNTpcIkxFUVVBTFwiLDUxNjpcIkdSRUFURVJcIiw1MTc6XCJOT1RFUVVBTFwiLDUxODpcIkdFUVVBTFwiLDUxOTpcIkFMV0FZU1wiLDc2ODpcIlNSQ19DT0xPUlwiLDc2OTpcIk9ORV9NSU5VU19TUkNfQ09MT1JcIiw3NzA6XCJTUkNfQUxQSEFcIiw3NzE6XCJPTkVfTUlOVVNfU1JDX0FMUEhBXCIsNzcyOlwiRFNUX0FMUEhBXCIsNzczOlwiT05FX01JTlVTX0RTVF9BTFBIQVwiLDc3NDpcIkRTVF9DT0xPUlwiLDc3NTpcIk9ORV9NSU5VU19EU1RfQ09MT1JcIiw3NzY6XCJTUkNfQUxQSEFfU0FUVVJBVEVcIiwxMDI0OlwiU1RFTkNJTF9CVUZGRVJfQklUXCIsMTAyODpcIkZST05UXCIsMTAyOTpcIkJBQ0tcIiwxMDMyOlwiRlJPTlRfQU5EX0JBQ0tcIiwxMjgwOlwiSU5WQUxJRF9FTlVNXCIsMTI4MTpcIklOVkFMSURfVkFMVUVcIiwxMjgyOlwiSU5WQUxJRF9PUEVSQVRJT05cIiwxMjg1OlwiT1VUX09GX01FTU9SWVwiLDEyODY6XCJJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTlwiLDIzMDQ6XCJDV1wiLDIzMDU6XCJDQ1dcIiwyODQ5OlwiTElORV9XSURUSFwiLDI4ODQ6XCJDVUxMX0ZBQ0VcIiwyODg1OlwiQ1VMTF9GQUNFX01PREVcIiwyODg2OlwiRlJPTlRfRkFDRVwiLDI5Mjg6XCJERVBUSF9SQU5HRVwiLDI5Mjk6XCJERVBUSF9URVNUXCIsMjkzMDpcIkRFUFRIX1dSSVRFTUFTS1wiLDI5MzE6XCJERVBUSF9DTEVBUl9WQUxVRVwiLDI5MzI6XCJERVBUSF9GVU5DXCIsMjk2MDpcIlNURU5DSUxfVEVTVFwiLDI5NjE6XCJTVEVOQ0lMX0NMRUFSX1ZBTFVFXCIsMjk2MjpcIlNURU5DSUxfRlVOQ1wiLDI5NjM6XCJTVEVOQ0lMX1ZBTFVFX01BU0tcIiwyOTY0OlwiU1RFTkNJTF9GQUlMXCIsMjk2NTpcIlNURU5DSUxfUEFTU19ERVBUSF9GQUlMXCIsMjk2NjpcIlNURU5DSUxfUEFTU19ERVBUSF9QQVNTXCIsMjk2NzpcIlNURU5DSUxfUkVGXCIsMjk2ODpcIlNURU5DSUxfV1JJVEVNQVNLXCIsMjk3ODpcIlZJRVdQT1JUXCIsMzAyNDpcIkRJVEhFUlwiLDMwNDI6XCJCTEVORFwiLDMwODg6XCJTQ0lTU09SX0JPWFwiLDMwODk6XCJTQ0lTU09SX1RFU1RcIiwzMTA2OlwiQ09MT1JfQ0xFQVJfVkFMVUVcIiwzMTA3OlwiQ09MT1JfV1JJVEVNQVNLXCIsMzMxNzpcIlVOUEFDS19BTElHTk1FTlRcIiwzMzMzOlwiUEFDS19BTElHTk1FTlRcIiwzMzc5OlwiTUFYX1RFWFRVUkVfU0laRVwiLDMzODY6XCJNQVhfVklFV1BPUlRfRElNU1wiLDM0MDg6XCJTVUJQSVhFTF9CSVRTXCIsMzQxMDpcIlJFRF9CSVRTXCIsMzQxMTpcIkdSRUVOX0JJVFNcIiwzNDEyOlwiQkxVRV9CSVRTXCIsMzQxMzpcIkFMUEhBX0JJVFNcIiwzNDE0OlwiREVQVEhfQklUU1wiLDM0MTU6XCJTVEVOQ0lMX0JJVFNcIiwzNTUzOlwiVEVYVFVSRV8yRFwiLDQzNTI6XCJET05UX0NBUkVcIiw0MzUzOlwiRkFTVEVTVFwiLDQzNTQ6XCJOSUNFU1RcIiw1MTIwOlwiQllURVwiLDUxMjE6XCJVTlNJR05FRF9CWVRFXCIsNTEyMjpcIlNIT1JUXCIsNTEyMzpcIlVOU0lHTkVEX1NIT1JUXCIsNTEyNDpcIklOVFwiLDUxMjU6XCJVTlNJR05FRF9JTlRcIiw1MTI2OlwiRkxPQVRcIiw1Mzg2OlwiSU5WRVJUXCIsNTg5MDpcIlRFWFRVUkVcIiw2NDAxOlwiU1RFTkNJTF9JTkRFWFwiLDY0MDI6XCJERVBUSF9DT01QT05FTlRcIiw2NDA2OlwiQUxQSEFcIiw2NDA3OlwiUkdCXCIsNjQwODpcIlJHQkFcIiw2NDA5OlwiTFVNSU5BTkNFXCIsNjQxMDpcIkxVTUlOQU5DRV9BTFBIQVwiLDc2ODA6XCJLRUVQXCIsNzY4MTpcIlJFUExBQ0VcIiw3NjgyOlwiSU5DUlwiLDc2ODM6XCJERUNSXCIsNzkzNjpcIlZFTkRPUlwiLDc5Mzc6XCJSRU5ERVJFUlwiLDc5Mzg6XCJWRVJTSU9OXCIsOTcyODpcIk5FQVJFU1RcIiw5NzI5OlwiTElORUFSXCIsOTk4NDpcIk5FQVJFU1RfTUlQTUFQX05FQVJFU1RcIiw5OTg1OlwiTElORUFSX01JUE1BUF9ORUFSRVNUXCIsOTk4NjpcIk5FQVJFU1RfTUlQTUFQX0xJTkVBUlwiLDk5ODc6XCJMSU5FQVJfTUlQTUFQX0xJTkVBUlwiLDEwMjQwOlwiVEVYVFVSRV9NQUdfRklMVEVSXCIsMTAyNDE6XCJURVhUVVJFX01JTl9GSUxURVJcIiwxMDI0MjpcIlRFWFRVUkVfV1JBUF9TXCIsMTAyNDM6XCJURVhUVVJFX1dSQVBfVFwiLDEwNDk3OlwiUkVQRUFUXCIsMTA3NTI6XCJQT0xZR09OX09GRlNFVF9VTklUU1wiLDE2Mzg0OlwiQ09MT1JfQlVGRkVSX0JJVFwiLDMyNzY5OlwiQ09OU1RBTlRfQ09MT1JcIiwzMjc3MDpcIk9ORV9NSU5VU19DT05TVEFOVF9DT0xPUlwiLDMyNzcxOlwiQ09OU1RBTlRfQUxQSEFcIiwzMjc3MjpcIk9ORV9NSU5VU19DT05TVEFOVF9BTFBIQVwiLDMyNzczOlwiQkxFTkRfQ09MT1JcIiwzMjc3NDpcIkZVTkNfQUREXCIsMzI3Nzc6XCJCTEVORF9FUVVBVElPTl9SR0JcIiwzMjc3ODpcIkZVTkNfU1VCVFJBQ1RcIiwzMjc3OTpcIkZVTkNfUkVWRVJTRV9TVUJUUkFDVFwiLDMyODE5OlwiVU5TSUdORURfU0hPUlRfNF80XzRfNFwiLDMyODIwOlwiVU5TSUdORURfU0hPUlRfNV81XzVfMVwiLDMyODIzOlwiUE9MWUdPTl9PRkZTRVRfRklMTFwiLDMyODI0OlwiUE9MWUdPTl9PRkZTRVRfRkFDVE9SXCIsMzI4NTQ6XCJSR0JBNFwiLDMyODU1OlwiUkdCNV9BMVwiLDMyODczOlwiVEVYVFVSRV9CSU5ESU5HXzJEXCIsMzI5MjY6XCJTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0VcIiwzMjkyODpcIlNBTVBMRV9DT1ZFUkFHRVwiLDMyOTM2OlwiU0FNUExFX0JVRkZFUlNcIiwzMjkzNzpcIlNBTVBMRVNcIiwzMjkzODpcIlNBTVBMRV9DT1ZFUkFHRV9WQUxVRVwiLDMyOTM5OlwiU0FNUExFX0NPVkVSQUdFX0lOVkVSVFwiLDMyOTY4OlwiQkxFTkRfRFNUX1JHQlwiLDMyOTY5OlwiQkxFTkRfU1JDX1JHQlwiLDMyOTcwOlwiQkxFTkRfRFNUX0FMUEhBXCIsMzI5NzE6XCJCTEVORF9TUkNfQUxQSEFcIiwzMzA3MTpcIkNMQU1QX1RPX0VER0VcIiwzMzE3MDpcIkdFTkVSQVRFX01JUE1BUF9ISU5UXCIsMzMxODk6XCJERVBUSF9DT01QT05FTlQxNlwiLDMzMzA2OlwiREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UXCIsMzM2MzU6XCJVTlNJR05FRF9TSE9SVF81XzZfNVwiLDMzNjQ4OlwiTUlSUk9SRURfUkVQRUFUXCIsMzM5MDE6XCJBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VcIiwzMzkwMjpcIkFMSUFTRURfTElORV9XSURUSF9SQU5HRVwiLDMzOTg0OlwiVEVYVFVSRTBcIiwzMzk4NTpcIlRFWFRVUkUxXCIsMzM5ODY6XCJURVhUVVJFMlwiLDMzOTg3OlwiVEVYVFVSRTNcIiwzMzk4ODpcIlRFWFRVUkU0XCIsMzM5ODk6XCJURVhUVVJFNVwiLDMzOTkwOlwiVEVYVFVSRTZcIiwzMzk5MTpcIlRFWFRVUkU3XCIsMzM5OTI6XCJURVhUVVJFOFwiLDMzOTkzOlwiVEVYVFVSRTlcIiwzMzk5NDpcIlRFWFRVUkUxMFwiLDMzOTk1OlwiVEVYVFVSRTExXCIsMzM5OTY6XCJURVhUVVJFMTJcIiwzMzk5NzpcIlRFWFRVUkUxM1wiLDMzOTk4OlwiVEVYVFVSRTE0XCIsMzM5OTk6XCJURVhUVVJFMTVcIiwzNDAwMDpcIlRFWFRVUkUxNlwiLDM0MDAxOlwiVEVYVFVSRTE3XCIsMzQwMDI6XCJURVhUVVJFMThcIiwzNDAwMzpcIlRFWFRVUkUxOVwiLDM0MDA0OlwiVEVYVFVSRTIwXCIsMzQwMDU6XCJURVhUVVJFMjFcIiwzNDAwNjpcIlRFWFRVUkUyMlwiLDM0MDA3OlwiVEVYVFVSRTIzXCIsMzQwMDg6XCJURVhUVVJFMjRcIiwzNDAwOTpcIlRFWFRVUkUyNVwiLDM0MDEwOlwiVEVYVFVSRTI2XCIsMzQwMTE6XCJURVhUVVJFMjdcIiwzNDAxMjpcIlRFWFRVUkUyOFwiLDM0MDEzOlwiVEVYVFVSRTI5XCIsMzQwMTQ6XCJURVhUVVJFMzBcIiwzNDAxNTpcIlRFWFRVUkUzMVwiLDM0MDE2OlwiQUNUSVZFX1RFWFRVUkVcIiwzNDAyNDpcIk1BWF9SRU5ERVJCVUZGRVJfU0laRVwiLDM0MDQxOlwiREVQVEhfU1RFTkNJTFwiLDM0MDU1OlwiSU5DUl9XUkFQXCIsMzQwNTY6XCJERUNSX1dSQVBcIiwzNDA2NzpcIlRFWFRVUkVfQ1VCRV9NQVBcIiwzNDA2ODpcIlRFWFRVUkVfQklORElOR19DVUJFX01BUFwiLDM0MDY5OlwiVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YXCIsMzQwNzA6XCJURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1hcIiwzNDA3MTpcIlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWVwiLDM0MDcyOlwiVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZXCIsMzQwNzM6XCJURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1pcIiwzNDA3NDpcIlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWlwiLDM0MDc2OlwiTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRVwiLDM0MzM4OlwiVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEXCIsMzQzMzk6XCJWRVJURVhfQVRUUklCX0FSUkFZX1NJWkVcIiwzNDM0MDpcIlZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFXCIsMzQzNDE6XCJWRVJURVhfQVRUUklCX0FSUkFZX1RZUEVcIiwzNDM0MjpcIkNVUlJFTlRfVkVSVEVYX0FUVFJJQlwiLDM0MzczOlwiVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSXCIsMzQ0NjY6XCJOVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFNcIiwzNDQ2NzpcIkNPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTXCIsMzQ2NjA6XCJCVUZGRVJfU0laRVwiLDM0NjYxOlwiQlVGRkVSX1VTQUdFXCIsMzQ4MTY6XCJTVEVOQ0lMX0JBQ0tfRlVOQ1wiLDM0ODE3OlwiU1RFTkNJTF9CQUNLX0ZBSUxcIiwzNDgxODpcIlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUxcIiwzNDgxOTpcIlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1NcIiwzNDg3NzpcIkJMRU5EX0VRVUFUSU9OX0FMUEhBXCIsMzQ5MjE6XCJNQVhfVkVSVEVYX0FUVFJJQlNcIiwzNDkyMjpcIlZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRFwiLDM0OTMwOlwiTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNcIiwzNDk2MjpcIkFSUkFZX0JVRkZFUlwiLDM0OTYzOlwiRUxFTUVOVF9BUlJBWV9CVUZGRVJcIiwzNDk2NDpcIkFSUkFZX0JVRkZFUl9CSU5ESU5HXCIsMzQ5NjU6XCJFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HXCIsMzQ5NzU6XCJWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HXCIsMzUwNDA6XCJTVFJFQU1fRFJBV1wiLDM1MDQ0OlwiU1RBVElDX0RSQVdcIiwzNTA0ODpcIkRZTkFNSUNfRFJBV1wiLDM1NjMyOlwiRlJBR01FTlRfU0hBREVSXCIsMzU2MzM6XCJWRVJURVhfU0hBREVSXCIsMzU2NjA6XCJNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNcIiwzNTY2MTpcIk1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTXCIsMzU2NjM6XCJTSEFERVJfVFlQRVwiLDM1NjY0OlwiRkxPQVRfVkVDMlwiLDM1NjY1OlwiRkxPQVRfVkVDM1wiLDM1NjY2OlwiRkxPQVRfVkVDNFwiLDM1NjY3OlwiSU5UX1ZFQzJcIiwzNTY2ODpcIklOVF9WRUMzXCIsMzU2Njk6XCJJTlRfVkVDNFwiLDM1NjcwOlwiQk9PTFwiLDM1NjcxOlwiQk9PTF9WRUMyXCIsMzU2NzI6XCJCT09MX1ZFQzNcIiwzNTY3MzpcIkJPT0xfVkVDNFwiLDM1Njc0OlwiRkxPQVRfTUFUMlwiLDM1Njc1OlwiRkxPQVRfTUFUM1wiLDM1Njc2OlwiRkxPQVRfTUFUNFwiLDM1Njc4OlwiU0FNUExFUl8yRFwiLDM1NjgwOlwiU0FNUExFUl9DVUJFXCIsMzU3MTI6XCJERUxFVEVfU1RBVFVTXCIsMzU3MTM6XCJDT01QSUxFX1NUQVRVU1wiLDM1NzE0OlwiTElOS19TVEFUVVNcIiwzNTcxNTpcIlZBTElEQVRFX1NUQVRVU1wiLDM1NzE2OlwiSU5GT19MT0dfTEVOR1RIXCIsMzU3MTc6XCJBVFRBQ0hFRF9TSEFERVJTXCIsMzU3MTg6XCJBQ1RJVkVfVU5JRk9STVNcIiwzNTcxOTpcIkFDVElWRV9VTklGT1JNX01BWF9MRU5HVEhcIiwzNTcyMDpcIlNIQURFUl9TT1VSQ0VfTEVOR1RIXCIsMzU3MjE6XCJBQ1RJVkVfQVRUUklCVVRFU1wiLDM1NzIyOlwiQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIXCIsMzU3MjQ6XCJTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT05cIiwzNTcyNTpcIkNVUlJFTlRfUFJPR1JBTVwiLDM2MDAzOlwiU1RFTkNJTF9CQUNLX1JFRlwiLDM2MDA0OlwiU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0tcIiwzNjAwNTpcIlNURU5DSUxfQkFDS19XUklURU1BU0tcIiwzNjAwNjpcIkZSQU1FQlVGRkVSX0JJTkRJTkdcIiwzNjAwNzpcIlJFTkRFUkJVRkZFUl9CSU5ESU5HXCIsMzYwNDg6XCJGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFXCIsMzYwNDk6XCJGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FXCIsMzYwNTA6XCJGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUxcIiwzNjA1MTpcIkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFXCIsMzYwNTM6XCJGUkFNRUJVRkZFUl9DT01QTEVURVwiLDM2MDU0OlwiRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UXCIsMzYwNTU6XCJGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVFwiLDM2MDU3OlwiRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TXCIsMzYwNjE6XCJGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRFwiLDM2MDY0OlwiQ09MT1JfQVRUQUNITUVOVDBcIiwzNjA5NjpcIkRFUFRIX0FUVEFDSE1FTlRcIiwzNjEyODpcIlNURU5DSUxfQVRUQUNITUVOVFwiLDM2MTYwOlwiRlJBTUVCVUZGRVJcIiwzNjE2MTpcIlJFTkRFUkJVRkZFUlwiLDM2MTYyOlwiUkVOREVSQlVGRkVSX1dJRFRIXCIsMzYxNjM6XCJSRU5ERVJCVUZGRVJfSEVJR0hUXCIsMzYxNjQ6XCJSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUXCIsMzYxNjg6XCJTVEVOQ0lMX0lOREVYOFwiLDM2MTc2OlwiUkVOREVSQlVGRkVSX1JFRF9TSVpFXCIsMzYxNzc6XCJSRU5ERVJCVUZGRVJfR1JFRU5fU0laRVwiLDM2MTc4OlwiUkVOREVSQlVGRkVSX0JMVUVfU0laRVwiLDM2MTc5OlwiUkVOREVSQlVGRkVSX0FMUEhBX1NJWkVcIiwzNjE4MDpcIlJFTkRFUkJVRkZFUl9ERVBUSF9TSVpFXCIsMzYxODE6XCJSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFXCIsMzYxOTQ6XCJSR0I1NjVcIiwzNjMzNjpcIkxPV19GTE9BVFwiLDM2MzM3OlwiTUVESVVNX0ZMT0FUXCIsMzYzMzg6XCJISUdIX0ZMT0FUXCIsMzYzMzk6XCJMT1dfSU5UXCIsMzYzNDA6XCJNRURJVU1fSU5UXCIsMzYzNDE6XCJISUdIX0lOVFwiLDM2MzQ2OlwiU0hBREVSX0NPTVBJTEVSXCIsMzYzNDc6XCJNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SU1wiLDM2MzQ4OlwiTUFYX1ZBUllJTkdfVkVDVE9SU1wiLDM2MzQ5OlwiTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SU1wiLDM3NDQwOlwiVU5QQUNLX0ZMSVBfWV9XRUJHTFwiLDM3NDQxOlwiVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMXCIsMzc0NDI6XCJDT05URVhUX0xPU1RfV0VCR0xcIiwzNzQ0MzpcIlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0xcIiwzNzQ0NDpcIkJST1dTRVJfREVGQVVMVF9XRUJHTFwifX0se31dLDI0MzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuLzEuMC9udW1iZXJzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gblt0XX19LHtcIi4vMS4wL251bWJlcnNcIjoyNDJ9XSwyNDQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPW4oZSksbz1pKGUsW3tidWZmZXI6cix0eXBlOmUuRkxPQVQsc2l6ZTozLG9mZnNldDowLHN0cmlkZTo0MH0se2J1ZmZlcjpyLHR5cGU6ZS5GTE9BVCxzaXplOjQsb2Zmc2V0OjEyLHN0cmlkZTo0MH0se2J1ZmZlcjpyLHR5cGU6ZS5GTE9BVCxzaXplOjMsb2Zmc2V0OjI4LHN0cmlkZTo0MH1dKSxsPWEoZSk7bC5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsbC5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTEsbC5hdHRyaWJ1dGVzLm9mZnNldC5sb2NhdGlvbj0yO3ZhciBjPW5ldyBzKGUscixvLGwpO3JldHVybiBjLnVwZGF0ZSh0KSxjfTt2YXIgbj10KFwiZ2wtYnVmZmVyXCIpLGk9dChcImdsLXZhb1wiKSxhPXQoXCIuL3NoYWRlcnMvaW5kZXhcIiksbz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24gcyh0LGUscixuKXt0aGlzLmdsPXQsdGhpcy5zaGFkZXI9bix0aGlzLmJ1ZmZlcj1lLHRoaXMudmFvPXIsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5jbGlwQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMubGluZVdpZHRoPVsxLDEsMV0sdGhpcy5jYXBTaXplPVsxMCwxMCwxMF0sdGhpcy5saW5lQ291bnQ9WzAsMCwwXSx0aGlzLmxpbmVPZmZzZXQ9WzAsMCwwXSx0aGlzLm9wYWNpdHk9MSx0aGlzLmhhc0FscGhhPSExfXZhciBsPXMucHJvdG90eXBlO2Z1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9MDtyPDM7KytyKXRbMF1bcl09TWF0aC5taW4odFswXVtyXSxlW3JdKSx0WzFdW3JdPU1hdGgubWF4KHRbMV1bcl0sZVtyXSl9bC5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLmhhc0FscGhhfSxsLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBbHBoYX0sbC5kcmF3VHJhbnNwYXJlbnQ9bC5kcmF3PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2wscj10aGlzLnNoYWRlci51bmlmb3Jtczt0aGlzLnNoYWRlci5iaW5kKCk7dmFyIG49ci52aWV3PXQudmlld3x8byxpPXIucHJvamVjdGlvbj10LnByb2plY3Rpb258fG87ci5tb2RlbD10Lm1vZGVsfHxvLHIuY2xpcEJvdW5kcz10aGlzLmNsaXBCb3VuZHMsci5vcGFjaXR5PXRoaXMub3BhY2l0eTt2YXIgYT1uWzEyXSxzPW5bMTNdLGw9blsxNF0sYz1uWzE1XSx1PSh0Ll9vcnRob3x8ITE/MjoxKSp0aGlzLnBpeGVsUmF0aW8qKGlbM10qYStpWzddKnMraVsxMV0qbCtpWzE1XSpjKS9lLmRyYXdpbmdCdWZmZXJIZWlnaHQ7dGhpcy52YW8uYmluZCgpO2Zvcih2YXIgaD0wO2g8MzsrK2gpZS5saW5lV2lkdGgodGhpcy5saW5lV2lkdGhbaF0qdGhpcy5waXhlbFJhdGlvKSxyLmNhcFNpemU9dGhpcy5jYXBTaXplW2hdKnUsdGhpcy5saW5lQ291bnRbaF0mJmUuZHJhd0FycmF5cyhlLkxJTkVTLHRoaXMubGluZU9mZnNldFtoXSx0aGlzLmxpbmVDb3VudFtoXSk7dGhpcy52YW8udW5iaW5kKCl9O3ZhciB1PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBBcnJheSgzKSxlPTA7ZTwzOysrZSl7Zm9yKHZhciByPVtdLG49MTtuPD0yOysrbilmb3IodmFyIGk9LTE7aTw9MTtpKz0yKXt2YXIgYT1bMCwwLDBdO2FbKG4rZSklM109aSxyLnB1c2goYSl9dFtlXT1yfXJldHVybiB0fSgpO2Z1bmN0aW9uIGgodCxlLHIsbil7Zm9yKHZhciBpPXVbbl0sYT0wO2E8aS5sZW5ndGg7KythKXt2YXIgbz1pW2FdO3QucHVzaChlWzBdLGVbMV0sZVsyXSxyWzBdLHJbMV0sclsyXSxyWzNdLG9bMF0sb1sxXSxvWzJdKX1yZXR1cm4gaS5sZW5ndGh9bC51cGRhdGU9ZnVuY3Rpb24odCl7XCJsaW5lV2lkdGhcImluKHQ9dHx8e30pJiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgsQXJyYXkuaXNBcnJheSh0aGlzLmxpbmVXaWR0aCl8fCh0aGlzLmxpbmVXaWR0aD1bdGhpcy5saW5lV2lkdGgsdGhpcy5saW5lV2lkdGgsdGhpcy5saW5lV2lkdGhdKSksXCJjYXBTaXplXCJpbiB0JiYodGhpcy5jYXBTaXplPXQuY2FwU2l6ZSxBcnJheS5pc0FycmF5KHRoaXMuY2FwU2l6ZSl8fCh0aGlzLmNhcFNpemU9W3RoaXMuY2FwU2l6ZSx0aGlzLmNhcFNpemUsdGhpcy5jYXBTaXplXSkpLHRoaXMuaGFzQWxwaGE9ITEsXCJvcGFjaXR5XCJpbiB0JiYodGhpcy5vcGFjaXR5PSt0Lm9wYWNpdHksdGhpcy5vcGFjaXR5PDEmJih0aGlzLmhhc0FscGhhPSEwKSk7dmFyIGU9dC5jb2xvcnx8W1swLDAsMF0sWzAsMCwwXSxbMCwwLDBdXSxyPXQucG9zaXRpb24sbj10LmVycm9yO2lmKEFycmF5LmlzQXJyYXkoZVswXSl8fChlPVtlLGUsZV0pLHImJm4pe3ZhciBpPVtdLGE9ci5sZW5ndGgsbz0wO3RoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMubGluZUNvdW50PVswLDAsMF07Zm9yKHZhciBzPTA7czwzOysrcyl7dGhpcy5saW5lT2Zmc2V0W3NdPW87dDpmb3IodmFyIGw9MDtsPGE7KytsKXtmb3IodmFyIHU9cltsXSxmPTA7ZjwzOysrZilpZihpc05hTih1W2ZdKXx8IWlzRmluaXRlKHVbZl0pKWNvbnRpbnVlIHQ7dmFyIHA9bltsXSxkPWVbc107aWYoQXJyYXkuaXNBcnJheShkWzBdKSYmKGQ9ZVtsXSksMz09PWQubGVuZ3RoP2Q9W2RbMF0sZFsxXSxkWzJdLDFdOjQ9PT1kLmxlbmd0aCYmKGQ9W2RbMF0sZFsxXSxkWzJdLGRbM11dLCF0aGlzLmhhc0FscGhhJiZkWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKSksIWlzTmFOKHBbMF1bc10pJiYhaXNOYU4ocFsxXVtzXSkpe3ZhciBnO2lmKHBbMF1bc108MCkoZz11LnNsaWNlKCkpW3NdKz1wWzBdW3NdLGkucHVzaCh1WzBdLHVbMV0sdVsyXSxkWzBdLGRbMV0sZFsyXSxkWzNdLDAsMCwwLGdbMF0sZ1sxXSxnWzJdLGRbMF0sZFsxXSxkWzJdLGRbM10sMCwwLDApLGModGhpcy5ib3VuZHMsZyksbys9MitoKGksZyxkLHMpO2lmKHBbMV1bc10+MCkoZz11LnNsaWNlKCkpW3NdKz1wWzFdW3NdLGkucHVzaCh1WzBdLHVbMV0sdVsyXSxkWzBdLGRbMV0sZFsyXSxkWzNdLDAsMCwwLGdbMF0sZ1sxXSxnWzJdLGRbMF0sZFsxXSxkWzJdLGRbM10sMCwwLDApLGModGhpcy5ib3VuZHMsZyksbys9MitoKGksZyxkLHMpfX10aGlzLmxpbmVDb3VudFtzXT1vLXRoaXMubGluZU9mZnNldFtzXX10aGlzLmJ1ZmZlci51cGRhdGUoaSl9fSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpLHRoaXMudmFvLmRpc3Bvc2UoKX19LHtcIi4vc2hhZGVycy9pbmRleFwiOjI0NSxcImdsLWJ1ZmZlclwiOjIzOCxcImdsLXZhb1wiOjMyMH1dLDI0NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbHNsaWZ5XCIpLGk9dChcImdsLXNoYWRlclwiKSxhPW4oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24sIG9mZnNldDtcXG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XFxudW5pZm9ybSBmbG9hdCBjYXBTaXplO1xcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxudmFyeWluZyB2ZWMzIGZyYWdQb3NpdGlvbjtcXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWM0IHdvcmxkUG9zaXRpb24gID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xcbiAgd29ybGRQb3NpdGlvbiAgICAgICA9ICh3b3JsZFBvc2l0aW9uIC8gd29ybGRQb3NpdGlvbi53KSArIHZlYzQoY2FwU2l6ZSAqIG9mZnNldCwgMC4wKTtcXG4gIGdsX1Bvc2l0aW9uICAgICAgICAgPSBwcm9qZWN0aW9uICogdmlldyAqIHdvcmxkUG9zaXRpb247XFxuICBmcmFnQ29sb3IgICAgICAgICAgID0gY29sb3I7XFxuICBmcmFnUG9zaXRpb24gICAgICAgID0gcG9zaXRpb247XFxufVwiXSksbz1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XFxuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XFxufVxcblxcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcXG52YXJ5aW5nIHZlYzMgZnJhZ1Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgaWYgKFxcbiAgICBvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZyYWdQb3NpdGlvbikgfHxcXG4gICAgZnJhZ0NvbG9yLmEgKiBvcGFjaXR5ID09IDAuXFxuICApIGRpc2NhcmQ7XFxuXFxuICBnbF9GcmFnQ29sb3IgPSBvcGFjaXR5ICogZnJhZ0NvbG9yO1xcbn1cIl0pO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZTpcInBvc2l0aW9uXCIsdHlwZTpcInZlYzNcIn0se25hbWU6XCJjb2xvclwiLHR5cGU6XCJ2ZWM0XCJ9LHtuYW1lOlwib2Zmc2V0XCIsdHlwZTpcInZlYzNcIn1dKX19LHtcImdsLXNoYWRlclwiOjI5OCxnbHNsaWZ5OjQwMn1dLDI0NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbC10ZXh0dXJlMmRcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe2l8fChpPXQuRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQsYT10LkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCxvPXQuRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TLHM9dC5GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCk7dmFyIGM9dC5nZXRFeHRlbnNpb24oXCJXRUJHTF9kcmF3X2J1ZmZlcnNcIik7IWwmJmMmJmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nZXRQYXJhbWV0ZXIoZS5NQVhfQ09MT1JfQVRUQUNITUVOVFNfV0VCR0wpO2w9bmV3IEFycmF5KHIrMSk7Zm9yKHZhciBuPTA7bjw9cjsrK24pe2Zvcih2YXIgaT1uZXcgQXJyYXkociksYT0wO2E8bjsrK2EpaVthXT10LkNPTE9SX0FUVEFDSE1FTlQwK2E7Zm9yKHZhciBhPW47YTxyOysrYSlpW2FdPXQuTk9ORTtsW25dPWl9fSh0LGMpO0FycmF5LmlzQXJyYXkoZSkmJihuPXIscj0wfGVbMV0sZT0wfGVbMF0pO2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcihcImdsLWZibzogTWlzc2luZyBzaGFwZSBwYXJhbWV0ZXJcIik7dmFyIHU9dC5nZXRQYXJhbWV0ZXIodC5NQVhfUkVOREVSQlVGRkVSX1NJWkUpO2lmKGU8MHx8ZT51fHxyPDB8fHI+dSl0aHJvdyBuZXcgRXJyb3IoXCJnbC1mYm86IFBhcmFtZXRlcnMgYXJlIHRvbyBsYXJnZSBmb3IgRkJPXCIpO3ZhciBoPTE7aWYoXCJjb2xvclwiaW4obj1ufHx7fSkpe2lmKChoPU1hdGgubWF4KDB8bi5jb2xvciwwKSk8MCl0aHJvdyBuZXcgRXJyb3IoXCJnbC1mYm86IE11c3Qgc3BlY2lmeSBhIG5vbm5lZ2F0aXZlIG51bWJlciBvZiBjb2xvcnNcIik7aWYoaD4xKXtpZighYyl0aHJvdyBuZXcgRXJyb3IoXCJnbC1mYm86IE11bHRpcGxlIGRyYXcgYnVmZmVyIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkXCIpO2lmKGg+dC5nZXRQYXJhbWV0ZXIoYy5NQVhfQ09MT1JfQVRUQUNITUVOVFNfV0VCR0wpKXRocm93IG5ldyBFcnJvcihcImdsLWZibzogQ29udGV4dCBkb2VzIG5vdCBzdXBwb3J0IFwiK2grXCIgZHJhdyBidWZmZXJzXCIpfX12YXIgZj10LlVOU0lHTkVEX0JZVEUscD10LmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0XCIpO2lmKG4uZmxvYXQmJmg+MCl7aWYoIXApdGhyb3cgbmV3IEVycm9yKFwiZ2wtZmJvOiBDb250ZXh0IGRvZXMgbm90IHN1cHBvcnQgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXNcIik7Zj10LkZMT0FUfWVsc2Ugbi5wcmVmZXJGbG9hdCYmaD4wJiZwJiYoZj10LkZMT0FUKTt2YXIgZz0hMDtcImRlcHRoXCJpbiBuJiYoZz0hIW4uZGVwdGgpO3ZhciB2PSExO1wic3RlbmNpbFwiaW4gbiYmKHY9ISFuLnN0ZW5jaWwpO3JldHVybiBuZXcgZCh0LGUscixmLGgsZyx2LGMpfTt2YXIgaSxhLG8scyxsPW51bGw7ZnVuY3Rpb24gYyh0KXtyZXR1cm5bdC5nZXRQYXJhbWV0ZXIodC5GUkFNRUJVRkZFUl9CSU5ESU5HKSx0LmdldFBhcmFtZXRlcih0LlJFTkRFUkJVRkZFUl9CSU5ESU5HKSx0LmdldFBhcmFtZXRlcih0LlRFWFRVUkVfQklORElOR18yRCldfWZ1bmN0aW9uIHUodCxlKXt0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLGVbMF0pLHQuYmluZFJlbmRlcmJ1ZmZlcih0LlJFTkRFUkJVRkZFUixlWzFdKSx0LmJpbmRUZXh0dXJlKHQuVEVYVFVSRV8yRCxlWzJdKX1mdW5jdGlvbiBoKHQpe3N3aXRjaCh0KXtjYXNlIGk6dGhyb3cgbmV3IEVycm9yKFwiZ2wtZmJvOiBGcmFtZWJ1ZmZlciB1bnN1cHBvcnRlZFwiKTtjYXNlIGE6dGhyb3cgbmV3IEVycm9yKFwiZ2wtZmJvOiBGcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIGF0dGFjaG1lbnRcIik7Y2FzZSBvOnRocm93IG5ldyBFcnJvcihcImdsLWZibzogRnJhbWVidWZmZXIgaW5jb21wbGV0ZSBkaW1lbnNpb25zXCIpO2Nhc2Ugczp0aHJvdyBuZXcgRXJyb3IoXCJnbC1mYm86IEZyYW1lYnVmZmVyIGluY29tcGxldGUgbWlzc2luZyBhdHRhY2htZW50XCIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiZ2wtZmJvOiBGcmFtZWJ1ZmZlciBmYWlsZWQgZm9yIHVuc3BlY2lmaWVkIHJlYXNvblwiKX19ZnVuY3Rpb24gZih0LGUscixpLGEsbyl7aWYoIWkpcmV0dXJuIG51bGw7dmFyIHM9bih0LGUscixhLGkpO3JldHVybiBzLm1hZ0ZpbHRlcj10Lk5FQVJFU1Qscy5taW5GaWx0ZXI9dC5ORUFSRVNULHMubWlwU2FtcGxlcz0xLHMuYmluZCgpLHQuZnJhbWVidWZmZXJUZXh0dXJlMkQodC5GUkFNRUJVRkZFUixvLHQuVEVYVFVSRV8yRCxzLmhhbmRsZSwwKSxzfWZ1bmN0aW9uIHAodCxlLHIsbixpKXt2YXIgYT10LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO3JldHVybiB0LmJpbmRSZW5kZXJidWZmZXIodC5SRU5ERVJCVUZGRVIsYSksdC5yZW5kZXJidWZmZXJTdG9yYWdlKHQuUkVOREVSQlVGRkVSLG4sZSxyKSx0LmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHQuRlJBTUVCVUZGRVIsaSx0LlJFTkRFUkJVRkZFUixhKSxhfWZ1bmN0aW9uIGQodCxlLHIsbixpLGEsbyxzKXt0aGlzLmdsPXQsdGhpcy5fc2hhcGU9WzB8ZSwwfHJdLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9leHQ9cyx0aGlzLmNvbG9yPW5ldyBBcnJheShpKTtmb3IodmFyIGQ9MDtkPGk7KytkKXRoaXMuY29sb3JbZF09bnVsbDt0aGlzLl9jb2xvcl9yYj1udWxsLHRoaXMuZGVwdGg9bnVsbCx0aGlzLl9kZXB0aF9yYj1udWxsLHRoaXMuX2NvbG9yVHlwZT1uLHRoaXMuX3VzZURlcHRoPWEsdGhpcy5fdXNlU3RlbmNpbD1vO3ZhciBnPXRoaXMsdj1bMHxlLDB8cl07T2JqZWN0LmRlZmluZVByb3BlcnRpZXModix7MDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuX3NoYXBlWzBdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGcud2lkdGg9dH19LDE6e2dldDpmdW5jdGlvbigpe3JldHVybiBnLl9zaGFwZVsxXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBnLmhlaWdodD10fX19KSx0aGlzLl9zaGFwZVZlY3Rvcj12LGZ1bmN0aW9uKHQpe3ZhciBlPWModC5nbCkscj10LmdsLG49dC5oYW5kbGU9ci5jcmVhdGVGcmFtZWJ1ZmZlcigpLGk9dC5fc2hhcGVbMF0sYT10Ll9zaGFwZVsxXSxvPXQuY29sb3IubGVuZ3RoLHM9dC5fZXh0LGQ9dC5fdXNlU3RlbmNpbCxnPXQuX3VzZURlcHRoLHY9dC5fY29sb3JUeXBlO3IuYmluZEZyYW1lYnVmZmVyKHIuRlJBTUVCVUZGRVIsbik7Zm9yKHZhciBtPTA7bTxvOysrbSl0LmNvbG9yW21dPWYocixpLGEsdixyLlJHQkEsci5DT0xPUl9BVFRBQ0hNRU5UMCttKTswPT09bz8odC5fY29sb3JfcmI9cChyLGksYSxyLlJHQkE0LHIuQ09MT1JfQVRUQUNITUVOVDApLHMmJnMuZHJhd0J1ZmZlcnNXRUJHTChsWzBdKSk6bz4xJiZzLmRyYXdCdWZmZXJzV0VCR0wobFtvXSk7dmFyIHk9ci5nZXRFeHRlbnNpb24oXCJXRUJHTF9kZXB0aF90ZXh0dXJlXCIpO3k/ZD90LmRlcHRoPWYocixpLGEseS5VTlNJR05FRF9JTlRfMjRfOF9XRUJHTCxyLkRFUFRIX1NURU5DSUwsci5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpOmcmJih0LmRlcHRoPWYocixpLGEsci5VTlNJR05FRF9TSE9SVCxyLkRFUFRIX0NPTVBPTkVOVCxyLkRFUFRIX0FUVEFDSE1FTlQpKTpnJiZkP3QuX2RlcHRoX3JiPXAocixpLGEsci5ERVBUSF9TVEVOQ0lMLHIuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKTpnP3QuX2RlcHRoX3JiPXAocixpLGEsci5ERVBUSF9DT01QT05FTlQxNixyLkRFUFRIX0FUVEFDSE1FTlQpOmQmJih0Ll9kZXB0aF9yYj1wKHIsaSxhLHIuU1RFTkNJTF9JTkRFWCxyLlNURU5DSUxfQVRUQUNITUVOVCkpO3ZhciB4PXIuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhyLkZSQU1FQlVGRkVSKTtpZih4IT09ci5GUkFNRUJVRkZFUl9DT01QTEVURSl7Zm9yKHQuX2Rlc3Ryb3llZD0hMCxyLmJpbmRGcmFtZWJ1ZmZlcihyLkZSQU1FQlVGRkVSLG51bGwpLHIuZGVsZXRlRnJhbWVidWZmZXIodC5oYW5kbGUpLHQuaGFuZGxlPW51bGwsdC5kZXB0aCYmKHQuZGVwdGguZGlzcG9zZSgpLHQuZGVwdGg9bnVsbCksdC5fZGVwdGhfcmImJihyLmRlbGV0ZVJlbmRlcmJ1ZmZlcih0Ll9kZXB0aF9yYiksdC5fZGVwdGhfcmI9bnVsbCksbT0wO208dC5jb2xvci5sZW5ndGg7KyttKXQuY29sb3JbbV0uZGlzcG9zZSgpLHQuY29sb3JbbV09bnVsbDt0Ll9jb2xvcl9yYiYmKHIuZGVsZXRlUmVuZGVyYnVmZmVyKHQuX2NvbG9yX3JiKSx0Ll9jb2xvcl9yYj1udWxsKSx1KHIsZSksaCh4KX11KHIsZSl9KHRoaXMpfXZhciBnPWQucHJvdG90eXBlO2Z1bmN0aW9uIHYodCxlLHIpe2lmKHQuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoXCJnbC1mYm86IENhbid0IHJlc2l6ZSBkZXN0cm95ZWQgRkJPXCIpO2lmKHQuX3NoYXBlWzBdIT09ZXx8dC5fc2hhcGVbMV0hPT1yKXt2YXIgbj10LmdsLGk9bi5nZXRQYXJhbWV0ZXIobi5NQVhfUkVOREVSQlVGRkVSX1NJWkUpO2lmKGU8MHx8ZT5pfHxyPDB8fHI+aSl0aHJvdyBuZXcgRXJyb3IoXCJnbC1mYm86IENhbid0IHJlc2l6ZSBGQk8sIGludmFsaWQgZGltZW5zaW9uc1wiKTt0Ll9zaGFwZVswXT1lLHQuX3NoYXBlWzFdPXI7Zm9yKHZhciBhPWMobiksbz0wO288dC5jb2xvci5sZW5ndGg7KytvKXQuY29sb3Jbb10uc2hhcGU9dC5fc2hhcGU7dC5fY29sb3JfcmImJihuLmJpbmRSZW5kZXJidWZmZXIobi5SRU5ERVJCVUZGRVIsdC5fY29sb3JfcmIpLG4ucmVuZGVyYnVmZmVyU3RvcmFnZShuLlJFTkRFUkJVRkZFUixuLlJHQkE0LHQuX3NoYXBlWzBdLHQuX3NoYXBlWzFdKSksdC5kZXB0aCYmKHQuZGVwdGguc2hhcGU9dC5fc2hhcGUpLHQuX2RlcHRoX3JiJiYobi5iaW5kUmVuZGVyYnVmZmVyKG4uUkVOREVSQlVGRkVSLHQuX2RlcHRoX3JiKSx0Ll91c2VEZXB0aCYmdC5fdXNlU3RlbmNpbD9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2Uobi5SRU5ERVJCVUZGRVIsbi5ERVBUSF9TVEVOQ0lMLHQuX3NoYXBlWzBdLHQuX3NoYXBlWzFdKTp0Ll91c2VEZXB0aD9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2Uobi5SRU5ERVJCVUZGRVIsbi5ERVBUSF9DT01QT05FTlQxNix0Ll9zaGFwZVswXSx0Ll9zaGFwZVsxXSk6dC5fdXNlU3RlbmNpbCYmbi5yZW5kZXJidWZmZXJTdG9yYWdlKG4uUkVOREVSQlVGRkVSLG4uU1RFTkNJTF9JTkRFWCx0Ll9zaGFwZVswXSx0Ll9zaGFwZVsxXSkpLG4uYmluZEZyYW1lYnVmZmVyKG4uRlJBTUVCVUZGRVIsdC5oYW5kbGUpO3ZhciBzPW4uY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhuLkZSQU1FQlVGRkVSKTtzIT09bi5GUkFNRUJVRkZFUl9DT01QTEVURSYmKHQuZGlzcG9zZSgpLHUobixhKSxoKHMpKSx1KG4sYSl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGcse3NoYXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkP1swLDBdOnRoaXMuX3NoYXBlVmVjdG9yfSxzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHQ9WzB8dCwwfHRdKSwyIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiZ2wtZmJvOiBTaGFwZSB2ZWN0b3IgbXVzdCBiZSBsZW5ndGggMlwiKTt2YXIgZT0wfHRbMF0scj0wfHRbMV07cmV0dXJuIHYodGhpcyxlLHIpLFtlLHJdfSxlbnVtZXJhYmxlOiExfSx3aWR0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZD8wOnRoaXMuX3NoYXBlWzBdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHYodGhpcyx0fD0wLHRoaXMuX3NoYXBlWzFdKSx0fSxlbnVtZXJhYmxlOiExfSxoZWlnaHQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZXN0cm95ZWQ/MDp0aGlzLl9zaGFwZVsxXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0fD0wLHYodGhpcyx0aGlzLl9zaGFwZVswXSx0KSx0fSxlbnVtZXJhYmxlOiExfX0pLGcuYmluZD1mdW5jdGlvbigpe2lmKCF0aGlzLl9kZXN0cm95ZWQpe3ZhciB0PXRoaXMuZ2w7dC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUix0aGlzLmhhbmRsZSksdC52aWV3cG9ydCgwLDAsdGhpcy5fc2hhcGVbMF0sdGhpcy5fc2hhcGVbMV0pfX0sZy5kaXNwb3NlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2Rlc3Ryb3llZCl7dGhpcy5fZGVzdHJveWVkPSEwO3ZhciB0PXRoaXMuZ2w7dC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmhhbmRsZSksdGhpcy5oYW5kbGU9bnVsbCx0aGlzLmRlcHRoJiYodGhpcy5kZXB0aC5kaXNwb3NlKCksdGhpcy5kZXB0aD1udWxsKSx0aGlzLl9kZXB0aF9yYiYmKHQuZGVsZXRlUmVuZGVyYnVmZmVyKHRoaXMuX2RlcHRoX3JiKSx0aGlzLl9kZXB0aF9yYj1udWxsKTtmb3IodmFyIGU9MDtlPHRoaXMuY29sb3IubGVuZ3RoOysrZSl0aGlzLmNvbG9yW2VdLmRpc3Bvc2UoKSx0aGlzLmNvbG9yW2VdPW51bGw7dGhpcy5fY29sb3JfcmImJih0LmRlbGV0ZVJlbmRlcmJ1ZmZlcih0aGlzLl9jb2xvcl9yYiksdGhpcy5fY29sb3JfcmI9bnVsbCl9fX0se1wiZ2wtdGV4dHVyZTJkXCI6MzE1fV0sMjQ3OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcInNwcmludGYtanNcIikuc3ByaW50ZixpPXQoXCJnbC1jb25zdGFudHMvbG9va3VwXCIpLGE9dChcImdsc2wtc2hhZGVyLW5hbWVcIiksbz10KFwiYWRkLWxpbmUtbnVtYmVyc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBzPWEoZSl8fFwib2YgdW5rbm93biBuYW1lIChzZWUgbnBtIGdsc2wtc2hhZGVyLW5hbWUpXCIsbD1cInVua25vd24gdHlwZVwiO3ZvaWQgMCE9PXImJihsPXI9PT1pLkZSQUdNRU5UX1NIQURFUj9cImZyYWdtZW50XCI6XCJ2ZXJ0ZXhcIik7Zm9yKHZhciBjPW4oXCJFcnJvciBjb21waWxpbmcgJXMgc2hhZGVyICVzOlxcblwiLGwscyksdT1uKFwiJXMlc1wiLGMsdCksaD10LnNwbGl0KFwiXFxuXCIpLGY9e30scD0wO3A8aC5sZW5ndGg7cCsrKXt2YXIgZD1oW3BdO2lmKFwiXCIhPT1kJiZcIlxcMFwiIT09ZCl7dmFyIGc9cGFyc2VJbnQoZC5zcGxpdChcIjpcIilbMl0pO2lmKGlzTmFOKGcpKXRocm93IG5ldyBFcnJvcihuKFwiQ291bGQgbm90IHBhcnNlIGVycm9yOiAlc1wiLGQpKTtmW2ddPWR9fWZvcih2YXIgdj1vKGUpLnNwbGl0KFwiXFxuXCIpLHA9MDtwPHYubGVuZ3RoO3ArKylpZihmW3ArM118fGZbcCsyXXx8ZltwKzFdKXt2YXIgbT12W3BdO2lmKGMrPW0rXCJcXG5cIixmW3ArMV0pe3ZhciB5PWZbcCsxXTt5PXkuc3Vic3RyKHkuc3BsaXQoXCI6XCIsMykuam9pbihcIjpcIikubGVuZ3RoKzEpLnRyaW0oKSxjKz1uKFwiXl5eICVzXFxuXFxuXCIseSl9fXJldHVybntsb25nOmMudHJpbSgpLHNob3J0OnUudHJpbSgpfX19LHtcImFkZC1saW5lLW51bWJlcnNcIjo1MixcImdsLWNvbnN0YW50cy9sb29rdXBcIjoyNDMsXCJnbHNsLXNoYWRlci1uYW1lXCI6Mzk0LFwic3ByaW50Zi1qc1wiOjUxM31dLDI0ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2wsbj1vKHIsbC52ZXJ0ZXgsbC5mcmFnbWVudCksaT1vKHIsbC5waWNrVmVydGV4LGwucGlja0ZyYWdtZW50KSxhPXMociksdT1zKHIpLGg9cyhyKSxmPXMocikscD1uZXcgYyh0LG4saSxhLHUsaCxmKTtyZXR1cm4gcC51cGRhdGUoZSksdC5hZGRPYmplY3QocCkscH07dmFyIG49dChcImJpbmFyeS1zZWFyY2gtYm91bmRzXCIpLGk9dChcImlvdGEtYXJyYXlcIiksYT10KFwidHlwZWRhcnJheS1wb29sXCIpLG89dChcImdsLXNoYWRlclwiKSxzPXQoXCJnbC1idWZmZXJcIiksbD10KFwiLi9saWIvc2hhZGVyc1wiKTtmdW5jdGlvbiBjKHQsZSxyLG4saSxhLG8pe3RoaXMucGxvdD10LHRoaXMuc2hhZGVyPWUsdGhpcy5waWNrU2hhZGVyPXIsdGhpcy5wb3NpdGlvbkJ1ZmZlcj1uLHRoaXMud2VpZ2h0QnVmZmVyPWksdGhpcy5jb2xvckJ1ZmZlcj1hLHRoaXMuaWRCdWZmZXI9byx0aGlzLnhEYXRhPVtdLHRoaXMueURhdGE9W10sdGhpcy5zaGFwZT1bMCwwXSx0aGlzLmJvdW5kcz1bMS8wLDEvMCwtMS8wLC0xLzBdLHRoaXMucGlja09mZnNldD0wfXZhciB1LGg9Yy5wcm90b3R5cGUsZj1bMCwwLDEsMCwwLDEsMSwwLDEsMSwwLDFdO2guZHJhdz0odT1bMSwwLDAsMCwxLDAsMCwwLDFdLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wbG90LGU9dGhpcy5zaGFkZXIscj10aGlzLmJvdW5kcyxuPXRoaXMubnVtVmVydGljZXM7aWYoIShuPD0wKSl7dmFyIGk9dC5nbCxhPXQuZGF0YUJveCxvPXJbMl0tclswXSxzPXJbM10tclsxXSxsPWFbMl0tYVswXSxjPWFbM10tYVsxXTt1WzBdPTIqby9sLHVbNF09MipzL2MsdVs2XT0yKihyWzBdLWFbMF0pL2wtMSx1WzddPTIqKHJbMV0tYVsxXSkvYy0xLGUuYmluZCgpO3ZhciBoPWUudW5pZm9ybXM7aC52aWV3VHJhbnNmb3JtPXUsaC5zaGFwZT10aGlzLnNoYXBlO3ZhciBmPWUuYXR0cmlidXRlczt0aGlzLnBvc2l0aW9uQnVmZmVyLmJpbmQoKSxmLnBvc2l0aW9uLnBvaW50ZXIoKSx0aGlzLndlaWdodEJ1ZmZlci5iaW5kKCksZi53ZWlnaHQucG9pbnRlcihpLlVOU0lHTkVEX0JZVEUsITEpLHRoaXMuY29sb3JCdWZmZXIuYmluZCgpLGYuY29sb3IucG9pbnRlcihpLlVOU0lHTkVEX0JZVEUsITApLGkuZHJhd0FycmF5cyhpLlRSSUFOR0xFUywwLG4pfX0pLGguZHJhd1BpY2s9ZnVuY3Rpb24oKXt2YXIgdD1bMSwwLDAsMCwxLDAsMCwwLDFdLGU9WzAsMCwwLDBdO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj10aGlzLnBsb3QsaT10aGlzLnBpY2tTaGFkZXIsYT10aGlzLmJvdW5kcyxvPXRoaXMubnVtVmVydGljZXM7aWYoIShvPD0wKSl7dmFyIHM9bi5nbCxsPW4uZGF0YUJveCxjPWFbMl0tYVswXSx1PWFbM10tYVsxXSxoPWxbMl0tbFswXSxmPWxbM10tbFsxXTt0WzBdPTIqYy9oLHRbNF09Mip1L2YsdFs2XT0yKihhWzBdLWxbMF0pL2gtMSx0WzddPTIqKGFbMV0tbFsxXSkvZi0xO2Zvcih2YXIgcD0wO3A8NDsrK3ApZVtwXT1yPj44KnAmMjU1O3RoaXMucGlja09mZnNldD1yLGkuYmluZCgpO3ZhciBkPWkudW5pZm9ybXM7ZC52aWV3VHJhbnNmb3JtPXQsZC5waWNrT2Zmc2V0PWUsZC5zaGFwZT10aGlzLnNoYXBlO3ZhciBnPWkuYXR0cmlidXRlcztyZXR1cm4gdGhpcy5wb3NpdGlvbkJ1ZmZlci5iaW5kKCksZy5wb3NpdGlvbi5wb2ludGVyKCksdGhpcy53ZWlnaHRCdWZmZXIuYmluZCgpLGcud2VpZ2h0LnBvaW50ZXIocy5VTlNJR05FRF9CWVRFLCExKSx0aGlzLmlkQnVmZmVyLmJpbmQoKSxnLnBpY2tJZC5wb2ludGVyKHMuVU5TSUdORURfQllURSwhMSkscy5kcmF3QXJyYXlzKHMuVFJJQU5HTEVTLDAsbykscit0aGlzLnNoYXBlWzBdKnRoaXMuc2hhcGVbMV19fX0oKSxoLnBpY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMucGlja09mZnNldCxpPXRoaXMuc2hhcGVbMF0qdGhpcy5zaGFwZVsxXTtpZihyPG58fHI+PW4raSlyZXR1cm4gbnVsbDt2YXIgYT1yLW4sbz10aGlzLnhEYXRhLHM9dGhpcy55RGF0YTtyZXR1cm57b2JqZWN0OnRoaXMscG9pbnRJZDphLGRhdGFDb29yZDpbb1thJXRoaXMuc2hhcGVbMF1dLHNbYS90aGlzLnNoYXBlWzBdfDBdXX19LGgudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PXR8fHt9KS5zaGFwZXx8WzAsMF0scj10Lnh8fGkoZVswXSksbz10Lnl8fGkoZVsxXSkscz10Lnp8fG5ldyBGbG9hdDMyQXJyYXkoZVswXSplWzFdKTt0aGlzLnhEYXRhPXIsdGhpcy55RGF0YT1vO3ZhciBsPXQuY29sb3JMZXZlbHN8fFswXSxjPXQuY29sb3JWYWx1ZXN8fFswLDAsMCwxXSx1PWwubGVuZ3RoLGg9dGhpcy5ib3VuZHMscD1oWzBdPXJbMF0sZD1oWzFdPW9bMF0sZz0xLygoaFsyXT1yW3IubGVuZ3RoLTFdKS1wKSx2PTEvKChoWzNdPW9bby5sZW5ndGgtMV0pLWQpLG09ZVswXSx5PWVbMV07dGhpcy5zaGFwZT1bbSx5XTt2YXIgeD0obS0xKSooeS0xKSooZi5sZW5ndGg+Pj4xKTt0aGlzLm51bVZlcnRpY2VzPXg7Zm9yKHZhciBiPWEubWFsbG9jVWludDgoNCp4KSxfPWEubWFsbG9jRmxvYXQzMigyKngpLHc9YS5tYWxsb2NVaW50OCgyKngpLGs9YS5tYWxsb2NVaW50MzIoeCksQT0wLFQ9MDtUPHktMTsrK1QpZm9yKHZhciBNPXYqKG9bVF0tZCksUz12KihvW1QrMV0tZCksRT0wO0U8bS0xOysrRSlmb3IodmFyIEM9ZyoocltFXS1wKSxMPWcqKHJbRSsxXS1wKSx6PTA7ejxmLmxlbmd0aDt6Kz0yKXt2YXIgTyxJLEQsUCxSPWZbel0sRj1mW3orMV0sQj1zWyhUK0YpKm0rKEUrUildLE49bi5sZShsLEIpO2lmKE48MClPPWNbMF0sST1jWzFdLEQ9Y1syXSxQPWNbM107ZWxzZSBpZihOPT09dS0xKU89Y1s0KnUtNF0sST1jWzQqdS0zXSxEPWNbNCp1LTJdLFA9Y1s0KnUtMV07ZWxzZXt2YXIgaj0oQi1sW05dKS8obFtOKzFdLWxbTl0pLFY9MS1qLFU9NCpOLHE9NCooTisxKTtPPVYqY1tVXStqKmNbcV0sST1WKmNbVSsxXStqKmNbcSsxXSxEPVYqY1tVKzJdK2oqY1txKzJdLFA9VipjW1UrM10raipjW3ErM119Yls0KkFdPTI1NSpPLGJbNCpBKzFdPTI1NSpJLGJbNCpBKzJdPTI1NSpELGJbNCpBKzNdPTI1NSpQLF9bMipBXT0uNSpDKy41KkwsX1syKkErMV09LjUqTSsuNSpTLHdbMipBXT1SLHdbMipBKzFdPUYsa1tBXT1UKm0rRSxBKz0xfXRoaXMucG9zaXRpb25CdWZmZXIudXBkYXRlKF8pLHRoaXMud2VpZ2h0QnVmZmVyLnVwZGF0ZSh3KSx0aGlzLmNvbG9yQnVmZmVyLnVwZGF0ZShiKSx0aGlzLmlkQnVmZmVyLnVwZGF0ZShrKSxhLmZyZWUoXyksYS5mcmVlKGIpLGEuZnJlZSh3KSxhLmZyZWUoayl9LGguZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMucG9zaXRpb25CdWZmZXIuZGlzcG9zZSgpLHRoaXMud2VpZ2h0QnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmNvbG9yQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmlkQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnBsb3QucmVtb3ZlT2JqZWN0KHRoaXMpfX0se1wiLi9saWIvc2hhZGVyc1wiOjI0OSxcImJpbmFyeS1zZWFyY2gtYm91bmRzXCI6MjUwLFwiZ2wtYnVmZmVyXCI6MjM4LFwiZ2wtc2hhZGVyXCI6Mjk4LFwiaW90YS1hcnJheVwiOjQwOSxcInR5cGVkYXJyYXktcG9vbFwiOjUzMH1dLDI0OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbHNsaWZ5XCIpO2UuZXhwb3J0cz17ZnJhZ21lbnQ6bihbXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxudm9pZCBtYWluKCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChmcmFnQ29sb3IucmdiICogZnJhZ0NvbG9yLmEsIGZyYWdDb2xvci5hKTtcXG59XFxuXCJdKSx2ZXJ0ZXg6bihbXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xcbmF0dHJpYnV0ZSB2ZWMyIHdlaWdodDtcXG5cXG51bmlmb3JtIHZlYzIgc2hhcGU7XFxudW5pZm9ybSBtYXQzIHZpZXdUcmFuc2Zvcm07XFxuXFxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWMzIHZQb3NpdGlvbiA9IHZpZXdUcmFuc2Zvcm0gKiB2ZWMzKCBwb3NpdGlvbiArICh3ZWlnaHQtLjUpLyhzaGFwZS0xLikgLCAxLjApO1xcbiAgZnJhZ0NvbG9yID0gY29sb3I7XFxuICBnbF9Qb3NpdGlvbiA9IHZlYzQodlBvc2l0aW9uLnh5LCAwLCB2UG9zaXRpb24ueik7XFxufVxcblwiXSkscGlja0ZyYWdtZW50Om4oW1wicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0lkO1xcbnZhcnlpbmcgdmVjMiB2V2VpZ2h0O1xcblxcbnVuaWZvcm0gdmVjMiBzaGFwZTtcXG51bmlmb3JtIHZlYzQgcGlja09mZnNldDtcXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWMyIGQgPSBzdGVwKC41LCB2V2VpZ2h0KTtcXG4gIHZlYzQgaWQgPSBmcmFnSWQgKyBwaWNrT2Zmc2V0O1xcbiAgaWQueCArPSBkLnggKyBkLnkqc2hhcGUueDtcXG5cXG4gIGlkLnkgKz0gZmxvb3IoaWQueCAvIDI1Ni4wKTtcXG4gIGlkLnggLT0gZmxvb3IoaWQueCAvIDI1Ni4wKSAqIDI1Ni4wO1xcblxcbiAgaWQueiArPSBmbG9vcihpZC55IC8gMjU2LjApO1xcbiAgaWQueSAtPSBmbG9vcihpZC55IC8gMjU2LjApICogMjU2LjA7XFxuXFxuICBpZC53ICs9IGZsb29yKGlkLnogLyAyNTYuMCk7XFxuICBpZC56IC09IGZsb29yKGlkLnogLyAyNTYuMCkgKiAyNTYuMDtcXG5cXG4gIGdsX0ZyYWdDb2xvciA9IGlkLzI1NS47XFxufVxcblwiXSkscGlja1ZlcnRleDpuKFtcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzQgcGlja0lkO1xcbmF0dHJpYnV0ZSB2ZWMyIHdlaWdodDtcXG5cXG51bmlmb3JtIHZlYzIgc2hhcGU7XFxudW5pZm9ybSBtYXQzIHZpZXdUcmFuc2Zvcm07XFxuXFxudmFyeWluZyB2ZWM0IGZyYWdJZDtcXG52YXJ5aW5nIHZlYzIgdldlaWdodDtcXG5cXG52b2lkIG1haW4oKSB7XFxuICB2V2VpZ2h0ID0gd2VpZ2h0O1xcblxcbiAgZnJhZ0lkID0gcGlja0lkO1xcblxcbiAgdmVjMyB2UG9zaXRpb24gPSB2aWV3VHJhbnNmb3JtICogdmVjMyggcG9zaXRpb24gKyAod2VpZ2h0LS41KS8oc2hhcGUtMS4pICwgMS4wKTtcXG4gIGdsX1Bvc2l0aW9uID0gdmVjNCh2UG9zaXRpb24ueHksIDAsIHZQb3NpdGlvbi56KTtcXG59XFxuXCJdKX19LHtnbHNsaWZ5OjQwMn1dLDI1MDpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsxMDJdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoxMDJ9XSwyNTE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiZ2xzbGlmeVwiKSxpPXQoXCJnbC1zaGFkZXJcIiksYT1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uLCBuZXh0UG9zaXRpb247XFxuYXR0cmlidXRlIGZsb2F0IGFyY0xlbmd0aCwgbGluZVdpZHRoO1xcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xcblxcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaGFwZTtcXG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW87XFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxudmFyeWluZyB2ZWMzIHdvcmxkUG9zaXRpb247XFxudmFyeWluZyBmbG9hdCBwaXhlbEFyY0xlbmd0aDtcXG5cXG52ZWM0IHByb2plY3QodmVjMyBwKSB7XFxuICByZXR1cm4gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocCwgMS4wKTtcXG59XFxuXFxudm9pZCBtYWluKCkge1xcbiAgdmVjNCBzdGFydFBvaW50ID0gcHJvamVjdChwb3NpdGlvbik7XFxuICB2ZWM0IGVuZFBvaW50ICAgPSBwcm9qZWN0KG5leHRQb3NpdGlvbik7XFxuXFxuICB2ZWMyIEEgPSBzdGFydFBvaW50Lnh5IC8gc3RhcnRQb2ludC53O1xcbiAgdmVjMiBCID0gICBlbmRQb2ludC54eSAvICAgZW5kUG9pbnQudztcXG5cXG4gIGZsb2F0IGNsaXBBbmdsZSA9IGF0YW4oXFxuICAgIChCLnkgLSBBLnkpICogc2NyZWVuU2hhcGUueSxcXG4gICAgKEIueCAtIEEueCkgKiBzY3JlZW5TaGFwZS54XFxuICApO1xcblxcbiAgdmVjMiBvZmZzZXQgPSAwLjUgKiBwaXhlbFJhdGlvICogbGluZVdpZHRoICogdmVjMihcXG4gICAgc2luKGNsaXBBbmdsZSksXFxuICAgIC1jb3MoY2xpcEFuZ2xlKVxcbiAgKSAvIHNjcmVlblNoYXBlO1xcblxcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHN0YXJ0UG9pbnQueHkgKyBzdGFydFBvaW50LncgKiBvZmZzZXQsIHN0YXJ0UG9pbnQuencpO1xcblxcbiAgd29ybGRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiAgcGl4ZWxBcmNMZW5ndGggPSBhcmNMZW5ndGg7XFxuICBmcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCJdKSxvPW4oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcXG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XFxuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcXG59XFxuXFxudW5pZm9ybSB2ZWMzICAgICAgY2xpcEJvdW5kc1syXTtcXG51bmlmb3JtIHNhbXBsZXIyRCBkYXNoVGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0ICAgICBkYXNoU2NhbGU7XFxudW5pZm9ybSBmbG9hdCAgICAgb3BhY2l0eTtcXG5cXG52YXJ5aW5nIHZlYzMgICAgd29ybGRQb3NpdGlvbjtcXG52YXJ5aW5nIGZsb2F0ICAgcGl4ZWxBcmNMZW5ndGg7XFxudmFyeWluZyB2ZWM0ICAgIGZyYWdDb2xvcjtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBpZiAoXFxuICAgIG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgd29ybGRQb3NpdGlvbikgfHxcXG4gICAgZnJhZ0NvbG9yLmEgKiBvcGFjaXR5ID09IDAuXFxuICApIGRpc2NhcmQ7XFxuXFxuICBmbG9hdCBkYXNoV2VpZ2h0ID0gdGV4dHVyZTJEKGRhc2hUZXh0dXJlLCB2ZWMyKGRhc2hTY2FsZSAqIHBpeGVsQXJjTGVuZ3RoLCAwKSkucjtcXG4gIGlmKGRhc2hXZWlnaHQgPCAwLjUpIHtcXG4gICAgZGlzY2FyZDtcXG4gIH1cXG4gIGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvciAqIG9wYWNpdHk7XFxufVxcblwiXSkscz1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbiNkZWZpbmUgRkxPQVRfTUFYICAxLjcwMTQxMTg0ZTM4XFxuI2RlZmluZSBGTE9BVF9NSU4gIDEuMTc1NDk0MzVlLTM4XFxuXFxubG93cCB2ZWM0IGVuY29kZV9mbG9hdF8xNjA0MTUwNTU5KGhpZ2hwIGZsb2F0IHYpIHtcXG4gIGhpZ2hwIGZsb2F0IGF2ID0gYWJzKHYpO1xcblxcbiAgLy9IYW5kbGUgc3BlY2lhbCBjYXNlc1xcbiAgaWYoYXYgPCBGTE9BVF9NSU4pIHtcXG4gICAgcmV0dXJuIHZlYzQoMC4wLCAwLjAsIDAuMCwgMC4wKTtcXG4gIH0gZWxzZSBpZih2ID4gRkxPQVRfTUFYKSB7XFxuICAgIHJldHVybiB2ZWM0KDEyNy4wLCAxMjguMCwgMC4wLCAwLjApIC8gMjU1LjA7XFxuICB9IGVsc2UgaWYodiA8IC1GTE9BVF9NQVgpIHtcXG4gICAgcmV0dXJuIHZlYzQoMjU1LjAsIDEyOC4wLCAwLjAsIDAuMCkgLyAyNTUuMDtcXG4gIH1cXG5cXG4gIGhpZ2hwIHZlYzQgYyA9IHZlYzQoMCwwLDAsMCk7XFxuXFxuICAvL0NvbXB1dGUgZXhwb25lbnQgYW5kIG1hbnRpc3NhXFxuICBoaWdocCBmbG9hdCBlID0gZmxvb3IobG9nMihhdikpO1xcbiAgaGlnaHAgZmxvYXQgbSA9IGF2ICogcG93KDIuMCwgLWUpIC0gMS4wO1xcbiAgXFxuICAvL1VucGFjayBtYW50aXNzYVxcbiAgY1sxXSA9IGZsb29yKDEyOC4wICogbSk7XFxuICBtIC09IGNbMV0gLyAxMjguMDtcXG4gIGNbMl0gPSBmbG9vcigzMjc2OC4wICogbSk7XFxuICBtIC09IGNbMl0gLyAzMjc2OC4wO1xcbiAgY1szXSA9IGZsb29yKDgzODg2MDguMCAqIG0pO1xcbiAgXFxuICAvL1VucGFjayBleHBvbmVudFxcbiAgaGlnaHAgZmxvYXQgZWJpYXMgPSBlICsgMTI3LjA7XFxuICBjWzBdID0gZmxvb3IoZWJpYXMgLyAyLjApO1xcbiAgZWJpYXMgLT0gY1swXSAqIDIuMDtcXG4gIGNbMV0gKz0gZmxvb3IoZWJpYXMpICogMTI4LjA7IFxcblxcbiAgLy9VbnBhY2sgc2lnbiBiaXRcXG4gIGNbMF0gKz0gMTI4LjAgKiBzdGVwKDAuMCwgLXYpO1xcblxcbiAgLy9TY2FsZSBiYWNrIHRvIHJhbmdlXFxuICByZXR1cm4gYyAvIDI1NS4wO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcXG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xcbn1cXG5cXG51bmlmb3JtIGZsb2F0IHBpY2tJZDtcXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcXG5cXG52YXJ5aW5nIHZlYzMgd29ybGRQb3NpdGlvbjtcXG52YXJ5aW5nIGZsb2F0IHBpeGVsQXJjTGVuZ3RoO1xcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgd29ybGRQb3NpdGlvbikpIGRpc2NhcmQ7XFxuXFxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZC8yNTUuMCwgZW5jb2RlX2Zsb2F0XzE2MDQxNTA1NTkocGl4ZWxBcmNMZW5ndGgpLnh5eik7XFxufVwiXSksbD1be25hbWU6XCJwb3NpdGlvblwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwibmV4dFBvc2l0aW9uXCIsdHlwZTpcInZlYzNcIn0se25hbWU6XCJhcmNMZW5ndGhcIix0eXBlOlwiZmxvYXRcIn0se25hbWU6XCJsaW5lV2lkdGhcIix0eXBlOlwiZmxvYXRcIn0se25hbWU6XCJjb2xvclwiLHR5cGU6XCJ2ZWM0XCJ9XTtyLmNyZWF0ZVNoYWRlcj1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLGwpfSxyLmNyZWF0ZVBpY2tTaGFkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxhLHMsbnVsbCxsKX19LHtcImdsLXNoYWRlclwiOjI5OCxnbHNsaWZ5OjQwMn1dLDI1MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsfHx0LnNjZW5lJiZ0LnNjZW5lLmdsLHI9dShlKTtyLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxyLmF0dHJpYnV0ZXMubmV4dFBvc2l0aW9uLmxvY2F0aW9uPTEsci5hdHRyaWJ1dGVzLmFyY0xlbmd0aC5sb2NhdGlvbj0yLHIuYXR0cmlidXRlcy5saW5lV2lkdGgubG9jYXRpb249MyxyLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249NDt2YXIgbz1oKGUpO28uYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLG8uYXR0cmlidXRlcy5uZXh0UG9zaXRpb24ubG9jYXRpb249MSxvLmF0dHJpYnV0ZXMuYXJjTGVuZ3RoLmxvY2F0aW9uPTIsby5hdHRyaWJ1dGVzLmxpbmVXaWR0aC5sb2NhdGlvbj0zLG8uYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj00O2Zvcih2YXIgcz1uKGUpLGM9aShlLFt7YnVmZmVyOnMsc2l6ZTozLG9mZnNldDowLHN0cmlkZTo0OH0se2J1ZmZlcjpzLHNpemU6MyxvZmZzZXQ6MTIsc3RyaWRlOjQ4fSx7YnVmZmVyOnMsc2l6ZToxLG9mZnNldDoyNCxzdHJpZGU6NDh9LHtidWZmZXI6cyxzaXplOjEsb2Zmc2V0OjI4LHN0cmlkZTo0OH0se2J1ZmZlcjpzLHNpemU6NCxvZmZzZXQ6MzIsc3RyaWRlOjQ4fV0pLGY9bChuZXcgQXJyYXkoMTAyNCksWzI1NiwxLDRdKSxwPTA7cDwxMDI0OysrcClmLmRhdGFbcF09MjU1O3ZhciBkPWEoZSxmKTtkLndyYXA9ZS5SRVBFQVQ7dmFyIGc9bmV3IHYoZSxyLG8scyxjLGQpO3JldHVybiBnLnVwZGF0ZSh0KSxnfTt2YXIgbj10KFwiZ2wtYnVmZmVyXCIpLGk9dChcImdsLXZhb1wiKSxhPXQoXCJnbC10ZXh0dXJlMmRcIiksbz10KFwiZ2xzbC1yZWFkLWZsb2F0XCIpLHM9dChcImJpbmFyeS1zZWFyY2gtYm91bmRzXCIpLGw9dChcIm5kYXJyYXlcIiksYz10KFwiLi9saWIvc2hhZGVyc1wiKSx1PWMuY3JlYXRlU2hhZGVyLGg9Yy5jcmVhdGVQaWNrU2hhZGVyLGY9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIHAodCxlKXtmb3IodmFyIHI9MCxuPTA7bjwzOysrbil7dmFyIGk9dFtuXS1lW25dO3IrPWkqaX1yZXR1cm4gTWF0aC5zcXJ0KHIpfWZ1bmN0aW9uIGQodCl7Zm9yKHZhciBlPVtbLTFlNiwtMWU2LC0xZTZdLFsxZTYsMWU2LDFlNl1dLHI9MDtyPDM7KytyKWVbMF1bcl09TWF0aC5tYXgodFswXVtyXSxlWzBdW3JdKSxlWzFdW3JdPU1hdGgubWluKHRbMV1bcl0sZVsxXVtyXSk7cmV0dXJuIGV9ZnVuY3Rpb24gZyh0LGUscixuKXt0aGlzLmFyY0xlbmd0aD10LHRoaXMucG9zaXRpb249ZSx0aGlzLmluZGV4PXIsdGhpcy5kYXRhQ29vcmRpbmF0ZT1ufWZ1bmN0aW9uIHYodCxlLHIsbixpLGEpe3RoaXMuZ2w9dCx0aGlzLnNoYWRlcj1lLHRoaXMucGlja1NoYWRlcj1yLHRoaXMuYnVmZmVyPW4sdGhpcy52YW89aSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5wb2ludHM9W10sdGhpcy5hcmNMZW5ndGg9W10sdGhpcy52ZXJ0ZXhDb3VudD0wLHRoaXMuYm91bmRzPVtbMCwwLDBdLFswLDAsMF1dLHRoaXMucGlja0lkPTAsdGhpcy5saW5lV2lkdGg9MSx0aGlzLnRleHR1cmU9YSx0aGlzLmRhc2hTY2FsZT0xLHRoaXMub3BhY2l0eT0xLHRoaXMuaGFzQWxwaGE9ITEsdGhpcy5kaXJ0eT0hMCx0aGlzLnBpeGVsUmF0aW89MX12YXIgbT12LnByb3RvdHlwZTttLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBbHBoYX0sbS5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLmhhc0FscGhhfSxtLnBpY2tTbG90cz0xLG0uc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH0sbS5kcmF3VHJhbnNwYXJlbnQ9bS5kcmF3PWZ1bmN0aW9uKHQpe2lmKHRoaXMudmVydGV4Q291bnQpe3ZhciBlPXRoaXMuZ2wscj10aGlzLnNoYWRlcixuPXRoaXMudmFvO3IuYmluZCgpLHIudW5pZm9ybXM9e21vZGVsOnQubW9kZWx8fGYsdmlldzp0LnZpZXd8fGYscHJvamVjdGlvbjp0LnByb2plY3Rpb258fGYsY2xpcEJvdW5kczpkKHRoaXMuY2xpcEJvdW5kcyksZGFzaFRleHR1cmU6dGhpcy50ZXh0dXJlLmJpbmQoKSxkYXNoU2NhbGU6dGhpcy5kYXNoU2NhbGUvdGhpcy5hcmNMZW5ndGhbdGhpcy5hcmNMZW5ndGgubGVuZ3RoLTFdLG9wYWNpdHk6dGhpcy5vcGFjaXR5LHNjcmVlblNoYXBlOltlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdLHBpeGVsUmF0aW86dGhpcy5waXhlbFJhdGlvfSxuLmJpbmQoKSxuLmRyYXcoZS5UUklBTkdMRV9TVFJJUCx0aGlzLnZlcnRleENvdW50KSxuLnVuYmluZCgpfX0sbS5kcmF3UGljaz1mdW5jdGlvbih0KXtpZih0aGlzLnZlcnRleENvdW50KXt2YXIgZT10aGlzLmdsLHI9dGhpcy5waWNrU2hhZGVyLG49dGhpcy52YW87ci5iaW5kKCksci51bmlmb3Jtcz17bW9kZWw6dC5tb2RlbHx8Zix2aWV3OnQudmlld3x8Zixwcm9qZWN0aW9uOnQucHJvamVjdGlvbnx8ZixwaWNrSWQ6dGhpcy5waWNrSWQsY2xpcEJvdW5kczpkKHRoaXMuY2xpcEJvdW5kcyksc2NyZWVuU2hhcGU6W2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF0scGl4ZWxSYXRpbzp0aGlzLnBpeGVsUmF0aW99LG4uYmluZCgpLG4uZHJhdyhlLlRSSUFOR0xFX1NUUklQLHRoaXMudmVydGV4Q291bnQpLG4udW5iaW5kKCl9fSxtLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyO3RoaXMuZGlydHk9ITA7dmFyIG49ISF0LmNvbm5lY3RHYXBzO1wiZGFzaFNjYWxlXCJpbiB0JiYodGhpcy5kYXNoU2NhbGU9dC5kYXNoU2NhbGUpLHRoaXMuaGFzQWxwaGE9ITEsXCJvcGFjaXR5XCJpbiB0JiYodGhpcy5vcGFjaXR5PSt0Lm9wYWNpdHksdGhpcy5vcGFjaXR5PDEmJih0aGlzLmhhc0FscGhhPSEwKSk7dmFyIGk9W10sYT1bXSxvPVtdLGM9MCx1PTAsaD1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSxmPXQucG9zaXRpb258fHQucG9zaXRpb25zO2lmKGYpe3ZhciBkPXQuY29sb3J8fHQuY29sb3JzfHxbMCwwLDAsMV0sZz10LmxpbmVXaWR0aHx8MSx2PSExO3Q6Zm9yKGU9MTtlPGYubGVuZ3RoOysrZSl7dmFyIG0seSx4LGI9ZltlLTFdLF89ZltlXTtmb3IoYS5wdXNoKGMpLG8ucHVzaChiLnNsaWNlKCkpLHI9MDtyPDM7KytyKXtpZihpc05hTihiW3JdKXx8aXNOYU4oX1tyXSl8fCFpc0Zpbml0ZShiW3JdKXx8IWlzRmluaXRlKF9bcl0pKXtpZighbiYmaS5sZW5ndGg+MCl7Zm9yKHZhciB3PTA7dzwyNDsrK3cpaS5wdXNoKGlbaS5sZW5ndGgtMTJdKTt1Kz0yLHY9ITB9Y29udGludWUgdH1oWzBdW3JdPU1hdGgubWluKGhbMF1bcl0sYltyXSxfW3JdKSxoWzFdW3JdPU1hdGgubWF4KGhbMV1bcl0sYltyXSxfW3JdKX1BcnJheS5pc0FycmF5KGRbMF0pPyhtPWQubGVuZ3RoPmUtMT9kW2UtMV06ZC5sZW5ndGg+MD9kW2QubGVuZ3RoLTFdOlswLDAsMCwxXSx5PWQubGVuZ3RoPmU/ZFtlXTpkLmxlbmd0aD4wP2RbZC5sZW5ndGgtMV06WzAsMCwwLDFdKTptPXk9ZCwzPT09bS5sZW5ndGgmJihtPVttWzBdLG1bMV0sbVsyXSwxXSksMz09PXkubGVuZ3RoJiYoeT1beVswXSx5WzFdLHlbMl0sMV0pLCF0aGlzLmhhc0FscGhhJiZtWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKSx4PUFycmF5LmlzQXJyYXkoZyk/Zy5sZW5ndGg+ZS0xP2dbZS0xXTpnLmxlbmd0aD4wP2dbZy5sZW5ndGgtMV06WzAsMCwwLDFdOmc7dmFyIGs9YztpZihjKz1wKGIsXyksdil7Zm9yKHI9MDtyPDI7KytyKWkucHVzaChiWzBdLGJbMV0sYlsyXSxfWzBdLF9bMV0sX1syXSxrLHgsbVswXSxtWzFdLG1bMl0sbVszXSk7dSs9Mix2PSExfWkucHVzaChiWzBdLGJbMV0sYlsyXSxfWzBdLF9bMV0sX1syXSxrLHgsbVswXSxtWzFdLG1bMl0sbVszXSxiWzBdLGJbMV0sYlsyXSxfWzBdLF9bMV0sX1syXSxrLC14LG1bMF0sbVsxXSxtWzJdLG1bM10sX1swXSxfWzFdLF9bMl0sYlswXSxiWzFdLGJbMl0sYywteCx5WzBdLHlbMV0seVsyXSx5WzNdLF9bMF0sX1sxXSxfWzJdLGJbMF0sYlsxXSxiWzJdLGMseCx5WzBdLHlbMV0seVsyXSx5WzNdKSx1Kz00fX1pZih0aGlzLmJ1ZmZlci51cGRhdGUoaSksYS5wdXNoKGMpLG8ucHVzaChmW2YubGVuZ3RoLTFdLnNsaWNlKCkpLHRoaXMuYm91bmRzPWgsdGhpcy52ZXJ0ZXhDb3VudD11LHRoaXMucG9pbnRzPW8sdGhpcy5hcmNMZW5ndGg9YSxcImRhc2hlc1wiaW4gdCl7dmFyIEE9dC5kYXNoZXMuc2xpY2UoKTtmb3IoQS51bnNoaWZ0KDApLGU9MTtlPEEubGVuZ3RoOysrZSlBW2VdPUFbZS0xXStBW2VdO3ZhciBUPWwobmV3IEFycmF5KDEwMjQpLFsyNTYsMSw0XSk7Zm9yKGU9MDtlPDI1NjsrK2Upe2ZvcihyPTA7cjw0OysrcilULnNldChlLDAsciwwKTsxJnMubGUoQSxBW0EubGVuZ3RoLTFdKmUvMjU1KT9ULnNldChlLDAsMCwwKTpULnNldChlLDAsMCwyNTUpfXRoaXMudGV4dHVyZS5zZXRQaXhlbHMoVCl9fSxtLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy52YW8uZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKX0sbS5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDt2YXIgZT1vKHQudmFsdWVbMF0sdC52YWx1ZVsxXSx0LnZhbHVlWzJdLDApLHI9cy5sZSh0aGlzLmFyY0xlbmd0aCxlKTtpZihyPDApcmV0dXJuIG51bGw7aWYocj09PXRoaXMuYXJjTGVuZ3RoLmxlbmd0aC0xKXJldHVybiBuZXcgZyh0aGlzLmFyY0xlbmd0aFt0aGlzLmFyY0xlbmd0aC5sZW5ndGgtMV0sdGhpcy5wb2ludHNbdGhpcy5wb2ludHMubGVuZ3RoLTFdLnNsaWNlKCkscik7Zm9yKHZhciBuPXRoaXMucG9pbnRzW3JdLGk9dGhpcy5wb2ludHNbTWF0aC5taW4ocisxLHRoaXMucG9pbnRzLmxlbmd0aC0xKV0sYT0oZS10aGlzLmFyY0xlbmd0aFtyXSkvKHRoaXMuYXJjTGVuZ3RoW3IrMV0tdGhpcy5hcmNMZW5ndGhbcl0pLGw9MS1hLGM9WzAsMCwwXSx1PTA7dTwzOysrdSljW3VdPWwqblt1XSthKmlbdV07dmFyIGg9TWF0aC5taW4oYTwuNT9yOnIrMSx0aGlzLnBvaW50cy5sZW5ndGgtMSk7cmV0dXJuIG5ldyBnKGUsYyxoLHRoaXMucG9pbnRzW2hdKX19LHtcIi4vbGliL3NoYWRlcnNcIjoyNTEsXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiOjI1MyxcImdsLWJ1ZmZlclwiOjIzOCxcImdsLXRleHR1cmUyZFwiOjMxNSxcImdsLXZhb1wiOjMyMCxcImdsc2wtcmVhZC1mbG9hdFwiOjM5MyxuZGFycmF5OjQ0M31dLDI1MzpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsxMDJdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoxMDJ9XSwyNTQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89ciphLWkqbjtyZXR1cm4gbz8obz0xL28sdFswXT1hKm8sdFsxXT0tbipvLHRbMl09LWkqbyx0WzNdPXIqbyx0KTpudWxsfX0se31dLDI1NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1lWzRdLHM9ZVs1XSxsPWVbNl0sYz1lWzddLHU9ZVs4XSxoPXUqby1zKmMsZj0tdSphK3MqbCxwPWMqYS1vKmwsZD1yKmgrbipmK2kqcDtyZXR1cm4gZD8oZD0xL2QsdFswXT1oKmQsdFsxXT0oLXUqbitpKmMpKmQsdFsyXT0ocypuLWkqbykqZCx0WzNdPWYqZCx0WzRdPSh1KnItaSpsKSpkLHRbNV09KC1zKnIraSphKSpkLHRbNl09cCpkLHRbN109KC1jKnIrbipsKSpkLHRbOF09KG8qci1uKmEpKmQsdCk6bnVsbH19LHt9XSwyNTY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEZsb2F0MzJBcnJheSgxNik7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlWzRdPXRbNF0sZVs1XT10WzVdLGVbNl09dFs2XSxlWzddPXRbN10sZVs4XT10WzhdLGVbOV09dFs5XSxlWzEwXT10WzEwXSxlWzExXT10WzExXSxlWzEyXT10WzEyXSxlWzEzXT10WzEzXSxlWzE0XT10WzE0XSxlWzE1XT10WzE1XSxlfX0se31dLDI1NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PW5ldyBGbG9hdDMyQXJyYXkoMTYpO3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSwyNTg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdLGk9dFszXSxhPXRbNF0sbz10WzVdLHM9dFs2XSxsPXRbN10sYz10WzhdLHU9dFs5XSxoPXRbMTBdLGY9dFsxMV0scD10WzEyXSxkPXRbMTNdLGc9dFsxNF0sdj10WzE1XTtyZXR1cm4oZSpvLXIqYSkqKGgqdi1mKmcpLShlKnMtbiphKSoodSp2LWYqZCkrKGUqbC1pKmEpKih1KmctaCpkKSsocipzLW4qbykqKGMqdi1mKnApLShyKmwtaSpvKSooYypnLWgqcCkrKG4qbC1pKnMpKihjKmQtdSpwKX19LHt9XSwyNTk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89cityLHM9bituLGw9aStpLGM9cipvLHU9bipvLGg9bipzLGY9aSpvLHA9aSpzLGQ9aSpsLGc9YSpvLHY9YSpzLG09YSpsO3JldHVybiB0WzBdPTEtaC1kLHRbMV09dSttLHRbMl09Zi12LHRbM109MCx0WzRdPXUtbSx0WzVdPTEtYy1kLHRbNl09cCtnLHRbN109MCx0WzhdPWYrdix0WzldPXAtZyx0WzEwXT0xLWMtaCx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSwyNjA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1uK24sbD1pK2ksYz1hK2EsdT1uKnMsaD1uKmwsZj1uKmMscD1pKmwsZD1pKmMsZz1hKmMsdj1vKnMsbT1vKmwseT1vKmM7cmV0dXJuIHRbMF09MS0ocCtnKSx0WzFdPWgreSx0WzJdPWYtbSx0WzNdPTAsdFs0XT1oLXksdFs1XT0xLSh1K2cpLHRbNl09ZCt2LHRbN109MCx0WzhdPWYrbSx0WzldPWQtdix0WzEwXT0xLSh1K3ApLHRbMTFdPTAsdFsxMl09clswXSx0WzEzXT1yWzFdLHRbMTRdPXJbMl0sdFsxNV09MSx0fX0se31dLDI2MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9fSx7fV0sMjYyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPWVbNF0scz1lWzVdLGw9ZVs2XSxjPWVbN10sdT1lWzhdLGg9ZVs5XSxmPWVbMTBdLHA9ZVsxMV0sZD1lWzEyXSxnPWVbMTNdLHY9ZVsxNF0sbT1lWzE1XSx5PXIqcy1uKm8seD1yKmwtaSpvLGI9cipjLWEqbyxfPW4qbC1pKnMsdz1uKmMtYSpzLGs9aSpjLWEqbCxBPXUqZy1oKmQsVD11KnYtZipkLE09dSptLXAqZCxTPWgqdi1mKmcsRT1oKm0tcCpnLEM9ZiptLXAqdixMPXkqQy14KkUrYipTK18qTS13KlQraypBO2lmKCFMKXJldHVybiBudWxsO3JldHVybiBMPTEvTCx0WzBdPShzKkMtbCpFK2MqUykqTCx0WzFdPShpKkUtbipDLWEqUykqTCx0WzJdPShnKmstdip3K20qXykqTCx0WzNdPShmKnctaCprLXAqXykqTCx0WzRdPShsKk0tbypDLWMqVCkqTCx0WzVdPShyKkMtaSpNK2EqVCkqTCx0WzZdPSh2KmItZCprLW0qeCkqTCx0WzddPSh1KmstZipiK3AqeCkqTCx0WzhdPShvKkUtcypNK2MqQSkqTCx0WzldPShuKk0tcipFLWEqQSkqTCx0WzEwXT0oZCp3LWcqYittKnkpKkwsdFsxMV09KGgqYi11KnctcCp5KSpMLHRbMTJdPShzKlQtbypTLWwqQSkqTCx0WzEzXT0ocipTLW4qVCtpKkEpKkwsdFsxNF09KGcqeC1kKl8tdip5KSpMLHRbMTVdPSh1Kl8taCp4K2YqeSkqTCx0fX0se31dLDI2MzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuL2lkZW50aXR5XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYSxvLHMsbCxjLHUsaCxmLHAsZCxnPWVbMF0sdj1lWzFdLG09ZVsyXSx5PWlbMF0seD1pWzFdLGI9aVsyXSxfPXJbMF0sdz1yWzFdLGs9clsyXTtpZihNYXRoLmFicyhnLV8pPDFlLTYmJk1hdGguYWJzKHYtdyk8MWUtNiYmTWF0aC5hYnMobS1rKTwxZS02KXJldHVybiBuKHQpO2g9Zy1fLGY9di13LHA9bS1rLGQ9MS9NYXRoLnNxcnQoaCpoK2YqZitwKnApLGE9eCoocCo9ZCktYiooZio9ZCksbz1iKihoKj1kKS15KnAscz15KmYteCpoLChkPU1hdGguc3FydChhKmErbypvK3MqcykpPyhhKj1kPTEvZCxvKj1kLHMqPWQpOihhPTAsbz0wLHM9MCk7bD1mKnMtcCpvLGM9cCphLWgqcyx1PWgqby1mKmEsKGQ9TWF0aC5zcXJ0KGwqbCtjKmMrdSp1KSk/KGwqPWQ9MS9kLGMqPWQsdSo9ZCk6KGw9MCxjPTAsdT0wKTtyZXR1cm4gdFswXT1hLHRbMV09bCx0WzJdPWgsdFszXT0wLHRbNF09byx0WzVdPWMsdFs2XT1mLHRbN109MCx0WzhdPXMsdFs5XT11LHRbMTBdPXAsdFsxMV09MCx0WzEyXT0tKGEqZytvKnYrcyptKSx0WzEzXT0tKGwqZytjKnYrdSptKSx0WzE0XT0tKGgqZytmKnYrcCptKSx0WzE1XT0xLHR9fSx7XCIuL2lkZW50aXR5XCI6MjYxfV0sMjY0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sYz1lWzZdLHU9ZVs3XSxoPWVbOF0sZj1lWzldLHA9ZVsxMF0sZD1lWzExXSxnPWVbMTJdLHY9ZVsxM10sbT1lWzE0XSx5PWVbMTVdLHg9clswXSxiPXJbMV0sXz1yWzJdLHc9clszXTtyZXR1cm4gdFswXT14Km4rYipzK18qaCt3KmcsdFsxXT14KmkrYipsK18qZit3KnYsdFsyXT14KmErYipjK18qcCt3Km0sdFszXT14Km8rYip1K18qZCt3KnkseD1yWzRdLGI9cls1XSxfPXJbNl0sdz1yWzddLHRbNF09eCpuK2IqcytfKmgrdypnLHRbNV09eCppK2IqbCtfKmYrdyp2LHRbNl09eCphK2IqYytfKnArdyptLHRbN109eCpvK2IqdStfKmQrdyp5LHg9cls4XSxiPXJbOV0sXz1yWzEwXSx3PXJbMTFdLHRbOF09eCpuK2IqcytfKmgrdypnLHRbOV09eCppK2IqbCtfKmYrdyp2LHRbMTBdPXgqYStiKmMrXypwK3cqbSx0WzExXT14Km8rYip1K18qZCt3KnkseD1yWzEyXSxiPXJbMTNdLF89clsxNF0sdz1yWzE1XSx0WzEyXT14Km4rYipzK18qaCt3KmcsdFsxM109eCppK2IqbCtfKmYrdyp2LHRbMTRdPXgqYStiKmMrXypwK3cqbSx0WzE1XT14Km8rYip1K18qZCt3KnksdH19LHt9XSwyNjU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9MS8oZS1yKSxsPTEvKG4taSksYz0xLyhhLW8pO3JldHVybiB0WzBdPS0yKnMsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09LTIqbCx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MipjLHRbMTFdPTAsdFsxMl09KGUrcikqcyx0WzEzXT0oaStuKSpsLHRbMTRdPShvK2EpKmMsdFsxNV09MSx0fX0se31dLDI2NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPTEvTWF0aC50YW4oZS8yKSxvPTEvKG4taSk7cmV0dXJuIHRbMF09YS9yLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPWEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPShpK24pKm8sdFsxMV09LTEsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTIqaSpuKm8sdFsxNV09MCx0fX0se31dLDI2NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scyxsLGMsdSxoLGYscCxkLGcsdixtLHkseCxiLF8sdyxrLEEsVCxNLFMsRT1uWzBdLEM9blsxXSxMPW5bMl0sej1NYXRoLnNxcnQoRSpFK0MqQytMKkwpO2lmKE1hdGguYWJzKHopPDFlLTYpcmV0dXJuIG51bGw7RSo9ej0xL3osQyo9eixMKj16LGk9TWF0aC5zaW4ociksYT1NYXRoLmNvcyhyKSxvPTEtYSxzPWVbMF0sbD1lWzFdLGM9ZVsyXSx1PWVbM10saD1lWzRdLGY9ZVs1XSxwPWVbNl0sZD1lWzddLGc9ZVs4XSx2PWVbOV0sbT1lWzEwXSx5PWVbMTFdLHg9RSpFKm8rYSxiPUMqRSpvK0wqaSxfPUwqRSpvLUMqaSx3PUUqQypvLUwqaSxrPUMqQypvK2EsQT1MKkMqbytFKmksVD1FKkwqbytDKmksTT1DKkwqby1FKmksUz1MKkwqbythLHRbMF09cyp4K2gqYitnKl8sdFsxXT1sKngrZipiK3YqXyx0WzJdPWMqeCtwKmIrbSpfLHRbM109dSp4K2QqYit5Kl8sdFs0XT1zKncraCprK2cqQSx0WzVdPWwqdytmKmsrdipBLHRbNl09Yyp3K3AqayttKkEsdFs3XT11KncrZCprK3kqQSx0WzhdPXMqVCtoKk0rZypTLHRbOV09bCpUK2YqTSt2KlMsdFsxMF09YypUK3AqTSttKlMsdFsxMV09dSpUK2QqTSt5KlMsZSE9PXQmJih0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSk7cmV0dXJuIHR9fSx7fV0sMjY4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVs0XSxvPWVbNV0scz1lWzZdLGw9ZVs3XSxjPWVbOF0sdT1lWzldLGg9ZVsxMF0sZj1lWzExXTtlIT09dCYmKHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSk7cmV0dXJuIHRbNF09YSppK2Mqbix0WzVdPW8qaSt1Km4sdFs2XT1zKmkraCpuLHRbN109bCppK2Yqbix0WzhdPWMqaS1hKm4sdFs5XT11KmktbypuLHRbMTBdPWgqaS1zKm4sdFsxMV09ZippLWwqbix0fX0se31dLDI2OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbMF0sbz1lWzFdLHM9ZVsyXSxsPWVbM10sYz1lWzhdLHU9ZVs5XSxoPWVbMTBdLGY9ZVsxMV07ZSE9PXQmJih0WzRdPWVbNF0sdFs1XT1lWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pO3JldHVybiB0WzBdPWEqaS1jKm4sdFsxXT1vKmktdSpuLHRbMl09cyppLWgqbix0WzNdPWwqaS1mKm4sdFs4XT1hKm4rYyppLHRbOV09bypuK3UqaSx0WzEwXT1zKm4raCppLHRbMTFdPWwqbitmKmksdH19LHt9XSwyNzA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzBdLG89ZVsxXSxzPWVbMl0sbD1lWzNdLGM9ZVs0XSx1PWVbNV0saD1lWzZdLGY9ZVs3XTtlIT09dCYmKHRbOF09ZVs4XSx0WzldPWVbOV0sdFsxMF09ZVsxMF0sdFsxMV09ZVsxMV0sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pO3JldHVybiB0WzBdPWEqaStjKm4sdFsxXT1vKmkrdSpuLHRbMl09cyppK2gqbix0WzNdPWwqaStmKm4sdFs0XT1jKmktYSpuLHRbNV09dSppLW8qbix0WzZdPWgqaS1zKm4sdFs3XT1mKmktbCpuLHR9fSx7fV0sMjcxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yWzBdLGk9clsxXSxhPXJbMl07cmV0dXJuIHRbMF09ZVswXSpuLHRbMV09ZVsxXSpuLHRbMl09ZVsyXSpuLHRbM109ZVszXSpuLHRbNF09ZVs0XSppLHRbNV09ZVs1XSppLHRbNl09ZVs2XSppLHRbN109ZVs3XSppLHRbOF09ZVs4XSphLHRbOV09ZVs5XSphLHRbMTBdPWVbMTBdKmEsdFsxMV09ZVsxMV0qYSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSx0fX0se31dLDI3MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scyxsLGMsdSxoLGYscCxkLGc9clswXSx2PXJbMV0sbT1yWzJdO2U9PT10Pyh0WzEyXT1lWzBdKmcrZVs0XSp2K2VbOF0qbStlWzEyXSx0WzEzXT1lWzFdKmcrZVs1XSp2K2VbOV0qbStlWzEzXSx0WzE0XT1lWzJdKmcrZVs2XSp2K2VbMTBdKm0rZVsxNF0sdFsxNV09ZVszXSpnK2VbN10qditlWzExXSptK2VbMTVdKToobj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sYz1lWzZdLHU9ZVs3XSxoPWVbOF0sZj1lWzldLHA9ZVsxMF0sZD1lWzExXSx0WzBdPW4sdFsxXT1pLHRbMl09YSx0WzNdPW8sdFs0XT1zLHRbNV09bCx0WzZdPWMsdFs3XT11LHRbOF09aCx0WzldPWYsdFsxMF09cCx0WzExXT1kLHRbMTJdPW4qZytzKnYraCptK2VbMTJdLHRbMTNdPWkqZytsKnYrZiptK2VbMTNdLHRbMTRdPWEqZytjKnYrcCptK2VbMTRdLHRbMTVdPW8qZyt1KnYrZCptK2VbMTVdKTtyZXR1cm4gdH19LHt9XSwyNzM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZih0PT09ZSl7dmFyIHI9ZVsxXSxuPWVbMl0saT1lWzNdLGE9ZVs2XSxvPWVbN10scz1lWzExXTt0WzFdPWVbNF0sdFsyXT1lWzhdLHRbM109ZVsxMl0sdFs0XT1yLHRbNl09ZVs5XSx0WzddPWVbMTNdLHRbOF09bix0WzldPWEsdFsxMV09ZVsxNF0sdFsxMl09aSx0WzEzXT1vLHRbMTRdPXN9ZWxzZSB0WzBdPWVbMF0sdFsxXT1lWzRdLHRbMl09ZVs4XSx0WzNdPWVbMTJdLHRbNF09ZVsxXSx0WzVdPWVbNV0sdFs2XT1lWzldLHRbN109ZVsxM10sdFs4XT1lWzJdLHRbOV09ZVs2XSx0WzEwXT1lWzEwXSx0WzExXT1lWzE0XSx0WzEyXT1lWzNdLHRbMTNdPWVbN10sdFsxNF09ZVsxMV0sdFsxNV09ZVsxNV07cmV0dXJuIHR9fSx7fV0sMjc0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRbMF09MS9lWzBdO2JyZWFrO2Nhc2UgNDpuKHQsZSk7YnJlYWs7Y2FzZSA5OmkodCxlKTticmVhaztjYXNlIDE2OmEodCxlKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImN1cnJlbnRseSBzdXBwb3J0cyBtYXRyaWNlcyB1cCB0byA0eDRcIil9cmV0dXJuIHR9O3ZhciBuPXQoXCJnbC1tYXQyL2ludmVydFwiKSxpPXQoXCJnbC1tYXQzL2ludmVydFwiKSxhPXQoXCJnbC1tYXQ0L2ludmVydFwiKX0se1wiZ2wtbWF0Mi9pbnZlcnRcIjoyNTQsXCJnbC1tYXQzL2ludmVydFwiOjI1NSxcImdsLW1hdDQvaW52ZXJ0XCI6MjYyfV0sMjc1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImJhcnljZW50cmljXCIpLGk9dChcInBvbHl0b3BlLWNsb3Nlc3QtcG9pbnQvbGliL2Nsb3Nlc3RfcG9pbnRfMmQuanNcIik7ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj1bMCwwLDAsMF0sbj0wO248NDsrK24pZm9yKHZhciBpPTA7aTw0OysraSlyW2ldKz10WzQqbitpXSplW25dO3JldHVybiByfWZ1bmN0aW9uIG8odCxlLHIsbixpKXtmb3IodmFyIG89YShuLGEocixhKGUsW3RbMF0sdFsxXSx0WzJdLDFdKSkpLHM9MDtzPDM7KytzKW9bc10vPW9bM107cmV0dXJuWy41KmlbMF0qKDErb1swXSksLjUqaVsxXSooMS1vWzFdKV19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEscyxsKXtpZigxPT09dC5sZW5ndGgpcmV0dXJuWzAsdFswXS5zbGljZSgpXTtmb3IodmFyIGM9bmV3IEFycmF5KHQubGVuZ3RoKSx1PTA7dTx0Lmxlbmd0aDsrK3UpY1t1XT1vKHRbdV0scixhLHMsbCk7Zm9yKHZhciBoPTAsZj0xLzAsdT0wO3U8Yy5sZW5ndGg7Kyt1KXtmb3IodmFyIHA9MCxkPTA7ZDwyOysrZClwKz1NYXRoLnBvdyhjW3VdW2RdLWVbZF0sMik7cDxmJiYoZj1wLGg9dSl9Zm9yKHZhciBnPWZ1bmN0aW9uKHQsZSl7aWYoMj09PXQubGVuZ3RoKXtmb3IodmFyIHI9MCxhPTAsbz0wO288MjsrK28pcis9TWF0aC5wb3coZVtvXS10WzBdW29dLDIpLGErPU1hdGgucG93KGVbb10tdFsxXVtvXSwyKTtyZXR1cm4gcj1NYXRoLnNxcnQociksYT1NYXRoLnNxcnQoYSkscithPDFlLTY/WzEsMF06W2EvKHIrYSksci8oYStyKV19aWYoMz09PXQubGVuZ3RoKXt2YXIgcz1bMCwwXTtyZXR1cm4gaSh0WzBdLHRbMV0sdFsyXSxlLHMpLG4odCxzKX1yZXR1cm5bXX0oYyxlKSx2PTAsdT0wO3U8MzsrK3Upe2lmKGdbdV08LS4wMDF8fGdbdV0+MS4wMDAxKXJldHVybiBudWxsO3YrPWdbdV19aWYoTWF0aC5hYnModi0xKT4uMDAxKXJldHVybiBudWxsO3JldHVybltoLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVswLDAsMF0sbj0wO248dC5sZW5ndGg7KytuKWZvcih2YXIgaT10W25dLGE9ZVtuXSxvPTA7bzwzOysrbylyW29dKz1hKmlbb107cmV0dXJuIHJ9KHQsZyksZ119fSx7YmFyeWNlbnRyaWM6NjQsXCJwb2x5dG9wZS1jbG9zZXN0LXBvaW50L2xpYi9jbG9zZXN0X3BvaW50XzJkLmpzXCI6NDc0fV0sMjc2OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcImdsc2xpZnlcIiksaT1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uLCBub3JtYWw7XFxuYXR0cmlidXRlIHZlYzQgY29sb3I7XFxuYXR0cmlidXRlIHZlYzIgdXY7XFxuXFxudW5pZm9ybSBtYXQ0IG1vZGVsXFxuICAgICAgICAgICAsIHZpZXdcXG4gICAgICAgICAgICwgcHJvamVjdGlvblxcbiAgICAgICAgICAgLCBpbnZlcnNlTW9kZWw7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uXFxuICAgICAgICAgICAsIGxpZ2h0UG9zaXRpb247XFxuXFxudmFyeWluZyB2ZWMzIGZfbm9ybWFsXFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cXG4gICAgICAgICAgICwgZl9leWVEaXJlY3Rpb25cXG4gICAgICAgICAgICwgZl9kYXRhO1xcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xcbnZhcnlpbmcgdmVjMiBmX3V2O1xcblxcbnZlYzQgcHJvamVjdCh2ZWMzIHApIHtcXG4gIHJldHVybiBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwLCAxLjApO1xcbn1cXG5cXG52b2lkIG1haW4oKSB7XFxuICBnbF9Qb3NpdGlvbiAgICAgID0gcHJvamVjdChwb3NpdGlvbik7XFxuXFxuICAvL0xpZ2h0aW5nIGdlb21ldHJ5IHBhcmFtZXRlcnNcXG4gIHZlYzQgY2FtZXJhQ29vcmRpbmF0ZSA9IHZpZXcgKiB2ZWM0KHBvc2l0aW9uICwgMS4wKTtcXG4gIGNhbWVyYUNvb3JkaW5hdGUueHl6IC89IGNhbWVyYUNvb3JkaW5hdGUudztcXG4gIGZfbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XFxuICBmX2V5ZURpcmVjdGlvbiAgID0gZXllUG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcXG4gIGZfbm9ybWFsICA9IG5vcm1hbGl6ZSgodmVjNChub3JtYWwsIDAuMCkgKiBpbnZlcnNlTW9kZWwpLnh5eik7XFxuXFxuICBmX2NvbG9yICAgICAgICAgID0gY29sb3I7XFxuICBmX2RhdGEgICAgICAgICAgID0gcG9zaXRpb247XFxuICBmX3V2ICAgICAgICAgICAgID0gdXY7XFxufVxcblwiXSksYT1uKFtcIiNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlXFxuXFxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuZmxvYXQgYmVja21hbm5EaXN0cmlidXRpb24oZmxvYXQgeCwgZmxvYXQgcm91Z2huZXNzKSB7XFxuICBmbG9hdCBOZG90SCA9IG1heCh4LCAwLjAwMDEpO1xcbiAgZmxvYXQgY29zMkFscGhhID0gTmRvdEggKiBOZG90SDtcXG4gIGZsb2F0IHRhbjJBbHBoYSA9IChjb3MyQWxwaGEgLSAxLjApIC8gY29zMkFscGhhO1xcbiAgZmxvYXQgcm91Z2huZXNzMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcXG4gIGZsb2F0IGRlbm9tID0gMy4xNDE1OTI2NTM1ODk3OTMgKiByb3VnaG5lc3MyICogY29zMkFscGhhICogY29zMkFscGhhO1xcbiAgcmV0dXJuIGV4cCh0YW4yQWxwaGEgLyByb3VnaG5lc3MyKSAvIGRlbm9tO1xcbn1cXG5cXG5mbG9hdCBjb29rVG9ycmFuY2VTcGVjdWxhcihcXG4gIHZlYzMgbGlnaHREaXJlY3Rpb24sXFxuICB2ZWMzIHZpZXdEaXJlY3Rpb24sXFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwsXFxuICBmbG9hdCByb3VnaG5lc3MsXFxuICBmbG9hdCBmcmVzbmVsKSB7XFxuXFxuICBmbG9hdCBWZG90TiA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XFxuICBmbG9hdCBMZG90TiA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xcblxcbiAgLy9IYWxmIGFuZ2xlIHZlY3RvclxcbiAgdmVjMyBIID0gbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uICsgdmlld0RpcmVjdGlvbik7XFxuXFxuICAvL0dlb21ldHJpYyB0ZXJtXFxuICBmbG9hdCBOZG90SCA9IG1heChkb3Qoc3VyZmFjZU5vcm1hbCwgSCksIDAuMCk7XFxuICBmbG9hdCBWZG90SCA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcXG4gIGZsb2F0IExkb3RIID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcXG4gIGZsb2F0IEcxID0gKDIuMCAqIE5kb3RIICogVmRvdE4pIC8gVmRvdEg7XFxuICBmbG9hdCBHMiA9ICgyLjAgKiBOZG90SCAqIExkb3ROKSAvIExkb3RIO1xcbiAgZmxvYXQgRyA9IG1pbigxLjAsIG1pbihHMSwgRzIpKTtcXG4gIFxcbiAgLy9EaXN0cmlidXRpb24gdGVybVxcbiAgZmxvYXQgRCA9IGJlY2ttYW5uRGlzdHJpYnV0aW9uKE5kb3RILCByb3VnaG5lc3MpO1xcblxcbiAgLy9GcmVzbmVsIHRlcm1cXG4gIGZsb2F0IEYgPSBwb3coMS4wIC0gVmRvdE4sIGZyZXNuZWwpO1xcblxcbiAgLy9NdWx0aXBseSB0ZXJtcyBhbmQgZG9uZVxcbiAgcmV0dXJuICBHICogRiAqIEQgLyBtYXgoMy4xNDE1OTI2NSAqIFZkb3ROLCAwLjAwMDAwMSk7XFxufVxcblxcbi8vI3ByYWdtYSBnbHNsaWZ5OiBiZWNrbWFubiA9IHJlcXVpcmUoZ2xzbC1zcGVjdWxhci1iZWNrbWFubikgLy8gdXNlZCBpbiBnbC1zdXJmYWNlM2RcXG5cXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcXG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xcbn1cXG5cXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcXG51bmlmb3JtIGZsb2F0IHJvdWdobmVzc1xcbiAgICAgICAgICAgICwgZnJlc25lbFxcbiAgICAgICAgICAgICwga2FtYmllbnRcXG4gICAgICAgICAgICAsIGtkaWZmdXNlXFxuICAgICAgICAgICAgLCBrc3BlY3VsYXI7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG5cXG52YXJ5aW5nIHZlYzMgZl9ub3JtYWxcXG4gICAgICAgICAgICwgZl9saWdodERpcmVjdGlvblxcbiAgICAgICAgICAgLCBmX2V5ZURpcmVjdGlvblxcbiAgICAgICAgICAgLCBmX2RhdGE7XFxudmFyeWluZyB2ZWM0IGZfY29sb3I7XFxudmFyeWluZyB2ZWMyIGZfdXY7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgaWYgKGZfY29sb3IuYSA9PSAwLjAgfHxcXG4gICAgb3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBmX2RhdGEpXFxuICApIGRpc2NhcmQ7XFxuXFxuICB2ZWMzIE4gPSBub3JtYWxpemUoZl9ub3JtYWwpO1xcbiAgdmVjMyBMID0gbm9ybWFsaXplKGZfbGlnaHREaXJlY3Rpb24pO1xcbiAgdmVjMyBWID0gbm9ybWFsaXplKGZfZXllRGlyZWN0aW9uKTtcXG5cXG4gIGlmKGdsX0Zyb250RmFjaW5nKSB7XFxuICAgIE4gPSAtTjtcXG4gIH1cXG5cXG4gIGZsb2F0IHNwZWN1bGFyID0gbWluKDEuMCwgbWF4KDAuMCwgY29va1RvcnJhbmNlU3BlY3VsYXIoTCwgViwgTiwgcm91Z2huZXNzLCBmcmVzbmVsKSkpO1xcbiAgLy9mbG9hdCBzcGVjdWxhciA9IG1heCgwLjAsIGJlY2ttYW5uKEwsIFYsIE4sIHJvdWdobmVzcykpOyAvLyB1c2VkIGluIGdsLXN1cmZhY2UzZFxcblxcbiAgZmxvYXQgZGlmZnVzZSAgPSBtaW4oa2FtYmllbnQgKyBrZGlmZnVzZSAqIG1heChkb3QoTiwgTCksIDAuMCksIDEuMCk7XFxuXFxuICB2ZWM0IHN1cmZhY2VDb2xvciA9IHZlYzQoZl9jb2xvci5yZ2IsIDEuMCkgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dik7XFxuICB2ZWM0IGxpdENvbG9yID0gc3VyZmFjZUNvbG9yLmEgKiB2ZWM0KGRpZmZ1c2UgKiBzdXJmYWNlQ29sb3IucmdiICsga3NwZWN1bGFyICogdmVjMygxLDEsMSkgKiBzcGVjdWxhciwgIDEuMCk7XFxuXFxuICBnbF9GcmFnQ29sb3IgPSBsaXRDb2xvciAqIGZfY29sb3IuYTtcXG59XFxuXCJdKSxvPW4oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzQgY29sb3I7XFxuYXR0cmlidXRlIHZlYzIgdXY7XFxuXFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcblxcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xcbnZhcnlpbmcgdmVjMyBmX2RhdGE7XFxudmFyeWluZyB2ZWMyIGZfdXY7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG4gIGZfY29sb3IgPSBjb2xvcjtcXG4gIGZfZGF0YSAgPSBwb3NpdGlvbjtcXG4gIGZfdXYgICAgPSB1djtcXG59XCJdKSxzPW4oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcXG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XFxuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcXG59XFxuXFxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxuXFxudmFyeWluZyB2ZWM0IGZfY29sb3I7XFxudmFyeWluZyB2ZWMzIGZfZGF0YTtcXG52YXJ5aW5nIHZlYzIgZl91djtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBmX2RhdGEpKSBkaXNjYXJkO1xcblxcbiAgZ2xfRnJhZ0NvbG9yID0gZl9jb2xvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBmX3V2KSAqIG9wYWNpdHk7XFxufVwiXSksbD1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XFxuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XFxufVxcblxcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xcbmF0dHJpYnV0ZSBmbG9hdCBwb2ludFNpemU7XFxuXFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xcblxcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xcbnZhcnlpbmcgdmVjMiBmX3V2O1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHBvc2l0aW9uKSkge1xcblxcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMC4wLCAwLjAgLDAuMCAsMC4wKTtcXG4gIH0gZWxzZSB7XFxuICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxuICB9XFxuICBnbF9Qb2ludFNpemUgPSBwb2ludFNpemU7XFxuICBmX2NvbG9yID0gY29sb3I7XFxuICBmX3V2ID0gdXY7XFxufVwiXSksYz1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xcblxcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xcbnZhcnlpbmcgdmVjMiBmX3V2O1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzIgcG9pbnRSID0gZ2xfUG9pbnRDb29yZC54eSAtIHZlYzIoMC41LCAwLjUpO1xcbiAgaWYoZG90KHBvaW50UiwgcG9pbnRSKSA+IDAuMjUpIHtcXG4gICAgZGlzY2FyZDtcXG4gIH1cXG4gIGdsX0ZyYWdDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dikgKiBvcGFjaXR5O1xcbn1cIl0pLHU9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjNCBpZDtcXG5cXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XFxuXFxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XFxudmFyeWluZyB2ZWM0IGZfaWQ7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG4gIGZfaWQgICAgICAgID0gaWQ7XFxuICBmX3Bvc2l0aW9uICA9IHBvc2l0aW9uO1xcbn1cIl0pLGg9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcXG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xcbn1cXG5cXG51bmlmb3JtIHZlYzMgIGNsaXBCb3VuZHNbMl07XFxudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XFxuXFxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XFxudmFyeWluZyB2ZWM0IGZfaWQ7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9wb3NpdGlvbikpIGRpc2NhcmQ7XFxuXFxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZCwgZl9pZC54eXopO1xcbn1cIl0pLGY9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcXG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xcbn1cXG5cXG5hdHRyaWJ1dGUgdmVjMyAgcG9zaXRpb247XFxuYXR0cmlidXRlIGZsb2F0IHBvaW50U2l6ZTtcXG5hdHRyaWJ1dGUgdmVjNCAgaWQ7XFxuXFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xcblxcbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjNCBmX2lkO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHBvc2l0aW9uKSkge1xcblxcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMC4wKTtcXG4gIH0gZWxzZSB7XFxuICAgIGdsX1Bvc2l0aW9uICA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xcbiAgICBnbF9Qb2ludFNpemUgPSBwb2ludFNpemU7XFxuICB9XFxuICBmX2lkICAgICAgICAgPSBpZDtcXG4gIGZfcG9zaXRpb24gICA9IHBvc2l0aW9uO1xcbn1cIl0pLHA9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcXG5cXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XFxuXFxudm9pZCBtYWluKCkge1xcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG59XCJdKSxkPW4oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxudW5pZm9ybSB2ZWMzIGNvbnRvdXJDb2xvcjtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbnRvdXJDb2xvciwgMS4wKTtcXG59XFxuXCJdKTtyLm1lc2hTaGFkZXI9e3ZlcnRleDppLGZyYWdtZW50OmEsYXR0cmlidXRlczpbe25hbWU6XCJwb3NpdGlvblwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwibm9ybWFsXCIsdHlwZTpcInZlYzNcIn0se25hbWU6XCJjb2xvclwiLHR5cGU6XCJ2ZWM0XCJ9LHtuYW1lOlwidXZcIix0eXBlOlwidmVjMlwifV19LHIud2lyZVNoYWRlcj17dmVydGV4Om8sZnJhZ21lbnQ6cyxhdHRyaWJ1dGVzOlt7bmFtZTpcInBvc2l0aW9uXCIsdHlwZTpcInZlYzNcIn0se25hbWU6XCJjb2xvclwiLHR5cGU6XCJ2ZWM0XCJ9LHtuYW1lOlwidXZcIix0eXBlOlwidmVjMlwifV19LHIucG9pbnRTaGFkZXI9e3ZlcnRleDpsLGZyYWdtZW50OmMsYXR0cmlidXRlczpbe25hbWU6XCJwb3NpdGlvblwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwiY29sb3JcIix0eXBlOlwidmVjNFwifSx7bmFtZTpcInV2XCIsdHlwZTpcInZlYzJcIn0se25hbWU6XCJwb2ludFNpemVcIix0eXBlOlwiZmxvYXRcIn1dfSxyLnBpY2tTaGFkZXI9e3ZlcnRleDp1LGZyYWdtZW50OmgsYXR0cmlidXRlczpbe25hbWU6XCJwb3NpdGlvblwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwiaWRcIix0eXBlOlwidmVjNFwifV19LHIucG9pbnRQaWNrU2hhZGVyPXt2ZXJ0ZXg6ZixmcmFnbWVudDpoLGF0dHJpYnV0ZXM6W3tuYW1lOlwicG9zaXRpb25cIix0eXBlOlwidmVjM1wifSx7bmFtZTpcInBvaW50U2l6ZVwiLHR5cGU6XCJmbG9hdFwifSx7bmFtZTpcImlkXCIsdHlwZTpcInZlYzRcIn1dfSxyLmNvbnRvdXJTaGFkZXI9e3ZlcnRleDpwLGZyYWdtZW50OmQsYXR0cmlidXRlczpbe25hbWU6XCJwb3NpdGlvblwiLHR5cGU6XCJ2ZWMzXCJ9XX19LHtnbHNsaWZ5OjQwMn1dLDI3NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbC1zaGFkZXJcIiksaT10KFwiZ2wtYnVmZmVyXCIpLGE9dChcImdsLXZhb1wiKSxvPXQoXCJnbC10ZXh0dXJlMmRcIikscz10KFwibm9ybWFsc1wiKSxsPXQoXCJnbC1tYXQ0L211bHRpcGx5XCIpLGM9dChcImdsLW1hdDQvaW52ZXJ0XCIpLHU9dChcIm5kYXJyYXlcIiksaD10KFwiY29sb3JtYXBcIiksZj10KFwic2ltcGxpY2lhbC1jb21wbGV4LWNvbnRvdXJcIikscD10KFwidHlwZWRhcnJheS1wb29sXCIpLGQ9dChcIi4vbGliL3NoYWRlcnNcIiksZz10KFwiLi9saWIvY2xvc2VzdC1wb2ludFwiKSx2PWQubWVzaFNoYWRlcixtPWQud2lyZVNoYWRlcix5PWQucG9pbnRTaGFkZXIseD1kLnBpY2tTaGFkZXIsYj1kLnBvaW50UGlja1NoYWRlcixfPWQuY29udG91clNoYWRlcix3PVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiBrKHQsZSxyLG4saSxhLG8scyxsLGMsdSxoLGYscCxkLGcsdixtLHkseCxiLF8sayxBLFQsTSxTKXt0aGlzLmdsPXQsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5jZWxscz1bXSx0aGlzLnBvc2l0aW9ucz1bXSx0aGlzLmludGVuc2l0eT1bXSx0aGlzLnRleHR1cmU9ZSx0aGlzLmRpcnR5PSEwLHRoaXMudHJpU2hhZGVyPXIsdGhpcy5saW5lU2hhZGVyPW4sdGhpcy5wb2ludFNoYWRlcj1pLHRoaXMucGlja1NoYWRlcj1hLHRoaXMucG9pbnRQaWNrU2hhZGVyPW8sdGhpcy5jb250b3VyU2hhZGVyPXMsdGhpcy50cmlhbmdsZVBvc2l0aW9ucz1sLHRoaXMudHJpYW5nbGVDb2xvcnM9dSx0aGlzLnRyaWFuZ2xlTm9ybWFscz1mLHRoaXMudHJpYW5nbGVVVnM9aCx0aGlzLnRyaWFuZ2xlSWRzPWMsdGhpcy50cmlhbmdsZVZBTz1wLHRoaXMudHJpYW5nbGVDb3VudD0wLHRoaXMubGluZVdpZHRoPTEsdGhpcy5lZGdlUG9zaXRpb25zPWQsdGhpcy5lZGdlQ29sb3JzPXYsdGhpcy5lZGdlVVZzPW0sdGhpcy5lZGdlSWRzPWcsdGhpcy5lZGdlVkFPPXksdGhpcy5lZGdlQ291bnQ9MCx0aGlzLnBvaW50UG9zaXRpb25zPXgsdGhpcy5wb2ludENvbG9ycz1fLHRoaXMucG9pbnRVVnM9ayx0aGlzLnBvaW50U2l6ZXM9QSx0aGlzLnBvaW50SWRzPWIsdGhpcy5wb2ludFZBTz1ULHRoaXMucG9pbnRDb3VudD0wLHRoaXMuY29udG91ckxpbmVXaWR0aD0xLHRoaXMuY29udG91clBvc2l0aW9ucz1NLHRoaXMuY29udG91clZBTz1TLHRoaXMuY29udG91ckNvdW50PTAsdGhpcy5jb250b3VyQ29sb3I9WzAsMCwwXSx0aGlzLmNvbnRvdXJFbmFibGU9ITAsdGhpcy5waWNrSWQ9MSx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5saWdodFBvc2l0aW9uPVsxZTUsMWU1LDBdLHRoaXMuYW1iaWVudExpZ2h0PS44LHRoaXMuZGlmZnVzZUxpZ2h0PS44LHRoaXMuc3BlY3VsYXJMaWdodD0yLHRoaXMucm91Z2huZXNzPS41LHRoaXMuZnJlc25lbD0xLjUsdGhpcy5vcGFjaXR5PTEsdGhpcy5oYXNBbHBoYT0hMSx0aGlzLm9wYWNpdHlzY2FsZT0hMSx0aGlzLl9tb2RlbD13LHRoaXMuX3ZpZXc9dyx0aGlzLl9wcm9qZWN0aW9uPXcsdGhpcy5fcmVzb2x1dGlvbj1bMSwxXX12YXIgQT1rLnByb3RvdHlwZTtmdW5jdGlvbiBUKHQsZSl7aWYoIWUpcmV0dXJuIDE7aWYoIWUubGVuZ3RoKXJldHVybiAxO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKXtpZihlLmxlbmd0aDwyKXJldHVybiAxO2lmKGVbcl1bMF09PT10KXJldHVybiBlW3JdWzFdO2lmKGVbcl1bMF0+dCYmcj4wKXt2YXIgbj0oZVtyXVswXS10KS8oZVtyXVswXS1lW3ItMV1bMF0pO3JldHVybiBlW3JdWzFdKigxLW4pK24qZVtyLTFdWzFdfX1yZXR1cm4gMX1mdW5jdGlvbiBNKHQpe3ZhciBlPW4odCx5LnZlcnRleCx5LmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTIsZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTMsZS5hdHRyaWJ1dGVzLnBvaW50U2l6ZS5sb2NhdGlvbj00LGV9ZnVuY3Rpb24gUyh0KXt2YXIgZT1uKHQseC52ZXJ0ZXgseC5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5pZC5sb2NhdGlvbj0xLGV9ZnVuY3Rpb24gRSh0KXt2YXIgZT1uKHQsYi52ZXJ0ZXgsYi5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5pZC5sb2NhdGlvbj0xLGUuYXR0cmlidXRlcy5wb2ludFNpemUubG9jYXRpb249NCxlfWZ1bmN0aW9uIEModCl7dmFyIGU9bih0LF8udmVydGV4LF8uZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlfUEuaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5oYXNBbHBoYX0sQS5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzQWxwaGF9LEEucGlja1Nsb3RzPTEsQS5zZXRQaWNrQmFzZT1mdW5jdGlvbih0KXt0aGlzLnBpY2tJZD10fSxBLmhpZ2hsaWdodD1mdW5jdGlvbih0KXtpZih0JiZ0aGlzLmNvbnRvdXJFbmFibGUpe2Zvcih2YXIgZT1mKHRoaXMuY2VsbHMsdGhpcy5pbnRlbnNpdHksdC5pbnRlbnNpdHkpLHI9ZS5jZWxscyxuPWUudmVydGV4SWRzLGk9ZS52ZXJ0ZXhXZWlnaHRzLGE9ci5sZW5ndGgsbz1wLm1hbGxvY0Zsb2F0MzIoNiphKSxzPTAsbD0wO2w8YTsrK2wpZm9yKHZhciBjPXJbbF0sdT0wO3U8MjsrK3Upe3ZhciBoPWNbMF07Mj09PWMubGVuZ3RoJiYoaD1jW3VdKTtmb3IodmFyIGQ9bltoXVswXSxnPW5baF1bMV0sdj1pW2hdLG09MS12LHk9dGhpcy5wb3NpdGlvbnNbZF0seD10aGlzLnBvc2l0aW9uc1tnXSxiPTA7YjwzOysrYilvW3MrK109dip5W2JdK20qeFtiXX10aGlzLmNvbnRvdXJDb3VudD1zLzN8MCx0aGlzLmNvbnRvdXJQb3NpdGlvbnMudXBkYXRlKG8uc3ViYXJyYXkoMCxzKSkscC5mcmVlKG8pfWVsc2UgdGhpcy5jb250b3VyQ291bnQ9MH0sQS51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZT10aGlzLmdsO3RoaXMuZGlydHk9ITAsXCJjb250b3VyRW5hYmxlXCJpbiB0JiYodGhpcy5jb250b3VyRW5hYmxlPXQuY29udG91ckVuYWJsZSksXCJjb250b3VyQ29sb3JcImluIHQmJih0aGlzLmNvbnRvdXJDb2xvcj10LmNvbnRvdXJDb2xvciksXCJsaW5lV2lkdGhcImluIHQmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCksXCJsaWdodFBvc2l0aW9uXCJpbiB0JiYodGhpcy5saWdodFBvc2l0aW9uPXQubGlnaHRQb3NpdGlvbiksdGhpcy5oYXNBbHBoYT0hMSxcIm9wYWNpdHlcImluIHQmJih0aGlzLm9wYWNpdHk9dC5vcGFjaXR5LHRoaXMub3BhY2l0eTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpLFwib3BhY2l0eXNjYWxlXCJpbiB0JiYodGhpcy5vcGFjaXR5c2NhbGU9dC5vcGFjaXR5c2NhbGUsdGhpcy5oYXNBbHBoYT0hMCksXCJhbWJpZW50XCJpbiB0JiYodGhpcy5hbWJpZW50TGlnaHQ9dC5hbWJpZW50KSxcImRpZmZ1c2VcImluIHQmJih0aGlzLmRpZmZ1c2VMaWdodD10LmRpZmZ1c2UpLFwic3BlY3VsYXJcImluIHQmJih0aGlzLnNwZWN1bGFyTGlnaHQ9dC5zcGVjdWxhciksXCJyb3VnaG5lc3NcImluIHQmJih0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyksXCJmcmVzbmVsXCJpbiB0JiYodGhpcy5mcmVzbmVsPXQuZnJlc25lbCksdC50ZXh0dXJlPyh0aGlzLnRleHR1cmUuZGlzcG9zZSgpLHRoaXMudGV4dHVyZT1vKGUsdC50ZXh0dXJlKSk6dC5jb2xvcm1hcCYmKHRoaXMudGV4dHVyZS5zaGFwZT1bMjU2LDI1Nl0sdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLkxJTkVBUl9NSVBNQVBfTElORUFSLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ZS5MSU5FQVIsdGhpcy50ZXh0dXJlLnNldFBpeGVscyhmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1oKHtjb2xvcm1hcDp0LG5zaGFkZXM6MjU2LGZvcm1hdDpcInJnYmFcIn0pLG49bmV3IFVpbnQ4QXJyYXkoMTAyNCksaT0wO2k8MjU2OysraSl7Zm9yKHZhciBhPXJbaV0sbz0wO288MzsrK28pbls0Kmkrb109YVtvXTtuWzQqaSszXT1lPzI1NSpUKGkvMjU1LGUpOjI1NSphWzNdfXJldHVybiB1KG4sWzI1NiwyNTYsNF0sWzQsMCwxXSl9KHQuY29sb3JtYXAsdGhpcy5vcGFjaXR5c2NhbGUpKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXAoKSk7dmFyIHI9dC5jZWxscyxuPXQucG9zaXRpb25zO2lmKG4mJnIpe3ZhciBpPVtdLGE9W10sbD1bXSxjPVtdLGY9W10scD1bXSxkPVtdLGc9W10sdj1bXSxtPVtdLHk9W10seD1bXSxiPVtdLF89W107dGhpcy5jZWxscz1yLHRoaXMucG9zaXRpb25zPW47dmFyIHc9dC52ZXJ0ZXhOb3JtYWxzLGs9dC5jZWxsTm9ybWFscyxBPXZvaWQgMD09PXQudmVydGV4Tm9ybWFsc0Vwc2lsb24/MWUtNjp0LnZlcnRleE5vcm1hbHNFcHNpbG9uLE09dm9pZCAwPT09dC5mYWNlTm9ybWFsc0Vwc2lsb24/MWUtNjp0LmZhY2VOb3JtYWxzRXBzaWxvbjt0LnVzZUZhY2V0Tm9ybWFscyYmIWsmJihrPXMuZmFjZU5vcm1hbHMocixuLE0pKSxrfHx3fHwodz1zLnZlcnRleE5vcm1hbHMocixuLEEpKTt2YXIgUz10LnZlcnRleENvbG9ycyxFPXQuY2VsbENvbG9ycyxDPXQubWVzaENvbG9yfHxbMSwxLDEsMV0sTD10LnZlcnRleFVWcyx6PXQudmVydGV4SW50ZW5zaXR5LE89dC5jZWxsVVZzLEk9dC5jZWxsSW50ZW5zaXR5LEQ9MS8wLFA9LTEvMDtpZighTCYmIU8paWYoeilpZih0LnZlcnRleEludGVuc2l0eUJvdW5kcylEPSt0LnZlcnRleEludGVuc2l0eUJvdW5kc1swXSxQPSt0LnZlcnRleEludGVuc2l0eUJvdW5kc1sxXTtlbHNlIGZvcih2YXIgUj0wO1I8ei5sZW5ndGg7KytSKXt2YXIgRj16W1JdO0Q9TWF0aC5taW4oRCxGKSxQPU1hdGgubWF4KFAsRil9ZWxzZSBpZihJKWZvcihSPTA7UjxJLmxlbmd0aDsrK1Ipe0Y9SVtSXTtEPU1hdGgubWluKEQsRiksUD1NYXRoLm1heChQLEYpfWVsc2UgZm9yKFI9MDtSPG4ubGVuZ3RoOysrUil7Rj1uW1JdWzJdO0Q9TWF0aC5taW4oRCxGKSxQPU1hdGgubWF4KFAsRil9dGhpcy5pbnRlbnNpdHk9enx8KEk/ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpbltpXT0wO3ZhciBhPXQubGVuZ3RoO2ZvcihpPTA7aTxhOysraSlmb3IodmFyIG89dFtpXSxzPTA7czxvLmxlbmd0aDsrK3MpbltvW3NdXT1yW2ldO3JldHVybiBufShyLG4ubGVuZ3RoLEkpOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPXRbbl1bMl07cmV0dXJuIHJ9KG4pKTt2YXIgQj10LnBvaW50U2l6ZXMsTj10LnBvaW50U2l6ZXx8MTt0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXTtmb3IoUj0wO1I8bi5sZW5ndGg7KytSKWZvcih2YXIgaj1uW1JdLFY9MDtWPDM7KytWKSFpc05hTihqW1ZdKSYmaXNGaW5pdGUoaltWXSkmJih0aGlzLmJvdW5kc1swXVtWXT1NYXRoLm1pbih0aGlzLmJvdW5kc1swXVtWXSxqW1ZdKSx0aGlzLmJvdW5kc1sxXVtWXT1NYXRoLm1heCh0aGlzLmJvdW5kc1sxXVtWXSxqW1ZdKSk7dmFyIFU9MCxxPTAsSD0wO3Q6Zm9yKFI9MDtSPHIubGVuZ3RoOysrUil7dmFyIEc9cltSXTtzd2l0Y2goRy5sZW5ndGgpe2Nhc2UgMTpmb3Ioaj1uW1c9R1swXV0sVj0wO1Y8MzsrK1YpaWYoaXNOYU4oaltWXSl8fCFpc0Zpbml0ZShqW1ZdKSljb250aW51ZSB0O20ucHVzaChqWzBdLGpbMV0salsyXSksWD1TP1NbV106RT9FW1JdOkMsdGhpcy5vcGFjaXR5c2NhbGUmJno/YS5wdXNoKFhbMF0sWFsxXSxYWzJdLHRoaXMub3BhY2l0eSpUKCh6W1ddLUQpLyhQLUQpLHRoaXMub3BhY2l0eXNjYWxlKSk6Mz09PVgubGVuZ3RoP3kucHVzaChYWzBdLFhbMV0sWFsyXSx0aGlzLm9wYWNpdHkpOih5LnB1c2goWFswXSxYWzFdLFhbMl0sWFszXSp0aGlzLm9wYWNpdHkpLCF0aGlzLmhhc0FscGhhJiZYWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKSksWj1MP0xbV106ej9bKHpbV10tRCkvKFAtRCksMF06Tz9PW1JdOkk/WyhJW1JdLUQpLyhQLUQpLDBdOlsoalsyXS1EKS8oUC1EKSwwXSx4LnB1c2goWlswXSxaWzFdKSxCP2IucHVzaChCW1ddKTpiLnB1c2goTiksXy5wdXNoKFIpLEgrPTE7YnJlYWs7Y2FzZSAyOmZvcihWPTA7VjwyOysrVil7aj1uW1c9R1tWXV07Zm9yKHZhciBZPTA7WTwzOysrWSlpZihpc05hTihqW1ldKXx8IWlzRmluaXRlKGpbWV0pKWNvbnRpbnVlIHR9Zm9yKFY9MDtWPDI7KytWKXtqPW5bVz1HW1ZdXTtwLnB1c2goalswXSxqWzFdLGpbMl0pLFg9Uz9TW1ddOkU/RVtSXTpDLHRoaXMub3BhY2l0eXNjYWxlJiZ6P2EucHVzaChYWzBdLFhbMV0sWFsyXSx0aGlzLm9wYWNpdHkqVCgoeltXXS1EKS8oUC1EKSx0aGlzLm9wYWNpdHlzY2FsZSkpOjM9PT1YLmxlbmd0aD9kLnB1c2goWFswXSxYWzFdLFhbMl0sdGhpcy5vcGFjaXR5KTooZC5wdXNoKFhbMF0sWFsxXSxYWzJdLFhbM10qdGhpcy5vcGFjaXR5KSwhdGhpcy5oYXNBbHBoYSYmWFszXTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpLFo9TD9MW1ddOno/Wyh6W1ddLUQpLyhQLUQpLDBdOk8/T1tSXTpJP1soSVtSXS1EKS8oUC1EKSwwXTpbKGpbMl0tRCkvKFAtRCksMF0sZy5wdXNoKFpbMF0sWlsxXSksdi5wdXNoKFIpfXErPTE7YnJlYWs7Y2FzZSAzOmZvcihWPTA7VjwzOysrVilmb3Ioaj1uW1c9R1tWXV0sWT0wO1k8MzsrK1kpaWYoaXNOYU4oaltZXSl8fCFpc0Zpbml0ZShqW1ldKSljb250aW51ZSB0O2ZvcihWPTA7VjwzOysrVil7dmFyIFcsWCxaLCQ7aj1uW1c9R1syLVZdXTtpLnB1c2goalswXSxqWzFdLGpbMl0pLFg9Uz9TW1ddOkU/RVtSXTpDLHRoaXMub3BhY2l0eXNjYWxlJiZ6P2EucHVzaChYWzBdLFhbMV0sWFsyXSx0aGlzLm9wYWNpdHkqVCgoeltXXS1EKS8oUC1EKSx0aGlzLm9wYWNpdHlzY2FsZSkpOjM9PT1YLmxlbmd0aD9hLnB1c2goWFswXSxYWzFdLFhbMl0sdGhpcy5vcGFjaXR5KTooYS5wdXNoKFhbMF0sWFsxXSxYWzJdLFhbM10qdGhpcy5vcGFjaXR5KSwhdGhpcy5oYXNBbHBoYSYmWFszXTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpLFo9TD9MW1ddOno/Wyh6W1ddLUQpLyhQLUQpLDBdOk8/T1tSXTpJP1soSVtSXS1EKS8oUC1EKSwwXTpbKGpbMl0tRCkvKFAtRCksMF0sYy5wdXNoKFpbMF0sWlsxXSksJD13P3dbV106a1tSXSxsLnB1c2goJFswXSwkWzFdLCRbMl0pLGYucHVzaChSKX1VKz0xfX10aGlzLnBvaW50Q291bnQ9SCx0aGlzLmVkZ2VDb3VudD1xLHRoaXMudHJpYW5nbGVDb3VudD1VLHRoaXMucG9pbnRQb3NpdGlvbnMudXBkYXRlKG0pLHRoaXMucG9pbnRDb2xvcnMudXBkYXRlKHkpLHRoaXMucG9pbnRVVnMudXBkYXRlKHgpLHRoaXMucG9pbnRTaXplcy51cGRhdGUoYiksdGhpcy5wb2ludElkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KF8pKSx0aGlzLmVkZ2VQb3NpdGlvbnMudXBkYXRlKHApLHRoaXMuZWRnZUNvbG9ycy51cGRhdGUoZCksdGhpcy5lZGdlVVZzLnVwZGF0ZShnKSx0aGlzLmVkZ2VJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheSh2KSksdGhpcy50cmlhbmdsZVBvc2l0aW9ucy51cGRhdGUoaSksdGhpcy50cmlhbmdsZUNvbG9ycy51cGRhdGUoYSksdGhpcy50cmlhbmdsZVVWcy51cGRhdGUoYyksdGhpcy50cmlhbmdsZU5vcm1hbHMudXBkYXRlKGwpLHRoaXMudHJpYW5nbGVJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheShmKSl9fSxBLmRyYXdUcmFuc3BhcmVudD1BLmRyYXc9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fHcsbj10LnZpZXd8fHcsaT10LnByb2plY3Rpb258fHcsYT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylhWzBdW29dPU1hdGgubWF4KGFbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxhWzFdW29dPU1hdGgubWluKGFbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt2YXIgcz17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGludmVyc2VNb2RlbDp3LnNsaWNlKCksY2xpcEJvdW5kczphLGthbWJpZW50OnRoaXMuYW1iaWVudExpZ2h0LGtkaWZmdXNlOnRoaXMuZGlmZnVzZUxpZ2h0LGtzcGVjdWxhcjp0aGlzLnNwZWN1bGFyTGlnaHQscm91Z2huZXNzOnRoaXMucm91Z2huZXNzLGZyZXNuZWw6dGhpcy5mcmVzbmVsLGV5ZVBvc2l0aW9uOlswLDAsMF0sbGlnaHRQb3NpdGlvbjpbMCwwLDBdLGNvbnRvdXJDb2xvcjp0aGlzLmNvbnRvdXJDb2xvcix0ZXh0dXJlOjB9O3MuaW52ZXJzZU1vZGVsPWMocy5pbnZlcnNlTW9kZWwscy5tb2RlbCksZS5kaXNhYmxlKGUuQ1VMTF9GQUNFKSx0aGlzLnRleHR1cmUuYmluZCgwKTt2YXIgdT1uZXcgQXJyYXkoMTYpO2wodSxzLnZpZXcscy5tb2RlbCksbCh1LHMucHJvamVjdGlvbix1KSxjKHUsdSk7Zm9yKG89MDtvPDM7KytvKXMuZXllUG9zaXRpb25bb109dVsxMitvXS91WzE1XTt2YXIgaCxmPXVbMTVdO2ZvcihvPTA7bzwzOysrbylmKz10aGlzLmxpZ2h0UG9zaXRpb25bb10qdVs0Km8rM107Zm9yKG89MDtvPDM7KytvKXtmb3IodmFyIHA9dVsxMitvXSxkPTA7ZDwzOysrZClwKz11WzQqZCtvXSp0aGlzLmxpZ2h0UG9zaXRpb25bZF07cy5saWdodFBvc2l0aW9uW29dPXAvZn10aGlzLnRyaWFuZ2xlQ291bnQ+MCYmKChoPXRoaXMudHJpU2hhZGVyKS5iaW5kKCksaC51bmlmb3Jtcz1zLHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpKTt0aGlzLmVkZ2VDb3VudD4wJiZ0aGlzLmxpbmVXaWR0aD4wJiYoKGg9dGhpcy5saW5lU2hhZGVyKS5iaW5kKCksaC51bmlmb3Jtcz1zLHRoaXMuZWRnZVZBTy5iaW5kKCksZS5saW5lV2lkdGgodGhpcy5saW5lV2lkdGgqdGhpcy5waXhlbFJhdGlvKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLDIqdGhpcy5lZGdlQ291bnQpLHRoaXMuZWRnZVZBTy51bmJpbmQoKSk7dGhpcy5wb2ludENvdW50PjAmJigoaD10aGlzLnBvaW50U2hhZGVyKS5iaW5kKCksaC51bmlmb3Jtcz1zLHRoaXMucG9pbnRWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlBPSU5UUywwLHRoaXMucG9pbnRDb3VudCksdGhpcy5wb2ludFZBTy51bmJpbmQoKSk7dGhpcy5jb250b3VyRW5hYmxlJiZ0aGlzLmNvbnRvdXJDb3VudD4wJiZ0aGlzLmNvbnRvdXJMaW5lV2lkdGg+MCYmKChoPXRoaXMuY29udG91clNoYWRlcikuYmluZCgpLGgudW5pZm9ybXM9cyx0aGlzLmNvbnRvdXJWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLkxJTkVTLDAsdGhpcy5jb250b3VyQ291bnQpLHRoaXMuY29udG91clZBTy51bmJpbmQoKSl9LEEuZHJhd1BpY2s9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fHcsbj10LnZpZXd8fHcsaT10LnByb2plY3Rpb258fHcsYT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylhWzBdW29dPU1hdGgubWF4KGFbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxhWzFdW29dPU1hdGgubWluKGFbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt0aGlzLl9tb2RlbD1bXS5zbGljZS5jYWxsKHIpLHRoaXMuX3ZpZXc9W10uc2xpY2UuY2FsbChuKSx0aGlzLl9wcm9qZWN0aW9uPVtdLnNsaWNlLmNhbGwoaSksdGhpcy5fcmVzb2x1dGlvbj1bZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XTt2YXIgcyxsPXttb2RlbDpyLHZpZXc6bixwcm9qZWN0aW9uOmksY2xpcEJvdW5kczphLHBpY2tJZDp0aGlzLnBpY2tJZC8yNTV9Oygocz10aGlzLnBpY2tTaGFkZXIpLmJpbmQoKSxzLnVuaWZvcm1zPWwsdGhpcy50cmlhbmdsZUNvdW50PjAmJih0aGlzLnRyaWFuZ2xlVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRVMsMCwzKnRoaXMudHJpYW5nbGVDb3VudCksdGhpcy50cmlhbmdsZVZBTy51bmJpbmQoKSksdGhpcy5lZGdlQ291bnQ+MCYmKHRoaXMuZWRnZVZBTy5iaW5kKCksZS5saW5lV2lkdGgodGhpcy5saW5lV2lkdGgqdGhpcy5waXhlbFJhdGlvKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLDIqdGhpcy5lZGdlQ291bnQpLHRoaXMuZWRnZVZBTy51bmJpbmQoKSksdGhpcy5wb2ludENvdW50PjApJiYoKHM9dGhpcy5wb2ludFBpY2tTaGFkZXIpLmJpbmQoKSxzLnVuaWZvcm1zPWwsdGhpcy5wb2ludFZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuUE9JTlRTLDAsdGhpcy5wb2ludENvdW50KSx0aGlzLnBvaW50VkFPLnVuYmluZCgpKX0sQS5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDtmb3IodmFyIGU9dC52YWx1ZVswXSsyNTYqdC52YWx1ZVsxXSs2NTUzNip0LnZhbHVlWzJdLHI9dGhpcy5jZWxsc1tlXSxuPXRoaXMucG9zaXRpb25zLGk9bmV3IEFycmF5KHIubGVuZ3RoKSxhPTA7YTxyLmxlbmd0aDsrK2EpaVthXT1uW3JbYV1dO3ZhciBvPWcoaSxbdC5jb29yZFswXSx0aGlzLl9yZXNvbHV0aW9uWzFdLXQuY29vcmRbMV1dLHRoaXMuX21vZGVsLHRoaXMuX3ZpZXcsdGhpcy5fcHJvamVjdGlvbix0aGlzLl9yZXNvbHV0aW9uKTtpZighbylyZXR1cm4gbnVsbDt2YXIgcz1vWzJdLGw9MDtmb3IoYT0wO2E8ci5sZW5ndGg7KythKWwrPXNbYV0qdGhpcy5pbnRlbnNpdHlbclthXV07cmV0dXJue3Bvc2l0aW9uOm9bMV0saW5kZXg6cltvWzBdXSxjZWxsOnIsY2VsbElkOmUsaW50ZW5zaXR5OmwsZGF0YUNvb3JkaW5hdGU6dGhpcy5wb3NpdGlvbnNbcltvWzBdXV19fSxBLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnRleHR1cmUuZGlzcG9zZSgpLHRoaXMudHJpU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLmxpbmVTaGFkZXIuZGlzcG9zZSgpLHRoaXMucG9pbnRTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5wb2ludFBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVWQU8uZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVDb2xvcnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVVVnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVOb3JtYWxzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlSWRzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VWQU8uZGlzcG9zZSgpLHRoaXMuZWRnZVBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5lZGdlQ29sb3JzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VVVnMuZGlzcG9zZSgpLHRoaXMuZWRnZUlkcy5kaXNwb3NlKCksdGhpcy5wb2ludFZBTy5kaXNwb3NlKCksdGhpcy5wb2ludFBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5wb2ludENvbG9ycy5kaXNwb3NlKCksdGhpcy5wb2ludFVWcy5kaXNwb3NlKCksdGhpcy5wb2ludFNpemVzLmRpc3Bvc2UoKSx0aGlzLnBvaW50SWRzLmRpc3Bvc2UoKSx0aGlzLmNvbnRvdXJWQU8uZGlzcG9zZSgpLHRoaXMuY29udG91clBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5jb250b3VyU2hhZGVyLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgmJih0PShlPXQpLmdsKSwhKHQuZ2V0RXh0ZW5zaW9uKFwiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzXCIpfHx0LmdldEV4dGVuc2lvbihcIk1PWl9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXNcIil8fHQuZ2V0RXh0ZW5zaW9uKFwiV0VCS0lUX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlc1wiKSkpdGhyb3cgbmV3IEVycm9yKFwiZGVyaXZhdGl2ZXMgbm90IHN1cHBvcnRlZFwiKTt2YXIgcj1mdW5jdGlvbih0KXt2YXIgZT1uKHQsdi52ZXJ0ZXgsdi5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0yLGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0zLGUuYXR0cmlidXRlcy5ub3JtYWwubG9jYXRpb249NCxlfSh0KSxzPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxtLnZlcnRleCxtLmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTIsZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTMsZX0odCksbD1NKHQpLGM9Uyh0KSxoPUUodCksZj1DKHQpLHA9byh0LHUobmV3IFVpbnQ4QXJyYXkoWzI1NSwyNTUsMjU1LDI1NV0pLFsxLDEsNF0pKTtwLmdlbmVyYXRlTWlwbWFwKCkscC5taW5GaWx0ZXI9dC5MSU5FQVJfTUlQTUFQX0xJTkVBUixwLm1hZ0ZpbHRlcj10LkxJTkVBUjt2YXIgZD1pKHQpLGc9aSh0KSx5PWkodCkseD1pKHQpLGI9aSh0KSxfPWEodCxbe2J1ZmZlcjpkLHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6Yix0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjpnLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6eSx0eXBlOnQuRkxPQVQsc2l6ZToyfSx7YnVmZmVyOngsdHlwZTp0LkZMT0FULHNpemU6M31dKSx3PWkodCksQT1pKHQpLFQ9aSh0KSxMPWkodCksej1hKHQsW3tidWZmZXI6dyx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOkwsdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6QSx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOlQsdHlwZTp0LkZMT0FULHNpemU6Mn1dKSxPPWkodCksST1pKHQpLEQ9aSh0KSxQPWkodCksUj1pKHQpLEY9YSh0LFt7YnVmZmVyOk8sdHlwZTp0LkZMT0FULHNpemU6M30se2J1ZmZlcjpSLHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOkksdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjpELHR5cGU6dC5GTE9BVCxzaXplOjJ9LHtidWZmZXI6UCx0eXBlOnQuRkxPQVQsc2l6ZToxfV0pLEI9aSh0KSxOPW5ldyBrKHQscCxyLHMsbCxjLGgsZixkLGIsZyx5LHgsXyx3LEwsQSxULHosTyxSLEksRCxQLEYsQixhKHQsW3tidWZmZXI6Qix0eXBlOnQuRkxPQVQsc2l6ZTozfV0pKTtyZXR1cm4gTi51cGRhdGUoZSksTn19LHtcIi4vbGliL2Nsb3Nlc3QtcG9pbnRcIjoyNzUsXCIuL2xpYi9zaGFkZXJzXCI6Mjc2LGNvbG9ybWFwOjExNyxcImdsLWJ1ZmZlclwiOjIzOCxcImdsLW1hdDQvaW52ZXJ0XCI6MjYyLFwiZ2wtbWF0NC9tdWx0aXBseVwiOjI2NCxcImdsLXNoYWRlclwiOjI5OCxcImdsLXRleHR1cmUyZFwiOjMxNSxcImdsLXZhb1wiOjMyMCxuZGFycmF5OjQ0Myxub3JtYWxzOjQ0NixcInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyXCI6NTAzLFwidHlwZWRhcnJheS1wb29sXCI6NTMwfV0sMjc4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUsWzAsMCwwLDEsMSwwLDEsMV0pLHM9aShlLGEuYm94VmVydCxhLmxpbmVGcmFnKTtyZXR1cm4gbmV3IG8odCxyLHMpfTt2YXIgbj10KFwiZ2wtYnVmZmVyXCIpLGk9dChcImdsLXNoYWRlclwiKSxhPXQoXCIuL3NoYWRlcnNcIik7ZnVuY3Rpb24gbyh0LGUscil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yfXZhciBzLGwsYz1vLnByb3RvdHlwZTtjLmJpbmQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnNoYWRlcjt0aGlzLnZiby5iaW5kKCksdGhpcy5zaGFkZXIuYmluZCgpLHQuYXR0cmlidXRlcy5jb29yZC5wb2ludGVyKCksdC51bmlmb3Jtcy5zY3JlZW5Cb3g9dGhpcy5wbG90LnNjcmVlbkJveH0sYy5kcmF3Qm94PShzPVswLDBdLGw9WzAsMF0sZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10aGlzLnBsb3Qsbz10aGlzLnNoYWRlcixjPWEuZ2w7c1swXT10LHNbMV09ZSxsWzBdPXIsbFsxXT1uLG8udW5pZm9ybXMubG89cyxvLnVuaWZvcm1zLmhpPWwsby51bmlmb3Jtcy5jb2xvcj1pLGMuZHJhd0FycmF5cyhjLlRSSUFOR0xFX1NUUklQLDAsNCl9KSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZiby5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0se1wiLi9zaGFkZXJzXCI6MjgxLFwiZ2wtYnVmZmVyXCI6MjM4LFwiZ2wtc2hhZGVyXCI6Mjk4fV0sMjc5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUpLGE9aShlLG8uZ3JpZFZlcnQsby5ncmlkRnJhZyksbD1pKGUsby50aWNrVmVydCxvLmdyaWRGcmFnKTtyZXR1cm4gbmV3IHModCxyLGEsbCl9O3ZhciBuPXQoXCJnbC1idWZmZXJcIiksaT10KFwiZ2wtc2hhZGVyXCIpLGE9dChcImJpbmFyeS1zZWFyY2gtYm91bmRzXCIpLG89dChcIi4vc2hhZGVyc1wiKTtmdW5jdGlvbiBzKHQsZSxyLG4pe3RoaXMucGxvdD10LHRoaXMudmJvPWUsdGhpcy5zaGFkZXI9cix0aGlzLnRpY2tTaGFkZXI9bix0aGlzLnRpY2tzPVtbXSxbXV19ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0LWV9dmFyIGMsdSxoLGYscCxkPXMucHJvdG90eXBlO2QuZHJhdz0oYz1bMCwwXSx1PVswLDBdLGg9WzAsMF0sZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5wbG90LGU9dGhpcy52Ym8scj10aGlzLnNoYWRlcixuPXRoaXMudGlja3MsaT10LmdsLGE9dC5fdGlja0JvdW5kcyxvPXQuZGF0YUJveCxzPXQudmlld0JveCxsPXQuZ3JpZExpbmVXaWR0aCxmPXQuZ3JpZExpbmVDb2xvcixwPXQuZ3JpZExpbmVFbmFibGUsZD10LnBpeGVsUmF0aW8sZz0wO2c8MjsrK2cpe3ZhciB2PWFbZ10sbT1hW2crMl0tdix5PS41KihvW2crMl0rb1tnXSkseD1vW2crMl0tb1tnXTt1W2ddPTIqbS94LGNbZ109Mioodi15KS94fXIuYmluZCgpLGUuYmluZCgpLHIuYXR0cmlidXRlcy5kYXRhQ29vcmQucG9pbnRlcigpLHIudW5pZm9ybXMuZGF0YVNoaWZ0PWMsci51bmlmb3Jtcy5kYXRhU2NhbGU9dTt2YXIgYj0wO2ZvcihnPTA7ZzwyOysrZyl7aFswXT1oWzFdPTAsaFtnXT0xLHIudW5pZm9ybXMuZGF0YUF4aXM9aCxyLnVuaWZvcm1zLmxpbmVXaWR0aD1sW2ddLyhzW2crMl0tc1tnXSkqZCxyLnVuaWZvcm1zLmNvbG9yPWZbZ107dmFyIF89NipuW2ddLmxlbmd0aDtwW2ddJiZfJiZpLmRyYXdBcnJheXMoaS5UUklBTkdMRVMsYixfKSxiKz1ffX0pLGQuZHJhd1RpY2tNYXJrcz1mdW5jdGlvbigpe3ZhciB0PVswLDBdLGU9WzAsMF0scj1bMSwwXSxuPVswLDFdLGk9WzAsMF0sbz1bMCwwXTtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHM9dGhpcy5wbG90LGM9dGhpcy52Ym8sdT10aGlzLnRpY2tTaGFkZXIsaD10aGlzLnRpY2tzLGY9cy5nbCxwPXMuX3RpY2tCb3VuZHMsZD1zLmRhdGFCb3gsZz1zLnZpZXdCb3gsdj1zLnBpeGVsUmF0aW8sbT1zLnNjcmVlbkJveCx5PW1bMl0tbVswXSx4PW1bM10tbVsxXSxiPWdbMl0tZ1swXSxfPWdbM10tZ1sxXSx3PTA7dzwyOysrdyl7dmFyIGs9cFt3XSxBPXBbdysyXS1rLFQ9LjUqKGRbdysyXStkW3ddKSxNPWRbdysyXS1kW3ddO2Vbd109MipBL00sdFt3XT0yKihrLVQpL019ZVswXSo9Yi95LHRbMF0qPWIveSxlWzFdKj1fL3gsdFsxXSo9Xy94LHUuYmluZCgpLGMuYmluZCgpLHUuYXR0cmlidXRlcy5kYXRhQ29vcmQucG9pbnRlcigpO3ZhciBTPXUudW5pZm9ybXM7Uy5kYXRhU2hpZnQ9dCxTLmRhdGFTY2FsZT1lO3ZhciBFPXMudGlja01hcmtMZW5ndGgsQz1zLnRpY2tNYXJrV2lkdGgsTD1zLnRpY2tNYXJrQ29sb3Isej02KmhbMF0ubGVuZ3RoLE89TWF0aC5taW4oYS5nZShoWzBdLChkWzBdLXBbMF0pLyhwWzJdLXBbMF0pLGwpLGhbMF0ubGVuZ3RoKSxJPU1hdGgubWluKGEuZ3QoaFswXSwoZFsyXS1wWzBdKS8ocFsyXS1wWzBdKSxsKSxoWzBdLmxlbmd0aCksRD0wKzYqTyxQPTYqTWF0aC5tYXgoMCxJLU8pLFI9TWF0aC5taW4oYS5nZShoWzFdLChkWzFdLXBbMV0pLyhwWzNdLXBbMV0pLGwpLGhbMV0ubGVuZ3RoKSxGPU1hdGgubWluKGEuZ3QoaFsxXSwoZFszXS1wWzFdKS8ocFszXS1wWzFdKSxsKSxoWzFdLmxlbmd0aCksQj16KzYqUixOPTYqTWF0aC5tYXgoMCxGLVIpO2lbMF09MiooZ1swXS1FWzFdKS95LTEsaVsxXT0oZ1szXStnWzFdKS94LTEsb1swXT1FWzFdKnYveSxvWzFdPUNbMV0qdi94LE4mJihTLmNvbG9yPUxbMV0sUy50aWNrU2NhbGU9byxTLmRhdGFBeGlzPW4sUy5zY3JlZW5PZmZzZXQ9aSxmLmRyYXdBcnJheXMoZi5UUklBTkdMRVMsQixOKSksaVswXT0oZ1syXStnWzBdKS95LTEsaVsxXT0yKihnWzFdLUVbMF0pL3gtMSxvWzBdPUNbMF0qdi95LG9bMV09RVswXSp2L3gsUCYmKFMuY29sb3I9TFswXSxTLnRpY2tTY2FsZT1vLFMuZGF0YUF4aXM9cixTLnNjcmVlbk9mZnNldD1pLGYuZHJhd0FycmF5cyhmLlRSSUFOR0xFUyxELFApKSxpWzBdPTIqKGdbMl0rRVszXSkveS0xLGlbMV09KGdbM10rZ1sxXSkveC0xLG9bMF09RVszXSp2L3ksb1sxXT1DWzNdKnYveCxOJiYoUy5jb2xvcj1MWzNdLFMudGlja1NjYWxlPW8sUy5kYXRhQXhpcz1uLFMuc2NyZWVuT2Zmc2V0PWksZi5kcmF3QXJyYXlzKGYuVFJJQU5HTEVTLEIsTikpLGlbMF09KGdbMl0rZ1swXSkveS0xLGlbMV09MiooZ1szXStFWzJdKS94LTEsb1swXT1DWzJdKnYveSxvWzFdPUVbMl0qdi94LFAmJihTLmNvbG9yPUxbMl0sUy50aWNrU2NhbGU9byxTLmRhdGFBeGlzPXIsUy5zY3JlZW5PZmZzZXQ9aSxmLmRyYXdBcnJheXMoZi5UUklBTkdMRVMsRCxQKSl9fSgpLGQudXBkYXRlPShmPVsxLDEsLTEsLTEsMSwtMV0scD1bMSwtMSwxLDEsLTEsLTFdLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LnRpY2tzLHI9dC5ib3VuZHMsbj1uZXcgRmxvYXQzMkFycmF5KDE4KihlWzBdLmxlbmd0aCtlWzFdLmxlbmd0aCkpLGk9KHRoaXMucGxvdC56ZXJvTGluZUVuYWJsZSwwKSxhPVtbXSxbXV0sbz0wO288MjsrK28pZm9yKHZhciBzPWFbb10sbD1lW29dLGM9cltvXSx1PXJbbysyXSxoPTA7aDxsLmxlbmd0aDsrK2gpe3ZhciBkPShsW2hdLngtYykvKHUtYyk7cy5wdXNoKGQpO2Zvcih2YXIgZz0wO2c8NjsrK2cpbltpKytdPWQsbltpKytdPWZbZ10sbltpKytdPXBbZ119dGhpcy50aWNrcz1hLHRoaXMudmJvLnVwZGF0ZShuKX0pLGQuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmJvLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy50aWNrU2hhZGVyLmRpc3Bvc2UoKX19LHtcIi4vc2hhZGVyc1wiOjI4MSxcImJpbmFyeS1zZWFyY2gtYm91bmRzXCI6MjgzLFwiZ2wtYnVmZmVyXCI6MjM4LFwiZ2wtc2hhZGVyXCI6Mjk4fV0sMjgwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUsWy0xLC0xLC0xLDEsMSwtMSwxLDFdKSxzPWkoZSxhLmxpbmVWZXJ0LGEubGluZUZyYWcpO3JldHVybiBuZXcgbyh0LHIscyl9O3ZhciBuPXQoXCJnbC1idWZmZXJcIiksaT10KFwiZ2wtc2hhZGVyXCIpLGE9dChcIi4vc2hhZGVyc1wiKTtmdW5jdGlvbiBvKHQsZSxyKXt0aGlzLnBsb3Q9dCx0aGlzLnZibz1lLHRoaXMuc2hhZGVyPXJ9dmFyIHMsbCxjPW8ucHJvdG90eXBlO2MuYmluZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc2hhZGVyO3RoaXMudmJvLmJpbmQoKSx0aGlzLnNoYWRlci5iaW5kKCksdC5hdHRyaWJ1dGVzLmNvb3JkLnBvaW50ZXIoKSx0LnVuaWZvcm1zLnNjcmVlbkJveD10aGlzLnBsb3Quc2NyZWVuQm94fSxjLmRyYXdMaW5lPShzPVswLDBdLGw9WzAsMF0sZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPXRoaXMucGxvdCxjPXRoaXMuc2hhZGVyLHU9by5nbDtzWzBdPXQsc1sxXT1lLGxbMF09cixsWzFdPW4sYy51bmlmb3Jtcy5zdGFydD1zLGMudW5pZm9ybXMuZW5kPWwsYy51bmlmb3Jtcy53aWR0aD1pKm8ucGl4ZWxSYXRpbyxjLnVuaWZvcm1zLmNvbG9yPWEsdS5kcmF3QXJyYXlzKHUuVFJJQU5HTEVfU1RSSVAsMCw0KX0pLGMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmJvLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7XCIuL3NoYWRlcnNcIjoyODEsXCJnbC1idWZmZXJcIjoyMzgsXCJnbC1zaGFkZXJcIjoyOTh9XSwyODE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2xzbGlmeVwiKSxpPW4oW1wicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG51bmlmb3JtIHZlYzQgY29sb3I7XFxudm9pZCBtYWluKCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci54eXogKiBjb2xvci53LCBjb2xvci53KTtcXG59XFxuXCJdKTtlLmV4cG9ydHM9e2xpbmVWZXJ0Om4oW1wicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjMiBjb29yZDtcXG5cXG51bmlmb3JtIHZlYzQgc2NyZWVuQm94O1xcbnVuaWZvcm0gdmVjMiBzdGFydCwgZW5kO1xcbnVuaWZvcm0gZmxvYXQgd2lkdGg7XFxuXFxudmVjMiBwZXJwKHZlYzIgdikge1xcbiAgcmV0dXJuIHZlYzIodi55LCAtdi54KTtcXG59XFxuXFxudmVjMiBzY3JlZW4odmVjMiB2KSB7XFxuICByZXR1cm4gMi4wICogKHYgLSBzY3JlZW5Cb3gueHkpIC8gKHNjcmVlbkJveC56dyAtIHNjcmVlbkJveC54eSkgLSAxLjA7XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzIgZGVsdGEgPSBub3JtYWxpemUocGVycChzdGFydCAtIGVuZCkpO1xcbiAgdmVjMiBvZmZzZXQgPSBtaXgoc3RhcnQsIGVuZCwgMC41ICogKGNvb3JkLnkrMS4wKSk7XFxuICBnbF9Qb3NpdGlvbiA9IHZlYzQoc2NyZWVuKG9mZnNldCArIDAuNSAqIHdpZHRoICogZGVsdGEgKiBjb29yZC54KSwgMCwgMSk7XFxufVxcblwiXSksbGluZUZyYWc6aSx0ZXh0VmVydDpuKFtcIiNkZWZpbmUgR0xTTElGWSAxXFxuYXR0cmlidXRlIHZlYzMgdGV4dENvb3JkaW5hdGU7XFxuXFxudW5pZm9ybSB2ZWMyIGRhdGFTY2FsZSwgZGF0YVNoaWZ0LCBkYXRhQXhpcywgc2NyZWVuT2Zmc2V0LCB0ZXh0U2NhbGU7XFxudW5pZm9ybSBmbG9hdCBhbmdsZTtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBmbG9hdCBkYXRhT2Zmc2V0ICA9IHRleHRDb29yZGluYXRlLno7XFxuICB2ZWMyIGdseXBoT2Zmc2V0ICA9IHRleHRDb29yZGluYXRlLnh5O1xcbiAgbWF0MiBnbHlwaE1hdHJpeCA9IG1hdDIoY29zKGFuZ2xlKSwgc2luKGFuZ2xlKSwgLXNpbihhbmdsZSksIGNvcyhhbmdsZSkpO1xcbiAgdmVjMiBzY3JlZW5Db29yZGluYXRlID0gZGF0YUF4aXMgKiAoZGF0YVNjYWxlICogZGF0YU9mZnNldCArIGRhdGFTaGlmdCkgK1xcbiAgICBnbHlwaE1hdHJpeCAqIGdseXBoT2Zmc2V0ICogdGV4dFNjYWxlICsgc2NyZWVuT2Zmc2V0O1xcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHNjcmVlbkNvb3JkaW5hdGUsIDAsIDEpO1xcbn1cXG5cIl0pLHRleHRGcmFnOmksZ3JpZFZlcnQ6bihbXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMzIGRhdGFDb29yZDtcXG5cXG51bmlmb3JtIHZlYzIgZGF0YUF4aXMsIGRhdGFTaGlmdCwgZGF0YVNjYWxlO1xcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzIgcG9zID0gZGF0YUF4aXMgKiAoZGF0YVNjYWxlICogZGF0YUNvb3JkLnggKyBkYXRhU2hpZnQpO1xcbiAgcG9zICs9IDEwLjAgKiBkYXRhQ29vcmQueSAqIHZlYzIoZGF0YUF4aXMueSwgLWRhdGFBeGlzLngpICsgZGF0YUNvb3JkLnogKiBsaW5lV2lkdGg7XFxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zLCAwLCAxKTtcXG59XFxuXCJdKSxncmlkRnJhZzppLGJveFZlcnQ6bihbXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMyIGNvb3JkO1xcblxcbnVuaWZvcm0gdmVjNCBzY3JlZW5Cb3g7XFxudW5pZm9ybSB2ZWMyIGxvLCBoaTtcXG5cXG52ZWMyIHNjcmVlbih2ZWMyIHYpIHtcXG4gIHJldHVybiAyLjAgKiAodiAtIHNjcmVlbkJveC54eSkgLyAoc2NyZWVuQm94Lnp3IC0gc2NyZWVuQm94Lnh5KSAtIDEuMDtcXG59XFxuXFxudm9pZCBtYWluKCkge1xcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHNjcmVlbihtaXgobG8sIGhpLCBjb29yZCkpLCAwLCAxKTtcXG59XFxuXCJdKSx0aWNrVmVydDpuKFtcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzMgZGF0YUNvb3JkO1xcblxcbnVuaWZvcm0gdmVjMiBkYXRhQXhpcywgZGF0YVNoaWZ0LCBkYXRhU2NhbGUsIHNjcmVlbk9mZnNldCwgdGlja1NjYWxlO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzIgcG9zID0gZGF0YUF4aXMgKiAoZGF0YVNjYWxlICogZGF0YUNvb3JkLnggKyBkYXRhU2hpZnQpO1xcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcyArIHRpY2tTY2FsZSpkYXRhQ29vcmQueXogKyBzY3JlZW5PZmZzZXQsIDAsIDEpO1xcbn1cXG5cIl0pfX0se2dsc2xpZnk6NDAyfV0sMjgyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUpLGE9aShlLHMudGV4dFZlcnQscy50ZXh0RnJhZyk7cmV0dXJuIG5ldyBsKHQscixhKX07dmFyIG49dChcImdsLWJ1ZmZlclwiKSxpPXQoXCJnbC1zaGFkZXJcIiksYT10KFwidGV4dC1jYWNoZVwiKSxvPXQoXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiKSxzPXQoXCIuL3NoYWRlcnNcIik7ZnVuY3Rpb24gbCh0LGUscil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yLHRoaXMudGlja09mZnNldD1bW10sW11dLHRoaXMudGlja1g9W1tdLFtdXSx0aGlzLmxhYmVsT2Zmc2V0PVswLDBdLHRoaXMubGFiZWxDb3VudD1bMCwwXX12YXIgYyx1LGgsZixwLGQsZz1sLnByb3RvdHlwZTtnLmRyYXdUaWNrcz0oYz1bMCwwXSx1PVswLDBdLGg9WzAsMF0sZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wbG90LHI9dGhpcy5zaGFkZXIsbj10aGlzLnRpY2tYW3RdLGk9dGhpcy50aWNrT2Zmc2V0W3RdLGE9ZS5nbCxzPWUudmlld0JveCxsPWUuZGF0YUJveCxmPWUuc2NyZWVuQm94LHA9ZS5waXhlbFJhdGlvLGQ9ZS50aWNrRW5hYmxlLGc9ZS50aWNrUGFkLHY9ZS50aWNrQ29sb3IsbT1lLnRpY2tBbmdsZSx5PWUubGFiZWxFbmFibGUseD1lLmxhYmVsUGFkLGI9ZS5sYWJlbENvbG9yLF89ZS5sYWJlbEFuZ2xlLHc9dGhpcy5sYWJlbE9mZnNldFt0XSxrPXRoaXMubGFiZWxDb3VudFt0XSxBPW8ubHQobixsW3RdKSxUPW8ubGUobixsW3QrMl0pO2NbMF09Y1sxXT0wLGNbdF09MSx1W3RdPShzWzIrdF0rc1t0XSkvKGZbMit0XS1mW3RdKS0xO3ZhciBNPTIvZlsyKygxXnQpXS1mWzFedF07dVsxXnRdPU0qc1sxXnRdLTEsZFt0XSYmKHVbMV50XS09TSpwKmdbdF0sQTxUJiZpW1RdPmlbQV0mJihyLnVuaWZvcm1zLmRhdGFBeGlzPWMsci51bmlmb3Jtcy5zY3JlZW5PZmZzZXQ9dSxyLnVuaWZvcm1zLmNvbG9yPXZbdF0sci51bmlmb3Jtcy5hbmdsZT1tW3RdLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFUyxpW0FdLGlbVF0taVtBXSkpKSx5W3RdJiZrJiYodVsxXnRdLT1NKnAqeFt0XSxyLnVuaWZvcm1zLmRhdGFBeGlzPWgsci51bmlmb3Jtcy5zY3JlZW5PZmZzZXQ9dSxyLnVuaWZvcm1zLmNvbG9yPWJbdF0sci51bmlmb3Jtcy5hbmdsZT1fW3RdLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFUyx3LGspKSx1WzFedF09TSpzWzIrKDFedCldLTEsZFt0KzJdJiYodVsxXnRdKz1NKnAqZ1t0KzJdLEE8VCYmaVtUXT5pW0FdJiYoci51bmlmb3Jtcy5kYXRhQXhpcz1jLHIudW5pZm9ybXMuc2NyZWVuT2Zmc2V0PXUsci51bmlmb3Jtcy5jb2xvcj12W3QrMl0sci51bmlmb3Jtcy5hbmdsZT1tW3QrMl0sYS5kcmF3QXJyYXlzKGEuVFJJQU5HTEVTLGlbQV0saVtUXS1pW0FdKSkpLHlbdCsyXSYmayYmKHVbMV50XSs9TSpwKnhbdCsyXSxyLnVuaWZvcm1zLmRhdGFBeGlzPWgsci51bmlmb3Jtcy5zY3JlZW5PZmZzZXQ9dSxyLnVuaWZvcm1zLmNvbG9yPWJbdCsyXSxyLnVuaWZvcm1zLmFuZ2xlPV9bdCsyXSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRVMsdyxrKSl9KSxnLmRyYXdUaXRsZT1mdW5jdGlvbigpe3ZhciB0PVswLDBdLGU9WzAsMF07cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5wbG90LG49dGhpcy5zaGFkZXIsaT1yLmdsLGE9ci5zY3JlZW5Cb3gsbz1yLnRpdGxlQ2VudGVyLHM9ci50aXRsZUFuZ2xlLGw9ci50aXRsZUNvbG9yLGM9ci5waXhlbFJhdGlvO2lmKHRoaXMudGl0bGVDb3VudCl7Zm9yKHZhciB1PTA7dTwyOysrdSllW3VdPTIqKG9bdV0qYy1hW3VdKS8oYVsyK3VdLWFbdV0pLTE7bi5iaW5kKCksbi51bmlmb3Jtcy5kYXRhQXhpcz10LG4udW5pZm9ybXMuc2NyZWVuT2Zmc2V0PWUsbi51bmlmb3Jtcy5hbmdsZT1zLG4udW5pZm9ybXMuY29sb3I9bCxpLmRyYXdBcnJheXMoaS5UUklBTkdMRVMsdGhpcy50aXRsZU9mZnNldCx0aGlzLnRpdGxlQ291bnQpfX19KCksZy5iaW5kPShmPVswLDBdLHA9WzAsMF0sZD1bMCwwXSxmdW5jdGlvbigpe3ZhciB0PXRoaXMucGxvdCxlPXRoaXMuc2hhZGVyLHI9dC5fdGlja0JvdW5kcyxuPXQuZGF0YUJveCxpPXQuc2NyZWVuQm94LGE9dC52aWV3Qm94O2UuYmluZCgpO2Zvcih2YXIgbz0wO288MjsrK28pe3ZhciBzPXJbb10sbD1yW28rMl0tcyxjPS41KihuW28rMl0rbltvXSksdT1uW28rMl0tbltvXSxoPWFbb10sZz1hW28rMl0taCx2PWlbb10sbT1pW28rMl0tdjtwW29dPTIqbC91KmcvbSxmW29dPTIqKHMtYykvdSpnL219ZFsxXT0yKnQucGl4ZWxSYXRpby8oaVszXS1pWzFdKSxkWzBdPWRbMV0qKGlbM10taVsxXSkvKGlbMl0taVswXSksZS51bmlmb3Jtcy5kYXRhU2NhbGU9cCxlLnVuaWZvcm1zLmRhdGFTaGlmdD1mLGUudW5pZm9ybXMudGV4dFNjYWxlPWQsdGhpcy52Ym8uYmluZCgpLGUuYXR0cmlidXRlcy50ZXh0Q29vcmRpbmF0ZS5wb2ludGVyKCl9KSxnLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxvLHM9W10sbD10LnRpY2tzLGM9dC5ib3VuZHM7Zm9yKG89MDtvPDI7KytvKXt2YXIgdT1bTWF0aC5mbG9vcihzLmxlbmd0aC8zKV0saD1bLTEvMF0sZj1sW29dO2ZvcihlPTA7ZTxmLmxlbmd0aDsrK2Upe3ZhciBwPWZbZV0sZD1wLngsZz1wLnRleHQsdj1wLmZvbnR8fFwic2Fucy1zZXJpZlwiO2k9cC5mb250U2l6ZXx8MTI7Zm9yKHZhciBtPTEvKGNbbysyXS1jW29dKSx5PWNbb10seD1nLnNwbGl0KFwiXFxuXCIpLGI9MDtiPHgubGVuZ3RoO2IrKylmb3Iobj1hKHYseFtiXSkuZGF0YSxyPTA7cjxuLmxlbmd0aDtyKz0yKXMucHVzaChuW3JdKmksLW5bcisxXSppLWIqaSoxLjIsKGQteSkqbSk7dS5wdXNoKE1hdGguZmxvb3Iocy5sZW5ndGgvMykpLGgucHVzaChkKX10aGlzLnRpY2tPZmZzZXRbb109dSx0aGlzLnRpY2tYW29dPWh9Zm9yKG89MDtvPDI7KytvKXtmb3IodGhpcy5sYWJlbE9mZnNldFtvXT1NYXRoLmZsb29yKHMubGVuZ3RoLzMpLG49YSh0LmxhYmVsRm9udFtvXSx0LmxhYmVsc1tvXSx7dGV4dEFsaWduOlwiY2VudGVyXCJ9KS5kYXRhLGk9dC5sYWJlbFNpemVbb10sZT0wO2U8bi5sZW5ndGg7ZSs9MilzLnB1c2gobltlXSppLC1uW2UrMV0qaSwwKTt0aGlzLmxhYmVsQ291bnRbb109TWF0aC5mbG9vcihzLmxlbmd0aC8zKS10aGlzLmxhYmVsT2Zmc2V0W29dfWZvcih0aGlzLnRpdGxlT2Zmc2V0PU1hdGguZmxvb3Iocy5sZW5ndGgvMyksbj1hKHQudGl0bGVGb250LHQudGl0bGUpLmRhdGEsaT10LnRpdGxlU2l6ZSxlPTA7ZTxuLmxlbmd0aDtlKz0yKXMucHVzaChuW2VdKmksLW5bZSsxXSppLDApO3RoaXMudGl0bGVDb3VudD1NYXRoLmZsb29yKHMubGVuZ3RoLzMpLXRoaXMudGl0bGVPZmZzZXQsdGhpcy52Ym8udXBkYXRlKHMpfSxnLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZiby5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0se1wiLi9zaGFkZXJzXCI6MjgxLFwiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIjoyODMsXCJnbC1idWZmZXJcIjoyMzgsXCJnbC1zaGFkZXJcIjoyOTgsXCJ0ZXh0LWNhY2hlXCI6NTIxfV0sMjgzOltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzEwMl1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjEwMn1dLDI4NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlLFtlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdKSxjPW5ldyBsKGUscik7cmV0dXJuIGMuZ3JpZD1pKGMpLGMudGV4dD1hKGMpLGMubGluZT1vKGMpLGMuYm94PXMoYyksYy51cGRhdGUodCksY307dmFyIG49dChcImdsLXNlbGVjdC1zdGF0aWNcIiksaT10KFwiLi9saWIvZ3JpZFwiKSxhPXQoXCIuL2xpYi90ZXh0XCIpLG89dChcIi4vbGliL2xpbmVcIikscz10KFwiLi9saWIvYm94XCIpO2Z1bmN0aW9uIGwodCxlKXt0aGlzLmdsPXQsdGhpcy5waWNrQnVmZmVyPWUsdGhpcy5zY3JlZW5Cb3g9WzAsMCx0LmRyYXdpbmdCdWZmZXJXaWR0aCx0LmRyYXdpbmdCdWZmZXJIZWlnaHRdLHRoaXMudmlld0JveD1bMCwwLDAsMF0sdGhpcy5kYXRhQm94PVstMTAsLTEwLDEwLDEwXSx0aGlzLmdyaWRMaW5lRW5hYmxlPVshMCwhMF0sdGhpcy5ncmlkTGluZVdpZHRoPVsxLDFdLHRoaXMuZ3JpZExpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5waXhlbFJhdGlvPTEsdGhpcy50aWNrTWFya0xlbmd0aD1bMCwwLDAsMF0sdGhpcy50aWNrTWFya1dpZHRoPVswLDAsMCwwXSx0aGlzLnRpY2tNYXJrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aWNrUGFkPVsxNSwxNSwxNSwxNV0sdGhpcy50aWNrQW5nbGU9WzAsMCwwLDBdLHRoaXMudGlja0VuYWJsZT1bITAsITAsITAsITBdLHRoaXMudGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGFiZWxQYWQ9WzE1LDE1LDE1LDE1XSx0aGlzLmxhYmVsQW5nbGU9WzAsTWF0aC5QSS8yLDAsMypNYXRoLlBJLzJdLHRoaXMubGFiZWxFbmFibGU9WyEwLCEwLCEwLCEwXSx0aGlzLmxhYmVsQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aXRsZUNlbnRlcj1bMCwwXSx0aGlzLnRpdGxlRW5hYmxlPSEwLHRoaXMudGl0bGVBbmdsZT0wLHRoaXMudGl0bGVDb2xvcj1bMCwwLDAsMV0sdGhpcy5ib3JkZXJDb2xvcj1bMCwwLDAsMF0sdGhpcy5iYWNrZ3JvdW5kQ29sb3I9WzAsMCwwLDBdLHRoaXMuemVyb0xpbmVFbmFibGU9WyEwLCEwXSx0aGlzLnplcm9MaW5lV2lkdGg9WzQsNF0sdGhpcy56ZXJvTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmJvcmRlckxpbmVFbmFibGU9WyEwLCEwLCEwLCEwXSx0aGlzLmJvcmRlckxpbmVXaWR0aD1bMiwyLDIsMl0sdGhpcy5ib3JkZXJMaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ncmlkPW51bGwsdGhpcy50ZXh0PW51bGwsdGhpcy5saW5lPW51bGwsdGhpcy5ib3g9bnVsbCx0aGlzLm9iamVjdHM9W10sdGhpcy5vdmVybGF5cz1bXSx0aGlzLl90aWNrQm91bmRzPVsxLzAsMS8wLC0xLzAsLTEvMF0sdGhpcy5zdGF0aWM9ITEsdGhpcy5kaXJ0eT0hMSx0aGlzLnBpY2tEaXJ0eT0hMSx0aGlzLnBpY2tEZWxheT0xMjAsdGhpcy5waWNrUmFkaXVzPTEwLHRoaXMuX3BpY2tUaW1lb3V0PW51bGwsdGhpcy5fZHJhd1BpY2s9dGhpcy5kcmF3UGljay5iaW5kKHRoaXMpLHRoaXMuX2RlcHRoQ291bnRlcj0wfXZhciBjPWwucHJvdG90eXBlO2Z1bmN0aW9uIHUodCl7Zm9yKHZhciBlPXQuc2xpY2UoKSxyPTA7cjxlLmxlbmd0aDsrK3IpZVtyXT1lW3JdLnNsaWNlKCk7cmV0dXJuIGV9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0LngtZS54fWMuc2V0RGlydHk9ZnVuY3Rpb24oKXt0aGlzLmRpcnR5PXRoaXMucGlja0RpcnR5PSEwfSxjLnNldE92ZXJsYXlEaXJ0eT1mdW5jdGlvbigpe3RoaXMuZGlydHk9ITB9LGMubmV4dERlcHRoVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVwdGhDb3VudGVyKysvNjU1MzZ9LGMuZHJhdz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2wsZT10aGlzLnNjcmVlbkJveCxyPXRoaXMudmlld0JveCxuPXRoaXMuZGF0YUJveCxpPXRoaXMucGl4ZWxSYXRpbyxhPXRoaXMuZ3JpZCxvPXRoaXMubGluZSxzPXRoaXMudGV4dCxsPXRoaXMub2JqZWN0cztpZih0aGlzLl9kZXB0aENvdW50ZXI9MCx0aGlzLnBpY2tEaXJ0eSYmKHRoaXMuX3BpY2tUaW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy5fcGlja1RpbWVvdXQpLHRoaXMucGlja0RpcnR5PSExLHRoaXMuX3BpY2tUaW1lb3V0PXNldFRpbWVvdXQodGhpcy5fZHJhd1BpY2ssdGhpcy5waWNrRGVsYXkpKSx0aGlzLmRpcnR5KXtpZih0aGlzLmRpcnR5PSExLHQuYmluZEZyYW1lYnVmZmVyKHQuRlJBTUVCVUZGRVIsbnVsbCksdC5lbmFibGUodC5TQ0lTU09SX1RFU1QpLHQuZGlzYWJsZSh0LkRFUFRIX1RFU1QpLHQuZGVwdGhGdW5jKHQuTEVTUyksdC5kZXB0aE1hc2soITEpLHQuZW5hYmxlKHQuQkxFTkQpLHQuYmxlbmRFcXVhdGlvbih0LkZVTkNfQURELHQuRlVOQ19BREQpLHQuYmxlbmRGdW5jKHQuT05FLHQuT05FX01JTlVTX1NSQ19BTFBIQSksdGhpcy5ib3JkZXJDb2xvcil7dC5zY2lzc29yKGVbMF0sZVsxXSxlWzJdLWVbMF0sZVszXS1lWzFdKTt2YXIgYz10aGlzLmJvcmRlckNvbG9yO3QuY2xlYXJDb2xvcihjWzBdKmNbM10sY1sxXSpjWzNdLGNbMl0qY1szXSxjWzNdKSx0LmNsZWFyKHQuQ09MT1JfQlVGRkVSX0JJVHx0LkRFUFRIX0JVRkZFUl9CSVQpfXQuc2Npc3NvcihyWzBdLHJbMV0sclsyXS1yWzBdLHJbM10tclsxXSksdC52aWV3cG9ydChyWzBdLHJbMV0sclsyXS1yWzBdLHJbM10tclsxXSk7dmFyIHU9dGhpcy5iYWNrZ3JvdW5kQ29sb3I7dC5jbGVhckNvbG9yKHVbMF0qdVszXSx1WzFdKnVbM10sdVsyXSp1WzNdLHVbM10pLHQuY2xlYXIodC5DT0xPUl9CVUZGRVJfQklUKSxhLmRyYXcoKTt2YXIgaD10aGlzLnplcm9MaW5lRW5hYmxlLGY9dGhpcy56ZXJvTGluZUNvbG9yLHA9dGhpcy56ZXJvTGluZVdpZHRoO2lmKGhbMF18fGhbMV0pe28uYmluZCgpO2Zvcih2YXIgZD0wO2Q8MjsrK2QpaWYoaFtkXSYmbltkXTw9MCYmbltkKzJdPj0wKXt2YXIgZz1lW2RdLW5bZF0qKGVbZCsyXS1lW2RdKS8obltkKzJdLW5bZF0pOzA9PT1kP28uZHJhd0xpbmUoZyxlWzFdLGcsZVszXSxwW2RdLGZbZF0pOm8uZHJhd0xpbmUoZVswXSxnLGVbMl0sZyxwW2RdLGZbZF0pfX1mb3IoZD0wO2Q8bC5sZW5ndGg7KytkKWxbZF0uZHJhdygpO3Qudmlld3BvcnQoZVswXSxlWzFdLGVbMl0tZVswXSxlWzNdLWVbMV0pLHQuc2Npc3NvcihlWzBdLGVbMV0sZVsyXS1lWzBdLGVbM10tZVsxXSksdGhpcy5ncmlkLmRyYXdUaWNrTWFya3MoKSxvLmJpbmQoKTt2YXIgdj10aGlzLmJvcmRlckxpbmVFbmFibGUsbT10aGlzLmJvcmRlckxpbmVXaWR0aCx5PXRoaXMuYm9yZGVyTGluZUNvbG9yO2Zvcih2WzFdJiZvLmRyYXdMaW5lKHJbMF0sclsxXS0uNSptWzFdKmksclswXSxyWzNdKy41Km1bM10qaSxtWzFdLHlbMV0pLHZbMF0mJm8uZHJhd0xpbmUoclswXS0uNSptWzBdKmksclsxXSxyWzJdKy41Km1bMl0qaSxyWzFdLG1bMF0seVswXSksdlszXSYmby5kcmF3TGluZShyWzJdLHJbMV0tLjUqbVsxXSppLHJbMl0sclszXSsuNSptWzNdKmksbVszXSx5WzNdKSx2WzJdJiZvLmRyYXdMaW5lKHJbMF0tLjUqbVswXSppLHJbM10sclsyXSsuNSptWzJdKmksclszXSxtWzJdLHlbMl0pLHMuYmluZCgpLGQ9MDtkPDI7KytkKXMuZHJhd1RpY2tzKGQpO3RoaXMudGl0bGVFbmFibGUmJnMuZHJhd1RpdGxlKCk7dmFyIHg9dGhpcy5vdmVybGF5cztmb3IoZD0wO2Q8eC5sZW5ndGg7KytkKXhbZF0uZHJhdygpO3QuZGlzYWJsZSh0LlNDSVNTT1JfVEVTVCksdC5kaXNhYmxlKHQuQkxFTkQpLHQuZGVwdGhNYXNrKCEwKX19LGMuZHJhd1BpY2s9ZnVuY3Rpb24oKXtpZighdGhpcy5zdGF0aWMpe3ZhciB0PXRoaXMucGlja0J1ZmZlcjt0aGlzLmdsO3RoaXMuX3BpY2tUaW1lb3V0PW51bGwsdC5iZWdpbigpO2Zvcih2YXIgZT0xLHI9dGhpcy5vYmplY3RzLG49MDtuPHIubGVuZ3RoOysrbillPXJbbl0uZHJhd1BpY2soZSk7dC5lbmQoKX19LGMucGljaz1mdW5jdGlvbih0LGUpe2lmKCF0aGlzLnN0YXRpYyl7dmFyIHI9dGhpcy5waXhlbFJhdGlvLG49dGhpcy5waWNrUGl4ZWxSYXRpbyxpPXRoaXMudmlld0JveCxhPTB8TWF0aC5yb3VuZCgodC1pWzBdL3IpKm4pLG89MHxNYXRoLnJvdW5kKChlLWlbMV0vcikqbikscz10aGlzLnBpY2tCdWZmZXIucXVlcnkoYSxvLHRoaXMucGlja1JhZGl1cyk7aWYoIXMpcmV0dXJuIG51bGw7Zm9yKHZhciBsPXMuaWQrKHMudmFsdWVbMF08PDgpKyhzLnZhbHVlWzFdPDwxNikrKHMudmFsdWVbMl08PDI0KSxjPXRoaXMub2JqZWN0cyx1PTA7dTxjLmxlbmd0aDsrK3Upe3ZhciBoPWNbdV0ucGljayhhLG8sbCk7aWYoaClyZXR1cm4gaH1yZXR1cm4gbnVsbH19LGMuc2V0U2NyZWVuQm94PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NyZWVuQm94LHI9dGhpcy5waXhlbFJhdGlvO2VbMF09MHxNYXRoLnJvdW5kKHRbMF0qciksZVsxXT0wfE1hdGgucm91bmQodFsxXSpyKSxlWzJdPTB8TWF0aC5yb3VuZCh0WzJdKnIpLGVbM109MHxNYXRoLnJvdW5kKHRbM10qciksdGhpcy5zZXREaXJ0eSgpfSxjLnNldERhdGFCb3g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kYXRhQm94OyhlWzBdIT09dFswXXx8ZVsxXSE9PXRbMV18fGVbMl0hPT10WzJdfHxlWzNdIT09dFszXSkmJihlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sdGhpcy5zZXREaXJ0eSgpKX0sYy5zZXRWaWV3Qm94PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGl4ZWxSYXRpbyxyPXRoaXMudmlld0JveDtyWzBdPTB8TWF0aC5yb3VuZCh0WzBdKmUpLHJbMV09MHxNYXRoLnJvdW5kKHRbMV0qZSksclsyXT0wfE1hdGgucm91bmQodFsyXSplKSxyWzNdPTB8TWF0aC5yb3VuZCh0WzNdKmUpO3ZhciBuPXRoaXMucGlja1BpeGVsUmF0aW87dGhpcy5waWNrQnVmZmVyLnNoYXBlPVswfE1hdGgucm91bmQoKHRbMl0tdFswXSkqbiksMHxNYXRoLnJvdW5kKCh0WzNdLXRbMV0pKm4pXSx0aGlzLnNldERpcnR5KCl9LGMudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e307dmFyIGU9dGhpcy5nbDt0aGlzLnBpeGVsUmF0aW89dC5waXhlbFJhdGlvfHwxO3ZhciByPXRoaXMucGl4ZWxSYXRpbzt0aGlzLnBpY2tQaXhlbFJhdGlvPU1hdGgubWF4KHIsMSksdGhpcy5zZXRTY3JlZW5Cb3godC5zY3JlZW5Cb3h8fFswLDAsZS5kcmF3aW5nQnVmZmVyV2lkdGgvcixlLmRyYXdpbmdCdWZmZXJIZWlnaHQvcl0pO3RoaXMuc2NyZWVuQm94O3RoaXMuc2V0Vmlld0JveCh0LnZpZXdCb3h8fFsuMTI1Kih0aGlzLnNjcmVlbkJveFsyXS10aGlzLnNjcmVlbkJveFswXSkvciwuMTI1Kih0aGlzLnNjcmVlbkJveFszXS10aGlzLnNjcmVlbkJveFsxXSkvciwuODc1Kih0aGlzLnNjcmVlbkJveFsyXS10aGlzLnNjcmVlbkJveFswXSkvciwuODc1Kih0aGlzLnNjcmVlbkJveFszXS10aGlzLnNjcmVlbkJveFsxXSkvcl0pO3ZhciBuPXRoaXMudmlld0JveCxpPShuWzJdLW5bMF0pLyhuWzNdLW5bMV0pO3RoaXMuc2V0RGF0YUJveCh0LmRhdGFCb3h8fFstMTAsLTEwL2ksMTAsMTAvaV0pLHRoaXMuYm9yZGVyQ29sb3I9ITEhPT10LmJvcmRlckNvbG9yJiYodC5ib3JkZXJDb2xvcnx8WzAsMCwwLDBdKS5zbGljZSgpLHRoaXMuYmFja2dyb3VuZENvbG9yPSh0LmJhY2tncm91bmRDb2xvcnx8WzAsMCwwLDBdKS5zbGljZSgpLHRoaXMuZ3JpZExpbmVFbmFibGU9KHQuZ3JpZExpbmVFbmFibGV8fFshMCwhMF0pLnNsaWNlKCksdGhpcy5ncmlkTGluZVdpZHRoPSh0LmdyaWRMaW5lV2lkdGh8fFsxLDFdKS5zbGljZSgpLHRoaXMuZ3JpZExpbmVDb2xvcj11KHQuZ3JpZExpbmVDb2xvcnx8W1suNSwuNSwuNSwxXSxbLjUsLjUsLjUsMV1dKSx0aGlzLnplcm9MaW5lRW5hYmxlPSh0Lnplcm9MaW5lRW5hYmxlfHxbITAsITBdKS5zbGljZSgpLHRoaXMuemVyb0xpbmVXaWR0aD0odC56ZXJvTGluZVdpZHRofHxbNCw0XSkuc2xpY2UoKSx0aGlzLnplcm9MaW5lQ29sb3I9dSh0Lnplcm9MaW5lQ29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdXSksdGhpcy50aWNrTWFya0xlbmd0aD0odC50aWNrTWFya0xlbmd0aHx8WzAsMCwwLDBdKS5zbGljZSgpLHRoaXMudGlja01hcmtXaWR0aD0odC50aWNrTWFya1dpZHRofHxbMCwwLDAsMF0pLnNsaWNlKCksdGhpcy50aWNrTWFya0NvbG9yPXUodC50aWNrTWFya0NvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSksdGhpcy50aXRsZUNlbnRlcj0odC50aXRsZUNlbnRlcnx8Wy41KihuWzBdK25bMl0pL3IsKG5bM10rMTIwKS9yXSkuc2xpY2UoKSx0aGlzLnRpdGxlRW5hYmxlPSEoXCJ0aXRsZUVuYWJsZVwiaW4gdCYmIXQudGl0bGVFbmFibGUpLHRoaXMudGl0bGVBbmdsZT10LnRpdGxlQW5nbGV8fDAsdGhpcy50aXRsZUNvbG9yPSh0LnRpdGxlQ29sb3J8fFswLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmxhYmVsUGFkPSh0LmxhYmVsUGFkfHxbMTUsMTUsMTUsMTVdKS5zbGljZSgpLHRoaXMubGFiZWxBbmdsZT0odC5sYWJlbEFuZ2xlfHxbMCxNYXRoLlBJLzIsMCwzKk1hdGguUEkvMl0pLnNsaWNlKCksdGhpcy5sYWJlbEVuYWJsZT0odC5sYWJlbEVuYWJsZXx8WyEwLCEwLCEwLCEwXSkuc2xpY2UoKSx0aGlzLmxhYmVsQ29sb3I9dSh0LmxhYmVsQ29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dKSx0aGlzLnRpY2tQYWQ9KHQudGlja1BhZHx8WzE1LDE1LDE1LDE1XSkuc2xpY2UoKSx0aGlzLnRpY2tBbmdsZT0odC50aWNrQW5nbGV8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLnRpY2tFbmFibGU9KHQudGlja0VuYWJsZXx8WyEwLCEwLCEwLCEwXSkuc2xpY2UoKSx0aGlzLnRpY2tDb2xvcj11KHQudGlja0NvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSksdGhpcy5ib3JkZXJMaW5lRW5hYmxlPSh0LmJvcmRlckxpbmVFbmFibGV8fFshMCwhMCwhMCwhMF0pLnNsaWNlKCksdGhpcy5ib3JkZXJMaW5lV2lkdGg9KHQuYm9yZGVyTGluZVdpZHRofHxbMiwyLDIsMl0pLnNsaWNlKCksdGhpcy5ib3JkZXJMaW5lQ29sb3I9dSh0LmJvcmRlckxpbmVDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pO3ZhciBhPXQudGlja3N8fFtbXSxbXV0sbz10aGlzLl90aWNrQm91bmRzO29bMF09b1sxXT0xLzAsb1syXT1vWzNdPS0xLzA7Zm9yKHZhciBzPTA7czwyOysrcyl7dmFyIGw9YVtzXS5zbGljZSgwKTswIT09bC5sZW5ndGgmJihsLnNvcnQoaCksb1tzXT1NYXRoLm1pbihvW3NdLGxbMF0ueCksb1tzKzJdPU1hdGgubWF4KG9bcysyXSxsW2wubGVuZ3RoLTFdLngpKX10aGlzLmdyaWQudXBkYXRlKHtib3VuZHM6byx0aWNrczphfSksdGhpcy50ZXh0LnVwZGF0ZSh7Ym91bmRzOm8sdGlja3M6YSxsYWJlbHM6dC5sYWJlbHN8fFtcInhcIixcInlcIl0sbGFiZWxTaXplOnQubGFiZWxTaXplfHxbMTIsMTJdLGxhYmVsRm9udDp0LmxhYmVsRm9udHx8W1wic2Fucy1zZXJpZlwiLFwic2Fucy1zZXJpZlwiXSx0aXRsZTp0LnRpdGxlfHxcIlwiLHRpdGxlU2l6ZTp0LnRpdGxlU2l6ZXx8MTgsdGl0bGVGb250OnQudGl0bGVGb250fHxcInNhbnMtc2VyaWZcIn0pLHRoaXMuc3RhdGljPSEhdC5zdGF0aWMsdGhpcy5zZXREaXJ0eSgpfSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmJveC5kaXNwb3NlKCksdGhpcy5ncmlkLmRpc3Bvc2UoKSx0aGlzLnRleHQuZGlzcG9zZSgpLHRoaXMubGluZS5kaXNwb3NlKCk7Zm9yKHZhciB0PXRoaXMub2JqZWN0cy5sZW5ndGgtMTt0Pj0wOy0tdCl0aGlzLm9iamVjdHNbdF0uZGlzcG9zZSgpO3RoaXMub2JqZWN0cy5sZW5ndGg9MDtmb3IodD10aGlzLm92ZXJsYXlzLmxlbmd0aC0xO3Q+PTA7LS10KXRoaXMub3ZlcmxheXNbdF0uZGlzcG9zZSgpO3RoaXMub3ZlcmxheXMubGVuZ3RoPTAsdGhpcy5nbD1udWxsfSxjLmFkZE9iamVjdD1mdW5jdGlvbih0KXt0aGlzLm9iamVjdHMuaW5kZXhPZih0KTwwJiYodGhpcy5vYmplY3RzLnB1c2godCksdGhpcy5zZXREaXJ0eSgpKX0sYy5yZW1vdmVPYmplY3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMub2JqZWN0cyxyPTA7cjxlLmxlbmd0aDsrK3IpaWYoZVtyXT09PXQpe2Uuc3BsaWNlKHIsMSksdGhpcy5zZXREaXJ0eSgpO2JyZWFrfX0sYy5hZGRPdmVybGF5PWZ1bmN0aW9uKHQpe3RoaXMub3ZlcmxheXMuaW5kZXhPZih0KTwwJiYodGhpcy5vdmVybGF5cy5wdXNoKHQpLHRoaXMuc2V0T3ZlcmxheURpcnR5KCkpfSxjLnJlbW92ZU92ZXJsYXk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMub3ZlcmxheXMscj0wO3I8ZS5sZW5ndGg7KytyKWlmKGVbcl09PT10KXtlLnNwbGljZShyLDEpLHRoaXMuc2V0T3ZlcmxheURpcnR5KCk7YnJlYWt9fX0se1wiLi9saWIvYm94XCI6Mjc4LFwiLi9saWIvZ3JpZFwiOjI3OSxcIi4vbGliL2xpbmVcIjoyODAsXCIuL2xpYi90ZXh0XCI6MjgyLFwiZ2wtc2VsZWN0LXN0YXRpY1wiOjI5N31dLDI4NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Q9dHx8ZG9jdW1lbnQuYm9keSxlPWV8fHt9O3ZhciByPVsuMDEsMS8wXTtcImRpc3RhbmNlTGltaXRzXCJpbiBlJiYoclswXT1lLmRpc3RhbmNlTGltaXRzWzBdLHJbMV09ZS5kaXN0YW5jZUxpbWl0c1sxXSk7XCJ6b29tTWluXCJpbiBlJiYoclswXT1lLnpvb21NaW4pO1wiem9vbU1heFwiaW4gZSYmKHJbMV09ZS56b29tTWF4KTt2YXIgYz1pKHtjZW50ZXI6ZS5jZW50ZXJ8fFswLDAsMF0sdXA6ZS51cHx8WzAsMSwwXSxleWU6ZS5leWV8fFswLDAsMTBdLG1vZGU6ZS5tb2RlfHxcIm9yYml0XCIsZGlzdGFuY2VMaW1pdHM6cn0pLHU9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdLGg9MCxmPXQuY2xpZW50V2lkdGgscD10LmNsaWVudEhlaWdodCxkPXtrZXlCaW5kaW5nTW9kZTpcInJvdGF0ZVwiLGVuYWJsZVdoZWVsOiEwLHZpZXc6YyxlbGVtZW50OnQsZGVsYXk6ZS5kZWxheXx8MTYscm90YXRlU3BlZWQ6ZS5yb3RhdGVTcGVlZHx8MSx6b29tU3BlZWQ6ZS56b29tU3BlZWR8fDEsdHJhbnNsYXRlU3BlZWQ6ZS50cmFuc2xhdGVTcGVlZHx8MSxmbGlwWDohIWUuZmxpcFgsZmxpcFk6ISFlLmZsaXBZLG1vZGVzOmMubW9kZXMsX29ydGhvOmUuX29ydGhvfHxlLnByb2plY3Rpb24mJlwib3J0aG9ncmFwaGljXCI9PT1lLnByb2plY3Rpb24udHlwZXx8ITEsdGljazpmdW5jdGlvbigpe3ZhciBlPW4oKSxyPXRoaXMuZGVsYXksaT1lLTIqcjtjLmlkbGUoZS1yKSxjLnJlY2FsY01hdHJpeChpKSxjLmZsdXNoKGUtKDEwMCsyKnIpKTtmb3IodmFyIGE9ITAsbz1jLmNvbXB1dGVkTWF0cml4LHM9MDtzPDE2OysrcylhPWEmJnVbc109PT1vW3NdLHVbc109b1tzXTt2YXIgbD10LmNsaWVudFdpZHRoPT09ZiYmdC5jbGllbnRIZWlnaHQ9PT1wO3JldHVybiBmPXQuY2xpZW50V2lkdGgscD10LmNsaWVudEhlaWdodCxhPyFsOihoPU1hdGguZXhwKGMuY29tcHV0ZWRSYWRpdXNbMF0pLCEwKX0sbG9va0F0OmZ1bmN0aW9uKHQsZSxyKXtjLmxvb2tBdChjLmxhc3RUKCksdCxlLHIpfSxyb3RhdGU6ZnVuY3Rpb24odCxlLHIpe2Mucm90YXRlKGMubGFzdFQoKSx0LGUscil9LHBhbjpmdW5jdGlvbih0LGUscil7Yy5wYW4oYy5sYXN0VCgpLHQsZSxyKX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSxyKXtjLnRyYW5zbGF0ZShjLmxhc3RUKCksdCxlLHIpfX07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGQse21hdHJpeDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuY29tcHV0ZWRNYXRyaXh9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5zZXRNYXRyaXgoYy5sYXN0VCgpLHQpLGMuY29tcHV0ZWRNYXRyaXh9LGVudW1lcmFibGU6ITB9LG1vZGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmdldE1vZGUoKX0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPWMuY29tcHV0ZWRVcC5zbGljZSgpLHI9Yy5jb21wdXRlZEV5ZS5zbGljZSgpLGk9Yy5jb21wdXRlZENlbnRlci5zbGljZSgpO2lmKGMuc2V0TW9kZSh0KSxcInR1cm50YWJsZVwiPT09dCl7dmFyIGE9bigpO2MuX2FjdGl2ZS5sb29rQXQoYSxyLGksZSksYy5fYWN0aXZlLmxvb2tBdChhKzUwMCxyLGksWzAsMCwxXSksYy5fYWN0aXZlLmZsdXNoKGEpfXJldHVybiBjLmdldE1vZGUoKX0sZW51bWVyYWJsZTohMH0sY2VudGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5jb21wdXRlZENlbnRlcn0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLmxvb2tBdChjLmxhc3RUKCksbnVsbCx0KSxjLmNvbXB1dGVkQ2VudGVyfSxlbnVtZXJhYmxlOiEwfSxleWU6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmNvbXB1dGVkRXllfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGMubG9va0F0KGMubGFzdFQoKSx0KSxjLmNvbXB1dGVkRXllfSxlbnVtZXJhYmxlOiEwfSx1cDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuY29tcHV0ZWRVcH0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLmxvb2tBdChjLmxhc3RUKCksbnVsbCxudWxsLHQpLGMuY29tcHV0ZWRVcH0sZW51bWVyYWJsZTohMH0sZGlzdGFuY2U6e2dldDpmdW5jdGlvbigpe3JldHVybiBofSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGMuc2V0RGlzdGFuY2UoYy5sYXN0VCgpLHQpLHR9LGVudW1lcmFibGU6ITB9LGRpc3RhbmNlTGltaXRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5nZXREaXN0YW5jZUxpbWl0cyhyKX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLnNldERpc3RhbmNlTGltaXRzKHQpLHR9LGVudW1lcmFibGU6ITB9fSksdC5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpLCExfSksZC5fbGFzdFg9LTEsZC5fbGFzdFk9LTEsZC5fbGFzdE1vZHM9e3NoaWZ0OiExLGNvbnRyb2w6ITEsYWx0OiExLG1ldGE6ITF9LGQuZW5hYmxlTW91c2VMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUscixpLGEpe3ZhciBvPWQua2V5QmluZGluZ01vZGU7aWYoITEhPT1vKXt2YXIgcz1cInJvdGF0ZVwiPT09byxsPVwicGFuXCI9PT1vLHU9XCJ6b29tXCI9PT1vLGY9ISFhLmNvbnRyb2wscD0hIWEuYWx0LGc9ISFhLnNoaWZ0LHY9ISEoMSZlKSxtPSEhKDImZSkseT0hISg0JmUpLHg9MS90LmNsaWVudEhlaWdodCxiPXgqKHItZC5fbGFzdFgpLF89eCooaS1kLl9sYXN0WSksdz1kLmZsaXBYPzE6LTEsaz1kLmZsaXBZPzE6LTEsQT1NYXRoLlBJKmQucm90YXRlU3BlZWQsVD1uKCk7aWYoLTEhPT1kLl9sYXN0WCYmLTEhPT1kLl9sYXN0WSYmKChzJiZ2JiYhZiYmIXAmJiFnfHx2JiYhZiYmIXAmJmcpJiZjLnJvdGF0ZShULHcqQSpiLC1rKkEqXywwKSwobCYmdiYmIWYmJiFwJiYhZ3x8bXx8diYmZiYmIXAmJiFnKSYmYy5wYW4oVCwtZC50cmFuc2xhdGVTcGVlZCpiKmgsZC50cmFuc2xhdGVTcGVlZCpfKmgsMCksdSYmdiYmIWYmJiFwJiYhZ3x8eXx8diYmIWYmJnAmJiFnKSl7dmFyIE09LWQuem9vbVNwZWVkKl8vd2luZG93LmlubmVySGVpZ2h0KihULWMubGFzdFQoKSkqMTAwO2MucGFuKFQsMCwwLGgqKE1hdGguZXhwKE0pLTEpKX1yZXR1cm4gZC5fbGFzdFg9cixkLl9sYXN0WT1pLGQuX2xhc3RNb2RzPWEsITB9fWQubW91c2VMaXN0ZW5lcj1hKHQsZSksdC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLGZ1bmN0aW9uKHIpe3ZhciBuPXMoci5jaGFuZ2VkVG91Y2hlc1swXSx0KTtlKDAsblswXSxuWzFdLGQuX2xhc3RNb2RzKSxlKDEsblswXSxuWzFdLGQuX2xhc3RNb2RzKSxyLnByZXZlbnREZWZhdWx0KCl9LCEhbCYme3Bhc3NpdmU6ITF9KSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIixmdW5jdGlvbihyKXt2YXIgbj1zKHIuY2hhbmdlZFRvdWNoZXNbMF0sdCk7ZSgxLG5bMF0sblsxXSxkLl9sYXN0TW9kcyksci5wcmV2ZW50RGVmYXVsdCgpfSwhIWwmJntwYXNzaXZlOiExfSksdC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIixmdW5jdGlvbih0KXtlKDAsZC5fbGFzdFgsZC5fbGFzdFksZC5fbGFzdE1vZHMpLHQucHJldmVudERlZmF1bHQoKX0sISFsJiZ7cGFzc2l2ZTohMX0pLGQud2hlZWxMaXN0ZW5lcj1vKHQsZnVuY3Rpb24odCxlKXtpZighMSE9PWQua2V5QmluZGluZ01vZGUmJmQuZW5hYmxlV2hlZWwpe3ZhciByPWQuZmxpcFg/MTotMSxpPWQuZmxpcFk/MTotMSxhPW4oKTtpZihNYXRoLmFicyh0KT5NYXRoLmFicyhlKSljLnJvdGF0ZShhLDAsMCwtdCpyKk1hdGguUEkqZC5yb3RhdGVTcGVlZC93aW5kb3cuaW5uZXJXaWR0aCk7ZWxzZSBpZighZC5fb3J0aG8pe3ZhciBvPS1kLnpvb21TcGVlZCppKmUvd2luZG93LmlubmVySGVpZ2h0KihhLWMubGFzdFQoKSkvMjA7Yy5wYW4oYSwwLDAsaCooTWF0aC5leHAobyktMSkpfX19LCEwKX0sZC5lbmFibGVNb3VzZUxpc3RlbmVycygpLGR9O3ZhciBuPXQoXCJyaWdodC1ub3dcIiksaT10KFwiM2Qtdmlld1wiKSxhPXQoXCJtb3VzZS1jaGFuZ2VcIiksbz10KFwibW91c2Utd2hlZWxcIikscz10KFwibW91c2UtZXZlbnQtb2Zmc2V0XCIpLGw9dChcImhhcy1wYXNzaXZlLWV2ZW50c1wiKX0se1wiM2Qtdmlld1wiOjQ4LFwiaGFzLXBhc3NpdmUtZXZlbnRzXCI6NDA0LFwibW91c2UtY2hhbmdlXCI6NDI4LFwibW91c2UtZXZlbnQtb2Zmc2V0XCI6NDI5LFwibW91c2Utd2hlZWxcIjo0MzEsXCJyaWdodC1ub3dcIjo0ODl9XSwyODY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiZ2xzbGlmeVwiKSxpPXQoXCJnbC1zaGFkZXJcIiksYT1uKFtcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XFxudmFyeWluZyB2ZWMyIHV2O1xcbnZvaWQgbWFpbigpIHtcXG4gIHV2ID0gcG9zaXRpb247XFxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAsIDEpO1xcbn1cIl0pLG89bihbXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnVuaWZvcm0gc2FtcGxlcjJEIGFjY3VtQnVmZmVyO1xcbnZhcnlpbmcgdmVjMiB1djtcXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWM0IGFjY3VtID0gdGV4dHVyZTJEKGFjY3VtQnVmZmVyLCAwLjUgKiAodXYgKyAxLjApKTtcXG4gIGdsX0ZyYWdDb2xvciA9IG1pbih2ZWM0KDEsMSwxLDEpLCBhY2N1bSk7XFxufVwiXSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQsYSxvLG51bGwsW3tuYW1lOlwicG9zaXRpb25cIix0eXBlOlwidmVjMlwifV0pfX0se1wiZ2wtc2hhZGVyXCI6Mjk4LGdsc2xpZnk6NDAyfV0sMjg3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vY2FtZXJhLmpzXCIpLGk9dChcImdsLWF4ZXMzZFwiKSxhPXQoXCJnbC1heGVzM2QvcHJvcGVydGllc1wiKSxvPXQoXCJnbC1zcGlrZXMzZFwiKSxzPXQoXCJnbC1zZWxlY3Qtc3RhdGljXCIpLGw9dChcImdsLWZib1wiKSxjPXQoXCJhLWJpZy10cmlhbmdsZVwiKSx1PXQoXCJtb3VzZS1jaGFuZ2VcIiksaD10KFwibW91c2Utd2hlZWxcIiksZj10KFwiZ2wtbWF0NC9wZXJzcGVjdGl2ZVwiKSxwPXQoXCJnbC1tYXQ0L29ydGhvXCIpLGQ9dChcIi4vbGliL3NoYWRlclwiKSxnPXQoXCJpcy1tb2JpbGVcIikoe3RhYmxldDohMH0pO2Z1bmN0aW9uIHYoKXt0aGlzLm1vdXNlPVstMSwtMV0sdGhpcy5zY3JlZW49bnVsbCx0aGlzLmRpc3RhbmNlPTEvMCx0aGlzLmluZGV4PW51bGwsdGhpcy5kYXRhQ29vcmRpbmF0ZT1udWxsLHRoaXMuZGF0YVBvc2l0aW9uPW51bGwsdGhpcy5vYmplY3Q9bnVsbCx0aGlzLmRhdGE9bnVsbH1mdW5jdGlvbiBtKHQpe3ZhciBlPU1hdGgucm91bmQoTWF0aC5sb2coTWF0aC5hYnModCkpL01hdGgubG9nKDEwKSk7aWYoZTwwKXt2YXIgcj1NYXRoLnJvdW5kKE1hdGgucG93KDEwLC1lKSk7cmV0dXJuIE1hdGguY2VpbCh0KnIpL3J9aWYoZT4wKXtyPU1hdGgucm91bmQoTWF0aC5wb3coMTAsZSkpO3JldHVybiBNYXRoLmNlaWwodC9yKSpyfXJldHVybiBNYXRoLmNlaWwodCl9ZnVuY3Rpb24geSh0KXtyZXR1cm5cImJvb2xlYW5cIiE9dHlwZW9mIHR8fHR9ZS5leHBvcnRzPXtjcmVhdGVTY2VuZTpmdW5jdGlvbih0KXsodD10fHx7fSkuY2FtZXJhPXQuY2FtZXJhfHx7fTt2YXIgZT10LmNhbnZhcztpZighZSlpZihlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksdC5jb250YWluZXIpe3ZhciByPXQuY29udGFpbmVyO3IuYXBwZW5kQ2hpbGQoZSl9ZWxzZSBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpO3ZhciB4PXQuZ2w7eHx8KHg9ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsO3RyeXsocj10LmdldENvbnRleHQoXCJ3ZWJnbFwiLGUpKXx8KHI9dC5nZXRDb250ZXh0KFwiZXhwZXJpbWVudGFsLXdlYmdsXCIsZSkpfWNhdGNoKHQpe3JldHVybiBudWxsfXJldHVybiByfShlLHQuZ2xPcHRpb25zfHx7cHJlbXVsdGlwbGllZEFscGhhOiEwLGFudGlhbGlhczohMCxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6Z30pKTtpZigheCl0aHJvdyBuZXcgRXJyb3IoXCJ3ZWJnbCBub3Qgc3VwcG9ydGVkXCIpO3ZhciBiPXQuYm91bmRzfHxbWy0xMCwtMTAsLTEwXSxbMTAsMTAsMTBdXSxfPW5ldyB2LHc9bCh4LFt4LmRyYXdpbmdCdWZmZXJXaWR0aCx4LmRyYXdpbmdCdWZmZXJIZWlnaHRdLHtwcmVmZXJGbG9hdDohZ30pLGs9ZCh4KSxBPXQuY2FtZXJhT2JqZWN0JiYhMD09PXQuY2FtZXJhT2JqZWN0Ll9vcnRob3x8dC5jYW1lcmEucHJvamVjdGlvbiYmXCJvcnRob2dyYXBoaWNcIj09PXQuY2FtZXJhLnByb2plY3Rpb24udHlwZXx8ITEsVD17ZXllOnQuY2FtZXJhLmV5ZXx8WzIsMCwwXSxjZW50ZXI6dC5jYW1lcmEuY2VudGVyfHxbMCwwLDBdLHVwOnQuY2FtZXJhLnVwfHxbMCwxLDBdLHpvb21NaW46dC5jYW1lcmEuem9vbU1heHx8LjEsem9vbU1heDp0LmNhbWVyYS56b29tTWlufHwxMDAsbW9kZTp0LmNhbWVyYS5tb2RlfHxcInR1cm50YWJsZVwiLF9vcnRobzpBfSxNPXQuYXhlc3x8e30sUz1pKHgsTSk7Uy5lbmFibGU9IU0uZGlzYWJsZTt2YXIgRT10LnNwaWtlc3x8e30sQz1vKHgsRSksTD1bXSx6PVtdLE89W10sST1bXSxEPSEwLFA9ITAsUj1uZXcgQXJyYXkoMTYpLEY9bmV3IEFycmF5KDE2KSxCPXt2aWV3Om51bGwscHJvamVjdGlvbjpSLG1vZGVsOkYsX29ydGhvOiExfSxQPSEwLE49W3guZHJhd2luZ0J1ZmZlcldpZHRoLHguZHJhd2luZ0J1ZmZlckhlaWdodF0saj10LmNhbWVyYU9iamVjdHx8bihlLFQpLFY9e2dsOngsY29udGV4dExvc3Q6ITEscGl4ZWxSYXRpbzp0LnBpeGVsUmF0aW98fDEsY2FudmFzOmUsc2VsZWN0aW9uOl8sY2FtZXJhOmosYXhlczpTLGF4ZXNQaXhlbHM6bnVsbCxzcGlrZXM6Qyxib3VuZHM6YixvYmplY3RzOkwsc2hhcGU6Tixhc3BlY3Q6dC5hc3BlY3RSYXRpb3x8WzEsMSwxXSxwaWNrUmFkaXVzOnQucGlja1JhZGl1c3x8MTAsek5lYXI6dC56TmVhcnx8LjAxLHpGYXI6dC56RmFyfHwxZTMsZm92eTp0LmZvdnl8fE1hdGguUEkvNCxjbGVhckNvbG9yOnQuY2xlYXJDb2xvcnx8WzAsMCwwLDBdLGF1dG9SZXNpemU6eSh0LmF1dG9SZXNpemUpLGF1dG9Cb3VuZHM6eSh0LmF1dG9Cb3VuZHMpLGF1dG9TY2FsZTohIXQuYXV0b1NjYWxlLGF1dG9DZW50ZXI6eSh0LmF1dG9DZW50ZXIpLGNsaXBUb0JvdW5kczp5KHQuY2xpcFRvQm91bmRzKSxzbmFwVG9EYXRhOiEhdC5zbmFwVG9EYXRhLG9uc2VsZWN0OnQub25zZWxlY3R8fG51bGwsb25yZW5kZXI6dC5vbnJlbmRlcnx8bnVsbCxvbmNsaWNrOnQub25jbGlja3x8bnVsbCxjYW1lcmFQYXJhbXM6QixvbmNvbnRleHRsb3NzOm51bGwsbW91c2VMaXN0ZW5lcjpudWxsLF9zdG9wcGVkOiExfSxVPVt4LmRyYXdpbmdCdWZmZXJXaWR0aC9WLnBpeGVsUmF0aW98MCx4LmRyYXdpbmdCdWZmZXJIZWlnaHQvVi5waXhlbFJhdGlvfDBdO2Z1bmN0aW9uIHEoKXtpZighVi5fc3RvcHBlZCYmVi5hdXRvUmVzaXplKXt2YXIgdD1lLnBhcmVudE5vZGUscj0xLG49MTt0JiZ0IT09ZG9jdW1lbnQuYm9keT8ocj10LmNsaWVudFdpZHRoLG49dC5jbGllbnRIZWlnaHQpOihyPXdpbmRvdy5pbm5lcldpZHRoLG49d2luZG93LmlubmVySGVpZ2h0KTt2YXIgaT0wfE1hdGguY2VpbChyKlYucGl4ZWxSYXRpbyksYT0wfE1hdGguY2VpbChuKlYucGl4ZWxSYXRpbyk7aWYoaSE9PWUud2lkdGh8fGEhPT1lLmhlaWdodCl7ZS53aWR0aD1pLGUuaGVpZ2h0PWE7dmFyIG89ZS5zdHlsZTtvLnBvc2l0aW9uPW8ucG9zaXRpb258fFwiYWJzb2x1dGVcIixvLmxlZnQ9XCIwcHhcIixvLnRvcD1cIjBweFwiLG8ud2lkdGg9citcInB4XCIsby5oZWlnaHQ9bitcInB4XCIsRD0hMH19fVYuYXV0b1Jlc2l6ZSYmcSgpO2Z1bmN0aW9uIEgoKXtmb3IodmFyIHQ9TC5sZW5ndGgsZT1JLmxlbmd0aCxyPTA7cjxlOysrcilPW3JdPTA7dDpmb3IodmFyIHI9MDtyPHQ7KytyKXt2YXIgbj1MW3JdLGk9bi5waWNrU2xvdHM7aWYoaSl7Zm9yKHZhciBhPTA7YTxlOysrYSlpZihPW2FdK2k8MjU1KXt6W3JdPWEsbi5zZXRQaWNrQmFzZShPW2FdKzEpLE9bYV0rPWk7Y29udGludWUgdH12YXIgbz1zKHgsTik7eltyXT1lLEkucHVzaChvKSxPLnB1c2goaSksbi5zZXRQaWNrQmFzZSgxKSxlKz0xfWVsc2UgeltyXT0tMX1mb3IoO2U+MCYmMD09PU9bZS0xXTspTy5wb3AoKSxJLnBvcCgpLmRpc3Bvc2UoKX1mdW5jdGlvbiBHKCl7aWYoVi5jb250ZXh0TG9zdClyZXR1cm4hMDt4LmlzQ29udGV4dExvc3QoKSYmKFYuY29udGV4dExvc3Q9ITAsVi5tb3VzZUxpc3RlbmVyLmVuYWJsZWQ9ITEsVi5zZWxlY3Rpb24ub2JqZWN0PW51bGwsVi5vbmNvbnRleHRsb3NzJiZWLm9uY29udGV4dGxvc3MoKSl9d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIixxKSxWLnVwZGF0ZT1mdW5jdGlvbih0KXtWLl9zdG9wcGVkfHwodD10fHx7fSxEPSEwLFA9ITApfSxWLmFkZD1mdW5jdGlvbih0KXtWLl9zdG9wcGVkfHwodC5heGVzPVMsTC5wdXNoKHQpLHoucHVzaCgtMSksRD0hMCxQPSEwLEgoKSl9LFYucmVtb3ZlPWZ1bmN0aW9uKHQpe2lmKCFWLl9zdG9wcGVkKXt2YXIgZT1MLmluZGV4T2YodCk7ZTwwfHwoTC5zcGxpY2UoZSwxKSx6LnBvcCgpLEQ9ITAsUD0hMCxIKCkpfX0sVi5kaXNwb3NlPWZ1bmN0aW9uKCl7aWYoIVYuX3N0b3BwZWQmJihWLl9zdG9wcGVkPSEwLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIscSksZS5yZW1vdmVFdmVudExpc3RlbmVyKFwid2ViZ2xjb250ZXh0bG9zdFwiLEcpLFYubW91c2VMaXN0ZW5lci5lbmFibGVkPSExLCFWLmNvbnRleHRMb3N0KSl7Uy5kaXNwb3NlKCksQy5kaXNwb3NlKCk7Zm9yKHZhciB0PTA7dDxMLmxlbmd0aDsrK3QpTFt0XS5kaXNwb3NlKCk7dy5kaXNwb3NlKCk7Zm9yKHZhciB0PTA7dDxJLmxlbmd0aDsrK3QpSVt0XS5kaXNwb3NlKCk7ay5kaXNwb3NlKCkseD1udWxsLFM9bnVsbCxDPW51bGwsTD1bXX19LFYud2hlZWxMaXN0ZW5lcj1oKGUsZnVuY3Rpb24odCxlKXtpZighMSE9PWoua2V5QmluZGluZ01vZGUmJmouZW5hYmxlV2hlZWwmJmouX29ydGhvKXt2YXIgcj10PmU/MS4xOjEvMS4xO1YuYXNwZWN0WzBdKj1yLFYuYXNwZWN0WzFdKj1yLFYuYXNwZWN0WzJdKj1yLFYucmVkcmF3KCl9fSwhMCksVi5fbW91c2VSb3RhdGluZz0hMSxWLl9wcmV2QnV0dG9ucz0wLFYuZW5hYmxlTW91c2VMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtWLm1vdXNlTGlzdGVuZXI9dShlLGZ1bmN0aW9uKHQsZSxyKXtpZighVi5fc3RvcHBlZCl7dmFyIG49SS5sZW5ndGgsaT1MLmxlbmd0aCxhPV8ub2JqZWN0O18uZGlzdGFuY2U9MS8wLF8ubW91c2VbMF09ZSxfLm1vdXNlWzFdPXIsXy5vYmplY3Q9bnVsbCxfLnNjcmVlbj1udWxsLF8uZGF0YUNvb3JkaW5hdGU9Xy5kYXRhUG9zaXRpb249bnVsbDt2YXIgbz0hMTtpZih0JiZWLl9wcmV2QnV0dG9ucylWLl9tb3VzZVJvdGF0aW5nPSEwO2Vsc2V7Vi5fbW91c2VSb3RhdGluZyYmKFA9ITApLFYuX21vdXNlUm90YXRpbmc9ITE7Zm9yKHZhciBzPTA7czxuOysrcyl7dmFyIGw9SVtzXS5xdWVyeShlLFVbMV0tci0xLFYucGlja1JhZGl1cyk7aWYobCl7aWYobC5kaXN0YW5jZT5fLmRpc3RhbmNlKWNvbnRpbnVlO2Zvcih2YXIgYz0wO2M8aTsrK2Mpe3ZhciB1PUxbY107aWYoeltjXT09PXMpe3ZhciBoPXUucGljayhsKTtoJiYoXy5idXR0b25zPXQsXy5zY3JlZW49bC5jb29yZCxfLmRpc3RhbmNlPWwuZGlzdGFuY2UsXy5vYmplY3Q9dSxfLmluZGV4PWguZGlzdGFuY2UsXy5kYXRhUG9zaXRpb249aC5wb3NpdGlvbixfLmRhdGFDb29yZGluYXRlPWguZGF0YUNvb3JkaW5hdGUsXy5kYXRhPWgsbz0hMCl9fX19fWEmJmEhPT1fLm9iamVjdCYmKGEuaGlnaGxpZ2h0JiZhLmhpZ2hsaWdodChudWxsKSxEPSEwKSxfLm9iamVjdCYmKF8ub2JqZWN0LmhpZ2hsaWdodCYmXy5vYmplY3QuaGlnaGxpZ2h0KF8uZGF0YSksRD0hMCksKG89b3x8Xy5vYmplY3QhPT1hKSYmVi5vbnNlbGVjdCYmVi5vbnNlbGVjdChfKSwxJnQmJiEoMSZWLl9wcmV2QnV0dG9ucykmJlYub25jbGljayYmVi5vbmNsaWNrKF8pLFYuX3ByZXZCdXR0b25zPXR9fSl9LGUuYWRkRXZlbnRMaXN0ZW5lcihcIndlYmdsY29udGV4dGxvc3RcIixHKTt2YXIgWT1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSxXPVtZWzBdLnNsaWNlKCksWVsxXS5zbGljZSgpXTtmdW5jdGlvbiBYKCl7aWYoIUcoKSl7cSgpO3ZhciB0PVYuY2FtZXJhLnRpY2soKTtCLnZpZXc9Vi5jYW1lcmEubWF0cml4LEQ9RHx8dCxQPVB8fHQsUy5waXhlbFJhdGlvPVYucGl4ZWxSYXRpbyxDLnBpeGVsUmF0aW89Vi5waXhlbFJhdGlvO3ZhciBlPUwubGVuZ3RoLHI9WVswXSxuPVlbMV07clswXT1yWzFdPXJbMl09MS8wLG5bMF09blsxXT1uWzJdPS0xLzA7Zm9yKHZhciBpPTA7aTxlOysraSl7dmFyIG89TFtpXTtvLnBpeGVsUmF0aW89Vi5waXhlbFJhdGlvLG8uYXhlcz1WLmF4ZXMsRD1EfHwhIW8uZGlydHksUD1QfHwhIW8uZGlydHk7dmFyIHM9by5ib3VuZHM7aWYocylmb3IodmFyIGw9c1swXSx1PXNbMV0saD0wO2g8MzsrK2gpcltoXT1NYXRoLm1pbihyW2hdLGxbaF0pLG5baF09TWF0aC5tYXgobltoXSx1W2hdKX12YXIgZD1WLmJvdW5kcztpZihWLmF1dG9Cb3VuZHMpZm9yKHZhciBoPTA7aDwzOysraCl7aWYobltoXTxyW2hdKXJbaF09LTEsbltoXT0xO2Vsc2V7cltoXT09PW5baF0mJihyW2hdLT0xLG5baF0rPTEpO3ZhciBnPS4wNSoobltoXS1yW2hdKTtyW2hdPXJbaF0tZyxuW2hdPW5baF0rZ31kWzBdW2hdPXJbaF0sZFsxXVtoXT1uW2hdfWZvcih2YXIgdj0hMSxoPTA7aDwzOysraCl2PXZ8fFdbMF1baF0hPT1kWzBdW2hdfHxXWzFdW2hdIT09ZFsxXVtoXSxXWzBdW2hdPWRbMF1baF0sV1sxXVtoXT1kWzFdW2hdO2lmKFA9UHx8dixEPUR8fHYpe2lmKHYpe2Zvcih2YXIgeT1bMCwwLDBdLGk9MDtpPDM7KytpKXlbaV09bSgoZFsxXVtpXS1kWzBdW2ldKS8xMCk7Uy5hdXRvVGlja3M/Uy51cGRhdGUoe2JvdW5kczpkLHRpY2tTcGFjaW5nOnl9KTpTLnVwZGF0ZSh7Ym91bmRzOmR9KX12YXIgYj14LmRyYXdpbmdCdWZmZXJXaWR0aCxUPXguZHJhd2luZ0J1ZmZlckhlaWdodDtOWzBdPWIsTlsxXT1ULFVbMF09MHxNYXRoLm1heChiL1YucGl4ZWxSYXRpbywxKSxVWzFdPTB8TWF0aC5tYXgoVC9WLnBpeGVsUmF0aW8sMSksQT8ocChSLC1iL1QsYi9ULC0xLDEsVi56TmVhcixWLnpGYXIpLEIuX29ydGhvPSEwKTooZihSLFYuZm92eSxiL1QsVi56TmVhcixWLnpGYXIpLEIuX29ydGhvPSExKTtmb3IodmFyIGk9MDtpPDE2OysraSlGW2ldPTA7RlsxNV09MTtmb3IodmFyIE09MCxpPTA7aTwzOysraSlNPU1hdGgubWF4KE0sZFsxXVtpXS1kWzBdW2ldKTtmb3IodmFyIGk9MDtpPDM7KytpKVYuYXV0b1NjYWxlP0ZbNSppXT1WLmFzcGVjdFtpXS8oZFsxXVtpXS1kWzBdW2ldKTpGWzUqaV09MS9NLFYuYXV0b0NlbnRlciYmKEZbMTIraV09LjUqLUZbNSppXSooZFswXVtpXStkWzFdW2ldKSk7Zm9yKHZhciBpPTA7aTxlOysraSl7dmFyIG89TFtpXTtvLmF4ZXNCb3VuZHM9ZCxWLmNsaXBUb0JvdW5kcyYmKG8uY2xpcEJvdW5kcz1kKX1fLm9iamVjdCYmKFYuc25hcFRvRGF0YT9DLnBvc2l0aW9uPV8uZGF0YUNvb3JkaW5hdGU6Qy5wb3NpdGlvbj1fLmRhdGFQb3NpdGlvbixDLmJvdW5kcz1kKSxQJiYoUD0hMSxmdW5jdGlvbigpe2lmKEcoKSlyZXR1cm47eC5jb2xvck1hc2soITAsITAsITAsITApLHguZGVwdGhNYXNrKCEwKSx4LmRpc2FibGUoeC5CTEVORCkseC5lbmFibGUoeC5ERVBUSF9URVNUKTtmb3IodmFyIHQ9TC5sZW5ndGgsZT1JLmxlbmd0aCxyPTA7cjxlOysrcil7dmFyIG49SVtyXTtuLnNoYXBlPVUsbi5iZWdpbigpO2Zvcih2YXIgaT0wO2k8dDsrK2kpaWYoeltpXT09PXIpe3ZhciBhPUxbaV07YS5kcmF3UGljayYmKGEucGl4ZWxSYXRpbz0xLGEuZHJhd1BpY2soQikpfW4uZW5kKCl9fSgpKSxWLmF4ZXNQaXhlbHM9YShWLmF4ZXMsQixiLFQpLFYub25yZW5kZXImJlYub25yZW5kZXIoKSx4LmJpbmRGcmFtZWJ1ZmZlcih4LkZSQU1FQlVGRkVSLG51bGwpLHgudmlld3BvcnQoMCwwLGIsVCk7dmFyIEU9Vi5jbGVhckNvbG9yO3guY2xlYXJDb2xvcihFWzBdLEVbMV0sRVsyXSxFWzNdKSx4LmNsZWFyKHguQ09MT1JfQlVGRkVSX0JJVHx4LkRFUFRIX0JVRkZFUl9CSVQpLHguZGVwdGhNYXNrKCEwKSx4LmNvbG9yTWFzayghMCwhMCwhMCwhMCkseC5lbmFibGUoeC5ERVBUSF9URVNUKSx4LmRlcHRoRnVuYyh4LkxFUVVBTCkseC5kaXNhYmxlKHguQkxFTkQpLHguZGlzYWJsZSh4LkNVTExfRkFDRSk7dmFyIE89ITE7Uy5lbmFibGUmJihPPU98fFMuaXNUcmFuc3BhcmVudCgpLFMuZHJhdyhCKSksQy5heGVzPVMsXy5vYmplY3QmJkMuZHJhdyhCKSx4LmRpc2FibGUoeC5DVUxMX0ZBQ0UpO2Zvcih2YXIgaT0wO2k8ZTsrK2kpe3ZhciBvPUxbaV07by5heGVzPVMsby5waXhlbFJhdGlvPVYucGl4ZWxSYXRpbyxvLmlzT3BhcXVlJiZvLmlzT3BhcXVlKCkmJm8uZHJhdyhCKSxvLmlzVHJhbnNwYXJlbnQmJm8uaXNUcmFuc3BhcmVudCgpJiYoTz0hMCl9aWYoTyl7dy5zaGFwZT1OLHcuYmluZCgpLHguY2xlYXIoeC5ERVBUSF9CVUZGRVJfQklUKSx4LmNvbG9yTWFzayghMSwhMSwhMSwhMSkseC5kZXB0aE1hc2soITApLHguZGVwdGhGdW5jKHguTEVTUyksUy5lbmFibGUmJlMuaXNUcmFuc3BhcmVudCgpJiZTLmRyYXdUcmFuc3BhcmVudChCKTtmb3IodmFyIGk9MDtpPGU7KytpKXt2YXIgbz1MW2ldO28uaXNPcGFxdWUmJm8uaXNPcGFxdWUoKSYmby5kcmF3KEIpfXguZW5hYmxlKHguQkxFTkQpLHguYmxlbmRFcXVhdGlvbih4LkZVTkNfQUREKSx4LmJsZW5kRnVuYyh4Lk9ORSx4Lk9ORV9NSU5VU19TUkNfQUxQSEEpLHguY29sb3JNYXNrKCEwLCEwLCEwLCEwKSx4LmRlcHRoTWFzayghMSkseC5jbGVhckNvbG9yKDAsMCwwLDApLHguY2xlYXIoeC5DT0xPUl9CVUZGRVJfQklUKSxTLmlzVHJhbnNwYXJlbnQoKSYmUy5kcmF3VHJhbnNwYXJlbnQoQik7Zm9yKHZhciBpPTA7aTxlOysraSl7dmFyIG89TFtpXTtvLmlzVHJhbnNwYXJlbnQmJm8uaXNUcmFuc3BhcmVudCgpJiZvLmRyYXdUcmFuc3BhcmVudChCKX14LmJpbmRGcmFtZWJ1ZmZlcih4LkZSQU1FQlVGRkVSLG51bGwpLHguYmxlbmRGdW5jKHguT05FLHguT05FX01JTlVTX1NSQ19BTFBIQSkseC5kaXNhYmxlKHguREVQVEhfVEVTVCksay5iaW5kKCksdy5jb2xvclswXS5iaW5kKDApLGsudW5pZm9ybXMuYWNjdW1CdWZmZXI9MCxjKHgpLHguZGlzYWJsZSh4LkJMRU5EKX1EPSExO2Zvcih2YXIgaT0wO2k8ZTsrK2kpTFtpXS5kaXJ0eT0hMX19fXJldHVybiBWLmVuYWJsZU1vdXNlTGlzdGVuZXJzKCksZnVuY3Rpb24gdCgpe1YuX3N0b3BwZWR8fFYuY29udGV4dExvc3R8fChYKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpKX0oKSxWLnJlZHJhdz1mdW5jdGlvbigpe1YuX3N0b3BwZWR8fChEPSEwLFgoKSl9LFZ9LGNyZWF0ZUNhbWVyYTpufX0se1wiLi9jYW1lcmEuanNcIjoyODUsXCIuL2xpYi9zaGFkZXJcIjoyODYsXCJhLWJpZy10cmlhbmdsZVwiOjUwLFwiZ2wtYXhlczNkXCI6MjMwLFwiZ2wtYXhlczNkL3Byb3BlcnRpZXNcIjoyMzcsXCJnbC1mYm9cIjoyNDYsXCJnbC1tYXQ0L29ydGhvXCI6MjY1LFwiZ2wtbWF0NC9wZXJzcGVjdGl2ZVwiOjI2NixcImdsLXNlbGVjdC1zdGF0aWNcIjoyOTcsXCJnbC1zcGlrZXMzZFwiOjMwNyxcImlzLW1vYmlsZVwiOjQxMyxcIm1vdXNlLWNoYW5nZVwiOjQyOCxcIm1vdXNlLXdoZWVsXCI6NDMxfV0sMjg4OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcImdsc2xpZnlcIik7ci5wb2ludFZlcnRleD1uKFtcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XFxuXFxudW5pZm9ybSBtYXQzIG1hdHJpeDtcXG51bmlmb3JtIGZsb2F0IHBvaW50U2l6ZTtcXG51bmlmb3JtIGZsb2F0IHBvaW50Q2xvdWQ7XFxuXFxuaGlnaHAgZmxvYXQgcmFuZCh2ZWMyIGNvKSB7XFxuICBoaWdocCBmbG9hdCBhID0gMTIuOTg5ODtcXG4gIGhpZ2hwIGZsb2F0IGIgPSA3OC4yMzM7XFxuICBoaWdocCBmbG9hdCBjID0gNDM3NTguNTQ1MztcXG4gIGhpZ2hwIGZsb2F0IGQgPSBkb3QoY28ueHksIHZlYzIoYSwgYikpO1xcbiAgaGlnaHAgZmxvYXQgZSA9IG1vZChkLCAzLjE0KTtcXG4gIHJldHVybiBmcmFjdChzaW4oZSkgKiBjKTtcXG59XFxuXFxudm9pZCBtYWluKCkge1xcbiAgdmVjMyBoZ1Bvc2l0aW9uID0gbWF0cml4ICogdmVjMyhwb3NpdGlvbiwgMSk7XFxuICBnbF9Qb3NpdGlvbiAgPSB2ZWM0KGhnUG9zaXRpb24ueHksIDAsIGhnUG9zaXRpb24ueik7XFxuICAgIC8vIGlmIHdlIGRvbid0IGppdHRlciB0aGUgcG9pbnQgc2l6ZSBhIGJpdCwgb3ZlcmFsbCBwb2ludCBjbG91ZFxcbiAgICAvLyBzYXR1cmF0aW9uICdqdW1wcycgb24gem9vbWluZywgd2hpY2ggaXMgZGlzdHVyYmluZyBhbmQgY29uZnVzaW5nXFxuICBnbF9Qb2ludFNpemUgPSBwb2ludFNpemUgKiAoKDE5LjUgKyByYW5kKHBvc2l0aW9uKSkgLyAyMC4wKTtcXG4gIGlmKHBvaW50Q2xvdWQgIT0gMC4wKSB7IC8vIHBvaW50Q2xvdWQgaXMgdHJ1dGh5XFxuICAgIC8vIGdldCB0aGUgc2FtZSBzcXVhcmUgc3VyZmFjZSBhcyBjaXJjbGUgd291bGQgYmVcXG4gICAgZ2xfUG9pbnRTaXplICo9IDAuODg2O1xcbiAgfVxcbn1cIl0pLHIucG9pbnRGcmFnbWVudD1uKFtcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxudW5pZm9ybSB2ZWM0IGNvbG9yLCBib3JkZXJDb2xvcjtcXG51bmlmb3JtIGZsb2F0IGNlbnRlckZyYWN0aW9uO1xcbnVuaWZvcm0gZmxvYXQgcG9pbnRDbG91ZDtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBmbG9hdCByYWRpdXM7XFxuICB2ZWM0IGJhc2VDb2xvcjtcXG4gIGlmKHBvaW50Q2xvdWQgIT0gMC4wKSB7IC8vIHBvaW50Q2xvdWQgaXMgdHJ1dGh5XFxuICAgIGlmKGNlbnRlckZyYWN0aW9uID09IDEuMCkge1xcbiAgICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIGdsX0ZyYWdDb2xvciA9IG1peChib3JkZXJDb2xvciwgY29sb3IsIGNlbnRlckZyYWN0aW9uKTtcXG4gICAgfVxcbiAgfSBlbHNlIHtcXG4gICAgcmFkaXVzID0gbGVuZ3RoKDIuMCAqIGdsX1BvaW50Q29vcmQueHkgLSAxLjApO1xcbiAgICBpZihyYWRpdXMgPiAxLjApIHtcXG4gICAgICBkaXNjYXJkO1xcbiAgICB9XFxuICAgIGJhc2VDb2xvciA9IG1peChib3JkZXJDb2xvciwgY29sb3IsIHN0ZXAocmFkaXVzLCBjZW50ZXJGcmFjdGlvbikpO1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGJhc2VDb2xvci5yZ2IgKiBiYXNlQ29sb3IuYSwgYmFzZUNvbG9yLmEpO1xcbiAgfVxcbn1cXG5cIl0pLHIucGlja1ZlcnRleD1uKFtcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzQgcGlja0lkO1xcblxcbnVuaWZvcm0gbWF0MyBtYXRyaXg7XFxudW5pZm9ybSBmbG9hdCBwb2ludFNpemU7XFxudW5pZm9ybSB2ZWM0IHBpY2tPZmZzZXQ7XFxuXFxudmFyeWluZyB2ZWM0IGZyYWdJZDtcXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWMzIGhnUG9zaXRpb24gPSBtYXRyaXggKiB2ZWMzKHBvc2l0aW9uLCAxKTtcXG4gIGdsX1Bvc2l0aW9uICA9IHZlYzQoaGdQb3NpdGlvbi54eSwgMCwgaGdQb3NpdGlvbi56KTtcXG4gIGdsX1BvaW50U2l6ZSA9IHBvaW50U2l6ZTtcXG5cXG4gIHZlYzQgaWQgPSBwaWNrSWQgKyBwaWNrT2Zmc2V0O1xcbiAgaWQueSArPSBmbG9vcihpZC54IC8gMjU2LjApO1xcbiAgaWQueCAtPSBmbG9vcihpZC54IC8gMjU2LjApICogMjU2LjA7XFxuXFxuICBpZC56ICs9IGZsb29yKGlkLnkgLyAyNTYuMCk7XFxuICBpZC55IC09IGZsb29yKGlkLnkgLyAyNTYuMCkgKiAyNTYuMDtcXG5cXG4gIGlkLncgKz0gZmxvb3IoaWQueiAvIDI1Ni4wKTtcXG4gIGlkLnogLT0gZmxvb3IoaWQueiAvIDI1Ni4wKSAqIDI1Ni4wO1xcblxcbiAgZnJhZ0lkID0gaWQ7XFxufVxcblwiXSksci5waWNrRnJhZ21lbnQ9bihbXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgZmxvYXQgcmFkaXVzID0gbGVuZ3RoKDIuMCAqIGdsX1BvaW50Q29vcmQueHkgLSAxLjApO1xcbiAgaWYocmFkaXVzID4gMS4wKSB7XFxuICAgIGRpc2NhcmQ7XFxuICB9XFxuICBnbF9GcmFnQ29sb3IgPSBmcmFnSWQgLyAyNTUuMDtcXG59XFxuXCJdKX0se2dsc2xpZnk6NDAyfV0sMjg5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsLXNoYWRlclwiKSxpPXQoXCJnbC1idWZmZXJcIiksYT10KFwidHlwZWRhcnJheS1wb29sXCIpLG89dChcIi4vbGliL3NoYWRlclwiKTtmdW5jdGlvbiBzKHQsZSxyLG4saSl7dGhpcy5wbG90PXQsdGhpcy5vZmZzZXRCdWZmZXI9ZSx0aGlzLnBpY2tCdWZmZXI9cix0aGlzLnNoYWRlcj1uLHRoaXMucGlja1NoYWRlcj1pLHRoaXMuc2l6ZU1pbj0uNSx0aGlzLnNpemVNaW5DYXA9Mix0aGlzLnNpemVNYXg9MjAsdGhpcy5hcmVhUmF0aW89MSx0aGlzLnBvaW50Q291bnQ9MCx0aGlzLmNvbG9yPVsxLDAsMCwxXSx0aGlzLmJvcmRlckNvbG9yPVswLDAsMCwxXSx0aGlzLmJsZW5kPSExLHRoaXMucGlja09mZnNldD0wLHRoaXMucG9pbnRzPW51bGx9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbCxhPWkociksbD1pKHIpLGM9bihyLG8ucG9pbnRWZXJ0ZXgsby5wb2ludEZyYWdtZW50KSx1PW4ocixvLnBpY2tWZXJ0ZXgsby5waWNrRnJhZ21lbnQpLGg9bmV3IHModCxhLGwsYyx1KTtyZXR1cm4gaC51cGRhdGUoZSksdC5hZGRPYmplY3QoaCksaH07dmFyIGwsYyx1PXMucHJvdG90eXBlO3UuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMub2Zmc2V0QnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tCdWZmZXIuZGlzcG9zZSgpLHRoaXMucGxvdC5yZW1vdmVPYmplY3QodGhpcyl9LHUudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlO2Z1bmN0aW9uIHIoZSxyKXtyZXR1cm4gZSBpbiB0P3RbZV06cn10PXR8fHt9LHRoaXMuc2l6ZU1pbj1yKFwic2l6ZU1pblwiLC41KSx0aGlzLnNpemVNYXg9cihcInNpemVNYXhcIiwyMCksdGhpcy5jb2xvcj1yKFwiY29sb3JcIixbMSwwLDAsMV0pLnNsaWNlKCksdGhpcy5hcmVhUmF0aW89cihcImFyZWFSYXRpb1wiLDEpLHRoaXMuYm9yZGVyQ29sb3I9cihcImJvcmRlckNvbG9yXCIsWzAsMCwwLDFdKS5zbGljZSgpLHRoaXMuYmxlbmQ9cihcImJsZW5kXCIsITEpO3ZhciBuPXQucG9zaXRpb25zLmxlbmd0aD4+PjEsaT10LnBvc2l0aW9ucyBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSxvPXQuaWRUb0luZGV4IGluc3RhbmNlb2YgSW50MzJBcnJheSYmdC5pZFRvSW5kZXgubGVuZ3RoPj1uLHM9dC5wb3NpdGlvbnMsbD1pP3M6YS5tYWxsb2NGbG9hdDMyKHMubGVuZ3RoKSxjPW8/dC5pZFRvSW5kZXg6YS5tYWxsb2NJbnQzMihuKTtpZihpfHxsLnNldChzKSwhbylmb3IobC5zZXQocyksZT0wO2U8bjtlKyspY1tlXT1lO3RoaXMucG9pbnRzPXMsdGhpcy5vZmZzZXRCdWZmZXIudXBkYXRlKGwpLHRoaXMucGlja0J1ZmZlci51cGRhdGUoYyksaXx8YS5mcmVlKGwpLG98fGEuZnJlZShjKSx0aGlzLnBvaW50Q291bnQ9bix0aGlzLnBpY2tPZmZzZXQ9MH0sdS51bmlmaWVkRHJhdz0obD1bMSwwLDAsMCwxLDAsMCwwLDFdLGM9WzAsMCwwLDBdLGZ1bmN0aW9uKHQpe3ZhciBlPXZvaWQgMCE9PXQscj1lP3RoaXMucGlja1NoYWRlcjp0aGlzLnNoYWRlcixuPXRoaXMucGxvdC5nbCxpPXRoaXMucGxvdC5kYXRhQm94O2lmKDA9PT10aGlzLnBvaW50Q291bnQpcmV0dXJuIHQ7dmFyIGE9aVsyXS1pWzBdLG89aVszXS1pWzFdLHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuPTAsaT10Lmxlbmd0aD4+PjE7Zm9yKHI9MDtyPGk7cisrKXt2YXIgYT10WzIqcl0sbz10WzIqcisxXTthPj1lWzBdJiZhPD1lWzJdJiZvPj1lWzFdJiZvPD1lWzNdJiZuKyt9cmV0dXJuIG59KHRoaXMucG9pbnRzLGkpLHU9dGhpcy5wbG90LnBpY2tQaXhlbFJhdGlvKk1hdGgubWF4KE1hdGgubWluKHRoaXMuc2l6ZU1pbkNhcCx0aGlzLnNpemVNaW4pLE1hdGgubWluKHRoaXMuc2l6ZU1heCx0aGlzLnNpemVNYXgvTWF0aC5wb3cocywuMzMzMzMpKSk7bFswXT0yL2EsbFs0XT0yL28sbFs2XT0tMippWzBdL2EtMSxsWzddPS0yKmlbMV0vby0xLHRoaXMub2Zmc2V0QnVmZmVyLmJpbmQoKSxyLmJpbmQoKSxyLmF0dHJpYnV0ZXMucG9zaXRpb24ucG9pbnRlcigpLHIudW5pZm9ybXMubWF0cml4PWwsci51bmlmb3Jtcy5jb2xvcj10aGlzLmNvbG9yLHIudW5pZm9ybXMuYm9yZGVyQ29sb3I9dGhpcy5ib3JkZXJDb2xvcixyLnVuaWZvcm1zLnBvaW50Q2xvdWQ9dTw1LHIudW5pZm9ybXMucG9pbnRTaXplPXUsci51bmlmb3Jtcy5jZW50ZXJGcmFjdGlvbj1NYXRoLm1pbigxLE1hdGgubWF4KDAsTWF0aC5zcXJ0KDEtdGhpcy5hcmVhUmF0aW8pKSksZSYmKGNbMF09MjU1JnQsY1sxXT10Pj44JjI1NSxjWzJdPXQ+PjE2JjI1NSxjWzNdPXQ+PjI0JjI1NSx0aGlzLnBpY2tCdWZmZXIuYmluZCgpLHIuYXR0cmlidXRlcy5waWNrSWQucG9pbnRlcihuLlVOU0lHTkVEX0JZVEUpLHIudW5pZm9ybXMucGlja09mZnNldD1jLHRoaXMucGlja09mZnNldD10KTt2YXIgaD1uLmdldFBhcmFtZXRlcihuLkJMRU5EKSxmPW4uZ2V0UGFyYW1ldGVyKG4uRElUSEVSKTtyZXR1cm4gaCYmIXRoaXMuYmxlbmQmJm4uZGlzYWJsZShuLkJMRU5EKSxmJiZuLmRpc2FibGUobi5ESVRIRVIpLG4uZHJhd0FycmF5cyhuLlBPSU5UUywwLHRoaXMucG9pbnRDb3VudCksaCYmIXRoaXMuYmxlbmQmJm4uZW5hYmxlKG4uQkxFTkQpLGYmJm4uZW5hYmxlKG4uRElUSEVSKSx0K3RoaXMucG9pbnRDb3VudH0pLHUuZHJhdz11LnVuaWZpZWREcmF3LHUuZHJhd1BpY2s9dS51bmlmaWVkRHJhdyx1LnBpY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMucGlja09mZnNldCxpPXRoaXMucG9pbnRDb3VudDtpZihyPG58fHI+PW4raSlyZXR1cm4gbnVsbDt2YXIgYT1yLW4sbz10aGlzLnBvaW50cztyZXR1cm57b2JqZWN0OnRoaXMscG9pbnRJZDphLGRhdGFDb29yZDpbb1syKmFdLG9bMiphKzFdXX19fSx7XCIuL2xpYi9zaGFkZXJcIjoyODgsXCJnbC1idWZmZXJcIjoyMzgsXCJnbC1zaGFkZXJcIjoyOTgsXCJ0eXBlZGFycmF5LXBvb2xcIjo1MzB9XSwyOTA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHMsbCxjPWVbMF0sdT1lWzFdLGg9ZVsyXSxmPWVbM10scD1yWzBdLGQ9clsxXSxnPXJbMl0sdj1yWzNdOyhhPWMqcCt1KmQraCpnK2Yqdik8MCYmKGE9LWEscD0tcCxkPS1kLGc9LWcsdj0tdik7MS1hPjFlLTY/KGk9TWF0aC5hY29zKGEpLG89TWF0aC5zaW4oaSkscz1NYXRoLnNpbigoMS1uKSppKS9vLGw9TWF0aC5zaW4obippKS9vKToocz0xLW4sbD1uKTtyZXR1cm4gdFswXT1zKmMrbCpwLHRbMV09cyp1K2wqZCx0WzJdPXMqaCtsKmcsdFszXT1zKmYrbCp2LHR9fSx7fV0sMjkxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0fHwwPT09dD90LnRvU3RyaW5nKCk6XCJcIn19LHt9XSwyOTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwidmVjdG9yaXplLXRleHRcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1pW2VdO2F8fChhPWlbZV09e30pO2lmKHQgaW4gYSlyZXR1cm4gYVt0XTt2YXIgbz17dGV4dEFsaWduOlwiY2VudGVyXCIsdGV4dEJhc2VsaW5lOlwibWlkZGxlXCIsbGluZUhlaWdodDoxLGZvbnQ6ZSxsaW5lU3BhY2luZzoxLjI1LHN0eWxldGFnczp7YnJlYWtsaW5lczohMCxib2xkczohMCxpdGFsaWNzOiEwLHN1YnNjcmlwdHM6ITAsc3VwZXJzY3JpcHRzOiEwfSx0cmlhbmdsZXM6ITB9LHM9bih0LG8pO28udHJpYW5nbGVzPSExO3ZhciBsLGMsdT1uKHQsbyk7aWYociYmMSE9PXIpe2ZvcihsPTA7bDxzLnBvc2l0aW9ucy5sZW5ndGg7KytsKWZvcihjPTA7YzxzLnBvc2l0aW9uc1tsXS5sZW5ndGg7KytjKXMucG9zaXRpb25zW2xdW2NdLz1yO2ZvcihsPTA7bDx1LnBvc2l0aW9ucy5sZW5ndGg7KytsKWZvcihjPTA7Yzx1LnBvc2l0aW9uc1tsXS5sZW5ndGg7KytjKXUucG9zaXRpb25zW2xdW2NdLz1yfXZhciBoPVtbMS8wLDEvMF0sWy0xLzAsLTEvMF1dLGY9dS5wb3NpdGlvbnMubGVuZ3RoO2ZvcihsPTA7bDxmOysrbCl7dmFyIHA9dS5wb3NpdGlvbnNbbF07Zm9yKGM9MDtjPDI7KytjKWhbMF1bY109TWF0aC5taW4oaFswXVtjXSxwW2NdKSxoWzFdW2NdPU1hdGgubWF4KGhbMV1bY10scFtjXSl9cmV0dXJuIGFbdF09W3MsdSxoXX07dmFyIGk9e319LHtcInZlY3Rvcml6ZS10ZXh0XCI6NTM1fV0sMjkzOltmdW5jdGlvbih0LGUscil7dmFyIG49dChcImdsLXNoYWRlclwiKSxpPXQoXCJnbHNsaWZ5XCIpLGE9aShbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcXG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xcbn1cXG5cXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcXG5hdHRyaWJ1dGUgdmVjMiBnbHlwaDtcXG5hdHRyaWJ1dGUgdmVjNCBpZDtcXG5cXG51bmlmb3JtIHZlYzQgaGlnaGxpZ2h0SWQ7XFxudW5pZm9ybSBmbG9hdCBoaWdobGlnaHRTY2FsZTtcXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XFxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XFxuXFxudmFyeWluZyB2ZWM0IGludGVycENvbG9yO1xcbnZhcnlpbmcgdmVjNCBwaWNrSWQ7XFxudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHBvc2l0aW9uKSkge1xcblxcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XFxuICB9IGVsc2Uge1xcbiAgICBmbG9hdCBzY2FsZSA9IDEuMDtcXG4gICAgaWYoZGlzdGFuY2UoaGlnaGxpZ2h0SWQsIGlkKSA8IDAuMDAwMSkge1xcbiAgICAgIHNjYWxlID0gaGlnaGxpZ2h0U2NhbGU7XFxuICAgIH1cXG5cXG4gICAgdmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxKTtcXG4gICAgdmVjNCB2aWV3UG9zaXRpb24gPSB2aWV3ICogd29ybGRQb3NpdGlvbjtcXG4gICAgdmlld1Bvc2l0aW9uID0gdmlld1Bvc2l0aW9uIC8gdmlld1Bvc2l0aW9uLnc7XFxuICAgIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqICh2aWV3UG9zaXRpb24gKyBzY2FsZSAqIHZlYzQoZ2x5cGgueCwgLWdseXBoLnksIDAsIDApKTtcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XFxuICAgIGludGVycENvbG9yID0gY29sb3I7XFxuICAgIHBpY2tJZCA9IGlkO1xcbiAgICBkYXRhQ29vcmRpbmF0ZSA9IHBvc2l0aW9uO1xcbiAgfVxcbn1cIl0pLG89aShbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcXG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xcbn1cXG5cXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcXG5hdHRyaWJ1dGUgdmVjMiBnbHlwaDtcXG5hdHRyaWJ1dGUgdmVjNCBpZDtcXG5cXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XFxudW5pZm9ybSB2ZWMyIHNjcmVlblNpemU7XFxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XFxudW5pZm9ybSBmbG9hdCBoaWdobGlnaHRTY2FsZSwgcGl4ZWxSYXRpbztcXG51bmlmb3JtIHZlYzQgaGlnaGxpZ2h0SWQ7XFxuXFxudmFyeWluZyB2ZWM0IGludGVycENvbG9yO1xcbnZhcnlpbmcgdmVjNCBwaWNrSWQ7XFxudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHBvc2l0aW9uKSkge1xcblxcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XFxuICB9IGVsc2Uge1xcbiAgICBmbG9hdCBzY2FsZSA9IHBpeGVsUmF0aW87XFxuICAgIGlmKGRpc3RhbmNlKGhpZ2hsaWdodElkLmJnciwgaWQuYmdyKSA8IDAuMDAxKSB7XFxuICAgICAgc2NhbGUgKj0gaGlnaGxpZ2h0U2NhbGU7XFxuICAgIH1cXG5cXG4gICAgdmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xcbiAgICB2ZWM0IHZpZXdQb3NpdGlvbiA9IHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xcbiAgICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3UG9zaXRpb247XFxuICAgIGNsaXBQb3NpdGlvbiAvPSBjbGlwUG9zaXRpb24udztcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb24gKyB2ZWM0KHNjcmVlblNpemUgKiBzY2FsZSAqIHZlYzIoZ2x5cGgueCwgLWdseXBoLnkpLCAwLjAsIDAuMCk7XFxuICAgIGludGVycENvbG9yID0gY29sb3I7XFxuICAgIHBpY2tJZCA9IGlkO1xcbiAgICBkYXRhQ29vcmRpbmF0ZSA9IHBvc2l0aW9uO1xcbiAgfVxcbn1cIl0pLHM9aShbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcXG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xcbn1cXG5cXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcXG5hdHRyaWJ1dGUgdmVjMiBnbHlwaDtcXG5hdHRyaWJ1dGUgdmVjNCBpZDtcXG5cXG51bmlmb3JtIGZsb2F0IGhpZ2hsaWdodFNjYWxlO1xcbnVuaWZvcm0gdmVjNCBoaWdobGlnaHRJZDtcXG51bmlmb3JtIHZlYzMgYXhlc1syXTtcXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XFxudW5pZm9ybSB2ZWMyIHNjcmVlblNpemU7XFxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XFxudW5pZm9ybSBmbG9hdCBzY2FsZSwgcGl4ZWxSYXRpbztcXG5cXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XFxudmFyeWluZyB2ZWM0IHBpY2tJZDtcXG52YXJ5aW5nIHZlYzMgZGF0YUNvb3JkaW5hdGU7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgcG9zaXRpb24pKSB7XFxuXFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLDAsMCwwKTtcXG4gIH0gZWxzZSB7XFxuICAgIGZsb2F0IGxzY2FsZSA9IHBpeGVsUmF0aW8gKiBzY2FsZTtcXG4gICAgaWYoZGlzdGFuY2UoaGlnaGxpZ2h0SWQsIGlkKSA8IDAuMDAwMSkge1xcbiAgICAgIGxzY2FsZSAqPSBoaWdobGlnaHRTY2FsZTtcXG4gICAgfVxcblxcbiAgICB2ZWM0IGNsaXBDZW50ZXIgICA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxKTtcXG4gICAgdmVjMyBkYXRhUG9zaXRpb24gPSBwb3NpdGlvbiArIDAuNSpsc2NhbGUqKGF4ZXNbMF0gKiBnbHlwaC54ICsgYXhlc1sxXSAqIGdseXBoLnkpICogY2xpcENlbnRlci53ICogc2NyZWVuU2l6ZS55O1xcbiAgICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KGRhdGFQb3NpdGlvbiwgMSk7XFxuXFxuICAgIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uO1xcbiAgICBpbnRlcnBDb2xvciA9IGNvbG9yO1xcbiAgICBwaWNrSWQgPSBpZDtcXG4gICAgZGF0YUNvb3JkaW5hdGUgPSBkYXRhUG9zaXRpb247XFxuICB9XFxufVxcblwiXSksbD1pKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XFxuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XFxufVxcblxcbnVuaWZvcm0gdmVjMyBmcmFnQ2xpcEJvdW5kc1syXTtcXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxuXFxudmFyeWluZyB2ZWM0IGludGVycENvbG9yO1xcbnZhcnlpbmcgdmVjNCBwaWNrSWQ7XFxudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmIChcXG4gICAgb3V0T2ZSYW5nZShmcmFnQ2xpcEJvdW5kc1swXSwgZnJhZ0NsaXBCb3VuZHNbMV0sIGRhdGFDb29yZGluYXRlKSB8fFxcbiAgICBpbnRlcnBDb2xvci5hICogb3BhY2l0eSA9PSAwLlxcbiAgKSBkaXNjYXJkO1xcbiAgZ2xfRnJhZ0NvbG9yID0gaW50ZXJwQ29sb3IgKiBvcGFjaXR5O1xcbn1cXG5cIl0pLGM9aShbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcXG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xcbn1cXG5cXG51bmlmb3JtIHZlYzMgZnJhZ0NsaXBCb3VuZHNbMl07XFxudW5pZm9ybSBmbG9hdCBwaWNrR3JvdXA7XFxuXFxudmFyeWluZyB2ZWM0IHBpY2tJZDtcXG52YXJ5aW5nIHZlYzMgZGF0YUNvb3JkaW5hdGU7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgaWYgKG91dE9mUmFuZ2UoZnJhZ0NsaXBCb3VuZHNbMF0sIGZyYWdDbGlwQm91bmRzWzFdLCBkYXRhQ29vcmRpbmF0ZSkpIGRpc2NhcmQ7XFxuXFxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tHcm91cCwgcGlja0lkLmJncik7XFxufVwiXSksdT1be25hbWU6XCJwb3NpdGlvblwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwiY29sb3JcIix0eXBlOlwidmVjNFwifSx7bmFtZTpcImdseXBoXCIsdHlwZTpcInZlYzJcIn0se25hbWU6XCJpZFwiLHR5cGU6XCJ2ZWM0XCJ9XSxoPXt2ZXJ0ZXg6YSxmcmFnbWVudDpsLGF0dHJpYnV0ZXM6dX0sZj17dmVydGV4Om8sZnJhZ21lbnQ6bCxhdHRyaWJ1dGVzOnV9LHA9e3ZlcnRleDpzLGZyYWdtZW50OmwsYXR0cmlidXRlczp1fSxkPXt2ZXJ0ZXg6YSxmcmFnbWVudDpjLGF0dHJpYnV0ZXM6dX0sZz17dmVydGV4Om8sZnJhZ21lbnQ6YyxhdHRyaWJ1dGVzOnV9LHY9e3ZlcnRleDpzLGZyYWdtZW50OmMsYXR0cmlidXRlczp1fTtmdW5jdGlvbiBtKHQsZSl7dmFyIHI9bih0LGUpLGk9ci5hdHRyaWJ1dGVzO3JldHVybiBpLnBvc2l0aW9uLmxvY2F0aW9uPTAsaS5jb2xvci5sb2NhdGlvbj0xLGkuZ2x5cGgubG9jYXRpb249MixpLmlkLmxvY2F0aW9uPTMscn1yLmNyZWF0ZVBlcnNwZWN0aXZlPWZ1bmN0aW9uKHQpe3JldHVybiBtKHQsaCl9LHIuY3JlYXRlT3J0aG89ZnVuY3Rpb24odCl7cmV0dXJuIG0odCxmKX0sci5jcmVhdGVQcm9qZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBtKHQscCl9LHIuY3JlYXRlUGlja1BlcnNwZWN0aXZlPWZ1bmN0aW9uKHQpe3JldHVybiBtKHQsZCl9LHIuY3JlYXRlUGlja09ydGhvPWZ1bmN0aW9uKHQpe3JldHVybiBtKHQsZyl9LHIuY3JlYXRlUGlja1Byb2plY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIG0odCx2KX19LHtcImdsLXNoYWRlclwiOjI5OCxnbHNsaWZ5OjQwMn1dLDI5NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJpcy1zdHJpbmctYmxhbmtcIiksaT10KFwiZ2wtYnVmZmVyXCIpLGE9dChcImdsLXZhb1wiKSxvPXQoXCJ0eXBlZGFycmF5LXBvb2xcIikscz10KFwiZ2wtbWF0NC9tdWx0aXBseVwiKSxsPXQoXCIuL2xpYi9zaGFkZXJzXCIpLGM9dChcIi4vbGliL2dseXBoc1wiKSx1PXQoXCIuL2xpYi9nZXQtc2ltcGxlLXN0cmluZ1wiKSxoPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiBmKHQsZSl7dmFyIHI9dFswXSxuPXRbMV0saT10WzJdLGE9dFszXTtyZXR1cm4gdFswXT1lWzBdKnIrZVs0XSpuK2VbOF0qaStlWzEyXSphLHRbMV09ZVsxXSpyK2VbNV0qbitlWzldKmkrZVsxM10qYSx0WzJdPWVbMl0qcitlWzZdKm4rZVsxMF0qaStlWzE0XSphLHRbM109ZVszXSpyK2VbN10qbitlWzExXSppK2VbMTVdKmEsdH1mdW5jdGlvbiBwKHQsZSxyLG4pe3JldHVybiBmKG4sbiksZihuLG4pLGYobixuKX1mdW5jdGlvbiBkKHQsZSl7dGhpcy5pbmRleD10LHRoaXMuZGF0YUNvb3JkaW5hdGU9dGhpcy5wb3NpdGlvbj1lfWZ1bmN0aW9uIGcodCl7cmV0dXJuITA9PT10PzE6dD4xPzE6dH1mdW5jdGlvbiB2KHQsZSxyLG4saSxhLG8scyxsLGMsdSxoKXt0aGlzLmdsPXQsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5zaGFkZXI9ZSx0aGlzLm9ydGhvU2hhZGVyPXIsdGhpcy5wcm9qZWN0U2hhZGVyPW4sdGhpcy5wb2ludEJ1ZmZlcj1pLHRoaXMuY29sb3JCdWZmZXI9YSx0aGlzLmdseXBoQnVmZmVyPW8sdGhpcy5pZEJ1ZmZlcj1zLHRoaXMudmFvPWwsdGhpcy52ZXJ0ZXhDb3VudD0wLHRoaXMubGluZVZlcnRleENvdW50PTAsdGhpcy5vcGFjaXR5PTEsdGhpcy5oYXNBbHBoYT0hMSx0aGlzLmxpbmVXaWR0aD0wLHRoaXMucHJvamVjdFNjYWxlPVsyLzMsMi8zLDIvM10sdGhpcy5wcm9qZWN0T3BhY2l0eT1bMSwxLDFdLHRoaXMucHJvamVjdEhhc0FscGhhPSExLHRoaXMucGlja0lkPTAsdGhpcy5waWNrUGVyc3BlY3RpdmVTaGFkZXI9Yyx0aGlzLnBpY2tPcnRob1NoYWRlcj11LHRoaXMucGlja1Byb2plY3RTaGFkZXI9aCx0aGlzLnBvaW50cz1bXSx0aGlzLl9zZWxlY3RSZXN1bHQ9bmV3IGQoMCxbMCwwLDBdKSx0aGlzLnVzZU9ydGhvPSEwLHRoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuYXhlc1Byb2plY3Q9WyEwLCEwLCEwXSx0aGlzLmF4ZXNCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5oaWdobGlnaHRJZD1bMSwxLDEsMV0sdGhpcy5oaWdobGlnaHRTY2FsZT0yLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmRpcnR5PSEwfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bC5jcmVhdGVQZXJzcGVjdGl2ZShlKSxuPWwuY3JlYXRlT3J0aG8oZSksbz1sLmNyZWF0ZVByb2plY3QoZSkscz1sLmNyZWF0ZVBpY2tQZXJzcGVjdGl2ZShlKSxjPWwuY3JlYXRlUGlja09ydGhvKGUpLHU9bC5jcmVhdGVQaWNrUHJvamVjdChlKSxoPWkoZSksZj1pKGUpLHA9aShlKSxkPWkoZSksZz1hKGUsW3tidWZmZXI6aCxzaXplOjMsdHlwZTplLkZMT0FUfSx7YnVmZmVyOmYsc2l6ZTo0LHR5cGU6ZS5GTE9BVH0se2J1ZmZlcjpwLHNpemU6Mix0eXBlOmUuRkxPQVR9LHtidWZmZXI6ZCxzaXplOjQsdHlwZTplLlVOU0lHTkVEX0JZVEUsbm9ybWFsaXplZDohMH1dKSxtPW5ldyB2KGUscixuLG8saCxmLHAsZCxnLHMsYyx1KTtyZXR1cm4gbS51cGRhdGUodCksbX07dmFyIG09di5wcm90b3R5cGU7bS5waWNrU2xvdHM9MSxtLnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LG0uaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe2lmKHRoaXMuaGFzQWxwaGEpcmV0dXJuITA7Zm9yKHZhciB0PTA7dDwzOysrdClpZih0aGlzLmF4ZXNQcm9qZWN0W3RdJiZ0aGlzLnByb2plY3RIYXNBbHBoYSlyZXR1cm4hMDtyZXR1cm4hMX0sbS5pc09wYXF1ZT1mdW5jdGlvbigpe2lmKCF0aGlzLmhhc0FscGhhKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8MzsrK3QpaWYodGhpcy5heGVzUHJvamVjdFt0XSYmIXRoaXMucHJvamVjdEhhc0FscGhhKXJldHVybiEwO3JldHVybiExfTt2YXIgeT1bMCwwXSx4PVswLDAsMF0sYj1bMCwwLDBdLF89WzAsMCwwLDFdLHc9WzAsMCwwLDFdLGs9aC5zbGljZSgpLEE9WzAsMCwwXSxUPVtbMCwwLDBdLFswLDAsMF1dO2Z1bmN0aW9uIE0odCl7cmV0dXJuIHRbMF09dFsxXT10WzJdPTAsdH1mdW5jdGlvbiBTKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109MSx0fWZ1bmN0aW9uIEUodCxlLHIsbil7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbcl09bix0fWZ1bmN0aW9uIEModCxlLHIsbil7dmFyIGksYT1lLmF4ZXNQcm9qZWN0LG89ZS5nbCxsPXQudW5pZm9ybXMsYz1yLm1vZGVsfHxoLHU9ci52aWV3fHxoLGY9ci5wcm9qZWN0aW9ufHxoLGQ9ZS5heGVzQm91bmRzLGc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVQscj0wO3I8MjsrK3IpZm9yKHZhciBuPTA7bjwzOysrbillW3JdW25dPU1hdGgubWF4KE1hdGgubWluKHRbcl1bbl0sMWU4KSwtMWU4KTtyZXR1cm4gZX0oZS5jbGlwQm91bmRzKTtpPWUuYXhlcyYmZS5heGVzLmxhc3RDdWJlUHJvcHM/ZS5heGVzLmxhc3RDdWJlUHJvcHMuYXhpczpbMSwxLDFdLHlbMF09Mi9vLmRyYXdpbmdCdWZmZXJXaWR0aCx5WzFdPTIvby5kcmF3aW5nQnVmZmVySGVpZ2h0LHQuYmluZCgpLGwudmlldz11LGwucHJvamVjdGlvbj1mLGwuc2NyZWVuU2l6ZT15LGwuaGlnaGxpZ2h0SWQ9ZS5oaWdobGlnaHRJZCxsLmhpZ2hsaWdodFNjYWxlPWUuaGlnaGxpZ2h0U2NhbGUsbC5jbGlwQm91bmRzPWcsbC5waWNrR3JvdXA9ZS5waWNrSWQvMjU1LGwucGl4ZWxSYXRpbz1uO2Zvcih2YXIgdj0wO3Y8MzsrK3YpaWYoYVt2XSl7bC5zY2FsZT1lLnByb2plY3RTY2FsZVt2XSxsLm9wYWNpdHk9ZS5wcm9qZWN0T3BhY2l0eVt2XTtmb3IodmFyIG09ayxDPTA7QzwxNjsrK0MpbVtDXT0wO2ZvcihDPTA7Qzw0OysrQyltWzUqQ109MTttWzUqdl09MCxpW3ZdPDA/bVsxMit2XT1kWzBdW3ZdOm1bMTIrdl09ZFsxXVt2XSxzKG0sYyxtKSxsLm1vZGVsPW07dmFyIEw9KHYrMSklMyx6PSh2KzIpJTMsTz1NKHgpLEk9TShiKTtPW0xdPTEsSVt6XT0xO3ZhciBEPXAoMCwwLDAsUyhfLE8pKSxQPXAoMCwwLDAsUyh3LEkpKTtpZihNYXRoLmFicyhEWzFdKT5NYXRoLmFicyhQWzFdKSl7dmFyIFI9RDtEPVAsUD1SLFI9TyxPPUksST1SO3ZhciBGPUw7TD16LHo9Rn1EWzBdPDAmJihPW0xdPS0xKSxQWzFdPjAmJihJW3pdPS0xKTt2YXIgQj0wLE49MDtmb3IoQz0wO0M8NDsrK0MpQis9TWF0aC5wb3coY1s0KkwrQ10sMiksTis9TWF0aC5wb3coY1s0KnorQ10sMik7T1tMXS89TWF0aC5zcXJ0KEIpLElbel0vPU1hdGguc3FydChOKSxsLmF4ZXNbMF09TyxsLmF4ZXNbMV09SSxsLmZyYWdDbGlwQm91bmRzWzBdPUUoQSxnWzBdLHYsLTFlOCksbC5mcmFnQ2xpcEJvdW5kc1sxXT1FKEEsZ1sxXSx2LDFlOCksZS52YW8uYmluZCgpLGUudmFvLmRyYXcoby5UUklBTkdMRVMsZS52ZXJ0ZXhDb3VudCksZS5saW5lV2lkdGg+MCYmKG8ubGluZVdpZHRoKGUubGluZVdpZHRoKm4pLGUudmFvLmRyYXcoby5MSU5FUyxlLmxpbmVWZXJ0ZXhDb3VudCxlLnZlcnRleENvdW50KSksZS52YW8udW5iaW5kKCl9fXZhciBMPVtbLTFlOCwtMWU4LC0xZThdLFsxZTgsMWU4LDFlOF1dO2Z1bmN0aW9uIHoodCxlLHIsbixpLGEsbyl7dmFyIHM9ci5nbDtpZigoYT09PXIucHJvamVjdEhhc0FscGhhfHxvKSYmQyhlLHIsbixpKSxhPT09ci5oYXNBbHBoYXx8byl7dC5iaW5kKCk7dmFyIGw9dC51bmlmb3JtcztsLm1vZGVsPW4ubW9kZWx8fGgsbC52aWV3PW4udmlld3x8aCxsLnByb2plY3Rpb249bi5wcm9qZWN0aW9ufHxoLHlbMF09Mi9zLmRyYXdpbmdCdWZmZXJXaWR0aCx5WzFdPTIvcy5kcmF3aW5nQnVmZmVySGVpZ2h0LGwuc2NyZWVuU2l6ZT15LGwuaGlnaGxpZ2h0SWQ9ci5oaWdobGlnaHRJZCxsLmhpZ2hsaWdodFNjYWxlPXIuaGlnaGxpZ2h0U2NhbGUsbC5mcmFnQ2xpcEJvdW5kcz1MLGwuY2xpcEJvdW5kcz1yLmF4ZXMuYm91bmRzLGwub3BhY2l0eT1yLm9wYWNpdHksbC5waWNrR3JvdXA9ci5waWNrSWQvMjU1LGwucGl4ZWxSYXRpbz1pLHIudmFvLmJpbmQoKSxyLnZhby5kcmF3KHMuVFJJQU5HTEVTLHIudmVydGV4Q291bnQpLHIubGluZVdpZHRoPjAmJihzLmxpbmVXaWR0aChyLmxpbmVXaWR0aCppKSxyLnZhby5kcmF3KHMuTElORVMsci5saW5lVmVydGV4Q291bnQsci52ZXJ0ZXhDb3VudCkpLHIudmFvLnVuYmluZCgpfX1mdW5jdGlvbiBPKHQsZSxyLGkpe3ZhciBhO2E9QXJyYXkuaXNBcnJheSh0KT9lPHQubGVuZ3RoP3RbZV06dm9pZCAwOnQsYT11KGEpO3ZhciBvPSEwO24oYSkmJihhPVwiXFx1MjViY1wiLG89ITEpO3ZhciBzPWMoYSxyLGkpO3JldHVybnttZXNoOnNbMF0sbGluZXM6c1sxXSxib3VuZHM6c1syXSx2aXNpYmxlOm99fW0uZHJhdz1mdW5jdGlvbih0KXt6KHRoaXMudXNlT3J0aG8/dGhpcy5vcnRob1NoYWRlcjp0aGlzLnNoYWRlcix0aGlzLnByb2plY3RTaGFkZXIsdGhpcyx0LHRoaXMucGl4ZWxSYXRpbywhMSwhMSl9LG0uZHJhd1RyYW5zcGFyZW50PWZ1bmN0aW9uKHQpe3oodGhpcy51c2VPcnRobz90aGlzLm9ydGhvU2hhZGVyOnRoaXMuc2hhZGVyLHRoaXMucHJvamVjdFNoYWRlcix0aGlzLHQsdGhpcy5waXhlbFJhdGlvLCEwLCExKX0sbS5kcmF3UGljaz1mdW5jdGlvbih0KXt6KHRoaXMudXNlT3J0aG8/dGhpcy5waWNrT3J0aG9TaGFkZXI6dGhpcy5waWNrUGVyc3BlY3RpdmVTaGFkZXIsdGhpcy5waWNrUHJvamVjdFNoYWRlcix0aGlzLHQsMSwhMCwhMCl9LG0ucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7dmFyIGU9dC52YWx1ZVsyXSsodC52YWx1ZVsxXTw8OCkrKHQudmFsdWVbMF08PDE2KTtpZihlPj10aGlzLnBvaW50Q291bnR8fGU8MClyZXR1cm4gbnVsbDt2YXIgcj10aGlzLnBvaW50c1tlXSxuPXRoaXMuX3NlbGVjdFJlc3VsdDtuLmluZGV4PWU7Zm9yKHZhciBpPTA7aTwzOysraSluLnBvc2l0aW9uW2ldPW4uZGF0YUNvb3JkaW5hdGVbaV09cltpXTtyZXR1cm4gbn0sbS5oaWdobGlnaHQ9ZnVuY3Rpb24odCl7aWYodCl7dmFyIGU9dC5pbmRleCxyPTI1NSZlLG49ZT4+OCYyNTUsaT1lPj4xNiYyNTU7dGhpcy5oaWdobGlnaHRJZD1bci8yNTUsbi8yNTUsaS8yNTUsMF19ZWxzZSB0aGlzLmhpZ2hsaWdodElkPVsxLDEsMSwxXX0sbS51cGRhdGU9ZnVuY3Rpb24odCl7aWYoXCJwZXJzcGVjdGl2ZVwiaW4odD10fHx7fSkmJih0aGlzLnVzZU9ydGhvPSF0LnBlcnNwZWN0aXZlKSxcIm9ydGhvZ3JhcGhpY1wiaW4gdCYmKHRoaXMudXNlT3J0aG89ISF0Lm9ydGhvZ3JhcGhpYyksXCJsaW5lV2lkdGhcImluIHQmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCksXCJwcm9qZWN0XCJpbiB0KWlmKEFycmF5LmlzQXJyYXkodC5wcm9qZWN0KSl0aGlzLmF4ZXNQcm9qZWN0PXQucHJvamVjdDtlbHNle3ZhciBlPSEhdC5wcm9qZWN0O3RoaXMuYXhlc1Byb2plY3Q9W2UsZSxlXX1pZihcInByb2plY3RTY2FsZVwiaW4gdClpZihBcnJheS5pc0FycmF5KHQucHJvamVjdFNjYWxlKSl0aGlzLnByb2plY3RTY2FsZT10LnByb2plY3RTY2FsZS5zbGljZSgpO2Vsc2V7dmFyIHI9K3QucHJvamVjdFNjYWxlO3RoaXMucHJvamVjdFNjYWxlPVtyLHIscl19aWYodGhpcy5wcm9qZWN0SGFzQWxwaGE9ITEsXCJwcm9qZWN0T3BhY2l0eVwiaW4gdCl7aWYoQXJyYXkuaXNBcnJheSh0LnByb2plY3RPcGFjaXR5KSl0aGlzLnByb2plY3RPcGFjaXR5PXQucHJvamVjdE9wYWNpdHkuc2xpY2UoKTtlbHNle3I9K3QucHJvamVjdE9wYWNpdHk7dGhpcy5wcm9qZWN0T3BhY2l0eT1bcixyLHJdfWZvcih2YXIgbj0wO248MzsrK24pdGhpcy5wcm9qZWN0T3BhY2l0eVtuXT1nKHRoaXMucHJvamVjdE9wYWNpdHlbbl0pLHRoaXMucHJvamVjdE9wYWNpdHlbbl08MSYmKHRoaXMucHJvamVjdEhhc0FscGhhPSEwKX10aGlzLmhhc0FscGhhPSExLFwib3BhY2l0eVwiaW4gdCYmKHRoaXMub3BhY2l0eT1nKHQub3BhY2l0eSksdGhpcy5vcGFjaXR5PDEmJih0aGlzLmhhc0FscGhhPSEwKSksdGhpcy5kaXJ0eT0hMDt2YXIgaSxhLHM9dC5wb3NpdGlvbixsPXQuZm9udHx8XCJub3JtYWxcIixjPXQuYWxpZ25tZW50fHxbMCwwXTtpZigyPT09Yy5sZW5ndGgpaT1jWzBdLGE9Y1sxXTtlbHNle2k9W10sYT1bXTtmb3Iobj0wO248Yy5sZW5ndGg7KytuKWlbbl09Y1tuXVswXSxhW25dPWNbbl1bMV19dmFyIHU9WzEvMCwxLzAsMS8wXSxoPVstMS8wLC0xLzAsLTEvMF0sZj10LmdseXBoLHA9dC5jb2xvcixkPXQuc2l6ZSx2PXQuYW5nbGUsbT10LmxpbmVDb2xvcix5PS0xLHg9MCxiPTAsXz0wO2lmKHMubGVuZ3RoKXtfPXMubGVuZ3RoO3Q6Zm9yKG49MDtuPF87KytuKXtmb3IodmFyIHc9c1tuXSxrPTA7azwzOysraylpZihpc05hTih3W2tdKXx8IWlzRmluaXRlKHdba10pKWNvbnRpbnVlIHQ7dmFyIEE9KE49TyhmLG4sbCx0aGlzLnBpeGVsUmF0aW8pKS5tZXNoLFQ9Ti5saW5lcyxNPU4uYm91bmRzO3grPTMqQS5jZWxscy5sZW5ndGgsYis9MipULmVkZ2VzLmxlbmd0aH19dmFyIFM9eCtiLEU9by5tYWxsb2NGbG9hdCgzKlMpLEM9by5tYWxsb2NGbG9hdCg0KlMpLEw9by5tYWxsb2NGbG9hdCgyKlMpLHo9by5tYWxsb2NVaW50MzIoUyk7aWYoUz4wKXt2YXIgST0wLEQ9eCxQPVswLDAsMCwxXSxSPVswLDAsMCwxXSxGPUFycmF5LmlzQXJyYXkocCkmJkFycmF5LmlzQXJyYXkocFswXSksQj1BcnJheS5pc0FycmF5KG0pJiZBcnJheS5pc0FycmF5KG1bMF0pO3Q6Zm9yKG49MDtuPF87KytuKXt5Kz0xO2Zvcih3PXNbbl0saz0wO2s8MzsrK2spe2lmKGlzTmFOKHdba10pfHwhaXNGaW5pdGUod1trXSkpY29udGludWUgdDtoW2tdPU1hdGgubWF4KGhba10sd1trXSksdVtrXT1NYXRoLm1pbih1W2tdLHdba10pfUE9KE49TyhmLG4sbCx0aGlzLnBpeGVsUmF0aW8pKS5tZXNoLFQ9Ti5saW5lcyxNPU4uYm91bmRzO3ZhciBOLGo9Ti52aXNpYmxlO2lmKGopaWYoQXJyYXkuaXNBcnJheShwKSl7aWYoMz09PShWPUY/bjxwLmxlbmd0aD9wW25dOlswLDAsMCwwXTpwKS5sZW5ndGgpe2ZvcihrPTA7azwzOysraylQW2tdPVZba107UFszXT0xfWVsc2UgaWYoND09PVYubGVuZ3RoKXtmb3Ioaz0wO2s8NDsrK2spUFtrXT1WW2tdOyF0aGlzLmhhc0FscGhhJiZWWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKX19ZWxzZSBQWzBdPVBbMV09UFsyXT0wLFBbM109MTtlbHNlIFA9WzEsMSwxLDBdO2lmKGopaWYoQXJyYXkuaXNBcnJheShtKSl7dmFyIFY7aWYoMz09PShWPUI/bjxtLmxlbmd0aD9tW25dOlswLDAsMCwwXTptKS5sZW5ndGgpe2ZvcihrPTA7azwzOysraylSW2tdPVZba107UltrXT0xfWVsc2UgaWYoND09PVYubGVuZ3RoKXtmb3Ioaz0wO2s8NDsrK2spUltrXT1WW2tdOyF0aGlzLmhhc0FscGhhJiZWWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKX19ZWxzZSBSWzBdPVJbMV09UlsyXT0wLFJbM109MTtlbHNlIFI9WzEsMSwxLDBdO3ZhciBVPS41O2o/QXJyYXkuaXNBcnJheShkKT9VPW48ZC5sZW5ndGg/K2Rbbl06MTI6ZD9VPStkOnRoaXMudXNlT3J0aG8mJihVPTEyKTpVPTA7dmFyIHE9MDtBcnJheS5pc0FycmF5KHYpP3E9bjx2Lmxlbmd0aD8rdltuXTowOnYmJihxPSt2KTt2YXIgSD1NYXRoLmNvcyhxKSxHPU1hdGguc2luKHEpO2Zvcih3PXNbbl0saz0wO2s8MzsrK2spaFtrXT1NYXRoLm1heChoW2tdLHdba10pLHVba109TWF0aC5taW4odVtrXSx3W2tdKTt2YXIgWT1pLFc9YTtZPTA7QXJyYXkuaXNBcnJheShpKT9ZPW48aS5sZW5ndGg/aVtuXTowOmkmJihZPWkpO1c9MDtBcnJheS5pc0FycmF5KGEpP1c9bjxhLmxlbmd0aD9hW25dOjA6YSYmKFc9YSk7dmFyIFg9W1kqPVk+MD8xLU1bMF1bMF06WTwwPzErTVsxXVswXToxLFcqPVc+MD8xLU1bMF1bMV06VzwwPzErTVsxXVsxXToxXSxaPUEuY2VsbHN8fFtdLCQ9QS5wb3NpdGlvbnN8fFtdO2ZvcihrPTA7azxaLmxlbmd0aDsrK2spZm9yKHZhciBKPVpba10sSz0wO0s8MzsrK0spe2Zvcih2YXIgUT0wO1E8MzsrK1EpRVszKkkrUV09d1tRXTtmb3IoUT0wO1E8NDsrK1EpQ1s0KkkrUV09UFtRXTt6W0ldPXk7dmFyIHR0PSRbSltLXV07TFsyKkldPVUqKEgqdHRbMF0tRyp0dFsxXStYWzBdKSxMWzIqSSsxXT1VKihHKnR0WzBdK0gqdHRbMV0rWFsxXSksSSs9MX1mb3IoWj1ULmVkZ2VzLCQ9VC5wb3NpdGlvbnMsaz0wO2s8Wi5sZW5ndGg7KytrKWZvcihKPVpba10sSz0wO0s8MjsrK0spe2ZvcihRPTA7UTwzOysrUSlFWzMqRCtRXT13W1FdO2ZvcihRPTA7UTw0OysrUSlDWzQqRCtRXT1SW1FdO3pbRF09eTt0dD0kW0pbS11dO0xbMipEXT1VKihIKnR0WzBdLUcqdHRbMV0rWFswXSksTFsyKkQrMV09VSooRyp0dFswXStIKnR0WzFdK1hbMV0pLEQrPTF9fX10aGlzLmJvdW5kcz1bdSxoXSx0aGlzLnBvaW50cz1zLHRoaXMucG9pbnRDb3VudD1zLmxlbmd0aCx0aGlzLnZlcnRleENvdW50PXgsdGhpcy5saW5lVmVydGV4Q291bnQ9Yix0aGlzLnBvaW50QnVmZmVyLnVwZGF0ZShFKSx0aGlzLmNvbG9yQnVmZmVyLnVwZGF0ZShDKSx0aGlzLmdseXBoQnVmZmVyLnVwZGF0ZShMKSx0aGlzLmlkQnVmZmVyLnVwZGF0ZSh6KSxvLmZyZWUoRSksby5mcmVlKEMpLG8uZnJlZShMKSxvLmZyZWUoeil9LG0uZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLm9ydGhvU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tQZXJzcGVjdGl2ZVNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrT3J0aG9TaGFkZXIuZGlzcG9zZSgpLHRoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLnBvaW50QnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmNvbG9yQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmdseXBoQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmlkQnVmZmVyLmRpc3Bvc2UoKX19LHtcIi4vbGliL2dldC1zaW1wbGUtc3RyaW5nXCI6MjkxLFwiLi9saWIvZ2x5cGhzXCI6MjkyLFwiLi9saWIvc2hhZGVyc1wiOjI5MyxcImdsLWJ1ZmZlclwiOjIzOCxcImdsLW1hdDQvbXVsdGlwbHlcIjoyNjQsXCJnbC12YW9cIjozMjAsXCJpcy1zdHJpbmctYmxhbmtcIjo0MTYsXCJ0eXBlZGFycmF5LXBvb2xcIjo1MzB9XSwyOTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2xzbGlmeVwiKTtyLmJveFZlcnRleD1uKFtcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzIgdmVydGV4O1xcblxcbnVuaWZvcm0gdmVjMiBjb3JuZXJBLCBjb3JuZXJCO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChtaXgoY29ybmVyQSwgY29ybmVyQiwgdmVydGV4KSwgMCwgMSk7XFxufVxcblwiXSksci5ib3hGcmFnbWVudD1uKFtcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxudW5pZm9ybSB2ZWM0IGNvbG9yO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIl0pfSx7Z2xzbGlmeTo0MDJ9XSwyOTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2wtc2hhZGVyXCIpLGk9dChcImdsLWJ1ZmZlclwiKSxhPXQoXCIuL2xpYi9zaGFkZXJzXCIpO2Z1bmN0aW9uIG8odCxlLHIpe3RoaXMucGxvdD10LHRoaXMuYm94QnVmZmVyPWUsdGhpcy5ib3hTaGFkZXI9cix0aGlzLmVuYWJsZWQ9ITAsdGhpcy5zZWxlY3RCb3g9WzEvMCwxLzAsLTEvMCwtMS8wXSx0aGlzLmJvcmRlckNvbG9yPVswLDAsMCwxXSx0aGlzLmlubmVyRmlsbD0hMSx0aGlzLmlubmVyQ29sb3I9WzAsMCwwLC4yNV0sdGhpcy5vdXRlckZpbGw9ITAsdGhpcy5vdXRlckNvbG9yPVswLDAsMCwuNV0sdGhpcy5ib3JkZXJXaWR0aD0xMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdsLHM9aShyLFswLDAsMCwxLDEsMCwxLDFdKSxsPW4ocixhLmJveFZlcnRleCxhLmJveEZyYWdtZW50KSxjPW5ldyBvKHQscyxsKTtyZXR1cm4gYy51cGRhdGUoZSksdC5hZGRPdmVybGF5KGMpLGN9O3ZhciBzPW8ucHJvdG90eXBlO3MuZHJhdz1mdW5jdGlvbigpe2lmKHRoaXMuZW5hYmxlZCl7dmFyIHQ9dGhpcy5wbG90LGU9dGhpcy5zZWxlY3RCb3gscj10aGlzLmJvcmRlcldpZHRoLG49KHRoaXMuaW5uZXJGaWxsLHRoaXMuaW5uZXJDb2xvciksaT0odGhpcy5vdXRlckZpbGwsdGhpcy5vdXRlckNvbG9yKSxhPXRoaXMuYm9yZGVyQ29sb3Isbz10LmJveCxzPXQuc2NyZWVuQm94LGw9dC5kYXRhQm94LGM9dC52aWV3Qm94LHU9dC5waXhlbFJhdGlvLGg9KGVbMF0tbFswXSkqKGNbMl0tY1swXSkvKGxbMl0tbFswXSkrY1swXSxmPShlWzFdLWxbMV0pKihjWzNdLWNbMV0pLyhsWzNdLWxbMV0pK2NbMV0scD0oZVsyXS1sWzBdKSooY1syXS1jWzBdKS8obFsyXS1sWzBdKStjWzBdLGQ9KGVbM10tbFsxXSkqKGNbM10tY1sxXSkvKGxbM10tbFsxXSkrY1sxXTtpZihoPU1hdGgubWF4KGgsY1swXSksZj1NYXRoLm1heChmLGNbMV0pLHA9TWF0aC5taW4ocCxjWzJdKSxkPU1hdGgubWluKGQsY1szXSksIShwPGh8fGQ8Zikpe28uYmluZCgpO3ZhciBnPXNbMl0tc1swXSx2PXNbM10tc1sxXTtpZih0aGlzLm91dGVyRmlsbCYmKG8uZHJhd0JveCgwLDAsZyxmLGkpLG8uZHJhd0JveCgwLGYsaCxkLGkpLG8uZHJhd0JveCgwLGQsZyx2LGkpLG8uZHJhd0JveChwLGYsZyxkLGkpKSx0aGlzLmlubmVyRmlsbCYmby5kcmF3Qm94KGgsZixwLGQsbikscj4wKXt2YXIgbT1yKnU7by5kcmF3Qm94KGgtbSxmLW0scCttLGYrbSxhKSxvLmRyYXdCb3goaC1tLGQtbSxwK20sZCttLGEpLG8uZHJhd0JveChoLW0sZi1tLGgrbSxkK20sYSksby5kcmF3Qm94KHAtbSxmLW0scCttLGQrbSxhKX19fX0scy51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fSx0aGlzLmlubmVyRmlsbD0hIXQuaW5uZXJGaWxsLHRoaXMub3V0ZXJGaWxsPSEhdC5vdXRlckZpbGwsdGhpcy5pbm5lckNvbG9yPSh0LmlubmVyQ29sb3J8fFswLDAsMCwuNV0pLnNsaWNlKCksdGhpcy5vdXRlckNvbG9yPSh0Lm91dGVyQ29sb3J8fFswLDAsMCwuNV0pLnNsaWNlKCksdGhpcy5ib3JkZXJDb2xvcj0odC5ib3JkZXJDb2xvcnx8WzAsMCwwLDFdKS5zbGljZSgpLHRoaXMuYm9yZGVyV2lkdGg9dC5ib3JkZXJXaWR0aHx8MCx0aGlzLnNlbGVjdEJveD0odC5zZWxlY3RCb3h8fHRoaXMuc2VsZWN0Qm94KS5zbGljZSgpfSxzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmJveEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5ib3hTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGxvdC5yZW1vdmVPdmVybGF5KHRoaXMpfX0se1wiLi9saWIvc2hhZGVyc1wiOjI5NSxcImdsLWJ1ZmZlclwiOjIzOCxcImdsLXNoYWRlclwiOjI5OH1dLDI5NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW4odCxlKSxhPWkubWFsbG9jVWludDgoZVswXSplWzFdKjQpO3JldHVybiBuZXcgYyh0LHIsYSl9O3ZhciBuPXQoXCJnbC1mYm9cIiksaT10KFwidHlwZWRhcnJheS1wb29sXCIpLGE9dChcIm5kYXJyYXlcIiksbz10KFwiYml0LXR3aWRkbGVcIikubmV4dFBvdzIscz10KFwiY3dpc2UvbGliL3dyYXBwZXJcIikoe2FyZ3M6W1wiYXJyYXlcIix7b2Zmc2V0OlswLDAsMV0sYXJyYXk6MH0se29mZnNldDpbMCwwLDJdLGFycmF5OjB9LHtvZmZzZXQ6WzAsMCwzXSxhcnJheTowfSxcInNjYWxhclwiLFwic2NhbGFyXCIsXCJpbmRleFwiXSxwcmU6e2JvZHk6XCJ7dGhpc19jbG9zZXN0RDI9MWU4LHRoaXNfY2xvc2VzdFg9LTEsdGhpc19jbG9zZXN0WT0tMX1cIixhcmdzOltdLHRoaXNWYXJzOltcInRoaXNfY2xvc2VzdEQyXCIsXCJ0aGlzX2Nsb3Nlc3RYXCIsXCJ0aGlzX2Nsb3Nlc3RZXCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keTpcIntpZihfaW5saW5lXzE2X2FyZzBfPDI1NXx8X2lubGluZV8xNl9hcmcxXzwyNTV8fF9pbmxpbmVfMTZfYXJnMl88MjU1fHxfaW5saW5lXzE2X2FyZzNfPDI1NSl7dmFyIF9pbmxpbmVfMTZfbD1faW5saW5lXzE2X2FyZzRfLV9pbmxpbmVfMTZfYXJnNl9bMF0sX2lubGluZV8xNl9hPV9pbmxpbmVfMTZfYXJnNV8tX2lubGluZV8xNl9hcmc2X1sxXSxfaW5saW5lXzE2X2Y9X2lubGluZV8xNl9sKl9pbmxpbmVfMTZfbCtfaW5saW5lXzE2X2EqX2lubGluZV8xNl9hO19pbmxpbmVfMTZfZjx0aGlzX2Nsb3Nlc3REMiYmKHRoaXNfY2xvc2VzdEQyPV9pbmxpbmVfMTZfZix0aGlzX2Nsb3Nlc3RYPV9pbmxpbmVfMTZfYXJnNl9bMF0sdGhpc19jbG9zZXN0WT1faW5saW5lXzE2X2FyZzZfWzFdKX19XCIsYXJnczpbe25hbWU6XCJfaW5saW5lXzE2X2FyZzBfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfMTZfYXJnMV9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xNl9hcmcyX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzE2X2FyZzNfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfMTZfYXJnNF9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xNl9hcmc1X1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzE2X2FyZzZfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDo0fV0sdGhpc1ZhcnM6W1widGhpc19jbG9zZXN0RDJcIixcInRoaXNfY2xvc2VzdFhcIixcInRoaXNfY2xvc2VzdFlcIl0sbG9jYWxWYXJzOltcIl9pbmxpbmVfMTZfYVwiLFwiX2lubGluZV8xNl9mXCIsXCJfaW5saW5lXzE2X2xcIl19LHBvc3Q6e2JvZHk6XCJ7cmV0dXJuW3RoaXNfY2xvc2VzdFgsdGhpc19jbG9zZXN0WSx0aGlzX2Nsb3Nlc3REMl19XCIsYXJnczpbXSx0aGlzVmFyczpbXCJ0aGlzX2Nsb3Nlc3REMlwiLFwidGhpc19jbG9zZXN0WFwiLFwidGhpc19jbG9zZXN0WVwiXSxsb2NhbFZhcnM6W119LGRlYnVnOiExLGZ1bmNOYW1lOlwiY3dpc2VcIixibG9ja1NpemU6NjR9KTtmdW5jdGlvbiBsKHQsZSxyLG4saSl7dGhpcy5jb29yZD1bdCxlXSx0aGlzLmlkPXIsdGhpcy52YWx1ZT1uLHRoaXMuZGlzdGFuY2U9aX1mdW5jdGlvbiBjKHQsZSxyKXt0aGlzLmdsPXQsdGhpcy5mYm89ZSx0aGlzLmJ1ZmZlcj1yLHRoaXMuX3JlYWRUaW1lb3V0PW51bGw7dmFyIG49dGhpczt0aGlzLl9yZWFkQ2FsbGJhY2s9ZnVuY3Rpb24oKXtuLmdsJiYoZS5iaW5kKCksdC5yZWFkUGl4ZWxzKDAsMCxlLnNoYXBlWzBdLGUuc2hhcGVbMV0sdC5SR0JBLHQuVU5TSUdORURfQllURSxuLmJ1ZmZlciksbi5fcmVhZFRpbWVvdXQ9bnVsbCl9fXZhciB1PWMucHJvdG90eXBlO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LFwic2hhcGVcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2w/dGhpcy5mYm8uc2hhcGUuc2xpY2UoKTpbMCwwXX0sc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMuZ2wpe3RoaXMuZmJvLnNoYXBlPXQ7dmFyIGU9dGhpcy5mYm8uc2hhcGVbMF0scj10aGlzLmZiby5zaGFwZVsxXTtpZihyKmUqND50aGlzLmJ1ZmZlci5sZW5ndGgpe2kuZnJlZSh0aGlzLmJ1ZmZlcik7Zm9yKHZhciBuPXRoaXMuYnVmZmVyPWkubWFsbG9jVWludDgobyhyKmUqNCkpLGE9MDthPHIqZSo0OysrYSluW2FdPTI1NX1yZXR1cm4gdH19fSksdS5iZWdpbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2w7dGhpcy5zaGFwZTt0JiYodGhpcy5mYm8uYmluZCgpLHQuY2xlYXJDb2xvcigxLDEsMSwxKSx0LmNsZWFyKHQuQ09MT1JfQlVGRkVSX0JJVHx0LkRFUFRIX0JVRkZFUl9CSVQpKX0sdS5lbmQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3QmJih0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLG51bGwpLHRoaXMuX3JlYWRUaW1lb3V0fHxjbGVhclRpbWVvdXQodGhpcy5fcmVhZFRpbWVvdXQpLHRoaXMuX3JlYWRUaW1lb3V0PXNldFRpbWVvdXQodGhpcy5fcmVhZENhbGxiYWNrLDEpKX0sdS5xdWVyeT1mdW5jdGlvbih0LGUscil7aWYoIXRoaXMuZ2wpcmV0dXJuIG51bGw7dmFyIG49dGhpcy5mYm8uc2hhcGUuc2xpY2UoKTt0fD0wLGV8PTAsXCJudW1iZXJcIiE9dHlwZW9mIHImJihyPTEpO3ZhciBpPTB8TWF0aC5taW4oTWF0aC5tYXgodC1yLDApLG5bMF0pLG89MHxNYXRoLm1pbihNYXRoLm1heCh0K3IsMCksblswXSksYz0wfE1hdGgubWluKE1hdGgubWF4KGUtciwwKSxuWzFdKSx1PTB8TWF0aC5taW4oTWF0aC5tYXgoZStyLDApLG5bMV0pO2lmKG88PWl8fHU8PWMpcmV0dXJuIG51bGw7dmFyIGg9W28taSx1LWNdLGY9YSh0aGlzLmJ1ZmZlcixbaFswXSxoWzFdLDRdLFs0LDQqblswXSwxXSw0KihpK25bMF0qYykpLHA9cyhmLmhpKGhbMF0saFsxXSwxKSxyLHIpLGQ9cFswXSxnPXBbMV07cmV0dXJuIGQ8MHx8TWF0aC5wb3codGhpcy5yYWRpdXMsMik8cFsyXT9udWxsOm5ldyBsKGQraXwwLGcrY3wwLGYuZ2V0KGQsZywwKSxbZi5nZXQoZCxnLDEpLGYuZ2V0KGQsZywyKSxmLmdldChkLGcsMyldLE1hdGguc3FydChwWzJdKSl9LHUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuZ2wmJih0aGlzLmZiby5kaXNwb3NlKCksaS5mcmVlKHRoaXMuYnVmZmVyKSx0aGlzLmdsPW51bGwsdGhpcy5fcmVhZFRpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLl9yZWFkVGltZW91dCkpfX0se1wiYml0LXR3aWRkbGVcIjo4MyxcImN3aXNlL2xpYi93cmFwcGVyXCI6MTQwLFwiZ2wtZmJvXCI6MjQ2LG5kYXJyYXk6NDQzLFwidHlwZWRhcnJheS1wb29sXCI6NTMwfV0sMjk4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vbGliL2NyZWF0ZS11bmlmb3Jtc1wiKSxpPXQoXCIuL2xpYi9jcmVhdGUtYXR0cmlidXRlc1wiKSxhPXQoXCIuL2xpYi9yZWZsZWN0XCIpLG89dChcIi4vbGliL3NoYWRlci1jYWNoZVwiKSxzPXQoXCIuL2xpYi9ydW50aW1lLXJlZmxlY3RcIiksbD10KFwiLi9saWIvR0xFcnJvclwiKTtmdW5jdGlvbiBjKHQpe3RoaXMuZ2w9dCx0aGlzLmdsLmxhc3RBdHRyaWJDb3VudD0wLHRoaXMuX3ZyZWY9dGhpcy5fZnJlZj10aGlzLl9yZWxpbms9dGhpcy52ZXJ0U2hhZGVyPXRoaXMuZnJhZ1NoYWRlcj10aGlzLnByb2dyYW09dGhpcy5hdHRyaWJ1dGVzPXRoaXMudW5pZm9ybXM9dGhpcy50eXBlcz1udWxsfXZhciB1PWMucHJvdG90eXBlO2Z1bmN0aW9uIGgodCxlKXtyZXR1cm4gdC5uYW1lPGUubmFtZT8tMToxfXUuYmluZD1mdW5jdGlvbigpe3ZhciB0O3RoaXMucHJvZ3JhbXx8dGhpcy5fcmVsaW5rKCk7dmFyIGU9dGhpcy5nbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHRoaXMucHJvZ3JhbSx0aGlzLmdsLkFDVElWRV9BVFRSSUJVVEVTKSxyPXRoaXMuZ2wubGFzdEF0dHJpYkNvdW50O2lmKGU+cilmb3IodD1yO3Q8ZTt0KyspdGhpcy5nbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh0KTtlbHNlIGlmKHI+ZSlmb3IodD1lO3Q8cjt0KyspdGhpcy5nbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodCk7dGhpcy5nbC5sYXN0QXR0cmliQ291bnQ9ZSx0aGlzLmdsLnVzZVByb2dyYW0odGhpcy5wcm9ncmFtKX0sdS5kaXNwb3NlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuZ2wubGFzdEF0dHJpYkNvdW50LGU9MDtlPHQ7ZSsrKXRoaXMuZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpO3RoaXMuZ2wubGFzdEF0dHJpYkNvdW50PTAsdGhpcy5fZnJlZiYmdGhpcy5fZnJlZi5kaXNwb3NlKCksdGhpcy5fdnJlZiYmdGhpcy5fdnJlZi5kaXNwb3NlKCksdGhpcy5hdHRyaWJ1dGVzPXRoaXMudHlwZXM9dGhpcy52ZXJ0U2hhZGVyPXRoaXMuZnJhZ1NoYWRlcj10aGlzLnByb2dyYW09dGhpcy5fcmVsaW5rPXRoaXMuX2ZyZWY9dGhpcy5fdnJlZj1udWxsfSx1LnVwZGF0ZT1mdW5jdGlvbih0LGUscixjKXtpZighZXx8MT09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciB1PXQ7dD11LnZlcnRleCxlPXUuZnJhZ21lbnQscj11LnVuaWZvcm1zLGM9dS5hdHRyaWJ1dGVzfXZhciBmPXRoaXMscD1mLmdsLGQ9Zi5fdnJlZjtmLl92cmVmPW8uc2hhZGVyKHAscC5WRVJURVhfU0hBREVSLHQpLGQmJmQuZGlzcG9zZSgpLGYudmVydFNoYWRlcj1mLl92cmVmLnNoYWRlcjt2YXIgZz10aGlzLl9mcmVmO2lmKGYuX2ZyZWY9by5zaGFkZXIocCxwLkZSQUdNRU5UX1NIQURFUixlKSxnJiZnLmRpc3Bvc2UoKSxmLmZyYWdTaGFkZXI9Zi5fZnJlZi5zaGFkZXIsIXJ8fCFjKXt2YXIgdj1wLmNyZWF0ZVByb2dyYW0oKTtpZihwLmF0dGFjaFNoYWRlcih2LGYuZnJhZ1NoYWRlcikscC5hdHRhY2hTaGFkZXIodixmLnZlcnRTaGFkZXIpLHAubGlua1Byb2dyYW0odiksIXAuZ2V0UHJvZ3JhbVBhcmFtZXRlcih2LHAuTElOS19TVEFUVVMpKXt2YXIgbT1wLmdldFByb2dyYW1JbmZvTG9nKHYpO3Rocm93IG5ldyBsKG0sXCJFcnJvciBsaW5raW5nIHByb2dyYW06XCIrbSl9cj1yfHxzLnVuaWZvcm1zKHAsdiksYz1jfHxzLmF0dHJpYnV0ZXMocCx2KSxwLmRlbGV0ZVByb2dyYW0odil9KGM9Yy5zbGljZSgpKS5zb3J0KGgpO3ZhciB5LHg9W10sYj1bXSxfPVtdO2Zvcih5PTA7eTxjLmxlbmd0aDsrK3kpe3ZhciB3PWNbeV07aWYody50eXBlLmluZGV4T2YoXCJtYXRcIik+PTApe2Zvcih2YXIgaz0wfHcudHlwZS5jaGFyQXQody50eXBlLmxlbmd0aC0xKSxBPW5ldyBBcnJheShrKSxUPTA7VDxrOysrVClBW1RdPV8ubGVuZ3RoLGIucHVzaCh3Lm5hbWUrXCJbXCIrVCtcIl1cIiksXCJudW1iZXJcIj09dHlwZW9mIHcubG9jYXRpb24/Xy5wdXNoKHcubG9jYXRpb24rVCk6QXJyYXkuaXNBcnJheSh3LmxvY2F0aW9uKSYmdy5sb2NhdGlvbi5sZW5ndGg9PT1rJiZcIm51bWJlclwiPT10eXBlb2Ygdy5sb2NhdGlvbltUXT9fLnB1c2goMHx3LmxvY2F0aW9uW1RdKTpfLnB1c2goLTEpO3gucHVzaCh7bmFtZTp3Lm5hbWUsdHlwZTp3LnR5cGUsbG9jYXRpb25zOkF9KX1lbHNlIHgucHVzaCh7bmFtZTp3Lm5hbWUsdHlwZTp3LnR5cGUsbG9jYXRpb25zOltfLmxlbmd0aF19KSxiLnB1c2gody5uYW1lKSxcIm51bWJlclwiPT10eXBlb2Ygdy5sb2NhdGlvbj9fLnB1c2goMHx3LmxvY2F0aW9uKTpfLnB1c2goLTEpfXZhciBNPTA7Zm9yKHk9MDt5PF8ubGVuZ3RoOysreSlpZihfW3ldPDApe2Zvcig7Xy5pbmRleE9mKE0pPj0wOylNKz0xO19beV09TX12YXIgUz1uZXcgQXJyYXkoci5sZW5ndGgpO2Z1bmN0aW9uIEUoKXtmLnByb2dyYW09by5wcm9ncmFtKHAsZi5fdnJlZixmLl9mcmVmLGIsXyk7Zm9yKHZhciB0PTA7dDxyLmxlbmd0aDsrK3QpU1t0XT1wLmdldFVuaWZvcm1Mb2NhdGlvbihmLnByb2dyYW0sclt0XS5uYW1lKX1FKCksZi5fcmVsaW5rPUUsZi50eXBlcz17dW5pZm9ybXM6YShyKSxhdHRyaWJ1dGVzOmEoYyl9LGYuYXR0cmlidXRlcz1pKHAsZix4LF8pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLFwidW5pZm9ybXNcIixuKHAsZixyLFMpKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9bmV3IGModCk7cmV0dXJuIGEudXBkYXRlKGUscixuLGkpLGF9fSx7XCIuL2xpYi9HTEVycm9yXCI6Mjk5LFwiLi9saWIvY3JlYXRlLWF0dHJpYnV0ZXNcIjozMDAsXCIuL2xpYi9jcmVhdGUtdW5pZm9ybXNcIjozMDEsXCIuL2xpYi9yZWZsZWN0XCI6MzAyLFwiLi9saWIvcnVudGltZS1yZWZsZWN0XCI6MzAzLFwiLi9saWIvc2hhZGVyLWNhY2hlXCI6MzA0fV0sMjk5OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscil7dGhpcy5zaG9ydE1lc3NhZ2U9ZXx8XCJcIix0aGlzLmxvbmdNZXNzYWdlPXJ8fFwiXCIsdGhpcy5yYXdFcnJvcj10fHxcIlwiLHRoaXMubWVzc2FnZT1cImdsLXNoYWRlcjogXCIrKGV8fHR8fFwiXCIpKyhyP1wiXFxuXCIrcjpcIlwiKSx0aGlzLnN0YWNrPShuZXcgRXJyb3IpLnN0YWNrfW4ucHJvdG90eXBlPW5ldyBFcnJvcixuLnByb3RvdHlwZS5uYW1lPVwiR0xFcnJvclwiLG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPW4sZS5leHBvcnRzPW59LHt9XSwzMDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7Zm9yKHZhciBhPXt9LGw9MCxjPXIubGVuZ3RoO2w8YzsrK2wpe3ZhciB1PXJbbF0saD11Lm5hbWUsZj11LnR5cGUscD11LmxvY2F0aW9ucztzd2l0Y2goZil7Y2FzZVwiYm9vbFwiOmNhc2VcImludFwiOmNhc2VcImZsb2F0XCI6byh0LGUscFswXSxpLDEsYSxoKTticmVhaztkZWZhdWx0OmlmKGYuaW5kZXhPZihcInZlY1wiKT49MCl7dmFyIGQ9Zi5jaGFyQ29kZUF0KGYubGVuZ3RoLTEpLTQ4O2lmKGQ8Mnx8ZD40KXRocm93IG5ldyBuKFwiXCIsXCJJbnZhbGlkIGRhdGEgdHlwZSBmb3IgYXR0cmlidXRlIFwiK2grXCI6IFwiK2YpO28odCxlLHBbMF0saSxkLGEsaCl9ZWxzZXtpZighKGYuaW5kZXhPZihcIm1hdFwiKT49MCkpdGhyb3cgbmV3IG4oXCJcIixcIlVua25vd24gZGF0YSB0eXBlIGZvciBhdHRyaWJ1dGUgXCIraCtcIjogXCIrZik7dmFyIGQ9Zi5jaGFyQ29kZUF0KGYubGVuZ3RoLTEpLTQ4O2lmKGQ8Mnx8ZD40KXRocm93IG5ldyBuKFwiXCIsXCJJbnZhbGlkIGRhdGEgdHlwZSBmb3IgYXR0cmlidXRlIFwiK2grXCI6IFwiK2YpO3ModCxlLHAsaSxkLGEsaCl9fX1yZXR1cm4gYX07dmFyIG49dChcIi4vR0xFcnJvclwiKTtmdW5jdGlvbiBpKHQsZSxyLG4saSxhKXt0aGlzLl9nbD10LHRoaXMuX3dyYXBwZXI9ZSx0aGlzLl9pbmRleD1yLHRoaXMuX2xvY2F0aW9ucz1uLHRoaXMuX2RpbWVuc2lvbj1pLHRoaXMuX2NvbnN0RnVuYz1hfXZhciBhPWkucHJvdG90eXBlO2Z1bmN0aW9uIG8odCxlLHIsbixhLG8scyl7Zm9yKHZhciBsPVtcImdsXCIsXCJ2XCJdLGM9W10sdT0wO3U8YTsrK3UpbC5wdXNoKFwieFwiK3UpLGMucHVzaChcInhcIit1KTtsLnB1c2goXCJpZih4MC5sZW5ndGg9PT12b2lkIDApe3JldHVybiBnbC52ZXJ0ZXhBdHRyaWJcIithK1wiZih2LFwiK2Muam9pbigpK1wiKX1lbHNle3JldHVybiBnbC52ZXJ0ZXhBdHRyaWJcIithK1wiZnYodix4MCl9XCIpO3ZhciBoPUZ1bmN0aW9uLmFwcGx5KG51bGwsbCksZj1uZXcgaSh0LGUscixuLGEsaCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG8scyx7c2V0OmZ1bmN0aW9uKGUpe3JldHVybiB0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShuW3JdKSxoKHQsbltyXSxlKSxlfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZn0sZW51bWVyYWJsZTohMH0pfWZ1bmN0aW9uIHModCxlLHIsbixpLGEscyl7Zm9yKHZhciBsPW5ldyBBcnJheShpKSxjPW5ldyBBcnJheShpKSx1PTA7dTxpOysrdSlvKHQsZSxyW3VdLG4saSxsLHUpLGNbdV09bFt1XTtPYmplY3QuZGVmaW5lUHJvcGVydHkobCxcImxvY2F0aW9uXCIse3NldDpmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgZT0wO2U8aTsrK2UpY1tlXS5sb2NhdGlvbj10W2VdO2Vsc2UgZm9yKGU9MDtlPGk7KytlKWNbZV0ubG9jYXRpb249dCtlO3JldHVybiB0fSxnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9bmV3IEFycmF5KGkpLGU9MDtlPGk7KytlKXRbZV09bltyW2VdXTtyZXR1cm4gdH0sZW51bWVyYWJsZTohMH0pLGwucG9pbnRlcj1mdW5jdGlvbihlLGEsbyxzKXtlPWV8fHQuRkxPQVQsYT0hIWEsbz1vfHxpKmkscz1zfHwwO2Zvcih2YXIgbD0wO2w8aTsrK2wpe3ZhciBjPW5bcltsXV07dC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGMsaSxlLGEsbyxzK2wqaSksdC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShjKX19O3ZhciBoPW5ldyBBcnJheShpKSxmPXRbXCJ2ZXJ0ZXhBdHRyaWJcIitpK1wiZnZcIl07T2JqZWN0LmRlZmluZVByb3BlcnR5KGEscyx7c2V0OmZ1bmN0aW9uKGUpe2Zvcih2YXIgYT0wO2E8aTsrK2Epe3ZhciBvPW5bclthXV07aWYodC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkobyksQXJyYXkuaXNBcnJheShlWzBdKSlmLmNhbGwodCxvLGVbYV0pO2Vsc2V7Zm9yKHZhciBzPTA7czxpOysrcyloW3NdPWVbaSphK3NdO2YuY2FsbCh0LG8saCl9fXJldHVybiBlfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbH0sZW51bWVyYWJsZTohMH0pfWEucG9pbnRlcj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLl9nbCxhPXRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF07aS52ZXJ0ZXhBdHRyaWJQb2ludGVyKGEsdGhpcy5fZGltZW5zaW9uLHR8fGkuRkxPQVQsISFlLHJ8fDAsbnx8MCksaS5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhKX0sYS5zZXQ9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRoaXMuX2NvbnN0RnVuYyh0aGlzLl9sb2NhdGlvbnNbdGhpcy5faW5kZXhdLHQsZSxyLG4pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxcImxvY2F0aW9uXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sb2NhdGlvbnNbdGhpcy5faW5kZXhdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQhPT10aGlzLl9sb2NhdGlvbnNbdGhpcy5faW5kZXhdJiYodGhpcy5fbG9jYXRpb25zW3RoaXMuX2luZGV4XT0wfHQsdGhpcy5fd3JhcHBlci5wcm9ncmFtPW51bGwpLDB8dH19KX0se1wiLi9HTEVycm9yXCI6Mjk5fV0sMzAxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vcmVmbGVjdFwiKSxpPXQoXCIuL0dMRXJyb3JcIik7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gbmV3IEZ1bmN0aW9uKFwieVwiLFwicmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHl9XCIpKHQpfWZ1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZTtyZXR1cm4gcn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbCh0LGUscil7c3dpdGNoKHIpe2Nhc2VcImJvb2xcIjpjYXNlXCJpbnRcIjpjYXNlXCJzYW1wbGVyMkRcIjpjYXNlXCJzYW1wbGVyQ3ViZVwiOnJldHVyblwiZ2wudW5pZm9ybTFpKGxvY2F0aW9uc1tcIitlK1wiXSxvYmpcIit0K1wiKVwiO2Nhc2VcImZsb2F0XCI6cmV0dXJuXCJnbC51bmlmb3JtMWYobG9jYXRpb25zW1wiK2UrXCJdLG9ialwiK3QrXCIpXCI7ZGVmYXVsdDp2YXIgbj1yLmluZGV4T2YoXCJ2ZWNcIik7aWYoISgwPD1uJiZuPD0xJiZyLmxlbmd0aD09PTQrbikpe2lmKDA9PT1yLmluZGV4T2YoXCJtYXRcIikmJjQ9PT1yLmxlbmd0aCl7dmFyIGE9ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTEpLTQ4O2lmKGE8Mnx8YT40KXRocm93IG5ldyBpKFwiXCIsXCJJbnZhbGlkIHVuaWZvcm0gZGltZW5zaW9uIHR5cGUgZm9yIG1hdHJpeCBcIituYW1lK1wiOiBcIityKTtyZXR1cm5cImdsLnVuaWZvcm1NYXRyaXhcIithK1wiZnYobG9jYXRpb25zW1wiK2UrXCJdLGZhbHNlLG9ialwiK3QrXCIpXCJ9dGhyb3cgbmV3IGkoXCJcIixcIlVua25vd24gdW5pZm9ybSBkYXRhIHR5cGUgZm9yIFwiK25hbWUrXCI6IFwiK3IpfXZhciBhPXIuY2hhckNvZGVBdChyLmxlbmd0aC0xKS00ODtpZihhPDJ8fGE+NCl0aHJvdyBuZXcgaShcIlwiLFwiSW52YWxpZCBkYXRhIHR5cGVcIik7c3dpdGNoKHIuY2hhckF0KDApKXtjYXNlXCJiXCI6Y2FzZVwiaVwiOnJldHVyblwiZ2wudW5pZm9ybVwiK2ErXCJpdihsb2NhdGlvbnNbXCIrZStcIl0sb2JqXCIrdCtcIilcIjtjYXNlXCJ2XCI6cmV0dXJuXCJnbC51bmlmb3JtXCIrYStcImZ2KGxvY2F0aW9uc1tcIitlK1wiXSxvYmpcIit0K1wiKVwiO2RlZmF1bHQ6dGhyb3cgbmV3IGkoXCJcIixcIlVucmVjb2duaXplZCBkYXRhIHR5cGUgZm9yIHZlY3RvciBcIituYW1lK1wiOiBcIityKX19fWZ1bmN0aW9uIGMoZSl7Zm9yKHZhciBuPVtcInJldHVybiBmdW5jdGlvbiB1cGRhdGVQcm9wZXJ0eShvYmope1wiXSxpPWZ1bmN0aW9uIHQoZSxyKXtpZihcIm9iamVjdFwiIT10eXBlb2YgcilyZXR1cm5bW2Uscl1dO3ZhciBuPVtdO2Zvcih2YXIgaSBpbiByKXt2YXIgYT1yW2ldLG89ZTtwYXJzZUludChpKStcIlwiPT09aT9vKz1cIltcIitpK1wiXVwiOm8rPVwiLlwiK2ksXCJvYmplY3RcIj09dHlwZW9mIGE/bi5wdXNoLmFwcGx5KG4sdChvLGEpKTpuLnB1c2goW28sYV0pfXJldHVybiBufShcIlwiLGUpLGE9MDthPGkubGVuZ3RoOysrYSl7dmFyIG89aVthXSxjPW9bMF0sdT1vWzFdO3NbdV0mJm4ucHVzaChsKGMsdSxyW3VdLnR5cGUpKX1uLnB1c2goXCJyZXR1cm4gb2JqfVwiKTt2YXIgaD1uZXcgRnVuY3Rpb24oXCJnbFwiLFwibG9jYXRpb25zXCIsbi5qb2luKFwiXFxuXCIpKTtyZXR1cm4gaCh0LHMpfWZ1bmN0aW9uIHUobixsLHUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB1KXt2YXIgZj1oKHUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGwse2dldDphKGYpLHNldDpjKHUpLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExfSl9ZWxzZSBzW3VdP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGwse2dldDoocD11LG5ldyBGdW5jdGlvbihcImdsXCIsXCJ3cmFwcGVyXCIsXCJsb2NhdGlvbnNcIixcInJldHVybiBmdW5jdGlvbigpe3JldHVybiBnbC5nZXRVbmlmb3JtKHdyYXBwZXIucHJvZ3JhbSxsb2NhdGlvbnNbXCIrcCtcIl0pfVwiKSh0LGUscykpLHNldDpjKHUpLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExfSk6bltsXT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZVwiYm9vbFwiOnJldHVybiExO2Nhc2VcImludFwiOmNhc2VcInNhbXBsZXIyRFwiOmNhc2VcInNhbXBsZXJDdWJlXCI6Y2FzZVwiZmxvYXRcIjpyZXR1cm4gMDtkZWZhdWx0OnZhciBlPXQuaW5kZXhPZihcInZlY1wiKTtpZigwPD1lJiZlPD0xJiZ0Lmxlbmd0aD09PTQrZSl7dmFyIHI9dC5jaGFyQ29kZUF0KHQubGVuZ3RoLTEpLTQ4O2lmKHI8Mnx8cj40KXRocm93IG5ldyBpKFwiXCIsXCJJbnZhbGlkIGRhdGEgdHlwZVwiKTtyZXR1cm5cImJcIj09PXQuY2hhckF0KDApP28ociwhMSk6byhyLDApfWlmKDA9PT10LmluZGV4T2YoXCJtYXRcIikmJjQ9PT10Lmxlbmd0aCl7dmFyIHI9dC5jaGFyQ29kZUF0KHQubGVuZ3RoLTEpLTQ4O2lmKHI8Mnx8cj40KXRocm93IG5ldyBpKFwiXCIsXCJJbnZhbGlkIHVuaWZvcm0gZGltZW5zaW9uIHR5cGUgZm9yIG1hdHJpeCBcIituYW1lK1wiOiBcIit0KTtyZXR1cm4gbyhyKnIsMCl9dGhyb3cgbmV3IGkoXCJcIixcIlVua25vd24gdW5pZm9ybSBkYXRhIHR5cGUgZm9yIFwiK25hbWUrXCI6IFwiK3QpfX0oclt1XS50eXBlKTt2YXIgcH1mdW5jdGlvbiBoKHQpe3ZhciBlO2lmKEFycmF5LmlzQXJyYXkodCkpe2U9bmV3IEFycmF5KHQubGVuZ3RoKTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil1KGUscix0W3JdKX1lbHNlIGZvcih2YXIgbiBpbiBlPXt9LHQpdShlLG4sdFtuXSk7cmV0dXJuIGV9dmFyIGY9bihyLCEwKTtyZXR1cm57Z2V0OmEoaChmKSksc2V0OmMoZiksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9fX0se1wiLi9HTEVycm9yXCI6Mjk5LFwiLi9yZWZsZWN0XCI6MzAyfV0sMzAyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LG49MDtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9dFtuXS5uYW1lLGE9aS5zcGxpdChcIi5cIiksbz1yLHM9MDtzPGEubGVuZ3RoOysrcyl7dmFyIGw9YVtzXS5zcGxpdChcIltcIik7aWYobC5sZW5ndGg+MSl7bFswXWluIG98fChvW2xbMF1dPVtdKSxvPW9bbFswXV07Zm9yKHZhciBjPTE7YzxsLmxlbmd0aDsrK2Mpe3ZhciB1PXBhcnNlSW50KGxbY10pO2M8bC5sZW5ndGgtMXx8czxhLmxlbmd0aC0xPyh1IGluIG98fChjPGwubGVuZ3RoLTE/b1t1XT1bXTpvW3VdPXt9KSxvPW9bdV0pOm9bdV09ZT9uOnRbbl0udHlwZX19ZWxzZSBzPGEubGVuZ3RoLTE/KGxbMF1pbiBvfHwob1tsWzBdXT17fSksbz1vW2xbMF1dKTpvW2xbMF1dPWU/bjp0W25dLnR5cGV9cmV0dXJuIHJ9fSx7fV0sMzAzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ci51bmlmb3Jtcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmdldFByb2dyYW1QYXJhbWV0ZXIoZSx0LkFDVElWRV9VTklGT1JNUyksbj1bXSxpPTA7aTxyOysraSl7dmFyIG89dC5nZXRBY3RpdmVVbmlmb3JtKGUsaSk7aWYobyl7dmFyIHM9YSh0LG8udHlwZSk7aWYoby5zaXplPjEpZm9yKHZhciBsPTA7bDxvLnNpemU7KytsKW4ucHVzaCh7bmFtZTpvLm5hbWUucmVwbGFjZShcIlswXVwiLFwiW1wiK2wrXCJdXCIpLHR5cGU6c30pO2Vsc2Ugbi5wdXNoKHtuYW1lOm8ubmFtZSx0eXBlOnN9KX19cmV0dXJuIG59LHIuYXR0cmlidXRlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmdldFByb2dyYW1QYXJhbWV0ZXIoZSx0LkFDVElWRV9BVFRSSUJVVEVTKSxuPVtdLGk9MDtpPHI7KytpKXt2YXIgbz10LmdldEFjdGl2ZUF0dHJpYihlLGkpO28mJm4ucHVzaCh7bmFtZTpvLm5hbWUsdHlwZTphKHQsby50eXBlKX0pfXJldHVybiBufTt2YXIgbj17RkxPQVQ6XCJmbG9hdFwiLEZMT0FUX1ZFQzI6XCJ2ZWMyXCIsRkxPQVRfVkVDMzpcInZlYzNcIixGTE9BVF9WRUM0OlwidmVjNFwiLElOVDpcImludFwiLElOVF9WRUMyOlwiaXZlYzJcIixJTlRfVkVDMzpcIml2ZWMzXCIsSU5UX1ZFQzQ6XCJpdmVjNFwiLEJPT0w6XCJib29sXCIsQk9PTF9WRUMyOlwiYnZlYzJcIixCT09MX1ZFQzM6XCJidmVjM1wiLEJPT0xfVkVDNDpcImJ2ZWM0XCIsRkxPQVRfTUFUMjpcIm1hdDJcIixGTE9BVF9NQVQzOlwibWF0M1wiLEZMT0FUX01BVDQ6XCJtYXQ0XCIsU0FNUExFUl8yRDpcInNhbXBsZXIyRFwiLFNBTVBMRVJfQ1VCRTpcInNhbXBsZXJDdWJlXCJ9LGk9bnVsbDtmdW5jdGlvbiBhKHQsZSl7aWYoIWkpe3ZhciByPU9iamVjdC5rZXlzKG4pO2k9e307Zm9yKHZhciBhPTA7YTxyLmxlbmd0aDsrK2Epe3ZhciBvPXJbYV07aVt0W29dXT1uW29dfX1yZXR1cm4gaVtlXX19LHt9XSwzMDQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLnNoYWRlcj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHUodCkuZ2V0U2hhZGVyUmVmZXJlbmNlKGUscil9LHIucHJvZ3JhbT1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybiB1KHQpLmdldFByb2dyYW0oZSxyLG4saSl9O3ZhciBuPXQoXCIuL0dMRXJyb3JcIiksaT10KFwiZ2wtZm9ybWF0LWNvbXBpbGVyLWVycm9yXCIpLGE9bmV3KFwidW5kZWZpbmVkXCI9PXR5cGVvZiBXZWFrTWFwP3QoXCJ3ZWFrbWFwLXNoaW1cIik6V2Vha01hcCksbz0wO2Z1bmN0aW9uIHModCxlLHIsbixpLGEsbyl7dGhpcy5pZD10LHRoaXMuc3JjPWUsdGhpcy50eXBlPXIsdGhpcy5zaGFkZXI9bix0aGlzLmNvdW50PWEsdGhpcy5wcm9ncmFtcz1bXSx0aGlzLmNhY2hlPW99ZnVuY3Rpb24gbCh0KXt0aGlzLmdsPXQsdGhpcy5zaGFkZXJzPVt7fSx7fV0sdGhpcy5wcm9ncmFtcz17fX1zLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7aWYoMD09LS10aGlzLmNvdW50KXtmb3IodmFyIHQ9dGhpcy5jYWNoZSxlPXQuZ2wscj10aGlzLnByb2dyYW1zLG49MCxpPXIubGVuZ3RoO248aTsrK24pe3ZhciBhPXQucHJvZ3JhbXNbcltuXV07YSYmKGRlbGV0ZSB0LnByb2dyYW1zW25dLGUuZGVsZXRlUHJvZ3JhbShhKSl9ZS5kZWxldGVTaGFkZXIodGhpcy5zaGFkZXIpLGRlbGV0ZSB0LnNoYWRlcnNbdGhpcy50eXBlPT09ZS5GUkFHTUVOVF9TSEFERVJ8MF1bdGhpcy5zcmNdfX07dmFyIGM9bC5wcm90b3R5cGU7ZnVuY3Rpb24gdSh0KXt2YXIgZT1hLmdldCh0KTtyZXR1cm4gZXx8KGU9bmV3IGwodCksYS5zZXQodCxlKSksZX1jLmdldFNoYWRlclJlZmVyZW5jZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2wsYT10aGlzLnNoYWRlcnNbdD09PXIuRlJBR01FTlRfU0hBREVSfDBdLGw9YVtlXTtpZihsJiZyLmlzU2hhZGVyKGwuc2hhZGVyKSlsLmNvdW50Kz0xO2Vsc2V7dmFyIGM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPXQuY3JlYXRlU2hhZGVyKGUpO2lmKHQuc2hhZGVyU291cmNlKGEsciksdC5jb21waWxlU2hhZGVyKGEpLCF0LmdldFNoYWRlclBhcmFtZXRlcihhLHQuQ09NUElMRV9TVEFUVVMpKXt2YXIgbz10LmdldFNoYWRlckluZm9Mb2coYSk7dHJ5e3ZhciBzPWkobyxyLGUpfWNhdGNoKHQpe3Rocm93IGNvbnNvbGUud2FybihcIkZhaWxlZCB0byBmb3JtYXQgY29tcGlsZXIgZXJyb3I6IFwiK3QpLG5ldyBuKG8sXCJFcnJvciBjb21waWxpbmcgc2hhZGVyOlxcblwiK28pfXRocm93IG5ldyBuKG8scy5zaG9ydCxzLmxvbmcpfXJldHVybiBhfShyLHQsZSk7bD1hW2VdPW5ldyBzKG8rKyxlLHQsYyxbXSwxLHRoaXMpfXJldHVybiBsfSxjLmdldFByb2dyYW09ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9W3QuaWQsZS5pZCxyLmpvaW4oXCI6XCIpLGkuam9pbihcIjpcIildLmpvaW4oXCJAXCIpLG89dGhpcy5wcm9ncmFtc1thXTtyZXR1cm4gbyYmdGhpcy5nbC5pc1Byb2dyYW0obyl8fCh0aGlzLnByb2dyYW1zW2FdPW89ZnVuY3Rpb24odCxlLHIsaSxhKXt2YXIgbz10LmNyZWF0ZVByb2dyYW0oKTt0LmF0dGFjaFNoYWRlcihvLGUpLHQuYXR0YWNoU2hhZGVyKG8scik7Zm9yKHZhciBzPTA7czxpLmxlbmd0aDsrK3MpdC5iaW5kQXR0cmliTG9jYXRpb24obyxhW3NdLGlbc10pO2lmKHQubGlua1Byb2dyYW0obyksIXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihvLHQuTElOS19TVEFUVVMpKXt2YXIgbD10LmdldFByb2dyYW1JbmZvTG9nKG8pO3Rocm93IG5ldyBuKGwsXCJFcnJvciBsaW5raW5nIHByb2dyYW06IFwiK2wpfXJldHVybiBvfSh0aGlzLmdsLHQuc2hhZGVyLGUuc2hhZGVyLHIsaSksdC5wcm9ncmFtcy5wdXNoKGEpLGUucHJvZ3JhbXMucHVzaChhKSksb319LHtcIi4vR0xFcnJvclwiOjI5OSxcImdsLWZvcm1hdC1jb21waWxlci1lcnJvclwiOjI0NyxcIndlYWttYXAtc2hpbVwiOjU0MH1dLDMwNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7dGhpcy5wbG90PXQsdGhpcy5lbmFibGU9WyEwLCEwLCExLCExXSx0aGlzLndpZHRoPVsxLDEsMSwxXSx0aGlzLmNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuY2VudGVyPVsxLzAsMS8wXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgbih0KTtyZXR1cm4gci51cGRhdGUoZSksdC5hZGRPdmVybGF5KHIpLHJ9O3ZhciBpPW4ucHJvdG90eXBlO2kudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e30sdGhpcy5lbmFibGU9KHQuZW5hYmxlfHxbITAsITAsITEsITFdKS5zbGljZSgpLHRoaXMud2lkdGg9KHQud2lkdGh8fFsxLDEsMSwxXSkuc2xpY2UoKSx0aGlzLmNvbG9yPSh0LmNvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKCl9KSx0aGlzLmNlbnRlcj0odC5jZW50ZXJ8fFsxLzAsMS8wXSkuc2xpY2UoKSx0aGlzLnBsb3Quc2V0T3ZlcmxheURpcnR5KCl9LGkuZHJhdz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZW5hYmxlLGU9dGhpcy53aWR0aCxyPXRoaXMuY29sb3Isbj10aGlzLmNlbnRlcixpPXRoaXMucGxvdCxhPWkubGluZSxvPWkuZGF0YUJveCxzPWkudmlld0JveDtpZihhLmJpbmQoKSxvWzBdPD1uWzBdJiZuWzBdPD1vWzJdJiZvWzFdPD1uWzFdJiZuWzFdPD1vWzNdKXt2YXIgbD1zWzBdKyhuWzBdLW9bMF0pLyhvWzJdLW9bMF0pKihzWzJdLXNbMF0pLGM9c1sxXSsoblsxXS1vWzFdKS8ob1szXS1vWzFdKSooc1szXS1zWzFdKTt0WzBdJiZhLmRyYXdMaW5lKGwsYyxzWzBdLGMsZVswXSxyWzBdKSx0WzFdJiZhLmRyYXdMaW5lKGwsYyxsLHNbMV0sZVsxXSxyWzFdKSx0WzJdJiZhLmRyYXdMaW5lKGwsYyxzWzJdLGMsZVsyXSxyWzJdKSx0WzNdJiZhLmRyYXdMaW5lKGwsYyxsLHNbM10sZVszXSxyWzNdKX19LGkuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMucGxvdC5yZW1vdmVPdmVybGF5KHRoaXMpfX0se31dLDMwNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbHNsaWZ5XCIpLGk9dChcImdsLXNoYWRlclwiKSxhPW4oW1wicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiwgY29sb3I7XFxuYXR0cmlidXRlIGZsb2F0IHdlaWdodDtcXG5cXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XFxudW5pZm9ybSB2ZWMzIGNvb3JkaW5hdGVzWzNdO1xcbnVuaWZvcm0gdmVjNCBjb2xvcnNbM107XFxudW5pZm9ybSB2ZWMyIHNjcmVlblNoYXBlO1xcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoO1xcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgdmVjMyB2ZXJ0ZXhQb3NpdGlvbiA9IG1peChjb29yZGluYXRlc1swXSxcXG4gICAgbWl4KGNvb3JkaW5hdGVzWzJdLCBjb29yZGluYXRlc1sxXSwgMC41ICogKHBvc2l0aW9uICsgMS4wKSksIGFicyhwb3NpdGlvbikpO1xcblxcbiAgdmVjNCBjbGlwUG9zID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQodmVydGV4UG9zaXRpb24sIDEuMCk7XFxuICB2ZWMyIGNsaXBPZmZzZXQgPSAocHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQoY29sb3IsIDAuMCkpLnh5O1xcbiAgdmVjMiBkZWx0YSA9IHdlaWdodCAqIGNsaXBPZmZzZXQgKiBzY3JlZW5TaGFwZTtcXG4gIHZlYzIgbGluZU9mZnNldCA9IG5vcm1hbGl6ZSh2ZWMyKGRlbHRhLnksIC1kZWx0YS54KSkgLyBzY3JlZW5TaGFwZTtcXG5cXG4gIGdsX1Bvc2l0aW9uICAgPSB2ZWM0KGNsaXBQb3MueHkgKyBjbGlwUG9zLncgKiAwLjUgKiBsaW5lV2lkdGggKiBsaW5lT2Zmc2V0LCBjbGlwUG9zLnosIGNsaXBQb3Mudyk7XFxuICBmcmFnQ29sb3IgICAgID0gY29sb3IueCAqIGNvbG9yc1swXSArIGNvbG9yLnkgKiBjb2xvcnNbMV0gKyBjb2xvci56ICogY29sb3JzWzJdO1xcbn1cXG5cIl0pLG89bihbXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xcbn1cIl0pO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZTpcInBvc2l0aW9uXCIsdHlwZTpcInZlYzNcIn0se25hbWU6XCJjb2xvclwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwid2VpZ2h0XCIsdHlwZTpcImZsb2F0XCJ9XSl9fSx7XCJnbC1zaGFkZXJcIjoyOTgsZ2xzbGlmeTo0MDJ9XSwzMDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2wtYnVmZmVyXCIpLGk9dChcImdsLXZhb1wiKSxhPXQoXCIuL3NoYWRlcnMvaW5kZXhcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107ZnVuY3Rpb24gbyh0LGUsbixpLGEsbyl7dmFyIHM9W3QsZSxuLDAsMCwwLDFdO3NbaSszXT0xLHNbaV09YSxyLnB1c2guYXBwbHkocixzKSxzWzZdPS0xLHIucHVzaC5hcHBseShyLHMpLHNbaV09byxyLnB1c2guYXBwbHkocixzKSxyLnB1c2guYXBwbHkocixzKSxzWzZdPTEsci5wdXNoLmFwcGx5KHIscyksc1tpXT1hLHIucHVzaC5hcHBseShyLHMpfW8oMCwwLDAsMCwwLDEpLG8oMCwwLDAsMSwwLDEpLG8oMCwwLDAsMiwwLDEpLG8oMSwwLDAsMSwtMSwxKSxvKDEsMCwwLDIsLTEsMSksbygwLDEsMCwwLC0xLDEpLG8oMCwxLDAsMiwtMSwxKSxvKDAsMCwxLDAsLTEsMSksbygwLDAsMSwxLC0xLDEpO3ZhciBsPW4odCxyKSxjPWkodCxbe3R5cGU6dC5GTE9BVCxidWZmZXI6bCxzaXplOjMsb2Zmc2V0OjAsc3RyaWRlOjI4fSx7dHlwZTp0LkZMT0FULGJ1ZmZlcjpsLHNpemU6MyxvZmZzZXQ6MTIsc3RyaWRlOjI4fSx7dHlwZTp0LkZMT0FULGJ1ZmZlcjpsLHNpemU6MSxvZmZzZXQ6MjQsc3RyaWRlOjI4fV0pLHU9YSh0KTt1LmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCx1LmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MSx1LmF0dHJpYnV0ZXMud2VpZ2h0LmxvY2F0aW9uPTI7dmFyIGg9bmV3IHModCxsLGMsdSk7cmV0dXJuIGgudXBkYXRlKGUpLGh9O3ZhciBvPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiBzKHQsZSxyLG4pe3RoaXMuZ2w9dCx0aGlzLmJ1ZmZlcj1lLHRoaXMudmFvPXIsdGhpcy5zaGFkZXI9bix0aGlzLnBpeGVsUmF0aW89MSx0aGlzLmJvdW5kcz1bWy0xZTMsLTFlMywtMWUzXSxbMWUzLDFlMywxZTNdXSx0aGlzLnBvc2l0aW9uPVswLDAsMF0sdGhpcy5saW5lV2lkdGg9WzIsMiwyXSx0aGlzLmNvbG9ycz1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZW5hYmxlZD1bITAsITAsITBdLHRoaXMuZHJhd1NpZGVzPVshMCwhMCwhMF0sdGhpcy5heGVzPW51bGx9dmFyIGw9cy5wcm90b3R5cGUsYz1bMCwwLDBdLHU9WzAsMCwwXSxoPVswLDBdO2wuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiExfSxsLmRyYXdUcmFuc3BhcmVudD1mdW5jdGlvbih0KXt9LGwuZHJhdz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsLHI9dGhpcy52YW8sbj10aGlzLnNoYWRlcjtyLmJpbmQoKSxuLmJpbmQoKTt2YXIgaSxhPXQubW9kZWx8fG8scz10LnZpZXd8fG8sbD10LnByb2plY3Rpb258fG87dGhpcy5heGVzJiYoaT10aGlzLmF4ZXMubGFzdEN1YmVQcm9wcy5heGlzKTtmb3IodmFyIGY9YyxwPXUsZD0wO2Q8MzsrK2QpaSYmaVtkXTwwPyhmW2RdPXRoaXMuYm91bmRzWzBdW2RdLHBbZF09dGhpcy5ib3VuZHNbMV1bZF0pOihmW2RdPXRoaXMuYm91bmRzWzFdW2RdLHBbZF09dGhpcy5ib3VuZHNbMF1bZF0pO2hbMF09ZS5kcmF3aW5nQnVmZmVyV2lkdGgsaFsxXT1lLmRyYXdpbmdCdWZmZXJIZWlnaHQsbi51bmlmb3Jtcy5tb2RlbD1hLG4udW5pZm9ybXMudmlldz1zLG4udW5pZm9ybXMucHJvamVjdGlvbj1sLG4udW5pZm9ybXMuY29vcmRpbmF0ZXM9W3RoaXMucG9zaXRpb24sZixwXSxuLnVuaWZvcm1zLmNvbG9ycz10aGlzLmNvbG9ycyxuLnVuaWZvcm1zLnNjcmVlblNoYXBlPWg7Zm9yKGQ9MDtkPDM7KytkKW4udW5pZm9ybXMubGluZVdpZHRoPXRoaXMubGluZVdpZHRoW2RdKnRoaXMucGl4ZWxSYXRpbyx0aGlzLmVuYWJsZWRbZF0mJihyLmRyYXcoZS5UUklBTkdMRVMsNiw2KmQpLHRoaXMuZHJhd1NpZGVzW2RdJiZyLmRyYXcoZS5UUklBTkdMRVMsMTIsMTgrMTIqZCkpO3IudW5iaW5kKCl9LGwudXBkYXRlPWZ1bmN0aW9uKHQpe3QmJihcImJvdW5kc1wiaW4gdCYmKHRoaXMuYm91bmRzPXQuYm91bmRzKSxcInBvc2l0aW9uXCJpbiB0JiYodGhpcy5wb3NpdGlvbj10LnBvc2l0aW9uKSxcImxpbmVXaWR0aFwiaW4gdCYmKHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRoKSxcImNvbG9yc1wiaW4gdCYmKHRoaXMuY29sb3JzPXQuY29sb3JzKSxcImVuYWJsZWRcImluIHQmJih0aGlzLmVuYWJsZWQ9dC5lbmFibGVkKSxcImRyYXdTaWRlc1wiaW4gdCYmKHRoaXMuZHJhd1NpZGVzPXQuZHJhd1NpZGVzKSl9LGwuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlci5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0se1wiLi9zaGFkZXJzL2luZGV4XCI6MzA2LFwiZ2wtYnVmZmVyXCI6MjM4LFwiZ2wtdmFvXCI6MzIwfV0sMzA4OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcImdsc2xpZnlcIiksaT1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG52ZWMzIGdldE9ydGhvZ29uYWxWZWN0b3IodmVjMyB2KSB7XFxuICAvLyBSZXR1cm4gdXAtdmVjdG9yIGZvciBvbmx5LXogdmVjdG9yLlxcbiAgLy8gUmV0dXJuIGF4ICsgYnkgKyBjeiA9IDAsIGEgcG9pbnQgdGhhdCBsaWVzIG9uIHRoZSBwbGFuZSB0aGF0IGhhcyB2IGFzIGEgbm9ybWFsIGFuZCB0aGF0IGlzbid0ICgwLDAsMCkuXFxuICAvLyBGcm9tIHRoZSBhYm92ZSBpZi1zdGF0ZW1lbnQgd2UgaGF2ZSB8fGF8fCA+IDAgIFUgIHx8Ynx8ID4gMC5cXG4gIC8vIEFzc2lnbiB6ID0gMCwgeCA9IC1iLCB5ID0gYTpcXG4gIC8vIGEqLWIgKyBiKmEgKyBjKjAgPSAtYmEgKyBiYSArIDAgPSAwXFxuICBpZiAodi54KnYueCA+IHYueip2LnogfHwgdi55KnYueSA+IHYueip2LnopIHtcXG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKC12LnksIHYueCwgMC4wKSk7XFxuICB9IGVsc2Uge1xcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoMC4wLCB2LnosIC12LnkpKTtcXG4gIH1cXG59XFxuXFxuLy8gQ2FsY3VsYXRlIHRoZSB0dWJlIHZlcnRleCBhbmQgbm9ybWFsIGF0IHRoZSBnaXZlbiBpbmRleC5cXG4vL1xcbi8vIFRoZSByZXR1cm5lZCB2ZXJ0ZXggaXMgZm9yIGEgdHViZSByaW5nIHdpdGggaXRzIGNlbnRlciBhdCBvcmlnaW4sIHJhZGl1cyBvZiBsZW5ndGgoZCksIHBvaW50aW5nIGluIHRoZSBkaXJlY3Rpb24gb2YgZC5cXG4vL1xcbi8vIEVhY2ggdHViZSBzZWdtZW50IGlzIG1hZGUgdXAgb2YgYSByaW5nIG9mIHZlcnRpY2VzLlxcbi8vIFRoZXNlIHZlcnRpY2VzIGFyZSB1c2VkIHRvIG1ha2UgdXAgdGhlIHRyaWFuZ2xlcyBvZiB0aGUgdHViZSBieSBjb25uZWN0aW5nIHRoZW0gdG9nZXRoZXIgaW4gdGhlIHZlcnRleCBhcnJheS5cXG4vLyBUaGUgaW5kZXhlcyBvZiB0dWJlIHNlZ21lbnRzIHJ1biBmcm9tIDAgdG8gOC5cXG4vL1xcbnZlYzMgZ2V0VHViZVBvc2l0aW9uKHZlYzMgZCwgZmxvYXQgaW5kZXgsIG91dCB2ZWMzIG5vcm1hbCkge1xcbiAgZmxvYXQgc2VnbWVudENvdW50ID0gOC4wO1xcblxcbiAgZmxvYXQgYW5nbGUgPSAyLjAgKiAzLjE0MTU5ICogKGluZGV4IC8gc2VnbWVudENvdW50KTtcXG5cXG4gIHZlYzMgdSA9IGdldE9ydGhvZ29uYWxWZWN0b3IoZCk7XFxuICB2ZWMzIHYgPSBub3JtYWxpemUoY3Jvc3ModSwgZCkpO1xcblxcbiAgdmVjMyB4ID0gdSAqIGNvcyhhbmdsZSkgKiBsZW5ndGgoZCk7XFxuICB2ZWMzIHkgPSB2ICogc2luKGFuZ2xlKSAqIGxlbmd0aChkKTtcXG4gIHZlYzMgdjMgPSB4ICsgeTtcXG5cXG4gIG5vcm1hbCA9IG5vcm1hbGl6ZSh2Myk7XFxuXFxuICByZXR1cm4gdjM7XFxufVxcblxcbmF0dHJpYnV0ZSB2ZWM0IHZlY3RvcjtcXG5hdHRyaWJ1dGUgdmVjNCBjb2xvciwgcG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgdXY7XFxudW5pZm9ybSBmbG9hdCB2ZWN0b3JTY2FsZTtcXG51bmlmb3JtIGZsb2F0IHR1YmVTY2FsZTtcXG5cXG51bmlmb3JtIG1hdDQgbW9kZWxcXG4gICAgICAgICAgICwgdmlld1xcbiAgICAgICAgICAgLCBwcm9qZWN0aW9uXFxuICAgICAgICAgICAsIGludmVyc2VNb2RlbDtcXG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb25cXG4gICAgICAgICAgICwgbGlnaHRQb3NpdGlvbjtcXG5cXG52YXJ5aW5nIHZlYzMgZl9ub3JtYWxcXG4gICAgICAgICAgICwgZl9saWdodERpcmVjdGlvblxcbiAgICAgICAgICAgLCBmX2V5ZURpcmVjdGlvblxcbiAgICAgICAgICAgLCBmX2RhdGFcXG4gICAgICAgICAgICwgZl9wb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcXG52YXJ5aW5nIHZlYzIgZl91djtcXG5cXG52b2lkIG1haW4oKSB7XFxuICAvLyBTY2FsZSB0aGUgdmVjdG9yIG1hZ25pdHVkZSB0byBzdGF5IGNvbnN0YW50IHdpdGhcXG4gIC8vIG1vZGVsICYgdmlldyBjaGFuZ2VzLlxcbiAgdmVjMyBub3JtYWw7XFxuICB2ZWMzIFhZWiA9IGdldFR1YmVQb3NpdGlvbihtYXQzKG1vZGVsKSAqICh0dWJlU2NhbGUgKiB2ZWN0b3IudyAqIG5vcm1hbGl6ZSh2ZWN0b3IueHl6KSksIHBvc2l0aW9uLncsIG5vcm1hbCk7XFxuICB2ZWM0IHR1YmVQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbi54eXosIDEuMCkgKyB2ZWM0KFhZWiwgMC4wKTtcXG5cXG4gIC8vTGlnaHRpbmcgZ2VvbWV0cnkgcGFyYW1ldGVyc1xcbiAgdmVjNCBjYW1lcmFDb29yZGluYXRlID0gdmlldyAqIHR1YmVQb3NpdGlvbjtcXG4gIGNhbWVyYUNvb3JkaW5hdGUueHl6IC89IGNhbWVyYUNvb3JkaW5hdGUudztcXG4gIGZfbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XFxuICBmX2V5ZURpcmVjdGlvbiAgID0gZXllUG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcXG4gIGZfbm9ybWFsID0gbm9ybWFsaXplKCh2ZWM0KG5vcm1hbCwwLjApICogaW52ZXJzZU1vZGVsKS54eXopO1xcblxcbiAgLy8gdmVjNCBtX3Bvc2l0aW9uICA9IG1vZGVsICogdmVjNCh0dWJlUG9zaXRpb24sIDEuMCk7XFxuICB2ZWM0IHRfcG9zaXRpb24gID0gdmlldyAqIHR1YmVQb3NpdGlvbjtcXG4gIGdsX1Bvc2l0aW9uICAgICAgPSBwcm9qZWN0aW9uICogdF9wb3NpdGlvbjtcXG5cXG4gIGZfY29sb3IgICAgICAgICAgPSBjb2xvcjtcXG4gIGZfZGF0YSAgICAgICAgICAgPSB0dWJlUG9zaXRpb24ueHl6O1xcbiAgZl9wb3NpdGlvbiAgICAgICA9IHBvc2l0aW9uLnh5ejtcXG4gIGZfdXYgICAgICAgICAgICAgPSB1djtcXG59XFxuXCJdKSxhPW4oW1wiI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGVcXG5cXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5mbG9hdCBiZWNrbWFubkRpc3RyaWJ1dGlvbihmbG9hdCB4LCBmbG9hdCByb3VnaG5lc3MpIHtcXG4gIGZsb2F0IE5kb3RIID0gbWF4KHgsIDAuMDAwMSk7XFxuICBmbG9hdCBjb3MyQWxwaGEgPSBOZG90SCAqIE5kb3RIO1xcbiAgZmxvYXQgdGFuMkFscGhhID0gKGNvczJBbHBoYSAtIDEuMCkgLyBjb3MyQWxwaGE7XFxuICBmbG9hdCByb3VnaG5lc3MyID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xcbiAgZmxvYXQgZGVub20gPSAzLjE0MTU5MjY1MzU4OTc5MyAqIHJvdWdobmVzczIgKiBjb3MyQWxwaGEgKiBjb3MyQWxwaGE7XFxuICByZXR1cm4gZXhwKHRhbjJBbHBoYSAvIHJvdWdobmVzczIpIC8gZGVub207XFxufVxcblxcbmZsb2F0IGNvb2tUb3JyYW5jZVNwZWN1bGFyKFxcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcXG4gIHZlYzMgdmlld0RpcmVjdGlvbixcXG4gIHZlYzMgc3VyZmFjZU5vcm1hbCxcXG4gIGZsb2F0IHJvdWdobmVzcyxcXG4gIGZsb2F0IGZyZXNuZWwpIHtcXG5cXG4gIGZsb2F0IFZkb3ROID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSwgMC4wKTtcXG4gIGZsb2F0IExkb3ROID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XFxuXFxuICAvL0hhbGYgYW5nbGUgdmVjdG9yXFxuICB2ZWMzIEggPSBub3JtYWxpemUobGlnaHREaXJlY3Rpb24gKyB2aWV3RGlyZWN0aW9uKTtcXG5cXG4gIC8vR2VvbWV0cmljIHRlcm1cXG4gIGZsb2F0IE5kb3RIID0gbWF4KGRvdChzdXJmYWNlTm9ybWFsLCBIKSwgMC4wKTtcXG4gIGZsb2F0IFZkb3RIID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xcbiAgZmxvYXQgTGRvdEggPSBtYXgoZG90KGxpZ2h0RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xcbiAgZmxvYXQgRzEgPSAoMi4wICogTmRvdEggKiBWZG90TikgLyBWZG90SDtcXG4gIGZsb2F0IEcyID0gKDIuMCAqIE5kb3RIICogTGRvdE4pIC8gTGRvdEg7XFxuICBmbG9hdCBHID0gbWluKDEuMCwgbWluKEcxLCBHMikpO1xcbiAgXFxuICAvL0Rpc3RyaWJ1dGlvbiB0ZXJtXFxuICBmbG9hdCBEID0gYmVja21hbm5EaXN0cmlidXRpb24oTmRvdEgsIHJvdWdobmVzcyk7XFxuXFxuICAvL0ZyZXNuZWwgdGVybVxcbiAgZmxvYXQgRiA9IHBvdygxLjAgLSBWZG90TiwgZnJlc25lbCk7XFxuXFxuICAvL011bHRpcGx5IHRlcm1zIGFuZCBkb25lXFxuICByZXR1cm4gIEcgKiBGICogRCAvIG1heCgzLjE0MTU5MjY1ICogVmRvdE4sIDAuMDAwMDAxKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcXG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XFxuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcXG59XFxuXFxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XFxudW5pZm9ybSBmbG9hdCByb3VnaG5lc3NcXG4gICAgICAgICAgICAsIGZyZXNuZWxcXG4gICAgICAgICAgICAsIGthbWJpZW50XFxuICAgICAgICAgICAgLCBrZGlmZnVzZVxcbiAgICAgICAgICAgICwga3NwZWN1bGFyXFxuICAgICAgICAgICAgLCBvcGFjaXR5O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxuXFxudmFyeWluZyB2ZWMzIGZfbm9ybWFsXFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cXG4gICAgICAgICAgICwgZl9leWVEaXJlY3Rpb25cXG4gICAgICAgICAgICwgZl9kYXRhXFxuICAgICAgICAgICAsIGZfcG9zaXRpb247XFxudmFyeWluZyB2ZWM0IGZfY29sb3I7XFxudmFyeWluZyB2ZWMyIGZfdXY7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9wb3NpdGlvbikpIGRpc2NhcmQ7XFxuICB2ZWMzIE4gPSBub3JtYWxpemUoZl9ub3JtYWwpO1xcbiAgdmVjMyBMID0gbm9ybWFsaXplKGZfbGlnaHREaXJlY3Rpb24pO1xcbiAgdmVjMyBWID0gbm9ybWFsaXplKGZfZXllRGlyZWN0aW9uKTtcXG5cXG4gIGlmKGdsX0Zyb250RmFjaW5nKSB7XFxuICAgIE4gPSAtTjtcXG4gIH1cXG5cXG4gIGZsb2F0IHNwZWN1bGFyID0gbWluKDEuMCwgbWF4KDAuMCwgY29va1RvcnJhbmNlU3BlY3VsYXIoTCwgViwgTiwgcm91Z2huZXNzLCBmcmVzbmVsKSkpO1xcbiAgZmxvYXQgZGlmZnVzZSAgPSBtaW4oa2FtYmllbnQgKyBrZGlmZnVzZSAqIG1heChkb3QoTiwgTCksIDAuMCksIDEuMCk7XFxuXFxuICB2ZWM0IHN1cmZhY2VDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dik7XFxuICB2ZWM0IGxpdENvbG9yID0gc3VyZmFjZUNvbG9yLmEgKiB2ZWM0KGRpZmZ1c2UgKiBzdXJmYWNlQ29sb3IucmdiICsga3NwZWN1bGFyICogdmVjMygxLDEsMSkgKiBzcGVjdWxhciwgIDEuMCk7XFxuXFxuICBnbF9GcmFnQ29sb3IgPSBsaXRDb2xvciAqIG9wYWNpdHk7XFxufVxcblwiXSksbz1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG52ZWMzIGdldE9ydGhvZ29uYWxWZWN0b3IodmVjMyB2KSB7XFxuICAvLyBSZXR1cm4gdXAtdmVjdG9yIGZvciBvbmx5LXogdmVjdG9yLlxcbiAgLy8gUmV0dXJuIGF4ICsgYnkgKyBjeiA9IDAsIGEgcG9pbnQgdGhhdCBsaWVzIG9uIHRoZSBwbGFuZSB0aGF0IGhhcyB2IGFzIGEgbm9ybWFsIGFuZCB0aGF0IGlzbid0ICgwLDAsMCkuXFxuICAvLyBGcm9tIHRoZSBhYm92ZSBpZi1zdGF0ZW1lbnQgd2UgaGF2ZSB8fGF8fCA+IDAgIFUgIHx8Ynx8ID4gMC5cXG4gIC8vIEFzc2lnbiB6ID0gMCwgeCA9IC1iLCB5ID0gYTpcXG4gIC8vIGEqLWIgKyBiKmEgKyBjKjAgPSAtYmEgKyBiYSArIDAgPSAwXFxuICBpZiAodi54KnYueCA+IHYueip2LnogfHwgdi55KnYueSA+IHYueip2LnopIHtcXG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKC12LnksIHYueCwgMC4wKSk7XFxuICB9IGVsc2Uge1xcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoMC4wLCB2LnosIC12LnkpKTtcXG4gIH1cXG59XFxuXFxuLy8gQ2FsY3VsYXRlIHRoZSB0dWJlIHZlcnRleCBhbmQgbm9ybWFsIGF0IHRoZSBnaXZlbiBpbmRleC5cXG4vL1xcbi8vIFRoZSByZXR1cm5lZCB2ZXJ0ZXggaXMgZm9yIGEgdHViZSByaW5nIHdpdGggaXRzIGNlbnRlciBhdCBvcmlnaW4sIHJhZGl1cyBvZiBsZW5ndGgoZCksIHBvaW50aW5nIGluIHRoZSBkaXJlY3Rpb24gb2YgZC5cXG4vL1xcbi8vIEVhY2ggdHViZSBzZWdtZW50IGlzIG1hZGUgdXAgb2YgYSByaW5nIG9mIHZlcnRpY2VzLlxcbi8vIFRoZXNlIHZlcnRpY2VzIGFyZSB1c2VkIHRvIG1ha2UgdXAgdGhlIHRyaWFuZ2xlcyBvZiB0aGUgdHViZSBieSBjb25uZWN0aW5nIHRoZW0gdG9nZXRoZXIgaW4gdGhlIHZlcnRleCBhcnJheS5cXG4vLyBUaGUgaW5kZXhlcyBvZiB0dWJlIHNlZ21lbnRzIHJ1biBmcm9tIDAgdG8gOC5cXG4vL1xcbnZlYzMgZ2V0VHViZVBvc2l0aW9uKHZlYzMgZCwgZmxvYXQgaW5kZXgsIG91dCB2ZWMzIG5vcm1hbCkge1xcbiAgZmxvYXQgc2VnbWVudENvdW50ID0gOC4wO1xcblxcbiAgZmxvYXQgYW5nbGUgPSAyLjAgKiAzLjE0MTU5ICogKGluZGV4IC8gc2VnbWVudENvdW50KTtcXG5cXG4gIHZlYzMgdSA9IGdldE9ydGhvZ29uYWxWZWN0b3IoZCk7XFxuICB2ZWMzIHYgPSBub3JtYWxpemUoY3Jvc3ModSwgZCkpO1xcblxcbiAgdmVjMyB4ID0gdSAqIGNvcyhhbmdsZSkgKiBsZW5ndGgoZCk7XFxuICB2ZWMzIHkgPSB2ICogc2luKGFuZ2xlKSAqIGxlbmd0aChkKTtcXG4gIHZlYzMgdjMgPSB4ICsgeTtcXG5cXG4gIG5vcm1hbCA9IG5vcm1hbGl6ZSh2Myk7XFxuXFxuICByZXR1cm4gdjM7XFxufVxcblxcbmF0dHJpYnV0ZSB2ZWM0IHZlY3RvcjtcXG5hdHRyaWJ1dGUgdmVjNCBwb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjNCBpZDtcXG5cXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XFxudW5pZm9ybSBmbG9hdCB0dWJlU2NhbGU7XFxuXFxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XFxudmFyeWluZyB2ZWM0IGZfaWQ7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgdmVjMyBub3JtYWw7XFxuICB2ZWMzIFhZWiA9IGdldFR1YmVQb3NpdGlvbihtYXQzKG1vZGVsKSAqICh0dWJlU2NhbGUgKiB2ZWN0b3IudyAqIG5vcm1hbGl6ZSh2ZWN0b3IueHl6KSksIHBvc2l0aW9uLncsIG5vcm1hbCk7XFxuICB2ZWM0IHR1YmVQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbi54eXosIDEuMCkgKyB2ZWM0KFhZWiwgMC4wKTtcXG5cXG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiB0dWJlUG9zaXRpb247XFxuICBmX2lkICAgICAgICA9IGlkO1xcbiAgZl9wb3NpdGlvbiAgPSBwb3NpdGlvbi54eXo7XFxufVxcblwiXSkscz1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XFxuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XFxufVxcblxcbnVuaWZvcm0gdmVjMyAgY2xpcEJvdW5kc1syXTtcXG51bmlmb3JtIGZsb2F0IHBpY2tJZDtcXG5cXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzQgZl9pZDtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBmX3Bvc2l0aW9uKSkgZGlzY2FyZDtcXG5cXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLCBmX2lkLnh5eik7XFxufVwiXSk7ci5tZXNoU2hhZGVyPXt2ZXJ0ZXg6aSxmcmFnbWVudDphLGF0dHJpYnV0ZXM6W3tuYW1lOlwicG9zaXRpb25cIix0eXBlOlwidmVjNFwifSx7bmFtZTpcIm5vcm1hbFwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwiY29sb3JcIix0eXBlOlwidmVjNFwifSx7bmFtZTpcInV2XCIsdHlwZTpcInZlYzJcIn0se25hbWU6XCJ2ZWN0b3JcIix0eXBlOlwidmVjNFwifV19LHIucGlja1NoYWRlcj17dmVydGV4Om8sZnJhZ21lbnQ6cyxhdHRyaWJ1dGVzOlt7bmFtZTpcInBvc2l0aW9uXCIsdHlwZTpcInZlYzRcIn0se25hbWU6XCJpZFwiLHR5cGU6XCJ2ZWM0XCJ9LHtuYW1lOlwidmVjdG9yXCIsdHlwZTpcInZlYzRcIn1dfX0se2dsc2xpZnk6NDAyfV0sMzA5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsLXNoYWRlclwiKSxpPXQoXCJnbC1idWZmZXJcIiksYT10KFwiZ2wtdmFvXCIpLG89dChcImdsLXRleHR1cmUyZFwiKSxzPXQoXCJub3JtYWxzXCIpLGw9dChcImdsLW1hdDQvbXVsdGlwbHlcIiksYz10KFwiZ2wtbWF0NC9pbnZlcnRcIiksdT10KFwibmRhcnJheVwiKSxoPXQoXCJjb2xvcm1hcFwiKSxmPXQoXCJzaW1wbGljaWFsLWNvbXBsZXgtY29udG91clwiKSxwPXQoXCJ0eXBlZGFycmF5LXBvb2xcIiksZD10KFwiLi9zaGFkZXJzXCIpLGc9ZC5tZXNoU2hhZGVyLHY9ZC5waWNrU2hhZGVyLG09WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIHkodCxlLHIsbixpLGEsbyxzLGwsYyx1LGgsZixwLGQsZyx2LHkseCxiLF8sdyxrLEEpe3RoaXMuZ2w9dCx0aGlzLmNlbGxzPVtdLHRoaXMucG9zaXRpb25zPVtdLHRoaXMuaW50ZW5zaXR5PVtdLHRoaXMudGV4dHVyZT1lLHRoaXMuZGlydHk9ITAsdGhpcy50cmlTaGFkZXI9cix0aGlzLnBpY2tTaGFkZXI9bix0aGlzLnRyaWFuZ2xlUG9zaXRpb25zPWksdGhpcy50cmlhbmdsZVZlY3RvcnM9YSx0aGlzLnRyaWFuZ2xlQ29sb3JzPXMsdGhpcy50cmlhbmdsZU5vcm1hbHM9Yyx0aGlzLnRyaWFuZ2xlVVZzPWwsdGhpcy50cmlhbmdsZUlkcz1vLHRoaXMudHJpYW5nbGVWQU89dSx0aGlzLnRyaWFuZ2xlQ291bnQ9MCx0aGlzLmxpbmVXaWR0aD0xLHRoaXMuZWRnZVBvc2l0aW9ucz1oLHRoaXMuZWRnZUNvbG9ycz1wLHRoaXMuZWRnZVVWcz1kLHRoaXMuZWRnZUlkcz1mLHRoaXMuZWRnZVZBTz1nLHRoaXMuZWRnZUNvdW50PTAsdGhpcy5wb2ludFBvc2l0aW9ucz12LHRoaXMucG9pbnRDb2xvcnM9eCx0aGlzLnBvaW50VVZzPWIsdGhpcy5wb2ludFNpemVzPV8sdGhpcy5wb2ludElkcz15LHRoaXMucG9pbnRWQU89dyx0aGlzLnBvaW50Q291bnQ9MCx0aGlzLmNvbnRvdXJMaW5lV2lkdGg9MSx0aGlzLmNvbnRvdXJQb3NpdGlvbnM9ayx0aGlzLmNvbnRvdXJWQU89QSx0aGlzLmNvbnRvdXJDb3VudD0wLHRoaXMuY29udG91ckNvbG9yPVswLDAsMF0sdGhpcy5jb250b3VyRW5hYmxlPSExLHRoaXMucGlja0lkPTEsdGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5jbGlwQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMubGlnaHRQb3NpdGlvbj1bMWU1LDFlNSwwXSx0aGlzLmFtYmllbnRMaWdodD0uOCx0aGlzLmRpZmZ1c2VMaWdodD0uOCx0aGlzLnNwZWN1bGFyTGlnaHQ9Mix0aGlzLnJvdWdobmVzcz0uNSx0aGlzLmZyZXNuZWw9MS41LHRoaXMub3BhY2l0eT0xLHRoaXMudHViZVNjYWxlPTEsdGhpcy5fbW9kZWw9bSx0aGlzLl92aWV3PW0sdGhpcy5fcHJvamVjdGlvbj1tLHRoaXMuX3Jlc29sdXRpb249WzEsMV0sdGhpcy5waXhlbFJhdGlvPTF9dmFyIHg9eS5wcm90b3R5cGU7ZnVuY3Rpb24gYih0KXt2YXIgZT1uKHQsdi52ZXJ0ZXgsdi5mcmFnbWVudCxudWxsLHYuYXR0cmlidXRlcyk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5pZC5sb2NhdGlvbj0xLGUuYXR0cmlidXRlcy52ZWN0b3IubG9jYXRpb249NSxlfXguaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5Pj0xfSx4LmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5PDF9LHgucGlja1Nsb3RzPTEseC5zZXRQaWNrQmFzZT1mdW5jdGlvbih0KXt0aGlzLnBpY2tJZD10fSx4LmhpZ2hsaWdodD1mdW5jdGlvbih0KXtpZih0JiZ0aGlzLmNvbnRvdXJFbmFibGUpe2Zvcih2YXIgZT1mKHRoaXMuY2VsbHMsdGhpcy5pbnRlbnNpdHksdC5pbnRlbnNpdHkpLHI9ZS5jZWxscyxuPWUudmVydGV4SWRzLGk9ZS52ZXJ0ZXhXZWlnaHRzLGE9ci5sZW5ndGgsbz1wLm1hbGxvY0Zsb2F0MzIoNiphKSxzPTAsbD0wO2w8YTsrK2wpZm9yKHZhciBjPXJbbF0sdT0wO3U8MjsrK3Upe3ZhciBoPWNbMF07Mj09PWMubGVuZ3RoJiYoaD1jW3VdKTtmb3IodmFyIGQ9bltoXVswXSxnPW5baF1bMV0sdj1pW2hdLG09MS12LHk9dGhpcy5wb3NpdGlvbnNbZF0seD10aGlzLnBvc2l0aW9uc1tnXSxiPTA7YjwzOysrYilvW3MrK109dip5W2JdK20qeFtiXX10aGlzLmNvbnRvdXJDb3VudD1zLzN8MCx0aGlzLmNvbnRvdXJQb3NpdGlvbnMudXBkYXRlKG8uc3ViYXJyYXkoMCxzKSkscC5mcmVlKG8pfWVsc2UgdGhpcy5jb250b3VyQ291bnQ9MH0seC51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZT10aGlzLmdsO3RoaXMuZGlydHk9ITAsXCJjb250b3VyRW5hYmxlXCJpbiB0JiYodGhpcy5jb250b3VyRW5hYmxlPXQuY29udG91ckVuYWJsZSksXCJjb250b3VyQ29sb3JcImluIHQmJih0aGlzLmNvbnRvdXJDb2xvcj10LmNvbnRvdXJDb2xvciksXCJsaW5lV2lkdGhcImluIHQmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCksXCJsaWdodFBvc2l0aW9uXCJpbiB0JiYodGhpcy5saWdodFBvc2l0aW9uPXQubGlnaHRQb3NpdGlvbiksXCJvcGFjaXR5XCJpbiB0JiYodGhpcy5vcGFjaXR5PXQub3BhY2l0eSksXCJhbWJpZW50XCJpbiB0JiYodGhpcy5hbWJpZW50TGlnaHQ9dC5hbWJpZW50KSxcImRpZmZ1c2VcImluIHQmJih0aGlzLmRpZmZ1c2VMaWdodD10LmRpZmZ1c2UpLFwic3BlY3VsYXJcImluIHQmJih0aGlzLnNwZWN1bGFyTGlnaHQ9dC5zcGVjdWxhciksXCJyb3VnaG5lc3NcImluIHQmJih0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyksXCJmcmVzbmVsXCJpbiB0JiYodGhpcy5mcmVzbmVsPXQuZnJlc25lbCksdC50ZXh0dXJlPyh0aGlzLnRleHR1cmUuZGlzcG9zZSgpLHRoaXMudGV4dHVyZT1vKGUsdC50ZXh0dXJlKSk6dC5jb2xvcm1hcCYmKHRoaXMudGV4dHVyZS5zaGFwZT1bMjU2LDI1Nl0sdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLkxJTkVBUl9NSVBNQVBfTElORUFSLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ZS5MSU5FQVIsdGhpcy50ZXh0dXJlLnNldFBpeGVscyhmdW5jdGlvbih0KXtmb3IodmFyIGU9aCh7Y29sb3JtYXA6dCxuc2hhZGVzOjI1Nixmb3JtYXQ6XCJyZ2JhXCJ9KSxyPW5ldyBVaW50OEFycmF5KDEwMjQpLG49MDtuPDI1NjsrK24pe2Zvcih2YXIgaT1lW25dLGE9MDthPDM7KythKXJbNCpuK2FdPWlbYV07cls0Km4rM109MjU1KmlbM119cmV0dXJuIHUocixbMjU2LDI1Niw0XSxbNCwwLDFdKX0odC5jb2xvcm1hcCkpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcCgpKTt2YXIgcj10LmNlbGxzLG49dC5wb3NpdGlvbnMsaT10LnZlY3RvcnM7aWYobiYmciYmaSl7dm9pZCAwIT09dC50dWJlU2NhbGUmJih0aGlzLnR1YmVTY2FsZT10LnR1YmVTY2FsZSk7dmFyIGE9W10sbD1bXSxjPVtdLGY9W10scD1bXSxkPVtdLGc9W10sdj1bXSxtPVtdLHk9W10seD1bXSxiPVtdLF89W10sdz1bXSxrPVtdO3RoaXMuY2VsbHM9cix0aGlzLnBvc2l0aW9ucz1uLHRoaXMudmVjdG9ycz1pO3ZhciBBPXQudmVydGV4Tm9ybWFscyxUPXQuY2VsbE5vcm1hbHMsTT12b2lkIDA9PT10LnZlcnRleE5vcm1hbHNFcHNpbG9uPzFlLTY6dC52ZXJ0ZXhOb3JtYWxzRXBzaWxvbixTPXZvaWQgMD09PXQuZmFjZU5vcm1hbHNFcHNpbG9uPzFlLTY6dC5mYWNlTm9ybWFsc0Vwc2lsb247dC51c2VGYWNldE5vcm1hbHMmJiFUJiYoVD1zLmZhY2VOb3JtYWxzKHIsbixTKSksVHx8QXx8KEE9cy52ZXJ0ZXhOb3JtYWxzKHIsbixNKSk7dmFyIEU9dC52ZXJ0ZXhDb2xvcnMsQz10LmNlbGxDb2xvcnMsTD10Lm1lc2hDb2xvcnx8WzEsMSwxLDFdLHo9dC52ZXJ0ZXhVVnMsTz10LnZlcnRleEludGVuc2l0eSxJPXQuY2VsbFVWcyxEPXQuY2VsbEludGVuc2l0eSxQPTEvMCxSPS0xLzA7aWYoIXomJiFJKWlmKE8paWYodC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHMpUD0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMF0sUj0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMV07ZWxzZSBmb3IodmFyIEY9MDtGPE8ubGVuZ3RoOysrRil7dmFyIEI9T1tGXTtQPU1hdGgubWluKFAsQiksUj1NYXRoLm1heChSLEIpfWVsc2UgaWYoRClmb3IoRj0wO0Y8RC5sZW5ndGg7KytGKXtCPURbRl07UD1NYXRoLm1pbihQLEIpLFI9TWF0aC5tYXgoUixCKX1lbHNlIGZvcihGPTA7RjxuLmxlbmd0aDsrK0Ype0I9bltGXVsyXTtQPU1hdGgubWluKFAsQiksUj1NYXRoLm1heChSLEIpfXRoaXMuaW50ZW5zaXR5PU98fChEP2Z1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKW5baV09MDt2YXIgYT10Lmxlbmd0aDtmb3IoaT0wO2k8YTsrK2kpZm9yKHZhciBvPXRbaV0scz0wO3M8by5sZW5ndGg7KytzKW5bb1tzXV09cltpXTtyZXR1cm4gbn0ocixuLmxlbmd0aCxEKTpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT10W25dWzJdO3JldHVybiByfShuKSk7dmFyIE49dC5wb2ludFNpemVzLGo9dC5wb2ludFNpemV8fDE7dGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV07Zm9yKEY9MDtGPG4ubGVuZ3RoOysrRilmb3IodmFyIFY9bltGXSxVPTA7VTwzOysrVSkhaXNOYU4oVltVXSkmJmlzRmluaXRlKFZbVV0pJiYodGhpcy5ib3VuZHNbMF1bVV09TWF0aC5taW4odGhpcy5ib3VuZHNbMF1bVV0sVltVXSksdGhpcy5ib3VuZHNbMV1bVV09TWF0aC5tYXgodGhpcy5ib3VuZHNbMV1bVV0sVltVXSkpO3ZhciBxPTAsSD0wLEc9MDt0OmZvcihGPTA7RjxyLmxlbmd0aDsrK0Ype3ZhciBZPXJbRl07c3dpdGNoKFkubGVuZ3RoKXtjYXNlIDE6Zm9yKFY9bltYPVlbMF1dLFU9MDtVPDM7KytVKWlmKGlzTmFOKFZbVV0pfHwhaXNGaW5pdGUoVltVXSkpY29udGludWUgdDt4LnB1c2goVlswXSxWWzFdLFZbMl0sVlszXSksMz09PShaPUU/RVtYXTpDP0NbRl06TCkubGVuZ3RoP2IucHVzaChaWzBdLFpbMV0sWlsyXSwxKTpiLnB1c2goWlswXSxaWzFdLFpbMl0sWlszXSksJD16P3pbWF06Tz9bKE9bWF0tUCkvKFItUCksMF06ST9JW0ZdOkQ/WyhEW0ZdLVApLyhSLVApLDBdOlsoVlsyXS1QKS8oUi1QKSwwXSxfLnB1c2goJFswXSwkWzFdKSxOP3cucHVzaChOW1hdKTp3LnB1c2goaiksay5wdXNoKEYpLEcrPTE7YnJlYWs7Y2FzZSAyOmZvcihVPTA7VTwyOysrVSl7Vj1uW1g9WVtVXV07Zm9yKHZhciBXPTA7VzwzOysrVylpZihpc05hTihWW1ddKXx8IWlzRmluaXRlKFZbV10pKWNvbnRpbnVlIHR9Zm9yKFU9MDtVPDI7KytVKXtWPW5bWD1ZW1VdXTtnLnB1c2goVlswXSxWWzFdLFZbMl0pLDM9PT0oWj1FP0VbWF06Qz9DW0ZdOkwpLmxlbmd0aD92LnB1c2goWlswXSxaWzFdLFpbMl0sMSk6di5wdXNoKFpbMF0sWlsxXSxaWzJdLFpbM10pLCQ9ej96W1hdOk8/WyhPW1hdLVApLyhSLVApLDBdOkk/SVtGXTpEP1soRFtGXS1QKS8oUi1QKSwwXTpbKFZbMl0tUCkvKFItUCksMF0sbS5wdXNoKCRbMF0sJFsxXSkseS5wdXNoKEYpfUgrPTE7YnJlYWs7Y2FzZSAzOmZvcihVPTA7VTwzOysrVSlmb3IoVj1uW1g9WVtVXV0sVz0wO1c8MzsrK1cpaWYoaXNOYU4oVltXXSl8fCFpc0Zpbml0ZShWW1ddKSljb250aW51ZSB0O2ZvcihVPTA7VTwzOysrVSl7dmFyIFg7Vj1uW1g9WVsyLVVdXTthLnB1c2goVlswXSxWWzFdLFZbMl0sVlszXSk7dmFyIFosJCxKLEs9aVtYXTtsLnB1c2goS1swXSxLWzFdLEtbMl0sS1szXSksMz09PShaPUU/RVtYXTpDP0NbRl06TCkubGVuZ3RoP2MucHVzaChaWzBdLFpbMV0sWlsyXSwxKTpjLnB1c2goWlswXSxaWzFdLFpbMl0sWlszXSksJD16P3pbWF06Tz9bKE9bWF0tUCkvKFItUCksMF06ST9JW0ZdOkQ/WyhEW0ZdLVApLyhSLVApLDBdOlsoVlsyXS1QKS8oUi1QKSwwXSxwLnB1c2goJFswXSwkWzFdKSxKPUE/QVtYXTpUW0ZdLGYucHVzaChKWzBdLEpbMV0sSlsyXSksZC5wdXNoKEYpfXErPTF9fXRoaXMucG9pbnRDb3VudD1HLHRoaXMuZWRnZUNvdW50PUgsdGhpcy50cmlhbmdsZUNvdW50PXEsdGhpcy5wb2ludFBvc2l0aW9ucy51cGRhdGUoeCksdGhpcy5wb2ludENvbG9ycy51cGRhdGUoYiksdGhpcy5wb2ludFVWcy51cGRhdGUoXyksdGhpcy5wb2ludFNpemVzLnVwZGF0ZSh3KSx0aGlzLnBvaW50SWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoaykpLHRoaXMuZWRnZVBvc2l0aW9ucy51cGRhdGUoZyksdGhpcy5lZGdlQ29sb3JzLnVwZGF0ZSh2KSx0aGlzLmVkZ2VVVnMudXBkYXRlKG0pLHRoaXMuZWRnZUlkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KHkpKSx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLnVwZGF0ZShhKSx0aGlzLnRyaWFuZ2xlVmVjdG9ycy51cGRhdGUobCksdGhpcy50cmlhbmdsZUNvbG9ycy51cGRhdGUoYyksdGhpcy50cmlhbmdsZVVWcy51cGRhdGUocCksdGhpcy50cmlhbmdsZU5vcm1hbHMudXBkYXRlKGYpLHRoaXMudHJpYW5nbGVJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheShkKSl9fSx4LmRyYXdUcmFuc3BhcmVudD14LmRyYXc9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fG0sbj10LnZpZXd8fG0saT10LnByb2plY3Rpb258fG0sYT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylhWzBdW29dPU1hdGgubWF4KGFbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxhWzFdW29dPU1hdGgubWluKGFbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt2YXIgcz17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGludmVyc2VNb2RlbDptLnNsaWNlKCksY2xpcEJvdW5kczphLGthbWJpZW50OnRoaXMuYW1iaWVudExpZ2h0LGtkaWZmdXNlOnRoaXMuZGlmZnVzZUxpZ2h0LGtzcGVjdWxhcjp0aGlzLnNwZWN1bGFyTGlnaHQscm91Z2huZXNzOnRoaXMucm91Z2huZXNzLGZyZXNuZWw6dGhpcy5mcmVzbmVsLGV5ZVBvc2l0aW9uOlswLDAsMF0sbGlnaHRQb3NpdGlvbjpbMCwwLDBdLG9wYWNpdHk6dGhpcy5vcGFjaXR5LHR1YmVTY2FsZTp0aGlzLnR1YmVTY2FsZSxjb250b3VyQ29sb3I6dGhpcy5jb250b3VyQ29sb3IsdGV4dHVyZTowfTtzLmludmVyc2VNb2RlbD1jKHMuaW52ZXJzZU1vZGVsLHMubW9kZWwpLGUuZGlzYWJsZShlLkNVTExfRkFDRSksdGhpcy50ZXh0dXJlLmJpbmQoMCk7dmFyIHU9bmV3IEFycmF5KDE2KTtsKHUscy52aWV3LHMubW9kZWwpLGwodSxzLnByb2plY3Rpb24sdSksYyh1LHUpO2ZvcihvPTA7bzwzOysrbylzLmV5ZVBvc2l0aW9uW29dPXVbMTIrb10vdVsxNV07dmFyIGg9dVsxNV07Zm9yKG89MDtvPDM7KytvKWgrPXRoaXMubGlnaHRQb3NpdGlvbltvXSp1WzQqbyszXTtmb3Iobz0wO288MzsrK28pe2Zvcih2YXIgZj11WzEyK29dLHA9MDtwPDM7KytwKWYrPXVbNCpwK29dKnRoaXMubGlnaHRQb3NpdGlvbltwXTtzLmxpZ2h0UG9zaXRpb25bb109Zi9ofWlmKHRoaXMudHJpYW5nbGVDb3VudD4wKXt2YXIgZD10aGlzLnRyaVNoYWRlcjtkLmJpbmQoKSxkLnVuaWZvcm1zPXMsdGhpcy50cmlhbmdsZVZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuVFJJQU5HTEVTLDAsMyp0aGlzLnRyaWFuZ2xlQ291bnQpLHRoaXMudHJpYW5nbGVWQU8udW5iaW5kKCl9fSx4LmRyYXdQaWNrPWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHxtLG49dC52aWV3fHxtLGk9dC5wcm9qZWN0aW9ufHxtLGE9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28pYVswXVtvXT1NYXRoLm1heChhWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksYVsxXVtvXT1NYXRoLm1pbihhWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dGhpcy5fbW9kZWw9W10uc2xpY2UuY2FsbChyKSx0aGlzLl92aWV3PVtdLnNsaWNlLmNhbGwobiksdGhpcy5fcHJvamVjdGlvbj1bXS5zbGljZS5jYWxsKGkpLHRoaXMuX3Jlc29sdXRpb249W2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF07dmFyIHM9e21vZGVsOnIsdmlldzpuLHByb2plY3Rpb246aSxjbGlwQm91bmRzOmEsdHViZVNjYWxlOnRoaXMudHViZVNjYWxlLHBpY2tJZDp0aGlzLnBpY2tJZC8yNTV9LGw9dGhpcy5waWNrU2hhZGVyO2wuYmluZCgpLGwudW5pZm9ybXM9cyx0aGlzLnRyaWFuZ2xlQ291bnQ+MCYmKHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpKSx0aGlzLmVkZ2VDb3VudD4wJiYodGhpcy5lZGdlVkFPLmJpbmQoKSxlLmxpbmVXaWR0aCh0aGlzLmxpbmVXaWR0aCp0aGlzLnBpeGVsUmF0aW8pLGUuZHJhd0FycmF5cyhlLkxJTkVTLDAsMip0aGlzLmVkZ2VDb3VudCksdGhpcy5lZGdlVkFPLnVuYmluZCgpKX0seC5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDt2YXIgZT10LnZhbHVlWzBdKzI1Nip0LnZhbHVlWzFdKzY1NTM2KnQudmFsdWVbMl0scj10aGlzLmNlbGxzW2VdLG49dGhpcy5wb3NpdGlvbnNbclsxXV0uc2xpY2UoMCwzKTtyZXR1cm57aW5kZXg6ZSxwb3NpdGlvbjpuLGludGVuc2l0eTp0aGlzLmludGVuc2l0eVtyWzFdXSx2ZWxvY2l0eTp0aGlzLnZlY3RvcnNbclsxXV0uc2xpY2UoMCwzKSxkaXZlcmdlbmNlOnRoaXMudmVjdG9yc1tyWzFdXVszXSxkYXRhQ29vcmRpbmF0ZTpufX0seC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRyaVNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVkFPLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVmVjdG9ycy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZUNvbG9ycy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVVWcy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZU5vcm1hbHMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVJZHMuZGlzcG9zZSgpLHRoaXMuZWRnZVZBTy5kaXNwb3NlKCksdGhpcy5lZGdlUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLmVkZ2VDb2xvcnMuZGlzcG9zZSgpLHRoaXMuZWRnZVVWcy5kaXNwb3NlKCksdGhpcy5lZGdlSWRzLmRpc3Bvc2UoKSx0aGlzLnBvaW50VkFPLmRpc3Bvc2UoKSx0aGlzLnBvaW50UG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLnBvaW50Q29sb3JzLmRpc3Bvc2UoKSx0aGlzLnBvaW50VVZzLmRpc3Bvc2UoKSx0aGlzLnBvaW50U2l6ZXMuZGlzcG9zZSgpLHRoaXMucG9pbnRJZHMuZGlzcG9zZSgpLHRoaXMuY29udG91clZBTy5kaXNwb3NlKCksdGhpcy5jb250b3VyUG9zaXRpb25zLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7MT09PWFyZ3VtZW50cy5sZW5ndGgmJih0PShlPXQpLmdsKTt2YXIgcj1lLnRyaVNoYWRlcnx8ZnVuY3Rpb24odCl7dmFyIGU9bih0LGcudmVydGV4LGcuZnJhZ21lbnQsbnVsbCxnLmF0dHJpYnV0ZXMpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlLmF0dHJpYnV0ZXMudmVjdG9yLmxvY2F0aW9uPTUsZX0odCkscz1iKHQpLGw9byh0LHUobmV3IFVpbnQ4QXJyYXkoWzI1NSwyNTUsMjU1LDI1NV0pLFsxLDEsNF0pKTtsLmdlbmVyYXRlTWlwbWFwKCksbC5taW5GaWx0ZXI9dC5MSU5FQVJfTUlQTUFQX0xJTkVBUixsLm1hZ0ZpbHRlcj10LkxJTkVBUjt2YXIgYz1pKHQpLGg9aSh0KSxmPWkodCkscD1pKHQpLGQ9aSh0KSx2PWkodCksbT1hKHQsW3tidWZmZXI6Yyx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOnYsdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6Zix0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOnAsdHlwZTp0LkZMT0FULHNpemU6Mn0se2J1ZmZlcjpkLHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6aCx0eXBlOnQuRkxPQVQsc2l6ZTo0fV0pLHg9aSh0KSxfPWkodCksdz1pKHQpLGs9aSh0KSxBPWEodCxbe2J1ZmZlcjp4LHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6ayx0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjpfLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6dyx0eXBlOnQuRkxPQVQsc2l6ZToyfV0pLFQ9aSh0KSxNPWkodCksUz1pKHQpLEU9aSh0KSxDPWkodCksTD1hKHQsW3tidWZmZXI6VCx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOkMsdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6TSx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOlMsdHlwZTp0LkZMT0FULHNpemU6Mn0se2J1ZmZlcjpFLHR5cGU6dC5GTE9BVCxzaXplOjF9XSksej1pKHQpLE89bmV3IHkodCxsLHIscyxjLGgsdixmLHAsZCxtLHgsayxfLHcsQSxULEMsTSxTLEUsTCx6LGEodCxbe2J1ZmZlcjp6LHR5cGU6dC5GTE9BVCxzaXplOjN9XSkpO3JldHVybiBPLnVwZGF0ZShlKSxPfX0se1wiLi9zaGFkZXJzXCI6MzA4LGNvbG9ybWFwOjExNyxcImdsLWJ1ZmZlclwiOjIzOCxcImdsLW1hdDQvaW52ZXJ0XCI6MjYyLFwiZ2wtbWF0NC9tdWx0aXBseVwiOjI2NCxcImdsLXNoYWRlclwiOjI5OCxcImdsLXRleHR1cmUyZFwiOjMxNSxcImdsLXZhb1wiOjMyMCxuZGFycmF5OjQ0Myxub3JtYWxzOjQ0NixcInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyXCI6NTAzLFwidHlwZWRhcnJheS1wb29sXCI6NTMwfV0sMzEwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsLXZlYzNcIiksaT10KFwiZ2wtdmVjNFwiKSxhPWZ1bmN0aW9uKHQsZSxyLGEpe2Zvcih2YXIgbz0wLHM9MDtzPHQubGVuZ3RoO3MrKylmb3IodmFyIGw9dFtzXS52ZWxvY2l0aWVzLGM9MDtjPGwubGVuZ3RoO2MrKyl7dmFyIHU9bi5sZW5ndGgobFtjXSk7dT5vJiYobz11KX12YXIgaD10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsYSl7dmFyIG8scyxsLGM9dC5wb2ludHMsdT10LnZlbG9jaXRpZXMsaD10LmRpdmVyZ2VuY2VzO24uc2V0KG4uY3JlYXRlKCksMCwxLDApLG4uY3JlYXRlKCksbi5jcmVhdGUoKTtuLmNyZWF0ZSgpO2Zvcih2YXIgZj1bXSxwPVtdLGQ9W10sZz1bXSx2PVtdLG09W10seT0wLHg9MCxiPWkuY3JlYXRlKCksXz1pLmNyZWF0ZSgpLHc9MDt3PGMubGVuZ3RoO3crKyl7bz1jW3ddLHM9dVt3XSxsPWhbd10sMD09PWUmJihsPS4wNSpyKSx4PW4ubGVuZ3RoKHMpL2EsYj1pLmNyZWF0ZSgpLG4uY29weShiLHMpLGJbM109bDtmb3IodmFyIGs9MDtrPDg7aysrKXZba109W29bMF0sb1sxXSxvWzJdLGtdO2lmKGcubGVuZ3RoPjApZm9yKGs9MDtrPDg7aysrKXt2YXIgQT0oaysxKSU4O2YucHVzaChnW2tdLHZba10sdltBXSx2W0FdLGdbQV0sZ1trXSksZC5wdXNoKF8sYixiLGIsXyxfKSxtLnB1c2goeSx4LHgseCx5LHkpLHAucHVzaChbZi5sZW5ndGgtNixmLmxlbmd0aC01LGYubGVuZ3RoLTRdLFtmLmxlbmd0aC0zLGYubGVuZ3RoLTIsZi5sZW5ndGgtMV0pfXZhciBUPWc7Zz12LHY9VCxUPV8sXz1iLGI9VCxUPXkseT14LHg9VH1yZXR1cm57cG9zaXRpb25zOmYsY2VsbHM6cCx2ZWN0b3JzOmQsdmVydGV4SW50ZW5zaXR5Om19fSh0LHIsYSxvKX0pLGY9W10scD1bXSxkPVtdLGc9W107Zm9yKHM9MDtzPGgubGVuZ3RoO3MrKyl7dmFyIHY9aFtzXSxtPWYubGVuZ3RoO2Y9Zi5jb25jYXQodi5wb3NpdGlvbnMpLGQ9ZC5jb25jYXQodi52ZWN0b3JzKSxnPWcuY29uY2F0KHYudmVydGV4SW50ZW5zaXR5KTtmb3IoYz0wO2M8di5jZWxscy5sZW5ndGg7YysrKXt2YXIgeT12LmNlbGxzW2NdLHg9W107cC5wdXNoKHgpO2Zvcih2YXIgYj0wO2I8eS5sZW5ndGg7YisrKXgucHVzaCh5W2JdK20pfX1yZXR1cm57cG9zaXRpb25zOmYsY2VsbHM6cCx2ZWN0b3JzOmQsdmVydGV4SW50ZW5zaXR5OmcsY29sb3JtYXA6ZX19LG89ZnVuY3Rpb24odCxlKXt2YXIgcj1uLmNyZWF0ZSgpLGk9MWUtNDtuLmFkZChyLHQsW2ksMCwwXSk7dmFyIGE9dGhpcy5nZXRWZWxvY2l0eShyKTtuLnN1YnRyYWN0KGEsYSxlKSxuLnNjYWxlKGEsYSwxZTQpLG4uYWRkKHIsdCxbMCxpLDBdKTt2YXIgbz10aGlzLmdldFZlbG9jaXR5KHIpO24uc3VidHJhY3QobyxvLGUpLG4uc2NhbGUobyxvLDFlNCksbi5hZGQocix0LFswLDAsaV0pO3ZhciBzPXRoaXMuZ2V0VmVsb2NpdHkocik7cmV0dXJuIG4uc3VidHJhY3QocyxzLGUpLG4uc2NhbGUocyxzLDFlNCksbi5hZGQocixhLG8pLG4uYWRkKHIscixzKSxyfSxzPWZ1bmN0aW9uKHQpe3JldHVybiBmKHQsdGhpcy52ZWN0b3JzLHRoaXMubWVzaGdyaWQsdGhpcy5jbGFtcEJvcmRlcnMpfSxsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07aWYobj09PWUpcmV0dXJuIHI7aWYobj5lKXJldHVybiByLTF9cmV0dXJuIHJ9LGM9bi5jcmVhdGUoKSx1PW4uY3JlYXRlKCksaD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ8ZT9lOnQ+cj9yOnR9LGY9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9dFswXSxvPXRbMV0scz10WzJdLGY9clswXS5sZW5ndGgscD1yWzFdLmxlbmd0aCxkPXJbMl0ubGVuZ3RoLGc9bChyWzBdLGEpLHY9bChyWzFdLG8pLG09bChyWzJdLHMpLHk9ZysxLHg9disxLGI9bSsxO2lmKHJbMF1bZ109PT1hJiYoeT1nKSxyWzFdW3ZdPT09byYmKHg9diksclsyXVttXT09PXMmJihiPW0pLGkmJihnPWgoZywwLGYtMSkseT1oKHksMCxmLTEpLHY9aCh2LDAscC0xKSx4PWgoeCwwLHAtMSksbT1oKG0sMCxkLTEpLGI9aChiLDAsZC0xKSksZzwwfHx2PDB8fG08MHx8eT49Znx8eD49cHx8Yj49ZClyZXR1cm4gbi5jcmVhdGUoKTt2YXIgXz0oYS1yWzBdW2ddKS8oclswXVt5XS1yWzBdW2ddKSx3PShvLXJbMV1bdl0pLyhyWzFdW3hdLXJbMV1bdl0pLGs9KHMtclsyXVttXSkvKHJbMl1bYl0tclsyXVttXSk7KF88MHx8Xz4xfHxpc05hTihfKSkmJihfPTApLCh3PDB8fHc+MXx8aXNOYU4odykpJiYodz0wKSwoazwwfHxrPjF8fGlzTmFOKGspKSYmKGs9MCk7dmFyIEE9bSpmKnAsVD1iKmYqcCxNPXYqZixTPXgqZixFPWcsQz15LEw9ZVtNK0ErRV0sej1lW00rQStDXSxPPWVbUytBK0VdLEk9ZVtTK0ErQ10sRD1lW00rVCtFXSxQPWVbTStUK0NdLFI9ZVtTK1QrRV0sRj1lW1MrVCtDXSxCPW4uY3JlYXRlKCk7cmV0dXJuIG4ubGVycChCLEwseixfKSxuLmxlcnAoYyxPLEksXyksbi5sZXJwKEIsQixjLHcpLG4ubGVycChjLEQsUCxfKSxuLmxlcnAodSxSLEYsXyksbi5sZXJwKGMsYyx1LHcpLG4ubGVycChCLEIsYyxrKSxCfSxwPWZ1bmN0aW9uKHQpe3ZhciBlPTEvMDt0LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSk7Zm9yKHZhciByPTE7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPU1hdGguYWJzKHRbcl0tdFtyLTFdKTtuPGUmJihlPW4pfXJldHVybiBlfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnN0YXJ0aW5nUG9zaXRpb25zLGk9dC5tYXhMZW5ndGh8fDFlMyxsPXQudHViZVNpemV8fDEsYz10LmFic29sdXRlVHViZVNpemU7dC5nZXREaXZlcmdlbmNlfHwodC5nZXREaXZlcmdlbmNlPW8pLHQuZ2V0VmVsb2NpdHl8fCh0LmdldFZlbG9jaXR5PXMpLHZvaWQgMD09PXQuY2xhbXBCb3JkZXJzJiYodC5jbGFtcEJvcmRlcnM9ITApO3ZhciB1PVtdLGg9ZVswXVswXSxmPWVbMF1bMV0sZD1lWzBdWzJdLGc9ZVsxXVswXSx2PWVbMV1bMV0sbT1lWzFdWzJdLHk9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl07cmV0dXJuIHI+PWgmJnI8PWcmJm4+PWYmJm48PXYmJmk+PWQmJmk8PW19LHg9MTAqbi5kaXN0YW5jZShlWzBdLGVbMV0pL2ksYj14KngsXz0xLHc9MDtuLmNyZWF0ZSgpO3IubGVuZ3RoPj0yJiYoXz1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj1bXSxuPVtdLGk9e30sYT17fSxvPXt9LHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIGw9dFtzXSxjPWxbMF0sdT1sWzFdLGg9bFsyXTtpW2NdfHwoZS5wdXNoKGMpLGlbY109ITApLGFbdV18fChyLnB1c2godSksYVt1XT0hMCksb1toXXx8KG4ucHVzaChoKSxvW2hdPSEwKX12YXIgZj1wKGUpLGQ9cChyKSxnPXAobiksdj1NYXRoLm1pbihmLGQsZyk7cmV0dXJuIGlzRmluaXRlKHYpP3Y6MX0ocikpO2Zvcih2YXIgaz0wO2s8ci5sZW5ndGg7aysrKXt2YXIgQT1uLmNyZWF0ZSgpO24uY29weShBLHJba10pO3ZhciBUPVtBXSxNPVtdLFM9dC5nZXRWZWxvY2l0eShBKSxFPUE7TS5wdXNoKFMpO3ZhciBDPVtdLEw9dC5nZXREaXZlcmdlbmNlKEEsUyk7KEQ9bi5sZW5ndGgoTCkpPncmJiFpc05hTihEKSYmaXNGaW5pdGUoRCkmJih3PUQpLEMucHVzaChEKSx1LnB1c2goe3BvaW50czpULHZlbG9jaXRpZXM6TSxkaXZlcmdlbmNlczpDfSk7Zm9yKHZhciB6PTA7ejwxMDAqaSYmVC5sZW5ndGg8aSYmeSgwLEEpOyl7eisrO3ZhciBPPW4uY2xvbmUoUyksST1uLnNxdWFyZWRMZW5ndGgoTyk7aWYoMD09PUkpYnJlYWs7aWYoST5iJiZuLnNjYWxlKE8sTyx4L01hdGguc3FydChJKSksbi5hZGQoTyxPLEEpLFM9dC5nZXRWZWxvY2l0eShPKSxuLnNxdWFyZWREaXN0YW5jZShFLE8pLWI+LTFlLTQqYil7VC5wdXNoKE8pLEU9TyxNLnB1c2goUyk7TD10LmdldERpdmVyZ2VuY2UoTyxTKTsoRD1uLmxlbmd0aChMKSk+dyYmIWlzTmFOKEQpJiZpc0Zpbml0ZShEKSYmKHc9RCksQy5wdXNoKEQpfUE9T319Zm9yKGs9MDtrPEMubGVuZ3RoO2srKyl7dmFyIEQ9Q1trXTshaXNOYU4oRCkmJmlzRmluaXRlKEQpfHwoQ1trXT13KX12YXIgUD1hKHUsdC5jb2xvcm1hcCx3LF8pO3JldHVybiBjP1AudHViZVNjYWxlPWM6KDA9PT13JiYodz0xKSxQLnR1YmVTY2FsZT0uNSpsKl8vdyksUH0sZS5leHBvcnRzLmNyZWF0ZVR1YmVNZXNoPXQoXCIuL2xpYi90dWJlbWVzaFwiKX0se1wiLi9saWIvdHViZW1lc2hcIjozMDksXCJnbC12ZWMzXCI6MzM5LFwiZ2wtdmVjNFwiOjM3NX1dLDMxMTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCJnbC1zaGFkZXJcIiksaT10KFwiZ2xzbGlmeVwiKSxhPWkoW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzQgdXY7XFxuYXR0cmlidXRlIHZlYzMgZjtcXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWw7XFxuXFxudW5pZm9ybSB2ZWMzIG9iamVjdE9mZnNldDtcXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb24sIGludmVyc2VNb2RlbDtcXG51bmlmb3JtIHZlYzMgbGlnaHRQb3NpdGlvbiwgZXllUG9zaXRpb247XFxudW5pZm9ybSBzYW1wbGVyMkQgY29sb3JtYXA7XFxuXFxudmFyeWluZyBmbG9hdCB2YWx1ZSwga2lsbDtcXG52YXJ5aW5nIHZlYzMgd29ybGRDb29yZGluYXRlO1xcbnZhcnlpbmcgdmVjMiBwbGFuZUNvb3JkaW5hdGU7XFxudmFyeWluZyB2ZWMzIGxpZ2h0RGlyZWN0aW9uLCBleWVEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWw7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWMzIGxvY2FsQ29vcmRpbmF0ZSA9IHZlYzModXYuencsIGYueCk7XFxuICB3b3JsZENvb3JkaW5hdGUgPSBvYmplY3RPZmZzZXQgKyBsb2NhbENvb3JkaW5hdGU7XFxuICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQod29ybGRDb29yZGluYXRlLCAxLjApO1xcbiAgdmVjNCBjbGlwUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIHdvcmxkUG9zaXRpb247XFxuICBnbF9Qb3NpdGlvbiA9IGNsaXBQb3NpdGlvbjtcXG4gIGtpbGwgPSBmLnk7XFxuICB2YWx1ZSA9IGYuejtcXG4gIHBsYW5lQ29vcmRpbmF0ZSA9IHV2Lnh5O1xcblxcbiAgdkNvbG9yID0gdGV4dHVyZTJEKGNvbG9ybWFwLCB2ZWMyKHZhbHVlLCB2YWx1ZSkpO1xcblxcbiAgLy9MaWdodGluZyBnZW9tZXRyeSBwYXJhbWV0ZXJzXFxuICB2ZWM0IGNhbWVyYUNvb3JkaW5hdGUgPSB2aWV3ICogd29ybGRQb3NpdGlvbjtcXG4gIGNhbWVyYUNvb3JkaW5hdGUueHl6IC89IGNhbWVyYUNvb3JkaW5hdGUudztcXG4gIGxpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xcbiAgZXllRGlyZWN0aW9uICAgPSBleWVQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xcbiAgc3VyZmFjZU5vcm1hbCAgPSBub3JtYWxpemUoKHZlYzQobm9ybWFsLDApICogaW52ZXJzZU1vZGVsKS54eXopO1xcbn1cXG5cIl0pLG89aShbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5mbG9hdCBiZWNrbWFubkRpc3RyaWJ1dGlvbihmbG9hdCB4LCBmbG9hdCByb3VnaG5lc3MpIHtcXG4gIGZsb2F0IE5kb3RIID0gbWF4KHgsIDAuMDAwMSk7XFxuICBmbG9hdCBjb3MyQWxwaGEgPSBOZG90SCAqIE5kb3RIO1xcbiAgZmxvYXQgdGFuMkFscGhhID0gKGNvczJBbHBoYSAtIDEuMCkgLyBjb3MyQWxwaGE7XFxuICBmbG9hdCByb3VnaG5lc3MyID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xcbiAgZmxvYXQgZGVub20gPSAzLjE0MTU5MjY1MzU4OTc5MyAqIHJvdWdobmVzczIgKiBjb3MyQWxwaGEgKiBjb3MyQWxwaGE7XFxuICByZXR1cm4gZXhwKHRhbjJBbHBoYSAvIHJvdWdobmVzczIpIC8gZGVub207XFxufVxcblxcbmZsb2F0IGJlY2ttYW5uU3BlY3VsYXIoXFxuICB2ZWMzIGxpZ2h0RGlyZWN0aW9uLFxcbiAgdmVjMyB2aWV3RGlyZWN0aW9uLFxcbiAgdmVjMyBzdXJmYWNlTm9ybWFsLFxcbiAgZmxvYXQgcm91Z2huZXNzKSB7XFxuICByZXR1cm4gYmVja21hbm5EaXN0cmlidXRpb24oZG90KHN1cmZhY2VOb3JtYWwsIG5vcm1hbGl6ZShsaWdodERpcmVjdGlvbiArIHZpZXdEaXJlY3Rpb24pKSwgcm91Z2huZXNzKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcXG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XFxuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcXG59XFxuXFxudW5pZm9ybSB2ZWMzIGxvd2VyQm91bmQsIHVwcGVyQm91bmQ7XFxudW5pZm9ybSBmbG9hdCBjb250b3VyVGludDtcXG51bmlmb3JtIHZlYzQgY29udG91ckNvbG9yO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGNvbG9ybWFwO1xcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzLCBmcmVzbmVsLCBrYW1iaWVudCwga2RpZmZ1c2UsIGtzcGVjdWxhciwgb3BhY2l0eTtcXG51bmlmb3JtIGZsb2F0IHZlcnRleENvbG9yO1xcblxcbnZhcnlpbmcgZmxvYXQgdmFsdWUsIGtpbGw7XFxudmFyeWluZyB2ZWMzIHdvcmxkQ29vcmRpbmF0ZTtcXG52YXJ5aW5nIHZlYzMgbGlnaHREaXJlY3Rpb24sIGV5ZURpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmICgoa2lsbCA+IDAuMCkgfHxcXG4gICAgICAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCB3b3JsZENvb3JkaW5hdGUpKSkgZGlzY2FyZDtcXG5cXG4gIHZlYzMgTiA9IG5vcm1hbGl6ZShzdXJmYWNlTm9ybWFsKTtcXG4gIHZlYzMgViA9IG5vcm1hbGl6ZShleWVEaXJlY3Rpb24pO1xcbiAgdmVjMyBMID0gbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uKTtcXG5cXG4gIGlmKGdsX0Zyb250RmFjaW5nKSB7XFxuICAgIE4gPSAtTjtcXG4gIH1cXG5cXG4gIGZsb2F0IHNwZWN1bGFyID0gbWF4KGJlY2ttYW5uU3BlY3VsYXIoTCwgViwgTiwgcm91Z2huZXNzKSwgMC4pO1xcbiAgZmxvYXQgZGlmZnVzZSAgPSBtaW4oa2FtYmllbnQgKyBrZGlmZnVzZSAqIG1heChkb3QoTiwgTCksIDAuMCksIDEuMCk7XFxuXFxuICAvL2RlY2lkZSBob3cgdG8gaW50ZXJwb2xhdGUgY29sb3IgXFx1MjAxNCBpbiB2ZXJ0ZXggb3IgaW4gZnJhZ21lbnRcXG4gIHZlYzQgc3VyZmFjZUNvbG9yID1cXG4gICAgc3RlcCh2ZXJ0ZXhDb2xvciwgLjUpICogdGV4dHVyZTJEKGNvbG9ybWFwLCB2ZWMyKHZhbHVlLCB2YWx1ZSkpICtcXG4gICAgc3RlcCguNSwgdmVydGV4Q29sb3IpICogdkNvbG9yO1xcblxcbiAgdmVjNCBsaXRDb2xvciA9IHN1cmZhY2VDb2xvci5hICogdmVjNChkaWZmdXNlICogc3VyZmFjZUNvbG9yLnJnYiArIGtzcGVjdWxhciAqIHZlYzMoMSwxLDEpICogc3BlY3VsYXIsICAxLjApO1xcblxcbiAgZ2xfRnJhZ0NvbG9yID0gbWl4KGxpdENvbG9yLCBjb250b3VyQ29sb3IsIGNvbnRvdXJUaW50KSAqIG9wYWNpdHk7XFxufVxcblwiXSkscz1pKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWM0IHV2O1xcbmF0dHJpYnV0ZSBmbG9hdCBmO1xcblxcbnVuaWZvcm0gdmVjMyBvYmplY3RPZmZzZXQ7XFxudW5pZm9ybSBtYXQzIHBlcm11dGF0aW9uO1xcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcXG51bmlmb3JtIGZsb2F0IGhlaWdodCwgek9mZnNldDtcXG51bmlmb3JtIHNhbXBsZXIyRCBjb2xvcm1hcDtcXG5cXG52YXJ5aW5nIGZsb2F0IHZhbHVlLCBraWxsO1xcbnZhcnlpbmcgdmVjMyB3b3JsZENvb3JkaW5hdGU7XFxudmFyeWluZyB2ZWMyIHBsYW5lQ29vcmRpbmF0ZTtcXG52YXJ5aW5nIHZlYzMgbGlnaHREaXJlY3Rpb24sIGV5ZURpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzMgZGF0YUNvb3JkaW5hdGUgPSBwZXJtdXRhdGlvbiAqIHZlYzModXYueHksIGhlaWdodCk7XFxuICB3b3JsZENvb3JkaW5hdGUgPSBvYmplY3RPZmZzZXQgKyBkYXRhQ29vcmRpbmF0ZTtcXG4gIHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsICogdmVjNCh3b3JsZENvb3JkaW5hdGUsIDEuMCk7XFxuXFxuICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogd29ybGRQb3NpdGlvbjtcXG4gIGNsaXBQb3NpdGlvbi56ICs9IHpPZmZzZXQ7XFxuXFxuICBnbF9Qb3NpdGlvbiA9IGNsaXBQb3NpdGlvbjtcXG4gIHZhbHVlID0gZiArIG9iamVjdE9mZnNldC56O1xcbiAga2lsbCA9IC0xLjA7XFxuICBwbGFuZUNvb3JkaW5hdGUgPSB1di56dztcXG5cXG4gIHZDb2xvciA9IHRleHR1cmUyRChjb2xvcm1hcCwgdmVjMih2YWx1ZSwgdmFsdWUpKTtcXG5cXG4gIC8vRG9uJ3QgZG8gbGlnaHRpbmcgZm9yIGNvbnRvdXJzXFxuICBzdXJmYWNlTm9ybWFsICAgPSB2ZWMzKDEsMCwwKTtcXG4gIGV5ZURpcmVjdGlvbiAgICA9IHZlYzMoMCwxLDApO1xcbiAgbGlnaHREaXJlY3Rpb24gID0gdmVjMygwLDAsMSk7XFxufVxcblwiXSksbD1pKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XFxuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XFxufVxcblxcbnVuaWZvcm0gdmVjMiBzaGFwZTtcXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcXG51bmlmb3JtIGZsb2F0IHBpY2tJZDtcXG5cXG52YXJ5aW5nIGZsb2F0IHZhbHVlLCBraWxsO1xcbnZhcnlpbmcgdmVjMyB3b3JsZENvb3JkaW5hdGU7XFxudmFyeWluZyB2ZWMyIHBsYW5lQ29vcmRpbmF0ZTtcXG52YXJ5aW5nIHZlYzMgc3VyZmFjZU5vcm1hbDtcXG5cXG52ZWMyIHNwbGl0RmxvYXQoZmxvYXQgdikge1xcbiAgZmxvYXQgdmggPSAyNTUuMCAqIHY7XFxuICBmbG9hdCB1cHBlciA9IGZsb29yKHZoKTtcXG4gIGZsb2F0IGxvd2VyID0gZnJhY3QodmgpO1xcbiAgcmV0dXJuIHZlYzIodXBwZXIgLyAyNTUuMCwgZmxvb3IobG93ZXIgKiAxNi4wKSAvIDE2LjApO1xcbn1cXG5cXG52b2lkIG1haW4oKSB7XFxuICBpZiAoKGtpbGwgPiAwLjApIHx8XFxuICAgICAgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgd29ybGRDb29yZGluYXRlKSkpIGRpc2NhcmQ7XFxuXFxuICB2ZWMyIHV4ID0gc3BsaXRGbG9hdChwbGFuZUNvb3JkaW5hdGUueCAvIHNoYXBlLngpO1xcbiAgdmVjMiB1eSA9IHNwbGl0RmxvYXQocGxhbmVDb29yZGluYXRlLnkgLyBzaGFwZS55KTtcXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLCB1eC54LCB1eS54LCB1eC55ICsgKHV5LnkvMTYuMCkpO1xcbn1cXG5cIl0pO3IuY3JlYXRlU2hhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxhLG8sbnVsbCxbe25hbWU6XCJ1dlwiLHR5cGU6XCJ2ZWM0XCJ9LHtuYW1lOlwiZlwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwibm9ybWFsXCIsdHlwZTpcInZlYzNcIn1dKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmYubG9jYXRpb249MSxlLmF0dHJpYnV0ZXMubm9ybWFsLmxvY2F0aW9uPTIsZX0sci5jcmVhdGVQaWNrU2hhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxhLGwsbnVsbCxbe25hbWU6XCJ1dlwiLHR5cGU6XCJ2ZWM0XCJ9LHtuYW1lOlwiZlwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwibm9ybWFsXCIsdHlwZTpcInZlYzNcIn1dKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmYubG9jYXRpb249MSxlLmF0dHJpYnV0ZXMubm9ybWFsLmxvY2F0aW9uPTIsZX0sci5jcmVhdGVDb250b3VyU2hhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxzLG8sbnVsbCxbe25hbWU6XCJ1dlwiLHR5cGU6XCJ2ZWM0XCJ9LHtuYW1lOlwiZlwiLHR5cGU6XCJmbG9hdFwifV0pO3JldHVybiBlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuZi5sb2NhdGlvbj0xLGV9LHIuY3JlYXRlUGlja0NvbnRvdXJTaGFkZXI9ZnVuY3Rpb24odCl7dmFyIGU9bih0LHMsbCxudWxsLFt7bmFtZTpcInV2XCIsdHlwZTpcInZlYzRcIn0se25hbWU6XCJmXCIsdHlwZTpcImZsb2F0XCJ9XSk7cmV0dXJuIGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5mLmxvY2F0aW9uPTEsZX19LHtcImdsLXNoYWRlclwiOjI5OCxnbHNsaWZ5OjQwMn1dLDMxMjpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsxMDJdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoxMDJ9XSwzMTM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPXkoZSksbj1iKGUpLHM9eChlKSxsPV8oZSksYz1pKGUpLHU9YShlLFt7YnVmZmVyOmMsc2l6ZTo0LHN0cmlkZTp3LG9mZnNldDowfSx7YnVmZmVyOmMsc2l6ZTozLHN0cmlkZTp3LG9mZnNldDoxNn0se2J1ZmZlcjpjLHNpemU6MyxzdHJpZGU6dyxvZmZzZXQ6Mjh9XSksaD1pKGUpLGY9YShlLFt7YnVmZmVyOmgsc2l6ZTo0LHN0cmlkZToyMCxvZmZzZXQ6MH0se2J1ZmZlcjpoLHNpemU6MSxzdHJpZGU6MjAsb2Zmc2V0OjE2fV0pLHA9aShlKSxkPWEoZSxbe2J1ZmZlcjpwLHNpemU6Mix0eXBlOmUuRkxPQVR9XSksZz1vKGUsMSxTLGUuUkdCQSxlLlVOU0lHTkVEX0JZVEUpO2cubWluRmlsdGVyPWUuTElORUFSLGcubWFnRmlsdGVyPWUuTElORUFSO3ZhciB2PW5ldyBFKGUsWzAsMF0sW1swLDAsMF0sWzAsMCwwXV0scixuLGMsdSxnLHMsbCxoLGYscCxkLFswLDAsMF0pLG09e2xldmVsczpbW10sW10sW11dfTtmb3IodmFyIGsgaW4gdCltW2tdPXRba107cmV0dXJuIG0uY29sb3JtYXA9bS5jb2xvcm1hcHx8XCJqZXRcIix2LnVwZGF0ZShtKSx2fTt2YXIgbj10KFwiYml0LXR3aWRkbGVcIiksaT10KFwiZ2wtYnVmZmVyXCIpLGE9dChcImdsLXZhb1wiKSxvPXQoXCJnbC10ZXh0dXJlMmRcIikscz10KFwidHlwZWRhcnJheS1wb29sXCIpLGw9dChcImNvbG9ybWFwXCIpLGM9dChcIm5kYXJyYXktb3BzXCIpLHU9dChcIm5kYXJyYXktcGFja1wiKSxoPXQoXCJuZGFycmF5XCIpLGY9dChcInN1cmZhY2UtbmV0c1wiKSxwPXQoXCJnbC1tYXQ0L211bHRpcGx5XCIpLGQ9dChcImdsLW1hdDQvaW52ZXJ0XCIpLGc9dChcImJpbmFyeS1zZWFyY2gtYm91bmRzXCIpLHY9dChcIm5kYXJyYXktZ3JhZGllbnRcIiksbT10KFwiLi9saWIvc2hhZGVyc1wiKSx5PW0uY3JlYXRlU2hhZGVyLHg9bS5jcmVhdGVDb250b3VyU2hhZGVyLGI9bS5jcmVhdGVQaWNrU2hhZGVyLF89bS5jcmVhdGVQaWNrQ29udG91clNoYWRlcix3PTQwLGs9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdLEE9W1swLDBdLFswLDFdLFsxLDBdLFsxLDFdLFsxLDBdLFswLDFdXSxUPVtbMCwwLDAsMCwwLDAsMCwwLDBdLFswLDAsMCwwLDAsMCwwLDAsMF0sWzAsMCwwLDAsMCwwLDAsMCwwXV07ZnVuY3Rpb24gTSh0LGUscixuLGkpe3RoaXMucG9zaXRpb249dCx0aGlzLmluZGV4PWUsdGhpcy51dj1yLHRoaXMubGV2ZWw9bix0aGlzLmRhdGFDb29yZGluYXRlPWl9IWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDwzOysrdCl7dmFyIGU9VFt0XSxyPSh0KzIpJTM7ZVsodCsxKSUzKzBdPTEsZVtyKzNdPTEsZVt0KzZdPTF9fSgpO3ZhciBTPTI1NjtmdW5jdGlvbiBFKHQsZSxyLG4saSxhLG8sbCxjLHUsZixwLGQsZyx2KXt0aGlzLmdsPXQsdGhpcy5zaGFwZT1lLHRoaXMuYm91bmRzPXIsdGhpcy5vYmplY3RPZmZzZXQ9dix0aGlzLmludGVuc2l0eUJvdW5kcz1bXSx0aGlzLl9zaGFkZXI9bix0aGlzLl9waWNrU2hhZGVyPWksdGhpcy5fY29vcmRpbmF0ZUJ1ZmZlcj1hLHRoaXMuX3Zhbz1vLHRoaXMuX2NvbG9yTWFwPWwsdGhpcy5fY29udG91clNoYWRlcj1jLHRoaXMuX2NvbnRvdXJQaWNrU2hhZGVyPXUsdGhpcy5fY29udG91ckJ1ZmZlcj1mLHRoaXMuX2NvbnRvdXJWQU89cCx0aGlzLl9jb250b3VyT2Zmc2V0cz1bW10sW10sW11dLHRoaXMuX2NvbnRvdXJDb3VudHM9W1tdLFtdLFtdXSx0aGlzLl92ZXJ0ZXhDb3VudD0wLHRoaXMuX3BpY2tSZXN1bHQ9bmV3IE0oWzAsMCwwXSxbMCwwXSxbMCwwXSxbMCwwLDBdLFswLDAsMF0pLHRoaXMuX2R5bmFtaWNCdWZmZXI9ZCx0aGlzLl9keW5hbWljVkFPPWcsdGhpcy5fZHluYW1pY09mZnNldHM9WzAsMCwwXSx0aGlzLl9keW5hbWljQ291bnRzPVswLDAsMF0sdGhpcy5jb250b3VyV2lkdGg9WzEsMSwxXSx0aGlzLmNvbnRvdXJMZXZlbHM9W1sxXSxbMV0sWzFdXSx0aGlzLmNvbnRvdXJUaW50PVswLDAsMF0sdGhpcy5jb250b3VyQ29sb3I9W1suNSwuNSwuNSwxXSxbLjUsLjUsLjUsMV0sWy41LC41LC41LDFdXSx0aGlzLnNob3dDb250b3VyPSEwLHRoaXMuc2hvd1N1cmZhY2U9ITAsdGhpcy5lbmFibGVIaWdobGlnaHQ9WyEwLCEwLCEwXSx0aGlzLmhpZ2hsaWdodENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5oaWdobGlnaHRUaW50PVsxLDEsMV0sdGhpcy5oaWdobGlnaHRMZXZlbD1bLTEsLTEsLTFdLHRoaXMuZW5hYmxlRHluYW1pYz1bITAsITAsITBdLHRoaXMuZHluYW1pY0xldmVsPVtOYU4sTmFOLE5hTl0sdGhpcy5keW5hbWljQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmR5bmFtaWNUaW50PVsxLDEsMV0sdGhpcy5keW5hbWljV2lkdGg9WzEsMSwxXSx0aGlzLmF4ZXNCb3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5zdXJmYWNlUHJvamVjdD1bITEsITEsITFdLHRoaXMuY29udG91clByb2plY3Q9W1shMSwhMSwhMV0sWyExLCExLCExXSxbITEsITEsITFdXSx0aGlzLmNvbG9yQm91bmRzPVshMSwhMV0sdGhpcy5fZmllbGQ9W2gocy5tYWxsb2NGbG9hdCgxMDI0KSxbMCwwXSksaChzLm1hbGxvY0Zsb2F0KDEwMjQpLFswLDBdKSxoKHMubWFsbG9jRmxvYXQoMTAyNCksWzAsMF0pXSx0aGlzLnBpY2tJZD0xLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLnNuYXBUb0RhdGE9ITEsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5vcGFjaXR5PTEsdGhpcy5saWdodFBvc2l0aW9uPVsxMCwxZTQsMF0sdGhpcy5hbWJpZW50TGlnaHQ9LjgsdGhpcy5kaWZmdXNlTGlnaHQ9LjgsdGhpcy5zcGVjdWxhckxpZ2h0PTIsdGhpcy5yb3VnaG5lc3M9LjUsdGhpcy5mcmVzbmVsPTEuNSx0aGlzLnZlcnRleENvbG9yPTAsdGhpcy5kaXJ0eT0hMH12YXIgQz1FLnByb3RvdHlwZTtDLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5PDF9LEMuaXNPcGFxdWU9ZnVuY3Rpb24oKXtpZih0aGlzLm9wYWNpdHk+PTEpcmV0dXJuITA7Zm9yKHZhciB0PTA7dDwzOysrdClpZih0aGlzLl9jb250b3VyQ291bnRzW3RdLmxlbmd0aD4wfHx0aGlzLl9keW5hbWljQ291bnRzW3RdPjApcmV0dXJuITA7cmV0dXJuITF9LEMucGlja1Nsb3RzPTEsQy5zZXRQaWNrQmFzZT1mdW5jdGlvbih0KXt0aGlzLnBpY2tJZD10fTt2YXIgTD1bMCwwLDBdLHo9e3Nob3dTdXJmYWNlOiExLHNob3dDb250b3VyOiExLHByb2plY3Rpb25zOltrLnNsaWNlKCksay5zbGljZSgpLGsuc2xpY2UoKV0sY2xpcEJvdW5kczpbW1swLDAsMF0sWzAsMCwwXV0sW1swLDAsMF0sWzAsMCwwXV0sW1swLDAsMF0sWzAsMCwwXV1dfTtmdW5jdGlvbiBPKHQsZSl7dmFyIHIsbixpLGE9ZS5heGVzJiZlLmF4ZXMubGFzdEN1YmVQcm9wcy5heGlzfHxMLG89ZS5zaG93U3VyZmFjZSxzPWUuc2hvd0NvbnRvdXI7Zm9yKHI9MDtyPDM7KytyKWZvcihvPW98fGUuc3VyZmFjZVByb2plY3Rbcl0sbj0wO248MzsrK24pcz1zfHxlLmNvbnRvdXJQcm9qZWN0W3JdW25dO2ZvcihyPTA7cjwzOysrcil7dmFyIGw9ei5wcm9qZWN0aW9uc1tyXTtmb3Iobj0wO248MTY7KytuKWxbbl09MDtmb3Iobj0wO248NDsrK24pbFs1Km5dPTE7bFs1KnJdPTAsbFsxMityXT1lLmF4ZXNCb3VuZHNbKyhhW3JdPjApXVtyXSxwKGwsdC5tb2RlbCxsKTt2YXIgYz16LmNsaXBCb3VuZHNbcl07Zm9yKGk9MDtpPDI7KytpKWZvcihuPTA7bjwzOysrbiljW2ldW25dPXQuY2xpcEJvdW5kc1tpXVtuXTtjWzBdW3JdPS0xZTgsY1sxXVtyXT0xZTh9cmV0dXJuIHouc2hvd1N1cmZhY2U9byx6LnNob3dDb250b3VyPXMsen12YXIgST17bW9kZWw6ayx2aWV3OmsscHJvamVjdGlvbjprLGludmVyc2VNb2RlbDprLnNsaWNlKCksbG93ZXJCb3VuZDpbMCwwLDBdLHVwcGVyQm91bmQ6WzAsMCwwXSxjb2xvck1hcDowLGNsaXBCb3VuZHM6W1swLDAsMF0sWzAsMCwwXV0saGVpZ2h0OjAsY29udG91clRpbnQ6MCxjb250b3VyQ29sb3I6WzAsMCwwLDFdLHBlcm11dGF0aW9uOlsxLDAsMCwwLDEsMCwwLDAsMV0sek9mZnNldDotMWUtNCxvYmplY3RPZmZzZXQ6WzAsMCwwXSxrYW1iaWVudDoxLGtkaWZmdXNlOjEsa3NwZWN1bGFyOjEsbGlnaHRQb3NpdGlvbjpbMWUzLDFlMywxZTNdLGV5ZVBvc2l0aW9uOlswLDAsMF0scm91Z2huZXNzOjEsZnJlc25lbDoxLG9wYWNpdHk6MSx2ZXJ0ZXhDb2xvcjowfSxEPWsuc2xpY2UoKSxQPVsxLDAsMCwwLDEsMCwwLDAsMV07ZnVuY3Rpb24gUih0LGUpe3Q9dHx8e307dmFyIHI9dGhpcy5nbDtyLmRpc2FibGUoci5DVUxMX0ZBQ0UpLHRoaXMuX2NvbG9yTWFwLmJpbmQoMCk7dmFyIG49STtuLm1vZGVsPXQubW9kZWx8fGssbi52aWV3PXQudmlld3x8ayxuLnByb2plY3Rpb249dC5wcm9qZWN0aW9ufHxrLG4ubG93ZXJCb3VuZD1bdGhpcy5ib3VuZHNbMF1bMF0sdGhpcy5ib3VuZHNbMF1bMV0sdGhpcy5jb2xvckJvdW5kc1swXXx8dGhpcy5ib3VuZHNbMF1bMl1dLG4udXBwZXJCb3VuZD1bdGhpcy5ib3VuZHNbMV1bMF0sdGhpcy5ib3VuZHNbMV1bMV0sdGhpcy5jb2xvckJvdW5kc1sxXXx8dGhpcy5ib3VuZHNbMV1bMl1dLG4ub2JqZWN0T2Zmc2V0PXRoaXMub2JqZWN0T2Zmc2V0LG4uY29udG91ckNvbG9yPXRoaXMuY29udG91ckNvbG9yWzBdLG4uaW52ZXJzZU1vZGVsPWQobi5pbnZlcnNlTW9kZWwsbi5tb2RlbCk7Zm9yKHZhciBpPTA7aTwyOysraSlmb3IodmFyIGE9bi5jbGlwQm91bmRzW2ldLG89MDtvPDM7KytvKWFbb109TWF0aC5taW4oTWF0aC5tYXgodGhpcy5jbGlwQm91bmRzW2ldW29dLC0xZTgpLDFlOCk7bi5rYW1iaWVudD10aGlzLmFtYmllbnRMaWdodCxuLmtkaWZmdXNlPXRoaXMuZGlmZnVzZUxpZ2h0LG4ua3NwZWN1bGFyPXRoaXMuc3BlY3VsYXJMaWdodCxuLnJvdWdobmVzcz10aGlzLnJvdWdobmVzcyxuLmZyZXNuZWw9dGhpcy5mcmVzbmVsLG4ub3BhY2l0eT10aGlzLm9wYWNpdHksbi5oZWlnaHQ9MCxuLnBlcm11dGF0aW9uPVAsbi52ZXJ0ZXhDb2xvcj10aGlzLnZlcnRleENvbG9yO3ZhciBzPUQ7Zm9yKHAocyxuLnZpZXcsbi5tb2RlbCkscChzLG4ucHJvamVjdGlvbixzKSxkKHMscyksaT0wO2k8MzsrK2kpbi5leWVQb3NpdGlvbltpXT1zWzEyK2ldL3NbMTVdO3ZhciBsPXNbMTVdO2ZvcihpPTA7aTwzOysraSlsKz10aGlzLmxpZ2h0UG9zaXRpb25baV0qc1s0KmkrM107Zm9yKGk9MDtpPDM7KytpKXt2YXIgYz1zWzEyK2ldO2ZvcihvPTA7bzwzOysrbyljKz1zWzQqbytpXSp0aGlzLmxpZ2h0UG9zaXRpb25bb107bi5saWdodFBvc2l0aW9uW2ldPWMvbH12YXIgdT1PKG4sdGhpcyk7aWYodS5zaG93U3VyZmFjZSYmZT09PXRoaXMub3BhY2l0eTwxKXtmb3IodGhpcy5fc2hhZGVyLmJpbmQoKSx0aGlzLl9zaGFkZXIudW5pZm9ybXM9bix0aGlzLl92YW8uYmluZCgpLHRoaXMuc2hvd1N1cmZhY2UmJnRoaXMuX3ZlcnRleENvdW50JiZ0aGlzLl92YW8uZHJhdyhyLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCksaT0wO2k8MzsrK2kpdGhpcy5zdXJmYWNlUHJvamVjdFtpXSYmdGhpcy52ZXJ0ZXhDb3VudCYmKHRoaXMuX3NoYWRlci51bmlmb3Jtcy5tb2RlbD11LnByb2plY3Rpb25zW2ldLHRoaXMuX3NoYWRlci51bmlmb3Jtcy5jbGlwQm91bmRzPXUuY2xpcEJvdW5kc1tpXSx0aGlzLl92YW8uZHJhdyhyLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCkpO3RoaXMuX3Zhby51bmJpbmQoKX1pZih1LnNob3dDb250b3VyJiYhZSl7dmFyIGg9dGhpcy5fY29udG91clNoYWRlcjtuLmthbWJpZW50PTEsbi5rZGlmZnVzZT0wLG4ua3NwZWN1bGFyPTAsbi5vcGFjaXR5PTEsaC5iaW5kKCksaC51bmlmb3Jtcz1uO3ZhciBmPXRoaXMuX2NvbnRvdXJWQU87Zm9yKGYuYmluZCgpLGk9MDtpPDM7KytpKWZvcihoLnVuaWZvcm1zLnBlcm11dGF0aW9uPVRbaV0sci5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbaV0qdGhpcy5waXhlbFJhdGlvKSxvPTA7bzx0aGlzLmNvbnRvdXJMZXZlbHNbaV0ubGVuZ3RoOysrbylvPT09dGhpcy5oaWdobGlnaHRMZXZlbFtpXT8oaC51bmlmb3Jtcy5jb250b3VyQ29sb3I9dGhpcy5oaWdobGlnaHRDb2xvcltpXSxoLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuaGlnaGxpZ2h0VGludFtpXSk6MCE9PW8mJm8tMSE9PXRoaXMuaGlnaGxpZ2h0TGV2ZWxbaV18fChoLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmNvbnRvdXJDb2xvcltpXSxoLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuY29udG91clRpbnRbaV0pLHRoaXMuX2NvbnRvdXJDb3VudHNbaV1bb10mJihoLnVuaWZvcm1zLmhlaWdodD10aGlzLmNvbnRvdXJMZXZlbHNbaV1bb10sZi5kcmF3KHIuTElORVMsdGhpcy5fY29udG91ckNvdW50c1tpXVtvXSx0aGlzLl9jb250b3VyT2Zmc2V0c1tpXVtvXSkpO2ZvcihpPTA7aTwzOysraSlmb3IoaC51bmlmb3Jtcy5tb2RlbD11LnByb2plY3Rpb25zW2ldLGgudW5pZm9ybXMuY2xpcEJvdW5kcz11LmNsaXBCb3VuZHNbaV0sbz0wO288MzsrK28paWYodGhpcy5jb250b3VyUHJvamVjdFtpXVtvXSl7aC51bmlmb3Jtcy5wZXJtdXRhdGlvbj1UW29dLHIubGluZVdpZHRoKHRoaXMuY29udG91cldpZHRoW29dKnRoaXMucGl4ZWxSYXRpbyk7Zm9yKHZhciBnPTA7Zzx0aGlzLmNvbnRvdXJMZXZlbHNbb10ubGVuZ3RoOysrZylnPT09dGhpcy5oaWdobGlnaHRMZXZlbFtvXT8oaC51bmlmb3Jtcy5jb250b3VyQ29sb3I9dGhpcy5oaWdobGlnaHRDb2xvcltvXSxoLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuaGlnaGxpZ2h0VGludFtvXSk6MCE9PWcmJmctMSE9PXRoaXMuaGlnaGxpZ2h0TGV2ZWxbb118fChoLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmNvbnRvdXJDb2xvcltvXSxoLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuY29udG91clRpbnRbb10pLHRoaXMuX2NvbnRvdXJDb3VudHNbb11bZ10mJihoLnVuaWZvcm1zLmhlaWdodD10aGlzLmNvbnRvdXJMZXZlbHNbb11bZ10sZi5kcmF3KHIuTElORVMsdGhpcy5fY29udG91ckNvdW50c1tvXVtnXSx0aGlzLl9jb250b3VyT2Zmc2V0c1tvXVtnXSkpfWZvcihmLnVuYmluZCgpLChmPXRoaXMuX2R5bmFtaWNWQU8pLmJpbmQoKSxpPTA7aTwzOysraSlpZigwIT09dGhpcy5fZHluYW1pY0NvdW50c1tpXSlmb3IoaC51bmlmb3Jtcy5tb2RlbD1uLm1vZGVsLGgudW5pZm9ybXMuY2xpcEJvdW5kcz1uLmNsaXBCb3VuZHMsaC51bmlmb3Jtcy5wZXJtdXRhdGlvbj1UW2ldLHIubGluZVdpZHRoKHRoaXMuZHluYW1pY1dpZHRoW2ldKnRoaXMucGl4ZWxSYXRpbyksaC51bmlmb3Jtcy5jb250b3VyQ29sb3I9dGhpcy5keW5hbWljQ29sb3JbaV0saC51bmlmb3Jtcy5jb250b3VyVGludD10aGlzLmR5bmFtaWNUaW50W2ldLGgudW5pZm9ybXMuaGVpZ2h0PXRoaXMuZHluYW1pY0xldmVsW2ldLGYuZHJhdyhyLkxJTkVTLHRoaXMuX2R5bmFtaWNDb3VudHNbaV0sdGhpcy5fZHluYW1pY09mZnNldHNbaV0pLG89MDtvPDM7KytvKXRoaXMuY29udG91clByb2plY3Rbb11baV0mJihoLnVuaWZvcm1zLm1vZGVsPXUucHJvamVjdGlvbnNbb10saC51bmlmb3Jtcy5jbGlwQm91bmRzPXUuY2xpcEJvdW5kc1tvXSxmLmRyYXcoci5MSU5FUyx0aGlzLl9keW5hbWljQ291bnRzW2ldLHRoaXMuX2R5bmFtaWNPZmZzZXRzW2ldKSk7Zi51bmJpbmQoKX19Qy5kcmF3PWZ1bmN0aW9uKHQpe3JldHVybiBSLmNhbGwodGhpcyx0LCExKX0sQy5kcmF3VHJhbnNwYXJlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIFIuY2FsbCh0aGlzLHQsITApfTt2YXIgRj17bW9kZWw6ayx2aWV3OmsscHJvamVjdGlvbjprLGludmVyc2VNb2RlbDprLGNsaXBCb3VuZHM6W1swLDAsMF0sWzAsMCwwXV0saGVpZ2h0OjAsc2hhcGU6WzAsMF0scGlja0lkOjAsbG93ZXJCb3VuZDpbMCwwLDBdLHVwcGVyQm91bmQ6WzAsMCwwXSx6T2Zmc2V0OjAsb2JqZWN0T2Zmc2V0OlswLDAsMF0scGVybXV0YXRpb246WzEsMCwwLDAsMSwwLDAsMCwxXSxsaWdodFBvc2l0aW9uOlswLDAsMF0sZXllUG9zaXRpb246WzAsMCwwXX07ZnVuY3Rpb24gQih0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP1tlKHRbMF0pLGUodFsxXSksZSh0WzJdKV06W2UodCksZSh0KSxlKHQpXX1mdW5jdGlvbiBOKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpPzM9PT10Lmxlbmd0aD9bdFswXSx0WzFdLHRbMl0sMV06W3RbMF0sdFsxXSx0WzJdLHRbM11dOlswLDAsMCwxXX1mdW5jdGlvbiBqKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuW04odFswXSksTih0WzFdKSxOKHRbMl0pXTt2YXIgZT1OKHQpO3JldHVybltlLnNsaWNlKCksZS5zbGljZSgpLGUuc2xpY2UoKV19fUMuZHJhd1BpY2s9ZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZT10aGlzLmdsO2UuZGlzYWJsZShlLkNVTExfRkFDRSk7dmFyIHI9RjtyLm1vZGVsPXQubW9kZWx8fGssci52aWV3PXQudmlld3x8ayxyLnByb2plY3Rpb249dC5wcm9qZWN0aW9ufHxrLHIuc2hhcGU9dGhpcy5fZmllbGRbMl0uc2hhcGUsci5waWNrSWQ9dGhpcy5waWNrSWQvMjU1LHIubG93ZXJCb3VuZD10aGlzLmJvdW5kc1swXSxyLnVwcGVyQm91bmQ9dGhpcy5ib3VuZHNbMV0sci5vYmplY3RPZmZzZXQ9dGhpcy5vYmplY3RPZmZzZXQsci5wZXJtdXRhdGlvbj1QO2Zvcih2YXIgbj0wO248MjsrK24pZm9yKHZhciBpPXIuY2xpcEJvdW5kc1tuXSxhPTA7YTwzOysrYSlpW2FdPU1hdGgubWluKE1hdGgubWF4KHRoaXMuY2xpcEJvdW5kc1tuXVthXSwtMWU4KSwxZTgpO3ZhciBvPU8ocix0aGlzKTtpZihvLnNob3dTdXJmYWNlKXtmb3IodGhpcy5fcGlja1NoYWRlci5iaW5kKCksdGhpcy5fcGlja1NoYWRlci51bmlmb3Jtcz1yLHRoaXMuX3Zhby5iaW5kKCksdGhpcy5fdmFvLmRyYXcoZS5UUklBTkdMRVMsdGhpcy5fdmVydGV4Q291bnQpLG49MDtuPDM7KytuKXRoaXMuc3VyZmFjZVByb2plY3Rbbl0mJih0aGlzLl9waWNrU2hhZGVyLnVuaWZvcm1zLm1vZGVsPW8ucHJvamVjdGlvbnNbbl0sdGhpcy5fcGlja1NoYWRlci51bmlmb3Jtcy5jbGlwQm91bmRzPW8uY2xpcEJvdW5kc1tuXSx0aGlzLl92YW8uZHJhdyhlLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCkpO3RoaXMuX3Zhby51bmJpbmQoKX1pZihvLnNob3dDb250b3VyKXt2YXIgcz10aGlzLl9jb250b3VyUGlja1NoYWRlcjtzLmJpbmQoKSxzLnVuaWZvcm1zPXI7dmFyIGw9dGhpcy5fY29udG91clZBTztmb3IobC5iaW5kKCksYT0wO2E8MzsrK2EpZm9yKGUubGluZVdpZHRoKHRoaXMuY29udG91cldpZHRoW2FdKnRoaXMucGl4ZWxSYXRpbykscy51bmlmb3Jtcy5wZXJtdXRhdGlvbj1UW2FdLG49MDtuPHRoaXMuY29udG91ckxldmVsc1thXS5sZW5ndGg7KytuKXRoaXMuX2NvbnRvdXJDb3VudHNbYV1bbl0mJihzLnVuaWZvcm1zLmhlaWdodD10aGlzLmNvbnRvdXJMZXZlbHNbYV1bbl0sbC5kcmF3KGUuTElORVMsdGhpcy5fY29udG91ckNvdW50c1thXVtuXSx0aGlzLl9jb250b3VyT2Zmc2V0c1thXVtuXSkpO2ZvcihuPTA7bjwzOysrbilmb3Iocy51bmlmb3Jtcy5tb2RlbD1vLnByb2plY3Rpb25zW25dLHMudW5pZm9ybXMuY2xpcEJvdW5kcz1vLmNsaXBCb3VuZHNbbl0sYT0wO2E8MzsrK2EpaWYodGhpcy5jb250b3VyUHJvamVjdFtuXVthXSl7cy51bmlmb3Jtcy5wZXJtdXRhdGlvbj1UW2FdLGUubGluZVdpZHRoKHRoaXMuY29udG91cldpZHRoW2FdKnRoaXMucGl4ZWxSYXRpbyk7Zm9yKHZhciBjPTA7Yzx0aGlzLmNvbnRvdXJMZXZlbHNbYV0ubGVuZ3RoOysrYyl0aGlzLl9jb250b3VyQ291bnRzW2FdW2NdJiYocy51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5jb250b3VyTGV2ZWxzW2FdW2NdLGwuZHJhdyhlLkxJTkVTLHRoaXMuX2NvbnRvdXJDb3VudHNbYV1bY10sdGhpcy5fY29udG91ck9mZnNldHNbYV1bY10pKX1sLnVuYmluZCgpfX0sQy5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDt2YXIgZT10aGlzLl9maWVsZFsyXS5zaGFwZSxyPXRoaXMuX3BpY2tSZXN1bHQsbj1lWzBdKih0LnZhbHVlWzBdKyh0LnZhbHVlWzJdPj40KS8xNikvMjU1LGk9TWF0aC5mbG9vcihuKSxhPW4taSxvPWVbMV0qKHQudmFsdWVbMV0rKDE1JnQudmFsdWVbMl0pLzE2KS8yNTUscz1NYXRoLmZsb29yKG8pLGw9by1zO2krPTEscys9MTt2YXIgYz1yLnBvc2l0aW9uO2NbMF09Y1sxXT1jWzJdPTA7Zm9yKHZhciB1PTA7dTwyOysrdSlmb3IodmFyIGg9dT9hOjEtYSxmPTA7ZjwyOysrZilmb3IodmFyIHA9aSt1LGQ9cytmLHY9aCooZj9sOjEtbCksbT0wO208MzsrK20pY1ttXSs9dGhpcy5fZmllbGRbbV0uZ2V0KHAsZCkqdjtmb3IodmFyIHk9dGhpcy5fcGlja1Jlc3VsdC5sZXZlbCx4PTA7eDwzOysreClpZih5W3hdPWcubGUodGhpcy5jb250b3VyTGV2ZWxzW3hdLGNbeF0pLHlbeF08MCl0aGlzLmNvbnRvdXJMZXZlbHNbeF0ubGVuZ3RoPjAmJih5W3hdPTApO2Vsc2UgaWYoeVt4XTx0aGlzLmNvbnRvdXJMZXZlbHNbeF0ubGVuZ3RoLTEpe3ZhciBiPXRoaXMuY29udG91ckxldmVsc1t4XVt5W3hdXSxfPXRoaXMuY29udG91ckxldmVsc1t4XVt5W3hdKzFdO01hdGguYWJzKGItY1t4XSk+TWF0aC5hYnMoXy1jW3hdKSYmKHlbeF0rPTEpfWZvcihyLmluZGV4WzBdPWE8LjU/aTppKzEsci5pbmRleFsxXT1sPC41P3M6cysxLHIudXZbMF09bi9lWzBdLHIudXZbMV09by9lWzFdLG09MDttPDM7KyttKXIuZGF0YUNvb3JkaW5hdGVbbV09dGhpcy5fZmllbGRbbV0uZ2V0KHIuaW5kZXhbMF0sci5pbmRleFsxXSk7cmV0dXJuIHJ9LEMucGFkRmllbGQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnNoYXBlLnNsaWNlKCksbj10LnNoYXBlLnNsaWNlKCk7Yy5hc3NpZ24odC5sbygxLDEpLmhpKHJbMF0sclsxXSksZSksYy5hc3NpZ24odC5sbygxKS5oaShyWzBdLDEpLGUuaGkoclswXSwxKSksYy5hc3NpZ24odC5sbygxLG5bMV0tMSkuaGkoclswXSwxKSxlLmxvKDAsclsxXS0xKS5oaShyWzBdLDEpKSxjLmFzc2lnbih0LmxvKDAsMSkuaGkoMSxyWzFdKSxlLmhpKDEpKSxjLmFzc2lnbih0LmxvKG5bMF0tMSwxKS5oaSgxLHJbMV0pLGUubG8oclswXS0xKSksdC5zZXQoMCwwLGUuZ2V0KDAsMCkpLHQuc2V0KDAsblsxXS0xLGUuZ2V0KDAsclsxXS0xKSksdC5zZXQoblswXS0xLDAsZS5nZXQoclswXS0xLDApKSx0LnNldChuWzBdLTEsblsxXS0xLGUuZ2V0KHJbMF0tMSxyWzFdLTEpKX0sQy51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fSx0aGlzLm9iamVjdE9mZnNldD10Lm9iamVjdE9mZnNldHx8dGhpcy5vYmplY3RPZmZzZXQsdGhpcy5kaXJ0eT0hMCxcImNvbnRvdXJXaWR0aFwiaW4gdCYmKHRoaXMuY29udG91cldpZHRoPUIodC5jb250b3VyV2lkdGgsTnVtYmVyKSksXCJzaG93Q29udG91clwiaW4gdCYmKHRoaXMuc2hvd0NvbnRvdXI9Qih0LnNob3dDb250b3VyLEJvb2xlYW4pKSxcInNob3dTdXJmYWNlXCJpbiB0JiYodGhpcy5zaG93U3VyZmFjZT0hIXQuc2hvd1N1cmZhY2UpLFwiY29udG91clRpbnRcImluIHQmJih0aGlzLmNvbnRvdXJUaW50PUIodC5jb250b3VyVGludCxCb29sZWFuKSksXCJjb250b3VyQ29sb3JcImluIHQmJih0aGlzLmNvbnRvdXJDb2xvcj1qKHQuY29udG91ckNvbG9yKSksXCJjb250b3VyUHJvamVjdFwiaW4gdCYmKHRoaXMuY29udG91clByb2plY3Q9Qih0LmNvbnRvdXJQcm9qZWN0LGZ1bmN0aW9uKHQpe3JldHVybiBCKHQsQm9vbGVhbil9KSksXCJzdXJmYWNlUHJvamVjdFwiaW4gdCYmKHRoaXMuc3VyZmFjZVByb2plY3Q9dC5zdXJmYWNlUHJvamVjdCksXCJkeW5hbWljQ29sb3JcImluIHQmJih0aGlzLmR5bmFtaWNDb2xvcj1qKHQuZHluYW1pY0NvbG9yKSksXCJkeW5hbWljVGludFwiaW4gdCYmKHRoaXMuZHluYW1pY1RpbnQ9Qih0LmR5bmFtaWNUaW50LE51bWJlcikpLFwiZHluYW1pY1dpZHRoXCJpbiB0JiYodGhpcy5keW5hbWljV2lkdGg9Qih0LmR5bmFtaWNXaWR0aCxOdW1iZXIpKSxcIm9wYWNpdHlcImluIHQmJih0aGlzLm9wYWNpdHk9dC5vcGFjaXR5KSxcImNvbG9yQm91bmRzXCJpbiB0JiYodGhpcy5jb2xvckJvdW5kcz10LmNvbG9yQm91bmRzKSxcInZlcnRleENvbG9yXCJpbiB0JiYodGhpcy52ZXJ0ZXhDb2xvcj10LnZlcnRleENvbG9yPzE6MCk7dmFyIGU9dC5maWVsZHx8dC5jb29yZHMmJnQuY29vcmRzWzJdfHxudWxsLHI9ITE7aWYoZXx8KGU9dGhpcy5fZmllbGRbMl0uc2hhcGVbMF18fHRoaXMuX2ZpZWxkWzJdLnNoYXBlWzJdP3RoaXMuX2ZpZWxkWzJdLmxvKDEsMSkuaGkodGhpcy5fZmllbGRbMl0uc2hhcGVbMF0tMix0aGlzLl9maWVsZFsyXS5zaGFwZVsxXS0yKTp0aGlzLl9maWVsZFsyXS5oaSgwLDApKSxcImZpZWxkXCJpbiB0fHxcImNvb3Jkc1wiaW4gdCl7dmFyIGk9KGUuc2hhcGVbMF0rMikqKGUuc2hhcGVbMV0rMik7aT50aGlzLl9maWVsZFsyXS5kYXRhLmxlbmd0aCYmKHMuZnJlZUZsb2F0KHRoaXMuX2ZpZWxkWzJdLmRhdGEpLHRoaXMuX2ZpZWxkWzJdLmRhdGE9cy5tYWxsb2NGbG9hdChuLm5leHRQb3cyKGkpKSksdGhpcy5fZmllbGRbMl09aCh0aGlzLl9maWVsZFsyXS5kYXRhLFtlLnNoYXBlWzBdKzIsZS5zaGFwZVsxXSsyXSksdGhpcy5wYWRGaWVsZCh0aGlzLl9maWVsZFsyXSxlKSx0aGlzLnNoYXBlPWUuc2hhcGUuc2xpY2UoKTtmb3IodmFyIGE9dGhpcy5zaGFwZSxvPTA7bzwyOysrbyl0aGlzLl9maWVsZFsyXS5zaXplPnRoaXMuX2ZpZWxkW29dLmRhdGEubGVuZ3RoJiYocy5mcmVlRmxvYXQodGhpcy5fZmllbGRbb10uZGF0YSksdGhpcy5fZmllbGRbb10uZGF0YT1zLm1hbGxvY0Zsb2F0KHRoaXMuX2ZpZWxkWzJdLnNpemUpKSx0aGlzLl9maWVsZFtvXT1oKHRoaXMuX2ZpZWxkW29dLmRhdGEsW2FbMF0rMixhWzFdKzJdKTtpZih0LmNvb3Jkcyl7dmFyIHA9dC5jb29yZHM7aWYoIUFycmF5LmlzQXJyYXkocCl8fDMhPT1wLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJnbC1zdXJmYWNlOiBpbnZhbGlkIGNvb3JkaW5hdGVzIGZvciB4L3lcIik7Zm9yKG89MDtvPDI7KytvKXt2YXIgZD1wW29dO2ZvcihiPTA7YjwyOysrYilpZihkLnNoYXBlW2JdIT09YVtiXSl0aHJvdyBuZXcgRXJyb3IoXCJnbC1zdXJmYWNlOiBjb29yZHMgaGF2ZSBpbmNvcnJlY3Qgc2hhcGVcIik7dGhpcy5wYWRGaWVsZCh0aGlzLl9maWVsZFtvXSxkKX19ZWxzZSBpZih0LnRpY2tzKXt2YXIgZz10LnRpY2tzO2lmKCFBcnJheS5pc0FycmF5KGcpfHwyIT09Zy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiZ2wtc3VyZmFjZTogaW52YWxpZCB0aWNrc1wiKTtmb3Iobz0wO288MjsrK28pe3ZhciBtPWdbb107aWYoKEFycmF5LmlzQXJyYXkobSl8fG0ubGVuZ3RoKSYmKG09aChtKSksbS5zaGFwZVswXSE9PWFbb10pdGhyb3cgbmV3IEVycm9yKFwiZ2wtc3VyZmFjZTogaW52YWxpZCB0aWNrIGxlbmd0aFwiKTt2YXIgeT1oKG0uZGF0YSxhKTt5LnN0cmlkZVtvXT1tLnN0cmlkZVswXSx5LnN0cmlkZVsxXm9dPTAsdGhpcy5wYWRGaWVsZCh0aGlzLl9maWVsZFtvXSx5KX19ZWxzZXtmb3Iobz0wO288MjsrK28pe3ZhciB4PVswLDBdO3hbb109MSx0aGlzLl9maWVsZFtvXT1oKHRoaXMuX2ZpZWxkW29dLmRhdGEsW2FbMF0rMixhWzFdKzJdLHgsMCl9dGhpcy5fZmllbGRbMF0uc2V0KDAsMCwwKTtmb3IodmFyIGI9MDtiPGFbMF07KytiKXRoaXMuX2ZpZWxkWzBdLnNldChiKzEsMCxiKTtmb3IodGhpcy5fZmllbGRbMF0uc2V0KGFbMF0rMSwwLGFbMF0tMSksdGhpcy5fZmllbGRbMV0uc2V0KDAsMCwwKSxiPTA7YjxhWzFdOysrYil0aGlzLl9maWVsZFsxXS5zZXQoMCxiKzEsYik7dGhpcy5fZmllbGRbMV0uc2V0KDAsYVsxXSsxLGFbMV0tMSl9dmFyIF89dGhpcy5fZmllbGQsdz1oKHMubWFsbG9jRmxvYXQoMypfWzJdLnNpemUqMiksWzMsYVswXSsyLGFbMV0rMiwyXSk7Zm9yKG89MDtvPDM7KytvKXYody5waWNrKG8pLF9bb10sXCJtaXJyb3JcIik7dmFyIGs9aChzLm1hbGxvY0Zsb2F0KDMqX1syXS5zaXplKSxbYVswXSsyLGFbMV0rMiwzXSk7Zm9yKG89MDtvPGFbMF0rMjsrK28pZm9yKGI9MDtiPGFbMV0rMjsrK2Ipe3ZhciBUPXcuZ2V0KDAsbyxiLDApLE09dy5nZXQoMCxvLGIsMSksRT13LmdldCgxLG8sYiwwKSxDPXcuZ2V0KDEsbyxiLDEpLEw9dy5nZXQoMixvLGIsMCksej13LmdldCgyLG8sYiwxKSxPPUUqei1DKkwsST1MKk0teipULEQ9VCpDLU0qRSxQPU1hdGguc3FydChPKk8rSSpJK0QqRCk7UDwxZS04PyhQPU1hdGgubWF4KE1hdGguYWJzKE8pLE1hdGguYWJzKEkpLE1hdGguYWJzKEQpKSk8MWUtOD8oRD0xLEk9Tz0wLFA9MSk6UD0xL1A6UD0xL01hdGguc3FydChQKSxrLnNldChvLGIsMCxPKlApLGsuc2V0KG8sYiwxLEkqUCksay5zZXQobyxiLDIsRCpQKX1zLmZyZWUody5kYXRhKTt2YXIgUj1bMS8wLDEvMCwxLzBdLEY9Wy0xLzAsLTEvMCwtMS8wXSxOPTEvMCxWPS0xLzAsVT0oYVswXS0xKSooYVsxXS0xKSo2LHE9cy5tYWxsb2NGbG9hdChuLm5leHRQb3cyKDEwKlUpKSxIPTAsRz0wO2ZvcihvPTA7bzxhWzBdLTE7KytvKXQ6Zm9yKGI9MDtiPGFbMV0tMTsrK2Ipe2Zvcih2YXIgWT0wO1k8MjsrK1kpZm9yKHZhciBXPTA7VzwyOysrVylmb3IodmFyIFg9MDtYPDM7KytYKXt2YXIgWj10aGlzLl9maWVsZFtYXS5nZXQoMStvK1ksMStiK1cpO2lmKGlzTmFOKFopfHwhaXNGaW5pdGUoWikpY29udGludWUgdH1mb3IoWD0wO1g8NjsrK1gpe3ZhciAkPW8rQVtYXVswXSxKPWIrQVtYXVsxXSxLPXRoaXMuX2ZpZWxkWzBdLmdldCgkKzEsSisxKSxRPXRoaXMuX2ZpZWxkWzFdLmdldCgkKzEsSisxKTtaPXRoaXMuX2ZpZWxkWzJdLmdldCgkKzEsSisxKSxPPWsuZ2V0KCQrMSxKKzEsMCksST1rLmdldCgkKzEsSisxLDEpLEQ9ay5nZXQoJCsxLEorMSwyKSx0LmludGVuc2l0eSYmKHR0PXQuaW50ZW5zaXR5LmdldCgkLEopKTt2YXIgdHQ9dC5pbnRlbnNpdHk/dC5pbnRlbnNpdHkuZ2V0KCQsSik6Wit0aGlzLm9iamVjdE9mZnNldFsyXTtxW0grK109JCxxW0grK109SixxW0grK109SyxxW0grK109USxxW0grK109WixxW0grK109MCxxW0grK109dHQscVtIKytdPU8scVtIKytdPUkscVtIKytdPUQsUlswXT1NYXRoLm1pbihSWzBdLEsrdGhpcy5vYmplY3RPZmZzZXRbMF0pLFJbMV09TWF0aC5taW4oUlsxXSxRK3RoaXMub2JqZWN0T2Zmc2V0WzFdKSxSWzJdPU1hdGgubWluKFJbMl0sWit0aGlzLm9iamVjdE9mZnNldFsyXSksTj1NYXRoLm1pbihOLHR0KSxGWzBdPU1hdGgubWF4KEZbMF0sSyt0aGlzLm9iamVjdE9mZnNldFswXSksRlsxXT1NYXRoLm1heChGWzFdLFErdGhpcy5vYmplY3RPZmZzZXRbMV0pLEZbMl09TWF0aC5tYXgoRlsyXSxaK3RoaXMub2JqZWN0T2Zmc2V0WzJdKSxWPU1hdGgubWF4KFYsdHQpLEcrPTF9fWZvcih0LmludGVuc2l0eUJvdW5kcyYmKE49K3QuaW50ZW5zaXR5Qm91bmRzWzBdLFY9K3QuaW50ZW5zaXR5Qm91bmRzWzFdKSxvPTY7bzxIO28rPTEwKXFbb109KHFbb10tTikvKFYtTik7dGhpcy5fdmVydGV4Q291bnQ9Ryx0aGlzLl9jb29yZGluYXRlQnVmZmVyLnVwZGF0ZShxLnN1YmFycmF5KDAsSCkpLHMuZnJlZUZsb2F0KHEpLHMuZnJlZShrLmRhdGEpLHRoaXMuYm91bmRzPVtSLEZdLHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5fHx0aGlzLl9maWVsZFsyXSx0aGlzLmludGVuc2l0eUJvdW5kc1swXT09PU4mJnRoaXMuaW50ZW5zaXR5Qm91bmRzWzFdPT09Vnx8KHI9ITApLHRoaXMuaW50ZW5zaXR5Qm91bmRzPVtOLFZdfWlmKFwibGV2ZWxzXCJpbiB0KXt2YXIgZXQ9dC5sZXZlbHM7Zm9yKGV0PUFycmF5LmlzQXJyYXkoZXRbMF0pP2V0LnNsaWNlKCk6W1tdLFtdLGV0XSxvPTA7bzwzOysrbylldFtvXT1ldFtvXS5zbGljZSgpLGV0W29dLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSk7Zm9yKG89MDtvPDM7KytvKWZvcihiPTA7YjxldFtvXS5sZW5ndGg7KytiKWV0W29dW2JdLT10aGlzLm9iamVjdE9mZnNldFtvXTt0OmZvcihvPTA7bzwzOysrbyl7aWYoZXRbb10ubGVuZ3RoIT09dGhpcy5jb250b3VyTGV2ZWxzW29dLmxlbmd0aCl7cj0hMDticmVha31mb3IoYj0wO2I8ZXRbb10ubGVuZ3RoOysrYilpZihldFtvXVtiXSE9PXRoaXMuY29udG91ckxldmVsc1tvXVtiXSl7cj0hMDticmVhayB0fX10aGlzLmNvbnRvdXJMZXZlbHM9ZXR9aWYocil7Xz10aGlzLl9maWVsZCxhPXRoaXMuc2hhcGU7Zm9yKHZhciBydD1bXSxudD0wO250PDM7KytudCl7dmFyIGl0PXRoaXMuY29udG91ckxldmVsc1tudF0sYXQ9W10sb3Q9W10sc3Q9WzAsMCwwXTtmb3Iobz0wO288aXQubGVuZ3RoOysrbyl7dmFyIGx0PWYodGhpcy5fZmllbGRbbnRdLGl0W29dKTthdC5wdXNoKHJ0Lmxlbmd0aC81fDApLEc9MDt0OmZvcihiPTA7YjxsdC5jZWxscy5sZW5ndGg7KytiKXt2YXIgY3Q9bHQuY2VsbHNbYl07Zm9yKFg9MDtYPDI7KytYKXt2YXIgdXQ9bHQucG9zaXRpb25zW2N0W1hdXSxodD11dFswXSxmdD0wfE1hdGguZmxvb3IoaHQpLHB0PWh0LWZ0LGR0PXV0WzFdLGd0PTB8TWF0aC5mbG9vcihkdCksdnQ9ZHQtZ3QsbXQ9ITE7ZTpmb3IodmFyIHl0PTA7eXQ8MzsrK3l0KXtzdFt5dF09MDt2YXIgeHQ9KG50K3l0KzEpJTM7Zm9yKFk9MDtZPDI7KytZKXt2YXIgYnQ9WT9wdDoxLXB0O2ZvcigkPTB8TWF0aC5taW4oTWF0aC5tYXgoZnQrWSwwKSxhWzBdKSxXPTA7VzwyOysrVyl7dmFyIF90PVc/dnQ6MS12dDtpZihKPTB8TWF0aC5taW4oTWF0aC5tYXgoZ3QrVywwKSxhWzFdKSxaPXl0PDI/dGhpcy5fZmllbGRbeHRdLmdldCgkLEopOih0aGlzLmludGVuc2l0eS5nZXQoJCxKKS10aGlzLmludGVuc2l0eUJvdW5kc1swXSkvKHRoaXMuaW50ZW5zaXR5Qm91bmRzWzFdLXRoaXMuaW50ZW5zaXR5Qm91bmRzWzBdKSwhaXNGaW5pdGUoWil8fGlzTmFOKFopKXttdD0hMDticmVhayBlfXZhciB3dD1idCpfdDtzdFt5dF0rPXd0Klp9fX1pZihtdCl7aWYoWD4wKXtmb3IodmFyIGt0PTA7a3Q8NTsrK2t0KXJ0LnBvcCgpO0ctPTF9Y29udGludWUgdH1ydC5wdXNoKHN0WzBdLHN0WzFdLHV0WzBdLHV0WzFdLHN0WzJdKSxHKz0xfX1vdC5wdXNoKEcpfXRoaXMuX2NvbnRvdXJPZmZzZXRzW250XT1hdCx0aGlzLl9jb250b3VyQ291bnRzW250XT1vdH12YXIgQXQ9cy5tYWxsb2NGbG9hdChydC5sZW5ndGgpO2ZvcihvPTA7bzxydC5sZW5ndGg7KytvKUF0W29dPXJ0W29dO3RoaXMuX2NvbnRvdXJCdWZmZXIudXBkYXRlKEF0KSxzLmZyZWVGbG9hdChBdCl9dC5jb2xvcm1hcCYmdGhpcy5fY29sb3JNYXAuc2V0UGl4ZWxzKGZ1bmN0aW9uKHQpe3ZhciBlPXUoW2woe2NvbG9ybWFwOnQsbnNoYWRlczpTLGZvcm1hdDpcInJnYmFcIn0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm5bdFswXSx0WzFdLHRbMl0sMjU1KnRbM11dfSldKTtyZXR1cm4gYy5kaXZzZXEoZSwyNTUpLGV9KHQuY29sb3JtYXApKX0sQy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLl92YW8uZGlzcG9zZSgpLHRoaXMuX2Nvb3JkaW5hdGVCdWZmZXIuZGlzcG9zZSgpLHRoaXMuX2NvbG9yTWFwLmRpc3Bvc2UoKSx0aGlzLl9jb250b3VyQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLl9jb250b3VyVkFPLmRpc3Bvc2UoKSx0aGlzLl9jb250b3VyU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLl9jb250b3VyUGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5fZHluYW1pY0J1ZmZlci5kaXNwb3NlKCksdGhpcy5fZHluYW1pY1ZBTy5kaXNwb3NlKCk7Zm9yKHZhciB0PTA7dDwzOysrdClzLmZyZWVGbG9hdCh0aGlzLl9maWVsZFt0XS5kYXRhKX0sQy5oaWdobGlnaHQ9ZnVuY3Rpb24odCl7dmFyIGUscjtpZighdClyZXR1cm4gdGhpcy5fZHluYW1pY0NvdW50cz1bMCwwLDBdLHRoaXMuZHlhbmFtaWNMZXZlbD1bTmFOLE5hTixOYU5dLHZvaWQodGhpcy5oaWdobGlnaHRMZXZlbD1bLTEsLTEsLTFdKTtmb3IoZT0wO2U8MzsrK2UpdGhpcy5lbmFibGVIaWdobGlnaHRbZV0/dGhpcy5oaWdobGlnaHRMZXZlbFtlXT10LmxldmVsW2VdOnRoaXMuaGlnaGxpZ2h0TGV2ZWxbZV09LTE7Zm9yKHI9dGhpcy5zbmFwVG9EYXRhP3QuZGF0YUNvb3JkaW5hdGU6dC5wb3NpdGlvbixlPTA7ZTwzOysrZSlyW2VdLT10aGlzLm9iamVjdE9mZnNldFtlXTtpZih0aGlzLmVuYWJsZUR5bmFtaWNbMF0mJnJbMF0hPT10aGlzLmR5bmFtaWNMZXZlbFswXXx8dGhpcy5lbmFibGVEeW5hbWljWzFdJiZyWzFdIT09dGhpcy5keW5hbWljTGV2ZWxbMV18fHRoaXMuZW5hYmxlRHluYW1pY1syXSYmclsyXSE9PXRoaXMuZHluYW1pY0xldmVsWzJdKXtmb3IodmFyIG49MCxpPXRoaXMuc2hhcGUsYT1zLm1hbGxvY0Zsb2F0KDEyKmlbMF0qaVsxXSksbz0wO288MzsrK28paWYodGhpcy5lbmFibGVEeW5hbWljW29dKXt0aGlzLmR5bmFtaWNMZXZlbFtvXT1yW29dO3ZhciBsPShvKzEpJTMsYz0obysyKSUzLHU9dGhpcy5fZmllbGRbb10saD10aGlzLl9maWVsZFtsXSxwPXRoaXMuX2ZpZWxkW2NdLGQ9Zih1LHJbb10pLGc9ZC5jZWxscyx2PWQucG9zaXRpb25zO2Zvcih0aGlzLl9keW5hbWljT2Zmc2V0c1tvXT1uLGU9MDtlPGcubGVuZ3RoOysrZSlmb3IodmFyIG09Z1tlXSx5PTA7eTwyOysreSl7dmFyIHg9dlttW3ldXSxiPSt4WzBdLF89MHxiLHc9MHxNYXRoLm1pbihfKzEsaVswXSksaz1iLV8sQT0xLWssVD0reFsxXSxNPTB8VCxTPTB8TWF0aC5taW4oTSsxLGlbMV0pLEU9VC1NLEM9MS1FLEw9QSpDLHo9QSpFLE89aypDLEk9aypFLEQ9TCpoLmdldChfLE0pK3oqaC5nZXQoXyxTKStPKmguZ2V0KHcsTSkrSSpoLmdldCh3LFMpLFA9TCpwLmdldChfLE0pK3oqcC5nZXQoXyxTKStPKnAuZ2V0KHcsTSkrSSpwLmdldCh3LFMpO2lmKGlzTmFOKEQpfHxpc05hTihQKSl7eSYmKG4tPTEpO2JyZWFrfWFbMipuKzBdPUQsYVsyKm4rMV09UCxuKz0xfXRoaXMuX2R5bmFtaWNDb3VudHNbb109bi10aGlzLl9keW5hbWljT2Zmc2V0c1tvXX1lbHNlIHRoaXMuZHluYW1pY0xldmVsW29dPU5hTix0aGlzLl9keW5hbWljQ291bnRzW29dPTA7dGhpcy5fZHluYW1pY0J1ZmZlci51cGRhdGUoYS5zdWJhcnJheSgwLDIqbikpLHMuZnJlZUZsb2F0KGEpfX19LHtcIi4vbGliL3NoYWRlcnNcIjozMTEsXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiOjMxMixcImJpdC10d2lkZGxlXCI6ODMsY29sb3JtYXA6MTE3LFwiZ2wtYnVmZmVyXCI6MjM4LFwiZ2wtbWF0NC9pbnZlcnRcIjoyNjIsXCJnbC1tYXQ0L211bHRpcGx5XCI6MjY0LFwiZ2wtdGV4dHVyZTJkXCI6MzE1LFwiZ2wtdmFvXCI6MzIwLG5kYXJyYXk6NDQzLFwibmRhcnJheS1ncmFkaWVudFwiOjQzNCxcIm5kYXJyYXktb3BzXCI6NDM3LFwibmRhcnJheS1wYWNrXCI6NDM4LFwic3VyZmFjZS1uZXRzXCI6NTE2LFwidHlwZWRhcnJheS1wb29sXCI6NTMwfV0sMzE0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImNzcy1mb250XCIpLGk9dChcInBpY2stYnktYWxpYXNcIiksYT10KFwicmVnbFwiKSxvPXQoXCJnbC11dGlsL2NvbnRleHRcIikscz10KFwiZXM2LXdlYWstbWFwXCIpLGw9dChcImNvbG9yLW5vcm1hbGl6ZVwiKSxjPXQoXCJmb250LWF0bGFzXCIpLHU9dChcInR5cGVkYXJyYXktcG9vbFwiKSxoPXQoXCJwYXJzZS1yZWN0XCIpLGY9dChcImlzLXBsYWluLW9ialwiKSxwPXQoXCJwYXJzZS11bml0XCIpLGQ9dChcInRvLXB4XCIpLGc9dChcImRldGVjdC1rZXJuaW5nXCIpLHY9dChcIm9iamVjdC1hc3NpZ25cIiksbT10KFwiZm9udC1tZWFzdXJlXCIpLHk9dChcImZsYXR0ZW4tdmVydGV4LWRhdGFcIikseD10KFwiYml0LXR3aWRkbGVcIikubmV4dFBvdzIsYj1uZXcgcyxfPSExO2lmKGRvY3VtZW50LmJvZHkpe3ZhciB3PWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSk7dy5zdHlsZS5mb250PVwiaXRhbGljIHNtYWxsLWNhcHMgYm9sZCBjb25kZW5zZWQgMTZweC8yIGN1cnNpdmVcIixnZXRDb21wdXRlZFN0eWxlKHcpLmZvbnRTdHJldGNoJiYoXz0hMCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh3KX12YXIgaz1mdW5jdGlvbih0KXshZnVuY3Rpb24odCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmdC5fZ2wmJnQucHJvcCYmdC50ZXh0dXJlJiZ0LmJ1ZmZlcn0odCk/dGhpcy5nbD1vKHQpOih0PXtyZWdsOnR9LHRoaXMuZ2w9dC5yZWdsLl9nbCksdGhpcy5zaGFkZXI9Yi5nZXQodGhpcy5nbCksdGhpcy5zaGFkZXI/dGhpcy5yZWdsPXRoaXMuc2hhZGVyLnJlZ2w6dGhpcy5yZWdsPXQucmVnbHx8YSh7Z2w6dGhpcy5nbH0pLHRoaXMuY2hhckJ1ZmZlcj10aGlzLnJlZ2wuYnVmZmVyKHt0eXBlOlwidWludDhcIix1c2FnZTpcInN0cmVhbVwifSksdGhpcy5zaXplQnVmZmVyPXRoaXMucmVnbC5idWZmZXIoe3R5cGU6XCJmbG9hdFwiLHVzYWdlOlwic3RyZWFtXCJ9KSx0aGlzLnNoYWRlcnx8KHRoaXMuc2hhZGVyPXRoaXMuY3JlYXRlU2hhZGVyKCksYi5zZXQodGhpcy5nbCx0aGlzLnNoYWRlcikpLHRoaXMuYmF0Y2g9W10sdGhpcy5mb250U2l6ZT1bXSx0aGlzLmZvbnQ9W10sdGhpcy5mb250QXRsYXM9W10sdGhpcy5kcmF3PXRoaXMuc2hhZGVyLmRyYXcuYmluZCh0aGlzKSx0aGlzLnJlbmRlcj1mdW5jdGlvbigpe3RoaXMucmVnbC5fcmVmcmVzaCgpLHRoaXMuZHJhdyh0aGlzLmJhdGNoKX0sdGhpcy5jYW52YXM9dGhpcy5nbC5jYW52YXMsdGhpcy51cGRhdGUoZih0KT90Ont9KX07ay5wcm90b3R5cGUuY3JlYXRlU2hhZGVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZWdsLGU9dCh7YmxlbmQ6e2VuYWJsZTohMCxjb2xvcjpbMCwwLDAsMV0sZnVuYzp7c3JjUkdCOlwic3JjIGFscGhhXCIsZHN0UkdCOlwib25lIG1pbnVzIHNyYyBhbHBoYVwiLHNyY0FscGhhOlwib25lIG1pbnVzIGRzdCBhbHBoYVwiLGRzdEFscGhhOlwib25lXCJ9fSxzdGVuY2lsOntlbmFibGU6ITF9LGRlcHRoOntlbmFibGU6ITF9LGNvdW50OnQucHJvcChcImNvdW50XCIpLG9mZnNldDp0LnByb3AoXCJvZmZzZXRcIiksYXR0cmlidXRlczp7Y2hhck9mZnNldDp7b2Zmc2V0OjQsc3RyaWRlOjgsYnVmZmVyOnQudGhpcyhcInNpemVCdWZmZXJcIil9LHdpZHRoOntvZmZzZXQ6MCxzdHJpZGU6OCxidWZmZXI6dC50aGlzKFwic2l6ZUJ1ZmZlclwiKX0sY2hhcjp0LnRoaXMoXCJjaGFyQnVmZmVyXCIpLHBvc2l0aW9uOnQudGhpcyhcInBvc2l0aW9uXCIpfSx1bmlmb3Jtczp7YXRsYXNTaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuW2UuYXRsYXMud2lkdGgsZS5hdGxhcy5oZWlnaHRdfSxhdGxhc0RpbTpmdW5jdGlvbih0LGUpe3JldHVybltlLmF0bGFzLmNvbHMsZS5hdGxhcy5yb3dzXX0sYXRsYXM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5hdGxhcy50ZXh0dXJlfSxjaGFyU3RlcDpmdW5jdGlvbih0LGUpe3JldHVybiBlLmF0bGFzLnN0ZXB9LGVtOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuYXRsYXMuZW19LGNvbG9yOnQucHJvcChcImNvbG9yXCIpLG9wYWNpdHk6dC5wcm9wKFwib3BhY2l0eVwiKSx2aWV3cG9ydDp0LnRoaXMoXCJ2aWV3cG9ydEFycmF5XCIpLHNjYWxlOnQudGhpcyhcInNjYWxlXCIpLGFsaWduOnQucHJvcChcImFsaWduXCIpLGJhc2VsaW5lOnQucHJvcChcImJhc2VsaW5lXCIpLHRyYW5zbGF0ZTp0LnRoaXMoXCJ0cmFuc2xhdGVcIikscG9zaXRpb25PZmZzZXQ6dC5wcm9wKFwicG9zaXRpb25PZmZzZXRcIil9LHByaW1pdGl2ZTpcInBvaW50c1wiLHZpZXdwb3J0OnQudGhpcyhcInZpZXdwb3J0XCIpLHZlcnQ6XCJcXG5cXHRcXHRcXHRwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuXFx0XFx0XFx0YXR0cmlidXRlIGZsb2F0IHdpZHRoLCBjaGFyT2Zmc2V0LCBjaGFyO1xcblxcdFxcdFxcdGF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xcblxcdFxcdFxcdHVuaWZvcm0gZmxvYXQgZm9udFNpemUsIGNoYXJTdGVwLCBlbSwgYWxpZ24sIGJhc2VsaW5lO1xcblxcdFxcdFxcdHVuaWZvcm0gdmVjNCB2aWV3cG9ydDtcXG5cXHRcXHRcXHR1bmlmb3JtIHZlYzQgY29sb3I7XFxuXFx0XFx0XFx0dW5pZm9ybSB2ZWMyIGF0bGFzU2l6ZSwgYXRsYXNEaW0sIHNjYWxlLCB0cmFuc2xhdGUsIHBvc2l0aW9uT2Zmc2V0O1xcblxcdFxcdFxcdHZhcnlpbmcgdmVjMiBjaGFyQ29vcmQsIGNoYXJJZDtcXG5cXHRcXHRcXHR2YXJ5aW5nIGZsb2F0IGNoYXJXaWR0aDtcXG5cXHRcXHRcXHR2YXJ5aW5nIHZlYzQgZm9udENvbG9yO1xcblxcdFxcdFxcdHZvaWQgbWFpbiAoKSB7XFxuXFx0XFx0XFx0XFx0XCIrKGsubm9ybWFsVmlld3BvcnQ/XCJcIjpcInZlYzIgcG9zaXRpb25PZmZzZXQgPSB2ZWMyKHBvc2l0aW9uT2Zmc2V0LngsLSBwb3NpdGlvbk9mZnNldC55KTtcIikrXCJcXG5cXG5cXHRcXHRcXHRcXHR2ZWMyIG9mZnNldCA9IGZsb29yKGVtICogKHZlYzIoYWxpZ24gKyBjaGFyT2Zmc2V0LCBiYXNlbGluZSlcXG5cXHRcXHRcXHRcXHRcXHQrIHBvc2l0aW9uT2Zmc2V0KSlcXG5cXHRcXHRcXHRcXHRcXHQvICh2aWV3cG9ydC56dyAqIHNjYWxlLnh5KTtcXG5cXG5cXHRcXHRcXHRcXHR2ZWMyIHBvc2l0aW9uID0gKHBvc2l0aW9uICsgdHJhbnNsYXRlKSAqIHNjYWxlO1xcblxcdFxcdFxcdFxcdHBvc2l0aW9uICs9IG9mZnNldCAqIHNjYWxlO1xcblxcblxcdFxcdFxcdFxcdFwiKyhrLm5vcm1hbFZpZXdwb3J0P1wicG9zaXRpb24ueSA9IDEuIC0gcG9zaXRpb24ueTtcIjpcIlwiKStcIlxcblxcblxcdFxcdFxcdFxcdGNoYXJDb29yZCA9IHBvc2l0aW9uICogdmlld3BvcnQuencgKyB2aWV3cG9ydC54eTtcXG5cXG5cXHRcXHRcXHRcXHRnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24gKiAyLiAtIDEuLCAwLCAxKTtcXG5cXG5cXHRcXHRcXHRcXHRnbF9Qb2ludFNpemUgPSBjaGFyU3RlcDtcXG5cXG5cXHRcXHRcXHRcXHRjaGFySWQueCA9IG1vZChjaGFyLCBhdGxhc0RpbS54KTtcXG5cXHRcXHRcXHRcXHRjaGFySWQueSA9IGZsb29yKGNoYXIgLyBhdGxhc0RpbS54KTtcXG5cXG5cXHRcXHRcXHRcXHRjaGFyV2lkdGggPSB3aWR0aCAqIGVtO1xcblxcblxcdFxcdFxcdFxcdGZvbnRDb2xvciA9IGNvbG9yIC8gMjU1LjtcXG5cXHRcXHRcXHR9XCIsZnJhZzpcIlxcblxcdFxcdFxcdHByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXHRcXHRcXHR1bmlmb3JtIHNhbXBsZXIyRCBhdGxhcztcXG5cXHRcXHRcXHR1bmlmb3JtIGZsb2F0IGZvbnRTaXplLCBjaGFyU3RlcCwgb3BhY2l0eTtcXG5cXHRcXHRcXHR1bmlmb3JtIHZlYzIgYXRsYXNTaXplO1xcblxcdFxcdFxcdHVuaWZvcm0gdmVjNCB2aWV3cG9ydDtcXG5cXHRcXHRcXHR2YXJ5aW5nIHZlYzQgZm9udENvbG9yO1xcblxcdFxcdFxcdHZhcnlpbmcgdmVjMiBjaGFyQ29vcmQsIGNoYXJJZDtcXG5cXHRcXHRcXHR2YXJ5aW5nIGZsb2F0IGNoYXJXaWR0aDtcXG5cXG5cXHRcXHRcXHRmbG9hdCBsaWdodG5lc3ModmVjNCBjb2xvcikge1xcblxcdFxcdFxcdFxcdHJldHVybiBjb2xvci5yICogMC4yOTkgKyBjb2xvci5nICogMC41ODcgKyBjb2xvci5iICogMC4xMTQ7XFxuXFx0XFx0XFx0fVxcblxcblxcdFxcdFxcdHZvaWQgbWFpbiAoKSB7XFxuXFx0XFx0XFx0XFx0dmVjMiB1diA9IGdsX0ZyYWdDb29yZC54eSAtIGNoYXJDb29yZCArIGNoYXJTdGVwICogLjU7XFxuXFx0XFx0XFx0XFx0ZmxvYXQgaGFsZkNoYXJTdGVwID0gZmxvb3IoY2hhclN0ZXAgKiAuNSArIC41KTtcXG5cXG5cXHRcXHRcXHRcXHQvLyBpbnZlcnQgeSBhbmQgc2hpZnQgYnkgMXB4IChGRiBleHBlY2lhbGx5IG5lZWRzIHRoYXQpXFxuXFx0XFx0XFx0XFx0dXYueSA9IGNoYXJTdGVwIC0gdXYueTtcXG5cXG5cXHRcXHRcXHRcXHQvLyBpZ25vcmUgcG9pbnRzIG91dHNpZGUgb2YgY2hhcmFjdGVyIGJvdW5kaW5nIGJveFxcblxcdFxcdFxcdFxcdGZsb2F0IGhhbGZDaGFyV2lkdGggPSBjZWlsKGNoYXJXaWR0aCAqIC41KTtcXG5cXHRcXHRcXHRcXHRpZiAoZmxvb3IodXYueCkgPiBoYWxmQ2hhclN0ZXAgKyBoYWxmQ2hhcldpZHRoIHx8XFxuXFx0XFx0XFx0XFx0XFx0Zmxvb3IodXYueCkgPCBoYWxmQ2hhclN0ZXAgLSBoYWxmQ2hhcldpZHRoKSByZXR1cm47XFxuXFxuXFx0XFx0XFx0XFx0dXYgKz0gY2hhcklkICogY2hhclN0ZXA7XFxuXFx0XFx0XFx0XFx0dXYgPSB1diAvIGF0bGFzU2l6ZTtcXG5cXG5cXHRcXHRcXHRcXHR2ZWM0IGNvbG9yID0gZm9udENvbG9yO1xcblxcdFxcdFxcdFxcdHZlYzQgbWFzayA9IHRleHR1cmUyRChhdGxhcywgdXYpO1xcblxcblxcdFxcdFxcdFxcdGZsb2F0IG1hc2tZID0gbGlnaHRuZXNzKG1hc2spO1xcblxcdFxcdFxcdFxcdC8vIGZsb2F0IGNvbG9yWSA9IGxpZ2h0bmVzcyhjb2xvcik7XFxuXFx0XFx0XFx0XFx0Y29sb3IuYSAqPSBtYXNrWTtcXG5cXHRcXHRcXHRcXHRjb2xvci5hICo9IG9wYWNpdHk7XFxuXFxuXFx0XFx0XFx0XFx0Ly8gY29sb3IuYSArPSAuMTtcXG5cXG5cXHRcXHRcXHRcXHQvLyBhbnRpYWxpYXNpbmcsIHNlZSB5aXEgY29sb3Igc3BhY2UgeS1jaGFubmVsIGZvcm11bGFcXG5cXHRcXHRcXHRcXHQvLyBjb2xvci5yZ2IgKz0gKDEuIC0gY29sb3IucmdiKSAqICgxLiAtIG1hc2sucmdiKTtcXG5cXG5cXHRcXHRcXHRcXHRnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG5cXHRcXHRcXHR9XCJ9KTtyZXR1cm57cmVnbDp0LGRyYXc6ZSxhdGxhczp7fX19LGsucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXQ9e3RleHQ6dH07ZWxzZSBpZighdClyZXR1cm47bnVsbCE9KHQ9aSh0LHtwb3NpdGlvbjpcInBvc2l0aW9uIHBvc2l0aW9ucyBjb29yZCBjb29yZHMgY29vcmRpbmF0ZXNcIixmb250OlwiZm9udCBmb250RmFjZSBmb250ZmFjZSB0eXBlZmFjZSBjc3NGb250IGNzcy1mb250IGZhbWlseSBmb250RmFtaWx5XCIsZm9udFNpemU6XCJmb250U2l6ZSBmb250c2l6ZSBzaXplIGZvbnQtc2l6ZVwiLHRleHQ6XCJ0ZXh0IHRleHRzIGNoYXJzIGNoYXJhY3RlcnMgdmFsdWUgdmFsdWVzIHN5bWJvbHNcIixhbGlnbjpcImFsaWduIGFsaWdubWVudCB0ZXh0QWxpZ24gdGV4dGJhc2VsaW5lXCIsYmFzZWxpbmU6XCJiYXNlbGluZSB0ZXh0QmFzZWxpbmUgdGV4dGJhc2VsaW5lXCIsZGlyZWN0aW9uOlwiZGlyIGRpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uXCIsY29sb3I6XCJjb2xvciBjb2xvdXIgZmlsbCBmaWxsLWNvbG9yIGZpbGxDb2xvciB0ZXh0Q29sb3IgdGV4dGNvbG9yXCIsa2VybmluZzpcImtlcm5pbmcga2VyblwiLHJhbmdlOlwicmFuZ2UgZGF0YUJveFwiLHZpZXdwb3J0OlwidnAgdmlld3BvcnQgdmlld0JveCB2aWV3Ym94IHZpZXdQb3J0XCIsb3BhY2l0eTpcIm9wYWNpdHkgYWxwaGEgdHJhbnNwYXJlbmN5IHZpc2libGUgdmlzaWJpbGl0eSBvcGFxdWVcIixvZmZzZXQ6XCJvZmZzZXQgcG9zaXRpb25PZmZzZXQgcGFkZGluZyBzaGlmdCBpbmRlbnQgaW5kZW50YXRpb25cIn0sITApKS5vcGFjaXR5JiYoQXJyYXkuaXNBcnJheSh0Lm9wYWNpdHkpP3RoaXMub3BhY2l0eT10Lm9wYWNpdHkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUZsb2F0KHQpfSk6dGhpcy5vcGFjaXR5PXBhcnNlRmxvYXQodC5vcGFjaXR5KSksbnVsbCE9dC52aWV3cG9ydCYmKHRoaXMudmlld3BvcnQ9aCh0LnZpZXdwb3J0KSxrLm5vcm1hbFZpZXdwb3J0JiYodGhpcy52aWV3cG9ydC55PXRoaXMuY2FudmFzLmhlaWdodC10aGlzLnZpZXdwb3J0LnktdGhpcy52aWV3cG9ydC5oZWlnaHQpLHRoaXMudmlld3BvcnRBcnJheT1bdGhpcy52aWV3cG9ydC54LHRoaXMudmlld3BvcnQueSx0aGlzLnZpZXdwb3J0LndpZHRoLHRoaXMudmlld3BvcnQuaGVpZ2h0XSksbnVsbD09dGhpcy52aWV3cG9ydCYmKHRoaXMudmlld3BvcnQ9e3g6MCx5OjAsd2lkdGg6dGhpcy5nbC5kcmF3aW5nQnVmZmVyV2lkdGgsaGVpZ2h0OnRoaXMuZ2wuZHJhd2luZ0J1ZmZlckhlaWdodH0sdGhpcy52aWV3cG9ydEFycmF5PVt0aGlzLnZpZXdwb3J0LngsdGhpcy52aWV3cG9ydC55LHRoaXMudmlld3BvcnQud2lkdGgsdGhpcy52aWV3cG9ydC5oZWlnaHRdKSxudWxsIT10Lmtlcm5pbmcmJih0aGlzLmtlcm5pbmc9dC5rZXJuaW5nKSxudWxsIT10Lm9mZnNldCYmKFwibnVtYmVyXCI9PXR5cGVvZiB0Lm9mZnNldCYmKHQub2Zmc2V0PVt0Lm9mZnNldCwwXSksdGhpcy5wb3NpdGlvbk9mZnNldD15KHQub2Zmc2V0KSksdC5kaXJlY3Rpb24mJih0aGlzLmRpcmVjdGlvbj10LmRpcmVjdGlvbiksdC5yYW5nZSYmKHRoaXMucmFuZ2U9dC5yYW5nZSx0aGlzLnNjYWxlPVsxLyh0LnJhbmdlWzJdLXQucmFuZ2VbMF0pLDEvKHQucmFuZ2VbM10tdC5yYW5nZVsxXSldLHRoaXMudHJhbnNsYXRlPVstdC5yYW5nZVswXSwtdC5yYW5nZVsxXV0pLHQuc2NhbGUmJih0aGlzLnNjYWxlPXQuc2NhbGUpLHQudHJhbnNsYXRlJiYodGhpcy50cmFuc2xhdGU9dC50cmFuc2xhdGUpLHRoaXMuc2NhbGV8fCh0aGlzLnNjYWxlPVsxL3RoaXMudmlld3BvcnQud2lkdGgsMS90aGlzLnZpZXdwb3J0LmhlaWdodF0pLHRoaXMudHJhbnNsYXRlfHwodGhpcy50cmFuc2xhdGU9WzAsMF0pLHRoaXMuZm9udC5sZW5ndGh8fHQuZm9udHx8KHQuZm9udD1rLmJhc2VGb250U2l6ZStcInB4IHNhbnMtc2VyaWZcIik7dmFyIHIsYT0hMSxvPSExO2lmKHQuZm9udCYmKEFycmF5LmlzQXJyYXkodC5mb250KT90LmZvbnQ6W3QuZm9udF0pLmZvckVhY2goZnVuY3Rpb24odCxyKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl0cnl7dD1uLnBhcnNlKHQpfWNhdGNoKGUpe3Q9bi5wYXJzZShrLmJhc2VGb250U2l6ZStcInB4IFwiK3QpfWVsc2UgdD1uLnBhcnNlKG4uc3RyaW5naWZ5KHQpKTt2YXIgaT1uLnN0cmluZ2lmeSh7c2l6ZTprLmJhc2VGb250U2l6ZSxmYW1pbHk6dC5mYW1pbHksc3RyZXRjaDpfP3Quc3RyZXRjaDp2b2lkIDAsdmFyaWFudDp0LnZhcmlhbnQsd2VpZ2h0OnQud2VpZ2h0LHN0eWxlOnQuc3R5bGV9KSxzPXAodC5zaXplKSxsPU1hdGgucm91bmQoc1swXSpkKHNbMV0pKTtpZihsIT09ZS5mb250U2l6ZVtyXSYmKG89ITAsZS5mb250U2l6ZVtyXT1sKSwhKGUuZm9udFtyXSYmaT09ZS5mb250W3JdLmJhc2VTdHJpbmd8fChhPSEwLGUuZm9udFtyXT1rLmZvbnRzW2ldLGUuZm9udFtyXSkpKXt2YXIgYz10LmZhbWlseS5qb2luKFwiLCBcIiksdT1bdC5zdHlsZV07dC5zdHlsZSE9dC52YXJpYW50JiZ1LnB1c2godC52YXJpYW50KSx0LnZhcmlhbnQhPXQud2VpZ2h0JiZ1LnB1c2godC53ZWlnaHQpLF8mJnQud2VpZ2h0IT10LnN0cmV0Y2gmJnUucHVzaCh0LnN0cmV0Y2gpLGUuZm9udFtyXT17YmFzZVN0cmluZzppLGZhbWlseTpjLHdlaWdodDp0LndlaWdodCxzdHJldGNoOnQuc3RyZXRjaCxzdHlsZTp0LnN0eWxlLHZhcmlhbnQ6dC52YXJpYW50LHdpZHRoOnt9LGtlcm5pbmc6e30sbWV0cmljczptKGMse29yaWdpbjpcInRvcFwiLGZvbnRTaXplOmsuYmFzZUZvbnRTaXplLGZvbnRTdHlsZTp1LmpvaW4oXCIgXCIpfSl9LGsuZm9udHNbaV09ZS5mb250W3JdfX0pLChhfHxvKSYmdGhpcy5mb250LmZvckVhY2goZnVuY3Rpb24ocixpKXt2YXIgYT1uLnN0cmluZ2lmeSh7c2l6ZTplLmZvbnRTaXplW2ldLGZhbWlseTpyLmZhbWlseSxzdHJldGNoOl8/ci5zdHJldGNoOnZvaWQgMCx2YXJpYW50OnIudmFyaWFudCx3ZWlnaHQ6ci53ZWlnaHQsc3R5bGU6ci5zdHlsZX0pO2lmKGUuZm9udEF0bGFzW2ldPWUuc2hhZGVyLmF0bGFzW2FdLCFlLmZvbnRBdGxhc1tpXSl7dmFyIG89ci5tZXRyaWNzO2Uuc2hhZGVyLmF0bGFzW2FdPWUuZm9udEF0bGFzW2ldPXtmb250U3RyaW5nOmEsc3RlcDoyKk1hdGguY2VpbChlLmZvbnRTaXplW2ldKm8uYm90dG9tKi41KSxlbTplLmZvbnRTaXplW2ldLGNvbHM6MCxyb3dzOjAsaGVpZ2h0OjAsd2lkdGg6MCxjaGFyczpbXSxpZHM6e30sdGV4dHVyZTplLnJlZ2wudGV4dHVyZSgpfX1udWxsPT10LnRleHQmJih0LnRleHQ9ZS50ZXh0KX0pLFwic3RyaW5nXCI9PXR5cGVvZiB0LnRleHQmJnQucG9zaXRpb24mJnQucG9zaXRpb24ubGVuZ3RoPjIpe2Zvcih2YXIgcz1BcnJheSguNSp0LnBvc2l0aW9uLmxlbmd0aCksZj0wO2Y8cy5sZW5ndGg7ZisrKXNbZl09dC50ZXh0O3QudGV4dD1zfWlmKG51bGwhPXQudGV4dHx8YSl7aWYodGhpcy50ZXh0T2Zmc2V0cz1bMF0sQXJyYXkuaXNBcnJheSh0LnRleHQpKXt0aGlzLmNvdW50PXQudGV4dFswXS5sZW5ndGgsdGhpcy5jb3VudHM9W3RoaXMuY291bnRdO2Zvcih2YXIgYj0xO2I8dC50ZXh0Lmxlbmd0aDtiKyspZS50ZXh0T2Zmc2V0c1tiXT1lLnRleHRPZmZzZXRzW2ItMV0rdC50ZXh0W2ItMV0ubGVuZ3RoLGUuY291bnQrPXQudGV4dFtiXS5sZW5ndGgsZS5jb3VudHMucHVzaCh0LnRleHRbYl0ubGVuZ3RoKTt0aGlzLnRleHQ9dC50ZXh0LmpvaW4oXCJcIil9ZWxzZSB0aGlzLnRleHQ9dC50ZXh0LHRoaXMuY291bnQ9dGhpcy50ZXh0Lmxlbmd0aCx0aGlzLmNvdW50cz1bdGhpcy5jb3VudF07cj1bXSx0aGlzLmZvbnQuZm9yRWFjaChmdW5jdGlvbih0LG4pe2suYXRsYXNDb250ZXh0LmZvbnQ9dC5iYXNlU3RyaW5nO2Zvcih2YXIgaT1lLmZvbnRBdGxhc1tuXSxhPTA7YTxlLnRleHQubGVuZ3RoO2ErKyl7dmFyIG89ZS50ZXh0LmNoYXJBdChhKTtpZihudWxsPT1pLmlkc1tvXSYmKGkuaWRzW29dPWkuY2hhcnMubGVuZ3RoLGkuY2hhcnMucHVzaChvKSxyLnB1c2gobykpLG51bGw9PXQud2lkdGhbb10mJih0LndpZHRoW29dPWsuYXRsYXNDb250ZXh0Lm1lYXN1cmVUZXh0KG8pLndpZHRoL2suYmFzZUZvbnRTaXplLGUua2VybmluZykpe3ZhciBzPVtdO2Zvcih2YXIgbCBpbiB0LndpZHRoKXMucHVzaChsK28sbytsKTt2KHQua2VybmluZyxnKHQuZmFtaWx5LHtwYWlyczpzfSkpfX19KX1pZih0LnBvc2l0aW9uKWlmKHQucG9zaXRpb24ubGVuZ3RoPjIpe2Zvcih2YXIgdz0hdC5wb3NpdGlvblswXS5sZW5ndGgsQT11Lm1hbGxvY0Zsb2F0KDIqdGhpcy5jb3VudCksVD0wLE09MDtUPHRoaXMuY291bnRzLmxlbmd0aDtUKyspe3ZhciBTPWUuY291bnRzW1RdO2lmKHcpZm9yKHZhciBFPTA7RTxTO0UrKylBW00rK109dC5wb3NpdGlvblsyKlRdLEFbTSsrXT10LnBvc2l0aW9uWzIqVCsxXTtlbHNlIGZvcih2YXIgQz0wO0M8UztDKyspQVtNKytdPXQucG9zaXRpb25bVF1bMF0sQVtNKytdPXQucG9zaXRpb25bVF1bMV19dGhpcy5wb3NpdGlvbi5jYWxsP3RoaXMucG9zaXRpb24oe3R5cGU6XCJmbG9hdFwiLGRhdGE6QX0pOnRoaXMucG9zaXRpb249dGhpcy5yZWdsLmJ1ZmZlcih7dHlwZTpcImZsb2F0XCIsZGF0YTpBfSksdS5mcmVlRmxvYXQoQSl9ZWxzZSB0aGlzLnBvc2l0aW9uLmRlc3Ryb3kmJnRoaXMucG9zaXRpb24uZGVzdHJveSgpLHRoaXMucG9zaXRpb249e2NvbnN0YW50OnQucG9zaXRpb259O2lmKHQudGV4dHx8YSl7dmFyIEw9dS5tYWxsb2NVaW50OCh0aGlzLmNvdW50KSx6PXUubWFsbG9jRmxvYXQoMip0aGlzLmNvdW50KTt0aGlzLnRleHRXaWR0aD1bXTtmb3IodmFyIE89MCxJPTA7Tzx0aGlzLmNvdW50cy5sZW5ndGg7TysrKXtmb3IodmFyIEQ9ZS5jb3VudHNbT10sUD1lLmZvbnRbT118fGUuZm9udFswXSxSPWUuZm9udEF0bGFzW09dfHxlLmZvbnRBdGxhc1swXSxGPTA7RjxEO0YrKyl7dmFyIEI9ZS50ZXh0LmNoYXJBdChJKSxOPWUudGV4dC5jaGFyQXQoSS0xKTtpZihMW0ldPVIuaWRzW0JdLHpbMipJXT1QLndpZHRoW0JdLEYpe3ZhciBqPXpbMipJLTJdLFY9elsyKkldLFU9elsyKkktMV0rLjUqaisuNSpWO2lmKGUua2VybmluZyl7dmFyIHE9UC5rZXJuaW5nW04rQl07cSYmKFUrPS4wMDEqcSl9elsyKkkrMV09VX1lbHNlIHpbMipJKzFdPS41KnpbMipJXTtJKyt9ZS50ZXh0V2lkdGgucHVzaCh6Lmxlbmd0aD8uNSp6WzIqSS0yXSt6WzIqSS0xXTowKX10LmFsaWdufHwodC5hbGlnbj10aGlzLmFsaWduKSx0aGlzLmNoYXJCdWZmZXIoe2RhdGE6TCx0eXBlOlwidWludDhcIix1c2FnZTpcInN0cmVhbVwifSksdGhpcy5zaXplQnVmZmVyKHtkYXRhOnosdHlwZTpcImZsb2F0XCIsdXNhZ2U6XCJzdHJlYW1cIn0pLHUuZnJlZVVpbnQ4KEwpLHUuZnJlZUZsb2F0KHopLHIubGVuZ3RoJiZ0aGlzLmZvbnQuZm9yRWFjaChmdW5jdGlvbih0LHIpe3ZhciBuPWUuZm9udEF0bGFzW3JdLGk9bi5zdGVwLGE9TWF0aC5mbG9vcihrLm1heEF0bGFzU2l6ZS9pKSxvPU1hdGgubWluKGEsbi5jaGFycy5sZW5ndGgpLHM9TWF0aC5jZWlsKG4uY2hhcnMubGVuZ3RoL28pLGw9eChvKmkpLHU9eChzKmkpO24ud2lkdGg9bCxuLmhlaWdodD11LG4ucm93cz1zLG4uY29scz1vLG4uZW0mJm4udGV4dHVyZSh7ZGF0YTpjKHtjYW52YXM6ay5hdGxhc0NhbnZhcyxmb250Om4uZm9udFN0cmluZyxjaGFyczpuLmNoYXJzLHNoYXBlOltsLHVdLHN0ZXA6W2ksaV19KX0pfSl9aWYodC5hbGlnbiYmKHRoaXMuYWxpZ249dC5hbGlnbix0aGlzLmFsaWduT2Zmc2V0PXRoaXMudGV4dFdpZHRoLm1hcChmdW5jdGlvbih0LHIpe3ZhciBuPUFycmF5LmlzQXJyYXkoZS5hbGlnbik/ZS5hbGlnbi5sZW5ndGg+MT9lLmFsaWduW3JdOmUuYWxpZ25bMF06ZS5hbGlnbjtpZihcIm51bWJlclwiPT10eXBlb2YgbilyZXR1cm4gbjtzd2l0Y2gobil7Y2FzZVwicmlnaHRcIjpjYXNlXCJlbmRcIjpyZXR1cm4tdDtjYXNlXCJjZW50ZXJcIjpjYXNlXCJjZW50cmVcIjpjYXNlXCJtaWRkbGVcIjpyZXR1cm4uNSotdH1yZXR1cm4gMH0pKSxudWxsPT10aGlzLmJhc2VsaW5lJiZudWxsPT10LmJhc2VsaW5lJiYodC5iYXNlbGluZT0wKSxudWxsIT10LmJhc2VsaW5lJiYodGhpcy5iYXNlbGluZT10LmJhc2VsaW5lLEFycmF5LmlzQXJyYXkodGhpcy5iYXNlbGluZSl8fCh0aGlzLmJhc2VsaW5lPVt0aGlzLmJhc2VsaW5lXSksdGhpcy5iYXNlbGluZU9mZnNldD10aGlzLmJhc2VsaW5lLm1hcChmdW5jdGlvbih0LHIpe3ZhciBuPShlLmZvbnRbcl18fGUuZm9udFswXSkubWV0cmljcyxpPTA7cmV0dXJuIGkrPS41Km4uYm90dG9tLGkrPVwibnVtYmVyXCI9PXR5cGVvZiB0P3Qtbi5iYXNlbGluZTotblt0XSxrLm5vcm1hbFZpZXdwb3J0fHwoaSo9LTEpLGl9KSksbnVsbCE9dC5jb2xvcilpZih0LmNvbG9yfHwodC5jb2xvcj1cInRyYW5zcGFyZW50XCIpLFwic3RyaW5nXCIhPXR5cGVvZiB0LmNvbG9yJiZpc05hTih0LmNvbG9yKSl7dmFyIEg7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQuY29sb3JbMF0mJnQuY29sb3IubGVuZ3RoPnRoaXMuY291bnRzLmxlbmd0aCl7dmFyIEc9dC5jb2xvci5sZW5ndGg7SD11Lm1hbGxvY1VpbnQ4KEcpO2Zvcih2YXIgWT0odC5jb2xvci5zdWJhcnJheXx8dC5jb2xvci5zbGljZSkuYmluZCh0LmNvbG9yKSxXPTA7VzxHO1crPTQpSC5zZXQobChZKFcsVys0KSxcInVpbnQ4XCIpLFcpfWVsc2V7dmFyIFg9dC5jb2xvci5sZW5ndGg7SD11Lm1hbGxvY1VpbnQ4KDQqWCk7Zm9yKHZhciBaPTA7WjxYO1orKylILnNldChsKHQuY29sb3JbWl18fDAsXCJ1aW50OFwiKSw0KlopfXRoaXMuY29sb3I9SH1lbHNlIHRoaXMuY29sb3I9bCh0LmNvbG9yLFwidWludDhcIik7aWYodC5wb3NpdGlvbnx8dC50ZXh0fHx0LmNvbG9yfHx0LmJhc2VsaW5lfHx0LmFsaWdufHx0LmZvbnR8fHQub2Zmc2V0fHx0Lm9wYWNpdHkpaWYodGhpcy5jb2xvci5sZW5ndGg+NHx8dGhpcy5iYXNlbGluZU9mZnNldC5sZW5ndGg+MXx8dGhpcy5hbGlnbiYmdGhpcy5hbGlnbi5sZW5ndGg+MXx8dGhpcy5mb250QXRsYXMubGVuZ3RoPjF8fHRoaXMucG9zaXRpb25PZmZzZXQubGVuZ3RoPjIpe3ZhciAkPU1hdGgubWF4KC41KnRoaXMucG9zaXRpb24ubGVuZ3RofHwwLC4yNSp0aGlzLmNvbG9yLmxlbmd0aHx8MCx0aGlzLmJhc2VsaW5lT2Zmc2V0Lmxlbmd0aHx8MCx0aGlzLmFsaWduT2Zmc2V0Lmxlbmd0aHx8MCx0aGlzLmZvbnQubGVuZ3RofHwwLHRoaXMub3BhY2l0eS5sZW5ndGh8fDAsLjUqdGhpcy5wb3NpdGlvbk9mZnNldC5sZW5ndGh8fDApO3RoaXMuYmF0Y2g9QXJyYXkoJCk7Zm9yKHZhciBKPTA7Sjx0aGlzLmJhdGNoLmxlbmd0aDtKKyspZS5iYXRjaFtKXT17Y291bnQ6ZS5jb3VudHMubGVuZ3RoPjE/ZS5jb3VudHNbSl06ZS5jb3VudHNbMF0sb2Zmc2V0OmUudGV4dE9mZnNldHMubGVuZ3RoPjE/ZS50ZXh0T2Zmc2V0c1tKXTplLnRleHRPZmZzZXRzWzBdLGNvbG9yOmUuY29sb3I/ZS5jb2xvci5sZW5ndGg8PTQ/ZS5jb2xvcjplLmNvbG9yLnN1YmFycmF5KDQqSiw0KkorNCk6WzAsMCwwLDI1NV0sb3BhY2l0eTpBcnJheS5pc0FycmF5KGUub3BhY2l0eSk/ZS5vcGFjaXR5W0pdOmUub3BhY2l0eSxiYXNlbGluZTpudWxsIT1lLmJhc2VsaW5lT2Zmc2V0W0pdP2UuYmFzZWxpbmVPZmZzZXRbSl06ZS5iYXNlbGluZU9mZnNldFswXSxhbGlnbjplLmFsaWduP251bGwhPWUuYWxpZ25PZmZzZXRbSl0/ZS5hbGlnbk9mZnNldFtKXTplLmFsaWduT2Zmc2V0WzBdOjAsYXRsYXM6ZS5mb250QXRsYXNbSl18fGUuZm9udEF0bGFzWzBdLHBvc2l0aW9uT2Zmc2V0OmUucG9zaXRpb25PZmZzZXQubGVuZ3RoPjI/ZS5wb3NpdGlvbk9mZnNldC5zdWJhcnJheSgyKkosMipKKzIpOmUucG9zaXRpb25PZmZzZXR9fWVsc2UgdGhpcy5jb3VudD90aGlzLmJhdGNoPVt7Y291bnQ6dGhpcy5jb3VudCxvZmZzZXQ6MCxjb2xvcjp0aGlzLmNvbG9yfHxbMCwwLDAsMjU1XSxvcGFjaXR5OkFycmF5LmlzQXJyYXkodGhpcy5vcGFjaXR5KT90aGlzLm9wYWNpdHlbMF06dGhpcy5vcGFjaXR5LGJhc2VsaW5lOnRoaXMuYmFzZWxpbmVPZmZzZXRbMF0sYWxpZ246dGhpcy5hbGlnbk9mZnNldD90aGlzLmFsaWduT2Zmc2V0WzBdOjAsYXRsYXM6dGhpcy5mb250QXRsYXNbMF0scG9zaXRpb25PZmZzZXQ6dGhpcy5wb3NpdGlvbk9mZnNldH1dOnRoaXMuYmF0Y2g9W119LGsucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt9LGsucHJvdG90eXBlLmtlcm5pbmc9ITAsay5wcm90b3R5cGUucG9zaXRpb249e2NvbnN0YW50Om5ldyBGbG9hdDMyQXJyYXkoMil9LGsucHJvdG90eXBlLnRyYW5zbGF0ZT1udWxsLGsucHJvdG90eXBlLnNjYWxlPW51bGwsay5wcm90b3R5cGUuZm9udD1udWxsLGsucHJvdG90eXBlLnRleHQ9XCJcIixrLnByb3RvdHlwZS5wb3NpdGlvbk9mZnNldD1bMCwwXSxrLnByb3RvdHlwZS5vcGFjaXR5PTEsay5wcm90b3R5cGUuY29sb3I9bmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDI1NV0pLGsucHJvdG90eXBlLmFsaWduT2Zmc2V0PVswLDBdLGsubm9ybWFsVmlld3BvcnQ9ITEsay5tYXhBdGxhc1NpemU9MTAyNCxrLmF0bGFzQ2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksay5hdGxhc0NvbnRleHQ9ay5hdGxhc0NhbnZhcy5nZXRDb250ZXh0KFwiMmRcIix7YWxwaGE6ITF9KSxrLmJhc2VGb250U2l6ZT02NCxrLmZvbnRzPXt9LGUuZXhwb3J0cz1rfSx7XCJiaXQtdHdpZGRsZVwiOjgzLFwiY29sb3Itbm9ybWFsaXplXCI6MTExLFwiY3NzLWZvbnRcIjoxMzAsXCJkZXRlY3Qta2VybmluZ1wiOjE1OCxcImVzNi13ZWFrLW1hcFwiOjIxNyxcImZsYXR0ZW4tdmVydGV4LWRhdGFcIjoyMjQsXCJmb250LWF0bGFzXCI6MjI1LFwiZm9udC1tZWFzdXJlXCI6MjI2LFwiZ2wtdXRpbC9jb250ZXh0XCI6MzE2LFwiaXMtcGxhaW4tb2JqXCI6NDE1LFwib2JqZWN0LWFzc2lnblwiOjQ0NyxcInBhcnNlLXJlY3RcIjo0NTIsXCJwYXJzZS11bml0XCI6NDU0LFwicGljay1ieS1hbGlhc1wiOjQ1OCxyZWdsOjQ4NyxcInRvLXB4XCI6NTI0LFwidHlwZWRhcnJheS1wb29sXCI6NTMwfV0sMzE1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIm5kYXJyYXlcIiksaT10KFwibmRhcnJheS1vcHNcIiksYT10KFwidHlwZWRhcnJheS1wb29sXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihhcmd1bWVudHMubGVuZ3RoPD0xKXRocm93IG5ldyBFcnJvcihcImdsLXRleHR1cmUyZDogTWlzc2luZyBhcmd1bWVudHMgZm9yIHRleHR1cmUyZCBjb25zdHJ1Y3RvclwiKTtvfHxmdW5jdGlvbih0KXtvPVt0LkxJTkVBUix0Lk5FQVJFU1RfTUlQTUFQX0xJTkVBUix0LkxJTkVBUl9NSVBNQVBfTkVBUkVTVCx0LkxJTkVBUl9NSVBNQVBfTkVBUkVTVF0scz1bdC5ORUFSRVNULHQuTElORUFSLHQuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCx0Lk5FQVJFU1RfTUlQTUFQX0xJTkVBUix0LkxJTkVBUl9NSVBNQVBfTkVBUkVTVCx0LkxJTkVBUl9NSVBNQVBfTElORUFSXSxsPVt0LlJFUEVBVCx0LkNMQU1QX1RPX0VER0UsdC5NSVJST1JFRF9SRVBFQVRdfSh0KTtpZihcIm51bWJlclwiPT10eXBlb2YgYXJndW1lbnRzWzFdKXJldHVybiB2KHQsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM118fHQuUkdCQSxhcmd1bWVudHNbNF18fHQuVU5TSUdORURfQllURSk7aWYoQXJyYXkuaXNBcnJheShhcmd1bWVudHNbMV0pKXJldHVybiB2KHQsMHxhcmd1bWVudHNbMV1bMF0sMHxhcmd1bWVudHNbMV1bMV0sYXJndW1lbnRzWzJdfHx0LlJHQkEsYXJndW1lbnRzWzNdfHx0LlVOU0lHTkVEX0JZVEUpO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBhcmd1bWVudHNbMV0pe3ZhciBlPWFyZ3VtZW50c1sxXSxyPWMoZSk/ZTplLnJhdztpZihyKXJldHVybiBmdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89Zyh0KTtyZXR1cm4gdC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLGksaSxhLGUpLG5ldyBmKHQsbyxyLG4saSxhKX0odCxyLDB8ZS53aWR0aCwwfGUuaGVpZ2h0LGFyZ3VtZW50c1syXXx8dC5SR0JBLGFyZ3VtZW50c1szXXx8dC5VTlNJR05FRF9CWVRFKTtpZihlLnNoYXBlJiZlLmRhdGEmJmUuc3RyaWRlKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPWUuZHR5cGUsbz1lLnNoYXBlLnNsaWNlKCkscz10LmdldFBhcmFtZXRlcih0Lk1BWF9URVhUVVJFX1NJWkUpO2lmKG9bMF08MHx8b1swXT5zfHxvWzFdPDB8fG9bMV0+cyl0aHJvdyBuZXcgRXJyb3IoXCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgdGV4dHVyZSBzaXplXCIpO3ZhciBsPWQobyxlLnN0cmlkZS5zbGljZSgpKSxjPTA7XCJmbG9hdDMyXCI9PT1yP2M9dC5GTE9BVDpcImZsb2F0NjRcIj09PXI/KGM9dC5GTE9BVCxsPSExLHI9XCJmbG9hdDMyXCIpOlwidWludDhcIj09PXI/Yz10LlVOU0lHTkVEX0JZVEU6KGM9dC5VTlNJR05FRF9CWVRFLGw9ITEscj1cInVpbnQ4XCIpO3ZhciBoLHAsdj0wO2lmKDI9PT1vLmxlbmd0aCl2PXQuTFVNSU5BTkNFLG89W29bMF0sb1sxXSwxXSxlPW4oZS5kYXRhLG8sW2Uuc3RyaWRlWzBdLGUuc3RyaWRlWzFdLDFdLGUub2Zmc2V0KTtlbHNle2lmKDMhPT1vLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgc2hhcGUgZm9yIHRleHR1cmVcIik7aWYoMT09PW9bMl0pdj10LkFMUEhBO2Vsc2UgaWYoMj09PW9bMl0pdj10LkxVTUlOQU5DRV9BTFBIQTtlbHNlIGlmKDM9PT1vWzJdKXY9dC5SR0I7ZWxzZXtpZig0IT09b1syXSl0aHJvdyBuZXcgRXJyb3IoXCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgc2hhcGUgZm9yIHBpeGVsIGNvb3Jkc1wiKTt2PXQuUkdCQX19YyE9PXQuRkxPQVR8fHQuZ2V0RXh0ZW5zaW9uKFwiT0VTX3RleHR1cmVfZmxvYXRcIil8fChjPXQuVU5TSUdORURfQllURSxsPSExKTt2YXIgbT1lLnNpemU7aWYobCloPTA9PT1lLm9mZnNldCYmZS5kYXRhLmxlbmd0aD09PW0/ZS5kYXRhOmUuZGF0YS5zdWJhcnJheShlLm9mZnNldCxlLm9mZnNldCttKTtlbHNle3ZhciB5PVtvWzJdLG9bMl0qb1swXSwxXTtwPWEubWFsbG9jKG0scik7dmFyIHg9bihwLG8seSwwKTtcImZsb2F0MzJcIiE9PXImJlwiZmxvYXQ2NFwiIT09cnx8YyE9PXQuVU5TSUdORURfQllURT9pLmFzc2lnbih4LGUpOnUoeCxlKSxoPXAuc3ViYXJyYXkoMCxtKX12YXIgYj1nKHQpO3QudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCx2LG9bMF0sb1sxXSwwLHYsYyxoKSxsfHxhLmZyZWUocCk7cmV0dXJuIG5ldyBmKHQsYixvWzBdLG9bMV0sdixjKX0odCxlKX10aHJvdyBuZXcgRXJyb3IoXCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgYXJndW1lbnRzIGZvciB0ZXh0dXJlMmQgY29uc3RydWN0b3JcIil9O3ZhciBvPW51bGwscz1udWxsLGw9bnVsbDtmdW5jdGlvbiBjKHQpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50fHxcInVuZGVmaW5lZFwiIT10eXBlb2YgSFRNTEltYWdlRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fFwidW5kZWZpbmVkXCIhPXR5cGVvZiBIVE1MVmlkZW9FbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudHx8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIEltYWdlRGF0YSYmdCBpbnN0YW5jZW9mIEltYWdlRGF0YX12YXIgdT1mdW5jdGlvbih0LGUpe2kubXVscyh0LGUsMjU1KX07ZnVuY3Rpb24gaCh0LGUscil7dmFyIG49dC5nbCxpPW4uZ2V0UGFyYW1ldGVyKG4uTUFYX1RFWFRVUkVfU0laRSk7aWYoZTwwfHxlPml8fHI8MHx8cj5pKXRocm93IG5ldyBFcnJvcihcImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNpemVcIik7cmV0dXJuIHQuX3NoYXBlPVtlLHJdLHQuYmluZCgpLG4udGV4SW1hZ2UyRChuLlRFWFRVUkVfMkQsMCx0LmZvcm1hdCxlLHIsMCx0LmZvcm1hdCx0LnR5cGUsbnVsbCksdC5fbWlwTGV2ZWxzPVswXSx0fWZ1bmN0aW9uIGYodCxlLHIsbixpLGEpe3RoaXMuZ2w9dCx0aGlzLmhhbmRsZT1lLHRoaXMuZm9ybWF0PWksdGhpcy50eXBlPWEsdGhpcy5fc2hhcGU9W3Isbl0sdGhpcy5fbWlwTGV2ZWxzPVswXSx0aGlzLl9tYWdGaWx0ZXI9dC5ORUFSRVNULHRoaXMuX21pbkZpbHRlcj10Lk5FQVJFU1QsdGhpcy5fd3JhcFM9dC5DTEFNUF9UT19FREdFLHRoaXMuX3dyYXBUPXQuQ0xBTVBfVE9fRURHRSx0aGlzLl9hbmlzb1NhbXBsZXM9MTt2YXIgbz10aGlzLHM9W3RoaXMuX3dyYXBTLHRoaXMuX3dyYXBUXTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzLFt7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uX3dyYXBTfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8ud3JhcFM9dH19LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5fd3JhcFR9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gby53cmFwVD10fX1dKSx0aGlzLl93cmFwVmVjdG9yPXM7dmFyIGw9W3RoaXMuX3NoYXBlWzBdLHRoaXMuX3NoYXBlWzFdXTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsLFt7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uX3NoYXBlWzBdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8ud2lkdGg9dH19LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5fc2hhcGVbMV19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gby5oZWlnaHQ9dH19XSksdGhpcy5fc2hhcGVWZWN0b3I9bH12YXIgcD1mLnByb3RvdHlwZTtmdW5jdGlvbiBkKHQsZSl7cmV0dXJuIDM9PT10Lmxlbmd0aD8xPT09ZVsyXSYmZVsxXT09PXRbMF0qdFsyXSYmZVswXT09PXRbMl06MT09PWVbMF0mJmVbMV09PT10WzBdfWZ1bmN0aW9uIGcodCl7dmFyIGU9dC5jcmVhdGVUZXh0dXJlKCk7cmV0dXJuIHQuYmluZFRleHR1cmUodC5URVhUVVJFXzJELGUpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX01JTl9GSUxURVIsdC5ORUFSRVNUKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NQUdfRklMVEVSLHQuTkVBUkVTVCksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfV1JBUF9TLHQuQ0xBTVBfVE9fRURHRSksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfV1JBUF9ULHQuQ0xBTVBfVE9fRURHRSksZX1mdW5jdGlvbiB2KHQsZSxyLG4saSl7dmFyIGE9dC5nZXRQYXJhbWV0ZXIodC5NQVhfVEVYVFVSRV9TSVpFKTtpZihlPDB8fGU+YXx8cjwwfHxyPmEpdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHRleHR1cmUgc2hhcGVcIik7aWYoaT09PXQuRkxPQVQmJiF0LmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0XCIpKXRocm93IG5ldyBFcnJvcihcImdsLXRleHR1cmUyZDogRmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtXCIpO3ZhciBvPWcodCk7cmV0dXJuIHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCxuLGUsciwwLG4saSxudWxsKSxuZXcgZih0LG8sZSxyLG4saSl9T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocCx7bWluRmlsdGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWluRmlsdGVyfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5iaW5kKCk7dmFyIGU9dGhpcy5nbDtpZih0aGlzLnR5cGU9PT1lLkZMT0FUJiZvLmluZGV4T2YodCk+PTAmJihlLmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhclwiKXx8KHQ9ZS5ORUFSRVNUKSkscy5pbmRleE9mKHQpPDApdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBVbmtub3duIGZpbHRlciBtb2RlIFwiK3QpO3JldHVybiBlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NSU5fRklMVEVSLHQpLHRoaXMuX21pbkZpbHRlcj10fX0sbWFnRmlsdGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFnRmlsdGVyfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5iaW5kKCk7dmFyIGU9dGhpcy5nbDtpZih0aGlzLnR5cGU9PT1lLkZMT0FUJiZvLmluZGV4T2YodCk+PTAmJihlLmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhclwiKXx8KHQ9ZS5ORUFSRVNUKSkscy5pbmRleE9mKHQpPDApdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBVbmtub3duIGZpbHRlciBtb2RlIFwiK3QpO3JldHVybiBlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NQUdfRklMVEVSLHQpLHRoaXMuX21hZ0ZpbHRlcj10fX0sbWlwU2FtcGxlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaXNvU2FtcGxlc30sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2FuaXNvU2FtcGxlcztpZih0aGlzLl9hbmlzb1NhbXBsZXM9MHxNYXRoLm1heCh0LDEpLGUhPT10aGlzLl9hbmlzb1NhbXBsZXMpe3ZhciByPXRoaXMuZ2wuZ2V0RXh0ZW5zaW9uKFwiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljXCIpO3ImJnRoaXMuZ2wudGV4UGFyYW1ldGVyZih0aGlzLmdsLlRFWFRVUkVfMkQsci5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCx0aGlzLl9hbmlzb1NhbXBsZXMpfXJldHVybiB0aGlzLl9hbmlzb1NhbXBsZXN9fSx3cmFwUzp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyYXBTfSxzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5iaW5kKCksbC5pbmRleE9mKHQpPDApdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBVbmtub3duIHdyYXAgbW9kZSBcIit0KTtyZXR1cm4gdGhpcy5nbC50ZXhQYXJhbWV0ZXJpKHRoaXMuZ2wuVEVYVFVSRV8yRCx0aGlzLmdsLlRFWFRVUkVfV1JBUF9TLHQpLHRoaXMuX3dyYXBTPXR9fSx3cmFwVDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyYXBUfSxzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5iaW5kKCksbC5pbmRleE9mKHQpPDApdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBVbmtub3duIHdyYXAgbW9kZSBcIit0KTtyZXR1cm4gdGhpcy5nbC50ZXhQYXJhbWV0ZXJpKHRoaXMuZ2wuVEVYVFVSRV8yRCx0aGlzLmdsLlRFWFRVUkVfV1JBUF9ULHQpLHRoaXMuX3dyYXBUPXR9fSx3cmFwOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JhcFZlY3Rvcn0sc2V0OmZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCl8fCh0PVt0LHRdKSwyIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBNdXN0IHNwZWNpZnkgd3JhcCBtb2RlIGZvciByb3dzIGFuZCBjb2x1bW5zXCIpO2Zvcih2YXIgZT0wO2U8MjsrK2UpaWYobC5pbmRleE9mKHRbZV0pPDApdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBVbmtub3duIHdyYXAgbW9kZSBcIit0KTt0aGlzLl93cmFwUz10WzBdLHRoaXMuX3dyYXBUPXRbMV07dmFyIHI9dGhpcy5nbDtyZXR1cm4gdGhpcy5iaW5kKCksci50ZXhQYXJhbWV0ZXJpKHIuVEVYVFVSRV8yRCxyLlRFWFRVUkVfV1JBUF9TLHRoaXMuX3dyYXBTKSxyLnRleFBhcmFtZXRlcmkoci5URVhUVVJFXzJELHIuVEVYVFVSRV9XUkFQX1QsdGhpcy5fd3JhcFQpLHR9fSxzaGFwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NoYXBlVmVjdG9yfSxzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYoMiE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNoYXBlXCIpfWVsc2UgdD1bMHx0LDB8dF07cmV0dXJuIGgodGhpcywwfHRbMF0sMHx0WzFdKSxbMHx0WzBdLDB8dFsxXV19fSx3aWR0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NoYXBlWzBdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGgodGhpcyx0fD0wLHRoaXMuX3NoYXBlWzFdKSx0fX0saGVpZ2h0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2hhcGVbMV19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdHw9MCxoKHRoaXMsdGhpcy5fc2hhcGVbMF0sdCksdH19fSkscC5iaW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2w7cmV0dXJuIHZvaWQgMCE9PXQmJmUuYWN0aXZlVGV4dHVyZShlLlRFWFRVUkUwKygwfHQpKSxlLmJpbmRUZXh0dXJlKGUuVEVYVFVSRV8yRCx0aGlzLmhhbmRsZSksdm9pZCAwIT09dD8wfHQ6ZS5nZXRQYXJhbWV0ZXIoZS5BQ1RJVkVfVEVYVFVSRSktZS5URVhUVVJFMH0scC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5nbC5kZWxldGVUZXh0dXJlKHRoaXMuaGFuZGxlKX0scC5nZW5lcmF0ZU1pcG1hcD1mdW5jdGlvbigpe3RoaXMuYmluZCgpLHRoaXMuZ2wuZ2VuZXJhdGVNaXBtYXAodGhpcy5nbC5URVhUVVJFXzJEKTtmb3IodmFyIHQ9TWF0aC5taW4odGhpcy5fc2hhcGVbMF0sdGhpcy5fc2hhcGVbMV0pLGU9MDt0PjA7KytlLHQ+Pj49MSl0aGlzLl9taXBMZXZlbHMuaW5kZXhPZihlKTwwJiZ0aGlzLl9taXBMZXZlbHMucHVzaChlKX0scC5zZXRQaXhlbHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHM9dGhpcy5nbDt0aGlzLmJpbmQoKSxBcnJheS5pc0FycmF5KGUpPyhvPXIscj0wfGVbMV0sZT0wfGVbMF0pOihlPWV8fDAscj1yfHwwKSxvPW98fDA7dmFyIGw9Yyh0KT90OnQucmF3O2lmKGwpe3RoaXMuX21pcExldmVscy5pbmRleE9mKG8pPDA/KHMudGV4SW1hZ2UyRChzLlRFWFRVUkVfMkQsMCx0aGlzLmZvcm1hdCx0aGlzLmZvcm1hdCx0aGlzLnR5cGUsbCksdGhpcy5fbWlwTGV2ZWxzLnB1c2gobykpOnMudGV4U3ViSW1hZ2UyRChzLlRFWFRVUkVfMkQsbyxlLHIsdGhpcy5mb3JtYXQsdGhpcy50eXBlLGwpfWVsc2V7aWYoISh0LnNoYXBlJiZ0LnN0cmlkZSYmdC5kYXRhKSl0aHJvdyBuZXcgRXJyb3IoXCJnbC10ZXh0dXJlMmQ6IFVuc3VwcG9ydGVkIGRhdGEgdHlwZVwiKTtpZih0LnNoYXBlLmxlbmd0aDwyfHxlK3Quc2hhcGVbMV0+dGhpcy5fc2hhcGVbMV0+Pj5vfHxyK3Quc2hhcGVbMF0+dGhpcy5fc2hhcGVbMF0+Pj5vfHxlPDB8fHI8MCl0aHJvdyBuZXcgRXJyb3IoXCJnbC10ZXh0dXJlMmQ6IFRleHR1cmUgZGltZW5zaW9ucyBhcmUgb3V0IG9mIGJvdW5kc1wiKTshZnVuY3Rpb24odCxlLHIsbyxzLGwsYyxoKXt2YXIgZj1oLmR0eXBlLHA9aC5zaGFwZS5zbGljZSgpO2lmKHAubGVuZ3RoPDJ8fHAubGVuZ3RoPjMpdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIG5kYXJyYXksIG11c3QgYmUgMmQgb3IgM2RcIik7dmFyIGc9MCx2PTAsbT1kKHAsaC5zdHJpZGUuc2xpY2UoKSk7XCJmbG9hdDMyXCI9PT1mP2c9dC5GTE9BVDpcImZsb2F0NjRcIj09PWY/KGc9dC5GTE9BVCxtPSExLGY9XCJmbG9hdDMyXCIpOlwidWludDhcIj09PWY/Zz10LlVOU0lHTkVEX0JZVEU6KGc9dC5VTlNJR05FRF9CWVRFLG09ITEsZj1cInVpbnQ4XCIpO2lmKDI9PT1wLmxlbmd0aCl2PXQuTFVNSU5BTkNFLHA9W3BbMF0scFsxXSwxXSxoPW4oaC5kYXRhLHAsW2guc3RyaWRlWzBdLGguc3RyaWRlWzFdLDFdLGgub2Zmc2V0KTtlbHNle2lmKDMhPT1wLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgc2hhcGUgZm9yIHRleHR1cmVcIik7aWYoMT09PXBbMl0pdj10LkFMUEhBO2Vsc2UgaWYoMj09PXBbMl0pdj10LkxVTUlOQU5DRV9BTFBIQTtlbHNlIGlmKDM9PT1wWzJdKXY9dC5SR0I7ZWxzZXtpZig0IT09cFsyXSl0aHJvdyBuZXcgRXJyb3IoXCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgc2hhcGUgZm9yIHBpeGVsIGNvb3Jkc1wiKTt2PXQuUkdCQX1wWzJdfXYhPT10LkxVTUlOQU5DRSYmdiE9PXQuQUxQSEF8fHMhPT10LkxVTUlOQU5DRSYmcyE9PXQuQUxQSEF8fCh2PXMpO2lmKHYhPT1zKXRocm93IG5ldyBFcnJvcihcImdsLXRleHR1cmUyZDogSW5jb21wYXRpYmxlIHRleHR1cmUgZm9ybWF0IGZvciBzZXRQaXhlbHNcIik7dmFyIHk9aC5zaXplLHg9Yy5pbmRleE9mKG8pPDA7eCYmYy5wdXNoKG8pO2lmKGc9PT1sJiZtKTA9PT1oLm9mZnNldCYmaC5kYXRhLmxlbmd0aD09PXk/eD90LnRleEltYWdlMkQodC5URVhUVVJFXzJELG8scyxwWzBdLHBbMV0sMCxzLGwsaC5kYXRhKTp0LnRleFN1YkltYWdlMkQodC5URVhUVVJFXzJELG8sZSxyLHBbMF0scFsxXSxzLGwsaC5kYXRhKTp4P3QudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsbyxzLHBbMF0scFsxXSwwLHMsbCxoLmRhdGEuc3ViYXJyYXkoaC5vZmZzZXQsaC5vZmZzZXQreSkpOnQudGV4U3ViSW1hZ2UyRCh0LlRFWFRVUkVfMkQsbyxlLHIscFswXSxwWzFdLHMsbCxoLmRhdGEuc3ViYXJyYXkoaC5vZmZzZXQsaC5vZmZzZXQreSkpO2Vsc2V7dmFyIGI7Yj1sPT09dC5GTE9BVD9hLm1hbGxvY0Zsb2F0MzIoeSk6YS5tYWxsb2NVaW50OCh5KTt2YXIgXz1uKGIscCxbcFsyXSxwWzJdKnBbMF0sMV0pO2c9PT10LkZMT0FUJiZsPT09dC5VTlNJR05FRF9CWVRFP3UoXyxoKTppLmFzc2lnbihfLGgpLHg/dC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCxvLHMscFswXSxwWzFdLDAscyxsLGIuc3ViYXJyYXkoMCx5KSk6dC50ZXhTdWJJbWFnZTJEKHQuVEVYVFVSRV8yRCxvLGUscixwWzBdLHBbMV0scyxsLGIuc3ViYXJyYXkoMCx5KSksbD09PXQuRkxPQVQ/YS5mcmVlRmxvYXQzMihiKTphLmZyZWVVaW50OChiKX19KHMsZSxyLG8sdGhpcy5mb3JtYXQsdGhpcy50eXBlLHRoaXMuX21pcExldmVscyx0KX19fSx7bmRhcnJheTo0NDMsXCJuZGFycmF5LW9wc1wiOjQzNyxcInR5cGVkYXJyYXktcG9vbFwiOjUzMH1dLDMxNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJwaWNrLWJ5LWFsaWFzXCIpO2Z1bmN0aW9uIGkodCl7aWYodC5jb250YWluZXIpaWYodC5jb250YWluZXI9PWRvY3VtZW50LmJvZHkpZG9jdW1lbnQuYm9keS5zdHlsZS53aWR0aHx8KHQuY2FudmFzLndpZHRoPXQud2lkdGh8fHQucGl4ZWxSYXRpbyp3aW5kb3cuaW5uZXJXaWR0aCksZG9jdW1lbnQuYm9keS5zdHlsZS5oZWlnaHR8fCh0LmNhbnZhcy5oZWlnaHQ9dC5oZWlnaHR8fHQucGl4ZWxSYXRpbyp3aW5kb3cuaW5uZXJIZWlnaHQpO2Vsc2V7dmFyIGU9dC5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dC5jYW52YXMud2lkdGg9dC53aWR0aHx8ZS5yaWdodC1lLmxlZnQsdC5jYW52YXMuaGVpZ2h0PXQuaGVpZ2h0fHxlLmJvdHRvbS1lLnRvcH19ZnVuY3Rpb24gYSh0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmdldENvbnRleHQmJlwid2lkdGhcImluIHQmJlwiaGVpZ2h0XCJpbiB0fWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZTtpZih0P1wic3RyaW5nXCI9PXR5cGVvZiB0JiYodD17Y29udGFpbmVyOnR9KTp0PXt9LGEodCk/dD17Y29udGFpbmVyOnR9OnQ9XCJzdHJpbmdcIj09dHlwZW9mKGU9dCkubm9kZU5hbWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuYXBwZW5kQ2hpbGQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0P3tjb250YWluZXI6dH06ZnVuY3Rpb24odCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdC5kcmF3QXJyYXlzfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmRyYXdFbGVtZW50c30odCk/e2dsOnR9Om4odCx7Y29udGFpbmVyOlwiY29udGFpbmVyIHRhcmdldCBlbGVtZW50IGVsIGNhbnZhcyBob2xkZXIgcGFyZW50IHBhcmVudE5vZGUgd3JhcHBlciB1c2UgcmVmIHJvb3Qgbm9kZVwiLGdsOlwiZ2wgY29udGV4dCB3ZWJnbCBnbENvbnRleHRcIixhdHRyczpcImF0dHJpYnV0ZXMgYXR0cnMgY29udGV4dEF0dHJpYnV0ZXNcIixwaXhlbFJhdGlvOlwicGl4ZWxSYXRpbyBweFJhdGlvIHB4IHJhdGlvIHB4cmF0aW8gcGl4ZWxyYXRpb1wifSwhMCksdC5waXhlbFJhdGlvfHwodC5waXhlbFJhdGlvPXdpbmRvdy5waXhlbFJhdGlvfHwxKSx0LmdsKXJldHVybiB0LmdsO2lmKHQuY2FudmFzJiYodC5jb250YWluZXI9dC5jYW52YXMucGFyZW50Tm9kZSksdC5jb250YWluZXIpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0LmNvbnRhaW5lcil7dmFyIHI9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0LmNvbnRhaW5lcik7aWYoIXIpdGhyb3cgRXJyb3IoXCJFbGVtZW50IFwiK3QuY29udGFpbmVyK1wiIGlzIG5vdCBmb3VuZFwiKTt0LmNvbnRhaW5lcj1yfWEodC5jb250YWluZXIpPyh0LmNhbnZhcz10LmNvbnRhaW5lcix0LmNvbnRhaW5lcj10LmNhbnZhcy5wYXJlbnROb2RlKTp0LmNhbnZhc3x8KHQuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksdC5jb250YWluZXIuYXBwZW5kQ2hpbGQodC5jYW52YXMpLGkodCkpfWVsc2UgdC5jYW52YXN8fCh0LmNvbnRhaW5lcj1kb2N1bWVudC5ib2R5fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsdC5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSx0LmNhbnZhcy5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsdC5jYW52YXMuc3R5bGUudG9wPTAsdC5jYW52YXMuc3R5bGUubGVmdD0wLHQuY29udGFpbmVyLmFwcGVuZENoaWxkKHQuY2FudmFzKSxpKHQpKTtpZighdC5nbCl0cnl7dC5nbD10LmNhbnZhcy5nZXRDb250ZXh0KFwid2ViZ2xcIix0LmF0dHJzKX1jYXRjaChlKXt0cnl7dC5nbD10LmNhbnZhcy5nZXRDb250ZXh0KFwiZXhwZXJpbWVudGFsLXdlYmdsXCIsdC5hdHRycyl9Y2F0Y2goZSl7dC5nbD10LmNhbnZhcy5nZXRDb250ZXh0KFwid2ViZ2wtZXhwZXJpbWVudGFsXCIsdC5hdHRycyl9fXJldHVybiB0LmdsfX0se1wicGljay1ieS1hbGlhc1wiOjQ1OH1dLDMxNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZT9lLmJpbmQoKTp0LmJpbmRCdWZmZXIodC5FTEVNRU5UX0FSUkFZX0JVRkZFUixudWxsKTt2YXIgbj0wfHQuZ2V0UGFyYW1ldGVyKHQuTUFYX1ZFUlRFWF9BVFRSSUJTKTtpZihyKXtpZihyLmxlbmd0aD5uKXRocm93IG5ldyBFcnJvcihcImdsLXZhbzogVG9vIG1hbnkgdmVydGV4IGF0dHJpYnV0ZXNcIik7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDsrK2kpe3ZhciBhPXJbaV07aWYoYS5idWZmZXIpe3ZhciBvPWEuYnVmZmVyLHM9YS5zaXplfHw0LGw9YS50eXBlfHx0LkZMT0FULGM9ISFhLm5vcm1hbGl6ZWQsdT1hLnN0cmlkZXx8MCxoPWEub2Zmc2V0fHwwO28uYmluZCgpLHQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSksdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGkscyxsLGMsdSxoKX1lbHNle2lmKFwibnVtYmVyXCI9PXR5cGVvZiBhKXQudmVydGV4QXR0cmliMWYoaSxhKTtlbHNlIGlmKDE9PT1hLmxlbmd0aCl0LnZlcnRleEF0dHJpYjFmKGksYVswXSk7ZWxzZSBpZigyPT09YS5sZW5ndGgpdC52ZXJ0ZXhBdHRyaWIyZihpLGFbMF0sYVsxXSk7ZWxzZSBpZigzPT09YS5sZW5ndGgpdC52ZXJ0ZXhBdHRyaWIzZihpLGFbMF0sYVsxXSxhWzJdKTtlbHNle2lmKDQhPT1hLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJnbC12YW86IEludmFsaWQgdmVydGV4IGF0dHJpYnV0ZVwiKTt0LnZlcnRleEF0dHJpYjRmKGksYVswXSxhWzFdLGFbMl0sYVszXSl9dC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSl9fWZvcig7aTxuOysraSl0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKX1lbHNlIGZvcih0LmJpbmRCdWZmZXIodC5BUlJBWV9CVUZGRVIsbnVsbCksaT0wO2k8bjsrK2kpdC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSl9fSx7fV0sMzE4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vZG8tYmluZC5qc1wiKTtmdW5jdGlvbiBpKHQpe3RoaXMuZ2w9dCx0aGlzLl9lbGVtZW50cz1udWxsLHRoaXMuX2F0dHJpYnV0ZXM9bnVsbCx0aGlzLl9lbGVtZW50c1R5cGU9dC5VTlNJR05FRF9TSE9SVH1pLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7bih0aGlzLmdsLHRoaXMuX2VsZW1lbnRzLHRoaXMuX2F0dHJpYnV0ZXMpfSxpLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX2VsZW1lbnRzPWUsdGhpcy5fYXR0cmlidXRlcz10LHRoaXMuX2VsZW1lbnRzVHlwZT1yfHx0aGlzLmdsLlVOU0lHTkVEX1NIT1JUfSxpLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7fSxpLnByb3RvdHlwZS51bmJpbmQ9ZnVuY3Rpb24oKXt9LGkucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxlLHIpe3I9cnx8MDt2YXIgbj10aGlzLmdsO3RoaXMuX2VsZW1lbnRzP24uZHJhd0VsZW1lbnRzKHQsZSx0aGlzLl9lbGVtZW50c1R5cGUscik6bi5kcmF3QXJyYXlzKHQscixlKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaSh0KX19LHtcIi4vZG8tYmluZC5qc1wiOjMxN31dLDMxOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2RvLWJpbmQuanNcIik7ZnVuY3Rpb24gaSh0LGUscixuLGksYSl7dGhpcy5sb2NhdGlvbj10LHRoaXMuZGltZW5zaW9uPWUsdGhpcy5hPXIsdGhpcy5iPW4sdGhpcy5jPWksdGhpcy5kPWF9ZnVuY3Rpb24gYSh0LGUscil7dGhpcy5nbD10LHRoaXMuX2V4dD1lLHRoaXMuaGFuZGxlPXIsdGhpcy5fYXR0cmlicz1bXSx0aGlzLl91c2VFbGVtZW50cz0hMSx0aGlzLl9lbGVtZW50c1R5cGU9dC5VTlNJR05FRF9TSE9SVH1pLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQpe3N3aXRjaCh0aGlzLmRpbWVuc2lvbil7Y2FzZSAxOnQudmVydGV4QXR0cmliMWYodGhpcy5sb2NhdGlvbix0aGlzLmEpO2JyZWFrO2Nhc2UgMjp0LnZlcnRleEF0dHJpYjJmKHRoaXMubG9jYXRpb24sdGhpcy5hLHRoaXMuYik7YnJlYWs7Y2FzZSAzOnQudmVydGV4QXR0cmliM2YodGhpcy5sb2NhdGlvbix0aGlzLmEsdGhpcy5iLHRoaXMuYyk7YnJlYWs7Y2FzZSA0OnQudmVydGV4QXR0cmliNGYodGhpcy5sb2NhdGlvbix0aGlzLmEsdGhpcy5iLHRoaXMuYyx0aGlzLmQpfX0sYS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe3RoaXMuX2V4dC5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5oYW5kbGUpO2Zvcih2YXIgdD0wO3Q8dGhpcy5fYXR0cmlicy5sZW5ndGg7Kyt0KXRoaXMuX2F0dHJpYnNbdF0uYmluZCh0aGlzLmdsKX0sYS5wcm90b3R5cGUudW5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5fZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKX0sYS5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX2V4dC5kZWxldGVWZXJ0ZXhBcnJheU9FUyh0aGlzLmhhbmRsZSl9LGEucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7aWYodGhpcy5iaW5kKCksbih0aGlzLmdsLGUsdCksdGhpcy51bmJpbmQoKSx0aGlzLl9hdHRyaWJzLmxlbmd0aD0wLHQpZm9yKHZhciBhPTA7YTx0Lmxlbmd0aDsrK2Epe3ZhciBvPXRbYV07XCJudW1iZXJcIj09dHlwZW9mIG8/dGhpcy5fYXR0cmlicy5wdXNoKG5ldyBpKGEsMSxvKSk6QXJyYXkuaXNBcnJheShvKSYmdGhpcy5fYXR0cmlicy5wdXNoKG5ldyBpKGEsby5sZW5ndGgsb1swXSxvWzFdLG9bMl0sb1szXSkpfXRoaXMuX3VzZUVsZW1lbnRzPSEhZSx0aGlzLl9lbGVtZW50c1R5cGU9cnx8dGhpcy5nbC5VTlNJR05FRF9TSE9SVH0sYS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0LGUscil7cj1yfHwwO3ZhciBuPXRoaXMuZ2w7dGhpcy5fdXNlRWxlbWVudHM/bi5kcmF3RWxlbWVudHModCxlLHRoaXMuX2VsZW1lbnRzVHlwZSxyKTpuLmRyYXdBcnJheXModCxyLGUpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGEodCxlLGUuY3JlYXRlVmVydGV4QXJyYXlPRVMoKSl9fSx7XCIuL2RvLWJpbmQuanNcIjozMTd9XSwzMjA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9saWIvdmFvLW5hdGl2ZS5qc1wiKSxpPXQoXCIuL2xpYi92YW8tZW11bGF0ZWQuanNcIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmJpbmRWZXJ0ZXhBcnJheU9FUz10LmJpbmRWZXJ0ZXhBcnJheS5iaW5kKHQpLHRoaXMuY3JlYXRlVmVydGV4QXJyYXlPRVM9dC5jcmVhdGVWZXJ0ZXhBcnJheS5iaW5kKHQpLHRoaXMuZGVsZXRlVmVydGV4QXJyYXlPRVM9dC5kZWxldGVWZXJ0ZXhBcnJheS5iaW5kKHQpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcyxsPXQuY3JlYXRlVmVydGV4QXJyYXk/bmV3IGEodCk6dC5nZXRFeHRlbnNpb24oXCJPRVNfdmVydGV4X2FycmF5X29iamVjdFwiKTtyZXR1cm4ocz1sP24odCxsKTppKHQpKS51cGRhdGUoZSxyLG8pLHN9fSx7XCIuL2xpYi92YW8tZW11bGF0ZWQuanNcIjozMTgsXCIuL2xpYi92YW8tbmF0aXZlLmpzXCI6MzE5fV0sMzIxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdK3JbMF0sdFsxXT1lWzFdK3JbMV0sdFsyXT1lWzJdK3JbMl0sdH19LHt9XSwzMjI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKHRbMF0sdFsxXSx0WzJdKSxvPW4oZVswXSxlWzFdLGVbMl0pO2kocixyKSxpKG8sbyk7dmFyIHM9YShyLG8pO3JldHVybiBzPjE/MDpNYXRoLmFjb3Mocyl9O3ZhciBuPXQoXCIuL2Zyb21WYWx1ZXNcIiksaT10KFwiLi9ub3JtYWxpemVcIiksYT10KFwiLi9kb3RcIil9LHtcIi4vZG90XCI6MzMyLFwiLi9mcm9tVmFsdWVzXCI6MzM4LFwiLi9ub3JtYWxpemVcIjozNDl9XSwzMjM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1NYXRoLmNlaWwoZVswXSksdFsxXT1NYXRoLmNlaWwoZVsxXSksdFsyXT1NYXRoLmNlaWwoZVsyXSksdH19LHt9XSwzMjQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEZsb2F0MzJBcnJheSgzKTtyZXR1cm4gZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZX19LHt9XSwzMjU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdH19LHt9XSwzMjY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgRmxvYXQzMkFycmF5KDMpO3JldHVybiB0WzBdPTAsdFsxXT0wLHRbMl09MCx0fX0se31dLDMyNzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89clswXSxzPXJbMV0sbD1yWzJdO3JldHVybiB0WzBdPWkqbC1hKnMsdFsxXT1hKm8tbipsLHRbMl09bipzLWkqbyx0fX0se31dLDMyODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KFwiLi9kaXN0YW5jZVwiKX0se1wiLi9kaXN0YW5jZVwiOjMyOX1dLDMyOTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0tdFswXSxuPWVbMV0tdFsxXSxpPWVbMl0tdFsyXTtyZXR1cm4gTWF0aC5zcXJ0KHIqcituKm4raSppKX19LHt9XSwzMzA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dChcIi4vZGl2aWRlXCIpfSx7XCIuL2RpdmlkZVwiOjMzMX1dLDMzMTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXS9yWzBdLHRbMV09ZVsxXS9yWzFdLHRbMl09ZVsyXS9yWzJdLHR9fSx7fV0sMzMyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdfX0se31dLDMzMzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz0xZS02fSx7fV0sMzM0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxpPXRbMV0sYT10WzJdLG89ZVswXSxzPWVbMV0sbD1lWzJdO3JldHVybiBNYXRoLmFicyhyLW8pPD1uKk1hdGgubWF4KDEsTWF0aC5hYnMociksTWF0aC5hYnMobykpJiZNYXRoLmFicyhpLXMpPD1uKk1hdGgubWF4KDEsTWF0aC5hYnMoaSksTWF0aC5hYnMocykpJiZNYXRoLmFicyhhLWwpPD1uKk1hdGgubWF4KDEsTWF0aC5hYnMoYSksTWF0aC5hYnMobCkpfTt2YXIgbj10KFwiLi9lcHNpbG9uXCIpfSx7XCIuL2Vwc2lsb25cIjozMzN9XSwzMzU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT09PWVbMF0mJnRbMV09PT1lWzFdJiZ0WzJdPT09ZVsyXX19LHt9XSwzMzY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1NYXRoLmZsb29yKGVbMF0pLHRbMV09TWF0aC5mbG9vcihlWzFdKSx0WzJdPU1hdGguZmxvb3IoZVsyXSksdH19LHt9XSwzMzc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSxhLG8pe3ZhciBzLGw7ZXx8KGU9Myk7cnx8KHI9MCk7bD1pP01hdGgubWluKGkqZStyLHQubGVuZ3RoKTp0Lmxlbmd0aDtmb3Iocz1yO3M8bDtzKz1lKW5bMF09dFtzXSxuWzFdPXRbcysxXSxuWzJdPXRbcysyXSxhKG4sbixvKSx0W3NdPW5bMF0sdFtzKzFdPW5bMV0sdFtzKzJdPW5bMl07cmV0dXJuIHR9O3ZhciBuPXQoXCIuL2NyZWF0ZVwiKSgpfSx7XCIuL2NyZWF0ZVwiOjMyNn1dLDMzODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IEZsb2F0MzJBcnJheSgzKTtyZXR1cm4gblswXT10LG5bMV09ZSxuWzJdPXIsbn19LHt9XSwzMzk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e0VQU0lMT046dChcIi4vZXBzaWxvblwiKSxjcmVhdGU6dChcIi4vY3JlYXRlXCIpLGNsb25lOnQoXCIuL2Nsb25lXCIpLGFuZ2xlOnQoXCIuL2FuZ2xlXCIpLGZyb21WYWx1ZXM6dChcIi4vZnJvbVZhbHVlc1wiKSxjb3B5OnQoXCIuL2NvcHlcIiksc2V0OnQoXCIuL3NldFwiKSxlcXVhbHM6dChcIi4vZXF1YWxzXCIpLGV4YWN0RXF1YWxzOnQoXCIuL2V4YWN0RXF1YWxzXCIpLGFkZDp0KFwiLi9hZGRcIiksc3VidHJhY3Q6dChcIi4vc3VidHJhY3RcIiksc3ViOnQoXCIuL3N1YlwiKSxtdWx0aXBseTp0KFwiLi9tdWx0aXBseVwiKSxtdWw6dChcIi4vbXVsXCIpLGRpdmlkZTp0KFwiLi9kaXZpZGVcIiksZGl2OnQoXCIuL2RpdlwiKSxtaW46dChcIi4vbWluXCIpLG1heDp0KFwiLi9tYXhcIiksZmxvb3I6dChcIi4vZmxvb3JcIiksY2VpbDp0KFwiLi9jZWlsXCIpLHJvdW5kOnQoXCIuL3JvdW5kXCIpLHNjYWxlOnQoXCIuL3NjYWxlXCIpLHNjYWxlQW5kQWRkOnQoXCIuL3NjYWxlQW5kQWRkXCIpLGRpc3RhbmNlOnQoXCIuL2Rpc3RhbmNlXCIpLGRpc3Q6dChcIi4vZGlzdFwiKSxzcXVhcmVkRGlzdGFuY2U6dChcIi4vc3F1YXJlZERpc3RhbmNlXCIpLHNxckRpc3Q6dChcIi4vc3FyRGlzdFwiKSxsZW5ndGg6dChcIi4vbGVuZ3RoXCIpLGxlbjp0KFwiLi9sZW5cIiksc3F1YXJlZExlbmd0aDp0KFwiLi9zcXVhcmVkTGVuZ3RoXCIpLHNxckxlbjp0KFwiLi9zcXJMZW5cIiksbmVnYXRlOnQoXCIuL25lZ2F0ZVwiKSxpbnZlcnNlOnQoXCIuL2ludmVyc2VcIiksbm9ybWFsaXplOnQoXCIuL25vcm1hbGl6ZVwiKSxkb3Q6dChcIi4vZG90XCIpLGNyb3NzOnQoXCIuL2Nyb3NzXCIpLGxlcnA6dChcIi4vbGVycFwiKSxyYW5kb206dChcIi4vcmFuZG9tXCIpLHRyYW5zZm9ybU1hdDQ6dChcIi4vdHJhbnNmb3JtTWF0NFwiKSx0cmFuc2Zvcm1NYXQzOnQoXCIuL3RyYW5zZm9ybU1hdDNcIiksdHJhbnNmb3JtUXVhdDp0KFwiLi90cmFuc2Zvcm1RdWF0XCIpLHJvdGF0ZVg6dChcIi4vcm90YXRlWFwiKSxyb3RhdGVZOnQoXCIuL3JvdGF0ZVlcIikscm90YXRlWjp0KFwiLi9yb3RhdGVaXCIpLGZvckVhY2g6dChcIi4vZm9yRWFjaFwiKX19LHtcIi4vYWRkXCI6MzIxLFwiLi9hbmdsZVwiOjMyMixcIi4vY2VpbFwiOjMyMyxcIi4vY2xvbmVcIjozMjQsXCIuL2NvcHlcIjozMjUsXCIuL2NyZWF0ZVwiOjMyNixcIi4vY3Jvc3NcIjozMjcsXCIuL2Rpc3RcIjozMjgsXCIuL2Rpc3RhbmNlXCI6MzI5LFwiLi9kaXZcIjozMzAsXCIuL2RpdmlkZVwiOjMzMSxcIi4vZG90XCI6MzMyLFwiLi9lcHNpbG9uXCI6MzMzLFwiLi9lcXVhbHNcIjozMzQsXCIuL2V4YWN0RXF1YWxzXCI6MzM1LFwiLi9mbG9vclwiOjMzNixcIi4vZm9yRWFjaFwiOjMzNyxcIi4vZnJvbVZhbHVlc1wiOjMzOCxcIi4vaW52ZXJzZVwiOjM0MCxcIi4vbGVuXCI6MzQxLFwiLi9sZW5ndGhcIjozNDIsXCIuL2xlcnBcIjozNDMsXCIuL21heFwiOjM0NCxcIi4vbWluXCI6MzQ1LFwiLi9tdWxcIjozNDYsXCIuL211bHRpcGx5XCI6MzQ3LFwiLi9uZWdhdGVcIjozNDgsXCIuL25vcm1hbGl6ZVwiOjM0OSxcIi4vcmFuZG9tXCI6MzUwLFwiLi9yb3RhdGVYXCI6MzUxLFwiLi9yb3RhdGVZXCI6MzUyLFwiLi9yb3RhdGVaXCI6MzUzLFwiLi9yb3VuZFwiOjM1NCxcIi4vc2NhbGVcIjozNTUsXCIuL3NjYWxlQW5kQWRkXCI6MzU2LFwiLi9zZXRcIjozNTcsXCIuL3NxckRpc3RcIjozNTgsXCIuL3NxckxlblwiOjM1OSxcIi4vc3F1YXJlZERpc3RhbmNlXCI6MzYwLFwiLi9zcXVhcmVkTGVuZ3RoXCI6MzYxLFwiLi9zdWJcIjozNjIsXCIuL3N1YnRyYWN0XCI6MzYzLFwiLi90cmFuc2Zvcm1NYXQzXCI6MzY0LFwiLi90cmFuc2Zvcm1NYXQ0XCI6MzY1LFwiLi90cmFuc2Zvcm1RdWF0XCI6MzY2fV0sMzQwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09MS9lWzBdLHRbMV09MS9lWzFdLHRbMl09MS9lWzJdLHR9fSx7fV0sMzQxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoXCIuL2xlbmd0aFwiKX0se1wiLi9sZW5ndGhcIjozNDJ9XSwzNDI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdO3JldHVybiBNYXRoLnNxcnQoZSplK3IqcituKm4pfX0se31dLDM0MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lWzBdLGE9ZVsxXSxvPWVbMl07cmV0dXJuIHRbMF09aStuKihyWzBdLWkpLHRbMV09YStuKihyWzFdLWEpLHRbMl09bytuKihyWzJdLW8pLHR9fSx7fV0sMzQ0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1heChlWzBdLHJbMF0pLHRbMV09TWF0aC5tYXgoZVsxXSxyWzFdKSx0WzJdPU1hdGgubWF4KGVbMl0sclsyXSksdH19LHt9XSwzNDU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPU1hdGgubWluKGVbMF0sclswXSksdFsxXT1NYXRoLm1pbihlWzFdLHJbMV0pLHRbMl09TWF0aC5taW4oZVsyXSxyWzJdKSx0fX0se31dLDM0NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KFwiLi9tdWx0aXBseVwiKX0se1wiLi9tdWx0aXBseVwiOjM0N31dLDM0NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXSpyWzBdLHRbMV09ZVsxXSpyWzFdLHRbMl09ZVsyXSpyWzJdLHR9fSx7fV0sMzQ4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09LWVbMF0sdFsxXT0tZVsxXSx0WzJdPS1lWzJdLHR9fSx7fV0sMzQ5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9cipyK24qbitpKmk7YT4wJiYoYT0xL01hdGguc3FydChhKSx0WzBdPWVbMF0qYSx0WzFdPWVbMV0qYSx0WzJdPWVbMl0qYSk7cmV0dXJuIHR9fSx7fV0sMzUwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHwxO3ZhciByPTIqTWF0aC5yYW5kb20oKSpNYXRoLlBJLG49MipNYXRoLnJhbmRvbSgpLTEsaT1NYXRoLnNxcnQoMS1uKm4pKmU7cmV0dXJuIHRbMF09TWF0aC5jb3MocikqaSx0WzFdPU1hdGguc2luKHIpKmksdFsyXT1uKmUsdH19LHt9XSwzNTE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9clsxXSxhPXJbMl0sbz1lWzFdLWkscz1lWzJdLWEsbD1NYXRoLnNpbihuKSxjPU1hdGguY29zKG4pO3JldHVybiB0WzBdPWVbMF0sdFsxXT1pK28qYy1zKmwsdFsyXT1hK28qbCtzKmMsdH19LHt9XSwzNTI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9clswXSxhPXJbMl0sbz1lWzBdLWkscz1lWzJdLWEsbD1NYXRoLnNpbihuKSxjPU1hdGguY29zKG4pO3JldHVybiB0WzBdPWkrcypsK28qYyx0WzFdPWVbMV0sdFsyXT1hK3MqYy1vKmwsdH19LHt9XSwzNTM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9clswXSxhPXJbMV0sbz1lWzBdLWkscz1lWzFdLWEsbD1NYXRoLnNpbihuKSxjPU1hdGguY29zKG4pO3JldHVybiB0WzBdPWkrbypjLXMqbCx0WzFdPWErbypsK3MqYyx0WzJdPWVbMl0sdH19LHt9XSwzNTQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1NYXRoLnJvdW5kKGVbMF0pLHRbMV09TWF0aC5yb3VuZChlWzFdKSx0WzJdPU1hdGgucm91bmQoZVsyXSksdH19LHt9XSwzNTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qcix0WzFdPWVbMV0qcix0WzJdPWVbMl0qcix0fX0se31dLDM1NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdFswXT1lWzBdK3JbMF0qbix0WzFdPWVbMV0rclsxXSpuLHRbMl09ZVsyXStyWzJdKm4sdH19LHt9XSwzNTc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRbMF09ZSx0WzFdPXIsdFsyXT1uLHR9fSx7fV0sMzU4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoXCIuL3NxdWFyZWREaXN0YW5jZVwiKX0se1wiLi9zcXVhcmVkRGlzdGFuY2VcIjozNjB9XSwzNTk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dChcIi4vc3F1YXJlZExlbmd0aFwiKX0se1wiLi9zcXVhcmVkTGVuZ3RoXCI6MzYxfV0sMzYwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdLGk9ZVsyXS10WzJdO3JldHVybiByKnIrbipuK2kqaX19LHt9XSwzNjE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdO3JldHVybiBlKmUrcipyK24qbn19LHt9XSwzNjI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dChcIi4vc3VidHJhY3RcIil9LHtcIi4vc3VidHJhY3RcIjozNjN9XSwzNjM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0tclswXSx0WzFdPWVbMV0tclsxXSx0WzJdPWVbMl0tclsyXSx0fX0se31dLDM2NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdO3JldHVybiB0WzBdPW4qclswXStpKnJbM10rYSpyWzZdLHRbMV09bipyWzFdK2kqcls0XSthKnJbN10sdFsyXT1uKnJbMl0raSpyWzVdK2Eqcls4XSx0fX0se31dLDM2NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89clszXSpuK3JbN10qaStyWzExXSphK3JbMTVdO3JldHVybiBvPW98fDEsdFswXT0oclswXSpuK3JbNF0qaStyWzhdKmErclsxMl0pL28sdFsxXT0oclsxXSpuK3JbNV0qaStyWzldKmErclsxM10pL28sdFsyXT0oclsyXSpuK3JbNl0qaStyWzEwXSphK3JbMTRdKS9vLHR9fSx7fV0sMzY2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1yWzBdLHM9clsxXSxsPXJbMl0sYz1yWzNdLHU9YypuK3MqYS1sKmksaD1jKmkrbCpuLW8qYSxmPWMqYStvKmktcypuLHA9LW8qbi1zKmktbCphO3JldHVybiB0WzBdPXUqYytwKi1vK2gqLWwtZiotcyx0WzFdPWgqYytwKi1zK2YqLW8tdSotbCx0WzJdPWYqYytwKi1sK3UqLXMtaCotbyx0fX0se31dLDM2NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXStyWzBdLHRbMV09ZVsxXStyWzFdLHRbMl09ZVsyXStyWzJdLHRbM109ZVszXStyWzNdLHR9fSx7fV0sMzY4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBGbG9hdDMyQXJyYXkoNCk7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlfX0se31dLDM2OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdH19LHt9XSwzNzA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgRmxvYXQzMkFycmF5KDQpO3JldHVybiB0WzBdPTAsdFsxXT0wLHRbMl09MCx0WzNdPTAsdH19LHt9XSwzNzE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLXRbMF0sbj1lWzFdLXRbMV0saT1lWzJdLXRbMl0sYT1lWzNdLXRbM107cmV0dXJuIE1hdGguc3FydChyKnIrbipuK2kqaSthKmEpfX0se31dLDM3MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXS9yWzBdLHRbMV09ZVsxXS9yWzFdLHRbMl09ZVsyXS9yWzJdLHRbM109ZVszXS9yWzNdLHR9fSx7fV0sMzczOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdK3RbM10qZVszXX19LHt9XSwzNzQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bmV3IEZsb2F0MzJBcnJheSg0KTtyZXR1cm4gaVswXT10LGlbMV09ZSxpWzJdPXIsaVszXT1uLGl9fSx7fV0sMzc1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXtjcmVhdGU6dChcIi4vY3JlYXRlXCIpLGNsb25lOnQoXCIuL2Nsb25lXCIpLGZyb21WYWx1ZXM6dChcIi4vZnJvbVZhbHVlc1wiKSxjb3B5OnQoXCIuL2NvcHlcIiksc2V0OnQoXCIuL3NldFwiKSxhZGQ6dChcIi4vYWRkXCIpLHN1YnRyYWN0OnQoXCIuL3N1YnRyYWN0XCIpLG11bHRpcGx5OnQoXCIuL211bHRpcGx5XCIpLGRpdmlkZTp0KFwiLi9kaXZpZGVcIiksbWluOnQoXCIuL21pblwiKSxtYXg6dChcIi4vbWF4XCIpLHNjYWxlOnQoXCIuL3NjYWxlXCIpLHNjYWxlQW5kQWRkOnQoXCIuL3NjYWxlQW5kQWRkXCIpLGRpc3RhbmNlOnQoXCIuL2Rpc3RhbmNlXCIpLHNxdWFyZWREaXN0YW5jZTp0KFwiLi9zcXVhcmVkRGlzdGFuY2VcIiksbGVuZ3RoOnQoXCIuL2xlbmd0aFwiKSxzcXVhcmVkTGVuZ3RoOnQoXCIuL3NxdWFyZWRMZW5ndGhcIiksbmVnYXRlOnQoXCIuL25lZ2F0ZVwiKSxpbnZlcnNlOnQoXCIuL2ludmVyc2VcIiksbm9ybWFsaXplOnQoXCIuL25vcm1hbGl6ZVwiKSxkb3Q6dChcIi4vZG90XCIpLGxlcnA6dChcIi4vbGVycFwiKSxyYW5kb206dChcIi4vcmFuZG9tXCIpLHRyYW5zZm9ybU1hdDQ6dChcIi4vdHJhbnNmb3JtTWF0NFwiKSx0cmFuc2Zvcm1RdWF0OnQoXCIuL3RyYW5zZm9ybVF1YXRcIil9fSx7XCIuL2FkZFwiOjM2NyxcIi4vY2xvbmVcIjozNjgsXCIuL2NvcHlcIjozNjksXCIuL2NyZWF0ZVwiOjM3MCxcIi4vZGlzdGFuY2VcIjozNzEsXCIuL2RpdmlkZVwiOjM3MixcIi4vZG90XCI6MzczLFwiLi9mcm9tVmFsdWVzXCI6Mzc0LFwiLi9pbnZlcnNlXCI6Mzc2LFwiLi9sZW5ndGhcIjozNzcsXCIuL2xlcnBcIjozNzgsXCIuL21heFwiOjM3OSxcIi4vbWluXCI6MzgwLFwiLi9tdWx0aXBseVwiOjM4MSxcIi4vbmVnYXRlXCI6MzgyLFwiLi9ub3JtYWxpemVcIjozODMsXCIuL3JhbmRvbVwiOjM4NCxcIi4vc2NhbGVcIjozODUsXCIuL3NjYWxlQW5kQWRkXCI6Mzg2LFwiLi9zZXRcIjozODcsXCIuL3NxdWFyZWREaXN0YW5jZVwiOjM4OCxcIi4vc3F1YXJlZExlbmd0aFwiOjM4OSxcIi4vc3VidHJhY3RcIjozOTAsXCIuL3RyYW5zZm9ybU1hdDRcIjozOTEsXCIuL3RyYW5zZm9ybVF1YXRcIjozOTJ9XSwzNzY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0xL2VbMF0sdFsxXT0xL2VbMV0sdFsyXT0xL2VbMl0sdFszXT0xL2VbM10sdH19LHt9XSwzNzc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdLGk9dFszXTtyZXR1cm4gTWF0aC5zcXJ0KGUqZStyKnIrbipuK2kqaSl9fSx7fV0sMzc4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWVbMF0sYT1lWzFdLG89ZVsyXSxzPWVbM107cmV0dXJuIHRbMF09aStuKihyWzBdLWkpLHRbMV09YStuKihyWzFdLWEpLHRbMl09bytuKihyWzJdLW8pLHRbM109cytuKihyWzNdLXMpLHR9fSx7fV0sMzc5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1heChlWzBdLHJbMF0pLHRbMV09TWF0aC5tYXgoZVsxXSxyWzFdKSx0WzJdPU1hdGgubWF4KGVbMl0sclsyXSksdFszXT1NYXRoLm1heChlWzNdLHJbM10pLHR9fSx7fV0sMzgwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1pbihlWzBdLHJbMF0pLHRbMV09TWF0aC5taW4oZVsxXSxyWzFdKSx0WzJdPU1hdGgubWluKGVbMl0sclsyXSksdFszXT1NYXRoLm1pbihlWzNdLHJbM10pLHR9fSx7fV0sMzgxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnJbMF0sdFsxXT1lWzFdKnJbMV0sdFsyXT1lWzJdKnJbMl0sdFszXT1lWzNdKnJbM10sdH19LHt9XSwzODI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0tZVswXSx0WzFdPS1lWzFdLHRbMl09LWVbMl0sdFszXT0tZVszXSx0fX0se31dLDM4MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1yKnIrbipuK2kqaSthKmE7bz4wJiYobz0xL01hdGguc3FydChvKSx0WzBdPXIqbyx0WzFdPW4qbyx0WzJdPWkqbyx0WzNdPWEqbyk7cmV0dXJuIHR9fSx7fV0sMzg0OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcIi4vbm9ybWFsaXplXCIpLGk9dChcIi4vc2NhbGVcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9ZXx8MSx0WzBdPU1hdGgucmFuZG9tKCksdFsxXT1NYXRoLnJhbmRvbSgpLHRbMl09TWF0aC5yYW5kb20oKSx0WzNdPU1hdGgucmFuZG9tKCksbih0LHQpLGkodCx0LGUpLHR9fSx7XCIuL25vcm1hbGl6ZVwiOjM4MyxcIi4vc2NhbGVcIjozODV9XSwzODU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qcix0WzFdPWVbMV0qcix0WzJdPWVbMl0qcix0WzNdPWVbM10qcix0fX0se31dLDM4NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdFswXT1lWzBdK3JbMF0qbix0WzFdPWVbMV0rclsxXSpuLHRbMl09ZVsyXStyWzJdKm4sdFszXT1lWzNdK3JbM10qbix0fX0se31dLDM4NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybiB0WzBdPWUsdFsxXT1yLHRbMl09bix0WzNdPWksdH19LHt9XSwzODg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLXRbMF0sbj1lWzFdLXRbMV0saT1lWzJdLXRbMl0sYT1lWzNdLXRbM107cmV0dXJuIHIqcituKm4raSppK2EqYX19LHt9XSwzODk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdLGk9dFszXTtyZXR1cm4gZSplK3IqcituKm4raSppfX0se31dLDM5MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXS1yWzBdLHRbMV09ZVsxXS1yWzFdLHRbMl09ZVsyXS1yWzJdLHRbM109ZVszXS1yWzNdLHR9fSx7fV0sMzkxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdO3JldHVybiB0WzBdPXJbMF0qbityWzRdKmkrcls4XSphK3JbMTJdKm8sdFsxXT1yWzFdKm4rcls1XSppK3JbOV0qYStyWzEzXSpvLHRbMl09clsyXSpuK3JbNl0qaStyWzEwXSphK3JbMTRdKm8sdFszXT1yWzNdKm4rcls3XSppK3JbMTFdKmErclsxNV0qbyx0fX0se31dLDM5MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89clswXSxzPXJbMV0sbD1yWzJdLGM9clszXSx1PWMqbitzKmEtbCppLGg9YyppK2wqbi1vKmEsZj1jKmErbyppLXMqbixwPS1vKm4tcyppLWwqYTtyZXR1cm4gdFswXT11KmMrcCotbytoKi1sLWYqLXMsdFsxXT1oKmMrcCotcytmKi1vLXUqLWwsdFsyXT1mKmMrcCotbCt1Ki1zLWgqLW8sdFszXT1lWzNdLHR9fSx7fV0sMzkzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3JldHVybiBuWzBdPWEsblsxXT1yLG5bMl09ZSxuWzNdPXQsaVswXX07dmFyIG49bmV3IFVpbnQ4QXJyYXkoNCksaT1uZXcgRmxvYXQzMkFycmF5KG4uYnVmZmVyKX0se31dLDM5NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCJnbHNsLXRva2VuaXplclwiKSxpPXQoXCJhdG9iLWxpdGVcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1BcnJheS5pc0FycmF5KHQpP3Q6bih0KSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBhPWVbcl07aWYoXCJwcmVwcm9jZXNzb3JcIj09PWEudHlwZSl7dmFyIG89YS5kYXRhLm1hdGNoKC9cXCNkZWZpbmVcXHMrU0hBREVSX05BTUUoX0I2NCk/XFxzKyguKykkLyk7aWYobyYmb1syXSl7dmFyIHM9b1sxXSxsPW9bMl07cmV0dXJuKHM/aShsKTpsKS50cmltKCl9fX19fSx7XCJhdG9iLWxpdGVcIjo2MyxcImdsc2wtdG9rZW5pemVyXCI6NDAxfV0sMzk1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsayxBPTAsVD0wLE09bCxTPVtdLEU9W10sQz0xLEw9MCx6PTAsTz0hMSxJPSExLEQ9XCJcIixQPWEsUj1uO1wiMzAwIGVzXCI9PT0odD10fHx7fSkudmVyc2lvbiYmKFA9cyxSPW8pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gRT1bXSxudWxsIT09dD9mdW5jdGlvbih0KXt2YXIgcjtBPTAsaz0oRCs9dCkubGVuZ3RoO2Zvcig7ZT1EW0FdLEE8azspe3N3aXRjaChyPUEsTSl7Y2FzZSB1OkE9VigpO2JyZWFrO2Nhc2UgaDpjYXNlIGY6QT1qKCk7YnJlYWs7Y2FzZSBwOkE9VSgpO2JyZWFrO2Nhc2UgZDpBPUcoKTticmVhaztjYXNlIF86QT1IKCk7YnJlYWs7Y2FzZSBnOkE9WSgpO2JyZWFrO2Nhc2UgYzpBPVcoKTticmVhaztjYXNlIHg6QT1OKCk7YnJlYWs7Y2FzZSBsOkE9QigpfWlmKHIhPT1BKXN3aXRjaChEW3JdKXtjYXNlXCJcXG5cIjpMPTAsKytDO2JyZWFrO2RlZmF1bHQ6KytMfX1yZXR1cm4gVCs9QSxEPUQuc2xpY2UoQSksRX0odC5yZXBsYWNlP3QucmVwbGFjZSgvXFxyXFxuL2csXCJcXG5cIik6dCk6ZnVuY3Rpb24odCl7Uy5sZW5ndGgmJkYoUy5qb2luKFwiXCIpKTtyZXR1cm4gTT1iLEYoXCIoZW9mKVwiKSxFfSgpfTtmdW5jdGlvbiBGKHQpe3QubGVuZ3RoJiZFLnB1c2goe3R5cGU6d1tNXSxkYXRhOnQscG9zaXRpb246eixsaW5lOkMsY29sdW1uOkx9KX1mdW5jdGlvbiBCKCl7cmV0dXJuIFM9Uy5sZW5ndGg/W106UyxcIi9cIj09PXImJlwiKlwiPT09ZT8oej1UK0EtMSxNPXUscj1lLEErMSk6XCIvXCI9PT1yJiZcIi9cIj09PWU/KHo9VCtBLTEsTT1oLHI9ZSxBKzEpOlwiI1wiPT09ZT8oTT1mLHo9VCtBLEEpOi9cXHMvLnRlc3QoZSk/KE09eCx6PVQrQSxBKTooTz0vXFxkLy50ZXN0KGUpLEk9L1teXFx3X10vLnRlc3QoZSksej1UK0EsTT1PP2Q6ST9wOmMsQSl9ZnVuY3Rpb24gTigpe3JldHVybi9bXlxcc10vZy50ZXN0KGUpPyhGKFMuam9pbihcIlwiKSksTT1sLEEpOihTLnB1c2goZSkscj1lLEErMSl9ZnVuY3Rpb24gaigpe3JldHVyblwiXFxyXCIhPT1lJiZcIlxcblwiIT09ZXx8XCJcXFxcXCI9PT1yPyhTLnB1c2goZSkscj1lLEErMSk6KEYoUy5qb2luKFwiXCIpKSxNPWwsQSl9ZnVuY3Rpb24gVigpe3JldHVyblwiL1wiPT09ZSYmXCIqXCI9PT1yPyhTLnB1c2goZSksRihTLmpvaW4oXCJcIikpLE09bCxBKzEpOihTLnB1c2goZSkscj1lLEErMSl9ZnVuY3Rpb24gVSgpe2lmKFwiLlwiPT09ciYmL1xcZC8udGVzdChlKSlyZXR1cm4gTT1nLEE7aWYoXCIvXCI9PT1yJiZcIipcIj09PWUpcmV0dXJuIE09dSxBO2lmKFwiL1wiPT09ciYmXCIvXCI9PT1lKXJldHVybiBNPWgsQTtpZihcIi5cIj09PWUmJlMubGVuZ3RoKXtmb3IoO3EoUyk7KTtyZXR1cm4gTT1nLEF9aWYoXCI7XCI9PT1lfHxcIilcIj09PWV8fFwiKFwiPT09ZSl7aWYoUy5sZW5ndGgpZm9yKDtxKFMpOyk7cmV0dXJuIEYoZSksTT1sLEErMX12YXIgdD0yPT09Uy5sZW5ndGgmJlwiPVwiIT09ZTtpZigvW1xcd19cXGRcXHNdLy50ZXN0KGUpfHx0KXtmb3IoO3EoUyk7KTtyZXR1cm4gTT1sLEF9cmV0dXJuIFMucHVzaChlKSxyPWUsQSsxfWZ1bmN0aW9uIHEodCl7Zm9yKHZhciBlLHIsbj0wOzspe2lmKGU9aS5pbmRleE9mKHQuc2xpY2UoMCx0Lmxlbmd0aCtuKS5qb2luKFwiXCIpKSxyPWlbZV0sLTE9PT1lKXtpZihuLS0rdC5sZW5ndGg+MCljb250aW51ZTtyPXQuc2xpY2UoMCwxKS5qb2luKFwiXCIpfXJldHVybiBGKHIpLHorPXIubGVuZ3RoLChTPVMuc2xpY2Uoci5sZW5ndGgpKS5sZW5ndGh9fWZ1bmN0aW9uIEgoKXtyZXR1cm4vW15hLWZBLUYwLTldLy50ZXN0KGUpPyhGKFMuam9pbihcIlwiKSksTT1sLEEpOihTLnB1c2goZSkscj1lLEErMSl9ZnVuY3Rpb24gRygpe3JldHVyblwiLlwiPT09ZT8oUy5wdXNoKGUpLE09ZyxyPWUsQSsxKTovW2VFXS8udGVzdChlKT8oUy5wdXNoKGUpLE09ZyxyPWUsQSsxKTpcInhcIj09PWUmJjE9PT1TLmxlbmd0aCYmXCIwXCI9PT1TWzBdPyhNPV8sUy5wdXNoKGUpLHI9ZSxBKzEpOi9bXlxcZF0vLnRlc3QoZSk/KEYoUy5qb2luKFwiXCIpKSxNPWwsQSk6KFMucHVzaChlKSxyPWUsQSsxKX1mdW5jdGlvbiBZKCl7cmV0dXJuXCJmXCI9PT1lJiYoUy5wdXNoKGUpLHI9ZSxBKz0xKSwvW2VFXS8udGVzdChlKT8oUy5wdXNoKGUpLHI9ZSxBKzEpOlwiLVwiPT09ZSYmL1tlRV0vLnRlc3Qocik/KFMucHVzaChlKSxyPWUsQSsxKTovW15cXGRdLy50ZXN0KGUpPyhGKFMuam9pbihcIlwiKSksTT1sLEEpOihTLnB1c2goZSkscj1lLEErMSl9ZnVuY3Rpb24gVygpe2lmKC9bXlxcZFxcd19dLy50ZXN0KGUpKXt2YXIgdD1TLmpvaW4oXCJcIik7cmV0dXJuIE09Ui5pbmRleE9mKHQpPi0xP3k6UC5pbmRleE9mKHQpPi0xP206dixGKFMuam9pbihcIlwiKSksTT1sLEF9cmV0dXJuIFMucHVzaChlKSxyPWUsQSsxfX07dmFyIG49dChcIi4vbGliL2xpdGVyYWxzXCIpLGk9dChcIi4vbGliL29wZXJhdG9yc1wiKSxhPXQoXCIuL2xpYi9idWlsdGluc1wiKSxvPXQoXCIuL2xpYi9saXRlcmFscy0zMDBlc1wiKSxzPXQoXCIuL2xpYi9idWlsdGlucy0zMDBlc1wiKSxsPTk5OSxjPTk5OTksdT0wLGg9MSxmPTIscD0zLGQ9NCxnPTUsdj02LG09Nyx5PTgseD05LGI9MTAsXz0xMSx3PVtcImJsb2NrLWNvbW1lbnRcIixcImxpbmUtY29tbWVudFwiLFwicHJlcHJvY2Vzc29yXCIsXCJvcGVyYXRvclwiLFwiaW50ZWdlclwiLFwiZmxvYXRcIixcImlkZW50XCIsXCJidWlsdGluXCIsXCJrZXl3b3JkXCIsXCJ3aGl0ZXNwYWNlXCIsXCJlb2ZcIixcImludGVnZXJcIl19LHtcIi4vbGliL2J1aWx0aW5zXCI6Mzk3LFwiLi9saWIvYnVpbHRpbnMtMzAwZXNcIjozOTYsXCIuL2xpYi9saXRlcmFsc1wiOjM5OSxcIi4vbGliL2xpdGVyYWxzLTMwMGVzXCI6Mzk4LFwiLi9saWIvb3BlcmF0b3JzXCI6NDAwfV0sMzk2OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcIi4vYnVpbHRpbnNcIik7bj1uLnNsaWNlKCkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEvXihnbFxcX3x0ZXh0dXJlKS8udGVzdCh0KX0pLGUuZXhwb3J0cz1uLmNvbmNhdChbXCJnbF9WZXJ0ZXhJRFwiLFwiZ2xfSW5zdGFuY2VJRFwiLFwiZ2xfUG9zaXRpb25cIixcImdsX1BvaW50U2l6ZVwiLFwiZ2xfRnJhZ0Nvb3JkXCIsXCJnbF9Gcm9udEZhY2luZ1wiLFwiZ2xfRnJhZ0RlcHRoXCIsXCJnbF9Qb2ludENvb3JkXCIsXCJnbF9NYXhWZXJ0ZXhBdHRyaWJzXCIsXCJnbF9NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9yc1wiLFwiZ2xfTWF4VmVydGV4T3V0cHV0VmVjdG9yc1wiLFwiZ2xfTWF4RnJhZ21lbnRJbnB1dFZlY3RvcnNcIixcImdsX01heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzXCIsXCJnbF9NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzXCIsXCJnbF9NYXhUZXh0dXJlSW1hZ2VVbml0c1wiLFwiZ2xfTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9yc1wiLFwiZ2xfTWF4RHJhd0J1ZmZlcnNcIixcImdsX01pblByb2dyYW1UZXhlbE9mZnNldFwiLFwiZ2xfTWF4UHJvZ3JhbVRleGVsT2Zmc2V0XCIsXCJnbF9EZXB0aFJhbmdlUGFyYW1ldGVyc1wiLFwiZ2xfRGVwdGhSYW5nZVwiLFwidHJ1bmNcIixcInJvdW5kXCIsXCJyb3VuZEV2ZW5cIixcImlzbmFuXCIsXCJpc2luZlwiLFwiZmxvYXRCaXRzVG9JbnRcIixcImZsb2F0Qml0c1RvVWludFwiLFwiaW50Qml0c1RvRmxvYXRcIixcInVpbnRCaXRzVG9GbG9hdFwiLFwicGFja1Nub3JtMngxNlwiLFwidW5wYWNrU25vcm0yeDE2XCIsXCJwYWNrVW5vcm0yeDE2XCIsXCJ1bnBhY2tVbm9ybTJ4MTZcIixcInBhY2tIYWxmMngxNlwiLFwidW5wYWNrSGFsZjJ4MTZcIixcIm91dGVyUHJvZHVjdFwiLFwidHJhbnNwb3NlXCIsXCJkZXRlcm1pbmFudFwiLFwiaW52ZXJzZVwiLFwidGV4dHVyZVwiLFwidGV4dHVyZVNpemVcIixcInRleHR1cmVQcm9qXCIsXCJ0ZXh0dXJlTG9kXCIsXCJ0ZXh0dXJlT2Zmc2V0XCIsXCJ0ZXhlbEZldGNoXCIsXCJ0ZXhlbEZldGNoT2Zmc2V0XCIsXCJ0ZXh0dXJlUHJvak9mZnNldFwiLFwidGV4dHVyZUxvZE9mZnNldFwiLFwidGV4dHVyZVByb2pMb2RcIixcInRleHR1cmVQcm9qTG9kT2Zmc2V0XCIsXCJ0ZXh0dXJlR3JhZFwiLFwidGV4dHVyZUdyYWRPZmZzZXRcIixcInRleHR1cmVQcm9qR3JhZFwiLFwidGV4dHVyZVByb2pHcmFkT2Zmc2V0XCJdKX0se1wiLi9idWlsdGluc1wiOjM5N31dLDM5NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bXCJhYnNcIixcImFjb3NcIixcImFsbFwiLFwiYW55XCIsXCJhc2luXCIsXCJhdGFuXCIsXCJjZWlsXCIsXCJjbGFtcFwiLFwiY29zXCIsXCJjcm9zc1wiLFwiZEZkeFwiLFwiZEZkeVwiLFwiZGVncmVlc1wiLFwiZGlzdGFuY2VcIixcImRvdFwiLFwiZXF1YWxcIixcImV4cFwiLFwiZXhwMlwiLFwiZmFjZWZvcndhcmRcIixcImZsb29yXCIsXCJmcmFjdFwiLFwiZ2xfQmFja0NvbG9yXCIsXCJnbF9CYWNrTGlnaHRNb2RlbFByb2R1Y3RcIixcImdsX0JhY2tMaWdodFByb2R1Y3RcIixcImdsX0JhY2tNYXRlcmlhbFwiLFwiZ2xfQmFja1NlY29uZGFyeUNvbG9yXCIsXCJnbF9DbGlwUGxhbmVcIixcImdsX0NsaXBWZXJ0ZXhcIixcImdsX0NvbG9yXCIsXCJnbF9EZXB0aFJhbmdlXCIsXCJnbF9EZXB0aFJhbmdlUGFyYW1ldGVyc1wiLFwiZ2xfRXllUGxhbmVRXCIsXCJnbF9FeWVQbGFuZVJcIixcImdsX0V5ZVBsYW5lU1wiLFwiZ2xfRXllUGxhbmVUXCIsXCJnbF9Gb2dcIixcImdsX0ZvZ0Nvb3JkXCIsXCJnbF9Gb2dGcmFnQ29vcmRcIixcImdsX0ZvZ1BhcmFtZXRlcnNcIixcImdsX0ZyYWdDb2xvclwiLFwiZ2xfRnJhZ0Nvb3JkXCIsXCJnbF9GcmFnRGF0YVwiLFwiZ2xfRnJhZ0RlcHRoXCIsXCJnbF9GcmFnRGVwdGhFWFRcIixcImdsX0Zyb250Q29sb3JcIixcImdsX0Zyb250RmFjaW5nXCIsXCJnbF9Gcm9udExpZ2h0TW9kZWxQcm9kdWN0XCIsXCJnbF9Gcm9udExpZ2h0UHJvZHVjdFwiLFwiZ2xfRnJvbnRNYXRlcmlhbFwiLFwiZ2xfRnJvbnRTZWNvbmRhcnlDb2xvclwiLFwiZ2xfTGlnaHRNb2RlbFwiLFwiZ2xfTGlnaHRNb2RlbFBhcmFtZXRlcnNcIixcImdsX0xpZ2h0TW9kZWxQcm9kdWN0c1wiLFwiZ2xfTGlnaHRQcm9kdWN0c1wiLFwiZ2xfTGlnaHRTb3VyY2VcIixcImdsX0xpZ2h0U291cmNlUGFyYW1ldGVyc1wiLFwiZ2xfTWF0ZXJpYWxQYXJhbWV0ZXJzXCIsXCJnbF9NYXhDbGlwUGxhbmVzXCIsXCJnbF9NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzXCIsXCJnbF9NYXhEcmF3QnVmZmVyc1wiLFwiZ2xfTWF4RnJhZ21lbnRVbmlmb3JtQ29tcG9uZW50c1wiLFwiZ2xfTWF4TGlnaHRzXCIsXCJnbF9NYXhUZXh0dXJlQ29vcmRzXCIsXCJnbF9NYXhUZXh0dXJlSW1hZ2VVbml0c1wiLFwiZ2xfTWF4VGV4dHVyZVVuaXRzXCIsXCJnbF9NYXhWYXJ5aW5nRmxvYXRzXCIsXCJnbF9NYXhWZXJ0ZXhBdHRyaWJzXCIsXCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0c1wiLFwiZ2xfTWF4VmVydGV4VW5pZm9ybUNvbXBvbmVudHNcIixcImdsX01vZGVsVmlld01hdHJpeFwiLFwiZ2xfTW9kZWxWaWV3TWF0cml4SW52ZXJzZVwiLFwiZ2xfTW9kZWxWaWV3TWF0cml4SW52ZXJzZVRyYW5zcG9zZVwiLFwiZ2xfTW9kZWxWaWV3TWF0cml4VHJhbnNwb3NlXCIsXCJnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4XCIsXCJnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4SW52ZXJzZVwiLFwiZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeEludmVyc2VUcmFuc3Bvc2VcIixcImdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXhUcmFuc3Bvc2VcIixcImdsX011bHRpVGV4Q29vcmQwXCIsXCJnbF9NdWx0aVRleENvb3JkMVwiLFwiZ2xfTXVsdGlUZXhDb29yZDJcIixcImdsX011bHRpVGV4Q29vcmQzXCIsXCJnbF9NdWx0aVRleENvb3JkNFwiLFwiZ2xfTXVsdGlUZXhDb29yZDVcIixcImdsX011bHRpVGV4Q29vcmQ2XCIsXCJnbF9NdWx0aVRleENvb3JkN1wiLFwiZ2xfTm9ybWFsXCIsXCJnbF9Ob3JtYWxNYXRyaXhcIixcImdsX05vcm1hbFNjYWxlXCIsXCJnbF9PYmplY3RQbGFuZVFcIixcImdsX09iamVjdFBsYW5lUlwiLFwiZ2xfT2JqZWN0UGxhbmVTXCIsXCJnbF9PYmplY3RQbGFuZVRcIixcImdsX1BvaW50XCIsXCJnbF9Qb2ludENvb3JkXCIsXCJnbF9Qb2ludFBhcmFtZXRlcnNcIixcImdsX1BvaW50U2l6ZVwiLFwiZ2xfUG9zaXRpb25cIixcImdsX1Byb2plY3Rpb25NYXRyaXhcIixcImdsX1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlXCIsXCJnbF9Qcm9qZWN0aW9uTWF0cml4SW52ZXJzZVRyYW5zcG9zZVwiLFwiZ2xfUHJvamVjdGlvbk1hdHJpeFRyYW5zcG9zZVwiLFwiZ2xfU2Vjb25kYXJ5Q29sb3JcIixcImdsX1RleENvb3JkXCIsXCJnbF9UZXh0dXJlRW52Q29sb3JcIixcImdsX1RleHR1cmVNYXRyaXhcIixcImdsX1RleHR1cmVNYXRyaXhJbnZlcnNlXCIsXCJnbF9UZXh0dXJlTWF0cml4SW52ZXJzZVRyYW5zcG9zZVwiLFwiZ2xfVGV4dHVyZU1hdHJpeFRyYW5zcG9zZVwiLFwiZ2xfVmVydGV4XCIsXCJncmVhdGVyVGhhblwiLFwiZ3JlYXRlclRoYW5FcXVhbFwiLFwiaW52ZXJzZXNxcnRcIixcImxlbmd0aFwiLFwibGVzc1RoYW5cIixcImxlc3NUaGFuRXF1YWxcIixcImxvZ1wiLFwibG9nMlwiLFwibWF0cml4Q29tcE11bHRcIixcIm1heFwiLFwibWluXCIsXCJtaXhcIixcIm1vZFwiLFwibm9ybWFsaXplXCIsXCJub3RcIixcIm5vdEVxdWFsXCIsXCJwb3dcIixcInJhZGlhbnNcIixcInJlZmxlY3RcIixcInJlZnJhY3RcIixcInNpZ25cIixcInNpblwiLFwic21vb3Roc3RlcFwiLFwic3FydFwiLFwic3RlcFwiLFwidGFuXCIsXCJ0ZXh0dXJlMkRcIixcInRleHR1cmUyRExvZFwiLFwidGV4dHVyZTJEUHJvalwiLFwidGV4dHVyZTJEUHJvakxvZFwiLFwidGV4dHVyZUN1YmVcIixcInRleHR1cmVDdWJlTG9kXCIsXCJ0ZXh0dXJlMkRMb2RFWFRcIixcInRleHR1cmUyRFByb2pMb2RFWFRcIixcInRleHR1cmVDdWJlTG9kRVhUXCIsXCJ0ZXh0dXJlMkRHcmFkRVhUXCIsXCJ0ZXh0dXJlMkRQcm9qR3JhZEVYVFwiLFwidGV4dHVyZUN1YmVHcmFkRVhUXCJdfSx7fV0sMzk4OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcIi4vbGl0ZXJhbHNcIik7ZS5leHBvcnRzPW4uc2xpY2UoKS5jb25jYXQoW1wibGF5b3V0XCIsXCJjZW50cm9pZFwiLFwic21vb3RoXCIsXCJjYXNlXCIsXCJtYXQyeDJcIixcIm1hdDJ4M1wiLFwibWF0Mng0XCIsXCJtYXQzeDJcIixcIm1hdDN4M1wiLFwibWF0M3g0XCIsXCJtYXQ0eDJcIixcIm1hdDR4M1wiLFwibWF0NHg0XCIsXCJ1aW50XCIsXCJ1dmVjMlwiLFwidXZlYzNcIixcInV2ZWM0XCIsXCJzYW1wbGVyQ3ViZVNoYWRvd1wiLFwic2FtcGxlcjJEQXJyYXlcIixcInNhbXBsZXIyREFycmF5U2hhZG93XCIsXCJpc2FtcGxlcjJEXCIsXCJpc2FtcGxlcjNEXCIsXCJpc2FtcGxlckN1YmVcIixcImlzYW1wbGVyMkRBcnJheVwiLFwidXNhbXBsZXIyRFwiLFwidXNhbXBsZXIzRFwiLFwidXNhbXBsZXJDdWJlXCIsXCJ1c2FtcGxlcjJEQXJyYXlcIixcImNvaGVyZW50XCIsXCJyZXN0cmljdFwiLFwicmVhZG9ubHlcIixcIndyaXRlb25seVwiLFwicmVzb3VyY2VcIixcImF0b21pY191aW50XCIsXCJub3BlcnNwZWN0aXZlXCIsXCJwYXRjaFwiLFwic2FtcGxlXCIsXCJzdWJyb3V0aW5lXCIsXCJjb21tb25cIixcInBhcnRpdGlvblwiLFwiYWN0aXZlXCIsXCJmaWx0ZXJcIixcImltYWdlMURcIixcImltYWdlMkRcIixcImltYWdlM0RcIixcImltYWdlQ3ViZVwiLFwiaWltYWdlMURcIixcImlpbWFnZTJEXCIsXCJpaW1hZ2UzRFwiLFwiaWltYWdlQ3ViZVwiLFwidWltYWdlMURcIixcInVpbWFnZTJEXCIsXCJ1aW1hZ2UzRFwiLFwidWltYWdlQ3ViZVwiLFwiaW1hZ2UxREFycmF5XCIsXCJpbWFnZTJEQXJyYXlcIixcImlpbWFnZTFEQXJyYXlcIixcImlpbWFnZTJEQXJyYXlcIixcInVpbWFnZTFEQXJyYXlcIixcInVpbWFnZTJEQXJyYXlcIixcImltYWdlMURTaGFkb3dcIixcImltYWdlMkRTaGFkb3dcIixcImltYWdlMURBcnJheVNoYWRvd1wiLFwiaW1hZ2UyREFycmF5U2hhZG93XCIsXCJpbWFnZUJ1ZmZlclwiLFwiaWltYWdlQnVmZmVyXCIsXCJ1aW1hZ2VCdWZmZXJcIixcInNhbXBsZXIxREFycmF5XCIsXCJzYW1wbGVyMURBcnJheVNoYWRvd1wiLFwiaXNhbXBsZXIxRFwiLFwiaXNhbXBsZXIxREFycmF5XCIsXCJ1c2FtcGxlcjFEXCIsXCJ1c2FtcGxlcjFEQXJyYXlcIixcImlzYW1wbGVyMkRSZWN0XCIsXCJ1c2FtcGxlcjJEUmVjdFwiLFwic2FtcGxlckJ1ZmZlclwiLFwiaXNhbXBsZXJCdWZmZXJcIixcInVzYW1wbGVyQnVmZmVyXCIsXCJzYW1wbGVyMkRNU1wiLFwiaXNhbXBsZXIyRE1TXCIsXCJ1c2FtcGxlcjJETVNcIixcInNhbXBsZXIyRE1TQXJyYXlcIixcImlzYW1wbGVyMkRNU0FycmF5XCIsXCJ1c2FtcGxlcjJETVNBcnJheVwiXSl9LHtcIi4vbGl0ZXJhbHNcIjozOTl9XSwzOTk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9W1wicHJlY2lzaW9uXCIsXCJoaWdocFwiLFwibWVkaXVtcFwiLFwibG93cFwiLFwiYXR0cmlidXRlXCIsXCJjb25zdFwiLFwidW5pZm9ybVwiLFwidmFyeWluZ1wiLFwiYnJlYWtcIixcImNvbnRpbnVlXCIsXCJkb1wiLFwiZm9yXCIsXCJ3aGlsZVwiLFwiaWZcIixcImVsc2VcIixcImluXCIsXCJvdXRcIixcImlub3V0XCIsXCJmbG9hdFwiLFwiaW50XCIsXCJ2b2lkXCIsXCJib29sXCIsXCJ0cnVlXCIsXCJmYWxzZVwiLFwiZGlzY2FyZFwiLFwicmV0dXJuXCIsXCJtYXQyXCIsXCJtYXQzXCIsXCJtYXQ0XCIsXCJ2ZWMyXCIsXCJ2ZWMzXCIsXCJ2ZWM0XCIsXCJpdmVjMlwiLFwiaXZlYzNcIixcIml2ZWM0XCIsXCJidmVjMlwiLFwiYnZlYzNcIixcImJ2ZWM0XCIsXCJzYW1wbGVyMURcIixcInNhbXBsZXIyRFwiLFwic2FtcGxlcjNEXCIsXCJzYW1wbGVyQ3ViZVwiLFwic2FtcGxlcjFEU2hhZG93XCIsXCJzYW1wbGVyMkRTaGFkb3dcIixcInN0cnVjdFwiLFwiYXNtXCIsXCJjbGFzc1wiLFwidW5pb25cIixcImVudW1cIixcInR5cGVkZWZcIixcInRlbXBsYXRlXCIsXCJ0aGlzXCIsXCJwYWNrZWRcIixcImdvdG9cIixcInN3aXRjaFwiLFwiZGVmYXVsdFwiLFwiaW5saW5lXCIsXCJub2lubGluZVwiLFwidm9sYXRpbGVcIixcInB1YmxpY1wiLFwic3RhdGljXCIsXCJleHRlcm5cIixcImV4dGVybmFsXCIsXCJpbnRlcmZhY2VcIixcImxvbmdcIixcInNob3J0XCIsXCJkb3VibGVcIixcImhhbGZcIixcImZpeGVkXCIsXCJ1bnNpZ25lZFwiLFwiaW5wdXRcIixcIm91dHB1dFwiLFwiaHZlYzJcIixcImh2ZWMzXCIsXCJodmVjNFwiLFwiZHZlYzJcIixcImR2ZWMzXCIsXCJkdmVjNFwiLFwiZnZlYzJcIixcImZ2ZWMzXCIsXCJmdmVjNFwiLFwic2FtcGxlcjJEUmVjdFwiLFwic2FtcGxlcjNEUmVjdFwiLFwic2FtcGxlcjJEUmVjdFNoYWRvd1wiLFwic2l6ZW9mXCIsXCJjYXN0XCIsXCJuYW1lc3BhY2VcIixcInVzaW5nXCJdfSx7fV0sNDAwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVtcIjw8PVwiLFwiPj49XCIsXCIrK1wiLFwiLS1cIixcIjw8XCIsXCI+PlwiLFwiPD1cIixcIj49XCIsXCI9PVwiLFwiIT1cIixcIiYmXCIsXCJ8fFwiLFwiKz1cIixcIi09XCIsXCIqPVwiLFwiLz1cIixcIiU9XCIsXCImPVwiLFwiXl5cIixcIl49XCIsXCJ8PVwiLFwiKFwiLFwiKVwiLFwiW1wiLFwiXVwiLFwiLlwiLFwiIVwiLFwiflwiLFwiKlwiLFwiL1wiLFwiJVwiLFwiK1wiLFwiLVwiLFwiPFwiLFwiPlwiLFwiJlwiLFwiXlwiLFwifFwiLFwiP1wiLFwiOlwiLFwiPVwiLFwiLFwiLFwiO1wiLFwie1wiLFwifVwiXX0se31dLDQwMTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuL2luZGV4XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW4oZSksaT1bXTtyZXR1cm4gaT0oaT1pLmNvbmNhdChyKHQpKSkuY29uY2F0KHIobnVsbCkpfX0se1wiLi9pbmRleFwiOjM5NX1dLDQwMjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9W3RdKTtmb3IodmFyIGU9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscj1bXSxuPTA7bjx0Lmxlbmd0aC0xO24rKylyLnB1c2godFtuXSxlW25dfHxcIlwiKTtyZXR1cm4gci5wdXNoKHRbbl0pLHIuam9pbihcIlwiKX19LHt9XSw0MDM6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saT10KFwiaXMtYnJvd3NlclwiKTtuPVwiZnVuY3Rpb25cIj09dHlwZW9mIHIubWF0Y2hNZWRpYT8hci5tYXRjaE1lZGlhKFwiKGhvdmVyOiBub25lKVwiKS5tYXRjaGVzOmksZS5leHBvcnRzPW59KS5jYWxsKHRoaXMsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHtcImlzLWJyb3dzZXJcIjo0MTB9XSw0MDQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiaXMtYnJvd3NlclwiKTtlLmV4cG9ydHM9biYmZnVuY3Rpb24oKXt2YXIgdD0hMTt0cnl7dmFyIGU9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwicGFzc2l2ZVwiLHtnZXQ6ZnVuY3Rpb24oKXt0PSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidGVzdFwiLG51bGwsZSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0ZXN0XCIsbnVsbCxlKX1jYXRjaChlKXt0PSExfXJldHVybiB0fSgpfSx7XCJpcy1icm93c2VyXCI6NDEwfV0sNDA1OltmdW5jdGlvbih0LGUscil7ci5yZWFkPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbyxzPTgqaS1uLTEsbD0oMTw8cyktMSxjPWw+PjEsdT0tNyxoPXI/aS0xOjAsZj1yPy0xOjEscD10W2UraF07Zm9yKGgrPWYsYT1wJigxPDwtdSktMSxwPj49LXUsdSs9czt1PjA7YT0yNTYqYSt0W2UraF0saCs9Zix1LT04KTtmb3Iobz1hJigxPDwtdSktMSxhPj49LXUsdSs9bjt1PjA7bz0yNTYqbyt0W2UraF0saCs9Zix1LT04KTtpZigwPT09YSlhPTEtYztlbHNle2lmKGE9PT1sKXJldHVybiBvP05hTjoxLzAqKHA/LTE6MSk7bys9TWF0aC5wb3coMixuKSxhLT1jfXJldHVybihwPy0xOjEpKm8qTWF0aC5wb3coMixhLW4pfSxyLndyaXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbyxzLGwsYz04KmEtaS0xLHU9KDE8PGMpLTEsaD11Pj4xLGY9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxwPW4/MDphLTEsZD1uPzE6LTEsZz1lPDB8fDA9PT1lJiYxL2U8MD8xOjA7Zm9yKGU9TWF0aC5hYnMoZSksaXNOYU4oZSl8fGU9PT0xLzA/KHM9aXNOYU4oZSk/MTowLG89dSk6KG89TWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMiksZSoobD1NYXRoLnBvdygyLC1vKSk8MSYmKG8tLSxsKj0yKSwoZSs9bytoPj0xP2YvbDpmKk1hdGgucG93KDIsMS1oKSkqbD49MiYmKG8rKyxsLz0yKSxvK2g+PXU/KHM9MCxvPXUpOm8raD49MT8ocz0oZSpsLTEpKk1hdGgucG93KDIsaSksbys9aCk6KHM9ZSpNYXRoLnBvdygyLGgtMSkqTWF0aC5wb3coMixpKSxvPTApKTtpPj04O3RbcitwXT0yNTUmcyxwKz1kLHMvPTI1NixpLT04KTtmb3Iobz1vPDxpfHMsYys9aTtjPjA7dFtyK3BdPTI1NSZvLHArPWQsby89MjU2LGMtPTgpO3RbcitwLWRdfD0xMjgqZ319LHt9XSw0MDY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lmxlbmd0aDtpZigwPT09cil0aHJvdyBuZXcgRXJyb3IoXCJNdXN0IGhhdmUgYXQgbGVhc3QgZCsxIHBvaW50c1wiKTt2YXIgaT10WzBdLmxlbmd0aDtpZihyPD1pKXRocm93IG5ldyBFcnJvcihcIk11c3QgaW5wdXQgYXQgbGVhc3QgZCsxIHBvaW50c1wiKTt2YXIgbz10LnNsaWNlKDAsaSsxKSxzPW4uYXBwbHkodm9pZCAwLG8pO2lmKDA9PT1zKXRocm93IG5ldyBFcnJvcihcIklucHV0IG5vdCBpbiBnZW5lcmFsIHBvc2l0aW9uXCIpO2Zvcih2YXIgbD1uZXcgQXJyYXkoaSsxKSx1PTA7dTw9aTsrK3UpbFt1XT11O3M8MCYmKGxbMF09MSxsWzFdPTApO2Zvcih2YXIgaD1uZXcgYShsLG5ldyBBcnJheShpKzEpLCExKSxmPWguYWRqYWNlbnQscD1uZXcgQXJyYXkoaSsyKSx1PTA7dTw9aTsrK3Upe2Zvcih2YXIgZD1sLnNsaWNlKCksZz0wO2c8PWk7KytnKWc9PT11JiYoZFtnXT0tMSk7dmFyIHY9ZFswXTtkWzBdPWRbMV0sZFsxXT12O3ZhciBtPW5ldyBhKGQsbmV3IEFycmF5KGkrMSksITApO2ZbdV09bSxwW3VdPW19cFtpKzFdPWg7Zm9yKHZhciB1PTA7dTw9aTsrK3UpZm9yKHZhciBkPWZbdV0udmVydGljZXMseT1mW3VdLmFkamFjZW50LGc9MDtnPD1pOysrZyl7dmFyIHg9ZFtnXTtpZih4PDApeVtnXT1oO2Vsc2UgZm9yKHZhciBiPTA7Yjw9aTsrK2IpZltiXS52ZXJ0aWNlcy5pbmRleE9mKHgpPDAmJih5W2ddPWZbYl0pfWZvcih2YXIgXz1uZXcgYyhpLG8scCksdz0hIWUsdT1pKzE7dTxyOysrdSlfLmluc2VydCh0W3VdLHcpO3JldHVybiBfLmJvdW5kYXJ5KCl9O3ZhciBuPXQoXCJyb2J1c3Qtb3JpZW50YXRpb25cIiksaT10KFwic2ltcGxpY2lhbC1jb21wbGV4XCIpLmNvbXBhcmVDZWxscztmdW5jdGlvbiBhKHQsZSxyKXt0aGlzLnZlcnRpY2VzPXQsdGhpcy5hZGphY2VudD1lLHRoaXMuYm91bmRhcnk9cix0aGlzLmxhc3RWaXNpdGVkPS0xfWZ1bmN0aW9uIG8odCxlLHIpe3RoaXMudmVydGljZXM9dCx0aGlzLmNlbGw9ZSx0aGlzLmluZGV4PXJ9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBpKHQudmVydGljZXMsZS52ZXJ0aWNlcyl9YS5wcm90b3R5cGUuZmxpcD1mdW5jdGlvbigpe3ZhciB0PXRoaXMudmVydGljZXNbMF07dGhpcy52ZXJ0aWNlc1swXT10aGlzLnZlcnRpY2VzWzFdLHRoaXMudmVydGljZXNbMV09dDt2YXIgZT10aGlzLmFkamFjZW50WzBdO3RoaXMuYWRqYWNlbnRbMF09dGhpcy5hZGphY2VudFsxXSx0aGlzLmFkamFjZW50WzFdPWV9O3ZhciBsPVtdO2Z1bmN0aW9uIGModCxlLHIpe3RoaXMuZGltZW5zaW9uPXQsdGhpcy52ZXJ0aWNlcz1lLHRoaXMuc2ltcGxpY2VzPXIsdGhpcy5pbnRlcmlvcj1yLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hdC5ib3VuZGFyeX0pLHRoaXMudHVwbGU9bmV3IEFycmF5KHQrMSk7Zm9yKHZhciBpPTA7aTw9dDsrK2kpdGhpcy50dXBsZVtpXT10aGlzLnZlcnRpY2VzW2ldO3ZhciBhPWxbdF07YXx8KGE9bFt0XT1mdW5jdGlvbih0KXtmb3IodmFyIGU9W1wiZnVuY3Rpb24gb3JpZW50KCl7dmFyIHR1cGxlPXRoaXMudHVwbGU7cmV0dXJuIHRlc3QoXCJdLHI9MDtyPD10OysrcilyPjAmJmUucHVzaChcIixcIiksZS5wdXNoKFwidHVwbGVbXCIscixcIl1cIik7ZS5wdXNoKFwiKX1yZXR1cm4gb3JpZW50XCIpO3ZhciBpPW5ldyBGdW5jdGlvbihcInRlc3RcIixlLmpvaW4oXCJcIikpLGE9blt0KzFdO3JldHVybiBhfHwoYT1uKSxpKGEpfSh0KSksdGhpcy5vcmllbnQ9YX12YXIgdT1jLnByb3RvdHlwZTt1LmhhbmRsZUJvdW5kYXJ5RGVnZW5lcmFjeT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZGltZW5zaW9uLG49dGhpcy52ZXJ0aWNlcy5sZW5ndGgtMSxpPXRoaXMudHVwbGUsYT10aGlzLnZlcnRpY2VzLG89W3RdO2Zvcih0Lmxhc3RWaXNpdGVkPS1uO28ubGVuZ3RoPjA7KXsodD1vLnBvcCgpKS52ZXJ0aWNlcztmb3IodmFyIHM9dC5hZGphY2VudCxsPTA7bDw9cjsrK2wpe3ZhciBjPXNbbF07aWYoYy5ib3VuZGFyeSYmIShjLmxhc3RWaXNpdGVkPD0tbikpe2Zvcih2YXIgdT1jLnZlcnRpY2VzLGg9MDtoPD1yOysraCl7dmFyIGY9dVtoXTtpW2hdPWY8MD9lOmFbZl19dmFyIHA9dGhpcy5vcmllbnQoKTtpZihwPjApcmV0dXJuIGM7Yy5sYXN0VmlzaXRlZD0tbiwwPT09cCYmby5wdXNoKGMpfX19cmV0dXJuIG51bGx9LHUud2Fsaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMudmVydGljZXMubGVuZ3RoLTEsbj10aGlzLmRpbWVuc2lvbixpPXRoaXMudmVydGljZXMsYT10aGlzLnR1cGxlLG89ZT90aGlzLmludGVyaW9yLmxlbmd0aCpNYXRoLnJhbmRvbSgpfDA6dGhpcy5pbnRlcmlvci5sZW5ndGgtMSxzPXRoaXMuaW50ZXJpb3Jbb107dDpmb3IoOyFzLmJvdW5kYXJ5Oyl7Zm9yKHZhciBsPXMudmVydGljZXMsYz1zLmFkamFjZW50LHU9MDt1PD1uOysrdSlhW3VdPWlbbFt1XV07cy5sYXN0VmlzaXRlZD1yO2Zvcih1PTA7dTw9bjsrK3Upe3ZhciBoPWNbdV07aWYoIShoLmxhc3RWaXNpdGVkPj1yKSl7dmFyIGY9YVt1XTthW3VdPXQ7dmFyIHA9dGhpcy5vcmllbnQoKTtpZihhW3VdPWYscDwwKXtzPWg7Y29udGludWUgdH1oLmJvdW5kYXJ5P2gubGFzdFZpc2l0ZWQ9LXI6aC5sYXN0VmlzaXRlZD1yfX1yZXR1cm59cmV0dXJuIHN9LHUuYWRkUGVha3M9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnZlcnRpY2VzLmxlbmd0aC0xLG49dGhpcy5kaW1lbnNpb24saT10aGlzLnZlcnRpY2VzLGw9dGhpcy50dXBsZSxjPXRoaXMuaW50ZXJpb3IsdT10aGlzLnNpbXBsaWNlcyxoPVtlXTtlLmxhc3RWaXNpdGVkPXIsZS52ZXJ0aWNlc1tlLnZlcnRpY2VzLmluZGV4T2YoLTEpXT1yLGUuYm91bmRhcnk9ITEsYy5wdXNoKGUpO2Zvcih2YXIgZj1bXTtoLmxlbmd0aD4wOyl7dmFyIHA9KGU9aC5wb3AoKSkudmVydGljZXMsZD1lLmFkamFjZW50LGc9cC5pbmRleE9mKHIpO2lmKCEoZzwwKSlmb3IodmFyIHY9MDt2PD1uOysrdilpZih2IT09Zyl7dmFyIG09ZFt2XTtpZihtLmJvdW5kYXJ5JiYhKG0ubGFzdFZpc2l0ZWQ+PXIpKXt2YXIgeT1tLnZlcnRpY2VzO2lmKG0ubGFzdFZpc2l0ZWQhPT0tcil7Zm9yKHZhciB4PTAsYj0wO2I8PW47KytiKXlbYl08MD8oeD1iLGxbYl09dCk6bFtiXT1pW3lbYl1dO2lmKHRoaXMub3JpZW50KCk+MCl7eVt4XT1yLG0uYm91bmRhcnk9ITEsYy5wdXNoKG0pLGgucHVzaChtKSxtLmxhc3RWaXNpdGVkPXI7Y29udGludWV9bS5sYXN0VmlzaXRlZD0tcn12YXIgXz1tLmFkamFjZW50LHc9cC5zbGljZSgpLGs9ZC5zbGljZSgpLEE9bmV3IGEodyxrLCEwKTt1LnB1c2goQSk7dmFyIFQ9Xy5pbmRleE9mKGUpO2lmKCEoVDwwKSl7X1tUXT1BLGtbZ109bSx3W3ZdPS0xLGtbdl09ZSxkW3ZdPUEsQS5mbGlwKCk7Zm9yKGI9MDtiPD1uOysrYil7dmFyIE09d1tiXTtpZighKE08MHx8TT09PXIpKXtmb3IodmFyIFM9bmV3IEFycmF5KG4tMSksRT0wLEM9MDtDPD1uOysrQyl7dmFyIEw9d1tDXTtMPDB8fEM9PT1ifHwoU1tFKytdPUwpfWYucHVzaChuZXcgbyhTLEEsYikpfX19fX19Zi5zb3J0KHMpO2Zvcih2PTA7disxPGYubGVuZ3RoO3YrPTIpe3ZhciB6PWZbdl0sTz1mW3YrMV0sST16LmluZGV4LEQ9Ty5pbmRleDtJPDB8fEQ8MHx8KHouY2VsbC5hZGphY2VudFt6LmluZGV4XT1PLmNlbGwsTy5jZWxsLmFkamFjZW50W08uaW5kZXhdPXouY2VsbCl9fSx1Lmluc2VydD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMudmVydGljZXM7ci5wdXNoKHQpO3ZhciBuPXRoaXMud2Fsayh0LGUpO2lmKG4pe2Zvcih2YXIgaT10aGlzLmRpbWVuc2lvbixhPXRoaXMudHVwbGUsbz0wO288PWk7KytvKXt2YXIgcz1uLnZlcnRpY2VzW29dO2Fbb109czwwP3Q6cltzXX12YXIgbD10aGlzLm9yaWVudChhKTtsPDB8fCgwIT09bHx8KG49dGhpcy5oYW5kbGVCb3VuZGFyeURlZ2VuZXJhY3kobix0KSkpJiZ0aGlzLmFkZFBlYWtzKHQsbil9fSx1LmJvdW5kYXJ5PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuZGltZW5zaW9uLGU9W10scj10aGlzLnNpbXBsaWNlcyxuPXIubGVuZ3RoLGk9MDtpPG47KytpKXt2YXIgYT1yW2ldO2lmKGEuYm91bmRhcnkpe2Zvcih2YXIgbz1uZXcgQXJyYXkodCkscz1hLnZlcnRpY2VzLGw9MCxjPTAsdT0wO3U8PXQ7Kyt1KXNbdV0+PTA/b1tsKytdPXNbdV06Yz0xJnU7aWYoYz09PSgxJnQpKXt2YXIgaD1vWzBdO29bMF09b1sxXSxvWzFdPWh9ZS5wdXNoKG8pfX1yZXR1cm4gZX19LHtcInJvYnVzdC1vcmllbnRhdGlvblwiOjQ5NSxcInNpbXBsaWNpYWwtY29tcGxleFwiOjUwNX1dLDQwNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiKSxpPTAsYT0xO2Z1bmN0aW9uIG8odCxlLHIsbixpKXt0aGlzLm1pZD10LHRoaXMubGVmdD1lLHRoaXMucmlnaHQ9cix0aGlzLmxlZnRQb2ludHM9bix0aGlzLnJpZ2h0UG9pbnRzPWksdGhpcy5jb3VudD0oZT9lLmNvdW50OjApKyhyP3IuY291bnQ6MCkrbi5sZW5ndGh9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCF0fHwwPT09dC5sZW5ndGgpcmV0dXJuIG5ldyB4KG51bGwpO3JldHVybiBuZXcgeCh5KHQpKX07dmFyIHM9by5wcm90b3R5cGU7ZnVuY3Rpb24gbCh0LGUpe3QubWlkPWUubWlkLHQubGVmdD1lLmxlZnQsdC5yaWdodD1lLnJpZ2h0LHQubGVmdFBvaW50cz1lLmxlZnRQb2ludHMsdC5yaWdodFBvaW50cz1lLnJpZ2h0UG9pbnRzLHQuY291bnQ9ZS5jb3VudH1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9eShlKTt0Lm1pZD1yLm1pZCx0LmxlZnQ9ci5sZWZ0LHQucmlnaHQ9ci5yaWdodCx0LmxlZnRQb2ludHM9ci5sZWZ0UG9pbnRzLHQucmlnaHRQb2ludHM9ci5yaWdodFBvaW50cyx0LmNvdW50PXIuY291bnR9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPXQuaW50ZXJ2YWxzKFtdKTtyLnB1c2goZSksYyh0LHIpfWZ1bmN0aW9uIGgodCxlKXt2YXIgcj10LmludGVydmFscyhbXSksbj1yLmluZGV4T2YoZSk7cmV0dXJuIG48MD9pOihyLnNwbGljZShuLDEpLGModCxyKSxhKX1mdW5jdGlvbiBmKHQsZSxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoJiZ0W25dWzBdPD1lOysrbil7dmFyIGk9cih0W25dKTtpZihpKXJldHVybiBpfX1mdW5jdGlvbiBwKHQsZSxyKXtmb3IodmFyIG49dC5sZW5ndGgtMTtuPj0wJiZ0W25dWzFdPj1lOy0tbil7dmFyIGk9cih0W25dKTtpZihpKXJldHVybiBpfX1mdW5jdGlvbiBkKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3Ipe3ZhciBuPWUodFtyXSk7aWYobilyZXR1cm4gbn19ZnVuY3Rpb24gZyh0LGUpe3JldHVybiB0LWV9ZnVuY3Rpb24gdih0LGUpe3ZhciByPXRbMF0tZVswXTtyZXR1cm4gcnx8dFsxXS1lWzFdfWZ1bmN0aW9uIG0odCxlKXt2YXIgcj10WzFdLWVbMV07cmV0dXJuIHJ8fHRbMF0tZVswXX1mdW5jdGlvbiB5KHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaCh0W3JdWzBdLHRbcl1bMV0pO2Uuc29ydChnKTt2YXIgbj1lW2UubGVuZ3RoPj4xXSxpPVtdLGE9W10scz1bXTtmb3Iocj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbD10W3JdO2xbMV08bj9pLnB1c2gobCk6bjxsWzBdP2EucHVzaChsKTpzLnB1c2gobCl9dmFyIGM9cyx1PXMuc2xpY2UoKTtyZXR1cm4gYy5zb3J0KHYpLHUuc29ydChtKSxuZXcgbyhuLHkoaSkseShhKSxjLHUpfWZ1bmN0aW9uIHgodCl7dGhpcy5yb290PXR9cy5pbnRlcnZhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQucHVzaC5hcHBseSh0LHRoaXMubGVmdFBvaW50cyksdGhpcy5sZWZ0JiZ0aGlzLmxlZnQuaW50ZXJ2YWxzKHQpLHRoaXMucmlnaHQmJnRoaXMucmlnaHQuaW50ZXJ2YWxzKHQpLHR9LHMuaW5zZXJ0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY291bnQtdGhpcy5sZWZ0UG9pbnRzLmxlbmd0aDtpZih0aGlzLmNvdW50Kz0xLHRbMV08dGhpcy5taWQpdGhpcy5sZWZ0PzQqKHRoaXMubGVmdC5jb3VudCsxKT4zKihlKzEpP3UodGhpcyx0KTp0aGlzLmxlZnQuaW5zZXJ0KHQpOnRoaXMubGVmdD15KFt0XSk7ZWxzZSBpZih0WzBdPnRoaXMubWlkKXRoaXMucmlnaHQ/NCoodGhpcy5yaWdodC5jb3VudCsxKT4zKihlKzEpP3UodGhpcyx0KTp0aGlzLnJpZ2h0Lmluc2VydCh0KTp0aGlzLnJpZ2h0PXkoW3RdKTtlbHNle3ZhciByPW4uZ2UodGhpcy5sZWZ0UG9pbnRzLHQsdiksaT1uLmdlKHRoaXMucmlnaHRQb2ludHMsdCxtKTt0aGlzLmxlZnRQb2ludHMuc3BsaWNlKHIsMCx0KSx0aGlzLnJpZ2h0UG9pbnRzLnNwbGljZShpLDAsdCl9fSxzLnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvdW50LXRoaXMubGVmdFBvaW50cztpZih0WzFdPHRoaXMubWlkKXJldHVybiB0aGlzLmxlZnQ/NCoodGhpcy5yaWdodD90aGlzLnJpZ2h0LmNvdW50OjApPjMqKGUtMSk/aCh0aGlzLHQpOjI9PT0oYz10aGlzLmxlZnQucmVtb3ZlKHQpKT8odGhpcy5sZWZ0PW51bGwsdGhpcy5jb3VudC09MSxhKTooYz09PWEmJih0aGlzLmNvdW50LT0xKSxjKTppO2lmKHRbMF0+dGhpcy5taWQpcmV0dXJuIHRoaXMucmlnaHQ/NCoodGhpcy5sZWZ0P3RoaXMubGVmdC5jb3VudDowKT4zKihlLTEpP2godGhpcyx0KToyPT09KGM9dGhpcy5yaWdodC5yZW1vdmUodCkpPyh0aGlzLnJpZ2h0PW51bGwsdGhpcy5jb3VudC09MSxhKTooYz09PWEmJih0aGlzLmNvdW50LT0xKSxjKTppO2lmKDE9PT10aGlzLmNvdW50KXJldHVybiB0aGlzLmxlZnRQb2ludHNbMF09PT10PzI6aTtpZigxPT09dGhpcy5sZWZ0UG9pbnRzLmxlbmd0aCYmdGhpcy5sZWZ0UG9pbnRzWzBdPT09dCl7aWYodGhpcy5sZWZ0JiZ0aGlzLnJpZ2h0KXtmb3IodmFyIHI9dGhpcyxvPXRoaXMubGVmdDtvLnJpZ2h0OylyPW8sbz1vLnJpZ2h0O2lmKHI9PT10aGlzKW8ucmlnaHQ9dGhpcy5yaWdodDtlbHNle3ZhciBzPXRoaXMubGVmdCxjPXRoaXMucmlnaHQ7ci5jb3VudC09by5jb3VudCxyLnJpZ2h0PW8ubGVmdCxvLmxlZnQ9cyxvLnJpZ2h0PWN9bCh0aGlzLG8pLHRoaXMuY291bnQ9KHRoaXMubGVmdD90aGlzLmxlZnQuY291bnQ6MCkrKHRoaXMucmlnaHQ/dGhpcy5yaWdodC5jb3VudDowKSt0aGlzLmxlZnRQb2ludHMubGVuZ3RofWVsc2UgdGhpcy5sZWZ0P2wodGhpcyx0aGlzLmxlZnQpOmwodGhpcyx0aGlzLnJpZ2h0KTtyZXR1cm4gYX1mb3Iocz1uLmdlKHRoaXMubGVmdFBvaW50cyx0LHYpO3M8dGhpcy5sZWZ0UG9pbnRzLmxlbmd0aCYmdGhpcy5sZWZ0UG9pbnRzW3NdWzBdPT09dFswXTsrK3MpaWYodGhpcy5sZWZ0UG9pbnRzW3NdPT09dCl7dGhpcy5jb3VudC09MSx0aGlzLmxlZnRQb2ludHMuc3BsaWNlKHMsMSk7Zm9yKGM9bi5nZSh0aGlzLnJpZ2h0UG9pbnRzLHQsbSk7Yzx0aGlzLnJpZ2h0UG9pbnRzLmxlbmd0aCYmdGhpcy5yaWdodFBvaW50c1tjXVsxXT09PXRbMV07KytjKWlmKHRoaXMucmlnaHRQb2ludHNbY109PT10KXJldHVybiB0aGlzLnJpZ2h0UG9pbnRzLnNwbGljZShjLDEpLGF9cmV0dXJuIGl9LHMucXVlcnlQb2ludD1mdW5jdGlvbih0LGUpe2lmKHQ8dGhpcy5taWQpe2lmKHRoaXMubGVmdClpZihyPXRoaXMubGVmdC5xdWVyeVBvaW50KHQsZSkpcmV0dXJuIHI7cmV0dXJuIGYodGhpcy5sZWZ0UG9pbnRzLHQsZSl9aWYodD50aGlzLm1pZCl7dmFyIHI7aWYodGhpcy5yaWdodClpZihyPXRoaXMucmlnaHQucXVlcnlQb2ludCh0LGUpKXJldHVybiByO3JldHVybiBwKHRoaXMucmlnaHRQb2ludHMsdCxlKX1yZXR1cm4gZCh0aGlzLmxlZnRQb2ludHMsZSl9LHMucXVlcnlJbnRlcnZhbD1mdW5jdGlvbih0LGUscil7dmFyIG47aWYodDx0aGlzLm1pZCYmdGhpcy5sZWZ0JiYobj10aGlzLmxlZnQucXVlcnlJbnRlcnZhbCh0LGUscikpKXJldHVybiBuO2lmKGU+dGhpcy5taWQmJnRoaXMucmlnaHQmJihuPXRoaXMucmlnaHQucXVlcnlJbnRlcnZhbCh0LGUscikpKXJldHVybiBuO3JldHVybiBlPHRoaXMubWlkP2YodGhpcy5sZWZ0UG9pbnRzLGUscik6dD50aGlzLm1pZD9wKHRoaXMucmlnaHRQb2ludHMsdCxyKTpkKHRoaXMubGVmdFBvaW50cyxyKX07dmFyIGI9eC5wcm90b3R5cGU7Yi5pbnNlcnQ9ZnVuY3Rpb24odCl7dGhpcy5yb290P3RoaXMucm9vdC5pbnNlcnQodCk6dGhpcy5yb290PW5ldyBvKHRbMF0sbnVsbCxudWxsLFt0XSxbdF0pfSxiLnJlbW92ZT1mdW5jdGlvbih0KXtpZih0aGlzLnJvb3Qpe3ZhciBlPXRoaXMucm9vdC5yZW1vdmUodCk7cmV0dXJuIDI9PT1lJiYodGhpcy5yb290PW51bGwpLGUhPT1pfXJldHVybiExfSxiLnF1ZXJ5UG9pbnQ9ZnVuY3Rpb24odCxlKXtpZih0aGlzLnJvb3QpcmV0dXJuIHRoaXMucm9vdC5xdWVyeVBvaW50KHQsZSl9LGIucXVlcnlJbnRlcnZhbD1mdW5jdGlvbih0LGUscil7aWYodDw9ZSYmdGhpcy5yb290KXJldHVybiB0aGlzLnJvb3QucXVlcnlJbnRlcnZhbCh0LGUscil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLFwiY291bnRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdD90aGlzLnJvb3QuY291bnQ6MH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYixcImludGVydmFsc1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290P3RoaXMucm9vdC5pbnRlcnZhbHMoW10pOltdfX0pfSx7XCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiOjgyfV0sNDA4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHxuZXcgQXJyYXkodC5sZW5ndGgpO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKWVbdFtyXV09cjtyZXR1cm4gZX19LHt9XSw0MDk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0OysrcillW3JdPXI7cmV0dXJuIGV9fSx7fV0sNDEwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPSEwfSx7fV0sNDExOltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXtyZXR1cm4hIXQuY29uc3RydWN0b3ImJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQuY29uc3RydWN0b3IuaXNCdWZmZXImJnQuY29uc3RydWN0b3IuaXNCdWZmZXIodCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10JiYobih0KXx8ZnVuY3Rpb24odCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdC5yZWFkRmxvYXRMRSYmXCJmdW5jdGlvblwiPT10eXBlb2YgdC5zbGljZSYmbih0LnNsaWNlKDAsMCkpfSh0KXx8ISF0Ll9pc0J1ZmZlcil9fSx7fV0sNDEyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBuYXZpZ2F0b3ImJigvTVNJRS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KXx8L1RyaWRlbnRcXC8vLnRlc3QobmF2aWdhdG9yLmFwcFZlcnNpb24pKX0se31dLDQxMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1hLGUuZXhwb3J0cy5pc01vYmlsZT1hO3ZhciBuPS8oYW5kcm9pZHxiYlxcZCt8bWVlZ28pLittb2JpbGV8YXZhbnRnb3xiYWRhXFwvfGJsYWNrYmVycnl8YmxhemVyfGNvbXBhbHxlbGFpbmV8ZmVubmVjfGhpcHRvcHxpZW1vYmlsZXxpcChob25lfG9kKXxpcmlzfGtpbmRsZXxsZ2UgfG1hZW1vfG1pZHB8bW1wfG1vYmlsZS4rZmlyZWZveHxuZXRmcm9udHxvcGVyYSBtKG9ifGluKWl8cGFsbSggb3MpP3xwaG9uZXxwKGl4aXxyZSlcXC98cGx1Y2tlcnxwb2NrZXR8cHNwfHNlcmllcyg0fDYpMHxzeW1iaWFufHRyZW98dXBcXC4oYnJvd3NlcnxsaW5rKXx2b2RhZm9uZXx3YXB8d2luZG93cyAoY2V8cGhvbmUpfHhkYXx4aWluby9pLGk9LyhhbmRyb2lkfGJiXFxkK3xtZWVnbykuK21vYmlsZXxhdmFudGdvfGJhZGFcXC98YmxhY2tiZXJyeXxibGF6ZXJ8Y29tcGFsfGVsYWluZXxmZW5uZWN8aGlwdG9wfGllbW9iaWxlfGlwKGhvbmV8b2QpfGlyaXN8a2luZGxlfGxnZSB8bWFlbW98bWlkcHxtbXB8bW9iaWxlLitmaXJlZm94fG5ldGZyb250fG9wZXJhIG0ob2J8aW4paXxwYWxtKCBvcyk/fHBob25lfHAoaXhpfHJlKVxcL3xwbHVja2VyfHBvY2tldHxwc3B8c2VyaWVzKDR8NikwfHN5bWJpYW58dHJlb3x1cFxcLihicm93c2VyfGxpbmspfHZvZGFmb25lfHdhcHx3aW5kb3dzIChjZXxwaG9uZSl8eGRhfHhpaW5vfGFuZHJvaWR8aXBhZHxwbGF5Ym9va3xzaWxrL2k7ZnVuY3Rpb24gYSh0KXt0fHwodD17fSk7dmFyIGU9dC51YTtyZXR1cm4gZXx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIG5hdmlnYXRvcnx8KGU9bmF2aWdhdG9yLnVzZXJBZ2VudCksZSYmZS5oZWFkZXJzJiZcInN0cmluZ1wiPT10eXBlb2YgZS5oZWFkZXJzW1widXNlci1hZ2VudFwiXSYmKGU9ZS5oZWFkZXJzW1widXNlci1hZ2VudFwiXSksXCJzdHJpbmdcIj09dHlwZW9mIGUmJih0LnRhYmxldD9pLnRlc3QoZSk6bi50ZXN0KGUpKX19LHt9XSw0MTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIG51bGwhPT10JiYoXCJvYmplY3RcIj09PWV8fFwiZnVuY3Rpb25cIj09PWUpfX0se31dLDQxNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVyblwiW29iamVjdCBPYmplY3RdXCI9PT1uLmNhbGwodCkmJihudWxsPT09KGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKXx8ZT09PU9iamVjdC5nZXRQcm90b3R5cGVPZih7fSkpfX0se31dLDQxNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscj10Lmxlbmd0aCxuPTA7bjxyO24rKylpZigoKGU9dC5jaGFyQ29kZUF0KG4pKTw5fHxlPjEzKSYmMzIhPT1lJiYxMzMhPT1lJiYxNjAhPT1lJiY1NzYwIT09ZSYmNjE1OCE9PWUmJihlPDgxOTJ8fGU+ODIwNSkmJjgyMzIhPT1lJiY4MjMzIT09ZSYmODIzOSE9PWUmJjgyODchPT1lJiY4Mjg4IT09ZSYmMTIyODghPT1lJiY2NTI3OSE9PWUpcmV0dXJuITE7cmV0dXJuITB9fSx7fV0sNDE3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD10LnRyaW0oKSwhISgvXlttemxodmNzcXRhXVxccypbLSsuMC05XVtebWxodnpjc3F0YV0rL2kudGVzdCh0KSYmL1tcXGR6XSQvaS50ZXN0KHQpJiZ0Lmxlbmd0aD40KSl9fSx7fV0sNDE4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdCooMS1yKStlKnJ9fSx7fV0sNDE5OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LG4pe1wib2JqZWN0XCI9PXR5cGVvZiByJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZT9lLmV4cG9ydHM9bigpOnQubWFwYm94Z2w9bigpfSh0aGlzLGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGUscixuO2Z1bmN0aW9uIGkodCxpKXtpZihlKWlmKHIpe3ZhciBhPVwidmFyIHNoYXJlZENodW5rID0ge307IChcIitlK1wiKShzaGFyZWRDaHVuayk7IChcIityK1wiKShzaGFyZWRDaHVuayk7XCIsbz17fTtlKG8pLChuPWkobykpLndvcmtlclVybD13aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbYV0se3R5cGU6XCJ0ZXh0L2phdmFzY3JpcHRcIn0pKX1lbHNlIHI9aTtlbHNlIGU9aX1yZXR1cm4gaSgwLGZ1bmN0aW9uKGUpe3ZhciByPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiB0P3Q6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTtmdW5jdGlvbiBuKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LFwiZGVmYXVsdFwiKT90LmRlZmF1bHQ6dH1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQoZT17ZXhwb3J0czp7fX0sZS5leHBvcnRzKSxlLmV4cG9ydHN9dmFyIGE9bztmdW5jdGlvbiBvKHQsZSxyLG4pe3RoaXMuY3g9Myp0LHRoaXMuYng9Myooci10KS10aGlzLmN4LHRoaXMuYXg9MS10aGlzLmN4LXRoaXMuYngsdGhpcy5jeT0zKmUsdGhpcy5ieT0zKihuLWUpLXRoaXMuY3ksdGhpcy5heT0xLXRoaXMuY3ktdGhpcy5ieSx0aGlzLnAxeD10LHRoaXMucDF5PW4sdGhpcy5wMng9cix0aGlzLnAyeT1ufW8ucHJvdG90eXBlLnNhbXBsZUN1cnZlWD1mdW5jdGlvbih0KXtyZXR1cm4oKHRoaXMuYXgqdCt0aGlzLmJ4KSp0K3RoaXMuY3gpKnR9LG8ucHJvdG90eXBlLnNhbXBsZUN1cnZlWT1mdW5jdGlvbih0KXtyZXR1cm4oKHRoaXMuYXkqdCt0aGlzLmJ5KSp0K3RoaXMuY3kpKnR9LG8ucHJvdG90eXBlLnNhbXBsZUN1cnZlRGVyaXZhdGl2ZVg9ZnVuY3Rpb24odCl7cmV0dXJuKDMqdGhpcy5heCp0KzIqdGhpcy5ieCkqdCt0aGlzLmN4fSxvLnByb3RvdHlwZS5zb2x2ZUN1cnZlWD1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG87Zm9yKHZvaWQgMD09PWUmJihlPTFlLTYpLGk9dCxvPTA7bzw4O28rKyl7aWYoYT10aGlzLnNhbXBsZUN1cnZlWChpKS10LE1hdGguYWJzKGEpPGUpcmV0dXJuIGk7dmFyIHM9dGhpcy5zYW1wbGVDdXJ2ZURlcml2YXRpdmVYKGkpO2lmKE1hdGguYWJzKHMpPDFlLTYpYnJlYWs7aS09YS9zfWlmKChpPXQpPChyPTApKXJldHVybiByO2lmKGk+KG49MSkpcmV0dXJuIG47Zm9yKDtyPG47KXtpZihhPXRoaXMuc2FtcGxlQ3VydmVYKGkpLE1hdGguYWJzKGEtdCk8ZSlyZXR1cm4gaTt0PmE/cj1pOm49aSxpPS41KihuLXIpK3J9cmV0dXJuIGl9LG8ucHJvdG90eXBlLnNvbHZlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc2FtcGxlQ3VydmVZKHRoaXMuc29sdmVDdXJ2ZVgodCxlKSl9O3ZhciBzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmNvbHVtbj10LHRoaXMucm93PWUsdGhpcy56b29tPXJ9O3MucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBzKHRoaXMuY29sdW1uLHRoaXMucm93LHRoaXMuem9vbSl9LHMucHJvdG90eXBlLnpvb21Ubz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl96b29tVG8odCl9LHMucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9zdWIodCl9LHMucHJvdG90eXBlLl96b29tVG89ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5wb3coMix0LXRoaXMuem9vbSk7cmV0dXJuIHRoaXMuY29sdW1uKj1lLHRoaXMucm93Kj1lLHRoaXMuem9vbT10LHRoaXN9LHMucHJvdG90eXBlLl9zdWI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9dC56b29tVG8odGhpcy56b29tKSx0aGlzLmNvbHVtbi09dC5jb2x1bW4sdGhpcy5yb3ctPXQucm93LHRoaXN9O3ZhciBsPWM7ZnVuY3Rpb24gYyh0LGUpe3RoaXMueD10LHRoaXMueT1lfWZ1bmN0aW9uIHUodCxlLHIsbil7dmFyIGk9bmV3IGEodCxlLHIsbik7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLnNvbHZlKHQpfX1jLnByb3RvdHlwZT17Y2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGModGhpcy54LHRoaXMueSl9LGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9hZGQodCl9LHN1YjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9zdWIodCl9LG11bHRCeVBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX211bHRCeVBvaW50KHQpfSxkaXZCeVBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2RpdkJ5UG9pbnQodCl9LG11bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fbXVsdCh0KX0sZGl2OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2Rpdih0KX0scm90YXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX3JvdGF0ZSh0KX0scm90YXRlQXJvdW5kOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fcm90YXRlQXJvdW5kKHQsZSl9LG1hdE11bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fbWF0TXVsdCh0KX0sdW5pdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX3VuaXQoKX0scGVycDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX3BlcnAoKX0scm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3VuZCgpfSxtYWc6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSl9LGVxdWFsczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54PT09dC54JiZ0aGlzLnk9PT10Lnl9LGRpc3Q6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RTcXIodCkpfSxkaXN0U3FyOmZ1bmN0aW9uKHQpe3ZhciBlPXQueC10aGlzLngscj10LnktdGhpcy55O3JldHVybiBlKmUrcipyfSxhbmdsZTpmdW5jdGlvbigpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueSx0aGlzLngpfSxhbmdsZVRvOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueS10LnksdGhpcy54LXQueCl9LGFuZ2xlV2l0aDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hbmdsZVdpdGhTZXAodC54LHQueSl9LGFuZ2xlV2l0aFNlcDpmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueCplLXRoaXMueSp0LHRoaXMueCp0K3RoaXMueSplKX0sX21hdE11bHQ6ZnVuY3Rpb24odCl7dmFyIGU9dFswXSp0aGlzLngrdFsxXSp0aGlzLnkscj10WzJdKnRoaXMueCt0WzNdKnRoaXMueTtyZXR1cm4gdGhpcy54PWUsdGhpcy55PXIsdGhpc30sX2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpc30sX3N1YjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54LT10LngsdGhpcy55LT10LnksdGhpc30sX211bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpc30sX2RpdjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Lz10LHRoaXMueS89dCx0aGlzfSxfbXVsdEJ5UG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXN9LF9kaXZCeVBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngvPXQueCx0aGlzLnkvPXQueSx0aGlzfSxfdW5pdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXYodGhpcy5tYWcoKSksdGhpc30sX3BlcnA6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnk7cmV0dXJuIHRoaXMueT10aGlzLngsdGhpcy54PS10LHRoaXN9LF9yb3RhdGU6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5jb3ModCkscj1NYXRoLnNpbih0KSxuPWUqdGhpcy54LXIqdGhpcy55LGk9cip0aGlzLngrZSp0aGlzLnk7cmV0dXJuIHRoaXMueD1uLHRoaXMueT1pLHRoaXN9LF9yb3RhdGVBcm91bmQ6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpLGk9ZS54K3IqKHRoaXMueC1lLngpLW4qKHRoaXMueS1lLnkpLGE9ZS55K24qKHRoaXMueC1lLngpK3IqKHRoaXMueS1lLnkpO3JldHVybiB0aGlzLng9aSx0aGlzLnk9YSx0aGlzfSxfcm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXN9fSxjLmNvbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBjP3Q6QXJyYXkuaXNBcnJheSh0KT9uZXcgYyh0WzBdLHRbMV0pOnR9O3ZhciBoPXUoLjI1LC4xLC4yNSwxKTtmdW5jdGlvbiBmKHQsZSxyKXtyZXR1cm4gTWF0aC5taW4ocixNYXRoLm1heChlLHQpKX1mdW5jdGlvbiBwKHQpe2Zvcih2YXIgZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGgtMTtyLS0gPjA7KWVbcl09YXJndW1lbnRzW3IrMV07Zm9yKHZhciBuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtmb3IodmFyIG8gaW4gYSl0W29dPWFbb119cmV0dXJuIHR9dmFyIGQ9MTtmdW5jdGlvbiBnKHQsZSl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF0mJihlW3RdPWVbdF0uYmluZChlKSl9KX1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuLTEhPT10LmluZGV4T2YoZSx0Lmxlbmd0aC1lLmxlbmd0aCl9ZnVuY3Rpb24gbSh0LGUscil7dmFyIG49e307Zm9yKHZhciBpIGluIHQpbltpXT1lLmNhbGwocnx8dGhpcyx0W2ldLGksdCk7cmV0dXJuIG59ZnVuY3Rpb24geSh0LGUscil7dmFyIG49e307Zm9yKHZhciBpIGluIHQpZS5jYWxsKHJ8fHRoaXMsdFtpXSxpLHQpJiYobltpXT10W2ldKTtyZXR1cm4gbn1mdW5jdGlvbiB4KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3QubWFwKHgpOlwib2JqZWN0XCI9PXR5cGVvZiB0JiZ0P20odCx4KTp0fXZhciBiPXt9O2Z1bmN0aW9uIF8odCl7Ylt0XXx8KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBjb25zb2xlJiZjb25zb2xlLndhcm4odCksYlt0XT0hMCl9ZnVuY3Rpb24gdyh0LGUscil7cmV0dXJuKHIueS10LnkpKihlLngtdC54KT4oZS55LXQueSkqKHIueC10LngpfWZ1bmN0aW9uIGsodCl7Zm9yKHZhciBlPTAscj0wLG49dC5sZW5ndGgsaT1uLTEsYT12b2lkIDAsbz12b2lkIDA7cjxuO2k9cisrKWE9dFtyXSxlKz0oKG89dFtpXSkueC1hLngpKihhLnkrby55KTtyZXR1cm4gZX12YXIgQT17VW5rbm93bjpcIlVua25vd25cIixTdHlsZTpcIlN0eWxlXCIsU291cmNlOlwiU291cmNlXCIsVGlsZTpcIlRpbGVcIixHbHlwaHM6XCJHbHlwaHNcIixTcHJpdGVJbWFnZTpcIlNwcml0ZUltYWdlXCIsU3ByaXRlSlNPTjpcIlNwcml0ZUpTT05cIixJbWFnZTpcIkltYWdlXCJ9O1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5mcmVlemUmJk9iamVjdC5mcmVlemUoQSk7dmFyIFQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIsbil7dC5jYWxsKHRoaXMsZSksdGhpcy5zdGF0dXM9cix0aGlzLnVybD1uLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsdGhpcy5tZXNzYWdlPWV9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZStcIjogXCIrdGhpcy5tZXNzYWdlK1wiIChcIit0aGlzLnN0YXR1cytcIik6IFwiK3RoaXMudXJsfSxlfShFcnJvcik7ZnVuY3Rpb24gTSh0KXt2YXIgZT1uZXcgc2VsZi5YTUxIdHRwUmVxdWVzdDtmb3IodmFyIHIgaW4gZS5vcGVuKFwiR0VUXCIsdC51cmwsITApLHQuaGVhZGVycyllLnNldFJlcXVlc3RIZWFkZXIocix0LmhlYWRlcnNbcl0pO3JldHVybiBlLndpdGhDcmVkZW50aWFscz1cImluY2x1ZGVcIj09PXQuY3JlZGVudGlhbHMsZX12YXIgUz1mdW5jdGlvbih0LGUpe3ZhciByPU0odCk7cmV0dXJuIHIucmVzcG9uc2VUeXBlPVwiYXJyYXlidWZmZXJcIixyLm9uZXJyb3I9ZnVuY3Rpb24oKXtlKG5ldyBFcnJvcihyLnN0YXR1c1RleHQpKX0sci5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgbj1yLnJlc3BvbnNlO2lmKDA9PT1uLmJ5dGVMZW5ndGgmJjIwMD09PXIuc3RhdHVzKXJldHVybiBlKG5ldyBFcnJvcihcImh0dHAgc3RhdHVzIDIwMCByZXR1cm5lZCB3aXRob3V0IGNvbnRlbnQuXCIpKTtyLnN0YXR1cz49MjAwJiZyLnN0YXR1czwzMDAmJnIucmVzcG9uc2U/ZShudWxsLHtkYXRhOm4sY2FjaGVDb250cm9sOnIuZ2V0UmVzcG9uc2VIZWFkZXIoXCJDYWNoZS1Db250cm9sXCIpLGV4cGlyZXM6ci5nZXRSZXNwb25zZUhlYWRlcihcIkV4cGlyZXNcIil9KTplKG5ldyBUKHIuc3RhdHVzVGV4dCxyLnN0YXR1cyx0LnVybCkpfSxyLnNlbmQoKSxyfTtmdW5jdGlvbiBFKHQsZSxyKXtyW3RdPXJbdF18fFtdLHJbdF0ucHVzaChlKX1mdW5jdGlvbiBDKHQsZSxyKXtpZihyJiZyW3RdKXt2YXIgbj1yW3RdLmluZGV4T2YoZSk7LTEhPT1uJiZyW3RdLnNwbGljZShuLDEpfX12YXIgTD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXt9KSxwKHRoaXMsZSksdGhpcy50eXBlPXR9LHo9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3ZvaWQgMD09PXImJihyPXt9KSx0LmNhbGwodGhpcyxcImVycm9yXCIscCh7ZXJyb3I6ZX0scikpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlfShMKSxPPWZ1bmN0aW9uKCl7fTtPLnByb3RvdHlwZS5vbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9saXN0ZW5lcnM9dGhpcy5fbGlzdGVuZXJzfHx7fSxFKHQsZSx0aGlzLl9saXN0ZW5lcnMpLHRoaXN9LE8ucHJvdG90eXBlLm9mZj1mdW5jdGlvbih0LGUpe3JldHVybiBDKHQsZSx0aGlzLl9saXN0ZW5lcnMpLEModCxlLHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMpLHRoaXN9LE8ucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fb25lVGltZUxpc3RlbmVycz10aGlzLl9vbmVUaW1lTGlzdGVuZXJzfHx7fSxFKHQsZSx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzKSx0aGlzfSxPLnByb3RvdHlwZS5maXJlPWZ1bmN0aW9uKHQpe1wic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1uZXcgTCh0LGFyZ3VtZW50c1sxXXx8e30pKTt2YXIgZT10LnR5cGU7aWYodGhpcy5saXN0ZW5zKGUpKXt0LnRhcmdldD10aGlzO2Zvcih2YXIgcj0wLG49dGhpcy5fbGlzdGVuZXJzJiZ0aGlzLl9saXN0ZW5lcnNbZV0/dGhpcy5fbGlzdGVuZXJzW2VdLnNsaWNlKCk6W107cjxuLmxlbmd0aDtyKz0xKW5bcl0uY2FsbCh0aGlzLHQpO2Zvcih2YXIgaT0wLGE9dGhpcy5fb25lVGltZUxpc3RlbmVycyYmdGhpcy5fb25lVGltZUxpc3RlbmVyc1tlXT90aGlzLl9vbmVUaW1lTGlzdGVuZXJzW2VdLnNsaWNlKCk6W107aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO0MoZSxvLHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMpLG8uY2FsbCh0aGlzLHQpfXZhciBzPXRoaXMuX2V2ZW50ZWRQYXJlbnQ7cyYmKHAodCxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLl9ldmVudGVkUGFyZW50RGF0YT90aGlzLl9ldmVudGVkUGFyZW50RGF0YSgpOnRoaXMuX2V2ZW50ZWRQYXJlbnREYXRhKSxzLmZpcmUodCkpfWVsc2UgdihlLFwiZXJyb3JcIik/Y29uc29sZS5lcnJvcih0JiZ0LmVycm9yfHx0fHxcIkVtcHR5IGVycm9yIGV2ZW50XCIpOnYoZSxcIndhcm5pbmdcIikmJmNvbnNvbGUud2Fybih0JiZ0Lndhcm5pbmd8fHR8fFwiRW1wdHkgd2FybmluZyBldmVudFwiKTtyZXR1cm4gdGhpc30sTy5wcm90b3R5cGUubGlzdGVucz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGlzdGVuZXJzJiZ0aGlzLl9saXN0ZW5lcnNbdF0mJnRoaXMuX2xpc3RlbmVyc1t0XS5sZW5ndGg+MHx8dGhpcy5fb25lVGltZUxpc3RlbmVycyYmdGhpcy5fb25lVGltZUxpc3RlbmVyc1t0XSYmdGhpcy5fb25lVGltZUxpc3RlbmVyc1t0XS5sZW5ndGg+MHx8dGhpcy5fZXZlbnRlZFBhcmVudCYmdGhpcy5fZXZlbnRlZFBhcmVudC5saXN0ZW5zKHQpfSxPLnByb3RvdHlwZS5zZXRFdmVudGVkUGFyZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2V2ZW50ZWRQYXJlbnQ9dCx0aGlzLl9ldmVudGVkUGFyZW50RGF0YT1lLHRoaXN9O3ZhciBJPXskdmVyc2lvbjo4LCRyb290Ont2ZXJzaW9uOntyZXF1aXJlZDohMCx0eXBlOlwiZW51bVwiLHZhbHVlczpbOF19LG5hbWU6e3R5cGU6XCJzdHJpbmdcIn0sbWV0YWRhdGE6e3R5cGU6XCIqXCJ9LGNlbnRlcjp7dHlwZTpcImFycmF5XCIsdmFsdWU6XCJudW1iZXJcIn0sem9vbTp7dHlwZTpcIm51bWJlclwifSxiZWFyaW5nOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLHBlcmlvZDozNjAsdW5pdHM6XCJkZWdyZWVzXCJ9LHBpdGNoOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLHVuaXRzOlwiZGVncmVlc1wifSxsaWdodDp7dHlwZTpcImxpZ2h0XCJ9LHNvdXJjZXM6e3JlcXVpcmVkOiEwLHR5cGU6XCJzb3VyY2VzXCJ9LHNwcml0ZTp7dHlwZTpcInN0cmluZ1wifSxnbHlwaHM6e3R5cGU6XCJzdHJpbmdcIn0sdHJhbnNpdGlvbjp7dHlwZTpcInRyYW5zaXRpb25cIn0sbGF5ZXJzOntyZXF1aXJlZDohMCx0eXBlOlwiYXJyYXlcIix2YWx1ZTpcImxheWVyXCJ9fSxzb3VyY2VzOntcIipcIjp7dHlwZTpcInNvdXJjZVwifX0sc291cmNlOltcInNvdXJjZV92ZWN0b3JcIixcInNvdXJjZV9yYXN0ZXJcIixcInNvdXJjZV9yYXN0ZXJfZGVtXCIsXCJzb3VyY2VfZ2VvanNvblwiLFwic291cmNlX3ZpZGVvXCIsXCJzb3VyY2VfaW1hZ2VcIl0sc291cmNlX3ZlY3Rvcjp7dHlwZTp7cmVxdWlyZWQ6ITAsdHlwZTpcImVudW1cIix2YWx1ZXM6e3ZlY3Rvcjp7fX19LHVybDp7dHlwZTpcInN0cmluZ1wifSx0aWxlczp7dHlwZTpcImFycmF5XCIsdmFsdWU6XCJzdHJpbmdcIn0sYm91bmRzOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcIm51bWJlclwiLGxlbmd0aDo0LGRlZmF1bHQ6Wy0xODAsLTg1LjA1MTEsMTgwLDg1LjA1MTFdfSxtaW56b29tOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowfSxtYXh6b29tOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoyMn0sYXR0cmlidXRpb246e3R5cGU6XCJzdHJpbmdcIn0sXCIqXCI6e3R5cGU6XCIqXCJ9fSxzb3VyY2VfcmFzdGVyOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOlwiZW51bVwiLHZhbHVlczp7cmFzdGVyOnt9fX0sdXJsOnt0eXBlOlwic3RyaW5nXCJ9LHRpbGVzOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcInN0cmluZ1wifSxib3VuZHM6e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwibnVtYmVyXCIsbGVuZ3RoOjQsZGVmYXVsdDpbLTE4MCwtODUuMDUxMSwxODAsODUuMDUxMV19LG1pbnpvb206e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjB9LG1heHpvb206e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjIyfSx0aWxlU2l6ZTp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6NTEyLHVuaXRzOlwicGl4ZWxzXCJ9LHNjaGVtZTp7dHlwZTpcImVudW1cIix2YWx1ZXM6e3h5ejp7fSx0bXM6e319LGRlZmF1bHQ6XCJ4eXpcIn0sYXR0cmlidXRpb246e3R5cGU6XCJzdHJpbmdcIn0sXCIqXCI6e3R5cGU6XCIqXCJ9fSxzb3VyY2VfcmFzdGVyX2RlbTp7dHlwZTp7cmVxdWlyZWQ6ITAsdHlwZTpcImVudW1cIix2YWx1ZXM6e1wicmFzdGVyLWRlbVwiOnt9fX0sdXJsOnt0eXBlOlwic3RyaW5nXCJ9LHRpbGVzOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcInN0cmluZ1wifSxib3VuZHM6e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwibnVtYmVyXCIsbGVuZ3RoOjQsZGVmYXVsdDpbLTE4MCwtODUuMDUxMSwxODAsODUuMDUxMV19LG1pbnpvb206e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjB9LG1heHpvb206e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjIyfSx0aWxlU2l6ZTp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6NTEyLHVuaXRzOlwicGl4ZWxzXCJ9LGF0dHJpYnV0aW9uOnt0eXBlOlwic3RyaW5nXCJ9LGVuY29kaW5nOnt0eXBlOlwiZW51bVwiLHZhbHVlczp7dGVycmFyaXVtOnt9LG1hcGJveDp7fX0sZGVmYXVsdDpcIm1hcGJveFwifSxcIipcIjp7dHlwZTpcIipcIn19LHNvdXJjZV9nZW9qc29uOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOlwiZW51bVwiLHZhbHVlczp7Z2VvanNvbjp7fX19LGRhdGE6e3R5cGU6XCIqXCJ9LG1heHpvb206e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjE4fSxidWZmZXI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjEyOCxtYXhpbXVtOjUxMixtaW5pbXVtOjB9LHRvbGVyYW5jZTp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6LjM3NX0sY2x1c3Rlcjp7dHlwZTpcImJvb2xlYW5cIixkZWZhdWx0OiExfSxjbHVzdGVyUmFkaXVzOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDo1MCxtaW5pbXVtOjB9LGNsdXN0ZXJNYXhab29tOnt0eXBlOlwibnVtYmVyXCJ9LGxpbmVNZXRyaWNzOnt0eXBlOlwiYm9vbGVhblwiLGRlZmF1bHQ6ITF9fSxzb3VyY2VfdmlkZW86e3R5cGU6e3JlcXVpcmVkOiEwLHR5cGU6XCJlbnVtXCIsdmFsdWVzOnt2aWRlbzp7fX19LHVybHM6e3JlcXVpcmVkOiEwLHR5cGU6XCJhcnJheVwiLHZhbHVlOlwic3RyaW5nXCJ9LGNvb3JkaW5hdGVzOntyZXF1aXJlZDohMCx0eXBlOlwiYXJyYXlcIixsZW5ndGg6NCx2YWx1ZTp7dHlwZTpcImFycmF5XCIsbGVuZ3RoOjIsdmFsdWU6XCJudW1iZXJcIn19fSxzb3VyY2VfaW1hZ2U6e3R5cGU6e3JlcXVpcmVkOiEwLHR5cGU6XCJlbnVtXCIsdmFsdWVzOntpbWFnZTp7fX19LHVybDp7cmVxdWlyZWQ6ITAsdHlwZTpcInN0cmluZ1wifSxjb29yZGluYXRlczp7cmVxdWlyZWQ6ITAsdHlwZTpcImFycmF5XCIsbGVuZ3RoOjQsdmFsdWU6e3R5cGU6XCJhcnJheVwiLGxlbmd0aDoyLHZhbHVlOlwibnVtYmVyXCJ9fX0sbGF5ZXI6e2lkOnt0eXBlOlwic3RyaW5nXCIscmVxdWlyZWQ6ITB9LHR5cGU6e3R5cGU6XCJlbnVtXCIsdmFsdWVzOntmaWxsOnt9LGxpbmU6e30sc3ltYm9sOnt9LGNpcmNsZTp7fSxoZWF0bWFwOnt9LFwiZmlsbC1leHRydXNpb25cIjp7fSxyYXN0ZXI6e30saGlsbHNoYWRlOnt9LGJhY2tncm91bmQ6e319LHJlcXVpcmVkOiEwfSxtZXRhZGF0YTp7dHlwZTpcIipcIn0sc291cmNlOnt0eXBlOlwic3RyaW5nXCJ9LFwic291cmNlLWxheWVyXCI6e3R5cGU6XCJzdHJpbmdcIn0sbWluem9vbTp7dHlwZTpcIm51bWJlclwiLG1pbmltdW06MCxtYXhpbXVtOjI0fSxtYXh6b29tOnt0eXBlOlwibnVtYmVyXCIsbWluaW11bTowLG1heGltdW06MjR9LGZpbHRlcjp7dHlwZTpcImZpbHRlclwifSxsYXlvdXQ6e3R5cGU6XCJsYXlvdXRcIn0scGFpbnQ6e3R5cGU6XCJwYWludFwifX0sbGF5b3V0OltcImxheW91dF9maWxsXCIsXCJsYXlvdXRfbGluZVwiLFwibGF5b3V0X2NpcmNsZVwiLFwibGF5b3V0X2hlYXRtYXBcIixcImxheW91dF9maWxsLWV4dHJ1c2lvblwiLFwibGF5b3V0X3N5bWJvbFwiLFwibGF5b3V0X3Jhc3RlclwiLFwibGF5b3V0X2hpbGxzaGFkZVwiLFwibGF5b3V0X2JhY2tncm91bmRcIl0sbGF5b3V0X2JhY2tncm91bmQ6e3Zpc2liaWxpdHk6e3R5cGU6XCJlbnVtXCIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6XCJ2aXNpYmxlXCJ9fSxsYXlvdXRfZmlsbDp7dmlzaWJpbGl0eTp7dHlwZTpcImVudW1cIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDpcInZpc2libGVcIn19LGxheW91dF9jaXJjbGU6e3Zpc2liaWxpdHk6e3R5cGU6XCJlbnVtXCIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6XCJ2aXNpYmxlXCJ9fSxsYXlvdXRfaGVhdG1hcDp7dmlzaWJpbGl0eTp7dHlwZTpcImVudW1cIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDpcInZpc2libGVcIn19LGxheW91dF9saW5lOntcImxpbmUtY2FwXCI6e3R5cGU6XCJlbnVtXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCx2YWx1ZXM6e2J1dHQ6e30scm91bmQ6e30sc3F1YXJlOnt9fSxkZWZhdWx0OlwiYnV0dFwifSxcImxpbmUtam9pblwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHZhbHVlczp7YmV2ZWw6e30scm91bmQ6e30sbWl0ZXI6e319LGRlZmF1bHQ6XCJtaXRlclwifSxcImxpbmUtbWl0ZXItbGltaXRcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHJlcXVpcmVzOlt7XCJsaW5lLWpvaW5cIjpcIm1pdGVyXCJ9XX0sXCJsaW5lLXJvdW5kLWxpbWl0XCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjEuMDUsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxyZXF1aXJlczpbe1wibGluZS1qb2luXCI6XCJyb3VuZFwifV19LHZpc2liaWxpdHk6e3R5cGU6XCJlbnVtXCIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6XCJ2aXNpYmxlXCJ9fSxsYXlvdXRfc3ltYm9sOntcInN5bWJvbC1wbGFjZW1lbnRcIjp7dHlwZTpcImVudW1cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHZhbHVlczp7cG9pbnQ6e30sbGluZTp7fX0sZGVmYXVsdDpcInBvaW50XCJ9LFwic3ltYm9sLXNwYWNpbmdcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MjUwLG1pbmltdW06MSxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHVuaXRzOlwicGl4ZWxzXCIscmVxdWlyZXM6W3tcInN5bWJvbC1wbGFjZW1lbnRcIjpcImxpbmVcIn1dfSxcInN5bWJvbC1hdm9pZC1lZGdlc1wiOnt0eXBlOlwiYm9vbGVhblwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsZGVmYXVsdDohMX0sXCJpY29uLWFsbG93LW92ZXJsYXBcIjp7dHlwZTpcImJvb2xlYW5cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLGRlZmF1bHQ6ITEscmVxdWlyZXM6W1wiaWNvbi1pbWFnZVwiXX0sXCJpY29uLWlnbm9yZS1wbGFjZW1lbnRcIjp7dHlwZTpcImJvb2xlYW5cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLGRlZmF1bHQ6ITEscmVxdWlyZXM6W1wiaWNvbi1pbWFnZVwiXX0sXCJpY29uLW9wdGlvbmFsXCI6e3R5cGU6XCJib29sZWFuXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOltcImljb24taW1hZ2VcIixcInRleHQtZmllbGRcIl19LFwiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnRcIjp7dHlwZTpcImVudW1cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9LGF1dG86e319LGRlZmF1bHQ6XCJhdXRvXCIscmVxdWlyZXM6W1wiaWNvbi1pbWFnZVwiXX0sXCJpY29uLXNpemVcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdW5pdHM6XCJmYWN0b3Igb2YgdGhlIG9yaWdpbmFsIGljb24gc2l6ZVwiLHJlcXVpcmVzOltcImljb24taW1hZ2VcIl19LFwiaWNvbi10ZXh0LWZpdFwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdmFsdWVzOntub25lOnt9LHdpZHRoOnt9LGhlaWdodDp7fSxib3RoOnt9fSxkZWZhdWx0Olwibm9uZVwiLHJlcXVpcmVzOltcImljb24taW1hZ2VcIixcInRleHQtZmllbGRcIl19LFwiaWNvbi10ZXh0LWZpdC1wYWRkaW5nXCI6e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwibnVtYmVyXCIsbGVuZ3RoOjQsZGVmYXVsdDpbMCwwLDAsMF0sdW5pdHM6XCJwaXhlbHNcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHJlcXVpcmVzOltcImljb24taW1hZ2VcIixcInRleHQtZmllbGRcIix7XCJpY29uLXRleHQtZml0XCI6W1wiYm90aFwiLFwid2lkdGhcIixcImhlaWdodFwiXX1dfSxcImljb24taW1hZ2VcIjp7dHlwZTpcInN0cmluZ1wiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRva2VuczohMH0sXCJpY29uLXJvdGF0ZVwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLHBlcmlvZDozNjAsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdW5pdHM6XCJkZWdyZWVzXCIscmVxdWlyZXM6W1wiaWNvbi1pbWFnZVwiXX0sXCJpY29uLXBhZGRpbmdcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MixtaW5pbXVtOjAsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCx1bml0czpcInBpeGVsc1wiLHJlcXVpcmVzOltcImljb24taW1hZ2VcIl19LFwiaWNvbi1rZWVwLXVwcmlnaHRcIjp7dHlwZTpcImJvb2xlYW5cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLGRlZmF1bHQ6ITEscmVxdWlyZXM6W1wiaWNvbi1pbWFnZVwiLHtcImljb24tcm90YXRpb24tYWxpZ25tZW50XCI6XCJtYXBcIn0se1wic3ltYm9sLXBsYWNlbWVudFwiOlwibGluZVwifV19LFwiaWNvbi1vZmZzZXRcIjp7dHlwZTpcImFycmF5XCIsdmFsdWU6XCJudW1iZXJcIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHJlcXVpcmVzOltcImljb24taW1hZ2VcIl19LFwiaWNvbi1hbmNob3JcIjp7dHlwZTpcImVudW1cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx2YWx1ZXM6e2NlbnRlcjp7fSxsZWZ0Ont9LHJpZ2h0Ont9LHRvcDp7fSxib3R0b206e30sXCJ0b3AtbGVmdFwiOnt9LFwidG9wLXJpZ2h0XCI6e30sXCJib3R0b20tbGVmdFwiOnt9LFwiYm90dG9tLXJpZ2h0XCI6e319LGRlZmF1bHQ6XCJjZW50ZXJcIixyZXF1aXJlczpbXCJpY29uLWltYWdlXCJdfSxcImljb24tcGl0Y2gtYWxpZ25tZW50XCI6e3R5cGU6XCJlbnVtXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fSxhdXRvOnt9fSxkZWZhdWx0OlwiYXV0b1wiLHJlcXVpcmVzOltcImljb24taW1hZ2VcIl19LFwidGV4dC1waXRjaC1hbGlnbm1lbnRcIjp7dHlwZTpcImVudW1cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9LGF1dG86e319LGRlZmF1bHQ6XCJhdXRvXCIscmVxdWlyZXM6W1widGV4dC1maWVsZFwiXX0sXCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudFwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e30sYXV0bzp7fX0sZGVmYXVsdDpcImF1dG9cIixyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCJdfSxcInRleHQtZmllbGRcIjp7dHlwZTpcInN0cmluZ1wiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLGRlZmF1bHQ6XCJcIix0b2tlbnM6ITB9LFwidGV4dC1mb250XCI6e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwic3RyaW5nXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsZGVmYXVsdDpbXCJPcGVuIFNhbnMgUmVndWxhclwiLFwiQXJpYWwgVW5pY29kZSBNUyBSZWd1bGFyXCJdLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC1zaXplXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjE2LG1pbmltdW06MCx1bml0czpcInBpeGVsc1wiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC1tYXgtd2lkdGhcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MTAsbWluaW11bTowLHVuaXRzOlwiZW1zXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAscmVxdWlyZXM6W1widGV4dC1maWVsZFwiXX0sXCJ0ZXh0LWxpbmUtaGVpZ2h0XCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjEuMix1bml0czpcImVtc1wiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAscmVxdWlyZXM6W1widGV4dC1maWVsZFwiXX0sXCJ0ZXh0LWxldHRlci1zcGFjaW5nXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjAsdW5pdHM6XCJlbXNcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCxyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCJdfSxcInRleHQtanVzdGlmeVwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHZhbHVlczp7bGVmdDp7fSxjZW50ZXI6e30scmlnaHQ6e319LGRlZmF1bHQ6XCJjZW50ZXJcIixyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCJdfSxcInRleHQtYW5jaG9yXCI6e3R5cGU6XCJlbnVtXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdmFsdWVzOntjZW50ZXI6e30sbGVmdDp7fSxyaWdodDp7fSx0b3A6e30sYm90dG9tOnt9LFwidG9wLWxlZnRcIjp7fSxcInRvcC1yaWdodFwiOnt9LFwiYm90dG9tLWxlZnRcIjp7fSxcImJvdHRvbS1yaWdodFwiOnt9fSxkZWZhdWx0OlwiY2VudGVyXCIscmVxdWlyZXM6W1widGV4dC1maWVsZFwiXX0sXCJ0ZXh0LW1heC1hbmdsZVwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDo0NSx1bml0czpcImRlZ3JlZXNcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHJlcXVpcmVzOltcInRleHQtZmllbGRcIix7XCJzeW1ib2wtcGxhY2VtZW50XCI6XCJsaW5lXCJ9XX0sXCJ0ZXh0LXJvdGF0ZVwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLHBlcmlvZDozNjAsdW5pdHM6XCJkZWdyZWVzXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAscmVxdWlyZXM6W1widGV4dC1maWVsZFwiXX0sXCJ0ZXh0LXBhZGRpbmdcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MixtaW5pbXVtOjAsdW5pdHM6XCJwaXhlbHNcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC1rZWVwLXVwcmlnaHRcIjp7dHlwZTpcImJvb2xlYW5cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLGRlZmF1bHQ6ITAscmVxdWlyZXM6W1widGV4dC1maWVsZFwiLHtcInRleHQtcm90YXRpb24tYWxpZ25tZW50XCI6XCJtYXBcIn0se1wic3ltYm9sLXBsYWNlbWVudFwiOlwibGluZVwifV19LFwidGV4dC10cmFuc2Zvcm1cIjp7dHlwZTpcImVudW1cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx2YWx1ZXM6e25vbmU6e30sdXBwZXJjYXNlOnt9LGxvd2VyY2FzZTp7fX0sZGVmYXVsdDpcIm5vbmVcIixyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCJdfSxcInRleHQtb2Zmc2V0XCI6e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwibnVtYmVyXCIsdW5pdHM6XCJlbXNcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCxsZW5ndGg6MixkZWZhdWx0OlswLDBdLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC1hbGxvdy1vdmVybGFwXCI6e3R5cGU6XCJib29sZWFuXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC1pZ25vcmUtcGxhY2VtZW50XCI6e3R5cGU6XCJib29sZWFuXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC1vcHRpb25hbFwiOnt0eXBlOlwiYm9vbGVhblwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsZGVmYXVsdDohMSxyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCIsXCJpY29uLWltYWdlXCJdfSx2aXNpYmlsaXR5Ont0eXBlOlwiZW51bVwiLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OlwidmlzaWJsZVwifX0sbGF5b3V0X3Jhc3Rlcjp7dmlzaWJpbGl0eTp7dHlwZTpcImVudW1cIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDpcInZpc2libGVcIn19LGxheW91dF9oaWxsc2hhZGU6e3Zpc2liaWxpdHk6e3R5cGU6XCJlbnVtXCIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6XCJ2aXNpYmxlXCJ9fSxmaWx0ZXI6e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwiKlwifSxmaWx0ZXJfb3BlcmF0b3I6e3R5cGU6XCJlbnVtXCIsdmFsdWVzOntcIj09XCI6e30sXCIhPVwiOnt9LFwiPlwiOnt9LFwiPj1cIjp7fSxcIjxcIjp7fSxcIjw9XCI6e30saW46e30sXCIhaW5cIjp7fSxhbGw6e30sYW55Ont9LG5vbmU6e30saGFzOnt9LFwiIWhhc1wiOnt9fX0sZ2VvbWV0cnlfdHlwZTp7dHlwZTpcImVudW1cIix2YWx1ZXM6e1BvaW50Ont9LExpbmVTdHJpbmc6e30sUG9seWdvbjp7fX19LGZ1bmN0aW9uX3N0b3A6e3R5cGU6XCJhcnJheVwiLG1pbmltdW06MCxtYXhpbXVtOjIyLHZhbHVlOltcIm51bWJlclwiLFwiY29sb3JcIl0sbGVuZ3RoOjJ9LGV4cHJlc3Npb246e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwiKlwiLG1pbmltdW06MX0sZXhwcmVzc2lvbl9uYW1lOnt0eXBlOlwiZW51bVwiLHZhbHVlczp7bGV0Ontncm91cDpcIlZhcmlhYmxlIGJpbmRpbmdcIn0sdmFyOntncm91cDpcIlZhcmlhYmxlIGJpbmRpbmdcIn0sbGl0ZXJhbDp7Z3JvdXA6XCJUeXBlc1wifSxhcnJheTp7Z3JvdXA6XCJUeXBlc1wifSxhdDp7Z3JvdXA6XCJMb29rdXBcIn0sY2FzZTp7Z3JvdXA6XCJEZWNpc2lvblwifSxtYXRjaDp7Z3JvdXA6XCJEZWNpc2lvblwifSxjb2FsZXNjZTp7Z3JvdXA6XCJEZWNpc2lvblwifSxzdGVwOntncm91cDpcIlJhbXBzLCBzY2FsZXMsIGN1cnZlc1wifSxpbnRlcnBvbGF0ZTp7Z3JvdXA6XCJSYW1wcywgc2NhbGVzLCBjdXJ2ZXNcIn0sbG4yOntncm91cDpcIk1hdGhcIn0scGk6e2dyb3VwOlwiTWF0aFwifSxlOntncm91cDpcIk1hdGhcIn0sdHlwZW9mOntncm91cDpcIlR5cGVzXCJ9LHN0cmluZzp7Z3JvdXA6XCJUeXBlc1wifSxudW1iZXI6e2dyb3VwOlwiVHlwZXNcIn0sYm9vbGVhbjp7Z3JvdXA6XCJUeXBlc1wifSxvYmplY3Q6e2dyb3VwOlwiVHlwZXNcIn0sY29sbGF0b3I6e2dyb3VwOlwiVHlwZXNcIn0sXCJ0by1zdHJpbmdcIjp7Z3JvdXA6XCJUeXBlc1wifSxcInRvLW51bWJlclwiOntncm91cDpcIlR5cGVzXCJ9LFwidG8tYm9vbGVhblwiOntncm91cDpcIlR5cGVzXCJ9LFwidG8tcmdiYVwiOntncm91cDpcIkNvbG9yXCJ9LFwidG8tY29sb3JcIjp7Z3JvdXA6XCJUeXBlc1wifSxyZ2I6e2dyb3VwOlwiQ29sb3JcIn0scmdiYTp7Z3JvdXA6XCJDb2xvclwifSxnZXQ6e2dyb3VwOlwiTG9va3VwXCJ9LGhhczp7Z3JvdXA6XCJMb29rdXBcIn0sbGVuZ3RoOntncm91cDpcIkxvb2t1cFwifSxwcm9wZXJ0aWVzOntncm91cDpcIkZlYXR1cmUgZGF0YVwifSxcImdlb21ldHJ5LXR5cGVcIjp7Z3JvdXA6XCJGZWF0dXJlIGRhdGFcIn0saWQ6e2dyb3VwOlwiRmVhdHVyZSBkYXRhXCJ9LHpvb206e2dyb3VwOlwiWm9vbVwifSxcImhlYXRtYXAtZGVuc2l0eVwiOntncm91cDpcIkhlYXRtYXBcIn0sXCJsaW5lLXByb2dyZXNzXCI6e2dyb3VwOlwiSGVhdG1hcFwifSxcIitcIjp7Z3JvdXA6XCJNYXRoXCJ9LFwiKlwiOntncm91cDpcIk1hdGhcIn0sXCItXCI6e2dyb3VwOlwiTWF0aFwifSxcIi9cIjp7Z3JvdXA6XCJNYXRoXCJ9LFwiJVwiOntncm91cDpcIk1hdGhcIn0sXCJeXCI6e2dyb3VwOlwiTWF0aFwifSxzcXJ0Ontncm91cDpcIk1hdGhcIn0sbG9nMTA6e2dyb3VwOlwiTWF0aFwifSxsbjp7Z3JvdXA6XCJNYXRoXCJ9LGxvZzI6e2dyb3VwOlwiTWF0aFwifSxzaW46e2dyb3VwOlwiTWF0aFwifSxjb3M6e2dyb3VwOlwiTWF0aFwifSx0YW46e2dyb3VwOlwiTWF0aFwifSxhc2luOntncm91cDpcIk1hdGhcIn0sYWNvczp7Z3JvdXA6XCJNYXRoXCJ9LGF0YW46e2dyb3VwOlwiTWF0aFwifSxtaW46e2dyb3VwOlwiTWF0aFwifSxtYXg6e2dyb3VwOlwiTWF0aFwifSxyb3VuZDp7Z3JvdXA6XCJNYXRoXCJ9LGFiczp7Z3JvdXA6XCJNYXRoXCJ9LGNlaWw6e2dyb3VwOlwiTWF0aFwifSxmbG9vcjp7Z3JvdXA6XCJNYXRoXCJ9LFwiPT1cIjp7Z3JvdXA6XCJEZWNpc2lvblwifSxcIiE9XCI6e2dyb3VwOlwiRGVjaXNpb25cIn0sXCI+XCI6e2dyb3VwOlwiRGVjaXNpb25cIn0sXCI8XCI6e2dyb3VwOlwiRGVjaXNpb25cIn0sXCI+PVwiOntncm91cDpcIkRlY2lzaW9uXCJ9LFwiPD1cIjp7Z3JvdXA6XCJEZWNpc2lvblwifSxhbGw6e2dyb3VwOlwiRGVjaXNpb25cIn0sYW55Ontncm91cDpcIkRlY2lzaW9uXCJ9LFwiIVwiOntncm91cDpcIkRlY2lzaW9uXCJ9LFwiaXMtc3VwcG9ydGVkLXNjcmlwdFwiOntncm91cDpcIlN0cmluZ1wifSx1cGNhc2U6e2dyb3VwOlwiU3RyaW5nXCJ9LGRvd25jYXNlOntncm91cDpcIlN0cmluZ1wifSxjb25jYXQ6e2dyb3VwOlwiU3RyaW5nXCJ9LFwicmVzb2x2ZWQtbG9jYWxlXCI6e2dyb3VwOlwiU3RyaW5nXCJ9fX0sbGlnaHQ6e2FuY2hvcjp7dHlwZTpcImVudW1cIixkZWZhdWx0Olwidmlld3BvcnRcIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sdHJhbnNpdGlvbjohMSxcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITEsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIn0scG9zaXRpb246e3R5cGU6XCJhcnJheVwiLGRlZmF1bHQ6WzEuMTUsMjEwLDMwXSxsZW5ndGg6Myx2YWx1ZTpcIm51bWJlclwiLHRyYW5zaXRpb246ITAsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITF9LGNvbG9yOnt0eXBlOlwiY29sb3JcIixkZWZhdWx0OlwiI2ZmZmZmZlwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiExLHRyYW5zaXRpb246ITB9LGludGVuc2l0eTp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6LjUsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMSx0cmFuc2l0aW9uOiEwfX0scGFpbnQ6W1wicGFpbnRfZmlsbFwiLFwicGFpbnRfbGluZVwiLFwicGFpbnRfY2lyY2xlXCIsXCJwYWludF9oZWF0bWFwXCIsXCJwYWludF9maWxsLWV4dHJ1c2lvblwiLFwicGFpbnRfc3ltYm9sXCIsXCJwYWludF9yYXN0ZXJcIixcInBhaW50X2hpbGxzaGFkZVwiLFwicGFpbnRfYmFja2dyb3VuZFwiXSxwYWludF9maWxsOntcImZpbGwtYW50aWFsaWFzXCI6e3R5cGU6XCJib29sZWFuXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCxkZWZhdWx0OiEwfSxcImZpbGwtb3BhY2l0eVwiOnt0eXBlOlwibnVtYmVyXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMH0sXCJmaWxsLWNvbG9yXCI6e3R5cGU6XCJjb2xvclwiLGRlZmF1bHQ6XCIjMDAwMDAwXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbe1wiIVwiOlwiZmlsbC1wYXR0ZXJuXCJ9XX0sXCJmaWxsLW91dGxpbmUtY29sb3JcIjp7dHlwZTpcImNvbG9yXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbe1wiIVwiOlwiZmlsbC1wYXR0ZXJuXCJ9LHtcImZpbGwtYW50aWFsaWFzXCI6ITB9XX0sXCJmaWxsLXRyYW5zbGF0ZVwiOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcIm51bWJlclwiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOlwicGl4ZWxzXCJ9LFwiZmlsbC10cmFuc2xhdGUtYW5jaG9yXCI6e3R5cGU6XCJlbnVtXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDpcIm1hcFwiLHJlcXVpcmVzOltcImZpbGwtdHJhbnNsYXRlXCJdfSxcImZpbGwtcGF0dGVyblwiOnt0eXBlOlwic3RyaW5nXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwfX0scGFpbnRfbGluZTp7XCJsaW5lLW9wYWNpdHlcIjp7dHlwZTpcIm51bWJlclwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITB9LFwibGluZS1jb2xvclwiOnt0eXBlOlwiY29sb3JcIixkZWZhdWx0OlwiIzAwMDAwMFwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3tcIiFcIjpcImxpbmUtcGF0dGVyblwifV19LFwibGluZS10cmFuc2xhdGVcIjp7dHlwZTpcImFycmF5XCIsdmFsdWU6XCJudW1iZXJcIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCx1bml0czpcInBpeGVsc1wifSxcImxpbmUtdHJhbnNsYXRlLWFuY2hvclwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6XCJtYXBcIixyZXF1aXJlczpbXCJsaW5lLXRyYW5zbGF0ZVwiXX0sXCJsaW5lLXdpZHRoXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjEsbWluaW11bTowLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6XCJwaXhlbHNcIn0sXCJsaW5lLWdhcC13aWR0aFwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLG1pbmltdW06MCxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOlwicGl4ZWxzXCJ9LFwibGluZS1vZmZzZXRcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MCxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOlwicGl4ZWxzXCJ9LFwibGluZS1ibHVyXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjAsbWluaW11bTowLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6XCJwaXhlbHNcIn0sXCJsaW5lLWRhc2hhcnJheVwiOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcIm51bWJlclwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsbWluaW11bTowLHRyYW5zaXRpb246ITAsdW5pdHM6XCJsaW5lIHdpZHRoc1wiLHJlcXVpcmVzOlt7XCIhXCI6XCJsaW5lLXBhdHRlcm5cIn1dfSxcImxpbmUtcGF0dGVyblwiOnt0eXBlOlwic3RyaW5nXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwfSxcImxpbmUtZ3JhZGllbnRcIjp7dHlwZTpcImNvbG9yXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMSxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITEsdHJhbnNpdGlvbjohMSxyZXF1aXJlczpbe1wiIVwiOlwibGluZS1kYXNoYXJyYXlcIn0se1wiIVwiOlwibGluZS1wYXR0ZXJuXCJ9LHtzb3VyY2U6XCJnZW9qc29uXCIsaGFzOntsaW5lTWV0cmljczohMH19XX19LHBhaW50X2NpcmNsZTp7XCJjaXJjbGUtcmFkaXVzXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjUsbWluaW11bTowLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6XCJwaXhlbHNcIn0sXCJjaXJjbGUtY29sb3JcIjp7dHlwZTpcImNvbG9yXCIsZGVmYXVsdDpcIiMwMDAwMDBcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwfSxcImNpcmNsZS1ibHVyXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjAsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMH0sXCJjaXJjbGUtb3BhY2l0eVwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMH0sXCJjaXJjbGUtdHJhbnNsYXRlXCI6e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwibnVtYmVyXCIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6XCJwaXhlbHNcIn0sXCJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvclwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6XCJtYXBcIixyZXF1aXJlczpbXCJjaXJjbGUtdHJhbnNsYXRlXCJdfSxcImNpcmNsZS1waXRjaC1zY2FsZVwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6XCJtYXBcIn0sXCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50XCI6e3R5cGU6XCJlbnVtXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDpcInZpZXdwb3J0XCJ9LFwiY2lyY2xlLXN0cm9rZS13aWR0aFwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLG1pbmltdW06MCxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOlwicGl4ZWxzXCJ9LFwiY2lyY2xlLXN0cm9rZS1jb2xvclwiOnt0eXBlOlwiY29sb3JcIixkZWZhdWx0OlwiIzAwMDAwMFwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITB9LFwiY2lyY2xlLXN0cm9rZS1vcGFjaXR5XCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwfX0scGFpbnRfaGVhdG1hcDp7XCJoZWF0bWFwLXJhZGl1c1wiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDozMCxtaW5pbXVtOjEsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCx1bml0czpcInBpeGVsc1wifSxcImhlYXRtYXAtd2VpZ2h0XCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjEsbWluaW11bTowLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITF9LFwiaGVhdG1hcC1pbnRlbnNpdHlcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITEsdHJhbnNpdGlvbjohMH0sXCJoZWF0bWFwLWNvbG9yXCI6e3R5cGU6XCJjb2xvclwiLGRlZmF1bHQ6W1wiaW50ZXJwb2xhdGVcIixbXCJsaW5lYXJcIl0sW1wiaGVhdG1hcC1kZW5zaXR5XCJdLDAsXCJyZ2JhKDAsIDAsIDI1NSwgMClcIiwuMSxcInJveWFsYmx1ZVwiLC4zLFwiY3lhblwiLC41LFwibGltZVwiLC43LFwieWVsbG93XCIsMSxcInJlZFwiXSxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiExLFwicHJvcGVydHktZnVuY3Rpb25cIjohMSx0cmFuc2l0aW9uOiExfSxcImhlYXRtYXAtb3BhY2l0eVwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITEsdHJhbnNpdGlvbjohMH19LHBhaW50X3N5bWJvbDp7XCJpY29uLW9wYWNpdHlcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W1wiaWNvbi1pbWFnZVwiXX0sXCJpY29uLWNvbG9yXCI6e3R5cGU6XCJjb2xvclwiLGRlZmF1bHQ6XCIjMDAwMDAwXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbXCJpY29uLWltYWdlXCJdfSxcImljb24taGFsby1jb2xvclwiOnt0eXBlOlwiY29sb3JcIixkZWZhdWx0OlwicmdiYSgwLCAwLCAwLCAwKVwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W1wiaWNvbi1pbWFnZVwiXX0sXCJpY29uLWhhbG8td2lkdGhcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCx1bml0czpcInBpeGVsc1wiLHJlcXVpcmVzOltcImljb24taW1hZ2VcIl19LFwiaWNvbi1oYWxvLWJsdXJcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCx1bml0czpcInBpeGVsc1wiLHJlcXVpcmVzOltcImljb24taW1hZ2VcIl19LFwiaWNvbi10cmFuc2xhdGVcIjp7dHlwZTpcImFycmF5XCIsdmFsdWU6XCJudW1iZXJcIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCx1bml0czpcInBpeGVsc1wiLHJlcXVpcmVzOltcImljb24taW1hZ2VcIl19LFwiaWNvbi10cmFuc2xhdGUtYW5jaG9yXCI6e3R5cGU6XCJlbnVtXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDpcIm1hcFwiLHJlcXVpcmVzOltcImljb24taW1hZ2VcIixcImljb24tdHJhbnNsYXRlXCJdfSxcInRleHQtb3BhY2l0eVwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCJdfSxcInRleHQtY29sb3JcIjp7dHlwZTpcImNvbG9yXCIsZGVmYXVsdDpcIiMwMDAwMDBcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC1oYWxvLWNvbG9yXCI6e3R5cGU6XCJjb2xvclwiLGRlZmF1bHQ6XCJyZ2JhKDAsIDAsIDAsIDApXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCJdfSxcInRleHQtaGFsby13aWR0aFwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLG1pbmltdW06MCxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOlwicGl4ZWxzXCIscmVxdWlyZXM6W1widGV4dC1maWVsZFwiXX0sXCJ0ZXh0LWhhbG8tYmx1clwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLG1pbmltdW06MCxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOlwicGl4ZWxzXCIscmVxdWlyZXM6W1widGV4dC1maWVsZFwiXX0sXCJ0ZXh0LXRyYW5zbGF0ZVwiOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcIm51bWJlclwiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOlwicGl4ZWxzXCIscmVxdWlyZXM6W1widGV4dC1maWVsZFwiXX0sXCJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3JcIjp7dHlwZTpcImVudW1cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OlwibWFwXCIscmVxdWlyZXM6W1widGV4dC1maWVsZFwiLFwidGV4dC10cmFuc2xhdGVcIl19fSxwYWludF9yYXN0ZXI6e1wicmFzdGVyLW9wYWNpdHlcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMH0sXCJyYXN0ZXItaHVlLXJvdGF0ZVwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLHBlcmlvZDozNjAsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOlwiZGVncmVlc1wifSxcInJhc3Rlci1icmlnaHRuZXNzLW1pblwiOnt0eXBlOlwibnVtYmVyXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxkZWZhdWx0OjAsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwfSxcInJhc3Rlci1icmlnaHRuZXNzLW1heFwiOnt0eXBlOlwibnVtYmVyXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwfSxcInJhc3Rlci1zYXR1cmF0aW9uXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjAsbWluaW11bTotMSxtYXhpbXVtOjEsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwfSxcInJhc3Rlci1jb250cmFzdFwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLG1pbmltdW06LTEsbWF4aW11bToxLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMH0sXCJyYXN0ZXItZmFkZS1kdXJhdGlvblwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDozMDAsbWluaW11bTowLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMSx1bml0czpcIm1pbGxpc2Vjb25kc1wifX0scGFpbnRfaGlsbHNoYWRlOntcImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjMzNSxtaW5pbXVtOjAsbWF4aW11bTozNTksZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiExfSxcImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yXCI6e3R5cGU6XCJlbnVtXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDpcInZpZXdwb3J0XCJ9LFwiaGlsbHNoYWRlLWV4YWdnZXJhdGlvblwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDouNSxtaW5pbXVtOjAsbWF4aW11bToxLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMH0sXCJoaWxsc2hhZGUtc2hhZG93LWNvbG9yXCI6e3R5cGU6XCJjb2xvclwiLGRlZmF1bHQ6XCIjMDAwMDAwXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwfSxcImhpbGxzaGFkZS1oaWdobGlnaHQtY29sb3JcIjp7dHlwZTpcImNvbG9yXCIsZGVmYXVsdDpcIiNGRkZGRkZcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITB9LFwiaGlsbHNoYWRlLWFjY2VudC1jb2xvclwiOnt0eXBlOlwiY29sb3JcIixkZWZhdWx0OlwiIzAwMDAwMFwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMH19LHBhaW50X2JhY2tncm91bmQ6e1wiYmFja2dyb3VuZC1jb2xvclwiOnt0eXBlOlwiY29sb3JcIixkZWZhdWx0OlwiIzAwMDAwMFwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbe1wiIVwiOlwiYmFja2dyb3VuZC1wYXR0ZXJuXCJ9XX0sXCJiYWNrZ3JvdW5kLXBhdHRlcm5cIjp7dHlwZTpcInN0cmluZ1wiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMH0sXCJiYWNrZ3JvdW5kLW9wYWNpdHlcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMH19LHRyYW5zaXRpb246e2R1cmF0aW9uOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDozMDAsbWluaW11bTowLHVuaXRzOlwibWlsbGlzZWNvbmRzXCJ9LGRlbGF5Ont0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLG1pbmltdW06MCx1bml0czpcIm1pbGxpc2Vjb25kc1wifX0sXCJsYXlvdXRfZmlsbC1leHRydXNpb25cIjp7dmlzaWJpbGl0eTp7dHlwZTpcImVudW1cIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDpcInZpc2libGVcIn19LGZ1bmN0aW9uOntleHByZXNzaW9uOnt0eXBlOlwiZXhwcmVzc2lvblwifSxzdG9wczp7dHlwZTpcImFycmF5XCIsdmFsdWU6XCJmdW5jdGlvbl9zdG9wXCJ9LGJhc2U6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjEsbWluaW11bTowfSxwcm9wZXJ0eTp7dHlwZTpcInN0cmluZ1wiLGRlZmF1bHQ6XCIkem9vbVwifSx0eXBlOnt0eXBlOlwiZW51bVwiLHZhbHVlczp7aWRlbnRpdHk6e30sZXhwb25lbnRpYWw6e30saW50ZXJ2YWw6e30sY2F0ZWdvcmljYWw6e319LGRlZmF1bHQ6XCJleHBvbmVudGlhbFwifSxjb2xvclNwYWNlOnt0eXBlOlwiZW51bVwiLHZhbHVlczp7cmdiOnt9LGxhYjp7fSxoY2w6e319LGRlZmF1bHQ6XCJyZ2JcIn0sZGVmYXVsdDp7dHlwZTpcIipcIixyZXF1aXJlZDohMX19LFwicGFpbnRfZmlsbC1leHRydXNpb25cIjp7XCJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5XCI6e3R5cGU6XCJudW1iZXJcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMSxkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwfSxcImZpbGwtZXh0cnVzaW9uLWNvbG9yXCI6e3R5cGU6XCJjb2xvclwiLGRlZmF1bHQ6XCIjMDAwMDAwXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbe1wiIVwiOlwiZmlsbC1leHRydXNpb24tcGF0dGVyblwifV19LFwiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlXCI6e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwibnVtYmVyXCIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6XCJwaXhlbHNcIn0sXCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yXCI6e3R5cGU6XCJlbnVtXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDpcIm1hcFwiLHJlcXVpcmVzOltcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZVwiXX0sXCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuXCI6e3R5cGU6XCJzdHJpbmdcIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITB9LFwiZmlsbC1leHRydXNpb24taGVpZ2h0XCI6e3R5cGU6XCJudW1iZXJcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCxkZWZhdWx0OjAsbWluaW11bTowLHVuaXRzOlwibWV0ZXJzXCIsdHJhbnNpdGlvbjohMH0sXCJmaWxsLWV4dHJ1c2lvbi1iYXNlXCI6e3R5cGU6XCJudW1iZXJcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCxkZWZhdWx0OjAsbWluaW11bTowLHVuaXRzOlwibWV0ZXJzXCIsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbXCJmaWxsLWV4dHJ1c2lvbi1oZWlnaHRcIl19fX0sRD1mdW5jdGlvbih0LGUscixuKXt0aGlzLm1lc3NhZ2U9KHQ/dCtcIjogXCI6XCJcIikrcixuJiYodGhpcy5pZGVudGlmaWVyPW4pLG51bGwhPWUmJmUuX19saW5lX18mJih0aGlzLmxpbmU9ZS5fX2xpbmVfXyl9O2Z1bmN0aW9uIFAodCl7dmFyIGU9dC5rZXkscj10LnZhbHVlO3JldHVybiByP1tuZXcgRChlLHIsXCJjb25zdGFudHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgYXMgb2YgdjhcIildOltdfWZ1bmN0aW9uIFIodCl7Zm9yKHZhciBlPVtdLHI9YXJndW1lbnRzLmxlbmd0aC0xO3ItLSA+MDspZVtyXT1hcmd1bWVudHNbcisxXTtmb3IodmFyIG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO2Zvcih2YXIgbyBpbiBhKXRbb109YVtvXX1yZXR1cm4gdH1mdW5jdGlvbiBGKHQpe3JldHVybiB0IGluc3RhbmNlb2YgTnVtYmVyfHx0IGluc3RhbmNlb2YgU3RyaW5nfHx0IGluc3RhbmNlb2YgQm9vbGVhbj90LnZhbHVlT2YoKTp0fWZ1bmN0aW9uIEIodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5tYXAoQik6Rih0KX12YXIgTj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dC5jYWxsKHRoaXMsciksdGhpcy5tZXNzYWdlPXIsdGhpcy5rZXk9ZX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZX0oRXJyb3IpLGo9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT1bXSksdGhpcy5wYXJlbnQ9dCx0aGlzLmJpbmRpbmdzPXt9O2Zvcih2YXIgcj0wLG49ZTtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl0sYT1pWzBdLG89aVsxXTt0aGlzLmJpbmRpbmdzW2FdPW99fTtqLnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBqKHRoaXMsdCl9LGoucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtpZih0aGlzLmJpbmRpbmdzW3RdKXJldHVybiB0aGlzLmJpbmRpbmdzW3RdO2lmKHRoaXMucGFyZW50KXJldHVybiB0aGlzLnBhcmVudC5nZXQodCk7dGhyb3cgbmV3IEVycm9yKHQrXCIgbm90IGZvdW5kIGluIHNjb3BlLlwiKX0sai5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiEhdGhpcy5iaW5kaW5nc1t0XXx8ISF0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuaGFzKHQpfTt2YXIgVj17a2luZDpcIm51bGxcIn0sVT17a2luZDpcIm51bWJlclwifSxxPXtraW5kOlwic3RyaW5nXCJ9LEg9e2tpbmQ6XCJib29sZWFuXCJ9LEc9e2tpbmQ6XCJjb2xvclwifSxZPXtraW5kOlwib2JqZWN0XCJ9LFc9e2tpbmQ6XCJ2YWx1ZVwifSxYPXtraW5kOlwiY29sbGF0b3JcIn07ZnVuY3Rpb24gWih0LGUpe3JldHVybntraW5kOlwiYXJyYXlcIixpdGVtVHlwZTp0LE46ZX19ZnVuY3Rpb24gJCh0KXtpZihcImFycmF5XCI9PT10LmtpbmQpe3ZhciBlPSQodC5pdGVtVHlwZSk7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIHQuTj9cImFycmF5PFwiK2UrXCIsIFwiK3QuTitcIj5cIjpcInZhbHVlXCI9PT10Lml0ZW1UeXBlLmtpbmQ/XCJhcnJheVwiOlwiYXJyYXk8XCIrZStcIj5cIn1yZXR1cm4gdC5raW5kfXZhciBKPVtWLFUscSxILEcsWSxaKFcpXTtmdW5jdGlvbiBLKHQsZSl7aWYoXCJlcnJvclwiPT09ZS5raW5kKXJldHVybiBudWxsO2lmKFwiYXJyYXlcIj09PXQua2luZCl7aWYoXCJhcnJheVwiPT09ZS5raW5kJiYhSyh0Lml0ZW1UeXBlLGUuaXRlbVR5cGUpJiYoXCJudW1iZXJcIiE9dHlwZW9mIHQuTnx8dC5OPT09ZS5OKSlyZXR1cm4gbnVsbH1lbHNle2lmKHQua2luZD09PWUua2luZClyZXR1cm4gbnVsbDtpZihcInZhbHVlXCI9PT10LmtpbmQpZm9yKHZhciByPTAsbj1KO3I8bi5sZW5ndGg7cis9MSlpZighSyhuW3JdLGUpKXJldHVybiBudWxsfXJldHVyblwiRXhwZWN0ZWQgXCIrJCh0KStcIiBidXQgZm91bmQgXCIrJChlKStcIiBpbnN0ZWFkLlwifXZhciBRPWkoZnVuY3Rpb24odCxlKXt2YXIgcj17dHJhbnNwYXJlbnQ6WzAsMCwwLDBdLGFsaWNlYmx1ZTpbMjQwLDI0OCwyNTUsMV0sYW50aXF1ZXdoaXRlOlsyNTAsMjM1LDIxNSwxXSxhcXVhOlswLDI1NSwyNTUsMV0sYXF1YW1hcmluZTpbMTI3LDI1NSwyMTIsMV0sYXp1cmU6WzI0MCwyNTUsMjU1LDFdLGJlaWdlOlsyNDUsMjQ1LDIyMCwxXSxiaXNxdWU6WzI1NSwyMjgsMTk2LDFdLGJsYWNrOlswLDAsMCwxXSxibGFuY2hlZGFsbW9uZDpbMjU1LDIzNSwyMDUsMV0sYmx1ZTpbMCwwLDI1NSwxXSxibHVldmlvbGV0OlsxMzgsNDMsMjI2LDFdLGJyb3duOlsxNjUsNDIsNDIsMV0sYnVybHl3b29kOlsyMjIsMTg0LDEzNSwxXSxjYWRldGJsdWU6Wzk1LDE1OCwxNjAsMV0sY2hhcnRyZXVzZTpbMTI3LDI1NSwwLDFdLGNob2NvbGF0ZTpbMjEwLDEwNSwzMCwxXSxjb3JhbDpbMjU1LDEyNyw4MCwxXSxjb3JuZmxvd2VyYmx1ZTpbMTAwLDE0OSwyMzcsMV0sY29ybnNpbGs6WzI1NSwyNDgsMjIwLDFdLGNyaW1zb246WzIyMCwyMCw2MCwxXSxjeWFuOlswLDI1NSwyNTUsMV0sZGFya2JsdWU6WzAsMCwxMzksMV0sZGFya2N5YW46WzAsMTM5LDEzOSwxXSxkYXJrZ29sZGVucm9kOlsxODQsMTM0LDExLDFdLGRhcmtncmF5OlsxNjksMTY5LDE2OSwxXSxkYXJrZ3JlZW46WzAsMTAwLDAsMV0sZGFya2dyZXk6WzE2OSwxNjksMTY5LDFdLGRhcmtraGFraTpbMTg5LDE4MywxMDcsMV0sZGFya21hZ2VudGE6WzEzOSwwLDEzOSwxXSxkYXJrb2xpdmVncmVlbjpbODUsMTA3LDQ3LDFdLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMCwxXSxkYXJrb3JjaGlkOlsxNTMsNTAsMjA0LDFdLGRhcmtyZWQ6WzEzOSwwLDAsMV0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjIsMV0sZGFya3NlYWdyZWVuOlsxNDMsMTg4LDE0MywxXSxkYXJrc2xhdGVibHVlOls3Miw2MSwxMzksMV0sZGFya3NsYXRlZ3JheTpbNDcsNzksNzksMV0sZGFya3NsYXRlZ3JleTpbNDcsNzksNzksMV0sZGFya3R1cnF1b2lzZTpbMCwyMDYsMjA5LDFdLGRhcmt2aW9sZXQ6WzE0OCwwLDIxMSwxXSxkZWVwcGluazpbMjU1LDIwLDE0NywxXSxkZWVwc2t5Ymx1ZTpbMCwxOTEsMjU1LDFdLGRpbWdyYXk6WzEwNSwxMDUsMTA1LDFdLGRpbWdyZXk6WzEwNSwxMDUsMTA1LDFdLGRvZGdlcmJsdWU6WzMwLDE0NCwyNTUsMV0sZmlyZWJyaWNrOlsxNzgsMzQsMzQsMV0sZmxvcmFsd2hpdGU6WzI1NSwyNTAsMjQwLDFdLGZvcmVzdGdyZWVuOlszNCwxMzksMzQsMV0sZnVjaHNpYTpbMjU1LDAsMjU1LDFdLGdhaW5zYm9ybzpbMjIwLDIyMCwyMjAsMV0sZ2hvc3R3aGl0ZTpbMjQ4LDI0OCwyNTUsMV0sZ29sZDpbMjU1LDIxNSwwLDFdLGdvbGRlbnJvZDpbMjE4LDE2NSwzMiwxXSxncmF5OlsxMjgsMTI4LDEyOCwxXSxncmVlbjpbMCwxMjgsMCwxXSxncmVlbnllbGxvdzpbMTczLDI1NSw0NywxXSxncmV5OlsxMjgsMTI4LDEyOCwxXSxob25leWRldzpbMjQwLDI1NSwyNDAsMV0saG90cGluazpbMjU1LDEwNSwxODAsMV0saW5kaWFucmVkOlsyMDUsOTIsOTIsMV0saW5kaWdvOls3NSwwLDEzMCwxXSxpdm9yeTpbMjU1LDI1NSwyNDAsMV0sa2hha2k6WzI0MCwyMzAsMTQwLDFdLGxhdmVuZGVyOlsyMzAsMjMwLDI1MCwxXSxsYXZlbmRlcmJsdXNoOlsyNTUsMjQwLDI0NSwxXSxsYXduZ3JlZW46WzEyNCwyNTIsMCwxXSxsZW1vbmNoaWZmb246WzI1NSwyNTAsMjA1LDFdLGxpZ2h0Ymx1ZTpbMTczLDIxNiwyMzAsMV0sbGlnaHRjb3JhbDpbMjQwLDEyOCwxMjgsMV0sbGlnaHRjeWFuOlsyMjQsMjU1LDI1NSwxXSxsaWdodGdvbGRlbnJvZHllbGxvdzpbMjUwLDI1MCwyMTAsMV0sbGlnaHRncmF5OlsyMTEsMjExLDIxMSwxXSxsaWdodGdyZWVuOlsxNDQsMjM4LDE0NCwxXSxsaWdodGdyZXk6WzIxMSwyMTEsMjExLDFdLGxpZ2h0cGluazpbMjU1LDE4MiwxOTMsMV0sbGlnaHRzYWxtb246WzI1NSwxNjAsMTIyLDFdLGxpZ2h0c2VhZ3JlZW46WzMyLDE3OCwxNzAsMV0sbGlnaHRza3libHVlOlsxMzUsMjA2LDI1MCwxXSxsaWdodHNsYXRlZ3JheTpbMTE5LDEzNiwxNTMsMV0sbGlnaHRzbGF0ZWdyZXk6WzExOSwxMzYsMTUzLDFdLGxpZ2h0c3RlZWxibHVlOlsxNzYsMTk2LDIyMiwxXSxsaWdodHllbGxvdzpbMjU1LDI1NSwyMjQsMV0sbGltZTpbMCwyNTUsMCwxXSxsaW1lZ3JlZW46WzUwLDIwNSw1MCwxXSxsaW5lbjpbMjUwLDI0MCwyMzAsMV0sbWFnZW50YTpbMjU1LDAsMjU1LDFdLG1hcm9vbjpbMTI4LDAsMCwxXSxtZWRpdW1hcXVhbWFyaW5lOlsxMDIsMjA1LDE3MCwxXSxtZWRpdW1ibHVlOlswLDAsMjA1LDFdLG1lZGl1bW9yY2hpZDpbMTg2LDg1LDIxMSwxXSxtZWRpdW1wdXJwbGU6WzE0NywxMTIsMjE5LDFdLG1lZGl1bXNlYWdyZWVuOls2MCwxNzksMTEzLDFdLG1lZGl1bXNsYXRlYmx1ZTpbMTIzLDEwNCwyMzgsMV0sbWVkaXVtc3ByaW5nZ3JlZW46WzAsMjUwLDE1NCwxXSxtZWRpdW10dXJxdW9pc2U6WzcyLDIwOSwyMDQsMV0sbWVkaXVtdmlvbGV0cmVkOlsxOTksMjEsMTMzLDFdLG1pZG5pZ2h0Ymx1ZTpbMjUsMjUsMTEyLDFdLG1pbnRjcmVhbTpbMjQ1LDI1NSwyNTAsMV0sbWlzdHlyb3NlOlsyNTUsMjI4LDIyNSwxXSxtb2NjYXNpbjpbMjU1LDIyOCwxODEsMV0sbmF2YWpvd2hpdGU6WzI1NSwyMjIsMTczLDFdLG5hdnk6WzAsMCwxMjgsMV0sb2xkbGFjZTpbMjUzLDI0NSwyMzAsMV0sb2xpdmU6WzEyOCwxMjgsMCwxXSxvbGl2ZWRyYWI6WzEwNywxNDIsMzUsMV0sb3JhbmdlOlsyNTUsMTY1LDAsMV0sb3JhbmdlcmVkOlsyNTUsNjksMCwxXSxvcmNoaWQ6WzIxOCwxMTIsMjE0LDFdLHBhbGVnb2xkZW5yb2Q6WzIzOCwyMzIsMTcwLDFdLHBhbGVncmVlbjpbMTUyLDI1MSwxNTIsMV0scGFsZXR1cnF1b2lzZTpbMTc1LDIzOCwyMzgsMV0scGFsZXZpb2xldHJlZDpbMjE5LDExMiwxNDcsMV0scGFwYXlhd2hpcDpbMjU1LDIzOSwyMTMsMV0scGVhY2hwdWZmOlsyNTUsMjE4LDE4NSwxXSxwZXJ1OlsyMDUsMTMzLDYzLDFdLHBpbms6WzI1NSwxOTIsMjAzLDFdLHBsdW06WzIyMSwxNjAsMjIxLDFdLHBvd2RlcmJsdWU6WzE3NiwyMjQsMjMwLDFdLHB1cnBsZTpbMTI4LDAsMTI4LDFdLHJlYmVjY2FwdXJwbGU6WzEwMiw1MSwxNTMsMV0scmVkOlsyNTUsMCwwLDFdLHJvc3licm93bjpbMTg4LDE0MywxNDMsMV0scm95YWxibHVlOls2NSwxMDUsMjI1LDFdLHNhZGRsZWJyb3duOlsxMzksNjksMTksMV0sc2FsbW9uOlsyNTAsMTI4LDExNCwxXSxzYW5keWJyb3duOlsyNDQsMTY0LDk2LDFdLHNlYWdyZWVuOls0NiwxMzksODcsMV0sc2Vhc2hlbGw6WzI1NSwyNDUsMjM4LDFdLHNpZW5uYTpbMTYwLDgyLDQ1LDFdLHNpbHZlcjpbMTkyLDE5MiwxOTIsMV0sc2t5Ymx1ZTpbMTM1LDIwNiwyMzUsMV0sc2xhdGVibHVlOlsxMDYsOTAsMjA1LDFdLHNsYXRlZ3JheTpbMTEyLDEyOCwxNDQsMV0sc2xhdGVncmV5OlsxMTIsMTI4LDE0NCwxXSxzbm93OlsyNTUsMjUwLDI1MCwxXSxzcHJpbmdncmVlbjpbMCwyNTUsMTI3LDFdLHN0ZWVsYmx1ZTpbNzAsMTMwLDE4MCwxXSx0YW46WzIxMCwxODAsMTQwLDFdLHRlYWw6WzAsMTI4LDEyOCwxXSx0aGlzdGxlOlsyMTYsMTkxLDIxNiwxXSx0b21hdG86WzI1NSw5OSw3MSwxXSx0dXJxdW9pc2U6WzY0LDIyNCwyMDgsMV0sdmlvbGV0OlsyMzgsMTMwLDIzOCwxXSx3aGVhdDpbMjQ1LDIyMiwxNzksMV0sd2hpdGU6WzI1NSwyNTUsMjU1LDFdLHdoaXRlc21va2U6WzI0NSwyNDUsMjQ1LDFdLHllbGxvdzpbMjU1LDI1NSwwLDFdLHllbGxvd2dyZWVuOlsxNTQsMjA1LDUwLDFdfTtmdW5jdGlvbiBuKHQpe3JldHVybih0PU1hdGgucm91bmQodCkpPDA/MDp0PjI1NT8yNTU6dH1mdW5jdGlvbiBpKHQpe3JldHVybiB0PDA/MDp0PjE/MTp0fWZ1bmN0aW9uIGEodCl7cmV0dXJuXCIlXCI9PT10W3QubGVuZ3RoLTFdP24ocGFyc2VGbG9hdCh0KS8xMDAqMjU1KTpuKHBhcnNlSW50KHQpKX1mdW5jdGlvbiBvKHQpe3JldHVyblwiJVwiPT09dFt0Lmxlbmd0aC0xXT9pKHBhcnNlRmxvYXQodCkvMTAwKTppKHBhcnNlRmxvYXQodCkpfWZ1bmN0aW9uIHModCxlLHIpe3JldHVybiByPDA/cis9MTpyPjEmJihyLT0xKSw2KnI8MT90KyhlLXQpKnIqNjoyKnI8MT9lOjMqcjwyP3QrKGUtdCkqKDIvMy1yKSo2OnR9dHJ5e2UucGFyc2VDU1NDb2xvcj1mdW5jdGlvbih0KXt2YXIgZSxpPXQucmVwbGFjZSgvIC9nLFwiXCIpLnRvTG93ZXJDYXNlKCk7aWYoaSBpbiByKXJldHVybiByW2ldLnNsaWNlKCk7aWYoXCIjXCI9PT1pWzBdKXJldHVybiA0PT09aS5sZW5ndGg/KGU9cGFyc2VJbnQoaS5zdWJzdHIoMSksMTYpKT49MCYmZTw9NDA5NT9bKDM4NDAmZSk+PjR8KDM4NDAmZSk+PjgsMjQwJmV8KDI0MCZlKT4+NCwxNSZlfCgxNSZlKTw8NCwxXTpudWxsOjc9PT1pLmxlbmd0aCYmKGU9cGFyc2VJbnQoaS5zdWJzdHIoMSksMTYpKT49MCYmZTw9MTY3NzcyMTU/WygxNjcxMTY4MCZlKT4+MTYsKDY1MjgwJmUpPj44LDI1NSZlLDFdOm51bGw7dmFyIGw9aS5pbmRleE9mKFwiKFwiKSxjPWkuaW5kZXhPZihcIilcIik7aWYoLTEhPT1sJiZjKzE9PT1pLmxlbmd0aCl7dmFyIHU9aS5zdWJzdHIoMCxsKSxoPWkuc3Vic3RyKGwrMSxjLShsKzEpKS5zcGxpdChcIixcIiksZj0xO3N3aXRjaCh1KXtjYXNlXCJyZ2JhXCI6aWYoNCE9PWgubGVuZ3RoKXJldHVybiBudWxsO2Y9byhoLnBvcCgpKTtjYXNlXCJyZ2JcIjpyZXR1cm4gMyE9PWgubGVuZ3RoP251bGw6W2EoaFswXSksYShoWzFdKSxhKGhbMl0pLGZdO2Nhc2VcImhzbGFcIjppZig0IT09aC5sZW5ndGgpcmV0dXJuIG51bGw7Zj1vKGgucG9wKCkpO2Nhc2VcImhzbFwiOmlmKDMhPT1oLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgcD0ocGFyc2VGbG9hdChoWzBdKSUzNjArMzYwKSUzNjAvMzYwLGQ9byhoWzFdKSxnPW8oaFsyXSksdj1nPD0uNT9nKihkKzEpOmcrZC1nKmQsbT0yKmctdjtyZXR1cm5bbigyNTUqcyhtLHYscCsxLzMpKSxuKDI1NSpzKG0sdixwKSksbigyNTUqcyhtLHYscC0xLzMpKSxmXTtkZWZhdWx0OnJldHVybiBudWxsfX1yZXR1cm4gbnVsbH19Y2F0Y2godCl7fX0pLnBhcnNlQ1NTQ29sb3IsdHQ9ZnVuY3Rpb24odCxlLHIsbil7dm9pZCAwPT09biYmKG49MSksdGhpcy5yPXQsdGhpcy5nPWUsdGhpcy5iPXIsdGhpcy5hPW59O3R0LnBhcnNlPWZ1bmN0aW9uKHQpe2lmKHQpe2lmKHQgaW5zdGFuY2VvZiB0dClyZXR1cm4gdDtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7dmFyIGU9USh0KTtpZihlKXJldHVybiBuZXcgdHQoZVswXS8yNTUqZVszXSxlWzFdLzI1NSplWzNdLGVbMl0vMjU1KmVbM10sZVszXSl9fX0sdHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50b0FycmF5KCksZT10WzBdLHI9dFsxXSxuPXRbMl0saT10WzNdO3JldHVyblwicmdiYShcIitNYXRoLnJvdW5kKGUpK1wiLFwiK01hdGgucm91bmQocikrXCIsXCIrTWF0aC5yb3VuZChuKStcIixcIitpK1wiKVwifSx0dC5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3ZhciB0PXRoaXMucixlPXRoaXMuZyxyPXRoaXMuYixuPXRoaXMuYTtyZXR1cm4gMD09PW4/WzAsMCwwLDBdOlsyNTUqdC9uLDI1NSplL24sMjU1KnIvbixuXX0sdHQuYmxhY2s9bmV3IHR0KDAsMCwwLDEpLHR0LndoaXRlPW5ldyB0dCgxLDEsMSwxKSx0dC50cmFuc3BhcmVudD1uZXcgdHQoMCwwLDAsMCk7dmFyIGV0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnNlbnNpdGl2aXR5PXQ/ZT9cInZhcmlhbnRcIjpcImNhc2VcIjplP1wiYWNjZW50XCI6XCJiYXNlXCIsdGhpcy5sb2NhbGU9cix0aGlzLmNvbGxhdG9yPW5ldyBJbnRsLkNvbGxhdG9yKHRoaXMubG9jYWxlP3RoaXMubG9jYWxlOltdLHtzZW5zaXRpdml0eTp0aGlzLnNlbnNpdGl2aXR5LHVzYWdlOlwic2VhcmNoXCJ9KX07ZXQucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jb2xsYXRvci5jb21wYXJlKHQsZSl9LGV0LnByb3RvdHlwZS5yZXNvbHZlZExvY2FsZT1mdW5jdGlvbigpe3JldHVybiBuZXcgSW50bC5Db2xsYXRvcih0aGlzLmxvY2FsZT90aGlzLmxvY2FsZTpbXSkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlfTt2YXIgcnQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMudHlwZT1YLHRoaXMubG9jYWxlPXIsdGhpcy5jYXNlU2Vuc2l0aXZlPXQsdGhpcy5kaWFjcml0aWNTZW5zaXRpdmU9ZX07ZnVuY3Rpb24gbnQodCxlLHIsbil7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTAmJnQ8PTI1NSYmXCJudW1iZXJcIj09dHlwZW9mIGUmJmU+PTAmJmU8PTI1NSYmXCJudW1iZXJcIj09dHlwZW9mIHImJnI+PTAmJnI8PTI1NT92b2lkIDA9PT1ufHxcIm51bWJlclwiPT10eXBlb2YgbiYmbj49MCYmbjw9MT9udWxsOlwiSW52YWxpZCByZ2JhIHZhbHVlIFtcIitbdCxlLHIsbl0uam9pbihcIiwgXCIpK1wiXTogJ2EnIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLlwiOlwiSW52YWxpZCByZ2JhIHZhbHVlIFtcIisoXCJudW1iZXJcIj09dHlwZW9mIG4/W3QsZSxyLG5dOlt0LGUscl0pLmpvaW4oXCIsIFwiKStcIl06ICdyJywgJ2cnLCBhbmQgJ2InIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyNTUuXCJ9ZnVuY3Rpb24gaXQodCl7aWYobnVsbD09PXQpcmV0dXJuIFY7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpcmV0dXJuIHE7aWYoXCJib29sZWFuXCI9PXR5cGVvZiB0KXJldHVybiBIO2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXJldHVybiBVO2lmKHQgaW5zdGFuY2VvZiB0dClyZXR1cm4gRztpZih0IGluc3RhbmNlb2YgZXQpcmV0dXJuIFg7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBlLHI9dC5sZW5ndGgsbj0wLGk9dDtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWl0KGlbbl0pO2lmKGUpe2lmKGU9PT1hKWNvbnRpbnVlO2U9VzticmVha31lPWF9cmV0dXJuIFooZXx8VyxyKX1yZXR1cm4gWX1ydC5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDIhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIG9uZSBhcmd1bWVudC5cIik7dmFyIHI9dFsxXTtpZihcIm9iamVjdFwiIT10eXBlb2Ygcnx8QXJyYXkuaXNBcnJheShyKSlyZXR1cm4gZS5lcnJvcihcIkNvbGxhdG9yIG9wdGlvbnMgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3QuXCIpO3ZhciBuPWUucGFyc2Uodm9pZCAwIT09cltcImNhc2Utc2Vuc2l0aXZlXCJdJiZyW1wiY2FzZS1zZW5zaXRpdmVcIl0sMSxIKTtpZighbilyZXR1cm4gbnVsbDt2YXIgaT1lLnBhcnNlKHZvaWQgMCE9PXJbXCJkaWFjcml0aWMtc2Vuc2l0aXZlXCJdJiZyW1wiZGlhY3JpdGljLXNlbnNpdGl2ZVwiXSwxLEgpO2lmKCFpKXJldHVybiBudWxsO3ZhciBhPW51bGw7cmV0dXJuIHIubG9jYWxlJiYhKGE9ZS5wYXJzZShyLmxvY2FsZSwxLHEpKT9udWxsOm5ldyBydChuLGksYSl9LHJ0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGV0KHRoaXMuY2FzZVNlbnNpdGl2ZS5ldmFsdWF0ZSh0KSx0aGlzLmRpYWNyaXRpY1NlbnNpdGl2ZS5ldmFsdWF0ZSh0KSx0aGlzLmxvY2FsZT90aGlzLmxvY2FsZS5ldmFsdWF0ZSh0KTpudWxsKX0scnQucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuY2FzZVNlbnNpdGl2ZSksdCh0aGlzLmRpYWNyaXRpY1NlbnNpdGl2ZSksdGhpcy5sb2NhbGUmJnQodGhpcy5sb2NhbGUpfSxydC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuW3ZvaWQgMF19LHJ0LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdFtcImNhc2Utc2Vuc2l0aXZlXCJdPXRoaXMuY2FzZVNlbnNpdGl2ZS5zZXJpYWxpemUoKSx0W1wiZGlhY3JpdGljLXNlbnNpdGl2ZVwiXT10aGlzLmRpYWNyaXRpY1NlbnNpdGl2ZS5zZXJpYWxpemUoKSx0aGlzLmxvY2FsZSYmKHQubG9jYWxlPXRoaXMubG9jYWxlLnNlcmlhbGl6ZSgpKSxbXCJjb2xsYXRvclwiLHRdfTt2YXIgYXQ9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9dCx0aGlzLnZhbHVlPWV9O2F0LnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYoMiE9PXQubGVuZ3RoKXJldHVybiBlLmVycm9yKFwiJ2xpdGVyYWwnIGV4cHJlc3Npb24gcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIGJ1dCBmb3VuZCBcIisodC5sZW5ndGgtMSkrXCIgaW5zdGVhZC5cIik7aWYoIWZ1bmN0aW9uIHQoZSl7aWYobnVsbD09PWUpcmV0dXJuITA7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuITA7aWYoXCJib29sZWFuXCI9PXR5cGVvZiBlKXJldHVybiEwO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXJldHVybiEwO2lmKGUgaW5zdGFuY2VvZiB0dClyZXR1cm4hMDtpZihlIGluc3RhbmNlb2YgZXQpcmV0dXJuITA7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciByPTAsbj1lO3I8bi5sZW5ndGg7cis9MSlpZighdChuW3JdKSlyZXR1cm4hMTtyZXR1cm4hMH1pZihcIm9iamVjdFwiPT10eXBlb2YgZSl7Zm9yKHZhciBpIGluIGUpaWYoIXQoZVtpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9KHRbMV0pKXJldHVybiBlLmVycm9yKFwiaW52YWxpZCB2YWx1ZVwiKTt2YXIgcj10WzFdLG49aXQociksaT1lLmV4cGVjdGVkVHlwZTtyZXR1cm5cImFycmF5XCIhPT1uLmtpbmR8fDAhPT1uLk58fCFpfHxcImFycmF5XCIhPT1pLmtpbmR8fFwibnVtYmVyXCI9PXR5cGVvZiBpLk4mJjAhPT1pLk58fChuPWkpLG5ldyBhdChuLHIpfSxhdC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZX0sYXQucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbigpe30sYXQucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVyblt0aGlzLnZhbHVlXX0sYXQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblwiYXJyYXlcIj09PXRoaXMudHlwZS5raW5kfHxcIm9iamVjdFwiPT09dGhpcy50eXBlLmtpbmQ/W1wibGl0ZXJhbFwiLHRoaXMudmFsdWVdOnRoaXMudmFsdWUgaW5zdGFuY2VvZiB0dD9bXCJyZ2JhXCJdLmNvbmNhdCh0aGlzLnZhbHVlLnRvQXJyYXkoKSk6dGhpcy52YWx1ZX07dmFyIG90PWZ1bmN0aW9uKHQpe3RoaXMubmFtZT1cIkV4cHJlc3Npb25FdmFsdWF0aW9uRXJyb3JcIix0aGlzLm1lc3NhZ2U9dH07b3QucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2V9O3ZhciBzdD17c3RyaW5nOnEsbnVtYmVyOlUsYm9vbGVhbjpILG9iamVjdDpZfSxsdD1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT10LHRoaXMuYXJncz1lfTtsdC5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDIpcmV0dXJuIGUuZXJyb3IoXCJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuXCIpO2Zvcih2YXIgcj10WzBdLG49c3Rbcl0saT1bXSxhPTE7YTx0Lmxlbmd0aDthKyspe3ZhciBvPWUucGFyc2UodFthXSxhLFcpO2lmKCFvKXJldHVybiBudWxsO2kucHVzaChvKX1yZXR1cm4gbmV3IGx0KG4saSl9LGx0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHRoaXMuYXJncy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLmFyZ3NbZV0uZXZhbHVhdGUodCk7aWYoIUsodGhpcy50eXBlLGl0KHIpKSlyZXR1cm4gcjtpZihlPT09dGhpcy5hcmdzLmxlbmd0aC0xKXRocm93IG5ldyBvdChcIkV4cGVjdGVkIHZhbHVlIHRvIGJlIG9mIHR5cGUgXCIrJCh0aGlzLnR5cGUpK1wiLCBidXQgZm91bmQgXCIrJChpdChyKSkrXCIgaW5zdGVhZC5cIil9cmV0dXJuIG51bGx9LGx0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dGhpcy5hcmdzLmZvckVhY2godCl9LGx0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm4odD1bXSkuY29uY2F0LmFwcGx5KHQsdGhpcy5hcmdzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5wb3NzaWJsZU91dHB1dHMoKX0pKTt2YXIgdH0sbHQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblt0aGlzLnR5cGUua2luZF0uY29uY2F0KHRoaXMuYXJncy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VyaWFsaXplKCl9KSl9O3ZhciBjdD17c3RyaW5nOnEsbnVtYmVyOlUsYm9vbGVhbjpIfSx1dD1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT10LHRoaXMuaW5wdXQ9ZX07dXQucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwyfHx0Lmxlbmd0aD40KXJldHVybiBlLmVycm9yKFwiRXhwZWN0ZWQgMSwgMiwgb3IgMyBhcmd1bWVudHMsIGJ1dCBmb3VuZCBcIisodC5sZW5ndGgtMSkrXCIgaW5zdGVhZC5cIik7dmFyIHIsbjtpZih0Lmxlbmd0aD4yKXt2YXIgaT10WzFdO2lmKFwic3RyaW5nXCIhPXR5cGVvZiBpfHwhKGkgaW4gY3QpKXJldHVybiBlLmVycm9yKCdUaGUgaXRlbSB0eXBlIGFyZ3VtZW50IG9mIFwiYXJyYXlcIiBtdXN0IGJlIG9uZSBvZiBzdHJpbmcsIG51bWJlciwgYm9vbGVhbicsMSk7cj1jdFtpXX1lbHNlIHI9VztpZih0Lmxlbmd0aD4zKXtpZihcIm51bWJlclwiIT10eXBlb2YgdFsyXXx8dFsyXTwwfHx0WzJdIT09TWF0aC5mbG9vcih0WzJdKSlyZXR1cm4gZS5lcnJvcignVGhlIGxlbmd0aCBhcmd1bWVudCB0byBcImFycmF5XCIgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgbGl0ZXJhbCcsMik7bj10WzJdfXZhciBhPVoocixuKSxvPWUucGFyc2UodFt0Lmxlbmd0aC0xXSx0Lmxlbmd0aC0xLFcpO3JldHVybiBvP25ldyB1dChhLG8pOm51bGx9LHV0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlucHV0LmV2YWx1YXRlKHQpO2lmKEsodGhpcy50eXBlLGl0KGUpKSl0aHJvdyBuZXcgb3QoXCJFeHBlY3RlZCB2YWx1ZSB0byBiZSBvZiB0eXBlIFwiKyQodGhpcy50eXBlKStcIiwgYnV0IGZvdW5kIFwiKyQoaXQoZSkpK1wiIGluc3RlYWQuXCIpO3JldHVybiBlfSx1dC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbnB1dCl9LHV0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnB1dC5wb3NzaWJsZU91dHB1dHMoKX0sdXQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PVtcImFycmF5XCJdLGU9dGhpcy50eXBlLml0ZW1UeXBlO2lmKFwic3RyaW5nXCI9PT1lLmtpbmR8fFwibnVtYmVyXCI9PT1lLmtpbmR8fFwiYm9vbGVhblwiPT09ZS5raW5kKXt0LnB1c2goZS5raW5kKTt2YXIgcj10aGlzLnR5cGUuTjtcIm51bWJlclwiPT10eXBlb2YgciYmdC5wdXNoKHIpfXJldHVybiB0LnB1c2godGhpcy5pbnB1dC5zZXJpYWxpemUoKSksdH07dmFyIGh0PXtcInRvLW51bWJlclwiOlUsXCJ0by1jb2xvclwiOkd9LGZ0PWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPXQsdGhpcy5hcmdzPWV9O2Z0LnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MilyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC5cIik7Zm9yKHZhciByPXRbMF0sbj1odFtyXSxpPVtdLGE9MTthPHQubGVuZ3RoO2ErKyl7dmFyIG89ZS5wYXJzZSh0W2FdLGEsVyk7aWYoIW8pcmV0dXJuIG51bGw7aS5wdXNoKG8pfXJldHVybiBuZXcgZnQobixpKX0sZnQucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe2lmKFwiY29sb3JcIj09PXRoaXMudHlwZS5raW5kKXtmb3IodmFyIGUscixuPTAsaT10aGlzLmFyZ3M7bjxpLmxlbmd0aDtuKz0xKWlmKHI9bnVsbCxcInN0cmluZ1wiPT10eXBlb2YoZT1pW25dLmV2YWx1YXRlKHQpKSl7dmFyIGE9dC5wYXJzZUNvbG9yKGUpO2lmKGEpcmV0dXJuIGF9ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpJiYhKHI9ZS5sZW5ndGg8M3x8ZS5sZW5ndGg+ND9cIkludmFsaWQgcmJnYSB2YWx1ZSBcIitKU09OLnN0cmluZ2lmeShlKStcIjogZXhwZWN0ZWQgYW4gYXJyYXkgY29udGFpbmluZyBlaXRoZXIgdGhyZWUgb3IgZm91ciBudW1lcmljIHZhbHVlcy5cIjpudChlWzBdLGVbMV0sZVsyXSxlWzNdKSkpcmV0dXJuIG5ldyB0dChlWzBdLzI1NSxlWzFdLzI1NSxlWzJdLzI1NSxlWzNdKTt0aHJvdyBuZXcgb3Qocnx8XCJDb3VsZCBub3QgcGFyc2UgY29sb3IgZnJvbSB2YWx1ZSAnXCIrKFwic3RyaW5nXCI9PXR5cGVvZiBlP2U6SlNPTi5zdHJpbmdpZnkoZSkpK1wiJ1wiKX1mb3IodmFyIG89bnVsbCxzPTAsbD10aGlzLmFyZ3M7czxsLmxlbmd0aDtzKz0xKWlmKG51bGwhPT0obz1sW3NdLmV2YWx1YXRlKHQpKSl7dmFyIGM9TnVtYmVyKG8pO2lmKCFpc05hTihjKSlyZXR1cm4gY310aHJvdyBuZXcgb3QoXCJDb3VsZCBub3QgY29udmVydCBcIitKU09OLnN0cmluZ2lmeShvKStcIiB0byBudW1iZXIuXCIpfSxmdC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3RoaXMuYXJncy5mb3JFYWNoKHQpfSxmdC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuKHQ9W10pLmNvbmNhdC5hcHBseSh0LHRoaXMuYXJncy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucG9zc2libGVPdXRwdXRzKCl9KSk7dmFyIHR9LGZ0LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD1bXCJ0by1cIit0aGlzLnR5cGUua2luZF07cmV0dXJuIHRoaXMuZWFjaENoaWxkKGZ1bmN0aW9uKGUpe3QucHVzaChlLnNlcmlhbGl6ZSgpKX0pLHR9O3ZhciBwdD1bXCJVbmtub3duXCIsXCJQb2ludFwiLFwiTGluZVN0cmluZ1wiLFwiUG9seWdvblwiXSxkdD1mdW5jdGlvbigpe3RoaXMuX3BhcnNlQ29sb3JDYWNoZT17fX07ZHQucHJvdG90eXBlLmlkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmVhdHVyZSYmXCJpZFwiaW4gdGhpcy5mZWF0dXJlP3RoaXMuZmVhdHVyZS5pZDpudWxsfSxkdC5wcm90b3R5cGUuZ2VvbWV0cnlUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmVhdHVyZT9cIm51bWJlclwiPT10eXBlb2YgdGhpcy5mZWF0dXJlLnR5cGU/cHRbdGhpcy5mZWF0dXJlLnR5cGVdOnRoaXMuZmVhdHVyZS50eXBlOm51bGx9LGR0LnByb3RvdHlwZS5wcm9wZXJ0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmVhdHVyZSYmdGhpcy5mZWF0dXJlLnByb3BlcnRpZXN8fHt9fSxkdC5wcm90b3R5cGUucGFyc2VDb2xvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wYXJzZUNvbG9yQ2FjaGVbdF07cmV0dXJuIGV8fChlPXRoaXMuX3BhcnNlQ29sb3JDYWNoZVt0XT10dC5wYXJzZSh0KSksZX07dmFyIGd0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMubmFtZT10LHRoaXMudHlwZT1lLHRoaXMuX2V2YWx1YXRlPXIsdGhpcy5hcmdzPW59O2Z1bmN0aW9uIHZ0KHQpe2lmKHQgaW5zdGFuY2VvZiBndCl7aWYoXCJnZXRcIj09PXQubmFtZSYmMT09PXQuYXJncy5sZW5ndGgpcmV0dXJuITE7aWYoXCJoYXNcIj09PXQubmFtZSYmMT09PXQuYXJncy5sZW5ndGgpcmV0dXJuITE7aWYoXCJwcm9wZXJ0aWVzXCI9PT10Lm5hbWV8fFwiZ2VvbWV0cnktdHlwZVwiPT09dC5uYW1lfHxcImlkXCI9PT10Lm5hbWUpcmV0dXJuITE7aWYoL15maWx0ZXItLy50ZXN0KHQubmFtZSkpcmV0dXJuITF9dmFyIGU9ITA7cmV0dXJuIHQuZWFjaENoaWxkKGZ1bmN0aW9uKHQpe2UmJiF2dCh0KSYmKGU9ITEpfSksZX1mdW5jdGlvbiBtdCh0LGUpe2lmKHQgaW5zdGFuY2VvZiBndCYmZS5pbmRleE9mKHQubmFtZSk+PTApcmV0dXJuITE7dmFyIHI9ITA7cmV0dXJuIHQuZWFjaENoaWxkKGZ1bmN0aW9uKHQpe3ImJiFtdCh0LGUpJiYocj0hMSl9KSxyfWd0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXZhbHVhdGUodCx0aGlzLmFyZ3MpfSxndC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3RoaXMuYXJncy5mb3JFYWNoKHQpfSxndC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuW3ZvaWQgMF19LGd0LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5uYW1lXS5jb25jYXQodGhpcy5hcmdzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zZXJpYWxpemUoKX0pKX0sZ3QucGFyc2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLG49Z3QuZGVmaW5pdGlvbnNbcl07aWYoIW4pcmV0dXJuIGUuZXJyb3IoJ1Vua25vd24gZXhwcmVzc2lvbiBcIicrcisnXCIuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgW1wibGl0ZXJhbFwiLCBbLi4uXV0uJywwKTtmb3IodmFyIGk9QXJyYXkuaXNBcnJheShuKT9uWzBdOm4udHlwZSxhPUFycmF5LmlzQXJyYXkobik/W1tuWzFdLG5bMl1dXTpuLm92ZXJsb2FkcyxvPWEuZmlsdGVyKGZ1bmN0aW9uKGUpe3ZhciByPWVbMF07cmV0dXJuIUFycmF5LmlzQXJyYXkocil8fHIubGVuZ3RoPT09dC5sZW5ndGgtMX0pLHM9W10sbD0xO2w8dC5sZW5ndGg7bCsrKXt2YXIgYz10W2xdLHU9dm9pZCAwO2lmKDE9PT1vLmxlbmd0aCl7dmFyIGg9b1swXVswXTt1PUFycmF5LmlzQXJyYXkoaCk/aFtsLTFdOmgudHlwZX12YXIgZj1lLnBhcnNlKGMsMStzLmxlbmd0aCx1KTtpZighZilyZXR1cm4gbnVsbDtzLnB1c2goZil9Zm9yKHZhciBwPW51bGwsZD0wLGc9bztkPGcubGVuZ3RoO2QrPTEpe3ZhciB2PWdbZF0sbT12WzBdLHk9dlsxXTtpZihwPW5ldyB4dChlLnJlZ2lzdHJ5LGUucGF0aCxudWxsLGUuc2NvcGUpLEFycmF5LmlzQXJyYXkobSkmJm0ubGVuZ3RoIT09cy5sZW5ndGgpcC5lcnJvcihcIkV4cGVjdGVkIFwiK20ubGVuZ3RoK1wiIGFyZ3VtZW50cywgYnV0IGZvdW5kIFwiK3MubGVuZ3RoK1wiIGluc3RlYWQuXCIpO2Vsc2V7Zm9yKHZhciB4PTA7eDxzLmxlbmd0aDt4Kyspe3ZhciBiPUFycmF5LmlzQXJyYXkobSk/bVt4XTptLnR5cGUsXz1zW3hdO3AuY29uY2F0KHgrMSkuY2hlY2tTdWJ0eXBlKGIsXy50eXBlKX1pZigwPT09cC5lcnJvcnMubGVuZ3RoKXJldHVybiBuZXcgZ3QocixpLHkscyl9fWlmKDE9PT1vLmxlbmd0aCllLmVycm9ycy5wdXNoLmFwcGx5KGUuZXJyb3JzLHAuZXJyb3JzKTtlbHNle3ZhciB3PShvLmxlbmd0aD9vOmEpLm1hcChmdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gZT10WzBdLEFycmF5LmlzQXJyYXkoZSk/XCIoXCIrZS5tYXAoJCkuam9pbihcIiwgXCIpK1wiKVwiOlwiKFwiKyQoZS50eXBlKStcIi4uLilcIn0pLmpvaW4oXCIgfCBcIiksaz1zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gJCh0LnR5cGUpfSkuam9pbihcIiwgXCIpO2UuZXJyb3IoXCJFeHBlY3RlZCBhcmd1bWVudHMgb2YgdHlwZSBcIit3K1wiLCBidXQgZm91bmQgKFwiK2srXCIpIGluc3RlYWQuXCIpfXJldHVybiBudWxsfSxndC5yZWdpc3Rlcj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiBndC5kZWZpbml0aW9ucz1lLGUpdFtyXT1ndH07dmFyIHl0PWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPWUudHlwZSx0aGlzLm5hbWU9dCx0aGlzLmJvdW5kRXhwcmVzc2lvbj1lfTt5dC5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDIhPT10Lmxlbmd0aHx8XCJzdHJpbmdcIiE9dHlwZW9mIHRbMV0pcmV0dXJuIGUuZXJyb3IoXCIndmFyJyBleHByZXNzaW9uIHJlcXVpcmVzIGV4YWN0bHkgb25lIHN0cmluZyBsaXRlcmFsIGFyZ3VtZW50LlwiKTt2YXIgcj10WzFdO3JldHVybiBlLnNjb3BlLmhhcyhyKT9uZXcgeXQocixlLnNjb3BlLmdldChyKSk6ZS5lcnJvcignVW5rbm93biB2YXJpYWJsZSBcIicrcisnXCIuIE1ha2Ugc3VyZSBcIicrcisnXCIgaGFzIGJlZW4gYm91bmQgaW4gYW4gZW5jbG9zaW5nIFwibGV0XCIgZXhwcmVzc2lvbiBiZWZvcmUgdXNpbmcgaXQuJywxKX0seXQucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJvdW5kRXhwcmVzc2lvbi5ldmFsdWF0ZSh0KX0seXQucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbigpe30seXQucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVyblt2b2lkIDBdfSx5dC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuW1widmFyXCIsdGhpcy5uYW1lXX07dmFyIHh0PWZ1bmN0aW9uKHQsZSxyLG4saSl7dm9pZCAwPT09ZSYmKGU9W10pLHZvaWQgMD09PW4mJihuPW5ldyBqKSx2b2lkIDA9PT1pJiYoaT1bXSksdGhpcy5yZWdpc3RyeT10LHRoaXMucGF0aD1lLHRoaXMua2V5PWUubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiW1wiK3QrXCJdXCJ9KS5qb2luKFwiXCIpLHRoaXMuc2NvcGU9bix0aGlzLmVycm9ycz1pLHRoaXMuZXhwZWN0ZWRUeXBlPXJ9O2Z1bmN0aW9uIGJ0KHQsZSl7Zm9yKHZhciByLG4saT0wLGE9dC5sZW5ndGgtMSxvPTA7aTw9YTspe2lmKHI9dFtvPU1hdGguZmxvb3IoKGkrYSkvMildLG49dFtvKzFdLGU9PT1yfHxlPnImJmU8bilyZXR1cm4gbztpZihyPGUpaT1vKzE7ZWxzZXtpZighKHI+ZSkpdGhyb3cgbmV3IG90KFwiSW5wdXQgaXMgbm90IGEgbnVtYmVyLlwiKTthPW8tMX19cmV0dXJuIE1hdGgubWF4KG8tMSwwKX14dC5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdm9pZCAwPT09aSYmKGk9e30pLGU/dGhpcy5jb25jYXQoZSxyLG4pLl9wYXJzZSh0LGkpOnRoaXMuX3BhcnNlKHQsaSl9LHh0LnByb3RvdHlwZS5fcGFyc2U9ZnVuY3Rpb24odCxlKXtpZihudWxsIT09dCYmXCJzdHJpbmdcIiE9dHlwZW9mIHQmJlwiYm9vbGVhblwiIT10eXBlb2YgdCYmXCJudW1iZXJcIiE9dHlwZW9mIHR8fCh0PVtcImxpdGVyYWxcIix0XSksQXJyYXkuaXNBcnJheSh0KSl7aWYoMD09PXQubGVuZ3RoKXJldHVybiB0aGlzLmVycm9yKCdFeHBlY3RlZCBhbiBhcnJheSB3aXRoIGF0IGxlYXN0IG9uZSBlbGVtZW50LiBJZiB5b3Ugd2FudGVkIGEgbGl0ZXJhbCBhcnJheSwgdXNlIFtcImxpdGVyYWxcIiwgW11dLicpO3ZhciByPXRbMF07aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHIpcmV0dXJuIHRoaXMuZXJyb3IoXCJFeHByZXNzaW9uIG5hbWUgbXVzdCBiZSBhIHN0cmluZywgYnV0IGZvdW5kIFwiK3R5cGVvZiByKycgaW5zdGVhZC4gSWYgeW91IHdhbnRlZCBhIGxpdGVyYWwgYXJyYXksIHVzZSBbXCJsaXRlcmFsXCIsIFsuLi5dXS4nLDApLG51bGw7dmFyIG49dGhpcy5yZWdpc3RyeVtyXTtpZihuKXt2YXIgaT1uLnBhcnNlKHQsdGhpcyk7aWYoIWkpcmV0dXJuIG51bGw7aWYodGhpcy5leHBlY3RlZFR5cGUpe3ZhciBhPXRoaXMuZXhwZWN0ZWRUeXBlLG89aS50eXBlO2lmKFwic3RyaW5nXCIhPT1hLmtpbmQmJlwibnVtYmVyXCIhPT1hLmtpbmQmJlwiYm9vbGVhblwiIT09YS5raW5kJiZcIm9iamVjdFwiIT09YS5raW5kfHxcInZhbHVlXCIhPT1vLmtpbmQpaWYoXCJhcnJheVwiPT09YS5raW5kJiZcInZhbHVlXCI9PT1vLmtpbmQpZS5vbWl0VHlwZUFubm90YXRpb25zfHwoaT1uZXcgdXQoYSxpKSk7ZWxzZSBpZihcImNvbG9yXCIhPT1hLmtpbmR8fFwidmFsdWVcIiE9PW8ua2luZCYmXCJzdHJpbmdcIiE9PW8ua2luZCl7aWYodGhpcy5jaGVja1N1YnR5cGUodGhpcy5leHBlY3RlZFR5cGUsaS50eXBlKSlyZXR1cm4gbnVsbH1lbHNlIGUub21pdFR5cGVBbm5vdGF0aW9uc3x8KGk9bmV3IGZ0KGEsW2ldKSk7ZWxzZSBlLm9taXRUeXBlQW5ub3RhdGlvbnN8fChpPW5ldyBsdChhLFtpXSkpfWlmKCEoaSBpbnN0YW5jZW9mIGF0KSYmZnVuY3Rpb24gdChlKXtpZihlIGluc3RhbmNlb2YgeXQpcmV0dXJuIHQoZS5ib3VuZEV4cHJlc3Npb24pO2lmKGUgaW5zdGFuY2VvZiBndCYmXCJlcnJvclwiPT09ZS5uYW1lKXJldHVybiExO2lmKGUgaW5zdGFuY2VvZiBydClyZXR1cm4hMTt2YXIgcj1lIGluc3RhbmNlb2YgZnR8fGUgaW5zdGFuY2VvZiBsdHx8ZSBpbnN0YW5jZW9mIHV0LG49ITA7cmV0dXJuIGUuZWFjaENoaWxkKGZ1bmN0aW9uKGUpe249cj9uJiZ0KGUpOm4mJmUgaW5zdGFuY2VvZiBhdH0pLCEhbiYmKHZ0KGUpJiZtdChlLFtcInpvb21cIixcImhlYXRtYXAtZGVuc2l0eVwiLFwibGluZS1wcm9ncmVzc1wiLFwiaXMtc3VwcG9ydGVkLXNjcmlwdFwiXSkpfShpKSl7dmFyIHM9bmV3IGR0O3RyeXtpPW5ldyBhdChpLnR5cGUsaS5ldmFsdWF0ZShzKSl9Y2F0Y2godCl7cmV0dXJuIHRoaXMuZXJyb3IodC5tZXNzYWdlKSxudWxsfX1yZXR1cm4gaX1yZXR1cm4gdGhpcy5lcnJvcignVW5rbm93biBleHByZXNzaW9uIFwiJytyKydcIi4gSWYgeW91IHdhbnRlZCBhIGxpdGVyYWwgYXJyYXksIHVzZSBbXCJsaXRlcmFsXCIsIFsuLi5dXS4nLDApfXJldHVybiB2b2lkIDA9PT10P3RoaXMuZXJyb3IoXCIndW5kZWZpbmVkJyB2YWx1ZSBpbnZhbGlkLiBVc2UgbnVsbCBpbnN0ZWFkLlwiKTpcIm9iamVjdFwiPT10eXBlb2YgdD90aGlzLmVycm9yKCdCYXJlIG9iamVjdHMgaW52YWxpZC4gVXNlIFtcImxpdGVyYWxcIiwgey4uLn1dIGluc3RlYWQuJyk6dGhpcy5lcnJvcihcIkV4cGVjdGVkIGFuIGFycmF5LCBidXQgZm91bmQgXCIrdHlwZW9mIHQrXCIgaW5zdGVhZC5cIil9LHh0LnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVwibnVtYmVyXCI9PXR5cGVvZiB0P3RoaXMucGF0aC5jb25jYXQodCk6dGhpcy5wYXRoLGk9cj90aGlzLnNjb3BlLmNvbmNhdChyKTp0aGlzLnNjb3BlO3JldHVybiBuZXcgeHQodGhpcy5yZWdpc3RyeSxuLGV8fG51bGwsaSx0aGlzLmVycm9ycyl9LHh0LnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj1hcmd1bWVudHMubGVuZ3RoLTE7ci0tID4wOyllW3JdPWFyZ3VtZW50c1tyKzFdO3ZhciBuPVwiXCIrdGhpcy5rZXkrZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJbXCIrdCtcIl1cIn0pLmpvaW4oXCJcIik7dGhpcy5lcnJvcnMucHVzaChuZXcgTihuLHQpKX0seHQucHJvdG90eXBlLmNoZWNrU3VidHlwZT1mdW5jdGlvbih0LGUpe3ZhciByPUsodCxlKTtyZXR1cm4gciYmdGhpcy5lcnJvcihyKSxyfTt2YXIgX3Q9ZnVuY3Rpb24odCxlLHIpe3RoaXMudHlwZT10LHRoaXMuaW5wdXQ9ZSx0aGlzLmxhYmVscz1bXSx0aGlzLm91dHB1dHM9W107Zm9yKHZhciBuPTAsaT1yO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXSxvPWFbMF0scz1hWzFdO3RoaXMubGFiZWxzLnB1c2gobyksdGhpcy5vdXRwdXRzLnB1c2gocyl9fTtmdW5jdGlvbiB3dCh0LGUscil7cmV0dXJuIHQqKDEtcikrZSpyfV90LnBhcnNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFsxXSxuPXQuc2xpY2UoMik7aWYodC5sZW5ndGgtMTw0KXJldHVybiBlLmVycm9yKFwiRXhwZWN0ZWQgYXQgbGVhc3QgNCBhcmd1bWVudHMsIGJ1dCBmb3VuZCBvbmx5IFwiKyh0Lmxlbmd0aC0xKStcIi5cIik7aWYoKHQubGVuZ3RoLTEpJTIhPTApcmV0dXJuIGUuZXJyb3IoXCJFeHBlY3RlZCBhbiBldmVuIG51bWJlciBvZiBhcmd1bWVudHMuXCIpO2lmKCEocj1lLnBhcnNlKHIsMSxVKSkpcmV0dXJuIG51bGw7dmFyIGk9W10sYT1udWxsO2UuZXhwZWN0ZWRUeXBlJiZcInZhbHVlXCIhPT1lLmV4cGVjdGVkVHlwZS5raW5kJiYoYT1lLmV4cGVjdGVkVHlwZSksbi51bnNoaWZ0KC0xLzApO2Zvcih2YXIgbz0wO288bi5sZW5ndGg7bys9Mil7dmFyIHM9bltvXSxsPW5bbysxXSxjPW8rMSx1PW8rMjtpZihcIm51bWJlclwiIT10eXBlb2YgcylyZXR1cm4gZS5lcnJvcignSW5wdXQvb3V0cHV0IHBhaXJzIGZvciBcInN0ZXBcIiBleHByZXNzaW9ucyBtdXN0IGJlIGRlZmluZWQgdXNpbmcgbGl0ZXJhbCBudW1lcmljIHZhbHVlcyAobm90IGNvbXB1dGVkIGV4cHJlc3Npb25zKSBmb3IgdGhlIGlucHV0IHZhbHVlcy4nLGMpO2lmKGkubGVuZ3RoJiZpW2kubGVuZ3RoLTFdWzBdPj1zKXJldHVybiBlLmVycm9yKCdJbnB1dC9vdXRwdXQgcGFpcnMgZm9yIFwic3RlcFwiIGV4cHJlc3Npb25zIG11c3QgYmUgYXJyYW5nZWQgd2l0aCBpbnB1dCB2YWx1ZXMgaW4gc3RyaWN0bHkgYXNjZW5kaW5nIG9yZGVyLicsYyk7dmFyIGg9ZS5wYXJzZShsLHUsYSk7aWYoIWgpcmV0dXJuIG51bGw7YT1hfHxoLnR5cGUsaS5wdXNoKFtzLGhdKX1yZXR1cm4gbmV3IF90KGEscixpKX0sX3QucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFiZWxzLHI9dGhpcy5vdXRwdXRzO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gclswXS5ldmFsdWF0ZSh0KTt2YXIgbj10aGlzLmlucHV0LmV2YWx1YXRlKHQpO2lmKG48PWVbMF0pcmV0dXJuIHJbMF0uZXZhbHVhdGUodCk7dmFyIGk9ZS5sZW5ndGg7cmV0dXJuIG4+PWVbaS0xXT9yW2ktMV0uZXZhbHVhdGUodCk6cltidChlLG4pXS5ldmFsdWF0ZSh0KX0sX3QucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5wdXQpO2Zvcih2YXIgZT0wLHI9dGhpcy5vdXRwdXRzO2U8ci5sZW5ndGg7ZSs9MSl0KHJbZV0pfSxfdC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuKHQ9W10pLmNvbmNhdC5hcHBseSh0LHRoaXMub3V0cHV0cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucG9zc2libGVPdXRwdXRzKCl9KSk7dmFyIHR9LF90LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W1wic3RlcFwiLHRoaXMuaW5wdXQuc2VyaWFsaXplKCldLGU9MDtlPHRoaXMubGFiZWxzLmxlbmd0aDtlKyspZT4wJiZ0LnB1c2godGhpcy5sYWJlbHNbZV0pLHQucHVzaCh0aGlzLm91dHB1dHNbZV0uc2VyaWFsaXplKCkpO3JldHVybiB0fTt2YXIga3Q9T2JqZWN0LmZyZWV6ZSh7bnVtYmVyOnd0LGNvbG9yOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbmV3IHR0KHd0KHQucixlLnIsciksd3QodC5nLGUuZyxyKSx3dCh0LmIsZS5iLHIpLHd0KHQuYSxlLmEscikpfSxhcnJheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHd0KHQsZVtuXSxyKX0pfX0pLEF0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMudHlwZT10LHRoaXMuaW50ZXJwb2xhdGlvbj1lLHRoaXMuaW5wdXQ9cix0aGlzLmxhYmVscz1bXSx0aGlzLm91dHB1dHM9W107Zm9yKHZhciBpPTAsYT1uO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXSxzPW9bMF0sbD1vWzFdO3RoaXMubGFiZWxzLnB1c2gocyksdGhpcy5vdXRwdXRzLnB1c2gobCl9fTtmdW5jdGlvbiBUdCh0LGUscixuKXt2YXIgaT1uLXIsYT10LXI7cmV0dXJuIDA9PT1pPzA6MT09PWU/YS9pOihNYXRoLnBvdyhlLGEpLTEpLyhNYXRoLnBvdyhlLGkpLTEpfUF0LmludGVycG9sYXRpb25GYWN0b3I9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9MDtpZihcImV4cG9uZW50aWFsXCI9PT10Lm5hbWUpaT1UdChlLHQuYmFzZSxyLG4pO2Vsc2UgaWYoXCJsaW5lYXJcIj09PXQubmFtZSlpPVR0KGUsMSxyLG4pO2Vsc2UgaWYoXCJjdWJpYy1iZXppZXJcIj09PXQubmFtZSl7dmFyIG89dC5jb250cm9sUG9pbnRzO2k9bmV3IGEob1swXSxvWzFdLG9bMl0sb1szXSkuc29sdmUoVHQoZSwxLHIsbikpfXJldHVybiBpfSxBdC5wYXJzZT1mdW5jdGlvbih0LGUpe3ZhciByPXRbMV0sbj10WzJdLGk9dC5zbGljZSgzKTtpZighQXJyYXkuaXNBcnJheShyKXx8MD09PXIubGVuZ3RoKXJldHVybiBlLmVycm9yKFwiRXhwZWN0ZWQgYW4gaW50ZXJwb2xhdGlvbiB0eXBlIGV4cHJlc3Npb24uXCIsMSk7aWYoXCJsaW5lYXJcIj09PXJbMF0pcj17bmFtZTpcImxpbmVhclwifTtlbHNlIGlmKFwiZXhwb25lbnRpYWxcIj09PXJbMF0pe3ZhciBhPXJbMV07aWYoXCJudW1iZXJcIiE9dHlwZW9mIGEpcmV0dXJuIGUuZXJyb3IoXCJFeHBvbmVudGlhbCBpbnRlcnBvbGF0aW9uIHJlcXVpcmVzIGEgbnVtZXJpYyBiYXNlLlwiLDEsMSk7cj17bmFtZTpcImV4cG9uZW50aWFsXCIsYmFzZTphfX1lbHNle2lmKFwiY3ViaWMtYmV6aWVyXCIhPT1yWzBdKXJldHVybiBlLmVycm9yKFwiVW5rbm93biBpbnRlcnBvbGF0aW9uIHR5cGUgXCIrU3RyaW5nKHJbMF0pLDEsMCk7dmFyIG89ci5zbGljZSgxKTtpZig0IT09by5sZW5ndGh8fG8uc29tZShmdW5jdGlvbih0KXtyZXR1cm5cIm51bWJlclwiIT10eXBlb2YgdHx8dDwwfHx0PjF9KSlyZXR1cm4gZS5lcnJvcihcIkN1YmljIGJlemllciBpbnRlcnBvbGF0aW9uIHJlcXVpcmVzIGZvdXIgbnVtZXJpYyBhcmd1bWVudHMgd2l0aCB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAxLlwiLDEpO3I9e25hbWU6XCJjdWJpYy1iZXppZXJcIixjb250cm9sUG9pbnRzOm99fWlmKHQubGVuZ3RoLTE8NClyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIGF0IGxlYXN0IDQgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSBcIisodC5sZW5ndGgtMSkrXCIuXCIpO2lmKCh0Lmxlbmd0aC0xKSUyIT0wKXJldHVybiBlLmVycm9yKFwiRXhwZWN0ZWQgYW4gZXZlbiBudW1iZXIgb2YgYXJndW1lbnRzLlwiKTtpZighKG49ZS5wYXJzZShuLDIsVSkpKXJldHVybiBudWxsO3ZhciBzPVtdLGw9bnVsbDtlLmV4cGVjdGVkVHlwZSYmXCJ2YWx1ZVwiIT09ZS5leHBlY3RlZFR5cGUua2luZCYmKGw9ZS5leHBlY3RlZFR5cGUpO2Zvcih2YXIgYz0wO2M8aS5sZW5ndGg7Yys9Mil7dmFyIHU9aVtjXSxoPWlbYysxXSxmPWMrMyxwPWMrNDtpZihcIm51bWJlclwiIT10eXBlb2YgdSlyZXR1cm4gZS5lcnJvcignSW5wdXQvb3V0cHV0IHBhaXJzIGZvciBcImludGVycG9sYXRlXCIgZXhwcmVzc2lvbnMgbXVzdCBiZSBkZWZpbmVkIHVzaW5nIGxpdGVyYWwgbnVtZXJpYyB2YWx1ZXMgKG5vdCBjb21wdXRlZCBleHByZXNzaW9ucykgZm9yIHRoZSBpbnB1dCB2YWx1ZXMuJyxmKTtpZihzLmxlbmd0aCYmc1tzLmxlbmd0aC0xXVswXT49dSlyZXR1cm4gZS5lcnJvcignSW5wdXQvb3V0cHV0IHBhaXJzIGZvciBcImludGVycG9sYXRlXCIgZXhwcmVzc2lvbnMgbXVzdCBiZSBhcnJhbmdlZCB3aXRoIGlucHV0IHZhbHVlcyBpbiBzdHJpY3RseSBhc2NlbmRpbmcgb3JkZXIuJyxmKTt2YXIgZD1lLnBhcnNlKGgscCxsKTtpZighZClyZXR1cm4gbnVsbDtsPWx8fGQudHlwZSxzLnB1c2goW3UsZF0pfXJldHVyblwibnVtYmVyXCI9PT1sLmtpbmR8fFwiY29sb3JcIj09PWwua2luZHx8XCJhcnJheVwiPT09bC5raW5kJiZcIm51bWJlclwiPT09bC5pdGVtVHlwZS5raW5kJiZcIm51bWJlclwiPT10eXBlb2YgbC5OP25ldyBBdChsLHIsbixzKTplLmVycm9yKFwiVHlwZSBcIiskKGwpK1wiIGlzIG5vdCBpbnRlcnBvbGF0YWJsZS5cIil9LEF0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhYmVscyxyPXRoaXMub3V0cHV0cztpZigxPT09ZS5sZW5ndGgpcmV0dXJuIHJbMF0uZXZhbHVhdGUodCk7dmFyIG49dGhpcy5pbnB1dC5ldmFsdWF0ZSh0KTtpZihuPD1lWzBdKXJldHVybiByWzBdLmV2YWx1YXRlKHQpO3ZhciBpPWUubGVuZ3RoO2lmKG4+PWVbaS0xXSlyZXR1cm4gcltpLTFdLmV2YWx1YXRlKHQpO3ZhciBhPWJ0KGUsbiksbz1lW2FdLHM9ZVthKzFdLGw9QXQuaW50ZXJwb2xhdGlvbkZhY3Rvcih0aGlzLmludGVycG9sYXRpb24sbixvLHMpLGM9clthXS5ldmFsdWF0ZSh0KSx1PXJbYSsxXS5ldmFsdWF0ZSh0KTtyZXR1cm4ga3RbdGhpcy50eXBlLmtpbmQudG9Mb3dlckNhc2UoKV0oYyx1LGwpfSxBdC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbnB1dCk7Zm9yKHZhciBlPTAscj10aGlzLm91dHB1dHM7ZTxyLmxlbmd0aDtlKz0xKXQocltlXSl9LEF0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm4odD1bXSkuY29uY2F0LmFwcGx5KHQsdGhpcy5vdXRwdXRzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5wb3NzaWJsZU91dHB1dHMoKX0pKTt2YXIgdH0sQXQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD1bXCJpbnRlcnBvbGF0ZVwiLFwibGluZWFyXCI9PT10aGlzLmludGVycG9sYXRpb24ubmFtZT9bXCJsaW5lYXJcIl06XCJleHBvbmVudGlhbFwiPT09dGhpcy5pbnRlcnBvbGF0aW9uLm5hbWU/MT09PXRoaXMuaW50ZXJwb2xhdGlvbi5iYXNlP1tcImxpbmVhclwiXTpbXCJleHBvbmVudGlhbFwiLHRoaXMuaW50ZXJwb2xhdGlvbi5iYXNlXTpbXCJjdWJpYy1iZXppZXJcIl0uY29uY2F0KHRoaXMuaW50ZXJwb2xhdGlvbi5jb250cm9sUG9pbnRzKSx0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXSxlPTA7ZTx0aGlzLmxhYmVscy5sZW5ndGg7ZSsrKXQucHVzaCh0aGlzLmxhYmVsc1tlXSx0aGlzLm91dHB1dHNbZV0uc2VyaWFsaXplKCkpO3JldHVybiB0fTt2YXIgTXQ9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9dCx0aGlzLmFyZ3M9ZX07TXQucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwyKXJldHVybiBlLmVycm9yKFwiRXhwZWN0ZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LlwiKTt2YXIgcj1udWxsLG49ZS5leHBlY3RlZFR5cGU7biYmXCJ2YWx1ZVwiIT09bi5raW5kJiYocj1uKTtmb3IodmFyIGk9W10sYT0wLG89dC5zbGljZSgxKTthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV0sbD1lLnBhcnNlKHMsMStpLmxlbmd0aCxyLHZvaWQgMCx7b21pdFR5cGVBbm5vdGF0aW9uczohMH0pO2lmKCFsKXJldHVybiBudWxsO3I9cnx8bC50eXBlLGkucHVzaChsKX12YXIgYz1uJiZpLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIEsobix0LnR5cGUpfSk7cmV0dXJuIG5ldyBNdChjP1c6cixpKX0sTXQucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1udWxsLHI9MCxuPXRoaXMuYXJncztyPG4ubGVuZ3RoJiZudWxsPT09KGU9bltyXS5ldmFsdWF0ZSh0KSk7cis9MSk7cmV0dXJuIGV9LE10LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dGhpcy5hcmdzLmZvckVhY2godCl9LE10LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm4odD1bXSkuY29uY2F0LmFwcGx5KHQsdGhpcy5hcmdzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5wb3NzaWJsZU91dHB1dHMoKX0pKTt2YXIgdH0sTXQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PVtcImNvYWxlc2NlXCJdO3JldHVybiB0aGlzLmVhY2hDaGlsZChmdW5jdGlvbihlKXt0LnB1c2goZS5zZXJpYWxpemUoKSl9KSx0fTt2YXIgU3Q9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9ZS50eXBlLHRoaXMuYmluZGluZ3M9W10uY29uY2F0KHQpLHRoaXMucmVzdWx0PWV9O1N0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZXN1bHQuZXZhbHVhdGUodCl9LFN0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10aGlzLmJpbmRpbmdzO2U8ci5sZW5ndGg7ZSs9MSl0KHJbZV1bMV0pO3QodGhpcy5yZXN1bHQpfSxTdC5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDQpcmV0dXJuIGUuZXJyb3IoXCJFeHBlY3RlZCBhdCBsZWFzdCAzIGFyZ3VtZW50cywgYnV0IGZvdW5kIFwiKyh0Lmxlbmd0aC0xKStcIiBpbnN0ZWFkLlwiKTtmb3IodmFyIHI9W10sbj0xO248dC5sZW5ndGgtMTtuKz0yKXt2YXIgaT10W25dO2lmKFwic3RyaW5nXCIhPXR5cGVvZiBpKXJldHVybiBlLmVycm9yKFwiRXhwZWN0ZWQgc3RyaW5nLCBidXQgZm91bmQgXCIrdHlwZW9mIGkrXCIgaW5zdGVhZC5cIixuKTtpZigvW15hLXpBLVowLTlfXS8udGVzdChpKSlyZXR1cm4gZS5lcnJvcihcIlZhcmlhYmxlIG5hbWVzIG11c3QgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIG9yICdfJy5cIixuKTt2YXIgYT1lLnBhcnNlKHRbbisxXSxuKzEpO2lmKCFhKXJldHVybiBudWxsO3IucHVzaChbaSxhXSl9dmFyIG89ZS5wYXJzZSh0W3QubGVuZ3RoLTFdLHQubGVuZ3RoLTEsdm9pZCAwLHIpO3JldHVybiBvP25ldyBTdChyLG8pOm51bGx9LFN0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXN1bHQucG9zc2libGVPdXRwdXRzKCl9LFN0LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W1wibGV0XCJdLGU9MCxyPXRoaXMuYmluZGluZ3M7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9blswXSxhPW5bMV07dC5wdXNoKGksYS5zZXJpYWxpemUoKSl9cmV0dXJuIHQucHVzaCh0aGlzLnJlc3VsdC5zZXJpYWxpemUoKSksdH07dmFyIEV0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnR5cGU9dCx0aGlzLmluZGV4PWUsdGhpcy5pbnB1dD1yfTtFdC5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDMhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIDIgYXJndW1lbnRzLCBidXQgZm91bmQgXCIrKHQubGVuZ3RoLTEpK1wiIGluc3RlYWQuXCIpO3ZhciByPWUucGFyc2UodFsxXSwxLFUpLG49ZS5wYXJzZSh0WzJdLDIsWihlLmV4cGVjdGVkVHlwZXx8VykpO2lmKCFyfHwhbilyZXR1cm4gbnVsbDt2YXIgaT1uLnR5cGU7cmV0dXJuIG5ldyBFdChpLml0ZW1UeXBlLHIsbil9LEV0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmluZGV4LmV2YWx1YXRlKHQpLHI9dGhpcy5pbnB1dC5ldmFsdWF0ZSh0KTtpZihlPDApdGhyb3cgbmV3IG90KFwiQXJyYXkgaW5kZXggb3V0IG9mIGJvdW5kczogXCIrZStcIiA8IDAuXCIpO2lmKGU+PXIubGVuZ3RoKXRocm93IG5ldyBvdChcIkFycmF5IGluZGV4IG91dCBvZiBib3VuZHM6IFwiK2UrXCIgPiBcIisoci5sZW5ndGgtMSkrXCIuXCIpO2lmKGUhPT1NYXRoLmZsb29yKGUpKXRocm93IG5ldyBvdChcIkFycmF5IGluZGV4IG11c3QgYmUgYW4gaW50ZWdlciwgYnV0IGZvdW5kIFwiK2UrXCIgaW5zdGVhZC5cIik7cmV0dXJuIHJbZV19LEV0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmluZGV4KSx0KHRoaXMuaW5wdXQpfSxFdC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuW3ZvaWQgMF19LEV0LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm5bXCJhdFwiLHRoaXMuaW5kZXguc2VyaWFsaXplKCksdGhpcy5pbnB1dC5zZXJpYWxpemUoKV19O3ZhciBDdD1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5pbnB1dFR5cGU9dCx0aGlzLnR5cGU9ZSx0aGlzLmlucHV0PXIsdGhpcy5jYXNlcz1uLHRoaXMub3V0cHV0cz1pLHRoaXMub3RoZXJ3aXNlPWF9O0N0LnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8NSlyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIGF0IGxlYXN0IDQgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSBcIisodC5sZW5ndGgtMSkrXCIuXCIpO2lmKHQubGVuZ3RoJTIhPTEpcmV0dXJuIGUuZXJyb3IoXCJFeHBlY3RlZCBhbiBldmVuIG51bWJlciBvZiBhcmd1bWVudHMuXCIpO3ZhciByLG47ZS5leHBlY3RlZFR5cGUmJlwidmFsdWVcIiE9PWUuZXhwZWN0ZWRUeXBlLmtpbmQmJihuPWUuZXhwZWN0ZWRUeXBlKTtmb3IodmFyIGk9e30sYT1bXSxvPTI7bzx0Lmxlbmd0aC0xO28rPTIpe3ZhciBzPXRbb10sbD10W28rMV07QXJyYXkuaXNBcnJheShzKXx8KHM9W3NdKTt2YXIgYz1lLmNvbmNhdChvKTtpZigwPT09cy5sZW5ndGgpcmV0dXJuIGMuZXJyb3IoXCJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYnJhbmNoIGxhYmVsLlwiKTtmb3IodmFyIHU9MCxoPXM7dTxoLmxlbmd0aDt1Kz0xKXt2YXIgZj1oW3VdO2lmKFwibnVtYmVyXCIhPXR5cGVvZiBmJiZcInN0cmluZ1wiIT10eXBlb2YgZilyZXR1cm4gYy5lcnJvcihcIkJyYW5jaCBsYWJlbHMgbXVzdCBiZSBudW1iZXJzIG9yIHN0cmluZ3MuXCIpO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBmJiZNYXRoLmFicyhmKT5OdW1iZXIuTUFYX1NBRkVfSU5URUdFUilyZXR1cm4gYy5lcnJvcihcIkJyYW5jaCBsYWJlbHMgbXVzdCBiZSBpbnRlZ2VycyBubyBsYXJnZXIgdGhhbiBcIitOdW1iZXIuTUFYX1NBRkVfSU5URUdFUitcIi5cIik7aWYoXCJudW1iZXJcIj09dHlwZW9mIGYmJk1hdGguZmxvb3IoZikhPT1mKXJldHVybiBjLmVycm9yKFwiTnVtZXJpYyBicmFuY2ggbGFiZWxzIG11c3QgYmUgaW50ZWdlciB2YWx1ZXMuXCIpO2lmKHIpe2lmKGMuY2hlY2tTdWJ0eXBlKHIsaXQoZikpKXJldHVybiBudWxsfWVsc2Ugcj1pdChmKTtpZih2b2lkIDAhPT1pW1N0cmluZyhmKV0pcmV0dXJuIGMuZXJyb3IoXCJCcmFuY2ggbGFiZWxzIG11c3QgYmUgdW5pcXVlLlwiKTtpW1N0cmluZyhmKV09YS5sZW5ndGh9dmFyIHA9ZS5wYXJzZShsLG8sbik7aWYoIXApcmV0dXJuIG51bGw7bj1ufHxwLnR5cGUsYS5wdXNoKHApfXZhciBkPWUucGFyc2UodFsxXSwxLHIpO2lmKCFkKXJldHVybiBudWxsO3ZhciBnPWUucGFyc2UodFt0Lmxlbmd0aC0xXSx0Lmxlbmd0aC0xLG4pO3JldHVybiBnP25ldyBDdChyLG4sZCxpLGEsZyk6bnVsbH0sQ3QucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5wdXQuZXZhbHVhdGUodCk7cmV0dXJuKHRoaXMub3V0cHV0c1t0aGlzLmNhc2VzW2VdXXx8dGhpcy5vdGhlcndpc2UpLmV2YWx1YXRlKHQpfSxDdC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbnB1dCksdGhpcy5vdXRwdXRzLmZvckVhY2godCksdCh0aGlzLm90aGVyd2lzZSl9LEN0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm4odD1bXSkuY29uY2F0LmFwcGx5KHQsdGhpcy5vdXRwdXRzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5wb3NzaWJsZU91dHB1dHMoKX0pKS5jb25jYXQodGhpcy5vdGhlcndpc2UucG9zc2libGVPdXRwdXRzKCkpO3ZhciB0fSxDdC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1bXCJtYXRjaFwiLHRoaXMuaW5wdXQuc2VyaWFsaXplKCldLHI9W10sbj17fSxpPTAsYT1PYmplY3Qua2V5cyh0aGlzLmNhc2VzKS5zb3J0KCk7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldLHM9blt0LmNhc2VzW29dXTt2b2lkIDA9PT1zPyhuW3QuY2FzZXNbb11dPXIubGVuZ3RoLHIucHVzaChbdC5jYXNlc1tvXSxbb11dKSk6cltzXVsxXS5wdXNoKG8pfWZvcih2YXIgbD1mdW5jdGlvbihlKXtyZXR1cm5cIm51bWJlclwiPT09dC5pbnB1dC50eXBlLmtpbmQ/TnVtYmVyKGUpOmV9LGM9MCx1PXI7Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgaD11W2NdLGY9aFswXSxwPWhbMV07MT09PXAubGVuZ3RoP2UucHVzaChsKHBbMF0pKTplLnB1c2gocC5tYXAobCkpLGUucHVzaCh0Lm91dHB1dHNbZl0uc2VyaWFsaXplKCkpfXJldHVybiBlLnB1c2godGhpcy5vdGhlcndpc2Uuc2VyaWFsaXplKCkpLGV9O3ZhciBMdD1mdW5jdGlvbih0LGUscil7dGhpcy50eXBlPXQsdGhpcy5icmFuY2hlcz1lLHRoaXMub3RoZXJ3aXNlPXJ9O2Z1bmN0aW9uIHp0KHQpe3JldHVyblwic3RyaW5nXCI9PT10LmtpbmR8fFwibnVtYmVyXCI9PT10LmtpbmR8fFwiYm9vbGVhblwiPT09dC5raW5kfHxcIm51bGxcIj09PXQua2luZH1mdW5jdGlvbiBPdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe2Z1bmN0aW9uIHIodCxlLHIpe3RoaXMudHlwZT1ILHRoaXMubGhzPXQsdGhpcy5yaHM9ZSx0aGlzLmNvbGxhdG9yPXJ9cmV0dXJuIHIucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigzIT09dC5sZW5ndGgmJjQhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIHR3byBvciB0aHJlZSBhcmd1bWVudHMuXCIpO3ZhciBuPWUucGFyc2UodFsxXSwxLFcpO2lmKCFuKXJldHVybiBudWxsO3ZhciBpPWUucGFyc2UodFsyXSwyLFcpO2lmKCFpKXJldHVybiBudWxsO2lmKCF6dChuLnR5cGUpJiYhenQoaS50eXBlKSlyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudCB0byBiZSBhIHN0cmluZywgbnVtYmVyLCBib29sZWFuLCBvciBudWxsLCBidXQgZm91bmQgKFwiKyQobi50eXBlKStcIiwgXCIrJChpLnR5cGUpK1wiKSBpbnN0ZWFkLlwiKTtpZihuLnR5cGUua2luZCE9PWkudHlwZS5raW5kJiZcInZhbHVlXCIhPT1uLnR5cGUua2luZCYmXCJ2YWx1ZVwiIT09aS50eXBlLmtpbmQpcmV0dXJuIGUuZXJyb3IoXCJDYW5ub3QgY29tcGFyZSBcIiskKG4udHlwZSkrXCIgYW5kIFwiKyQoaS50eXBlKStcIi5cIik7dmFyIGE9bnVsbDtpZig0PT09dC5sZW5ndGgpe2lmKFwic3RyaW5nXCIhPT1uLnR5cGUua2luZCYmXCJzdHJpbmdcIiE9PWkudHlwZS5raW5kKXJldHVybiBlLmVycm9yKFwiQ2Fubm90IHVzZSBjb2xsYXRvciB0byBjb21wYXJlIG5vbi1zdHJpbmcgdHlwZXMuXCIpO2lmKCEoYT1lLnBhcnNlKHRbM10sMyxYKSkpcmV0dXJuIG51bGx9cmV0dXJuIG5ldyByKG4saSxhKX0sci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5jb2xsYXRvcj8wPT09dGhpcy5jb2xsYXRvci5ldmFsdWF0ZSh0KS5jb21wYXJlKHRoaXMubGhzLmV2YWx1YXRlKHQpLHRoaXMucmhzLmV2YWx1YXRlKHQpKTp0aGlzLmxocy5ldmFsdWF0ZSh0KT09PXRoaXMucmhzLmV2YWx1YXRlKHQpO3JldHVybiBlPyFyOnJ9LHIucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMubGhzKSx0KHRoaXMucmhzKSx0aGlzLmNvbGxhdG9yJiZ0KHRoaXMuY29sbGF0b3IpfSxyLnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm5bITAsITFdfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgZT1bdF07cmV0dXJuIHRoaXMuZWFjaENoaWxkKGZ1bmN0aW9uKHQpe2UucHVzaCh0LnNlcmlhbGl6ZSgpKX0pLGV9LHJ9KCl9THQucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDw0KXJldHVybiBlLmVycm9yKFwiRXhwZWN0ZWQgYXQgbGVhc3QgMyBhcmd1bWVudHMsIGJ1dCBmb3VuZCBvbmx5IFwiKyh0Lmxlbmd0aC0xKStcIi5cIik7aWYodC5sZW5ndGglMiE9MClyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIGFuIG9kZCBudW1iZXIgb2YgYXJndW1lbnRzLlwiKTt2YXIgcjtlLmV4cGVjdGVkVHlwZSYmXCJ2YWx1ZVwiIT09ZS5leHBlY3RlZFR5cGUua2luZCYmKHI9ZS5leHBlY3RlZFR5cGUpO2Zvcih2YXIgbj1bXSxpPTE7aTx0Lmxlbmd0aC0xO2krPTIpe3ZhciBhPWUucGFyc2UodFtpXSxpLEgpO2lmKCFhKXJldHVybiBudWxsO3ZhciBvPWUucGFyc2UodFtpKzFdLGkrMSxyKTtpZighbylyZXR1cm4gbnVsbDtuLnB1c2goW2Esb10pLHI9cnx8by50eXBlfXZhciBzPWUucGFyc2UodFt0Lmxlbmd0aC0xXSx0Lmxlbmd0aC0xLHIpO3JldHVybiBzP25ldyBMdChyLG4scyk6bnVsbH0sTHQucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dGhpcy5icmFuY2hlcztlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0saT1uWzBdLGE9blsxXTtpZihpLmV2YWx1YXRlKHQpKXJldHVybiBhLmV2YWx1YXRlKHQpfXJldHVybiB0aGlzLm90aGVyd2lzZS5ldmFsdWF0ZSh0KX0sTHQucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRoaXMuYnJhbmNoZXM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9blswXSxhPW5bMV07dChpKSx0KGEpfXQodGhpcy5vdGhlcndpc2UpfSxMdC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuKHQ9W10pLmNvbmNhdC5hcHBseSh0LHRoaXMuYnJhbmNoZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLHRbMV0ucG9zc2libGVPdXRwdXRzKCl9KSkuY29uY2F0KHRoaXMub3RoZXJ3aXNlLnBvc3NpYmxlT3V0cHV0cygpKTt2YXIgdH0sTHQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PVtcImNhc2VcIl07cmV0dXJuIHRoaXMuZWFjaENoaWxkKGZ1bmN0aW9uKGUpe3QucHVzaChlLnNlcmlhbGl6ZSgpKX0pLHR9O3ZhciBJdD1PdChcIj09XCIsITEpLER0PU90KFwiIT1cIiwhMCksUHQ9ZnVuY3Rpb24odCl7dGhpcy50eXBlPVUsdGhpcy5pbnB1dD10fTtQdC5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDIhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIDEgYXJndW1lbnQsIGJ1dCBmb3VuZCBcIisodC5sZW5ndGgtMSkrXCIgaW5zdGVhZC5cIik7dmFyIHI9ZS5wYXJzZSh0WzFdLDEpO3JldHVybiByP1wiYXJyYXlcIiE9PXIudHlwZS5raW5kJiZcInN0cmluZ1wiIT09ci50eXBlLmtpbmQmJlwidmFsdWVcIiE9PXIudHlwZS5raW5kP2UuZXJyb3IoXCJFeHBlY3RlZCBhcmd1bWVudCBvZiB0eXBlIHN0cmluZyBvciBhcnJheSwgYnV0IGZvdW5kIFwiKyQoci50eXBlKStcIiBpbnN0ZWFkLlwiKTpuZXcgUHQocik6bnVsbH0sUHQucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5wdXQuZXZhbHVhdGUodCk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIGUubGVuZ3RoO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGUubGVuZ3RoO3Rocm93IG5ldyBvdChcIkV4cGVjdGVkIHZhbHVlIHRvIGJlIG9mIHR5cGUgc3RyaW5nIG9yIGFycmF5LCBidXQgZm91bmQgXCIrJChpdChlKSkrXCIgaW5zdGVhZC5cIil9LFB0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmlucHV0KX0sUHQucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVyblt2b2lkIDBdfSxQdC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9W1wibGVuZ3RoXCJdO3JldHVybiB0aGlzLmVhY2hDaGlsZChmdW5jdGlvbihlKXt0LnB1c2goZS5zZXJpYWxpemUoKSl9KSx0fTt2YXIgUnQ9e1wiPT1cIjpJdCxcIiE9XCI6RHQsYXJyYXk6dXQsYXQ6RXQsYm9vbGVhbjpsdCxjYXNlOkx0LGNvYWxlc2NlOk10LGNvbGxhdG9yOnJ0LGludGVycG9sYXRlOkF0LGxlbmd0aDpQdCxsZXQ6U3QsbGl0ZXJhbDphdCxtYXRjaDpDdCxudW1iZXI6bHQsb2JqZWN0Omx0LHN0ZXA6X3Qsc3RyaW5nOmx0LFwidG8tY29sb3JcIjpmdCxcInRvLW51bWJlclwiOmZ0LHZhcjp5dH07ZnVuY3Rpb24gRnQodCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdO3I9ci5ldmFsdWF0ZSh0KSxuPW4uZXZhbHVhdGUodCksaT1pLmV2YWx1YXRlKHQpO3ZhciBvPWE/YS5ldmFsdWF0ZSh0KToxLHM9bnQocixuLGksbyk7aWYocyl0aHJvdyBuZXcgb3Qocyk7cmV0dXJuIG5ldyB0dChyLzI1NSpvLG4vMjU1Km8saS8yNTUqbyxvKX1mdW5jdGlvbiBCdCh0LGUpe3JldHVybiB0IGluIGV9ZnVuY3Rpb24gTnQodCxlKXt2YXIgcj1lW3RdO3JldHVybiB2b2lkIDA9PT1yP251bGw6cn1mdW5jdGlvbiBqdCh0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiByLmV2YWx1YXRlKHQpPG4uZXZhbHVhdGUodCl9ZnVuY3Rpb24gVnQodCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KT5uLmV2YWx1YXRlKHQpfWZ1bmN0aW9uIFV0KHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCk8PW4uZXZhbHVhdGUodCl9ZnVuY3Rpb24gcXQodCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KT49bi5ldmFsdWF0ZSh0KX1mdW5jdGlvbiBIdCh0KXtyZXR1cm57dHlwZTp0fX1mdW5jdGlvbiBHdCh0KXtyZXR1cm57cmVzdWx0Olwic3VjY2Vzc1wiLHZhbHVlOnR9fWZ1bmN0aW9uIFl0KHQpe3JldHVybntyZXN1bHQ6XCJlcnJvclwiLHZhbHVlOnR9fWd0LnJlZ2lzdGVyKFJ0LHtlcnJvcjpbe2tpbmQ6XCJlcnJvclwifSxbcV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3Rocm93IG5ldyBvdChyLmV2YWx1YXRlKHQpKX1dLHR5cGVvZjpbcSxbV10sZnVuY3Rpb24odCxlKXtyZXR1cm4gJChpdChlWzBdLmV2YWx1YXRlKHQpKSl9XSxcInRvLXN0cmluZ1wiOltxLFtXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj10eXBlb2Yocj1yLmV2YWx1YXRlKHQpKTtyZXR1cm4gbnVsbD09PXI/XCJcIjpcInN0cmluZ1wiPT09bnx8XCJudW1iZXJcIj09PW58fFwiYm9vbGVhblwiPT09bj9TdHJpbmcocik6ciBpbnN0YW5jZW9mIHR0P3IudG9TdHJpbmcoKTpKU09OLnN0cmluZ2lmeShyKX1dLFwidG8tYm9vbGVhblwiOltILFtXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIEJvb2xlYW4oci5ldmFsdWF0ZSh0KSl9XSxcInRvLXJnYmFcIjpbWihVLDQpLFtHXSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLmV2YWx1YXRlKHQpLnRvQXJyYXkoKX1dLHJnYjpbRyxbVSxVLFVdLEZ0XSxyZ2JhOltHLFtVLFUsVSxVXSxGdF0saGFzOnt0eXBlOkgsb3ZlcmxvYWRzOltbW3FdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEJ0KGVbMF0uZXZhbHVhdGUodCksdC5wcm9wZXJ0aWVzKCkpfV0sW1txLFldLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIEJ0KHIuZXZhbHVhdGUodCksbi5ldmFsdWF0ZSh0KSl9XV19LGdldDp7dHlwZTpXLG92ZXJsb2FkczpbW1txXSxmdW5jdGlvbih0LGUpe3JldHVybiBOdChlWzBdLmV2YWx1YXRlKHQpLHQucHJvcGVydGllcygpKX1dLFtbcSxZXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiBOdChyLmV2YWx1YXRlKHQpLG4uZXZhbHVhdGUodCkpfV1dfSxwcm9wZXJ0aWVzOltZLFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0LnByb3BlcnRpZXMoKX1dLFwiZ2VvbWV0cnktdHlwZVwiOltxLFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdlb21ldHJ5VHlwZSgpfV0saWQ6W1csW10sZnVuY3Rpb24odCl7cmV0dXJuIHQuaWQoKX1dLHpvb206W1UsW10sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2xvYmFscy56b29tfV0sXCJoZWF0bWFwLWRlbnNpdHlcIjpbVSxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nbG9iYWxzLmhlYXRtYXBEZW5zaXR5fHwwfV0sXCJsaW5lLXByb2dyZXNzXCI6W1UsW10sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2xvYmFscy5saW5lUHJvZ3Jlc3N8fDB9XSxcIitcIjpbVSxIdChVKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXIrPWlbbl0uZXZhbHVhdGUodCk7cmV0dXJuIHJ9XSxcIipcIjpbVSxIdChVKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xLG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXIqPWlbbl0uZXZhbHVhdGUodCk7cmV0dXJuIHJ9XSxcIi1cIjp7dHlwZTpVLG92ZXJsb2FkczpbW1tVLFVdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCktbi5ldmFsdWF0ZSh0KX1dLFtbVV0sZnVuY3Rpb24odCxlKXtyZXR1cm4tZVswXS5ldmFsdWF0ZSh0KX1dXX0sXCIvXCI6W1UsW1UsVV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KS9uLmV2YWx1YXRlKHQpfV0sXCIlXCI6W1UsW1UsVV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KSVuLmV2YWx1YXRlKHQpfV0sbG4yOltVLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguTE4yfV0scGk6W1UsW10sZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5QSX1dLGU6W1UsW10sZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5FfV0sXCJeXCI6W1UsW1UsVV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gTWF0aC5wb3coci5ldmFsdWF0ZSh0KSxuLmV2YWx1YXRlKHQpKX1dLHNxcnQ6W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5zcXJ0KHIuZXZhbHVhdGUodCkpfV0sbG9nMTA6W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5sb2cxMChyLmV2YWx1YXRlKHQpKX1dLGxuOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGgubG9nKHIuZXZhbHVhdGUodCkpfV0sbG9nMjpbVSxbVV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmxvZzIoci5ldmFsdWF0ZSh0KSl9XSxzaW46W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5zaW4oci5ldmFsdWF0ZSh0KSl9XSxjb3M6W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5jb3Moci5ldmFsdWF0ZSh0KSl9XSx0YW46W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC50YW4oci5ldmFsdWF0ZSh0KSl9XSxhc2luOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguYXNpbihyLmV2YWx1YXRlKHQpKX1dLGFjb3M6W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5hY29zKHIuZXZhbHVhdGUodCkpfV0sYXRhbjpbVSxbVV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmF0YW4oci5ldmFsdWF0ZSh0KSl9XSxtaW46W1UsSHQoVSksZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5taW4uYXBwbHkoTWF0aCxlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5ldmFsdWF0ZSh0KX0pKX1dLG1heDpbVSxIdChVKSxmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heC5hcHBseShNYXRoLGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmV2YWx1YXRlKHQpfSkpfV0sYWJzOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguYWJzKHIuZXZhbHVhdGUodCkpfV0scm91bmQ6W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS5ldmFsdWF0ZSh0KTtyZXR1cm4gcjwwPy1NYXRoLnJvdW5kKC1yKTpNYXRoLnJvdW5kKHIpfV0sZmxvb3I6W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5mbG9vcihyLmV2YWx1YXRlKHQpKX1dLGNlaWw6W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5jZWlsKHIuZXZhbHVhdGUodCkpfV0sXCJmaWx0ZXItPT1cIjpbSCxbcSxXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiB0LnByb3BlcnRpZXMoKVtyLnZhbHVlXT09PW4udmFsdWV9XSxcImZpbHRlci1pZC09PVwiOltILFtXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIHQuaWQoKT09PXIudmFsdWV9XSxcImZpbHRlci10eXBlLT09XCI6W0gsW3FdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gdC5nZW9tZXRyeVR5cGUoKT09PXIudmFsdWV9XSxcImZpbHRlci08XCI6W0gsW3EsV10sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPXQucHJvcGVydGllcygpW3IudmFsdWVdLGE9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIGk9PXR5cGVvZiBhJiZpPGF9XSxcImZpbHRlci1pZC08XCI6W0gsW1ddLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPXQuaWQoKSxpPXIudmFsdWU7cmV0dXJuIHR5cGVvZiBuPT10eXBlb2YgaSYmbjxpfV0sXCJmaWx0ZXItPlwiOltILFtxLFddLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT10LnByb3BlcnRpZXMoKVtyLnZhbHVlXSxhPW4udmFsdWU7cmV0dXJuIHR5cGVvZiBpPT10eXBlb2YgYSYmaT5hfV0sXCJmaWx0ZXItaWQtPlwiOltILFtXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj10LmlkKCksaT1yLnZhbHVlO3JldHVybiB0eXBlb2Ygbj09dHlwZW9mIGkmJm4+aX1dLFwiZmlsdGVyLTw9XCI6W0gsW3EsV10sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPXQucHJvcGVydGllcygpW3IudmFsdWVdLGE9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIGk9PXR5cGVvZiBhJiZpPD1hfV0sXCJmaWx0ZXItaWQtPD1cIjpbSCxbV10sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49dC5pZCgpLGk9ci52YWx1ZTtyZXR1cm4gdHlwZW9mIG49PXR5cGVvZiBpJiZuPD1pfV0sXCJmaWx0ZXItPj1cIjpbSCxbcSxXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9dC5wcm9wZXJ0aWVzKClbci52YWx1ZV0sYT1uLnZhbHVlO3JldHVybiB0eXBlb2YgaT09dHlwZW9mIGEmJmk+PWF9XSxcImZpbHRlci1pZC0+PVwiOltILFtXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj10LmlkKCksaT1yLnZhbHVlO3JldHVybiB0eXBlb2Ygbj09dHlwZW9mIGkmJm4+PWl9XSxcImZpbHRlci1oYXNcIjpbSCxbV10sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS52YWx1ZSBpbiB0LnByb3BlcnRpZXMoKX1dLFwiZmlsdGVyLWhhcy1pZFwiOltILFtdLGZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT09dC5pZCgpfV0sXCJmaWx0ZXItdHlwZS1pblwiOltILFtaKHEpXSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLnZhbHVlLmluZGV4T2YodC5nZW9tZXRyeVR5cGUoKSk+PTB9XSxcImZpbHRlci1pZC1pblwiOltILFtaKFcpXSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLnZhbHVlLmluZGV4T2YodC5pZCgpKT49MH1dLFwiZmlsdGVyLWluLXNtYWxsXCI6W0gsW3EsWihXKV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBlWzFdLnZhbHVlLmluZGV4T2YodC5wcm9wZXJ0aWVzKClbci52YWx1ZV0pPj0wfV0sXCJmaWx0ZXItaW4tbGFyZ2VcIjpbSCxbcSxaKFcpXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiBmdW5jdGlvbih0LGUscixuKXtmb3IoO3I8PW47KXt2YXIgaT1yK24+PjE7aWYoZVtpXT09PXQpcmV0dXJuITA7ZVtpXT50P249aS0xOnI9aSsxfXJldHVybiExfSh0LnByb3BlcnRpZXMoKVtyLnZhbHVlXSxuLnZhbHVlLDAsbi52YWx1ZS5sZW5ndGgtMSl9XSxcIj5cIjp7dHlwZTpILG92ZXJsb2FkczpbW1tVLFVdLFZ0XSxbW3EscV0sVnRdLFtbcSxxLFhdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIGVbMl0uZXZhbHVhdGUodCkuY29tcGFyZShyLmV2YWx1YXRlKHQpLG4uZXZhbHVhdGUodCkpPjB9XV19LFwiPFwiOnt0eXBlOkgsb3ZlcmxvYWRzOltbW1UsVV0sanRdLFtbcSxxXSxqdF0sW1txLHEsWF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gZVsyXS5ldmFsdWF0ZSh0KS5jb21wYXJlKHIuZXZhbHVhdGUodCksbi5ldmFsdWF0ZSh0KSk8MH1dXX0sXCI+PVwiOnt0eXBlOkgsb3ZlcmxvYWRzOltbW1UsVV0scXRdLFtbcSxxXSxxdF0sW1txLHEsWF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gZVsyXS5ldmFsdWF0ZSh0KS5jb21wYXJlKHIuZXZhbHVhdGUodCksbi5ldmFsdWF0ZSh0KSk+PTB9XV19LFwiPD1cIjp7dHlwZTpILG92ZXJsb2FkczpbW1tVLFVdLFV0XSxbW3EscV0sVXRdLFtbcSxxLFhdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIGVbMl0uZXZhbHVhdGUodCkuY29tcGFyZShyLmV2YWx1YXRlKHQpLG4uZXZhbHVhdGUodCkpPD0wfV1dfSxhbGw6e3R5cGU6SCxvdmVybG9hZHM6W1tbSCxIXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiByLmV2YWx1YXRlKHQpJiZuLmV2YWx1YXRlKHQpfV0sW0h0KEgpLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj1lO3I8bi5sZW5ndGg7cis9MSlpZighbltyXS5ldmFsdWF0ZSh0KSlyZXR1cm4hMTtyZXR1cm4hMH1dXX0sYW55Ont0eXBlOkgsb3ZlcmxvYWRzOltbW0gsSF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KXx8bi5ldmFsdWF0ZSh0KX1dLFtIdChIKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49ZTtyPG4ubGVuZ3RoO3IrPTEpaWYobltyXS5ldmFsdWF0ZSh0KSlyZXR1cm4hMDtyZXR1cm4hMX1dXX0sXCIhXCI6W0gsW0hdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIWVbMF0uZXZhbHVhdGUodCl9XSxcImlzLXN1cHBvcnRlZC1zY3JpcHRcIjpbSCxbcV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49dC5nbG9iYWxzJiZ0Lmdsb2JhbHMuaXNTdXBwb3J0ZWRTY3JpcHQ7cmV0dXJuIW58fG4oci5ldmFsdWF0ZSh0KSl9XSx1cGNhc2U6W3EsW3FdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0uZXZhbHVhdGUodCkudG9VcHBlckNhc2UoKX1dLGRvd25jYXNlOltxLFtxXSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLmV2YWx1YXRlKHQpLnRvTG93ZXJDYXNlKCl9XSxjb25jYXQ6W3EsSHQocSksZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXZhbHVhdGUodCl9KS5qb2luKFwiXCIpfV0sXCJyZXNvbHZlZC1sb2NhbGVcIjpbcSxbWF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS5ldmFsdWF0ZSh0KS5yZXNvbHZlZExvY2FsZSgpfV19KTt2YXIgV3Q9Ljk1MDQ3LFh0PTEsWnQ9MS4wODg4MywkdD00LzI5LEp0PTYvMjksS3Q9MypKdCpKdCxRdD1KdCpKdCpKdCx0ZT1NYXRoLlBJLzE4MCxlZT0xODAvTWF0aC5QSTtmdW5jdGlvbiByZSh0KXtyZXR1cm4gdD5RdD9NYXRoLnBvdyh0LDEvMyk6dC9LdCskdH1mdW5jdGlvbiBuZSh0KXtyZXR1cm4gdD5KdD90KnQqdDpLdCoodC0kdCl9ZnVuY3Rpb24gaWUodCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiBhZSh0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBvZSh0KXt2YXIgZT1hZSh0LnIpLHI9YWUodC5nKSxuPWFlKHQuYiksaT1yZSgoLjQxMjQ1NjQqZSsuMzU3NTc2MSpyKy4xODA0Mzc1Km4pL1d0KSxhPXJlKCguMjEyNjcyOSplKy43MTUxNTIyKnIrLjA3MjE3NSpuKS9YdCk7cmV0dXJue2w6MTE2KmEtMTYsYTo1MDAqKGktYSksYjoyMDAqKGEtcmUoKC4wMTkzMzM5KmUrLjExOTE5MipyKy45NTAzMDQxKm4pL1p0KSksYWxwaGE6dC5hfX1mdW5jdGlvbiBzZSh0KXt2YXIgZT0odC5sKzE2KS8xMTYscj1pc05hTih0LmEpP2U6ZSt0LmEvNTAwLG49aXNOYU4odC5iKT9lOmUtdC5iLzIwMDtyZXR1cm4gZT1YdCpuZShlKSxyPVd0Km5lKHIpLG49WnQqbmUobiksbmV3IHR0KGllKDMuMjQwNDU0MipyLTEuNTM3MTM4NSplLS40OTg1MzE0Km4pLGllKC0uOTY5MjY2KnIrMS44NzYwMTA4KmUrLjA0MTU1NipuKSxpZSguMDU1NjQzNCpyLS4yMDQwMjU5KmUrMS4wNTcyMjUyKm4pLHQuYWxwaGEpfXZhciBsZT17Zm9yd2FyZDpvZSxyZXZlcnNlOnNlLGludGVycG9sYXRlOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm57bDp3dCh0LmwsZS5sLHIpLGE6d3QodC5hLGUuYSxyKSxiOnd0KHQuYixlLmIsciksYWxwaGE6d3QodC5hbHBoYSxlLmFscGhhLHIpfX19LGNlPXtmb3J3YXJkOmZ1bmN0aW9uKHQpe3ZhciBlPW9lKHQpLHI9ZS5sLG49ZS5hLGk9ZS5iLGE9TWF0aC5hdGFuMihpLG4pKmVlO3JldHVybntoOmE8MD9hKzM2MDphLGM6TWF0aC5zcXJ0KG4qbitpKmkpLGw6cixhbHBoYTp0LmF9fSxyZXZlcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuaCp0ZSxyPXQuYztyZXR1cm4gc2Uoe2w6dC5sLGE6TWF0aC5jb3MoZSkqcixiOk1hdGguc2luKGUpKnIsYWxwaGE6dC5hbHBoYX0pfSxpbnRlcnBvbGF0ZTpmdW5jdGlvbih0LGUscil7cmV0dXJue2g6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUtdDtyZXR1cm4gdCtyKihuPjE4MHx8bjwtMTgwP24tMzYwKk1hdGgucm91bmQobi8zNjApOm4pfSh0LmgsZS5oLHIpLGM6d3QodC5jLGUuYyxyKSxsOnd0KHQubCxlLmwsciksYWxwaGE6d3QodC5hbHBoYSxlLmFscGhhLHIpfX19LHVlPU9iamVjdC5mcmVlemUoe2xhYjpsZSxoY2w6Y2V9KTtmdW5jdGlvbiBoZSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE51bWJlcj9cIm51bWJlclwiOnQgaW5zdGFuY2VvZiBTdHJpbmc/XCJzdHJpbmdcIjp0IGluc3RhbmNlb2YgQm9vbGVhbj9cImJvb2xlYW5cIjpBcnJheS5pc0FycmF5KHQpP1wiYXJyYXlcIjpudWxsPT09dD9cIm51bGxcIjp0eXBlb2YgdH1mdW5jdGlvbiBmZSh0KXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgdCYmbnVsbCE9PXQmJiFBcnJheS5pc0FycmF5KHQpfWZ1bmN0aW9uIHBlKHQpe3JldHVybiB0fWZ1bmN0aW9uIGRlKHQsZSxyKXtyZXR1cm4gdm9pZCAwIT09dD90OnZvaWQgMCE9PWU/ZTp2b2lkIDAhPT1yP3I6dm9pZCAwfWZ1bmN0aW9uIGdlKHQsZSxyLG4saSl7cmV0dXJuIGRlKHR5cGVvZiByPT09aT9uW3JdOnZvaWQgMCx0LmRlZmF1bHQsZS5kZWZhdWx0KX1mdW5jdGlvbiB2ZSh0LGUscil7aWYoXCJudW1iZXJcIiE9PWhlKHIpKXJldHVybiBkZSh0LmRlZmF1bHQsZS5kZWZhdWx0KTt2YXIgbj10LnN0b3BzLmxlbmd0aDtpZigxPT09bilyZXR1cm4gdC5zdG9wc1swXVsxXTtpZihyPD10LnN0b3BzWzBdWzBdKXJldHVybiB0LnN0b3BzWzBdWzFdO2lmKHI+PXQuc3RvcHNbbi0xXVswXSlyZXR1cm4gdC5zdG9wc1tuLTFdWzFdO3ZhciBpPXhlKHQuc3RvcHMscik7cmV0dXJuIHQuc3RvcHNbaV1bMV19ZnVuY3Rpb24gbWUodCxlLHIpe3ZhciBuPXZvaWQgMCE9PXQuYmFzZT90LmJhc2U6MTtpZihcIm51bWJlclwiIT09aGUocikpcmV0dXJuIGRlKHQuZGVmYXVsdCxlLmRlZmF1bHQpO3ZhciBpPXQuc3RvcHMubGVuZ3RoO2lmKDE9PT1pKXJldHVybiB0LnN0b3BzWzBdWzFdO2lmKHI8PXQuc3RvcHNbMF1bMF0pcmV0dXJuIHQuc3RvcHNbMF1bMV07aWYocj49dC5zdG9wc1tpLTFdWzBdKXJldHVybiB0LnN0b3BzW2ktMV1bMV07dmFyIGE9eGUodC5zdG9wcyxyKSxvPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4tcixhPXQtcjtyZXR1cm4gMD09PWk/MDoxPT09ZT9hL2k6KE1hdGgucG93KGUsYSktMSkvKE1hdGgucG93KGUsaSktMSl9KHIsbix0LnN0b3BzW2FdWzBdLHQuc3RvcHNbYSsxXVswXSkscz10LnN0b3BzW2FdWzFdLGw9dC5zdG9wc1thKzFdWzFdLGM9a3RbZS50eXBlXXx8cGU7aWYodC5jb2xvclNwYWNlJiZcInJnYlwiIT09dC5jb2xvclNwYWNlKXt2YXIgdT11ZVt0LmNvbG9yU3BhY2VdO2M9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdS5yZXZlcnNlKHUuaW50ZXJwb2xhdGUodS5mb3J3YXJkKHQpLHUuZm9yd2FyZChlKSxvKSl9fXJldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHMuZXZhbHVhdGU/e2V2YWx1YXRlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9YXJndW1lbnRzLmxlbmd0aDtlLS07KXRbZV09YXJndW1lbnRzW2VdO3ZhciByPXMuZXZhbHVhdGUuYXBwbHkodm9pZCAwLHQpLG49bC5ldmFsdWF0ZS5hcHBseSh2b2lkIDAsdCk7aWYodm9pZCAwIT09ciYmdm9pZCAwIT09bilyZXR1cm4gYyhyLG4sbyl9fTpjKHMsbCxvKX1mdW5jdGlvbiB5ZSh0LGUscil7cmV0dXJuXCJjb2xvclwiPT09ZS50eXBlP3I9dHQucGFyc2Uocik6aGUocik9PT1lLnR5cGV8fFwiZW51bVwiPT09ZS50eXBlJiZlLnZhbHVlc1tyXXx8KHI9dm9pZCAwKSxkZShyLHQuZGVmYXVsdCxlLmRlZmF1bHQpfWZ1bmN0aW9uIHhlKHQsZSl7Zm9yKHZhciByLG4saT0wLGE9dC5sZW5ndGgtMSxvPTA7aTw9YTspe2lmKHI9dFtvPU1hdGguZmxvb3IoKGkrYSkvMildWzBdLG49dFtvKzFdWzBdLGU9PT1yfHxlPnImJmU8bilyZXR1cm4gbztyPGU/aT1vKzE6cj5lJiYoYT1vLTEpfXJldHVybiBNYXRoLm1heChvLTEsMCl9dmFyIGJlPWZ1bmN0aW9uKHQsZSl7dmFyIHI7dGhpcy5leHByZXNzaW9uPXQsdGhpcy5fd2FybmluZ0hpc3Rvcnk9e30sdGhpcy5fZGVmYXVsdFZhbHVlPVwiY29sb3JcIj09PShyPWUpLnR5cGUmJmZlKHIuZGVmYXVsdCk/bmV3IHR0KDAsMCwwLDApOlwiY29sb3JcIj09PXIudHlwZT90dC5wYXJzZShyLmRlZmF1bHQpfHxudWxsOnZvaWQgMD09PXIuZGVmYXVsdD9udWxsOnIuZGVmYXVsdCxcImVudW1cIj09PWUudHlwZSYmKHRoaXMuX2VudW1WYWx1ZXM9ZS52YWx1ZXMpfTtmdW5jdGlvbiBfZSh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGg+MCYmXCJzdHJpbmdcIj09dHlwZW9mIHRbMF0mJnRbMF1pbiBSdH1mdW5jdGlvbiB3ZSh0LGUpe3ZhciByPW5ldyB4dChSdCxbXSxmdW5jdGlvbih0KXt2YXIgZT17Y29sb3I6RyxzdHJpbmc6cSxudW1iZXI6VSxlbnVtOnEsYm9vbGVhbjpIfTtyZXR1cm5cImFycmF5XCI9PT10LnR5cGU/WihlW3QudmFsdWVdfHxXLHQubGVuZ3RoKTplW3QudHlwZV18fG51bGx9KGUpKSxuPXIucGFyc2UodCk7cmV0dXJuIG4/R3QobmV3IGJlKG4sZSkpOll0KHIuZXJyb3JzKX1iZS5wcm90b3R5cGUuZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9ldmFsdWF0b3J8fCh0aGlzLl9ldmFsdWF0b3I9bmV3IGR0KSx0aGlzLl9ldmFsdWF0b3IuZ2xvYmFscz10LHRoaXMuX2V2YWx1YXRvci5mZWF0dXJlPWUsdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHRoaXMuX2V2YWx1YXRvcil9LGJlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0LGUpe3RoaXMuX2V2YWx1YXRvcnx8KHRoaXMuX2V2YWx1YXRvcj1uZXcgZHQpLHRoaXMuX2V2YWx1YXRvci5nbG9iYWxzPXQsdGhpcy5fZXZhbHVhdG9yLmZlYXR1cmU9ZTt0cnl7dmFyIHI9dGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHRoaXMuX2V2YWx1YXRvcik7aWYobnVsbD09cilyZXR1cm4gdGhpcy5fZGVmYXVsdFZhbHVlO2lmKHRoaXMuX2VudW1WYWx1ZXMmJiEociBpbiB0aGlzLl9lbnVtVmFsdWVzKSl0aHJvdyBuZXcgb3QoXCJFeHBlY3RlZCB2YWx1ZSB0byBiZSBvbmUgb2YgXCIrT2JqZWN0LmtleXModGhpcy5fZW51bVZhbHVlcykubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0KX0pLmpvaW4oXCIsIFwiKStcIiwgYnV0IGZvdW5kIFwiK0pTT04uc3RyaW5naWZ5KHIpK1wiIGluc3RlYWQuXCIpO3JldHVybiByfWNhdGNoKHQpe3JldHVybiB0aGlzLl93YXJuaW5nSGlzdG9yeVt0Lm1lc3NhZ2VdfHwodGhpcy5fd2FybmluZ0hpc3RvcnlbdC5tZXNzYWdlXT0hMCxcInVuZGVmaW5lZFwiIT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuKHQubWVzc2FnZSkpLHRoaXMuX2RlZmF1bHRWYWx1ZX19O3ZhciBrZT1mdW5jdGlvbih0LGUpe3RoaXMua2luZD10LHRoaXMuX3N0eWxlRXhwcmVzc2lvbj1lfTtrZS5wcm90b3R5cGUuZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9zdHlsZUV4cHJlc3Npb24uZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZyh0LGUpfSxrZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlKHQsZSl9O3ZhciBBZT1mdW5jdGlvbih0LGUscil7dGhpcy5raW5kPXQsdGhpcy56b29tU3RvcHM9ci5sYWJlbHMsdGhpcy5fc3R5bGVFeHByZXNzaW9uPWUsciBpbnN0YW5jZW9mIEF0JiYodGhpcy5faW50ZXJwb2xhdGlvblR5cGU9ci5pbnRlcnBvbGF0aW9uKX07ZnVuY3Rpb24gVGUodCxlKXtpZihcImVycm9yXCI9PT0odD13ZSh0LGUpKS5yZXN1bHQpcmV0dXJuIHQ7dmFyIHI9dC52YWx1ZS5leHByZXNzaW9uLG49dnQocik7aWYoIW4mJiFlW1wicHJvcGVydHktZnVuY3Rpb25cIl0pcmV0dXJuIFl0KFtuZXcgTihcIlwiLFwicHJvcGVydHkgZXhwcmVzc2lvbnMgbm90IHN1cHBvcnRlZFwiKV0pO3ZhciBpPW10KHIsW1wiem9vbVwiXSk7aWYoIWkmJiExPT09ZVtcInpvb20tZnVuY3Rpb25cIl0pcmV0dXJuIFl0KFtuZXcgTihcIlwiLFwiem9vbSBleHByZXNzaW9ucyBub3Qgc3VwcG9ydGVkXCIpXSk7dmFyIGE9ZnVuY3Rpb24gdChlKXt2YXIgcj1udWxsO2lmKGUgaW5zdGFuY2VvZiBTdClyPXQoZS5yZXN1bHQpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIE10KWZvcih2YXIgbj0wLGk9ZS5hcmdzO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtpZihyPXQoYSkpYnJlYWt9ZWxzZShlIGluc3RhbmNlb2YgX3R8fGUgaW5zdGFuY2VvZiBBdCkmJmUuaW5wdXQgaW5zdGFuY2VvZiBndCYmXCJ6b29tXCI9PT1lLmlucHV0Lm5hbWUmJihyPWUpO3JldHVybiByIGluc3RhbmNlb2YgTj9yOihlLmVhY2hDaGlsZChmdW5jdGlvbihlKXt2YXIgbj10KGUpO24gaW5zdGFuY2VvZiBOP3I9bjohciYmbj9yPW5ldyBOKFwiXCIsJ1wiem9vbVwiIGV4cHJlc3Npb24gbWF5IG9ubHkgYmUgdXNlZCBhcyBpbnB1dCB0byBhIHRvcC1sZXZlbCBcInN0ZXBcIiBvciBcImludGVycG9sYXRlXCIgZXhwcmVzc2lvbi4nKTpyJiZuJiZyIT09biYmKHI9bmV3IE4oXCJcIiwnT25seSBvbmUgem9vbS1iYXNlZCBcInN0ZXBcIiBvciBcImludGVycG9sYXRlXCIgc3ViZXhwcmVzc2lvbiBtYXkgYmUgdXNlZCBpbiBhbiBleHByZXNzaW9uLicpKX0pLHIpfShyKTtyZXR1cm4gYXx8aT9hIGluc3RhbmNlb2YgTj9ZdChbYV0pOmEgaW5zdGFuY2VvZiBBdCYmXCJwaWVjZXdpc2UtY29uc3RhbnRcIj09PWUuZnVuY3Rpb24/WXQoW25ldyBOKFwiXCIsJ1wiaW50ZXJwb2xhdGVcIiBleHByZXNzaW9ucyBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoaXMgcHJvcGVydHknKV0pOkd0KGE/bmV3IEFlKG4/XCJjYW1lcmFcIjpcImNvbXBvc2l0ZVwiLHQudmFsdWUsYSk6bmV3IGtlKG4/XCJjb25zdGFudFwiOlwic291cmNlXCIsdC52YWx1ZSkpOll0KFtuZXcgTihcIlwiLCdcInpvb21cIiBleHByZXNzaW9uIG1heSBvbmx5IGJlIHVzZWQgYXMgaW5wdXQgdG8gYSB0b3AtbGV2ZWwgXCJzdGVwXCIgb3IgXCJpbnRlcnBvbGF0ZVwiIGV4cHJlc3Npb24uJyldKX1BZS5wcm90b3R5cGUuZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9zdHlsZUV4cHJlc3Npb24uZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZyh0LGUpfSxBZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlKHQsZSl9LEFlLnByb3RvdHlwZS5pbnRlcnBvbGF0aW9uRmFjdG9yPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5faW50ZXJwb2xhdGlvblR5cGU/QXQuaW50ZXJwb2xhdGlvbkZhY3Rvcih0aGlzLl9pbnRlcnBvbGF0aW9uVHlwZSx0LGUscik6MH07dmFyIE1lPWZ1bmN0aW9uKHQsZSl7dGhpcy5fcGFyYW1ldGVycz10LHRoaXMuX3NwZWNpZmljYXRpb249ZSxSKHRoaXMsZnVuY3Rpb24gdChlLHIpe3ZhciBuLGksYSxvPVwiY29sb3JcIj09PXIudHlwZSxzPWUuc3RvcHMmJlwib2JqZWN0XCI9PXR5cGVvZiBlLnN0b3BzWzBdWzBdLGw9c3x8dm9pZCAwIT09ZS5wcm9wZXJ0eSxjPXN8fCFsLHU9ZS50eXBlfHwoXCJpbnRlcnBvbGF0ZWRcIj09PXIuZnVuY3Rpb24/XCJleHBvbmVudGlhbFwiOlwiaW50ZXJ2YWxcIik7aWYobyYmKChlPVIoe30sZSkpLnN0b3BzJiYoZS5zdG9wcz1lLnN0b3BzLm1hcChmdW5jdGlvbih0KXtyZXR1cm5bdFswXSx0dC5wYXJzZSh0WzFdKV19KSksZS5kZWZhdWx0P2UuZGVmYXVsdD10dC5wYXJzZShlLmRlZmF1bHQpOmUuZGVmYXVsdD10dC5wYXJzZShyLmRlZmF1bHQpKSxlLmNvbG9yU3BhY2UmJlwicmdiXCIhPT1lLmNvbG9yU3BhY2UmJiF1ZVtlLmNvbG9yU3BhY2VdKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gY29sb3Igc3BhY2U6IFwiK2UuY29sb3JTcGFjZSk7aWYoXCJleHBvbmVudGlhbFwiPT09dSluPW1lO2Vsc2UgaWYoXCJpbnRlcnZhbFwiPT09dSluPXZlO2Vsc2UgaWYoXCJjYXRlZ29yaWNhbFwiPT09dSl7bj1nZSxpPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKHZhciBoPTAsZj1lLnN0b3BzO2g8Zi5sZW5ndGg7aCs9MSl7dmFyIHA9ZltoXTtpW3BbMF1dPXBbMV19YT10eXBlb2YgZS5zdG9wc1swXVswXX1lbHNle2lmKFwiaWRlbnRpdHlcIiE9PXUpdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGZ1bmN0aW9uIHR5cGUgXCInK3UrJ1wiJyk7bj15ZX1pZihzKXtmb3IodmFyIGQ9e30sZz1bXSx2PTA7djxlLnN0b3BzLmxlbmd0aDt2Kyspe3ZhciBtPWUuc3RvcHNbdl0seT1tWzBdLnpvb207dm9pZCAwPT09ZFt5XSYmKGRbeV09e3pvb206eSx0eXBlOmUudHlwZSxwcm9wZXJ0eTplLnByb3BlcnR5LGRlZmF1bHQ6ZS5kZWZhdWx0LHN0b3BzOltdfSxnLnB1c2goeSkpLGRbeV0uc3RvcHMucHVzaChbbVswXS52YWx1ZSxtWzFdXSl9Zm9yKHZhciB4PVtdLGI9MCxfPWc7YjxfLmxlbmd0aDtiKz0xKXt2YXIgdz1fW2JdO3gucHVzaChbZFt3XS56b29tLHQoZFt3XSxyKV0pfXJldHVybntraW5kOlwiY29tcG9zaXRlXCIsaW50ZXJwb2xhdGlvbkZhY3RvcjpBdC5pbnRlcnBvbGF0aW9uRmFjdG9yLmJpbmQodm9pZCAwLHtuYW1lOlwibGluZWFyXCJ9KSx6b29tU3RvcHM6eC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSxldmFsdWF0ZTpmdW5jdGlvbih0LG4pe3ZhciBpPXQuem9vbTtyZXR1cm4gbWUoe3N0b3BzOngsYmFzZTplLmJhc2V9LHIsaSkuZXZhbHVhdGUoaSxuKX19fXJldHVybiBjP3traW5kOlwiY2FtZXJhXCIsaW50ZXJwb2xhdGlvbkZhY3RvcjpcImV4cG9uZW50aWFsXCI9PT11P0F0LmludGVycG9sYXRpb25GYWN0b3IuYmluZCh2b2lkIDAse25hbWU6XCJleHBvbmVudGlhbFwiLGJhc2U6dm9pZCAwIT09ZS5iYXNlP2UuYmFzZToxfSk6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sem9vbVN0b3BzOmUuc3RvcHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSksZXZhbHVhdGU6ZnVuY3Rpb24odCl7dmFyIG89dC56b29tO3JldHVybiBuKGUscixvLGksYSl9fTp7a2luZDpcInNvdXJjZVwiLGV2YWx1YXRlOmZ1bmN0aW9uKHQsbyl7dmFyIHM9byYmby5wcm9wZXJ0aWVzP28ucHJvcGVydGllc1tlLnByb3BlcnR5XTp2b2lkIDA7cmV0dXJuIHZvaWQgMD09PXM/ZGUoZS5kZWZhdWx0LHIuZGVmYXVsdCk6bihlLHIscyxpLGEpfX19KHRoaXMuX3BhcmFtZXRlcnMsdGhpcy5fc3BlY2lmaWNhdGlvbikpfTtmdW5jdGlvbiBTZSh0LGUpe2lmKGZlKHQpKXJldHVybiBuZXcgTWUodCxlKTtpZihfZSh0KSl7dmFyIHI9VGUodCxlKTtpZihcImVycm9yXCI9PT1yLnJlc3VsdCl0aHJvdyBuZXcgRXJyb3Ioci52YWx1ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5K1wiOiBcIit0Lm1lc3NhZ2V9KS5qb2luKFwiLCBcIikpO3JldHVybiByLnZhbHVlfXZhciBuPXQ7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQmJlwiY29sb3JcIj09PWUudHlwZSYmKG49dHQucGFyc2UodCkpLHtraW5kOlwiY29uc3RhbnRcIixldmFsdWF0ZTpmdW5jdGlvbigpe3JldHVybiBufX19ZnVuY3Rpb24gRWUodCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG49dC52YWx1ZVNwZWN8fHt9LGk9dC5vYmplY3RFbGVtZW50VmFsaWRhdG9yc3x8e30sYT10LnN0eWxlLG89dC5zdHlsZVNwZWMscz1bXSxsPWhlKHIpO2lmKFwib2JqZWN0XCIhPT1sKXJldHVybltuZXcgRChlLHIsXCJvYmplY3QgZXhwZWN0ZWQsIFwiK2wrXCIgZm91bmRcIildO2Zvcih2YXIgYyBpbiByKXt2YXIgdT1jLnNwbGl0KFwiLlwiKVswXSxoPW5bdV18fG5bXCIqXCJdLGY9dm9pZCAwO2lmKGlbdV0pZj1pW3VdO2Vsc2UgaWYoblt1XSlmPUtlO2Vsc2UgaWYoaVtcIipcIl0pZj1pW1wiKlwiXTtlbHNle2lmKCFuW1wiKlwiXSl7cy5wdXNoKG5ldyBEKGUscltjXSwndW5rbm93biBwcm9wZXJ0eSBcIicrYysnXCInKSk7Y29udGludWV9Zj1LZX1zPXMuY29uY2F0KGYoe2tleTooZT9lK1wiLlwiOmUpK2MsdmFsdWU6cltjXSx2YWx1ZVNwZWM6aCxzdHlsZTphLHN0eWxlU3BlYzpvLG9iamVjdDpyLG9iamVjdEtleTpjfSxyKSl9Zm9yKHZhciBwIGluIG4paVtwXXx8bltwXS5yZXF1aXJlZCYmdm9pZCAwPT09bltwXS5kZWZhdWx0JiZ2b2lkIDA9PT1yW3BdJiZzLnB1c2gobmV3IEQoZSxyLCdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5IFwiJytwKydcIicpKTtyZXR1cm4gc31mdW5jdGlvbiBDZSh0KXt2YXIgZT10LnZhbHVlLHI9dC52YWx1ZVNwZWMsbj10LnN0eWxlLGk9dC5zdHlsZVNwZWMsYT10LmtleSxvPXQuYXJyYXlFbGVtZW50VmFsaWRhdG9yfHxLZTtpZihcImFycmF5XCIhPT1oZShlKSlyZXR1cm5bbmV3IEQoYSxlLFwiYXJyYXkgZXhwZWN0ZWQsIFwiK2hlKGUpK1wiIGZvdW5kXCIpXTtpZihyLmxlbmd0aCYmZS5sZW5ndGghPT1yLmxlbmd0aClyZXR1cm5bbmV3IEQoYSxlLFwiYXJyYXkgbGVuZ3RoIFwiK3IubGVuZ3RoK1wiIGV4cGVjdGVkLCBsZW5ndGggXCIrZS5sZW5ndGgrXCIgZm91bmRcIildO2lmKHJbXCJtaW4tbGVuZ3RoXCJdJiZlLmxlbmd0aDxyW1wibWluLWxlbmd0aFwiXSlyZXR1cm5bbmV3IEQoYSxlLFwiYXJyYXkgbGVuZ3RoIGF0IGxlYXN0IFwiK3JbXCJtaW4tbGVuZ3RoXCJdK1wiIGV4cGVjdGVkLCBsZW5ndGggXCIrZS5sZW5ndGgrXCIgZm91bmRcIildO3ZhciBzPXt0eXBlOnIudmFsdWV9O2kuJHZlcnNpb248NyYmKHMuZnVuY3Rpb249ci5mdW5jdGlvbiksXCJvYmplY3RcIj09PWhlKHIudmFsdWUpJiYocz1yLnZhbHVlKTtmb3IodmFyIGw9W10sYz0wO2M8ZS5sZW5ndGg7YysrKWw9bC5jb25jYXQobyh7YXJyYXk6ZSxhcnJheUluZGV4OmMsdmFsdWU6ZVtjXSx2YWx1ZVNwZWM6cyxzdHlsZTpuLHN0eWxlU3BlYzppLGtleTphK1wiW1wiK2MrXCJdXCJ9KSk7cmV0dXJuIGx9ZnVuY3Rpb24gTGUodCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG49dC52YWx1ZVNwZWMsaT1oZShyKTtyZXR1cm5cIm51bWJlclwiIT09aT9bbmV3IEQoZSxyLFwibnVtYmVyIGV4cGVjdGVkLCBcIitpK1wiIGZvdW5kXCIpXTpcIm1pbmltdW1cImluIG4mJnI8bi5taW5pbXVtP1tuZXcgRChlLHIscitcIiBpcyBsZXNzIHRoYW4gdGhlIG1pbmltdW0gdmFsdWUgXCIrbi5taW5pbXVtKV06XCJtYXhpbXVtXCJpbiBuJiZyPm4ubWF4aW11bT9bbmV3IEQoZSxyLHIrXCIgaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIHZhbHVlIFwiK24ubWF4aW11bSldOltdfWZ1bmN0aW9uIHplKHQpe3ZhciBlLHIsbixpPXQudmFsdWVTcGVjLGE9Rih0LnZhbHVlLnR5cGUpLG89e30scz1cImNhdGVnb3JpY2FsXCIhPT1hJiZ2b2lkIDA9PT10LnZhbHVlLnByb3BlcnR5LGw9IXMsYz1cImFycmF5XCI9PT1oZSh0LnZhbHVlLnN0b3BzKSYmXCJhcnJheVwiPT09aGUodC52YWx1ZS5zdG9wc1swXSkmJlwib2JqZWN0XCI9PT1oZSh0LnZhbHVlLnN0b3BzWzBdWzBdKSx1PUVlKHtrZXk6dC5rZXksdmFsdWU6dC52YWx1ZSx2YWx1ZVNwZWM6dC5zdHlsZVNwZWMuZnVuY3Rpb24sc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6e3N0b3BzOmZ1bmN0aW9uKHQpe2lmKFwiaWRlbnRpdHlcIj09PWEpcmV0dXJuW25ldyBEKHQua2V5LHQudmFsdWUsJ2lkZW50aXR5IGZ1bmN0aW9uIG1heSBub3QgaGF2ZSBhIFwic3RvcHNcIiBwcm9wZXJ0eScpXTt2YXIgZT1bXSxyPXQudmFsdWU7cmV0dXJuIGU9ZS5jb25jYXQoQ2Uoe2tleTp0LmtleSx2YWx1ZTpyLHZhbHVlU3BlYzp0LnZhbHVlU3BlYyxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxhcnJheUVsZW1lbnRWYWxpZGF0b3I6aH0pKSxcImFycmF5XCI9PT1oZShyKSYmMD09PXIubGVuZ3RoJiZlLnB1c2gobmV3IEQodC5rZXkscixcImFycmF5IG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgc3RvcFwiKSksZX0sZGVmYXVsdDpmdW5jdGlvbih0KXtyZXR1cm4gS2Uoe2tleTp0LmtleSx2YWx1ZTp0LnZhbHVlLHZhbHVlU3BlYzppLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjfSl9fX0pO3JldHVyblwiaWRlbnRpdHlcIj09PWEmJnMmJnUucHVzaChuZXcgRCh0LmtleSx0LnZhbHVlLCdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5IFwicHJvcGVydHlcIicpKSxcImlkZW50aXR5XCI9PT1hfHx0LnZhbHVlLnN0b3BzfHx1LnB1c2gobmV3IEQodC5rZXksdC52YWx1ZSwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSBcInN0b3BzXCInKSksXCJleHBvbmVudGlhbFwiPT09YSYmXCJwaWVjZXdpc2UtY29uc3RhbnRcIj09PXQudmFsdWVTcGVjLmZ1bmN0aW9uJiZ1LnB1c2gobmV3IEQodC5rZXksdC52YWx1ZSxcImV4cG9uZW50aWFsIGZ1bmN0aW9ucyBub3Qgc3VwcG9ydGVkXCIpKSx0LnN0eWxlU3BlYy4kdmVyc2lvbj49OCYmKGwmJiF0LnZhbHVlU3BlY1tcInByb3BlcnR5LWZ1bmN0aW9uXCJdP3UucHVzaChuZXcgRCh0LmtleSx0LnZhbHVlLFwicHJvcGVydHkgZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWRcIikpOnMmJiF0LnZhbHVlU3BlY1tcInpvb20tZnVuY3Rpb25cIl0mJlwiaGVhdG1hcC1jb2xvclwiIT09dC5vYmplY3RLZXkmJlwibGluZS1ncmFkaWVudFwiIT09dC5vYmplY3RLZXkmJnUucHVzaChuZXcgRCh0LmtleSx0LnZhbHVlLFwiem9vbSBmdW5jdGlvbnMgbm90IHN1cHBvcnRlZFwiKSkpLFwiY2F0ZWdvcmljYWxcIiE9PWEmJiFjfHx2b2lkIDAhPT10LnZhbHVlLnByb3BlcnR5fHx1LnB1c2gobmV3IEQodC5rZXksdC52YWx1ZSwnXCJwcm9wZXJ0eVwiIHByb3BlcnR5IGlzIHJlcXVpcmVkJykpLHU7ZnVuY3Rpb24gaCh0KXt2YXIgZT1bXSxhPXQudmFsdWUscz10LmtleTtpZihcImFycmF5XCIhPT1oZShhKSlyZXR1cm5bbmV3IEQocyxhLFwiYXJyYXkgZXhwZWN0ZWQsIFwiK2hlKGEpK1wiIGZvdW5kXCIpXTtpZigyIT09YS5sZW5ndGgpcmV0dXJuW25ldyBEKHMsYSxcImFycmF5IGxlbmd0aCAyIGV4cGVjdGVkLCBsZW5ndGggXCIrYS5sZW5ndGgrXCIgZm91bmRcIildO2lmKGMpe2lmKFwib2JqZWN0XCIhPT1oZShhWzBdKSlyZXR1cm5bbmV3IEQocyxhLFwib2JqZWN0IGV4cGVjdGVkLCBcIitoZShhWzBdKStcIiBmb3VuZFwiKV07aWYodm9pZCAwPT09YVswXS56b29tKXJldHVybltuZXcgRChzLGEsXCJvYmplY3Qgc3RvcCBrZXkgbXVzdCBoYXZlIHpvb21cIildO2lmKHZvaWQgMD09PWFbMF0udmFsdWUpcmV0dXJuW25ldyBEKHMsYSxcIm9iamVjdCBzdG9wIGtleSBtdXN0IGhhdmUgdmFsdWVcIildO2lmKG4mJm4+RihhWzBdLnpvb20pKXJldHVybltuZXcgRChzLGFbMF0uem9vbSxcInN0b3Agem9vbSB2YWx1ZXMgbXVzdCBhcHBlYXIgaW4gYXNjZW5kaW5nIG9yZGVyXCIpXTtGKGFbMF0uem9vbSkhPT1uJiYobj1GKGFbMF0uem9vbSkscj12b2lkIDAsbz17fSksZT1lLmNvbmNhdChFZSh7a2V5OnMrXCJbMF1cIix2YWx1ZTphWzBdLHZhbHVlU3BlYzp7em9vbTp7fX0sc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6e3pvb206TGUsdmFsdWU6Zn19KSl9ZWxzZSBlPWUuY29uY2F0KGYoe2tleTpzK1wiWzBdXCIsdmFsdWU6YVswXSx2YWx1ZVNwZWM6e30sc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWN9LGEpKTtyZXR1cm4gZS5jb25jYXQoS2Uoe2tleTpzK1wiWzFdXCIsdmFsdWU6YVsxXSx2YWx1ZVNwZWM6aSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlY30pKX1mdW5jdGlvbiBmKHQsbil7dmFyIHM9aGUodC52YWx1ZSksbD1GKHQudmFsdWUpLGM9bnVsbCE9PXQudmFsdWU/dC52YWx1ZTpuO2lmKGUpe2lmKHMhPT1lKXJldHVybltuZXcgRCh0LmtleSxjLHMrXCIgc3RvcCBkb21haW4gdHlwZSBtdXN0IG1hdGNoIHByZXZpb3VzIHN0b3AgZG9tYWluIHR5cGUgXCIrZSldfWVsc2UgZT1zO2lmKFwibnVtYmVyXCIhPT1zJiZcInN0cmluZ1wiIT09cyYmXCJib29sZWFuXCIhPT1zKXJldHVybltuZXcgRCh0LmtleSxjLFwic3RvcCBkb21haW4gdmFsdWUgbXVzdCBiZSBhIG51bWJlciwgc3RyaW5nLCBvciBib29sZWFuXCIpXTtpZihcIm51bWJlclwiIT09cyYmXCJjYXRlZ29yaWNhbFwiIT09YSl7dmFyIHU9XCJudW1iZXIgZXhwZWN0ZWQsIFwiK3MrXCIgZm91bmRcIjtyZXR1cm4gaVtcInByb3BlcnR5LWZ1bmN0aW9uXCJdJiZ2b2lkIDA9PT1hJiYodSs9J1xcbklmIHlvdSBpbnRlbmRlZCB0byB1c2UgYSBjYXRlZ29yaWNhbCBmdW5jdGlvbiwgc3BlY2lmeSBgXCJ0eXBlXCI6IFwiY2F0ZWdvcmljYWxcImAuJyksW25ldyBEKHQua2V5LGMsdSldfXJldHVyblwiY2F0ZWdvcmljYWxcIiE9PWF8fFwibnVtYmVyXCIhPT1zfHxpc0Zpbml0ZShsKSYmTWF0aC5mbG9vcihsKT09PWw/XCJjYXRlZ29yaWNhbFwiIT09YSYmXCJudW1iZXJcIj09PXMmJnZvaWQgMCE9PXImJmw8cj9bbmV3IEQodC5rZXksYyxcInN0b3AgZG9tYWluIHZhbHVlcyBtdXN0IGFwcGVhciBpbiBhc2NlbmRpbmcgb3JkZXJcIildOihyPWwsXCJjYXRlZ29yaWNhbFwiPT09YSYmbCBpbiBvP1tuZXcgRCh0LmtleSxjLFwic3RvcCBkb21haW4gdmFsdWVzIG11c3QgYmUgdW5pcXVlXCIpXToob1tsXT0hMCxbXSkpOltuZXcgRCh0LmtleSxjLFwiaW50ZWdlciBleHBlY3RlZCwgZm91bmQgXCIrbCldfX1mdW5jdGlvbiBPZSh0KXt2YXIgZT0oXCJwcm9wZXJ0eVwiPT09dC5leHByZXNzaW9uQ29udGV4dD9UZTp3ZSkoQih0LnZhbHVlKSx0LnZhbHVlU3BlYyk7cmV0dXJuXCJlcnJvclwiPT09ZS5yZXN1bHQ/ZS52YWx1ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBEKFwiXCIrdC5rZXkrZS5rZXksdC52YWx1ZSxlLm1lc3NhZ2UpfSk6XCJwcm9wZXJ0eVwiPT09dC5leHByZXNzaW9uQ29udGV4dCYmXCJ0ZXh0LWZvbnRcIj09PXQucHJvcGVydHlLZXkmJi0xIT09ZS52YWx1ZS5fc3R5bGVFeHByZXNzaW9uLmV4cHJlc3Npb24ucG9zc2libGVPdXRwdXRzKCkuaW5kZXhPZih2b2lkIDApP1tuZXcgRCh0LmtleSx0LnZhbHVlLCdJbnZhbGlkIGRhdGEgZXhwcmVzc2lvbiBmb3IgXCJ0ZXh0LWZvbnRcIi4gT3V0cHV0IHZhbHVlcyBtdXN0IGJlIGNvbnRhaW5lZCBhcyBsaXRlcmFscyB3aXRoaW4gdGhlIGV4cHJlc3Npb24uJyldOltdfWZ1bmN0aW9uIEllKHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZSxuPXQudmFsdWVTcGVjLGk9W107cmV0dXJuIEFycmF5LmlzQXJyYXkobi52YWx1ZXMpPy0xPT09bi52YWx1ZXMuaW5kZXhPZihGKHIpKSYmaS5wdXNoKG5ldyBEKGUscixcImV4cGVjdGVkIG9uZSBvZiBbXCIrbi52YWx1ZXMuam9pbihcIiwgXCIpK1wiXSwgXCIrSlNPTi5zdHJpbmdpZnkocikrXCIgZm91bmRcIikpOi0xPT09T2JqZWN0LmtleXMobi52YWx1ZXMpLmluZGV4T2YoRihyKSkmJmkucHVzaChuZXcgRChlLHIsXCJleHBlY3RlZCBvbmUgb2YgW1wiK09iamVjdC5rZXlzKG4udmFsdWVzKS5qb2luKFwiLCBcIikrXCJdLCBcIitKU09OLnN0cmluZ2lmeShyKStcIiBmb3VuZFwiKSksaX1mdW5jdGlvbiBEZSh0KXtpZighQXJyYXkuaXNBcnJheSh0KXx8MD09PXQubGVuZ3RoKXJldHVybiExO3N3aXRjaCh0WzBdKXtjYXNlXCJoYXNcIjpyZXR1cm4gdC5sZW5ndGg+PTImJlwiJGlkXCIhPT10WzFdJiZcIiR0eXBlXCIhPT10WzFdO2Nhc2VcImluXCI6Y2FzZVwiIWluXCI6Y2FzZVwiIWhhc1wiOmNhc2VcIm5vbmVcIjpyZXR1cm4hMTtjYXNlXCI9PVwiOmNhc2VcIiE9XCI6Y2FzZVwiPlwiOmNhc2VcIj49XCI6Y2FzZVwiPFwiOmNhc2VcIjw9XCI6cmV0dXJuIDM9PT10Lmxlbmd0aCYmKEFycmF5LmlzQXJyYXkodFsxXSl8fEFycmF5LmlzQXJyYXkodFsyXSkpO2Nhc2VcImFueVwiOmNhc2VcImFsbFwiOmZvcih2YXIgZT0wLHI9dC5zbGljZSgxKTtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV07aWYoIURlKG4pJiZcImJvb2xlYW5cIiE9dHlwZW9mIG4pcmV0dXJuITF9cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMH19TWUuZGVzZXJpYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBNZSh0Ll9wYXJhbWV0ZXJzLHQuX3NwZWNpZmljYXRpb24pfSxNZS5zZXJpYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJue19wYXJhbWV0ZXJzOnQuX3BhcmFtZXRlcnMsX3NwZWNpZmljYXRpb246dC5fc3BlY2lmaWNhdGlvbn19O3ZhciBQZT17dHlwZTpcImJvb2xlYW5cIixkZWZhdWx0OiExLGZ1bmN0aW9uOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCxcInpvb20tZnVuY3Rpb25cIjohMH07ZnVuY3Rpb24gUmUodCl7aWYoIXQpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9O0RlKHQpfHwodD1CZSh0KSk7dmFyIGU9d2UodCxQZSk7aWYoXCJlcnJvclwiPT09ZS5yZXN1bHQpdGhyb3cgbmV3IEVycm9yKGUudmFsdWUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleStcIjogXCIrdC5tZXNzYWdlfSkuam9pbihcIiwgXCIpKTtyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gZS52YWx1ZS5ldmFsdWF0ZSh0LHIpfX1mdW5jdGlvbiBGZSh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6MH1mdW5jdGlvbiBCZSh0KXtpZighdClyZXR1cm4hMDt2YXIgZSxyPXRbMF07cmV0dXJuIHQubGVuZ3RoPD0xP1wiYW55XCIhPT1yOlwiPT1cIj09PXI/TmUodFsxXSx0WzJdLFwiPT1cIik6XCIhPVwiPT09cj9VZShOZSh0WzFdLHRbMl0sXCI9PVwiKSk6XCI8XCI9PT1yfHxcIj5cIj09PXJ8fFwiPD1cIj09PXJ8fFwiPj1cIj09PXI/TmUodFsxXSx0WzJdLHIpOlwiYW55XCI9PT1yPyhlPXQuc2xpY2UoMSksW1wiYW55XCJdLmNvbmNhdChlLm1hcChCZSkpKTpcImFsbFwiPT09cj9bXCJhbGxcIl0uY29uY2F0KHQuc2xpY2UoMSkubWFwKEJlKSk6XCJub25lXCI9PT1yP1tcImFsbFwiXS5jb25jYXQodC5zbGljZSgxKS5tYXAoQmUpLm1hcChVZSkpOlwiaW5cIj09PXI/amUodFsxXSx0LnNsaWNlKDIpKTpcIiFpblwiPT09cj9VZShqZSh0WzFdLHQuc2xpY2UoMikpKTpcImhhc1wiPT09cj9WZSh0WzFdKTpcIiFoYXNcIiE9PXJ8fFVlKFZlKHRbMV0pKX1mdW5jdGlvbiBOZSh0LGUscil7c3dpdGNoKHQpe2Nhc2VcIiR0eXBlXCI6cmV0dXJuW1wiZmlsdGVyLXR5cGUtXCIrcixlXTtjYXNlXCIkaWRcIjpyZXR1cm5bXCJmaWx0ZXItaWQtXCIrcixlXTtkZWZhdWx0OnJldHVybltcImZpbHRlci1cIityLHQsZV19fWZ1bmN0aW9uIGplKHQsZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybiExO3N3aXRjaCh0KXtjYXNlXCIkdHlwZVwiOnJldHVybltcImZpbHRlci10eXBlLWluXCIsW1wibGl0ZXJhbFwiLGVdXTtjYXNlXCIkaWRcIjpyZXR1cm5bXCJmaWx0ZXItaWQtaW5cIixbXCJsaXRlcmFsXCIsZV1dO2RlZmF1bHQ6cmV0dXJuIGUubGVuZ3RoPjIwMCYmIWUuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHQhPXR5cGVvZiBlWzBdfSk/W1wiZmlsdGVyLWluLWxhcmdlXCIsdCxbXCJsaXRlcmFsXCIsZS5zb3J0KEZlKV1dOltcImZpbHRlci1pbi1zbWFsbFwiLHQsW1wibGl0ZXJhbFwiLGVdXX19ZnVuY3Rpb24gVmUodCl7c3dpdGNoKHQpe2Nhc2VcIiR0eXBlXCI6cmV0dXJuITA7Y2FzZVwiJGlkXCI6cmV0dXJuW1wiZmlsdGVyLWhhcy1pZFwiXTtkZWZhdWx0OnJldHVybltcImZpbHRlci1oYXNcIix0XX19ZnVuY3Rpb24gVWUodCl7cmV0dXJuW1wiIVwiLHRdfWZ1bmN0aW9uIHFlKHQpe3JldHVybiBEZShCKHQudmFsdWUpKT9PZShSKHt9LHQse2V4cHJlc3Npb25Db250ZXh0OlwiZmlsdGVyXCIsdmFsdWVTcGVjOnt2YWx1ZTpcImJvb2xlYW5cIn19KSk6ZnVuY3Rpb24gdChlKXt2YXIgcj1lLnZhbHVlLG49ZS5rZXk7aWYoXCJhcnJheVwiIT09aGUocikpcmV0dXJuW25ldyBEKG4scixcImFycmF5IGV4cGVjdGVkLCBcIitoZShyKStcIiBmb3VuZFwiKV07dmFyIGksYT1lLnN0eWxlU3BlYyxvPVtdO2lmKHIubGVuZ3RoPDEpcmV0dXJuW25ldyBEKG4scixcImZpbHRlciBhcnJheSBtdXN0IGhhdmUgYXQgbGVhc3QgMSBlbGVtZW50XCIpXTtzd2l0Y2gobz1vLmNvbmNhdChJZSh7a2V5Om4rXCJbMF1cIix2YWx1ZTpyWzBdLHZhbHVlU3BlYzphLmZpbHRlcl9vcGVyYXRvcixzdHlsZTplLnN0eWxlLHN0eWxlU3BlYzplLnN0eWxlU3BlY30pKSxGKHJbMF0pKXtjYXNlXCI8XCI6Y2FzZVwiPD1cIjpjYXNlXCI+XCI6Y2FzZVwiPj1cIjpyLmxlbmd0aD49MiYmXCIkdHlwZVwiPT09RihyWzFdKSYmby5wdXNoKG5ldyBEKG4sciwnXCIkdHlwZVwiIGNhbm5vdCBiZSB1c2Ugd2l0aCBvcGVyYXRvciBcIicrclswXSsnXCInKSk7Y2FzZVwiPT1cIjpjYXNlXCIhPVwiOjMhPT1yLmxlbmd0aCYmby5wdXNoKG5ldyBEKG4sciwnZmlsdGVyIGFycmF5IGZvciBvcGVyYXRvciBcIicrclswXSsnXCIgbXVzdCBoYXZlIDMgZWxlbWVudHMnKSk7Y2FzZVwiaW5cIjpjYXNlXCIhaW5cIjpyLmxlbmd0aD49MiYmXCJzdHJpbmdcIiE9PShpPWhlKHJbMV0pKSYmby5wdXNoKG5ldyBEKG4rXCJbMV1cIixyWzFdLFwic3RyaW5nIGV4cGVjdGVkLCBcIitpK1wiIGZvdW5kXCIpKTtmb3IodmFyIHM9MjtzPHIubGVuZ3RoO3MrKylpPWhlKHJbc10pLFwiJHR5cGVcIj09PUYoclsxXSk/bz1vLmNvbmNhdChJZSh7a2V5Om4rXCJbXCIrcytcIl1cIix2YWx1ZTpyW3NdLHZhbHVlU3BlYzphLmdlb21ldHJ5X3R5cGUsc3R5bGU6ZS5zdHlsZSxzdHlsZVNwZWM6ZS5zdHlsZVNwZWN9KSk6XCJzdHJpbmdcIiE9PWkmJlwibnVtYmVyXCIhPT1pJiZcImJvb2xlYW5cIiE9PWkmJm8ucHVzaChuZXcgRChuK1wiW1wiK3MrXCJdXCIscltzXSxcInN0cmluZywgbnVtYmVyLCBvciBib29sZWFuIGV4cGVjdGVkLCBcIitpK1wiIGZvdW5kXCIpKTticmVhaztjYXNlXCJhbnlcIjpjYXNlXCJhbGxcIjpjYXNlXCJub25lXCI6Zm9yKHZhciBsPTE7bDxyLmxlbmd0aDtsKyspbz1vLmNvbmNhdCh0KHtrZXk6bitcIltcIitsK1wiXVwiLHZhbHVlOnJbbF0sc3R5bGU6ZS5zdHlsZSxzdHlsZVNwZWM6ZS5zdHlsZVNwZWN9KSk7YnJlYWs7Y2FzZVwiaGFzXCI6Y2FzZVwiIWhhc1wiOmk9aGUoclsxXSksMiE9PXIubGVuZ3RoP28ucHVzaChuZXcgRChuLHIsJ2ZpbHRlciBhcnJheSBmb3IgXCInK3JbMF0rJ1wiIG9wZXJhdG9yIG11c3QgaGF2ZSAyIGVsZW1lbnRzJykpOlwic3RyaW5nXCIhPT1pJiZvLnB1c2gobmV3IEQobitcIlsxXVwiLHJbMV0sXCJzdHJpbmcgZXhwZWN0ZWQsIFwiK2krXCIgZm91bmRcIikpfXJldHVybiBvfSh0KX1mdW5jdGlvbiBIZSh0LGUpe3ZhciByPXQua2V5LG49dC5zdHlsZSxpPXQuc3R5bGVTcGVjLGE9dC52YWx1ZSxvPXQub2JqZWN0S2V5LHM9aVtlK1wiX1wiK3QubGF5ZXJUeXBlXTtpZighcylyZXR1cm5bXTt2YXIgbD1vLm1hdGNoKC9eKC4qKS10cmFuc2l0aW9uJC8pO2lmKFwicGFpbnRcIj09PWUmJmwmJnNbbFsxXV0mJnNbbFsxXV0udHJhbnNpdGlvbilyZXR1cm4gS2Uoe2tleTpyLHZhbHVlOmEsdmFsdWVTcGVjOmkudHJhbnNpdGlvbixzdHlsZTpuLHN0eWxlU3BlYzppfSk7dmFyIGMsdT10LnZhbHVlU3BlY3x8c1tvXTtpZighdSlyZXR1cm5bbmV3IEQocixhLCd1bmtub3duIHByb3BlcnR5IFwiJytvKydcIicpXTtpZihcInN0cmluZ1wiPT09aGUoYSkmJnVbXCJwcm9wZXJ0eS1mdW5jdGlvblwiXSYmIXUudG9rZW5zJiYoYz0vXnsoW159XSspfSQvLmV4ZWMoYSkpKXJldHVybltuZXcgRChyLGEsJ1wiJytvKydcIiBkb2VzIG5vdCBzdXBwb3J0IGludGVycG9sYXRpb24gc3ludGF4XFxuVXNlIGFuIGlkZW50aXR5IHByb3BlcnR5IGZ1bmN0aW9uIGluc3RlYWQ6IGB7IFwidHlwZVwiOiBcImlkZW50aXR5XCIsIFwicHJvcGVydHlcIjogJytKU09OLnN0cmluZ2lmeShjWzFdKStcIiB9YC5cIildO3ZhciBoPVtdO3JldHVyblwic3ltYm9sXCI9PT10LmxheWVyVHlwZSYmKFwidGV4dC1maWVsZFwiPT09byYmbiYmIW4uZ2x5cGhzJiZoLnB1c2gobmV3IEQocixhLCd1c2Ugb2YgXCJ0ZXh0LWZpZWxkXCIgcmVxdWlyZXMgYSBzdHlsZSBcImdseXBoc1wiIHByb3BlcnR5JykpLFwidGV4dC1mb250XCI9PT1vJiZmZShCKGEpKSYmXCJpZGVudGl0eVwiPT09RihhLnR5cGUpJiZoLnB1c2gobmV3IEQocixhLCdcInRleHQtZm9udFwiIGRvZXMgbm90IHN1cHBvcnQgaWRlbnRpdHkgZnVuY3Rpb25zJykpKSxoLmNvbmNhdChLZSh7a2V5OnQua2V5LHZhbHVlOmEsdmFsdWVTcGVjOnUsc3R5bGU6bixzdHlsZVNwZWM6aSxleHByZXNzaW9uQ29udGV4dDpcInByb3BlcnR5XCIscHJvcGVydHlLZXk6b30pKX1mdW5jdGlvbiBHZSh0KXtyZXR1cm4gSGUodCxcInBhaW50XCIpfWZ1bmN0aW9uIFllKHQpe3JldHVybiBIZSh0LFwibGF5b3V0XCIpfWZ1bmN0aW9uIFdlKHQpe3ZhciBlPVtdLHI9dC52YWx1ZSxuPXQua2V5LGk9dC5zdHlsZSxhPXQuc3R5bGVTcGVjO3IudHlwZXx8ci5yZWZ8fGUucHVzaChuZXcgRChuLHIsJ2VpdGhlciBcInR5cGVcIiBvciBcInJlZlwiIGlzIHJlcXVpcmVkJykpO3ZhciBvLHM9RihyLnR5cGUpLGw9RihyLnJlZik7aWYoci5pZClmb3IodmFyIGM9RihyLmlkKSx1PTA7dTx0LmFycmF5SW5kZXg7dSsrKXt2YXIgaD1pLmxheWVyc1t1XTtGKGguaWQpPT09YyYmZS5wdXNoKG5ldyBEKG4sci5pZCwnZHVwbGljYXRlIGxheWVyIGlkIFwiJytyLmlkKydcIiwgcHJldmlvdXNseSB1c2VkIGF0IGxpbmUgJytoLmlkLl9fbGluZV9fKSl9aWYoXCJyZWZcImluIHIpW1widHlwZVwiLFwic291cmNlXCIsXCJzb3VyY2UtbGF5ZXJcIixcImZpbHRlclwiLFwibGF5b3V0XCJdLmZvckVhY2goZnVuY3Rpb24odCl7dCBpbiByJiZlLnB1c2gobmV3IEQobixyW3RdLCdcIicrdCsnXCIgaXMgcHJvaGliaXRlZCBmb3IgcmVmIGxheWVycycpKX0pLGkubGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7Rih0LmlkKT09PWwmJihvPXQpfSksbz9vLnJlZj9lLnB1c2gobmV3IEQobixyLnJlZixcInJlZiBjYW5ub3QgcmVmZXJlbmNlIGFub3RoZXIgcmVmIGxheWVyXCIpKTpzPUYoby50eXBlKTplLnB1c2gobmV3IEQobixyLnJlZiwncmVmIGxheWVyIFwiJytsKydcIiBub3QgZm91bmQnKSk7ZWxzZSBpZihcImJhY2tncm91bmRcIiE9PXMpaWYoci5zb3VyY2Upe3ZhciBmPWkuc291cmNlcyYmaS5zb3VyY2VzW3Iuc291cmNlXSxwPWYmJkYoZi50eXBlKTtmP1widmVjdG9yXCI9PT1wJiZcInJhc3RlclwiPT09cz9lLnB1c2gobmV3IEQobixyLnNvdXJjZSwnbGF5ZXIgXCInK3IuaWQrJ1wiIHJlcXVpcmVzIGEgcmFzdGVyIHNvdXJjZScpKTpcInJhc3RlclwiPT09cCYmXCJyYXN0ZXJcIiE9PXM/ZS5wdXNoKG5ldyBEKG4sci5zb3VyY2UsJ2xheWVyIFwiJytyLmlkKydcIiByZXF1aXJlcyBhIHZlY3RvciBzb3VyY2UnKSk6XCJ2ZWN0b3JcIiE9PXB8fHJbXCJzb3VyY2UtbGF5ZXJcIl0/XCJyYXN0ZXItZGVtXCI9PT1wJiZcImhpbGxzaGFkZVwiIT09cz9lLnB1c2gobmV3IEQobixyLnNvdXJjZSxcInJhc3Rlci1kZW0gc291cmNlIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBsYXllciB0eXBlICdoaWxsc2hhZGUnLlwiKSk6XCJsaW5lXCIhPT1zfHwhci5wYWludHx8IXIucGFpbnRbXCJsaW5lLWdyYWRpZW50XCJdfHxcImdlb2pzb25cIj09PXAmJmYubGluZU1ldHJpY3N8fGUucHVzaChuZXcgRChuLHIsJ2xheWVyIFwiJytyLmlkKydcIiBzcGVjaWZpZXMgYSBsaW5lLWdyYWRpZW50LCB3aGljaCByZXF1aXJlcyBhIEdlb0pTT04gc291cmNlIHdpdGggYGxpbmVNZXRyaWNzYCBlbmFibGVkLicpKTplLnB1c2gobmV3IEQobixyLCdsYXllciBcIicrci5pZCsnXCIgbXVzdCBzcGVjaWZ5IGEgXCJzb3VyY2UtbGF5ZXJcIicpKTplLnB1c2gobmV3IEQobixyLnNvdXJjZSwnc291cmNlIFwiJytyLnNvdXJjZSsnXCIgbm90IGZvdW5kJykpfWVsc2UgZS5wdXNoKG5ldyBEKG4sciwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSBcInNvdXJjZVwiJykpO3JldHVybiBlPWUuY29uY2F0KEVlKHtrZXk6bix2YWx1ZTpyLHZhbHVlU3BlYzphLmxheWVyLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOntcIipcIjpmdW5jdGlvbigpe3JldHVybltdfSx0eXBlOmZ1bmN0aW9uKCl7cmV0dXJuIEtlKHtrZXk6bitcIi50eXBlXCIsdmFsdWU6ci50eXBlLHZhbHVlU3BlYzphLmxheWVyLnR5cGUsc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0OnIsb2JqZWN0S2V5OlwidHlwZVwifSl9LGZpbHRlcjpxZSxsYXlvdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIEVlKHtsYXllcjpyLGtleTp0LmtleSx2YWx1ZTp0LnZhbHVlLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOntcIipcIjpmdW5jdGlvbih0KXtyZXR1cm4gWWUoUih7bGF5ZXJUeXBlOnN9LHQpKX19fSl9LHBhaW50OmZ1bmN0aW9uKHQpe3JldHVybiBFZSh7bGF5ZXI6cixrZXk6dC5rZXksdmFsdWU6dC52YWx1ZSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7XCIqXCI6ZnVuY3Rpb24odCl7cmV0dXJuIEdlKFIoe2xheWVyVHlwZTpzfSx0KSl9fX0pfX19KSl9ZnVuY3Rpb24gWGUodCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LG49dC5zdHlsZVNwZWMsaT10LnN0eWxlO2lmKCFlLnR5cGUpcmV0dXJuW25ldyBEKHIsZSwnXCJ0eXBlXCIgaXMgcmVxdWlyZWQnKV07dmFyIGE9RihlLnR5cGUpLG89W107c3dpdGNoKGEpe2Nhc2VcInZlY3RvclwiOmNhc2VcInJhc3RlclwiOmNhc2VcInJhc3Rlci1kZW1cIjppZihvPW8uY29uY2F0KEVlKHtrZXk6cix2YWx1ZTplLHZhbHVlU3BlYzpuW1wic291cmNlX1wiK2EucmVwbGFjZShcIi1cIixcIl9cIildLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOm59KSksXCJ1cmxcImluIGUpZm9yKHZhciBzIGluIGUpW1widHlwZVwiLFwidXJsXCIsXCJ0aWxlU2l6ZVwiXS5pbmRleE9mKHMpPDAmJm8ucHVzaChuZXcgRChyK1wiLlwiK3MsZVtzXSwnYSBzb3VyY2Ugd2l0aCBhIFwidXJsXCIgcHJvcGVydHkgbWF5IG5vdCBpbmNsdWRlIGEgXCInK3MrJ1wiIHByb3BlcnR5JykpO3JldHVybiBvO2Nhc2VcImdlb2pzb25cIjpyZXR1cm4gRWUoe2tleTpyLHZhbHVlOmUsdmFsdWVTcGVjOm4uc291cmNlX2dlb2pzb24sc3R5bGU6aSxzdHlsZVNwZWM6bn0pO2Nhc2VcInZpZGVvXCI6cmV0dXJuIEVlKHtrZXk6cix2YWx1ZTplLHZhbHVlU3BlYzpuLnNvdXJjZV92aWRlbyxzdHlsZTppLHN0eWxlU3BlYzpufSk7Y2FzZVwiaW1hZ2VcIjpyZXR1cm4gRWUoe2tleTpyLHZhbHVlOmUsdmFsdWVTcGVjOm4uc291cmNlX2ltYWdlLHN0eWxlOmksc3R5bGVTcGVjOm59KTtjYXNlXCJjYW52YXNcIjpyZXR1cm4gby5wdXNoKG5ldyBEKHIsbnVsbCxcIlBsZWFzZSB1c2UgcnVudGltZSBBUElzIHRvIGFkZCBjYW52YXMgc291cmNlcywgcmF0aGVyIHRoYW4gaW5jbHVkaW5nIHRoZW0gaW4gc3R5bGVzaGVldHMuXCIsXCJzb3VyY2UuY2FudmFzXCIpKSxvO2RlZmF1bHQ6cmV0dXJuIEllKHtrZXk6citcIi50eXBlXCIsdmFsdWU6ZS50eXBlLHZhbHVlU3BlYzp7dmFsdWVzOltcInZlY3RvclwiLFwicmFzdGVyXCIsXCJyYXN0ZXItZGVtXCIsXCJnZW9qc29uXCIsXCJ2aWRlb1wiLFwiaW1hZ2VcIl19LHN0eWxlOmksc3R5bGVTcGVjOm59KX19ZnVuY3Rpb24gWmUodCl7dmFyIGU9dC52YWx1ZSxyPXQuc3R5bGVTcGVjLG49ci5saWdodCxpPXQuc3R5bGUsYT1bXSxvPWhlKGUpO2lmKHZvaWQgMD09PWUpcmV0dXJuIGE7aWYoXCJvYmplY3RcIiE9PW8pcmV0dXJuIGEuY29uY2F0KFtuZXcgRChcImxpZ2h0XCIsZSxcIm9iamVjdCBleHBlY3RlZCwgXCIrbytcIiBmb3VuZFwiKV0pO2Zvcih2YXIgcyBpbiBlKXt2YXIgbD1zLm1hdGNoKC9eKC4qKS10cmFuc2l0aW9uJC8pO2E9bCYmbltsWzFdXSYmbltsWzFdXS50cmFuc2l0aW9uP2EuY29uY2F0KEtlKHtrZXk6cyx2YWx1ZTplW3NdLHZhbHVlU3BlYzpyLnRyYW5zaXRpb24sc3R5bGU6aSxzdHlsZVNwZWM6cn0pKTpuW3NdP2EuY29uY2F0KEtlKHtrZXk6cyx2YWx1ZTplW3NdLHZhbHVlU3BlYzpuW3NdLHN0eWxlOmksc3R5bGVTcGVjOnJ9KSk6YS5jb25jYXQoW25ldyBEKHMsZVtzXSwndW5rbm93biBwcm9wZXJ0eSBcIicrcysnXCInKV0pfXJldHVybiBhfWZ1bmN0aW9uICRlKHQpe3ZhciBlPXQudmFsdWUscj10LmtleSxuPWhlKGUpO3JldHVyblwic3RyaW5nXCIhPT1uP1tuZXcgRChyLGUsXCJzdHJpbmcgZXhwZWN0ZWQsIFwiK24rXCIgZm91bmRcIildOltdfXZhciBKZT17XCIqXCI6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sYXJyYXk6Q2UsYm9vbGVhbjpmdW5jdGlvbih0KXt2YXIgZT10LnZhbHVlLHI9dC5rZXksbj1oZShlKTtyZXR1cm5cImJvb2xlYW5cIiE9PW4/W25ldyBEKHIsZSxcImJvb2xlYW4gZXhwZWN0ZWQsIFwiK24rXCIgZm91bmRcIildOltdfSxudW1iZXI6TGUsY29sb3I6ZnVuY3Rpb24odCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG49aGUocik7cmV0dXJuXCJzdHJpbmdcIiE9PW4/W25ldyBEKGUscixcImNvbG9yIGV4cGVjdGVkLCBcIituK1wiIGZvdW5kXCIpXTpudWxsPT09UShyKT9bbmV3IEQoZSxyLCdjb2xvciBleHBlY3RlZCwgXCInK3IrJ1wiIGZvdW5kJyldOltdfSxjb25zdGFudHM6UCxlbnVtOkllLGZpbHRlcjpxZSxmdW5jdGlvbjp6ZSxsYXllcjpXZSxvYmplY3Q6RWUsc291cmNlOlhlLGxpZ2h0OlplLHN0cmluZzokZX07ZnVuY3Rpb24gS2UodCl7dmFyIGU9dC52YWx1ZSxyPXQudmFsdWVTcGVjLG49dC5zdHlsZVNwZWM7cmV0dXJuIHIuZnVuY3Rpb24mJmZlKEYoZSkpP3plKHQpOnIuZnVuY3Rpb24mJl9lKEIoZSkpP09lKHQpOnIudHlwZSYmSmVbci50eXBlXT9KZVtyLnR5cGVdKHQpOkVlKFIoe30sdCx7dmFsdWVTcGVjOnIudHlwZT9uW3IudHlwZV06cn0pKX1mdW5jdGlvbiBRZSh0KXt2YXIgZT10LnZhbHVlLHI9dC5rZXksbj0kZSh0KTtyZXR1cm4gbi5sZW5ndGg/bjooLTE9PT1lLmluZGV4T2YoXCJ7Zm9udHN0YWNrfVwiKSYmbi5wdXNoKG5ldyBEKHIsZSwnXCJnbHlwaHNcIiB1cmwgbXVzdCBpbmNsdWRlIGEgXCJ7Zm9udHN0YWNrfVwiIHRva2VuJykpLC0xPT09ZS5pbmRleE9mKFwie3JhbmdlfVwiKSYmbi5wdXNoKG5ldyBEKHIsZSwnXCJnbHlwaHNcIiB1cmwgbXVzdCBpbmNsdWRlIGEgXCJ7cmFuZ2V9XCIgdG9rZW4nKSksbil9ZnVuY3Rpb24gdHIodCxlKXtlPWV8fEk7dmFyIHI9W107cmV0dXJuIHI9ci5jb25jYXQoS2Uoe2tleTpcIlwiLHZhbHVlOnQsdmFsdWVTcGVjOmUuJHJvb3Qsc3R5bGVTcGVjOmUsc3R5bGU6dCxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7Z2x5cGhzOlFlLFwiKlwiOmZ1bmN0aW9uKCl7cmV0dXJuW119fX0pKSx0LmNvbnN0YW50cyYmKHI9ci5jb25jYXQoUCh7a2V5OlwiY29uc3RhbnRzXCIsdmFsdWU6dC5jb25zdGFudHMsc3R5bGU6dCxzdHlsZVNwZWM6ZX0pKSksZXIocil9ZnVuY3Rpb24gZXIodCl7cmV0dXJuW10uY29uY2F0KHQpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5saW5lLWUubGluZX0pfWZ1bmN0aW9uIHJyKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlcih0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fXRyLnNvdXJjZT1ycihYZSksdHIubGlnaHQ9cnIoWmUpLHRyLmxheWVyPXJyKFdlKSx0ci5maWx0ZXI9cnIocWUpLHRyLnBhaW50UHJvcGVydHk9cnIoR2UpLHRyLmxheW91dFByb3BlcnR5PXJyKFllKTt2YXIgbnI9dHIsaXI9dHIubGlnaHQsYXI9dHIucGFpbnRQcm9wZXJ0eSxvcj10ci5sYXlvdXRQcm9wZXJ0eTtmdW5jdGlvbiBzcih0LGUpe3ZhciByPSExO2lmKGUmJmUubGVuZ3RoKWZvcih2YXIgbj0wLGk9ZTtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07dC5maXJlKG5ldyB6KG5ldyBFcnJvcihhLm1lc3NhZ2UpKSkscj0hMH1yZXR1cm4gcn12YXIgbHI9dXIsY3I9MztmdW5jdGlvbiB1cih0LGUscil7dmFyIG49dGhpcy5jZWxscz1bXTtpZih0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpe3RoaXMuYXJyYXlCdWZmZXI9dDt2YXIgaT1uZXcgSW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTt0PWlbMF0sZT1pWzFdLHI9aVsyXSx0aGlzLmQ9ZSsyKnI7Zm9yKHZhciBhPTA7YTx0aGlzLmQqdGhpcy5kO2ErKyl7dmFyIG89aVtjcithXSxzPWlbY3IrYSsxXTtuLnB1c2gobz09PXM/bnVsbDppLnN1YmFycmF5KG8scykpfXZhciBsPWlbY3Irbi5sZW5ndGhdLGM9aVtjcituLmxlbmd0aCsxXTt0aGlzLmtleXM9aS5zdWJhcnJheShsLGMpLHRoaXMuYmJveGVzPWkuc3ViYXJyYXkoYyksdGhpcy5pbnNlcnQ9dGhpcy5faW5zZXJ0UmVhZG9ubHl9ZWxzZXt0aGlzLmQ9ZSsyKnI7Zm9yKHZhciB1PTA7dTx0aGlzLmQqdGhpcy5kO3UrKyluLnB1c2goW10pO3RoaXMua2V5cz1bXSx0aGlzLmJib3hlcz1bXX10aGlzLm49ZSx0aGlzLmV4dGVudD10LHRoaXMucGFkZGluZz1yLHRoaXMuc2NhbGU9ZS90LHRoaXMudWlkPTA7dmFyIGg9ci9lKnQ7dGhpcy5taW49LWgsdGhpcy5tYXg9dCtofXVyLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLl9mb3JFYWNoQ2VsbChlLHIsbixpLHRoaXMuX2luc2VydENlbGwsdGhpcy51aWQrKyksdGhpcy5rZXlzLnB1c2godCksdGhpcy5iYm94ZXMucHVzaChlKSx0aGlzLmJib3hlcy5wdXNoKHIpLHRoaXMuYmJveGVzLnB1c2gobiksdGhpcy5iYm94ZXMucHVzaChpKX0sdXIucHJvdG90eXBlLl9pbnNlcnRSZWFkb25seT1mdW5jdGlvbigpe3Rocm93XCJDYW5ub3QgaW5zZXJ0IGludG8gYSBHcmlkSW5kZXggY3JlYXRlZCBmcm9tIGFuIEFycmF5QnVmZmVyLlwifSx1ci5wcm90b3R5cGUuX2luc2VydENlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuY2VsbHNbaV0ucHVzaChhKX0sdXIucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMubWluLGE9dGhpcy5tYXg7aWYodDw9aSYmZTw9aSYmYTw9ciYmYTw9bilyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5rZXlzKTt2YXIgbz1bXTtyZXR1cm4gdGhpcy5fZm9yRWFjaENlbGwodCxlLHIsbix0aGlzLl9xdWVyeUNlbGwsbyx7fSksb30sdXIucHJvdG90eXBlLl9xdWVyeUNlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9dGhpcy5jZWxsc1tpXTtpZihudWxsIT09cylmb3IodmFyIGw9dGhpcy5rZXlzLGM9dGhpcy5iYm94ZXMsdT0wO3U8cy5sZW5ndGg7dSsrKXt2YXIgaD1zW3VdO2lmKHZvaWQgMD09PW9baF0pe3ZhciBmPTQqaDt0PD1jW2YrMl0mJmU8PWNbZiszXSYmcj49Y1tmKzBdJiZuPj1jW2YrMV0/KG9baF09ITAsYS5wdXNoKGxbaF0pKTpvW2hdPSExfX19LHVyLnByb3RvdHlwZS5fZm9yRWFjaENlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZCh0KSxsPXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZChlKSxjPXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZChyKSx1PXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZChuKSxoPXM7aDw9YztoKyspZm9yKHZhciBmPWw7Zjw9dTtmKyspe3ZhciBwPXRoaXMuZCpmK2g7aWYoaS5jYWxsKHRoaXMsdCxlLHIsbixwLGEsbykpcmV0dXJufX0sdXIucHJvdG90eXBlLl9jb252ZXJ0VG9DZWxsQ29vcmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5kLTEsTWF0aC5mbG9vcih0KnRoaXMuc2NhbGUpK3RoaXMucGFkZGluZykpfSx1ci5wcm90b3R5cGUudG9BcnJheUJ1ZmZlcj1mdW5jdGlvbigpe2lmKHRoaXMuYXJyYXlCdWZmZXIpcmV0dXJuIHRoaXMuYXJyYXlCdWZmZXI7Zm9yKHZhciB0PXRoaXMuY2VsbHMsZT1jcit0aGlzLmNlbGxzLmxlbmd0aCsxKzEscj0wLG49MDtuPHRoaXMuY2VsbHMubGVuZ3RoO24rKylyKz10aGlzLmNlbGxzW25dLmxlbmd0aDt2YXIgaT1uZXcgSW50MzJBcnJheShlK3IrdGhpcy5rZXlzLmxlbmd0aCt0aGlzLmJib3hlcy5sZW5ndGgpO2lbMF09dGhpcy5leHRlbnQsaVsxXT10aGlzLm4saVsyXT10aGlzLnBhZGRpbmc7Zm9yKHZhciBhPWUsbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dO2lbY3Irb109YSxpLnNldChzLGEpLGErPXMubGVuZ3RofXJldHVybiBpW2NyK3QubGVuZ3RoXT1hLGkuc2V0KHRoaXMua2V5cyxhKSxhKz10aGlzLmtleXMubGVuZ3RoLGlbY3IrdC5sZW5ndGgrMV09YSxpLnNldCh0aGlzLmJib3hlcyxhKSxhKz10aGlzLmJib3hlcy5sZW5ndGgsaS5idWZmZXJ9O3ZhciBocj1zZWxmLkltYWdlRGF0YSxmcj17fTtmdW5jdGlvbiBwcih0LGUscil7dm9pZCAwPT09ciYmKHI9e30pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiX2NsYXNzUmVnaXN0cnlLZXlcIix7dmFsdWU6dCx3cml0ZWFibGU6ITF9KSxmclt0XT17a2xhc3M6ZSxvbWl0OnIub21pdHx8W10sc2hhbGxvdzpyLnNoYWxsb3d8fFtdfX1mb3IodmFyIGRyIGluIHByKFwiT2JqZWN0XCIsT2JqZWN0KSxsci5zZXJpYWxpemU9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnRvQXJyYXlCdWZmZXIoKTtyZXR1cm4gZSYmZS5wdXNoKHIpLHJ9LGxyLmRlc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbHIodCl9LHByKFwiR3JpZFwiLGxyKSxwcihcIkNvbG9yXCIsdHQpLHByKFwiRXJyb3JcIixFcnJvcikscHIoXCJTdHlsZVByb3BlcnR5RnVuY3Rpb25cIixNZSkscHIoXCJTdHlsZUV4cHJlc3Npb25cIixiZSx7b21pdDpbXCJfZXZhbHVhdG9yXCJdfSkscHIoXCJab29tRGVwZW5kZW50RXhwcmVzc2lvblwiLEFlKSxwcihcIlpvb21Db25zdGFudEV4cHJlc3Npb25cIixrZSkscHIoXCJDb21wb3VuZEV4cHJlc3Npb25cIixndCx7b21pdDpbXCJfZXZhbHVhdGVcIl19KSxSdClSdFtkcl0uX2NsYXNzUmVnaXN0cnlLZXl8fHByKFwiRXhwcmVzc2lvbl9cIitkcixSdFtkcl0pO2Z1bmN0aW9uIGdyKHQsZSl7aWYobnVsbD09dHx8XCJib29sZWFuXCI9PXR5cGVvZiB0fHxcIm51bWJlclwiPT10eXBlb2YgdHx8XCJzdHJpbmdcIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBCb29sZWFufHx0IGluc3RhbmNlb2YgTnVtYmVyfHx0IGluc3RhbmNlb2YgU3RyaW5nfHx0IGluc3RhbmNlb2YgRGF0ZXx8dCBpbnN0YW5jZW9mIFJlZ0V4cClyZXR1cm4gdDtpZih0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIGUmJmUucHVzaCh0KSx0O2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KSl7dmFyIHI9dDtyZXR1cm4gZSYmZS5wdXNoKHIuYnVmZmVyKSxyfWlmKHQgaW5zdGFuY2VvZiBocilyZXR1cm4gZSYmZS5wdXNoKHQuZGF0YS5idWZmZXIpLHQ7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBuPVtdLGk9MCxhPXQ7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO24ucHVzaChncihvLGUpKX1yZXR1cm4gbn1pZihcIm9iamVjdFwiPT10eXBlb2YgdCl7dmFyIHM9dC5jb25zdHJ1Y3RvcixsPXMuX2NsYXNzUmVnaXN0cnlLZXk7aWYoIWwpdGhyb3cgbmV3IEVycm9yKFwiY2FuJ3Qgc2VyaWFsaXplIG9iamVjdCBvZiB1bnJlZ2lzdGVyZWQgY2xhc3NcIik7dmFyIGM9e307aWYocy5zZXJpYWxpemUpYy5fc2VyaWFsaXplZD1zLnNlcmlhbGl6ZSh0LGUpO2Vsc2V7Zm9yKHZhciB1IGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eSh1KSYmIShmcltsXS5vbWl0LmluZGV4T2YodSk+PTApKXt2YXIgaD10W3VdO2NbdV09ZnJbbF0uc2hhbGxvdy5pbmRleE9mKHUpPj0wP2g6Z3IoaCxlKX10IGluc3RhbmNlb2YgRXJyb3ImJihjLm1lc3NhZ2U9dC5tZXNzYWdlKX1yZXR1cm57bmFtZTpsLHByb3BlcnRpZXM6Y319dGhyb3cgbmV3IEVycm9yKFwiY2FuJ3Qgc2VyaWFsaXplIG9iamVjdCBvZiB0eXBlIFwiK3R5cGVvZiB0KX1mdW5jdGlvbiB2cih0KXtpZihudWxsPT10fHxcImJvb2xlYW5cIj09dHlwZW9mIHR8fFwibnVtYmVyXCI9PXR5cGVvZiB0fHxcInN0cmluZ1wiPT10eXBlb2YgdHx8dCBpbnN0YW5jZW9mIEJvb2xlYW58fHQgaW5zdGFuY2VvZiBOdW1iZXJ8fHQgaW5zdGFuY2VvZiBTdHJpbmd8fHQgaW5zdGFuY2VvZiBEYXRlfHx0IGluc3RhbmNlb2YgUmVnRXhwfHx0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fEFycmF5QnVmZmVyLmlzVmlldyh0KXx8dCBpbnN0YW5jZW9mIGhyKXJldHVybiB0O2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB2cih0KX0pO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KXt2YXIgZT10LHI9ZS5uYW1lLG49ZS5wcm9wZXJ0aWVzO2lmKCFyKXRocm93IG5ldyBFcnJvcihcImNhbid0IGRlc2VyaWFsaXplIG9iamVjdCBvZiBhbm9ueW1vdXMgY2xhc3NcIik7dmFyIGk9ZnJbcl0ua2xhc3M7aWYoIWkpdGhyb3cgbmV3IEVycm9yKFwiY2FuJ3QgZGVzZXJpYWxpemUgdW5yZWdpc3RlcmVkIGNsYXNzIFwiK3IpO2lmKGkuZGVzZXJpYWxpemUpcmV0dXJuIGkuZGVzZXJpYWxpemUobi5fc2VyaWFsaXplZCk7Zm9yKHZhciBhPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLG89MCxzPU9iamVjdC5rZXlzKG4pO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXTthW2xdPWZyW3JdLnNoYWxsb3cuaW5kZXhPZihsKT49MD9uW2xdOnZyKG5bbF0pfXJldHVybiBhfXRocm93IG5ldyBFcnJvcihcImNhbid0IGRlc2VyaWFsaXplIG9iamVjdCBvZiB0eXBlIFwiK3R5cGVvZiB0KX12YXIgbXI9ZnVuY3Rpb24oKXt0aGlzLmZpcnN0PSEwfTttci5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5mbG9vcih0KTtyZXR1cm4gdGhpcy5maXJzdD8odGhpcy5maXJzdD0hMSx0aGlzLmxhc3RJbnRlZ2VyWm9vbT1yLHRoaXMubGFzdEludGVnZXJab29tVGltZT0wLHRoaXMubGFzdFpvb209dCx0aGlzLmxhc3RGbG9vclpvb209ciwhMCk6KHRoaXMubGFzdEZsb29yWm9vbT5yPyh0aGlzLmxhc3RJbnRlZ2VyWm9vbT1yKzEsdGhpcy5sYXN0SW50ZWdlclpvb21UaW1lPWUpOnRoaXMubGFzdEZsb29yWm9vbTxyJiYodGhpcy5sYXN0SW50ZWdlclpvb209cix0aGlzLmxhc3RJbnRlZ2VyWm9vbVRpbWU9ZSksdCE9PXRoaXMubGFzdFpvb20mJih0aGlzLmxhc3Rab29tPXQsdGhpcy5sYXN0Rmxvb3Jab29tPXIsITApKX07dmFyIHlyPXtcIkxhdGluLTEgU3VwcGxlbWVudFwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjgmJnQ8PTI1NX0sQXJhYmljOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xNTM2JiZ0PD0xNzkxfSxcIkFyYWJpYyBTdXBwbGVtZW50XCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTE4NzImJnQ8PTE5MTl9LFwiQXJhYmljIEV4dGVuZGVkLUFcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MjIwOCYmdDw9MjMwM30sXCJIYW5ndWwgSmFtb1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj00MzUyJiZ0PD00NjA3fSxcIlVuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3NcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NTEyMCYmdDw9NTc1OX0sS2htZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTYwMTYmJnQ8PTYxNDN9LFwiVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyBFeHRlbmRlZFwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02MzIwJiZ0PD02Mzk5fSxcIkdlbmVyYWwgUHVuY3R1YXRpb25cIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49ODE5MiYmdDw9ODMwM30sXCJMZXR0ZXJsaWtlIFN5bWJvbHNcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49ODQ0OCYmdDw9ODUyN30sXCJOdW1iZXIgRm9ybXNcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49ODUyOCYmdDw9ODU5MX0sXCJNaXNjZWxsYW5lb3VzIFRlY2huaWNhbFwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj04OTYwJiZ0PD05MjE1fSxcIkNvbnRyb2wgUGljdHVyZXNcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49OTIxNiYmdDw9OTI3OX0sXCJPcHRpY2FsIENoYXJhY3RlciBSZWNvZ25pdGlvblwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj05MjgwJiZ0PD05MzExfSxcIkVuY2xvc2VkIEFscGhhbnVtZXJpY3NcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49OTMxMiYmdDw9OTQ3MX0sXCJHZW9tZXRyaWMgU2hhcGVzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTk2MzImJnQ8PTk3Mjd9LFwiTWlzY2VsbGFuZW91cyBTeW1ib2xzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTk3MjgmJnQ8PTk5ODN9LFwiTWlzY2VsbGFuZW91cyBTeW1ib2xzIGFuZCBBcnJvd3NcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTEwMDgmJnQ8PTExMjYzfSxcIkNKSyBSYWRpY2FscyBTdXBwbGVtZW50XCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTExOTA0JiZ0PD0xMjAzMX0sXCJLYW5neGkgUmFkaWNhbHNcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTIwMzImJnQ8PTEyMjU1fSxcIklkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnNcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTIyNzImJnQ8PTEyMjg3fSxcIkNKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvblwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjI4OCYmdDw9MTIzNTF9LEhpcmFnYW5hOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjM1MiYmdDw9MTI0NDd9LEthdGFrYW5hOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjQ0OCYmdDw9MTI1NDN9LEJvcG9tb2ZvOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjU0NCYmdDw9MTI1OTF9LFwiSGFuZ3VsIENvbXBhdGliaWxpdHkgSmFtb1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjU5MiYmdDw9MTI2ODd9LEthbmJ1bjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI2ODgmJnQ8PTEyNzAzfSxcIkJvcG9tb2ZvIEV4dGVuZGVkXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyNzA0JiZ0PD0xMjczNX0sXCJDSksgU3Ryb2tlc1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjczNiYmdDw9MTI3ODN9LFwiS2F0YWthbmEgUGhvbmV0aWMgRXh0ZW5zaW9uc1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjc4NCYmdDw9MTI3OTl9LFwiRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRoc1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjgwMCYmdDw9MTMwNTV9LFwiQ0pLIENvbXBhdGliaWxpdHlcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTMwNTYmJnQ8PTEzMzExfSxcIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEFcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTMzMTImJnQ8PTE5OTAzfSxcIllpamluZyBIZXhhZ3JhbSBTeW1ib2xzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTE5OTA0JiZ0PD0xOTk2N30sXCJDSksgVW5pZmllZCBJZGVvZ3JhcGhzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTE5OTY4JiZ0PD00MDk1OX0sXCJZaSBTeWxsYWJsZXNcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NDA5NjAmJnQ8PTQyMTI3fSxcIllpIFJhZGljYWxzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTQyMTI4JiZ0PD00MjE5MX0sXCJIYW5ndWwgSmFtbyBFeHRlbmRlZC1BXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTQzMzYwJiZ0PD00MzM5MX0sXCJIYW5ndWwgU3lsbGFibGVzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTQ0MDMyJiZ0PD01NTIxNX0sXCJIYW5ndWwgSmFtbyBFeHRlbmRlZC1CXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTU1MjE2JiZ0PD01NTI5NX0sXCJQcml2YXRlIFVzZSBBcmVhXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTU3MzQ0JiZ0PD02Mzc0M30sXCJDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTYzNzQ0JiZ0PD02NDI1NX0sXCJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUFcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjQzMzYmJnQ8PTY1MDIzfSxcIlZlcnRpY2FsIEZvcm1zXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY1MDQwJiZ0PD02NTA1NX0sXCJDSksgQ29tcGF0aWJpbGl0eSBGb3Jtc1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NTA3MiYmdDw9NjUxMDN9LFwiU21hbGwgRm9ybSBWYXJpYW50c1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NTEwNCYmdDw9NjUxMzV9LFwiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY1MTM2JiZ0PD02NTI3OX0sXCJIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3Jtc1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NTI4MCYmdDw9NjU1MTl9fTtmdW5jdGlvbiB4cih0KXtmb3IodmFyIGU9MCxyPXQ7ZTxyLmxlbmd0aDtlKz0xKWlmKF9yKHJbZV0uY2hhckNvZGVBdCgwKSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gYnIodCl7cmV0dXJuISh5ci5BcmFiaWModCl8fHlyW1wiQXJhYmljIFN1cHBsZW1lbnRcIl0odCl8fHlyW1wiQXJhYmljIEV4dGVuZGVkLUFcIl0odCl8fHlyW1wiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BXCJdKHQpfHx5cltcIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQlwiXSh0KSl9ZnVuY3Rpb24gX3IodCl7cmV0dXJuISEoNzQ2PT09dHx8NzQ3PT09dHx8ISh0PDQzNTIpJiYoeXJbXCJCb3BvbW9mbyBFeHRlbmRlZFwiXSh0KXx8eXIuQm9wb21vZm8odCl8fHlyW1wiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXNcIl0odCkmJiEodD49NjUwOTcmJnQ8PTY1MTAzKXx8eXJbXCJDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzXCJdKHQpfHx5cltcIkNKSyBDb21wYXRpYmlsaXR5XCJdKHQpfHx5cltcIkNKSyBSYWRpY2FscyBTdXBwbGVtZW50XCJdKHQpfHx5cltcIkNKSyBTdHJva2VzXCJdKHQpfHwhKCF5cltcIkNKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvblwiXSh0KXx8dD49MTIyOTYmJnQ8PTEyMzA1fHx0Pj0xMjMwOCYmdDw9MTIzMTl8fDEyMzM2PT09dCl8fHlyW1wiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQVwiXSh0KXx8eXJbXCJDSksgVW5pZmllZCBJZGVvZ3JhcGhzXCJdKHQpfHx5cltcIkVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHNcIl0odCl8fHlyW1wiSGFuZ3VsIENvbXBhdGliaWxpdHkgSmFtb1wiXSh0KXx8eXJbXCJIYW5ndWwgSmFtbyBFeHRlbmRlZC1BXCJdKHQpfHx5cltcIkhhbmd1bCBKYW1vIEV4dGVuZGVkLUJcIl0odCl8fHlyW1wiSGFuZ3VsIEphbW9cIl0odCl8fHlyW1wiSGFuZ3VsIFN5bGxhYmxlc1wiXSh0KXx8eXIuSGlyYWdhbmEodCl8fHlyW1wiSWRlb2dyYXBoaWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVyc1wiXSh0KXx8eXIuS2FuYnVuKHQpfHx5cltcIkthbmd4aSBSYWRpY2Fsc1wiXSh0KXx8eXJbXCJLYXRha2FuYSBQaG9uZXRpYyBFeHRlbnNpb25zXCJdKHQpfHx5ci5LYXRha2FuYSh0KSYmMTI1NDAhPT10fHwhKCF5cltcIkhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zXCJdKHQpfHw2NTI4OD09PXR8fDY1Mjg5PT09dHx8NjUyOTM9PT10fHx0Pj02NTMwNiYmdDw9NjUzMTB8fDY1MzM5PT09dHx8NjUzNDE9PT10fHw2NTM0Mz09PXR8fHQ+PTY1MzcxJiZ0PD02NTUwM3x8NjU1MDc9PT10fHx0Pj02NTUxMiYmdDw9NjU1MTkpfHwhKCF5cltcIlNtYWxsIEZvcm0gVmFyaWFudHNcIl0odCl8fHQ+PTY1MTEyJiZ0PD02NTExOHx8dD49NjUxMjMmJnQ8PTY1MTI2KXx8eXJbXCJVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzXCJdKHQpfHx5cltcIlVuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3MgRXh0ZW5kZWRcIl0odCl8fHlyW1wiVmVydGljYWwgRm9ybXNcIl0odCl8fHlyW1wiWWlqaW5nIEhleGFncmFtIFN5bWJvbHNcIl0odCl8fHlyW1wiWWkgU3lsbGFibGVzXCJdKHQpfHx5cltcIllpIFJhZGljYWxzXCJdKHQpKSl9ZnVuY3Rpb24gd3IodCl7cmV0dXJuIShfcih0KXx8ZnVuY3Rpb24odCl7cmV0dXJuISEoeXJbXCJMYXRpbi0xIFN1cHBsZW1lbnRcIl0odCkmJigxNjc9PT10fHwxNjk9PT10fHwxNzQ9PT10fHwxNzc9PT10fHwxODg9PT10fHwxODk9PT10fHwxOTA9PT10fHwyMTU9PT10fHwyNDc9PT10KXx8eXJbXCJHZW5lcmFsIFB1bmN0dWF0aW9uXCJdKHQpJiYoODIxND09PXR8fDgyMjQ9PT10fHw4MjI1PT09dHx8ODI0MD09PXR8fDgyNDE9PT10fHw4MjUxPT09dHx8ODI1Mj09PXR8fDgyNTg9PT10fHw4MjYzPT09dHx8ODI2ND09PXR8fDgyNjU9PT10fHw4MjczPT09dCl8fHlyW1wiTGV0dGVybGlrZSBTeW1ib2xzXCJdKHQpfHx5cltcIk51bWJlciBGb3Jtc1wiXSh0KXx8eXJbXCJNaXNjZWxsYW5lb3VzIFRlY2huaWNhbFwiXSh0KSYmKHQ+PTg5NjAmJnQ8PTg5Njd8fHQ+PTg5NzImJnQ8PTg5OTF8fHQ+PTg5OTYmJnQ8PTllM3x8OTAwMz09PXR8fHQ+PTkwODUmJnQ8PTkxMTR8fHQ+PTkxNTAmJnQ8PTkxNjV8fDkxNjc9PT10fHx0Pj05MTY5JiZ0PD05MTc5fHx0Pj05MTg2JiZ0PD05MjE1KXx8eXJbXCJDb250cm9sIFBpY3R1cmVzXCJdKHQpJiY5MjUxIT09dHx8eXJbXCJPcHRpY2FsIENoYXJhY3RlciBSZWNvZ25pdGlvblwiXSh0KXx8eXJbXCJFbmNsb3NlZCBBbHBoYW51bWVyaWNzXCJdKHQpfHx5cltcIkdlb21ldHJpYyBTaGFwZXNcIl0odCl8fHlyW1wiTWlzY2VsbGFuZW91cyBTeW1ib2xzXCJdKHQpJiYhKHQ+PTk3NTQmJnQ8PTk3NTkpfHx5cltcIk1pc2NlbGxhbmVvdXMgU3ltYm9scyBhbmQgQXJyb3dzXCJdKHQpJiYodD49MTEwMjYmJnQ8PTExMDU1fHx0Pj0xMTA4OCYmdDw9MTEwOTd8fHQ+PTExMTkyJiZ0PD0xMTI0Myl8fHlyW1wiQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uXCJdKHQpfHx5ci5LYXRha2FuYSh0KXx8eXJbXCJQcml2YXRlIFVzZSBBcmVhXCJdKHQpfHx5cltcIkNKSyBDb21wYXRpYmlsaXR5IEZvcm1zXCJdKHQpfHx5cltcIlNtYWxsIEZvcm0gVmFyaWFudHNcIl0odCl8fHlyW1wiSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXNcIl0odCl8fDg3MzQ9PT10fHw4NzU2PT09dHx8ODc1Nz09PXR8fHQ+PTk5ODQmJnQ8PTEwMDg3fHx0Pj0xMDEwMiYmdDw9MTAxMzF8fDY1NTMyPT09dHx8NjU1MzM9PT10KX0odCkpfWZ1bmN0aW9uIGtyKHQsZSl7cmV0dXJuISghZSYmKHQ+PTE0MjQmJnQ8PTIzMDN8fHlyW1wiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BXCJdKHQpfHx5cltcIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQlwiXSh0KSl8fHQ+PTIzMDQmJnQ8PTM1ODN8fHQ+PTM4NDAmJnQ8PTQyNTV8fHlyLktobWVyKHQpKX12YXIgQXIsVHI9ITEsTXI9bnVsbCxTcj0hMSxFcj1uZXcgTyxDcj17YXBwbHlBcmFiaWNTaGFwaW5nOm51bGwscHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0Om51bGwsaXNMb2FkZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gU3J8fG51bGwhPUNyLmFwcGx5QXJhYmljU2hhcGluZ319LExyPWZ1bmN0aW9uKHQsZSl7dGhpcy56b29tPXQsZT8odGhpcy5ub3c9ZS5ub3csdGhpcy5mYWRlRHVyYXRpb249ZS5mYWRlRHVyYXRpb24sdGhpcy56b29tSGlzdG9yeT1lLnpvb21IaXN0b3J5LHRoaXMudHJhbnNpdGlvbj1lLnRyYW5zaXRpb24pOih0aGlzLm5vdz0wLHRoaXMuZmFkZUR1cmF0aW9uPTAsdGhpcy56b29tSGlzdG9yeT1uZXcgbXIsdGhpcy50cmFuc2l0aW9uPXt9KX07THIucHJvdG90eXBlLmlzU3VwcG9ydGVkU2NyaXB0PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49dDtyPG4ubGVuZ3RoO3IrPTEpaWYoIWtyKG5bcl0uY2hhckNvZGVBdCgwKSxlKSlyZXR1cm4hMTtyZXR1cm4hMH0odCxDci5pc0xvYWRlZCgpKX0sTHIucHJvdG90eXBlLmNyb3NzRmFkaW5nRmFjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmZhZGVEdXJhdGlvbj8xOk1hdGgubWluKCh0aGlzLm5vdy10aGlzLnpvb21IaXN0b3J5Lmxhc3RJbnRlZ2VyWm9vbVRpbWUpL3RoaXMuZmFkZUR1cmF0aW9uLDEpfTt2YXIgenI9ZnVuY3Rpb24odCxlKXt0aGlzLnByb3BlcnR5PXQsdGhpcy52YWx1ZT1lLHRoaXMuZXhwcmVzc2lvbj1TZSh2b2lkIDA9PT1lP3Quc3BlY2lmaWNhdGlvbi5kZWZhdWx0OmUsdC5zcGVjaWZpY2F0aW9uKX07enIucHJvdG90eXBlLmlzRGF0YURyaXZlbj1mdW5jdGlvbigpe3JldHVyblwic291cmNlXCI9PT10aGlzLmV4cHJlc3Npb24ua2luZHx8XCJjb21wb3NpdGVcIj09PXRoaXMuZXhwcmVzc2lvbi5raW5kfSx6ci5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9wZXJ0eS5wb3NzaWJseUV2YWx1YXRlKHRoaXMsdCl9O3ZhciBPcj1mdW5jdGlvbih0KXt0aGlzLnByb3BlcnR5PXQsdGhpcy52YWx1ZT1uZXcgenIodCx2b2lkIDApfTtPci5wcm90b3R5cGUudHJhbnNpdGlvbmVkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBEcih0aGlzLnByb3BlcnR5LHRoaXMudmFsdWUsZSxwKHt9LHQudHJhbnNpdGlvbix0aGlzLnRyYW5zaXRpb24pLHQubm93KX0sT3IucHJvdG90eXBlLnVudHJhbnNpdGlvbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEcih0aGlzLnByb3BlcnR5LHRoaXMudmFsdWUsbnVsbCx7fSwwKX07dmFyIElyPWZ1bmN0aW9uKHQpe3RoaXMuX3Byb3BlcnRpZXM9dCx0aGlzLl92YWx1ZXM9T2JqZWN0LmNyZWF0ZSh0LmRlZmF1bHRUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVzKX07SXIucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB4KHRoaXMuX3ZhbHVlc1t0XS52YWx1ZS52YWx1ZSl9LElyLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3RoaXMuX3ZhbHVlcy5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuX3ZhbHVlc1t0XT1uZXcgT3IodGhpcy5fdmFsdWVzW3RdLnByb3BlcnR5KSksdGhpcy5fdmFsdWVzW3RdLnZhbHVlPW5ldyB6cih0aGlzLl92YWx1ZXNbdF0ucHJvcGVydHksbnVsbD09PWU/dm9pZCAwOngoZSkpfSxJci5wcm90b3R5cGUuZ2V0VHJhbnNpdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4geCh0aGlzLl92YWx1ZXNbdF0udHJhbnNpdGlvbil9LElyLnByb3RvdHlwZS5zZXRUcmFuc2l0aW9uPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmFsdWVzLmhhc093blByb3BlcnR5KHQpfHwodGhpcy5fdmFsdWVzW3RdPW5ldyBPcih0aGlzLl92YWx1ZXNbdF0ucHJvcGVydHkpKSx0aGlzLl92YWx1ZXNbdF0udHJhbnNpdGlvbj14KGUpfHx2b2lkIDB9LElyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sZT0wLHI9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0saT10aGlzLmdldFZhbHVlKG4pO3ZvaWQgMCE9PWkmJih0W25dPWkpO3ZhciBhPXRoaXMuZ2V0VHJhbnNpdGlvbihuKTt2b2lkIDAhPT1hJiYodFtuK1wiLXRyYW5zaXRpb25cIl09YSl9cmV0dXJuIHR9LElyLnByb3RvdHlwZS50cmFuc2l0aW9uZWQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IFByKHRoaXMuX3Byb3BlcnRpZXMpLG49MCxpPU9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcyk7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO3IuX3ZhbHVlc1thXT10aGlzLl92YWx1ZXNbYV0udHJhbnNpdGlvbmVkKHQsZS5fdmFsdWVzW2FdKX1yZXR1cm4gcn0sSXIucHJvdG90eXBlLnVudHJhbnNpdGlvbmVkPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBQcih0aGlzLl9wcm9wZXJ0aWVzKSxlPTAscj1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXTt0Ll92YWx1ZXNbbl09dGhpcy5fdmFsdWVzW25dLnVudHJhbnNpdGlvbmVkKCl9cmV0dXJuIHR9O3ZhciBEcj1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMucHJvcGVydHk9dCx0aGlzLnZhbHVlPWUsdGhpcy5iZWdpbj1pK24uZGVsYXl8fDAsdGhpcy5lbmQ9dGhpcy5iZWdpbituLmR1cmF0aW9ufHwwLHQuc3BlY2lmaWNhdGlvbi50cmFuc2l0aW9uJiYobi5kZWxheXx8bi5kdXJhdGlvbikmJih0aGlzLnByaW9yPXIpfTtEci5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10Lm5vd3x8MCxyPXRoaXMudmFsdWUucG9zc2libHlFdmFsdWF0ZSh0KSxuPXRoaXMucHJpb3I7aWYobil7aWYoZT50aGlzLmVuZClyZXR1cm4gdGhpcy5wcmlvcj1udWxsLHI7aWYodGhpcy52YWx1ZS5pc0RhdGFEcml2ZW4oKSlyZXR1cm4gdGhpcy5wcmlvcj1udWxsLHI7aWYoZTx0aGlzLmJlZ2luKXJldHVybiBuLnBvc3NpYmx5RXZhbHVhdGUodCk7dmFyIGk9KGUtdGhpcy5iZWdpbikvKHRoaXMuZW5kLXRoaXMuYmVnaW4pO3JldHVybiB0aGlzLnByb3BlcnR5LmludGVycG9sYXRlKG4ucG9zc2libHlFdmFsdWF0ZSh0KSxyLGZ1bmN0aW9uKHQpe2lmKGk8PTApcmV0dXJuIDA7aWYoaT49MSlyZXR1cm4gMTt2YXIgZT1pKmkscj1lKmk7cmV0dXJuIDQqKGk8LjU/cjozKihpLWUpK3ItLjc1KX0oKSl9cmV0dXJuIHJ9O3ZhciBQcj1mdW5jdGlvbih0KXt0aGlzLl9wcm9wZXJ0aWVzPXQsdGhpcy5fdmFsdWVzPU9iamVjdC5jcmVhdGUodC5kZWZhdWx0VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzKX07UHIucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBCcih0aGlzLl9wcm9wZXJ0aWVzKSxyPTAsbj1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXTtlLl92YWx1ZXNbaV09dGhpcy5fdmFsdWVzW2ldLnBvc3NpYmx5RXZhbHVhdGUodCl9cmV0dXJuIGV9LFByLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO3Q8ZS5sZW5ndGg7dCs9MSl7dmFyIHI9ZVt0XTtpZih0aGlzLl92YWx1ZXNbcl0ucHJpb3IpcmV0dXJuITB9cmV0dXJuITF9O3ZhciBScj1mdW5jdGlvbih0KXt0aGlzLl9wcm9wZXJ0aWVzPXQsdGhpcy5fdmFsdWVzPU9iamVjdC5jcmVhdGUodC5kZWZhdWx0UHJvcGVydHlWYWx1ZXMpfTtSci5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHgodGhpcy5fdmFsdWVzW3RdLnZhbHVlKX0sUnIucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmFsdWVzW3RdPW5ldyB6cih0aGlzLl92YWx1ZXNbdF0ucHJvcGVydHksbnVsbD09PWU/dm9pZCAwOngoZSkpfSxSci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXt9LGU9MCxyPU9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcyk7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9dGhpcy5nZXRWYWx1ZShuKTt2b2lkIDAhPT1pJiYodFtuXT1pKX1yZXR1cm4gdH0sUnIucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBCcih0aGlzLl9wcm9wZXJ0aWVzKSxyPTAsbj1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXTtlLl92YWx1ZXNbaV09dGhpcy5fdmFsdWVzW2ldLnBvc3NpYmx5RXZhbHVhdGUodCl9cmV0dXJuIGV9O3ZhciBGcj1mdW5jdGlvbih0LGUscil7dGhpcy5wcm9wZXJ0eT10LHRoaXMudmFsdWU9ZSx0aGlzLmdsb2JhbHM9cn07RnIucHJvdG90eXBlLmlzQ29uc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm5cImNvbnN0YW50XCI9PT10aGlzLnZhbHVlLmtpbmR9LEZyLnByb3RvdHlwZS5jb25zdGFudE9yPWZ1bmN0aW9uKHQpe3JldHVyblwiY29uc3RhbnRcIj09PXRoaXMudmFsdWUua2luZD90aGlzLnZhbHVlLnZhbHVlOnR9LEZyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9wZXJ0eS5ldmFsdWF0ZSh0aGlzLnZhbHVlLHRoaXMuZ2xvYmFscyx0KX07dmFyIEJyPWZ1bmN0aW9uKHQpe3RoaXMuX3Byb3BlcnRpZXM9dCx0aGlzLl92YWx1ZXM9T2JqZWN0LmNyZWF0ZSh0LmRlZmF1bHRQb3NzaWJseUV2YWx1YXRlZFZhbHVlcyl9O0JyLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbHVlc1t0XX07dmFyIE5yPWZ1bmN0aW9uKHQpe3RoaXMuc3BlY2lmaWNhdGlvbj10fTtOci5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmV4cHJlc3Npb24uZXZhbHVhdGUoZSl9LE5yLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49a3RbdGhpcy5zcGVjaWZpY2F0aW9uLnR5cGVdO3JldHVybiBuP24odCxlLHIpOnR9O3ZhciBqcj1mdW5jdGlvbih0KXt0aGlzLnNwZWNpZmljYXRpb249dH07anIucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm5cImNvbnN0YW50XCI9PT10LmV4cHJlc3Npb24ua2luZHx8XCJjYW1lcmFcIj09PXQuZXhwcmVzc2lvbi5raW5kP25ldyBGcih0aGlzLHtraW5kOlwiY29uc3RhbnRcIix2YWx1ZTp0LmV4cHJlc3Npb24uZXZhbHVhdGUoZSl9LGUpOm5ldyBGcih0aGlzLHQuZXhwcmVzc2lvbixlKX0sanIucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZihcImNvbnN0YW50XCIhPT10LnZhbHVlLmtpbmR8fFwiY29uc3RhbnRcIiE9PWUudmFsdWUua2luZClyZXR1cm4gdDtpZih2b2lkIDA9PT10LnZhbHVlLnZhbHVlfHx2b2lkIDA9PT1lLnZhbHVlLnZhbHVlKXJldHVybiBuZXcgRnIodGhpcyx7a2luZDpcImNvbnN0YW50XCIsdmFsdWU6dm9pZCAwfSx0Lmdsb2JhbHMpO3ZhciBuPWt0W3RoaXMuc3BlY2lmaWNhdGlvbi50eXBlXTtyZXR1cm4gbj9uZXcgRnIodGhpcyx7a2luZDpcImNvbnN0YW50XCIsdmFsdWU6bih0LnZhbHVlLnZhbHVlLGUudmFsdWUudmFsdWUscil9LHQuZ2xvYmFscyk6dH0sanIucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5cImNvbnN0YW50XCI9PT10LmtpbmQ/dC52YWx1ZTp0LmV2YWx1YXRlKGUscil9O3ZhciBWcj1mdW5jdGlvbih0KXt0aGlzLnNwZWNpZmljYXRpb249dH07VnIucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDAhPT10LnZhbHVlKXtpZihcImNvbnN0YW50XCI9PT10LmV4cHJlc3Npb24ua2luZCl7dmFyIHI9dC5leHByZXNzaW9uLmV2YWx1YXRlKGUpO3JldHVybiB0aGlzLl9jYWxjdWxhdGUocixyLHIsZSl9cmV0dXJuIHRoaXMuX2NhbGN1bGF0ZSh0LmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IExyKE1hdGguZmxvb3IoZS56b29tLTEpLGUpKSx0LmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IExyKE1hdGguZmxvb3IoZS56b29tKSxlKSksdC5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBMcihNYXRoLmZsb29yKGUuem9vbSsxKSxlKSksZSl9fSxWci5wcm90b3R5cGUuX2NhbGN1bGF0ZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLnpvb20sYT1pLU1hdGguZmxvb3IoaSksbz1uLmNyb3NzRmFkaW5nRmFjdG9yKCk7cmV0dXJuIGk+bi56b29tSGlzdG9yeS5sYXN0SW50ZWdlclpvb20/e2Zyb206dCx0bzplLGZyb21TY2FsZToyLHRvU2NhbGU6MSx0OmErKDEtYSkqb306e2Zyb206cix0bzplLGZyb21TY2FsZTouNSx0b1NjYWxlOjEsdDoxLSgxLW8pKmF9fSxWci5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHR9O3ZhciBVcj1mdW5jdGlvbih0KXt0aGlzLnNwZWNpZmljYXRpb249dH07VXIucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4hIXQuZXhwcmVzc2lvbi5ldmFsdWF0ZShlKX0sVXIucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKCl7cmV0dXJuITF9O3ZhciBxcj1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5wcm9wZXJ0aWVzPXQsdGhpcy5kZWZhdWx0UHJvcGVydHlWYWx1ZXM9e30sdGhpcy5kZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlcz17fSx0aGlzLmRlZmF1bHRUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXM9e30sdGhpcy5kZWZhdWx0UG9zc2libHlFdmFsdWF0ZWRWYWx1ZXM9e30sdCl7dmFyIHI9dFtlXSxuPXRoaXMuZGVmYXVsdFByb3BlcnR5VmFsdWVzW2VdPW5ldyB6cihyLHZvaWQgMCksaT10aGlzLmRlZmF1bHRUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVzW2VdPW5ldyBPcihyKTt0aGlzLmRlZmF1bHRUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXNbZV09aS51bnRyYW5zaXRpb25lZCgpLHRoaXMuZGVmYXVsdFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVzW2VdPW4ucG9zc2libHlFdmFsdWF0ZSh7fSl9fTtwcihcIkRhdGFEcml2ZW5Qcm9wZXJ0eVwiLGpyKSxwcihcIkRhdGFDb25zdGFudFByb3BlcnR5XCIsTnIpLHByKFwiQ3Jvc3NGYWRlZFByb3BlcnR5XCIsVnIpLHByKFwiQ29sb3JSYW1wUHJvcGVydHlcIixVcik7dmFyIEhyPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXtmb3IodmFyIG4gaW4gdC5jYWxsKHRoaXMpLHRoaXMuaWQ9ZS5pZCx0aGlzLm1ldGFkYXRhPWUubWV0YWRhdGEsdGhpcy50eXBlPWUudHlwZSx0aGlzLm1pbnpvb209ZS5taW56b29tLHRoaXMubWF4em9vbT1lLm1heHpvb20sdGhpcy52aXNpYmlsaXR5PVwidmlzaWJsZVwiLFwiYmFja2dyb3VuZFwiIT09ZS50eXBlJiYodGhpcy5zb3VyY2U9ZS5zb3VyY2UsdGhpcy5zb3VyY2VMYXllcj1lW1wic291cmNlLWxheWVyXCJdLHRoaXMuZmlsdGVyPWUuZmlsdGVyKSx0aGlzLl9mZWF0dXJlRmlsdGVyPWZ1bmN0aW9uKCl7cmV0dXJuITB9LHIubGF5b3V0JiYodGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQ9bmV3IFJyKHIubGF5b3V0KSksdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludD1uZXcgSXIoci5wYWludCksZS5wYWludCl0aGlzLnNldFBhaW50UHJvcGVydHkobixlLnBhaW50W25dLHt2YWxpZGF0ZTohMX0pO2Zvcih2YXIgaSBpbiBlLmxheW91dCl0aGlzLnNldExheW91dFByb3BlcnR5KGksZS5sYXlvdXRbaV0se3ZhbGlkYXRlOiExfSk7dGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50PXRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQudW50cmFuc2l0aW9uZWQoKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24odCl7cmV0dXJuXCJ2aXNpYmlsaXR5XCI9PT10P3RoaXMudmlzaWJpbGl0eTp0aGlzLl91bmV2YWx1YXRlZExheW91dC5nZXRWYWx1ZSh0KX0sZS5wcm90b3R5cGUuc2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe2lmKG51bGwhPWUpe3ZhciBuPVwibGF5ZXJzLlwiK3RoaXMuaWQrXCIubGF5b3V0LlwiK3Q7aWYodGhpcy5fdmFsaWRhdGUob3Isbix0LGUscikpcmV0dXJufVwidmlzaWJpbGl0eVwiIT09dD90aGlzLl91bmV2YWx1YXRlZExheW91dC5zZXRWYWx1ZSh0LGUpOnRoaXMudmlzaWJpbGl0eT1cIm5vbmVcIj09PWU/ZTpcInZpc2libGVcIn0sZS5wcm90b3R5cGUuZ2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbih0KXtyZXR1cm4gdih0LFwiLXRyYW5zaXRpb25cIik/dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5nZXRUcmFuc2l0aW9uKHQuc2xpY2UoMCwtXCItdHJhbnNpdGlvblwiLmxlbmd0aCkpOnRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuZ2V0VmFsdWUodCl9LGUucHJvdG90eXBlLnNldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe2lmKG51bGwhPWUpe3ZhciBuPVwibGF5ZXJzLlwiK3RoaXMuaWQrXCIucGFpbnQuXCIrdDtpZih0aGlzLl92YWxpZGF0ZShhcixuLHQsZSxyKSlyZXR1cm59dih0LFwiLXRyYW5zaXRpb25cIik/dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5zZXRUcmFuc2l0aW9uKHQuc2xpY2UoMCwtXCItdHJhbnNpdGlvblwiLmxlbmd0aCksZXx8dm9pZCAwKTp0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LnNldFZhbHVlKHQsZSl9LGUucHJvdG90eXBlLmlzSGlkZGVuPWZ1bmN0aW9uKHQpe3JldHVybiEhKHRoaXMubWluem9vbSYmdDx0aGlzLm1pbnpvb20pfHwhISh0aGlzLm1heHpvb20mJnQ+PXRoaXMubWF4em9vbSl8fFwibm9uZVwiPT09dGhpcy52aXNpYmlsaXR5fSxlLnByb3RvdHlwZS51cGRhdGVUcmFuc2l0aW9ucz1mdW5jdGlvbih0KXt0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQ9dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC50cmFuc2l0aW9uZWQodCx0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQpfSxlLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25pbmdQYWludC5oYXNUcmFuc2l0aW9uKCl9LGUucHJvdG90eXBlLnJlY2FsY3VsYXRlPWZ1bmN0aW9uKHQpe3RoaXMuX3VuZXZhbHVhdGVkTGF5b3V0JiYodGhpcy5sYXlvdXQ9dGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQucG9zc2libHlFdmFsdWF0ZSh0KSksdGhpcy5wYWludD10aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQucG9zc2libHlFdmFsdWF0ZSh0KX0sZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9e2lkOnRoaXMuaWQsdHlwZTp0aGlzLnR5cGUsc291cmNlOnRoaXMuc291cmNlLFwic291cmNlLWxheWVyXCI6dGhpcy5zb3VyY2VMYXllcixtZXRhZGF0YTp0aGlzLm1ldGFkYXRhLG1pbnpvb206dGhpcy5taW56b29tLG1heHpvb206dGhpcy5tYXh6b29tLGZpbHRlcjp0aGlzLmZpbHRlcixsYXlvdXQ6dGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQmJnRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0LnNlcmlhbGl6ZSgpLHBhaW50OnRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQmJnRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuc2VyaWFsaXplKCl9O3JldHVyblwibm9uZVwiPT09dGhpcy52aXNpYmlsaXR5JiYodC5sYXlvdXQ9dC5sYXlvdXR8fHt9LHQubGF5b3V0LnZpc2liaWxpdHk9XCJub25lXCIpLHkodCxmdW5jdGlvbih0LGUpe3JldHVybiEodm9pZCAwPT09dHx8XCJsYXlvdXRcIj09PWUmJiFPYmplY3Qua2V5cyh0KS5sZW5ndGh8fFwicGFpbnRcIj09PWUmJiFPYmplY3Qua2V5cyh0KS5sZW5ndGgpfSl9LGUucHJvdG90eXBlLl92YWxpZGF0ZT1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybighaXx8ITEhPT1pLnZhbGlkYXRlKSYmc3IodGhpcyx0LmNhbGwobnIse2tleTplLGxheWVyVHlwZTp0aGlzLnR5cGUsb2JqZWN0S2V5OnIsdmFsdWU6bixzdHlsZVNwZWM6SSxzdHlsZTp7Z2x5cGhzOiEwLHNwcml0ZTohMH19KSl9LGUucHJvdG90eXBlLmhhc09mZnNjcmVlblBhc3M9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKCl7fSxlfShPKSxHcj17SW50ODpJbnQ4QXJyYXksVWludDg6VWludDhBcnJheSxJbnQxNjpJbnQxNkFycmF5LFVpbnQxNjpVaW50MTZBcnJheSxJbnQzMjpJbnQzMkFycmF5LFVpbnQzMjpVaW50MzJBcnJheSxGbG9hdDMyOkZsb2F0MzJBcnJheX0sWXI9ZnVuY3Rpb24odCxlKXt0aGlzLl9zdHJ1Y3RBcnJheT10LHRoaXMuX3BvczE9ZSp0aGlzLnNpemUsdGhpcy5fcG9zMj10aGlzLl9wb3MxLzIsdGhpcy5fcG9zND10aGlzLl9wb3MxLzQsdGhpcy5fcG9zOD10aGlzLl9wb3MxLzh9LFdyPWZ1bmN0aW9uKCl7dGhpcy5pc1RyYW5zZmVycmVkPSExLHRoaXMuY2FwYWNpdHk9LTEsdGhpcy5yZXNpemUoMCl9O2Z1bmN0aW9uIFhyKHQsZSl7dm9pZCAwPT09ZSYmKGU9MSk7dmFyIHI9MCxuPTA7cmV0dXJue21lbWJlcnM6dC5tYXAoZnVuY3Rpb24odCl7dmFyIGksYT0oaT10LnR5cGUsR3JbaV0uQllURVNfUEVSX0VMRU1FTlQpLG89cj1acihyLE1hdGgubWF4KGUsYSkpLHM9dC5jb21wb25lbnRzfHwxO3JldHVybiBuPU1hdGgubWF4KG4sYSkscis9YSpzLHtuYW1lOnQubmFtZSx0eXBlOnQudHlwZSxjb21wb25lbnRzOnMsb2Zmc2V0Om99fSksc2l6ZTpacihyLE1hdGgubWF4KG4sZSkpLGFsaWdubWVudDplfX1mdW5jdGlvbiBacih0LGUpe3JldHVybiBNYXRoLmNlaWwodC9lKSplfVdyLnNlcmlhbGl6ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0Ll90cmltKCksZSYmKHQuaXNUcmFuc2ZlcnJlZD0hMCxlLnB1c2godC5hcnJheUJ1ZmZlcikpLHtsZW5ndGg6dC5sZW5ndGgsYXJyYXlCdWZmZXI6dC5hcnJheUJ1ZmZlcn19LFdyLmRlc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdC5jcmVhdGUodGhpcy5wcm90b3R5cGUpO3JldHVybiBlLmFycmF5QnVmZmVyPXQuYXJyYXlCdWZmZXIsZS5sZW5ndGg9dC5sZW5ndGgsZS5jYXBhY2l0eT10LmFycmF5QnVmZmVyLmJ5dGVMZW5ndGgvZS5ieXRlc1BlckVsZW1lbnQsZS5fcmVmcmVzaFZpZXdzKCksZX0sV3IucHJvdG90eXBlLl90cmltPWZ1bmN0aW9uKCl7dGhpcy5sZW5ndGghPT10aGlzLmNhcGFjaXR5JiYodGhpcy5jYXBhY2l0eT10aGlzLmxlbmd0aCx0aGlzLmFycmF5QnVmZmVyPXRoaXMuYXJyYXlCdWZmZXIuc2xpY2UoMCx0aGlzLmxlbmd0aCp0aGlzLmJ5dGVzUGVyRWxlbWVudCksdGhpcy5fcmVmcmVzaFZpZXdzKCkpfSxXci5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmxlbmd0aD0wfSxXci5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQpe3RoaXMucmVzZXJ2ZSh0KSx0aGlzLmxlbmd0aD10fSxXci5wcm90b3R5cGUucmVzZXJ2ZT1mdW5jdGlvbih0KXtpZih0PnRoaXMuY2FwYWNpdHkpe3RoaXMuY2FwYWNpdHk9TWF0aC5tYXgodCxNYXRoLmZsb29yKDUqdGhpcy5jYXBhY2l0eSksMTI4KSx0aGlzLmFycmF5QnVmZmVyPW5ldyBBcnJheUJ1ZmZlcih0aGlzLmNhcGFjaXR5KnRoaXMuYnl0ZXNQZXJFbGVtZW50KTt2YXIgZT10aGlzLnVpbnQ4O3RoaXMuX3JlZnJlc2hWaWV3cygpLGUmJnRoaXMudWludDguc2V0KGUpfX0sV3IucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJfcmVmcmVzaFZpZXdzKCkgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIGNvbmNyZXRlIFN0cnVjdEFycmF5IGxheW91dFwiKX07dmFyICRyPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShyKzEpO3ZhciBuPTIqcjtyZXR1cm4gdGhpcy5pbnQxNltuKzBdPXQsdGhpcy5pbnQxNltuKzFdPWUscn0sZX0oV3IpOyRyLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NCxwcihcIlN0cnVjdEFycmF5TGF5b3V0Mmk0XCIsJHIpO3ZhciBKcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKGkrMSk7dmFyIGE9NCppO3JldHVybiB0aGlzLmludDE2W2ErMF09dCx0aGlzLmludDE2W2ErMV09ZSx0aGlzLmludDE2W2ErMl09cix0aGlzLmludDE2W2ErM109bixpfSxlfShXcik7SnIucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD04LHByKFwiU3RydWN0QXJyYXlMYXlvdXQ0aThcIixKcik7dmFyIEtyPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKG8rMSk7dmFyIHM9NipvO3JldHVybiB0aGlzLmludDE2W3MrMF09dCx0aGlzLmludDE2W3MrMV09ZSx0aGlzLmludDE2W3MrMl09cix0aGlzLmludDE2W3MrM109bix0aGlzLmludDE2W3MrNF09aSx0aGlzLmludDE2W3MrNV09YSxvfSxlfShXcik7S3IucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0xMixwcihcIlN0cnVjdEFycmF5TGF5b3V0Mmk0aTEyXCIsS3IpO3ZhciBRcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUobCsxKTt2YXIgYz02KmwsdT0xMipsO3JldHVybiB0aGlzLmludDE2W2MrMF09dCx0aGlzLmludDE2W2MrMV09ZSx0aGlzLmludDE2W2MrMl09cix0aGlzLmludDE2W2MrM109bix0aGlzLnVpbnQ4W3UrOF09aSx0aGlzLnVpbnQ4W3UrOV09YSx0aGlzLnVpbnQ4W3UrMTBdPW8sdGhpcy51aW50OFt1KzExXT1zLGx9LGV9KFdyKTtRci5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTEyLHByKFwiU3RydWN0QXJyYXlMYXlvdXQ0aTR1YjEyXCIsUXIpO3ZhciB0bj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3ZhciBsPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKGwrMSk7dmFyIGM9OCpsO3JldHVybiB0aGlzLmludDE2W2MrMF09dCx0aGlzLmludDE2W2MrMV09ZSx0aGlzLmludDE2W2MrMl09cix0aGlzLmludDE2W2MrM109bix0aGlzLnVpbnQxNltjKzRdPWksdGhpcy51aW50MTZbYys1XT1hLHRoaXMudWludDE2W2MrNl09byx0aGlzLnVpbnQxNltjKzddPXMsbH0sZX0oV3IpO3RuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTYscHIoXCJTdHJ1Y3RBcnJheUxheW91dDRpNHVpMTZcIix0bik7dmFyIGVuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShuKzEpO3ZhciBpPTMqbjtyZXR1cm4gdGhpcy5mbG9hdDMyW2krMF09dCx0aGlzLmZsb2F0MzJbaSsxXT1lLHRoaXMuZmxvYXQzMltpKzJdPXIsbn0sZX0oV3IpO2VuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTIscHIoXCJTdHJ1Y3RBcnJheUxheW91dDNmMTJcIixlbik7dmFyIHJuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MzI9bmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShlKzEpO3ZhciByPTEqZTtyZXR1cm4gdGhpcy51aW50MzJbciswXT10LGV9LGV9KFdyKTtybi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTQscHIoXCJTdHJ1Y3RBcnJheUxheW91dDF1bDRcIixybik7dmFyIG5uPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQzMj1uZXcgVWludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUpe3ZhciBoPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKGgrMSk7dmFyIGY9MTIqaCxwPTYqaDtyZXR1cm4gdGhpcy5pbnQxNltmKzBdPXQsdGhpcy5pbnQxNltmKzFdPWUsdGhpcy5pbnQxNltmKzJdPXIsdGhpcy5pbnQxNltmKzNdPW4sdGhpcy5pbnQxNltmKzRdPWksdGhpcy5pbnQxNltmKzVdPWEsdGhpcy51aW50MzJbcCszXT1vLHRoaXMudWludDE2W2YrOF09cyx0aGlzLnVpbnQxNltmKzldPWwsdGhpcy5pbnQxNltmKzEwXT1jLHRoaXMuaW50MTZbZisxMV09dSxofSxlfShXcik7bm4ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0yNCxwcihcIlN0cnVjdEFycmF5TGF5b3V0NmkxdWwydWkyaTI0XCIsbm4pO3ZhciBhbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShvKzEpO3ZhciBzPTYqbztyZXR1cm4gdGhpcy5pbnQxNltzKzBdPXQsdGhpcy5pbnQxNltzKzFdPWUsdGhpcy5pbnQxNltzKzJdPXIsdGhpcy5pbnQxNltzKzNdPW4sdGhpcy5pbnQxNltzKzRdPWksdGhpcy5pbnQxNltzKzVdPWEsb30sZX0oV3IpO2FuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTIscHIoXCJTdHJ1Y3RBcnJheUxheW91dDJpMmkyaTEyXCIsYW4pO3ZhciBvbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKHIrMSk7dmFyIG49NCpyO3JldHVybiB0aGlzLnVpbnQ4W24rMF09dCx0aGlzLnVpbnQ4W24rMV09ZSxyfSxlfShXcik7b24ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD00LHByKFwiU3RydWN0QXJyYXlMYXlvdXQydWI0XCIsb24pO3ZhciBzbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDMyPW5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGgsZixwKXt2YXIgZD10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShkKzEpO3ZhciBnPTIwKmQsdj0xMCpkLG09NDAqZDtyZXR1cm4gdGhpcy5pbnQxNltnKzBdPXQsdGhpcy5pbnQxNltnKzFdPWUsdGhpcy51aW50MTZbZysyXT1yLHRoaXMudWludDE2W2crM109bix0aGlzLnVpbnQzMlt2KzJdPWksdGhpcy51aW50MzJbdiszXT1hLHRoaXMudWludDMyW3YrNF09byx0aGlzLnVpbnQxNltnKzEwXT1zLHRoaXMudWludDE2W2crMTFdPWwsdGhpcy51aW50MTZbZysxMl09Yyx0aGlzLmZsb2F0MzJbdis3XT11LHRoaXMuZmxvYXQzMlt2KzhdPWgsdGhpcy51aW50OFttKzM2XT1mLHRoaXMudWludDhbbSszN109cCxkfSxlfShXcik7c24ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD00MCxwcihcIlN0cnVjdEFycmF5TGF5b3V0MmkydWkzdWwzdWkyZjJ1YjQwXCIsc24pO3ZhciBsbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShlKzEpO3ZhciByPTEqZTtyZXR1cm4gdGhpcy5mbG9hdDMyW3IrMF09dCxlfSxlfShXcik7bG4ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD00LHByKFwiU3RydWN0QXJyYXlMYXlvdXQxZjRcIixsbik7dmFyIGNuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKG4rMSk7dmFyIGk9MypuO3JldHVybiB0aGlzLmludDE2W2krMF09dCx0aGlzLmludDE2W2krMV09ZSx0aGlzLmludDE2W2krMl09cixufSxlfShXcik7Y24ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD02LHByKFwiU3RydWN0QXJyYXlMYXlvdXQzaTZcIixjbik7dmFyIHVuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MzI9bmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKG4rMSk7dmFyIGk9MipuLGE9NCpuO3JldHVybiB0aGlzLnVpbnQzMltpKzBdPXQsdGhpcy51aW50MTZbYSsyXT1lLHRoaXMudWludDE2W2ErM109cixufSxlfShXcik7dW4ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD04LHByKFwiU3RydWN0QXJyYXlMYXlvdXQxdWwydWk4XCIsdW4pO3ZhciBobj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKG4rMSk7dmFyIGk9MypuO3JldHVybiB0aGlzLnVpbnQxNltpKzBdPXQsdGhpcy51aW50MTZbaSsxXT1lLHRoaXMudWludDE2W2krMl09cixufSxlfShXcik7aG4ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD02LHByKFwiU3RydWN0QXJyYXlMYXlvdXQzdWk2XCIsaG4pO3ZhciBmbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShyKzEpO3ZhciBuPTIqcjtyZXR1cm4gdGhpcy51aW50MTZbbiswXT10LHRoaXMudWludDE2W24rMV09ZSxyfSxlfShXcik7Zm4ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD00LHByKFwiU3RydWN0QXJyYXlMYXlvdXQydWk0XCIsZm4pO3ZhciBwbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKHIrMSk7dmFyIG49MipyO3JldHVybiB0aGlzLmZsb2F0MzJbbiswXT10LHRoaXMuZmxvYXQzMltuKzFdPWUscn0sZX0oV3IpO3BuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9OCxwcihcIlN0cnVjdEFycmF5TGF5b3V0MmY4XCIscG4pO3ZhciBkbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShpKzEpO3ZhciBhPTQqaTtyZXR1cm4gdGhpcy5mbG9hdDMyW2ErMF09dCx0aGlzLmZsb2F0MzJbYSsxXT1lLHRoaXMuZmxvYXQzMlthKzJdPXIsdGhpcy5mbG9hdDMyW2ErM109bixpfSxlfShXcik7ZG4ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0xNixwcihcIlN0cnVjdEFycmF5TGF5b3V0NGYxNlwiLGRuKTt2YXIgZ249ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lO3ZhciByPXthbmNob3JQb2ludFg6e2NvbmZpZ3VyYWJsZTohMH0sYW5jaG9yUG9pbnRZOntjb25maWd1cmFibGU6ITB9LHgxOntjb25maWd1cmFibGU6ITB9LHkxOntjb25maWd1cmFibGU6ITB9LHgyOntjb25maWd1cmFibGU6ITB9LHkyOntjb25maWd1cmFibGU6ITB9LGZlYXR1cmVJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxzb3VyY2VMYXllckluZGV4Ontjb25maWd1cmFibGU6ITB9LGJ1Y2tldEluZGV4Ontjb25maWd1cmFibGU6ITB9LHJhZGl1czp7Y29uZmlndXJhYmxlOiEwfSxzaWduZWREaXN0YW5jZUZyb21BbmNob3I6e2NvbmZpZ3VyYWJsZTohMH0sYW5jaG9yUG9pbnQ6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiByLmFuY2hvclBvaW50WC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiswXX0sci5hbmNob3JQb2ludFguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMF09dH0sci5hbmNob3JQb2ludFkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV19LHIuYW5jaG9yUG9pbnRZLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzFdPXR9LHIueDEuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMl19LHIueDEuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMl09dH0sci55MS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiszXX0sci55MS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiszXT10fSxyLngyLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzRdfSxyLngyLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzRdPXR9LHIueTIuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrNV19LHIueTIuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrNV09dH0sci5mZWF0dXJlSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzNdfSxyLmZlYXR1cmVJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrM109dH0sci5zb3VyY2VMYXllckluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMis4XX0sci5zb3VyY2VMYXllckluZGV4LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMis4XT10fSxyLmJ1Y2tldEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMis5XX0sci5idWNrZXRJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrOV09dH0sci5yYWRpdXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMTBdfSxyLnJhZGl1cy5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisxMF09dH0sci5zaWduZWREaXN0YW5jZUZyb21BbmNob3IuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMTFdfSxyLnNpZ25lZERpc3RhbmNlRnJvbUFuY2hvci5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisxMV09dH0sci5hbmNob3JQb2ludC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGwodGhpcy5hbmNob3JQb2ludFgsdGhpcy5hbmNob3JQb2ludFkpfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfShZcik7Z24ucHJvdG90eXBlLnNpemU9MjQ7dmFyIHZuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZ24odGhpcyx0KX0sZX0obm4pO3ByKFwiQ29sbGlzaW9uQm94QXJyYXlcIix2bik7dmFyIG1uPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZTt2YXIgcj17YW5jaG9yWDp7Y29uZmlndXJhYmxlOiEwfSxhbmNob3JZOntjb25maWd1cmFibGU6ITB9LGdseXBoU3RhcnRJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxudW1HbHlwaHM6e2NvbmZpZ3VyYWJsZTohMH0sdmVydGV4U3RhcnRJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxsaW5lU3RhcnRJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxsaW5lTGVuZ3RoOntjb25maWd1cmFibGU6ITB9LHNlZ21lbnQ6e2NvbmZpZ3VyYWJsZTohMH0sbG93ZXJTaXplOntjb25maWd1cmFibGU6ITB9LHVwcGVyU2l6ZTp7Y29uZmlndXJhYmxlOiEwfSxsaW5lT2Zmc2V0WDp7Y29uZmlndXJhYmxlOiEwfSxsaW5lT2Zmc2V0WTp7Y29uZmlndXJhYmxlOiEwfSx3cml0aW5nTW9kZTp7Y29uZmlndXJhYmxlOiEwfSxoaWRkZW46e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiByLmFuY2hvclguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMF19LHIuYW5jaG9yWC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiswXT10fSxyLmFuY2hvclkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV19LHIuYW5jaG9yWS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisxXT10fSxyLmdseXBoU3RhcnRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMl19LHIuZ2x5cGhTdGFydEluZGV4LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisyXT10fSxyLm51bUdseXBocy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrM119LHIubnVtR2x5cGhzLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiszXT10fSxyLnZlcnRleFN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzJdfSxyLnZlcnRleFN0YXJ0SW5kZXguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzJdPXR9LHIubGluZVN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzNdfSxyLmxpbmVTdGFydEluZGV4LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCszXT10fSxyLmxpbmVMZW5ndGguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzRdfSxyLmxpbmVMZW5ndGguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzRdPXR9LHIuc2VnbWVudC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTBdfSxyLnNlZ21lbnQuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzEwXT10fSxyLmxvd2VyU2l6ZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTFdfSxyLmxvd2VyU2l6ZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTFdPXR9LHIudXBwZXJTaXplLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxMl19LHIudXBwZXJTaXplLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxMl09dH0sci5saW5lT2Zmc2V0WC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzddfSxyLmxpbmVPZmZzZXRYLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrN109dH0sci5saW5lT2Zmc2V0WS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzhdfSxyLmxpbmVPZmZzZXRZLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrOF09dH0sci53cml0aW5nTW9kZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSszNl19LHIud3JpdGluZ01vZGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczErMzZdPXR9LHIuaGlkZGVuLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50OFt0aGlzLl9wb3MxKzM3XX0sci5oaWRkZW4uc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczErMzddPXR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHIpLGV9KFlyKTttbi5wcm90b3R5cGUuc2l6ZT00MDt2YXIgeW49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBtbih0aGlzLHQpfSxlfShzbik7cHIoXCJQbGFjZWRTeW1ib2xBcnJheVwiLHluKTt2YXIgeG49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lO3ZhciByPXtvZmZzZXRYOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5vZmZzZXRYLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrMF19LHIub2Zmc2V0WC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzBdPXR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHIpLGV9KFlyKTt4bi5wcm90b3R5cGUuc2l6ZT00O3ZhciBibj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldG9mZnNldFg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZmxvYXQzMlsxKnQrMF19LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHhuKHRoaXMsdCl9LGV9KGxuKTtwcihcIkdseXBoT2Zmc2V0QXJyYXlcIixibik7dmFyIF9uPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZTt2YXIgcj17eDp7Y29uZmlndXJhYmxlOiEwfSx5Ontjb25maWd1cmFibGU6ITB9LHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci54LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzBdfSxyLnguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMF09dH0sci55LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzFdfSxyLnkuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV09dH0sci50aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvci5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisyXX0sci50aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvci5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisyXT10fSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfShZcik7X24ucHJvdG90eXBlLnNpemU9Njt2YXIgd249ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXR4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludDE2WzMqdCswXX0sZS5wcm90b3R5cGUuZ2V0eT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnQxNlszKnQrMV19LGUucHJvdG90eXBlLmdldHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludDE2WzMqdCsyXX0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgX24odGhpcyx0KX0sZX0oY24pO3ByKFwiU3ltYm9sTGluZVZlcnRleEFycmF5XCIsd24pO3ZhciBrbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWU7dmFyIHI9e2ZlYXR1cmVJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxzb3VyY2VMYXllckluZGV4Ontjb25maWd1cmFibGU6ITB9LGJ1Y2tldEluZGV4Ontjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5mZWF0dXJlSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzBdfSxyLmZlYXR1cmVJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrMF09dH0sci5zb3VyY2VMYXllckluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisyXX0sci5zb3VyY2VMYXllckluZGV4LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisyXT10fSxyLmJ1Y2tldEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiszXX0sci5idWNrZXRJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrM109dH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsciksZX0oWXIpO2tuLnByb3RvdHlwZS5zaXplPTg7dmFyIEFuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcga24odGhpcyx0KX0sZX0odW4pO3ByKFwiRmVhdHVyZUluZGV4QXJyYXlcIixBbik7dmFyIFRuPVhyKFt7bmFtZTpcImFfcG9zXCIsY29tcG9uZW50czoyLHR5cGU6XCJJbnQxNlwifV0sNCkubWVtYmVycyxNbj1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD1bXSksdGhpcy5zZWdtZW50cz10fTtNbi5wcm90b3R5cGUucHJlcGFyZVNlZ21lbnQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuc2VnbWVudHNbdGhpcy5zZWdtZW50cy5sZW5ndGgtMV07cmV0dXJuIHQ+TW4uTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEgmJl8oXCJNYXggdmVydGljZXMgcGVyIHNlZ21lbnQgaXMgXCIrTW4uTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEgrXCI6IGJ1Y2tldCByZXF1ZXN0ZWQgXCIrdCksKCFufHxuLnZlcnRleExlbmd0aCt0Pk1uLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIKSYmKG49e3ZlcnRleE9mZnNldDplLmxlbmd0aCxwcmltaXRpdmVPZmZzZXQ6ci5sZW5ndGgsdmVydGV4TGVuZ3RoOjAscHJpbWl0aXZlTGVuZ3RoOjB9LHRoaXMuc2VnbWVudHMucHVzaChuKSksbn0sTW4ucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlZ21lbnRzfSxNbi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9dGhpcy5zZWdtZW50czt0PGUubGVuZ3RoO3QrPTEpe3ZhciByPWVbdF07Zm9yKHZhciBuIGluIHIudmFvcylyLnZhb3Nbbl0uZGVzdHJveSgpfX0sTW4uTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEg9TWF0aC5wb3coMiwxNiktMSxwcihcIlNlZ21lbnRWZWN0b3JcIixNbik7dmFyIFNuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIDI1NioodD1mKE1hdGguZmxvb3IodCksMCwyNTUpKStmKE1hdGguZmxvb3IoZSksMCwyNTUpfTtmdW5jdGlvbiBFbih0KXtyZXR1cm5bU24oMjU1KnQuciwyNTUqdC5nKSxTbigyNTUqdC5iLDI1NSp0LmEpXX12YXIgQ249ZnVuY3Rpb24odCxlLHIpe3RoaXMudmFsdWU9dCx0aGlzLm5hbWU9ZSx0aGlzLnR5cGU9cix0aGlzLnN0YXRpc3RpY3M9e21heDotMS8wfX07Q24ucHJvdG90eXBlLmRlZmluZXM9ZnVuY3Rpb24oKXtyZXR1cm5bXCIjZGVmaW5lIEhBU19VTklGT1JNX3VfXCIrdGhpcy5uYW1lXX0sQ24ucHJvdG90eXBlLnBvcHVsYXRlUGFpbnRBcnJheT1mdW5jdGlvbigpe30sQ24ucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbigpe30sQ24ucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt9LENuLnByb3RvdHlwZS5zZXRVbmlmb3Jtcz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLmNvbnN0YW50T3IodGhpcy52YWx1ZSksYT10LmdsO1wiY29sb3JcIj09PXRoaXMudHlwZT9hLnVuaWZvcm00ZihlLnVuaWZvcm1zW1widV9cIit0aGlzLm5hbWVdLGkucixpLmcsaS5iLGkuYSk6YS51bmlmb3JtMWYoZS51bmlmb3Jtc1tcInVfXCIrdGhpcy5uYW1lXSxpKX07dmFyIExuPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmV4cHJlc3Npb249dCx0aGlzLm5hbWU9ZSx0aGlzLnR5cGU9cix0aGlzLnN0YXRpc3RpY3M9e21heDotMS8wfTt2YXIgbj1cImNvbG9yXCI9PT1yP3BuOmxuO3RoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzPVt7bmFtZTpcImFfXCIrZSx0eXBlOlwiRmxvYXQzMlwiLGNvbXBvbmVudHM6XCJjb2xvclwiPT09cj8yOjEsb2Zmc2V0OjB9XSx0aGlzLnBhaW50VmVydGV4QXJyYXk9bmV3IG59O0xuLnByb3RvdHlwZS5kZWZpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuW119LExuLnByb3RvdHlwZS5wb3B1bGF0ZVBhaW50QXJyYXk9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnBhaW50VmVydGV4QXJyYXksbj1yLmxlbmd0aDtyLnJlc2VydmUodCk7dmFyIGk9dGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBMcigwKSxlKTtpZihcImNvbG9yXCI9PT10aGlzLnR5cGUpZm9yKHZhciBhPUVuKGkpLG89bjtvPHQ7bysrKXIuZW1wbGFjZUJhY2soYVswXSxhWzFdKTtlbHNle2Zvcih2YXIgcz1uO3M8dDtzKyspci5lbXBsYWNlQmFjayhpKTt0aGlzLnN0YXRpc3RpY3MubWF4PU1hdGgubWF4KHRoaXMuc3RhdGlzdGljcy5tYXgsaSl9fSxMbi5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMucGFpbnRWZXJ0ZXhBcnJheSYmKHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5wYWludFZlcnRleEFycmF5LHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzKSl9LExuLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5wYWludFZlcnRleEJ1ZmZlciYmdGhpcy5wYWludFZlcnRleEJ1ZmZlci5kZXN0cm95KCl9LExuLnByb3RvdHlwZS5zZXRVbmlmb3Jtcz1mdW5jdGlvbih0LGUpe3QuZ2wudW5pZm9ybTFmKGUudW5pZm9ybXNbXCJhX1wiK3RoaXMubmFtZStcIl90XCJdLDApfTt2YXIgem49ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLmV4cHJlc3Npb249dCx0aGlzLm5hbWU9ZSx0aGlzLnR5cGU9cix0aGlzLnVzZUludGVnZXJab29tPW4sdGhpcy56b29tPWksdGhpcy5zdGF0aXN0aWNzPXttYXg6LTEvMH07dmFyIGE9XCJjb2xvclwiPT09cj9kbjpwbjt0aGlzLnBhaW50VmVydGV4QXR0cmlidXRlcz1be25hbWU6XCJhX1wiK2UsdHlwZTpcIkZsb2F0MzJcIixjb21wb25lbnRzOlwiY29sb3JcIj09PXI/NDoyLG9mZnNldDowfV0sdGhpcy5wYWludFZlcnRleEFycmF5PW5ldyBhfTt6bi5wcm90b3R5cGUuZGVmaW5lcz1mdW5jdGlvbigpe3JldHVybltdfSx6bi5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5wYWludFZlcnRleEFycmF5LG49ci5sZW5ndGg7ci5yZXNlcnZlKHQpO3ZhciBpPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgTHIodGhpcy56b29tKSxlKSxhPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgTHIodGhpcy56b29tKzEpLGUpO2lmKFwiY29sb3JcIj09PXRoaXMudHlwZSlmb3IodmFyIG89RW4oaSkscz1FbihhKSxsPW47bDx0O2wrKylyLmVtcGxhY2VCYWNrKG9bMF0sb1sxXSxzWzBdLHNbMV0pO2Vsc2V7Zm9yKHZhciBjPW47Yzx0O2MrKylyLmVtcGxhY2VCYWNrKGksYSk7dGhpcy5zdGF0aXN0aWNzLm1heD1NYXRoLm1heCh0aGlzLnN0YXRpc3RpY3MubWF4LGksYSl9fSx6bi5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMucGFpbnRWZXJ0ZXhBcnJheSYmKHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5wYWludFZlcnRleEFycmF5LHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzKSl9LHpuLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5wYWludFZlcnRleEJ1ZmZlciYmdGhpcy5wYWludFZlcnRleEJ1ZmZlci5kZXN0cm95KCl9LHpuLnByb3RvdHlwZS5pbnRlcnBvbGF0aW9uRmFjdG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnVzZUludGVnZXJab29tP3RoaXMuZXhwcmVzc2lvbi5pbnRlcnBvbGF0aW9uRmFjdG9yKE1hdGguZmxvb3IodCksdGhpcy56b29tLHRoaXMuem9vbSsxKTp0aGlzLmV4cHJlc3Npb24uaW50ZXJwb2xhdGlvbkZhY3Rvcih0LHRoaXMuem9vbSx0aGlzLnpvb20rMSl9LHpuLnByb3RvdHlwZS5zZXRVbmlmb3Jtcz1mdW5jdGlvbih0LGUscil7dC5nbC51bmlmb3JtMWYoZS51bmlmb3Jtc1tcImFfXCIrdGhpcy5uYW1lK1wiX3RcIl0sdGhpcy5pbnRlcnBvbGF0aW9uRmFjdG9yKHIuem9vbSkpfTt2YXIgT249ZnVuY3Rpb24oKXt0aGlzLmJpbmRlcnM9e30sdGhpcy5jYWNoZUtleT1cIlwiLHRoaXMuX2J1ZmZlcnM9W119O09uLmNyZWF0ZUR5bmFtaWM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW5ldyBPbixpPVtdO2Zvcih2YXIgYSBpbiB0LnBhaW50Ll92YWx1ZXMpaWYocihhKSl7dmFyIG89dC5wYWludC5nZXQoYSk7aWYobyBpbnN0YW5jZW9mIEZyJiZvLnByb3BlcnR5LnNwZWNpZmljYXRpb25bXCJwcm9wZXJ0eS1mdW5jdGlvblwiXSl7dmFyIHM9RG4oYSx0LnR5cGUpLGw9by5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uLnR5cGUsYz1vLnByb3BlcnR5LnVzZUludGVnZXJab29tO1wiY29uc3RhbnRcIj09PW8udmFsdWUua2luZD8obi5iaW5kZXJzW2FdPW5ldyBDbihvLnZhbHVlLHMsbCksaS5wdXNoKFwiL3VfXCIrcykpOlwic291cmNlXCI9PT1vLnZhbHVlLmtpbmQ/KG4uYmluZGVyc1thXT1uZXcgTG4oby52YWx1ZSxzLGwpLGkucHVzaChcIi9hX1wiK3MpKToobi5iaW5kZXJzW2FdPW5ldyB6bihvLnZhbHVlLHMsbCxjLGUpLGkucHVzaChcIi96X1wiK3MpKX19cmV0dXJuIG4uY2FjaGVLZXk9aS5zb3J0KCkuam9pbihcIlwiKSxufSxPbi5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiB0aGlzLmJpbmRlcnMpdGhpcy5iaW5kZXJzW3JdLnBvcHVsYXRlUGFpbnRBcnJheSh0LGUpfSxPbi5wcm90b3R5cGUuZGVmaW5lcz1mdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLmJpbmRlcnMpdC5wdXNoLmFwcGx5KHQsdGhpcy5iaW5kZXJzW2VdLmRlZmluZXMoKSk7cmV0dXJuIHR9LE9uLnByb3RvdHlwZS5zZXRVbmlmb3Jtcz1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGkgaW4gdGhpcy5iaW5kZXJzKXRoaXMuYmluZGVyc1tpXS5zZXRVbmlmb3Jtcyh0LGUsbixyLmdldChpKSl9LE9uLnByb3RvdHlwZS5nZXRQYWludFZlcnRleEJ1ZmZlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYnVmZmVyc30sT24ucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5iaW5kZXJzKXRoaXMuYmluZGVyc1tlXS51cGxvYWQodCk7dmFyIHI9W107Zm9yKHZhciBuIGluIHRoaXMuYmluZGVycyl7dmFyIGk9dGhpcy5iaW5kZXJzW25dOyhpIGluc3RhbmNlb2YgTG58fGkgaW5zdGFuY2VvZiB6bikmJmkucGFpbnRWZXJ0ZXhCdWZmZXImJnIucHVzaChpLnBhaW50VmVydGV4QnVmZmVyKX10aGlzLl9idWZmZXJzPXJ9LE9uLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuYmluZGVycyl0aGlzLmJpbmRlcnNbdF0uZGVzdHJveSgpfTt2YXIgSW49ZnVuY3Rpb24odCxlLHIsbil7dm9pZCAwPT09biYmKG49ZnVuY3Rpb24oKXtyZXR1cm4hMH0pLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zPXt9O2Zvcih2YXIgaT0wLGE9ZTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbby5pZF09T24uY3JlYXRlRHluYW1pYyhvLHIsbiksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbby5pZF0ubGF5b3V0QXR0cmlidXRlcz10fX07ZnVuY3Rpb24gRG4odCxlKXtyZXR1cm57XCJ0ZXh0LW9wYWNpdHlcIjpcIm9wYWNpdHlcIixcImljb24tb3BhY2l0eVwiOlwib3BhY2l0eVwiLFwidGV4dC1jb2xvclwiOlwiZmlsbF9jb2xvclwiLFwiaWNvbi1jb2xvclwiOlwiZmlsbF9jb2xvclwiLFwidGV4dC1oYWxvLWNvbG9yXCI6XCJoYWxvX2NvbG9yXCIsXCJpY29uLWhhbG8tY29sb3JcIjpcImhhbG9fY29sb3JcIixcInRleHQtaGFsby1ibHVyXCI6XCJoYWxvX2JsdXJcIixcImljb24taGFsby1ibHVyXCI6XCJoYWxvX2JsdXJcIixcInRleHQtaGFsby13aWR0aFwiOlwiaGFsb193aWR0aFwiLFwiaWNvbi1oYWxvLXdpZHRoXCI6XCJoYWxvX3dpZHRoXCIsXCJsaW5lLWdhcC13aWR0aFwiOlwiZ2Fwd2lkdGhcIn1bdF18fHQucmVwbGFjZShlK1wiLVwiLFwiXCIpLnJlcGxhY2UoLy0vZyxcIl9cIil9SW4ucHJvdG90eXBlLnBvcHVsYXRlUGFpbnRBcnJheXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMpdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbcl0ucG9wdWxhdGVQYWludEFycmF5cyh0LGUpfSxJbi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1t0XX0sSW4ucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMpdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbZV0udXBsb2FkKHQpfSxJbi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucyl0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1t0XS5kZXN0cm95KCl9LHByKFwiQ29uc3RhbnRCaW5kZXJcIixDbikscHIoXCJTb3VyY2VFeHByZXNzaW9uQmluZGVyXCIsTG4pLHByKFwiQ29tcG9zaXRlRXhwcmVzc2lvbkJpbmRlclwiLHpuKSxwcihcIlByb2dyYW1Db25maWd1cmF0aW9uXCIsT24se29taXQ6W1wiX2J1ZmZlcnNcIl19KSxwcihcIlByb2dyYW1Db25maWd1cmF0aW9uU2V0XCIsSW4pO3ZhciBQbj04MTkyLFJuPSgxNix7bWluOi0xKk1hdGgucG93KDIsMTUpLG1heDpNYXRoLnBvdygyLDE1KS0xfSk7ZnVuY3Rpb24gRm4odCl7Zm9yKHZhciBlPVBuL3QuZXh0ZW50LHI9dC5sb2FkR2VvbWV0cnkoKSxuPTA7bjxyLmxlbmd0aDtuKyspZm9yKHZhciBpPXJbbl0sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdO28ueD1NYXRoLnJvdW5kKG8ueCplKSxvLnk9TWF0aC5yb3VuZChvLnkqZSksKG8ueDxSbi5taW58fG8ueD5Sbi5tYXh8fG8ueTxSbi5taW58fG8ueT5Sbi5tYXgpJiZfKFwiR2VvbWV0cnkgZXhjZWVkcyBhbGxvd2VkIGV4dGVudCwgcmVkdWNlIHlvdXIgdmVjdG9yIHRpbGUgYnVmZmVyIHNpemVcIil9cmV0dXJuIHJ9ZnVuY3Rpb24gQm4odCxlLHIsbixpKXt0LmVtcGxhY2VCYWNrKDIqZSsobisxKS8yLDIqcisoaSsxKS8yKX12YXIgTm49ZnVuY3Rpb24odCl7dGhpcy56b29tPXQuem9vbSx0aGlzLm92ZXJzY2FsaW5nPXQub3ZlcnNjYWxpbmcsdGhpcy5sYXllcnM9dC5sYXllcnMsdGhpcy5sYXllcklkcz10aGlzLmxheWVycy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheT1uZXcgJHIsdGhpcy5pbmRleEFycmF5PW5ldyBobix0aGlzLnNlZ21lbnRzPW5ldyBNbix0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucz1uZXcgSW4oVG4sdC5sYXllcnMsdC56b29tKX07ZnVuY3Rpb24gam4odCxlLHIpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO2lmKFpuKGksZSkpcmV0dXJuITA7aWYoWW4oZSxpLHIpKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIFZuKHQsZSl7aWYoMT09PXQubGVuZ3RoJiYxPT09dFswXS5sZW5ndGgpcmV0dXJuIFhuKGUsdFswXVswXSk7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspZm9yKHZhciBuPWVbcl0saT0wO2k8bi5sZW5ndGg7aSsrKWlmKFhuKHQsbltpXSkpcmV0dXJuITA7Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspe2Zvcih2YXIgbz10W2FdLHM9MDtzPG8ubGVuZ3RoO3MrKylpZihYbihlLG9bc10pKXJldHVybiEwO2Zvcih2YXIgbD0wO2w8ZS5sZW5ndGg7bCsrKWlmKEhuKG8sZVtsXSkpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gVW4odCxlLHIpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWZvcih2YXIgaT1lW25dLGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89dFthXTtpZihvLmxlbmd0aD49Mylmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKylpZihabihvLGlbc10pKXJldHVybiEwO2lmKHFuKG8saSxyKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBxbih0LGUscil7aWYodC5sZW5ndGg+MSl7aWYoSG4odCxlKSlyZXR1cm4hMDtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihZbihlW25dLHQscikpcmV0dXJuITB9Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspaWYoWW4odFtpXSxlLHIpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEhuKHQsZSl7aWYoMD09PXQubGVuZ3RofHwwPT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aC0xO3IrKylmb3IodmFyIG49dFtyXSxpPXRbcisxXSxhPTA7YTxlLmxlbmd0aC0xO2ErKylpZihHbihuLGksZVthXSxlW2ErMV0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEduKHQsZSxyLG4pe3JldHVybiB3KHQscixuKSE9PXcoZSxyLG4pJiZ3KHQsZSxyKSE9PXcodCxlLG4pfWZ1bmN0aW9uIFluKHQsZSxyKXt2YXIgbj1yKnI7aWYoMT09PWUubGVuZ3RoKXJldHVybiB0LmRpc3RTcXIoZVswXSk8bjtmb3IodmFyIGk9MTtpPGUubGVuZ3RoO2krKylpZihXbih0LGVbaS0xXSxlW2ldKTxuKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFduKHQsZSxyKXt2YXIgbj1lLmRpc3RTcXIocik7aWYoMD09PW4pcmV0dXJuIHQuZGlzdFNxcihlKTt2YXIgaT0oKHQueC1lLngpKihyLngtZS54KSsodC55LWUueSkqKHIueS1lLnkpKS9uO3JldHVybiBpPDA/dC5kaXN0U3FyKGUpOmk+MT90LmRpc3RTcXIocik6dC5kaXN0U3FyKHIuc3ViKGUpLl9tdWx0KGkpLl9hZGQoZSkpfWZ1bmN0aW9uIFhuKHQsZSl7Zm9yKHZhciByLG4saSxhPSExLG89MDtvPHQubGVuZ3RoO28rKylmb3IodmFyIHM9MCxsPShyPXRbb10pLmxlbmd0aC0xO3M8ci5sZW5ndGg7bD1zKyspbj1yW3NdLGk9cltsXSxuLnk+ZS55IT1pLnk+ZS55JiZlLng8KGkueC1uLngpKihlLnktbi55KS8oaS55LW4ueSkrbi54JiYoYT0hYSk7cmV0dXJuIGF9ZnVuY3Rpb24gWm4odCxlKXtmb3IodmFyIHI9ITEsbj0wLGk9dC5sZW5ndGgtMTtuPHQubGVuZ3RoO2k9bisrKXt2YXIgYT10W25dLG89dFtpXTthLnk+ZS55IT1vLnk+ZS55JiZlLng8KG8ueC1hLngpKihlLnktYS55KS8oby55LWEueSkrYS54JiYocj0hcil9cmV0dXJuIHJ9ZnVuY3Rpb24gJG4odCxlLHIpe3ZhciBuPWUucGFpbnQuZ2V0KHQpLnZhbHVlO3JldHVyblwiY29uc3RhbnRcIj09PW4ua2luZD9uLnZhbHVlOnIucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChlLmlkKS5iaW5kZXJzW3RdLnN0YXRpc3RpY3MubWF4fWZ1bmN0aW9uIEpuKHQpe3JldHVybiBNYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSl9ZnVuY3Rpb24gS24odCxlLHIsbixpKXtpZighZVswXSYmIWVbMV0pcmV0dXJuIHQ7dmFyIGE9bC5jb252ZXJ0KGUpO1widmlld3BvcnRcIj09PXImJmEuX3JvdGF0ZSgtbik7Zm9yKHZhciBvPVtdLHM9MDtzPHQubGVuZ3RoO3MrKyl7Zm9yKHZhciBjPXRbc10sdT1bXSxoPTA7aDxjLmxlbmd0aDtoKyspdS5wdXNoKGNbaF0uc3ViKGEuX211bHQoaSkpKTtvLnB1c2godSl9cmV0dXJuIG99Tm4ucHJvdG90eXBlLnBvcHVsYXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj10O3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXSxhPWkuZmVhdHVyZSxvPWkuaW5kZXgscz1pLnNvdXJjZUxheWVySW5kZXg7aWYodGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIobmV3IExyKHRoaXMuem9vbSksYSkpe3ZhciBsPUZuKGEpO3RoaXMuYWRkRmVhdHVyZShhLGwpLGUuZmVhdHVyZUluZGV4Lmluc2VydChhLGwsbyxzLHRoaXMuaW5kZXgpfX19LE5uLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aH0sTm4ucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LFRuKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQodCl9LE5uLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpKX0sTm4ucHJvdG90eXBlLmFkZEZlYXR1cmU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKz0xKWZvcih2YXIgaT0wLGE9bltyXTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV0scz1vLngsbD1vLnk7aWYoIShzPDB8fHM+PVBufHxsPDB8fGw+PVBuKSl7dmFyIGM9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5KSx1PWMudmVydGV4TGVuZ3RoO0JuKHRoaXMubGF5b3V0VmVydGV4QXJyYXkscyxsLC0xLC0xKSxCbih0aGlzLmxheW91dFZlcnRleEFycmF5LHMsbCwxLC0xKSxCbih0aGlzLmxheW91dFZlcnRleEFycmF5LHMsbCwxLDEpLEJuKHRoaXMubGF5b3V0VmVydGV4QXJyYXkscyxsLC0xLDEpLHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayh1LHUrMSx1KzIpLHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayh1LHUrMyx1KzIpLGMudmVydGV4TGVuZ3RoKz00LGMucHJpbWl0aXZlTGVuZ3RoKz0yfX10aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLHQpfSxwcihcIkNpcmNsZUJ1Y2tldFwiLE5uLHtvbWl0OltcImxheWVyc1wiXX0pO3ZhciBRbj17cGFpbnQ6bmV3IHFyKHtcImNpcmNsZS1yYWRpdXNcIjpuZXcganIoSS5wYWludF9jaXJjbGVbXCJjaXJjbGUtcmFkaXVzXCJdKSxcImNpcmNsZS1jb2xvclwiOm5ldyBqcihJLnBhaW50X2NpcmNsZVtcImNpcmNsZS1jb2xvclwiXSksXCJjaXJjbGUtYmx1clwiOm5ldyBqcihJLnBhaW50X2NpcmNsZVtcImNpcmNsZS1ibHVyXCJdKSxcImNpcmNsZS1vcGFjaXR5XCI6bmV3IGpyKEkucGFpbnRfY2lyY2xlW1wiY2lyY2xlLW9wYWNpdHlcIl0pLFwiY2lyY2xlLXRyYW5zbGF0ZVwiOm5ldyBOcihJLnBhaW50X2NpcmNsZVtcImNpcmNsZS10cmFuc2xhdGVcIl0pLFwiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3JcIjpuZXcgTnIoSS5wYWludF9jaXJjbGVbXCJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvclwiXSksXCJjaXJjbGUtcGl0Y2gtc2NhbGVcIjpuZXcgTnIoSS5wYWludF9jaXJjbGVbXCJjaXJjbGUtcGl0Y2gtc2NhbGVcIl0pLFwiY2lyY2xlLXBpdGNoLWFsaWdubWVudFwiOm5ldyBOcihJLnBhaW50X2NpcmNsZVtcImNpcmNsZS1waXRjaC1hbGlnbm1lbnRcIl0pLFwiY2lyY2xlLXN0cm9rZS13aWR0aFwiOm5ldyBqcihJLnBhaW50X2NpcmNsZVtcImNpcmNsZS1zdHJva2Utd2lkdGhcIl0pLFwiY2lyY2xlLXN0cm9rZS1jb2xvclwiOm5ldyBqcihJLnBhaW50X2NpcmNsZVtcImNpcmNsZS1zdHJva2UtY29sb3JcIl0pLFwiY2lyY2xlLXN0cm9rZS1vcGFjaXR5XCI6bmV3IGpyKEkucGFpbnRfY2lyY2xlW1wiY2lyY2xlLXN0cm9rZS1vcGFjaXR5XCJdKX0pfSx0aT1pKGZ1bmN0aW9uKHQsZSl7dmFyIHI7dC5leHBvcnRzPSgocj1uZXcgRmxvYXQzMkFycmF5KDMpKVswXT0wLHJbMV09MCxyWzJdPTAsZnVuY3Rpb24oKXt2YXIgdD1uZXcgRmxvYXQzMkFycmF5KDQpO3RbMF09MCx0WzFdPTAsdFsyXT0wLHRbM109MH0oKSx7dmVjMzp7dHJhbnNmb3JtTWF0MzpmdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdO3JldHVybiB0WzBdPW4qclswXStpKnJbM10rYSpyWzZdLHRbMV09bipyWzFdK2kqcls0XSthKnJbN10sdFsyXT1uKnJbMl0raSpyWzVdK2Eqcls4XSx0fX0sdmVjNDp7dHJhbnNmb3JtTWF0NDpmdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXTtyZXR1cm4gdFswXT1yWzBdKm4rcls0XSppK3JbOF0qYStyWzEyXSpvLHRbMV09clsxXSpuK3JbNV0qaStyWzldKmErclsxM10qbyx0WzJdPXJbMl0qbityWzZdKmkrclsxMF0qYStyWzE0XSpvLHRbM109clszXSpuK3JbN10qaStyWzExXSphK3JbMTVdKm8sdH19LG1hdDI6e2NyZWF0ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBGbG9hdDMyQXJyYXkoNCk7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MSx0fSxyb3RhdGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1NYXRoLnNpbihyKSxsPU1hdGguY29zKHIpO3JldHVybiB0WzBdPW4qbCthKnMsdFsxXT1pKmwrbypzLHRbMl09biotcythKmwsdFszXT1pKi1zK28qbCx0fSxzY2FsZTpmdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPXJbMF0sbD1yWzFdO3JldHVybiB0WzBdPW4qcyx0WzFdPWkqcyx0WzJdPWEqbCx0WzNdPW8qbCx0fX0sbWF0Mzp7Y3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSg5KTtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MSx0WzVdPTAsdFs2XT0wLHRbN109MCx0WzhdPTEsdH0sZnJvbVJvdGF0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zaW4oZSksbj1NYXRoLmNvcyhlKTtyZXR1cm4gdFswXT1uLHRbMV09cix0WzJdPTAsdFszXT0tcix0WzRdPW4sdFs1XT0wLHRbNl09MCx0WzddPTAsdFs4XT0xLHR9fSxtYXQ0OntjcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgRmxvYXQzMkFycmF5KDE2KTtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9LGlkZW50aXR5OmZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzLGwsYyx1LGgsZixwLGQsZz1yWzBdLHY9clsxXSxtPXJbMl07cmV0dXJuIGU9PT10Pyh0WzEyXT1lWzBdKmcrZVs0XSp2K2VbOF0qbStlWzEyXSx0WzEzXT1lWzFdKmcrZVs1XSp2K2VbOV0qbStlWzEzXSx0WzE0XT1lWzJdKmcrZVs2XSp2K2VbMTBdKm0rZVsxNF0sdFsxNV09ZVszXSpnK2VbN10qditlWzExXSptK2VbMTVdKToobj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sYz1lWzZdLHU9ZVs3XSxoPWVbOF0sZj1lWzldLHA9ZVsxMF0sZD1lWzExXSx0WzBdPW4sdFsxXT1pLHRbMl09YSx0WzNdPW8sdFs0XT1zLHRbNV09bCx0WzZdPWMsdFs3XT11LHRbOF09aCx0WzldPWYsdFsxMF09cCx0WzExXT1kLHRbMTJdPW4qZytzKnYraCptK2VbMTJdLHRbMTNdPWkqZytsKnYrZiptK2VbMTNdLHRbMTRdPWEqZytjKnYrcCptK2VbMTRdLHRbMTVdPW8qZyt1KnYrZCptK2VbMTVdKSx0fSxzY2FsZTpmdW5jdGlvbih0LGUscil7dmFyIG49clswXSxpPXJbMV0sYT1yWzJdO3JldHVybiB0WzBdPWVbMF0qbix0WzFdPWVbMV0qbix0WzJdPWVbMl0qbix0WzNdPWVbM10qbix0WzRdPWVbNF0qaSx0WzVdPWVbNV0qaSx0WzZdPWVbNl0qaSx0WzddPWVbN10qaSx0WzhdPWVbOF0qYSx0WzldPWVbOV0qYSx0WzEwXT1lWzEwXSphLHRbMTFdPWVbMTFdKmEsdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0sdH0sbXVsdGlwbHk6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSxjPWVbNl0sdT1lWzddLGg9ZVs4XSxmPWVbOV0scD1lWzEwXSxkPWVbMTFdLGc9ZVsxMl0sdj1lWzEzXSxtPWVbMTRdLHk9ZVsxNV0seD1yWzBdLGI9clsxXSxfPXJbMl0sdz1yWzNdO3JldHVybiB0WzBdPXgqbitiKnMrXypoK3cqZyx0WzFdPXgqaStiKmwrXypmK3cqdix0WzJdPXgqYStiKmMrXypwK3cqbSx0WzNdPXgqbytiKnUrXypkK3cqeSx4PXJbNF0sYj1yWzVdLF89cls2XSx3PXJbN10sdFs0XT14Km4rYipzK18qaCt3KmcsdFs1XT14KmkrYipsK18qZit3KnYsdFs2XT14KmErYipjK18qcCt3Km0sdFs3XT14Km8rYip1K18qZCt3KnkseD1yWzhdLGI9cls5XSxfPXJbMTBdLHc9clsxMV0sdFs4XT14Km4rYipzK18qaCt3KmcsdFs5XT14KmkrYipsK18qZit3KnYsdFsxMF09eCphK2IqYytfKnArdyptLHRbMTFdPXgqbytiKnUrXypkK3cqeSx4PXJbMTJdLGI9clsxM10sXz1yWzE0XSx3PXJbMTVdLHRbMTJdPXgqbitiKnMrXypoK3cqZyx0WzEzXT14KmkrYipsK18qZit3KnYsdFsxNF09eCphK2IqYytfKnArdyptLHRbMTVdPXgqbytiKnUrXypkK3cqeSx0fSxwZXJzcGVjdGl2ZTpmdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPTEvTWF0aC50YW4oZS8yKSxvPTEvKG4taSk7cmV0dXJuIHRbMF09YS9yLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPWEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPShpK24pKm8sdFsxMV09LTEsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTIqaSpuKm8sdFsxNV09MCx0fSxyb3RhdGVYOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVs0XSxvPWVbNV0scz1lWzZdLGw9ZVs3XSxjPWVbOF0sdT1lWzldLGg9ZVsxMF0sZj1lWzExXTtyZXR1cm4gZSE9PXQmJih0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pLHRbNF09YSppK2Mqbix0WzVdPW8qaSt1Km4sdFs2XT1zKmkraCpuLHRbN109bCppK2Yqbix0WzhdPWMqaS1hKm4sdFs5XT11KmktbypuLHRbMTBdPWgqaS1zKm4sdFsxMV09ZippLWwqbix0fSxyb3RhdGVaOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVswXSxvPWVbMV0scz1lWzJdLGw9ZVszXSxjPWVbNF0sdT1lWzVdLGg9ZVs2XSxmPWVbN107cmV0dXJuIGUhPT10JiYodFs4XT1lWzhdLHRbOV09ZVs5XSx0WzEwXT1lWzEwXSx0WzExXT1lWzExXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSksdFswXT1hKmkrYypuLHRbMV09byppK3Uqbix0WzJdPXMqaStoKm4sdFszXT1sKmkrZipuLHRbNF09YyppLWEqbix0WzVdPXUqaS1vKm4sdFs2XT1oKmktcypuLHRbN109ZippLWwqbix0fSxpbnZlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89ZVs0XSxzPWVbNV0sbD1lWzZdLGM9ZVs3XSx1PWVbOF0saD1lWzldLGY9ZVsxMF0scD1lWzExXSxkPWVbMTJdLGc9ZVsxM10sdj1lWzE0XSxtPWVbMTVdLHk9cipzLW4qbyx4PXIqbC1pKm8sYj1yKmMtYSpvLF89bipsLWkqcyx3PW4qYy1hKnMsaz1pKmMtYSpsLEE9dSpnLWgqZCxUPXUqdi1mKmQsTT11Km0tcCpkLFM9aCp2LWYqZyxFPWgqbS1wKmcsQz1mKm0tcCp2LEw9eSpDLXgqRStiKlMrXypNLXcqVCtrKkE7cmV0dXJuIEw/KEw9MS9MLHRbMF09KHMqQy1sKkUrYypTKSpMLHRbMV09KGkqRS1uKkMtYSpTKSpMLHRbMl09KGcqay12KncrbSpfKSpMLHRbM109KGYqdy1oKmstcCpfKSpMLHRbNF09KGwqTS1vKkMtYypUKSpMLHRbNV09KHIqQy1pKk0rYSpUKSpMLHRbNl09KHYqYi1kKmstbSp4KSpMLHRbN109KHUqay1mKmIrcCp4KSpMLHRbOF09KG8qRS1zKk0rYypBKSpMLHRbOV09KG4qTS1yKkUtYSpBKSpMLHRbMTBdPShkKnctZypiK20qeSkqTCx0WzExXT0oaCpiLXUqdy1wKnkpKkwsdFsxMl09KHMqVC1vKlMtbCpBKSpMLHRbMTNdPShyKlMtbipUK2kqQSkqTCx0WzE0XT0oZyp4LWQqXy12KnkpKkwsdFsxNV09KHUqXy1oKngrZip5KSpMLHQpOm51bGx9LG9ydGhvOmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPTEvKGUtciksbD0xLyhuLWkpLGM9MS8oYS1vKTtyZXR1cm4gdFswXT0tMipzLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPS0yKmwsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTIqYyx0WzExXT0wLHRbMTJdPShlK3IpKnMsdFsxM109KGkrbikqbCx0WzE0XT0obythKSpjLHRbMTVdPTEsdH19fSl9KSxlaT0odGkudmVjMyx0aS52ZWM0KSxyaT0odGkubWF0Mix0aS5tYXQzLHRpLm1hdDQpLG5pPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxRbil9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IE5uKHQpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbih0KXt2YXIgZT10O3JldHVybiAkbihcImNpcmNsZS1yYWRpdXNcIix0aGlzLGUpKyRuKFwiY2lyY2xlLXN0cm9rZS13aWR0aFwiLHRoaXMsZSkrSm4odGhpcy5wYWludC5nZXQoXCJjaXJjbGUtdHJhbnNsYXRlXCIpKX0sZS5wcm90b3R5cGUucXVlcnlJbnRlcnNlY3RzRmVhdHVyZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9S24odCx0aGlzLnBhaW50LmdldChcImNpcmNsZS10cmFuc2xhdGVcIiksdGhpcy5wYWludC5nZXQoXCJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvclwiKSxpLmFuZ2xlLGEpLGw9dGhpcy5wYWludC5nZXQoXCJjaXJjbGUtcmFkaXVzXCIpLmV2YWx1YXRlKGUpK3RoaXMucGFpbnQuZ2V0KFwiY2lyY2xlLXN0cm9rZS13aWR0aFwiKS5ldmFsdWF0ZShlKSxjPVwibWFwXCI9PT10aGlzLnBhaW50LmdldChcImNpcmNsZS1waXRjaC1hbGlnbm1lbnRcIiksdT1jP3M6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGlpKHQsZSxyKX0pfSl9KDAsbyxpKSxoPWM/bCphOmwsZj0wLHA9cjtmPHAubGVuZ3RoO2YrPTEpZm9yKHZhciBkPTAsZz1wW2ZdO2Q8Zy5sZW5ndGg7ZCs9MSl7dmFyIHY9Z1tkXSxtPWM/djppaSh2LG8saSkseT1oLHg9ZWkudHJhbnNmb3JtTWF0NChbXSxbdi54LHYueSwwLDFdLG8pO2lmKFwidmlld3BvcnRcIj09PXRoaXMucGFpbnQuZ2V0KFwiY2lyY2xlLXBpdGNoLXNjYWxlXCIpJiZcIm1hcFwiPT09dGhpcy5wYWludC5nZXQoXCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50XCIpP3kqPXhbM10vaS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlOlwibWFwXCI9PT10aGlzLnBhaW50LmdldChcImNpcmNsZS1waXRjaC1zY2FsZVwiKSYmXCJ2aWV3cG9ydFwiPT09dGhpcy5wYWludC5nZXQoXCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50XCIpJiYoeSo9aS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlL3hbM10pLGpuKHUsbSx5KSlyZXR1cm4hMH1yZXR1cm4hMX0sZX0oSHIpO2Z1bmN0aW9uIGlpKHQsZSxyKXt2YXIgbj1laS50cmFuc2Zvcm1NYXQ0KFtdLFt0LngsdC55LDAsMV0sZSk7cmV0dXJuIG5ldyBsKChuWzBdL25bM10rMSkqci53aWR0aCouNSwoblsxXS9uWzNdKzEpKnIuaGVpZ2h0Ki41KX12YXIgYWk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlfShObik7ZnVuY3Rpb24gb2kodCxlLHIsbil7dmFyIGk9ZS53aWR0aCxhPWUuaGVpZ2h0O2lmKG4pe2lmKG4ubGVuZ3RoIT09aSphKnIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJtaXNtYXRjaGVkIGltYWdlIHNpemVcIil9ZWxzZSBuPW5ldyBVaW50OEFycmF5KGkqYSpyKTtyZXR1cm4gdC53aWR0aD1pLHQuaGVpZ2h0PWEsdC5kYXRhPW4sdH1mdW5jdGlvbiBzaSh0LGUscil7dmFyIG49ZS53aWR0aCxpPWUuaGVpZ2h0O2lmKG4hPT10LndpZHRofHxpIT09dC5oZWlnaHQpe3ZhciBhPW9pKHt9LHt3aWR0aDpuLGhlaWdodDppfSxyKTtsaSh0LGEse3g6MCx5OjB9LHt4OjAseTowfSx7d2lkdGg6TWF0aC5taW4odC53aWR0aCxuKSxoZWlnaHQ6TWF0aC5taW4odC5oZWlnaHQsaSl9LHIpLHQud2lkdGg9bix0LmhlaWdodD1pLHQuZGF0YT1hLmRhdGF9fWZ1bmN0aW9uIGxpKHQsZSxyLG4saSxhKXtpZigwPT09aS53aWR0aHx8MD09PWkuaGVpZ2h0KXJldHVybiBlO2lmKGkud2lkdGg+dC53aWR0aHx8aS5oZWlnaHQ+dC5oZWlnaHR8fHIueD50LndpZHRoLWkud2lkdGh8fHIueT50LmhlaWdodC1pLmhlaWdodCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIm91dCBvZiByYW5nZSBzb3VyY2UgY29vcmRpbmF0ZXMgZm9yIGltYWdlIGNvcHlcIik7aWYoaS53aWR0aD5lLndpZHRofHxpLmhlaWdodD5lLmhlaWdodHx8bi54PmUud2lkdGgtaS53aWR0aHx8bi55PmUuaGVpZ2h0LWkuaGVpZ2h0KXRocm93IG5ldyBSYW5nZUVycm9yKFwib3V0IG9mIHJhbmdlIGRlc3RpbmF0aW9uIGNvb3JkaW5hdGVzIGZvciBpbWFnZSBjb3B5XCIpO2Zvcih2YXIgbz10LmRhdGEscz1lLmRhdGEsbD0wO2w8aS5oZWlnaHQ7bCsrKWZvcih2YXIgYz0oKHIueStsKSp0LndpZHRoK3IueCkqYSx1PSgobi55K2wpKmUud2lkdGgrbi54KSphLGg9MDtoPGkud2lkdGgqYTtoKyspc1t1K2hdPW9bYytoXTtyZXR1cm4gZX1wcihcIkhlYXRtYXBCdWNrZXRcIixhaSx7b21pdDpbXCJsYXllcnNcIl19KTt2YXIgY2k9ZnVuY3Rpb24odCxlKXtvaSh0aGlzLHQsMSxlKX07Y2kucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0KXtzaSh0aGlzLHQsMSl9LGNpLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgY2koe3dpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0fSxuZXcgVWludDhBcnJheSh0aGlzLmRhdGEpKX0sY2kuY29weT1mdW5jdGlvbih0LGUscixuLGkpe2xpKHQsZSxyLG4saSwxKX07dmFyIHVpPWZ1bmN0aW9uKHQsZSl7b2kodGhpcyx0LDQsZSl9O3VpLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCl7c2kodGhpcyx0LDQpfSx1aS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHVpKHt3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodH0sbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhKSl9LHVpLmNvcHk9ZnVuY3Rpb24odCxlLHIsbixpKXtsaSh0LGUscixuLGksNCl9LHByKFwiQWxwaGFJbWFnZVwiLGNpKSxwcihcIlJHQkFJbWFnZVwiLHVpKTt2YXIgaGk9e3BhaW50Om5ldyBxcih7XCJoZWF0bWFwLXJhZGl1c1wiOm5ldyBqcihJLnBhaW50X2hlYXRtYXBbXCJoZWF0bWFwLXJhZGl1c1wiXSksXCJoZWF0bWFwLXdlaWdodFwiOm5ldyBqcihJLnBhaW50X2hlYXRtYXBbXCJoZWF0bWFwLXdlaWdodFwiXSksXCJoZWF0bWFwLWludGVuc2l0eVwiOm5ldyBOcihJLnBhaW50X2hlYXRtYXBbXCJoZWF0bWFwLWludGVuc2l0eVwiXSksXCJoZWF0bWFwLWNvbG9yXCI6bmV3IFVyKEkucGFpbnRfaGVhdG1hcFtcImhlYXRtYXAtY29sb3JcIl0pLFwiaGVhdG1hcC1vcGFjaXR5XCI6bmV3IE5yKEkucGFpbnRfaGVhdG1hcFtcImhlYXRtYXAtb3BhY2l0eVwiXSl9KX07ZnVuY3Rpb24gZmkodCxlKXtmb3IodmFyIHI9bmV3IFVpbnQ4QXJyYXkoMTAyNCksbj17fSxpPTAsYT0wO2k8MjU2O2krKyxhKz00KXtuW2VdPWkvMjU1O3ZhciBvPXQuZXZhbHVhdGUobik7clthKzBdPU1hdGguZmxvb3IoMjU1Km8uci9vLmEpLHJbYSsxXT1NYXRoLmZsb29yKDI1NSpvLmcvby5hKSxyW2ErMl09TWF0aC5mbG9vcigyNTUqby5iL28uYSksclthKzNdPU1hdGguZmxvb3IoMjU1Km8uYSl9cmV0dXJuIG5ldyB1aSh7d2lkdGg6MjU2LGhlaWdodDoxfSxyKX12YXIgcGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLGhpKSx0aGlzLl91cGRhdGVDb2xvclJhbXAoKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuY3JlYXRlQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYWkodCl9LGUucHJvdG90eXBlLnNldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24oZSxyLG4pe3QucHJvdG90eXBlLnNldFBhaW50UHJvcGVydHkuY2FsbCh0aGlzLGUscixuKSxcImhlYXRtYXAtY29sb3JcIj09PWUmJnRoaXMuX3VwZGF0ZUNvbG9yUmFtcCgpfSxlLnByb3RvdHlwZS5fdXBkYXRlQ29sb3JSYW1wPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5fdmFsdWVzW1wiaGVhdG1hcC1jb2xvclwiXS52YWx1ZS5leHByZXNzaW9uO3RoaXMuY29sb3JSYW1wPWZpKHQsXCJoZWF0bWFwRGVuc2l0eVwiKSx0aGlzLmNvbG9yUmFtcFRleHR1cmU9bnVsbH0sZS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKCl7dGhpcy5oZWF0bWFwRmJvJiYodGhpcy5oZWF0bWFwRmJvLmRlc3Ryb3koKSx0aGlzLmhlYXRtYXBGYm89bnVsbCl9LGUucHJvdG90eXBlLnF1ZXJ5UmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuaGFzT2Zmc2NyZWVuUGFzcz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5wYWludC5nZXQoXCJoZWF0bWFwLW9wYWNpdHlcIikmJlwibm9uZVwiIT09dGhpcy52aXNpYmlsaXR5fSxlfShIciksZGk9e3BhaW50Om5ldyBxcih7XCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWRpcmVjdGlvblwiOm5ldyBOcihJLnBhaW50X2hpbGxzaGFkZVtcImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uXCJdKSxcImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yXCI6bmV3IE5yKEkucGFpbnRfaGlsbHNoYWRlW1wiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1hbmNob3JcIl0pLFwiaGlsbHNoYWRlLWV4YWdnZXJhdGlvblwiOm5ldyBOcihJLnBhaW50X2hpbGxzaGFkZVtcImhpbGxzaGFkZS1leGFnZ2VyYXRpb25cIl0pLFwiaGlsbHNoYWRlLXNoYWRvdy1jb2xvclwiOm5ldyBOcihJLnBhaW50X2hpbGxzaGFkZVtcImhpbGxzaGFkZS1zaGFkb3ctY29sb3JcIl0pLFwiaGlsbHNoYWRlLWhpZ2hsaWdodC1jb2xvclwiOm5ldyBOcihJLnBhaW50X2hpbGxzaGFkZVtcImhpbGxzaGFkZS1oaWdobGlnaHQtY29sb3JcIl0pLFwiaGlsbHNoYWRlLWFjY2VudC1jb2xvclwiOm5ldyBOcihJLnBhaW50X2hpbGxzaGFkZVtcImhpbGxzaGFkZS1hY2NlbnQtY29sb3JcIl0pfSl9LGdpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxkaSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmhhc09mZnNjcmVlblBhc3M9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMucGFpbnQuZ2V0KFwiaGlsbHNoYWRlLWV4YWdnZXJhdGlvblwiKSYmXCJub25lXCIhPT10aGlzLnZpc2liaWxpdHl9LGV9KEhyKSx2aT1Ycihbe25hbWU6XCJhX3Bvc1wiLGNvbXBvbmVudHM6Mix0eXBlOlwiSW50MTZcIn1dLDQpLm1lbWJlcnMsbWk9eGkseWk9eGk7ZnVuY3Rpb24geGkodCxlLHIpe3I9cnx8Mjt2YXIgbixpLGEsbyxzLGwsYyx1PWUmJmUubGVuZ3RoLGg9dT9lWzBdKnI6dC5sZW5ndGgsZj1iaSh0LDAsaCxyLCEwKSxwPVtdO2lmKCFmKXJldHVybiBwO2lmKHUmJihmPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzPVtdO2ZvcihpPTAsYT1lLmxlbmd0aDtpPGE7aSsrKShvPWJpKHQsZVtpXSpuLGk8YS0xP2VbaSsxXSpuOnQubGVuZ3RoLG4sITEpKT09PW8ubmV4dCYmKG8uc3RlaW5lcj0hMCkscy5wdXNoKExpKG8pKTtmb3Iocy5zb3J0KFNpKSxpPTA7aTxzLmxlbmd0aDtpKyspRWkoc1tpXSxyKSxyPV9pKHIsci5uZXh0KTtyZXR1cm4gcn0odCxlLGYscikpLHQubGVuZ3RoPjgwKnIpe249YT10WzBdLGk9bz10WzFdO2Zvcih2YXIgZD1yO2Q8aDtkKz1yKShzPXRbZF0pPG4mJihuPXMpLChsPXRbZCsxXSk8aSYmKGk9bCkscz5hJiYoYT1zKSxsPm8mJihvPWwpO2M9MCE9PShjPU1hdGgubWF4KGEtbixvLWkpKT8xL2M6MH1yZXR1cm4gd2koZixwLHIsbixpLGMpLHB9ZnVuY3Rpb24gYmkodCxlLHIsbixpKXt2YXIgYSxvO2lmKGk9PT1WaSh0LGUscixuKT4wKWZvcihhPWU7YTxyO2ErPW4pbz1CaShhLHRbYV0sdFthKzFdLG8pO2Vsc2UgZm9yKGE9ci1uO2E+PWU7YS09bilvPUJpKGEsdFthXSx0W2ErMV0sbyk7cmV0dXJuIG8mJkRpKG8sby5uZXh0KSYmKE5pKG8pLG89by5uZXh0KSxvfWZ1bmN0aW9uIF9pKHQsZSl7aWYoIXQpcmV0dXJuIHQ7ZXx8KGU9dCk7dmFyIHIsbj10O2Rve2lmKHI9ITEsbi5zdGVpbmVyfHwhRGkobixuLm5leHQpJiYwIT09SWkobi5wcmV2LG4sbi5uZXh0KSluPW4ubmV4dDtlbHNle2lmKE5pKG4pLChuPWU9bi5wcmV2KT09PW4ubmV4dClicmVhaztyPSEwfX13aGlsZShyfHxuIT09ZSk7cmV0dXJuIGV9ZnVuY3Rpb24gd2kodCxlLHIsbixpLGEsbyl7aWYodCl7IW8mJmEmJmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQ7ZG97bnVsbD09PWkueiYmKGkuej1DaShpLngsaS55LGUscixuKSksaS5wcmV2Wj1pLnByZXYsaS5uZXh0Wj1pLm5leHQsaT1pLm5leHR9d2hpbGUoaSE9PXQpO2kucHJldloubmV4dFo9bnVsbCxpLnByZXZaPW51bGwsZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHMsbCxjPTE7ZG97Zm9yKHI9dCx0PW51bGwsYT1udWxsLG89MDtyOyl7Zm9yKG8rKyxuPXIscz0wLGU9MDtlPGMmJihzKyssbj1uLm5leHRaKTtlKyspO2ZvcihsPWM7cz4wfHxsPjAmJm47KTAhPT1zJiYoMD09PWx8fCFufHxyLno8PW4ueik/KGk9cixyPXIubmV4dFoscy0tKTooaT1uLG49bi5uZXh0WixsLS0pLGE/YS5uZXh0Wj1pOnQ9aSxpLnByZXZaPWEsYT1pO3I9bn1hLm5leHRaPW51bGwsYyo9Mn13aGlsZShvPjEpfShpKX0odCxuLGksYSk7Zm9yKHZhciBzLGwsYz10O3QucHJldiE9PXQubmV4dDspaWYocz10LnByZXYsbD10Lm5leHQsYT9BaSh0LG4saSxhKTpraSh0KSllLnB1c2gocy5pL3IpLGUucHVzaCh0LmkvciksZS5wdXNoKGwuaS9yKSxOaSh0KSx0PWwubmV4dCxjPWwubmV4dDtlbHNlIGlmKCh0PWwpPT09Yyl7bz8xPT09bz93aSh0PVRpKHQsZSxyKSxlLHIsbixpLGEsMik6Mj09PW8mJk1pKHQsZSxyLG4saSxhKTp3aShfaSh0KSxlLHIsbixpLGEsMSk7YnJlYWt9fX1mdW5jdGlvbiBraSh0KXt2YXIgZT10LnByZXYscj10LG49dC5uZXh0O2lmKElpKGUscixuKT49MClyZXR1cm4hMTtmb3IodmFyIGk9dC5uZXh0Lm5leHQ7aSE9PXQucHJldjspe2lmKHppKGUueCxlLnksci54LHIueSxuLngsbi55LGkueCxpLnkpJiZJaShpLnByZXYsaSxpLm5leHQpPj0wKXJldHVybiExO2k9aS5uZXh0fXJldHVybiEwfWZ1bmN0aW9uIEFpKHQsZSxyLG4pe3ZhciBpPXQucHJldixhPXQsbz10Lm5leHQ7aWYoSWkoaSxhLG8pPj0wKXJldHVybiExO2Zvcih2YXIgcz1pLng8YS54P2kueDxvLng/aS54Om8ueDphLng8by54P2EueDpvLngsbD1pLnk8YS55P2kueTxvLnk/aS55Om8ueTphLnk8by55P2EueTpvLnksYz1pLng+YS54P2kueD5vLng/aS54Om8ueDphLng+by54P2EueDpvLngsdT1pLnk+YS55P2kueT5vLnk/aS55Om8ueTphLnk+by55P2EueTpvLnksaD1DaShzLGwsZSxyLG4pLGY9Q2koYyx1LGUscixuKSxwPXQucHJldlosZD10Lm5leHRaO3AmJnAuej49aCYmZCYmZC56PD1mOyl7aWYocCE9PXQucHJldiYmcCE9PXQubmV4dCYmemkoaS54LGkueSxhLngsYS55LG8ueCxvLnkscC54LHAueSkmJklpKHAucHJldixwLHAubmV4dCk+PTApcmV0dXJuITE7aWYocD1wLnByZXZaLGQhPT10LnByZXYmJmQhPT10Lm5leHQmJnppKGkueCxpLnksYS54LGEueSxvLngsby55LGQueCxkLnkpJiZJaShkLnByZXYsZCxkLm5leHQpPj0wKXJldHVybiExO2Q9ZC5uZXh0Wn1mb3IoO3AmJnAuej49aDspe2lmKHAhPT10LnByZXYmJnAhPT10Lm5leHQmJnppKGkueCxpLnksYS54LGEueSxvLngsby55LHAueCxwLnkpJiZJaShwLnByZXYscCxwLm5leHQpPj0wKXJldHVybiExO3A9cC5wcmV2Wn1mb3IoO2QmJmQuejw9Zjspe2lmKGQhPT10LnByZXYmJmQhPT10Lm5leHQmJnppKGkueCxpLnksYS54LGEueSxvLngsby55LGQueCxkLnkpJiZJaShkLnByZXYsZCxkLm5leHQpPj0wKXJldHVybiExO2Q9ZC5uZXh0Wn1yZXR1cm4hMH1mdW5jdGlvbiBUaSh0LGUscil7dmFyIG49dDtkb3t2YXIgaT1uLnByZXYsYT1uLm5leHQubmV4dDshRGkoaSxhKSYmUGkoaSxuLG4ubmV4dCxhKSYmUmkoaSxhKSYmUmkoYSxpKSYmKGUucHVzaChpLmkvciksZS5wdXNoKG4uaS9yKSxlLnB1c2goYS5pL3IpLE5pKG4pLE5pKG4ubmV4dCksbj10PWEpLG49bi5uZXh0fXdoaWxlKG4hPT10KTtyZXR1cm4gbn1mdW5jdGlvbiBNaSh0LGUscixuLGksYSl7dmFyIG89dDtkb3tmb3IodmFyIHM9by5uZXh0Lm5leHQ7cyE9PW8ucHJldjspe2lmKG8uaSE9PXMuaSYmT2kobyxzKSl7dmFyIGw9RmkobyxzKTtyZXR1cm4gbz1faShvLG8ubmV4dCksbD1faShsLGwubmV4dCksd2kobyxlLHIsbixpLGEpLHZvaWQgd2kobCxlLHIsbixpLGEpfXM9cy5uZXh0fW89by5uZXh0fXdoaWxlKG8hPT10KX1mdW5jdGlvbiBTaSh0LGUpe3JldHVybiB0LngtZS54fWZ1bmN0aW9uIEVpKHQsZSl7aWYoZT1mdW5jdGlvbih0LGUpe3ZhciByLG49ZSxpPXQueCxhPXQueSxvPS0xLzA7ZG97aWYoYTw9bi55JiZhPj1uLm5leHQueSYmbi5uZXh0LnkhPT1uLnkpe3ZhciBzPW4ueCsoYS1uLnkpKihuLm5leHQueC1uLngpLyhuLm5leHQueS1uLnkpO2lmKHM8PWkmJnM+byl7aWYobz1zLHM9PT1pKXtpZihhPT09bi55KXJldHVybiBuO2lmKGE9PT1uLm5leHQueSlyZXR1cm4gbi5uZXh0fXI9bi54PG4ubmV4dC54P246bi5uZXh0fX1uPW4ubmV4dH13aGlsZShuIT09ZSk7aWYoIXIpcmV0dXJuIG51bGw7aWYoaT09PW8pcmV0dXJuIHIucHJldjt2YXIgbCxjPXIsdT1yLngsaD1yLnksZj0xLzA7Zm9yKG49ci5uZXh0O24hPT1jOylpPj1uLngmJm4ueD49dSYmaSE9PW4ueCYmemkoYTxoP2k6byxhLHUsaCxhPGg/bzppLGEsbi54LG4ueSkmJigobD1NYXRoLmFicyhhLW4ueSkvKGktbi54KSk8Znx8bD09PWYmJm4ueD5yLngpJiZSaShuLHQpJiYocj1uLGY9bCksbj1uLm5leHQ7cmV0dXJuIHJ9KHQsZSkpe3ZhciByPUZpKGUsdCk7X2kocixyLm5leHQpfX1mdW5jdGlvbiBDaSh0LGUscixuLGkpe3JldHVybih0PTE0MzE2NTU3NjUmKCh0PTg1ODk5MzQ1OSYoKHQ9MjUyNjQ1MTM1JigodD0xNjcxMTkzNSYoKHQ9MzI3NjcqKHQtcikqaSl8dDw8OCkpfHQ8PDQpKXx0PDwyKSl8dDw8MSkpfChlPTE0MzE2NTU3NjUmKChlPTg1ODk5MzQ1OSYoKGU9MjUyNjQ1MTM1JigoZT0xNjcxMTkzNSYoKGU9MzI3NjcqKGUtbikqaSl8ZTw8OCkpfGU8PDQpKXxlPDwyKSl8ZTw8MSkpPDwxfWZ1bmN0aW9uIExpKHQpe3ZhciBlPXQscj10O2Rve2UueDxyLngmJihyPWUpLGU9ZS5uZXh0fXdoaWxlKGUhPT10KTtyZXR1cm4gcn1mdW5jdGlvbiB6aSh0LGUscixuLGksYSxvLHMpe3JldHVybihpLW8pKihlLXMpLSh0LW8pKihhLXMpPj0wJiYodC1vKSoobi1zKS0oci1vKSooZS1zKT49MCYmKHItbykqKGEtcyktKGktbykqKG4tcyk+PTB9ZnVuY3Rpb24gT2kodCxlKXtyZXR1cm4gdC5uZXh0LmkhPT1lLmkmJnQucHJldi5pIT09ZS5pJiYhZnVuY3Rpb24odCxlKXt2YXIgcj10O2Rve2lmKHIuaSE9PXQuaSYmci5uZXh0LmkhPT10LmkmJnIuaSE9PWUuaSYmci5uZXh0LmkhPT1lLmkmJlBpKHIsci5uZXh0LHQsZSkpcmV0dXJuITA7cj1yLm5leHR9d2hpbGUociE9PXQpO3JldHVybiExfSh0LGUpJiZSaSh0LGUpJiZSaShlLHQpJiZmdW5jdGlvbih0LGUpe3ZhciByPXQsbj0hMSxpPSh0LngrZS54KS8yLGE9KHQueStlLnkpLzI7ZG97ci55PmEhPXIubmV4dC55PmEmJnIubmV4dC55IT09ci55JiZpPChyLm5leHQueC1yLngpKihhLXIueSkvKHIubmV4dC55LXIueSkrci54JiYobj0hbikscj1yLm5leHR9d2hpbGUociE9PXQpO3JldHVybiBufSh0LGUpfWZ1bmN0aW9uIElpKHQsZSxyKXtyZXR1cm4oZS55LXQueSkqKHIueC1lLngpLShlLngtdC54KSooci55LWUueSl9ZnVuY3Rpb24gRGkodCxlKXtyZXR1cm4gdC54PT09ZS54JiZ0Lnk9PT1lLnl9ZnVuY3Rpb24gUGkodCxlLHIsbil7cmV0dXJuISEoRGkodCxlKSYmRGkocixuKXx8RGkodCxuKSYmRGkocixlKSl8fElpKHQsZSxyKT4wIT1JaSh0LGUsbik+MCYmSWkocixuLHQpPjAhPUlpKHIsbixlKT4wfWZ1bmN0aW9uIFJpKHQsZSl7cmV0dXJuIElpKHQucHJldix0LHQubmV4dCk8MD9JaSh0LGUsdC5uZXh0KT49MCYmSWkodCx0LnByZXYsZSk+PTA6SWkodCxlLHQucHJldik8MHx8SWkodCx0Lm5leHQsZSk8MH1mdW5jdGlvbiBGaSh0LGUpe3ZhciByPW5ldyBqaSh0LmksdC54LHQueSksbj1uZXcgamkoZS5pLGUueCxlLnkpLGk9dC5uZXh0LGE9ZS5wcmV2O3JldHVybiB0Lm5leHQ9ZSxlLnByZXY9dCxyLm5leHQ9aSxpLnByZXY9cixuLm5leHQ9cixyLnByZXY9bixhLm5leHQ9bixuLnByZXY9YSxufWZ1bmN0aW9uIEJpKHQsZSxyLG4pe3ZhciBpPW5ldyBqaSh0LGUscik7cmV0dXJuIG4/KGkubmV4dD1uLm5leHQsaS5wcmV2PW4sbi5uZXh0LnByZXY9aSxuLm5leHQ9aSk6KGkucHJldj1pLGkubmV4dD1pKSxpfWZ1bmN0aW9uIE5pKHQpe3QubmV4dC5wcmV2PXQucHJldix0LnByZXYubmV4dD10Lm5leHQsdC5wcmV2WiYmKHQucHJldloubmV4dFo9dC5uZXh0WiksdC5uZXh0WiYmKHQubmV4dFoucHJldlo9dC5wcmV2Wil9ZnVuY3Rpb24gamkodCxlLHIpe3RoaXMuaT10LHRoaXMueD1lLHRoaXMueT1yLHRoaXMucHJldj1udWxsLHRoaXMubmV4dD1udWxsLHRoaXMuej1udWxsLHRoaXMucHJldlo9bnVsbCx0aGlzLm5leHRaPW51bGwsdGhpcy5zdGVpbmVyPSExfWZ1bmN0aW9uIFZpKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9ZSxvPXItbjthPHI7YSs9bilpKz0odFtvXS10W2FdKSoodFthKzFdK3RbbysxXSksbz1hO3JldHVybiBpfXhpLmRldmlhdGlvbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lJiZlLmxlbmd0aCxhPWk/ZVswXSpyOnQubGVuZ3RoLG89TWF0aC5hYnMoVmkodCwwLGEscikpO2lmKGkpZm9yKHZhciBzPTAsbD1lLmxlbmd0aDtzPGw7cysrKXt2YXIgYz1lW3NdKnIsdT1zPGwtMT9lW3MrMV0qcjp0Lmxlbmd0aDtvLT1NYXRoLmFicyhWaSh0LGMsdSxyKSl9dmFyIGg9MDtmb3Iocz0wO3M8bi5sZW5ndGg7cys9Myl7dmFyIGY9bltzXSpyLHA9bltzKzFdKnIsZD1uW3MrMl0qcjtoKz1NYXRoLmFicygodFtmXS10W2RdKSoodFtwKzFdLXRbZisxXSktKHRbZl0tdFtwXSkqKHRbZCsxXS10W2YrMV0pKX1yZXR1cm4gMD09PW8mJjA9PT1oPzA6TWF0aC5hYnMoKGgtbykvbyl9LHhpLmZsYXR0ZW49ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF1bMF0ubGVuZ3RoLHI9e3ZlcnRpY2VzOltdLGhvbGVzOltdLGRpbWVuc2lvbnM6ZX0sbj0wLGk9MDtpPHQubGVuZ3RoO2krKyl7Zm9yKHZhciBhPTA7YTx0W2ldLmxlbmd0aDthKyspZm9yKHZhciBvPTA7bzxlO28rKylyLnZlcnRpY2VzLnB1c2godFtpXVthXVtvXSk7aT4wJiYobis9dFtpLTFdLmxlbmd0aCxyLmhvbGVzLnB1c2gobikpfXJldHVybiByfSxtaS5kZWZhdWx0PXlpO3ZhciBVaT1IaSxxaT1IaTtmdW5jdGlvbiBIaSh0LGUscixuLGkpeyFmdW5jdGlvbiB0KGUscixuLGksYSl7Zm9yKDtpPm47KXtpZihpLW4+NjAwKXt2YXIgbz1pLW4rMSxzPXItbisxLGw9TWF0aC5sb2cobyksYz0uNSpNYXRoLmV4cCgyKmwvMyksdT0uNSpNYXRoLnNxcnQobCpjKihvLWMpL28pKihzLW8vMjwwPy0xOjEpO3QoZSxyLE1hdGgubWF4KG4sTWF0aC5mbG9vcihyLXMqYy9vK3UpKSxNYXRoLm1pbihpLE1hdGguZmxvb3Iocisoby1zKSpjL28rdSkpLGEpfXZhciBoPWVbcl0sZj1uLHA9aTtmb3IoR2koZSxuLHIpLGEoZVtpXSxoKT4wJiZHaShlLG4saSk7ZjxwOyl7Zm9yKEdpKGUsZixwKSxmKysscC0tO2EoZVtmXSxoKTwwOylmKys7Zm9yKDthKGVbcF0saCk+MDspcC0tfTA9PT1hKGVbbl0saCk/R2koZSxuLHApOkdpKGUsKytwLGkpLHA8PXImJihuPXArMSkscjw9cCYmKGk9cC0xKX19KHQsZSxyfHwwLG58fHQubGVuZ3RoLTEsaXx8WWkpfWZ1bmN0aW9uIEdpKHQsZSxyKXt2YXIgbj10W2VdO3RbZV09dFtyXSx0W3JdPW59ZnVuY3Rpb24gWWkodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9ZnVuY3Rpb24gV2kodCxlKXt2YXIgcj10Lmxlbmd0aDtpZihyPD0xKXJldHVyblt0XTtmb3IodmFyIG4saSxhPVtdLG89MDtvPHI7bysrKXt2YXIgcz1rKHRbb10pOzAhPT1zJiYodFtvXS5hcmVhPU1hdGguYWJzKHMpLHZvaWQgMD09PWkmJihpPXM8MCksaT09PXM8MD8obiYmYS5wdXNoKG4pLG49W3Rbb11dKTpuLnB1c2godFtvXSkpfWlmKG4mJmEucHVzaChuKSxlPjEpZm9yKHZhciBsPTA7bDxhLmxlbmd0aDtsKyspYVtsXS5sZW5ndGg8PWV8fChVaShhW2xdLGUsMSxhW2xdLmxlbmd0aC0xLFhpKSxhW2xdPWFbbF0uc2xpY2UoMCxlKSk7cmV0dXJuIGF9ZnVuY3Rpb24gWGkodCxlKXtyZXR1cm4gZS5hcmVhLXQuYXJlYX1VaS5kZWZhdWx0PXFpO3ZhciBaaT1mdW5jdGlvbih0KXt0aGlzLnpvb209dC56b29tLHRoaXMub3ZlcnNjYWxpbmc9dC5vdmVyc2NhbGluZyx0aGlzLmxheWVycz10LmxheWVycyx0aGlzLmxheWVySWRzPXRoaXMubGF5ZXJzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pLHRoaXMuaW5kZXg9dC5pbmRleCx0aGlzLmxheW91dFZlcnRleEFycmF5PW5ldyAkcix0aGlzLmluZGV4QXJyYXk9bmV3IGhuLHRoaXMuaW5kZXhBcnJheTI9bmV3IGZuLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zPW5ldyBJbih2aSx0LmxheWVycyx0Lnpvb20pLHRoaXMuc2VnbWVudHM9bmV3IE1uLHRoaXMuc2VnbWVudHMyPW5ldyBNbn07WmkucHJvdG90eXBlLnBvcHVsYXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj10O3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXSxhPWkuZmVhdHVyZSxvPWkuaW5kZXgscz1pLnNvdXJjZUxheWVySW5kZXg7aWYodGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIobmV3IExyKHRoaXMuem9vbSksYSkpe3ZhciBsPUZuKGEpO3RoaXMuYWRkRmVhdHVyZShhLGwpLGUuZmVhdHVyZUluZGV4Lmluc2VydChhLGwsbyxzLHRoaXMuaW5kZXgpfX19LFppLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aH0sWmkucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LHZpKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KSx0aGlzLmluZGV4QnVmZmVyMj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheTIpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZCh0KX0sWmkucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlciYmKHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyMi5kZXN0cm95KCksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMyLmRlc3Ryb3koKSl9LFppLnByb3RvdHlwZS5hZGRGZWF0dXJlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj1XaShlLDUwMCk7cjxuLmxlbmd0aDtyKz0xKXtmb3IodmFyIGk9bltyXSxhPTAsbz0wLHM9aTtvPHMubGVuZ3RoO28rPTEpYSs9c1tvXS5sZW5ndGg7Zm9yKHZhciBsPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoYSx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheSksYz1sLnZlcnRleExlbmd0aCx1PVtdLGg9W10sZj0wLHA9aTtmPHAubGVuZ3RoO2YrPTEpe3ZhciBkPXBbZl07aWYoMCE9PWQubGVuZ3RoKXtkIT09aVswXSYmaC5wdXNoKHUubGVuZ3RoLzIpO3ZhciBnPXRoaXMuc2VnbWVudHMyLnByZXBhcmVTZWdtZW50KGQubGVuZ3RoLHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5Miksdj1nLnZlcnRleExlbmd0aDt0aGlzLmxheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKGRbMF0ueCxkWzBdLnkpLHRoaXMuaW5kZXhBcnJheTIuZW1wbGFjZUJhY2soditkLmxlbmd0aC0xLHYpLHUucHVzaChkWzBdLngpLHUucHVzaChkWzBdLnkpO2Zvcih2YXIgbT0xO208ZC5sZW5ndGg7bSsrKXRoaXMubGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2soZFttXS54LGRbbV0ueSksdGhpcy5pbmRleEFycmF5Mi5lbXBsYWNlQmFjayh2K20tMSx2K20pLHUucHVzaChkW21dLngpLHUucHVzaChkW21dLnkpO2cudmVydGV4TGVuZ3RoKz1kLmxlbmd0aCxnLnByaW1pdGl2ZUxlbmd0aCs9ZC5sZW5ndGh9fWZvcih2YXIgeT1taSh1LGgpLHg9MDt4PHkubGVuZ3RoO3grPTMpdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKGMreVt4XSxjK3lbeCsxXSxjK3lbeCsyXSk7bC52ZXJ0ZXhMZW5ndGgrPWEsbC5wcmltaXRpdmVMZW5ndGgrPXkubGVuZ3RoLzN9dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCx0KX0scHIoXCJGaWxsQnVja2V0XCIsWmkse29taXQ6W1wibGF5ZXJzXCJdfSk7dmFyICRpPXtwYWludDpuZXcgcXIoe1wiZmlsbC1hbnRpYWxpYXNcIjpuZXcgTnIoSS5wYWludF9maWxsW1wiZmlsbC1hbnRpYWxpYXNcIl0pLFwiZmlsbC1vcGFjaXR5XCI6bmV3IGpyKEkucGFpbnRfZmlsbFtcImZpbGwtb3BhY2l0eVwiXSksXCJmaWxsLWNvbG9yXCI6bmV3IGpyKEkucGFpbnRfZmlsbFtcImZpbGwtY29sb3JcIl0pLFwiZmlsbC1vdXRsaW5lLWNvbG9yXCI6bmV3IGpyKEkucGFpbnRfZmlsbFtcImZpbGwtb3V0bGluZS1jb2xvclwiXSksXCJmaWxsLXRyYW5zbGF0ZVwiOm5ldyBOcihJLnBhaW50X2ZpbGxbXCJmaWxsLXRyYW5zbGF0ZVwiXSksXCJmaWxsLXRyYW5zbGF0ZS1hbmNob3JcIjpuZXcgTnIoSS5wYWludF9maWxsW1wiZmlsbC10cmFuc2xhdGUtYW5jaG9yXCJdKSxcImZpbGwtcGF0dGVyblwiOm5ldyBWcihJLnBhaW50X2ZpbGxbXCJmaWxsLXBhdHRlcm5cIl0pfSl9LEppPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSwkaSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnJlY2FsY3VsYXRlPWZ1bmN0aW9uKHQpe3RoaXMucGFpbnQ9dGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50LnBvc3NpYmx5RXZhbHVhdGUodCk7dmFyIGU9dGhpcy5wYWludC5fdmFsdWVzW1wiZmlsbC1vdXRsaW5lLWNvbG9yXCJdO1wiY29uc3RhbnRcIj09PWUudmFsdWUua2luZCYmdm9pZCAwPT09ZS52YWx1ZS52YWx1ZSYmKHRoaXMucGFpbnQuX3ZhbHVlc1tcImZpbGwtb3V0bGluZS1jb2xvclwiXT10aGlzLnBhaW50Ll92YWx1ZXNbXCJmaWxsLWNvbG9yXCJdKX0sZS5wcm90b3R5cGUuY3JlYXRlQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWmkodCl9LGUucHJvdG90eXBlLnF1ZXJ5UmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIEpuKHRoaXMucGFpbnQuZ2V0KFwiZmlsbC10cmFuc2xhdGVcIikpfSxlLnByb3RvdHlwZS5xdWVyeUludGVyc2VjdHNGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtyZXR1cm4gVm4oS24odCx0aGlzLnBhaW50LmdldChcImZpbGwtdHJhbnNsYXRlXCIpLHRoaXMucGFpbnQuZ2V0KFwiZmlsbC10cmFuc2xhdGUtYW5jaG9yXCIpLGkuYW5nbGUsYSkscil9LGV9KEhyKSxLaT1Ycihbe25hbWU6XCJhX3Bvc1wiLGNvbXBvbmVudHM6Mix0eXBlOlwiSW50MTZcIn0se25hbWU6XCJhX25vcm1hbF9lZFwiLGNvbXBvbmVudHM6NCx0eXBlOlwiSW50MTZcIn1dLDQpLm1lbWJlcnMsUWk9TWF0aC5wb3coMiwxMyk7ZnVuY3Rpb24gdGEodCxlLHIsbixpLGEsbyxzKXt0LmVtcGxhY2VCYWNrKGUsciwyKk1hdGguZmxvb3IobipRaSkrbyxpKlFpKjIsYSpRaSoyLE1hdGgucm91bmQocykpfXZhciBlYT1mdW5jdGlvbih0KXt0aGlzLnpvb209dC56b29tLHRoaXMub3ZlcnNjYWxpbmc9dC5vdmVyc2NhbGluZyx0aGlzLmxheWVycz10LmxheWVycyx0aGlzLmxheWVySWRzPXRoaXMubGF5ZXJzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pLHRoaXMuaW5kZXg9dC5pbmRleCx0aGlzLmxheW91dFZlcnRleEFycmF5PW5ldyBLcix0aGlzLmluZGV4QXJyYXk9bmV3IGhuLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zPW5ldyBJbihLaSx0LmxheWVycyx0Lnpvb20pLHRoaXMuc2VnbWVudHM9bmV3IE1ufTtmdW5jdGlvbiByYSh0LGUpe3JldHVybiB0Lng9PT1lLngmJih0Lng8MHx8dC54PlBuKXx8dC55PT09ZS55JiYodC55PDB8fHQueT5Qbil9ZnVuY3Rpb24gbmEodCl7cmV0dXJuIHQuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIHQueDwwfSl8fHQuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIHQueD5Qbn0pfHx0LmV2ZXJ5KGZ1bmN0aW9uKHQpe3JldHVybiB0Lnk8MH0pfHx0LmV2ZXJ5KGZ1bmN0aW9uKHQpe3JldHVybiB0Lnk+UG59KX1lYS5wcm90b3R5cGUucG9wdWxhdGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPXQ7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdLGE9aS5mZWF0dXJlLG89aS5pbmRleCxzPWkuc291cmNlTGF5ZXJJbmRleDtpZih0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlcihuZXcgTHIodGhpcy56b29tKSxhKSl7dmFyIGw9Rm4oYSk7dGhpcy5hZGRGZWF0dXJlKGEsbCksZS5mZWF0dXJlSW5kZXguaW5zZXJ0KGEsbCxvLHMsdGhpcy5pbmRleCl9fX0sZWEucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RofSxlYS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksS2kpLHRoaXMuaW5kZXhCdWZmZXI9dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZCh0KX0sZWEucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlciYmKHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCksdGhpcy5zZWdtZW50cy5kZXN0cm95KCkpfSxlYS5wcm90b3R5cGUuYWRkRmVhdHVyZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49V2koZSw1MDApO3I8bi5sZW5ndGg7cis9MSl7Zm9yKHZhciBpPW5bcl0sYT0wLG89MCxzPWk7bzxzLmxlbmd0aDtvKz0xKWErPXNbb10ubGVuZ3RoO2Zvcih2YXIgbD10aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXkpLGM9MCx1PWk7Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgaD11W2NdO2lmKDAhPT1oLmxlbmd0aCYmIW5hKGgpKWZvcih2YXIgZj0wLHA9MDtwPGgubGVuZ3RoO3ArKyl7dmFyIGQ9aFtwXTtpZihwPj0xKXt2YXIgZz1oW3AtMV07aWYoIXJhKGQsZykpe2wudmVydGV4TGVuZ3RoKzQ+TW4uTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEgmJihsPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheSkpO3ZhciB2PWQuc3ViKGcpLl9wZXJwKCkuX3VuaXQoKSxtPWcuZGlzdChkKTtmK20+MzI3NjgmJihmPTApLHRhKHRoaXMubGF5b3V0VmVydGV4QXJyYXksZC54LGQueSx2Lngsdi55LDAsMCxmKSx0YSh0aGlzLmxheW91dFZlcnRleEFycmF5LGQueCxkLnksdi54LHYueSwwLDEsZiksZis9bSx0YSh0aGlzLmxheW91dFZlcnRleEFycmF5LGcueCxnLnksdi54LHYueSwwLDAsZiksdGEodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxnLngsZy55LHYueCx2LnksMCwxLGYpO3ZhciB5PWwudmVydGV4TGVuZ3RoO3RoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayh5LHkrMSx5KzIpLHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayh5KzEseSsyLHkrMyksbC52ZXJ0ZXhMZW5ndGgrPTQsbC5wcmltaXRpdmVMZW5ndGgrPTJ9fX19bC52ZXJ0ZXhMZW5ndGgrYT5Nbi5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCYmKGw9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudChhLHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5KSk7Zm9yKHZhciB4PVtdLGI9W10sXz1sLnZlcnRleExlbmd0aCx3PTAsaz1pO3c8ay5sZW5ndGg7dys9MSl7dmFyIEE9a1t3XTtpZigwIT09QS5sZW5ndGgpe0EhPT1pWzBdJiZiLnB1c2goeC5sZW5ndGgvMik7Zm9yKHZhciBUPTA7VDxBLmxlbmd0aDtUKyspe3ZhciBNPUFbVF07dGEodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxNLngsTS55LDAsMCwxLDEsMCkseC5wdXNoKE0ueCkseC5wdXNoKE0ueSl9fX1mb3IodmFyIFM9bWkoeCxiKSxFPTA7RTxTLmxlbmd0aDtFKz0zKXRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhfK1NbRV0sXytTW0UrMV0sXytTW0UrMl0pO2wucHJpbWl0aXZlTGVuZ3RoKz1TLmxlbmd0aC8zLGwudmVydGV4TGVuZ3RoKz1hfXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsdCl9LHByKFwiRmlsbEV4dHJ1c2lvbkJ1Y2tldFwiLGVhLHtvbWl0OltcImxheWVyc1wiXX0pO3ZhciBpYT17cGFpbnQ6bmV3IHFyKHtcImZpbGwtZXh0cnVzaW9uLW9wYWNpdHlcIjpuZXcgTnIoSVtcInBhaW50X2ZpbGwtZXh0cnVzaW9uXCJdW1wiZmlsbC1leHRydXNpb24tb3BhY2l0eVwiXSksXCJmaWxsLWV4dHJ1c2lvbi1jb2xvclwiOm5ldyBqcihJW1wicGFpbnRfZmlsbC1leHRydXNpb25cIl1bXCJmaWxsLWV4dHJ1c2lvbi1jb2xvclwiXSksXCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGVcIjpuZXcgTnIoSVtcInBhaW50X2ZpbGwtZXh0cnVzaW9uXCJdW1wiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlXCJdKSxcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3JcIjpuZXcgTnIoSVtcInBhaW50X2ZpbGwtZXh0cnVzaW9uXCJdW1wiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvclwiXSksXCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuXCI6bmV3IFZyKElbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLXBhdHRlcm5cIl0pLFwiZmlsbC1leHRydXNpb24taGVpZ2h0XCI6bmV3IGpyKElbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLWhlaWdodFwiXSksXCJmaWxsLWV4dHJ1c2lvbi1iYXNlXCI6bmV3IGpyKElbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLWJhc2VcIl0pfSl9LGFhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxpYSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGVhKHQpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBKbih0aGlzLnBhaW50LmdldChcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZVwiKSl9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3JldHVybiBWbihLbih0LHRoaXMucGFpbnQuZ2V0KFwiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlXCIpLHRoaXMucGFpbnQuZ2V0KFwiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvclwiKSxpLmFuZ2xlLGEpLHIpfSxlLnByb3RvdHlwZS5oYXNPZmZzY3JlZW5QYXNzPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLnBhaW50LmdldChcImZpbGwtZXh0cnVzaW9uLW9wYWNpdHlcIikmJlwibm9uZVwiIT09dGhpcy52aXNpYmlsaXR5fSxlLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oKXt0aGlzLnZpZXdwb3J0RnJhbWUmJih0aGlzLnZpZXdwb3J0RnJhbWUuZGVzdHJveSgpLHRoaXMudmlld3BvcnRGcmFtZT1udWxsKX0sZX0oSHIpLG9hPVhyKFt7bmFtZTpcImFfcG9zX25vcm1hbFwiLGNvbXBvbmVudHM6NCx0eXBlOlwiSW50MTZcIn0se25hbWU6XCJhX2RhdGFcIixjb21wb25lbnRzOjQsdHlwZTpcIlVpbnQ4XCJ9XSw0KS5tZW1iZXJzLHNhPWxhO2Z1bmN0aW9uIGxhKHQsZSxyLG4saSl7dGhpcy5wcm9wZXJ0aWVzPXt9LHRoaXMuZXh0ZW50PXIsdGhpcy50eXBlPTAsdGhpcy5fcGJmPXQsdGhpcy5fZ2VvbWV0cnk9LTEsdGhpcy5fa2V5cz1uLHRoaXMuX3ZhbHVlcz1pLHQucmVhZEZpZWxkcyhjYSx0aGlzLGUpfWZ1bmN0aW9uIGNhKHQsZSxyKXsxPT10P2UuaWQ9ci5yZWFkVmFyaW50KCk6Mj09dD9mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LnJlYWRWYXJpbnQoKSt0LnBvczt0LnBvczxyOyl7dmFyIG49ZS5fa2V5c1t0LnJlYWRWYXJpbnQoKV0saT1lLl92YWx1ZXNbdC5yZWFkVmFyaW50KCldO2UucHJvcGVydGllc1tuXT1pfX0ocixlKTozPT10P2UudHlwZT1yLnJlYWRWYXJpbnQoKTo0PT10JiYoZS5fZ2VvbWV0cnk9ci5wb3MpfWZ1bmN0aW9uIHVhKHQpe2Zvcih2YXIgZSxyLG49MCxpPTAsYT10Lmxlbmd0aCxvPWEtMTtpPGE7bz1pKyspZT10W2ldLG4rPSgocj10W29dKS54LWUueCkqKGUueStyLnkpO3JldHVybiBufWxhLnR5cGVzPVtcIlVua25vd25cIixcIlBvaW50XCIsXCJMaW5lU3RyaW5nXCIsXCJQb2x5Z29uXCJdLGxhLnByb3RvdHlwZS5sb2FkR2VvbWV0cnk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYmY7dC5wb3M9dGhpcy5fZ2VvbWV0cnk7Zm9yKHZhciBlLHI9dC5yZWFkVmFyaW50KCkrdC5wb3Msbj0xLGk9MCxhPTAsbz0wLHM9W107dC5wb3M8cjspe2lmKGk8PTApe3ZhciBjPXQucmVhZFZhcmludCgpO249NyZjLGk9Yz4+M31pZihpLS0sMT09PW58fDI9PT1uKWErPXQucmVhZFNWYXJpbnQoKSxvKz10LnJlYWRTVmFyaW50KCksMT09PW4mJihlJiZzLnB1c2goZSksZT1bXSksZS5wdXNoKG5ldyBsKGEsbykpO2Vsc2V7aWYoNyE9PW4pdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBjb21tYW5kIFwiK24pO2UmJmUucHVzaChlWzBdLmNsb25lKCkpfX1yZXR1cm4gZSYmcy5wdXNoKGUpLHN9LGxhLnByb3RvdHlwZS5iYm94PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGJmO3QucG9zPXRoaXMuX2dlb21ldHJ5O2Zvcih2YXIgZT10LnJlYWRWYXJpbnQoKSt0LnBvcyxyPTEsbj0wLGk9MCxhPTAsbz0xLzAscz0tMS8wLGw9MS8wLGM9LTEvMDt0LnBvczxlOyl7aWYobjw9MCl7dmFyIHU9dC5yZWFkVmFyaW50KCk7cj03JnUsbj11Pj4zfWlmKG4tLSwxPT09cnx8Mj09PXIpKGkrPXQucmVhZFNWYXJpbnQoKSk8byYmKG89aSksaT5zJiYocz1pKSwoYSs9dC5yZWFkU1ZhcmludCgpKTxsJiYobD1hKSxhPmMmJihjPWEpO2Vsc2UgaWYoNyE9PXIpdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBjb21tYW5kIFwiK3IpfXJldHVybltvLGwscyxjXX0sbGEucHJvdG90eXBlLnRvR2VvSlNPTj1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhPXRoaXMuZXh0ZW50Kk1hdGgucG93KDIsciksbz10aGlzLmV4dGVudCp0LHM9dGhpcy5leHRlbnQqZSxsPXRoaXMubG9hZEdlb21ldHJ5KCksYz1sYS50eXBlc1t0aGlzLnR5cGVdO2Z1bmN0aW9uIHUodCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRbZV0sbj0xODAtMzYwKihyLnkrcykvYTt0W2VdPVszNjAqKHIueCtvKS9hLTE4MCwzNjAvTWF0aC5QSSpNYXRoLmF0YW4oTWF0aC5leHAobipNYXRoLlBJLzE4MCkpLTkwXX19c3dpdGNoKHRoaXMudHlwZSl7Y2FzZSAxOnZhciBoPVtdO2ZvcihuPTA7bjxsLmxlbmd0aDtuKyspaFtuXT1sW25dWzBdO3UobD1oKTticmVhaztjYXNlIDI6Zm9yKG49MDtuPGwubGVuZ3RoO24rKyl1KGxbbl0pO2JyZWFrO2Nhc2UgMzpmb3IobD1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtpZihlPD0xKXJldHVyblt0XTtmb3IodmFyIHIsbixpPVtdLGE9MDthPGU7YSsrKXt2YXIgbz11YSh0W2FdKTswIT09byYmKHZvaWQgMD09PW4mJihuPW88MCksbj09PW88MD8ociYmaS5wdXNoKHIpLHI9W3RbYV1dKTpyLnB1c2godFthXSkpfXJldHVybiByJiZpLnB1c2gociksaX0obCksbj0wO248bC5sZW5ndGg7bisrKWZvcihpPTA7aTxsW25dLmxlbmd0aDtpKyspdShsW25dW2ldKX0xPT09bC5sZW5ndGg/bD1sWzBdOmM9XCJNdWx0aVwiK2M7dmFyIGY9e3R5cGU6XCJGZWF0dXJlXCIsZ2VvbWV0cnk6e3R5cGU6Yyxjb29yZGluYXRlczpsfSxwcm9wZXJ0aWVzOnRoaXMucHJvcGVydGllc307cmV0dXJuXCJpZFwiaW4gdGhpcyYmKGYuaWQ9dGhpcy5pZCksZn07dmFyIGhhPWZhO2Z1bmN0aW9uIGZhKHQsZSl7dGhpcy52ZXJzaW9uPTEsdGhpcy5uYW1lPW51bGwsdGhpcy5leHRlbnQ9NDA5Nix0aGlzLmxlbmd0aD0wLHRoaXMuX3BiZj10LHRoaXMuX2tleXM9W10sdGhpcy5fdmFsdWVzPVtdLHRoaXMuX2ZlYXR1cmVzPVtdLHQucmVhZEZpZWxkcyhwYSx0aGlzLGUpLHRoaXMubGVuZ3RoPXRoaXMuX2ZlYXR1cmVzLmxlbmd0aH1mdW5jdGlvbiBwYSh0LGUscil7MTU9PT10P2UudmVyc2lvbj1yLnJlYWRWYXJpbnQoKToxPT09dD9lLm5hbWU9ci5yZWFkU3RyaW5nKCk6NT09PXQ/ZS5leHRlbnQ9ci5yZWFkVmFyaW50KCk6Mj09PXQ/ZS5fZmVhdHVyZXMucHVzaChyLnBvcyk6Mz09PXQ/ZS5fa2V5cy5wdXNoKHIucmVhZFN0cmluZygpKTo0PT09dCYmZS5fdmFsdWVzLnB1c2goZnVuY3Rpb24odCl7Zm9yKHZhciBlPW51bGwscj10LnJlYWRWYXJpbnQoKSt0LnBvczt0LnBvczxyOyl7dmFyIG49dC5yZWFkVmFyaW50KCk+PjM7ZT0xPT09bj90LnJlYWRTdHJpbmcoKToyPT09bj90LnJlYWRGbG9hdCgpOjM9PT1uP3QucmVhZERvdWJsZSgpOjQ9PT1uP3QucmVhZFZhcmludDY0KCk6NT09PW4/dC5yZWFkVmFyaW50KCk6Nj09PW4/dC5yZWFkU1ZhcmludCgpOjc9PT1uP3QucmVhZEJvb2xlYW4oKTpudWxsfXJldHVybiBlfShyKSl9ZnVuY3Rpb24gZGEodCxlLHIpe2lmKDM9PT10KXt2YXIgbj1uZXcgaGEocixyLnJlYWRWYXJpbnQoKStyLnBvcyk7bi5sZW5ndGgmJihlW24ubmFtZV09bil9fWZhLnByb3RvdHlwZS5mZWF0dXJlPWZ1bmN0aW9uKHQpe2lmKHQ8MHx8dD49dGhpcy5fZmVhdHVyZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImZlYXR1cmUgaW5kZXggb3V0IG9mIGJvdW5kc1wiKTt0aGlzLl9wYmYucG9zPXRoaXMuX2ZlYXR1cmVzW3RdO3ZhciBlPXRoaXMuX3BiZi5yZWFkVmFyaW50KCkrdGhpcy5fcGJmLnBvcztyZXR1cm4gbmV3IHNhKHRoaXMuX3BiZixlLHRoaXMuZXh0ZW50LHRoaXMuX2tleXMsdGhpcy5fdmFsdWVzKX07dmFyIGdhPXtWZWN0b3JUaWxlOmZ1bmN0aW9uKHQsZSl7dGhpcy5sYXllcnM9dC5yZWFkRmllbGRzKGRhLHt9LGUpfSxWZWN0b3JUaWxlRmVhdHVyZTpzYSxWZWN0b3JUaWxlTGF5ZXI6aGF9LHZhPWdhLlZlY3RvclRpbGVGZWF0dXJlLnR5cGVzLG1hPTYzLHlhPU1hdGguY29zKE1hdGguUEkvMTgwKjM3LjUpLHhhPS41LGJhPU1hdGgucG93KDIsMTQpL3hhO2Z1bmN0aW9uIF9hKHQsZSxyLG4saSxhLG8pe3QuZW1wbGFjZUJhY2soZS54LGUueSxuPzE6MCxpPzE6LTEsTWF0aC5yb3VuZChtYSpyLngpKzEyOCxNYXRoLnJvdW5kKG1hKnIueSkrMTI4LDErKDA9PT1hPzA6YTwwPy0xOjEpfChvKnhhJjYzKTw8MixvKnhhPj42KX12YXIgd2E9ZnVuY3Rpb24odCl7dGhpcy56b29tPXQuem9vbSx0aGlzLm92ZXJzY2FsaW5nPXQub3ZlcnNjYWxpbmcsdGhpcy5sYXllcnM9dC5sYXllcnMsdGhpcy5sYXllcklkcz10aGlzLmxheWVycy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheT1uZXcgUXIsdGhpcy5pbmRleEFycmF5PW5ldyBobix0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucz1uZXcgSW4ob2EsdC5sYXllcnMsdC56b29tKSx0aGlzLnNlZ21lbnRzPW5ldyBNbn07ZnVuY3Rpb24ga2EodCxlKXtyZXR1cm4odC9lLnRpbGVUb3RhbCooZS5lbmQtZS5zdGFydCkrZS5zdGFydCkqKGJhLTEpfXdhLnByb3RvdHlwZS5wb3B1bGF0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49dDtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl0sYT1pLmZlYXR1cmUsbz1pLmluZGV4LHM9aS5zb3VyY2VMYXllckluZGV4O2lmKHRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyKG5ldyBMcih0aGlzLnpvb20pLGEpKXt2YXIgbD1GbihhKTt0aGlzLmFkZEZlYXR1cmUoYSxsKSxlLmZlYXR1cmVJbmRleC5pbnNlcnQoYSxsLG8scyx0aGlzLmluZGV4KX19fSx3YS5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGh9LHdhLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxvYSksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKHQpfSx3YS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyJiYodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSl9LHdhLnByb3RvdHlwZS5hZGRGZWF0dXJlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMubGF5ZXJzWzBdLmxheW91dCxuPXIuZ2V0KFwibGluZS1qb2luXCIpLmV2YWx1YXRlKHQpLGk9ci5nZXQoXCJsaW5lLWNhcFwiKSxhPXIuZ2V0KFwibGluZS1taXRlci1saW1pdFwiKSxvPXIuZ2V0KFwibGluZS1yb3VuZC1saW1pdFwiKSxzPTAsbD1lO3M8bC5sZW5ndGg7cys9MSl7dmFyIGM9bFtzXTt0aGlzLmFkZExpbmUoYyx0LG4saSxhLG8pfX0sd2EucHJvdG90eXBlLmFkZExpbmU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPW51bGw7ZS5wcm9wZXJ0aWVzJiZlLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoXCJtYXBib3hfY2xpcF9zdGFydFwiKSYmZS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KFwibWFwYm94X2NsaXBfZW5kXCIpJiYobz17c3RhcnQ6ZS5wcm9wZXJ0aWVzLm1hcGJveF9jbGlwX3N0YXJ0LGVuZDplLnByb3BlcnRpZXMubWFwYm94X2NsaXBfZW5kLHRpbGVUb3RhbDp2b2lkIDB9KTtmb3IodmFyIHM9XCJQb2x5Z29uXCI9PT12YVtlLnR5cGVdLGw9dC5sZW5ndGg7bD49MiYmdFtsLTFdLmVxdWFscyh0W2wtMl0pOylsLS07Zm9yKHZhciBjPTA7YzxsLTEmJnRbY10uZXF1YWxzKHRbYysxXSk7KWMrKztpZighKGw8KHM/MzoyKSkpe28mJihvLnRpbGVUb3RhbD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGksYT0wLG89YztvPHItMTtvKyspbj10W29dLGk9dFtvKzFdLGErPW4uZGlzdChpKTtyZXR1cm4gYX0odCwwLGwpKSxcImJldmVsXCI9PT1yJiYoaT0xLjA1KTt2YXIgdT1Qbi8oNTEyKnRoaXMub3ZlcnNjYWxpbmcpKjE1LGg9dFtjXSxmPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoMTAqbCx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheSk7dGhpcy5kaXN0YW5jZT0wO3ZhciBwLGQsZyx2PW4sbT1zP1wiYnV0dFwiOm4seT0hMCx4PXZvaWQgMCxiPXZvaWQgMCxfPXZvaWQgMCx3PXZvaWQgMDt0aGlzLmUxPXRoaXMuZTI9dGhpcy5lMz0tMSxzJiYocD10W2wtMl0sdz1oLnN1YihwKS5fdW5pdCgpLl9wZXJwKCkpO2Zvcih2YXIgaz1jO2s8bDtrKyspaWYoIShiPXMmJms9PT1sLTE/dFtjKzFdOnRbaysxXSl8fCF0W2tdLmVxdWFscyhiKSl7dyYmKF89dykscCYmKHg9cCkscD10W2tdLHc9Yj9iLnN1YihwKS5fdW5pdCgpLl9wZXJwKCk6Xzt2YXIgQT0oXz1ffHx3KS5hZGQodyk7MD09PUEueCYmMD09PUEueXx8QS5fdW5pdCgpO3ZhciBUPUEueCp3LngrQS55KncueSxNPTAhPT1UPzEvVDoxLzAsUz1UPHlhJiZ4JiZiO2lmKFMmJms+Yyl7dmFyIEU9cC5kaXN0KHgpO2lmKEU+Mip1KXt2YXIgQz1wLnN1YihwLnN1Yih4KS5fbXVsdCh1L0UpLl9yb3VuZCgpKTt0aGlzLmRpc3RhbmNlKz1DLmRpc3QoeCksdGhpcy5hZGRDdXJyZW50VmVydGV4KEMsdGhpcy5kaXN0YW5jZSxfLm11bHQoMSksMCwwLCExLGYsbykseD1DfX12YXIgTD14JiZiLHo9TD9yOmI/djptO2lmKEwmJlwicm91bmRcIj09PXomJihNPGE/ej1cIm1pdGVyXCI6TTw9MiYmKHo9XCJmYWtlcm91bmRcIikpLFwibWl0ZXJcIj09PXomJk0+aSYmKHo9XCJiZXZlbFwiKSxcImJldmVsXCI9PT16JiYoTT4yJiYoej1cImZsaXBiZXZlbFwiKSxNPGkmJih6PVwibWl0ZXJcIikpLHgmJih0aGlzLmRpc3RhbmNlKz1wLmRpc3QoeCkpLFwibWl0ZXJcIj09PXopQS5fbXVsdChNKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLEEsMCwwLCExLGYsbyk7ZWxzZSBpZihcImZsaXBiZXZlbFwiPT09eil7aWYoTT4xMDApQT13LmNsb25lKCkubXVsdCgtMSk7ZWxzZXt2YXIgTz1fLngqdy55LV8ueSp3Lng+MD8tMToxLEk9TSpfLmFkZCh3KS5tYWcoKS9fLnN1Yih3KS5tYWcoKTtBLl9wZXJwKCkuX211bHQoSSpPKX10aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLEEsMCwwLCExLGYsbyksdGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSxBLm11bHQoLTEpLDAsMCwhMSxmLG8pfWVsc2UgaWYoXCJiZXZlbFwiPT09enx8XCJmYWtlcm91bmRcIj09PXope3ZhciBEPV8ueCp3LnktXy55KncueD4wLFA9LU1hdGguc3FydChNKk0tMSk7aWYoRD8oZz0wLGQ9UCk6KGQ9MCxnPVApLHl8fHRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsXyxkLGcsITEsZixvKSxcImZha2Vyb3VuZFwiPT09eil7Zm9yKHZhciBSPU1hdGguZmxvb3IoOCooLjUtKFQtLjUpKSksRj12b2lkIDAsQj0wO0I8UjtCKyspRj13Lm11bHQoKEIrMSkvKFIrMSkpLl9hZGQoXykuX3VuaXQoKSx0aGlzLmFkZFBpZVNsaWNlVmVydGV4KHAsdGhpcy5kaXN0YW5jZSxGLEQsZixvKTt0aGlzLmFkZFBpZVNsaWNlVmVydGV4KHAsdGhpcy5kaXN0YW5jZSxBLEQsZixvKTtmb3IodmFyIE49Ui0xO04+PTA7Ti0tKUY9Xy5tdWx0KChOKzEpLyhSKzEpKS5fYWRkKHcpLl91bml0KCksdGhpcy5hZGRQaWVTbGljZVZlcnRleChwLHRoaXMuZGlzdGFuY2UsRixELGYsbyl9YiYmdGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSx3LC1kLC1nLCExLGYsbyl9ZWxzZVwiYnV0dFwiPT09ej8oeXx8dGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSxfLDAsMCwhMSxmLG8pLGImJnRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsdywwLDAsITEsZixvKSk6XCJzcXVhcmVcIj09PXo/KHl8fCh0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLF8sMSwxLCExLGYsbyksdGhpcy5lMT10aGlzLmUyPS0xKSxiJiZ0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLHcsLTEsLTEsITEsZixvKSk6XCJyb3VuZFwiPT09eiYmKHl8fCh0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLF8sMCwwLCExLGYsbyksdGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSxfLDEsMSwhMCxmLG8pLHRoaXMuZTE9dGhpcy5lMj0tMSksYiYmKHRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsdywtMSwtMSwhMCxmLG8pLHRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsdywwLDAsITEsZixvKSkpO2lmKFMmJms8bC0xKXt2YXIgaj1wLmRpc3QoYik7aWYoaj4yKnUpe3ZhciBWPXAuYWRkKGIuc3ViKHApLl9tdWx0KHUvaikuX3JvdW5kKCkpO3RoaXMuZGlzdGFuY2UrPVYuZGlzdChwKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoVix0aGlzLmRpc3RhbmNlLHcubXVsdCgxKSwwLDAsITEsZixvKSxwPVZ9fXk9ITF9dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCxlKX19LHdhLnByb3RvdHlwZS5hZGRDdXJyZW50VmVydGV4PWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dmFyIGwsYz10aGlzLmxheW91dFZlcnRleEFycmF5LHU9dGhpcy5pbmRleEFycmF5O3MmJihlPWthKGUscykpLGw9ci5jbG9uZSgpLG4mJmwuX3N1YihyLnBlcnAoKS5fbXVsdChuKSksX2EoYyx0LGwsYSwhMSxuLGUpLHRoaXMuZTM9by52ZXJ0ZXhMZW5ndGgrKyx0aGlzLmUxPj0wJiZ0aGlzLmUyPj0wJiYodS5lbXBsYWNlQmFjayh0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyksby5wcmltaXRpdmVMZW5ndGgrKyksdGhpcy5lMT10aGlzLmUyLHRoaXMuZTI9dGhpcy5lMyxsPXIubXVsdCgtMSksaSYmbC5fc3ViKHIucGVycCgpLl9tdWx0KGkpKSxfYShjLHQsbCxhLCEwLC1pLGUpLHRoaXMuZTM9by52ZXJ0ZXhMZW5ndGgrKyx0aGlzLmUxPj0wJiZ0aGlzLmUyPj0wJiYodS5lbXBsYWNlQmFjayh0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyksby5wcmltaXRpdmVMZW5ndGgrKyksdGhpcy5lMT10aGlzLmUyLHRoaXMuZTI9dGhpcy5lMyxlPmJhLzImJiFzJiYodGhpcy5kaXN0YW5jZT0wLHRoaXMuYWRkQ3VycmVudFZlcnRleCh0LHRoaXMuZGlzdGFuY2UscixuLGksYSxvKSl9LHdhLnByb3RvdHlwZS5hZGRQaWVTbGljZVZlcnRleD1mdW5jdGlvbih0LGUscixuLGksYSl7cj1yLm11bHQobj8tMToxKTt2YXIgbz10aGlzLmxheW91dFZlcnRleEFycmF5LHM9dGhpcy5pbmRleEFycmF5O2EmJihlPWthKGUsYSkpLF9hKG8sdCxyLCExLG4sMCxlKSx0aGlzLmUzPWkudmVydGV4TGVuZ3RoKyssdGhpcy5lMT49MCYmdGhpcy5lMj49MCYmKHMuZW1wbGFjZUJhY2sodGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMpLGkucHJpbWl0aXZlTGVuZ3RoKyspLG4/dGhpcy5lMj10aGlzLmUzOnRoaXMuZTE9dGhpcy5lM30scHIoXCJMaW5lQnVja2V0XCIsd2Ese29taXQ6W1wibGF5ZXJzXCJdfSk7dmFyIEFhPW5ldyBxcih7XCJsaW5lLWNhcFwiOm5ldyBOcihJLmxheW91dF9saW5lW1wibGluZS1jYXBcIl0pLFwibGluZS1qb2luXCI6bmV3IGpyKEkubGF5b3V0X2xpbmVbXCJsaW5lLWpvaW5cIl0pLFwibGluZS1taXRlci1saW1pdFwiOm5ldyBOcihJLmxheW91dF9saW5lW1wibGluZS1taXRlci1saW1pdFwiXSksXCJsaW5lLXJvdW5kLWxpbWl0XCI6bmV3IE5yKEkubGF5b3V0X2xpbmVbXCJsaW5lLXJvdW5kLWxpbWl0XCJdKX0pLFRhPXtwYWludDpuZXcgcXIoe1wibGluZS1vcGFjaXR5XCI6bmV3IGpyKEkucGFpbnRfbGluZVtcImxpbmUtb3BhY2l0eVwiXSksXCJsaW5lLWNvbG9yXCI6bmV3IGpyKEkucGFpbnRfbGluZVtcImxpbmUtY29sb3JcIl0pLFwibGluZS10cmFuc2xhdGVcIjpuZXcgTnIoSS5wYWludF9saW5lW1wibGluZS10cmFuc2xhdGVcIl0pLFwibGluZS10cmFuc2xhdGUtYW5jaG9yXCI6bmV3IE5yKEkucGFpbnRfbGluZVtcImxpbmUtdHJhbnNsYXRlLWFuY2hvclwiXSksXCJsaW5lLXdpZHRoXCI6bmV3IGpyKEkucGFpbnRfbGluZVtcImxpbmUtd2lkdGhcIl0pLFwibGluZS1nYXAtd2lkdGhcIjpuZXcganIoSS5wYWludF9saW5lW1wibGluZS1nYXAtd2lkdGhcIl0pLFwibGluZS1vZmZzZXRcIjpuZXcganIoSS5wYWludF9saW5lW1wibGluZS1vZmZzZXRcIl0pLFwibGluZS1ibHVyXCI6bmV3IGpyKEkucGFpbnRfbGluZVtcImxpbmUtYmx1clwiXSksXCJsaW5lLWRhc2hhcnJheVwiOm5ldyBWcihJLnBhaW50X2xpbmVbXCJsaW5lLWRhc2hhcnJheVwiXSksXCJsaW5lLXBhdHRlcm5cIjpuZXcgVnIoSS5wYWludF9saW5lW1wibGluZS1wYXR0ZXJuXCJdKSxcImxpbmUtZ3JhZGllbnRcIjpuZXcgVXIoSS5wYWludF9saW5lW1wibGluZS1ncmFkaWVudFwiXSl9KSxsYXlvdXQ6QWF9LE1hPW5ldyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gcj1uZXcgTHIoTWF0aC5mbG9vcihyLnpvb20pLHtub3c6ci5ub3csZmFkZUR1cmF0aW9uOnIuZmFkZUR1cmF0aW9uLHpvb21IaXN0b3J5OnIuem9vbUhpc3RvcnksdHJhbnNpdGlvbjpyLnRyYW5zaXRpb259KSx0LnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlLmNhbGwodGhpcyxlLHIpfSxlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHI9cCh7fSxyLHt6b29tOk1hdGguZmxvb3Ioci56b29tKX0pLHQucHJvdG90eXBlLmV2YWx1YXRlLmNhbGwodGhpcyxlLHIsbil9LGV9KGpyKSkoVGEucGFpbnQucHJvcGVydGllc1tcImxpbmUtd2lkdGhcIl0uc3BlY2lmaWNhdGlvbik7TWEudXNlSW50ZWdlclpvb209ITA7dmFyIFNhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxUYSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24oZSxyLG4pe3QucHJvdG90eXBlLnNldFBhaW50UHJvcGVydHkuY2FsbCh0aGlzLGUscixuKSxcImxpbmUtZ3JhZGllbnRcIj09PWUmJnRoaXMuX3VwZGF0ZUdyYWRpZW50KCl9LGUucHJvdG90eXBlLl91cGRhdGVHcmFkaWVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuX3ZhbHVlc1tcImxpbmUtZ3JhZGllbnRcIl0udmFsdWUuZXhwcmVzc2lvbjt0aGlzLmdyYWRpZW50PWZpKHQsXCJsaW5lUHJvZ3Jlc3NcIiksdGhpcy5ncmFkaWVudFRleHR1cmU9bnVsbH0sZS5wcm90b3R5cGUucmVjYWxjdWxhdGU9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUucmVjYWxjdWxhdGUuY2FsbCh0aGlzLGUpLHRoaXMucGFpbnQuX3ZhbHVlc1tcImxpbmUtZmxvb3J3aWR0aFwiXT1NYS5wb3NzaWJseUV2YWx1YXRlKHRoaXMuX3RyYW5zaXRpb25pbmdQYWludC5fdmFsdWVzW1wibGluZS13aWR0aFwiXS52YWx1ZSxlKX0sZS5wcm90b3R5cGUuY3JlYXRlQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgd2EodCl9LGUucHJvdG90eXBlLnF1ZXJ5UmFkaXVzPWZ1bmN0aW9uKHQpe3ZhciBlPXQscj1FYSgkbihcImxpbmUtd2lkdGhcIix0aGlzLGUpLCRuKFwibGluZS1nYXAtd2lkdGhcIix0aGlzLGUpKSxuPSRuKFwibGluZS1vZmZzZXRcIix0aGlzLGUpO3JldHVybiByLzIrTWF0aC5hYnMobikrSm4odGhpcy5wYWludC5nZXQoXCJsaW5lLXRyYW5zbGF0ZVwiKSl9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPUtuKHQsdGhpcy5wYWludC5nZXQoXCJsaW5lLXRyYW5zbGF0ZVwiKSx0aGlzLnBhaW50LmdldChcImxpbmUtdHJhbnNsYXRlLWFuY2hvclwiKSxpLmFuZ2xlLGEpLHM9YS8yKkVhKHRoaXMucGFpbnQuZ2V0KFwibGluZS13aWR0aFwiKS5ldmFsdWF0ZShlKSx0aGlzLnBhaW50LmdldChcImxpbmUtZ2FwLXdpZHRoXCIpLmV2YWx1YXRlKGUpKSxjPXRoaXMucGFpbnQuZ2V0KFwibGluZS1vZmZzZXRcIikuZXZhbHVhdGUoZSk7cmV0dXJuIGMmJihyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49bmV3IGwoMCwwKSxpPTA7aTx0Lmxlbmd0aDtpKyspe2Zvcih2YXIgYT10W2ldLG89W10scz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgYz1hW3MtMV0sdT1hW3NdLGg9YVtzKzFdLGY9MD09PXM/bjp1LnN1YihjKS5fdW5pdCgpLl9wZXJwKCkscD1zPT09YS5sZW5ndGgtMT9uOmguc3ViKHUpLl91bml0KCkuX3BlcnAoKSxkPWYuX2FkZChwKS5fdW5pdCgpLGc9ZC54KnAueCtkLnkqcC55O2QuX211bHQoMS9nKSxvLnB1c2goZC5fbXVsdChlKS5fYWRkKHUpKX1yLnB1c2gobyl9cmV0dXJuIHJ9KHIsYyphKSksVW4obyxyLHMpfSxlfShIcik7ZnVuY3Rpb24gRWEodCxlKXtyZXR1cm4gZT4wP2UrMip0OnR9dmFyIENhPVhyKFt7bmFtZTpcImFfcG9zX29mZnNldFwiLGNvbXBvbmVudHM6NCx0eXBlOlwiSW50MTZcIn0se25hbWU6XCJhX2RhdGFcIixjb21wb25lbnRzOjQsdHlwZTpcIlVpbnQxNlwifV0pLExhPVhyKFt7bmFtZTpcImFfcHJvamVjdGVkX3Bvc1wiLGNvbXBvbmVudHM6Myx0eXBlOlwiRmxvYXQzMlwifV0sNCksemE9KFhyKFt7bmFtZTpcImFfZmFkZV9vcGFjaXR5XCIsY29tcG9uZW50czoxLHR5cGU6XCJVaW50MzJcIn1dLDQpLFhyKFt7bmFtZTpcImFfcGxhY2VkXCIsY29tcG9uZW50czoyLHR5cGU6XCJVaW50OFwifV0sNCkpLE9hPShYcihbe3R5cGU6XCJJbnQxNlwiLG5hbWU6XCJhbmNob3JQb2ludFhcIn0se3R5cGU6XCJJbnQxNlwiLG5hbWU6XCJhbmNob3JQb2ludFlcIn0se3R5cGU6XCJJbnQxNlwiLG5hbWU6XCJ4MVwifSx7dHlwZTpcIkludDE2XCIsbmFtZTpcInkxXCJ9LHt0eXBlOlwiSW50MTZcIixuYW1lOlwieDJcIn0se3R5cGU6XCJJbnQxNlwiLG5hbWU6XCJ5MlwifSx7dHlwZTpcIlVpbnQzMlwiLG5hbWU6XCJmZWF0dXJlSW5kZXhcIn0se3R5cGU6XCJVaW50MTZcIixuYW1lOlwic291cmNlTGF5ZXJJbmRleFwifSx7dHlwZTpcIlVpbnQxNlwiLG5hbWU6XCJidWNrZXRJbmRleFwifSx7dHlwZTpcIkludDE2XCIsbmFtZTpcInJhZGl1c1wifSx7dHlwZTpcIkludDE2XCIsbmFtZTpcInNpZ25lZERpc3RhbmNlRnJvbUFuY2hvclwifV0pLFhyKFt7bmFtZTpcImFfcG9zXCIsY29tcG9uZW50czoyLHR5cGU6XCJJbnQxNlwifSx7bmFtZTpcImFfYW5jaG9yX3Bvc1wiLGNvbXBvbmVudHM6Mix0eXBlOlwiSW50MTZcIn0se25hbWU6XCJhX2V4dHJ1ZGVcIixjb21wb25lbnRzOjIsdHlwZTpcIkludDE2XCJ9XSw0KSksSWE9WHIoW3tuYW1lOlwiYV9wb3NcIixjb21wb25lbnRzOjIsdHlwZTpcIkludDE2XCJ9LHtuYW1lOlwiYV9hbmNob3JfcG9zXCIsY29tcG9uZW50czoyLHR5cGU6XCJJbnQxNlwifSx7bmFtZTpcImFfZXh0cnVkZVwiLGNvbXBvbmVudHM6Mix0eXBlOlwiSW50MTZcIn1dLDQpO2Z1bmN0aW9uIERhKHQsZSxyKXt2YXIgbj1lLmxheW91dC5nZXQoXCJ0ZXh0LXRyYW5zZm9ybVwiKS5ldmFsdWF0ZShyKTtyZXR1cm5cInVwcGVyY2FzZVwiPT09bj90PXQudG9Mb2NhbGVVcHBlckNhc2UoKTpcImxvd2VyY2FzZVwiPT09biYmKHQ9dC50b0xvY2FsZUxvd2VyQ2FzZSgpKSxDci5hcHBseUFyYWJpY1NoYXBpbmcmJih0PUNyLmFwcGx5QXJhYmljU2hhcGluZyh0KSksdH1Ycihbe3R5cGU6XCJJbnQxNlwiLG5hbWU6XCJhbmNob3JYXCJ9LHt0eXBlOlwiSW50MTZcIixuYW1lOlwiYW5jaG9yWVwifSx7dHlwZTpcIlVpbnQxNlwiLG5hbWU6XCJnbHlwaFN0YXJ0SW5kZXhcIn0se3R5cGU6XCJVaW50MTZcIixuYW1lOlwibnVtR2x5cGhzXCJ9LHt0eXBlOlwiVWludDMyXCIsbmFtZTpcInZlcnRleFN0YXJ0SW5kZXhcIn0se3R5cGU6XCJVaW50MzJcIixuYW1lOlwibGluZVN0YXJ0SW5kZXhcIn0se3R5cGU6XCJVaW50MzJcIixuYW1lOlwibGluZUxlbmd0aFwifSx7dHlwZTpcIlVpbnQxNlwiLG5hbWU6XCJzZWdtZW50XCJ9LHt0eXBlOlwiVWludDE2XCIsbmFtZTpcImxvd2VyU2l6ZVwifSx7dHlwZTpcIlVpbnQxNlwiLG5hbWU6XCJ1cHBlclNpemVcIn0se3R5cGU6XCJGbG9hdDMyXCIsbmFtZTpcImxpbmVPZmZzZXRYXCJ9LHt0eXBlOlwiRmxvYXQzMlwiLG5hbWU6XCJsaW5lT2Zmc2V0WVwifSx7dHlwZTpcIlVpbnQ4XCIsbmFtZTpcIndyaXRpbmdNb2RlXCJ9LHt0eXBlOlwiVWludDhcIixuYW1lOlwiaGlkZGVuXCJ9XSksWHIoW3t0eXBlOlwiRmxvYXQzMlwiLG5hbWU6XCJvZmZzZXRYXCJ9XSksWHIoW3t0eXBlOlwiSW50MTZcIixuYW1lOlwieFwifSx7dHlwZTpcIkludDE2XCIsbmFtZTpcInlcIn0se3R5cGU6XCJJbnQxNlwiLG5hbWU6XCJ0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvclwifV0pO3ZhciBQYT17XCIhXCI6XCJcXHVmZTE1XCIsXCIjXCI6XCJcXHVmZjAzXCIsJDpcIlxcdWZmMDRcIixcIiVcIjpcIlxcdWZmMDVcIixcIiZcIjpcIlxcdWZmMDZcIixcIihcIjpcIlxcdWZlMzVcIixcIilcIjpcIlxcdWZlMzZcIixcIipcIjpcIlxcdWZmMGFcIixcIitcIjpcIlxcdWZmMGJcIixcIixcIjpcIlxcdWZlMTBcIixcIi1cIjpcIlxcdWZlMzJcIixcIi5cIjpcIlxcdTMwZmJcIixcIi9cIjpcIlxcdWZmMGZcIixcIjpcIjpcIlxcdWZlMTNcIixcIjtcIjpcIlxcdWZlMTRcIixcIjxcIjpcIlxcdWZlM2ZcIixcIj1cIjpcIlxcdWZmMWRcIixcIj5cIjpcIlxcdWZlNDBcIixcIj9cIjpcIlxcdWZlMTZcIixcIkBcIjpcIlxcdWZmMjBcIixcIltcIjpcIlxcdWZlNDdcIixcIlxcXFxcIjpcIlxcdWZmM2NcIixcIl1cIjpcIlxcdWZlNDhcIixcIl5cIjpcIlxcdWZmM2VcIixfOlwiXFx1ZmUzM1wiLFwiYFwiOlwiXFx1ZmY0MFwiLFwie1wiOlwiXFx1ZmUzN1wiLFwifFwiOlwiXFx1MjAxNVwiLFwifVwiOlwiXFx1ZmUzOFwiLFwiflwiOlwiXFx1ZmY1ZVwiLFwiXFx4YTJcIjpcIlxcdWZmZTBcIixcIlxceGEzXCI6XCJcXHVmZmUxXCIsXCJcXHhhNVwiOlwiXFx1ZmZlNVwiLFwiXFx4YTZcIjpcIlxcdWZmZTRcIixcIlxceGFjXCI6XCJcXHVmZmUyXCIsXCJcXHhhZlwiOlwiXFx1ZmZlM1wiLFwiXFx1MjAxM1wiOlwiXFx1ZmUzMlwiLFwiXFx1MjAxNFwiOlwiXFx1ZmUzMVwiLFwiXFx1MjAxOFwiOlwiXFx1ZmU0M1wiLFwiXFx1MjAxOVwiOlwiXFx1ZmU0NFwiLFwiXFx1MjAxY1wiOlwiXFx1ZmU0MVwiLFwiXFx1MjAxZFwiOlwiXFx1ZmU0MlwiLFwiXFx1MjAyNlwiOlwiXFx1ZmUxOVwiLFwiXFx1MjAyN1wiOlwiXFx1MzBmYlwiLFwiXFx1MjBhOVwiOlwiXFx1ZmZlNlwiLFwiXFx1MzAwMVwiOlwiXFx1ZmUxMVwiLFwiXFx1MzAwMlwiOlwiXFx1ZmUxMlwiLFwiXFx1MzAwOFwiOlwiXFx1ZmUzZlwiLFwiXFx1MzAwOVwiOlwiXFx1ZmU0MFwiLFwiXFx1MzAwYVwiOlwiXFx1ZmUzZFwiLFwiXFx1MzAwYlwiOlwiXFx1ZmUzZVwiLFwiXFx1MzAwY1wiOlwiXFx1ZmU0MVwiLFwiXFx1MzAwZFwiOlwiXFx1ZmU0MlwiLFwiXFx1MzAwZVwiOlwiXFx1ZmU0M1wiLFwiXFx1MzAwZlwiOlwiXFx1ZmU0NFwiLFwiXFx1MzAxMFwiOlwiXFx1ZmUzYlwiLFwiXFx1MzAxMVwiOlwiXFx1ZmUzY1wiLFwiXFx1MzAxNFwiOlwiXFx1ZmUzOVwiLFwiXFx1MzAxNVwiOlwiXFx1ZmUzYVwiLFwiXFx1MzAxNlwiOlwiXFx1ZmUxN1wiLFwiXFx1MzAxN1wiOlwiXFx1ZmUxOFwiLFwiXFx1ZmYwMVwiOlwiXFx1ZmUxNVwiLFwiXFx1ZmYwOFwiOlwiXFx1ZmUzNVwiLFwiXFx1ZmYwOVwiOlwiXFx1ZmUzNlwiLFwiXFx1ZmYwY1wiOlwiXFx1ZmUxMFwiLFwiXFx1ZmYwZFwiOlwiXFx1ZmUzMlwiLFwiXFx1ZmYwZVwiOlwiXFx1MzBmYlwiLFwiXFx1ZmYxYVwiOlwiXFx1ZmUxM1wiLFwiXFx1ZmYxYlwiOlwiXFx1ZmUxNFwiLFwiXFx1ZmYxY1wiOlwiXFx1ZmUzZlwiLFwiXFx1ZmYxZVwiOlwiXFx1ZmU0MFwiLFwiXFx1ZmYxZlwiOlwiXFx1ZmUxNlwiLFwiXFx1ZmYzYlwiOlwiXFx1ZmU0N1wiLFwiXFx1ZmYzZFwiOlwiXFx1ZmU0OFwiLFwiXFx1ZmYzZlwiOlwiXFx1ZmUzM1wiLFwiXFx1ZmY1YlwiOlwiXFx1ZmUzN1wiLFwiXFx1ZmY1Y1wiOlwiXFx1MjAxNVwiLFwiXFx1ZmY1ZFwiOlwiXFx1ZmUzOFwiLFwiXFx1ZmY1ZlwiOlwiXFx1ZmUzNVwiLFwiXFx1ZmY2MFwiOlwiXFx1ZmUzNlwiLFwiXFx1ZmY2MVwiOlwiXFx1ZmUxMlwiLFwiXFx1ZmY2MlwiOlwiXFx1ZmU0MVwiLFwiXFx1ZmY2M1wiOlwiXFx1ZmU0MlwifSxSYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscixuLGkpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5hbmdsZT1uLHZvaWQgMCE9PWkmJih0aGlzLnNlZ21lbnQ9aSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlKHRoaXMueCx0aGlzLnksdGhpcy5hbmdsZSx0aGlzLnNlZ21lbnQpfSxlfShsKTtmdW5jdGlvbiBGYSh0LGUpe3ZhciByPWUuZXhwcmVzc2lvbjtpZihcImNvbnN0YW50XCI9PT1yLmtpbmQpcmV0dXJue2Z1bmN0aW9uVHlwZTpcImNvbnN0YW50XCIsbGF5b3V0U2l6ZTpyLmV2YWx1YXRlKG5ldyBMcih0KzEpKX07aWYoXCJzb3VyY2VcIj09PXIua2luZClyZXR1cm57ZnVuY3Rpb25UeXBlOlwic291cmNlXCJ9O2Zvcih2YXIgbj1yLnpvb21TdG9wcyxpPTA7aTxuLmxlbmd0aCYmbltpXTw9dDspaSsrO2Zvcih2YXIgYT1pPU1hdGgubWF4KDAsaS0xKTthPG4ubGVuZ3RoJiZuW2FdPHQrMTspYSsrO2E9TWF0aC5taW4obi5sZW5ndGgtMSxhKTt2YXIgbz17bWluOm5baV0sbWF4Om5bYV19O3JldHVyblwiY29tcG9zaXRlXCI9PT1yLmtpbmQ/e2Z1bmN0aW9uVHlwZTpcImNvbXBvc2l0ZVwiLHpvb21SYW5nZTpvLHByb3BlcnR5VmFsdWU6ZS52YWx1ZX06e2Z1bmN0aW9uVHlwZTpcImNhbWVyYVwiLGxheW91dFNpemU6ci5ldmFsdWF0ZShuZXcgTHIodCsxKSksem9vbVJhbmdlOm8sc2l6ZVJhbmdlOnttaW46ci5ldmFsdWF0ZShuZXcgTHIoby5taW4pKSxtYXg6ci5ldmFsdWF0ZShuZXcgTHIoby5tYXgpKX0scHJvcGVydHlWYWx1ZTplLnZhbHVlfX1wcihcIkFuY2hvclwiLFJhKTt2YXIgQmE9Z2EuVmVjdG9yVGlsZUZlYXR1cmUudHlwZXMsTmE9W3tuYW1lOlwiYV9mYWRlX29wYWNpdHlcIixjb21wb25lbnRzOjEsdHlwZTpcIlVpbnQ4XCIsb2Zmc2V0OjB9XTtmdW5jdGlvbiBqYSh0LGUscixuLGksYSxvLHMpe3QuZW1wbGFjZUJhY2soZSxyLE1hdGgucm91bmQoMzIqbiksTWF0aC5yb3VuZCgzMippKSxhLG8scz9zWzBdOjAscz9zWzFdOjApfWZ1bmN0aW9uIFZhKHQsZSxyKXt0LmVtcGxhY2VCYWNrKGUueCxlLnksciksdC5lbXBsYWNlQmFjayhlLngsZS55LHIpLHQuZW1wbGFjZUJhY2soZS54LGUueSxyKSx0LmVtcGxhY2VCYWNrKGUueCxlLnkscil9dmFyIFVhPWZ1bmN0aW9uKHQpe3RoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IHRuLHRoaXMuaW5kZXhBcnJheT1uZXcgaG4sdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9dCx0aGlzLnNlZ21lbnRzPW5ldyBNbix0aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheT1uZXcgZW4sdGhpcy5vcGFjaXR5VmVydGV4QXJyYXk9bmV3IHJuLHRoaXMucGxhY2VkU3ltYm9sQXJyYXk9bmV3IHlufTtVYS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQsZSl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxDYS5tZW1iZXJzKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5LGUpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZCh0KSx0aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5keW5hbWljTGF5b3V0VmVydGV4QXJyYXksTGEubWVtYmVycywhMCksdGhpcy5vcGFjaXR5VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMub3BhY2l0eVZlcnRleEFycmF5LE5hLCEwKSx0aGlzLm9wYWNpdHlWZXJ0ZXhCdWZmZXIuaXRlbVNpemU9MX0sVWEucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlciYmKHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCksdGhpcy5zZWdtZW50cy5kZXN0cm95KCksdGhpcy5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLm9wYWNpdHlWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpKX0scHIoXCJTeW1ib2xCdWZmZXJzXCIsVWEpO3ZhciBxYT1mdW5jdGlvbih0LGUscil7dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheT1uZXcgdCx0aGlzLmxheW91dEF0dHJpYnV0ZXM9ZSx0aGlzLmluZGV4QXJyYXk9bmV3IHIsdGhpcy5zZWdtZW50cz1uZXcgTW4sdGhpcy5jb2xsaXNpb25WZXJ0ZXhBcnJheT1uZXcgb259O3FhLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmxheW91dEF0dHJpYnV0ZXMpLHRoaXMuaW5kZXhCdWZmZXI9dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpLHRoaXMuY29sbGlzaW9uVmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuY29sbGlzaW9uVmVydGV4QXJyYXksemEubWVtYmVycywhMCl9LHFhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5zZWdtZW50cy5kZXN0cm95KCksdGhpcy5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIuZGVzdHJveSgpKX0scHIoXCJDb2xsaXNpb25CdWZmZXJzXCIscWEpO3ZhciBIYT1mdW5jdGlvbih0KXt0aGlzLmNvbGxpc2lvbkJveEFycmF5PXQuY29sbGlzaW9uQm94QXJyYXksdGhpcy56b29tPXQuem9vbSx0aGlzLm92ZXJzY2FsaW5nPXQub3ZlcnNjYWxpbmcsdGhpcy5sYXllcnM9dC5sYXllcnMsdGhpcy5sYXllcklkcz10aGlzLmxheWVycy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5waXhlbFJhdGlvPXQucGl4ZWxSYXRpbyx0aGlzLnNvdXJjZUxheWVySW5kZXg9dC5zb3VyY2VMYXllckluZGV4O3ZhciBlPXRoaXMubGF5ZXJzWzBdLl91bmV2YWx1YXRlZExheW91dC5fdmFsdWVzO3RoaXMudGV4dFNpemVEYXRhPUZhKHRoaXMuem9vbSxlW1widGV4dC1zaXplXCJdKSx0aGlzLmljb25TaXplRGF0YT1GYSh0aGlzLnpvb20sZVtcImljb24tc2l6ZVwiXSk7dmFyIHI9dGhpcy5sYXllcnNbMF0ubGF5b3V0O3RoaXMuc29ydEZlYXR1cmVzQnlZPXIuZ2V0KFwidGV4dC1hbGxvdy1vdmVybGFwXCIpfHxyLmdldChcImljb24tYWxsb3ctb3ZlcmxhcFwiKXx8ci5nZXQoXCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnRcIil8fHIuZ2V0KFwiaWNvbi1pZ25vcmUtcGxhY2VtZW50XCIpfTtIYS5wcm90b3R5cGUuY3JlYXRlQXJyYXlzPWZ1bmN0aW9uKCl7dGhpcy50ZXh0PW5ldyBVYShuZXcgSW4oQ2EubWVtYmVycyx0aGlzLmxheWVycyx0aGlzLnpvb20sZnVuY3Rpb24odCl7cmV0dXJuL150ZXh0Ly50ZXN0KHQpfSkpLHRoaXMuaWNvbj1uZXcgVWEobmV3IEluKENhLm1lbWJlcnMsdGhpcy5sYXllcnMsdGhpcy56b29tLGZ1bmN0aW9uKHQpe3JldHVybi9eaWNvbi8udGVzdCh0KX0pKSx0aGlzLmNvbGxpc2lvbkJveD1uZXcgcWEoYW4sT2EubWVtYmVycyxmbiksdGhpcy5jb2xsaXNpb25DaXJjbGU9bmV3IHFhKGFuLElhLm1lbWJlcnMsaG4pLHRoaXMuZ2x5cGhPZmZzZXRBcnJheT1uZXcgYm4sdGhpcy5saW5lVmVydGV4QXJyYXk9bmV3IHdufSxIYS5wcm90b3R5cGUucG9wdWxhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxheWVyc1swXSxuPXIubGF5b3V0LGk9bi5nZXQoXCJ0ZXh0LWZvbnRcIiksYT1uLmdldChcInRleHQtZmllbGRcIiksbz1uLmdldChcImljb24taW1hZ2VcIikscz0oXCJjb25zdGFudFwiIT09YS52YWx1ZS5raW5kfHxhLnZhbHVlLnZhbHVlLmxlbmd0aD4wKSYmKFwiY29uc3RhbnRcIiE9PWkudmFsdWUua2luZHx8aS52YWx1ZS52YWx1ZS5sZW5ndGg+MCksbD1cImNvbnN0YW50XCIhPT1vLnZhbHVlLmtpbmR8fG8udmFsdWUudmFsdWUmJm8udmFsdWUudmFsdWUubGVuZ3RoPjA7aWYodGhpcy5mZWF0dXJlcz1bXSxzfHxsKXtmb3IodmFyIGM9ZS5pY29uRGVwZW5kZW5jaWVzLHU9ZS5nbHlwaERlcGVuZGVuY2llcyxoPW5ldyBMcih0aGlzLnpvb20pLGY9MCxwPXQ7ZjxwLmxlbmd0aDtmKz0xKXt2YXIgZD1wW2ZdLGc9ZC5mZWF0dXJlLHY9ZC5pbmRleCxtPWQuc291cmNlTGF5ZXJJbmRleDtpZihyLl9mZWF0dXJlRmlsdGVyKGgsZykpe3ZhciB5PXZvaWQgMDtzJiYoeT1EYSh5PXIuZ2V0VmFsdWVBbmRSZXNvbHZlVG9rZW5zKFwidGV4dC1maWVsZFwiLGcpLHIsZykpO3ZhciB4PXZvaWQgMDtpZihsJiYoeD1yLmdldFZhbHVlQW5kUmVzb2x2ZVRva2VucyhcImljb24taW1hZ2VcIixnKSkseXx8eCl7dmFyIGI9e3RleHQ6eSxpY29uOngsaW5kZXg6dixzb3VyY2VMYXllckluZGV4Om0sZ2VvbWV0cnk6Rm4oZykscHJvcGVydGllczpnLnByb3BlcnRpZXMsdHlwZTpCYVtnLnR5cGVdfTtpZih2b2lkIDAhPT1nLmlkJiYoYi5pZD1nLmlkKSx0aGlzLmZlYXR1cmVzLnB1c2goYikseCYmKGNbeF09ITApLHkpZm9yKHZhciBfPWkuZXZhbHVhdGUoZykuam9pbihcIixcIiksdz11W19dPXVbX118fHt9LGs9XCJtYXBcIj09PW4uZ2V0KFwidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnRcIikmJlwibGluZVwiPT09bi5nZXQoXCJzeW1ib2wtcGxhY2VtZW50XCIpLEE9eHIoeSksVD0wO1Q8eS5sZW5ndGg7VCsrKWlmKHdbeS5jaGFyQ29kZUF0KFQpXT0hMCxrJiZBKXt2YXIgTT1QYVt5LmNoYXJBdChUKV07TSYmKHdbTS5jaGFyQ29kZUF0KDApXT0hMCl9fX19XCJsaW5lXCI9PT1uLmdldChcInN5bWJvbC1wbGFjZW1lbnRcIikmJih0aGlzLmZlYXR1cmVzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LHI9e30sbj1bXSxpPTA7ZnVuY3Rpb24gYShlKXtuLnB1c2godFtlXSksaSsrfWZ1bmN0aW9uIG8odCxlLGkpe3ZhciBhPXJbdF07cmV0dXJuIGRlbGV0ZSByW3RdLHJbZV09YSxuW2FdLmdlb21ldHJ5WzBdLnBvcCgpLG5bYV0uZ2VvbWV0cnlbMF09blthXS5nZW9tZXRyeVswXS5jb25jYXQoaVswXSksYX1mdW5jdGlvbiBzKHQscixpKXt2YXIgYT1lW3JdO3JldHVybiBkZWxldGUgZVtyXSxlW3RdPWEsblthXS5nZW9tZXRyeVswXS5zaGlmdCgpLG5bYV0uZ2VvbWV0cnlbMF09aVswXS5jb25jYXQoblthXS5nZW9tZXRyeVswXSksYX1mdW5jdGlvbiBsKHQsZSxyKXt2YXIgbj1yP2VbMF1bZVswXS5sZW5ndGgtMV06ZVswXVswXTtyZXR1cm4gdCtcIjpcIituLngrXCI6XCIrbi55fWZvcih2YXIgYz0wO2M8dC5sZW5ndGg7YysrKXt2YXIgdT10W2NdLGg9dS5nZW9tZXRyeSxmPXUudGV4dDtpZihmKXt2YXIgcD1sKGYsaCksZD1sKGYsaCwhMCk7aWYocCBpbiByJiZkIGluIGUmJnJbcF0hPT1lW2RdKXt2YXIgZz1zKHAsZCxoKSx2PW8ocCxkLG5bZ10uZ2VvbWV0cnkpO2RlbGV0ZSBlW3BdLGRlbGV0ZSByW2RdLHJbbChmLG5bdl0uZ2VvbWV0cnksITApXT12LG5bZ10uZ2VvbWV0cnk9bnVsbH1lbHNlIHAgaW4gcj9vKHAsZCxoKTpkIGluIGU/cyhwLGQsaCk6KGEoYyksZVtwXT1pLTEscltkXT1pLTEpfWVsc2UgYShjKX1yZXR1cm4gbi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2VvbWV0cnl9KX0odGhpcy5mZWF0dXJlcykpfX0sSGEucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aH0sSGEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnRleHQudXBsb2FkKHQsdGhpcy5zb3J0RmVhdHVyZXNCeVkpLHRoaXMuaWNvbi51cGxvYWQodCx0aGlzLnNvcnRGZWF0dXJlc0J5WSksdGhpcy5jb2xsaXNpb25Cb3gudXBsb2FkKHQpLHRoaXMuY29sbGlzaW9uQ2lyY2xlLnVwbG9hZCh0KX0sSGEucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnRleHQuZGVzdHJveSgpLHRoaXMuaWNvbi5kZXN0cm95KCksdGhpcy5jb2xsaXNpb25Cb3guZGVzdHJveSgpLHRoaXMuY29sbGlzaW9uQ2lyY2xlLmRlc3Ryb3koKX0sSGEucHJvdG90eXBlLmFkZFRvTGluZVZlcnRleEFycmF5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5saW5lVmVydGV4QXJyYXkubGVuZ3RoO2lmKHZvaWQgMCE9PXQuc2VnbWVudCl7Zm9yKHZhciBuPXQuZGlzdChlW3Quc2VnbWVudCsxXSksaT10LmRpc3QoZVt0LnNlZ21lbnRdKSxhPXt9LG89dC5zZWdtZW50KzE7bzxlLmxlbmd0aDtvKyspYVtvXT17eDplW29dLngseTplW29dLnksdGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3I6bn0sbzxlLmxlbmd0aC0xJiYobis9ZVtvKzFdLmRpc3QoZVtvXSkpO2Zvcih2YXIgcz10LnNlZ21lbnR8fDA7cz49MDtzLS0pYVtzXT17eDplW3NdLngseTplW3NdLnksdGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3I6aX0scz4wJiYoaSs9ZVtzLTFdLmRpc3QoZVtzXSkpO2Zvcih2YXIgbD0wO2w8ZS5sZW5ndGg7bCsrKXt2YXIgYz1hW2xdO3RoaXMubGluZVZlcnRleEFycmF5LmVtcGxhY2VCYWNrKGMueCxjLnksYy50aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcil9fXJldHVybntsaW5lU3RhcnRJbmRleDpyLGxpbmVMZW5ndGg6dGhpcy5saW5lVmVydGV4QXJyYXkubGVuZ3RoLXJ9fSxIYS5wcm90b3R5cGUuYWRkU3ltYm9scz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjKXtmb3IodmFyIHU9dC5pbmRleEFycmF5LGg9dC5sYXlvdXRWZXJ0ZXhBcnJheSxmPXQuZHluYW1pY0xheW91dFZlcnRleEFycmF5LHA9dC5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0KmUubGVuZ3RoLHQubGF5b3V0VmVydGV4QXJyYXksdC5pbmRleEFycmF5KSxkPXRoaXMuZ2x5cGhPZmZzZXRBcnJheS5sZW5ndGgsZz1wLnZlcnRleExlbmd0aCx2PTAsbT1lO3Y8bS5sZW5ndGg7dis9MSl7dmFyIHk9bVt2XSx4PXkudGwsYj15LnRyLF89eS5ibCx3PXkuYnIsaz15LnRleCxBPXAudmVydGV4TGVuZ3RoLFQ9eS5nbHlwaE9mZnNldFsxXTtqYShoLHMueCxzLnkseC54LFQreC55LGsueCxrLnksciksamEoaCxzLngscy55LGIueCxUK2IueSxrLngray53LGsueSxyKSxqYShoLHMueCxzLnksXy54LFQrXy55LGsueCxrLnkray5oLHIpLGphKGgscy54LHMueSx3LngsVCt3Lnksay54K2sudyxrLnkray5oLHIpLFZhKGYscywwKSx1LmVtcGxhY2VCYWNrKEEsQSsxLEErMiksdS5lbXBsYWNlQmFjayhBKzEsQSsyLEErMykscC52ZXJ0ZXhMZW5ndGgrPTQscC5wcmltaXRpdmVMZW5ndGgrPTIsdGhpcy5nbHlwaE9mZnNldEFycmF5LmVtcGxhY2VCYWNrKHkuZ2x5cGhPZmZzZXRbMF0pfXQucGxhY2VkU3ltYm9sQXJyYXkuZW1wbGFjZUJhY2socy54LHMueSxkLHRoaXMuZ2x5cGhPZmZzZXRBcnJheS5sZW5ndGgtZCxnLGwsYyxzLnNlZ21lbnQscj9yWzBdOjAscj9yWzFdOjAsblswXSxuWzFdLG8sITEpLHQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXModC5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsYSl9LEhhLnByb3RvdHlwZS5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXg9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gZS5lbXBsYWNlQmFjaygwLDApLHQuZW1wbGFjZUJhY2soci54LHIueSxuLngsbi55LE1hdGgucm91bmQoaS54KSxNYXRoLnJvdW5kKGkueSkpfSxIYS5wcm90b3R5cGUuYWRkQ29sbGlzaW9uRGVidWdWZXJ0aWNlcz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3ZhciBjPWkuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCxpLmxheW91dFZlcnRleEFycmF5LGkuaW5kZXhBcnJheSksdT1jLnZlcnRleExlbmd0aCxoPWkubGF5b3V0VmVydGV4QXJyYXksZj1pLmNvbGxpc2lvblZlcnRleEFycmF5O2lmKHRoaXMuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4KGgsZixhLG8uYW5jaG9yLG5ldyBsKHQsZSkpLHRoaXMuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4KGgsZixhLG8uYW5jaG9yLG5ldyBsKHIsZSkpLHRoaXMuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4KGgsZixhLG8uYW5jaG9yLG5ldyBsKHIsbikpLHRoaXMuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4KGgsZixhLG8uYW5jaG9yLG5ldyBsKHQsbikpLGMudmVydGV4TGVuZ3RoKz00LHMpe3ZhciBwPWkuaW5kZXhBcnJheTtwLmVtcGxhY2VCYWNrKHUsdSsxLHUrMikscC5lbXBsYWNlQmFjayh1LHUrMix1KzMpLGMucHJpbWl0aXZlTGVuZ3RoKz0yfWVsc2V7dmFyIGQ9aS5pbmRleEFycmF5O2QuZW1wbGFjZUJhY2sodSx1KzEpLGQuZW1wbGFjZUJhY2sodSsxLHUrMiksZC5lbXBsYWNlQmFjayh1KzIsdSszKSxkLmVtcGxhY2VCYWNrKHUrMyx1KSxjLnByaW1pdGl2ZUxlbmd0aCs9NH19LEhhLnByb3RvdHlwZS5nZW5lcmF0ZUNvbGxpc2lvbkRlYnVnQnVmZmVycz1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9dGhpcy5zeW1ib2xJbnN0YW5jZXM7dDxlLmxlbmd0aDt0Kz0xKXt2YXIgcj1lW3RdO3IudGV4dENvbGxpc2lvbkZlYXR1cmU9e2JveFN0YXJ0SW5kZXg6ci50ZXh0Qm94U3RhcnRJbmRleCxib3hFbmRJbmRleDpyLnRleHRCb3hFbmRJbmRleH0sci5pY29uQ29sbGlzaW9uRmVhdHVyZT17Ym94U3RhcnRJbmRleDpyLmljb25Cb3hTdGFydEluZGV4LGJveEVuZEluZGV4OnIuaWNvbkJveEVuZEluZGV4fTtmb3IodmFyIG49MDtuPDI7bisrKXt2YXIgaT1yWzA9PT1uP1widGV4dENvbGxpc2lvbkZlYXR1cmVcIjpcImljb25Db2xsaXNpb25GZWF0dXJlXCJdO2lmKGkpZm9yKHZhciBhPWkuYm94U3RhcnRJbmRleDthPGkuYm94RW5kSW5kZXg7YSsrKXt2YXIgbz10aGlzLmNvbGxpc2lvbkJveEFycmF5LmdldChhKSxzPW8ueDEsbD1vLnkxLGM9by54Mix1PW8ueTIsaD1vLnJhZGl1cz4wO3RoaXMuYWRkQ29sbGlzaW9uRGVidWdWZXJ0aWNlcyhzLGwsYyx1LGg/dGhpcy5jb2xsaXNpb25DaXJjbGU6dGhpcy5jb2xsaXNpb25Cb3gsby5hbmNob3JQb2ludCxyLGgpfX19fSxIYS5wcm90b3R5cGUuZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlcz1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYT17fSxvPWU7bzxyO28rKyl7dmFyIHM9dC5nZXQobyk7aWYoMD09PXMucmFkaXVzKXthLnRleHRCb3g9e3gxOnMueDEseTE6cy55MSx4MjpzLngyLHkyOnMueTIsYW5jaG9yUG9pbnRYOnMuYW5jaG9yUG9pbnRYLGFuY2hvclBvaW50WTpzLmFuY2hvclBvaW50WX0sYS50ZXh0RmVhdHVyZUluZGV4PXMuZmVhdHVyZUluZGV4O2JyZWFrfWEudGV4dENpcmNsZXN8fChhLnRleHRDaXJjbGVzPVtdLGEudGV4dEZlYXR1cmVJbmRleD1zLmZlYXR1cmVJbmRleCksYS50ZXh0Q2lyY2xlcy5wdXNoKHMuYW5jaG9yUG9pbnRYLHMuYW5jaG9yUG9pbnRZLHMucmFkaXVzLHMuc2lnbmVkRGlzdGFuY2VGcm9tQW5jaG9yLDEpfWZvcih2YXIgbD1uO2w8aTtsKyspe3ZhciBjPXQuZ2V0KGwpO2lmKDA9PT1jLnJhZGl1cyl7YS5pY29uQm94PXt4MTpjLngxLHkxOmMueTEseDI6Yy54Mix5MjpjLnkyLGFuY2hvclBvaW50WDpjLmFuY2hvclBvaW50WCxhbmNob3JQb2ludFk6Yy5hbmNob3JQb2ludFl9LGEuaWNvbkZlYXR1cmVJbmRleD1jLmZlYXR1cmVJbmRleDticmVha319cmV0dXJuIGF9LEhhLnByb3RvdHlwZS5oYXNUZXh0RGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQuc2VnbWVudHMuZ2V0KCkubGVuZ3RoPjB9LEhhLnByb3RvdHlwZS5oYXNJY29uRGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmljb24uc2VnbWVudHMuZ2V0KCkubGVuZ3RoPjB9LEhhLnByb3RvdHlwZS5oYXNDb2xsaXNpb25Cb3hEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29sbGlzaW9uQm94LnNlZ21lbnRzLmdldCgpLmxlbmd0aD4wfSxIYS5wcm90b3R5cGUuaGFzQ29sbGlzaW9uQ2lyY2xlRGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbGxpc2lvbkNpcmNsZS5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MH0sSGEucHJvdG90eXBlLnNvcnRGZWF0dXJlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHRoaXMuc29ydEZlYXR1cmVzQnlZJiZ0aGlzLnNvcnRlZEFuZ2xlIT09dCYmKHRoaXMuc29ydGVkQW5nbGU9dCwhKHRoaXMudGV4dC5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MXx8dGhpcy5pY29uLnNlZ21lbnRzLmdldCgpLmxlbmd0aD4xKSkpe2Zvcih2YXIgcj1bXSxuPTA7bjx0aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7bisrKXIucHVzaChuKTt2YXIgaT1NYXRoLnNpbih0KSxhPU1hdGguY29zKHQpO3Iuc29ydChmdW5jdGlvbih0LHIpe3ZhciBuPWUuc3ltYm9sSW5zdGFuY2VzW3RdLG89ZS5zeW1ib2xJbnN0YW5jZXNbcl07cmV0dXJuKGkqbi5hbmNob3IueCthKm4uYW5jaG9yLnl8MCktKGkqby5hbmNob3IueCthKm8uYW5jaG9yLnl8MCl8fG8uZmVhdHVyZUluZGV4LW4uZmVhdHVyZUluZGV4fSksdGhpcy50ZXh0LmluZGV4QXJyYXkuY2xlYXIoKSx0aGlzLmljb24uaW5kZXhBcnJheS5jbGVhcigpLHRoaXMuZmVhdHVyZVNvcnRPcmRlcj1bXTtmb3IodmFyIG89MCxzPXI7bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dLGM9ZS5zeW1ib2xJbnN0YW5jZXNbbF07ZS5mZWF0dXJlU29ydE9yZGVyLnB1c2goYy5mZWF0dXJlSW5kZXgpO2Zvcih2YXIgdT0wLGg9Yy5wbGFjZWRUZXh0U3ltYm9sSW5kaWNlczt1PGgubGVuZ3RoO3UrPTEpZm9yKHZhciBmPWhbdV0scD1lLnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KGYpLGQ9cC52ZXJ0ZXhTdGFydEluZGV4KzQqcC5udW1HbHlwaHMsZz1wLnZlcnRleFN0YXJ0SW5kZXg7ZzxkO2crPTQpZS50ZXh0LmluZGV4QXJyYXkuZW1wbGFjZUJhY2soZyxnKzEsZysyKSxlLnRleHQuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhnKzEsZysyLGcrMyk7dmFyIHY9ZS5pY29uLnBsYWNlZFN5bWJvbEFycmF5LmdldChsKTtpZih2Lm51bUdseXBocyl7dmFyIG09di52ZXJ0ZXhTdGFydEluZGV4O2UuaWNvbi5pbmRleEFycmF5LmVtcGxhY2VCYWNrKG0sbSsxLG0rMiksZS5pY29uLmluZGV4QXJyYXkuZW1wbGFjZUJhY2sobSsxLG0rMixtKzMpfX10aGlzLnRleHQuaW5kZXhCdWZmZXImJnRoaXMudGV4dC5pbmRleEJ1ZmZlci51cGRhdGVEYXRhKHRoaXMudGV4dC5pbmRleEFycmF5KSx0aGlzLmljb24uaW5kZXhCdWZmZXImJnRoaXMuaWNvbi5pbmRleEJ1ZmZlci51cGRhdGVEYXRhKHRoaXMuaWNvbi5pbmRleEFycmF5KX19LHByKFwiU3ltYm9sQnVja2V0XCIsSGEse29taXQ6W1wibGF5ZXJzXCIsXCJjb2xsaXNpb25Cb3hBcnJheVwiLFwiZmVhdHVyZXNcIixcImNvbXBhcmVUZXh0XCJdLHNoYWxsb3c6W1wic3ltYm9sSW5zdGFuY2VzXCJdfSksSGEuTUFYX0dMWVBIUz02NTUzNSxIYS5hZGREeW5hbWljQXR0cmlidXRlcz1WYTt2YXIgR2E9bmV3IHFyKHtcInN5bWJvbC1wbGFjZW1lbnRcIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sW1wic3ltYm9sLXBsYWNlbWVudFwiXSksXCJzeW1ib2wtc3BhY2luZ1wiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJzeW1ib2wtc3BhY2luZ1wiXSksXCJzeW1ib2wtYXZvaWQtZWRnZXNcIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sW1wic3ltYm9sLWF2b2lkLWVkZ2VzXCJdKSxcImljb24tYWxsb3ctb3ZlcmxhcFwiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJpY29uLWFsbG93LW92ZXJsYXBcIl0pLFwiaWNvbi1pZ25vcmUtcGxhY2VtZW50XCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFtcImljb24taWdub3JlLXBsYWNlbWVudFwiXSksXCJpY29uLW9wdGlvbmFsXCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFtcImljb24tb3B0aW9uYWxcIl0pLFwiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnRcIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sW1wiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnRcIl0pLFwiaWNvbi1zaXplXCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFtcImljb24tc2l6ZVwiXSksXCJpY29uLXRleHQtZml0XCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFtcImljb24tdGV4dC1maXRcIl0pLFwiaWNvbi10ZXh0LWZpdC1wYWRkaW5nXCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFtcImljb24tdGV4dC1maXQtcGFkZGluZ1wiXSksXCJpY29uLWltYWdlXCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFtcImljb24taW1hZ2VcIl0pLFwiaWNvbi1yb3RhdGVcIjpuZXcganIoSS5sYXlvdXRfc3ltYm9sW1wiaWNvbi1yb3RhdGVcIl0pLFwiaWNvbi1wYWRkaW5nXCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFtcImljb24tcGFkZGluZ1wiXSksXCJpY29uLWtlZXAtdXByaWdodFwiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJpY29uLWtlZXAtdXByaWdodFwiXSksXCJpY29uLW9mZnNldFwiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbXCJpY29uLW9mZnNldFwiXSksXCJpY29uLWFuY2hvclwiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbXCJpY29uLWFuY2hvclwiXSksXCJpY29uLXBpdGNoLWFsaWdubWVudFwiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJpY29uLXBpdGNoLWFsaWdubWVudFwiXSksXCJ0ZXh0LXBpdGNoLWFsaWdubWVudFwiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LXBpdGNoLWFsaWdubWVudFwiXSksXCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudFwiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudFwiXSksXCJ0ZXh0LWZpZWxkXCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFtcInRleHQtZmllbGRcIl0pLFwidGV4dC1mb250XCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFtcInRleHQtZm9udFwiXSksXCJ0ZXh0LXNpemVcIjpuZXcganIoSS5sYXlvdXRfc3ltYm9sW1widGV4dC1zaXplXCJdKSxcInRleHQtbWF4LXdpZHRoXCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFtcInRleHQtbWF4LXdpZHRoXCJdKSxcInRleHQtbGluZS1oZWlnaHRcIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sW1widGV4dC1saW5lLWhlaWdodFwiXSksXCJ0ZXh0LWxldHRlci1zcGFjaW5nXCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFtcInRleHQtbGV0dGVyLXNwYWNpbmdcIl0pLFwidGV4dC1qdXN0aWZ5XCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFtcInRleHQtanVzdGlmeVwiXSksXCJ0ZXh0LWFuY2hvclwiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LWFuY2hvclwiXSksXCJ0ZXh0LW1heC1hbmdsZVwiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LW1heC1hbmdsZVwiXSksXCJ0ZXh0LXJvdGF0ZVwiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LXJvdGF0ZVwiXSksXCJ0ZXh0LXBhZGRpbmdcIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sW1widGV4dC1wYWRkaW5nXCJdKSxcInRleHQta2VlcC11cHJpZ2h0XCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFtcInRleHQta2VlcC11cHJpZ2h0XCJdKSxcInRleHQtdHJhbnNmb3JtXCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFtcInRleHQtdHJhbnNmb3JtXCJdKSxcInRleHQtb2Zmc2V0XCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFtcInRleHQtb2Zmc2V0XCJdKSxcInRleHQtYWxsb3ctb3ZlcmxhcFwiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LWFsbG93LW92ZXJsYXBcIl0pLFwidGV4dC1pZ25vcmUtcGxhY2VtZW50XCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFtcInRleHQtaWdub3JlLXBsYWNlbWVudFwiXSksXCJ0ZXh0LW9wdGlvbmFsXCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFtcInRleHQtb3B0aW9uYWxcIl0pfSksWWE9e3BhaW50Om5ldyBxcih7XCJpY29uLW9wYWNpdHlcIjpuZXcganIoSS5wYWludF9zeW1ib2xbXCJpY29uLW9wYWNpdHlcIl0pLFwiaWNvbi1jb2xvclwiOm5ldyBqcihJLnBhaW50X3N5bWJvbFtcImljb24tY29sb3JcIl0pLFwiaWNvbi1oYWxvLWNvbG9yXCI6bmV3IGpyKEkucGFpbnRfc3ltYm9sW1wiaWNvbi1oYWxvLWNvbG9yXCJdKSxcImljb24taGFsby13aWR0aFwiOm5ldyBqcihJLnBhaW50X3N5bWJvbFtcImljb24taGFsby13aWR0aFwiXSksXCJpY29uLWhhbG8tYmx1clwiOm5ldyBqcihJLnBhaW50X3N5bWJvbFtcImljb24taGFsby1ibHVyXCJdKSxcImljb24tdHJhbnNsYXRlXCI6bmV3IE5yKEkucGFpbnRfc3ltYm9sW1wiaWNvbi10cmFuc2xhdGVcIl0pLFwiaWNvbi10cmFuc2xhdGUtYW5jaG9yXCI6bmV3IE5yKEkucGFpbnRfc3ltYm9sW1wiaWNvbi10cmFuc2xhdGUtYW5jaG9yXCJdKSxcInRleHQtb3BhY2l0eVwiOm5ldyBqcihJLnBhaW50X3N5bWJvbFtcInRleHQtb3BhY2l0eVwiXSksXCJ0ZXh0LWNvbG9yXCI6bmV3IGpyKEkucGFpbnRfc3ltYm9sW1widGV4dC1jb2xvclwiXSksXCJ0ZXh0LWhhbG8tY29sb3JcIjpuZXcganIoSS5wYWludF9zeW1ib2xbXCJ0ZXh0LWhhbG8tY29sb3JcIl0pLFwidGV4dC1oYWxvLXdpZHRoXCI6bmV3IGpyKEkucGFpbnRfc3ltYm9sW1widGV4dC1oYWxvLXdpZHRoXCJdKSxcInRleHQtaGFsby1ibHVyXCI6bmV3IGpyKEkucGFpbnRfc3ltYm9sW1widGV4dC1oYWxvLWJsdXJcIl0pLFwidGV4dC10cmFuc2xhdGVcIjpuZXcgTnIoSS5wYWludF9zeW1ib2xbXCJ0ZXh0LXRyYW5zbGF0ZVwiXSksXCJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3JcIjpuZXcgTnIoSS5wYWludF9zeW1ib2xbXCJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3JcIl0pfSksbGF5b3V0OkdhfSxXYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsWWEpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5yZWNhbGN1bGF0ZT1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5yZWNhbGN1bGF0ZS5jYWxsKHRoaXMsZSksXCJhdXRvXCI9PT10aGlzLmxheW91dC5nZXQoXCJpY29uLXJvdGF0aW9uLWFsaWdubWVudFwiKSYmKFwibGluZVwiPT09dGhpcy5sYXlvdXQuZ2V0KFwic3ltYm9sLXBsYWNlbWVudFwiKT90aGlzLmxheW91dC5fdmFsdWVzW1wiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnRcIl09XCJtYXBcIjp0aGlzLmxheW91dC5fdmFsdWVzW1wiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnRcIl09XCJ2aWV3cG9ydFwiKSxcImF1dG9cIj09PXRoaXMubGF5b3V0LmdldChcInRleHQtcm90YXRpb24tYWxpZ25tZW50XCIpJiYoXCJsaW5lXCI9PT10aGlzLmxheW91dC5nZXQoXCJzeW1ib2wtcGxhY2VtZW50XCIpP3RoaXMubGF5b3V0Ll92YWx1ZXNbXCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudFwiXT1cIm1hcFwiOnRoaXMubGF5b3V0Ll92YWx1ZXNbXCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudFwiXT1cInZpZXdwb3J0XCIpLFwiYXV0b1wiPT09dGhpcy5sYXlvdXQuZ2V0KFwidGV4dC1waXRjaC1hbGlnbm1lbnRcIikmJih0aGlzLmxheW91dC5fdmFsdWVzW1widGV4dC1waXRjaC1hbGlnbm1lbnRcIl09dGhpcy5sYXlvdXQuZ2V0KFwidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnRcIikpLFwiYXV0b1wiPT09dGhpcy5sYXlvdXQuZ2V0KFwiaWNvbi1waXRjaC1hbGlnbm1lbnRcIikmJih0aGlzLmxheW91dC5fdmFsdWVzW1wiaWNvbi1waXRjaC1hbGlnbm1lbnRcIl09dGhpcy5sYXlvdXQuZ2V0KFwiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnRcIikpfSxlLnByb3RvdHlwZS5nZXRWYWx1ZUFuZFJlc29sdmVUb2tlbnM9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMubGF5b3V0LmdldCh0KS5ldmFsdWF0ZShlKSxpPXRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0Ll92YWx1ZXNbdF07cmV0dXJuIGkuaXNEYXRhRHJpdmVuKCl8fF9lKGkudmFsdWUpP246KHI9ZS5wcm9wZXJ0aWVzLG4ucmVwbGFjZSgveyhbXnt9XSspfS9nLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUgaW4gcj9TdHJpbmcocltlXSk6XCJcIn0pKX0sZS5wcm90b3R5cGUuY3JlYXRlQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgSGEodCl9LGUucHJvdG90eXBlLnF1ZXJ5UmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZX0oSHIpLFhhPXtwYWludDpuZXcgcXIoe1wiYmFja2dyb3VuZC1jb2xvclwiOm5ldyBOcihJLnBhaW50X2JhY2tncm91bmRbXCJiYWNrZ3JvdW5kLWNvbG9yXCJdKSxcImJhY2tncm91bmQtcGF0dGVyblwiOm5ldyBWcihJLnBhaW50X2JhY2tncm91bmRbXCJiYWNrZ3JvdW5kLXBhdHRlcm5cIl0pLFwiYmFja2dyb3VuZC1vcGFjaXR5XCI6bmV3IE5yKEkucGFpbnRfYmFja2dyb3VuZFtcImJhY2tncm91bmQtb3BhY2l0eVwiXSl9KX0sWmE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLFhhKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZX0oSHIpLCRhPXtwYWludDpuZXcgcXIoe1wicmFzdGVyLW9wYWNpdHlcIjpuZXcgTnIoSS5wYWludF9yYXN0ZXJbXCJyYXN0ZXItb3BhY2l0eVwiXSksXCJyYXN0ZXItaHVlLXJvdGF0ZVwiOm5ldyBOcihJLnBhaW50X3Jhc3RlcltcInJhc3Rlci1odWUtcm90YXRlXCJdKSxcInJhc3Rlci1icmlnaHRuZXNzLW1pblwiOm5ldyBOcihJLnBhaW50X3Jhc3RlcltcInJhc3Rlci1icmlnaHRuZXNzLW1pblwiXSksXCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXhcIjpuZXcgTnIoSS5wYWludF9yYXN0ZXJbXCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXhcIl0pLFwicmFzdGVyLXNhdHVyYXRpb25cIjpuZXcgTnIoSS5wYWludF9yYXN0ZXJbXCJyYXN0ZXItc2F0dXJhdGlvblwiXSksXCJyYXN0ZXItY29udHJhc3RcIjpuZXcgTnIoSS5wYWludF9yYXN0ZXJbXCJyYXN0ZXItY29udHJhc3RcIl0pLFwicmFzdGVyLWZhZGUtZHVyYXRpb25cIjpuZXcgTnIoSS5wYWludF9yYXN0ZXJbXCJyYXN0ZXItZmFkZS1kdXJhdGlvblwiXSl9KX0sSmE9e2NpcmNsZTpuaSxoZWF0bWFwOnBpLGhpbGxzaGFkZTpnaSxmaWxsOkppLFwiZmlsbC1leHRydXNpb25cIjphYSxsaW5lOlNhLHN5bWJvbDpXYSxiYWNrZ3JvdW5kOlphLHJhc3RlcjpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsJGEpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlfShIcil9LEthPWkoZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxyKXtyPXJ8fHt9LHRoaXMudz10fHw2NCx0aGlzLmg9ZXx8NjQsdGhpcy5hdXRvUmVzaXplPSEhci5hdXRvUmVzaXplLHRoaXMuc2hlbHZlcz1bXSx0aGlzLmZyZWViaW5zPVtdLHRoaXMuc3RhdHM9e30sdGhpcy5iaW5zPXt9LHRoaXMubWF4SWQ9MH1mdW5jdGlvbiBlKHQsZSxyKXt0aGlzLng9MCx0aGlzLnk9dCx0aGlzLnc9dGhpcy5mcmVlPWUsdGhpcy5oPXJ9cmV0dXJuIHQucHJvdG90eXBlLnBhY2s9ZnVuY3Rpb24odCxlKXt0PVtdLmNvbmNhdCh0KSxlPWV8fHt9O2Zvcih2YXIgcixuLGksYSxvPVtdLHM9MDtzPHQubGVuZ3RoO3MrKylpZihyPXRbc10ud3x8dFtzXS53aWR0aCxuPXRbc10uaHx8dFtzXS5oZWlnaHQsaT10W3NdLmlkLHImJm4pe2lmKCEoYT10aGlzLnBhY2tPbmUocixuLGkpKSljb250aW51ZTtlLmluUGxhY2UmJih0W3NdLng9YS54LHRbc10ueT1hLnksdFtzXS5pZD1hLmlkKSxvLnB1c2goYSl9cmV0dXJuIHRoaXMuc2hyaW5rKCksb30sdC5wcm90b3R5cGUucGFja09uZT1mdW5jdGlvbih0LHIsbil7dmFyIGksYSxvLHMsbCxjLHUsaCxmPXtmcmVlYmluOi0xLHNoZWxmOi0xLHdhc3RlOjEvMH0scD0wO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBufHxcIm51bWJlclwiPT10eXBlb2Ygbil7aWYoaT10aGlzLmdldEJpbihuKSlyZXR1cm4gdGhpcy5yZWYoaSksaTtcIm51bWJlclwiPT10eXBlb2YgbiYmKHRoaXMubWF4SWQ9TWF0aC5tYXgobix0aGlzLm1heElkKSl9ZWxzZSBuPSsrdGhpcy5tYXhJZDtmb3Iocz0wO3M8dGhpcy5mcmVlYmlucy5sZW5ndGg7cysrKXtpZihyPT09KGk9dGhpcy5mcmVlYmluc1tzXSkubWF4aCYmdD09PWkubWF4dylyZXR1cm4gdGhpcy5hbGxvY0ZyZWViaW4ocyx0LHIsbik7cj5pLm1heGh8fHQ+aS5tYXh3fHxyPD1pLm1heGgmJnQ8PWkubWF4dyYmKG89aS5tYXh3KmkubWF4aC10KnIpPGYud2FzdGUmJihmLndhc3RlPW8sZi5mcmVlYmluPXMpfWZvcihzPTA7czx0aGlzLnNoZWx2ZXMubGVuZ3RoO3MrKylpZihwKz0oYT10aGlzLnNoZWx2ZXNbc10pLmgsISh0PmEuZnJlZSkpe2lmKHI9PT1hLmgpcmV0dXJuIHRoaXMuYWxsb2NTaGVsZihzLHQscixuKTtyPmEuaHx8cjxhLmgmJihvPShhLmgtcikqdCk8Zi53YXN0ZSYmKGYuZnJlZWJpbj0tMSxmLndhc3RlPW8sZi5zaGVsZj1zKX1yZXR1cm4tMSE9PWYuZnJlZWJpbj90aGlzLmFsbG9jRnJlZWJpbihmLmZyZWViaW4sdCxyLG4pOi0xIT09Zi5zaGVsZj90aGlzLmFsbG9jU2hlbGYoZi5zaGVsZix0LHIsbik6cjw9dGhpcy5oLXAmJnQ8PXRoaXMudz8oYT1uZXcgZShwLHRoaXMudyxyKSx0aGlzLmFsbG9jU2hlbGYodGhpcy5zaGVsdmVzLnB1c2goYSktMSx0LHIsbikpOnRoaXMuYXV0b1Jlc2l6ZT8obD1jPXRoaXMuaCwoKHU9aD10aGlzLncpPD1sfHx0PnUpJiYoaD0yKk1hdGgubWF4KHQsdSkpLChsPHV8fHI+bCkmJihjPTIqTWF0aC5tYXgocixsKSksdGhpcy5yZXNpemUoaCxjKSx0aGlzLnBhY2tPbmUodCxyLG4pKTpudWxsfSx0LnByb3RvdHlwZS5hbGxvY0ZyZWViaW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5mcmVlYmlucy5zcGxpY2UodCwxKVswXTtyZXR1cm4gaS5pZD1uLGkudz1lLGkuaD1yLGkucmVmY291bnQ9MCx0aGlzLmJpbnNbbl09aSx0aGlzLnJlZihpKSxpfSx0LnByb3RvdHlwZS5hbGxvY1NoZWxmPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuc2hlbHZlc1t0XS5hbGxvYyhlLHIsbik7cmV0dXJuIHRoaXMuYmluc1tuXT1pLHRoaXMucmVmKGkpLGl9LHQucHJvdG90eXBlLnNocmluaz1mdW5jdGlvbigpe2lmKHRoaXMuc2hlbHZlcy5sZW5ndGg+MCl7Zm9yKHZhciB0PTAsZT0wLHI9MDtyPHRoaXMuc2hlbHZlcy5sZW5ndGg7cisrKXt2YXIgbj10aGlzLnNoZWx2ZXNbcl07ZSs9bi5oLHQ9TWF0aC5tYXgobi53LW4uZnJlZSx0KX10aGlzLnJlc2l6ZSh0LGUpfX0sdC5wcm90b3R5cGUuZ2V0QmluPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJpbnNbdF19LHQucHJvdG90eXBlLnJlZj1mdW5jdGlvbih0KXtpZigxPT0rK3QucmVmY291bnQpe3ZhciBlPXQuaDt0aGlzLnN0YXRzW2VdPTErKDB8dGhpcy5zdGF0c1tlXSl9cmV0dXJuIHQucmVmY291bnR9LHQucHJvdG90eXBlLnVucmVmPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dC5yZWZjb3VudD8wOigwPT0tLXQucmVmY291bnQmJih0aGlzLnN0YXRzW3QuaF0tLSxkZWxldGUgdGhpcy5iaW5zW3QuaWRdLHRoaXMuZnJlZWJpbnMucHVzaCh0KSksdC5yZWZjb3VudCl9LHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zaGVsdmVzPVtdLHRoaXMuZnJlZWJpbnM9W10sdGhpcy5zdGF0cz17fSx0aGlzLmJpbnM9e30sdGhpcy5tYXhJZD0wfSx0LnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCxlKXt0aGlzLnc9dCx0aGlzLmg9ZTtmb3IodmFyIHI9MDtyPHRoaXMuc2hlbHZlcy5sZW5ndGg7cisrKXRoaXMuc2hlbHZlc1tyXS5yZXNpemUodCk7cmV0dXJuITB9LGUucHJvdG90eXBlLmFsbG9jPWZ1bmN0aW9uKHQsZSxyKXtpZih0PnRoaXMuZnJlZXx8ZT50aGlzLmgpcmV0dXJuIG51bGw7dmFyIG49dGhpcy54O3JldHVybiB0aGlzLngrPXQsdGhpcy5mcmVlLT10LG5ldyBmdW5jdGlvbih0LGUscixuLGksYSxvKXt0aGlzLmlkPXQsdGhpcy54PWUsdGhpcy55PXIsdGhpcy53PW4sdGhpcy5oPWksdGhpcy5tYXh3PWF8fG4sdGhpcy5tYXhoPW98fGksdGhpcy5yZWZjb3VudD0wfShyLG4sdGhpcy55LHQsZSx0LHRoaXMuaCl9LGUucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mcmVlKz10LXRoaXMudyx0aGlzLnc9dCwhMH0sdH0oKX0pLFFhPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5waXhlbFJhdGlvO3RoaXMucGFkZGVkUmVjdD10LHRoaXMucGl4ZWxSYXRpbz1yfSx0bz17dGw6e2NvbmZpZ3VyYWJsZTohMH0sYnI6e2NvbmZpZ3VyYWJsZTohMH0sZGlzcGxheVNpemU6e2NvbmZpZ3VyYWJsZTohMH19O3RvLnRsLmdldD1mdW5jdGlvbigpe3JldHVyblt0aGlzLnBhZGRlZFJlY3QueCsxLHRoaXMucGFkZGVkUmVjdC55KzFdfSx0by5ici5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5wYWRkZWRSZWN0LngrdGhpcy5wYWRkZWRSZWN0LnctMSx0aGlzLnBhZGRlZFJlY3QueSt0aGlzLnBhZGRlZFJlY3QuaC0xXX0sdG8uZGlzcGxheVNpemUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuWyh0aGlzLnBhZGRlZFJlY3Qudy0yKS90aGlzLnBpeGVsUmF0aW8sKHRoaXMucGFkZGVkUmVjdC5oLTIpL3RoaXMucGl4ZWxSYXRpb119LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFFhLnByb3RvdHlwZSx0byk7dmFyIGVvPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB1aSh7d2lkdGg6MCxoZWlnaHQ6MH0pLHI9e30sbj1uZXcgS2EoMCwwLHthdXRvUmVzaXplOiEwfSk7Zm9yKHZhciBpIGluIHQpe3ZhciBhPXRbaV0sbz1uLnBhY2tPbmUoYS5kYXRhLndpZHRoKzIsYS5kYXRhLmhlaWdodCsyKTtlLnJlc2l6ZSh7d2lkdGg6bi53LGhlaWdodDpuLmh9KSx1aS5jb3B5KGEuZGF0YSxlLHt4OjAseTowfSx7eDpvLngrMSx5Om8ueSsxfSxhLmRhdGEpLHJbaV09bmV3IFFhKG8sYSl9bi5zaHJpbmsoKSxlLnJlc2l6ZSh7d2lkdGg6bi53LGhlaWdodDpuLmh9KSx0aGlzLmltYWdlPWUsdGhpcy5wb3NpdGlvbnM9cn07cHIoXCJJbWFnZVBvc2l0aW9uXCIsUWEpLHByKFwiSW1hZ2VBdGxhc1wiLGVvKTt2YXIgcm89ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxvLHM9OCppLW4tMSxsPSgxPDxzKS0xLGM9bD4+MSx1PS03LGg9cj9pLTE6MCxmPXI/LTE6MSxwPXRbZStoXTtmb3IoaCs9ZixhPXAmKDE8PC11KS0xLHA+Pj0tdSx1Kz1zO3U+MDthPTI1NiphK3RbZStoXSxoKz1mLHUtPTgpO2ZvcihvPWEmKDE8PC11KS0xLGE+Pj0tdSx1Kz1uO3U+MDtvPTI1NipvK3RbZStoXSxoKz1mLHUtPTgpO2lmKDA9PT1hKWE9MS1jO2Vsc2V7aWYoYT09PWwpcmV0dXJuIG8/TmFOOjEvMCoocD8tMToxKTtvKz1NYXRoLnBvdygyLG4pLGEtPWN9cmV0dXJuKHA/LTE6MSkqbypNYXRoLnBvdygyLGEtbil9LG5vPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbyxzLGwsYz04KmEtaS0xLHU9KDE8PGMpLTEsaD11Pj4xLGY9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxwPW4/MDphLTEsZD1uPzE6LTEsZz1lPDB8fDA9PT1lJiYxL2U8MD8xOjA7Zm9yKGU9TWF0aC5hYnMoZSksaXNOYU4oZSl8fGU9PT0xLzA/KHM9aXNOYU4oZSk/MTowLG89dSk6KG89TWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMiksZSoobD1NYXRoLnBvdygyLC1vKSk8MSYmKG8tLSxsKj0yKSwoZSs9bytoPj0xP2YvbDpmKk1hdGgucG93KDIsMS1oKSkqbD49MiYmKG8rKyxsLz0yKSxvK2g+PXU/KHM9MCxvPXUpOm8raD49MT8ocz0oZSpsLTEpKk1hdGgucG93KDIsaSksbys9aCk6KHM9ZSpNYXRoLnBvdygyLGgtMSkqTWF0aC5wb3coMixpKSxvPTApKTtpPj04O3RbcitwXT0yNTUmcyxwKz1kLHMvPTI1NixpLT04KTtmb3Iobz1vPDxpfHMsYys9aTtjPjA7dFtyK3BdPTI1NSZvLHArPWQsby89MjU2LGMtPTgpO3RbcitwLWRdfD0xMjgqZ30saW89YW87ZnVuY3Rpb24gYW8odCl7dGhpcy5idWY9QXJyYXlCdWZmZXIuaXNWaWV3JiZBcnJheUJ1ZmZlci5pc1ZpZXcodCk/dDpuZXcgVWludDhBcnJheSh0fHwwKSx0aGlzLnBvcz0wLHRoaXMudHlwZT0wLHRoaXMubGVuZ3RoPXRoaXMuYnVmLmxlbmd0aH1mdW5jdGlvbiBvbyh0KXtyZXR1cm4gdC50eXBlPT09YW8uQnl0ZXM/dC5yZWFkVmFyaW50KCkrdC5wb3M6dC5wb3MrMX1mdW5jdGlvbiBzbyh0LGUscil7cmV0dXJuIHI/NDI5NDk2NzI5NiplKyh0Pj4+MCk6NDI5NDk2NzI5NiooZT4+PjApKyh0Pj4+MCl9ZnVuY3Rpb24gbG8odCxlLHIpe3ZhciBuPWU8PTE2MzgzPzE6ZTw9MjA5NzE1MT8yOmU8PTI2ODQzNTQ1NT8zOk1hdGguY2VpbChNYXRoLmxvZyhlKS8oNypNYXRoLkxOMikpO3IucmVhbGxvYyhuKTtmb3IodmFyIGk9ci5wb3MtMTtpPj10O2ktLSlyLmJ1ZltpK25dPXIuYnVmW2ldfWZ1bmN0aW9uIGNvKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZVZhcmludCh0W3JdKX1mdW5jdGlvbiB1byh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVTVmFyaW50KHRbcl0pfWZ1bmN0aW9uIGhvKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZUZsb2F0KHRbcl0pfWZ1bmN0aW9uIGZvKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZURvdWJsZSh0W3JdKX1mdW5jdGlvbiBwbyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVCb29sZWFuKHRbcl0pfWZ1bmN0aW9uIGdvKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZUZpeGVkMzIodFtyXSl9ZnVuY3Rpb24gdm8odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlU0ZpeGVkMzIodFtyXSl9ZnVuY3Rpb24gbW8odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlRml4ZWQ2NCh0W3JdKX1mdW5jdGlvbiB5byh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVTRml4ZWQ2NCh0W3JdKX1mdW5jdGlvbiB4byh0LGUpe3JldHVybih0W2VdfHRbZSsxXTw8OHx0W2UrMl08PDE2KSsxNjc3NzIxNip0W2UrM119ZnVuY3Rpb24gYm8odCxlLHIpe3Rbcl09ZSx0W3IrMV09ZT4+PjgsdFtyKzJdPWU+Pj4xNix0W3IrM109ZT4+PjI0fWZ1bmN0aW9uIF9vKHQsZSl7cmV0dXJuKHRbZV18dFtlKzFdPDw4fHRbZSsyXTw8MTYpKyh0W2UrM108PDI0KX1hby5WYXJpbnQ9MCxhby5GaXhlZDY0PTEsYW8uQnl0ZXM9Mixhby5GaXhlZDMyPTUsYW8ucHJvdG90eXBlPXtkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5idWY9bnVsbH0scmVhZEZpZWxkczpmdW5jdGlvbih0LGUscil7Zm9yKHI9cnx8dGhpcy5sZW5ndGg7dGhpcy5wb3M8cjspe3ZhciBuPXRoaXMucmVhZFZhcmludCgpLGk9bj4+MyxhPXRoaXMucG9zO3RoaXMudHlwZT03Jm4sdChpLGUsdGhpcyksdGhpcy5wb3M9PT1hJiZ0aGlzLnNraXAobil9cmV0dXJuIGV9LHJlYWRNZXNzYWdlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucmVhZEZpZWxkcyh0LGUsdGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3MpfSxyZWFkRml4ZWQzMjpmdW5jdGlvbigpe3ZhciB0PXhvKHRoaXMuYnVmLHRoaXMucG9zKTtyZXR1cm4gdGhpcy5wb3MrPTQsdH0scmVhZFNGaXhlZDMyOmZ1bmN0aW9uKCl7dmFyIHQ9X28odGhpcy5idWYsdGhpcy5wb3MpO3JldHVybiB0aGlzLnBvcys9NCx0fSxyZWFkRml4ZWQ2NDpmdW5jdGlvbigpe3ZhciB0PXhvKHRoaXMuYnVmLHRoaXMucG9zKSs0Mjk0OTY3Mjk2KnhvKHRoaXMuYnVmLHRoaXMucG9zKzQpO3JldHVybiB0aGlzLnBvcys9OCx0fSxyZWFkU0ZpeGVkNjQ6ZnVuY3Rpb24oKXt2YXIgdD14byh0aGlzLmJ1Zix0aGlzLnBvcykrNDI5NDk2NzI5Nipfbyh0aGlzLmJ1Zix0aGlzLnBvcys0KTtyZXR1cm4gdGhpcy5wb3MrPTgsdH0scmVhZEZsb2F0OmZ1bmN0aW9uKCl7dmFyIHQ9cm8odGhpcy5idWYsdGhpcy5wb3MsITAsMjMsNCk7cmV0dXJuIHRoaXMucG9zKz00LHR9LHJlYWREb3VibGU6ZnVuY3Rpb24oKXt2YXIgdD1ybyh0aGlzLmJ1Zix0aGlzLnBvcywhMCw1Miw4KTtyZXR1cm4gdGhpcy5wb3MrPTgsdH0scmVhZFZhcmludDpmdW5jdGlvbih0KXt2YXIgZSxyLG49dGhpcy5idWY7cmV0dXJuIGU9MTI3JihyPW5bdGhpcy5wb3MrK10pLHI8MTI4P2U6KGV8PSgxMjcmKHI9blt0aGlzLnBvcysrXSkpPDw3LHI8MTI4P2U6KGV8PSgxMjcmKHI9blt0aGlzLnBvcysrXSkpPDwxNCxyPDEyOD9lOihlfD0oMTI3JihyPW5bdGhpcy5wb3MrK10pKTw8MjEscjwxMjg/ZTpmdW5jdGlvbih0LGUscil7dmFyIG4saSxhPXIuYnVmO2lmKG49KDExMiYoaT1hW3IucG9zKytdKSk+PjQsaTwxMjgpcmV0dXJuIHNvKHQsbixlKTtpZihufD0oMTI3JihpPWFbci5wb3MrK10pKTw8MyxpPDEyOClyZXR1cm4gc28odCxuLGUpO2lmKG58PSgxMjcmKGk9YVtyLnBvcysrXSkpPDwxMCxpPDEyOClyZXR1cm4gc28odCxuLGUpO2lmKG58PSgxMjcmKGk9YVtyLnBvcysrXSkpPDwxNyxpPDEyOClyZXR1cm4gc28odCxuLGUpO2lmKG58PSgxMjcmKGk9YVtyLnBvcysrXSkpPDwyNCxpPDEyOClyZXR1cm4gc28odCxuLGUpO2lmKG58PSgxJihpPWFbci5wb3MrK10pKTw8MzEsaTwxMjgpcmV0dXJuIHNvKHQsbixlKTt0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCB2YXJpbnQgbm90IG1vcmUgdGhhbiAxMCBieXRlc1wiKX0oZXw9KDE1JihyPW5bdGhpcy5wb3NdKSk8PDI4LHQsdGhpcykpKSl9LHJlYWRWYXJpbnQ2NDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRWYXJpbnQoITApfSxyZWFkU1ZhcmludDpmdW5jdGlvbigpe3ZhciB0PXRoaXMucmVhZFZhcmludCgpO3JldHVybiB0JTI9PTE/KHQrMSkvLTI6dC8yfSxyZWFkQm9vbGVhbjpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKHRoaXMucmVhZFZhcmludCgpKX0scmVhZFN0cmluZzpmdW5jdGlvbigpe3ZhciB0PXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zLGU9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1cIlwiLGk9ZTtpPHI7KXt2YXIgYSxvLHMsbD10W2ldLGM9bnVsbCx1PWw+MjM5PzQ6bD4yMjM/MzpsPjE5MT8yOjE7aWYoaSt1PnIpYnJlYWs7MT09PXU/bDwxMjgmJihjPWwpOjI9PT11PzEyOD09KDE5MiYoYT10W2krMV0pKSYmKGM9KDMxJmwpPDw2fDYzJmEpPD0xMjcmJihjPW51bGwpOjM9PT11PyhhPXRbaSsxXSxvPXRbaSsyXSwxMjg9PSgxOTImYSkmJjEyOD09KDE5MiZvKSYmKChjPSgxNSZsKTw8MTJ8KDYzJmEpPDw2fDYzJm8pPD0yMDQ3fHxjPj01NTI5NiYmYzw9NTczNDMpJiYoYz1udWxsKSk6ND09PXUmJihhPXRbaSsxXSxvPXRbaSsyXSxzPXRbaSszXSwxMjg9PSgxOTImYSkmJjEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYoKGM9KDE1JmwpPDwxOHwoNjMmYSk8PDEyfCg2MyZvKTw8Nnw2MyZzKTw9NjU1MzV8fGM+PTExMTQxMTIpJiYoYz1udWxsKSksbnVsbD09PWM/KGM9NjU1MzMsdT0xKTpjPjY1NTM1JiYoYy09NjU1MzYsbis9U3RyaW5nLmZyb21DaGFyQ29kZShjPj4+MTAmMTAyM3w1NTI5NiksYz01NjMyMHwxMDIzJmMpLG4rPVN0cmluZy5mcm9tQ2hhckNvZGUoYyksaSs9dX1yZXR1cm4gbn0odGhpcy5idWYsdGhpcy5wb3MsdCk7cmV0dXJuIHRoaXMucG9zPXQsZX0scmVhZEJ5dGVzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3MsZT10aGlzLmJ1Zi5zdWJhcnJheSh0aGlzLnBvcyx0KTtyZXR1cm4gdGhpcy5wb3M9dCxlfSxyZWFkUGFja2VkVmFyaW50OmZ1bmN0aW9uKHQsZSl7dmFyIHI9b28odGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8cjspdC5wdXNoKHRoaXMucmVhZFZhcmludChlKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRTVmFyaW50OmZ1bmN0aW9uKHQpe3ZhciBlPW9vKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRTVmFyaW50KCkpO3JldHVybiB0fSxyZWFkUGFja2VkQm9vbGVhbjpmdW5jdGlvbih0KXt2YXIgZT1vbyh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkQm9vbGVhbigpKTtyZXR1cm4gdH0scmVhZFBhY2tlZEZsb2F0OmZ1bmN0aW9uKHQpe3ZhciBlPW9vKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRGbG9hdCgpKTtyZXR1cm4gdH0scmVhZFBhY2tlZERvdWJsZTpmdW5jdGlvbih0KXt2YXIgZT1vbyh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkRG91YmxlKCkpO3JldHVybiB0fSxyZWFkUGFja2VkRml4ZWQzMjpmdW5jdGlvbih0KXt2YXIgZT1vbyh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkRml4ZWQzMigpKTtyZXR1cm4gdH0scmVhZFBhY2tlZFNGaXhlZDMyOmZ1bmN0aW9uKHQpe3ZhciBlPW9vKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRTRml4ZWQzMigpKTtyZXR1cm4gdH0scmVhZFBhY2tlZEZpeGVkNjQ6ZnVuY3Rpb24odCl7dmFyIGU9b28odGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEZpeGVkNjQoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRTRml4ZWQ2NDpmdW5jdGlvbih0KXt2YXIgZT1vbyh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkU0ZpeGVkNjQoKSk7cmV0dXJuIHR9LHNraXA6ZnVuY3Rpb24odCl7dmFyIGU9NyZ0O2lmKGU9PT1hby5WYXJpbnQpZm9yKDt0aGlzLmJ1Zlt0aGlzLnBvcysrXT4xMjc7KTtlbHNlIGlmKGU9PT1hby5CeXRlcyl0aGlzLnBvcz10aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcztlbHNlIGlmKGU9PT1hby5GaXhlZDMyKXRoaXMucG9zKz00O2Vsc2V7aWYoZSE9PWFvLkZpeGVkNjQpdGhyb3cgbmV3IEVycm9yKFwiVW5pbXBsZW1lbnRlZCB0eXBlOiBcIitlKTt0aGlzLnBvcys9OH19LHdyaXRlVGFnOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVZhcmludCh0PDwzfGUpfSxyZWFsbG9jOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmxlbmd0aHx8MTY7ZTx0aGlzLnBvcyt0OyllKj0yO2lmKGUhPT10aGlzLmxlbmd0aCl7dmFyIHI9bmV3IFVpbnQ4QXJyYXkoZSk7ci5zZXQodGhpcy5idWYpLHRoaXMuYnVmPXIsdGhpcy5sZW5ndGg9ZX19LGZpbmlzaDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aD10aGlzLnBvcyx0aGlzLnBvcz0wLHRoaXMuYnVmLnN1YmFycmF5KDAsdGhpcy5sZW5ndGgpfSx3cml0ZUZpeGVkMzI6ZnVuY3Rpb24odCl7dGhpcy5yZWFsbG9jKDQpLGJvKHRoaXMuYnVmLHQsdGhpcy5wb3MpLHRoaXMucG9zKz00fSx3cml0ZVNGaXhlZDMyOmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg0KSxibyh0aGlzLmJ1Zix0LHRoaXMucG9zKSx0aGlzLnBvcys9NH0sd3JpdGVGaXhlZDY0OmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg4KSxibyh0aGlzLmJ1ZiwtMSZ0LHRoaXMucG9zKSxibyh0aGlzLmJ1ZixNYXRoLmZsb29yKHQqKDEvNDI5NDk2NzI5NikpLHRoaXMucG9zKzQpLHRoaXMucG9zKz04fSx3cml0ZVNGaXhlZDY0OmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg4KSxibyh0aGlzLmJ1ZiwtMSZ0LHRoaXMucG9zKSxibyh0aGlzLmJ1ZixNYXRoLmZsb29yKHQqKDEvNDI5NDk2NzI5NikpLHRoaXMucG9zKzQpLHRoaXMucG9zKz04fSx3cml0ZVZhcmludDpmdW5jdGlvbih0KXsodD0rdHx8MCk+MjY4NDM1NDU1fHx0PDA/ZnVuY3Rpb24odCxlKXt2YXIgcixuO2lmKHQ+PTA/KHI9dCU0Mjk0OTY3Mjk2fDAsbj10LzQyOTQ5NjcyOTZ8MCk6KG49figtdC80Mjk0OTY3Mjk2KSw0Mjk0OTY3Mjk1XihyPX4oLXQlNDI5NDk2NzI5NikpP3I9cisxfDA6KHI9MCxuPW4rMXwwKSksdD49MHgxMDAwMDAwMDAwMDAwMDAwMHx8dDwtMHgxMDAwMDAwMDAwMDAwMDAwMCl0aHJvdyBuZXcgRXJyb3IoXCJHaXZlbiB2YXJpbnQgZG9lc24ndCBmaXQgaW50byAxMCBieXRlc1wiKTtlLnJlYWxsb2MoMTApLGZ1bmN0aW9uKHQsZSxyKXtyLmJ1ZltyLnBvcysrXT0xMjcmdHwxMjgsdD4+Pj03LHIuYnVmW3IucG9zKytdPTEyNyZ0fDEyOCx0Pj4+PTcsci5idWZbci5wb3MrK109MTI3JnR8MTI4LHQ+Pj49NyxyLmJ1ZltyLnBvcysrXT0xMjcmdHwxMjgsdD4+Pj03LHIuYnVmW3IucG9zXT0xMjcmdH0ociwwLGUpLGZ1bmN0aW9uKHQsZSl7dmFyIHI9KDcmdCk8PDQ7ZS5idWZbZS5wb3MrK118PXJ8KCh0Pj4+PTMpPzEyODowKSx0JiYoZS5idWZbZS5wb3MrK109MTI3JnR8KCh0Pj4+PTcpPzEyODowKSx0JiYoZS5idWZbZS5wb3MrK109MTI3JnR8KCh0Pj4+PTcpPzEyODowKSx0JiYoZS5idWZbZS5wb3MrK109MTI3JnR8KCh0Pj4+PTcpPzEyODowKSx0JiYoZS5idWZbZS5wb3MrK109MTI3JnR8KCh0Pj4+PTcpPzEyODowKSx0JiYoZS5idWZbZS5wb3MrK109MTI3JnQpKSkpKX0obixlKX0odCx0aGlzKToodGhpcy5yZWFsbG9jKDQpLHRoaXMuYnVmW3RoaXMucG9zKytdPTEyNyZ0fCh0PjEyNz8xMjg6MCksdDw9MTI3fHwodGhpcy5idWZbdGhpcy5wb3MrK109MTI3Jih0Pj4+PTcpfCh0PjEyNz8xMjg6MCksdDw9MTI3fHwodGhpcy5idWZbdGhpcy5wb3MrK109MTI3Jih0Pj4+PTcpfCh0PjEyNz8xMjg6MCksdDw9MTI3fHwodGhpcy5idWZbdGhpcy5wb3MrK109dD4+PjcmMTI3KSkpKX0sd3JpdGVTVmFyaW50OmZ1bmN0aW9uKHQpe3RoaXMud3JpdGVWYXJpbnQodDwwPzIqLXQtMToyKnQpfSx3cml0ZUJvb2xlYW46ZnVuY3Rpb24odCl7dGhpcy53cml0ZVZhcmludChCb29sZWFuKHQpKX0sd3JpdGVTdHJpbmc6ZnVuY3Rpb24odCl7dD1TdHJpbmcodCksdGhpcy5yZWFsbG9jKDQqdC5sZW5ndGgpLHRoaXMucG9zKys7dmFyIGU9dGhpcy5wb3M7dGhpcy5wb3M9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpLGE9MDthPGUubGVuZ3RoO2ErKyl7aWYoKG49ZS5jaGFyQ29kZUF0KGEpKT41NTI5NSYmbjw1NzM0NCl7aWYoIWkpe24+NTYzMTl8fGErMT09PWUubGVuZ3RoPyh0W3IrK109MjM5LHRbcisrXT0xOTEsdFtyKytdPTE4OSk6aT1uO2NvbnRpbnVlfWlmKG48NTYzMjApe3RbcisrXT0yMzksdFtyKytdPTE5MSx0W3IrK109MTg5LGk9bjtjb250aW51ZX1uPWktNTUyOTY8PDEwfG4tNTYzMjB8NjU1MzYsaT1udWxsfWVsc2UgaSYmKHRbcisrXT0yMzksdFtyKytdPTE5MSx0W3IrK109MTg5LGk9bnVsbCk7bjwxMjg/dFtyKytdPW46KG48MjA0OD90W3IrK109bj4+NnwxOTI6KG48NjU1MzY/dFtyKytdPW4+PjEyfDIyNDoodFtyKytdPW4+PjE4fDI0MCx0W3IrK109bj4+MTImNjN8MTI4KSx0W3IrK109bj4+NiY2M3wxMjgpLHRbcisrXT02MyZufDEyOCl9cmV0dXJuIHJ9KHRoaXMuYnVmLHQsdGhpcy5wb3MpO3ZhciByPXRoaXMucG9zLWU7cj49MTI4JiZsbyhlLHIsdGhpcyksdGhpcy5wb3M9ZS0xLHRoaXMud3JpdGVWYXJpbnQociksdGhpcy5wb3MrPXJ9LHdyaXRlRmxvYXQ6ZnVuY3Rpb24odCl7dGhpcy5yZWFsbG9jKDQpLG5vKHRoaXMuYnVmLHQsdGhpcy5wb3MsITAsMjMsNCksdGhpcy5wb3MrPTR9LHdyaXRlRG91YmxlOmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg4KSxubyh0aGlzLmJ1Zix0LHRoaXMucG9zLCEwLDUyLDgpLHRoaXMucG9zKz04fSx3cml0ZUJ5dGVzOmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3RoaXMud3JpdGVWYXJpbnQoZSksdGhpcy5yZWFsbG9jKGUpO2Zvcih2YXIgcj0wO3I8ZTtyKyspdGhpcy5idWZbdGhpcy5wb3MrK109dFtyXX0sd3JpdGVSYXdNZXNzYWdlOmZ1bmN0aW9uKHQsZSl7dGhpcy5wb3MrKzt2YXIgcj10aGlzLnBvczt0KGUsdGhpcyk7dmFyIG49dGhpcy5wb3MtcjtuPj0xMjgmJmxvKHIsbix0aGlzKSx0aGlzLnBvcz1yLTEsdGhpcy53cml0ZVZhcmludChuKSx0aGlzLnBvcys9bn0sd3JpdGVNZXNzYWdlOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLndyaXRlVGFnKHQsYW8uQnl0ZXMpLHRoaXMud3JpdGVSYXdNZXNzYWdlKGUscil9LHdyaXRlUGFja2VkVmFyaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCxjbyxlKX0sd3JpdGVQYWNrZWRTVmFyaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCx1byxlKX0sd3JpdGVQYWNrZWRCb29sZWFuOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCxwbyxlKX0sd3JpdGVQYWNrZWRGbG9hdDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQsaG8sZSl9LHdyaXRlUGFja2VkRG91YmxlOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCxmbyxlKX0sd3JpdGVQYWNrZWRGaXhlZDMyOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCxnbyxlKX0sd3JpdGVQYWNrZWRTRml4ZWQzMjpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQsdm8sZSl9LHdyaXRlUGFja2VkRml4ZWQ2NDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQsbW8sZSl9LHdyaXRlUGFja2VkU0ZpeGVkNjQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlTWVzc2FnZSh0LHlvLGUpfSx3cml0ZUJ5dGVzRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsYW8uQnl0ZXMpLHRoaXMud3JpdGVCeXRlcyhlKX0sd3JpdGVGaXhlZDMyRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsYW8uRml4ZWQzMiksdGhpcy53cml0ZUZpeGVkMzIoZSl9LHdyaXRlU0ZpeGVkMzJGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxhby5GaXhlZDMyKSx0aGlzLndyaXRlU0ZpeGVkMzIoZSl9LHdyaXRlRml4ZWQ2NEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LGFvLkZpeGVkNjQpLHRoaXMud3JpdGVGaXhlZDY0KGUpfSx3cml0ZVNGaXhlZDY0RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsYW8uRml4ZWQ2NCksdGhpcy53cml0ZVNGaXhlZDY0KGUpfSx3cml0ZVZhcmludEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LGFvLlZhcmludCksdGhpcy53cml0ZVZhcmludChlKX0sd3JpdGVTVmFyaW50RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsYW8uVmFyaW50KSx0aGlzLndyaXRlU1ZhcmludChlKX0sd3JpdGVTdHJpbmdGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxhby5CeXRlcyksdGhpcy53cml0ZVN0cmluZyhlKX0sd3JpdGVGbG9hdEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LGFvLkZpeGVkMzIpLHRoaXMud3JpdGVGbG9hdChlKX0sd3JpdGVEb3VibGVGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxhby5GaXhlZDY0KSx0aGlzLndyaXRlRG91YmxlKGUpfSx3cml0ZUJvb2xlYW5GaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVWYXJpbnRGaWVsZCh0LEJvb2xlYW4oZSkpfX07dmFyIHdvPTM7ZnVuY3Rpb24ga28odCxlLHIpezE9PT10JiZyLnJlYWRNZXNzYWdlKEFvLGUpfWZ1bmN0aW9uIEFvKHQsZSxyKXtpZigzPT09dCl7dmFyIG49ci5yZWFkTWVzc2FnZShUbyx7fSksaT1uLmlkLGE9bi5iaXRtYXAsbz1uLndpZHRoLHM9bi5oZWlnaHQsbD1uLmxlZnQsYz1uLnRvcCx1PW4uYWR2YW5jZTtlLnB1c2goe2lkOmksYml0bWFwOm5ldyBjaSh7d2lkdGg6bysyKndvLGhlaWdodDpzKzIqd299LGEpLG1ldHJpY3M6e3dpZHRoOm8saGVpZ2h0OnMsbGVmdDpsLHRvcDpjLGFkdmFuY2U6dX19KX19ZnVuY3Rpb24gVG8odCxlLHIpezE9PT10P2UuaWQ9ci5yZWFkVmFyaW50KCk6Mj09PXQ/ZS5iaXRtYXA9ci5yZWFkQnl0ZXMoKTozPT09dD9lLndpZHRoPXIucmVhZFZhcmludCgpOjQ9PT10P2UuaGVpZ2h0PXIucmVhZFZhcmludCgpOjU9PT10P2UubGVmdD1yLnJlYWRTVmFyaW50KCk6Nj09PXQ/ZS50b3A9ci5yZWFkU1ZhcmludCgpOjc9PT10JiYoZS5hZHZhbmNlPXIucmVhZFZhcmludCgpKX12YXIgTW89d28sU289ZnVuY3Rpb24odCxlLHIpe3RoaXMudGFyZ2V0PXQsdGhpcy5wYXJlbnQ9ZSx0aGlzLm1hcElkPXIsdGhpcy5jYWxsYmFja3M9e30sdGhpcy5jYWxsYmFja0lEPTAsZyhbXCJyZWNlaXZlXCJdLHRoaXMpLHRoaXMudGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsdGhpcy5yZWNlaXZlLCExKX07U28ucHJvdG90eXBlLnNlbmQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9cj90aGlzLm1hcElkK1wiOlwiK3RoaXMuY2FsbGJhY2tJRCsrOm51bGw7ciYmKHRoaXMuY2FsbGJhY2tzW2ldPXIpO3ZhciBhPVtdO3RoaXMudGFyZ2V0LnBvc3RNZXNzYWdlKHt0YXJnZXRNYXBJZDpuLHNvdXJjZU1hcElkOnRoaXMubWFwSWQsdHlwZTp0LGlkOlN0cmluZyhpKSxkYXRhOmdyKGUsYSl9LGEpfSxTby5wcm90b3R5cGUucmVjZWl2ZT1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMsbj10LmRhdGEsaT1uLmlkO2lmKCFuLnRhcmdldE1hcElkfHx0aGlzLm1hcElkPT09bi50YXJnZXRNYXBJZCl7dmFyIGE9ZnVuY3Rpb24odCxlKXt2YXIgbj1bXTtyLnRhcmdldC5wb3N0TWVzc2FnZSh7c291cmNlTWFwSWQ6ci5tYXBJZCx0eXBlOlwiPHJlc3BvbnNlPlwiLGlkOlN0cmluZyhpKSxlcnJvcjp0P2dyKHQpOm51bGwsZGF0YTpncihlLG4pfSxuKX07aWYoXCI8cmVzcG9uc2U+XCI9PT1uLnR5cGUpZT10aGlzLmNhbGxiYWNrc1tuLmlkXSxkZWxldGUgdGhpcy5jYWxsYmFja3Nbbi5pZF0sZSYmbi5lcnJvcj9lKHZyKG4uZXJyb3IpKTplJiZlKG51bGwsdnIobi5kYXRhKSk7ZWxzZSBpZih2b2lkIDAhPT1uLmlkJiZ0aGlzLnBhcmVudFtuLnR5cGVdKXRoaXMucGFyZW50W24udHlwZV0obi5zb3VyY2VNYXBJZCx2cihuLmRhdGEpLGEpO2Vsc2UgaWYodm9pZCAwIT09bi5pZCYmdGhpcy5wYXJlbnQuZ2V0V29ya2VyU291cmNlKXt2YXIgbz1uLnR5cGUuc3BsaXQoXCIuXCIpO3RoaXMucGFyZW50LmdldFdvcmtlclNvdXJjZShuLnNvdXJjZU1hcElkLG9bMF0sb1sxXSlbb1syXV0odnIobi5kYXRhKSxhKX1lbHNlIHRoaXMucGFyZW50W24udHlwZV0odnIobi5kYXRhKSl9fSxTby5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy50YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIix0aGlzLnJlY2VpdmUsITEpfTt2YXIgRW89bihpKGZ1bmN0aW9uKHQsZSl7IWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlLG4pe3ZhciBpPXIoMjU2KnQsMjU2KihlPU1hdGgucG93KDIsbiktZS0xKSxuKSxhPXIoMjU2Kih0KzEpLDI1NiooZSsxKSxuKTtyZXR1cm4gaVswXStcIixcIitpWzFdK1wiLFwiK2FbMF0rXCIsXCIrYVsxXX1mdW5jdGlvbiByKHQsZSxyKXt2YXIgbj0yKk1hdGguUEkqNjM3ODEzNy8yNTYvTWF0aC5wb3coMixyKTtyZXR1cm5bdCpuLTIqTWF0aC5QSSo2Mzc4MTM3LzIsZSpuLTIqTWF0aC5QSSo2Mzc4MTM3LzJdfXQuZ2V0VVJMPWZ1bmN0aW9uKHQscixuLGksYSxvKXtyZXR1cm4gbz1vfHx7fSx0K1wiP1wiK1tcImJib3g9XCIrZShuLGksYSksXCJmb3JtYXQ9XCIrKG8uZm9ybWF0fHxcImltYWdlL3BuZ1wiKSxcInNlcnZpY2U9XCIrKG8uc2VydmljZXx8XCJXTVNcIiksXCJ2ZXJzaW9uPVwiKyhvLnZlcnNpb258fFwiMS4xLjFcIiksXCJyZXF1ZXN0PVwiKyhvLnJlcXVlc3R8fFwiR2V0TWFwXCIpLFwic3JzPVwiKyhvLnNyc3x8XCJFUFNHOjM4NTdcIiksXCJ3aWR0aD1cIisoby53aWR0aHx8MjU2KSxcImhlaWdodD1cIisoby5oZWlnaHR8fDI1NiksXCJsYXllcnM9XCIrcl0uam9pbihcIiZcIil9LHQuZ2V0VGlsZUJCb3g9ZSx0LmdldE1lcmNDb29yZHM9cixPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0oZSl9KSksQ289ZnVuY3Rpb24odCxlLHIpe3RoaXMuej10LHRoaXMueD1lLHRoaXMueT1yLHRoaXMua2V5PU9vKDAsdCxlLHIpfTtDby5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLno9PT10LnomJnRoaXMueD09PXQueCYmdGhpcy55PT09dC55fSxDby5wcm90b3R5cGUudXJsPWZ1bmN0aW9uKHQsZSl7dmFyIHI9RW8uZ2V0VGlsZUJCb3godGhpcy54LHRoaXMueSx0aGlzLnopLG49ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpPVwiXCIsYT10O2E+MDthLS0paSs9KGUmKG49MTw8YS0xKT8xOjApKyhyJm4/MjowKTtyZXR1cm4gaX0odGhpcy56LHRoaXMueCx0aGlzLnkpO3JldHVybiB0Wyh0aGlzLngrdGhpcy55KSV0Lmxlbmd0aF0ucmVwbGFjZShcIntwcmVmaXh9XCIsKHRoaXMueCUxNikudG9TdHJpbmcoMTYpKyh0aGlzLnklMTYpLnRvU3RyaW5nKDE2KSkucmVwbGFjZShcInt6fVwiLFN0cmluZyh0aGlzLnopKS5yZXBsYWNlKFwie3h9XCIsU3RyaW5nKHRoaXMueCkpLnJlcGxhY2UoXCJ7eX1cIixTdHJpbmcoXCJ0bXNcIj09PWU/TWF0aC5wb3coMix0aGlzLnopLXRoaXMueS0xOnRoaXMueSkpLnJlcGxhY2UoXCJ7cXVhZGtleX1cIixuKS5yZXBsYWNlKFwie2Jib3gtZXBzZy0zODU3fVwiLHIpfTt2YXIgTG89ZnVuY3Rpb24odCxlKXt0aGlzLndyYXA9dCx0aGlzLmNhbm9uaWNhbD1lLHRoaXMua2V5PU9vKHQsZS56LGUueCxlLnkpfSx6bz1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMub3ZlcnNjYWxlZFo9dCx0aGlzLndyYXA9ZSx0aGlzLmNhbm9uaWNhbD1uZXcgQ28ociwrbiwraSksdGhpcy5rZXk9T28oZSx0LG4saSl9O2Z1bmN0aW9uIE9vKHQsZSxyLG4peyh0Kj0yKTwwJiYodD0tMSp0LTEpO3ZhciBpPTE8PGU7cmV0dXJuIDMyKihpKmkqdCtpKm4rcikrZX16by5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm92ZXJzY2FsZWRaPT09dC5vdmVyc2NhbGVkWiYmdGhpcy53cmFwPT09dC53cmFwJiZ0aGlzLmNhbm9uaWNhbC5lcXVhbHModC5jYW5vbmljYWwpfSx6by5wcm90b3R5cGUuc2NhbGVkVG89ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jYW5vbmljYWwuei10O3JldHVybiB0PnRoaXMuY2Fub25pY2FsLno/bmV3IHpvKHQsdGhpcy53cmFwLHRoaXMuY2Fub25pY2FsLnosdGhpcy5jYW5vbmljYWwueCx0aGlzLmNhbm9uaWNhbC55KTpuZXcgem8odCx0aGlzLndyYXAsdCx0aGlzLmNhbm9uaWNhbC54Pj5lLHRoaXMuY2Fub25pY2FsLnk+PmUpfSx6by5wcm90b3R5cGUuaXNDaGlsZE9mPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY2Fub25pY2FsLnotdC5jYW5vbmljYWwuejtyZXR1cm4gMD09PXQub3ZlcnNjYWxlZFp8fHQub3ZlcnNjYWxlZFo8dGhpcy5vdmVyc2NhbGVkWiYmdC5jYW5vbmljYWwueD09PXRoaXMuY2Fub25pY2FsLng+PmUmJnQuY2Fub25pY2FsLnk9PT10aGlzLmNhbm9uaWNhbC55Pj5lfSx6by5wcm90b3R5cGUuY2hpbGRyZW49ZnVuY3Rpb24odCl7aWYodGhpcy5vdmVyc2NhbGVkWj49dClyZXR1cm5bbmV3IHpvKHRoaXMub3ZlcnNjYWxlZForMSx0aGlzLndyYXAsdGhpcy5jYW5vbmljYWwueix0aGlzLmNhbm9uaWNhbC54LHRoaXMuY2Fub25pY2FsLnkpXTt2YXIgZT10aGlzLmNhbm9uaWNhbC56KzEscj0yKnRoaXMuY2Fub25pY2FsLngsbj0yKnRoaXMuY2Fub25pY2FsLnk7cmV0dXJuW25ldyB6byhlLHRoaXMud3JhcCxlLHIsbiksbmV3IHpvKGUsdGhpcy53cmFwLGUscisxLG4pLG5ldyB6byhlLHRoaXMud3JhcCxlLHIsbisxKSxuZXcgem8oZSx0aGlzLndyYXAsZSxyKzEsbisxKV19LHpvLnByb3RvdHlwZS5pc0xlc3NUaGFuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLndyYXA8dC53cmFwfHwhKHRoaXMud3JhcD50LndyYXApJiYodGhpcy5vdmVyc2NhbGVkWjx0Lm92ZXJzY2FsZWRafHwhKHRoaXMub3ZlcnNjYWxlZFo+dC5vdmVyc2NhbGVkWikmJih0aGlzLmNhbm9uaWNhbC54PHQuY2Fub25pY2FsLnh8fCEodGhpcy5jYW5vbmljYWwueD50LmNhbm9uaWNhbC54KSYmdGhpcy5jYW5vbmljYWwueTx0LmNhbm9uaWNhbC55KSl9LHpvLnByb3RvdHlwZS53cmFwcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB6byh0aGlzLm92ZXJzY2FsZWRaLDAsdGhpcy5jYW5vbmljYWwueix0aGlzLmNhbm9uaWNhbC54LHRoaXMuY2Fub25pY2FsLnkpfSx6by5wcm90b3R5cGUudW53cmFwVG89ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB6byh0aGlzLm92ZXJzY2FsZWRaLHQsdGhpcy5jYW5vbmljYWwueix0aGlzLmNhbm9uaWNhbC54LHRoaXMuY2Fub25pY2FsLnkpfSx6by5wcm90b3R5cGUub3ZlcnNjYWxlRmFjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucG93KDIsdGhpcy5vdmVyc2NhbGVkWi10aGlzLmNhbm9uaWNhbC56KX0sem8ucHJvdG90eXBlLnRvVW53cmFwcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBMbyh0aGlzLndyYXAsdGhpcy5jYW5vbmljYWwpfSx6by5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vdmVyc2NhbGVkWitcIi9cIit0aGlzLmNhbm9uaWNhbC54K1wiL1wiK3RoaXMuY2Fub25pY2FsLnl9LHpvLnByb3RvdHlwZS50b0Nvb3JkaW5hdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHModGhpcy5jYW5vbmljYWwueCtNYXRoLnBvdygyLHRoaXMud3JhcCksdGhpcy5jYW5vbmljYWwueSx0aGlzLmNhbm9uaWNhbC56KX0scHIoXCJDYW5vbmljYWxUaWxlSURcIixDbykscHIoXCJPdmVyc2NhbGVkVGlsZUlEXCIsem8se29taXQ6W1wicG9zTWF0cml4XCJdfSk7dmFyIElvPWZ1bmN0aW9uKHQsZSxyKXtpZih0PD0wKXRocm93IG5ldyBSYW5nZUVycm9yKFwiTGV2ZWwgbXVzdCBoYXZlIHBvc2l0aXZlIGRpbWVuc2lvblwiKTt0aGlzLmRpbT10LHRoaXMuYm9yZGVyPWUsdGhpcy5zdHJpZGU9dGhpcy5kaW0rMip0aGlzLmJvcmRlcix0aGlzLmRhdGE9cnx8bmV3IEludDMyQXJyYXkoKHRoaXMuZGltKzIqdGhpcy5ib3JkZXIpKih0aGlzLmRpbSsyKnRoaXMuYm9yZGVyKSl9O0lvLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZGF0YVt0aGlzLl9pZHgodCxlKV09cis2NTUzNn0sSW8ucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmRhdGFbdGhpcy5faWR4KHQsZSldLTY1NTM2fSxJby5wcm90b3R5cGUuX2lkeD1mdW5jdGlvbih0LGUpe2lmKHQ8LXRoaXMuYm9yZGVyfHx0Pj10aGlzLmRpbSt0aGlzLmJvcmRlcnx8ZTwtdGhpcy5ib3JkZXJ8fGU+PXRoaXMuZGltK3RoaXMuYm9yZGVyKXRocm93IG5ldyBSYW5nZUVycm9yKFwib3V0IG9mIHJhbmdlIHNvdXJjZSBjb29yZGluYXRlcyBmb3IgREVNIGRhdGFcIik7cmV0dXJuKGUrdGhpcy5ib3JkZXIpKnRoaXMuc3RyaWRlKyh0K3RoaXMuYm9yZGVyKX0scHIoXCJMZXZlbFwiLElvKTt2YXIgRG89ZnVuY3Rpb24odCxlLHIpe3RoaXMudWlkPXQsdGhpcy5zY2FsZT1lfHwxLHRoaXMubGV2ZWw9cnx8bmV3IElvKDI1Niw1MTIpLHRoaXMubG9hZGVkPSEhcn07RG8ucHJvdG90eXBlLmxvYWRGcm9tSW1hZ2U9ZnVuY3Rpb24odCxlKXtpZih0LmhlaWdodCE9PXQud2lkdGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJERU0gdGlsZXMgbXVzdCBiZSBzcXVhcmVcIik7aWYoZSYmXCJtYXBib3hcIiE9PWUmJlwidGVycmFyaXVtXCIhPT1lKXJldHVybiBfKCdcIicrZSsnXCIgaXMgbm90IGEgdmFsaWQgZW5jb2RpbmcgdHlwZS4gVmFsaWQgdHlwZXMgaW5jbHVkZSBcIm1hcGJveFwiIGFuZCBcInRlcnJhcml1bVwiLicpO3ZhciByPXRoaXMubGV2ZWw9bmV3IElvKHQud2lkdGgsdC53aWR0aC8yKSxuPXQuZGF0YTt0aGlzLl91bnBhY2tEYXRhKHIsbixlfHxcIm1hcGJveFwiKTtmb3IodmFyIGk9MDtpPHIuZGltO2krKylyLnNldCgtMSxpLHIuZ2V0KDAsaSkpLHIuc2V0KHIuZGltLGksci5nZXQoci5kaW0tMSxpKSksci5zZXQoaSwtMSxyLmdldChpLDApKSxyLnNldChpLHIuZGltLHIuZ2V0KGksci5kaW0tMSkpO3Iuc2V0KC0xLC0xLHIuZ2V0KDAsMCkpLHIuc2V0KHIuZGltLC0xLHIuZ2V0KHIuZGltLTEsMCkpLHIuc2V0KC0xLHIuZGltLHIuZ2V0KDAsci5kaW0tMSkpLHIuc2V0KHIuZGltLHIuZGltLHIuZ2V0KHIuZGltLTEsci5kaW0tMSkpLHRoaXMubG9hZGVkPSEwfSxEby5wcm90b3R5cGUuX3VucGFja01hcGJveD1mdW5jdGlvbih0LGUscil7cmV0dXJuKDI1Nip0KjI1NisyNTYqZStyKS8xMC0xZTR9LERvLnByb3RvdHlwZS5fdW5wYWNrVGVycmFyaXVtPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMjU2KnQrZStyLzI1Ni0zMjc2OH0sRG8ucHJvdG90eXBlLl91bnBhY2tEYXRhPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49e21hcGJveDp0aGlzLl91bnBhY2tNYXBib3gsdGVycmFyaXVtOnRoaXMuX3VucGFja1RlcnJhcml1bX1bcl0saT0wO2k8dC5kaW07aSsrKWZvcih2YXIgYT0wO2E8dC5kaW07YSsrKXt2YXIgbz00KihpKnQuZGltK2EpO3Quc2V0KGEsaSx0aGlzLnNjYWxlKm4oZVtvXSxlW28rMV0sZVtvKzJdKSl9fSxEby5wcm90b3R5cGUuZ2V0UGl4ZWxzPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB1aSh7d2lkdGg6dGhpcy5sZXZlbC5kaW0rMip0aGlzLmxldmVsLmJvcmRlcixoZWlnaHQ6dGhpcy5sZXZlbC5kaW0rMip0aGlzLmxldmVsLmJvcmRlcn0sbmV3IFVpbnQ4QXJyYXkodGhpcy5sZXZlbC5kYXRhLmJ1ZmZlcikpfSxEby5wcm90b3R5cGUuYmFja2ZpbGxCb3JkZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGV2ZWwsaT10LmxldmVsO2lmKG4uZGltIT09aS5kaW0pdGhyb3cgbmV3IEVycm9yKFwibGV2ZWwgbWlzbWF0Y2ggKGRlbSBkaW1lbnNpb24pXCIpO3ZhciBhPWUqbi5kaW0sbz1lKm4uZGltK24uZGltLHM9cipuLmRpbSxsPXIqbi5kaW0rbi5kaW07c3dpdGNoKGUpe2Nhc2UtMTphPW8tMTticmVhaztjYXNlIDE6bz1hKzF9c3dpdGNoKHIpe2Nhc2UtMTpzPWwtMTticmVhaztjYXNlIDE6bD1zKzF9Zm9yKHZhciBjPWYoYSwtbi5ib3JkZXIsbi5kaW0rbi5ib3JkZXIpLHU9ZihvLC1uLmJvcmRlcixuLmRpbStuLmJvcmRlciksaD1mKHMsLW4uYm9yZGVyLG4uZGltK24uYm9yZGVyKSxwPWYobCwtbi5ib3JkZXIsbi5kaW0rbi5ib3JkZXIpLGQ9LWUqbi5kaW0sZz0tcipuLmRpbSx2PWg7djxwO3YrKylmb3IodmFyIG09YzttPHU7bSsrKW4uc2V0KG0sdixpLmdldChtK2QsditnKSl9LHByKFwiREVNRGF0YVwiLERvKTt2YXIgUG89ZnVuY3Rpb24odCl7dGhpcy5fc3RyaW5nVG9OdW1iZXI9e30sdGhpcy5fbnVtYmVyVG9TdHJpbmc9W107Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRbZV07dGhpcy5fc3RyaW5nVG9OdW1iZXJbcl09ZSx0aGlzLl9udW1iZXJUb1N0cmluZ1tlXT1yfX07UG8ucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fc3RyaW5nVG9OdW1iZXJbdF19LFBvLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX251bWJlclRvU3RyaW5nW3RdfTt2YXIgUm89ZnVuY3Rpb24odCxlLHIsbil7dGhpcy50eXBlPVwiRmVhdHVyZVwiLHRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlPXQsdC5fej1lLHQuX3g9cix0Ll95PW4sdGhpcy5wcm9wZXJ0aWVzPXQucHJvcGVydGllcyxudWxsIT10LmlkJiYodGhpcy5pZD10LmlkKX0sRm89e2dlb21ldHJ5Ontjb25maWd1cmFibGU6ITB9fTtGby5nZW9tZXRyeS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5fZ2VvbWV0cnkmJih0aGlzLl9nZW9tZXRyeT10aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS50b0dlb0pTT04odGhpcy5fdmVjdG9yVGlsZUZlYXR1cmUuX3gsdGhpcy5fdmVjdG9yVGlsZUZlYXR1cmUuX3ksdGhpcy5fdmVjdG9yVGlsZUZlYXR1cmUuX3opLmdlb21ldHJ5KSx0aGlzLl9nZW9tZXRyeX0sRm8uZ2VvbWV0cnkuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX2dlb21ldHJ5PXR9LFJvLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgdD17Z2VvbWV0cnk6dGhpcy5nZW9tZXRyeX07Zm9yKHZhciBlIGluIHRoaXMpXCJfZ2VvbWV0cnlcIiE9PWUmJlwiX3ZlY3RvclRpbGVGZWF0dXJlXCIhPT1lJiYodFtlXT10aGlzW2VdKTtyZXR1cm4gdH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUm8ucHJvdG90eXBlLEZvKTt2YXIgQm89ZnVuY3Rpb24odCxlLHIpe3RoaXMudGlsZUlEPXQsdGhpcy54PXQuY2Fub25pY2FsLngsdGhpcy55PXQuY2Fub25pY2FsLnksdGhpcy56PXQuY2Fub25pY2FsLnosdGhpcy5ncmlkPWV8fG5ldyBscihQbiwxNiwwKSx0aGlzLmZlYXR1cmVJbmRleEFycmF5PXJ8fG5ldyBBbn07ZnVuY3Rpb24gTm8odCxlKXtyZXR1cm4gZS10fUJvLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10aGlzLmZlYXR1cmVJbmRleEFycmF5Lmxlbmd0aDt0aGlzLmZlYXR1cmVJbmRleEFycmF5LmVtcGxhY2VCYWNrKHIsbixpKTtmb3IodmFyIG89MDtvPGUubGVuZ3RoO28rKyl7Zm9yKHZhciBzPWVbb10sbD1bMS8wLDEvMCwtMS8wLC0xLzBdLGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIHU9c1tjXTtsWzBdPU1hdGgubWluKGxbMF0sdS54KSxsWzFdPU1hdGgubWluKGxbMV0sdS55KSxsWzJdPU1hdGgubWF4KGxbMl0sdS54KSxsWzNdPU1hdGgubWF4KGxbM10sdS55KX1sWzBdPFBuJiZsWzFdPFBuJiZsWzJdPj0wJiZsWzNdPj0wJiZ0aGlzLmdyaWQuaW5zZXJ0KGEsbFswXSxsWzFdLGxbMl0sbFszXSl9fSxCby5wcm90b3R5cGUubG9hZFZUTGF5ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudnRMYXllcnN8fCh0aGlzLnZ0TGF5ZXJzPW5ldyBnYS5WZWN0b3JUaWxlKG5ldyBpbyh0aGlzLnJhd1RpbGVEYXRhKSkubGF5ZXJzLHRoaXMuc291cmNlTGF5ZXJDb2Rlcj1uZXcgUG8odGhpcy52dExheWVycz9PYmplY3Qua2V5cyh0aGlzLnZ0TGF5ZXJzKS5zb3J0KCk6W1wiX2dlb2pzb25UaWxlTGF5ZXJcIl0pKSx0aGlzLnZ0TGF5ZXJzfSxCby5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzO3RoaXMubG9hZFZUTGF5ZXJzKCk7Zm9yKHZhciBuPXQucGFyYW1zfHx7fSxpPVBuL3QudGlsZVNpemUvdC5zY2FsZSxhPVJlKG4uZmlsdGVyKSxvPXQucXVlcnlHZW9tZXRyeSxzPXQucXVlcnlQYWRkaW5nKmksbD0xLzAsYz0xLzAsdT0tMS8wLGg9LTEvMCxmPTA7ZjxvLmxlbmd0aDtmKyspZm9yKHZhciBwPW9bZl0sZD0wO2Q8cC5sZW5ndGg7ZCsrKXt2YXIgZz1wW2RdO2w9TWF0aC5taW4obCxnLngpLGM9TWF0aC5taW4oYyxnLnkpLHU9TWF0aC5tYXgodSxnLngpLGg9TWF0aC5tYXgoaCxnLnkpfXZhciB2PXRoaXMuZ3JpZC5xdWVyeShsLXMsYy1zLHUrcyxoK3MpO3Yuc29ydChObyk7Zm9yKHZhciBtLHk9e30seD1mdW5jdGlvbihzKXt2YXIgbD12W3NdO2lmKGwhPT1tKXttPWw7dmFyIGM9ci5mZWF0dXJlSW5kZXhBcnJheS5nZXQobCksdT1udWxsO3IubG9hZE1hdGNoaW5nRmVhdHVyZSh5LGMuYnVja2V0SW5kZXgsYy5zb3VyY2VMYXllckluZGV4LGMuZmVhdHVyZUluZGV4LGEsbi5sYXllcnMsZSxmdW5jdGlvbihlLG4pe3JldHVybiB1fHwodT1GbihlKSksbi5xdWVyeUludGVyc2VjdHNGZWF0dXJlKG8sZSx1LHIueix0LnRyYW5zZm9ybSxpLHQucG9zTWF0cml4KX0pfX0sYj0wO2I8di5sZW5ndGg7YisrKXgoYik7cmV0dXJuIHl9LEJvLnByb3RvdHlwZS5sb2FkTWF0Y2hpbmdGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9dGhpcy5idWNrZXRMYXllcklEc1tlXTtpZighYXx8ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZihlLmluZGV4T2YodFtyXSk+PTApcmV0dXJuITA7cmV0dXJuITF9KGEsbCkpe3ZhciBjPXRoaXMuc291cmNlTGF5ZXJDb2Rlci5kZWNvZGUociksdT10aGlzLnZ0TGF5ZXJzW2NdLmZlYXR1cmUobik7aWYoaShuZXcgTHIodGhpcy50aWxlSUQub3ZlcnNjYWxlZFopLHUpKWZvcih2YXIgaD0wO2g8bC5sZW5ndGg7aCsrKXt2YXIgZj1sW2hdO2lmKCEoYSYmYS5pbmRleE9mKGYpPDApKXt2YXIgcD1vW2ZdO2lmKHAmJighc3x8cyh1LHApKSl7dmFyIGQ9bmV3IFJvKHUsdGhpcy56LHRoaXMueCx0aGlzLnkpO2QubGF5ZXI9cC5zZXJpYWxpemUoKTt2YXIgZz10W2ZdO3ZvaWQgMD09PWcmJihnPXRbZl09W10pLGcucHVzaCh7ZmVhdHVyZUluZGV4Om4sZmVhdHVyZTpkfSl9fX19fSxCby5wcm90b3R5cGUubG9va3VwU3ltYm9sRmVhdHVyZXM9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPXt9O3RoaXMubG9hZFZUTGF5ZXJzKCk7Zm9yKHZhciBzPVJlKG4pLGw9MCxjPXQ7bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdO3RoaXMubG9hZE1hdGNoaW5nRmVhdHVyZShvLGUscix1LHMsaSxhKX1yZXR1cm4gb30sQm8ucHJvdG90eXBlLmhhc0xheWVyPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dGhpcy5idWNrZXRMYXllcklEcztlPHIubGVuZ3RoO2UrPTEpZm9yKHZhciBuPTAsaT1yW2VdO248aS5sZW5ndGg7bis9MSlpZih0PT09aVtuXSlyZXR1cm4hMDtyZXR1cm4hMX0scHIoXCJGZWF0dXJlSW5kZXhcIixCbyx7b21pdDpbXCJyYXdUaWxlRGF0YVwiLFwic291cmNlTGF5ZXJDb2RlclwiXX0pO3ZhciBqbz17aG9yaXpvbnRhbDoxLHZlcnRpY2FsOjIsaG9yaXpvbnRhbE9ubHk6M30sVm89ezk6ITAsMTA6ITAsMTE6ITAsMTI6ITAsMTM6ITAsMzI6ITB9LFVvPXt9O2Z1bmN0aW9uIHFvKHQsZSxyLG4pe3ZhciBpPU1hdGgucG93KHQtZSwyKTtyZXR1cm4gbj90PGU/aS8yOjIqaTppK01hdGguYWJzKHIpKnJ9ZnVuY3Rpb24gSG8odCxlKXt2YXIgcj0wO3JldHVybiAxMD09PXQmJihyLT0xZTQpLDQwIT09dCYmNjUyODghPT10fHwocis9NTApLDQxIT09ZSYmNjUyODkhPT1lfHwocis9NTApLHJ9ZnVuY3Rpb24gR28odCxlLHIsbixpLGEpe2Zvcih2YXIgbz1udWxsLHM9cW8oZSxyLGksYSksbD0wLGM9bjtsPGMubGVuZ3RoO2wrPTEpe3ZhciB1PWNbbF0saD1xbyhlLXUueCxyLGksYSkrdS5iYWRuZXNzO2g8PXMmJihvPXUscz1oKX1yZXR1cm57aW5kZXg6dCx4OmUscHJpb3JCcmVhazpvLGJhZG5lc3M6c319ZnVuY3Rpb24gWW8odCxlLHIsbil7aWYoIXIpcmV0dXJuW107aWYoIXQpcmV0dXJuW107Zm9yKHZhciBpLGE9W10sbz1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9MCxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBvPW5bdC5jaGFyQ29kZUF0KGEpXTtvJiYoaSs9by5tZXRyaWNzLmFkdmFuY2UrZSl9cmV0dXJuIGkvTWF0aC5tYXgoMSxNYXRoLmNlaWwoaS9yKSl9KHQsZSxyLG4pLHM9MCxsPTA7bDx0Lmxlbmd0aDtsKyspe3ZhciBjPXQuY2hhckNvZGVBdChsKSx1PW5bY107dSYmIVZvW2NdJiYocys9dS5tZXRyaWNzLmFkdmFuY2UrZSksbDx0Lmxlbmd0aC0xJiYoVW9bY118fCEoKGk9Yyk8MTE5MDQpJiYoeXJbXCJCb3BvbW9mbyBFeHRlbmRlZFwiXShpKXx8eXIuQm9wb21vZm8oaSl8fHlyW1wiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXNcIl0oaSl8fHlyW1wiQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBoc1wiXShpKXx8eXJbXCJDSksgQ29tcGF0aWJpbGl0eVwiXShpKXx8eXJbXCJDSksgUmFkaWNhbHMgU3VwcGxlbWVudFwiXShpKXx8eXJbXCJDSksgU3Ryb2tlc1wiXShpKXx8eXJbXCJDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb25cIl0oaSl8fHlyW1wiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQVwiXShpKXx8eXJbXCJDSksgVW5pZmllZCBJZGVvZ3JhcGhzXCJdKGkpfHx5cltcIkVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHNcIl0oaSl8fHlyW1wiSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXNcIl0oaSl8fHlyLkhpcmFnYW5hKGkpfHx5cltcIklkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnNcIl0oaSl8fHlyW1wiS2FuZ3hpIFJhZGljYWxzXCJdKGkpfHx5cltcIkthdGFrYW5hIFBob25ldGljIEV4dGVuc2lvbnNcIl0oaSl8fHlyLkthdGFrYW5hKGkpfHx5cltcIlZlcnRpY2FsIEZvcm1zXCJdKGkpfHx5cltcIllpIFJhZGljYWxzXCJdKGkpfHx5cltcIllpIFN5bGxhYmxlc1wiXShpKSkpJiZhLnB1c2goR28obCsxLHMsbyxhLEhvKGMsdC5jaGFyQ29kZUF0KGwrMSkpLCExKSl9cmV0dXJuIGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGU/dChlLnByaW9yQnJlYWspLmNvbmNhdChlLmluZGV4KTpbXX0oR28odC5sZW5ndGgscyxvLGEsMCwhMCkpfWZ1bmN0aW9uIFdvKHQpe3ZhciBlPS41LHI9LjU7c3dpdGNoKHQpe2Nhc2VcInJpZ2h0XCI6Y2FzZVwidG9wLXJpZ2h0XCI6Y2FzZVwiYm90dG9tLXJpZ2h0XCI6ZT0xO2JyZWFrO2Nhc2VcImxlZnRcIjpjYXNlXCJ0b3AtbGVmdFwiOmNhc2VcImJvdHRvbS1sZWZ0XCI6ZT0wfXN3aXRjaCh0KXtjYXNlXCJib3R0b21cIjpjYXNlXCJib3R0b20tcmlnaHRcIjpjYXNlXCJib3R0b20tbGVmdFwiOnI9MTticmVhaztjYXNlXCJ0b3BcIjpjYXNlXCJ0b3AtcmlnaHRcIjpjYXNlXCJ0b3AtbGVmdFwiOnI9MH1yZXR1cm57aG9yaXpvbnRhbEFsaWduOmUsdmVydGljYWxBbGlnbjpyfX1mdW5jdGlvbiBYbyh0LGUscixuLGkpe2lmKGkpe3ZhciBhPWVbdFtuXS5nbHlwaF07aWYoYSlmb3IodmFyIG89YS5tZXRyaWNzLmFkdmFuY2Uscz0odFtuXS54K28pKmksbD1yO2w8PW47bCsrKXRbbF0ueC09c319VW9bMTBdPSEwLFVvWzMyXT0hMCxVb1szOF09ITAsVW9bNDBdPSEwLFVvWzQxXT0hMCxVb1s0M109ITAsVW9bNDVdPSEwLFVvWzQ3XT0hMCxVb1sxNzNdPSEwLFVvWzE4M109ITAsVW9bODIwM109ITAsVW9bODIwOF09ITAsVW9bODIxMV09ITAsVW9bODIzMV09ITAsZS5jb21tb25qc0dsb2JhbD1yLGUudW53cmFwRXhwb3J0cz1uLGUuY3JlYXRlQ29tbW9uanNNb2R1bGU9aSxlLmRlZmF1bHQ9c2VsZixlLmRlZmF1bHQkMT1sLGUuZ2V0SlNPTj1mdW5jdGlvbih0LGUpe3ZhciByPU0odCk7cmV0dXJuIHIuc2V0UmVxdWVzdEhlYWRlcihcIkFjY2VwdFwiLFwiYXBwbGljYXRpb24vanNvblwiKSxyLm9uZXJyb3I9ZnVuY3Rpb24oKXtlKG5ldyBFcnJvcihyLnN0YXR1c1RleHQpKX0sci5vbmxvYWQ9ZnVuY3Rpb24oKXtpZihyLnN0YXR1cz49MjAwJiZyLnN0YXR1czwzMDAmJnIucmVzcG9uc2Upe3ZhciBuO3RyeXtuPUpTT04ucGFyc2Uoci5yZXNwb25zZSl9Y2F0Y2godCl7cmV0dXJuIGUodCl9ZShudWxsLG4pfWVsc2UgNDAxPT09ci5zdGF0dXMmJnQudXJsLm1hdGNoKC9tYXBib3guY29tLyk/ZShuZXcgVChyLnN0YXR1c1RleHQrXCI6IHlvdSBtYXkgaGF2ZSBwcm92aWRlZCBhbiBpbnZhbGlkIE1hcGJveCBhY2Nlc3MgdG9rZW4uIFNlZSBodHRwczovL3d3dy5tYXBib3guY29tL2FwaS1kb2N1bWVudGF0aW9uLyNhY2Nlc3MtdG9rZW5zXCIsci5zdGF0dXMsdC51cmwpKTplKG5ldyBUKHIuc3RhdHVzVGV4dCxyLnN0YXR1cyx0LnVybCkpfSxyLnNlbmQoKSxyfSxlLmdldEltYWdlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFModCxmdW5jdGlvbih0LHIpe2lmKHQpZSh0KTtlbHNlIGlmKHIpe3ZhciBuPW5ldyBzZWxmLkltYWdlLGk9c2VsZi5VUkx8fHNlbGYud2Via2l0VVJMO24ub25sb2FkPWZ1bmN0aW9uKCl7ZShudWxsLG4pLGkucmV2b2tlT2JqZWN0VVJMKG4uc3JjKX07dmFyIGE9bmV3IHNlbGYuQmxvYihbbmV3IFVpbnQ4QXJyYXkoci5kYXRhKV0se3R5cGU6XCJpbWFnZS9wbmdcIn0pO24uY2FjaGVDb250cm9sPXIuY2FjaGVDb250cm9sLG4uZXhwaXJlcz1yLmV4cGlyZXMsbi5zcmM9ci5kYXRhLmJ5dGVMZW5ndGg/aS5jcmVhdGVPYmplY3RVUkwoYSk6XCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUJDQVlBQUFBZkZjU0pBQUFBQzBsRVFWUVlWMk5nQUFJQUFBVUFBYXJWeUZFQUFBQUFTVVZPUks1Q1lJST1cIn19KX0sZS5SZXNvdXJjZVR5cGU9QSxlLlJHQkFJbWFnZT11aSxlLmRlZmF1bHQkMj1LYSxlLkltYWdlUG9zaXRpb249UWEsZS5nZXRBcnJheUJ1ZmZlcj1TLGUuZGVmYXVsdCQzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaW8odCkucmVhZEZpZWxkcyhrbyxbXSl9LGUuZGVmYXVsdCQ0PXlyLGUuYXN5bmNBbGw9ZnVuY3Rpb24odCxlLHIpe2lmKCF0Lmxlbmd0aClyZXR1cm4gcihudWxsLFtdKTt2YXIgbj10Lmxlbmd0aCxpPW5ldyBBcnJheSh0Lmxlbmd0aCksYT1udWxsO3QuZm9yRWFjaChmdW5jdGlvbih0LG8pe2UodCxmdW5jdGlvbih0LGUpe3QmJihhPXQpLGlbb109ZSwwPT0tLW4mJnIoYSxpKX0pfSl9LGUuQWxwaGFJbWFnZT1jaSxlLmRlZmF1bHQkNT1JLGUuZW5kc1dpdGg9dixlLmV4dGVuZD1wLGUuc3BoZXJpY2FsVG9DYXJ0ZXNpYW49ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdO3JldHVybiByKz05MCxyKj1NYXRoLlBJLzE4MCxuKj1NYXRoLlBJLzE4MCx7eDplKk1hdGguY29zKHIpKk1hdGguc2luKG4pLHk6ZSpNYXRoLnNpbihyKSpNYXRoLnNpbihuKSx6OmUqTWF0aC5jb3Mobil9fSxlLkV2ZW50ZWQ9TyxlLnZhbGlkYXRlU3R5bGU9bnIsZS52YWxpZGF0ZUxpZ2h0PWlyLGUuZW1pdFZhbGlkYXRpb25FcnJvcnM9c3IsZS5kZWZhdWx0JDY9dHQsZS5udW1iZXI9d3QsZS5Qcm9wZXJ0aWVzPXFyLGUuVHJhbnNpdGlvbmFibGU9SXIsZS5UcmFuc2l0aW9uaW5nPVByLGUuUG9zc2libHlFdmFsdWF0ZWQ9QnIsZS5EYXRhQ29uc3RhbnRQcm9wZXJ0eT1OcixlLndhcm5PbmNlPV8sZS51bmlxdWVJZD1mdW5jdGlvbigpe3JldHVybiBkKyt9LGUuZGVmYXVsdCQ3PVNvLGUucGljaz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl07aSBpbiB0JiYocltpXT10W2ldKX1yZXR1cm4gcn0sZS53cmFwPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yLWUsaT0oKHQtZSklbituKSVuK2U7cmV0dXJuIGk9PT1lP3I6aX0sZS5jbGFtcD1mLGUuRXZlbnQ9TCxlLkVycm9yRXZlbnQ9eixlLk92ZXJzY2FsZWRUaWxlSUQ9em8sZS5kZWZhdWx0JDg9UG4sZS5jcmVhdGVMYXlvdXQ9WHIsZS5nZXRDb29yZGluYXRlc0NlbnRlcj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MS8wLHI9MS8wLG49LTEvMCxpPS0xLzAsYT0wO2E8dC5sZW5ndGg7YSsrKWU9TWF0aC5taW4oZSx0W2FdLmNvbHVtbikscj1NYXRoLm1pbihyLHRbYV0ucm93KSxuPU1hdGgubWF4KG4sdFthXS5jb2x1bW4pLGk9TWF0aC5tYXgoaSx0W2FdLnJvdyk7dmFyIG89bi1lLGw9aS1yLGM9TWF0aC5tYXgobyxsKSx1PU1hdGgubWF4KDAsTWF0aC5mbG9vcigtTWF0aC5sb2coYykvTWF0aC5MTjIpKTtyZXR1cm4gbmV3IHMoKGUrbikvMiwocitpKS8yLDApLnpvb21Ubyh1KX0sZS5DYW5vbmljYWxUaWxlSUQ9Q28sZS5SYXN0ZXJCb3VuZHNBcnJheT1KcixlLmdldFZpZGVvPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXNlbGYuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInZpZGVvXCIpO2kub25sb2Fkc3RhcnQ9ZnVuY3Rpb24oKXtlKG51bGwsaSl9O2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzb3VyY2VcIik7cj10W2FdLG49dm9pZCAwLChuPXNlbGYuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIikpLmhyZWY9ciwobi5wcm90b2NvbCE9PXNlbGYuZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2x8fG4uaG9zdCE9PXNlbGYuZG9jdW1lbnQubG9jYXRpb24uaG9zdCkmJihpLmNyb3NzT3JpZ2luPVwiQW5vbnltb3VzXCIpLG8uc3JjPXRbYV0saS5hcHBlbmRDaGlsZChvKX1yZXR1cm4gaX0sZS5kZWZhdWx0JDk9RCxlLmJpbmRBbGw9ZyxlLmRlZmF1bHQkMTA9ZnVuY3Rpb24gdChlLHIpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2lmKCFBcnJheS5pc0FycmF5KHIpfHxlLmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKCF0KGVbbl0scltuXSkpcmV0dXJuITE7cmV0dXJuITB9aWYoXCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiZudWxsIT09cil7aWYoXCJvYmplY3RcIiE9dHlwZW9mIHIpcmV0dXJuITE7aWYoT2JqZWN0LmtleXMoZSkubGVuZ3RoIT09T2JqZWN0LmtleXMocikubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgaSBpbiBlKWlmKCF0KGVbaV0scltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIGU9PT1yfSxlLnBhcnNlQ2FjaGVDb250cm9sPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2lmKHQucmVwbGFjZSgvKD86XnwoPzpcXHMqXFwsXFxzKikpKFteXFx4MDAtXFx4MjBcXChcXCk8PkBcXCw7XFw6XFxcXFwiXFwvXFxbXFxdXFw/XFw9XFx7XFx9XFx4N0ZdKykoPzpcXD0oPzooW15cXHgwMC1cXHgyMFxcKFxcKTw+QFxcLDtcXDpcXFxcXCJcXC9cXFtcXF1cXD9cXD1cXHtcXH1cXHg3Rl0rKXwoPzpcXFwiKCg/OlteXCJcXFxcXXxcXFxcLikqKVxcXCIpKSk/L2csZnVuY3Rpb24odCxyLG4saSl7dmFyIGE9bnx8aTtyZXR1cm4gZVtyXT0hYXx8YS50b0xvd2VyQ2FzZSgpLFwiXCJ9KSxlW1wibWF4LWFnZVwiXSl7dmFyIHI9cGFyc2VJbnQoZVtcIm1heC1hZ2VcIl0sMTApO2lzTmFOKHIpP2RlbGV0ZSBlW1wibWF4LWFnZVwiXTplW1wibWF4LWFnZVwiXT1yfXJldHVybiBlfSxlLmRlZmF1bHQkMTE9Qm8sZS5kZWZhdWx0JDEyPVJvLGUuZGVmYXVsdCQxMz1SZSxlLmRlZmF1bHQkMTQ9SGEsZS5Db2xsaXNpb25Cb3hBcnJheT12bixlLmRlZmF1bHQkMTU9TW4sZS5UcmlhbmdsZUluZGV4QXJyYXk9aG4sZS5kZWZhdWx0JDE2PUxyLGUuZGVmYXVsdCQxNz1zLGUua2V5c0RpZmZlcmVuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj1bXTtmb3IodmFyIG4gaW4gdCluIGluIGV8fHIucHVzaChuKTtyZXR1cm4gcn0sZS5kZWZhdWx0JDE4PVtcInR5cGVcIixcInNvdXJjZVwiLFwic291cmNlLWxheWVyXCIsXCJtaW56b29tXCIsXCJtYXh6b29tXCIsXCJmaWx0ZXJcIixcImxheW91dFwiXSxlLm1hdDQ9cmksZS52ZWM0PWVpLGUuZ2V0U2l6ZURhdGE9RmEsZS5ldmFsdWF0ZVNpemVGb3JGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lO3JldHVyblwic291cmNlXCI9PT10LmZ1bmN0aW9uVHlwZT9yLmxvd2VyU2l6ZS8xMDpcImNvbXBvc2l0ZVwiPT09dC5mdW5jdGlvblR5cGU/d3Qoci5sb3dlclNpemUvMTAsci51cHBlclNpemUvMTAsbi51U2l6ZVQpOm4udVNpemV9LGUuZXZhbHVhdGVTaXplRm9yWm9vbT1mdW5jdGlvbih0LGUscil7aWYoXCJjb25zdGFudFwiPT09dC5mdW5jdGlvblR5cGUpcmV0dXJue3VTaXplVDowLHVTaXplOnQubGF5b3V0U2l6ZX07aWYoXCJzb3VyY2VcIj09PXQuZnVuY3Rpb25UeXBlKXJldHVybnt1U2l6ZVQ6MCx1U2l6ZTowfTtpZihcImNhbWVyYVwiPT09dC5mdW5jdGlvblR5cGUpe3ZhciBuPXQucHJvcGVydHlWYWx1ZSxpPXQuem9vbVJhbmdlLGE9dC5zaXplUmFuZ2Usbz1mKFNlKG4sci5zcGVjaWZpY2F0aW9uKS5pbnRlcnBvbGF0aW9uRmFjdG9yKGUsaS5taW4saS5tYXgpLDAsMSk7cmV0dXJue3VTaXplVDowLHVTaXplOmEubWluK28qKGEubWF4LWEubWluKX19dmFyIHM9dC5wcm9wZXJ0eVZhbHVlLGw9dC56b29tUmFuZ2U7cmV0dXJue3VTaXplVDpmKFNlKHMsci5zcGVjaWZpY2F0aW9uKS5pbnRlcnBvbGF0aW9uRmFjdG9yKGUsbC5taW4sbC5tYXgpLDAsMSksdVNpemU6MH19LGUuYWRkRHluYW1pY0F0dHJpYnV0ZXM9VmEsZS5kZWZhdWx0JDE5PVlhLGUuV3JpdGluZ01vZGU9am8sZS5tdWx0aVBvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRQb2ludD1qbixlLm11bHRpUG9seWdvbkludGVyc2VjdHNNdWx0aVBvbHlnb249Vm4sZS5tdWx0aVBvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRNdWx0aUxpbmU9VW4sZS5wb2x5Z29uSW50ZXJzZWN0c1BvbHlnb249ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZihabihlLHRbcl0pKXJldHVybiEwO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKFpuKHQsZVtuXSkpcmV0dXJuITA7cmV0dXJuISFIbih0LGUpfSxlLmRpc3RUb1NlZ21lbnRTcXVhcmVkPVduLGUuZGVmYXVsdCQyMD10aSxlLmRlZmF1bHQkMjE9SHIsZS5kZWZhdWx0JDIyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgSmFbdC50eXBlXSh0KX0sZS5jbG9uZT14LGUuZmlsdGVyT2JqZWN0PXksZS5tYXBPYmplY3Q9bSxlLnJlZ2lzdGVyRm9yUGx1Z2luQXZhaWxhYmlsaXR5PWZ1bmN0aW9uKHQpe3JldHVybiBNcj90KHtwbHVnaW5VUkw6TXIsY29tcGxldGlvbkNhbGxiYWNrOkFyfSk6RXIub25jZShcInBsdWdpbkF2YWlsYWJsZVwiLHQpLHR9LGUuZXZlbnRlZD1FcixlLmRlZmF1bHQkMjM9bXIsZS5kZWZhdWx0JDI0PU9uLGUuUG9zQXJyYXk9JHIsZS5VbndyYXBwZWRUaWxlSUQ9TG8sZS5lYXNlPWgsZS5iZXppZXI9dSxlLnNldFJUTFRleHRQbHVnaW49ZnVuY3Rpb24odCxlKXtpZihUcil0aHJvdyBuZXcgRXJyb3IoXCJzZXRSVExUZXh0UGx1Z2luIGNhbm5vdCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuXCIpO1RyPSEwLE1yPXQsQXI9ZnVuY3Rpb24odCl7dD8oVHI9ITEsTXI9bnVsbCxlJiZlKHQpKTpTcj0hMH0sRXIuZmlyZShuZXcgTChcInBsdWdpbkF2YWlsYWJsZVwiLHtwbHVnaW5VUkw6TXIsY29tcGxldGlvbkNhbGxiYWNrOkFyfSkpfSxlLnZhbHVlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2godFtyXSk7cmV0dXJuIGV9LGUuZGVmYXVsdCQyNT1SYSxlLnJlZ2lzdGVyPXByLGUuR0xZUEhfUEJGX0JPUkRFUj1NbyxlLnNoYXBlVGV4dD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdT10LnRyaW0oKTtjPT09am8udmVydGljYWwmJih1PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1cIlwiLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dC5jaGFyQ29kZUF0KHIrMSl8fG51bGwsaT10LmNoYXJDb2RlQXQoci0xKXx8bnVsbDtuJiZ3cihuKSYmIVBhW3RbcisxXV18fGkmJndyKGkpJiYhUGFbdFtyLTFdXXx8IVBhW3Rbcl1dP2UrPXRbcl06ZSs9UGFbdFtyXV19cmV0dXJuIGV9KHUpKTt2YXIgaD1bXSxmPXtwb3NpdGlvbmVkR2x5cGhzOmgsdGV4dDp1LHRvcDpzWzFdLGJvdHRvbTpzWzFdLGxlZnQ6c1swXSxyaWdodDpzWzBdLHdyaXRpbmdNb2RlOmN9LHA9Q3IucHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0O3JldHVybiBmdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCl7Zm9yKHZhciBjPTAsdT0tMTcsaD0wLGY9dC5wb3NpdGlvbmVkR2x5cGhzLHA9XCJyaWdodFwiPT09YT8xOlwibGVmdFwiPT09YT8wOi41LGQ9MCxnPXI7ZDxnLmxlbmd0aDtkKz0xKXt2YXIgdj1nW2RdO2lmKCh2PXYudHJpbSgpKS5sZW5ndGgpe2Zvcih2YXIgbT1mLmxlbmd0aCx5PTA7eTx2Lmxlbmd0aDt5Kyspe3ZhciB4PXYuY2hhckNvZGVBdCh5KSxiPWVbeF07YiYmKF9yKHgpJiZvIT09am8uaG9yaXpvbnRhbD8oZi5wdXNoKHtnbHlwaDp4LHg6Yyx5OjAsdmVydGljYWw6ITB9KSxjKz1sK3MpOihmLnB1c2goe2dseXBoOngseDpjLHk6dSx2ZXJ0aWNhbDohMX0pLGMrPWIubWV0cmljcy5hZHZhbmNlK3MpKX1pZihmLmxlbmd0aCE9PW0pe3ZhciBfPWMtcztoPU1hdGgubWF4KF8saCksWG8oZixlLG0sZi5sZW5ndGgtMSxwKX1jPTAsdSs9bn1lbHNlIHUrPW59dmFyIHc9V28oaSksaz13Lmhvcml6b250YWxBbGlnbixBPXcudmVydGljYWxBbGlnbjshZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPShlLXIpKmksbD0oLW4qbysuNSkqYSxjPTA7Yzx0Lmxlbmd0aDtjKyspdFtjXS54Kz1zLHRbY10ueSs9bH0oZixwLGssQSxoLG4sci5sZW5ndGgpO3ZhciBUPXIubGVuZ3RoKm47dC50b3ArPS1BKlQsdC5ib3R0b209dC50b3ArVCx0LmxlZnQrPS1rKmgsdC5yaWdodD10LmxlZnQraH0oZixlLHA/cCh1LFlvKHUsbyxyLGUpKTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPTAsaT0wLGE9ZTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07ci5wdXNoKHQuc3Vic3RyaW5nKG4sbykpLG49b31yZXR1cm4gbjx0Lmxlbmd0aCYmci5wdXNoKHQuc3Vic3RyaW5nKG4sdC5sZW5ndGgpKSxyfSh1LFlvKHUsbyxyLGUpKSxuLGksYSxjLG8sbCksISFoLmxlbmd0aCYmZn0sZS5zaGFwZUljb249ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVdvKHIpLGk9bi5ob3Jpem9udGFsQWxpZ24sYT1uLnZlcnRpY2FsQWxpZ24sbz1lWzBdLHM9ZVsxXSxsPW8tdC5kaXNwbGF5U2l6ZVswXSppLGM9bCt0LmRpc3BsYXlTaXplWzBdLHU9cy10LmRpc3BsYXlTaXplWzFdKmE7cmV0dXJue2ltYWdlOnQsdG9wOnUsYm90dG9tOnUrdC5kaXNwbGF5U2l6ZVsxXSxsZWZ0OmwscmlnaHQ6Y319LGUuYWxsb3dzVmVydGljYWxXcml0aW5nTW9kZT14cixlLmFsbG93c0xldHRlclNwYWNpbmc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSlpZighYnIocltlXS5jaGFyQ29kZUF0KDApKSlyZXR1cm4hMTtyZXR1cm4hMH0sZS5kZWZhdWx0JDI2PVdpLGUuZGVmYXVsdCQyNz1QbyxlLmRlZmF1bHQkMjg9ZW8sZS5kZWZhdWx0JDI5PWdhLGUuZGVmYXVsdCQzMD1pbyxlLmRlZmF1bHQkMzE9RG8sZS5fX21vZHVsZUV4cG9ydHM9Z2EsZS5kZWZhdWx0JDMyPWwsZS5fX21vZHVsZUV4cG9ydHMkMT1pbyxlLnBsdWdpbj1Dcn0pLGkoMCxmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3ZhciByPXR5cGVvZiB0O2lmKFwibnVtYmVyXCI9PT1yfHxcImJvb2xlYW5cIj09PXJ8fFwic3RyaW5nXCI9PT1yfHxudWxsPT10KXJldHVybiBKU09OLnN0cmluZ2lmeSh0KTtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIG49XCJbXCIsaT0wLGE9dDtpPGEubGVuZ3RoO2krPTEpbis9ZShhW2ldKStcIixcIjtyZXR1cm4gbitcIl1cIn1mb3IodmFyIG89T2JqZWN0LmtleXModCkuc29ydCgpLHM9XCJ7XCIsbD0wO2w8by5sZW5ndGg7bCsrKXMrPUpTT04uc3RyaW5naWZ5KG9bbF0pK1wiOlwiK2UodFtvW2xdXSkrXCIsXCI7cmV0dXJuIHMrXCJ9XCJ9ZnVuY3Rpb24gcihyKXtmb3IodmFyIG49XCJcIixpPTAsYT10LmRlZmF1bHQkMTg7aTxhLmxlbmd0aDtpKz0xKW4rPVwiL1wiK2UoclthW2ldXSk7cmV0dXJuIG59dmFyIG49ZnVuY3Rpb24odCl7dCYmdGhpcy5yZXBsYWNlKHQpfTtmdW5jdGlvbiBpKHQsZSxyLG4saSl7aWYodm9pZCAwPT09ZS5zZWdtZW50KXJldHVybiEwO2Zvcih2YXIgYT1lLG89ZS5zZWdtZW50KzEscz0wO3M+LXIvMjspe2lmKC0tbzwwKXJldHVybiExO3MtPXRbb10uZGlzdChhKSxhPXRbb119cys9dFtvXS5kaXN0KHRbbysxXSksbysrO2Zvcih2YXIgbD1bXSxjPTA7czxyLzI7KXt2YXIgdT10W28tMV0saD10W29dLGY9dFtvKzFdO2lmKCFmKXJldHVybiExO3ZhciBwPXUuYW5nbGVUbyhoKS1oLmFuZ2xlVG8oZik7Zm9yKHA9TWF0aC5hYnMoKHArMypNYXRoLlBJKSUoMipNYXRoLlBJKS1NYXRoLlBJKSxsLnB1c2goe2Rpc3RhbmNlOnMsYW5nbGVEZWx0YTpwfSksYys9cDtzLWxbMF0uZGlzdGFuY2U+bjspYy09bC5zaGlmdCgpLmFuZ2xlRGVsdGE7aWYoYz5pKXJldHVybiExO28rKyxzKz1oLmRpc3QoZil9cmV0dXJuITB9ZnVuY3Rpb24gYShlLHIsbixhLG8scyxsLGMsdSl7dmFyIGg9YT8uNipzKmw6MCxmPU1hdGgubWF4KGE/YS5yaWdodC1hLmxlZnQ6MCxvP28ucmlnaHQtby5sZWZ0OjApLHA9MD09PWVbMF0ueHx8ZVswXS54PT09dXx8MD09PWVbMF0ueXx8ZVswXS55PT09dTtyZXR1cm4gci1mKmw8ci80JiYocj1mKmwrci80KSxmdW5jdGlvbiBlKHIsbixhLG8scyxsLGMsdSxoKXtmb3IodmFyIGY9bC8yLHA9MCxkPTA7ZDxyLmxlbmd0aC0xO2QrKylwKz1yW2RdLmRpc3QocltkKzFdKTtmb3IodmFyIGc9MCx2PW4tYSxtPVtdLHk9MDt5PHIubGVuZ3RoLTE7eSsrKXtmb3IodmFyIHg9clt5XSxiPXJbeSsxXSxfPXguZGlzdChiKSx3PWIuYW5nbGVUbyh4KTt2K2E8ZytfOyl7dmFyIGs9KCh2Kz1hKS1nKS9fLEE9dC5udW1iZXIoeC54LGIueCxrKSxUPXQubnVtYmVyKHgueSxiLnksayk7aWYoQT49MCYmQTxoJiZUPj0wJiZUPGgmJnYtZj49MCYmditmPD1wKXt2YXIgTT1uZXcgdC5kZWZhdWx0JDI1KEEsVCx3LHkpO00uX3JvdW5kKCksbyYmIWkocixNLGwsbyxzKXx8bS5wdXNoKE0pfX1nKz1ffXJldHVybiB1fHxtLmxlbmd0aHx8Y3x8KG09ZShyLGcvMixhLG8scyxsLGMsITAsaCkpLG19KGUscD9yLzIqYyVyOihmLzIrMipzKSpsKmMlcixyLGgsbixmKmwscCwhMSx1KX1uLnByb3RvdHlwZS5yZXBsYWNlPWZ1bmN0aW9uKHQpe3RoaXMuX2xheWVyQ29uZmlncz17fSx0aGlzLl9sYXllcnM9e30sdGhpcy51cGRhdGUodCxbXSl9LG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLG4pe2Zvcih2YXIgaT10aGlzLGE9MCxvPWU7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdO2kuX2xheWVyQ29uZmlnc1tzLmlkXT1zO3ZhciBsPWkuX2xheWVyc1tzLmlkXT10LmRlZmF1bHQkMjIocyk7bC5fZmVhdHVyZUZpbHRlcj10LmRlZmF1bHQkMTMobC5maWx0ZXIpfWZvcih2YXIgYz0wLHU9bjtjPHUubGVuZ3RoO2MrPTEpe3ZhciBoPXVbY107ZGVsZXRlIGkuX2xheWVyQ29uZmlnc1toXSxkZWxldGUgaS5fbGF5ZXJzW2hdfXRoaXMuZmFtaWxpZXNCeVNvdXJjZT17fTtmb3IodmFyIGY9MCxwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT17fSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXIodFtuXSksYT1lW2ldO2F8fChhPWVbaV09W10pLGEucHVzaCh0W25dKX12YXIgbz1bXTtmb3IodmFyIHMgaW4gZSlvLnB1c2goZVtzXSk7cmV0dXJuIG99KHQudmFsdWVzKHRoaXMuX2xheWVyQ29uZmlncykpO2Y8cC5sZW5ndGg7Zis9MSl7dmFyIGQ9cFtmXS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGkuX2xheWVyc1t0LmlkXX0pLGc9ZFswXTtpZihcIm5vbmVcIiE9PWcudmlzaWJpbGl0eSl7dmFyIHY9Zy5zb3VyY2V8fFwiXCIsbT1pLmZhbWlsaWVzQnlTb3VyY2Vbdl07bXx8KG09aS5mYW1pbGllc0J5U291cmNlW3ZdPXt9KTt2YXIgeT1nLnNvdXJjZUxheWVyfHxcIl9nZW9qc29uVGlsZUxheWVyXCIseD1tW3ldO3h8fCh4PW1beV09W10pLHgucHVzaChkKX19fTt2YXIgbz1mdW5jdGlvbigpe3RoaXMub3BhY2l0eT0wLHRoaXMudGFyZ2V0T3BhY2l0eT0wLHRoaXMudGltZT0wfTtvLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBvO3JldHVybiB0Lm9wYWNpdHk9dGhpcy5vcGFjaXR5LHQudGFyZ2V0T3BhY2l0eT10aGlzLnRhcmdldE9wYWNpdHksdC50aW1lPXRoaXMudGltZSx0fSx0LnJlZ2lzdGVyKFwiT3BhY2l0eVN0YXRlXCIsbyk7dmFyIHM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1KXt2YXIgaD1vLnRvcCpzLWwsZj1vLmJvdHRvbSpzK2wscD1vLmxlZnQqcy1sLGQ9by5yaWdodCpzK2w7aWYodGhpcy5ib3hTdGFydEluZGV4PXQubGVuZ3RoLGMpe3ZhciBnPWYtaCx2PWQtcDtnPjAmJihnPU1hdGgubWF4KDEwKnMsZyksdGhpcy5fYWRkTGluZUNvbGxpc2lvbkNpcmNsZXModCxlLHIsci5zZWdtZW50LHYsZyxuLGksYSx1KSl9ZWxzZSB0LmVtcGxhY2VCYWNrKHIueCxyLnkscCxoLGQsZixuLGksYSwwLDApO3RoaXMuYm94RW5kSW5kZXg9dC5sZW5ndGh9O3MucHJvdG90eXBlLl9hZGRMaW5lQ29sbGlzaW9uQ2lyY2xlcz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdT1hLzIsaD1NYXRoLmZsb29yKGkvdSksZj0xKy40Kk1hdGgubG9nKGMpL01hdGguTE4yLHA9TWF0aC5mbG9vcihoKmYvMiksZD0tYS8yLGc9cix2PW4rMSxtPWQseT0taS8yLHg9eS1pLzQ7ZG97aWYoLS12PDApe2lmKG0+eSlyZXR1cm47dj0wO2JyZWFrfW0tPWVbdl0uZGlzdChnKSxnPWVbdl19d2hpbGUobT54KTtmb3IodmFyIGI9ZVt2XS5kaXN0KGVbdisxXSksXz0tcDtfPGgrcDtfKyspe3ZhciB3PV8qdSxrPXkrdztpZih3PDAmJihrKz13KSx3PmkmJihrKz13LWkpLCEoazxtKSl7Zm9yKDttK2I8azspe2lmKG0rPWIsKyt2KzE+PWUubGVuZ3RoKXJldHVybjtiPWVbdl0uZGlzdChlW3YrMV0pfXZhciBBPWstbSxUPWVbdl0sTT1lW3YrMV0uc3ViKFQpLl91bml0KCkuX211bHQoQSkuX2FkZChUKS5fcm91bmQoKSxTPU1hdGguYWJzKGstZCk8dT8wOi44KihrLWQpO3QuZW1wbGFjZUJhY2soTS54LE0ueSwtYS8yLC1hLzIsYS8yLGEvMixvLHMsbCxhLzIsUyl9fX07dmFyIGw9dSxjPXU7ZnVuY3Rpb24gdSh0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHUpKXJldHVybiBuZXcgdSh0LGUpO2lmKHRoaXMuZGF0YT10fHxbXSx0aGlzLmxlbmd0aD10aGlzLmRhdGEubGVuZ3RoLHRoaXMuY29tcGFyZT1lfHxoLHRoaXMubGVuZ3RoPjApZm9yKHZhciByPSh0aGlzLmxlbmd0aD4+MSktMTtyPj0wO3ItLSl0aGlzLl9kb3duKHIpfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9ZnVuY3Rpb24gZihlLHIsbil7dm9pZCAwPT09ciYmKHI9MSksdm9pZCAwPT09biYmKG49ITEpO2Zvcih2YXIgaT0xLzAsYT0xLzAsbz0tMS8wLHM9LTEvMCxjPWVbMF0sdT0wO3U8Yy5sZW5ndGg7dSsrKXt2YXIgaD1jW3VdOyghdXx8aC54PGkpJiYoaT1oLngpLCghdXx8aC55PGEpJiYoYT1oLnkpLCghdXx8aC54Pm8pJiYobz1oLngpLCghdXx8aC55PnMpJiYocz1oLnkpfXZhciBmPW8taSxnPXMtYSx2PU1hdGgubWluKGYsZyksbT12LzIseT1uZXcgbChudWxsLHApO2lmKDA9PT12KXJldHVybiBuZXcgdC5kZWZhdWx0JDEoaSxhKTtmb3IodmFyIHg9aTt4PG87eCs9dilmb3IodmFyIGI9YTtiPHM7Yis9dil5LnB1c2gobmV3IGQoeCttLGIrbSxtLGUpKTtmb3IodmFyIF89ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wLG49MCxpPXRbMF0sYT0wLG89aS5sZW5ndGgscz1vLTE7YTxvO3M9YSsrKXt2YXIgbD1pW2FdLGM9aVtzXSx1PWwueCpjLnktYy54KmwueTtyKz0obC54K2MueCkqdSxuKz0obC55K2MueSkqdSxlKz0zKnV9cmV0dXJuIG5ldyBkKHIvZSxuL2UsMCx0KX0oZSksdz15Lmxlbmd0aDt5Lmxlbmd0aDspe3ZhciBrPXkucG9wKCk7KGsuZD5fLmR8fCFfLmQpJiYoXz1rLG4mJmNvbnNvbGUubG9nKFwiZm91bmQgYmVzdCAlZCBhZnRlciAlZCBwcm9iZXNcIixNYXRoLnJvdW5kKDFlNCprLmQpLzFlNCx3KSksay5tYXgtXy5kPD1yfHwobT1rLmgvMix5LnB1c2gobmV3IGQoay5wLngtbSxrLnAueS1tLG0sZSkpLHkucHVzaChuZXcgZChrLnAueCttLGsucC55LW0sbSxlKSkseS5wdXNoKG5ldyBkKGsucC54LW0say5wLnkrbSxtLGUpKSx5LnB1c2gobmV3IGQoay5wLngrbSxrLnAueSttLG0sZSkpLHcrPTQpfXJldHVybiBuJiYoY29uc29sZS5sb2coXCJudW0gcHJvYmVzOiBcIit3KSxjb25zb2xlLmxvZyhcImJlc3QgZGlzdGFuY2U6IFwiK18uZCkpLF8ucH1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIGUubWF4LXQubWF4fWZ1bmN0aW9uIGQoZSxyLG4saSl7dGhpcy5wPW5ldyB0LmRlZmF1bHQkMShlLHIpLHRoaXMuaD1uLHRoaXMuZD1mdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0hMSxpPTEvMCxhPTA7YTxyLmxlbmd0aDthKyspZm9yKHZhciBvPXJbYV0scz0wLGw9by5sZW5ndGgsYz1sLTE7czxsO2M9cysrKXt2YXIgdT1vW3NdLGg9b1tjXTt1Lnk+ZS55IT1oLnk+ZS55JiZlLng8KGgueC11LngpKihlLnktdS55KS8oaC55LXUueSkrdS54JiYobj0hbiksaT1NYXRoLm1pbihpLHQuZGlzdFRvU2VnbWVudFNxdWFyZWQoZSx1LGgpKX1yZXR1cm4obj8xOi0xKSpNYXRoLnNxcnQoaSl9KHRoaXMucCxpKSx0aGlzLm1heD10aGlzLmQrdGhpcy5oKk1hdGguU1FSVDJ9ZnVuY3Rpb24gZyhlLHIsbixpLGEsbyl7ZS5jcmVhdGVBcnJheXMoKSxlLnN5bWJvbEluc3RhbmNlcz1bXTt2YXIgcz01MTIqZS5vdmVyc2NhbGluZztlLnRpbGVQaXhlbFJhdGlvPXQuZGVmYXVsdCQ4L3MsZS5jb21wYXJlVGV4dD17fSxlLmljb25zTmVlZExpbmVhcj0hMTt2YXIgbD1lLmxheWVyc1swXS5sYXlvdXQsYz1lLmxheWVyc1swXS5fdW5ldmFsdWF0ZWRMYXlvdXQuX3ZhbHVlcyx1PXt9O2lmKFwiY29tcG9zaXRlXCI9PT1lLnRleHRTaXplRGF0YS5mdW5jdGlvblR5cGUpe3ZhciBoPWUudGV4dFNpemVEYXRhLnpvb21SYW5nZSxmPWgubWluLHA9aC5tYXg7dS5jb21wb3NpdGVUZXh0U2l6ZXM9W2NbXCJ0ZXh0LXNpemVcIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgdC5kZWZhdWx0JDE2KGYpKSxjW1widGV4dC1zaXplXCJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHQuZGVmYXVsdCQxNihwKSldfWlmKFwiY29tcG9zaXRlXCI9PT1lLmljb25TaXplRGF0YS5mdW5jdGlvblR5cGUpe3ZhciBkPWUuaWNvblNpemVEYXRhLnpvb21SYW5nZSxnPWQubWluLG09ZC5tYXg7dS5jb21wb3NpdGVJY29uU2l6ZXM9W2NbXCJpY29uLXNpemVcIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgdC5kZWZhdWx0JDE2KGcpKSxjW1wiaWNvbi1zaXplXCJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHQuZGVmYXVsdCQxNihtKSldfXUubGF5b3V0VGV4dFNpemU9Y1tcInRleHQtc2l6ZVwiXS5wb3NzaWJseUV2YWx1YXRlKG5ldyB0LmRlZmF1bHQkMTYoZS56b29tKzEpKSx1LmxheW91dEljb25TaXplPWNbXCJpY29uLXNpemVcIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgdC5kZWZhdWx0JDE2KGUuem9vbSsxKSksdS50ZXh0TWF4U2l6ZT1jW1widGV4dC1zaXplXCJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHQuZGVmYXVsdCQxNigxOCkpO2Zvcih2YXIgeT0yNCpsLmdldChcInRleHQtbGluZS1oZWlnaHRcIikseD1cIm1hcFwiPT09bC5nZXQoXCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudFwiKSYmXCJsaW5lXCI9PT1sLmdldChcInN5bWJvbC1wbGFjZW1lbnRcIiksYj1sLmdldChcInRleHQta2VlcC11cHJpZ2h0XCIpLF89MCx3PWUuZmVhdHVyZXM7Xzx3Lmxlbmd0aDtfKz0xKXt2YXIgaz13W19dLEE9bC5nZXQoXCJ0ZXh0LWZvbnRcIikuZXZhbHVhdGUoaykuam9pbihcIixcIiksVD1yW0FdfHx7fSxNPW5bQV18fHt9LFM9e30sRT1rLnRleHQ7aWYoRSl7dmFyIEM9bC5nZXQoXCJ0ZXh0LW9mZnNldFwiKS5ldmFsdWF0ZShrKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIDI0KnR9KSxMPTI0KmwuZ2V0KFwidGV4dC1sZXR0ZXItc3BhY2luZ1wiKS5ldmFsdWF0ZShrKSx6PXQuYWxsb3dzTGV0dGVyU3BhY2luZyhFKT9MOjAsTz1sLmdldChcInRleHQtYW5jaG9yXCIpLmV2YWx1YXRlKGspLEk9bC5nZXQoXCJ0ZXh0LWp1c3RpZnlcIikuZXZhbHVhdGUoayksRD1cImxpbmVcIiE9PWwuZ2V0KFwic3ltYm9sLXBsYWNlbWVudFwiKT8yNCpsLmdldChcInRleHQtbWF4LXdpZHRoXCIpLmV2YWx1YXRlKGspOjA7Uy5ob3Jpem9udGFsPXQuc2hhcGVUZXh0KEUsVCxELHksTyxJLHosQywyNCx0LldyaXRpbmdNb2RlLmhvcml6b250YWwpLHQuYWxsb3dzVmVydGljYWxXcml0aW5nTW9kZShFKSYmeCYmYiYmKFMudmVydGljYWw9dC5zaGFwZVRleHQoRSxULEQseSxPLEkseixDLDI0LHQuV3JpdGluZ01vZGUudmVydGljYWwpKX12YXIgUD12b2lkIDA7aWYoay5pY29uKXt2YXIgUj1pW2suaWNvbl07UiYmKFA9dC5zaGFwZUljb24oYVtrLmljb25dLGwuZ2V0KFwiaWNvbi1vZmZzZXRcIikuZXZhbHVhdGUoayksbC5nZXQoXCJpY29uLWFuY2hvclwiKS5ldmFsdWF0ZShrKSksdm9pZCAwPT09ZS5zZGZJY29ucz9lLnNkZkljb25zPVIuc2RmOmUuc2RmSWNvbnMhPT1SLnNkZiYmdC53YXJuT25jZShcIlN0eWxlIHNoZWV0IHdhcm5pbmc6IENhbm5vdCBtaXggU0RGIGFuZCBub24tU0RGIGljb25zIGluIG9uZSBidWZmZXJcIiksUi5waXhlbFJhdGlvIT09ZS5waXhlbFJhdGlvP2UuaWNvbnNOZWVkTGluZWFyPSEwOjAhPT1sLmdldChcImljb24tcm90YXRlXCIpLmNvbnN0YW50T3IoMSkmJihlLmljb25zTmVlZExpbmVhcj0hMCkpfShTLmhvcml6b250YWx8fFApJiZ2KGUsayxTLFAsTSx1KX1vJiZlLmdlbmVyYXRlQ29sbGlzaW9uRGVidWdCdWZmZXJzKCl9ZnVuY3Rpb24gdihlLHIsbixpLGwsYyl7dmFyIHU9Yy5sYXlvdXRUZXh0U2l6ZS5ldmFsdWF0ZShyKSxoPWMubGF5b3V0SWNvblNpemUuZXZhbHVhdGUocikscD1jLnRleHRNYXhTaXplLmV2YWx1YXRlKHIpO3ZvaWQgMD09PXAmJihwPXUpO3ZhciBkPWUubGF5ZXJzWzBdLmxheW91dCxnPWQuZ2V0KFwidGV4dC1vZmZzZXRcIikuZXZhbHVhdGUociksdj1kLmdldChcImljb24tb2Zmc2V0XCIpLmV2YWx1YXRlKHIpLHg9dS8yNCxiPWUudGlsZVBpeGVsUmF0aW8qeCxfPWUudGlsZVBpeGVsUmF0aW8qcC8yNCx3PWUudGlsZVBpeGVsUmF0aW8qaCxrPWUudGlsZVBpeGVsUmF0aW8qZC5nZXQoXCJzeW1ib2wtc3BhY2luZ1wiKSxBPWQuZ2V0KFwidGV4dC1wYWRkaW5nXCIpKmUudGlsZVBpeGVsUmF0aW8sVD1kLmdldChcImljb24tcGFkZGluZ1wiKSplLnRpbGVQaXhlbFJhdGlvLE09ZC5nZXQoXCJ0ZXh0LW1heC1hbmdsZVwiKS8xODAqTWF0aC5QSSxTPVwibWFwXCI9PT1kLmdldChcInRleHQtcm90YXRpb24tYWxpZ25tZW50XCIpJiZcImxpbmVcIj09PWQuZ2V0KFwic3ltYm9sLXBsYWNlbWVudFwiKSxFPVwibWFwXCI9PT1kLmdldChcImljb24tcm90YXRpb24tYWxpZ25tZW50XCIpJiZcImxpbmVcIj09PWQuZ2V0KFwic3ltYm9sLXBsYWNlbWVudFwiKSxDPWsvMixMPWZ1bmN0aW9uKGEsdSl7dS54PDB8fHUueD49dC5kZWZhdWx0JDh8fHUueTwwfHx1Lnk+PXQuZGVmYXVsdCQ4fHxlLnN5bWJvbEluc3RhbmNlcy5wdXNoKGZ1bmN0aW9uKGUscixuLGksYSxsLGMsdSxoLGYscCxkLGcsdix5LHgsYixfLHcsayxBKXt2YXIgVCxNLFM9ZS5hZGRUb0xpbmVWZXJ0ZXhBcnJheShyLG4pLEU9MCxDPTAsTD0wLHo9aS5ob3Jpem9udGFsP2kuaG9yaXpvbnRhbC50ZXh0OlwiXCIsTz1bXTtpLmhvcml6b250YWwmJihUPW5ldyBzKGMsbixyLHUsaCxmLGkuaG9yaXpvbnRhbCxwLGQsZyxlLm92ZXJzY2FsaW5nKSxDKz1tKGUscixpLmhvcml6b250YWwsbCxnLHcsdixTLGkudmVydGljYWw/dC5Xcml0aW5nTW9kZS5ob3Jpem9udGFsOnQuV3JpdGluZ01vZGUuaG9yaXpvbnRhbE9ubHksTyxrLEEpLGkudmVydGljYWwmJihMKz1tKGUscixpLnZlcnRpY2FsLGwsZyx3LHYsUyx0LldyaXRpbmdNb2RlLnZlcnRpY2FsLE8sayxBKSkpO3ZhciBJPVQ/VC5ib3hTdGFydEluZGV4OmUuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoLEQ9VD9ULmJveEVuZEluZGV4OmUuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoO2lmKGEpe3ZhciBQPWZ1bmN0aW9uKGUscixuLGksYSxvKXt2YXIgcyxsLGMsdSxoPXIuaW1hZ2UsZj1uLmxheW91dCxwPXIudG9wLTEvaC5waXhlbFJhdGlvLGQ9ci5sZWZ0LTEvaC5waXhlbFJhdGlvLGc9ci5ib3R0b20rMS9oLnBpeGVsUmF0aW8sdj1yLnJpZ2h0KzEvaC5waXhlbFJhdGlvO2lmKFwibm9uZVwiIT09Zi5nZXQoXCJpY29uLXRleHQtZml0XCIpJiZhKXt2YXIgbT12LWQseT1nLXAseD1mLmdldChcInRleHQtc2l6ZVwiKS5ldmFsdWF0ZShvKS8yNCxiPWEubGVmdCp4LF89YS5yaWdodCp4LHc9YS50b3AqeCxrPV8tYixBPWEuYm90dG9tKngtdyxUPWYuZ2V0KFwiaWNvbi10ZXh0LWZpdC1wYWRkaW5nXCIpWzBdLE09Zi5nZXQoXCJpY29uLXRleHQtZml0LXBhZGRpbmdcIilbMV0sUz1mLmdldChcImljb24tdGV4dC1maXQtcGFkZGluZ1wiKVsyXSxFPWYuZ2V0KFwiaWNvbi10ZXh0LWZpdC1wYWRkaW5nXCIpWzNdLEM9XCJ3aWR0aFwiPT09Zi5nZXQoXCJpY29uLXRleHQtZml0XCIpPy41KihBLXkpOjAsTD1cImhlaWdodFwiPT09Zi5nZXQoXCJpY29uLXRleHQtZml0XCIpPy41KihrLW0pOjAsej1cIndpZHRoXCI9PT1mLmdldChcImljb24tdGV4dC1maXRcIil8fFwiYm90aFwiPT09Zi5nZXQoXCJpY29uLXRleHQtZml0XCIpP2s6bSxPPVwiaGVpZ2h0XCI9PT1mLmdldChcImljb24tdGV4dC1maXRcIil8fFwiYm90aFwiPT09Zi5nZXQoXCJpY29uLXRleHQtZml0XCIpP0E6eTtzPW5ldyB0LmRlZmF1bHQkMShiK0wtRSx3K0MtVCksbD1uZXcgdC5kZWZhdWx0JDEoYitMK00reix3K0MtVCksYz1uZXcgdC5kZWZhdWx0JDEoYitMK00reix3K0MrUytPKSx1PW5ldyB0LmRlZmF1bHQkMShiK0wtRSx3K0MrUytPKX1lbHNlIHM9bmV3IHQuZGVmYXVsdCQxKGQscCksbD1uZXcgdC5kZWZhdWx0JDEodixwKSxjPW5ldyB0LmRlZmF1bHQkMSh2LGcpLHU9bmV3IHQuZGVmYXVsdCQxKGQsZyk7dmFyIEk9bi5sYXlvdXQuZ2V0KFwiaWNvbi1yb3RhdGVcIikuZXZhbHVhdGUobykqTWF0aC5QSS8xODA7aWYoSSl7dmFyIEQ9TWF0aC5zaW4oSSksUD1NYXRoLmNvcyhJKSxSPVtQLC1ELEQsUF07cy5fbWF0TXVsdChSKSxsLl9tYXRNdWx0KFIpLHUuX21hdE11bHQoUiksYy5fbWF0TXVsdChSKX1yZXR1cm5be3RsOnMsdHI6bCxibDp1LGJyOmMsdGV4OmgucGFkZGVkUmVjdCx3cml0aW5nTW9kZTp2b2lkIDAsZ2x5cGhPZmZzZXQ6WzAsMF19XX0oMCxhLGwsMCxpLmhvcml6b250YWwsdyk7TT1uZXcgcyhjLG4scix1LGgsZixhLHkseCwhMSxlLm92ZXJzY2FsaW5nKSxFPTQqUC5sZW5ndGg7dmFyIFI9ZS5pY29uU2l6ZURhdGEsRj1udWxsO1wic291cmNlXCI9PT1SLmZ1bmN0aW9uVHlwZT9GPVsxMCpsLmxheW91dC5nZXQoXCJpY29uLXNpemVcIikuZXZhbHVhdGUodyldOlwiY29tcG9zaXRlXCI9PT1SLmZ1bmN0aW9uVHlwZSYmKEY9WzEwKkEuY29tcG9zaXRlSWNvblNpemVzWzBdLmV2YWx1YXRlKHcpLDEwKkEuY29tcG9zaXRlSWNvblNpemVzWzFdLmV2YWx1YXRlKHcpXSksZS5hZGRTeW1ib2xzKGUuaWNvbixQLEYsXyxiLHcsITEscixTLmxpbmVTdGFydEluZGV4LFMubGluZUxlbmd0aCl9dmFyIEI9TT9NLmJveFN0YXJ0SW5kZXg6ZS5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGgsTj1NP00uYm94RW5kSW5kZXg6ZS5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7cmV0dXJuIGUuZ2x5cGhPZmZzZXRBcnJheS5sZW5ndGg+PXQuZGVmYXVsdCQxNC5NQVhfR0xZUEhTJiZ0Lndhcm5PbmNlKFwiVG9vIG1hbnkgZ2x5cGhzIGJlaW5nIHJlbmRlcmVkIGluIGEgdGlsZS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy8yOTA3XCIpLHtrZXk6eix0ZXh0Qm94U3RhcnRJbmRleDpJLHRleHRCb3hFbmRJbmRleDpELGljb25Cb3hTdGFydEluZGV4OkIsaWNvbkJveEVuZEluZGV4Ok4sdGV4dE9mZnNldDp2LGljb25PZmZzZXQ6XyxhbmNob3I6cixsaW5lOm4sZmVhdHVyZUluZGV4OnUsZmVhdHVyZTp3LG51bUdseXBoVmVydGljZXM6QyxudW1WZXJ0aWNhbEdseXBoVmVydGljZXM6TCxudW1JY29uVmVydGljZXM6RSx0ZXh0T3BhY2l0eVN0YXRlOm5ldyBvLGljb25PcGFjaXR5U3RhdGU6bmV3IG8saXNEdXBsaWNhdGU6ITEscGxhY2VkVGV4dFN5bWJvbEluZGljZXM6Tyxjcm9zc1RpbGVJRDowfX0oZSx1LGEsbixpLGUubGF5ZXJzWzBdLGUuY29sbGlzaW9uQm94QXJyYXksci5pbmRleCxyLnNvdXJjZUxheWVySW5kZXgsZS5pbmRleCxiLEEsUyxnLHcsVCxFLHYscixsLGMpKX07aWYoXCJsaW5lXCI9PT1kLmdldChcInN5bWJvbC1wbGFjZW1lbnRcIikpZm9yKHZhciB6PTAsTz1mdW5jdGlvbihlLHIsbixpLGEpe2Zvcih2YXIgbz1bXSxzPTA7czxlLmxlbmd0aDtzKyspZm9yKHZhciBsPWVbc10sYz12b2lkIDAsdT0wO3U8bC5sZW5ndGgtMTt1Kyspe3ZhciBoPWxbdV0sZj1sW3UrMV07aC54PDAmJmYueDwwfHwoaC54PDA/aD1uZXcgdC5kZWZhdWx0JDEoMCxoLnkrKGYueS1oLnkpKigoMC1oLngpLyhmLngtaC54KSkpLl9yb3VuZCgpOmYueDwwJiYoZj1uZXcgdC5kZWZhdWx0JDEoMCxoLnkrKGYueS1oLnkpKigoMC1oLngpLyhmLngtaC54KSkpLl9yb3VuZCgpKSxoLnk8MCYmZi55PDB8fChoLnk8MD9oPW5ldyB0LmRlZmF1bHQkMShoLngrKGYueC1oLngpKigoMC1oLnkpLyhmLnktaC55KSksMCkuX3JvdW5kKCk6Zi55PDAmJihmPW5ldyB0LmRlZmF1bHQkMShoLngrKGYueC1oLngpKigoMC1oLnkpLyhmLnktaC55KSksMCkuX3JvdW5kKCkpLGgueD49aSYmZi54Pj1pfHwoaC54Pj1pP2g9bmV3IHQuZGVmYXVsdCQxKGksaC55KyhmLnktaC55KSooKGktaC54KS8oZi54LWgueCkpKS5fcm91bmQoKTpmLng+PWkmJihmPW5ldyB0LmRlZmF1bHQkMShpLGgueSsoZi55LWgueSkqKChpLWgueCkvKGYueC1oLngpKSkuX3JvdW5kKCkpLGgueT49YSYmZi55Pj1hfHwoaC55Pj1hP2g9bmV3IHQuZGVmYXVsdCQxKGgueCsoZi54LWgueCkqKChhLWgueSkvKGYueS1oLnkpKSxhKS5fcm91bmQoKTpmLnk+PWEmJihmPW5ldyB0LmRlZmF1bHQkMShoLngrKGYueC1oLngpKigoYS1oLnkpLyhmLnktaC55KSksYSkuX3JvdW5kKCkpLGMmJmguZXF1YWxzKGNbYy5sZW5ndGgtMV0pfHwoYz1baF0sby5wdXNoKGMpKSxjLnB1c2goZikpKSkpfXJldHVybiBvfShyLmdlb21ldHJ5LDAsMCx0LmRlZmF1bHQkOCx0LmRlZmF1bHQkOCk7ejxPLmxlbmd0aDt6Kz0xKWZvcih2YXIgST1PW3pdLEQ9MCxQPWEoSSxrLE0sbi52ZXJ0aWNhbHx8bi5ob3Jpem9udGFsLGksMjQsXyxlLm92ZXJzY2FsaW5nLHQuZGVmYXVsdCQ4KTtEPFAubGVuZ3RoO0QrPTEpe3ZhciBSPVBbRF0sRj1uLmhvcml6b250YWw7RiYmeShlLEYudGV4dCxDLFIpfHxMKEksUil9ZWxzZSBpZihcIlBvbHlnb25cIj09PXIudHlwZSlmb3IodmFyIEI9MCxOPXQuZGVmYXVsdCQyNihyLmdlb21ldHJ5LDApO0I8Ti5sZW5ndGg7Qis9MSl7dmFyIGo9TltCXSxWPWYoaiwxNik7TChqWzBdLG5ldyB0LmRlZmF1bHQkMjUoVi54LFYueSwwKSl9ZWxzZSBpZihcIkxpbmVTdHJpbmdcIj09PXIudHlwZSlmb3IodmFyIFU9MCxxPXIuZ2VvbWV0cnk7VTxxLmxlbmd0aDtVKz0xKXt2YXIgSD1xW1VdO0woSCxuZXcgdC5kZWZhdWx0JDI1KEhbMF0ueCxIWzBdLnksMCkpfWVsc2UgaWYoXCJQb2ludFwiPT09ci50eXBlKWZvcih2YXIgRz0wLFk9ci5nZW9tZXRyeTtHPFkubGVuZ3RoO0crPTEpZm9yKHZhciBXPTAsWD1ZW0ddO1c8WC5sZW5ndGg7Vys9MSl7dmFyIFo9WFtXXTtMKFtaXSxuZXcgdC5kZWZhdWx0JDI1KFoueCxaLnksMCkpfX1mdW5jdGlvbiBtKGUscixuLGksYSxvLHMsbCxjLHUsaCxmKXt2YXIgcD1mdW5jdGlvbihlLHIsbixpLGEsbyl7Zm9yKHZhciBzPW4ubGF5b3V0LmdldChcInRleHQtcm90YXRlXCIpLmV2YWx1YXRlKGEpKk1hdGguUEkvMTgwLGw9bi5sYXlvdXQuZ2V0KFwidGV4dC1vZmZzZXRcIikuZXZhbHVhdGUoYSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiAyNCp0fSksYz1yLnBvc2l0aW9uZWRHbHlwaHMsdT1bXSxoPTA7aDxjLmxlbmd0aDtoKyspe3ZhciBmPWNbaF0scD1vW2YuZ2x5cGhdO2lmKHApe3ZhciBkPXAucmVjdDtpZihkKXt2YXIgZz10LkdMWVBIX1BCRl9CT1JERVIrMSx2PXAubWV0cmljcy5hZHZhbmNlLzIsbT1pP1tmLngrdixmLnldOlswLDBdLHk9aT9bMCwwXTpbZi54K3YrbFswXSxmLnkrbFsxXV0seD1wLm1ldHJpY3MubGVmdC1nLXYreVswXSxiPS1wLm1ldHJpY3MudG9wLWcreVsxXSxfPXgrZC53LHc9YitkLmgsaz1uZXcgdC5kZWZhdWx0JDEoeCxiKSxBPW5ldyB0LmRlZmF1bHQkMShfLGIpLFQ9bmV3IHQuZGVmYXVsdCQxKHgsdyksTT1uZXcgdC5kZWZhdWx0JDEoXyx3KTtpZihpJiZmLnZlcnRpY2FsKXt2YXIgUz1uZXcgdC5kZWZhdWx0JDEoLXYsdiksRT0tTWF0aC5QSS8yLEM9bmV3IHQuZGVmYXVsdCQxKDUsMCk7ay5fcm90YXRlQXJvdW5kKEUsUykuX2FkZChDKSxBLl9yb3RhdGVBcm91bmQoRSxTKS5fYWRkKEMpLFQuX3JvdGF0ZUFyb3VuZChFLFMpLl9hZGQoQyksTS5fcm90YXRlQXJvdW5kKEUsUykuX2FkZChDKX1pZihzKXt2YXIgTD1NYXRoLnNpbihzKSx6PU1hdGguY29zKHMpLE89W3osLUwsTCx6XTtrLl9tYXRNdWx0KE8pLEEuX21hdE11bHQoTyksVC5fbWF0TXVsdChPKSxNLl9tYXRNdWx0KE8pfXUucHVzaCh7dGw6ayx0cjpBLGJsOlQsYnI6TSx0ZXg6ZCx3cml0aW5nTW9kZTpyLndyaXRpbmdNb2RlLGdseXBoT2Zmc2V0Om19KX19fXJldHVybiB1fSgwLG4saSxhLG8saCksZD1lLnRleHRTaXplRGF0YSxnPW51bGw7cmV0dXJuXCJzb3VyY2VcIj09PWQuZnVuY3Rpb25UeXBlP2c9WzEwKmkubGF5b3V0LmdldChcInRleHQtc2l6ZVwiKS5ldmFsdWF0ZShvKV06XCJjb21wb3NpdGVcIj09PWQuZnVuY3Rpb25UeXBlJiYoZz1bMTAqZi5jb21wb3NpdGVUZXh0U2l6ZXNbMF0uZXZhbHVhdGUobyksMTAqZi5jb21wb3NpdGVUZXh0U2l6ZXNbMV0uZXZhbHVhdGUobyldKSxlLmFkZFN5bWJvbHMoZS50ZXh0LHAsZyxzLGEsbyxjLHIsbC5saW5lU3RhcnRJbmRleCxsLmxpbmVMZW5ndGgpLHUucHVzaChlLnRleHQucGxhY2VkU3ltYm9sQXJyYXkubGVuZ3RoLTEpLDQqcC5sZW5ndGh9ZnVuY3Rpb24geSh0LGUscixuKXt2YXIgaT10LmNvbXBhcmVUZXh0O2lmKGUgaW4gaSl7Zm9yKHZhciBhPWlbZV0sbz1hLmxlbmd0aC0xO28+PTA7by0tKWlmKG4uZGlzdChhW29dKTxyKXJldHVybiEwfWVsc2UgaVtlXT1bXTtyZXR1cm4gaVtlXS5wdXNoKG4pLCExfXUucHJvdG90eXBlPXtwdXNoOmZ1bmN0aW9uKHQpe3RoaXMuZGF0YS5wdXNoKHQpLHRoaXMubGVuZ3RoKyssdGhpcy5fdXAodGhpcy5sZW5ndGgtMSl9LHBvcDpmdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIHQ9dGhpcy5kYXRhWzBdO3JldHVybiB0aGlzLmxlbmd0aC0tLHRoaXMubGVuZ3RoPjAmJih0aGlzLmRhdGFbMF09dGhpcy5kYXRhW3RoaXMubGVuZ3RoXSx0aGlzLl9kb3duKDApKSx0aGlzLmRhdGEucG9wKCksdH19LHBlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhWzBdfSxfdXA6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuZGF0YSxyPXRoaXMuY29tcGFyZSxuPWVbdF07dD4wOyl7dmFyIGk9dC0xPj4xLGE9ZVtpXTtpZihyKG4sYSk+PTApYnJlYWs7ZVt0XT1hLHQ9aX1lW3RdPW59LF9kb3duOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmRhdGEscj10aGlzLmNvbXBhcmUsbj10aGlzLmxlbmd0aD4+MSxpPWVbdF07dDxuOyl7dmFyIGE9MSsodDw8MSksbz1hKzEscz1lW2FdO2lmKG88dGhpcy5sZW5ndGgmJnIoZVtvXSxzKTwwJiYoYT1vLHM9ZVtvXSkscihzLGkpPj0wKWJyZWFrO2VbdF09cyx0PWF9ZVt0XT1pfX0sbC5kZWZhdWx0PWM7dmFyIHg9ZnVuY3Rpb24oZSl7dmFyIHI9bmV3IHQuQWxwaGFJbWFnZSh7d2lkdGg6MCxoZWlnaHQ6MH0pLG49e30saT1uZXcgdC5kZWZhdWx0JDIoMCwwLHthdXRvUmVzaXplOiEwfSk7Zm9yKHZhciBhIGluIGUpe3ZhciBvPWVbYV0scz1uW2FdPXt9O2Zvcih2YXIgbCBpbiBvKXt2YXIgYz1vWytsXTtpZihjJiYwIT09Yy5iaXRtYXAud2lkdGgmJjAhPT1jLmJpdG1hcC5oZWlnaHQpe3ZhciB1PWkucGFja09uZShjLmJpdG1hcC53aWR0aCsyLGMuYml0bWFwLmhlaWdodCsyKTtyLnJlc2l6ZSh7d2lkdGg6aS53LGhlaWdodDppLmh9KSx0LkFscGhhSW1hZ2UuY29weShjLmJpdG1hcCxyLHt4OjAseTowfSx7eDp1LngrMSx5OnUueSsxfSxjLmJpdG1hcCksc1tsXT17cmVjdDp1LG1ldHJpY3M6Yy5tZXRyaWNzfX19fWkuc2hyaW5rKCksci5yZXNpemUoe3dpZHRoOmkudyxoZWlnaHQ6aS5ofSksdGhpcy5pbWFnZT1yLHRoaXMucG9zaXRpb25zPW59O3QucmVnaXN0ZXIoXCJHbHlwaEF0bGFzXCIseCk7dmFyIGI9ZnVuY3Rpb24oZSl7dGhpcy50aWxlSUQ9bmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLnRpbGVJRC5vdmVyc2NhbGVkWixlLnRpbGVJRC53cmFwLGUudGlsZUlELmNhbm9uaWNhbC56LGUudGlsZUlELmNhbm9uaWNhbC54LGUudGlsZUlELmNhbm9uaWNhbC55KSx0aGlzLnVpZD1lLnVpZCx0aGlzLnpvb209ZS56b29tLHRoaXMucGl4ZWxSYXRpbz1lLnBpeGVsUmF0aW8sdGhpcy50aWxlU2l6ZT1lLnRpbGVTaXplLHRoaXMuc291cmNlPWUuc291cmNlLHRoaXMub3ZlcnNjYWxpbmc9dGhpcy50aWxlSUQub3ZlcnNjYWxlRmFjdG9yKCksdGhpcy5zaG93Q29sbGlzaW9uQm94ZXM9ZS5zaG93Q29sbGlzaW9uQm94ZXMsdGhpcy5jb2xsZWN0UmVzb3VyY2VUaW1pbmc9ISFlLmNvbGxlY3RSZXNvdXJjZVRpbWluZ307ZnVuY3Rpb24gXyhlLHIpe2Zvcih2YXIgbj1uZXcgdC5kZWZhdWx0JDE2KHIpLGk9MCxhPWU7aTxhLmxlbmd0aDtpKz0xKWFbaV0ucmVjYWxjdWxhdGUobil9Yi5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9dGhpczt0aGlzLnN0YXR1cz1cInBhcnNpbmdcIix0aGlzLmRhdGE9ZSx0aGlzLmNvbGxpc2lvbkJveEFycmF5PW5ldyB0LkNvbGxpc2lvbkJveEFycmF5O3ZhciBvPW5ldyB0LmRlZmF1bHQkMjcoT2JqZWN0LmtleXMoZS5sYXllcnMpLnNvcnQoKSkscz1uZXcgdC5kZWZhdWx0JDExKHRoaXMudGlsZUlEKTtzLmJ1Y2tldExheWVySURzPVtdO3ZhciBsLGMsdSxoPXt9LGY9e2ZlYXR1cmVJbmRleDpzLGljb25EZXBlbmRlbmNpZXM6e30sZ2x5cGhEZXBlbmRlbmNpZXM6e319LHA9ci5mYW1pbGllc0J5U291cmNlW3RoaXMuc291cmNlXTtmb3IodmFyIGQgaW4gcCl7dmFyIHY9ZS5sYXllcnNbZF07aWYodil7MT09PXYudmVyc2lvbiYmdC53YXJuT25jZSgnVmVjdG9yIHRpbGUgc291cmNlIFwiJythLnNvdXJjZSsnXCIgbGF5ZXIgXCInK2QrJ1wiIGRvZXMgbm90IHVzZSB2ZWN0b3IgdGlsZSBzcGVjIHYyIGFuZCB0aGVyZWZvcmUgbWF5IGhhdmUgc29tZSByZW5kZXJpbmcgZXJyb3JzLicpO2Zvcih2YXIgbT1vLmVuY29kZShkKSx5PVtdLGI9MDtiPHYubGVuZ3RoO2IrKyl7dmFyIHc9di5mZWF0dXJlKGIpO3kucHVzaCh7ZmVhdHVyZTp3LGluZGV4OmIsc291cmNlTGF5ZXJJbmRleDptfSl9Zm9yKHZhciBrPTAsQT1wW2RdO2s8QS5sZW5ndGg7ays9MSl7dmFyIFQ9QVtrXSxNPVRbMF07TS5taW56b29tJiZhLnpvb208TWF0aC5mbG9vcihNLm1pbnpvb20pfHxNLm1heHpvb20mJmEuem9vbT49TS5tYXh6b29tfHxcIm5vbmVcIiE9PU0udmlzaWJpbGl0eSYmKF8oVCxhLnpvb20pLChoW00uaWRdPU0uY3JlYXRlQnVja2V0KHtpbmRleDpzLmJ1Y2tldExheWVySURzLmxlbmd0aCxsYXllcnM6VCx6b29tOmEuem9vbSxwaXhlbFJhdGlvOmEucGl4ZWxSYXRpbyxvdmVyc2NhbGluZzphLm92ZXJzY2FsaW5nLGNvbGxpc2lvbkJveEFycmF5OmEuY29sbGlzaW9uQm94QXJyYXksc291cmNlTGF5ZXJJbmRleDptfSkpLnBvcHVsYXRlKHksZikscy5idWNrZXRMYXllcklEcy5wdXNoKFQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpKX19fXZhciBTPXQubWFwT2JqZWN0KGYuZ2x5cGhEZXBlbmRlbmNpZXMsZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcChOdW1iZXIpfSk7T2JqZWN0LmtleXMoUykubGVuZ3RoP24uc2VuZChcImdldEdseXBoc1wiLHt1aWQ6dGhpcy51aWQsc3RhY2tzOlN9LGZ1bmN0aW9uKHQsZSl7bHx8KGw9dCxjPWUsQy5jYWxsKGEpKX0pOmM9e307dmFyIEU9T2JqZWN0LmtleXMoZi5pY29uRGVwZW5kZW5jaWVzKTtmdW5jdGlvbiBDKCl7aWYobClyZXR1cm4gaShsKTtpZihjJiZ1KXt2YXIgZT1uZXcgeChjKSxyPW5ldyB0LmRlZmF1bHQkMjgodSk7Zm9yKHZhciBuIGluIGgpe3ZhciBhPWhbbl07YSBpbnN0YW5jZW9mIHQuZGVmYXVsdCQxNCYmKF8oYS5sYXllcnMsdGhpcy56b29tKSxnKGEsYyxlLnBvc2l0aW9ucyx1LHIucG9zaXRpb25zLHRoaXMuc2hvd0NvbGxpc2lvbkJveGVzKSl9dGhpcy5zdGF0dXM9XCJkb25lXCIsaShudWxsLHtidWNrZXRzOnQudmFsdWVzKGgpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hdC5pc0VtcHR5KCl9KSxmZWF0dXJlSW5kZXg6cyxjb2xsaXNpb25Cb3hBcnJheTp0aGlzLmNvbGxpc2lvbkJveEFycmF5LGdseXBoQXRsYXNJbWFnZTplLmltYWdlLGljb25BdGxhc0ltYWdlOnIuaW1hZ2V9KX19RS5sZW5ndGg/bi5zZW5kKFwiZ2V0SW1hZ2VzXCIse2ljb25zOkV9LGZ1bmN0aW9uKHQsZSl7bHx8KGw9dCx1PWUsQy5jYWxsKGEpKX0pOnU9e30sQy5jYWxsKHRoaXMpfTt2YXIgdz1mdW5jdGlvbih0KXtyZXR1cm4hKCFwZXJmb3JtYW5jZXx8IXBlcmZvcm1hbmNlLmdldEVudHJpZXNCeU5hbWUpJiZwZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlOYW1lKHQpfTtmdW5jdGlvbiBrKGUscil7dmFyIG49dC5nZXRBcnJheUJ1ZmZlcihlLnJlcXVlc3QsZnVuY3Rpb24oZSxuKXtlP3IoZSk6biYmcihudWxsLHt2ZWN0b3JUaWxlOm5ldyB0LmRlZmF1bHQkMjkuVmVjdG9yVGlsZShuZXcgdC5kZWZhdWx0JDMwKG4uZGF0YSkpLHJhd0RhdGE6bi5kYXRhLGNhY2hlQ29udHJvbDpuLmNhY2hlQ29udHJvbCxleHBpcmVzOm4uZXhwaXJlc30pfSk7cmV0dXJuIGZ1bmN0aW9uKCl7bi5hYm9ydCgpLHIoKX19dmFyIEE9ZnVuY3Rpb24odCxlLHIpe3RoaXMuYWN0b3I9dCx0aGlzLmxheWVySW5kZXg9ZSx0aGlzLmxvYWRWZWN0b3JEYXRhPXJ8fGssdGhpcy5sb2FkaW5nPXt9LHRoaXMubG9hZGVkPXt9fTtBLnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMsaT1lLnVpZDt0aGlzLmxvYWRpbmd8fCh0aGlzLmxvYWRpbmc9e30pO3ZhciBhPXRoaXMubG9hZGluZ1tpXT1uZXcgYihlKTthLmFib3J0PXRoaXMubG9hZFZlY3RvckRhdGEoZSxmdW5jdGlvbihvLHMpe2lmKGRlbGV0ZSBuLmxvYWRpbmdbaV0sb3x8IXMpcmV0dXJuIHIobyk7dmFyIGw9cy5yYXdEYXRhLGM9e307cy5leHBpcmVzJiYoYy5leHBpcmVzPXMuZXhwaXJlcykscy5jYWNoZUNvbnRyb2wmJihjLmNhY2hlQ29udHJvbD1zLmNhY2hlQ29udHJvbCk7dmFyIHU9e307aWYoZS5yZXF1ZXN0JiZlLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nKXt2YXIgaD13KGUucmVxdWVzdC51cmwpO2gmJih1LnJlc291cmNlVGltaW5nPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaCkpKX1hLnZlY3RvclRpbGU9cy52ZWN0b3JUaWxlLGEucGFyc2Uocy52ZWN0b3JUaWxlLG4ubGF5ZXJJbmRleCxuLmFjdG9yLGZ1bmN0aW9uKGUsbil7aWYoZXx8IW4pcmV0dXJuIHIoZSk7cihudWxsLHQuZXh0ZW5kKHtyYXdUaWxlRGF0YTpsLnNsaWNlKDApfSxuLGMsdSkpfSksbi5sb2FkZWQ9bi5sb2FkZWR8fHt9LG4ubG9hZGVkW2ldPWF9KX0sQS5wcm90b3R5cGUucmVsb2FkVGlsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubG9hZGVkLG49dC51aWQsaT10aGlzO2lmKHImJnJbbl0pe3ZhciBhPXJbbl07YS5zaG93Q29sbGlzaW9uQm94ZXM9dC5zaG93Q29sbGlzaW9uQm94ZXM7dmFyIG89ZnVuY3Rpb24odCxyKXt2YXIgbj1hLnJlbG9hZENhbGxiYWNrO24mJihkZWxldGUgYS5yZWxvYWRDYWxsYmFjayxhLnBhcnNlKGEudmVjdG9yVGlsZSxpLmxheWVySW5kZXgsaS5hY3RvcixuKSksZSh0LHIpfTtcInBhcnNpbmdcIj09PWEuc3RhdHVzP2EucmVsb2FkQ2FsbGJhY2s9bzpcImRvbmVcIj09PWEuc3RhdHVzJiZhLnBhcnNlKGEudmVjdG9yVGlsZSx0aGlzLmxheWVySW5kZXgsdGhpcy5hY3RvcixvKX19LEEucHJvdG90eXBlLmFib3J0VGlsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubG9hZGluZyxuPXQudWlkO3ImJnJbbl0mJnJbbl0uYWJvcnQmJihyW25dLmFib3J0KCksZGVsZXRlIHJbbl0pLGUoKX0sQS5wcm90b3R5cGUucmVtb3ZlVGlsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubG9hZGVkLG49dC51aWQ7ciYmcltuXSYmZGVsZXRlIHJbbl0sZSgpfTt2YXIgVD1mdW5jdGlvbigpe3RoaXMubG9hZGluZz17fSx0aGlzLmxvYWRlZD17fX07VC5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj1lLnVpZCxpPWUuZW5jb2RpbmcsYT1uZXcgdC5kZWZhdWx0JDMxKG4pO3RoaXMubG9hZGluZ1tuXT1hLGEubG9hZEZyb21JbWFnZShlLnJhd0ltYWdlRGF0YSxpKSxkZWxldGUgdGhpcy5sb2FkaW5nW25dLHRoaXMubG9hZGVkPXRoaXMubG9hZGVkfHx7fSx0aGlzLmxvYWRlZFtuXT1hLHIobnVsbCxhKX0sVC5wcm90b3R5cGUucmVtb3ZlVGlsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxvYWRlZCxyPXQudWlkO2UmJmVbcl0mJmRlbGV0ZSBlW3JdfTt2YXIgTT17UkFESVVTOjYzNzgxMzcsRkxBVFRFTklORzoxLzI5OC4yNTcyMjM1NjMsUE9MQVJfUkFESVVTOjYzNTY3NTIuMzE0Mn07ZnVuY3Rpb24gUyh0KXt2YXIgZT0wO2lmKHQmJnQubGVuZ3RoPjApe2UrPU1hdGguYWJzKEUodFswXSkpO2Zvcih2YXIgcj0xO3I8dC5sZW5ndGg7cisrKWUtPU1hdGguYWJzKEUodFtyXSkpfXJldHVybiBlfWZ1bmN0aW9uIEUodCl7dmFyIGUscixuLGksYSxvLHM9MCxsPXQubGVuZ3RoO2lmKGw+Mil7Zm9yKG89MDtvPGw7bysrKW89PT1sLTI/KG49bC0yLGk9bC0xLGE9MCk6bz09PWwtMT8obj1sLTEsaT0wLGE9MSk6KG49byxpPW8rMSxhPW8rMiksZT10W25dLHI9dFtpXSxzKz0oQyh0W2FdWzBdKS1DKGVbMF0pKSpNYXRoLnNpbihDKHJbMV0pKTtzPXMqTS5SQURJVVMqTS5SQURJVVMvMn1yZXR1cm4gc31mdW5jdGlvbiBDKHQpe3JldHVybiB0Kk1hdGguUEkvMTgwfXZhciBMPXtnZW9tZXRyeTpmdW5jdGlvbiB0KGUpe3ZhciByLG49MDtzd2l0Y2goZS50eXBlKXtjYXNlXCJQb2x5Z29uXCI6cmV0dXJuIFMoZS5jb29yZGluYXRlcyk7Y2FzZVwiTXVsdGlQb2x5Z29uXCI6Zm9yKHI9MDtyPGUuY29vcmRpbmF0ZXMubGVuZ3RoO3IrKyluKz1TKGUuY29vcmRpbmF0ZXNbcl0pO3JldHVybiBuO2Nhc2VcIlBvaW50XCI6Y2FzZVwiTXVsdGlQb2ludFwiOmNhc2VcIkxpbmVTdHJpbmdcIjpjYXNlXCJNdWx0aUxpbmVTdHJpbmdcIjpyZXR1cm4gMDtjYXNlXCJHZW9tZXRyeUNvbGxlY3Rpb25cIjpmb3Iocj0wO3I8ZS5nZW9tZXRyaWVzLmxlbmd0aDtyKyspbis9dChlLmdlb21ldHJpZXNbcl0pO3JldHVybiBufX0scmluZzpFfTtmdW5jdGlvbiB6KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0KHIsZSl9fWZ1bmN0aW9uIE8odCxlKXtlPSEhZSx0WzBdPUkodFswXSxlKTtmb3IodmFyIHI9MTtyPHQubGVuZ3RoO3IrKyl0W3JdPUkodFtyXSwhZSk7cmV0dXJuIHR9ZnVuY3Rpb24gSSh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTC5yaW5nKHQpPj0wfSh0KT09PWU/dDp0LnJldmVyc2UoKX12YXIgRD10LmRlZmF1bHQkMjkuVmVjdG9yVGlsZUZlYXR1cmUucHJvdG90eXBlLnRvR2VvSlNPTixQPWZ1bmN0aW9uKGUpe3RoaXMuX2ZlYXR1cmU9ZSx0aGlzLmV4dGVudD10LmRlZmF1bHQkOCx0aGlzLnR5cGU9ZS50eXBlLHRoaXMucHJvcGVydGllcz1lLnRhZ3MsXCJpZFwiaW4gZSYmIWlzTmFOKGUuaWQpJiYodGhpcy5pZD1wYXJzZUludChlLmlkLDEwKSl9O1AucHJvdG90eXBlLmxvYWRHZW9tZXRyeT1mdW5jdGlvbigpe2lmKDE9PT10aGlzLl9mZWF0dXJlLnR5cGUpe2Zvcih2YXIgZT1bXSxyPTAsbj10aGlzLl9mZWF0dXJlLmdlb21ldHJ5O3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXTtlLnB1c2goW25ldyB0LmRlZmF1bHQkMShpWzBdLGlbMV0pXSl9cmV0dXJuIGV9Zm9yKHZhciBhPVtdLG89MCxzPXRoaXMuX2ZlYXR1cmUuZ2VvbWV0cnk7bzxzLmxlbmd0aDtvKz0xKXtmb3IodmFyIGw9W10sYz0wLHU9c1tvXTtjPHUubGVuZ3RoO2MrPTEpe3ZhciBoPXVbY107bC5wdXNoKG5ldyB0LmRlZmF1bHQkMShoWzBdLGhbMV0pKX1hLnB1c2gobCl9cmV0dXJuIGF9LFAucHJvdG90eXBlLnRvR2VvSlNPTj1mdW5jdGlvbih0LGUscil7cmV0dXJuIEQuY2FsbCh0aGlzLHQsZSxyKX07dmFyIFI9ZnVuY3Rpb24oZSl7dGhpcy5sYXllcnM9e19nZW9qc29uVGlsZUxheWVyOnRoaXN9LHRoaXMubmFtZT1cIl9nZW9qc29uVGlsZUxheWVyXCIsdGhpcy5leHRlbnQ9dC5kZWZhdWx0JDgsdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5fZmVhdHVyZXM9ZX07Ui5wcm90b3R5cGUuZmVhdHVyZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFAodGhpcy5fZmVhdHVyZXNbdF0pfTt2YXIgRj10Ll9fbW9kdWxlRXhwb3J0cy5WZWN0b3JUaWxlRmVhdHVyZSxCPU47ZnVuY3Rpb24gTih0LGUpe3RoaXMub3B0aW9ucz1lfHx7fSx0aGlzLmZlYXR1cmVzPXQsdGhpcy5sZW5ndGg9dC5sZW5ndGh9ZnVuY3Rpb24gaih0LGUpe3RoaXMuaWQ9XCJudW1iZXJcIj09dHlwZW9mIHQuaWQ/dC5pZDp2b2lkIDAsdGhpcy50eXBlPXQudHlwZSx0aGlzLnJhd0dlb21ldHJ5PTE9PT10LnR5cGU/W3QuZ2VvbWV0cnldOnQuZ2VvbWV0cnksdGhpcy5wcm9wZXJ0aWVzPXQudGFncyx0aGlzLmV4dGVudD1lfHw0MDk2fU4ucHJvdG90eXBlLmZlYXR1cmU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBqKHRoaXMuZmVhdHVyZXNbdF0sdGhpcy5vcHRpb25zLmV4dGVudCl9LGoucHJvdG90eXBlLmxvYWRHZW9tZXRyeT1mdW5jdGlvbigpe3ZhciBlPXRoaXMucmF3R2VvbWV0cnk7dGhpcy5nZW9tZXRyeT1bXTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7Zm9yKHZhciBuPWVbcl0saT1bXSxhPTA7YTxuLmxlbmd0aDthKyspaS5wdXNoKG5ldyB0LmRlZmF1bHQkMzIoblthXVswXSxuW2FdWzFdKSk7dGhpcy5nZW9tZXRyeS5wdXNoKGkpfXJldHVybiB0aGlzLmdlb21ldHJ5fSxqLnByb3RvdHlwZS5iYm94PWZ1bmN0aW9uKCl7dGhpcy5nZW9tZXRyeXx8dGhpcy5sb2FkR2VvbWV0cnkoKTtmb3IodmFyIHQ9dGhpcy5nZW9tZXRyeSxlPTEvMCxyPS0xLzAsbj0xLzAsaT0tMS8wLGE9MDthPHQubGVuZ3RoO2ErKylmb3IodmFyIG89dFthXSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107ZT1NYXRoLm1pbihlLGwueCkscj1NYXRoLm1heChyLGwueCksbj1NYXRoLm1pbihuLGwueSksaT1NYXRoLm1heChpLGwueSl9cmV0dXJuW2UsbixyLGldfSxqLnByb3RvdHlwZS50b0dlb0pTT049Ri5wcm90b3R5cGUudG9HZW9KU09OO3ZhciBWPUgsVT1ILHE9QjtmdW5jdGlvbiBIKGUpe3ZhciByPW5ldyB0Ll9fbW9kdWxlRXhwb3J0cyQxO3JldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiB0LmxheWVycyllLndyaXRlTWVzc2FnZSgzLEcsdC5sYXllcnNbcl0pfShlLHIpLHIuZmluaXNoKCl9ZnVuY3Rpb24gRyh0LGUpe3ZhciByO2Uud3JpdGVWYXJpbnRGaWVsZCgxNSx0LnZlcnNpb258fDEpLGUud3JpdGVTdHJpbmdGaWVsZCgxLHQubmFtZXx8XCJcIiksZS53cml0ZVZhcmludEZpZWxkKDUsdC5leHRlbnR8fDQwOTYpO3ZhciBuPXtrZXlzOltdLHZhbHVlczpbXSxrZXljYWNoZTp7fSx2YWx1ZWNhY2hlOnt9fTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKW4uZmVhdHVyZT10LmZlYXR1cmUociksZS53cml0ZU1lc3NhZ2UoMixZLG4pO3ZhciBpPW4ua2V5cztmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWUud3JpdGVTdHJpbmdGaWVsZCgzLGlbcl0pO3ZhciBhPW4udmFsdWVzO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspZS53cml0ZU1lc3NhZ2UoNCxKLGFbcl0pfWZ1bmN0aW9uIFkodCxlKXt2YXIgcj10LmZlYXR1cmU7dm9pZCAwIT09ci5pZCYmZS53cml0ZVZhcmludEZpZWxkKDEsci5pZCksZS53cml0ZU1lc3NhZ2UoMixXLHQpLGUud3JpdGVWYXJpbnRGaWVsZCgzLHIudHlwZSksZS53cml0ZU1lc3NhZ2UoNCwkLHIpfWZ1bmN0aW9uIFcodCxlKXt2YXIgcj10LmZlYXR1cmUsbj10LmtleXMsaT10LnZhbHVlcyxhPXQua2V5Y2FjaGUsbz10LnZhbHVlY2FjaGU7Zm9yKHZhciBzIGluIHIucHJvcGVydGllcyl7dmFyIGw9YVtzXTt2b2lkIDA9PT1sJiYobi5wdXNoKHMpLGw9bi5sZW5ndGgtMSxhW3NdPWwpLGUud3JpdGVWYXJpbnQobCk7dmFyIGM9ci5wcm9wZXJ0aWVzW3NdLHU9dHlwZW9mIGM7XCJzdHJpbmdcIiE9PXUmJlwiYm9vbGVhblwiIT09dSYmXCJudW1iZXJcIiE9PXUmJihjPUpTT04uc3RyaW5naWZ5KGMpKTt2YXIgaD11K1wiOlwiK2MsZj1vW2hdO3ZvaWQgMD09PWYmJihpLnB1c2goYyksZj1pLmxlbmd0aC0xLG9baF09ZiksZS53cml0ZVZhcmludChmKX19ZnVuY3Rpb24gWCh0LGUpe3JldHVybihlPDwzKSsoNyZ0KX1mdW5jdGlvbiBaKHQpe3JldHVybiB0PDwxXnQ+PjMxfWZ1bmN0aW9uICQodCxlKXtmb3IodmFyIHI9dC5sb2FkR2VvbWV0cnkoKSxuPXQudHlwZSxpPTAsYT0wLG89ci5sZW5ndGgscz0wO3M8bztzKyspe3ZhciBsPXJbc10sYz0xOzE9PT1uJiYoYz1sLmxlbmd0aCksZS53cml0ZVZhcmludChYKDEsYykpO2Zvcih2YXIgdT0zPT09bj9sLmxlbmd0aC0xOmwubGVuZ3RoLGg9MDtoPHU7aCsrKXsxPT09aCYmMSE9PW4mJmUud3JpdGVWYXJpbnQoWCgyLHUtMSkpO3ZhciBmPWxbaF0ueC1pLHA9bFtoXS55LWE7ZS53cml0ZVZhcmludChaKGYpKSxlLndyaXRlVmFyaW50KFoocCkpLGkrPWYsYSs9cH0zPT09biYmZS53cml0ZVZhcmludChYKDcsMCkpfX1mdW5jdGlvbiBKKHQsZSl7dmFyIHI9dHlwZW9mIHQ7XCJzdHJpbmdcIj09PXI/ZS53cml0ZVN0cmluZ0ZpZWxkKDEsdCk6XCJib29sZWFuXCI9PT1yP2Uud3JpdGVCb29sZWFuRmllbGQoNyx0KTpcIm51bWJlclwiPT09ciYmKHQlMSE9MD9lLndyaXRlRG91YmxlRmllbGQoMyx0KTp0PDA/ZS53cml0ZVNWYXJpbnRGaWVsZCg2LHQpOmUud3JpdGVWYXJpbnRGaWVsZCg1LHQpKX1WLmZyb21WZWN0b3JUaWxlSnM9VSxWLmZyb21HZW9qc29uVnQ9ZnVuY3Rpb24odCxlKXtlPWV8fHt9O3ZhciByPXt9O2Zvcih2YXIgbiBpbiB0KXJbbl09bmV3IEIodFtuXS5mZWF0dXJlcyxlKSxyW25dLm5hbWU9bixyW25dLnZlcnNpb249ZS52ZXJzaW9uLHJbbl0uZXh0ZW50PWUuZXh0ZW50O3JldHVybiBIKHtsYXllcnM6cn0pfSxWLkdlb0pTT05XcmFwcGVyPXE7dmFyIEs9ZnVuY3Rpb24gdChlLHIsbixpLGEsbyl7aWYoIShhLWk8PW4pKXt2YXIgcz1NYXRoLmZsb29yKChpK2EpLzIpOyFmdW5jdGlvbiB0KGUscixuLGksYSxvKXtmb3IoO2E+aTspe2lmKGEtaT42MDApe3ZhciBzPWEtaSsxLGw9bi1pKzEsYz1NYXRoLmxvZyhzKSx1PS41Kk1hdGguZXhwKDIqYy8zKSxoPS41Kk1hdGguc3FydChjKnUqKHMtdSkvcykqKGwtcy8yPDA/LTE6MSk7dChlLHIsbixNYXRoLm1heChpLE1hdGguZmxvb3Iobi1sKnUvcytoKSksTWF0aC5taW4oYSxNYXRoLmZsb29yKG4rKHMtbCkqdS9zK2gpKSxvKX12YXIgZj1yWzIqbitvXSxwPWksZD1hO2ZvcihRKGUscixpLG4pLHJbMiphK29dPmYmJlEoZSxyLGksYSk7cDxkOyl7Zm9yKFEoZSxyLHAsZCkscCsrLGQtLTtyWzIqcCtvXTxmOylwKys7Zm9yKDtyWzIqZCtvXT5mOylkLS19clsyKmkrb109PT1mP1EoZSxyLGksZCk6UShlLHIsKytkLGEpLGQ8PW4mJihpPWQrMSksbjw9ZCYmKGE9ZC0xKX19KGUscixzLGksYSxvJTIpLHQoZSxyLG4saSxzLTEsbysxKSx0KGUscixuLHMrMSxhLG8rMSl9fTtmdW5jdGlvbiBRKHQsZSxyLG4pe3R0KHQscixuKSx0dChlLDIqciwyKm4pLHR0KGUsMipyKzEsMipuKzEpfWZ1bmN0aW9uIHR0KHQsZSxyKXt2YXIgbj10W2VdO3RbZV09dFtyXSx0W3JdPW59ZnVuY3Rpb24gZXQodCxlLHIsbil7dmFyIGk9dC1yLGE9ZS1uO3JldHVybiBpKmkrYSphfXZhciBydD1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybiBuZXcgbnQodCxlLHIsbixpKX07ZnVuY3Rpb24gbnQodCxlLHIsbixpKXtlPWV8fGl0LHI9cnx8YXQsaT1pfHxBcnJheSx0aGlzLm5vZGVTaXplPW58fDY0LHRoaXMucG9pbnRzPXQsdGhpcy5pZHM9bmV3IGkodC5sZW5ndGgpLHRoaXMuY29vcmRzPW5ldyBpKDIqdC5sZW5ndGgpO2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXRoaXMuaWRzW2FdPWEsdGhpcy5jb29yZHNbMiphXT1lKHRbYV0pLHRoaXMuY29vcmRzWzIqYSsxXT1yKHRbYV0pO0sodGhpcy5pZHMsdGhpcy5jb29yZHMsdGhpcy5ub2RlU2l6ZSwwLHRoaXMuaWRzLmxlbmd0aC0xLDApfWZ1bmN0aW9uIGl0KHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIGF0KHQpe3JldHVybiB0WzFdfW50LnByb3RvdHlwZT17cmFuZ2U6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcyxsLGM9WzAsdC5sZW5ndGgtMSwwXSx1PVtdO2MubGVuZ3RoOyl7dmFyIGg9Yy5wb3AoKSxmPWMucG9wKCkscD1jLnBvcCgpO2lmKGYtcDw9bylmb3IodmFyIGQ9cDtkPD1mO2QrKylzPWVbMipkXSxsPWVbMipkKzFdLHM+PXImJnM8PWkmJmw+PW4mJmw8PWEmJnUucHVzaCh0W2RdKTtlbHNle3ZhciBnPU1hdGguZmxvb3IoKHArZikvMik7cz1lWzIqZ10sbD1lWzIqZysxXSxzPj1yJiZzPD1pJiZsPj1uJiZsPD1hJiZ1LnB1c2godFtnXSk7dmFyIHY9KGgrMSklMjsoMD09PWg/cjw9czpuPD1sKSYmKGMucHVzaChwKSxjLnB1c2goZy0xKSxjLnB1c2godikpLCgwPT09aD9pPj1zOmE+PWwpJiYoYy5wdXNoKGcrMSksYy5wdXNoKGYpLGMucHVzaCh2KSl9fXJldHVybiB1fSh0aGlzLmlkcyx0aGlzLmNvb3Jkcyx0LGUscixuLHRoaXMubm9kZVNpemUpfSx3aXRoaW46ZnVuY3Rpb24odCxlLHIpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvPVswLHQubGVuZ3RoLTEsMF0scz1bXSxsPWkqaTtvLmxlbmd0aDspe3ZhciBjPW8ucG9wKCksdT1vLnBvcCgpLGg9by5wb3AoKTtpZih1LWg8PWEpZm9yKHZhciBmPWg7Zjw9dTtmKyspZXQoZVsyKmZdLGVbMipmKzFdLHIsbik8PWwmJnMucHVzaCh0W2ZdKTtlbHNle3ZhciBwPU1hdGguZmxvb3IoKGgrdSkvMiksZD1lWzIqcF0sZz1lWzIqcCsxXTtldChkLGcscixuKTw9bCYmcy5wdXNoKHRbcF0pO3ZhciB2PShjKzEpJTI7KDA9PT1jP3ItaTw9ZDpuLWk8PWcpJiYoby5wdXNoKGgpLG8ucHVzaChwLTEpLG8ucHVzaCh2KSksKDA9PT1jP3IraT49ZDpuK2k+PWcpJiYoby5wdXNoKHArMSksby5wdXNoKHUpLG8ucHVzaCh2KSl9fXJldHVybiBzfSh0aGlzLmlkcyx0aGlzLmNvb3Jkcyx0LGUscix0aGlzLm5vZGVTaXplKX19O2Z1bmN0aW9uIG90KHQpe3RoaXMub3B0aW9ucz1wdChPYmplY3QuY3JlYXRlKHRoaXMub3B0aW9ucyksdCksdGhpcy50cmVlcz1uZXcgQXJyYXkodGhpcy5vcHRpb25zLm1heFpvb20rMSl9ZnVuY3Rpb24gc3QodCxlLHIsbixpKXtyZXR1cm57eDp0LHk6ZSx6b29tOjEvMCxpZDpuLHByb3BlcnRpZXM6aSxwYXJlbnRJZDotMSxudW1Qb2ludHM6cn19ZnVuY3Rpb24gbHQodCxlKXt2YXIgcj10Lmdlb21ldHJ5LmNvb3JkaW5hdGVzO3JldHVybnt4Omh0KHJbMF0pLHk6ZnQoclsxXSksem9vbToxLzAsaWQ6ZSxwYXJlbnRJZDotMX19ZnVuY3Rpb24gY3QodCl7cmV0dXJue3R5cGU6XCJGZWF0dXJlXCIscHJvcGVydGllczp1dCh0KSxnZW9tZXRyeTp7dHlwZTpcIlBvaW50XCIsY29vcmRpbmF0ZXM6WyhuPXQueCwzNjAqKG4tLjUpKSwoZT10Lnkscj0oMTgwLTM2MCplKSpNYXRoLlBJLzE4MCwzNjAqTWF0aC5hdGFuKE1hdGguZXhwKHIpKS9NYXRoLlBJLTkwKV19fTt2YXIgZSxyLG59ZnVuY3Rpb24gdXQodCl7dmFyIGU9dC5udW1Qb2ludHMscj1lPj0xZTQ/TWF0aC5yb3VuZChlLzFlMykrXCJrXCI6ZT49MWUzP01hdGgucm91bmQoZS8xMDApLzEwK1wia1wiOmU7cmV0dXJuIHB0KHB0KHt9LHQucHJvcGVydGllcykse2NsdXN0ZXI6ITAsY2x1c3Rlcl9pZDp0LmlkLHBvaW50X2NvdW50OmUscG9pbnRfY291bnRfYWJicmV2aWF0ZWQ6cn0pfWZ1bmN0aW9uIGh0KHQpe3JldHVybiB0LzM2MCsuNX1mdW5jdGlvbiBmdCh0KXt2YXIgZT1NYXRoLnNpbih0Kk1hdGguUEkvMTgwKSxyPS41LS4yNSpNYXRoLmxvZygoMStlKS8oMS1lKSkvTWF0aC5QSTtyZXR1cm4gcjwwPzA6cj4xPzE6cn1mdW5jdGlvbiBwdCh0LGUpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXTtyZXR1cm4gdH1mdW5jdGlvbiBkdCh0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIGd0KHQpe3JldHVybiB0Lnl9ZnVuY3Rpb24gdnQodCxlLHIsbixpLGEpe3ZhciBvPWktcixzPWEtbjtpZigwIT09b3x8MCE9PXMpe3ZhciBsPSgodC1yKSpvKyhlLW4pKnMpLyhvKm8rcypzKTtsPjE/KHI9aSxuPWEpOmw+MCYmKHIrPW8qbCxuKz1zKmwpfXJldHVybihvPXQtcikqbysocz1lLW4pKnN9ZnVuY3Rpb24gbXQodCxlLHIsbil7dmFyIGk9e2lkOnR8fG51bGwsdHlwZTplLGdlb21ldHJ5OnIsdGFnczpuLG1pblg6MS8wLG1pblk6MS8wLG1heFg6LTEvMCxtYXhZOi0xLzB9O3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10Lmdlb21ldHJ5LHI9dC50eXBlO2lmKFwiUG9pbnRcIj09PXJ8fFwiTXVsdGlQb2ludFwiPT09cnx8XCJMaW5lU3RyaW5nXCI9PT1yKXl0KHQsZSk7ZWxzZSBpZihcIlBvbHlnb25cIj09PXJ8fFwiTXVsdGlMaW5lU3RyaW5nXCI9PT1yKWZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXl0KHQsZVtuXSk7ZWxzZSBpZihcIk11bHRpUG9seWdvblwiPT09cilmb3Iobj0wO248ZS5sZW5ndGg7bisrKWZvcih2YXIgaT0wO2k8ZVtuXS5sZW5ndGg7aSsrKXl0KHQsZVtuXVtpXSl9KGkpLGl9ZnVuY3Rpb24geXQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrPTMpdC5taW5YPU1hdGgubWluKHQubWluWCxlW3JdKSx0Lm1pblk9TWF0aC5taW4odC5taW5ZLGVbcisxXSksdC5tYXhYPU1hdGgubWF4KHQubWF4WCxlW3JdKSx0Lm1heFk9TWF0aC5tYXgodC5tYXhZLGVbcisxXSl9ZnVuY3Rpb24geHQodCxlLHIpe2lmKGUuZ2VvbWV0cnkpe3ZhciBuPWUuZ2VvbWV0cnkuY29vcmRpbmF0ZXMsaT1lLmdlb21ldHJ5LnR5cGUsYT1NYXRoLnBvdyhyLnRvbGVyYW5jZS8oKDE8PHIubWF4Wm9vbSkqci5leHRlbnQpLDIpLG89W107aWYoXCJQb2ludFwiPT09aSlidChuLG8pO2Vsc2UgaWYoXCJNdWx0aVBvaW50XCI9PT1pKWZvcih2YXIgcz0wO3M8bi5sZW5ndGg7cysrKWJ0KG5bc10sbyk7ZWxzZSBpZihcIkxpbmVTdHJpbmdcIj09PWkpX3QobixvLGEsITEpO2Vsc2UgaWYoXCJNdWx0aUxpbmVTdHJpbmdcIj09PWkpaWYoci5saW5lTWV0cmljcylmb3Iocz0wO3M8bi5sZW5ndGg7cysrKXJldHVybiBvPVtdLF90KG5bc10sbyxhLCExKSx2b2lkIHQucHVzaChtdChlLmlkLFwiTGluZVN0cmluZ1wiLG8sZS5wcm9wZXJ0aWVzKSk7ZWxzZSB3dChuLG8sYSwhMSk7ZWxzZSBpZihcIlBvbHlnb25cIj09PWkpd3QobixvLGEsITApO2Vsc2V7aWYoXCJNdWx0aVBvbHlnb25cIiE9PWkpe2lmKFwiR2VvbWV0cnlDb2xsZWN0aW9uXCI9PT1pKXtmb3Iocz0wO3M8ZS5nZW9tZXRyeS5nZW9tZXRyaWVzLmxlbmd0aDtzKyspeHQodCx7aWQ6ZS5pZCxnZW9tZXRyeTplLmdlb21ldHJ5Lmdlb21ldHJpZXNbc10scHJvcGVydGllczplLnByb3BlcnRpZXN9LHIpO3JldHVybn10aHJvdyBuZXcgRXJyb3IoXCJJbnB1dCBkYXRhIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LlwiKX1mb3Iocz0wO3M8bi5sZW5ndGg7cysrKXt2YXIgbD1bXTt3dChuW3NdLGwsYSwhMCksby5wdXNoKGwpfX10LnB1c2gobXQoZS5pZCxpLG8sZS5wcm9wZXJ0aWVzKSl9fWZ1bmN0aW9uIGJ0KHQsZSl7ZS5wdXNoKGt0KHRbMF0pKSxlLnB1c2goQXQodFsxXSkpLGUucHVzaCgwKX1mdW5jdGlvbiBfdCh0LGUscixuKXtmb3IodmFyIGksYSxvPTAscz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbD1rdCh0W3NdWzBdKSxjPUF0KHRbc11bMV0pO2UucHVzaChsKSxlLnB1c2goYyksZS5wdXNoKDApLHM+MCYmKG8rPW4/KGkqYy1sKmEpLzI6TWF0aC5zcXJ0KE1hdGgucG93KGwtaSwyKStNYXRoLnBvdyhjLWEsMikpKSxpPWwsYT1jfXZhciB1PWUubGVuZ3RoLTM7ZVsyXT0xLGZ1bmN0aW9uIHQoZSxyLG4saSl7Zm9yKHZhciBhLG89aSxzPWVbcl0sbD1lW3IrMV0sYz1lW25dLHU9ZVtuKzFdLGg9ciszO2g8bjtoKz0zKXt2YXIgZj12dChlW2hdLGVbaCsxXSxzLGwsYyx1KTtmPm8mJihhPWgsbz1mKX1vPmkmJihhLXI+MyYmdChlLHIsYSxpKSxlW2ErMl09byxuLWE+MyYmdChlLGEsbixpKSl9KGUsMCx1LHIpLGVbdSsyXT0xLGUuc2l6ZT1NYXRoLmFicyhvKSxlLnN0YXJ0PTAsZS5lbmQ9ZS5zaXplfWZ1bmN0aW9uIHd0KHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT1bXTtfdCh0W2ldLGEscixuKSxlLnB1c2goYSl9fWZ1bmN0aW9uIGt0KHQpe3JldHVybiB0LzM2MCsuNX1mdW5jdGlvbiBBdCh0KXt2YXIgZT1NYXRoLnNpbih0Kk1hdGguUEkvMTgwKSxyPS41LS4yNSpNYXRoLmxvZygoMStlKS8oMS1lKSkvTWF0aC5QSTtyZXR1cm4gcjwwPzA6cj4xPzE6cn1mdW5jdGlvbiBUdCh0LGUscixuLGksYSxvLHMpe2lmKG4vPWUsYT49KHIvPWUpJiZvPD1uKXJldHVybiB0O2lmKGE+bnx8bzxyKXJldHVybiBudWxsO2Zvcih2YXIgbD1bXSxjPTA7Yzx0Lmxlbmd0aDtjKyspe3ZhciB1PXRbY10saD11Lmdlb21ldHJ5LGY9dS50eXBlLHA9MD09PWk/dS5taW5YOnUubWluWSxkPTA9PT1pP3UubWF4WDp1Lm1heFk7aWYocD49ciYmZDw9bilsLnB1c2godSk7ZWxzZSBpZighKHA+bnx8ZDxyKSl7dmFyIGc9W107aWYoXCJQb2ludFwiPT09Znx8XCJNdWx0aVBvaW50XCI9PT1mKU10KGgsZyxyLG4saSk7ZWxzZSBpZihcIkxpbmVTdHJpbmdcIj09PWYpU3QoaCxnLHIsbixpLCExLHMubGluZU1ldHJpY3MpO2Vsc2UgaWYoXCJNdWx0aUxpbmVTdHJpbmdcIj09PWYpQ3QoaCxnLHIsbixpLCExKTtlbHNlIGlmKFwiUG9seWdvblwiPT09ZilDdChoLGcscixuLGksITApO2Vsc2UgaWYoXCJNdWx0aVBvbHlnb25cIj09PWYpZm9yKHZhciB2PTA7djxoLmxlbmd0aDt2Kyspe3ZhciBtPVtdO0N0KGhbdl0sbSxyLG4saSwhMCksbS5sZW5ndGgmJmcucHVzaChtKX1pZihnLmxlbmd0aCl7aWYocy5saW5lTWV0cmljcyYmXCJMaW5lU3RyaW5nXCI9PT1mKXtmb3Iodj0wO3Y8Zy5sZW5ndGg7disrKWwucHVzaChtdCh1LmlkLGYsZ1t2XSx1LnRhZ3MpKTtjb250aW51ZX1cIkxpbmVTdHJpbmdcIiE9PWYmJlwiTXVsdGlMaW5lU3RyaW5nXCIhPT1mfHwoMT09PWcubGVuZ3RoPyhmPVwiTGluZVN0cmluZ1wiLGc9Z1swXSk6Zj1cIk11bHRpTGluZVN0cmluZ1wiKSxcIlBvaW50XCIhPT1mJiZcIk11bHRpUG9pbnRcIiE9PWZ8fChmPTM9PT1nLmxlbmd0aD9cIlBvaW50XCI6XCJNdWx0aVBvaW50XCIpLGwucHVzaChtdCh1LmlkLGYsZyx1LnRhZ3MpKX19fXJldHVybiBsLmxlbmd0aD9sOm51bGx9ZnVuY3Rpb24gTXQodCxlLHIsbixpKXtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErPTMpe3ZhciBvPXRbYStpXTtvPj1yJiZvPD1uJiYoZS5wdXNoKHRbYV0pLGUucHVzaCh0W2ErMV0pLGUucHVzaCh0W2ErMl0pKX19ZnVuY3Rpb24gU3QodCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzLGwsYz1FdCh0KSx1PTA9PT1pP3p0Ok90LGg9dC5zdGFydCxmPTA7Zjx0Lmxlbmd0aC0zO2YrPTMpe3ZhciBwPXRbZl0sZD10W2YrMV0sZz10W2YrMl0sdj10W2YrM10sbT10W2YrNF0seT0wPT09aT9wOmQseD0wPT09aT92Om0sYj0hMTtvJiYocz1NYXRoLnNxcnQoTWF0aC5wb3cocC12LDIpK01hdGgucG93KGQtbSwyKSkpLHk8cj94Pj1yJiYobD11KGMscCxkLHYsbSxyKSxvJiYoYy5zdGFydD1oK3MqbCkpOnk+bj94PD1uJiYobD11KGMscCxkLHYsbSxuKSxvJiYoYy5zdGFydD1oK3MqbCkpOkx0KGMscCxkLGcpLHg8ciYmeT49ciYmKGw9dShjLHAsZCx2LG0sciksYj0hMCkseD5uJiZ5PD1uJiYobD11KGMscCxkLHYsbSxuKSxiPSEwKSwhYSYmYiYmKG8mJihjLmVuZD1oK3MqbCksZS5wdXNoKGMpLGM9RXQodCkpLG8mJihoKz1zKX12YXIgXz10Lmxlbmd0aC0zO3A9dFtfXSxkPXRbXysxXSxnPXRbXysyXSwoeT0wPT09aT9wOmQpPj1yJiZ5PD1uJiZMdChjLHAsZCxnKSxfPWMubGVuZ3RoLTMsYSYmXz49MyYmKGNbX10hPT1jWzBdfHxjW18rMV0hPT1jWzFdKSYmTHQoYyxjWzBdLGNbMV0sY1syXSksYy5sZW5ndGgmJmUucHVzaChjKX1mdW5jdGlvbiBFdCh0KXt2YXIgZT1bXTtyZXR1cm4gZS5zaXplPXQuc2l6ZSxlLnN0YXJ0PXQuc3RhcnQsZS5lbmQ9dC5lbmQsZX1mdW5jdGlvbiBDdCh0LGUscixuLGksYSl7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspU3QodFtvXSxlLHIsbixpLGEsITEpfWZ1bmN0aW9uIEx0KHQsZSxyLG4pe3QucHVzaChlKSx0LnB1c2gociksdC5wdXNoKG4pfWZ1bmN0aW9uIHp0KHQsZSxyLG4saSxhKXt2YXIgbz0oYS1lKS8obi1lKTtyZXR1cm4gdC5wdXNoKGEpLHQucHVzaChyKyhpLXIpKm8pLHQucHVzaCgxKSxvfWZ1bmN0aW9uIE90KHQsZSxyLG4saSxhKXt2YXIgbz0oYS1yKS8oaS1yKTtyZXR1cm4gdC5wdXNoKGUrKG4tZSkqbyksdC5wdXNoKGEpLHQucHVzaCgxKSxvfWZ1bmN0aW9uIEl0KHQsZSl7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGksYT10W25dLG89YS50eXBlO2lmKFwiUG9pbnRcIj09PW98fFwiTXVsdGlQb2ludFwiPT09b3x8XCJMaW5lU3RyaW5nXCI9PT1vKWk9RHQoYS5nZW9tZXRyeSxlKTtlbHNlIGlmKFwiTXVsdGlMaW5lU3RyaW5nXCI9PT1vfHxcIlBvbHlnb25cIj09PW8pe2k9W107Zm9yKHZhciBzPTA7czxhLmdlb21ldHJ5Lmxlbmd0aDtzKyspaS5wdXNoKER0KGEuZ2VvbWV0cnlbc10sZSkpfWVsc2UgaWYoXCJNdWx0aVBvbHlnb25cIj09PW8pZm9yKGk9W10scz0wO3M8YS5nZW9tZXRyeS5sZW5ndGg7cysrKXtmb3IodmFyIGw9W10sYz0wO2M8YS5nZW9tZXRyeVtzXS5sZW5ndGg7YysrKWwucHVzaChEdChhLmdlb21ldHJ5W3NdW2NdLGUpKTtpLnB1c2gobCl9ci5wdXNoKG10KGEuaWQsbyxpLGEudGFncykpfXJldHVybiByfWZ1bmN0aW9uIER0KHQsZSl7dmFyIHI9W107ci5zaXplPXQuc2l6ZSx2b2lkIDAhPT10LnN0YXJ0JiYoci5zdGFydD10LnN0YXJ0LHIuZW5kPXQuZW5kKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rPTMpci5wdXNoKHRbbl0rZSx0W24rMV0sdFtuKzJdKTtyZXR1cm4gcn1mdW5jdGlvbiBQdCh0LGUpe2lmKHQudHJhbnNmb3JtZWQpcmV0dXJuIHQ7dmFyIHIsbixpLGE9MTw8dC56LG89dC54LHM9dC55O2ZvcihyPTA7cjx0LmZlYXR1cmVzLmxlbmd0aDtyKyspe3ZhciBsPXQuZmVhdHVyZXNbcl0sYz1sLmdlb21ldHJ5LHU9bC50eXBlO2lmKGwuZ2VvbWV0cnk9W10sMT09PXUpZm9yKG49MDtuPGMubGVuZ3RoO24rPTIpbC5nZW9tZXRyeS5wdXNoKFJ0KGNbbl0sY1tuKzFdLGUsYSxvLHMpKTtlbHNlIGZvcihuPTA7bjxjLmxlbmd0aDtuKyspe3ZhciBoPVtdO2ZvcihpPTA7aTxjW25dLmxlbmd0aDtpKz0yKWgucHVzaChSdChjW25dW2ldLGNbbl1baSsxXSxlLGEsbyxzKSk7bC5nZW9tZXRyeS5wdXNoKGgpfX1yZXR1cm4gdC50cmFuc2Zvcm1lZD0hMCx0fWZ1bmN0aW9uIFJ0KHQsZSxyLG4saSxhKXtyZXR1cm5bTWF0aC5yb3VuZChyKih0Km4taSkpLE1hdGgucm91bmQociooZSpuLWEpKV19ZnVuY3Rpb24gRnQodCxlLHIsbixpKXtmb3IodmFyIGE9ZT09PWkubWF4Wm9vbT8wOmkudG9sZXJhbmNlLygoMTw8ZSkqaS5leHRlbnQpLG89e2ZlYXR1cmVzOltdLG51bVBvaW50czowLG51bVNpbXBsaWZpZWQ6MCxudW1GZWF0dXJlczowLHNvdXJjZTpudWxsLHg6cix5Om4sejplLHRyYW5zZm9ybWVkOiExLG1pblg6MixtaW5ZOjEsbWF4WDotMSxtYXhZOjB9LHM9MDtzPHQubGVuZ3RoO3MrKyl7by5udW1GZWF0dXJlcysrLEJ0KG8sdFtzXSxhLGkpO3ZhciBsPXRbc10ubWluWCxjPXRbc10ubWluWSx1PXRbc10ubWF4WCxoPXRbc10ubWF4WTtsPG8ubWluWCYmKG8ubWluWD1sKSxjPG8ubWluWSYmKG8ubWluWT1jKSx1Pm8ubWF4WCYmKG8ubWF4WD11KSxoPm8ubWF4WSYmKG8ubWF4WT1oKX1yZXR1cm4gb31mdW5jdGlvbiBCdCh0LGUscixuKXt2YXIgaT1lLmdlb21ldHJ5LGE9ZS50eXBlLG89W107aWYoXCJQb2ludFwiPT09YXx8XCJNdWx0aVBvaW50XCI9PT1hKWZvcih2YXIgcz0wO3M8aS5sZW5ndGg7cys9MylvLnB1c2goaVtzXSksby5wdXNoKGlbcysxXSksdC5udW1Qb2ludHMrKyx0Lm51bVNpbXBsaWZpZWQrKztlbHNlIGlmKFwiTGluZVN0cmluZ1wiPT09YSlOdChvLGksdCxyLCExLCExKTtlbHNlIGlmKFwiTXVsdGlMaW5lU3RyaW5nXCI9PT1hfHxcIlBvbHlnb25cIj09PWEpZm9yKHM9MDtzPGkubGVuZ3RoO3MrKylOdChvLGlbc10sdCxyLFwiUG9seWdvblwiPT09YSwwPT09cyk7ZWxzZSBpZihcIk11bHRpUG9seWdvblwiPT09YSlmb3IodmFyIGw9MDtsPGkubGVuZ3RoO2wrKyl7dmFyIGM9aVtsXTtmb3Iocz0wO3M8Yy5sZW5ndGg7cysrKU50KG8sY1tzXSx0LHIsITAsMD09PXMpfWlmKG8ubGVuZ3RoKXt2YXIgdT1lLnRhZ3N8fG51bGw7aWYoXCJMaW5lU3RyaW5nXCI9PT1hJiZuLmxpbmVNZXRyaWNzKXtmb3IodmFyIGggaW4gdT17fSxlLnRhZ3MpdVtoXT1lLnRhZ3NbaF07dS5tYXBib3hfY2xpcF9zdGFydD1pLnN0YXJ0L2kuc2l6ZSx1Lm1hcGJveF9jbGlwX2VuZD1pLmVuZC9pLnNpemV9dmFyIGY9e2dlb21ldHJ5Om8sdHlwZTpcIlBvbHlnb25cIj09PWF8fFwiTXVsdGlQb2x5Z29uXCI9PT1hPzM6XCJMaW5lU3RyaW5nXCI9PT1hfHxcIk11bHRpTGluZVN0cmluZ1wiPT09YT8yOjEsdGFnczp1fTtudWxsIT09ZS5pZCYmKGYuaWQ9ZS5pZCksdC5mZWF0dXJlcy5wdXNoKGYpfX1mdW5jdGlvbiBOdCh0LGUscixuLGksYSl7dmFyIG89bipuO2lmKG4+MCYmZS5zaXplPChpP286bikpci5udW1Qb2ludHMrPWUubGVuZ3RoLzM7ZWxzZXtmb3IodmFyIHM9W10sbD0wO2w8ZS5sZW5ndGg7bCs9MykoMD09PW58fGVbbCsyXT5vKSYmKHIubnVtU2ltcGxpZmllZCsrLHMucHVzaChlW2xdKSxzLnB1c2goZVtsKzFdKSksci5udW1Qb2ludHMrKztpJiZmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49MCxpPXQubGVuZ3RoLGE9aS0yO248aTthPW4sbis9MilyKz0odFtuXS10W2FdKSoodFtuKzFdK3RbYSsxXSk7aWYocj4wPT09ZSlmb3Iobj0wLGk9dC5sZW5ndGg7bjxpLzI7bis9Mil7dmFyIG89dFtuXSxzPXRbbisxXTt0W25dPXRbaS0yLW5dLHRbbisxXT10W2ktMS1uXSx0W2ktMi1uXT1vLHRbaS0xLW5dPXN9fShzLGEpLHQucHVzaChzKX19ZnVuY3Rpb24ganQodCxlKXt2YXIgcj0oZT10aGlzLm9wdGlvbnM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl07cmV0dXJuIHR9KE9iamVjdC5jcmVhdGUodGhpcy5vcHRpb25zKSxlKSkuZGVidWc7aWYociYmY29uc29sZS50aW1lKFwicHJlcHJvY2VzcyBkYXRhXCIpLGUubWF4Wm9vbTwwfHxlLm1heFpvb20+MjQpdGhyb3cgbmV3IEVycm9yKFwibWF4Wm9vbSBzaG91bGQgYmUgaW4gdGhlIDAtMjQgcmFuZ2VcIik7dmFyIG49ZnVuY3Rpb24odCxlKXt2YXIgcj1bXTtpZihcIkZlYXR1cmVDb2xsZWN0aW9uXCI9PT10LnR5cGUpZm9yKHZhciBuPTA7bjx0LmZlYXR1cmVzLmxlbmd0aDtuKyspeHQocix0LmZlYXR1cmVzW25dLGUpO2Vsc2VcIkZlYXR1cmVcIj09PXQudHlwZT94dChyLHQsZSk6eHQocix7Z2VvbWV0cnk6dH0sZSk7cmV0dXJuIHJ9KHQsZSk7dGhpcy50aWxlcz17fSx0aGlzLnRpbGVDb29yZHM9W10sciYmKGNvbnNvbGUudGltZUVuZChcInByZXByb2Nlc3MgZGF0YVwiKSxjb25zb2xlLmxvZyhcImluZGV4OiBtYXhab29tOiAlZCwgbWF4UG9pbnRzOiAlZFwiLGUuaW5kZXhNYXhab29tLGUuaW5kZXhNYXhQb2ludHMpLGNvbnNvbGUudGltZShcImdlbmVyYXRlIHRpbGVzXCIpLHRoaXMuc3RhdHM9e30sdGhpcy50b3RhbD0wKSwobj1mdW5jdGlvbih0LGUpe3ZhciByPWUuYnVmZmVyL2UuZXh0ZW50LG49dCxpPVR0KHQsMSwtMS1yLHIsMCwtMSwyLGUpLGE9VHQodCwxLDEtciwyK3IsMCwtMSwyLGUpO3JldHVybihpfHxhKSYmKG49VHQodCwxLC1yLDErciwwLC0xLDIsZSl8fFtdLGkmJihuPUl0KGksMSkuY29uY2F0KG4pKSxhJiYobj1uLmNvbmNhdChJdChhLC0xKSkpKSxufShuLGUpKS5sZW5ndGgmJnRoaXMuc3BsaXRUaWxlKG4sMCwwLDApLHImJihuLmxlbmd0aCYmY29uc29sZS5sb2coXCJmZWF0dXJlczogJWQsIHBvaW50czogJWRcIix0aGlzLnRpbGVzWzBdLm51bUZlYXR1cmVzLHRoaXMudGlsZXNbMF0ubnVtUG9pbnRzKSxjb25zb2xlLnRpbWVFbmQoXCJnZW5lcmF0ZSB0aWxlc1wiKSxjb25zb2xlLmxvZyhcInRpbGVzIGdlbmVyYXRlZDpcIix0aGlzLnRvdGFsLEpTT04uc3RyaW5naWZ5KHRoaXMuc3RhdHMpKSl9ZnVuY3Rpb24gVnQodCxlLHIpe3JldHVybiAzMiooKDE8PHQpKnIrZSkrdH1mdW5jdGlvbiBVdCh0LGUpe3ZhciByPXQudGlsZUlELmNhbm9uaWNhbDtpZighdGhpcy5fZ2VvSlNPTkluZGV4KXJldHVybiBlKG51bGwsbnVsbCk7dmFyIG49dGhpcy5fZ2VvSlNPTkluZGV4LmdldFRpbGUoci56LHIueCxyLnkpO2lmKCFuKXJldHVybiBlKG51bGwsbnVsbCk7dmFyIGk9bmV3IFIobi5mZWF0dXJlcyksYT1WKGkpOzA9PT1hLmJ5dGVPZmZzZXQmJmEuYnl0ZUxlbmd0aD09PWEuYnVmZmVyLmJ5dGVMZW5ndGh8fChhPW5ldyBVaW50OEFycmF5KGEpKSxlKG51bGwse3ZlY3RvclRpbGU6aSxyYXdEYXRhOmEuYnVmZmVyfSl9b3QucHJvdG90eXBlPXtvcHRpb25zOnttaW5ab29tOjAsbWF4Wm9vbToxNixyYWRpdXM6NDAsZXh0ZW50OjUxMixub2RlU2l6ZTo2NCxsb2c6ITEscmVkdWNlOm51bGwsaW5pdGlhbDpmdW5jdGlvbigpe3JldHVybnt9fSxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSxsb2FkOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMub3B0aW9ucy5sb2c7ZSYmY29uc29sZS50aW1lKFwidG90YWwgdGltZVwiKTt2YXIgcj1cInByZXBhcmUgXCIrdC5sZW5ndGgrXCIgcG9pbnRzXCI7ZSYmY29uc29sZS50aW1lKHIpLHRoaXMucG9pbnRzPXQ7dmFyIG49dC5tYXAobHQpO2UmJmNvbnNvbGUudGltZUVuZChyKTtmb3IodmFyIGk9dGhpcy5vcHRpb25zLm1heFpvb207aT49dGhpcy5vcHRpb25zLm1pblpvb207aS0tKXt2YXIgYT0rRGF0ZS5ub3coKTt0aGlzLnRyZWVzW2krMV09cnQobixkdCxndCx0aGlzLm9wdGlvbnMubm9kZVNpemUsRmxvYXQzMkFycmF5KSxuPXRoaXMuX2NsdXN0ZXIobixpKSxlJiZjb25zb2xlLmxvZyhcInolZDogJWQgY2x1c3RlcnMgaW4gJWRtc1wiLGksbi5sZW5ndGgsK0RhdGUubm93KCktYSl9cmV0dXJuIHRoaXMudHJlZXNbdGhpcy5vcHRpb25zLm1pblpvb21dPXJ0KG4sZHQsZ3QsdGhpcy5vcHRpb25zLm5vZGVTaXplLEZsb2F0MzJBcnJheSksZSYmY29uc29sZS50aW1lRW5kKFwidG90YWwgdGltZVwiKSx0aGlzfSxnZXRDbHVzdGVyczpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLnRyZWVzW3RoaXMuX2xpbWl0Wm9vbShlKV0sbj1yLnJhbmdlKGh0KHRbMF0pLGZ0KHRbM10pLGh0KHRbMl0pLGZ0KHRbMV0pKSxpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89ci5wb2ludHNbblthXV07aS5wdXNoKG8ubnVtUG9pbnRzP2N0KG8pOnRoaXMucG9pbnRzW28uaWRdKX1yZXR1cm4gaX0sZ2V0Q2hpbGRyZW46ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy50cmVlc1tlKzFdLnBvaW50c1t0XSxuPXRoaXMub3B0aW9ucy5yYWRpdXMvKHRoaXMub3B0aW9ucy5leHRlbnQqTWF0aC5wb3coMixlKSksaT10aGlzLnRyZWVzW2UrMV0ud2l0aGluKHIueCxyLnksbiksYT1bXSxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBzPXRoaXMudHJlZXNbZSsxXS5wb2ludHNbaVtvXV07cy5wYXJlbnRJZD09PXQmJmEucHVzaChzLm51bVBvaW50cz9jdChzKTp0aGlzLnBvaW50c1tzLmlkXSl9cmV0dXJuIGF9LGdldExlYXZlczpmdW5jdGlvbih0LGUscixuKXtyPXJ8fDEwLG49bnx8MDt2YXIgaT1bXTtyZXR1cm4gdGhpcy5fYXBwZW5kTGVhdmVzKGksdCxlLHIsbiwwKSxpfSxnZXRUaWxlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnRyZWVzW3RoaXMuX2xpbWl0Wm9vbSh0KV0saT1NYXRoLnBvdygyLHQpLGE9dGhpcy5vcHRpb25zLmV4dGVudCxvPXRoaXMub3B0aW9ucy5yYWRpdXMvYSxzPShyLW8pL2ksbD0ocisxK28pL2ksYz17ZmVhdHVyZXM6W119O3JldHVybiB0aGlzLl9hZGRUaWxlRmVhdHVyZXMobi5yYW5nZSgoZS1vKS9pLHMsKGUrMStvKS9pLGwpLG4ucG9pbnRzLGUscixpLGMpLDA9PT1lJiZ0aGlzLl9hZGRUaWxlRmVhdHVyZXMobi5yYW5nZSgxLW8vaSxzLDEsbCksbi5wb2ludHMsaSxyLGksYyksZT09PWktMSYmdGhpcy5fYWRkVGlsZUZlYXR1cmVzKG4ucmFuZ2UoMCxzLG8vaSxsKSxuLnBvaW50cywtMSxyLGksYyksYy5mZWF0dXJlcy5sZW5ndGg/YzpudWxsfSxnZXRDbHVzdGVyRXhwYW5zaW9uWm9vbTpmdW5jdGlvbih0LGUpe2Zvcig7ZTx0aGlzLm9wdGlvbnMubWF4Wm9vbTspe3ZhciByPXRoaXMuZ2V0Q2hpbGRyZW4odCxlKTtpZihlKyssMSE9PXIubGVuZ3RoKWJyZWFrO3Q9clswXS5wcm9wZXJ0aWVzLmNsdXN0ZXJfaWR9cmV0dXJuIGV9LF9hcHBlbmRMZWF2ZXM6ZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbz10aGlzLmdldENoaWxkcmVuKGUscikscz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdLnByb3BlcnRpZXM7aWYobC5jbHVzdGVyP2ErbC5wb2ludF9jb3VudDw9aT9hKz1sLnBvaW50X2NvdW50OmE9dGhpcy5fYXBwZW5kTGVhdmVzKHQsbC5jbHVzdGVyX2lkLHIrMSxuLGksYSk6YTxpP2ErKzp0LnB1c2gob1tzXSksdC5sZW5ndGg9PT1uKWJyZWFrfXJldHVybiBhfSxfYWRkVGlsZUZlYXR1cmVzOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9ZVt0W29dXTthLmZlYXR1cmVzLnB1c2goe3R5cGU6MSxnZW9tZXRyeTpbW01hdGgucm91bmQodGhpcy5vcHRpb25zLmV4dGVudCoocy54KmktcikpLE1hdGgucm91bmQodGhpcy5vcHRpb25zLmV4dGVudCoocy55KmktbikpXV0sdGFnczpzLm51bVBvaW50cz91dChzKTp0aGlzLnBvaW50c1tzLmlkXS5wcm9wZXJ0aWVzfSl9fSxfbGltaXRab29tOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCh0aGlzLm9wdGlvbnMubWluWm9vbSxNYXRoLm1pbih0LHRoaXMub3B0aW9ucy5tYXhab29tKzEpKX0sX2NsdXN0ZXI6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj10aGlzLm9wdGlvbnMucmFkaXVzLyh0aGlzLm9wdGlvbnMuZXh0ZW50Kk1hdGgucG93KDIsZSkpLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dFtpXTtpZighKGEuem9vbTw9ZSkpe2Euem9vbT1lO3ZhciBvPXRoaXMudHJlZXNbZSsxXSxzPW8ud2l0aGluKGEueCxhLnksbiksbD1hLm51bVBvaW50c3x8MSxjPWEueCpsLHU9YS55KmwsaD1udWxsO3RoaXMub3B0aW9ucy5yZWR1Y2UmJihoPXRoaXMub3B0aW9ucy5pbml0aWFsKCksdGhpcy5fYWNjdW11bGF0ZShoLGEpKTtmb3IodmFyIGY9MDtmPHMubGVuZ3RoO2YrKyl7dmFyIHA9by5wb2ludHNbc1tmXV07aWYoZTxwLnpvb20pe3ZhciBkPXAubnVtUG9pbnRzfHwxO3Auem9vbT1lLGMrPXAueCpkLHUrPXAueSpkLGwrPWQscC5wYXJlbnRJZD1pLHRoaXMub3B0aW9ucy5yZWR1Y2UmJnRoaXMuX2FjY3VtdWxhdGUoaCxwKX19MT09PWw/ci5wdXNoKGEpOihhLnBhcmVudElkPWksci5wdXNoKHN0KGMvbCx1L2wsbCxpLGgpKSl9fXJldHVybiByfSxfYWNjdW11bGF0ZTpmdW5jdGlvbih0LGUpe3ZhciByPWUubnVtUG9pbnRzP2UucHJvcGVydGllczp0aGlzLm9wdGlvbnMubWFwKHRoaXMucG9pbnRzW2UuaWRdLnByb3BlcnRpZXMpO3RoaXMub3B0aW9ucy5yZWR1Y2UodCxyKX19LGp0LnByb3RvdHlwZS5vcHRpb25zPXttYXhab29tOjE0LGluZGV4TWF4Wm9vbTo1LGluZGV4TWF4UG9pbnRzOjFlNSx0b2xlcmFuY2U6MyxleHRlbnQ6NDA5NixidWZmZXI6NjQsbGluZU1ldHJpY3M6ITEsZGVidWc6MH0sanQucHJvdG90eXBlLnNwbGl0VGlsZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9W3QsZSxyLG5dLGw9dGhpcy5vcHRpb25zLGM9bC5kZWJ1ZztzLmxlbmd0aDspe249cy5wb3AoKSxyPXMucG9wKCksZT1zLnBvcCgpLHQ9cy5wb3AoKTt2YXIgdT0xPDxlLGg9VnQoZSxyLG4pLGY9dGhpcy50aWxlc1toXTtpZighZiYmKGM+MSYmY29uc29sZS50aW1lKFwiY3JlYXRpb25cIiksZj10aGlzLnRpbGVzW2hdPUZ0KHQsZSxyLG4sbCksdGhpcy50aWxlQ29vcmRzLnB1c2goe3o6ZSx4OnIseTpufSksYykpe2M+MSYmKGNvbnNvbGUubG9nKFwidGlsZSB6JWQtJWQtJWQgKGZlYXR1cmVzOiAlZCwgcG9pbnRzOiAlZCwgc2ltcGxpZmllZDogJWQpXCIsZSxyLG4sZi5udW1GZWF0dXJlcyxmLm51bVBvaW50cyxmLm51bVNpbXBsaWZpZWQpLGNvbnNvbGUudGltZUVuZChcImNyZWF0aW9uXCIpKTt2YXIgcD1cInpcIitlO3RoaXMuc3RhdHNbcF09KHRoaXMuc3RhdHNbcF18fDApKzEsdGhpcy50b3RhbCsrfWlmKGYuc291cmNlPXQsaSl7aWYoZT09PWwubWF4Wm9vbXx8ZT09PWkpY29udGludWU7dmFyIGQ9MTw8aS1lO2lmKHIhPT1NYXRoLmZsb29yKGEvZCl8fG4hPT1NYXRoLmZsb29yKG8vZCkpY29udGludWV9ZWxzZSBpZihlPT09bC5pbmRleE1heFpvb218fGYubnVtUG9pbnRzPD1sLmluZGV4TWF4UG9pbnRzKWNvbnRpbnVlO2lmKGYuc291cmNlPW51bGwsMCE9PXQubGVuZ3RoKXtjPjEmJmNvbnNvbGUudGltZShcImNsaXBwaW5nXCIpO3ZhciBnLHYsbSx5LHgsYixfPS41KmwuYnVmZmVyL2wuZXh0ZW50LHc9LjUtXyxrPS41K18sQT0xK187Zz12PW09eT1udWxsLHg9VHQodCx1LHItXyxyK2ssMCxmLm1pblgsZi5tYXhYLGwpLGI9VHQodCx1LHIrdyxyK0EsMCxmLm1pblgsZi5tYXhYLGwpLHQ9bnVsbCx4JiYoZz1UdCh4LHUsbi1fLG4raywxLGYubWluWSxmLm1heFksbCksdj1UdCh4LHUsbit3LG4rQSwxLGYubWluWSxmLm1heFksbCkseD1udWxsKSxiJiYobT1UdChiLHUsbi1fLG4raywxLGYubWluWSxmLm1heFksbCkseT1UdChiLHUsbit3LG4rQSwxLGYubWluWSxmLm1heFksbCksYj1udWxsKSxjPjEmJmNvbnNvbGUudGltZUVuZChcImNsaXBwaW5nXCIpLHMucHVzaChnfHxbXSxlKzEsMipyLDIqbikscy5wdXNoKHZ8fFtdLGUrMSwyKnIsMipuKzEpLHMucHVzaChtfHxbXSxlKzEsMipyKzEsMipuKSxzLnB1c2goeXx8W10sZSsxLDIqcisxLDIqbisxKX19fSxqdC5wcm90b3R5cGUuZ2V0VGlsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5vcHRpb25zLGk9bi5leHRlbnQsYT1uLmRlYnVnO2lmKHQ8MHx8dD4yNClyZXR1cm4gbnVsbDt2YXIgbz0xPDx0LHM9VnQodCxlPShlJW8rbyklbyxyKTtpZih0aGlzLnRpbGVzW3NdKXJldHVybiBQdCh0aGlzLnRpbGVzW3NdLGkpO2E+MSYmY29uc29sZS5sb2coXCJkcmlsbGluZyBkb3duIHRvIHolZC0lZC0lZFwiLHQsZSxyKTtmb3IodmFyIGwsYz10LHU9ZSxoPXI7IWwmJmM+MDspYy0tLHU9TWF0aC5mbG9vcih1LzIpLGg9TWF0aC5mbG9vcihoLzIpLGw9dGhpcy50aWxlc1tWdChjLHUsaCldO3JldHVybiBsJiZsLnNvdXJjZT8oYT4xJiZjb25zb2xlLmxvZyhcImZvdW5kIHBhcmVudCB0aWxlIHolZC0lZC0lZFwiLGMsdSxoKSxhPjEmJmNvbnNvbGUudGltZShcImRyaWxsaW5nIGRvd25cIiksdGhpcy5zcGxpdFRpbGUobC5zb3VyY2UsYyx1LGgsdCxlLHIpLGE+MSYmY29uc29sZS50aW1lRW5kKFwiZHJpbGxpbmcgZG93blwiKSx0aGlzLnRpbGVzW3NdP1B0KHRoaXMudGlsZXNbc10saSk6bnVsbCk6bnVsbH07dmFyIHF0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCxyLG4pe2UuY2FsbCh0aGlzLHQscixVdCksbiYmKHRoaXMubG9hZEdlb0pTT049bil9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWREYXRhPWZ1bmN0aW9uKHQsZSl7dGhpcy5fcGVuZGluZ0NhbGxiYWNrJiZ0aGlzLl9wZW5kaW5nQ2FsbGJhY2sobnVsbCx7YWJhbmRvbmVkOiEwfSksdGhpcy5fcGVuZGluZ0NhbGxiYWNrPWUsdGhpcy5fcGVuZGluZ0xvYWREYXRhUGFyYW1zPXQsdGhpcy5fc3RhdGUmJlwiSWRsZVwiIT09dGhpcy5fc3RhdGU/dGhpcy5fc3RhdGU9XCJOZWVkc0xvYWREYXRhXCI6KHRoaXMuX3N0YXRlPVwiQ29hbGVzY2luZ1wiLHRoaXMuX2xvYWREYXRhKCkpfSxyLnByb3RvdHlwZS5fbG9hZERhdGE9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMuX3BlbmRpbmdDYWxsYmFjayYmdGhpcy5fcGVuZGluZ0xvYWREYXRhUGFyYW1zKXt2YXIgZT10aGlzLl9wZW5kaW5nQ2FsbGJhY2sscj10aGlzLl9wZW5kaW5nTG9hZERhdGFQYXJhbXM7ZGVsZXRlIHRoaXMuX3BlbmRpbmdDYWxsYmFjayxkZWxldGUgdGhpcy5fcGVuZGluZ0xvYWREYXRhUGFyYW1zLHRoaXMubG9hZEdlb0pTT04ocixmdW5jdGlvbihuLGkpe2lmKG58fCFpKXJldHVybiBlKG4pO2lmKFwib2JqZWN0XCIhPXR5cGVvZiBpKXJldHVybiBlKG5ldyBFcnJvcihcIklucHV0IGRhdGEgaXMgbm90IGEgdmFsaWQgR2VvSlNPTiBvYmplY3QuXCIpKTshZnVuY3Rpb24gdChlLHIpe3N3aXRjaChlJiZlLnR5cGV8fG51bGwpe2Nhc2VcIkZlYXR1cmVDb2xsZWN0aW9uXCI6cmV0dXJuIGUuZmVhdHVyZXM9ZS5mZWF0dXJlcy5tYXAoeih0LHIpKSxlO2Nhc2VcIkZlYXR1cmVcIjpyZXR1cm4gZS5nZW9tZXRyeT10KGUuZ2VvbWV0cnksciksZTtjYXNlXCJQb2x5Z29uXCI6Y2FzZVwiTXVsdGlQb2x5Z29uXCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJQb2x5Z29uXCI9PT10LnR5cGU/dC5jb29yZGluYXRlcz1PKHQuY29vcmRpbmF0ZXMsZSk6XCJNdWx0aVBvbHlnb25cIj09PXQudHlwZSYmKHQuY29vcmRpbmF0ZXM9dC5jb29yZGluYXRlcy5tYXAoeihPLGUpKSksdH0oZSxyKTtkZWZhdWx0OnJldHVybiBlfX0oaSwhMCk7dHJ5e3QuX2dlb0pTT05JbmRleD1yLmNsdXN0ZXI/ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvdCh0KX0oci5zdXBlcmNsdXN0ZXJPcHRpb25zKS5sb2FkKGkuZmVhdHVyZXMpOm5ldyBqdChpLHIuZ2VvanNvblZ0T3B0aW9ucyl9Y2F0Y2gobil7cmV0dXJuIGUobil9dC5sb2FkZWQ9e307dmFyIGE9e307aWYoci5yZXF1ZXN0JiZyLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nKXt2YXIgbz13KHIucmVxdWVzdC51cmwpO28mJihhLnJlc291cmNlVGltaW5nPXt9LGEucmVzb3VyY2VUaW1pbmdbci5zb3VyY2VdPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobykpKX1lKG51bGwsYSl9KX19LHIucHJvdG90eXBlLmNvYWxlc2NlPWZ1bmN0aW9uKCl7XCJDb2FsZXNjaW5nXCI9PT10aGlzLl9zdGF0ZT90aGlzLl9zdGF0ZT1cIklkbGVcIjpcIk5lZWRzTG9hZERhdGFcIj09PXRoaXMuX3N0YXRlJiYodGhpcy5fc3RhdGU9XCJDb2FsZXNjaW5nXCIsdGhpcy5fbG9hZERhdGEoKSl9LHIucHJvdG90eXBlLnJlbG9hZFRpbGU9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzLmxvYWRlZCxpPXQudWlkO3JldHVybiBuJiZuW2ldP2UucHJvdG90eXBlLnJlbG9hZFRpbGUuY2FsbCh0aGlzLHQscik6dGhpcy5sb2FkVGlsZSh0LHIpfSxyLnByb3RvdHlwZS5sb2FkR2VvSlNPTj1mdW5jdGlvbihlLHIpe2lmKGUucmVxdWVzdCl0LmdldEpTT04oZS5yZXF1ZXN0LHIpO2Vsc2V7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUuZGF0YSlyZXR1cm4gcihuZXcgRXJyb3IoXCJJbnB1dCBkYXRhIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LlwiKSk7dHJ5e3JldHVybiByKG51bGwsSlNPTi5wYXJzZShlLmRhdGEpKX1jYXRjaCh0KXtyZXR1cm4gcihuZXcgRXJyb3IoXCJJbnB1dCBkYXRhIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LlwiKSl9fX0sci5wcm90b3R5cGUucmVtb3ZlU291cmNlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fcGVuZGluZ0NhbGxiYWNrJiZ0aGlzLl9wZW5kaW5nQ2FsbGJhY2sobnVsbCx7YWJhbmRvbmVkOiEwfSksZSgpfSxyfShBKSxIdD1mdW5jdGlvbihlKXt2YXIgcj10aGlzO3RoaXMuc2VsZj1lLHRoaXMuYWN0b3I9bmV3IHQuZGVmYXVsdCQ3KGUsdGhpcyksdGhpcy5sYXllckluZGV4ZXM9e30sdGhpcy53b3JrZXJTb3VyY2VUeXBlcz17dmVjdG9yOkEsZ2VvanNvbjpxdH0sdGhpcy53b3JrZXJTb3VyY2VzPXt9LHRoaXMuZGVtV29ya2VyU291cmNlcz17fSx0aGlzLnNlbGYucmVnaXN0ZXJXb3JrZXJTb3VyY2U9ZnVuY3Rpb24odCxlKXtpZihyLndvcmtlclNvdXJjZVR5cGVzW3RdKXRocm93IG5ldyBFcnJvcignV29ya2VyIHNvdXJjZSB3aXRoIG5hbWUgXCInK3QrJ1wiIGFscmVhZHkgcmVnaXN0ZXJlZC4nKTtyLndvcmtlclNvdXJjZVR5cGVzW3RdPWV9LHRoaXMuc2VsZi5yZWdpc3RlclJUTFRleHRQbHVnaW49ZnVuY3Rpb24oZSl7aWYodC5wbHVnaW4uaXNMb2FkZWQoKSl0aHJvdyBuZXcgRXJyb3IoXCJSVEwgdGV4dCBwbHVnaW4gYWxyZWFkeSByZWdpc3RlcmVkLlwiKTt0LnBsdWdpbi5hcHBseUFyYWJpY1NoYXBpbmc9ZS5hcHBseUFyYWJpY1NoYXBpbmcsdC5wbHVnaW4ucHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0PWUucHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0fX07cmV0dXJuIEh0LnByb3RvdHlwZS5zZXRMYXllcnM9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0TGF5ZXJJbmRleCh0KS5yZXBsYWNlKGUpLHIoKX0sSHQucHJvdG90eXBlLnVwZGF0ZUxheWVycz1mdW5jdGlvbih0LGUscil7dGhpcy5nZXRMYXllckluZGV4KHQpLnVwZGF0ZShlLmxheWVycyxlLnJlbW92ZWRJZHMpLHIoKX0sSHQucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldFdvcmtlclNvdXJjZSh0LGUudHlwZSxlLnNvdXJjZSkubG9hZFRpbGUoZSxyKX0sSHQucHJvdG90eXBlLmxvYWRERU1UaWxlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldERFTVdvcmtlclNvdXJjZSh0LGUuc291cmNlKS5sb2FkVGlsZShlLHIpfSxIdC5wcm90b3R5cGUucmVsb2FkVGlsZT1mdW5jdGlvbih0LGUscil7dGhpcy5nZXRXb3JrZXJTb3VyY2UodCxlLnR5cGUsZS5zb3VyY2UpLnJlbG9hZFRpbGUoZSxyKX0sSHQucHJvdG90eXBlLmFib3J0VGlsZT1mdW5jdGlvbih0LGUscil7dGhpcy5nZXRXb3JrZXJTb3VyY2UodCxlLnR5cGUsZS5zb3VyY2UpLmFib3J0VGlsZShlLHIpfSxIdC5wcm90b3R5cGUucmVtb3ZlVGlsZT1mdW5jdGlvbih0LGUscil7dGhpcy5nZXRXb3JrZXJTb3VyY2UodCxlLnR5cGUsZS5zb3VyY2UpLnJlbW92ZVRpbGUoZSxyKX0sSHQucHJvdG90eXBlLnJlbW92ZURFTVRpbGU9ZnVuY3Rpb24odCxlKXt0aGlzLmdldERFTVdvcmtlclNvdXJjZSh0LGUuc291cmNlKS5yZW1vdmVUaWxlKGUpfSxIdC5wcm90b3R5cGUucmVtb3ZlU291cmNlPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLndvcmtlclNvdXJjZXNbdF0mJnRoaXMud29ya2VyU291cmNlc1t0XVtlLnR5cGVdJiZ0aGlzLndvcmtlclNvdXJjZXNbdF1bZS50eXBlXVtlLnNvdXJjZV0pe3ZhciBuPXRoaXMud29ya2VyU291cmNlc1t0XVtlLnR5cGVdW2Uuc291cmNlXTtkZWxldGUgdGhpcy53b3JrZXJTb3VyY2VzW3RdW2UudHlwZV1bZS5zb3VyY2VdLHZvaWQgMCE9PW4ucmVtb3ZlU291cmNlP24ucmVtb3ZlU291cmNlKGUscik6cigpfX0sSHQucHJvdG90eXBlLmxvYWRXb3JrZXJTb3VyY2U9ZnVuY3Rpb24odCxlLHIpe3RyeXt0aGlzLnNlbGYuaW1wb3J0U2NyaXB0cyhlLnVybCkscigpfWNhdGNoKHQpe3IodC50b1N0cmluZygpKX19LEh0LnByb3RvdHlwZS5sb2FkUlRMVGV4dFBsdWdpbj1mdW5jdGlvbihlLHIsbil7dHJ5e3QucGx1Z2luLmlzTG9hZGVkKCl8fCh0aGlzLnNlbGYuaW1wb3J0U2NyaXB0cyhyKSxuKHQucGx1Z2luLmlzTG9hZGVkKCk/bnVsbDpuZXcgRXJyb3IoXCJSVEwgVGV4dCBQbHVnaW4gZmFpbGVkIHRvIGltcG9ydCBzY3JpcHRzIGZyb20gXCIrcikpKX1jYXRjaCh0KXtuKHQudG9TdHJpbmcoKSl9fSxIdC5wcm90b3R5cGUuZ2V0TGF5ZXJJbmRleD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxheWVySW5kZXhlc1t0XTtyZXR1cm4gZXx8KGU9dGhpcy5sYXllckluZGV4ZXNbdF09bmV3IG4pLGV9LEh0LnByb3RvdHlwZS5nZXRXb3JrZXJTb3VyY2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXM7aWYodGhpcy53b3JrZXJTb3VyY2VzW3RdfHwodGhpcy53b3JrZXJTb3VyY2VzW3RdPXt9KSx0aGlzLndvcmtlclNvdXJjZXNbdF1bZV18fCh0aGlzLndvcmtlclNvdXJjZXNbdF1bZV09e30pLCF0aGlzLndvcmtlclNvdXJjZXNbdF1bZV1bcl0pe3ZhciBpPXtzZW5kOmZ1bmN0aW9uKGUscixpKXtuLmFjdG9yLnNlbmQoZSxyLGksdCl9fTt0aGlzLndvcmtlclNvdXJjZXNbdF1bZV1bcl09bmV3IHRoaXMud29ya2VyU291cmNlVHlwZXNbZV0oaSx0aGlzLmdldExheWVySW5kZXgodCkpfXJldHVybiB0aGlzLndvcmtlclNvdXJjZXNbdF1bZV1bcl19LEh0LnByb3RvdHlwZS5nZXRERU1Xb3JrZXJTb3VyY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5kZW1Xb3JrZXJTb3VyY2VzW3RdfHwodGhpcy5kZW1Xb3JrZXJTb3VyY2VzW3RdPXt9KSx0aGlzLmRlbVdvcmtlclNvdXJjZXNbdF1bZV18fCh0aGlzLmRlbVdvcmtlclNvdXJjZXNbdF1bZV09bmV3IFQpLHRoaXMuZGVtV29ya2VyU291cmNlc1t0XVtlXX0sXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZuZXcgSHQoc2VsZiksSHR9KSxpKDAsZnVuY3Rpb24odCl7dmFyIGU9dC5jcmVhdGVDb21tb25qc01vZHVsZShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3JldHVybiEhKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudCYmQXJyYXkucHJvdG90eXBlJiZBcnJheS5wcm90b3R5cGUuZXZlcnkmJkFycmF5LnByb3RvdHlwZS5maWx0ZXImJkFycmF5LnByb3RvdHlwZS5mb3JFYWNoJiZBcnJheS5wcm90b3R5cGUuaW5kZXhPZiYmQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mJiZBcnJheS5wcm90b3R5cGUubWFwJiZBcnJheS5wcm90b3R5cGUuc29tZSYmQXJyYXkucHJvdG90eXBlLnJlZHVjZSYmQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0JiZBcnJheS5pc0FycmF5JiZGdW5jdGlvbi5wcm90b3R5cGUmJkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kJiZPYmplY3Qua2V5cyYmT2JqZWN0LmNyZWF0ZSYmT2JqZWN0LmdldFByb3RvdHlwZU9mJiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyYmT2JqZWN0LmlzU2VhbGVkJiZPYmplY3QuaXNGcm96ZW4mJk9iamVjdC5pc0V4dGVuc2libGUmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSYmT2JqZWN0LmRlZmluZVByb3BlcnRpZXMmJk9iamVjdC5zZWFsJiZPYmplY3QuZnJlZXplJiZPYmplY3QucHJldmVudEV4dGVuc2lvbnMmJlwiSlNPTlwiaW4gd2luZG93JiZcInBhcnNlXCJpbiBKU09OJiZcInN0cmluZ2lmeVwiaW4gSlNPTiYmZnVuY3Rpb24oKXtpZighKFwiV29ya2VyXCJpbiB3aW5kb3cmJlwiQmxvYlwiaW4gd2luZG93JiZcIlVSTFwiaW4gd2luZG93KSlyZXR1cm4hMTt2YXIgdCxlLHI9bmV3IEJsb2IoW1wiXCJdLHt0eXBlOlwidGV4dC9qYXZhc2NyaXB0XCJ9KSxuPVVSTC5jcmVhdGVPYmplY3RVUkwocik7dHJ5e2U9bmV3IFdvcmtlcihuKSx0PSEwfWNhdGNoKGUpe3Q9ITF9cmV0dXJuIGUmJmUudGVybWluYXRlKCksVVJMLnJldm9rZU9iamVjdFVSTChuKSx0fSgpJiZcIlVpbnQ4Q2xhbXBlZEFycmF5XCJpbiB3aW5kb3cmJmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT1yW3RdJiYoclt0XT1mdW5jdGlvbih0KXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLG49T2JqZWN0LmNyZWF0ZShlLndlYkdMQ29udGV4dEF0dHJpYnV0ZXMpO3JldHVybiBuLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ9dCxyLnByb2JhYmx5U3VwcG9ydHNDb250ZXh0P3IucHJvYmFibHlTdXBwb3J0c0NvbnRleHQoXCJ3ZWJnbFwiLG4pfHxyLnByb2JhYmx5U3VwcG9ydHNDb250ZXh0KFwiZXhwZXJpbWVudGFsLXdlYmdsXCIsbik6ci5zdXBwb3J0c0NvbnRleHQ/ci5zdXBwb3J0c0NvbnRleHQoXCJ3ZWJnbFwiLG4pfHxyLnN1cHBvcnRzQ29udGV4dChcImV4cGVyaW1lbnRhbC13ZWJnbFwiLG4pOnIuZ2V0Q29udGV4dChcIndlYmdsXCIsbil8fHIuZ2V0Q29udGV4dChcImV4cGVyaW1lbnRhbC13ZWJnbFwiLG4pfSh0KSksclt0XX0odCYmdC5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0KSl9dC5leHBvcnRzP3QuZXhwb3J0cz1lOndpbmRvdyYmKHdpbmRvdy5tYXBib3hnbD13aW5kb3cubWFwYm94Z2x8fHt9LHdpbmRvdy5tYXBib3hnbC5zdXBwb3J0ZWQ9ZSk7dmFyIHI9e307ZS53ZWJHTENvbnRleHRBdHRyaWJ1dGVzPXthbnRpYWxpYXM6ITEsYWxwaGE6ITAsc3RlbmNpbDohMCxkZXB0aDohMH19KSxyPXQuZGVmYXVsdC5wZXJmb3JtYW5jZSYmdC5kZWZhdWx0LnBlcmZvcm1hbmNlLm5vdz90LmRlZmF1bHQucGVyZm9ybWFuY2Uubm93LmJpbmQodC5kZWZhdWx0LnBlcmZvcm1hbmNlKTpEYXRlLm5vdy5iaW5kKERhdGUpLG49dC5kZWZhdWx0LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8dC5kZWZhdWx0Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZXx8dC5kZWZhdWx0LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZXx8dC5kZWZhdWx0Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lLGk9dC5kZWZhdWx0LmNhbmNlbEFuaW1hdGlvbkZyYW1lfHx0LmRlZmF1bHQubW96Q2FuY2VsQW5pbWF0aW9uRnJhbWV8fHQuZGVmYXVsdC53ZWJraXRDYW5jZWxBbmltYXRpb25GcmFtZXx8dC5kZWZhdWx0Lm1zQ2FuY2VsQW5pbWF0aW9uRnJhbWUsYT17bm93OnIsZnJhbWU6ZnVuY3Rpb24odCl7cmV0dXJuIG4odCl9LGNhbmNlbEZyYW1lOmZ1bmN0aW9uKHQpe3JldHVybiBpKHQpfSxnZXRJbWFnZURhdGE6ZnVuY3Rpb24oZSl7dmFyIHI9dC5kZWZhdWx0LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksbj1yLmdldENvbnRleHQoXCIyZFwiKTtpZighbil0aHJvdyBuZXcgRXJyb3IoXCJmYWlsZWQgdG8gY3JlYXRlIGNhbnZhcyAyZCBjb250ZXh0XCIpO3JldHVybiByLndpZHRoPWUud2lkdGgsci5oZWlnaHQ9ZS5oZWlnaHQsbi5kcmF3SW1hZ2UoZSwwLDAsZS53aWR0aCxlLmhlaWdodCksbi5nZXRJbWFnZURhdGEoMCwwLGUud2lkdGgsZS5oZWlnaHQpfSxoYXJkd2FyZUNvbmN1cnJlbmN5OnQuZGVmYXVsdC5uYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeXx8NCxnZXQgZGV2aWNlUGl4ZWxSYXRpbygpe3JldHVybiB0LmRlZmF1bHQuZGV2aWNlUGl4ZWxSYXRpb30sc3VwcG9ydHNXZWJwOiExfTtpZih0LmRlZmF1bHQuZG9jdW1lbnQpe3ZhciBvPXQuZGVmYXVsdC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO28ub25sb2FkPWZ1bmN0aW9uKCl7YS5zdXBwb3J0c1dlYnA9ITB9LG8uc3JjPVwiZGF0YTppbWFnZS93ZWJwO2Jhc2U2NCxVa2xHUmg0QUFBQlhSVUpRVmxBNFRCRUFBQUF2QVFBQUFBZlEvLzczdi8rQmlPaC9BQUE9XCJ9dmFyIHM9e2NyZWF0ZTpmdW5jdGlvbihlLHIsbil7dmFyIGk9dC5kZWZhdWx0LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSk7cmV0dXJuIHImJihpLmNsYXNzTmFtZT1yKSxuJiZuLmFwcGVuZENoaWxkKGkpLGl9LGNyZWF0ZU5TOmZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZGVmYXVsdC5kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZSxyKX19LGw9dC5kZWZhdWx0LmRvY3VtZW50P3QuZGVmYXVsdC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGU6bnVsbDtmdW5jdGlvbiBjKHQpe2lmKCFsKXJldHVybiBudWxsO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKHRbZV1pbiBsKXJldHVybiB0W2VdO3JldHVybiB0WzBdfXZhciB1LGg9YyhbXCJ1c2VyU2VsZWN0XCIsXCJNb3pVc2VyU2VsZWN0XCIsXCJXZWJraXRVc2VyU2VsZWN0XCIsXCJtc1VzZXJTZWxlY3RcIl0pO3MuZGlzYWJsZURyYWc9ZnVuY3Rpb24oKXtsJiZoJiYodT1sW2hdLGxbaF09XCJub25lXCIpfSxzLmVuYWJsZURyYWc9ZnVuY3Rpb24oKXtsJiZoJiYobFtoXT11KX07dmFyIGY9YyhbXCJ0cmFuc2Zvcm1cIixcIldlYmtpdFRyYW5zZm9ybVwiXSk7cy5zZXRUcmFuc2Zvcm09ZnVuY3Rpb24odCxlKXt0LnN0eWxlW2ZdPWV9O3ZhciBwPSExO3RyeXt2YXIgZD1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sXCJwYXNzaXZlXCIse2dldDpmdW5jdGlvbigpe3A9ITB9fSk7dC5kZWZhdWx0LmFkZEV2ZW50TGlzdGVuZXIoXCJ0ZXN0XCIsZCxkKSx0LmRlZmF1bHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRlc3RcIixkLGQpfWNhdGNoKHQpe3A9ITF9cy5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxyLG4pe3ZvaWQgMD09PW4mJihuPXt9KSxcInBhc3NpdmVcImluIG4mJnA/dC5hZGRFdmVudExpc3RlbmVyKGUscixuKTp0LmFkZEV2ZW50TGlzdGVuZXIoZSxyLG4uY2FwdHVyZSl9LHMucmVtb3ZlRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUscixuKXt2b2lkIDA9PT1uJiYobj17fSksXCJwYXNzaXZlXCJpbiBuJiZwP3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHIsbik6dC5yZW1vdmVFdmVudExpc3RlbmVyKGUscixuLmNhcHR1cmUpfTt2YXIgZz1mdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSx0LmRlZmF1bHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsZywhMCl9O3Muc3VwcHJlc3NDbGljaz1mdW5jdGlvbigpe3QuZGVmYXVsdC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIixnLCEwKSx0LmRlZmF1bHQuc2V0VGltZW91dChmdW5jdGlvbigpe3QuZGVmYXVsdC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIixnLCEwKX0sMCl9LHMubW91c2VQb3M9ZnVuY3Rpb24oZSxyKXt2YXIgbj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiByPXIudG91Y2hlcz9yLnRvdWNoZXNbMF06cixuZXcgdC5kZWZhdWx0JDEoci5jbGllbnRYLW4ubGVmdC1lLmNsaWVudExlZnQsci5jbGllbnRZLW4udG9wLWUuY2xpZW50VG9wKX0scy50b3VjaFBvcz1mdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9W10sYT1cInRvdWNoZW5kXCI9PT1yLnR5cGU/ci5jaGFuZ2VkVG91Y2hlczpyLnRvdWNoZXMsbz0wO288YS5sZW5ndGg7bysrKWkucHVzaChuZXcgdC5kZWZhdWx0JDEoYVtvXS5jbGllbnRYLW4ubGVmdC1lLmNsaWVudExlZnQsYVtvXS5jbGllbnRZLW4udG9wLWUuY2xpZW50VG9wKSk7cmV0dXJuIGl9LHMubW91c2VCdXR0b249ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXQuZGVmYXVsdC5JbnN0YWxsVHJpZ2dlciYmMj09PWUuYnV0dG9uJiZlLmN0cmxLZXkmJnQuZGVmYXVsdC5uYXZpZ2F0b3IucGxhdGZvcm0udG9VcHBlckNhc2UoKS5pbmRleE9mKFwiTUFDXCIpPj0wPzA6ZS5idXR0b259LHMucmVtb3ZlPWZ1bmN0aW9uKHQpe3QucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfTt2YXIgdj17QVBJX1VSTDpcImh0dHBzOi8vYXBpLm1hcGJveC5jb21cIixSRVFVSVJFX0FDQ0VTU19UT0tFTjohMCxBQ0NFU1NfVE9LRU46bnVsbH0sbT1cIlNlZSBodHRwczovL3d3dy5tYXBib3guY29tL2FwaS1kb2N1bWVudGF0aW9uLyNhY2Nlc3MtdG9rZW5zXCI7ZnVuY3Rpb24geSh0LGUpe3ZhciByPVQodi5BUElfVVJMKTtpZih0LnByb3RvY29sPXIucHJvdG9jb2wsdC5hdXRob3JpdHk9ci5hdXRob3JpdHksXCIvXCIhPT1yLnBhdGgmJih0LnBhdGg9XCJcIityLnBhdGgrdC5wYXRoKSwhdi5SRVFVSVJFX0FDQ0VTU19UT0tFTilyZXR1cm4gTSh0KTtpZighKGU9ZXx8di5BQ0NFU1NfVE9LRU4pKXRocm93IG5ldyBFcnJvcihcIkFuIEFQSSBhY2Nlc3MgdG9rZW4gaXMgcmVxdWlyZWQgdG8gdXNlIE1hcGJveCBHTC4gXCIrbSk7aWYoXCJzXCI9PT1lWzBdKXRocm93IG5ldyBFcnJvcihcIlVzZSBhIHB1YmxpYyBhY2Nlc3MgdG9rZW4gKHBrLiopIHdpdGggTWFwYm94IEdMLCBub3QgYSBzZWNyZXQgYWNjZXNzIHRva2VuIChzay4qKS4gXCIrbSk7cmV0dXJuIHQucGFyYW1zLnB1c2goXCJhY2Nlc3NfdG9rZW49XCIrZSksTSh0KX1mdW5jdGlvbiB4KHQpe3JldHVybiAwPT09dC5pbmRleE9mKFwibWFwYm94OlwiKX12YXIgYj1mdW5jdGlvbih0LGUpe2lmKCF4KHQpKXJldHVybiB0O3ZhciByPVQodCk7cmV0dXJuIHIucGF0aD1cIi92NC9cIityLmF1dGhvcml0eStcIi5qc29uXCIsci5wYXJhbXMucHVzaChcInNlY3VyZVwiKSx5KHIsZSl9LF89ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9VCh0KTtyZXR1cm4geCh0KT8oaS5wYXRoPVwiL3N0eWxlcy92MVwiK2kucGF0aCtcIi9zcHJpdGVcIitlK3IseShpLG4pKTooaS5wYXRoKz1cIlwiK2UrcixNKGkpKX0sdz0vKFxcLihwbmd8anBnKVxcZCopKD89JCkvLGs9ZnVuY3Rpb24odCxlLHIpe2lmKCFlfHwheChlKSlyZXR1cm4gdDt2YXIgbj1UKHQpLGk9YS5kZXZpY2VQaXhlbFJhdGlvPj0yfHw1MTI9PT1yP1wiQDJ4XCI6XCJcIixvPWEuc3VwcG9ydHNXZWJwP1wiLndlYnBcIjpcIiQxXCI7cmV0dXJuIG4ucGF0aD1uLnBhdGgucmVwbGFjZSh3LFwiXCIraStvKSxmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKykwPT09dFtlXS5pbmRleE9mKFwiYWNjZXNzX3Rva2VuPXRrLlwiKSYmKHRbZV09XCJhY2Nlc3NfdG9rZW49XCIrKHYuQUNDRVNTX1RPS0VOfHxcIlwiKSl9KG4ucGFyYW1zKSxNKG4pfSxBPS9eKFxcdyspOlxcL1xcLyhbXlxcLz9dKikoXFwvW14/XSspP1xcPz8oLispPy87ZnVuY3Rpb24gVCh0KXt2YXIgZT10Lm1hdGNoKEEpO2lmKCFlKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBwYXJzZSBVUkwgb2JqZWN0XCIpO3JldHVybntwcm90b2NvbDplWzFdLGF1dGhvcml0eTplWzJdLHBhdGg6ZVszXXx8XCIvXCIscGFyYW1zOmVbNF0/ZVs0XS5zcGxpdChcIiZcIik6W119fWZ1bmN0aW9uIE0odCl7dmFyIGU9dC5wYXJhbXMubGVuZ3RoP1wiP1wiK3QucGFyYW1zLmpvaW4oXCImXCIpOlwiXCI7cmV0dXJuIHQucHJvdG9jb2wrXCI6Ly9cIit0LmF1dGhvcml0eSt0LnBhdGgrZX12YXIgUz10LmRlZmF1bHQuSFRNTEltYWdlRWxlbWVudCxFPXQuZGVmYXVsdC5IVE1MQ2FudmFzRWxlbWVudCxDPXQuZGVmYXVsdC5IVE1MVmlkZW9FbGVtZW50LEw9dC5kZWZhdWx0LkltYWdlRGF0YSx6PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuY29udGV4dD10LHRoaXMuZm9ybWF0PXIsdGhpcy50ZXh0dXJlPXQuZ2wuY3JlYXRlVGV4dHVyZSgpLHRoaXMudXBkYXRlKGUsbil9O3oucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPXQud2lkdGgsbj10LmhlaWdodCxpPSF0aGlzLnNpemV8fHRoaXMuc2l6ZVswXSE9PXJ8fHRoaXMuc2l6ZVsxXSE9PW4sYT10aGlzLmNvbnRleHQsbz1hLmdsO3RoaXMudXNlTWlwbWFwPUJvb2xlYW4oZSYmZS51c2VNaXBtYXApLG8uYmluZFRleHR1cmUoby5URVhUVVJFXzJELHRoaXMudGV4dHVyZSksaT8odGhpcy5zaXplPVtyLG5dLGEucGl4ZWxTdG9yZVVucGFjay5zZXQoMSksdGhpcy5mb3JtYXQhPT1vLlJHQkF8fGUmJiExPT09ZS5wcmVtdWx0aXBseXx8YS5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYS5zZXQoITApLHQgaW5zdGFuY2VvZiBTfHx0IGluc3RhbmNlb2YgRXx8dCBpbnN0YW5jZW9mIEN8fHQgaW5zdGFuY2VvZiBMP28udGV4SW1hZ2UyRChvLlRFWFRVUkVfMkQsMCx0aGlzLmZvcm1hdCx0aGlzLmZvcm1hdCxvLlVOU0lHTkVEX0JZVEUsdCk6by50ZXhJbWFnZTJEKG8uVEVYVFVSRV8yRCwwLHRoaXMuZm9ybWF0LHIsbiwwLHRoaXMuZm9ybWF0LG8uVU5TSUdORURfQllURSx0LmRhdGEpKTp0IGluc3RhbmNlb2YgU3x8dCBpbnN0YW5jZW9mIEV8fHQgaW5zdGFuY2VvZiBDfHx0IGluc3RhbmNlb2YgTD9vLnRleFN1YkltYWdlMkQoby5URVhUVVJFXzJELDAsMCwwLG8uUkdCQSxvLlVOU0lHTkVEX0JZVEUsdCk6by50ZXhTdWJJbWFnZTJEKG8uVEVYVFVSRV8yRCwwLDAsMCxyLG4sby5SR0JBLG8uVU5TSUdORURfQllURSx0LmRhdGEpLHRoaXMudXNlTWlwbWFwJiZ0aGlzLmlzU2l6ZVBvd2VyT2ZUd28oKSYmby5nZW5lcmF0ZU1pcG1hcChvLlRFWFRVUkVfMkQpfSx6LnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmNvbnRleHQuZ2w7bi5iaW5kVGV4dHVyZShuLlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKSxyIT09bi5MSU5FQVJfTUlQTUFQX05FQVJFU1R8fHRoaXMuaXNTaXplUG93ZXJPZlR3bygpfHwocj1uLkxJTkVBUiksdCE9PXRoaXMuZmlsdGVyJiYobi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfTUFHX0ZJTFRFUix0KSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NSU5fRklMVEVSLHJ8fHQpLHRoaXMuZmlsdGVyPXQpLGUhPT10aGlzLndyYXAmJihuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1MsZSksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9ULGUpLHRoaXMud3JhcD1lKX0sei5wcm90b3R5cGUuaXNTaXplUG93ZXJPZlR3bz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemVbMF09PT10aGlzLnNpemVbMV0mJk1hdGgubG9nKHRoaXMuc2l6ZVswXSkvTWF0aC5MTjIlMT09MH0sei5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuY29udGV4dC5nbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSksdGhpcy50ZXh0dXJlPW51bGx9O3ZhciBPPWZ1bmN0aW9uKCl7dGhpcy5pbWFnZXM9e30sdGhpcy5sb2FkZWQ9ITEsdGhpcy5yZXF1ZXN0b3JzPVtdLHRoaXMuc2hlbGZQYWNrPW5ldyB0LmRlZmF1bHQkMig2NCw2NCx7YXV0b1Jlc2l6ZTohMH0pLHRoaXMucGF0dGVybnM9e30sdGhpcy5hdGxhc0ltYWdlPW5ldyB0LlJHQkFJbWFnZSh7d2lkdGg6NjQsaGVpZ2h0OjY0fSksdGhpcy5kaXJ0eT0hMH07Ty5wcm90b3R5cGUuaXNMb2FkZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2FkZWR9LE8ucHJvdG90eXBlLnNldExvYWRlZD1mdW5jdGlvbih0KXtpZih0aGlzLmxvYWRlZCE9PXQmJih0aGlzLmxvYWRlZD10LHQpKXtmb3IodmFyIGU9MCxyPXRoaXMucmVxdWVzdG9ycztlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0saT1uLmlkcyxhPW4uY2FsbGJhY2s7dGhpcy5fbm90aWZ5KGksYSl9dGhpcy5yZXF1ZXN0b3JzPVtdfX0sTy5wcm90b3R5cGUuZ2V0SW1hZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW1hZ2VzW3RdfSxPLnByb3RvdHlwZS5hZGRJbWFnZT1mdW5jdGlvbih0LGUpe3RoaXMuaW1hZ2VzW3RdPWV9LE8ucHJvdG90eXBlLnJlbW92ZUltYWdlPWZ1bmN0aW9uKHQpe2RlbGV0ZSB0aGlzLmltYWdlc1t0XTt2YXIgZT10aGlzLnBhdHRlcm5zW3RdO2UmJih0aGlzLnNoZWxmUGFjay51bnJlZihlLmJpbiksZGVsZXRlIHRoaXMucGF0dGVybnNbdF0pfSxPLnByb3RvdHlwZS5nZXRJbWFnZXM9ZnVuY3Rpb24odCxlKXt2YXIgcj0hMDtpZighdGhpcy5pc0xvYWRlZCgpKWZvcih2YXIgbj0wLGk9dDtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07dGhpcy5pbWFnZXNbYV18fChyPSExKX10aGlzLmlzTG9hZGVkKCl8fHI/dGhpcy5fbm90aWZ5KHQsZSk6dGhpcy5yZXF1ZXN0b3JzLnB1c2goe2lkczp0LGNhbGxiYWNrOmV9KX0sTy5wcm90b3R5cGUuX25vdGlmeT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXSxvPXRoaXMuaW1hZ2VzW2FdO28mJihyW2FdPXtkYXRhOm8uZGF0YS5jbG9uZSgpLHBpeGVsUmF0aW86by5waXhlbFJhdGlvLHNkZjpvLnNkZn0pfWUobnVsbCxyKX0sTy5wcm90b3R5cGUuZ2V0UGl4ZWxTaXplPWZ1bmN0aW9uKCl7cmV0dXJue3dpZHRoOnRoaXMuc2hlbGZQYWNrLncsaGVpZ2h0OnRoaXMuc2hlbGZQYWNrLmh9fSxPLnByb3RvdHlwZS5nZXRQYXR0ZXJuPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMucGF0dGVybnNbZV07aWYocilyZXR1cm4gci5wb3NpdGlvbjt2YXIgbj10aGlzLmdldEltYWdlKGUpO2lmKCFuKXJldHVybiBudWxsO3ZhciBpPW4uZGF0YS53aWR0aCsyLGE9bi5kYXRhLmhlaWdodCsyLG89dGhpcy5zaGVsZlBhY2sucGFja09uZShpLGEpO2lmKCFvKXJldHVybiBudWxsO3RoaXMuYXRsYXNJbWFnZS5yZXNpemUodGhpcy5nZXRQaXhlbFNpemUoKSk7dmFyIHM9bi5kYXRhLGw9dGhpcy5hdGxhc0ltYWdlLGM9by54KzEsdT1vLnkrMSxoPXMud2lkdGgsZj1zLmhlaWdodDt0LlJHQkFJbWFnZS5jb3B5KHMsbCx7eDowLHk6MH0se3g6Yyx5OnV9LHt3aWR0aDpoLGhlaWdodDpmfSksdC5SR0JBSW1hZ2UuY29weShzLGwse3g6MCx5OmYtMX0se3g6Yyx5OnUtMX0se3dpZHRoOmgsaGVpZ2h0OjF9KSx0LlJHQkFJbWFnZS5jb3B5KHMsbCx7eDowLHk6MH0se3g6Yyx5OnUrZn0se3dpZHRoOmgsaGVpZ2h0OjF9KSx0LlJHQkFJbWFnZS5jb3B5KHMsbCx7eDpoLTEseTowfSx7eDpjLTEseTp1fSx7d2lkdGg6MSxoZWlnaHQ6Zn0pLHQuUkdCQUltYWdlLmNvcHkocyxsLHt4OjAseTowfSx7eDpjK2gseTp1fSx7d2lkdGg6MSxoZWlnaHQ6Zn0pLHRoaXMuZGlydHk9ITA7dmFyIHA9bmV3IHQuSW1hZ2VQb3NpdGlvbihvLG4pO3JldHVybiB0aGlzLnBhdHRlcm5zW2VdPXtiaW46byxwb3NpdGlvbjpwfSxwfSxPLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2w7dGhpcy5hdGxhc1RleHR1cmU/dGhpcy5kaXJ0eSYmKHRoaXMuYXRsYXNUZXh0dXJlLnVwZGF0ZSh0aGlzLmF0bGFzSW1hZ2UpLHRoaXMuZGlydHk9ITEpOnRoaXMuYXRsYXNUZXh0dXJlPW5ldyB6KHQsdGhpcy5hdGxhc0ltYWdlLGUuUkdCQSksdGhpcy5hdGxhc1RleHR1cmUuYmluZChlLkxJTkVBUixlLkNMQU1QX1RPX0VER0UpfTt2YXIgST1QLEQ9MWUyMDtmdW5jdGlvbiBQKHQsZSxyLG4saSxhKXt0aGlzLmZvbnRTaXplPXR8fDI0LHRoaXMuYnVmZmVyPXZvaWQgMD09PWU/MzplLHRoaXMuY3V0b2ZmPW58fC4yNSx0aGlzLmZvbnRGYW1pbHk9aXx8XCJzYW5zLXNlcmlmXCIsdGhpcy5mb250V2VpZ2h0PWF8fFwibm9ybWFsXCIsdGhpcy5yYWRpdXM9cnx8ODt2YXIgbz10aGlzLnNpemU9dGhpcy5mb250U2l6ZSsyKnRoaXMuYnVmZmVyO3RoaXMuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksdGhpcy5jYW52YXMud2lkdGg9dGhpcy5jYW52YXMuaGVpZ2h0PW8sdGhpcy5jdHg9dGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpLHRoaXMuY3R4LmZvbnQ9dGhpcy5mb250V2VpZ2h0K1wiIFwiK3RoaXMuZm9udFNpemUrXCJweCBcIit0aGlzLmZvbnRGYW1pbHksdGhpcy5jdHgudGV4dEJhc2VsaW5lPVwibWlkZGxlXCIsdGhpcy5jdHguZmlsbFN0eWxlPVwiYmxhY2tcIix0aGlzLmdyaWRPdXRlcj1uZXcgRmxvYXQ2NEFycmF5KG8qbyksdGhpcy5ncmlkSW5uZXI9bmV3IEZsb2F0NjRBcnJheShvKm8pLHRoaXMuZj1uZXcgRmxvYXQ2NEFycmF5KG8pLHRoaXMuZD1uZXcgRmxvYXQ2NEFycmF5KG8pLHRoaXMuej1uZXcgRmxvYXQ2NEFycmF5KG8rMSksdGhpcy52PW5ldyBJbnQxNkFycmF5KG8pLHRoaXMubWlkZGxlPU1hdGgucm91bmQoby8yKihuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJHZWNrby9cIik+PTA/MS4yOjEpKX1mdW5jdGlvbiBSKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcz0wO3M8ZTtzKyspe2Zvcih2YXIgbD0wO2w8cjtsKyspbltsXT10W2wqZStzXTtmb3IoRihuLGksYSxvLHIpLGw9MDtsPHI7bCsrKXRbbCplK3NdPWlbbF19Zm9yKGw9MDtsPHI7bCsrKXtmb3Iocz0wO3M8ZTtzKyspbltzXT10W2wqZStzXTtmb3IoRihuLGksYSxvLGUpLHM9MDtzPGU7cysrKXRbbCplK3NdPU1hdGguc3FydChpW3NdKX19ZnVuY3Rpb24gRih0LGUscixuLGkpe3JbMF09MCxuWzBdPS1ELG5bMV09K0Q7Zm9yKHZhciBhPTEsbz0wO2E8aTthKyspe2Zvcih2YXIgcz0odFthXSthKmEtKHRbcltvXV0rcltvXSpyW29dKSkvKDIqYS0yKnJbb10pO3M8PW5bb107KW8tLSxzPSh0W2FdK2EqYS0odFtyW29dXStyW29dKnJbb10pKS8oMiphLTIqcltvXSk7clsrK29dPWEsbltvXT1zLG5bbysxXT0rRH1mb3IoYT0wLG89MDthPGk7YSsrKXtmb3IoO25bbysxXTxhOylvKys7ZVthXT0oYS1yW29dKSooYS1yW29dKSt0W3Jbb11dfX1QLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQpe3RoaXMuY3R4LmNsZWFyUmVjdCgwLDAsdGhpcy5zaXplLHRoaXMuc2l6ZSksdGhpcy5jdHguZmlsbFRleHQodCx0aGlzLmJ1ZmZlcix0aGlzLm1pZGRsZSk7Zm9yKHZhciBlPXRoaXMuY3R4LmdldEltYWdlRGF0YSgwLDAsdGhpcy5zaXplLHRoaXMuc2l6ZSkscj1uZXcgVWludDhDbGFtcGVkQXJyYXkodGhpcy5zaXplKnRoaXMuc2l6ZSksbj0wO248dGhpcy5zaXplKnRoaXMuc2l6ZTtuKyspe3ZhciBpPWUuZGF0YVs0Km4rM10vMjU1O3RoaXMuZ3JpZE91dGVyW25dPTE9PT1pPzA6MD09PWk/RDpNYXRoLnBvdyhNYXRoLm1heCgwLC41LWkpLDIpLHRoaXMuZ3JpZElubmVyW25dPTE9PT1pP0Q6MD09PWk/MDpNYXRoLnBvdyhNYXRoLm1heCgwLGktLjUpLDIpfWZvcihSKHRoaXMuZ3JpZE91dGVyLHRoaXMuc2l6ZSx0aGlzLnNpemUsdGhpcy5mLHRoaXMuZCx0aGlzLnYsdGhpcy56KSxSKHRoaXMuZ3JpZElubmVyLHRoaXMuc2l6ZSx0aGlzLnNpemUsdGhpcy5mLHRoaXMuZCx0aGlzLnYsdGhpcy56KSxuPTA7bjx0aGlzLnNpemUqdGhpcy5zaXplO24rKyl7dmFyIGE9dGhpcy5ncmlkT3V0ZXJbbl0tdGhpcy5ncmlkSW5uZXJbbl07cltuXT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDI1NS0yNTUqKGEvdGhpcy5yYWRpdXMrdGhpcy5jdXRvZmYpKSkpfXJldHVybiByfTt2YXIgQj1mdW5jdGlvbih0LGUpe3RoaXMucmVxdWVzdFRyYW5zZm9ybT10LHRoaXMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5PWUsdGhpcy5lbnRyaWVzPXt9fTtCLnByb3RvdHlwZS5zZXRVUkw9ZnVuY3Rpb24odCl7dGhpcy51cmw9dH0sQi5wcm90b3R5cGUuZ2V0R2x5cGhzPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcyxpPVtdO2Zvcih2YXIgYSBpbiBlKWZvcih2YXIgbz0wLHM9ZVthXTtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb107aS5wdXNoKHtzdGFjazphLGlkOmx9KX10LmFzeW5jQWxsKGksZnVuY3Rpb24odCxlKXt2YXIgcj10LnN0YWNrLGk9dC5pZCxhPW4uZW50cmllc1tyXTthfHwoYT1uLmVudHJpZXNbcl09e2dseXBoczp7fSxyZXF1ZXN0czp7fX0pO3ZhciBvPWEuZ2x5cGhzW2ldO2lmKHZvaWQgMD09PW8paWYobz1uLl90aW55U0RGKGEscixpKSllKG51bGwse3N0YWNrOnIsaWQ6aSxnbHlwaDpvfSk7ZWxzZXt2YXIgcz1NYXRoLmZsb29yKGkvMjU2KTtpZigyNTYqcz42NTUzNSllKG5ldyBFcnJvcihcImdseXBocyA+IDY1NTM1IG5vdCBzdXBwb3J0ZWRcIikpO2Vsc2V7dmFyIGw9YS5yZXF1ZXN0c1tzXTtsfHwobD1hLnJlcXVlc3RzW3NdPVtdLEIubG9hZEdseXBoUmFuZ2UocixzLG4udXJsLG4ucmVxdWVzdFRyYW5zZm9ybSxmdW5jdGlvbih0LGUpe2lmKGUpZm9yKHZhciByIGluIGUpYS5nbHlwaHNbK3JdPWVbK3JdO2Zvcih2YXIgbj0wLGk9bDtuPGkubGVuZ3RoO24rPTEpKDAsaVtuXSkodCxlKTtkZWxldGUgYS5yZXF1ZXN0c1tzXX0pKSxsLnB1c2goZnVuY3Rpb24odCxuKXt0P2UodCk6biYmZShudWxsLHtzdGFjazpyLGlkOmksZ2x5cGg6bltpXXx8bnVsbH0pfSl9fWVsc2UgZShudWxsLHtzdGFjazpyLGlkOmksZ2x5cGg6b30pfSxmdW5jdGlvbih0LGUpe2lmKHQpcih0KTtlbHNlIGlmKGUpe2Zvcih2YXIgbj17fSxpPTAsYT1lO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXSxzPW8uc3RhY2ssbD1vLmlkLGM9by5nbHlwaDsobltzXXx8KG5bc109e30pKVtsXT1jJiZ7aWQ6Yy5pZCxiaXRtYXA6Yy5iaXRtYXAuY2xvbmUoKSxtZXRyaWNzOmMubWV0cmljc319cihudWxsLG4pfX0pfSxCLnByb3RvdHlwZS5fdGlueVNERj1mdW5jdGlvbihlLHIsbil7dmFyIGk9dGhpcy5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk7aWYoaSYmKHQuZGVmYXVsdCQ0W1wiQ0pLIFVuaWZpZWQgSWRlb2dyYXBoc1wiXShuKXx8dC5kZWZhdWx0JDRbXCJIYW5ndWwgU3lsbGFibGVzXCJdKG4pKSl7dmFyIGE9ZS50aW55U0RGO2lmKCFhKXt2YXIgbz1cIjQwMFwiOy9ib2xkL2kudGVzdChyKT9vPVwiOTAwXCI6L21lZGl1bS9pLnRlc3Qocik/bz1cIjUwMFwiOi9saWdodC9pLnRlc3QocikmJihvPVwiMjAwXCIpLGE9ZS50aW55U0RGPW5ldyBCLlRpbnlTREYoMjQsMyw4LC4yNSxpLG8pfXJldHVybntpZDpuLGJpdG1hcDpuZXcgdC5BbHBoYUltYWdlKHt3aWR0aDozMCxoZWlnaHQ6MzB9LGEuZHJhdyhTdHJpbmcuZnJvbUNoYXJDb2RlKG4pKSksbWV0cmljczp7d2lkdGg6MjQsaGVpZ2h0OjI0LGxlZnQ6MCx0b3A6LTgsYWR2YW5jZToyNH19fX0sQi5sb2FkR2x5cGhSYW5nZT1mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvPTI1NipyLHM9bysyNTUsbD1pKGZ1bmN0aW9uKHQsZSl7aWYoIXgodCkpcmV0dXJuIHQ7dmFyIHI9VCh0KTtyZXR1cm4gci5wYXRoPVwiL2ZvbnRzL3YxXCIrci5wYXRoLHkocixlKX0obikucmVwbGFjZShcIntmb250c3RhY2t9XCIsZSkucmVwbGFjZShcIntyYW5nZX1cIixvK1wiLVwiK3MpLHQuUmVzb3VyY2VUeXBlLkdseXBocyk7dC5nZXRBcnJheUJ1ZmZlcihsLGZ1bmN0aW9uKGUscil7aWYoZSlhKGUpO2Vsc2UgaWYocil7Zm9yKHZhciBuPXt9LGk9MCxvPXQuZGVmYXVsdCQzKHIuZGF0YSk7aTxvLmxlbmd0aDtpKz0xKXt2YXIgcz1vW2ldO25bcy5pZF09c31hKG51bGwsbil9fSl9LEIuVGlueVNERj1JO3ZhciBOPWZ1bmN0aW9uKCl7dGhpcy5zcGVjaWZpY2F0aW9uPXQuZGVmYXVsdCQ1LmxpZ2h0LnBvc2l0aW9ufTtOLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuc3BoZXJpY2FsVG9DYXJ0ZXNpYW4oZS5leHByZXNzaW9uLmV2YWx1YXRlKHIpKX0sTi5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybnt4OnQubnVtYmVyKGUueCxyLngsbikseTp0Lm51bWJlcihlLnksci55LG4pLHo6dC5udW1iZXIoZS56LHIueixuKX19O3ZhciBqPW5ldyB0LlByb3BlcnRpZXMoe2FuY2hvcjpuZXcgdC5EYXRhQ29uc3RhbnRQcm9wZXJ0eSh0LmRlZmF1bHQkNS5saWdodC5hbmNob3IpLHBvc2l0aW9uOm5ldyBOLGNvbG9yOm5ldyB0LkRhdGFDb25zdGFudFByb3BlcnR5KHQuZGVmYXVsdCQ1LmxpZ2h0LmNvbG9yKSxpbnRlbnNpdHk6bmV3IHQuRGF0YUNvbnN0YW50UHJvcGVydHkodC5kZWZhdWx0JDUubGlnaHQuaW50ZW5zaXR5KX0pLFY9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyKXtlLmNhbGwodGhpcyksdGhpcy5fdHJhbnNpdGlvbmFibGU9bmV3IHQuVHJhbnNpdGlvbmFibGUoaiksdGhpcy5zZXRMaWdodChyKSx0aGlzLl90cmFuc2l0aW9uaW5nPXRoaXMuX3RyYW5zaXRpb25hYmxlLnVudHJhbnNpdGlvbmVkKCl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmdldExpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25hYmxlLnNlcmlhbGl6ZSgpfSxyLnByb3RvdHlwZS5zZXRMaWdodD1mdW5jdGlvbihlKXtpZighdGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZUxpZ2h0LGUpKWZvcih2YXIgciBpbiBlKXt2YXIgbj1lW3JdO3QuZW5kc1dpdGgocixcIi10cmFuc2l0aW9uXCIpP3RoaXMuX3RyYW5zaXRpb25hYmxlLnNldFRyYW5zaXRpb24oci5zbGljZSgwLC1cIi10cmFuc2l0aW9uXCIubGVuZ3RoKSxuKTp0aGlzLl90cmFuc2l0aW9uYWJsZS5zZXRWYWx1ZShyLG4pfX0sci5wcm90b3R5cGUudXBkYXRlVHJhbnNpdGlvbnM9ZnVuY3Rpb24odCl7dGhpcy5fdHJhbnNpdGlvbmluZz10aGlzLl90cmFuc2l0aW9uYWJsZS50cmFuc2l0aW9uZWQodCx0aGlzLl90cmFuc2l0aW9uaW5nKX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uaW5nLmhhc1RyYW5zaXRpb24oKX0sci5wcm90b3R5cGUucmVjYWxjdWxhdGU9ZnVuY3Rpb24odCl7dGhpcy5wcm9wZXJ0aWVzPXRoaXMuX3RyYW5zaXRpb25pbmcucG9zc2libHlFdmFsdWF0ZSh0KX0sci5wcm90b3R5cGUuX3ZhbGlkYXRlPWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZW1pdFZhbGlkYXRpb25FcnJvcnModGhpcyxlLmNhbGwodC52YWxpZGF0ZVN0eWxlLHQuZXh0ZW5kKHt2YWx1ZTpyLHN0eWxlOntnbHlwaHM6ITAsc3ByaXRlOiEwfSxzdHlsZVNwZWM6dC5kZWZhdWx0JDV9KSkpfSxyfSh0LkV2ZW50ZWQpLFU9ZnVuY3Rpb24odCxlKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9ZSx0aGlzLm5leHRSb3c9MCx0aGlzLmJ5dGVzPTQsdGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KHRoaXMud2lkdGgqdGhpcy5oZWlnaHQqdGhpcy5ieXRlcyksdGhpcy5wb3NpdGlvbnM9e319O1UucHJvdG90eXBlLmdldERhc2g9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmpvaW4oXCIsXCIpK1N0cmluZyhlKTtyZXR1cm4gdGhpcy5wb3NpdGlvbnNbcl18fCh0aGlzLnBvc2l0aW9uc1tyXT10aGlzLmFkZERhc2godCxlKSksdGhpcy5wb3NpdGlvbnNbcl19LFUucHJvdG90eXBlLmFkZERhc2g9ZnVuY3Rpb24oZSxyKXt2YXIgbj1yPzc6MCxpPTIqbisxO2lmKHRoaXMubmV4dFJvdytpPnRoaXMuaGVpZ2h0KXJldHVybiB0Lndhcm5PbmNlKFwiTGluZUF0bGFzIG91dCBvZiBzcGFjZVwiKSxudWxsO2Zvcih2YXIgYT0wLG89MDtvPGUubGVuZ3RoO28rKylhKz1lW29dO2Zvcih2YXIgcz10aGlzLndpZHRoL2EsbD1zLzIsYz1lLmxlbmd0aCUyPT0xLHU9LW47dTw9bjt1KyspZm9yKHZhciBoPXRoaXMubmV4dFJvdytuK3UsZj10aGlzLndpZHRoKmgscD1jPy1lW2UubGVuZ3RoLTFdOjAsZD1lWzBdLGc9MSx2PTA7djx0aGlzLndpZHRoO3YrKyl7Zm9yKDtkPHYvczspcD1kLGQrPWVbZ10sYyYmZz09PWUubGVuZ3RoLTEmJihkKz1lWzBdKSxnKys7dmFyIG09TWF0aC5hYnModi1wKnMpLHk9TWF0aC5hYnModi1kKnMpLHg9TWF0aC5taW4obSx5KSxiPWclMj09MSxfPXZvaWQgMDtpZihyKXt2YXIgdz1uP3UvbioobCsxKTowO2lmKGIpe3ZhciBrPWwtTWF0aC5hYnModyk7Xz1NYXRoLnNxcnQoeCp4K2sqayl9ZWxzZSBfPWwtTWF0aC5zcXJ0KHgqeCt3KncpfWVsc2UgXz0oYj8xOi0xKSp4O3RoaXMuZGF0YVszKzQqKGYrdildPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LF8rMTI4KSl9dmFyIEE9e3k6KHRoaXMubmV4dFJvdytuKy41KS90aGlzLmhlaWdodCxoZWlnaHQ6MipuL3RoaXMuaGVpZ2h0LHdpZHRoOmF9O3JldHVybiB0aGlzLm5leHRSb3crPWksdGhpcy5kaXJ0eT0hMCxBfSxVLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2w7dGhpcy50ZXh0dXJlPyhlLmJpbmRUZXh0dXJlKGUuVEVYVFVSRV8yRCx0aGlzLnRleHR1cmUpLHRoaXMuZGlydHkmJih0aGlzLmRpcnR5PSExLGUudGV4U3ViSW1hZ2UyRChlLlRFWFRVUkVfMkQsMCwwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCxlLlJHQkEsZS5VTlNJR05FRF9CWVRFLHRoaXMuZGF0YSkpKToodGhpcy50ZXh0dXJlPWUuY3JlYXRlVGV4dHVyZSgpLGUuYmluZFRleHR1cmUoZS5URVhUVVJFXzJELHRoaXMudGV4dHVyZSksZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfV1JBUF9TLGUuUkVQRUFUKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9XUkFQX1QsZS5SRVBFQVQpLGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX01JTl9GSUxURVIsZS5MSU5FQVIpLGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX01BR19GSUxURVIsZS5MSU5FQVIpLGUudGV4SW1hZ2UyRChlLlRFWFRVUkVfMkQsMCxlLlJHQkEsdGhpcy53aWR0aCx0aGlzLmhlaWdodCwwLGUuUkdCQSxlLlVOU0lHTkVEX0JZVEUsdGhpcy5kYXRhKSl9O3ZhciBxPWZ1bmN0aW9uIGUocixuKXt0aGlzLndvcmtlclBvb2w9cix0aGlzLmFjdG9ycz1bXSx0aGlzLmN1cnJlbnRBY3Rvcj0wLHRoaXMuaWQ9dC51bmlxdWVJZCgpO2Zvcih2YXIgaT10aGlzLndvcmtlclBvb2wuYWNxdWlyZSh0aGlzLmlkKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV0scz1uZXcgZS5BY3RvcihvLG4sdGhpcy5pZCk7cy5uYW1lPVwiV29ya2VyIFwiK2EsdGhpcy5hY3RvcnMucHVzaChzKX19O2Z1bmN0aW9uIEgoZSxyLG4pe3ZhciBpPWZ1bmN0aW9uKGUscil7aWYoZSlyZXR1cm4gbihlKTtpZihyKXt2YXIgaT10LnBpY2socixbXCJ0aWxlc1wiLFwibWluem9vbVwiLFwibWF4em9vbVwiLFwiYXR0cmlidXRpb25cIixcIm1hcGJveF9sb2dvXCIsXCJib3VuZHNcIl0pO3IudmVjdG9yX2xheWVycyYmKGkudmVjdG9yTGF5ZXJzPXIudmVjdG9yX2xheWVycyxpLnZlY3RvckxheWVySWRzPWkudmVjdG9yTGF5ZXJzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSxuKG51bGwsaSl9fTtlLnVybD90LmdldEpTT04ocihiKGUudXJsKSx0LlJlc291cmNlVHlwZS5Tb3VyY2UpLGkpOmEuZnJhbWUoZnVuY3Rpb24oKXtyZXR1cm4gaShudWxsLGUpfSl9cS5wcm90b3R5cGUuYnJvYWRjYXN0PWZ1bmN0aW9uKGUscixuKXtuPW58fGZ1bmN0aW9uKCl7fSx0LmFzeW5jQWxsKHRoaXMuYWN0b3JzLGZ1bmN0aW9uKHQsbil7dC5zZW5kKGUscixuKX0sbil9LHEucHJvdG90eXBlLnNlbmQ9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuKFwibnVtYmVyXCIhPXR5cGVvZiBufHxpc05hTihuKSkmJihuPXRoaXMuY3VycmVudEFjdG9yPSh0aGlzLmN1cnJlbnRBY3RvcisxKSV0aGlzLmFjdG9ycy5sZW5ndGgpLHRoaXMuYWN0b3JzW25dLnNlbmQodCxlLHIpLG59LHEucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuYWN0b3JzLmZvckVhY2goZnVuY3Rpb24odCl7dC5yZW1vdmUoKX0pLHRoaXMuYWN0b3JzPVtdLHRoaXMud29ya2VyUG9vbC5yZWxlYXNlKHRoaXMuaWQpfSxxLkFjdG9yPXQuZGVmYXVsdCQ3O3ZhciBHPWZ1bmN0aW9uKHQsZSl7aWYoaXNOYU4odCl8fGlzTmFOKGUpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgTG5nTGF0IG9iamVjdDogKFwiK3QrXCIsIFwiK2UrXCIpXCIpO2lmKHRoaXMubG5nPSt0LHRoaXMubGF0PStlLHRoaXMubGF0PjkwfHx0aGlzLmxhdDwtOTApdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBMbmdMYXQgbGF0aXR1ZGUgdmFsdWU6IG11c3QgYmUgYmV0d2VlbiAtOTAgYW5kIDkwXCIpfTtHLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBHKHQud3JhcCh0aGlzLmxuZywtMTgwLDE4MCksdGhpcy5sYXQpfSxHLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMubG5nLHRoaXMubGF0XX0sRy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIkxuZ0xhdChcIit0aGlzLmxuZytcIiwgXCIrdGhpcy5sYXQrXCIpXCJ9LEcucHJvdG90eXBlLnRvQm91bmRzPWZ1bmN0aW9uKHQpe3ZhciBlPTM2MCp0LzQwMDc1MDE3LHI9ZS9NYXRoLmNvcyhNYXRoLlBJLzE4MCp0aGlzLmxhdCk7cmV0dXJuIG5ldyBZKG5ldyBHKHRoaXMubG5nLXIsdGhpcy5sYXQtZSksbmV3IEcodGhpcy5sbmcrcix0aGlzLmxhdCtlKSl9LEcuY29udmVydD1mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgRylyZXR1cm4gdDtpZihBcnJheS5pc0FycmF5KHQpJiYoMj09PXQubGVuZ3RofHwzPT09dC5sZW5ndGgpKXJldHVybiBuZXcgRyhOdW1iZXIodFswXSksTnVtYmVyKHRbMV0pKTtpZighQXJyYXkuaXNBcnJheSh0KSYmXCJvYmplY3RcIj09dHlwZW9mIHQmJm51bGwhPT10KXJldHVybiBuZXcgRyhOdW1iZXIodC5sbmcpLE51bWJlcih0LmxhdCkpO3Rocm93IG5ldyBFcnJvcihcImBMbmdMYXRMaWtlYCBhcmd1bWVudCBtdXN0IGJlIHNwZWNpZmllZCBhcyBhIExuZ0xhdCBpbnN0YW5jZSwgYW4gb2JqZWN0IHtsbmc6IDxsbmc+LCBsYXQ6IDxsYXQ+fSwgb3IgYW4gYXJyYXkgb2YgWzxsbmc+LCA8bGF0Pl1cIil9O3ZhciBZPWZ1bmN0aW9uKHQsZSl7dCYmKGU/dGhpcy5zZXRTb3V0aFdlc3QodCkuc2V0Tm9ydGhFYXN0KGUpOjQ9PT10Lmxlbmd0aD90aGlzLnNldFNvdXRoV2VzdChbdFswXSx0WzFdXSkuc2V0Tm9ydGhFYXN0KFt0WzJdLHRbM11dKTp0aGlzLnNldFNvdXRoV2VzdCh0WzBdKS5zZXROb3J0aEVhc3QodFsxXSkpfTtZLnByb3RvdHlwZS5zZXROb3J0aEVhc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25lPXQgaW5zdGFuY2VvZiBHP25ldyBHKHQubG5nLHQubGF0KTpHLmNvbnZlcnQodCksdGhpc30sWS5wcm90b3R5cGUuc2V0U291dGhXZXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9zdz10IGluc3RhbmNlb2YgRz9uZXcgRyh0LmxuZyx0LmxhdCk6Ry5jb252ZXJ0KHQpLHRoaXN9LFkucHJvdG90eXBlLmV4dGVuZD1mdW5jdGlvbih0KXt2YXIgZSxyLG49dGhpcy5fc3csaT10aGlzLl9uZTtpZih0IGluc3RhbmNlb2YgRyllPXQscj10O2Vsc2V7aWYoISh0IGluc3RhbmNlb2YgWSkpcmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5ldmVyeShBcnJheS5pc0FycmF5KT90aGlzLmV4dGVuZChZLmNvbnZlcnQodCkpOnRoaXMuZXh0ZW5kKEcuY29udmVydCh0KSk6dGhpcztpZihlPXQuX3N3LHI9dC5fbmUsIWV8fCFyKXJldHVybiB0aGlzfXJldHVybiBufHxpPyhuLmxuZz1NYXRoLm1pbihlLmxuZyxuLmxuZyksbi5sYXQ9TWF0aC5taW4oZS5sYXQsbi5sYXQpLGkubG5nPU1hdGgubWF4KHIubG5nLGkubG5nKSxpLmxhdD1NYXRoLm1heChyLmxhdCxpLmxhdCkpOih0aGlzLl9zdz1uZXcgRyhlLmxuZyxlLmxhdCksdGhpcy5fbmU9bmV3IEcoci5sbmcsci5sYXQpKSx0aGlzfSxZLnByb3RvdHlwZS5nZXRDZW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEcoKHRoaXMuX3N3LmxuZyt0aGlzLl9uZS5sbmcpLzIsKHRoaXMuX3N3LmxhdCt0aGlzLl9uZS5sYXQpLzIpfSxZLnByb3RvdHlwZS5nZXRTb3V0aFdlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3d9LFkucHJvdG90eXBlLmdldE5vcnRoRWFzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9uZX0sWS5wcm90b3R5cGUuZ2V0Tm9ydGhXZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBHKHRoaXMuZ2V0V2VzdCgpLHRoaXMuZ2V0Tm9ydGgoKSl9LFkucHJvdG90eXBlLmdldFNvdXRoRWFzdD1mdW5jdGlvbigpe3JldHVybiBuZXcgRyh0aGlzLmdldEVhc3QoKSx0aGlzLmdldFNvdXRoKCkpfSxZLnByb3RvdHlwZS5nZXRXZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3LmxuZ30sWS5wcm90b3R5cGUuZ2V0U291dGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3cubGF0fSxZLnByb3RvdHlwZS5nZXRFYXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25lLmxuZ30sWS5wcm90b3R5cGUuZ2V0Tm9ydGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmUubGF0fSxZLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMuX3N3LnRvQXJyYXkoKSx0aGlzLl9uZS50b0FycmF5KCldfSxZLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiTG5nTGF0Qm91bmRzKFwiK3RoaXMuX3N3LnRvU3RyaW5nKCkrXCIsIFwiK3RoaXMuX25lLnRvU3RyaW5nKCkrXCIpXCJ9LFkucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hKHRoaXMuX3N3JiZ0aGlzLl9uZSl9LFkuY29udmVydD1mdW5jdGlvbih0KXtyZXR1cm4hdHx8dCBpbnN0YW5jZW9mIFk/dDpuZXcgWSh0KX07dmFyIFc9ZnVuY3Rpb24odCxlLHIpe3RoaXMuYm91bmRzPVkuY29udmVydCh0aGlzLnZhbGlkYXRlQm91bmRzKHQpKSx0aGlzLm1pbnpvb209ZXx8MCx0aGlzLm1heHpvb209cnx8MjR9O1cucHJvdG90eXBlLnZhbGlkYXRlQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiY0PT09dC5sZW5ndGg/W01hdGgubWF4KC0xODAsdFswXSksTWF0aC5tYXgoLTkwLHRbMV0pLE1hdGgubWluKDE4MCx0WzJdKSxNYXRoLm1pbig5MCx0WzNdKV06Wy0xODAsLTkwLDE4MCw5MF19LFcucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodGhpcy5sbmdYKHRoaXMuYm91bmRzLmdldFdlc3QoKSx0LnopKSxyPU1hdGguZmxvb3IodGhpcy5sYXRZKHRoaXMuYm91bmRzLmdldE5vcnRoKCksdC56KSksbj1NYXRoLmNlaWwodGhpcy5sbmdYKHRoaXMuYm91bmRzLmdldEVhc3QoKSx0LnopKSxpPU1hdGguY2VpbCh0aGlzLmxhdFkodGhpcy5ib3VuZHMuZ2V0U291dGgoKSx0LnopKTtyZXR1cm4gdC54Pj1lJiZ0Lng8biYmdC55Pj1yJiZ0Lnk8aX0sVy5wcm90b3R5cGUubG5nWD1mdW5jdGlvbih0LGUpe3JldHVybih0KzE4MCkqKE1hdGgucG93KDIsZSkvMzYwKX0sVy5wcm90b3R5cGUubGF0WT1mdW5jdGlvbihlLHIpe3ZhciBuPXQuY2xhbXAoTWF0aC5zaW4oTWF0aC5QSS8xODAqZSksLS45OTk5LC45OTk5KSxpPU1hdGgucG93KDIscikvKDIqTWF0aC5QSSk7cmV0dXJuIE1hdGgucG93KDIsci0xKSsuNSpNYXRoLmxvZygoMStuKS8oMS1uKSkqLWl9O3ZhciBYPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGksYSl7aWYoZS5jYWxsKHRoaXMpLHRoaXMuaWQ9cix0aGlzLmRpc3BhdGNoZXI9aSx0aGlzLnR5cGU9XCJ2ZWN0b3JcIix0aGlzLm1pbnpvb209MCx0aGlzLm1heHpvb209MjIsdGhpcy5zY2hlbWU9XCJ4eXpcIix0aGlzLnRpbGVTaXplPTUxMix0aGlzLnJlcGFyc2VPdmVyc2NhbGVkPSEwLHRoaXMuaXNUaWxlQ2xpcHBlZD0hMCx0LmV4dGVuZCh0aGlzLHQucGljayhuLFtcInVybFwiLFwic2NoZW1lXCIsXCJ0aWxlU2l6ZVwiXSkpLHRoaXMuX29wdGlvbnM9dC5leHRlbmQoe3R5cGU6XCJ2ZWN0b3JcIn0sbiksdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nPW4uY29sbGVjdFJlc291cmNlVGltaW5nLDUxMiE9PXRoaXMudGlsZVNpemUpdGhyb3cgbmV3IEVycm9yKFwidmVjdG9yIHRpbGUgc291cmNlcyBtdXN0IGhhdmUgYSB0aWxlU2l6ZSBvZiA1MTJcIik7dGhpcy5zZXRFdmVudGVkUGFyZW50KGEpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhbG9hZGluZ1wiLHtkYXRhVHlwZTpcInNvdXJjZVwifSkpLEgodGhpcy5fb3B0aW9ucyx0aGlzLm1hcC5fdHJhbnNmb3JtUmVxdWVzdCxmdW5jdGlvbihyLG4pe3I/ZS5maXJlKG5ldyB0LkVycm9yRXZlbnQocikpOm4mJih0LmV4dGVuZChlLG4pLG4uYm91bmRzJiYoZS50aWxlQm91bmRzPW5ldyBXKG4uYm91bmRzLGUubWluem9vbSxlLm1heHpvb20pKSxlLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhXCIse2RhdGFUeXBlOlwic291cmNlXCIsc291cmNlRGF0YVR5cGU6XCJtZXRhZGF0YVwifSkpLGUuZmlyZShuZXcgdC5FdmVudChcImRhdGFcIix7ZGF0YVR5cGU6XCJzb3VyY2VcIixzb3VyY2VEYXRhVHlwZTpcImNvbnRlbnRcIn0pKSl9KX0sci5wcm90b3R5cGUuaGFzVGlsZT1mdW5jdGlvbih0KXtyZXR1cm4hdGhpcy50aWxlQm91bmRzfHx0aGlzLnRpbGVCb3VuZHMuY29udGFpbnModC5jYW5vbmljYWwpfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMubG9hZCgpfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5leHRlbmQoe30sdGhpcy5fb3B0aW9ucyl9LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49ayhlLnRpbGVJRC5jYW5vbmljYWwudXJsKHRoaXMudGlsZXMsdGhpcy5zY2hlbWUpLHRoaXMudXJsKSxpPXtyZXF1ZXN0OnRoaXMubWFwLl90cmFuc2Zvcm1SZXF1ZXN0KG4sdC5SZXNvdXJjZVR5cGUuVGlsZSksdWlkOmUudWlkLHRpbGVJRDplLnRpbGVJRCx6b29tOmUudGlsZUlELm92ZXJzY2FsZWRaLHRpbGVTaXplOnRoaXMudGlsZVNpemUqZS50aWxlSUQub3ZlcnNjYWxlRmFjdG9yKCksdHlwZTp0aGlzLnR5cGUsc291cmNlOnRoaXMuaWQscGl4ZWxSYXRpbzphLmRldmljZVBpeGVsUmF0aW8sc2hvd0NvbGxpc2lvbkJveGVzOnRoaXMubWFwLnNob3dDb2xsaXNpb25Cb3hlc307ZnVuY3Rpb24gbyh0LG4pe3JldHVybiBlLmFib3J0ZWQ/cihudWxsKTp0P3IodCk6KG4mJm4ucmVzb3VyY2VUaW1pbmcmJihlLnJlc291cmNlVGltaW5nPW4ucmVzb3VyY2VUaW1pbmcpLHRoaXMubWFwLl9yZWZyZXNoRXhwaXJlZFRpbGVzJiZlLnNldEV4cGlyeURhdGEobiksZS5sb2FkVmVjdG9yRGF0YShuLHRoaXMubWFwLnBhaW50ZXIpLHIobnVsbCksdm9pZChlLnJlbG9hZENhbGxiYWNrJiYodGhpcy5sb2FkVGlsZShlLGUucmVsb2FkQ2FsbGJhY2spLGUucmVsb2FkQ2FsbGJhY2s9bnVsbCkpKX1pLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nPXRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZyx2b2lkIDA9PT1lLndvcmtlcklEfHxcImV4cGlyZWRcIj09PWUuc3RhdGU/ZS53b3JrZXJJRD10aGlzLmRpc3BhdGNoZXIuc2VuZChcImxvYWRUaWxlXCIsaSxvLmJpbmQodGhpcykpOlwibG9hZGluZ1wiPT09ZS5zdGF0ZT9lLnJlbG9hZENhbGxiYWNrPXI6dGhpcy5kaXNwYXRjaGVyLnNlbmQoXCJyZWxvYWRUaWxlXCIsaSxvLmJpbmQodGhpcyksZS53b3JrZXJJRCl9LHIucHJvdG90eXBlLmFib3J0VGlsZT1mdW5jdGlvbih0KXt0aGlzLmRpc3BhdGNoZXIuc2VuZChcImFib3J0VGlsZVwiLHt1aWQ6dC51aWQsdHlwZTp0aGlzLnR5cGUsc291cmNlOnRoaXMuaWR9LHZvaWQgMCx0LndvcmtlcklEKX0sci5wcm90b3R5cGUudW5sb2FkVGlsZT1mdW5jdGlvbih0KXt0LnVubG9hZFZlY3RvckRhdGEoKSx0aGlzLmRpc3BhdGNoZXIuc2VuZChcInJlbW92ZVRpbGVcIix7dWlkOnQudWlkLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkfSx2b2lkIDAsdC53b3JrZXJJRCl9LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4hMX0scn0odC5FdmVudGVkKSxaPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGksYSl7ZS5jYWxsKHRoaXMpLHRoaXMuaWQ9cix0aGlzLmRpc3BhdGNoZXI9aSx0aGlzLnNldEV2ZW50ZWRQYXJlbnQoYSksdGhpcy50eXBlPVwicmFzdGVyXCIsdGhpcy5taW56b29tPTAsdGhpcy5tYXh6b29tPTIyLHRoaXMucm91bmRab29tPSEwLHRoaXMuc2NoZW1lPVwieHl6XCIsdGhpcy50aWxlU2l6ZT01MTIsdGhpcy5fbG9hZGVkPSExLHRoaXMuX29wdGlvbnM9dC5leHRlbmQoe30sbiksdC5leHRlbmQodGhpcyx0LnBpY2sobixbXCJ1cmxcIixcInNjaGVtZVwiLFwidGlsZVNpemVcIl0pKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YWxvYWRpbmdcIix7ZGF0YVR5cGU6XCJzb3VyY2VcIn0pKSxIKHRoaXMuX29wdGlvbnMsdGhpcy5tYXAuX3RyYW5zZm9ybVJlcXVlc3QsZnVuY3Rpb24ocixuKXtyP2UuZmlyZShuZXcgdC5FcnJvckV2ZW50KHIpKTpuJiYodC5leHRlbmQoZSxuKSxuLmJvdW5kcyYmKGUudGlsZUJvdW5kcz1uZXcgVyhuLmJvdW5kcyxlLm1pbnpvb20sZS5tYXh6b29tKSksZS5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YVwiLHtkYXRhVHlwZTpcInNvdXJjZVwiLHNvdXJjZURhdGFUeXBlOlwibWV0YWRhdGFcIn0pKSxlLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhXCIse2RhdGFUeXBlOlwic291cmNlXCIsc291cmNlRGF0YVR5cGU6XCJjb250ZW50XCJ9KSkpfSl9LHIucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMubWFwPXQsdGhpcy5sb2FkKCl9LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0LmV4dGVuZCh7fSx0aGlzLl9vcHRpb25zKX0sci5wcm90b3R5cGUuaGFzVGlsZT1mdW5jdGlvbih0KXtyZXR1cm4hdGhpcy50aWxlQm91bmRzfHx0aGlzLnRpbGVCb3VuZHMuY29udGFpbnModC5jYW5vbmljYWwpfSxyLnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMsaT1rKGUudGlsZUlELmNhbm9uaWNhbC51cmwodGhpcy50aWxlcyx0aGlzLnNjaGVtZSksdGhpcy51cmwsdGhpcy50aWxlU2l6ZSk7ZS5yZXF1ZXN0PXQuZ2V0SW1hZ2UodGhpcy5tYXAuX3RyYW5zZm9ybVJlcXVlc3QoaSx0LlJlc291cmNlVHlwZS5UaWxlKSxmdW5jdGlvbih0LGkpe2lmKGRlbGV0ZSBlLnJlcXVlc3QsZS5hYm9ydGVkKWUuc3RhdGU9XCJ1bmxvYWRlZFwiLHIobnVsbCk7ZWxzZSBpZih0KWUuc3RhdGU9XCJlcnJvcmVkXCIscih0KTtlbHNlIGlmKGkpe24ubWFwLl9yZWZyZXNoRXhwaXJlZFRpbGVzJiZlLnNldEV4cGlyeURhdGEoaSksZGVsZXRlIGkuY2FjaGVDb250cm9sLGRlbGV0ZSBpLmV4cGlyZXM7dmFyIGE9bi5tYXAucGFpbnRlci5jb250ZXh0LG89YS5nbDtlLnRleHR1cmU9bi5tYXAucGFpbnRlci5nZXRUaWxlVGV4dHVyZShpLndpZHRoKSxlLnRleHR1cmU/ZS50ZXh0dXJlLnVwZGF0ZShpLHt1c2VNaXBtYXA6ITB9KTooZS50ZXh0dXJlPW5ldyB6KGEsaSxvLlJHQkEse3VzZU1pcG1hcDohMH0pLGUudGV4dHVyZS5iaW5kKG8uTElORUFSLG8uQ0xBTVBfVE9fRURHRSxvLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCksYS5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMmJm8udGV4UGFyYW1ldGVyZihvLlRFWFRVUkVfMkQsYS5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQsYS5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNNYXgpKSxlLnN0YXRlPVwibG9hZGVkXCIscihudWxsKX19KX0sci5wcm90b3R5cGUuYWJvcnRUaWxlPWZ1bmN0aW9uKHQsZSl7dC5yZXF1ZXN0JiYodC5yZXF1ZXN0LmFib3J0KCksZGVsZXRlIHQucmVxdWVzdCksZSgpfSxyLnByb3RvdHlwZS51bmxvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7dC50ZXh0dXJlJiZ0aGlzLm1hcC5wYWludGVyLnNhdmVUaWxlVGV4dHVyZSh0LnRleHR1cmUpLGUoKX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiExfSxyfSh0LkV2ZW50ZWQpLCQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4saSxhKXtlLmNhbGwodGhpcyxyLG4saSxhKSx0aGlzLnR5cGU9XCJyYXN0ZXItZGVtXCIsdGhpcy5tYXh6b29tPTIyLHRoaXMuX29wdGlvbnM9dC5leHRlbmQoe30sbiksdGhpcy5lbmNvZGluZz1uLmVuY29kaW5nfHxcIm1hcGJveFwifXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpcInJhc3Rlci1kZW1cIix1cmw6dGhpcy51cmwsdGlsZVNpemU6dGhpcy50aWxlU2l6ZSx0aWxlczp0aGlzLnRpbGVzLGJvdW5kczp0aGlzLmJvdW5kcyxlbmNvZGluZzp0aGlzLmVuY29kaW5nfX0sci5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj1rKGUudGlsZUlELmNhbm9uaWNhbC51cmwodGhpcy50aWxlcyx0aGlzLnNjaGVtZSksdGhpcy51cmwsdGhpcy50aWxlU2l6ZSk7ZS5yZXF1ZXN0PXQuZ2V0SW1hZ2UodGhpcy5tYXAuX3RyYW5zZm9ybVJlcXVlc3Qobix0LlJlc291cmNlVHlwZS5UaWxlKSxmdW5jdGlvbih0LG4pe2lmKGRlbGV0ZSBlLnJlcXVlc3QsZS5hYm9ydGVkKWUuc3RhdGU9XCJ1bmxvYWRlZFwiLHIobnVsbCk7ZWxzZSBpZih0KWUuc3RhdGU9XCJlcnJvcmVkXCIscih0KTtlbHNlIGlmKG4pe3RoaXMubWFwLl9yZWZyZXNoRXhwaXJlZFRpbGVzJiZlLnNldEV4cGlyeURhdGEobiksZGVsZXRlIG4uY2FjaGVDb250cm9sLGRlbGV0ZSBuLmV4cGlyZXM7dmFyIGk9YS5nZXRJbWFnZURhdGEobiksbz17dWlkOmUudWlkLGNvb3JkOmUudGlsZUlELHNvdXJjZTp0aGlzLmlkLHJhd0ltYWdlRGF0YTppLGVuY29kaW5nOnRoaXMuZW5jb2Rpbmd9O2Uud29ya2VySUQmJlwiZXhwaXJlZFwiIT09ZS5zdGF0ZXx8KGUud29ya2VySUQ9dGhpcy5kaXNwYXRjaGVyLnNlbmQoXCJsb2FkREVNVGlsZVwiLG8sZnVuY3Rpb24odCxuKXt0JiYoZS5zdGF0ZT1cImVycm9yZWRcIixyKHQpKSxuJiYoZS5kZW09bixlLm5lZWRzSGlsbHNoYWRlUHJlcGFyZT0hMCxlLnN0YXRlPVwibG9hZGVkXCIscihudWxsKSl9LmJpbmQodGhpcykpKX19LmJpbmQodGhpcykpLGUubmVpZ2hib3JpbmdUaWxlcz10aGlzLl9nZXROZWlnaGJvcmluZ1RpbGVzKGUudGlsZUlEKX0sci5wcm90b3R5cGUuX2dldE5laWdoYm9yaW5nVGlsZXM9ZnVuY3Rpb24oZSl7dmFyIHI9ZS5jYW5vbmljYWwsbj1NYXRoLnBvdygyLHIueiksaT0oci54LTErbiklbixhPTA9PT1yLng/ZS53cmFwLTE6ZS53cmFwLG89KHIueCsxK24pJW4scz1yLngrMT09PW4/ZS53cmFwKzE6ZS53cmFwLGw9e307cmV0dXJuIGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLGEsci56LGksci55KS5rZXldPXtiYWNrZmlsbGVkOiExfSxsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixzLHIueixvLHIueSkua2V5XT17YmFja2ZpbGxlZDohMX0sci55PjAmJihsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixhLHIueixpLHIueS0xKS5rZXldPXtiYWNrZmlsbGVkOiExfSxsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixlLndyYXAsci56LHIueCxyLnktMSkua2V5XT17YmFja2ZpbGxlZDohMX0sbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFoscyxyLnosbyxyLnktMSkua2V5XT17YmFja2ZpbGxlZDohMX0pLHIueSsxPG4mJihsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixhLHIueixpLHIueSsxKS5rZXldPXtiYWNrZmlsbGVkOiExfSxsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixlLndyYXAsci56LHIueCxyLnkrMSkua2V5XT17YmFja2ZpbGxlZDohMX0sbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFoscyxyLnosbyxyLnkrMSkua2V5XT17YmFja2ZpbGxlZDohMX0pLGx9LHIucHJvdG90eXBlLnVubG9hZFRpbGU9ZnVuY3Rpb24odCl7dC5kZW1UZXh0dXJlJiZ0aGlzLm1hcC5wYWludGVyLnNhdmVUaWxlVGV4dHVyZSh0LmRlbVRleHR1cmUpLHQuZmJvJiYodC5mYm8uZGVzdHJveSgpLGRlbGV0ZSB0LmZibyksdC5kZW0mJmRlbGV0ZSB0LmRlbSxkZWxldGUgdC5uZWlnaGJvcmluZ1RpbGVzLHQuc3RhdGU9XCJ1bmxvYWRlZFwiLHRoaXMuZGlzcGF0Y2hlci5zZW5kKFwicmVtb3ZlREVNVGlsZVwiLHt1aWQ6dC51aWQsc291cmNlOnRoaXMuaWR9LHZvaWQgMCx0LndvcmtlcklEKX0scn0oWiksSj1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpLGEpe2UuY2FsbCh0aGlzKSx0aGlzLmlkPXIsdGhpcy50eXBlPVwiZ2VvanNvblwiLHRoaXMubWluem9vbT0wLHRoaXMubWF4em9vbT0xOCx0aGlzLnRpbGVTaXplPTUxMix0aGlzLmlzVGlsZUNsaXBwZWQ9ITAsdGhpcy5yZXBhcnNlT3ZlcnNjYWxlZD0hMCx0aGlzLl9yZW1vdmVkPSExLHRoaXMuZGlzcGF0Y2hlcj1pLHRoaXMuc2V0RXZlbnRlZFBhcmVudChhKSx0aGlzLl9kYXRhPW4uZGF0YSx0aGlzLl9vcHRpb25zPXQuZXh0ZW5kKHt9LG4pLHRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZz1uLmNvbGxlY3RSZXNvdXJjZVRpbWluZyx0aGlzLl9yZXNvdXJjZVRpbWluZz1bXSx2b2lkIDAhPT1uLm1heHpvb20mJih0aGlzLm1heHpvb209bi5tYXh6b29tKSxuLnR5cGUmJih0aGlzLnR5cGU9bi50eXBlKTt2YXIgbz10LmRlZmF1bHQkOC90aGlzLnRpbGVTaXplO3RoaXMud29ya2VyT3B0aW9ucz10LmV4dGVuZCh7c291cmNlOnRoaXMuaWQsY2x1c3RlcjpuLmNsdXN0ZXJ8fCExLGdlb2pzb25WdE9wdGlvbnM6e2J1ZmZlcjoodm9pZCAwIT09bi5idWZmZXI/bi5idWZmZXI6MTI4KSpvLHRvbGVyYW5jZToodm9pZCAwIT09bi50b2xlcmFuY2U/bi50b2xlcmFuY2U6LjM3NSkqbyxleHRlbnQ6dC5kZWZhdWx0JDgsbWF4Wm9vbTp0aGlzLm1heHpvb20sbGluZU1ldHJpY3M6bi5saW5lTWV0cmljc3x8ITF9LHN1cGVyY2x1c3Rlck9wdGlvbnM6e21heFpvb206dm9pZCAwIT09bi5jbHVzdGVyTWF4Wm9vbT9NYXRoLm1pbihuLmNsdXN0ZXJNYXhab29tLHRoaXMubWF4em9vbS0xKTp0aGlzLm1heHpvb20tMSxleHRlbnQ6dC5kZWZhdWx0JDgscmFkaXVzOihuLmNsdXN0ZXJSYWRpdXN8fDUwKSpvLGxvZzohMX19LG4ud29ya2VyT3B0aW9ucyl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuZmlyZShuZXcgdC5FdmVudChcImRhdGFsb2FkaW5nXCIse2RhdGFUeXBlOlwic291cmNlXCJ9KSksdGhpcy5fdXBkYXRlV29ya2VyRGF0YShmdW5jdGlvbihyKXtpZihyKWUuZmlyZShuZXcgdC5FcnJvckV2ZW50KHIpKTtlbHNle3ZhciBuPXtkYXRhVHlwZTpcInNvdXJjZVwiLHNvdXJjZURhdGFUeXBlOlwibWV0YWRhdGFcIn07ZS5fY29sbGVjdFJlc291cmNlVGltaW5nJiZlLl9yZXNvdXJjZVRpbWluZyYmZS5fcmVzb3VyY2VUaW1pbmcubGVuZ3RoPjAmJihuLnJlc291cmNlVGltaW5nPWUuX3Jlc291cmNlVGltaW5nLGUuX3Jlc291cmNlVGltaW5nPVtdKSxlLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhXCIsbikpfX0pfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMubG9hZCgpfSxyLnByb3RvdHlwZS5zZXREYXRhPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7cmV0dXJuIHRoaXMuX2RhdGE9ZSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhbG9hZGluZ1wiLHtkYXRhVHlwZTpcInNvdXJjZVwifSkpLHRoaXMuX3VwZGF0ZVdvcmtlckRhdGEoZnVuY3Rpb24oZSl7aWYoZSlyZXR1cm4gci5maXJlKG5ldyB0LkVycm9yRXZlbnQoZSkpO3ZhciBuPXtkYXRhVHlwZTpcInNvdXJjZVwiLHNvdXJjZURhdGFUeXBlOlwiY29udGVudFwifTtyLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcmJnIuX3Jlc291cmNlVGltaW5nJiZyLl9yZXNvdXJjZVRpbWluZy5sZW5ndGg+MCYmKG4ucmVzb3VyY2VUaW1pbmc9ci5fcmVzb3VyY2VUaW1pbmcsci5fcmVzb3VyY2VUaW1pbmc9W10pLHIuZmlyZShuZXcgdC5FdmVudChcImRhdGFcIixuKSl9KSx0aGlzfSxyLnByb3RvdHlwZS5fdXBkYXRlV29ya2VyRGF0YT1mdW5jdGlvbihlKXt2YXIgcixuLGk9dGhpcyxhPXQuZXh0ZW5kKHt9LHRoaXMud29ya2VyT3B0aW9ucyksbz10aGlzLl9kYXRhO1wic3RyaW5nXCI9PXR5cGVvZiBvPyhhLnJlcXVlc3Q9dGhpcy5tYXAuX3RyYW5zZm9ybVJlcXVlc3QoKHI9bywobj10LmRlZmF1bHQuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIikpLmhyZWY9cixuLmhyZWYpLHQuUmVzb3VyY2VUeXBlLlNvdXJjZSksYS5yZXF1ZXN0LmNvbGxlY3RSZXNvdXJjZVRpbWluZz10aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcpOmEuZGF0YT1KU09OLnN0cmluZ2lmeShvKSx0aGlzLndvcmtlcklEPXRoaXMuZGlzcGF0Y2hlci5zZW5kKHRoaXMudHlwZStcIi5cIithLnNvdXJjZStcIi5sb2FkRGF0YVwiLGEsZnVuY3Rpb24odCxyKXtpLl9yZW1vdmVkfHxyJiZyLmFiYW5kb25lZHx8KGkuX2xvYWRlZD0hMCxyJiZyLnJlc291cmNlVGltaW5nJiZyLnJlc291cmNlVGltaW5nW2kuaWRdJiYoaS5fcmVzb3VyY2VUaW1pbmc9ci5yZXNvdXJjZVRpbWluZ1tpLmlkXS5zbGljZSgwKSksaS5kaXNwYXRjaGVyLnNlbmQoaS50eXBlK1wiLlwiK2Euc291cmNlK1wiLmNvYWxlc2NlXCIsbnVsbCxudWxsLGkud29ya2VySUQpLGUodCkpfSx0aGlzLndvcmtlcklEKX0sci5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49dm9pZCAwPT09dC53b3JrZXJJRD9cImxvYWRUaWxlXCI6XCJyZWxvYWRUaWxlXCIsaT17dHlwZTp0aGlzLnR5cGUsdWlkOnQudWlkLHRpbGVJRDp0LnRpbGVJRCx6b29tOnQudGlsZUlELm92ZXJzY2FsZWRaLG1heFpvb206dGhpcy5tYXh6b29tLHRpbGVTaXplOnRoaXMudGlsZVNpemUsc291cmNlOnRoaXMuaWQscGl4ZWxSYXRpbzphLmRldmljZVBpeGVsUmF0aW8sc2hvd0NvbGxpc2lvbkJveGVzOnRoaXMubWFwLnNob3dDb2xsaXNpb25Cb3hlc307dC53b3JrZXJJRD10aGlzLmRpc3BhdGNoZXIuc2VuZChuLGksZnVuY3Rpb24oaSxhKXtyZXR1cm4gdC51bmxvYWRWZWN0b3JEYXRhKCksdC5hYm9ydGVkP2UobnVsbCk6aT9lKGkpOih0LmxvYWRWZWN0b3JEYXRhKGEsci5tYXAucGFpbnRlcixcInJlbG9hZFRpbGVcIj09PW4pLGUobnVsbCkpfSx0aGlzLndvcmtlcklEKX0sci5wcm90b3R5cGUuYWJvcnRUaWxlPWZ1bmN0aW9uKHQpe3QuYWJvcnRlZD0hMH0sci5wcm90b3R5cGUudW5sb2FkVGlsZT1mdW5jdGlvbih0KXt0LnVubG9hZFZlY3RvckRhdGEoKSx0aGlzLmRpc3BhdGNoZXIuc2VuZChcInJlbW92ZVRpbGVcIix7dWlkOnQudWlkLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkfSxudWxsLHQud29ya2VySUQpfSxyLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3RoaXMuX3JlbW92ZWQ9ITAsdGhpcy5kaXNwYXRjaGVyLnNlbmQoXCJyZW1vdmVTb3VyY2VcIix7dHlwZTp0aGlzLnR5cGUsc291cmNlOnRoaXMuaWR9LG51bGwsdGhpcy53b3JrZXJJRCl9LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0LmV4dGVuZCh7fSx0aGlzLl9vcHRpb25zLHt0eXBlOnRoaXMudHlwZSxkYXRhOnRoaXMuX2RhdGF9KX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiExfSxyfSh0LkV2ZW50ZWQpLEs9dC5jcmVhdGVMYXlvdXQoW3tuYW1lOlwiYV9wb3NcIix0eXBlOlwiSW50MTZcIixjb21wb25lbnRzOjJ9LHtuYW1lOlwiYV90ZXh0dXJlX3Bvc1wiLHR5cGU6XCJJbnQxNlwiLGNvbXBvbmVudHM6Mn1dKSxRPWZ1bmN0aW9uKCl7dGhpcy5ib3VuZFByb2dyYW09bnVsbCx0aGlzLmJvdW5kTGF5b3V0VmVydGV4QnVmZmVyPW51bGwsdGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVycz1bXSx0aGlzLmJvdW5kSW5kZXhCdWZmZXI9bnVsbCx0aGlzLmJvdW5kVmVydGV4T2Zmc2V0PW51bGwsdGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXI9bnVsbCx0aGlzLnZhbz1udWxsfTtRLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dGhpcy5jb250ZXh0PXQ7Zm9yKHZhciBsPXRoaXMuYm91bmRQYWludFZlcnRleEJ1ZmZlcnMubGVuZ3RoIT09bi5sZW5ndGgsYz0wOyFsJiZjPG4ubGVuZ3RoO2MrKyl0aGlzLmJvdW5kUGFpbnRWZXJ0ZXhCdWZmZXJzW2NdIT09bltjXSYmKGw9ITApO3ZhciB1PSF0aGlzLnZhb3x8dGhpcy5ib3VuZFByb2dyYW0hPT1lfHx0aGlzLmJvdW5kTGF5b3V0VmVydGV4QnVmZmVyIT09cnx8bHx8dGhpcy5ib3VuZEluZGV4QnVmZmVyIT09aXx8dGhpcy5ib3VuZFZlcnRleE9mZnNldCE9PWF8fHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyIT09b3x8dGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXIyIT09czshdC5leHRWZXJ0ZXhBcnJheU9iamVjdHx8dT90aGlzLmZyZXNoQmluZChlLHIsbixpLGEsbyxzKToodC5iaW5kVmVydGV4QXJyYXlPRVMuc2V0KHRoaXMudmFvKSxvJiZvLmJpbmQoKSxpJiZpLmR5bmFtaWNEcmF3JiZpLmJpbmQoKSxzJiZzLmJpbmQoKSl9LFEucHJvdG90eXBlLmZyZXNoQmluZD1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcyxsPXQubnVtQXR0cmlidXRlcyxjPXRoaXMuY29udGV4dCx1PWMuZ2w7aWYoYy5leHRWZXJ0ZXhBcnJheU9iamVjdCl0aGlzLnZhbyYmdGhpcy5kZXN0cm95KCksdGhpcy52YW89Yy5leHRWZXJ0ZXhBcnJheU9iamVjdC5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpLGMuYmluZFZlcnRleEFycmF5T0VTLnNldCh0aGlzLnZhbykscz0wLHRoaXMuYm91bmRQcm9ncmFtPXQsdGhpcy5ib3VuZExheW91dFZlcnRleEJ1ZmZlcj1lLHRoaXMuYm91bmRQYWludFZlcnRleEJ1ZmZlcnM9cix0aGlzLmJvdW5kSW5kZXhCdWZmZXI9bix0aGlzLmJvdW5kVmVydGV4T2Zmc2V0PWksdGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXI9YSx0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlcjI9bztlbHNle3M9Yy5jdXJyZW50TnVtQXR0cmlidXRlc3x8MDtmb3IodmFyIGg9bDtoPHM7aCsrKXUuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGgpfWUuZW5hYmxlQXR0cmlidXRlcyh1LHQpO2Zvcih2YXIgZj0wLHA9cjtmPHAubGVuZ3RoO2YrPTEpcFtmXS5lbmFibGVBdHRyaWJ1dGVzKHUsdCk7YSYmYS5lbmFibGVBdHRyaWJ1dGVzKHUsdCksbyYmby5lbmFibGVBdHRyaWJ1dGVzKHUsdCksZS5iaW5kKCksZS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyh1LHQsaSk7Zm9yKHZhciBkPTAsZz1yO2Q8Zy5sZW5ndGg7ZCs9MSl7dmFyIHY9Z1tkXTt2LmJpbmQoKSx2LnNldFZlcnRleEF0dHJpYlBvaW50ZXJzKHUsdCxpKX1hJiYoYS5iaW5kKCksYS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyh1LHQsaSkpLG4mJm4uYmluZCgpLG8mJihvLmJpbmQoKSxvLnNldFZlcnRleEF0dHJpYlBvaW50ZXJzKHUsdCxpKSksYy5jdXJyZW50TnVtQXR0cmlidXRlcz1sfSxRLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy52YW8mJih0aGlzLmNvbnRleHQuZXh0VmVydGV4QXJyYXlPYmplY3QuZGVsZXRlVmVydGV4QXJyYXlPRVModGhpcy52YW8pLHRoaXMudmFvPW51bGwpfTt2YXIgdHQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LHIsbixpKXtlLmNhbGwodGhpcyksdGhpcy5pZD10LHRoaXMuZGlzcGF0Y2hlcj1uLHRoaXMuY29vcmRpbmF0ZXM9ci5jb29yZGluYXRlcyx0aGlzLnR5cGU9XCJpbWFnZVwiLHRoaXMubWluem9vbT0wLHRoaXMubWF4em9vbT0yMix0aGlzLnRpbGVTaXplPTUxMix0aGlzLnRpbGVzPXt9LHRoaXMuc2V0RXZlbnRlZFBhcmVudChpKSx0aGlzLm9wdGlvbnM9cn1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YWxvYWRpbmdcIix7ZGF0YVR5cGU6XCJzb3VyY2VcIn0pKSx0aGlzLnVybD10aGlzLm9wdGlvbnMudXJsLHQuZ2V0SW1hZ2UodGhpcy5tYXAuX3RyYW5zZm9ybVJlcXVlc3QodGhpcy51cmwsdC5SZXNvdXJjZVR5cGUuSW1hZ2UpLGZ1bmN0aW9uKHIsbil7cj9lLmZpcmUobmV3IHQuRXJyb3JFdmVudChyKSk6biYmKGUuaW1hZ2U9YS5nZXRJbWFnZURhdGEobiksZS5fZmluaXNoTG9hZGluZygpKX0pfSxyLnByb3RvdHlwZS5fZmluaXNoTG9hZGluZz1mdW5jdGlvbigpe3RoaXMubWFwJiYodGhpcy5zZXRDb29yZGluYXRlcyh0aGlzLmNvb3JkaW5hdGVzKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhXCIse2RhdGFUeXBlOlwic291cmNlXCIsc291cmNlRGF0YVR5cGU6XCJtZXRhZGF0YVwifSkpKX0sci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLmxvYWQoKX0sci5wcm90b3R5cGUuc2V0Q29vcmRpbmF0ZXM9ZnVuY3Rpb24oZSl7dGhpcy5jb29yZGluYXRlcz1lO3ZhciByPXRoaXMubWFwLG49ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHIudHJhbnNmb3JtLmxvY2F0aW9uQ29vcmRpbmF0ZShHLmNvbnZlcnQodCkpLnpvb21UbygwKX0pLGk9dGhpcy5jZW50ZXJDb29yZD10LmdldENvb3JkaW5hdGVzQ2VudGVyKG4pO2kuY29sdW1uPU1hdGguZmxvb3IoaS5jb2x1bW4pLGkucm93PU1hdGguZmxvb3IoaS5yb3cpLHRoaXMudGlsZUlEPW5ldyB0LkNhbm9uaWNhbFRpbGVJRChpLnpvb20saS5jb2x1bW4saS5yb3cpLHRoaXMubWluem9vbT10aGlzLm1heHpvb209aS56b29tO3ZhciBhPW4ubWFwKGZ1bmN0aW9uKGUpe3ZhciByPWUuem9vbVRvKGkuem9vbSk7cmV0dXJuIG5ldyB0LmRlZmF1bHQkMShNYXRoLnJvdW5kKChyLmNvbHVtbi1pLmNvbHVtbikqdC5kZWZhdWx0JDgpLE1hdGgucm91bmQoKHIucm93LWkucm93KSp0LmRlZmF1bHQkOCkpfSk7cmV0dXJuIHRoaXMuX2JvdW5kc0FycmF5PW5ldyB0LlJhc3RlckJvdW5kc0FycmF5LHRoaXMuX2JvdW5kc0FycmF5LmVtcGxhY2VCYWNrKGFbMF0ueCxhWzBdLnksMCwwKSx0aGlzLl9ib3VuZHNBcnJheS5lbXBsYWNlQmFjayhhWzFdLngsYVsxXS55LHQuZGVmYXVsdCQ4LDApLHRoaXMuX2JvdW5kc0FycmF5LmVtcGxhY2VCYWNrKGFbM10ueCxhWzNdLnksMCx0LmRlZmF1bHQkOCksdGhpcy5fYm91bmRzQXJyYXkuZW1wbGFjZUJhY2soYVsyXS54LGFbMl0ueSx0LmRlZmF1bHQkOCx0LmRlZmF1bHQkOCksdGhpcy5ib3VuZHNCdWZmZXImJih0aGlzLmJvdW5kc0J1ZmZlci5kZXN0cm95KCksZGVsZXRlIHRoaXMuYm91bmRzQnVmZmVyKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhXCIse2RhdGFUeXBlOlwic291cmNlXCIsc291cmNlRGF0YVR5cGU6XCJjb250ZW50XCJ9KSksdGhpc30sci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2lmKDAhPT1PYmplY3Qua2V5cyh0aGlzLnRpbGVzKS5sZW5ndGgmJnRoaXMuaW1hZ2Upe3ZhciB0PXRoaXMubWFwLnBhaW50ZXIuY29udGV4dCxlPXQuZ2w7Zm9yKHZhciByIGluIHRoaXMuYm91bmRzQnVmZmVyfHwodGhpcy5ib3VuZHNCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5fYm91bmRzQXJyYXksSy5tZW1iZXJzKSksdGhpcy5ib3VuZHNWQU98fCh0aGlzLmJvdW5kc1ZBTz1uZXcgUSksdGhpcy50ZXh0dXJlfHwodGhpcy50ZXh0dXJlPW5ldyB6KHQsdGhpcy5pbWFnZSxlLlJHQkEpLHRoaXMudGV4dHVyZS5iaW5kKGUuTElORUFSLGUuQ0xBTVBfVE9fRURHRSkpLHRoaXMudGlsZXMpe3ZhciBuPXRoaXMudGlsZXNbcl07XCJsb2FkZWRcIiE9PW4uc3RhdGUmJihuLnN0YXRlPVwibG9hZGVkXCIsbi50ZXh0dXJlPXRoaXMudGV4dHVyZSl9fX0sci5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24odCxlKXt0aGlzLnRpbGVJRCYmdGhpcy50aWxlSUQuZXF1YWxzKHQudGlsZUlELmNhbm9uaWNhbCk/KHRoaXMudGlsZXNbU3RyaW5nKHQudGlsZUlELndyYXApXT10LHQuYnVja2V0cz17fSxlKG51bGwpKToodC5zdGF0ZT1cImVycm9yZWRcIixlKG51bGwpKX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6XCJpbWFnZVwiLHVybDp0aGlzLm9wdGlvbnMudXJsLGNvb3JkaW5hdGVzOnRoaXMuY29vcmRpbmF0ZXN9fSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHJ9KHQuRXZlbnRlZCksZXQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LHIsbixpKXtlLmNhbGwodGhpcyx0LHIsbixpKSx0aGlzLnJvdW5kWm9vbT0hMCx0aGlzLnR5cGU9XCJ2aWRlb1wiLHRoaXMub3B0aW9ucz1yfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPXRoaXMub3B0aW9uczt0aGlzLnVybHM9W107Zm9yKHZhciBuPTAsaT1yLnVybHM7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO2UudXJscy5wdXNoKGUubWFwLl90cmFuc2Zvcm1SZXF1ZXN0KGEsdC5SZXNvdXJjZVR5cGUuU291cmNlKS51cmwpfXQuZ2V0VmlkZW8odGhpcy51cmxzLGZ1bmN0aW9uKHIsbil7cj9lLmZpcmUobmV3IHQuRXJyb3JFdmVudChyKSk6biYmKGUudmlkZW89bixlLnZpZGVvLmxvb3A9ITAsZS52aWRlby5hZGRFdmVudExpc3RlbmVyKFwicGxheWluZ1wiLGZ1bmN0aW9uKCl7ZS5tYXAuX3JlcmVuZGVyKCl9KSxlLm1hcCYmZS52aWRlby5wbGF5KCksZS5fZmluaXNoTG9hZGluZygpKX0pfSxyLnByb3RvdHlwZS5nZXRWaWRlbz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZGVvfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcHx8KHRoaXMubWFwPXQsdGhpcy5sb2FkKCksdGhpcy52aWRlbyYmKHRoaXMudmlkZW8ucGxheSgpLHRoaXMuc2V0Q29vcmRpbmF0ZXModGhpcy5jb29yZGluYXRlcykpKX0sci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2lmKCEoMD09PU9iamVjdC5rZXlzKHRoaXMudGlsZXMpLmxlbmd0aHx8dGhpcy52aWRlby5yZWFkeVN0YXRlPDIpKXt2YXIgdD10aGlzLm1hcC5wYWludGVyLmNvbnRleHQsZT10LmdsO2Zvcih2YXIgciBpbiB0aGlzLmJvdW5kc0J1ZmZlcnx8KHRoaXMuYm91bmRzQnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuX2JvdW5kc0FycmF5LEsubWVtYmVycykpLHRoaXMuYm91bmRzVkFPfHwodGhpcy5ib3VuZHNWQU89bmV3IFEpLHRoaXMudGV4dHVyZT90aGlzLnZpZGVvLnBhdXNlZHx8KHRoaXMudGV4dHVyZS5iaW5kKGUuTElORUFSLGUuQ0xBTVBfVE9fRURHRSksZS50ZXhTdWJJbWFnZTJEKGUuVEVYVFVSRV8yRCwwLDAsMCxlLlJHQkEsZS5VTlNJR05FRF9CWVRFLHRoaXMudmlkZW8pKToodGhpcy50ZXh0dXJlPW5ldyB6KHQsdGhpcy52aWRlbyxlLlJHQkEpLHRoaXMudGV4dHVyZS5iaW5kKGUuTElORUFSLGUuQ0xBTVBfVE9fRURHRSkpLHRoaXMudGlsZXMpe3ZhciBuPXRoaXMudGlsZXNbcl07XCJsb2FkZWRcIiE9PW4uc3RhdGUmJihuLnN0YXRlPVwibG9hZGVkXCIsbi50ZXh0dXJlPXRoaXMudGV4dHVyZSl9fX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6XCJ2aWRlb1wiLHVybHM6dGhpcy51cmxzLGNvb3JkaW5hdGVzOnRoaXMuY29vcmRpbmF0ZXN9fSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlkZW8mJiF0aGlzLnZpZGVvLnBhdXNlZH0scn0odHQpLHJ0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGksYSl7ZS5jYWxsKHRoaXMscixuLGksYSksbi5jb29yZGluYXRlcz9BcnJheS5pc0FycmF5KG4uY29vcmRpbmF0ZXMpJiY0PT09bi5jb29yZGluYXRlcy5sZW5ndGgmJiFuLmNvb3JkaW5hdGVzLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIUFycmF5LmlzQXJyYXkodCl8fDIhPT10Lmxlbmd0aHx8dC5zb21lKGZ1bmN0aW9uKHQpe3JldHVyblwibnVtYmVyXCIhPXR5cGVvZiB0fSl9KXx8dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IHQuZGVmYXVsdCQ5KFwic291cmNlcy5cIityLG51bGwsJ1wiY29vcmRpbmF0ZXNcIiBwcm9wZXJ0eSBtdXN0IGJlIGFuIGFycmF5IG9mIDQgbG9uZ2l0dWRlL2xhdGl0dWRlIGFycmF5IHBhaXJzJykpKTp0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgdC5kZWZhdWx0JDkoXCJzb3VyY2VzLlwiK3IsbnVsbCwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSBcImNvb3JkaW5hdGVzXCInKSkpLG4uYW5pbWF0ZSYmXCJib29sZWFuXCIhPXR5cGVvZiBuLmFuaW1hdGUmJnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LmRlZmF1bHQkOShcInNvdXJjZXMuXCIrcixudWxsLCdvcHRpb25hbCBcImFuaW1hdGVcIiBwcm9wZXJ0eSBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZScpKSksbi5jYW52YXM/XCJzdHJpbmdcIj09dHlwZW9mIG4uY2FudmFzfHxuLmNhbnZhcyBpbnN0YW5jZW9mIHQuZGVmYXVsdC5IVE1MQ2FudmFzRWxlbWVudHx8dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IHQuZGVmYXVsdCQ5KFwic291cmNlcy5cIityLG51bGwsJ1wiY2FudmFzXCIgbXVzdCBiZSBlaXRoZXIgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBJRCBvZiB0aGUgY2FudmFzIGVsZW1lbnQgZnJvbSB3aGljaCB0byByZWFkLCBvciBhbiBIVE1MQ2FudmFzRWxlbWVudCBpbnN0YW5jZScpKSk6dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IHQuZGVmYXVsdCQ5KFwic291cmNlcy5cIityLG51bGwsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgXCJjYW52YXNcIicpKSksdGhpcy5vcHRpb25zPW4sdGhpcy5hbmltYXRlPXZvaWQgMD09PW4uYW5pbWF0ZXx8bi5hbmltYXRlfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dGhpcy5jYW52YXN8fCh0aGlzLmNhbnZhcz10aGlzLm9wdGlvbnMuY2FudmFzIGluc3RhbmNlb2YgdC5kZWZhdWx0LkhUTUxDYW52YXNFbGVtZW50P3RoaXMub3B0aW9ucy5jYW52YXM6dC5kZWZhdWx0LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMub3B0aW9ucy5jYW52YXMpKSx0aGlzLndpZHRoPXRoaXMuY2FudmFzLndpZHRoLHRoaXMuaGVpZ2h0PXRoaXMuY2FudmFzLmhlaWdodCx0aGlzLl9oYXNJbnZhbGlkRGltZW5zaW9ucygpP3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcihcIkNhbnZhcyBkaW1lbnNpb25zIGNhbm5vdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gemVyby5cIikpKToodGhpcy5wbGF5PWZ1bmN0aW9uKCl7dGhpcy5fcGxheWluZz0hMCx0aGlzLm1hcC5fcmVyZW5kZXIoKX0sdGhpcy5wYXVzZT1mdW5jdGlvbigpe3RoaXMuX3BsYXlpbmc9ITF9LHRoaXMuX2ZpbmlzaExvYWRpbmcoKSl9LHIucHJvdG90eXBlLmdldENhbnZhcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbnZhc30sci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLmxvYWQoKSx0aGlzLmNhbnZhcyYmdGhpcy5hbmltYXRlJiZ0aGlzLnBsYXkoKX0sci5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLnBhdXNlKCl9LHIucHJvdG90eXBlLnByZXBhcmU9ZnVuY3Rpb24oKXt2YXIgdD0hMTtpZih0aGlzLmNhbnZhcy53aWR0aCE9PXRoaXMud2lkdGgmJih0aGlzLndpZHRoPXRoaXMuY2FudmFzLndpZHRoLHQ9ITApLHRoaXMuY2FudmFzLmhlaWdodCE9PXRoaXMuaGVpZ2h0JiYodGhpcy5oZWlnaHQ9dGhpcy5jYW52YXMuaGVpZ2h0LHQ9ITApLCF0aGlzLl9oYXNJbnZhbGlkRGltZW5zaW9ucygpJiYwIT09T2JqZWN0LmtleXModGhpcy50aWxlcykubGVuZ3RoKXt2YXIgZT10aGlzLm1hcC5wYWludGVyLmNvbnRleHQscj1lLmdsO2Zvcih2YXIgbiBpbiB0aGlzLmJvdW5kc0J1ZmZlcnx8KHRoaXMuYm91bmRzQnVmZmVyPWUuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuX2JvdW5kc0FycmF5LEsubWVtYmVycykpLHRoaXMuYm91bmRzVkFPfHwodGhpcy5ib3VuZHNWQU89bmV3IFEpLHRoaXMudGV4dHVyZT90P3RoaXMudGV4dHVyZS51cGRhdGUodGhpcy5jYW52YXMpOnRoaXMuX3BsYXlpbmcmJih0aGlzLnRleHR1cmUuYmluZChyLkxJTkVBUixyLkNMQU1QX1RPX0VER0UpLHIudGV4U3ViSW1hZ2UyRChyLlRFWFRVUkVfMkQsMCwwLDAsci5SR0JBLHIuVU5TSUdORURfQllURSx0aGlzLmNhbnZhcykpOih0aGlzLnRleHR1cmU9bmV3IHooZSx0aGlzLmNhbnZhcyxyLlJHQkEpLHRoaXMudGV4dHVyZS5iaW5kKHIuTElORUFSLHIuQ0xBTVBfVE9fRURHRSkpLHRoaXMudGlsZXMpe3ZhciBpPXRoaXMudGlsZXNbbl07XCJsb2FkZWRcIiE9PWkuc3RhdGUmJihpLnN0YXRlPVwibG9hZGVkXCIsaS50ZXh0dXJlPXRoaXMudGV4dHVyZSl9fX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6XCJjYW52YXNcIixjb29yZGluYXRlczp0aGlzLmNvb3JkaW5hdGVzfX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wbGF5aW5nfSxyLnByb3RvdHlwZS5faGFzSW52YWxpZERpbWVuc2lvbnM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPVt0aGlzLmNhbnZhcy53aWR0aCx0aGlzLmNhbnZhcy5oZWlnaHRdO3Q8ZS5sZW5ndGg7dCs9MSl7dmFyIHI9ZVt0XTtpZihpc05hTihyKXx8cjw9MClyZXR1cm4hMH1yZXR1cm4hMX0scn0odHQpLG50PXt2ZWN0b3I6WCxyYXN0ZXI6WixcInJhc3Rlci1kZW1cIjokLGdlb2pzb246Six2aWRlbzpldCxpbWFnZTp0dCxjYW52YXM6cnR9LGl0PWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPW5ldyBudFtyLnR5cGVdKGUscixuLGkpO2lmKGEuaWQhPT1lKXRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIFNvdXJjZSBpZCB0byBiZSBcIitlK1wiIGluc3RlYWQgb2YgXCIrYS5pZCk7cmV0dXJuIHQuYmluZEFsbChbXCJsb2FkXCIsXCJhYm9ydFwiLFwidW5sb2FkXCIsXCJzZXJpYWxpemVcIixcInByZXBhcmVcIl0sYSksYX07ZnVuY3Rpb24gYXQodCxlLHIsbixpKXt2YXIgYT1pLm1heFBpdGNoU2NhbGVGYWN0b3IoKSxvPXQudGlsZXNJbihyLGEpO28uc29ydChvdCk7Zm9yKHZhciBzPVtdLGw9MCxjPW87bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdO3MucHVzaCh7d3JhcHBlZFRpbGVJRDp1LnRpbGVJRC53cmFwcGVkKCkua2V5LHF1ZXJ5UmVzdWx0czp1LnRpbGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzKGUsdS5xdWVyeUdlb21ldHJ5LHUuc2NhbGUsbixpLGEsdC50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KHUudGlsZUlELnRvVW53cmFwcGVkKCkpKX0pfXJldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9e30scj17fSxuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXSxvPWEucXVlcnlSZXN1bHRzLHM9YS53cmFwcGVkVGlsZUlELGw9cltzXT1yW3NdfHx7fTtmb3IodmFyIGMgaW4gbylmb3IodmFyIHU9b1tjXSxoPWxbY109bFtjXXx8e30sZj1lW2NdPWVbY118fFtdLHA9MCxkPXU7cDxkLmxlbmd0aDtwKz0xKXt2YXIgZz1kW3BdO2hbZy5mZWF0dXJlSW5kZXhdfHwoaFtnLmZlYXR1cmVJbmRleF09ITAsZi5wdXNoKGcuZmVhdHVyZSkpfX1yZXR1cm4gZX0ocyl9ZnVuY3Rpb24gb3QodCxlKXt2YXIgcj10LnRpbGVJRCxuPWUudGlsZUlEO3JldHVybiByLm92ZXJzY2FsZWRaLW4ub3ZlcnNjYWxlZFp8fHIuY2Fub25pY2FsLnktbi5jYW5vbmljYWwueXx8ci53cmFwLW4ud3JhcHx8ci5jYW5vbmljYWwueC1uLmNhbm9uaWNhbC54fXZhciBzdD1mdW5jdGlvbihlLHIpe3RoaXMudGlsZUlEPWUsdGhpcy51aWQ9dC51bmlxdWVJZCgpLHRoaXMudXNlcz0wLHRoaXMudGlsZVNpemU9cix0aGlzLmJ1Y2tldHM9e30sdGhpcy5leHBpcmF0aW9uVGltZT1udWxsLHRoaXMucXVlcnlQYWRkaW5nPTAsdGhpcy5leHBpcmVkUmVxdWVzdENvdW50PTAsdGhpcy5zdGF0ZT1cImxvYWRpbmdcIn07c3QucHJvdG90eXBlLnJlZ2lzdGVyRmFkZUR1cmF0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQrdGhpcy50aW1lQWRkZWQ7ZTxhLm5vdygpfHx0aGlzLmZhZGVFbmRUaW1lJiZlPHRoaXMuZmFkZUVuZFRpbWV8fCh0aGlzLmZhZGVFbmRUaW1lPWUpfSxzdC5wcm90b3R5cGUud2FzUmVxdWVzdGVkPWZ1bmN0aW9uKCl7cmV0dXJuXCJlcnJvcmVkXCI9PT10aGlzLnN0YXRlfHxcImxvYWRlZFwiPT09dGhpcy5zdGF0ZXx8XCJyZWxvYWRpbmdcIj09PXRoaXMuc3RhdGV9LHN0LnByb3RvdHlwZS5sb2FkVmVjdG9yRGF0YT1mdW5jdGlvbihlLHIsbil7aWYodGhpcy5oYXNEYXRhKCkmJnRoaXMudW5sb2FkVmVjdG9yRGF0YSgpLHRoaXMuc3RhdGU9XCJsb2FkZWRcIixlKXtpZihlLmZlYXR1cmVJbmRleCYmKHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4PWUuZmVhdHVyZUluZGV4LGUucmF3VGlsZURhdGE/KHRoaXMubGF0ZXN0UmF3VGlsZURhdGE9ZS5yYXdUaWxlRGF0YSx0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YT1lLnJhd1RpbGVEYXRhKTp0aGlzLmxhdGVzdFJhd1RpbGVEYXRhJiYodGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGE9dGhpcy5sYXRlc3RSYXdUaWxlRGF0YSkpLHRoaXMuY29sbGlzaW9uQm94QXJyYXk9ZS5jb2xsaXNpb25Cb3hBcnJheSx0aGlzLmJ1Y2tldHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17fTtpZighZSlyZXR1cm4gcjtmb3IodmFyIG49MCxpPXQ7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dLG89YS5sYXllcklkcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGUuZ2V0TGF5ZXIodCl9KS5maWx0ZXIoQm9vbGVhbik7aWYoMCE9PW8ubGVuZ3RoKXthLmxheWVycz1vO2Zvcih2YXIgcz0wLGw9bztzPGwubGVuZ3RoO3MrPTEpcltsW3NdLmlkXT1hfX1yZXR1cm4gcn0oZS5idWNrZXRzLHIuc3R5bGUpLG4pZm9yKHZhciBpIGluIHRoaXMuYnVja2V0cyl7dmFyIGE9dGhpcy5idWNrZXRzW2ldO2EgaW5zdGFuY2VvZiB0LmRlZmF1bHQkMTQmJihhLmp1c3RSZWxvYWRlZD0hMCl9Zm9yKHZhciBvIGluIHRoaXMucXVlcnlQYWRkaW5nPTAsdGhpcy5idWNrZXRzKXt2YXIgcz10aGlzLmJ1Y2tldHNbb107dGhpcy5xdWVyeVBhZGRpbmc9TWF0aC5tYXgodGhpcy5xdWVyeVBhZGRpbmcsci5zdHlsZS5nZXRMYXllcihzLmxheWVySWRzWzBdKS5xdWVyeVJhZGl1cyhzKSl9ZS5pY29uQXRsYXNJbWFnZSYmKHRoaXMuaWNvbkF0bGFzSW1hZ2U9ZS5pY29uQXRsYXNJbWFnZSksZS5nbHlwaEF0bGFzSW1hZ2UmJih0aGlzLmdseXBoQXRsYXNJbWFnZT1lLmdseXBoQXRsYXNJbWFnZSl9ZWxzZSB0aGlzLmNvbGxpc2lvbkJveEFycmF5PW5ldyB0LkNvbGxpc2lvbkJveEFycmF5fSxzdC5wcm90b3R5cGUudW5sb2FkVmVjdG9yRGF0YT1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLmJ1Y2tldHMpdGhpcy5idWNrZXRzW3RdLmRlc3Ryb3koKTt0aGlzLmJ1Y2tldHM9e30sdGhpcy5pY29uQXRsYXNUZXh0dXJlJiZ0aGlzLmljb25BdGxhc1RleHR1cmUuZGVzdHJveSgpLHRoaXMuZ2x5cGhBdGxhc1RleHR1cmUmJnRoaXMuZ2x5cGhBdGxhc1RleHR1cmUuZGVzdHJveSgpLHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4PW51bGwsdGhpcy5zdGF0ZT1cInVubG9hZGVkXCJ9LHN0LnByb3RvdHlwZS51bmxvYWRERU1EYXRhPWZ1bmN0aW9uKCl7dGhpcy5kZW09bnVsbCx0aGlzLm5laWdoYm9yaW5nVGlsZXM9bnVsbCx0aGlzLnN0YXRlPVwidW5sb2FkZWRcIn0sc3QucHJvdG90eXBlLmdldEJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5idWNrZXRzW3QuaWRdfSxzdC5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLmJ1Y2tldHMpe3ZhciByPXRoaXMuYnVja2V0c1tlXTtyLnVwbG9hZGVkfHwoci51cGxvYWQodCksci51cGxvYWRlZD0hMCl9dmFyIG49dC5nbDt0aGlzLmljb25BdGxhc0ltYWdlJiYodGhpcy5pY29uQXRsYXNUZXh0dXJlPW5ldyB6KHQsdGhpcy5pY29uQXRsYXNJbWFnZSxuLlJHQkEpLHRoaXMuaWNvbkF0bGFzSW1hZ2U9bnVsbCksdGhpcy5nbHlwaEF0bGFzSW1hZ2UmJih0aGlzLmdseXBoQXRsYXNUZXh0dXJlPW5ldyB6KHQsdGhpcy5nbHlwaEF0bGFzSW1hZ2Usbi5BTFBIQSksdGhpcy5nbHlwaEF0bGFzSW1hZ2U9bnVsbCl9LHN0LnByb3RvdHlwZS5xdWVyeVJlbmRlcmVkRmVhdHVyZXM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7cmV0dXJuIHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4JiZ0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YT90aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5xdWVyeSh7cXVlcnlHZW9tZXRyeTplLHNjYWxlOnIsdGlsZVNpemU6dGhpcy50aWxlU2l6ZSxwb3NNYXRyaXg6byx0cmFuc2Zvcm06aSxwYXJhbXM6bixxdWVyeVBhZGRpbmc6dGhpcy5xdWVyeVBhZGRpbmcqYX0sdCk6e319LHN0LnByb3RvdHlwZS5xdWVyeVNvdXJjZUZlYXR1cmVzPWZ1bmN0aW9uKGUscil7aWYodGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgmJnRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LnJhd1RpbGVEYXRhKXt2YXIgbj10aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5sb2FkVlRMYXllcnMoKSxpPXI/ci5zb3VyY2VMYXllcjpcIlwiLGE9bi5fZ2VvanNvblRpbGVMYXllcnx8bltpXTtpZihhKWZvcih2YXIgbz10LmRlZmF1bHQkMTMociYmci5maWx0ZXIpLHM9e3o6dGhpcy50aWxlSUQub3ZlcnNjYWxlZFoseDp0aGlzLnRpbGVJRC5jYW5vbmljYWwueCx5OnRoaXMudGlsZUlELmNhbm9uaWNhbC55fSxsPTA7bDxhLmxlbmd0aDtsKyspe3ZhciBjPWEuZmVhdHVyZShsKTtpZihvKG5ldyB0LmRlZmF1bHQkMTYodGhpcy50aWxlSUQub3ZlcnNjYWxlZFopLGMpKXt2YXIgdT1uZXcgdC5kZWZhdWx0JDEyKGMscy56LHMueCxzLnkpO3UudGlsZT1zLGUucHVzaCh1KX19fX0sc3QucHJvdG90eXBlLmNsZWFyTWFzaz1mdW5jdGlvbigpe3RoaXMuc2VnbWVudHMmJih0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSxkZWxldGUgdGhpcy5zZWdtZW50cyksdGhpcy5tYXNrZWRCb3VuZHNCdWZmZXImJih0aGlzLm1hc2tlZEJvdW5kc0J1ZmZlci5kZXN0cm95KCksZGVsZXRlIHRoaXMubWFza2VkQm91bmRzQnVmZmVyKSx0aGlzLm1hc2tlZEluZGV4QnVmZmVyJiYodGhpcy5tYXNrZWRJbmRleEJ1ZmZlci5kZXN0cm95KCksZGVsZXRlIHRoaXMubWFza2VkSW5kZXhCdWZmZXIpfSxzdC5wcm90b3R5cGUuc2V0TWFzaz1mdW5jdGlvbihlLHIpe2lmKCF0LmRlZmF1bHQkMTAodGhpcy5tYXNrLGUpJiYodGhpcy5tYXNrPWUsdGhpcy5jbGVhck1hc2soKSwhdC5kZWZhdWx0JDEwKGUsezA6ITB9KSkpe3ZhciBuPW5ldyB0LlJhc3RlckJvdW5kc0FycmF5LGk9bmV3IHQuVHJpYW5nbGVJbmRleEFycmF5O3RoaXMuc2VnbWVudHM9bmV3IHQuZGVmYXVsdCQxNSx0aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDAsbixpKTtmb3IodmFyIGE9T2JqZWN0LmtleXMoZSksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1lW2Fbb11dLGw9dC5kZWZhdWx0JDg+PnMueixjPW5ldyB0LmRlZmF1bHQkMShzLngqbCxzLnkqbCksdT1uZXcgdC5kZWZhdWx0JDEoYy54K2wsYy55K2wpLGg9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LG4saSk7bi5lbXBsYWNlQmFjayhjLngsYy55LGMueCxjLnkpLG4uZW1wbGFjZUJhY2sodS54LGMueSx1LngsYy55KSxuLmVtcGxhY2VCYWNrKGMueCx1LnksYy54LHUueSksbi5lbXBsYWNlQmFjayh1LngsdS55LHUueCx1LnkpO3ZhciBmPWgudmVydGV4TGVuZ3RoO2kuZW1wbGFjZUJhY2soZixmKzEsZisyKSxpLmVtcGxhY2VCYWNrKGYrMSxmKzIsZiszKSxoLnZlcnRleExlbmd0aCs9NCxoLnByaW1pdGl2ZUxlbmd0aCs9Mn10aGlzLm1hc2tlZEJvdW5kc0J1ZmZlcj1yLmNyZWF0ZVZlcnRleEJ1ZmZlcihuLEsubWVtYmVycyksdGhpcy5tYXNrZWRJbmRleEJ1ZmZlcj1yLmNyZWF0ZUluZGV4QnVmZmVyKGkpfX0sc3QucHJvdG90eXBlLmhhc0RhdGE9ZnVuY3Rpb24oKXtyZXR1cm5cImxvYWRlZFwiPT09dGhpcy5zdGF0ZXx8XCJyZWxvYWRpbmdcIj09PXRoaXMuc3RhdGV8fFwiZXhwaXJlZFwiPT09dGhpcy5zdGF0ZX0sc3QucHJvdG90eXBlLnNldEV4cGlyeURhdGE9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5leHBpcmF0aW9uVGltZTtpZihlLmNhY2hlQ29udHJvbCl7dmFyIG49dC5wYXJzZUNhY2hlQ29udHJvbChlLmNhY2hlQ29udHJvbCk7bltcIm1heC1hZ2VcIl0mJih0aGlzLmV4cGlyYXRpb25UaW1lPURhdGUubm93KCkrMWUzKm5bXCJtYXgtYWdlXCJdKX1lbHNlIGUuZXhwaXJlcyYmKHRoaXMuZXhwaXJhdGlvblRpbWU9bmV3IERhdGUoZS5leHBpcmVzKS5nZXRUaW1lKCkpO2lmKHRoaXMuZXhwaXJhdGlvblRpbWUpe3ZhciBpPURhdGUubm93KCksYT0hMTtpZih0aGlzLmV4cGlyYXRpb25UaW1lPmkpYT0hMTtlbHNlIGlmKHIpaWYodGhpcy5leHBpcmF0aW9uVGltZTxyKWE9ITA7ZWxzZXt2YXIgbz10aGlzLmV4cGlyYXRpb25UaW1lLXI7bz90aGlzLmV4cGlyYXRpb25UaW1lPWkrTWF0aC5tYXgobywzZTQpOmE9ITB9ZWxzZSBhPSEwO2E/KHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudCsrLHRoaXMuc3RhdGU9XCJleHBpcmVkXCIpOnRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudD0wfX0sc3QucHJvdG90eXBlLmdldEV4cGlyeVRpbWVvdXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmV4cGlyYXRpb25UaW1lKXJldHVybiB0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQ/MWUzKigxPDxNYXRoLm1pbih0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQtMSwzMSkpOk1hdGgubWluKHRoaXMuZXhwaXJhdGlvblRpbWUtKG5ldyBEYXRlKS5nZXRUaW1lKCksTWF0aC5wb3coMiwzMSktMSl9O3ZhciBsdD1mdW5jdGlvbih0LGUpe3RoaXMubWF4PXQsdGhpcy5vblJlbW92ZT1lLHRoaXMucmVzZXQoKX07bHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuZGF0YSlmb3IodmFyIGU9MCxyPXRoaXMuZGF0YVt0XTtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV07bi50aW1lb3V0JiZjbGVhclRpbWVvdXQobi50aW1lb3V0KSx0aGlzLm9uUmVtb3ZlKG4udmFsdWUpfXJldHVybiB0aGlzLmRhdGE9e30sdGhpcy5vcmRlcj1bXSx0aGlzfSxsdC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLGk9dC53cmFwcGVkKCkua2V5O3ZvaWQgMD09PXRoaXMuZGF0YVtpXSYmKHRoaXMuZGF0YVtpXT1bXSk7dmFyIGE9e3ZhbHVlOmUsdGltZW91dDp2b2lkIDB9O2lmKHZvaWQgMCE9PXImJihhLnRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe24ucmVtb3ZlKHQsYSl9LHIpKSx0aGlzLmRhdGFbaV0ucHVzaChhKSx0aGlzLm9yZGVyLnB1c2goaSksdGhpcy5vcmRlci5sZW5ndGg+dGhpcy5tYXgpe3ZhciBvPXRoaXMuX2dldEFuZFJlbW92ZUJ5S2V5KHRoaXMub3JkZXJbMF0pO28mJnRoaXMub25SZW1vdmUobyl9cmV0dXJuIHRoaXN9LGx0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQud3JhcHBlZCgpLmtleSBpbiB0aGlzLmRhdGF9LGx0LnByb3RvdHlwZS5nZXRBbmRSZW1vdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGFzKHQpP3RoaXMuX2dldEFuZFJlbW92ZUJ5S2V5KHQud3JhcHBlZCgpLmtleSk6bnVsbH0sbHQucHJvdG90eXBlLl9nZXRBbmRSZW1vdmVCeUtleT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRhdGFbdF0uc2hpZnQoKTtyZXR1cm4gZS50aW1lb3V0JiZjbGVhclRpbWVvdXQoZS50aW1lb3V0KSwwPT09dGhpcy5kYXRhW3RdLmxlbmd0aCYmZGVsZXRlIHRoaXMuZGF0YVt0XSx0aGlzLm9yZGVyLnNwbGljZSh0aGlzLm9yZGVyLmluZGV4T2YodCksMSksZS52YWx1ZX0sbHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXModCk/dGhpcy5kYXRhW3Qud3JhcHBlZCgpLmtleV1bMF0udmFsdWU6bnVsbH0sbHQucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbih0LGUpe2lmKCF0aGlzLmhhcyh0KSlyZXR1cm4gdGhpczt2YXIgcj10LndyYXBwZWQoKS5rZXksbj12b2lkIDA9PT1lPzA6dGhpcy5kYXRhW3JdLmluZGV4T2YoZSksaT10aGlzLmRhdGFbcl1bbl07cmV0dXJuIHRoaXMuZGF0YVtyXS5zcGxpY2UobiwxKSxpLnRpbWVvdXQmJmNsZWFyVGltZW91dChpLnRpbWVvdXQpLDA9PT10aGlzLmRhdGFbcl0ubGVuZ3RoJiZkZWxldGUgdGhpcy5kYXRhW3JdLHRoaXMub25SZW1vdmUoaS52YWx1ZSksdGhpcy5vcmRlci5zcGxpY2UodGhpcy5vcmRlci5pbmRleE9mKHIpLDEpLHRoaXN9LGx0LnByb3RvdHlwZS5zZXRNYXhTaXplPWZ1bmN0aW9uKHQpe2Zvcih0aGlzLm1heD10O3RoaXMub3JkZXIubGVuZ3RoPnRoaXMubWF4Oyl7dmFyIGU9dGhpcy5fZ2V0QW5kUmVtb3ZlQnlLZXkodGhpcy5vcmRlclswXSk7ZSYmdGhpcy5vblJlbW92ZShlKX1yZXR1cm4gdGhpc307dmFyIGN0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmNvbnRleHQ9dDt2YXIgbj10LmdsO3RoaXMuYnVmZmVyPW4uY3JlYXRlQnVmZmVyKCksdGhpcy5keW5hbWljRHJhdz1Cb29sZWFuKHIpLHRoaXMudW5iaW5kVkFPKCksdC5iaW5kRWxlbWVudEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpLG4uYnVmZmVyRGF0YShuLkVMRU1FTlRfQVJSQVlfQlVGRkVSLGUuYXJyYXlCdWZmZXIsdGhpcy5keW5hbWljRHJhdz9uLkRZTkFNSUNfRFJBVzpuLlNUQVRJQ19EUkFXKSx0aGlzLmR5bmFtaWNEcmF3fHxkZWxldGUgZS5hcnJheUJ1ZmZlcn07Y3QucHJvdG90eXBlLnVuYmluZFZBTz1mdW5jdGlvbigpe3RoaXMuY29udGV4dC5leHRWZXJ0ZXhBcnJheU9iamVjdCYmdGhpcy5jb250ZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUy5zZXQobnVsbCl9LGN0LnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0LmJpbmRFbGVtZW50QnVmZmVyLnNldCh0aGlzLmJ1ZmZlcil9LGN0LnByb3RvdHlwZS51cGRhdGVEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDt0aGlzLnVuYmluZFZBTygpLHRoaXMuYmluZCgpLGUuYnVmZmVyU3ViRGF0YShlLkVMRU1FTlRfQVJSQVlfQlVGRkVSLDAsdC5hcnJheUJ1ZmZlcil9LGN0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb250ZXh0LmdsO3RoaXMuYnVmZmVyJiYodC5kZWxldGVCdWZmZXIodGhpcy5idWZmZXIpLGRlbGV0ZSB0aGlzLmJ1ZmZlcil9O3ZhciB1dD17SW50ODpcIkJZVEVcIixVaW50ODpcIlVOU0lHTkVEX0JZVEVcIixJbnQxNjpcIlNIT1JUXCIsVWludDE2OlwiVU5TSUdORURfU0hPUlRcIixJbnQzMjpcIklOVFwiLFVpbnQzMjpcIlVOU0lHTkVEX0lOVFwiLEZsb2F0MzI6XCJGTE9BVFwifSxodD1mdW5jdGlvbih0LGUscixuKXt0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLmF0dHJpYnV0ZXM9cix0aGlzLml0ZW1TaXplPWUuYnl0ZXNQZXJFbGVtZW50LHRoaXMuZHluYW1pY0RyYXc9bix0aGlzLmNvbnRleHQ9dDt2YXIgaT10LmdsO3RoaXMuYnVmZmVyPWkuY3JlYXRlQnVmZmVyKCksdC5iaW5kVmVydGV4QnVmZmVyLnNldCh0aGlzLmJ1ZmZlciksaS5idWZmZXJEYXRhKGkuQVJSQVlfQlVGRkVSLGUuYXJyYXlCdWZmZXIsdGhpcy5keW5hbWljRHJhdz9pLkRZTkFNSUNfRFJBVzppLlNUQVRJQ19EUkFXKSx0aGlzLmR5bmFtaWNEcmF3fHxkZWxldGUgZS5hcnJheUJ1ZmZlcn07aHQucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQuYmluZFZlcnRleEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpfSxodC5wcm90b3R5cGUudXBkYXRlRGF0YT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5iaW5kKCksZS5idWZmZXJTdWJEYXRhKGUuQVJSQVlfQlVGRkVSLDAsdC5hcnJheUJ1ZmZlcil9LGh0LnByb3RvdHlwZS5lbmFibGVBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoO3IrKyl7dmFyIG49dGhpcy5hdHRyaWJ1dGVzW3JdLGk9ZS5hdHRyaWJ1dGVzW24ubmFtZV07dm9pZCAwIT09aSYmdC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKX19LGh0LnByb3RvdHlwZS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjx0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoO24rKyl7dmFyIGk9dGhpcy5hdHRyaWJ1dGVzW25dLGE9ZS5hdHRyaWJ1dGVzW2kubmFtZV07dm9pZCAwIT09YSYmdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGEsaS5jb21wb25lbnRzLHRbdXRbaS50eXBlXV0sITEsdGhpcy5pdGVtU2l6ZSxpLm9mZnNldCt0aGlzLml0ZW1TaXplKihyfHwwKSl9fSxodC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udGV4dC5nbDt0aGlzLmJ1ZmZlciYmKHQuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKSxkZWxldGUgdGhpcy5idWZmZXIpfTt2YXIgZnQ9ZnVuY3Rpb24oZSl7dGhpcy5jb250ZXh0PWUsdGhpcy5jdXJyZW50PXQuZGVmYXVsdCQ2LnRyYW5zcGFyZW50fTtmdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sZnQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7dC5yPT09ZS5yJiZ0Lmc9PT1lLmcmJnQuYj09PWUuYiYmdC5hPT09ZS5hfHwodGhpcy5jb250ZXh0LmdsLmNsZWFyQ29sb3IodC5yLHQuZyx0LmIsdC5hKSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBwdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9MX07cHQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LHB0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50IT09dCYmKHRoaXMuY29udGV4dC5nbC5jbGVhckRlcHRoKHQpLHRoaXMuY3VycmVudD10KX07dmFyIGR0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD0wfTtkdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sZHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQhPT10JiYodGhpcy5jb250ZXh0LmdsLmNsZWFyU3RlbmNpbCh0KSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBndD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9WyEwLCEwLCEwLCEwXX07Z3QucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LGd0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50O3RbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl0mJnRbM109PT1lWzNdfHwodGhpcy5jb250ZXh0LmdsLmNvbG9yTWFzayh0WzBdLHRbMV0sdFsyXSx0WzNdKSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciB2dD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9ITB9O3Z0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSx2dC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudCE9PXQmJih0aGlzLmNvbnRleHQuZ2wuZGVwdGhNYXNrKHQpLHRoaXMuY3VycmVudD10KX07dmFyIG10PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD0yNTV9O210LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxtdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudCE9PXQmJih0aGlzLmNvbnRleHQuZ2wuc3RlbmNpbE1hc2sodCksdGhpcy5jdXJyZW50PXQpfTt2YXIgeXQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PXtmdW5jOnQuZ2wuQUxXQVlTLHJlZjowLG1hc2s6MjU1fX07eXQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LHl0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50O3QuZnVuYz09PWUuZnVuYyYmdC5yZWY9PT1lLnJlZiYmdC5tYXNrPT09ZS5tYXNrfHwodGhpcy5jb250ZXh0LmdsLnN0ZW5jaWxGdW5jKHQuZnVuYyx0LnJlZix0Lm1hc2spLHRoaXMuY3VycmVudD10KX07dmFyIHh0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10O3ZhciBlPXRoaXMuY29udGV4dC5nbDt0aGlzLmN1cnJlbnQ9W2UuS0VFUCxlLktFRVAsZS5LRUVQXX07eHQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LHh0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50O3RbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl18fCh0aGlzLmNvbnRleHQuZ2wuc3RlbmNpbE9wKHRbMF0sdFsxXSx0WzJdKSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBidD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9ITF9O2J0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxidC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuY3VycmVudCE9PXQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDt0P2UuZW5hYmxlKGUuU1RFTkNJTF9URVNUKTplLmRpc2FibGUoZS5TVEVOQ0lMX1RFU1QpLHRoaXMuY3VycmVudD10fX07dmFyIF90PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1bMCwxXX07X3QucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LF90LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50O3RbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXXx8KHRoaXMuY29udGV4dC5nbC5kZXB0aFJhbmdlKHRbMF0sdFsxXSksdGhpcy5jdXJyZW50PXQpfTt2YXIgd3Q9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PSExfTt3dC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sd3QucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dD9lLmVuYWJsZShlLkRFUFRIX1RFU1QpOmUuZGlzYWJsZShlLkRFUFRIX1RFU1QpLHRoaXMuY3VycmVudD10fX07dmFyIGt0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD10LmdsLkxFU1N9O2t0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxrdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudCE9PXQmJih0aGlzLmNvbnRleHQuZ2wuZGVwdGhGdW5jKHQpLHRoaXMuY3VycmVudD10KX07dmFyIEF0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD0hMX07QXQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LEF0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5jdXJyZW50IT09dCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO3Q/ZS5lbmFibGUoZS5CTEVORCk6ZS5kaXNhYmxlKGUuQkxFTkQpLHRoaXMuY3VycmVudD10fX07dmFyIFR0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10O3ZhciBlPXRoaXMuY29udGV4dC5nbDt0aGlzLmN1cnJlbnQ9W2UuT05FLGUuWkVST119O1R0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxUdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDt0WzBdPT09ZVswXSYmdFsxXT09PWVbMV18fCh0aGlzLmNvbnRleHQuZ2wuYmxlbmRGdW5jKHRbMF0sdFsxXSksdGhpcy5jdXJyZW50PXQpfTt2YXIgTXQ9ZnVuY3Rpb24oZSl7dGhpcy5jb250ZXh0PWUsdGhpcy5jdXJyZW50PXQuZGVmYXVsdCQ2LnRyYW5zcGFyZW50fTtNdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sTXQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7dC5yPT09ZS5yJiZ0Lmc9PT1lLmcmJnQuYj09PWUuYiYmdC5hPT09ZS5hfHwodGhpcy5jb250ZXh0LmdsLmJsZW5kQ29sb3IodC5yLHQuZyx0LmIsdC5hKSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBTdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9bnVsbH07U3QucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LFN0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50IT09dCYmKHRoaXMuY29udGV4dC5nbC51c2VQcm9ncmFtKHQpLHRoaXMuY3VycmVudD10KX07dmFyIEV0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD0xfTtFdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sRXQucHJvdG90eXBlLnNldD1mdW5jdGlvbihlKXt2YXIgcj10aGlzLmNvbnRleHQubGluZVdpZHRoUmFuZ2Usbj10LmNsYW1wKGUsclswXSxyWzFdKTt0aGlzLmN1cnJlbnQhPT1uJiYodGhpcy5jb250ZXh0LmdsLmxpbmVXaWR0aChuKSx0aGlzLmN1cnJlbnQ9ZSl9O3ZhciBDdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9dC5nbC5URVhUVVJFMH07Q3QucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LEN0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50IT09dCYmKHRoaXMuY29udGV4dC5nbC5hY3RpdmVUZXh0dXJlKHQpLHRoaXMuY3VycmVudD10KX07dmFyIEx0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10O3ZhciBlPXRoaXMuY29udGV4dC5nbDt0aGlzLmN1cnJlbnQ9WzAsMCxlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdfTtMdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sTHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7dFswXT09PWVbMF0mJnRbMV09PT1lWzFdJiZ0WzJdPT09ZVsyXSYmdFszXT09PWVbM118fCh0aGlzLmNvbnRleHQuZ2wudmlld3BvcnQodFswXSx0WzFdLHRbMl0sdFszXSksdGhpcy5jdXJyZW50PXQpfTt2YXIgenQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PW51bGx9O3p0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSx6dC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuY3VycmVudCE9PXQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDtlLmJpbmRGcmFtZWJ1ZmZlcihlLkZSQU1FQlVGRkVSLHQpLHRoaXMuY3VycmVudD10fX07dmFyIE90PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1udWxsfTtPdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sT3QucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7ZS5iaW5kUmVuZGVyYnVmZmVyKGUuUkVOREVSQlVGRkVSLHQpLHRoaXMuY3VycmVudD10fX07dmFyIEl0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1udWxsfTtJdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sSXQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7ZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsdCksdGhpcy5jdXJyZW50PXR9fTt2YXIgRHQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PW51bGx9O0R0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxEdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuY3VycmVudCE9PXQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDtlLmJpbmRCdWZmZXIoZS5BUlJBWV9CVUZGRVIsdCksdGhpcy5jdXJyZW50PXR9fTt2YXIgUHQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PW51bGx9O1B0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxQdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDtlLmJpbmRCdWZmZXIoZS5FTEVNRU5UX0FSUkFZX0JVRkZFUix0KSx0aGlzLmN1cnJlbnQ9dH07dmFyIFJ0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1udWxsfTtSdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sUnQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQhPT10JiZ0aGlzLmNvbnRleHQuZXh0VmVydGV4QXJyYXlPYmplY3QmJih0aGlzLmNvbnRleHQuZXh0VmVydGV4QXJyYXlPYmplY3QuYmluZFZlcnRleEFycmF5T0VTKHQpLHRoaXMuY3VycmVudD10KX07dmFyIEZ0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD00fTtGdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sRnQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7ZS5waXhlbFN0b3JlaShlLlVOUEFDS19BTElHTk1FTlQsdCksdGhpcy5jdXJyZW50PXR9fTt2YXIgQnQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PSExfTtCdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sQnQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7ZS5waXhlbFN0b3JlaShlLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCx0KSx0aGlzLmN1cnJlbnQ9dH19O3ZhciBOdD1mdW5jdGlvbih0LGUpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1udWxsLHRoaXMucGFyZW50PWV9O050LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fTt2YXIganQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5kaXJ0eT0hMX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuZGlydHl8fHRoaXMuY3VycmVudCE9PXQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDt0aGlzLmNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldCh0aGlzLnBhcmVudCksZS5mcmFtZWJ1ZmZlclRleHR1cmUyRChlLkZSQU1FQlVGRkVSLGUuQ09MT1JfQVRUQUNITUVOVDAsZS5URVhUVVJFXzJELHQsMCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGUucHJvdG90eXBlLnNldERpcnR5PWZ1bmN0aW9uKCl7dGhpcy5kaXJ0eT0hMH0sZX0oTnQpLFZ0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuY3VycmVudCE9PXQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDt0aGlzLmNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldCh0aGlzLnBhcmVudCksZS5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihlLkZSQU1FQlVGRkVSLGUuREVQVEhfQVRUQUNITUVOVCxlLlJFTkRFUkJVRkZFUix0KSx0aGlzLmN1cnJlbnQ9dH19LGV9KE50KSxVdD1mdW5jdGlvbih0LGUscil7dGhpcy5jb250ZXh0PXQsdGhpcy53aWR0aD1lLHRoaXMuaGVpZ2h0PXI7dmFyIG49dC5nbCxpPXRoaXMuZnJhbWVidWZmZXI9bi5jcmVhdGVGcmFtZWJ1ZmZlcigpO3RoaXMuY29sb3JBdHRhY2htZW50PW5ldyBqdCh0LGkpLHRoaXMuZGVwdGhBdHRhY2htZW50PW5ldyBWdCh0LGkpfTtVdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udGV4dC5nbCxlPXRoaXMuY29sb3JBdHRhY2htZW50LmdldCgpO2UmJnQuZGVsZXRlVGV4dHVyZShlKTt2YXIgcj10aGlzLmRlcHRoQXR0YWNobWVudC5nZXQoKTtyJiZ0LmRlbGV0ZVJlbmRlcmJ1ZmZlcihyKSx0LmRlbGV0ZUZyYW1lYnVmZmVyKHRoaXMuZnJhbWVidWZmZXIpfTt2YXIgcXQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZnVuYz10LHRoaXMubWFzaz1lLHRoaXMucmFuZ2U9cn07cXQuUmVhZE9ubHk9ITEscXQuUmVhZFdyaXRlPSEwLHF0LmRpc2FibGVkPW5ldyBxdCg1MTkscXQuUmVhZE9ubHksWzAsMV0pO3ZhciBIdD1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy50ZXN0PXQsdGhpcy5yZWY9ZSx0aGlzLm1hc2s9cix0aGlzLmZhaWw9bix0aGlzLmRlcHRoRmFpbD1pLHRoaXMucGFzcz1hfTtIdC5kaXNhYmxlZD1uZXcgSHQoe2Z1bmM6NTE5LG1hc2s6MH0sMCwwLDc2ODAsNzY4MCw3NjgwKTt2YXIgR3Q9ZnVuY3Rpb24odCxlLHIpe3RoaXMuYmxlbmRGdW5jdGlvbj10LHRoaXMuYmxlbmRDb2xvcj1lLHRoaXMubWFzaz1yfTtHdC5kaXNhYmxlZD1uZXcgR3QoR3QuUmVwbGFjZT1bMSwwXSx0LmRlZmF1bHQkNi50cmFuc3BhcmVudCxbITEsITEsITEsITFdKSxHdC51bmJsZW5kZWQ9bmV3IEd0KEd0LlJlcGxhY2UsdC5kZWZhdWx0JDYudHJhbnNwYXJlbnQsWyEwLCEwLCEwLCEwXSksR3QuYWxwaGFCbGVuZGVkPW5ldyBHdChbMSw3NzFdLHQuZGVmYXVsdCQ2LnRyYW5zcGFyZW50LFshMCwhMCwhMCwhMF0pO3ZhciBZdD1mdW5jdGlvbih0KXt0aGlzLmdsPXQsdGhpcy5leHRWZXJ0ZXhBcnJheU9iamVjdD10aGlzLmdsLmdldEV4dGVuc2lvbihcIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0XCIpLHRoaXMubGluZVdpZHRoUmFuZ2U9dC5nZXRQYXJhbWV0ZXIodC5BTElBU0VEX0xJTkVfV0lEVEhfUkFOR0UpLHRoaXMuY2xlYXJDb2xvcj1uZXcgZnQodGhpcyksdGhpcy5jbGVhckRlcHRoPW5ldyBwdCh0aGlzKSx0aGlzLmNsZWFyU3RlbmNpbD1uZXcgZHQodGhpcyksdGhpcy5jb2xvck1hc2s9bmV3IGd0KHRoaXMpLHRoaXMuZGVwdGhNYXNrPW5ldyB2dCh0aGlzKSx0aGlzLnN0ZW5jaWxNYXNrPW5ldyBtdCh0aGlzKSx0aGlzLnN0ZW5jaWxGdW5jPW5ldyB5dCh0aGlzKSx0aGlzLnN0ZW5jaWxPcD1uZXcgeHQodGhpcyksdGhpcy5zdGVuY2lsVGVzdD1uZXcgYnQodGhpcyksdGhpcy5kZXB0aFJhbmdlPW5ldyBfdCh0aGlzKSx0aGlzLmRlcHRoVGVzdD1uZXcgd3QodGhpcyksdGhpcy5kZXB0aEZ1bmM9bmV3IGt0KHRoaXMpLHRoaXMuYmxlbmQ9bmV3IEF0KHRoaXMpLHRoaXMuYmxlbmRGdW5jPW5ldyBUdCh0aGlzKSx0aGlzLmJsZW5kQ29sb3I9bmV3IE10KHRoaXMpLHRoaXMucHJvZ3JhbT1uZXcgU3QodGhpcyksdGhpcy5saW5lV2lkdGg9bmV3IEV0KHRoaXMpLHRoaXMuYWN0aXZlVGV4dHVyZT1uZXcgQ3QodGhpcyksdGhpcy52aWV3cG9ydD1uZXcgTHQodGhpcyksdGhpcy5iaW5kRnJhbWVidWZmZXI9bmV3IHp0KHRoaXMpLHRoaXMuYmluZFJlbmRlcmJ1ZmZlcj1uZXcgT3QodGhpcyksdGhpcy5iaW5kVGV4dHVyZT1uZXcgSXQodGhpcyksdGhpcy5iaW5kVmVydGV4QnVmZmVyPW5ldyBEdCh0aGlzKSx0aGlzLmJpbmRFbGVtZW50QnVmZmVyPW5ldyBQdCh0aGlzKSx0aGlzLmJpbmRWZXJ0ZXhBcnJheU9FUz10aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0JiZuZXcgUnQodGhpcyksdGhpcy5waXhlbFN0b3JlVW5wYWNrPW5ldyBGdCh0aGlzKSx0aGlzLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhPW5ldyBCdCh0aGlzKSx0aGlzLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYz10LmdldEV4dGVuc2lvbihcIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpY1wiKXx8dC5nZXRFeHRlbnNpb24oXCJNT1pfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljXCIpfHx0LmdldEV4dGVuc2lvbihcIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWNcIiksdGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMmJih0aGlzLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpY01heD10LmdldFBhcmFtZXRlcih0aGlzLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5NQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQpKSx0aGlzLmV4dFRleHR1cmVIYWxmRmxvYXQ9dC5nZXRFeHRlbnNpb24oXCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0XCIpLHRoaXMuZXh0VGV4dHVyZUhhbGZGbG9hdCYmdC5nZXRFeHRlbnNpb24oXCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhclwiKX07WXQucHJvdG90eXBlLmNyZWF0ZUluZGV4QnVmZmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBjdCh0aGlzLHQsZSl9LFl0LnByb3RvdHlwZS5jcmVhdGVWZXJ0ZXhCdWZmZXI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuZXcgaHQodGhpcyx0LGUscil9LFl0LnByb3RvdHlwZS5jcmVhdGVSZW5kZXJidWZmZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuZ2wsaT1uLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO3JldHVybiB0aGlzLmJpbmRSZW5kZXJidWZmZXIuc2V0KGkpLG4ucmVuZGVyYnVmZmVyU3RvcmFnZShuLlJFTkRFUkJVRkZFUix0LGUsciksdGhpcy5iaW5kUmVuZGVyYnVmZmVyLnNldChudWxsKSxpfSxZdC5wcm90b3R5cGUuY3JlYXRlRnJhbWVidWZmZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IFV0KHRoaXMsdCxlKX0sWXQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY29sb3Iscj10LmRlcHRoLG49dGhpcy5nbCxpPTA7ZSYmKGl8PW4uQ09MT1JfQlVGRkVSX0JJVCx0aGlzLmNsZWFyQ29sb3Iuc2V0KGUpLHRoaXMuY29sb3JNYXNrLnNldChbITAsITAsITAsITBdKSksdm9pZCAwIT09ciYmKGl8PW4uREVQVEhfQlVGRkVSX0JJVCx0aGlzLmNsZWFyRGVwdGguc2V0KHIpLHRoaXMuZGVwdGhNYXNrLnNldCghMCkpLG4uY2xlYXIoaSl9LFl0LnByb3RvdHlwZS5zZXREZXB0aE1vZGU9ZnVuY3Rpb24odCl7dC5mdW5jIT09dGhpcy5nbC5BTFdBWVN8fHQubWFzaz8odGhpcy5kZXB0aFRlc3Quc2V0KCEwKSx0aGlzLmRlcHRoRnVuYy5zZXQodC5mdW5jKSx0aGlzLmRlcHRoTWFzay5zZXQodC5tYXNrKSx0aGlzLmRlcHRoUmFuZ2Uuc2V0KHQucmFuZ2UpKTp0aGlzLmRlcHRoVGVzdC5zZXQoITEpfSxZdC5wcm90b3R5cGUuc2V0U3RlbmNpbE1vZGU9ZnVuY3Rpb24odCl7dC50ZXN0LmZ1bmMhPT10aGlzLmdsLkFMV0FZU3x8dC5tYXNrPyh0aGlzLnN0ZW5jaWxUZXN0LnNldCghMCksdGhpcy5zdGVuY2lsTWFzay5zZXQodC5tYXNrKSx0aGlzLnN0ZW5jaWxPcC5zZXQoW3QuZmFpbCx0LmRlcHRoRmFpbCx0LnBhc3NdKSx0aGlzLnN0ZW5jaWxGdW5jLnNldCh7ZnVuYzp0LnRlc3QuZnVuYyxyZWY6dC5yZWYsbWFzazp0LnRlc3QubWFza30pKTp0aGlzLnN0ZW5jaWxUZXN0LnNldCghMSl9LFl0LnByb3RvdHlwZS5zZXRDb2xvck1vZGU9ZnVuY3Rpb24oZSl7dC5kZWZhdWx0JDEwKGUuYmxlbmRGdW5jdGlvbixHdC5SZXBsYWNlKT90aGlzLmJsZW5kLnNldCghMSk6KHRoaXMuYmxlbmQuc2V0KCEwKSx0aGlzLmJsZW5kRnVuYy5zZXQoZS5ibGVuZEZ1bmN0aW9uKSx0aGlzLmJsZW5kQ29sb3Iuc2V0KGUuYmxlbmRDb2xvcikpLHRoaXMuY29sb3JNYXNrLnNldChlLm1hc2spfTt2YXIgV3Q9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LHIsbil7dmFyIGk9dGhpcztlLmNhbGwodGhpcyksdGhpcy5pZD10LHRoaXMuZGlzcGF0Y2hlcj1uLHRoaXMub24oXCJkYXRhXCIsZnVuY3Rpb24odCl7XCJzb3VyY2VcIj09PXQuZGF0YVR5cGUmJlwibWV0YWRhdGFcIj09PXQuc291cmNlRGF0YVR5cGUmJihpLl9zb3VyY2VMb2FkZWQ9ITApLGkuX3NvdXJjZUxvYWRlZCYmIWkuX3BhdXNlZCYmXCJzb3VyY2VcIj09PXQuZGF0YVR5cGUmJlwiY29udGVudFwiPT09dC5zb3VyY2VEYXRhVHlwZSYmKGkucmVsb2FkKCksaS50cmFuc2Zvcm0mJmkudXBkYXRlKGkudHJhbnNmb3JtKSl9KSx0aGlzLm9uKFwiZXJyb3JcIixmdW5jdGlvbigpe2kuX3NvdXJjZUVycm9yZWQ9ITB9KSx0aGlzLl9zb3VyY2U9aXQodCxyLG4sdGhpcyksdGhpcy5fdGlsZXM9e30sdGhpcy5fY2FjaGU9bmV3IGx0KDAsdGhpcy5fdW5sb2FkVGlsZS5iaW5kKHRoaXMpKSx0aGlzLl90aW1lcnM9e30sdGhpcy5fY2FjaGVUaW1lcnM9e30sdGhpcy5fbWF4VGlsZUNhY2hlU2l6ZT1udWxsLHRoaXMuX2lzSWRSZW5kZXJhYmxlPXRoaXMuX2lzSWRSZW5kZXJhYmxlLmJpbmQodGhpcyksdGhpcy5fY292ZXJlZFRpbGVzPXt9fXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMuX21heFRpbGVDYWNoZVNpemU9dD90Ll9tYXhUaWxlQ2FjaGVTaXplOm51bGwsdGhpcy5fc291cmNlJiZ0aGlzLl9zb3VyY2Uub25BZGQmJnRoaXMuX3NvdXJjZS5vbkFkZCh0KX0sci5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24odCl7dGhpcy5fc291cmNlJiZ0aGlzLl9zb3VyY2Uub25SZW1vdmUmJnRoaXMuX3NvdXJjZS5vblJlbW92ZSh0KX0sci5wcm90b3R5cGUubG9hZGVkPWZ1bmN0aW9uKCl7aWYodGhpcy5fc291cmNlRXJyb3JlZClyZXR1cm4hMDtpZighdGhpcy5fc291cmNlTG9hZGVkKXJldHVybiExO2Zvcih2YXIgdCBpbiB0aGlzLl90aWxlcyl7dmFyIGU9dGhpcy5fdGlsZXNbdF07aWYoXCJsb2FkZWRcIiE9PWUuc3RhdGUmJlwiZXJyb3JlZFwiIT09ZS5zdGF0ZSlyZXR1cm4hMX1yZXR1cm4hMH0sci5wcm90b3R5cGUuZ2V0U291cmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvdXJjZX0sci5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLl9wYXVzZWQ9ITB9LHIucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe2lmKHRoaXMuX3BhdXNlZCl7dmFyIHQ9dGhpcy5fc2hvdWxkUmVsb2FkT25SZXN1bWU7dGhpcy5fcGF1c2VkPSExLHRoaXMuX3Nob3VsZFJlbG9hZE9uUmVzdW1lPSExLHQmJnRoaXMucmVsb2FkKCksdGhpcy50cmFuc2Zvcm0mJnRoaXMudXBkYXRlKHRoaXMudHJhbnNmb3JtKX19LHIucHJvdG90eXBlLl9sb2FkVGlsZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9zb3VyY2UubG9hZFRpbGUodCxlKX0sci5wcm90b3R5cGUuX3VubG9hZFRpbGU9ZnVuY3Rpb24odCl7aWYodGhpcy5fc291cmNlLnVubG9hZFRpbGUpcmV0dXJuIHRoaXMuX3NvdXJjZS51bmxvYWRUaWxlKHQsZnVuY3Rpb24oKXt9KX0sci5wcm90b3R5cGUuX2Fib3J0VGlsZT1mdW5jdGlvbih0KXtpZih0aGlzLl9zb3VyY2UuYWJvcnRUaWxlKXJldHVybiB0aGlzLl9zb3VyY2UuYWJvcnRUaWxlKHQsZnVuY3Rpb24oKXt9KX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvdXJjZS5zZXJpYWxpemUoKX0sci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fc291cmNlLnByZXBhcmUmJnRoaXMuX3NvdXJjZS5wcmVwYXJlKCksdGhpcy5fdGlsZXMpdGhpcy5fdGlsZXNbZV0udXBsb2FkKHQpfSxyLnByb3RvdHlwZS5nZXRJZHM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl90aWxlcykubWFwKE51bWJlcikuc29ydChmdW5jdGlvbihyLG4pe3ZhciBpPWUuX3RpbGVzW3JdLnRpbGVJRCxhPWUuX3RpbGVzW25dLnRpbGVJRCxvPW5ldyB0LmRlZmF1bHQkMShpLmNhbm9uaWNhbC54LGkuY2Fub25pY2FsLnkpLnJvdGF0ZShlLnRyYW5zZm9ybS5hbmdsZSkscz1uZXcgdC5kZWZhdWx0JDEoYS5jYW5vbmljYWwueCxhLmNhbm9uaWNhbC55KS5yb3RhdGUoZS50cmFuc2Zvcm0uYW5nbGUpO3JldHVybiBpLm92ZXJzY2FsZWRaLWEub3ZlcnNjYWxlZFp8fHMueS1vLnl8fHMueC1vLnh9KX0sci5wcm90b3R5cGUuZ2V0UmVuZGVyYWJsZUlkcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldElkcygpLmZpbHRlcih0aGlzLl9pc0lkUmVuZGVyYWJsZSl9LHIucHJvdG90eXBlLmhhc1JlbmRlcmFibGVQYXJlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5maW5kTG9hZGVkUGFyZW50KHQsMCx7fSk7cmV0dXJuISFlJiZ0aGlzLl9pc0lkUmVuZGVyYWJsZShlLnRpbGVJRC5rZXkpfSxyLnByb3RvdHlwZS5faXNJZFJlbmRlcmFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3RpbGVzW3RdJiZ0aGlzLl90aWxlc1t0XS5oYXNEYXRhKCkmJiF0aGlzLl9jb3ZlcmVkVGlsZXNbdF19LHIucHJvdG90eXBlLnJlbG9hZD1mdW5jdGlvbigpe2lmKHRoaXMuX3BhdXNlZCl0aGlzLl9zaG91bGRSZWxvYWRPblJlc3VtZT0hMDtlbHNlIGZvcih2YXIgdCBpbiB0aGlzLl9jYWNoZS5yZXNldCgpLHRoaXMuX3RpbGVzKXRoaXMuX3JlbG9hZFRpbGUodCxcInJlbG9hZGluZ1wiKX0sci5wcm90b3R5cGUuX3JlbG9hZFRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl90aWxlc1t0XTtyJiYoXCJsb2FkaW5nXCIhPT1yLnN0YXRlJiYoci5zdGF0ZT1lKSx0aGlzLl9sb2FkVGlsZShyLHRoaXMuX3RpbGVMb2FkZWQuYmluZCh0aGlzLHIsdCxlKSkpfSxyLnByb3RvdHlwZS5fdGlsZUxvYWRlZD1mdW5jdGlvbihlLHIsbixpKXtpZihpKXJldHVybiBlLnN0YXRlPVwiZXJyb3JlZFwiLHZvaWQoNDA0IT09aS5zdGF0dXM/dGhpcy5fc291cmNlLmZpcmUobmV3IHQuRXJyb3JFdmVudChpLHt0aWxlOmV9KSk6dGhpcy51cGRhdGUodGhpcy50cmFuc2Zvcm0pKTtlLnRpbWVBZGRlZD1hLm5vdygpLFwiZXhwaXJlZFwiPT09biYmKGUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb249ITApLHRoaXMuX3NldFRpbGVSZWxvYWRUaW1lcihyLGUpLFwicmFzdGVyLWRlbVwiPT09dGhpcy5nZXRTb3VyY2UoKS50eXBlJiZlLmRlbSYmdGhpcy5fYmFja2ZpbGxERU0oZSksdGhpcy5fc291cmNlLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhXCIse2RhdGFUeXBlOlwic291cmNlXCIsdGlsZTplLGNvb3JkOmUudGlsZUlEfSkpLHRoaXMubWFwJiYodGhpcy5tYXAucGFpbnRlci50aWxlRXh0ZW50VkFPLnZhbz1udWxsKX0sci5wcm90b3R5cGUuX2JhY2tmaWxsREVNPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmdldFJlbmRlcmFibGVJZHMoKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07aWYodC5uZWlnaGJvcmluZ1RpbGVzJiZ0Lm5laWdoYm9yaW5nVGlsZXNbbl0pe3ZhciBpPXRoaXMuZ2V0VGlsZUJ5SUQobik7YSh0LGkpLGEoaSx0KX19ZnVuY3Rpb24gYSh0LGUpe3QubmVlZHNIaWxsc2hhZGVQcmVwYXJlPSEwO3ZhciByPWUudGlsZUlELmNhbm9uaWNhbC54LXQudGlsZUlELmNhbm9uaWNhbC54LG49ZS50aWxlSUQuY2Fub25pY2FsLnktdC50aWxlSUQuY2Fub25pY2FsLnksaT1NYXRoLnBvdygyLHQudGlsZUlELmNhbm9uaWNhbC56KSxhPWUudGlsZUlELmtleTswPT09ciYmMD09PW58fE1hdGguYWJzKG4pPjF8fChNYXRoLmFicyhyKT4xJiYoMT09PU1hdGguYWJzKHIraSk/cis9aToxPT09TWF0aC5hYnMoci1pKSYmKHItPWkpKSxlLmRlbSYmdC5kZW0mJih0LmRlbS5iYWNrZmlsbEJvcmRlcihlLmRlbSxyLG4pLHQubmVpZ2hib3JpbmdUaWxlcyYmdC5uZWlnaGJvcmluZ1RpbGVzW2FdJiYodC5uZWlnaGJvcmluZ1RpbGVzW2FdLmJhY2tmaWxsZWQ9ITApKSl9fSxyLnByb3RvdHlwZS5nZXRUaWxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldFRpbGVCeUlEKHQua2V5KX0sci5wcm90b3R5cGUuZ2V0VGlsZUJ5SUQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3RpbGVzW3RdfSxyLnByb3RvdHlwZS5nZXRab29tPWZ1bmN0aW9uKHQpe3JldHVybiB0Lnpvb20rdC5zY2FsZVpvb20odC50aWxlU2l6ZS90aGlzLl9zb3VyY2UudGlsZVNpemUpfSxyLnByb3RvdHlwZS5fZmluZExvYWRlZENoaWxkcmVuPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0hMTtmb3IodmFyIGkgaW4gdGhpcy5fdGlsZXMpe3ZhciBhPXRoaXMuX3RpbGVzW2ldO2lmKCEocltpXXx8IWEuaGFzRGF0YSgpfHxhLnRpbGVJRC5vdmVyc2NhbGVkWjw9dC5vdmVyc2NhbGVkWnx8YS50aWxlSUQub3ZlcnNjYWxlZFo+ZSkpe3ZhciBvPU1hdGgucG93KDIsYS50aWxlSUQuY2Fub25pY2FsLnotdC5jYW5vbmljYWwueik7aWYoTWF0aC5mbG9vcihhLnRpbGVJRC5jYW5vbmljYWwueC9vKT09PXQuY2Fub25pY2FsLngmJk1hdGguZmxvb3IoYS50aWxlSUQuY2Fub25pY2FsLnkvbyk9PT10LmNhbm9uaWNhbC55KWZvcihyW2ldPWEudGlsZUlELG49ITA7YSYmYS50aWxlSUQub3ZlcnNjYWxlZFotMT50Lm92ZXJzY2FsZWRaOyl7dmFyIHM9YS50aWxlSUQuc2NhbGVkVG8oYS50aWxlSUQub3ZlcnNjYWxlZFotMSk7aWYoIXMpYnJlYWs7KGE9dGhpcy5fdGlsZXNbcy5rZXldKSYmYS5oYXNEYXRhKCkmJihkZWxldGUgcltpXSxyW3Mua2V5XT1zKX19fXJldHVybiBufSxyLnByb3RvdHlwZS5maW5kTG9hZGVkUGFyZW50PWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC5vdmVyc2NhbGVkWi0xO24+PWU7bi0tKXt2YXIgaT10LnNjYWxlZFRvKG4pO2lmKCFpKXJldHVybjt2YXIgYT1TdHJpbmcoaS5rZXkpLG89dGhpcy5fdGlsZXNbYV07aWYobyYmby5oYXNEYXRhKCkpcmV0dXJuIHJbYV09aSxvO2lmKHRoaXMuX2NhY2hlLmhhcyhpKSlyZXR1cm4gclthXT1pLHRoaXMuX2NhY2hlLmdldChpKX19LHIucHJvdG90eXBlLnVwZGF0ZUNhY2hlU2l6ZT1mdW5jdGlvbih0KXt2YXIgZT0oTWF0aC5jZWlsKHQud2lkdGgvdGhpcy5fc291cmNlLnRpbGVTaXplKSsxKSooTWF0aC5jZWlsKHQuaGVpZ2h0L3RoaXMuX3NvdXJjZS50aWxlU2l6ZSkrMSkscj1NYXRoLmZsb29yKDUqZSksbj1cIm51bWJlclwiPT10eXBlb2YgdGhpcy5fbWF4VGlsZUNhY2hlU2l6ZT9NYXRoLm1pbih0aGlzLl9tYXhUaWxlQ2FjaGVTaXplLHIpOnI7dGhpcy5fY2FjaGUuc2V0TWF4U2l6ZShuKX0sci5wcm90b3R5cGUuaGFuZGxlV3JhcEp1bXA9ZnVuY3Rpb24odCl7dmFyIGU9KHQtKHZvaWQgMD09PXRoaXMuX3ByZXZMbmc/dDp0aGlzLl9wcmV2TG5nKSkvMzYwLHI9TWF0aC5yb3VuZChlKTtpZih0aGlzLl9wcmV2TG5nPXQscil7dmFyIG49e307Zm9yKHZhciBpIGluIHRoaXMuX3RpbGVzKXt2YXIgYT10aGlzLl90aWxlc1tpXTthLnRpbGVJRD1hLnRpbGVJRC51bndyYXBUbyhhLnRpbGVJRC53cmFwK3IpLG5bYS50aWxlSUQua2V5XT1hfWZvcih2YXIgbyBpbiB0aGlzLl90aWxlcz1uLHRoaXMuX3RpbWVycyljbGVhclRpbWVvdXQodGhpcy5fdGltZXJzW29dKSxkZWxldGUgdGhpcy5fdGltZXJzW29dO2Zvcih2YXIgcyBpbiB0aGlzLl90aWxlcyl7dmFyIGw9dGhpcy5fdGlsZXNbc107dGhpcy5fc2V0VGlsZVJlbG9hZFRpbWVyKHMsbCl9fX0sci5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7aWYodGhpcy50cmFuc2Zvcm09ZSx0aGlzLl9zb3VyY2VMb2FkZWQmJiF0aGlzLl9wYXVzZWQpe3ZhciBpO3RoaXMudXBkYXRlQ2FjaGVTaXplKGUpLHRoaXMuaGFuZGxlV3JhcEp1bXAodGhpcy50cmFuc2Zvcm0uY2VudGVyLmxuZyksdGhpcy5fY292ZXJlZFRpbGVzPXt9LHRoaXMudXNlZD90aGlzLl9zb3VyY2UudGlsZUlEP2k9ZS5nZXRWaXNpYmxlVW53cmFwcGVkQ29vcmRpbmF0ZXModGhpcy5fc291cmNlLnRpbGVJRCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUuY2Fub25pY2FsLnosZS53cmFwLGUuY2Fub25pY2FsLnosZS5jYW5vbmljYWwueCxlLmNhbm9uaWNhbC55KX0pOihpPWUuY292ZXJpbmdUaWxlcyh7dGlsZVNpemU6dGhpcy5fc291cmNlLnRpbGVTaXplLG1pbnpvb206dGhpcy5fc291cmNlLm1pbnpvb20sbWF4em9vbTp0aGlzLl9zb3VyY2UubWF4em9vbSxyb3VuZFpvb206dGhpcy5fc291cmNlLnJvdW5kWm9vbSxyZXBhcnNlT3ZlcnNjYWxlZDp0aGlzLl9zb3VyY2UucmVwYXJzZU92ZXJzY2FsZWR9KSx0aGlzLl9zb3VyY2UuaGFzVGlsZSYmKGk9aS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIG4uX3NvdXJjZS5oYXNUaWxlKHQpfSkpKTppPVtdO3ZhciBvLHM9KHRoaXMuX3NvdXJjZS5yb3VuZFpvb20/TWF0aC5yb3VuZDpNYXRoLmZsb29yKSh0aGlzLmdldFpvb20oZSkpLGw9TWF0aC5tYXgocy1yLm1heE92ZXJ6b29taW5nLHRoaXMuX3NvdXJjZS5taW56b29tKSxjPU1hdGgubWF4KHMrci5tYXhVbmRlcnpvb21pbmcsdGhpcy5fc291cmNlLm1pbnpvb20pLHU9dGhpcy5fdXBkYXRlUmV0YWluZWRUaWxlcyhpLHMpLGg9e307aWYoWnQodGhpcy5fc291cmNlLnR5cGUpKWZvcih2YXIgZj1PYmplY3Qua2V5cyh1KSxwPTA7cDxmLmxlbmd0aDtwKyspe3ZhciBkPWZbcF0sZz11W2RdLHY9bi5fdGlsZXNbZF07aWYodiYmKHZvaWQgMD09PXYuZmFkZUVuZFRpbWV8fHYuZmFkZUVuZFRpbWU+PWEubm93KCkpKXtuLl9maW5kTG9hZGVkQ2hpbGRyZW4oZyxjLHUpJiYodVtkXT1nKTt2YXIgbT1uLmZpbmRMb2FkZWRQYXJlbnQoZyxsLGgpO20mJm4uX2FkZFRpbGUobS50aWxlSUQpfX1mb3IobyBpbiBoKXVbb118fChuLl9jb3ZlcmVkVGlsZXNbb109ITApO2ZvcihvIGluIGgpdVtvXT1oW29dO2Zvcih2YXIgeT10LmtleXNEaWZmZXJlbmNlKHRoaXMuX3RpbGVzLHUpLHg9MDt4PHkubGVuZ3RoO3grKyluLl9yZW1vdmVUaWxlKHlbeF0pfX0sci5wcm90b3R5cGUuX3VwZGF0ZVJldGFpbmVkVGlsZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49e30saT17fSxhPU1hdGgubWF4KGUtci5tYXhPdmVyem9vbWluZyx0aGlzLl9zb3VyY2UubWluem9vbSksbz1NYXRoLm1heChlK3IubWF4VW5kZXJ6b29taW5nLHRoaXMuX3NvdXJjZS5taW56b29tKSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPXRbc10sYz10aGlzLl9hZGRUaWxlKGwpLHU9ITE7aWYoYy5oYXNEYXRhKCkpbltsLmtleV09bDtlbHNle3U9Yy53YXNSZXF1ZXN0ZWQoKSxuW2wua2V5XT1sO3ZhciBoPSEwO2lmKGUrMT50aGlzLl9zb3VyY2UubWF4em9vbSl7dmFyIGY9bC5jaGlsZHJlbih0aGlzLl9zb3VyY2UubWF4em9vbSlbMF0scD10aGlzLmdldFRpbGUoZik7cCYmcC5oYXNEYXRhKCk/bltmLmtleV09ZjpoPSExfWVsc2V7dGhpcy5fZmluZExvYWRlZENoaWxkcmVuKGwsbyxuKTtmb3IodmFyIGQ9bC5jaGlsZHJlbih0aGlzLl9zb3VyY2UubWF4em9vbSksZz0wO2c8ZC5sZW5ndGg7ZysrKWlmKCFuW2RbZ10ua2V5XSl7aD0hMTticmVha319aWYoIWgpZm9yKHZhciB2PWwub3ZlcnNjYWxlZFotMTt2Pj1hOy0tdil7dmFyIG09bC5zY2FsZWRUbyh2KTtpZihpW20ua2V5XSlicmVhaztpZihpW20ua2V5XT0hMCwhKGM9dGhpcy5nZXRUaWxlKG0pKSYmdSYmKGM9dGhpcy5fYWRkVGlsZShtKSksYyYmKG5bbS5rZXldPW0sdT1jLndhc1JlcXVlc3RlZCgpLGMuaGFzRGF0YSgpKSlicmVha319fXJldHVybiBufSxyLnByb3RvdHlwZS5fYWRkVGlsZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzLl90aWxlc1tlLmtleV07aWYocilyZXR1cm4gcjsocj10aGlzLl9jYWNoZS5nZXRBbmRSZW1vdmUoZSkpJiYodGhpcy5fc2V0VGlsZVJlbG9hZFRpbWVyKGUua2V5LHIpLHIudGlsZUlEPWUpO3ZhciBuPUJvb2xlYW4ocik7cmV0dXJuIG58fChyPW5ldyBzdChlLHRoaXMuX3NvdXJjZS50aWxlU2l6ZSplLm92ZXJzY2FsZUZhY3RvcigpKSx0aGlzLl9sb2FkVGlsZShyLHRoaXMuX3RpbGVMb2FkZWQuYmluZCh0aGlzLHIsZS5rZXksci5zdGF0ZSkpKSxyPyhyLnVzZXMrKyx0aGlzLl90aWxlc1tlLmtleV09cixufHx0aGlzLl9zb3VyY2UuZmlyZShuZXcgdC5FdmVudChcImRhdGFsb2FkaW5nXCIse3RpbGU6cixjb29yZDpyLnRpbGVJRCxkYXRhVHlwZTpcInNvdXJjZVwifSkpLHIpOm51bGx9LHIucHJvdG90eXBlLl9zZXRUaWxlUmVsb2FkVGltZXI9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzO3QgaW4gdGhpcy5fdGltZXJzJiYoY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyc1t0XSksZGVsZXRlIHRoaXMuX3RpbWVyc1t0XSk7dmFyIG49ZS5nZXRFeHBpcnlUaW1lb3V0KCk7biYmKHRoaXMuX3RpbWVyc1t0XT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ci5fcmVsb2FkVGlsZSh0LFwiZXhwaXJlZFwiKSxkZWxldGUgci5fdGltZXJzW3RdfSxuKSl9LHIucHJvdG90eXBlLl9yZW1vdmVUaWxlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbGVzW3RdO2UmJihlLnVzZXMtLSxkZWxldGUgdGhpcy5fdGlsZXNbdF0sdGhpcy5fdGltZXJzW3RdJiYoY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyc1t0XSksZGVsZXRlIHRoaXMuX3RpbWVyc1t0XSksZS51c2VzPjB8fChlLmhhc0RhdGEoKT90aGlzLl9jYWNoZS5hZGQoZS50aWxlSUQsZSxlLmdldEV4cGlyeVRpbWVvdXQoKSk6KGUuYWJvcnRlZD0hMCx0aGlzLl9hYm9ydFRpbGUoZSksdGhpcy5fdW5sb2FkVGlsZShlKSkpKX0sci5wcm90b3R5cGUuY2xlYXJUaWxlcz1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl9zaG91bGRSZWxvYWRPblJlc3VtZT0hMSx0aGlzLl9wYXVzZWQ9ITEsdGhpcy5fdGlsZXMpdGhpcy5fcmVtb3ZlVGlsZSh0KTt0aGlzLl9jYWNoZS5yZXNldCgpfSxyLnByb3RvdHlwZS50aWxlc0luPWZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPVtdLGk9dGhpcy5nZXRJZHMoKSxhPTEvMCxvPTEvMCxzPS0xLzAsbD0tMS8wLGM9ZVswXS56b29tLHU9MDt1PGUubGVuZ3RoO3UrKyl7dmFyIGg9ZVt1XTthPU1hdGgubWluKGEsaC5jb2x1bW4pLG89TWF0aC5taW4obyxoLnJvdykscz1NYXRoLm1heChzLGguY29sdW1uKSxsPU1hdGgubWF4KGwsaC5yb3cpfWZvcih2YXIgZj0wO2Y8aS5sZW5ndGg7ZisrKXt2YXIgcD10aGlzLl90aWxlc1tpW2ZdXSxkPXAudGlsZUlELGc9TWF0aC5wb3coMix0aGlzLnRyYW5zZm9ybS56b29tLXAudGlsZUlELm92ZXJzY2FsZWRaKSx2PXIqcC5xdWVyeVBhZGRpbmcqdC5kZWZhdWx0JDgvcC50aWxlU2l6ZS9nLG09W1h0KGQsbmV3IHQuZGVmYXVsdCQxNyhhLG8sYykpLFh0KGQsbmV3IHQuZGVmYXVsdCQxNyhzLGwsYykpXTtpZihtWzBdLngtdjx0LmRlZmF1bHQkOCYmbVswXS55LXY8dC5kZWZhdWx0JDgmJm1bMV0ueCt2Pj0wJiZtWzFdLnkrdj49MCl7Zm9yKHZhciB5PVtdLHg9MDt4PGUubGVuZ3RoO3grKyl5LnB1c2goWHQoZCxlW3hdKSk7bi5wdXNoKHt0aWxlOnAsdGlsZUlEOmQscXVlcnlHZW9tZXRyeTpbeV0sc2NhbGU6Z30pfX1yZXR1cm4gbn0sci5wcm90b3R5cGUuZ2V0VmlzaWJsZUNvb3JkaW5hdGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT10aGlzLmdldFJlbmRlcmFibGVJZHMoKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX3RpbGVzW2VdLnRpbGVJRH0pLHI9MCxuPWU7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdO2kucG9zTWF0cml4PXQudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeChpLnRvVW53cmFwcGVkKCkpfXJldHVybiBlfSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7aWYodGhpcy5fc291cmNlLmhhc1RyYW5zaXRpb24oKSlyZXR1cm4hMDtpZihadCh0aGlzLl9zb3VyY2UudHlwZSkpZm9yKHZhciB0IGluIHRoaXMuX3RpbGVzKXt2YXIgZT10aGlzLl90aWxlc1t0XTtpZih2b2lkIDAhPT1lLmZhZGVFbmRUaW1lJiZlLmZhZGVFbmRUaW1lPj1hLm5vdygpKXJldHVybiEwfXJldHVybiExfSxyfSh0LkV2ZW50ZWQpO2Z1bmN0aW9uIFh0KGUscil7dmFyIG49ci56b29tVG8oZS5jYW5vbmljYWwueik7cmV0dXJuIG5ldyB0LmRlZmF1bHQkMSgobi5jb2x1bW4tKGUuY2Fub25pY2FsLngrZS53cmFwKk1hdGgucG93KDIsZS5jYW5vbmljYWwueikpKSp0LmRlZmF1bHQkOCwobi5yb3ctZS5jYW5vbmljYWwueSkqdC5kZWZhdWx0JDgpfWZ1bmN0aW9uIFp0KHQpe3JldHVyblwicmFzdGVyXCI9PT10fHxcImltYWdlXCI9PT10fHxcInZpZGVvXCI9PT10fWZ1bmN0aW9uICR0KCl7cmV0dXJuIG5ldyB0LmRlZmF1bHQuV29ya2VyKEVuLndvcmtlclVybCl9V3QubWF4T3Zlcnpvb21pbmc9MTAsV3QubWF4VW5kZXJ6b29taW5nPTM7dmFyIEp0LEt0PWZ1bmN0aW9uKCl7dGhpcy5hY3RpdmU9e319O2Z1bmN0aW9uIFF0KGUscil7dmFyIG49e307Zm9yKHZhciBpIGluIGUpXCJyZWZcIiE9PWkmJihuW2ldPWVbaV0pO3JldHVybiB0LmRlZmF1bHQkMTguZm9yRWFjaChmdW5jdGlvbih0KXt0IGluIHImJihuW3RdPXJbdF0pfSksbn1mdW5jdGlvbiB0ZSh0KXt0PXQuc2xpY2UoKTtmb3IodmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKSxyPTA7cjx0Lmxlbmd0aDtyKyspZVt0W3JdLmlkXT10W3JdO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKVwicmVmXCJpbiB0W25dJiYodFtuXT1RdCh0W25dLGVbdFtuXS5yZWZdKSk7cmV0dXJuIHR9S3QucHJvdG90eXBlLmFjcXVpcmU9ZnVuY3Rpb24odCl7aWYoIXRoaXMud29ya2Vycyl7dmFyIGU9RW4ud29ya2VyQ291bnQ7Zm9yKHRoaXMud29ya2Vycz1bXTt0aGlzLndvcmtlcnMubGVuZ3RoPGU7KXRoaXMud29ya2Vycy5wdXNoKG5ldyAkdCl9cmV0dXJuIHRoaXMuYWN0aXZlW3RdPSEwLHRoaXMud29ya2Vycy5zbGljZSgpfSxLdC5wcm90b3R5cGUucmVsZWFzZT1mdW5jdGlvbih0KXtkZWxldGUgdGhpcy5hY3RpdmVbdF0sMD09PU9iamVjdC5rZXlzKHRoaXMuYWN0aXZlKS5sZW5ndGgmJih0aGlzLndvcmtlcnMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnRlcm1pbmF0ZSgpfSksdGhpcy53b3JrZXJzPW51bGwpfTt2YXIgZWU9e3NldFN0eWxlOlwic2V0U3R5bGVcIixhZGRMYXllcjpcImFkZExheWVyXCIscmVtb3ZlTGF5ZXI6XCJyZW1vdmVMYXllclwiLHNldFBhaW50UHJvcGVydHk6XCJzZXRQYWludFByb3BlcnR5XCIsc2V0TGF5b3V0UHJvcGVydHk6XCJzZXRMYXlvdXRQcm9wZXJ0eVwiLHNldEZpbHRlcjpcInNldEZpbHRlclwiLGFkZFNvdXJjZTpcImFkZFNvdXJjZVwiLHJlbW92ZVNvdXJjZTpcInJlbW92ZVNvdXJjZVwiLHNldEdlb0pTT05Tb3VyY2VEYXRhOlwic2V0R2VvSlNPTlNvdXJjZURhdGFcIixzZXRMYXllclpvb21SYW5nZTpcInNldExheWVyWm9vbVJhbmdlXCIsc2V0TGF5ZXJQcm9wZXJ0eTpcInNldExheWVyUHJvcGVydHlcIixzZXRDZW50ZXI6XCJzZXRDZW50ZXJcIixzZXRab29tOlwic2V0Wm9vbVwiLHNldEJlYXJpbmc6XCJzZXRCZWFyaW5nXCIsc2V0UGl0Y2g6XCJzZXRQaXRjaFwiLHNldFNwcml0ZTpcInNldFNwcml0ZVwiLHNldEdseXBoczpcInNldEdseXBoc1wiLHNldFRyYW5zaXRpb246XCJzZXRUcmFuc2l0aW9uXCIsc2V0TGlnaHQ6XCJzZXRMaWdodFwifTtmdW5jdGlvbiByZSh0LGUscil7ci5wdXNoKHtjb21tYW5kOmVlLmFkZFNvdXJjZSxhcmdzOlt0LGVbdF1dfSl9ZnVuY3Rpb24gbmUodCxlLHIpe2UucHVzaCh7Y29tbWFuZDplZS5yZW1vdmVTb3VyY2UsYXJnczpbdF19KSxyW3RdPSEwfWZ1bmN0aW9uIGllKHQsZSxyLG4pe25lKHQscixuKSxyZSh0LGUscil9ZnVuY3Rpb24gYWUoZSxyLG4pe3ZhciBpO2ZvcihpIGluIGVbbl0paWYoZVtuXS5oYXNPd25Qcm9wZXJ0eShpKSYmXCJkYXRhXCIhPT1pJiYhdC5kZWZhdWx0JDEwKGVbbl1baV0scltuXVtpXSkpcmV0dXJuITE7Zm9yKGkgaW4gcltuXSlpZihyW25dLmhhc093blByb3BlcnR5KGkpJiZcImRhdGFcIiE9PWkmJiF0LmRlZmF1bHQkMTAoZVtuXVtpXSxyW25dW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBvZShlLHIsbixpLGEsbyl7dmFyIHM7Zm9yKHMgaW4gcj1yfHx7fSxlPWV8fHt9KWUuaGFzT3duUHJvcGVydHkocykmJih0LmRlZmF1bHQkMTAoZVtzXSxyW3NdKXx8bi5wdXNoKHtjb21tYW5kOm8sYXJnczpbaSxzLHJbc10sYV19KSk7Zm9yKHMgaW4gcilyLmhhc093blByb3BlcnR5KHMpJiYhZS5oYXNPd25Qcm9wZXJ0eShzKSYmKHQuZGVmYXVsdCQxMChlW3NdLHJbc10pfHxuLnB1c2goe2NvbW1hbmQ6byxhcmdzOltpLHMscltzXSxhXX0pKX1mdW5jdGlvbiBzZSh0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBsZSh0LGUpe3JldHVybiB0W2UuaWRdPWUsdH12YXIgY2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuYm94Q2VsbHM9W10saT10aGlzLmNpcmNsZUNlbGxzPVtdO3RoaXMueENlbGxDb3VudD1NYXRoLmNlaWwodC9yKSx0aGlzLnlDZWxsQ291bnQ9TWF0aC5jZWlsKGUvcik7Zm9yKHZhciBhPTA7YTx0aGlzLnhDZWxsQ291bnQqdGhpcy55Q2VsbENvdW50O2ErKyluLnB1c2goW10pLGkucHVzaChbXSk7dGhpcy5jaXJjbGVLZXlzPVtdLHRoaXMuYm94S2V5cz1bXSx0aGlzLmJib3hlcz1bXSx0aGlzLmNpcmNsZXM9W10sdGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy54U2NhbGU9dGhpcy54Q2VsbENvdW50L3QsdGhpcy55U2NhbGU9dGhpcy55Q2VsbENvdW50L2UsdGhpcy5ib3hVaWQ9MCx0aGlzLmNpcmNsZVVpZD0wfTtjZS5wcm90b3R5cGUua2V5c0xlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJveEtleXMubGVuZ3RoK3RoaXMuY2lyY2xlS2V5cy5sZW5ndGh9LGNlLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLl9mb3JFYWNoQ2VsbChlLHIsbixpLHRoaXMuX2luc2VydEJveENlbGwsdGhpcy5ib3hVaWQrKyksdGhpcy5ib3hLZXlzLnB1c2godCksdGhpcy5iYm94ZXMucHVzaChlKSx0aGlzLmJib3hlcy5wdXNoKHIpLHRoaXMuYmJveGVzLnB1c2gobiksdGhpcy5iYm94ZXMucHVzaChpKX0sY2UucHJvdG90eXBlLmluc2VydENpcmNsZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLl9mb3JFYWNoQ2VsbChlLW4sci1uLGUrbixyK24sdGhpcy5faW5zZXJ0Q2lyY2xlQ2VsbCx0aGlzLmNpcmNsZVVpZCsrKSx0aGlzLmNpcmNsZUtleXMucHVzaCh0KSx0aGlzLmNpcmNsZXMucHVzaChlKSx0aGlzLmNpcmNsZXMucHVzaChyKSx0aGlzLmNpcmNsZXMucHVzaChuKX0sY2UucHJvdG90eXBlLl9pbnNlcnRCb3hDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLmJveENlbGxzW2ldLnB1c2goYSl9LGNlLnByb3RvdHlwZS5faW5zZXJ0Q2lyY2xlQ2VsbD1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5jaXJjbGVDZWxsc1tpXS5wdXNoKGEpfSxjZS5wcm90b3R5cGUuX3F1ZXJ5PWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYocjwwfHx0PnRoaXMud2lkdGh8fG48MHx8ZT50aGlzLmhlaWdodClyZXR1cm4haSYmW107dmFyIGE9W107aWYodDw9MCYmZTw9MCYmdGhpcy53aWR0aDw9ciYmdGhpcy5oZWlnaHQ8PW4pe2lmKGkpcmV0dXJuITA7Zm9yKHZhciBvPTA7bzx0aGlzLmJveEtleXMubGVuZ3RoO28rKylhLnB1c2goe2tleTp0aGlzLmJveEtleXNbb10seDE6dGhpcy5iYm94ZXNbNCpvXSx5MTp0aGlzLmJib3hlc1s0Km8rMV0seDI6dGhpcy5iYm94ZXNbNCpvKzJdLHkyOnRoaXMuYmJveGVzWzQqbyszXX0pO2Zvcih2YXIgcz0wO3M8dGhpcy5jaXJjbGVLZXlzLmxlbmd0aDtzKyspe3ZhciBsPXRoaXMuY2lyY2xlc1szKnNdLGM9dGhpcy5jaXJjbGVzWzMqcysxXSx1PXRoaXMuY2lyY2xlc1szKnMrMl07YS5wdXNoKHtrZXk6dGhpcy5jaXJjbGVLZXlzW3NdLHgxOmwtdSx5MTpjLXUseDI6bCt1LHkyOmMrdX0pfX1lbHNle3ZhciBoPXtoaXRUZXN0Omksc2VlblVpZHM6e2JveDp7fSxjaXJjbGU6e319fTt0aGlzLl9mb3JFYWNoQ2VsbCh0LGUscixuLHRoaXMuX3F1ZXJ5Q2VsbCxhLGgpfXJldHVybiBpP2EubGVuZ3RoPjA6YX0sY2UucHJvdG90eXBlLl9xdWVyeUNpcmNsZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10LXIsYT10K3Isbz1lLXIscz1lK3I7aWYoYTwwfHxpPnRoaXMud2lkdGh8fHM8MHx8bz50aGlzLmhlaWdodClyZXR1cm4hbiYmW107dmFyIGw9W10sYz17aGl0VGVzdDpuLGNpcmNsZTp7eDp0LHk6ZSxyYWRpdXM6cn0sc2VlblVpZHM6e2JveDp7fSxjaXJjbGU6e319fTtyZXR1cm4gdGhpcy5fZm9yRWFjaENlbGwoaSxvLGEscyx0aGlzLl9xdWVyeUNlbGxDaXJjbGUsbCxjKSxuP2wubGVuZ3RoPjA6bH0sY2UucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLl9xdWVyeSh0LGUscixuLCExKX0sY2UucHJvdG90eXBlLmhpdFRlc3Q9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRoaXMuX3F1ZXJ5KHQsZSxyLG4sITApfSxjZS5wcm90b3R5cGUuaGl0VGVzdENpcmNsZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3F1ZXJ5Q2lyY2xlKHQsZSxyLCEwKX0sY2UucHJvdG90eXBlLl9xdWVyeUNlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9by5zZWVuVWlkcyxsPXRoaXMuYm94Q2VsbHNbaV07aWYobnVsbCE9PWwpZm9yKHZhciBjPXRoaXMuYmJveGVzLHU9MCxoPWw7dTxoLmxlbmd0aDt1Kz0xKXt2YXIgZj1oW3VdO2lmKCFzLmJveFtmXSl7cy5ib3hbZl09ITA7dmFyIHA9NCpmO2lmKHQ8PWNbcCsyXSYmZTw9Y1twKzNdJiZyPj1jW3ArMF0mJm4+PWNbcCsxXSl7aWYoby5oaXRUZXN0KXJldHVybiBhLnB1c2goITApLCEwO2EucHVzaCh7a2V5OnRoaXMuYm94S2V5c1tmXSx4MTpjW3BdLHkxOmNbcCsxXSx4MjpjW3ArMl0seTI6Y1twKzNdfSl9fX12YXIgZD10aGlzLmNpcmNsZUNlbGxzW2ldO2lmKG51bGwhPT1kKWZvcih2YXIgZz10aGlzLmNpcmNsZXMsdj0wLG09ZDt2PG0ubGVuZ3RoO3YrPTEpe3ZhciB5PW1bdl07aWYoIXMuY2lyY2xlW3ldKXtzLmNpcmNsZVt5XT0hMDt2YXIgeD0zKnk7aWYodGhpcy5fY2lyY2xlQW5kUmVjdENvbGxpZGUoZ1t4XSxnW3grMV0sZ1t4KzJdLHQsZSxyLG4pKXtpZihvLmhpdFRlc3QpcmV0dXJuIGEucHVzaCghMCksITA7dmFyIGI9Z1t4XSxfPWdbeCsxXSx3PWdbeCsyXTthLnB1c2goe2tleTp0aGlzLmNpcmNsZUtleXNbeV0seDE6Yi13LHkxOl8tdyx4MjpiK3cseTI6Xyt3fSl9fX19LGNlLnByb3RvdHlwZS5fcXVlcnlDZWxsQ2lyY2xlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPW8uY2lyY2xlLGw9by5zZWVuVWlkcyxjPXRoaXMuYm94Q2VsbHNbaV07aWYobnVsbCE9PWMpZm9yKHZhciB1PXRoaXMuYmJveGVzLGg9MCxmPWM7aDxmLmxlbmd0aDtoKz0xKXt2YXIgcD1mW2hdO2lmKCFsLmJveFtwXSl7bC5ib3hbcF09ITA7dmFyIGQ9NCpwO2lmKHRoaXMuX2NpcmNsZUFuZFJlY3RDb2xsaWRlKHMueCxzLnkscy5yYWRpdXMsdVtkKzBdLHVbZCsxXSx1W2QrMl0sdVtkKzNdKSlyZXR1cm4gYS5wdXNoKCEwKSwhMH19dmFyIGc9dGhpcy5jaXJjbGVDZWxsc1tpXTtpZihudWxsIT09Zylmb3IodmFyIHY9dGhpcy5jaXJjbGVzLG09MCx5PWc7bTx5Lmxlbmd0aDttKz0xKXt2YXIgeD15W21dO2lmKCFsLmNpcmNsZVt4XSl7bC5jaXJjbGVbeF09ITA7dmFyIGI9Myp4O2lmKHRoaXMuX2NpcmNsZXNDb2xsaWRlKHZbYl0sdltiKzFdLHZbYisyXSxzLngscy55LHMucmFkaXVzKSlyZXR1cm4gYS5wdXNoKCEwKSwhMH19fSxjZS5wcm90b3R5cGUuX2ZvckVhY2hDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcz10aGlzLl9jb252ZXJ0VG9YQ2VsbENvb3JkKHQpLGw9dGhpcy5fY29udmVydFRvWUNlbGxDb29yZChlKSxjPXRoaXMuX2NvbnZlcnRUb1hDZWxsQ29vcmQociksdT10aGlzLl9jb252ZXJ0VG9ZQ2VsbENvb3JkKG4pLGg9cztoPD1jO2grKylmb3IodmFyIGY9bDtmPD11O2YrKyl7dmFyIHA9dGhpcy54Q2VsbENvdW50KmYraDtpZihpLmNhbGwodGhpcyx0LGUscixuLHAsYSxvKSlyZXR1cm59fSxjZS5wcm90b3R5cGUuX2NvbnZlcnRUb1hDZWxsQ29vcmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odGhpcy54Q2VsbENvdW50LTEsTWF0aC5mbG9vcih0KnRoaXMueFNjYWxlKSkpfSxjZS5wcm90b3R5cGUuX2NvbnZlcnRUb1lDZWxsQ29vcmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odGhpcy55Q2VsbENvdW50LTEsTWF0aC5mbG9vcih0KnRoaXMueVNjYWxlKSkpfSxjZS5wcm90b3R5cGUuX2NpcmNsZXNDb2xsaWRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1uLXQscz1pLWUsbD1yK2E7cmV0dXJuIGwqbD5vKm8rcypzfSxjZS5wcm90b3R5cGUuX2NpcmNsZUFuZFJlY3RDb2xsaWRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPShhLW4pLzIsbD1NYXRoLmFicyh0LShuK3MpKTtpZihsPnMrcilyZXR1cm4hMTt2YXIgYz0oby1pKS8yLHU9TWF0aC5hYnMoZS0oaStjKSk7aWYodT5jK3IpcmV0dXJuITE7aWYobDw9c3x8dTw9YylyZXR1cm4hMDt2YXIgaD1sLXMsZj11LWM7cmV0dXJuIGgqaCtmKmY8PXIqcn07dmFyIHVlPXQuZGVmYXVsdCQxOS5sYXlvdXQ7ZnVuY3Rpb24gaGUoZSxyLG4saSxhKXt2YXIgbz10Lm1hdDQuaWRlbnRpdHkobmV3IEZsb2F0MzJBcnJheSgxNikpO3JldHVybiByPyh0Lm1hdDQuaWRlbnRpdHkobyksdC5tYXQ0LnNjYWxlKG8sbyxbMS9hLDEvYSwxXSksbnx8dC5tYXQ0LnJvdGF0ZVoobyxvLGkuYW5nbGUpKToodC5tYXQ0LnNjYWxlKG8sbyxbaS53aWR0aC8yLC1pLmhlaWdodC8yLDFdKSx0Lm1hdDQudHJhbnNsYXRlKG8sbyxbMSwtMSwwXSksdC5tYXQ0Lm11bHRpcGx5KG8sbyxlKSksb31mdW5jdGlvbiBmZShlLHIsbixpLGEpe3ZhciBvPXQubWF0NC5pZGVudGl0eShuZXcgRmxvYXQzMkFycmF5KDE2KSk7cmV0dXJuIHI/KHQubWF0NC5tdWx0aXBseShvLG8sZSksdC5tYXQ0LnNjYWxlKG8sbyxbYSxhLDFdKSxufHx0Lm1hdDQucm90YXRlWihvLG8sLWkuYW5nbGUpKToodC5tYXQ0LnNjYWxlKG8sbyxbMSwtMSwxXSksdC5tYXQ0LnRyYW5zbGF0ZShvLG8sWy0xLC0xLDBdKSx0Lm1hdDQuc2NhbGUobyxvLFsyL2kud2lkdGgsMi9pLmhlaWdodCwxXSkpLG99ZnVuY3Rpb24gcGUoZSxyKXt2YXIgbj1bZS54LGUueSwwLDFdO2tlKG4sbixyKTt2YXIgaT1uWzNdO3JldHVybntwb2ludDpuZXcgdC5kZWZhdWx0JDEoblswXS9pLG5bMV0vaSksc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhOml9fWZ1bmN0aW9uIGRlKHQsZSl7dmFyIHI9dFswXS90WzNdLG49dFsxXS90WzNdO3JldHVybiByPj0tZVswXSYmcjw9ZVswXSYmbj49LWVbMV0mJm48PWVbMV19ZnVuY3Rpb24gZ2UoZSxyLG4saSxhLG8scyxsKXt2YXIgYz1pP2UudGV4dFNpemVEYXRhOmUuaWNvblNpemVEYXRhLHU9dC5ldmFsdWF0ZVNpemVGb3Jab29tKGMsbi50cmFuc2Zvcm0uem9vbSx1ZS5wcm9wZXJ0aWVzW2k/XCJ0ZXh0LXNpemVcIjpcImljb24tc2l6ZVwiXSksaD1bMjU2L24ud2lkdGgqMisxLDI1Ni9uLmhlaWdodCoyKzFdLGY9aT9lLnRleHQuZHluYW1pY0xheW91dFZlcnRleEFycmF5OmUuaWNvbi5keW5hbWljTGF5b3V0VmVydGV4QXJyYXk7Zi5jbGVhcigpO2Zvcih2YXIgcD1lLmxpbmVWZXJ0ZXhBcnJheSxkPWk/ZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5OmUuaWNvbi5wbGFjZWRTeW1ib2xBcnJheSxnPW4udHJhbnNmb3JtLndpZHRoL24udHJhbnNmb3JtLmhlaWdodCx2PSExLG09MDttPGQubGVuZ3RoO20rKyl7dmFyIHk9ZC5nZXQobSk7aWYoeS5oaWRkZW58fHkud3JpdGluZ01vZGU9PT10LldyaXRpbmdNb2RlLnZlcnRpY2FsJiYhdil3ZSh5Lm51bUdseXBocyxmKTtlbHNle3Y9ITE7dmFyIHg9W3kuYW5jaG9yWCx5LmFuY2hvclksMCwxXTtpZih0LnZlYzQudHJhbnNmb3JtTWF0NCh4LHgsciksZGUoeCxoKSl7dmFyIGI9LjUreFszXS9uLnRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlKi41LF89dC5ldmFsdWF0ZVNpemVGb3JGZWF0dXJlKGMsdSx5KSx3PXM/XypiOl8vYixrPW5ldyB0LmRlZmF1bHQkMSh5LmFuY2hvclgseS5hbmNob3JZKSxBPXBlKGssYSkucG9pbnQsVD17fSxNPXllKHksdywhMSxsLHIsYSxvLGUuZ2x5cGhPZmZzZXRBcnJheSxwLGYsQSxrLFQsZyk7dj1NLnVzZVZlcnRpY2FsLChNLm5vdEVub3VnaFJvb218fHZ8fE0ubmVlZHNGbGlwcGluZyYmeWUoeSx3LCEwLGwscixhLG8sZS5nbHlwaE9mZnNldEFycmF5LHAsZixBLGssVCxnKS5ub3RFbm91Z2hSb29tKSYmd2UoeS5udW1HbHlwaHMsZil9ZWxzZSB3ZSh5Lm51bUdseXBocyxmKX19aT9lLnRleHQuZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGYpOmUuaWNvbi5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoZil9ZnVuY3Rpb24gdmUodCxlLHIsbixpLGEsbyxzLGwsYyx1LGgpe3ZhciBmPXMuZ2x5cGhTdGFydEluZGV4K3MubnVtR2x5cGhzLHA9cy5saW5lU3RhcnRJbmRleCxkPXMubGluZVN0YXJ0SW5kZXgrcy5saW5lTGVuZ3RoLGc9ZS5nZXRvZmZzZXRYKHMuZ2x5cGhTdGFydEluZGV4KSx2PWUuZ2V0b2Zmc2V0WChmLTEpLG09YmUodCpnLHIsbixpLGEsbyxzLnNlZ21lbnQscCxkLGwsYyx1LGgpO2lmKCFtKXJldHVybiBudWxsO3ZhciB5PWJlKHQqdixyLG4saSxhLG8scy5zZWdtZW50LHAsZCxsLGMsdSxoKTtyZXR1cm4geT97Zmlyc3Q6bSxsYXN0Onl9Om51bGx9ZnVuY3Rpb24gbWUoZSxyLG4saSl7cmV0dXJuIGU9PT10LldyaXRpbmdNb2RlLmhvcml6b250YWwmJk1hdGguYWJzKG4ueS1yLnkpPk1hdGguYWJzKG4ueC1yLngpKmk/e3VzZVZlcnRpY2FsOiEwfTooZT09PXQuV3JpdGluZ01vZGUudmVydGljYWw/ci55PG4ueTpyLng+bi54KT97bmVlZHNGbGlwcGluZzohMH06bnVsbH1mdW5jdGlvbiB5ZShlLHIsbixpLGEsbyxzLGwsYyx1LGgsZixwLGQpe3ZhciBnLHY9ci8yNCxtPWUubGluZU9mZnNldFgqcix5PWUubGluZU9mZnNldFkqcjtpZihlLm51bUdseXBocz4xKXt2YXIgeD1lLmdseXBoU3RhcnRJbmRleCtlLm51bUdseXBocyxiPWUubGluZVN0YXJ0SW5kZXgsXz1lLmxpbmVTdGFydEluZGV4K2UubGluZUxlbmd0aCx3PXZlKHYsbCxtLHksbixoLGYsZSxjLG8scCwhMSk7aWYoIXcpcmV0dXJue25vdEVub3VnaFJvb206ITB9O3ZhciBrPXBlKHcuZmlyc3QucG9pbnQscykucG9pbnQsQT1wZSh3Lmxhc3QucG9pbnQscykucG9pbnQ7aWYoaSYmIW4pe3ZhciBUPW1lKGUud3JpdGluZ01vZGUsayxBLGQpO2lmKFQpcmV0dXJuIFR9Zz1bdy5maXJzdF07Zm9yKHZhciBNPWUuZ2x5cGhTdGFydEluZGV4KzE7TTx4LTE7TSsrKWcucHVzaChiZSh2KmwuZ2V0b2Zmc2V0WChNKSxtLHksbixoLGYsZS5zZWdtZW50LGIsXyxjLG8scCwhMSkpO2cucHVzaCh3Lmxhc3QpfWVsc2V7aWYoaSYmIW4pe3ZhciBTPXBlKGYsYSkucG9pbnQsRT1lLmxpbmVTdGFydEluZGV4K2Uuc2VnbWVudCsxLEM9bmV3IHQuZGVmYXVsdCQxKGMuZ2V0eChFKSxjLmdldHkoRSkpLEw9cGUoQyxhKSx6PUwuc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhPjA/TC5wb2ludDp4ZShmLEMsUywxLGEpLE89bWUoZS53cml0aW5nTW9kZSxTLHosZCk7aWYoTylyZXR1cm4gT312YXIgST1iZSh2KmwuZ2V0b2Zmc2V0WChlLmdseXBoU3RhcnRJbmRleCksbSx5LG4saCxmLGUuc2VnbWVudCxlLmxpbmVTdGFydEluZGV4LGUubGluZVN0YXJ0SW5kZXgrZS5saW5lTGVuZ3RoLGMsbyxwLCExKTtpZighSSlyZXR1cm57bm90RW5vdWdoUm9vbTohMH07Zz1bSV19Zm9yKHZhciBEPTAsUD1nO0Q8UC5sZW5ndGg7RCs9MSl7dmFyIFI9UFtEXTt0LmFkZER5bmFtaWNBdHRyaWJ1dGVzKHUsUi5wb2ludCxSLmFuZ2xlKX1yZXR1cm57fX1mdW5jdGlvbiB4ZSh0LGUscixuLGkpe3ZhciBhPXBlKHQuYWRkKHQuc3ViKGUpLl91bml0KCkpLGkpLnBvaW50LG89ci5zdWIoYSk7cmV0dXJuIHIuYWRkKG8uX211bHQobi9vLm1hZygpKSl9ZnVuY3Rpb24gYmUoZSxyLG4saSxhLG8scyxsLGMsdSxoLGYscCl7dmFyIGQ9aT9lLXI6ZStyLGc9ZD4wPzE6LTEsdj0wO2kmJihnKj0tMSx2PU1hdGguUEkpLGc8MCYmKHYrPU1hdGguUEkpO2Zvcih2YXIgbT1nPjA/bCtzOmwrcysxLHk9bSx4PWEsYj1hLF89MCx3PTAsaz1NYXRoLmFicyhkKTtfK3c8PWs7KXtpZigobSs9Zyk8bHx8bT49YylyZXR1cm4gbnVsbDtpZihiPXgsdm9pZCAwPT09KHg9ZlttXSkpe3ZhciBBPW5ldyB0LmRlZmF1bHQkMSh1LmdldHgobSksdS5nZXR5KG0pKSxUPXBlKEEsaCk7aWYoVC5zaWduZWREaXN0YW5jZUZyb21DYW1lcmE+MCl4PWZbbV09VC5wb2ludDtlbHNle3ZhciBNPW0tZzt4PXhlKDA9PT1fP286bmV3IHQuZGVmYXVsdCQxKHUuZ2V0eChNKSx1LmdldHkoTSkpLEEsYixrLV8rMSxoKX19Xys9dyx3PWIuZGlzdCh4KX12YXIgUz0oay1fKS93LEU9eC5zdWIoYiksQz1FLm11bHQoUykuX2FkZChiKTtyZXR1cm4gQy5fYWRkKEUuX3VuaXQoKS5fcGVycCgpLl9tdWx0KG4qZykpLHtwb2ludDpDLGFuZ2xlOnYrTWF0aC5hdGFuMih4LnktYi55LHgueC1iLngpLHRpbGVEaXN0YW5jZTpwP3twcmV2VGlsZURpc3RhbmNlOm0tZz09PXk/MDp1LmdldHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yKG0tZyksbGFzdFNlZ21lbnRWaWV3cG9ydERpc3RhbmNlOmstX306bnVsbH19dmFyIF9lPW5ldyBGbG9hdDMyQXJyYXkoWy0xLzAsLTEvMCwwLC0xLzAsLTEvMCwwLC0xLzAsLTEvMCwwLC0xLzAsLTEvMCwwXSk7ZnVuY3Rpb24gd2UodCxlKXtmb3IodmFyIHI9MDtyPHQ7cisrKXt2YXIgbj1lLmxlbmd0aDtlLnJlc2l6ZShuKzQpLGUuZmxvYXQzMi5zZXQoX2UsMypuKX19ZnVuY3Rpb24ga2UodCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdO3JldHVybiB0WzBdPXJbMF0qbityWzRdKmkrclsxMl0sdFsxXT1yWzFdKm4rcls1XSppK3JbMTNdLHRbM109clszXSpuK3JbN10qaStyWzE1XSx0fXQuZGVmYXVsdCQyMC5tYXQ0O3ZhciBBZT1mdW5jdGlvbih0LGUscil7dm9pZCAwPT09ZSYmKGU9bmV3IGNlKHQud2lkdGgrMjAwLHQuaGVpZ2h0KzIwMCwyNSkpLHZvaWQgMD09PXImJihyPW5ldyBjZSh0LndpZHRoKzIwMCx0LmhlaWdodCsyMDAsMjUpKSx0aGlzLnRyYW5zZm9ybT10LHRoaXMuZ3JpZD1lLHRoaXMuaWdub3JlZEdyaWQ9cix0aGlzLnBpdGNoZmFjdG9yPU1hdGguY29zKHQuX3BpdGNoKSp0LmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UsdGhpcy5zY3JlZW5SaWdodEJvdW5kYXJ5PXQud2lkdGgrMTAwLHRoaXMuc2NyZWVuQm90dG9tQm91bmRhcnk9dC5oZWlnaHQrMTAwfTtmdW5jdGlvbiBUZSh0LGUscil7dFtlKzRdPXI/MTowfWZ1bmN0aW9uIE1lKGUscixuKXtyZXR1cm4gcioodC5kZWZhdWx0JDgvKGUudGlsZVNpemUqTWF0aC5wb3coMixuLWUudGlsZUlELm92ZXJzY2FsZWRaKSkpfUFlLnByb3RvdHlwZS5wbGFjZUNvbGxpc2lvbkJveD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLnByb2plY3RBbmRHZXRQZXJzcGVjdGl2ZVJhdGlvKG4sdC5hbmNob3JQb2ludFgsdC5hbmNob3JQb2ludFkpLGE9cippLnBlcnNwZWN0aXZlUmF0aW8sbz10LngxKmEraS5wb2ludC54LHM9dC55MSphK2kucG9pbnQueSxsPXQueDIqYStpLnBvaW50LngsYz10LnkyKmEraS5wb2ludC55O3JldHVybiFlJiZ0aGlzLmdyaWQuaGl0VGVzdChvLHMsbCxjKT97Ym94OltdLG9mZnNjcmVlbjohMX06e2JveDpbbyxzLGwsY10sb2Zmc2NyZWVuOnRoaXMuaXNPZmZzY3JlZW4obyxzLGwsYyl9fSxBZS5wcm90b3R5cGUuYXBwcm94aW1hdGVUaWxlRGlzdGFuY2U9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1pPzE6bi90aGlzLnBpdGNoZmFjdG9yLG89dC5sYXN0U2VnbWVudFZpZXdwb3J0RGlzdGFuY2UqcjtyZXR1cm4gdC5wcmV2VGlsZURpc3RhbmNlK28rKGEtMSkqbypNYXRoLmFicyhNYXRoLnNpbihlKSl9LEFlLnByb3RvdHlwZS5wbGFjZUNvbGxpc2lvbkNpcmNsZXM9ZnVuY3Rpb24oZSxyLG4saSxhLG8scyxsLGMsdSxoLGYscCl7dmFyIGQ9W10sZz10aGlzLnByb2plY3RBbmNob3IodSxvLmFuY2hvclgsby5hbmNob3JZKSx2PWMvMjQsbT1vLmxpbmVPZmZzZXRYKmMseT1vLmxpbmVPZmZzZXRZKmMseD1uZXcgdC5kZWZhdWx0JDEoby5hbmNob3JYLG8uYW5jaG9yWSksYj12ZSh2LGwsbSx5LCExLHBlKHgsaCkucG9pbnQseCxvLHMsaCx7fSwhMCksXz0hMSx3PSEwLGs9Zy5wZXJzcGVjdGl2ZVJhdGlvKmksQT0xLyhpKm4pLFQ9MCxNPTA7YiYmKFQ9dGhpcy5hcHByb3hpbWF0ZVRpbGVEaXN0YW5jZShiLmZpcnN0LnRpbGVEaXN0YW5jZSxiLmZpcnN0LmFuZ2xlLEEsZy5jYW1lcmFEaXN0YW5jZSxwKSxNPXRoaXMuYXBwcm94aW1hdGVUaWxlRGlzdGFuY2UoYi5sYXN0LnRpbGVEaXN0YW5jZSxiLmxhc3QuYW5nbGUsQSxnLmNhbWVyYURpc3RhbmNlLHApKTtmb3IodmFyIFM9MDtTPGUubGVuZ3RoO1MrPTUpe3ZhciBFPWVbU10sQz1lW1MrMV0sTD1lW1MrMl0sej1lW1MrM107aWYoIWJ8fHo8LVR8fHo+TSlUZShlLFMsITEpO2Vsc2V7dmFyIE89dGhpcy5wcm9qZWN0UG9pbnQodSxFLEMpLEk9TCprO2lmKGQubGVuZ3RoPjApe3ZhciBEPU8ueC1kW2QubGVuZ3RoLTRdLFA9Ty55LWRbZC5sZW5ndGgtM107aWYoSSpJKjI+RCpEK1AqUCYmUys4PGUubGVuZ3RoKXt2YXIgUj1lW1MrOF07aWYoUj4tVCYmUjxNKXtUZShlLFMsITEpO2NvbnRpbnVlfX19dmFyIEY9Uy81O2lmKGQucHVzaChPLngsTy55LEksRiksVGUoZSxTLCEwKSx3PXcmJnRoaXMuaXNPZmZzY3JlZW4oTy54LUksTy55LUksTy54K0ksTy55K0kpLCFyJiZ0aGlzLmdyaWQuaGl0VGVzdENpcmNsZShPLngsTy55LEkpKXtpZighZilyZXR1cm57Y2lyY2xlczpbXSxvZmZzY3JlZW46ITF9O189ITB9fX1yZXR1cm57Y2lyY2xlczpfP1tdOmQsb2Zmc2NyZWVuOnd9fSxBZS5wcm90b3R5cGUucXVlcnlSZW5kZXJlZFN5bWJvbHM9ZnVuY3Rpb24oZSl7aWYoMD09PWUubGVuZ3RofHwwPT09dGhpcy5ncmlkLmtleXNMZW5ndGgoKSYmMD09PXRoaXMuaWdub3JlZEdyaWQua2V5c0xlbmd0aCgpKXJldHVybnt9O2Zvcih2YXIgcj1bXSxuPTEvMCxpPTEvMCxhPS0xLzAsbz0tMS8wLHM9MCxsPWU7czxsLmxlbmd0aDtzKz0xKXt2YXIgYz1sW3NdLHU9bmV3IHQuZGVmYXVsdCQxKGMueCsxMDAsYy55KzEwMCk7bj1NYXRoLm1pbihuLHUueCksaT1NYXRoLm1pbihpLHUueSksYT1NYXRoLm1heChhLHUueCksbz1NYXRoLm1heChvLHUueSksci5wdXNoKHUpfWZvcih2YXIgaD17fSxmPXt9LHA9MCxkPXRoaXMuZ3JpZC5xdWVyeShuLGksYSxvKS5jb25jYXQodGhpcy5pZ25vcmVkR3JpZC5xdWVyeShuLGksYSxvKSk7cDxkLmxlbmd0aDtwKz0xKXt2YXIgZz1kW3BdLHY9Zy5rZXk7aWYodm9pZCAwPT09aFt2LmJ1Y2tldEluc3RhbmNlSWRdJiYoaFt2LmJ1Y2tldEluc3RhbmNlSWRdPXt9KSwhaFt2LmJ1Y2tldEluc3RhbmNlSWRdW3YuZmVhdHVyZUluZGV4XSl7dmFyIG09W25ldyB0LmRlZmF1bHQkMShnLngxLGcueTEpLG5ldyB0LmRlZmF1bHQkMShnLngyLGcueTEpLG5ldyB0LmRlZmF1bHQkMShnLngyLGcueTIpLG5ldyB0LmRlZmF1bHQkMShnLngxLGcueTIpXTt0LnBvbHlnb25JbnRlcnNlY3RzUG9seWdvbihyLG0pJiYoaFt2LmJ1Y2tldEluc3RhbmNlSWRdW3YuZmVhdHVyZUluZGV4XT0hMCx2b2lkIDA9PT1mW3YuYnVja2V0SW5zdGFuY2VJZF0mJihmW3YuYnVja2V0SW5zdGFuY2VJZF09W10pLGZbdi5idWNrZXRJbnN0YW5jZUlkXS5wdXNoKHYuZmVhdHVyZUluZGV4KSl9fXJldHVybiBmfSxBZS5wcm90b3R5cGUuaW5zZXJ0Q29sbGlzaW9uQm94PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXtidWNrZXRJbnN0YW5jZUlkOnIsZmVhdHVyZUluZGV4Om59OyhlP3RoaXMuaWdub3JlZEdyaWQ6dGhpcy5ncmlkKS5pbnNlcnQoaSx0WzBdLHRbMV0sdFsyXSx0WzNdKX0sQWUucHJvdG90eXBlLmluc2VydENvbGxpc2lvbkNpcmNsZXM9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPWU/dGhpcy5pZ25vcmVkR3JpZDp0aGlzLmdyaWQsYT17YnVja2V0SW5zdGFuY2VJZDpyLGZlYXR1cmVJbmRleDpufSxvPTA7bzx0Lmxlbmd0aDtvKz00KWkuaW5zZXJ0Q2lyY2xlKGEsdFtvXSx0W28rMV0sdFtvKzJdKX0sQWUucHJvdG90eXBlLnByb2plY3RBbmNob3I9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVtlLHIsMCwxXTtyZXR1cm4ga2UobixuLHQpLHtwZXJzcGVjdGl2ZVJhdGlvOi41K3RoaXMudHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UvblszXSouNSxjYW1lcmFEaXN0YW5jZTpuWzNdfX0sQWUucHJvdG90eXBlLnByb2plY3RQb2ludD1mdW5jdGlvbihlLHIsbil7dmFyIGk9W3IsbiwwLDFdO3JldHVybiBrZShpLGksZSksbmV3IHQuZGVmYXVsdCQxKChpWzBdL2lbM10rMSkvMip0aGlzLnRyYW5zZm9ybS53aWR0aCsxMDAsKC1pWzFdL2lbM10rMSkvMip0aGlzLnRyYW5zZm9ybS5oZWlnaHQrMTAwKX0sQWUucHJvdG90eXBlLnByb2plY3RBbmRHZXRQZXJzcGVjdGl2ZVJhdGlvPWZ1bmN0aW9uKGUscixuKXt2YXIgaT1bcixuLDAsMV07cmV0dXJuIGtlKGksaSxlKSx7cG9pbnQ6bmV3IHQuZGVmYXVsdCQxKChpWzBdL2lbM10rMSkvMip0aGlzLnRyYW5zZm9ybS53aWR0aCsxMDAsKC1pWzFdL2lbM10rMSkvMip0aGlzLnRyYW5zZm9ybS5oZWlnaHQrMTAwKSxwZXJzcGVjdGl2ZVJhdGlvOi41K3RoaXMudHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UvaVszXSouNX19LEFlLnByb3RvdHlwZS5pc09mZnNjcmVlbj1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gcjwxMDB8fHQ+PXRoaXMuc2NyZWVuUmlnaHRCb3VuZGFyeXx8bjwxMDB8fGU+dGhpcy5zY3JlZW5Cb3R0b21Cb3VuZGFyeX07dmFyIFNlPXQuZGVmYXVsdCQxOS5sYXlvdXQsRWU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5vcGFjaXR5PXQ/TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQub3BhY2l0eSsodC5wbGFjZWQ/ZTotZSkpKTpuJiZyPzE6MCx0aGlzLnBsYWNlZD1yfTtFZS5wcm90b3R5cGUuaXNIaWRkZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMub3BhY2l0eSYmIXRoaXMucGxhY2VkfTt2YXIgQ2U9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLnRleHQ9bmV3IEVlKHQ/dC50ZXh0Om51bGwsZSxyLGkpLHRoaXMuaWNvbj1uZXcgRWUodD90Lmljb246bnVsbCxlLG4saSl9O0NlLnByb3RvdHlwZS5pc0hpZGRlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQuaXNIaWRkZW4oKSYmdGhpcy5pY29uLmlzSGlkZGVuKCl9O3ZhciBMZT1mdW5jdGlvbih0LGUscil7dGhpcy50ZXh0PXQsdGhpcy5pY29uPWUsdGhpcy5za2lwRmFkZT1yfSx6ZT1mdW5jdGlvbih0LGUpe3RoaXMudHJhbnNmb3JtPXQuY2xvbmUoKSx0aGlzLmNvbGxpc2lvbkluZGV4PW5ldyBBZSh0aGlzLnRyYW5zZm9ybSksdGhpcy5wbGFjZW1lbnRzPXt9LHRoaXMub3BhY2l0aWVzPXt9LHRoaXMuc3RhbGU9ITEsdGhpcy5mYWRlRHVyYXRpb249ZSx0aGlzLnJldGFpbmVkUXVlcnlEYXRhPXt9fTtmdW5jdGlvbiBPZSh0LGUscil7dC5lbXBsYWNlQmFjayhlPzE6MCxyPzE6MCksdC5lbXBsYWNlQmFjayhlPzE6MCxyPzE6MCksdC5lbXBsYWNlQmFjayhlPzE6MCxyPzE6MCksdC5lbXBsYWNlQmFjayhlPzE6MCxyPzE6MCl9emUucHJvdG90eXBlLnBsYWNlTGF5ZXJUaWxlPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXIuZ2V0QnVja2V0KGUpLG89ci5sYXRlc3RGZWF0dXJlSW5kZXg7aWYoYSYmbyYmZS5pZD09PWEubGF5ZXJJZHNbMF0pe3ZhciBzPXIuY29sbGlzaW9uQm94QXJyYXksbD1hLmxheWVyc1swXS5sYXlvdXQsYz1NYXRoLnBvdygyLHRoaXMudHJhbnNmb3JtLnpvb20tci50aWxlSUQub3ZlcnNjYWxlZFopLHU9ci50aWxlU2l6ZS90LmRlZmF1bHQkOCxoPXRoaXMudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeChyLnRpbGVJRC50b1Vud3JhcHBlZCgpKSxmPWhlKGgsXCJtYXBcIj09PWwuZ2V0KFwidGV4dC1waXRjaC1hbGlnbm1lbnRcIiksXCJtYXBcIj09PWwuZ2V0KFwidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnRcIiksdGhpcy50cmFuc2Zvcm0sTWUociwxLHRoaXMudHJhbnNmb3JtLnpvb20pKSxwPWhlKGgsXCJtYXBcIj09PWwuZ2V0KFwiaWNvbi1waXRjaC1hbGlnbm1lbnRcIiksXCJtYXBcIj09PWwuZ2V0KFwiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnRcIiksdGhpcy50cmFuc2Zvcm0sTWUociwxLHRoaXMudHJhbnNmb3JtLnpvb20pKTt0aGlzLnJldGFpbmVkUXVlcnlEYXRhW2EuYnVja2V0SW5zdGFuY2VJZF09bmV3IGZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5idWNrZXRJbnN0YW5jZUlkPXQsdGhpcy5mZWF0dXJlSW5kZXg9ZSx0aGlzLnNvdXJjZUxheWVySW5kZXg9cix0aGlzLmJ1Y2tldEluZGV4PW4sdGhpcy50aWxlSUQ9aX0oYS5idWNrZXRJbnN0YW5jZUlkLG8sYS5zb3VyY2VMYXllckluZGV4LGEuaW5kZXgsci50aWxlSUQpLHRoaXMucGxhY2VMYXllckJ1Y2tldChhLGgsZixwLGMsdSxuLGkscyl9fSx6ZS5wcm90b3R5cGUucGxhY2VMYXllckJ1Y2tldD1mdW5jdGlvbihlLHIsbixpLGEsbyxzLGwsYyl7Zm9yKHZhciB1PWUubGF5ZXJzWzBdLmxheW91dCxoPXQuZXZhbHVhdGVTaXplRm9yWm9vbShlLnRleHRTaXplRGF0YSx0aGlzLnRyYW5zZm9ybS56b29tLFNlLnByb3BlcnRpZXNbXCJ0ZXh0LXNpemVcIl0pLGY9IWUuaGFzVGV4dERhdGEoKXx8dS5nZXQoXCJ0ZXh0LW9wdGlvbmFsXCIpLHA9IWUuaGFzSWNvbkRhdGEoKXx8dS5nZXQoXCJpY29uLW9wdGlvbmFsXCIpLGQ9MCxnPWUuc3ltYm9sSW5zdGFuY2VzO2Q8Zy5sZW5ndGg7ZCs9MSl7dmFyIHY9Z1tkXTtpZighbFt2LmNyb3NzVGlsZUlEXSl7dmFyIG09dm9pZCAwIT09di5mZWF0dXJlLnRleHQseT12b2lkIDAhPT12LmZlYXR1cmUuaWNvbix4PSEwLGI9bnVsbCxfPW51bGwsdz1udWxsLGs9MCxBPTA7di5jb2xsaXNpb25BcnJheXN8fCh2LmNvbGxpc2lvbkFycmF5cz1lLmRlc2VyaWFsaXplQ29sbGlzaW9uQm94ZXMoYyx2LnRleHRCb3hTdGFydEluZGV4LHYudGV4dEJveEVuZEluZGV4LHYuaWNvbkJveFN0YXJ0SW5kZXgsdi5pY29uQm94RW5kSW5kZXgpKSx2LmNvbGxpc2lvbkFycmF5cy50ZXh0RmVhdHVyZUluZGV4JiYoaz12LmNvbGxpc2lvbkFycmF5cy50ZXh0RmVhdHVyZUluZGV4KSx2LmNvbGxpc2lvbkFycmF5cy50ZXh0Qm94JiYobT0oYj10aGlzLmNvbGxpc2lvbkluZGV4LnBsYWNlQ29sbGlzaW9uQm94KHYuY29sbGlzaW9uQXJyYXlzLnRleHRCb3gsdS5nZXQoXCJ0ZXh0LWFsbG93LW92ZXJsYXBcIiksbyxyKSkuYm94Lmxlbmd0aD4wLHg9eCYmYi5vZmZzY3JlZW4pO3ZhciBUPXYuY29sbGlzaW9uQXJyYXlzLnRleHRDaXJjbGVzO2lmKFQpe3ZhciBNPWUudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQodi5wbGFjZWRUZXh0U3ltYm9sSW5kaWNlc1swXSksUz10LmV2YWx1YXRlU2l6ZUZvckZlYXR1cmUoZS50ZXh0U2l6ZURhdGEsaCxNKTtfPXRoaXMuY29sbGlzaW9uSW5kZXgucGxhY2VDb2xsaXNpb25DaXJjbGVzKFQsdS5nZXQoXCJ0ZXh0LWFsbG93LW92ZXJsYXBcIiksYSxvLHYua2V5LE0sZS5saW5lVmVydGV4QXJyYXksZS5nbHlwaE9mZnNldEFycmF5LFMscixuLHMsXCJtYXBcIj09PXUuZ2V0KFwidGV4dC1waXRjaC1hbGlnbm1lbnRcIikpLG09dS5nZXQoXCJ0ZXh0LWFsbG93LW92ZXJsYXBcIil8fF8uY2lyY2xlcy5sZW5ndGg+MCx4PXgmJl8ub2Zmc2NyZWVufXYuY29sbGlzaW9uQXJyYXlzLmljb25GZWF0dXJlSW5kZXgmJihBPXYuY29sbGlzaW9uQXJyYXlzLmljb25GZWF0dXJlSW5kZXgpLHYuY29sbGlzaW9uQXJyYXlzLmljb25Cb3gmJih5PSh3PXRoaXMuY29sbGlzaW9uSW5kZXgucGxhY2VDb2xsaXNpb25Cb3godi5jb2xsaXNpb25BcnJheXMuaWNvbkJveCx1LmdldChcImljb24tYWxsb3ctb3ZlcmxhcFwiKSxvLHIpKS5ib3gubGVuZ3RoPjAseD14JiZ3Lm9mZnNjcmVlbiksZnx8cD9wP2Z8fCh5PXkmJm0pOm09eSYmbTp5PW09eSYmbSxtJiZiJiZ0aGlzLmNvbGxpc2lvbkluZGV4Lmluc2VydENvbGxpc2lvbkJveChiLmJveCx1LmdldChcInRleHQtaWdub3JlLXBsYWNlbWVudFwiKSxlLmJ1Y2tldEluc3RhbmNlSWQsaykseSYmdyYmdGhpcy5jb2xsaXNpb25JbmRleC5pbnNlcnRDb2xsaXNpb25Cb3gody5ib3gsdS5nZXQoXCJpY29uLWlnbm9yZS1wbGFjZW1lbnRcIiksZS5idWNrZXRJbnN0YW5jZUlkLEEpLG0mJl8mJnRoaXMuY29sbGlzaW9uSW5kZXguaW5zZXJ0Q29sbGlzaW9uQ2lyY2xlcyhfLmNpcmNsZXMsdS5nZXQoXCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnRcIiksZS5idWNrZXRJbnN0YW5jZUlkLGspLHRoaXMucGxhY2VtZW50c1t2LmNyb3NzVGlsZUlEXT1uZXcgTGUobSx5LHh8fGUuanVzdFJlbG9hZGVkKSxsW3YuY3Jvc3NUaWxlSURdPSEwfX1lLmp1c3RSZWxvYWRlZD0hMX0semUucHJvdG90eXBlLmNvbW1pdD1mdW5jdGlvbih0LGUpe3RoaXMuY29tbWl0VGltZT1lO3ZhciByPSExLG49dCYmMCE9PXRoaXMuZmFkZUR1cmF0aW9uPyh0aGlzLmNvbW1pdFRpbWUtdC5jb21taXRUaW1lKS90aGlzLmZhZGVEdXJhdGlvbjoxLGk9dD90Lm9wYWNpdGllczp7fTtmb3IodmFyIGEgaW4gdGhpcy5wbGFjZW1lbnRzKXt2YXIgbz10aGlzLnBsYWNlbWVudHNbYV0scz1pW2FdO3M/KHRoaXMub3BhY2l0aWVzW2FdPW5ldyBDZShzLG4sby50ZXh0LG8uaWNvbikscj1yfHxvLnRleHQhPT1zLnRleHQucGxhY2VkfHxvLmljb24hPT1zLmljb24ucGxhY2VkKToodGhpcy5vcGFjaXRpZXNbYV09bmV3IENlKG51bGwsbixvLnRleHQsby5pY29uLG8uc2tpcEZhZGUpLHI9cnx8by50ZXh0fHxvLmljb24pfWZvcih2YXIgbCBpbiBpKXt2YXIgYz1pW2xdO2lmKCF0aGlzLm9wYWNpdGllc1tsXSl7dmFyIHU9bmV3IENlKGMsbiwhMSwhMSk7dS5pc0hpZGRlbigpfHwodGhpcy5vcGFjaXRpZXNbbF09dSxyPXJ8fGMudGV4dC5wbGFjZWR8fGMuaWNvbi5wbGFjZWQpfX1yP3RoaXMubGFzdFBsYWNlbWVudENoYW5nZVRpbWU9ZTpcIm51bWJlclwiIT10eXBlb2YgdGhpcy5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZSYmKHRoaXMubGFzdFBsYWNlbWVudENoYW5nZVRpbWU9dD90Lmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lOmUpfSx6ZS5wcm90b3R5cGUudXBkYXRlTGF5ZXJPcGFjaXRpZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9e30sbj0wLGk9ZTtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl0sbz1hLmdldEJ1Y2tldCh0KTtvJiZhLmxhdGVzdEZlYXR1cmVJbmRleCYmdC5pZD09PW8ubGF5ZXJJZHNbMF0mJnRoaXMudXBkYXRlQnVja2V0T3BhY2l0aWVzKG8scixhLmNvbGxpc2lvbkJveEFycmF5KX19LHplLnByb3RvdHlwZS51cGRhdGVCdWNrZXRPcGFjaXRpZXM9ZnVuY3Rpb24odCxlLHIpe3QuaGFzVGV4dERhdGEoKSYmdC50ZXh0Lm9wYWNpdHlWZXJ0ZXhBcnJheS5jbGVhcigpLHQuaGFzSWNvbkRhdGEoKSYmdC5pY29uLm9wYWNpdHlWZXJ0ZXhBcnJheS5jbGVhcigpLHQuaGFzQ29sbGlzaW9uQm94RGF0YSgpJiZ0LmNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheS5jbGVhcigpLHQuaGFzQ29sbGlzaW9uQ2lyY2xlRGF0YSgpJiZ0LmNvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhBcnJheS5jbGVhcigpO2Zvcih2YXIgbj10LmxheWVyc1swXS5sYXlvdXQsaT1uZXcgQ2UobnVsbCwwLCExLCExLCEwKSxhPW5ldyBDZShudWxsLDAsbi5nZXQoXCJ0ZXh0LWFsbG93LW92ZXJsYXBcIiksbi5nZXQoXCJpY29uLWFsbG93LW92ZXJsYXBcIiksITApLG89MDtvPHQuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDtvKyspe3ZhciBzPXQuc3ltYm9sSW5zdGFuY2VzW29dLGw9ZVtzLmNyb3NzVGlsZUlEXSxjPXRoaXMub3BhY2l0aWVzW3MuY3Jvc3NUaWxlSURdO2w/Yz1pOmN8fChjPWEsdGhpcy5vcGFjaXRpZXNbcy5jcm9zc1RpbGVJRF09YyksZVtzLmNyb3NzVGlsZUlEXT0hMDt2YXIgdT1zLm51bUdseXBoVmVydGljZXM+MHx8cy5udW1WZXJ0aWNhbEdseXBoVmVydGljZXM+MCxoPXMubnVtSWNvblZlcnRpY2VzPjA7aWYodSl7Zm9yKHZhciBmPWplKGMudGV4dCkscD0ocy5udW1HbHlwaFZlcnRpY2VzK3MubnVtVmVydGljYWxHbHlwaFZlcnRpY2VzKS80LGQ9MDtkPHA7ZCsrKXQudGV4dC5vcGFjaXR5VmVydGV4QXJyYXkuZW1wbGFjZUJhY2soZik7Zm9yKHZhciBnPTAsdj1zLnBsYWNlZFRleHRTeW1ib2xJbmRpY2VzO2c8di5sZW5ndGg7Zys9MSl7dmFyIG09dltnXTt0LnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KG0pLmhpZGRlbj1jLnRleHQuaXNIaWRkZW4oKX19aWYoaCl7Zm9yKHZhciB5PWplKGMuaWNvbikseD0wO3g8cy5udW1JY29uVmVydGljZXMvNDt4KyspdC5pY29uLm9wYWNpdHlWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayh5KTt0Lmljb24ucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KG8pLmhpZGRlbj1jLmljb24uaXNIaWRkZW4oKX1zLmNvbGxpc2lvbkFycmF5c3x8KHMuY29sbGlzaW9uQXJyYXlzPXQuZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlcyhyLHMudGV4dEJveFN0YXJ0SW5kZXgscy50ZXh0Qm94RW5kSW5kZXgscy5pY29uQm94U3RhcnRJbmRleCxzLmljb25Cb3hFbmRJbmRleCkpO3ZhciBiPXMuY29sbGlzaW9uQXJyYXlzO2lmKGIpe2IudGV4dEJveCYmdC5oYXNDb2xsaXNpb25Cb3hEYXRhKCkmJk9lKHQuY29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LGMudGV4dC5wbGFjZWQsITEpLGIuaWNvbkJveCYmdC5oYXNDb2xsaXNpb25Cb3hEYXRhKCkmJk9lKHQuY29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LGMuaWNvbi5wbGFjZWQsITEpO3ZhciBfPWIudGV4dENpcmNsZXM7aWYoXyYmdC5oYXNDb2xsaXNpb25DaXJjbGVEYXRhKCkpZm9yKHZhciB3PTA7dzxfLmxlbmd0aDt3Kz01KXt2YXIgaz1sfHwwPT09X1t3KzRdO09lKHQuY29sbGlzaW9uQ2lyY2xlLmNvbGxpc2lvblZlcnRleEFycmF5LGMudGV4dC5wbGFjZWQsayl9fX10LnNvcnRGZWF0dXJlcyh0aGlzLnRyYW5zZm9ybS5hbmdsZSksdGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YVt0LmJ1Y2tldEluc3RhbmNlSWRdJiYodGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YVt0LmJ1Y2tldEluc3RhbmNlSWRdLmZlYXR1cmVTb3J0T3JkZXI9dC5mZWF0dXJlU29ydE9yZGVyKSx0Lmhhc1RleHREYXRhKCkmJnQudGV4dC5vcGFjaXR5VmVydGV4QnVmZmVyJiZ0LnRleHQub3BhY2l0eVZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKHQudGV4dC5vcGFjaXR5VmVydGV4QXJyYXkpLHQuaGFzSWNvbkRhdGEoKSYmdC5pY29uLm9wYWNpdHlWZXJ0ZXhCdWZmZXImJnQuaWNvbi5vcGFjaXR5VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEodC5pY29uLm9wYWNpdHlWZXJ0ZXhBcnJheSksdC5oYXNDb2xsaXNpb25Cb3hEYXRhKCkmJnQuY29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEJ1ZmZlciYmdC5jb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QnVmZmVyLnVwZGF0ZURhdGEodC5jb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXkpLHQuaGFzQ29sbGlzaW9uQ2lyY2xlRGF0YSgpJiZ0LmNvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhCdWZmZXImJnQuY29sbGlzaW9uQ2lyY2xlLmNvbGxpc2lvblZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKHQuY29sbGlzaW9uQ2lyY2xlLmNvbGxpc2lvblZlcnRleEFycmF5KX0semUucHJvdG90eXBlLnN5bWJvbEZhZGVDaGFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmZhZGVEdXJhdGlvbj8xOih0LXRoaXMuY29tbWl0VGltZSkvdGhpcy5mYWRlRHVyYXRpb259LHplLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdGFsZXx8dC10aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lPHRoaXMuZmFkZUR1cmF0aW9ufSx6ZS5wcm90b3R5cGUuc3RpbGxSZWNlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9PXRoaXMuY29tbWl0VGltZSYmdGhpcy5jb21taXRUaW1lK3RoaXMuZmFkZUR1cmF0aW9uPnR9LHplLnByb3RvdHlwZS5zZXRTdGFsZT1mdW5jdGlvbigpe3RoaXMuc3RhbGU9ITB9O3ZhciBJZT1NYXRoLnBvdygyLDI1KSxEZT1NYXRoLnBvdygyLDI0KSxQZT1NYXRoLnBvdygyLDE3KSxSZT1NYXRoLnBvdygyLDE2KSxGZT1NYXRoLnBvdygyLDkpLEJlPU1hdGgucG93KDIsOCksTmU9TWF0aC5wb3coMiwxKTtmdW5jdGlvbiBqZSh0KXtpZigwPT09dC5vcGFjaXR5JiYhdC5wbGFjZWQpcmV0dXJuIDA7aWYoMT09PXQub3BhY2l0eSYmdC5wbGFjZWQpcmV0dXJuIDQyOTQ5NjcyOTU7dmFyIGU9dC5wbGFjZWQ/MTowLHI9TWF0aC5mbG9vcigxMjcqdC5vcGFjaXR5KTtyZXR1cm4gcipJZStlKkRlK3IqUGUrZSpSZStyKkZlK2UqQmUrcipOZStlfXZhciBWZT1mdW5jdGlvbigpe3RoaXMuX2N1cnJlbnRUaWxlSW5kZXg9MCx0aGlzLl9zZWVuQ3Jvc3NUaWxlSURzPXt9fTtWZS5wcm90b3R5cGUuY29udGludWVQbGFjZW1lbnQ9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IoO3RoaXMuX2N1cnJlbnRUaWxlSW5kZXg8dC5sZW5ndGg7KXt2YXIgYT10W3RoaXMuX2N1cnJlbnRUaWxlSW5kZXhdO2lmKGUucGxhY2VMYXllclRpbGUobixhLHIsdGhpcy5fc2VlbkNyb3NzVGlsZUlEcyksdGhpcy5fY3VycmVudFRpbGVJbmRleCsrLGkoKSlyZXR1cm4hMH19O3ZhciBVZT1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMucGxhY2VtZW50PW5ldyB6ZSh0LGkpLHRoaXMuX2N1cnJlbnRQbGFjZW1lbnRJbmRleD1lLmxlbmd0aC0xLHRoaXMuX2ZvcmNlRnVsbFBsYWNlbWVudD1yLHRoaXMuX3Nob3dDb2xsaXNpb25Cb3hlcz1uLHRoaXMuX2RvbmU9ITF9O1VlLnByb3RvdHlwZS5pc0RvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZG9uZX0sVWUucHJvdG90eXBlLmNvbnRpbnVlUGxhY2VtZW50PWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dGhpcyxpPWEubm93KCksbz1mdW5jdGlvbigpe3ZhciB0PWEubm93KCktaTtyZXR1cm4hbi5fZm9yY2VGdWxsUGxhY2VtZW50JiZ0PjJ9O3RoaXMuX2N1cnJlbnRQbGFjZW1lbnRJbmRleD49MDspe3ZhciBzPWVbdFtuLl9jdXJyZW50UGxhY2VtZW50SW5kZXhdXSxsPW4ucGxhY2VtZW50LmNvbGxpc2lvbkluZGV4LnRyYW5zZm9ybS56b29tO2lmKFwic3ltYm9sXCI9PT1zLnR5cGUmJighcy5taW56b29tfHxzLm1pbnpvb208PWwpJiYoIXMubWF4em9vbXx8cy5tYXh6b29tPmwpKXtpZihuLl9pblByb2dyZXNzTGF5ZXJ8fChuLl9pblByb2dyZXNzTGF5ZXI9bmV3IFZlKSxuLl9pblByb2dyZXNzTGF5ZXIuY29udGludWVQbGFjZW1lbnQocltzLnNvdXJjZV0sbi5wbGFjZW1lbnQsbi5fc2hvd0NvbGxpc2lvbkJveGVzLHMsbykpcmV0dXJuO2RlbGV0ZSBuLl9pblByb2dyZXNzTGF5ZXJ9bi5fY3VycmVudFBsYWNlbWVudEluZGV4LS19dGhpcy5fZG9uZT0hMH0sVWUucHJvdG90eXBlLmNvbW1pdD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnBsYWNlbWVudC5jb21taXQodCxlKSx0aGlzLnBsYWNlbWVudH07dmFyIHFlPTUxMi90LmRlZmF1bHQkOC8yLEhlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRpbGVJRD10LHRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlcz17fSx0aGlzLmJ1Y2tldEluc3RhbmNlSWQ9cjtmb3IodmFyIG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dLG89YS5rZXk7dGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW29dfHwodGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW29dPVtdKSx0aGlzLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNbb10ucHVzaCh7Y3Jvc3NUaWxlSUQ6YS5jcm9zc1RpbGVJRCxjb29yZDp0aGlzLmdldFNjYWxlZENvb3JkaW5hdGVzKGEsdCl9KX19O0hlLnByb3RvdHlwZS5nZXRTY2FsZWRDb29yZGluYXRlcz1mdW5jdGlvbihlLHIpe3ZhciBuPXIuY2Fub25pY2FsLnotdGhpcy50aWxlSUQuY2Fub25pY2FsLnosaT1xZS9NYXRoLnBvdygyLG4pLGE9ZS5hbmNob3I7cmV0dXJue3g6TWF0aC5mbG9vcigoci5jYW5vbmljYWwueCp0LmRlZmF1bHQkOCthLngpKmkpLHk6TWF0aC5mbG9vcigoci5jYW5vbmljYWwueSp0LmRlZmF1bHQkOCthLnkpKmkpfX0sSGUucHJvdG90eXBlLmZpbmRNYXRjaGVzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dGhpcy50aWxlSUQuY2Fub25pY2FsLno8ZS5jYW5vbmljYWwuej8xOk1hdGgucG93KDIsdGhpcy50aWxlSUQuY2Fub25pY2FsLnotZS5jYW5vbmljYWwueiksaT0wLGE9dDtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07aWYoIW8uY3Jvc3NUaWxlSUQpe3ZhciBzPXRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1tvLmtleV07aWYocylmb3IodmFyIGw9dGhpcy5nZXRTY2FsZWRDb29yZGluYXRlcyhvLGUpLGM9MCx1PXM7Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgaD11W2NdO2lmKE1hdGguYWJzKGguY29vcmQueC1sLngpPD1uJiZNYXRoLmFicyhoLmNvb3JkLnktbC55KTw9biYmIXJbaC5jcm9zc1RpbGVJRF0pe3JbaC5jcm9zc1RpbGVJRF09ITAsby5jcm9zc1RpbGVJRD1oLmNyb3NzVGlsZUlEO2JyZWFrfX19fX07dmFyIEdlPWZ1bmN0aW9uKCl7dGhpcy5tYXhDcm9zc1RpbGVJRD0wfTtHZS5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24oKXtyZXR1cm4rK3RoaXMubWF4Q3Jvc3NUaWxlSUR9O3ZhciBZZT1mdW5jdGlvbigpe3RoaXMuaW5kZXhlcz17fSx0aGlzLnVzZWRDcm9zc1RpbGVJRHM9e30sdGhpcy5sbmc9MH07WWUucHJvdG90eXBlLmhhbmRsZVdyYXBKdW1wPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgucm91bmQoKHQtdGhpcy5sbmcpLzM2MCk7aWYoMCE9PWUpZm9yKHZhciByIGluIHRoaXMuaW5kZXhlcyl7dmFyIG49dGhpcy5pbmRleGVzW3JdLGk9e307Zm9yKHZhciBhIGluIG4pe3ZhciBvPW5bYV07by50aWxlSUQ9by50aWxlSUQudW53cmFwVG8oby50aWxlSUQud3JhcCtlKSxpW28udGlsZUlELmtleV09b310aGlzLmluZGV4ZXNbcl09aX10aGlzLmxuZz10fSxZZS5wcm90b3R5cGUuYWRkQnVja2V0PWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl0mJnRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV0pe2lmKHRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV0uYnVja2V0SW5zdGFuY2VJZD09PWUuYnVja2V0SW5zdGFuY2VJZClyZXR1cm4hMTt0aGlzLnJlbW92ZUJ1Y2tldENyb3NzVGlsZUlEcyh0Lm92ZXJzY2FsZWRaLHRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV0pfWZvcih2YXIgbj0wLGk9ZS5zeW1ib2xJbnN0YW5jZXM7bjxpLmxlbmd0aDtuKz0xKWlbbl0uY3Jvc3NUaWxlSUQ9MDt0aGlzLnVzZWRDcm9zc1RpbGVJRHNbdC5vdmVyc2NhbGVkWl18fCh0aGlzLnVzZWRDcm9zc1RpbGVJRHNbdC5vdmVyc2NhbGVkWl09e30pO3ZhciBhPXRoaXMudXNlZENyb3NzVGlsZUlEc1t0Lm92ZXJzY2FsZWRaXTtmb3IodmFyIG8gaW4gdGhpcy5pbmRleGVzKXt2YXIgcz10aGlzLmluZGV4ZXNbb107aWYoTnVtYmVyKG8pPnQub3ZlcnNjYWxlZFopZm9yKHZhciBsIGluIHMpe3ZhciBjPXNbbF07Yy50aWxlSUQuaXNDaGlsZE9mKHQpJiZjLmZpbmRNYXRjaGVzKGUuc3ltYm9sSW5zdGFuY2VzLHQsYSl9ZWxzZXt2YXIgdT1zW3Quc2NhbGVkVG8oTnVtYmVyKG8pKS5rZXldO3UmJnUuZmluZE1hdGNoZXMoZS5zeW1ib2xJbnN0YW5jZXMsdCxhKX19Zm9yKHZhciBoPTAsZj1lLnN5bWJvbEluc3RhbmNlcztoPGYubGVuZ3RoO2grPTEpe3ZhciBwPWZbaF07cC5jcm9zc1RpbGVJRHx8KHAuY3Jvc3NUaWxlSUQ9ci5nZW5lcmF0ZSgpLGFbcC5jcm9zc1RpbGVJRF09ITApfXJldHVybiB2b2lkIDA9PT10aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl0mJih0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl09e30pLHRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV09bmV3IEhlKHQsZS5zeW1ib2xJbnN0YW5jZXMsZS5idWNrZXRJbnN0YW5jZUlkKSwhMH0sWWUucHJvdG90eXBlLnJlbW92ZUJ1Y2tldENyb3NzVGlsZUlEcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiBlLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXMpZm9yKHZhciBuPTAsaT1lLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNbcl07bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO2RlbGV0ZSB0aGlzLnVzZWRDcm9zc1RpbGVJRHNbdF1bYS5jcm9zc1RpbGVJRF19fSxZZS5wcm90b3R5cGUucmVtb3ZlU3RhbGVCdWNrZXRzPWZ1bmN0aW9uKHQpe3ZhciBlPSExO2Zvcih2YXIgciBpbiB0aGlzLmluZGV4ZXMpe3ZhciBuPXRoaXMuaW5kZXhlc1tyXTtmb3IodmFyIGkgaW4gbil0W25baV0uYnVja2V0SW5zdGFuY2VJZF18fCh0aGlzLnJlbW92ZUJ1Y2tldENyb3NzVGlsZUlEcyhyLG5baV0pLGRlbGV0ZSBuW2ldLGU9ITApfXJldHVybiBlfTt2YXIgV2U9ZnVuY3Rpb24oKXt0aGlzLmxheWVySW5kZXhlcz17fSx0aGlzLmNyb3NzVGlsZUlEcz1uZXcgR2UsdGhpcy5tYXhCdWNrZXRJbnN0YW5jZUlkPTAsdGhpcy5idWNrZXRzSW5DdXJyZW50UGxhY2VtZW50PXt9fTtXZS5wcm90b3R5cGUuYWRkTGF5ZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGF5ZXJJbmRleGVzW3QuaWRdO3ZvaWQgMD09PW4mJihuPXRoaXMubGF5ZXJJbmRleGVzW3QuaWRdPW5ldyBZZSk7dmFyIGk9ITEsYT17fTtuLmhhbmRsZVdyYXBKdW1wKHIpO2Zvcih2YXIgbz0wLHM9ZTtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb10sYz1sLmdldEJ1Y2tldCh0KTtjJiZ0LmlkPT09Yy5sYXllcklkc1swXSYmKGMuYnVja2V0SW5zdGFuY2VJZHx8KGMuYnVja2V0SW5zdGFuY2VJZD0rK3RoaXMubWF4QnVja2V0SW5zdGFuY2VJZCksbi5hZGRCdWNrZXQobC50aWxlSUQsYyx0aGlzLmNyb3NzVGlsZUlEcykmJihpPSEwKSxhW2MuYnVja2V0SW5zdGFuY2VJZF09ITApfXJldHVybiBuLnJlbW92ZVN0YWxlQnVja2V0cyhhKSYmKGk9ITApLGl9LFdlLnByb3RvdHlwZS5wcnVuZVVudXNlZExheWVycz1mdW5jdGlvbih0KXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF09ITB9KSx0aGlzLmxheWVySW5kZXhlcyllW3JdfHxkZWxldGUgdGhpcy5sYXllckluZGV4ZXNbcl19O3ZhciBYZT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmVtaXRWYWxpZGF0aW9uRXJyb3JzKGUsciYmci5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuXCJzb3VyY2UuY2FudmFzXCIhPT10LmlkZW50aWZpZXJ9KSl9LFplPXQucGljayhlZSxbXCJhZGRMYXllclwiLFwicmVtb3ZlTGF5ZXJcIixcInNldFBhaW50UHJvcGVydHlcIixcInNldExheW91dFByb3BlcnR5XCIsXCJzZXRGaWx0ZXJcIixcImFkZFNvdXJjZVwiLFwicmVtb3ZlU291cmNlXCIsXCJzZXRMYXllclpvb21SYW5nZVwiLFwic2V0TGlnaHRcIixcInNldFRyYW5zaXRpb25cIixcInNldEdlb0pTT05Tb3VyY2VEYXRhXCJdKSwkZT10LnBpY2soZWUsW1wic2V0Q2VudGVyXCIsXCJzZXRab29tXCIsXCJzZXRCZWFyaW5nXCIsXCJzZXRQaXRjaFwiXSksSmU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihuLGkpe3ZhciBhPXRoaXM7dm9pZCAwPT09aSYmKGk9e30pLGUuY2FsbCh0aGlzKSx0aGlzLm1hcD1uLHRoaXMuZGlzcGF0Y2hlcj1uZXcgcSgoSnR8fChKdD1uZXcgS3QpLEp0KSx0aGlzKSx0aGlzLmltYWdlTWFuYWdlcj1uZXcgTyx0aGlzLmdseXBoTWFuYWdlcj1uZXcgQihuLl90cmFuc2Zvcm1SZXF1ZXN0LGkubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5KSx0aGlzLmxpbmVBdGxhcz1uZXcgVSgyNTYsNTEyKSx0aGlzLmNyb3NzVGlsZVN5bWJvbEluZGV4PW5ldyBXZSx0aGlzLl9sYXllcnM9e30sdGhpcy5fb3JkZXI9W10sdGhpcy5zb3VyY2VDYWNoZXM9e30sdGhpcy56b29tSGlzdG9yeT1uZXcgdC5kZWZhdWx0JDIzLHRoaXMuX2xvYWRlZD0hMSx0aGlzLl9yZXNldFVwZGF0ZXMoKTt2YXIgbz10aGlzO3RoaXMuX3J0bFRleHRQbHVnaW5DYWxsYmFjaz1yLnJlZ2lzdGVyRm9yUGx1Z2luQXZhaWxhYmlsaXR5KGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiBvLmRpc3BhdGNoZXIuYnJvYWRjYXN0KFwibG9hZFJUTFRleHRQbHVnaW5cIix0LnBsdWdpblVSTCx0LmNvbXBsZXRpb25DYWxsYmFjayksby5zb3VyY2VDYWNoZXMpby5zb3VyY2VDYWNoZXNbZV0ucmVsb2FkKCl9KSx0aGlzLm9uKFwiZGF0YVwiLGZ1bmN0aW9uKHQpe2lmKFwic291cmNlXCI9PT10LmRhdGFUeXBlJiZcIm1ldGFkYXRhXCI9PT10LnNvdXJjZURhdGFUeXBlKXt2YXIgZT1hLnNvdXJjZUNhY2hlc1t0LnNvdXJjZUlkXTtpZihlKXt2YXIgcj1lLmdldFNvdXJjZSgpO2lmKHImJnIudmVjdG9yTGF5ZXJJZHMpZm9yKHZhciBuIGluIGEuX2xheWVycyl7dmFyIGk9YS5fbGF5ZXJzW25dO2kuc291cmNlPT09ci5pZCYmYS5fdmFsaWRhdGVMYXllcihpKX19fX0pfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkVVJMPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpczt2b2lkIDA9PT1yJiYocj17fSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YWxvYWRpbmdcIix7ZGF0YVR5cGU6XCJzdHlsZVwifSkpO3ZhciBpPVwiYm9vbGVhblwiPT10eXBlb2Ygci52YWxpZGF0ZT9yLnZhbGlkYXRlOiF4KGUpO2U9ZnVuY3Rpb24odCxlKXtpZigheCh0KSlyZXR1cm4gdDt2YXIgcj1UKHQpO3JldHVybiByLnBhdGg9XCIvc3R5bGVzL3YxXCIrci5wYXRoLHkocixlKX0oZSxyLmFjY2Vzc1Rva2VuKTt2YXIgYT10aGlzLm1hcC5fdHJhbnNmb3JtUmVxdWVzdChlLHQuUmVzb3VyY2VUeXBlLlN0eWxlKTt0LmdldEpTT04oYSxmdW5jdGlvbihlLHIpe2U/bi5maXJlKG5ldyB0LkVycm9yRXZlbnQoZSkpOnImJm4uX2xvYWQocixpKX0pfSxyLnByb3RvdHlwZS5sb2FkSlNPTj1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7dm9pZCAwPT09ciYmKHI9e30pLHRoaXMuZmlyZShuZXcgdC5FdmVudChcImRhdGFsb2FkaW5nXCIse2RhdGFUeXBlOlwic3R5bGVcIn0pKSxhLmZyYW1lKGZ1bmN0aW9uKCl7bi5fbG9hZChlLCExIT09ci52YWxpZGF0ZSl9KX0sci5wcm90b3R5cGUuX2xvYWQ9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO2lmKCFyfHwhWGUodGhpcyx0LnZhbGlkYXRlU3R5bGUoZSkpKXtmb3IodmFyIGkgaW4gdGhpcy5fbG9hZGVkPSEwLHRoaXMuc3R5bGVzaGVldD1lLGUuc291cmNlcyluLmFkZFNvdXJjZShpLGUuc291cmNlc1tpXSx7dmFsaWRhdGU6ITF9KTtlLnNwcml0ZT9mdW5jdGlvbihlLHIsbil7dmFyIGksbyxzLGw9YS5kZXZpY2VQaXhlbFJhdGlvPjE/XCJAMnhcIjpcIlwiO2Z1bmN0aW9uIGMoKXtpZihzKW4ocyk7ZWxzZSBpZihpJiZvKXt2YXIgZT1hLmdldEltYWdlRGF0YShvKSxyPXt9O2Zvcih2YXIgbCBpbiBpKXt2YXIgYz1pW2xdLHU9Yy53aWR0aCxoPWMuaGVpZ2h0LGY9Yy54LHA9Yy55LGQ9Yy5zZGYsZz1jLnBpeGVsUmF0aW8sdj1uZXcgdC5SR0JBSW1hZ2Uoe3dpZHRoOnUsaGVpZ2h0Omh9KTt0LlJHQkFJbWFnZS5jb3B5KGUsdix7eDpmLHk6cH0se3g6MCx5OjB9LHt3aWR0aDp1LGhlaWdodDpofSkscltsXT17ZGF0YTp2LHBpeGVsUmF0aW86ZyxzZGY6ZH19bihudWxsLHIpfX10LmdldEpTT04ocihfKGUsbCxcIi5qc29uXCIpLHQuUmVzb3VyY2VUeXBlLlNwcml0ZUpTT04pLGZ1bmN0aW9uKHQsZSl7c3x8KHM9dCxpPWUsYygpKX0pLHQuZ2V0SW1hZ2UocihfKGUsbCxcIi5wbmdcIiksdC5SZXNvdXJjZVR5cGUuU3ByaXRlSW1hZ2UpLGZ1bmN0aW9uKHQsZSl7c3x8KHM9dCxvPWUsYygpKX0pfShlLnNwcml0ZSx0aGlzLm1hcC5fdHJhbnNmb3JtUmVxdWVzdCxmdW5jdGlvbihlLHIpe2lmKGUpbi5maXJlKG5ldyB0LkVycm9yRXZlbnQoZSkpO2Vsc2UgaWYocilmb3IodmFyIGkgaW4gciluLmltYWdlTWFuYWdlci5hZGRJbWFnZShpLHJbaV0pO24uaW1hZ2VNYW5hZ2VyLnNldExvYWRlZCghMCksbi5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YVwiLHtkYXRhVHlwZTpcInN0eWxlXCJ9KSl9KTp0aGlzLmltYWdlTWFuYWdlci5zZXRMb2FkZWQoITApLHRoaXMuZ2x5cGhNYW5hZ2VyLnNldFVSTChlLmdseXBocyk7dmFyIG89dGUodGhpcy5zdHlsZXNoZWV0LmxheWVycyk7dGhpcy5fb3JkZXI9by5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSx0aGlzLl9sYXllcnM9e307Zm9yKHZhciBzPTAsbD1vO3M8bC5sZW5ndGg7cys9MSl7dmFyIGM9bFtzXTsoYz10LmRlZmF1bHQkMjIoYykpLnNldEV2ZW50ZWRQYXJlbnQobix7bGF5ZXI6e2lkOmMuaWR9fSksbi5fbGF5ZXJzW2MuaWRdPWN9dGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdChcInNldExheWVyc1wiLHRoaXMuX3NlcmlhbGl6ZUxheWVycyh0aGlzLl9vcmRlcikpLHRoaXMubGlnaHQ9bmV3IFYodGhpcy5zdHlsZXNoZWV0LmxpZ2h0KSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhXCIse2RhdGFUeXBlOlwic3R5bGVcIn0pKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJzdHlsZS5sb2FkXCIpKX19LHIucHJvdG90eXBlLl92YWxpZGF0ZUxheWVyPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuc291cmNlQ2FjaGVzW2Uuc291cmNlXTtpZihyKXt2YXIgbj1lLnNvdXJjZUxheWVyO2lmKG4pe3ZhciBpPXIuZ2V0U291cmNlKCk7KFwiZ2VvanNvblwiPT09aS50eXBlfHxpLnZlY3RvckxheWVySWRzJiYtMT09PWkudmVjdG9yTGF5ZXJJZHMuaW5kZXhPZihuKSkmJnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignU291cmNlIGxheWVyIFwiJytuKydcIiBkb2VzIG5vdCBleGlzdCBvbiBzb3VyY2UgXCInK2kuaWQrJ1wiIGFzIHNwZWNpZmllZCBieSBzdHlsZSBsYXllciBcIicrZS5pZCsnXCInKSkpfX19LHIucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe2lmKCF0aGlzLl9sb2FkZWQpcmV0dXJuITE7aWYoT2JqZWN0LmtleXModGhpcy5fdXBkYXRlZFNvdXJjZXMpLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpaWYoIXRoaXMuc291cmNlQ2FjaGVzW3RdLmxvYWRlZCgpKXJldHVybiExO3JldHVybiEhdGhpcy5pbWFnZU1hbmFnZXIuaXNMb2FkZWQoKX0sci5wcm90b3R5cGUuX3NlcmlhbGl6ZUxheWVycz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5fbGF5ZXJzW3RdLnNlcmlhbGl6ZSgpfSl9LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb25zPWZ1bmN0aW9uKCl7aWYodGhpcy5saWdodCYmdGhpcy5saWdodC5oYXNUcmFuc2l0aW9uKCkpcmV0dXJuITA7Zm9yKHZhciB0IGluIHRoaXMuc291cmNlQ2FjaGVzKWlmKHRoaXMuc291cmNlQ2FjaGVzW3RdLmhhc1RyYW5zaXRpb24oKSlyZXR1cm4hMDtmb3IodmFyIGUgaW4gdGhpcy5fbGF5ZXJzKWlmKHRoaXMuX2xheWVyc1tlXS5oYXNUcmFuc2l0aW9uKCkpcmV0dXJuITA7cmV0dXJuITF9LHIucHJvdG90eXBlLl9jaGVja0xvYWRlZD1mdW5jdGlvbigpe2lmKCF0aGlzLl9sb2FkZWQpdGhyb3cgbmV3IEVycm9yKFwiU3R5bGUgaXMgbm90IGRvbmUgbG9hZGluZ1wiKX0sci5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2xvYWRlZCl7aWYodGhpcy5fY2hhbmdlZCl7dmFyIHI9T2JqZWN0LmtleXModGhpcy5fdXBkYXRlZExheWVycyksbj1PYmplY3Qua2V5cyh0aGlzLl9yZW1vdmVkTGF5ZXJzKTtmb3IodmFyIGkgaW4oci5sZW5ndGh8fG4ubGVuZ3RoKSYmdGhpcy5fdXBkYXRlV29ya2VyTGF5ZXJzKHIsbiksdGhpcy5fdXBkYXRlZFNvdXJjZXMpe3ZhciBhPXRoaXMuX3VwZGF0ZWRTb3VyY2VzW2ldO1wicmVsb2FkXCI9PT1hP3RoaXMuX3JlbG9hZFNvdXJjZShpKTpcImNsZWFyXCI9PT1hJiZ0aGlzLl9jbGVhclNvdXJjZShpKX1mb3IodmFyIG8gaW4gdGhpcy5fdXBkYXRlZFBhaW50UHJvcHMpdGhpcy5fbGF5ZXJzW29dLnVwZGF0ZVRyYW5zaXRpb25zKGUpO3RoaXMubGlnaHQudXBkYXRlVHJhbnNpdGlvbnMoZSksdGhpcy5fcmVzZXRVcGRhdGVzKCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YVwiLHtkYXRhVHlwZTpcInN0eWxlXCJ9KSl9Zm9yKHZhciBzIGluIHRoaXMuc291cmNlQ2FjaGVzKXRoaXMuc291cmNlQ2FjaGVzW3NdLnVzZWQ9ITE7Zm9yKHZhciBsPTAsYz10aGlzLl9vcmRlcjtsPGMubGVuZ3RoO2wrPTEpe3ZhciB1PWNbbF0saD10aGlzLl9sYXllcnNbdV07aC5yZWNhbGN1bGF0ZShlKSwhaC5pc0hpZGRlbihlLnpvb20pJiZoLnNvdXJjZSYmKHRoaXMuc291cmNlQ2FjaGVzW2guc291cmNlXS51c2VkPSEwKX10aGlzLmxpZ2h0LnJlY2FsY3VsYXRlKGUpLHRoaXMuej1lLnpvb219fSxyLnByb3RvdHlwZS5fdXBkYXRlV29ya2VyTGF5ZXJzPWZ1bmN0aW9uKHQsZSl7dGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdChcInVwZGF0ZUxheWVyc1wiLHtsYXllcnM6dGhpcy5fc2VyaWFsaXplTGF5ZXJzKHQpLHJlbW92ZWRJZHM6ZX0pfSxyLnByb3RvdHlwZS5fcmVzZXRVcGRhdGVzPWZ1bmN0aW9uKCl7dGhpcy5fY2hhbmdlZD0hMSx0aGlzLl91cGRhdGVkTGF5ZXJzPXt9LHRoaXMuX3JlbW92ZWRMYXllcnM9e30sdGhpcy5fdXBkYXRlZFNvdXJjZXM9e30sdGhpcy5fdXBkYXRlZFBhaW50UHJvcHM9e319LHIucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7aWYodGhpcy5fY2hlY2tMb2FkZWQoKSxYZSh0aGlzLHQudmFsaWRhdGVTdHlsZShlKSkpcmV0dXJuITE7KGU9dC5jbG9uZShlKSkubGF5ZXJzPXRlKGUubGF5ZXJzKTt2YXIgbj1mdW5jdGlvbihlLHIpe2lmKCFlKXJldHVyblt7Y29tbWFuZDplZS5zZXRTdHlsZSxhcmdzOltyXX1dO3ZhciBuPVtdO3RyeXtpZighdC5kZWZhdWx0JDEwKGUudmVyc2lvbixyLnZlcnNpb24pKXJldHVyblt7Y29tbWFuZDplZS5zZXRTdHlsZSxhcmdzOltyXX1dO3QuZGVmYXVsdCQxMChlLmNlbnRlcixyLmNlbnRlcil8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRDZW50ZXIsYXJnczpbci5jZW50ZXJdfSksdC5kZWZhdWx0JDEwKGUuem9vbSxyLnpvb20pfHxuLnB1c2goe2NvbW1hbmQ6ZWUuc2V0Wm9vbSxhcmdzOltyLnpvb21dfSksdC5kZWZhdWx0JDEwKGUuYmVhcmluZyxyLmJlYXJpbmcpfHxuLnB1c2goe2NvbW1hbmQ6ZWUuc2V0QmVhcmluZyxhcmdzOltyLmJlYXJpbmddfSksdC5kZWZhdWx0JDEwKGUucGl0Y2gsci5waXRjaCl8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRQaXRjaCxhcmdzOltyLnBpdGNoXX0pLHQuZGVmYXVsdCQxMChlLnNwcml0ZSxyLnNwcml0ZSl8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRTcHJpdGUsYXJnczpbci5zcHJpdGVdfSksdC5kZWZhdWx0JDEwKGUuZ2x5cGhzLHIuZ2x5cGhzKXx8bi5wdXNoKHtjb21tYW5kOmVlLnNldEdseXBocyxhcmdzOltyLmdseXBoc119KSx0LmRlZmF1bHQkMTAoZS50cmFuc2l0aW9uLHIudHJhbnNpdGlvbil8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRUcmFuc2l0aW9uLGFyZ3M6W3IudHJhbnNpdGlvbl19KSx0LmRlZmF1bHQkMTAoZS5saWdodCxyLmxpZ2h0KXx8bi5wdXNoKHtjb21tYW5kOmVlLnNldExpZ2h0LGFyZ3M6W3IubGlnaHRdfSk7dmFyIGk9e30sYT1bXTshZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE7Zm9yKGEgaW4gcj1yfHx7fSxlPWV8fHt9KWUuaGFzT3duUHJvcGVydHkoYSkmJihyLmhhc093blByb3BlcnR5KGEpfHxuZShhLG4saSkpO2ZvcihhIGluIHIpci5oYXNPd25Qcm9wZXJ0eShhKSYmKGUuaGFzT3duUHJvcGVydHkoYSk/dC5kZWZhdWx0JDEwKGVbYV0sclthXSl8fChcImdlb2pzb25cIj09PWVbYV0udHlwZSYmXCJnZW9qc29uXCI9PT1yW2FdLnR5cGUmJmFlKGUscixhKT9uLnB1c2goe2NvbW1hbmQ6ZWUuc2V0R2VvSlNPTlNvdXJjZURhdGEsYXJnczpbYSxyW2FdLmRhdGFdfSk6aWUoYSxyLG4saSkpOnJlKGEscixuKSl9KGUuc291cmNlcyxyLnNvdXJjZXMsYSxpKTt2YXIgbz1bXTtlLmxheWVycyYmZS5sYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXtpW3Quc291cmNlXT9uLnB1c2goe2NvbW1hbmQ6ZWUucmVtb3ZlTGF5ZXIsYXJnczpbdC5pZF19KTpvLnB1c2godCl9KSxuPW4uY29uY2F0KGEpLGZ1bmN0aW9uKGUscixuKXtyPXJ8fFtdO3ZhciBpLGEsbyxzLGwsYyx1LGg9KGU9ZXx8W10pLm1hcChzZSksZj1yLm1hcChzZSkscD1lLnJlZHVjZShsZSx7fSksZD1yLnJlZHVjZShsZSx7fSksZz1oLnNsaWNlKCksdj1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihpPTAsYT0wO2k8aC5sZW5ndGg7aSsrKW89aFtpXSxkLmhhc093blByb3BlcnR5KG8pP2ErKzoobi5wdXNoKHtjb21tYW5kOmVlLnJlbW92ZUxheWVyLGFyZ3M6W29dfSksZy5zcGxpY2UoZy5pbmRleE9mKG8sYSksMSkpO2ZvcihpPTAsYT0wO2k8Zi5sZW5ndGg7aSsrKW89ZltmLmxlbmd0aC0xLWldLGdbZy5sZW5ndGgtMS1pXSE9PW8mJihwLmhhc093blByb3BlcnR5KG8pPyhuLnB1c2goe2NvbW1hbmQ6ZWUucmVtb3ZlTGF5ZXIsYXJnczpbb119KSxnLnNwbGljZShnLmxhc3RJbmRleE9mKG8sZy5sZW5ndGgtYSksMSkpOmErKyxjPWdbZy5sZW5ndGgtaV0sbi5wdXNoKHtjb21tYW5kOmVlLmFkZExheWVyLGFyZ3M6W2Rbb10sY119KSxnLnNwbGljZShnLmxlbmd0aC1pLDAsbyksdltvXT0hMCk7Zm9yKGk9MDtpPGYubGVuZ3RoO2krKylpZihzPXBbbz1mW2ldXSxsPWRbb10sIXZbb10mJiF0LmRlZmF1bHQkMTAocyxsKSlpZih0LmRlZmF1bHQkMTAocy5zb3VyY2UsbC5zb3VyY2UpJiZ0LmRlZmF1bHQkMTAoc1tcInNvdXJjZS1sYXllclwiXSxsW1wic291cmNlLWxheWVyXCJdKSYmdC5kZWZhdWx0JDEwKHMudHlwZSxsLnR5cGUpKXtmb3IodSBpbiBvZShzLmxheW91dCxsLmxheW91dCxuLG8sbnVsbCxlZS5zZXRMYXlvdXRQcm9wZXJ0eSksb2Uocy5wYWludCxsLnBhaW50LG4sbyxudWxsLGVlLnNldFBhaW50UHJvcGVydHkpLHQuZGVmYXVsdCQxMChzLmZpbHRlcixsLmZpbHRlcil8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRGaWx0ZXIsYXJnczpbbyxsLmZpbHRlcl19KSx0LmRlZmF1bHQkMTAocy5taW56b29tLGwubWluem9vbSkmJnQuZGVmYXVsdCQxMChzLm1heHpvb20sbC5tYXh6b29tKXx8bi5wdXNoKHtjb21tYW5kOmVlLnNldExheWVyWm9vbVJhbmdlLGFyZ3M6W28sbC5taW56b29tLGwubWF4em9vbV19KSxzKXMuaGFzT3duUHJvcGVydHkodSkmJlwibGF5b3V0XCIhPT11JiZcInBhaW50XCIhPT11JiZcImZpbHRlclwiIT09dSYmXCJtZXRhZGF0YVwiIT09dSYmXCJtaW56b29tXCIhPT11JiZcIm1heHpvb21cIiE9PXUmJigwPT09dS5pbmRleE9mKFwicGFpbnQuXCIpP29lKHNbdV0sbFt1XSxuLG8sdS5zbGljZSg2KSxlZS5zZXRQYWludFByb3BlcnR5KTp0LmRlZmF1bHQkMTAoc1t1XSxsW3VdKXx8bi5wdXNoKHtjb21tYW5kOmVlLnNldExheWVyUHJvcGVydHksYXJnczpbbyx1LGxbdV1dfSkpO2Zvcih1IGluIGwpbC5oYXNPd25Qcm9wZXJ0eSh1KSYmIXMuaGFzT3duUHJvcGVydHkodSkmJlwibGF5b3V0XCIhPT11JiZcInBhaW50XCIhPT11JiZcImZpbHRlclwiIT09dSYmXCJtZXRhZGF0YVwiIT09dSYmXCJtaW56b29tXCIhPT11JiZcIm1heHpvb21cIiE9PXUmJigwPT09dS5pbmRleE9mKFwicGFpbnQuXCIpP29lKHNbdV0sbFt1XSxuLG8sdS5zbGljZSg2KSxlZS5zZXRQYWludFByb3BlcnR5KTp0LmRlZmF1bHQkMTAoc1t1XSxsW3VdKXx8bi5wdXNoKHtjb21tYW5kOmVlLnNldExheWVyUHJvcGVydHksYXJnczpbbyx1LGxbdV1dfSkpfWVsc2Ugbi5wdXNoKHtjb21tYW5kOmVlLnJlbW92ZUxheWVyLGFyZ3M6W29dfSksYz1nW2cubGFzdEluZGV4T2YobykrMV0sbi5wdXNoKHtjb21tYW5kOmVlLmFkZExheWVyLGFyZ3M6W2wsY119KX0obyxyLmxheWVycyxuKX1jYXRjaCh0KXtjb25zb2xlLndhcm4oXCJVbmFibGUgdG8gY29tcHV0ZSBzdHlsZSBkaWZmOlwiLHQpLG49W3tjb21tYW5kOmVlLnNldFN0eWxlLGFyZ3M6W3JdfV19cmV0dXJuIG59KHRoaXMuc2VyaWFsaXplKCksZSkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEodC5jb21tYW5kIGluICRlKX0pO2lmKDA9PT1uLmxlbmd0aClyZXR1cm4hMTt2YXIgaT1uLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hKHQuY29tbWFuZCBpbiBaZSl9KTtpZihpLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcihcIlVuaW1wbGVtZW50ZWQ6IFwiK2kubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbW1hbmR9KS5qb2luKFwiLCBcIikrXCIuXCIpO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24odCl7XCJzZXRUcmFuc2l0aW9uXCIhPT10LmNvbW1hbmQmJnJbdC5jb21tYW5kXS5hcHBseShyLHQuYXJncyl9KSx0aGlzLnN0eWxlc2hlZXQ9ZSwhMH0sci5wcm90b3R5cGUuYWRkSW1hZ2U9ZnVuY3Rpb24oZSxyKXtpZih0aGlzLmdldEltYWdlKGUpKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoXCJBbiBpbWFnZSB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cy5cIikpKTt0aGlzLmltYWdlTWFuYWdlci5hZGRJbWFnZShlLHIpLHRoaXMuZmlyZShuZXcgdC5FdmVudChcImRhdGFcIix7ZGF0YVR5cGU6XCJzdHlsZVwifSkpfSxyLnByb3RvdHlwZS5nZXRJbWFnZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbWFnZU1hbmFnZXIuZ2V0SW1hZ2UodCl9LHIucHJvdG90eXBlLnJlbW92ZUltYWdlPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmdldEltYWdlKGUpKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoXCJObyBpbWFnZSB3aXRoIHRoaXMgbmFtZSBleGlzdHMuXCIpKSk7dGhpcy5pbWFnZU1hbmFnZXIucmVtb3ZlSW1hZ2UoZSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YVwiLHtkYXRhVHlwZTpcInN0eWxlXCJ9KSl9LHIucHJvdG90eXBlLmFkZFNvdXJjZT1mdW5jdGlvbihlLHIsbil7dmFyIGk9dGhpcztpZih0aGlzLl9jaGVja0xvYWRlZCgpLHZvaWQgMCE9PXRoaXMuc291cmNlQ2FjaGVzW2VdKXRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIGFscmVhZHkgYSBzb3VyY2Ugd2l0aCB0aGlzIElEXCIpO2lmKCFyLnR5cGUpdGhyb3cgbmV3IEVycm9yKFwiVGhlIHR5cGUgcHJvcGVydHkgbXVzdCBiZSBkZWZpbmVkLCBidXQgdGhlIG9ubHkgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHdlcmUgZ2l2ZW46IFwiK09iamVjdC5rZXlzKHIpLmpvaW4oXCIsIFwiKStcIi5cIik7aWYoIShbXCJ2ZWN0b3JcIixcInJhc3RlclwiLFwiZ2VvanNvblwiLFwidmlkZW9cIixcImltYWdlXCJdLmluZGV4T2Yoci50eXBlKT49MCYmdGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZVN0eWxlLnNvdXJjZSxcInNvdXJjZXMuXCIrZSxyLG51bGwsbikpKXt0aGlzLm1hcCYmdGhpcy5tYXAuX2NvbGxlY3RSZXNvdXJjZVRpbWluZyYmKHIuY29sbGVjdFJlc291cmNlVGltaW5nPSEwKTt2YXIgYT10aGlzLnNvdXJjZUNhY2hlc1tlXT1uZXcgV3QoZSxyLHRoaXMuZGlzcGF0Y2hlcik7YS5zdHlsZT10aGlzLGEuc2V0RXZlbnRlZFBhcmVudCh0aGlzLGZ1bmN0aW9uKCl7cmV0dXJue2lzU291cmNlTG9hZGVkOmkubG9hZGVkKCksc291cmNlOmEuc2VyaWFsaXplKCksc291cmNlSWQ6ZX19KSxhLm9uQWRkKHRoaXMubWFwKSx0aGlzLl9jaGFuZ2VkPSEwfX0sci5wcm90b3R5cGUucmVtb3ZlU291cmNlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2NoZWNrTG9hZGVkKCksdm9pZCAwPT09dGhpcy5zb3VyY2VDYWNoZXNbZV0pdGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gc291cmNlIHdpdGggdGhpcyBJRFwiKTtmb3IodmFyIHIgaW4gdGhpcy5fbGF5ZXJzKWlmKHRoaXMuX2xheWVyc1tyXS5zb3VyY2U9PT1lKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ1NvdXJjZSBcIicrZSsnXCIgY2Fubm90IGJlIHJlbW92ZWQgd2hpbGUgbGF5ZXIgXCInK3IrJ1wiIGlzIHVzaW5nIGl0LicpKSk7dmFyIG49dGhpcy5zb3VyY2VDYWNoZXNbZV07ZGVsZXRlIHRoaXMuc291cmNlQ2FjaGVzW2VdLGRlbGV0ZSB0aGlzLl91cGRhdGVkU291cmNlc1tlXSxuLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhXCIse3NvdXJjZURhdGFUeXBlOlwibWV0YWRhdGFcIixkYXRhVHlwZTpcInNvdXJjZVwiLHNvdXJjZUlkOmV9KSksbi5zZXRFdmVudGVkUGFyZW50KG51bGwpLG4uY2xlYXJUaWxlcygpLG4ub25SZW1vdmUmJm4ub25SZW1vdmUodGhpcy5tYXApLHRoaXMuX2NoYW5nZWQ9ITB9LHIucHJvdG90eXBlLnNldEdlb0pTT05Tb3VyY2VEYXRhPWZ1bmN0aW9uKHQsZSl7dGhpcy5fY2hlY2tMb2FkZWQoKSx0aGlzLnNvdXJjZUNhY2hlc1t0XS5nZXRTb3VyY2UoKS5zZXREYXRhKGUpLHRoaXMuX2NoYW5nZWQ9ITB9LHIucHJvdG90eXBlLmdldFNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zb3VyY2VDYWNoZXNbdF0mJnRoaXMuc291cmNlQ2FjaGVzW3RdLmdldFNvdXJjZSgpfSxyLnByb3RvdHlwZS5hZGRMYXllcj1mdW5jdGlvbihlLHIsbil7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgaT1lLmlkO2lmKHRoaXMuZ2V0TGF5ZXIoaSkpdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCdMYXllciB3aXRoIGlkIFwiJytpKydcIiBhbHJlYWR5IGV4aXN0cyBvbiB0aGlzIG1hcCcpKSk7ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgZS5zb3VyY2UmJih0aGlzLmFkZFNvdXJjZShpLGUuc291cmNlKSxlPXQuY2xvbmUoZSksZT10LmV4dGVuZChlLHtzb3VyY2U6aX0pKSwhdGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZVN0eWxlLmxheWVyLFwibGF5ZXJzLlwiK2ksZSx7YXJyYXlJbmRleDotMX0sbikpe3ZhciBhPXQuZGVmYXVsdCQyMihlKTt0aGlzLl92YWxpZGF0ZUxheWVyKGEpLGEuc2V0RXZlbnRlZFBhcmVudCh0aGlzLHtsYXllcjp7aWQ6aX19KTt2YXIgbz1yP3RoaXMuX29yZGVyLmluZGV4T2Yocik6dGhpcy5fb3JkZXIubGVuZ3RoO2lmKHImJi0xPT09byl0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ0xheWVyIHdpdGggaWQgXCInK3IrJ1wiIGRvZXMgbm90IGV4aXN0IG9uIHRoaXMgbWFwLicpKSk7ZWxzZXtpZih0aGlzLl9vcmRlci5zcGxpY2UobywwLGkpLHRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkPSEwLHRoaXMuX2xheWVyc1tpXT1hLHRoaXMuX3JlbW92ZWRMYXllcnNbaV0mJmEuc291cmNlKXt2YXIgcz10aGlzLl9yZW1vdmVkTGF5ZXJzW2ldO2RlbGV0ZSB0aGlzLl9yZW1vdmVkTGF5ZXJzW2ldLHMudHlwZSE9PWEudHlwZT90aGlzLl91cGRhdGVkU291cmNlc1thLnNvdXJjZV09XCJjbGVhclwiOih0aGlzLl91cGRhdGVkU291cmNlc1thLnNvdXJjZV09XCJyZWxvYWRcIix0aGlzLnNvdXJjZUNhY2hlc1thLnNvdXJjZV0ucGF1c2UoKSl9dGhpcy5fdXBkYXRlTGF5ZXIoYSl9fX0sci5wcm90b3R5cGUubW92ZUxheWVyPWZ1bmN0aW9uKGUscil7aWYodGhpcy5fY2hlY2tMb2FkZWQoKSx0aGlzLl9jaGFuZ2VkPSEwLHRoaXMuX2xheWVyc1tlXSl7aWYoZSE9PXIpe3ZhciBuPXRoaXMuX29yZGVyLmluZGV4T2YoZSk7dGhpcy5fb3JkZXIuc3BsaWNlKG4sMSk7dmFyIGk9cj90aGlzLl9vcmRlci5pbmRleE9mKHIpOnRoaXMuX29yZGVyLmxlbmd0aDtyJiYtMT09PWk/dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCdMYXllciB3aXRoIGlkIFwiJytyKydcIiBkb2VzIG5vdCBleGlzdCBvbiB0aGlzIG1hcC4nKSkpOih0aGlzLl9vcmRlci5zcGxpY2UoaSwwLGUpLHRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkPSEwKX19ZWxzZSB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoXCJUaGUgbGF5ZXIgJ1wiK2UrXCInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIG1vdmVkLlwiKSkpfSxyLnByb3RvdHlwZS5yZW1vdmVMYXllcj1mdW5jdGlvbihlKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciByPXRoaXMuX2xheWVyc1tlXTtpZihyKXtyLnNldEV2ZW50ZWRQYXJlbnQobnVsbCk7dmFyIG49dGhpcy5fb3JkZXIuaW5kZXhPZihlKTt0aGlzLl9vcmRlci5zcGxpY2UobiwxKSx0aGlzLl9sYXllck9yZGVyQ2hhbmdlZD0hMCx0aGlzLl9jaGFuZ2VkPSEwLHRoaXMuX3JlbW92ZWRMYXllcnNbZV09cixkZWxldGUgdGhpcy5fbGF5ZXJzW2VdLGRlbGV0ZSB0aGlzLl91cGRhdGVkTGF5ZXJzW2VdLGRlbGV0ZSB0aGlzLl91cGRhdGVkUGFpbnRQcm9wc1tlXX1lbHNlIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcihcIlRoZSBsYXllciAnXCIrZStcIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgcmVtb3ZlZC5cIikpKX0sci5wcm90b3R5cGUuZ2V0TGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xheWVyc1t0XX0sci5wcm90b3R5cGUuc2V0TGF5ZXJab29tUmFuZ2U9ZnVuY3Rpb24oZSxyLG4pe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIGk9dGhpcy5nZXRMYXllcihlKTtpP2kubWluem9vbT09PXImJmkubWF4em9vbT09PW58fChudWxsIT1yJiYoaS5taW56b29tPXIpLG51bGwhPW4mJihpLm1heHpvb209biksdGhpcy5fdXBkYXRlTGF5ZXIoaSkpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcihcIlRoZSBsYXllciAnXCIrZStcIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgaGF2ZSB6b29tIGV4dGVudC5cIikpKX0sci5wcm90b3R5cGUuc2V0RmlsdGVyPWZ1bmN0aW9uKGUscil7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgbj10aGlzLmdldExheWVyKGUpO2lmKG4pe2lmKCF0LmRlZmF1bHQkMTAobi5maWx0ZXIscikpcmV0dXJuIG51bGw9PXI/KG4uZmlsdGVyPXZvaWQgMCx2b2lkIHRoaXMuX3VwZGF0ZUxheWVyKG4pKTp2b2lkKHRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVTdHlsZS5maWx0ZXIsXCJsYXllcnMuXCIrbi5pZCtcIi5maWx0ZXJcIixyKXx8KG4uZmlsdGVyPXQuY2xvbmUociksdGhpcy5fdXBkYXRlTGF5ZXIobikpKX1lbHNlIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcihcIlRoZSBsYXllciAnXCIrZStcIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgZmlsdGVyZWQuXCIpKSl9LHIucHJvdG90eXBlLmdldEZpbHRlcj1mdW5jdGlvbihlKXtyZXR1cm4gdC5jbG9uZSh0aGlzLmdldExheWVyKGUpLmZpbHRlcil9LHIucHJvdG90eXBlLnNldExheW91dFByb3BlcnR5PWZ1bmN0aW9uKGUscixuKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBpPXRoaXMuZ2V0TGF5ZXIoZSk7aT90LmRlZmF1bHQkMTAoaS5nZXRMYXlvdXRQcm9wZXJ0eShyKSxuKXx8KGkuc2V0TGF5b3V0UHJvcGVydHkocixuKSx0aGlzLl91cGRhdGVMYXllcihpKSk6dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKFwiVGhlIGxheWVyICdcIitlK1wiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBzdHlsZWQuXCIpKSl9LHIucHJvdG90eXBlLmdldExheW91dFByb3BlcnR5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZ2V0TGF5ZXIodCkuZ2V0TGF5b3V0UHJvcGVydHkoZSl9LHIucHJvdG90eXBlLnNldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24oZSxyLG4pe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIGk9dGhpcy5nZXRMYXllcihlKTtpZihpKXtpZighdC5kZWZhdWx0JDEwKGkuZ2V0UGFpbnRQcm9wZXJ0eShyKSxuKSl7dmFyIGE9aS5fdHJhbnNpdGlvbmFibGVQYWludC5fdmFsdWVzW3JdLnZhbHVlLmlzRGF0YURyaXZlbigpO2kuc2V0UGFpbnRQcm9wZXJ0eShyLG4pLChpLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbcl0udmFsdWUuaXNEYXRhRHJpdmVuKCl8fGEpJiZ0aGlzLl91cGRhdGVMYXllcihpKSx0aGlzLl9jaGFuZ2VkPSEwLHRoaXMuX3VwZGF0ZWRQYWludFByb3BzW2VdPSEwfX1lbHNlIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcihcIlRoZSBsYXllciAnXCIrZStcIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgc3R5bGVkLlwiKSkpfSxyLnByb3RvdHlwZS5nZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZ2V0TGF5ZXIodCkuZ2V0UGFpbnRQcm9wZXJ0eShlKX0sci5wcm90b3R5cGUuZ2V0VHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0LmV4dGVuZCh7ZHVyYXRpb246MzAwLGRlbGF5OjB9LHRoaXMuc3R5bGVzaGVldCYmdGhpcy5zdHlsZXNoZWV0LnRyYW5zaXRpb24pfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0LmZpbHRlck9iamVjdCh7dmVyc2lvbjp0aGlzLnN0eWxlc2hlZXQudmVyc2lvbixuYW1lOnRoaXMuc3R5bGVzaGVldC5uYW1lLG1ldGFkYXRhOnRoaXMuc3R5bGVzaGVldC5tZXRhZGF0YSxsaWdodDp0aGlzLnN0eWxlc2hlZXQubGlnaHQsY2VudGVyOnRoaXMuc3R5bGVzaGVldC5jZW50ZXIsem9vbTp0aGlzLnN0eWxlc2hlZXQuem9vbSxiZWFyaW5nOnRoaXMuc3R5bGVzaGVldC5iZWFyaW5nLHBpdGNoOnRoaXMuc3R5bGVzaGVldC5waXRjaCxzcHJpdGU6dGhpcy5zdHlsZXNoZWV0LnNwcml0ZSxnbHlwaHM6dGhpcy5zdHlsZXNoZWV0LmdseXBocyx0cmFuc2l0aW9uOnRoaXMuc3R5bGVzaGVldC50cmFuc2l0aW9uLHNvdXJjZXM6dC5tYXBPYmplY3QodGhpcy5zb3VyY2VDYWNoZXMsZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VyaWFsaXplKCl9KSxsYXllcnM6dGhpcy5fb3JkZXIubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9sYXllcnNbdF0uc2VyaWFsaXplKCl9KX0sZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXR9KX0sci5wcm90b3R5cGUuX3VwZGF0ZUxheWVyPWZ1bmN0aW9uKHQpe3RoaXMuX3VwZGF0ZWRMYXllcnNbdC5pZF09ITAsdC5zb3VyY2UmJiF0aGlzLl91cGRhdGVkU291cmNlc1t0LnNvdXJjZV0mJih0aGlzLl91cGRhdGVkU291cmNlc1t0LnNvdXJjZV09XCJyZWxvYWRcIix0aGlzLnNvdXJjZUNhY2hlc1t0LnNvdXJjZV0ucGF1c2UoKSksdGhpcy5fY2hhbmdlZD0hMH0sci5wcm90b3R5cGUuX2ZsYXR0ZW5SZW5kZXJlZEZlYXR1cmVzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPXRoaXMuX29yZGVyLmxlbmd0aC0xO3I+PTA7ci0tKWZvcih2YXIgbj10aGlzLl9vcmRlcltyXSxpPTAsYT10O2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXVtuXTtpZihvKWZvcih2YXIgcz0wLGw9bztzPGwubGVuZ3RoO3MrPTEpe3ZhciBjPWxbc107ZS5wdXNoKGMpfX1yZXR1cm4gZX0sci5wcm90b3R5cGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzPWZ1bmN0aW9uKGUscixuKXtyJiZyLmZpbHRlciYmdGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZVN0eWxlLmZpbHRlcixcInF1ZXJ5UmVuZGVyZWRGZWF0dXJlcy5maWx0ZXJcIixyLmZpbHRlcik7dmFyIGk9e307aWYociYmci5sYXllcnMpe2lmKCFBcnJheS5pc0FycmF5KHIubGF5ZXJzKSlyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKFwicGFyYW1ldGVycy5sYXllcnMgbXVzdCBiZSBhbiBBcnJheS5cIikpKSxbXTtmb3IodmFyIGE9MCxvPXIubGF5ZXJzO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXSxsPXRoaXMuX2xheWVyc1tzXTtpZighbClyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKFwiVGhlIGxheWVyICdcIitzK1wiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBxdWVyaWVkIGZvciBmZWF0dXJlcy5cIikpKSxbXTtpW2wuc291cmNlXT0hMH19dmFyIGM9W107Zm9yKHZhciB1IGluIHRoaXMuc291cmNlQ2FjaGVzKXIubGF5ZXJzJiYhaVt1XXx8Yy5wdXNoKGF0KHRoaXMuc291cmNlQ2FjaGVzW3VdLHRoaXMuX2xheWVycyxlLndvcmxkQ29vcmRpbmF0ZSxyLG4pKTtyZXR1cm4gdGhpcy5wbGFjZW1lbnQmJmMucHVzaChmdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYT17fSxvPW4ucXVlcnlSZW5kZXJlZFN5bWJvbHMoZSkscz1bXSxsPTAsYz1PYmplY3Qua2V5cyhvKS5tYXAoTnVtYmVyKTtsPGMubGVuZ3RoO2wrPTEpe3ZhciB1PWNbbF07cy5wdXNoKGlbdV0pfXMuc29ydChvdCk7Zm9yKHZhciBoPWZ1bmN0aW9uKCl7dmFyIGU9cFtmXSxuPWUuZmVhdHVyZUluZGV4Lmxvb2t1cFN5bWJvbEZlYXR1cmVzKG9bZS5idWNrZXRJbnN0YW5jZUlkXSxlLmJ1Y2tldEluZGV4LGUuc291cmNlTGF5ZXJJbmRleCxyLmZpbHRlcixyLmxheWVycyx0KTtmb3IodmFyIGkgaW4gbil7dmFyIHM9YVtpXT1hW2ldfHxbXSxsPW5baV07bC5zb3J0KGZ1bmN0aW9uKHQscil7dmFyIG49ZS5mZWF0dXJlU29ydE9yZGVyO2lmKG4pe3ZhciBpPW4uaW5kZXhPZih0LmZlYXR1cmVJbmRleCk7cmV0dXJuIG4uaW5kZXhPZihyLmZlYXR1cmVJbmRleCktaX1yZXR1cm4gci5mZWF0dXJlSW5kZXgtdC5mZWF0dXJlSW5kZXh9KTtmb3IodmFyIGM9MCx1PWw7Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgaD11W2NdO3MucHVzaChoLmZlYXR1cmUpfX19LGY9MCxwPXM7ZjxwLmxlbmd0aDtmKz0xKWgoKTtyZXR1cm4gYX0odGhpcy5fbGF5ZXJzLGUudmlld3BvcnQscix0aGlzLnBsYWNlbWVudC5jb2xsaXNpb25JbmRleCx0aGlzLnBsYWNlbWVudC5yZXRhaW5lZFF1ZXJ5RGF0YSkpLHRoaXMuX2ZsYXR0ZW5SZW5kZXJlZEZlYXR1cmVzKGMpfSxyLnByb3RvdHlwZS5xdWVyeVNvdXJjZUZlYXR1cmVzPWZ1bmN0aW9uKGUscil7ciYmci5maWx0ZXImJnRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVTdHlsZS5maWx0ZXIsXCJxdWVyeVNvdXJjZUZlYXR1cmVzLmZpbHRlclwiLHIuZmlsdGVyKTt2YXIgbj10aGlzLnNvdXJjZUNhY2hlc1tlXTtyZXR1cm4gbj9mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmdldFJlbmRlcmFibGVJZHMoKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZ2V0VGlsZUJ5SUQoZSl9KSxuPVtdLGk9e30sYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgbz1yW2FdLHM9by50aWxlSUQuY2Fub25pY2FsLmtleTtpW3NdfHwoaVtzXT0hMCxvLnF1ZXJ5U291cmNlRmVhdHVyZXMobixlKSl9cmV0dXJuIG59KG4scik6W119LHIucHJvdG90eXBlLmFkZFNvdXJjZVR5cGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiByLmdldFNvdXJjZVR5cGUodCk/bihuZXcgRXJyb3IoJ0Egc291cmNlIHR5cGUgY2FsbGVkIFwiJyt0KydcIiBhbHJlYWR5IGV4aXN0cy4nKSk6KHIuc2V0U291cmNlVHlwZSh0LGUpLGUud29ya2VyU291cmNlVVJMP3ZvaWQgdGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdChcImxvYWRXb3JrZXJTb3VyY2VcIix7bmFtZTp0LHVybDplLndvcmtlclNvdXJjZVVSTH0sbik6bihudWxsLG51bGwpKX0sci5wcm90b3R5cGUuZ2V0TGlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5saWdodC5nZXRMaWdodCgpfSxyLnByb3RvdHlwZS5zZXRMaWdodD1mdW5jdGlvbihlKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciByPXRoaXMubGlnaHQuZ2V0TGlnaHQoKSxuPSExO2Zvcih2YXIgaSBpbiBlKWlmKCF0LmRlZmF1bHQkMTAoZVtpXSxyW2ldKSl7bj0hMDticmVha31pZihuKXt2YXIgbz17bm93OmEubm93KCksdHJhbnNpdGlvbjp0LmV4dGVuZCh7ZHVyYXRpb246MzAwLGRlbGF5OjB9LHRoaXMuc3R5bGVzaGVldC50cmFuc2l0aW9uKX07dGhpcy5saWdodC5zZXRMaWdodChlKSx0aGlzLmxpZ2h0LnVwZGF0ZVRyYW5zaXRpb25zKG8pfX0sci5wcm90b3R5cGUuX3ZhbGlkYXRlPWZ1bmN0aW9uKGUscixuLGksYSl7cmV0dXJuKCFhfHwhMSE9PWEudmFsaWRhdGUpJiZYZSh0aGlzLGUuY2FsbCh0LnZhbGlkYXRlU3R5bGUsdC5leHRlbmQoe2tleTpyLHN0eWxlOnRoaXMuc2VyaWFsaXplKCksdmFsdWU6bixzdHlsZVNwZWM6dC5kZWZhdWx0JDV9LGkpKSl9LHIucHJvdG90eXBlLl9yZW1vdmU9ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdC5ldmVudGVkLm9mZihcInBsdWdpbkF2YWlsYWJsZVwiLHRoaXMuX3J0bFRleHRQbHVnaW5DYWxsYmFjayksdGhpcy5zb3VyY2VDYWNoZXMpdGhpcy5zb3VyY2VDYWNoZXNbZV0uY2xlYXJUaWxlcygpO3RoaXMuZGlzcGF0Y2hlci5yZW1vdmUoKX0sci5wcm90b3R5cGUuX2NsZWFyU291cmNlPWZ1bmN0aW9uKHQpe3RoaXMuc291cmNlQ2FjaGVzW3RdLmNsZWFyVGlsZXMoKX0sci5wcm90b3R5cGUuX3JlbG9hZFNvdXJjZT1mdW5jdGlvbih0KXt0aGlzLnNvdXJjZUNhY2hlc1t0XS5yZXN1bWUoKSx0aGlzLnNvdXJjZUNhY2hlc1t0XS5yZWxvYWQoKX0sci5wcm90b3R5cGUuX3VwZGF0ZVNvdXJjZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuc291cmNlQ2FjaGVzKXRoaXMuc291cmNlQ2FjaGVzW2VdLnVwZGF0ZSh0KX0sci5wcm90b3R5cGUuX2dlbmVyYXRlQ29sbGlzaW9uQm94ZXM9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpdGhpcy5fcmVsb2FkU291cmNlKHQpfSxyLnByb3RvdHlwZS5fdXBkYXRlUGxhY2VtZW50PWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ITEsaT0hMSxvPXt9LHM9MCxsPXRoaXMuX29yZGVyO3M8bC5sZW5ndGg7cys9MSl7dmFyIGM9bFtzXSx1PXRoaXMuX2xheWVyc1tjXTtpZihcInN5bWJvbFwiPT09dS50eXBlKXtpZighb1t1LnNvdXJjZV0pe3ZhciBoPXRoaXMuc291cmNlQ2FjaGVzW3Uuc291cmNlXTtvW3Uuc291cmNlXT1oLmdldFJlbmRlcmFibGVJZHMoKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGguZ2V0VGlsZUJ5SUQodCl9KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUudGlsZUlELm92ZXJzY2FsZWRaLXQudGlsZUlELm92ZXJzY2FsZWRafHwodC50aWxlSUQuaXNMZXNzVGhhbihlLnRpbGVJRCk/LTE6MSl9KX12YXIgZj10aGlzLmNyb3NzVGlsZVN5bWJvbEluZGV4LmFkZExheWVyKHUsb1t1LnNvdXJjZV0sdC5jZW50ZXIubG5nKTtuPW58fGZ9fXRoaXMuY3Jvc3NUaWxlU3ltYm9sSW5kZXgucHJ1bmVVbnVzZWRMYXllcnModGhpcy5fb3JkZXIpO3ZhciBwPXRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkO2lmKChwfHwhdGhpcy5wYXVzZWFibGVQbGFjZW1lbnR8fHRoaXMucGF1c2VhYmxlUGxhY2VtZW50LmlzRG9uZSgpJiYhdGhpcy5wbGFjZW1lbnQuc3RpbGxSZWNlbnQoYS5ub3coKSkpJiYodGhpcy5wYXVzZWFibGVQbGFjZW1lbnQ9bmV3IFVlKHQsdGhpcy5fb3JkZXIscCxlLHIpLHRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkPSExKSx0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKT90aGlzLnBsYWNlbWVudC5zZXRTdGFsZSgpOih0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5jb250aW51ZVBsYWNlbWVudCh0aGlzLl9vcmRlcix0aGlzLl9sYXllcnMsbyksdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuaXNEb25lKCkmJih0aGlzLnBsYWNlbWVudD10aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5jb21taXQodGhpcy5wbGFjZW1lbnQsYS5ub3coKSksaT0hMCksbiYmdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQucGxhY2VtZW50LnNldFN0YWxlKCkpLGl8fG4pZm9yKHZhciBkPTAsZz10aGlzLl9vcmRlcjtkPGcubGVuZ3RoO2QrPTEpe3ZhciB2PWdbZF0sbT10aGlzLl9sYXllcnNbdl07XCJzeW1ib2xcIj09PW0udHlwZSYmdGhpcy5wbGFjZW1lbnQudXBkYXRlTGF5ZXJPcGFjaXRpZXMobSxvW20uc291cmNlXSl9cmV0dXJuIXRoaXMucGF1c2VhYmxlUGxhY2VtZW50LmlzRG9uZSgpfHx0aGlzLnBsYWNlbWVudC5oYXNUcmFuc2l0aW9ucyhhLm5vdygpKX0sci5wcm90b3R5cGUuZ2V0SW1hZ2VzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmltYWdlTWFuYWdlci5nZXRJbWFnZXMoZS5pY29ucyxyKX0sci5wcm90b3R5cGUuZ2V0R2x5cGhzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdseXBoTWFuYWdlci5nZXRHbHlwaHMoZS5zdGFja3Mscil9LHJ9KHQuRXZlbnRlZCk7SmUuZ2V0U291cmNlVHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gbnRbdF19LEplLnNldFNvdXJjZVR5cGU9ZnVuY3Rpb24odCxlKXtudFt0XT1lfSxKZS5yZWdpc3RlckZvclBsdWdpbkF2YWlsYWJpbGl0eT10LnJlZ2lzdGVyRm9yUGx1Z2luQXZhaWxhYmlsaXR5O3ZhciBLZT10LmNyZWF0ZUxheW91dChbe25hbWU6XCJhX3Bvc1wiLHR5cGU6XCJJbnQxNlwiLGNvbXBvbmVudHM6Mn1dKSxRZT17cHJlbHVkZTp7ZnJhZ21lbnRTb3VyY2U6XCIjaWZkZWYgR0xfRVNcXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZWxzZVxcblxcbiNpZiAhZGVmaW5lZChsb3dwKVxcbiNkZWZpbmUgbG93cFxcbiNlbmRpZlxcblxcbiNpZiAhZGVmaW5lZChtZWRpdW1wKVxcbiNkZWZpbmUgbWVkaXVtcFxcbiNlbmRpZlxcblxcbiNpZiAhZGVmaW5lZChoaWdocClcXG4jZGVmaW5lIGhpZ2hwXFxuI2VuZGlmXFxuXFxuI2VuZGlmXFxuXCIsdmVydGV4U291cmNlOlwiI2lmZGVmIEdMX0VTXFxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNlbHNlXFxuXFxuI2lmICFkZWZpbmVkKGxvd3ApXFxuI2RlZmluZSBsb3dwXFxuI2VuZGlmXFxuXFxuI2lmICFkZWZpbmVkKG1lZGl1bXApXFxuI2RlZmluZSBtZWRpdW1wXFxuI2VuZGlmXFxuXFxuI2lmICFkZWZpbmVkKGhpZ2hwKVxcbiNkZWZpbmUgaGlnaHBcXG4jZW5kaWZcXG5cXG4jZW5kaWZcXG5cXG4vLyBVbnBhY2sgYSBwYWlyIG9mIHZhbHVlcyB0aGF0IGhhdmUgYmVlbiBwYWNrZWQgaW50byBhIHNpbmdsZSBmbG9hdC5cXG4vLyBUaGUgcGFja2VkIHZhbHVlcyBhcmUgYXNzdW1lZCB0byBiZSA4LWJpdCB1bnNpZ25lZCBpbnRlZ2VycywgYW5kIGFyZVxcbi8vIHBhY2tlZCBsaWtlIHNvOlxcbi8vIHBhY2tlZFZhbHVlID0gZmxvb3IoaW5wdXRbMF0pICogMjU2ICsgaW5wdXRbMV0sXFxudmVjMiB1bnBhY2tfZmxvYXQoY29uc3QgZmxvYXQgcGFja2VkVmFsdWUpIHtcXG4gICAgaW50IHBhY2tlZEludFZhbHVlID0gaW50KHBhY2tlZFZhbHVlKTtcXG4gICAgaW50IHYwID0gcGFja2VkSW50VmFsdWUgLyAyNTY7XFxuICAgIHJldHVybiB2ZWMyKHYwLCBwYWNrZWRJbnRWYWx1ZSAtIHYwICogMjU2KTtcXG59XFxuXFxudmVjMiB1bnBhY2tfb3BhY2l0eShjb25zdCBmbG9hdCBwYWNrZWRPcGFjaXR5KSB7XFxuICAgIGludCBpbnRPcGFjaXR5ID0gaW50KHBhY2tlZE9wYWNpdHkpIC8gMjtcXG4gICAgcmV0dXJuIHZlYzIoZmxvYXQoaW50T3BhY2l0eSkgLyAxMjcuMCwgbW9kKHBhY2tlZE9wYWNpdHksIDIuMCkpO1xcbn1cXG5cXG4vLyBUbyBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgbmVlZGVkLCB3ZSBlbmNvZGUgYSA0LWNvbXBvbmVudFxcbi8vIGNvbG9yIGludG8gYSBwYWlyIG9mIGZsb2F0cyAoaS5lLiBhIHZlYzIpIGFzIGZvbGxvd3M6XFxuLy8gWyBmbG9vcihjb2xvci5yICogMjU1KSAqIDI1NiArIGNvbG9yLmcgKiAyNTUsXFxuLy8gICBmbG9vcihjb2xvci5iICogMjU1KSAqIDI1NiArIGNvbG9yLmcgKiAyNTUgXVxcbnZlYzQgZGVjb2RlX2NvbG9yKGNvbnN0IHZlYzIgZW5jb2RlZENvbG9yKSB7XFxuICAgIHJldHVybiB2ZWM0KFxcbiAgICAgICAgdW5wYWNrX2Zsb2F0KGVuY29kZWRDb2xvclswXSkgLyAyNTUuMCxcXG4gICAgICAgIHVucGFja19mbG9hdChlbmNvZGVkQ29sb3JbMV0pIC8gMjU1LjBcXG4gICAgKTtcXG59XFxuXFxuLy8gVW5wYWNrIGEgcGFpciBvZiBwYWludCB2YWx1ZXMgYW5kIGludGVycG9sYXRlIGJldHdlZW4gdGhlbS5cXG5mbG9hdCB1bnBhY2tfbWl4X3ZlYzIoY29uc3QgdmVjMiBwYWNrZWRWYWx1ZSwgY29uc3QgZmxvYXQgdCkge1xcbiAgICByZXR1cm4gbWl4KHBhY2tlZFZhbHVlWzBdLCBwYWNrZWRWYWx1ZVsxXSwgdCk7XFxufVxcblxcbi8vIFVucGFjayBhIHBhaXIgb2YgcGFpbnQgdmFsdWVzIGFuZCBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHRoZW0uXFxudmVjNCB1bnBhY2tfbWl4X3ZlYzQoY29uc3QgdmVjNCBwYWNrZWRDb2xvcnMsIGNvbnN0IGZsb2F0IHQpIHtcXG4gICAgdmVjNCBtaW5Db2xvciA9IGRlY29kZV9jb2xvcih2ZWMyKHBhY2tlZENvbG9yc1swXSwgcGFja2VkQ29sb3JzWzFdKSk7XFxuICAgIHZlYzQgbWF4Q29sb3IgPSBkZWNvZGVfY29sb3IodmVjMihwYWNrZWRDb2xvcnNbMl0sIHBhY2tlZENvbG9yc1szXSkpO1xcbiAgICByZXR1cm4gbWl4KG1pbkNvbG9yLCBtYXhDb2xvciwgdCk7XFxufVxcblxcbi8vIFRoZSBvZmZzZXQgZGVwZW5kcyBvbiBob3cgbWFueSBwaXhlbHMgYXJlIGJldHdlZW4gdGhlIHdvcmxkIG9yaWdpbiBhbmQgdGhlIGVkZ2Ugb2YgdGhlIHRpbGU6XFxuLy8gdmVjMiBvZmZzZXQgPSBtb2QocGl4ZWxfY29vcmQsIHNpemUpXFxuLy9cXG4vLyBBdCBoaWdoIHpvb20gbGV2ZWxzIHRoZXJlIGFyZSBhIHRvbiBvZiBwaXhlbHMgYmV0d2VlbiB0aGUgd29ybGQgb3JpZ2luIGFuZCB0aGUgZWRnZSBvZiB0aGUgdGlsZS5cXG4vLyBUaGUgZ2xzbCBzcGVjIG9ubHkgZ3VhcmFudGVlcyAxNiBiaXRzIG9mIHByZWNpc2lvbiBmb3IgaGlnaHAgZmxvYXRzLiBXZSBuZWVkIG1vcmUgdGhhbiB0aGF0Llxcbi8vXFxuLy8gVGhlIHBpeGVsX2Nvb3JkIGlzIHBhc3NlZCBpbiBhcyB0d28gMTYgYml0IHZhbHVlczpcXG4vLyBwaXhlbF9jb29yZF91cHBlciA9IGZsb29yKHBpeGVsX2Nvb3JkIC8gMl4xNilcXG4vLyBwaXhlbF9jb29yZF9sb3dlciA9IG1vZChwaXhlbF9jb29yZCwgMl4xNilcXG4vL1xcbi8vIFRoZSBvZmZzZXQgaXMgY2FsY3VsYXRlZCBpbiBhIHNlcmllcyBvZiBzdGVwcyB0aGF0IHNob3VsZCBwcmVzZXJ2ZSB0aGlzIHByZWNpc2lvbjpcXG52ZWMyIGdldF9wYXR0ZXJuX3Bvcyhjb25zdCB2ZWMyIHBpeGVsX2Nvb3JkX3VwcGVyLCBjb25zdCB2ZWMyIHBpeGVsX2Nvb3JkX2xvd2VyLFxcbiAgICBjb25zdCB2ZWMyIHBhdHRlcm5fc2l6ZSwgY29uc3QgZmxvYXQgdGlsZV91bml0c190b19waXhlbHMsIGNvbnN0IHZlYzIgcG9zKSB7XFxuXFxuICAgIHZlYzIgb2Zmc2V0ID0gbW9kKG1vZChtb2QocGl4ZWxfY29vcmRfdXBwZXIsIHBhdHRlcm5fc2l6ZSkgKiAyNTYuMCwgcGF0dGVybl9zaXplKSAqIDI1Ni4wICsgcGl4ZWxfY29vcmRfbG93ZXIsIHBhdHRlcm5fc2l6ZSk7XFxuICAgIHJldHVybiAodGlsZV91bml0c190b19waXhlbHMgKiBwb3MgKyBvZmZzZXQpIC8gcGF0dGVybl9zaXplO1xcbn1cXG5cIn0sYmFja2dyb3VuZDp7ZnJhZ21lbnRTb3VyY2U6XCJ1bmlmb3JtIHZlYzQgdV9jb2xvcjtcXG51bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTtcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIGdsX0ZyYWdDb2xvciA9IHVfY29sb3IgKiB1X29wYWNpdHk7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xcblxcbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcXG59XFxuXCJ9LGJhY2tncm91bmRQYXR0ZXJuOntmcmFnbWVudFNvdXJjZTpcInVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYTtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2E7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl90bF9iO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYjtcXG51bmlmb3JtIHZlYzIgdV90ZXhzaXplO1xcbnVuaWZvcm0gZmxvYXQgdV9taXg7XFxudW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcXG5cXG52YXJ5aW5nIHZlYzIgdl9wb3NfYTtcXG52YXJ5aW5nIHZlYzIgdl9wb3NfYjtcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIHZlYzIgaW1hZ2Vjb29yZCA9IG1vZCh2X3Bvc19hLCAxLjApO1xcbiAgICB2ZWMyIHBvcyA9IG1peCh1X3BhdHRlcm5fdGxfYSAvIHVfdGV4c2l6ZSwgdV9wYXR0ZXJuX2JyX2EgLyB1X3RleHNpemUsIGltYWdlY29vcmQpO1xcbiAgICB2ZWM0IGNvbG9yMSA9IHRleHR1cmUyRCh1X2ltYWdlLCBwb3MpO1xcblxcbiAgICB2ZWMyIGltYWdlY29vcmRfYiA9IG1vZCh2X3Bvc19iLCAxLjApO1xcbiAgICB2ZWMyIHBvczIgPSBtaXgodV9wYXR0ZXJuX3RsX2IgLyB1X3RleHNpemUsIHVfcGF0dGVybl9icl9iIC8gdV90ZXhzaXplLCBpbWFnZWNvb3JkX2IpO1xcbiAgICB2ZWM0IGNvbG9yMiA9IHRleHR1cmUyRCh1X2ltYWdlLCBwb3MyKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gbWl4KGNvbG9yMSwgY29sb3IyLCB1X21peCkgKiB1X29wYWNpdHk7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcInVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3NpemVfYTtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3NpemVfYjtcXG51bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF91cHBlcjtcXG51bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF9sb3dlcjtcXG51bmlmb3JtIGZsb2F0IHVfc2NhbGVfYTtcXG51bmlmb3JtIGZsb2F0IHVfc2NhbGVfYjtcXG51bmlmb3JtIGZsb2F0IHVfdGlsZV91bml0c190b19waXhlbHM7XFxuXFxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XFxuXFxudmFyeWluZyB2ZWMyIHZfcG9zX2E7XFxudmFyeWluZyB2ZWMyIHZfcG9zX2I7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XFxuXFxuICAgIHZfcG9zX2EgPSBnZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlciwgdV9waXhlbF9jb29yZF9sb3dlciwgdV9zY2FsZV9hICogdV9wYXR0ZXJuX3NpemVfYSwgdV90aWxlX3VuaXRzX3RvX3BpeGVscywgYV9wb3MpO1xcbiAgICB2X3Bvc19iID0gZ2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsIHVfcGl4ZWxfY29vcmRfbG93ZXIsIHVfc2NhbGVfYiAqIHVfcGF0dGVybl9zaXplX2IsIHVfdGlsZV91bml0c190b19waXhlbHMsIGFfcG9zKTtcXG59XFxuXCJ9LGNpcmNsZTp7ZnJhZ21lbnRTb3VyY2U6XCIjcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgcmFkaXVzXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBzdHJva2VfY29sb3JcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgc3Ryb2tlX3dpZHRoXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHN0cm9rZV9vcGFjaXR5XFxuXFxudmFyeWluZyB2ZWMzIHZfZGF0YTtcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCByYWRpdXNcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IHN0cm9rZV9jb2xvclxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHN0cm9rZV93aWR0aFxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHN0cm9rZV9vcGFjaXR5XFxuXFxuICAgIHZlYzIgZXh0cnVkZSA9IHZfZGF0YS54eTtcXG4gICAgZmxvYXQgZXh0cnVkZV9sZW5ndGggPSBsZW5ndGgoZXh0cnVkZSk7XFxuXFxuICAgIGxvd3AgZmxvYXQgYW50aWFsaWFzYmx1ciA9IHZfZGF0YS56O1xcbiAgICBmbG9hdCBhbnRpYWxpYXNlZF9ibHVyID0gLW1heChibHVyLCBhbnRpYWxpYXNibHVyKTtcXG5cXG4gICAgZmxvYXQgb3BhY2l0eV90ID0gc21vb3Roc3RlcCgwLjAsIGFudGlhbGlhc2VkX2JsdXIsIGV4dHJ1ZGVfbGVuZ3RoIC0gMS4wKTtcXG5cXG4gICAgZmxvYXQgY29sb3JfdCA9IHN0cm9rZV93aWR0aCA8IDAuMDEgPyAwLjAgOiBzbW9vdGhzdGVwKFxcbiAgICAgICAgYW50aWFsaWFzZWRfYmx1cixcXG4gICAgICAgIDAuMCxcXG4gICAgICAgIGV4dHJ1ZGVfbGVuZ3RoIC0gcmFkaXVzIC8gKHJhZGl1cyArIHN0cm9rZV93aWR0aClcXG4gICAgKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gb3BhY2l0eV90ICogbWl4KGNvbG9yICogb3BhY2l0eSwgc3Ryb2tlX2NvbG9yICogc3Ryb2tlX29wYWNpdHksIGNvbG9yX3QpO1xcblxcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xcbiNlbmRpZlxcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxudW5pZm9ybSBib29sIHVfc2NhbGVfd2l0aF9tYXA7XFxudW5pZm9ybSBib29sIHVfcGl0Y2hfd2l0aF9tYXA7XFxudW5pZm9ybSB2ZWMyIHVfZXh0cnVkZV9zY2FsZTtcXG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgcmFkaXVzXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBzdHJva2VfY29sb3JcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgc3Ryb2tlX3dpZHRoXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHN0cm9rZV9vcGFjaXR5XFxuXFxudmFyeWluZyB2ZWMzIHZfZGF0YTtcXG5cXG52b2lkIG1haW4odm9pZCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgcmFkaXVzXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBzdHJva2VfY29sb3JcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBzdHJva2Vfd2lkdGhcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBzdHJva2Vfb3BhY2l0eVxcblxcbiAgICAvLyB1bmVuY29kZSB0aGUgZXh0cnVzaW9uIHZlY3RvciB0aGF0IHdlIHNudWNrIGludG8gdGhlIGFfcG9zIHZlY3RvclxcbiAgICB2ZWMyIGV4dHJ1ZGUgPSB2ZWMyKG1vZChhX3BvcywgMi4wKSAqIDIuMCAtIDEuMCk7XFxuXFxuICAgIC8vIG11bHRpcGx5IGFfcG9zIGJ5IDAuNSwgc2luY2Ugd2UgaGFkIGl0ICogMiBpbiBvcmRlciB0byBzbmVha1xcbiAgICAvLyBpbiBleHRydXNpb24gZGF0YVxcbiAgICB2ZWMyIGNpcmNsZV9jZW50ZXIgPSBmbG9vcihhX3BvcyAqIDAuNSk7XFxuICAgIGlmICh1X3BpdGNoX3dpdGhfbWFwKSB7XFxuICAgICAgICB2ZWMyIGNvcm5lcl9wb3NpdGlvbiA9IGNpcmNsZV9jZW50ZXI7XFxuICAgICAgICBpZiAodV9zY2FsZV93aXRoX21hcCkge1xcbiAgICAgICAgICAgIGNvcm5lcl9wb3NpdGlvbiArPSBleHRydWRlICogKHJhZGl1cyArIHN0cm9rZV93aWR0aCkgKiB1X2V4dHJ1ZGVfc2NhbGU7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIC8vIFBpdGNoaW5nIHRoZSBjaXJjbGUgd2l0aCB0aGUgbWFwIGVmZmVjdGl2ZWx5IHNjYWxlcyBpdCB3aXRoIHRoZSBtYXBcXG4gICAgICAgICAgICAvLyBUbyBjb3VudGVyYWN0IHRoZSBlZmZlY3QgZm9yIHBpdGNoLXNjYWxlOiB2aWV3cG9ydCwgd2UgcmVzY2FsZSB0aGVcXG4gICAgICAgICAgICAvLyB3aG9sZSBjaXJjbGUgYmFzZWQgb24gdGhlIHBpdGNoIHNjYWxpbmcgZWZmZWN0IGF0IGl0cyBjZW50cmFsIHBvaW50XFxuICAgICAgICAgICAgdmVjNCBwcm9qZWN0ZWRfY2VudGVyID0gdV9tYXRyaXggKiB2ZWM0KGNpcmNsZV9jZW50ZXIsIDAsIDEpO1xcbiAgICAgICAgICAgIGNvcm5lcl9wb3NpdGlvbiArPSBleHRydWRlICogKHJhZGl1cyArIHN0cm9rZV93aWR0aCkgKiB1X2V4dHJ1ZGVfc2NhbGUgKiAocHJvamVjdGVkX2NlbnRlci53IC8gdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlKTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGNvcm5lcl9wb3NpdGlvbiwgMCwgMSk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChjaXJjbGVfY2VudGVyLCAwLCAxKTtcXG5cXG4gICAgICAgIGlmICh1X3NjYWxlX3dpdGhfbWFwKSB7XFxuICAgICAgICAgICAgZ2xfUG9zaXRpb24ueHkgKz0gZXh0cnVkZSAqIChyYWRpdXMgKyBzdHJva2Vfd2lkdGgpICogdV9leHRydWRlX3NjYWxlICogdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBnbF9Qb3NpdGlvbi54eSArPSBleHRydWRlICogKHJhZGl1cyArIHN0cm9rZV93aWR0aCkgKiB1X2V4dHJ1ZGVfc2NhbGUgKiBnbF9Qb3NpdGlvbi53O1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIC8vIFRoaXMgaXMgYSBtaW5pbXVtIGJsdXIgZGlzdGFuY2UgdGhhdCBzZXJ2ZXMgYXMgYSBmYXV4LWFudGlhbGlhc2luZyBmb3JcXG4gICAgLy8gdGhlIGNpcmNsZS4gc2luY2UgYmx1ciBpcyBhIHJhdGlvIG9mIHRoZSBjaXJjbGUncyBzaXplIGFuZCB0aGUgaW50ZW50IGlzXFxuICAgIC8vIHRvIGtlZXAgdGhlIGJsdXIgYXQgcm91Z2hseSAxcHgsIHRoZSB0d28gYXJlIGludmVyc2VseSByZWxhdGVkLlxcbiAgICBsb3dwIGZsb2F0IGFudGlhbGlhc2JsdXIgPSAxLjAgLyBERVZJQ0VfUElYRUxfUkFUSU8gLyAocmFkaXVzICsgc3Ryb2tlX3dpZHRoKTtcXG5cXG4gICAgdl9kYXRhID0gdmVjMyhleHRydWRlLngsIGV4dHJ1ZGUueSwgYW50aWFsaWFzYmx1cik7XFxufVxcblwifSxjbGlwcGluZ01hc2s6e2ZyYWdtZW50U291cmNlOlwidm9pZCBtYWluKCkge1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxufVxcblwiLHZlcnRleFNvdXJjZTpcImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xcblxcbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcXG59XFxuXCJ9LGhlYXRtYXA6e2ZyYWdtZW50U291cmNlOlwiI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCBmbG9hdCB3ZWlnaHRcXG5cXG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfaW50ZW5zaXR5O1xcbnZhcnlpbmcgdmVjMiB2X2V4dHJ1ZGU7XFxuXFxuLy8gR2F1c3NpYW4ga2VybmVsIGNvZWZmaWNpZW50OiAxIC8gc3FydCgyICogUEkpXFxuI2RlZmluZSBHQVVTU19DT0VGIDAuMzk4OTQyMjgwNDAxNDMyN1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgZmxvYXQgd2VpZ2h0XFxuXFxuICAgIC8vIEtlcm5lbCBkZW5zaXR5IGVzdGltYXRpb24gd2l0aCBhIEdhdXNzaWFuIGtlcm5lbCBvZiBzaXplIDV4NVxcbiAgICBmbG9hdCBkID0gLTAuNSAqIDMuMCAqIDMuMCAqIGRvdCh2X2V4dHJ1ZGUsIHZfZXh0cnVkZSk7XFxuICAgIGZsb2F0IHZhbCA9IHdlaWdodCAqIHVfaW50ZW5zaXR5ICogR0FVU1NfQ09FRiAqIGV4cChkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2YWwsIDEuMCwgMS4wLCAxLjApO1xcblxcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xcbiNlbmRpZlxcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCIjcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIGZsb2F0IHdlaWdodFxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCByYWRpdXNcXG5cXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxudW5pZm9ybSBmbG9hdCB1X2V4dHJ1ZGVfc2NhbGU7XFxudW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7XFxudW5pZm9ybSBmbG9hdCB1X2ludGVuc2l0eTtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG5cXG52YXJ5aW5nIHZlYzIgdl9leHRydWRlO1xcblxcbi8vIEVmZmVjdGl2ZSBcXFwiMFxcXCIgaW4gdGhlIGtlcm5lbCBkZW5zaXR5IHRleHR1cmUgdG8gYWRqdXN0IHRoZSBrZXJuZWwgc2l6ZSB0bztcXG4vLyB0aGlzIGVtcGlyaWNhbGx5IGNob3NlbiBudW1iZXIgbWluaW1pemVzIGFydGlmYWN0cyBvbiBvdmVybGFwcGluZyBrZXJuZWxzXFxuLy8gZm9yIHR5cGljYWwgaGVhdG1hcCBjYXNlcyAoYXNzdW1pbmcgY2x1c3RlcmVkIHNvdXJjZSlcXG5jb25zdCBoaWdocCBmbG9hdCBaRVJPID0gMS4wIC8gMjU1LjAgLyAxNi4wO1xcblxcbi8vIEdhdXNzaWFuIGtlcm5lbCBjb2VmZmljaWVudDogMSAvIHNxcnQoMiAqIFBJKVxcbiNkZWZpbmUgR0FVU1NfQ09FRiAwLjM5ODk0MjI4MDQwMTQzMjdcXG5cXG52b2lkIG1haW4odm9pZCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCBmbG9hdCB3ZWlnaHRcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCByYWRpdXNcXG5cXG4gICAgLy8gdW5lbmNvZGUgdGhlIGV4dHJ1c2lvbiB2ZWN0b3IgdGhhdCB3ZSBzbnVjayBpbnRvIHRoZSBhX3BvcyB2ZWN0b3JcXG4gICAgdmVjMiB1bnNjYWxlZF9leHRydWRlID0gdmVjMihtb2QoYV9wb3MsIDIuMCkgKiAyLjAgLSAxLjApO1xcblxcbiAgICAvLyBUaGlzICdleHRydWRlJyBjb21lcyBpbiByYW5naW5nIGZyb20gWy0xLCAtMV0sIHRvIFsxLCAxXS4gIFdlJ2xsIHVzZVxcbiAgICAvLyBpdCB0byBwcm9kdWNlIHRoZSB2ZXJ0aWNlcyBvZiBhIHNxdWFyZSBtZXNoIGZyYW1pbmcgdGhlIHBvaW50IGZlYXR1cmVcXG4gICAgLy8gd2UncmUgYWRkaW5nIHRvIHRoZSBrZXJuZWwgZGVuc2l0eSB0ZXh0dXJlLiAgV2UnbGwgYWxzbyBwYXNzIGl0IGFzXFxuICAgIC8vIGEgdmFyeWluZywgc28gdGhhdCB0aGUgZnJhZ21lbnQgc2hhZGVyIGNhbiBkZXRlcm1pbmUgdGhlIGRpc3RhbmNlIG9mXFxuICAgIC8vIGVhY2ggZnJhZ21lbnQgZnJvbSB0aGUgcG9pbnQgZmVhdHVyZS5cXG4gICAgLy8gQmVmb3JlIHdlIGRvIHNvLCB3ZSBuZWVkIHRvIHNjYWxlIGl0IHVwIHN1ZmZpY2llbnRseSBzbyB0aGF0IHRoZVxcbiAgICAvLyBrZXJuZWwgZmFsbHMgZWZmZWN0aXZlbHkgdG8gemVybyBhdCB0aGUgZWRnZSBvZiB0aGUgbWVzaC5cXG4gICAgLy8gVGhhdCBpcywgd2Ugd2FudCB0byBrbm93IFMgc3VjaCB0aGF0XFxuICAgIC8vIHdlaWdodCAqIHVfaW50ZW5zaXR5ICogR0FVU1NfQ09FRiAqIGV4cCgtMC41ICogMy4wXjIgKiBTXjIpID09IFpFUk9cXG4gICAgLy8gV2hpY2ggc29sdmVzIHRvOlxcbiAgICAvLyBTID0gc3FydCgtMi4wICogbG9nKFpFUk8gLyAod2VpZ2h0ICogdV9pbnRlbnNpdHkgKiBHQVVTU19DT0VGKSkpIC8gMy4wXFxuICAgIGZsb2F0IFMgPSBzcXJ0KC0yLjAgKiBsb2coWkVSTyAvIHdlaWdodCAvIHVfaW50ZW5zaXR5IC8gR0FVU1NfQ09FRikpIC8gMy4wO1xcblxcbiAgICAvLyBQYXNzIHRoZSB2YXJ5aW5nIGluIHVuaXRzIG9mIHJhZGl1c1xcbiAgICB2X2V4dHJ1ZGUgPSBTICogdW5zY2FsZWRfZXh0cnVkZTtcXG5cXG4gICAgLy8gU2NhbGUgYnkgcmFkaXVzIGFuZCB0aGUgem9vbS1iYXNlZCBzY2FsZSBmYWN0b3IgdG8gcHJvZHVjZSBhY3R1YWxcXG4gICAgLy8gbWVzaCBwb3NpdGlvblxcbiAgICB2ZWMyIGV4dHJ1ZGUgPSB2X2V4dHJ1ZGUgKiByYWRpdXMgKiB1X2V4dHJ1ZGVfc2NhbGU7XFxuXFxuICAgIC8vIG11bHRpcGx5IGFfcG9zIGJ5IDAuNSwgc2luY2Ugd2UgaGFkIGl0ICogMiBpbiBvcmRlciB0byBzbmVha1xcbiAgICAvLyBpbiBleHRydXNpb24gZGF0YVxcbiAgICB2ZWM0IHBvcyA9IHZlYzQoZmxvb3IoYV9wb3MgKiAwLjUpICsgZXh0cnVkZSwgMCwgMSk7XFxuXFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiBwb3M7XFxufVxcblwifSxoZWF0bWFwVGV4dHVyZTp7ZnJhZ21lbnRTb3VyY2U6XCJ1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVfY29sb3JfcmFtcDtcXG51bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTtcXG52YXJ5aW5nIHZlYzIgdl9wb3M7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICBmbG9hdCB0ID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHZfcG9zKS5yO1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVfY29sb3JfcmFtcCwgdmVjMih0LCAwLjUpKTtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgKiB1X29wYWNpdHk7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcInVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG51bmlmb3JtIHZlYzIgdV93b3JsZDtcXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG52YXJ5aW5nIHZlYzIgdl9wb3M7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcyAqIHVfd29ybGQsIDAsIDEpO1xcblxcbiAgICB2X3Bvcy54ID0gYV9wb3MueDtcXG4gICAgdl9wb3MueSA9IDEuMCAtIGFfcG9zLnk7XFxufVxcblwifSxjb2xsaXNpb25Cb3g6e2ZyYWdtZW50U291cmNlOlwiXFxudmFyeWluZyBmbG9hdCB2X3BsYWNlZDtcXG52YXJ5aW5nIGZsb2F0IHZfbm90VXNlZDtcXG5cXG52b2lkIG1haW4oKSB7XFxuXFxuICAgIGZsb2F0IGFscGhhID0gMC41O1xcblxcbiAgICAvLyBSZWQgPSBjb2xsaXNpb24sIGhpZGUgbGFiZWxcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDAuMCwgMC4wLCAxLjApICogYWxwaGE7XFxuXFxuICAgIC8vIEJsdWUgPSBubyBjb2xsaXNpb24sIGxhYmVsIGlzIHNob3dpbmdcXG4gICAgaWYgKHZfcGxhY2VkID4gMC41KSB7XFxuICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAxLjAsIDAuNSkgKiBhbHBoYTtcXG4gICAgfVxcblxcbiAgICBpZiAodl9ub3RVc2VkID4gMC41KSB7XFxuICAgICAgICAvLyBUaGlzIGJveCBub3QgdXNlZCwgZmFkZSBpdCBvdXRcXG4gICAgICAgIGdsX0ZyYWdDb2xvciAqPSAuMTtcXG4gICAgfVxcbn1cIix2ZXJ0ZXhTb3VyY2U6XCJhdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG5hdHRyaWJ1dGUgdmVjMiBhX2FuY2hvcl9wb3M7XFxuYXR0cmlidXRlIHZlYzIgYV9leHRydWRlO1xcbmF0dHJpYnV0ZSB2ZWMyIGFfcGxhY2VkO1xcblxcbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG51bmlmb3JtIHZlYzIgdV9leHRydWRlX3NjYWxlO1xcbnVuaWZvcm0gZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO1xcblxcbnZhcnlpbmcgZmxvYXQgdl9wbGFjZWQ7XFxudmFyeWluZyBmbG9hdCB2X25vdFVzZWQ7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICB2ZWM0IHByb2plY3RlZFBvaW50ID0gdV9tYXRyaXggKiB2ZWM0KGFfYW5jaG9yX3BvcywgMCwgMSk7XFxuICAgIGhpZ2hwIGZsb2F0IGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2UgPSBwcm9qZWN0ZWRQb2ludC53O1xcbiAgICBoaWdocCBmbG9hdCBjb2xsaXNpb25fcGVyc3BlY3RpdmVfcmF0aW8gPSBjbGFtcChcXG4gICAgICAgIDAuNSArIDAuNSAqICh1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UgLyBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlKSxcXG4gICAgICAgIDAuMCwgLy8gUHJldmVudHMgb3ZlcnNpemVkIG5lYXItZmllbGQgYm94ZXMgaW4gcGl0Y2hlZC9vdmVyem9vbWVkIHRpbGVzXFxuICAgICAgICA0LjApO1xcblxcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMC4wLCAxLjApO1xcbiAgICBnbF9Qb3NpdGlvbi54eSArPSBhX2V4dHJ1ZGUgKiB1X2V4dHJ1ZGVfc2NhbGUgKiBnbF9Qb3NpdGlvbi53ICogY29sbGlzaW9uX3BlcnNwZWN0aXZlX3JhdGlvO1xcblxcbiAgICB2X3BsYWNlZCA9IGFfcGxhY2VkLng7XFxuICAgIHZfbm90VXNlZCA9IGFfcGxhY2VkLnk7XFxufVxcblwifSxjb2xsaXNpb25DaXJjbGU6e2ZyYWdtZW50U291cmNlOlwidW5pZm9ybSBmbG9hdCB1X292ZXJzY2FsZV9mYWN0b3I7XFxuXFxudmFyeWluZyBmbG9hdCB2X3BsYWNlZDtcXG52YXJ5aW5nIGZsb2F0IHZfbm90VXNlZDtcXG52YXJ5aW5nIGZsb2F0IHZfcmFkaXVzO1xcbnZhcnlpbmcgdmVjMiB2X2V4dHJ1ZGU7XFxudmFyeWluZyB2ZWMyIHZfZXh0cnVkZV9zY2FsZTtcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIGZsb2F0IGFscGhhID0gMC41O1xcblxcbiAgICAvLyBSZWQgPSBjb2xsaXNpb24sIGhpZGUgbGFiZWxcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMS4wLCAwLjAsIDAuMCwgMS4wKSAqIGFscGhhO1xcblxcbiAgICAvLyBCbHVlID0gbm8gY29sbGlzaW9uLCBsYWJlbCBpcyBzaG93aW5nXFxuICAgIGlmICh2X3BsYWNlZCA+IDAuNSkge1xcbiAgICAgICAgY29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAxLjAsIDAuNSkgKiBhbHBoYTtcXG4gICAgfVxcblxcbiAgICBpZiAodl9ub3RVc2VkID4gMC41KSB7XFxuICAgICAgICAvLyBUaGlzIGJveCBub3QgdXNlZCwgZmFkZSBpdCBvdXRcXG4gICAgICAgIGNvbG9yICo9IC4yO1xcbiAgICB9XFxuXFxuICAgIGZsb2F0IGV4dHJ1ZGVfc2NhbGVfbGVuZ3RoID0gbGVuZ3RoKHZfZXh0cnVkZV9zY2FsZSk7XFxuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoID0gbGVuZ3RoKHZfZXh0cnVkZSkgKiBleHRydWRlX3NjYWxlX2xlbmd0aDtcXG4gICAgZmxvYXQgc3Ryb2tlX3dpZHRoID0gMTUuMCAqIGV4dHJ1ZGVfc2NhbGVfbGVuZ3RoIC8gdV9vdmVyc2NhbGVfZmFjdG9yO1xcbiAgICBmbG9hdCByYWRpdXMgPSB2X3JhZGl1cyAqIGV4dHJ1ZGVfc2NhbGVfbGVuZ3RoO1xcblxcbiAgICBmbG9hdCBkaXN0YW5jZV90b19lZGdlID0gYWJzKGV4dHJ1ZGVfbGVuZ3RoIC0gcmFkaXVzKTtcXG4gICAgZmxvYXQgb3BhY2l0eV90ID0gc21vb3Roc3RlcCgtc3Ryb2tlX3dpZHRoLCAwLjAsIC1kaXN0YW5jZV90b19lZGdlKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gb3BhY2l0eV90ICogY29sb3I7XFxufVxcblwiLHZlcnRleFNvdXJjZTpcImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xcbmF0dHJpYnV0ZSB2ZWMyIGFfYW5jaG9yX3BvcztcXG5hdHRyaWJ1dGUgdmVjMiBhX2V4dHJ1ZGU7XFxuYXR0cmlidXRlIHZlYzIgYV9wbGFjZWQ7XFxuXFxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcbnVuaWZvcm0gdmVjMiB1X2V4dHJ1ZGVfc2NhbGU7XFxudW5pZm9ybSBmbG9hdCB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U7XFxuXFxudmFyeWluZyBmbG9hdCB2X3BsYWNlZDtcXG52YXJ5aW5nIGZsb2F0IHZfbm90VXNlZDtcXG52YXJ5aW5nIGZsb2F0IHZfcmFkaXVzO1xcblxcbnZhcnlpbmcgdmVjMiB2X2V4dHJ1ZGU7XFxudmFyeWluZyB2ZWMyIHZfZXh0cnVkZV9zY2FsZTtcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIHZlYzQgcHJvamVjdGVkUG9pbnQgPSB1X21hdHJpeCAqIHZlYzQoYV9hbmNob3JfcG9zLCAwLCAxKTtcXG4gICAgaGlnaHAgZmxvYXQgY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZSA9IHByb2plY3RlZFBvaW50Lnc7XFxuICAgIGhpZ2hwIGZsb2F0IGNvbGxpc2lvbl9wZXJzcGVjdGl2ZV9yYXRpbyA9IGNsYW1wKFxcbiAgICAgICAgMC41ICsgMC41ICogKHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSAvIGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2UpLFxcbiAgICAgICAgMC4wLCAvLyBQcmV2ZW50cyBvdmVyc2l6ZWQgbmVhci1maWVsZCBjaXJjbGVzIGluIHBpdGNoZWQvb3Zlcnpvb21lZCB0aWxlc1xcbiAgICAgICAgNC4wKTtcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAuMCwgMS4wKTtcXG5cXG4gICAgaGlnaHAgZmxvYXQgcGFkZGluZ19mYWN0b3IgPSAxLjI7IC8vIFBhZCB0aGUgdmVydGljZXMgc2xpZ2h0bHkgdG8gbWFrZSByb29tIGZvciBhbnRpLWFsaWFzIGJsdXJcXG4gICAgZ2xfUG9zaXRpb24ueHkgKz0gYV9leHRydWRlICogdV9leHRydWRlX3NjYWxlICogcGFkZGluZ19mYWN0b3IgKiBnbF9Qb3NpdGlvbi53ICogY29sbGlzaW9uX3BlcnNwZWN0aXZlX3JhdGlvO1xcblxcbiAgICB2X3BsYWNlZCA9IGFfcGxhY2VkLng7XFxuICAgIHZfbm90VXNlZCA9IGFfcGxhY2VkLnk7XFxuICAgIHZfcmFkaXVzID0gYWJzKGFfZXh0cnVkZS55KTsgLy8gV2UgZG9uJ3QgcGl0Y2ggdGhlIGNpcmNsZXMsIHNvIGJvdGggdW5pdHMgb2YgdGhlIGV4dHJ1c2lvbiB2ZWN0b3IgYXJlIGVxdWFsIGluIG1hZ25pdHVkZSB0byB0aGUgcmFkaXVzXFxuXFxuICAgIHZfZXh0cnVkZSA9IGFfZXh0cnVkZSAqIHBhZGRpbmdfZmFjdG9yO1xcbiAgICB2X2V4dHJ1ZGVfc2NhbGUgPSB1X2V4dHJ1ZGVfc2NhbGUgKiB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UgKiBjb2xsaXNpb25fcGVyc3BlY3RpdmVfcmF0aW87XFxufVxcblwifSxkZWJ1Zzp7ZnJhZ21lbnRTb3VyY2U6XCJ1bmlmb3JtIGhpZ2hwIHZlYzQgdV9jb2xvcjtcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIGdsX0ZyYWdDb2xvciA9IHVfY29sb3I7XFxufVxcblwiLHZlcnRleFNvdXJjZTpcImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xcblxcbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcXG59XFxuXCJ9LGZpbGw6e2ZyYWdtZW50U291cmNlOlwiI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yICogb3BhY2l0eTtcXG5cXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcXG4jZW5kaWZcXG59XFxuXCIsdmVydGV4U291cmNlOlwiYXR0cmlidXRlIHZlYzIgYV9wb3M7XFxuXFxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcblxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XFxufVxcblwifSxmaWxsT3V0bGluZTp7ZnJhZ21lbnRTb3VyY2U6XCIjcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgb3V0bGluZV9jb2xvclxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxudmFyeWluZyB2ZWMyIHZfcG9zO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBvdXRsaW5lX2NvbG9yXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbiAgICBmbG9hdCBkaXN0ID0gbGVuZ3RoKHZfcG9zIC0gZ2xfRnJhZ0Nvb3JkLnh5KTtcXG4gICAgZmxvYXQgYWxwaGEgPSAxLjAgLSBzbW9vdGhzdGVwKDAuMCwgMS4wLCBkaXN0KTtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gb3V0bGluZV9jb2xvciAqIChhbHBoYSAqIG9wYWNpdHkpO1xcblxcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xcbiNlbmRpZlxcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCJhdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG5cXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHVfd29ybGQ7XFxuXFxudmFyeWluZyB2ZWMyIHZfcG9zO1xcblxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBvdXRsaW5lX2NvbG9yXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgb3V0bGluZV9jb2xvclxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xcbiAgICB2X3BvcyA9IChnbF9Qb3NpdGlvbi54eSAvIGdsX1Bvc2l0aW9uLncgKyAxLjApIC8gMi4wICogdV93b3JsZDtcXG59XFxuXCJ9LGZpbGxPdXRsaW5lUGF0dGVybjp7ZnJhZ21lbnRTb3VyY2U6XCJ1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2E7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9icl9hO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYjtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2I7XFxudW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTtcXG51bmlmb3JtIGZsb2F0IHVfbWl4O1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XFxuXFxudmFyeWluZyB2ZWMyIHZfcG9zX2E7XFxudmFyeWluZyB2ZWMyIHZfcG9zX2I7XFxudmFyeWluZyB2ZWMyIHZfcG9zO1xcblxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG4gICAgdmVjMiBpbWFnZWNvb3JkID0gbW9kKHZfcG9zX2EsIDEuMCk7XFxuICAgIHZlYzIgcG9zID0gbWl4KHVfcGF0dGVybl90bF9hIC8gdV90ZXhzaXplLCB1X3BhdHRlcm5fYnJfYSAvIHVfdGV4c2l6ZSwgaW1hZ2Vjb29yZCk7XFxuICAgIHZlYzQgY29sb3IxID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHBvcyk7XFxuXFxuICAgIHZlYzIgaW1hZ2Vjb29yZF9iID0gbW9kKHZfcG9zX2IsIDEuMCk7XFxuICAgIHZlYzIgcG9zMiA9IG1peCh1X3BhdHRlcm5fdGxfYiAvIHVfdGV4c2l6ZSwgdV9wYXR0ZXJuX2JyX2IgLyB1X3RleHNpemUsIGltYWdlY29vcmRfYik7XFxuICAgIHZlYzQgY29sb3IyID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHBvczIpO1xcblxcbiAgICAvLyBmaW5kIGRpc3RhbmNlIHRvIG91dGxpbmUgZm9yIGFscGhhIGludGVycG9sYXRpb25cXG5cXG4gICAgZmxvYXQgZGlzdCA9IGxlbmd0aCh2X3BvcyAtIGdsX0ZyYWdDb29yZC54eSk7XFxuICAgIGZsb2F0IGFscGhhID0gMS4wIC0gc21vb3Roc3RlcCgwLjAsIDEuMCwgZGlzdCk7XFxuXFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IG1peChjb2xvcjEsIGNvbG9yMiwgdV9taXgpICogYWxwaGEgKiBvcGFjaXR5O1xcblxcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xcbiNlbmRpZlxcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHVfd29ybGQ7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2E7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2I7XFxudW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfdXBwZXI7XFxudW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfbG93ZXI7XFxudW5pZm9ybSBmbG9hdCB1X3NjYWxlX2E7XFxudW5pZm9ybSBmbG9hdCB1X3NjYWxlX2I7XFxudW5pZm9ybSBmbG9hdCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzO1xcblxcbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xcblxcbnZhcnlpbmcgdmVjMiB2X3Bvc19hO1xcbnZhcnlpbmcgdmVjMiB2X3Bvc19iO1xcbnZhcnlpbmcgdmVjMiB2X3BvcztcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcXG5cXG4gICAgdl9wb3NfYSA9IGdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLCB1X3BpeGVsX2Nvb3JkX2xvd2VyLCB1X3NjYWxlX2EgKiB1X3BhdHRlcm5fc2l6ZV9hLCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLCBhX3Bvcyk7XFxuICAgIHZfcG9zX2IgPSBnZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlciwgdV9waXhlbF9jb29yZF9sb3dlciwgdV9zY2FsZV9iICogdV9wYXR0ZXJuX3NpemVfYiwgdV90aWxlX3VuaXRzX3RvX3BpeGVscywgYV9wb3MpO1xcblxcbiAgICB2X3BvcyA9IChnbF9Qb3NpdGlvbi54eSAvIGdsX1Bvc2l0aW9uLncgKyAxLjApIC8gMi4wICogdV93b3JsZDtcXG59XFxuXCJ9LGZpbGxQYXR0ZXJuOntmcmFnbWVudFNvdXJjZTpcInVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYTtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2E7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl90bF9iO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYjtcXG51bmlmb3JtIHZlYzIgdV90ZXhzaXplO1xcbnVuaWZvcm0gZmxvYXQgdV9taXg7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcXG5cXG52YXJ5aW5nIHZlYzIgdl9wb3NfYTtcXG52YXJ5aW5nIHZlYzIgdl9wb3NfYjtcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxuICAgIHZlYzIgaW1hZ2Vjb29yZCA9IG1vZCh2X3Bvc19hLCAxLjApO1xcbiAgICB2ZWMyIHBvcyA9IG1peCh1X3BhdHRlcm5fdGxfYSAvIHVfdGV4c2l6ZSwgdV9wYXR0ZXJuX2JyX2EgLyB1X3RleHNpemUsIGltYWdlY29vcmQpO1xcbiAgICB2ZWM0IGNvbG9yMSA9IHRleHR1cmUyRCh1X2ltYWdlLCBwb3MpO1xcblxcbiAgICB2ZWMyIGltYWdlY29vcmRfYiA9IG1vZCh2X3Bvc19iLCAxLjApO1xcbiAgICB2ZWMyIHBvczIgPSBtaXgodV9wYXR0ZXJuX3RsX2IgLyB1X3RleHNpemUsIHVfcGF0dGVybl9icl9iIC8gdV90ZXhzaXplLCBpbWFnZWNvb3JkX2IpO1xcbiAgICB2ZWM0IGNvbG9yMiA9IHRleHR1cmUyRCh1X2ltYWdlLCBwb3MyKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gbWl4KGNvbG9yMSwgY29sb3IyLCB1X21peCkgKiBvcGFjaXR5O1xcblxcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xcbiNlbmRpZlxcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2E7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2I7XFxudW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfdXBwZXI7XFxudW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfbG93ZXI7XFxudW5pZm9ybSBmbG9hdCB1X3NjYWxlX2E7XFxudW5pZm9ybSBmbG9hdCB1X3NjYWxlX2I7XFxudW5pZm9ybSBmbG9hdCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzO1xcblxcbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xcblxcbnZhcnlpbmcgdmVjMiB2X3Bvc19hO1xcbnZhcnlpbmcgdmVjMiB2X3Bvc19iO1xcblxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xcblxcbiAgICB2X3Bvc19hID0gZ2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsIHVfcGl4ZWxfY29vcmRfbG93ZXIsIHVfc2NhbGVfYSAqIHVfcGF0dGVybl9zaXplX2EsIHVfdGlsZV91bml0c190b19waXhlbHMsIGFfcG9zKTtcXG4gICAgdl9wb3NfYiA9IGdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLCB1X3BpeGVsX2Nvb3JkX2xvd2VyLCB1X3NjYWxlX2IgKiB1X3BhdHRlcm5fc2l6ZV9iLCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLCBhX3Bvcyk7XFxufVxcblwifSxmaWxsRXh0cnVzaW9uOntmcmFnbWVudFNvdXJjZTpcInZhcnlpbmcgdmVjNCB2X2NvbG9yO1xcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBiYXNlXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhlaWdodFxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBiYXNlXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGVpZ2h0XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdl9jb2xvcjtcXG5cXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcXG4jZW5kaWZcXG59XFxuXCIsdmVydGV4U291cmNlOlwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcbnVuaWZvcm0gdmVjMyB1X2xpZ2h0Y29sb3I7XFxudW5pZm9ybSBsb3dwIHZlYzMgdV9saWdodHBvcztcXG51bmlmb3JtIGxvd3AgZmxvYXQgdV9saWdodGludGVuc2l0eTtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG5hdHRyaWJ1dGUgdmVjNCBhX25vcm1hbF9lZDtcXG5cXG52YXJ5aW5nIHZlYzQgdl9jb2xvcjtcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmFzZVxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoZWlnaHRcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmFzZVxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhlaWdodFxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXFxuXFxuICAgIHZlYzMgbm9ybWFsID0gYV9ub3JtYWxfZWQueHl6O1xcblxcbiAgICBiYXNlID0gbWF4KDAuMCwgYmFzZSk7XFxuICAgIGhlaWdodCA9IG1heCgwLjAsIGhlaWdodCk7XFxuXFxuICAgIGZsb2F0IHQgPSBtb2Qobm9ybWFsLngsIDIuMCk7XFxuXFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCB0ID4gMC4wID8gaGVpZ2h0IDogYmFzZSwgMSk7XFxuXFxuICAgIC8vIFJlbGF0aXZlIGx1bWluYW5jZSAoaG93IGRhcmsvYnJpZ2h0IGlzIHRoZSBzdXJmYWNlIGNvbG9yPylcXG4gICAgZmxvYXQgY29sb3J2YWx1ZSA9IGNvbG9yLnIgKiAwLjIxMjYgKyBjb2xvci5nICogMC43MTUyICsgY29sb3IuYiAqIDAuMDcyMjtcXG5cXG4gICAgdl9jb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG5cXG4gICAgLy8gQWRkIHNsaWdodCBhbWJpZW50IGxpZ2h0aW5nIHNvIG5vIGV4dHJ1c2lvbnMgYXJlIHRvdGFsbHkgYmxhY2tcXG4gICAgdmVjNCBhbWJpZW50bGlnaHQgPSB2ZWM0KDAuMDMsIDAuMDMsIDAuMDMsIDEuMCk7XFxuICAgIGNvbG9yICs9IGFtYmllbnRsaWdodDtcXG5cXG4gICAgLy8gQ2FsY3VsYXRlIGNvcyh0aGV0YSksIHdoZXJlIHRoZXRhIGlzIHRoZSBhbmdsZSBiZXR3ZWVuIHN1cmZhY2Ugbm9ybWFsIGFuZCBkaWZmdXNlIGxpZ2h0IHJheVxcbiAgICBmbG9hdCBkaXJlY3Rpb25hbCA9IGNsYW1wKGRvdChub3JtYWwgLyAxNjM4NC4wLCB1X2xpZ2h0cG9zKSwgMC4wLCAxLjApO1xcblxcbiAgICAvLyBBZGp1c3QgZGlyZWN0aW9uYWwgc28gdGhhdFxcbiAgICAvLyB0aGUgcmFuZ2Ugb2YgdmFsdWVzIGZvciBoaWdobGlnaHQvc2hhZGluZyBpcyBuYXJyb3dlclxcbiAgICAvLyB3aXRoIGxvd2VyIGxpZ2h0IGludGVuc2l0eVxcbiAgICAvLyBhbmQgd2l0aCBsaWdodGVyL2JyaWdodGVyIHN1cmZhY2UgY29sb3JzXFxuICAgIGRpcmVjdGlvbmFsID0gbWl4KCgxLjAgLSB1X2xpZ2h0aW50ZW5zaXR5KSwgbWF4KCgxLjAgLSBjb2xvcnZhbHVlICsgdV9saWdodGludGVuc2l0eSksIDEuMCksIGRpcmVjdGlvbmFsKTtcXG5cXG4gICAgLy8gQWRkIGdyYWRpZW50IGFsb25nIHogYXhpcyBvZiBzaWRlIHN1cmZhY2VzXFxuICAgIGlmIChub3JtYWwueSAhPSAwLjApIHtcXG4gICAgICAgIGRpcmVjdGlvbmFsICo9IGNsYW1wKCh0ICsgYmFzZSkgKiBwb3coaGVpZ2h0IC8gMTUwLjAsIDAuNSksIG1peCgwLjcsIDAuOTgsIDEuMCAtIHVfbGlnaHRpbnRlbnNpdHkpLCAxLjApO1xcbiAgICB9XFxuXFxuICAgIC8vIEFzc2lnbiBmaW5hbCBjb2xvciBiYXNlZCBvbiBzdXJmYWNlICsgYW1iaWVudCBsaWdodCBjb2xvciwgZGlmZnVzZSBsaWdodCBkaXJlY3Rpb25hbCwgYW5kIGxpZ2h0IGNvbG9yXFxuICAgIC8vIHdpdGggbG93ZXIgYm91bmRzIGFkanVzdGVkIHRvIGh1ZSBvZiBsaWdodFxcbiAgICAvLyBzbyB0aGF0IHNoYWRpbmcgaXMgdGludGVkIHdpdGggdGhlIGNvbXBsZW1lbnRhcnkgKG9wcG9zaXRlKSBjb2xvciB0byB0aGUgbGlnaHQgY29sb3JcXG4gICAgdl9jb2xvci5yICs9IGNsYW1wKGNvbG9yLnIgKiBkaXJlY3Rpb25hbCAqIHVfbGlnaHRjb2xvci5yLCBtaXgoMC4wLCAwLjMsIDEuMCAtIHVfbGlnaHRjb2xvci5yKSwgMS4wKTtcXG4gICAgdl9jb2xvci5nICs9IGNsYW1wKGNvbG9yLmcgKiBkaXJlY3Rpb25hbCAqIHVfbGlnaHRjb2xvci5nLCBtaXgoMC4wLCAwLjMsIDEuMCAtIHVfbGlnaHRjb2xvci5nKSwgMS4wKTtcXG4gICAgdl9jb2xvci5iICs9IGNsYW1wKGNvbG9yLmIgKiBkaXJlY3Rpb25hbCAqIHVfbGlnaHRjb2xvci5iLCBtaXgoMC4wLCAwLjMsIDEuMCAtIHVfbGlnaHRjb2xvci5iKSwgMS4wKTtcXG59XFxuXCJ9LGZpbGxFeHRydXNpb25QYXR0ZXJuOntmcmFnbWVudFNvdXJjZTpcInVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYTtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2E7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl90bF9iO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYjtcXG51bmlmb3JtIHZlYzIgdV90ZXhzaXplO1xcbnVuaWZvcm0gZmxvYXQgdV9taXg7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcXG5cXG52YXJ5aW5nIHZlYzIgdl9wb3NfYTtcXG52YXJ5aW5nIHZlYzIgdl9wb3NfYjtcXG52YXJ5aW5nIHZlYzQgdl9saWdodGluZztcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmFzZVxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoZWlnaHRcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmFzZVxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhlaWdodFxcblxcbiAgICB2ZWMyIGltYWdlY29vcmQgPSBtb2Qodl9wb3NfYSwgMS4wKTtcXG4gICAgdmVjMiBwb3MgPSBtaXgodV9wYXR0ZXJuX3RsX2EgLyB1X3RleHNpemUsIHVfcGF0dGVybl9icl9hIC8gdV90ZXhzaXplLCBpbWFnZWNvb3JkKTtcXG4gICAgdmVjNCBjb2xvcjEgPSB0ZXh0dXJlMkQodV9pbWFnZSwgcG9zKTtcXG5cXG4gICAgdmVjMiBpbWFnZWNvb3JkX2IgPSBtb2Qodl9wb3NfYiwgMS4wKTtcXG4gICAgdmVjMiBwb3MyID0gbWl4KHVfcGF0dGVybl90bF9iIC8gdV90ZXhzaXplLCB1X3BhdHRlcm5fYnJfYiAvIHVfdGV4c2l6ZSwgaW1hZ2Vjb29yZF9iKTtcXG4gICAgdmVjNCBjb2xvcjIgPSB0ZXh0dXJlMkQodV9pbWFnZSwgcG9zMik7XFxuXFxuICAgIHZlYzQgbWl4ZWRDb2xvciA9IG1peChjb2xvcjEsIGNvbG9yMiwgdV9taXgpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBtaXhlZENvbG9yICogdl9saWdodGluZztcXG5cXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcXG4jZW5kaWZcXG59XFxuXCIsdmVydGV4U291cmNlOlwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9hO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9iO1xcbnVuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX3VwcGVyO1xcbnVuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX2xvd2VyO1xcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZV9hO1xcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZV9iO1xcbnVuaWZvcm0gZmxvYXQgdV90aWxlX3VuaXRzX3RvX3BpeGVscztcXG51bmlmb3JtIGZsb2F0IHVfaGVpZ2h0X2ZhY3RvcjtcXG5cXG51bmlmb3JtIHZlYzMgdV9saWdodGNvbG9yO1xcbnVuaWZvcm0gbG93cCB2ZWMzIHVfbGlnaHRwb3M7XFxudW5pZm9ybSBsb3dwIGZsb2F0IHVfbGlnaHRpbnRlbnNpdHk7XFxuXFxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XFxuYXR0cmlidXRlIHZlYzQgYV9ub3JtYWxfZWQ7XFxuXFxudmFyeWluZyB2ZWMyIHZfcG9zX2E7XFxudmFyeWluZyB2ZWMyIHZfcG9zX2I7XFxudmFyeWluZyB2ZWM0IHZfbGlnaHRpbmc7XFxudmFyeWluZyBmbG9hdCB2X2RpcmVjdGlvbmFsO1xcblxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBiYXNlXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhlaWdodFxcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBiYXNlXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGVpZ2h0XFxuXFxuICAgIHZlYzMgbm9ybWFsID0gYV9ub3JtYWxfZWQueHl6O1xcbiAgICBmbG9hdCBlZGdlZGlzdGFuY2UgPSBhX25vcm1hbF9lZC53O1xcblxcbiAgICBiYXNlID0gbWF4KDAuMCwgYmFzZSk7XFxuICAgIGhlaWdodCA9IG1heCgwLjAsIGhlaWdodCk7XFxuXFxuICAgIGZsb2F0IHQgPSBtb2Qobm9ybWFsLngsIDIuMCk7XFxuICAgIGZsb2F0IHogPSB0ID4gMC4wID8gaGVpZ2h0IDogYmFzZTtcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIHosIDEpO1xcblxcbiAgICB2ZWMyIHBvcyA9IG5vcm1hbC54ID09IDEuMCAmJiBub3JtYWwueSA9PSAwLjAgJiYgbm9ybWFsLnogPT0gMTYzODQuMFxcbiAgICAgICAgPyBhX3BvcyAvLyBleHRydXNpb24gdG9wXFxuICAgICAgICA6IHZlYzIoZWRnZWRpc3RhbmNlLCB6ICogdV9oZWlnaHRfZmFjdG9yKTsgLy8gZXh0cnVzaW9uIHNpZGVcXG5cXG4gICAgdl9wb3NfYSA9IGdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLCB1X3BpeGVsX2Nvb3JkX2xvd2VyLCB1X3NjYWxlX2EgKiB1X3BhdHRlcm5fc2l6ZV9hLCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLCBwb3MpO1xcbiAgICB2X3Bvc19iID0gZ2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsIHVfcGl4ZWxfY29vcmRfbG93ZXIsIHVfc2NhbGVfYiAqIHVfcGF0dGVybl9zaXplX2IsIHVfdGlsZV91bml0c190b19waXhlbHMsIHBvcyk7XFxuXFxuICAgIHZfbGlnaHRpbmcgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgIGZsb2F0IGRpcmVjdGlvbmFsID0gY2xhbXAoZG90KG5vcm1hbCAvIDE2MzgzLjAsIHVfbGlnaHRwb3MpLCAwLjAsIDEuMCk7XFxuICAgIGRpcmVjdGlvbmFsID0gbWl4KCgxLjAgLSB1X2xpZ2h0aW50ZW5zaXR5KSwgbWF4KCgwLjUgKyB1X2xpZ2h0aW50ZW5zaXR5KSwgMS4wKSwgZGlyZWN0aW9uYWwpO1xcblxcbiAgICBpZiAobm9ybWFsLnkgIT0gMC4wKSB7XFxuICAgICAgICBkaXJlY3Rpb25hbCAqPSBjbGFtcCgodCArIGJhc2UpICogcG93KGhlaWdodCAvIDE1MC4wLCAwLjUpLCBtaXgoMC43LCAwLjk4LCAxLjAgLSB1X2xpZ2h0aW50ZW5zaXR5KSwgMS4wKTtcXG4gICAgfVxcblxcbiAgICB2X2xpZ2h0aW5nLnJnYiArPSBjbGFtcChkaXJlY3Rpb25hbCAqIHVfbGlnaHRjb2xvciwgbWl4KHZlYzMoMC4wKSwgdmVjMygwLjMpLCAxLjAgLSB1X2xpZ2h0Y29sb3IpLCB2ZWMzKDEuMCkpO1xcbn1cXG5cIn0sZXh0cnVzaW9uVGV4dHVyZTp7ZnJhZ21lbnRTb3VyY2U6XCJ1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO1xcbnVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5O1xcbnZhcnlpbmcgdmVjMiB2X3BvcztcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1X2ltYWdlLCB2X3BvcykgKiB1X29wYWNpdHk7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcInVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG51bmlmb3JtIHZlYzIgdV93b3JsZDtcXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG52YXJ5aW5nIHZlYzIgdl9wb3M7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcyAqIHVfd29ybGQsIDAsIDEpO1xcblxcbiAgICB2X3Bvcy54ID0gYV9wb3MueDtcXG4gICAgdl9wb3MueSA9IDEuMCAtIGFfcG9zLnk7XFxufVxcblwifSxoaWxsc2hhZGVQcmVwYXJlOntmcmFnbWVudFNvdXJjZTpcIiNpZmRlZiBHTF9FU1xcbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZW5kaWZcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO1xcbnZhcnlpbmcgdmVjMiB2X3BvcztcXG51bmlmb3JtIHZlYzIgdV9kaW1lbnNpb247XFxudW5pZm9ybSBmbG9hdCB1X3pvb207XFxudW5pZm9ybSBmbG9hdCB1X21heHpvb207XFxuXFxuZmxvYXQgZ2V0RWxldmF0aW9uKHZlYzIgY29vcmQsIGZsb2F0IGJpYXMpIHtcXG4gICAgLy8gQ29udmVydCBlbmNvZGVkIGVsZXZhdGlvbiB2YWx1ZSB0byBtZXRlcnNcXG4gICAgdmVjNCBkYXRhID0gdGV4dHVyZTJEKHVfaW1hZ2UsIGNvb3JkKSAqIDI1NS4wO1xcbiAgICByZXR1cm4gKGRhdGEuciArIGRhdGEuZyAqIDI1Ni4wICsgZGF0YS5iICogMjU2LjAgKiAyNTYuMCkgLyA0LjA7XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgdmVjMiBlcHNpbG9uID0gMS4wIC8gdV9kaW1lbnNpb247XFxuXFxuICAgIC8vIHF1ZXJpZWQgcGl4ZWxzOlxcbiAgICAvLyArLS0tLS0tLS0tLS0rXFxuICAgIC8vIHwgICB8ICAgfCAgIHxcXG4gICAgLy8gfCBhIHwgYiB8IGMgfFxcbiAgICAvLyB8ICAgfCAgIHwgICB8XFxuICAgIC8vICstLS0tLS0tLS0tLStcXG4gICAgLy8gfCAgIHwgICB8ICAgfFxcbiAgICAvLyB8IGQgfCBlIHwgZiB8XFxuICAgIC8vIHwgICB8ICAgfCAgIHxcXG4gICAgLy8gKy0tLS0tLS0tLS0tK1xcbiAgICAvLyB8ICAgfCAgIHwgICB8XFxuICAgIC8vIHwgZyB8IGggfCBpIHxcXG4gICAgLy8gfCAgIHwgICB8ICAgfFxcbiAgICAvLyArLS0tLS0tLS0tLS0rXFxuXFxuICAgIGZsb2F0IGEgPSBnZXRFbGV2YXRpb24odl9wb3MgKyB2ZWMyKC1lcHNpbG9uLngsIC1lcHNpbG9uLnkpLCAwLjApO1xcbiAgICBmbG9hdCBiID0gZ2V0RWxldmF0aW9uKHZfcG9zICsgdmVjMigwLCAtZXBzaWxvbi55KSwgMC4wKTtcXG4gICAgZmxvYXQgYyA9IGdldEVsZXZhdGlvbih2X3BvcyArIHZlYzIoZXBzaWxvbi54LCAtZXBzaWxvbi55KSwgMC4wKTtcXG4gICAgZmxvYXQgZCA9IGdldEVsZXZhdGlvbih2X3BvcyArIHZlYzIoLWVwc2lsb24ueCwgMCksIDAuMCk7XFxuICAgIGZsb2F0IGUgPSBnZXRFbGV2YXRpb24odl9wb3MsIDAuMCk7XFxuICAgIGZsb2F0IGYgPSBnZXRFbGV2YXRpb24odl9wb3MgKyB2ZWMyKGVwc2lsb24ueCwgMCksIDAuMCk7XFxuICAgIGZsb2F0IGcgPSBnZXRFbGV2YXRpb24odl9wb3MgKyB2ZWMyKC1lcHNpbG9uLngsIGVwc2lsb24ueSksIDAuMCk7XFxuICAgIGZsb2F0IGggPSBnZXRFbGV2YXRpb24odl9wb3MgKyB2ZWMyKDAsIGVwc2lsb24ueSksIDAuMCk7XFxuICAgIGZsb2F0IGkgPSBnZXRFbGV2YXRpb24odl9wb3MgKyB2ZWMyKGVwc2lsb24ueCwgZXBzaWxvbi55KSwgMC4wKTtcXG5cXG4gICAgLy8gaGVyZSB3ZSBkaXZpZGUgdGhlIHggYW5kIHkgc2xvcGVzIGJ5IDggKiBwaXhlbCBzaXplXFxuICAgIC8vIHdoZXJlIHBpeGVsIHNpemUgKGFrYSBtZXRlcnMvcGl4ZWwpIGlzOlxcbiAgICAvLyBjaXJjdW1mZXJlbmNlIG9mIHRoZSB3b3JsZCAvIChwaXhlbHMgcGVyIHRpbGUgKiBudW1iZXIgb2YgdGlsZXMpXFxuICAgIC8vIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG86IDggKiA0MDA3NTAxNi42ODU1Nzg1IC8gKDUxMiAqIHBvdygyLCB1X3pvb20pKVxcbiAgICAvLyB3aGljaCBjYW4gYmUgcmVkdWNlZCB0bzogcG93KDIsIDE5LjI1NjE5OTc4NTI3IC0gdV96b29tKVxcbiAgICAvLyB3ZSB3YW50IHRvIHZlcnRpY2FsbHkgZXhhZ2dlcmF0ZSB0aGUgaGlsbHNoYWRpbmcgdGhvdWdoLCBiZWNhdXNlIG90aGVyd2lzZVxcbiAgICAvLyBpdCBpcyBiYXJlbHkgbm90aWNlYWJsZSBhdCBsb3cgem9vbXMuIHRvIGRvIHRoaXMsIHdlIG11bHRpcGx5IHRoaXMgYnkgc29tZVxcbiAgICAvLyBzY2FsZSBmYWN0b3IgcG93KDIsICh1X3pvb20gLSB1X21heHpvb20pICogYSkgd2hlcmUgYSBpcyBhbiBhcmJpdHJhcnkgdmFsdWVcXG4gICAgLy8gSGVyZSB3ZSB1c2UgYT0wLjMgd2hpY2ggd29ya3Mgb3V0IHRvIHRoZSBleHByZXNzaW9uIGJlbG93LiBzZWUgXFxuICAgIC8vIG5pY2tpZGx1Z2FzaCdzIGF3ZXNvbWUgYnJlYWtkb3duIGZvciBtb3JlIGluZm9cXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvcHVsbC81Mjg2I2Rpc2N1c3Npb25fcjE0ODQxOTU1NlxcbiAgICBmbG9hdCBleGFnZ2VyYXRpb24gPSB1X3pvb20gPCAyLjAgPyAwLjQgOiB1X3pvb20gPCA0LjUgPyAwLjM1IDogMC4zO1xcblxcbiAgICB2ZWMyIGRlcml2ID0gdmVjMihcXG4gICAgICAgIChjICsgZiArIGYgKyBpKSAtIChhICsgZCArIGQgKyBnKSxcXG4gICAgICAgIChnICsgaCArIGggKyBpKSAtIChhICsgYiArIGIgKyBjKVxcbiAgICApIC8gIHBvdygyLjAsICh1X3pvb20gLSB1X21heHpvb20pICogZXhhZ2dlcmF0aW9uICsgMTkuMjU2MiAtIHVfem9vbSk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNsYW1wKHZlYzQoXFxuICAgICAgICBkZXJpdi54IC8gMi4wICsgMC41LFxcbiAgICAgICAgZGVyaXYueSAvIDIuMCArIDAuNSxcXG4gICAgICAgIDEuMCxcXG4gICAgICAgIDEuMCksIDAuMCwgMS4wKTtcXG5cXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcXG4jZW5kaWZcXG59XFxuXCIsdmVydGV4U291cmNlOlwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcblxcbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xcbmF0dHJpYnV0ZSB2ZWMyIGFfdGV4dHVyZV9wb3M7XFxuXFxudmFyeWluZyB2ZWMyIHZfcG9zO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xcbiAgICB2X3BvcyA9IChhX3RleHR1cmVfcG9zIC8gODE5Mi4wKSAvIDIuMCArIDAuMjU7XFxufVxcblwifSxoaWxsc2hhZGU6e2ZyYWdtZW50U291cmNlOlwidW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcXG52YXJ5aW5nIHZlYzIgdl9wb3M7XFxuXFxudW5pZm9ybSB2ZWMyIHVfbGF0cmFuZ2U7XFxudW5pZm9ybSB2ZWMyIHVfbGlnaHQ7XFxudW5pZm9ybSB2ZWM0IHVfc2hhZG93O1xcbnVuaWZvcm0gdmVjNCB1X2hpZ2hsaWdodDtcXG51bmlmb3JtIHZlYzQgdV9hY2NlbnQ7XFxuXFxuI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5M1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgdmVjNCBwaXhlbCA9IHRleHR1cmUyRCh1X2ltYWdlLCB2X3Bvcyk7XFxuXFxuICAgIHZlYzIgZGVyaXYgPSAoKHBpeGVsLnJnICogMi4wKSAtIDEuMCk7XFxuXFxuICAgIC8vIFdlIGRpdmlkZSB0aGUgc2xvcGUgYnkgYSBzY2FsZSBmYWN0b3IgYmFzZWQgb24gdGhlIGNvc2luIG9mIHRoZSBwaXhlbCdzIGFwcHJveGltYXRlIGxhdGl0dWRlXFxuICAgIC8vIHRvIGFjY291bnQgZm9yIG1lcmNhdG9yIHByb2plY3Rpb24gZGlzdG9ydGlvbi4gc2VlICM0ODA3IGZvciBkZXRhaWxzXFxuICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gY29zKHJhZGlhbnMoKHVfbGF0cmFuZ2VbMF0gLSB1X2xhdHJhbmdlWzFdKSAqICgxLjAgLSB2X3Bvcy55KSArIHVfbGF0cmFuZ2VbMV0pKTtcXG4gICAgLy8gV2UgYWxzbyBtdWx0aXBseSB0aGUgc2xvcGUgYnkgYW4gYXJiaXRyYXJ5IHotZmFjdG9yIG9mIDEuMjVcXG4gICAgZmxvYXQgc2xvcGUgPSBhdGFuKDEuMjUgKiBsZW5ndGgoZGVyaXYpIC8gc2NhbGVGYWN0b3IpO1xcbiAgICBmbG9hdCBhc3BlY3QgPSBkZXJpdi54ICE9IDAuMCA/IGF0YW4oZGVyaXYueSwgLWRlcml2LngpIDogUEkgLyAyLjAgKiAoZGVyaXYueSA+IDAuMCA/IDEuMCA6IC0xLjApO1xcblxcbiAgICBmbG9hdCBpbnRlbnNpdHkgPSB1X2xpZ2h0Lng7XFxuICAgIC8vIFdlIGFkZCBQSSB0byBtYWtlIHRoaXMgcHJvcGVydHkgbWF0Y2ggdGhlIGdsb2JhbCBsaWdodCBvYmplY3QsIHdoaWNoIGFkZHMgUEkvMiB0byB0aGUgbGlnaHQncyBhemltdXRoYWxcXG4gICAgLy8gcG9zaXRpb24gcHJvcGVydHkgdG8gYWNjb3VudCBmb3IgMGRlZyBjb3JyZXNwb25kaW5nIHRvIG5vcnRoL3RoZSB0b3Agb2YgdGhlIHZpZXdwb3J0IGluIHRoZSBzdHlsZSBzcGVjXFxuICAgIC8vIGFuZCB0aGUgb3JpZ2luYWwgc2hhZGVyIHdhcyB3cml0dGVuIHRvIGFjY2VwdCAoLWlsbHVtaW5hdGlvbkRpcmVjdGlvbiAtIDkwKSBhcyB0aGUgYXppbXV0aGFsLlxcbiAgICBmbG9hdCBhemltdXRoID0gdV9saWdodC55ICsgUEk7XFxuXFxuICAgIC8vIFdlIHNjYWxlIHRoZSBzbG9wZSBleHBvbmVudGlhbGx5IGJhc2VkIG9uIGludGVuc2l0eSwgdXNpbmcgYSBjYWxjdWxhdGlvbiBzaW1pbGFyIHRvXFxuICAgIC8vIHRoZSBleHBvbmVudGlhbCBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uIGluIHRoZSBzdHlsZSBzcGVjOlxcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9ibG9iL21hc3Rlci9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2ludGVycG9sYXRlLmpzI0wyMTctTDIyOFxcbiAgICAvLyBzbyB0aGF0IGhpZ2hlciBpbnRlbnNpdHkgdmFsdWVzIGNyZWF0ZSBtb3JlIG9wYXF1ZSBoaWxsc2hhZGluZy5cXG4gICAgZmxvYXQgYmFzZSA9IDEuODc1IC0gaW50ZW5zaXR5ICogMS43NTtcXG4gICAgZmxvYXQgbWF4VmFsdWUgPSAwLjUgKiBQSTtcXG4gICAgZmxvYXQgc2NhbGVkU2xvcGUgPSBpbnRlbnNpdHkgIT0gMC41ID8gKChwb3coYmFzZSwgc2xvcGUpIC0gMS4wKSAvIChwb3coYmFzZSwgbWF4VmFsdWUpIC0gMS4wKSkgKiBtYXhWYWx1ZSA6IHNsb3BlO1xcblxcbiAgICAvLyBUaGUgYWNjZW50IGNvbG9yIGlzIGNhbGN1bGF0ZWQgd2l0aCB0aGUgY29zaW5lIG9mIHRoZSBzbG9wZSB3aGlsZSB0aGUgc2hhZGUgY29sb3IgaXMgY2FsY3VsYXRlZCB3aXRoIHRoZSBzaW5lXFxuICAgIC8vIHNvIHRoYXQgdGhlIGFjY2VudCBjb2xvcidzIHJhdGUgb2YgY2hhbmdlIGVhc2VzIGluIHdoaWxlIHRoZSBzaGFkZSBjb2xvcidzIGVhc2VzIG91dC5cXG4gICAgZmxvYXQgYWNjZW50ID0gY29zKHNjYWxlZFNsb3BlKTtcXG4gICAgLy8gV2UgbXVsdGlwbHkgYm90aCB0aGUgYWNjZW50IGFuZCBzaGFkZSBjb2xvciBieSBhIGNsYW1wZWQgaW50ZW5zaXR5IHZhbHVlXFxuICAgIC8vIHNvIHRoYXQgaW50ZW5zaXRpZXMgPj0gMC41IGRvIG5vdCBhZGRpdGlvbmFsbHkgYWZmZWN0IHRoZSBjb2xvciB2YWx1ZXNcXG4gICAgLy8gd2hpbGUgaW50ZW5zaXR5IHZhbHVlcyA8IDAuNSBtYWtlIHRoZSBvdmVyYWxsIGNvbG9yIG1vcmUgdHJhbnNwYXJlbnQuXFxuICAgIHZlYzQgYWNjZW50X2NvbG9yID0gKDEuMCAtIGFjY2VudCkgKiB1X2FjY2VudCAqIGNsYW1wKGludGVuc2l0eSAqIDIuMCwgMC4wLCAxLjApO1xcbiAgICBmbG9hdCBzaGFkZSA9IGFicyhtb2QoKGFzcGVjdCArIGF6aW11dGgpIC8gUEkgKyAwLjUsIDIuMCkgLSAxLjApO1xcbiAgICB2ZWM0IHNoYWRlX2NvbG9yID0gbWl4KHVfc2hhZG93LCB1X2hpZ2hsaWdodCwgc2hhZGUpICogc2luKHNjYWxlZFNsb3BlKSAqIGNsYW1wKGludGVuc2l0eSAqIDIuMCwgMC4wLCAxLjApO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBhY2NlbnRfY29sb3IgKiAoMS4wIC0gc2hhZGVfY29sb3IuYSkgKyBzaGFkZV9jb2xvcjtcXG5cXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcXG4jZW5kaWZcXG59XFxuXCIsdmVydGV4U291cmNlOlwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcblxcbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xcbmF0dHJpYnV0ZSB2ZWMyIGFfdGV4dHVyZV9wb3M7XFxuXFxudmFyeWluZyB2ZWMyIHZfcG9zO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xcbiAgICB2X3BvcyA9IGFfdGV4dHVyZV9wb3MgLyA4MTkyLjA7XFxufVxcblwifSxsaW5lOntmcmFnbWVudFNvdXJjZTpcIiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG52YXJ5aW5nIHZlYzIgdl93aWR0aDI7XFxudmFyeWluZyB2ZWMyIHZfbm9ybWFsO1xcbnZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbiAgICAvLyBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIG9mIHRoZSBwaXhlbCBmcm9tIHRoZSBsaW5lIGluIHBpeGVscy5cXG4gICAgZmxvYXQgZGlzdCA9IGxlbmd0aCh2X25vcm1hbCkgKiB2X3dpZHRoMi5zO1xcblxcbiAgICAvLyBDYWxjdWxhdGUgdGhlIGFudGlhbGlhc2luZyBmYWRlIGZhY3Rvci4gVGhpcyBpcyBlaXRoZXIgd2hlbiBmYWRpbmcgaW5cXG4gICAgLy8gdGhlIGxpbmUgaW4gY2FzZSBvZiBhbiBvZmZzZXQgbGluZSAodl93aWR0aDIudCkgb3Igd2hlbiBmYWRpbmcgb3V0XFxuICAgIC8vICh2X3dpZHRoMi5zKVxcbiAgICBmbG9hdCBibHVyMiA9IChibHVyICsgMS4wIC8gREVWSUNFX1BJWEVMX1JBVElPKSAqIHZfZ2FtbWFfc2NhbGU7XFxuICAgIGZsb2F0IGFscGhhID0gY2xhbXAobWluKGRpc3QgLSAodl93aWR0aDIudCAtIGJsdXIyKSwgdl93aWR0aDIucyAtIGRpc3QpIC8gYmx1cjIsIDAuMCwgMS4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgKiAoYWxwaGEgKiBvcGFjaXR5KTtcXG5cXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcXG4jZW5kaWZcXG59XFxuXCIsdmVydGV4U291cmNlOlwiXFxuXFxuLy8gdGhlIGRpc3RhbmNlIG92ZXIgd2hpY2ggdGhlIGxpbmUgZWRnZSBmYWRlcyBvdXQuXFxuLy8gUmV0aW5hIGRldmljZXMgbmVlZCBhIHNtYWxsZXIgZGlzdGFuY2UgdG8gYXZvaWQgYWxpYXNpbmcuXFxuI2RlZmluZSBBTlRJQUxJQVNJTkcgMS4wIC8gREVWSUNFX1BJWEVMX1JBVElPIC8gMi4wXFxuXFxuLy8gZmxvb3IoMTI3IC8gMikgPT0gNjMuMFxcbi8vIHRoZSBtYXhpbXVtIGFsbG93ZWQgbWl0ZXIgbGltaXQgaXMgMi4wIGF0IHRoZSBtb21lbnQuIHRoZSBleHRydWRlIG5vcm1hbCBpc1xcbi8vIHN0b3JlZCBpbiBhIGJ5dGUgKC0xMjguLjEyNykuIHdlIHNjYWxlIHJlZ3VsYXIgbm9ybWFscyB1cCB0byBsZW5ndGggNjMsIGJ1dFxcbi8vIHRoZXJlIGFyZSBhbHNvIFxcXCJzcGVjaWFsXFxcIiBub3JtYWxzIHRoYXQgaGF2ZSBhIGJpZ2dlciBsZW5ndGggKG9mIHVwIHRvIDEyNiBpblxcbi8vIHRoaXMgY2FzZSkuXFxuLy8gI2RlZmluZSBzY2FsZSA2My4wXFxuI2RlZmluZSBzY2FsZSAwLjAxNTg3MzAxNlxcblxcbmF0dHJpYnV0ZSB2ZWM0IGFfcG9zX25vcm1hbDtcXG5hdHRyaWJ1dGUgdmVjNCBhX2RhdGE7XFxuXFxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcbnVuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X3JhdGlvO1xcbnVuaWZvcm0gdmVjMiB1X2dsX3VuaXRzX3RvX3BpeGVscztcXG5cXG52YXJ5aW5nIHZlYzIgdl9ub3JtYWw7XFxudmFyeWluZyB2ZWMyIHZfd2lkdGgyO1xcbnZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcXG52YXJ5aW5nIGhpZ2hwIGZsb2F0IHZfbGluZXNvZmFyO1xcblxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb2Zmc2V0XFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHdpZHRoXFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9mZnNldFxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHdpZHRoXFxuXFxuICAgIHZlYzIgYV9leHRydWRlID0gYV9kYXRhLnh5IC0gMTI4LjA7XFxuICAgIGZsb2F0IGFfZGlyZWN0aW9uID0gbW9kKGFfZGF0YS56LCA0LjApIC0gMS4wO1xcblxcbiAgICB2X2xpbmVzb2ZhciA9IChmbG9vcihhX2RhdGEueiAvIDQuMCkgKyBhX2RhdGEudyAqIDY0LjApICogMi4wO1xcblxcbiAgICB2ZWMyIHBvcyA9IGFfcG9zX25vcm1hbC54eTtcXG5cXG4gICAgLy8geCBpcyAxIGlmIGl0J3MgYSByb3VuZCBjYXAsIDAgb3RoZXJ3aXNlXFxuICAgIC8vIHkgaXMgMSBpZiB0aGUgbm9ybWFsIHBvaW50cyB1cCwgYW5kIC0xIGlmIGl0IHBvaW50cyBkb3duXFxuICAgIG1lZGl1bXAgdmVjMiBub3JtYWwgPSBhX3Bvc19ub3JtYWwuenc7XFxuICAgIHZfbm9ybWFsID0gbm9ybWFsO1xcblxcbiAgICAvLyB0aGVzZSB0cmFuc2Zvcm1hdGlvbnMgdXNlZCB0byBiZSBhcHBsaWVkIGluIHRoZSBKUyBhbmQgbmF0aXZlIGNvZGUgYmFzZXMuXFxuICAgIC8vIG1vdmVkIHRoZW0gaW50byB0aGUgc2hhZGVyIGZvciBjbGFyaXR5IGFuZCBzaW1wbGljaXR5LlxcbiAgICBnYXB3aWR0aCA9IGdhcHdpZHRoIC8gMi4wO1xcbiAgICBmbG9hdCBoYWxmd2lkdGggPSB3aWR0aCAvIDIuMDtcXG4gICAgb2Zmc2V0ID0gLTEuMCAqIG9mZnNldDtcXG5cXG4gICAgZmxvYXQgaW5zZXQgPSBnYXB3aWR0aCArIChnYXB3aWR0aCA+IDAuMCA/IEFOVElBTElBU0lORyA6IDAuMCk7XFxuICAgIGZsb2F0IG91dHNldCA9IGdhcHdpZHRoICsgaGFsZndpZHRoICogKGdhcHdpZHRoID4gMC4wID8gMi4wIDogMS4wKSArIEFOVElBTElBU0lORztcXG5cXG4gICAgLy8gU2NhbGUgdGhlIGV4dHJ1c2lvbiB2ZWN0b3IgZG93biB0byBhIG5vcm1hbCBhbmQgdGhlbiB1cCBieSB0aGUgbGluZSB3aWR0aFxcbiAgICAvLyBvZiB0aGlzIHZlcnRleC5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpc3QgPSBvdXRzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZTtcXG5cXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBvZmZzZXQgd2hlbiBkcmF3aW5nIGEgbGluZSB0aGF0IGlzIHRvIHRoZSBzaWRlIG9mIHRoZSBhY3R1YWwgbGluZS5cXG4gICAgLy8gV2UgZG8gdGhpcyBieSBjcmVhdGluZyBhIHZlY3RvciB0aGF0IHBvaW50cyB0b3dhcmRzIHRoZSBleHRydWRlLCBidXQgcm90YXRlXFxuICAgIC8vIGl0IHdoZW4gd2UncmUgZHJhd2luZyByb3VuZCBlbmQgcG9pbnRzIChhX2RpcmVjdGlvbiA9IC0xIG9yIDEpIHNpbmNlIHRoZWlyXFxuICAgIC8vIGV4dHJ1ZGUgdmVjdG9yIHBvaW50cyBpbiBhbm90aGVyIGRpcmVjdGlvbi5cXG4gICAgbWVkaXVtcCBmbG9hdCB1ID0gMC41ICogYV9kaXJlY3Rpb247XFxuICAgIG1lZGl1bXAgZmxvYXQgdCA9IDEuMCAtIGFicyh1KTtcXG4gICAgbWVkaXVtcCB2ZWMyIG9mZnNldDIgPSBvZmZzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZSAqIG5vcm1hbC55ICogbWF0Mih0LCAtdSwgdSwgdCk7XFxuXFxuICAgIHZlYzQgcHJvamVjdGVkX2V4dHJ1ZGUgPSB1X21hdHJpeCAqIHZlYzQoZGlzdCAvIHVfcmF0aW8sIDAuMCwgMC4wKTtcXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQocG9zICsgb2Zmc2V0MiAvIHVfcmF0aW8sIDAuMCwgMS4wKSArIHByb2plY3RlZF9leHRydWRlO1xcblxcbiAgICAvLyBjYWxjdWxhdGUgaG93IG11Y2ggdGhlIHBlcnNwZWN0aXZlIHZpZXcgc3F1aXNoZXMgb3Igc3RyZXRjaGVzIHRoZSBleHRydWRlXFxuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmUgPSBsZW5ndGgoZGlzdCk7XFxuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmUgPSBsZW5ndGgocHJvamVjdGVkX2V4dHJ1ZGUueHkgLyBnbF9Qb3NpdGlvbi53ICogdV9nbF91bml0c190b19waXhlbHMpO1xcbiAgICB2X2dhbW1hX3NjYWxlID0gZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZSAvIGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU7XFxuXFxuICAgIHZfd2lkdGgyID0gdmVjMihvdXRzZXQsIGluc2V0KTtcXG59XFxuXCJ9LGxpbmVHcmFkaWVudDp7ZnJhZ21lbnRTb3VyY2U6XCJcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcXG5cXG52YXJ5aW5nIHZlYzIgdl93aWR0aDI7XFxudmFyeWluZyB2ZWMyIHZfbm9ybWFsO1xcbnZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcXG52YXJ5aW5nIGhpZ2hwIGZsb2F0IHZfbGluZXByb2dyZXNzO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbiAgICAvLyBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIG9mIHRoZSBwaXhlbCBmcm9tIHRoZSBsaW5lIGluIHBpeGVscy5cXG4gICAgZmxvYXQgZGlzdCA9IGxlbmd0aCh2X25vcm1hbCkgKiB2X3dpZHRoMi5zO1xcblxcbiAgICAvLyBDYWxjdWxhdGUgdGhlIGFudGlhbGlhc2luZyBmYWRlIGZhY3Rvci4gVGhpcyBpcyBlaXRoZXIgd2hlbiBmYWRpbmcgaW5cXG4gICAgLy8gdGhlIGxpbmUgaW4gY2FzZSBvZiBhbiBvZmZzZXQgbGluZSAodl93aWR0aDIudCkgb3Igd2hlbiBmYWRpbmcgb3V0XFxuICAgIC8vICh2X3dpZHRoMi5zKVxcbiAgICBmbG9hdCBibHVyMiA9IChibHVyICsgMS4wIC8gREVWSUNFX1BJWEVMX1JBVElPKSAqIHZfZ2FtbWFfc2NhbGU7XFxuICAgIGZsb2F0IGFscGhhID0gY2xhbXAobWluKGRpc3QgLSAodl93aWR0aDIudCAtIGJsdXIyKSwgdl93aWR0aDIucyAtIGRpc3QpIC8gYmx1cjIsIDAuMCwgMS4wKTtcXG5cXG4gICAgLy8gRm9yIGdyYWRpZW50IGxpbmVzLCB2X2xpbmVwcm9ncmVzcyBpcyB0aGUgcmF0aW8gYWxvbmcgdGhlIGVudGlyZSBsaW5lLFxcbiAgICAvLyBzY2FsZWQgdG8gWzAsIDJeMTUpLCBhbmQgdGhlIGdyYWRpZW50IHJhbXAgaXMgc3RvcmVkIGluIGEgdGV4dHVyZS5cXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1X2ltYWdlLCB2ZWMyKHZfbGluZXByb2dyZXNzLCAwLjUpKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgKiAoYWxwaGEgKiBvcGFjaXR5KTtcXG5cXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcXG4jZW5kaWZcXG59XFxuXCIsdmVydGV4U291cmNlOlwiXFxuLy8gdGhlIGF0dHJpYnV0ZSBjb252ZXlpbmcgcHJvZ3Jlc3MgYWxvbmcgYSBsaW5lIGlzIHNjYWxlZCB0byBbMCwgMl4xNSlcXG4jZGVmaW5lIE1BWF9MSU5FX0RJU1RBTkNFIDMyNzY3LjBcXG5cXG4vLyB0aGUgZGlzdGFuY2Ugb3ZlciB3aGljaCB0aGUgbGluZSBlZGdlIGZhZGVzIG91dC5cXG4vLyBSZXRpbmEgZGV2aWNlcyBuZWVkIGEgc21hbGxlciBkaXN0YW5jZSB0byBhdm9pZCBhbGlhc2luZy5cXG4jZGVmaW5lIEFOVElBTElBU0lORyAxLjAgLyBERVZJQ0VfUElYRUxfUkFUSU8gLyAyLjBcXG5cXG4vLyBmbG9vcigxMjcgLyAyKSA9PSA2My4wXFxuLy8gdGhlIG1heGltdW0gYWxsb3dlZCBtaXRlciBsaW1pdCBpcyAyLjAgYXQgdGhlIG1vbWVudC4gdGhlIGV4dHJ1ZGUgbm9ybWFsIGlzXFxuLy8gc3RvcmVkIGluIGEgYnl0ZSAoLTEyOC4uMTI3KS4gd2Ugc2NhbGUgcmVndWxhciBub3JtYWxzIHVwIHRvIGxlbmd0aCA2MywgYnV0XFxuLy8gdGhlcmUgYXJlIGFsc28gXFxcInNwZWNpYWxcXFwiIG5vcm1hbHMgdGhhdCBoYXZlIGEgYmlnZ2VyIGxlbmd0aCAob2YgdXAgdG8gMTI2IGluXFxuLy8gdGhpcyBjYXNlKS5cXG4vLyAjZGVmaW5lIHNjYWxlIDYzLjBcXG4jZGVmaW5lIHNjYWxlIDAuMDE1ODczMDE2XFxuXFxuYXR0cmlidXRlIHZlYzQgYV9wb3Nfbm9ybWFsO1xcbmF0dHJpYnV0ZSB2ZWM0IGFfZGF0YTtcXG5cXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfcmF0aW87XFxudW5pZm9ybSB2ZWMyIHVfZ2xfdW5pdHNfdG9fcGl4ZWxzO1xcblxcbnZhcnlpbmcgdmVjMiB2X25vcm1hbDtcXG52YXJ5aW5nIHZlYzIgdl93aWR0aDI7XFxudmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xcbnZhcnlpbmcgaGlnaHAgZmxvYXQgdl9saW5lcHJvZ3Jlc3M7XFxuXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvZmZzZXRcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgd2lkdGhcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9mZnNldFxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHdpZHRoXFxuXFxuICAgIHZlYzIgYV9leHRydWRlID0gYV9kYXRhLnh5IC0gMTI4LjA7XFxuICAgIGZsb2F0IGFfZGlyZWN0aW9uID0gbW9kKGFfZGF0YS56LCA0LjApIC0gMS4wO1xcblxcbiAgICB2X2xpbmVwcm9ncmVzcyA9IChmbG9vcihhX2RhdGEueiAvIDQuMCkgKyBhX2RhdGEudyAqIDY0LjApICogMi4wIC8gTUFYX0xJTkVfRElTVEFOQ0U7XFxuXFxuICAgIHZlYzIgcG9zID0gYV9wb3Nfbm9ybWFsLnh5O1xcblxcbiAgICAvLyB4IGlzIDEgaWYgaXQncyBhIHJvdW5kIGNhcCwgMCBvdGhlcndpc2VcXG4gICAgLy8geSBpcyAxIGlmIHRoZSBub3JtYWwgcG9pbnRzIHVwLCBhbmQgLTEgaWYgaXQgcG9pbnRzIGRvd25cXG4gICAgbWVkaXVtcCB2ZWMyIG5vcm1hbCA9IGFfcG9zX25vcm1hbC56dztcXG4gICAgdl9ub3JtYWwgPSBub3JtYWw7XFxuXFxuICAgIC8vIHRoZXNlIHRyYW5zZm9ybWF0aW9ucyB1c2VkIHRvIGJlIGFwcGxpZWQgaW4gdGhlIEpTIGFuZCBuYXRpdmUgY29kZSBiYXNlcy5cXG4gICAgLy8gbW92ZWQgdGhlbSBpbnRvIHRoZSBzaGFkZXIgZm9yIGNsYXJpdHkgYW5kIHNpbXBsaWNpdHkuXFxuICAgIGdhcHdpZHRoID0gZ2Fwd2lkdGggLyAyLjA7XFxuICAgIGZsb2F0IGhhbGZ3aWR0aCA9IHdpZHRoIC8gMi4wO1xcbiAgICBvZmZzZXQgPSAtMS4wICogb2Zmc2V0O1xcblxcbiAgICBmbG9hdCBpbnNldCA9IGdhcHdpZHRoICsgKGdhcHdpZHRoID4gMC4wID8gQU5USUFMSUFTSU5HIDogMC4wKTtcXG4gICAgZmxvYXQgb3V0c2V0ID0gZ2Fwd2lkdGggKyBoYWxmd2lkdGggKiAoZ2Fwd2lkdGggPiAwLjAgPyAyLjAgOiAxLjApICsgQU5USUFMSUFTSU5HO1xcblxcbiAgICAvLyBTY2FsZSB0aGUgZXh0cnVzaW9uIHZlY3RvciBkb3duIHRvIGEgbm9ybWFsIGFuZCB0aGVuIHVwIGJ5IHRoZSBsaW5lIHdpZHRoXFxuICAgIC8vIG9mIHRoaXMgdmVydGV4LlxcbiAgICBtZWRpdW1wIHZlYzIgZGlzdCA9IG91dHNldCAqIGFfZXh0cnVkZSAqIHNjYWxlO1xcblxcbiAgICAvLyBDYWxjdWxhdGUgdGhlIG9mZnNldCB3aGVuIGRyYXdpbmcgYSBsaW5lIHRoYXQgaXMgdG8gdGhlIHNpZGUgb2YgdGhlIGFjdHVhbCBsaW5lLlxcbiAgICAvLyBXZSBkbyB0aGlzIGJ5IGNyZWF0aW5nIGEgdmVjdG9yIHRoYXQgcG9pbnRzIHRvd2FyZHMgdGhlIGV4dHJ1ZGUsIGJ1dCByb3RhdGVcXG4gICAgLy8gaXQgd2hlbiB3ZSdyZSBkcmF3aW5nIHJvdW5kIGVuZCBwb2ludHMgKGFfZGlyZWN0aW9uID0gLTEgb3IgMSkgc2luY2UgdGhlaXJcXG4gICAgLy8gZXh0cnVkZSB2ZWN0b3IgcG9pbnRzIGluIGFub3RoZXIgZGlyZWN0aW9uLlxcbiAgICBtZWRpdW1wIGZsb2F0IHUgPSAwLjUgKiBhX2RpcmVjdGlvbjtcXG4gICAgbWVkaXVtcCBmbG9hdCB0ID0gMS4wIC0gYWJzKHUpO1xcbiAgICBtZWRpdW1wIHZlYzIgb2Zmc2V0MiA9IG9mZnNldCAqIGFfZXh0cnVkZSAqIHNjYWxlICogbm9ybWFsLnkgKiBtYXQyKHQsIC11LCB1LCB0KTtcXG5cXG4gICAgdmVjNCBwcm9qZWN0ZWRfZXh0cnVkZSA9IHVfbWF0cml4ICogdmVjNChkaXN0IC8gdV9yYXRpbywgMC4wLCAwLjApO1xcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChwb3MgKyBvZmZzZXQyIC8gdV9yYXRpbywgMC4wLCAxLjApICsgcHJvamVjdGVkX2V4dHJ1ZGU7XFxuXFxuICAgIC8vIGNhbGN1bGF0ZSBob3cgbXVjaCB0aGUgcGVyc3BlY3RpdmUgdmlldyBzcXVpc2hlcyBvciBzdHJldGNoZXMgdGhlIGV4dHJ1ZGVcXG4gICAgZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZSA9IGxlbmd0aChkaXN0KTtcXG4gICAgZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZSA9IGxlbmd0aChwcm9qZWN0ZWRfZXh0cnVkZS54eSAvIGdsX1Bvc2l0aW9uLncgKiB1X2dsX3VuaXRzX3RvX3BpeGVscyk7XFxuICAgIHZfZ2FtbWFfc2NhbGUgPSBleHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlIC8gZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZTtcXG5cXG4gICAgdl93aWR0aDIgPSB2ZWMyKG91dHNldCwgaW5zZXQpO1xcbn1cXG5cIn0sbGluZVBhdHRlcm46e2ZyYWdtZW50U291cmNlOlwidW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2E7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2I7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl90bF9hO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYTtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2I7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9icl9iO1xcbnVuaWZvcm0gdmVjMiB1X3RleHNpemU7XFxudW5pZm9ybSBmbG9hdCB1X2ZhZGU7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcXG5cXG52YXJ5aW5nIHZlYzIgdl9ub3JtYWw7XFxudmFyeWluZyB2ZWMyIHZfd2lkdGgyO1xcbnZhcnlpbmcgZmxvYXQgdl9saW5lc29mYXI7XFxudmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xcblxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBvZiB0aGUgcGl4ZWwgZnJvbSB0aGUgbGluZSBpbiBwaXhlbHMuXFxuICAgIGZsb2F0IGRpc3QgPSBsZW5ndGgodl9ub3JtYWwpICogdl93aWR0aDIucztcXG5cXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhbnRpYWxpYXNpbmcgZmFkZSBmYWN0b3IuIFRoaXMgaXMgZWl0aGVyIHdoZW4gZmFkaW5nIGluXFxuICAgIC8vIHRoZSBsaW5lIGluIGNhc2Ugb2YgYW4gb2Zmc2V0IGxpbmUgKHZfd2lkdGgyLnQpIG9yIHdoZW4gZmFkaW5nIG91dFxcbiAgICAvLyAodl93aWR0aDIucylcXG4gICAgZmxvYXQgYmx1cjIgPSAoYmx1ciArIDEuMCAvIERFVklDRV9QSVhFTF9SQVRJTykgKiB2X2dhbW1hX3NjYWxlO1xcbiAgICBmbG9hdCBhbHBoYSA9IGNsYW1wKG1pbihkaXN0IC0gKHZfd2lkdGgyLnQgLSBibHVyMiksIHZfd2lkdGgyLnMgLSBkaXN0KSAvIGJsdXIyLCAwLjAsIDEuMCk7XFxuXFxuICAgIGZsb2F0IHhfYSA9IG1vZCh2X2xpbmVzb2ZhciAvIHVfcGF0dGVybl9zaXplX2EueCwgMS4wKTtcXG4gICAgZmxvYXQgeF9iID0gbW9kKHZfbGluZXNvZmFyIC8gdV9wYXR0ZXJuX3NpemVfYi54LCAxLjApO1xcblxcbiAgICAvLyB2X25vcm1hbC55IGlzIDAgYXQgdGhlIG1pZHBvaW50IG9mIHRoZSBsaW5lLCAtMSBhdCB0aGUgbG93ZXIgZWRnZSwgMSBhdCB0aGUgdXBwZXIgZWRnZVxcbiAgICAvLyB3ZSBjbGFtcCB0aGUgbGluZSB3aWR0aCBvdXRzZXQgdG8gYmUgYmV0d2VlbiAwIGFuZCBoYWxmIHRoZSBwYXR0ZXJuIGhlaWdodCBwbHVzIHBhZGRpbmcgKDIuMClcXG4gICAgLy8gdG8gZW5zdXJlIHdlIGRvbid0IHNhbXBsZSBvdXRzaWRlIHRoZSBkZXNpZ25hdGVkIHN5bWJvbCBvbiB0aGUgc3ByaXRlIHNoZWV0LlxcbiAgICAvLyAwLjUgaXMgYWRkZWQgdG8gc2hpZnQgdGhlIGNvbXBvbmVudCB0byBiZSBib3VuZGVkIGJldHdlZW4gMCBhbmQgMSBmb3IgaW50ZXJwb2xhdGlvbiBvZlxcbiAgICAvLyB0aGUgdGV4dHVyZSBjb29yZGluYXRlXFxuICAgIGZsb2F0IHlfYSA9IDAuNSArICh2X25vcm1hbC55ICogY2xhbXAodl93aWR0aDIucywgMC4wLCAodV9wYXR0ZXJuX3NpemVfYS55ICsgMi4wKSAvIDIuMCkgLyB1X3BhdHRlcm5fc2l6ZV9hLnkpO1xcbiAgICBmbG9hdCB5X2IgPSAwLjUgKyAodl9ub3JtYWwueSAqIGNsYW1wKHZfd2lkdGgyLnMsIDAuMCwgKHVfcGF0dGVybl9zaXplX2IueSArIDIuMCkgLyAyLjApIC8gdV9wYXR0ZXJuX3NpemVfYi55KTtcXG4gICAgdmVjMiBwb3NfYSA9IG1peCh1X3BhdHRlcm5fdGxfYSAvIHVfdGV4c2l6ZSwgdV9wYXR0ZXJuX2JyX2EgLyB1X3RleHNpemUsIHZlYzIoeF9hLCB5X2EpKTtcXG4gICAgdmVjMiBwb3NfYiA9IG1peCh1X3BhdHRlcm5fdGxfYiAvIHVfdGV4c2l6ZSwgdV9wYXR0ZXJuX2JyX2IgLyB1X3RleHNpemUsIHZlYzIoeF9iLCB5X2IpKTtcXG5cXG4gICAgdmVjNCBjb2xvciA9IG1peCh0ZXh0dXJlMkQodV9pbWFnZSwgcG9zX2EpLCB0ZXh0dXJlMkQodV9pbWFnZSwgcG9zX2IpLCB1X2ZhZGUpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAqIGFscGhhICogb3BhY2l0eTtcXG5cXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcXG4jZW5kaWZcXG59XFxuXCIsdmVydGV4U291cmNlOlwiLy8gZmxvb3IoMTI3IC8gMikgPT0gNjMuMFxcbi8vIHRoZSBtYXhpbXVtIGFsbG93ZWQgbWl0ZXIgbGltaXQgaXMgMi4wIGF0IHRoZSBtb21lbnQuIHRoZSBleHRydWRlIG5vcm1hbCBpc1xcbi8vIHN0b3JlZCBpbiBhIGJ5dGUgKC0xMjguLjEyNykuIHdlIHNjYWxlIHJlZ3VsYXIgbm9ybWFscyB1cCB0byBsZW5ndGggNjMsIGJ1dFxcbi8vIHRoZXJlIGFyZSBhbHNvIFxcXCJzcGVjaWFsXFxcIiBub3JtYWxzIHRoYXQgaGF2ZSBhIGJpZ2dlciBsZW5ndGggKG9mIHVwIHRvIDEyNiBpblxcbi8vIHRoaXMgY2FzZSkuXFxuLy8gI2RlZmluZSBzY2FsZSA2My4wXFxuI2RlZmluZSBzY2FsZSAwLjAxNTg3MzAxNlxcblxcbi8vIFdlIHNjYWxlIHRoZSBkaXN0YW5jZSBiZWZvcmUgYWRkaW5nIGl0IHRvIHRoZSBidWZmZXJzIHNvIHRoYXQgd2UgY2FuIHN0b3JlXFxuLy8gbG9uZyBkaXN0YW5jZXMgZm9yIGxvbmcgc2VnbWVudHMuIFVzZSB0aGlzIHZhbHVlIHRvIHVuc2NhbGUgdGhlIGRpc3RhbmNlLlxcbiNkZWZpbmUgTElORV9ESVNUQU5DRV9TQ0FMRSAyLjBcXG5cXG4vLyB0aGUgZGlzdGFuY2Ugb3ZlciB3aGljaCB0aGUgbGluZSBlZGdlIGZhZGVzIG91dC5cXG4vLyBSZXRpbmEgZGV2aWNlcyBuZWVkIGEgc21hbGxlciBkaXN0YW5jZSB0byBhdm9pZCBhbGlhc2luZy5cXG4jZGVmaW5lIEFOVElBTElBU0lORyAxLjAgLyBERVZJQ0VfUElYRUxfUkFUSU8gLyAyLjBcXG5cXG5hdHRyaWJ1dGUgdmVjNCBhX3Bvc19ub3JtYWw7XFxuYXR0cmlidXRlIHZlYzQgYV9kYXRhO1xcblxcbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9yYXRpbztcXG51bmlmb3JtIHZlYzIgdV9nbF91bml0c190b19waXhlbHM7XFxuXFxudmFyeWluZyB2ZWMyIHZfbm9ybWFsO1xcbnZhcnlpbmcgdmVjMiB2X3dpZHRoMjtcXG52YXJ5aW5nIGZsb2F0IHZfbGluZXNvZmFyO1xcbnZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9mZnNldFxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCB3aWR0aFxcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9mZnNldFxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgd2lkdGhcXG5cXG4gICAgdmVjMiBhX2V4dHJ1ZGUgPSBhX2RhdGEueHkgLSAxMjguMDtcXG4gICAgZmxvYXQgYV9kaXJlY3Rpb24gPSBtb2QoYV9kYXRhLnosIDQuMCkgLSAxLjA7XFxuICAgIGZsb2F0IGFfbGluZXNvZmFyID0gKGZsb29yKGFfZGF0YS56IC8gNC4wKSArIGFfZGF0YS53ICogNjQuMCkgKiBMSU5FX0RJU1RBTkNFX1NDQUxFO1xcblxcbiAgICB2ZWMyIHBvcyA9IGFfcG9zX25vcm1hbC54eTtcXG5cXG4gICAgLy8geCBpcyAxIGlmIGl0J3MgYSByb3VuZCBjYXAsIDAgb3RoZXJ3aXNlXFxuICAgIC8vIHkgaXMgMSBpZiB0aGUgbm9ybWFsIHBvaW50cyB1cCwgYW5kIC0xIGlmIGl0IHBvaW50cyBkb3duXFxuICAgIG1lZGl1bXAgdmVjMiBub3JtYWwgPSBhX3Bvc19ub3JtYWwuenc7XFxuICAgIHZfbm9ybWFsID0gbm9ybWFsO1xcblxcbiAgICAvLyB0aGVzZSB0cmFuc2Zvcm1hdGlvbnMgdXNlZCB0byBiZSBhcHBsaWVkIGluIHRoZSBKUyBhbmQgbmF0aXZlIGNvZGUgYmFzZXMuXFxuICAgIC8vIG1vdmVkIHRoZW0gaW50byB0aGUgc2hhZGVyIGZvciBjbGFyaXR5IGFuZCBzaW1wbGljaXR5LlxcbiAgICBnYXB3aWR0aCA9IGdhcHdpZHRoIC8gMi4wO1xcbiAgICBmbG9hdCBoYWxmd2lkdGggPSB3aWR0aCAvIDIuMDtcXG4gICAgb2Zmc2V0ID0gLTEuMCAqIG9mZnNldDtcXG5cXG4gICAgZmxvYXQgaW5zZXQgPSBnYXB3aWR0aCArIChnYXB3aWR0aCA+IDAuMCA/IEFOVElBTElBU0lORyA6IDAuMCk7XFxuICAgIGZsb2F0IG91dHNldCA9IGdhcHdpZHRoICsgaGFsZndpZHRoICogKGdhcHdpZHRoID4gMC4wID8gMi4wIDogMS4wKSArIEFOVElBTElBU0lORztcXG5cXG4gICAgLy8gU2NhbGUgdGhlIGV4dHJ1c2lvbiB2ZWN0b3IgZG93biB0byBhIG5vcm1hbCBhbmQgdGhlbiB1cCBieSB0aGUgbGluZSB3aWR0aFxcbiAgICAvLyBvZiB0aGlzIHZlcnRleC5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpc3QgPSBvdXRzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZTtcXG5cXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBvZmZzZXQgd2hlbiBkcmF3aW5nIGEgbGluZSB0aGF0IGlzIHRvIHRoZSBzaWRlIG9mIHRoZSBhY3R1YWwgbGluZS5cXG4gICAgLy8gV2UgZG8gdGhpcyBieSBjcmVhdGluZyBhIHZlY3RvciB0aGF0IHBvaW50cyB0b3dhcmRzIHRoZSBleHRydWRlLCBidXQgcm90YXRlXFxuICAgIC8vIGl0IHdoZW4gd2UncmUgZHJhd2luZyByb3VuZCBlbmQgcG9pbnRzIChhX2RpcmVjdGlvbiA9IC0xIG9yIDEpIHNpbmNlIHRoZWlyXFxuICAgIC8vIGV4dHJ1ZGUgdmVjdG9yIHBvaW50cyBpbiBhbm90aGVyIGRpcmVjdGlvbi5cXG4gICAgbWVkaXVtcCBmbG9hdCB1ID0gMC41ICogYV9kaXJlY3Rpb247XFxuICAgIG1lZGl1bXAgZmxvYXQgdCA9IDEuMCAtIGFicyh1KTtcXG4gICAgbWVkaXVtcCB2ZWMyIG9mZnNldDIgPSBvZmZzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZSAqIG5vcm1hbC55ICogbWF0Mih0LCAtdSwgdSwgdCk7XFxuXFxuICAgIHZlYzQgcHJvamVjdGVkX2V4dHJ1ZGUgPSB1X21hdHJpeCAqIHZlYzQoZGlzdCAvIHVfcmF0aW8sIDAuMCwgMC4wKTtcXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQocG9zICsgb2Zmc2V0MiAvIHVfcmF0aW8sIDAuMCwgMS4wKSArIHByb2plY3RlZF9leHRydWRlO1xcblxcbiAgICAvLyBjYWxjdWxhdGUgaG93IG11Y2ggdGhlIHBlcnNwZWN0aXZlIHZpZXcgc3F1aXNoZXMgb3Igc3RyZXRjaGVzIHRoZSBleHRydWRlXFxuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmUgPSBsZW5ndGgoZGlzdCk7XFxuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmUgPSBsZW5ndGgocHJvamVjdGVkX2V4dHJ1ZGUueHkgLyBnbF9Qb3NpdGlvbi53ICogdV9nbF91bml0c190b19waXhlbHMpO1xcbiAgICB2X2dhbW1hX3NjYWxlID0gZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZSAvIGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU7XFxuXFxuICAgIHZfbGluZXNvZmFyID0gYV9saW5lc29mYXI7XFxuICAgIHZfd2lkdGgyID0gdmVjMihvdXRzZXQsIGluc2V0KTtcXG59XFxuXCJ9LGxpbmVTREY6e2ZyYWdtZW50U291cmNlOlwiXFxudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcXG51bmlmb3JtIGZsb2F0IHVfc2RmZ2FtbWE7XFxudW5pZm9ybSBmbG9hdCB1X21peDtcXG5cXG52YXJ5aW5nIHZlYzIgdl9ub3JtYWw7XFxudmFyeWluZyB2ZWMyIHZfd2lkdGgyO1xcbnZhcnlpbmcgdmVjMiB2X3RleF9hO1xcbnZhcnlpbmcgdmVjMiB2X3RleF9iO1xcbnZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHdpZHRoXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGZsb29yd2lkdGhcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHdpZHRoXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgZmxvb3J3aWR0aFxcblxcbiAgICAvLyBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIG9mIHRoZSBwaXhlbCBmcm9tIHRoZSBsaW5lIGluIHBpeGVscy5cXG4gICAgZmxvYXQgZGlzdCA9IGxlbmd0aCh2X25vcm1hbCkgKiB2X3dpZHRoMi5zO1xcblxcbiAgICAvLyBDYWxjdWxhdGUgdGhlIGFudGlhbGlhc2luZyBmYWRlIGZhY3Rvci4gVGhpcyBpcyBlaXRoZXIgd2hlbiBmYWRpbmcgaW5cXG4gICAgLy8gdGhlIGxpbmUgaW4gY2FzZSBvZiBhbiBvZmZzZXQgbGluZSAodl93aWR0aDIudCkgb3Igd2hlbiBmYWRpbmcgb3V0XFxuICAgIC8vICh2X3dpZHRoMi5zKVxcbiAgICBmbG9hdCBibHVyMiA9IChibHVyICsgMS4wIC8gREVWSUNFX1BJWEVMX1JBVElPKSAqIHZfZ2FtbWFfc2NhbGU7XFxuICAgIGZsb2F0IGFscGhhID0gY2xhbXAobWluKGRpc3QgLSAodl93aWR0aDIudCAtIGJsdXIyKSwgdl93aWR0aDIucyAtIGRpc3QpIC8gYmx1cjIsIDAuMCwgMS4wKTtcXG5cXG4gICAgZmxvYXQgc2RmZGlzdF9hID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHZfdGV4X2EpLmE7XFxuICAgIGZsb2F0IHNkZmRpc3RfYiA9IHRleHR1cmUyRCh1X2ltYWdlLCB2X3RleF9iKS5hO1xcbiAgICBmbG9hdCBzZGZkaXN0ID0gbWl4KHNkZmRpc3RfYSwgc2RmZGlzdF9iLCB1X21peCk7XFxuICAgIGFscGhhICo9IHNtb290aHN0ZXAoMC41IC0gdV9zZGZnYW1tYSAvIGZsb29yd2lkdGgsIDAuNSArIHVfc2RmZ2FtbWEgLyBmbG9vcndpZHRoLCBzZGZkaXN0KTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgKiAoYWxwaGEgKiBvcGFjaXR5KTtcXG5cXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcXG4jZW5kaWZcXG59XFxuXCIsdmVydGV4U291cmNlOlwiLy8gZmxvb3IoMTI3IC8gMikgPT0gNjMuMFxcbi8vIHRoZSBtYXhpbXVtIGFsbG93ZWQgbWl0ZXIgbGltaXQgaXMgMi4wIGF0IHRoZSBtb21lbnQuIHRoZSBleHRydWRlIG5vcm1hbCBpc1xcbi8vIHN0b3JlZCBpbiBhIGJ5dGUgKC0xMjguLjEyNykuIHdlIHNjYWxlIHJlZ3VsYXIgbm9ybWFscyB1cCB0byBsZW5ndGggNjMsIGJ1dFxcbi8vIHRoZXJlIGFyZSBhbHNvIFxcXCJzcGVjaWFsXFxcIiBub3JtYWxzIHRoYXQgaGF2ZSBhIGJpZ2dlciBsZW5ndGggKG9mIHVwIHRvIDEyNiBpblxcbi8vIHRoaXMgY2FzZSkuXFxuLy8gI2RlZmluZSBzY2FsZSA2My4wXFxuI2RlZmluZSBzY2FsZSAwLjAxNTg3MzAxNlxcblxcbi8vIFdlIHNjYWxlIHRoZSBkaXN0YW5jZSBiZWZvcmUgYWRkaW5nIGl0IHRvIHRoZSBidWZmZXJzIHNvIHRoYXQgd2UgY2FuIHN0b3JlXFxuLy8gbG9uZyBkaXN0YW5jZXMgZm9yIGxvbmcgc2VnbWVudHMuIFVzZSB0aGlzIHZhbHVlIHRvIHVuc2NhbGUgdGhlIGRpc3RhbmNlLlxcbiNkZWZpbmUgTElORV9ESVNUQU5DRV9TQ0FMRSAyLjBcXG5cXG4vLyB0aGUgZGlzdGFuY2Ugb3ZlciB3aGljaCB0aGUgbGluZSBlZGdlIGZhZGVzIG91dC5cXG4vLyBSZXRpbmEgZGV2aWNlcyBuZWVkIGEgc21hbGxlciBkaXN0YW5jZSB0byBhdm9pZCBhbGlhc2luZy5cXG4jZGVmaW5lIEFOVElBTElBU0lORyAxLjAgLyBERVZJQ0VfUElYRUxfUkFUSU8gLyAyLjBcXG5cXG5hdHRyaWJ1dGUgdmVjNCBhX3Bvc19ub3JtYWw7XFxuYXR0cmlidXRlIHZlYzQgYV9kYXRhO1xcblxcbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9yYXRpbztcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuc2NhbGVfYTtcXG51bmlmb3JtIGZsb2F0IHVfdGV4X3lfYTtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuc2NhbGVfYjtcXG51bmlmb3JtIGZsb2F0IHVfdGV4X3lfYjtcXG51bmlmb3JtIHZlYzIgdV9nbF91bml0c190b19waXhlbHM7XFxuXFxudmFyeWluZyB2ZWMyIHZfbm9ybWFsO1xcbnZhcnlpbmcgdmVjMiB2X3dpZHRoMjtcXG52YXJ5aW5nIHZlYzIgdl90ZXhfYTtcXG52YXJ5aW5nIHZlYzIgdl90ZXhfYjtcXG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XFxuXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvZmZzZXRcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgd2lkdGhcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgZmxvb3J3aWR0aFxcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvZmZzZXRcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCB3aWR0aFxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGZsb29yd2lkdGhcXG5cXG4gICAgdmVjMiBhX2V4dHJ1ZGUgPSBhX2RhdGEueHkgLSAxMjguMDtcXG4gICAgZmxvYXQgYV9kaXJlY3Rpb24gPSBtb2QoYV9kYXRhLnosIDQuMCkgLSAxLjA7XFxuICAgIGZsb2F0IGFfbGluZXNvZmFyID0gKGZsb29yKGFfZGF0YS56IC8gNC4wKSArIGFfZGF0YS53ICogNjQuMCkgKiBMSU5FX0RJU1RBTkNFX1NDQUxFO1xcblxcbiAgICB2ZWMyIHBvcyA9IGFfcG9zX25vcm1hbC54eTtcXG5cXG4gICAgLy8geCBpcyAxIGlmIGl0J3MgYSByb3VuZCBjYXAsIDAgb3RoZXJ3aXNlXFxuICAgIC8vIHkgaXMgMSBpZiB0aGUgbm9ybWFsIHBvaW50cyB1cCwgYW5kIC0xIGlmIGl0IHBvaW50cyBkb3duXFxuICAgIG1lZGl1bXAgdmVjMiBub3JtYWwgPSBhX3Bvc19ub3JtYWwuenc7XFxuICAgIHZfbm9ybWFsID0gbm9ybWFsO1xcblxcbiAgICAvLyB0aGVzZSB0cmFuc2Zvcm1hdGlvbnMgdXNlZCB0byBiZSBhcHBsaWVkIGluIHRoZSBKUyBhbmQgbmF0aXZlIGNvZGUgYmFzZXMuXFxuICAgIC8vIG1vdmVkIHRoZW0gaW50byB0aGUgc2hhZGVyIGZvciBjbGFyaXR5IGFuZCBzaW1wbGljaXR5LlxcbiAgICBnYXB3aWR0aCA9IGdhcHdpZHRoIC8gMi4wO1xcbiAgICBmbG9hdCBoYWxmd2lkdGggPSB3aWR0aCAvIDIuMDtcXG4gICAgb2Zmc2V0ID0gLTEuMCAqIG9mZnNldDtcXG5cXG4gICAgZmxvYXQgaW5zZXQgPSBnYXB3aWR0aCArIChnYXB3aWR0aCA+IDAuMCA/IEFOVElBTElBU0lORyA6IDAuMCk7XFxuICAgIGZsb2F0IG91dHNldCA9IGdhcHdpZHRoICsgaGFsZndpZHRoICogKGdhcHdpZHRoID4gMC4wID8gMi4wIDogMS4wKSArIEFOVElBTElBU0lORztcXG5cXG4gICAgLy8gU2NhbGUgdGhlIGV4dHJ1c2lvbiB2ZWN0b3IgZG93biB0byBhIG5vcm1hbCBhbmQgdGhlbiB1cCBieSB0aGUgbGluZSB3aWR0aFxcbiAgICAvLyBvZiB0aGlzIHZlcnRleC5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpc3QgPW91dHNldCAqIGFfZXh0cnVkZSAqIHNjYWxlO1xcblxcbiAgICAvLyBDYWxjdWxhdGUgdGhlIG9mZnNldCB3aGVuIGRyYXdpbmcgYSBsaW5lIHRoYXQgaXMgdG8gdGhlIHNpZGUgb2YgdGhlIGFjdHVhbCBsaW5lLlxcbiAgICAvLyBXZSBkbyB0aGlzIGJ5IGNyZWF0aW5nIGEgdmVjdG9yIHRoYXQgcG9pbnRzIHRvd2FyZHMgdGhlIGV4dHJ1ZGUsIGJ1dCByb3RhdGVcXG4gICAgLy8gaXQgd2hlbiB3ZSdyZSBkcmF3aW5nIHJvdW5kIGVuZCBwb2ludHMgKGFfZGlyZWN0aW9uID0gLTEgb3IgMSkgc2luY2UgdGhlaXJcXG4gICAgLy8gZXh0cnVkZSB2ZWN0b3IgcG9pbnRzIGluIGFub3RoZXIgZGlyZWN0aW9uLlxcbiAgICBtZWRpdW1wIGZsb2F0IHUgPSAwLjUgKiBhX2RpcmVjdGlvbjtcXG4gICAgbWVkaXVtcCBmbG9hdCB0ID0gMS4wIC0gYWJzKHUpO1xcbiAgICBtZWRpdW1wIHZlYzIgb2Zmc2V0MiA9IG9mZnNldCAqIGFfZXh0cnVkZSAqIHNjYWxlICogbm9ybWFsLnkgKiBtYXQyKHQsIC11LCB1LCB0KTtcXG5cXG4gICAgdmVjNCBwcm9qZWN0ZWRfZXh0cnVkZSA9IHVfbWF0cml4ICogdmVjNChkaXN0IC8gdV9yYXRpbywgMC4wLCAwLjApO1xcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChwb3MgKyBvZmZzZXQyIC8gdV9yYXRpbywgMC4wLCAxLjApICsgcHJvamVjdGVkX2V4dHJ1ZGU7XFxuXFxuICAgIC8vIGNhbGN1bGF0ZSBob3cgbXVjaCB0aGUgcGVyc3BlY3RpdmUgdmlldyBzcXVpc2hlcyBvciBzdHJldGNoZXMgdGhlIGV4dHJ1ZGVcXG4gICAgZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZSA9IGxlbmd0aChkaXN0KTtcXG4gICAgZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZSA9IGxlbmd0aChwcm9qZWN0ZWRfZXh0cnVkZS54eSAvIGdsX1Bvc2l0aW9uLncgKiB1X2dsX3VuaXRzX3RvX3BpeGVscyk7XFxuICAgIHZfZ2FtbWFfc2NhbGUgPSBleHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlIC8gZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZTtcXG5cXG4gICAgdl90ZXhfYSA9IHZlYzIoYV9saW5lc29mYXIgKiB1X3BhdHRlcm5zY2FsZV9hLnggLyBmbG9vcndpZHRoLCBub3JtYWwueSAqIHVfcGF0dGVybnNjYWxlX2EueSArIHVfdGV4X3lfYSk7XFxuICAgIHZfdGV4X2IgPSB2ZWMyKGFfbGluZXNvZmFyICogdV9wYXR0ZXJuc2NhbGVfYi54IC8gZmxvb3J3aWR0aCwgbm9ybWFsLnkgKiB1X3BhdHRlcm5zY2FsZV9iLnkgKyB1X3RleF95X2IpO1xcblxcbiAgICB2X3dpZHRoMiA9IHZlYzIob3V0c2V0LCBpbnNldCk7XFxufVxcblwifSxyYXN0ZXI6e2ZyYWdtZW50U291cmNlOlwidW5pZm9ybSBmbG9hdCB1X2ZhZGVfdDtcXG51bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlMDtcXG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlMTtcXG52YXJ5aW5nIHZlYzIgdl9wb3MwO1xcbnZhcnlpbmcgdmVjMiB2X3BvczE7XFxuXFxudW5pZm9ybSBmbG9hdCB1X2JyaWdodG5lc3NfbG93O1xcbnVuaWZvcm0gZmxvYXQgdV9icmlnaHRuZXNzX2hpZ2g7XFxuXFxudW5pZm9ybSBmbG9hdCB1X3NhdHVyYXRpb25fZmFjdG9yO1xcbnVuaWZvcm0gZmxvYXQgdV9jb250cmFzdF9mYWN0b3I7XFxudW5pZm9ybSB2ZWMzIHVfc3Bpbl93ZWlnaHRzO1xcblxcbnZvaWQgbWFpbigpIHtcXG5cXG4gICAgLy8gcmVhZCBhbmQgY3Jvc3MtZmFkZSBjb2xvcnMgZnJvbSB0aGUgbWFpbiBhbmQgcGFyZW50IHRpbGVzXFxuICAgIHZlYzQgY29sb3IwID0gdGV4dHVyZTJEKHVfaW1hZ2UwLCB2X3BvczApO1xcbiAgICB2ZWM0IGNvbG9yMSA9IHRleHR1cmUyRCh1X2ltYWdlMSwgdl9wb3MxKTtcXG4gICAgaWYgKGNvbG9yMC5hID4gMC4wKSB7XFxuICAgICAgICBjb2xvcjAucmdiID0gY29sb3IwLnJnYiAvIGNvbG9yMC5hO1xcbiAgICB9XFxuICAgIGlmIChjb2xvcjEuYSA+IDAuMCkge1xcbiAgICAgICAgY29sb3IxLnJnYiA9IGNvbG9yMS5yZ2IgLyBjb2xvcjEuYTtcXG4gICAgfVxcbiAgICB2ZWM0IGNvbG9yID0gbWl4KGNvbG9yMCwgY29sb3IxLCB1X2ZhZGVfdCk7XFxuICAgIGNvbG9yLmEgKj0gdV9vcGFjaXR5O1xcbiAgICB2ZWMzIHJnYiA9IGNvbG9yLnJnYjtcXG5cXG4gICAgLy8gc3BpblxcbiAgICByZ2IgPSB2ZWMzKFxcbiAgICAgICAgZG90KHJnYiwgdV9zcGluX3dlaWdodHMueHl6KSxcXG4gICAgICAgIGRvdChyZ2IsIHVfc3Bpbl93ZWlnaHRzLnp4eSksXFxuICAgICAgICBkb3QocmdiLCB1X3NwaW5fd2VpZ2h0cy55engpKTtcXG5cXG4gICAgLy8gc2F0dXJhdGlvblxcbiAgICBmbG9hdCBhdmVyYWdlID0gKGNvbG9yLnIgKyBjb2xvci5nICsgY29sb3IuYikgLyAzLjA7XFxuICAgIHJnYiArPSAoYXZlcmFnZSAtIHJnYikgKiB1X3NhdHVyYXRpb25fZmFjdG9yO1xcblxcbiAgICAvLyBjb250cmFzdFxcbiAgICByZ2IgPSAocmdiIC0gMC41KSAqIHVfY29udHJhc3RfZmFjdG9yICsgMC41O1xcblxcbiAgICAvLyBicmlnaHRuZXNzXFxuICAgIHZlYzMgdV9oaWdoX3ZlYyA9IHZlYzModV9icmlnaHRuZXNzX2xvdywgdV9icmlnaHRuZXNzX2xvdywgdV9icmlnaHRuZXNzX2xvdyk7XFxuICAgIHZlYzMgdV9sb3dfdmVjID0gdmVjMyh1X2JyaWdodG5lc3NfaGlnaCwgdV9icmlnaHRuZXNzX2hpZ2gsIHVfYnJpZ2h0bmVzc19oaWdoKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChtaXgodV9oaWdoX3ZlYywgdV9sb3dfdmVjLCByZ2IpICogY29sb3IuYSwgY29sb3IuYSk7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcInVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG51bmlmb3JtIHZlYzIgdV90bF9wYXJlbnQ7XFxudW5pZm9ybSBmbG9hdCB1X3NjYWxlX3BhcmVudDtcXG51bmlmb3JtIGZsb2F0IHVfYnVmZmVyX3NjYWxlO1xcblxcbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xcbmF0dHJpYnV0ZSB2ZWMyIGFfdGV4dHVyZV9wb3M7XFxuXFxudmFyeWluZyB2ZWMyIHZfcG9zMDtcXG52YXJ5aW5nIHZlYzIgdl9wb3MxO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xcbiAgICAvLyBXZSBhcmUgdXNpbmcgSW50MTYgZm9yIHRleHR1cmUgcG9zaXRpb24gY29vcmRpbmF0ZXMgdG8gZ2l2ZSB1cyBlbm91Z2ggcHJlY2lzaW9uIGZvclxcbiAgICAvLyBmcmFjdGlvbmFsIGNvb3JkaW5hdGVzLiBXZSB1c2UgODE5MiB0byBzY2FsZSB0aGUgdGV4dHVyZSBjb29yZGluYXRlcyBpbiB0aGUgYnVmZmVyXFxuICAgIC8vIGFzIGFuIGFyYml0cmFyaWx5IGhpZ2ggbnVtYmVyIHRvIHByZXNlcnZlIGFkZXF1YXRlIHByZWNpc2lvbiB3aGVuIHJlbmRlcmluZy5cXG4gICAgLy8gVGhpcyBpcyBhbHNvIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBFWFRFTlQgd2UgYXJlIHVzaW5nIGZvciBvdXIgdGlsZSBidWZmZXIgcG9zIGNvb3JkaW5hdGVzLFxcbiAgICAvLyBzbyBtYXRoIGZvciBtb2RpZnlpbmcgZWl0aGVyIGlzIGNvbnNpc3RlbnQuXFxuICAgIHZfcG9zMCA9ICgoKGFfdGV4dHVyZV9wb3MgLyA4MTkyLjApIC0gMC41KSAvIHVfYnVmZmVyX3NjYWxlICkgKyAwLjU7XFxuICAgIHZfcG9zMSA9ICh2X3BvczAgKiB1X3NjYWxlX3BhcmVudCkgKyB1X3RsX3BhcmVudDtcXG59XFxuXCJ9LHN5bWJvbEljb246e2ZyYWdtZW50U291cmNlOlwidW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlO1xcblxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxudmFyeWluZyB2ZWMyIHZfdGV4O1xcbnZhcnlpbmcgZmxvYXQgdl9mYWRlX29wYWNpdHk7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG4gICAgbG93cCBmbG9hdCBhbHBoYSA9IG9wYWNpdHkgKiB2X2ZhZGVfb3BhY2l0eTtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVfdGV4dHVyZSwgdl90ZXgpICogYWxwaGE7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcImNvbnN0IGZsb2F0IFBJID0gMy4xNDE1OTI2NTM1ODk3OTM7XFxuXFxuYXR0cmlidXRlIHZlYzQgYV9wb3Nfb2Zmc2V0O1xcbmF0dHJpYnV0ZSB2ZWM0IGFfZGF0YTtcXG5hdHRyaWJ1dGUgdmVjMyBhX3Byb2plY3RlZF9wb3M7XFxuYXR0cmlidXRlIGZsb2F0IGFfZmFkZV9vcGFjaXR5O1xcblxcbnVuaWZvcm0gYm9vbCB1X2lzX3NpemVfem9vbV9jb25zdGFudDtcXG51bmlmb3JtIGJvb2wgdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQ7XFxudW5pZm9ybSBoaWdocCBmbG9hdCB1X3NpemVfdDsgLy8gdXNlZCB0byBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHpvb20gc3RvcHMgd2hlbiBzaXplIGlzIGEgY29tcG9zaXRlIGZ1bmN0aW9uXFxudW5pZm9ybSBoaWdocCBmbG9hdCB1X3NpemU7IC8vIHVzZWQgd2hlbiBzaXplIGlzIGJvdGggem9vbSBhbmQgZmVhdHVyZSBjb25zdGFudFxcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO1xcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9waXRjaDtcXG51bmlmb3JtIGJvb2wgdV9yb3RhdGVfc3ltYm9sO1xcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9hc3BlY3RfcmF0aW87XFxudW5pZm9ybSBmbG9hdCB1X2ZhZGVfY2hhbmdlO1xcblxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1X2xhYmVsX3BsYW5lX21hdHJpeDtcXG51bmlmb3JtIG1hdDQgdV9nbF9jb29yZF9tYXRyaXg7XFxuXFxudW5pZm9ybSBib29sIHVfaXNfdGV4dDtcXG51bmlmb3JtIGJvb2wgdV9waXRjaF93aXRoX21hcDtcXG5cXG51bmlmb3JtIHZlYzIgdV90ZXhzaXplO1xcblxcbnZhcnlpbmcgdmVjMiB2X3RleDtcXG52YXJ5aW5nIGZsb2F0IHZfZmFkZV9vcGFjaXR5O1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxuICAgIHZlYzIgYV9wb3MgPSBhX3Bvc19vZmZzZXQueHk7XFxuICAgIHZlYzIgYV9vZmZzZXQgPSBhX3Bvc19vZmZzZXQuenc7XFxuXFxuICAgIHZlYzIgYV90ZXggPSBhX2RhdGEueHk7XFxuICAgIHZlYzIgYV9zaXplID0gYV9kYXRhLnp3O1xcblxcbiAgICBoaWdocCBmbG9hdCBzZWdtZW50X2FuZ2xlID0gLWFfcHJvamVjdGVkX3Bvc1syXTtcXG5cXG4gICAgZmxvYXQgc2l6ZTtcXG4gICAgaWYgKCF1X2lzX3NpemVfem9vbV9jb25zdGFudCAmJiAhdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtcXG4gICAgICAgIHNpemUgPSBtaXgoYV9zaXplWzBdLCBhX3NpemVbMV0sIHVfc2l6ZV90KSAvIDEwLjA7XFxuICAgIH0gZWxzZSBpZiAodV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgIXVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSB7XFxuICAgICAgICBzaXplID0gYV9zaXplWzBdIC8gMTAuMDtcXG4gICAgfSBlbHNlIGlmICghdV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtcXG4gICAgICAgIHNpemUgPSB1X3NpemU7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBzaXplID0gdV9zaXplO1xcbiAgICB9XFxuXFxuICAgIHZlYzQgcHJvamVjdGVkUG9pbnQgPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xcbiAgICBoaWdocCBmbG9hdCBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlID0gcHJvamVjdGVkUG9pbnQudztcXG4gICAgLy8gU2VlIGNvbW1lbnRzIGluIHN5bWJvbF9zZGYudmVydGV4XFxuICAgIGhpZ2hwIGZsb2F0IGRpc3RhbmNlX3JhdGlvID0gdV9waXRjaF93aXRoX21hcCA/XFxuICAgICAgICBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlIC8gdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlIDpcXG4gICAgICAgIHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSAvIGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2U7XFxuICAgIGhpZ2hwIGZsb2F0IHBlcnNwZWN0aXZlX3JhdGlvID0gY2xhbXAoXFxuICAgICAgICAgICAgMC41ICsgMC41ICogZGlzdGFuY2VfcmF0aW8sXFxuICAgICAgICAgICAgMC4wLCAvLyBQcmV2ZW50cyBvdmVyc2l6ZWQgbmVhci1maWVsZCBzeW1ib2xzIGluIHBpdGNoZWQvb3Zlcnpvb21lZCB0aWxlc1xcbiAgICAgICAgICAgIDQuMCk7XFxuXFxuICAgIHNpemUgKj0gcGVyc3BlY3RpdmVfcmF0aW87XFxuXFxuICAgIGZsb2F0IGZvbnRTY2FsZSA9IHVfaXNfdGV4dCA/IHNpemUgLyAyNC4wIDogc2l6ZTtcXG5cXG4gICAgaGlnaHAgZmxvYXQgc3ltYm9sX3JvdGF0aW9uID0gMC4wO1xcbiAgICBpZiAodV9yb3RhdGVfc3ltYm9sKSB7XFxuICAgICAgICAvLyBTZWUgY29tbWVudHMgaW4gc3ltYm9sX3NkZi52ZXJ0ZXhcXG4gICAgICAgIHZlYzQgb2Zmc2V0UHJvamVjdGVkUG9pbnQgPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MgKyB2ZWMyKDEsIDApLCAwLCAxKTtcXG5cXG4gICAgICAgIHZlYzIgYSA9IHByb2plY3RlZFBvaW50Lnh5IC8gcHJvamVjdGVkUG9pbnQudztcXG4gICAgICAgIHZlYzIgYiA9IG9mZnNldFByb2plY3RlZFBvaW50Lnh5IC8gb2Zmc2V0UHJvamVjdGVkUG9pbnQudztcXG5cXG4gICAgICAgIHN5bWJvbF9yb3RhdGlvbiA9IGF0YW4oKGIueSAtIGEueSkgLyB1X2FzcGVjdF9yYXRpbywgYi54IC0gYS54KTtcXG4gICAgfVxcblxcbiAgICBoaWdocCBmbG9hdCBhbmdsZV9zaW4gPSBzaW4oc2VnbWVudF9hbmdsZSArIHN5bWJvbF9yb3RhdGlvbik7XFxuICAgIGhpZ2hwIGZsb2F0IGFuZ2xlX2NvcyA9IGNvcyhzZWdtZW50X2FuZ2xlICsgc3ltYm9sX3JvdGF0aW9uKTtcXG4gICAgbWF0MiByb3RhdGlvbl9tYXRyaXggPSBtYXQyKGFuZ2xlX2NvcywgLTEuMCAqIGFuZ2xlX3NpbiwgYW5nbGVfc2luLCBhbmdsZV9jb3MpO1xcblxcbiAgICB2ZWM0IHByb2plY3RlZF9wb3MgPSB1X2xhYmVsX3BsYW5lX21hdHJpeCAqIHZlYzQoYV9wcm9qZWN0ZWRfcG9zLnh5LCAwLjAsIDEuMCk7XFxuICAgIGdsX1Bvc2l0aW9uID0gdV9nbF9jb29yZF9tYXRyaXggKiB2ZWM0KHByb2plY3RlZF9wb3MueHkgLyBwcm9qZWN0ZWRfcG9zLncgKyByb3RhdGlvbl9tYXRyaXggKiAoYV9vZmZzZXQgLyAzMi4wICogZm9udFNjYWxlKSwgMC4wLCAxLjApO1xcblxcbiAgICB2X3RleCA9IGFfdGV4IC8gdV90ZXhzaXplO1xcbiAgICB2ZWMyIGZhZGVfb3BhY2l0eSA9IHVucGFja19vcGFjaXR5KGFfZmFkZV9vcGFjaXR5KTtcXG4gICAgZmxvYXQgZmFkZV9jaGFuZ2UgPSBmYWRlX29wYWNpdHlbMV0gPiAwLjUgPyB1X2ZhZGVfY2hhbmdlIDogLXVfZmFkZV9jaGFuZ2U7XFxuICAgIHZfZmFkZV9vcGFjaXR5ID0gbWF4KDAuMCwgbWluKDEuMCwgZmFkZV9vcGFjaXR5WzBdICsgZmFkZV9jaGFuZ2UpKTtcXG59XFxuXCJ9LHN5bWJvbFNERjp7ZnJhZ21lbnRTb3VyY2U6XCIjZGVmaW5lIFNERl9QWCA4LjBcXG4jZGVmaW5lIEVER0VfR0FNTUEgMC4xMDUvREVWSUNFX1BJWEVMX1JBVElPXFxuXFxudW5pZm9ybSBib29sIHVfaXNfaGFsbztcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgZmlsbF9jb2xvclxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb193aWR0aFxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoYWxvX2JsdXJcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7XFxudW5pZm9ybSBoaWdocCBmbG9hdCB1X2dhbW1hX3NjYWxlO1xcbnVuaWZvcm0gYm9vbCB1X2lzX3RleHQ7XFxuXFxudmFyeWluZyB2ZWMyIHZfZGF0YTA7XFxudmFyeWluZyB2ZWMzIHZfZGF0YTE7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoYWxvX2JsdXJcXG5cXG4gICAgdmVjMiB0ZXggPSB2X2RhdGEwLnh5O1xcbiAgICBmbG9hdCBnYW1tYV9zY2FsZSA9IHZfZGF0YTEueDtcXG4gICAgZmxvYXQgc2l6ZSA9IHZfZGF0YTEueTtcXG4gICAgZmxvYXQgZmFkZV9vcGFjaXR5ID0gdl9kYXRhMVsyXTtcXG5cXG4gICAgZmxvYXQgZm9udFNjYWxlID0gdV9pc190ZXh0ID8gc2l6ZSAvIDI0LjAgOiBzaXplO1xcblxcbiAgICBsb3dwIHZlYzQgY29sb3IgPSBmaWxsX2NvbG9yO1xcbiAgICBoaWdocCBmbG9hdCBnYW1tYSA9IEVER0VfR0FNTUEgLyAoZm9udFNjYWxlICogdV9nYW1tYV9zY2FsZSk7XFxuICAgIGxvd3AgZmxvYXQgYnVmZiA9ICgyNTYuMCAtIDY0LjApIC8gMjU2LjA7XFxuICAgIGlmICh1X2lzX2hhbG8pIHtcXG4gICAgICAgIGNvbG9yID0gaGFsb19jb2xvcjtcXG4gICAgICAgIGdhbW1hID0gKGhhbG9fYmx1ciAqIDEuMTkgLyBTREZfUFggKyBFREdFX0dBTU1BKSAvIChmb250U2NhbGUgKiB1X2dhbW1hX3NjYWxlKTtcXG4gICAgICAgIGJ1ZmYgPSAoNi4wIC0gaGFsb193aWR0aCAvIGZvbnRTY2FsZSkgLyBTREZfUFg7XFxuICAgIH1cXG5cXG4gICAgbG93cCBmbG9hdCBkaXN0ID0gdGV4dHVyZTJEKHVfdGV4dHVyZSwgdGV4KS5hO1xcbiAgICBoaWdocCBmbG9hdCBnYW1tYV9zY2FsZWQgPSBnYW1tYSAqIGdhbW1hX3NjYWxlO1xcbiAgICBoaWdocCBmbG9hdCBhbHBoYSA9IHNtb290aHN0ZXAoYnVmZiAtIGdhbW1hX3NjYWxlZCwgYnVmZiArIGdhbW1hX3NjYWxlZCwgZGlzdCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yICogKGFscGhhICogb3BhY2l0eSAqIGZhZGVfb3BhY2l0eSk7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcImNvbnN0IGZsb2F0IFBJID0gMy4xNDE1OTI2NTM1ODk3OTM7XFxuXFxuYXR0cmlidXRlIHZlYzQgYV9wb3Nfb2Zmc2V0O1xcbmF0dHJpYnV0ZSB2ZWM0IGFfZGF0YTtcXG5hdHRyaWJ1dGUgdmVjMyBhX3Byb2plY3RlZF9wb3M7XFxuYXR0cmlidXRlIGZsb2F0IGFfZmFkZV9vcGFjaXR5O1xcblxcbi8vIGNvbnRlbnRzIG9mIGFfc2l6ZSB2YXJ5IGJhc2VkIG9uIHRoZSB0eXBlIG9mIHByb3BlcnR5IHZhbHVlXFxuLy8gdXNlZCBmb3Ige3RleHQsaWNvbn0tc2l6ZS5cXG4vLyBGb3IgY29uc3RhbnRzLCBhX3NpemUgaXMgZGlzYWJsZWQuXFxuLy8gRm9yIHNvdXJjZSBmdW5jdGlvbnMsIHdlIGJpbmQgb25seSBvbmUgdmFsdWUgcGVyIHZlcnRleDogdGhlIHZhbHVlIG9mIHt0ZXh0LGljb259LXNpemUgZXZhbHVhdGVkIGZvciB0aGUgY3VycmVudCBmZWF0dXJlLlxcbi8vIEZvciBjb21wb3NpdGUgZnVuY3Rpb25zOlxcbi8vIFsgdGV4dC1zaXplKGxvd2VyWm9vbVN0b3AsIGZlYXR1cmUpLFxcbi8vICAgdGV4dC1zaXplKHVwcGVyWm9vbVN0b3AsIGZlYXR1cmUpIF1cXG51bmlmb3JtIGJvb2wgdV9pc19zaXplX3pvb21fY29uc3RhbnQ7XFxudW5pZm9ybSBib29sIHVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50O1xcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9zaXplX3Q7IC8vIHVzZWQgdG8gaW50ZXJwb2xhdGUgYmV0d2VlbiB6b29tIHN0b3BzIHdoZW4gc2l6ZSBpcyBhIGNvbXBvc2l0ZSBmdW5jdGlvblxcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9zaXplOyAvLyB1c2VkIHdoZW4gc2l6ZSBpcyBib3RoIHpvb20gYW5kIGZlYXR1cmUgY29uc3RhbnRcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgZmlsbF9jb2xvclxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb193aWR0aFxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoYWxvX2JsdXJcXG5cXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVfbGFiZWxfcGxhbmVfbWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1X2dsX2Nvb3JkX21hdHJpeDtcXG5cXG51bmlmb3JtIGJvb2wgdV9pc190ZXh0O1xcbnVuaWZvcm0gYm9vbCB1X3BpdGNoX3dpdGhfbWFwO1xcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9waXRjaDtcXG51bmlmb3JtIGJvb2wgdV9yb3RhdGVfc3ltYm9sO1xcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9hc3BlY3RfcmF0aW87XFxudW5pZm9ybSBoaWdocCBmbG9hdCB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U7XFxudW5pZm9ybSBmbG9hdCB1X2ZhZGVfY2hhbmdlO1xcblxcbnVuaWZvcm0gdmVjMiB1X3RleHNpemU7XFxuXFxudmFyeWluZyB2ZWMyIHZfZGF0YTA7XFxudmFyeWluZyB2ZWMzIHZfZGF0YTE7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoYWxvX2JsdXJcXG5cXG4gICAgdmVjMiBhX3BvcyA9IGFfcG9zX29mZnNldC54eTtcXG4gICAgdmVjMiBhX29mZnNldCA9IGFfcG9zX29mZnNldC56dztcXG5cXG4gICAgdmVjMiBhX3RleCA9IGFfZGF0YS54eTtcXG4gICAgdmVjMiBhX3NpemUgPSBhX2RhdGEuenc7XFxuXFxuICAgIGhpZ2hwIGZsb2F0IHNlZ21lbnRfYW5nbGUgPSAtYV9wcm9qZWN0ZWRfcG9zWzJdO1xcbiAgICBmbG9hdCBzaXplO1xcblxcbiAgICBpZiAoIXVfaXNfc2l6ZV96b29tX2NvbnN0YW50ICYmICF1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge1xcbiAgICAgICAgc2l6ZSA9IG1peChhX3NpemVbMF0sIGFfc2l6ZVsxXSwgdV9zaXplX3QpIC8gMTAuMDtcXG4gICAgfSBlbHNlIGlmICh1X2lzX3NpemVfem9vbV9jb25zdGFudCAmJiAhdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtcXG4gICAgICAgIHNpemUgPSBhX3NpemVbMF0gLyAxMC4wO1xcbiAgICB9IGVsc2UgaWYgKCF1X2lzX3NpemVfem9vbV9jb25zdGFudCAmJiB1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge1xcbiAgICAgICAgc2l6ZSA9IHVfc2l6ZTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHNpemUgPSB1X3NpemU7XFxuICAgIH1cXG5cXG4gICAgdmVjNCBwcm9qZWN0ZWRQb2ludCA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XFxuICAgIGhpZ2hwIGZsb2F0IGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2UgPSBwcm9qZWN0ZWRQb2ludC53O1xcbiAgICAvLyBJZiB0aGUgbGFiZWwgaXMgcGl0Y2hlZCB3aXRoIHRoZSBtYXAsIGxheW91dCBpcyBkb25lIGluIHBpdGNoZWQgc3BhY2UsXFxuICAgIC8vIHdoaWNoIG1ha2VzIGxhYmVscyBpbiB0aGUgZGlzdGFuY2Ugc21hbGxlciByZWxhdGl2ZSB0byB2aWV3cG9ydCBzcGFjZS5cXG4gICAgLy8gV2UgY291bnRlcmFjdCBwYXJ0IG9mIHRoYXQgZWZmZWN0IGJ5IG11bHRpcGx5aW5nIGJ5IHRoZSBwZXJzcGVjdGl2ZSByYXRpby5cXG4gICAgLy8gSWYgdGhlIGxhYmVsIGlzbid0IHBpdGNoZWQgd2l0aCB0aGUgbWFwLCB3ZSBkbyBsYXlvdXQgaW4gdmlld3BvcnQgc3BhY2UsXFxuICAgIC8vIHdoaWNoIG1ha2VzIGxhYmVscyBpbiB0aGUgZGlzdGFuY2UgbGFyZ2VyIHJlbGF0aXZlIHRvIHRoZSBmZWF0dXJlcyBhcm91bmRcXG4gICAgLy8gdGhlbS4gV2UgY291bnRlcmFjdCBwYXJ0IG9mIHRoYXQgZWZmZWN0IGJ5IGRpdmlkaW5nIGJ5IHRoZSBwZXJzcGVjdGl2ZSByYXRpby5cXG4gICAgaGlnaHAgZmxvYXQgZGlzdGFuY2VfcmF0aW8gPSB1X3BpdGNoX3dpdGhfbWFwID9cXG4gICAgICAgIGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2UgLyB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UgOlxcbiAgICAgICAgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlIC8gY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZTtcXG4gICAgaGlnaHAgZmxvYXQgcGVyc3BlY3RpdmVfcmF0aW8gPSBjbGFtcChcXG4gICAgICAgIDAuNSArIDAuNSAqIGRpc3RhbmNlX3JhdGlvLFxcbiAgICAgICAgMC4wLCAvLyBQcmV2ZW50cyBvdmVyc2l6ZWQgbmVhci1maWVsZCBzeW1ib2xzIGluIHBpdGNoZWQvb3Zlcnpvb21lZCB0aWxlc1xcbiAgICAgICAgNC4wKTtcXG5cXG4gICAgc2l6ZSAqPSBwZXJzcGVjdGl2ZV9yYXRpbztcXG5cXG4gICAgZmxvYXQgZm9udFNjYWxlID0gdV9pc190ZXh0ID8gc2l6ZSAvIDI0LjAgOiBzaXplO1xcblxcbiAgICBoaWdocCBmbG9hdCBzeW1ib2xfcm90YXRpb24gPSAwLjA7XFxuICAgIGlmICh1X3JvdGF0ZV9zeW1ib2wpIHtcXG4gICAgICAgIC8vIFBvaW50IGxhYmVscyB3aXRoICdyb3RhdGlvbi1hbGlnbm1lbnQ6IG1hcCcgYXJlIGhvcml6b250YWwgd2l0aCByZXNwZWN0IHRvIHRpbGUgdW5pdHNcXG4gICAgICAgIC8vIFRvIGZpZ3VyZSBvdXQgdGhhdCBhbmdsZSBpbiBwcm9qZWN0ZWQgc3BhY2UsIHdlIGRyYXcgYSBzaG9ydCBob3Jpem9udGFsIGxpbmUgaW4gdGlsZVxcbiAgICAgICAgLy8gc3BhY2UsIHByb2plY3QgaXQsIGFuZCBtZWFzdXJlIGl0cyBhbmdsZSBpbiBwcm9qZWN0ZWQgc3BhY2UuXFxuICAgICAgICB2ZWM0IG9mZnNldFByb2plY3RlZFBvaW50ID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zICsgdmVjMigxLCAwKSwgMCwgMSk7XFxuXFxuICAgICAgICB2ZWMyIGEgPSBwcm9qZWN0ZWRQb2ludC54eSAvIHByb2plY3RlZFBvaW50Lnc7XFxuICAgICAgICB2ZWMyIGIgPSBvZmZzZXRQcm9qZWN0ZWRQb2ludC54eSAvIG9mZnNldFByb2plY3RlZFBvaW50Lnc7XFxuXFxuICAgICAgICBzeW1ib2xfcm90YXRpb24gPSBhdGFuKChiLnkgLSBhLnkpIC8gdV9hc3BlY3RfcmF0aW8sIGIueCAtIGEueCk7XFxuICAgIH1cXG5cXG4gICAgaGlnaHAgZmxvYXQgYW5nbGVfc2luID0gc2luKHNlZ21lbnRfYW5nbGUgKyBzeW1ib2xfcm90YXRpb24pO1xcbiAgICBoaWdocCBmbG9hdCBhbmdsZV9jb3MgPSBjb3Moc2VnbWVudF9hbmdsZSArIHN5bWJvbF9yb3RhdGlvbik7XFxuICAgIG1hdDIgcm90YXRpb25fbWF0cml4ID0gbWF0MihhbmdsZV9jb3MsIC0xLjAgKiBhbmdsZV9zaW4sIGFuZ2xlX3NpbiwgYW5nbGVfY29zKTtcXG5cXG4gICAgdmVjNCBwcm9qZWN0ZWRfcG9zID0gdV9sYWJlbF9wbGFuZV9tYXRyaXggKiB2ZWM0KGFfcHJvamVjdGVkX3Bvcy54eSwgMC4wLCAxLjApO1xcbiAgICBnbF9Qb3NpdGlvbiA9IHVfZ2xfY29vcmRfbWF0cml4ICogdmVjNChwcm9qZWN0ZWRfcG9zLnh5IC8gcHJvamVjdGVkX3Bvcy53ICsgcm90YXRpb25fbWF0cml4ICogKGFfb2Zmc2V0IC8gMzIuMCAqIGZvbnRTY2FsZSksIDAuMCwgMS4wKTtcXG4gICAgZmxvYXQgZ2FtbWFfc2NhbGUgPSBnbF9Qb3NpdGlvbi53O1xcblxcbiAgICB2ZWMyIHRleCA9IGFfdGV4IC8gdV90ZXhzaXplO1xcbiAgICB2ZWMyIGZhZGVfb3BhY2l0eSA9IHVucGFja19vcGFjaXR5KGFfZmFkZV9vcGFjaXR5KTtcXG4gICAgZmxvYXQgZmFkZV9jaGFuZ2UgPSBmYWRlX29wYWNpdHlbMV0gPiAwLjUgPyB1X2ZhZGVfY2hhbmdlIDogLXVfZmFkZV9jaGFuZ2U7XFxuICAgIGZsb2F0IGludGVycG9sYXRlZF9mYWRlX29wYWNpdHkgPSBtYXgoMC4wLCBtaW4oMS4wLCBmYWRlX29wYWNpdHlbMF0gKyBmYWRlX2NoYW5nZSkpO1xcblxcbiAgICB2X2RhdGEwID0gdmVjMih0ZXgueCwgdGV4LnkpO1xcbiAgICB2X2RhdGExID0gdmVjMyhnYW1tYV9zY2FsZSwgc2l6ZSwgaW50ZXJwb2xhdGVkX2ZhZGVfb3BhY2l0eSk7XFxufVxcblwifX0sdHI9LyNwcmFnbWEgbWFwYm94OiAoW1xcd10rKSAoW1xcd10rKSAoW1xcd10rKSAoW1xcd10rKS9nLGVyPWZ1bmN0aW9uKHQpe3ZhciBlPVFlW3RdLHI9e307ZS5mcmFnbWVudFNvdXJjZT1lLmZyYWdtZW50U291cmNlLnJlcGxhY2UodHIsZnVuY3Rpb24odCxlLG4saSxhKXtyZXR1cm4gclthXT0hMCxcImRlZmluZVwiPT09ZT9cIlxcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV9cIithK1wiXFxudmFyeWluZyBcIituK1wiIFwiK2krXCIgXCIrYStcIjtcXG4jZWxzZVxcbnVuaWZvcm0gXCIrbitcIiBcIitpK1wiIHVfXCIrYStcIjtcXG4jZW5kaWZcXG5cIjpcIlxcbiNpZmRlZiBIQVNfVU5JRk9STV91X1wiK2ErXCJcXG4gICAgXCIrbitcIiBcIitpK1wiIFwiK2ErXCIgPSB1X1wiK2ErXCI7XFxuI2VuZGlmXFxuXCJ9KSxlLnZlcnRleFNvdXJjZT1lLnZlcnRleFNvdXJjZS5yZXBsYWNlKHRyLGZ1bmN0aW9uKHQsZSxuLGksYSl7dmFyIG89XCJmbG9hdFwiPT09aT9cInZlYzJcIjpcInZlYzRcIjtyZXR1cm4gclthXT9cImRlZmluZVwiPT09ZT9cIlxcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV9cIithK1wiXFxudW5pZm9ybSBsb3dwIGZsb2F0IGFfXCIrYStcIl90O1xcbmF0dHJpYnV0ZSBcIituK1wiIFwiK28rXCIgYV9cIithK1wiO1xcbnZhcnlpbmcgXCIrbitcIiBcIitpK1wiIFwiK2ErXCI7XFxuI2Vsc2VcXG51bmlmb3JtIFwiK24rXCIgXCIraStcIiB1X1wiK2ErXCI7XFxuI2VuZGlmXFxuXCI6XCJcXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfXCIrYStcIlxcbiAgICBcIithK1wiID0gdW5wYWNrX21peF9cIitvK1wiKGFfXCIrYStcIiwgYV9cIithK1wiX3QpO1xcbiNlbHNlXFxuICAgIFwiK24rXCIgXCIraStcIiBcIithK1wiID0gdV9cIithK1wiO1xcbiNlbmRpZlxcblwiOlwiZGVmaW5lXCI9PT1lP1wiXFxuI2lmbmRlZiBIQVNfVU5JRk9STV91X1wiK2ErXCJcXG51bmlmb3JtIGxvd3AgZmxvYXQgYV9cIithK1wiX3Q7XFxuYXR0cmlidXRlIFwiK24rXCIgXCIrbytcIiBhX1wiK2ErXCI7XFxuI2Vsc2VcXG51bmlmb3JtIFwiK24rXCIgXCIraStcIiB1X1wiK2ErXCI7XFxuI2VuZGlmXFxuXCI6XCJcXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfXCIrYStcIlxcbiAgICBcIituK1wiIFwiK2krXCIgXCIrYStcIiA9IHVucGFja19taXhfXCIrbytcIihhX1wiK2ErXCIsIGFfXCIrYStcIl90KTtcXG4jZWxzZVxcbiAgICBcIituK1wiIFwiK2krXCIgXCIrYStcIiA9IHVfXCIrYStcIjtcXG4jZW5kaWZcXG5cIn0pfTtmb3IodmFyIHJyIGluIFFlKWVyKHJyKTt2YXIgbnI9UWUsaXI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5nbDt0aGlzLnByb2dyYW09aS5jcmVhdGVQcm9ncmFtKCk7dmFyIG89ci5kZWZpbmVzKCkuY29uY2F0KFwiI2RlZmluZSBERVZJQ0VfUElYRUxfUkFUSU8gXCIrYS5kZXZpY2VQaXhlbFJhdGlvLnRvRml4ZWQoMSkpO24mJm8ucHVzaChcIiNkZWZpbmUgT1ZFUkRSQVdfSU5TUEVDVE9SO1wiKTt2YXIgcz1vLmNvbmNhdChuci5wcmVsdWRlLmZyYWdtZW50U291cmNlLGUuZnJhZ21lbnRTb3VyY2UpLmpvaW4oXCJcXG5cIiksbD1vLmNvbmNhdChuci5wcmVsdWRlLnZlcnRleFNvdXJjZSxlLnZlcnRleFNvdXJjZSkuam9pbihcIlxcblwiKSxjPWkuY3JlYXRlU2hhZGVyKGkuRlJBR01FTlRfU0hBREVSKTtpLnNoYWRlclNvdXJjZShjLHMpLGkuY29tcGlsZVNoYWRlcihjKSxpLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sYyk7dmFyIHU9aS5jcmVhdGVTaGFkZXIoaS5WRVJURVhfU0hBREVSKTtpLnNoYWRlclNvdXJjZSh1LGwpLGkuY29tcGlsZVNoYWRlcih1KSxpLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sdSk7Zm9yKHZhciBoPXIubGF5b3V0QXR0cmlidXRlc3x8W10sZj0wO2Y8aC5sZW5ndGg7ZisrKWkuYmluZEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSxmLGhbZl0ubmFtZSk7aS5saW5rUHJvZ3JhbSh0aGlzLnByb2dyYW0pLHRoaXMubnVtQXR0cmlidXRlcz1pLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5wcm9ncmFtLGkuQUNUSVZFX0FUVFJJQlVURVMpLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLnVuaWZvcm1zPXt9O2Zvcih2YXIgcD0wO3A8dGhpcy5udW1BdHRyaWJ1dGVzO3ArKyl7dmFyIGQ9aS5nZXRBY3RpdmVBdHRyaWIodGhpcy5wcm9ncmFtLHApO2QmJih0aGlzLmF0dHJpYnV0ZXNbZC5uYW1lXT1pLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSxkLm5hbWUpKX1mb3IodmFyIGc9aS5nZXRQcm9ncmFtUGFyYW1ldGVyKHRoaXMucHJvZ3JhbSxpLkFDVElWRV9VTklGT1JNUyksdj0wO3Y8Zzt2Kyspe3ZhciBtPWkuZ2V0QWN0aXZlVW5pZm9ybSh0aGlzLnByb2dyYW0sdik7bSYmKHRoaXMudW5pZm9ybXNbbS5uYW1lXT1pLmdldFVuaWZvcm1Mb2NhdGlvbih0aGlzLnByb2dyYW0sbS5uYW1lKSl9fTtmdW5jdGlvbiBhcihlLHIsbixpLGEpe2Zvcih2YXIgbz0wO288bi5sZW5ndGg7bysrKXt2YXIgcz1uW29dO2lmKGkuaXNMZXNzVGhhbihzLnRpbGVJRCkpYnJlYWs7aWYoci5rZXk9PT1zLnRpbGVJRC5rZXkpcmV0dXJuO2lmKHMudGlsZUlELmlzQ2hpbGRPZihyKSl7Zm9yKHZhciBsPXIuY2hpbGRyZW4oMS8wKSxjPTA7YzxsLmxlbmd0aDtjKyspYXIoZSxsW2NdLG4uc2xpY2UobyksaSxhKTtyZXR1cm59fXZhciB1PXIub3ZlcnNjYWxlZFotZS5vdmVyc2NhbGVkWixoPW5ldyB0LkNhbm9uaWNhbFRpbGVJRCh1LHIuY2Fub25pY2FsLngtKGUuY2Fub25pY2FsLng8PHUpLHIuY2Fub25pY2FsLnktKGUuY2Fub25pY2FsLnk8PHUpKTthW2gua2V5XT1hW2gua2V5XXx8aH1mdW5jdGlvbiBvcih0LGUscixuLGkpe3ZhciBhPXQuY29udGV4dCxvPWEuZ2wscz1pP3QudXNlUHJvZ3JhbShcImNvbGxpc2lvbkNpcmNsZVwiKTp0LnVzZVByb2dyYW0oXCJjb2xsaXNpb25Cb3hcIik7YS5zZXREZXB0aE1vZGUocXQuZGlzYWJsZWQpLGEuc2V0U3RlbmNpbE1vZGUoSHQuZGlzYWJsZWQpLGEuc2V0Q29sb3JNb2RlKHQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKTtmb3IodmFyIGw9MDtsPG4ubGVuZ3RoO2wrKyl7dmFyIGM9bltsXSx1PWUuZ2V0VGlsZShjKSxoPXUuZ2V0QnVja2V0KHIpO2lmKGgpe3ZhciBmPWk/aC5jb2xsaXNpb25DaXJjbGU6aC5jb2xsaXNpb25Cb3g7aWYoZil7by51bmlmb3JtTWF0cml4NGZ2KHMudW5pZm9ybXMudV9tYXRyaXgsITEsYy5wb3NNYXRyaXgpLGl8fGEubGluZVdpZHRoLnNldCgxKSxvLnVuaWZvcm0xZihzLnVuaWZvcm1zLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSx0LnRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlKTt2YXIgcD1NZSh1LDEsdC50cmFuc2Zvcm0uem9vbSksZD1NYXRoLnBvdygyLHQudHJhbnNmb3JtLnpvb20tdS50aWxlSUQub3ZlcnNjYWxlZFopO28udW5pZm9ybTFmKHMudW5pZm9ybXMudV9waXhlbHNfdG9fdGlsZV91bml0cyxwKSxvLnVuaWZvcm0yZihzLnVuaWZvcm1zLnVfZXh0cnVkZV9zY2FsZSx0LnRyYW5zZm9ybS5waXhlbHNUb0dMVW5pdHNbMF0vKHAqZCksdC50cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzWzFdLyhwKmQpKSxvLnVuaWZvcm0xZihzLnVuaWZvcm1zLnVfb3ZlcnNjYWxlX2ZhY3Rvcix1LnRpbGVJRC5vdmVyc2NhbGVGYWN0b3IoKSkscy5kcmF3KGEsaT9vLlRSSUFOR0xFUzpvLkxJTkVTLHIuaWQsZi5sYXlvdXRWZXJ0ZXhCdWZmZXIsZi5pbmRleEJ1ZmZlcixmLnNlZ21lbnRzLG51bGwsZi5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIsbnVsbCl9fX19aXIucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwpe2Zvcih2YXIgYyx1PXQuZ2wsaD0oYz17fSxjW3UuTElORVNdPTIsY1t1LlRSSUFOR0xFU109MyxjKVtlXSxmPTAscD1hLmdldCgpO2Y8cC5sZW5ndGg7Zis9MSl7dmFyIGQ9cFtmXSxnPWQudmFvc3x8KGQudmFvcz17fSk7KGdbcl18fChnW3JdPW5ldyBRKSkuYmluZCh0LHRoaXMsbixvP28uZ2V0UGFpbnRWZXJ0ZXhCdWZmZXJzKCk6W10saSxkLnZlcnRleE9mZnNldCxzLGwpLHUuZHJhd0VsZW1lbnRzKGUsZC5wcmltaXRpdmVMZW5ndGgqaCx1LlVOU0lHTkVEX1NIT1JULGQucHJpbWl0aXZlT2Zmc2V0KmgqMil9fTt2YXIgc3I9dC5tYXQ0LmlkZW50aXR5KG5ldyBGbG9hdDMyQXJyYXkoMTYpKSxscj10LmRlZmF1bHQkMTkubGF5b3V0O2Z1bmN0aW9uIGNyKHQsZSxyLG4saSxhLG8scyxsLGMpe3ZhciB1LGg9dC5jb250ZXh0LGY9aC5nbCxwPXQudHJhbnNmb3JtLGQ9XCJtYXBcIj09PXMsZz1cIm1hcFwiPT09bCx2PWQmJlwibGluZVwiPT09ci5sYXlvdXQuZ2V0KFwic3ltYm9sLXBsYWNlbWVudFwiKSxtPWQmJiFnJiYhdix5PWc7aC5zZXREZXB0aE1vZGUoeT90LmRlcHRoTW9kZUZvclN1YmxheWVyKDAscXQuUmVhZE9ubHkpOnF0LmRpc2FibGVkKTtmb3IodmFyIHg9MCxiPW47eDxiLmxlbmd0aDt4Kz0xKXt2YXIgXz1iW3hdLHc9ZS5nZXRUaWxlKF8pLGs9dy5nZXRCdWNrZXQocik7aWYoayl7dmFyIEE9aT9rLnRleHQ6ay5pY29uO2lmKEEmJkEuc2VnbWVudHMuZ2V0KCkubGVuZ3RoKXt2YXIgVD1BLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQoci5pZCksTT1pfHxrLnNkZkljb25zLFM9aT9rLnRleHRTaXplRGF0YTprLmljb25TaXplRGF0YTtpZih1fHwodT10LnVzZVByb2dyYW0oTT9cInN5bWJvbFNERlwiOlwic3ltYm9sSWNvblwiLFQpLFQuc2V0VW5pZm9ybXModC5jb250ZXh0LHUsci5wYWludCx7em9vbTp0LnRyYW5zZm9ybS56b29tfSksdXIodSx0LHIsaSxtLGcsUykpLGguYWN0aXZlVGV4dHVyZS5zZXQoZi5URVhUVVJFMCksZi51bmlmb3JtMWkodS51bmlmb3Jtcy51X3RleHR1cmUsMCksaSl3LmdseXBoQXRsYXNUZXh0dXJlLmJpbmQoZi5MSU5FQVIsZi5DTEFNUF9UT19FREdFKSxmLnVuaWZvcm0yZnYodS51bmlmb3Jtcy51X3RleHNpemUsdy5nbHlwaEF0bGFzVGV4dHVyZS5zaXplKTtlbHNle3ZhciBFPTEhPT1yLmxheW91dC5nZXQoXCJpY29uLXNpemVcIikuY29uc3RhbnRPcigwKXx8ay5pY29uc05lZWRMaW5lYXIsQz1nfHwwIT09cC5waXRjaDt3Lmljb25BdGxhc1RleHR1cmUuYmluZChNfHx0Lm9wdGlvbnMucm90YXRpbmd8fHQub3B0aW9ucy56b29taW5nfHxFfHxDP2YuTElORUFSOmYuTkVBUkVTVCxmLkNMQU1QX1RPX0VER0UpLGYudW5pZm9ybTJmdih1LnVuaWZvcm1zLnVfdGV4c2l6ZSx3Lmljb25BdGxhc1RleHR1cmUuc2l6ZSl9Zi51bmlmb3JtTWF0cml4NGZ2KHUudW5pZm9ybXMudV9tYXRyaXgsITEsdC50cmFuc2xhdGVQb3NNYXRyaXgoXy5wb3NNYXRyaXgsdyxhLG8pKTt2YXIgTD1NZSh3LDEsdC50cmFuc2Zvcm0uem9vbSksej1oZShfLnBvc01hdHJpeCxnLGQsdC50cmFuc2Zvcm0sTCksTz1mZShfLnBvc01hdHJpeCxnLGQsdC50cmFuc2Zvcm0sTCk7Zi51bmlmb3JtTWF0cml4NGZ2KHUudW5pZm9ybXMudV9nbF9jb29yZF9tYXRyaXgsITEsdC50cmFuc2xhdGVQb3NNYXRyaXgoTyx3LGEsbywhMCkpLHY/KGYudW5pZm9ybU1hdHJpeDRmdih1LnVuaWZvcm1zLnVfbGFiZWxfcGxhbmVfbWF0cml4LCExLHNyKSxnZShrLF8ucG9zTWF0cml4LHQsaSx6LE8sZyxjKSk6Zi51bmlmb3JtTWF0cml4NGZ2KHUudW5pZm9ybXMudV9sYWJlbF9wbGFuZV9tYXRyaXgsITEseiksZi51bmlmb3JtMWYodS51bmlmb3Jtcy51X2ZhZGVfY2hhbmdlLHQub3B0aW9ucy5mYWRlRHVyYXRpb24/dC5zeW1ib2xGYWRlQ2hhbmdlOjEpLGhyKHUsVCx0LHIsdyxBLGksTSxnKX19fX1mdW5jdGlvbiB1cihlLHIsbixpLGEsbyxzKXt2YXIgbD1yLmNvbnRleHQuZ2wsYz1yLnRyYW5zZm9ybTtsLnVuaWZvcm0xaShlLnVuaWZvcm1zLnVfcGl0Y2hfd2l0aF9tYXAsbz8xOjApLGwudW5pZm9ybTFmKGUudW5pZm9ybXMudV9pc190ZXh0LGk/MTowKSxsLnVuaWZvcm0xZihlLnVuaWZvcm1zLnVfcGl0Y2gsYy5waXRjaC8zNjAqMipNYXRoLlBJKTt2YXIgdT1cImNvbnN0YW50XCI9PT1zLmZ1bmN0aW9uVHlwZXx8XCJzb3VyY2VcIj09PXMuZnVuY3Rpb25UeXBlLGg9XCJjb25zdGFudFwiPT09cy5mdW5jdGlvblR5cGV8fFwiY2FtZXJhXCI9PT1zLmZ1bmN0aW9uVHlwZTtsLnVuaWZvcm0xaShlLnVuaWZvcm1zLnVfaXNfc2l6ZV96b29tX2NvbnN0YW50LHU/MTowKSxsLnVuaWZvcm0xaShlLnVuaWZvcm1zLnVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50LGg/MTowKSxsLnVuaWZvcm0xZihlLnVuaWZvcm1zLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSxjLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UpO3ZhciBmPXQuZXZhbHVhdGVTaXplRm9yWm9vbShzLGMuem9vbSxsci5wcm9wZXJ0aWVzW2k/XCJ0ZXh0LXNpemVcIjpcImljb24tc2l6ZVwiXSk7dm9pZCAwIT09Zi51U2l6ZVQmJmwudW5pZm9ybTFmKGUudW5pZm9ybXMudV9zaXplX3QsZi51U2l6ZVQpLHZvaWQgMCE9PWYudVNpemUmJmwudW5pZm9ybTFmKGUudW5pZm9ybXMudV9zaXplLGYudVNpemUpLGwudW5pZm9ybTFmKGUudW5pZm9ybXMudV9hc3BlY3RfcmF0aW8sYy53aWR0aC9jLmhlaWdodCksbC51bmlmb3JtMWkoZS51bmlmb3Jtcy51X3JvdGF0ZV9zeW1ib2wsYT8xOjApfWZ1bmN0aW9uIGhyKHQsZSxyLG4saSxhLG8scyxsKXt2YXIgYz1yLmNvbnRleHQsdT1jLmdsLGg9ci50cmFuc2Zvcm07aWYocyl7dmFyIGY9MCE9PW4ucGFpbnQuZ2V0KG8/XCJ0ZXh0LWhhbG8td2lkdGhcIjpcImljb24taGFsby13aWR0aFwiKS5jb25zdGFudE9yKDEpLHA9bD9NYXRoLmNvcyhoLl9waXRjaCkqaC5jYW1lcmFUb0NlbnRlckRpc3RhbmNlOjE7dS51bmlmb3JtMWYodC51bmlmb3Jtcy51X2dhbW1hX3NjYWxlLHApLGYmJih1LnVuaWZvcm0xZih0LnVuaWZvcm1zLnVfaXNfaGFsbywxKSxmcihhLG4sYyx0KSksdS51bmlmb3JtMWYodC51bmlmb3Jtcy51X2lzX2hhbG8sMCl9ZnIoYSxuLGMsdCl9ZnVuY3Rpb24gZnIodCxlLHIsbil7bi5kcmF3KHIsci5nbC5UUklBTkdMRVMsZS5pZCx0LmxheW91dFZlcnRleEJ1ZmZlcix0LmluZGV4QnVmZmVyLHQuc2VnbWVudHMsdC5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KGUuaWQpLHQuZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlcix0Lm9wYWNpdHlWZXJ0ZXhCdWZmZXIpfWZ1bmN0aW9uIHByKHQsZSxyLG4saSxvLHMsbCxjKXt2YXIgdSxoLGYscCxkPWUuY29udGV4dCxnPWQuZ2wsdj1pLnBhaW50LmdldChcImxpbmUtZGFzaGFycmF5XCIpLG09aS5wYWludC5nZXQoXCJsaW5lLXBhdHRlcm5cIik7aWYobHx8Yyl7dmFyIHk9MS9NZShyLDEsZS50cmFuc2Zvcm0udGlsZVpvb20pO2lmKHYpe3U9ZS5saW5lQXRsYXMuZ2V0RGFzaCh2LmZyb20sXCJyb3VuZFwiPT09aS5sYXlvdXQuZ2V0KFwibGluZS1jYXBcIikpLGg9ZS5saW5lQXRsYXMuZ2V0RGFzaCh2LnRvLFwicm91bmRcIj09PWkubGF5b3V0LmdldChcImxpbmUtY2FwXCIpKTt2YXIgeD11LndpZHRoKnYuZnJvbVNjYWxlLGI9aC53aWR0aCp2LnRvU2NhbGU7Zy51bmlmb3JtMmYodC51bmlmb3Jtcy51X3BhdHRlcm5zY2FsZV9hLHkveCwtdS5oZWlnaHQvMiksZy51bmlmb3JtMmYodC51bmlmb3Jtcy51X3BhdHRlcm5zY2FsZV9iLHkvYiwtaC5oZWlnaHQvMiksZy51bmlmb3JtMWYodC51bmlmb3Jtcy51X3NkZmdhbW1hLGUubGluZUF0bGFzLndpZHRoLygyNTYqTWF0aC5taW4oeCxiKSphLmRldmljZVBpeGVsUmF0aW8pLzIpfWVsc2UgaWYobSl7aWYoZj1lLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKG0uZnJvbSkscD1lLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKG0udG8pLCFmfHwhcClyZXR1cm47Zy51bmlmb3JtMmYodC51bmlmb3Jtcy51X3BhdHRlcm5fc2l6ZV9hLGYuZGlzcGxheVNpemVbMF0qbS5mcm9tU2NhbGUveSxmLmRpc3BsYXlTaXplWzFdKSxnLnVuaWZvcm0yZih0LnVuaWZvcm1zLnVfcGF0dGVybl9zaXplX2IscC5kaXNwbGF5U2l6ZVswXSptLnRvU2NhbGUveSxwLmRpc3BsYXlTaXplWzFdKTt2YXIgXz1lLmltYWdlTWFuYWdlci5nZXRQaXhlbFNpemUoKSx3PV8ud2lkdGgsaz1fLmhlaWdodDtnLnVuaWZvcm0yZnYodC51bmlmb3Jtcy51X3RleHNpemUsW3csa10pfWcudW5pZm9ybTJmKHQudW5pZm9ybXMudV9nbF91bml0c190b19waXhlbHMsMS9lLnRyYW5zZm9ybS5waXhlbHNUb0dMVW5pdHNbMF0sMS9lLnRyYW5zZm9ybS5waXhlbHNUb0dMVW5pdHNbMV0pfWwmJih2PyhnLnVuaWZvcm0xaSh0LnVuaWZvcm1zLnVfaW1hZ2UsMCksZC5hY3RpdmVUZXh0dXJlLnNldChnLlRFWFRVUkUwKSxlLmxpbmVBdGxhcy5iaW5kKGQpLGcudW5pZm9ybTFmKHQudW5pZm9ybXMudV90ZXhfeV9hLHUueSksZy51bmlmb3JtMWYodC51bmlmb3Jtcy51X3RleF95X2IsaC55KSxnLnVuaWZvcm0xZih0LnVuaWZvcm1zLnVfbWl4LHYudCkpOm0mJihnLnVuaWZvcm0xaSh0LnVuaWZvcm1zLnVfaW1hZ2UsMCksZC5hY3RpdmVUZXh0dXJlLnNldChnLlRFWFRVUkUwKSxlLmltYWdlTWFuYWdlci5iaW5kKGQpLGcudW5pZm9ybTJmdih0LnVuaWZvcm1zLnVfcGF0dGVybl90bF9hLGYudGwpLGcudW5pZm9ybTJmdih0LnVuaWZvcm1zLnVfcGF0dGVybl9icl9hLGYuYnIpLGcudW5pZm9ybTJmdih0LnVuaWZvcm1zLnVfcGF0dGVybl90bF9iLHAudGwpLGcudW5pZm9ybTJmdih0LnVuaWZvcm1zLnVfcGF0dGVybl9icl9iLHAuYnIpLGcudW5pZm9ybTFmKHQudW5pZm9ybXMudV9mYWRlLG0udCkpKSxkLnNldFN0ZW5jaWxNb2RlKGUuc3RlbmNpbE1vZGVGb3JDbGlwcGluZyhvKSk7dmFyIEE9ZS50cmFuc2xhdGVQb3NNYXRyaXgoby5wb3NNYXRyaXgscixpLnBhaW50LmdldChcImxpbmUtdHJhbnNsYXRlXCIpLGkucGFpbnQuZ2V0KFwibGluZS10cmFuc2xhdGUtYW5jaG9yXCIpKTtpZihnLnVuaWZvcm1NYXRyaXg0ZnYodC51bmlmb3Jtcy51X21hdHJpeCwhMSxBKSxnLnVuaWZvcm0xZih0LnVuaWZvcm1zLnVfcmF0aW8sMS9NZShyLDEsZS50cmFuc2Zvcm0uem9vbSkpLGkucGFpbnQuZ2V0KFwibGluZS1ncmFkaWVudFwiKSl7ZC5hY3RpdmVUZXh0dXJlLnNldChnLlRFWFRVUkUwKTt2YXIgVD1pLmdyYWRpZW50VGV4dHVyZTtpZighaS5ncmFkaWVudClyZXR1cm47VHx8KFQ9aS5ncmFkaWVudFRleHR1cmU9bmV3IHooZCxpLmdyYWRpZW50LGcuUkdCQSkpLFQuYmluZChnLkxJTkVBUixnLkNMQU1QX1RPX0VER0UpLGcudW5pZm9ybTFpKHQudW5pZm9ybXMudV9pbWFnZSwwKX10LmRyYXcoZCxnLlRSSUFOR0xFUyxpLmlkLG4ubGF5b3V0VmVydGV4QnVmZmVyLG4uaW5kZXhCdWZmZXIsbi5zZWdtZW50cyxzKX12YXIgZHI9ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm4hMTt2YXIgcj1lLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKHQuZnJvbSksbj1lLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKHQudG8pO3JldHVybiFyfHwhbn0sZ3I9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuY29udGV4dCxpPW4uZ2wsYT1lLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKHQuZnJvbSksbz1lLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKHQudG8pO2kudW5pZm9ybTFpKHIudW5pZm9ybXMudV9pbWFnZSwwKSxpLnVuaWZvcm0yZnYoci51bmlmb3Jtcy51X3BhdHRlcm5fdGxfYSxhLnRsKSxpLnVuaWZvcm0yZnYoci51bmlmb3Jtcy51X3BhdHRlcm5fYnJfYSxhLmJyKSxpLnVuaWZvcm0yZnYoci51bmlmb3Jtcy51X3BhdHRlcm5fdGxfYixvLnRsKSxpLnVuaWZvcm0yZnYoci51bmlmb3Jtcy51X3BhdHRlcm5fYnJfYixvLmJyKTt2YXIgcz1lLmltYWdlTWFuYWdlci5nZXRQaXhlbFNpemUoKSxsPXMud2lkdGgsYz1zLmhlaWdodDtpLnVuaWZvcm0yZnYoci51bmlmb3Jtcy51X3RleHNpemUsW2wsY10pLGkudW5pZm9ybTFmKHIudW5pZm9ybXMudV9taXgsdC50KSxpLnVuaWZvcm0yZnYoci51bmlmb3Jtcy51X3BhdHRlcm5fc2l6ZV9hLGEuZGlzcGxheVNpemUpLGkudW5pZm9ybTJmdihyLnVuaWZvcm1zLnVfcGF0dGVybl9zaXplX2Isby5kaXNwbGF5U2l6ZSksaS51bmlmb3JtMWYoci51bmlmb3Jtcy51X3NjYWxlX2EsdC5mcm9tU2NhbGUpLGkudW5pZm9ybTFmKHIudW5pZm9ybXMudV9zY2FsZV9iLHQudG9TY2FsZSksbi5hY3RpdmVUZXh0dXJlLnNldChpLlRFWFRVUkUwKSxlLmltYWdlTWFuYWdlci5iaW5kKGUuY29udGV4dCl9LHZyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLmNvbnRleHQuZ2w7bi51bmlmb3JtMWYoci51bmlmb3Jtcy51X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLDEvTWUodCwxLGUudHJhbnNmb3JtLnRpbGVab29tKSk7dmFyIGk9TWF0aC5wb3coMix0LnRpbGVJRC5vdmVyc2NhbGVkWiksYT10LnRpbGVTaXplKk1hdGgucG93KDIsZS50cmFuc2Zvcm0udGlsZVpvb20pL2ksbz1hKih0LnRpbGVJRC5jYW5vbmljYWwueCt0LnRpbGVJRC53cmFwKmkpLHM9YSp0LnRpbGVJRC5jYW5vbmljYWwueTtuLnVuaWZvcm0yZihyLnVuaWZvcm1zLnVfcGl4ZWxfY29vcmRfdXBwZXIsbz4+MTYscz4+MTYpLG4udW5pZm9ybTJmKHIudW5pZm9ybXMudV9waXhlbF9jb29yZF9sb3dlciw2NTUzNSZvLDY1NTM1JnMpfTtmdW5jdGlvbiBtcih0LGUscixuLGkpe2lmKCFkcihyLnBhaW50LmdldChcImZpbGwtcGF0dGVyblwiKSx0KSlmb3IodmFyIGE9ITAsbz0wLHM9bjtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb10sYz1lLmdldFRpbGUobCksdT1jLmdldEJ1Y2tldChyKTt1JiYodC5jb250ZXh0LnNldFN0ZW5jaWxNb2RlKHQuc3RlbmNpbE1vZGVGb3JDbGlwcGluZyhsKSksaSh0LGUscixjLGwsdSxhKSxhPSExKX19ZnVuY3Rpb24geXIodCxlLHIsbixpLGEsbyl7dmFyIHM9dC5jb250ZXh0LmdsLGw9YS5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KHIuaWQpO2JyKFwiZmlsbFwiLHIucGFpbnQuZ2V0KFwiZmlsbC1wYXR0ZXJuXCIpLHQsbCxyLG4saSxvKS5kcmF3KHQuY29udGV4dCxzLlRSSUFOR0xFUyxyLmlkLGEubGF5b3V0VmVydGV4QnVmZmVyLGEuaW5kZXhCdWZmZXIsYS5zZWdtZW50cyxsKX1mdW5jdGlvbiB4cih0LGUscixuLGksYSxvKXt2YXIgcz10LmNvbnRleHQuZ2wsbD1hLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQoci5pZCksYz1icihcImZpbGxPdXRsaW5lXCIsci5nZXRQYWludFByb3BlcnR5KFwiZmlsbC1vdXRsaW5lLWNvbG9yXCIpP251bGw6ci5wYWludC5nZXQoXCJmaWxsLXBhdHRlcm5cIiksdCxsLHIsbixpLG8pO3MudW5pZm9ybTJmKGMudW5pZm9ybXMudV93b3JsZCxzLmRyYXdpbmdCdWZmZXJXaWR0aCxzLmRyYXdpbmdCdWZmZXJIZWlnaHQpLGMuZHJhdyh0LmNvbnRleHQscy5MSU5FUyxyLmlkLGEubGF5b3V0VmVydGV4QnVmZmVyLGEuaW5kZXhCdWZmZXIyLGEuc2VnbWVudHMyLGwpfWZ1bmN0aW9uIGJyKHQsZSxyLG4saSxhLG8scyl7dmFyIGwsYz1yLmNvbnRleHQucHJvZ3JhbS5nZXQoKTtyZXR1cm4gZT8obD1yLnVzZVByb2dyYW0odCtcIlBhdHRlcm5cIixuKSwoc3x8bC5wcm9ncmFtIT09YykmJihuLnNldFVuaWZvcm1zKHIuY29udGV4dCxsLGkucGFpbnQse3pvb206ci50cmFuc2Zvcm0uem9vbX0pLGdyKGUscixsKSksdnIoYSxyLGwpKToobD1yLnVzZVByb2dyYW0odCxuKSwoc3x8bC5wcm9ncmFtIT09YykmJm4uc2V0VW5pZm9ybXMoci5jb250ZXh0LGwsaS5wYWludCx7em9vbTpyLnRyYW5zZm9ybS56b29tfSkpLHIuY29udGV4dC5nbC51bmlmb3JtTWF0cml4NGZ2KGwudW5pZm9ybXMudV9tYXRyaXgsITEsci50cmFuc2xhdGVQb3NNYXRyaXgoby5wb3NNYXRyaXgsYSxpLnBhaW50LmdldChcImZpbGwtdHJhbnNsYXRlXCIpLGkucGFpbnQuZ2V0KFwiZmlsbC10cmFuc2xhdGUtYW5jaG9yXCIpKSksbH12YXIgX3I9dC5kZWZhdWx0JDIwLm1hdDMsd3I9dC5kZWZhdWx0JDIwLm1hdDQsa3I9dC5kZWZhdWx0JDIwLnZlYzM7ZnVuY3Rpb24gQXIodCxlLHIsbixpLGEsbyl7dmFyIHM9dC5jb250ZXh0LGw9cy5nbCxjPXIucGFpbnQuZ2V0KFwiZmlsbC1leHRydXNpb24tcGF0dGVyblwiKSx1PXQuY29udGV4dC5wcm9ncmFtLmdldCgpLGg9YS5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KHIuaWQpLGY9dC51c2VQcm9ncmFtKGM/XCJmaWxsRXh0cnVzaW9uUGF0dGVyblwiOlwiZmlsbEV4dHJ1c2lvblwiLGgpO2lmKChvfHxmLnByb2dyYW0hPT11KSYmaC5zZXRVbmlmb3JtcyhzLGYsci5wYWludCx7em9vbTp0LnRyYW5zZm9ybS56b29tfSksYyl7aWYoZHIoYyx0KSlyZXR1cm47Z3IoYyx0LGYpLHZyKG4sdCxmKSxsLnVuaWZvcm0xZihmLnVuaWZvcm1zLnVfaGVpZ2h0X2ZhY3RvciwtTWF0aC5wb3coMixpLm92ZXJzY2FsZWRaKS9uLnRpbGVTaXplLzgpfXQuY29udGV4dC5nbC51bmlmb3JtTWF0cml4NGZ2KGYudW5pZm9ybXMudV9tYXRyaXgsITEsdC50cmFuc2xhdGVQb3NNYXRyaXgoaS5wb3NNYXRyaXgsbixyLnBhaW50LmdldChcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZVwiKSxyLnBhaW50LmdldChcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3JcIikpKSxmdW5jdGlvbih0LGUpe3ZhciByPWUuY29udGV4dC5nbCxuPWUuc3R5bGUubGlnaHQsaT1uLnByb3BlcnRpZXMuZ2V0KFwicG9zaXRpb25cIiksYT1baS54LGkueSxpLnpdLG89X3IuY3JlYXRlKCk7XCJ2aWV3cG9ydFwiPT09bi5wcm9wZXJ0aWVzLmdldChcImFuY2hvclwiKSYmX3IuZnJvbVJvdGF0aW9uKG8sLWUudHJhbnNmb3JtLmFuZ2xlKSxrci50cmFuc2Zvcm1NYXQzKGEsYSxvKTt2YXIgcz1uLnByb3BlcnRpZXMuZ2V0KFwiY29sb3JcIik7ci51bmlmb3JtM2Z2KHQudW5pZm9ybXMudV9saWdodHBvcyxhKSxyLnVuaWZvcm0xZih0LnVuaWZvcm1zLnVfbGlnaHRpbnRlbnNpdHksbi5wcm9wZXJ0aWVzLmdldChcImludGVuc2l0eVwiKSksci51bmlmb3JtM2YodC51bmlmb3Jtcy51X2xpZ2h0Y29sb3Iscy5yLHMuZyxzLmIpfShmLHQpLGYuZHJhdyhzLGwuVFJJQU5HTEVTLHIuaWQsYS5sYXlvdXRWZXJ0ZXhCdWZmZXIsYS5pbmRleEJ1ZmZlcixhLnNlZ21lbnRzLGgpfWZ1bmN0aW9uIFRyKGUscixuKXt2YXIgaT1lLmNvbnRleHQsYT1pLmdsLG89ci5mYm87aWYobyl7dmFyIHM9ZS51c2VQcm9ncmFtKFwiaGlsbHNoYWRlXCIpLGw9ZS50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KHIudGlsZUlELnRvVW53cmFwcGVkKCksITApOyFmdW5jdGlvbih0LGUscil7dmFyIG49ci5wYWludC5nZXQoXCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWRpcmVjdGlvblwiKSooTWF0aC5QSS8xODApO1widmlld3BvcnRcIj09PXIucGFpbnQuZ2V0KFwiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1hbmNob3JcIikmJihuLT1lLnRyYW5zZm9ybS5hbmdsZSksZS5jb250ZXh0LmdsLnVuaWZvcm0yZih0LnVuaWZvcm1zLnVfbGlnaHQsci5wYWludC5nZXQoXCJoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uXCIpLG4pfShzLGUsbik7dmFyIGM9ZnVuY3Rpb24oZSxyKXt2YXIgbj1yLnRvQ29vcmRpbmF0ZSgpLGk9bmV3IHQuZGVmYXVsdCQxNyhuLmNvbHVtbixuLnJvdysxLG4uem9vbSk7cmV0dXJuW2UudHJhbnNmb3JtLmNvb3JkaW5hdGVMb2NhdGlvbihuKS5sYXQsZS50cmFuc2Zvcm0uY29vcmRpbmF0ZUxvY2F0aW9uKGkpLmxhdF19KGUsci50aWxlSUQpO2kuYWN0aXZlVGV4dHVyZS5zZXQoYS5URVhUVVJFMCksYS5iaW5kVGV4dHVyZShhLlRFWFRVUkVfMkQsby5jb2xvckF0dGFjaG1lbnQuZ2V0KCkpLGEudW5pZm9ybU1hdHJpeDRmdihzLnVuaWZvcm1zLnVfbWF0cml4LCExLGwpLGEudW5pZm9ybTJmdihzLnVuaWZvcm1zLnVfbGF0cmFuZ2UsYyksYS51bmlmb3JtMWkocy51bmlmb3Jtcy51X2ltYWdlLDApO3ZhciB1PW4ucGFpbnQuZ2V0KFwiaGlsbHNoYWRlLXNoYWRvdy1jb2xvclwiKTthLnVuaWZvcm00ZihzLnVuaWZvcm1zLnVfc2hhZG93LHUucix1LmcsdS5iLHUuYSk7dmFyIGg9bi5wYWludC5nZXQoXCJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yXCIpO2EudW5pZm9ybTRmKHMudW5pZm9ybXMudV9oaWdobGlnaHQsaC5yLGguZyxoLmIsaC5hKTt2YXIgZj1uLnBhaW50LmdldChcImhpbGxzaGFkZS1hY2NlbnQtY29sb3JcIik7aWYoYS51bmlmb3JtNGYocy51bmlmb3Jtcy51X2FjY2VudCxmLnIsZi5nLGYuYixmLmEpLHIubWFza2VkQm91bmRzQnVmZmVyJiZyLm1hc2tlZEluZGV4QnVmZmVyJiZyLnNlZ21lbnRzKXMuZHJhdyhpLGEuVFJJQU5HTEVTLG4uaWQsci5tYXNrZWRCb3VuZHNCdWZmZXIsci5tYXNrZWRJbmRleEJ1ZmZlcixyLnNlZ21lbnRzKTtlbHNle3ZhciBwPWUucmFzdGVyQm91bmRzQnVmZmVyO2UucmFzdGVyQm91bmRzVkFPLmJpbmQoaSxzLHAsW10pLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFX1NUUklQLDAscC5sZW5ndGgpfX19ZnVuY3Rpb24gTXIoZSxyLG4pe3ZhciBpPWUuY29udGV4dCxhPWkuZ2w7aWYoci5kZW0mJnIuZGVtLmxldmVsKXt2YXIgbz1yLmRlbS5sZXZlbC5kaW0scz1yLmRlbS5nZXRQaXhlbHMoKTtpZihpLmFjdGl2ZVRleHR1cmUuc2V0KGEuVEVYVFVSRTEpLGkucGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGEuc2V0KCExKSxyLmRlbVRleHR1cmU9ci5kZW1UZXh0dXJlfHxlLmdldFRpbGVUZXh0dXJlKHIudGlsZVNpemUpLHIuZGVtVGV4dHVyZSl7dmFyIGw9ci5kZW1UZXh0dXJlO2wudXBkYXRlKHMse3ByZW11bHRpcGx5OiExfSksbC5iaW5kKGEuTkVBUkVTVCxhLkNMQU1QX1RPX0VER0UpfWVsc2Ugci5kZW1UZXh0dXJlPW5ldyB6KGkscyxhLlJHQkEse3ByZW11bHRpcGx5OiExfSksci5kZW1UZXh0dXJlLmJpbmQoYS5ORUFSRVNULGEuQ0xBTVBfVE9fRURHRSk7aS5hY3RpdmVUZXh0dXJlLnNldChhLlRFWFRVUkUwKTt2YXIgYz1yLmZibztpZighYyl7dmFyIHU9bmV3IHooaSx7d2lkdGg6byxoZWlnaHQ6byxkYXRhOm51bGx9LGEuUkdCQSk7dS5iaW5kKGEuTElORUFSLGEuQ0xBTVBfVE9fRURHRSksKGM9ci5mYm89aS5jcmVhdGVGcmFtZWJ1ZmZlcihvLG8pKS5jb2xvckF0dGFjaG1lbnQuc2V0KHUudGV4dHVyZSl9aS5iaW5kRnJhbWVidWZmZXIuc2V0KGMuZnJhbWVidWZmZXIpLGkudmlld3BvcnQuc2V0KFswLDAsbyxvXSk7dmFyIGg9dC5tYXQ0LmNyZWF0ZSgpO3QubWF0NC5vcnRobyhoLDAsdC5kZWZhdWx0JDgsLXQuZGVmYXVsdCQ4LDAsMCwxKSx0Lm1hdDQudHJhbnNsYXRlKGgsaCxbMCwtdC5kZWZhdWx0JDgsMF0pO3ZhciBmPWUudXNlUHJvZ3JhbShcImhpbGxzaGFkZVByZXBhcmVcIik7YS51bmlmb3JtTWF0cml4NGZ2KGYudW5pZm9ybXMudV9tYXRyaXgsITEsaCksYS51bmlmb3JtMWYoZi51bmlmb3Jtcy51X3pvb20sci50aWxlSUQub3ZlcnNjYWxlZFopLGEudW5pZm9ybTJmdihmLnVuaWZvcm1zLnVfZGltZW5zaW9uLFsyKm8sMipvXSksYS51bmlmb3JtMWkoZi51bmlmb3Jtcy51X2ltYWdlLDEpLGEudW5pZm9ybTFmKGYudW5pZm9ybXMudV9tYXh6b29tLG4pO3ZhciBwPWUucmFzdGVyQm91bmRzQnVmZmVyO2UucmFzdGVyQm91bmRzVkFPLmJpbmQoaSxmLHAsW10pLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFX1NUUklQLDAscC5sZW5ndGgpLHIubmVlZHNIaWxsc2hhZGVQcmVwYXJlPSExfX1mdW5jdGlvbiBTcihlLHIsbixpLG8pe3ZhciBzPWkucGFpbnQuZ2V0KFwicmFzdGVyLWZhZGUtZHVyYXRpb25cIik7aWYocz4wKXt2YXIgbD1hLm5vdygpLGM9KGwtZS50aW1lQWRkZWQpL3MsdT1yPyhsLXIudGltZUFkZGVkKS9zOi0xLGg9bi5nZXRTb3VyY2UoKSxmPW8uY292ZXJpbmdab29tTGV2ZWwoe3RpbGVTaXplOmgudGlsZVNpemUscm91bmRab29tOmgucm91bmRab29tfSkscD0hcnx8TWF0aC5hYnMoci50aWxlSUQub3ZlcnNjYWxlZFotZik+TWF0aC5hYnMoZS50aWxlSUQub3ZlcnNjYWxlZFotZiksZD1wJiZlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uPzE6dC5jbGFtcChwP2M6MS11LDAsMSk7cmV0dXJuIGUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb24mJmM+PTEmJihlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uPSExKSxyP3tvcGFjaXR5OjEsbWl4OjEtZH06e29wYWNpdHk6ZCxtaXg6MH19cmV0dXJue29wYWNpdHk6MSxtaXg6MH19ZnVuY3Rpb24gRXIoZSxyLG4pe3ZhciBpPWUuY29udGV4dCxvPWkuZ2w7aS5saW5lV2lkdGguc2V0KDEqYS5kZXZpY2VQaXhlbFJhdGlvKTt2YXIgcz1uLnBvc01hdHJpeCxsPWUudXNlUHJvZ3JhbShcImRlYnVnXCIpO2kuc2V0RGVwdGhNb2RlKHF0LmRpc2FibGVkKSxpLnNldFN0ZW5jaWxNb2RlKEh0LmRpc2FibGVkKSxpLnNldENvbG9yTW9kZShlLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSksby51bmlmb3JtTWF0cml4NGZ2KGwudW5pZm9ybXMudV9tYXRyaXgsITEscyksby51bmlmb3JtNGYobC51bmlmb3Jtcy51X2NvbG9yLDEsMCwwLDEpLGUuZGVidWdWQU8uYmluZChpLGwsZS5kZWJ1Z0J1ZmZlcixbXSksby5kcmF3QXJyYXlzKG8uTElORV9TVFJJUCwwLGUuZGVidWdCdWZmZXIubGVuZ3RoKTtmb3IodmFyIGM9ZnVuY3Rpb24odCxlLHIsbil7bj1ufHwxO3ZhciBpLGEsbyxzLGwsYyx1LGgsZj1bXTtmb3IoaT0wLGE9dC5sZW5ndGg7aTxhO2krKylpZihsPUNyW3RbaV1dKXtmb3IoaD1udWxsLG89MCxzPWxbMV0ubGVuZ3RoO288cztvKz0yKS0xPT09bFsxXVtvXSYmLTE9PT1sWzFdW28rMV0/aD1udWxsOihjPWUrbFsxXVtvXSpuLHU9MjAwLWxbMV1bbysxXSpuLGgmJmYucHVzaChoLngsaC55LGMsdSksaD17eDpjLHk6dX0pO2UrPWxbMF0qbn1yZXR1cm4gZn0obi50b1N0cmluZygpLDUwLDAsNSksdT1uZXcgdC5Qb3NBcnJheSxoPTA7aDxjLmxlbmd0aDtoKz0yKXUuZW1wbGFjZUJhY2soY1toXSxjW2grMV0pO3ZhciBmPWkuY3JlYXRlVmVydGV4QnVmZmVyKHUsS2UubWVtYmVycyk7KG5ldyBRKS5iaW5kKGksbCxmLFtdKSxvLnVuaWZvcm00ZihsLnVuaWZvcm1zLnVfY29sb3IsMSwxLDEsMSk7Zm9yKHZhciBwPXIuZ2V0VGlsZShuKS50aWxlU2l6ZSxkPXQuZGVmYXVsdCQ4LyhNYXRoLnBvdygyLGUudHJhbnNmb3JtLnpvb20tbi5vdmVyc2NhbGVkWikqcCksZz1bWy0xLC0xXSxbLTEsMV0sWzEsLTFdLFsxLDFdXSx2PTA7djxnLmxlbmd0aDt2Kyspe3ZhciBtPWdbdl07by51bmlmb3JtTWF0cml4NGZ2KGwudW5pZm9ybXMudV9tYXRyaXgsITEsdC5tYXQ0LnRyYW5zbGF0ZShbXSxzLFtkKm1bMF0sZCptWzFdLDBdKSksby5kcmF3QXJyYXlzKG8uTElORVMsMCxmLmxlbmd0aCl9by51bmlmb3JtNGYobC51bmlmb3Jtcy51X2NvbG9yLDAsMCwwLDEpLG8udW5pZm9ybU1hdHJpeDRmdihsLnVuaWZvcm1zLnVfbWF0cml4LCExLHMpLG8uZHJhd0FycmF5cyhvLkxJTkVTLDAsZi5sZW5ndGgpfXZhciBDcj17XCIgXCI6WzE2LFtdXSxcIiFcIjpbMTAsWzUsMjEsNSw3LC0xLC0xLDUsMiw0LDEsNSwwLDYsMSw1LDJdXSwnXCInOlsxNixbNCwyMSw0LDE0LC0xLC0xLDEyLDIxLDEyLDE0XV0sXCIjXCI6WzIxLFsxMSwyNSw0LC03LC0xLC0xLDE3LDI1LDEwLC03LC0xLC0xLDQsMTIsMTgsMTIsLTEsLTEsMyw2LDE3LDZdXSwkOlsyMCxbOCwyNSw4LC00LC0xLC0xLDEyLDI1LDEyLC00LC0xLC0xLDE3LDE4LDE1LDIwLDEyLDIxLDgsMjEsNSwyMCwzLDE4LDMsMTYsNCwxNCw1LDEzLDcsMTIsMTMsMTAsMTUsOSwxNiw4LDE3LDYsMTcsMywxNSwxLDEyLDAsOCwwLDUsMSwzLDNdXSxcIiVcIjpbMjQsWzIxLDIxLDMsMCwtMSwtMSw4LDIxLDEwLDE5LDEwLDE3LDksMTUsNywxNCw1LDE0LDMsMTYsMywxOCw0LDIwLDYsMjEsOCwyMSwxMCwyMCwxMywxOSwxNiwxOSwxOSwyMCwyMSwyMSwtMSwtMSwxNyw3LDE1LDYsMTQsNCwxNCwyLDE2LDAsMTgsMCwyMCwxLDIxLDMsMjEsNSwxOSw3LDE3LDddXSxcIiZcIjpbMjYsWzIzLDEyLDIzLDEzLDIyLDE0LDIxLDE0LDIwLDEzLDE5LDExLDE3LDYsMTUsMywxMywxLDExLDAsNywwLDUsMSw0LDIsMyw0LDMsNiw0LDgsNSw5LDEyLDEzLDEzLDE0LDE0LDE2LDE0LDE4LDEzLDIwLDExLDIxLDksMjAsOCwxOCw4LDE2LDksMTMsMTEsMTAsMTYsMywxOCwxLDIwLDAsMjIsMCwyMywxLDIzLDJdXSxcIidcIjpbMTAsWzUsMTksNCwyMCw1LDIxLDYsMjAsNiwxOCw1LDE2LDQsMTVdXSxcIihcIjpbMTQsWzExLDI1LDksMjMsNywyMCw1LDE2LDQsMTEsNCw3LDUsMiw3LC0yLDksLTUsMTEsLTddXSxcIilcIjpbMTQsWzMsMjUsNSwyMyw3LDIwLDksMTYsMTAsMTEsMTAsNyw5LDIsNywtMiw1LC01LDMsLTddXSxcIipcIjpbMTYsWzgsMjEsOCw5LC0xLC0xLDMsMTgsMTMsMTIsLTEsLTEsMTMsMTgsMywxMl1dLFwiK1wiOlsyNixbMTMsMTgsMTMsMCwtMSwtMSw0LDksMjIsOV1dLFwiLFwiOlsxMCxbNiwxLDUsMCw0LDEsNSwyLDYsMSw2LC0xLDUsLTMsNCwtNF1dLFwiLVwiOlsyNixbNCw5LDIyLDldXSxcIi5cIjpbMTAsWzUsMiw0LDEsNSwwLDYsMSw1LDJdXSxcIi9cIjpbMjIsWzIwLDI1LDIsLTddXSwwOlsyMCxbOSwyMSw2LDIwLDQsMTcsMywxMiwzLDksNCw0LDYsMSw5LDAsMTEsMCwxNCwxLDE2LDQsMTcsOSwxNywxMiwxNiwxNywxNCwyMCwxMSwyMSw5LDIxXV0sMTpbMjAsWzYsMTcsOCwxOCwxMSwyMSwxMSwwXV0sMjpbMjAsWzQsMTYsNCwxNyw1LDE5LDYsMjAsOCwyMSwxMiwyMSwxNCwyMCwxNSwxOSwxNiwxNywxNiwxNSwxNSwxMywxMywxMCwzLDAsMTcsMF1dLDM6WzIwLFs1LDIxLDE2LDIxLDEwLDEzLDEzLDEzLDE1LDEyLDE2LDExLDE3LDgsMTcsNiwxNiwzLDE0LDEsMTEsMCw4LDAsNSwxLDQsMiwzLDRdXSw0OlsyMCxbMTMsMjEsMyw3LDE4LDcsLTEsLTEsMTMsMjEsMTMsMF1dLDU6WzIwLFsxNSwyMSw1LDIxLDQsMTIsNSwxMyw4LDE0LDExLDE0LDE0LDEzLDE2LDExLDE3LDgsMTcsNiwxNiwzLDE0LDEsMTEsMCw4LDAsNSwxLDQsMiwzLDRdXSw2OlsyMCxbMTYsMTgsMTUsMjAsMTIsMjEsMTAsMjEsNywyMCw1LDE3LDQsMTIsNCw3LDUsMyw3LDEsMTAsMCwxMSwwLDE0LDEsMTYsMywxNyw2LDE3LDcsMTYsMTAsMTQsMTIsMTEsMTMsMTAsMTMsNywxMiw1LDEwLDQsN11dLDc6WzIwLFsxNywyMSw3LDAsLTEsLTEsMywyMSwxNywyMV1dLDg6WzIwLFs4LDIxLDUsMjAsNCwxOCw0LDE2LDUsMTQsNywxMywxMSwxMiwxNCwxMSwxNiw5LDE3LDcsMTcsNCwxNiwyLDE1LDEsMTIsMCw4LDAsNSwxLDQsMiwzLDQsMyw3LDQsOSw2LDExLDksMTIsMTMsMTMsMTUsMTQsMTYsMTYsMTYsMTgsMTUsMjAsMTIsMjEsOCwyMV1dLDk6WzIwLFsxNiwxNCwxNSwxMSwxMyw5LDEwLDgsOSw4LDYsOSw0LDExLDMsMTQsMywxNSw0LDE4LDYsMjAsOSwyMSwxMCwyMSwxMywyMCwxNSwxOCwxNiwxNCwxNiw5LDE1LDQsMTMsMSwxMCwwLDgsMCw1LDEsNCwzXV0sXCI6XCI6WzEwLFs1LDE0LDQsMTMsNSwxMiw2LDEzLDUsMTQsLTEsLTEsNSwyLDQsMSw1LDAsNiwxLDUsMl1dLFwiO1wiOlsxMCxbNSwxNCw0LDEzLDUsMTIsNiwxMyw1LDE0LC0xLC0xLDYsMSw1LDAsNCwxLDUsMiw2LDEsNiwtMSw1LC0zLDQsLTRdXSxcIjxcIjpbMjQsWzIwLDE4LDQsOSwyMCwwXV0sXCI9XCI6WzI2LFs0LDEyLDIyLDEyLC0xLC0xLDQsNiwyMiw2XV0sXCI+XCI6WzI0LFs0LDE4LDIwLDksNCwwXV0sXCI/XCI6WzE4LFszLDE2LDMsMTcsNCwxOSw1LDIwLDcsMjEsMTEsMjEsMTMsMjAsMTQsMTksMTUsMTcsMTUsMTUsMTQsMTMsMTMsMTIsOSwxMCw5LDcsLTEsLTEsOSwyLDgsMSw5LDAsMTAsMSw5LDJdXSxcIkBcIjpbMjcsWzE4LDEzLDE3LDE1LDE1LDE2LDEyLDE2LDEwLDE1LDksMTQsOCwxMSw4LDgsOSw2LDExLDUsMTQsNSwxNiw2LDE3LDgsLTEsLTEsMTIsMTYsMTAsMTQsOSwxMSw5LDgsMTAsNiwxMSw1LC0xLC0xLDE4LDE2LDE3LDgsMTcsNiwxOSw1LDIxLDUsMjMsNywyNCwxMCwyNCwxMiwyMywxNSwyMiwxNywyMCwxOSwxOCwyMCwxNSwyMSwxMiwyMSw5LDIwLDcsMTksNSwxNyw0LDE1LDMsMTIsMyw5LDQsNiw1LDQsNywyLDksMSwxMiwwLDE1LDAsMTgsMSwyMCwyLDIxLDMsLTEsLTEsMTksMTYsMTgsOCwxOCw2LDE5LDVdXSxBOlsxOCxbOSwyMSwxLDAsLTEsLTEsOSwyMSwxNywwLC0xLC0xLDQsNywxNCw3XV0sQjpbMjEsWzQsMjEsNCwwLC0xLC0xLDQsMjEsMTMsMjEsMTYsMjAsMTcsMTksMTgsMTcsMTgsMTUsMTcsMTMsMTYsMTIsMTMsMTEsLTEsLTEsNCwxMSwxMywxMSwxNiwxMCwxNyw5LDE4LDcsMTgsNCwxNywyLDE2LDEsMTMsMCw0LDBdXSxDOlsyMSxbMTgsMTYsMTcsMTgsMTUsMjAsMTMsMjEsOSwyMSw3LDIwLDUsMTgsNCwxNiwzLDEzLDMsOCw0LDUsNSwzLDcsMSw5LDAsMTMsMCwxNSwxLDE3LDMsMTgsNV1dLEQ6WzIxLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDExLDIxLDE0LDIwLDE2LDE4LDE3LDE2LDE4LDEzLDE4LDgsMTcsNSwxNiwzLDE0LDEsMTEsMCw0LDBdXSxFOlsxOSxbNCwyMSw0LDAsLTEsLTEsNCwyMSwxNywyMSwtMSwtMSw0LDExLDEyLDExLC0xLC0xLDQsMCwxNywwXV0sRjpbMTgsWzQsMjEsNCwwLC0xLC0xLDQsMjEsMTcsMjEsLTEsLTEsNCwxMSwxMiwxMV1dLEc6WzIxLFsxOCwxNiwxNywxOCwxNSwyMCwxMywyMSw5LDIxLDcsMjAsNSwxOCw0LDE2LDMsMTMsMyw4LDQsNSw1LDMsNywxLDksMCwxMywwLDE1LDEsMTcsMywxOCw1LDE4LDgsLTEsLTEsMTMsOCwxOCw4XV0sSDpbMjIsWzQsMjEsNCwwLC0xLC0xLDE4LDIxLDE4LDAsLTEsLTEsNCwxMSwxOCwxMV1dLEk6WzgsWzQsMjEsNCwwXV0sSjpbMTYsWzEyLDIxLDEyLDUsMTEsMiwxMCwxLDgsMCw2LDAsNCwxLDMsMiwyLDUsMiw3XV0sSzpbMjEsWzQsMjEsNCwwLC0xLC0xLDE4LDIxLDQsNywtMSwtMSw5LDEyLDE4LDBdXSxMOlsxNyxbNCwyMSw0LDAsLTEsLTEsNCwwLDE2LDBdXSxNOlsyNCxbNCwyMSw0LDAsLTEsLTEsNCwyMSwxMiwwLC0xLC0xLDIwLDIxLDEyLDAsLTEsLTEsMjAsMjEsMjAsMF1dLE46WzIyLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDE4LDAsLTEsLTEsMTgsMjEsMTgsMF1dLE86WzIyLFs5LDIxLDcsMjAsNSwxOCw0LDE2LDMsMTMsMyw4LDQsNSw1LDMsNywxLDksMCwxMywwLDE1LDEsMTcsMywxOCw1LDE5LDgsMTksMTMsMTgsMTYsMTcsMTgsMTUsMjAsMTMsMjEsOSwyMV1dLFA6WzIxLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDEzLDIxLDE2LDIwLDE3LDE5LDE4LDE3LDE4LDE0LDE3LDEyLDE2LDExLDEzLDEwLDQsMTBdXSxROlsyMixbOSwyMSw3LDIwLDUsMTgsNCwxNiwzLDEzLDMsOCw0LDUsNSwzLDcsMSw5LDAsMTMsMCwxNSwxLDE3LDMsMTgsNSwxOSw4LDE5LDEzLDE4LDE2LDE3LDE4LDE1LDIwLDEzLDIxLDksMjEsLTEsLTEsMTIsNCwxOCwtMl1dLFI6WzIxLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDEzLDIxLDE2LDIwLDE3LDE5LDE4LDE3LDE4LDE1LDE3LDEzLDE2LDEyLDEzLDExLDQsMTEsLTEsLTEsMTEsMTEsMTgsMF1dLFM6WzIwLFsxNywxOCwxNSwyMCwxMiwyMSw4LDIxLDUsMjAsMywxOCwzLDE2LDQsMTQsNSwxMyw3LDEyLDEzLDEwLDE1LDksMTYsOCwxNyw2LDE3LDMsMTUsMSwxMiwwLDgsMCw1LDEsMywzXV0sVDpbMTYsWzgsMjEsOCwwLC0xLC0xLDEsMjEsMTUsMjFdXSxVOlsyMixbNCwyMSw0LDYsNSwzLDcsMSwxMCwwLDEyLDAsMTUsMSwxNywzLDE4LDYsMTgsMjFdXSxWOlsxOCxbMSwyMSw5LDAsLTEsLTEsMTcsMjEsOSwwXV0sVzpbMjQsWzIsMjEsNywwLC0xLC0xLDEyLDIxLDcsMCwtMSwtMSwxMiwyMSwxNywwLC0xLC0xLDIyLDIxLDE3LDBdXSxYOlsyMCxbMywyMSwxNywwLC0xLC0xLDE3LDIxLDMsMF1dLFk6WzE4LFsxLDIxLDksMTEsOSwwLC0xLC0xLDE3LDIxLDksMTFdXSxaOlsyMCxbMTcsMjEsMywwLC0xLC0xLDMsMjEsMTcsMjEsLTEsLTEsMywwLDE3LDBdXSxcIltcIjpbMTQsWzQsMjUsNCwtNywtMSwtMSw1LDI1LDUsLTcsLTEsLTEsNCwyNSwxMSwyNSwtMSwtMSw0LC03LDExLC03XV0sXCJcXFxcXCI6WzE0LFswLDIxLDE0LC0zXV0sXCJdXCI6WzE0LFs5LDI1LDksLTcsLTEsLTEsMTAsMjUsMTAsLTcsLTEsLTEsMywyNSwxMCwyNSwtMSwtMSwzLC03LDEwLC03XV0sXCJeXCI6WzE2LFs2LDE1LDgsMTgsMTAsMTUsLTEsLTEsMywxMiw4LDE3LDEzLDEyLC0xLC0xLDgsMTcsOCwwXV0sXzpbMTYsWzAsLTIsMTYsLTJdXSxcImBcIjpbMTAsWzYsMjEsNSwyMCw0LDE4LDQsMTYsNSwxNSw2LDE2LDUsMTddXSxhOlsxOSxbMTUsMTQsMTUsMCwtMSwtMSwxNSwxMSwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0sYjpbMTksWzQsMjEsNCwwLC0xLC0xLDQsMTEsNiwxMyw4LDE0LDExLDE0LDEzLDEzLDE1LDExLDE2LDgsMTYsNiwxNSwzLDEzLDEsMTEsMCw4LDAsNiwxLDQsM11dLGM6WzE4LFsxNSwxMSwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0sZDpbMTksWzE1LDIxLDE1LDAsLTEsLTEsMTUsMTEsMTMsMTMsMTEsMTQsOCwxNCw2LDEzLDQsMTEsMyw4LDMsNiw0LDMsNiwxLDgsMCwxMSwwLDEzLDEsMTUsM11dLGU6WzE4LFszLDgsMTUsOCwxNSwxMCwxNCwxMiwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0sZjpbMTIsWzEwLDIxLDgsMjEsNiwyMCw1LDE3LDUsMCwtMSwtMSwyLDE0LDksMTRdXSxnOlsxOSxbMTUsMTQsMTUsLTIsMTQsLTUsMTMsLTYsMTEsLTcsOCwtNyw2LC02LC0xLC0xLDE1LDExLDEzLDEzLDExLDE0LDgsMTQsNiwxMyw0LDExLDMsOCwzLDYsNCwzLDYsMSw4LDAsMTEsMCwxMywxLDE1LDNdXSxoOlsxOSxbNCwyMSw0LDAsLTEsLTEsNCwxMCw3LDEzLDksMTQsMTIsMTQsMTQsMTMsMTUsMTAsMTUsMF1dLGk6WzgsWzMsMjEsNCwyMCw1LDIxLDQsMjIsMywyMSwtMSwtMSw0LDE0LDQsMF1dLGo6WzEwLFs1LDIxLDYsMjAsNywyMSw2LDIyLDUsMjEsLTEsLTEsNiwxNCw2LC0zLDUsLTYsMywtNywxLC03XV0sazpbMTcsWzQsMjEsNCwwLC0xLC0xLDE0LDE0LDQsNCwtMSwtMSw4LDgsMTUsMF1dLGw6WzgsWzQsMjEsNCwwXV0sbTpbMzAsWzQsMTQsNCwwLC0xLC0xLDQsMTAsNywxMyw5LDE0LDEyLDE0LDE0LDEzLDE1LDEwLDE1LDAsLTEsLTEsMTUsMTAsMTgsMTMsMjAsMTQsMjMsMTQsMjUsMTMsMjYsMTAsMjYsMF1dLG46WzE5LFs0LDE0LDQsMCwtMSwtMSw0LDEwLDcsMTMsOSwxNCwxMiwxNCwxNCwxMywxNSwxMCwxNSwwXV0sbzpbMTksWzgsMTQsNiwxMyw0LDExLDMsOCwzLDYsNCwzLDYsMSw4LDAsMTEsMCwxMywxLDE1LDMsMTYsNiwxNiw4LDE1LDExLDEzLDEzLDExLDE0LDgsMTRdXSxwOlsxOSxbNCwxNCw0LC03LC0xLC0xLDQsMTEsNiwxMyw4LDE0LDExLDE0LDEzLDEzLDE1LDExLDE2LDgsMTYsNiwxNSwzLDEzLDEsMTEsMCw4LDAsNiwxLDQsM11dLHE6WzE5LFsxNSwxNCwxNSwtNywtMSwtMSwxNSwxMSwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0scjpbMTMsWzQsMTQsNCwwLC0xLC0xLDQsOCw1LDExLDcsMTMsOSwxNCwxMiwxNF1dLHM6WzE3LFsxNCwxMSwxMywxMywxMCwxNCw3LDE0LDQsMTMsMywxMSw0LDksNiw4LDExLDcsMTMsNiwxNCw0LDE0LDMsMTMsMSwxMCwwLDcsMCw0LDEsMywzXV0sdDpbMTIsWzUsMjEsNSw0LDYsMSw4LDAsMTAsMCwtMSwtMSwyLDE0LDksMTRdXSx1OlsxOSxbNCwxNCw0LDQsNSwxLDcsMCwxMCwwLDEyLDEsMTUsNCwtMSwtMSwxNSwxNCwxNSwwXV0sdjpbMTYsWzIsMTQsOCwwLC0xLC0xLDE0LDE0LDgsMF1dLHc6WzIyLFszLDE0LDcsMCwtMSwtMSwxMSwxNCw3LDAsLTEsLTEsMTEsMTQsMTUsMCwtMSwtMSwxOSwxNCwxNSwwXV0seDpbMTcsWzMsMTQsMTQsMCwtMSwtMSwxNCwxNCwzLDBdXSx5OlsxNixbMiwxNCw4LDAsLTEsLTEsMTQsMTQsOCwwLDYsLTQsNCwtNiwyLC03LDEsLTddXSx6OlsxNyxbMTQsMTQsMywwLC0xLC0xLDMsMTQsMTQsMTQsLTEsLTEsMywwLDE0LDBdXSxcIntcIjpbMTQsWzksMjUsNywyNCw2LDIzLDUsMjEsNSwxOSw2LDE3LDcsMTYsOCwxNCw4LDEyLDYsMTAsLTEsLTEsNywyNCw2LDIyLDYsMjAsNywxOCw4LDE3LDksMTUsOSwxMyw4LDExLDQsOSw4LDcsOSw1LDksMyw4LDEsNywwLDYsLTIsNiwtNCw3LC02LC0xLC0xLDYsOCw4LDYsOCw0LDcsMiw2LDEsNSwtMSw1LC0zLDYsLTUsNywtNiw5LC03XV0sXCJ8XCI6WzgsWzQsMjUsNCwtN11dLFwifVwiOlsxNCxbNSwyNSw3LDI0LDgsMjMsOSwyMSw5LDE5LDgsMTcsNywxNiw2LDE0LDYsMTIsOCwxMCwtMSwtMSw3LDI0LDgsMjIsOCwyMCw3LDE4LDYsMTcsNSwxNSw1LDEzLDYsMTEsMTAsOSw2LDcsNSw1LDUsMyw2LDEsNywwLDgsLTIsOCwtNCw3LC02LC0xLC0xLDgsOCw2LDYsNiw0LDcsMiw4LDEsOSwtMSw5LC0zLDgsLTUsNywtNiw1LC03XV0sXCJ+XCI6WzI0LFszLDYsMyw4LDQsMTEsNiwxMiw4LDEyLDEwLDExLDE0LDgsMTYsNywxOCw3LDIwLDgsMjEsMTAsLTEsLTEsMyw4LDQsMTAsNiwxMSw4LDExLDEwLDEwLDE0LDcsMTYsNiwxOCw2LDIwLDcsMjEsMTAsMjEsMTJdXX0sTHI9e3N5bWJvbDpmdW5jdGlvbih0LGUscixuKXtpZihcInRyYW5zbHVjZW50XCI9PT10LnJlbmRlclBhc3Mpe3ZhciBpPXQuY29udGV4dDtpLnNldFN0ZW5jaWxNb2RlKEh0LmRpc2FibGVkKSxpLnNldENvbG9yTW9kZSh0LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSksMCE9PXIucGFpbnQuZ2V0KFwiaWNvbi1vcGFjaXR5XCIpLmNvbnN0YW50T3IoMSkmJmNyKHQsZSxyLG4sITEsci5wYWludC5nZXQoXCJpY29uLXRyYW5zbGF0ZVwiKSxyLnBhaW50LmdldChcImljb24tdHJhbnNsYXRlLWFuY2hvclwiKSxyLmxheW91dC5nZXQoXCJpY29uLXJvdGF0aW9uLWFsaWdubWVudFwiKSxyLmxheW91dC5nZXQoXCJpY29uLXBpdGNoLWFsaWdubWVudFwiKSxyLmxheW91dC5nZXQoXCJpY29uLWtlZXAtdXByaWdodFwiKSksMCE9PXIucGFpbnQuZ2V0KFwidGV4dC1vcGFjaXR5XCIpLmNvbnN0YW50T3IoMSkmJmNyKHQsZSxyLG4sITAsci5wYWludC5nZXQoXCJ0ZXh0LXRyYW5zbGF0ZVwiKSxyLnBhaW50LmdldChcInRleHQtdHJhbnNsYXRlLWFuY2hvclwiKSxyLmxheW91dC5nZXQoXCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudFwiKSxyLmxheW91dC5nZXQoXCJ0ZXh0LXBpdGNoLWFsaWdubWVudFwiKSxyLmxheW91dC5nZXQoXCJ0ZXh0LWtlZXAtdXByaWdodFwiKSksZS5tYXAuc2hvd0NvbGxpc2lvbkJveGVzJiZmdW5jdGlvbih0LGUscixuKXtvcih0LGUscixuLCExKSxvcih0LGUscixuLCEwKX0odCxlLHIsbil9fSxjaXJjbGU6ZnVuY3Rpb24odCxlLHIsbil7aWYoXCJ0cmFuc2x1Y2VudFwiPT09dC5yZW5kZXJQYXNzKXt2YXIgaT1yLnBhaW50LmdldChcImNpcmNsZS1vcGFjaXR5XCIpLGE9ci5wYWludC5nZXQoXCJjaXJjbGUtc3Ryb2tlLXdpZHRoXCIpLG89ci5wYWludC5nZXQoXCJjaXJjbGUtc3Ryb2tlLW9wYWNpdHlcIik7aWYoMCE9PWkuY29uc3RhbnRPcigxKXx8MCE9PWEuY29uc3RhbnRPcigxKSYmMCE9PW8uY29uc3RhbnRPcigxKSl7dmFyIHM9dC5jb250ZXh0LGw9cy5nbDtzLnNldERlcHRoTW9kZSh0LmRlcHRoTW9kZUZvclN1YmxheWVyKDAscXQuUmVhZE9ubHkpKSxzLnNldFN0ZW5jaWxNb2RlKEh0LmRpc2FibGVkKSxzLnNldENvbG9yTW9kZSh0LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSk7Zm9yKHZhciBjPSEwLHU9MDt1PG4ubGVuZ3RoO3UrKyl7dmFyIGg9blt1XSxmPWUuZ2V0VGlsZShoKSxwPWYuZ2V0QnVja2V0KHIpO2lmKHApe3ZhciBkPXQuY29udGV4dC5wcm9ncmFtLmdldCgpLGc9cC5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KHIuaWQpLHY9dC51c2VQcm9ncmFtKFwiY2lyY2xlXCIsZyk7aWYoKGN8fHYucHJvZ3JhbSE9PWQpJiYoZy5zZXRVbmlmb3JtcyhzLHYsci5wYWludCx7em9vbTp0LnRyYW5zZm9ybS56b29tfSksYz0hMSksbC51bmlmb3JtMWYodi51bmlmb3Jtcy51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UsdC50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSksbC51bmlmb3JtMWkodi51bmlmb3Jtcy51X3NjYWxlX3dpdGhfbWFwLFwibWFwXCI9PT1yLnBhaW50LmdldChcImNpcmNsZS1waXRjaC1zY2FsZVwiKT8xOjApLFwibWFwXCI9PT1yLnBhaW50LmdldChcImNpcmNsZS1waXRjaC1hbGlnbm1lbnRcIikpe2wudW5pZm9ybTFpKHYudW5pZm9ybXMudV9waXRjaF93aXRoX21hcCwxKTt2YXIgbT1NZShmLDEsdC50cmFuc2Zvcm0uem9vbSk7bC51bmlmb3JtMmYodi51bmlmb3Jtcy51X2V4dHJ1ZGVfc2NhbGUsbSxtKX1lbHNlIGwudW5pZm9ybTFpKHYudW5pZm9ybXMudV9waXRjaF93aXRoX21hcCwwKSxsLnVuaWZvcm0yZnYodi51bmlmb3Jtcy51X2V4dHJ1ZGVfc2NhbGUsdC50cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzKTtsLnVuaWZvcm1NYXRyaXg0ZnYodi51bmlmb3Jtcy51X21hdHJpeCwhMSx0LnRyYW5zbGF0ZVBvc01hdHJpeChoLnBvc01hdHJpeCxmLHIucGFpbnQuZ2V0KFwiY2lyY2xlLXRyYW5zbGF0ZVwiKSxyLnBhaW50LmdldChcImNpcmNsZS10cmFuc2xhdGUtYW5jaG9yXCIpKSksdi5kcmF3KHMsbC5UUklBTkdMRVMsci5pZCxwLmxheW91dFZlcnRleEJ1ZmZlcixwLmluZGV4QnVmZmVyLHAuc2VnbWVudHMsZyl9fX19fSxoZWF0bWFwOmZ1bmN0aW9uKGUscixuLGkpe2lmKDAhPT1uLnBhaW50LmdldChcImhlYXRtYXAtb3BhY2l0eVwiKSlpZihcIm9mZnNjcmVlblwiPT09ZS5yZW5kZXJQYXNzKXt2YXIgYT1lLmNvbnRleHQsbz1hLmdsO2Euc2V0RGVwdGhNb2RlKGUuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCxxdC5SZWFkT25seSkpLGEuc2V0U3RlbmNpbE1vZGUoSHQuZGlzYWJsZWQpLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmdsO3QuYWN0aXZlVGV4dHVyZS5zZXQobi5URVhUVVJFMSksdC52aWV3cG9ydC5zZXQoWzAsMCxlLndpZHRoLzQsZS5oZWlnaHQvNF0pO3ZhciBpPXIuaGVhdG1hcEZibztpZihpKW4uYmluZFRleHR1cmUobi5URVhUVVJFXzJELGkuY29sb3JBdHRhY2htZW50LmdldCgpKSx0LmJpbmRGcmFtZWJ1ZmZlci5zZXQoaS5mcmFtZWJ1ZmZlcik7ZWxzZXt2YXIgYT1uLmNyZWF0ZVRleHR1cmUoKTtuLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCxhKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1Msbi5DTEFNUF9UT19FREdFKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1Qsbi5DTEFNUF9UT19FREdFKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NSU5fRklMVEVSLG4uTElORUFSKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NQUdfRklMVEVSLG4uTElORUFSKSxpPXIuaGVhdG1hcEZibz10LmNyZWF0ZUZyYW1lYnVmZmVyKGUud2lkdGgvNCxlLmhlaWdodC80KSxmdW5jdGlvbiB0KGUscixuLGkpe3ZhciBhPWUuZ2w7YS50ZXhJbWFnZTJEKGEuVEVYVFVSRV8yRCwwLGEuUkdCQSxyLndpZHRoLzQsci5oZWlnaHQvNCwwLGEuUkdCQSxlLmV4dFRleHR1cmVIYWxmRmxvYXQ/ZS5leHRUZXh0dXJlSGFsZkZsb2F0LkhBTEZfRkxPQVRfT0VTOmEuVU5TSUdORURfQllURSxudWxsKSxpLmNvbG9yQXR0YWNobWVudC5zZXQobiksZS5leHRUZXh0dXJlSGFsZkZsb2F0JiZhLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoYS5GUkFNRUJVRkZFUikhPT1hLkZSQU1FQlVGRkVSX0NPTVBMRVRFJiYoZS5leHRUZXh0dXJlSGFsZkZsb2F0PW51bGwsaS5jb2xvckF0dGFjaG1lbnQuc2V0RGlydHkoKSx0KGUscixuLGkpKX0odCxlLGEsaSl9fShhLGUsbiksYS5jbGVhcih7Y29sb3I6dC5kZWZhdWx0JDYudHJhbnNwYXJlbnR9KSxhLnNldENvbG9yTW9kZShuZXcgR3QoW28uT05FLG8uT05FXSx0LmRlZmF1bHQkNi50cmFuc3BhcmVudCxbITAsITAsITAsITBdKSk7Zm9yKHZhciBzPSEwLGw9MDtsPGkubGVuZ3RoO2wrKyl7dmFyIGM9aVtsXTtpZighci5oYXNSZW5kZXJhYmxlUGFyZW50KGMpKXt2YXIgdT1yLmdldFRpbGUoYyksaD11LmdldEJ1Y2tldChuKTtpZihoKXt2YXIgZj1lLmNvbnRleHQucHJvZ3JhbS5nZXQoKSxwPWgucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChuLmlkKSxkPWUudXNlUHJvZ3JhbShcImhlYXRtYXBcIixwKSxnPWUudHJhbnNmb3JtLnpvb207KHN8fGQucHJvZ3JhbSE9PWYpJiYocC5zZXRVbmlmb3JtcyhlLmNvbnRleHQsZCxuLnBhaW50LHt6b29tOmd9KSxzPSExKSxvLnVuaWZvcm0xZihkLnVuaWZvcm1zLnVfZXh0cnVkZV9zY2FsZSxNZSh1LDEsZykpLG8udW5pZm9ybTFmKGQudW5pZm9ybXMudV9pbnRlbnNpdHksbi5wYWludC5nZXQoXCJoZWF0bWFwLWludGVuc2l0eVwiKSksby51bmlmb3JtTWF0cml4NGZ2KGQudW5pZm9ybXMudV9tYXRyaXgsITEsYy5wb3NNYXRyaXgpLGQuZHJhdyhhLG8uVFJJQU5HTEVTLG4uaWQsaC5sYXlvdXRWZXJ0ZXhCdWZmZXIsaC5pbmRleEJ1ZmZlcixoLnNlZ21lbnRzLHApfX19YS52aWV3cG9ydC5zZXQoWzAsMCxlLndpZHRoLGUuaGVpZ2h0XSl9ZWxzZVwidHJhbnNsdWNlbnRcIj09PWUucmVuZGVyUGFzcyYmKGUuY29udGV4dC5zZXRDb2xvck1vZGUoZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpLGZ1bmN0aW9uKGUscil7dmFyIG49ZS5jb250ZXh0LGk9bi5nbCxhPXIuaGVhdG1hcEZibztpZihhKXtuLmFjdGl2ZVRleHR1cmUuc2V0KGkuVEVYVFVSRTApLGkuYmluZFRleHR1cmUoaS5URVhUVVJFXzJELGEuY29sb3JBdHRhY2htZW50LmdldCgpKSxuLmFjdGl2ZVRleHR1cmUuc2V0KGkuVEVYVFVSRTEpO3ZhciBvPXIuY29sb3JSYW1wVGV4dHVyZTtvfHwobz1yLmNvbG9yUmFtcFRleHR1cmU9bmV3IHoobixyLmNvbG9yUmFtcCxpLlJHQkEpKSxvLmJpbmQoaS5MSU5FQVIsaS5DTEFNUF9UT19FREdFKSxuLnNldERlcHRoTW9kZShxdC5kaXNhYmxlZCk7dmFyIHM9ZS51c2VQcm9ncmFtKFwiaGVhdG1hcFRleHR1cmVcIiksbD1yLnBhaW50LmdldChcImhlYXRtYXAtb3BhY2l0eVwiKTtpLnVuaWZvcm0xZihzLnVuaWZvcm1zLnVfb3BhY2l0eSxsKSxpLnVuaWZvcm0xaShzLnVuaWZvcm1zLnVfaW1hZ2UsMCksaS51bmlmb3JtMWkocy51bmlmb3Jtcy51X2NvbG9yX3JhbXAsMSk7dmFyIGM9dC5tYXQ0LmNyZWF0ZSgpO3QubWF0NC5vcnRobyhjLDAsZS53aWR0aCxlLmhlaWdodCwwLDAsMSksaS51bmlmb3JtTWF0cml4NGZ2KHMudW5pZm9ybXMudV9tYXRyaXgsITEsYyksaS51bmlmb3JtMmYocy51bmlmb3Jtcy51X3dvcmxkLGkuZHJhd2luZ0J1ZmZlcldpZHRoLGkuZHJhd2luZ0J1ZmZlckhlaWdodCksZS52aWV3cG9ydFZBTy5iaW5kKGUuY29udGV4dCxzLGUudmlld3BvcnRCdWZmZXIsW10pLGkuZHJhd0FycmF5cyhpLlRSSUFOR0xFX1NUUklQLDAsNCl9fShlLG4pKX0sbGluZTpmdW5jdGlvbih0LGUscixuKXtpZihcInRyYW5zbHVjZW50XCI9PT10LnJlbmRlclBhc3MmJjAhPT1yLnBhaW50LmdldChcImxpbmUtb3BhY2l0eVwiKS5jb25zdGFudE9yKDEpKXt2YXIgaT10LmNvbnRleHQ7aS5zZXREZXB0aE1vZGUodC5kZXB0aE1vZGVGb3JTdWJsYXllcigwLHF0LlJlYWRPbmx5KSksaS5zZXRDb2xvck1vZGUodC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpO2Zvcih2YXIgYSxvPXIucGFpbnQuZ2V0KFwibGluZS1kYXNoYXJyYXlcIik/XCJsaW5lU0RGXCI6ci5wYWludC5nZXQoXCJsaW5lLXBhdHRlcm5cIik/XCJsaW5lUGF0dGVyblwiOnIucGFpbnQuZ2V0KFwibGluZS1ncmFkaWVudFwiKT9cImxpbmVHcmFkaWVudFwiOlwibGluZVwiLHM9ITAsbD0wLGM9bjtsPGMubGVuZ3RoO2wrPTEpe3ZhciB1PWNbbF0saD1lLmdldFRpbGUodSksZj1oLmdldEJ1Y2tldChyKTtpZihmKXt2YXIgcD1mLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQoci5pZCksZD10LmNvbnRleHQucHJvZ3JhbS5nZXQoKSxnPXQudXNlUHJvZ3JhbShvLHApLHY9c3x8Zy5wcm9ncmFtIT09ZCxtPWEhPT1oLnRpbGVJRC5vdmVyc2NhbGVkWjt2JiZwLnNldFVuaWZvcm1zKHQuY29udGV4dCxnLHIucGFpbnQse3pvb206dC50cmFuc2Zvcm0uem9vbX0pLHByKGcsdCxoLGYscix1LHAsdixtKSxhPWgudGlsZUlELm92ZXJzY2FsZWRaLHM9ITF9fX19LGZpbGw6ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9bi5wYWludC5nZXQoXCJmaWxsLWNvbG9yXCIpLG89bi5wYWludC5nZXQoXCJmaWxsLW9wYWNpdHlcIik7aWYoMCE9PW8uY29uc3RhbnRPcigxKSl7dmFyIHM9ZS5jb250ZXh0O3Muc2V0Q29sb3JNb2RlKGUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKTt2YXIgbD1uLnBhaW50LmdldChcImZpbGwtcGF0dGVyblwiKXx8MSE9PWEuY29uc3RhbnRPcih0LmRlZmF1bHQkNi50cmFuc3BhcmVudCkuYXx8MSE9PW8uY29uc3RhbnRPcigwKT9cInRyYW5zbHVjZW50XCI6XCJvcGFxdWVcIjtlLnJlbmRlclBhc3M9PT1sJiYocy5zZXREZXB0aE1vZGUoZS5kZXB0aE1vZGVGb3JTdWJsYXllcigxLFwib3BhcXVlXCI9PT1lLnJlbmRlclBhc3M/cXQuUmVhZFdyaXRlOnF0LlJlYWRPbmx5KSksbXIoZSxyLG4saSx5cikpLFwidHJhbnNsdWNlbnRcIj09PWUucmVuZGVyUGFzcyYmbi5wYWludC5nZXQoXCJmaWxsLWFudGlhbGlhc1wiKSYmKHMubGluZVdpZHRoLnNldCgyKSxzLnNldERlcHRoTW9kZShlLmRlcHRoTW9kZUZvclN1YmxheWVyKG4uZ2V0UGFpbnRQcm9wZXJ0eShcImZpbGwtb3V0bGluZS1jb2xvclwiKT8yOjAscXQuUmVhZE9ubHkpKSxtcihlLHIsbixpLHhyKSl9fSxcImZpbGwtZXh0cnVzaW9uXCI6ZnVuY3Rpb24oZSxyLG4saSl7aWYoMCE9PW4ucGFpbnQuZ2V0KFwiZmlsbC1leHRydXNpb24tb3BhY2l0eVwiKSlpZihcIm9mZnNjcmVlblwiPT09ZS5yZW5kZXJQYXNzKXshZnVuY3Rpb24oZSxyKXt2YXIgbj1lLmNvbnRleHQsaT1uLmdsLGE9ci52aWV3cG9ydEZyYW1lO2lmKGUuZGVwdGhSYm9OZWVkc0NsZWFyJiZlLnNldHVwT2Zmc2NyZWVuRGVwdGhSZW5kZXJidWZmZXIoKSwhYSl7dmFyIG89bmV3IHoobix7d2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHQsZGF0YTpudWxsfSxpLlJHQkEpO28uYmluZChpLkxJTkVBUixpLkNMQU1QX1RPX0VER0UpLChhPXIudmlld3BvcnRGcmFtZT1uLmNyZWF0ZUZyYW1lYnVmZmVyKGUud2lkdGgsZS5oZWlnaHQpKS5jb2xvckF0dGFjaG1lbnQuc2V0KG8udGV4dHVyZSl9bi5iaW5kRnJhbWVidWZmZXIuc2V0KGEuZnJhbWVidWZmZXIpLGEuZGVwdGhBdHRhY2htZW50LnNldChlLmRlcHRoUmJvKSxlLmRlcHRoUmJvTmVlZHNDbGVhciYmKG4uY2xlYXIoe2RlcHRoOjF9KSxlLmRlcHRoUmJvTmVlZHNDbGVhcj0hMSksbi5jbGVhcih7Y29sb3I6dC5kZWZhdWx0JDYudHJhbnNwYXJlbnR9KSxuLnNldFN0ZW5jaWxNb2RlKEh0LmRpc2FibGVkKSxuLnNldERlcHRoTW9kZShuZXcgcXQoaS5MRVFVQUwscXQuUmVhZFdyaXRlLFswLDFdKSksbi5zZXRDb2xvck1vZGUoZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpfShlLG4pO2Zvcih2YXIgYT0hMCxvPTAscz1pO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXSxjPXIuZ2V0VGlsZShsKSx1PWMuZ2V0QnVja2V0KG4pO3UmJihBcihlLDAsbixjLGwsdSxhKSxhPSExKX19ZWxzZVwidHJhbnNsdWNlbnRcIj09PWUucmVuZGVyUGFzcyYmZnVuY3Rpb24odCxlKXt2YXIgcj1lLnZpZXdwb3J0RnJhbWU7aWYocil7dmFyIG49dC5jb250ZXh0LGk9bi5nbCxhPXQudXNlUHJvZ3JhbShcImV4dHJ1c2lvblRleHR1cmVcIik7bi5zZXRTdGVuY2lsTW9kZShIdC5kaXNhYmxlZCksbi5zZXREZXB0aE1vZGUocXQuZGlzYWJsZWQpLG4uc2V0Q29sb3JNb2RlKHQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKSxuLmFjdGl2ZVRleHR1cmUuc2V0KGkuVEVYVFVSRTApLGkuYmluZFRleHR1cmUoaS5URVhUVVJFXzJELHIuY29sb3JBdHRhY2htZW50LmdldCgpKSxpLnVuaWZvcm0xZihhLnVuaWZvcm1zLnVfb3BhY2l0eSxlLnBhaW50LmdldChcImZpbGwtZXh0cnVzaW9uLW9wYWNpdHlcIikpLGkudW5pZm9ybTFpKGEudW5pZm9ybXMudV9pbWFnZSwwKTt2YXIgbz13ci5jcmVhdGUoKTt3ci5vcnRobyhvLDAsdC53aWR0aCx0LmhlaWdodCwwLDAsMSksaS51bmlmb3JtTWF0cml4NGZ2KGEudW5pZm9ybXMudV9tYXRyaXgsITEsbyksaS51bmlmb3JtMmYoYS51bmlmb3Jtcy51X3dvcmxkLGkuZHJhd2luZ0J1ZmZlcldpZHRoLGkuZHJhd2luZ0J1ZmZlckhlaWdodCksdC52aWV3cG9ydFZBTy5iaW5kKG4sYSx0LnZpZXdwb3J0QnVmZmVyLFtdKSxpLmRyYXdBcnJheXMoaS5UUklBTkdMRV9TVFJJUCwwLDQpfX0oZSxuKX0saGlsbHNoYWRlOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKFwib2Zmc2NyZWVuXCI9PT10LnJlbmRlclBhc3N8fFwidHJhbnNsdWNlbnRcIj09PXQucmVuZGVyUGFzcyl7dmFyIGk9dC5jb250ZXh0LGE9ZS5nZXRTb3VyY2UoKS5tYXh6b29tO2kuc2V0RGVwdGhNb2RlKHQuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCxxdC5SZWFkT25seSkpLGkuc2V0U3RlbmNpbE1vZGUoSHQuZGlzYWJsZWQpLGkuc2V0Q29sb3JNb2RlKHQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKTtmb3IodmFyIG89MCxzPW47bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dLGM9ZS5nZXRUaWxlKGwpO2MubmVlZHNIaWxsc2hhZGVQcmVwYXJlJiZcIm9mZnNjcmVlblwiPT09dC5yZW5kZXJQYXNzP01yKHQsYyxhKTpcInRyYW5zbHVjZW50XCI9PT10LnJlbmRlclBhc3MmJlRyKHQsYyxyKX1pLnZpZXdwb3J0LnNldChbMCwwLHQud2lkdGgsdC5oZWlnaHRdKX19LHJhc3RlcjpmdW5jdGlvbih0LGUscixuKXtpZihcInRyYW5zbHVjZW50XCI9PT10LnJlbmRlclBhc3MmJjAhPT1yLnBhaW50LmdldChcInJhc3Rlci1vcGFjaXR5XCIpKXt2YXIgaSxhLG89dC5jb250ZXh0LHM9by5nbCxsPWUuZ2V0U291cmNlKCksYz10LnVzZVByb2dyYW0oXCJyYXN0ZXJcIik7by5zZXRTdGVuY2lsTW9kZShIdC5kaXNhYmxlZCksby5zZXRDb2xvck1vZGUodC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpLHMudW5pZm9ybTFmKGMudW5pZm9ybXMudV9icmlnaHRuZXNzX2xvdyxyLnBhaW50LmdldChcInJhc3Rlci1icmlnaHRuZXNzLW1pblwiKSkscy51bmlmb3JtMWYoYy51bmlmb3Jtcy51X2JyaWdodG5lc3NfaGlnaCxyLnBhaW50LmdldChcInJhc3Rlci1icmlnaHRuZXNzLW1heFwiKSkscy51bmlmb3JtMWYoYy51bmlmb3Jtcy51X3NhdHVyYXRpb25fZmFjdG9yLChpPXIucGFpbnQuZ2V0KFwicmFzdGVyLXNhdHVyYXRpb25cIikpPjA/MS0xLygxLjAwMS1pKTotaSkscy51bmlmb3JtMWYoYy51bmlmb3Jtcy51X2NvbnRyYXN0X2ZhY3RvciwoYT1yLnBhaW50LmdldChcInJhc3Rlci1jb250cmFzdFwiKSk+MD8xLygxLWEpOjErYSkscy51bmlmb3JtM2Z2KGMudW5pZm9ybXMudV9zcGluX3dlaWdodHMsZnVuY3Rpb24odCl7dCo9TWF0aC5QSS8xODA7dmFyIGU9TWF0aC5zaW4odCkscj1NYXRoLmNvcyh0KTtyZXR1cm5bKDIqcisxKS8zLCgtTWF0aC5zcXJ0KDMpKmUtcisxKS8zLChNYXRoLnNxcnQoMykqZS1yKzEpLzNdfShyLnBhaW50LmdldChcInJhc3Rlci1odWUtcm90YXRlXCIpKSkscy51bmlmb3JtMWYoYy51bmlmb3Jtcy51X2J1ZmZlcl9zY2FsZSwxKSxzLnVuaWZvcm0xaShjLnVuaWZvcm1zLnVfaW1hZ2UwLDApLHMudW5pZm9ybTFpKGMudW5pZm9ybXMudV9pbWFnZTEsMSk7Zm9yKHZhciB1PW4ubGVuZ3RoJiZuWzBdLm92ZXJzY2FsZWRaLGg9MCxmPW47aDxmLmxlbmd0aDtoKz0xKXt2YXIgcD1mW2hdO28uc2V0RGVwdGhNb2RlKHQuZGVwdGhNb2RlRm9yU3VibGF5ZXIocC5vdmVyc2NhbGVkWi11LDE9PT1yLnBhaW50LmdldChcInJhc3Rlci1vcGFjaXR5XCIpP3F0LlJlYWRXcml0ZTpxdC5SZWFkT25seSxzLkxFU1MpKTt2YXIgZD1lLmdldFRpbGUocCksZz10LnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgocC50b1Vud3JhcHBlZCgpLCEwKTtkLnJlZ2lzdGVyRmFkZUR1cmF0aW9uKHIucGFpbnQuZ2V0KFwicmFzdGVyLWZhZGUtZHVyYXRpb25cIikpLHMudW5pZm9ybU1hdHJpeDRmdihjLnVuaWZvcm1zLnVfbWF0cml4LCExLGcpO3ZhciB2PWUuZmluZExvYWRlZFBhcmVudChwLDAse30pLG09U3IoZCx2LGUscix0LnRyYW5zZm9ybSkseT12b2lkIDAseD12b2lkIDA7aWYoby5hY3RpdmVUZXh0dXJlLnNldChzLlRFWFRVUkUwKSxkLnRleHR1cmUuYmluZChzLkxJTkVBUixzLkNMQU1QX1RPX0VER0Uscy5MSU5FQVJfTUlQTUFQX05FQVJFU1QpLG8uYWN0aXZlVGV4dHVyZS5zZXQocy5URVhUVVJFMSksdj8odi50ZXh0dXJlLmJpbmQocy5MSU5FQVIscy5DTEFNUF9UT19FREdFLHMuTElORUFSX01JUE1BUF9ORUFSRVNUKSx5PU1hdGgucG93KDIsdi50aWxlSUQub3ZlcnNjYWxlZFotZC50aWxlSUQub3ZlcnNjYWxlZFopLHg9W2QudGlsZUlELmNhbm9uaWNhbC54KnklMSxkLnRpbGVJRC5jYW5vbmljYWwueSp5JTFdKTpkLnRleHR1cmUuYmluZChzLkxJTkVBUixzLkNMQU1QX1RPX0VER0Uscy5MSU5FQVJfTUlQTUFQX05FQVJFU1QpLHMudW5pZm9ybTJmdihjLnVuaWZvcm1zLnVfdGxfcGFyZW50LHh8fFswLDBdKSxzLnVuaWZvcm0xZihjLnVuaWZvcm1zLnVfc2NhbGVfcGFyZW50LHl8fDEpLHMudW5pZm9ybTFmKGMudW5pZm9ybXMudV9mYWRlX3QsbS5taXgpLHMudW5pZm9ybTFmKGMudW5pZm9ybXMudV9vcGFjaXR5LG0ub3BhY2l0eSpyLnBhaW50LmdldChcInJhc3Rlci1vcGFjaXR5XCIpKSxsIGluc3RhbmNlb2YgdHQpe3ZhciBiPWwuYm91bmRzQnVmZmVyO2wuYm91bmRzVkFPLmJpbmQobyxjLGIsW10pLHMuZHJhd0FycmF5cyhzLlRSSUFOR0xFX1NUUklQLDAsYi5sZW5ndGgpfWVsc2UgaWYoZC5tYXNrZWRCb3VuZHNCdWZmZXImJmQubWFza2VkSW5kZXhCdWZmZXImJmQuc2VnbWVudHMpYy5kcmF3KG8scy5UUklBTkdMRVMsci5pZCxkLm1hc2tlZEJvdW5kc0J1ZmZlcixkLm1hc2tlZEluZGV4QnVmZmVyLGQuc2VnbWVudHMpO2Vsc2V7dmFyIF89dC5yYXN0ZXJCb3VuZHNCdWZmZXI7dC5yYXN0ZXJCb3VuZHNWQU8uYmluZChvLGMsXyxbXSkscy5kcmF3QXJyYXlzKHMuVFJJQU5HTEVfU1RSSVAsMCxfLmxlbmd0aCl9fX19LGJhY2tncm91bmQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIucGFpbnQuZ2V0KFwiYmFja2dyb3VuZC1jb2xvclwiKSxpPXIucGFpbnQuZ2V0KFwiYmFja2dyb3VuZC1vcGFjaXR5XCIpO2lmKDAhPT1pKXt2YXIgYT10LmNvbnRleHQsbz1hLmdsLHM9dC50cmFuc2Zvcm0sbD1zLnRpbGVTaXplLGM9ci5wYWludC5nZXQoXCJiYWNrZ3JvdW5kLXBhdHRlcm5cIiksdT1jfHwxIT09bi5hfHwxIT09aT9cInRyYW5zbHVjZW50XCI6XCJvcGFxdWVcIjtpZih0LnJlbmRlclBhc3M9PT11KXt2YXIgaDtpZihhLnNldFN0ZW5jaWxNb2RlKEh0LmRpc2FibGVkKSxhLnNldERlcHRoTW9kZSh0LmRlcHRoTW9kZUZvclN1YmxheWVyKDAsXCJvcGFxdWVcIj09PXU/cXQuUmVhZFdyaXRlOnF0LlJlYWRPbmx5KSksYS5zZXRDb2xvck1vZGUodC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpLGMpe2lmKGRyKGMsdCkpcmV0dXJuO2g9dC51c2VQcm9ncmFtKFwiYmFja2dyb3VuZFBhdHRlcm5cIiksZ3IoYyx0LGgpLHQudGlsZUV4dGVudFBhdHRlcm5WQU8uYmluZChhLGgsdC50aWxlRXh0ZW50QnVmZmVyLFtdKX1lbHNlIGg9dC51c2VQcm9ncmFtKFwiYmFja2dyb3VuZFwiKSxvLnVuaWZvcm00ZnYoaC51bmlmb3Jtcy51X2NvbG9yLFtuLnIsbi5nLG4uYixuLmFdKSx0LnRpbGVFeHRlbnRWQU8uYmluZChhLGgsdC50aWxlRXh0ZW50QnVmZmVyLFtdKTtvLnVuaWZvcm0xZihoLnVuaWZvcm1zLnVfb3BhY2l0eSxpKTtmb3IodmFyIGY9MCxwPXMuY292ZXJpbmdUaWxlcyh7dGlsZVNpemU6bH0pO2Y8cC5sZW5ndGg7Zis9MSl7dmFyIGQ9cFtmXTtjJiZ2cih7dGlsZUlEOmQsdGlsZVNpemU6bH0sdCxoKSxvLnVuaWZvcm1NYXRyaXg0ZnYoaC51bmlmb3Jtcy51X21hdHJpeCwhMSx0LnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgoZC50b1Vud3JhcHBlZCgpKSksby5kcmF3QXJyYXlzKG8uVFJJQU5HTEVfU1RSSVAsMCx0LnRpbGVFeHRlbnRCdWZmZXIubGVuZ3RoKX19fX0sZGVidWc6ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKUVyKHQsZSxyW25dKX19LHpyPWZ1bmN0aW9uKGUscil7dGhpcy5jb250ZXh0PW5ldyBZdChlKSx0aGlzLnRyYW5zZm9ybT1yLHRoaXMuX3RpbGVUZXh0dXJlcz17fSx0aGlzLnNldHVwKCksdGhpcy5udW1TdWJsYXllcnM9V3QubWF4VW5kZXJ6b29taW5nK1d0Lm1heE92ZXJ6b29taW5nKzEsdGhpcy5kZXB0aEVwc2lsb249MS9NYXRoLnBvdygyLDE2KSx0aGlzLmRlcHRoUmJvTmVlZHNDbGVhcj0hMCx0aGlzLmVtcHR5UHJvZ3JhbUNvbmZpZ3VyYXRpb249bmV3IHQuZGVmYXVsdCQyNCx0aGlzLmNyb3NzVGlsZVN5bWJvbEluZGV4PW5ldyBXZX07ZnVuY3Rpb24gT3IodCxlKXtpZih0LnJvdz5lLnJvdyl7dmFyIHI9dDt0PWUsZT1yfXJldHVybnt4MDp0LmNvbHVtbix5MDp0LnJvdyx4MTplLmNvbHVtbix5MTplLnJvdyxkeDplLmNvbHVtbi10LmNvbHVtbixkeTplLnJvdy10LnJvd319ZnVuY3Rpb24gSXIodCxlLHIsbixpKXt2YXIgYT1NYXRoLm1heChyLE1hdGguZmxvb3IoZS55MCkpLG89TWF0aC5taW4obixNYXRoLmNlaWwoZS55MSkpO2lmKHQueDA9PT1lLngwJiZ0LnkwPT09ZS55MD90LngwK2UuZHkvdC5keSp0LmR4PGUueDE6dC54MS1lLmR5L3QuZHkqdC5keDxlLngwKXt2YXIgcz10O3Q9ZSxlPXN9Zm9yKHZhciBsPXQuZHgvdC5keSxjPWUuZHgvZS5keSx1PXQuZHg+MCxoPWUuZHg8MCxmPWE7ZjxvO2YrKyl7dmFyIHA9bCpNYXRoLm1heCgwLE1hdGgubWluKHQuZHksZit1LXQueTApKSt0LngwLGQ9YypNYXRoLm1heCgwLE1hdGgubWluKGUuZHksZitoLWUueTApKStlLngwO2koTWF0aC5mbG9vcihkKSxNYXRoLmNlaWwocCksZil9fWZ1bmN0aW9uIERyKHQsZSxyLG4saSxhKXt2YXIgbyxzPU9yKHQsZSksbD1PcihlLHIpLGM9T3Iocix0KTtzLmR5PmwuZHkmJihvPXMscz1sLGw9bykscy5keT5jLmR5JiYobz1zLHM9YyxjPW8pLGwuZHk+Yy5keSYmKG89bCxsPWMsYz1vKSxzLmR5JiZJcihjLHMsbixpLGEpLGwuZHkmJklyKGMsbCxuLGksYSl9enIucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuY29udGV4dC5nbDtpZih0aGlzLndpZHRoPXQqYS5kZXZpY2VQaXhlbFJhdGlvLHRoaXMuaGVpZ2h0PWUqYS5kZXZpY2VQaXhlbFJhdGlvLHRoaXMuY29udGV4dC52aWV3cG9ydC5zZXQoWzAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0XSksdGhpcy5zdHlsZSlmb3IodmFyIG49MCxpPXRoaXMuc3R5bGUuX29yZGVyO248aS5sZW5ndGg7bis9MSl7dmFyIG89aVtuXTt0aGlzLnN0eWxlLl9sYXllcnNbb10ucmVzaXplKCl9dGhpcy5kZXB0aFJibyYmKHIuZGVsZXRlUmVuZGVyYnVmZmVyKHRoaXMuZGVwdGhSYm8pLHRoaXMuZGVwdGhSYm89bnVsbCl9LHpyLnByb3RvdHlwZS5zZXR1cD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGV4dCxyPW5ldyB0LlBvc0FycmF5O3IuZW1wbGFjZUJhY2soMCwwKSxyLmVtcGxhY2VCYWNrKHQuZGVmYXVsdCQ4LDApLHIuZW1wbGFjZUJhY2soMCx0LmRlZmF1bHQkOCksci5lbXBsYWNlQmFjayh0LmRlZmF1bHQkOCx0LmRlZmF1bHQkOCksdGhpcy50aWxlRXh0ZW50QnVmZmVyPWUuY3JlYXRlVmVydGV4QnVmZmVyKHIsS2UubWVtYmVycyksdGhpcy50aWxlRXh0ZW50VkFPPW5ldyBRLHRoaXMudGlsZUV4dGVudFBhdHRlcm5WQU89bmV3IFE7dmFyIG49bmV3IHQuUG9zQXJyYXk7bi5lbXBsYWNlQmFjaygwLDApLG4uZW1wbGFjZUJhY2sodC5kZWZhdWx0JDgsMCksbi5lbXBsYWNlQmFjayh0LmRlZmF1bHQkOCx0LmRlZmF1bHQkOCksbi5lbXBsYWNlQmFjaygwLHQuZGVmYXVsdCQ4KSxuLmVtcGxhY2VCYWNrKDAsMCksdGhpcy5kZWJ1Z0J1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcihuLEtlLm1lbWJlcnMpLHRoaXMuZGVidWdWQU89bmV3IFE7dmFyIGk9bmV3IHQuUmFzdGVyQm91bmRzQXJyYXk7aS5lbXBsYWNlQmFjaygwLDAsMCwwKSxpLmVtcGxhY2VCYWNrKHQuZGVmYXVsdCQ4LDAsdC5kZWZhdWx0JDgsMCksaS5lbXBsYWNlQmFjaygwLHQuZGVmYXVsdCQ4LDAsdC5kZWZhdWx0JDgpLGkuZW1wbGFjZUJhY2sodC5kZWZhdWx0JDgsdC5kZWZhdWx0JDgsdC5kZWZhdWx0JDgsdC5kZWZhdWx0JDgpLHRoaXMucmFzdGVyQm91bmRzQnVmZmVyPWUuY3JlYXRlVmVydGV4QnVmZmVyKGksSy5tZW1iZXJzKSx0aGlzLnJhc3RlckJvdW5kc1ZBTz1uZXcgUTt2YXIgYT1uZXcgdC5Qb3NBcnJheTthLmVtcGxhY2VCYWNrKDAsMCksYS5lbXBsYWNlQmFjaygxLDApLGEuZW1wbGFjZUJhY2soMCwxKSxhLmVtcGxhY2VCYWNrKDEsMSksdGhpcy52aWV3cG9ydEJ1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcihhLEtlLm1lbWJlcnMpLHRoaXMudmlld3BvcnRWQU89bmV3IFF9LHpyLnByb3RvdHlwZS5jbGVhclN0ZW5jaWw9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbnRleHQscj1lLmdsO2Uuc2V0Q29sb3JNb2RlKEd0LmRpc2FibGVkKSxlLnNldERlcHRoTW9kZShxdC5kaXNhYmxlZCksZS5zZXRTdGVuY2lsTW9kZShuZXcgSHQoe2Z1bmM6ci5BTFdBWVMsbWFzazowfSwwLDI1NSxyLlpFUk8sci5aRVJPLHIuWkVSTykpO3ZhciBuPXQubWF0NC5jcmVhdGUoKTt0Lm1hdDQub3J0aG8obiwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsMCwwLDEpLHQubWF0NC5zY2FsZShuLG4sW3IuZHJhd2luZ0J1ZmZlcldpZHRoLHIuZHJhd2luZ0J1ZmZlckhlaWdodCwwXSk7dmFyIGk9dGhpcy51c2VQcm9ncmFtKFwiY2xpcHBpbmdNYXNrXCIpO3IudW5pZm9ybU1hdHJpeDRmdihpLnVuaWZvcm1zLnVfbWF0cml4LCExLG4pLHRoaXMudmlld3BvcnRWQU8uYmluZChlLGksdGhpcy52aWV3cG9ydEJ1ZmZlcixbXSksci5kcmF3QXJyYXlzKHIuVFJJQU5HTEVfU1RSSVAsMCw0KX0senIucHJvdG90eXBlLl9yZW5kZXJUaWxlQ2xpcHBpbmdNYXNrcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvbnRleHQscj1lLmdsO2Uuc2V0Q29sb3JNb2RlKEd0LmRpc2FibGVkKSxlLnNldERlcHRoTW9kZShxdC5kaXNhYmxlZCk7dmFyIG49MTt0aGlzLl90aWxlQ2xpcHBpbmdNYXNrSURzPXt9O2Zvcih2YXIgaT0wLGE9dDtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV0scz10aGlzLl90aWxlQ2xpcHBpbmdNYXNrSURzW28ua2V5XT1uKys7ZS5zZXRTdGVuY2lsTW9kZShuZXcgSHQoe2Z1bmM6ci5BTFdBWVMsbWFzazowfSxzLDI1NSxyLktFRVAsci5LRUVQLHIuUkVQTEFDRSkpO3ZhciBsPXRoaXMudXNlUHJvZ3JhbShcImNsaXBwaW5nTWFza1wiKTtyLnVuaWZvcm1NYXRyaXg0ZnYobC51bmlmb3Jtcy51X21hdHJpeCwhMSxvLnBvc01hdHJpeCksdGhpcy50aWxlRXh0ZW50VkFPLmJpbmQodGhpcy5jb250ZXh0LGwsdGhpcy50aWxlRXh0ZW50QnVmZmVyLFtdKSxyLmRyYXdBcnJheXMoci5UUklBTkdMRV9TVFJJUCwwLHRoaXMudGlsZUV4dGVudEJ1ZmZlci5sZW5ndGgpfX0senIucHJvdG90eXBlLnN0ZW5jaWxNb2RlRm9yQ2xpcHBpbmc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO3JldHVybiBuZXcgSHQoe2Z1bmM6ZS5FUVVBTCxtYXNrOjI1NX0sdGhpcy5fdGlsZUNsaXBwaW5nTWFza0lEc1t0LmtleV0sMCxlLktFRVAsZS5LRUVQLGUuUkVQTEFDRSl9LHpyLnByb3RvdHlwZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO3JldHVybiB0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3I/bmV3IEd0KFtlLkNPTlNUQU5UX0NPTE9SLGUuT05FXSxuZXcgdC5kZWZhdWx0JDYoMS84LDEvOCwxLzgsMCksWyEwLCEwLCEwLCEwXSk6XCJvcGFxdWVcIj09PXRoaXMucmVuZGVyUGFzcz9HdC51bmJsZW5kZWQ6R3QuYWxwaGFCbGVuZGVkfSx6ci5wcm90b3R5cGUuZGVwdGhNb2RlRm9yU3VibGF5ZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTEtKCgxK3RoaXMuY3VycmVudExheWVyKSp0aGlzLm51bVN1YmxheWVycyt0KSp0aGlzLmRlcHRoRXBzaWxvbixpPW4tMSt0aGlzLmRlcHRoUmFuZ2U7cmV0dXJuIG5ldyBxdChyfHx0aGlzLmNvbnRleHQuZ2wuTEVRVUFMLGUsW2ksbl0pfSx6ci5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcztmb3IodmFyIGkgaW4gdGhpcy5zdHlsZT1lLHRoaXMub3B0aW9ucz1yLHRoaXMubGluZUF0bGFzPWUubGluZUF0bGFzLHRoaXMuaW1hZ2VNYW5hZ2VyPWUuaW1hZ2VNYW5hZ2VyLHRoaXMuZ2x5cGhNYW5hZ2VyPWUuZ2x5cGhNYW5hZ2VyLHRoaXMuc3ltYm9sRmFkZUNoYW5nZT1lLnBsYWNlbWVudC5zeW1ib2xGYWRlQ2hhbmdlKGEubm93KCkpLGUuc291cmNlQ2FjaGVzKXt2YXIgbz1uLnN0eWxlLnNvdXJjZUNhY2hlc1tpXTtvLnVzZWQmJm8ucHJlcGFyZShuLmNvbnRleHQpfXZhciBzPXRoaXMuc3R5bGUuX29yZGVyLGw9dC5maWx0ZXJPYmplY3QodGhpcy5zdHlsZS5zb3VyY2VDYWNoZXMsZnVuY3Rpb24odCl7cmV0dXJuXCJyYXN0ZXJcIj09PXQuZ2V0U291cmNlKCkudHlwZXx8XCJyYXN0ZXItZGVtXCI9PT10LmdldFNvdXJjZSgpLnR5cGV9KSxjPWZ1bmN0aW9uKGUpe3ZhciByPWxbZV07IWZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPWUuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LnRpbGVJRC5pc0xlc3NUaGFuKGUudGlsZUlEKT8tMTplLnRpbGVJRC5pc0xlc3NUaGFuKHQudGlsZUlEKT8xOjB9KSxpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPXt9LG89bltpXSxzPW4uc2xpY2UoaSsxKTthcihvLnRpbGVJRC53cmFwcGVkKCksby50aWxlSUQscyxuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKDAsby50aWxlSUQud3JhcCsxLDAsMCwwKSxhKSxvLnNldE1hc2soYSxyKX19KHIuZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiByLmdldFRpbGUodCl9KSxuLmNvbnRleHQpfTtmb3IodmFyIHUgaW4gbCljKHUpO3RoaXMucmVuZGVyUGFzcz1cIm9mZnNjcmVlblwiO3ZhciBoLGY9W107dGhpcy5kZXB0aFJib05lZWRzQ2xlYXI9ITA7Zm9yKHZhciBwPTA7cDxzLmxlbmd0aDtwKyspe3ZhciBkPW4uc3R5bGUuX2xheWVyc1tzW3BdXTtkLmhhc09mZnNjcmVlblBhc3MoKSYmIWQuaXNIaWRkZW4obi50cmFuc2Zvcm0uem9vbSkmJihkLnNvdXJjZSE9PShoJiZoLmlkKSYmKGY9W10sKGg9bi5zdHlsZS5zb3VyY2VDYWNoZXNbZC5zb3VyY2VdKSYmKGY9aC5nZXRWaXNpYmxlQ29vcmRpbmF0ZXMoKSkucmV2ZXJzZSgpKSxmLmxlbmd0aCYmbi5yZW5kZXJMYXllcihuLGgsZCxmKSl9dGhpcy5jb250ZXh0LmJpbmRGcmFtZWJ1ZmZlci5zZXQobnVsbCksdGhpcy5jb250ZXh0LmNsZWFyKHtjb2xvcjpyLnNob3dPdmVyZHJhd0luc3BlY3Rvcj90LmRlZmF1bHQkNi5ibGFjazp0LmRlZmF1bHQkNi50cmFuc3BhcmVudCxkZXB0aDoxfSksdGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yPXIuc2hvd092ZXJkcmF3SW5zcGVjdG9yLHRoaXMuZGVwdGhSYW5nZT0oZS5fb3JkZXIubGVuZ3RoKzIpKnRoaXMubnVtU3VibGF5ZXJzKnRoaXMuZGVwdGhFcHNpbG9uLHRoaXMucmVuZGVyUGFzcz1cIm9wYXF1ZVwiO3ZhciBnLHY9W107Zm9yKHRoaXMuY3VycmVudExheWVyPXMubGVuZ3RoLTEsdGhpcy5jdXJyZW50TGF5ZXI7dGhpcy5jdXJyZW50TGF5ZXI+PTA7dGhpcy5jdXJyZW50TGF5ZXItLSl7dmFyIG09bi5zdHlsZS5fbGF5ZXJzW3Nbbi5jdXJyZW50TGF5ZXJdXTttLnNvdXJjZSE9PShnJiZnLmlkKSYmKHY9W10sKGc9bi5zdHlsZS5zb3VyY2VDYWNoZXNbbS5zb3VyY2VdKSYmKG4uY2xlYXJTdGVuY2lsKCksdj1nLmdldFZpc2libGVDb29yZGluYXRlcygpLGcuZ2V0U291cmNlKCkuaXNUaWxlQ2xpcHBlZCYmbi5fcmVuZGVyVGlsZUNsaXBwaW5nTWFza3ModikpKSxuLnJlbmRlckxheWVyKG4sZyxtLHYpfXRoaXMucmVuZGVyUGFzcz1cInRyYW5zbHVjZW50XCI7dmFyIHkseD1bXTtmb3IodGhpcy5jdXJyZW50TGF5ZXI9MCx0aGlzLmN1cnJlbnRMYXllcjt0aGlzLmN1cnJlbnRMYXllcjxzLmxlbmd0aDt0aGlzLmN1cnJlbnRMYXllcisrKXt2YXIgYj1uLnN0eWxlLl9sYXllcnNbc1tuLmN1cnJlbnRMYXllcl1dO2Iuc291cmNlIT09KHkmJnkuaWQpJiYoeD1bXSwoeT1uLnN0eWxlLnNvdXJjZUNhY2hlc1tiLnNvdXJjZV0pJiYobi5jbGVhclN0ZW5jaWwoKSx4PXkuZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCkseS5nZXRTb3VyY2UoKS5pc1RpbGVDbGlwcGVkJiZuLl9yZW5kZXJUaWxlQ2xpcHBpbmdNYXNrcyh4KSkseC5yZXZlcnNlKCkpLG4ucmVuZGVyTGF5ZXIobix5LGIseCl9aWYodGhpcy5vcHRpb25zLnNob3dUaWxlQm91bmRhcmllcyl7dmFyIF89dGhpcy5zdHlsZS5zb3VyY2VDYWNoZXNbT2JqZWN0LmtleXModGhpcy5zdHlsZS5zb3VyY2VDYWNoZXMpWzBdXTtfJiZMci5kZWJ1Zyh0aGlzLF8sXy5nZXRWaXNpYmxlQ29vcmRpbmF0ZXMoKSl9fSx6ci5wcm90b3R5cGUuc2V0dXBPZmZzY3JlZW5EZXB0aFJlbmRlcmJ1ZmZlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udGV4dDt0aGlzLmRlcHRoUmJvfHwodGhpcy5kZXB0aFJibz10LmNyZWF0ZVJlbmRlcmJ1ZmZlcih0LmdsLkRFUFRIX0NPTVBPTkVOVDE2LHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpKX0senIucHJvdG90eXBlLnJlbmRlckxheWVyPWZ1bmN0aW9uKHQsZSxyLG4pe3IuaXNIaWRkZW4odGhpcy50cmFuc2Zvcm0uem9vbSl8fChcImJhY2tncm91bmRcIj09PXIudHlwZXx8bi5sZW5ndGgpJiYodGhpcy5pZD1yLmlkLExyW3IudHlwZV0odCxlLHIsbikpfSx6ci5wcm90b3R5cGUudHJhbnNsYXRlUG9zTWF0cml4PWZ1bmN0aW9uKGUscixuLGksYSl7aWYoIW5bMF0mJiFuWzFdKXJldHVybiBlO3ZhciBvPWE/XCJtYXBcIj09PWk/dGhpcy50cmFuc2Zvcm0uYW5nbGU6MDpcInZpZXdwb3J0XCI9PT1pPy10aGlzLnRyYW5zZm9ybS5hbmdsZTowO2lmKG8pe3ZhciBzPU1hdGguc2luKG8pLGw9TWF0aC5jb3Mobyk7bj1bblswXSpsLW5bMV0qcyxuWzBdKnMrblsxXSpsXX12YXIgYz1bYT9uWzBdOk1lKHIsblswXSx0aGlzLnRyYW5zZm9ybS56b29tKSxhP25bMV06TWUocixuWzFdLHRoaXMudHJhbnNmb3JtLnpvb20pLDBdLHU9bmV3IEZsb2F0MzJBcnJheSgxNik7cmV0dXJuIHQubWF0NC50cmFuc2xhdGUodSxlLGMpLHV9LHpyLnByb3RvdHlwZS5zYXZlVGlsZVRleHR1cmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlsZVRleHR1cmVzW3Quc2l6ZVswXV07ZT9lLnB1c2godCk6dGhpcy5fdGlsZVRleHR1cmVzW3Quc2l6ZVswXV09W3RdfSx6ci5wcm90b3R5cGUuZ2V0VGlsZVRleHR1cmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlsZVRleHR1cmVzW3RdO3JldHVybiBlJiZlLmxlbmd0aD4wP2UucG9wKCk6bnVsbH0senIucHJvdG90eXBlLl9jcmVhdGVQcm9ncmFtQ2FjaGVkPWZ1bmN0aW9uKHQsZSl7dGhpcy5jYWNoZT10aGlzLmNhY2hlfHx7fTt2YXIgcj1cIlwiK3QrKGUuY2FjaGVLZXl8fFwiXCIpKyh0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3I/XCIvb3ZlcmRyYXdcIjpcIlwiKTtyZXR1cm4gdGhpcy5jYWNoZVtyXXx8KHRoaXMuY2FjaGVbcl09bmV3IGlyKHRoaXMuY29udGV4dCxuclt0XSxlLHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3RvcikpLHRoaXMuY2FjaGVbcl19LHpyLnByb3RvdHlwZS51c2VQcm9ncmFtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fY3JlYXRlUHJvZ3JhbUNhY2hlZCh0LGV8fHRoaXMuZW1wdHlQcm9ncmFtQ29uZmlndXJhdGlvbik7cmV0dXJuIHRoaXMuY29udGV4dC5wcm9ncmFtLnNldChyLnByb2dyYW0pLHJ9O3ZhciBQcj10LmRlZmF1bHQkMjAudmVjNCxScj10LmRlZmF1bHQkMjAubWF0NCxGcj10LmRlZmF1bHQkMjAubWF0MixCcj1mdW5jdGlvbih0LGUscil7dGhpcy50aWxlU2l6ZT01MTIsdGhpcy5fcmVuZGVyV29ybGRDb3BpZXM9dm9pZCAwPT09cnx8cix0aGlzLl9taW5ab29tPXR8fDAsdGhpcy5fbWF4Wm9vbT1lfHwyMix0aGlzLmxhdFJhbmdlPVstODUuMDUxMTMsODUuMDUxMTNdLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLHRoaXMuX2NlbnRlcj1uZXcgRygwLDApLHRoaXMuem9vbT0wLHRoaXMuYW5nbGU9MCx0aGlzLl9mb3Y9LjY0MzUwMTEwODc5MzI4NDQsdGhpcy5fcGl0Y2g9MCx0aGlzLl91bm1vZGlmaWVkPSEwLHRoaXMuX3Bvc01hdHJpeENhY2hlPXt9LHRoaXMuX2FsaWduZWRQb3NNYXRyaXhDYWNoZT17fX0sTnI9e21pblpvb206e2NvbmZpZ3VyYWJsZTohMH0sbWF4Wm9vbTp7Y29uZmlndXJhYmxlOiEwfSxyZW5kZXJXb3JsZENvcGllczp7Y29uZmlndXJhYmxlOiEwfSx3b3JsZFNpemU6e2NvbmZpZ3VyYWJsZTohMH0sY2VudGVyUG9pbnQ6e2NvbmZpZ3VyYWJsZTohMH0sc2l6ZTp7Y29uZmlndXJhYmxlOiEwfSxiZWFyaW5nOntjb25maWd1cmFibGU6ITB9LHBpdGNoOntjb25maWd1cmFibGU6ITB9LGZvdjp7Y29uZmlndXJhYmxlOiEwfSx6b29tOntjb25maWd1cmFibGU6ITB9LGNlbnRlcjp7Y29uZmlndXJhYmxlOiEwfSx1bm1vZGlmaWVkOntjb25maWd1cmFibGU6ITB9LHg6e2NvbmZpZ3VyYWJsZTohMH0seTp7Y29uZmlndXJhYmxlOiEwfSxwb2ludDp7Y29uZmlndXJhYmxlOiEwfX07QnIucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEJyKHRoaXMuX21pblpvb20sdGhpcy5fbWF4Wm9vbSx0aGlzLl9yZW5kZXJXb3JsZENvcGllcyk7cmV0dXJuIHQudGlsZVNpemU9dGhpcy50aWxlU2l6ZSx0LmxhdFJhbmdlPXRoaXMubGF0UmFuZ2UsdC53aWR0aD10aGlzLndpZHRoLHQuaGVpZ2h0PXRoaXMuaGVpZ2h0LHQuX2NlbnRlcj10aGlzLl9jZW50ZXIsdC56b29tPXRoaXMuem9vbSx0LmFuZ2xlPXRoaXMuYW5nbGUsdC5fZm92PXRoaXMuX2Zvdix0Ll9waXRjaD10aGlzLl9waXRjaCx0Ll91bm1vZGlmaWVkPXRoaXMuX3VubW9kaWZpZWQsdC5fY2FsY01hdHJpY2VzKCksdH0sTnIubWluWm9vbS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWluWm9vbX0sTnIubWluWm9vbS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fbWluWm9vbSE9PXQmJih0aGlzLl9taW5ab29tPXQsdGhpcy56b29tPU1hdGgubWF4KHRoaXMuem9vbSx0KSl9LE5yLm1heFpvb20uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21heFpvb219LE5yLm1heFpvb20uc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX21heFpvb20hPT10JiYodGhpcy5fbWF4Wm9vbT10LHRoaXMuem9vbT1NYXRoLm1pbih0aGlzLnpvb20sdCkpfSxOci5yZW5kZXJXb3JsZENvcGllcy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyV29ybGRDb3BpZXN9LE5yLnJlbmRlcldvcmxkQ29waWVzLnNldD1mdW5jdGlvbih0KXt2b2lkIDA9PT10P3Q9ITA6bnVsbD09PXQmJih0PSExKSx0aGlzLl9yZW5kZXJXb3JsZENvcGllcz10fSxOci53b3JsZFNpemUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGlsZVNpemUqdGhpcy5zY2FsZX0sTnIuY2VudGVyUG9pbnQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZS5fZGl2KDIpfSxOci5zaXplLmdldD1mdW5jdGlvbigpe3JldHVybiBuZXcgdC5kZWZhdWx0JDEodGhpcy53aWR0aCx0aGlzLmhlaWdodCl9LE5yLmJlYXJpbmcuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuLXRoaXMuYW5nbGUvTWF0aC5QSSoxODB9LE5yLmJlYXJpbmcuc2V0PWZ1bmN0aW9uKGUpe3ZhciByPS10LndyYXAoZSwtMTgwLDE4MCkqTWF0aC5QSS8xODA7dGhpcy5hbmdsZSE9PXImJih0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuYW5nbGU9cix0aGlzLl9jYWxjTWF0cmljZXMoKSx0aGlzLnJvdGF0aW9uTWF0cml4PUZyLmNyZWF0ZSgpLEZyLnJvdGF0ZSh0aGlzLnJvdGF0aW9uTWF0cml4LHRoaXMucm90YXRpb25NYXRyaXgsdGhpcy5hbmdsZSkpfSxOci5waXRjaC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGl0Y2gvTWF0aC5QSSoxODB9LE5yLnBpdGNoLnNldD1mdW5jdGlvbihlKXt2YXIgcj10LmNsYW1wKGUsMCw2MCkvMTgwKk1hdGguUEk7dGhpcy5fcGl0Y2ghPT1yJiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLl9waXRjaD1yLHRoaXMuX2NhbGNNYXRyaWNlcygpKX0sTnIuZm92LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb3YvTWF0aC5QSSoxODB9LE5yLmZvdi5zZXQ9ZnVuY3Rpb24odCl7dD1NYXRoLm1heCguMDEsTWF0aC5taW4oNjAsdCkpLHRoaXMuX2ZvdiE9PXQmJih0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuX2Zvdj10LzE4MCpNYXRoLlBJLHRoaXMuX2NhbGNNYXRyaWNlcygpKX0sTnIuem9vbS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fem9vbX0sTnIuem9vbS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5taW4oTWF0aC5tYXgodCx0aGlzLm1pblpvb20pLHRoaXMubWF4Wm9vbSk7dGhpcy5fem9vbSE9PWUmJih0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuX3pvb209ZSx0aGlzLnNjYWxlPXRoaXMuem9vbVNjYWxlKGUpLHRoaXMudGlsZVpvb209TWF0aC5mbG9vcihlKSx0aGlzLnpvb21GcmFjdGlvbj1lLXRoaXMudGlsZVpvb20sdGhpcy5fY29uc3RyYWluKCksdGhpcy5fY2FsY01hdHJpY2VzKCkpfSxOci5jZW50ZXIuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NlbnRlcn0sTnIuY2VudGVyLnNldD1mdW5jdGlvbih0KXt0LmxhdD09PXRoaXMuX2NlbnRlci5sYXQmJnQubG5nPT09dGhpcy5fY2VudGVyLmxuZ3x8KHRoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5fY2VudGVyPXQsdGhpcy5fY29uc3RyYWluKCksdGhpcy5fY2FsY01hdHJpY2VzKCkpfSxCci5wcm90b3R5cGUuY292ZXJpbmdab29tTGV2ZWw9ZnVuY3Rpb24odCl7cmV0dXJuKHQucm91bmRab29tP01hdGgucm91bmQ6TWF0aC5mbG9vcikodGhpcy56b29tK3RoaXMuc2NhbGVab29tKHRoaXMudGlsZVNpemUvdC50aWxlU2l6ZSkpfSxCci5wcm90b3R5cGUuZ2V0VmlzaWJsZVVud3JhcHBlZENvb3JkaW5hdGVzPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LmRlZmF1bHQkMSgwLDApLDApLG49dGhpcy5wb2ludENvb3JkaW5hdGUobmV3IHQuZGVmYXVsdCQxKHRoaXMud2lkdGgsMCksMCksaT1NYXRoLmZsb29yKHIuY29sdW1uKSxhPU1hdGguZmxvb3Iobi5jb2x1bW4pLG89W25ldyB0LlVud3JhcHBlZFRpbGVJRCgwLGUpXTtpZih0aGlzLl9yZW5kZXJXb3JsZENvcGllcylmb3IodmFyIHM9aTtzPD1hO3MrKykwIT09cyYmby5wdXNoKG5ldyB0LlVud3JhcHBlZFRpbGVJRChzLGUpKTtyZXR1cm4gb30sQnIucHJvdG90eXBlLmNvdmVyaW5nVGlsZXM9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5jb3ZlcmluZ1pvb21MZXZlbChlKSxuPXI7aWYodm9pZCAwIT09ZS5taW56b29tJiZyPGUubWluem9vbSlyZXR1cm5bXTt2b2lkIDAhPT1lLm1heHpvb20mJnI+ZS5tYXh6b29tJiYocj1lLm1heHpvb20pO3ZhciBpPXRoaXMucG9pbnRDb29yZGluYXRlKHRoaXMuY2VudGVyUG9pbnQsciksYT1uZXcgdC5kZWZhdWx0JDEoaS5jb2x1bW4tLjUsaS5yb3ctLjUpO3JldHVybiBmdW5jdGlvbihlLHIsbixpKXt2b2lkIDA9PT1pJiYoaT0hMCk7dmFyIGE9MTw8ZSxvPXt9O2Z1bmN0aW9uIHMocixzLGwpe3ZhciBjLHUsaCxmO2lmKGw+PTAmJmw8PWEpZm9yKGM9cjtjPHM7YysrKXU9TWF0aC5mbG9vcihjL2EpLGg9KGMlYSthKSVhLDAhPT11JiYhMCE9PWl8fChmPW5ldyB0Lk92ZXJzY2FsZWRUaWxlSUQobix1LGUsaCxsKSxvW2Yua2V5XT1mKX1yZXR1cm4gRHIoclswXSxyWzFdLHJbMl0sMCxhLHMpLERyKHJbMl0sclszXSxyWzBdLDAsYSxzKSxPYmplY3Qua2V5cyhvKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIG9bdF19KX0ocixbdGhpcy5wb2ludENvb3JkaW5hdGUobmV3IHQuZGVmYXVsdCQxKDAsMCksciksdGhpcy5wb2ludENvb3JkaW5hdGUobmV3IHQuZGVmYXVsdCQxKHRoaXMud2lkdGgsMCksciksdGhpcy5wb2ludENvb3JkaW5hdGUobmV3IHQuZGVmYXVsdCQxKHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHIpLHRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LmRlZmF1bHQkMSgwLHRoaXMuaGVpZ2h0KSxyKV0sZS5yZXBhcnNlT3ZlcnNjYWxlZD9uOnIsdGhpcy5fcmVuZGVyV29ybGRDb3BpZXMpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gYS5kaXN0KHQuY2Fub25pY2FsKS1hLmRpc3QoZS5jYW5vbmljYWwpfSl9LEJyLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCxlKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9ZSx0aGlzLnBpeGVsc1RvR0xVbml0cz1bMi90LC0yL2VdLHRoaXMuX2NvbnN0cmFpbigpLHRoaXMuX2NhbGNNYXRyaWNlcygpfSxOci51bm1vZGlmaWVkLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91bm1vZGlmaWVkfSxCci5wcm90b3R5cGUuem9vbVNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdygyLHQpfSxCci5wcm90b3R5cGUuc2NhbGVab29tPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9NYXRoLkxOMn0sQnIucHJvdG90eXBlLnByb2plY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0LmRlZmF1bHQkMSh0aGlzLmxuZ1goZS5sbmcpLHRoaXMubGF0WShlLmxhdCkpfSxCci5wcm90b3R5cGUudW5wcm9qZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRyh0aGlzLnhMbmcodC54KSx0aGlzLnlMYXQodC55KSl9LE5yLnguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG5nWCh0aGlzLmNlbnRlci5sbmcpfSxOci55LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxhdFkodGhpcy5jZW50ZXIubGF0KX0sTnIucG9pbnQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0LmRlZmF1bHQkMSh0aGlzLngsdGhpcy55KX0sQnIucHJvdG90eXBlLmxuZ1g9ZnVuY3Rpb24odCl7cmV0dXJuKDE4MCt0KSp0aGlzLndvcmxkU2l6ZS8zNjB9LEJyLnByb3RvdHlwZS5sYXRZPWZ1bmN0aW9uKHQpe3JldHVybigxODAtMTgwL01hdGguUEkqTWF0aC5sb2coTWF0aC50YW4oTWF0aC5QSS80K3QqTWF0aC5QSS8zNjApKSkqdGhpcy53b3JsZFNpemUvMzYwfSxCci5wcm90b3R5cGUueExuZz1mdW5jdGlvbih0KXtyZXR1cm4gMzYwKnQvdGhpcy53b3JsZFNpemUtMTgwfSxCci5wcm90b3R5cGUueUxhdD1mdW5jdGlvbih0KXt2YXIgZT0xODAtMzYwKnQvdGhpcy53b3JsZFNpemU7cmV0dXJuIDM2MC9NYXRoLlBJKk1hdGguYXRhbihNYXRoLmV4cChlKk1hdGguUEkvMTgwKSktOTB9LEJyLnByb3RvdHlwZS5zZXRMb2NhdGlvbkF0UG9pbnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnBvaW50Q29vcmRpbmF0ZShlKS5fc3ViKHRoaXMucG9pbnRDb29yZGluYXRlKHRoaXMuY2VudGVyUG9pbnQpKTt0aGlzLmNlbnRlcj10aGlzLmNvb3JkaW5hdGVMb2NhdGlvbih0aGlzLmxvY2F0aW9uQ29vcmRpbmF0ZSh0KS5fc3ViKHIpKSx0aGlzLl9yZW5kZXJXb3JsZENvcGllcyYmKHRoaXMuY2VudGVyPXRoaXMuY2VudGVyLndyYXAoKSl9LEJyLnByb3RvdHlwZS5sb2NhdGlvblBvaW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvb3JkaW5hdGVQb2ludCh0aGlzLmxvY2F0aW9uQ29vcmRpbmF0ZSh0KSl9LEJyLnByb3RvdHlwZS5wb2ludExvY2F0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvb3JkaW5hdGVMb2NhdGlvbih0aGlzLnBvaW50Q29vcmRpbmF0ZSh0KSl9LEJyLnByb3RvdHlwZS5sb2NhdGlvbkNvb3JkaW5hdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0LmRlZmF1bHQkMTcodGhpcy5sbmdYKGUubG5nKS90aGlzLnRpbGVTaXplLHRoaXMubGF0WShlLmxhdCkvdGhpcy50aWxlU2l6ZSx0aGlzLnpvb20pLnpvb21Ubyh0aGlzLnRpbGVab29tKX0sQnIucHJvdG90eXBlLmNvb3JkaW5hdGVMb2NhdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10Lnpvb21Ubyh0aGlzLnpvb20pO3JldHVybiBuZXcgRyh0aGlzLnhMbmcoZS5jb2x1bW4qdGhpcy50aWxlU2l6ZSksdGhpcy55TGF0KGUucm93KnRoaXMudGlsZVNpemUpKX0sQnIucHJvdG90eXBlLnBvaW50Q29vcmRpbmF0ZT1mdW5jdGlvbihlLHIpe3ZvaWQgMD09PXImJihyPXRoaXMudGlsZVpvb20pO3ZhciBuPVtlLngsZS55LDAsMV0saT1bZS54LGUueSwxLDFdO1ByLnRyYW5zZm9ybU1hdDQobixuLHRoaXMucGl4ZWxNYXRyaXhJbnZlcnNlKSxQci50cmFuc2Zvcm1NYXQ0KGksaSx0aGlzLnBpeGVsTWF0cml4SW52ZXJzZSk7dmFyIGE9blszXSxvPWlbM10scz1uWzBdL2EsbD1pWzBdL28sYz1uWzFdL2EsdT1pWzFdL28saD1uWzJdL2EsZj1pWzJdL28scD1oPT09Zj8wOigwLWgpLyhmLWgpO3JldHVybiBuZXcgdC5kZWZhdWx0JDE3KHQubnVtYmVyKHMsbCxwKS90aGlzLnRpbGVTaXplLHQubnVtYmVyKGMsdSxwKS90aGlzLnRpbGVTaXplLHRoaXMuem9vbSkuX3pvb21UbyhyKX0sQnIucHJvdG90eXBlLmNvb3JkaW5hdGVQb2ludD1mdW5jdGlvbihlKXt2YXIgcj1lLnpvb21Ubyh0aGlzLnpvb20pLG49W3IuY29sdW1uKnRoaXMudGlsZVNpemUsci5yb3cqdGhpcy50aWxlU2l6ZSwwLDFdO3JldHVybiBQci50cmFuc2Zvcm1NYXQ0KG4sbix0aGlzLnBpeGVsTWF0cml4KSxuZXcgdC5kZWZhdWx0JDEoblswXS9uWzNdLG5bMV0vblszXSl9LEJyLnByb3RvdHlwZS5jYWxjdWxhdGVQb3NNYXRyaXg9ZnVuY3Rpb24oZSxyKXt2b2lkIDA9PT1yJiYocj0hMSk7dmFyIG49ZS5rZXksaT1yP3RoaXMuX2FsaWduZWRQb3NNYXRyaXhDYWNoZTp0aGlzLl9wb3NNYXRyaXhDYWNoZTtpZihpW25dKXJldHVybiBpW25dO3ZhciBhPWUuY2Fub25pY2FsLG89dGhpcy53b3JsZFNpemUvdGhpcy56b29tU2NhbGUoYS56KSxzPWEueCtNYXRoLnBvdygyLGEueikqZS53cmFwLGw9UnIuaWRlbnRpdHkobmV3IEZsb2F0NjRBcnJheSgxNikpO3JldHVybiBSci50cmFuc2xhdGUobCxsLFtzKm8sYS55Km8sMF0pLFJyLnNjYWxlKGwsbCxbby90LmRlZmF1bHQkOCxvL3QuZGVmYXVsdCQ4LDFdKSxSci5tdWx0aXBseShsLHI/dGhpcy5hbGlnbmVkUHJvak1hdHJpeDp0aGlzLnByb2pNYXRyaXgsbCksaVtuXT1uZXcgRmxvYXQzMkFycmF5KGwpLGlbbl19LEJyLnByb3RvdHlwZS5fY29uc3RyYWluPWZ1bmN0aW9uKCl7aWYodGhpcy5jZW50ZXImJnRoaXMud2lkdGgmJnRoaXMuaGVpZ2h0JiYhdGhpcy5fY29uc3RyYWluaW5nKXt0aGlzLl9jb25zdHJhaW5pbmc9ITA7dmFyIGUscixuLGksYT0tOTAsbz05MCxzPS0xODAsbD0xODAsYz10aGlzLnNpemUsdT10aGlzLl91bm1vZGlmaWVkO2lmKHRoaXMubGF0UmFuZ2Upe3ZhciBoPXRoaXMubGF0UmFuZ2U7YT10aGlzLmxhdFkoaFsxXSksZT0obz10aGlzLmxhdFkoaFswXSkpLWE8Yy55P2MueS8oby1hKTowfWlmKHRoaXMubG5nUmFuZ2Upe3ZhciBmPXRoaXMubG5nUmFuZ2U7cz10aGlzLmxuZ1goZlswXSkscj0obD10aGlzLmxuZ1goZlsxXSkpLXM8Yy54P2MueC8obC1zKTowfXZhciBwPU1hdGgubWF4KHJ8fDAsZXx8MCk7aWYocClyZXR1cm4gdGhpcy5jZW50ZXI9dGhpcy51bnByb2plY3QobmV3IHQuZGVmYXVsdCQxKHI/KGwrcykvMjp0aGlzLngsZT8obythKS8yOnRoaXMueSkpLHRoaXMuem9vbSs9dGhpcy5zY2FsZVpvb20ocCksdGhpcy5fdW5tb2RpZmllZD11LHZvaWQodGhpcy5fY29uc3RyYWluaW5nPSExKTtpZih0aGlzLmxhdFJhbmdlKXt2YXIgZD10aGlzLnksZz1jLnkvMjtkLWc8YSYmKGk9YStnKSxkK2c+byYmKGk9by1nKX1pZih0aGlzLmxuZ1JhbmdlKXt2YXIgdj10aGlzLngsbT1jLngvMjt2LW08cyYmKG49cyttKSx2K20+bCYmKG49bC1tKX12b2lkIDA9PT1uJiZ2b2lkIDA9PT1pfHwodGhpcy5jZW50ZXI9dGhpcy51bnByb2plY3QobmV3IHQuZGVmYXVsdCQxKHZvaWQgMCE9PW4/bjp0aGlzLngsdm9pZCAwIT09aT9pOnRoaXMueSkpKSx0aGlzLl91bm1vZGlmaWVkPXUsdGhpcy5fY29uc3RyYWluaW5nPSExfX0sQnIucHJvdG90eXBlLl9jYWxjTWF0cmljZXM9ZnVuY3Rpb24oKXtpZih0aGlzLmhlaWdodCl7dGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlPS41L01hdGgudGFuKHRoaXMuX2Zvdi8yKSp0aGlzLmhlaWdodDt2YXIgdD10aGlzLl9mb3YvMixlPU1hdGguUEkvMit0aGlzLl9waXRjaCxyPU1hdGguc2luKHQpKnRoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZS9NYXRoLnNpbihNYXRoLlBJLWUtdCksbj10aGlzLngsaT10aGlzLnksYT0xLjAxKihNYXRoLmNvcyhNYXRoLlBJLzItdGhpcy5fcGl0Y2gpKnIrdGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlKSxvPW5ldyBGbG9hdDY0QXJyYXkoMTYpO1JyLnBlcnNwZWN0aXZlKG8sdGhpcy5fZm92LHRoaXMud2lkdGgvdGhpcy5oZWlnaHQsMSxhKSxSci5zY2FsZShvLG8sWzEsLTEsMV0pLFJyLnRyYW5zbGF0ZShvLG8sWzAsMCwtdGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlXSksUnIucm90YXRlWChvLG8sdGhpcy5fcGl0Y2gpLFJyLnJvdGF0ZVoobyxvLHRoaXMuYW5nbGUpLFJyLnRyYW5zbGF0ZShvLG8sWy1uLC1pLDBdKTt2YXIgcz10aGlzLndvcmxkU2l6ZS8oMipNYXRoLlBJKjYzNzgxMzcqTWF0aC5hYnMoTWF0aC5jb3ModGhpcy5jZW50ZXIubGF0KihNYXRoLlBJLzE4MCkpKSk7UnIuc2NhbGUobyxvLFsxLDEscywxXSksdGhpcy5wcm9qTWF0cml4PW87dmFyIGw9dGhpcy53aWR0aCUyLzIsYz10aGlzLmhlaWdodCUyLzIsdT1NYXRoLmNvcyh0aGlzLmFuZ2xlKSxoPU1hdGguc2luKHRoaXMuYW5nbGUpLGY9bi1NYXRoLnJvdW5kKG4pK3UqbCtoKmMscD1pLU1hdGgucm91bmQoaSkrdSpjK2gqbCxkPW5ldyBGbG9hdDY0QXJyYXkobyk7aWYoUnIudHJhbnNsYXRlKGQsZCxbZj4uNT9mLTE6ZixwPi41P3AtMTpwLDBdKSx0aGlzLmFsaWduZWRQcm9qTWF0cml4PWQsbz1Sci5jcmVhdGUoKSxSci5zY2FsZShvLG8sW3RoaXMud2lkdGgvMiwtdGhpcy5oZWlnaHQvMiwxXSksUnIudHJhbnNsYXRlKG8sbyxbMSwtMSwwXSksdGhpcy5waXhlbE1hdHJpeD1Sci5tdWx0aXBseShuZXcgRmxvYXQ2NEFycmF5KDE2KSxvLHRoaXMucHJvak1hdHJpeCksIShvPVJyLmludmVydChuZXcgRmxvYXQ2NEFycmF5KDE2KSx0aGlzLnBpeGVsTWF0cml4KSkpdGhyb3cgbmV3IEVycm9yKFwiZmFpbGVkIHRvIGludmVydCBtYXRyaXhcIik7dGhpcy5waXhlbE1hdHJpeEludmVyc2U9byx0aGlzLl9wb3NNYXRyaXhDYWNoZT17fSx0aGlzLl9hbGlnbmVkUG9zTWF0cml4Q2FjaGU9e319fSxCci5wcm90b3R5cGUubWF4UGl0Y2hTY2FsZUZhY3Rvcj1mdW5jdGlvbigpe2lmKCF0aGlzLnBpeGVsTWF0cml4SW52ZXJzZSlyZXR1cm4gMTt2YXIgZT10aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgdC5kZWZhdWx0JDEoMCwwKSkuem9vbVRvKHRoaXMuem9vbSkscj1bZS5jb2x1bW4qdGhpcy50aWxlU2l6ZSxlLnJvdyp0aGlzLnRpbGVTaXplLDAsMV07cmV0dXJuIFByLnRyYW5zZm9ybU1hdDQocixyLHRoaXMucGl4ZWxNYXRyaXgpWzNdL3RoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQnIucHJvdG90eXBlLE5yKTt2YXIganI9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saTt0LmJpbmRBbGwoW1wiX29uSGFzaENoYW5nZVwiLFwiX3VwZGF0ZUhhc2hcIl0sdGhpcyksdGhpcy5fdXBkYXRlSGFzaD0oZT10aGlzLl91cGRhdGVIYXNoVW50aHJvdHRsZWQuYmluZCh0aGlzKSwzMDAscj0hMSxuPTAsaT1mdW5jdGlvbigpe249MCxyJiYoZSgpLG49c2V0VGltZW91dChpLDMwMCkscj0hMSl9LGZ1bmN0aW9uKCl7cmV0dXJuIHI9ITAsbnx8aSgpLG59KX07anIucHJvdG90eXBlLmFkZFRvPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXA9ZSx0LmRlZmF1bHQuYWRkRXZlbnRMaXN0ZW5lcihcImhhc2hjaGFuZ2VcIix0aGlzLl9vbkhhc2hDaGFuZ2UsITEpLHRoaXMuX21hcC5vbihcIm1vdmVlbmRcIix0aGlzLl91cGRhdGVIYXNoKSx0aGlzfSxqci5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZGVmYXVsdC5yZW1vdmVFdmVudExpc3RlbmVyKFwiaGFzaGNoYW5nZVwiLHRoaXMuX29uSGFzaENoYW5nZSwhMSksdGhpcy5fbWFwLm9mZihcIm1vdmVlbmRcIix0aGlzLl91cGRhdGVIYXNoKSxjbGVhclRpbWVvdXQodGhpcy5fdXBkYXRlSGFzaCgpKSxkZWxldGUgdGhpcy5fbWFwLHRoaXN9LGpyLnByb3RvdHlwZS5nZXRIYXNoU3RyaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcC5nZXRDZW50ZXIoKSxyPU1hdGgucm91bmQoMTAwKnRoaXMuX21hcC5nZXRab29tKCkpLzEwMCxuPU1hdGguY2VpbCgocipNYXRoLkxOMitNYXRoLmxvZyg1MTIvMzYwLy41KSkvTWF0aC5MTjEwKSxpPU1hdGgucG93KDEwLG4pLGE9TWF0aC5yb3VuZChlLmxuZyppKS9pLG89TWF0aC5yb3VuZChlLmxhdCppKS9pLHM9dGhpcy5fbWFwLmdldEJlYXJpbmcoKSxsPXRoaXMuX21hcC5nZXRQaXRjaCgpLGM9XCJcIjtyZXR1cm4gYys9dD9cIiMvXCIrYStcIi9cIitvK1wiL1wiK3I6XCIjXCIrcitcIi9cIitvK1wiL1wiK2EsKHN8fGwpJiYoYys9XCIvXCIrTWF0aC5yb3VuZCgxMCpzKS8xMCksbCYmKGMrPVwiL1wiK01hdGgucm91bmQobCkpLGN9LGpyLnByb3RvdHlwZS5fb25IYXNoQ2hhbmdlPWZ1bmN0aW9uKCl7dmFyIGU9dC5kZWZhdWx0LmxvY2F0aW9uLmhhc2gucmVwbGFjZShcIiNcIixcIlwiKS5zcGxpdChcIi9cIik7cmV0dXJuIGUubGVuZ3RoPj0zJiYodGhpcy5fbWFwLmp1bXBUbyh7Y2VudGVyOlsrZVsyXSwrZVsxXV0sem9vbTorZVswXSxiZWFyaW5nOisoZVszXXx8MCkscGl0Y2g6KyhlWzRdfHwwKX0pLCEwKX0sanIucHJvdG90eXBlLl91cGRhdGVIYXNoVW50aHJvdHRsZWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldEhhc2hTdHJpbmcoKTt0LmRlZmF1bHQuaGlzdG9yeS5yZXBsYWNlU3RhdGUodC5kZWZhdWx0Lmhpc3Rvcnkuc3RhdGUsXCJcIixlKX07dmFyIFZyPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGksYSl7dm9pZCAwPT09YSYmKGE9e30pO3ZhciBvPXMubW91c2VQb3Mobi5nZXRDYW52YXNDb250YWluZXIoKSxpKSxsPW4udW5wcm9qZWN0KG8pO2UuY2FsbCh0aGlzLHIsdC5leHRlbmQoe3BvaW50Om8sbG5nTGF0Omwsb3JpZ2luYWxFdmVudDppfSxhKSksdGhpcy5fZGVmYXVsdFByZXZlbnRlZD0hMSx0aGlzLnRhcmdldD1ufWUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yO3ZhciBuPXtkZWZhdWx0UHJldmVudGVkOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5wcm90b3R5cGUucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oKXt0aGlzLl9kZWZhdWx0UHJldmVudGVkPSEwfSxuLmRlZmF1bHRQcmV2ZW50ZWQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHIucHJvdG90eXBlLG4pLHJ9KHQuRXZlbnQpLFVyPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGkpe3ZhciBhPXMudG91Y2hQb3Mobi5nZXRDYW52YXNDb250YWluZXIoKSxpKSxvPWEubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBuLnVucHJvamVjdCh0KX0pLGw9YS5yZWR1Y2UoZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHQuYWRkKGUuZGl2KG4ubGVuZ3RoKSl9LG5ldyB0LmRlZmF1bHQkMSgwLDApKSxjPW4udW5wcm9qZWN0KGwpO2UuY2FsbCh0aGlzLHIse3BvaW50czphLHBvaW50OmwsbG5nTGF0czpvLGxuZ0xhdDpjLG9yaWdpbmFsRXZlbnQ6aX0pLHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITF9ZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXI7dmFyIG49e2RlZmF1bHRQcmV2ZW50ZWQ6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiByLnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITB9LG4uZGVmYXVsdFByZXZlbnRlZC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdFByZXZlbnRlZH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoci5wcm90b3R5cGUsbikscn0odC5FdmVudCkscXI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIsbil7dC5jYWxsKHRoaXMsZSx7b3JpZ2luYWxFdmVudDpufSksdGhpcy5fZGVmYXVsdFByZXZlbnRlZD0hMX10JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZTt2YXIgcj17ZGVmYXVsdFByZXZlbnRlZDp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIGUucHJvdG90eXBlLnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKCl7dGhpcy5fZGVmYXVsdFByZXZlbnRlZD0hMH0sci5kZWZhdWx0UHJldmVudGVkLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0UHJldmVudGVkfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfSh0LkV2ZW50KSxIcj1mdW5jdGlvbihlKXt0aGlzLl9tYXA9ZSx0aGlzLl9lbD1lLmdldENhbnZhc0NvbnRhaW5lcigpLHRoaXMuX2RlbHRhPTAsdC5iaW5kQWxsKFtcIl9vbldoZWVsXCIsXCJfb25UaW1lb3V0XCIsXCJfb25TY3JvbGxGcmFtZVwiLFwiX29uU2Nyb2xsRmluaXNoZWRcIl0sdGhpcyl9O0hyLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2VuYWJsZWR9LEhyLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fYWN0aXZlfSxIci5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKHQpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9lbmFibGVkPSEwLHRoaXMuX2Fyb3VuZENlbnRlcj10JiZcImNlbnRlclwiPT09dC5hcm91bmQpfSxIci5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCkmJih0aGlzLl9lbmFibGVkPSExKX0sSHIucHJvdG90eXBlLm9uV2hlZWw9ZnVuY3Rpb24oZSl7aWYodGhpcy5pc0VuYWJsZWQoKSl7dmFyIHI9ZS5kZWx0YU1vZGU9PT10LmRlZmF1bHQuV2hlZWxFdmVudC5ET01fREVMVEFfTElORT80MCplLmRlbHRhWTplLmRlbHRhWSxuPWEubm93KCksaT1uLSh0aGlzLl9sYXN0V2hlZWxFdmVudFRpbWV8fDApO3RoaXMuX2xhc3RXaGVlbEV2ZW50VGltZT1uLDAhPT1yJiZyJTQuMDAwMjQ0MTQwNjI1PT0wP3RoaXMuX3R5cGU9XCJ3aGVlbFwiOjAhPT1yJiZNYXRoLmFicyhyKTw0P3RoaXMuX3R5cGU9XCJ0cmFja3BhZFwiOmk+NDAwPyh0aGlzLl90eXBlPW51bGwsdGhpcy5fbGFzdFZhbHVlPXIsdGhpcy5fdGltZW91dD1zZXRUaW1lb3V0KHRoaXMuX29uVGltZW91dCw0MCxlKSk6dGhpcy5fdHlwZXx8KHRoaXMuX3R5cGU9TWF0aC5hYnMoaSpyKTwyMDA/XCJ0cmFja3BhZFwiOlwid2hlZWxcIix0aGlzLl90aW1lb3V0JiYoY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpLHRoaXMuX3RpbWVvdXQ9bnVsbCxyKz10aGlzLl9sYXN0VmFsdWUpKSxlLnNoaWZ0S2V5JiZyJiYoci89NCksdGhpcy5fdHlwZSYmKHRoaXMuX2xhc3RXaGVlbEV2ZW50PWUsdGhpcy5fZGVsdGEtPXIsdGhpcy5pc0FjdGl2ZSgpfHx0aGlzLl9zdGFydChlKSksZS5wcmV2ZW50RGVmYXVsdCgpfX0sSHIucHJvdG90eXBlLl9vblRpbWVvdXQ9ZnVuY3Rpb24odCl7dGhpcy5fdHlwZT1cIndoZWVsXCIsdGhpcy5fZGVsdGEtPXRoaXMuX2xhc3RWYWx1ZSx0aGlzLmlzQWN0aXZlKCl8fHRoaXMuX3N0YXJ0KHQpfSxIci5wcm90b3R5cGUuX3N0YXJ0PWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2RlbHRhKXt0aGlzLl9mcmFtZUlkJiYodGhpcy5fbWFwLl9jYW5jZWxSZW5kZXJGcmFtZSh0aGlzLl9mcmFtZUlkKSx0aGlzLl9mcmFtZUlkPW51bGwpLHRoaXMuX2FjdGl2ZT0hMCx0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudChcIm1vdmVzdGFydFwiLHtvcmlnaW5hbEV2ZW50OmV9KSksdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoXCJ6b29tc3RhcnRcIix7b3JpZ2luYWxFdmVudDplfSkpLHRoaXMuX2ZpbmlzaFRpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLl9maW5pc2hUaW1lb3V0KTt2YXIgcj1zLm1vdXNlUG9zKHRoaXMuX2VsLGUpO3RoaXMuX2Fyb3VuZD1HLmNvbnZlcnQodGhpcy5fYXJvdW5kQ2VudGVyP3RoaXMuX21hcC5nZXRDZW50ZXIoKTp0aGlzLl9tYXAudW5wcm9qZWN0KHIpKSx0aGlzLl9hcm91bmRQb2ludD10aGlzLl9tYXAudHJhbnNmb3JtLmxvY2F0aW9uUG9pbnQodGhpcy5fYXJvdW5kKSx0aGlzLl9mcmFtZUlkfHwodGhpcy5fZnJhbWVJZD10aGlzLl9tYXAuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9vblNjcm9sbEZyYW1lKSl9fSxIci5wcm90b3R5cGUuX29uU2Nyb2xsRnJhbWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKHRoaXMuX2ZyYW1lSWQ9bnVsbCx0aGlzLmlzQWN0aXZlKCkpe3ZhciByPXRoaXMuX21hcC50cmFuc2Zvcm07aWYoMCE9PXRoaXMuX2RlbHRhKXt2YXIgbj1cIndoZWVsXCI9PT10aGlzLl90eXBlJiZNYXRoLmFicyh0aGlzLl9kZWx0YSk+NC4wMDAyNDQxNDA2MjU/MS80NTA6LjAxLGk9Mi8oMStNYXRoLmV4cCgtTWF0aC5hYnModGhpcy5fZGVsdGEqbikpKTt0aGlzLl9kZWx0YTwwJiYwIT09aSYmKGk9MS9pKTt2YXIgbz1cIm51bWJlclwiPT10eXBlb2YgdGhpcy5fdGFyZ2V0Wm9vbT9yLnpvb21TY2FsZSh0aGlzLl90YXJnZXRab29tKTpyLnNjYWxlO3RoaXMuX3RhcmdldFpvb209TWF0aC5taW4oci5tYXhab29tLE1hdGgubWF4KHIubWluWm9vbSxyLnNjYWxlWm9vbShvKmkpKSksXCJ3aGVlbFwiPT09dGhpcy5fdHlwZSYmKHRoaXMuX3N0YXJ0Wm9vbT1yLnpvb20sdGhpcy5fZWFzaW5nPXRoaXMuX3Ntb290aE91dEVhc2luZygyMDApKSx0aGlzLl9kZWx0YT0wfXZhciBzPSExO2lmKFwid2hlZWxcIj09PXRoaXMuX3R5cGUpe3ZhciBsPU1hdGgubWluKChhLm5vdygpLXRoaXMuX2xhc3RXaGVlbEV2ZW50VGltZSkvMjAwLDEpLGM9dGhpcy5fZWFzaW5nKGwpO3Iuem9vbT10Lm51bWJlcih0aGlzLl9zdGFydFpvb20sdGhpcy5fdGFyZ2V0Wm9vbSxjKSxsPDE/dGhpcy5fZnJhbWVJZHx8KHRoaXMuX2ZyYW1lSWQ9dGhpcy5fbWFwLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fb25TY3JvbGxGcmFtZSkpOnM9ITB9ZWxzZSByLnpvb209dGhpcy5fdGFyZ2V0Wm9vbSxzPSEwO3Iuc2V0TG9jYXRpb25BdFBvaW50KHRoaXMuX2Fyb3VuZCx0aGlzLl9hcm91bmRQb2ludCksdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoXCJtb3ZlXCIse29yaWdpbmFsRXZlbnQ6dGhpcy5fbGFzdFdoZWVsRXZlbnR9KSksdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoXCJ6b29tXCIse29yaWdpbmFsRXZlbnQ6dGhpcy5fbGFzdFdoZWVsRXZlbnR9KSkscyYmKHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9maW5pc2hUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLl9tYXAuZmlyZShuZXcgdC5FdmVudChcInpvb21lbmRcIix7b3JpZ2luYWxFdmVudDplLl9sYXN0V2hlZWxFdmVudH0pKSxlLl9tYXAuZmlyZShuZXcgdC5FdmVudChcIm1vdmVlbmRcIix7b3JpZ2luYWxFdmVudDplLl9sYXN0V2hlZWxFdmVudH0pKSxkZWxldGUgZS5fdGFyZ2V0Wm9vbX0sMjAwKSl9fSxIci5wcm90b3R5cGUuX3Ntb290aE91dEVhc2luZz1mdW5jdGlvbihlKXt2YXIgcj10LmVhc2U7aWYodGhpcy5fcHJldkVhc2Upe3ZhciBuPXRoaXMuX3ByZXZFYXNlLGk9KGEubm93KCktbi5zdGFydCkvbi5kdXJhdGlvbixvPW4uZWFzaW5nKGkrLjAxKS1uLmVhc2luZyhpKSxzPS4yNy9NYXRoLnNxcnQobypvKzFlLTQpKi4wMSxsPU1hdGguc3FydCguMDcyOS1zKnMpO3I9dC5iZXppZXIocyxsLC4yNSwxKX1yZXR1cm4gdGhpcy5fcHJldkVhc2U9e3N0YXJ0OmEubm93KCksZHVyYXRpb246ZSxlYXNpbmc6cn0scn07dmFyIEdyPWZ1bmN0aW9uKGUpe3RoaXMuX21hcD1lLHRoaXMuX2VsPWUuZ2V0Q2FudmFzQ29udGFpbmVyKCksdGhpcy5fY29udGFpbmVyPWUuZ2V0Q29udGFpbmVyKCksdC5iaW5kQWxsKFtcIl9vbk1vdXNlTW92ZVwiLFwiX29uTW91c2VVcFwiLFwiX29uS2V5RG93blwiXSx0aGlzKX07R3IucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZW5hYmxlZH0sR3IucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9hY3RpdmV9LEdyLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fZW5hYmxlZD0hMCl9LEdyLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VuYWJsZWQ9ITEpfSxHci5wcm90b3R5cGUub25Nb3VzZURvd249ZnVuY3Rpb24oZSl7dGhpcy5pc0VuYWJsZWQoKSYmZS5zaGlmdEtleSYmMD09PWUuYnV0dG9uJiYodC5kZWZhdWx0LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIix0aGlzLl9vbk1vdXNlTW92ZSwhMSksdC5kZWZhdWx0LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsdGhpcy5fb25LZXlEb3duLCExKSx0LmRlZmF1bHQuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIix0aGlzLl9vbk1vdXNlVXAsITEpLHMuZGlzYWJsZURyYWcoKSx0aGlzLl9zdGFydFBvcz1zLm1vdXNlUG9zKHRoaXMuX2VsLGUpLHRoaXMuX2FjdGl2ZT0hMCl9LEdyLnByb3RvdHlwZS5fb25Nb3VzZU1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc3RhcnRQb3Mscj1zLm1vdXNlUG9zKHRoaXMuX2VsLHQpO3RoaXMuX2JveHx8KHRoaXMuX2JveD1zLmNyZWF0ZShcImRpdlwiLFwibWFwYm94Z2wtYm94em9vbVwiLHRoaXMuX2NvbnRhaW5lciksdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jcm9zc2hhaXJcIiksdGhpcy5fZmlyZUV2ZW50KFwiYm94em9vbXN0YXJ0XCIsdCkpO3ZhciBuPU1hdGgubWluKGUueCxyLngpLGk9TWF0aC5tYXgoZS54LHIueCksYT1NYXRoLm1pbihlLnksci55KSxvPU1hdGgubWF4KGUueSxyLnkpO3Muc2V0VHJhbnNmb3JtKHRoaXMuX2JveCxcInRyYW5zbGF0ZShcIituK1wicHgsXCIrYStcInB4KVwiKSx0aGlzLl9ib3guc3R5bGUud2lkdGg9aS1uK1wicHhcIix0aGlzLl9ib3guc3R5bGUuaGVpZ2h0PW8tYStcInB4XCJ9LEdyLnByb3RvdHlwZS5fb25Nb3VzZVVwPWZ1bmN0aW9uKGUpe2lmKDA9PT1lLmJ1dHRvbil7dmFyIHI9dGhpcy5fc3RhcnRQb3Msbj1zLm1vdXNlUG9zKHRoaXMuX2VsLGUpLGk9KG5ldyBZKS5leHRlbmQodGhpcy5fbWFwLnVucHJvamVjdChyKSkuZXh0ZW5kKHRoaXMuX21hcC51bnByb2plY3QobikpO3RoaXMuX2ZpbmlzaCgpLHMuc3VwcHJlc3NDbGljaygpLHIueD09PW4ueCYmci55PT09bi55P3RoaXMuX2ZpcmVFdmVudChcImJveHpvb21jYW5jZWxcIixlKTp0aGlzLl9tYXAuZml0Qm91bmRzKGkse2xpbmVhcjohMH0pLmZpcmUobmV3IHQuRXZlbnQoXCJib3h6b29tZW5kXCIse29yaWdpbmFsRXZlbnQ6ZSxib3hab29tQm91bmRzOml9KSl9fSxHci5wcm90b3R5cGUuX29uS2V5RG93bj1mdW5jdGlvbih0KXsyNz09PXQua2V5Q29kZSYmKHRoaXMuX2ZpbmlzaCgpLHRoaXMuX2ZpcmVFdmVudChcImJveHpvb21jYW5jZWxcIix0KSl9LEdyLnByb3RvdHlwZS5fZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlPSExLHQuZGVmYXVsdC5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsdGhpcy5fb25Nb3VzZU1vdmUsITEpLHQuZGVmYXVsdC5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLHRoaXMuX29uS2V5RG93biwhMSksdC5kZWZhdWx0LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsdGhpcy5fb25Nb3VzZVVwLCExKSx0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWNyb3NzaGFpclwiKSx0aGlzLl9ib3gmJihzLnJlbW92ZSh0aGlzLl9ib3gpLHRoaXMuX2JveD1udWxsKSxzLmVuYWJsZURyYWcoKX0sR3IucHJvdG90eXBlLl9maXJlRXZlbnQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoZSx7b3JpZ2luYWxFdmVudDpyfSkpfTt2YXIgWXI9dC5iZXppZXIoMCwwLC4yNSwxKSxXcj1mdW5jdGlvbihlLHIpe3RoaXMuX21hcD1lLHRoaXMuX2VsPXIuZWxlbWVudHx8ZS5nZXRDYW52YXNDb250YWluZXIoKSx0aGlzLl9zdGF0ZT1cImRpc2FibGVkXCIsdGhpcy5fYnV0dG9uPXIuYnV0dG9ufHxcInJpZ2h0XCIsdGhpcy5fYmVhcmluZ1NuYXA9ci5iZWFyaW5nU25hcHx8MCx0aGlzLl9waXRjaFdpdGhSb3RhdGU9ITEhPT1yLnBpdGNoV2l0aFJvdGF0ZSx0LmJpbmRBbGwoW1wiX29uTW91c2VNb3ZlXCIsXCJfb25Nb3VzZVVwXCIsXCJfb25CbHVyXCIsXCJfb25EcmFnRnJhbWVcIl0sdGhpcyl9O1dyLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm5cImRpc2FibGVkXCIhPT10aGlzLl9zdGF0ZX0sV3IucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuXCJhY3RpdmVcIj09PXRoaXMuX3N0YXRlfSxXci5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKXx8KHRoaXMuX3N0YXRlPVwiZW5hYmxlZFwiKX0sV3IucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXtpZih0aGlzLmlzRW5hYmxlZCgpKXN3aXRjaCh0aGlzLl9zdGF0ZSl7Y2FzZVwiYWN0aXZlXCI6dGhpcy5fc3RhdGU9XCJkaXNhYmxlZFwiLHRoaXMuX3VuYmluZCgpLHRoaXMuX2RlYWN0aXZhdGUoKSx0aGlzLl9maXJlRXZlbnQoXCJyb3RhdGVlbmRcIiksdGhpcy5fcGl0Y2hXaXRoUm90YXRlJiZ0aGlzLl9maXJlRXZlbnQoXCJwaXRjaGVuZFwiKSx0aGlzLl9maXJlRXZlbnQoXCJtb3ZlZW5kXCIpO2JyZWFrO2Nhc2VcInBlbmRpbmdcIjp0aGlzLl9zdGF0ZT1cImRpc2FibGVkXCIsdGhpcy5fdW5iaW5kKCk7YnJlYWs7ZGVmYXVsdDp0aGlzLl9zdGF0ZT1cImRpc2FibGVkXCJ9fSxXci5wcm90b3R5cGUub25Nb3VzZURvd249ZnVuY3Rpb24oZSl7aWYoXCJlbmFibGVkXCI9PT10aGlzLl9zdGF0ZSl7aWYoXCJyaWdodFwiPT09dGhpcy5fYnV0dG9uKXtpZih0aGlzLl9ldmVudEJ1dHRvbj1zLm1vdXNlQnV0dG9uKGUpLHRoaXMuX2V2ZW50QnV0dG9uIT09KGUuY3RybEtleT8wOjIpKXJldHVybn1lbHNle2lmKGUuY3RybEtleXx8MCE9PXMubW91c2VCdXR0b24oZSkpcmV0dXJuO3RoaXMuX2V2ZW50QnV0dG9uPTB9cy5kaXNhYmxlRHJhZygpLHQuZGVmYXVsdC5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsdGhpcy5fb25Nb3VzZU1vdmUse2NhcHR1cmU6ITB9KSx0LmRlZmF1bHQuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIix0aGlzLl9vbk1vdXNlVXApLHQuZGVmYXVsdC5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLHRoaXMuX29uQmx1ciksdGhpcy5fc3RhdGU9XCJwZW5kaW5nXCIsdGhpcy5faW5lcnRpYT1bW2Eubm93KCksdGhpcy5fbWFwLmdldEJlYXJpbmcoKV1dLHRoaXMuX3ByZXZpb3VzUG9zPXMubW91c2VQb3ModGhpcy5fZWwsZSksdGhpcy5fY2VudGVyPXRoaXMuX21hcC50cmFuc2Zvcm0uY2VudGVyUG9pbnQsZS5wcmV2ZW50RGVmYXVsdCgpfX0sV3IucHJvdG90eXBlLl9vbk1vdXNlTW92ZT1mdW5jdGlvbih0KXt0aGlzLl9sYXN0TW92ZUV2ZW50PXQsdGhpcy5fcG9zPXMubW91c2VQb3ModGhpcy5fZWwsdCksXCJwZW5kaW5nXCI9PT10aGlzLl9zdGF0ZSYmKHRoaXMuX3N0YXRlPVwiYWN0aXZlXCIsdGhpcy5fZmlyZUV2ZW50KFwicm90YXRlc3RhcnRcIix0KSx0aGlzLl9maXJlRXZlbnQoXCJtb3Zlc3RhcnRcIix0KSx0aGlzLl9waXRjaFdpdGhSb3RhdGUmJnRoaXMuX2ZpcmVFdmVudChcInBpdGNoc3RhcnRcIix0KSksdGhpcy5fZnJhbWVJZHx8KHRoaXMuX2ZyYW1lSWQ9dGhpcy5fbWFwLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fb25EcmFnRnJhbWUpKX0sV3IucHJvdG90eXBlLl9vbkRyYWdGcmFtZT1mdW5jdGlvbigpe3RoaXMuX2ZyYW1lSWQ9bnVsbDt2YXIgdD10aGlzLl9sYXN0TW92ZUV2ZW50O2lmKHQpe3ZhciBlPXRoaXMuX21hcC50cmFuc2Zvcm0scj10aGlzLl9wcmV2aW91c1BvcyxuPXRoaXMuX3BvcyxpPS44KihyLngtbi54KSxvPS0uNSooci55LW4ueSkscz1lLmJlYXJpbmctaSxsPWUucGl0Y2gtbyxjPXRoaXMuX2luZXJ0aWEsdT1jW2MubGVuZ3RoLTFdO3RoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpLGMucHVzaChbYS5ub3coKSx0aGlzLl9tYXAuX25vcm1hbGl6ZUJlYXJpbmcocyx1WzFdKV0pLGUuYmVhcmluZz1zLHRoaXMuX3BpdGNoV2l0aFJvdGF0ZSYmKHRoaXMuX2ZpcmVFdmVudChcInBpdGNoXCIsdCksZS5waXRjaD1sKSx0aGlzLl9maXJlRXZlbnQoXCJyb3RhdGVcIix0KSx0aGlzLl9maXJlRXZlbnQoXCJtb3ZlXCIsdCksZGVsZXRlIHRoaXMuX2xhc3RNb3ZlRXZlbnQsdGhpcy5fcHJldmlvdXNQb3M9dGhpcy5fcG9zfX0sV3IucHJvdG90eXBlLl9vbk1vdXNlVXA9ZnVuY3Rpb24odCl7aWYocy5tb3VzZUJ1dHRvbih0KT09PXRoaXMuX2V2ZW50QnV0dG9uKXN3aXRjaCh0aGlzLl9zdGF0ZSl7Y2FzZVwiYWN0aXZlXCI6dGhpcy5fc3RhdGU9XCJlbmFibGVkXCIscy5zdXBwcmVzc0NsaWNrKCksdGhpcy5fdW5iaW5kKCksdGhpcy5fZGVhY3RpdmF0ZSgpLHRoaXMuX2luZXJ0aWFsUm90YXRlKHQpO2JyZWFrO2Nhc2VcInBlbmRpbmdcIjp0aGlzLl9zdGF0ZT1cImVuYWJsZWRcIix0aGlzLl91bmJpbmQoKX19LFdyLnByb3RvdHlwZS5fb25CbHVyPWZ1bmN0aW9uKHQpe3N3aXRjaCh0aGlzLl9zdGF0ZSl7Y2FzZVwiYWN0aXZlXCI6dGhpcy5fc3RhdGU9XCJlbmFibGVkXCIsdGhpcy5fdW5iaW5kKCksdGhpcy5fZGVhY3RpdmF0ZSgpLHRoaXMuX2ZpcmVFdmVudChcInJvdGF0ZWVuZFwiLHQpLHRoaXMuX3BpdGNoV2l0aFJvdGF0ZSYmdGhpcy5fZmlyZUV2ZW50KFwicGl0Y2hlbmRcIix0KSx0aGlzLl9maXJlRXZlbnQoXCJtb3ZlZW5kXCIsdCk7YnJlYWs7Y2FzZVwicGVuZGluZ1wiOnRoaXMuX3N0YXRlPVwiZW5hYmxlZFwiLHRoaXMuX3VuYmluZCgpfX0sV3IucHJvdG90eXBlLl91bmJpbmQ9ZnVuY3Rpb24oKXt0LmRlZmF1bHQuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHRoaXMuX29uTW91c2VNb3ZlLHtjYXB0dXJlOiEwfSksdC5kZWZhdWx0LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsdGhpcy5fb25Nb3VzZVVwKSx0LmRlZmF1bHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJsdXJcIix0aGlzLl9vbkJsdXIpLHMuZW5hYmxlRHJhZygpfSxXci5wcm90b3R5cGUuX2RlYWN0aXZhdGU9ZnVuY3Rpb24oKXt0aGlzLl9mcmFtZUlkJiYodGhpcy5fbWFwLl9jYW5jZWxSZW5kZXJGcmFtZSh0aGlzLl9mcmFtZUlkKSx0aGlzLl9mcmFtZUlkPW51bGwpLGRlbGV0ZSB0aGlzLl9sYXN0TW92ZUV2ZW50LGRlbGV0ZSB0aGlzLl9wcmV2aW91c1Bvc30sV3IucHJvdG90eXBlLl9pbmVydGlhbFJvdGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2ZpcmVFdmVudChcInJvdGF0ZWVuZFwiLHQpLHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpO3ZhciByPXRoaXMuX21hcCxuPXIuZ2V0QmVhcmluZygpLGk9dGhpcy5faW5lcnRpYSxhPWZ1bmN0aW9uKCl7TWF0aC5hYnMobik8ZS5fYmVhcmluZ1NuYXA/ci5yZXNldE5vcnRoKHtub01vdmVTdGFydDohMH0se29yaWdpbmFsRXZlbnQ6dH0pOmUuX2ZpcmVFdmVudChcIm1vdmVlbmRcIix0KSxlLl9waXRjaFdpdGhSb3RhdGUmJmUuX2ZpcmVFdmVudChcInBpdGNoZW5kXCIsdCl9O2lmKGkubGVuZ3RoPDIpYSgpO2Vsc2V7dmFyIG89aVswXSxzPWlbaS5sZW5ndGgtMV0sbD1pW2kubGVuZ3RoLTJdLGM9ci5fbm9ybWFsaXplQmVhcmluZyhuLGxbMV0pLHU9c1sxXS1vWzFdLGg9dTwwPy0xOjEsZj0oc1swXS1vWzBdKS8xZTM7aWYoMCE9PXUmJjAhPT1mKXt2YXIgcD1NYXRoLmFicyh1KiguMjUvZikpO3A+MTgwJiYocD0xODApO3ZhciBkPXAvMTgwO2MrPWgqcCooZC8yKSxNYXRoLmFicyhyLl9ub3JtYWxpemVCZWFyaW5nKGMsMCkpPHRoaXMuX2JlYXJpbmdTbmFwJiYoYz1yLl9ub3JtYWxpemVCZWFyaW5nKDAsYykpLHIucm90YXRlVG8oYyx7ZHVyYXRpb246MWUzKmQsZWFzaW5nOllyLG5vTW92ZVN0YXJ0OiEwfSx7b3JpZ2luYWxFdmVudDp0fSl9ZWxzZSBhKCl9fSxXci5wcm90b3R5cGUuX2ZpcmVFdmVudD1mdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudChlLHI/e29yaWdpbmFsRXZlbnQ6cn06e30pKX0sV3IucHJvdG90eXBlLl9kcmFpbkluZXJ0aWFCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5faW5lcnRpYSxlPWEubm93KCk7dC5sZW5ndGg+MCYmZS10WzBdWzBdPjE2MDspdC5zaGlmdCgpfTt2YXIgWHI9dC5iZXppZXIoMCwwLC4zLDEpLFpyPWZ1bmN0aW9uKGUpe3RoaXMuX21hcD1lLHRoaXMuX2VsPWUuZ2V0Q2FudmFzQ29udGFpbmVyKCksdGhpcy5fc3RhdGU9XCJkaXNhYmxlZFwiLHQuYmluZEFsbChbXCJfb25Nb3ZlXCIsXCJfb25Nb3VzZVVwXCIsXCJfb25Ub3VjaEVuZFwiLFwiX29uQmx1clwiLFwiX29uRHJhZ0ZyYW1lXCJdLHRoaXMpfTtaci5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuXCJkaXNhYmxlZFwiIT09dGhpcy5fc3RhdGV9LFpyLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVyblwiYWN0aXZlXCI9PT10aGlzLl9zdGF0ZX0sWnIucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9lbC5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtdG91Y2gtZHJhZy1wYW5cIiksdGhpcy5fc3RhdGU9XCJlbmFibGVkXCIpfSxaci5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe2lmKHRoaXMuaXNFbmFibGVkKCkpc3dpdGNoKHRoaXMuX2VsLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC10b3VjaC1kcmFnLXBhblwiKSx0aGlzLl9zdGF0ZSl7Y2FzZVwiYWN0aXZlXCI6dGhpcy5fc3RhdGU9XCJkaXNhYmxlZFwiLHRoaXMuX3VuYmluZCgpLHRoaXMuX2RlYWN0aXZhdGUoKSx0aGlzLl9maXJlRXZlbnQoXCJkcmFnZW5kXCIpLHRoaXMuX2ZpcmVFdmVudChcIm1vdmVlbmRcIik7YnJlYWs7Y2FzZVwicGVuZGluZ1wiOnRoaXMuX3N0YXRlPVwiZGlzYWJsZWRcIix0aGlzLl91bmJpbmQoKTticmVhaztkZWZhdWx0OnRoaXMuX3N0YXRlPVwiZGlzYWJsZWRcIn19LFpyLnByb3RvdHlwZS5vbk1vdXNlRG93bj1mdW5jdGlvbihlKXtcImVuYWJsZWRcIj09PXRoaXMuX3N0YXRlJiYoZS5jdHJsS2V5fHwwIT09cy5tb3VzZUJ1dHRvbihlKXx8KHMuYWRkRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsXCJtb3VzZW1vdmVcIix0aGlzLl9vbk1vdmUse2NhcHR1cmU6ITB9KSxzLmFkZEV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LmRvY3VtZW50LFwibW91c2V1cFwiLHRoaXMuX29uTW91c2VVcCksdGhpcy5fc3RhcnQoZSkpKX0sWnIucHJvdG90eXBlLm9uVG91Y2hTdGFydD1mdW5jdGlvbihlKXtcImVuYWJsZWRcIj09PXRoaXMuX3N0YXRlJiYoZS50b3VjaGVzLmxlbmd0aD4xfHwocy5hZGRFdmVudExpc3RlbmVyKHQuZGVmYXVsdC5kb2N1bWVudCxcInRvdWNobW92ZVwiLHRoaXMuX29uTW92ZSx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSkscy5hZGRFdmVudExpc3RlbmVyKHQuZGVmYXVsdC5kb2N1bWVudCxcInRvdWNoZW5kXCIsdGhpcy5fb25Ub3VjaEVuZCksdGhpcy5fc3RhcnQoZSkpKX0sWnIucHJvdG90eXBlLl9zdGFydD1mdW5jdGlvbihlKXt0LmRlZmF1bHQuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIix0aGlzLl9vbkJsdXIpLHRoaXMuX3N0YXRlPVwicGVuZGluZ1wiLHRoaXMuX3ByZXZpb3VzUG9zPXMubW91c2VQb3ModGhpcy5fZWwsZSksdGhpcy5faW5lcnRpYT1bW2Eubm93KCksdGhpcy5fcHJldmlvdXNQb3NdXX0sWnIucHJvdG90eXBlLl9vbk1vdmU9ZnVuY3Rpb24odCl7dGhpcy5fbGFzdE1vdmVFdmVudD10LHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9wb3M9cy5tb3VzZVBvcyh0aGlzLl9lbCx0KSx0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKSx0aGlzLl9pbmVydGlhLnB1c2goW2Eubm93KCksdGhpcy5fcG9zXSksXCJwZW5kaW5nXCI9PT10aGlzLl9zdGF0ZSYmKHRoaXMuX3N0YXRlPVwiYWN0aXZlXCIsdGhpcy5fZmlyZUV2ZW50KFwiZHJhZ3N0YXJ0XCIsdCksdGhpcy5fZmlyZUV2ZW50KFwibW92ZXN0YXJ0XCIsdCkpLHRoaXMuX2ZyYW1lSWR8fCh0aGlzLl9mcmFtZUlkPXRoaXMuX21hcC5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX29uRHJhZ0ZyYW1lKSl9LFpyLnByb3RvdHlwZS5fb25EcmFnRnJhbWU9ZnVuY3Rpb24oKXt0aGlzLl9mcmFtZUlkPW51bGw7dmFyIHQ9dGhpcy5fbGFzdE1vdmVFdmVudDtpZih0KXt2YXIgZT10aGlzLl9tYXAudHJhbnNmb3JtO2Uuc2V0TG9jYXRpb25BdFBvaW50KGUucG9pbnRMb2NhdGlvbih0aGlzLl9wcmV2aW91c1BvcyksdGhpcy5fcG9zKSx0aGlzLl9maXJlRXZlbnQoXCJkcmFnXCIsdCksdGhpcy5fZmlyZUV2ZW50KFwibW92ZVwiLHQpLHRoaXMuX3ByZXZpb3VzUG9zPXRoaXMuX3BvcyxkZWxldGUgdGhpcy5fbGFzdE1vdmVFdmVudH19LFpyLnByb3RvdHlwZS5fb25Nb3VzZVVwPWZ1bmN0aW9uKHQpe2lmKDA9PT1zLm1vdXNlQnV0dG9uKHQpKXN3aXRjaCh0aGlzLl9zdGF0ZSl7Y2FzZVwiYWN0aXZlXCI6dGhpcy5fc3RhdGU9XCJlbmFibGVkXCIscy5zdXBwcmVzc0NsaWNrKCksdGhpcy5fdW5iaW5kKCksdGhpcy5fZGVhY3RpdmF0ZSgpLHRoaXMuX2luZXJ0aWFsUGFuKHQpO2JyZWFrO2Nhc2VcInBlbmRpbmdcIjp0aGlzLl9zdGF0ZT1cImVuYWJsZWRcIix0aGlzLl91bmJpbmQoKX19LFpyLnByb3RvdHlwZS5fb25Ub3VjaEVuZD1mdW5jdGlvbih0KXtzd2l0Y2godGhpcy5fc3RhdGUpe2Nhc2VcImFjdGl2ZVwiOnRoaXMuX3N0YXRlPVwiZW5hYmxlZFwiLHRoaXMuX3VuYmluZCgpLHRoaXMuX2RlYWN0aXZhdGUoKSx0aGlzLl9pbmVydGlhbFBhbih0KTticmVhaztjYXNlXCJwZW5kaW5nXCI6dGhpcy5fc3RhdGU9XCJlbmFibGVkXCIsdGhpcy5fdW5iaW5kKCl9fSxaci5wcm90b3R5cGUuX29uQmx1cj1mdW5jdGlvbih0KXtzd2l0Y2godGhpcy5fc3RhdGUpe2Nhc2VcImFjdGl2ZVwiOnRoaXMuX3N0YXRlPVwiZW5hYmxlZFwiLHRoaXMuX3VuYmluZCgpLHRoaXMuX2RlYWN0aXZhdGUoKSx0aGlzLl9maXJlRXZlbnQoXCJkcmFnZW5kXCIsdCksdGhpcy5fZmlyZUV2ZW50KFwibW92ZWVuZFwiLHQpO2JyZWFrO2Nhc2VcInBlbmRpbmdcIjp0aGlzLl9zdGF0ZT1cImVuYWJsZWRcIix0aGlzLl91bmJpbmQoKX19LFpyLnByb3RvdHlwZS5fdW5iaW5kPWZ1bmN0aW9uKCl7cy5yZW1vdmVFdmVudExpc3RlbmVyKHQuZGVmYXVsdC5kb2N1bWVudCxcInRvdWNobW92ZVwiLHRoaXMuX29uTW92ZSx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSkscy5yZW1vdmVFdmVudExpc3RlbmVyKHQuZGVmYXVsdC5kb2N1bWVudCxcInRvdWNoZW5kXCIsdGhpcy5fb25Ub3VjaEVuZCkscy5yZW1vdmVFdmVudExpc3RlbmVyKHQuZGVmYXVsdC5kb2N1bWVudCxcIm1vdXNlbW92ZVwiLHRoaXMuX29uTW92ZSx7Y2FwdHVyZTohMH0pLHMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsXCJtb3VzZXVwXCIsdGhpcy5fb25Nb3VzZVVwKSxzLnJlbW92ZUV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LFwiYmx1clwiLHRoaXMuX29uQmx1cil9LFpyLnByb3RvdHlwZS5fZGVhY3RpdmF0ZT1mdW5jdGlvbigpe3RoaXMuX2ZyYW1lSWQmJih0aGlzLl9tYXAuX2NhbmNlbFJlbmRlckZyYW1lKHRoaXMuX2ZyYW1lSWQpLHRoaXMuX2ZyYW1lSWQ9bnVsbCksZGVsZXRlIHRoaXMuX2xhc3RNb3ZlRXZlbnQsZGVsZXRlIHRoaXMuX3ByZXZpb3VzUG9zLGRlbGV0ZSB0aGlzLl9wb3N9LFpyLnByb3RvdHlwZS5faW5lcnRpYWxQYW49ZnVuY3Rpb24odCl7dGhpcy5fZmlyZUV2ZW50KFwiZHJhZ2VuZFwiLHQpLHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpO3ZhciBlPXRoaXMuX2luZXJ0aWE7aWYoZS5sZW5ndGg8Mil0aGlzLl9maXJlRXZlbnQoXCJtb3ZlZW5kXCIsdCk7ZWxzZXt2YXIgcj1lW2UubGVuZ3RoLTFdLG49ZVswXSxpPXJbMV0uc3ViKG5bMV0pLGE9KHJbMF0tblswXSkvMWUzO2lmKDA9PT1hfHxyWzFdLmVxdWFscyhuWzFdKSl0aGlzLl9maXJlRXZlbnQoXCJtb3ZlZW5kXCIsdCk7ZWxzZXt2YXIgbz1pLm11bHQoLjMvYSkscz1vLm1hZygpO3M+MTQwMCYmKHM9MTQwMCxvLl91bml0KCkuX211bHQocykpO3ZhciBsPXMvNzUwLGM9by5tdWx0KC1sLzIpO3RoaXMuX21hcC5wYW5CeShjLHtkdXJhdGlvbjoxZTMqbCxlYXNpbmc6WHIsbm9Nb3ZlU3RhcnQ6ITB9LHtvcmlnaW5hbEV2ZW50OnR9KX19fSxaci5wcm90b3R5cGUuX2ZpcmVFdmVudD1mdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudChlLHI/e29yaWdpbmFsRXZlbnQ6cn06e30pKX0sWnIucHJvdG90eXBlLl9kcmFpbkluZXJ0aWFCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5faW5lcnRpYSxlPWEubm93KCk7dC5sZW5ndGg+MCYmZS10WzBdWzBdPjE2MDspdC5zaGlmdCgpfTt2YXIgJHI9ZnVuY3Rpb24oZSl7dGhpcy5fbWFwPWUsdGhpcy5fZWw9ZS5nZXRDYW52YXNDb250YWluZXIoKSx0LmJpbmRBbGwoW1wiX29uS2V5RG93blwiXSx0aGlzKX07ZnVuY3Rpb24gSnIodCl7cmV0dXJuIHQqKDItdCl9JHIucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZW5hYmxlZH0sJHIucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9lbC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLHRoaXMuX29uS2V5RG93biwhMSksdGhpcy5fZW5hYmxlZD0hMCl9LCRyLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsdGhpcy5fb25LZXlEb3duKSx0aGlzLl9lbmFibGVkPSExKX0sJHIucHJvdG90eXBlLl9vbktleURvd249ZnVuY3Rpb24odCl7aWYoISh0LmFsdEtleXx8dC5jdHJsS2V5fHx0Lm1ldGFLZXkpKXt2YXIgZT0wLHI9MCxuPTAsaT0wLGE9MDtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIDYxOmNhc2UgMTA3OmNhc2UgMTcxOmNhc2UgMTg3OmU9MTticmVhaztjYXNlIDE4OTpjYXNlIDEwOTpjYXNlIDE3MzplPS0xO2JyZWFrO2Nhc2UgMzc6dC5zaGlmdEtleT9yPS0xOih0LnByZXZlbnREZWZhdWx0KCksaT0tMSk7YnJlYWs7Y2FzZSAzOTp0LnNoaWZ0S2V5P3I9MToodC5wcmV2ZW50RGVmYXVsdCgpLGk9MSk7YnJlYWs7Y2FzZSAzODp0LnNoaWZ0S2V5P249MToodC5wcmV2ZW50RGVmYXVsdCgpLGE9LTEpO2JyZWFrO2Nhc2UgNDA6dC5zaGlmdEtleT9uPS0xOihhPTEsdC5wcmV2ZW50RGVmYXVsdCgpKTticmVhaztkZWZhdWx0OnJldHVybn12YXIgbz10aGlzLl9tYXAscz1vLmdldFpvb20oKSxsPXtkdXJhdGlvbjozMDAsZGVsYXlFbmRFdmVudHM6NTAwLGVhc2luZzpKcix6b29tOmU/TWF0aC5yb3VuZChzKStlKih0LnNoaWZ0S2V5PzI6MSk6cyxiZWFyaW5nOm8uZ2V0QmVhcmluZygpKzE1KnIscGl0Y2g6by5nZXRQaXRjaCgpKzEwKm4sb2Zmc2V0OlsxMDAqLWksMTAwKi1hXSxjZW50ZXI6by5nZXRDZW50ZXIoKX07by5lYXNlVG8obCx7b3JpZ2luYWxFdmVudDp0fSl9fTt2YXIgS3I9ZnVuY3Rpb24oZSl7dGhpcy5fbWFwPWUsdC5iaW5kQWxsKFtcIl9vbkRibENsaWNrXCIsXCJfb25ab29tRW5kXCJdLHRoaXMpfTtLci5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9lbmFibGVkfSxLci5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2FjdGl2ZX0sS3IucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9lbmFibGVkPSEwKX0sS3IucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpJiYodGhpcy5fZW5hYmxlZD0hMSl9LEtyLnByb3RvdHlwZS5vblRvdWNoU3RhcnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLmlzRW5hYmxlZCgpJiYodC5wb2ludHMubGVuZ3RoPjF8fCh0aGlzLl90YXBwZWQ/KGNsZWFyVGltZW91dCh0aGlzLl90YXBwZWQpLHRoaXMuX3RhcHBlZD1udWxsLHRoaXMuX3pvb20odCkpOnRoaXMuX3RhcHBlZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5fdGFwcGVkPW51bGx9LDMwMCkpKX0sS3IucHJvdG90eXBlLm9uRGJsQ2xpY2s9ZnVuY3Rpb24odCl7dGhpcy5pc0VuYWJsZWQoKSYmKHQub3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3pvb20odCkpfSxLci5wcm90b3R5cGUuX3pvb209ZnVuY3Rpb24odCl7dGhpcy5fYWN0aXZlPSEwLHRoaXMuX21hcC5vbihcInpvb21lbmRcIix0aGlzLl9vblpvb21FbmQpLHRoaXMuX21hcC56b29tVG8odGhpcy5fbWFwLmdldFpvb20oKSsodC5vcmlnaW5hbEV2ZW50LnNoaWZ0S2V5Py0xOjEpLHthcm91bmQ6dC5sbmdMYXR9LHQpfSxLci5wcm90b3R5cGUuX29uWm9vbUVuZD1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMSx0aGlzLl9tYXAub2ZmKFwiem9vbWVuZFwiLHRoaXMuX29uWm9vbUVuZCl9O3ZhciBRcj10LmJlemllcigwLDAsLjE1LDEpLHRuPWZ1bmN0aW9uKGUpe3RoaXMuX21hcD1lLHRoaXMuX2VsPWUuZ2V0Q2FudmFzQ29udGFpbmVyKCksdC5iaW5kQWxsKFtcIl9vbk1vdmVcIixcIl9vbkVuZFwiLFwiX29uVG91Y2hGcmFtZVwiXSx0aGlzKX07dG4ucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZW5hYmxlZH0sdG4ucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbih0KXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fZWwuY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLXRvdWNoLXpvb20tcm90YXRlXCIpLHRoaXMuX2VuYWJsZWQ9ITAsdGhpcy5fYXJvdW5kQ2VudGVyPSEhdCYmXCJjZW50ZXJcIj09PXQuYXJvdW5kKX0sdG4ucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpJiYodGhpcy5fZWwuY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLXRvdWNoLXpvb20tcm90YXRlXCIpLHRoaXMuX2VuYWJsZWQ9ITEpfSx0bi5wcm90b3R5cGUuZGlzYWJsZVJvdGF0aW9uPWZ1bmN0aW9uKCl7dGhpcy5fcm90YXRpb25EaXNhYmxlZD0hMH0sdG4ucHJvdG90eXBlLmVuYWJsZVJvdGF0aW9uPWZ1bmN0aW9uKCl7dGhpcy5fcm90YXRpb25EaXNhYmxlZD0hMX0sdG4ucHJvdG90eXBlLm9uU3RhcnQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5pc0VuYWJsZWQoKSYmMj09PWUudG91Y2hlcy5sZW5ndGgpe3ZhciByPXMubW91c2VQb3ModGhpcy5fZWwsZS50b3VjaGVzWzBdKSxuPXMubW91c2VQb3ModGhpcy5fZWwsZS50b3VjaGVzWzFdKTt0aGlzLl9zdGFydFZlYz1yLnN1YihuKSx0aGlzLl9nZXN0dXJlSW50ZW50PXZvaWQgMCx0aGlzLl9pbmVydGlhPVtdLHMuYWRkRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsXCJ0b3VjaG1vdmVcIix0aGlzLl9vbk1vdmUse3Bhc3NpdmU6ITF9KSxzLmFkZEV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LmRvY3VtZW50LFwidG91Y2hlbmRcIix0aGlzLl9vbkVuZCl9fSx0bi5wcm90b3R5cGUuX2dldFRvdWNoRXZlbnREYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPXMubW91c2VQb3ModGhpcy5fZWwsdC50b3VjaGVzWzBdKSxyPXMubW91c2VQb3ModGhpcy5fZWwsdC50b3VjaGVzWzFdKSxuPWUuc3ViKHIpO3JldHVybnt2ZWM6bixjZW50ZXI6ZS5hZGQocikuZGl2KDIpLHNjYWxlOm4ubWFnKCkvdGhpcy5fc3RhcnRWZWMubWFnKCksYmVhcmluZzp0aGlzLl9yb3RhdGlvbkRpc2FibGVkPzA6MTgwKm4uYW5nbGVXaXRoKHRoaXMuX3N0YXJ0VmVjKS9NYXRoLlBJfX0sdG4ucHJvdG90eXBlLl9vbk1vdmU9ZnVuY3Rpb24oZSl7aWYoMj09PWUudG91Y2hlcy5sZW5ndGgpe3ZhciByPXRoaXMuX2dldFRvdWNoRXZlbnREYXRhKGUpLG49ci52ZWMsaT1yLnNjYWxlLGE9ci5iZWFyaW5nO2lmKCF0aGlzLl9nZXN0dXJlSW50ZW50KXt2YXIgbz1NYXRoLmFicygxLWkpPi4xNTtNYXRoLmFicyhhKT4xMD90aGlzLl9nZXN0dXJlSW50ZW50PVwicm90YXRlXCI6byYmKHRoaXMuX2dlc3R1cmVJbnRlbnQ9XCJ6b29tXCIpLHRoaXMuX2dlc3R1cmVJbnRlbnQmJih0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudCh0aGlzLl9nZXN0dXJlSW50ZW50K1wic3RhcnRcIix7b3JpZ2luYWxFdmVudDplfSkpLHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KFwibW92ZXN0YXJ0XCIse29yaWdpbmFsRXZlbnQ6ZX0pKSx0aGlzLl9zdGFydFZlYz1uKX10aGlzLl9sYXN0VG91Y2hFdmVudD1lLHRoaXMuX2ZyYW1lSWR8fCh0aGlzLl9mcmFtZUlkPXRoaXMuX21hcC5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX29uVG91Y2hGcmFtZSkpLGUucHJldmVudERlZmF1bHQoKX19LHRuLnByb3RvdHlwZS5fb25Ub3VjaEZyYW1lPWZ1bmN0aW9uKCl7dGhpcy5fZnJhbWVJZD1udWxsO3ZhciBlPXRoaXMuX2dlc3R1cmVJbnRlbnQ7aWYoZSl7dmFyIHI9dGhpcy5fbWFwLnRyYW5zZm9ybTt0aGlzLl9zdGFydFNjYWxlfHwodGhpcy5fc3RhcnRTY2FsZT1yLnNjYWxlLHRoaXMuX3N0YXJ0QmVhcmluZz1yLmJlYXJpbmcpO3ZhciBuPXRoaXMuX2dldFRvdWNoRXZlbnREYXRhKHRoaXMuX2xhc3RUb3VjaEV2ZW50KSxpPW4uY2VudGVyLG89bi5iZWFyaW5nLHM9bi5zY2FsZSxsPXIucG9pbnRMb2NhdGlvbihpKSxjPXIubG9jYXRpb25Qb2ludChsKTtcInJvdGF0ZVwiPT09ZSYmKHIuYmVhcmluZz10aGlzLl9zdGFydEJlYXJpbmcrbyksci56b29tPXIuc2NhbGVab29tKHRoaXMuX3N0YXJ0U2NhbGUqcyksci5zZXRMb2NhdGlvbkF0UG9pbnQobCxjKSx0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudChlLHtvcmlnaW5hbEV2ZW50OnRoaXMuX2xhc3RUb3VjaEV2ZW50fSkpLHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KFwibW92ZVwiLHtvcmlnaW5hbEV2ZW50OnRoaXMuX2xhc3RUb3VjaEV2ZW50fSkpLHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpLHRoaXMuX2luZXJ0aWEucHVzaChbYS5ub3coKSxzLGldKX19LHRuLnByb3RvdHlwZS5fb25FbmQ9ZnVuY3Rpb24oZSl7cy5yZW1vdmVFdmVudExpc3RlbmVyKHQuZGVmYXVsdC5kb2N1bWVudCxcInRvdWNobW92ZVwiLHRoaXMuX29uTW92ZSx7cGFzc2l2ZTohMX0pLHMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsXCJ0b3VjaGVuZFwiLHRoaXMuX29uRW5kKTt2YXIgcj10aGlzLl9nZXN0dXJlSW50ZW50LG49dGhpcy5fc3RhcnRTY2FsZTtpZih0aGlzLl9mcmFtZUlkJiYodGhpcy5fbWFwLl9jYW5jZWxSZW5kZXJGcmFtZSh0aGlzLl9mcmFtZUlkKSx0aGlzLl9mcmFtZUlkPW51bGwpLGRlbGV0ZSB0aGlzLl9nZXN0dXJlSW50ZW50LGRlbGV0ZSB0aGlzLl9zdGFydFNjYWxlLGRlbGV0ZSB0aGlzLl9zdGFydEJlYXJpbmcsZGVsZXRlIHRoaXMuX2xhc3RUb3VjaEV2ZW50LHIpe3RoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KHIrXCJlbmRcIix7b3JpZ2luYWxFdmVudDplfSkpLHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpO3ZhciBpPXRoaXMuX2luZXJ0aWEsYT10aGlzLl9tYXA7aWYoaS5sZW5ndGg8MilhLnNuYXBUb05vcnRoKHt9LHtvcmlnaW5hbEV2ZW50OmV9KTtlbHNle3ZhciBvPWlbaS5sZW5ndGgtMV0sbD1pWzBdLGM9YS50cmFuc2Zvcm0uc2NhbGVab29tKG4qb1sxXSksdT1hLnRyYW5zZm9ybS5zY2FsZVpvb20obipsWzFdKSxoPWMtdSxmPShvWzBdLWxbMF0pLzFlMyxwPW9bMl07aWYoMCE9PWYmJmMhPT11KXt2YXIgZD0uMTUqaC9mO01hdGguYWJzKGQpPjIuNSYmKGQ9ZD4wPzIuNTotMi41KTt2YXIgZz0xZTMqTWF0aC5hYnMoZC8oMTIqLjE1KSksdj1jK2QqZy8yZTM7djwwJiYodj0wKSxhLmVhc2VUbyh7em9vbTp2LGR1cmF0aW9uOmcsZWFzaW5nOlFyLGFyb3VuZDp0aGlzLl9hcm91bmRDZW50ZXI/YS5nZXRDZW50ZXIoKTphLnVucHJvamVjdChwKSxub01vdmVTdGFydDohMH0se29yaWdpbmFsRXZlbnQ6ZX0pfWVsc2UgYS5zbmFwVG9Ob3J0aCh7fSx7b3JpZ2luYWxFdmVudDplfSl9fX0sdG4ucHJvdG90eXBlLl9kcmFpbkluZXJ0aWFCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5faW5lcnRpYSxlPWEubm93KCk7dC5sZW5ndGg+MiYmZS10WzBdWzBdPjE2MDspdC5zaGlmdCgpfTt2YXIgZW49e3Njcm9sbFpvb206SHIsYm94Wm9vbTpHcixkcmFnUm90YXRlOldyLGRyYWdQYW46WnIsa2V5Ym9hcmQ6JHIsZG91YmxlQ2xpY2tab29tOktyLHRvdWNoWm9vbVJvdGF0ZTp0bn0scm49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4pe2UuY2FsbCh0aGlzKSx0aGlzLl9tb3Zpbmc9ITEsdGhpcy5fem9vbWluZz0hMSx0aGlzLnRyYW5zZm9ybT1yLHRoaXMuX2JlYXJpbmdTbmFwPW4uYmVhcmluZ1NuYXAsdC5iaW5kQWxsKFtcIl9yZW5kZXJGcmFtZUNhbGxiYWNrXCJdLHRoaXMpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5nZXRDZW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0uY2VudGVyfSxyLnByb3RvdHlwZS5zZXRDZW50ZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5qdW1wVG8oe2NlbnRlcjp0fSxlKX0sci5wcm90b3R5cGUucGFuQnk9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlPXQuZGVmYXVsdCQxLmNvbnZlcnQoZSkubXVsdCgtMSksdGhpcy5wYW5Ubyh0aGlzLnRyYW5zZm9ybS5jZW50ZXIsdC5leHRlbmQoe29mZnNldDplfSxyKSxuKX0sci5wcm90b3R5cGUucGFuVG89ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLmVhc2VUbyh0LmV4dGVuZCh7Y2VudGVyOmV9LHIpLG4pfSxyLnByb3RvdHlwZS5nZXRab29tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnpvb219LHIucHJvdG90eXBlLnNldFpvb209ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5qdW1wVG8oe3pvb206dH0sZSksdGhpc30sci5wcm90b3R5cGUuem9vbVRvPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdGhpcy5lYXNlVG8odC5leHRlbmQoe3pvb206ZX0sciksbil9LHIucHJvdG90eXBlLnpvb21Jbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnpvb21Ubyh0aGlzLmdldFpvb20oKSsxLHQsZSksdGhpc30sci5wcm90b3R5cGUuem9vbU91dD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnpvb21Ubyh0aGlzLmdldFpvb20oKS0xLHQsZSksdGhpc30sci5wcm90b3R5cGUuZ2V0QmVhcmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5iZWFyaW5nfSxyLnByb3RvdHlwZS5zZXRCZWFyaW5nPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuanVtcFRvKHtiZWFyaW5nOnR9LGUpLHRoaXN9LHIucHJvdG90eXBlLnJvdGF0ZVRvPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdGhpcy5lYXNlVG8odC5leHRlbmQoe2JlYXJpbmc6ZX0sciksbil9LHIucHJvdG90eXBlLnJlc2V0Tm9ydGg9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdGhpcy5yb3RhdGVUbygwLHQuZXh0ZW5kKHtkdXJhdGlvbjoxZTN9LGUpLHIpLHRoaXN9LHIucHJvdG90eXBlLnNuYXBUb05vcnRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguYWJzKHRoaXMuZ2V0QmVhcmluZygpKTx0aGlzLl9iZWFyaW5nU25hcD90aGlzLnJlc2V0Tm9ydGgodCxlKTp0aGlzfSxyLnByb3RvdHlwZS5nZXRQaXRjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5waXRjaH0sci5wcm90b3R5cGUuc2V0UGl0Y2g9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5qdW1wVG8oe3BpdGNoOnR9LGUpLHRoaXN9LHIucHJvdG90eXBlLmZpdEJvdW5kcz1mdW5jdGlvbihlLHIsbil7aWYoXCJudW1iZXJcIj09dHlwZW9mKHI9dC5leHRlbmQoe3BhZGRpbmc6e3RvcDowLGJvdHRvbTowLHJpZ2h0OjAsbGVmdDowfSxvZmZzZXQ6WzAsMF0sbWF4Wm9vbTp0aGlzLnRyYW5zZm9ybS5tYXhab29tfSxyKSkucGFkZGluZyl7dmFyIGk9ci5wYWRkaW5nO3IucGFkZGluZz17dG9wOmksYm90dG9tOmkscmlnaHQ6aSxsZWZ0Oml9fWlmKCF0LmRlZmF1bHQkMTAoT2JqZWN0LmtleXMoci5wYWRkaW5nKS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTowfSksW1wiYm90dG9tXCIsXCJsZWZ0XCIsXCJyaWdodFwiLFwidG9wXCJdKSlyZXR1cm4gdC53YXJuT25jZShcIm9wdGlvbnMucGFkZGluZyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLCBvciBhbiBPYmplY3Qgd2l0aCBrZXlzICdib3R0b20nLCAnbGVmdCcsICdyaWdodCcsICd0b3AnXCIpLHRoaXM7ZT1ZLmNvbnZlcnQoZSk7dmFyIGE9WyhyLnBhZGRpbmcubGVmdC1yLnBhZGRpbmcucmlnaHQpLzIsKHIucGFkZGluZy50b3Atci5wYWRkaW5nLmJvdHRvbSkvMl0sbz1NYXRoLm1pbihyLnBhZGRpbmcucmlnaHQsci5wYWRkaW5nLmxlZnQpLHM9TWF0aC5taW4oci5wYWRkaW5nLnRvcCxyLnBhZGRpbmcuYm90dG9tKTtyLm9mZnNldD1bci5vZmZzZXRbMF0rYVswXSxyLm9mZnNldFsxXSthWzFdXTt2YXIgbD10LmRlZmF1bHQkMS5jb252ZXJ0KHIub2Zmc2V0KSxjPXRoaXMudHJhbnNmb3JtLHU9Yy5wcm9qZWN0KGUuZ2V0Tm9ydGhXZXN0KCkpLGg9Yy5wcm9qZWN0KGUuZ2V0U291dGhFYXN0KCkpLGY9aC5zdWIodSkscD0oYy53aWR0aC0yKm8tMipNYXRoLmFicyhsLngpKS9mLngsZD0oYy5oZWlnaHQtMipzLTIqTWF0aC5hYnMobC55KSkvZi55O3JldHVybiBkPDB8fHA8MD8odC53YXJuT25jZShcIk1hcCBjYW5ub3QgZml0IHdpdGhpbiBjYW52YXMgd2l0aCB0aGUgZ2l2ZW4gYm91bmRzLCBwYWRkaW5nLCBhbmQvb3Igb2Zmc2V0LlwiKSx0aGlzKTooci5jZW50ZXI9Yy51bnByb2plY3QodS5hZGQoaCkuZGl2KDIpKSxyLnpvb209TWF0aC5taW4oYy5zY2FsZVpvb20oYy5zY2FsZSpNYXRoLm1pbihwLGQpKSxyLm1heFpvb20pLHIuYmVhcmluZz0wLHIubGluZWFyP3RoaXMuZWFzZVRvKHIsbik6dGhpcy5mbHlUbyhyLG4pKX0sci5wcm90b3R5cGUuanVtcFRvPWZ1bmN0aW9uKGUscil7dGhpcy5zdG9wKCk7dmFyIG49dGhpcy50cmFuc2Zvcm0saT0hMSxhPSExLG89ITE7cmV0dXJuXCJ6b29tXCJpbiBlJiZuLnpvb20hPT0rZS56b29tJiYoaT0hMCxuLnpvb209K2Uuem9vbSksdm9pZCAwIT09ZS5jZW50ZXImJihuLmNlbnRlcj1HLmNvbnZlcnQoZS5jZW50ZXIpKSxcImJlYXJpbmdcImluIGUmJm4uYmVhcmluZyE9PStlLmJlYXJpbmcmJihhPSEwLG4uYmVhcmluZz0rZS5iZWFyaW5nKSxcInBpdGNoXCJpbiBlJiZuLnBpdGNoIT09K2UucGl0Y2gmJihvPSEwLG4ucGl0Y2g9K2UucGl0Y2gpLHRoaXMuZmlyZShuZXcgdC5FdmVudChcIm1vdmVzdGFydFwiLHIpKS5maXJlKG5ldyB0LkV2ZW50KFwibW92ZVwiLHIpKSxpJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJ6b29tc3RhcnRcIixyKSkuZmlyZShuZXcgdC5FdmVudChcInpvb21cIixyKSkuZmlyZShuZXcgdC5FdmVudChcInpvb21lbmRcIixyKSksYSYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwicm90YXRlc3RhcnRcIixyKSkuZmlyZShuZXcgdC5FdmVudChcInJvdGF0ZVwiLHIpKS5maXJlKG5ldyB0LkV2ZW50KFwicm90YXRlZW5kXCIscikpLG8mJnRoaXMuZmlyZShuZXcgdC5FdmVudChcInBpdGNoc3RhcnRcIixyKSkuZmlyZShuZXcgdC5FdmVudChcInBpdGNoXCIscikpLmZpcmUobmV3IHQuRXZlbnQoXCJwaXRjaGVuZFwiLHIpKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJtb3ZlZW5kXCIscikpfSxyLnByb3RvdHlwZS5lYXNlVG89ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO3RoaXMuc3RvcCgpLCExPT09KGU9dC5leHRlbmQoe29mZnNldDpbMCwwXSxkdXJhdGlvbjo1MDAsZWFzaW5nOnQuZWFzZX0sZSkpLmFuaW1hdGUmJihlLmR1cmF0aW9uPTApO3ZhciBpPXRoaXMudHJhbnNmb3JtLGE9dGhpcy5nZXRab29tKCksbz10aGlzLmdldEJlYXJpbmcoKSxzPXRoaXMuZ2V0UGl0Y2goKSxsPVwiem9vbVwiaW4gZT8rZS56b29tOmEsYz1cImJlYXJpbmdcImluIGU/dGhpcy5fbm9ybWFsaXplQmVhcmluZyhlLmJlYXJpbmcsbyk6byx1PVwicGl0Y2hcImluIGU/K2UucGl0Y2g6cyxoPWkuY2VudGVyUG9pbnQuYWRkKHQuZGVmYXVsdCQxLmNvbnZlcnQoZS5vZmZzZXQpKSxmPWkucG9pbnRMb2NhdGlvbihoKSxwPUcuY29udmVydChlLmNlbnRlcnx8Zik7dGhpcy5fbm9ybWFsaXplQ2VudGVyKHApO3ZhciBkLGcsdj1pLnByb2plY3QoZiksbT1pLnByb2plY3QocCkuc3ViKHYpLHk9aS56b29tU2NhbGUobC1hKTtyZXR1cm4gZS5hcm91bmQmJihkPUcuY29udmVydChlLmFyb3VuZCksZz1pLmxvY2F0aW9uUG9pbnQoZCkpLHRoaXMuX3pvb21pbmc9bCE9PWEsdGhpcy5fcm90YXRpbmc9byE9PWMsdGhpcy5fcGl0Y2hpbmc9dSE9PXMsdGhpcy5fcHJlcGFyZUVhc2UocixlLm5vTW92ZVN0YXJ0KSxjbGVhclRpbWVvdXQodGhpcy5fZWFzZUVuZFRpbWVvdXRJRCksdGhpcy5fZWFzZShmdW5jdGlvbihlKXtpZihuLl96b29taW5nJiYoaS56b29tPXQubnVtYmVyKGEsbCxlKSksbi5fcm90YXRpbmcmJihpLmJlYXJpbmc9dC5udW1iZXIobyxjLGUpKSxuLl9waXRjaGluZyYmKGkucGl0Y2g9dC5udW1iZXIocyx1LGUpKSxkKWkuc2V0TG9jYXRpb25BdFBvaW50KGQsZyk7ZWxzZXt2YXIgZj1pLnpvb21TY2FsZShpLnpvb20tYSkscD1sPmE/TWF0aC5taW4oMix5KTpNYXRoLm1heCguNSx5KSx4PU1hdGgucG93KHAsMS1lKSxiPWkudW5wcm9qZWN0KHYuYWRkKG0ubXVsdChlKngpKS5tdWx0KGYpKTtpLnNldExvY2F0aW9uQXRQb2ludChpLnJlbmRlcldvcmxkQ29waWVzP2Iud3JhcCgpOmIsaCl9bi5fZmlyZU1vdmVFdmVudHMocil9LGZ1bmN0aW9uKCl7ZS5kZWxheUVuZEV2ZW50cz9uLl9lYXNlRW5kVGltZW91dElEPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fYWZ0ZXJFYXNlKHIpfSxlLmRlbGF5RW5kRXZlbnRzKTpuLl9hZnRlckVhc2Uocil9LGUpLHRoaXN9LHIucHJvdG90eXBlLl9wcmVwYXJlRWFzZT1mdW5jdGlvbihlLHIpe3RoaXMuX21vdmluZz0hMCxyfHx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJtb3Zlc3RhcnRcIixlKSksdGhpcy5fem9vbWluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiem9vbXN0YXJ0XCIsZSkpLHRoaXMuX3JvdGF0aW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJyb3RhdGVzdGFydFwiLGUpKSx0aGlzLl9waXRjaGluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwicGl0Y2hzdGFydFwiLGUpKX0sci5wcm90b3R5cGUuX2ZpcmVNb3ZlRXZlbnRzPWZ1bmN0aW9uKGUpe3RoaXMuZmlyZShuZXcgdC5FdmVudChcIm1vdmVcIixlKSksdGhpcy5fem9vbWluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiem9vbVwiLGUpKSx0aGlzLl9yb3RhdGluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwicm90YXRlXCIsZSkpLHRoaXMuX3BpdGNoaW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJwaXRjaFwiLGUpKX0sci5wcm90b3R5cGUuX2FmdGVyRWFzZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzLl96b29taW5nLG49dGhpcy5fcm90YXRpbmcsaT10aGlzLl9waXRjaGluZzt0aGlzLl9tb3Zpbmc9ITEsdGhpcy5fem9vbWluZz0hMSx0aGlzLl9yb3RhdGluZz0hMSx0aGlzLl9waXRjaGluZz0hMSxyJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJ6b29tZW5kXCIsZSkpLG4mJnRoaXMuZmlyZShuZXcgdC5FdmVudChcInJvdGF0ZWVuZFwiLGUpKSxpJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJwaXRjaGVuZFwiLGUpKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJtb3ZlZW5kXCIsZSkpfSxyLnByb3RvdHlwZS5mbHlUbz1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7dGhpcy5zdG9wKCksZT10LmV4dGVuZCh7b2Zmc2V0OlswLDBdLHNwZWVkOjEuMixjdXJ2ZToxLjQyLGVhc2luZzp0LmVhc2V9LGUpO3ZhciBpPXRoaXMudHJhbnNmb3JtLGE9dGhpcy5nZXRab29tKCksbz10aGlzLmdldEJlYXJpbmcoKSxzPXRoaXMuZ2V0UGl0Y2goKSxsPVwiem9vbVwiaW4gZT90LmNsYW1wKCtlLnpvb20saS5taW5ab29tLGkubWF4Wm9vbSk6YSxjPVwiYmVhcmluZ1wiaW4gZT90aGlzLl9ub3JtYWxpemVCZWFyaW5nKGUuYmVhcmluZyxvKTpvLHU9XCJwaXRjaFwiaW4gZT8rZS5waXRjaDpzLGg9aS56b29tU2NhbGUobC1hKSxmPWkuY2VudGVyUG9pbnQuYWRkKHQuZGVmYXVsdCQxLmNvbnZlcnQoZS5vZmZzZXQpKSxwPWkucG9pbnRMb2NhdGlvbihmKSxkPUcuY29udmVydChlLmNlbnRlcnx8cCk7dGhpcy5fbm9ybWFsaXplQ2VudGVyKGQpO3ZhciBnPWkucHJvamVjdChwKSx2PWkucHJvamVjdChkKS5zdWIoZyksbT1lLmN1cnZlLHk9TWF0aC5tYXgoaS53aWR0aCxpLmhlaWdodCkseD15L2gsYj12Lm1hZygpO2lmKFwibWluWm9vbVwiaW4gZSl7dmFyIF89dC5jbGFtcChNYXRoLm1pbihlLm1pblpvb20sYSxsKSxpLm1pblpvb20saS5tYXhab29tKSx3PXkvaS56b29tU2NhbGUoXy1hKTttPU1hdGguc3FydCh3L2IqMil9dmFyIGs9bSptO2Z1bmN0aW9uIEEodCl7dmFyIGU9KHgqeC15KnkrKHQ/LTE6MSkqayprKmIqYikvKDIqKHQ/eDp5KSprKmIpO3JldHVybiBNYXRoLmxvZyhNYXRoLnNxcnQoZSplKzEpLWUpfWZ1bmN0aW9uIFQodCl7cmV0dXJuKE1hdGguZXhwKHQpLU1hdGguZXhwKC10KSkvMn1mdW5jdGlvbiBNKHQpe3JldHVybihNYXRoLmV4cCh0KStNYXRoLmV4cCgtdCkpLzJ9dmFyIFM9QSgwKSxFPWZ1bmN0aW9uKHQpe3JldHVybiBNKFMpL00oUyttKnQpfSxDPWZ1bmN0aW9uKHQpe3JldHVybiB5KigoTShTKSooVChlPVMrbSp0KS9NKGUpKS1UKFMpKS9rKS9iO3ZhciBlfSxMPShBKDEpLVMpL207aWYoTWF0aC5hYnMoYik8MWUtNnx8IWlzRmluaXRlKEwpKXtpZihNYXRoLmFicyh5LXgpPDFlLTYpcmV0dXJuIHRoaXMuZWFzZVRvKGUscik7dmFyIHo9eDx5Py0xOjE7TD1NYXRoLmFicyhNYXRoLmxvZyh4L3kpKS9tLEM9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sRT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5leHAoeiptKnQpfX1pZihcImR1cmF0aW9uXCJpbiBlKWUuZHVyYXRpb249K2UuZHVyYXRpb247ZWxzZXt2YXIgTz1cInNjcmVlblNwZWVkXCJpbiBlPytlLnNjcmVlblNwZWVkL206K2Uuc3BlZWQ7ZS5kdXJhdGlvbj0xZTMqTC9PfXJldHVybiBlLm1heER1cmF0aW9uJiZlLmR1cmF0aW9uPmUubWF4RHVyYXRpb24mJihlLmR1cmF0aW9uPTApLHRoaXMuX3pvb21pbmc9ITAsdGhpcy5fcm90YXRpbmc9byE9PWMsdGhpcy5fcGl0Y2hpbmc9dSE9PXMsdGhpcy5fcHJlcGFyZUVhc2UociwhMSksdGhpcy5fZWFzZShmdW5jdGlvbihlKXt2YXIgbD1lKkwsaD0xL0UobCk7aS56b29tPWEraS5zY2FsZVpvb20oaCksbi5fcm90YXRpbmcmJihpLmJlYXJpbmc9dC5udW1iZXIobyxjLGUpKSxuLl9waXRjaGluZyYmKGkucGl0Y2g9dC5udW1iZXIocyx1LGUpKTt2YXIgcD1pLnVucHJvamVjdChnLmFkZCh2Lm11bHQoQyhsKSkpLm11bHQoaCkpO2kuc2V0TG9jYXRpb25BdFBvaW50KGkucmVuZGVyV29ybGRDb3BpZXM/cC53cmFwKCk6cCxmKSxuLl9maXJlTW92ZUV2ZW50cyhyKX0sZnVuY3Rpb24oKXtyZXR1cm4gbi5fYWZ0ZXJFYXNlKHIpfSxlKSx0aGlzfSxyLnByb3RvdHlwZS5pc0Vhc2luZz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZWFzZUZyYW1lSWR9LHIucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXtpZih0aGlzLl9lYXNlRnJhbWVJZCYmKHRoaXMuX2NhbmNlbFJlbmRlckZyYW1lKHRoaXMuX2Vhc2VGcmFtZUlkKSxkZWxldGUgdGhpcy5fZWFzZUZyYW1lSWQsZGVsZXRlIHRoaXMuX29uRWFzZUZyYW1lKSx0aGlzLl9vbkVhc2VFbmQpe3ZhciB0PXRoaXMuX29uRWFzZUVuZDtkZWxldGUgdGhpcy5fb25FYXNlRW5kLHQuY2FsbCh0aGlzKX1yZXR1cm4gdGhpc30sci5wcm90b3R5cGUuX2Vhc2U9ZnVuY3Rpb24odCxlLHIpeyExPT09ci5hbmltYXRlfHwwPT09ci5kdXJhdGlvbj8odCgxKSxlKCkpOih0aGlzLl9lYXNlU3RhcnQ9YS5ub3coKSx0aGlzLl9lYXNlT3B0aW9ucz1yLHRoaXMuX29uRWFzZUZyYW1lPXQsdGhpcy5fb25FYXNlRW5kPWUsdGhpcy5fZWFzZUZyYW1lSWQ9dGhpcy5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX3JlbmRlckZyYW1lQ2FsbGJhY2spKX0sci5wcm90b3R5cGUuX3JlbmRlckZyYW1lQ2FsbGJhY2s9ZnVuY3Rpb24oKXt2YXIgdD1NYXRoLm1pbigoYS5ub3coKS10aGlzLl9lYXNlU3RhcnQpL3RoaXMuX2Vhc2VPcHRpb25zLmR1cmF0aW9uLDEpO3RoaXMuX29uRWFzZUZyYW1lKHRoaXMuX2Vhc2VPcHRpb25zLmVhc2luZyh0KSksdDwxP3RoaXMuX2Vhc2VGcmFtZUlkPXRoaXMuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9yZW5kZXJGcmFtZUNhbGxiYWNrKTp0aGlzLnN0b3AoKX0sci5wcm90b3R5cGUuX25vcm1hbGl6ZUJlYXJpbmc9ZnVuY3Rpb24oZSxyKXtlPXQud3JhcChlLC0xODAsMTgwKTt2YXIgbj1NYXRoLmFicyhlLXIpO3JldHVybiBNYXRoLmFicyhlLTM2MC1yKTxuJiYoZS09MzYwKSxNYXRoLmFicyhlKzM2MC1yKTxuJiYoZSs9MzYwKSxlfSxyLnByb3RvdHlwZS5fbm9ybWFsaXplQ2VudGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudHJhbnNmb3JtO2lmKGUucmVuZGVyV29ybGRDb3BpZXMmJiFlLmxuZ1JhbmdlKXt2YXIgcj10LmxuZy1lLmNlbnRlci5sbmc7dC5sbmcrPXI+MTgwPy0zNjA6cjwtMTgwPzM2MDowfX0scn0odC5FdmVudGVkKSxubj1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5vcHRpb25zPWUsdC5iaW5kQWxsKFtcIl91cGRhdGVFZGl0TGlua1wiLFwiX3VwZGF0ZURhdGFcIixcIl91cGRhdGVDb21wYWN0XCJdLHRoaXMpfTtubi5wcm90b3R5cGUuZ2V0RGVmYXVsdFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuXCJib3R0b20tcmlnaHRcIn0sbm4ucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLmNvbXBhY3Q7cmV0dXJuIHRoaXMuX21hcD10LHRoaXMuX2NvbnRhaW5lcj1zLmNyZWF0ZShcImRpdlwiLFwibWFwYm94Z2wtY3RybCBtYXBib3hnbC1jdHJsLWF0dHJpYlwiKSxlJiZ0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLWNvbXBhY3RcIiksdGhpcy5fdXBkYXRlQXR0cmlidXRpb25zKCksdGhpcy5fdXBkYXRlRWRpdExpbmsoKSx0aGlzLl9tYXAub24oXCJzb3VyY2VkYXRhXCIsdGhpcy5fdXBkYXRlRGF0YSksdGhpcy5fbWFwLm9uKFwibW92ZWVuZFwiLHRoaXMuX3VwZGF0ZUVkaXRMaW5rKSx2b2lkIDA9PT1lJiYodGhpcy5fbWFwLm9uKFwicmVzaXplXCIsdGhpcy5fdXBkYXRlQ29tcGFjdCksdGhpcy5fdXBkYXRlQ29tcGFjdCgpKSx0aGlzLl9jb250YWluZXJ9LG5uLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3MucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwLm9mZihcInNvdXJjZWRhdGFcIix0aGlzLl91cGRhdGVEYXRhKSx0aGlzLl9tYXAub2ZmKFwibW92ZWVuZFwiLHRoaXMuX3VwZGF0ZUVkaXRMaW5rKSx0aGlzLl9tYXAub2ZmKFwicmVzaXplXCIsdGhpcy5fdXBkYXRlQ29tcGFjdCksdGhpcy5fbWFwPXZvaWQgMH0sbm4ucHJvdG90eXBlLl91cGRhdGVFZGl0TGluaz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2VkaXRMaW5rO3R8fCh0PXRoaXMuX2VkaXRMaW5rPXRoaXMuX2NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLm1hcGJveC1pbXByb3ZlLW1hcFwiKSk7dmFyIGU9W3trZXk6XCJvd25lclwiLHZhbHVlOnRoaXMuc3R5bGVPd25lcn0se2tleTpcImlkXCIsdmFsdWU6dGhpcy5zdHlsZUlkfSx7a2V5OlwiYWNjZXNzX3Rva2VuXCIsdmFsdWU6di5BQ0NFU1NfVE9LRU59XTtpZih0KXt2YXIgcj1lLnJlZHVjZShmdW5jdGlvbih0LHIsbil7cmV0dXJuIHIudmFsdWUmJih0Kz1yLmtleStcIj1cIityLnZhbHVlKyhuPGUubGVuZ3RoLTE/XCImXCI6XCJcIikpLHR9LFwiP1wiKTt0LmhyZWY9XCJodHRwczovL3d3dy5tYXBib3guY29tL2ZlZWRiYWNrL1wiK3IrKHRoaXMuX21hcC5faGFzaD90aGlzLl9tYXAuX2hhc2guZ2V0SGFzaFN0cmluZyghMCk6XCJcIil9fSxubi5wcm90b3R5cGUuX3VwZGF0ZURhdGE9ZnVuY3Rpb24odCl7dCYmXCJtZXRhZGF0YVwiPT09dC5zb3VyY2VEYXRhVHlwZSYmKHRoaXMuX3VwZGF0ZUF0dHJpYnV0aW9ucygpLHRoaXMuX3VwZGF0ZUVkaXRMaW5rKCkpfSxubi5wcm90b3R5cGUuX3VwZGF0ZUF0dHJpYnV0aW9ucz1mdW5jdGlvbigpe2lmKHRoaXMuX21hcC5zdHlsZSl7dmFyIHQ9W107aWYodGhpcy5fbWFwLnN0eWxlLnN0eWxlc2hlZXQpe3ZhciBlPXRoaXMuX21hcC5zdHlsZS5zdHlsZXNoZWV0O3RoaXMuc3R5bGVPd25lcj1lLm93bmVyLHRoaXMuc3R5bGVJZD1lLmlkfXZhciByPXRoaXMuX21hcC5zdHlsZS5zb3VyY2VDYWNoZXM7Zm9yKHZhciBuIGluIHIpe3ZhciBpPXJbbl0uZ2V0U291cmNlKCk7aS5hdHRyaWJ1dGlvbiYmdC5pbmRleE9mKGkuYXR0cmlidXRpb24pPDAmJnQucHVzaChpLmF0dHJpYnV0aW9uKX10LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGgtZS5sZW5ndGh9KSwodD10LmZpbHRlcihmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1yKzE7bjx0Lmxlbmd0aDtuKyspaWYodFtuXS5pbmRleE9mKGUpPj0wKXJldHVybiExO3JldHVybiEwfSkpLmxlbmd0aD8odGhpcy5fY29udGFpbmVyLmlubmVySFRNTD10LmpvaW4oXCIgfCBcIiksdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1hdHRyaWItZW1wdHlcIikpOnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtYXR0cmliLWVtcHR5XCIpLHRoaXMuX2VkaXRMaW5rPW51bGx9fSxubi5wcm90b3R5cGUuX3VwZGF0ZUNvbXBhY3Q9ZnVuY3Rpb24oKXt0aGlzLl9tYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCkub2Zmc2V0V2lkdGg8PTY0MD90aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLWNvbXBhY3RcIik6dGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1jb21wYWN0XCIpfTt2YXIgYW49ZnVuY3Rpb24oKXt0LmJpbmRBbGwoW1wiX3VwZGF0ZUxvZ29cIl0sdGhpcyl9O2FuLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9jb250YWluZXI9cy5jcmVhdGUoXCJkaXZcIixcIm1hcGJveGdsLWN0cmxcIik7dmFyIGU9cy5jcmVhdGUoXCJhXCIsXCJtYXBib3hnbC1jdHJsLWxvZ29cIik7cmV0dXJuIGUudGFyZ2V0PVwiX2JsYW5rXCIsZS5ocmVmPVwiaHR0cHM6Ly93d3cubWFwYm94LmNvbS9cIixlLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIixcIk1hcGJveCBsb2dvXCIpLHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZChlKSx0aGlzLl9jb250YWluZXIuc3R5bGUuZGlzcGxheT1cIm5vbmVcIix0aGlzLl9tYXAub24oXCJzb3VyY2VkYXRhXCIsdGhpcy5fdXBkYXRlTG9nbyksdGhpcy5fdXBkYXRlTG9nbygpLHRoaXMuX2NvbnRhaW5lcn0sYW4ucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7cy5yZW1vdmUodGhpcy5fY29udGFpbmVyKSx0aGlzLl9tYXAub2ZmKFwic291cmNlZGF0YVwiLHRoaXMuX3VwZGF0ZUxvZ28pfSxhbi5wcm90b3R5cGUuZ2V0RGVmYXVsdFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuXCJib3R0b20tbGVmdFwifSxhbi5wcm90b3R5cGUuX3VwZGF0ZUxvZ289ZnVuY3Rpb24odCl7dCYmXCJtZXRhZGF0YVwiIT09dC5zb3VyY2VEYXRhVHlwZXx8KHRoaXMuX2NvbnRhaW5lci5zdHlsZS5kaXNwbGF5PXRoaXMuX2xvZ29SZXF1aXJlZCgpP1wiYmxvY2tcIjpcIm5vbmVcIil9LGFuLnByb3RvdHlwZS5fbG9nb1JlcXVpcmVkPWZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwLnN0eWxlKXt2YXIgdD10aGlzLl9tYXAuc3R5bGUuc291cmNlQ2FjaGVzO2Zvcih2YXIgZSBpbiB0KWlmKHRbZV0uZ2V0U291cmNlKCkubWFwYm94X2xvZ28pcmV0dXJuITA7cmV0dXJuITF9fTt2YXIgb249ZnVuY3Rpb24oKXt0aGlzLl9xdWV1ZT1bXSx0aGlzLl9pZD0wLHRoaXMuX2NsZWFyZWQ9ITEsdGhpcy5fY3VycmVudGx5UnVubmluZz0hMX07b24ucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXt2YXIgZT0rK3RoaXMuX2lkO3JldHVybiB0aGlzLl9xdWV1ZS5wdXNoKHtjYWxsYmFjazp0LGlkOmUsY2FuY2VsbGVkOiExfSksZX0sb24ucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY3VycmVudGx5UnVubmluZyxyPTAsbj1lP3RoaXMuX3F1ZXVlLmNvbmNhdChlKTp0aGlzLl9xdWV1ZTtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl07aWYoaS5pZD09PXQpcmV0dXJuIHZvaWQoaS5jYW5jZWxsZWQ9ITApfX0sb24ucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2N1cnJlbnRseVJ1bm5pbmc9dGhpcy5fcXVldWU7dGhpcy5fcXVldWU9W107Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXTtpZighbi5jYW5jZWxsZWQmJihuLmNhbGxiYWNrKCksdGhpcy5fY2xlYXJlZCkpYnJlYWt9dGhpcy5fY2xlYXJlZD0hMSx0aGlzLl9jdXJyZW50bHlSdW5uaW5nPSExfSxvbi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9jdXJyZW50bHlSdW5uaW5nJiYodGhpcy5fY2xlYXJlZD0hMCksdGhpcy5fcXVldWU9W119O3ZhciBzbj10LmRlZmF1bHQuSFRNTEltYWdlRWxlbWVudCxsbj10LmRlZmF1bHQuSFRNTEVsZW1lbnQsY249e2NlbnRlcjpbMCwwXSx6b29tOjAsYmVhcmluZzowLHBpdGNoOjAsbWluWm9vbTowLG1heFpvb206MjIsaW50ZXJhY3RpdmU6ITAsc2Nyb2xsWm9vbTohMCxib3hab29tOiEwLGRyYWdSb3RhdGU6ITAsZHJhZ1BhbjohMCxrZXlib2FyZDohMCxkb3VibGVDbGlja1pvb206ITAsdG91Y2hab29tUm90YXRlOiEwLGJlYXJpbmdTbmFwOjcsaGFzaDohMSxhdHRyaWJ1dGlvbkNvbnRyb2w6ITAsZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDohMSxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITEsdHJhY2tSZXNpemU6ITAscmVuZGVyV29ybGRDb3BpZXM6ITAscmVmcmVzaEV4cGlyZWRUaWxlczohMCxtYXhUaWxlQ2FjaGVTaXplOm51bGwsdHJhbnNmb3JtUmVxdWVzdDpudWxsLGZhZGVEdXJhdGlvbjozMDB9LHVuPWZ1bmN0aW9uKHIpe2Z1bmN0aW9uIG4oZSl7aWYobnVsbCE9KGU9dC5leHRlbmQoe30sY24sZSkpLm1pblpvb20mJm51bGwhPWUubWF4Wm9vbSYmZS5taW5ab29tPmUubWF4Wm9vbSl0aHJvdyBuZXcgRXJyb3IoXCJtYXhab29tIG11c3QgYmUgZ3JlYXRlciB0aGFuIG1pblpvb21cIik7dmFyIG49bmV3IEJyKGUubWluWm9vbSxlLm1heFpvb20sZS5yZW5kZXJXb3JsZENvcGllcyk7ci5jYWxsKHRoaXMsbixlKSx0aGlzLl9pbnRlcmFjdGl2ZT1lLmludGVyYWN0aXZlLHRoaXMuX21heFRpbGVDYWNoZVNpemU9ZS5tYXhUaWxlQ2FjaGVTaXplLHRoaXMuX2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ9ZS5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0LHRoaXMuX3ByZXNlcnZlRHJhd2luZ0J1ZmZlcj1lLnByZXNlcnZlRHJhd2luZ0J1ZmZlcix0aGlzLl90cmFja1Jlc2l6ZT1lLnRyYWNrUmVzaXplLHRoaXMuX2JlYXJpbmdTbmFwPWUuYmVhcmluZ1NuYXAsdGhpcy5fcmVmcmVzaEV4cGlyZWRUaWxlcz1lLnJlZnJlc2hFeHBpcmVkVGlsZXMsdGhpcy5fZmFkZUR1cmF0aW9uPWUuZmFkZUR1cmF0aW9uLHRoaXMuX2Nyb3NzRmFkaW5nRmFjdG9yPTEsdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nPWUuY29sbGVjdFJlc291cmNlVGltaW5nLHRoaXMuX3JlbmRlclRhc2tRdWV1ZT1uZXcgb247dmFyIGk9ZS50cmFuc2Zvcm1SZXF1ZXN0O2lmKHRoaXMuX3RyYW5zZm9ybVJlcXVlc3Q9aT9mdW5jdGlvbih0LGUpe3JldHVybiBpKHQsZSl8fHt1cmw6dH19OmZ1bmN0aW9uKHQpe3JldHVybnt1cmw6dH19LFwic3RyaW5nXCI9PXR5cGVvZiBlLmNvbnRhaW5lcil7dmFyIGE9dC5kZWZhdWx0LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUuY29udGFpbmVyKTtpZighYSl0aHJvdyBuZXcgRXJyb3IoXCJDb250YWluZXIgJ1wiK2UuY29udGFpbmVyK1wiJyBub3QgZm91bmQuXCIpO3RoaXMuX2NvbnRhaW5lcj1hfWVsc2V7aWYoIShlLmNvbnRhaW5lciBpbnN0YW5jZW9mIGxuKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHR5cGU6ICdjb250YWluZXInIG11c3QgYmUgYSBTdHJpbmcgb3IgSFRNTEVsZW1lbnQuXCIpO3RoaXMuX2NvbnRhaW5lcj1lLmNvbnRhaW5lcn1lLm1heEJvdW5kcyYmdGhpcy5zZXRNYXhCb3VuZHMoZS5tYXhCb3VuZHMpLHQuYmluZEFsbChbXCJfb25XaW5kb3dPbmxpbmVcIixcIl9vbldpbmRvd1Jlc2l6ZVwiLFwiX2NvbnRleHRMb3N0XCIsXCJfY29udGV4dFJlc3RvcmVkXCIsXCJfdXBkYXRlXCIsXCJfcmVuZGVyXCIsXCJfb25EYXRhXCIsXCJfb25EYXRhTG9hZGluZ1wiXSx0aGlzKSx0aGlzLl9zZXR1cENvbnRhaW5lcigpLHRoaXMuX3NldHVwUGFpbnRlcigpLHRoaXMub24oXCJtb3ZlXCIsdGhpcy5fdXBkYXRlLmJpbmQodGhpcywhMSkpLHRoaXMub24oXCJ6b29tXCIsdGhpcy5fdXBkYXRlLmJpbmQodGhpcywhMCkpLHZvaWQgMCE9PXQuZGVmYXVsdCYmKHQuZGVmYXVsdC5hZGRFdmVudExpc3RlbmVyKFwib25saW5lXCIsdGhpcy5fb25XaW5kb3dPbmxpbmUsITEpLHQuZGVmYXVsdC5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdGhpcy5fb25XaW5kb3dSZXNpemUsITEpKSxmdW5jdGlvbih0LGUpe3ZhciByPXQuZ2V0Q2FudmFzQ29udGFpbmVyKCksbj1udWxsLGk9ITE7Zm9yKHZhciBhIGluIGVuKXRbYV09bmV3IGVuW2FdKHQsZSksZS5pbnRlcmFjdGl2ZSYmZVthXSYmdFthXS5lbmFibGUoZVthXSk7cy5hZGRFdmVudExpc3RlbmVyKHIsXCJtb3VzZW91dFwiLGZ1bmN0aW9uKGUpe3QuZmlyZShuZXcgVnIoXCJtb3VzZW91dFwiLHQsZSkpfSkscy5hZGRFdmVudExpc3RlbmVyKHIsXCJtb3VzZWRvd25cIixmdW5jdGlvbihyKXtpPSEwO3ZhciBuPW5ldyBWcihcIm1vdXNlZG93blwiLHQscik7dC5maXJlKG4pLG4uZGVmYXVsdFByZXZlbnRlZHx8KGUuaW50ZXJhY3RpdmUmJiF0LmRvdWJsZUNsaWNrWm9vbS5pc0FjdGl2ZSgpJiZ0LnN0b3AoKSx0LmJveFpvb20ub25Nb3VzZURvd24ociksdC5ib3hab29tLmlzQWN0aXZlKCl8fHQuZHJhZ1Bhbi5pc0FjdGl2ZSgpfHx0LmRyYWdSb3RhdGUub25Nb3VzZURvd24ociksdC5ib3hab29tLmlzQWN0aXZlKCl8fHQuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpfHx0LmRyYWdQYW4ub25Nb3VzZURvd24ocikpfSkscy5hZGRFdmVudExpc3RlbmVyKHIsXCJtb3VzZXVwXCIsZnVuY3Rpb24oZSl7dmFyIHI9dC5kcmFnUm90YXRlLmlzQWN0aXZlKCk7biYmIXImJnQuZmlyZShuZXcgVnIoXCJjb250ZXh0bWVudVwiLHQsbikpLG49bnVsbCxpPSExLHQuZmlyZShuZXcgVnIoXCJtb3VzZXVwXCIsdCxlKSl9KSxzLmFkZEV2ZW50TGlzdGVuZXIocixcIm1vdXNlbW92ZVwiLGZ1bmN0aW9uKGUpe2lmKCF0LmRyYWdQYW4uaXNBY3RpdmUoKSYmIXQuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpKXtmb3IodmFyIG49ZS50b0VsZW1lbnR8fGUudGFyZ2V0O24mJm4hPT1yOyluPW4ucGFyZW50Tm9kZTtuPT09ciYmdC5maXJlKG5ldyBWcihcIm1vdXNlbW92ZVwiLHQsZSkpfX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLFwibW91c2VvdmVyXCIsZnVuY3Rpb24oZSl7Zm9yKHZhciBuPWUudG9FbGVtZW50fHxlLnRhcmdldDtuJiZuIT09cjspbj1uLnBhcmVudE5vZGU7bj09PXImJnQuZmlyZShuZXcgVnIoXCJtb3VzZW92ZXJcIix0LGUpKX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLFwidG91Y2hzdGFydFwiLGZ1bmN0aW9uKHIpe3ZhciBuPW5ldyBVcihcInRvdWNoc3RhcnRcIix0LHIpO3QuZmlyZShuKSxuLmRlZmF1bHRQcmV2ZW50ZWR8fChlLmludGVyYWN0aXZlJiZ0LnN0b3AoKSx0LmJveFpvb20uaXNBY3RpdmUoKXx8dC5kcmFnUm90YXRlLmlzQWN0aXZlKCl8fHQuZHJhZ1Bhbi5vblRvdWNoU3RhcnQociksdC50b3VjaFpvb21Sb3RhdGUub25TdGFydChyKSx0LmRvdWJsZUNsaWNrWm9vbS5vblRvdWNoU3RhcnQobikpfSx7cGFzc2l2ZTohMX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLFwidG91Y2htb3ZlXCIsZnVuY3Rpb24oZSl7dC5maXJlKG5ldyBVcihcInRvdWNobW92ZVwiLHQsZSkpfSx7cGFzc2l2ZTohMX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLFwidG91Y2hlbmRcIixmdW5jdGlvbihlKXt0LmZpcmUobmV3IFVyKFwidG91Y2hlbmRcIix0LGUpKX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLFwidG91Y2hjYW5jZWxcIixmdW5jdGlvbihlKXt0LmZpcmUobmV3IFVyKFwidG91Y2hjYW5jZWxcIix0LGUpKX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLFwiY2xpY2tcIixmdW5jdGlvbihlKXt0LmZpcmUobmV3IFZyKFwiY2xpY2tcIix0LGUpKX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLFwiZGJsY2xpY2tcIixmdW5jdGlvbihlKXt2YXIgcj1uZXcgVnIoXCJkYmxjbGlja1wiLHQsZSk7dC5maXJlKHIpLHIuZGVmYXVsdFByZXZlbnRlZHx8dC5kb3VibGVDbGlja1pvb20ub25EYmxDbGljayhyKX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLFwiY29udGV4dG1lbnVcIixmdW5jdGlvbihlKXt2YXIgcj10LmRyYWdSb3RhdGUuaXNBY3RpdmUoKTtpfHxyP2kmJihuPWUpOnQuZmlyZShuZXcgVnIoXCJjb250ZXh0bWVudVwiLHQsZSkpLGUucHJldmVudERlZmF1bHQoKX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLFwid2hlZWxcIixmdW5jdGlvbihlKXt2YXIgcj1uZXcgcXIoXCJ3aGVlbFwiLHQsZSk7dC5maXJlKHIpLHIuZGVmYXVsdFByZXZlbnRlZHx8dC5zY3JvbGxab29tLm9uV2hlZWwoZSl9LHtwYXNzaXZlOiExfSl9KHRoaXMsZSksdGhpcy5faGFzaD1lLmhhc2gmJihuZXcganIpLmFkZFRvKHRoaXMpLHRoaXMuX2hhc2gmJnRoaXMuX2hhc2guX29uSGFzaENoYW5nZSgpfHx0aGlzLmp1bXBUbyh7Y2VudGVyOmUuY2VudGVyLHpvb206ZS56b29tLGJlYXJpbmc6ZS5iZWFyaW5nLHBpdGNoOmUucGl0Y2h9KSx0aGlzLnJlc2l6ZSgpLGUuc3R5bGUmJnRoaXMuc2V0U3R5bGUoZS5zdHlsZSx7bG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5OmUubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5fSksZS5hdHRyaWJ1dGlvbkNvbnRyb2wmJnRoaXMuYWRkQ29udHJvbChuZXcgbm4pLHRoaXMuYWRkQ29udHJvbChuZXcgYW4sZS5sb2dvUG9zaXRpb24pLHRoaXMub24oXCJzdHlsZS5sb2FkXCIsZnVuY3Rpb24oKXt0aGlzLnRyYW5zZm9ybS51bm1vZGlmaWVkJiZ0aGlzLmp1bXBUbyh0aGlzLnN0eWxlLnN0eWxlc2hlZXQpfSksdGhpcy5vbihcImRhdGFcIix0aGlzLl9vbkRhdGEpLHRoaXMub24oXCJkYXRhbG9hZGluZ1wiLHRoaXMuX29uRGF0YUxvYWRpbmcpfXImJihuLl9fcHJvdG9fXz1yKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHImJnIucHJvdG90eXBlKSxuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uO3ZhciBpPXtzaG93VGlsZUJvdW5kYXJpZXM6e2NvbmZpZ3VyYWJsZTohMH0sc2hvd0NvbGxpc2lvbkJveGVzOntjb25maWd1cmFibGU6ITB9LHNob3dPdmVyZHJhd0luc3BlY3Rvcjp7Y29uZmlndXJhYmxlOiEwfSxyZXBhaW50Ontjb25maWd1cmFibGU6ITB9LHZlcnRpY2VzOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gbi5wcm90b3R5cGUuYWRkQ29udHJvbD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJnQuZ2V0RGVmYXVsdFBvc2l0aW9uJiYoZT10LmdldERlZmF1bHRQb3NpdGlvbigpKSx2b2lkIDA9PT1lJiYoZT1cInRvcC1yaWdodFwiKTt2YXIgcj10Lm9uQWRkKHRoaXMpLG49dGhpcy5fY29udHJvbFBvc2l0aW9uc1tlXTtyZXR1cm4tMSE9PWUuaW5kZXhPZihcImJvdHRvbVwiKT9uLmluc2VydEJlZm9yZShyLG4uZmlyc3RDaGlsZCk6bi5hcHBlbmRDaGlsZChyKSx0aGlzfSxuLnByb3RvdHlwZS5yZW1vdmVDb250cm9sPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm9uUmVtb3ZlKHRoaXMpLHRoaXN9LG4ucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzLl9jb250YWluZXJEaW1lbnNpb25zKCksbj1yWzBdLGk9clsxXTtyZXR1cm4gdGhpcy5fcmVzaXplQ2FudmFzKG4saSksdGhpcy50cmFuc2Zvcm0ucmVzaXplKG4saSksdGhpcy5wYWludGVyLnJlc2l6ZShuLGkpLHRoaXMuZmlyZShuZXcgdC5FdmVudChcIm1vdmVzdGFydFwiLGUpKS5maXJlKG5ldyB0LkV2ZW50KFwibW92ZVwiLGUpKS5maXJlKG5ldyB0LkV2ZW50KFwicmVzaXplXCIsZSkpLmZpcmUobmV3IHQuRXZlbnQoXCJtb3ZlZW5kXCIsZSkpfSxuLnByb3RvdHlwZS5nZXRCb3VuZHM9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgWSh0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKG5ldyB0LmRlZmF1bHQkMSgwLHRoaXMudHJhbnNmb3JtLmhlaWdodCkpLHRoaXMudHJhbnNmb3JtLnBvaW50TG9jYXRpb24obmV3IHQuZGVmYXVsdCQxKHRoaXMudHJhbnNmb3JtLndpZHRoLDApKSk7cmV0dXJuKHRoaXMudHJhbnNmb3JtLmFuZ2xlfHx0aGlzLnRyYW5zZm9ybS5waXRjaCkmJihlLmV4dGVuZCh0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKG5ldyB0LmRlZmF1bHQkMSh0aGlzLnRyYW5zZm9ybS5zaXplLngsMCkpKSxlLmV4dGVuZCh0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKG5ldyB0LmRlZmF1bHQkMSgwLHRoaXMudHJhbnNmb3JtLnNpemUueSkpKSksZX0sbi5wcm90b3R5cGUuZ2V0TWF4Qm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLmxhdFJhbmdlJiYyPT09dGhpcy50cmFuc2Zvcm0ubGF0UmFuZ2UubGVuZ3RoJiZ0aGlzLnRyYW5zZm9ybS5sbmdSYW5nZSYmMj09PXRoaXMudHJhbnNmb3JtLmxuZ1JhbmdlLmxlbmd0aD9uZXcgWShbdGhpcy50cmFuc2Zvcm0ubG5nUmFuZ2VbMF0sdGhpcy50cmFuc2Zvcm0ubGF0UmFuZ2VbMF1dLFt0aGlzLnRyYW5zZm9ybS5sbmdSYW5nZVsxXSx0aGlzLnRyYW5zZm9ybS5sYXRSYW5nZVsxXV0pOm51bGx9LG4ucHJvdG90eXBlLnNldE1heEJvdW5kcz1mdW5jdGlvbih0KXtpZih0KXt2YXIgZT1ZLmNvbnZlcnQodCk7dGhpcy50cmFuc2Zvcm0ubG5nUmFuZ2U9W2UuZ2V0V2VzdCgpLGUuZ2V0RWFzdCgpXSx0aGlzLnRyYW5zZm9ybS5sYXRSYW5nZT1bZS5nZXRTb3V0aCgpLGUuZ2V0Tm9ydGgoKV0sdGhpcy50cmFuc2Zvcm0uX2NvbnN0cmFpbigpLHRoaXMuX3VwZGF0ZSgpfWVsc2UgbnVsbD09dCYmKHRoaXMudHJhbnNmb3JtLmxuZ1JhbmdlPW51bGwsdGhpcy50cmFuc2Zvcm0ubGF0UmFuZ2U9bnVsbCx0aGlzLl91cGRhdGUoKSk7cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLnNldE1pblpvb209ZnVuY3Rpb24odCl7aWYoKHQ9bnVsbD09dD8wOnQpPj0wJiZ0PD10aGlzLnRyYW5zZm9ybS5tYXhab29tKXJldHVybiB0aGlzLnRyYW5zZm9ybS5taW5ab29tPXQsdGhpcy5fdXBkYXRlKCksdGhpcy5nZXRab29tKCk8dCYmdGhpcy5zZXRab29tKHQpLHRoaXM7dGhyb3cgbmV3IEVycm9yKFwibWluWm9vbSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgdGhlIGN1cnJlbnQgbWF4Wm9vbSwgaW5jbHVzaXZlXCIpfSxuLnByb3RvdHlwZS5nZXRNaW5ab29tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLm1pblpvb219LG4ucHJvdG90eXBlLnNldE1heFpvb209ZnVuY3Rpb24odCl7aWYoKHQ9bnVsbD09dD8yMjp0KT49dGhpcy50cmFuc2Zvcm0ubWluWm9vbSlyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWF4Wm9vbT10LHRoaXMuX3VwZGF0ZSgpLHRoaXMuZ2V0Wm9vbSgpPnQmJnRoaXMuc2V0Wm9vbSh0KSx0aGlzO3Rocm93IG5ldyBFcnJvcihcIm1heFpvb20gbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgbWluWm9vbVwiKX0sbi5wcm90b3R5cGUuZ2V0UmVuZGVyV29ybGRDb3BpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXN9LG4ucHJvdG90eXBlLnNldFJlbmRlcldvcmxkQ29waWVzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5yZW5kZXJXb3JsZENvcGllcz10LHRoaXMuX3VwZGF0ZSgpLHRoaXN9LG4ucHJvdG90eXBlLmdldE1heFpvb209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWF4Wm9vbX0sbi5wcm90b3R5cGUucHJvamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubG9jYXRpb25Qb2ludChHLmNvbnZlcnQodCkpfSxuLnByb3RvdHlwZS51bnByb2plY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnBvaW50TG9jYXRpb24odC5kZWZhdWx0JDEuY29udmVydChlKSl9LG4ucHJvdG90eXBlLmlzTW92aW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vdmluZ3x8dGhpcy5kcmFnUGFuLmlzQWN0aXZlKCl8fHRoaXMuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpfHx0aGlzLnNjcm9sbFpvb20uaXNBY3RpdmUoKX0sbi5wcm90b3R5cGUuaXNab29taW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pvb21pbmd8fHRoaXMuc2Nyb2xsWm9vbS5pc0FjdGl2ZSgpfSxuLnByb3RvdHlwZS5pc1JvdGF0aW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdGF0aW5nfHx0aGlzLmRyYWdSb3RhdGUuaXNBY3RpdmUoKX0sbi5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGE9dGhpcztpZih2b2lkIDA9PT1uKXJldHVybiByLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsdCxlKTt2YXIgbz1mdW5jdGlvbigpe2lmKFwibW91c2VlbnRlclwiPT09dHx8XCJtb3VzZW92ZXJcIj09PXQpe3ZhciByPSExO3JldHVybntsYXllcjplLGxpc3RlbmVyOm4sZGVsZWdhdGVzOnttb3VzZW1vdmU6ZnVuY3Rpb24oaSl7dmFyIG89YS5nZXRMYXllcihlKT9hLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhpLnBvaW50LHtsYXllcnM6W2VdfSk6W107by5sZW5ndGg/cnx8KHI9ITAsbi5jYWxsKGEsbmV3IFZyKHQsYSxpLm9yaWdpbmFsRXZlbnQse2ZlYXR1cmVzOm99KSkpOnI9ITF9LG1vdXNlb3V0OmZ1bmN0aW9uKCl7cj0hMX19fX1pZihcIm1vdXNlbGVhdmVcIj09PXR8fFwibW91c2VvdXRcIj09PXQpe3ZhciBvPSExO3JldHVybntsYXllcjplLGxpc3RlbmVyOm4sZGVsZWdhdGVzOnttb3VzZW1vdmU6ZnVuY3Rpb24ocil7KGEuZ2V0TGF5ZXIoZSk/YS5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoci5wb2ludCx7bGF5ZXJzOltlXX0pOltdKS5sZW5ndGg/bz0hMDpvJiYobz0hMSxuLmNhbGwoYSxuZXcgVnIodCxhLHIub3JpZ2luYWxFdmVudCkpKX0sbW91c2VvdXQ6ZnVuY3Rpb24oZSl7byYmKG89ITEsbi5jYWxsKGEsbmV3IFZyKHQsYSxlLm9yaWdpbmFsRXZlbnQpKSl9fX19cmV0dXJue2xheWVyOmUsbGlzdGVuZXI6bixkZWxlZ2F0ZXM6KGk9e30saVt0XT1mdW5jdGlvbih0KXt2YXIgcj1hLmdldExheWVyKGUpP2EucXVlcnlSZW5kZXJlZEZlYXR1cmVzKHQucG9pbnQse2xheWVyczpbZV19KTpbXTtyLmxlbmd0aCYmKHQuZmVhdHVyZXM9cixuLmNhbGwoYSx0KSxkZWxldGUgdC5mZWF0dXJlcyl9LGkpfX0oKTtmb3IodmFyIHMgaW4gdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzPXRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc3x8e30sdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3RdPXRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0XXx8W10sdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3RdLnB1c2gobyksby5kZWxlZ2F0ZXMpYS5vbihzLG8uZGVsZWdhdGVzW3NdKTtyZXR1cm4gdGhpc30sbi5wcm90b3R5cGUub2ZmPWZ1bmN0aW9uKHQsZSxuKXtpZih2b2lkIDA9PT1uKXJldHVybiByLnByb3RvdHlwZS5vZmYuY2FsbCh0aGlzLHQsZSk7aWYodGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzJiZ0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdF0pZm9yKHZhciBpPXRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0XSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV07aWYoby5sYXllcj09PWUmJm8ubGlzdGVuZXI9PT1uKXtmb3IodmFyIHMgaW4gby5kZWxlZ2F0ZXMpdGhpcy5vZmYocyxvLmRlbGVnYXRlc1tzXSk7cmV0dXJuIGkuc3BsaWNlKGEsMSksdGhpc319cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcz1mdW5jdGlvbihlLHIpe3ZhciBuO3JldHVybiAyPT09YXJndW1lbnRzLmxlbmd0aD8oZT1hcmd1bWVudHNbMF0scj1hcmd1bWVudHNbMV0pOjE9PT1hcmd1bWVudHMubGVuZ3RoJiYoKG49YXJndW1lbnRzWzBdKWluc3RhbmNlb2YgdC5kZWZhdWx0JDF8fEFycmF5LmlzQXJyYXkobikpPyhlPWFyZ3VtZW50c1swXSxyPXt9KToxPT09YXJndW1lbnRzLmxlbmd0aD8oZT12b2lkIDAscj1hcmd1bWVudHNbMF0pOihlPXZvaWQgMCxyPXt9KSx0aGlzLnN0eWxlP3RoaXMuc3R5bGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzKHRoaXMuX21ha2VRdWVyeUdlb21ldHJ5KGUpLHIsdGhpcy50cmFuc2Zvcm0pOltdfSxuLnByb3RvdHlwZS5fbWFrZVF1ZXJ5R2VvbWV0cnk9ZnVuY3Rpb24oZSl7dmFyIHIsbj10aGlzO2lmKHZvaWQgMD09PWUmJihlPVt0LmRlZmF1bHQkMS5jb252ZXJ0KFswLDBdKSx0LmRlZmF1bHQkMS5jb252ZXJ0KFt0aGlzLnRyYW5zZm9ybS53aWR0aCx0aGlzLnRyYW5zZm9ybS5oZWlnaHRdKV0pLGUgaW5zdGFuY2VvZiB0LmRlZmF1bHQkMXx8XCJudW1iZXJcIj09dHlwZW9mIGVbMF0pcj1bdC5kZWZhdWx0JDEuY29udmVydChlKV07ZWxzZXt2YXIgaT1bdC5kZWZhdWx0JDEuY29udmVydChlWzBdKSx0LmRlZmF1bHQkMS5jb252ZXJ0KGVbMV0pXTtyPVtpWzBdLG5ldyB0LmRlZmF1bHQkMShpWzFdLngsaVswXS55KSxpWzFdLG5ldyB0LmRlZmF1bHQkMShpWzBdLngsaVsxXS55KSxpWzBdXX1yZXR1cm57dmlld3BvcnQ6cix3b3JsZENvb3JkaW5hdGU6ci5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIG4udHJhbnNmb3JtLnBvaW50Q29vcmRpbmF0ZSh0KX0pfX0sbi5wcm90b3R5cGUucXVlcnlTb3VyY2VGZWF0dXJlcz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLnF1ZXJ5U291cmNlRmVhdHVyZXModCxlKX0sbi5wcm90b3R5cGUuc2V0U3R5bGU9ZnVuY3Rpb24oZSxyKXtpZigoIXJ8fCExIT09ci5kaWZmJiYhci5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHkpJiZ0aGlzLnN0eWxlJiZlJiZcIm9iamVjdFwiPT10eXBlb2YgZSl0cnl7cmV0dXJuIHRoaXMuc3R5bGUuc2V0U3RhdGUoZSkmJnRoaXMuX3VwZGF0ZSghMCksdGhpc31jYXRjaChlKXt0Lndhcm5PbmNlKFwiVW5hYmxlIHRvIHBlcmZvcm0gc3R5bGUgZGlmZjogXCIrKGUubWVzc2FnZXx8ZS5lcnJvcnx8ZSkrXCIuICBSZWJ1aWxkaW5nIHRoZSBzdHlsZSBmcm9tIHNjcmF0Y2guXCIpfXJldHVybiB0aGlzLnN0eWxlJiYodGhpcy5zdHlsZS5zZXRFdmVudGVkUGFyZW50KG51bGwpLHRoaXMuc3R5bGUuX3JlbW92ZSgpKSxlPyh0aGlzLnN0eWxlPW5ldyBKZSh0aGlzLHJ8fHt9KSx0aGlzLnN0eWxlLnNldEV2ZW50ZWRQYXJlbnQodGhpcyx7c3R5bGU6dGhpcy5zdHlsZX0pLFwic3RyaW5nXCI9PXR5cGVvZiBlP3RoaXMuc3R5bGUubG9hZFVSTChlKTp0aGlzLnN0eWxlLmxvYWRKU09OKGUpLHRoaXMpOihkZWxldGUgdGhpcy5zdHlsZSx0aGlzKX0sbi5wcm90b3R5cGUuZ2V0U3R5bGU9ZnVuY3Rpb24oKXtpZih0aGlzLnN0eWxlKXJldHVybiB0aGlzLnN0eWxlLnNlcmlhbGl6ZSgpfSxuLnByb3RvdHlwZS5pc1N0eWxlTG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3R5bGU/dGhpcy5zdHlsZS5sb2FkZWQoKTp0Lndhcm5PbmNlKFwiVGhlcmUgaXMgbm8gc3R5bGUgYWRkZWQgdG8gdGhlIG1hcC5cIil9LG4ucHJvdG90eXBlLmFkZFNvdXJjZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLmFkZFNvdXJjZSh0LGUpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sbi5wcm90b3R5cGUuaXNTb3VyY2VMb2FkZWQ9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5zdHlsZSYmdGhpcy5zdHlsZS5zb3VyY2VDYWNoZXNbZV07aWYodm9pZCAwIT09cilyZXR1cm4gci5sb2FkZWQoKTt0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoXCJUaGVyZSBpcyBubyBzb3VyY2Ugd2l0aCBJRCAnXCIrZStcIidcIikpKX0sbi5wcm90b3R5cGUuYXJlVGlsZXNMb2FkZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnN0eWxlJiZ0aGlzLnN0eWxlLnNvdXJjZUNhY2hlcztmb3IodmFyIGUgaW4gdCl7dmFyIHI9dFtlXS5fdGlsZXM7Zm9yKHZhciBuIGluIHIpe3ZhciBpPXJbbl07aWYoXCJsb2FkZWRcIiE9PWkuc3RhdGUmJlwiZXJyb3JlZFwiIT09aS5zdGF0ZSlyZXR1cm4hMX19cmV0dXJuITB9LG4ucHJvdG90eXBlLmFkZFNvdXJjZVR5cGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLnN0eWxlLmFkZFNvdXJjZVR5cGUodCxlLHIpfSxuLnByb3RvdHlwZS5yZW1vdmVTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUucmVtb3ZlU291cmNlKHQpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sbi5wcm90b3R5cGUuZ2V0U291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLmdldFNvdXJjZSh0KX0sbi5wcm90b3R5cGUuYWRkSW1hZ2U9ZnVuY3Rpb24oZSxyLG4pe3ZvaWQgMD09PW4mJihuPXt9KTt2YXIgaT1uLnBpeGVsUmF0aW87dm9pZCAwPT09aSYmKGk9MSk7dmFyIG89bi5zZGY7aWYodm9pZCAwPT09byYmKG89ITEpLHIgaW5zdGFuY2VvZiBzbil7dmFyIHM9YS5nZXRJbWFnZURhdGEociksbD1zLndpZHRoLGM9cy5oZWlnaHQsdT1zLmRhdGE7dGhpcy5zdHlsZS5hZGRJbWFnZShlLHtkYXRhOm5ldyB0LlJHQkFJbWFnZSh7d2lkdGg6bCxoZWlnaHQ6Y30sdSkscGl4ZWxSYXRpbzppLHNkZjpvfSl9ZWxzZXtpZih2b2lkIDA9PT1yLndpZHRofHx2b2lkIDA9PT1yLmhlaWdodClyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKFwiSW52YWxpZCBhcmd1bWVudHMgdG8gbWFwLmFkZEltYWdlKCkuIFRoZSBzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBhbiBgSFRNTEltYWdlRWxlbWVudGAsIGBJbWFnZURhdGFgLCBvciBvYmplY3Qgd2l0aCBgd2lkdGhgLCBgaGVpZ2h0YCwgYW5kIGBkYXRhYCBwcm9wZXJ0aWVzIHdpdGggdGhlIHNhbWUgZm9ybWF0IGFzIGBJbWFnZURhdGFgXCIpKSk7dmFyIGg9ci53aWR0aCxmPXIuaGVpZ2h0LHA9ci5kYXRhO3RoaXMuc3R5bGUuYWRkSW1hZ2UoZSx7ZGF0YTpuZXcgdC5SR0JBSW1hZ2Uoe3dpZHRoOmgsaGVpZ2h0OmZ9LHAuc2xpY2UoMCkpLHBpeGVsUmF0aW86aSxzZGY6b30pfX0sbi5wcm90b3R5cGUuaGFzSW1hZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ISF0aGlzLnN0eWxlLmdldEltYWdlKGUpOih0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoXCJNaXNzaW5nIHJlcXVpcmVkIGltYWdlIGlkXCIpKSksITEpfSxuLnByb3RvdHlwZS5yZW1vdmVJbWFnZT1mdW5jdGlvbih0KXt0aGlzLnN0eWxlLnJlbW92ZUltYWdlKHQpfSxuLnByb3RvdHlwZS5sb2FkSW1hZ2U9ZnVuY3Rpb24oZSxyKXt0LmdldEltYWdlKHRoaXMuX3RyYW5zZm9ybVJlcXVlc3QoZSx0LlJlc291cmNlVHlwZS5JbWFnZSkscil9LG4ucHJvdG90eXBlLmFkZExheWVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUuYWRkTGF5ZXIodCxlKSx0aGlzLl91cGRhdGUoITApLHRoaXN9LG4ucHJvdG90eXBlLm1vdmVMYXllcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLm1vdmVMYXllcih0LGUpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sbi5wcm90b3R5cGUucmVtb3ZlTGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUucmVtb3ZlTGF5ZXIodCksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxuLnByb3RvdHlwZS5nZXRMYXllcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRMYXllcih0KX0sbi5wcm90b3R5cGUuc2V0RmlsdGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUuc2V0RmlsdGVyKHQsZSksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxuLnByb3RvdHlwZS5zZXRMYXllclpvb21SYW5nZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuc3R5bGUuc2V0TGF5ZXJab29tUmFuZ2UodCxlLHIpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sbi5wcm90b3R5cGUuZ2V0RmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLmdldEZpbHRlcih0KX0sbi5wcm90b3R5cGUuc2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuc3R5bGUuc2V0UGFpbnRQcm9wZXJ0eSh0LGUsciksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxuLnByb3RvdHlwZS5nZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0UGFpbnRQcm9wZXJ0eSh0LGUpfSxuLnByb3RvdHlwZS5zZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuc3R5bGUuc2V0TGF5b3V0UHJvcGVydHkodCxlLHIpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sbi5wcm90b3R5cGUuZ2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRMYXlvdXRQcm9wZXJ0eSh0LGUpfSxuLnByb3RvdHlwZS5zZXRMaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5zZXRMaWdodCh0KSx0aGlzLl91cGRhdGUoITApLHRoaXN9LG4ucHJvdG90eXBlLmdldExpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0TGlnaHQoKX0sbi5wcm90b3R5cGUuZ2V0Q29udGFpbmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sbi5wcm90b3R5cGUuZ2V0Q2FudmFzQ29udGFpbmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbnZhc0NvbnRhaW5lcn0sbi5wcm90b3R5cGUuZ2V0Q2FudmFzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbnZhc30sbi5wcm90b3R5cGUuX2NvbnRhaW5lckRpbWVuc2lvbnM9ZnVuY3Rpb24oKXt2YXIgdD0wLGU9MDtyZXR1cm4gdGhpcy5fY29udGFpbmVyJiYodD10aGlzLl9jb250YWluZXIub2Zmc2V0V2lkdGh8fDQwMCxlPXRoaXMuX2NvbnRhaW5lci5vZmZzZXRIZWlnaHR8fDMwMCksW3QsZV19LG4ucHJvdG90eXBlLl9zZXR1cENvbnRhaW5lcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRhaW5lcjt0LmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1tYXBcIiksKHRoaXMuX21pc3NpbmdDU1NDb250YWluZXI9cy5jcmVhdGUoXCJkaXZcIixcIm1hcGJveGdsLW1pc3NpbmctY3NzXCIsdCkpLmlubmVySFRNTD1cIk1pc3NpbmcgTWFwYm94IEdMIEpTIENTU1wiO3ZhciBlPXRoaXMuX2NhbnZhc0NvbnRhaW5lcj1zLmNyZWF0ZShcImRpdlwiLFwibWFwYm94Z2wtY2FudmFzLWNvbnRhaW5lclwiLHQpO3RoaXMuX2ludGVyYWN0aXZlJiZlLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1pbnRlcmFjdGl2ZVwiKSx0aGlzLl9jYW52YXM9cy5jcmVhdGUoXCJjYW52YXNcIixcIm1hcGJveGdsLWNhbnZhc1wiLGUpLHRoaXMuX2NhbnZhcy5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsdGhpcy5fY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoXCJ3ZWJnbGNvbnRleHRsb3N0XCIsdGhpcy5fY29udGV4dExvc3QsITEpLHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKFwid2ViZ2xjb250ZXh0cmVzdG9yZWRcIix0aGlzLl9jb250ZXh0UmVzdG9yZWQsITEpLHRoaXMuX2NhbnZhcy5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLFwiMFwiKSx0aGlzLl9jYW52YXMuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLFwiTWFwXCIpO3ZhciByPXRoaXMuX2NvbnRhaW5lckRpbWVuc2lvbnMoKTt0aGlzLl9yZXNpemVDYW52YXMoclswXSxyWzFdKTt2YXIgbj10aGlzLl9jb250cm9sQ29udGFpbmVyPXMuY3JlYXRlKFwiZGl2XCIsXCJtYXBib3hnbC1jb250cm9sLWNvbnRhaW5lclwiLHQpLGk9dGhpcy5fY29udHJvbFBvc2l0aW9ucz17fTtbXCJ0b3AtbGVmdFwiLFwidG9wLXJpZ2h0XCIsXCJib3R0b20tbGVmdFwiLFwiYm90dG9tLXJpZ2h0XCJdLmZvckVhY2goZnVuY3Rpb24odCl7aVt0XT1zLmNyZWF0ZShcImRpdlwiLFwibWFwYm94Z2wtY3RybC1cIit0LG4pfSl9LG4ucHJvdG90eXBlLl9yZXNpemVDYW52YXM9ZnVuY3Rpb24oZSxyKXt2YXIgbj10LmRlZmF1bHQuZGV2aWNlUGl4ZWxSYXRpb3x8MTt0aGlzLl9jYW52YXMud2lkdGg9biplLHRoaXMuX2NhbnZhcy5oZWlnaHQ9bipyLHRoaXMuX2NhbnZhcy5zdHlsZS53aWR0aD1lK1wicHhcIix0aGlzLl9jYW52YXMuc3R5bGUuaGVpZ2h0PXIrXCJweFwifSxuLnByb3RvdHlwZS5fc2V0dXBQYWludGVyPWZ1bmN0aW9uKCl7dmFyIHI9dC5leHRlbmQoe2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6dGhpcy5fZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6dGhpcy5fcHJlc2VydmVEcmF3aW5nQnVmZmVyfSxlLndlYkdMQ29udGV4dEF0dHJpYnV0ZXMpLG49dGhpcy5fY2FudmFzLmdldENvbnRleHQoXCJ3ZWJnbFwiLHIpfHx0aGlzLl9jYW52YXMuZ2V0Q29udGV4dChcImV4cGVyaW1lbnRhbC13ZWJnbFwiLHIpO24/dGhpcy5wYWludGVyPW5ldyB6cihuLHRoaXMudHJhbnNmb3JtKTp0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBXZWJHTFwiKSkpfSxuLnByb3RvdHlwZS5fY29udGV4dExvc3Q9ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZyYW1lSWQmJihhLmNhbmNlbEZyYW1lKHRoaXMuX2ZyYW1lSWQpLHRoaXMuX2ZyYW1lSWQ9bnVsbCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwid2ViZ2xjb250ZXh0bG9zdFwiLHtvcmlnaW5hbEV2ZW50OmV9KSl9LG4ucHJvdG90eXBlLl9jb250ZXh0UmVzdG9yZWQ9ZnVuY3Rpb24oZSl7dGhpcy5fc2V0dXBQYWludGVyKCksdGhpcy5yZXNpemUoKSx0aGlzLl91cGRhdGUoKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJ3ZWJnbGNvbnRleHRyZXN0b3JlZFwiLHtvcmlnaW5hbEV2ZW50OmV9KSl9LG4ucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe3JldHVybiF0aGlzLl9zdHlsZURpcnR5JiYhdGhpcy5fc291cmNlc0RpcnR5JiYhKCF0aGlzLnN0eWxlfHwhdGhpcy5zdHlsZS5sb2FkZWQoKSl9LG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7dGhpcy5zdHlsZSYmKHRoaXMuX3N0eWxlRGlydHk9dGhpcy5fc3R5bGVEaXJ0eXx8dCx0aGlzLl9zb3VyY2VzRGlydHk9ITAsdGhpcy5fcmVyZW5kZXIoKSl9LG4ucHJvdG90eXBlLl9yZXF1ZXN0UmVuZGVyRnJhbWU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3VwZGF0ZSgpLHRoaXMuX3JlbmRlclRhc2tRdWV1ZS5hZGQodCl9LG4ucHJvdG90eXBlLl9jYW5jZWxSZW5kZXJGcmFtZT1mdW5jdGlvbih0KXt0aGlzLl9yZW5kZXJUYXNrUXVldWUucmVtb3ZlKHQpfSxuLnByb3RvdHlwZS5fcmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyVGFza1F1ZXVlLnJ1bigpO3ZhciBlPSExO2lmKHRoaXMuc3R5bGUmJnRoaXMuX3N0eWxlRGlydHkpe3RoaXMuX3N0eWxlRGlydHk9ITE7dmFyIHI9dGhpcy50cmFuc2Zvcm0uem9vbSxuPWEubm93KCk7dGhpcy5zdHlsZS56b29tSGlzdG9yeS51cGRhdGUocixuKTt2YXIgaT1uZXcgdC5kZWZhdWx0JDE2KHIse25vdzpuLGZhZGVEdXJhdGlvbjp0aGlzLl9mYWRlRHVyYXRpb24sem9vbUhpc3Rvcnk6dGhpcy5zdHlsZS56b29tSGlzdG9yeSx0cmFuc2l0aW9uOnRoaXMuc3R5bGUuZ2V0VHJhbnNpdGlvbigpfSksbz1pLmNyb3NzRmFkaW5nRmFjdG9yKCk7MT09PW8mJm89PT10aGlzLl9jcm9zc0ZhZGluZ0ZhY3Rvcnx8KGU9ITAsdGhpcy5fY3Jvc3NGYWRpbmdGYWN0b3I9byksdGhpcy5zdHlsZS51cGRhdGUoaSl9cmV0dXJuIHRoaXMuc3R5bGUmJnRoaXMuX3NvdXJjZXNEaXJ0eSYmKHRoaXMuX3NvdXJjZXNEaXJ0eT0hMSx0aGlzLnN0eWxlLl91cGRhdGVTb3VyY2VzKHRoaXMudHJhbnNmb3JtKSksdGhpcy5fcGxhY2VtZW50RGlydHk9dGhpcy5zdHlsZSYmdGhpcy5zdHlsZS5fdXBkYXRlUGxhY2VtZW50KHRoaXMucGFpbnRlci50cmFuc2Zvcm0sdGhpcy5zaG93Q29sbGlzaW9uQm94ZXMsdGhpcy5fZmFkZUR1cmF0aW9uKSx0aGlzLnBhaW50ZXIucmVuZGVyKHRoaXMuc3R5bGUse3Nob3dUaWxlQm91bmRhcmllczp0aGlzLnNob3dUaWxlQm91bmRhcmllcyxzaG93T3ZlcmRyYXdJbnNwZWN0b3I6dGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yLHJvdGF0aW5nOnRoaXMuaXNSb3RhdGluZygpLHpvb21pbmc6dGhpcy5pc1pvb21pbmcoKSxmYWRlRHVyYXRpb246dGhpcy5fZmFkZUR1cmF0aW9ufSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwicmVuZGVyXCIpKSx0aGlzLmxvYWRlZCgpJiYhdGhpcy5fbG9hZGVkJiYodGhpcy5fbG9hZGVkPSEwLHRoaXMuZmlyZShuZXcgdC5FdmVudChcImxvYWRcIikpKSx0aGlzLnN0eWxlJiYodGhpcy5zdHlsZS5oYXNUcmFuc2l0aW9ucygpfHxlKSYmKHRoaXMuX3N0eWxlRGlydHk9ITApLCh0aGlzLl9zb3VyY2VzRGlydHl8fHRoaXMuX3JlcGFpbnR8fHRoaXMuX3N0eWxlRGlydHl8fHRoaXMuX3BsYWNlbWVudERpcnR5KSYmdGhpcy5fcmVyZW5kZXIoKSx0aGlzfSxuLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9oYXNoJiZ0aGlzLl9oYXNoLnJlbW92ZSgpLGEuY2FuY2VsRnJhbWUodGhpcy5fZnJhbWVJZCksdGhpcy5fcmVuZGVyVGFza1F1ZXVlLmNsZWFyKCksdGhpcy5fZnJhbWVJZD1udWxsLHRoaXMuc2V0U3R5bGUobnVsbCksdm9pZCAwIT09dC5kZWZhdWx0JiYodC5kZWZhdWx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0aGlzLl9vbldpbmRvd1Jlc2l6ZSwhMSksdC5kZWZhdWx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIix0aGlzLl9vbldpbmRvd09ubGluZSwhMSkpO3ZhciBlPXRoaXMucGFpbnRlci5jb250ZXh0LmdsLmdldEV4dGVuc2lvbihcIldFQkdMX2xvc2VfY29udGV4dFwiKTtlJiZlLmxvc2VDb250ZXh0KCksaG4odGhpcy5fY2FudmFzQ29udGFpbmVyKSxobih0aGlzLl9jb250cm9sQ29udGFpbmVyKSxobih0aGlzLl9taXNzaW5nQ1NTQ29udGFpbmVyKSx0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLW1hcFwiKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJyZW1vdmVcIikpfSxuLnByb3RvdHlwZS5fcmVyZW5kZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuc3R5bGUmJiF0aGlzLl9mcmFtZUlkJiYodGhpcy5fZnJhbWVJZD1hLmZyYW1lKGZ1bmN0aW9uKCl7dC5fZnJhbWVJZD1udWxsLHQuX3JlbmRlcigpfSkpfSxuLnByb3RvdHlwZS5fb25XaW5kb3dPbmxpbmU9ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGUoKX0sbi5wcm90b3R5cGUuX29uV2luZG93UmVzaXplPWZ1bmN0aW9uKCl7dGhpcy5fdHJhY2tSZXNpemUmJnRoaXMuc3RvcCgpLnJlc2l6ZSgpLl91cGRhdGUoKX0saS5zaG93VGlsZUJvdW5kYXJpZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9zaG93VGlsZUJvdW5kYXJpZXN9LGkuc2hvd1RpbGVCb3VuZGFyaWVzLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zaG93VGlsZUJvdW5kYXJpZXMhPT10JiYodGhpcy5fc2hvd1RpbGVCb3VuZGFyaWVzPXQsdGhpcy5fdXBkYXRlKCkpfSxpLnNob3dDb2xsaXNpb25Cb3hlcy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3Nob3dDb2xsaXNpb25Cb3hlc30saS5zaG93Q29sbGlzaW9uQm94ZXMuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3Nob3dDb2xsaXNpb25Cb3hlcyE9PXQmJih0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXM9dCx0P3RoaXMuc3R5bGUuX2dlbmVyYXRlQ29sbGlzaW9uQm94ZXMoKTp0aGlzLl91cGRhdGUoKSl9LGkuc2hvd092ZXJkcmF3SW5zcGVjdG9yLmdldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yfSxpLnNob3dPdmVyZHJhd0luc3BlY3Rvci5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yIT09dCYmKHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcj10LHRoaXMuX3VwZGF0ZSgpKX0saS5yZXBhaW50LmdldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fcmVwYWludH0saS5yZXBhaW50LnNldD1mdW5jdGlvbih0KXt0aGlzLl9yZXBhaW50PXQsdGhpcy5fdXBkYXRlKCl9LGkudmVydGljZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl92ZXJ0aWNlc30saS52ZXJ0aWNlcy5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fdmVydGljZXM9dCx0aGlzLl91cGRhdGUoKX0sbi5wcm90b3R5cGUuX29uRGF0YT1mdW5jdGlvbihlKXt0aGlzLl91cGRhdGUoXCJzdHlsZVwiPT09ZS5kYXRhVHlwZSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KGUuZGF0YVR5cGUrXCJkYXRhXCIsZSkpfSxuLnByb3RvdHlwZS5fb25EYXRhTG9hZGluZz1mdW5jdGlvbihlKXt0aGlzLmZpcmUobmV3IHQuRXZlbnQoZS5kYXRhVHlwZStcImRhdGFsb2FkaW5nXCIsZSkpfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLnByb3RvdHlwZSxpKSxufShybik7ZnVuY3Rpb24gaG4odCl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9dmFyIGZuPXtzaG93Q29tcGFzczohMCxzaG93Wm9vbTohMH0scG49ZnVuY3Rpb24oZSl7dmFyIHI9dGhpczt0aGlzLm9wdGlvbnM9dC5leHRlbmQoe30sZm4sZSksdGhpcy5fY29udGFpbmVyPXMuY3JlYXRlKFwiZGl2XCIsXCJtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtZ3JvdXBcIiksdGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnByZXZlbnREZWZhdWx0KCl9KSx0aGlzLm9wdGlvbnMuc2hvd1pvb20mJih0aGlzLl96b29tSW5CdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKFwibWFwYm94Z2wtY3RybC1pY29uIG1hcGJveGdsLWN0cmwtem9vbS1pblwiLFwiWm9vbSBJblwiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuX21hcC56b29tSW4oKX0pLHRoaXMuX3pvb21PdXRCdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKFwibWFwYm94Z2wtY3RybC1pY29uIG1hcGJveGdsLWN0cmwtem9vbS1vdXRcIixcIlpvb20gT3V0XCIsZnVuY3Rpb24oKXtyZXR1cm4gci5fbWFwLnpvb21PdXQoKX0pKSx0aGlzLm9wdGlvbnMuc2hvd0NvbXBhc3MmJih0LmJpbmRBbGwoW1wiX3JvdGF0ZUNvbXBhc3NBcnJvd1wiXSx0aGlzKSx0aGlzLl9jb21wYXNzPXRoaXMuX2NyZWF0ZUJ1dHRvbihcIm1hcGJveGdsLWN0cmwtaWNvbiBtYXBib3hnbC1jdHJsLWNvbXBhc3NcIixcIlJlc2V0IE5vcnRoXCIsZnVuY3Rpb24oKXtyZXR1cm4gci5fbWFwLnJlc2V0Tm9ydGgoKX0pLHRoaXMuX2NvbXBhc3NBcnJvdz1zLmNyZWF0ZShcInNwYW5cIixcIm1hcGJveGdsLWN0cmwtY29tcGFzcy1hcnJvd1wiLHRoaXMuX2NvbXBhc3MpKX07ZnVuY3Rpb24gZG4odCxlLHIpe2lmKHQ9bmV3IEcodC5sbmcsdC5sYXQpLGUpe3ZhciBuPW5ldyBHKHQubG5nLTM2MCx0LmxhdCksaT1uZXcgRyh0LmxuZyszNjAsdC5sYXQpLGE9ci5sb2NhdGlvblBvaW50KHQpLmRpc3RTcXIoZSk7ci5sb2NhdGlvblBvaW50KG4pLmRpc3RTcXIoZSk8YT90PW46ci5sb2NhdGlvblBvaW50KGkpLmRpc3RTcXIoZSk8YSYmKHQ9aSl9Zm9yKDtNYXRoLmFicyh0LmxuZy1yLmNlbnRlci5sbmcpPjE4MDspe3ZhciBvPXIubG9jYXRpb25Qb2ludCh0KTtpZihvLng+PTAmJm8ueT49MCYmby54PD1yLndpZHRoJiZvLnk8PXIuaGVpZ2h0KWJyZWFrO3QubG5nPnIuY2VudGVyLmxuZz90LmxuZy09MzYwOnQubG5nKz0zNjB9cmV0dXJuIHR9cG4ucHJvdG90eXBlLl9yb3RhdGVDb21wYXNzQXJyb3c9ZnVuY3Rpb24oKXt2YXIgdD1cInJvdGF0ZShcIit0aGlzLl9tYXAudHJhbnNmb3JtLmFuZ2xlKigxODAvTWF0aC5QSSkrXCJkZWcpXCI7dGhpcy5fY29tcGFzc0Fycm93LnN0eWxlLnRyYW5zZm9ybT10fSxwbi5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21hcD10LHRoaXMub3B0aW9ucy5zaG93Q29tcGFzcyYmKHRoaXMuX21hcC5vbihcInJvdGF0ZVwiLHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdyksdGhpcy5fcm90YXRlQ29tcGFzc0Fycm93KCksdGhpcy5faGFuZGxlcj1uZXcgV3IodCx7YnV0dG9uOlwibGVmdFwiLGVsZW1lbnQ6dGhpcy5fY29tcGFzc30pLHRoaXMuX2hhbmRsZXIuZW5hYmxlKCkpLHRoaXMuX2NvbnRhaW5lcn0scG4ucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7cy5yZW1vdmUodGhpcy5fY29udGFpbmVyKSx0aGlzLm9wdGlvbnMuc2hvd0NvbXBhc3MmJih0aGlzLl9tYXAub2ZmKFwicm90YXRlXCIsdGhpcy5fcm90YXRlQ29tcGFzc0Fycm93KSx0aGlzLl9oYW5kbGVyLmRpc2FibGUoKSxkZWxldGUgdGhpcy5faGFuZGxlciksZGVsZXRlIHRoaXMuX21hcH0scG4ucHJvdG90eXBlLl9jcmVhdGVCdXR0b249ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXMuY3JlYXRlKFwiYnV0dG9uXCIsdCx0aGlzLl9jb250YWluZXIpO3JldHVybiBuLnR5cGU9XCJidXR0b25cIixuLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIixlKSxuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHIpLG59O3ZhciBnbj17Y2VudGVyOlwidHJhbnNsYXRlKC01MCUsLTUwJSlcIix0b3A6XCJ0cmFuc2xhdGUoLTUwJSwwKVwiLFwidG9wLWxlZnRcIjpcInRyYW5zbGF0ZSgwLDApXCIsXCJ0b3AtcmlnaHRcIjpcInRyYW5zbGF0ZSgtMTAwJSwwKVwiLGJvdHRvbTpcInRyYW5zbGF0ZSgtNTAlLC0xMDAlKVwiLFwiYm90dG9tLWxlZnRcIjpcInRyYW5zbGF0ZSgwLC0xMDAlKVwiLFwiYm90dG9tLXJpZ2h0XCI6XCJ0cmFuc2xhdGUoLTEwMCUsLTEwMCUpXCIsbGVmdDpcInRyYW5zbGF0ZSgwLC01MCUpXCIscmlnaHQ6XCJ0cmFuc2xhdGUoLTEwMCUsLTUwJSlcIn07ZnVuY3Rpb24gdm4odCxlLHIpe3ZhciBuPXQuY2xhc3NMaXN0O2Zvcih2YXIgaSBpbiBnbiluLnJlbW92ZShcIm1hcGJveGdsLVwiK3IrXCItYW5jaG9yLVwiK2kpO24uYWRkKFwibWFwYm94Z2wtXCIrcitcIi1hbmNob3ItXCIrZSl9dmFyIG1uPWZ1bmN0aW9uKGUpe2lmKChhcmd1bWVudHNbMF1pbnN0YW5jZW9mIHQuZGVmYXVsdC5IVE1MRWxlbWVudHx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpJiYoZT10LmV4dGVuZCh7ZWxlbWVudDplfSxhcmd1bWVudHNbMV0pKSx0LmJpbmRBbGwoW1wiX3VwZGF0ZVwiLFwiX29uTWFwQ2xpY2tcIl0sdGhpcyksdGhpcy5fYW5jaG9yPWUmJmUuYW5jaG9yfHxcImNlbnRlclwiLHRoaXMuX2NvbG9yPWUmJmUuY29sb3J8fFwiIzNGQjFDRVwiLGUmJmUuZWxlbWVudCl0aGlzLl9lbGVtZW50PWUuZWxlbWVudCx0aGlzLl9vZmZzZXQ9dC5kZWZhdWx0JDEuY29udmVydChlJiZlLm9mZnNldHx8WzAsMF0pO2Vsc2V7dGhpcy5fZGVmYXVsdE1hcmtlcj0hMCx0aGlzLl9lbGVtZW50PXMuY3JlYXRlKFwiZGl2XCIpO3ZhciByPXMuY3JlYXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwic3ZnXCIpO3Iuc2V0QXR0cmlidXRlTlMobnVsbCxcImhlaWdodFwiLFwiNDFweFwiKSxyLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJ3aWR0aFwiLFwiMjdweFwiKSxyLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJ2aWV3Qm94XCIsXCIwIDAgMjcgNDFcIik7dmFyIG49cy5jcmVhdGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXCJnXCIpO24uc2V0QXR0cmlidXRlTlMobnVsbCxcInN0cm9rZVwiLFwibm9uZVwiKSxuLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJzdHJva2Utd2lkdGhcIixcIjFcIiksbi5zZXRBdHRyaWJ1dGVOUyhudWxsLFwiZmlsbFwiLFwibm9uZVwiKSxuLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJmaWxsLXJ1bGVcIixcImV2ZW5vZGRcIik7dmFyIGk9cy5jcmVhdGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXCJnXCIpO2kuc2V0QXR0cmlidXRlTlMobnVsbCxcImZpbGwtcnVsZVwiLFwibm9uemVyb1wiKTt2YXIgYT1zLmNyZWF0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcImdcIik7YS5zZXRBdHRyaWJ1dGVOUyhudWxsLFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoMy4wLCAyOS4wKVwiKSxhLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJmaWxsXCIsXCIjMDAwMDAwXCIpO2Zvcih2YXIgbz0wLGw9W3tyeDpcIjEwLjVcIixyeTpcIjUuMjUwMDIyNzNcIn0se3J4OlwiMTAuNVwiLHJ5OlwiNS4yNTAwMjI3M1wifSx7cng6XCI5LjVcIixyeTpcIjQuNzcyNzUwMDdcIn0se3J4OlwiOC41XCIscnk6XCI0LjI5NTQ5OTM2XCJ9LHtyeDpcIjcuNVwiLHJ5OlwiMy44MTgyMjMwOFwifSx7cng6XCI2LjVcIixyeTpcIjMuMzQwOTQ2NzlcIn0se3J4OlwiNS41XCIscnk6XCIyLjg2MzY3MDUxXCJ9LHtyeDpcIjQuNVwiLHJ5OlwiMi4zODYzNjg2NFwifV07bzxsLmxlbmd0aDtvKz0xKXt2YXIgYz1sW29dLHU9cy5jcmVhdGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXCJlbGxpcHNlXCIpO3Uuc2V0QXR0cmlidXRlTlMobnVsbCxcIm9wYWNpdHlcIixcIjAuMDRcIiksdS5zZXRBdHRyaWJ1dGVOUyhudWxsLFwiY3hcIixcIjEwLjVcIiksdS5zZXRBdHRyaWJ1dGVOUyhudWxsLFwiY3lcIixcIjUuODAwMjkwMDhcIiksdS5zZXRBdHRyaWJ1dGVOUyhudWxsLFwicnhcIixjLnJ4KSx1LnNldEF0dHJpYnV0ZU5TKG51bGwsXCJyeVwiLGMucnkpLGEuYXBwZW5kQ2hpbGQodSl9dmFyIGg9cy5jcmVhdGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXCJnXCIpO2guc2V0QXR0cmlidXRlTlMobnVsbCxcImZpbGxcIix0aGlzLl9jb2xvcik7dmFyIGY9cy5jcmVhdGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXCJwYXRoXCIpO2Yuc2V0QXR0cmlidXRlTlMobnVsbCxcImRcIixcIk0yNywxMy41IEMyNywxOS4wNzQ2NDQgMjAuMjUwMDAxLDI3LjAwMDAwMiAxNC43NSwzNC41MDAwMDIgQzE0LjAxNjY2NSwzNS41MDAwMDQgMTIuOTgzMzM1LDM1LjUwMDAwNCAxMi4yNSwzNC41MDAwMDIgQzYuNzQ5OTk5MywyNy4wMDAwMDIgMCwxOS4yMjI1NjIgMCwxMy41IEMwLDYuMDQ0MTU1OSA2LjA0NDE1NTksMCAxMy41LDAgQzIwLjk1NTg0NCwwIDI3LDYuMDQ0MTU1OSAyNywxMy41IFpcIiksaC5hcHBlbmRDaGlsZChmKTt2YXIgcD1zLmNyZWF0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcImdcIik7cC5zZXRBdHRyaWJ1dGVOUyhudWxsLFwib3BhY2l0eVwiLFwiMC4yNVwiKSxwLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJmaWxsXCIsXCIjMDAwMDAwXCIpO3ZhciBkPXMuY3JlYXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwicGF0aFwiKTtkLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJkXCIsXCJNMTMuNSwwIEM2LjA0NDE1NTksMCAwLDYuMDQ0MTU1OSAwLDEzLjUgQzAsMTkuMjIyNTYyIDYuNzQ5OTk5MywyNyAxMi4yNSwzNC41IEMxMywzNS41MjI3MjcgMTQuMDE2NjY0LDM1LjUwMDAwNCAxNC43NSwzNC41IEMyMC4yNTAwMDEsMjcgMjcsMTkuMDc0NjQ0IDI3LDEzLjUgQzI3LDYuMDQ0MTU1OSAyMC45NTU4NDQsMCAxMy41LDAgWiBNMTMuNSwxIEMyMC40MTU0MDQsMSAyNiw2LjU4NDU5NiAyNiwxMy41IEMyNiwxNS44OTg2NTcgMjQuNDk1NTg0LDE5LjE4MTQzMSAyMi4yMjA3MDMsMjIuNzM4MjgxIEMxOS45NDU4MjMsMjYuMjk1MTMyIDE2LjcwNTExOSwzMC4xNDIxNjcgMTMuOTQzMzU5LDMzLjkwODIwMyBDMTMuNzQzNDQ1LDM0LjE4MDgxNCAxMy42MTI3MTUsMzQuMzIyNzM4IDEzLjUsMzQuNDQxNDA2IEMxMy4zODcyODUsMzQuMzIyNzM4IDEzLjI1NjU1NSwzNC4xODA4MTQgMTMuMDU2NjQxLDMzLjkwODIwMyBDMTAuMjg0NDgxLDMwLjEyNzk4NSA3LjQxNDg2ODQsMjYuMzE0MTU5IDUuMDE1NjI1LDIyLjc3MzQzOCBDMi42MTYzODE2LDE5LjIzMjcxNSAxLDE1Ljk1MzUzOCAxLDEzLjUgQzEsNi41ODQ1OTYgNi41ODQ1OTYsMSAxMy41LDEgWlwiKSxwLmFwcGVuZENoaWxkKGQpO3ZhciBnPXMuY3JlYXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwiZ1wiKTtnLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZSg2LjAsIDcuMClcIiksZy5zZXRBdHRyaWJ1dGVOUyhudWxsLFwiZmlsbFwiLFwiI0ZGRkZGRlwiKTt2YXIgdj1zLmNyZWF0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcImdcIik7di5zZXRBdHRyaWJ1dGVOUyhudWxsLFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoOC4wLCA4LjApXCIpO3ZhciBtPXMuY3JlYXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwiY2lyY2xlXCIpO20uc2V0QXR0cmlidXRlTlMobnVsbCxcImZpbGxcIixcIiMwMDAwMDBcIiksbS5zZXRBdHRyaWJ1dGVOUyhudWxsLFwib3BhY2l0eVwiLFwiMC4yNVwiKSxtLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJjeFwiLFwiNS41XCIpLG0uc2V0QXR0cmlidXRlTlMobnVsbCxcImN5XCIsXCI1LjVcIiksbS5zZXRBdHRyaWJ1dGVOUyhudWxsLFwiclwiLFwiNS40OTk5OTYyXCIpO3ZhciB5PXMuY3JlYXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwiY2lyY2xlXCIpO3kuc2V0QXR0cmlidXRlTlMobnVsbCxcImZpbGxcIixcIiNGRkZGRkZcIikseS5zZXRBdHRyaWJ1dGVOUyhudWxsLFwiY3hcIixcIjUuNVwiKSx5LnNldEF0dHJpYnV0ZU5TKG51bGwsXCJjeVwiLFwiNS41XCIpLHkuc2V0QXR0cmlidXRlTlMobnVsbCxcInJcIixcIjUuNDk5OTk2MlwiKSx2LmFwcGVuZENoaWxkKG0pLHYuYXBwZW5kQ2hpbGQoeSksaS5hcHBlbmRDaGlsZChhKSxpLmFwcGVuZENoaWxkKGgpLGkuYXBwZW5kQ2hpbGQocCksaS5hcHBlbmRDaGlsZChnKSxpLmFwcGVuZENoaWxkKHYpLHIuYXBwZW5kQ2hpbGQoaSksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChyKSx0aGlzLl9vZmZzZXQ9dC5kZWZhdWx0JDEuY29udmVydChlJiZlLm9mZnNldHx8WzAsLTE0XSl9dGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtbWFya2VyXCIpLHRoaXMuX3BvcHVwPW51bGx9O21uLnByb3RvdHlwZS5hZGRUbz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZW1vdmUoKSx0aGlzLl9tYXA9dCx0LmdldENhbnZhc0NvbnRhaW5lcigpLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpLHQub24oXCJtb3ZlXCIsdGhpcy5fdXBkYXRlKSx0Lm9uKFwibW92ZWVuZFwiLHRoaXMuX3VwZGF0ZSksdGhpcy5fdXBkYXRlKCksdGhpcy5fbWFwLm9uKFwiY2xpY2tcIix0aGlzLl9vbk1hcENsaWNrKSx0aGlzfSxtbi5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmKHRoaXMuX21hcC5vZmYoXCJjbGlja1wiLHRoaXMuX29uTWFwQ2xpY2spLHRoaXMuX21hcC5vZmYoXCJtb3ZlXCIsdGhpcy5fdXBkYXRlKSx0aGlzLl9tYXAub2ZmKFwibW92ZWVuZFwiLHRoaXMuX3VwZGF0ZSksZGVsZXRlIHRoaXMuX21hcCkscy5yZW1vdmUodGhpcy5fZWxlbWVudCksdGhpcy5fcG9wdXAmJnRoaXMuX3BvcHVwLnJlbW92ZSgpLHRoaXN9LG1uLnByb3RvdHlwZS5nZXRMbmdMYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG5nTGF0fSxtbi5wcm90b3R5cGUuc2V0TG5nTGF0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sbmdMYXQ9Ry5jb252ZXJ0KHQpLHRoaXMuX3Bvcz1udWxsLHRoaXMuX3BvcHVwJiZ0aGlzLl9wb3B1cC5zZXRMbmdMYXQodGhpcy5fbG5nTGF0KSx0aGlzLl91cGRhdGUoKSx0aGlzfSxtbi5wcm90b3R5cGUuZ2V0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50fSxtbi5wcm90b3R5cGUuc2V0UG9wdXA9ZnVuY3Rpb24odCl7aWYodGhpcy5fcG9wdXAmJih0aGlzLl9wb3B1cC5yZW1vdmUoKSx0aGlzLl9wb3B1cD1udWxsKSx0KXtpZighKFwib2Zmc2V0XCJpbiB0Lm9wdGlvbnMpKXt2YXIgZT1NYXRoLnNxcnQoTWF0aC5wb3coMTMuNSwyKS8yKTt0Lm9wdGlvbnMub2Zmc2V0PXRoaXMuX2RlZmF1bHRNYXJrZXI/e3RvcDpbMCwwXSxcInRvcC1sZWZ0XCI6WzAsMF0sXCJ0b3AtcmlnaHRcIjpbMCwwXSxib3R0b206WzAsLTM4LjFdLFwiYm90dG9tLWxlZnRcIjpbZSwtMSooMjQuNitlKV0sXCJib3R0b20tcmlnaHRcIjpbLWUsLTEqKDI0LjYrZSldLGxlZnQ6WzEzLjUsLTI0LjZdLHJpZ2h0OlstMTMuNSwtMjQuNl19OnRoaXMuX29mZnNldH10aGlzLl9wb3B1cD10LHRoaXMuX2xuZ0xhdCYmdGhpcy5fcG9wdXAuc2V0TG5nTGF0KHRoaXMuX2xuZ0xhdCl9cmV0dXJuIHRoaXN9LG1uLnByb3RvdHlwZS5fb25NYXBDbGljaz1mdW5jdGlvbih0KXt2YXIgZT10Lm9yaWdpbmFsRXZlbnQudGFyZ2V0LHI9dGhpcy5fZWxlbWVudDt0aGlzLl9wb3B1cCYmKGU9PT1yfHxyLmNvbnRhaW5zKGUpKSYmdGhpcy50b2dnbGVQb3B1cCgpfSxtbi5wcm90b3R5cGUuZ2V0UG9wdXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9wdXB9LG1uLnByb3RvdHlwZS50b2dnbGVQb3B1cD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BvcHVwO3JldHVybiB0Pyh0LmlzT3BlbigpP3QucmVtb3ZlKCk6dC5hZGRUbyh0aGlzLl9tYXApLHRoaXMpOnRoaXN9LG1uLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuX21hcCYmKHRoaXMuX21hcC50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXMmJih0aGlzLl9sbmdMYXQ9ZG4odGhpcy5fbG5nTGF0LHRoaXMuX3Bvcyx0aGlzLl9tYXAudHJhbnNmb3JtKSksdGhpcy5fcG9zPXRoaXMuX21hcC5wcm9qZWN0KHRoaXMuX2xuZ0xhdCkuX2FkZCh0aGlzLl9vZmZzZXQpLHQmJlwibW92ZWVuZFwiIT09dC50eXBlfHwodGhpcy5fcG9zPXRoaXMuX3Bvcy5yb3VuZCgpKSxzLnNldFRyYW5zZm9ybSh0aGlzLl9lbGVtZW50LGduW3RoaXMuX2FuY2hvcl0rXCIgdHJhbnNsYXRlKFwiK3RoaXMuX3Bvcy54K1wicHgsIFwiK3RoaXMuX3Bvcy55K1wicHgpXCIpLHZuKHRoaXMuX2VsZW1lbnQsdGhpcy5fYW5jaG9yLFwibWFya2VyXCIpKX0sbW4ucHJvdG90eXBlLmdldE9mZnNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vZmZzZXR9LG1uLnByb3RvdHlwZS5zZXRPZmZzZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX29mZnNldD10LmRlZmF1bHQkMS5jb252ZXJ0KGUpLHRoaXMuX3VwZGF0ZSgpLHRoaXN9O3ZhciB5bix4bj17cG9zaXRpb25PcHRpb25zOntlbmFibGVIaWdoQWNjdXJhY3k6ITEsbWF4aW11bUFnZTowLHRpbWVvdXQ6NmUzfSxmaXRCb3VuZHNPcHRpb25zOnttYXhab29tOjE1fSx0cmFja1VzZXJMb2NhdGlvbjohMSxzaG93VXNlckxvY2F0aW9uOiEwfSxibj1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIpe2UuY2FsbCh0aGlzKSx0aGlzLm9wdGlvbnM9dC5leHRlbmQoe30seG4sciksdC5iaW5kQWxsKFtcIl9vblN1Y2Nlc3NcIixcIl9vbkVycm9yXCIsXCJfZmluaXNoXCIsXCJfc2V0dXBVSVwiLFwiX3VwZGF0ZUNhbWVyYVwiLFwiX3VwZGF0ZU1hcmtlclwiXSx0aGlzKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24oZSl7dmFyIHI7cmV0dXJuIHRoaXMuX21hcD1lLHRoaXMuX2NvbnRhaW5lcj1zLmNyZWF0ZShcImRpdlwiLFwibWFwYm94Z2wtY3RybCBtYXBib3hnbC1jdHJsLWdyb3VwXCIpLHI9dGhpcy5fc2V0dXBVSSx2b2lkIDAhPT15bj9yKHluKTp2b2lkIDAhPT10LmRlZmF1bHQubmF2aWdhdG9yLnBlcm1pc3Npb25zP3QuZGVmYXVsdC5uYXZpZ2F0b3IucGVybWlzc2lvbnMucXVlcnkoe25hbWU6XCJnZW9sb2NhdGlvblwifSkudGhlbihmdW5jdGlvbih0KXt5bj1cImRlbmllZFwiIT09dC5zdGF0ZSxyKHluKX0pOih5bj0hIXQuZGVmYXVsdC5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24scih5bikpLHRoaXMuX2NvbnRhaW5lcn0sci5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXt2b2lkIDAhPT10aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQmJih0LmRlZmF1bHQubmF2aWdhdG9yLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2godGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEKSx0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQ9dm9pZCAwKSx0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiYmdGhpcy5fdXNlckxvY2F0aW9uRG90TWFya2VyLnJlbW92ZSgpLHMucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwPXZvaWQgMH0sci5wcm90b3R5cGUuX29uU3VjY2Vzcz1mdW5jdGlvbihlKXtpZih0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24pc3dpdGNoKHRoaXMuX2xhc3RLbm93blBvc2l0aW9uPWUsdGhpcy5fd2F0Y2hTdGF0ZSl7Y2FzZVwiV0FJVElOR19BQ1RJVkVcIjpjYXNlXCJBQ1RJVkVfTE9DS1wiOmNhc2VcIkFDVElWRV9FUlJPUlwiOnRoaXMuX3dhdGNoU3RhdGU9XCJBQ1RJVkVfTE9DS1wiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZ1wiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvclwiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZVwiKTticmVhaztjYXNlXCJCQUNLR1JPVU5EXCI6Y2FzZVwiQkFDS0dST1VORF9FUlJPUlwiOnRoaXMuX3dhdGNoU3RhdGU9XCJCQUNLR1JPVU5EXCIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nXCIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvclwiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmRcIil9dGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJlwiT0ZGXCIhPT10aGlzLl93YXRjaFN0YXRlJiZ0aGlzLl91cGRhdGVNYXJrZXIoZSksdGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uJiZcIkFDVElWRV9MT0NLXCIhPT10aGlzLl93YXRjaFN0YXRlfHx0aGlzLl91cGRhdGVDYW1lcmEoZSksdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJnRoaXMuX2RvdEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLXVzZXItbG9jYXRpb24tZG90LXN0YWxlXCIpLHRoaXMuZmlyZShuZXcgdC5FdmVudChcImdlb2xvY2F0ZVwiLGUpKSx0aGlzLl9maW5pc2goKX0sci5wcm90b3R5cGUuX3VwZGF0ZUNhbWVyYT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgRyh0LmNvb3Jkcy5sb25naXR1ZGUsdC5jb29yZHMubGF0aXR1ZGUpLHI9dC5jb29yZHMuYWNjdXJhY3k7dGhpcy5fbWFwLmZpdEJvdW5kcyhlLnRvQm91bmRzKHIpLHRoaXMub3B0aW9ucy5maXRCb3VuZHNPcHRpb25zLHtnZW9sb2NhdGVTb3VyY2U6ITB9KX0sci5wcm90b3R5cGUuX3VwZGF0ZU1hcmtlcj1mdW5jdGlvbih0KXt0P3RoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlci5zZXRMbmdMYXQoW3QuY29vcmRzLmxvbmdpdHVkZSx0LmNvb3Jkcy5sYXRpdHVkZV0pLmFkZFRvKHRoaXMuX21hcCk6dGhpcy5fdXNlckxvY2F0aW9uRG90TWFya2VyLnJlbW92ZSgpfSxyLnByb3RvdHlwZS5fb25FcnJvcj1mdW5jdGlvbihlKXtpZih0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24paWYoMT09PWUuY29kZSl0aGlzLl93YXRjaFN0YXRlPVwiT0ZGXCIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nXCIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlXCIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yXCIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZFwiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3JcIiksdm9pZCAwIT09dGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEJiZ0aGlzLl9jbGVhcldhdGNoKCk7ZWxzZSBzd2l0Y2godGhpcy5fd2F0Y2hTdGF0ZSl7Y2FzZVwiV0FJVElOR19BQ1RJVkVcIjp0aGlzLl93YXRjaFN0YXRlPVwiQUNUSVZFX0VSUk9SXCIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmVcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3JcIik7YnJlYWs7Y2FzZVwiQUNUSVZFX0xPQ0tcIjp0aGlzLl93YXRjaFN0YXRlPVwiQUNUSVZFX0VSUk9SXCIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmVcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3JcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nXCIpO2JyZWFrO2Nhc2VcIkJBQ0tHUk9VTkRcIjp0aGlzLl93YXRjaFN0YXRlPVwiQkFDS0dST1VORF9FUlJPUlwiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZFwiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3JcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nXCIpfVwiT0ZGXCIhPT10aGlzLl93YXRjaFN0YXRlJiZ0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiYmdGhpcy5fZG90RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtdXNlci1sb2NhdGlvbi1kb3Qtc3RhbGVcIiksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiZXJyb3JcIixlKSksdGhpcy5fZmluaXNoKCl9LHIucHJvdG90eXBlLl9maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl90aW1lb3V0SWQmJmNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0SWQpLHRoaXMuX3RpbWVvdXRJZD12b2lkIDB9LHIucHJvdG90eXBlLl9zZXR1cFVJPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7ITEhPT1lJiYodGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnByZXZlbnREZWZhdWx0KCl9KSx0aGlzLl9nZW9sb2NhdGVCdXR0b249cy5jcmVhdGUoXCJidXR0b25cIixcIm1hcGJveGdsLWN0cmwtaWNvbiBtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZVwiLHRoaXMuX2NvbnRhaW5lciksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnR5cGU9XCJidXR0b25cIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLFwiR2VvbG9jYXRlXCIpLHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbiYmKHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoXCJhcmlhLXByZXNzZWRcIixcImZhbHNlXCIpLHRoaXMuX3dhdGNoU3RhdGU9XCJPRkZcIiksdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJih0aGlzLl9kb3RFbGVtZW50PXMuY3JlYXRlKFwiZGl2XCIsXCJtYXBib3hnbC11c2VyLWxvY2F0aW9uLWRvdFwiKSx0aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXI9bmV3IG1uKHRoaXMuX2RvdEVsZW1lbnQpLHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbiYmKHRoaXMuX3dhdGNoU3RhdGU9XCJPRkZcIikpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLnRyaWdnZXIuYmluZCh0aGlzKSksdGhpcy5fc2V0dXA9ITAsdGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uJiZ0aGlzLl9tYXAub24oXCJtb3Zlc3RhcnRcIixmdW5jdGlvbihlKXtlLmdlb2xvY2F0ZVNvdXJjZXx8XCJBQ1RJVkVfTE9DS1wiIT09ci5fd2F0Y2hTdGF0ZXx8KHIuX3dhdGNoU3RhdGU9XCJCQUNLR1JPVU5EXCIsci5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kXCIpLHIuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlXCIpLHIuZmlyZShuZXcgdC5FdmVudChcInRyYWNrdXNlcmxvY2F0aW9uZW5kXCIpKSl9KSl9LHIucHJvdG90eXBlLnRyaWdnZXI9ZnVuY3Rpb24oKXtpZighdGhpcy5fc2V0dXApcmV0dXJuIHQud2Fybk9uY2UoXCJHZW9sb2NhdGUgY29udHJvbCB0cmlnZ2VyZWQgYmVmb3JlIGFkZGVkIHRvIGEgbWFwXCIpLCExO2lmKHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbil7c3dpdGNoKHRoaXMuX3dhdGNoU3RhdGUpe2Nhc2VcIk9GRlwiOnRoaXMuX3dhdGNoU3RhdGU9XCJXQUlUSU5HX0FDVElWRVwiLHRoaXMuZmlyZShuZXcgdC5FdmVudChcInRyYWNrdXNlcmxvY2F0aW9uc3RhcnRcIikpO2JyZWFrO2Nhc2VcIldBSVRJTkdfQUNUSVZFXCI6Y2FzZVwiQUNUSVZFX0xPQ0tcIjpjYXNlXCJBQ1RJVkVfRVJST1JcIjpjYXNlXCJCQUNLR1JPVU5EX0VSUk9SXCI6dGhpcy5fd2F0Y2hTdGF0ZT1cIk9GRlwiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZ1wiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZVwiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvclwiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmRcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kLWVycm9yXCIpLHRoaXMuZmlyZShuZXcgdC5FdmVudChcInRyYWNrdXNlcmxvY2F0aW9uZW5kXCIpKTticmVhaztjYXNlXCJCQUNLR1JPVU5EXCI6dGhpcy5fd2F0Y2hTdGF0ZT1cIkFDVElWRV9MT0NLXCIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kXCIpLHRoaXMuX2xhc3RLbm93blBvc2l0aW9uJiZ0aGlzLl91cGRhdGVDYW1lcmEodGhpcy5fbGFzdEtub3duUG9zaXRpb24pLHRoaXMuZmlyZShuZXcgdC5FdmVudChcInRyYWNrdXNlcmxvY2F0aW9uc3RhcnRcIikpfXN3aXRjaCh0aGlzLl93YXRjaFN0YXRlKXtjYXNlXCJXQUlUSU5HX0FDVElWRVwiOnRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZ1wiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZVwiKTticmVhaztjYXNlXCJBQ1RJVkVfTE9DS1wiOnRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlXCIpO2JyZWFrO2Nhc2VcIkFDVElWRV9FUlJPUlwiOnRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZ1wiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvclwiKTticmVhaztjYXNlXCJCQUNLR1JPVU5EXCI6dGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kXCIpO2JyZWFrO2Nhc2VcIkJBQ0tHUk9VTkRfRVJST1JcIjp0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmdcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kLWVycm9yXCIpfVwiT0ZGXCI9PT10aGlzLl93YXRjaFN0YXRlJiZ2b2lkIDAhPT10aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQ/dGhpcy5fY2xlYXJXYXRjaCgpOnZvaWQgMD09PXRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCYmKHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZ1wiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uc2V0QXR0cmlidXRlKFwiYXJpYS1wcmVzc2VkXCIsXCJ0cnVlXCIpLHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRD10LmRlZmF1bHQubmF2aWdhdG9yLmdlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24odGhpcy5fb25TdWNjZXNzLHRoaXMuX29uRXJyb3IsdGhpcy5vcHRpb25zLnBvc2l0aW9uT3B0aW9ucykpfWVsc2UgdC5kZWZhdWx0Lm5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24odGhpcy5fb25TdWNjZXNzLHRoaXMuX29uRXJyb3IsdGhpcy5vcHRpb25zLnBvc2l0aW9uT3B0aW9ucyksdGhpcy5fdGltZW91dElkPXNldFRpbWVvdXQodGhpcy5fZmluaXNoLDFlNCk7cmV0dXJuITB9LHIucHJvdG90eXBlLl9jbGVhcldhdGNoPWZ1bmN0aW9uKCl7dC5kZWZhdWx0Lm5hdmlnYXRvci5nZW9sb2NhdGlvbi5jbGVhcldhdGNoKHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCksdGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEPXZvaWQgMCx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmdcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZShcImFyaWEtcHJlc3NlZFwiLFwiZmFsc2VcIiksdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJnRoaXMuX3VwZGF0ZU1hcmtlcihudWxsKX0scn0odC5FdmVudGVkKSxfbj17bWF4V2lkdGg6MTAwLHVuaXQ6XCJtZXRyaWNcIn0sd249ZnVuY3Rpb24oZSl7dGhpcy5vcHRpb25zPXQuZXh0ZW5kKHt9LF9uLGUpLHQuYmluZEFsbChbXCJfb25Nb3ZlXCIsXCJzZXRVbml0XCJdLHRoaXMpfTtmdW5jdGlvbiBrbih0LGUscil7dmFyIG4saSxhLG8scyxsLGM9ciYmci5tYXhXaWR0aHx8MTAwLHU9dC5fY29udGFpbmVyLmNsaWVudEhlaWdodC8yLGg9KG49dC51bnByb2plY3QoWzAsdV0pLGk9dC51bnByb2plY3QoW2MsdV0pLGE9TWF0aC5QSS8xODAsbz1uLmxhdCphLHM9aS5sYXQqYSxsPU1hdGguc2luKG8pKk1hdGguc2luKHMpK01hdGguY29zKG8pKk1hdGguY29zKHMpKk1hdGguY29zKChpLmxuZy1uLmxuZykqYSksNjM3MWUzKk1hdGguYWNvcyhNYXRoLm1pbihsLDEpKSk7aWYociYmXCJpbXBlcmlhbFwiPT09ci51bml0KXt2YXIgZj0zLjI4MDgqaDtmPjUyODA/QW4oZSxjLGYvNTI4MCxcIm1pXCIpOkFuKGUsYyxmLFwiZnRcIil9ZWxzZSByJiZcIm5hdXRpY2FsXCI9PT1yLnVuaXQ/QW4oZSxjLGgvMTg1MixcIm5tXCIpOkFuKGUsYyxoLFwibVwiKX1mdW5jdGlvbiBBbih0LGUscixuKXt2YXIgaSxhLG8scz0oaT1yLChhPU1hdGgucG93KDEwLChcIlwiK01hdGguZmxvb3IoaSkpLmxlbmd0aC0xKSkqKG89KG89aS9hKT49MTA/MTA6bz49NT81Om8+PTM/MzpvPj0yPzI6MSkpLGw9cy9yO1wibVwiPT09biYmcz49MWUzJiYocy89MWUzLG49XCJrbVwiKSx0LnN0eWxlLndpZHRoPWUqbCtcInB4XCIsdC5pbm5lckhUTUw9cytufXduLnByb3RvdHlwZS5nZXREZWZhdWx0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm5cImJvdHRvbS1sZWZ0XCJ9LHduLnByb3RvdHlwZS5fb25Nb3ZlPWZ1bmN0aW9uKCl7a24odGhpcy5fbWFwLHRoaXMuX2NvbnRhaW5lcix0aGlzLm9wdGlvbnMpfSx3bi5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21hcD10LHRoaXMuX2NvbnRhaW5lcj1zLmNyZWF0ZShcImRpdlwiLFwibWFwYm94Z2wtY3RybCBtYXBib3hnbC1jdHJsLXNjYWxlXCIsdC5nZXRDb250YWluZXIoKSksdGhpcy5fbWFwLm9uKFwibW92ZVwiLHRoaXMuX29uTW92ZSksdGhpcy5fb25Nb3ZlKCksdGhpcy5fY29udGFpbmVyfSx3bi5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXtzLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLHRoaXMuX21hcC5vZmYoXCJtb3ZlXCIsdGhpcy5fb25Nb3ZlKSx0aGlzLl9tYXA9dm9pZCAwfSx3bi5wcm90b3R5cGUuc2V0VW5pdD1mdW5jdGlvbih0KXt0aGlzLm9wdGlvbnMudW5pdD10LGtuKHRoaXMuX21hcCx0aGlzLl9jb250YWluZXIsdGhpcy5vcHRpb25zKX07dmFyIFRuPWZ1bmN0aW9uKCl7dGhpcy5fZnVsbHNjcmVlbj0hMSx0LmJpbmRBbGwoW1wiX29uQ2xpY2tGdWxsc2NyZWVuXCIsXCJfY2hhbmdlSWNvblwiXSx0aGlzKSxcIm9uZnVsbHNjcmVlbmNoYW5nZVwiaW4gdC5kZWZhdWx0LmRvY3VtZW50P3RoaXMuX2Z1bGxzY3JlZW5jaGFuZ2U9XCJmdWxsc2NyZWVuY2hhbmdlXCI6XCJvbm1vemZ1bGxzY3JlZW5jaGFuZ2VcImluIHQuZGVmYXVsdC5kb2N1bWVudD90aGlzLl9mdWxsc2NyZWVuY2hhbmdlPVwibW96ZnVsbHNjcmVlbmNoYW5nZVwiOlwib253ZWJraXRmdWxsc2NyZWVuY2hhbmdlXCJpbiB0LmRlZmF1bHQuZG9jdW1lbnQ/dGhpcy5fZnVsbHNjcmVlbmNoYW5nZT1cIndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2VcIjpcIm9ubXNmdWxsc2NyZWVuY2hhbmdlXCJpbiB0LmRlZmF1bHQuZG9jdW1lbnQmJih0aGlzLl9mdWxsc2NyZWVuY2hhbmdlPVwiTVNGdWxsc2NyZWVuQ2hhbmdlXCIpLHRoaXMuX2NsYXNzTmFtZT1cIm1hcGJveGdsLWN0cmxcIn07VG4ucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXA9ZSx0aGlzLl9tYXBDb250YWluZXI9dGhpcy5fbWFwLmdldENvbnRhaW5lcigpLHRoaXMuX2NvbnRhaW5lcj1zLmNyZWF0ZShcImRpdlwiLHRoaXMuX2NsYXNzTmFtZStcIiBtYXBib3hnbC1jdHJsLWdyb3VwXCIpLHRoaXMuX2NoZWNrRnVsbHNjcmVlblN1cHBvcnQoKT90aGlzLl9zZXR1cFVJKCk6KHRoaXMuX2NvbnRhaW5lci5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLHQud2Fybk9uY2UoXCJUaGlzIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IGZ1bGxzY3JlZW4gbW9kZS5cIikpLHRoaXMuX2NvbnRhaW5lcn0sVG4ucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7cy5yZW1vdmUodGhpcy5fY29udGFpbmVyKSx0aGlzLl9tYXA9bnVsbCx0LmRlZmF1bHQuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLl9mdWxsc2NyZWVuY2hhbmdlLHRoaXMuX2NoYW5nZUljb24pfSxUbi5wcm90b3R5cGUuX2NoZWNrRnVsbHNjcmVlblN1cHBvcnQ9ZnVuY3Rpb24oKXtyZXR1cm4hISh0LmRlZmF1bHQuZG9jdW1lbnQuZnVsbHNjcmVlbkVuYWJsZWR8fHQuZGVmYXVsdC5kb2N1bWVudC5tb3pGdWxsU2NyZWVuRW5hYmxlZHx8dC5kZWZhdWx0LmRvY3VtZW50Lm1zRnVsbHNjcmVlbkVuYWJsZWR8fHQuZGVmYXVsdC5kb2N1bWVudC53ZWJraXRGdWxsc2NyZWVuRW5hYmxlZCl9LFRuLnByb3RvdHlwZS5fc2V0dXBVST1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2Z1bGxzY3JlZW5CdXR0b249cy5jcmVhdGUoXCJidXR0b25cIix0aGlzLl9jbGFzc05hbWUrXCItaWNvbiBcIit0aGlzLl9jbGFzc05hbWUrXCItZnVsbHNjcmVlblwiLHRoaXMuX2NvbnRhaW5lcik7ZS5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsXCJUb2dnbGUgZnVsbHNjcmVlblwiKSxlLnR5cGU9XCJidXR0b25cIix0aGlzLl9mdWxsc2NyZWVuQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHRoaXMuX29uQ2xpY2tGdWxsc2NyZWVuKSx0LmRlZmF1bHQuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLl9mdWxsc2NyZWVuY2hhbmdlLHRoaXMuX2NoYW5nZUljb24pfSxUbi5wcm90b3R5cGUuX2lzRnVsbHNjcmVlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9mdWxsc2NyZWVufSxUbi5wcm90b3R5cGUuX2NoYW5nZUljb249ZnVuY3Rpb24oKXsodC5kZWZhdWx0LmRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50fHx0LmRlZmF1bHQuZG9jdW1lbnQubW96RnVsbFNjcmVlbkVsZW1lbnR8fHQuZGVmYXVsdC5kb2N1bWVudC53ZWJraXRGdWxsc2NyZWVuRWxlbWVudHx8dC5kZWZhdWx0LmRvY3VtZW50Lm1zRnVsbHNjcmVlbkVsZW1lbnQpPT09dGhpcy5fbWFwQ29udGFpbmVyIT09dGhpcy5fZnVsbHNjcmVlbiYmKHRoaXMuX2Z1bGxzY3JlZW49IXRoaXMuX2Z1bGxzY3JlZW4sdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5jbGFzc0xpc3QudG9nZ2xlKHRoaXMuX2NsYXNzTmFtZStcIi1zaHJpbmtcIiksdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5jbGFzc0xpc3QudG9nZ2xlKHRoaXMuX2NsYXNzTmFtZStcIi1mdWxsc2NyZWVuXCIpKX0sVG4ucHJvdG90eXBlLl9vbkNsaWNrRnVsbHNjcmVlbj1mdW5jdGlvbigpe3RoaXMuX2lzRnVsbHNjcmVlbigpP3QuZGVmYXVsdC5kb2N1bWVudC5leGl0RnVsbHNjcmVlbj90LmRlZmF1bHQuZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTp0LmRlZmF1bHQuZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbj90LmRlZmF1bHQuZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbigpOnQuZGVmYXVsdC5kb2N1bWVudC5tc0V4aXRGdWxsc2NyZWVuP3QuZGVmYXVsdC5kb2N1bWVudC5tc0V4aXRGdWxsc2NyZWVuKCk6dC5kZWZhdWx0LmRvY3VtZW50LndlYmtpdENhbmNlbEZ1bGxTY3JlZW4mJnQuZGVmYXVsdC5kb2N1bWVudC53ZWJraXRDYW5jZWxGdWxsU2NyZWVuKCk6dGhpcy5fbWFwQ29udGFpbmVyLnJlcXVlc3RGdWxsc2NyZWVuP3RoaXMuX21hcENvbnRhaW5lci5yZXF1ZXN0RnVsbHNjcmVlbigpOnRoaXMuX21hcENvbnRhaW5lci5tb3pSZXF1ZXN0RnVsbFNjcmVlbj90aGlzLl9tYXBDb250YWluZXIubW96UmVxdWVzdEZ1bGxTY3JlZW4oKTp0aGlzLl9tYXBDb250YWluZXIubXNSZXF1ZXN0RnVsbHNjcmVlbj90aGlzLl9tYXBDb250YWluZXIubXNSZXF1ZXN0RnVsbHNjcmVlbigpOnRoaXMuX21hcENvbnRhaW5lci53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbiYmdGhpcy5fbWFwQ29udGFpbmVyLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKCl9O3ZhciBNbj17Y2xvc2VCdXR0b246ITAsY2xvc2VPbkNsaWNrOiEwfSxTbj1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIpe2UuY2FsbCh0aGlzKSx0aGlzLm9wdGlvbnM9dC5leHRlbmQoT2JqZWN0LmNyZWF0ZShNbiksciksdC5iaW5kQWxsKFtcIl91cGRhdGVcIixcIl9vbkNsaWNrQ2xvc2VcIl0sdGhpcyl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmFkZFRvPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXA9ZSx0aGlzLl9tYXAub24oXCJtb3ZlXCIsdGhpcy5fdXBkYXRlKSx0aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrJiZ0aGlzLl9tYXAub24oXCJjbGlja1wiLHRoaXMuX29uQ2xpY2tDbG9zZSksdGhpcy5fdXBkYXRlKCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwib3BlblwiKSksdGhpc30sci5wcm90b3R5cGUuaXNPcGVuPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9tYXB9LHIucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50JiZzLnJlbW92ZSh0aGlzLl9jb250ZW50KSx0aGlzLl9jb250YWluZXImJihzLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLGRlbGV0ZSB0aGlzLl9jb250YWluZXIpLHRoaXMuX21hcCYmKHRoaXMuX21hcC5vZmYoXCJtb3ZlXCIsdGhpcy5fdXBkYXRlKSx0aGlzLl9tYXAub2ZmKFwiY2xpY2tcIix0aGlzLl9vbkNsaWNrQ2xvc2UpLGRlbGV0ZSB0aGlzLl9tYXApLHRoaXMuZmlyZShuZXcgdC5FdmVudChcImNsb3NlXCIpKSx0aGlzfSxyLnByb3RvdHlwZS5nZXRMbmdMYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG5nTGF0fSxyLnByb3RvdHlwZS5zZXRMbmdMYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xuZ0xhdD1HLmNvbnZlcnQodCksdGhpcy5fcG9zPW51bGwsdGhpcy5fdXBkYXRlKCksdGhpc30sci5wcm90b3R5cGUuc2V0VGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zZXRET01Db250ZW50KHQuZGVmYXVsdC5kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSl9LHIucHJvdG90eXBlLnNldEhUTUw9ZnVuY3Rpb24oZSl7dmFyIHIsbj10LmRlZmF1bHQuZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGk9dC5kZWZhdWx0LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJib2R5XCIpO2ZvcihpLmlubmVySFRNTD1lO3I9aS5maXJzdENoaWxkOyluLmFwcGVuZENoaWxkKHIpO3JldHVybiB0aGlzLnNldERPTUNvbnRlbnQobil9LHIucHJvdG90eXBlLnNldERPTUNvbnRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNvbnRlbnQoKSx0aGlzLl9jb250ZW50LmFwcGVuZENoaWxkKHQpLHRoaXMuX3VwZGF0ZSgpLHRoaXN9LHIucHJvdG90eXBlLl9jcmVhdGVDb250ZW50PWZ1bmN0aW9uKCl7dGhpcy5fY29udGVudCYmcy5yZW1vdmUodGhpcy5fY29udGVudCksdGhpcy5fY29udGVudD1zLmNyZWF0ZShcImRpdlwiLFwibWFwYm94Z2wtcG9wdXAtY29udGVudFwiLHRoaXMuX2NvbnRhaW5lciksdGhpcy5vcHRpb25zLmNsb3NlQnV0dG9uJiYodGhpcy5fY2xvc2VCdXR0b249cy5jcmVhdGUoXCJidXR0b25cIixcIm1hcGJveGdsLXBvcHVwLWNsb3NlLWJ1dHRvblwiLHRoaXMuX2NvbnRlbnQpLHRoaXMuX2Nsb3NlQnV0dG9uLnR5cGU9XCJidXR0b25cIix0aGlzLl9jbG9zZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsXCJDbG9zZSBwb3B1cFwiKSx0aGlzLl9jbG9zZUJ1dHRvbi5pbm5lckhUTUw9XCImIzIxNTtcIix0aGlzLl9jbG9zZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLl9vbkNsaWNrQ2xvc2UpKX0sci5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe2lmKHRoaXMuX21hcCYmdGhpcy5fbG5nTGF0JiZ0aGlzLl9jb250ZW50KXt0aGlzLl9jb250YWluZXJ8fCh0aGlzLl9jb250YWluZXI9cy5jcmVhdGUoXCJkaXZcIixcIm1hcGJveGdsLXBvcHVwXCIsdGhpcy5fbWFwLmdldENvbnRhaW5lcigpKSx0aGlzLl90aXA9cy5jcmVhdGUoXCJkaXZcIixcIm1hcGJveGdsLXBvcHVwLXRpcFwiLHRoaXMuX2NvbnRhaW5lciksdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRlbnQpKSx0aGlzLl9tYXAudHJhbnNmb3JtLnJlbmRlcldvcmxkQ29waWVzJiYodGhpcy5fbG5nTGF0PWRuKHRoaXMuX2xuZ0xhdCx0aGlzLl9wb3MsdGhpcy5fbWFwLnRyYW5zZm9ybSkpO3ZhciBlPXRoaXMuX3Bvcz10aGlzLl9tYXAucHJvamVjdCh0aGlzLl9sbmdMYXQpLHI9dGhpcy5vcHRpb25zLmFuY2hvcixuPWZ1bmN0aW9uIGUocil7aWYocil7aWYoXCJudW1iZXJcIj09dHlwZW9mIHIpe3ZhciBuPU1hdGgucm91bmQoTWF0aC5zcXJ0KC41Kk1hdGgucG93KHIsMikpKTtyZXR1cm57Y2VudGVyOm5ldyB0LmRlZmF1bHQkMSgwLDApLHRvcDpuZXcgdC5kZWZhdWx0JDEoMCxyKSxcInRvcC1sZWZ0XCI6bmV3IHQuZGVmYXVsdCQxKG4sbiksXCJ0b3AtcmlnaHRcIjpuZXcgdC5kZWZhdWx0JDEoLW4sbiksYm90dG9tOm5ldyB0LmRlZmF1bHQkMSgwLC1yKSxcImJvdHRvbS1sZWZ0XCI6bmV3IHQuZGVmYXVsdCQxKG4sLW4pLFwiYm90dG9tLXJpZ2h0XCI6bmV3IHQuZGVmYXVsdCQxKC1uLC1uKSxsZWZ0Om5ldyB0LmRlZmF1bHQkMShyLDApLHJpZ2h0Om5ldyB0LmRlZmF1bHQkMSgtciwwKX19aWYociBpbnN0YW5jZW9mIHQuZGVmYXVsdCQxfHxBcnJheS5pc0FycmF5KHIpKXt2YXIgaT10LmRlZmF1bHQkMS5jb252ZXJ0KHIpO3JldHVybntjZW50ZXI6aSx0b3A6aSxcInRvcC1sZWZ0XCI6aSxcInRvcC1yaWdodFwiOmksYm90dG9tOmksXCJib3R0b20tbGVmdFwiOmksXCJib3R0b20tcmlnaHRcIjppLGxlZnQ6aSxyaWdodDppfX1yZXR1cm57Y2VudGVyOnQuZGVmYXVsdCQxLmNvbnZlcnQoci5jZW50ZXJ8fFswLDBdKSx0b3A6dC5kZWZhdWx0JDEuY29udmVydChyLnRvcHx8WzAsMF0pLFwidG9wLWxlZnRcIjp0LmRlZmF1bHQkMS5jb252ZXJ0KHJbXCJ0b3AtbGVmdFwiXXx8WzAsMF0pLFwidG9wLXJpZ2h0XCI6dC5kZWZhdWx0JDEuY29udmVydChyW1widG9wLXJpZ2h0XCJdfHxbMCwwXSksYm90dG9tOnQuZGVmYXVsdCQxLmNvbnZlcnQoci5ib3R0b218fFswLDBdKSxcImJvdHRvbS1sZWZ0XCI6dC5kZWZhdWx0JDEuY29udmVydChyW1wiYm90dG9tLWxlZnRcIl18fFswLDBdKSxcImJvdHRvbS1yaWdodFwiOnQuZGVmYXVsdCQxLmNvbnZlcnQocltcImJvdHRvbS1yaWdodFwiXXx8WzAsMF0pLGxlZnQ6dC5kZWZhdWx0JDEuY29udmVydChyLmxlZnR8fFswLDBdKSxyaWdodDp0LmRlZmF1bHQkMS5jb252ZXJ0KHIucmlnaHR8fFswLDBdKX19cmV0dXJuIGUobmV3IHQuZGVmYXVsdCQxKDAsMCkpfSh0aGlzLm9wdGlvbnMub2Zmc2V0KTtpZighcil7dmFyIGksYT10aGlzLl9jb250YWluZXIub2Zmc2V0V2lkdGgsbz10aGlzLl9jb250YWluZXIub2Zmc2V0SGVpZ2h0O2k9ZS55K24uYm90dG9tLnk8bz9bXCJ0b3BcIl06ZS55PnRoaXMuX21hcC50cmFuc2Zvcm0uaGVpZ2h0LW8/W1wiYm90dG9tXCJdOltdLGUueDxhLzI/aS5wdXNoKFwibGVmdFwiKTplLng+dGhpcy5fbWFwLnRyYW5zZm9ybS53aWR0aC1hLzImJmkucHVzaChcInJpZ2h0XCIpLHI9MD09PWkubGVuZ3RoP1wiYm90dG9tXCI6aS5qb2luKFwiLVwiKX12YXIgbD1lLmFkZChuW3JdKS5yb3VuZCgpO3Muc2V0VHJhbnNmb3JtKHRoaXMuX2NvbnRhaW5lcixnbltyXStcIiB0cmFuc2xhdGUoXCIrbC54K1wicHgsXCIrbC55K1wicHgpXCIpLHZuKHRoaXMuX2NvbnRhaW5lcixyLFwicG9wdXBcIil9fSxyLnByb3RvdHlwZS5fb25DbGlja0Nsb3NlPWZ1bmN0aW9uKCl7dGhpcy5yZW1vdmUoKX0scn0odC5FdmVudGVkKSxFbj17dmVyc2lvbjpcIjAuNDUuMFwiLHN1cHBvcnRlZDplLHdvcmtlckNvdW50Ok1hdGgubWF4KE1hdGguZmxvb3IoYS5oYXJkd2FyZUNvbmN1cnJlbmN5LzIpLDEpLHNldFJUTFRleHRQbHVnaW46dC5zZXRSVExUZXh0UGx1Z2luLE1hcDp1bixOYXZpZ2F0aW9uQ29udHJvbDpwbixHZW9sb2NhdGVDb250cm9sOmJuLEF0dHJpYnV0aW9uQ29udHJvbDpubixTY2FsZUNvbnRyb2w6d24sRnVsbHNjcmVlbkNvbnRyb2w6VG4sUG9wdXA6U24sTWFya2VyOm1uLFN0eWxlOkplLExuZ0xhdDpHLExuZ0xhdEJvdW5kczpZLFBvaW50OnQuZGVmYXVsdCQxLEV2ZW50ZWQ6dC5FdmVudGVkLGNvbmZpZzp2LGdldCBhY2Nlc3NUb2tlbigpe3JldHVybiB2LkFDQ0VTU19UT0tFTn0sc2V0IGFjY2Vzc1Rva2VuKHQpe3YuQUNDRVNTX1RPS0VOPXR9LHdvcmtlclVybDpcIlwifTtyZXR1cm4gRW59KSxufSl9KS5jYWxsKHRoaXMsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHt9XSw0MjA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE8PHQrMSxyPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPWEodCxuKTtyZXR1cm4gcn07dmFyIG49dChcImNvbnZleC1odWxsXCIpO2Z1bmN0aW9uIGkodCxlLHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkodCksaT0wO2k8dDsrK2kpbltpXT0wLGk9PT1lJiYobltpXSs9LjUpLGk9PT1yJiYobltpXSs9LjUpO3JldHVybiBufWZ1bmN0aW9uIGEodCxlKXtpZigwPT09ZXx8ZT09PSgxPDx0KzEpLTEpcmV0dXJuW107Zm9yKHZhciByPVtdLGE9W10sbz0wO288PXQ7KytvKWlmKGUmMTw8byl7ci5wdXNoKGkodCxvLTEsby0xKSksYS5wdXNoKG51bGwpO2Zvcih2YXIgcz0wO3M8PXQ7KytzKX5lJjE8PHMmJihyLnB1c2goaSh0LG8tMSxzLTEpKSxhLnB1c2goW28sc10pKX12YXIgbD1uKHIpLGM9W107dDpmb3Iobz0wO288bC5sZW5ndGg7KytvKXt2YXIgdT1sW29dLGg9W107Zm9yKHM9MDtzPHUubGVuZ3RoOysrcyl7aWYoIWFbdVtzXV0pY29udGludWUgdDtoLnB1c2goYVt1W3NdXS5zbGljZSgpKX1jLnB1c2goaCl9cmV0dXJuIGN9fSx7XCJjb252ZXgtaHVsbFwiOjEyMX1dLDQyMTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuL25vcm1hbGl6ZVwiKSxpPXQoXCJnbC1tYXQ0L2NyZWF0ZVwiKSxhPXQoXCJnbC1tYXQ0L2Nsb25lXCIpLG89dChcImdsLW1hdDQvZGV0ZXJtaW5hbnRcIikscz10KFwiZ2wtbWF0NC9pbnZlcnRcIiksbD10KFwiZ2wtbWF0NC90cmFuc3Bvc2VcIiksYz17bGVuZ3RoOnQoXCJnbC12ZWMzL2xlbmd0aFwiKSxub3JtYWxpemU6dChcImdsLXZlYzMvbm9ybWFsaXplXCIpLGRvdDp0KFwiZ2wtdmVjMy9kb3RcIiksY3Jvc3M6dChcImdsLXZlYzMvY3Jvc3NcIil9LHU9aSgpLGg9aSgpLGY9WzAsMCwwLDBdLHA9W1swLDAsMF0sWzAsMCwwXSxbMCwwLDBdXSxkPVswLDAsMF07ZnVuY3Rpb24gZyh0LGUscixuLGkpe3RbMF09ZVswXSpuK3JbMF0qaSx0WzFdPWVbMV0qbityWzFdKmksdFsyXT1lWzJdKm4rclsyXSppfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLHYsbSl7aWYoZXx8KGU9WzAsMCwwXSkscnx8KHI9WzAsMCwwXSksaXx8KGk9WzAsMCwwXSksdnx8KHY9WzAsMCwwLDFdKSxtfHwobT1bMCwwLDAsMV0pLCFuKHUsdCkpcmV0dXJuITE7aWYoYShoLHUpLGhbM109MCxoWzddPTAsaFsxMV09MCxoWzE1XT0xLE1hdGguYWJzKG8oaCk8MWUtOCkpcmV0dXJuITE7dmFyIHkseCxiLF8sdyxrLEEsVD11WzNdLE09dVs3XSxTPXVbMTFdLEU9dVsxMl0sQz11WzEzXSxMPXVbMTRdLHo9dVsxNV07aWYoMCE9PVR8fDAhPT1NfHwwIT09Uyl7aWYoZlswXT1ULGZbMV09TSxmWzJdPVMsZlszXT16LCFzKGgsaCkpcmV0dXJuITE7bChoLGgpLHk9dixiPWgsXz0oeD1mKVswXSx3PXhbMV0saz14WzJdLEE9eFszXSx5WzBdPWJbMF0qXytiWzRdKncrYls4XSprK2JbMTJdKkEseVsxXT1iWzFdKl8rYls1XSp3K2JbOV0qaytiWzEzXSpBLHlbMl09YlsyXSpfK2JbNl0qdytiWzEwXSprK2JbMTRdKkEseVszXT1iWzNdKl8rYls3XSp3K2JbMTFdKmsrYlsxNV0qQX1lbHNlIHZbMF09dlsxXT12WzJdPTAsdlszXT0xO2lmKGVbMF09RSxlWzFdPUMsZVsyXT1MLGZ1bmN0aW9uKHQsZSl7dFswXVswXT1lWzBdLHRbMF1bMV09ZVsxXSx0WzBdWzJdPWVbMl0sdFsxXVswXT1lWzRdLHRbMV1bMV09ZVs1XSx0WzFdWzJdPWVbNl0sdFsyXVswXT1lWzhdLHRbMl1bMV09ZVs5XSx0WzJdWzJdPWVbMTBdfShwLHUpLHJbMF09Yy5sZW5ndGgocFswXSksYy5ub3JtYWxpemUocFswXSxwWzBdKSxpWzBdPWMuZG90KHBbMF0scFsxXSksZyhwWzFdLHBbMV0scFswXSwxLC1pWzBdKSxyWzFdPWMubGVuZ3RoKHBbMV0pLGMubm9ybWFsaXplKHBbMV0scFsxXSksaVswXS89clsxXSxpWzFdPWMuZG90KHBbMF0scFsyXSksZyhwWzJdLHBbMl0scFswXSwxLC1pWzFdKSxpWzJdPWMuZG90KHBbMV0scFsyXSksZyhwWzJdLHBbMl0scFsxXSwxLC1pWzJdKSxyWzJdPWMubGVuZ3RoKHBbMl0pLGMubm9ybWFsaXplKHBbMl0scFsyXSksaVsxXS89clsyXSxpWzJdLz1yWzJdLGMuY3Jvc3MoZCxwWzFdLHBbMl0pLGMuZG90KHBbMF0sZCk8MClmb3IodmFyIE89MDtPPDM7TysrKXJbT10qPS0xLHBbT11bMF0qPS0xLHBbT11bMV0qPS0xLHBbT11bMl0qPS0xO3JldHVybiBtWzBdPS41Kk1hdGguc3FydChNYXRoLm1heCgxK3BbMF1bMF0tcFsxXVsxXS1wWzJdWzJdLDApKSxtWzFdPS41Kk1hdGguc3FydChNYXRoLm1heCgxLXBbMF1bMF0rcFsxXVsxXS1wWzJdWzJdLDApKSxtWzJdPS41Kk1hdGguc3FydChNYXRoLm1heCgxLXBbMF1bMF0tcFsxXVsxXStwWzJdWzJdLDApKSxtWzNdPS41Kk1hdGguc3FydChNYXRoLm1heCgxK3BbMF1bMF0rcFsxXVsxXStwWzJdWzJdLDApKSxwWzJdWzFdPnBbMV1bMl0mJihtWzBdPS1tWzBdKSxwWzBdWzJdPnBbMl1bMF0mJihtWzFdPS1tWzFdKSxwWzFdWzBdPnBbMF1bMV0mJihtWzJdPS1tWzJdKSwhMH19LHtcIi4vbm9ybWFsaXplXCI6NDIyLFwiZ2wtbWF0NC9jbG9uZVwiOjI1NixcImdsLW1hdDQvY3JlYXRlXCI6MjU3LFwiZ2wtbWF0NC9kZXRlcm1pbmFudFwiOjI1OCxcImdsLW1hdDQvaW52ZXJ0XCI6MjYyLFwiZ2wtbWF0NC90cmFuc3Bvc2VcIjoyNzMsXCJnbC12ZWMzL2Nyb3NzXCI6MzI3LFwiZ2wtdmVjMy9kb3RcIjozMzIsXCJnbC12ZWMzL2xlbmd0aFwiOjM0MixcImdsLXZlYzMvbm9ybWFsaXplXCI6MzQ5fV0sNDIyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVsxNV07aWYoMD09PXIpcmV0dXJuITE7Zm9yKHZhciBuPTEvcixpPTA7aTwxNjtpKyspdFtpXT1lW2ldKm47cmV0dXJuITB9fSx7fV0sNDIzOltmdW5jdGlvbih0LGUscil7dmFyIG49dChcImdsLXZlYzMvbGVycFwiKSxpPXQoXCJtYXQ0LXJlY29tcG9zZVwiKSxhPXQoXCJtYXQ0LWRlY29tcG9zZVwiKSxvPXQoXCJnbC1tYXQ0L2RldGVybWluYW50XCIpLHM9dChcInF1YXQtc2xlcnBcIiksbD1oKCksYz1oKCksdT1oKCk7ZnVuY3Rpb24gaCgpe3JldHVybnt0cmFuc2xhdGU6ZigpLHNjYWxlOmYoMSksc2tldzpmKCkscGVyc3BlY3RpdmU6WzAsMCwwLDFdLHF1YXRlcm5pb246WzAsMCwwLDFdfX1mdW5jdGlvbiBmKHQpe3JldHVyblt0fHwwLHR8fDAsdHx8MF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGgpe2lmKDA9PT1vKGUpfHwwPT09byhyKSlyZXR1cm4hMTt2YXIgZj1hKGUsbC50cmFuc2xhdGUsbC5zY2FsZSxsLnNrZXcsbC5wZXJzcGVjdGl2ZSxsLnF1YXRlcm5pb24pLHA9YShyLGMudHJhbnNsYXRlLGMuc2NhbGUsYy5za2V3LGMucGVyc3BlY3RpdmUsYy5xdWF0ZXJuaW9uKTtyZXR1cm4hKCFmfHwhcHx8KG4odS50cmFuc2xhdGUsbC50cmFuc2xhdGUsYy50cmFuc2xhdGUsaCksbih1LnNrZXcsbC5za2V3LGMuc2tldyxoKSxuKHUuc2NhbGUsbC5zY2FsZSxjLnNjYWxlLGgpLG4odS5wZXJzcGVjdGl2ZSxsLnBlcnNwZWN0aXZlLGMucGVyc3BlY3RpdmUsaCkscyh1LnF1YXRlcm5pb24sbC5xdWF0ZXJuaW9uLGMucXVhdGVybmlvbixoKSxpKHQsdS50cmFuc2xhdGUsdS5zY2FsZSx1LnNrZXcsdS5wZXJzcGVjdGl2ZSx1LnF1YXRlcm5pb24pLDApKX19LHtcImdsLW1hdDQvZGV0ZXJtaW5hbnRcIjoyNTgsXCJnbC12ZWMzL2xlcnBcIjozNDMsXCJtYXQ0LWRlY29tcG9zZVwiOjQyMSxcIm1hdDQtcmVjb21wb3NlXCI6NDI0LFwicXVhdC1zbGVycFwiOjQ3Nn1dLDQyNDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXtpZGVudGl0eTp0KFwiZ2wtbWF0NC9pZGVudGl0eVwiKSx0cmFuc2xhdGU6dChcImdsLW1hdDQvdHJhbnNsYXRlXCIpLG11bHRpcGx5OnQoXCJnbC1tYXQ0L211bHRpcGx5XCIpLGNyZWF0ZTp0KFwiZ2wtbWF0NC9jcmVhdGVcIiksc2NhbGU6dChcImdsLW1hdDQvc2NhbGVcIiksZnJvbVJvdGF0aW9uVHJhbnNsYXRpb246dChcImdsLW1hdDQvZnJvbVJvdGF0aW9uVHJhbnNsYXRpb25cIil9LGk9KG4uY3JlYXRlKCksbi5jcmVhdGUoKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyxzKXtyZXR1cm4gbi5pZGVudGl0eSh0KSxuLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKHQscyxlKSx0WzNdPW9bMF0sdFs3XT1vWzFdLHRbMTFdPW9bMl0sdFsxNV09b1szXSxuLmlkZW50aXR5KGkpLDAhPT1hWzJdJiYoaVs5XT1hWzJdLG4ubXVsdGlwbHkodCx0LGkpKSwwIT09YVsxXSYmKGlbOV09MCxpWzhdPWFbMV0sbi5tdWx0aXBseSh0LHQsaSkpLDAhPT1hWzBdJiYoaVs4XT0wLGlbNF09YVswXSxuLm11bHRpcGx5KHQsdCxpKSksbi5zY2FsZSh0LHQsciksdH19LHtcImdsLW1hdDQvY3JlYXRlXCI6MjU3LFwiZ2wtbWF0NC9mcm9tUm90YXRpb25UcmFuc2xhdGlvblwiOjI2MCxcImdsLW1hdDQvaWRlbnRpdHlcIjoyNjEsXCJnbC1tYXQ0L211bHRpcGx5XCI6MjY0LFwiZ2wtbWF0NC9zY2FsZVwiOjI3MSxcImdsLW1hdDQvdHJhbnNsYXRlXCI6MjcyfV0sNDI1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPU1hdGgubG9nMnx8ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubG9nKHQpKk1hdGguTE9HMkV9fSx7fV0sNDI2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImJpbmFyeS1zZWFyY2gtYm91bmRzXCIpLGk9dChcIm1hdDQtaW50ZXJwb2xhdGVcIiksYT10KFwiZ2wtbWF0NC9pbnZlcnRcIiksbz10KFwiZ2wtbWF0NC9yb3RhdGVYXCIpLHM9dChcImdsLW1hdDQvcm90YXRlWVwiKSxsPXQoXCJnbC1tYXQ0L3JvdGF0ZVpcIiksYz10KFwiZ2wtbWF0NC9sb29rQXRcIiksdT10KFwiZ2wtbWF0NC90cmFuc2xhdGVcIiksaD0odChcImdsLW1hdDQvc2NhbGVcIiksdChcImdsLXZlYzMvbm9ybWFsaXplXCIpKSxmPVswLDAsMF07ZnVuY3Rpb24gcCh0KXt0aGlzLl9jb21wb25lbnRzPXQuc2xpY2UoKSx0aGlzLl90aW1lPVswXSx0aGlzLnByZXZNYXRyaXg9dC5zbGljZSgpLHRoaXMubmV4dE1hdHJpeD10LnNsaWNlKCksdGhpcy5jb21wdXRlZE1hdHJpeD10LnNsaWNlKCksdGhpcy5jb21wdXRlZEludmVyc2U9dC5zbGljZSgpLHRoaXMuY29tcHV0ZWRFeWU9WzAsMCwwXSx0aGlzLmNvbXB1dGVkVXA9WzAsMCwwXSx0aGlzLmNvbXB1dGVkQ2VudGVyPVswLDAsMF0sdGhpcy5jb21wdXRlZFJhZGl1cz1bMF0sdGhpcy5fbGltaXRzPVstMS8wLDEvMF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcCgodD10fHx7fSkubWF0cml4fHxbMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0pfTt2YXIgZD1wLnByb3RvdHlwZTtkLnJlY2FsY01hdHJpeD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aW1lLHI9bi5sZShlLHQpLG89dGhpcy5jb21wdXRlZE1hdHJpeDtpZighKHI8MCkpe3ZhciBzPXRoaXMuX2NvbXBvbmVudHM7aWYocj09PWUubGVuZ3RoLTEpZm9yKHZhciBsPTE2KnIsYz0wO2M8MTY7KytjKW9bY109c1tsKytdO2Vsc2V7dmFyIHU9ZVtyKzFdLWVbcl0sZj0obD0xNipyLHRoaXMucHJldk1hdHJpeCkscD0hMDtmb3IoYz0wO2M8MTY7KytjKWZbY109c1tsKytdO3ZhciBkPXRoaXMubmV4dE1hdHJpeDtmb3IoYz0wO2M8MTY7KytjKWRbY109c1tsKytdLHA9cCYmZltjXT09PWRbY107aWYodTwxZS02fHxwKWZvcihjPTA7YzwxNjsrK2Mpb1tjXT1mW2NdO2Vsc2UgaShvLGYsZCwodC1lW3JdKS91KX12YXIgZz10aGlzLmNvbXB1dGVkVXA7Z1swXT1vWzFdLGdbMV09b1s1XSxnWzJdPW9bOV0saChnLGcpO3ZhciB2PXRoaXMuY29tcHV0ZWRJbnZlcnNlO2EodixvKTt2YXIgbT10aGlzLmNvbXB1dGVkRXllLHk9dlsxNV07bVswXT12WzEyXS95LG1bMV09dlsxM10veSxtWzJdPXZbMTRdL3k7dmFyIHg9dGhpcy5jb21wdXRlZENlbnRlcixiPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO2ZvcihjPTA7YzwzOysrYyl4W2NdPW1bY10tb1syKzQqY10qYn19LGQuaWRsZT1mdW5jdGlvbih0KXtpZighKHQ8dGhpcy5sYXN0VCgpKSl7Zm9yKHZhciBlPXRoaXMuX2NvbXBvbmVudHMscj1lLmxlbmd0aC0xNixuPTA7bjwxNjsrK24pZS5wdXNoKGVbcisrXSk7dGhpcy5fdGltZS5wdXNoKHQpfX0sZC5mbHVzaD1mdW5jdGlvbih0KXt2YXIgZT1uLmd0KHRoaXMuX3RpbWUsdCktMjtlPDB8fCh0aGlzLl90aW1lLnNwbGljZSgwLGUpLHRoaXMuX2NvbXBvbmVudHMuc3BsaWNlKDAsMTYqZSkpfSxkLmxhc3RUPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RpbWVbdGhpcy5fdGltZS5sZW5ndGgtMV19LGQubG9va0F0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpLGU9ZXx8dGhpcy5jb21wdXRlZEV5ZSxyPXJ8fGYsbj1ufHx0aGlzLmNvbXB1dGVkVXAsdGhpcy5zZXRNYXRyaXgodCxjKHRoaXMuY29tcHV0ZWRNYXRyaXgsZSxyLG4pKTtmb3IodmFyIGk9MCxhPTA7YTwzOysrYSlpKz1NYXRoLnBvdyhyW2FdLWVbYV0sMik7aT1NYXRoLmxvZyhNYXRoLnNxcnQoaSkpLHRoaXMuY29tcHV0ZWRSYWRpdXNbMF09aX0sZC5yb3RhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZEludmVyc2U7ZSYmcyhpLGksZSksciYmbyhpLGksciksbiYmbChpLGksbiksdGhpcy5zZXRNYXRyaXgodCxhKHRoaXMuY29tcHV0ZWRNYXRyaXgsaSkpfTt2YXIgZz1bMCwwLDBdO2QucGFuPWZ1bmN0aW9uKHQsZSxyLG4pe2dbMF09LShlfHwwKSxnWzFdPS0ocnx8MCksZ1syXT0tKG58fDApLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRJbnZlcnNlO3UoaSxpLGcpLHRoaXMuc2V0TWF0cml4KHQsYShpLGkpKX0sZC50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIsbil7Z1swXT1lfHwwLGdbMV09cnx8MCxnWzJdPW58fDAsdGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZE1hdHJpeDt1KGksaSxnKSx0aGlzLnNldE1hdHJpeCh0LGkpfSxkLnNldE1hdHJpeD1mdW5jdGlvbih0LGUpe2lmKCEodDx0aGlzLmxhc3RUKCkpKXt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciByPTA7cjwxNjsrK3IpdGhpcy5fY29tcG9uZW50cy5wdXNoKGVbcl0pfX0sZC5zZXREaXN0YW5jZT1mdW5jdGlvbih0LGUpe3RoaXMuY29tcHV0ZWRSYWRpdXNbMF09ZX0sZC5zZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2xpbWl0cztyWzBdPXQsclsxXT1lfSxkLmdldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2xpbWl0cztyZXR1cm4gdD8odFswXT1lWzBdLHRbMV09ZVsxXSx0KTplfX0se1wiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIjo4MixcImdsLW1hdDQvaW52ZXJ0XCI6MjYyLFwiZ2wtbWF0NC9sb29rQXRcIjoyNjMsXCJnbC1tYXQ0L3JvdGF0ZVhcIjoyNjgsXCJnbC1tYXQ0L3JvdGF0ZVlcIjoyNjksXCJnbC1tYXQ0L3JvdGF0ZVpcIjoyNzAsXCJnbC1tYXQ0L3NjYWxlXCI6MjcxLFwiZ2wtbWF0NC90cmFuc2xhdGVcIjoyNzIsXCJnbC12ZWMzL25vcm1hbGl6ZVwiOjM0OSxcIm1hdDQtaW50ZXJwb2xhdGVcIjo0MjN9XSw0Mjc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoZTwzKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKXJbaV09aTtyZXR1cm4gMj09PWUmJnRbMF1bMF09PT10WzFdWzBdJiZ0WzBdWzFdPT09dFsxXVsxXT9bMF06cn1mb3IodmFyIGE9bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKWFbaV09aTthLnNvcnQoZnVuY3Rpb24oZSxyKXt2YXIgbj10W2VdWzBdLXRbcl1bMF07cmV0dXJuIG58fHRbZV1bMV0tdFtyXVsxXX0pO2Zvcih2YXIgbz1bYVswXSxhWzFdXSxzPVthWzBdLGFbMV1dLGk9MjtpPGU7KytpKXtmb3IodmFyIGw9YVtpXSxjPXRbbF0sdT1vLmxlbmd0aDt1PjEmJm4odFtvW3UtMl1dLHRbb1t1LTFdXSxjKTw9MDspdS09MSxvLnBvcCgpO2ZvcihvLnB1c2gobCksdT1zLmxlbmd0aDt1PjEmJm4odFtzW3UtMl1dLHRbc1t1LTFdXSxjKT49MDspdS09MSxzLnBvcCgpO3MucHVzaChsKX1mb3IodmFyIHI9bmV3IEFycmF5KHMubGVuZ3RoK28ubGVuZ3RoLTIpLGg9MCxpPTAsZj1vLmxlbmd0aDtpPGY7KytpKXJbaCsrXT1vW2ldO2Zvcih2YXIgcD1zLmxlbmd0aC0yO3A+MDstLXApcltoKytdPXNbcF07cmV0dXJuIHJ9O3ZhciBuPXQoXCJyb2J1c3Qtb3JpZW50YXRpb25cIilbM119LHtcInJvYnVzdC1vcmllbnRhdGlvblwiOjQ5NX1dLDQyODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2V8fChlPXQsdD13aW5kb3cpO3ZhciByPTAsaT0wLGE9MCxvPXtzaGlmdDohMSxhbHQ6ITEsY29udHJvbDohMSxtZXRhOiExfSxzPSExO2Z1bmN0aW9uIGwodCl7dmFyIGU9ITE7cmV0dXJuXCJhbHRLZXlcImluIHQmJihlPWV8fHQuYWx0S2V5IT09by5hbHQsby5hbHQ9ISF0LmFsdEtleSksXCJzaGlmdEtleVwiaW4gdCYmKGU9ZXx8dC5zaGlmdEtleSE9PW8uc2hpZnQsby5zaGlmdD0hIXQuc2hpZnRLZXkpLFwiY3RybEtleVwiaW4gdCYmKGU9ZXx8dC5jdHJsS2V5IT09by5jb250cm9sLG8uY29udHJvbD0hIXQuY3RybEtleSksXCJtZXRhS2V5XCJpbiB0JiYoZT1lfHx0Lm1ldGFLZXkhPT1vLm1ldGEsby5tZXRhPSEhdC5tZXRhS2V5KSxlfWZ1bmN0aW9uIGModCxzKXt2YXIgYz1uLngocyksdT1uLnkocyk7XCJidXR0b25zXCJpbiBzJiYodD0wfHMuYnV0dG9ucyksKHQhPT1yfHxjIT09aXx8dSE9PWF8fGwocykpJiYocj0wfHQsaT1jfHwwLGE9dXx8MCxlJiZlKHIsaSxhLG8pKX1mdW5jdGlvbiB1KHQpe2MoMCx0KX1mdW5jdGlvbiBoKCl7KHJ8fGl8fGF8fG8uc2hpZnR8fG8uYWx0fHxvLm1ldGF8fG8uY29udHJvbCkmJihpPWE9MCxyPTAsby5zaGlmdD1vLmFsdD1vLmNvbnRyb2w9by5tZXRhPSExLGUmJmUoMCwwLDAsbykpfWZ1bmN0aW9uIGYodCl7bCh0KSYmZSYmZShyLGksYSxvKX1mdW5jdGlvbiBwKHQpezA9PT1uLmJ1dHRvbnModCk/YygwLHQpOmMocix0KX1mdW5jdGlvbiBkKHQpe2MocnxuLmJ1dHRvbnModCksdCl9ZnVuY3Rpb24gZyh0KXtjKHImfm4uYnV0dG9ucyh0KSx0KX1mdW5jdGlvbiB2KCl7c3x8KHM9ITAsdC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIscCksdC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsZCksdC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLGcpLHQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIix1KSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsdSksdC5hZGRFdmVudExpc3RlbmVyKFwibW91c2VvdXRcIix1KSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIix1KSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsaCksdC5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIixmKSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsZiksdC5hZGRFdmVudExpc3RlbmVyKFwia2V5cHJlc3NcIixmKSx0IT09d2luZG93JiYod2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsaCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLGYpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGYpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5cHJlc3NcIixmKSkpfXYoKTt2YXIgbT17ZWxlbWVudDp0fTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobSx7ZW5hYmxlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHN9LHNldDpmdW5jdGlvbihlKXtlP3YoKTpzJiYocz0hMSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixwKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIixkKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsZyksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIix1KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW91dFwiLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3ZlclwiLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJsdXJcIixoKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLGYpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixmKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlwcmVzc1wiLGYpLHQhPT13aW5kb3cmJih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJsdXJcIixoKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsZiksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsZiksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlwcmVzc1wiLGYpKSl9LGVudW1lcmFibGU6ITB9LGJ1dHRvbnM6e2dldDpmdW5jdGlvbigpe3JldHVybiByfSxlbnVtZXJhYmxlOiEwfSx4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sZW51bWVyYWJsZTohMH0seTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGF9LGVudW1lcmFibGU6ITB9LG1vZHM6e2dldDpmdW5jdGlvbigpe3JldHVybiBvfSxlbnVtZXJhYmxlOiEwfX0pLG19O3ZhciBuPXQoXCJtb3VzZS1ldmVudFwiKX0se1wibW91c2UtZXZlbnRcIjo0MzB9XSw0Mjk6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj17bGVmdDowLHRvcDowfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2U9ZXx8dC5jdXJyZW50VGFyZ2V0fHx0LnNyY0VsZW1lbnQsQXJyYXkuaXNBcnJheShyKXx8KHI9WzAsMF0pO3ZhciBpPXQuY2xpZW50WHx8MCxhPXQuY2xpZW50WXx8MCxvPShzPWUscz09PXdpbmRvd3x8cz09PWRvY3VtZW50fHxzPT09ZG9jdW1lbnQuYm9keT9uOnMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO3ZhciBzO3JldHVybiByWzBdPWktby5sZWZ0LHJbMV09YS1vLnRvcCxyfX0se31dLDQzMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQudGFyZ2V0fHx0LnNyY0VsZW1lbnR8fHdpbmRvd31yLmJ1dHRvbnM9ZnVuY3Rpb24odCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHQpe2lmKFwiYnV0dG9uc1wiaW4gdClyZXR1cm4gdC5idXR0b25zO2lmKFwid2hpY2hcImluIHQpe2lmKDI9PT0oZT10LndoaWNoKSlyZXR1cm4gNDtpZigzPT09ZSlyZXR1cm4gMjtpZihlPjApcmV0dXJuIDE8PGUtMX1lbHNlIGlmKFwiYnV0dG9uXCJpbiB0KXt2YXIgZTtpZigxPT09KGU9dC5idXR0b24pKXJldHVybiA0O2lmKDI9PT1lKXJldHVybiAyO2lmKGU+PTApcmV0dXJuIDE8PGV9fXJldHVybiAwfSxyLmVsZW1lbnQ9bixyLng9ZnVuY3Rpb24odCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHQpe2lmKFwib2Zmc2V0WFwiaW4gdClyZXR1cm4gdC5vZmZzZXRYO3ZhciBlPW4odCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIHQuY2xpZW50WC1lLmxlZnR9cmV0dXJuIDB9LHIueT1mdW5jdGlvbih0KXtpZihcIm9iamVjdFwiPT10eXBlb2YgdCl7aWYoXCJvZmZzZXRZXCJpbiB0KXJldHVybiB0Lm9mZnNldFk7dmFyIGU9bih0KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gdC5jbGllbnRZLWUudG9wfXJldHVybiAwfX0se31dLDQzMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJ0by1weFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe1wiZnVuY3Rpb25cIj09dHlwZW9mIHQmJihyPSEhZSxlPXQsdD13aW5kb3cpO3ZhciBpPW4oXCJleFwiLHQpLGE9ZnVuY3Rpb24odCl7ciYmdC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBuPXQuZGVsdGFYfHwwLGE9dC5kZWx0YVl8fDAsbz10LmRlbHRhWnx8MCxzPXQuZGVsdGFNb2RlLGw9MTtzd2l0Y2gocyl7Y2FzZSAxOmw9aTticmVhaztjYXNlIDI6bD13aW5kb3cuaW5uZXJIZWlnaHR9aWYoYSo9bCxvKj1sLChuKj1sKXx8YXx8bylyZXR1cm4gZShuLGEsbyx0KX07cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsYSksYX19LHtcInRvLXB4XCI6NTI0fV0sNDMyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInR5cGVkYXJyYXktcG9vbFwiKTtmdW5jdGlvbiBpKHQpe3JldHVyblwiYVwiK3R9ZnVuY3Rpb24gYSh0KXtyZXR1cm5cImRcIit0fWZ1bmN0aW9uIG8odCxlKXtyZXR1cm5cImNcIit0K1wiX1wiK2V9ZnVuY3Rpb24gcyh0KXtyZXR1cm5cInNcIit0fWZ1bmN0aW9uIGwodCxlKXtyZXR1cm5cInRcIit0K1wiX1wiK2V9ZnVuY3Rpb24gYyh0KXtyZXR1cm5cIm9cIit0fWZ1bmN0aW9uIHUodCl7cmV0dXJuXCJ4XCIrdH1mdW5jdGlvbiBoKHQpe3JldHVyblwicFwiK3R9ZnVuY3Rpb24gZih0LGUpe3JldHVyblwiZFwiK3QrXCJfXCIrZX1mdW5jdGlvbiBwKHQpe3JldHVyblwiaVwiK3R9ZnVuY3Rpb24gZCh0LGUpe3JldHVyblwidVwiK3QrXCJfXCIrZX1mdW5jdGlvbiBnKHQpe3JldHVyblwiYlwiK3R9ZnVuY3Rpb24gdih0KXtyZXR1cm5cInlcIit0fWZ1bmN0aW9uIG0odCl7cmV0dXJuXCJlXCIrdH1mdW5jdGlvbiB5KHQpe3JldHVyblwidlwiK3R9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7dGhyb3cgbmV3IEVycm9yKFwibmRhcnJheS1leHRyYWN0LWNvbnRvdXI6IFwiK3QpfVwib2JqZWN0XCIhPXR5cGVvZiB0JiZlKFwiTXVzdCBzcGVjaWZ5IGFyZ3VtZW50c1wiKTt2YXIgcj10Lm9yZGVyO0FycmF5LmlzQXJyYXkocil8fGUoXCJNdXN0IHNwZWNpZnkgb3JkZXJcIik7dmFyIE09dC5hcnJheUFyZ3VtZW50c3x8MTtNPDEmJmUoXCJNdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGFycmF5IGFyZ3VtZW50XCIpO3ZhciBTPXQuc2NhbGFyQXJndW1lbnRzfHwwO1M8MCYmZShcIlNjYWxhciBhcmcgY291bnQgbXVzdCBiZSA+IDBcIik7XCJmdW5jdGlvblwiIT10eXBlb2YgdC52ZXJ0ZXgmJmUoXCJNdXN0IHNwZWNpZnkgdmVydGV4IGNyZWF0aW9uIGZ1bmN0aW9uXCIpO1wiZnVuY3Rpb25cIiE9dHlwZW9mIHQuY2VsbCYmZShcIk11c3Qgc3BlY2lmeSBjZWxsIGNyZWF0aW9uIGZ1bmN0aW9uXCIpO1wiZnVuY3Rpb25cIiE9dHlwZW9mIHQucGhhc2UmJmUoXCJNdXN0IHNwZWNpZnkgcGhhc2UgZnVuY3Rpb25cIik7Zm9yKHZhciBFPXQuZ2V0dGVyc3x8W10sQz1uZXcgQXJyYXkoTSksTD0wO0w8TTsrK0wpRS5pbmRleE9mKEwpPj0wP0NbTF09ITA6Q1tMXT0hMTtyZXR1cm4gZnVuY3Rpb24odCxlLHIsTSxTLEUpe3ZhciBDPUUubGVuZ3RoLEw9Uy5sZW5ndGg7aWYoTDwyKXRocm93IG5ldyBFcnJvcihcIm5kYXJyYXktZXh0cmFjdC1jb250b3VyOiBEaW1lbnNpb24gbXVzdCBiZSBhdCBsZWFzdCAyXCIpO2Zvcih2YXIgej1cImV4dHJhY3RDb250b3VyXCIrUy5qb2luKFwiX1wiKSxPPVtdLEk9W10sRD1bXSxQPTA7UDxDOysrUClELnB1c2goaShQKSk7Zm9yKHZhciBQPTA7UDxNOysrUClELnB1c2godShQKSk7Zm9yKHZhciBQPTA7UDxMOysrUClJLnB1c2gocyhQKStcIj1cIitpKDApK1wiLnNoYXBlW1wiK1ArXCJdfDBcIik7Zm9yKHZhciBQPTA7UDxDOysrUCl7SS5wdXNoKGEoUCkrXCI9XCIraShQKStcIi5kYXRhXCIsYyhQKStcIj1cIitpKFApK1wiLm9mZnNldHwwXCIpO2Zvcih2YXIgUj0wO1I8TDsrK1IpSS5wdXNoKGwoUCxSKStcIj1cIitpKFApK1wiLnN0cmlkZVtcIitSK1wiXXwwXCIpfWZvcih2YXIgUD0wO1A8QzsrK1Ape0kucHVzaChoKFApK1wiPVwiK2MoUCkpLEkucHVzaChvKFAsMCkpO2Zvcih2YXIgUj0xO1I8MTw8TDsrK1Ipe2Zvcih2YXIgRj1bXSxCPTA7QjxMOysrQilSJjE8PEImJkYucHVzaChcIi1cIitsKFAsQikpO0kucHVzaChmKFAsUikrXCI9KFwiK0Yuam9pbihcIlwiKStcIil8MFwiKSxJLnB1c2gobyhQLFIpK1wiPTBcIil9fWZvcih2YXIgUD0wO1A8QzsrK1ApZm9yKHZhciBSPTA7UjxMOysrUil7dmFyIE49W2woUCxTW1JdKV07Uj4wJiZOLnB1c2gobChQLFNbUi0xXSkrXCIqXCIrcyhTW1ItMV0pKSxJLnB1c2goZChQLFNbUl0pK1wiPShcIitOLmpvaW4oXCItXCIpK1wiKXwwXCIpfWZvcih2YXIgUD0wO1A8TDsrK1ApSS5wdXNoKHAoUCkrXCI9MFwiKTtJLnB1c2goXytcIj0wXCIpO2Zvcih2YXIgaj1bXCIyXCJdLFA9TC0yO1A+PTA7LS1QKWoucHVzaChzKFNbUF0pKTtJLnB1c2godytcIj0oXCIrai5qb2luKFwiKlwiKStcIil8MFwiLGIrXCI9bWFsbG9jVWludDMyKFwiK3crXCIpXCIseCtcIj1tYWxsb2NVaW50MzIoXCIrdytcIilcIixrK1wiPTBcIiksSS5wdXNoKGcoMCkrXCI9MFwiKTtmb3IodmFyIFI9MTtSPDE8PEw7KytSKXtmb3IodmFyIFY9W10sVT1bXSxCPTA7QjxMOysrQilSJjE8PEImJigwPT09VS5sZW5ndGg/Vi5wdXNoKFwiMVwiKTpWLnVuc2hpZnQoVS5qb2luKFwiKlwiKSkpLFUucHVzaChzKFNbQl0pKTt2YXIgcT1cIlwiO1ZbMF0uaW5kZXhPZihzKFNbTC0yXSkpPDAmJihxPVwiLVwiKTt2YXIgSD1UKEwsUixTKTtJLnB1c2gobShIKStcIj0oLVwiK1Yuam9pbihcIi1cIikrXCIpfDBcIix2KEgpK1wiPShcIitxK1Yuam9pbihcIi1cIikrXCIpfDBcIixnKEgpK1wiPTBcIil9ZnVuY3Rpb24gRyh0LGUpe08ucHVzaChcImZvcihcIixwKFNbdF0pLFwiPVwiLGUsXCI7XCIscChTW3RdKSxcIjxcIixzKFNbdF0pLFwiO1wiLFwiKytcIixwKFNbdF0pLFwiKXtcIil9ZnVuY3Rpb24gWSh0KXtmb3IodmFyIGU9MDtlPEM7KytlKU8ucHVzaChoKGUpLFwiKz1cIixkKGUsU1t0XSksXCI7XCIpO08ucHVzaChcIn1cIil9ZnVuY3Rpb24gVygpe2Zvcih2YXIgdD0xO3Q8MTw8TDsrK3QpTy5wdXNoKEEsXCI9XCIsbSh0KSxcIjtcIixtKHQpLFwiPVwiLHYodCksXCI7XCIsdih0KSxcIj1cIixBLFwiO1wiKX1JLnB1c2goeSgwKStcIj0wXCIsQStcIj0wXCIpLGZ1bmN0aW9uIHQoZSxyKXtpZihlPDApcmV0dXJuIHZvaWQgZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxDOysrZSlFW2VdP08ucHVzaChvKGUsMCksXCI9XCIsYShlKSxcIi5nZXQoXCIsaChlKSxcIik7XCIpOk8ucHVzaChvKGUsMCksXCI9XCIsYShlKSxcIltcIixoKGUpLFwiXTtcIik7Zm9yKHZhciByPVtdLGU9MDtlPEM7KytlKXIucHVzaChvKGUsMCkpO2Zvcih2YXIgZT0wO2U8TTsrK2Upci5wdXNoKHUoZSkpO08ucHVzaChnKDApLFwiPVwiLGIsXCJbXCIsayxcIl09cGhhc2UoXCIsci5qb2luKCksXCIpO1wiKTtmb3IodmFyIG49MTtuPDE8PEw7KytuKU8ucHVzaChnKG4pLFwiPVwiLGIsXCJbXCIsayxcIitcIixtKG4pLFwiXTtcIik7Zm9yKHZhciBpPVtdLG49MTtuPDE8PEw7KytuKWkucHVzaChcIihcIitnKDApK1wiIT09XCIrZyhuKStcIilcIik7Ty5wdXNoKFwiaWYoXCIsaS5qb2luKFwifHxcIiksXCIpe1wiKTtmb3IodmFyIHM9W10sZT0wO2U8TDsrK2Upcy5wdXNoKHAoZSkpO2Zvcih2YXIgZT0wO2U8QzsrK2Upe3MucHVzaChvKGUsMCkpO2Zvcih2YXIgbj0xO248MTw8TDsrK24pRVtlXT9PLnB1c2gobyhlLG4pLFwiPVwiLGEoZSksXCIuZ2V0KFwiLGgoZSksXCIrXCIsZihlLG4pLFwiKTtcIik6Ty5wdXNoKG8oZSxuKSxcIj1cIixhKGUpLFwiW1wiLGgoZSksXCIrXCIsZihlLG4pLFwiXTtcIikscy5wdXNoKG8oZSxuKSl9Zm9yKHZhciBlPTA7ZTwxPDxMOysrZSlzLnB1c2goZyhlKSk7Zm9yKHZhciBlPTA7ZTxNOysrZSlzLnB1c2godShlKSk7Ty5wdXNoKFwidmVydGV4KFwiLHMuam9pbigpLFwiKTtcIix5KDApLFwiPVwiLHgsXCJbXCIsayxcIl09XCIsXyxcIisrO1wiKTtmb3IodmFyIGw9KDE8PEwpLTEsYz1nKGwpLG49MDtuPEw7KytuKWlmKDA9PSh0Jn4oMTw8bikpKXtmb3IodmFyIGQ9bF4xPDxuLHY9ZyhkKSx3PVtdLEE9ZDtBPjA7QT1BLTEmZCl3LnB1c2goeCtcIltcIitrK1wiK1wiK20oQSkrXCJdXCIpO3cucHVzaCh5KDApKTtmb3IodmFyIEE9MDtBPEM7KytBKTEmbj93LnB1c2gobyhBLGwpLG8oQSxkKSk6dy5wdXNoKG8oQSxkKSxvKEEsbCkpOzEmbj93LnB1c2goYyx2KTp3LnB1c2godixjKTtmb3IodmFyIEE9MDtBPE07KytBKXcucHVzaCh1KEEpKTtPLnB1c2goXCJpZihcIixjLFwiIT09XCIsdixcIil7XCIsXCJmYWNlKFwiLHcuam9pbigpLFwiKX1cIil9Ty5wdXNoKFwifVwiLGssXCIrPTE7XCIpfShyKTshZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQtMTtlPj0wOy0tZSlHKGUsMCk7Zm9yKHZhciByPVtdLGU9MDtlPEM7KytlKUVbZV0/ci5wdXNoKGEoZSkrXCIuZ2V0KFwiK2goZSkrXCIpXCIpOnIucHVzaChhKGUpK1wiW1wiK2goZSkrXCJdXCIpO2Zvcih2YXIgZT0wO2U8TTsrK2Upci5wdXNoKHUoZSkpO08ucHVzaChiLFwiW1wiLGssXCIrK109cGhhc2UoXCIsci5qb2luKCksXCIpO1wiKTtmb3IodmFyIGU9MDtlPHQ7KytlKVkoZSk7Zm9yKHZhciBuPTA7bjxDOysrbilPLnB1c2goaChuKSxcIis9XCIsZChuLFNbdF0pLFwiO1wiKX0oZSk7Ty5wdXNoKFwiaWYoXCIscyhTW2VdKSxcIj4wKXtcIixwKFNbZV0pLFwiPTE7XCIpO3QoZS0xLHJ8MTw8U1tlXSk7Zm9yKHZhciBuPTA7bjxDOysrbilPLnB1c2goaChuKSxcIis9XCIsZChuLFNbZV0pLFwiO1wiKTtlPT09TC0xJiYoTy5wdXNoKGssXCI9MDtcIiksVygpKTtHKGUsMik7dChlLTEscik7ZT09PUwtMSYmKE8ucHVzaChcImlmKFwiLHAoU1tMLTFdKSxcIiYxKXtcIixrLFwiPTA7fVwiKSxXKCkpO1koZSk7Ty5wdXNoKFwifVwiKX0oTC0xLDApLE8ucHVzaChcImZyZWVVaW50MzIoXCIseCxcIik7ZnJlZVVpbnQzMihcIixiLFwiKTtcIik7dmFyIFg9W1wiJ3VzZSBzdHJpY3QnO1wiLFwiZnVuY3Rpb24gXCIseixcIihcIixELmpvaW4oKSxcIil7XCIsXCJ2YXIgXCIsSS5qb2luKCksXCI7XCIsTy5qb2luKFwiXCIpLFwifVwiLFwicmV0dXJuIFwiLHpdLmpvaW4oXCJcIik7cmV0dXJuIG5ldyBGdW5jdGlvbihcInZlcnRleFwiLFwiZmFjZVwiLFwicGhhc2VcIixcIm1hbGxvY1VpbnQzMlwiLFwiZnJlZVVpbnQzMlwiLFgpKHQsZSxyLG4ubWFsbG9jVWludDMyLG4uZnJlZVVpbnQzMil9KHQudmVydGV4LHQuY2VsbCx0LnBoYXNlLFMscixDKX07dmFyIHg9XCJWXCIsYj1cIlBcIixfPVwiTlwiLHc9XCJRXCIsaz1cIlhcIixBPVwiVFwiO2Z1bmN0aW9uIFQodCxlLHIpe2Zvcih2YXIgbj0wLGk9MDtpPHQ7KytpKWUmMTw8aSYmKG58PTE8PHJbaV0pO3JldHVybiBufX0se1widHlwZWRhcnJheS1wb29sXCI6NTMwfV0sNDMzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImN3aXNlL2xpYi93cmFwcGVyXCIpKHthcmdzOltcImluZGV4XCIsXCJhcnJheVwiLFwic2NhbGFyXCJdLHByZTp7Ym9keTpcInt9XCIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6XCJ7X2lubGluZV8xX2FyZzFfPV9pbmxpbmVfMV9hcmcyXy5hcHBseSh2b2lkIDAsX2lubGluZV8xX2FyZzBfKX1cIixhcmdzOlt7bmFtZTpcIl9pbmxpbmVfMV9hcmcwX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzFfYXJnMV9cIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xX2FyZzJfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5Olwie31cIixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZGVidWc6ITEsZnVuY05hbWU6XCJjd2lzZVwiLGJsb2NrU2l6ZTo2NH0pO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKHQsZSksdH19LHtcImN3aXNlL2xpYi93cmFwcGVyXCI6MTQwfV0sNDM0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZihBcnJheS5pc0FycmF5KHIpKXtpZihyLmxlbmd0aCE9PWUuZGltZW5zaW9uKXRocm93IG5ldyBFcnJvcihcIm5kYXJyYXktZ3JhZGllbnQ6IGludmFsaWQgYm91bmRhcnkgY29uZGl0aW9uc1wiKX1lbHNlIHI9bihlLmRpbWVuc2lvbixcInN0cmluZ1wiPT10eXBlb2Ygcj9yOlwiY2xhbXBcIik7aWYodC5kaW1lbnNpb24hPT1lLmRpbWVuc2lvbisxKXRocm93IG5ldyBFcnJvcihcIm5kYXJyYXktZ3JhZGllbnQ6IG91dHB1dCBkaW1lbnNpb24gbXVzdCBiZSArMSBpbnB1dCBkaW1lbnNpb25cIik7aWYodC5zaGFwZVtlLmRpbWVuc2lvbl0hPT1lLmRpbWVuc2lvbil0aHJvdyBuZXcgRXJyb3IoXCJuZGFycmF5LWdyYWRpZW50OiBvdXRwdXQgc2hhcGUgbXVzdCBtYXRjaCBpbnB1dCBzaGFwZVwiKTtmb3IodmFyIGk9MDtpPGUuZGltZW5zaW9uOysraSlpZih0LnNoYXBlW2ldIT09ZS5zaGFwZVtpXSl0aHJvdyBuZXcgRXJyb3IoXCJuZGFycmF5LWdyYWRpZW50OiBzaGFwZSBtaXNtYXRjaFwiKTtpZigwPT09ZS5zaXplKXJldHVybiB0O2lmKGUuZGltZW5zaW9uPD0wKXJldHVybiB0LnNldCgwKSx0O3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10LmpvaW4oKTtpZihtPW9bZV0pcmV0dXJuIG07dmFyIHI9dC5sZW5ndGgsbj1bXCJmdW5jdGlvbiBncmFkaWVudChkc3Qsc3JjKXt2YXIgcz1zcmMuc2hhcGUuc2xpY2UoKTtcIl07ZnVuY3Rpb24gaShlKXtmb3IodmFyIGk9ci1lLmxlbmd0aCxhPVtdLG89W10scz1bXSxsPTA7bDxyOysrbCllLmluZGV4T2YobCsxKT49MD9zLnB1c2goXCIwXCIpOmUuaW5kZXhPZigtKGwrMSkpPj0wP3MucHVzaChcInNbXCIrbCtcIl0tMVwiKToocy5wdXNoKFwiLTFcIiksYS5wdXNoKFwiMVwiKSxvLnB1c2goXCJzW1wiK2wrXCJdLTJcIikpO3ZhciBjPVwiLmxvKFwiK2Euam9pbigpK1wiKS5oaShcIitvLmpvaW4oKStcIilcIjtpZigwPT09YS5sZW5ndGgmJihjPVwiXCIpLGk+MCl7bi5wdXNoKFwiaWYoMVwiKTtmb3IodmFyIGw9MDtsPHI7KytsKWUuaW5kZXhPZihsKzEpPj0wfHxlLmluZGV4T2YoLShsKzEpKT49MHx8bi5wdXNoKFwiJiZzW1wiLGwsXCJdPjJcIik7bi5wdXNoKFwiKXtncmFkXCIsaSxcIihzcmMucGljayhcIixzLmpvaW4oKSxcIilcIixjKTtmb3IodmFyIGw9MDtsPHI7KytsKWUuaW5kZXhPZihsKzEpPj0wfHxlLmluZGV4T2YoLShsKzEpKT49MHx8bi5wdXNoKFwiLGRzdC5waWNrKFwiLHMuam9pbigpLFwiLFwiLGwsXCIpXCIsYyk7bi5wdXNoKFwiKTtcIil9Zm9yKHZhciBsPTA7bDxlLmxlbmd0aDsrK2wpe3ZhciB1PU1hdGguYWJzKGVbbF0pLTEsaD1cImRzdC5waWNrKFwiK3Muam9pbigpK1wiLFwiK3UrXCIpXCIrYztzd2l0Y2godFt1XSl7Y2FzZVwiY2xhbXBcIjp2YXIgZj1zLnNsaWNlKCkscD1zLnNsaWNlKCk7ZVtsXTwwP2ZbdV09XCJzW1wiK3UrXCJdLTJcIjpwW3VdPVwiMVwiLDA9PT1pP24ucHVzaChcImlmKHNbXCIsdSxcIl0+MSl7ZHN0LnNldChcIixzLmpvaW4oKSxcIixcIix1LFwiLDAuNSooc3JjLmdldChcIixmLmpvaW4oKSxcIiktc3JjLmdldChcIixwLmpvaW4oKSxcIikpKX1lbHNle2RzdC5zZXQoXCIscy5qb2luKCksXCIsXCIsdSxcIiwwKX07XCIpOm4ucHVzaChcImlmKHNbXCIsdSxcIl0+MSl7ZGlmZihcIixoLFwiLHNyYy5waWNrKFwiLGYuam9pbigpLFwiKVwiLGMsXCIsc3JjLnBpY2soXCIscC5qb2luKCksXCIpXCIsYyxcIik7fWVsc2V7emVybyhcIixoLFwiKTt9O1wiKTticmVhaztjYXNlXCJtaXJyb3JcIjowPT09aT9uLnB1c2goXCJkc3Quc2V0KFwiLHMuam9pbigpLFwiLFwiLHUsXCIsMCk7XCIpOm4ucHVzaChcInplcm8oXCIsaCxcIik7XCIpO2JyZWFrO2Nhc2VcIndyYXBcIjp2YXIgZD1zLnNsaWNlKCksZz1zLnNsaWNlKCk7ZVtsXTwwPyhkW3VdPVwic1tcIit1K1wiXS0yXCIsZ1t1XT1cIjBcIik6KGRbdV09XCJzW1wiK3UrXCJdLTFcIixnW3VdPVwiMVwiKSwwPT09aT9uLnB1c2goXCJpZihzW1wiLHUsXCJdPjIpe2RzdC5zZXQoXCIscy5qb2luKCksXCIsXCIsdSxcIiwwLjUqKHNyYy5nZXQoXCIsZC5qb2luKCksXCIpLXNyYy5nZXQoXCIsZy5qb2luKCksXCIpKSl9ZWxzZXtkc3Quc2V0KFwiLHMuam9pbigpLFwiLFwiLHUsXCIsMCl9O1wiKTpuLnB1c2goXCJpZihzW1wiLHUsXCJdPjIpe2RpZmYoXCIsaCxcIixzcmMucGljayhcIixkLmpvaW4oKSxcIilcIixjLFwiLHNyYy5waWNrKFwiLGcuam9pbigpLFwiKVwiLGMsXCIpO31lbHNle3plcm8oXCIsaCxcIik7fTtcIik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJuZGFycmF5LWdyYWRpZW50OiBJbnZhbGlkIGJvdW5kYXJ5IGNvbmRpdGlvblwiKX19aT4wJiZuLnB1c2goXCJ9O1wiKX1mb3IodmFyIHM9MDtzPDE8PHI7KytzKXtmb3IodmFyIGg9W10sZj0wO2Y8cjsrK2YpcyYxPDxmJiZoLnB1c2goZisxKTtmb3IodmFyIHA9MDtwPDE8PGgubGVuZ3RoOysrcCl7Zm9yKHZhciBkPWguc2xpY2UoKSxmPTA7ZjxoLmxlbmd0aDsrK2YpcCYxPDxmJiYoZFtmXT0tZFtmXSk7aShkKX19bi5wdXNoKFwicmV0dXJuIGRzdDt9O3JldHVybiBncmFkaWVudFwiKTtmb3IodmFyIGc9W1wiZGlmZlwiLFwiemVyb1wiXSx2PVtsLGNdLHM9MTtzPD1yOysrcylnLnB1c2goXCJncmFkXCIrcyksdi5wdXNoKHUocykpO2cucHVzaChuLmpvaW4oXCJcIikpO3ZhciBtPUZ1bmN0aW9uLmFwcGx5KHZvaWQgMCxnKS5hcHBseSh2b2lkIDAsdik7cmV0dXJuIGFbZV09bSxtfShyKSh0LGUpfTt2YXIgbj10KFwiZHVwXCIpLGk9dChcImN3aXNlLWNvbXBpbGVyXCIpLGE9e30sbz17fSxzPXtib2R5OlwiXCIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGw9aSh7YXJnczpbXCJhcnJheVwiLFwiYXJyYXlcIixcImFycmF5XCJdLHByZTpzLHBvc3Q6cyxib2R5OnthcmdzOlt7bmFtZTpcIm91dFwiLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX0se25hbWU6XCJsZWZ0XCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcInJpZ2h0XCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sYm9keTpcIm91dD0wLjUqKGxlZnQtcmlnaHQpXCIsdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxmdW5jTmFtZTpcImNkaWZmXCJ9KSxjPWkoe2FyZ3M6W1wiYXJyYXlcIl0scHJlOnMscG9zdDpzLGJvZHk6e2FyZ3M6W3tuYW1lOlwib3V0XCIsbHZhbHVlOiEwLHJ2YWx1ZTohMSxjb3VudDoxfV0sYm9keTpcIm91dD0wXCIsdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxmdW5jTmFtZTpcInplcm9cIn0pO2Z1bmN0aW9uIHUodCl7aWYodCBpbiBhKXJldHVybiBhW3RdO2Zvcih2YXIgZT1bXSxyPTA7cjx0OysrcillLnB1c2goXCJvdXRcIixyLFwicz0wLjUqKGlucFwiLHIsXCJsLWlucFwiLHIsXCJyKTtcIik7dmFyIG89W1wiYXJyYXlcIl0sbD1bXCJqdW5rXCJdO2ZvcihyPTA7cjx0Oysrcil7by5wdXNoKFwiYXJyYXlcIiksbC5wdXNoKFwib3V0XCIrcitcInNcIik7dmFyIGM9bih0KTtjW3JdPS0xLG8ucHVzaCh7YXJyYXk6MCxvZmZzZXQ6Yy5zbGljZSgpfSksY1tyXT0xLG8ucHVzaCh7YXJyYXk6MCxvZmZzZXQ6Yy5zbGljZSgpfSksbC5wdXNoKFwiaW5wXCIrcitcImxcIixcImlucFwiK3IrXCJyXCIpfXJldHVybiBhW3RdPWkoe2FyZ3M6byxwcmU6cyxwb3N0OnMsYm9keTp7Ym9keTplLmpvaW4oXCJcIiksYXJnczpsLm1hcChmdW5jdGlvbih0KXtyZXR1cm57bmFtZTp0LGx2YWx1ZTowPT09dC5pbmRleE9mKFwib3V0XCIpLHJ2YWx1ZTowPT09dC5pbmRleE9mKFwiaW5wXCIpLGNvdW50OlwianVua1wiIT09dHwwfX0pLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZnVuY05hbWU6XCJmZFRlbXBsYXRlXCIrdH0pfX0se1wiY3dpc2UtY29tcGlsZXJcIjoxMzcsZHVwOjE2Mn1dLDQzNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJuZGFycmF5LXdhcnBcIiksaT10KFwiZ2wtbWF0cml4LWludmVydFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPWUuZGltZW5zaW9uLG89aShbXSxyKTtyZXR1cm4gbih0LGUsZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPGE7KytyKXt0W3JdPW9bKGErMSkqYStyXTtmb3IodmFyIG49MDtuPGE7KytuKXRbcl0rPW9bKGErMSkqbityXSplW25dfXZhciBpPW9bKGErMSkqKGErMSktMV07Zm9yKG49MDtuPGE7KytuKWkrPW9bKGErMSkqbithXSplW25dO3ZhciBzPTEvaTtmb3Iocj0wO3I8YTsrK3IpdFtyXSo9cztyZXR1cm4gdH0pLHR9fSx7XCJnbC1tYXRyaXgtaW52ZXJ0XCI6Mjc0LFwibmRhcnJheS13YXJwXCI6NDQyfV0sNDM2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPU1hdGguZmxvb3IoZSksbj1lLXIsaT0wPD1yJiZyPHQuc2hhcGVbMF0sYT0wPD1yKzEmJnIrMTx0LnNoYXBlWzBdO3JldHVybigxLW4pKihpPyt0LmdldChyKTowKStuKihhPyt0LmdldChyKzEpOjApfWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuPU1hdGguZmxvb3IoZSksaT1lLW4sYT0wPD1uJiZuPHQuc2hhcGVbMF0sbz0wPD1uKzEmJm4rMTx0LnNoYXBlWzBdLHM9TWF0aC5mbG9vcihyKSxsPXItcyxjPTA8PXMmJnM8dC5zaGFwZVsxXSx1PTA8PXMrMSYmcysxPHQuc2hhcGVbMV0saD1hJiZjP3QuZ2V0KG4scyk6MCxmPWEmJnU/dC5nZXQobixzKzEpOjA7cmV0dXJuKDEtbCkqKCgxLWkpKmgraSoobyYmYz90LmdldChuKzEscyk6MCkpK2wqKCgxLWkpKmYraSoobyYmdT90LmdldChuKzEscysxKTowKSl9ZnVuY3Rpb24gYSh0LGUscixuKXt2YXIgaT1NYXRoLmZsb29yKGUpLGE9ZS1pLG89MDw9aSYmaTx0LnNoYXBlWzBdLHM9MDw9aSsxJiZpKzE8dC5zaGFwZVswXSxsPU1hdGguZmxvb3IociksYz1yLWwsdT0wPD1sJiZsPHQuc2hhcGVbMV0saD0wPD1sKzEmJmwrMTx0LnNoYXBlWzFdLGY9TWF0aC5mbG9vcihuKSxwPW4tZixkPTA8PWYmJmY8dC5zaGFwZVsyXSxnPTA8PWYrMSYmZisxPHQuc2hhcGVbMl0sdj1vJiZ1JiZkP3QuZ2V0KGksbCxmKTowLG09byYmaCYmZD90LmdldChpLGwrMSxmKTowLHk9cyYmdSYmZD90LmdldChpKzEsbCxmKTowLHg9cyYmaCYmZD90LmdldChpKzEsbCsxLGYpOjAsYj1vJiZ1JiZnP3QuZ2V0KGksbCxmKzEpOjAsXz1vJiZoJiZnP3QuZ2V0KGksbCsxLGYrMSk6MDtyZXR1cm4oMS1wKSooKDEtYykqKCgxLWEpKnYrYSp5KStjKigoMS1hKSptK2EqeCkpK3AqKCgxLWMpKigoMS1hKSpiK2EqKHMmJnUmJmc/dC5nZXQoaSsxLGwsZisxKTowKSkrYyooKDEtYSkqXythKihzJiZoJiZnP3QuZ2V0KGkrMSxsKzEsZisxKTowKSkpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtzd2l0Y2godC5zaGFwZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gMDtjYXNlIDE6cmV0dXJuIG4odCxlKTtjYXNlIDI6cmV0dXJuIGkodCxlLHIpO2Nhc2UgMzpyZXR1cm4gYSh0LGUscixvKTtkZWZhdWx0OnJldHVybiBmdW5jdGlvbih0KXt2YXIgZSxyLG49MHx0LnNoYXBlLmxlbmd0aCxpPW5ldyBBcnJheShuKSxhPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKSxzPW5ldyBBcnJheShuKTtmb3IoZT0wO2U8bjsrK2Upcj0rYXJndW1lbnRzW2UrMV0saVtlXT1NYXRoLmZsb29yKHIpLGFbZV09ci1pW2VdLG9bZV09MDw9aVtlXSYmaVtlXTx0LnNoYXBlW2VdLHNbZV09MDw9aVtlXSsxJiZpW2VdKzE8dC5zaGFwZVtlXTt2YXIgbCxjLHUsaD0wO3Q6Zm9yKGU9MDtlPDE8PG47KytlKXtmb3IoYz0xLHU9dC5vZmZzZXQsbD0wO2w8bjsrK2wpaWYoZSYxPDxsKXtpZighc1tsXSljb250aW51ZSB0O2MqPWFbbF0sdSs9dC5zdHJpZGVbbF0qKGlbbF0rMSl9ZWxzZXtpZighb1tsXSljb250aW51ZSB0O2MqPTEtYVtsXSx1Kz10LnN0cmlkZVtsXSppW2xdfWgrPWMqdC5kYXRhW3VdfXJldHVybiBofS5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX19LGUuZXhwb3J0cy5kMT1uLGUuZXhwb3J0cy5kMj1pLGUuZXhwb3J0cy5kMz1hfSx7fV0sNDM3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImN3aXNlLWNvbXBpbGVyXCIpLGk9e2JvZHk6XCJcIixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX07ZnVuY3Rpb24gYSh0KXtpZighdClyZXR1cm4gaTtmb3IodmFyIGU9MDtlPHQuYXJncy5sZW5ndGg7KytlKXt2YXIgcj10LmFyZ3NbZV07dC5hcmdzW2VdPTA9PT1lP3tuYW1lOnIsbHZhbHVlOiEwLHJ2YWx1ZTohIXQucnZhbHVlLGNvdW50OnQuY291bnR8fDF9OntuYW1lOnIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfX1yZXR1cm4gdC50aGlzVmFyc3x8KHQudGhpc1ZhcnM9W10pLHQubG9jYWxWYXJzfHwodC5sb2NhbFZhcnM9W10pLHR9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9W10scj0wO3I8dC5hcmdzLmxlbmd0aDsrK3IpZS5wdXNoKFwiYVwiK3IpO3JldHVybiBuZXcgRnVuY3Rpb24oXCJQXCIsW1wicmV0dXJuIGZ1bmN0aW9uIFwiLHQuZnVuY05hbWUsXCJfbmRhcnJheW9wcyhcIixlLmpvaW4oXCIsXCIpLFwiKSB7UChcIixlLmpvaW4oXCIsXCIpLFwiKTtyZXR1cm4gYTB9XCJdLmpvaW4oXCJcIikpKGZ1bmN0aW9uKHQpe3JldHVybiBuKHthcmdzOnQuYXJncyxwcmU6YSh0LnByZSksYm9keTphKHQuYm9keSkscG9zdDphKHQucHJvYyksZnVuY05hbWU6dC5mdW5jTmFtZX0pfSh0KSl9dmFyIHM9e2FkZDpcIitcIixzdWI6XCItXCIsbXVsOlwiKlwiLGRpdjpcIi9cIixtb2Q6XCIlXCIsYmFuZDpcIiZcIixib3I6XCJ8XCIsYnhvcjpcIl5cIixsc2hpZnQ6XCI8PFwiLHJzaGlmdDpcIj4+XCIscnJzaGlmdDpcIj4+PlwifTshZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gcyl7dmFyIGU9c1t0XTtyW3RdPW8oe2FyZ3M6W1wiYXJyYXlcIixcImFycmF5XCIsXCJhcnJheVwiXSxib2R5OnthcmdzOltcImFcIixcImJcIixcImNcIl0sYm9keTpcImE9YlwiK2UrXCJjXCJ9LGZ1bmNOYW1lOnR9KSxyW3QrXCJlcVwiXT1vKHthcmdzOltcImFycmF5XCIsXCJhcnJheVwiXSxib2R5OnthcmdzOltcImFcIixcImJcIl0sYm9keTpcImFcIitlK1wiPWJcIn0scnZhbHVlOiEwLGZ1bmNOYW1lOnQrXCJlcVwifSksclt0K1wic1wiXT1vKHthcmdzOltcImFycmF5XCIsXCJhcnJheVwiLFwic2NhbGFyXCJdLGJvZHk6e2FyZ3M6W1wiYVwiLFwiYlwiLFwic1wiXSxib2R5OlwiYT1iXCIrZStcInNcIn0sZnVuY05hbWU6dCtcInNcIn0pLHJbdCtcInNlcVwiXT1vKHthcmdzOltcImFycmF5XCIsXCJzY2FsYXJcIl0sYm9keTp7YXJnczpbXCJhXCIsXCJzXCJdLGJvZHk6XCJhXCIrZStcIj1zXCJ9LHJ2YWx1ZTohMCxmdW5jTmFtZTp0K1wic2VxXCJ9KX19KCk7dmFyIGw9e25vdDpcIiFcIixibm90OlwiflwiLG5lZzpcIi1cIixyZWNpcDpcIjEuMC9cIn07IWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIGwpe3ZhciBlPWxbdF07clt0XT1vKHthcmdzOltcImFycmF5XCIsXCJhcnJheVwiXSxib2R5OnthcmdzOltcImFcIixcImJcIl0sYm9keTpcImE9XCIrZStcImJcIn0sZnVuY05hbWU6dH0pLHJbdCtcImVxXCJdPW8oe2FyZ3M6W1wiYXJyYXlcIl0sYm9keTp7YXJnczpbXCJhXCJdLGJvZHk6XCJhPVwiK2UrXCJhXCJ9LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOnQrXCJlcVwifSl9fSgpO3ZhciBjPXthbmQ6XCImJlwiLG9yOlwifHxcIixlcTpcIj09PVwiLG5lcTpcIiE9PVwiLGx0OlwiPFwiLGd0OlwiPlwiLGxlcTpcIjw9XCIsZ2VxOlwiPj1cIn07IWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIGMpe3ZhciBlPWNbdF07clt0XT1vKHthcmdzOltcImFycmF5XCIsXCJhcnJheVwiLFwiYXJyYXlcIl0sYm9keTp7YXJnczpbXCJhXCIsXCJiXCIsXCJjXCJdLGJvZHk6XCJhPWJcIitlK1wiY1wifSxmdW5jTmFtZTp0fSksclt0K1wic1wiXT1vKHthcmdzOltcImFycmF5XCIsXCJhcnJheVwiLFwic2NhbGFyXCJdLGJvZHk6e2FyZ3M6W1wiYVwiLFwiYlwiLFwic1wiXSxib2R5OlwiYT1iXCIrZStcInNcIn0sZnVuY05hbWU6dCtcInNcIn0pLHJbdCtcImVxXCJdPW8oe2FyZ3M6W1wiYXJyYXlcIixcImFycmF5XCJdLGJvZHk6e2FyZ3M6W1wiYVwiLFwiYlwiXSxib2R5OlwiYT1hXCIrZStcImJcIn0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6dCtcImVxXCJ9KSxyW3QrXCJzZXFcIl09byh7YXJnczpbXCJhcnJheVwiLFwic2NhbGFyXCJdLGJvZHk6e2FyZ3M6W1wiYVwiLFwic1wiXSxib2R5OlwiYT1hXCIrZStcInNcIn0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6dCtcInNlcVwifSl9fSgpO3ZhciB1PVtcImFic1wiLFwiYWNvc1wiLFwiYXNpblwiLFwiYXRhblwiLFwiY2VpbFwiLFwiY29zXCIsXCJleHBcIixcImZsb29yXCIsXCJsb2dcIixcInJvdW5kXCIsXCJzaW5cIixcInNxcnRcIixcInRhblwiXTshZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PHUubGVuZ3RoOysrdCl7dmFyIGU9dVt0XTtyW2VdPW8oe2FyZ3M6W1wiYXJyYXlcIixcImFycmF5XCJdLHByZTp7YXJnczpbXSxib2R5OlwidGhpc19mPU1hdGguXCIrZSx0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LGJvZHk6e2FyZ3M6W1wiYVwiLFwiYlwiXSxib2R5OlwiYT10aGlzX2YoYilcIix0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LGZ1bmNOYW1lOmV9KSxyW2UrXCJlcVwiXT1vKHthcmdzOltcImFycmF5XCJdLHByZTp7YXJnczpbXSxib2R5OlwidGhpc19mPU1hdGguXCIrZSx0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LGJvZHk6e2FyZ3M6W1wiYVwiXSxib2R5OlwiYT10aGlzX2YoYSlcIix0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOmUrXCJlcVwifSl9fSgpO3ZhciBoPVtcIm1heFwiLFwibWluXCIsXCJhdGFuMlwiLFwicG93XCJdOyFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8aC5sZW5ndGg7Kyt0KXt2YXIgZT1oW3RdO3JbZV09byh7YXJnczpbXCJhcnJheVwiLFwiYXJyYXlcIixcImFycmF5XCJdLHByZTp7YXJnczpbXSxib2R5OlwidGhpc19mPU1hdGguXCIrZSx0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LGJvZHk6e2FyZ3M6W1wiYVwiLFwiYlwiLFwiY1wiXSxib2R5OlwiYT10aGlzX2YoYixjKVwiLHRoaXNWYXJzOltcInRoaXNfZlwiXX0sZnVuY05hbWU6ZX0pLHJbZStcInNcIl09byh7YXJnczpbXCJhcnJheVwiLFwiYXJyYXlcIixcInNjYWxhclwiXSxwcmU6e2FyZ3M6W10sYm9keTpcInRoaXNfZj1NYXRoLlwiK2UsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxib2R5OnthcmdzOltcImFcIixcImJcIixcImNcIl0sYm9keTpcImE9dGhpc19mKGIsYylcIix0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LGZ1bmNOYW1lOmUrXCJzXCJ9KSxyW2UrXCJlcVwiXT1vKHthcmdzOltcImFycmF5XCIsXCJhcnJheVwiXSxwcmU6e2FyZ3M6W10sYm9keTpcInRoaXNfZj1NYXRoLlwiK2UsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxib2R5OnthcmdzOltcImFcIixcImJcIl0sYm9keTpcImE9dGhpc19mKGEsYilcIix0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOmUrXCJlcVwifSkscltlK1wic2VxXCJdPW8oe2FyZ3M6W1wiYXJyYXlcIixcInNjYWxhclwiXSxwcmU6e2FyZ3M6W10sYm9keTpcInRoaXNfZj1NYXRoLlwiK2UsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxib2R5OnthcmdzOltcImFcIixcImJcIl0sYm9keTpcImE9dGhpc19mKGEsYilcIix0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOmUrXCJzZXFcIn0pfX0oKTt2YXIgZj1bXCJhdGFuMlwiLFwicG93XCJdOyFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8Zi5sZW5ndGg7Kyt0KXt2YXIgZT1mW3RdO3JbZStcIm9wXCJdPW8oe2FyZ3M6W1wiYXJyYXlcIixcImFycmF5XCIsXCJhcnJheVwiXSxwcmU6e2FyZ3M6W10sYm9keTpcInRoaXNfZj1NYXRoLlwiK2UsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxib2R5OnthcmdzOltcImFcIixcImJcIixcImNcIl0sYm9keTpcImE9dGhpc19mKGMsYilcIix0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LGZ1bmNOYW1lOmUrXCJvcFwifSkscltlK1wib3BzXCJdPW8oe2FyZ3M6W1wiYXJyYXlcIixcImFycmF5XCIsXCJzY2FsYXJcIl0scHJlOnthcmdzOltdLGJvZHk6XCJ0aGlzX2Y9TWF0aC5cIitlLHRoaXNWYXJzOltcInRoaXNfZlwiXX0sYm9keTp7YXJnczpbXCJhXCIsXCJiXCIsXCJjXCJdLGJvZHk6XCJhPXRoaXNfZihjLGIpXCIsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxmdW5jTmFtZTplK1wib3BzXCJ9KSxyW2UrXCJvcGVxXCJdPW8oe2FyZ3M6W1wiYXJyYXlcIixcImFycmF5XCJdLHByZTp7YXJnczpbXSxib2R5OlwidGhpc19mPU1hdGguXCIrZSx0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LGJvZHk6e2FyZ3M6W1wiYVwiLFwiYlwiXSxib2R5OlwiYT10aGlzX2YoYixhKVwiLHRoaXNWYXJzOltcInRoaXNfZlwiXX0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6ZStcIm9wZXFcIn0pLHJbZStcIm9wc2VxXCJdPW8oe2FyZ3M6W1wiYXJyYXlcIixcInNjYWxhclwiXSxwcmU6e2FyZ3M6W10sYm9keTpcInRoaXNfZj1NYXRoLlwiK2UsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxib2R5OnthcmdzOltcImFcIixcImJcIl0sYm9keTpcImE9dGhpc19mKGIsYSlcIix0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOmUrXCJvcHNlcVwifSl9fSgpLHIuYW55PW4oe2FyZ3M6W1wiYXJyYXlcIl0scHJlOmksYm9keTp7YXJnczpbe25hbWU6XCJhXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sYm9keTpcImlmKGEpe3JldHVybiB0cnVlfVwiLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W10sYm9keTpcInJldHVybiBmYWxzZVwifSxmdW5jTmFtZTpcImFueVwifSksci5hbGw9bih7YXJnczpbXCJhcnJheVwiXSxwcmU6aSxib2R5OnthcmdzOlt7bmFtZTpcInhcIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSxib2R5OlwiaWYoIXgpe3JldHVybiBmYWxzZX1cIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W119LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOltdLGJvZHk6XCJyZXR1cm4gdHJ1ZVwifSxmdW5jTmFtZTpcImFsbFwifSksci5zdW09bih7YXJnczpbXCJhcnJheVwiXSxwcmU6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOltcInRoaXNfc1wiXSxib2R5OlwidGhpc19zPTBcIn0sYm9keTp7YXJnczpbe25hbWU6XCJhXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sYm9keTpcInRoaXNfcys9YVwiLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXCJ0aGlzX3NcIl19LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOltcInRoaXNfc1wiXSxib2R5OlwicmV0dXJuIHRoaXNfc1wifSxmdW5jTmFtZTpcInN1bVwifSksci5wcm9kPW4oe2FyZ3M6W1wiYXJyYXlcIl0scHJlOnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXCJ0aGlzX3NcIl0sYm9keTpcInRoaXNfcz0xXCJ9LGJvZHk6e2FyZ3M6W3tuYW1lOlwiYVwiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6XCJ0aGlzX3MqPWFcIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W1widGhpc19zXCJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXCJ0aGlzX3NcIl0sYm9keTpcInJldHVybiB0aGlzX3NcIn0sZnVuY05hbWU6XCJwcm9kXCJ9KSxyLm5vcm0yc3F1YXJlZD1uKHthcmdzOltcImFycmF5XCJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W1widGhpc19zXCJdLGJvZHk6XCJ0aGlzX3M9MFwifSxib2R5OnthcmdzOlt7bmFtZTpcImFcIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9XSxib2R5OlwidGhpc19zKz1hKmFcIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W1widGhpc19zXCJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXCJ0aGlzX3NcIl0sYm9keTpcInJldHVybiB0aGlzX3NcIn0sZnVuY05hbWU6XCJub3JtMnNxdWFyZWRcIn0pLHIubm9ybTI9bih7YXJnczpbXCJhcnJheVwiXSxwcmU6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOltcInRoaXNfc1wiXSxib2R5OlwidGhpc19zPTBcIn0sYm9keTp7YXJnczpbe25hbWU6XCJhXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfV0sYm9keTpcInRoaXNfcys9YSphXCIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOltcInRoaXNfc1wiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W1widGhpc19zXCJdLGJvZHk6XCJyZXR1cm4gTWF0aC5zcXJ0KHRoaXNfcylcIn0sZnVuY05hbWU6XCJub3JtMlwifSksci5ub3JtaW5mPW4oe2FyZ3M6W1wiYXJyYXlcIl0scHJlOnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXCJ0aGlzX3NcIl0sYm9keTpcInRoaXNfcz0wXCJ9LGJvZHk6e2FyZ3M6W3tuYW1lOlwiYVwiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6NH1dLGJvZHk6XCJpZigtYT50aGlzX3Mpe3RoaXNfcz0tYX1lbHNlIGlmKGE+dGhpc19zKXt0aGlzX3M9YX1cIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W1widGhpc19zXCJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXCJ0aGlzX3NcIl0sYm9keTpcInJldHVybiB0aGlzX3NcIn0sZnVuY05hbWU6XCJub3JtaW5mXCJ9KSxyLm5vcm0xPW4oe2FyZ3M6W1wiYXJyYXlcIl0scHJlOnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXCJ0aGlzX3NcIl0sYm9keTpcInRoaXNfcz0wXCJ9LGJvZHk6e2FyZ3M6W3tuYW1lOlwiYVwiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6M31dLGJvZHk6XCJ0aGlzX3MrPWE8MD8tYTphXCIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOltcInRoaXNfc1wiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W1widGhpc19zXCJdLGJvZHk6XCJyZXR1cm4gdGhpc19zXCJ9LGZ1bmNOYW1lOlwibm9ybTFcIn0pLHIuc3VwPW4oe2FyZ3M6W1wiYXJyYXlcIl0scHJlOntib2R5OlwidGhpc19oPS1JbmZpbml0eVwiLGFyZ3M6W10sdGhpc1ZhcnM6W1widGhpc19oXCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keTpcImlmKF9pbmxpbmVfMV9hcmcwXz50aGlzX2gpdGhpc19oPV9pbmxpbmVfMV9hcmcwX1wiLGFyZ3M6W3tuYW1lOlwiX2lubGluZV8xX2FyZzBfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfV0sdGhpc1ZhcnM6W1widGhpc19oXCJdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keTpcInJldHVybiB0aGlzX2hcIixhcmdzOltdLHRoaXNWYXJzOltcInRoaXNfaFwiXSxsb2NhbFZhcnM6W119fSksci5pbmY9bih7YXJnczpbXCJhcnJheVwiXSxwcmU6e2JvZHk6XCJ0aGlzX2g9SW5maW5pdHlcIixhcmdzOltdLHRoaXNWYXJzOltcInRoaXNfaFwiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6XCJpZihfaW5saW5lXzFfYXJnMF88dGhpc19oKXRoaXNfaD1faW5saW5lXzFfYXJnMF9cIixhcmdzOlt7bmFtZTpcIl9pbmxpbmVfMV9hcmcwX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn1dLHRoaXNWYXJzOltcInRoaXNfaFwiXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6XCJyZXR1cm4gdGhpc19oXCIsYXJnczpbXSx0aGlzVmFyczpbXCJ0aGlzX2hcIl0sbG9jYWxWYXJzOltdfX0pLHIuYXJnbWluPW4oe2FyZ3M6W1wiaW5kZXhcIixcImFycmF5XCIsXCJzaGFwZVwiXSxwcmU6e2JvZHk6XCJ7dGhpc192PUluZmluaXR5O3RoaXNfaT1faW5saW5lXzBfYXJnMl8uc2xpY2UoMCl9XCIsYXJnczpbe25hbWU6XCJfaW5saW5lXzBfYXJnMF9cIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOlwiX2lubGluZV8wX2FyZzFfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZTpcIl9pbmxpbmVfMF9hcmcyX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOltcInRoaXNfaVwiLFwidGhpc192XCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keTpcIntpZihfaW5saW5lXzFfYXJnMV88dGhpc192KXt0aGlzX3Y9X2lubGluZV8xX2FyZzFfO2Zvcih2YXIgX2lubGluZV8xX2s9MDtfaW5saW5lXzFfazxfaW5saW5lXzFfYXJnMF8ubGVuZ3RoOysrX2lubGluZV8xX2spe3RoaXNfaVtfaW5saW5lXzFfa109X2lubGluZV8xX2FyZzBfW19pbmxpbmVfMV9rXX19fVwiLGFyZ3M6W3tuYW1lOlwiX2lubGluZV8xX2FyZzBfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfSx7bmFtZTpcIl9pbmxpbmVfMV9hcmcxX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn1dLHRoaXNWYXJzOltcInRoaXNfaVwiLFwidGhpc192XCJdLGxvY2FsVmFyczpbXCJfaW5saW5lXzFfa1wiXX0scG9zdDp7Ym9keTpcIntyZXR1cm4gdGhpc19pfVwiLGFyZ3M6W10sdGhpc1ZhcnM6W1widGhpc19pXCJdLGxvY2FsVmFyczpbXX19KSxyLmFyZ21heD1uKHthcmdzOltcImluZGV4XCIsXCJhcnJheVwiLFwic2hhcGVcIl0scHJlOntib2R5Olwie3RoaXNfdj0tSW5maW5pdHk7dGhpc19pPV9pbmxpbmVfMF9hcmcyXy5zbGljZSgwKX1cIixhcmdzOlt7bmFtZTpcIl9pbmxpbmVfMF9hcmcwX1wiLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6XCJfaW5saW5lXzBfYXJnMV9cIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOlwiX2lubGluZV8wX2FyZzJfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sdGhpc1ZhcnM6W1widGhpc19pXCIsXCJ0aGlzX3ZcIl0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5Olwie2lmKF9pbmxpbmVfMV9hcmcxXz50aGlzX3Ype3RoaXNfdj1faW5saW5lXzFfYXJnMV87Zm9yKHZhciBfaW5saW5lXzFfaz0wO19pbmxpbmVfMV9rPF9pbmxpbmVfMV9hcmcwXy5sZW5ndGg7KytfaW5saW5lXzFfayl7dGhpc19pW19pbmxpbmVfMV9rXT1faW5saW5lXzFfYXJnMF9bX2lubGluZV8xX2tdfX19XCIsYXJnczpbe25hbWU6XCJfaW5saW5lXzFfYXJnMF9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9LHtuYW1lOlwiX2lubGluZV8xX2FyZzFfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfV0sdGhpc1ZhcnM6W1widGhpc19pXCIsXCJ0aGlzX3ZcIl0sbG9jYWxWYXJzOltcIl9pbmxpbmVfMV9rXCJdfSxwb3N0Ontib2R5Olwie3JldHVybiB0aGlzX2l9XCIsYXJnczpbXSx0aGlzVmFyczpbXCJ0aGlzX2lcIl0sbG9jYWxWYXJzOltdfX0pLHIucmFuZG9tPW8oe2FyZ3M6W1wiYXJyYXlcIl0scHJlOnthcmdzOltdLGJvZHk6XCJ0aGlzX2Y9TWF0aC5yYW5kb21cIix0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LGJvZHk6e2FyZ3M6W1wiYVwiXSxib2R5OlwiYT10aGlzX2YoKVwiLHRoaXNWYXJzOltcInRoaXNfZlwiXX0sZnVuY05hbWU6XCJyYW5kb21cIn0pLHIuYXNzaWduPW8oe2FyZ3M6W1wiYXJyYXlcIixcImFycmF5XCJdLGJvZHk6e2FyZ3M6W1wiYVwiLFwiYlwiXSxib2R5OlwiYT1iXCJ9LGZ1bmNOYW1lOlwiYXNzaWduXCJ9KSxyLmFzc2lnbnM9byh7YXJnczpbXCJhcnJheVwiLFwic2NhbGFyXCJdLGJvZHk6e2FyZ3M6W1wiYVwiLFwiYlwiXSxib2R5OlwiYT1iXCJ9LGZ1bmNOYW1lOlwiYXNzaWduc1wifSksci5lcXVhbHM9bih7YXJnczpbXCJhcnJheVwiLFwiYXJyYXlcIl0scHJlOmksYm9keTp7YXJnczpbe25hbWU6XCJ4XCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcInlcIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSxib2R5OlwiaWYoeCE9PXkpe3JldHVybiBmYWxzZX1cIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W119LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOltdLGJvZHk6XCJyZXR1cm4gdHJ1ZVwifSxmdW5jTmFtZTpcImVxdWFsc1wifSl9LHtcImN3aXNlLWNvbXBpbGVyXCI6MTM3fV0sNDM4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIm5kYXJyYXlcIiksaT10KFwiLi9kb0NvbnZlcnQuanNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLGE9dCxvPTE7QXJyYXkuaXNBcnJheShhKTspci5wdXNoKGEubGVuZ3RoKSxvKj1hLmxlbmd0aCxhPWFbMF07cmV0dXJuIDA9PT1yLmxlbmd0aD9uKCk6KGV8fChlPW4obmV3IEZsb2F0NjRBcnJheShvKSxyKSksaShlLHQpLGUpfX0se1wiLi9kb0NvbnZlcnQuanNcIjo0MzksbmRhcnJheTo0NDN9XSw0Mzk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dChcImN3aXNlLWNvbXBpbGVyXCIpKHthcmdzOltcImFycmF5XCIsXCJzY2FsYXJcIixcImluZGV4XCJdLHByZTp7Ym9keTpcInt9XCIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6XCJ7XFxudmFyIF9pbmxpbmVfMV92PV9pbmxpbmVfMV9hcmcxXyxfaW5saW5lXzFfaVxcbmZvcihfaW5saW5lXzFfaT0wO19pbmxpbmVfMV9pPF9pbmxpbmVfMV9hcmcyXy5sZW5ndGgtMTsrK19pbmxpbmVfMV9pKSB7XFxuX2lubGluZV8xX3Y9X2lubGluZV8xX3ZbX2lubGluZV8xX2FyZzJfW19pbmxpbmVfMV9pXV1cXG59XFxuX2lubGluZV8xX2FyZzBfPV9pbmxpbmVfMV92W19pbmxpbmVfMV9hcmcyX1tfaW5saW5lXzFfYXJnMl8ubGVuZ3RoLTFdXVxcbn1cIixhcmdzOlt7bmFtZTpcIl9pbmxpbmVfMV9hcmcwX1wiLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzFfYXJnMV9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xX2FyZzJfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDo0fV0sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltcIl9pbmxpbmVfMV9pXCIsXCJfaW5saW5lXzFfdlwiXX0scG9zdDp7Ym9keTpcInt9XCIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGZ1bmNOYW1lOlwiY29udmVydFwiLGJsb2NrU2l6ZTo2NH0pfSx7XCJjd2lzZS1jb21waWxlclwiOjEzN31dLDQ0MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJ0eXBlZGFycmF5LXBvb2xcIiksaT0zMjtmdW5jdGlvbiBhKHQpe3N3aXRjaCh0KXtjYXNlXCJ1aW50OFwiOnJldHVybltuLm1hbGxvY1VpbnQ4LG4uZnJlZVVpbnQ4XTtjYXNlXCJ1aW50MTZcIjpyZXR1cm5bbi5tYWxsb2NVaW50MTYsbi5mcmVlVWludDE2XTtjYXNlXCJ1aW50MzJcIjpyZXR1cm5bbi5tYWxsb2NVaW50MzIsbi5mcmVlVWludDMyXTtjYXNlXCJpbnQ4XCI6cmV0dXJuW24ubWFsbG9jSW50OCxuLmZyZWVJbnQ4XTtjYXNlXCJpbnQxNlwiOnJldHVybltuLm1hbGxvY0ludDE2LG4uZnJlZUludDE2XTtjYXNlXCJpbnQzMlwiOnJldHVybltuLm1hbGxvY0ludDMyLG4uZnJlZUludDMyXTtjYXNlXCJmbG9hdDMyXCI6cmV0dXJuW24ubWFsbG9jRmxvYXQsbi5mcmVlRmxvYXRdO2Nhc2VcImZsb2F0NjRcIjpyZXR1cm5bbi5tYWxsb2NEb3VibGUsbi5mcmVlRG91YmxlXTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT1bXSxyPTA7cjx0OysrcillLnB1c2goXCJzXCIrcik7Zm9yKHI9MDtyPHQ7KytyKWUucHVzaChcIm5cIityKTtmb3Iocj0xO3I8dDsrK3IpZS5wdXNoKFwiZFwiK3IpO2ZvcihyPTE7cjx0OysrcillLnB1c2goXCJlXCIrcik7Zm9yKHI9MTtyPHQ7KytyKWUucHVzaChcImZcIityKTtyZXR1cm4gZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1bXCIndXNlIHN0cmljdCdcIl0sbj1bXCJuZGFycmF5U29ydFdyYXBwZXJcIix0LmpvaW4oXCJkXCIpLGVdLmpvaW4oXCJcIik7ci5wdXNoKFtcImZ1bmN0aW9uIFwiLG4sXCIoXCIsW1wiYXJyYXlcIl0uam9pbihcIixcIiksXCIpe1wiXS5qb2luKFwiXCIpKTtmb3IodmFyIHM9W1wiZGF0YT1hcnJheS5kYXRhLG9mZnNldD1hcnJheS5vZmZzZXR8MCxzaGFwZT1hcnJheS5zaGFwZSxzdHJpZGU9YXJyYXkuc3RyaWRlXCJdLGw9MDtsPHQubGVuZ3RoOysrbClzLnB1c2goW1wic1wiLGwsXCI9c3RyaWRlW1wiLGwsXCJdfDAsblwiLGwsXCI9c2hhcGVbXCIsbCxcIl18MFwiXS5qb2luKFwiXCIpKTt2YXIgYz1uZXcgQXJyYXkodC5sZW5ndGgpLHU9W107Zm9yKGw9MDtsPHQubGVuZ3RoOysrbCkwIT09KHA9dFtsXSkmJigwPT09dS5sZW5ndGg/Y1twXT1cIjFcIjpjW3BdPXUuam9pbihcIipcIiksdS5wdXNoKFwiblwiK3ApKTt2YXIgaD0tMSxmPS0xO2ZvcihsPTA7bDx0Lmxlbmd0aDsrK2wpe3ZhciBwLGQ9dFtsXTswIT09ZCYmKGg+MD9zLnB1c2goW1wiZFwiLGQsXCI9c1wiLGQsXCItZFwiLGgsXCIqblwiLGhdLmpvaW4oXCJcIikpOnMucHVzaChbXCJkXCIsZCxcIj1zXCIsZF0uam9pbihcIlwiKSksaD1kKSwwIT0ocD10Lmxlbmd0aC0xLWwpJiYoZj4wP3MucHVzaChbXCJlXCIscCxcIj1zXCIscCxcIi1lXCIsZixcIipuXCIsZixcIixmXCIscCxcIj1cIixjW3BdLFwiLWZcIixmLFwiKm5cIixmXS5qb2luKFwiXCIpKTpzLnB1c2goW1wiZVwiLHAsXCI9c1wiLHAsXCIsZlwiLHAsXCI9XCIsY1twXV0uam9pbihcIlwiKSksZj1wKX1yLnB1c2goXCJ2YXIgXCIrcy5qb2luKFwiLFwiKSk7dmFyIGc9W1wiMFwiLFwibjAtMVwiLFwiZGF0YVwiLFwib2Zmc2V0XCJdLmNvbmNhdChvKHQubGVuZ3RoKSk7ci5wdXNoKFtcImlmKG4wPD1cIixpLFwiKXtcIixcImluc2VydGlvblNvcnQoXCIsZy5qb2luKFwiLFwiKSxcIil9ZWxzZXtcIixcInF1aWNrU29ydChcIixnLmpvaW4oXCIsXCIpLFwiKX1cIl0uam9pbihcIlwiKSksci5wdXNoKFwifXJldHVybiBcIituKTt2YXIgdj1uZXcgRnVuY3Rpb24oXCJpbnNlcnRpb25Tb3J0XCIsXCJxdWlja1NvcnRcIixyLmpvaW4oXCJcXG5cIikpLG09ZnVuY3Rpb24odCxlKXt2YXIgcj1bXCIndXNlIHN0cmljdCdcIl0sbj1bXCJuZGFycmF5SW5zZXJ0aW9uU29ydFwiLHQuam9pbihcImRcIiksZV0uam9pbihcIlwiKSxpPVtcImxlZnRcIixcInJpZ2h0XCIsXCJkYXRhXCIsXCJvZmZzZXRcIl0uY29uY2F0KG8odC5sZW5ndGgpKSxzPWEoZSksbD1bXCJpLGosY3B0cixwdHI9bGVmdCpzMCtvZmZzZXRcIl07aWYodC5sZW5ndGg+MSl7Zm9yKHZhciBjPVtdLHU9MTt1PHQubGVuZ3RoOysrdSlsLnB1c2goXCJpXCIrdSksYy5wdXNoKFwiblwiK3UpO3M/bC5wdXNoKFwic2NyYXRjaD1tYWxsb2MoXCIrYy5qb2luKFwiKlwiKStcIilcIik6bC5wdXNoKFwic2NyYXRjaD1uZXcgQXJyYXkoXCIrYy5qb2luKFwiKlwiKStcIilcIiksbC5wdXNoKFwiZHB0clwiLFwic3B0clwiLFwiYVwiLFwiYlwiKX1lbHNlIGwucHVzaChcInNjcmF0Y2hcIik7ZnVuY3Rpb24gaCh0KXtyZXR1cm5cImdlbmVyaWNcIj09PWU/W1wiZGF0YS5nZXQoXCIsdCxcIilcIl0uam9pbihcIlwiKTpbXCJkYXRhW1wiLHQsXCJdXCJdLmpvaW4oXCJcIil9ZnVuY3Rpb24gZih0LHIpe3JldHVyblwiZ2VuZXJpY1wiPT09ZT9bXCJkYXRhLnNldChcIix0LFwiLFwiLHIsXCIpXCJdLmpvaW4oXCJcIik6W1wiZGF0YVtcIix0LFwiXT1cIixyXS5qb2luKFwiXCIpfWlmKHIucHVzaChbXCJmdW5jdGlvbiBcIixuLFwiKFwiLGkuam9pbihcIixcIiksXCIpe3ZhciBcIixsLmpvaW4oXCIsXCIpXS5qb2luKFwiXCIpLFwiZm9yKGk9bGVmdCsxO2k8PXJpZ2h0OysraSl7XCIsXCJqPWk7cHRyKz1zMFwiLFwiY3B0cj1wdHJcIiksdC5sZW5ndGg+MSl7Zm9yKHIucHVzaChcImRwdHI9MDtzcHRyPXB0clwiKSx1PXQubGVuZ3RoLTE7dT49MDstLXUpMCE9PShwPXRbdV0pJiZyLnB1c2goW1wiZm9yKGlcIixwLFwiPTA7aVwiLHAsXCI8blwiLHAsXCI7KytpXCIscCxcIil7XCJdLmpvaW4oXCJcIikpO2ZvcihyLnB1c2goXCJzY3JhdGNoW2RwdHIrK109XCIsaChcInNwdHJcIikpLHU9MDt1PHQubGVuZ3RoOysrdSkwIT09KHA9dFt1XSkmJnIucHVzaChcInNwdHIrPWRcIitwLFwifVwiKTtmb3Ioci5wdXNoKFwiX19nOndoaWxlKGotLVxceDNlbGVmdCl7XCIsXCJkcHRyPTBcIixcInNwdHI9Y3B0ci1zMFwiKSx1PTE7dTx0Lmxlbmd0aDsrK3UpMT09PXUmJnIucHVzaChcIl9fbDpcIiksci5wdXNoKFtcImZvcihpXCIsdSxcIj0wO2lcIix1LFwiPG5cIix1LFwiOysraVwiLHUsXCIpe1wiXS5qb2luKFwiXCIpKTtmb3Ioci5wdXNoKFtcImE9XCIsaChcInNwdHJcIiksXCJcXG5iPXNjcmF0Y2hbZHB0cl1cXG5pZihhPGIpe2JyZWFrIF9fZ31cXG5pZihhPmIpe2JyZWFrIF9fbH1cIl0uam9pbihcIlwiKSksdT10Lmxlbmd0aC0xO3U+PTE7LS11KXIucHVzaChcInNwdHIrPWVcIit1LFwiZHB0cis9ZlwiK3UsXCJ9XCIpO2ZvcihyLnB1c2goXCJkcHRyPWNwdHI7c3B0cj1jcHRyLXMwXCIpLHU9dC5sZW5ndGgtMTt1Pj0wOy0tdSkwIT09KHA9dFt1XSkmJnIucHVzaChbXCJmb3IoaVwiLHAsXCI9MDtpXCIscCxcIjxuXCIscCxcIjsrK2lcIixwLFwiKXtcIl0uam9pbihcIlwiKSk7Zm9yKHIucHVzaChmKFwiZHB0clwiLGgoXCJzcHRyXCIpKSksdT0wO3U8dC5sZW5ndGg7Kyt1KTAhPT0ocD10W3VdKSYmci5wdXNoKFtcImRwdHIrPWRcIixwLFwiO3NwdHIrPWRcIixwXS5qb2luKFwiXCIpLFwifVwiKTtmb3Ioci5wdXNoKFwiY3B0ci09czBcXG59XCIpLHIucHVzaChcImRwdHI9Y3B0cjtzcHRyPTBcIiksdT10Lmxlbmd0aC0xO3U+PTA7LS11KTAhPT0ocD10W3VdKSYmci5wdXNoKFtcImZvcihpXCIscCxcIj0wO2lcIixwLFwiPG5cIixwLFwiOysraVwiLHAsXCIpe1wiXS5qb2luKFwiXCIpKTtmb3Ioci5wdXNoKGYoXCJkcHRyXCIsXCJzY3JhdGNoW3NwdHIrK11cIikpLHU9MDt1PHQubGVuZ3RoOysrdSl7dmFyIHA7MCE9PShwPXRbdV0pJiZyLnB1c2goXCJkcHRyKz1kXCIrcCxcIn1cIil9fWVsc2Ugci5wdXNoKFwic2NyYXRjaD1cIitoKFwicHRyXCIpLFwid2hpbGUoKGotLVxceDNlbGVmdCkmJihcIitoKFwiY3B0ci1zMFwiKStcIj5zY3JhdGNoKSl7XCIsZihcImNwdHJcIixoKFwiY3B0ci1zMFwiKSksXCJjcHRyLT1zMFwiLFwifVwiLGYoXCJjcHRyXCIsXCJzY3JhdGNoXCIpKTtyZXR1cm4gci5wdXNoKFwifVwiKSx0Lmxlbmd0aD4xJiZzJiZyLnB1c2goXCJmcmVlKHNjcmF0Y2gpXCIpLHIucHVzaChcIn0gcmV0dXJuIFwiK24pLHM/bmV3IEZ1bmN0aW9uKFwibWFsbG9jXCIsXCJmcmVlXCIsci5qb2luKFwiXFxuXCIpKShzWzBdLHNbMV0pOm5ldyBGdW5jdGlvbihyLmpvaW4oXCJcXG5cIikpKCl9KHQsZSkseT1mdW5jdGlvbih0LGUscil7dmFyIG49W1wiJ3VzZSBzdHJpY3QnXCJdLHM9W1wibmRhcnJheVF1aWNrU29ydFwiLHQuam9pbihcImRcIiksZV0uam9pbihcIlwiKSxsPVtcImxlZnRcIixcInJpZ2h0XCIsXCJkYXRhXCIsXCJvZmZzZXRcIl0uY29uY2F0KG8odC5sZW5ndGgpKSxjPWEoZSksdT0wO24ucHVzaChbXCJmdW5jdGlvbiBcIixzLFwiKFwiLGwuam9pbihcIixcIiksXCIpe1wiXS5qb2luKFwiXCIpKTt2YXIgaD1bXCJzaXh0aD0oKHJpZ2h0LWxlZnQrMSkvNil8MFwiLFwiaW5kZXgxPWxlZnQrc2l4dGhcIixcImluZGV4NT1yaWdodC1zaXh0aFwiLFwiaW5kZXgzPShsZWZ0K3JpZ2h0KT4+MVwiLFwiaW5kZXgyPWluZGV4My1zaXh0aFwiLFwiaW5kZXg0PWluZGV4MytzaXh0aFwiLFwiZWwxPWluZGV4MVwiLFwiZWwyPWluZGV4MlwiLFwiZWwzPWluZGV4M1wiLFwiZWw0PWluZGV4NFwiLFwiZWw1PWluZGV4NVwiLFwibGVzcz1sZWZ0KzFcIixcImdyZWF0PXJpZ2h0LTFcIixcInBpdm90c19hcmVfZXF1YWw9dHJ1ZVwiLFwidG1wXCIsXCJ0bXAwXCIsXCJ4XCIsXCJ5XCIsXCJ6XCIsXCJrXCIsXCJwdHIwXCIsXCJwdHIxXCIsXCJwdHIyXCIsXCJjb21wX3Bpdm90MT0wXCIsXCJjb21wX3Bpdm90Mj0wXCIsXCJjb21wPTBcIl07aWYodC5sZW5ndGg+MSl7Zm9yKHZhciBmPVtdLHA9MTtwPHQubGVuZ3RoOysrcClmLnB1c2goXCJuXCIrcCksaC5wdXNoKFwiaVwiK3ApO2ZvcihwPTA7cDw4OysrcCloLnB1c2goXCJiX3B0clwiK3ApO2gucHVzaChcInB0cjNcIixcInB0cjRcIixcInB0cjVcIixcInB0cjZcIixcInB0cjdcIixcInBpdm90X3B0clwiLFwicHRyX3NoaWZ0XCIsXCJlbGVtZW50U2l6ZT1cIitmLmpvaW4oXCIqXCIpKSxjP2gucHVzaChcInBpdm90MT1tYWxsb2MoZWxlbWVudFNpemUpXCIsXCJwaXZvdDI9bWFsbG9jKGVsZW1lbnRTaXplKVwiKTpoLnB1c2goXCJwaXZvdDE9bmV3IEFycmF5KGVsZW1lbnRTaXplKSxwaXZvdDI9bmV3IEFycmF5KGVsZW1lbnRTaXplKVwiKX1lbHNlIGgucHVzaChcInBpdm90MVwiLFwicGl2b3QyXCIpO2Z1bmN0aW9uIGQodCl7cmV0dXJuW1wiKG9mZnNldCtcIix0LFwiKnMwKVwiXS5qb2luKFwiXCIpfWZ1bmN0aW9uIGcodCl7cmV0dXJuXCJnZW5lcmljXCI9PT1lP1tcImRhdGEuZ2V0KFwiLHQsXCIpXCJdLmpvaW4oXCJcIik6W1wiZGF0YVtcIix0LFwiXVwiXS5qb2luKFwiXCIpfWZ1bmN0aW9uIHYodCxyKXtyZXR1cm5cImdlbmVyaWNcIj09PWU/W1wiZGF0YS5zZXQoXCIsdCxcIixcIixyLFwiKVwiXS5qb2luKFwiXCIpOltcImRhdGFbXCIsdCxcIl09XCIscl0uam9pbihcIlwiKX1mdW5jdGlvbiBtKGUscixpKXtpZigxPT09ZS5sZW5ndGgpbi5wdXNoKFwicHRyMD1cIitkKGVbMF0pKTtlbHNlIGZvcih2YXIgYT0wO2E8ZS5sZW5ndGg7KythKW4ucHVzaChbXCJiX3B0clwiLGEsXCI9czAqXCIsZVthXV0uam9pbihcIlwiKSk7Zm9yKHImJm4ucHVzaChcInBpdm90X3B0cj0wXCIpLG4ucHVzaChcInB0cl9zaGlmdD1vZmZzZXRcIiksYT10Lmxlbmd0aC0xO2E+PTA7LS1hKTAhPT0obz10W2FdKSYmbi5wdXNoKFtcImZvcihpXCIsbyxcIj0wO2lcIixvLFwiPG5cIixvLFwiOysraVwiLG8sXCIpe1wiXS5qb2luKFwiXCIpKTtpZihlLmxlbmd0aD4xKWZvcihhPTA7YTxlLmxlbmd0aDsrK2Epbi5wdXNoKFtcInB0clwiLGEsXCI9Yl9wdHJcIixhLFwiK3B0cl9zaGlmdFwiXS5qb2luKFwiXCIpKTtmb3Iobi5wdXNoKGkpLHImJm4ucHVzaChcIisrcGl2b3RfcHRyXCIpLGE9MDthPHQubGVuZ3RoOysrYSl7dmFyIG87MCE9PShvPXRbYV0pJiYoZS5sZW5ndGg+MT9uLnB1c2goXCJwdHJfc2hpZnQrPWRcIitvKTpuLnB1c2goXCJwdHIwKz1kXCIrbyksbi5wdXNoKFwifVwiKSl9fWZ1bmN0aW9uIHkoZSxyLGksYSl7aWYoMT09PXIubGVuZ3RoKW4ucHVzaChcInB0cjA9XCIrZChyWzBdKSk7ZWxzZXtmb3IodmFyIG89MDtvPHIubGVuZ3RoOysrbyluLnB1c2goW1wiYl9wdHJcIixvLFwiPXMwKlwiLHJbb11dLmpvaW4oXCJcIikpO24ucHVzaChcInB0cl9zaGlmdD1vZmZzZXRcIil9Zm9yKGkmJm4ucHVzaChcInBpdm90X3B0cj0wXCIpLGUmJm4ucHVzaChlK1wiOlwiKSxvPTE7bzx0Lmxlbmd0aDsrK28pbi5wdXNoKFtcImZvcihpXCIsbyxcIj0wO2lcIixvLFwiPG5cIixvLFwiOysraVwiLG8sXCIpe1wiXS5qb2luKFwiXCIpKTtpZihyLmxlbmd0aD4xKWZvcihvPTA7bzxyLmxlbmd0aDsrK28pbi5wdXNoKFtcInB0clwiLG8sXCI9Yl9wdHJcIixvLFwiK3B0cl9zaGlmdFwiXS5qb2luKFwiXCIpKTtmb3Iobi5wdXNoKGEpLG89dC5sZW5ndGgtMTtvPj0xOy0tbylpJiZuLnB1c2goXCJwaXZvdF9wdHIrPWZcIitvKSxyLmxlbmd0aD4xP24ucHVzaChcInB0cl9zaGlmdCs9ZVwiK28pOm4ucHVzaChcInB0cjArPWVcIitvKSxuLnB1c2goXCJ9XCIpfWZ1bmN0aW9uIHgoKXt0Lmxlbmd0aD4xJiZjJiZuLnB1c2goXCJmcmVlKHBpdm90MSlcIixcImZyZWUocGl2b3QyKVwiKX1mdW5jdGlvbiBiKGUscil7dmFyIGk9XCJlbFwiK2UsYT1cImVsXCIrcjtpZih0Lmxlbmd0aD4xKXt2YXIgbz1cIl9fbFwiKyArK3U7eShvLFtpLGFdLCExLFtcImNvbXA9XCIsZyhcInB0cjBcIiksXCItXCIsZyhcInB0cjFcIiksXCJcXG5cIixcImlmKGNvbXA+MCl7dG1wMD1cIixpLFwiO1wiLGksXCI9XCIsYSxcIjtcIixhLFwiPXRtcDA7YnJlYWsgXCIsbyxcIn1cXG5cIixcImlmKGNvbXA8MCl7YnJlYWsgXCIsbyxcIn1cIl0uam9pbihcIlwiKSl9ZWxzZSBuLnB1c2goW1wiaWYoXCIsZyhkKGkpKSxcIj5cIixnKGQoYSkpLFwiKXt0bXAwPVwiLGksXCI7XCIsaSxcIj1cIixhLFwiO1wiLGEsXCI9dG1wMH1cIl0uam9pbihcIlwiKSl9ZnVuY3Rpb24gXyhlLHIpe3QubGVuZ3RoPjE/bShbZSxyXSwhMSx2KFwicHRyMFwiLGcoXCJwdHIxXCIpKSk6bi5wdXNoKHYoZChlKSxnKGQocikpKSl9ZnVuY3Rpb24gdyhlLHIsaSl7aWYodC5sZW5ndGg+MSl7dmFyIGE9XCJfX2xcIisgKyt1O3koYSxbcl0sITAsW2UsXCI9XCIsZyhcInB0cjBcIiksXCItcGl2b3RcIixpLFwiW3Bpdm90X3B0cl1cXG5cIixcImlmKFwiLGUsXCIhPT0wKXticmVhayBcIixhLFwifVwiXS5qb2luKFwiXCIpKX1lbHNlIG4ucHVzaChbZSxcIj1cIixnKGQocikpLFwiLXBpdm90XCIsaV0uam9pbihcIlwiKSl9ZnVuY3Rpb24gayhlLHIpe3QubGVuZ3RoPjE/bShbZSxyXSwhMSxbXCJ0bXA9XCIsZyhcInB0cjBcIiksXCJcXG5cIix2KFwicHRyMFwiLGcoXCJwdHIxXCIpKSxcIlxcblwiLHYoXCJwdHIxXCIsXCJ0bXBcIildLmpvaW4oXCJcIikpOm4ucHVzaChbXCJwdHIwPVwiLGQoZSksXCJcXG5cIixcInB0cjE9XCIsZChyKSxcIlxcblwiLFwidG1wPVwiLGcoXCJwdHIwXCIpLFwiXFxuXCIsdihcInB0cjBcIixnKFwicHRyMVwiKSksXCJcXG5cIix2KFwicHRyMVwiLFwidG1wXCIpXS5qb2luKFwiXCIpKX1mdW5jdGlvbiBBKGUscixpKXt0Lmxlbmd0aD4xPyhtKFtlLHIsaV0sITEsW1widG1wPVwiLGcoXCJwdHIwXCIpLFwiXFxuXCIsdihcInB0cjBcIixnKFwicHRyMVwiKSksXCJcXG5cIix2KFwicHRyMVwiLGcoXCJwdHIyXCIpKSxcIlxcblwiLHYoXCJwdHIyXCIsXCJ0bXBcIildLmpvaW4oXCJcIikpLG4ucHVzaChcIisrXCIrcixcIi0tXCIraSkpOm4ucHVzaChbXCJwdHIwPVwiLGQoZSksXCJcXG5cIixcInB0cjE9XCIsZChyKSxcIlxcblwiLFwicHRyMj1cIixkKGkpLFwiXFxuXCIsXCIrK1wiLHIsXCJcXG5cIixcIi0tXCIsaSxcIlxcblwiLFwidG1wPVwiLGcoXCJwdHIwXCIpLFwiXFxuXCIsdihcInB0cjBcIixnKFwicHRyMVwiKSksXCJcXG5cIix2KFwicHRyMVwiLGcoXCJwdHIyXCIpKSxcIlxcblwiLHYoXCJwdHIyXCIsXCJ0bXBcIildLmpvaW4oXCJcIikpfWZ1bmN0aW9uIFQodCxlKXtrKHQsZSksbi5wdXNoKFwiLS1cIitlKX1mdW5jdGlvbiBNKGUscixpKXt0Lmxlbmd0aD4xP20oW2Uscl0sITAsW3YoXCJwdHIwXCIsZyhcInB0cjFcIikpLFwiXFxuXCIsdihcInB0cjFcIixbXCJwaXZvdFwiLGksXCJbcGl2b3RfcHRyXVwiXS5qb2luKFwiXCIpKV0uam9pbihcIlwiKSk6bi5wdXNoKHYoZChlKSxnKGQocikpKSx2KGQociksXCJwaXZvdFwiK2kpKX1mdW5jdGlvbiBTKGUscil7bi5wdXNoKFtcImlmKChcIixyLFwiLVwiLGUsXCIpPD1cIixpLFwiKXtcXG5cIixcImluc2VydGlvblNvcnQoXCIsZSxcIixcIixyLFwiLGRhdGEsb2Zmc2V0LFwiLG8odC5sZW5ndGgpLmpvaW4oXCIsXCIpLFwiKVxcblwiLFwifWVsc2V7XFxuXCIscyxcIihcIixlLFwiLFwiLHIsXCIsZGF0YSxvZmZzZXQsXCIsbyh0Lmxlbmd0aCkuam9pbihcIixcIiksXCIpXFxuXCIsXCJ9XCJdLmpvaW4oXCJcIikpfWZ1bmN0aW9uIEUoZSxyLGkpe3QubGVuZ3RoPjE/KG4ucHVzaChbXCJfX2xcIiwrK3UsXCI6d2hpbGUodHJ1ZSl7XCJdLmpvaW4oXCJcIikpLG0oW2VdLCEwLFtcImlmKFwiLGcoXCJwdHIwXCIpLFwiIT09cGl2b3RcIixyLFwiW3Bpdm90X3B0cl0pe2JyZWFrIF9fbFwiLHUsXCJ9XCJdLmpvaW4oXCJcIikpLG4ucHVzaChpLFwifVwiKSk6bi5wdXNoKFtcIndoaWxlKFwiLGcoZChlKSksXCI9PT1waXZvdFwiLHIsXCIpe1wiLGksXCJ9XCJdLmpvaW4oXCJcIikpfXJldHVybiBuLnB1c2goXCJ2YXIgXCIraC5qb2luKFwiLFwiKSksYigxLDIpLGIoNCw1KSxiKDEsMyksYigyLDMpLGIoMSw0KSxiKDMsNCksYigyLDUpLGIoMiwzKSxiKDQsNSksdC5sZW5ndGg+MT9tKFtcImVsMVwiLFwiZWwyXCIsXCJlbDNcIixcImVsNFwiLFwiZWw1XCIsXCJpbmRleDFcIixcImluZGV4M1wiLFwiaW5kZXg1XCJdLCEwLFtcInBpdm90MVtwaXZvdF9wdHJdPVwiLGcoXCJwdHIxXCIpLFwiXFxuXCIsXCJwaXZvdDJbcGl2b3RfcHRyXT1cIixnKFwicHRyM1wiKSxcIlxcblwiLFwicGl2b3RzX2FyZV9lcXVhbD1waXZvdHNfYXJlX2VxdWFsJiYocGl2b3QxW3Bpdm90X3B0cl09PT1waXZvdDJbcGl2b3RfcHRyXSlcXG5cIixcIng9XCIsZyhcInB0cjBcIiksXCJcXG5cIixcInk9XCIsZyhcInB0cjJcIiksXCJcXG5cIixcIno9XCIsZyhcInB0cjRcIiksXCJcXG5cIix2KFwicHRyNVwiLFwieFwiKSxcIlxcblwiLHYoXCJwdHI2XCIsXCJ5XCIpLFwiXFxuXCIsdihcInB0cjdcIixcInpcIildLmpvaW4oXCJcIikpOm4ucHVzaChbXCJwaXZvdDE9XCIsZyhkKFwiZWwyXCIpKSxcIlxcblwiLFwicGl2b3QyPVwiLGcoZChcImVsNFwiKSksXCJcXG5cIixcInBpdm90c19hcmVfZXF1YWw9cGl2b3QxPT09cGl2b3QyXFxuXCIsXCJ4PVwiLGcoZChcImVsMVwiKSksXCJcXG5cIixcInk9XCIsZyhkKFwiZWwzXCIpKSxcIlxcblwiLFwiej1cIixnKGQoXCJlbDVcIikpLFwiXFxuXCIsdihkKFwiaW5kZXgxXCIpLFwieFwiKSxcIlxcblwiLHYoZChcImluZGV4M1wiKSxcInlcIiksXCJcXG5cIix2KGQoXCJpbmRleDVcIiksXCJ6XCIpXS5qb2luKFwiXCIpKSxfKFwiaW5kZXgyXCIsXCJsZWZ0XCIpLF8oXCJpbmRleDRcIixcInJpZ2h0XCIpLG4ucHVzaChcImlmKHBpdm90c19hcmVfZXF1YWwpe1wiKSxuLnB1c2goXCJmb3Ioaz1sZXNzO2s8PWdyZWF0Oysrayl7XCIpLHcoXCJjb21wXCIsXCJrXCIsMSksbi5wdXNoKFwiaWYoY29tcD09PTApe2NvbnRpbnVlfVwiKSxuLnB1c2goXCJpZihjb21wPDApe1wiKSxuLnB1c2goXCJpZihrIT09bGVzcyl7XCIpLGsoXCJrXCIsXCJsZXNzXCIpLG4ucHVzaChcIn1cIiksbi5wdXNoKFwiKytsZXNzXCIpLG4ucHVzaChcIn1lbHNle1wiKSxuLnB1c2goXCJ3aGlsZSh0cnVlKXtcIiksdyhcImNvbXBcIixcImdyZWF0XCIsMSksbi5wdXNoKFwiaWYoY29tcD4wKXtcIiksbi5wdXNoKFwiZ3JlYXQtLVwiKSxuLnB1c2goXCJ9ZWxzZSBpZihjb21wPDApe1wiKSxBKFwia1wiLFwibGVzc1wiLFwiZ3JlYXRcIiksbi5wdXNoKFwiYnJlYWtcIiksbi5wdXNoKFwifWVsc2V7XCIpLFQoXCJrXCIsXCJncmVhdFwiKSxuLnB1c2goXCJicmVha1wiKSxuLnB1c2goXCJ9XCIpLG4ucHVzaChcIn1cIiksbi5wdXNoKFwifVwiKSxuLnB1c2goXCJ9XCIpLG4ucHVzaChcIn1lbHNle1wiKSxuLnB1c2goXCJmb3Ioaz1sZXNzO2s8PWdyZWF0Oysrayl7XCIpLHcoXCJjb21wX3Bpdm90MVwiLFwia1wiLDEpLG4ucHVzaChcImlmKGNvbXBfcGl2b3QxPDApe1wiKSxuLnB1c2goXCJpZihrIT09bGVzcyl7XCIpLGsoXCJrXCIsXCJsZXNzXCIpLG4ucHVzaChcIn1cIiksbi5wdXNoKFwiKytsZXNzXCIpLG4ucHVzaChcIn1lbHNle1wiKSx3KFwiY29tcF9waXZvdDJcIixcImtcIiwyKSxuLnB1c2goXCJpZihjb21wX3Bpdm90Mj4wKXtcIiksbi5wdXNoKFwid2hpbGUodHJ1ZSl7XCIpLHcoXCJjb21wXCIsXCJncmVhdFwiLDIpLG4ucHVzaChcImlmKGNvbXA+MCl7XCIpLG4ucHVzaChcImlmKC0tZ3JlYXQ8ayl7YnJlYWt9XCIpLG4ucHVzaChcImNvbnRpbnVlXCIpLG4ucHVzaChcIn1lbHNle1wiKSx3KFwiY29tcFwiLFwiZ3JlYXRcIiwxKSxuLnB1c2goXCJpZihjb21wPDApe1wiKSxBKFwia1wiLFwibGVzc1wiLFwiZ3JlYXRcIiksbi5wdXNoKFwifWVsc2V7XCIpLFQoXCJrXCIsXCJncmVhdFwiKSxuLnB1c2goXCJ9XCIpLG4ucHVzaChcImJyZWFrXCIpLG4ucHVzaChcIn1cIiksbi5wdXNoKFwifVwiKSxuLnB1c2goXCJ9XCIpLG4ucHVzaChcIn1cIiksbi5wdXNoKFwifVwiKSxuLnB1c2goXCJ9XCIpLE0oXCJsZWZ0XCIsXCIobGVzcy0xKVwiLDEpLE0oXCJyaWdodFwiLFwiKGdyZWF0KzEpXCIsMiksUyhcImxlZnRcIixcIihsZXNzLTIpXCIpLFMoXCIoZ3JlYXQrMilcIixcInJpZ2h0XCIpLG4ucHVzaChcImlmKHBpdm90c19hcmVfZXF1YWwpe1wiKSx4KCksbi5wdXNoKFwicmV0dXJuXCIpLG4ucHVzaChcIn1cIiksbi5wdXNoKFwiaWYobGVzczxpbmRleDEmJmdyZWF0PmluZGV4NSl7XCIpLEUoXCJsZXNzXCIsMSxcIisrbGVzc1wiKSxFKFwiZ3JlYXRcIiwyLFwiLS1ncmVhdFwiKSxuLnB1c2goXCJmb3Ioaz1sZXNzO2s8PWdyZWF0Oysrayl7XCIpLHcoXCJjb21wX3Bpdm90MVwiLFwia1wiLDEpLG4ucHVzaChcImlmKGNvbXBfcGl2b3QxPT09MCl7XCIpLG4ucHVzaChcImlmKGshPT1sZXNzKXtcIiksayhcImtcIixcImxlc3NcIiksbi5wdXNoKFwifVwiKSxuLnB1c2goXCIrK2xlc3NcIiksbi5wdXNoKFwifWVsc2V7XCIpLHcoXCJjb21wX3Bpdm90MlwiLFwia1wiLDIpLG4ucHVzaChcImlmKGNvbXBfcGl2b3QyPT09MCl7XCIpLG4ucHVzaChcIndoaWxlKHRydWUpe1wiKSx3KFwiY29tcFwiLFwiZ3JlYXRcIiwyKSxuLnB1c2goXCJpZihjb21wPT09MCl7XCIpLG4ucHVzaChcImlmKC0tZ3JlYXQ8ayl7YnJlYWt9XCIpLG4ucHVzaChcImNvbnRpbnVlXCIpLG4ucHVzaChcIn1lbHNle1wiKSx3KFwiY29tcFwiLFwiZ3JlYXRcIiwxKSxuLnB1c2goXCJpZihjb21wPDApe1wiKSxBKFwia1wiLFwibGVzc1wiLFwiZ3JlYXRcIiksbi5wdXNoKFwifWVsc2V7XCIpLFQoXCJrXCIsXCJncmVhdFwiKSxuLnB1c2goXCJ9XCIpLG4ucHVzaChcImJyZWFrXCIpLG4ucHVzaChcIn1cIiksbi5wdXNoKFwifVwiKSxuLnB1c2goXCJ9XCIpLG4ucHVzaChcIn1cIiksbi5wdXNoKFwifVwiKSxuLnB1c2goXCJ9XCIpLHgoKSxTKFwibGVzc1wiLFwiZ3JlYXRcIiksbi5wdXNoKFwifXJldHVybiBcIitzKSx0Lmxlbmd0aD4xJiZjP25ldyBGdW5jdGlvbihcImluc2VydGlvblNvcnRcIixcIm1hbGxvY1wiLFwiZnJlZVwiLG4uam9pbihcIlxcblwiKSkocixjWzBdLGNbMV0pOm5ldyBGdW5jdGlvbihcImluc2VydGlvblNvcnRcIixuLmpvaW4oXCJcXG5cIikpKHIpfSh0LGUsbSk7cmV0dXJuIHYobSx5KX19LHtcInR5cGVkYXJyYXktcG9vbFwiOjUzMH1dLDQ0MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2xpYi9jb21waWxlX3NvcnQuanNcIiksaT17fTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5vcmRlcixyPXQuZHR5cGUsYT1bZSxyXS5qb2luKFwiOlwiKSxvPWlbYV07cmV0dXJuIG98fChpW2FdPW89bihlLHIpKSxvKHQpLHR9fSx7XCIuL2xpYi9jb21waWxlX3NvcnQuanNcIjo0NDB9XSw0NDI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwibmRhcnJheS1saW5lYXItaW50ZXJwb2xhdGVcIiksaT10KFwiY3dpc2UvbGliL3dyYXBwZXJcIikoe2FyZ3M6W1wiaW5kZXhcIixcImFycmF5XCIsXCJzY2FsYXJcIixcInNjYWxhclwiLFwic2NhbGFyXCJdLHByZTp7Ym9keTpcInt0aGlzX3dhcnBlZD1uZXcgQXJyYXkoX2lubGluZV8zX2FyZzRfKX1cIixhcmdzOlt7bmFtZTpcIl9pbmxpbmVfM19hcmcwX1wiLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6XCJfaW5saW5lXzNfYXJnMV9cIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOlwiX2lubGluZV8zX2FyZzJfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZTpcIl9pbmxpbmVfM19hcmczX1wiLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6XCJfaW5saW5lXzNfYXJnNF9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbXCJ0aGlzX3dhcnBlZFwiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6XCJ7X2lubGluZV80X2FyZzJfKHRoaXNfd2FycGVkLF9pbmxpbmVfNF9hcmcwXyksX2lubGluZV80X2FyZzFfPV9pbmxpbmVfNF9hcmczXy5hcHBseSh2b2lkIDAsdGhpc193YXJwZWQpfVwiLGFyZ3M6W3tuYW1lOlwiX2lubGluZV80X2FyZzBfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfNF9hcmcxX1wiLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzRfYXJnMl9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV80X2FyZzNfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfNF9hcmc0X1wiLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH1dLHRoaXNWYXJzOltcInRoaXNfd2FycGVkXCJdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keTpcInt9XCIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGRlYnVnOiExLGZ1bmNOYW1lOlwid2FycE5EXCIsYmxvY2tTaXplOjY0fSksYT10KFwiY3dpc2UvbGliL3dyYXBwZXJcIikoe2FyZ3M6W1wiaW5kZXhcIixcImFycmF5XCIsXCJzY2FsYXJcIixcInNjYWxhclwiLFwic2NhbGFyXCJdLHByZTp7Ym9keTpcInt0aGlzX3dhcnBlZD1bMF19XCIsYXJnczpbXSx0aGlzVmFyczpbXCJ0aGlzX3dhcnBlZFwiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6XCJ7X2lubGluZV83X2FyZzJfKHRoaXNfd2FycGVkLF9pbmxpbmVfN19hcmcwXyksX2lubGluZV83X2FyZzFfPV9pbmxpbmVfN19hcmczXyhfaW5saW5lXzdfYXJnNF8sdGhpc193YXJwZWRbMF0pfVwiLGFyZ3M6W3tuYW1lOlwiX2lubGluZV83X2FyZzBfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfN19hcmcxX1wiLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzdfYXJnMl9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV83X2FyZzNfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfN19hcmc0X1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOltcInRoaXNfd2FycGVkXCJdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keTpcInt9XCIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGRlYnVnOiExLGZ1bmNOYW1lOlwid2FycDFEXCIsYmxvY2tTaXplOjY0fSksbz10KFwiY3dpc2UvbGliL3dyYXBwZXJcIikoe2FyZ3M6W1wiaW5kZXhcIixcImFycmF5XCIsXCJzY2FsYXJcIixcInNjYWxhclwiLFwic2NhbGFyXCJdLHByZTp7Ym9keTpcInt0aGlzX3dhcnBlZD1bMCwwXX1cIixhcmdzOltdLHRoaXNWYXJzOltcInRoaXNfd2FycGVkXCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keTpcIntfaW5saW5lXzEwX2FyZzJfKHRoaXNfd2FycGVkLF9pbmxpbmVfMTBfYXJnMF8pLF9pbmxpbmVfMTBfYXJnMV89X2lubGluZV8xMF9hcmczXyhfaW5saW5lXzEwX2FyZzRfLHRoaXNfd2FycGVkWzBdLHRoaXNfd2FycGVkWzFdKX1cIixhcmdzOlt7bmFtZTpcIl9pbmxpbmVfMTBfYXJnMF9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xMF9hcmcxX1wiLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzEwX2FyZzJfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfMTBfYXJnM19cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xMF9hcmc0X1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOltcInRoaXNfd2FycGVkXCJdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keTpcInt9XCIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGRlYnVnOiExLGZ1bmNOYW1lOlwid2FycDJEXCIsYmxvY2tTaXplOjY0fSkscz10KFwiY3dpc2UvbGliL3dyYXBwZXJcIikoe2FyZ3M6W1wiaW5kZXhcIixcImFycmF5XCIsXCJzY2FsYXJcIixcInNjYWxhclwiLFwic2NhbGFyXCJdLHByZTp7Ym9keTpcInt0aGlzX3dhcnBlZD1bMCwwLDBdfVwiLGFyZ3M6W10sdGhpc1ZhcnM6W1widGhpc193YXJwZWRcIl0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5Olwie19pbmxpbmVfMTNfYXJnMl8odGhpc193YXJwZWQsX2lubGluZV8xM19hcmcwXyksX2lubGluZV8xM19hcmcxXz1faW5saW5lXzEzX2FyZzNfKF9pbmxpbmVfMTNfYXJnNF8sdGhpc193YXJwZWRbMF0sdGhpc193YXJwZWRbMV0sdGhpc193YXJwZWRbMl0pfVwiLGFyZ3M6W3tuYW1lOlwiX2lubGluZV8xM19hcmcwX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzEzX2FyZzFfXCIsbHZhbHVlOiEwLHJ2YWx1ZTohMSxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfMTNfYXJnMl9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xM19hcmczX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzEzX2FyZzRfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sdGhpc1ZhcnM6W1widGhpc193YXJwZWRcIl0sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5Olwie31cIixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZGVidWc6ITEsZnVuY05hbWU6XCJ3YXJwM0RcIixibG9ja1NpemU6NjR9KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3N3aXRjaChlLnNoYXBlLmxlbmd0aCl7Y2FzZSAxOmEodCxyLG4uZDEsZSk7YnJlYWs7Y2FzZSAyOm8odCxyLG4uZDIsZSk7YnJlYWs7Y2FzZSAzOnModCxyLG4uZDMsZSk7YnJlYWs7ZGVmYXVsdDppKHQscixuLmJpbmQodm9pZCAwLGUpLGUuc2hhcGUubGVuZ3RoKX1yZXR1cm4gdH19LHtcImN3aXNlL2xpYi93cmFwcGVyXCI6MTQwLFwibmRhcnJheS1saW5lYXItaW50ZXJwb2xhdGVcIjo0MzZ9XSw0NDM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiaW90YS1hcnJheVwiKSxpPXQoXCJpcy1idWZmZXJcIiksYT1cInVuZGVmaW5lZFwiIT10eXBlb2YgRmxvYXQ2NEFycmF5O2Z1bmN0aW9uIG8odCxlKXtyZXR1cm4gdFswXS1lWzBdfWZ1bmN0aW9uIHMoKXt2YXIgdCxlPXRoaXMuc3RyaWRlLHI9bmV3IEFycmF5KGUubGVuZ3RoKTtmb3IodD0wO3Q8ci5sZW5ndGg7Kyt0KXJbdF09W01hdGguYWJzKGVbdF0pLHRdO3Iuc29ydChvKTt2YXIgbj1uZXcgQXJyYXkoci5sZW5ndGgpO2Zvcih0PTA7dDxuLmxlbmd0aDsrK3Qpblt0XT1yW3RdWzFdO3JldHVybiBufWZ1bmN0aW9uIGwodCxlKXt2YXIgcj1bXCJWaWV3XCIsZSxcImRcIix0XS5qb2luKFwiXCIpO2U8MCYmKHI9XCJWaWV3X05pbFwiK3QpO3ZhciBpPVwiZ2VuZXJpY1wiPT09dDtpZigtMT09PWUpe3ZhciBhPVwiZnVuY3Rpb24gXCIrcitcIihhKXt0aGlzLmRhdGE9YTt9O3ZhciBwcm90bz1cIityK1wiLnByb3RvdHlwZTtwcm90by5kdHlwZT0nXCIrdCtcIic7cHJvdG8uaW5kZXg9ZnVuY3Rpb24oKXtyZXR1cm4gLTF9O3Byb3RvLnNpemU9MDtwcm90by5kaW1lbnNpb249LTE7cHJvdG8uc2hhcGU9cHJvdG8uc3RyaWRlPXByb3RvLm9yZGVyPVtdO3Byb3RvLmxvPXByb3RvLmhpPXByb3RvLnRyYW5zcG9zZT1wcm90by5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBcIityK1wiKHRoaXMuZGF0YSk7fTtwcm90by5nZXQ9cHJvdG8uc2V0PWZ1bmN0aW9uKCl7fTtwcm90by5waWNrPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9O3JldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RfXCIrcitcIihhKXtyZXR1cm4gbmV3IFwiK3IrXCIoYSk7fVwiO3JldHVybiBuZXcgRnVuY3Rpb24oYSkoKX1pZigwPT09ZSl7YT1cImZ1bmN0aW9uIFwiK3IrXCIoYSxkKSB7dGhpcy5kYXRhID0gYTt0aGlzLm9mZnNldCA9IGR9O3ZhciBwcm90bz1cIityK1wiLnByb3RvdHlwZTtwcm90by5kdHlwZT0nXCIrdCtcIic7cHJvdG8uaW5kZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZmZzZXR9O3Byb3RvLmRpbWVuc2lvbj0wO3Byb3RvLnNpemU9MTtwcm90by5zaGFwZT1wcm90by5zdHJpZGU9cHJvdG8ub3JkZXI9W107cHJvdG8ubG89cHJvdG8uaGk9cHJvdG8udHJhbnNwb3NlPXByb3RvLnN0ZXA9ZnVuY3Rpb24gXCIrcitcIl9jb3B5KCkge3JldHVybiBuZXcgXCIrcitcIih0aGlzLmRhdGEsdGhpcy5vZmZzZXQpfTtwcm90by5waWNrPWZ1bmN0aW9uIFwiK3IrXCJfcGljaygpe3JldHVybiBUcml2aWFsQXJyYXkodGhpcy5kYXRhKTt9O3Byb3RvLnZhbHVlT2Y9cHJvdG8uZ2V0PWZ1bmN0aW9uIFwiK3IrXCJfZ2V0KCl7cmV0dXJuIFwiKyhpP1widGhpcy5kYXRhLmdldCh0aGlzLm9mZnNldClcIjpcInRoaXMuZGF0YVt0aGlzLm9mZnNldF1cIikrXCJ9O3Byb3RvLnNldD1mdW5jdGlvbiBcIityK1wiX3NldCh2KXtyZXR1cm4gXCIrKGk/XCJ0aGlzLmRhdGEuc2V0KHRoaXMub2Zmc2V0LHYpXCI6XCJ0aGlzLmRhdGFbdGhpcy5vZmZzZXRdPXZcIikrXCJ9O3JldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RfXCIrcitcIihhLGIsYyxkKXtyZXR1cm4gbmV3IFwiK3IrXCIoYSxkKX1cIjtyZXR1cm4gbmV3IEZ1bmN0aW9uKFwiVHJpdmlhbEFycmF5XCIsYSkoY1t0XVswXSl9YT1bXCIndXNlIHN0cmljdCdcIl07dmFyIG89bihlKSxsPW8ubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiaVwiK3R9KSx1PVwidGhpcy5vZmZzZXQrXCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJ0aGlzLnN0cmlkZVtcIit0K1wiXSppXCIrdH0pLmpvaW4oXCIrXCIpLGg9by5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJiXCIrdH0pLmpvaW4oXCIsXCIpLGY9by5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJjXCIrdH0pLmpvaW4oXCIsXCIpO2EucHVzaChcImZ1bmN0aW9uIFwiK3IrXCIoYSxcIitoK1wiLFwiK2YrXCIsZCl7dGhpcy5kYXRhPWFcIixcInRoaXMuc2hhcGU9W1wiK2grXCJdXCIsXCJ0aGlzLnN0cmlkZT1bXCIrZitcIl1cIixcInRoaXMub2Zmc2V0PWR8MH1cIixcInZhciBwcm90bz1cIityK1wiLnByb3RvdHlwZVwiLFwicHJvdG8uZHR5cGU9J1wiK3QrXCInXCIsXCJwcm90by5kaW1lbnNpb249XCIrZSksYS5wdXNoKFwiT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvLCdzaXplJyx7Z2V0OmZ1bmN0aW9uIFwiK3IrXCJfc2l6ZSgpe3JldHVybiBcIitvLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cInRoaXMuc2hhcGVbXCIrdCtcIl1cIn0pLmpvaW4oXCIqXCIpLFwifX0pXCIpLDE9PT1lP2EucHVzaChcInByb3RvLm9yZGVyPVswXVwiKTooYS5wdXNoKFwiT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvLCdvcmRlcicse2dldDpcIiksZTw0PyhhLnB1c2goXCJmdW5jdGlvbiBcIityK1wiX29yZGVyKCl7XCIpLDI9PT1lP2EucHVzaChcInJldHVybiAoTWF0aC5hYnModGhpcy5zdHJpZGVbMF0pPk1hdGguYWJzKHRoaXMuc3RyaWRlWzFdKSk/WzEsMF06WzAsMV19fSlcIik6Mz09PWUmJmEucHVzaChcInZhciBzMD1NYXRoLmFicyh0aGlzLnN0cmlkZVswXSksczE9TWF0aC5hYnModGhpcy5zdHJpZGVbMV0pLHMyPU1hdGguYWJzKHRoaXMuc3RyaWRlWzJdKTtpZihzMD5zMSl7aWYoczE+czIpe3JldHVybiBbMiwxLDBdO31lbHNlIGlmKHMwPnMyKXtyZXR1cm4gWzEsMiwwXTt9ZWxzZXtyZXR1cm4gWzEsMCwyXTt9fWVsc2UgaWYoczA+czIpe3JldHVybiBbMiwwLDFdO31lbHNlIGlmKHMyPnMxKXtyZXR1cm4gWzAsMSwyXTt9ZWxzZXtyZXR1cm4gWzAsMiwxXTt9fX0pXCIpKTphLnB1c2goXCJPUkRFUn0pXCIpKSxhLnB1c2goXCJwcm90by5zZXQ9ZnVuY3Rpb24gXCIrcitcIl9zZXQoXCIrbC5qb2luKFwiLFwiKStcIix2KXtcIiksaT9hLnB1c2goXCJyZXR1cm4gdGhpcy5kYXRhLnNldChcIit1K1wiLHYpfVwiKTphLnB1c2goXCJyZXR1cm4gdGhpcy5kYXRhW1wiK3UrXCJdPXZ9XCIpLGEucHVzaChcInByb3RvLmdldD1mdW5jdGlvbiBcIityK1wiX2dldChcIitsLmpvaW4oXCIsXCIpK1wiKXtcIiksaT9hLnB1c2goXCJyZXR1cm4gdGhpcy5kYXRhLmdldChcIit1K1wiKX1cIik6YS5wdXNoKFwicmV0dXJuIHRoaXMuZGF0YVtcIit1K1wiXX1cIiksYS5wdXNoKFwicHJvdG8uaW5kZXg9ZnVuY3Rpb24gXCIrcitcIl9pbmRleChcIixsLmpvaW4oKSxcIil7cmV0dXJuIFwiK3UrXCJ9XCIpLGEucHVzaChcInByb3RvLmhpPWZ1bmN0aW9uIFwiK3IrXCJfaGkoXCIrbC5qb2luKFwiLFwiKStcIil7cmV0dXJuIG5ldyBcIityK1wiKHRoaXMuZGF0YSxcIitvLm1hcChmdW5jdGlvbih0KXtyZXR1cm5bXCIodHlwZW9mIGlcIix0LFwiIT09J251bWJlcid8fGlcIix0LFwiPDApP3RoaXMuc2hhcGVbXCIsdCxcIl06aVwiLHQsXCJ8MFwiXS5qb2luKFwiXCIpfSkuam9pbihcIixcIikrXCIsXCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJ0aGlzLnN0cmlkZVtcIit0K1wiXVwifSkuam9pbihcIixcIikrXCIsdGhpcy5vZmZzZXQpfVwiKTt2YXIgcD1vLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cImFcIit0K1wiPXRoaXMuc2hhcGVbXCIrdCtcIl1cIn0pLGQ9by5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJjXCIrdCtcIj10aGlzLnN0cmlkZVtcIit0K1wiXVwifSk7YS5wdXNoKFwicHJvdG8ubG89ZnVuY3Rpb24gXCIrcitcIl9sbyhcIitsLmpvaW4oXCIsXCIpK1wiKXt2YXIgYj10aGlzLm9mZnNldCxkPTAsXCIrcC5qb2luKFwiLFwiKStcIixcIitkLmpvaW4oXCIsXCIpKTtmb3IodmFyIGc9MDtnPGU7KytnKWEucHVzaChcImlmKHR5cGVvZiBpXCIrZytcIj09PSdudW1iZXInJiZpXCIrZytcIj49MCl7ZD1pXCIrZytcInwwO2IrPWNcIitnK1wiKmQ7YVwiK2crXCItPWR9XCIpO2EucHVzaChcInJldHVybiBuZXcgXCIrcitcIih0aGlzLmRhdGEsXCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJhXCIrdH0pLmpvaW4oXCIsXCIpK1wiLFwiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiY1wiK3R9KS5qb2luKFwiLFwiKStcIixiKX1cIiksYS5wdXNoKFwicHJvdG8uc3RlcD1mdW5jdGlvbiBcIityK1wiX3N0ZXAoXCIrbC5qb2luKFwiLFwiKStcIil7dmFyIFwiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiYVwiK3QrXCI9dGhpcy5zaGFwZVtcIit0K1wiXVwifSkuam9pbihcIixcIikrXCIsXCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJiXCIrdCtcIj10aGlzLnN0cmlkZVtcIit0K1wiXVwifSkuam9pbihcIixcIikrXCIsYz10aGlzLm9mZnNldCxkPTAsY2VpbD1NYXRoLmNlaWxcIik7Zm9yKGc9MDtnPGU7KytnKWEucHVzaChcImlmKHR5cGVvZiBpXCIrZytcIj09PSdudW1iZXInKXtkPWlcIitnK1wifDA7aWYoZDwwKXtjKz1iXCIrZytcIiooYVwiK2crXCItMSk7YVwiK2crXCI9Y2VpbCgtYVwiK2crXCIvZCl9ZWxzZXthXCIrZytcIj1jZWlsKGFcIitnK1wiL2QpfWJcIitnK1wiKj1kfVwiKTthLnB1c2goXCJyZXR1cm4gbmV3IFwiK3IrXCIodGhpcy5kYXRhLFwiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiYVwiK3R9KS5qb2luKFwiLFwiKStcIixcIitvLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cImJcIit0fSkuam9pbihcIixcIikrXCIsYyl9XCIpO3ZhciB2PW5ldyBBcnJheShlKSxtPW5ldyBBcnJheShlKTtmb3IoZz0wO2c8ZTsrK2cpdltnXT1cImFbaVwiK2crXCJdXCIsbVtnXT1cImJbaVwiK2crXCJdXCI7YS5wdXNoKFwicHJvdG8udHJhbnNwb3NlPWZ1bmN0aW9uIFwiK3IrXCJfdHJhbnNwb3NlKFwiK2wrXCIpe1wiK2wubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrXCI9KFwiK3QrXCI9PT11bmRlZmluZWQ/XCIrZStcIjpcIit0K1wifDApXCJ9KS5qb2luKFwiO1wiKSxcInZhciBhPXRoaXMuc2hhcGUsYj10aGlzLnN0cmlkZTtyZXR1cm4gbmV3IFwiK3IrXCIodGhpcy5kYXRhLFwiK3Yuam9pbihcIixcIikrXCIsXCIrbS5qb2luKFwiLFwiKStcIix0aGlzLm9mZnNldCl9XCIpLGEucHVzaChcInByb3RvLnBpY2s9ZnVuY3Rpb24gXCIrcitcIl9waWNrKFwiK2wrXCIpe3ZhciBhPVtdLGI9W10sYz10aGlzLm9mZnNldFwiKTtmb3IoZz0wO2c8ZTsrK2cpYS5wdXNoKFwiaWYodHlwZW9mIGlcIitnK1wiPT09J251bWJlcicmJmlcIitnK1wiPj0wKXtjPShjK3RoaXMuc3RyaWRlW1wiK2crXCJdKmlcIitnK1wiKXwwfWVsc2V7YS5wdXNoKHRoaXMuc2hhcGVbXCIrZytcIl0pO2IucHVzaCh0aGlzLnN0cmlkZVtcIitnK1wiXSl9XCIpO3JldHVybiBhLnB1c2goXCJ2YXIgY3Rvcj1DVE9SX0xJU1RbYS5sZW5ndGgrMV07cmV0dXJuIGN0b3IodGhpcy5kYXRhLGEsYixjKX1cIiksYS5wdXNoKFwicmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdF9cIityK1wiKGRhdGEsc2hhcGUsc3RyaWRlLG9mZnNldCl7cmV0dXJuIG5ldyBcIityK1wiKGRhdGEsXCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJzaGFwZVtcIit0K1wiXVwifSkuam9pbihcIixcIikrXCIsXCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJzdHJpZGVbXCIrdCtcIl1cIn0pLmpvaW4oXCIsXCIpK1wiLG9mZnNldCl9XCIpLG5ldyBGdW5jdGlvbihcIkNUT1JfTElTVFwiLFwiT1JERVJcIixhLmpvaW4oXCJcXG5cIikpKGNbdF0scyl9dmFyIGM9e2Zsb2F0MzI6W10sZmxvYXQ2NDpbXSxpbnQ4OltdLGludDE2OltdLGludDMyOltdLHVpbnQ4OltdLHVpbnQxNjpbXSx1aW50MzI6W10sYXJyYXk6W10sdWludDhfY2xhbXBlZDpbXSxidWZmZXI6W10sZ2VuZXJpYzpbXX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHZvaWQgMD09PXQpcmV0dXJuKDAsYy5hcnJheVswXSkoW10pO1wibnVtYmVyXCI9PXR5cGVvZiB0JiYodD1bdF0pLHZvaWQgMD09PWUmJihlPVt0Lmxlbmd0aF0pO3ZhciBvPWUubGVuZ3RoO2lmKHZvaWQgMD09PXIpe3I9bmV3IEFycmF5KG8pO2Zvcih2YXIgcz1vLTEsdT0xO3M+PTA7LS1zKXJbc109dSx1Kj1lW3NdfWlmKHZvaWQgMD09PW4pZm9yKG49MCxzPTA7czxvOysrcylyW3NdPDAmJihuLT0oZVtzXS0xKSpyW3NdKTtmb3IodmFyIGg9ZnVuY3Rpb24odCl7aWYoaSh0KSlyZXR1cm5cImJ1ZmZlclwiO2lmKGEpc3dpdGNoKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSl7Y2FzZVwiW29iamVjdCBGbG9hdDY0QXJyYXldXCI6cmV0dXJuXCJmbG9hdDY0XCI7Y2FzZVwiW29iamVjdCBGbG9hdDMyQXJyYXldXCI6cmV0dXJuXCJmbG9hdDMyXCI7Y2FzZVwiW29iamVjdCBJbnQ4QXJyYXldXCI6cmV0dXJuXCJpbnQ4XCI7Y2FzZVwiW29iamVjdCBJbnQxNkFycmF5XVwiOnJldHVyblwiaW50MTZcIjtjYXNlXCJbb2JqZWN0IEludDMyQXJyYXldXCI6cmV0dXJuXCJpbnQzMlwiO2Nhc2VcIltvYmplY3QgVWludDhBcnJheV1cIjpyZXR1cm5cInVpbnQ4XCI7Y2FzZVwiW29iamVjdCBVaW50MTZBcnJheV1cIjpyZXR1cm5cInVpbnQxNlwiO2Nhc2VcIltvYmplY3QgVWludDMyQXJyYXldXCI6cmV0dXJuXCJ1aW50MzJcIjtjYXNlXCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XVwiOnJldHVyblwidWludDhfY2xhbXBlZFwifXJldHVybiBBcnJheS5pc0FycmF5KHQpP1wiYXJyYXlcIjpcImdlbmVyaWNcIn0odCksZj1jW2hdO2YubGVuZ3RoPD1vKzE7KWYucHVzaChsKGgsZi5sZW5ndGgtMSkpO3JldHVybigwLGZbbysxXSkodCxlLHIsbil9fSx7XCJpb3RhLWFycmF5XCI6NDA5LFwiaXMtYnVmZmVyXCI6NDExfV0sNDQ0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImRvdWJsZS1iaXRzXCIpLGk9TWF0aC5wb3coMiwtMTA3NCksYT0tMT4+PjA7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoaXNOYU4odCl8fGlzTmFOKGUpKXJldHVybiBOYU47aWYodD09PWUpcmV0dXJuIHQ7aWYoMD09PXQpcmV0dXJuIGU8MD8taTppO3ZhciByPW4uaGkodCksbz1uLmxvKHQpO2U+dD09dD4wP289PT1hPyhyKz0xLG89MCk6bys9MTowPT09bz8obz1hLHItPTEpOm8tPTE7cmV0dXJuIG4ucGFjayhvLHIpfX0se1wiZG91YmxlLWJpdHNcIjoxNTl9XSw0NDU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLlBJLGk9YygxMjApO2Z1bmN0aW9uIGEodCxlLHIsbil7cmV0dXJuW1wiQ1wiLHQsZSxyLG4scixuXX1mdW5jdGlvbiBvKHQsZSxyLG4saSxhKXtyZXR1cm5bXCJDXCIsdC8zKzIvMypyLGUvMysyLzMqbixpLzMrMi8zKnIsYS8zKzIvMypuLGksYV19ZnVuY3Rpb24gcyh0LGUscixhLG8sYyx1LGgsZixwKXtpZihwKWs9cFswXSxBPXBbMV0sXz1wWzJdLHc9cFszXTtlbHNle3ZhciBkPWwodCxlLC1vKTt0PWQueCxlPWQueTt2YXIgZz0odC0oaD0oZD1sKGgsZiwtbykpLngpKS8yLHY9KGUtKGY9ZC55KSkvMixtPWcqZy8ocipyKSt2KnYvKGEqYSk7bT4xJiYocio9bT1NYXRoLnNxcnQobSksYSo9bSk7dmFyIHk9cipyLHg9YSphLGI9KGM9PXU/LTE6MSkqTWF0aC5zcXJ0KE1hdGguYWJzKCh5KngteSp2KnYteCpnKmcpLyh5KnYqdit4KmcqZykpKTtiPT0xLzAmJihiPTEpO3ZhciBfPWIqcip2L2ErKHQraCkvMix3PWIqLWEqZy9yKyhlK2YpLzIsaz1NYXRoLmFzaW4oKChlLXcpL2EpLnRvRml4ZWQoOSkpLEE9TWF0aC5hc2luKCgoZi13KS9hKS50b0ZpeGVkKDkpKTsoaz10PF8/bi1rOmspPDAmJihrPTIqbitrKSwoQT1oPF8/bi1BOkEpPDAmJihBPTIqbitBKSx1JiZrPkEmJihrLT0yKm4pLCF1JiZBPmsmJihBLT0yKm4pfWlmKE1hdGguYWJzKEEtayk+aSl7dmFyIFQ9QSxNPWgsUz1mO0E9aytpKih1JiZBPms/MTotMSk7dmFyIEU9cyhoPV8rcipNYXRoLmNvcyhBKSxmPXcrYSpNYXRoLnNpbihBKSxyLGEsbywwLHUsTSxTLFtBLFQsXyx3XSl9dmFyIEM9TWF0aC50YW4oKEEtaykvNCksTD00LzMqcipDLHo9NC8zKmEqQyxPPVsyKnQtKHQrTCpNYXRoLnNpbihrKSksMiplLShlLXoqTWF0aC5jb3MoaykpLGgrTCpNYXRoLnNpbihBKSxmLXoqTWF0aC5jb3MoQSksaCxmXTtpZihwKXJldHVybiBPO0UmJihPPU8uY29uY2F0KEUpKTtmb3IodmFyIEk9MDtJPE8ubGVuZ3RoOyl7dmFyIEQ9bChPW0ldLE9bSSsxXSxvKTtPW0krK109RC54LE9bSSsrXT1ELnl9cmV0dXJuIE99ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJue3g6dCpNYXRoLmNvcyhyKS1lKk1hdGguc2luKHIpLHk6dCpNYXRoLnNpbihyKStlKk1hdGguY29zKHIpfX1mdW5jdGlvbiBjKHQpe3JldHVybiB0KihuLzE4MCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPVtdLG49MCxpPTAsbD0wLHU9MCxoPW51bGwsZj1udWxsLHA9MCxkPTAsZz0wLHY9dC5sZW5ndGg7Zzx2O2crKyl7dmFyIG09dFtnXSx5PW1bMF07c3dpdGNoKHkpe2Nhc2VcIk1cIjpsPW1bMV0sdT1tWzJdO2JyZWFrO2Nhc2VcIkFcIjoobT1zKHAsZCxtWzFdLG1bMl0sYyhtWzNdKSxtWzRdLG1bNV0sbVs2XSxtWzddKSkudW5zaGlmdChcIkNcIiksbS5sZW5ndGg+NyYmKHIucHVzaChtLnNwbGljZSgwLDcpKSxtLnVuc2hpZnQoXCJDXCIpKTticmVhaztjYXNlXCJTXCI6dmFyIHg9cCxiPWQ7XCJDXCIhPWUmJlwiU1wiIT1lfHwoeCs9eC1uLGIrPWItaSksbT1bXCJDXCIseCxiLG1bMV0sbVsyXSxtWzNdLG1bNF1dO2JyZWFrO2Nhc2VcIlRcIjpcIlFcIj09ZXx8XCJUXCI9PWU/KGg9MipwLWgsZj0yKmQtZik6KGg9cCxmPWQpLG09byhwLGQsaCxmLG1bMV0sbVsyXSk7YnJlYWs7Y2FzZVwiUVwiOmg9bVsxXSxmPW1bMl0sbT1vKHAsZCxtWzFdLG1bMl0sbVszXSxtWzRdKTticmVhaztjYXNlXCJMXCI6bT1hKHAsZCxtWzFdLG1bMl0pO2JyZWFrO2Nhc2VcIkhcIjptPWEocCxkLG1bMV0sZCk7YnJlYWs7Y2FzZVwiVlwiOm09YShwLGQscCxtWzFdKTticmVhaztjYXNlXCJaXCI6bT1hKHAsZCxsLHUpfWU9eSxwPW1bbS5sZW5ndGgtMl0sZD1tW20ubGVuZ3RoLTFdLG0ubGVuZ3RoPjQ/KG49bVttLmxlbmd0aC00XSxpPW1bbS5sZW5ndGgtM10pOihuPXAsaT1kKSxyLnB1c2gobSl9cmV0dXJuIHJ9fSx7fV0sNDQ2OltmdW5jdGlvbih0LGUscil7ci52ZXJ0ZXhOb3JtYWxzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ZS5sZW5ndGgsaT1uZXcgQXJyYXkobiksYT12b2lkIDA9PT1yPzFlLTY6cixvPTA7bzxuOysrbylpW29dPVswLDAsMF07Zm9yKG89MDtvPHQubGVuZ3RoOysrbylmb3IodmFyIHM9dFtvXSxsPTAsYz1zW3MubGVuZ3RoLTFdLHU9c1swXSxoPTA7aDxzLmxlbmd0aDsrK2gpe2w9YyxjPXUsdT1zWyhoKzEpJXMubGVuZ3RoXTtmb3IodmFyIGY9ZVtsXSxwPWVbY10sZD1lW3VdLGc9bmV3IEFycmF5KDMpLHY9MCxtPW5ldyBBcnJheSgzKSx5PTAseD0wO3g8MzsrK3gpZ1t4XT1mW3hdLXBbeF0sdis9Z1t4XSpnW3hdLG1beF09ZFt4XS1wW3hdLHkrPW1beF0qbVt4XTtpZih2Knk+YSl7dmFyIGI9aVtjXSxfPTEvTWF0aC5zcXJ0KHYqeSk7Zm9yKHg9MDt4PDM7Kyt4KXt2YXIgdz0oeCsxKSUzLGs9KHgrMiklMztiW3hdKz1fKihtW3ddKmdba10tbVtrXSpnW3ddKX19fWZvcihvPTA7bzxuOysrbyl7Yj1pW29dO3ZhciBBPTA7Zm9yKHg9MDt4PDM7Kyt4KUErPWJbeF0qYlt4XTtpZihBPmEpZm9yKF89MS9NYXRoLnNxcnQoQSkseD0wO3g8MzsrK3gpYlt4XSo9XztlbHNlIGZvcih4PTA7eDwzOysreCliW3hdPTB9cmV0dXJuIGl9LHIuZmFjZU5vcm1hbHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj10Lmxlbmd0aCxpPW5ldyBBcnJheShuKSxhPXZvaWQgMD09PXI/MWUtNjpyLG89MDtvPG47KytvKXtmb3IodmFyIHM9dFtvXSxsPW5ldyBBcnJheSgzKSxjPTA7YzwzOysrYylsW2NdPWVbc1tjXV07dmFyIHU9bmV3IEFycmF5KDMpLGg9bmV3IEFycmF5KDMpO2ZvcihjPTA7YzwzOysrYyl1W2NdPWxbMV1bY10tbFswXVtjXSxoW2NdPWxbMl1bY10tbFswXVtjXTt2YXIgZj1uZXcgQXJyYXkoMykscD0wO2ZvcihjPTA7YzwzOysrYyl7dmFyIGQ9KGMrMSklMyxnPShjKzIpJTM7ZltjXT11W2RdKmhbZ10tdVtnXSpoW2RdLHArPWZbY10qZltjXX1wPXA+YT8xL01hdGguc3FydChwKTowO2ZvcihjPTA7YzwzOysrYylmW2NdKj1wO2lbb109Zn1yZXR1cm4gaX19LHt9XSw0NDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxhPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO3ZhciB0PW5ldyBTdHJpbmcoXCJhYmNcIik7aWYodFs1XT1cImRlXCIsXCI1XCI9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KVswXSlyZXR1cm4hMTtmb3IodmFyIGU9e30scj0wO3I8MTA7cisrKWVbXCJfXCIrU3RyaW5nLmZyb21DaGFyQ29kZShyKV09cjtpZihcIjAxMjM0NTY3ODlcIiE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pLmpvaW4oXCJcIikpcmV0dXJuITE7dmFyIG49e307cmV0dXJuXCJhYmNkZWZnaGlqa2xtbm9wcXJzdFwiLnNwbGl0KFwiXCIpLmZvckVhY2goZnVuY3Rpb24odCl7blt0XT10fSksXCJhYmNkZWZnaGlqa2xtbm9wcXJzdFwiPT09T2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxuKSkuam9pbihcIlwiKX1jYXRjaCh0KXtyZXR1cm4hMX19KCk/T2JqZWN0LmFzc2lnbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcixvLHM9ZnVuY3Rpb24odCl7aWYobnVsbD09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWRcIik7cmV0dXJuIE9iamVjdCh0KX0odCksbD0xO2w8YXJndW1lbnRzLmxlbmd0aDtsKyspe2Zvcih2YXIgYyBpbiByPU9iamVjdChhcmd1bWVudHNbbF0pKWkuY2FsbChyLGMpJiYoc1tjXT1yW2NdKTtpZihuKXtvPW4ocik7Zm9yKHZhciB1PTA7dTxvLmxlbmd0aDt1KyspYS5jYWxsKHIsb1t1XSkmJihzW29bdV1dPXJbb1t1XV0pfX1yZXR1cm4gc319LHt9XSw0NDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyl7dmFyIHU9ZSthK2M7aWYoaD4wKXt2YXIgaD1NYXRoLnNxcnQodSsxKTt0WzBdPS41KihvLWwpL2gsdFsxXT0uNSoocy1uKS9oLHRbMl09LjUqKHItYSkvaCx0WzNdPS41Kmh9ZWxzZXt2YXIgZj1NYXRoLm1heChlLGEsYyksaD1NYXRoLnNxcnQoMipmLXUrMSk7ZT49Zj8odFswXT0uNSpoLHRbMV09LjUqKGkrcikvaCx0WzJdPS41KihzK24pL2gsdFszXT0uNSooby1sKS9oKTphPj1mPyh0WzBdPS41KihyK2kpL2gsdFsxXT0uNSpoLHRbMl09LjUqKGwrbykvaCx0WzNdPS41KihzLW4pL2gpOih0WzBdPS41KihuK3MpL2gsdFsxXT0uNSoobytsKS9oLHRbMl09LjUqaCx0WzNdPS41KihyLWkpL2gpfXJldHVybiB0fX0se31dLDQ0OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuY2VudGVyfHxbMCwwLDBdLHI9dC5yb3RhdGlvbnx8WzAsMCwwLDFdLG49dC5yYWRpdXN8fDE7ZT1bXS5zbGljZS5jYWxsKGUsMCwzKSx1KHI9W10uc2xpY2UuY2FsbChyLDAsNCkscik7dmFyIGk9bmV3IGgocixlLE1hdGgubG9nKG4pKTtpLnNldERpc3RhbmNlTGltaXRzKHQuem9vbU1pbix0Lnpvb21NYXgpLChcImV5ZVwiaW4gdHx8XCJ1cFwiaW4gdCkmJmkubG9va0F0KDAsdC5leWUsdC5jZW50ZXIsdC51cCk7cmV0dXJuIGl9O3ZhciBuPXQoXCJmaWx0ZXJlZC12ZWN0b3JcIiksaT10KFwiZ2wtbWF0NC9sb29rQXRcIiksYT10KFwiZ2wtbWF0NC9mcm9tUXVhdFwiKSxvPXQoXCJnbC1tYXQ0L2ludmVydFwiKSxzPXQoXCIuL2xpYi9xdWF0RnJvbUZyYW1lXCIpO2Z1bmN0aW9uIGwodCxlLHIpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codCwyKStNYXRoLnBvdyhlLDIpK01hdGgucG93KHIsMikpfWZ1bmN0aW9uIGModCxlLHIsbil7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyh0LDIpK01hdGgucG93KGUsMikrTWF0aC5wb3cociwyKStNYXRoLnBvdyhuLDIpKX1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPWMocixuLGksYSk7bz4xZS02Pyh0WzBdPXIvbyx0WzFdPW4vbyx0WzJdPWkvbyx0WzNdPWEvbyk6KHRbMF09dFsxXT10WzJdPTAsdFszXT0xKX1mdW5jdGlvbiBoKHQsZSxyKXt0aGlzLnJhZGl1cz1uKFtyXSksdGhpcy5jZW50ZXI9bihlKSx0aGlzLnJvdGF0aW9uPW4odCksdGhpcy5jb21wdXRlZFJhZGl1cz10aGlzLnJhZGl1cy5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkQ2VudGVyPXRoaXMuY2VudGVyLmN1cnZlKDApLHRoaXMuY29tcHV0ZWRSb3RhdGlvbj10aGlzLnJvdGF0aW9uLmN1cnZlKDApLHRoaXMuY29tcHV0ZWRVcD1bLjEsMCwwXSx0aGlzLmNvbXB1dGVkRXllPVsuMSwwLDBdLHRoaXMuY29tcHV0ZWRNYXRyaXg9Wy4xLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXSx0aGlzLnJlY2FsY01hdHJpeCgwKX12YXIgZj1oLnByb3RvdHlwZTtmLmxhc3RUPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMucmFkaXVzLmxhc3RUKCksdGhpcy5jZW50ZXIubGFzdFQoKSx0aGlzLnJvdGF0aW9uLmxhc3RUKCkpfSxmLnJlY2FsY01hdHJpeD1mdW5jdGlvbih0KXt0aGlzLnJhZGl1cy5jdXJ2ZSh0KSx0aGlzLmNlbnRlci5jdXJ2ZSh0KSx0aGlzLnJvdGF0aW9uLmN1cnZlKHQpO3ZhciBlPXRoaXMuY29tcHV0ZWRSb3RhdGlvbjt1KGUsZSk7dmFyIHI9dGhpcy5jb21wdXRlZE1hdHJpeDthKHIsZSk7dmFyIG49dGhpcy5jb21wdXRlZENlbnRlcixpPXRoaXMuY29tcHV0ZWRFeWUsbz10aGlzLmNvbXB1dGVkVXAscz1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKTtpWzBdPW5bMF0rcypyWzJdLGlbMV09blsxXStzKnJbNl0saVsyXT1uWzJdK3MqclsxMF0sb1swXT1yWzFdLG9bMV09cls1XSxvWzJdPXJbOV07Zm9yKHZhciBsPTA7bDwzOysrbCl7Zm9yKHZhciBjPTAsaD0wO2g8MzsrK2gpYys9cltsKzQqaF0qaVtoXTtyWzEyK2xdPS1jfX0sZi5nZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXt0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgcj10aGlzLmNvbXB1dGVkTWF0cml4O2lmKGUpe2Zvcih2YXIgbj0wO248MTY7KytuKWVbbl09cltuXTtyZXR1cm4gZX1yZXR1cm4gcn0sZi5pZGxlPWZ1bmN0aW9uKHQpe3RoaXMuY2VudGVyLmlkbGUodCksdGhpcy5yYWRpdXMuaWRsZSh0KSx0aGlzLnJvdGF0aW9uLmlkbGUodCl9LGYuZmx1c2g9ZnVuY3Rpb24odCl7dGhpcy5jZW50ZXIuZmx1c2godCksdGhpcy5yYWRpdXMuZmx1c2godCksdGhpcy5yb3RhdGlvbi5mbHVzaCh0KX0sZi5wYW49ZnVuY3Rpb24odCxlLHIsbil7ZT1lfHwwLHI9cnx8MCxuPW58fDAsdGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZE1hdHJpeCxhPWlbMV0sbz1pWzVdLHM9aVs5XSxjPWwoYSxvLHMpO2EvPWMsby89YyxzLz1jO3ZhciB1PWlbMF0saD1pWzRdLGY9aVs4XSxwPXUqYStoKm8rZipzLGQ9bCh1LT1hKnAsaC09bypwLGYtPXMqcCk7dS89ZCxoLz1kLGYvPWQ7dmFyIGc9aVsyXSx2PWlbNl0sbT1pWzEwXSx5PWcqYSt2Km8rbSpzLHg9Zyp1K3YqaCttKmYsYj1sKGctPXkqYSt4KnUsdi09eSpvK3gqaCxtLT15KnMreCpmKTtnLz1iLHYvPWIsbS89Yjt2YXIgXz11KmUrYSpyLHc9aCplK28qcixrPWYqZStzKnI7dGhpcy5jZW50ZXIubW92ZSh0LF8sdyxrKTt2YXIgQT1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKTtBPU1hdGgubWF4KDFlLTQsQStuKSx0aGlzLnJhZGl1cy5zZXQodCxNYXRoLmxvZyhBKSl9LGYucm90YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpLGU9ZXx8MCxyPXJ8fDA7dmFyIGk9dGhpcy5jb21wdXRlZE1hdHJpeCxhPWlbMF0sbz1pWzRdLHM9aVs4XSx1PWlbMV0saD1pWzVdLGY9aVs5XSxwPWlbMl0sZD1pWzZdLGc9aVsxMF0sdj1lKmErcip1LG09ZSpvK3IqaCx5PWUqcytyKmYseD0tKGQqeS1nKm0pLGI9LShnKnYtcCp5KSxfPS0ocCptLWQqdiksdz1NYXRoLnNxcnQoTWF0aC5tYXgoMCwxLU1hdGgucG93KHgsMiktTWF0aC5wb3coYiwyKS1NYXRoLnBvdyhfLDIpKSksaz1jKHgsYixfLHcpO2s+MWUtNj8oeC89ayxiLz1rLF8vPWssdy89ayk6KHg9Yj1fPTAsdz0xKTt2YXIgQT10aGlzLmNvbXB1dGVkUm90YXRpb24sVD1BWzBdLE09QVsxXSxTPUFbMl0sRT1BWzNdLEM9VCp3K0UqeCtNKl8tUypiLEw9TSp3K0UqYitTKngtVCpfLHo9Uyp3K0UqXytUKmItTSp4LE89RSp3LVQqeC1NKmItUypfO2lmKG4pe3g9cCxiPWQsXz1nO3ZhciBJPU1hdGguc2luKG4pL2woeCxiLF8pO3gqPUksYio9SSxfKj1JLE89Tyoodz1NYXRoLmNvcyhlKSktKEM9Qyp3K08qeCtMKl8teipiKSp4LShMPUwqdytPKmIreip4LUMqXykqYi0oej16KncrTypfK0MqYi1MKngpKl99dmFyIEQ9YyhDLEwseixPKTtEPjFlLTY/KEMvPUQsTC89RCx6Lz1ELE8vPUQpOihDPUw9ej0wLE89MSksdGhpcy5yb3RhdGlvbi5zZXQodCxDLEwseixPKX0sZi5sb29rQXQ9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5yZWNhbGNNYXRyaXgodCkscj1yfHx0aGlzLmNvbXB1dGVkQ2VudGVyLGU9ZXx8dGhpcy5jb21wdXRlZEV5ZSxuPW58fHRoaXMuY29tcHV0ZWRVcDt2YXIgYT10aGlzLmNvbXB1dGVkTWF0cml4O2koYSxlLHIsbik7dmFyIG89dGhpcy5jb21wdXRlZFJvdGF0aW9uO3MobyxhWzBdLGFbMV0sYVsyXSxhWzRdLGFbNV0sYVs2XSxhWzhdLGFbOV0sYVsxMF0pLHUobyxvKSx0aGlzLnJvdGF0aW9uLnNldCh0LG9bMF0sb1sxXSxvWzJdLG9bM10pO2Zvcih2YXIgbD0wLGM9MDtjPDM7KytjKWwrPU1hdGgucG93KHJbY10tZVtjXSwyKTt0aGlzLnJhZGl1cy5zZXQodCwuNSpNYXRoLmxvZyhNYXRoLm1heChsLDFlLTYpKSksdGhpcy5jZW50ZXIuc2V0KHQsclswXSxyWzFdLHJbMl0pfSxmLnRyYW5zbGF0ZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLmNlbnRlci5tb3ZlKHQsZXx8MCxyfHwwLG58fDApfSxmLnNldE1hdHJpeD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuY29tcHV0ZWRSb3RhdGlvbjtzKHIsZVswXSxlWzFdLGVbMl0sZVs0XSxlWzVdLGVbNl0sZVs4XSxlWzldLGVbMTBdKSx1KHIsciksdGhpcy5yb3RhdGlvbi5zZXQodCxyWzBdLHJbMV0sclsyXSxyWzNdKTt2YXIgbj10aGlzLmNvbXB1dGVkTWF0cml4O28obixlKTt2YXIgaT1uWzE1XTtpZihNYXRoLmFicyhpKT4xZS02KXt2YXIgYT1uWzEyXS9pLGw9blsxM10vaSxjPW5bMTRdL2k7dGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGg9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7dGhpcy5jZW50ZXIuc2V0KHQsYS1uWzJdKmgsbC1uWzZdKmgsYy1uWzEwXSpoKSx0aGlzLnJhZGl1cy5pZGxlKHQpfWVsc2UgdGhpcy5jZW50ZXIuaWRsZSh0KSx0aGlzLnJhZGl1cy5pZGxlKHQpfSxmLnNldERpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7ZT4wJiZ0aGlzLnJhZGl1cy5zZXQodCxNYXRoLmxvZyhlKSl9LGYuc2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCxlKXt0PXQ+MD9NYXRoLmxvZyh0KTotMS8wLGU9ZT4wP01hdGgubG9nKGUpOjEvMCxlPU1hdGgubWF4KGUsdCksdGhpcy5yYWRpdXMuYm91bmRzWzBdWzBdPXQsdGhpcy5yYWRpdXMuYm91bmRzWzFdWzBdPWV9LGYuZ2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5yYWRpdXMuYm91bmRzO3JldHVybiB0Pyh0WzBdPU1hdGguZXhwKGVbMF1bMF0pLHRbMV09TWF0aC5leHAoZVsxXVswXSksdCk6W01hdGguZXhwKGVbMF1bMF0pLE1hdGguZXhwKGVbMV1bMF0pXX0sZi50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWNhbGNNYXRyaXgodGhpcy5sYXN0VCgpKSx7Y2VudGVyOnRoaXMuY29tcHV0ZWRDZW50ZXIuc2xpY2UoKSxyb3RhdGlvbjp0aGlzLmNvbXB1dGVkUm90YXRpb24uc2xpY2UoKSxkaXN0YW5jZTpNYXRoLmxvZyh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKSx6b29tTWluOnRoaXMucmFkaXVzLmJvdW5kc1swXVswXSx6b29tTWF4OnRoaXMucmFkaXVzLmJvdW5kc1sxXVswXX19LGYuZnJvbUpTT049ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXN0VCgpLHI9dC5jZW50ZXI7ciYmdGhpcy5jZW50ZXIuc2V0KGUsclswXSxyWzFdLHJbMl0pO3ZhciBuPXQucm90YXRpb247biYmdGhpcy5yb3RhdGlvbi5zZXQoZSxuWzBdLG5bMV0sblsyXSxuWzNdKTt2YXIgaT10LmRpc3RhbmNlO2kmJmk+MCYmdGhpcy5yYWRpdXMuc2V0KGUsTWF0aC5sb2coaSkpLHRoaXMuc2V0RGlzdGFuY2VMaW1pdHModC56b29tTWluLHQuem9vbU1heCl9fSx7XCIuL2xpYi9xdWF0RnJvbUZyYW1lXCI6NDQ4LFwiZmlsdGVyZWQtdmVjdG9yXCI6MjIzLFwiZ2wtbWF0NC9mcm9tUXVhdFwiOjI1OSxcImdsLW1hdDQvaW52ZXJ0XCI6MjYyLFwiZ2wtbWF0NC9sb29rQXRcIjoyNjN9XSw0NTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicmVwZWF0LXN0cmluZ1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKHI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHI/citcIlwiOlwiIFwiLGUpK3R9fSx7XCJyZXBlYXQtc3RyaW5nXCI6NDg4fV0sNDUxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXJldHVyblt0XTt2YXIgcj1bdF07XCJzdHJpbmdcIj09dHlwZW9mIGV8fEFycmF5LmlzQXJyYXkoZSk/ZT17YnJhY2tldHM6ZX06ZXx8KGU9e30pO3ZhciBuPWUuYnJhY2tldHM/QXJyYXkuaXNBcnJheShlLmJyYWNrZXRzKT9lLmJyYWNrZXRzOltlLmJyYWNrZXRzXTpbXCJ7fVwiLFwiW11cIixcIigpXCJdLGk9ZS5lc2NhcGV8fFwiX19fXCIsYT0hIWUuZmxhdDtuLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9bmV3IFJlZ0V4cChbXCJcXFxcXCIsdFswXSxcIlteXFxcXFwiLHRbMF0sXCJcXFxcXCIsdFsxXSxcIl0qXFxcXFwiLHRbMV1dLmpvaW4oXCJcIikpLG49W107ZnVuY3Rpb24gYShlLGEsbyl7dmFyIHM9ci5wdXNoKGUuc2xpY2UodFswXS5sZW5ndGgsLXRbMV0ubGVuZ3RoKSktMTtyZXR1cm4gbi5wdXNoKHMpLGkrc31yLmZvckVhY2goZnVuY3Rpb24odCxuKXtmb3IodmFyIGksbz0wO3QhPWk7KWlmKGk9dCx0PXQucmVwbGFjZShlLGEpLG8rKz4xZTQpdGhyb3cgRXJyb3IoXCJSZWZlcmVuY2VzIGhhdmUgY2lyY3VsYXIgZGVwZW5kZW5jeS4gUGxlYXNlLCBjaGVjayB0aGVtLlwiKTtyW25dPXR9KSxuPW4ucmV2ZXJzZSgpLHI9ci5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbihyKXtlPWUucmVwbGFjZShuZXcgUmVnRXhwKFwiKFxcXFxcIitpK3IrXCIoPyFbMC05XSkpXCIsXCJnXCIpLHRbMF0rXCIkMVwiK3RbMV0pfSksZX0pfSk7dmFyIG89bmV3IFJlZ0V4cChcIlxcXFxcIitpK1wiKFswLTldKylcIik7cmV0dXJuIGE/cjpmdW5jdGlvbiB0KGUscixuKXtmb3IodmFyIGksYT1bXSxzPTA7aT1vLmV4ZWMoZSk7KXtpZihzKys+MWU0KXRocm93IEVycm9yKFwiQ2lyY3VsYXIgcmVmZXJlbmNlcyBpbiBwYXJlbnRoZXNpc1wiKTthLnB1c2goZS5zbGljZSgwLGkuaW5kZXgpKSxhLnB1c2godChyW2lbMV1dLHIpKSxlPWUuc2xpY2UoaS5pbmRleCtpWzBdLmxlbmd0aCl9cmV0dXJuIGEucHVzaChlKSxhfShyWzBdLHIpfWZ1bmN0aW9uIGkodCxlKXtpZihlJiZlLmZsYXQpe3ZhciByLG49ZSYmZS5lc2NhcGV8fFwiX19fXCIsaT10WzBdO2lmKCFpKXJldHVyblwiXCI7Zm9yKHZhciBhPW5ldyBSZWdFeHAoXCJcXFxcXCIrbitcIihbMC05XSspXCIpLG89MDtpIT1yOyl7aWYobysrPjFlNCl0aHJvdyBFcnJvcihcIkNpcmN1bGFyIHJlZmVyZW5jZXMgaW4gXCIrdCk7cj1pLGk9aS5yZXBsYWNlKGEscyl9cmV0dXJuIGl9cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uIHQoZSxyKXtyZXR1cm4gQXJyYXkuaXNBcnJheShyKSYmKHI9ci5yZWR1Y2UodCxcIlwiKSksZStyfSxcIlwiKTtmdW5jdGlvbiBzKGUscil7aWYobnVsbD09dFtyXSl0aHJvdyBFcnJvcihcIlJlZmVyZW5jZSBcIityK1wiaXMgdW5kZWZpbmVkXCIpO3JldHVybiB0W3JdfX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/aSh0LGUpOm4odCxlKX1hLnBhcnNlPW4sYS5zdHJpbmdpZnk9aSxlLmV4cG9ydHM9YX0se31dLDQ1MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJwaWNrLWJ5LWFsaWFzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZTthcmd1bWVudHMubGVuZ3RoPjEmJih0PWFyZ3VtZW50cyk7XCJzdHJpbmdcIj09dHlwZW9mIHQ/dD10LnNwbGl0KC9cXHMvKS5tYXAocGFyc2VGbG9hdCk6XCJudW1iZXJcIj09dHlwZW9mIHQmJih0PVt0XSk7dC5sZW5ndGgmJlwibnVtYmVyXCI9PXR5cGVvZiB0WzBdP2U9MT09PXQubGVuZ3RoP3t3aWR0aDp0WzBdLGhlaWdodDp0WzBdLHg6MCx5OjB9OjI9PT10Lmxlbmd0aD97d2lkdGg6dFswXSxoZWlnaHQ6dFsxXSx4OjAseTowfTp7eDp0WzBdLHk6dFsxXSx3aWR0aDp0WzJdLXRbMF18fDAsaGVpZ2h0OnRbM10tdFsxXXx8MH06dCYmKHQ9bih0LHtsZWZ0OlwieCBsIGxlZnQgTGVmdFwiLHRvcDpcInkgdCB0b3AgVG9wXCIsd2lkdGg6XCJ3IHdpZHRoIFcgV2lkdGhcIixoZWlnaHQ6XCJoIGhlaWdodCBXIFdpZHRoXCIsYm90dG9tOlwiYiBib3R0b20gQm90dG9tXCIscmlnaHQ6XCJyIHJpZ2h0IFJpZ2h0XCJ9KSxlPXt4OnQubGVmdHx8MCx5OnQudG9wfHwwfSxudWxsPT10LndpZHRoP3QucmlnaHQ/ZS53aWR0aD10LnJpZ2h0LWUueDplLndpZHRoPTA6ZS53aWR0aD10LndpZHRoLG51bGw9PXQuaGVpZ2h0P3QuYm90dG9tP2UuaGVpZ2h0PXQuYm90dG9tLWUueTplLmhlaWdodD0wOmUuaGVpZ2h0PXQuaGVpZ2h0KTtyZXR1cm4gZX19LHtcInBpY2stYnktYWxpYXNcIjo0NTh9XSw0NTM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIHQucmVwbGFjZShpLGZ1bmN0aW9uKHQscixpKXt2YXIgbz1yLnRvTG93ZXJDYXNlKCk7Zm9yKGk9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaChhKTtyZXR1cm4gZT9lLm1hcChOdW1iZXIpOltdfShpKSxcIm1cIj09byYmaS5sZW5ndGg+MiYmKGUucHVzaChbcl0uY29uY2F0KGkuc3BsaWNlKDAsMikpKSxvPVwibFwiLHI9XCJtXCI9PXI/XCJsXCI6XCJMXCIpOzspe2lmKGkubGVuZ3RoPT1uW29dKXJldHVybiBpLnVuc2hpZnQociksZS5wdXNoKGkpO2lmKGkubGVuZ3RoPG5bb10pdGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIHBhdGggZGF0YVwiKTtlLnB1c2goW3JdLmNvbmNhdChpLnNwbGljZSgwLG5bb10pKSl9fSksZX07dmFyIG49e2E6NyxjOjYsaDoxLGw6MixtOjIscTo0LHM6NCx0OjIsdjoxLHo6MH0saT0vKFthc3R2enFtaGxjXSkoW15hc3R2enFtaGxjXSopL2dpO3ZhciBhPS8tP1swLTldKlxcLj9bMC05XSsoPzplWy0rXT9cXGQrKT8vZ2l9LHt9XSw0NTQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlfHwoZT1bMCxcIlwiXSksdD1TdHJpbmcodCk7dmFyIHI9cGFyc2VGbG9hdCh0LDEwKTtyZXR1cm4gZVswXT1yLGVbMV09dC5tYXRjaCgvW1xcZC5cXC1cXCtdKlxccyooLiopLylbMV18fFwiXCIsZX19LHt9XSw0NTU6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7KGZ1bmN0aW9uKCl7dmFyIHIsbixpLGEsbyxzO1widW5kZWZpbmVkXCIhPXR5cGVvZiBwZXJmb3JtYW5jZSYmbnVsbCE9PXBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTpcInVuZGVmaW5lZFwiIT10eXBlb2YgdCYmbnVsbCE9PXQmJnQuaHJ0aW1lPyhlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4ocigpLW8pLzFlNn0sbj10LmhydGltZSxhPShyPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIDFlOSoodD1uKCkpWzBdK3RbMV19KSgpLHM9MWU5KnQudXB0aW1lKCksbz1hLXMpOkRhdGUubm93PyhlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKS1pfSxpPURhdGUubm93KCkpOihlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKS1pfSxpPShuZXcgRGF0ZSkuZ2V0VGltZSgpKX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdChcIl9wcm9jZXNzXCIpKX0se19wcm9jZXNzOjQ3NX1dLDQ1NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtpZihlPG4pe2Zvcih2YXIgcj0xLGE9MDthPGU7KythKWZvcih2YXIgbz0wO288YTsrK28paWYodFthXTx0W29dKXI9LXI7ZWxzZSBpZih0W2FdPT09dFtvXSlyZXR1cm4gMDtyZXR1cm4gcn1mb3IodmFyIHM9aS5tYWxsb2NVaW50OChlKSxhPTA7YTxlOysrYSlzW2FdPTA7Zm9yKHZhciByPTEsYT0wO2E8ZTsrK2EpaWYoIXNbYV0pe3ZhciBsPTE7c1thXT0xO2Zvcih2YXIgbz10W2FdO28hPT1hO289dFtvXSl7aWYoc1tvXSlyZXR1cm4gaS5mcmVlVWludDgocyksMDtsKz0xLHNbb109MX0xJmx8fChyPS1yKX1yZXR1cm4gaS5mcmVlVWludDgocykscn07dmFyIG49MzIsaT10KFwidHlwZWRhcnJheS1wb29sXCIpfSx7XCJ0eXBlZGFycmF5LXBvb2xcIjo1MzB9XSw0NTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwidHlwZWRhcnJheS1wb29sXCIpLGk9dChcImludmVydC1wZXJtdXRhdGlvblwiKTtyLnJhbms9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7c3dpdGNoKGUpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIDA7Y2FzZSAyOnJldHVybiB0WzFdfXZhciByLGEsbyxzPW4ubWFsbG9jVWludDMyKGUpLGw9bi5tYWxsb2NVaW50MzIoZSksYz0wO2ZvcihpKHQsbCksbz0wO288ZTsrK28pc1tvXT10W29dO2ZvcihvPWUtMTtvPjA7LS1vKWE9bFtvXSxyPXNbb10sc1tvXT1zW2FdLHNbYV09cixsW29dPWxbcl0sbFtyXT1hLGM9KGMrcikqbztyZXR1cm4gbi5mcmVlVWludDMyKGwpLG4uZnJlZVVpbnQzMihzKSxjfSxyLnVucmFuaz1mdW5jdGlvbih0LGUscil7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gcnx8W107Y2FzZSAxOnJldHVybiByPyhyWzBdPTAscik6WzBdO2Nhc2UgMjpyZXR1cm4gcj8oZT8oclswXT0wLHJbMV09MSk6KHJbMF09MSxyWzFdPTApLHIpOmU/WzAsMV06WzEsMF19dmFyIG4saSxhLG89MTtmb3IoKHI9cnx8bmV3IEFycmF5KHQpKVswXT0wLGE9MTthPHQ7KythKXJbYV09YSxvPW8qYXwwO2ZvcihhPXQtMTthPjA7LS1hKWU9ZS0obj1lL298MCkqb3wwLG89by9hfDAsaT0wfHJbYV0sclthXT0wfHJbbl0scltuXT0wfGk7cmV0dXJuIHJ9fSx7XCJpbnZlcnQtcGVybXV0YXRpb25cIjo0MDgsXCJ0eXBlZGFycmF5LXBvb2xcIjo1MzB9XSw0NTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGEsbz17fTtpZihcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9aShlKSksQXJyYXkuaXNBcnJheShlKSl7dmFyIHM9e307Zm9yKGE9MDthPGUubGVuZ3RoO2ErKylzW2VbYV1dPSEwO2U9c31mb3IobiBpbiBlKWVbbl09aShlW25dKTt2YXIgbD17fTtmb3IobiBpbiBlKXt2YXIgYz1lW25dO2lmKEFycmF5LmlzQXJyYXkoYykpZm9yKGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIHU9Y1thXTtpZihyJiYobFt1XT0hMCksdSBpbiB0KXtpZihvW25dPXRbdV0scilmb3IodmFyIGg9YTtoPGMubGVuZ3RoO2grKylsW2NbaF1dPSEwO2JyZWFrfX1lbHNlIG4gaW4gdCYmKGVbbl0mJihvW25dPXRbbl0pLHImJihsW25dPSEwKSl9aWYocilmb3IobiBpbiB0KWxbbl18fChvW25dPXRbbl0pO3JldHVybiBvfTt2YXIgbj17fTtmdW5jdGlvbiBpKHQpe3JldHVybiBuW3RdP25bdF06KFwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1uW3RdPXQuc3BsaXQoL1xccyosXFxzKnxcXHMrLykpLHQpfX0se31dLDQ1OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wfGUubGVuZ3RoLGk9dC5sZW5ndGgsYT1bbmV3IEFycmF5KHIpLG5ldyBBcnJheShyKV0sbz0wO288cjsrK28pYVswXVtvXT1bXSxhWzFdW29dPVtdO2Zvcih2YXIgbz0wO288aTsrK28pe3ZhciBzPXRbb107YVswXVtzWzBdXS5wdXNoKHMpLGFbMV1bc1sxXV0ucHVzaChzKX1mb3IodmFyIGw9W10sbz0wO288cjsrK28pYVswXVtvXS5sZW5ndGgrYVsxXVtvXS5sZW5ndGg9PT0wJiZsLnB1c2goW29dKTtmdW5jdGlvbiBjKHQsZSl7dmFyIHI9YVtlXVt0W2VdXTtyLnNwbGljZShyLmluZGV4T2YodCksMSl9ZnVuY3Rpb24gdSh0LHIsaSl7Zm9yKHZhciBvLHMsbCx1PTA7dTwyOysrdSlpZihhW3VdW3JdLmxlbmd0aD4wKXtvPWFbdV1bcl1bMF0sbD11O2JyZWFrfXM9b1sxXmxdO2Zvcih2YXIgaD0wO2g8MjsrK2gpZm9yKHZhciBmPWFbaF1bcl0scD0wO3A8Zi5sZW5ndGg7KytwKXt2YXIgZD1mW3BdLGc9ZFsxXmhdLHY9bihlW3RdLGVbcl0sZVtzXSxlW2ddKTt2PjAmJihvPWQscz1nLGw9aCl9cmV0dXJuIGk/czoobyYmYyhvLGwpLHMpfWZ1bmN0aW9uIGgodCxyKXt2YXIgaT1hW3JdW3RdWzBdLG89W3RdO2MoaSxyKTtmb3IodmFyIHM9aVsxXnJdOzspe2Zvcig7cyE9PXQ7KW8ucHVzaChzKSxzPXUob1tvLmxlbmd0aC0yXSxzLCExKTtpZihhWzBdW3RdLmxlbmd0aCthWzFdW3RdLmxlbmd0aD09PTApYnJlYWs7dmFyIGw9b1tvLmxlbmd0aC0xXSxoPXQsZj1vWzFdLHA9dShsLGgsITApO2lmKG4oZVtsXSxlW2hdLGVbZl0sZVtwXSk8MClicmVhaztvLnB1c2godCkscz11KGwsaCl9cmV0dXJuIG99ZnVuY3Rpb24gZih0LGUpe3JldHVybiBlWzFdPT09ZVtlLmxlbmd0aC0xXX1mb3IodmFyIG89MDtvPHI7KytvKWZvcih2YXIgcD0wO3A8MjsrK3Ape2Zvcih2YXIgZD1bXTthW3BdW29dLmxlbmd0aD4wOyl7YVswXVtvXS5sZW5ndGg7dmFyIGc9aChvLHApO2YoZCxnKT9kLnB1c2guYXBwbHkoZCxnKTooZC5sZW5ndGg+MCYmbC5wdXNoKGQpLGQ9Zyl9ZC5sZW5ndGg+MCYmbC5wdXNoKGQpfXJldHVybiBsfTt2YXIgbj10KFwiY29tcGFyZS1hbmdsZVwiKX0se1wiY29tcGFyZS1hbmdsZVwiOjExOH1dLDQ2MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uKHQsZS5sZW5ndGgpLGk9bmV3IEFycmF5KGUubGVuZ3RoKSxhPW5ldyBBcnJheShlLmxlbmd0aCksbz1bXSxzPTA7czxlLmxlbmd0aDsrK3Mpe3ZhciBsPXJbc10ubGVuZ3RoO2Fbc109bCxpW3NdPSEwLGw8PTEmJm8ucHVzaChzKX1mb3IoO28ubGVuZ3RoPjA7KXt2YXIgYz1vLnBvcCgpO2lbY109ITE7Zm9yKHZhciB1PXJbY10scz0wO3M8dS5sZW5ndGg7KytzKXt2YXIgaD11W3NdOzA9PS0tYVtoXSYmby5wdXNoKGgpfX1mb3IodmFyIGY9bmV3IEFycmF5KGUubGVuZ3RoKSxwPVtdLHM9MDtzPGUubGVuZ3RoOysrcylpZihpW3NdKXt2YXIgYz1wLmxlbmd0aDtmW3NdPWMscC5wdXNoKGVbc10pfWVsc2UgZltzXT0tMTtmb3IodmFyIGQ9W10scz0wO3M8dC5sZW5ndGg7KytzKXt2YXIgZz10W3NdO2lbZ1swXV0mJmlbZ1sxXV0mJmQucHVzaChbZltnWzBdXSxmW2dbMV1dXSl9cmV0dXJuW2QscF19O3ZhciBuPXQoXCJlZGdlcy10by1hZGphY2VuY3ktbGlzdFwiKX0se1wiZWRnZXMtdG8tYWRqYWNlbmN5LWxpc3RcIjoxNjR9XSw0NjE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1jKHQsZSk7dD1yWzBdO2Zvcih2YXIgaD0oZT1yWzFdKS5sZW5ndGgsZj0odC5sZW5ndGgsbih0LGUubGVuZ3RoKSkscD0wO3A8aDsrK3ApaWYoZltwXS5sZW5ndGglMj09MSl0aHJvdyBuZXcgRXJyb3IoXCJwbGFuYXItZ3JhcGgtdG8tcG9seWxpbmU6IGdyYXBoIG11c3QgYmUgbWFuaWZvbGRcIik7dmFyIGQ9aSh0LGUpO2Zvcih2YXIgZz0oZD1kLmZpbHRlcihmdW5jdGlvbih0KXtmb3IodmFyIHI9dC5sZW5ndGgsbj1bMF0saT0wO2k8cjsrK2kpe3ZhciBhPWVbdFtpXV0sbD1lW3RbKGkrMSklcl1dLGM9bygtYVswXSxhWzFdKSx1PW8oLWFbMF0sbFsxXSksaD1vKGxbMF0sYVsxXSksZj1vKGxbMF0sbFsxXSk7bj1zKG4scyhzKGMsdSkscyhoLGYpKSl9cmV0dXJuIG5bbi5sZW5ndGgtMV0+MH0pKS5sZW5ndGgsdj1uZXcgQXJyYXkoZyksbT1uZXcgQXJyYXkoZykscD0wO3A8ZzsrK3Ape3ZbcF09cDt2YXIgeT1uZXcgQXJyYXkoZykseD1kW3BdLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pLGI9YShbeF0pLF89MDt0OmZvcih2YXIgdz0wO3c8ZzsrK3cpaWYoeVt3XT0wLHAhPT13KXtmb3IodmFyIGs9ZFt3XSxBPWsubGVuZ3RoLFQ9MDtUPEE7KytUKXt2YXIgTT1iKGVba1tUXV0pO2lmKDAhPT1NKXtNPDAmJih5W3ddPTEsXys9MSk7Y29udGludWUgdH19eVt3XT0xLF8rPTF9bVtwXT1bXyxwLHldfW0uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLXRbMF19KTtmb3IodmFyIHA9MDtwPGc7KytwKWZvcih2YXIgeT1tW3BdLFM9eVsxXSxFPXlbMl0sdz0wO3c8ZzsrK3cpRVt3XSYmKHZbd109Uyk7Zm9yKHZhciBDPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3IpZVtyXT1bXTtyZXR1cm4gZX0oZykscD0wO3A8ZzsrK3ApQ1twXS5wdXNoKHZbcF0pLENbdltwXV0ucHVzaChwKTtmb3IodmFyIEw9e30sej11KGgsITEpLHA9MDtwPGc7KytwKWZvcih2YXIgaz1kW3BdLEE9ay5sZW5ndGgsdz0wO3c8QTsrK3cpe3ZhciBPPWtbd10sST1rWyh3KzEpJUFdLEQ9TWF0aC5taW4oTyxJKStcIjpcIitNYXRoLm1heChPLEkpO2lmKEQgaW4gTCl7dmFyIFA9TFtEXTtDW1BdLnB1c2gocCksQ1twXS5wdXNoKFApLHpbT109eltJXT0hMH1lbHNlIExbRF09cH1mdW5jdGlvbiBSKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPTA7cjxlOysrcilpZighelt0W3JdXSlyZXR1cm4hMTtyZXR1cm4hMH1mb3IodmFyIEY9W10sQj11KGcsLTEpLHA9MDtwPGc7KytwKXZbcF0hPT1wfHxSKGRbcF0pP0JbcF09LTE6KEYucHVzaChwKSxCW3BdPTApO3ZhciByPVtdO2Zvcig7Ri5sZW5ndGg+MDspe3ZhciBOPUYucG9wKCksaj1DW05dO2woaixmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KTt2YXIgVixVPWoubGVuZ3RoLHE9QltOXTtpZigwPT09cSl7dmFyIGs9ZFtOXTtWPVtrXX1mb3IodmFyIHA9MDtwPFU7KytwKXt2YXIgSD1qW3BdO2lmKCEoQltIXT49MCkmJihCW0hdPTFecSxGLnB1c2goSCksMD09PXEpKXt2YXIgaz1kW0hdO1Ioayl8fChrLnJldmVyc2UoKSxWLnB1c2goaykpfX0wPT09cSYmci5wdXNoKFYpfXJldHVybiByfTt2YXIgbj10KFwiZWRnZXMtdG8tYWRqYWNlbmN5LWxpc3RcIiksaT10KFwicGxhbmFyLWR1YWxcIiksYT10KFwicG9pbnQtaW4tYmlnLXBvbHlnb25cIiksbz10KFwidHdvLXByb2R1Y3RcIikscz10KFwicm9idXN0LXN1bVwiKSxsPXQoXCJ1bmlxXCIpLGM9dChcIi4vbGliL3RyaW0tbGVhdmVzXCIpO2Z1bmN0aW9uIHUodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZTtyZXR1cm4gcn19LHtcIi4vbGliL3RyaW0tbGVhdmVzXCI6NDYwLFwiZWRnZXMtdG8tYWRqYWNlbmN5LWxpc3RcIjoxNjQsXCJwbGFuYXItZHVhbFwiOjQ1OSxcInBvaW50LWluLWJpZy1wb2x5Z29uXCI6NDY1LFwicm9idXN0LXN1bVwiOjUwMCxcInR3by1wcm9kdWN0XCI6NTI4LHVuaXE6NTMyfV0sNDYyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuL3F1YWRcIil9LHtcIi4vcXVhZFwiOjQ2NH1dLDQ2MzpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsxMDJdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoxMDJ9XSw0NjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIiksaT10KFwiY2xhbXBcIiksYT10KFwicGFyc2UtcmVjdFwiKSxvPXQoXCJhcnJheS1ib3VuZHNcIikscz10KFwicGljay1ieS1hbGlhc1wiKSxsPXQoXCJkZWZpbmVkXCIpLGM9dChcImZsYXR0ZW4tdmVydGV4LWRhdGFcIiksdT10KFwiaXMtb2JqXCIpLGg9dChcImR0eXBlXCIpLGY9dChcIm1hdGgtbG9nMlwiKTtmdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByPWVbMF0sbj1lWzFdLGE9MS8oZVsyXS1yKSxvPTEvKGVbM10tbikscz1uZXcgQXJyYXkodC5sZW5ndGgpLGw9MCxjPXQubGVuZ3RoLzI7bDxjO2wrKylzWzIqbF09aSgodFsyKmxdLXIpKmEsMCwxKSxzWzIqbCsxXT1pKCh0WzIqbCsxXS1uKSpvLDAsMSk7cmV0dXJuIHN9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9e30pLHQ9Yyh0LFwiZmxvYXQ2NFwiKSxlPXMoZSx7Ym91bmRzOlwicmFuZ2UgYm91bmRzIGRhdGFCb3ggZGF0YWJveFwiLG1heERlcHRoOlwiZGVwdGggbWF4RGVwdGggbWF4ZGVwdGggbGV2ZWwgbWF4TGV2ZWwgbWF4bGV2ZWwgbGV2ZWxzXCIsZHR5cGU6XCJ0eXBlIGR0eXBlIGZvcm1hdCBvdXQgZHN0IG91dHB1dCBkZXN0aW5hdGlvblwifSk7dmFyIHI9bChlLm1heERlcHRoLDI1NSksaT1sKGUuYm91bmRzLG8odCwyKSk7aVswXT09PWlbMl0mJmlbMl0rKyxpWzFdPT09aVszXSYmaVszXSsrO3ZhciBkLGc9cCh0LGkpLHY9dC5sZW5ndGg+Pj4xO2UuZHR5cGV8fChlLmR0eXBlPVwiYXJyYXlcIiksXCJzdHJpbmdcIj09dHlwZW9mIGUuZHR5cGU/ZD1uZXcoaChlLmR0eXBlKSkodik6ZS5kdHlwZSYmKGQ9ZS5kdHlwZSxBcnJheS5pc0FycmF5KGQpJiYoZC5sZW5ndGg9dikpO2Zvcih2YXIgbT0wO208djsrK20pZFttXT1tO3ZhciB5PVtdLHg9W10sYj1bXSxfPVtdOyFmdW5jdGlvbiB0KGUsbixpLGEsbyxzKXtpZighYS5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIGw9eVtvXXx8KHlbb109W10pO3ZhciBjPWJbb118fChiW29dPVtdKTt2YXIgdT14W29dfHwoeFtvXT1bXSk7dmFyIGg9bC5sZW5ndGg7bysrO2lmKG8+cil7Zm9yKHZhciBmPTA7ZjxhLmxlbmd0aDtmKyspbC5wdXNoKGFbZl0pLGMucHVzaChzKSx1LnB1c2gobnVsbCxudWxsLG51bGwsbnVsbCk7cmV0dXJuIGh9bC5wdXNoKGFbMF0pO2MucHVzaChzKTtpZihhLmxlbmd0aDw9MSlyZXR1cm4gdS5wdXNoKG51bGwsbnVsbCxudWxsLG51bGwpLGg7dmFyIHA9LjUqaTt2YXIgZD1lK3Asdj1uK3A7dmFyIG09W10sXz1bXSx3PVtdLGs9W107Zm9yKHZhciBBPTEsVD1hLmxlbmd0aDtBPFQ7QSsrKXt2YXIgTT1hW0FdLFM9Z1syKk1dLEU9Z1syKk0rMV07UzxkP0U8dj9tLnB1c2goTSk6Xy5wdXNoKE0pOkU8dj93LnB1c2goTSk6ay5wdXNoKE0pfXM8PD0yO3UucHVzaCh0KGUsbixwLG0sbyxzKSx0KGUsdixwLF8sbyxzKzEpLHQoZCxuLHAsdyxvLHMrMiksdChkLHYscCxrLG8scyszKSk7cmV0dXJuIGh9KDAsMCwxLGQsMCwxKTtmb3IodmFyIHc9MCxrPTA7azx5Lmxlbmd0aDtrKyspe3ZhciBBPXlba107aWYoZC5zZXQpZC5zZXQoQSx3KTtlbHNlIGZvcih2YXIgVD0wLE09QS5sZW5ndGg7VDxNO1QrKylkW1Qrd109QVtUXTt2YXIgUz13K3lba10ubGVuZ3RoO19ba109W3csU10sdz1TfXJldHVybiBkLnJhbmdlPWZ1bmN0aW9uKCl7dmFyIGUscj1bXSxvPWFyZ3VtZW50cy5sZW5ndGg7Zm9yKDtvLS07KXJbb109YXJndW1lbnRzW29dO2lmKHUocltyLmxlbmd0aC0xXSkpe3ZhciBjPXIucG9wKCk7ci5sZW5ndGh8fG51bGw9PWMueCYmbnVsbD09Yy5sJiZudWxsPT1jLmxlZnR8fChyPVtjXSxlPXt9KSxlPXMoYyx7bGV2ZWw6XCJsZXZlbCBtYXhMZXZlbFwiLGQ6XCJkIGRpYW0gZGlhbWV0ZXIgciByYWRpdXMgcHggcHhTaXplIHBpeGVsIHBpeGVsU2l6ZSBtYXhEIHNpemUgbWluU2l6ZVwiLGxvZDpcImxvZCBkZXRhaWxzIHJhbmdlcyBvZmZzZXRzXCJ9KX1lbHNlIGU9e307ci5sZW5ndGh8fChyPWkpO3ZhciBoPWEuYXBwbHkodm9pZCAwLHIpLGQ9W01hdGgubWluKGgueCxoLngraC53aWR0aCksTWF0aC5taW4oaC55LGgueStoLmhlaWdodCksTWF0aC5tYXgoaC54LGgueCtoLndpZHRoKSxNYXRoLm1heChoLnksaC55K2guaGVpZ2h0KV0sZz1kWzBdLHY9ZFsxXSxtPWRbMl0sdz1kWzNdLGs9cChbZyx2LG0sd10saSksQT1rWzBdLFQ9a1sxXSxNPWtbMl0sUz1rWzNdLEM9bChlLmxldmVsLHkubGVuZ3RoKTtpZihudWxsIT1lLmQpe3ZhciBMO1wibnVtYmVyXCI9PXR5cGVvZiBlLmQ/TD1bZS5kLGUuZF06ZS5kLmxlbmd0aCYmKEw9ZS5kKSxDPU1hdGgubWluKE1hdGgubWF4KE1hdGguY2VpbCgtZihNYXRoLmFicyhMWzBdKS8oaVsyXS1pWzBdKSkpLE1hdGguY2VpbCgtZihNYXRoLmFicyhMWzFdKS8oaVszXS1pWzFdKSkpKSxDKX1pZihDPU1hdGgubWluKEMseS5sZW5ndGgpLGUubG9kKXJldHVybiBmdW5jdGlvbih0LGUscixpLGEpe2Zvcih2YXIgbz1bXSxzPTA7czxhO3MrKyl7dmFyIGw9YltzXSxjPV9bc11bMF0sdT1FKHQsZSxzKSxoPUUocixpLHMpLGY9bi5nZShsLHUpLHA9bi5ndChsLGgsZixsLmxlbmd0aC0xKTtvW3NdPVtmK2MscCtjXX1yZXR1cm4gb30oQSxULE0sUyxDKTt2YXIgej1bXTtyZXR1cm4gZnVuY3Rpb24gZShyLG4saSxhLG8scyl7aWYobnVsbCE9PW8mJm51bGwhPT1zKXt2YXIgbD1yK2ksYz1uK2k7aWYoIShBPmx8fFQ+Y3x8TTxyfHxTPG58fGE+PUN8fG89PT1zKSl7dmFyIHU9eVthXTt2b2lkIDA9PT1zJiYocz11Lmxlbmd0aCk7Zm9yKHZhciBoPW87aDxzO2grKyl7dmFyIGY9dVtoXSxwPXRbMipmXSxkPXRbMipmKzFdO3A+PWcmJnA8PW0mJmQ+PXYmJmQ8PXcmJnoucHVzaChmKX12YXIgYj14W2FdLF89Yls0Km8rMF0saz1iWzQqbysxXSxFPWJbNCpvKzJdLEw9Yls0Km8rM10sTz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1udWxsLG49MDtudWxsPT09cjspaWYocj10WzQqZStuXSwrK24+dC5sZW5ndGgpcmV0dXJuIG51bGw7cmV0dXJuIHJ9KGIsbysxKSxJPS41KmksRD1hKzE7ZShyLG4sSSxELF8sa3x8RXx8THx8TyksZShyLG4rSSxJLEQsayxFfHxMfHxPKSxlKHIrSSxuLEksRCxFLEx8fE8pLGUocitJLG4rSSxJLEQsTCxPKX19fSgwLDAsMSwwLDAsMSksen0sZDtmdW5jdGlvbiBFKHQsZSxyKXtmb3IodmFyIG49MSxpPS41LGE9LjUsbz0uNSxzPTA7czxyO3MrKyluPDw9MixuKz10PGk/ZTxhPzA6MTplPGE/MjozLG8qPS41LGkrPXQ8aT8tbzpvLGErPWU8YT8tbzpvO3JldHVybiBufX19LHtcImFycmF5LWJvdW5kc1wiOjU2LFwiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIjo0NjMsY2xhbXA6MTA2LGRlZmluZWQ6MTU2LGR0eXBlOjE2MSxcImZsYXR0ZW4tdmVydGV4LWRhdGFcIjoyMjQsXCJpcy1vYmpcIjo0MTQsXCJtYXRoLWxvZzJcIjo0MjUsXCJwYXJzZS1yZWN0XCI6NDUyLFwicGljay1ieS1hbGlhc1wiOjQ1OH1dLDQ2NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1bXSxhPVtdLHM9MDtzPGU7KytzKWZvcih2YXIgdT10W3NdLGg9dS5sZW5ndGgsZj1oLTEscD0wO3A8aDtmPXArKyl7dmFyIGQ9dVtmXSxnPXVbcF07ZFswXT09PWdbMF0/YS5wdXNoKFtkLGddKTpyLnB1c2goW2QsZ10pfWlmKDA9PT1yLmxlbmd0aClyZXR1cm4gMD09PWEubGVuZ3RoP2M6KHY9bChhKSxmdW5jdGlvbih0KXtyZXR1cm4gdih0WzBdLHRbMV0pPzA6MX0pO3ZhciB2O3ZhciBtPWkocikseT1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgaT1vLmxlKGUsclswXSk7aWYoaTwwKXJldHVybiAxO3ZhciBhPXRbaV07aWYoIWEpe2lmKCEoaT4wJiZlW2ldPT09clswXSkpcmV0dXJuIDE7YT10W2ktMV19Zm9yKHZhciBzPTE7YTspe3ZhciBsPWEua2V5LGM9bihyLGxbMF0sbFsxXSk7aWYobFswXVswXTxsWzFdWzBdKWlmKGM8MClhPWEubGVmdDtlbHNle2lmKCEoYz4wKSlyZXR1cm4gMDtzPS0xLGE9YS5yaWdodH1lbHNlIGlmKGM+MClhPWEubGVmdDtlbHNle2lmKCEoYzwwKSlyZXR1cm4gMDtzPTEsYT1hLnJpZ2h0fX1yZXR1cm4gc319KG0uc2xhYnMsbS5jb29yZGluYXRlcyk7cmV0dXJuIDA9PT1hLmxlbmd0aD95OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0KHJbMF0sclsxXSk/MDplKHIpfX0obChhKSx5KX07dmFyIG49dChcInJvYnVzdC1vcmllbnRhdGlvblwiKVszXSxpPXQoXCJzbGFiLWRlY29tcG9zaXRpb25cIiksYT10KFwiaW50ZXJ2YWwtdHJlZS0xZFwiKSxvPXQoXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiKTtmdW5jdGlvbiBzKCl7cmV0dXJuITB9ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU9e30scj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbj10W3JdLGk9blswXVswXSxvPW5bMF1bMV0sbD1uWzFdWzFdLGM9W01hdGgubWluKG8sbCksTWF0aC5tYXgobyxsKV07aSBpbiBlP2VbaV0ucHVzaChjKTplW2ldPVtjXX12YXIgdT17fSxoPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxoLmxlbmd0aDsrK3Ipe3ZhciBmPWVbaFtyXV07dVtoW3JdXT1hKGYpfXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbj10W2VdO3JldHVybiEhbiYmISFuLnF1ZXJ5UG9pbnQocixzKX19KHUpfWZ1bmN0aW9uIGModCl7cmV0dXJuIDF9fSx7XCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiOjgyLFwiaW50ZXJ2YWwtdHJlZS0xZFwiOjQwNyxcInJvYnVzdC1vcmllbnRhdGlvblwiOjQ5NSxcInNsYWItZGVjb21wb3NpdGlvblwiOjUxMX1dLDQ2NjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9dChcIi4vbGliL2J1aWxkLWxvZ1wiKSxhPXQoXCIuL2xpYi9lcHNpbG9uXCIpLG89dChcIi4vbGliL2ludGVyc2VjdGVyXCIpLHM9dChcIi4vbGliL3NlZ21lbnQtY2hhaW5lclwiKSxsPXQoXCIuL2xpYi9zZWdtZW50LXNlbGVjdG9yXCIpLGM9dChcIi4vbGliL2dlb2pzb25cIiksdT0hMSxoPWEoKTtmdW5jdGlvbiBmKHQsZSxyKXt2YXIgaT1uLnNlZ21lbnRzKHQpLGE9bi5zZWdtZW50cyhlKSxvPXIobi5jb21iaW5lKGksYSkpO3JldHVybiBuLnBvbHlnb24obyl9bj17YnVpbGRMb2c6ZnVuY3Rpb24odCl7cmV0dXJuITA9PT10P3U9aSgpOiExPT09dCYmKHU9ITEpLCExIT09dSYmdS5saXN0fSxlcHNpbG9uOmZ1bmN0aW9uKHQpe3JldHVybiBoLmVwc2lsb24odCl9LHNlZ21lbnRzOmZ1bmN0aW9uKHQpe3ZhciBlPW8oITAsaCx1KTtyZXR1cm4gdC5yZWdpb25zLmZvckVhY2goZS5hZGRSZWdpb24pLHtzZWdtZW50czplLmNhbGN1bGF0ZSh0LmludmVydGVkKSxpbnZlcnRlZDp0LmludmVydGVkfX0sY29tYmluZTpmdW5jdGlvbih0LGUpe3JldHVybntjb21iaW5lZDpvKCExLGgsdSkuY2FsY3VsYXRlKHQuc2VnbWVudHMsdC5pbnZlcnRlZCxlLnNlZ21lbnRzLGUuaW52ZXJ0ZWQpLGludmVydGVkMTp0LmludmVydGVkLGludmVydGVkMjplLmludmVydGVkfX0sc2VsZWN0VW5pb246ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwudW5pb24odC5jb21iaW5lZCx1KSxpbnZlcnRlZDp0LmludmVydGVkMXx8dC5pbnZlcnRlZDJ9fSxzZWxlY3RJbnRlcnNlY3Q6ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwuaW50ZXJzZWN0KHQuY29tYmluZWQsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZDEmJnQuaW52ZXJ0ZWQyfX0sc2VsZWN0RGlmZmVyZW5jZTpmdW5jdGlvbih0KXtyZXR1cm57c2VnbWVudHM6bC5kaWZmZXJlbmNlKHQuY29tYmluZWQsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZDEmJiF0LmludmVydGVkMn19LHNlbGVjdERpZmZlcmVuY2VSZXY6ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwuZGlmZmVyZW5jZVJldih0LmNvbWJpbmVkLHUpLGludmVydGVkOiF0LmludmVydGVkMSYmdC5pbnZlcnRlZDJ9fSxzZWxlY3RYb3I6ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwueG9yKHQuY29tYmluZWQsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZDEhPT10LmludmVydGVkMn19LHBvbHlnb246ZnVuY3Rpb24odCl7cmV0dXJue3JlZ2lvbnM6cyh0LnNlZ21lbnRzLGgsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZH19LHBvbHlnb25Gcm9tR2VvSlNPTjpmdW5jdGlvbih0KXtyZXR1cm4gYy50b1BvbHlnb24obix0KX0scG9seWdvblRvR2VvSlNPTjpmdW5jdGlvbih0KXtyZXR1cm4gYy5mcm9tUG9seWdvbihuLGgsdCl9LHVuaW9uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYodCxlLG4uc2VsZWN0VW5pb24pfSxpbnRlcnNlY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZih0LGUsbi5zZWxlY3RJbnRlcnNlY3QpfSxkaWZmZXJlbmNlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYodCxlLG4uc2VsZWN0RGlmZmVyZW5jZSl9LGRpZmZlcmVuY2VSZXY6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZih0LGUsbi5zZWxlY3REaWZmZXJlbmNlUmV2KX0seG9yOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYodCxlLG4uc2VsZWN0WG9yKX19LFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJih3aW5kb3cuUG9seUJvb2w9biksZS5leHBvcnRzPW59LHtcIi4vbGliL2J1aWxkLWxvZ1wiOjQ2NyxcIi4vbGliL2Vwc2lsb25cIjo0NjgsXCIuL2xpYi9nZW9qc29uXCI6NDY5LFwiLi9saWIvaW50ZXJzZWN0ZXJcIjo0NzAsXCIuL2xpYi9zZWdtZW50LWNoYWluZXJcIjo0NzIsXCIuL2xpYi9zZWdtZW50LXNlbGVjdG9yXCI6NDczfV0sNDY3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQsZT0wLHI9ITE7ZnVuY3Rpb24gbihlLHIpe3JldHVybiB0Lmxpc3QucHVzaCh7dHlwZTplLGRhdGE6cj9KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHIpKTp2b2lkIDB9KSx0fXJldHVybiB0PXtsaXN0OltdLHNlZ21lbnRJZDpmdW5jdGlvbigpe3JldHVybiBlKyt9LGNoZWNrSW50ZXJzZWN0aW9uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oXCJjaGVja1wiLHtzZWcxOnQsc2VnMjplfSl9LHNlZ21lbnRDaG9wOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oXCJkaXZfc2VnXCIse3NlZzp0LHB0OmV9KSxuKFwiY2hvcFwiLHtzZWc6dCxwdDplfSl9LHN0YXR1c1JlbW92ZTpmdW5jdGlvbih0KXtyZXR1cm4gbihcInBvcF9zZWdcIix7c2VnOnR9KX0sc2VnbWVudFVwZGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gbihcInNlZ191cGRhdGVcIix7c2VnOnR9KX0sc2VnbWVudE5ldzpmdW5jdGlvbih0LGUpe3JldHVybiBuKFwibmV3X3NlZ1wiLHtzZWc6dCxwcmltYXJ5OmV9KX0sc2VnbWVudFJlbW92ZTpmdW5jdGlvbih0KXtyZXR1cm4gbihcInJlbV9zZWdcIix7c2VnOnR9KX0sdGVtcFN0YXR1czpmdW5jdGlvbih0LGUscil7cmV0dXJuIG4oXCJ0ZW1wX3N0YXR1c1wiLHtzZWc6dCxhYm92ZTplLGJlbG93OnJ9KX0scmV3aW5kOmZ1bmN0aW9uKHQpe3JldHVybiBuKFwicmV3aW5kXCIse3NlZzp0fSl9LHN0YXR1czpmdW5jdGlvbih0LGUscil7cmV0dXJuIG4oXCJzdGF0dXNcIix7c2VnOnQsYWJvdmU6ZSxiZWxvdzpyfSl9LHZlcnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1yP3Q6KHI9ZSxuKFwidmVydFwiLHt4OmV9KSl9LGxvZzpmdW5jdGlvbih0KXtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgdCYmKHQ9SlNPTi5zdHJpbmdpZnkodCwhMSxcIiAgXCIpKSxuKFwibG9nXCIse3R4dDp0fSl9LHJlc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4oXCJyZXNldFwiKX0sc2VsZWN0ZWQ6ZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJzZWxlY3RlZFwiLHtzZWdzOnR9KX0sY2hhaW5TdGFydDpmdW5jdGlvbih0KXtyZXR1cm4gbihcImNoYWluX3N0YXJ0XCIse3NlZzp0fSl9LGNoYWluUmVtb3ZlSGVhZDpmdW5jdGlvbih0LGUpe3JldHVybiBuKFwiY2hhaW5fcmVtX2hlYWRcIix7aW5kZXg6dCxwdDplfSl9LGNoYWluUmVtb3ZlVGFpbDpmdW5jdGlvbih0LGUpe3JldHVybiBuKFwiY2hhaW5fcmVtX3RhaWxcIix7aW5kZXg6dCxwdDplfSl9LGNoYWluTmV3OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oXCJjaGFpbl9uZXdcIix7cHQxOnQscHQyOmV9KX0sY2hhaW5NYXRjaDpmdW5jdGlvbih0KXtyZXR1cm4gbihcImNoYWluX21hdGNoXCIse2luZGV4OnR9KX0sY2hhaW5DbG9zZTpmdW5jdGlvbih0KXtyZXR1cm4gbihcImNoYWluX2Nsb3NlXCIse2luZGV4OnR9KX0sY2hhaW5BZGRIZWFkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oXCJjaGFpbl9hZGRfaGVhZFwiLHtpbmRleDp0LHB0OmV9KX0sY2hhaW5BZGRUYWlsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oXCJjaGFpbl9hZGRfdGFpbFwiLHtpbmRleDp0LHB0OmV9KX0sY2hhaW5Db25uZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oXCJjaGFpbl9jb25cIix7aW5kZXgxOnQsaW5kZXgyOmV9KX0sY2hhaW5SZXZlcnNlOmZ1bmN0aW9uKHQpe3JldHVybiBuKFwiY2hhaW5fcmV2XCIse2luZGV4OnR9KX0sY2hhaW5Kb2luOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oXCJjaGFpbl9qb2luXCIse2luZGV4MTp0LGluZGV4MjplfSl9LGRvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbihcImRvbmVcIil9fX19LHt9XSw0Njg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7XCJudW1iZXJcIiE9dHlwZW9mIHQmJih0PTFlLTEwKTt2YXIgZT17ZXBzaWxvbjpmdW5jdGlvbihlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZSYmKHQ9ZSksdH0scG9pbnRBYm92ZU9yT25MaW5lOmZ1bmN0aW9uKGUscixuKXt2YXIgaT1yWzBdLGE9clsxXSxvPW5bMF0scz1uWzFdLGw9ZVswXTtyZXR1cm4oby1pKSooZVsxXS1hKS0ocy1hKSoobC1pKT49LXR9LHBvaW50QmV0d2VlbjpmdW5jdGlvbihlLHIsbil7dmFyIGk9ZVsxXS1yWzFdLGE9blswXS1yWzBdLG89ZVswXS1yWzBdLHM9blsxXS1yWzFdLGw9byphK2kqcztyZXR1cm4hKGw8dHx8bC0oYSphK3Mqcyk+LXQpfSxwb2ludHNTYW1lWDpmdW5jdGlvbihlLHIpe3JldHVybiBNYXRoLmFicyhlWzBdLXJbMF0pPHR9LHBvaW50c1NhbWVZOmZ1bmN0aW9uKGUscil7cmV0dXJuIE1hdGguYWJzKGVbMV0tclsxXSk8dH0scG9pbnRzU2FtZTpmdW5jdGlvbih0LHIpe3JldHVybiBlLnBvaW50c1NhbWVYKHQscikmJmUucG9pbnRzU2FtZVkodCxyKX0scG9pbnRzQ29tcGFyZTpmdW5jdGlvbih0LHIpe3JldHVybiBlLnBvaW50c1NhbWVYKHQscik/ZS5wb2ludHNTYW1lWSh0LHIpPzA6dFsxXTxyWzFdPy0xOjE6dFswXTxyWzBdPy0xOjF9LHBvaW50c0NvbGxpbmVhcjpmdW5jdGlvbihlLHIsbil7dmFyIGk9ZVswXS1yWzBdLGE9ZVsxXS1yWzFdLG89clswXS1uWzBdLHM9clsxXS1uWzFdO3JldHVybiBNYXRoLmFicyhpKnMtbyphKTx0fSxsaW5lc0ludGVyc2VjdDpmdW5jdGlvbihlLHIsbixpKXt2YXIgYT1yWzBdLWVbMF0sbz1yWzFdLWVbMV0scz1pWzBdLW5bMF0sbD1pWzFdLW5bMV0sYz1hKmwtbypzO2lmKE1hdGguYWJzKGMpPHQpcmV0dXJuITE7dmFyIHU9ZVswXS1uWzBdLGg9ZVsxXS1uWzFdLGY9KHMqaC1sKnUpL2MscD0oYSpoLW8qdSkvYyxkPXthbG9uZ0E6MCxhbG9uZ0I6MCxwdDpbZVswXStmKmEsZVsxXStmKm9dfTtyZXR1cm4gZC5hbG9uZ0E9Zjw9LXQ/LTI6Zjx0Py0xOmYtMTw9LXQ/MDpmLTE8dD8xOjIsZC5hbG9uZ0I9cDw9LXQ/LTI6cDx0Py0xOnAtMTw9LXQ/MDpwLTE8dD8xOjIsZH0scG9pbnRJbnNpZGVSZWdpb246ZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49ZVswXSxpPWVbMV0sYT1yW3IubGVuZ3RoLTFdWzBdLG89cltyLmxlbmd0aC0xXVsxXSxzPSExLGw9MDtsPHIubGVuZ3RoO2wrKyl7dmFyIGM9cltsXVswXSx1PXJbbF1bMV07dS1pPnQhPW8taT50JiYoYS1jKSooaS11KS8oby11KStjLW4+dCYmKHM9IXMpLGE9YyxvPXV9cmV0dXJuIHN9fTtyZXR1cm4gZX19LHt9XSw0Njk6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj17dG9Qb2x5Z29uOmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihlKXtpZihlLmxlbmd0aDw9MClyZXR1cm4gdC5zZWdtZW50cyh7aW52ZXJ0ZWQ6ITEscmVnaW9uczpbXX0pO2Z1bmN0aW9uIHIoZSl7dmFyIHI9ZS5zbGljZSgwLGUubGVuZ3RoLTEpO3JldHVybiB0LnNlZ21lbnRzKHtpbnZlcnRlZDohMSxyZWdpb25zOltyXX0pfWZvcih2YXIgbj1yKGVbMF0pLGk9MTtpPGUubGVuZ3RoO2krKyluPXQuc2VsZWN0RGlmZmVyZW5jZSh0LmNvbWJpbmUobixyKGVbaV0pKSk7cmV0dXJuIG59aWYoXCJQb2x5Z29uXCI9PT1lLnR5cGUpcmV0dXJuIHQucG9seWdvbihyKGUuY29vcmRpbmF0ZXMpKTtpZihcIk11bHRpUG9seWdvblwiPT09ZS50eXBlKXtmb3IodmFyIG49dC5zZWdtZW50cyh7aW52ZXJ0ZWQ6ITEscmVnaW9uczpbXX0pLGk9MDtpPGUuY29vcmRpbmF0ZXMubGVuZ3RoO2krKyluPXQuc2VsZWN0VW5pb24odC5jb21iaW5lKG4scihlLmNvb3JkaW5hdGVzW2ldKSkpO3JldHVybiB0LnBvbHlnb24obil9dGhyb3cgbmV3IEVycm9yKFwiUG9seUJvb2w6IENhbm5vdCBjb252ZXJ0IEdlb0pTT04gb2JqZWN0IHRvIFBvbHlCb29sIHBvbHlnb25cIil9LGZyb21Qb2x5Z29uOmZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQscil7cmV0dXJuIGUucG9pbnRJbnNpZGVSZWdpb24oWy41Kih0WzBdWzBdK3RbMV1bMF0pLC41Kih0WzBdWzFdK3RbMV1bMV0pXSxyKX1mdW5jdGlvbiBpKHQpe3JldHVybntyZWdpb246dCxjaGlsZHJlbjpbXX19cj10LnBvbHlnb24odC5zZWdtZW50cyhyKSk7dmFyIGE9aShudWxsKTtmdW5jdGlvbiBvKHQsZSl7Zm9yKHZhciByPTA7cjx0LmNoaWxkcmVuLmxlbmd0aDtyKyspe2lmKG4oZSwocz10LmNoaWxkcmVuW3JdKS5yZWdpb24pKXJldHVybiB2b2lkIG8ocyxlKX12YXIgYT1pKGUpO2ZvcihyPTA7cjx0LmNoaWxkcmVuLmxlbmd0aDtyKyspe3ZhciBzO24oKHM9dC5jaGlsZHJlbltyXSkucmVnaW9uLGUpJiYoYS5jaGlsZHJlbi5wdXNoKHMpLHQuY2hpbGRyZW4uc3BsaWNlKHIsMSksci0tKX10LmNoaWxkcmVuLnB1c2goYSl9Zm9yKHZhciBzPTA7czxyLnJlZ2lvbnMubGVuZ3RoO3MrKyl7dmFyIGw9ci5yZWdpb25zW3NdO2wubGVuZ3RoPDN8fG8oYSxsKX1mdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciByPTAsbj10W3QubGVuZ3RoLTFdWzBdLGk9dFt0Lmxlbmd0aC0xXVsxXSxhPVtdLG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9dFtvXVswXSxsPXRbb11bMV07YS5wdXNoKFtzLGxdKSxyKz1sKm4tcyppLG49cyxpPWx9cmV0dXJuIHI8MCE9PWUmJmEucmV2ZXJzZSgpLGEucHVzaChbYVswXVswXSxhWzBdWzFdXSksYX12YXIgdT1bXTtmdW5jdGlvbiBoKHQpe3ZhciBlPVtjKHQucmVnaW9uLCExKV07dS5wdXNoKGUpO2Zvcih2YXIgcj0wO3I8dC5jaGlsZHJlbi5sZW5ndGg7cisrKWUucHVzaChmKHQuY2hpbGRyZW5bcl0pKX1mdW5jdGlvbiBmKHQpe2Zvcih2YXIgZT0wO2U8dC5jaGlsZHJlbi5sZW5ndGg7ZSsrKWgodC5jaGlsZHJlbltlXSk7cmV0dXJuIGModC5yZWdpb24sITApfWZvcihzPTA7czxhLmNoaWxkcmVuLmxlbmd0aDtzKyspaChhLmNoaWxkcmVuW3NdKTtyZXR1cm4gdS5sZW5ndGg8PTA/e3R5cGU6XCJQb2x5Z29uXCIsY29vcmRpbmF0ZXM6W119OjE9PXUubGVuZ3RoP3t0eXBlOlwiUG9seWdvblwiLGNvb3JkaW5hdGVzOnVbMF19Ont0eXBlOlwiTXVsdGlQb2x5Z29uXCIsY29vcmRpbmF0ZXM6dX19fTtlLmV4cG9ydHM9bn0se31dLDQ3MDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuL2xpbmtlZC1saXN0XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gaSh0LGUsbil7cmV0dXJue2lkOnI/ci5zZWdtZW50SWQoKTotMSxzdGFydDp0LGVuZDplLG15RmlsbDp7YWJvdmU6bi5teUZpbGwuYWJvdmUsYmVsb3c6bi5teUZpbGwuYmVsb3d9LG90aGVyRmlsbDpudWxsfX12YXIgYT1uLmNyZWF0ZSgpO2Z1bmN0aW9uIG8odCxyKXthLmluc2VydEJlZm9yZSh0LGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbih0LHIsbixpLGEsbyl7dmFyIHM9ZS5wb2ludHNDb21wYXJlKHIsYSk7cmV0dXJuIDAhPT1zP3M6ZS5wb2ludHNTYW1lKG4sbyk/MDp0IT09aT90PzE6LTE6ZS5wb2ludEFib3ZlT3JPbkxpbmUobixpP2E6byxpP286YSk/MTotMX0odC5pc1N0YXJ0LHQucHQscixuLmlzU3RhcnQsbi5wdCxuLm90aGVyLnB0KTwwfSl9ZnVuY3Rpb24gcyh0LGUpe3ZhciByPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5ub2RlKHtpc1N0YXJ0OiEwLHB0OnQuc3RhcnQsc2VnOnQscHJpbWFyeTplLG90aGVyOm51bGwsc3RhdHVzOm51bGx9KTtyZXR1cm4gbyhyLHQuZW5kKSxyfSh0LGUpO3JldHVybiBmdW5jdGlvbih0LGUscil7dmFyIGk9bi5ub2RlKHtpc1N0YXJ0OiExLHB0OmUuZW5kLHNlZzplLHByaW1hcnk6cixvdGhlcjp0LHN0YXR1czpudWxsfSk7dC5vdGhlcj1pLG8oaSx0LnB0KX0ocix0LGUpLHJ9ZnVuY3Rpb24gbCh0LGUpe3ZhciBuPWkoZSx0LnNlZy5lbmQsdC5zZWcpO3JldHVybiBmdW5jdGlvbih0LGUpe3ImJnIuc2VnbWVudENob3AodC5zZWcsZSksdC5vdGhlci5yZW1vdmUoKSx0LnNlZy5lbmQ9ZSx0Lm90aGVyLnB0PWUsbyh0Lm90aGVyLHQucHQpfSh0LGUpLHMobix0LnByaW1hcnkpfWZ1bmN0aW9uIGMoaSxvKXt2YXIgcz1uLmNyZWF0ZSgpO2Z1bmN0aW9uIGModCl7cmV0dXJuIHMuZmluZFRyYW5zaXRpb24oZnVuY3Rpb24ocil7dmFyIG4saSxhLG8scyxsO3JldHVybiBuPXQsaT1yLmV2LGE9bi5zZWcuc3RhcnQsbz1uLnNlZy5lbmQscz1pLnNlZy5zdGFydCxsPWkuc2VnLmVuZCwoZS5wb2ludHNDb2xsaW5lYXIoYSxzLGwpP2UucG9pbnRzQ29sbGluZWFyKG8scyxsKT8xOmUucG9pbnRBYm92ZU9yT25MaW5lKG8scyxsKT8xOi0xOmUucG9pbnRBYm92ZU9yT25MaW5lKGEscyxsKT8xOi0xKT4wfSl9ZnVuY3Rpb24gdSh0LG4pe3ZhciBpPXQuc2VnLGE9bi5zZWcsbz1pLnN0YXJ0LHM9aS5lbmQsYz1hLnN0YXJ0LHU9YS5lbmQ7ciYmci5jaGVja0ludGVyc2VjdGlvbihpLGEpO3ZhciBoPWUubGluZXNJbnRlcnNlY3QobyxzLGMsdSk7aWYoITE9PT1oKXtpZighZS5wb2ludHNDb2xsaW5lYXIobyxzLGMpKXJldHVybiExO2lmKGUucG9pbnRzU2FtZShvLHUpfHxlLnBvaW50c1NhbWUocyxjKSlyZXR1cm4hMTt2YXIgZj1lLnBvaW50c1NhbWUobyxjKSxwPWUucG9pbnRzU2FtZShzLHUpO2lmKGYmJnApcmV0dXJuIG47dmFyIGQ9IWYmJmUucG9pbnRCZXR3ZWVuKG8sYyx1KSxnPSFwJiZlLnBvaW50QmV0d2VlbihzLGMsdSk7aWYoZilyZXR1cm4gZz9sKG4scyk6bCh0LHUpLG47ZCYmKHB8fChnP2wobixzKTpsKHQsdSkpLGwobixvKSl9ZWxzZSAwPT09aC5hbG9uZ0EmJigtMT09PWguYWxvbmdCP2wodCxjKTowPT09aC5hbG9uZ0I/bCh0LGgucHQpOjE9PT1oLmFsb25nQiYmbCh0LHUpKSwwPT09aC5hbG9uZ0ImJigtMT09PWguYWxvbmdBP2wobixvKTowPT09aC5hbG9uZ0E/bChuLGgucHQpOjE9PT1oLmFsb25nQSYmbChuLHMpKTtyZXR1cm4hMX1mb3IodmFyIGg9W107IWEuaXNFbXB0eSgpOyl7dmFyIGY9YS5nZXRIZWFkKCk7aWYociYmci52ZXJ0KGYucHRbMF0pLGYuaXNTdGFydCl7ciYmci5zZWdtZW50TmV3KGYuc2VnLGYucHJpbWFyeSk7dmFyIHA9YyhmKSxkPXAuYmVmb3JlP3AuYmVmb3JlLmV2Om51bGwsZz1wLmFmdGVyP3AuYWZ0ZXIuZXY6bnVsbDtmdW5jdGlvbiB2KCl7aWYoZCl7dmFyIHQ9dShmLGQpO2lmKHQpcmV0dXJuIHR9cmV0dXJuISFnJiZ1KGYsZyl9ciYmci50ZW1wU3RhdHVzKGYuc2VnLCEhZCYmZC5zZWcsISFnJiZnLnNlZyk7dmFyIG0seSx4PXYoKTtpZih4KXQ/KHk9bnVsbD09PWYuc2VnLm15RmlsbC5iZWxvd3x8Zi5zZWcubXlGaWxsLmFib3ZlIT09Zi5zZWcubXlGaWxsLmJlbG93KSYmKHguc2VnLm15RmlsbC5hYm92ZT0heC5zZWcubXlGaWxsLmFib3ZlKTp4LnNlZy5vdGhlckZpbGw9Zi5zZWcubXlGaWxsLHImJnIuc2VnbWVudFVwZGF0ZSh4LnNlZyksZi5vdGhlci5yZW1vdmUoKSxmLnJlbW92ZSgpO2lmKGEuZ2V0SGVhZCgpIT09Zil7ciYmci5yZXdpbmQoZi5zZWcpO2NvbnRpbnVlfXQ/KHk9bnVsbD09PWYuc2VnLm15RmlsbC5iZWxvd3x8Zi5zZWcubXlGaWxsLmFib3ZlIT09Zi5zZWcubXlGaWxsLmJlbG93LGYuc2VnLm15RmlsbC5iZWxvdz1nP2cuc2VnLm15RmlsbC5hYm92ZTppLGYuc2VnLm15RmlsbC5hYm92ZT15PyFmLnNlZy5teUZpbGwuYmVsb3c6Zi5zZWcubXlGaWxsLmJlbG93KTpudWxsPT09Zi5zZWcub3RoZXJGaWxsJiYobT1nP2YucHJpbWFyeT09PWcucHJpbWFyeT9nLnNlZy5vdGhlckZpbGwuYWJvdmU6Zy5zZWcubXlGaWxsLmFib3ZlOmYucHJpbWFyeT9vOmksZi5zZWcub3RoZXJGaWxsPXthYm92ZTptLGJlbG93Om19KSxyJiZyLnN0YXR1cyhmLnNlZywhIWQmJmQuc2VnLCEhZyYmZy5zZWcpLGYub3RoZXIuc3RhdHVzPXAuaW5zZXJ0KG4ubm9kZSh7ZXY6Zn0pKX1lbHNle3ZhciBiPWYuc3RhdHVzO2lmKG51bGw9PT1iKXRocm93IG5ldyBFcnJvcihcIlBvbHlCb29sOiBaZXJvLWxlbmd0aCBzZWdtZW50IGRldGVjdGVkOyB5b3VyIGVwc2lsb24gaXMgcHJvYmFibHkgdG9vIHNtYWxsIG9yIHRvbyBsYXJnZVwiKTtpZihzLmV4aXN0cyhiLnByZXYpJiZzLmV4aXN0cyhiLm5leHQpJiZ1KGIucHJldi5ldixiLm5leHQuZXYpLHImJnIuc3RhdHVzUmVtb3ZlKGIuZXYuc2VnKSxiLnJlbW92ZSgpLCFmLnByaW1hcnkpe3ZhciBfPWYuc2VnLm15RmlsbDtmLnNlZy5teUZpbGw9Zi5zZWcub3RoZXJGaWxsLGYuc2VnLm90aGVyRmlsbD1ffWgucHVzaChmLnNlZyl9YS5nZXRIZWFkKCkucmVtb3ZlKCl9cmV0dXJuIHImJnIuZG9uZSgpLGh9cmV0dXJuIHQ/e2FkZFJlZ2lvbjpmdW5jdGlvbih0KXtmb3IodmFyIG4saSxhLG89dFt0Lmxlbmd0aC0xXSxsPTA7bDx0Lmxlbmd0aDtsKyspe249byxvPXRbbF07dmFyIGM9ZS5wb2ludHNDb21wYXJlKG4sbyk7MCE9PWMmJnMoKGk9YzwwP246byxhPWM8MD9vOm4se2lkOnI/ci5zZWdtZW50SWQoKTotMSxzdGFydDppLGVuZDphLG15RmlsbDp7YWJvdmU6bnVsbCxiZWxvdzpudWxsfSxvdGhlckZpbGw6bnVsbH0pLCEwKX19LGNhbGN1bGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCExKX19OntjYWxjdWxhdGU6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXtzKGkodC5zdGFydCx0LmVuZCx0KSwhMCl9KSxyLmZvckVhY2goZnVuY3Rpb24odCl7cyhpKHQuc3RhcnQsdC5lbmQsdCksITEpfSksYyhlLG4pfX19fSx7XCIuL2xpbmtlZC1saXN0XCI6NDcxfV0sNDcxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXtjcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD17cm9vdDp7cm9vdDohMCxuZXh0Om51bGx9LGV4aXN0czpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWUmJmUhPT10LnJvb3R9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXQucm9vdC5uZXh0fSxnZXRIZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIHQucm9vdC5uZXh0fSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49dC5yb290LGk9dC5yb290Lm5leHQ7bnVsbCE9PWk7KXtpZihyKGkpKXJldHVybiBlLnByZXY9aS5wcmV2LGUubmV4dD1pLGkucHJldi5uZXh0PWUsdm9pZChpLnByZXY9ZSk7bj1pLGk9aS5uZXh0fW4ubmV4dD1lLGUucHJldj1uLGUubmV4dD1udWxsfSxmaW5kVHJhbnNpdGlvbjpmdW5jdGlvbihlKXtmb3IodmFyIHI9dC5yb290LG49dC5yb290Lm5leHQ7bnVsbCE9PW4mJiFlKG4pOylyPW4sbj1uLm5leHQ7cmV0dXJue2JlZm9yZTpyPT09dC5yb290P251bGw6cixhZnRlcjpuLGluc2VydDpmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2PXIsdC5uZXh0PW4sci5uZXh0PXQsbnVsbCE9PW4mJihuLnByZXY9dCksdH19fX07cmV0dXJuIHR9LG5vZGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldj1udWxsLHQubmV4dD1udWxsLHQucmVtb3ZlPWZ1bmN0aW9uKCl7dC5wcmV2Lm5leHQ9dC5uZXh0LHQubmV4dCYmKHQubmV4dC5wcmV2PXQucHJldiksdC5wcmV2PW51bGwsdC5uZXh0PW51bGx9LHR9fX0se31dLDQ3MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49W10saT1bXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBhPXQuc3RhcnQsbz10LmVuZDtpZihlLnBvaW50c1NhbWUoYSxvKSljb25zb2xlLndhcm4oXCJQb2x5Qm9vbDogV2FybmluZzogWmVyby1sZW5ndGggc2VnbWVudCBkZXRlY3RlZDsgeW91ciBlcHNpbG9uIGlzIHByb2JhYmx5IHRvbyBzbWFsbCBvciB0b28gbGFyZ2VcIik7ZWxzZXtyJiZyLmNoYWluU3RhcnQodCk7Zm9yKHZhciBzPXtpbmRleDowLG1hdGNoZXNfaGVhZDohMSxtYXRjaGVzX3B0MTohMX0sbD17aW5kZXg6MCxtYXRjaGVzX2hlYWQ6ITEsbWF0Y2hlc19wdDE6ITF9LGM9cyx1PTA7dTxuLmxlbmd0aDt1Kyspe3ZhciBoPSh2PW5bdV0pWzBdLGY9KHZbMV0sdlt2Lmxlbmd0aC0xXSk7aWYodlt2Lmxlbmd0aC0yXSxlLnBvaW50c1NhbWUoaCxhKSl7aWYoQSh1LCEwLCEwKSlicmVha31lbHNlIGlmKGUucG9pbnRzU2FtZShoLG8pKXtpZihBKHUsITAsITEpKWJyZWFrfWVsc2UgaWYoZS5wb2ludHNTYW1lKGYsYSkpe2lmKEEodSwhMSwhMCkpYnJlYWt9ZWxzZSBpZihlLnBvaW50c1NhbWUoZixvKSYmQSh1LCExLCExKSlicmVha31pZihjPT09cylyZXR1cm4gbi5wdXNoKFthLG9dKSx2b2lkKHImJnIuY2hhaW5OZXcoYSxvKSk7aWYoYz09PWwpe3ImJnIuY2hhaW5NYXRjaChzLmluZGV4KTt2YXIgcD1zLmluZGV4LGQ9cy5tYXRjaGVzX3B0MT9vOmEsZz1zLm1hdGNoZXNfaGVhZCx2PW5bcF0sbT1nP3ZbMF06dlt2Lmxlbmd0aC0xXSx5PWc/dlsxXTp2W3YubGVuZ3RoLTJdLHg9Zz92W3YubGVuZ3RoLTFdOnZbMF0sYj1nP3Zbdi5sZW5ndGgtMl06dlsxXTtyZXR1cm4gZS5wb2ludHNDb2xsaW5lYXIoeSxtLGQpJiYoZz8ociYmci5jaGFpblJlbW92ZUhlYWQocy5pbmRleCxkKSx2LnNoaWZ0KCkpOihyJiZyLmNoYWluUmVtb3ZlVGFpbChzLmluZGV4LGQpLHYucG9wKCkpLG09eSksZS5wb2ludHNTYW1lKHgsZCk/KG4uc3BsaWNlKHAsMSksZS5wb2ludHNDb2xsaW5lYXIoYix4LG0pJiYoZz8ociYmci5jaGFpblJlbW92ZVRhaWwocy5pbmRleCxtKSx2LnBvcCgpKToociYmci5jaGFpblJlbW92ZUhlYWQocy5pbmRleCxtKSx2LnNoaWZ0KCkpKSxyJiZyLmNoYWluQ2xvc2Uocy5pbmRleCksdm9pZCBpLnB1c2godikpOnZvaWQoZz8ociYmci5jaGFpbkFkZEhlYWQocy5pbmRleCxkKSx2LnVuc2hpZnQoZCkpOihyJiZyLmNoYWluQWRkVGFpbChzLmluZGV4LGQpLHYucHVzaChkKSkpfXZhciBfPXMuaW5kZXgsdz1sLmluZGV4O3ImJnIuY2hhaW5Db25uZWN0KF8sdyk7dmFyIGs9bltfXS5sZW5ndGg8blt3XS5sZW5ndGg7cy5tYXRjaGVzX2hlYWQ/bC5tYXRjaGVzX2hlYWQ/az8oVChfKSxNKF8sdykpOihUKHcpLE0odyxfKSk6TSh3LF8pOmwubWF0Y2hlc19oZWFkP00oXyx3KTprPyhUKF8pLE0odyxfKSk6KFQodyksTShfLHcpKX1mdW5jdGlvbiBBKHQsZSxyKXtyZXR1cm4gYy5pbmRleD10LGMubWF0Y2hlc19oZWFkPWUsYy5tYXRjaGVzX3B0MT1yLGM9PT1zPyhjPWwsITEpOihjPW51bGwsITApfWZ1bmN0aW9uIFQodCl7ciYmci5jaGFpblJldmVyc2UodCksblt0XS5yZXZlcnNlKCl9ZnVuY3Rpb24gTSh0LGkpe3ZhciBhPW5bdF0sbz1uW2ldLHM9YVthLmxlbmd0aC0xXSxsPWFbYS5sZW5ndGgtMl0sYz1vWzBdLHU9b1sxXTtlLnBvaW50c0NvbGxpbmVhcihsLHMsYykmJihyJiZyLmNoYWluUmVtb3ZlVGFpbCh0LHMpLGEucG9wKCkscz1sKSxlLnBvaW50c0NvbGxpbmVhcihzLGMsdSkmJihyJiZyLmNoYWluUmVtb3ZlSGVhZChpLGMpLG8uc2hpZnQoKSksciYmci5jaGFpbkpvaW4odCxpKSxuW3RdPWEuY29uY2F0KG8pLG4uc3BsaWNlKGksMSl9fSksaX19LHt9XSw0NzM6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj1bXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBpPSh0Lm15RmlsbC5hYm92ZT84OjApKyh0Lm15RmlsbC5iZWxvdz80OjApKyh0Lm90aGVyRmlsbCYmdC5vdGhlckZpbGwuYWJvdmU/MjowKSsodC5vdGhlckZpbGwmJnQub3RoZXJGaWxsLmJlbG93PzE6MCk7MCE9PWVbaV0mJm4ucHVzaCh7aWQ6cj9yLnNlZ21lbnRJZCgpOi0xLHN0YXJ0OnQuc3RhcnQsZW5kOnQuZW5kLG15RmlsbDp7YWJvdmU6MT09PWVbaV0sYmVsb3c6Mj09PWVbaV19LG90aGVyRmlsbDpudWxsfSl9KSxyJiZyLnNlbGVjdGVkKG4pLG59dmFyIGk9e3VuaW9uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxbMCwyLDEsMCwyLDIsMCwwLDEsMCwxLDAsMCwwLDAsMF0sZSl9LGludGVyc2VjdDpmdW5jdGlvbih0LGUpe3JldHVybiBuKHQsWzAsMCwwLDAsMCwyLDAsMiwwLDAsMSwxLDAsMiwxLDBdLGUpfSxkaWZmZXJlbmNlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxbMCwwLDAsMCwyLDAsMiwwLDEsMSwwLDAsMCwxLDIsMF0sZSl9LGRpZmZlcmVuY2VSZXY6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LFswLDIsMSwwLDAsMCwxLDEsMCwyLDAsMiwwLDAsMCwwXSxlKX0seG9yOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxbMCwyLDEsMCwyLDAsMCwxLDEsMCwwLDIsMCwxLDIsMF0sZSl9fTtlLmV4cG9ydHM9aX0se31dLDQ3NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPW5ldyBGbG9hdDY0QXJyYXkoNCksaT1uZXcgRmxvYXQ2NEFycmF5KDQpLGE9bmV3IEZsb2F0NjRBcnJheSg0KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzKXtuLmxlbmd0aDxvLmxlbmd0aCYmKG49bmV3IEZsb2F0NjRBcnJheShvLmxlbmd0aCksaT1uZXcgRmxvYXQ2NEFycmF5KG8ubGVuZ3RoKSxhPW5ldyBGbG9hdDY0QXJyYXkoby5sZW5ndGgpKTtmb3IodmFyIGw9MDtsPG8ubGVuZ3RoOysrbCluW2xdPXRbbF0tb1tsXSxpW2xdPWVbbF0tdFtsXSxhW2xdPXJbbF0tdFtsXTt2YXIgYz0wLHU9MCxoPTAsZj0wLHA9MCxkPTA7Zm9yKGw9MDtsPG8ubGVuZ3RoOysrbCl7dmFyIGc9aVtsXSx2PWFbbF0sbT1uW2xdO2MrPWcqZyx1Kz1nKnYsaCs9dip2LGYrPW0qZyxwKz1tKnYsZCs9bSptfXZhciB5LHgsYixfLHcsaz1NYXRoLmFicyhjKmgtdSp1KSxBPXUqcC1oKmYsVD11KmYtYypwO2lmKEErVDw9aylpZihBPDApVDwwJiZmPDA/KFQ9MCwtZj49Yz8oQT0xLHk9YysyKmYrZCk6eT1mKihBPS1mL2MpK2QpOihBPTAscD49MD8oVD0wLHk9ZCk6LXA+PWg/KFQ9MSx5PWgrMipwK2QpOnk9cCooVD0tcC9oKStkKTtlbHNlIGlmKFQ8MClUPTAsZj49MD8oQT0wLHk9ZCk6LWY+PWM/KEE9MSx5PWMrMipmK2QpOnk9ZiooQT0tZi9jKStkO2Vsc2V7dmFyIE09MS9rO3k9KEEqPU0pKihjKkErdSooVCo9TSkrMipmKStUKih1KkEraCpUKzIqcCkrZH1lbHNlIEE8MD8oYj1oK3ApPih4PXUrZik/KF89Yi14KT49KHc9Yy0yKnUraCk/KEE9MSxUPTAseT1jKzIqZitkKTp5PShBPV8vdykqKGMqQSt1KihUPTEtQSkrMipmKStUKih1KkEraCpUKzIqcCkrZDooQT0wLGI8PTA/KFQ9MSx5PWgrMipwK2QpOnA+PTA/KFQ9MCx5PWQpOnk9cCooVD0tcC9oKStkKTpUPDA/KGI9YytmKT4oeD11K3ApPyhfPWIteCk+PSh3PWMtMip1K2gpPyhUPTEsQT0wLHk9aCsyKnArZCk6eT0oQT0xLShUPV8vdykpKihjKkErdSpUKzIqZikrVCoodSpBK2gqVCsyKnApK2Q6KFQ9MCxiPD0wPyhBPTEseT1jKzIqZitkKTpmPj0wPyhBPTAseT1kKTp5PWYqKEE9LWYvYykrZCk6KF89aCtwLXUtZik8PTA/KEE9MCxUPTEseT1oKzIqcCtkKTpfPj0odz1jLTIqdStoKT8oQT0xLFQ9MCx5PWMrMipmK2QpOnk9KEE9Xy93KSooYypBK3UqKFQ9MS1BKSsyKmYpK1QqKHUqQStoKlQrMipwKStkO3ZhciBTPTEtQS1UO2ZvcihsPTA7bDxvLmxlbmd0aDsrK2wpc1tsXT1TKnRbbF0rQSplW2xdK1QqcltsXTtyZXR1cm4geTwwPzA6eX19LHt9XSw0NzU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9ZS5leHBvcnRzPXt9O2Z1bmN0aW9uIG8oKXt0aHJvdyBuZXcgRXJyb3IoXCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfWZ1bmN0aW9uIHMoKXt0aHJvdyBuZXcgRXJyb3IoXCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9ZnVuY3Rpb24gbCh0KXtpZihuPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dCh0LDApO2lmKChuPT09b3x8IW4pJiZzZXRUaW1lb3V0KXJldHVybiBuPXNldFRpbWVvdXQsc2V0VGltZW91dCh0LDApO3RyeXtyZXR1cm4gbih0LDApfWNhdGNoKGUpe3RyeXtyZXR1cm4gbi5jYWxsKG51bGwsdCwwKX1jYXRjaChlKXtyZXR1cm4gbi5jYWxsKHRoaXMsdCwwKX19fSFmdW5jdGlvbigpe3RyeXtuPVwiZnVuY3Rpb25cIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDpvfWNhdGNoKHQpe249b310cnl7aT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0OnN9Y2F0Y2godCl7aT1zfX0oKTt2YXIgYyx1PVtdLGg9ITEsZj0tMTtmdW5jdGlvbiBwKCl7aCYmYyYmKGg9ITEsYy5sZW5ndGg/dT1jLmNvbmNhdCh1KTpmPS0xLHUubGVuZ3RoJiZkKCkpfWZ1bmN0aW9uIGQoKXtpZighaCl7dmFyIHQ9bChwKTtoPSEwO2Zvcih2YXIgZT11Lmxlbmd0aDtlOyl7Zm9yKGM9dSx1PVtdOysrZjxlOyljJiZjW2ZdLnJ1bigpO2Y9LTEsZT11Lmxlbmd0aH1jPW51bGwsaD0hMSxmdW5jdGlvbih0KXtpZihpPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQodCk7aWYoKGk9PT1zfHwhaSkmJmNsZWFyVGltZW91dClyZXR1cm4gaT1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KHQpO3RyeXtpKHQpfWNhdGNoKGUpe3RyeXtyZXR1cm4gaS5jYWxsKG51bGwsdCl9Y2F0Y2goZSl7cmV0dXJuIGkuY2FsbCh0aGlzLHQpfX19KHQpfX1mdW5jdGlvbiBnKHQsZSl7dGhpcy5mdW49dCx0aGlzLmFycmF5PWV9ZnVuY3Rpb24gdigpe31hLm5leHRUaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWVbci0xXT1hcmd1bWVudHNbcl07dS5wdXNoKG5ldyBnKHQsZSkpLDEhPT11Lmxlbmd0aHx8aHx8bChkKX0sZy5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX0sYS50aXRsZT1cImJyb3dzZXJcIixhLmJyb3dzZXI9ITAsYS5lbnY9e30sYS5hcmd2PVtdLGEudmVyc2lvbj1cIlwiLGEudmVyc2lvbnM9e30sYS5vbj12LGEuYWRkTGlzdGVuZXI9dixhLm9uY2U9dixhLm9mZj12LGEucmVtb3ZlTGlzdGVuZXI9dixhLnJlbW92ZUFsbExpc3RlbmVycz12LGEuZW1pdD12LGEucHJlcGVuZExpc3RlbmVyPXYsYS5wcmVwZW5kT25jZUxpc3RlbmVyPXYsYS5saXN0ZW5lcnM9ZnVuY3Rpb24odCl7cmV0dXJuW119LGEuYmluZGluZz1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZFwiKX0sYS5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm5cIi9cIn0sYS5jaGRpcj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWRcIil9LGEudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LHt9XSw0NzY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dChcImdsLXF1YXQvc2xlcnBcIil9LHtcImdsLXF1YXQvc2xlcnBcIjoyOTB9XSw0Nzc6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7Zm9yKHZhciBuPXQoXCJwZXJmb3JtYW5jZS1ub3dcIiksaT1cInVuZGVmaW5lZFwiPT10eXBlb2Ygd2luZG93P3I6d2luZG93LGE9W1wibW96XCIsXCJ3ZWJraXRcIl0sbz1cIkFuaW1hdGlvbkZyYW1lXCIscz1pW1wicmVxdWVzdFwiK29dLGw9aVtcImNhbmNlbFwiK29dfHxpW1wiY2FuY2VsUmVxdWVzdFwiK29dLGM9MDshcyYmYzxhLmxlbmd0aDtjKyspcz1pW2FbY10rXCJSZXF1ZXN0XCIrb10sbD1pW2FbY10rXCJDYW5jZWxcIitvXXx8aVthW2NdK1wiQ2FuY2VsUmVxdWVzdFwiK29dO2lmKCFzfHwhbCl7dmFyIHU9MCxoPTAsZj1bXTtzPWZ1bmN0aW9uKHQpe2lmKDA9PT1mLmxlbmd0aCl7dmFyIGU9bigpLHI9TWF0aC5tYXgoMCwxZTMvNjAtKGUtdSkpO3U9citlLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgdD1mLnNsaWNlKDApO2YubGVuZ3RoPTA7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYoIXRbZV0uY2FuY2VsbGVkKXRyeXt0W2VdLmNhbGxiYWNrKHUpfWNhdGNoKHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyB0fSwwKX19LE1hdGgucm91bmQocikpfXJldHVybiBmLnB1c2goe2hhbmRsZTorK2gsY2FsbGJhY2s6dCxjYW5jZWxsZWQ6ITF9KSxofSxsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8Zi5sZW5ndGg7ZSsrKWZbZV0uaGFuZGxlPT09dCYmKGZbZV0uY2FuY2VsbGVkPSEwKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBzLmNhbGwoaSx0KX0sZS5leHBvcnRzLmNhbmNlbD1mdW5jdGlvbigpe2wuYXBwbHkoaSxhcmd1bWVudHMpfSxlLmV4cG9ydHMucG9seWZpbGw9ZnVuY3Rpb24odCl7dHx8KHQ9aSksdC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9cyx0LmNhbmNlbEFuaW1hdGlvbkZyYW1lPWx9fSkuY2FsbCh0aGlzLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7XCJwZXJmb3JtYW5jZS1ub3dcIjo0NTV9XSw0Nzg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiYmlnLXJhdC9hZGRcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7KythKWlbYV09bih0W2FdLGVbYV0pO3JldHVybiBpfX0se1wiYmlnLXJhdC9hZGRcIjo2Nn1dLDQ3OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDsrK3IpZVtyXT1uKHRbcl0pO3JldHVybiBlfTt2YXIgbj10KFwiYmlnLXJhdFwiKX0se1wiYmlnLXJhdFwiOjY5fV0sNDgwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImJpZy1yYXRcIiksaT10KFwiYmlnLXJhdC9tdWxcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW4oZSksYT10Lmxlbmd0aCxvPW5ldyBBcnJheShhKSxzPTA7czxhOysrcylvW3NdPWkodFtzXSxyKTtyZXR1cm4gb319LHtcImJpZy1yYXRcIjo2OSxcImJpZy1yYXQvbXVsXCI6Nzh9XSw0ODE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiYmlnLXJhdC9zdWJcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7KythKWlbYV09bih0W2FdLGVbYV0pO3JldHVybiBpfX0se1wiYmlnLXJhdC9zdWJcIjo4MH1dLDQ4MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJjb21wYXJlLWNlbGxcIiksaT10KFwiY29tcGFyZS1vcmllbnRlZC1jZWxsXCIpLGE9dChcImNlbGwtb3JpZW50YXRpb25cIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3Quc29ydChpKTtmb3IodmFyIGU9dC5sZW5ndGgscj0wLG89MDtvPGU7KytvKXt2YXIgcz10W29dLGw9YShzKTtpZigwIT09bCl7aWYocj4wKXt2YXIgYz10W3ItMV07aWYoMD09PW4ocyxjKSYmYShjKSE9PWwpe3ItPTE7Y29udGludWV9fXRbcisrXT1zfX1yZXR1cm4gdC5sZW5ndGg9cix0fX0se1wiY2VsbC1vcmllbnRhdGlvblwiOjEwMyxcImNvbXBhcmUtY2VsbFwiOjExOSxcImNvbXBhcmUtb3JpZW50ZWQtY2VsbFwiOjEyMH1dLDQ4MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJhcnJheS1ib3VuZHNcIiksaT10KFwiY29sb3Itbm9ybWFsaXplXCIpLGE9dChcInVwZGF0ZS1kaWZmXCIpLG89dChcInBpY2stYnktYWxpYXNcIikscz10KFwib2JqZWN0LWFzc2lnblwiKSxsPXQoXCJmbGF0dGVuLXZlcnRleC1kYXRhXCIpLGM9dChcInRvLWZsb2F0MzJcIiksdT1jLmZsb2F0MzIsaD1jLmZyYWN0MzI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7XCJmdW5jdGlvblwiPT10eXBlb2YgdD8oZXx8KGU9e30pLGUucmVnbD10KTplPXQ7ZS5sZW5ndGgmJihlLnBvc2l0aW9ucz1lKTtpZighKHQ9ZS5yZWdsKS5oYXNFeHRlbnNpb24oXCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzXCIpKXRocm93IEVycm9yKFwicmVnbC1lcnJvcjJkOiBgQU5HTEVfaW5zdGFuY2VkX2FycmF5c2AgZXh0ZW5zaW9uIHNob3VsZCBiZSBlbmFibGVkXCIpO3ZhciByLGMscCxkLGcsdixtPXQuX2dsLHk9e2NvbG9yOlwiYmxhY2tcIixjYXBTaXplOjUsbGluZVdpZHRoOjEsb3BhY2l0eToxLHZpZXdwb3J0Om51bGwscmFuZ2U6bnVsbCxvZmZzZXQ6MCxjb3VudDowLGJvdW5kczpudWxsLHBvc2l0aW9uczpbXSxlcnJvcnM6W119LHg9W107cmV0dXJuIGQ9dC5idWZmZXIoe3VzYWdlOlwiZHluYW1pY1wiLHR5cGU6XCJ1aW50OFwiLGRhdGE6bmV3IFVpbnQ4QXJyYXkoMCl9KSxjPXQuYnVmZmVyKHt1c2FnZTpcImR5bmFtaWNcIix0eXBlOlwiZmxvYXRcIixkYXRhOm5ldyBVaW50OEFycmF5KDApfSkscD10LmJ1ZmZlcih7dXNhZ2U6XCJkeW5hbWljXCIsdHlwZTpcImZsb2F0XCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pLGc9dC5idWZmZXIoe3VzYWdlOlwiZHluYW1pY1wiLHR5cGU6XCJmbG9hdFwiLGRhdGE6bmV3IFVpbnQ4QXJyYXkoMCl9KSx2PXQuYnVmZmVyKHt1c2FnZTpcInN0YXRpY1wiLHR5cGU6XCJmbG9hdFwiLGRhdGE6Zn0pLGsoZSkscj10KHt2ZXJ0OlwiXFxuXFx0XFx0cHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcblxcblxcdFxcdGF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uLCBwb3NpdGlvbkZyYWN0O1xcblxcdFxcdGF0dHJpYnV0ZSB2ZWM0IGVycm9yO1xcblxcdFxcdGF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xcblxcblxcdFxcdGF0dHJpYnV0ZSB2ZWMyIGRpcmVjdGlvbiwgbGluZU9mZnNldCwgY2FwT2Zmc2V0O1xcblxcblxcdFxcdHVuaWZvcm0gdmVjNCB2aWV3cG9ydDtcXG5cXHRcXHR1bmlmb3JtIGZsb2F0IGxpbmVXaWR0aCwgY2FwU2l6ZTtcXG5cXHRcXHR1bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3Q7XFxuXFxuXFx0XFx0dmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcXG5cXG5cXHRcXHR2b2lkIG1haW4oKSB7XFxuXFx0XFx0XFx0ZnJhZ0NvbG9yID0gY29sb3IgLyAyNTUuO1xcblxcblxcdFxcdFxcdHZlYzIgcGl4ZWxPZmZzZXQgPSBsaW5lV2lkdGggKiBsaW5lT2Zmc2V0ICsgKGNhcFNpemUgKyBsaW5lV2lkdGgpICogY2FwT2Zmc2V0O1xcblxcblxcdFxcdFxcdHZlYzIgZHh5ID0gLXN0ZXAoLjUsIGRpcmVjdGlvbi54eSkgKiBlcnJvci54eiArIHN0ZXAoZGlyZWN0aW9uLnh5LCB2ZWMyKC0uNSkpICogZXJyb3IueXc7XFxuXFxuXFx0XFx0XFx0dmVjMiBwb3NpdGlvbiA9IHBvc2l0aW9uICsgZHh5O1xcblxcblxcdFxcdFxcdHZlYzIgcG9zID0gKHBvc2l0aW9uICsgdHJhbnNsYXRlKSAqIHNjYWxlXFxuXFx0XFx0XFx0XFx0KyAocG9zaXRpb25GcmFjdCArIHRyYW5zbGF0ZUZyYWN0KSAqIHNjYWxlXFxuXFx0XFx0XFx0XFx0KyAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVGcmFjdFxcblxcdFxcdFxcdFxcdCsgKHBvc2l0aW9uRnJhY3QgKyB0cmFuc2xhdGVGcmFjdCkgKiBzY2FsZUZyYWN0O1xcblxcblxcdFxcdFxcdHBvcyArPSBwaXhlbE9mZnNldCAvIHZpZXdwb3J0Lnp3O1xcblxcblxcdFxcdFxcdGdsX1Bvc2l0aW9uID0gdmVjNChwb3MgKiAyLiAtIDEuLCAwLCAxKTtcXG5cXHRcXHR9XFxuXFx0XFx0XCIsZnJhZzpcIlxcblxcdFxcdHByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG5cXHRcXHR2YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xcblxcblxcdFxcdHVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcXG5cXG5cXHRcXHR2b2lkIG1haW4oKSB7XFxuXFx0XFx0XFx0Z2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xcblxcdFxcdFxcdGdsX0ZyYWdDb2xvci5hICo9IG9wYWNpdHk7XFxuXFx0XFx0fVxcblxcdFxcdFwiLHVuaWZvcm1zOntyYW5nZTp0LnByb3AoXCJyYW5nZVwiKSxsaW5lV2lkdGg6dC5wcm9wKFwibGluZVdpZHRoXCIpLGNhcFNpemU6dC5wcm9wKFwiY2FwU2l6ZVwiKSxvcGFjaXR5OnQucHJvcChcIm9wYWNpdHlcIiksc2NhbGU6dC5wcm9wKFwic2NhbGVcIiksdHJhbnNsYXRlOnQucHJvcChcInRyYW5zbGF0ZVwiKSxzY2FsZUZyYWN0OnQucHJvcChcInNjYWxlRnJhY3RcIiksdHJhbnNsYXRlRnJhY3Q6dC5wcm9wKFwidHJhbnNsYXRlRnJhY3RcIiksdmlld3BvcnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm5bZS52aWV3cG9ydC54LGUudmlld3BvcnQueSx0LnZpZXdwb3J0V2lkdGgsdC52aWV3cG9ydEhlaWdodF19fSxhdHRyaWJ1dGVzOntjb2xvcjp7YnVmZmVyOmQsb2Zmc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDQqZS5vZmZzZXR9LGRpdmlzb3I6MX0scG9zaXRpb246e2J1ZmZlcjpjLG9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiA4KmUub2Zmc2V0fSxkaXZpc29yOjF9LHBvc2l0aW9uRnJhY3Q6e2J1ZmZlcjpwLG9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiA4KmUub2Zmc2V0fSxkaXZpc29yOjF9LGVycm9yOntidWZmZXI6ZyxvZmZzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gMTYqZS5vZmZzZXR9LGRpdmlzb3I6MX0sZGlyZWN0aW9uOntidWZmZXI6dixzdHJpZGU6MjQsb2Zmc2V0OjB9LGxpbmVPZmZzZXQ6e2J1ZmZlcjp2LHN0cmlkZToyNCxvZmZzZXQ6OH0sY2FwT2Zmc2V0OntidWZmZXI6dixzdHJpZGU6MjQsb2Zmc2V0OjE2fX0scHJpbWl0aXZlOlwidHJpYW5nbGVzXCIsYmxlbmQ6e2VuYWJsZTohMCxjb2xvcjpbMCwwLDAsMF0sZXF1YXRpb246e3JnYjpcImFkZFwiLGFscGhhOlwiYWRkXCJ9LGZ1bmM6e3NyY1JHQjpcInNyYyBhbHBoYVwiLGRzdFJHQjpcIm9uZSBtaW51cyBzcmMgYWxwaGFcIixzcmNBbHBoYTpcIm9uZSBtaW51cyBkc3QgYWxwaGFcIixkc3RBbHBoYTpcIm9uZVwifX0sZGVwdGg6e2VuYWJsZTohMX0sc2Npc3Nvcjp7ZW5hYmxlOiEwLGJveDp0LnByb3AoXCJ2aWV3cG9ydFwiKX0sdmlld3BvcnQ6dC5wcm9wKFwidmlld3BvcnRcIiksc3RlbmNpbDohMSxpbnN0YW5jZXM6dC5wcm9wKFwiY291bnRcIiksY291bnQ6Zi5sZW5ndGh9KSxzKGIse3VwZGF0ZTprLGRyYXc6XyxkZXN0cm95OkEscmVnbDp0LGdsOm0sY2FudmFzOm0uY2FudmFzLGdyb3Vwczp4fSksYjtmdW5jdGlvbiBiKHQpe3Q/ayh0KTpudWxsPT09dCYmQSgpLF8oKX1mdW5jdGlvbiBfKGUpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXJldHVybiB3KGUpO2UmJiFBcnJheS5pc0FycmF5KGUpJiYoZT1bZV0pLHQuX3JlZnJlc2goKSx4LmZvckVhY2goZnVuY3Rpb24odCxyKXt0JiYoZSYmKGVbcl0/dC5kcmF3PSEwOnQuZHJhdz0hMSksdC5kcmF3P3cocik6dC5kcmF3PSEwKX0pfWZ1bmN0aW9uIHcodCl7XCJudW1iZXJcIj09dHlwZW9mIHQmJih0PXhbdF0pLG51bGwhPXQmJnQmJnQuY291bnQmJnQuY29sb3ImJnQub3BhY2l0eSYmdC5wb3NpdGlvbnMmJnQucG9zaXRpb25zLmxlbmd0aD4xJiYodC5zY2FsZVJhdGlvPVt0LnNjYWxlWzBdKnQudmlld3BvcnQud2lkdGgsdC5zY2FsZVsxXSp0LnZpZXdwb3J0LmhlaWdodF0scih0KSx0LmFmdGVyJiZ0LmFmdGVyKHQpKX1mdW5jdGlvbiBrKHQpe2lmKHQpe251bGwhPXQubGVuZ3RoP1wibnVtYmVyXCI9PXR5cGVvZiB0WzBdJiYodD1be3Bvc2l0aW9uczp0fV0pOkFycmF5LmlzQXJyYXkodCl8fCh0PVt0XSk7dmFyIGU9MCxyPTA7aWYoYi5ncm91cHM9eD10Lm1hcChmdW5jdGlvbih0LGMpe3ZhciB1PXhbY107cmV0dXJuIHQ/KFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dD17YWZ0ZXI6dH06XCJudW1iZXJcIj09dHlwZW9mIHRbMF0mJih0PXtwb3NpdGlvbnM6dH0pLHQ9byh0LHtjb2xvcjpcImNvbG9yIGNvbG9ycyBmaWxsXCIsY2FwU2l6ZTpcImNhcFNpemUgY2FwIGNhcHNpemUgY2FwLXNpemVcIixsaW5lV2lkdGg6XCJsaW5lV2lkdGggbGluZS13aWR0aCB3aWR0aCBsaW5lIHRoaWNrbmVzc1wiLG9wYWNpdHk6XCJvcGFjaXR5IGFscGhhXCIscmFuZ2U6XCJyYW5nZSBkYXRhQm94XCIsdmlld3BvcnQ6XCJ2aWV3cG9ydCB2aWV3Qm94XCIsZXJyb3JzOlwiZXJyb3JzIGVycm9yXCIscG9zaXRpb25zOlwicG9zaXRpb25zIHBvc2l0aW9uIGRhdGEgcG9pbnRzXCJ9KSx1fHwoeFtjXT11PXtpZDpjLHNjYWxlOm51bGwsdHJhbnNsYXRlOm51bGwsc2NhbGVGcmFjdDpudWxsLHRyYW5zbGF0ZUZyYWN0Om51bGwsZHJhdzohMH0sdD1zKHt9LHksdCkpLGEodSx0LFt7bGluZVdpZHRoOmZ1bmN0aW9uKHQpe3JldHVybi41Kit0fSxjYXBTaXplOmZ1bmN0aW9uKHQpe3JldHVybi41Kit0fSxvcGFjaXR5OnBhcnNlRmxvYXQsZXJyb3JzOmZ1bmN0aW9uKHQpe3JldHVybiB0PWwodCkscis9dC5sZW5ndGgsdH0scG9zaXRpb25zOmZ1bmN0aW9uKHQscil7cmV0dXJuIHQ9bCh0LFwiZmxvYXQ2NFwiKSxyLmNvdW50PU1hdGguZmxvb3IodC5sZW5ndGgvMiksci5ib3VuZHM9bih0LDIpLHIub2Zmc2V0PWUsZSs9ci5jb3VudCx0fX0se2NvbG9yOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5jb3VudDtpZih0fHwodD1cInRyYW5zcGFyZW50XCIpLCFBcnJheS5pc0FycmF5KHQpfHxcIm51bWJlclwiPT10eXBlb2YgdFswXSl7dmFyIG49dDt0PUFycmF5KHIpO2Zvcih2YXIgYT0wO2E8cjthKyspdFthXT1ufWlmKHQubGVuZ3RoPHIpdGhyb3cgRXJyb3IoXCJOb3QgZW5vdWdoIGNvbG9yc1wiKTtmb3IodmFyIG89bmV3IFVpbnQ4QXJyYXkoNCpyKSxzPTA7czxyO3MrKyl7dmFyIGw9aSh0W3NdLFwidWludDhcIik7by5zZXQobCw0KnMpfXJldHVybiBvfSxyYW5nZTpmdW5jdGlvbih0LGUscil7dmFyIG49ZS5ib3VuZHM7cmV0dXJuIHR8fCh0PW4pLGUuc2NhbGU9WzEvKHRbMl0tdFswXSksMS8odFszXS10WzFdKV0sZS50cmFuc2xhdGU9Wy10WzBdLC10WzFdXSxlLnNjYWxlRnJhY3Q9aChlLnNjYWxlKSxlLnRyYW5zbGF0ZUZyYWN0PWgoZS50cmFuc2xhdGUpLHR9LHZpZXdwb3J0OmZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBBcnJheS5pc0FycmF5KHQpP2U9e3g6dFswXSx5OnRbMV0sd2lkdGg6dFsyXS10WzBdLGhlaWdodDp0WzNdLXRbMV19OnQ/KGU9e3g6dC54fHx0LmxlZnR8fDAseTp0Lnl8fHQudG9wfHwwfSx0LnJpZ2h0P2Uud2lkdGg9dC5yaWdodC1lLng6ZS53aWR0aD10Lnd8fHQud2lkdGh8fDAsdC5ib3R0b20/ZS5oZWlnaHQ9dC5ib3R0b20tZS55OmUuaGVpZ2h0PXQuaHx8dC5oZWlnaHR8fDApOmU9e3g6MCx5OjAsd2lkdGg6bS5kcmF3aW5nQnVmZmVyV2lkdGgsaGVpZ2h0Om0uZHJhd2luZ0J1ZmZlckhlaWdodH0sZX19XSksdSk6dX0pLGV8fHIpe3ZhciBmPXgucmVkdWNlKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdCsoZT9lLmNvdW50OjApfSwwKSx2PW5ldyBGbG9hdDY0QXJyYXkoMipmKSxfPW5ldyBVaW50OEFycmF5KDQqZiksdz1uZXcgRmxvYXQzMkFycmF5KDQqZik7eC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7aWYodCl7dmFyIHI9dC5wb3NpdGlvbnMsbj10LmNvdW50LGk9dC5vZmZzZXQsYT10LmNvbG9yLG89dC5lcnJvcnM7biYmKF8uc2V0KGEsNCppKSx3LnNldChvLDQqaSksdi5zZXQociwyKmkpKX19KSxjKHUodikpLHAoaCh2KSksZChfKSxnKHcpfX19ZnVuY3Rpb24gQSgpe2MuZGVzdHJveSgpLHAuZGVzdHJveSgpLGQuZGVzdHJveSgpLGcuZGVzdHJveSgpLHYuZGVzdHJveSgpfX07dmFyIGY9W1sxLDAsMCwxLDAsMF0sWzEsMCwwLC0xLDAsMF0sWy0xLDAsMCwtMSwwLDBdLFstMSwwLDAsLTEsMCwwXSxbLTEsMCwwLDEsMCwwXSxbMSwwLDAsMSwwLDBdLFsxLDAsLTEsMCwwLDFdLFsxLDAsLTEsMCwwLC0xXSxbMSwwLDEsMCwwLC0xXSxbMSwwLDEsMCwwLC0xXSxbMSwwLDEsMCwwLDFdLFsxLDAsLTEsMCwwLDFdLFstMSwwLC0xLDAsMCwxXSxbLTEsMCwtMSwwLDAsLTFdLFstMSwwLDEsMCwwLC0xXSxbLTEsMCwxLDAsMCwtMV0sWy0xLDAsMSwwLDAsMV0sWy0xLDAsLTEsMCwwLDFdLFswLDEsMSwwLDAsMF0sWzAsMSwtMSwwLDAsMF0sWzAsLTEsLTEsMCwwLDBdLFswLC0xLC0xLDAsMCwwXSxbMCwxLDEsMCwwLDBdLFswLC0xLDEsMCwwLDBdLFswLDEsMCwtMSwxLDBdLFswLDEsMCwtMSwtMSwwXSxbMCwxLDAsMSwtMSwwXSxbMCwxLDAsMSwxLDBdLFswLDEsMCwtMSwxLDBdLFswLDEsMCwxLC0xLDBdLFswLC0xLDAsLTEsMSwwXSxbMCwtMSwwLC0xLC0xLDBdLFswLC0xLDAsMSwtMSwwXSxbMCwtMSwwLDEsMSwwXSxbMCwtMSwwLC0xLDEsMF0sWzAsLTEsMCwxLC0xLDBdXX0se1wiYXJyYXktYm91bmRzXCI6NTYsXCJjb2xvci1ub3JtYWxpemVcIjoxMTEsXCJmbGF0dGVuLXZlcnRleC1kYXRhXCI6MjI0LFwib2JqZWN0LWFzc2lnblwiOjQ0NyxcInBpY2stYnktYWxpYXNcIjo0NTgsXCJ0by1mbG9hdDMyXCI6NTIzLFwidXBkYXRlLWRpZmZcIjo1MzR9XSw0ODQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiY29sb3Itbm9ybWFsaXplXCIpLGk9dChcImFycmF5LWJvdW5kc1wiKSxhPXQoXCJvYmplY3QtYXNzaWduXCIpLG89dChcImdsc2xpZnlcIikscz10KFwicGljay1ieS1hbGlhc1wiKSxsPXQoXCJmbGF0dGVuLXZlcnRleC1kYXRhXCIpLGM9dChcImVhcmN1dFwiKSx1PXQoXCJhcnJheS1ub3JtYWxpemVcIiksaD10KFwidG8tZmxvYXQzMlwiKSxmPWguZmxvYXQzMixwPWguZnJhY3QzMixkPXQoXCJlczYtd2Vhay1tYXBcIiksZz10KFwicGFyc2UtcmVjdFwiKTtmdW5jdGlvbiB2KHQsZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgdikpcmV0dXJuIG5ldyB2KHQsZSk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdD8oZXx8KGU9e30pLGUucmVnbD10KTplPXQsZS5sZW5ndGgmJihlLnBvc2l0aW9ucz1lKSwhKHQ9ZS5yZWdsKS5oYXNFeHRlbnNpb24oXCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzXCIpKXRocm93IEVycm9yKFwicmVnbC1lcnJvcjJkOiBgQU5HTEVfaW5zdGFuY2VkX2FycmF5c2AgZXh0ZW5zaW9uIHNob3VsZCBiZSBlbmFibGVkXCIpO3RoaXMuZ2w9dC5fZ2wsdGhpcy5yZWdsPXQsdGhpcy5wYXNzZXM9W10sdGhpcy5zaGFkZXJzPXYuc2hhZGVycy5oYXModCk/di5zaGFkZXJzLmdldCh0KTp2LnNoYWRlcnMuc2V0KHQsdi5jcmVhdGVTaGFkZXJzKHQpKS5nZXQodCksdGhpcy51cGRhdGUoZSl9ZS5leHBvcnRzPXYsdi5kYXNoTXVsdD0yLHYubWF4UGF0dGVybkxlbmd0aD0yNTYsdi5wcmVjaXNpb25UaHJlc2hvbGQ9M2U2LHYubWF4UG9pbnRzPTFlNCx2Lm1heExpbmVzPTIwNDgsdi5zaGFkZXJzPW5ldyBkLHYuY3JlYXRlU2hhZGVycz1mdW5jdGlvbih0KXt2YXIgZSxyPXQuYnVmZmVyKHt1c2FnZTpcInN0YXRpY1wiLHR5cGU6XCJmbG9hdFwiLGRhdGE6WzAsMSwwLDAsMSwxLDEsMF19KSxuPXtwcmltaXRpdmU6XCJ0cmlhbmdsZSBzdHJpcFwiLGluc3RhbmNlczp0LnByb3AoXCJjb3VudFwiKSxjb3VudDo0LG9mZnNldDowLHVuaWZvcm1zOnttaXRlck1vZGU6ZnVuY3Rpb24odCxlKXtyZXR1cm5cInJvdW5kXCI9PT1lLmpvaW4/MjoxfSxtaXRlckxpbWl0OnQucHJvcChcIm1pdGVyTGltaXRcIiksc2NhbGU6dC5wcm9wKFwic2NhbGVcIiksc2NhbGVGcmFjdDp0LnByb3AoXCJzY2FsZUZyYWN0XCIpLHRyYW5zbGF0ZUZyYWN0OnQucHJvcChcInRyYW5zbGF0ZUZyYWN0XCIpLHRyYW5zbGF0ZTp0LnByb3AoXCJ0cmFuc2xhdGVcIiksdGhpY2tuZXNzOnQucHJvcChcInRoaWNrbmVzc1wiKSxkYXNoUGF0dGVybjp0LnByb3AoXCJkYXNoVGV4dHVyZVwiKSxvcGFjaXR5OnQucHJvcChcIm9wYWNpdHlcIikscGl4ZWxSYXRpbzp0LmNvbnRleHQoXCJwaXhlbFJhdGlvXCIpLGlkOnQucHJvcChcImlkXCIpLGRhc2hTaXplOnQucHJvcChcImRhc2hMZW5ndGhcIiksdmlld3BvcnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm5bZS52aWV3cG9ydC54LGUudmlld3BvcnQueSx0LnZpZXdwb3J0V2lkdGgsdC52aWV3cG9ydEhlaWdodF19LGRlcHRoOnQucHJvcChcImRlcHRoXCIpfSxibGVuZDp7ZW5hYmxlOiEwLGNvbG9yOlswLDAsMCwwXSxlcXVhdGlvbjp7cmdiOlwiYWRkXCIsYWxwaGE6XCJhZGRcIn0sZnVuYzp7c3JjUkdCOlwic3JjIGFscGhhXCIsZHN0UkdCOlwib25lIG1pbnVzIHNyYyBhbHBoYVwiLHNyY0FscGhhOlwib25lIG1pbnVzIGRzdCBhbHBoYVwiLGRzdEFscGhhOlwib25lXCJ9fSxkZXB0aDp7ZW5hYmxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIWUub3ZlcmxheX19LHN0ZW5jaWw6e2VuYWJsZTohMX0sc2Npc3Nvcjp7ZW5hYmxlOiEwLGJveDp0LnByb3AoXCJ2aWV3cG9ydFwiKX0sdmlld3BvcnQ6dC5wcm9wKFwidmlld3BvcnRcIil9LGk9dChhKHt2ZXJ0Om8oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzIgYUNvb3JkLCBiQ29vcmQsIGFDb29yZEZyYWN0LCBiQ29vcmRGcmFjdDtcXG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcXG5hdHRyaWJ1dGUgZmxvYXQgbGluZUVuZCwgbGluZVRvcDtcXG5cXG51bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3Q7XFxudW5pZm9ybSBmbG9hdCB0aGlja25lc3MsIHBpeGVsUmF0aW8sIGlkLCBkZXB0aDtcXG51bmlmb3JtIHZlYzQgdmlld3BvcnQ7XFxuXFxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdGFuZ2VudDtcXG5cXG52ZWMyIHByb2plY3QodmVjMiBwb3NpdGlvbiwgdmVjMiBwb3NpdGlvbkZyYWN0LCB2ZWMyIHNjYWxlLCB2ZWMyIHNjYWxlRnJhY3QsIHZlYzIgdHJhbnNsYXRlLCB2ZWMyIHRyYW5zbGF0ZUZyYWN0KSB7XFxuXFx0Ly8gdGhlIG9yZGVyIGlzIGltcG9ydGFudFxcblxcdHJldHVybiBwb3NpdGlvbiAqIHNjYWxlICsgdHJhbnNsYXRlXFxuICAgICAgICsgcG9zaXRpb25GcmFjdCAqIHNjYWxlICsgdHJhbnNsYXRlRnJhY3RcXG4gICAgICAgKyBwb3NpdGlvbiAqIHNjYWxlRnJhY3RcXG4gICAgICAgKyBwb3NpdGlvbkZyYWN0ICogc2NhbGVGcmFjdDtcXG59XFxuXFxudm9pZCBtYWluKCkge1xcblxcdGZsb2F0IGxpbmVTdGFydCA9IDEuIC0gbGluZUVuZDtcXG5cXHRmbG9hdCBsaW5lT2Zmc2V0ID0gbGluZVRvcCAqIDIuIC0gMS47XFxuXFxuXFx0dmVjMiBkaWZmID0gKGJDb29yZCArIGJDb29yZEZyYWN0IC0gYUNvb3JkIC0gYUNvb3JkRnJhY3QpO1xcblxcdHRhbmdlbnQgPSBub3JtYWxpemUoZGlmZiAqIHNjYWxlICogdmlld3BvcnQuencpO1xcblxcdHZlYzIgbm9ybWFsID0gdmVjMigtdGFuZ2VudC55LCB0YW5nZW50LngpO1xcblxcblxcdHZlYzIgcG9zaXRpb24gPSBwcm9qZWN0KGFDb29yZCwgYUNvb3JkRnJhY3QsIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0KSAqIGxpbmVTdGFydFxcblxcdFxcdCsgcHJvamVjdChiQ29vcmQsIGJDb29yZEZyYWN0LCBzY2FsZSwgc2NhbGVGcmFjdCwgdHJhbnNsYXRlLCB0cmFuc2xhdGVGcmFjdCkgKiBsaW5lRW5kXFxuXFxuXFx0XFx0KyB0aGlja25lc3MgKiBub3JtYWwgKiAuNSAqIGxpbmVPZmZzZXQgLyB2aWV3cG9ydC56dztcXG5cXG5cXHRnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24gKiAyLjAgLSAxLjAsIGRlcHRoLCAxKTtcXG5cXG5cXHRmcmFnQ29sb3IgPSBjb2xvciAvIDI1NS47XFxufVxcblwiXSksZnJhZzpvKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnVuaWZvcm0gc2FtcGxlcjJEIGRhc2hQYXR0ZXJuO1xcblxcbnVuaWZvcm0gZmxvYXQgZGFzaFNpemUsIHBpeGVsUmF0aW8sIHRoaWNrbmVzcywgb3BhY2l0eSwgaWQ7XFxuXFxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdGFuZ2VudDtcXG5cXG52b2lkIG1haW4oKSB7XFxuXFx0ZmxvYXQgYWxwaGEgPSAxLjtcXG5cXG5cXHRmbG9hdCB0ID0gZnJhY3QoZG90KHRhbmdlbnQsIGdsX0ZyYWdDb29yZC54eSkgLyBkYXNoU2l6ZSkgKiAuNSArIC4yNTtcXG5cXHRmbG9hdCBkYXNoID0gdGV4dHVyZTJEKGRhc2hQYXR0ZXJuLCB2ZWMyKHQsIC41KSkucjtcXG5cXG5cXHRnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XFxuXFx0Z2xfRnJhZ0NvbG9yLmEgKj0gYWxwaGEgKiBvcGFjaXR5ICogZGFzaDtcXG59XFxuXCJdKSxhdHRyaWJ1dGVzOntsaW5lRW5kOntidWZmZXI6cixkaXZpc29yOjAsc3RyaWRlOjgsb2Zmc2V0OjB9LGxpbmVUb3A6e2J1ZmZlcjpyLGRpdmlzb3I6MCxzdHJpZGU6OCxvZmZzZXQ6NH0sYUNvb3JkOntidWZmZXI6dC5wcm9wKFwicG9zaXRpb25CdWZmZXJcIiksc3RyaWRlOjgsb2Zmc2V0OjgsZGl2aXNvcjoxfSxiQ29vcmQ6e2J1ZmZlcjp0LnByb3AoXCJwb3NpdGlvbkJ1ZmZlclwiKSxzdHJpZGU6OCxvZmZzZXQ6MTYsZGl2aXNvcjoxfSxhQ29vcmRGcmFjdDp7YnVmZmVyOnQucHJvcChcInBvc2l0aW9uRnJhY3RCdWZmZXJcIiksc3RyaWRlOjgsb2Zmc2V0OjgsZGl2aXNvcjoxfSxiQ29vcmRGcmFjdDp7YnVmZmVyOnQucHJvcChcInBvc2l0aW9uRnJhY3RCdWZmZXJcIiksc3RyaWRlOjgsb2Zmc2V0OjE2LGRpdmlzb3I6MX0sY29sb3I6e2J1ZmZlcjp0LnByb3AoXCJjb2xvckJ1ZmZlclwiKSxzdHJpZGU6NCxvZmZzZXQ6MCxkaXZpc29yOjF9fX0sbikpO3RyeXtlPXQoYSh7Y3VsbDp7ZW5hYmxlOiEwLGZhY2U6XCJiYWNrXCJ9LHZlcnQ6byhbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhQ29vcmQsIGJDb29yZCwgbmV4dENvb3JkLCBwcmV2Q29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yLCBiQ29sb3I7XFxuYXR0cmlidXRlIGZsb2F0IGxpbmVFbmQsIGxpbmVUb3A7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlLCB0cmFuc2xhdGU7XFxudW5pZm9ybSBmbG9hdCB0aGlja25lc3MsIHBpeGVsUmF0aW8sIGlkLCBkZXB0aDtcXG51bmlmb3JtIHZlYzQgdmlld3BvcnQ7XFxudW5pZm9ybSBmbG9hdCBtaXRlckxpbWl0LCBtaXRlck1vZGU7XFxuXFxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcXG52YXJ5aW5nIHZlYzQgc3RhcnRDdXRvZmYsIGVuZEN1dG9mZjtcXG52YXJ5aW5nIHZlYzIgdGFuZ2VudDtcXG52YXJ5aW5nIHZlYzIgc3RhcnRDb29yZCwgZW5kQ29vcmQ7XFxudmFyeWluZyBmbG9hdCBlbmFibGVTdGFydE1pdGVyLCBlbmFibGVFbmRNaXRlcjtcXG5cXG5jb25zdCBmbG9hdCBSRVZFUlNFX1RIUkVTSE9MRCA9IC0uODc1O1xcbmNvbnN0IGZsb2F0IE1JTl9ESUZGID0gMWUtNjtcXG5cXG4vLyBUT0RPOiBwb3NzaWJsZSBvcHRpbWl6YXRpb25zOiBhdm9pZCBvdmVyY2FsY3VsYXRpbmcgYWxsIGZvciB2ZXJ0aWNlcyBhbmQgY2FsYyBqdXN0IG9uZSBpbnN0ZWFkXFxuLy8gVE9ETzogcHJlY2FsY3VsYXRlIGRvdCBwcm9kdWN0cywgbm9ybWFsaXplIHRoaW5ncyBiZWZvcmVoZWFkIGV0Yy5cXG4vLyBUT0RPOiByZWZhY3RvciB0byByZWN0YW5ndWxhciBhbGdvcml0aG1cXG5cXG5mbG9hdCBkaXN0VG9MaW5lKHZlYzIgcCwgdmVjMiBhLCB2ZWMyIGIpIHtcXG5cXHR2ZWMyIGRpZmYgPSBiIC0gYTtcXG5cXHR2ZWMyIHBlcnAgPSBub3JtYWxpemUodmVjMigtZGlmZi55LCBkaWZmLngpKTtcXG5cXHRyZXR1cm4gZG90KHAgLSBhLCBwZXJwKTtcXG59XFxuXFxuYm9vbCBpc05hTiggZmxvYXQgdmFsICl7XFxuICByZXR1cm4gKCB2YWwgPCAwLjAgfHwgMC4wIDwgdmFsIHx8IHZhbCA9PSAwLjAgKSA/IGZhbHNlIDogdHJ1ZTtcXG59XFxuXFxudm9pZCBtYWluKCkge1xcblxcdHZlYzIgYUNvb3JkID0gYUNvb3JkLCBiQ29vcmQgPSBiQ29vcmQsIHByZXZDb29yZCA9IHByZXZDb29yZCwgbmV4dENvb3JkID0gbmV4dENvb3JkO1xcblxcbiAgdmVjMiBhZGp1c3RlZFNjYWxlO1xcbiAgYWRqdXN0ZWRTY2FsZS54ID0gKGFicyhzY2FsZS54KSA8IE1JTl9ESUZGKSA/IE1JTl9ESUZGIDogc2NhbGUueDtcXG4gIGFkanVzdGVkU2NhbGUueSA9IChhYnMoc2NhbGUueSkgPCBNSU5fRElGRikgPyBNSU5fRElGRiA6IHNjYWxlLnk7XFxuXFxuICB2ZWMyIHNjYWxlUmF0aW8gPSBhZGp1c3RlZFNjYWxlICogdmlld3BvcnQuenc7XFxuXFx0dmVjMiBub3JtYWxXaWR0aCA9IHRoaWNrbmVzcyAvIHNjYWxlUmF0aW87XFxuXFxuXFx0ZmxvYXQgbGluZVN0YXJ0ID0gMS4gLSBsaW5lRW5kO1xcblxcdGZsb2F0IGxpbmVCb3QgPSAxLiAtIGxpbmVUb3A7XFxuXFxuXFx0ZnJhZ0NvbG9yID0gKGxpbmVTdGFydCAqIGFDb2xvciArIGxpbmVFbmQgKiBiQ29sb3IpIC8gMjU1LjtcXG5cXG5cXHRpZiAoaXNOYU4oYUNvb3JkLngpIHx8IGlzTmFOKGFDb29yZC55KSB8fCBpc05hTihiQ29vcmQueCkgfHwgaXNOYU4oYkNvb3JkLnkpKSByZXR1cm47XFxuXFxuXFx0aWYgKGFDb29yZCA9PSBwcmV2Q29vcmQpIHByZXZDb29yZCA9IGFDb29yZCArIG5vcm1hbGl6ZShiQ29vcmQgLSBhQ29vcmQpO1xcblxcdGlmIChiQ29vcmQgPT0gbmV4dENvb3JkKSBuZXh0Q29vcmQgPSBiQ29vcmQgLSBub3JtYWxpemUoYkNvb3JkIC0gYUNvb3JkKTtcXG5cXG5cXHR2ZWMyIHByZXZEaWZmID0gYUNvb3JkIC0gcHJldkNvb3JkO1xcblxcdHZlYzIgY3VyckRpZmYgPSBiQ29vcmQgLSBhQ29vcmQ7XFxuXFx0dmVjMiBuZXh0RGlmZiA9IG5leHRDb29yZCAtIGJDb29yZDtcXG5cXG5cXHR2ZWMyIHByZXZUYW5nZW50ID0gbm9ybWFsaXplKHByZXZEaWZmICogc2NhbGVSYXRpbyk7XFxuXFx0dmVjMiBjdXJyVGFuZ2VudCA9IG5vcm1hbGl6ZShjdXJyRGlmZiAqIHNjYWxlUmF0aW8pO1xcblxcdHZlYzIgbmV4dFRhbmdlbnQgPSBub3JtYWxpemUobmV4dERpZmYgKiBzY2FsZVJhdGlvKTtcXG5cXG5cXHR2ZWMyIHByZXZOb3JtYWwgPSB2ZWMyKC1wcmV2VGFuZ2VudC55LCBwcmV2VGFuZ2VudC54KTtcXG5cXHR2ZWMyIGN1cnJOb3JtYWwgPSB2ZWMyKC1jdXJyVGFuZ2VudC55LCBjdXJyVGFuZ2VudC54KTtcXG5cXHR2ZWMyIG5leHROb3JtYWwgPSB2ZWMyKC1uZXh0VGFuZ2VudC55LCBuZXh0VGFuZ2VudC54KTtcXG5cXG5cXHR2ZWMyIHN0YXJ0Sm9pbkRpcmVjdGlvbiA9IG5vcm1hbGl6ZShwcmV2VGFuZ2VudCAtIGN1cnJUYW5nZW50KTtcXG5cXHR2ZWMyIGVuZEpvaW5EaXJlY3Rpb24gPSBub3JtYWxpemUoY3VyclRhbmdlbnQgLSBuZXh0VGFuZ2VudCk7XFxuXFxuXFx0Ly8gY29sbGFwc2VkL3VuaWRpcmVjdGlvbmFsIHNlZ21lbnQgY2FzZXNcXG5cXHQvLyBGSVhNRTogdGhlcmUgc2hvdWxkIGJlIG1vcmUgZWxlZ2FudCBzb2x1dGlvblxcblxcdHZlYzIgcHJldlRhbkRpZmYgPSBhYnMocHJldlRhbmdlbnQgLSBjdXJyVGFuZ2VudCk7XFxuXFx0dmVjMiBuZXh0VGFuRGlmZiA9IGFicyhuZXh0VGFuZ2VudCAtIGN1cnJUYW5nZW50KTtcXG5cXHRpZiAobWF4KHByZXZUYW5EaWZmLngsIHByZXZUYW5EaWZmLnkpIDwgTUlOX0RJRkYpIHtcXG5cXHRcXHRzdGFydEpvaW5EaXJlY3Rpb24gPSBjdXJyTm9ybWFsO1xcblxcdH1cXG5cXHRpZiAobWF4KG5leHRUYW5EaWZmLngsIG5leHRUYW5EaWZmLnkpIDwgTUlOX0RJRkYpIHtcXG5cXHRcXHRlbmRKb2luRGlyZWN0aW9uID0gY3Vyck5vcm1hbDtcXG5cXHR9XFxuXFx0aWYgKGFDb29yZCA9PSBiQ29vcmQpIHtcXG5cXHRcXHRlbmRKb2luRGlyZWN0aW9uID0gc3RhcnRKb2luRGlyZWN0aW9uO1xcblxcdFxcdGN1cnJOb3JtYWwgPSBwcmV2Tm9ybWFsO1xcblxcdFxcdGN1cnJUYW5nZW50ID0gcHJldlRhbmdlbnQ7XFxuXFx0fVxcblxcblxcdHRhbmdlbnQgPSBjdXJyVGFuZ2VudDtcXG5cXG5cXHQvL2NhbGN1bGF0ZSBqb2luIHNoaWZ0cyByZWxhdGl2ZSB0byBub3JtYWxzXFxuXFx0ZmxvYXQgc3RhcnRKb2luU2hpZnQgPSBkb3QoY3Vyck5vcm1hbCwgc3RhcnRKb2luRGlyZWN0aW9uKTtcXG5cXHRmbG9hdCBlbmRKb2luU2hpZnQgPSBkb3QoY3Vyck5vcm1hbCwgZW5kSm9pbkRpcmVjdGlvbik7XFxuXFxuXFx0ZmxvYXQgc3RhcnRNaXRlclJhdGlvID0gYWJzKDEuIC8gc3RhcnRKb2luU2hpZnQpO1xcblxcdGZsb2F0IGVuZE1pdGVyUmF0aW8gPSBhYnMoMS4gLyBlbmRKb2luU2hpZnQpO1xcblxcblxcdHZlYzIgc3RhcnRKb2luID0gc3RhcnRKb2luRGlyZWN0aW9uICogc3RhcnRNaXRlclJhdGlvO1xcblxcdHZlYzIgZW5kSm9pbiA9IGVuZEpvaW5EaXJlY3Rpb24gKiBlbmRNaXRlclJhdGlvO1xcblxcblxcdHZlYzIgc3RhcnRUb3BKb2luLCBzdGFydEJvdEpvaW4sIGVuZFRvcEpvaW4sIGVuZEJvdEpvaW47XFxuXFx0c3RhcnRUb3BKb2luID0gc2lnbihzdGFydEpvaW5TaGlmdCkgKiBzdGFydEpvaW4gKiAuNTtcXG5cXHRzdGFydEJvdEpvaW4gPSAtc3RhcnRUb3BKb2luO1xcblxcblxcdGVuZFRvcEpvaW4gPSBzaWduKGVuZEpvaW5TaGlmdCkgKiBlbmRKb2luICogLjU7XFxuXFx0ZW5kQm90Sm9pbiA9IC1lbmRUb3BKb2luO1xcblxcblxcdHZlYzIgYVRvcENvb3JkID0gYUNvb3JkICsgbm9ybWFsV2lkdGggKiBzdGFydFRvcEpvaW47XFxuXFx0dmVjMiBiVG9wQ29vcmQgPSBiQ29vcmQgKyBub3JtYWxXaWR0aCAqIGVuZFRvcEpvaW47XFxuXFx0dmVjMiBhQm90Q29vcmQgPSBhQ29vcmQgKyBub3JtYWxXaWR0aCAqIHN0YXJ0Qm90Sm9pbjtcXG5cXHR2ZWMyIGJCb3RDb29yZCA9IGJDb29yZCArIG5vcm1hbFdpZHRoICogZW5kQm90Sm9pbjtcXG5cXG5cXHQvL21pdGVyIGFudGktY2xpcHBpbmdcXG5cXHRmbG9hdCBiYUNsaXBwaW5nID0gZGlzdFRvTGluZShiQ29vcmQsIGFDb29yZCwgYUJvdENvb3JkKSAvIGRvdChub3JtYWxpemUobm9ybWFsV2lkdGggKiBlbmRCb3RKb2luKSwgbm9ybWFsaXplKG5vcm1hbFdpZHRoLnl4ICogdmVjMigtc3RhcnRCb3RKb2luLnksIHN0YXJ0Qm90Sm9pbi54KSkpO1xcblxcdGZsb2F0IGFiQ2xpcHBpbmcgPSBkaXN0VG9MaW5lKGFDb29yZCwgYkNvb3JkLCBiVG9wQ29vcmQpIC8gZG90KG5vcm1hbGl6ZShub3JtYWxXaWR0aCAqIHN0YXJ0Qm90Sm9pbiksIG5vcm1hbGl6ZShub3JtYWxXaWR0aC55eCAqIHZlYzIoLWVuZEJvdEpvaW4ueSwgZW5kQm90Sm9pbi54KSkpO1xcblxcblxcdC8vcHJldmVudCBjbG9zZSB0byByZXZlcnNlIGRpcmVjdGlvbiBzd2l0Y2hcXG5cXHRib29sIHByZXZSZXZlcnNlID0gZG90KGN1cnJUYW5nZW50LCBwcmV2VGFuZ2VudCkgPD0gUkVWRVJTRV9USFJFU0hPTEQgJiYgYWJzKGRvdChjdXJyVGFuZ2VudCwgcHJldk5vcm1hbCkpICogbWluKGxlbmd0aChwcmV2RGlmZiksIGxlbmd0aChjdXJyRGlmZikpIDwgIGxlbmd0aChub3JtYWxXaWR0aCAqIGN1cnJOb3JtYWwpO1xcblxcdGJvb2wgbmV4dFJldmVyc2UgPSBkb3QoY3VyclRhbmdlbnQsIG5leHRUYW5nZW50KSA8PSBSRVZFUlNFX1RIUkVTSE9MRCAmJiBhYnMoZG90KGN1cnJUYW5nZW50LCBuZXh0Tm9ybWFsKSkgKiBtaW4obGVuZ3RoKG5leHREaWZmKSwgbGVuZ3RoKGN1cnJEaWZmKSkgPCAgbGVuZ3RoKG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCk7XFxuXFxuXFx0aWYgKHByZXZSZXZlcnNlKSB7XFxuXFx0XFx0Ly9tYWtlIGpvaW4gcmVjdGFuZ3VsYXJcXG5cXHRcXHR2ZWMyIG1pdGVyU2hpZnQgPSBub3JtYWxXaWR0aCAqIHN0YXJ0Sm9pbkRpcmVjdGlvbiAqIG1pdGVyTGltaXQgKiAuNTtcXG5cXHRcXHRmbG9hdCBub3JtYWxBZGp1c3QgPSAxLiAtIG1pbihtaXRlckxpbWl0IC8gc3RhcnRNaXRlclJhdGlvLCAxLik7XFxuXFx0XFx0YUJvdENvb3JkID0gYUNvb3JkICsgbWl0ZXJTaGlmdCAtIG5vcm1hbEFkanVzdCAqIG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCAqIC41O1xcblxcdFxcdGFUb3BDb29yZCA9IGFDb29yZCArIG1pdGVyU2hpZnQgKyBub3JtYWxBZGp1c3QgKiBub3JtYWxXaWR0aCAqIGN1cnJOb3JtYWwgKiAuNTtcXG5cXHR9XFxuXFx0ZWxzZSBpZiAoIW5leHRSZXZlcnNlICYmIGJhQ2xpcHBpbmcgPiAwLiAmJiBiYUNsaXBwaW5nIDwgbGVuZ3RoKG5vcm1hbFdpZHRoICogZW5kQm90Sm9pbikpIHtcXG5cXHRcXHQvL2hhbmRsZSBtaXRlciBjbGlwcGluZ1xcblxcdFxcdGJUb3BDb29yZCAtPSBub3JtYWxXaWR0aCAqIGVuZFRvcEpvaW47XFxuXFx0XFx0YlRvcENvb3JkICs9IG5vcm1hbGl6ZShlbmRUb3BKb2luICogbm9ybWFsV2lkdGgpICogYmFDbGlwcGluZztcXG5cXHR9XFxuXFxuXFx0aWYgKG5leHRSZXZlcnNlKSB7XFxuXFx0XFx0Ly9tYWtlIGpvaW4gcmVjdGFuZ3VsYXJcXG5cXHRcXHR2ZWMyIG1pdGVyU2hpZnQgPSBub3JtYWxXaWR0aCAqIGVuZEpvaW5EaXJlY3Rpb24gKiBtaXRlckxpbWl0ICogLjU7XFxuXFx0XFx0ZmxvYXQgbm9ybWFsQWRqdXN0ID0gMS4gLSBtaW4obWl0ZXJMaW1pdCAvIGVuZE1pdGVyUmF0aW8sIDEuKTtcXG5cXHRcXHRiQm90Q29vcmQgPSBiQ29vcmQgKyBtaXRlclNoaWZ0IC0gbm9ybWFsQWRqdXN0ICogbm9ybWFsV2lkdGggKiBjdXJyTm9ybWFsICogLjU7XFxuXFx0XFx0YlRvcENvb3JkID0gYkNvb3JkICsgbWl0ZXJTaGlmdCArIG5vcm1hbEFkanVzdCAqIG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCAqIC41O1xcblxcdH1cXG5cXHRlbHNlIGlmICghcHJldlJldmVyc2UgJiYgYWJDbGlwcGluZyA+IDAuICYmIGFiQ2xpcHBpbmcgPCBsZW5ndGgobm9ybWFsV2lkdGggKiBzdGFydEJvdEpvaW4pKSB7XFxuXFx0XFx0Ly9oYW5kbGUgbWl0ZXIgY2xpcHBpbmdcXG5cXHRcXHRhQm90Q29vcmQgLT0gbm9ybWFsV2lkdGggKiBzdGFydEJvdEpvaW47XFxuXFx0XFx0YUJvdENvb3JkICs9IG5vcm1hbGl6ZShzdGFydEJvdEpvaW4gKiBub3JtYWxXaWR0aCkgKiBhYkNsaXBwaW5nO1xcblxcdH1cXG5cXG5cXHR2ZWMyIGFUb3BQb3NpdGlvbiA9IChhVG9wQ29vcmQpICogYWRqdXN0ZWRTY2FsZSArIHRyYW5zbGF0ZTtcXG5cXHR2ZWMyIGFCb3RQb3NpdGlvbiA9IChhQm90Q29vcmQpICogYWRqdXN0ZWRTY2FsZSArIHRyYW5zbGF0ZTtcXG5cXG5cXHR2ZWMyIGJUb3BQb3NpdGlvbiA9IChiVG9wQ29vcmQpICogYWRqdXN0ZWRTY2FsZSArIHRyYW5zbGF0ZTtcXG5cXHR2ZWMyIGJCb3RQb3NpdGlvbiA9IChiQm90Q29vcmQpICogYWRqdXN0ZWRTY2FsZSArIHRyYW5zbGF0ZTtcXG5cXG5cXHQvL3Bvc2l0aW9uIGlzIG5vcm1hbGl6ZWQgMC4uMSBjb29yZCBvbiB0aGUgc2NyZWVuXFxuXFx0dmVjMiBwb3NpdGlvbiA9IChhVG9wUG9zaXRpb24gKiBsaW5lVG9wICsgYUJvdFBvc2l0aW9uICogbGluZUJvdCkgKiBsaW5lU3RhcnQgKyAoYlRvcFBvc2l0aW9uICogbGluZVRvcCArIGJCb3RQb3NpdGlvbiAqIGxpbmVCb3QpICogbGluZUVuZDtcXG5cXG5cXHRzdGFydENvb3JkID0gYUNvb3JkICogc2NhbGVSYXRpbyArIHRyYW5zbGF0ZSAqIHZpZXdwb3J0Lnp3ICsgdmlld3BvcnQueHk7XFxuXFx0ZW5kQ29vcmQgPSBiQ29vcmQgKiBzY2FsZVJhdGlvICsgdHJhbnNsYXRlICogdmlld3BvcnQuencgKyB2aWV3cG9ydC54eTtcXG5cXG5cXHRnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24gICogMi4wIC0gMS4wLCBkZXB0aCwgMSk7XFxuXFxuXFx0ZW5hYmxlU3RhcnRNaXRlciA9IHN0ZXAoZG90KGN1cnJUYW5nZW50LCBwcmV2VGFuZ2VudCksIC41KTtcXG5cXHRlbmFibGVFbmRNaXRlciA9IHN0ZXAoZG90KGN1cnJUYW5nZW50LCBuZXh0VGFuZ2VudCksIC41KTtcXG5cXG5cXHQvL2JldmVsIG1pdGVyIGN1dG9mZnNcXG5cXHRpZiAobWl0ZXJNb2RlID09IDEuKSB7XFxuXFx0XFx0aWYgKGVuYWJsZVN0YXJ0TWl0ZXIgPT0gMS4pIHtcXG5cXHRcXHRcXHR2ZWMyIHN0YXJ0TWl0ZXJXaWR0aCA9IHZlYzIoc3RhcnRKb2luRGlyZWN0aW9uKSAqIHRoaWNrbmVzcyAqIG1pdGVyTGltaXQgKiAuNTtcXG5cXHRcXHRcXHRzdGFydEN1dG9mZiA9IHZlYzQoYUNvb3JkLCBhQ29vcmQpO1xcblxcdFxcdFxcdHN0YXJ0Q3V0b2ZmLnp3ICs9IHZlYzIoLXN0YXJ0Sm9pbkRpcmVjdGlvbi55LCBzdGFydEpvaW5EaXJlY3Rpb24ueCkgLyBzY2FsZVJhdGlvO1xcblxcdFxcdFxcdHN0YXJ0Q3V0b2ZmID0gc3RhcnRDdXRvZmYgKiBzY2FsZVJhdGlvLnh5eHkgKyB0cmFuc2xhdGUueHl4eSAqIHZpZXdwb3J0Lnp3enc7XFxuXFx0XFx0XFx0c3RhcnRDdXRvZmYgKz0gdmlld3BvcnQueHl4eTtcXG5cXHRcXHRcXHRzdGFydEN1dG9mZiArPSBzdGFydE1pdGVyV2lkdGgueHl4eTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0aWYgKGVuYWJsZUVuZE1pdGVyID09IDEuKSB7XFxuXFx0XFx0XFx0dmVjMiBlbmRNaXRlcldpZHRoID0gdmVjMihlbmRKb2luRGlyZWN0aW9uKSAqIHRoaWNrbmVzcyAqIG1pdGVyTGltaXQgKiAuNTtcXG5cXHRcXHRcXHRlbmRDdXRvZmYgPSB2ZWM0KGJDb29yZCwgYkNvb3JkKTtcXG5cXHRcXHRcXHRlbmRDdXRvZmYuencgKz0gdmVjMigtZW5kSm9pbkRpcmVjdGlvbi55LCBlbmRKb2luRGlyZWN0aW9uLngpICAvIHNjYWxlUmF0aW87XFxuXFx0XFx0XFx0ZW5kQ3V0b2ZmID0gZW5kQ3V0b2ZmICogc2NhbGVSYXRpby54eXh5ICsgdHJhbnNsYXRlLnh5eHkgKiB2aWV3cG9ydC56d3p3O1xcblxcdFxcdFxcdGVuZEN1dG9mZiArPSB2aWV3cG9ydC54eXh5O1xcblxcdFxcdFxcdGVuZEN1dG9mZiArPSBlbmRNaXRlcldpZHRoLnh5eHk7XFxuXFx0XFx0fVxcblxcdH1cXG5cXG5cXHQvL3JvdW5kIG1pdGVyIGN1dG9mZnNcXG5cXHRlbHNlIGlmIChtaXRlck1vZGUgPT0gMi4pIHtcXG5cXHRcXHRpZiAoZW5hYmxlU3RhcnRNaXRlciA9PSAxLikge1xcblxcdFxcdFxcdHZlYzIgc3RhcnRNaXRlcldpZHRoID0gdmVjMihzdGFydEpvaW5EaXJlY3Rpb24pICogdGhpY2tuZXNzICogYWJzKGRvdChzdGFydEpvaW5EaXJlY3Rpb24sIGN1cnJOb3JtYWwpKSAqIC41O1xcblxcdFxcdFxcdHN0YXJ0Q3V0b2ZmID0gdmVjNChhQ29vcmQsIGFDb29yZCk7XFxuXFx0XFx0XFx0c3RhcnRDdXRvZmYuencgKz0gdmVjMigtc3RhcnRKb2luRGlyZWN0aW9uLnksIHN0YXJ0Sm9pbkRpcmVjdGlvbi54KSAvIHNjYWxlUmF0aW87XFxuXFx0XFx0XFx0c3RhcnRDdXRvZmYgPSBzdGFydEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcXG5cXHRcXHRcXHRzdGFydEN1dG9mZiArPSB2aWV3cG9ydC54eXh5O1xcblxcdFxcdFxcdHN0YXJ0Q3V0b2ZmICs9IHN0YXJ0TWl0ZXJXaWR0aC54eXh5O1xcblxcdFxcdH1cXG5cXG5cXHRcXHRpZiAoZW5hYmxlRW5kTWl0ZXIgPT0gMS4pIHtcXG5cXHRcXHRcXHR2ZWMyIGVuZE1pdGVyV2lkdGggPSB2ZWMyKGVuZEpvaW5EaXJlY3Rpb24pICogdGhpY2tuZXNzICogYWJzKGRvdChlbmRKb2luRGlyZWN0aW9uLCBjdXJyTm9ybWFsKSkgKiAuNTtcXG5cXHRcXHRcXHRlbmRDdXRvZmYgPSB2ZWM0KGJDb29yZCwgYkNvb3JkKTtcXG5cXHRcXHRcXHRlbmRDdXRvZmYuencgKz0gdmVjMigtZW5kSm9pbkRpcmVjdGlvbi55LCBlbmRKb2luRGlyZWN0aW9uLngpICAvIHNjYWxlUmF0aW87XFxuXFx0XFx0XFx0ZW5kQ3V0b2ZmID0gZW5kQ3V0b2ZmICogc2NhbGVSYXRpby54eXh5ICsgdHJhbnNsYXRlLnh5eHkgKiB2aWV3cG9ydC56d3p3O1xcblxcdFxcdFxcdGVuZEN1dG9mZiArPSB2aWV3cG9ydC54eXh5O1xcblxcdFxcdFxcdGVuZEN1dG9mZiArPSBlbmRNaXRlcldpZHRoLnh5eHk7XFxuXFx0XFx0fVxcblxcdH1cXG59XFxuXCJdKSxmcmFnOm8oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgZGFzaFBhdHRlcm47XFxudW5pZm9ybSBmbG9hdCBkYXNoU2l6ZSwgcGl4ZWxSYXRpbywgdGhpY2tuZXNzLCBvcGFjaXR5LCBpZCwgbWl0ZXJNb2RlO1xcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxudmFyeWluZyB2ZWMyIHRhbmdlbnQ7XFxudmFyeWluZyB2ZWM0IHN0YXJ0Q3V0b2ZmLCBlbmRDdXRvZmY7XFxudmFyeWluZyB2ZWMyIHN0YXJ0Q29vcmQsIGVuZENvb3JkO1xcbnZhcnlpbmcgZmxvYXQgZW5hYmxlU3RhcnRNaXRlciwgZW5hYmxlRW5kTWl0ZXI7XFxuXFxuZmxvYXQgZGlzdFRvTGluZSh2ZWMyIHAsIHZlYzIgYSwgdmVjMiBiKSB7XFxuXFx0dmVjMiBkaWZmID0gYiAtIGE7XFxuXFx0dmVjMiBwZXJwID0gbm9ybWFsaXplKHZlYzIoLWRpZmYueSwgZGlmZi54KSk7XFxuXFx0cmV0dXJuIGRvdChwIC0gYSwgcGVycCk7XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG5cXHRmbG9hdCBhbHBoYSA9IDEuLCBkaXN0VG9TdGFydCwgZGlzdFRvRW5kO1xcblxcdGZsb2F0IGN1dG9mZiA9IHRoaWNrbmVzcyAqIC41O1xcblxcblxcdC8vYmV2ZWwgbWl0ZXJcXG5cXHRpZiAobWl0ZXJNb2RlID09IDEuKSB7XFxuXFx0XFx0aWYgKGVuYWJsZVN0YXJ0TWl0ZXIgPT0gMS4pIHtcXG5cXHRcXHRcXHRkaXN0VG9TdGFydCA9IGRpc3RUb0xpbmUoZ2xfRnJhZ0Nvb3JkLnh5LCBzdGFydEN1dG9mZi54eSwgc3RhcnRDdXRvZmYuencpO1xcblxcdFxcdFxcdGlmIChkaXN0VG9TdGFydCA8IC0xLikge1xcblxcdFxcdFxcdFxcdGRpc2NhcmQ7XFxuXFx0XFx0XFx0XFx0cmV0dXJuO1xcblxcdFxcdFxcdH1cXG5cXHRcXHRcXHRhbHBoYSAqPSBtaW4obWF4KGRpc3RUb1N0YXJ0ICsgMS4sIDAuKSwgMS4pO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRpZiAoZW5hYmxlRW5kTWl0ZXIgPT0gMS4pIHtcXG5cXHRcXHRcXHRkaXN0VG9FbmQgPSBkaXN0VG9MaW5lKGdsX0ZyYWdDb29yZC54eSwgZW5kQ3V0b2ZmLnh5LCBlbmRDdXRvZmYuencpO1xcblxcdFxcdFxcdGlmIChkaXN0VG9FbmQgPCAtMS4pIHtcXG5cXHRcXHRcXHRcXHRkaXNjYXJkO1xcblxcdFxcdFxcdFxcdHJldHVybjtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0XFx0YWxwaGEgKj0gbWluKG1heChkaXN0VG9FbmQgKyAxLiwgMC4pLCAxLik7XFxuXFx0XFx0fVxcblxcdH1cXG5cXG5cXHQvLyByb3VuZCBtaXRlclxcblxcdGVsc2UgaWYgKG1pdGVyTW9kZSA9PSAyLikge1xcblxcdFxcdGlmIChlbmFibGVTdGFydE1pdGVyID09IDEuKSB7XFxuXFx0XFx0XFx0ZGlzdFRvU3RhcnQgPSBkaXN0VG9MaW5lKGdsX0ZyYWdDb29yZC54eSwgc3RhcnRDdXRvZmYueHksIHN0YXJ0Q3V0b2ZmLnp3KTtcXG5cXHRcXHRcXHRpZiAoZGlzdFRvU3RhcnQgPCAwLikge1xcblxcdFxcdFxcdFxcdGZsb2F0IHJhZGl1cyA9IGxlbmd0aChnbF9GcmFnQ29vcmQueHkgLSBzdGFydENvb3JkKTtcXG5cXG5cXHRcXHRcXHRcXHRpZihyYWRpdXMgPiBjdXRvZmYgKyAuNSkge1xcblxcdFxcdFxcdFxcdFxcdGRpc2NhcmQ7XFxuXFx0XFx0XFx0XFx0XFx0cmV0dXJuO1xcblxcdFxcdFxcdFxcdH1cXG5cXG5cXHRcXHRcXHRcXHRhbHBoYSAtPSBzbW9vdGhzdGVwKGN1dG9mZiAtIC41LCBjdXRvZmYgKyAuNSwgcmFkaXVzKTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fVxcblxcblxcdFxcdGlmIChlbmFibGVFbmRNaXRlciA9PSAxLikge1xcblxcdFxcdFxcdGRpc3RUb0VuZCA9IGRpc3RUb0xpbmUoZ2xfRnJhZ0Nvb3JkLnh5LCBlbmRDdXRvZmYueHksIGVuZEN1dG9mZi56dyk7XFxuXFx0XFx0XFx0aWYgKGRpc3RUb0VuZCA8IDAuKSB7XFxuXFx0XFx0XFx0XFx0ZmxvYXQgcmFkaXVzID0gbGVuZ3RoKGdsX0ZyYWdDb29yZC54eSAtIGVuZENvb3JkKTtcXG5cXG5cXHRcXHRcXHRcXHRpZihyYWRpdXMgPiBjdXRvZmYgKyAuNSkge1xcblxcdFxcdFxcdFxcdFxcdGRpc2NhcmQ7XFxuXFx0XFx0XFx0XFx0XFx0cmV0dXJuO1xcblxcdFxcdFxcdFxcdH1cXG5cXG5cXHRcXHRcXHRcXHRhbHBoYSAtPSBzbW9vdGhzdGVwKGN1dG9mZiAtIC41LCBjdXRvZmYgKyAuNSwgcmFkaXVzKTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fVxcblxcdH1cXG5cXG5cXHRmbG9hdCB0ID0gZnJhY3QoZG90KHRhbmdlbnQsIGdsX0ZyYWdDb29yZC54eSkgLyBkYXNoU2l6ZSkgKiAuNSArIC4yNTtcXG5cXHRmbG9hdCBkYXNoID0gdGV4dHVyZTJEKGRhc2hQYXR0ZXJuLCB2ZWMyKHQsIC41KSkucjtcXG5cXG5cXHRnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XFxuXFx0Z2xfRnJhZ0NvbG9yLmEgKj0gYWxwaGEgKiBvcGFjaXR5ICogZGFzaDtcXG59XFxuXCJdKSxhdHRyaWJ1dGVzOntsaW5lRW5kOntidWZmZXI6cixkaXZpc29yOjAsc3RyaWRlOjgsb2Zmc2V0OjB9LGxpbmVUb3A6e2J1ZmZlcjpyLGRpdmlzb3I6MCxzdHJpZGU6OCxvZmZzZXQ6NH0sYUNvbG9yOntidWZmZXI6dC5wcm9wKFwiY29sb3JCdWZmZXJcIiksc3RyaWRlOjQsb2Zmc2V0OjAsZGl2aXNvcjoxfSxiQ29sb3I6e2J1ZmZlcjp0LnByb3AoXCJjb2xvckJ1ZmZlclwiKSxzdHJpZGU6NCxvZmZzZXQ6NCxkaXZpc29yOjF9LHByZXZDb29yZDp7YnVmZmVyOnQucHJvcChcInBvc2l0aW9uQnVmZmVyXCIpLHN0cmlkZTo4LG9mZnNldDowLGRpdmlzb3I6MX0sYUNvb3JkOntidWZmZXI6dC5wcm9wKFwicG9zaXRpb25CdWZmZXJcIiksc3RyaWRlOjgsb2Zmc2V0OjgsZGl2aXNvcjoxfSxiQ29vcmQ6e2J1ZmZlcjp0LnByb3AoXCJwb3NpdGlvbkJ1ZmZlclwiKSxzdHJpZGU6OCxvZmZzZXQ6MTYsZGl2aXNvcjoxfSxuZXh0Q29vcmQ6e2J1ZmZlcjp0LnByb3AoXCJwb3NpdGlvbkJ1ZmZlclwiKSxzdHJpZGU6OCxvZmZzZXQ6MjQsZGl2aXNvcjoxfX19LG4pKX1jYXRjaCh0KXtlPWl9cmV0dXJue2ZpbGw6dCh7cHJpbWl0aXZlOlwidHJpYW5nbGVcIixlbGVtZW50czpmdW5jdGlvbih0LGUpe3JldHVybiBlLnRyaWFuZ2xlc30sb2Zmc2V0OjAsdmVydDpvKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uLCBwb3NpdGlvbkZyYWN0O1xcblxcbnVuaWZvcm0gdmVjNCBjb2xvcjtcXG51bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3Q7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFJhdGlvLCBpZDtcXG51bmlmb3JtIHZlYzQgdmlld3BvcnQ7XFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxuXFxuY29uc3QgZmxvYXQgTUFYX0xJTkVTID0gMjU2LjtcXG5cXG52b2lkIG1haW4oKSB7XFxuXFx0ZmxvYXQgZGVwdGggPSAoTUFYX0xJTkVTIC0gNC4gLSBpZCkgLyAoTUFYX0xJTkVTKTtcXG5cXG5cXHR2ZWMyIHBvc2l0aW9uID0gcG9zaXRpb24gKiBzY2FsZSArIHRyYW5zbGF0ZVxcbiAgICAgICArIHBvc2l0aW9uRnJhY3QgKiBzY2FsZSArIHRyYW5zbGF0ZUZyYWN0XFxuICAgICAgICsgcG9zaXRpb24gKiBzY2FsZUZyYWN0XFxuICAgICAgICsgcG9zaXRpb25GcmFjdCAqIHNjYWxlRnJhY3Q7XFxuXFxuXFx0Z2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uICogMi4wIC0gMS4wLCBkZXB0aCwgMSk7XFxuXFxuXFx0ZnJhZ0NvbG9yID0gY29sb3IgLyAyNTUuO1xcblxcdGZyYWdDb2xvci5hICo9IG9wYWNpdHk7XFxufVxcblwiXSksZnJhZzpvKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxuXFxudm9pZCBtYWluKCkge1xcblxcdGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjtcXG59XFxuXCJdKSx1bmlmb3Jtczp7c2NhbGU6dC5wcm9wKFwic2NhbGVcIiksY29sb3I6dC5wcm9wKFwiZmlsbFwiKSxzY2FsZUZyYWN0OnQucHJvcChcInNjYWxlRnJhY3RcIiksdHJhbnNsYXRlRnJhY3Q6dC5wcm9wKFwidHJhbnNsYXRlRnJhY3RcIiksdHJhbnNsYXRlOnQucHJvcChcInRyYW5zbGF0ZVwiKSxvcGFjaXR5OnQucHJvcChcIm9wYWNpdHlcIikscGl4ZWxSYXRpbzp0LmNvbnRleHQoXCJwaXhlbFJhdGlvXCIpLGlkOnQucHJvcChcImlkXCIpLHZpZXdwb3J0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuW2Uudmlld3BvcnQueCxlLnZpZXdwb3J0LnksdC52aWV3cG9ydFdpZHRoLHQudmlld3BvcnRIZWlnaHRdfX0sYXR0cmlidXRlczp7cG9zaXRpb246e2J1ZmZlcjp0LnByb3AoXCJwb3NpdGlvbkJ1ZmZlclwiKSxzdHJpZGU6OCxvZmZzZXQ6OH0scG9zaXRpb25GcmFjdDp7YnVmZmVyOnQucHJvcChcInBvc2l0aW9uRnJhY3RCdWZmZXJcIiksc3RyaWRlOjgsb2Zmc2V0Ojh9fSxibGVuZDpuLmJsZW5kLGRlcHRoOntlbmFibGU6ITF9LHNjaXNzb3I6bi5zY2lzc29yLHN0ZW5jaWw6bi5zdGVuY2lsLHZpZXdwb3J0Om4udmlld3BvcnR9KSxyZWN0OmksbWl0ZXI6ZX19LHYuZGVmYXVsdHM9e2Rhc2hlczpudWxsLGpvaW46XCJtaXRlclwiLG1pdGVyTGltaXQ6MSx0aGlja25lc3M6MTAsY2FwOlwic3F1YXJlXCIsY29sb3I6XCJibGFja1wiLG9wYWNpdHk6MSxvdmVybGF5OiExLHZpZXdwb3J0Om51bGwscmFuZ2U6bnVsbCxjbG9zZTohMSxmaWxsOm51bGx9LHYucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPVtdLHI9YXJndW1lbnRzLmxlbmd0aDtyLS07KWVbcl09YXJndW1lbnRzW3JdO2UubGVuZ3RoJiYodD10aGlzKS51cGRhdGUuYXBwbHkodCxlKSx0aGlzLmRyYXcoKX0sdi5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W10scj1hcmd1bWVudHMubGVuZ3RoO3ItLTspZVtyXT1hcmd1bWVudHNbcl07cmV0dXJuKGUubGVuZ3RoP2U6dGhpcy5wYXNzZXMpLmZvckVhY2goZnVuY3Rpb24oZSxyKXt2YXIgbjtpZihlJiZBcnJheS5pc0FycmF5KGUpKXJldHVybihuPXQpLmRyYXcuYXBwbHkobixlKTtcIm51bWJlclwiPT10eXBlb2YgZSYmKGU9dC5wYXNzZXNbZV0pLGUmJmUuY291bnQ+MSYmZS5vcGFjaXR5JiYodC5yZWdsLl9yZWZyZXNoKCksZS5maWxsJiZlLnRyaWFuZ2xlcyYmZS50cmlhbmdsZXMubGVuZ3RoPjImJnQuc2hhZGVycy5maWxsKGUpLGUudGhpY2tuZXNzJiYoZS5zY2FsZVswXSplLnZpZXdwb3J0LndpZHRoPnYucHJlY2lzaW9uVGhyZXNob2xkfHxlLnNjYWxlWzFdKmUudmlld3BvcnQuaGVpZ2h0PnYucHJlY2lzaW9uVGhyZXNob2xkP3Quc2hhZGVycy5yZWN0KGUpOlwicmVjdFwiPT09ZS5qb2lufHwhZS5qb2luJiYoZS50aGlja25lc3M8PTJ8fGUuY291bnQ+PXYubWF4UG9pbnRzKT90LnNoYWRlcnMucmVjdChlKTp0LnNoYWRlcnMubWl0ZXIoZSkpKX0pLHRoaXN9LHYucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHQpe251bGwhPXQubGVuZ3RoP1wibnVtYmVyXCI9PXR5cGVvZiB0WzBdJiYodD1be3Bvc2l0aW9uczp0fV0pOkFycmF5LmlzQXJyYXkodCl8fCh0PVt0XSk7dmFyIHI9dGhpcy5yZWdsLG89dGhpcy5nbDtpZih0LmZvckVhY2goZnVuY3Rpb24odCxoKXt2YXIgZD1lLnBhc3Nlc1toXTtpZih2b2lkIDAhPT10KWlmKG51bGwhPT10KXtpZihcIm51bWJlclwiPT10eXBlb2YgdFswXSYmKHQ9e3Bvc2l0aW9uczp0fSksdD1zKHQse3Bvc2l0aW9uczpcInBvc2l0aW9ucyBwb2ludHMgZGF0YSBjb29yZHNcIix0aGlja25lc3M6XCJ0aGlja25lc3MgbGluZVdpZHRoIGxpbmVXaWR0aHMgbGluZS13aWR0aCBsaW5ld2lkdGggd2lkdGggc3Ryb2tlLXdpZHRoIHN0cm9rZXdpZHRoIHN0cm9rZVdpZHRoXCIsam9pbjpcImxpbmVKb2luIGxpbmVqb2luIGpvaW4gdHlwZSBtb2RlXCIsbWl0ZXJMaW1pdDpcIm1pdGVybGltaXQgbWl0ZXJMaW1pdFwiLGRhc2hlczpcImRhc2ggZGFzaGVzIGRhc2hhcnJheSBkYXNoLWFycmF5IGRhc2hBcnJheVwiLGNvbG9yOlwiY29sb3IgY29sb3VyIHN0cm9rZSBjb2xvcnMgY29sb3VycyBzdHJva2UtY29sb3Igc3Ryb2tlQ29sb3JcIixmaWxsOlwiZmlsbCBmaWxsLWNvbG9yIGZpbGxDb2xvclwiLG9wYWNpdHk6XCJhbHBoYSBvcGFjaXR5XCIsb3ZlcmxheTpcIm92ZXJsYXkgY3JlYXNlIG92ZXJsYXAgaW50ZXJzZWN0XCIsY2xvc2U6XCJjbG9zZWQgY2xvc2UgY2xvc2VkLXBhdGggY2xvc2VQYXRoXCIscmFuZ2U6XCJyYW5nZSBkYXRhQm94XCIsdmlld3BvcnQ6XCJ2aWV3cG9ydCB2aWV3Qm94XCIsaG9sZTpcImhvbGVzIGhvbGUgaG9sbG93XCJ9KSxkfHwoZS5wYXNzZXNbaF09ZD17aWQ6aCxzY2FsZTpudWxsLHNjYWxlRnJhY3Q6bnVsbCx0cmFuc2xhdGU6bnVsbCx0cmFuc2xhdGVGcmFjdDpudWxsLGNvdW50OjAsaG9sZTpbXSxkZXB0aDowLGRhc2hMZW5ndGg6MSxkYXNoVGV4dHVyZTpyLnRleHR1cmUoe2NoYW5uZWxzOjEsZGF0YTpuZXcgVWludDhBcnJheShbMjU1XSksd2lkdGg6MSxoZWlnaHQ6MSxtYWc6XCJsaW5lYXJcIixtaW46XCJsaW5lYXJcIn0pLGNvbG9yQnVmZmVyOnIuYnVmZmVyKHt1c2FnZTpcImR5bmFtaWNcIix0eXBlOlwidWludDhcIixkYXRhOm5ldyBVaW50OEFycmF5fSkscG9zaXRpb25CdWZmZXI6ci5idWZmZXIoe3VzYWdlOlwiZHluYW1pY1wiLHR5cGU6XCJmbG9hdFwiLGRhdGE6bmV3IFVpbnQ4QXJyYXl9KSxwb3NpdGlvbkZyYWN0QnVmZmVyOnIuYnVmZmVyKHt1c2FnZTpcImR5bmFtaWNcIix0eXBlOlwiZmxvYXRcIixkYXRhOm5ldyBVaW50OEFycmF5fSl9LHQ9YSh7fSx2LmRlZmF1bHRzLHQpKSxudWxsIT10LnRoaWNrbmVzcyYmKGQudGhpY2tuZXNzPXBhcnNlRmxvYXQodC50aGlja25lc3MpKSxudWxsIT10Lm9wYWNpdHkmJihkLm9wYWNpdHk9cGFyc2VGbG9hdCh0Lm9wYWNpdHkpKSxudWxsIT10Lm1pdGVyTGltaXQmJihkLm1pdGVyTGltaXQ9cGFyc2VGbG9hdCh0Lm1pdGVyTGltaXQpKSxudWxsIT10Lm92ZXJsYXkmJihkLm92ZXJsYXk9ISF0Lm92ZXJsYXksaDx2Lm1heExpbmVzJiYoZC5kZXB0aD0yKih2Lm1heExpbmVzLTEtaCV2Lm1heExpbmVzKS92Lm1heExpbmVzLTEpKSxudWxsIT10LmpvaW4mJihkLmpvaW49dC5qb2luKSxudWxsIT10LmhvbGUmJihkLmhvbGU9dC5ob2xlKSxudWxsIT10LmZpbGwmJihkLmZpbGw9dC5maWxsP24odC5maWxsLFwidWludDhcIik6bnVsbCksbnVsbCE9dC52aWV3cG9ydCYmKGQudmlld3BvcnQ9Zyh0LnZpZXdwb3J0KSksZC52aWV3cG9ydHx8KGQudmlld3BvcnQ9Zyhbby5kcmF3aW5nQnVmZmVyV2lkdGgsby5kcmF3aW5nQnVmZmVySGVpZ2h0XSkpLG51bGwhPXQuY2xvc2UmJihkLmNsb3NlPXQuY2xvc2UpLG51bGw9PT10LnBvc2l0aW9ucyYmKHQucG9zaXRpb25zPVtdKSx0LnBvc2l0aW9ucyl7dmFyIG0seTtpZih0LnBvc2l0aW9ucy54JiZ0LnBvc2l0aW9ucy55KXt2YXIgeD10LnBvc2l0aW9ucy54LGI9dC5wb3NpdGlvbnMueTt5PWQuY291bnQ9TWF0aC5tYXgoeC5sZW5ndGgsYi5sZW5ndGgpLG09bmV3IEZsb2F0NjRBcnJheSgyKnkpO2Zvcih2YXIgXz0wO188eTtfKyspbVsyKl9dPXhbX10sbVsyKl8rMV09YltfXX1lbHNlIG09bCh0LnBvc2l0aW9ucyxcImZsb2F0NjRcIikseT1kLmNvdW50PU1hdGguZmxvb3IobS5sZW5ndGgvMik7dmFyIHc9ZC5ib3VuZHM9aShtLDIpO2lmKGQuZmlsbCl7Zm9yKHZhciBrPVtdLEE9e30sVD0wLE09MCxTPTAsRT1kLmNvdW50O008RTtNKyspe3ZhciBDPW1bMipNXSxMPW1bMipNKzFdO2lzTmFOKEMpfHxpc05hTihMKXx8bnVsbD09Q3x8bnVsbD09TD8oQz1tWzIqVF0sTD1tWzIqVCsxXSxBW01dPVQpOlQ9TSxrW1MrK109QyxrW1MrK109TH1mb3IodmFyIHo9YyhrLGQuaG9sZXx8W10pLE89MCxJPXoubGVuZ3RoO088STtPKyspbnVsbCE9QVt6W09dXSYmKHpbT109QVt6W09dXSk7ZC50cmlhbmdsZXM9en12YXIgRD1uZXcgRmxvYXQ2NEFycmF5KG0pO3UoRCwyLHcpO3ZhciBQPW5ldyBGbG9hdDY0QXJyYXkoMip5KzYpO2QuY2xvc2U/bVswXT09PW1bMip5LTJdJiZtWzFdPT09bVsyKnktMV0/KFBbMF09RFsyKnktNF0sUFsxXT1EWzIqeS0zXSk6KFBbMF09RFsyKnktMl0sUFsxXT1EWzIqeS0xXSk6KFBbMF09RFswXSxQWzFdPURbMV0pLFAuc2V0KEQsMiksZC5jbG9zZT9tWzBdPT09bVsyKnktMl0mJm1bMV09PT1tWzIqeS0xXT8oUFsyKnkrMl09RFsyXSxQWzIqeSszXT1EWzNdLGQuY291bnQtPTEpOihQWzIqeSsyXT1EWzBdLFBbMip5KzNdPURbMV0sUFsyKnkrNF09RFsyXSxQWzIqeSs1XT1EWzNdKTooUFsyKnkrMl09RFsyKnktMl0sUFsyKnkrM109RFsyKnktMV0sUFsyKnkrNF09RFsyKnktMl0sUFsyKnkrNV09RFsyKnktMV0pLGQucG9zaXRpb25CdWZmZXIoZihQKSksZC5wb3NpdGlvbkZyYWN0QnVmZmVyKHAoUCkpfWlmKHQucmFuZ2U/ZC5yYW5nZT10LnJhbmdlOmQucmFuZ2V8fChkLnJhbmdlPWQuYm91bmRzKSwodC5yYW5nZXx8dC5wb3NpdGlvbnMpJiZkLmNvdW50KXt2YXIgUj1kLmJvdW5kcyxGPVJbMl0tUlswXSxCPVJbM10tUlsxXSxOPWQucmFuZ2VbMl0tZC5yYW5nZVswXSxqPWQucmFuZ2VbM10tZC5yYW5nZVsxXTtkLnNjYWxlPVtGL04sQi9qXSxkLnRyYW5zbGF0ZT1bLWQucmFuZ2VbMF0vTitSWzBdL058fDAsLWQucmFuZ2VbMV0vaitSWzFdL2p8fDBdLGQuc2NhbGVGcmFjdD1wKGQuc2NhbGUpLGQudHJhbnNsYXRlRnJhY3Q9cChkLnRyYW5zbGF0ZSl9aWYodC5kYXNoZXMpe3ZhciBWLFU9MDtpZighdC5kYXNoZXN8fHQuZGFzaGVzLmxlbmd0aDwyKVU9MSxWPW5ldyBVaW50OEFycmF5KFsyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSk7ZWxzZXtVPTA7Zm9yKHZhciBxPTA7cTx0LmRhc2hlcy5sZW5ndGg7KytxKVUrPXQuZGFzaGVzW3FdO1Y9bmV3IFVpbnQ4QXJyYXkoVSp2LmRhc2hNdWx0KTtmb3IodmFyIEg9MCxHPTI1NSxZPTA7WTwyO1krKylmb3IodmFyIFc9MDtXPHQuZGFzaGVzLmxlbmd0aDsrK1cpe2Zvcih2YXIgWD0wLFo9dC5kYXNoZXNbV10qdi5kYXNoTXVsdCouNTtYPFo7KytYKVZbSCsrXT1HO0dePTI1NX19ZC5kYXNoTGVuZ3RoPVUsZC5kYXNoVGV4dHVyZSh7Y2hhbm5lbHM6MSxkYXRhOlYsd2lkdGg6Vi5sZW5ndGgsaGVpZ2h0OjEsbWFnOlwibGluZWFyXCIsbWluOlwibGluZWFyXCJ9LDAsMCl9aWYodC5jb2xvcil7dmFyICQ9ZC5jb3VudCxKPXQuY29sb3I7Snx8KEo9XCJ0cmFuc3BhcmVudFwiKTt2YXIgSz1uZXcgVWludDhBcnJheSg0KiQrNCk7aWYoQXJyYXkuaXNBcnJheShKKSYmXCJudW1iZXJcIiE9dHlwZW9mIEpbMF0pe2Zvcih2YXIgUT0wO1E8JDtRKyspe3ZhciB0dD1uKEpbUV0sXCJ1aW50OFwiKTtLLnNldCh0dCw0KlEpfUsuc2V0KG4oSlswXSxcInVpbnQ4XCIpLDQqJCl9ZWxzZSBmb3IodmFyIGV0PW4oSixcInVpbnQ4XCIpLHJ0PTA7cnQ8JCsxO3J0KyspSy5zZXQoZXQsNCpydCk7ZC5jb2xvckJ1ZmZlcih7dXNhZ2U6XCJkeW5hbWljXCIsdHlwZTpcInVpbnQ4XCIsZGF0YTpLfSl9fWVsc2UgZS5wYXNzZXNbaF09bnVsbH0pLHQubGVuZ3RoPHRoaXMucGFzc2VzLmxlbmd0aCl7Zm9yKHZhciBoPXQubGVuZ3RoO2g8dGhpcy5wYXNzZXMubGVuZ3RoO2grKyl7dmFyIGQ9ZS5wYXNzZXNbaF07ZCYmKGQuY29sb3JCdWZmZXIuZGVzdHJveSgpLGQucG9zaXRpb25CdWZmZXIuZGVzdHJveSgpLGQuZGFzaFRleHR1cmUuZGVzdHJveSgpKX10aGlzLnBhc3Nlcy5sZW5ndGg9dC5sZW5ndGh9Zm9yKHZhciBtPVtdLHk9MDt5PHRoaXMucGFzc2VzLmxlbmd0aDt5KyspbnVsbCE9PWUucGFzc2VzW3ldJiZtLnB1c2goZS5wYXNzZXNbeV0pO3JldHVybiB0aGlzLnBhc3Nlcz1tLHRoaXN9fSx2LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFzc2VzLmZvckVhY2goZnVuY3Rpb24odCl7dC5jb2xvckJ1ZmZlci5kZXN0cm95KCksdC5wb3NpdGlvbkJ1ZmZlci5kZXN0cm95KCksdC5kYXNoVGV4dHVyZS5kZXN0cm95KCl9KSx0aGlzLnBhc3Nlcy5sZW5ndGg9MCx0aGlzfX0se1wiYXJyYXktYm91bmRzXCI6NTYsXCJhcnJheS1ub3JtYWxpemVcIjo1NyxcImNvbG9yLW5vcm1hbGl6ZVwiOjExMSxlYXJjdXQ6MTYzLFwiZXM2LXdlYWstbWFwXCI6MjE3LFwiZmxhdHRlbi12ZXJ0ZXgtZGF0YVwiOjIyNCxnbHNsaWZ5OjQwMixcIm9iamVjdC1hc3NpZ25cIjo0NDcsXCJwYXJzZS1yZWN0XCI6NDUyLFwicGljay1ieS1hbGlhc1wiOjQ1OCxcInRvLWZsb2F0MzJcIjo1MjN9XSw0ODU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9KHQpfHxmdW5jdGlvbih0LGUpe3ZhciByPVtdLG49ITAsaT0hMSxhPXZvaWQgMDt0cnl7Zm9yKHZhciBvLHM9dFtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShvPXMubmV4dCgpKS5kb25lKSYmKHIucHVzaChvLnZhbHVlKSwhZXx8ci5sZW5ndGghPT1lKTtuPSEwKTt9Y2F0Y2godCl7aT0hMCxhPXR9ZmluYWxseXt0cnl7bnx8bnVsbD09cy5yZXR1cm58fHMucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IGF9fXJldHVybiByfSh0LGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpfSgpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLHI9bmV3IEFycmF5KHQubGVuZ3RoKTtlPHQubGVuZ3RoO2UrKylyW2VdPXRbZV07cmV0dXJuIHJ9fSh0KXx8ZnVuY3Rpb24odCl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdCh0KXx8XCJbb2JqZWN0IEFyZ3VtZW50c11cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpfSgpfXZhciBhPXQoXCJjb2xvci1ub3JtYWxpemVcIiksbz10KFwiYXJyYXktYm91bmRzXCIpLHM9dChcImNvbG9yLWlkXCIpLGw9dChcInBvaW50LWNsdXN0ZXJcIiksYz10KFwib2JqZWN0LWFzc2lnblwiKSx1PXQoXCJnbHNsaWZ5XCIpLGg9dChcInBpY2stYnktYWxpYXNcIiksZj10KFwidXBkYXRlLWRpZmZcIikscD10KFwiZmxhdHRlbi12ZXJ0ZXgtZGF0YVwiKSxkPXQoXCJpcy1pZXhwbG9yZXJcIiksZz10KFwidG8tZmxvYXQzMlwiKSx2PXQoXCJwYXJzZS1yZWN0XCIpLG09eTtmdW5jdGlvbiB5KHQsZSl7dmFyIHI9dGhpcztpZighKHRoaXMgaW5zdGFuY2VvZiB5KSlyZXR1cm4gbmV3IHkodCxlKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiB0PyhlfHwoZT17fSksZS5yZWdsPXQpOihlPXQsdD1udWxsKSxlJiZlLmxlbmd0aCYmKGUucG9zaXRpb25zPWUpO3ZhciBuLGk9KHQ9ZS5yZWdsKS5fZ2wsYT1bXTt0aGlzLnRvb01hbnlDb2xvcnM9ZCxuPXQudGV4dHVyZSh7ZGF0YTpuZXcgVWludDhBcnJheSgxMDIwKSx3aWR0aDoyNTUsaGVpZ2h0OjEsdHlwZTpcInVpbnQ4XCIsZm9ybWF0OlwicmdiYVwiLHdyYXBTOlwiY2xhbXBcIix3cmFwVDpcImNsYW1wXCIsbWFnOlwibmVhcmVzdFwiLG1pbjpcIm5lYXJlc3RcIn0pLGModGhpcyx7cmVnbDp0LGdsOmksZ3JvdXBzOltdLG1hcmtlckNhY2hlOltudWxsXSxtYXJrZXJUZXh0dXJlczpbbnVsbF0scGFsZXR0ZTphLHBhbGV0dGVJZHM6e30scGFsZXR0ZVRleHR1cmU6bixtYXhDb2xvcnM6MjU1LG1heFNpemU6MTAwLGNhbnZhczppLmNhbnZhc30pLHRoaXMudXBkYXRlKGUpO3ZhciBvPXt1bmlmb3Jtczp7cGl4ZWxSYXRpbzp0LmNvbnRleHQoXCJwaXhlbFJhdGlvXCIpLHBhbGV0dGU6bixwYWxldHRlU2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybltyLnRvb01hbnlDb2xvcnM/MDoyNTUsbi5oZWlnaHRdfSxzY2FsZTp0LnByb3AoXCJzY2FsZVwiKSxzY2FsZUZyYWN0OnQucHJvcChcInNjYWxlRnJhY3RcIiksdHJhbnNsYXRlOnQucHJvcChcInRyYW5zbGF0ZVwiKSx0cmFuc2xhdGVGcmFjdDp0LnByb3AoXCJ0cmFuc2xhdGVGcmFjdFwiKSxvcGFjaXR5OnQucHJvcChcIm9wYWNpdHlcIiksbWFya2VyOnQucHJvcChcIm1hcmtlclRleHR1cmVcIil9LGF0dHJpYnV0ZXM6e3g6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS54QXR0cnx8e2J1ZmZlcjplLnBvc2l0aW9uQnVmZmVyLHN0cmlkZTo4LG9mZnNldDowfX0seTpmdW5jdGlvbih0LGUpe3JldHVybiBlLnlBdHRyfHx7YnVmZmVyOmUucG9zaXRpb25CdWZmZXIsc3RyaWRlOjgsb2Zmc2V0OjR9fSx4RnJhY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS54QXR0cj97Y29uc3RhbnQ6WzAsMF19OntidWZmZXI6ZS5wb3NpdGlvbkZyYWN0QnVmZmVyLHN0cmlkZTo4LG9mZnNldDowfX0seUZyYWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUueUF0dHI/e2NvbnN0YW50OlswLDBdfTp7YnVmZmVyOmUucG9zaXRpb25GcmFjdEJ1ZmZlcixzdHJpZGU6OCxvZmZzZXQ6NH19LHNpemU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zaXplLmxlbmd0aD97YnVmZmVyOmUuc2l6ZUJ1ZmZlcixzdHJpZGU6MixvZmZzZXQ6MH06e2NvbnN0YW50OltNYXRoLnJvdW5kKDI1NSplLnNpemUvci5tYXhTaXplKV19fSxib3JkZXJTaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuYm9yZGVyU2l6ZS5sZW5ndGg/e2J1ZmZlcjplLnNpemVCdWZmZXIsc3RyaWRlOjIsb2Zmc2V0OjF9Ontjb25zdGFudDpbTWF0aC5yb3VuZCgyNTUqZS5ib3JkZXJTaXplL3IubWF4U2l6ZSldfX0sY29sb3JJZDpmdW5jdGlvbih0LGUpe3JldHVybiBlLmNvbG9yLmxlbmd0aD97YnVmZmVyOmUuY29sb3JCdWZmZXIsc3RyaWRlOnIudG9vTWFueUNvbG9ycz84OjQsb2Zmc2V0OjB9Ontjb25zdGFudDpyLnRvb01hbnlDb2xvcnM/YS5zbGljZSg0KmUuY29sb3IsNCplLmNvbG9yKzQpOltlLmNvbG9yXX19LGJvcmRlckNvbG9ySWQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5ib3JkZXJDb2xvci5sZW5ndGg/e2J1ZmZlcjplLmNvbG9yQnVmZmVyLHN0cmlkZTpyLnRvb01hbnlDb2xvcnM/ODo0LG9mZnNldDpyLnRvb01hbnlDb2xvcnM/NDoyfTp7Y29uc3RhbnQ6ci50b29NYW55Q29sb3JzP2Euc2xpY2UoNCplLmJvcmRlckNvbG9yLDQqZS5ib3JkZXJDb2xvcis0KTpbZS5ib3JkZXJDb2xvcl19fSxpc0FjdGl2ZTpmdW5jdGlvbih0LGUpe3JldHVybiEwPT09ZS5hY3RpdmF0aW9uP3tjb25zdGFudDpbMV19OmUuYWN0aXZhdGlvbj9lLmFjdGl2YXRpb246e2NvbnN0YW50OlswXX19fSxibGVuZDp7ZW5hYmxlOiEwLGNvbG9yOlswLDAsMCwxXSxmdW5jOntzcmNSR0I6XCJzcmMgYWxwaGFcIixkc3RSR0I6XCJvbmUgbWludXMgc3JjIGFscGhhXCIsc3JjQWxwaGE6XCJvbmUgbWludXMgZHN0IGFscGhhXCIsZHN0QWxwaGE6XCJvbmVcIn19LHNjaXNzb3I6e2VuYWJsZTohMCxib3g6dC5wcm9wKFwidmlld3BvcnRcIil9LHZpZXdwb3J0OnQucHJvcChcInZpZXdwb3J0XCIpLHN0ZW5jaWw6e2VuYWJsZTohMX0sZGVwdGg6e2VuYWJsZTohMX0sZWxlbWVudHM6dC5wcm9wKFwiZWxlbWVudHNcIiksY291bnQ6dC5wcm9wKFwiY291bnRcIiksb2Zmc2V0OnQucHJvcChcIm9mZnNldFwiKSxwcmltaXRpdmU6XCJwb2ludHNcIn0scz1jKHt9LG8pO3MuZnJhZz11KFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3IsIGZyYWdCb3JkZXJDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IGZyYWdXaWR0aCwgZnJhZ0JvcmRlckNvbG9yTGV2ZWwsIGZyYWdDb2xvckxldmVsO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIG1hcmtlcjtcXG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW8sIG9wYWNpdHk7XFxuXFxuZmxvYXQgc21vb3RoU3RlcChmbG9hdCB4LCBmbG9hdCB5KSB7XFxuICByZXR1cm4gMS4wIC8gKDEuMCArIGV4cCg1MC4wKih4IC0geSkpKTtcXG59XFxuXFxudm9pZCBtYWluKCkge1xcbiAgZmxvYXQgZGlzdCA9IHRleHR1cmUyRChtYXJrZXIsIGdsX1BvaW50Q29vcmQpLnIsIGRlbHRhID0gZnJhZ1dpZHRoO1xcblxcbiAgLy8gbWF4LWRpc3RhbmNlIGFscGhhXFxuICBpZiAoZGlzdCA8IDAuMDAzKSBkaXNjYXJkO1xcblxcbiAgLy8gbnVsbC1ib3JkZXIgY2FzZVxcbiAgaWYgKGZyYWdCb3JkZXJDb2xvckxldmVsID09IGZyYWdDb2xvckxldmVsIHx8IGZyYWdCb3JkZXJDb2xvci5hID09IDAuKSB7XFxuICAgIGZsb2F0IGNvbG9yQW10ID0gc21vb3Roc3RlcCguNSAtIGRlbHRhLCAuNSArIGRlbHRhLCBkaXN0KTtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChmcmFnQ29sb3IucmdiLCBjb2xvckFtdCAqIGZyYWdDb2xvci5hICogb3BhY2l0eSk7XFxuICB9XFxuICBlbHNlIHtcXG4gICAgZmxvYXQgYm9yZGVyQ29sb3JBbXQgPSBzbW9vdGhzdGVwKGZyYWdCb3JkZXJDb2xvckxldmVsIC0gZGVsdGEsIGZyYWdCb3JkZXJDb2xvckxldmVsICsgZGVsdGEsIGRpc3QpO1xcbiAgICBmbG9hdCBjb2xvckFtdCA9IHNtb290aHN0ZXAoZnJhZ0NvbG9yTGV2ZWwgLSBkZWx0YSwgZnJhZ0NvbG9yTGV2ZWwgKyBkZWx0YSwgZGlzdCk7XFxuXFxuICAgIHZlYzQgY29sb3IgPSBmcmFnQm9yZGVyQ29sb3I7XFxuICAgIGNvbG9yLmEgKj0gYm9yZGVyQ29sb3JBbXQ7XFxuICAgIGNvbG9yID0gbWl4KGNvbG9yLCBmcmFnQ29sb3IsIGNvbG9yQW10KTtcXG4gICAgY29sb3IuYSAqPSBvcGFjaXR5O1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG4gIH1cXG5cXG59XFxuXCJdKSxzLnZlcnQ9dShbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgZmxvYXQgeCwgeSwgeEZyYWN0LCB5RnJhY3Q7XFxuYXR0cmlidXRlIGZsb2F0IHNpemUsIGJvcmRlclNpemU7XFxuYXR0cmlidXRlIHZlYzQgY29sb3JJZCwgYm9yZGVyQ29sb3JJZDtcXG5hdHRyaWJ1dGUgZmxvYXQgaXNBY3RpdmU7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0LCBwYWxldHRlU2l6ZTtcXG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW87XFxudW5pZm9ybSBzYW1wbGVyMkQgcGFsZXR0ZTtcXG5cXG5jb25zdCBmbG9hdCBtYXhTaXplID0gMTAwLjtcXG5jb25zdCBmbG9hdCBib3JkZXJMZXZlbCA9IC41O1xcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3IsIGZyYWdCb3JkZXJDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IGZyYWdQb2ludFNpemUsIGZyYWdCb3JkZXJSYWRpdXMsIGZyYWdXaWR0aCwgZnJhZ0JvcmRlckNvbG9yTGV2ZWwsIGZyYWdDb2xvckxldmVsO1xcblxcbmJvb2wgaXNEaXJlY3QgPSAocGFsZXR0ZVNpemUueCA8IDEuKTtcXG5cXG52ZWM0IGdldENvbG9yKHZlYzQgaWQpIHtcXG4gIHJldHVybiBpc0RpcmVjdCA/IGlkIC8gMjU1LiA6IHRleHR1cmUyRChwYWxldHRlLFxcbiAgICB2ZWMyKFxcbiAgICAgIChpZC54ICsgLjUpIC8gcGFsZXR0ZVNpemUueCxcXG4gICAgICAoaWQueSArIC41KSAvIHBhbGV0dGVTaXplLnlcXG4gICAgKVxcbiAgKTtcXG59XFxuXFxudm9pZCBtYWluKCkge1xcbiAgaWYgKGlzQWN0aXZlID09IDAuKSByZXR1cm47XFxuXFxuICB2ZWMyIHBvc2l0aW9uID0gdmVjMih4LCB5KTtcXG4gIHZlYzIgcG9zaXRpb25GcmFjdCA9IHZlYzIoeEZyYWN0LCB5RnJhY3QpO1xcblxcbiAgdmVjNCBjb2xvciA9IGdldENvbG9yKGNvbG9ySWQpO1xcbiAgdmVjNCBib3JkZXJDb2xvciA9IGdldENvbG9yKGJvcmRlckNvbG9ySWQpO1xcblxcbiAgZmxvYXQgc2l6ZSA9IHNpemUgKiBtYXhTaXplIC8gMjU1LjtcXG4gIGZsb2F0IGJvcmRlclNpemUgPSBib3JkZXJTaXplICogbWF4U2l6ZSAvIDI1NS47XFxuXFxuICBnbF9Qb2ludFNpemUgPSAyLiAqIHNpemUgKiBwaXhlbFJhdGlvO1xcbiAgZnJhZ1BvaW50U2l6ZSA9IHNpemUgKiBwaXhlbFJhdGlvO1xcblxcbiAgdmVjMiBwb3MgPSAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVcXG4gICAgICArIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVcXG4gICAgICArIChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZUZyYWN0XFxuICAgICAgKyAocG9zaXRpb25GcmFjdCArIHRyYW5zbGF0ZUZyYWN0KSAqIHNjYWxlRnJhY3Q7XFxuXFxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zICogMi4gLSAxLiwgMCwgMSk7XFxuXFxuICBmcmFnQ29sb3IgPSBjb2xvcjtcXG4gIGZyYWdCb3JkZXJDb2xvciA9IGJvcmRlckNvbG9yO1xcbiAgZnJhZ1dpZHRoID0gMS4gLyBnbF9Qb2ludFNpemU7XFxuXFxuICBmcmFnQm9yZGVyQ29sb3JMZXZlbCA9IGNsYW1wKGJvcmRlckxldmVsIC0gYm9yZGVyTGV2ZWwgKiBib3JkZXJTaXplIC8gc2l6ZSwgMC4sIDEuKTtcXG4gIGZyYWdDb2xvckxldmVsID0gY2xhbXAoYm9yZGVyTGV2ZWwgKyAoMS4gLSBib3JkZXJMZXZlbCkgKiBib3JkZXJTaXplIC8gc2l6ZSwgMC4sIDEuKTtcXG59XCJdKSx0aGlzLmRyYXdNYXJrZXI9dChzKTt2YXIgbD1jKHt9LG8pO2wuZnJhZz11KFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3IsIGZyYWdCb3JkZXJDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxudmFyeWluZyBmbG9hdCBmcmFnQm9yZGVyUmFkaXVzLCBmcmFnV2lkdGg7XFxuXFxuZmxvYXQgc21vb3RoU3RlcChmbG9hdCBlZGdlMCwgZmxvYXQgZWRnZTEsIGZsb2F0IHgpIHtcXG5cXHRmbG9hdCB0O1xcblxcdHQgPSBjbGFtcCgoeCAtIGVkZ2UwKSAvIChlZGdlMSAtIGVkZ2UwKSwgMC4wLCAxLjApO1xcblxcdHJldHVybiB0ICogdCAqICgzLjAgLSAyLjAgKiB0KTtcXG59XFxuXFxudm9pZCBtYWluKCkge1xcblxcdGZsb2F0IHJhZGl1cywgYWxwaGEgPSAxLjAsIGRlbHRhID0gZnJhZ1dpZHRoO1xcblxcblxcdHJhZGl1cyA9IGxlbmd0aCgyLjAgKiBnbF9Qb2ludENvb3JkLnh5IC0gMS4wKTtcXG5cXG5cXHRpZiAocmFkaXVzID4gMS4wICsgZGVsdGEpIHtcXG5cXHRcXHRkaXNjYXJkO1xcblxcdH1cXG5cXG5cXHRhbHBoYSAtPSBzbW9vdGhzdGVwKDEuMCAtIGRlbHRhLCAxLjAgKyBkZWx0YSwgcmFkaXVzKTtcXG5cXG5cXHRmbG9hdCBib3JkZXJSYWRpdXMgPSBmcmFnQm9yZGVyUmFkaXVzO1xcblxcdGZsb2F0IHJhdGlvID0gc21vb3Roc3RlcChib3JkZXJSYWRpdXMgLSBkZWx0YSwgYm9yZGVyUmFkaXVzICsgZGVsdGEsIHJhZGl1cyk7XFxuXFx0dmVjNCBjb2xvciA9IG1peChmcmFnQ29sb3IsIGZyYWdCb3JkZXJDb2xvciwgcmF0aW8pO1xcblxcdGNvbG9yLmEgKj0gYWxwaGEgKiBvcGFjaXR5O1xcblxcdGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIl0pLGwudmVydD11KFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSBmbG9hdCB4LCB5LCB4RnJhY3QsIHlGcmFjdDtcXG5hdHRyaWJ1dGUgZmxvYXQgc2l6ZSwgYm9yZGVyU2l6ZTtcXG5hdHRyaWJ1dGUgdmVjNCBjb2xvcklkLCBib3JkZXJDb2xvcklkO1xcbmF0dHJpYnV0ZSBmbG9hdCBpc0FjdGl2ZTtcXG5cXG51bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3Q7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFJhdGlvO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHBhbGV0dGU7XFxudW5pZm9ybSB2ZWMyIHBhbGV0dGVTaXplO1xcblxcbmNvbnN0IGZsb2F0IG1heFNpemUgPSAxMDAuO1xcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3IsIGZyYWdCb3JkZXJDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IGZyYWdCb3JkZXJSYWRpdXMsIGZyYWdXaWR0aDtcXG5cXG5ib29sIGlzRGlyZWN0ID0gKHBhbGV0dGVTaXplLnggPCAxLik7XFxuXFxudmVjNCBnZXRDb2xvcih2ZWM0IGlkKSB7XFxuICByZXR1cm4gaXNEaXJlY3QgPyBpZCAvIDI1NS4gOiB0ZXh0dXJlMkQocGFsZXR0ZSxcXG4gICAgdmVjMihcXG4gICAgICAoaWQueCArIC41KSAvIHBhbGV0dGVTaXplLngsXFxuICAgICAgKGlkLnkgKyAuNSkgLyBwYWxldHRlU2l6ZS55XFxuICAgIClcXG4gICk7XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG4gIC8vIGlnbm9yZSBpbmFjdGl2ZSBwb2ludHNcXG4gIGlmIChpc0FjdGl2ZSA9PSAwLikgcmV0dXJuO1xcblxcbiAgdmVjMiBwb3NpdGlvbiA9IHZlYzIoeCwgeSk7XFxuICB2ZWMyIHBvc2l0aW9uRnJhY3QgPSB2ZWMyKHhGcmFjdCwgeUZyYWN0KTtcXG5cXG4gIHZlYzQgY29sb3IgPSBnZXRDb2xvcihjb2xvcklkKTtcXG4gIHZlYzQgYm9yZGVyQ29sb3IgPSBnZXRDb2xvcihib3JkZXJDb2xvcklkKTtcXG5cXG4gIGZsb2F0IHNpemUgPSBzaXplICogbWF4U2l6ZSAvIDI1NS47XFxuICBmbG9hdCBib3JkZXJTaXplID0gYm9yZGVyU2l6ZSAqIG1heFNpemUgLyAyNTUuO1xcblxcbiAgZ2xfUG9pbnRTaXplID0gKHNpemUgKyBib3JkZXJTaXplKSAqIHBpeGVsUmF0aW87XFxuXFxuICB2ZWMyIHBvcyA9IChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZVxcbiAgICAgICsgKHBvc2l0aW9uRnJhY3QgKyB0cmFuc2xhdGVGcmFjdCkgKiBzY2FsZVxcbiAgICAgICsgKHBvc2l0aW9uICsgdHJhbnNsYXRlKSAqIHNjYWxlRnJhY3RcXG4gICAgICArIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVGcmFjdDtcXG5cXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChwb3MgKiAyLiAtIDEuLCAwLCAxKTtcXG5cXG4gIGZyYWdCb3JkZXJSYWRpdXMgPSAxLiAtIDIuICogYm9yZGVyU2l6ZSAvIChzaXplICsgYm9yZGVyU2l6ZSk7XFxuICBmcmFnQ29sb3IgPSBjb2xvcjtcXG4gIGZyYWdCb3JkZXJDb2xvciA9IGJvcmRlckNvbG9yLmEgPT0gMC4gfHwgYm9yZGVyU2l6ZSA9PSAwLiA/IHZlYzQoY29sb3IucmdiLCAwLikgOiBib3JkZXJDb2xvcjtcXG4gIGZyYWdXaWR0aCA9IDEuIC8gZ2xfUG9pbnRTaXplO1xcbn1cXG5cIl0pLGQmJihsLmZyYWc9bC5mcmFnLnJlcGxhY2UoXCJzbW9vdGhzdGVwXCIsXCJzbW9vdGhTdGVwXCIpLHMuZnJhZz1zLmZyYWcucmVwbGFjZShcInNtb290aHN0ZXBcIixcInNtb290aFN0ZXBcIikpLHRoaXMuZHJhd0NpcmNsZT10KGwpfXkuZGVmYXVsdHM9e2NvbG9yOlwiYmxhY2tcIixib3JkZXJDb2xvcjpcInRyYW5zcGFyZW50XCIsYm9yZGVyU2l6ZTowLHNpemU6MTIsb3BhY2l0eToxLG1hcmtlcjp2b2lkIDAsdmlld3BvcnQ6bnVsbCxyYW5nZTpudWxsLHBpeGVsU2l6ZTpudWxsLGNvdW50OjAsb2Zmc2V0OjAsYm91bmRzOm51bGwscG9zaXRpb25zOltdLHNuYXA6MWU0fSx5LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCYmdGhpcy51cGRhdGUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuZHJhdygpLHRoaXN9LHkucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspcltuXT1hcmd1bWVudHNbbl07dmFyIGk9dGhpcy5ncm91cHM7aWYoMT09PXIubGVuZ3RoJiZBcnJheS5pc0FycmF5KHJbMF0pJiYobnVsbD09PXJbMF1bMF18fEFycmF5LmlzQXJyYXkoclswXVswXSkpJiYocj1yWzBdKSx0aGlzLnJlZ2wuX3JlZnJlc2goKSxyLmxlbmd0aClmb3IodmFyIGE9MDthPHIubGVuZ3RoO2ErKyl0aGlzLmRyYXdJdGVtKGEsclthXSk7ZWxzZSBpLmZvckVhY2goZnVuY3Rpb24oZSxyKXt0LmRyYXdJdGVtKHIpfSk7cmV0dXJuIHRoaXN9LHkucHJvdG90eXBlLmRyYXdJdGVtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5ncm91cHMsbj1yW3RdO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlJiYodD1lLG49cltlXSxlPW51bGwpLG4mJm4uY291bnQmJm4ub3BhY2l0eSl7bi5hY3RpdmF0aW9uWzBdJiZ0aGlzLmRyYXdDaXJjbGUodGhpcy5nZXRNYXJrZXJEcmF3T3B0aW9ucygwLG4sZSkpO2Zvcih2YXIgYT1bXSxvPTE7bzxuLmFjdGl2YXRpb24ubGVuZ3RoO28rKyluLmFjdGl2YXRpb25bb10mJighMD09PW4uYWN0aXZhdGlvbltvXXx8bi5hY3RpdmF0aW9uW29dLmRhdGEubGVuZ3RoKSYmYS5wdXNoLmFwcGx5KGEsaSh0aGlzLmdldE1hcmtlckRyYXdPcHRpb25zKG8sbixlKSkpO2EubGVuZ3RoJiZ0aGlzLmRyYXdNYXJrZXIoYSl9fSx5LnByb3RvdHlwZS5nZXRNYXJrZXJEcmF3T3B0aW9ucz1mdW5jdGlvbih0LGUscil7dmFyIGk9ZS5yYW5nZSxhPWUudHJlZSxvPWUudmlld3BvcnQscz1lLmFjdGl2YXRpb24sbD1lLnNlbGVjdGlvbkJ1ZmZlcix1PWUuY291bnQ7dGhpcy5yZWdsO2lmKCFhKXJldHVybiByP1tjKHt9LGUse21hcmtlclRleHR1cmU6dGhpcy5tYXJrZXJUZXh0dXJlc1t0XSxhY3RpdmF0aW9uOnNbdF0sY291bnQ6ci5sZW5ndGgsZWxlbWVudHM6cixvZmZzZXQ6MH0pXTpbYyh7fSxlLHttYXJrZXJUZXh0dXJlOnRoaXMubWFya2VyVGV4dHVyZXNbdF0sYWN0aXZhdGlvbjpzW3RdLG9mZnNldDowfSldO3ZhciBoPVtdLGY9YS5yYW5nZShpLHtsb2Q6ITAscHg6WyhpWzJdLWlbMF0pL28ud2lkdGgsKGlbM10taVsxXSkvby5oZWlnaHRdfSk7aWYocil7Zm9yKHZhciBwPXNbdF0uZGF0YSxkPW5ldyBVaW50OEFycmF5KHUpLGc9MDtnPHIubGVuZ3RoO2crKyl7dmFyIHY9cltnXTtkW3ZdPXA/cFt2XToxfWwuc3ViZGF0YShkKX1mb3IodmFyIG09Zi5sZW5ndGg7bS0tOyl7dmFyIHk9bihmW21dLDIpLHg9eVswXSxiPXlbMV07aC5wdXNoKGMoe30sZSx7bWFya2VyVGV4dHVyZTp0aGlzLm1hcmtlclRleHR1cmVzW3RdLGFjdGl2YXRpb246cj9sOnNbdF0sb2Zmc2V0OngsY291bnQ6Yi14fSkpfXJldHVybiBofSx5LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspcltuXT1hcmd1bWVudHNbbl07aWYoci5sZW5ndGgpezE9PT1yLmxlbmd0aCYmQXJyYXkuaXNBcnJheShyWzBdKSYmKHI9clswXSk7dmFyIGk9dGhpcy5ncm91cHMsYT10aGlzLmdsLHM9dGhpcy5yZWdsLHU9dGhpcy5tYXhTaXplLGQ9dGhpcy5tYXhDb2xvcnMsbT10aGlzLnBhbGV0dGU7dGhpcy5ncm91cHM9aT1yLm1hcChmdW5jdGlvbihlLHIpe3ZhciBuPWlbcl07aWYodm9pZCAwPT09ZSlyZXR1cm4gbjtudWxsPT09ZT9lPXtwb3NpdGlvbnM6bnVsbH06XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lPXtvbmRyYXc6ZX06XCJudW1iZXJcIj09dHlwZW9mIGVbMF0mJihlPXtwb3NpdGlvbnM6ZX0pLG51bGw9PT0oZT1oKGUse3Bvc2l0aW9uczpcInBvc2l0aW9ucyBkYXRhIHBvaW50c1wiLHNuYXA6XCJzbmFwIGNsdXN0ZXIgbG9kIHRyZWVcIixzaXplOlwic2l6ZXMgc2l6ZSByYWRpdXNcIixib3JkZXJTaXplOlwiYm9yZGVyU2l6ZXMgYm9yZGVyU2l6ZSBib3JkZXItc2l6ZSBib3JkZXJzaXplIGJvcmRlcldpZHRoIGJvcmRlcldpZHRocyBib3JkZXItd2lkdGggYm9yZGVyd2lkdGggc3Ryb2tlLXdpZHRoIHN0cm9rZVdpZHRoIHN0cm9rZXdpZHRoIG91dGxpbmVcIixjb2xvcjpcImNvbG9ycyBjb2xvciBmaWxsIGZpbGwtY29sb3IgZmlsbENvbG9yXCIsYm9yZGVyQ29sb3I6XCJib3JkZXJDb2xvcnMgYm9yZGVyQ29sb3Igc3Ryb2tlIHN0cm9rZS1jb2xvciBzdHJva2VDb2xvclwiLG1hcmtlcjpcIm1hcmtlcnMgbWFya2VyIHNoYXBlXCIscmFuZ2U6XCJyYW5nZSBkYXRhQm94IGRhdGFib3hcIix2aWV3cG9ydDpcInZpZXdwb3J0IHZpZXdQb3J0IHZpZXdCb3ggdmlld2JveFwiLG9wYWNpdHk6XCJvcGFjaXR5IGFscGhhIHRyYW5zcGFyZW5jeVwiLGJvdW5kczpcImJvdW5kIGJvdW5kcyBib3VuZGFyaWVzIGxpbWl0c1wiLHRvb01hbnlDb2xvcnM6XCJ0b29NYW55Q29sb3JzIHBhbGV0dGUgcGFsZXR0ZU1vZGUgb3B0aW1pemVQYWxldHRlIGVuYWJsZVBhbGV0dGVcIn0pKS5wb3NpdGlvbnMmJihlLnBvc2l0aW9ucz1bXSksbnVsbCE9ZS50b29NYW55Q29sb3JzJiYodC50b29NYW55Q29sb3JzPWUudG9vTWFueUNvbG9ycyksbnx8KGlbcl09bj17aWQ6cixzY2FsZTpudWxsLHRyYW5zbGF0ZTpudWxsLHNjYWxlRnJhY3Q6bnVsbCx0cmFuc2xhdGVGcmFjdDpudWxsLGFjdGl2YXRpb246W10sc2VsZWN0aW9uQnVmZmVyOnMuYnVmZmVyKHtkYXRhOm5ldyBVaW50OEFycmF5KDApLHVzYWdlOlwic3RyZWFtXCIsdHlwZTpcInVpbnQ4XCJ9KSxzaXplQnVmZmVyOnMuYnVmZmVyKHtkYXRhOm5ldyBVaW50OEFycmF5KDApLHVzYWdlOlwiZHluYW1pY1wiLHR5cGU6XCJ1aW50OFwifSksY29sb3JCdWZmZXI6cy5idWZmZXIoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMCksdXNhZ2U6XCJkeW5hbWljXCIsdHlwZTpcInVpbnQ4XCJ9KSxwb3NpdGlvbkJ1ZmZlcjpzLmJ1ZmZlcih7ZGF0YTpuZXcgVWludDhBcnJheSgwKSx1c2FnZTpcImR5bmFtaWNcIix0eXBlOlwiZmxvYXRcIn0pLHBvc2l0aW9uRnJhY3RCdWZmZXI6cy5idWZmZXIoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMCksdXNhZ2U6XCJkeW5hbWljXCIsdHlwZTpcImZsb2F0XCJ9KX0sZT1jKHt9LHkuZGVmYXVsdHMsZSkpLCFlLnBvc2l0aW9uc3x8XCJtYXJrZXJcImluIGV8fChlLm1hcmtlcj1uLm1hcmtlcixkZWxldGUgbi5tYXJrZXIpLCFlLm1hcmtlcnx8XCJwb3NpdGlvbnNcImluIGV8fChlLnBvc2l0aW9ucz1uLnBvc2l0aW9ucyxkZWxldGUgbi5wb3NpdGlvbnMpO3ZhciB4PTAsYj0wO2lmKGYobixlLFt7c25hcDohMCxzaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PXQmJih0PXkuZGVmYXVsdHMuc2l6ZSkseCs9dCYmdC5sZW5ndGg/MTowLHR9LGJvcmRlclNpemU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dCYmKHQ9eS5kZWZhdWx0cy5ib3JkZXJTaXplKSx4Kz10JiZ0Lmxlbmd0aD8xOjAsdH0sb3BhY2l0eTpwYXJzZUZsb2F0LGNvbG9yOmZ1bmN0aW9uKGUscil7cmV0dXJuIG51bGw9PWUmJihlPXkuZGVmYXVsdHMuY29sb3IpLGU9dC51cGRhdGVDb2xvcihlKSxiKyssZX0sYm9yZGVyQ29sb3I6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gbnVsbD09ZSYmKGU9eS5kZWZhdWx0cy5ib3JkZXJDb2xvciksZT10LnVwZGF0ZUNvbG9yKGUpLGIrKyxlfSxib3VuZHM6ZnVuY3Rpb24odCxlLHIpe3JldHVyblwicmFuZ2VcImluIHJ8fChyLnJhbmdlPW51bGwpLHR9LHBvc2l0aW9uczpmdW5jdGlvbih0LGUscil7dmFyIG49ZS5zbmFwLGk9ZS5wb3NpdGlvbkJ1ZmZlcixhPWUucG9zaXRpb25GcmFjdEJ1ZmZlcixjPWUuc2VsZWN0aW9uQnVmZmVyO2lmKHQueHx8dC55KXJldHVybiB0LngubGVuZ3RoP2UueEF0dHI9e2J1ZmZlcjpzLmJ1ZmZlcih0LngpLG9mZnNldDowLHN0cmlkZTo0LGNvdW50OnQueC5sZW5ndGh9OmUueEF0dHI9e2J1ZmZlcjp0LnguYnVmZmVyLG9mZnNldDo0KnQueC5vZmZzZXR8fDAsc3RyaWRlOjQqKHQueC5zdHJpZGV8fDEpLGNvdW50OnQueC5jb3VudH0sdC55Lmxlbmd0aD9lLnlBdHRyPXtidWZmZXI6cy5idWZmZXIodC55KSxvZmZzZXQ6MCxzdHJpZGU6NCxjb3VudDp0LnkubGVuZ3RofTplLnlBdHRyPXtidWZmZXI6dC55LmJ1ZmZlcixvZmZzZXQ6NCp0Lnkub2Zmc2V0fHwwLHN0cmlkZTo0Kih0Lnkuc3RyaWRlfHwxKSxjb3VudDp0LnkuY291bnR9LGUuY291bnQ9TWF0aC5tYXgoZS54QXR0ci5jb3VudCxlLnlBdHRyLmNvdW50KSx0O3Q9cCh0LFwiZmxvYXQ2NFwiKTt2YXIgdT1lLmNvdW50PU1hdGguZmxvb3IodC5sZW5ndGgvMiksaD1lLmJvdW5kcz11P28odCwyKTpudWxsO2lmKHIucmFuZ2V8fGUucmFuZ2V8fChkZWxldGUgZS5yYW5nZSxyLnJhbmdlPWgpLHIubWFya2VyfHxlLm1hcmtlcnx8KGRlbGV0ZSBlLm1hcmtlcixyLm1hcmtlcj1udWxsKSxuJiYoITA9PT1ufHx1Pm4pP2UudHJlZT1sKHQse2JvdW5kczpofSk6biYmbi5sZW5ndGgmJihlLnRyZWU9biksZS50cmVlKXt2YXIgZj17cHJpbWl0aXZlOlwicG9pbnRzXCIsdXNhZ2U6XCJzdGF0aWNcIixkYXRhOmUudHJlZSx0eXBlOlwidWludDMyXCJ9O2UuZWxlbWVudHM/ZS5lbGVtZW50cyhmKTplLmVsZW1lbnRzPXMuZWxlbWVudHMoZil9cmV0dXJuIGkoe2RhdGE6Zy5mbG9hdCh0KSx1c2FnZTpcImR5bmFtaWNcIn0pLGEoe2RhdGE6Zy5mcmFjdCh0KSx1c2FnZTpcImR5bmFtaWNcIn0pLGMoe2RhdGE6bmV3IFVpbnQ4QXJyYXkodSksdHlwZTpcInVpbnQ4XCIsdXNhZ2U6XCJzdHJlYW1cIn0pLHR9fSx7bWFya2VyOmZ1bmN0aW9uKGUscixuKXt2YXIgaT1yLmFjdGl2YXRpb247aWYoaS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0LmRlc3Ryb3kmJnQuZGVzdHJveSgpfSksaS5sZW5ndGg9MCxlJiZcIm51bWJlclwiIT10eXBlb2YgZVswXSl7Zm9yKHZhciBhPVtdLG89MCxsPU1hdGgubWluKGUubGVuZ3RoLHIuY291bnQpO288bDtvKyspe3ZhciBjPXQuYWRkTWFya2VyKGVbb10pO2FbY118fChhW2NdPW5ldyBVaW50OEFycmF5KHIuY291bnQpKSxhW2NdW29dPTF9Zm9yKHZhciB1PTA7dTxhLmxlbmd0aDt1KyspaWYoYVt1XSl7dmFyIGg9e2RhdGE6YVt1XSx0eXBlOlwidWludDhcIix1c2FnZTpcInN0YXRpY1wifTtpW3VdP2lbdV0oaCk6aVt1XT1zLmJ1ZmZlcihoKSxpW3VdLmRhdGE9YVt1XX19ZWxzZXtpW3QuYWRkTWFya2VyKGUpXT0hMH1yZXR1cm4gZX0scmFuZ2U6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuYm91bmRzO2lmKG4pcmV0dXJuIHR8fCh0PW4pLGUuc2NhbGU9WzEvKHRbMl0tdFswXSksMS8odFszXS10WzFdKV0sZS50cmFuc2xhdGU9Wy10WzBdLC10WzFdXSxlLnNjYWxlRnJhY3Q9Zy5mcmFjdChlLnNjYWxlKSxlLnRyYW5zbGF0ZUZyYWN0PWcuZnJhY3QoZS50cmFuc2xhdGUpLHR9LHZpZXdwb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB2KHR8fFthLmRyYXdpbmdCdWZmZXJXaWR0aCxhLmRyYXdpbmdCdWZmZXJIZWlnaHRdKX19XSkseCl7dmFyIF89bix3PV8uY291bnQsaz1fLnNpemUsQT1fLmJvcmRlclNpemUsVD1fLnNpemVCdWZmZXIsTT1uZXcgVWludDhBcnJheSgyKncpO2lmKGsubGVuZ3RofHxBLmxlbmd0aClmb3IodmFyIFM9MDtTPHc7UysrKU1bMipTXT1NYXRoLnJvdW5kKDI1NSoobnVsbD09a1tTXT9rOmtbU10pL3UpLE1bMipTKzFdPU1hdGgucm91bmQoMjU1KihudWxsPT1BW1NdP0E6QVtTXSkvdSk7VCh7ZGF0YTpNLHVzYWdlOlwiZHluYW1pY1wifSl9aWYoYil7dmFyIEUsQz1uLEw9Qy5jb3VudCx6PUMuY29sb3IsTz1DLmJvcmRlckNvbG9yLEk9Qy5jb2xvckJ1ZmZlcjtpZih0LnRvb01hbnlDb2xvcnMpe2lmKHoubGVuZ3RofHxPLmxlbmd0aCl7RT1uZXcgVWludDhBcnJheSg4KkwpO2Zvcih2YXIgRD0wO0Q8TDtEKyspe3ZhciBQPXpbRF07RVs4KkRdPW1bNCpQXSxFWzgqRCsxXT1tWzQqUCsxXSxFWzgqRCsyXT1tWzQqUCsyXSxFWzgqRCszXT1tWzQqUCszXTt2YXIgUj1PW0RdO0VbOCpEKzRdPW1bNCpSXSxFWzgqRCs1XT1tWzQqUisxXSxFWzgqRCs2XT1tWzQqUisyXSxFWzgqRCs3XT1tWzQqUiszXX19fWVsc2UgaWYoei5sZW5ndGh8fE8ubGVuZ3RoKXtFPW5ldyBVaW50OEFycmF5KDQqTCsyKTtmb3IodmFyIEY9MDtGPEw7RisrKW51bGwhPXpbRl0mJihFWzQqRl09eltGXSVkLEVbNCpGKzFdPU1hdGguZmxvb3IoeltGXS9kKSksbnVsbCE9T1tGXSYmKEVbNCpGKzJdPU9bRl0lZCxFWzQqRiszXT1NYXRoLmZsb29yKE9bRl0vZCkpfUkoe2RhdGE6RXx8bmV3IFVpbnQ4QXJyYXkoMCksdHlwZTpcInVpbnQ4XCIsdXNhZ2U6XCJkeW5hbWljXCJ9KX1yZXR1cm4gbn0pfX0seS5wcm90b3R5cGUuYWRkTWFya2VyPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5tYXJrZXJUZXh0dXJlcyxuPXRoaXMucmVnbCxpPXRoaXMubWFya2VyQ2FjaGUsYT1udWxsPT10PzA6aS5pbmRleE9mKHQpO2lmKGE+PTApcmV0dXJuIGE7aWYodCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSllPXQ7ZWxzZXtlPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoKTtmb3IodmFyIG89MCxzPXQubGVuZ3RoO288cztvKyspZVtvXT0yNTUqdFtvXX12YXIgbD1NYXRoLmZsb29yKE1hdGguc3FydChlLmxlbmd0aCkpO3JldHVybiBhPXIubGVuZ3RoLGkucHVzaCh0KSxyLnB1c2gobi50ZXh0dXJlKHtjaGFubmVsczoxLGRhdGE6ZSxyYWRpdXM6bCxtYWc6XCJsaW5lYXJcIixtaW46XCJsaW5lYXJcIn0pKSxhfSx5LnByb3RvdHlwZS51cGRhdGVDb2xvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnBhbGV0dGVJZHMscj10aGlzLnBhbGV0dGUsbj10aGlzLm1heENvbG9ycztBcnJheS5pc0FycmF5KHQpfHwodD1bdF0pO3ZhciBpPVtdO2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0WzBdKXt2YXIgbz1bXTtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgbD0wO2w8dC5sZW5ndGg7bCs9NClvLnB1c2godC5zbGljZShsLGwrNCkpO2Vsc2UgZm9yKHZhciBjPTA7Yzx0Lmxlbmd0aDtjKz00KW8ucHVzaCh0LnN1YmFycmF5KGMsYys0KSk7dD1vfWZvcih2YXIgdT0wO3U8dC5sZW5ndGg7dSsrKXt2YXIgaD10W3VdO2g9YShoLFwidWludDhcIik7dmFyIGY9cyhoLCExKTtpZihudWxsPT1lW2ZdKXt2YXIgcD1yLmxlbmd0aDtlW2ZdPU1hdGguZmxvb3IocC80KSxyW3BdPWhbMF0scltwKzFdPWhbMV0scltwKzJdPWhbMl0scltwKzNdPWhbM119aVt1XT1lW2ZdfXJldHVybiF0aGlzLnRvb01hbnlDb2xvcnMmJnIubGVuZ3RoPjQqbiYmKHRoaXMudG9vTWFueUNvbG9ycz0hMCksdGhpcy51cGRhdGVQYWxldHRlKHIpLDE9PT1pLmxlbmd0aD9pWzBdOml9LHkucHJvdG90eXBlLnVwZGF0ZVBhbGV0dGU9ZnVuY3Rpb24odCl7aWYoIXRoaXMudG9vTWFueUNvbG9ycyl7dmFyIGU9dGhpcy5tYXhDb2xvcnMscj10aGlzLnBhbGV0dGVUZXh0dXJlLG49TWF0aC5jZWlsKC4yNSp0Lmxlbmd0aC9lKTtpZihuPjEpZm9yKHZhciBpPS4yNSoodD10LnNsaWNlKCkpLmxlbmd0aCVlO2k8biplO2krKyl0LnB1c2goMCwwLDAsMCk7ci5oZWlnaHQ8biYmci5yZXNpemUoZSxuKSxyLnN1YmltYWdlKHt3aWR0aDpNYXRoLm1pbiguMjUqdC5sZW5ndGgsZSksaGVpZ2h0Om4sZGF0YTp0fSwwLDApfX0seS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyb3Vwcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc2l6ZUJ1ZmZlci5kZXN0cm95KCksdC5wb3NpdGlvbkJ1ZmZlci5kZXN0cm95KCksdC5wb3NpdGlvbkZyYWN0QnVmZmVyLmRlc3Ryb3koKSx0LmNvbG9yQnVmZmVyLmRlc3Ryb3koKSx0LmFjdGl2YXRpb24uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5kZXN0cm95JiZ0LmRlc3Ryb3koKX0pLHQuc2VsZWN0aW9uQnVmZmVyLmRlc3Ryb3koKSx0LmVsZW1lbnRzJiZ0LmVsZW1lbnRzLmRlc3Ryb3koKX0pLHRoaXMuZ3JvdXBzLmxlbmd0aD0wLHRoaXMucGFsZXR0ZVRleHR1cmUuZGVzdHJveSgpLHRoaXMubWFya2VyVGV4dHVyZXMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5kZXN0cm95JiZ0LmRlc3Ryb3koKX0pLHRoaXN9O3ZhciB4PXQoXCJvYmplY3QtYXNzaWduXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBtKHQsZSksbj1yLnJlbmRlci5iaW5kKHIpO3JldHVybiB4KG4se3JlbmRlcjpuLHVwZGF0ZTpyLnVwZGF0ZS5iaW5kKHIpLGRyYXc6ci5kcmF3LmJpbmQociksZGVzdHJveTpyLmRlc3Ryb3kuYmluZChyKSxyZWdsOnIucmVnbCxnbDpyLmdsLGNhbnZhczpyLmdsLmNhbnZhcyxncm91cHM6ci5ncm91cHMsbWFya2VyczpyLm1hcmtlckNhY2hlLHBhbGV0dGU6ci5wYWxldHRlfSksbn19LHtcImFycmF5LWJvdW5kc1wiOjU2LFwiY29sb3ItaWRcIjoxMDksXCJjb2xvci1ub3JtYWxpemVcIjoxMTEsXCJmbGF0dGVuLXZlcnRleC1kYXRhXCI6MjI0LGdsc2xpZnk6NDAyLFwiaXMtaWV4cGxvcmVyXCI6NDEyLFwib2JqZWN0LWFzc2lnblwiOjQ0NyxcInBhcnNlLXJlY3RcIjo0NTIsXCJwaWNrLWJ5LWFsaWFzXCI6NDU4LFwicG9pbnQtY2x1c3RlclwiOjQ2MixcInRvLWZsb2F0MzJcIjo1MjMsXCJ1cGRhdGUtZGlmZlwiOjUzNH1dLDQ4NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJyZWdsLXNjYXR0ZXIyZFwiKSxpPXQoXCJwaWNrLWJ5LWFsaWFzXCIpLGE9dChcImFycmF5LWJvdW5kc1wiKSxvPXQoXCJyYWZcIikscz10KFwiYXJyYXktcmFuZ2VcIiksbD10KFwicGFyc2UtcmVjdFwiKSxjPXQoXCJmbGF0dGVuLXZlcnRleC1kYXRhXCIpO2Z1bmN0aW9uIHUodCxlKXtpZighKHRoaXMgaW5zdGFuY2VvZiB1KSlyZXR1cm4gbmV3IHUodCxlKTt0aGlzLnRyYWNlcz1bXSx0aGlzLnBhc3Nlcz17fSx0aGlzLnJlZ2w9dCx0aGlzLnNjYXR0ZXI9bih0KSx0aGlzLmNhbnZhcz10aGlzLnNjYXR0ZXIuY2FudmFzfWZ1bmN0aW9uIGgodCxlLHIpe3JldHVybihudWxsIT10LmlkP3QuaWQ6dCk8PDE2fCgyNTUmZSk8PDh8MjU1JnJ9ZnVuY3Rpb24gZih0LGUscil7dmFyIG4saSxhLG8scz10W2VdLGw9dFtyXTtyZXR1cm4gcy5sZW5ndGg+Mj8oc1swXSxzWzJdLG49c1sxXSxpPXNbM10pOnMubGVuZ3RoPyhuPXNbMF0saT1zWzFdKToocy54LG49cy55LHMueCtzLndpZHRoLGk9cy55K3MuaGVpZ2h0KSxsLmxlbmd0aD4yPyhhPWxbMF0sbz1sWzJdLGxbMV0sbFszXSk6bC5sZW5ndGg/KGE9bFswXSxvPWxbMV0pOihhPWwueCxsLnksbz1sLngrbC53aWR0aCxsLnkrbC5oZWlnaHQpLFthLG4sbyxpXX1mdW5jdGlvbiBwKHQpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXJldHVyblt0LHQsdCx0XTtpZigyPT09dC5sZW5ndGgpcmV0dXJuW3RbMF0sdFsxXSx0WzBdLHRbMV1dO3ZhciBlPWwodCk7cmV0dXJuW2UueCxlLnksZS54K2Uud2lkdGgsZS55K2UuaGVpZ2h0XX1lLmV4cG9ydHM9dSx1LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT10aGlzLHI9W10sbj1hcmd1bWVudHMubGVuZ3RoO24tLTspcltuXT1hcmd1bWVudHNbbl07cmV0dXJuIHIubGVuZ3RoJiYodD10aGlzKS51cGRhdGUuYXBwbHkodCxyKSx0aGlzLnJlZ2wuYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI/dGhpcy5kcmF3KCk6KHRoaXMuZGlydHk/bnVsbD09dGhpcy5wbGFubmVkJiYodGhpcy5wbGFubmVkPW8oZnVuY3Rpb24oKXtlLmRyYXcoKSxlLmRpcnR5PSEwLGUucGxhbm5lZD1udWxsfSkpOih0aGlzLmRyYXcoKSx0aGlzLmRpcnR5PSEwLG8oZnVuY3Rpb24oKXtlLmRpcnR5PSExfSkpLHRoaXMpfSx1LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGg7ci0tOyllW3JdPWFyZ3VtZW50c1tyXTtpZihlLmxlbmd0aCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdGhpcy51cGRhdGVJdGVtKG4sZVtuXSk7dGhpcy50cmFjZXM9dGhpcy50cmFjZXMuZmlsdGVyKEJvb2xlYW4pO2Zvcih2YXIgaT1bXSxhPTAsbz0wO288dGhpcy50cmFjZXMubGVuZ3RoO28rKyl7Zm9yKHZhciBzPXRoaXMudHJhY2VzW29dLGw9dGhpcy50cmFjZXNbb10ucGFzc2VzLGM9MDtjPGwubGVuZ3RoO2MrKylpLnB1c2godGhpcy5wYXNzZXNbbFtjXV0pO3MucGFzc09mZnNldD1hLGErPXMucGFzc2VzLmxlbmd0aH1yZXR1cm4odD10aGlzLnNjYXR0ZXIpLnVwZGF0ZS5hcHBseSh0LGkpLHRoaXN9fSx1LnByb3RvdHlwZS51cGRhdGVJdGVtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5yZWdsO2lmKG51bGw9PT1lKXJldHVybiB0aGlzLnRyYWNlc1t0XT1udWxsLHRoaXM7aWYoIWUpcmV0dXJuIHRoaXM7dmFyIG4sbz1pKGUse2RhdGE6XCJkYXRhIGl0ZW1zIGNvbHVtbnMgcm93cyB2YWx1ZXMgZGltZW5zaW9ucyBzYW1wbGVzIHhcIixzbmFwOlwic25hcCBjbHVzdGVyXCIsc2l6ZTpcInNpemVzIHNpemUgcmFkaXVzXCIsY29sb3I6XCJjb2xvcnMgY29sb3IgZmlsbCBmaWxsLWNvbG9yIGZpbGxDb2xvclwiLG9wYWNpdHk6XCJvcGFjaXR5IGFscGhhIHRyYW5zcGFyZW5jeSBvcGFxdWVcIixib3JkZXJTaXplOlwiYm9yZGVyU2l6ZXMgYm9yZGVyU2l6ZSBib3JkZXItc2l6ZSBib3JkZXJzaXplIGJvcmRlcldpZHRoIGJvcmRlcldpZHRocyBib3JkZXItd2lkdGggYm9yZGVyd2lkdGggc3Ryb2tlLXdpZHRoIHN0cm9rZVdpZHRoIHN0cm9rZXdpZHRoIG91dGxpbmVcIixib3JkZXJDb2xvcjpcImJvcmRlckNvbG9ycyBib3JkZXJDb2xvciBib3JkZXJjb2xvciBzdHJva2Ugc3Ryb2tlLWNvbG9yIHN0cm9rZUNvbG9yXCIsbWFya2VyOlwibWFya2VycyBtYXJrZXIgc2hhcGVcIixyYW5nZTpcInJhbmdlIHJhbmdlcyBkYXRhYm94IGRhdGFCb3hcIix2aWV3cG9ydDpcInZpZXdwb3J0IHZpZXdCb3ggdmlld2JveFwiLGRvbWFpbjpcImRvbWFpbiBkb21haW5zIGFyZWEgYXJlYXNcIixwYWRkaW5nOlwicGFkIHBhZGRpbmcgcGFkZGluZ3MgcGFkcyBtYXJnaW4gbWFyZ2luc1wiLHRyYW5zcG9zZTpcInRyYW5zcG9zZSB0cmFuc3Bvc2VkXCIsZGlhZ29uYWw6XCJkaWFnb25hbCBkaWFnIHNob3dEaWFnb25hbFwiLHVwcGVyOlwidXBwZXIgdXAgdG9wIHVwcGVyaGFsZiB1cHBlckhhbGYgc2hvd3VwcGVyaGFsZiBzaG93VXBwZXIgc2hvd1VwcGVySGFsZlwiLGxvd2VyOlwibG93ZXIgbG93IGJvdHRvbSBsb3dlcmhhbGYgbG93ZXJIYWxmIHNob3dsb3dlcmhhbGYgc2hvd0xvd2VySGFsZiBzaG93TG93ZXJcIn0pLHM9dGhpcy50cmFjZXNbdF18fCh0aGlzLnRyYWNlc1t0XT17aWQ6dCxidWZmZXI6ci5idWZmZXIoe3VzYWdlOlwiZHluYW1pY1wiLHR5cGU6XCJmbG9hdFwiLGRhdGE6bmV3IFVpbnQ4QXJyYXl9KSxjb2xvcjpcImJsYWNrXCIsbWFya2VyOm51bGwsc2l6ZToxMixib3JkZXJDb2xvcjpcInRyYW5zcGFyZW50XCIsYm9yZGVyU2l6ZToxLHZpZXdwb3J0OmwoW3IuX2dsLmRyYXdpbmdCdWZmZXJXaWR0aCxyLl9nbC5kcmF3aW5nQnVmZmVySGVpZ2h0XSkscGFkZGluZzpbMCwwLDAsMF0sb3BhY2l0eToxLGRpYWdvbmFsOiEwLHVwcGVyOiEwLGxvd2VyOiEwfSk7aWYobnVsbCE9by5jb2xvciYmKHMuY29sb3I9by5jb2xvciksbnVsbCE9by5zaXplJiYocy5zaXplPW8uc2l6ZSksbnVsbCE9by5tYXJrZXImJihzLm1hcmtlcj1vLm1hcmtlciksbnVsbCE9by5ib3JkZXJDb2xvciYmKHMuYm9yZGVyQ29sb3I9by5ib3JkZXJDb2xvciksbnVsbCE9by5ib3JkZXJTaXplJiYocy5ib3JkZXJTaXplPW8uYm9yZGVyU2l6ZSksbnVsbCE9by5vcGFjaXR5JiYocy5vcGFjaXR5PW8ub3BhY2l0eSksby52aWV3cG9ydCYmKHMudmlld3BvcnQ9bChvLnZpZXdwb3J0KSksbnVsbCE9by5kaWFnb25hbCYmKHMuZGlhZ29uYWw9by5kaWFnb25hbCksbnVsbCE9by51cHBlciYmKHMudXBwZXI9by51cHBlciksbnVsbCE9by5sb3dlciYmKHMubG93ZXI9by5sb3dlciksby5kYXRhKXtzLmJ1ZmZlcihjKG8uZGF0YSkpLHMuY29sdW1ucz1vLmRhdGEubGVuZ3RoLHMuY291bnQ9by5kYXRhWzBdLmxlbmd0aCxzLmJvdW5kcz1bXTtmb3IodmFyIHU9MDt1PHMuY29sdW1uczt1Kyspcy5ib3VuZHNbdV09YShvLmRhdGFbdV0sMSl9by5yYW5nZSYmKHMucmFuZ2U9by5yYW5nZSxuPXMucmFuZ2UmJlwibnVtYmVyXCIhPXR5cGVvZiBzLnJhbmdlWzBdKSxvLmRvbWFpbiYmKHMuZG9tYWluPW8uZG9tYWluKTt2YXIgZD0hMTtudWxsIT1vLnBhZGRpbmcmJihBcnJheS5pc0FycmF5KG8ucGFkZGluZykmJm8ucGFkZGluZy5sZW5ndGg9PT1zLmNvbHVtbnMmJlwibnVtYmVyXCI9PXR5cGVvZiBvLnBhZGRpbmdbby5wYWRkaW5nLmxlbmd0aC0xXT8ocy5wYWRkaW5nPW8ucGFkZGluZy5tYXAocCksZD0hMCk6cy5wYWRkaW5nPXAoby5wYWRkaW5nKSk7dmFyIGc9cy5jb2x1bW5zLHY9cy5jb3VudCxtPXMudmlld3BvcnQud2lkdGgseT1zLnZpZXdwb3J0LmhlaWdodCx4PXMudmlld3BvcnQueCxiPXMudmlld3BvcnQueSxfPW0vZyx3PXkvZztzLnBhc3Nlcz1bXTtmb3IodmFyIGs9MDtrPGc7aysrKWZvcih2YXIgQT0wO0E8ZztBKyspaWYoKHMuZGlhZ29uYWx8fEEhPT1rKSYmKHMudXBwZXJ8fCEoaz5BKSkmJihzLmxvd2VyfHwhKGs8QSkpKXt2YXIgVD1oKHMuaWQsayxBKSxNPXRoaXMucGFzc2VzW1RdfHwodGhpcy5wYXNzZXNbVF09e30pO2lmKG8uZGF0YSYmKG8udHJhbnNwb3NlP00ucG9zaXRpb25zPXt4OntidWZmZXI6cy5idWZmZXIsb2Zmc2V0OkEsY291bnQ6dixzdHJpZGU6Z30seTp7YnVmZmVyOnMuYnVmZmVyLG9mZnNldDprLGNvdW50OnYsc3RyaWRlOmd9fTpNLnBvc2l0aW9ucz17eDp7YnVmZmVyOnMuYnVmZmVyLG9mZnNldDpBKnYsY291bnQ6dn0seTp7YnVmZmVyOnMuYnVmZmVyLG9mZnNldDprKnYsY291bnQ6dn19LE0uYm91bmRzPWYocy5ib3VuZHMsayxBKSksby5kb21haW58fG8udmlld3BvcnR8fG8uZGF0YSl7dmFyIFM9ZD9mKHMucGFkZGluZyxrLEEpOnMucGFkZGluZztpZihzLmRvbWFpbil7dmFyIEU9ZihzLmRvbWFpbixrLEEpLEM9RVswXSxMPUVbMV0sej1FWzJdLE89RVszXTtNLnZpZXdwb3J0PVt4K0MqbStTWzBdLGIrTCp5K1NbMV0seCt6Km0tU1syXSxiK08qeS1TWzNdXX1lbHNlIE0udmlld3BvcnQ9W3grQSpfK18qU1swXSxiK2sqdyt3KlNbMV0seCsoQSsxKSpfLV8qU1syXSxiKyhrKzEpKnctdypTWzNdXX1vLmNvbG9yJiYoTS5jb2xvcj1zLmNvbG9yKSxvLnNpemUmJihNLnNpemU9cy5zaXplKSxvLm1hcmtlciYmKE0ubWFya2VyPXMubWFya2VyKSxvLmJvcmRlclNpemUmJihNLmJvcmRlclNpemU9cy5ib3JkZXJTaXplKSxvLmJvcmRlckNvbG9yJiYoTS5ib3JkZXJDb2xvcj1zLmJvcmRlckNvbG9yKSxvLm9wYWNpdHkmJihNLm9wYWNpdHk9cy5vcGFjaXR5KSxvLnJhbmdlJiYoTS5yYW5nZT1uP2Yocy5yYW5nZSxrLEEpOnMucmFuZ2V8fE0uYm91bmRzKSxzLnBhc3Nlcy5wdXNoKFQpfXJldHVybiB0aGlzfSx1LnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9W10scj1hcmd1bWVudHMubGVuZ3RoO3ItLTspZVtyXT1hcmd1bWVudHNbcl07aWYoZS5sZW5ndGgpe2Zvcih2YXIgbj1bXSxpPTA7aTxlLmxlbmd0aDtpKyspaWYoXCJudW1iZXJcIj09dHlwZW9mIGVbaV0pe3ZhciBhPXRoaXMudHJhY2VzW2VbaV1dLG89YS5wYXNzZXMsbD1hLnBhc3NPZmZzZXQ7bi5wdXNoLmFwcGx5KG4scyhsLGwrby5sZW5ndGgpKX1lbHNlIGlmKGVbaV0ubGVuZ3RoKXt2YXIgYz1lW2ldLHU9dGhpcy50cmFjZXNbaV0saD11LnBhc3NlcyxmPXUucGFzc09mZnNldDtoPWgubWFwKGZ1bmN0aW9uKHQsZSl7bltmK2VdPWN9KX0odD10aGlzLnNjYXR0ZXIpLmRyYXcuYXBwbHkodCxuKX1lbHNlIHRoaXMuc2NhdHRlci5kcmF3KCk7cmV0dXJuIHRoaXN9LHUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFjZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LmJ1ZmZlciYmdC5idWZmZXIuZGVzdHJveSYmdC5idWZmZXIuZGVzdHJveSgpfSksdGhpcy50cmFjZXM9bnVsbCx0aGlzLnBhc3Nlcz1udWxsLHRoaXMuc2NhdHRlci5kZXN0cm95KCksdGhpc319LHtcImFycmF5LWJvdW5kc1wiOjU2LFwiYXJyYXktcmFuZ2VcIjo1OCxcImZsYXR0ZW4tdmVydGV4LWRhdGFcIjoyMjQsXCJwYXJzZS1yZWN0XCI6NDUyLFwicGljay1ieS1hbGlhc1wiOjQ1OCxyYWY6NDc3LFwicmVnbC1zY2F0dGVyMmRcIjo0ODV9XSw0ODc6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbixpO249dGhpcyxpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuaWQ9VisrLHRoaXMudHlwZT10LHRoaXMuZGF0YT1lfWZ1bmN0aW9uIGUodCl7cmV0dXJuXCJbXCIrZnVuY3Rpb24gdChlKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuW107dmFyIHI9ZS5jaGFyQXQoMCksbj1lLmNoYXJBdChlLmxlbmd0aC0xKTtpZigxPGUubGVuZ3RoJiZyPT09biYmKCdcIic9PT1yfHxcIidcIj09PXIpKXJldHVyblsnXCInK2Uuc3Vic3RyKDEsZS5sZW5ndGgtMikucmVwbGFjZSgvXFxcXC9nLFwiXFxcXFxcXFxcIikucmVwbGFjZSgvXCIvZywnXFxcXFwiJykrJ1wiJ107aWYocj0vXFxbKGZhbHNlfHRydWV8bnVsbHxcXGQrfCdbXiddKid8XCJbXlwiXSpcIilcXF0vLmV4ZWMoZSkpcmV0dXJuIHQoZS5zdWJzdHIoMCxyLmluZGV4KSkuY29uY2F0KHQoclsxXSkpLmNvbmNhdCh0KGUuc3Vic3RyKHIuaW5kZXgrclswXS5sZW5ndGgpKSk7aWYoMT09PShyPWUuc3BsaXQoXCIuXCIpKS5sZW5ndGgpcmV0dXJuWydcIicrZS5yZXBsYWNlKC9cXFxcL2csXCJcXFxcXFxcXFwiKS5yZXBsYWNlKC9cIi9nLCdcXFxcXCInKSsnXCInXTtmb3IoZT1bXSxuPTA7bjxyLmxlbmd0aDsrK24pZT1lLmNvbmNhdCh0KHJbbl0pKTtyZXR1cm4gZX0odCkuam9pbihcIl1bXCIpK1wiXVwifWZ1bmN0aW9uIHIodCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQ/dC5zcGxpdCgpOnR9ZnVuY3Rpb24gbih0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpOnR9ZnVuY3Rpb24gaSh0KXt2YXIgZSxpLGEsbyxzPXR8fHt9O3Q9e307dmFyIGw9W10sYz1bXSx1PVwidW5kZWZpbmVkXCI9PXR5cGVvZiB3aW5kb3c/MTp3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyxoPSExLGY9ZnVuY3Rpb24odCl7fSxwPWZ1bmN0aW9uKCl7fTtpZihcInN0cmluZ1wiPT10eXBlb2Ygcz9lPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iocyk6XCJvYmplY3RcIj09dHlwZW9mIHMmJihcInN0cmluZ1wiPT10eXBlb2Ygcy5ub2RlTmFtZSYmXCJmdW5jdGlvblwiPT10eXBlb2Ygcy5hcHBlbmRDaGlsZCYmXCJmdW5jdGlvblwiPT10eXBlb2Ygcy5nZXRCb3VuZGluZ0NsaWVudFJlY3Q/ZT1zOlwiZnVuY3Rpb25cIj09dHlwZW9mIHMuZHJhd0FycmF5c3x8XCJmdW5jdGlvblwiPT10eXBlb2Ygcy5kcmF3RWxlbWVudHM/YT0obz1zKS5jYW52YXM6KFwiZ2xcImluIHM/bz1zLmdsOlwiY2FudmFzXCJpbiBzP2E9bihzLmNhbnZhcyk6XCJjb250YWluZXJcImluIHMmJihpPW4ocy5jb250YWluZXIpKSxcImF0dHJpYnV0ZXNcImluIHMmJih0PXMuYXR0cmlidXRlcyksXCJleHRlbnNpb25zXCJpbiBzJiYobD1yKHMuZXh0ZW5zaW9ucykpLFwib3B0aW9uYWxFeHRlbnNpb25zXCJpbiBzJiYoYz1yKHMub3B0aW9uYWxFeHRlbnNpb25zKSksXCJvbkRvbmVcImluIHMmJihmPXMub25Eb25lKSxcInByb2ZpbGVcImluIHMmJihoPSEhcy5wcm9maWxlKSxcInBpeGVsUmF0aW9cImluIHMmJih1PStzLnBpeGVsUmF0aW8pKSksZSYmKFwiY2FudmFzXCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/YT1lOmk9ZSksIW8pe2lmKCFhKXtpZighKGU9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXt2YXIgZT13aW5kb3cuaW5uZXJXaWR0aCxuPXdpbmRvdy5pbm5lckhlaWdodDt0IT09ZG9jdW1lbnQuYm9keSYmKGU9KG49dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSkucmlnaHQtbi5sZWZ0LG49bi5ib3R0b20tbi50b3ApLGkud2lkdGg9ciplLGkuaGVpZ2h0PXIqbixqKGkuc3R5bGUse3dpZHRoOmUrXCJweFwiLGhlaWdodDpuK1wicHhcIn0pfXZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7cmV0dXJuIGooaS5zdHlsZSx7Ym9yZGVyOjAsbWFyZ2luOjAscGFkZGluZzowLHRvcDowLGxlZnQ6MH0pLHQuYXBwZW5kQ2hpbGQoaSksdD09PWRvY3VtZW50LmJvZHkmJihpLnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixqKHQuc3R5bGUse21hcmdpbjowLHBhZGRpbmc6MH0pKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLG4sITEpLG4oKSx7Y2FudmFzOmksb25EZXN0cm95OmZ1bmN0aW9uKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIixuKSx0LnJlbW92ZUNoaWxkKGkpfX19KGl8fGRvY3VtZW50LmJvZHksMCx1KSkpcmV0dXJuIG51bGw7YT1lLmNhbnZhcyxwPWUub25EZXN0cm95fW89ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIpe3RyeXtyZXR1cm4gdC5nZXRDb250ZXh0KHIsZSl9Y2F0Y2godCl7cmV0dXJuIG51bGx9fXJldHVybiByKFwid2ViZ2xcIil8fHIoXCJleHBlcmltZW50YWwtd2ViZ2xcIil8fHIoXCJ3ZWJnbC1leHBlcmltZW50YWxcIil9KGEsdCl9cmV0dXJuIG8/e2dsOm8sY2FudmFzOmEsY29udGFpbmVyOmksZXh0ZW5zaW9uczpsLG9wdGlvbmFsRXh0ZW5zaW9uczpjLHBpeGVsUmF0aW86dSxwcm9maWxlOmgsb25Eb25lOmYsb25EZXN0cm95OnB9OihwKCksZihcIndlYmdsIG5vdCBzdXBwb3J0ZWQsIHRyeSB1cGdyYWRpbmcgeW91ciBicm93c2VyIG9yIGdyYXBoaWNzIGRyaXZlcnMgaHR0cDovL2dldC53ZWJnbC5vcmdcIiksbnVsbCl9ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj1BcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWUobik7cmV0dXJuIHJ9ZnVuY3Rpb24gbyh0KXt2YXIgZSxyO3JldHVybiBlPSg2NTUzNTx0KTw8NCxlfD1yPSgyNTU8KHQ+Pj49ZSkpPDwzLChlfD1yPSgxNTwodD4+Pj1yKSk8PDIpfChyPSgzPCh0Pj4+PXIpKTw8MSl8dD4+PnI+PjF9ZnVuY3Rpb24gcygpe2Z1bmN0aW9uIHQodCl7dDp7Zm9yKHZhciBlPTE2OzI2ODQzNTQ1Nj49ZTtlKj0xNilpZih0PD1lKXt0PWU7YnJlYWsgdH10PTB9cmV0dXJuIDA8KGU9cltvKHQpPj4yXSkubGVuZ3RoP2UucG9wKCk6bmV3IEFycmF5QnVmZmVyKHQpfWZ1bmN0aW9uIGUodCl7cltvKHQuYnl0ZUxlbmd0aCk+PjJdLnB1c2godCl9dmFyIHI9YSg4LGZ1bmN0aW9uKCl7cmV0dXJuW119KTtyZXR1cm57YWxsb2M6dCxmcmVlOmUsYWxsb2NUeXBlOmZ1bmN0aW9uKGUscil7dmFyIG49bnVsbDtzd2l0Y2goZSl7Y2FzZSA1MTIwOm49bmV3IEludDhBcnJheSh0KHIpLDAscik7YnJlYWs7Y2FzZSA1MTIxOm49bmV3IFVpbnQ4QXJyYXkodChyKSwwLHIpO2JyZWFrO2Nhc2UgNTEyMjpuPW5ldyBJbnQxNkFycmF5KHQoMipyKSwwLHIpO2JyZWFrO2Nhc2UgNTEyMzpuPW5ldyBVaW50MTZBcnJheSh0KDIqciksMCxyKTticmVhaztjYXNlIDUxMjQ6bj1uZXcgSW50MzJBcnJheSh0KDQqciksMCxyKTticmVhaztjYXNlIDUxMjU6bj1uZXcgVWludDMyQXJyYXkodCg0KnIpLDAscik7YnJlYWs7Y2FzZSA1MTI2Om49bmV3IEZsb2F0MzJBcnJheSh0KDQqciksMCxyKTticmVhaztkZWZhdWx0OnJldHVybiBudWxsfXJldHVybiBuLmxlbmd0aCE9PXI/bi5zdWJhcnJheSgwLHIpOm59LGZyZWVUeXBlOmZ1bmN0aW9uKHQpe2UodC5idWZmZXIpfX19ZnVuY3Rpb24gbCh0KXtyZXR1cm4hIXQmJlwib2JqZWN0XCI9PXR5cGVvZiB0JiZBcnJheS5pc0FycmF5KHQuc2hhcGUpJiZBcnJheS5pc0FycmF5KHQuc3RyaWRlKSYmXCJudW1iZXJcIj09dHlwZW9mIHQub2Zmc2V0JiZ0LnNoYXBlLmxlbmd0aD09PXQuc3RyaWRlLmxlbmd0aCYmKEFycmF5LmlzQXJyYXkodC5kYXRhKXx8Vyh0LmRhdGEpKX1mdW5jdGlvbiBjKHQsZSxyLG4saSxhKXtmb3IodmFyIG89MDtvPGU7KytvKWZvcih2YXIgcz10W29dLGw9MDtsPHI7KytsKWZvcih2YXIgYz1zW2xdLHU9MDt1PG47Kyt1KWlbYSsrXT1jW3VdfWZ1bmN0aW9uIHUodCl7cmV0dXJuIDB8JFtPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCldfWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoOysrcil0W3JdPWVbcl19ZnVuY3Rpb24gZih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9MCxsPTA7bDxyOysrbClmb3IodmFyIGM9MDtjPG47KytjKXRbcysrXT1lW2kqbCthKmMrb119ZnVuY3Rpb24gcCh0LGUscixuKXtmdW5jdGlvbiBpKGUpe3RoaXMuaWQ9YysrLHRoaXMuYnVmZmVyPXQuY3JlYXRlQnVmZmVyKCksdGhpcy50eXBlPWUsdGhpcy51c2FnZT0zNTA0NCx0aGlzLmJ5dGVMZW5ndGg9MCx0aGlzLmRpbWVuc2lvbj0xLHRoaXMuZHR5cGU9NTEyMSx0aGlzLnBlcnNpc3RlbnREYXRhPW51bGwsci5wcm9maWxlJiYodGhpcy5zdGF0cz17c2l6ZTowfSl9ZnVuY3Rpb24gYShlLHIsbil7ZS5ieXRlTGVuZ3RoPXIuYnl0ZUxlbmd0aCx0LmJ1ZmZlckRhdGEoZS50eXBlLHIsbil9ZnVuY3Rpb24gbyh0LGUscixuLGksbyl7aWYodC51c2FnZT1yLEFycmF5LmlzQXJyYXkoZSkpe2lmKHQuZHR5cGU9bnx8NTEyNiwwPGUubGVuZ3RoKWlmKEFycmF5LmlzQXJyYXkoZVswXSkpe2k9dHQoZSk7Zm9yKHZhciBzPW49MTtzPGkubGVuZ3RoOysrcyluKj1pW3NdO3QuZGltZW5zaW9uPW4sYSh0LGU9UShlLGksdC5kdHlwZSksciksbz90LnBlcnNpc3RlbnREYXRhPWU6Ry5mcmVlVHlwZShlKX1lbHNlXCJudW1iZXJcIj09dHlwZW9mIGVbMF0/KHQuZGltZW5zaW9uPWksaChpPUcuYWxsb2NUeXBlKHQuZHR5cGUsZS5sZW5ndGgpLGUpLGEodCxpLHIpLG8/dC5wZXJzaXN0ZW50RGF0YT1pOkcuZnJlZVR5cGUoaSkpOlcoZVswXSkmJih0LmRpbWVuc2lvbj1lWzBdLmxlbmd0aCx0LmR0eXBlPW58fHUoZVswXSl8fDUxMjYsYSh0LGU9UShlLFtlLmxlbmd0aCxlWzBdLmxlbmd0aF0sdC5kdHlwZSksciksbz90LnBlcnNpc3RlbnREYXRhPWU6Ry5mcmVlVHlwZShlKSl9ZWxzZSBpZihXKGUpKXQuZHR5cGU9bnx8dShlKSx0LmRpbWVuc2lvbj1pLGEodCxlLHIpLG8mJih0LnBlcnNpc3RlbnREYXRhPW5ldyBVaW50OEFycmF5KG5ldyBVaW50OEFycmF5KGUuYnVmZmVyKSkpO2Vsc2UgaWYobChlKSl7aT1lLnNoYXBlO3ZhciBjPWUuc3RyaWRlLHA9KHM9ZS5vZmZzZXQsMCksZD0wLGc9MCx2PTA7MT09PWkubGVuZ3RoPyhwPWlbMF0sZD0xLGc9Y1swXSx2PTApOjI9PT1pLmxlbmd0aCYmKHA9aVswXSxkPWlbMV0sZz1jWzBdLHY9Y1sxXSksdC5kdHlwZT1ufHx1KGUuZGF0YSl8fDUxMjYsdC5kaW1lbnNpb249ZCxmKGk9Ry5hbGxvY1R5cGUodC5kdHlwZSxwKmQpLGUuZGF0YSxwLGQsZyx2LHMpLGEodCxpLHIpLG8/dC5wZXJzaXN0ZW50RGF0YT1pOkcuZnJlZVR5cGUoaSl9fWZ1bmN0aW9uIHMocil7ZS5idWZmZXJDb3VudC0tO2Zvcih2YXIgaT0wO2k8bi5zdGF0ZS5sZW5ndGg7KytpKXt2YXIgYT1uLnN0YXRlW2ldO2EuYnVmZmVyPT09ciYmKHQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpLGEuYnVmZmVyPW51bGwpfXQuZGVsZXRlQnVmZmVyKHIuYnVmZmVyKSxyLmJ1ZmZlcj1udWxsLGRlbGV0ZSBwW3IuaWRdfXZhciBjPTAscD17fTtpLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7dC5iaW5kQnVmZmVyKHRoaXMudHlwZSx0aGlzLmJ1ZmZlcil9LGkucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtzKHRoaXMpfTt2YXIgZD1bXTtyZXR1cm4gci5wcm9maWxlJiYoZS5nZXRUb3RhbEJ1ZmZlclNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBPYmplY3Qua2V5cyhwKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QrPXBbZV0uc3RhdHMuc2l6ZX0pLHR9KSx7Y3JlYXRlOmZ1bmN0aW9uKG4sYSxjLGQpe2Z1bmN0aW9uIGcoZSl7dmFyIG49MzUwNDQsaT1udWxsLGE9MCxzPTAsYz0xO3JldHVybiBBcnJheS5pc0FycmF5KGUpfHxXKGUpfHxsKGUpP2k9ZTpcIm51bWJlclwiPT10eXBlb2YgZT9hPTB8ZTplJiYoXCJkYXRhXCJpbiBlJiYoaT1lLmRhdGEpLFwidXNhZ2VcImluIGUmJihuPUtbZS51c2FnZV0pLFwidHlwZVwiaW4gZSYmKHM9SltlLnR5cGVdKSxcImRpbWVuc2lvblwiaW4gZSYmKGM9MHxlLmRpbWVuc2lvbiksXCJsZW5ndGhcImluIGUmJihhPTB8ZS5sZW5ndGgpKSx2LmJpbmQoKSxpP28odixpLG4scyxjLGQpOihhJiZ0LmJ1ZmZlckRhdGEodi50eXBlLGEsbiksdi5kdHlwZT1zfHw1MTIxLHYudXNhZ2U9bix2LmRpbWVuc2lvbj1jLHYuYnl0ZUxlbmd0aD1hKSxyLnByb2ZpbGUmJih2LnN0YXRzLnNpemU9di5ieXRlTGVuZ3RoKmV0W3YuZHR5cGVdKSxnfWUuYnVmZmVyQ291bnQrKzt2YXIgdj1uZXcgaShhKTtyZXR1cm4gcFt2LmlkXT12LGN8fGcobiksZy5fcmVnbFR5cGU9XCJidWZmZXJcIixnLl9idWZmZXI9dixnLnN1YmRhdGE9ZnVuY3Rpb24oZSxyKXt2YXIgbixpPTB8KHJ8fDApO2lmKHYuYmluZCgpLFcoZSkpdC5idWZmZXJTdWJEYXRhKHYudHlwZSxpLGUpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlKSl7aWYoMDxlLmxlbmd0aClpZihcIm51bWJlclwiPT10eXBlb2YgZVswXSl7dmFyIGE9Ry5hbGxvY1R5cGUodi5kdHlwZSxlLmxlbmd0aCk7aChhLGUpLHQuYnVmZmVyU3ViRGF0YSh2LnR5cGUsaSxhKSxHLmZyZWVUeXBlKGEpfWVsc2UoQXJyYXkuaXNBcnJheShlWzBdKXx8VyhlWzBdKSkmJihuPXR0KGUpLGE9UShlLG4sdi5kdHlwZSksdC5idWZmZXJTdWJEYXRhKHYudHlwZSxpLGEpLEcuZnJlZVR5cGUoYSkpfWVsc2UgaWYobChlKSl7bj1lLnNoYXBlO3ZhciBvPWUuc3RyaWRlLHM9YT0wLGM9MCxwPTA7MT09PW4ubGVuZ3RoPyhhPW5bMF0scz0xLGM9b1swXSxwPTApOjI9PT1uLmxlbmd0aCYmKGE9blswXSxzPW5bMV0sYz1vWzBdLHA9b1sxXSksbj1BcnJheS5pc0FycmF5KGUuZGF0YSk/di5kdHlwZTp1KGUuZGF0YSksZihuPUcuYWxsb2NUeXBlKG4sYSpzKSxlLmRhdGEsYSxzLGMscCxlLm9mZnNldCksdC5idWZmZXJTdWJEYXRhKHYudHlwZSxpLG4pLEcuZnJlZVR5cGUobil9cmV0dXJuIGd9LHIucHJvZmlsZSYmKGcuc3RhdHM9di5zdGF0cyksZy5kZXN0cm95PWZ1bmN0aW9uKCl7cyh2KX0sZ30sY3JlYXRlU3RyZWFtOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZC5wb3AoKTtyZXR1cm4gcnx8KHI9bmV3IGkodCkpLHIuYmluZCgpLG8ocixlLDM1MDQwLDAsMSwhMSkscn0sZGVzdHJveVN0cmVhbTpmdW5jdGlvbih0KXtkLnB1c2godCl9LGNsZWFyOmZ1bmN0aW9uKCl7WChwKS5mb3JFYWNoKHMpLGQuZm9yRWFjaChzKX0sZ2V0QnVmZmVyOmZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Ll9idWZmZXIgaW5zdGFuY2VvZiBpP3QuX2J1ZmZlcjpudWxsfSxyZXN0b3JlOmZ1bmN0aW9uKCl7WChwKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuYnVmZmVyPXQuY3JlYXRlQnVmZmVyKCksdC5iaW5kQnVmZmVyKGUudHlwZSxlLmJ1ZmZlciksdC5idWZmZXJEYXRhKGUudHlwZSxlLnBlcnNpc3RlbnREYXRhfHxlLmJ5dGVMZW5ndGgsZS51c2FnZSl9KX0sX2luaXRCdWZmZXI6b319ZnVuY3Rpb24gZCh0LGUscixuKXtmdW5jdGlvbiBpKHQpe3RoaXMuaWQ9YysrLHNbdGhpcy5pZF09dGhpcyx0aGlzLmJ1ZmZlcj10LHRoaXMucHJpbVR5cGU9NCx0aGlzLnR5cGU9dGhpcy52ZXJ0Q291bnQ9MH1mdW5jdGlvbiBhKG4saSxhLG8scyxjLHUpe2lmKG4uYnVmZmVyLmJpbmQoKSxpKXt2YXIgaD11O3V8fFcoaSkmJighbChpKXx8VyhpLmRhdGEpKXx8KGg9ZS5vZXNfZWxlbWVudF9pbmRleF91aW50PzUxMjU6NTEyMyksci5faW5pdEJ1ZmZlcihuLmJ1ZmZlcixpLGEsaCwzKX1lbHNlIHQuYnVmZmVyRGF0YSgzNDk2MyxjLGEpLG4uYnVmZmVyLmR0eXBlPWh8fDUxMjEsbi5idWZmZXIudXNhZ2U9YSxuLmJ1ZmZlci5kaW1lbnNpb249MyxuLmJ1ZmZlci5ieXRlTGVuZ3RoPWM7aWYoaD11LCF1KXtzd2l0Y2gobi5idWZmZXIuZHR5cGUpe2Nhc2UgNTEyMTpjYXNlIDUxMjA6aD01MTIxO2JyZWFrO2Nhc2UgNTEyMzpjYXNlIDUxMjI6aD01MTIzO2JyZWFrO2Nhc2UgNTEyNTpjYXNlIDUxMjQ6aD01MTI1fW4uYnVmZmVyLmR0eXBlPWh9bi50eXBlPWgsMD4oaT1zKSYmKGk9bi5idWZmZXIuYnl0ZUxlbmd0aCw1MTIzPT09aD9pPj49MTo1MTI1PT09aCYmKGk+Pj0yKSksbi52ZXJ0Q291bnQ9aSxpPW8sMD5vJiYoaT00LDE9PT0obz1uLmJ1ZmZlci5kaW1lbnNpb24pJiYoaT0wKSwyPT09byYmKGk9MSksMz09PW8mJihpPTQpKSxuLnByaW1UeXBlPWl9ZnVuY3Rpb24gbyh0KXtuLmVsZW1lbnRzQ291bnQtLSxkZWxldGUgc1t0LmlkXSx0LmJ1ZmZlci5kZXN0cm95KCksdC5idWZmZXI9bnVsbH12YXIgcz17fSxjPTAsdT17dWludDg6NTEyMSx1aW50MTY6NTEyM307ZS5vZXNfZWxlbWVudF9pbmRleF91aW50JiYodS51aW50MzI9NTEyNSksaS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe3RoaXMuYnVmZmVyLmJpbmQoKX07dmFyIGg9W107cmV0dXJue2NyZWF0ZTpmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHModCl7aWYodClpZihcIm51bWJlclwiPT10eXBlb2YgdCljKHQpLGgucHJpbVR5cGU9NCxoLnZlcnRDb3VudD0wfHQsaC50eXBlPTUxMjE7ZWxzZXt2YXIgZT1udWxsLHI9MzUwNDQsbj0tMSxpPS0xLG89MCxmPTA7QXJyYXkuaXNBcnJheSh0KXx8Vyh0KXx8bCh0KT9lPXQ6KFwiZGF0YVwiaW4gdCYmKGU9dC5kYXRhKSxcInVzYWdlXCJpbiB0JiYocj1LW3QudXNhZ2VdKSxcInByaW1pdGl2ZVwiaW4gdCYmKG49cnRbdC5wcmltaXRpdmVdKSxcImNvdW50XCJpbiB0JiYoaT0wfHQuY291bnQpLFwidHlwZVwiaW4gdCYmKGY9dVt0LnR5cGVdKSxcImxlbmd0aFwiaW4gdD9vPTB8dC5sZW5ndGg6KG89aSw1MTIzPT09Znx8NTEyMj09PWY/byo9Mjo1MTI1IT09ZiYmNTEyNCE9PWZ8fChvKj00KSkpLGEoaCxlLHIsbixpLG8sZil9ZWxzZSBjKCksaC5wcmltVHlwZT00LGgudmVydENvdW50PTAsaC50eXBlPTUxMjE7cmV0dXJuIHN9dmFyIGM9ci5jcmVhdGUobnVsbCwzNDk2MywhMCksaD1uZXcgaShjLl9idWZmZXIpO3JldHVybiBuLmVsZW1lbnRzQ291bnQrKyxzKHQpLHMuX3JlZ2xUeXBlPVwiZWxlbWVudHNcIixzLl9lbGVtZW50cz1oLHMuc3ViZGF0YT1mdW5jdGlvbih0LGUpe3JldHVybiBjLnN1YmRhdGEodCxlKSxzfSxzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtvKGgpfSxzfSxjcmVhdGVTdHJlYW06ZnVuY3Rpb24odCl7dmFyIGU9aC5wb3AoKTtyZXR1cm4gZXx8KGU9bmV3IGkoci5jcmVhdGUobnVsbCwzNDk2MywhMCwhMSkuX2J1ZmZlcikpLGEoZSx0LDM1MDQwLC0xLC0xLDAsMCksZX0sZGVzdHJveVN0cmVhbTpmdW5jdGlvbih0KXtoLnB1c2godCl9LGdldEVsZW1lbnRzOmZ1bmN0aW9uKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJnQuX2VsZW1lbnRzIGluc3RhbmNlb2YgaT90Ll9lbGVtZW50czpudWxsfSxjbGVhcjpmdW5jdGlvbigpe1gocykuZm9yRWFjaChvKX19fWZ1bmN0aW9uIGcodCl7Zm9yKHZhciBlPUcuYWxsb2NUeXBlKDUxMjMsdC5sZW5ndGgpLHI9MDtyPHQubGVuZ3RoOysrcilpZihpc05hTih0W3JdKSllW3JdPTY1NTM1O2Vsc2UgaWYoMS8wPT09dFtyXSllW3JdPTMxNzQ0O2Vsc2UgaWYoLTEvMD09PXRbcl0pZVtyXT02NDUxMjtlbHNle250WzBdPXRbcl07dmFyIG49KGE9aXRbMF0pPj4+MzE8PDE1LGk9KGE8PDE+Pj4yNCktMTI3LGE9YT4+MTMmMTAyMztlW3JdPS0yND5pP246LTE0Pmk/bisoYSsxMDI0Pj4tMTQtaSk6MTU8aT9uKzMxNzQ0Om4rKGkrMTU8PDEwKSthfXJldHVybiBlfWZ1bmN0aW9uIHYodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl8fFcodCl9ZnVuY3Rpb24gbSh0KXtyZXR1cm5cIltvYmplY3QgXCIrdCtcIl1cIn1mdW5jdGlvbiB5KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiYoMD09PXQubGVuZ3RofHxcIm51bWJlclwiPT10eXBlb2YgdFswXSl9ZnVuY3Rpb24geCh0KXtyZXR1cm4hKCFBcnJheS5pc0FycmF5KHQpfHwwPT09dC5sZW5ndGh8fCF2KHRbMF0pKX1mdW5jdGlvbiBiKHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gXyh0KXtpZighdClyZXR1cm4hMTt2YXIgZT1iKHQpO3JldHVybiAwPD1wdC5pbmRleE9mKGUpfHwoeSh0KXx8eCh0KXx8bCh0KSl9ZnVuY3Rpb24gdyh0LGUpezM2MTkzPT09dC50eXBlPyh0LmRhdGE9ZyhlKSxHLmZyZWVUeXBlKGUpKTp0LmRhdGE9ZX1mdW5jdGlvbiBrKHQsZSxyLG4saSxhKXtpZih0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBndFt0XT9ndFt0XTpzdFt0XSpkdFtlXSxhJiYodCo9NiksaSl7Zm9yKG49MDsxPD1yOyluKz10KnIqcixyLz0yO3JldHVybiBufXJldHVybiB0KnIqbn1mdW5jdGlvbiBBKHQsZSxyLG4saSxhLG8pe2Z1bmN0aW9uIHMoKXt0aGlzLmZvcm1hdD10aGlzLmludGVybmFsZm9ybWF0PTY0MDgsdGhpcy50eXBlPTUxMjEsdGhpcy5mbGlwWT10aGlzLnByZW11bHRpcGx5QWxwaGE9dGhpcy5jb21wcmVzc2VkPSExLHRoaXMudW5wYWNrQWxpZ25tZW50PTEsdGhpcy5jb2xvclNwYWNlPTM3NDQ0LHRoaXMuY2hhbm5lbHM9dGhpcy5oZWlnaHQ9dGhpcy53aWR0aD0wfWZ1bmN0aW9uIGModCxlKXt0LmludGVybmFsZm9ybWF0PWUuaW50ZXJuYWxmb3JtYXQsdC5mb3JtYXQ9ZS5mb3JtYXQsdC50eXBlPWUudHlwZSx0LmNvbXByZXNzZWQ9ZS5jb21wcmVzc2VkLHQucHJlbXVsdGlwbHlBbHBoYT1lLnByZW11bHRpcGx5QWxwaGEsdC5mbGlwWT1lLmZsaXBZLHQudW5wYWNrQWxpZ25tZW50PWUudW5wYWNrQWxpZ25tZW50LHQuY29sb3JTcGFjZT1lLmNvbG9yU3BhY2UsdC53aWR0aD1lLndpZHRoLHQuaGVpZ2h0PWUuaGVpZ2h0LHQuY2hhbm5lbHM9ZS5jaGFubmVsc31mdW5jdGlvbiB1KHQsZSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGUmJmUpe1wicHJlbXVsdGlwbHlBbHBoYVwiaW4gZSYmKHQucHJlbXVsdGlwbHlBbHBoYT1lLnByZW11bHRpcGx5QWxwaGEpLFwiZmxpcFlcImluIGUmJih0LmZsaXBZPWUuZmxpcFkpLFwiYWxpZ25tZW50XCJpbiBlJiYodC51bnBhY2tBbGlnbm1lbnQ9ZS5hbGlnbm1lbnQpLFwiY29sb3JTcGFjZVwiaW4gZSYmKHQuY29sb3JTcGFjZT1xW2UuY29sb3JTcGFjZV0pLFwidHlwZVwiaW4gZSYmKHQudHlwZT1IW2UudHlwZV0pO3ZhciByPXQud2lkdGgsbj10LmhlaWdodCxpPXQuY2hhbm5lbHMsYT0hMTtcInNoYXBlXCJpbiBlPyhyPWUuc2hhcGVbMF0sbj1lLnNoYXBlWzFdLDM9PT1lLnNoYXBlLmxlbmd0aCYmKGk9ZS5zaGFwZVsyXSxhPSEwKSk6KFwicmFkaXVzXCJpbiBlJiYocj1uPWUucmFkaXVzKSxcIndpZHRoXCJpbiBlJiYocj1lLndpZHRoKSxcImhlaWdodFwiaW4gZSYmKG49ZS5oZWlnaHQpLFwiY2hhbm5lbHNcImluIGUmJihpPWUuY2hhbm5lbHMsYT0hMCkpLHQud2lkdGg9MHxyLHQuaGVpZ2h0PTB8bix0LmNoYW5uZWxzPTB8aSxyPSExLFwiZm9ybWF0XCJpbiBlJiYocj1lLmZvcm1hdCxuPXQuaW50ZXJuYWxmb3JtYXQ9WVtyXSx0LmZvcm1hdD1wdFtuXSxyIGluIEgmJiEoXCJ0eXBlXCJpbiBlKSYmKHQudHlwZT1IW3JdKSxyIGluIEomJih0LmNvbXByZXNzZWQ9ITApLHI9ITApLCFhJiZyP3QuY2hhbm5lbHM9c3RbdC5mb3JtYXRdOmEmJiFyJiZ0LmNoYW5uZWxzIT09b3RbdC5mb3JtYXRdJiYodC5mb3JtYXQ9dC5pbnRlcm5hbGZvcm1hdD1vdFt0LmNoYW5uZWxzXSl9fWZ1bmN0aW9uIGgoZSl7dC5waXhlbFN0b3JlaSgzNzQ0MCxlLmZsaXBZKSx0LnBpeGVsU3RvcmVpKDM3NDQxLGUucHJlbXVsdGlwbHlBbHBoYSksdC5waXhlbFN0b3JlaSgzNzQ0MyxlLmNvbG9yU3BhY2UpLHQucGl4ZWxTdG9yZWkoMzMxNyxlLnVucGFja0FsaWdubWVudCl9ZnVuY3Rpb24gZigpe3MuY2FsbCh0aGlzKSx0aGlzLnlPZmZzZXQ9dGhpcy54T2Zmc2V0PTAsdGhpcy5kYXRhPW51bGwsdGhpcy5uZWVkc0ZyZWU9ITEsdGhpcy5lbGVtZW50PW51bGwsdGhpcy5uZWVkc0NvcHk9ITF9ZnVuY3Rpb24gcCh0LGUpe3ZhciByPW51bGw7aWYoXyhlKT9yPWU6ZSYmKHUodCxlKSxcInhcImluIGUmJih0LnhPZmZzZXQ9MHxlLngpLFwieVwiaW4gZSYmKHQueU9mZnNldD0wfGUueSksXyhlLmRhdGEpJiYocj1lLmRhdGEpKSxlLmNvcHkpe3ZhciBuPWkudmlld3BvcnRXaWR0aCxhPWkudmlld3BvcnRIZWlnaHQ7dC53aWR0aD10LndpZHRofHxuLXQueE9mZnNldCx0LmhlaWdodD10LmhlaWdodHx8YS10LnlPZmZzZXQsdC5uZWVkc0NvcHk9ITB9ZWxzZSBpZihyKXtpZihXKHIpKXQuY2hhbm5lbHM9dC5jaGFubmVsc3x8NCx0LmRhdGE9cixcInR5cGVcImluIGV8fDUxMjEhPT10LnR5cGV8fCh0LnR5cGU9MHwkW09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyKV0pO2Vsc2UgaWYoeShyKSl7c3dpdGNoKHQuY2hhbm5lbHM9dC5jaGFubmVsc3x8NCxhPShuPXIpLmxlbmd0aCx0LnR5cGUpe2Nhc2UgNTEyMTpjYXNlIDUxMjM6Y2FzZSA1MTI1OmNhc2UgNTEyNjooYT1HLmFsbG9jVHlwZSh0LnR5cGUsYSkpLnNldChuKSx0LmRhdGE9YTticmVhaztjYXNlIDM2MTkzOnQuZGF0YT1nKG4pfXQuYWxpZ25tZW50PTEsdC5uZWVkc0ZyZWU9ITB9ZWxzZSBpZihsKHIpKXtuPXIuZGF0YSxBcnJheS5pc0FycmF5KG4pfHw1MTIxIT09dC50eXBlfHwodC50eXBlPTB8JFtPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobildKTthPXIuc2hhcGU7dmFyIG8scyxjLGgsZj1yLnN0cmlkZTszPT09YS5sZW5ndGg/KGM9YVsyXSxoPWZbMl0pOmg9Yz0xLG89YVswXSxzPWFbMV0sYT1mWzBdLGY9ZlsxXSx0LmFsaWdubWVudD0xLHQud2lkdGg9byx0LmhlaWdodD1zLHQuY2hhbm5lbHM9Yyx0LmZvcm1hdD10LmludGVybmFsZm9ybWF0PW90W2NdLHQubmVlZHNGcmVlPSEwLG89aCxyPXIub2Zmc2V0LGM9dC53aWR0aCxoPXQuaGVpZ2h0LHM9dC5jaGFubmVscztmb3IodmFyIHA9Ry5hbGxvY1R5cGUoMzYxOTM9PT10LnR5cGU/NTEyNjp0LnR5cGUsYypoKnMpLGQ9MCxtPTA7bTxoOysrbSlmb3IodmFyIGs9MDtrPGM7KytrKWZvcih2YXIgQT0wO0E8czsrK0EpcFtkKytdPW5bYSprK2YqbStvKkErcl07dyh0LHApfWVsc2UgaWYoYihyKT09PWx0fHxiKHIpPT09Y3QpYihyKT09PWx0P3QuZWxlbWVudD1yOnQuZWxlbWVudD1yLmNhbnZhcyx0LndpZHRoPXQuZWxlbWVudC53aWR0aCx0LmhlaWdodD10LmVsZW1lbnQuaGVpZ2h0LHQuY2hhbm5lbHM9NDtlbHNlIGlmKGIocik9PT11dCl0LmVsZW1lbnQ9cix0LndpZHRoPXIud2lkdGgsdC5oZWlnaHQ9ci5oZWlnaHQsdC5jaGFubmVscz00O2Vsc2UgaWYoYihyKT09PWh0KXQuZWxlbWVudD1yLHQud2lkdGg9ci5uYXR1cmFsV2lkdGgsdC5oZWlnaHQ9ci5uYXR1cmFsSGVpZ2h0LHQuY2hhbm5lbHM9NDtlbHNlIGlmKGIocik9PT1mdCl0LmVsZW1lbnQ9cix0LndpZHRoPXIudmlkZW9XaWR0aCx0LmhlaWdodD1yLnZpZGVvSGVpZ2h0LHQuY2hhbm5lbHM9NDtlbHNlIGlmKHgocikpe2ZvcihuPXQud2lkdGh8fHJbMF0ubGVuZ3RoLGE9dC5oZWlnaHR8fHIubGVuZ3RoLGY9dC5jaGFubmVscyxmPXYoclswXVswXSk/Znx8clswXVswXS5sZW5ndGg6Znx8MSxvPVouc2hhcGUociksYz0xLGg9MDtoPG8ubGVuZ3RoOysraCljKj1vW2hdO2M9Ry5hbGxvY1R5cGUoMzYxOTM9PT10LnR5cGU/NTEyNjp0LnR5cGUsYyksWi5mbGF0dGVuKHIsbyxcIlwiLGMpLHcodCxjKSx0LmFsaWdubWVudD0xLHQud2lkdGg9bix0LmhlaWdodD1hLHQuY2hhbm5lbHM9Zix0LmZvcm1hdD10LmludGVybmFsZm9ybWF0PW90W2ZdLHQubmVlZHNGcmVlPSEwfX1lbHNlIHQud2lkdGg9dC53aWR0aHx8MSx0LmhlaWdodD10LmhlaWdodHx8MSx0LmNoYW5uZWxzPXQuY2hhbm5lbHN8fDR9ZnVuY3Rpb24gZChlLHIsaSxhLG8pe3ZhciBzPWUuZWxlbWVudCxsPWUuZGF0YSxjPWUuaW50ZXJuYWxmb3JtYXQsdT1lLmZvcm1hdCxmPWUudHlwZSxwPWUud2lkdGgsZD1lLmhlaWdodDtoKGUpLHM/dC50ZXhTdWJJbWFnZTJEKHIsbyxpLGEsdSxmLHMpOmUuY29tcHJlc3NlZD90LmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKHIsbyxpLGEsYyxwLGQsbCk6ZS5uZWVkc0NvcHk/KG4oKSx0LmNvcHlUZXhTdWJJbWFnZTJEKHIsbyxpLGEsZS54T2Zmc2V0LGUueU9mZnNldCxwLGQpKTp0LnRleFN1YkltYWdlMkQocixvLGksYSxwLGQsdSxmLGwpfWZ1bmN0aW9uIG0oKXtyZXR1cm4gZHQucG9wKCl8fG5ldyBmfWZ1bmN0aW9uIEEodCl7dC5uZWVkc0ZyZWUmJkcuZnJlZVR5cGUodC5kYXRhKSxmLmNhbGwodCksZHQucHVzaCh0KX1mdW5jdGlvbiBUKCl7cy5jYWxsKHRoaXMpLHRoaXMuZ2VuTWlwbWFwcz0hMSx0aGlzLm1pcG1hcEhpbnQ9NDM1Mix0aGlzLm1pcG1hc2s9MCx0aGlzLmltYWdlcz1BcnJheSgxNil9ZnVuY3Rpb24gTSh0LGUscil7dmFyIG49dC5pbWFnZXNbMF09bSgpO3QubWlwbWFzaz0xLG4ud2lkdGg9dC53aWR0aD1lLG4uaGVpZ2h0PXQuaGVpZ2h0PXIsbi5jaGFubmVscz10LmNoYW5uZWxzPTR9ZnVuY3Rpb24gUyh0LGUpe3ZhciByPW51bGw7aWYoXyhlKSljKHI9dC5pbWFnZXNbMF09bSgpLHQpLHAocixlKSx0Lm1pcG1hc2s9MTtlbHNlIGlmKHUodCxlKSxBcnJheS5pc0FycmF5KGUubWlwbWFwKSlmb3IodmFyIG49ZS5taXBtYXAsaT0wO2k8bi5sZW5ndGg7KytpKWMocj10LmltYWdlc1tpXT1tKCksdCksci53aWR0aD4+PWksci5oZWlnaHQ+Pj1pLHAocixuW2ldKSx0Lm1pcG1hc2t8PTE8PGk7ZWxzZSBjKHI9dC5pbWFnZXNbMF09bSgpLHQpLHAocixlKSx0Lm1pcG1hc2s9MTtjKHQsdC5pbWFnZXNbMF0pfWZ1bmN0aW9uIEUoZSxyKXtmb3IodmFyIGk9ZS5pbWFnZXMsYT0wO2E8aS5sZW5ndGgmJmlbYV07KythKXt2YXIgbz1pW2FdLHM9cixsPWEsYz1vLmVsZW1lbnQsdT1vLmRhdGEsZj1vLmludGVybmFsZm9ybWF0LHA9by5mb3JtYXQsZD1vLnR5cGUsZz1vLndpZHRoLHY9by5oZWlnaHQsbT1vLmNoYW5uZWxzO2gobyksYz90LnRleEltYWdlMkQocyxsLHAscCxkLGMpOm8uY29tcHJlc3NlZD90LmNvbXByZXNzZWRUZXhJbWFnZTJEKHMsbCxmLGcsdiwwLHUpOm8ubmVlZHNDb3B5PyhuKCksdC5jb3B5VGV4SW1hZ2UyRChzLGwscCxvLnhPZmZzZXQsby55T2Zmc2V0LGcsdiwwKSk6KChvPSF1KSYmKHU9Ry56ZXJvLmFsbG9jVHlwZShkLGcqdiptKSksdC50ZXhJbWFnZTJEKHMsbCxwLGcsdiwwLHAsZCx1KSxvJiZ1JiZHLnplcm8uZnJlZVR5cGUodSkpfX1mdW5jdGlvbiBDKCl7dmFyIHQ9Z3QucG9wKCl8fG5ldyBUO3MuY2FsbCh0KTtmb3IodmFyIGU9dC5taXBtYXNrPTA7MTY+ZTsrK2UpdC5pbWFnZXNbZV09bnVsbDtyZXR1cm4gdH1mdW5jdGlvbiBMKHQpe2Zvcih2YXIgZT10LmltYWdlcyxyPTA7cjxlLmxlbmd0aDsrK3IpZVtyXSYmQShlW3JdKSxlW3JdPW51bGw7Z3QucHVzaCh0KX1mdW5jdGlvbiB6KCl7dGhpcy5tYWdGaWx0ZXI9dGhpcy5taW5GaWx0ZXI9OTcyOCx0aGlzLndyYXBUPXRoaXMud3JhcFM9MzMwNzEsdGhpcy5hbmlzb3Ryb3BpYz0xLHRoaXMuZ2VuTWlwbWFwcz0hMSx0aGlzLm1pcG1hcEhpbnQ9NDM1Mn1mdW5jdGlvbiBPKHQsZSl7XCJtaW5cImluIGUmJih0Lm1pbkZpbHRlcj1VW2UubWluXSwwPD1hdC5pbmRleE9mKHQubWluRmlsdGVyKSYmIShcImZhY2VzXCJpbiBlKSYmKHQuZ2VuTWlwbWFwcz0hMCkpLFwibWFnXCJpbiBlJiYodC5tYWdGaWx0ZXI9VltlLm1hZ10pO3ZhciByPXQud3JhcFMsbj10LndyYXBUO2lmKFwid3JhcFwiaW4gZSl7dmFyIGk9ZS53cmFwO1wic3RyaW5nXCI9PXR5cGVvZiBpP3I9bj1OW2ldOkFycmF5LmlzQXJyYXkoaSkmJihyPU5baVswXV0sbj1OW2lbMV1dKX1lbHNlXCJ3cmFwU1wiaW4gZSYmKHI9TltlLndyYXBTXSksXCJ3cmFwVFwiaW4gZSYmKG49TltlLndyYXBUXSk7aWYodC53cmFwUz1yLHQud3JhcFQ9bixcImFuaXNvdHJvcGljXCJpbiBlJiYodC5hbmlzb3Ryb3BpYz1lLmFuaXNvdHJvcGljKSxcIm1pcG1hcFwiaW4gZSl7c3dpdGNoKHI9ITEsdHlwZW9mIGUubWlwbWFwKXtjYXNlXCJzdHJpbmdcIjp0Lm1pcG1hcEhpbnQ9QltlLm1pcG1hcF0scj10Lmdlbk1pcG1hcHM9ITA7YnJlYWs7Y2FzZVwiYm9vbGVhblwiOnI9dC5nZW5NaXBtYXBzPWUubWlwbWFwO2JyZWFrO2Nhc2VcIm9iamVjdFwiOnQuZ2VuTWlwbWFwcz0hMSxyPSEwfSFyfHxcIm1pblwiaW4gZXx8KHQubWluRmlsdGVyPTk5ODQpfX1mdW5jdGlvbiBJKHIsbil7dC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDEsci5taW5GaWx0ZXIpLHQudGV4UGFyYW1ldGVyaShuLDEwMjQwLHIubWFnRmlsdGVyKSx0LnRleFBhcmFtZXRlcmkobiwxMDI0MixyLndyYXBTKSx0LnRleFBhcmFtZXRlcmkobiwxMDI0MyxyLndyYXBUKSxlLmV4dF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyYmdC50ZXhQYXJhbWV0ZXJpKG4sMzQwNDYsci5hbmlzb3Ryb3BpYyksci5nZW5NaXBtYXBzJiYodC5oaW50KDMzMTcwLHIubWlwbWFwSGludCksdC5nZW5lcmF0ZU1pcG1hcChuKSl9ZnVuY3Rpb24gRChlKXtzLmNhbGwodGhpcyksdGhpcy5taXBtYXNrPTAsdGhpcy5pbnRlcm5hbGZvcm1hdD02NDA4LHRoaXMuaWQ9dnQrKyx0aGlzLnJlZkNvdW50PTEsdGhpcy50YXJnZXQ9ZSx0aGlzLnRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksdGhpcy51bml0PS0xLHRoaXMuYmluZENvdW50PTAsdGhpcy50ZXhJbmZvPW5ldyB6LG8ucHJvZmlsZSYmKHRoaXMuc3RhdHM9e3NpemU6MH0pfWZ1bmN0aW9uIFAoZSl7dC5hY3RpdmVUZXh0dXJlKDMzOTg0KSx0LmJpbmRUZXh0dXJlKGUudGFyZ2V0LGUudGV4dHVyZSl9ZnVuY3Rpb24gUigpe3ZhciBlPXh0WzBdO2U/dC5iaW5kVGV4dHVyZShlLnRhcmdldCxlLnRleHR1cmUpOnQuYmluZFRleHR1cmUoMzU1MyxudWxsKX1mdW5jdGlvbiBGKGUpe3ZhciByPWUudGV4dHVyZSxuPWUudW5pdCxpPWUudGFyZ2V0OzA8PW4mJih0LmFjdGl2ZVRleHR1cmUoMzM5ODQrbiksdC5iaW5kVGV4dHVyZShpLG51bGwpLHh0W25dPW51bGwpLHQuZGVsZXRlVGV4dHVyZShyKSxlLnRleHR1cmU9bnVsbCxlLnBhcmFtcz1udWxsLGUucGl4ZWxzPW51bGwsZS5yZWZDb3VudD0wLGRlbGV0ZSBtdFtlLmlkXSxhLnRleHR1cmVDb3VudC0tfXZhciBCPXtcImRvbid0IGNhcmVcIjo0MzUyLFwiZG9udCBjYXJlXCI6NDM1MixuaWNlOjQzNTQsZmFzdDo0MzUzfSxOPXtyZXBlYXQ6MTA0OTcsY2xhbXA6MzMwNzEsbWlycm9yOjMzNjQ4fSxWPXtuZWFyZXN0Ojk3MjgsbGluZWFyOjk3Mjl9LFU9aih7bWlwbWFwOjk5ODcsXCJuZWFyZXN0IG1pcG1hcCBuZWFyZXN0XCI6OTk4NCxcImxpbmVhciBtaXBtYXAgbmVhcmVzdFwiOjk5ODUsXCJuZWFyZXN0IG1pcG1hcCBsaW5lYXJcIjo5OTg2LFwibGluZWFyIG1pcG1hcCBsaW5lYXJcIjo5OTg3fSxWKSxxPXtub25lOjAsYnJvd3NlcjozNzQ0NH0sSD17dWludDg6NTEyMSxyZ2JhNDozMjgxOSxyZ2I1NjU6MzM2MzUsXCJyZ2I1IGExXCI6MzI4MjB9LFk9e2FscGhhOjY0MDYsbHVtaW5hbmNlOjY0MDksXCJsdW1pbmFuY2UgYWxwaGFcIjo2NDEwLHJnYjo2NDA3LHJnYmE6NjQwOCxyZ2JhNDozMjg1NCxcInJnYjUgYTFcIjozMjg1NSxyZ2I1NjU6MzYxOTR9LEo9e307ZS5leHRfc3JnYiYmKFkuc3JnYj0zNTkwNCxZLnNyZ2JhPTM1OTA2KSxlLm9lc190ZXh0dXJlX2Zsb2F0JiYoSC5mbG9hdDMyPUguZmxvYXQ9NTEyNiksZS5vZXNfdGV4dHVyZV9oYWxmX2Zsb2F0JiYoSC5mbG9hdDE2PUhbXCJoYWxmIGZsb2F0XCJdPTM2MTkzKSxlLndlYmdsX2RlcHRoX3RleHR1cmUmJihqKFkse2RlcHRoOjY0MDIsXCJkZXB0aCBzdGVuY2lsXCI6MzQwNDF9KSxqKEgse3VpbnQxNjo1MTIzLHVpbnQzMjo1MTI1LFwiZGVwdGggc3RlbmNpbFwiOjM0MDQyfSkpLGUud2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMmJmooSix7XCJyZ2IgczN0YyBkeHQxXCI6MzM3NzYsXCJyZ2JhIHMzdGMgZHh0MVwiOjMzNzc3LFwicmdiYSBzM3RjIGR4dDNcIjozMzc3OCxcInJnYmEgczN0YyBkeHQ1XCI6MzM3Nzl9KSxlLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9hdGMmJmooSix7XCJyZ2IgYXRjXCI6MzU5ODYsXCJyZ2JhIGF0YyBleHBsaWNpdCBhbHBoYVwiOjM1OTg3LFwicmdiYSBhdGMgaW50ZXJwb2xhdGVkIGFscGhhXCI6MzQ3OTh9KSxlLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyYmaihKLHtcInJnYiBwdnJ0YyA0YnBwdjFcIjozNTg0MCxcInJnYiBwdnJ0YyAyYnBwdjFcIjozNTg0MSxcInJnYmEgcHZydGMgNGJwcHYxXCI6MzU4NDIsXCJyZ2JhIHB2cnRjIDJicHB2MVwiOjM1ODQzfSksZS53ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfZXRjMSYmKEpbXCJyZ2IgZXRjMVwiXT0zNjE5Nik7dmFyIEs9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodC5nZXRQYXJhbWV0ZXIoMzQ0NjcpKTtPYmplY3Qua2V5cyhKKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPUpbdF07MDw9Sy5pbmRleE9mKGUpJiYoWVt0XT1lKX0pO3ZhciBRPU9iamVjdC5rZXlzKFkpO3IudGV4dHVyZUZvcm1hdHM9UTt2YXIgdHQ9W107T2JqZWN0LmtleXMoWSkuZm9yRWFjaChmdW5jdGlvbih0KXt0dFtZW3RdXT10fSk7dmFyIGV0PVtdO09iamVjdC5rZXlzKEgpLmZvckVhY2goZnVuY3Rpb24odCl7ZXRbSFt0XV09dH0pO3ZhciBydD1bXTtPYmplY3Qua2V5cyhWKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3J0W1ZbdF1dPXR9KTt2YXIgbnQ9W107T2JqZWN0LmtleXMoVSkuZm9yRWFjaChmdW5jdGlvbih0KXtudFtVW3RdXT10fSk7dmFyIGl0PVtdO09iamVjdC5rZXlzKE4pLmZvckVhY2goZnVuY3Rpb24odCl7aXRbTlt0XV09dH0pO3ZhciBwdD1RLnJlZHVjZShmdW5jdGlvbih0LGUpe3ZhciByPVlbZV07cmV0dXJuIDY0MDk9PT1yfHw2NDA2PT09cnx8NjQwOT09PXJ8fDY0MTA9PT1yfHw2NDAyPT09cnx8MzQwNDE9PT1yP3Rbcl09cjozMjg1NT09PXJ8fDA8PWUuaW5kZXhPZihcInJnYmFcIik/dFtyXT02NDA4OnRbcl09NjQwNyx0fSx7fSksZHQ9W10sZ3Q9W10sdnQ9MCxtdD17fSx5dD1yLm1heFRleHR1cmVVbml0cyx4dD1BcnJheSh5dCkubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9KTtyZXR1cm4gaihELnByb3RvdHlwZSx7YmluZDpmdW5jdGlvbigpe3RoaXMuYmluZENvdW50Kz0xO3ZhciBlPXRoaXMudW5pdDtpZigwPmUpe2Zvcih2YXIgcj0wO3I8eXQ7KytyKXt2YXIgbj14dFtyXTtpZihuKXtpZigwPG4uYmluZENvdW50KWNvbnRpbnVlO24udW5pdD0tMX14dFtyXT10aGlzLGU9cjticmVha31vLnByb2ZpbGUmJmEubWF4VGV4dHVyZVVuaXRzPGUrMSYmKGEubWF4VGV4dHVyZVVuaXRzPWUrMSksdGhpcy51bml0PWUsdC5hY3RpdmVUZXh0dXJlKDMzOTg0K2UpLHQuYmluZFRleHR1cmUodGhpcy50YXJnZXQsdGhpcy50ZXh0dXJlKX1yZXR1cm4gZX0sdW5iaW5kOmZ1bmN0aW9uKCl7LS10aGlzLmJpbmRDb3VudH0sZGVjUmVmOmZ1bmN0aW9uKCl7MD49LS10aGlzLnJlZkNvdW50JiZGKHRoaXMpfX0pLG8ucHJvZmlsZSYmKGEuZ2V0VG90YWxUZXh0dXJlU2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIE9iamVjdC5rZXlzKG10KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QrPW10W2VdLnN0YXRzLnNpemV9KSx0fSkse2NyZWF0ZTJEOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWkudGV4SW5mbzt6LmNhbGwocik7dmFyIGE9QygpO3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0P00oYSwwfHQsXCJudW1iZXJcIj09dHlwZW9mIGU/MHxlOjB8dCk6dD8oTyhyLHQpLFMoYSx0KSk6TShhLDEsMSksci5nZW5NaXBtYXBzJiYoYS5taXBtYXNrPShhLndpZHRoPDwxKS0xKSxpLm1pcG1hc2s9YS5taXBtYXNrLGMoaSxhKSxpLmludGVybmFsZm9ybWF0PWEuaW50ZXJuYWxmb3JtYXQsbi53aWR0aD1hLndpZHRoLG4uaGVpZ2h0PWEuaGVpZ2h0LFAoaSksRShhLDM1NTMpLEkociwzNTUzKSxSKCksTChhKSxvLnByb2ZpbGUmJihpLnN0YXRzLnNpemU9ayhpLmludGVybmFsZm9ybWF0LGkudHlwZSxhLndpZHRoLGEuaGVpZ2h0LHIuZ2VuTWlwbWFwcywhMSkpLG4uZm9ybWF0PXR0W2kuaW50ZXJuYWxmb3JtYXRdLG4udHlwZT1ldFtpLnR5cGVdLG4ubWFnPXJ0W3IubWFnRmlsdGVyXSxuLm1pbj1udFtyLm1pbkZpbHRlcl0sbi53cmFwUz1pdFtyLndyYXBTXSxuLndyYXBUPWl0W3Iud3JhcFRdLG59dmFyIGk9bmV3IEQoMzU1Myk7cmV0dXJuIG10W2kuaWRdPWksYS50ZXh0dXJlQ291bnQrKyxuKGUsciksbi5zdWJpbWFnZT1mdW5jdGlvbih0LGUscixhKXtlfD0wLHJ8PTAsYXw9MDt2YXIgbz1tKCk7cmV0dXJuIGMobyxpKSxvLndpZHRoPTAsby5oZWlnaHQ9MCxwKG8sdCksby53aWR0aD1vLndpZHRofHwoaS53aWR0aD4+YSktZSxvLmhlaWdodD1vLmhlaWdodHx8KGkuaGVpZ2h0Pj5hKS1yLFAoaSksZChvLDM1NTMsZSxyLGEpLFIoKSxBKG8pLG59LG4ucmVzaXplPWZ1bmN0aW9uKGUscil7dmFyIGE9MHxlLHM9MHxyfHxhO2lmKGE9PT1pLndpZHRoJiZzPT09aS5oZWlnaHQpcmV0dXJuIG47bi53aWR0aD1pLndpZHRoPWEsbi5oZWlnaHQ9aS5oZWlnaHQ9cyxQKGkpO2Zvcih2YXIgbCxjPWkuY2hhbm5lbHMsdT1pLnR5cGUsaD0wO2kubWlwbWFzaz4+aDsrK2gpe3ZhciBmPWE+PmgscD1zPj5oO2lmKCFmfHwhcClicmVhaztsPUcuemVyby5hbGxvY1R5cGUodSxmKnAqYyksdC50ZXhJbWFnZTJEKDM1NTMsaCxpLmZvcm1hdCxmLHAsMCxpLmZvcm1hdCxpLnR5cGUsbCksbCYmRy56ZXJvLmZyZWVUeXBlKGwpfXJldHVybiBSKCksby5wcm9maWxlJiYoaS5zdGF0cy5zaXplPWsoaS5pbnRlcm5hbGZvcm1hdCxpLnR5cGUsYSxzLCExLCExKSksbn0sbi5fcmVnbFR5cGU9XCJ0ZXh0dXJlMmRcIixuLl90ZXh0dXJlPWksby5wcm9maWxlJiYobi5zdGF0cz1pLnN0YXRzKSxuLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpLmRlY1JlZigpfSxufSxjcmVhdGVDdWJlOmZ1bmN0aW9uKGUscixuLGkscyxsKXtmdW5jdGlvbiBoKHQsZSxyLG4saSxhKXt2YXIgcyxsPWYudGV4SW5mbztmb3Ioei5jYWxsKGwpLHM9MDs2PnM7KytzKWdbc109QygpO2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0JiZ0KXtpZihcIm9iamVjdFwiPT10eXBlb2YgdClpZihlKVMoZ1swXSx0KSxTKGdbMV0sZSksUyhnWzJdLHIpLFMoZ1szXSxuKSxTKGdbNF0saSksUyhnWzVdLGEpO2Vsc2UgaWYoTyhsLHQpLHUoZix0KSxcImZhY2VzXCJpbiB0KWZvcih0PXQuZmFjZXMscz0wOzY+czsrK3MpYyhnW3NdLGYpLFMoZ1tzXSx0W3NdKTtlbHNlIGZvcihzPTA7Nj5zOysrcylTKGdbc10sdCl9ZWxzZSBmb3IodD0wfHR8fDEscz0wOzY+czsrK3MpTShnW3NdLHQsdCk7Zm9yKGMoZixnWzBdKSxmLm1pcG1hc2s9bC5nZW5NaXBtYXBzPyhnWzBdLndpZHRoPDwxKS0xOmdbMF0ubWlwbWFzayxmLmludGVybmFsZm9ybWF0PWdbMF0uaW50ZXJuYWxmb3JtYXQsaC53aWR0aD1nWzBdLndpZHRoLGguaGVpZ2h0PWdbMF0uaGVpZ2h0LFAoZikscz0wOzY+czsrK3MpRShnW3NdLDM0MDY5K3MpO2ZvcihJKGwsMzQwNjcpLFIoKSxvLnByb2ZpbGUmJihmLnN0YXRzLnNpemU9ayhmLmludGVybmFsZm9ybWF0LGYudHlwZSxoLndpZHRoLGguaGVpZ2h0LGwuZ2VuTWlwbWFwcywhMCkpLGguZm9ybWF0PXR0W2YuaW50ZXJuYWxmb3JtYXRdLGgudHlwZT1ldFtmLnR5cGVdLGgubWFnPXJ0W2wubWFnRmlsdGVyXSxoLm1pbj1udFtsLm1pbkZpbHRlcl0saC53cmFwUz1pdFtsLndyYXBTXSxoLndyYXBUPWl0W2wud3JhcFRdLHM9MDs2PnM7KytzKUwoZ1tzXSk7cmV0dXJuIGh9dmFyIGY9bmV3IEQoMzQwNjcpO210W2YuaWRdPWYsYS5jdWJlQ291bnQrKzt2YXIgZz1BcnJheSg2KTtyZXR1cm4gaChlLHIsbixpLHMsbCksaC5zdWJpbWFnZT1mdW5jdGlvbih0LGUscixuLGkpe3J8PTAsbnw9MCxpfD0wO3ZhciBhPW0oKTtyZXR1cm4gYyhhLGYpLGEud2lkdGg9MCxhLmhlaWdodD0wLHAoYSxlKSxhLndpZHRoPWEud2lkdGh8fChmLndpZHRoPj5pKS1yLGEuaGVpZ2h0PWEuaGVpZ2h0fHwoZi5oZWlnaHQ+PmkpLW4sUChmKSxkKGEsMzQwNjkrdCxyLG4saSksUigpLEEoYSksaH0saC5yZXNpemU9ZnVuY3Rpb24oZSl7aWYoKGV8PTApIT09Zi53aWR0aCl7aC53aWR0aD1mLndpZHRoPWUsaC5oZWlnaHQ9Zi5oZWlnaHQ9ZSxQKGYpO2Zvcih2YXIgcj0wOzY+cjsrK3IpZm9yKHZhciBuPTA7Zi5taXBtYXNrPj5uOysrbil0LnRleEltYWdlMkQoMzQwNjkrcixuLGYuZm9ybWF0LGU+Pm4sZT4+biwwLGYuZm9ybWF0LGYudHlwZSxudWxsKTtyZXR1cm4gUigpLG8ucHJvZmlsZSYmKGYuc3RhdHMuc2l6ZT1rKGYuaW50ZXJuYWxmb3JtYXQsZi50eXBlLGgud2lkdGgsaC5oZWlnaHQsITEsITApKSxofX0saC5fcmVnbFR5cGU9XCJ0ZXh0dXJlQ3ViZVwiLGguX3RleHR1cmU9ZixvLnByb2ZpbGUmJihoLnN0YXRzPWYuc3RhdHMpLGguZGVzdHJveT1mdW5jdGlvbigpe2YuZGVjUmVmKCl9LGh9LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx5dDsrK2UpdC5hY3RpdmVUZXh0dXJlKDMzOTg0K2UpLHQuYmluZFRleHR1cmUoMzU1MyxudWxsKSx4dFtlXT1udWxsO1gobXQpLmZvckVhY2goRiksYS5jdWJlQ291bnQ9MCxhLnRleHR1cmVDb3VudD0wfSxnZXRUZXh0dXJlOmZ1bmN0aW9uKHQpe3JldHVybiBudWxsfSxyZXN0b3JlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx5dDsrK2Upe3ZhciByPXh0W2VdO3ImJihyLmJpbmRDb3VudD0wLHIudW5pdD0tMSx4dFtlXT1udWxsKX1YKG10KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UudGV4dHVyZT10LmNyZWF0ZVRleHR1cmUoKSx0LmJpbmRUZXh0dXJlKGUudGFyZ2V0LGUudGV4dHVyZSk7Zm9yKHZhciByPTA7MzI+cjsrK3IpaWYoMCE9KGUubWlwbWFzayYxPDxyKSlpZigzNTUzPT09ZS50YXJnZXQpdC50ZXhJbWFnZTJEKDM1NTMscixlLmludGVybmFsZm9ybWF0LGUud2lkdGg+PnIsZS5oZWlnaHQ+PnIsMCxlLmludGVybmFsZm9ybWF0LGUudHlwZSxudWxsKTtlbHNlIGZvcih2YXIgbj0wOzY+bjsrK24pdC50ZXhJbWFnZTJEKDM0MDY5K24scixlLmludGVybmFsZm9ybWF0LGUud2lkdGg+PnIsZS5oZWlnaHQ+PnIsMCxlLmludGVybmFsZm9ybWF0LGUudHlwZSxudWxsKTtJKGUudGV4SW5mbyxlLnRhcmdldCl9KX19fWZ1bmN0aW9uIFQodCxlLHIsbixpLGEpe2Z1bmN0aW9uIG8odCxlLHIpe3RoaXMudGFyZ2V0PXQsdGhpcy50ZXh0dXJlPWUsdGhpcy5yZW5kZXJidWZmZXI9cjt2YXIgbj10PTA7ZT8odD1lLndpZHRoLG49ZS5oZWlnaHQpOnImJih0PXIud2lkdGgsbj1yLmhlaWdodCksdGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PW59ZnVuY3Rpb24gcyh0KXt0JiYodC50ZXh0dXJlJiZ0LnRleHR1cmUuX3RleHR1cmUuZGVjUmVmKCksdC5yZW5kZXJidWZmZXImJnQucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIuZGVjUmVmKCkpfWZ1bmN0aW9uIGwodCxlLHIpe3QmJih0LnRleHR1cmU/dC50ZXh0dXJlLl90ZXh0dXJlLnJlZkNvdW50Kz0xOnQucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIucmVmQ291bnQrPTEpfWZ1bmN0aW9uIGMoZSxyKXtyJiYoci50ZXh0dXJlP3QuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsZSxyLnRhcmdldCxyLnRleHR1cmUuX3RleHR1cmUudGV4dHVyZSwwKTp0LmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLGUsMzYxNjEsci5yZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlci5yZW5kZXJidWZmZXIpKX1mdW5jdGlvbiB1KHQpe3ZhciBlPTM1NTMscj1udWxsLG49bnVsbCxpPXQ7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHQmJihpPXQuZGF0YSxcInRhcmdldFwiaW4gdCYmKGU9MHx0LnRhcmdldCkpLFwidGV4dHVyZTJkXCI9PT0odD1pLl9yZWdsVHlwZSk/cj1pOlwidGV4dHVyZUN1YmVcIj09PXQ/cj1pOlwicmVuZGVyYnVmZmVyXCI9PT10JiYobj1pLGU9MzYxNjEpLG5ldyBvKGUscixuKX1mdW5jdGlvbiBoKHQsZSxyLGEscyl7cmV0dXJuIHI/KCh0PW4uY3JlYXRlMkQoe3dpZHRoOnQsaGVpZ2h0OmUsZm9ybWF0OmEsdHlwZTpzfSkpLl90ZXh0dXJlLnJlZkNvdW50PTAsbmV3IG8oMzU1Myx0LG51bGwpKTooKHQ9aS5jcmVhdGUoe3dpZHRoOnQsaGVpZ2h0OmUsZm9ybWF0OmF9KSkuX3JlbmRlcmJ1ZmZlci5yZWZDb3VudD0wLG5ldyBvKDM2MTYxLG51bGwsdCkpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQmJih0LnRleHR1cmV8fHQucmVuZGVyYnVmZmVyKX1mdW5jdGlvbiBwKHQsZSxyKXt0JiYodC50ZXh0dXJlP3QudGV4dHVyZS5yZXNpemUoZSxyKTp0LnJlbmRlcmJ1ZmZlciYmdC5yZW5kZXJidWZmZXIucmVzaXplKGUsciksdC53aWR0aD1lLHQuaGVpZ2h0PXIpfWZ1bmN0aW9uIGQoKXt0aGlzLmlkPWsrKyxBW3RoaXMuaWRdPXRoaXMsdGhpcy5mcmFtZWJ1ZmZlcj10LmNyZWF0ZUZyYW1lYnVmZmVyKCksdGhpcy5oZWlnaHQ9dGhpcy53aWR0aD0wLHRoaXMuY29sb3JBdHRhY2htZW50cz1bXSx0aGlzLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQ9dGhpcy5zdGVuY2lsQXR0YWNobWVudD10aGlzLmRlcHRoQXR0YWNobWVudD1udWxsfWZ1bmN0aW9uIGcodCl7dC5jb2xvckF0dGFjaG1lbnRzLmZvckVhY2gocykscyh0LmRlcHRoQXR0YWNobWVudCkscyh0LnN0ZW5jaWxBdHRhY2htZW50KSxzKHQuZGVwdGhTdGVuY2lsQXR0YWNobWVudCl9ZnVuY3Rpb24gdihlKXt0LmRlbGV0ZUZyYW1lYnVmZmVyKGUuZnJhbWVidWZmZXIpLGUuZnJhbWVidWZmZXI9bnVsbCxhLmZyYW1lYnVmZmVyQ291bnQtLSxkZWxldGUgQVtlLmlkXX1mdW5jdGlvbiBtKGUpe3ZhciBuO3QuYmluZEZyYW1lYnVmZmVyKDM2MTYwLGUuZnJhbWVidWZmZXIpO3ZhciBpPWUuY29sb3JBdHRhY2htZW50cztmb3Iobj0wO248aS5sZW5ndGg7KytuKWMoMzYwNjQrbixpW25dKTtmb3Iobj1pLmxlbmd0aDtuPHIubWF4Q29sb3JBdHRhY2htZW50czsrK24pdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA2NCtuLDM1NTMsbnVsbCwwKTt0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDMzMzA2LDM1NTMsbnVsbCwwKSx0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDk2LDM1NTMsbnVsbCwwKSx0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MTI4LDM1NTMsbnVsbCwwKSxjKDM2MDk2LGUuZGVwdGhBdHRhY2htZW50KSxjKDM2MTI4LGUuc3RlbmNpbEF0dGFjaG1lbnQpLGMoMzMzMDYsZS5kZXB0aFN0ZW5jaWxBdHRhY2htZW50KSx0LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoMzYxNjApLHQuaXNDb250ZXh0TG9zdCgpLHQuYmluZEZyYW1lYnVmZmVyKDM2MTYwLHgubmV4dD94Lm5leHQuZnJhbWVidWZmZXI6bnVsbCkseC5jdXI9eC5uZXh0LHQuZ2V0RXJyb3IoKX1mdW5jdGlvbiB5KHQsZSl7ZnVuY3Rpb24gcih0LGUpe3ZhciBpLGE9MCxvPTAscz0hMCxjPSEwO2k9bnVsbDt2YXIgcD0hMCxkPVwicmdiYVwiLHY9XCJ1aW50OFwiLHk9MSx4PW51bGwsdz1udWxsLGs9bnVsbCxBPSExO1wibnVtYmVyXCI9PXR5cGVvZiB0PyhhPTB8dCxvPTB8ZXx8YSk6dD8oXCJzaGFwZVwiaW4gdD8oYT0obz10LnNoYXBlKVswXSxvPW9bMV0pOihcInJhZGl1c1wiaW4gdCYmKGE9bz10LnJhZGl1cyksXCJ3aWR0aFwiaW4gdCYmKGE9dC53aWR0aCksXCJoZWlnaHRcImluIHQmJihvPXQuaGVpZ2h0KSksKFwiY29sb3JcImluIHR8fFwiY29sb3JzXCJpbiB0KSYmKGk9dC5jb2xvcnx8dC5jb2xvcnMsQXJyYXkuaXNBcnJheShpKSksaXx8KFwiY29sb3JDb3VudFwiaW4gdCYmKHk9MHx0LmNvbG9yQ291bnQpLFwiY29sb3JUZXh0dXJlXCJpbiB0JiYocD0hIXQuY29sb3JUZXh0dXJlLGQ9XCJyZ2JhNFwiKSxcImNvbG9yVHlwZVwiaW4gdCYmKHY9dC5jb2xvclR5cGUsIXApJiYoXCJoYWxmIGZsb2F0XCI9PT12fHxcImZsb2F0MTZcIj09PXY/ZD1cInJnYmExNmZcIjpcImZsb2F0XCIhPT12JiZcImZsb2F0MzJcIiE9PXZ8fChkPVwicmdiYTMyZlwiKSksXCJjb2xvckZvcm1hdFwiaW4gdCYmKGQ9dC5jb2xvckZvcm1hdCwwPD1iLmluZGV4T2YoZCk/cD0hMDowPD1fLmluZGV4T2YoZCkmJihwPSExKSkpLChcImRlcHRoVGV4dHVyZVwiaW4gdHx8XCJkZXB0aFN0ZW5jaWxUZXh0dXJlXCJpbiB0KSYmKEE9ISghdC5kZXB0aFRleHR1cmUmJiF0LmRlcHRoU3RlbmNpbFRleHR1cmUpKSxcImRlcHRoXCJpbiB0JiYoXCJib29sZWFuXCI9PXR5cGVvZiB0LmRlcHRoP3M9dC5kZXB0aDooeD10LmRlcHRoLGM9ITEpKSxcInN0ZW5jaWxcImluIHQmJihcImJvb2xlYW5cIj09dHlwZW9mIHQuc3RlbmNpbD9jPXQuc3RlbmNpbDoodz10LnN0ZW5jaWwscz0hMSkpLFwiZGVwdGhTdGVuY2lsXCJpbiB0JiYoXCJib29sZWFuXCI9PXR5cGVvZiB0LmRlcHRoU3RlbmNpbD9zPWM9dC5kZXB0aFN0ZW5jaWw6KGs9dC5kZXB0aFN0ZW5jaWwsYz1zPSExKSkpOmE9bz0xO3ZhciBUPW51bGwsTT1udWxsLFM9bnVsbCxFPW51bGw7aWYoQXJyYXkuaXNBcnJheShpKSlUPWkubWFwKHUpO2Vsc2UgaWYoaSlUPVt1KGkpXTtlbHNlIGZvcihUPUFycmF5KHkpLGk9MDtpPHk7KytpKVRbaV09aChhLG8scCxkLHYpO2ZvcihhPWF8fFRbMF0ud2lkdGgsbz1vfHxUWzBdLmhlaWdodCx4P009dSh4KTpzJiYhYyYmKE09aChhLG8sQSxcImRlcHRoXCIsXCJ1aW50MzJcIikpLHc/Uz11KHcpOmMmJiFzJiYoUz1oKGEsbywhMSxcInN0ZW5jaWxcIixcInVpbnQ4XCIpKSxrP0U9dShrKToheCYmIXcmJmMmJnMmJihFPWgoYSxvLEEsXCJkZXB0aCBzdGVuY2lsXCIsXCJkZXB0aCBzdGVuY2lsXCIpKSxzPW51bGwsaT0wO2k8VC5sZW5ndGg7KytpKWwoVFtpXSksVFtpXSYmVFtpXS50ZXh0dXJlJiYoYz15dFtUW2ldLnRleHR1cmUuX3RleHR1cmUuZm9ybWF0XSp4dFtUW2ldLnRleHR1cmUuX3RleHR1cmUudHlwZV0sbnVsbD09PXMmJihzPWMpKTtyZXR1cm4gbChNKSxsKFMpLGwoRSksZyhuKSxuLndpZHRoPWEsbi5oZWlnaHQ9byxuLmNvbG9yQXR0YWNobWVudHM9VCxuLmRlcHRoQXR0YWNobWVudD1NLG4uc3RlbmNpbEF0dGFjaG1lbnQ9UyxuLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQ9RSxyLmNvbG9yPVQubWFwKGYpLHIuZGVwdGg9ZihNKSxyLnN0ZW5jaWw9ZihTKSxyLmRlcHRoU3RlbmNpbD1mKEUpLHIud2lkdGg9bi53aWR0aCxyLmhlaWdodD1uLmhlaWdodCxtKG4pLHJ9dmFyIG49bmV3IGQ7cmV0dXJuIGEuZnJhbWVidWZmZXJDb3VudCsrLHIodCxlKSxqKHIse3Jlc2l6ZTpmdW5jdGlvbih0LGUpe3ZhciBpPU1hdGgubWF4KDB8dCwxKSxhPU1hdGgubWF4KDB8ZXx8aSwxKTtpZihpPT09bi53aWR0aCYmYT09PW4uaGVpZ2h0KXJldHVybiByO2Zvcih2YXIgbz1uLmNvbG9yQXR0YWNobWVudHMscz0wO3M8by5sZW5ndGg7KytzKXAob1tzXSxpLGEpO3JldHVybiBwKG4uZGVwdGhBdHRhY2htZW50LGksYSkscChuLnN0ZW5jaWxBdHRhY2htZW50LGksYSkscChuLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQsaSxhKSxuLndpZHRoPXIud2lkdGg9aSxuLmhlaWdodD1yLmhlaWdodD1hLG0obikscn0sX3JlZ2xUeXBlOlwiZnJhbWVidWZmZXJcIixfZnJhbWVidWZmZXI6bixkZXN0cm95OmZ1bmN0aW9uKCl7dihuKSxnKG4pfSx1c2U6ZnVuY3Rpb24odCl7eC5zZXRGQk8oe2ZyYW1lYnVmZmVyOnJ9LHQpfX0pfXZhciB4PXtjdXI6bnVsbCxuZXh0Om51bGwsZGlydHk6ITEsc2V0RkJPOm51bGx9LGI9W1wicmdiYVwiXSxfPVtcInJnYmE0XCIsXCJyZ2I1NjVcIixcInJnYjUgYTFcIl07ZS5leHRfc3JnYiYmXy5wdXNoKFwic3JnYmFcIiksZS5leHRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQmJl8ucHVzaChcInJnYmExNmZcIixcInJnYjE2ZlwiKSxlLndlYmdsX2NvbG9yX2J1ZmZlcl9mbG9hdCYmXy5wdXNoKFwicmdiYTMyZlwiKTt2YXIgdz1bXCJ1aW50OFwiXTtlLm9lc190ZXh0dXJlX2hhbGZfZmxvYXQmJncucHVzaChcImhhbGYgZmxvYXRcIixcImZsb2F0MTZcIiksZS5vZXNfdGV4dHVyZV9mbG9hdCYmdy5wdXNoKFwiZmxvYXRcIixcImZsb2F0MzJcIik7dmFyIGs9MCxBPXt9O3JldHVybiBqKHgse2dldEZyYW1lYnVmZmVyOmZ1bmN0aW9uKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJlwiZnJhbWVidWZmZXJcIj09PXQuX3JlZ2xUeXBlJiYodD10Ll9mcmFtZWJ1ZmZlcilpbnN0YW5jZW9mIGQ/dDpudWxsfSxjcmVhdGU6eSxjcmVhdGVDdWJlOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7dmFyIGksYT17Y29sb3I6bnVsbH0sbz0wLHM9bnVsbDtpPVwicmdiYVwiO3ZhciBsPVwidWludDhcIixjPTE7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQ/bz0wfHQ6dD8oXCJzaGFwZVwiaW4gdD9vPXQuc2hhcGVbMF06KFwicmFkaXVzXCJpbiB0JiYobz0wfHQucmFkaXVzKSxcIndpZHRoXCJpbiB0P289MHx0LndpZHRoOlwiaGVpZ2h0XCJpbiB0JiYobz0wfHQuaGVpZ2h0KSksKFwiY29sb3JcImluIHR8fFwiY29sb3JzXCJpbiB0KSYmKHM9dC5jb2xvcnx8dC5jb2xvcnMsQXJyYXkuaXNBcnJheShzKSksc3x8KFwiY29sb3JDb3VudFwiaW4gdCYmKGM9MHx0LmNvbG9yQ291bnQpLFwiY29sb3JUeXBlXCJpbiB0JiYobD10LmNvbG9yVHlwZSksXCJjb2xvckZvcm1hdFwiaW4gdCYmKGk9dC5jb2xvckZvcm1hdCkpLFwiZGVwdGhcImluIHQmJihhLmRlcHRoPXQuZGVwdGgpLFwic3RlbmNpbFwiaW4gdCYmKGEuc3RlbmNpbD10LnN0ZW5jaWwpLFwiZGVwdGhTdGVuY2lsXCJpbiB0JiYoYS5kZXB0aFN0ZW5jaWw9dC5kZXB0aFN0ZW5jaWwpKTpvPTEscylpZihBcnJheS5pc0FycmF5KHMpKWZvcih0PVtdLGk9MDtpPHMubGVuZ3RoOysraSl0W2ldPXNbaV07ZWxzZSB0PVtzXTtlbHNlIGZvcih0PUFycmF5KGMpLHM9e3JhZGl1czpvLGZvcm1hdDppLHR5cGU6bH0saT0wO2k8YzsrK2kpdFtpXT1uLmNyZWF0ZUN1YmUocyk7Zm9yKGEuY29sb3I9QXJyYXkodC5sZW5ndGgpLGk9MDtpPHQubGVuZ3RoOysraSljPXRbaV0sbz1vfHxjLndpZHRoLGEuY29sb3JbaV09e3RhcmdldDozNDA2OSxkYXRhOnRbaV19O2ZvcihpPTA7Nj5pOysraSl7Zm9yKGM9MDtjPHQubGVuZ3RoOysrYylhLmNvbG9yW2NdLnRhcmdldD0zNDA2OStpOzA8aSYmKGEuZGVwdGg9clswXS5kZXB0aCxhLnN0ZW5jaWw9clswXS5zdGVuY2lsLGEuZGVwdGhTdGVuY2lsPXJbMF0uZGVwdGhTdGVuY2lsKSxyW2ldP3JbaV0oYSk6cltpXT15KGEpfXJldHVybiBqKGUse3dpZHRoOm8saGVpZ2h0Om8sY29sb3I6dH0pfXZhciByPUFycmF5KDYpO3JldHVybiBlKHQpLGooZSx7ZmFjZXM6cixyZXNpemU6ZnVuY3Rpb24odCl7dmFyIG49MHx0O2lmKG49PT1lLndpZHRoKXJldHVybiBlO3ZhciBpPWUuY29sb3I7Zm9yKHQ9MDt0PGkubGVuZ3RoOysrdClpW3RdLnJlc2l6ZShuKTtmb3IodD0wOzY+dDsrK3Qpclt0XS5yZXNpemUobik7cmV0dXJuIGUud2lkdGg9ZS5oZWlnaHQ9bixlfSxfcmVnbFR5cGU6XCJmcmFtZWJ1ZmZlckN1YmVcIixkZXN0cm95OmZ1bmN0aW9uKCl7ci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZGVzdHJveSgpfSl9fSl9LGNsZWFyOmZ1bmN0aW9uKCl7WChBKS5mb3JFYWNoKHYpfSxyZXN0b3JlOmZ1bmN0aW9uKCl7eC5jdXI9bnVsbCx4Lm5leHQ9bnVsbCx4LmRpcnR5PSEwLFgoQSkuZm9yRWFjaChmdW5jdGlvbihlKXtlLmZyYW1lYnVmZmVyPXQuY3JlYXRlRnJhbWVidWZmZXIoKSxtKGUpfSl9fSl9ZnVuY3Rpb24gTSgpe3RoaXMudz10aGlzLno9dGhpcy55PXRoaXMueD10aGlzLnN0YXRlPTAsdGhpcy5idWZmZXI9bnVsbCx0aGlzLnNpemU9MCx0aGlzLm5vcm1hbGl6ZWQ9ITEsdGhpcy50eXBlPTUxMjYsdGhpcy5kaXZpc29yPXRoaXMuc3RyaWRlPXRoaXMub2Zmc2V0PTB9ZnVuY3Rpb24gUyh0LGUscixuKXtmdW5jdGlvbiBpKHQsZSxyLG4pe3RoaXMubmFtZT10LHRoaXMuaWQ9ZSx0aGlzLmxvY2F0aW9uPXIsdGhpcy5pbmZvPW59ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKWlmKHRbcl0uaWQ9PT1lLmlkKXJldHVybiB2b2lkKHRbcl0ubG9jYXRpb249ZS5sb2NhdGlvbik7dC5wdXNoKGUpfWZ1bmN0aW9uIG8ocixuLGkpe2lmKCEobz0oaT0zNTYzMj09PXI/Yzp1KVtuXSkpe3ZhciBhPWUuc3RyKG4pLG89dC5jcmVhdGVTaGFkZXIocik7dC5zaGFkZXJTb3VyY2UobyxhKSx0LmNvbXBpbGVTaGFkZXIobyksaVtuXT1vfXJldHVybiBvfWZ1bmN0aW9uIHModCxlKXt0aGlzLmlkPXArKyx0aGlzLmZyYWdJZD10LHRoaXMudmVydElkPWUsdGhpcy5wcm9ncmFtPW51bGwsdGhpcy51bmlmb3Jtcz1bXSx0aGlzLmF0dHJpYnV0ZXM9W10sbi5wcm9maWxlJiYodGhpcy5zdGF0cz17dW5pZm9ybXNDb3VudDowLGF0dHJpYnV0ZXNDb3VudDowfSl9ZnVuY3Rpb24gbChyLHMpe3ZhciBsLGM7bD1vKDM1NjMyLHIuZnJhZ0lkKSxjPW8oMzU2MzMsci52ZXJ0SWQpO3ZhciB1PXIucHJvZ3JhbT10LmNyZWF0ZVByb2dyYW0oKTt0LmF0dGFjaFNoYWRlcih1LGwpLHQuYXR0YWNoU2hhZGVyKHUsYyksdC5saW5rUHJvZ3JhbSh1KTt2YXIgaD10LmdldFByb2dyYW1QYXJhbWV0ZXIodSwzNTcxOCk7bi5wcm9maWxlJiYoci5zdGF0cy51bmlmb3Jtc0NvdW50PWgpO3ZhciBmPXIudW5pZm9ybXM7Zm9yKGw9MDtsPGg7KytsKWlmKGM9dC5nZXRBY3RpdmVVbmlmb3JtKHUsbCkpaWYoMTxjLnNpemUpZm9yKHZhciBwPTA7cDxjLnNpemU7KytwKXt2YXIgZD1jLm5hbWUucmVwbGFjZShcIlswXVwiLFwiW1wiK3ArXCJdXCIpO2EoZixuZXcgaShkLGUuaWQoZCksdC5nZXRVbmlmb3JtTG9jYXRpb24odSxkKSxjKSl9ZWxzZSBhKGYsbmV3IGkoYy5uYW1lLGUuaWQoYy5uYW1lKSx0LmdldFVuaWZvcm1Mb2NhdGlvbih1LGMubmFtZSksYykpO2ZvcihoPXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcih1LDM1NzIxKSxuLnByb2ZpbGUmJihyLnN0YXRzLmF0dHJpYnV0ZXNDb3VudD1oKSxmPXIuYXR0cmlidXRlcyxsPTA7bDxoOysrbCkoYz10LmdldEFjdGl2ZUF0dHJpYih1LGwpKSYmYShmLG5ldyBpKGMubmFtZSxlLmlkKGMubmFtZSksdC5nZXRBdHRyaWJMb2NhdGlvbih1LGMubmFtZSksYykpfXZhciBjPXt9LHU9e30saD17fSxmPVtdLHA9MDtyZXR1cm4gbi5wcm9maWxlJiYoci5nZXRNYXhVbmlmb3Jtc0NvdW50PWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gZi5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uuc3RhdHMudW5pZm9ybXNDb3VudD50JiYodD1lLnN0YXRzLnVuaWZvcm1zQ291bnQpfSksdH0sci5nZXRNYXhBdHRyaWJ1dGVzQ291bnQ9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBmLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5zdGF0cy5hdHRyaWJ1dGVzQ291bnQ+dCYmKHQ9ZS5zdGF0cy5hdHRyaWJ1dGVzQ291bnQpfSksdH0pLHtjbGVhcjpmdW5jdGlvbigpe3ZhciBlPXQuZGVsZXRlU2hhZGVyLmJpbmQodCk7WChjKS5mb3JFYWNoKGUpLGM9e30sWCh1KS5mb3JFYWNoKGUpLHU9e30sZi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QuZGVsZXRlUHJvZ3JhbShlLnByb2dyYW0pfSksZi5sZW5ndGg9MCxoPXt9LHIuc2hhZGVyQ291bnQ9MH0scHJvZ3JhbTpmdW5jdGlvbih0LGUsbil7dmFyIGk9aFtlXTtpfHwoaT1oW2VdPXt9KTt2YXIgYT1pW3RdO3JldHVybiBhfHwoYT1uZXcgcyhlLHQpLHIuc2hhZGVyQ291bnQrKyxsKGEpLGlbdF09YSxmLnB1c2goYSkpLGF9LHJlc3RvcmU6ZnVuY3Rpb24oKXtjPXt9LHU9e307Zm9yKHZhciB0PTA7dDxmLmxlbmd0aDsrK3QpbChmW3RdKX0sc2hhZGVyOm8sZnJhZzotMSx2ZXJ0Oi0xfX1mdW5jdGlvbiBFKHQsZSxyLG4saSxhLG8pe2Z1bmN0aW9uIHMoaSl7dmFyIGE7YT1udWxsPT09ZS5uZXh0PzUxMjE6ZS5uZXh0LmNvbG9yQXR0YWNobWVudHNbMF0udGV4dHVyZS5fdGV4dHVyZS50eXBlO3ZhciBvPTAscz0wLGw9bi5mcmFtZWJ1ZmZlcldpZHRoLGM9bi5mcmFtZWJ1ZmZlckhlaWdodCx1PW51bGw7cmV0dXJuIFcoaSk/dT1pOmkmJihvPTB8aS54LHM9MHxpLnksbD0wfChpLndpZHRofHxuLmZyYW1lYnVmZmVyV2lkdGgtbyksYz0wfChpLmhlaWdodHx8bi5mcmFtZWJ1ZmZlckhlaWdodC1zKSx1PWkuZGF0YXx8bnVsbCkscigpLGk9bCpjKjQsdXx8KDUxMjE9PT1hP3U9bmV3IFVpbnQ4QXJyYXkoaSk6NTEyNj09PWEmJih1PXV8fG5ldyBGbG9hdDMyQXJyYXkoaSkpKSx0LnBpeGVsU3RvcmVpKDMzMzMsNCksdC5yZWFkUGl4ZWxzKG8scyxsLGMsNjQwOCxhLHUpLHV9cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0JiZcImZyYW1lYnVmZmVyXCJpbiB0P2Z1bmN0aW9uKHQpe3ZhciByO3JldHVybiBlLnNldEZCTyh7ZnJhbWVidWZmZXI6dC5mcmFtZWJ1ZmZlcn0sZnVuY3Rpb24oKXtyPXModCl9KSxyfSh0KTpzKHQpfX1mdW5jdGlvbiBDKHQpe3JldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KX1mdW5jdGlvbiBMKHQpe3JldHVybiBDKHQpLmpvaW4oXCJcIil9ZnVuY3Rpb24geigpe2Z1bmN0aW9uIHQoKXt2YXIgdD1bXSxlPVtdO3JldHVybiBqKGZ1bmN0aW9uKCl7dC5wdXNoLmFwcGx5KHQsQyhhcmd1bWVudHMpKX0se2RlZjpmdW5jdGlvbigpe3ZhciBuPVwidlwiK3IrKztyZXR1cm4gZS5wdXNoKG4pLDA8YXJndW1lbnRzLmxlbmd0aCYmKHQucHVzaChuLFwiPVwiKSx0LnB1c2guYXBwbHkodCxDKGFyZ3VtZW50cykpLHQucHVzaChcIjtcIikpLG59LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIEwoWzA8ZS5sZW5ndGg/XCJ2YXIgXCIrZStcIjtcIjpcIlwiLEwodCldKX19KX1mdW5jdGlvbiBlKCl7ZnVuY3Rpb24gZSh0LGUpe24odCxlLFwiPVwiLHIuZGVmKHQsZSksXCI7XCIpfXZhciByPXQoKSxuPXQoKSxpPXIudG9TdHJpbmcsYT1uLnRvU3RyaW5nO3JldHVybiBqKGZ1bmN0aW9uKCl7ci5hcHBseShyLEMoYXJndW1lbnRzKSl9LHtkZWY6ci5kZWYsZW50cnk6cixleGl0Om4sc2F2ZTplLHNldDpmdW5jdGlvbih0LG4saSl7ZSh0LG4pLHIodCxuLFwiPVwiLGksXCI7XCIpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBpKCkrYSgpfX0pfXZhciByPTAsbj1bXSxpPVtdLGE9dCgpLG89e307cmV0dXJue2dsb2JhbDphLGxpbms6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxpLmxlbmd0aDsrK2UpaWYoaVtlXT09PXQpcmV0dXJuIG5bZV07cmV0dXJuIGU9XCJnXCIrcisrLG4ucHVzaChlKSxpLnB1c2godCksZX0sYmxvY2s6dCxwcm9jOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3ZhciB0PVwiYVwiK2kubGVuZ3RoO3JldHVybiBpLnB1c2godCksdH12YXIgaT1bXTtyPXJ8fDA7Zm9yKHZhciBhPTA7YTxyOysrYSluKCk7dmFyIHM9KGE9ZSgpKS50b1N0cmluZztyZXR1cm4gb1t0XT1qKGEse2FyZzpuLHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIEwoW1wiZnVuY3Rpb24oXCIsaS5qb2luKCksXCIpe1wiLHMoKSxcIn1cIl0pfX0pfSxzY29wZTplLGNvbmQ6ZnVuY3Rpb24oKXt2YXIgdD1MKGFyZ3VtZW50cykscj1lKCksbj1lKCksaT1yLnRvU3RyaW5nLGE9bi50b1N0cmluZztyZXR1cm4gaihyLHt0aGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHIuYXBwbHkocixDKGFyZ3VtZW50cykpLHRoaXN9LGVsc2U6ZnVuY3Rpb24oKXtyZXR1cm4gbi5hcHBseShuLEMoYXJndW1lbnRzKSksdGhpc30sdG9TdHJpbmc6ZnVuY3Rpb24oKXt2YXIgZT1hKCk7cmV0dXJuIGUmJihlPVwiZWxzZXtcIitlK1wifVwiKSxMKFtcImlmKFwiLHQsXCIpe1wiLGkoKSxcIn1cIixlXSl9fSl9LGNvbXBpbGU6ZnVuY3Rpb24oKXt2YXIgdD1bJ1widXNlIHN0cmljdFwiOycsYSxcInJldHVybiB7XCJdO09iamVjdC5rZXlzKG8pLmZvckVhY2goZnVuY3Rpb24oZSl7dC5wdXNoKCdcIicsZSwnXCI6JyxvW2VdLnRvU3RyaW5nKCksXCIsXCIpfSksdC5wdXNoKFwifVwiKTt2YXIgZT1MKHQpLnJlcGxhY2UoLzsvZyxcIjtcXG5cIikucmVwbGFjZSgvfS9nLFwifVxcblwiKS5yZXBsYWNlKC97L2csXCJ7XFxuXCIpO3JldHVybiBGdW5jdGlvbi5hcHBseShudWxsLG4uY29uY2F0KGUpKS5hcHBseShudWxsLGkpfX19ZnVuY3Rpb24gTyh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KXx8Vyh0KXx8bCh0KX1mdW5jdGlvbiBJKHQpe3JldHVybiB0LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm5cInZpZXdwb3J0XCI9PT10Py0xOlwidmlld3BvcnRcIj09PWU/MTp0PGU/LTE6MX0pfWZ1bmN0aW9uIEQodCxlLHIsbil7dGhpcy50aGlzRGVwPXQsdGhpcy5jb250ZXh0RGVwPWUsdGhpcy5wcm9wRGVwPXIsdGhpcy5hcHBlbmQ9bn1mdW5jdGlvbiBQKHQpe3JldHVybiB0JiYhKHQudGhpc0RlcHx8dC5jb250ZXh0RGVwfHx0LnByb3BEZXApfWZ1bmN0aW9uIFIodCl7cmV0dXJuIG5ldyBEKCExLCExLCExLHQpfWZ1bmN0aW9uIEYodCxlKXt2YXIgcj10LnR5cGU7cmV0dXJuIDA9PT1yP25ldyBEKCEwLDE8PShyPXQuZGF0YS5sZW5ndGgpLDI8PXIsZSk6ND09PXI/bmV3IEQoKHI9dC5kYXRhKS50aGlzRGVwLHIuY29udGV4dERlcCxyLnByb3BEZXAsZSk6bmV3IEQoMz09PXIsMj09PXIsMT09PXIsZSl9ZnVuY3Rpb24gQih0LGUscixuLGksbyxzLGwsYyx1LGgsZixwLGQsZyl7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdC5yZXBsYWNlKFwiLlwiLFwiX1wiKX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj1tKHQpO250LnB1c2godCksZXRbbl09dHRbbl09ISFyLGl0W25dPWV9ZnVuY3Rpb24geCh0LGUscil7dmFyIG49bSh0KTtudC5wdXNoKHQpLEFycmF5LmlzQXJyYXkocik/KHR0W25dPXIuc2xpY2UoKSxldFtuXT1yLnNsaWNlKCkpOnR0W25dPWV0W25dPXIsYXRbbl09ZX1mdW5jdGlvbiBiKCl7dmFyIHQ9eigpLHI9dC5saW5rLG49dC5nbG9iYWw7dC5pZD1sdCsrLHQuYmF0Y2hJZD1cIjBcIjt2YXIgaT1yKG90KSxhPXQuc2hhcmVkPXtwcm9wczpcImEwXCJ9O09iamVjdC5rZXlzKG90KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2FbdF09bi5kZWYoaSxcIi5cIix0KX0pO3ZhciBvPXQubmV4dD17fSxzPXQuY3VycmVudD17fTtPYmplY3Qua2V5cyhhdCkuZm9yRWFjaChmdW5jdGlvbih0KXtBcnJheS5pc0FycmF5KHR0W3RdKSYmKG9bdF09bi5kZWYoYS5uZXh0LFwiLlwiLHQpLHNbdF09bi5kZWYoYS5jdXJyZW50LFwiLlwiLHQpKX0pO3ZhciBsPXQuY29uc3RhbnRzPXt9O09iamVjdC5rZXlzKHN0KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2xbdF09bi5kZWYoSlNPTi5zdHJpbmdpZnkoc3RbdF0pKX0pLHQuaW52b2tlPWZ1bmN0aW9uKGUsbil7c3dpdGNoKG4udHlwZSl7Y2FzZSAwOnZhciBpPVtcInRoaXNcIixhLmNvbnRleHQsYS5wcm9wcyx0LmJhdGNoSWRdO3JldHVybiBlLmRlZihyKG4uZGF0YSksXCIuY2FsbChcIixpLnNsaWNlKDAsTWF0aC5tYXgobi5kYXRhLmxlbmd0aCsxLDQpKSxcIilcIik7Y2FzZSAxOnJldHVybiBlLmRlZihhLnByb3BzLG4uZGF0YSk7Y2FzZSAyOnJldHVybiBlLmRlZihhLmNvbnRleHQsbi5kYXRhKTtjYXNlIDM6cmV0dXJuIGUuZGVmKFwidGhpc1wiLG4uZGF0YSk7Y2FzZSA0OnJldHVybiBuLmRhdGEuYXBwZW5kKHQsZSksbi5kYXRhLnJlZn19LHQuYXR0cmliQ2FjaGU9e307dmFyIGM9e307cmV0dXJuIHQuc2NvcGVBdHRyaWI9ZnVuY3Rpb24odCl7aWYoKHQ9ZS5pZCh0KSlpbiBjKXJldHVybiBjW3RdO3ZhciBuPXUuc2NvcGVbdF07cmV0dXJuIG58fChuPXUuc2NvcGVbdF09bmV3IFopLGNbdF09cihuKX0sdH1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9dC5zdGF0aWMsbj10LmR5bmFtaWM7aWYoXCJmcmFtZWJ1ZmZlclwiaW4gcil7dmFyIGk9ci5mcmFtZWJ1ZmZlcjtyZXR1cm4gaT8oaT1sLmdldEZyYW1lYnVmZmVyKGkpLFIoZnVuY3Rpb24odCxlKXt2YXIgcj10LmxpbmsoaSksbj10LnNoYXJlZDtyZXR1cm4gZS5zZXQobi5mcmFtZWJ1ZmZlcixcIi5uZXh0XCIsciksbj1uLmNvbnRleHQsZS5zZXQobixcIi5mcmFtZWJ1ZmZlcldpZHRoXCIscitcIi53aWR0aFwiKSxlLnNldChuLFwiLmZyYW1lYnVmZmVySGVpZ2h0XCIscitcIi5oZWlnaHRcIikscn0pKTpSKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zaGFyZWQ7cmV0dXJuIGUuc2V0KHIuZnJhbWVidWZmZXIsXCIubmV4dFwiLFwibnVsbFwiKSxyPXIuY29udGV4dCxlLnNldChyLFwiLmZyYW1lYnVmZmVyV2lkdGhcIixyK1wiLmRyYXdpbmdCdWZmZXJXaWR0aFwiKSxlLnNldChyLFwiLmZyYW1lYnVmZmVySGVpZ2h0XCIscitcIi5kcmF3aW5nQnVmZmVySGVpZ2h0XCIpLFwibnVsbFwifSl9aWYoXCJmcmFtZWJ1ZmZlclwiaW4gbil7dmFyIGE9bi5mcmFtZWJ1ZmZlcjtyZXR1cm4gRihhLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pbnZva2UoZSxhKSxuPXQuc2hhcmVkLGk9bi5mcmFtZWJ1ZmZlcjtyPWUuZGVmKGksXCIuZ2V0RnJhbWVidWZmZXIoXCIscixcIilcIik7cmV0dXJuIGUuc2V0KGksXCIubmV4dFwiLHIpLG49bi5jb250ZXh0LGUuc2V0KG4sXCIuZnJhbWVidWZmZXJXaWR0aFwiLHIrXCI/XCIrcitcIi53aWR0aDpcIituK1wiLmRyYXdpbmdCdWZmZXJXaWR0aFwiKSxlLnNldChuLFwiLmZyYW1lYnVmZmVySGVpZ2h0XCIscitcIj9cIityK1wiLmhlaWdodDpcIituK1wiLmRyYXdpbmdCdWZmZXJIZWlnaHRcIikscn0pfXJldHVybiBudWxsfWZ1bmN0aW9uIHcodCl7ZnVuY3Rpb24gcih0KXtpZih0IGluIG4pe3ZhciByPWUuaWQoblt0XSk7cmV0dXJuKHQ9UihmdW5jdGlvbigpe3JldHVybiByfSkpLmlkPXIsdH1pZih0IGluIGkpe3ZhciBhPWlbdF07cmV0dXJuIEYoYSxmdW5jdGlvbih0LGUpe3ZhciByPXQuaW52b2tlKGUsYSk7cmV0dXJuIGUuZGVmKHQuc2hhcmVkLnN0cmluZ3MsXCIuaWQoXCIscixcIilcIil9KX1yZXR1cm4gbnVsbH12YXIgbj10LnN0YXRpYyxpPXQuZHluYW1pYyxhPXIoXCJmcmFnXCIpLG89cihcInZlcnRcIikscz1udWxsO3JldHVybiBQKGEpJiZQKG8pPyhzPWgucHJvZ3JhbShvLmlkLGEuaWQpLHQ9UihmdW5jdGlvbih0LGUpe3JldHVybiB0Lmxpbmsocyl9KSk6dD1uZXcgRChhJiZhLnRoaXNEZXB8fG8mJm8udGhpc0RlcCxhJiZhLmNvbnRleHREZXB8fG8mJm8uY29udGV4dERlcCxhJiZhLnByb3BEZXB8fG8mJm8ucHJvcERlcCxmdW5jdGlvbih0LGUpe3ZhciByLG4saT10LnNoYXJlZC5zaGFkZXI7cmV0dXJuIHI9YT9hLmFwcGVuZCh0LGUpOmUuZGVmKGksXCIuXCIsXCJmcmFnXCIpLG49bz9vLmFwcGVuZCh0LGUpOmUuZGVmKGksXCIuXCIsXCJ2ZXJ0XCIpLGUuZGVmKGkrXCIucHJvZ3JhbShcIituK1wiLFwiK3IrXCIpXCIpfSkse2ZyYWc6YSx2ZXJ0Om8scHJvZ1Zhcjp0LHByb2dyYW06c319ZnVuY3Rpb24gayh0LGUpe2Z1bmN0aW9uIHIodCxlKXtpZih0IGluIG4pe3ZhciByPTB8blt0XTtyZXR1cm4gUihmdW5jdGlvbih0LG4pe3JldHVybiBlJiYodC5PRkZTRVQ9cikscn0pfWlmKHQgaW4gaSl7dmFyIG89aVt0XTtyZXR1cm4gRihvLGZ1bmN0aW9uKHQscil7dmFyIG49dC5pbnZva2UocixvKTtyZXR1cm4gZSYmKHQuT0ZGU0VUPW4pLG59KX1yZXR1cm4gZSYmYT9SKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuT0ZGU0VUPVwiMFwiLDB9KTpudWxsfXZhciBuPXQuc3RhdGljLGk9dC5keW5hbWljLGE9ZnVuY3Rpb24oKXtpZihcImVsZW1lbnRzXCJpbiBuKXt2YXIgdD1uLmVsZW1lbnRzO08odCk/dD1vLmdldEVsZW1lbnRzKG8uY3JlYXRlKHQsITApKTp0JiYodD1vLmdldEVsZW1lbnRzKHQpKTt2YXIgZT1SKGZ1bmN0aW9uKGUscil7aWYodCl7dmFyIG49ZS5saW5rKHQpO3JldHVybiBlLkVMRU1FTlRTPW59cmV0dXJuIGUuRUxFTUVOVFM9bnVsbH0pO3JldHVybiBlLnZhbHVlPXQsZX1pZihcImVsZW1lbnRzXCJpbiBpKXt2YXIgcj1pLmVsZW1lbnRzO3JldHVybiBGKHIsZnVuY3Rpb24odCxlKXt2YXIgbj0oaT10LnNoYXJlZCkuaXNCdWZmZXJBcmdzLGk9aS5lbGVtZW50cyxhPXQuaW52b2tlKGUsciksbz1lLmRlZihcIm51bGxcIik7bj1lLmRlZihuLFwiKFwiLGEsXCIpXCIpLGE9dC5jb25kKG4pLnRoZW4obyxcIj1cIixpLFwiLmNyZWF0ZVN0cmVhbShcIixhLFwiKTtcIikuZWxzZShvLFwiPVwiLGksXCIuZ2V0RWxlbWVudHMoXCIsYSxcIik7XCIpO3JldHVybiBlLmVudHJ5KGEpLGUuZXhpdCh0LmNvbmQobikudGhlbihpLFwiLmRlc3Ryb3lTdHJlYW0oXCIsbyxcIik7XCIpKSx0LkVMRU1FTlRTPW99KX1yZXR1cm4gbnVsbH0oKSxzPXIoXCJvZmZzZXRcIiwhMCk7cmV0dXJue2VsZW1lbnRzOmEscHJpbWl0aXZlOmZ1bmN0aW9uKCl7aWYoXCJwcmltaXRpdmVcImluIG4pe3ZhciB0PW4ucHJpbWl0aXZlO3JldHVybiBSKGZ1bmN0aW9uKGUscil7cmV0dXJuIHJ0W3RdfSl9aWYoXCJwcmltaXRpdmVcImluIGkpe3ZhciBlPWkucHJpbWl0aXZlO3JldHVybiBGKGUsZnVuY3Rpb24odCxyKXt2YXIgbj10LmNvbnN0YW50cy5wcmltVHlwZXMsaT10Lmludm9rZShyLGUpO3JldHVybiByLmRlZihuLFwiW1wiLGksXCJdXCIpfSl9cmV0dXJuIGE/UChhKT9hLnZhbHVlP1IoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZWYodC5FTEVNRU5UUyxcIi5wcmltVHlwZVwiKX0pOlIoZnVuY3Rpb24oKXtyZXR1cm4gNH0pOm5ldyBEKGEudGhpc0RlcCxhLmNvbnRleHREZXAsYS5wcm9wRGVwLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5FTEVNRU5UUztyZXR1cm4gZS5kZWYocixcIj9cIixyLFwiLnByaW1UeXBlOlwiLDQpfSk6bnVsbH0oKSxjb3VudDpmdW5jdGlvbigpe2lmKFwiY291bnRcImluIG4pe3ZhciB0PTB8bi5jb3VudDtyZXR1cm4gUihmdW5jdGlvbigpe3JldHVybiB0fSl9aWYoXCJjb3VudFwiaW4gaSl7dmFyIGU9aS5jb3VudDtyZXR1cm4gRihlLGZ1bmN0aW9uKHQscil7cmV0dXJuIHQuaW52b2tlKHIsZSl9KX1yZXR1cm4gYT9QKGEpP2E/cz9uZXcgRChzLnRoaXNEZXAscy5jb250ZXh0RGVwLHMucHJvcERlcCxmdW5jdGlvbih0LGUpe3JldHVybiBlLmRlZih0LkVMRU1FTlRTLFwiLnZlcnRDb3VudC1cIix0Lk9GRlNFVCl9KTpSKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGVmKHQuRUxFTUVOVFMsXCIudmVydENvdW50XCIpfSk6UihmdW5jdGlvbigpe3JldHVybi0xfSk6bmV3IEQoYS50aGlzRGVwfHxzLnRoaXNEZXAsYS5jb250ZXh0RGVwfHxzLmNvbnRleHREZXAsYS5wcm9wRGVwfHxzLnByb3BEZXAsZnVuY3Rpb24odCxlKXt2YXIgcj10LkVMRU1FTlRTO3JldHVybiB0Lk9GRlNFVD9lLmRlZihyLFwiP1wiLHIsXCIudmVydENvdW50LVwiLHQuT0ZGU0VULFwiOi0xXCIpOmUuZGVmKHIsXCI/XCIscixcIi52ZXJ0Q291bnQ6LTFcIil9KTpudWxsfSgpLGluc3RhbmNlczpyKFwiaW5zdGFuY2VzXCIsITEpLG9mZnNldDpzfX1mdW5jdGlvbiBBKHQscil7dmFyIG49dC5zdGF0aWMsYT10LmR5bmFtaWMsbz17fTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcj1uW3RdLGE9ZS5pZCh0KSxzPW5ldyBaO2lmKE8ocikpcy5zdGF0ZT0xLHMuYnVmZmVyPWkuZ2V0QnVmZmVyKGkuY3JlYXRlKHIsMzQ5NjIsITEsITApKSxzLnR5cGU9MDtlbHNlIGlmKGM9aS5nZXRCdWZmZXIocikpcy5zdGF0ZT0xLHMuYnVmZmVyPWMscy50eXBlPTA7ZWxzZSBpZihcImNvbnN0YW50XCJpbiByKXt2YXIgbD1yLmNvbnN0YW50O3MuYnVmZmVyPVwibnVsbFwiLHMuc3RhdGU9MixcIm51bWJlclwiPT10eXBlb2YgbD9zLng9bDpidC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7ZTxsLmxlbmd0aCYmKHNbdF09bFtlXSl9KX1lbHNle3ZhciBjPU8oci5idWZmZXIpP2kuZ2V0QnVmZmVyKGkuY3JlYXRlKHIuYnVmZmVyLDM0OTYyLCExLCEwKSk6aS5nZXRCdWZmZXIoci5idWZmZXIpLHU9MHxyLm9mZnNldCxoPTB8ci5zdHJpZGUsZj0wfHIuc2l6ZSxwPSEhci5ub3JtYWxpemVkLGQ9MDtcInR5cGVcImluIHImJihkPUpbci50eXBlXSkscj0wfHIuZGl2aXNvcixzLmJ1ZmZlcj1jLHMuc3RhdGU9MSxzLnNpemU9ZixzLm5vcm1hbGl6ZWQ9cCxzLnR5cGU9ZHx8Yy5kdHlwZSxzLm9mZnNldD11LHMuc3RyaWRlPWgscy5kaXZpc29yPXJ9b1t0XT1SKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5hdHRyaWJDYWNoZTtpZihhIGluIHIpcmV0dXJuIHJbYV07dmFyIG49e2lzU3RyZWFtOiExfTtyZXR1cm4gT2JqZWN0LmtleXMocykuZm9yRWFjaChmdW5jdGlvbih0KXtuW3RdPXNbdF19KSxzLmJ1ZmZlciYmKG4uYnVmZmVyPXQubGluayhzLmJ1ZmZlciksbi50eXBlPW4udHlwZXx8bi5idWZmZXIrXCIuZHR5cGVcIiksclthXT1ufSl9KSxPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWFbdF07b1t0XT1GKGUsZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBuKHQpe3IobFt0XSxcIj1cIixpLFwiLlwiLHQsXCJ8MDtcIil9dmFyIGk9dC5pbnZva2UocixlKSxhPXQuc2hhcmVkLG89YS5pc0J1ZmZlckFyZ3Mscz1hLmJ1ZmZlcixsPXtpc1N0cmVhbTpyLmRlZighMSl9LGM9bmV3IFo7Yy5zdGF0ZT0xLE9iamVjdC5rZXlzKGMpLmZvckVhY2goZnVuY3Rpb24odCl7bFt0XT1yLmRlZihcIlwiK2NbdF0pfSk7dmFyIHU9bC5idWZmZXIsaD1sLnR5cGU7cmV0dXJuIHIoXCJpZihcIixvLFwiKFwiLGksXCIpKXtcIixsLmlzU3RyZWFtLFwiPXRydWU7XCIsdSxcIj1cIixzLFwiLmNyZWF0ZVN0cmVhbShcIiwzNDk2MixcIixcIixpLFwiKTtcIixoLFwiPVwiLHUsXCIuZHR5cGU7XCIsXCJ9ZWxzZXtcIix1LFwiPVwiLHMsXCIuZ2V0QnVmZmVyKFwiLGksXCIpO1wiLFwiaWYoXCIsdSxcIil7XCIsaCxcIj1cIix1LFwiLmR0eXBlO1wiLCd9ZWxzZSBpZihcImNvbnN0YW50XCIgaW4gJyxpLFwiKXtcIixsLnN0YXRlLFwiPVwiLDIsXCI7XCIsXCJpZih0eXBlb2YgXCIraSsnLmNvbnN0YW50ID09PSBcIm51bWJlclwiKXsnLGxbYnRbMF1dLFwiPVwiLGksXCIuY29uc3RhbnQ7XCIsYnQuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBsW3RdfSkuam9pbihcIj1cIiksXCI9MDtcIixcIn1lbHNle1wiLGJ0Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBsW3RdK1wiPVwiK2krXCIuY29uc3RhbnQubGVuZ3RoPlwiK2UrXCI/XCIraStcIi5jb25zdGFudFtcIitlK1wiXTowO1wifSkuam9pbihcIlwiKSxcIn19ZWxzZXtcIixcImlmKFwiLG8sXCIoXCIsaSxcIi5idWZmZXIpKXtcIix1LFwiPVwiLHMsXCIuY3JlYXRlU3RyZWFtKFwiLDM0OTYyLFwiLFwiLGksXCIuYnVmZmVyKTtcIixcIn1lbHNle1wiLHUsXCI9XCIscyxcIi5nZXRCdWZmZXIoXCIsaSxcIi5idWZmZXIpO1wiLFwifVwiLGgsJz1cInR5cGVcIiBpbiAnLGksXCI/XCIsYS5nbFR5cGVzLFwiW1wiLGksXCIudHlwZV06XCIsdSxcIi5kdHlwZTtcIixsLm5vcm1hbGl6ZWQsXCI9ISFcIixpLFwiLm5vcm1hbGl6ZWQ7XCIpLG4oXCJzaXplXCIpLG4oXCJvZmZzZXRcIiksbihcInN0cmlkZVwiKSxuKFwiZGl2aXNvclwiKSxyKFwifX1cIiksci5leGl0KFwiaWYoXCIsbC5pc1N0cmVhbSxcIil7XCIscyxcIi5kZXN0cm95U3RyZWFtKFwiLHUsXCIpO1wiLFwifVwiKSxsfSl9KSxvfWZ1bmN0aW9uIFQodCxlLHIsbixpKXt2YXIgbz1fKHQpLHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7aWYodCBpbiBpKXt2YXIgcj1pW3RdO3Q9ITA7dmFyIG4sbyxzPTB8ci54LGw9MHxyLnk7cmV0dXJuXCJ3aWR0aFwiaW4gcj9uPTB8ci53aWR0aDp0PSExLFwiaGVpZ2h0XCJpbiByP289MHxyLmhlaWdodDp0PSExLG5ldyBEKCF0JiZlJiZlLnRoaXNEZXAsIXQmJmUmJmUuY29udGV4dERlcCwhdCYmZSYmZS5wcm9wRGVwLGZ1bmN0aW9uKHQsZSl7dmFyIGk9dC5zaGFyZWQuY29udGV4dCxhPW47XCJ3aWR0aFwiaW4gcnx8KGE9ZS5kZWYoaSxcIi5cIixcImZyYW1lYnVmZmVyV2lkdGhcIixcIi1cIixzKSk7dmFyIGM9bztyZXR1cm5cImhlaWdodFwiaW4gcnx8KGM9ZS5kZWYoaSxcIi5cIixcImZyYW1lYnVmZmVySGVpZ2h0XCIsXCItXCIsbCkpLFtzLGwsYSxjXX0pfWlmKHQgaW4gYSl7dmFyIGM9YVt0XTtyZXR1cm4gdD1GKGMsZnVuY3Rpb24odCxlKXt2YXIgcj10Lmludm9rZShlLGMpLG49dC5zaGFyZWQuY29udGV4dCxpPWUuZGVmKHIsXCIueHwwXCIpLGE9ZS5kZWYocixcIi55fDBcIik7cmV0dXJuW2ksYSxlLmRlZignXCJ3aWR0aFwiIGluICcscixcIj9cIixyLFwiLndpZHRofDA6XCIsXCIoXCIsbixcIi5cIixcImZyYW1lYnVmZmVyV2lkdGhcIixcIi1cIixpLFwiKVwiKSxyPWUuZGVmKCdcImhlaWdodFwiIGluICcscixcIj9cIixyLFwiLmhlaWdodHwwOlwiLFwiKFwiLG4sXCIuXCIsXCJmcmFtZWJ1ZmZlckhlaWdodFwiLFwiLVwiLGEsXCIpXCIpXX0pLGUmJih0LnRoaXNEZXA9dC50aGlzRGVwfHxlLnRoaXNEZXAsdC5jb250ZXh0RGVwPXQuY29udGV4dERlcHx8ZS5jb250ZXh0RGVwLHQucHJvcERlcD10LnByb3BEZXB8fGUucHJvcERlcCksdH1yZXR1cm4gZT9uZXcgRChlLnRoaXNEZXAsZS5jb250ZXh0RGVwLGUucHJvcERlcCxmdW5jdGlvbih0LGUpe3ZhciByPXQuc2hhcmVkLmNvbnRleHQ7cmV0dXJuWzAsMCxlLmRlZihyLFwiLlwiLFwiZnJhbWVidWZmZXJXaWR0aFwiKSxlLmRlZihyLFwiLlwiLFwiZnJhbWVidWZmZXJIZWlnaHRcIildfSk6bnVsbH12YXIgaT10LnN0YXRpYyxhPXQuZHluYW1pYztpZih0PW4oXCJ2aWV3cG9ydFwiKSl7dmFyIG89dDt0PW5ldyBEKHQudGhpc0RlcCx0LmNvbnRleHREZXAsdC5wcm9wRGVwLGZ1bmN0aW9uKHQsZSl7dmFyIHI9by5hcHBlbmQodCxlKSxuPXQuc2hhcmVkLmNvbnRleHQ7cmV0dXJuIGUuc2V0KG4sXCIudmlld3BvcnRXaWR0aFwiLHJbMl0pLGUuc2V0KG4sXCIudmlld3BvcnRIZWlnaHRcIixyWzNdKSxyfSl9cmV0dXJue3ZpZXdwb3J0OnQsc2Npc3Nvcl9ib3g6bihcInNjaXNzb3IuYm94XCIpfX0odCxvKSxsPWsodCksYz1mdW5jdGlvbih0LGUpe3ZhciByPXQuc3RhdGljLG49dC5keW5hbWljLGk9e307cmV0dXJuIG50LmZvckVhY2goZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLGEpe2lmKHQgaW4gcil7dmFyIHM9ZShyW3RdKTtpW29dPVIoZnVuY3Rpb24oKXtyZXR1cm4gc30pfWVsc2UgaWYodCBpbiBuKXt2YXIgbD1uW3RdO2lbb109RihsLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEodCxlLHQuaW52b2tlKGUsbCkpfSl9fXZhciBvPW0odCk7c3dpdGNoKHQpe2Nhc2VcImN1bGwuZW5hYmxlXCI6Y2FzZVwiYmxlbmQuZW5hYmxlXCI6Y2FzZVwiZGl0aGVyXCI6Y2FzZVwic3RlbmNpbC5lbmFibGVcIjpjYXNlXCJkZXB0aC5lbmFibGVcIjpjYXNlXCJzY2lzc29yLmVuYWJsZVwiOmNhc2VcInBvbHlnb25PZmZzZXQuZW5hYmxlXCI6Y2FzZVwic2FtcGxlLmFscGhhXCI6Y2FzZVwic2FtcGxlLmVuYWJsZVwiOmNhc2VcImRlcHRoLm1hc2tcIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm4gdH0sZnVuY3Rpb24odCxlLHIpe3JldHVybiByfSk7Y2FzZVwiZGVwdGguZnVuY1wiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVybiBrdFt0XX0sZnVuY3Rpb24odCxlLHIpe3JldHVybiBlLmRlZih0LmNvbnN0YW50cy5jb21wYXJlRnVuY3MsXCJbXCIscixcIl1cIil9KTtjYXNlXCJkZXB0aC5yYW5nZVwiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVybiB0fSxmdW5jdGlvbih0LGUscil7cmV0dXJuW2UuZGVmKFwiK1wiLHIsXCJbMF1cIiksZT1lLmRlZihcIitcIixyLFwiWzFdXCIpXX0pO2Nhc2VcImJsZW5kLmZ1bmNcIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm5bd3RbXCJzcmNSR0JcImluIHQ/dC5zcmNSR0I6dC5zcmNdLHd0W1wiZHN0UkdCXCJpbiB0P3QuZHN0UkdCOnQuZHN0XSx3dFtcInNyY0FscGhhXCJpbiB0P3Quc3JjQWxwaGE6dC5zcmNdLHd0W1wiZHN0QWxwaGFcImluIHQ/dC5kc3RBbHBoYTp0LmRzdF1dfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LG4pe3JldHVybiBlLmRlZignXCInLHQsbiwnXCIgaW4gJyxyLFwiP1wiLHIsXCIuXCIsdCxuLFwiOlwiLHIsXCIuXCIsdCl9dD10LmNvbnN0YW50cy5ibGVuZEZ1bmNzO3ZhciBpPW4oXCJzcmNcIixcIlJHQlwiKSxhPW4oXCJkc3RcIixcIlJHQlwiKSxvPShpPWUuZGVmKHQsXCJbXCIsaSxcIl1cIiksZS5kZWYodCxcIltcIixuKFwic3JjXCIsXCJBbHBoYVwiKSxcIl1cIikpO3JldHVybltpLGE9ZS5kZWYodCxcIltcIixhLFwiXVwiKSxvLHQ9ZS5kZWYodCxcIltcIixuKFwiZHN0XCIsXCJBbHBoYVwiKSxcIl1cIildfSk7Y2FzZVwiYmxlbmQuZXF1YXRpb25cIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdD9bJFt0XSwkW3RdXTpcIm9iamVjdFwiPT10eXBlb2YgdD9bJFt0LnJnYl0sJFt0LmFscGhhXV06dm9pZCAwfSxmdW5jdGlvbih0LGUscil7dmFyIG49dC5jb25zdGFudHMuYmxlbmRFcXVhdGlvbnMsaT1lLmRlZigpLGE9ZS5kZWYoKTtyZXR1cm4odD10LmNvbmQoXCJ0eXBlb2YgXCIsciwnPT09XCJzdHJpbmdcIicpKS50aGVuKGksXCI9XCIsYSxcIj1cIixuLFwiW1wiLHIsXCJdO1wiKSx0LmVsc2UoaSxcIj1cIixuLFwiW1wiLHIsXCIucmdiXTtcIixhLFwiPVwiLG4sXCJbXCIscixcIi5hbHBoYV07XCIpLGUodCksW2ksYV19KTtjYXNlXCJibGVuZC5jb2xvclwiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVybiBhKDQsZnVuY3Rpb24oZSl7cmV0dXJuK3RbZV19KX0sZnVuY3Rpb24odCxlLHIpe3JldHVybiBhKDQsZnVuY3Rpb24odCl7cmV0dXJuIGUuZGVmKFwiK1wiLHIsXCJbXCIsdCxcIl1cIil9KX0pO2Nhc2VcInN0ZW5jaWwubWFza1wiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVybiAwfHR9LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5kZWYocixcInwwXCIpfSk7Y2FzZVwic3RlbmNpbC5mdW5jXCI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuW2t0W3QuY21wfHxcImtlZXBcIl0sdC5yZWZ8fDAsXCJtYXNrXCJpbiB0P3QubWFzazotMV19LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bdD1lLmRlZignXCJjbXBcIiBpbiAnLHIsXCI/XCIsdC5jb25zdGFudHMuY29tcGFyZUZ1bmNzLFwiW1wiLHIsXCIuY21wXVwiLFwiOlwiLDc2ODApLGUuZGVmKHIsXCIucmVmfDBcIiksZT1lLmRlZignXCJtYXNrXCIgaW4gJyxyLFwiP1wiLHIsXCIubWFza3wwOi0xXCIpXX0pO2Nhc2VcInN0ZW5jaWwub3BGcm9udFwiOmNhc2VcInN0ZW5jaWwub3BCYWNrXCI6cmV0dXJuIGUoZnVuY3Rpb24oZSl7cmV0dXJuW1wic3RlbmNpbC5vcEJhY2tcIj09PXQ/MTAyOToxMDI4LEF0W2UuZmFpbHx8XCJrZWVwXCJdLEF0W2UuemZhaWx8fFwia2VlcFwiXSxBdFtlLnpwYXNzfHxcImtlZXBcIl1dfSxmdW5jdGlvbihlLHIsbil7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gci5kZWYoJ1wiJyx0LCdcIiBpbiAnLG4sXCI/XCIsYSxcIltcIixuLFwiLlwiLHQsXCJdOlwiLDc2ODApfXZhciBhPWUuY29uc3RhbnRzLnN0ZW5jaWxPcHM7cmV0dXJuW1wic3RlbmNpbC5vcEJhY2tcIj09PXQ/MTAyOToxMDI4LGkoXCJmYWlsXCIpLGkoXCJ6ZmFpbFwiKSxpKFwienBhc3NcIildfSk7Y2FzZVwicG9seWdvbk9mZnNldC5vZmZzZXRcIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm5bMHx0LmZhY3RvciwwfHQudW5pdHNdfSxmdW5jdGlvbih0LGUscil7cmV0dXJuW2UuZGVmKHIsXCIuZmFjdG9yfDBcIiksZT1lLmRlZihyLFwiLnVuaXRzfDBcIildfSk7Y2FzZVwiY3VsbC5mYWNlXCI6cmV0dXJuIGUoZnVuY3Rpb24odCl7dmFyIGU9MDtyZXR1cm5cImZyb250XCI9PT10P2U9MTAyODpcImJhY2tcIj09PXQmJihlPTEwMjkpLGV9LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5kZWYociwnPT09XCJmcm9udFwiPycsMTAyOCxcIjpcIiwxMDI5KX0pO2Nhc2VcImxpbmVXaWR0aFwiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVybiB0fSxmdW5jdGlvbih0LGUscil7cmV0dXJuIHJ9KTtjYXNlXCJmcm9udEZhY2VcIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm4gVHRbdF19LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5kZWYocisnPT09XCJjd1wiPzIzMDQ6MjMwNScpfSk7Y2FzZVwiY29sb3JNYXNrXCI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pfSxmdW5jdGlvbih0LGUscil7cmV0dXJuIGEoNCxmdW5jdGlvbih0KXtyZXR1cm5cIiEhXCIrcitcIltcIit0K1wiXVwifSl9KTtjYXNlXCJzYW1wbGUuY292ZXJhZ2VcIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm5bXCJ2YWx1ZVwiaW4gdD90LnZhbHVlOjEsISF0LmludmVydF19LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZS5kZWYoJ1widmFsdWVcIiBpbiAnLHIsXCI/K1wiLHIsXCIudmFsdWU6MVwiKSxlPWUuZGVmKFwiISFcIixyLFwiLmludmVydFwiKV19KX19KSxpfSh0KSx1PXcodCksaD1zLnZpZXdwb3J0O3JldHVybiBoJiYoYy52aWV3cG9ydD1oKSwocz1zW2g9bShcInNjaXNzb3IuYm94XCIpXSkmJihjW2hdPXMpLChvPXtmcmFtZWJ1ZmZlcjpvLGRyYXc6bCxzaGFkZXI6dSxzdGF0ZTpjLGRpcnR5OnM9MDxPYmplY3Qua2V5cyhjKS5sZW5ndGh9KS5wcm9maWxlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5zdGF0aWM7aWYodD10LmR5bmFtaWMsXCJwcm9maWxlXCJpbiByKXt2YXIgbj0hIXIucHJvZmlsZTsoZT1SKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG59KSkuZW5hYmxlPW59ZWxzZSBpZihcInByb2ZpbGVcImluIHQpe3ZhciBpPXQucHJvZmlsZTtlPUYoaSxmdW5jdGlvbih0LGUpe3JldHVybiB0Lmludm9rZShlLGkpfSl9cmV0dXJuIGV9KHQpLG8udW5pZm9ybXM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnN0YXRpYyxuPXQuZHluYW1pYyxpPXt9O3JldHVybiBPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlLG49clt0XTtpZihcIm51bWJlclwiPT10eXBlb2Ygbnx8XCJib29sZWFuXCI9PXR5cGVvZiBuKWU9UihmdW5jdGlvbigpe3JldHVybiBufSk7ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKXt2YXIgbz1uLl9yZWdsVHlwZTtcInRleHR1cmUyZFwiPT09b3x8XCJ0ZXh0dXJlQ3ViZVwiPT09bz9lPVIoZnVuY3Rpb24odCl7cmV0dXJuIHQubGluayhuKX0pOlwiZnJhbWVidWZmZXJcIiE9PW8mJlwiZnJhbWVidWZmZXJDdWJlXCIhPT1vfHwoZT1SKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxpbmsobi5jb2xvclswXSl9KSl9ZWxzZSB2KG4pJiYoZT1SKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdsb2JhbC5kZWYoXCJbXCIsYShuLmxlbmd0aCxmdW5jdGlvbih0KXtyZXR1cm4gblt0XX0pLFwiXVwiKX0pKTtlLnZhbHVlPW4saVt0XT1lfSksT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1uW3RdO2lbdF09RihlLGZ1bmN0aW9uKHQscil7cmV0dXJuIHQuaW52b2tlKHIsZSl9KX0pLGl9KHIpLG8uYXR0cmlidXRlcz1BKGUpLG8uY29udGV4dD1mdW5jdGlvbih0KXt2YXIgZT10LnN0YXRpYyxyPXQuZHluYW1pYyxuPXt9O3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByPWVbdF07blt0XT1SKGZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIHJ8fFwiYm9vbGVhblwiPT10eXBlb2Ygcj9cIlwiK3I6dC5saW5rKHIpfSl9KSxPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXJbdF07blt0XT1GKGUsZnVuY3Rpb24odCxyKXtyZXR1cm4gdC5pbnZva2UocixlKX0pfSksbn0obiksb31mdW5jdGlvbiBNKHQsZSxyKXt2YXIgbj10LnNoYXJlZC5jb250ZXh0LGk9dC5zY29wZSgpO09iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24oYSl7ZS5zYXZlKG4sXCIuXCIrYSksaShuLFwiLlwiLGEsXCI9XCIsclthXS5hcHBlbmQodCxlKSxcIjtcIil9KSxlKGkpfWZ1bmN0aW9uIFModCxlLHIsbil7dmFyIGksYT0ocz10LnNoYXJlZCkuZ2wsbz1zLmZyYW1lYnVmZmVyO1EmJihpPWUuZGVmKHMuZXh0ZW5zaW9ucyxcIi53ZWJnbF9kcmF3X2J1ZmZlcnNcIikpO3ZhciBzPShsPXQuY29uc3RhbnRzKS5kcmF3QnVmZmVyLGw9bC5iYWNrQnVmZmVyO3Q9cj9yLmFwcGVuZCh0LGUpOmUuZGVmKG8sXCIubmV4dFwiKSxufHxlKFwiaWYoXCIsdCxcIiE9PVwiLG8sXCIuY3VyKXtcIiksZShcImlmKFwiLHQsXCIpe1wiLGEsXCIuYmluZEZyYW1lYnVmZmVyKFwiLDM2MTYwLFwiLFwiLHQsXCIuZnJhbWVidWZmZXIpO1wiKSxRJiZlKGksXCIuZHJhd0J1ZmZlcnNXRUJHTChcIixzLFwiW1wiLHQsXCIuY29sb3JBdHRhY2htZW50cy5sZW5ndGhdKTtcIiksZShcIn1lbHNle1wiLGEsXCIuYmluZEZyYW1lYnVmZmVyKFwiLDM2MTYwLFwiLG51bGwpO1wiKSxRJiZlKGksXCIuZHJhd0J1ZmZlcnNXRUJHTChcIixsLFwiKTtcIiksZShcIn1cIixvLFwiLmN1cj1cIix0LFwiO1wiKSxufHxlKFwifVwiKX1mdW5jdGlvbiBFKHQsZSxyKXt2YXIgbj10LnNoYXJlZCxpPW4uZ2wsbz10LmN1cnJlbnQscz10Lm5leHQsbD1uLmN1cnJlbnQsYz1uLm5leHQsdT10LmNvbmQobCxcIi5kaXJ0eVwiKTtudC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuLGg7aWYoISgoZT1tKGUpKWluIHIuc3RhdGUpKWlmKGUgaW4gcyl7bj1zW2VdLGg9b1tlXTt2YXIgZj1hKHR0W2VdLmxlbmd0aCxmdW5jdGlvbih0KXtyZXR1cm4gdS5kZWYobixcIltcIix0LFwiXVwiKX0pO3UodC5jb25kKGYubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrXCIhPT1cIitoK1wiW1wiK2UrXCJdXCJ9KS5qb2luKFwifHxcIikpLnRoZW4oaSxcIi5cIixhdFtlXSxcIihcIixmLFwiKTtcIixmLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBoK1wiW1wiK2UrXCJdPVwiK3R9KS5qb2luKFwiO1wiKSxcIjtcIikpfWVsc2Ugbj11LmRlZihjLFwiLlwiLGUpLGY9dC5jb25kKG4sXCIhPT1cIixsLFwiLlwiLGUpLHUoZiksZSBpbiBpdD9mKHQuY29uZChuKS50aGVuKGksXCIuZW5hYmxlKFwiLGl0W2VdLFwiKTtcIikuZWxzZShpLFwiLmRpc2FibGUoXCIsaXRbZV0sXCIpO1wiKSxsLFwiLlwiLGUsXCI9XCIsbixcIjtcIik6ZihpLFwiLlwiLGF0W2VdLFwiKFwiLG4sXCIpO1wiLGwsXCIuXCIsZSxcIj1cIixuLFwiO1wiKX0pLDA9PT1PYmplY3Qua2V5cyhyLnN0YXRlKS5sZW5ndGgmJnUobCxcIi5kaXJ0eT1mYWxzZTtcIiksZSh1KX1mdW5jdGlvbiBDKHQsZSxyLG4pe3ZhciBpPXQuc2hhcmVkLGE9dC5jdXJyZW50LG89aS5jdXJyZW50LHM9aS5nbDtJKE9iamVjdC5rZXlzKHIpKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBsPXJbaV07aWYoIW58fG4obCkpe3ZhciBjPWwuYXBwZW5kKHQsZSk7aWYoaXRbaV0pe3ZhciB1PWl0W2ldO1AobCk/ZShzLGM/XCIuZW5hYmxlKFwiOlwiLmRpc2FibGUoXCIsdSxcIik7XCIpOmUodC5jb25kKGMpLnRoZW4ocyxcIi5lbmFibGUoXCIsdSxcIik7XCIpLmVsc2UocyxcIi5kaXNhYmxlKFwiLHUsXCIpO1wiKSksZShvLFwiLlwiLGksXCI9XCIsYyxcIjtcIil9ZWxzZSBpZih2KGMpKXt2YXIgaD1hW2ldO2UocyxcIi5cIixhdFtpXSxcIihcIixjLFwiKTtcIixjLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBoK1wiW1wiK2UrXCJdPVwiK3R9KS5qb2luKFwiO1wiKSxcIjtcIil9ZWxzZSBlKHMsXCIuXCIsYXRbaV0sXCIoXCIsYyxcIik7XCIsbyxcIi5cIixpLFwiPVwiLGMsXCI7XCIpfX0pfWZ1bmN0aW9uIEwodCxlKXtLJiYodC5pbnN0YW5jaW5nPWUuZGVmKHQuc2hhcmVkLmV4dGVuc2lvbnMsXCIuYW5nbGVfaW5zdGFuY2VkX2FycmF5c1wiKSl9ZnVuY3Rpb24gQih0LGUscixuLGkpe2Z1bmN0aW9uIGEoKXtyZXR1cm5cInVuZGVmaW5lZFwiPT10eXBlb2YgcGVyZm9ybWFuY2U/XCJEYXRlLm5vdygpXCI6XCJwZXJmb3JtYW5jZS5ub3coKVwifWZ1bmN0aW9uIG8odCl7dChjPWUuZGVmKCksXCI9XCIsYSgpLFwiO1wiKSxcInN0cmluZ1wiPT10eXBlb2YgaT90KGYsXCIuY291bnQrPVwiLGksXCI7XCIpOnQoZixcIi5jb3VudCsrO1wiKSxkJiYobj90KHU9ZS5kZWYoKSxcIj1cIixnLFwiLmdldE51bVBlbmRpbmdRdWVyaWVzKCk7XCIpOnQoZyxcIi5iZWdpblF1ZXJ5KFwiLGYsXCIpO1wiKSl9ZnVuY3Rpb24gcyh0KXt0KGYsXCIuY3B1VGltZSs9XCIsYSgpLFwiLVwiLGMsXCI7XCIpLGQmJihuP3QoZyxcIi5wdXNoU2NvcGVTdGF0cyhcIix1LFwiLFwiLGcsXCIuZ2V0TnVtUGVuZGluZ1F1ZXJpZXMoKSxcIixmLFwiKTtcIik6dChnLFwiLmVuZFF1ZXJ5KCk7XCIpKX1mdW5jdGlvbiBsKHQpe3ZhciByPWUuZGVmKHAsXCIucHJvZmlsZVwiKTtlKHAsXCIucHJvZmlsZT1cIix0LFwiO1wiKSxlLmV4aXQocCxcIi5wcm9maWxlPVwiLHIsXCI7XCIpfXZhciBjLHUsaD10LnNoYXJlZCxmPXQuc3RhdHMscD1oLmN1cnJlbnQsZz1oLnRpbWVyO2lmKHI9ci5wcm9maWxlKXtpZihQKHIpKXJldHVybiB2b2lkKHIuZW5hYmxlPyhvKGUpLHMoZS5leGl0KSxsKFwidHJ1ZVwiKSk6bChcImZhbHNlXCIpKTtsKHI9ci5hcHBlbmQodCxlKSl9ZWxzZSByPWUuZGVmKHAsXCIucHJvZmlsZVwiKTtvKGg9dC5ibG9jaygpKSxlKFwiaWYoXCIscixcIil7XCIsaCxcIn1cIikscyh0PXQuYmxvY2soKSksZS5leGl0KFwiaWYoXCIscixcIil7XCIsdCxcIn1cIil9ZnVuY3Rpb24gTih0LGUscixuLGkpe2Z1bmN0aW9uIGEocixuLGkpe2Z1bmN0aW9uIGEoKXtlKFwiaWYoIVwiLHUsXCIuYnVmZmVyKXtcIixsLFwiLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KFwiLGMsXCIpO31cIik7dmFyIHIsYT1pLnR5cGU7cj1pLnNpemU/ZS5kZWYoaS5zaXplLFwifHxcIixuKTpuLGUoXCJpZihcIix1LFwiLnR5cGUhPT1cIixhLFwifHxcIix1LFwiLnNpemUhPT1cIixyLFwifHxcIixwLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdStcIi5cIit0K1wiIT09XCIraVt0XX0pLmpvaW4oXCJ8fFwiKSxcIil7XCIsbCxcIi5iaW5kQnVmZmVyKFwiLDM0OTYyLFwiLFwiLGgsXCIuYnVmZmVyKTtcIixsLFwiLnZlcnRleEF0dHJpYlBvaW50ZXIoXCIsW2MscixhLGkubm9ybWFsaXplZCxpLnN0cmlkZSxpLm9mZnNldF0sXCIpO1wiLHUsXCIudHlwZT1cIixhLFwiO1wiLHUsXCIuc2l6ZT1cIixyLFwiO1wiLHAubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB1K1wiLlwiK3QrXCI9XCIraVt0XStcIjtcIn0pLmpvaW4oXCJcIiksXCJ9XCIpLEsmJihhPWkuZGl2aXNvcixlKFwiaWYoXCIsdSxcIi5kaXZpc29yIT09XCIsYSxcIil7XCIsdC5pbnN0YW5jaW5nLFwiLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShcIixbYyxhXSxcIik7XCIsdSxcIi5kaXZpc29yPVwiLGEsXCI7fVwiKSl9ZnVuY3Rpb24gcygpe2UoXCJpZihcIix1LFwiLmJ1ZmZlcil7XCIsbCxcIi5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoXCIsYyxcIik7XCIsXCJ9aWYoXCIsYnQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUrXCIuXCIrdCtcIiE9PVwiK2ZbZV19KS5qb2luKFwifHxcIiksXCIpe1wiLGwsXCIudmVydGV4QXR0cmliNGYoXCIsYyxcIixcIixmLFwiKTtcIixidC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdStcIi5cIit0K1wiPVwiK2ZbZV0rXCI7XCJ9KS5qb2luKFwiXCIpLFwifVwiKX12YXIgbD1vLmdsLGM9ZS5kZWYocixcIi5sb2NhdGlvblwiKSx1PWUuZGVmKG8uYXR0cmlidXRlcyxcIltcIixjLFwiXVwiKTtyPWkuc3RhdGU7dmFyIGg9aS5idWZmZXIsZj1baS54LGkueSxpLnosaS53XSxwPVtcImJ1ZmZlclwiLFwibm9ybWFsaXplZFwiLFwib2Zmc2V0XCIsXCJzdHJpZGVcIl07MT09PXI/YSgpOjI9PT1yP3MoKTooZShcImlmKFwiLHIsXCI9PT1cIiwxLFwiKXtcIiksYSgpLGUoXCJ9ZWxzZXtcIikscygpLGUoXCJ9XCIpKX12YXIgbz10LnNoYXJlZDtuLmZvckVhY2goZnVuY3Rpb24obil7dmFyIG8scz1uLm5hbWUsbD1yLmF0dHJpYnV0ZXNbc107aWYobCl7aWYoIWkobCkpcmV0dXJuO289bC5hcHBlbmQodCxlKX1lbHNle2lmKCFpKE10KSlyZXR1cm47dmFyIGM9dC5zY29wZUF0dHJpYihzKTtvPXt9LE9iamVjdC5rZXlzKG5ldyBaKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe29bdF09ZS5kZWYoYyxcIi5cIix0KX0pfWEodC5saW5rKG4pLGZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIDM1NjY0OmNhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gMjtjYXNlIDM1NjY1OmNhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gMztjYXNlIDM1NjY2OmNhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gNDtkZWZhdWx0OnJldHVybiAxfX0obi5pbmZvLnR5cGUpLG8pfSl9ZnVuY3Rpb24gaih0LHIsbixpLG8pe2Zvcih2YXIgcyxsPXQuc2hhcmVkLGM9bC5nbCx1PTA7dTxpLmxlbmd0aDsrK3Upe3ZhciBoLGY9KGc9aVt1XSkubmFtZSxwPWcuaW5mby50eXBlLGQ9bi51bmlmb3Jtc1tmXSxnPXQubGluayhnKStcIi5sb2NhdGlvblwiO2lmKGQpe2lmKCFvKGQpKWNvbnRpbnVlO2lmKFAoZCkpe2lmKGY9ZC52YWx1ZSwzNTY3OD09PXB8fDM1NjgwPT09cClyKGMsXCIudW5pZm9ybTFpKFwiLGcsXCIsXCIsKHA9dC5saW5rKGYuX3RleHR1cmV8fGYuY29sb3JbMF0uX3RleHR1cmUpKStcIi5iaW5kKCkpO1wiKSxyLmV4aXQocCxcIi51bmJpbmQoKTtcIik7ZWxzZSBpZigzNTY3ND09PXB8fDM1Njc1PT09cHx8MzU2NzY9PT1wKWQ9MiwzNTY3NT09PXA/ZD0zOjM1Njc2PT09cCYmKGQ9NCkscihjLFwiLnVuaWZvcm1NYXRyaXhcIixkLFwiZnYoXCIsZyxcIixmYWxzZSxcIixmPXQuZ2xvYmFsLmRlZihcIm5ldyBGbG9hdDMyQXJyYXkoW1wiK0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGYpK1wiXSlcIiksXCIpO1wiKTtlbHNle3N3aXRjaChwKXtjYXNlIDUxMjY6cz1cIjFmXCI7YnJlYWs7Y2FzZSAzNTY2NDpzPVwiMmZcIjticmVhaztjYXNlIDM1NjY1OnM9XCIzZlwiO2JyZWFrO2Nhc2UgMzU2NjY6cz1cIjRmXCI7YnJlYWs7Y2FzZSAzNTY3MDpjYXNlIDUxMjQ6cz1cIjFpXCI7YnJlYWs7Y2FzZSAzNTY3MTpjYXNlIDM1NjY3OnM9XCIyaVwiO2JyZWFrO2Nhc2UgMzU2NzI6Y2FzZSAzNTY2ODpzPVwiM2lcIjticmVhaztjYXNlIDM1NjczOnM9XCI0aVwiO2JyZWFrO2Nhc2UgMzU2Njk6cz1cIjRpXCJ9cihjLFwiLnVuaWZvcm1cIixzLFwiKFwiLGcsXCIsXCIsdihmKT9BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmKTpmLFwiKTtcIil9Y29udGludWV9aD1kLmFwcGVuZCh0LHIpfWVsc2V7aWYoIW8oTXQpKWNvbnRpbnVlO2g9ci5kZWYobC51bmlmb3JtcyxcIltcIixlLmlkKGYpLFwiXVwiKX1zd2l0Y2goMzU2Nzg9PT1wP3IoXCJpZihcIixoLFwiJiZcIixoLCcuX3JlZ2xUeXBlPT09XCJmcmFtZWJ1ZmZlclwiKXsnLGgsXCI9XCIsaCxcIi5jb2xvclswXTtcIixcIn1cIik6MzU2ODA9PT1wJiZyKFwiaWYoXCIsaCxcIiYmXCIsaCwnLl9yZWdsVHlwZT09PVwiZnJhbWVidWZmZXJDdWJlXCIpeycsaCxcIj1cIixoLFwiLmNvbG9yWzBdO1wiLFwifVwiKSxmPTEscCl7Y2FzZSAzNTY3ODpjYXNlIDM1NjgwOnA9ci5kZWYoaCxcIi5fdGV4dHVyZVwiKSxyKGMsXCIudW5pZm9ybTFpKFwiLGcsXCIsXCIscCxcIi5iaW5kKCkpO1wiKSxyLmV4aXQocCxcIi51bmJpbmQoKTtcIik7Y29udGludWU7Y2FzZSA1MTI0OmNhc2UgMzU2NzA6cz1cIjFpXCI7YnJlYWs7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnM9XCIyaVwiLGY9MjticmVhaztjYXNlIDM1NjY4OmNhc2UgMzU2NzI6cz1cIjNpXCIsZj0zO2JyZWFrO2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpzPVwiNGlcIixmPTQ7YnJlYWs7Y2FzZSA1MTI2OnM9XCIxZlwiO2JyZWFrO2Nhc2UgMzU2NjQ6cz1cIjJmXCIsZj0yO2JyZWFrO2Nhc2UgMzU2NjU6cz1cIjNmXCIsZj0zO2JyZWFrO2Nhc2UgMzU2NjY6cz1cIjRmXCIsZj00O2JyZWFrO2Nhc2UgMzU2NzQ6cz1cIk1hdHJpeDJmdlwiO2JyZWFrO2Nhc2UgMzU2NzU6cz1cIk1hdHJpeDNmdlwiO2JyZWFrO2Nhc2UgMzU2NzY6cz1cIk1hdHJpeDRmdlwifWlmKHIoYyxcIi51bmlmb3JtXCIscyxcIihcIixnLFwiLFwiKSxcIk1cIj09PXMuY2hhckF0KDApKXtnPU1hdGgucG93KHAtMzU2NzQrMiwyKTt2YXIgbT10Lmdsb2JhbC5kZWYoXCJuZXcgRmxvYXQzMkFycmF5KFwiLGcsXCIpXCIpO3IoXCJmYWxzZSwoQXJyYXkuaXNBcnJheShcIixoLFwiKXx8XCIsaCxcIiBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSk/XCIsaCxcIjooXCIsYShnLGZ1bmN0aW9uKHQpe3JldHVybiBtK1wiW1wiK3QrXCJdPVwiK2grXCJbXCIrdCtcIl1cIn0pLFwiLFwiLG0sXCIpXCIpfWVsc2UgcigxPGY/YShmLGZ1bmN0aW9uKHQpe3JldHVybiBoK1wiW1wiK3QrXCJdXCJ9KTpoKTtyKFwiKTtcIil9fWZ1bmN0aW9uIFYodCxlLHIsbil7ZnVuY3Rpb24gaShpKXt2YXIgYT1mW2ldO3JldHVybiBhP2EuY29udGV4dERlcCYmbi5jb250ZXh0RHluYW1pY3x8YS5wcm9wRGVwP2EuYXBwZW5kKHQscik6YS5hcHBlbmQodCxlKTplLmRlZihoLFwiLlwiLGkpfWZ1bmN0aW9uIGEoKXtmdW5jdGlvbiB0KCl7cihsLFwiLmRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKFwiLFtkLHYsbSxnK1wiPDwoKFwiK20rXCItNTEyMSk+PjEpXCIsc10sXCIpO1wiKX1mdW5jdGlvbiBlKCl7cihsLFwiLmRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShcIixbZCxnLHYsc10sXCIpO1wiKX1wP3k/dCgpOihyKFwiaWYoXCIscCxcIil7XCIpLHQoKSxyKFwifWVsc2V7XCIpLGUoKSxyKFwifVwiKSk6ZSgpfWZ1bmN0aW9uIG8oKXtmdW5jdGlvbiB0KCl7cih1K1wiLmRyYXdFbGVtZW50cyhcIitbZCx2LG0sZytcIjw8KChcIittK1wiLTUxMjEpPj4xKVwiXStcIik7XCIpfWZ1bmN0aW9uIGUoKXtyKHUrXCIuZHJhd0FycmF5cyhcIitbZCxnLHZdK1wiKTtcIil9cD95P3QoKToocihcImlmKFwiLHAsXCIpe1wiKSx0KCkscihcIn1lbHNle1wiKSxlKCkscihcIn1cIikpOmUoKX12YXIgcyxsLGM9dC5zaGFyZWQsdT1jLmdsLGg9Yy5kcmF3LGY9bi5kcmF3LHA9ZnVuY3Rpb24oKXt2YXIgaT1mLmVsZW1lbnRzLGE9ZTtyZXR1cm4gaT8oKGkuY29udGV4dERlcCYmbi5jb250ZXh0RHluYW1pY3x8aS5wcm9wRGVwKSYmKGE9ciksaT1pLmFwcGVuZCh0LGEpKTppPWEuZGVmKGgsXCIuXCIsXCJlbGVtZW50c1wiKSxpJiZhKFwiaWYoXCIraStcIilcIit1K1wiLmJpbmRCdWZmZXIoMzQ5NjMsXCIraStcIi5idWZmZXIuYnVmZmVyKTtcIiksaX0oKSxkPWkoXCJwcmltaXRpdmVcIiksZz1pKFwib2Zmc2V0XCIpLHY9ZnVuY3Rpb24oKXt2YXIgaT1mLmNvdW50LGE9ZTtyZXR1cm4gaT8oKGkuY29udGV4dERlcCYmbi5jb250ZXh0RHluYW1pY3x8aS5wcm9wRGVwKSYmKGE9ciksaT1pLmFwcGVuZCh0LGEpKTppPWEuZGVmKGgsXCIuXCIsXCJjb3VudFwiKSxpfSgpO2lmKFwibnVtYmVyXCI9PXR5cGVvZiB2KXtpZigwPT09dilyZXR1cm59ZWxzZSByKFwiaWYoXCIsdixcIil7XCIpLHIuZXhpdChcIn1cIik7SyYmKHM9aShcImluc3RhbmNlc1wiKSxsPXQuaW5zdGFuY2luZyk7dmFyIG09cCtcIi50eXBlXCIseT1mLmVsZW1lbnRzJiZQKGYuZWxlbWVudHMpO0smJihcIm51bWJlclwiIT10eXBlb2Ygc3x8MDw9cyk/XCJzdHJpbmdcIj09dHlwZW9mIHM/KHIoXCJpZihcIixzLFwiPjApe1wiKSxhKCkscihcIn1lbHNlIGlmKFwiLHMsXCI8MCl7XCIpLG8oKSxyKFwifVwiKSk6YSgpOm8oKX1mdW5jdGlvbiBxKHQsZSxyLG4saSl7cmV0dXJuIGk9KGU9YigpKS5wcm9jKFwiYm9keVwiLGkpLEsmJihlLmluc3RhbmNpbmc9aS5kZWYoZS5zaGFyZWQuZXh0ZW5zaW9ucyxcIi5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzXCIpKSx0KGUsaSxyLG4pLGUuY29tcGlsZSgpLmJvZHl9ZnVuY3Rpb24gSCh0LGUscixuKXtMKHQsZSksTih0LGUscixuLmF0dHJpYnV0ZXMsZnVuY3Rpb24oKXtyZXR1cm4hMH0pLGoodCxlLHIsbi51bmlmb3JtcyxmdW5jdGlvbigpe3JldHVybiEwfSksVih0LGUsZSxyKX1mdW5jdGlvbiBHKHQsZSxyLG4pe2Z1bmN0aW9uIGkoKXtyZXR1cm4hMH10LmJhdGNoSWQ9XCJhMVwiLEwodCxlKSxOKHQsZSxyLG4uYXR0cmlidXRlcyxpKSxqKHQsZSxyLG4udW5pZm9ybXMsaSksVih0LGUsZSxyKX1mdW5jdGlvbiBZKHQsZSxyLG4pe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQuY29udGV4dERlcCYmb3x8dC5wcm9wRGVwfWZ1bmN0aW9uIGEodCl7cmV0dXJuIWkodCl9TCh0LGUpO3ZhciBvPXIuY29udGV4dERlcCxzPWUuZGVmKCksbD1lLmRlZigpO3Quc2hhcmVkLnByb3BzPWwsdC5iYXRjaElkPXM7dmFyIGM9dC5zY29wZSgpLHU9dC5zY29wZSgpO2UoYy5lbnRyeSxcImZvcihcIixzLFwiPTA7XCIscyxcIjxcIixcImExXCIsXCI7KytcIixzLFwiKXtcIixsLFwiPVwiLFwiYTBcIixcIltcIixzLFwiXTtcIix1LFwifVwiLGMuZXhpdCksci5uZWVkc0NvbnRleHQmJk0odCx1LHIuY29udGV4dCksci5uZWVkc0ZyYW1lYnVmZmVyJiZTKHQsdSxyLmZyYW1lYnVmZmVyKSxDKHQsdSxyLnN0YXRlLGkpLHIucHJvZmlsZSYmaShyLnByb2ZpbGUpJiZCKHQsdSxyLCExLCEwKSxuPyhOKHQsYyxyLG4uYXR0cmlidXRlcyxhKSxOKHQsdSxyLG4uYXR0cmlidXRlcyxpKSxqKHQsYyxyLG4udW5pZm9ybXMsYSksaih0LHUscixuLnVuaWZvcm1zLGkpLFYodCxjLHUscikpOihlPXQuZ2xvYmFsLmRlZihcInt9XCIpLG49ci5zaGFkZXIucHJvZ1Zhci5hcHBlbmQodCx1KSxsPXUuZGVmKG4sXCIuaWRcIiksYz11LmRlZihlLFwiW1wiLGwsXCJdXCIpLHUodC5zaGFyZWQuZ2wsXCIudXNlUHJvZ3JhbShcIixuLFwiLnByb2dyYW0pO1wiLFwiaWYoIVwiLGMsXCIpe1wiLGMsXCI9XCIsZSxcIltcIixsLFwiXT1cIix0LmxpbmsoZnVuY3Rpb24oZSl7cmV0dXJuIHEoRyx0LHIsZSwyKX0pLFwiKFwiLG4sXCIpO31cIixjLFwiLmNhbGwodGhpcyxhMFtcIixzLFwiXSxcIixzLFwiKTtcIikpfWZ1bmN0aW9uIFcodCxyKXtmdW5jdGlvbiBuKGUpe3ZhciBuPXIuc2hhZGVyW2VdO24mJmkuc2V0KGEuc2hhZGVyLFwiLlwiK2Usbi5hcHBlbmQodCxpKSl9dmFyIGk9dC5wcm9jKFwic2NvcGVcIiwzKTt0LmJhdGNoSWQ9XCJhMlwiO3ZhciBhPXQuc2hhcmVkLG89YS5jdXJyZW50O00odCxpLHIuY29udGV4dCksci5mcmFtZWJ1ZmZlciYmci5mcmFtZWJ1ZmZlci5hcHBlbmQodCxpKSxJKE9iamVjdC5rZXlzKHIuc3RhdGUpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXIuc3RhdGVbZV0uYXBwZW5kKHQsaSk7dihuKT9uLmZvckVhY2goZnVuY3Rpb24ocixuKXtpLnNldCh0Lm5leHRbZV0sXCJbXCIrbitcIl1cIixyKX0pOmkuc2V0KGEubmV4dCxcIi5cIitlLG4pfSksQih0LGksciwhMCwhMCksW1wiZWxlbWVudHNcIixcIm9mZnNldFwiLFwiY291bnRcIixcImluc3RhbmNlc1wiLFwicHJpbWl0aXZlXCJdLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49ci5kcmF3W2VdO24mJmkuc2V0KGEuZHJhdyxcIi5cIitlLFwiXCIrbi5hcHBlbmQodCxpKSl9KSxPYmplY3Qua2V5cyhyLnVuaWZvcm1zKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2kuc2V0KGEudW5pZm9ybXMsXCJbXCIrZS5pZChuKStcIl1cIixyLnVuaWZvcm1zW25dLmFwcGVuZCh0LGkpKX0pLE9iamVjdC5rZXlzKHIuYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj1yLmF0dHJpYnV0ZXNbZV0uYXBwZW5kKHQsaSksYT10LnNjb3BlQXR0cmliKGUpO09iamVjdC5rZXlzKG5ldyBaKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2kuc2V0KGEsXCIuXCIrdCxuW3RdKX0pfSksbihcInZlcnRcIiksbihcImZyYWdcIiksMDxPYmplY3Qua2V5cyhyLnN0YXRlKS5sZW5ndGgmJihpKG8sXCIuZGlydHk9dHJ1ZTtcIiksaS5leGl0KG8sXCIuZGlydHk9dHJ1ZTtcIikpLGkoXCJhMShcIix0LnNoYXJlZC5jb250ZXh0LFwiLGEwLFwiLHQuYmF0Y2hJZCxcIik7XCIpfWZ1bmN0aW9uIFgodCxlLHIpe3ZhciBuPWUuc3RhdGljW3JdO2lmKG4mJmZ1bmN0aW9uKHQpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0JiYhdih0KSl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKHQpLHI9MDtyPGUubGVuZ3RoOysrcilpZihVLmlzRHluYW1pYyh0W2Vbcl1dKSlyZXR1cm4hMDtyZXR1cm4hMX19KG4pKXt2YXIgaT10Lmdsb2JhbCxhPU9iamVjdC5rZXlzKG4pLG89ITEscz0hMSxsPSExLGM9dC5nbG9iYWwuZGVmKFwie31cIik7YS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW5bZV07aWYoVS5pc0R5bmFtaWMocikpXCJmdW5jdGlvblwiPT10eXBlb2YgciYmKHI9bltlXT1VLnVuYm94KHIpKSxlPUYocixudWxsKSxvPW98fGUudGhpc0RlcCxsPWx8fGUucHJvcERlcCxzPXN8fGUuY29udGV4dERlcDtlbHNle3N3aXRjaChpKGMsXCIuXCIsZSxcIj1cIiksdHlwZW9mIHIpe2Nhc2VcIm51bWJlclwiOmkocik7YnJlYWs7Y2FzZVwic3RyaW5nXCI6aSgnXCInLHIsJ1wiJyk7YnJlYWs7Y2FzZVwib2JqZWN0XCI6QXJyYXkuaXNBcnJheShyKSYmaShcIltcIixyLmpvaW4oKSxcIl1cIik7YnJlYWs7ZGVmYXVsdDppKHQubGluayhyKSl9aShcIjtcIil9fSksZS5keW5hbWljW3JdPW5ldyBVLkR5bmFtaWNWYXJpYWJsZSg0LHt0aGlzRGVwOm8sY29udGV4dERlcDpzLHByb3BEZXA6bCxyZWY6YyxhcHBlbmQ6ZnVuY3Rpb24odCxlKXthLmZvckVhY2goZnVuY3Rpb24ocil7dmFyIGk9bltyXTtVLmlzRHluYW1pYyhpKSYmKGk9dC5pbnZva2UoZSxpKSxlKGMsXCIuXCIscixcIj1cIixpLFwiO1wiKSl9KX19KSxkZWxldGUgZS5zdGF0aWNbcl19fXZhciBaPXUuUmVjb3JkLCQ9e2FkZDozMjc3NCxzdWJ0cmFjdDozMjc3OCxcInJldmVyc2Ugc3VidHJhY3RcIjozMjc3OX07ci5leHRfYmxlbmRfbWlubWF4JiYoJC5taW49MzI3NzUsJC5tYXg9MzI3NzYpO3ZhciBLPXIuYW5nbGVfaW5zdGFuY2VkX2FycmF5cyxRPXIud2ViZ2xfZHJhd19idWZmZXJzLHR0PXtkaXJ0eTohMCxwcm9maWxlOmcucHJvZmlsZX0sZXQ9e30sbnQ9W10saXQ9e30sYXQ9e307eShcImRpdGhlclwiLDMwMjQpLHkoXCJibGVuZC5lbmFibGVcIiwzMDQyKSx4KFwiYmxlbmQuY29sb3JcIixcImJsZW5kQ29sb3JcIixbMCwwLDAsMF0pLHgoXCJibGVuZC5lcXVhdGlvblwiLFwiYmxlbmRFcXVhdGlvblNlcGFyYXRlXCIsWzMyNzc0LDMyNzc0XSkseChcImJsZW5kLmZ1bmNcIixcImJsZW5kRnVuY1NlcGFyYXRlXCIsWzEsMCwxLDBdKSx5KFwiZGVwdGguZW5hYmxlXCIsMjkyOSwhMCkseChcImRlcHRoLmZ1bmNcIixcImRlcHRoRnVuY1wiLDUxMykseChcImRlcHRoLnJhbmdlXCIsXCJkZXB0aFJhbmdlXCIsWzAsMV0pLHgoXCJkZXB0aC5tYXNrXCIsXCJkZXB0aE1hc2tcIiwhMCkseChcImNvbG9yTWFza1wiLFwiY29sb3JNYXNrXCIsWyEwLCEwLCEwLCEwXSkseShcImN1bGwuZW5hYmxlXCIsMjg4NCkseChcImN1bGwuZmFjZVwiLFwiY3VsbEZhY2VcIiwxMDI5KSx4KFwiZnJvbnRGYWNlXCIsXCJmcm9udEZhY2VcIiwyMzA1KSx4KFwibGluZVdpZHRoXCIsXCJsaW5lV2lkdGhcIiwxKSx5KFwicG9seWdvbk9mZnNldC5lbmFibGVcIiwzMjgyMykseChcInBvbHlnb25PZmZzZXQub2Zmc2V0XCIsXCJwb2x5Z29uT2Zmc2V0XCIsWzAsMF0pLHkoXCJzYW1wbGUuYWxwaGFcIiwzMjkyNikseShcInNhbXBsZS5lbmFibGVcIiwzMjkyOCkseChcInNhbXBsZS5jb3ZlcmFnZVwiLFwic2FtcGxlQ292ZXJhZ2VcIixbMSwhMV0pLHkoXCJzdGVuY2lsLmVuYWJsZVwiLDI5NjApLHgoXCJzdGVuY2lsLm1hc2tcIixcInN0ZW5jaWxNYXNrXCIsLTEpLHgoXCJzdGVuY2lsLmZ1bmNcIixcInN0ZW5jaWxGdW5jXCIsWzUxOSwwLC0xXSkseChcInN0ZW5jaWwub3BGcm9udFwiLFwic3RlbmNpbE9wU2VwYXJhdGVcIixbMTAyOCw3NjgwLDc2ODAsNzY4MF0pLHgoXCJzdGVuY2lsLm9wQmFja1wiLFwic3RlbmNpbE9wU2VwYXJhdGVcIixbMTAyOSw3NjgwLDc2ODAsNzY4MF0pLHkoXCJzY2lzc29yLmVuYWJsZVwiLDMwODkpLHgoXCJzY2lzc29yLmJveFwiLFwic2Npc3NvclwiLFswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XSkseChcInZpZXdwb3J0XCIsXCJ2aWV3cG9ydFwiLFswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XSk7dmFyIG90PXtnbDp0LGNvbnRleHQ6cCxzdHJpbmdzOmUsbmV4dDpldCxjdXJyZW50OnR0LGRyYXc6ZixlbGVtZW50czpvLGJ1ZmZlcjppLHNoYWRlcjpoLGF0dHJpYnV0ZXM6dS5zdGF0ZSx1bmlmb3JtczpjLGZyYW1lYnVmZmVyOmwsZXh0ZW5zaW9uczpyLHRpbWVyOmQsaXNCdWZmZXJBcmdzOk99LHN0PXtwcmltVHlwZXM6cnQsY29tcGFyZUZ1bmNzOmt0LGJsZW5kRnVuY3M6d3QsYmxlbmRFcXVhdGlvbnM6JCxzdGVuY2lsT3BzOkF0LGdsVHlwZXM6SixvcmllbnRhdGlvblR5cGU6VHR9O1EmJihzdC5iYWNrQnVmZmVyPVsxMDI5XSxzdC5kcmF3QnVmZmVyPWEobi5tYXhEcmF3YnVmZmVycyxmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQ/WzBdOmEodCxmdW5jdGlvbih0KXtyZXR1cm4gMzYwNjQrdH0pfSkpO3ZhciBsdD0wO3JldHVybntuZXh0OmV0LGN1cnJlbnQ6dHQscHJvY3M6ZnVuY3Rpb24oKXt2YXIgdD1iKCksZT10LnByb2MoXCJwb2xsXCIpLHI9dC5wcm9jKFwicmVmcmVzaFwiKSxpPXQuYmxvY2soKTtlKGkpLHIoaSk7dmFyIG8scz10LnNoYXJlZCxsPXMuZ2wsYz1zLm5leHQsdT1zLmN1cnJlbnQ7aSh1LFwiLmRpcnR5PWZhbHNlO1wiKSxTKHQsZSksUyh0LHIsbnVsbCwhMCksSyYmKG89dC5saW5rKEspKTtmb3IodmFyIGg9MDtoPG4ubWF4QXR0cmlidXRlczsrK2gpe3ZhciBmPXIuZGVmKHMuYXR0cmlidXRlcyxcIltcIixoLFwiXVwiKSxwPXQuY29uZChmLFwiLmJ1ZmZlclwiKTtwLnRoZW4obCxcIi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShcIixoLFwiKTtcIixsLFwiLmJpbmRCdWZmZXIoXCIsMzQ5NjIsXCIsXCIsZixcIi5idWZmZXIuYnVmZmVyKTtcIixsLFwiLnZlcnRleEF0dHJpYlBvaW50ZXIoXCIsaCxcIixcIixmLFwiLnNpemUsXCIsZixcIi50eXBlLFwiLGYsXCIubm9ybWFsaXplZCxcIixmLFwiLnN0cmlkZSxcIixmLFwiLm9mZnNldCk7XCIpLmVsc2UobCxcIi5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoXCIsaCxcIik7XCIsbCxcIi52ZXJ0ZXhBdHRyaWI0ZihcIixoLFwiLFwiLGYsXCIueCxcIixmLFwiLnksXCIsZixcIi56LFwiLGYsXCIudyk7XCIsZixcIi5idWZmZXI9bnVsbDtcIikscihwKSxLJiZyKG8sXCIudmVydGV4QXR0cmliRGl2aXNvckFOR0xFKFwiLGgsXCIsXCIsZixcIi5kaXZpc29yKTtcIil9cmV0dXJuIE9iamVjdC5rZXlzKGl0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBhPWl0W25dLG89aS5kZWYoYyxcIi5cIixuKSxzPXQuYmxvY2soKTtzKFwiaWYoXCIsbyxcIil7XCIsbCxcIi5lbmFibGUoXCIsYSxcIil9ZWxzZXtcIixsLFwiLmRpc2FibGUoXCIsYSxcIil9XCIsdSxcIi5cIixuLFwiPVwiLG8sXCI7XCIpLHIocyksZShcImlmKFwiLG8sXCIhPT1cIix1LFwiLlwiLG4sXCIpe1wiLHMsXCJ9XCIpfSksT2JqZWN0LmtleXMoYXQpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIG8scyxoPWF0W25dLGY9dHRbbl0scD10LmJsb2NrKCk7cChsLFwiLlwiLGgsXCIoXCIpLHYoZik/KGg9Zi5sZW5ndGgsbz10Lmdsb2JhbC5kZWYoYyxcIi5cIixuKSxzPXQuZ2xvYmFsLmRlZih1LFwiLlwiLG4pLHAoYShoLGZ1bmN0aW9uKHQpe3JldHVybiBvK1wiW1wiK3QrXCJdXCJ9KSxcIik7XCIsYShoLGZ1bmN0aW9uKHQpe3JldHVybiBzK1wiW1wiK3QrXCJdPVwiK28rXCJbXCIrdCtcIl07XCJ9KS5qb2luKFwiXCIpKSxlKFwiaWYoXCIsYShoLGZ1bmN0aW9uKHQpe3JldHVybiBvK1wiW1wiK3QrXCJdIT09XCIrcytcIltcIit0K1wiXVwifSkuam9pbihcInx8XCIpLFwiKXtcIixwLFwifVwiKSk6KG89aS5kZWYoYyxcIi5cIixuKSxzPWkuZGVmKHUsXCIuXCIsbikscChvLFwiKTtcIix1LFwiLlwiLG4sXCI9XCIsbyxcIjtcIiksZShcImlmKFwiLG8sXCIhPT1cIixzLFwiKXtcIixwLFwifVwiKSkscihwKX0pLHQuY29tcGlsZSgpfSgpLGNvbXBpbGU6ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1iKCk7cmV0dXJuIGEuc3RhdHM9YS5saW5rKGkpLE9iamVjdC5rZXlzKGUuc3RhdGljKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe1goYSxlLHQpfSksX3QuZm9yRWFjaChmdW5jdGlvbihlKXtYKGEsdCxlKX0pLHI9VCh0LGUscixuKSxmdW5jdGlvbih0LGUpe3ZhciByPXQucHJvYyhcImRyYXdcIiwxKTtMKHQsciksTSh0LHIsZS5jb250ZXh0KSxTKHQscixlLmZyYW1lYnVmZmVyKSxFKHQscixlKSxDKHQscixlLnN0YXRlKSxCKHQscixlLCExLCEwKTt2YXIgbj1lLnNoYWRlci5wcm9nVmFyLmFwcGVuZCh0LHIpO2lmKHIodC5zaGFyZWQuZ2wsXCIudXNlUHJvZ3JhbShcIixuLFwiLnByb2dyYW0pO1wiKSxlLnNoYWRlci5wcm9ncmFtKUgodCxyLGUsZS5zaGFkZXIucHJvZ3JhbSk7ZWxzZXt2YXIgaT10Lmdsb2JhbC5kZWYoXCJ7fVwiKSxhPXIuZGVmKG4sXCIuaWRcIiksbz1yLmRlZihpLFwiW1wiLGEsXCJdXCIpO3IodC5jb25kKG8pLnRoZW4obyxcIi5jYWxsKHRoaXMsYTApO1wiKS5lbHNlKG8sXCI9XCIsaSxcIltcIixhLFwiXT1cIix0LmxpbmsoZnVuY3Rpb24ocil7cmV0dXJuIHEoSCx0LGUsciwxKX0pLFwiKFwiLG4sXCIpO1wiLG8sXCIuY2FsbCh0aGlzLGEwKTtcIikpfTA8T2JqZWN0LmtleXMoZS5zdGF0ZSkubGVuZ3RoJiZyKHQuc2hhcmVkLmN1cnJlbnQsXCIuZGlydHk9dHJ1ZTtcIil9KGEsciksVyhhLHIpLGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdC5jb250ZXh0RGVwJiZpfHx0LnByb3BEZXB9dmFyIG49dC5wcm9jKFwiYmF0Y2hcIiwyKTt0LmJhdGNoSWQ9XCIwXCIsTCh0LG4pO3ZhciBpPSExLGE9ITA7T2JqZWN0LmtleXMoZS5jb250ZXh0KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2k9aXx8ZS5jb250ZXh0W3RdLnByb3BEZXB9KSxpfHwoTSh0LG4sZS5jb250ZXh0KSxhPSExKTt2YXIgbz0hMTtpZigocz1lLmZyYW1lYnVmZmVyKT8ocy5wcm9wRGVwP2k9bz0hMDpzLmNvbnRleHREZXAmJmkmJihvPSEwKSxvfHxTKHQsbixzKSk6Uyh0LG4sbnVsbCksZS5zdGF0ZS52aWV3cG9ydCYmZS5zdGF0ZS52aWV3cG9ydC5wcm9wRGVwJiYoaT0hMCksRSh0LG4sZSksQyh0LG4sZS5zdGF0ZSxmdW5jdGlvbih0KXtyZXR1cm4hcih0KX0pLGUucHJvZmlsZSYmcihlLnByb2ZpbGUpfHxCKHQsbixlLCExLFwiYTFcIiksZS5jb250ZXh0RGVwPWksZS5uZWVkc0NvbnRleHQ9YSxlLm5lZWRzRnJhbWVidWZmZXI9bywoYT1lLnNoYWRlci5wcm9nVmFyKS5jb250ZXh0RGVwJiZpfHxhLnByb3BEZXApWSh0LG4sZSxudWxsKTtlbHNlIGlmKGE9YS5hcHBlbmQodCxuKSxuKHQuc2hhcmVkLmdsLFwiLnVzZVByb2dyYW0oXCIsYSxcIi5wcm9ncmFtKTtcIiksZS5zaGFkZXIucHJvZ3JhbSlZKHQsbixlLGUuc2hhZGVyLnByb2dyYW0pO2Vsc2V7dmFyIHM9dC5nbG9iYWwuZGVmKFwie31cIiksbD0obz1uLmRlZihhLFwiLmlkXCIpLG4uZGVmKHMsXCJbXCIsbyxcIl1cIikpO24odC5jb25kKGwpLnRoZW4obCxcIi5jYWxsKHRoaXMsYTAsYTEpO1wiKS5lbHNlKGwsXCI9XCIscyxcIltcIixvLFwiXT1cIix0LmxpbmsoZnVuY3Rpb24ocil7cmV0dXJuIHEoWSx0LGUsciwyKX0pLFwiKFwiLGEsXCIpO1wiLGwsXCIuY2FsbCh0aGlzLGEwLGExKTtcIikpfTA8T2JqZWN0LmtleXMoZS5zdGF0ZSkubGVuZ3RoJiZuKHQuc2hhcmVkLmN1cnJlbnQsXCIuZGlydHk9dHJ1ZTtcIil9KGEsciksYS5jb21waWxlKCl9fX1mdW5jdGlvbiBOKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpaWYodFtyXT09PWUpcmV0dXJuIHI7cmV0dXJuLTF9dmFyIGo9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9T2JqZWN0LmtleXMoZSksbj0wO248ci5sZW5ndGg7KytuKXRbcltuXV09ZVtyW25dXTtyZXR1cm4gdH0sVj0wLFU9e0R5bmFtaWNWYXJpYWJsZTp0LGRlZmluZTpmdW5jdGlvbihyLG4pe3JldHVybiBuZXcgdChyLGUobitcIlwiKSl9LGlzRHluYW1pYzpmdW5jdGlvbihlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYhZS5fcmVnbFR5cGV8fGUgaW5zdGFuY2VvZiB0fSx1bmJveDpmdW5jdGlvbihlLHIpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGU/bmV3IHQoMCxlKTplfSxhY2Nlc3NvcjplfSxxPXtuZXh0OlwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT9mdW5jdGlvbih0KXtyZXR1cm4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpfTpmdW5jdGlvbih0KXtyZXR1cm4gc2V0VGltZW91dCh0LDE2KX0sY2FuY2VsOlwiZnVuY3Rpb25cIj09dHlwZW9mIGNhbmNlbEFuaW1hdGlvbkZyYW1lP2Z1bmN0aW9uKHQpe3JldHVybiBjYW5jZWxBbmltYXRpb25GcmFtZSh0KX06Y2xlYXJUaW1lb3V0fSxIPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P2Z1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTpmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX0sRz1zKCk7Ry56ZXJvPXMoKTt2YXIgWT1mdW5jdGlvbih0LGUpe3ZhciByPTE7ZS5leHRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMmJihyPXQuZ2V0UGFyYW1ldGVyKDM0MDQ3KSk7dmFyIG49MSxpPTE7ZS53ZWJnbF9kcmF3X2J1ZmZlcnMmJihuPXQuZ2V0UGFyYW1ldGVyKDM0ODUyKSxpPXQuZ2V0UGFyYW1ldGVyKDM2MDYzKSk7dmFyIGE9ISFlLm9lc190ZXh0dXJlX2Zsb2F0O2lmKGEpe2E9dC5jcmVhdGVUZXh0dXJlKCksdC5iaW5kVGV4dHVyZSgzNTUzLGEpLHQudGV4SW1hZ2UyRCgzNTUzLDAsNjQwOCwxLDEsMCw2NDA4LDUxMjYsbnVsbCk7dmFyIG89dC5jcmVhdGVGcmFtZWJ1ZmZlcigpO2lmKHQuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG8pLHQuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwNjQsMzU1MyxhLDApLHQuYmluZFRleHR1cmUoMzU1MyxudWxsKSwzNjA1MyE9PXQuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cygzNjE2MCkpYT0hMTtlbHNle3Qudmlld3BvcnQoMCwwLDEsMSksdC5jbGVhckNvbG9yKDEsMCwwLDEpLHQuY2xlYXIoMTYzODQpO3ZhciBzPUcuYWxsb2NUeXBlKDUxMjYsNCk7dC5yZWFkUGl4ZWxzKDAsMCwxLDEsNjQwOCw1MTI2LHMpLHQuZ2V0RXJyb3IoKT9hPSExOih0LmRlbGV0ZUZyYW1lYnVmZmVyKG8pLHQuZGVsZXRlVGV4dHVyZShhKSxhPTE9PT1zWzBdKSxHLmZyZWVUeXBlKHMpfX1yZXR1cm4gcz0hMCxcInVuZGVmaW5lZFwiIT10eXBlb2YgbmF2aWdhdG9yJiYoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl8fC9UcmlkZW50XFwvLy50ZXN0KG5hdmlnYXRvci5hcHBWZXJzaW9uKXx8L0VkZ2UvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpfHwocz10LmNyZWF0ZVRleHR1cmUoKSxvPUcuYWxsb2NUeXBlKDUxMjEsMzYpLHQuYWN0aXZlVGV4dHVyZSgzMzk4NCksdC5iaW5kVGV4dHVyZSgzNDA2NyxzKSx0LnRleEltYWdlMkQoMzQwNjksMCw2NDA4LDMsMywwLDY0MDgsNTEyMSxvKSxHLmZyZWVUeXBlKG8pLHQuYmluZFRleHR1cmUoMzQwNjcsbnVsbCksdC5kZWxldGVUZXh0dXJlKHMpLHM9IXQuZ2V0RXJyb3IoKSkse2NvbG9yQml0czpbdC5nZXRQYXJhbWV0ZXIoMzQxMCksdC5nZXRQYXJhbWV0ZXIoMzQxMSksdC5nZXRQYXJhbWV0ZXIoMzQxMiksdC5nZXRQYXJhbWV0ZXIoMzQxMyldLGRlcHRoQml0czp0LmdldFBhcmFtZXRlcigzNDE0KSxzdGVuY2lsQml0czp0LmdldFBhcmFtZXRlcigzNDE1KSxzdWJwaXhlbEJpdHM6dC5nZXRQYXJhbWV0ZXIoMzQwOCksZXh0ZW5zaW9uczpPYmplY3Qua2V5cyhlKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuISFlW3RdfSksbWF4QW5pc290cm9waWM6cixtYXhEcmF3YnVmZmVyczpuLG1heENvbG9yQXR0YWNobWVudHM6aSxwb2ludFNpemVEaW1zOnQuZ2V0UGFyYW1ldGVyKDMzOTAxKSxsaW5lV2lkdGhEaW1zOnQuZ2V0UGFyYW1ldGVyKDMzOTAyKSxtYXhWaWV3cG9ydERpbXM6dC5nZXRQYXJhbWV0ZXIoMzM4NiksbWF4Q29tYmluZWRUZXh0dXJlVW5pdHM6dC5nZXRQYXJhbWV0ZXIoMzU2NjEpLG1heEN1YmVNYXBTaXplOnQuZ2V0UGFyYW1ldGVyKDM0MDc2KSxtYXhSZW5kZXJidWZmZXJTaXplOnQuZ2V0UGFyYW1ldGVyKDM0MDI0KSxtYXhUZXh0dXJlVW5pdHM6dC5nZXRQYXJhbWV0ZXIoMzQ5MzApLG1heFRleHR1cmVTaXplOnQuZ2V0UGFyYW1ldGVyKDMzNzkpLG1heEF0dHJpYnV0ZXM6dC5nZXRQYXJhbWV0ZXIoMzQ5MjEpLG1heFZlcnRleFVuaWZvcm1zOnQuZ2V0UGFyYW1ldGVyKDM2MzQ3KSxtYXhWZXJ0ZXhUZXh0dXJlVW5pdHM6dC5nZXRQYXJhbWV0ZXIoMzU2NjApLG1heFZhcnlpbmdWZWN0b3JzOnQuZ2V0UGFyYW1ldGVyKDM2MzQ4KSxtYXhGcmFnbWVudFVuaWZvcm1zOnQuZ2V0UGFyYW1ldGVyKDM2MzQ5KSxnbHNsOnQuZ2V0UGFyYW1ldGVyKDM1NzI0KSxyZW5kZXJlcjp0LmdldFBhcmFtZXRlcig3OTM3KSx2ZW5kb3I6dC5nZXRQYXJhbWV0ZXIoNzkzNiksdmVyc2lvbjp0LmdldFBhcmFtZXRlcig3OTM4KSxyZWFkRmxvYXQ6YSxucG90VGV4dHVyZUN1YmU6c319LFc9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx0IGluc3RhbmNlb2YgVWludDE2QXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50MzJBcnJheXx8dCBpbnN0YW5jZW9mIEludDhBcnJheXx8dCBpbnN0YW5jZW9mIEludDE2QXJyYXl8fHQgaW5zdGFuY2VvZiBJbnQzMkFycmF5fHx0IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5fHx0IGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5fHx0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXl9LFg9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfSxaPXtzaGFwZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9W107dC5sZW5ndGg7dD10WzBdKWUucHVzaCh0Lmxlbmd0aCk7cmV0dXJuIGV9LGZsYXR0ZW46ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9MTtpZihlLmxlbmd0aClmb3IodmFyIGE9MDthPGUubGVuZ3RoOysrYSlpKj1lW2FdO2Vsc2UgaT0wO3N3aXRjaChyPW58fEcuYWxsb2NUeXBlKHIsaSksZS5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6Zm9yKG49ZVswXSxlPTA7ZTxuOysrZSlyW2VdPXRbZV07YnJlYWs7Y2FzZSAyOmZvcihuPWVbMF0sZT1lWzFdLGE9aT0wO2E8bjsrK2EpZm9yKHZhciBvPXRbYV0scz0wO3M8ZTsrK3MpcltpKytdPW9bc107YnJlYWs7Y2FzZSAzOmModCxlWzBdLGVbMV0sZVsyXSxyLDApO2JyZWFrO2RlZmF1bHQ6IWZ1bmN0aW9uIHQoZSxyLG4saSxhKXtmb3IodmFyIG89MSxzPW4rMTtzPHIubGVuZ3RoOysrcylvKj1yW3NdO3ZhciBsPXJbbl07aWYoND09ci5sZW5ndGgtbil7dmFyIHU9cltuKzFdLGg9cltuKzJdO2ZvcihyPXJbbiszXSxzPTA7czxsOysrcyljKGVbc10sdSxoLHIsaSxhKSxhKz1vfWVsc2UgZm9yKHM9MDtzPGw7KytzKXQoZVtzXSxyLG4rMSxpLGEpLGErPW99KHQsZSwwLHIsMCl9cmV0dXJuIHJ9fSwkPXtcIltvYmplY3QgSW50OEFycmF5XVwiOjUxMjAsXCJbb2JqZWN0IEludDE2QXJyYXldXCI6NTEyMixcIltvYmplY3QgSW50MzJBcnJheV1cIjo1MTI0LFwiW29iamVjdCBVaW50OEFycmF5XVwiOjUxMjEsXCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XVwiOjUxMjEsXCJbb2JqZWN0IFVpbnQxNkFycmF5XVwiOjUxMjMsXCJbb2JqZWN0IFVpbnQzMkFycmF5XVwiOjUxMjUsXCJbb2JqZWN0IEZsb2F0MzJBcnJheV1cIjo1MTI2LFwiW29iamVjdCBGbG9hdDY0QXJyYXldXCI6NTEyMSxcIltvYmplY3QgQXJyYXlCdWZmZXJdXCI6NTEyMX0sSj17aW50ODo1MTIwLGludDE2OjUxMjIsaW50MzI6NTEyNCx1aW50ODo1MTIxLHVpbnQxNjo1MTIzLHVpbnQzMjo1MTI1LGZsb2F0OjUxMjYsZmxvYXQzMjo1MTI2fSxLPXtkeW5hbWljOjM1MDQ4LHN0cmVhbTozNTA0MCxzdGF0aWM6MzUwNDR9LFE9Wi5mbGF0dGVuLHR0PVouc2hhcGUsZXQ9W107ZXRbNTEyMF09MSxldFs1MTIyXT0yLGV0WzUxMjRdPTQsZXRbNTEyMV09MSxldFs1MTIzXT0yLGV0WzUxMjVdPTQsZXRbNTEyNl09NDt2YXIgcnQ9e3BvaW50czowLHBvaW50OjAsbGluZXM6MSxsaW5lOjEsdHJpYW5nbGVzOjQsdHJpYW5nbGU6NCxcImxpbmUgbG9vcFwiOjIsXCJsaW5lIHN0cmlwXCI6MyxcInRyaWFuZ2xlIHN0cmlwXCI6NSxcInRyaWFuZ2xlIGZhblwiOjZ9LG50PW5ldyBGbG9hdDMyQXJyYXkoMSksaXQ9bmV3IFVpbnQzMkFycmF5KG50LmJ1ZmZlciksYXQ9Wzk5ODQsOTk4Niw5OTg1LDk5ODddLG90PVswLDY0MDksNjQxMCw2NDA3LDY0MDhdLHN0PXt9O3N0WzY0MDldPXN0WzY0MDZdPXN0WzY0MDJdPTEsc3RbMzQwNDFdPXN0WzY0MTBdPTIsc3RbNjQwN109c3RbMzU5MDRdPTMsc3RbNjQwOF09c3RbMzU5MDZdPTQ7dmFyIGx0PW0oXCJIVE1MQ2FudmFzRWxlbWVudFwiKSxjdD1tKFwiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEXCIpLHV0PW0oXCJJbWFnZUJpdG1hcFwiKSxodD1tKFwiSFRNTEltYWdlRWxlbWVudFwiKSxmdD1tKFwiSFRNTFZpZGVvRWxlbWVudFwiKSxwdD1PYmplY3Qua2V5cygkKS5jb25jYXQoW2x0LGN0LHV0LGh0LGZ0XSksZHQ9W107ZHRbNTEyMV09MSxkdFs1MTI2XT00LGR0WzM2MTkzXT0yLGR0WzUxMjNdPTIsZHRbNTEyNV09NDt2YXIgZ3Q9W107Z3RbMzI4NTRdPTIsZ3RbMzI4NTVdPTIsZ3RbMzYxOTRdPTIsZ3RbMzQwNDFdPTQsZ3RbMzM3NzZdPS41LGd0WzMzNzc3XT0uNSxndFszMzc3OF09MSxndFszMzc3OV09MSxndFszNTk4Nl09LjUsZ3RbMzU5ODddPTEsZ3RbMzQ3OThdPTEsZ3RbMzU4NDBdPS41LGd0WzM1ODQxXT0uMjUsZ3RbMzU4NDJdPS41LGd0WzM1ODQzXT0uMjUsZ3RbMzYxOTZdPS41O3ZhciB2dD1bXTt2dFszMjg1NF09Mix2dFszMjg1NV09Mix2dFszNjE5NF09Mix2dFszMzE4OV09Mix2dFszNjE2OF09MSx2dFszNDA0MV09NCx2dFszNTkwN109NCx2dFszNDgzNl09MTYsdnRbMzQ4NDJdPTgsdnRbMzQ4NDNdPTY7dmFyIG10PWZ1bmN0aW9uKHQsZSxyLG4saSl7ZnVuY3Rpb24gYSh0KXt0aGlzLmlkPWMrKyx0aGlzLnJlZkNvdW50PTEsdGhpcy5yZW5kZXJidWZmZXI9dCx0aGlzLmZvcm1hdD0zMjg1NCx0aGlzLmhlaWdodD10aGlzLndpZHRoPTAsaS5wcm9maWxlJiYodGhpcy5zdGF0cz17c2l6ZTowfSl9ZnVuY3Rpb24gbyhlKXt2YXIgcj1lLnJlbmRlcmJ1ZmZlcjt0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsbnVsbCksdC5kZWxldGVSZW5kZXJidWZmZXIociksZS5yZW5kZXJidWZmZXI9bnVsbCxlLnJlZkNvdW50PTAsZGVsZXRlIHVbZS5pZF0sbi5yZW5kZXJidWZmZXJDb3VudC0tfXZhciBzPXtyZ2JhNDozMjg1NCxyZ2I1NjU6MzYxOTQsXCJyZ2I1IGExXCI6MzI4NTUsZGVwdGg6MzMxODksc3RlbmNpbDozNjE2OCxcImRlcHRoIHN0ZW5jaWxcIjozNDA0MX07ZS5leHRfc3JnYiYmKHMuc3JnYmE9MzU5MDcpLGUuZXh0X2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0JiYocy5yZ2JhMTZmPTM0ODQyLHMucmdiMTZmPTM0ODQzKSxlLndlYmdsX2NvbG9yX2J1ZmZlcl9mbG9hdCYmKHMucmdiYTMyZj0zNDgzNik7dmFyIGw9W107T2JqZWN0LmtleXMocykuZm9yRWFjaChmdW5jdGlvbih0KXtsW3NbdF1dPXR9KTt2YXIgYz0wLHU9e307cmV0dXJuIGEucHJvdG90eXBlLmRlY1JlZj1mdW5jdGlvbigpezA+PS0tdGhpcy5yZWZDb3VudCYmbyh0aGlzKX0saS5wcm9maWxlJiYobi5nZXRUb3RhbFJlbmRlcmJ1ZmZlclNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBPYmplY3Qua2V5cyh1KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QrPXVbZV0uc3RhdHMuc2l6ZX0pLHR9KSx7Y3JlYXRlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbyhlLHIpe3ZhciBuPTAsYT0wLHU9MzI4NTQ7aWYoXCJvYmplY3RcIj09dHlwZW9mIGUmJmU/KFwic2hhcGVcImluIGU/KG49MHwoYT1lLnNoYXBlKVswXSxhPTB8YVsxXSk6KFwicmFkaXVzXCJpbiBlJiYobj1hPTB8ZS5yYWRpdXMpLFwid2lkdGhcImluIGUmJihuPTB8ZS53aWR0aCksXCJoZWlnaHRcImluIGUmJihhPTB8ZS5oZWlnaHQpKSxcImZvcm1hdFwiaW4gZSYmKHU9c1tlLmZvcm1hdF0pKTpcIm51bWJlclwiPT10eXBlb2YgZT8obj0wfGUsYT1cIm51bWJlclwiPT10eXBlb2Ygcj8wfHI6bik6ZXx8KG49YT0xKSxuIT09Yy53aWR0aHx8YSE9PWMuaGVpZ2h0fHx1IT09Yy5mb3JtYXQpcmV0dXJuIG8ud2lkdGg9Yy53aWR0aD1uLG8uaGVpZ2h0PWMuaGVpZ2h0PWEsYy5mb3JtYXQ9dSx0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsYy5yZW5kZXJidWZmZXIpLHQucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSx1LG4sYSksaS5wcm9maWxlJiYoYy5zdGF0cy5zaXplPXZ0W2MuZm9ybWF0XSpjLndpZHRoKmMuaGVpZ2h0KSxvLmZvcm1hdD1sW2MuZm9ybWF0XSxvfXZhciBjPW5ldyBhKHQuY3JlYXRlUmVuZGVyYnVmZmVyKCkpO3JldHVybiB1W2MuaWRdPWMsbi5yZW5kZXJidWZmZXJDb3VudCsrLG8oZSxyKSxvLnJlc2l6ZT1mdW5jdGlvbihlLHIpe3ZhciBuPTB8ZSxhPTB8cnx8bjtyZXR1cm4gbj09PWMud2lkdGgmJmE9PT1jLmhlaWdodD9vOihvLndpZHRoPWMud2lkdGg9bixvLmhlaWdodD1jLmhlaWdodD1hLHQuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxjLnJlbmRlcmJ1ZmZlciksdC5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLGMuZm9ybWF0LG4sYSksaS5wcm9maWxlJiYoYy5zdGF0cy5zaXplPXZ0W2MuZm9ybWF0XSpjLndpZHRoKmMuaGVpZ2h0KSxvKX0sby5fcmVnbFR5cGU9XCJyZW5kZXJidWZmZXJcIixvLl9yZW5kZXJidWZmZXI9YyxpLnByb2ZpbGUmJihvLnN0YXRzPWMuc3RhdHMpLG8uZGVzdHJveT1mdW5jdGlvbigpe2MuZGVjUmVmKCl9LG99LGNsZWFyOmZ1bmN0aW9uKCl7WCh1KS5mb3JFYWNoKG8pfSxyZXN0b3JlOmZ1bmN0aW9uKCl7WCh1KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UucmVuZGVyYnVmZmVyPXQuY3JlYXRlUmVuZGVyYnVmZmVyKCksdC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLGUucmVuZGVyYnVmZmVyKSx0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsZS5mb3JtYXQsZS53aWR0aCxlLmhlaWdodCl9KSx0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsbnVsbCl9fX0seXQ9W107eXRbNjQwOF09NCx5dFs2NDA3XT0zO3ZhciB4dD1bXTt4dFs1MTIxXT0xLHh0WzUxMjZdPTQseHRbMzYxOTNdPTI7dmFyIGJ0PVtcInhcIixcInlcIixcInpcIixcIndcIl0sX3Q9XCJibGVuZC5mdW5jIGJsZW5kLmVxdWF0aW9uIHN0ZW5jaWwuZnVuYyBzdGVuY2lsLm9wRnJvbnQgc3RlbmNpbC5vcEJhY2sgc2FtcGxlLmNvdmVyYWdlIHZpZXdwb3J0IHNjaXNzb3IuYm94IHBvbHlnb25PZmZzZXQub2Zmc2V0XCIuc3BsaXQoXCIgXCIpLHd0PXswOjAsMToxLHplcm86MCxvbmU6MSxcInNyYyBjb2xvclwiOjc2OCxcIm9uZSBtaW51cyBzcmMgY29sb3JcIjo3NjksXCJzcmMgYWxwaGFcIjo3NzAsXCJvbmUgbWludXMgc3JjIGFscGhhXCI6NzcxLFwiZHN0IGNvbG9yXCI6Nzc0LFwib25lIG1pbnVzIGRzdCBjb2xvclwiOjc3NSxcImRzdCBhbHBoYVwiOjc3MixcIm9uZSBtaW51cyBkc3QgYWxwaGFcIjo3NzMsXCJjb25zdGFudCBjb2xvclwiOjMyNzY5LFwib25lIG1pbnVzIGNvbnN0YW50IGNvbG9yXCI6MzI3NzAsXCJjb25zdGFudCBhbHBoYVwiOjMyNzcxLFwib25lIG1pbnVzIGNvbnN0YW50IGFscGhhXCI6MzI3NzIsXCJzcmMgYWxwaGEgc2F0dXJhdGVcIjo3NzZ9LGt0PXtuZXZlcjo1MTIsbGVzczo1MTMsXCI8XCI6NTEzLGVxdWFsOjUxNCxcIj1cIjo1MTQsXCI9PVwiOjUxNCxcIj09PVwiOjUxNCxsZXF1YWw6NTE1LFwiPD1cIjo1MTUsZ3JlYXRlcjo1MTYsXCI+XCI6NTE2LG5vdGVxdWFsOjUxNyxcIiE9XCI6NTE3LFwiIT09XCI6NTE3LGdlcXVhbDo1MTgsXCI+PVwiOjUxOCxhbHdheXM6NTE5fSxBdD17MDowLHplcm86MCxrZWVwOjc2ODAscmVwbGFjZTo3NjgxLGluY3JlbWVudDo3NjgyLGRlY3JlbWVudDo3NjgzLFwiaW5jcmVtZW50IHdyYXBcIjozNDA1NSxcImRlY3JlbWVudCB3cmFwXCI6MzQwNTYsaW52ZXJ0OjUzODZ9LFR0PXtjdzoyMzA0LGNjdzoyMzA1fSxNdD1uZXcgRCghMSwhMSwhMSxmdW5jdGlvbigpe30pO3JldHVybiBmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7aWYoMD09PVoubGVuZ3RoKXcmJncudXBkYXRlKCksUT1udWxsO2Vsc2V7UT1xLm5leHQoZSksaCgpO2Zvcih2YXIgdD1aLmxlbmd0aC0xOzA8PXQ7LS10KXt2YXIgcj1aW3RdO3ImJnIoeixudWxsLDApfXYuZmx1c2goKSx3JiZ3LnVwZGF0ZSgpfX1mdW5jdGlvbiByKCl7IVEmJjA8Wi5sZW5ndGgmJihRPXEubmV4dChlKSl9ZnVuY3Rpb24gbigpe1EmJihxLmNhbmNlbChlKSxRPW51bGwpfWZ1bmN0aW9uIGEodCl7dC5wcmV2ZW50RGVmYXVsdCgpLG4oKSwkLmZvckVhY2goZnVuY3Rpb24odCl7dCgpfSl9ZnVuY3Rpb24gbyh0KXt2LmdldEVycm9yKCkseS5yZXN0b3JlKCksUC5yZXN0b3JlKCksSS5yZXN0b3JlKCksUi5yZXN0b3JlKCksRi5yZXN0b3JlKCksVi5yZXN0b3JlKCksdyYmdy5yZXN0b3JlKCksRy5wcm9jcy5yZWZyZXNoKCkscigpLEouZm9yRWFjaChmdW5jdGlvbih0KXt0KCl9KX1mdW5jdGlvbiBzKHQpe2Z1bmN0aW9uIGUodCl7dmFyIGU9e30scj17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT10W25dO1UuaXNEeW5hbWljKGkpP3Jbbl09VS51bmJveChpLG4pOmVbbl09aX0pLHtkeW5hbWljOnIsc3RhdGljOmV9fXZhciByPWUodC5jb250ZXh0fHx7fSksbj1lKHQudW5pZm9ybXN8fHt9KSxpPWUodC5hdHRyaWJ1dGVzfHx7fSksYT1lKGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7aWYodCBpbiByKXt2YXIgZT1yW3RdO2RlbGV0ZSByW3RdLE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24obil7clt0K1wiLlwiK25dPWVbbl19KX19dmFyIHI9aih7fSx0KTtyZXR1cm4gZGVsZXRlIHIudW5pZm9ybXMsZGVsZXRlIHIuYXR0cmlidXRlcyxkZWxldGUgci5jb250ZXh0LFwic3RlbmNpbFwiaW4gciYmci5zdGVuY2lsLm9wJiYoci5zdGVuY2lsLm9wQmFjaz1yLnN0ZW5jaWwub3BGcm9udD1yLnN0ZW5jaWwub3AsZGVsZXRlIHIuc3RlbmNpbC5vcCksZShcImJsZW5kXCIpLGUoXCJkZXB0aFwiKSxlKFwiY3VsbFwiKSxlKFwic3RlbmNpbFwiKSxlKFwicG9seWdvbk9mZnNldFwiKSxlKFwic2Npc3NvclwiKSxlKFwic2FtcGxlXCIpLHJ9KHQpKTt0PXtncHVUaW1lOjAsY3B1VGltZTowLGNvdW50OjB9O3ZhciBvPShyPUcuY29tcGlsZShhLGksbixyLHQpKS5kcmF3LHM9ci5iYXRjaCxsPXIuc2NvcGUsYz1bXTtyZXR1cm4gaihmdW5jdGlvbih0LGUpe3ZhciByO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpcmV0dXJuIGwuY2FsbCh0aGlzLG51bGwsdCwwKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlKWlmKFwibnVtYmVyXCI9PXR5cGVvZiB0KWZvcihyPTA7cjx0OysrcilsLmNhbGwodGhpcyxudWxsLGUscik7ZWxzZXtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gbC5jYWxsKHRoaXMsdCxlLDApO2ZvcihyPTA7cjx0Lmxlbmd0aDsrK3IpbC5jYWxsKHRoaXMsdFtyXSxlLHIpfWVsc2UgaWYoXCJudW1iZXJcIj09dHlwZW9mIHQpe2lmKDA8dClyZXR1cm4gcy5jYWxsKHRoaXMsZnVuY3Rpb24odCl7Zm9yKDtjLmxlbmd0aDx0OyljLnB1c2gobnVsbCk7cmV0dXJuIGN9KDB8dCksMHx0KX1lbHNle2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiBvLmNhbGwodGhpcyx0KTtpZih0Lmxlbmd0aClyZXR1cm4gcy5jYWxsKHRoaXMsdCx0Lmxlbmd0aCl9fSx7c3RhdHM6dH0pfWZ1bmN0aW9uIGwodCxlKXt2YXIgcj0wO0cucHJvY3MucG9sbCgpO3ZhciBuPWUuY29sb3I7biYmKHYuY2xlYXJDb2xvcigrblswXXx8MCwrblsxXXx8MCwrblsyXXx8MCwrblszXXx8MCkscnw9MTYzODQpLFwiZGVwdGhcImluIGUmJih2LmNsZWFyRGVwdGgoK2UuZGVwdGgpLHJ8PTI1NiksXCJzdGVuY2lsXCJpbiBlJiYodi5jbGVhclN0ZW5jaWwoMHxlLnN0ZW5jaWwpLHJ8PTEwMjQpLHYuY2xlYXIocil9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gWi5wdXNoKHQpLHIoKSx7Y2FuY2VsOmZ1bmN0aW9uKCl7dmFyIGU9TihaLHQpO1pbZV09ZnVuY3Rpb24gdCgpe3ZhciBlPU4oWix0KTtaW2VdPVpbWi5sZW5ndGgtMV0sLS1aLmxlbmd0aCwwPj1aLmxlbmd0aCYmbigpfX19fWZ1bmN0aW9uIHUoKXt2YXIgdD1XLnZpZXdwb3J0LGU9Vy5zY2lzc29yX2JveDt0WzBdPXRbMV09ZVswXT1lWzFdPTAsei52aWV3cG9ydFdpZHRoPXouZnJhbWVidWZmZXJXaWR0aD16LmRyYXdpbmdCdWZmZXJXaWR0aD10WzJdPWVbMl09di5kcmF3aW5nQnVmZmVyV2lkdGgsei52aWV3cG9ydEhlaWdodD16LmZyYW1lYnVmZmVySGVpZ2h0PXouZHJhd2luZ0J1ZmZlckhlaWdodD10WzNdPWVbM109di5kcmF3aW5nQnVmZmVySGVpZ2h0fWZ1bmN0aW9uIGgoKXt6LnRpY2srPTEsei50aW1lPWcoKSx1KCksRy5wcm9jcy5wb2xsKCl9ZnVuY3Rpb24gZigpe3UoKSxHLnByb2NzLnJlZnJlc2goKSx3JiZ3LnVwZGF0ZSgpfWZ1bmN0aW9uIGcoKXtyZXR1cm4oSCgpLWspLzFlM31pZighKHQ9aSh0KSkpcmV0dXJuIG51bGw7dmFyIHY9dC5nbCxtPXYuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTt2LmlzQ29udGV4dExvc3QoKTt2YXIgeT1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoZSl7dmFyIHI7ZT1lLnRvTG93ZXJDYXNlKCk7dHJ5e3I9bltlXT10LmdldEV4dGVuc2lvbihlKX1jYXRjaCh0KXt9cmV0dXJuISFyfWZvcih2YXIgbj17fSxpPTA7aTxlLmV4dGVuc2lvbnMubGVuZ3RoOysraSl7dmFyIGE9ZS5leHRlbnNpb25zW2ldO2lmKCFyKGEpKXJldHVybiBlLm9uRGVzdHJveSgpLGUub25Eb25lKCdcIicrYSsnXCIgZXh0ZW5zaW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgV2ViR0wgY29udGV4dCwgdHJ5IHVwZ3JhZGluZyB5b3VyIHN5c3RlbSBvciBhIGRpZmZlcmVudCBicm93c2VyJyksbnVsbH1yZXR1cm4gZS5vcHRpb25hbEV4dGVuc2lvbnMuZm9yRWFjaChyKSx7ZXh0ZW5zaW9uczpuLHJlc3RvcmU6ZnVuY3Rpb24oKXtPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKG5bdF0mJiFyKHQpKXRocm93IEVycm9yKFwiKHJlZ2wpOiBlcnJvciByZXN0b3JpbmcgZXh0ZW5zaW9uIFwiK3QpfSl9fX0odix0KTtpZigheSlyZXR1cm4gbnVsbDt2YXIgeD1mdW5jdGlvbigpe3ZhciB0PXtcIlwiOjB9LGU9W1wiXCJdO3JldHVybntpZDpmdW5jdGlvbihyKXt2YXIgbj10W3JdO3JldHVybiBufHwobj10W3JdPWUubGVuZ3RoLGUucHVzaChyKSxuKX0sc3RyOmZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfX19KCksYj17YnVmZmVyQ291bnQ6MCxlbGVtZW50c0NvdW50OjAsZnJhbWVidWZmZXJDb3VudDowLHNoYWRlckNvdW50OjAsdGV4dHVyZUNvdW50OjAsY3ViZUNvdW50OjAscmVuZGVyYnVmZmVyQ291bnQ6MCxtYXhUZXh0dXJlVW5pdHM6MH0sXz15LmV4dGVuc2lvbnMsdz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoKXt0aGlzLmVuZFF1ZXJ5SW5kZXg9dGhpcy5zdGFydFF1ZXJ5SW5kZXg9LTEsdGhpcy5zdW09MCx0aGlzLnN0YXRzPW51bGx9ZnVuY3Rpb24gbih0LGUsbil7dmFyIGk9by5wb3AoKXx8bmV3IHI7aS5zdGFydFF1ZXJ5SW5kZXg9dCxpLmVuZFF1ZXJ5SW5kZXg9ZSxpLnN1bT0wLGkuc3RhdHM9bixzLnB1c2goaSl9aWYoIWUuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5KXJldHVybiBudWxsO3ZhciBpPVtdLGE9W10sbz1bXSxzPVtdLGw9W10sYz1bXTtyZXR1cm57YmVnaW5RdWVyeTpmdW5jdGlvbih0KXt2YXIgcj1pLnBvcCgpfHxlLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5jcmVhdGVRdWVyeUVYVCgpO2UuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmJlZ2luUXVlcnlFWFQoMzUwMDcsciksYS5wdXNoKHIpLG4oYS5sZW5ndGgtMSxhLmxlbmd0aCx0KX0sZW5kUXVlcnk6ZnVuY3Rpb24oKXtlLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5lbmRRdWVyeUVYVCgzNTAwNyl9LHB1c2hTY29wZVN0YXRzOm4sdXBkYXRlOmZ1bmN0aW9uKCl7dmFyIHQscjtpZigwIT09KHQ9YS5sZW5ndGgpKXtjLmxlbmd0aD1NYXRoLm1heChjLmxlbmd0aCx0KzEpLGwubGVuZ3RoPU1hdGgubWF4KGwubGVuZ3RoLHQrMSksbFswXT0wO3ZhciBuPWNbMF09MDtmb3Iocj10PTA7cjxhLmxlbmd0aDsrK3Ipe3ZhciB1PWFbcl07ZS5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuZ2V0UXVlcnlPYmplY3RFWFQodSwzNDkxOSk/KG4rPWUuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmdldFF1ZXJ5T2JqZWN0RVhUKHUsMzQ5MTgpLGkucHVzaCh1KSk6YVt0KytdPXUsbFtyKzFdPW4sY1tyKzFdPXR9Zm9yKGEubGVuZ3RoPXQscj10PTA7cjxzLmxlbmd0aDsrK3Ipe3ZhciBoPShuPXNbcl0pLnN0YXJ0UXVlcnlJbmRleDt1PW4uZW5kUXVlcnlJbmRleCxuLnN1bSs9bFt1XS1sW2hdLGg9Y1toXSwodT1jW3VdKT09PWg/KG4uc3RhdHMuZ3B1VGltZSs9bi5zdW0vMWU2LG8ucHVzaChuKSk6KG4uc3RhcnRRdWVyeUluZGV4PWgsbi5lbmRRdWVyeUluZGV4PXUsc1t0KytdPW4pfXMubGVuZ3RoPXR9fSxnZXROdW1QZW5kaW5nUXVlcmllczpmdW5jdGlvbigpe3JldHVybiBhLmxlbmd0aH0sY2xlYXI6ZnVuY3Rpb24oKXtpLnB1c2guYXBwbHkoaSxhKTtmb3IodmFyIHQ9MDt0PGkubGVuZ3RoO3QrKyllLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5kZWxldGVRdWVyeUVYVChpW3RdKTthLmxlbmd0aD0wLGkubGVuZ3RoPTB9LHJlc3RvcmU6ZnVuY3Rpb24oKXthLmxlbmd0aD0wLGkubGVuZ3RoPTB9fX0oMCxfKSxrPUgoKSxDPXYuZHJhd2luZ0J1ZmZlcldpZHRoLEw9di5kcmF3aW5nQnVmZmVySGVpZ2h0LHo9e3RpY2s6MCx0aW1lOjAsdmlld3BvcnRXaWR0aDpDLHZpZXdwb3J0SGVpZ2h0OkwsZnJhbWVidWZmZXJXaWR0aDpDLGZyYW1lYnVmZmVySGVpZ2h0OkwsZHJhd2luZ0J1ZmZlcldpZHRoOkMsZHJhd2luZ0J1ZmZlckhlaWdodDpMLHBpeGVsUmF0aW86dC5waXhlbFJhdGlvfSxPPVkodixfKSxJPShDPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih0PXIubWF4QXR0cmlidXRlcyxlPUFycmF5KHQpLHI9MDtyPHQ7KytyKWVbcl09bmV3IE07cmV0dXJue1JlY29yZDpNLHNjb3BlOnt9LHN0YXRlOmV9fSh2LF8sTykscCh2LGIsdCxDKSksRD1kKHYsXyxJLGIpLFA9Uyh2LHgsYix0KSxSPUEodixfLE8sZnVuY3Rpb24oKXtHLnByb2NzLnBvbGwoKX0seixiLHQpLEY9bXQodixfLDAsYix0KSxWPVQodixfLE8sUixGLGIpLEc9Qih2LHgsXyxPLEksRCwwLFYse30sQyxQLHtlbGVtZW50czpudWxsLHByaW1pdGl2ZTo0LGNvdW50Oi0xLG9mZnNldDowLGluc3RhbmNlczotMX0seix3LHQpLFc9KHg9RSh2LFYsRy5wcm9jcy5wb2xsLHopLEcubmV4dCksWD12LmNhbnZhcyxaPVtdLCQ9W10sSj1bXSxLPVt0Lm9uRGVzdHJveV0sUT1udWxsO1gmJihYLmFkZEV2ZW50TGlzdGVuZXIoXCJ3ZWJnbGNvbnRleHRsb3N0XCIsYSwhMSksWC5hZGRFdmVudExpc3RlbmVyKFwid2ViZ2xjb250ZXh0cmVzdG9yZWRcIixvLCExKSk7dmFyIHR0PVYuc2V0RkJPPXMoe2ZyYW1lYnVmZmVyOlUuZGVmaW5lLmNhbGwobnVsbCwxLFwiZnJhbWVidWZmZXJcIil9KTtyZXR1cm4gZigpLG09aihzLHtjbGVhcjpmdW5jdGlvbih0KXtpZihcImZyYW1lYnVmZmVyXCJpbiB0KWlmKHQuZnJhbWVidWZmZXImJlwiZnJhbWVidWZmZXJDdWJlXCI9PT10LmZyYW1lYnVmZmVyX3JlZ2xUeXBlKWZvcih2YXIgZT0wOzY+ZTsrK2UpdHQoaih7ZnJhbWVidWZmZXI6dC5mcmFtZWJ1ZmZlci5mYWNlc1tlXX0sdCksbCk7ZWxzZSB0dCh0LGwpO2Vsc2UgbCgwLHQpfSxwcm9wOlUuZGVmaW5lLmJpbmQobnVsbCwxKSxjb250ZXh0OlUuZGVmaW5lLmJpbmQobnVsbCwyKSx0aGlzOlUuZGVmaW5lLmJpbmQobnVsbCwzKSxkcmF3OnMoe30pLGJ1ZmZlcjpmdW5jdGlvbih0KXtyZXR1cm4gSS5jcmVhdGUodCwzNDk2MiwhMSwhMSl9LGVsZW1lbnRzOmZ1bmN0aW9uKHQpe3JldHVybiBELmNyZWF0ZSh0LCExKX0sdGV4dHVyZTpSLmNyZWF0ZTJELGN1YmU6Ui5jcmVhdGVDdWJlLHJlbmRlcmJ1ZmZlcjpGLmNyZWF0ZSxmcmFtZWJ1ZmZlcjpWLmNyZWF0ZSxmcmFtZWJ1ZmZlckN1YmU6Vi5jcmVhdGVDdWJlLGF0dHJpYnV0ZXM6bSxmcmFtZTpjLG9uOmZ1bmN0aW9uKHQsZSl7dmFyIHI7c3dpdGNoKHQpe2Nhc2VcImZyYW1lXCI6cmV0dXJuIGMoZSk7Y2FzZVwibG9zdFwiOnI9JDticmVhaztjYXNlXCJyZXN0b3JlXCI6cj1KO2JyZWFrO2Nhc2VcImRlc3Ryb3lcIjpyPUt9cmV0dXJuIHIucHVzaChlKSx7Y2FuY2VsOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxyLmxlbmd0aDsrK3QpaWYoclt0XT09PWUpe3JbdF09cltyLmxlbmd0aC0xXSxyLnBvcCgpO2JyZWFrfX19fSxsaW1pdHM6TyxoYXNFeHRlbnNpb246ZnVuY3Rpb24odCl7cmV0dXJuIDA8PU8uZXh0ZW5zaW9ucy5pbmRleE9mKHQudG9Mb3dlckNhc2UoKSl9LHJlYWQ6eCxkZXN0cm95OmZ1bmN0aW9uKCl7Wi5sZW5ndGg9MCxuKCksWCYmKFgucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndlYmdsY29udGV4dGxvc3RcIixhKSxYLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ3ZWJnbGNvbnRleHRyZXN0b3JlZFwiLG8pKSxQLmNsZWFyKCksVi5jbGVhcigpLEYuY2xlYXIoKSxSLmNsZWFyKCksRC5jbGVhcigpLEkuY2xlYXIoKSx3JiZ3LmNsZWFyKCksSy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QoKX0pfSxfZ2w6dixfcmVmcmVzaDpmLHBvbGw6ZnVuY3Rpb24oKXtoKCksdyYmdy51cGRhdGUoKX0sbm93Omcsc3RhdHM6Yn0pLHQub25Eb25lKG51bGwsbSksbX19LFwib2JqZWN0XCI9PXR5cGVvZiByJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZT9lLmV4cG9ydHM9aSgpOm4uY3JlYXRlUkVHTD1pKCl9LHt9XSw0ODg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbixpPVwiXCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcImV4cGVjdGVkIGEgc3RyaW5nXCIpO2lmKDE9PT1lKXJldHVybiB0O2lmKDI9PT1lKXJldHVybiB0K3Q7dmFyIHI9dC5sZW5ndGgqZTtpZihuIT09dHx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIG4pbj10LGk9XCJcIjtlbHNlIGlmKGkubGVuZ3RoPj1yKXJldHVybiBpLnN1YnN0cigwLHIpO2Zvcig7cj5pLmxlbmd0aCYmZT4xOykxJmUmJihpKz10KSxlPj49MSx0Kz10O3JldHVybiBpPShpKz10KS5zdWJzdHIoMCxyKX19LHt9XSw0ODk6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZS5leHBvcnRzPXQucGVyZm9ybWFuY2UmJnQucGVyZm9ybWFuY2Uubm93P2Z1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTpEYXRlLm5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9fSkuY2FsbCh0aGlzLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7fV0sNDkwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPXRbdC5sZW5ndGgtMV0sbj1lLGk9ZS0yO2k+PTA7LS1pKXt2YXIgYT1yLG89dFtpXSxzPShyPWErbyktYSxsPW8tcztsJiYodFstLW5dPXIscj1sKX1mb3IodmFyIGM9MCxpPW47aTxlOysraSl7dmFyIGE9dFtpXSxvPXIscz0ocj1hK28pLWEsbD1vLXM7bCYmKHRbYysrXT1sKX1yZXR1cm4gdFtjKytdPXIsdC5sZW5ndGg9Yyx0fX0se31dLDQ5MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJ0d28tcHJvZHVjdFwiKSxpPXQoXCJyb2J1c3Qtc3VtXCIpLGE9dChcInJvYnVzdC1zY2FsZVwiKSxvPXQoXCJyb2J1c3QtY29tcHJlc3NcIikscz02O2Z1bmN0aW9uIGwodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoLTEpLG49MTtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9cltuLTFdPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxhPTAsbz0wO2E8dC5sZW5ndGg7KythKWEhPT1lJiYoaVtvKytdPXRbbl1bYV0pO3JldHVybiByfWZ1bmN0aW9uIGModCl7aWYoMj09PXQubGVuZ3RoKXJldHVybltcInN1bShwcm9kKFwiLHRbMF1bMF0sXCIsXCIsdFsxXVsxXSxcIikscHJvZCgtXCIsdFswXVsxXSxcIixcIix0WzFdWzBdLFwiKSlcIl0uam9pbihcIlwiKTtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaChbXCJzY2FsZShcIixjKGwodCxyKSksXCIsXCIsKG49ciwxJm4/XCItXCI6XCJcIiksdFswXVtyXSxcIilcIl0uam9pbihcIlwiKSk7cmV0dXJuIGZ1bmN0aW9uIHQoZSl7aWYoMT09PWUubGVuZ3RoKXJldHVybiBlWzBdO2lmKDI9PT1lLmxlbmd0aClyZXR1cm5bXCJzdW0oXCIsZVswXSxcIixcIixlWzFdLFwiKVwiXS5qb2luKFwiXCIpO3ZhciByPWUubGVuZ3RoPj4xO3JldHVybltcInN1bShcIix0KGUuc2xpY2UoMCxyKSksXCIsXCIsdChlLnNsaWNlKHIpKSxcIilcIl0uam9pbihcIlwiKX0oZSk7dmFyIG59ZnVuY3Rpb24gdSh0KXtyZXR1cm4gbmV3IEZ1bmN0aW9uKFwic3VtXCIsXCJzY2FsZVwiLFwicHJvZFwiLFwiY29tcHJlc3NcIixbXCJmdW5jdGlvbiByb2J1c3REZXRlcm1pbmFudFwiLHQsXCIobSl7cmV0dXJuIGNvbXByZXNzKFwiLGMoZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0Oysrcil7ZVtyXT1uZXcgQXJyYXkodCk7Zm9yKHZhciBuPTA7bjx0OysrbillW3JdW25dPVtcIm1bXCIscixcIl1bXCIsbixcIl1cIl0uam9pbihcIlwiKX1yZXR1cm4gZX0odCkpLFwiKX07cmV0dXJuIHJvYnVzdERldGVybWluYW50XCIsdF0uam9pbihcIlwiKSkoaSxhLG4sbyl9dmFyIGg9W2Z1bmN0aW9uKCl7cmV0dXJuWzBdfSxmdW5jdGlvbih0KXtyZXR1cm5bdFswXVswXV19XTshZnVuY3Rpb24oKXtmb3IoO2gubGVuZ3RoPHM7KWgucHVzaCh1KGgubGVuZ3RoKSk7Zm9yKHZhciB0PVtdLHI9W1wiZnVuY3Rpb24gcm9idXN0RGV0ZXJtaW5hbnQobSl7c3dpdGNoKG0ubGVuZ3RoKXtcIl0sbj0wO248czsrK24pdC5wdXNoKFwiZGV0XCIrbiksci5wdXNoKFwiY2FzZSBcIixuLFwiOnJldHVybiBkZXRcIixuLFwiKG0pO1wiKTtyLnB1c2goXCJ9dmFyIGRldD1DQUNIRVttLmxlbmd0aF07aWYoIWRldClkZXQ9Q0FDSEVbbS5sZW5ndGhdPWdlbihtLmxlbmd0aCk7cmV0dXJuIGRldChtKTt9cmV0dXJuIHJvYnVzdERldGVybWluYW50XCIpLHQucHVzaChcIkNBQ0hFXCIsXCJnZW5cIixyLmpvaW4oXCJcIikpO3ZhciBpPUZ1bmN0aW9uLmFwcGx5KHZvaWQgMCx0KTtmb3IoZS5leHBvcnRzPWkuYXBwbHkodm9pZCAwLGguY29uY2F0KFtoLHVdKSksbj0wO248aC5sZW5ndGg7KytuKWUuZXhwb3J0c1tuXT1oW25dfSgpfSx7XCJyb2J1c3QtY29tcHJlc3NcIjo0OTAsXCJyb2J1c3Qtc2NhbGVcIjo0OTcsXCJyb2J1c3Qtc3VtXCI6NTAwLFwidHdvLXByb2R1Y3RcIjo1Mjh9XSw0OTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwidHdvLXByb2R1Y3RcIiksaT10KFwicm9idXN0LXN1bVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bih0WzBdLGVbMF0pLGE9MTthPHQubGVuZ3RoOysrYSlyPWkocixuKHRbYV0sZVthXSkpO3JldHVybiByfX0se1wicm9idXN0LXN1bVwiOjUwMCxcInR3by1wcm9kdWN0XCI6NTI4fV0sNDkzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInR3by1wcm9kdWN0XCIpLGk9dChcInJvYnVzdC1zdW1cIiksYT10KFwicm9idXN0LXN1YnRyYWN0XCIpLG89dChcInJvYnVzdC1zY2FsZVwiKSxzPTY7ZnVuY3Rpb24gbCh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodC5sZW5ndGgtMSksbj0xO248dC5sZW5ndGg7KytuKWZvcih2YXIgaT1yW24tMV09bmV3IEFycmF5KHQubGVuZ3RoLTEpLGE9MCxvPTA7YTx0Lmxlbmd0aDsrK2EpYSE9PWUmJihpW28rK109dFtuXVthXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gYyh0KXtpZigxPT09dC5sZW5ndGgpcmV0dXJuIHRbMF07aWYoMj09PXQubGVuZ3RoKXJldHVybltcInN1bShcIix0WzBdLFwiLFwiLHRbMV0sXCIpXCJdLmpvaW4oXCJcIik7dmFyIGU9dC5sZW5ndGg+PjE7cmV0dXJuW1wic3VtKFwiLGModC5zbGljZSgwLGUpKSxcIixcIixjKHQuc2xpY2UoZSkpLFwiKVwiXS5qb2luKFwiXCIpfWZ1bmN0aW9uIHUodCxlKXtpZihcIm1cIj09PXQuY2hhckF0KDApKXtpZihcIndcIj09PWUuY2hhckF0KDApKXt2YXIgcj10LnNwbGl0KFwiW1wiKTtyZXR1cm5bXCJ3XCIsZS5zdWJzdHIoMSksXCJtXCIsclswXS5zdWJzdHIoMSldLmpvaW4oXCJcIil9cmV0dXJuW1wicHJvZChcIix0LFwiLFwiLGUsXCIpXCJdLmpvaW4oXCJcIil9cmV0dXJuIHUoZSx0KX1mdW5jdGlvbiBoKHQpe2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bW1wiZGlmZihcIix1KHRbMF1bMF0sdFsxXVsxXSksXCIsXCIsdSh0WzFdWzBdLHRbMF1bMV0pLFwiKVwiXS5qb2luKFwiXCIpXTtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaChbXCJzY2FsZShcIixjKGgobCh0LHIpKSksXCIsXCIsKG49ciwhMCZuP1wiLVwiOlwiXCIpLHRbMF1bcl0sXCIpXCJdLmpvaW4oXCJcIikpO3JldHVybiBlO3ZhciBufWZ1bmN0aW9uIGYodCxlKXtmb3IodmFyIHI9W10sbj0wO248ZS0yOysrbilyLnB1c2goW1wicHJvZChtXCIsdCxcIltcIixuLFwiXSxtXCIsdCxcIltcIixuLFwiXSlcIl0uam9pbihcIlwiKSk7cmV0dXJuIGMocil9ZnVuY3Rpb24gcCh0KXtmb3IodmFyIGU9W10scj1bXSxzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3Ipe2Vbcl09bmV3IEFycmF5KHQpO2Zvcih2YXIgbj0wO248dDsrK24pZVtyXVtuXT1bXCJtXCIsbixcIltcIix0LXItMixcIl1cIl0uam9pbihcIlwiKX1yZXR1cm4gZX0odCksdT0wO3U8dDsrK3Upc1swXVt1XT1cIjFcIixzW3QtMV1bdV09XCJ3XCIrdTtmb3IodT0wO3U8dDsrK3UpMD09KDEmdSk/ZS5wdXNoLmFwcGx5KGUsaChsKHMsdSkpKTpyLnB1c2guYXBwbHkocixoKGwocyx1KSkpO3ZhciBwPWMoZSksZD1jKHIpLGc9XCJleGFjdEluU3BoZXJlXCIrdCx2PVtdO2Zvcih1PTA7dTx0OysrdSl2LnB1c2goXCJtXCIrdSk7dmFyIG09W1wiZnVuY3Rpb24gXCIsZyxcIihcIix2LmpvaW4oKSxcIil7XCJdO2Zvcih1PTA7dTx0OysrdSl7bS5wdXNoKFwidmFyIHdcIix1LFwiPVwiLGYodSx0KSxcIjtcIik7Zm9yKHZhciB5PTA7eTx0OysreSl5IT09dSYmbS5wdXNoKFwidmFyIHdcIix1LFwibVwiLHksXCI9c2NhbGUod1wiLHUsXCIsbVwiLHksXCJbMF0pO1wiKX1yZXR1cm4gbS5wdXNoKFwidmFyIHA9XCIscCxcIixuPVwiLGQsXCIsZD1kaWZmKHAsbik7cmV0dXJuIGRbZC5sZW5ndGgtMV07fXJldHVybiBcIixnKSxuZXcgRnVuY3Rpb24oXCJzdW1cIixcImRpZmZcIixcInByb2RcIixcInNjYWxlXCIsbS5qb2luKFwiXCIpKShpLGEsbixvKX12YXIgZD1bZnVuY3Rpb24oKXtyZXR1cm4gMH0sZnVuY3Rpb24oKXtyZXR1cm4gMH0sZnVuY3Rpb24oKXtyZXR1cm4gMH1dOyFmdW5jdGlvbigpe2Zvcig7ZC5sZW5ndGg8PXM7KWQucHVzaChwKGQubGVuZ3RoKSk7Zm9yKHZhciB0PVtdLHI9W1wic2xvd1wiXSxuPTA7bjw9czsrK24pdC5wdXNoKFwiYVwiK24pLHIucHVzaChcIm9cIituKTt2YXIgaT1bXCJmdW5jdGlvbiB0ZXN0SW5TcGhlcmUoXCIsdC5qb2luKCksXCIpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6Y2FzZSAxOnJldHVybiAwO1wiXTtmb3Iobj0yO248PXM7KytuKWkucHVzaChcImNhc2UgXCIsbixcIjpyZXR1cm4gb1wiLG4sXCIoXCIsdC5zbGljZSgwLG4pLmpvaW4oKSxcIik7XCIpO2kucHVzaChcIn12YXIgcz1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTxhcmd1bWVudHMubGVuZ3RoOysraSl7c1tpXT1hcmd1bWVudHNbaV19O3JldHVybiBzbG93KHMpO31yZXR1cm4gdGVzdEluU3BoZXJlXCIpLHIucHVzaChpLmpvaW4oXCJcIikpO3ZhciBhPUZ1bmN0aW9uLmFwcGx5KHZvaWQgMCxyKTtmb3IoZS5leHBvcnRzPWEuYXBwbHkodm9pZCAwLFtmdW5jdGlvbih0KXt2YXIgZT1kW3QubGVuZ3RoXTtyZXR1cm4gZXx8KGU9ZFt0Lmxlbmd0aF09cCh0Lmxlbmd0aCkpLGUuYXBwbHkodm9pZCAwLHQpfV0uY29uY2F0KGQpKSxuPTA7bjw9czsrK24pZS5leHBvcnRzW25dPWRbbl19KCl9LHtcInJvYnVzdC1zY2FsZVwiOjQ5NyxcInJvYnVzdC1zdWJ0cmFjdFwiOjQ5OSxcInJvYnVzdC1zdW1cIjo1MDAsXCJ0d28tcHJvZHVjdFwiOjUyOH1dLDQ5NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJyb2J1c3QtZGV0ZXJtaW5hbnRcIiksaT02O2Z1bmN0aW9uIGEodCl7Zm9yKHZhciBlPVwicm9idXN0TGluZWFyU29sdmVcIit0K1wiZFwiLHI9W1wiZnVuY3Rpb24gXCIsZSxcIihBLGIpe3JldHVybiBbXCJdLGk9MDtpPHQ7KytpKXtyLnB1c2goXCJkZXQoW1wiKTtmb3IodmFyIGE9MDthPHQ7KythKXthPjAmJnIucHVzaChcIixcIiksci5wdXNoKFwiW1wiKTtmb3IodmFyIG89MDtvPHQ7KytvKW8+MCYmci5wdXNoKFwiLFwiKSxvPT09aT9yLnB1c2goXCIrYltcIixhLFwiXVwiKTpyLnB1c2goXCIrQVtcIixhLFwiXVtcIixvLFwiXVwiKTtyLnB1c2goXCJdXCIpfXIucHVzaChcIl0pLFwiKX1yLnB1c2goXCJkZXQoQSldfXJldHVybiBcIixlKTt2YXIgcz1uZXcgRnVuY3Rpb24oXCJkZXRcIixyLmpvaW4oXCJcIikpO3JldHVybiBzKHQ8Nj9uW3RdOm4pfXZhciBvPVtmdW5jdGlvbigpe3JldHVyblswXX0sZnVuY3Rpb24odCxlKXtyZXR1cm5bW2VbMF1dLFt0WzBdWzBdXV19XTshZnVuY3Rpb24oKXtmb3IoO28ubGVuZ3RoPGk7KW8ucHVzaChhKG8ubGVuZ3RoKSk7Zm9yKHZhciB0PVtdLHI9W1wiZnVuY3Rpb24gZGlzcGF0Y2hMaW5lYXJTb2x2ZShBLGIpe3N3aXRjaChBLmxlbmd0aCl7XCJdLG49MDtuPGk7KytuKXQucHVzaChcInNcIituKSxyLnB1c2goXCJjYXNlIFwiLG4sXCI6cmV0dXJuIHNcIixuLFwiKEEsYik7XCIpO3IucHVzaChcIn12YXIgcz1DQUNIRVtBLmxlbmd0aF07aWYoIXMpcz1DQUNIRVtBLmxlbmd0aF09ZyhBLmxlbmd0aCk7cmV0dXJuIHMoQSxiKX1yZXR1cm4gZGlzcGF0Y2hMaW5lYXJTb2x2ZVwiKSx0LnB1c2goXCJDQUNIRVwiLFwiZ1wiLHIuam9pbihcIlwiKSk7dmFyIHM9RnVuY3Rpb24uYXBwbHkodm9pZCAwLHQpO2ZvcihlLmV4cG9ydHM9cy5hcHBseSh2b2lkIDAsby5jb25jYXQoW28sYV0pKSxuPTA7bjxpOysrbillLmV4cG9ydHNbbl09b1tuXX0oKX0se1wicm9idXN0LWRldGVybWluYW50XCI6NDkxfV0sNDk1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInR3by1wcm9kdWN0XCIpLGk9dChcInJvYnVzdC1zdW1cIiksYT10KFwicm9idXN0LXNjYWxlXCIpLG89dChcInJvYnVzdC1zdWJ0cmFjdFwiKSxzPTU7ZnVuY3Rpb24gbCh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodC5sZW5ndGgtMSksbj0xO248dC5sZW5ndGg7KytuKWZvcih2YXIgaT1yW24tMV09bmV3IEFycmF5KHQubGVuZ3RoLTEpLGE9MCxvPTA7YTx0Lmxlbmd0aDsrK2EpYSE9PWUmJihpW28rK109dFtuXVthXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gYyh0KXtpZigxPT09dC5sZW5ndGgpcmV0dXJuIHRbMF07aWYoMj09PXQubGVuZ3RoKXJldHVybltcInN1bShcIix0WzBdLFwiLFwiLHRbMV0sXCIpXCJdLmpvaW4oXCJcIik7dmFyIGU9dC5sZW5ndGg+PjE7cmV0dXJuW1wic3VtKFwiLGModC5zbGljZSgwLGUpKSxcIixcIixjKHQuc2xpY2UoZSkpLFwiKVwiXS5qb2luKFwiXCIpfWZ1bmN0aW9uIHUodCl7aWYoMj09PXQubGVuZ3RoKXJldHVybltbXCJzdW0ocHJvZChcIix0WzBdWzBdLFwiLFwiLHRbMV1bMV0sXCIpLHByb2QoLVwiLHRbMF1bMV0sXCIsXCIsdFsxXVswXSxcIikpXCJdLmpvaW4oXCJcIildO2Zvcih2YXIgZT1bXSxyPTA7cjx0Lmxlbmd0aDsrK3IpZS5wdXNoKFtcInNjYWxlKFwiLGModShsKHQscikpKSxcIixcIiwobj1yLDEmbj9cIi1cIjpcIlwiKSx0WzBdW3JdLFwiKVwiXS5qb2luKFwiXCIpKTtyZXR1cm4gZTt2YXIgbn1mdW5jdGlvbiBoKHQpe2Zvcih2YXIgZT1bXSxyPVtdLHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0Oysrcil7ZVtyXT1uZXcgQXJyYXkodCk7Zm9yKHZhciBuPTA7bjx0OysrbillW3JdW25dPVtcIm1cIixuLFwiW1wiLHQtci0xLFwiXVwiXS5qb2luKFwiXCIpfXJldHVybiBlfSh0KSxoPVtdLGY9MDtmPHQ7KytmKTA9PSgxJmYpP2UucHVzaC5hcHBseShlLHUobChzLGYpKSk6ci5wdXNoLmFwcGx5KHIsdShsKHMsZikpKSxoLnB1c2goXCJtXCIrZik7dmFyIHA9YyhlKSxkPWMociksZz1cIm9yaWVudGF0aW9uXCIrdCtcIkV4YWN0XCIsdj1bXCJmdW5jdGlvbiBcIixnLFwiKFwiLGguam9pbigpLFwiKXt2YXIgcD1cIixwLFwiLG49XCIsZCxcIixkPXN1YihwLG4pO3JldHVybiBkW2QubGVuZ3RoLTFdO307cmV0dXJuIFwiLGddLmpvaW4oXCJcIik7cmV0dXJuIG5ldyBGdW5jdGlvbihcInN1bVwiLFwicHJvZFwiLFwic2NhbGVcIixcInN1YlwiLHYpKGksbixhLG8pfXZhciBmPWgoMykscD1oKDQpLGQ9W2Z1bmN0aW9uKCl7cmV0dXJuIDB9LGZ1bmN0aW9uKCl7cmV0dXJuIDB9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0tdFswXX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9KHRbMV0tclsxXSkqKGVbMF0tclswXSksYT0odFswXS1yWzBdKSooZVsxXS1yWzFdKSxvPWktYTtpZihpPjApe2lmKGE8PTApcmV0dXJuIG87bj1pK2F9ZWxzZXtpZighKGk8MCkpcmV0dXJuIG87aWYoYT49MClyZXR1cm4gbztuPS0oaSthKX12YXIgcz0zLjMzMDY2OTA3Mzg3NTQ3MTZlLTE2Km47cmV0dXJuIG8+PXN8fG88PS1zP286Zih0LGUscil9LGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRbMF0tblswXSxhPWVbMF0tblswXSxvPXJbMF0tblswXSxzPXRbMV0tblsxXSxsPWVbMV0tblsxXSxjPXJbMV0tblsxXSx1PXRbMl0tblsyXSxoPWVbMl0tblsyXSxmPXJbMl0tblsyXSxkPWEqYyxnPW8qbCx2PW8qcyxtPWkqYyx5PWkqbCx4PWEqcyxiPXUqKGQtZykraCoodi1tKStmKih5LXgpLF89Ny43NzE1NjExNzIzNzYxMDNlLTE2KigoTWF0aC5hYnMoZCkrTWF0aC5hYnMoZykpKk1hdGguYWJzKHUpKyhNYXRoLmFicyh2KStNYXRoLmFicyhtKSkqTWF0aC5hYnMoaCkrKE1hdGguYWJzKHkpK01hdGguYWJzKHgpKSpNYXRoLmFicyhmKSk7cmV0dXJuIGI+X3x8LWI+Xz9iOnAodCxlLHIsbil9XTshZnVuY3Rpb24oKXtmb3IoO2QubGVuZ3RoPD1zOylkLnB1c2goaChkLmxlbmd0aCkpO2Zvcih2YXIgdD1bXSxyPVtcInNsb3dcIl0sbj0wO248PXM7KytuKXQucHVzaChcImFcIituKSxyLnB1c2goXCJvXCIrbik7dmFyIGk9W1wiZnVuY3Rpb24gZ2V0T3JpZW50YXRpb24oXCIsdC5qb2luKCksXCIpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6Y2FzZSAxOnJldHVybiAwO1wiXTtmb3Iobj0yO248PXM7KytuKWkucHVzaChcImNhc2UgXCIsbixcIjpyZXR1cm4gb1wiLG4sXCIoXCIsdC5zbGljZSgwLG4pLmpvaW4oKSxcIik7XCIpO2kucHVzaChcIn12YXIgcz1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTxhcmd1bWVudHMubGVuZ3RoOysraSl7c1tpXT1hcmd1bWVudHNbaV19O3JldHVybiBzbG93KHMpO31yZXR1cm4gZ2V0T3JpZW50YXRpb25cIiksci5wdXNoKGkuam9pbihcIlwiKSk7dmFyIGE9RnVuY3Rpb24uYXBwbHkodm9pZCAwLHIpO2ZvcihlLmV4cG9ydHM9YS5hcHBseSh2b2lkIDAsW2Z1bmN0aW9uKHQpe3ZhciBlPWRbdC5sZW5ndGhdO3JldHVybiBlfHwoZT1kW3QubGVuZ3RoXT1oKHQubGVuZ3RoKSksZS5hcHBseSh2b2lkIDAsdCl9XS5jb25jYXQoZCkpLG49MDtuPD1zOysrbillLmV4cG9ydHNbbl09ZFtuXX0oKX0se1wicm9idXN0LXNjYWxlXCI6NDk3LFwicm9idXN0LXN1YnRyYWN0XCI6NDk5LFwicm9idXN0LXN1bVwiOjUwMCxcInR3by1wcm9kdWN0XCI6NTI4fV0sNDk2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInJvYnVzdC1zdW1cIiksaT10KFwicm9idXN0LXNjYWxlXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm4gaShlLHRbMF0pO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gaSh0LGVbMF0pO2lmKDA9PT10Lmxlbmd0aHx8MD09PWUubGVuZ3RoKXJldHVyblswXTt2YXIgcj1bMF07aWYodC5sZW5ndGg8ZS5sZW5ndGgpZm9yKHZhciBhPTA7YTx0Lmxlbmd0aDsrK2Epcj1uKHIsaShlLHRbYV0pKTtlbHNlIGZvcih2YXIgYT0wO2E8ZS5sZW5ndGg7KythKXI9bihyLGkodCxlW2FdKSk7cmV0dXJuIHJ9fSx7XCJyb2J1c3Qtc2NhbGVcIjo0OTcsXCJyb2J1c3Qtc3VtXCI6NTAwfV0sNDk3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInR3by1wcm9kdWN0XCIpLGk9dChcInR3by1zdW1cIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoMT09PXIpe3ZhciBhPW4odFswXSxlKTtyZXR1cm4gYVswXT9hOlthWzFdXX12YXIgbz1uZXcgQXJyYXkoMipyKSxzPVsuMSwuMV0sbD1bLjEsLjFdLGM9MDtuKHRbMF0sZSxzKSxzWzBdJiYob1tjKytdPXNbMF0pO2Zvcih2YXIgdT0xO3U8cjsrK3Upe24odFt1XSxlLGwpO3ZhciBoPXNbMV07aShoLGxbMF0scyksc1swXSYmKG9bYysrXT1zWzBdKTt2YXIgZj1sWzFdLHA9c1sxXSxkPWYrcCxnPWQtZix2PXAtZztzWzFdPWQsdiYmKG9bYysrXT12KX1zWzFdJiYob1tjKytdPXNbMV0pOzA9PT1jJiYob1tjKytdPTApO3JldHVybiBvLmxlbmd0aD1jLG99fSx7XCJ0d28tcHJvZHVjdFwiOjUyOCxcInR3by1zdW1cIjo1Mjl9XSw0OTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9bih0LHIsaSksbz1uKGUscixpKTtpZihhPjAmJm8+MHx8YTwwJiZvPDApcmV0dXJuITE7dmFyIHM9bihyLHQsZSksbD1uKGksdCxlKTtpZihzPjAmJmw+MHx8czwwJiZsPDApcmV0dXJuITE7aWYoMD09PWEmJjA9PT1vJiYwPT09cyYmMD09PWwpcmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8MjsrK2kpe3ZhciBhPXRbaV0sbz1lW2ldLHM9TWF0aC5taW4oYSxvKSxsPU1hdGgubWF4KGEsbyksYz1yW2ldLHU9bltpXSxoPU1hdGgubWluKGMsdSksZj1NYXRoLm1heChjLHUpO2lmKGY8c3x8bDxoKXJldHVybiExfXJldHVybiEwfSh0LGUscixpKTtyZXR1cm4hMH07dmFyIG49dChcInJvYnVzdC1vcmllbnRhdGlvblwiKVszXX0se1wicm9idXN0LW9yaWVudGF0aW9uXCI6NDk1fV0sNDk5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MHx0Lmxlbmd0aCxuPTB8ZS5sZW5ndGg7aWYoMT09PXImJjE9PT1uKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPXQrZSxuPXItdCxpPXQtKHItbikrKGUtbik7aWYoaSlyZXR1cm5baSxyXTtyZXR1cm5bcl19KHRbMF0sLWVbMF0pO3ZhciBpLGEsbz1uZXcgQXJyYXkocituKSxzPTAsbD0wLGM9MCx1PU1hdGguYWJzLGg9dFtsXSxmPXUoaCkscD0tZVtjXSxkPXUocCk7ZjxkPyhhPWgsKGwrPTEpPHImJihoPXRbbF0sZj11KGgpKSk6KGE9cCwoYys9MSk8biYmKHA9LWVbY10sZD11KHApKSk7bDxyJiZmPGR8fGM+PW4/KGk9aCwobCs9MSk8ciYmKGg9dFtsXSxmPXUoaCkpKTooaT1wLChjKz0xKTxuJiYocD0tZVtjXSxkPXUocCkpKTt2YXIgZyx2LG09aSthLHk9bS1pLHg9YS15LGI9eCxfPW07Zm9yKDtsPHImJmM8bjspZjxkPyhpPWgsKGwrPTEpPHImJihoPXRbbF0sZj11KGgpKSk6KGk9cCwoYys9MSk8biYmKHA9LWVbY10sZD11KHApKSksKHg9KGE9YiktKHk9KG09aSthKS1pKSkmJihvW3MrK109eCksYj1fLSgoZz1fK20pLSh2PWctXykpKyhtLXYpLF89Zztmb3IoO2w8cjspKHg9KGE9YiktKHk9KG09KGk9aCkrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKGc9XyttKS0odj1nLV8pKSsobS12KSxfPWcsKGwrPTEpPHImJihoPXRbbF0pO2Zvcig7YzxuOykoeD0oYT1iKS0oeT0obT0oaT1wKSthKS1pKSkmJihvW3MrK109eCksYj1fLSgoZz1fK20pLSh2PWctXykpKyhtLXYpLF89ZywoYys9MSk8biYmKHA9LWVbY10pO2ImJihvW3MrK109Yik7XyYmKG9bcysrXT1fKTtzfHwob1tzKytdPTApO3JldHVybiBvLmxlbmd0aD1zLG99fSx7fV0sNTAwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MHx0Lmxlbmd0aCxuPTB8ZS5sZW5ndGg7aWYoMT09PXImJjE9PT1uKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPXQrZSxuPXItdCxpPXQtKHItbikrKGUtbik7aWYoaSlyZXR1cm5baSxyXTtyZXR1cm5bcl19KHRbMF0sZVswXSk7dmFyIGksYSxvPW5ldyBBcnJheShyK24pLHM9MCxsPTAsYz0wLHU9TWF0aC5hYnMsaD10W2xdLGY9dShoKSxwPWVbY10sZD11KHApO2Y8ZD8oYT1oLChsKz0xKTxyJiYoaD10W2xdLGY9dShoKSkpOihhPXAsKGMrPTEpPG4mJihwPWVbY10sZD11KHApKSk7bDxyJiZmPGR8fGM+PW4/KGk9aCwobCs9MSk8ciYmKGg9dFtsXSxmPXUoaCkpKTooaT1wLChjKz0xKTxuJiYocD1lW2NdLGQ9dShwKSkpO3ZhciBnLHYsbT1pK2EseT1tLWkseD1hLXksYj14LF89bTtmb3IoO2w8ciYmYzxuOylmPGQ/KGk9aCwobCs9MSk8ciYmKGg9dFtsXSxmPXUoaCkpKTooaT1wLChjKz0xKTxuJiYocD1lW2NdLGQ9dShwKSkpLCh4PShhPWIpLSh5PShtPWkrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKGc9XyttKS0odj1nLV8pKSsobS12KSxfPWc7Zm9yKDtsPHI7KSh4PShhPWIpLSh5PShtPShpPWgpK2EpLWkpKSYmKG9bcysrXT14KSxiPV8tKChnPV8rbSktKHY9Zy1fKSkrKG0tdiksXz1nLChsKz0xKTxyJiYoaD10W2xdKTtmb3IoO2M8bjspKHg9KGE9YiktKHk9KG09KGk9cCkrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKGc9XyttKS0odj1nLV8pKSsobS12KSxfPWcsKGMrPTEpPG4mJihwPWVbY10pO2ImJihvW3MrK109Yik7XyYmKG9bcysrXT1fKTtzfHwob1tzKytdPTApO3JldHVybiBvLmxlbmd0aD1zLG99fSx7fV0sNTAxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PDA/LTE6dD4wPzE6MH19LHt9XSw1MDI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkobih0KSl9O3ZhciBuPXQoXCJib3VuZGFyeS1jZWxsc1wiKSxpPXQoXCJyZWR1Y2Utc2ltcGxpY2lhbC1jb21wbGV4XCIpfSx7XCJib3VuZGFyeS1jZWxsc1wiOjg2LFwicmVkdWNlLXNpbXBsaWNpYWwtY29tcGxleFwiOjQ4Mn1dLDUwMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtyPXJ8fDAsXCJ1bmRlZmluZWRcIj09dHlwZW9mIHMmJihzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPTAsbj0wO248ZTsrK24pcj0wfE1hdGgubWF4KHIsdFtuXS5sZW5ndGgpO3JldHVybiByLTF9KHQpKTtpZigwPT09dC5sZW5ndGh8fHM8MSlyZXR1cm57Y2VsbHM6W10sdmVydGV4SWRzOltdLHZlcnRleFdlaWdodHM6W119O3ZhciBsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49aS5tYWxsb2NVaW50OChyKSxhPTA7YTxyOysrYSluW2FdPXRbYV08ZXwwO3JldHVybiBufShlLCtyKSxjPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG89ZSooZSsxKS8yKnJ8MCxzPWkubWFsbG9jVWludDMyKDIqbyksbD0wLGM9MDtjPHI7KytjKWZvcih2YXIgdT10W2NdLGU9dS5sZW5ndGgsaD0wO2g8ZTsrK2gpZm9yKHZhciBmPTA7ZjxoOysrZil7dmFyIHA9dVtmXSxkPXVbaF07c1tsKytdPTB8TWF0aC5taW4ocCxkKSxzW2wrK109MHxNYXRoLm1heChwLGQpfWEobihzLFtsLzJ8MCwyXSkpO2Zvcih2YXIgZz0yLGM9MjtjPGw7Yys9MilzW2MtMl09PT1zW2NdJiZzW2MtMV09PT1zW2MrMV18fChzW2crK109c1tjXSxzW2crK109c1tjKzFdKTtyZXR1cm4gbihzLFtnLzJ8MCwyXSl9KHQscyksdT1mdW5jdGlvbih0LGUscixhKXtmb3IodmFyIG89dC5kYXRhLHM9dC5zaGFwZVswXSxsPWkubWFsbG9jRG91YmxlKHMpLGM9MCx1PTA7dTxzOysrdSl7dmFyIGg9b1syKnVdLGY9b1syKnUrMV07aWYocltoXSE9PXJbZl0pe3ZhciBwPWVbaF0sZD1lW2ZdO29bMipjXT1oLG9bMipjKzFdPWYsbFtjKytdPShkLWEpLyhkLXApfX1yZXR1cm4gdC5zaGFwZVswXT1jLG4obCxbY10pfShjLGUsbCwrciksaD1mdW5jdGlvbih0LGUpe3ZhciByPWkubWFsbG9jSW50MzIoMiplKSxuPXQuc2hhcGVbMF0sYT10LmRhdGE7clswXT0wO2Zvcih2YXIgbz0wLHM9MDtzPG47KytzKXt2YXIgbD1hWzIqc107aWYobCE9PW8pe2ZvcihyWzIqbysxXT1zOysrbzxsOylyWzIqb109cyxyWzIqbysxXT1zO3JbMipvXT1zfX1yWzIqbysxXT1uO2Zvcig7KytvPGU7KXJbMipvXT1yWzIqbysxXT1uO3JldHVybiByfShjLDB8ZS5sZW5ndGgpLGY9byhzKSh0LGMuZGF0YSxoLGwpLHA9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTB8dC5zaGFwZVswXSxyPXQuZGF0YSxuPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSluW2ldPVtyWzIqaV0sclsyKmkrMV1dO3JldHVybiBufShjKSxkPVtdLnNsaWNlLmNhbGwodS5kYXRhLDAsdS5zaGFwZVswXSk7cmV0dXJuIGkuZnJlZShsKSxpLmZyZWUoYy5kYXRhKSxpLmZyZWUodS5kYXRhKSxpLmZyZWUoaCkse2NlbGxzOmYsdmVydGV4SWRzOnAsdmVydGV4V2VpZ2h0czpkfX07dmFyIG49dChcIm5kYXJyYXlcIiksaT10KFwidHlwZWRhcnJheS1wb29sXCIpLGE9dChcIm5kYXJyYXktc29ydFwiKSxvPXQoXCIuL2xpYi9jb2RlZ2VuXCIpfSx7XCIuL2xpYi9jb2RlZ2VuXCI6NTA0LG5kYXJyYXk6NDQzLFwibmRhcnJheS1zb3J0XCI6NDQxLFwidHlwZWRhcnJheS1wb29sXCI6NTMwfV0sNTA0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWFbdF07ZXx8KGU9YVt0XT1mdW5jdGlvbih0KXt2YXIgZT0wLHI9bmV3IEFycmF5KHQrMSk7clswXT1bW11dO2Zvcih2YXIgYT0xO2E8PXQ7KythKWZvcih2YXIgbz1yW2FdPWkoYSkscz0wO3M8by5sZW5ndGg7KytzKWU9TWF0aC5tYXgoZSxvW2FdLmxlbmd0aCk7dmFyIGw9W1wiZnVuY3Rpb24gQihDLEUsaSxqKXtcIixcInZhciBhPU1hdGgubWluKGksail8MCxiPU1hdGgubWF4KGksail8MCxsPUNbMiphXSxoPUNbMiphKzFdO1wiLFwid2hpbGUobDxoKXtcIixcInZhciBtPShsK2gpPj4xLHY9RVsyKm0rMV07XCIsXCJpZih2PT09Yil7cmV0dXJuIG19XCIsXCJpZihiPHYpe2g9bX1lbHNle2w9bSsxfVwiLFwifVwiLFwicmV0dXJuIGw7XCIsXCJ9O1wiLFwiZnVuY3Rpb24gZ2V0Q29udG91clwiLHQsXCJkKEYsRSxDLFMpe1wiLFwidmFyIG49Ri5sZW5ndGgsUj1bXTtcIixcImZvcih2YXIgaT0wO2k8bjsrK2kpe3ZhciBjPUZbaV0sbD1jLmxlbmd0aDtcIl07ZnVuY3Rpb24gYyh0KXtpZighKHQubGVuZ3RoPD0wKSl7bC5wdXNoKFwiUi5wdXNoKFwiKTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoOysrZSl7dmFyIHI9dFtlXTtlPjAmJmwucHVzaChcIixcIiksbC5wdXNoKFwiW1wiKTtmb3IodmFyIG49MDtuPHIubGVuZ3RoOysrbil7dmFyIGk9cltuXTtuPjAmJmwucHVzaChcIixcIiksbC5wdXNoKFwiQihDLEUsY1tcIixpWzBdLFwiXSxjW1wiLGlbMV0sXCJdKVwiKX1sLnB1c2goXCJdXCIpfWwucHVzaChcIik7XCIpfX1mb3IodmFyIGE9dCsxO2E+MTstLWEpe2E8dCsxJiZsLnB1c2goXCJlbHNlIFwiKSxsLnB1c2goXCJpZihsPT09XCIsYSxcIil7XCIpO2Zvcih2YXIgdT1bXSxzPTA7czxhOysrcyl1LnB1c2goXCIoU1tjW1wiK3MrXCJdXTw8XCIrcytcIilcIik7bC5wdXNoKFwidmFyIE09XCIsdS5qb2luKFwiK1wiKSxcIjtpZihNPT09MHx8TT09PVwiLCgxPDxhKS0xLFwiKXtjb250aW51ZX1zd2l0Y2goTSl7XCIpO2Zvcih2YXIgbz1yW2EtMV0scz0wO3M8by5sZW5ndGg7KytzKWwucHVzaChcImNhc2UgXCIscyxcIjpcIiksYyhvW3NdKSxsLnB1c2goXCJicmVhaztcIik7bC5wdXNoKFwifX1cIil9cmV0dXJuIGwucHVzaChcIn1yZXR1cm4gUjt9O3JldHVybiBnZXRDb250b3VyXCIsdCxcImRcIiksbmV3IEZ1bmN0aW9uKFwicG9vbFwiLGwuam9pbihcIlwiKSkobil9KHQpKTtyZXR1cm4gZX07dmFyIG49dChcInR5cGVkYXJyYXktcG9vbFwiKSxpPXQoXCJtYXJjaGluZy1zaW1wbGV4LXRhYmxlXCIpLGE9e319LHtcIm1hcmNoaW5nLXNpbXBsZXgtdGFibGVcIjo0MjAsXCJ0eXBlZGFycmF5LXBvb2xcIjo1MzB9XSw1MDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiYml0LXR3aWRkbGVcIiksaT10KFwidW5pb24tZmluZFwiKTtmdW5jdGlvbiBhKHQsZSl7dmFyIHI9dC5sZW5ndGgsbj10Lmxlbmd0aC1lLmxlbmd0aCxpPU1hdGgubWluO2lmKG4pcmV0dXJuIG47c3dpdGNoKHIpe2Nhc2UgMDpyZXR1cm4gMDtjYXNlIDE6cmV0dXJuIHRbMF0tZVswXTtjYXNlIDI6cmV0dXJuKHM9dFswXSt0WzFdLWVbMF0tZVsxXSl8fGkodFswXSx0WzFdKS1pKGVbMF0sZVsxXSk7Y2FzZSAzOnZhciBhPXRbMF0rdFsxXSxvPWVbMF0rZVsxXTtpZihzPWErdFsyXS0obytlWzJdKSlyZXR1cm4gczt2YXIgcyxsPWkodFswXSx0WzFdKSxjPWkoZVswXSxlWzFdKTtyZXR1cm4ocz1pKGwsdFsyXSktaShjLGVbMl0pKXx8aShsK3RbMl0sYSktaShjK2VbMl0sbyk7ZGVmYXVsdDp2YXIgdT10LnNsaWNlKDApO3Uuc29ydCgpO3ZhciBoPWUuc2xpY2UoMCk7aC5zb3J0KCk7Zm9yKHZhciBmPTA7ZjxyOysrZilpZihuPXVbZl0taFtmXSlyZXR1cm4gbjtyZXR1cm4gMH19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBhKHRbMF0sZVswXSl9ZnVuY3Rpb24gcyh0LGUpe2lmKGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSluW2ldPVt0W2ldLGVbaV1dO24uc29ydChvKTtmb3IoaT0wO2k8cjsrK2kpdFtpXT1uW2ldWzBdLGVbaV09bltpXVsxXTtyZXR1cm4gdH1yZXR1cm4gdC5zb3J0KGEpLHR9ZnVuY3Rpb24gbCh0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuW107Zm9yKHZhciBlPTEscj10Lmxlbmd0aCxuPTE7bjxyOysrbil7dmFyIGk9dFtuXTtpZihhKGksdFtuLTFdKSl7aWYobj09PWUpe2UrKztjb250aW51ZX10W2UrK109aX19cmV0dXJuIHQubGVuZ3RoPWUsdH1mdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aC0xLGk9LTE7cjw9bjspe3ZhciBvPXIrbj4+MSxzPWEodFtvXSxlKTtzPD0wPygwPT09cyYmKGk9bykscj1vKzEpOnM+MCYmKG49by0xKX1yZXR1cm4gaX1mdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aCksaT0wLG89ci5sZW5ndGg7aTxvOysraSlyW2ldPVtdO2Zvcih2YXIgcz1bXSxsPShpPTAsZS5sZW5ndGgpO2k8bDsrK2kpZm9yKHZhciB1PWVbaV0saD11Lmxlbmd0aCxmPTEscD0xPDxoO2Y8cDsrK2Ype3MubGVuZ3RoPW4ucG9wQ291bnQoZik7Zm9yKHZhciBkPTAsZz0wO2c8aDsrK2cpZiYxPDxnJiYoc1tkKytdPXVbZ10pO3ZhciB2PWModCxzKTtpZighKHY8MCkpZm9yKDtyW3YrK10ucHVzaChpKSwhKHY+PXQubGVuZ3RofHwwIT09YSh0W3ZdLHMpKTspO31yZXR1cm4gcn1mdW5jdGlvbiBoKHQsZSl7aWYoZTwwKXJldHVybltdO2Zvcih2YXIgcj1bXSxpPSgxPDxlKzEpLTEsYT0wO2E8dC5sZW5ndGg7KythKWZvcih2YXIgbz10W2FdLGw9aTtsPDE8PG8ubGVuZ3RoO2w9bi5uZXh0Q29tYmluYXRpb24obCkpe2Zvcih2YXIgYz1uZXcgQXJyYXkoZSsxKSx1PTAsaD0wO2g8by5sZW5ndGg7KytoKWwmMTw8aCYmKGNbdSsrXT1vW2hdKTtyLnB1c2goYyl9cmV0dXJuIHMocil9ci5kaW1lbnNpb249ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj1NYXRoLm1heCxuPTAsaT10Lmxlbmd0aDtuPGk7KytuKWU9cihlLHRbbl0ubGVuZ3RoKTtyZXR1cm4gZS0xfSxyLmNvdW50VmVydGljZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPS0xLHI9TWF0aC5tYXgsbj0wLGk9dC5sZW5ndGg7bjxpOysrbilmb3IodmFyIGE9dFtuXSxvPTAscz1hLmxlbmd0aDtvPHM7KytvKWU9cihlLGFbb10pO3JldHVybiBlKzF9LHIuY2xvbmVDZWxscz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWVbcl09dFtyXS5zbGljZSgwKTtyZXR1cm4gZX0sci5jb21wYXJlQ2VsbHM9YSxyLm5vcm1hbGl6ZT1zLHIudW5pcXVlPWwsci5maW5kQ2VsbD1jLHIuaW5jaWRlbmNlPXUsci5kdWFsPWZ1bmN0aW9uKHQsZSl7aWYoIWUpcmV0dXJuIHUobChoKHQsMCkpLHQpO2Zvcih2YXIgcj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT1bXTtuPTA7Zm9yKHZhciBpPXQubGVuZ3RoO248aTsrK24pZm9yKHZhciBhPXRbbl0sbz0wLHM9YS5sZW5ndGg7bzxzOysrbylyW2Fbb11dLnB1c2gobik7cmV0dXJuIHJ9LHIuZXhwbG9kZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxhPTB8aS5sZW5ndGgsbz0xLGw9MTw8YTtvPGw7KytvKXtmb3IodmFyIGM9W10sdT0wO3U8YTsrK3Upbz4+PnUmMSYmYy5wdXNoKGlbdV0pO2UucHVzaChjKX1yZXR1cm4gcyhlKX0sci5za2VsZXRvbj1oLHIuYm91bmRhcnk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sYT0wLG89aS5sZW5ndGg7YTxvOysrYSl7Zm9yKHZhciBsPW5ldyBBcnJheShpLmxlbmd0aC0xKSxjPTAsdT0wO2M8bzsrK2MpYyE9PWEmJihsW3UrK109aVtjXSk7ZS5wdXNoKGwpfXJldHVybiBzKGUpfSxyLmNvbm5lY3RlZENvbXBvbmVudHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgaShlKSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBhPXRbbl0sbz0wO288YS5sZW5ndGg7KytvKWZvcih2YXIgcz1vKzE7czxhLmxlbmd0aDsrK3Mpci5saW5rKGFbb10sYVtzXSk7dmFyIGw9W10sYz1yLnJhbmtzO2ZvcihuPTA7bjxjLmxlbmd0aDsrK24pY1tuXT0tMTtmb3Iobj0wO248dC5sZW5ndGg7KytuKXt2YXIgdT1yLmZpbmQodFtuXVswXSk7Y1t1XTwwPyhjW3VdPWwubGVuZ3RoLGwucHVzaChbdFtuXS5zbGljZSgwKV0pKTpsW2NbdV1dLnB1c2godFtuXS5zbGljZSgwKSl9cmV0dXJuIGx9KHQsZSk6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPWwocyhoKHQsMCkpKSxyPW5ldyBpKGUubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBhPXRbbl0sbz0wO288YS5sZW5ndGg7KytvKWZvcih2YXIgdT1jKGUsW2Fbb11dKSxmPW8rMTtmPGEubGVuZ3RoOysrZilyLmxpbmsodSxjKGUsW2FbZl1dKSk7dmFyIHA9W10sZD1yLnJhbmtzO2ZvcihuPTA7bjxkLmxlbmd0aDsrK24pZFtuXT0tMTtmb3Iobj0wO248dC5sZW5ndGg7KytuKXt2YXIgZz1yLmZpbmQoYyhlLFt0W25dWzBdXSkpO2RbZ108MD8oZFtnXT1wLmxlbmd0aCxwLnB1c2goW3Rbbl0uc2xpY2UoMCldKSk6cFtkW2ddXS5wdXNoKHRbbl0uc2xpY2UoMCkpfXJldHVybiBwfSh0KX19LHtcImJpdC10d2lkZGxlXCI6ODMsXCJ1bmlvbi1maW5kXCI6NTMxfV0sNTA2OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzgzXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6ODN9XSw1MDc6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bNTA1XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtcImJpdC10d2lkZGxlXCI6NTA2LGR1cDo1MDUsXCJ1bmlvbi1maW5kXCI6NTA4fV0sNTA4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXt0aGlzLnJvb3RzPW5ldyBBcnJheSh0KSx0aGlzLnJhbmtzPW5ldyBBcnJheSh0KTtmb3IodmFyIGU9MDtlPHQ7KytlKXRoaXMucm9vdHNbZV09ZSx0aGlzLnJhbmtzW2VdPTB9ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUubGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdHMubGVuZ3RofSxuLnByb3RvdHlwZS5tYWtlU2V0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yb290cy5sZW5ndGg7cmV0dXJuIHRoaXMucm9vdHMucHVzaCh0KSx0aGlzLnJhbmtzLnB1c2goMCksdH0sbi5wcm90b3R5cGUuZmluZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5yb290cztlW3RdIT09dDspe3ZhciByPWVbdF07ZVt0XT1lW3JdLHQ9cn1yZXR1cm4gdH0sbi5wcm90b3R5cGUubGluaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZmluZCh0KSxuPXRoaXMuZmluZChlKTtpZihyIT09bil7dmFyIGk9dGhpcy5yYW5rcyxhPXRoaXMucm9vdHMsbz1pW3JdLHM9aVtuXTtvPHM/YVtyXT1uOnM8bz9hW25dPXI6KGFbbl09ciwrK2lbcl0pfX19LHt9XSw1MDk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgYT1lLmxlbmd0aCxvPXQubGVuZ3RoLHM9bmV3IEFycmF5KGEpLGw9bmV3IEFycmF5KGEpLGM9bmV3IEFycmF5KGEpLHU9bmV3IEFycmF5KGEpLGg9MDtoPGE7KytoKXNbaF09bFtoXT0tMSxjW2hdPTEvMCx1W2hdPSExO2Zvcih2YXIgaD0wO2g8bzsrK2gpe3ZhciBmPXRbaF07aWYoMiE9PWYubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIklucHV0IG11c3QgYmUgYSBncmFwaFwiKTt2YXIgcD1mWzFdLGQ9ZlswXTstMSE9PWxbZF0/bFtkXT0tMjpsW2RdPXAsLTEhPT1zW3BdP3NbcF09LTI6c1twXT1kfWZ1bmN0aW9uIGcodCl7aWYodVt0XSlyZXR1cm4gMS8wO3ZhciByLGksYSxvLGMsaD1zW3RdLGY9bFt0XTtyZXR1cm4gaDwwfHxmPDA/MS8wOihyPWVbdF0saT1lW2hdLGE9ZVtmXSxvPU1hdGguYWJzKG4ocixpLGEpKSxjPU1hdGguc3FydChNYXRoLnBvdyhpWzBdLWFbMF0sMikrTWF0aC5wb3coaVsxXS1hWzFdLDIpKSxvL2MpfWZ1bmN0aW9uIHYodCxlKXt2YXIgcj1BW3RdLG49QVtlXTtBW3RdPW4sQVtlXT1yLFRbcl09ZSxUW25dPXR9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gY1tBW3RdXX1mdW5jdGlvbiB5KHQpe3JldHVybiAxJnQ/dC0xPj4xOih0Pj4xKS0xfWZ1bmN0aW9uIHgodCl7Zm9yKHZhciBlPW0odCk7Oyl7dmFyIHI9ZSxuPTIqdCsxLGk9MioodCsxKSxhPXQ7aWYobjxTKXt2YXIgbz1tKG4pO288ciYmKGE9bixyPW8pfWlmKGk8Uyl7dmFyIHM9bShpKTtzPHImJihhPWkpfWlmKGE9PT10KXJldHVybiB0O3YodCxhKSx0PWF9fWZ1bmN0aW9uIGIodCl7Zm9yKHZhciBlPW0odCk7dD4wOyl7dmFyIHI9eSh0KTtpZihyPj0wKXt2YXIgbj1tKHIpO2lmKGU8bil7dih0LHIpLHQ9cjtjb250aW51ZX19cmV0dXJuIHR9fWZ1bmN0aW9uIF8oKXtpZihTPjApe3ZhciB0PUFbMF07cmV0dXJuIHYoMCxTLTEpLFMtPTEseCgwKSx0fXJldHVybi0xfWZ1bmN0aW9uIHcodCxlKXt2YXIgcj1BW3RdO3JldHVybiBjW3JdPT09ZT90OihjW3JdPS0xLzAsYih0KSxfKCksY1tyXT1lLGIoKFMrPTEpLTEpKX1mdW5jdGlvbiBrKHQpe2lmKCF1W3RdKXt1W3RdPSEwO3ZhciBlPXNbdF0scj1sW3RdO3Nbcl0+PTAmJihzW3JdPWUpLGxbZV0+PTAmJihsW2VdPXIpLFRbZV0+PTAmJncoVFtlXSxnKGUpKSxUW3JdPj0wJiZ3KFRbcl0sZyhyKSl9fWZvcih2YXIgQT1bXSxUPW5ldyBBcnJheShhKSxoPTA7aDxhOysraCl7dmFyIE09Y1toXT1nKGgpO008MS8wPyhUW2hdPUEubGVuZ3RoLEEucHVzaChoKSk6VFtoXT0tMX1mb3IodmFyIFM9QS5sZW5ndGgsaD1TPj4xO2g+PTA7LS1oKXgoaCk7Zm9yKDs7KXt2YXIgRT1fKCk7aWYoRTwwfHxjW0VdPnIpYnJlYWs7ayhFKX1mb3IodmFyIEM9W10saD0wO2g8YTsrK2gpdVtoXXx8KFRbaF09Qy5sZW5ndGgsQy5wdXNoKGVbaF0uc2xpY2UoKSkpO0MubGVuZ3RoO2Z1bmN0aW9uIEwodCxlKXtpZih0W2VdPDApcmV0dXJuIGU7dmFyIHI9ZSxuPWU7ZG97dmFyIGk9dFtuXTtpZighdVtuXXx8aTwwfHxpPT09bilicmVhaztpZihpPXRbbj1pXSwhdVtuXXx8aTwwfHxpPT09bilicmVhaztuPWkscj10W3JdfXdoaWxlKHIhPT1uKTtmb3IodmFyIGE9ZTthIT09bjthPXRbYV0pdFthXT1uO3JldHVybiBufXZhciB6PVtdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9TChzLHRbMF0pLHI9TChsLHRbMV0pO2lmKGU+PTAmJnI+PTAmJmUhPT1yKXt2YXIgbj1UW2VdLGk9VFtyXTtuIT09aSYmei5wdXNoKFtuLGldKX19KSxpLnVuaXF1ZShpLm5vcm1hbGl6ZSh6KSkse3Bvc2l0aW9uczpDLGVkZ2VzOnp9fTt2YXIgbj10KFwicm9idXN0LW9yaWVudGF0aW9uXCIpLGk9dChcInNpbXBsaWNpYWwtY29tcGxleFwiKX0se1wicm9idXN0LW9yaWVudGF0aW9uXCI6NDk1LFwic2ltcGxpY2lhbC1jb21wbGV4XCI6NTA3fV0sNTEwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLHM7aWYoZVswXVswXTxlWzFdWzBdKXI9ZVswXSxhPWVbMV07ZWxzZXtpZighKGVbMF1bMF0+ZVsxXVswXSkpcmV0dXJuIGkoZSx0KTtyPWVbMV0sYT1lWzBdfWlmKHRbMF1bMF08dFsxXVswXSlvPXRbMF0scz10WzFdO2Vsc2V7aWYoISh0WzBdWzBdPnRbMV1bMF0pKXJldHVybi1pKHQsZSk7bz10WzFdLHM9dFswXX12YXIgbD1uKHIsYSxzKSxjPW4ocixhLG8pO2lmKGw8MCl7aWYoYzw9MClyZXR1cm4gbH1lbHNlIGlmKGw+MCl7aWYoYz49MClyZXR1cm4gbH1lbHNlIGlmKGMpcmV0dXJuIGM7aWYobD1uKHMsbyxhKSxjPW4ocyxvLHIpLGw8MCl7aWYoYzw9MClyZXR1cm4gbH1lbHNlIGlmKGw+MCl7aWYoYz49MClyZXR1cm4gbH1lbHNlIGlmKGMpcmV0dXJuIGM7cmV0dXJuIGFbMF0tc1swXX07dmFyIG49dChcInJvYnVzdC1vcmllbnRhdGlvblwiKTtmdW5jdGlvbiBpKHQsZSl7dmFyIHIsaSxhLG87aWYoZVswXVswXTxlWzFdWzBdKXI9ZVswXSxpPWVbMV07ZWxzZXtpZighKGVbMF1bMF0+ZVsxXVswXSkpe3ZhciBzPU1hdGgubWluKHRbMF1bMV0sdFsxXVsxXSksbD1NYXRoLm1heCh0WzBdWzFdLHRbMV1bMV0pLGM9TWF0aC5taW4oZVswXVsxXSxlWzFdWzFdKSx1PU1hdGgubWF4KGVbMF1bMV0sZVsxXVsxXSk7cmV0dXJuIGw8Yz9sLWM6cz51P3MtdTpsLXV9cj1lWzFdLGk9ZVswXX10WzBdWzFdPHRbMV1bMV0/KGE9dFswXSxvPXRbMV0pOihhPXRbMV0sbz10WzBdKTt2YXIgaD1uKGkscixhKTtyZXR1cm4gaHx8KChoPW4oaSxyLG8pKXx8by1pKX19LHtcInJvYnVzdC1vcmllbnRhdGlvblwiOjQ5NX1dLDUxMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj0yKmUsbj1uZXcgQXJyYXkociksYT0wO2E8ZTsrK2Epe3ZhciBsPXRbYV0sYz1sWzBdWzBdPGxbMV1bMF07blsyKmFdPW5ldyBoKGxbMF1bMF0sbCxjLGEpLG5bMiphKzFdPW5ldyBoKGxbMV1bMF0sbCwhYyxhKX1uLnNvcnQoZnVuY3Rpb24odCxlKXt2YXIgcj10LngtZS54O3JldHVybiByfHwoKHI9dC5jcmVhdGUtZS5jcmVhdGUpfHxNYXRoLm1pbih0LnNlZ21lbnRbMF1bMV0sdC5zZWdtZW50WzFdWzFdKS1NYXRoLm1pbihlLnNlZ21lbnRbMF1bMV0sZS5zZWdtZW50WzFdWzFdKSl9KTtmb3IodmFyIGY9aShvKSxwPVtdLGQ9W10sZz1bXSxhPTA7YTxyOyl7Zm9yKHZhciB2PW5bYV0ueCxtPVtdO2E8cjspe3ZhciB5PW5bYV07aWYoeS54IT09dilicmVhazthKz0xLHkuc2VnbWVudFswXVswXT09PXkueCYmeS5zZWdtZW50WzFdWzBdPT09eS54P3kuY3JlYXRlJiYoeS5zZWdtZW50WzBdWzFdPHkuc2VnbWVudFsxXVsxXT8obS5wdXNoKG5ldyB1KHkuc2VnbWVudFswXVsxXSx5LmluZGV4LCEwLCEwKSksbS5wdXNoKG5ldyB1KHkuc2VnbWVudFsxXVsxXSx5LmluZGV4LCExLCExKSkpOihtLnB1c2gobmV3IHUoeS5zZWdtZW50WzFdWzFdLHkuaW5kZXgsITAsITEpKSxtLnB1c2gobmV3IHUoeS5zZWdtZW50WzBdWzFdLHkuaW5kZXgsITEsITApKSkpOmY9eS5jcmVhdGU/Zi5pbnNlcnQoeS5zZWdtZW50LHkuaW5kZXgpOmYucmVtb3ZlKHkuc2VnbWVudCl9cC5wdXNoKGYucm9vdCksZC5wdXNoKHYpLGcucHVzaChtKX1yZXR1cm4gbmV3IHMocCxkLGcpfTt2YXIgbj10KFwiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIiksaT10KFwiZnVuY3Rpb25hbC1yZWQtYmxhY2stdHJlZVwiKSxhPXQoXCJyb2J1c3Qtb3JpZW50YXRpb25cIiksbz10KFwiLi9saWIvb3JkZXItc2VnbWVudHNcIik7ZnVuY3Rpb24gcyh0LGUscil7dGhpcy5zbGFicz10LHRoaXMuY29vcmRpbmF0ZXM9ZSx0aGlzLmhvcml6b250YWw9cn1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQueS1lfWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9bnVsbDt0Oyl7dmFyIG4saSxvPXQua2V5O29bMF1bMF08b1sxXVswXT8obj1vWzBdLGk9b1sxXSk6KG49b1sxXSxpPW9bMF0pO3ZhciBzPWEobixpLGUpO2lmKHM8MCl0PXQubGVmdDtlbHNlIGlmKHM+MClpZihlWzBdIT09b1sxXVswXSlyPXQsdD10LnJpZ2h0O2Vsc2V7aWYobD1jKHQucmlnaHQsZSkpcmV0dXJuIGw7dD10LmxlZnR9ZWxzZXtpZihlWzBdIT09b1sxXVswXSlyZXR1cm4gdDt2YXIgbDtpZihsPWModC5yaWdodCxlKSlyZXR1cm4gbDt0PXQubGVmdH19cmV0dXJuIHJ9ZnVuY3Rpb24gdSh0LGUscixuKXt0aGlzLnk9dCx0aGlzLmluZGV4PWUsdGhpcy5zdGFydD1yLHRoaXMuY2xvc2VkPW59ZnVuY3Rpb24gaCh0LGUscixuKXt0aGlzLng9dCx0aGlzLnNlZ21lbnQ9ZSx0aGlzLmNyZWF0ZT1yLHRoaXMuaW5kZXg9bn1zLnByb3RvdHlwZS5jYXN0VXA9ZnVuY3Rpb24odCl7dmFyIGU9bi5sZSh0aGlzLmNvb3JkaW5hdGVzLHRbMF0pO2lmKGU8MClyZXR1cm4tMTt0aGlzLnNsYWJzW2VdO3ZhciByPWModGhpcy5zbGFic1tlXSx0KSxpPS0xO2lmKHImJihpPXIudmFsdWUpLHRoaXMuY29vcmRpbmF0ZXNbZV09PT10WzBdKXt2YXIgcz1udWxsO2lmKHImJihzPXIua2V5KSxlPjApe3ZhciB1PWModGhpcy5zbGFic1tlLTFdLHQpO3UmJihzP28odS5rZXkscyk+MCYmKHM9dS5rZXksaT11LnZhbHVlKTooaT11LnZhbHVlLHM9dS5rZXkpKX12YXIgaD10aGlzLmhvcml6b250YWxbZV07aWYoaC5sZW5ndGg+MCl7dmFyIGY9bi5nZShoLHRbMV0sbCk7aWYoZjxoLmxlbmd0aCl7dmFyIHA9aFtmXTtpZih0WzFdPT09cC55KXtpZihwLmNsb3NlZClyZXR1cm4gcC5pbmRleDtmb3IoO2Y8aC5sZW5ndGgtMSYmaFtmKzFdLnk9PT10WzFdOylpZigocD1oW2YrPTFdKS5jbG9zZWQpcmV0dXJuIHAuaW5kZXg7aWYocC55PT09dFsxXSYmIXAuc3RhcnQpe2lmKChmKz0xKT49aC5sZW5ndGgpcmV0dXJuIGk7cD1oW2ZdfX1pZihwLnN0YXJ0KWlmKHMpe3ZhciBkPWEoc1swXSxzWzFdLFt0WzBdLHAueV0pO3NbMF1bMF0+c1sxXVswXSYmKGQ9LWQpLGQ+MCYmKGk9cC5pbmRleCl9ZWxzZSBpPXAuaW5kZXg7ZWxzZSBwLnkhPT10WzFdJiYoaT1wLmluZGV4KX19fXJldHVybiBpfX0se1wiLi9saWIvb3JkZXItc2VnbWVudHNcIjo1MTAsXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiOjgyLFwiZnVuY3Rpb25hbC1yZWQtYmxhY2stdHJlZVwiOjIyNyxcInJvYnVzdC1vcmllbnRhdGlvblwiOjQ5NX1dLDUxMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJyb2J1c3QtZG90LXByb2R1Y3RcIiksaT10KFwicm9idXN0LXN1bVwiKTtmdW5jdGlvbiBhKHQsZSl7dmFyIHI9aShuKHQsZSksW2VbZS5sZW5ndGgtMV1dKTtyZXR1cm4gcltyLmxlbmd0aC0xXX1mdW5jdGlvbiBvKHQsZSxyLG4pe3ZhciBpPS1lLyhuLWUpO2k8MD9pPTA6aT4xJiYoaT0xKTtmb3IodmFyIGE9MS1pLG89dC5sZW5ndGgscz1uZXcgQXJyYXkobyksbD0wO2w8bzsrK2wpc1tsXT1pKnRbbF0rYSpyW2xdO3JldHVybiBzfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPVtdLGk9YSh0W3QubGVuZ3RoLTFdLGUpLHM9dFt0Lmxlbmd0aC0xXSxsPXRbMF0sYz0wO2M8dC5sZW5ndGg7KytjLHM9bCl7dmFyIHU9YShsPXRbY10sZSk7aWYoaTwwJiZ1PjB8fGk+MCYmdTwwKXt2YXIgaD1vKHMsdSxsLGkpO3IucHVzaChoKSxuLnB1c2goaC5zbGljZSgpKX11PDA/bi5wdXNoKGwuc2xpY2UoKSk6dT4wP3IucHVzaChsLnNsaWNlKCkpOihyLnB1c2gobC5zbGljZSgpKSxuLnB1c2gobC5zbGljZSgpKSksaT11fXJldHVybntwb3NpdGl2ZTpyLG5lZ2F0aXZlOm59fSxlLmV4cG9ydHMucG9zaXRpdmU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj1hKHRbdC5sZW5ndGgtMV0sZSksaT10W3QubGVuZ3RoLTFdLHM9dFswXSxsPTA7bDx0Lmxlbmd0aDsrK2wsaT1zKXt2YXIgYz1hKHM9dFtsXSxlKTsobjwwJiZjPjB8fG4+MCYmYzwwKSYmci5wdXNoKG8oaSxjLHMsbikpLGM+PTAmJnIucHVzaChzLnNsaWNlKCkpLG49Y31yZXR1cm4gcn0sZS5leHBvcnRzLm5lZ2F0aXZlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49YSh0W3QubGVuZ3RoLTFdLGUpLGk9dFt0Lmxlbmd0aC0xXSxzPXRbMF0sbD0wO2w8dC5sZW5ndGg7KytsLGk9cyl7dmFyIGM9YShzPXRbbF0sZSk7KG48MCYmYz4wfHxuPjAmJmM8MCkmJnIucHVzaChvKGksYyxzLG4pKSxjPD0wJiZyLnB1c2gocy5zbGljZSgpKSxuPWN9cmV0dXJuIHJ9fSx7XCJyb2J1c3QtZG90LXByb2R1Y3RcIjo0OTIsXCJyb2J1c3Qtc3VtXCI6NTAwfV0sNTEzOltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHQ9e25vdF9zdHJpbmc6L1tec10vLG5vdF9ib29sOi9bXnRdLyxub3RfdHlwZTovW15UXS8sbm90X3ByaW1pdGl2ZTovW152XS8sbnVtYmVyOi9bZGllZmddLyxudW1lcmljX2FyZzovW2JjZGllZmd1eFhdLyxqc29uOi9bal0vLG5vdF9qc29uOi9bXmpdLyx0ZXh0Oi9eW15cXHgyNV0rLyxtb2R1bG86L15cXHgyNXsyfS8scGxhY2Vob2xkZXI6L15cXHgyNSg/OihbMS05XVxcZCopXFwkfFxcKChbXildKylcXCkpPyhcXCspPygwfCdbXiRdKT8oLSk/KFxcZCspPyg/OlxcLihcXGQrKSk/KFtiLWdpam9zdFR1dnhYXSkvLGtleTovXihbYS16X11bYS16X1xcZF0qKS9pLGtleV9hY2Nlc3M6L15cXC4oW2Etel9dW2Etel9cXGRdKikvaSxpbmRleF9hY2Nlc3M6L15cXFsoXFxkKylcXF0vLHNpZ246L15bKy1dL307ZnVuY3Rpb24gZShyKXtyZXR1cm4gZnVuY3Rpb24ocixuKXt2YXIgaSxhLG8scyxsLGMsdSxoLGYscD0xLGQ9ci5sZW5ndGgsZz1cIlwiO2ZvcihhPTA7YTxkO2ErKylpZihcInN0cmluZ1wiPT10eXBlb2YgclthXSlnKz1yW2FdO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIHJbYV0pe2lmKChzPXJbYV0pLmtleXMpZm9yKGk9bltwXSxvPTA7bzxzLmtleXMubGVuZ3RoO28rKyl7aWYobnVsbD09aSl0aHJvdyBuZXcgRXJyb3IoZSgnW3NwcmludGZdIENhbm5vdCBhY2Nlc3MgcHJvcGVydHkgXCIlc1wiIG9mIHVuZGVmaW5lZCB2YWx1ZSBcIiVzXCInLHMua2V5c1tvXSxzLmtleXNbby0xXSkpO2k9aVtzLmtleXNbb11dfWVsc2UgaT1zLnBhcmFtX25vP25bcy5wYXJhbV9ub106bltwKytdO2lmKHQubm90X3R5cGUudGVzdChzLnR5cGUpJiZ0Lm5vdF9wcmltaXRpdmUudGVzdChzLnR5cGUpJiZpIGluc3RhbmNlb2YgRnVuY3Rpb24mJihpPWkoKSksdC5udW1lcmljX2FyZy50ZXN0KHMudHlwZSkmJlwibnVtYmVyXCIhPXR5cGVvZiBpJiZpc05hTihpKSl0aHJvdyBuZXcgVHlwZUVycm9yKGUoXCJbc3ByaW50Zl0gZXhwZWN0aW5nIG51bWJlciBidXQgZm91bmQgJVRcIixpKSk7c3dpdGNoKHQubnVtYmVyLnRlc3Qocy50eXBlKSYmKGg9aT49MCkscy50eXBlKXtjYXNlXCJiXCI6aT1wYXJzZUludChpLDEwKS50b1N0cmluZygyKTticmVhaztjYXNlXCJjXCI6aT1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGksMTApKTticmVhaztjYXNlXCJkXCI6Y2FzZVwiaVwiOmk9cGFyc2VJbnQoaSwxMCk7YnJlYWs7Y2FzZVwialwiOmk9SlNPTi5zdHJpbmdpZnkoaSxudWxsLHMud2lkdGg/cGFyc2VJbnQocy53aWR0aCk6MCk7YnJlYWs7Y2FzZVwiZVwiOmk9cy5wcmVjaXNpb24/cGFyc2VGbG9hdChpKS50b0V4cG9uZW50aWFsKHMucHJlY2lzaW9uKTpwYXJzZUZsb2F0KGkpLnRvRXhwb25lbnRpYWwoKTticmVhaztjYXNlXCJmXCI6aT1zLnByZWNpc2lvbj9wYXJzZUZsb2F0KGkpLnRvRml4ZWQocy5wcmVjaXNpb24pOnBhcnNlRmxvYXQoaSk7YnJlYWs7Y2FzZVwiZ1wiOmk9cy5wcmVjaXNpb24/U3RyaW5nKE51bWJlcihpLnRvUHJlY2lzaW9uKHMucHJlY2lzaW9uKSkpOnBhcnNlRmxvYXQoaSk7YnJlYWs7Y2FzZVwib1wiOmk9KHBhcnNlSW50KGksMTApPj4+MCkudG9TdHJpbmcoOCk7YnJlYWs7Y2FzZVwic1wiOmk9U3RyaW5nKGkpLGk9cy5wcmVjaXNpb24/aS5zdWJzdHJpbmcoMCxzLnByZWNpc2lvbik6aTticmVhaztjYXNlXCJ0XCI6aT1TdHJpbmcoISFpKSxpPXMucHJlY2lzaW9uP2kuc3Vic3RyaW5nKDAscy5wcmVjaXNpb24pOmk7YnJlYWs7Y2FzZVwiVFwiOmk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGkpLnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCksaT1zLnByZWNpc2lvbj9pLnN1YnN0cmluZygwLHMucHJlY2lzaW9uKTppO2JyZWFrO2Nhc2VcInVcIjppPXBhcnNlSW50KGksMTApPj4+MDticmVhaztjYXNlXCJ2XCI6aT1pLnZhbHVlT2YoKSxpPXMucHJlY2lzaW9uP2kuc3Vic3RyaW5nKDAscy5wcmVjaXNpb24pOmk7YnJlYWs7Y2FzZVwieFwiOmk9KHBhcnNlSW50KGksMTApPj4+MCkudG9TdHJpbmcoMTYpO2JyZWFrO2Nhc2VcIlhcIjppPShwYXJzZUludChpLDEwKT4+PjApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfXQuanNvbi50ZXN0KHMudHlwZSk/Zys9aTooIXQubnVtYmVyLnRlc3Qocy50eXBlKXx8aCYmIXMuc2lnbj9mPVwiXCI6KGY9aD9cIitcIjpcIi1cIixpPWkudG9TdHJpbmcoKS5yZXBsYWNlKHQuc2lnbixcIlwiKSksYz1zLnBhZF9jaGFyP1wiMFwiPT09cy5wYWRfY2hhcj9cIjBcIjpzLnBhZF9jaGFyLmNoYXJBdCgxKTpcIiBcIix1PXMud2lkdGgtKGYraSkubGVuZ3RoLGw9cy53aWR0aCYmdT4wP2MucmVwZWF0KHUpOlwiXCIsZys9cy5hbGlnbj9mK2krbDpcIjBcIj09PWM/ZitsK2k6bCtmK2kpfXJldHVybiBnfShmdW5jdGlvbihlKXtpZihpW2VdKXJldHVybiBpW2VdO3ZhciByLG49ZSxhPVtdLG89MDtmb3IoO247KXtpZihudWxsIT09KHI9dC50ZXh0LmV4ZWMobikpKWEucHVzaChyWzBdKTtlbHNlIGlmKG51bGwhPT0ocj10Lm1vZHVsby5leGVjKG4pKSlhLnB1c2goXCIlXCIpO2Vsc2V7aWYobnVsbD09PShyPXQucGxhY2Vob2xkZXIuZXhlYyhuKSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiW3NwcmludGZdIHVuZXhwZWN0ZWQgcGxhY2Vob2xkZXJcIik7aWYoclsyXSl7b3w9MTt2YXIgcz1bXSxsPXJbMl0sYz1bXTtpZihudWxsPT09KGM9dC5rZXkuZXhlYyhsKSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiW3NwcmludGZdIGZhaWxlZCB0byBwYXJzZSBuYW1lZCBhcmd1bWVudCBrZXlcIik7Zm9yKHMucHVzaChjWzFdKTtcIlwiIT09KGw9bC5zdWJzdHJpbmcoY1swXS5sZW5ndGgpKTspaWYobnVsbCE9PShjPXQua2V5X2FjY2Vzcy5leGVjKGwpKSlzLnB1c2goY1sxXSk7ZWxzZXtpZihudWxsPT09KGM9dC5pbmRleF9hY2Nlc3MuZXhlYyhsKSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiW3NwcmludGZdIGZhaWxlZCB0byBwYXJzZSBuYW1lZCBhcmd1bWVudCBrZXlcIik7cy5wdXNoKGNbMV0pfXJbMl09c31lbHNlIG98PTI7aWYoMz09PW8pdGhyb3cgbmV3IEVycm9yKFwiW3NwcmludGZdIG1peGluZyBwb3NpdGlvbmFsIGFuZCBuYW1lZCBwbGFjZWhvbGRlcnMgaXMgbm90ICh5ZXQpIHN1cHBvcnRlZFwiKTthLnB1c2goe3BsYWNlaG9sZGVyOnJbMF0scGFyYW1fbm86clsxXSxrZXlzOnJbMl0sc2lnbjpyWzNdLHBhZF9jaGFyOnJbNF0sYWxpZ246cls1XSx3aWR0aDpyWzZdLHByZWNpc2lvbjpyWzddLHR5cGU6cls4XX0pfW49bi5zdWJzdHJpbmcoclswXS5sZW5ndGgpfXJldHVybiBpW2VdPWF9KHIpLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbih0LHIpe3JldHVybiBlLmFwcGx5KG51bGwsW3RdLmNvbmNhdChyfHxbXSkpfXZhciBpPU9iamVjdC5jcmVhdGUobnVsbCk7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHImJihyLnNwcmludGY9ZSxyLnZzcHJpbnRmPW4pLFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJih3aW5kb3cuc3ByaW50Zj1lLHdpbmRvdy52c3ByaW50Zj1uKX0oKX0se31dLDUxNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJwYXJlbnRoZXNpc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKG51bGw9PXQpdGhyb3cgRXJyb3IoXCJGaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgYSBzdHJpbmdcIik7aWYobnVsbD09ZSl0aHJvdyBFcnJvcihcIlNlcGFyYXRvciBzaG91bGQgYmUgYSBzdHJpbmcgb3IgYSBSZWdFeHBcIik7cj8oXCJzdHJpbmdcIj09dHlwZW9mIHJ8fEFycmF5LmlzQXJyYXkocikpJiYocj17aWdub3JlOnJ9KTpyPXt9LG51bGw9PXIuZXNjYXBlJiYoci5lc2NhcGU9ITApLG51bGw9PXIuaWdub3JlP3IuaWdub3JlPVtcIltdXCIsXCIoKVwiLFwie31cIixcIjw+XCIsJ1wiXCInLFwiJydcIixcImBgXCIsXCJcXHUyMDFjXFx1MjAxZFwiLFwiXFx4YWJcXHhiYlwiXTooXCJzdHJpbmdcIj09dHlwZW9mIHIuaWdub3JlJiYoci5pZ25vcmU9W3IuaWdub3JlXSksci5pZ25vcmU9ci5pZ25vcmUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiAxPT09dC5sZW5ndGgmJih0Kz10KSx0fSkpO3ZhciBpPW4ucGFyc2UodCx7ZmxhdDohMCxicmFja2V0czpyLmlnbm9yZX0pLGE9aVswXS5zcGxpdChlKTtpZihyLmVzY2FwZSl7Zm9yKHZhciBvPVtdLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzXSxjPWFbcysxXTtcIlxcXFxcIj09PWxbbC5sZW5ndGgtMV0mJlwiXFxcXFwiIT09bFtsLmxlbmd0aC0yXT8oby5wdXNoKGwrZStjKSxzKyspOm8ucHVzaChsKX1hPW99Zm9yKHM9MDtzPGEubGVuZ3RoO3MrKylpWzBdPWFbc10sYVtzXT1uLnN0cmluZ2lmeShpLHtmbGF0OiEwfSk7cmV0dXJuIGF9fSx7cGFyZW50aGVzaXM6NDUxfV0sNTE1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPW5ldyBBcnJheShlKSxpPW5ldyBBcnJheShlKSxhPW5ldyBBcnJheShlKSxvPW5ldyBBcnJheShlKSxzPW5ldyBBcnJheShlKSxsPTA7bDxlOysrbClyW2xdPS0xLG5bbF09MCxpW2xdPSExLGFbbF09MCxvW2xdPS0xLHNbbF09W107dmFyIGMsdT0wLGg9W10sZj1bXTtmdW5jdGlvbiBwKGUpe3ZhciBsPVtlXSxjPVtlXTtmb3IocltlXT1uW2VdPXUsaVtlXT0hMCx1Kz0xO2MubGVuZ3RoPjA7KXtlPWNbYy5sZW5ndGgtMV07dmFyIHA9dFtlXTtpZihhW2VdPHAubGVuZ3RoKXtmb3IodmFyIGQ9YVtlXTtkPHAubGVuZ3RoOysrZCl7dmFyIGc9cFtkXTtpZihyW2ddPDApe3JbZ109bltnXT11LGlbZ109ITAsdSs9MSxsLnB1c2goZyksYy5wdXNoKGcpO2JyZWFrfWlbZ10mJihuW2VdPTB8TWF0aC5taW4obltlXSxuW2ddKSksb1tnXT49MCYmc1tlXS5wdXNoKG9bZ10pfWFbZV09ZH1lbHNle2lmKG5bZV09PT1yW2VdKXtmb3IodmFyIHY9W10sbT1bXSx5PTAsZD1sLmxlbmd0aC0xO2Q+PTA7LS1kKXt2YXIgeD1sW2RdO2lmKGlbeF09ITEsdi5wdXNoKHgpLG0ucHVzaChzW3hdKSx5Kz1zW3hdLmxlbmd0aCxvW3hdPWgubGVuZ3RoLHg9PT1lKXtsLmxlbmd0aD1kO2JyZWFrfX1oLnB1c2godik7Zm9yKHZhciBiPW5ldyBBcnJheSh5KSxkPTA7ZDxtLmxlbmd0aDtkKyspZm9yKHZhciBfPTA7XzxtW2RdLmxlbmd0aDtfKyspYlstLXldPW1bZF1bX107Zi5wdXNoKGIpfWMucG9wKCl9fX1mb3IodmFyIGw9MDtsPGU7KytsKXJbbF08MCYmcChsKTtmb3IodmFyIGw9MDtsPGYubGVuZ3RoO2wrKyl7dmFyIGQ9ZltsXTtpZigwIT09ZC5sZW5ndGgpe2Quc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSxjPVtkWzBdXTtmb3IodmFyIGc9MTtnPGQubGVuZ3RoO2crKylkW2ddIT09ZFtnLTFdJiZjLnB1c2goZFtnXSk7ZltsXT1jfX1yZXR1cm57Y29tcG9uZW50czpoLGFkamFjZW5jeUxpc3Q6Zn19fSx7fV0sNTE2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYodC5kaW1lbnNpb248PTApcmV0dXJue3Bvc2l0aW9uczpbXSxjZWxsczpbXX07aWYoMT09PXQuZGltZW5zaW9uKXJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1hKHQsZSksbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKSxzPTA7czxuOysrcylpW3NdPVtyW3NdXSxvW3NdPVtzXTtyZXR1cm57cG9zaXRpb25zOmksY2VsbHM6b319KHQsZSk7dmFyIHI9dC5vcmRlci5qb2luKCkrXCItXCIrdC5kdHlwZSxzPW9bcl0sZT0rZXx8MDtzfHwocz1vW3JdPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGgsYT1bXCIndXNlIHN0cmljdCc7XCJdLG89XCJzdXJmYWNlTmV0c1wiK3Quam9pbihcIl9cIikrXCJkXCIrZTthLnB1c2goXCJ2YXIgY29udG91cj1nZW5Db250b3VyKHtcIixcIm9yZGVyOltcIix0LmpvaW4oKSxcIl0sXCIsXCJzY2FsYXJBcmd1bWVudHM6IDMsXCIsXCJwaGFzZTpmdW5jdGlvbiBwaGFzZUZ1bmMocCxhLGIsYykgeyByZXR1cm4gKHAgPiBjKXwwIH0sXCIpLFwiZ2VuZXJpY1wiPT09ZSYmYS5wdXNoKFwiZ2V0dGVyczpbMF0sXCIpO2Zvcih2YXIgcz1bXSxsPVtdLGM9MDtjPHI7KytjKXMucHVzaChcImRcIitjKSxsLnB1c2goXCJkXCIrYyk7Zm9yKHZhciBjPTA7YzwxPDxyOysrYylzLnB1c2goXCJ2XCIrYyksbC5wdXNoKFwidlwiK2MpO2Zvcih2YXIgYz0wO2M8MTw8cjsrK2Mpcy5wdXNoKFwicFwiK2MpLGwucHVzaChcInBcIitjKTtzLnB1c2goXCJhXCIsXCJiXCIsXCJjXCIpLGwucHVzaChcImFcIixcImNcIiksYS5wdXNoKFwidmVydGV4OmZ1bmN0aW9uIHZlcnRleEZ1bmMoXCIscy5qb2luKCksXCIpe1wiKTtmb3IodmFyIHU9W10sYz0wO2M8MTw8cjsrK2MpdS5wdXNoKFwiKHBcIitjK1wiPDxcIitjK1wiKVwiKTthLnB1c2goXCJ2YXIgbT0oXCIsdS5qb2luKFwiK1wiKSxcIil8MDtpZihtPT09MHx8bT09PVwiLCgxPDwoMTw8cikpLTEsXCIpe3JldHVybn1cIik7dmFyIGg9W10sZj1bXTsxPDwoMTw8cik8PTEyOD8oYS5wdXNoKFwic3dpdGNoKG0pe1wiKSxmPWEpOmEucHVzaChcInN3aXRjaChtPj4+Nyl7XCIpO2Zvcih2YXIgYz0wO2M8MTw8KDE8PHIpOysrYyl7aWYoMTw8KDE8PHIpPjEyOCYmYyUxMjg9PTApe2gubGVuZ3RoPjAmJmYucHVzaChcIn19XCIpO3ZhciBwPVwidkV4dHJhXCIraC5sZW5ndGg7YS5wdXNoKFwiY2FzZSBcIixjPj4+NyxcIjpcIixwLFwiKG0mMHg3ZixcIixsLmpvaW4oKSxcIik7YnJlYWs7XCIpLGY9W1wiZnVuY3Rpb24gXCIscCxcIihtLFwiLGwuam9pbigpLFwiKXtzd2l0Y2gobSl7XCJdLGgucHVzaChmKX1mLnB1c2goXCJjYXNlIFwiLDEyNyZjLFwiOlwiKTtmb3IodmFyIGQ9bmV3IEFycmF5KHIpLGc9bmV3IEFycmF5KHIpLHY9bmV3IEFycmF5KHIpLG09bmV3IEFycmF5KHIpLHk9MCx4PTA7eDxyOysreClkW3hdPVtdLGdbeF09W10sdlt4XT0wLG1beF09MDtmb3IodmFyIHg9MDt4PDE8PHI7Kyt4KWZvcih2YXIgYj0wO2I8cjsrK2Ipe3ZhciBfPXheMTw8YjtpZighKF8+eCkmJiEoYyYxPDxfKSE9IShjJjE8PHgpKXt2YXIgdz0xO2MmMTw8Xz9nW2JdLnB1c2goXCJ2XCIrXytcIi12XCIreCk6KGdbYl0ucHVzaChcInZcIit4K1wiLXZcIitfKSx3PS13KSx3PDA/KGRbYl0ucHVzaChcIi12XCIreCtcIi12XCIrXyksdltiXSs9Mik6KGRbYl0ucHVzaChcInZcIit4K1wiK3ZcIitfKSx2W2JdLT0yKSx5Kz0xO2Zvcih2YXIgaz0wO2s8cjsrK2spayE9PWImJihfJjE8PGs/bVtrXSs9MTptW2tdLT0xKX19Zm9yKHZhciBBPVtdLGI9MDtiPHI7KytiKWlmKDA9PT1kW2JdLmxlbmd0aClBLnB1c2goXCJkXCIrYitcIi0wLjVcIik7ZWxzZXt2YXIgVD1cIlwiO3ZbYl08MD9UPXZbYl0rXCIqY1wiOnZbYl0+MCYmKFQ9XCIrXCIrdltiXStcIipjXCIpO3ZhciBNPWRbYl0ubGVuZ3RoL3kqLjUsUz0uNSttW2JdL3kqLjU7QS5wdXNoKFwiZFwiK2IrXCItXCIrUytcIi1cIitNK1wiKihcIitkW2JdLmpvaW4oXCIrXCIpK1QrXCIpLyhcIitnW2JdLmpvaW4oXCIrXCIpK1wiKVwiKX1mLnB1c2goXCJhLnB1c2goW1wiLEEuam9pbigpLFwiXSk7XCIsXCJicmVhaztcIil9YS5wdXNoKFwifX0sXCIpLGgubGVuZ3RoPjAmJmYucHVzaChcIn19XCIpO2Zvcih2YXIgRT1bXSxjPTA7YzwxPDxyLTE7KytjKUUucHVzaChcInZcIitjKTtFLnB1c2goXCJjMFwiLFwiYzFcIixcInAwXCIsXCJwMVwiLFwiYVwiLFwiYlwiLFwiY1wiKSxhLnB1c2goXCJjZWxsOmZ1bmN0aW9uIGNlbGxGdW5jKFwiLEUuam9pbigpLFwiKXtcIik7dmFyIEM9aShyLTEpO2EucHVzaChcImlmKHAwKXtiLnB1c2goXCIsQy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJbXCIrdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJ2XCIrdH0pK1wiXVwifSkuam9pbigpLFwiKX1lbHNle2IucHVzaChcIixDLm1hcChmdW5jdGlvbih0KXt2YXIgZT10LnNsaWNlKCk7cmV0dXJuIGUucmV2ZXJzZSgpLFwiW1wiK2UubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwidlwiK3R9KStcIl1cIn0pLmpvaW4oKSxcIil9fX0pO2Z1bmN0aW9uIFwiLG8sXCIoYXJyYXksbGV2ZWwpe3ZhciB2ZXJ0cz1bXSxjZWxscz1bXTtjb250b3VyKGFycmF5LHZlcnRzLGNlbGxzLGxldmVsKTtyZXR1cm4ge3Bvc2l0aW9uczp2ZXJ0cyxjZWxsczpjZWxsc307fSByZXR1cm4gXCIsbyxcIjtcIik7Zm9yKHZhciBjPTA7YzxoLmxlbmd0aDsrK2MpYS5wdXNoKGhbY10uam9pbihcIlwiKSk7cmV0dXJuIG5ldyBGdW5jdGlvbihcImdlbkNvbnRvdXJcIixhLmpvaW4oXCJcIikpKG4pfSh0Lm9yZGVyLHQuZHR5cGUpKTtyZXR1cm4gcyh0LGUpfTt2YXIgbj10KFwibmRhcnJheS1leHRyYWN0LWNvbnRvdXJcIiksaT10KFwidHJpYW5ndWxhdGUtaHlwZXJjdWJlXCIpLGE9dChcInplcm8tY3Jvc3NpbmdzXCIpO3ZhciBvPXt9fSx7XCJuZGFycmF5LWV4dHJhY3QtY29udG91clwiOjQzMixcInRyaWFuZ3VsYXRlLWh5cGVyY3ViZVwiOjUyNixcInplcm8tY3Jvc3NpbmdzXCI6NTU5fV0sNTE3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG49ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0O2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QodCkpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9W10sbj0hMCxpPSExLGE9dm9pZCAwO3RyeXtmb3IodmFyIG8scz10W1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KG89cy5uZXh0KCkpLmRvbmUpJiYoci5wdXNoKG8udmFsdWUpLCFlfHxyLmxlbmd0aCE9PWUpO249ITApO31jYXRjaCh0KXtpPSEwLGE9dH1maW5hbGx5e3RyeXshbiYmcy5yZXR1cm4mJnMucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IGF9fXJldHVybiByfSh0LGUpO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpfX0oKSxpPTIqTWF0aC5QSSxhPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPXQueCxsPXQueTtyZXR1cm57eDpuKihzKj1lKS1pKihsKj1yKSthLHk6aSpzK24qbCtvfX0sbz1mdW5jdGlvbih0LGUpe3ZhciByPS41NTE5MTUwMjQ0OTQsbj1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpLGE9TWF0aC5jb3ModCtlKSxvPU1hdGguc2luKHQrZSk7cmV0dXJuW3t4Om4taSpyLHk6aStuKnJ9LHt4OmErbypyLHk6by1hKnJ9LHt4OmEseTpvfV19LHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dCpuLWUqcjwwPy0xOjEsYT0odCpyK2UqbikvKE1hdGguc3FydCh0KnQrZSplKSpNYXRoLnNxcnQodCp0K2UqZSkpO3JldHVybiBhPjEmJihhPTEpLGE8LTEmJihhPS0xKSxpKk1hdGguYWNvcyhhKX07ci5kZWZhdWx0PWZ1bmN0aW9uKHQpe3ZhciBlPXQucHgscj10LnB5LGw9dC5jeCxjPXQuY3ksdT10LnJ4LGg9dC5yeSxmPXQueEF4aXNSb3RhdGlvbixwPXZvaWQgMD09PWY/MDpmLGQ9dC5sYXJnZUFyY0ZsYWcsZz12b2lkIDA9PT1kPzA6ZCx2PXQuc3dlZXBGbGFnLG09dm9pZCAwPT09dj8wOnYseT1bXTtpZigwPT09dXx8MD09PWgpcmV0dXJuW107dmFyIHg9TWF0aC5zaW4ocCppLzM2MCksYj1NYXRoLmNvcyhwKmkvMzYwKSxfPWIqKGUtbCkvMit4KihyLWMpLzIsdz0teCooZS1sKS8yK2IqKHItYykvMjtpZigwPT09XyYmMD09PXcpcmV0dXJuW107dT1NYXRoLmFicyh1KSxoPU1hdGguYWJzKGgpO3ZhciBrPU1hdGgucG93KF8sMikvTWF0aC5wb3codSwyKStNYXRoLnBvdyh3LDIpL01hdGgucG93KGgsMik7az4xJiYodSo9TWF0aC5zcXJ0KGspLGgqPU1hdGguc3FydChrKSk7dmFyIEE9ZnVuY3Rpb24odCxlLHIsbixhLG8sbCxjLHUsaCxmLHApe3ZhciBkPU1hdGgucG93KGEsMiksZz1NYXRoLnBvdyhvLDIpLHY9TWF0aC5wb3coZiwyKSxtPU1hdGgucG93KHAsMikseT1kKmctZCptLWcqdjt5PDAmJih5PTApLHkvPWQqbStnKnY7dmFyIHg9KHk9TWF0aC5zcXJ0KHkpKihsPT09Yz8tMToxKSkqYS9vKnAsYj15Ki1vL2EqZixfPWgqeC11KmIrKHQrcikvMix3PXUqeCtoKmIrKGUrbikvMixrPShmLXgpL2EsQT0ocC1iKS9vLFQ9KC1mLXgpL2EsTT0oLXAtYikvbyxTPXMoMSwwLGssQSksRT1zKGssQSxULE0pO3JldHVybiAwPT09YyYmRT4wJiYoRS09aSksMT09PWMmJkU8MCYmKEUrPWkpLFtfLHcsUyxFXX0oZSxyLGwsYyx1LGgsZyxtLHgsYixfLHcpLFQ9bihBLDQpLE09VFswXSxTPVRbMV0sRT1UWzJdLEM9VFszXSxMPU1hdGguYWJzKEMpLyhpLzQpO01hdGguYWJzKDEtTCk8MWUtNyYmKEw9MSk7dmFyIHo9TWF0aC5tYXgoTWF0aC5jZWlsKEwpLDEpO0MvPXo7Zm9yKHZhciBPPTA7Tzx6O08rKyl5LnB1c2gobyhFLEMpKSxFKz1DO3JldHVybiB5Lm1hcChmdW5jdGlvbih0KXt2YXIgZT1hKHRbMF0sdSxoLGIseCxNLFMpLHI9ZS54LG49ZS55LGk9YSh0WzFdLHUsaCxiLHgsTSxTKSxvPWkueCxzPWkueSxsPWEodFsyXSx1LGgsYix4LE0sUyk7cmV0dXJue3gxOnIseTE6bix4MjpvLHkyOnMseDpsLngseTpsLnl9fSl9LGUuZXhwb3J0cz1yLmRlZmF1bHR9LHt9XSw1MTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicGFyc2Utc3ZnLXBhdGhcIiksaT10KFwiYWJzLXN2Zy1wYXRoXCIpLGE9dChcIm5vcm1hbGl6ZS1zdmctcGF0aFwiKSxvPXQoXCJpcy1zdmctcGF0aFwiKSxzPXQoXCJhc3NlcnRcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe0FycmF5LmlzQXJyYXkodCkmJjE9PT10Lmxlbmd0aCYmXCJzdHJpbmdcIj09dHlwZW9mIHRbMF0mJih0PXRbMF0pO1wic3RyaW5nXCI9PXR5cGVvZiB0JiYocyhvKHQpLFwiU3RyaW5nIGlzIG5vdCBhbiBTVkcgcGF0aC5cIiksdD1uKHQpKTtpZihzKEFycmF5LmlzQXJyYXkodCksXCJBcmd1bWVudCBzaG91bGQgYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2YgcGF0aCBzZWdtZW50cy5cIiksdD1pKHQpLCEodD1hKHQpKS5sZW5ndGgpcmV0dXJuWzAsMCwwLDBdO2Zvcih2YXIgZT1bMS8wLDEvMCwtMS8wLC0xLzBdLHI9MCxsPXQubGVuZ3RoO3I8bDtyKyspZm9yKHZhciBjPXRbcl0uc2xpY2UoMSksdT0wO3U8Yy5sZW5ndGg7dSs9MiljW3UrMF08ZVswXSYmKGVbMF09Y1t1KzBdKSxjW3UrMV08ZVsxXSYmKGVbMV09Y1t1KzFdKSxjW3UrMF0+ZVsyXSYmKGVbMl09Y1t1KzBdKSxjW3UrMV0+ZVszXSYmKGVbM109Y1t1KzFdKTtyZXR1cm4gZX19LHtcImFicy1zdmctcGF0aFwiOjUxLGFzc2VydDo1OSxcImlzLXN2Zy1wYXRoXCI6NDE3LFwibm9ybWFsaXplLXN2Zy1wYXRoXCI6NTE5LFwicGFyc2Utc3ZnLXBhdGhcIjo0NTN9XSw1MTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9W10sbz0wLHM9MCxsPTAsYz0wLHU9bnVsbCxoPW51bGwsZj0wLHA9MCxkPTAsZz10Lmxlbmd0aDtkPGc7ZCsrKXt2YXIgdj10W2RdLG09dlswXTtzd2l0Y2gobSl7Y2FzZVwiTVwiOmw9dlsxXSxjPXZbMl07YnJlYWs7Y2FzZVwiQVwiOnZhciB5PW4oe3B4OmYscHk6cCxjeDp2WzZdLGN5OnZbN10scng6dlsxXSxyeTp2WzJdLHhBeGlzUm90YXRpb246dlszXSxsYXJnZUFyY0ZsYWc6dls0XSxzd2VlcEZsYWc6dls1XX0pO2lmKCF5Lmxlbmd0aCljb250aW51ZTtmb3IodmFyIHgsYj0wO2I8eS5sZW5ndGg7YisrKXg9eVtiXSx2PVtcIkNcIix4LngxLHgueTEseC54Mix4LnkyLHgueCx4LnldLGI8eS5sZW5ndGgtMSYmci5wdXNoKHYpO2JyZWFrO2Nhc2VcIlNcIjp2YXIgXz1mLHc9cDtcIkNcIiE9ZSYmXCJTXCIhPWV8fChfKz1fLW8sdys9dy1zKSx2PVtcIkNcIixfLHcsdlsxXSx2WzJdLHZbM10sdls0XV07YnJlYWs7Y2FzZVwiVFwiOlwiUVwiPT1lfHxcIlRcIj09ZT8odT0yKmYtdSxoPTIqcC1oKToodT1mLGg9cCksdj1hKGYscCx1LGgsdlsxXSx2WzJdKTticmVhaztjYXNlXCJRXCI6dT12WzFdLGg9dlsyXSx2PWEoZixwLHZbMV0sdlsyXSx2WzNdLHZbNF0pO2JyZWFrO2Nhc2VcIkxcIjp2PWkoZixwLHZbMV0sdlsyXSk7YnJlYWs7Y2FzZVwiSFwiOnY9aShmLHAsdlsxXSxwKTticmVhaztjYXNlXCJWXCI6dj1pKGYscCxmLHZbMV0pO2JyZWFrO2Nhc2VcIlpcIjp2PWkoZixwLGwsYyl9ZT1tLGY9dlt2Lmxlbmd0aC0yXSxwPXZbdi5sZW5ndGgtMV0sdi5sZW5ndGg+ND8obz12W3YubGVuZ3RoLTRdLHM9dlt2Lmxlbmd0aC0zXSk6KG89ZixzPXApLHIucHVzaCh2KX1yZXR1cm4gcn07dmFyIG49dChcInN2Zy1hcmMtdG8tY3ViaWMtYmV6aWVyXCIpO2Z1bmN0aW9uIGkodCxlLHIsbil7cmV0dXJuW1wiQ1wiLHQsZSxyLG4scixuXX1mdW5jdGlvbiBhKHQsZSxyLG4saSxhKXtyZXR1cm5bXCJDXCIsdC8zKzIvMypyLGUvMysyLzMqbixpLzMrMi8zKnIsYS8zKzIvMypuLGksYV19fSx7XCJzdmctYXJjLXRvLWN1YmljLWJlemllclwiOjUxN31dLDUyMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuLGk9dChcInN2Zy1wYXRoLWJvdW5kc1wiKSxhPXQoXCJwYXJzZS1zdmctcGF0aFwiKSxvPXQoXCJkcmF3LXN2Zy1wYXRoXCIpLHM9dChcImlzLXN2Zy1wYXRoXCIpLGw9dChcImJpdG1hcC1zZGZcIiksYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLHU9Yy5nZXRDb250ZXh0KFwiMmRcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIXModCkpdGhyb3cgRXJyb3IoXCJBcmd1bWVudCBzaG91bGQgYmUgdmFsaWQgc3ZnIHBhdGggc3RyaW5nXCIpO2V8fChlPXt9KTt2YXIgcixoO2Uuc2hhcGU/KHI9ZS5zaGFwZVswXSxoPWUuc2hhcGVbMV0pOihyPWMud2lkdGg9ZS53fHxlLndpZHRofHwyMDAsaD1jLmhlaWdodD1lLmh8fGUuaGVpZ2h0fHwyMDApO3ZhciBmPU1hdGgubWluKHIsaCkscD1lLnN0cm9rZXx8MCxkPWUudmlld2JveHx8ZS52aWV3Qm94fHxpKHQpLGc9W3IvKGRbMl0tZFswXSksaC8oZFszXS1kWzFdKV0sdj1NYXRoLm1pbihnWzBdfHwwLGdbMV18fDApLzI7dS5maWxsU3R5bGU9XCJibGFja1wiLHUuZmlsbFJlY3QoMCwwLHIsaCksdS5maWxsU3R5bGU9XCJ3aGl0ZVwiLHAmJihcIm51bWJlclwiIT10eXBlb2YgcCYmKHA9MSksdS5zdHJva2VTdHlsZT1wPjA/XCJ3aGl0ZVwiOlwiYmxhY2tcIix1LmxpbmVXaWR0aD1NYXRoLmFicyhwKSk7aWYodS50cmFuc2xhdGUoLjUqciwuNSpoKSx1LnNjYWxlKHYsdiksZnVuY3Rpb24oKXtpZihudWxsIT1uKXJldHVybiBuO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIikuZ2V0Q29udGV4dChcIjJkXCIpO2lmKHQuY2FudmFzLndpZHRoPXQuY2FudmFzLmhlaWdodD0xLCF3aW5kb3cuUGF0aDJEKXJldHVybiBuPSExO3ZhciBlPW5ldyBQYXRoMkQoXCJNMCwwaDF2MWgtMXYtMVpcIik7dC5maWxsU3R5bGU9XCJibGFja1wiLHQuZmlsbChlKTt2YXIgcj10LmdldEltYWdlRGF0YSgwLDAsMSwxKTtyZXR1cm4gbj1yJiZyLmRhdGEmJjI1NT09PXIuZGF0YVszXX0oKSl7dmFyIG09bmV3IFBhdGgyRCh0KTt1LmZpbGwobSkscCYmdS5zdHJva2UobSl9ZWxzZXt2YXIgeT1hKHQpO28odSx5KSx1LmZpbGwoKSxwJiZ1LnN0cm9rZSgpfXJldHVybiB1LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksbCh1LHtjdXRvZmY6bnVsbCE9ZS5jdXRvZmY/ZS5jdXRvZmY6LjUscmFkaXVzOm51bGwhPWUucmFkaXVzP2UucmFkaXVzOi41KmZ9KX19LHtcImJpdG1hcC1zZGZcIjo4NCxcImRyYXctc3ZnLXBhdGhcIjoxNjAsXCJpcy1zdmctcGF0aFwiOjQxNyxcInBhcnNlLXN2Zy1wYXRoXCI6NDUzLFwic3ZnLXBhdGgtYm91bmRzXCI6NTE4fV0sNTIxOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbiB0KGUscixpKXt2YXIgaT1pfHx7fTt2YXIgbz1hW2VdO298fChvPWFbZV09e1wiIFwiOntkYXRhOm5ldyBGbG9hdDMyQXJyYXkoMCksc2hhcGU6LjJ9fSk7dmFyIHM9b1tyXTtpZighcylpZihyLmxlbmd0aDw9MXx8IS9cXGQvLnRlc3Qocikpcz1vW3JdPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmNlbGxzLHI9dC5wb3NpdGlvbnMsbj1uZXcgRmxvYXQzMkFycmF5KDYqZS5sZW5ndGgpLGk9MCxhPTAsbz0wO288ZS5sZW5ndGg7KytvKWZvcih2YXIgcz1lW29dLGw9MDtsPDM7KytsKXt2YXIgYz1yW3NbbF1dO25baSsrXT1jWzBdLG5baSsrXT1jWzFdKzEuNCxhPU1hdGgubWF4KGNbMF0sYSl9cmV0dXJue2RhdGE6bixzaGFwZTphfX0obihyLHt0cmlhbmdsZXM6ITAsZm9udDplLHRleHRBbGlnbjppLnRleHRBbGlnbnx8XCJsZWZ0XCIsdGV4dEJhc2VsaW5lOlwiYWxwaGFiZXRpY1wiLHN0eWxldGFnczp7YnJlYWtsaW5lczohMCxib2xkczohMCxpdGFsaWNzOiEwLHN1YnNjcmlwdHM6ITAsc3VwZXJzY3JpcHRzOiEwfX0pKTtlbHNle2Zvcih2YXIgbD1yLnNwbGl0KC8oXFxkfFxccykvKSxjPW5ldyBBcnJheShsLmxlbmd0aCksdT0wLGg9MCxmPTA7ZjxsLmxlbmd0aDsrK2YpY1tmXT10KGUsbFtmXSksdSs9Y1tmXS5kYXRhLmxlbmd0aCxoKz1jW2ZdLnNoYXBlLGY+MCYmKGgrPS4wMik7Zm9yKHZhciBwPW5ldyBGbG9hdDMyQXJyYXkodSksZD0wLGc9LS41KmgsZj0wO2Y8Yy5sZW5ndGg7KytmKXtmb3IodmFyIHY9Y1tmXS5kYXRhLG09MDttPHYubGVuZ3RoO20rPTIpcFtkKytdPXZbbV0rZyxwW2QrK109dlttKzFdO2crPWNbZl0uc2hhcGUrLjAyfXM9b1tyXT17ZGF0YTpwLHNoYXBlOmh9fXJldHVybiBzfTt2YXIgbj10KFwidmVjdG9yaXplLXRleHRcIiksaT13aW5kb3d8fHIuZ2xvYmFsfHx7fSxhPWkuX19URVhUX0NBQ0hFfHx7fTtpLl9fVEVYVF9DQUNIRT17fX0pLmNhbGwodGhpcyx0KFwiX3Byb2Nlc3NcIikpfSx7X3Byb2Nlc3M6NDc1LFwidmVjdG9yaXplLXRleHRcIjo1MzV9XSw1MjI6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCl7dmFyIHI9L15cXHMrLyxuPS9cXHMrJC8saT0wLGE9dC5yb3VuZCxvPXQubWluLHM9dC5tYXgsbD10LnJhbmRvbTtmdW5jdGlvbiBjKGUsbCl7aWYobD1sfHx7fSwoZT1lfHxcIlwiKWluc3RhbmNlb2YgYylyZXR1cm4gZTtpZighKHRoaXMgaW5zdGFuY2VvZiBjKSlyZXR1cm4gbmV3IGMoZSxsKTt2YXIgdT1mdW5jdGlvbihlKXt2YXIgaT17cjowLGc6MCxiOjB9LGE9MSxsPW51bGwsYz1udWxsLHU9bnVsbCxoPSExLGY9ITE7XCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPWZ1bmN0aW9uKHQpe3Q9dC5yZXBsYWNlKHIsXCJcIikucmVwbGFjZShuLFwiXCIpLnRvTG93ZXJDYXNlKCk7dmFyIGUsaT0hMTtpZihTW3RdKXQ9U1t0XSxpPSEwO2Vsc2UgaWYoXCJ0cmFuc3BhcmVudFwiPT10KXJldHVybntyOjAsZzowLGI6MCxhOjAsZm9ybWF0OlwibmFtZVwifTtpZihlPWoucmdiLmV4ZWModCkpcmV0dXJue3I6ZVsxXSxnOmVbMl0sYjplWzNdfTtpZihlPWoucmdiYS5leGVjKHQpKXJldHVybntyOmVbMV0sZzplWzJdLGI6ZVszXSxhOmVbNF19O2lmKGU9ai5oc2wuZXhlYyh0KSlyZXR1cm57aDplWzFdLHM6ZVsyXSxsOmVbM119O2lmKGU9ai5oc2xhLmV4ZWModCkpcmV0dXJue2g6ZVsxXSxzOmVbMl0sbDplWzNdLGE6ZVs0XX07aWYoZT1qLmhzdi5leGVjKHQpKXJldHVybntoOmVbMV0sczplWzJdLHY6ZVszXX07aWYoZT1qLmhzdmEuZXhlYyh0KSlyZXR1cm57aDplWzFdLHM6ZVsyXSx2OmVbM10sYTplWzRdfTtpZihlPWouaGV4OC5leGVjKHQpKXJldHVybntyOk8oZVsxXSksZzpPKGVbMl0pLGI6TyhlWzNdKSxhOlIoZVs0XSksZm9ybWF0Omk/XCJuYW1lXCI6XCJoZXg4XCJ9O2lmKGU9ai5oZXg2LmV4ZWModCkpcmV0dXJue3I6TyhlWzFdKSxnOk8oZVsyXSksYjpPKGVbM10pLGZvcm1hdDppP1wibmFtZVwiOlwiaGV4XCJ9O2lmKGU9ai5oZXg0LmV4ZWModCkpcmV0dXJue3I6TyhlWzFdK1wiXCIrZVsxXSksZzpPKGVbMl0rXCJcIitlWzJdKSxiOk8oZVszXStcIlwiK2VbM10pLGE6UihlWzRdK1wiXCIrZVs0XSksZm9ybWF0Omk/XCJuYW1lXCI6XCJoZXg4XCJ9O2lmKGU9ai5oZXgzLmV4ZWModCkpcmV0dXJue3I6TyhlWzFdK1wiXCIrZVsxXSksZzpPKGVbMl0rXCJcIitlWzJdKSxiOk8oZVszXStcIlwiK2VbM10pLGZvcm1hdDppP1wibmFtZVwiOlwiaGV4XCJ9O3JldHVybiExfShlKSk7XCJvYmplY3RcIj09dHlwZW9mIGUmJihWKGUucikmJlYoZS5nKSYmVihlLmIpPyhwPWUucixkPWUuZyxnPWUuYixpPXtyOjI1NSpMKHAsMjU1KSxnOjI1NSpMKGQsMjU1KSxiOjI1NSpMKGcsMjU1KX0saD0hMCxmPVwiJVwiPT09U3RyaW5nKGUucikuc3Vic3RyKC0xKT9cInByZ2JcIjpcInJnYlwiKTpWKGUuaCkmJlYoZS5zKSYmVihlLnYpPyhsPUQoZS5zKSxjPUQoZS52KSxpPWZ1bmN0aW9uKGUscixuKXtlPTYqTChlLDM2MCkscj1MKHIsMTAwKSxuPUwobiwxMDApO3ZhciBpPXQuZmxvb3IoZSksYT1lLWksbz1uKigxLXIpLHM9biooMS1hKnIpLGw9biooMS0oMS1hKSpyKSxjPWklNjtyZXR1cm57cjoyNTUqW24scyxvLG8sbCxuXVtjXSxnOjI1NSpbbCxuLG4scyxvLG9dW2NdLGI6MjU1KltvLG8sbCxuLG4sc11bY119fShlLmgsbCxjKSxoPSEwLGY9XCJoc3ZcIik6VihlLmgpJiZWKGUucykmJlYoZS5sKSYmKGw9RChlLnMpLHU9RChlLmwpLGk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYTtmdW5jdGlvbiBvKHQsZSxyKXtyZXR1cm4gcjwwJiYocis9MSkscj4xJiYoci09MSkscjwxLzY/dCs2KihlLXQpKnI6cjwuNT9lOnI8Mi8zP3QrKGUtdCkqKDIvMy1yKSo2OnR9aWYodD1MKHQsMzYwKSxlPUwoZSwxMDApLHI9TChyLDEwMCksMD09PWUpbj1pPWE9cjtlbHNle3ZhciBzPXI8LjU/ciooMStlKTpyK2UtciplLGw9MipyLXM7bj1vKGwscyx0KzEvMyksaT1vKGwscyx0KSxhPW8obCxzLHQtMS8zKX1yZXR1cm57cjoyNTUqbixnOjI1NSppLGI6MjU1KmF9fShlLmgsbCx1KSxoPSEwLGY9XCJoc2xcIiksZS5oYXNPd25Qcm9wZXJ0eShcImFcIikmJihhPWUuYSkpO3ZhciBwLGQsZztyZXR1cm4gYT1DKGEpLHtvazpoLGZvcm1hdDplLmZvcm1hdHx8ZixyOm8oMjU1LHMoaS5yLDApKSxnOm8oMjU1LHMoaS5nLDApKSxiOm8oMjU1LHMoaS5iLDApKSxhOmF9fShlKTt0aGlzLl9vcmlnaW5hbElucHV0PWUsdGhpcy5fcj11LnIsdGhpcy5fZz11LmcsdGhpcy5fYj11LmIsdGhpcy5fYT11LmEsdGhpcy5fcm91bmRBPWEoMTAwKnRoaXMuX2EpLzEwMCx0aGlzLl9mb3JtYXQ9bC5mb3JtYXR8fHUuZm9ybWF0LHRoaXMuX2dyYWRpZW50VHlwZT1sLmdyYWRpZW50VHlwZSx0aGlzLl9yPDEmJih0aGlzLl9yPWEodGhpcy5fcikpLHRoaXMuX2c8MSYmKHRoaXMuX2c9YSh0aGlzLl9nKSksdGhpcy5fYjwxJiYodGhpcy5fYj1hKHRoaXMuX2IpKSx0aGlzLl9vaz11Lm9rLHRoaXMuX3RjX2lkPWkrK31mdW5jdGlvbiB1KHQsZSxyKXt0PUwodCwyNTUpLGU9TChlLDI1NSkscj1MKHIsMjU1KTt2YXIgbixpLGE9cyh0LGUsciksbD1vKHQsZSxyKSxjPShhK2wpLzI7aWYoYT09bCluPWk9MDtlbHNle3ZhciB1PWEtbDtzd2l0Y2goaT1jPi41P3UvKDItYS1sKTp1LyhhK2wpLGEpe2Nhc2UgdDpuPShlLXIpL3UrKGU8cj82OjApO2JyZWFrO2Nhc2UgZTpuPShyLXQpL3UrMjticmVhaztjYXNlIHI6bj0odC1lKS91KzR9bi89Nn1yZXR1cm57aDpuLHM6aSxsOmN9fWZ1bmN0aW9uIGgodCxlLHIpe3Q9TCh0LDI1NSksZT1MKGUsMjU1KSxyPUwociwyNTUpO3ZhciBuLGksYT1zKHQsZSxyKSxsPW8odCxlLHIpLGM9YSx1PWEtbDtpZihpPTA9PT1hPzA6dS9hLGE9PWwpbj0wO2Vsc2V7c3dpdGNoKGEpe2Nhc2UgdDpuPShlLXIpL3UrKGU8cj82OjApO2JyZWFrO2Nhc2UgZTpuPShyLXQpL3UrMjticmVhaztjYXNlIHI6bj0odC1lKS91KzR9bi89Nn1yZXR1cm57aDpuLHM6aSx2OmN9fWZ1bmN0aW9uIGYodCxlLHIsbil7dmFyIGk9W0koYSh0KS50b1N0cmluZygxNikpLEkoYShlKS50b1N0cmluZygxNikpLEkoYShyKS50b1N0cmluZygxNikpXTtyZXR1cm4gbiYmaVswXS5jaGFyQXQoMCk9PWlbMF0uY2hhckF0KDEpJiZpWzFdLmNoYXJBdCgwKT09aVsxXS5jaGFyQXQoMSkmJmlbMl0uY2hhckF0KDApPT1pWzJdLmNoYXJBdCgxKT9pWzBdLmNoYXJBdCgwKStpWzFdLmNoYXJBdCgwKStpWzJdLmNoYXJBdCgwKTppLmpvaW4oXCJcIil9ZnVuY3Rpb24gcCh0LGUscixuKXtyZXR1cm5bSShQKG4pKSxJKGEodCkudG9TdHJpbmcoMTYpKSxJKGEoZSkudG9TdHJpbmcoMTYpKSxJKGEocikudG9TdHJpbmcoMTYpKV0uam9pbihcIlwiKX1mdW5jdGlvbiBkKHQsZSl7ZT0wPT09ZT8wOmV8fDEwO3ZhciByPWModCkudG9Ic2woKTtyZXR1cm4gci5zLT1lLzEwMCxyLnM9eihyLnMpLGMocil9ZnVuY3Rpb24gZyh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1jKHQpLnRvSHNsKCk7cmV0dXJuIHIucys9ZS8xMDAsci5zPXooci5zKSxjKHIpfWZ1bmN0aW9uIHYodCl7cmV0dXJuIGModCkuZGVzYXR1cmF0ZSgxMDApfWZ1bmN0aW9uIG0odCxlKXtlPTA9PT1lPzA6ZXx8MTA7dmFyIHI9Yyh0KS50b0hzbCgpO3JldHVybiByLmwrPWUvMTAwLHIubD16KHIubCksYyhyKX1mdW5jdGlvbiB5KHQsZSl7ZT0wPT09ZT8wOmV8fDEwO3ZhciByPWModCkudG9SZ2IoKTtyZXR1cm4gci5yPXMoMCxvKDI1NSxyLnItYSgtZS8xMDAqMjU1KSkpLHIuZz1zKDAsbygyNTUsci5nLWEoLWUvMTAwKjI1NSkpKSxyLmI9cygwLG8oMjU1LHIuYi1hKC1lLzEwMCoyNTUpKSksYyhyKX1mdW5jdGlvbiB4KHQsZSl7ZT0wPT09ZT8wOmV8fDEwO3ZhciByPWModCkudG9Ic2woKTtyZXR1cm4gci5sLT1lLzEwMCxyLmw9eihyLmwpLGMocil9ZnVuY3Rpb24gYih0LGUpe3ZhciByPWModCkudG9Ic2woKSxuPShyLmgrZSklMzYwO3JldHVybiByLmg9bjwwPzM2MCtuOm4sYyhyKX1mdW5jdGlvbiBfKHQpe3ZhciBlPWModCkudG9Ic2woKTtyZXR1cm4gZS5oPShlLmgrMTgwKSUzNjAsYyhlKX1mdW5jdGlvbiB3KHQpe3ZhciBlPWModCkudG9Ic2woKSxyPWUuaDtyZXR1cm5bYyh0KSxjKHtoOihyKzEyMCklMzYwLHM6ZS5zLGw6ZS5sfSksYyh7aDoocisyNDApJTM2MCxzOmUucyxsOmUubH0pXX1mdW5jdGlvbiBrKHQpe3ZhciBlPWModCkudG9Ic2woKSxyPWUuaDtyZXR1cm5bYyh0KSxjKHtoOihyKzkwKSUzNjAsczplLnMsbDplLmx9KSxjKHtoOihyKzE4MCklMzYwLHM6ZS5zLGw6ZS5sfSksYyh7aDoocisyNzApJTM2MCxzOmUucyxsOmUubH0pXX1mdW5jdGlvbiBBKHQpe3ZhciBlPWModCkudG9Ic2woKSxyPWUuaDtyZXR1cm5bYyh0KSxjKHtoOihyKzcyKSUzNjAsczplLnMsbDplLmx9KSxjKHtoOihyKzIxNiklMzYwLHM6ZS5zLGw6ZS5sfSldfWZ1bmN0aW9uIFQodCxlLHIpe2U9ZXx8NixyPXJ8fDMwO3ZhciBuPWModCkudG9Ic2woKSxpPTM2MC9yLGE9W2ModCldO2ZvcihuLmg9KG4uaC0oaSplPj4xKSs3MjApJTM2MDstLWU7KW4uaD0obi5oK2kpJTM2MCxhLnB1c2goYyhuKSk7cmV0dXJuIGF9ZnVuY3Rpb24gTSh0LGUpe2U9ZXx8Njtmb3IodmFyIHI9Yyh0KS50b0hzdigpLG49ci5oLGk9ci5zLGE9ci52LG89W10scz0xL2U7ZS0tOylvLnB1c2goYyh7aDpuLHM6aSx2OmF9KSksYT0oYStzKSUxO3JldHVybiBvfWMucHJvdG90eXBlPXtpc0Rhcms6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCcmlnaHRuZXNzKCk8MTI4fSxpc0xpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNEYXJrKCl9LGlzVmFsaWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb2t9LGdldE9yaWdpbmFsSW5wdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3JpZ2luYWxJbnB1dH0sZ2V0Rm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Zvcm1hdH0sZ2V0QWxwaGE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYX0sZ2V0QnJpZ2h0bmVzczpmdW5jdGlvbigpe3ZhciB0PXRoaXMudG9SZ2IoKTtyZXR1cm4oMjk5KnQucis1ODcqdC5nKzExNCp0LmIpLzFlM30sZ2V0THVtaW5hbmNlOmZ1bmN0aW9uKCl7dmFyIGUscixuLGk9dGhpcy50b1JnYigpO3JldHVybiBlPWkuci8yNTUscj1pLmcvMjU1LG49aS5iLzI1NSwuMjEyNiooZTw9LjAzOTI4P2UvMTIuOTI6dC5wb3coKGUrLjA1NSkvMS4wNTUsMi40KSkrLjcxNTIqKHI8PS4wMzkyOD9yLzEyLjkyOnQucG93KChyKy4wNTUpLzEuMDU1LDIuNCkpKy4wNzIyKihuPD0uMDM5Mjg/bi8xMi45Mjp0LnBvdygobisuMDU1KS8xLjA1NSwyLjQpKX0sc2V0QWxwaGE6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2E9Qyh0KSx0aGlzLl9yb3VuZEE9YSgxMDAqdGhpcy5fYSkvMTAwLHRoaXN9LHRvSHN2OmZ1bmN0aW9uKCl7dmFyIHQ9aCh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYik7cmV0dXJue2g6MzYwKnQuaCxzOnQucyx2OnQudixhOnRoaXMuX2F9fSx0b0hzdlN0cmluZzpmdW5jdGlvbigpe3ZhciB0PWgodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpLGU9YSgzNjAqdC5oKSxyPWEoMTAwKnQucyksbj1hKDEwMCp0LnYpO3JldHVybiAxPT10aGlzLl9hP1wiaHN2KFwiK2UrXCIsIFwiK3IrXCIlLCBcIituK1wiJSlcIjpcImhzdmEoXCIrZStcIiwgXCIrcitcIiUsIFwiK24rXCIlLCBcIit0aGlzLl9yb3VuZEErXCIpXCJ9LHRvSHNsOmZ1bmN0aW9uKCl7dmFyIHQ9dSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYik7cmV0dXJue2g6MzYwKnQuaCxzOnQucyxsOnQubCxhOnRoaXMuX2F9fSx0b0hzbFN0cmluZzpmdW5jdGlvbigpe3ZhciB0PXUodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpLGU9YSgzNjAqdC5oKSxyPWEoMTAwKnQucyksbj1hKDEwMCp0LmwpO3JldHVybiAxPT10aGlzLl9hP1wiaHNsKFwiK2UrXCIsIFwiK3IrXCIlLCBcIituK1wiJSlcIjpcImhzbGEoXCIrZStcIiwgXCIrcitcIiUsIFwiK24rXCIlLCBcIit0aGlzLl9yb3VuZEErXCIpXCJ9LHRvSGV4OmZ1bmN0aW9uKHQpe3JldHVybiBmKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLHQpfSx0b0hleFN0cmluZzpmdW5jdGlvbih0KXtyZXR1cm5cIiNcIit0aGlzLnRvSGV4KHQpfSx0b0hleDg6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG89W0koYSh0KS50b1N0cmluZygxNikpLEkoYShlKS50b1N0cmluZygxNikpLEkoYShyKS50b1N0cmluZygxNikpLEkoUChuKSldO2lmKGkmJm9bMF0uY2hhckF0KDApPT1vWzBdLmNoYXJBdCgxKSYmb1sxXS5jaGFyQXQoMCk9PW9bMV0uY2hhckF0KDEpJiZvWzJdLmNoYXJBdCgwKT09b1syXS5jaGFyQXQoMSkmJm9bM10uY2hhckF0KDApPT1vWzNdLmNoYXJBdCgxKSlyZXR1cm4gb1swXS5jaGFyQXQoMCkrb1sxXS5jaGFyQXQoMCkrb1syXS5jaGFyQXQoMCkrb1szXS5jaGFyQXQoMCk7cmV0dXJuIG8uam9pbihcIlwiKX0odGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsdGhpcy5fYSx0KX0sdG9IZXg4U3RyaW5nOmZ1bmN0aW9uKHQpe3JldHVyblwiI1wiK3RoaXMudG9IZXg4KHQpfSx0b1JnYjpmdW5jdGlvbigpe3JldHVybntyOmEodGhpcy5fciksZzphKHRoaXMuX2cpLGI6YSh0aGlzLl9iKSxhOnRoaXMuX2F9fSx0b1JnYlN0cmluZzpmdW5jdGlvbigpe3JldHVybiAxPT10aGlzLl9hP1wicmdiKFwiK2EodGhpcy5fcikrXCIsIFwiK2EodGhpcy5fZykrXCIsIFwiK2EodGhpcy5fYikrXCIpXCI6XCJyZ2JhKFwiK2EodGhpcy5fcikrXCIsIFwiK2EodGhpcy5fZykrXCIsIFwiK2EodGhpcy5fYikrXCIsIFwiK3RoaXMuX3JvdW5kQStcIilcIn0sdG9QZXJjZW50YWdlUmdiOmZ1bmN0aW9uKCl7cmV0dXJue3I6YSgxMDAqTCh0aGlzLl9yLDI1NSkpK1wiJVwiLGc6YSgxMDAqTCh0aGlzLl9nLDI1NSkpK1wiJVwiLGI6YSgxMDAqTCh0aGlzLl9iLDI1NSkpK1wiJVwiLGE6dGhpcy5fYX19LHRvUGVyY2VudGFnZVJnYlN0cmluZzpmdW5jdGlvbigpe3JldHVybiAxPT10aGlzLl9hP1wicmdiKFwiK2EoMTAwKkwodGhpcy5fciwyNTUpKStcIiUsIFwiK2EoMTAwKkwodGhpcy5fZywyNTUpKStcIiUsIFwiK2EoMTAwKkwodGhpcy5fYiwyNTUpKStcIiUpXCI6XCJyZ2JhKFwiK2EoMTAwKkwodGhpcy5fciwyNTUpKStcIiUsIFwiK2EoMTAwKkwodGhpcy5fZywyNTUpKStcIiUsIFwiK2EoMTAwKkwodGhpcy5fYiwyNTUpKStcIiUsIFwiK3RoaXMuX3JvdW5kQStcIilcIn0sdG9OYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLl9hP1widHJhbnNwYXJlbnRcIjohKHRoaXMuX2E8MSkmJihFW2YodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsITApXXx8ITEpfSx0b0ZpbHRlcjpmdW5jdGlvbih0KXt2YXIgZT1cIiNcIitwKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLHRoaXMuX2EpLHI9ZSxuPXRoaXMuX2dyYWRpZW50VHlwZT9cIkdyYWRpZW50VHlwZSA9IDEsIFwiOlwiXCI7aWYodCl7dmFyIGk9Yyh0KTtyPVwiI1wiK3AoaS5fcixpLl9nLGkuX2IsaS5fYSl9cmV0dXJuXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoXCIrbitcInN0YXJ0Q29sb3JzdHI9XCIrZStcIixlbmRDb2xvcnN0cj1cIityK1wiKVwifSx0b1N0cmluZzpmdW5jdGlvbih0KXt2YXIgZT0hIXQ7dD10fHx0aGlzLl9mb3JtYXQ7dmFyIHI9ITEsbj10aGlzLl9hPDEmJnRoaXMuX2E+PTA7cmV0dXJuIGV8fCFufHxcImhleFwiIT09dCYmXCJoZXg2XCIhPT10JiZcImhleDNcIiE9PXQmJlwiaGV4NFwiIT09dCYmXCJoZXg4XCIhPT10JiZcIm5hbWVcIiE9PXQ/KFwicmdiXCI9PT10JiYocj10aGlzLnRvUmdiU3RyaW5nKCkpLFwicHJnYlwiPT09dCYmKHI9dGhpcy50b1BlcmNlbnRhZ2VSZ2JTdHJpbmcoKSksXCJoZXhcIiE9PXQmJlwiaGV4NlwiIT09dHx8KHI9dGhpcy50b0hleFN0cmluZygpKSxcImhleDNcIj09PXQmJihyPXRoaXMudG9IZXhTdHJpbmcoITApKSxcImhleDRcIj09PXQmJihyPXRoaXMudG9IZXg4U3RyaW5nKCEwKSksXCJoZXg4XCI9PT10JiYocj10aGlzLnRvSGV4OFN0cmluZygpKSxcIm5hbWVcIj09PXQmJihyPXRoaXMudG9OYW1lKCkpLFwiaHNsXCI9PT10JiYocj10aGlzLnRvSHNsU3RyaW5nKCkpLFwiaHN2XCI9PT10JiYocj10aGlzLnRvSHN2U3RyaW5nKCkpLHJ8fHRoaXMudG9IZXhTdHJpbmcoKSk6XCJuYW1lXCI9PT10JiYwPT09dGhpcy5fYT90aGlzLnRvTmFtZSgpOnRoaXMudG9SZ2JTdHJpbmcoKX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gYyh0aGlzLnRvU3RyaW5nKCkpfSxfYXBwbHlNb2RpZmljYXRpb246ZnVuY3Rpb24odCxlKXt2YXIgcj10LmFwcGx5KG51bGwsW3RoaXNdLmNvbmNhdChbXS5zbGljZS5jYWxsKGUpKSk7cmV0dXJuIHRoaXMuX3I9ci5fcix0aGlzLl9nPXIuX2csdGhpcy5fYj1yLl9iLHRoaXMuc2V0QWxwaGEoci5fYSksdGhpc30sbGlnaHRlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihtLGFyZ3VtZW50cyl9LGJyaWdodGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHksYXJndW1lbnRzKX0sZGFya2VuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHgsYXJndW1lbnRzKX0sZGVzYXR1cmF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihkLGFyZ3VtZW50cyl9LHNhdHVyYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGcsYXJndW1lbnRzKX0sZ3JleXNjYWxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHYsYXJndW1lbnRzKX0sc3BpbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihiLGFyZ3VtZW50cyl9LF9hcHBseUNvbWJpbmF0aW9uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuYXBwbHkobnVsbCxbdGhpc10uY29uY2F0KFtdLnNsaWNlLmNhbGwoZSkpKX0sYW5hbG9nb3VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oVCxhcmd1bWVudHMpfSxjb21wbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oXyxhcmd1bWVudHMpfSxtb25vY2hyb21hdGljOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oTSxhcmd1bWVudHMpfSxzcGxpdGNvbXBsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihBLGFyZ3VtZW50cyl9LHRyaWFkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24odyxhcmd1bWVudHMpfSx0ZXRyYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihrLGFyZ3VtZW50cyl9fSxjLmZyb21SYXRpbz1mdW5jdGlvbih0LGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KXt2YXIgcj17fTtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYocltuXT1cImFcIj09PW4/dFtuXTpEKHRbbl0pKTt0PXJ9cmV0dXJuIGModCxlKX0sYy5lcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4hKCF0fHwhZSkmJmModCkudG9SZ2JTdHJpbmcoKT09YyhlKS50b1JnYlN0cmluZygpfSxjLnJhbmRvbT1mdW5jdGlvbigpe3JldHVybiBjLmZyb21SYXRpbyh7cjpsKCksZzpsKCksYjpsKCl9KX0sYy5taXg9ZnVuY3Rpb24odCxlLHIpe3I9MD09PXI/MDpyfHw1MDt2YXIgbj1jKHQpLnRvUmdiKCksaT1jKGUpLnRvUmdiKCksYT1yLzEwMDtyZXR1cm4gYyh7cjooaS5yLW4ucikqYStuLnIsZzooaS5nLW4uZykqYStuLmcsYjooaS5iLW4uYikqYStuLmIsYTooaS5hLW4uYSkqYStuLmF9KX0sYy5yZWFkYWJpbGl0eT1mdW5jdGlvbihlLHIpe3ZhciBuPWMoZSksaT1jKHIpO3JldHVybih0Lm1heChuLmdldEx1bWluYW5jZSgpLGkuZ2V0THVtaW5hbmNlKCkpKy4wNSkvKHQubWluKG4uZ2V0THVtaW5hbmNlKCksaS5nZXRMdW1pbmFuY2UoKSkrLjA1KX0sYy5pc1JlYWRhYmxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9Yy5yZWFkYWJpbGl0eSh0LGUpO3N3aXRjaChpPSExLChuPWZ1bmN0aW9uKHQpe3ZhciBlLHI7ZT0oKHQ9dHx8e2xldmVsOlwiQUFcIixzaXplOlwic21hbGxcIn0pLmxldmVsfHxcIkFBXCIpLnRvVXBwZXJDYXNlKCkscj0odC5zaXplfHxcInNtYWxsXCIpLnRvTG93ZXJDYXNlKCksXCJBQVwiIT09ZSYmXCJBQUFcIiE9PWUmJihlPVwiQUFcIik7XCJzbWFsbFwiIT09ciYmXCJsYXJnZVwiIT09ciYmKHI9XCJzbWFsbFwiKTtyZXR1cm57bGV2ZWw6ZSxzaXplOnJ9fShyKSkubGV2ZWwrbi5zaXplKXtjYXNlXCJBQXNtYWxsXCI6Y2FzZVwiQUFBbGFyZ2VcIjppPWE+PTQuNTticmVhaztjYXNlXCJBQWxhcmdlXCI6aT1hPj0zO2JyZWFrO2Nhc2VcIkFBQXNtYWxsXCI6aT1hPj03fXJldHVybiBpfSxjLm1vc3RSZWFkYWJsZT1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scz1udWxsLGw9MDtpPShyPXJ8fHt9KS5pbmNsdWRlRmFsbGJhY2tDb2xvcnMsYT1yLmxldmVsLG89ci5zaXplO2Zvcih2YXIgdT0wO3U8ZS5sZW5ndGg7dSsrKShuPWMucmVhZGFiaWxpdHkodCxlW3VdKSk+bCYmKGw9bixzPWMoZVt1XSkpO3JldHVybiBjLmlzUmVhZGFibGUodCxzLHtsZXZlbDphLHNpemU6b30pfHwhaT9zOihyLmluY2x1ZGVGYWxsYmFja0NvbG9ycz0hMSxjLm1vc3RSZWFkYWJsZSh0LFtcIiNmZmZcIixcIiMwMDBcIl0scikpfTt2YXIgUz1jLm5hbWVzPXthbGljZWJsdWU6XCJmMGY4ZmZcIixhbnRpcXVld2hpdGU6XCJmYWViZDdcIixhcXVhOlwiMGZmXCIsYXF1YW1hcmluZTpcIjdmZmZkNFwiLGF6dXJlOlwiZjBmZmZmXCIsYmVpZ2U6XCJmNWY1ZGNcIixiaXNxdWU6XCJmZmU0YzRcIixibGFjazpcIjAwMFwiLGJsYW5jaGVkYWxtb25kOlwiZmZlYmNkXCIsYmx1ZTpcIjAwZlwiLGJsdWV2aW9sZXQ6XCI4YTJiZTJcIixicm93bjpcImE1MmEyYVwiLGJ1cmx5d29vZDpcImRlYjg4N1wiLGJ1cm50c2llbm5hOlwiZWE3ZTVkXCIsY2FkZXRibHVlOlwiNWY5ZWEwXCIsY2hhcnRyZXVzZTpcIjdmZmYwMFwiLGNob2NvbGF0ZTpcImQyNjkxZVwiLGNvcmFsOlwiZmY3ZjUwXCIsY29ybmZsb3dlcmJsdWU6XCI2NDk1ZWRcIixjb3Juc2lsazpcImZmZjhkY1wiLGNyaW1zb246XCJkYzE0M2NcIixjeWFuOlwiMGZmXCIsZGFya2JsdWU6XCIwMDAwOGJcIixkYXJrY3lhbjpcIjAwOGI4YlwiLGRhcmtnb2xkZW5yb2Q6XCJiODg2MGJcIixkYXJrZ3JheTpcImE5YTlhOVwiLGRhcmtncmVlbjpcIjAwNjQwMFwiLGRhcmtncmV5OlwiYTlhOWE5XCIsZGFya2toYWtpOlwiYmRiNzZiXCIsZGFya21hZ2VudGE6XCI4YjAwOGJcIixkYXJrb2xpdmVncmVlbjpcIjU1NmIyZlwiLGRhcmtvcmFuZ2U6XCJmZjhjMDBcIixkYXJrb3JjaGlkOlwiOTkzMmNjXCIsZGFya3JlZDpcIjhiMDAwMFwiLGRhcmtzYWxtb246XCJlOTk2N2FcIixkYXJrc2VhZ3JlZW46XCI4ZmJjOGZcIixkYXJrc2xhdGVibHVlOlwiNDgzZDhiXCIsZGFya3NsYXRlZ3JheTpcIjJmNGY0ZlwiLGRhcmtzbGF0ZWdyZXk6XCIyZjRmNGZcIixkYXJrdHVycXVvaXNlOlwiMDBjZWQxXCIsZGFya3Zpb2xldDpcIjk0MDBkM1wiLGRlZXBwaW5rOlwiZmYxNDkzXCIsZGVlcHNreWJsdWU6XCIwMGJmZmZcIixkaW1ncmF5OlwiNjk2OTY5XCIsZGltZ3JleTpcIjY5Njk2OVwiLGRvZGdlcmJsdWU6XCIxZTkwZmZcIixmaXJlYnJpY2s6XCJiMjIyMjJcIixmbG9yYWx3aGl0ZTpcImZmZmFmMFwiLGZvcmVzdGdyZWVuOlwiMjI4YjIyXCIsZnVjaHNpYTpcImYwZlwiLGdhaW5zYm9ybzpcImRjZGNkY1wiLGdob3N0d2hpdGU6XCJmOGY4ZmZcIixnb2xkOlwiZmZkNzAwXCIsZ29sZGVucm9kOlwiZGFhNTIwXCIsZ3JheTpcIjgwODA4MFwiLGdyZWVuOlwiMDA4MDAwXCIsZ3JlZW55ZWxsb3c6XCJhZGZmMmZcIixncmV5OlwiODA4MDgwXCIsaG9uZXlkZXc6XCJmMGZmZjBcIixob3RwaW5rOlwiZmY2OWI0XCIsaW5kaWFucmVkOlwiY2Q1YzVjXCIsaW5kaWdvOlwiNGIwMDgyXCIsaXZvcnk6XCJmZmZmZjBcIixraGFraTpcImYwZTY4Y1wiLGxhdmVuZGVyOlwiZTZlNmZhXCIsbGF2ZW5kZXJibHVzaDpcImZmZjBmNVwiLGxhd25ncmVlbjpcIjdjZmMwMFwiLGxlbW9uY2hpZmZvbjpcImZmZmFjZFwiLGxpZ2h0Ymx1ZTpcImFkZDhlNlwiLGxpZ2h0Y29yYWw6XCJmMDgwODBcIixsaWdodGN5YW46XCJlMGZmZmZcIixsaWdodGdvbGRlbnJvZHllbGxvdzpcImZhZmFkMlwiLGxpZ2h0Z3JheTpcImQzZDNkM1wiLGxpZ2h0Z3JlZW46XCI5MGVlOTBcIixsaWdodGdyZXk6XCJkM2QzZDNcIixsaWdodHBpbms6XCJmZmI2YzFcIixsaWdodHNhbG1vbjpcImZmYTA3YVwiLGxpZ2h0c2VhZ3JlZW46XCIyMGIyYWFcIixsaWdodHNreWJsdWU6XCI4N2NlZmFcIixsaWdodHNsYXRlZ3JheTpcIjc4OVwiLGxpZ2h0c2xhdGVncmV5OlwiNzg5XCIsbGlnaHRzdGVlbGJsdWU6XCJiMGM0ZGVcIixsaWdodHllbGxvdzpcImZmZmZlMFwiLGxpbWU6XCIwZjBcIixsaW1lZ3JlZW46XCIzMmNkMzJcIixsaW5lbjpcImZhZjBlNlwiLG1hZ2VudGE6XCJmMGZcIixtYXJvb246XCI4MDAwMDBcIixtZWRpdW1hcXVhbWFyaW5lOlwiNjZjZGFhXCIsbWVkaXVtYmx1ZTpcIjAwMDBjZFwiLG1lZGl1bW9yY2hpZDpcImJhNTVkM1wiLG1lZGl1bXB1cnBsZTpcIjkzNzBkYlwiLG1lZGl1bXNlYWdyZWVuOlwiM2NiMzcxXCIsbWVkaXVtc2xhdGVibHVlOlwiN2I2OGVlXCIsbWVkaXVtc3ByaW5nZ3JlZW46XCIwMGZhOWFcIixtZWRpdW10dXJxdW9pc2U6XCI0OGQxY2NcIixtZWRpdW12aW9sZXRyZWQ6XCJjNzE1ODVcIixtaWRuaWdodGJsdWU6XCIxOTE5NzBcIixtaW50Y3JlYW06XCJmNWZmZmFcIixtaXN0eXJvc2U6XCJmZmU0ZTFcIixtb2NjYXNpbjpcImZmZTRiNVwiLG5hdmFqb3doaXRlOlwiZmZkZWFkXCIsbmF2eTpcIjAwMDA4MFwiLG9sZGxhY2U6XCJmZGY1ZTZcIixvbGl2ZTpcIjgwODAwMFwiLG9saXZlZHJhYjpcIjZiOGUyM1wiLG9yYW5nZTpcImZmYTUwMFwiLG9yYW5nZXJlZDpcImZmNDUwMFwiLG9yY2hpZDpcImRhNzBkNlwiLHBhbGVnb2xkZW5yb2Q6XCJlZWU4YWFcIixwYWxlZ3JlZW46XCI5OGZiOThcIixwYWxldHVycXVvaXNlOlwiYWZlZWVlXCIscGFsZXZpb2xldHJlZDpcImRiNzA5M1wiLHBhcGF5YXdoaXA6XCJmZmVmZDVcIixwZWFjaHB1ZmY6XCJmZmRhYjlcIixwZXJ1OlwiY2Q4NTNmXCIscGluazpcImZmYzBjYlwiLHBsdW06XCJkZGEwZGRcIixwb3dkZXJibHVlOlwiYjBlMGU2XCIscHVycGxlOlwiODAwMDgwXCIscmViZWNjYXB1cnBsZTpcIjY2MzM5OVwiLHJlZDpcImYwMFwiLHJvc3licm93bjpcImJjOGY4ZlwiLHJveWFsYmx1ZTpcIjQxNjllMVwiLHNhZGRsZWJyb3duOlwiOGI0NTEzXCIsc2FsbW9uOlwiZmE4MDcyXCIsc2FuZHlicm93bjpcImY0YTQ2MFwiLHNlYWdyZWVuOlwiMmU4YjU3XCIsc2Vhc2hlbGw6XCJmZmY1ZWVcIixzaWVubmE6XCJhMDUyMmRcIixzaWx2ZXI6XCJjMGMwYzBcIixza3libHVlOlwiODdjZWViXCIsc2xhdGVibHVlOlwiNmE1YWNkXCIsc2xhdGVncmF5OlwiNzA4MDkwXCIsc2xhdGVncmV5OlwiNzA4MDkwXCIsc25vdzpcImZmZmFmYVwiLHNwcmluZ2dyZWVuOlwiMDBmZjdmXCIsc3RlZWxibHVlOlwiNDY4MmI0XCIsdGFuOlwiZDJiNDhjXCIsdGVhbDpcIjAwODA4MFwiLHRoaXN0bGU6XCJkOGJmZDhcIix0b21hdG86XCJmZjYzNDdcIix0dXJxdW9pc2U6XCI0MGUwZDBcIix2aW9sZXQ6XCJlZTgyZWVcIix3aGVhdDpcImY1ZGViM1wiLHdoaXRlOlwiZmZmXCIsd2hpdGVzbW9rZTpcImY1ZjVmNVwiLHllbGxvdzpcImZmMFwiLHllbGxvd2dyZWVuOlwiOWFjZDMyXCJ9LEU9Yy5oZXhOYW1lcz1mdW5jdGlvbih0KXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdCl0Lmhhc093blByb3BlcnR5KHIpJiYoZVt0W3JdXT1yKTtyZXR1cm4gZX0oUyk7ZnVuY3Rpb24gQyh0KXtyZXR1cm4gdD1wYXJzZUZsb2F0KHQpLChpc05hTih0KXx8dDwwfHx0PjEpJiYodD0xKSx0fWZ1bmN0aW9uIEwoZSxyKXsoZnVuY3Rpb24odCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQmJi0xIT10LmluZGV4T2YoXCIuXCIpJiYxPT09cGFyc2VGbG9hdCh0KX0pKGUpJiYoZT1cIjEwMCVcIik7dmFyIG49ZnVuY3Rpb24odCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQmJi0xIT10LmluZGV4T2YoXCIlXCIpfShlKTtyZXR1cm4gZT1vKHIscygwLHBhcnNlRmxvYXQoZSkpKSxuJiYoZT1wYXJzZUludChlKnIsMTApLzEwMCksdC5hYnMoZS1yKTwxZS02PzE6ZSVyL3BhcnNlRmxvYXQocil9ZnVuY3Rpb24geih0KXtyZXR1cm4gbygxLHMoMCx0KSl9ZnVuY3Rpb24gTyh0KXtyZXR1cm4gcGFyc2VJbnQodCwxNil9ZnVuY3Rpb24gSSh0KXtyZXR1cm4gMT09dC5sZW5ndGg/XCIwXCIrdDpcIlwiK3R9ZnVuY3Rpb24gRCh0KXtyZXR1cm4gdDw9MSYmKHQ9MTAwKnQrXCIlXCIpLHR9ZnVuY3Rpb24gUChlKXtyZXR1cm4gdC5yb3VuZCgyNTUqcGFyc2VGbG9hdChlKSkudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFIodCl7cmV0dXJuIE8odCkvMjU1fXZhciBGLEIsTixqPShCPVwiW1xcXFxzfFxcXFwoXSsoXCIrKEY9XCIoPzpbLVxcXFwrXT9cXFxcZCpcXFxcLlxcXFxkKyU/KXwoPzpbLVxcXFwrXT9cXFxcZCslPylcIikrXCIpWyx8XFxcXHNdKyhcIitGK1wiKVssfFxcXFxzXSsoXCIrRitcIilcXFxccypcXFxcKT9cIixOPVwiW1xcXFxzfFxcXFwoXSsoXCIrRitcIilbLHxcXFxcc10rKFwiK0YrXCIpWyx8XFxcXHNdKyhcIitGK1wiKVssfFxcXFxzXSsoXCIrRitcIilcXFxccypcXFxcKT9cIix7Q1NTX1VOSVQ6bmV3IFJlZ0V4cChGKSxyZ2I6bmV3IFJlZ0V4cChcInJnYlwiK0IpLHJnYmE6bmV3IFJlZ0V4cChcInJnYmFcIitOKSxoc2w6bmV3IFJlZ0V4cChcImhzbFwiK0IpLGhzbGE6bmV3IFJlZ0V4cChcImhzbGFcIitOKSxoc3Y6bmV3IFJlZ0V4cChcImhzdlwiK0IpLGhzdmE6bmV3IFJlZ0V4cChcImhzdmFcIitOKSxoZXgzOi9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkkLyxoZXg2Oi9eIz8oWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkkLyxoZXg0Oi9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8saGV4ODovXiM/KFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KSQvfSk7ZnVuY3Rpb24gVih0KXtyZXR1cm4hIWouQ1NTX1VOSVQuZXhlYyh0KX1cInVuZGVmaW5lZFwiIT10eXBlb2YgZSYmZS5leHBvcnRzP2UuZXhwb3J0cz1jOndpbmRvdy50aW55Y29sb3I9Y30oTWF0aCl9LHt9XSw1MjM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9aSxlLmV4cG9ydHMuZmxvYXQzMj1lLmV4cG9ydHMuZmxvYXQ9aSxlLmV4cG9ydHMuZnJhY3QzMj1lLmV4cG9ydHMuZnJhY3Q9ZnVuY3Rpb24odCl7aWYodC5sZW5ndGgpe2Zvcih2YXIgZT1pKHQpLHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspZVtyXT10W3JdLWVbcl07cmV0dXJuIGV9cmV0dXJuIGkodC1pKHQpKX07dmFyIG49bmV3IEZsb2F0MzJBcnJheSgxKTtmdW5jdGlvbiBpKHQpe2lmKHQubGVuZ3RoKXtpZih0IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KXJldHVybiB0O3ZhciBlPW5ldyBGbG9hdDMyQXJyYXkodCk7cmV0dXJuIGUuc2V0KHQpLGV9cmV0dXJuIG5bMF09dCxuWzBdfX0se31dLDUyNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJwYXJzZS11bml0XCIpO2UuZXhwb3J0cz1vO3ZhciBpPTk2O2Z1bmN0aW9uIGEodCxlKXt2YXIgcj1uKGdldENvbXB1dGVkU3R5bGUodCkuZ2V0UHJvcGVydHlWYWx1ZShlKSk7cmV0dXJuIHJbMF0qbyhyWzFdLHQpfWZ1bmN0aW9uIG8odCxlKXtzd2l0Y2goZT1lfHxkb2N1bWVudC5ib2R5LHQ9KHR8fFwicHhcIikudHJpbSgpLnRvTG93ZXJDYXNlKCksZSE9PXdpbmRvdyYmZSE9PWRvY3VtZW50fHwoZT1kb2N1bWVudC5ib2R5KSx0KXtjYXNlXCIlXCI6cmV0dXJuIGUuY2xpZW50SGVpZ2h0LzEwMDtjYXNlXCJjaFwiOmNhc2VcImV4XCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtyLnN0eWxlW1wiZm9udC1zaXplXCJdPVwiMTI4XCIrdCxlLmFwcGVuZENoaWxkKHIpO3ZhciBuPWEocixcImZvbnQtc2l6ZVwiKS8xMjg7cmV0dXJuIGUucmVtb3ZlQ2hpbGQociksbn0odCxlKTtjYXNlXCJlbVwiOnJldHVybiBhKGUsXCJmb250LXNpemVcIik7Y2FzZVwicmVtXCI6cmV0dXJuIGEoZG9jdW1lbnQuYm9keSxcImZvbnQtc2l6ZVwiKTtjYXNlXCJ2d1wiOnJldHVybiB3aW5kb3cuaW5uZXJXaWR0aC8xMDA7Y2FzZVwidmhcIjpyZXR1cm4gd2luZG93LmlubmVySGVpZ2h0LzEwMDtjYXNlXCJ2bWluXCI6cmV0dXJuIE1hdGgubWluKHdpbmRvdy5pbm5lcldpZHRoLHdpbmRvdy5pbm5lckhlaWdodCkvMTAwO2Nhc2VcInZtYXhcIjpyZXR1cm4gTWF0aC5tYXgod2luZG93LmlubmVyV2lkdGgsd2luZG93LmlubmVySGVpZ2h0KS8xMDA7Y2FzZVwiaW5cIjpyZXR1cm4gaTtjYXNlXCJjbVwiOnJldHVybiBpLzIuNTQ7Y2FzZVwibW1cIjpyZXR1cm4gaS8yNS40O2Nhc2VcInB0XCI6cmV0dXJuIGkvNzI7Y2FzZVwicGNcIjpyZXR1cm4gaS82fXJldHVybiAxfX0se1wicGFyc2UtdW5pdFwiOjQ1NH1dLDUyNTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuO249dGhpcyxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjt2YXIgZT1mdW5jdGlvbih0KXtyZXR1cm4gdH0scj1mdW5jdGlvbih0KXtpZihudWxsPT0ocj10LnRyYW5zZm9ybSkpcmV0dXJuIGU7dmFyIHIsbixpLGE9ci5zY2FsZVswXSxvPXIuc2NhbGVbMV0scz1yLnRyYW5zbGF0ZVswXSxsPXIudHJhbnNsYXRlWzFdO3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBlfHwobj1pPTApLHRbMF09KG4rPXRbMF0pKmErcyx0WzFdPShpKz10WzFdKSpvK2wsdH19LG49ZnVuY3Rpb24odCl7dmFyIGU9dC5iYm94O2Z1bmN0aW9uIG4odCl7bFswXT10WzBdLGxbMV09dFsxXSxzKGwpLGxbMF08YyYmKGM9bFswXSksbFswXT5oJiYoaD1sWzBdKSxsWzFdPHUmJih1PWxbMV0pLGxbMV0+ZiYmKGY9bFsxXSl9ZnVuY3Rpb24gaSh0KXtzd2l0Y2godC50eXBlKXtjYXNlXCJHZW9tZXRyeUNvbGxlY3Rpb25cIjp0Lmdlb21ldHJpZXMuZm9yRWFjaChpKTticmVhaztjYXNlXCJQb2ludFwiOm4odC5jb29yZGluYXRlcyk7YnJlYWs7Y2FzZVwiTXVsdGlQb2ludFwiOnQuY29vcmRpbmF0ZXMuZm9yRWFjaChuKX19aWYoIWUpe3ZhciBhLG8scz1yKHQpLGw9bmV3IEFycmF5KDIpLGM9MS8wLHU9YyxoPS1jLGY9LWM7Zm9yKG8gaW4gdC5hcmNzLmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciBlPS0xLHI9dC5sZW5ndGg7KytlPHI7KWE9dFtlXSxsWzBdPWFbMF0sbFsxXT1hWzFdLHMobCxlKSxsWzBdPGMmJihjPWxbMF0pLGxbMF0+aCYmKGg9bFswXSksbFsxXTx1JiYodT1sWzFdKSxsWzFdPmYmJihmPWxbMV0pfSksdC5vYmplY3RzKWkodC5vYmplY3RzW29dKTtlPXQuYmJveD1bYyx1LGgsZl19cmV0dXJuIGV9LGk9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj10Lmxlbmd0aCxpPW4tZTtpPC0tbjspcj10W2ldLHRbaSsrXT10W25dLHRbbl09cn07ZnVuY3Rpb24gYSh0LGUpe3ZhciByPWUuaWQsbj1lLmJib3gsaT1udWxsPT1lLnByb3BlcnRpZXM/e306ZS5wcm9wZXJ0aWVzLGE9byh0LGUpO3JldHVybiBudWxsPT1yJiZudWxsPT1uP3t0eXBlOlwiRmVhdHVyZVwiLHByb3BlcnRpZXM6aSxnZW9tZXRyeTphfTpudWxsPT1uP3t0eXBlOlwiRmVhdHVyZVwiLGlkOnIscHJvcGVydGllczppLGdlb21ldHJ5OmF9Ont0eXBlOlwiRmVhdHVyZVwiLGlkOnIsYmJveDpuLHByb3BlcnRpZXM6aSxnZW9tZXRyeTphfX1mdW5jdGlvbiBvKHQsZSl7dmFyIG49cih0KSxhPXQuYXJjcztmdW5jdGlvbiBvKHQsZSl7ZS5sZW5ndGgmJmUucG9wKCk7Zm9yKHZhciByPWFbdDwwP350OnRdLG89MCxzPXIubGVuZ3RoO288czsrK28pZS5wdXNoKG4ocltvXS5zbGljZSgpLG8pKTt0PDAmJmkoZSxzKX1mdW5jdGlvbiBzKHQpe3JldHVybiBuKHQuc2xpY2UoKSl9ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilvKHRbcl0sZSk7cmV0dXJuIGUubGVuZ3RoPDImJmUucHVzaChlWzBdLnNsaWNlKCkpLGV9ZnVuY3Rpb24gYyh0KXtmb3IodmFyIGU9bCh0KTtlLmxlbmd0aDw0OyllLnB1c2goZVswXS5zbGljZSgpKTtyZXR1cm4gZX1mdW5jdGlvbiB1KHQpe3JldHVybiB0Lm1hcChjKX1yZXR1cm4gZnVuY3Rpb24gdChlKXt2YXIgcixuPWUudHlwZTtzd2l0Y2gobil7Y2FzZVwiR2VvbWV0cnlDb2xsZWN0aW9uXCI6cmV0dXJue3R5cGU6bixnZW9tZXRyaWVzOmUuZ2VvbWV0cmllcy5tYXAodCl9O2Nhc2VcIlBvaW50XCI6cj1zKGUuY29vcmRpbmF0ZXMpO2JyZWFrO2Nhc2VcIk11bHRpUG9pbnRcIjpyPWUuY29vcmRpbmF0ZXMubWFwKHMpO2JyZWFrO2Nhc2VcIkxpbmVTdHJpbmdcIjpyPWwoZS5hcmNzKTticmVhaztjYXNlXCJNdWx0aUxpbmVTdHJpbmdcIjpyPWUuYXJjcy5tYXAobCk7YnJlYWs7Y2FzZVwiUG9seWdvblwiOnI9dShlLmFyY3MpO2JyZWFrO2Nhc2VcIk11bHRpUG9seWdvblwiOnI9ZS5hcmNzLm1hcCh1KTticmVhaztkZWZhdWx0OnJldHVybiBudWxsfXJldHVybnt0eXBlOm4sY29vcmRpbmF0ZXM6cn19KGUpfXZhciBzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e30sbj17fSxpPXt9LGE9W10sbz0tMTtmdW5jdGlvbiBzKHQsZSl7Zm9yKHZhciBuIGluIHQpe3ZhciBpPXRbbl07ZGVsZXRlIGVbaS5zdGFydF0sZGVsZXRlIGkuc3RhcnQsZGVsZXRlIGkuZW5kLGkuZm9yRWFjaChmdW5jdGlvbih0KXtyW3Q8MD9+dDp0XT0xfSksYS5wdXNoKGkpfX1yZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKHIsbil7dmFyIGksYT10LmFyY3NbcjwwP35yOnJdO2EubGVuZ3RoPDMmJiFhWzFdWzBdJiYhYVsxXVsxXSYmKGk9ZVsrK29dLGVbb109cixlW25dPWkpfSksZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByLGEsbz1mdW5jdGlvbihlKXt2YXIgcixuPXQuYXJjc1tlPDA/fmU6ZV0saT1uWzBdO3QudHJhbnNmb3JtPyhyPVswLDBdLG4uZm9yRWFjaChmdW5jdGlvbih0KXtyWzBdKz10WzBdLHJbMV0rPXRbMV19KSk6cj1uW24ubGVuZ3RoLTFdO3JldHVybiBlPDA/W3IsaV06W2kscl19KGUpLHM9b1swXSxsPW9bMV07aWYocj1pW3NdKWlmKGRlbGV0ZSBpW3IuZW5kXSxyLnB1c2goZSksci5lbmQ9bCxhPW5bbF0pe2RlbGV0ZSBuW2Euc3RhcnRdO3ZhciBjPWE9PT1yP3I6ci5jb25jYXQoYSk7bltjLnN0YXJ0PXIuc3RhcnRdPWlbYy5lbmQ9YS5lbmRdPWN9ZWxzZSBuW3Iuc3RhcnRdPWlbci5lbmRdPXI7ZWxzZSBpZihyPW5bbF0paWYoZGVsZXRlIG5bci5zdGFydF0sci51bnNoaWZ0KGUpLHIuc3RhcnQ9cyxhPWlbc10pe2RlbGV0ZSBpW2EuZW5kXTt2YXIgdT1hPT09cj9yOmEuY29uY2F0KHIpO25bdS5zdGFydD1hLnN0YXJ0XT1pW3UuZW5kPXIuZW5kXT11fWVsc2UgbltyLnN0YXJ0XT1pW3IuZW5kXT1yO2Vsc2Ugblsocj1bZV0pLnN0YXJ0PXNdPWlbci5lbmQ9bF09cn0pLHMoaSxuKSxzKG4saSksZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JbdDwwP350OnRdfHxhLnB1c2goW3RdKX0pLGF9O2Z1bmN0aW9uIGwodCxlLHIpe3ZhciBuLGksYTtpZihhcmd1bWVudHMubGVuZ3RoPjEpbj1mdW5jdGlvbih0LGUscil7dmFyIG4saT1bXSxhPVtdO2Z1bmN0aW9uIG8odCl7dmFyIGU9dDwwP350OnQ7KGFbZV18fChhW2VdPVtdKSkucHVzaCh7aTp0LGc6bn0pfWZ1bmN0aW9uIHModCl7dC5mb3JFYWNoKG8pfWZ1bmN0aW9uIGwodCl7dC5mb3JFYWNoKHMpfXJldHVybiBmdW5jdGlvbiB0KGUpe3N3aXRjaChuPWUsZS50eXBlKXtjYXNlXCJHZW9tZXRyeUNvbGxlY3Rpb25cIjplLmdlb21ldHJpZXMuZm9yRWFjaCh0KTticmVhaztjYXNlXCJMaW5lU3RyaW5nXCI6cyhlLmFyY3MpO2JyZWFrO2Nhc2VcIk11bHRpTGluZVN0cmluZ1wiOmNhc2VcIlBvbHlnb25cIjpsKGUuYXJjcyk7YnJlYWs7Y2FzZVwiTXVsdGlQb2x5Z29uXCI6ZS5hcmNzLmZvckVhY2gobCl9fShlKSxhLmZvckVhY2gobnVsbD09cj9mdW5jdGlvbih0KXtpLnB1c2godFswXS5pKX06ZnVuY3Rpb24odCl7cih0WzBdLmcsdFt0Lmxlbmd0aC0xXS5nKSYmaS5wdXNoKHRbMF0uaSl9KSxpfSgwLGUscik7ZWxzZSBmb3IoaT0wLG49bmV3IEFycmF5KGE9dC5hcmNzLmxlbmd0aCk7aTxhOysraSluW2ldPWk7cmV0dXJue3R5cGU6XCJNdWx0aUxpbmVTdHJpbmdcIixhcmNzOnModCxuKX19ZnVuY3Rpb24gYyh0LGUpe3ZhciByPXt9LG49W10saT1bXTtmdW5jdGlvbiBhKHQpe3QuZm9yRWFjaChmdW5jdGlvbihlKXtlLmZvckVhY2goZnVuY3Rpb24oZSl7KHJbZT1lPDA/fmU6ZV18fChyW2VdPVtdKSkucHVzaCh0KX0pfSksbi5wdXNoKHQpfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPS0xLG49dC5sZW5ndGgsaT10W24tMV0sYT0wOysrcjxuOyllPWksaT10W3JdLGErPWVbMF0qaVsxXS1lWzFdKmlbMF07cmV0dXJuIE1hdGguYWJzKGEpfShvKHQse3R5cGU6XCJQb2x5Z29uXCIsYXJjczpbZV19KS5jb29yZGluYXRlc1swXSl9cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbiB0KGUpe3N3aXRjaChlLnR5cGUpe2Nhc2VcIkdlb21ldHJ5Q29sbGVjdGlvblwiOmUuZ2VvbWV0cmllcy5mb3JFYWNoKHQpO2JyZWFrO2Nhc2VcIlBvbHlnb25cIjphKGUuYXJjcyk7YnJlYWs7Y2FzZVwiTXVsdGlQb2x5Z29uXCI6ZS5hcmNzLmZvckVhY2goYSl9fSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCF0Ll8pe3ZhciBlPVtdLG49W3RdO2Zvcih0Ll89MSxpLnB1c2goZSk7dD1uLnBvcCgpOyllLnB1c2godCksdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaChmdW5jdGlvbih0KXtyW3Q8MD9+dDp0XS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuX3x8KHQuXz0xLG4ucHVzaCh0KSl9KX0pfSl9fSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2RlbGV0ZSB0Ll99KSx7dHlwZTpcIk11bHRpUG9seWdvblwiLGFyY3M6aS5tYXAoZnVuY3Rpb24oZSl7dmFyIG4saT1bXTtpZihlLmZvckVhY2goZnVuY3Rpb24odCl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaChmdW5jdGlvbih0KXtyW3Q8MD9+dDp0XS5sZW5ndGg8MiYmaS5wdXNoKHQpfSl9KX0pLChuPShpPXModCxpKSkubGVuZ3RoKT4xKWZvcih2YXIgYSxvLGM9MSx1PWwoaVswXSk7YzxuOysrYykoYT1sKGlbY10pKT51JiYobz1pWzBdLGlbMF09aVtjXSxpW2NdPW8sdT1hKTtyZXR1cm4gaX0pfX12YXIgdT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuOyl7dmFyIGk9cituPj4+MTt0W2ldPGU/cj1pKzE6bj1pfXJldHVybiByfTt0LmJib3g9bix0LmZlYXR1cmU9ZnVuY3Rpb24odCxlKXtyZXR1cm5cIkdlb21ldHJ5Q29sbGVjdGlvblwiPT09ZS50eXBlP3t0eXBlOlwiRmVhdHVyZUNvbGxlY3Rpb25cIixmZWF0dXJlczplLmdlb21ldHJpZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBhKHQsZSl9KX06YSh0LGUpfSx0Lm1lc2g9ZnVuY3Rpb24odCl7cmV0dXJuIG8odCxsLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LHQubWVzaEFyY3M9bCx0Lm1lcmdlPWZ1bmN0aW9uKHQpe3JldHVybiBvKHQsYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSx0Lm1lcmdlQXJjcz1jLHQubmVpZ2hib3JzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LHI9dC5tYXAoZnVuY3Rpb24oKXtyZXR1cm5bXX0pO2Z1bmN0aW9uIG4odCxyKXt0LmZvckVhY2goZnVuY3Rpb24odCl7dDwwJiYodD1+dCk7dmFyIG49ZVt0XTtuP24ucHVzaChyKTplW3RdPVtyXX0pfWZ1bmN0aW9uIGkodCxlKXt0LmZvckVhY2goZnVuY3Rpb24odCl7bih0LGUpfSl9dmFyIGE9e0xpbmVTdHJpbmc6bixNdWx0aUxpbmVTdHJpbmc6aSxQb2x5Z29uOmksTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2kodCxlKX0pfX07Zm9yKHZhciBvIGluIHQuZm9yRWFjaChmdW5jdGlvbiB0KGUscil7XCJHZW9tZXRyeUNvbGxlY3Rpb25cIj09PWUudHlwZT9lLmdlb21ldHJpZXMuZm9yRWFjaChmdW5jdGlvbihlKXt0KGUscil9KTplLnR5cGUgaW4gYSYmYVtlLnR5cGVdKGUuYXJjcyxyKX0pLGUpZm9yKHZhciBzPWVbb10sbD1zLmxlbmd0aCxjPTA7YzxsOysrYylmb3IodmFyIGg9YysxO2g8bDsrK2gpe3ZhciBmLHA9c1tjXSxkPXNbaF07KGY9cltwXSlbbz11KGYsZCldIT09ZCYmZi5zcGxpY2UobywwLGQpLChmPXJbZF0pW289dShmLHApXSE9PXAmJmYuc3BsaWNlKG8sMCxwKX1yZXR1cm4gcn0sdC5xdWFudGl6ZT1mdW5jdGlvbih0LGUpe2lmKCEoKGU9TWF0aC5mbG9vcihlKSk+PTIpKXRocm93IG5ldyBFcnJvcihcIm4gbXVzdCBiZSBcXHUyMjY1MlwiKTtpZih0LnRyYW5zZm9ybSl0aHJvdyBuZXcgRXJyb3IoXCJhbHJlYWR5IHF1YW50aXplZFwiKTt2YXIgcixpPW4odCksYT1pWzBdLG89KGlbMl0tYSkvKGUtMSl8fDEscz1pWzFdLGw9KGlbM10tcykvKGUtMSl8fDE7ZnVuY3Rpb24gYyh0KXt0WzBdPU1hdGgucm91bmQoKHRbMF0tYSkvbyksdFsxXT1NYXRoLnJvdW5kKCh0WzFdLXMpL2wpfWZ1bmN0aW9uIHUodCl7c3dpdGNoKHQudHlwZSl7Y2FzZVwiR2VvbWV0cnlDb2xsZWN0aW9uXCI6dC5nZW9tZXRyaWVzLmZvckVhY2godSk7YnJlYWs7Y2FzZVwiUG9pbnRcIjpjKHQuY29vcmRpbmF0ZXMpO2JyZWFrO2Nhc2VcIk11bHRpUG9pbnRcIjp0LmNvb3JkaW5hdGVzLmZvckVhY2goYyl9fWZvcihyIGluIHQuYXJjcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saT0xLGM9MSx1PXQubGVuZ3RoLGg9dFswXSxmPWhbMF09TWF0aC5yb3VuZCgoaFswXS1hKS9vKSxwPWhbMV09TWF0aC5yb3VuZCgoaFsxXS1zKS9sKTtpPHU7KytpKWg9dFtpXSxyPU1hdGgucm91bmQoKGhbMF0tYSkvbyksbj1NYXRoLnJvdW5kKChoWzFdLXMpL2wpLHI9PT1mJiZuPT09cHx8KChlPXRbYysrXSlbMF09ci1mLGY9cixlWzFdPW4tcCxwPW4pO2M8MiYmKChlPXRbYysrXSlbMF09MCxlWzFdPTApLHQubGVuZ3RoPWN9KSx0Lm9iamVjdHMpdSh0Lm9iamVjdHNbcl0pO3JldHVybiB0LnRyYW5zZm9ybT17c2NhbGU6W28sbF0sdHJhbnNsYXRlOlthLHNdfSx0fSx0LnRyYW5zZm9ybT1yLHQudW50cmFuc2Zvcm09ZnVuY3Rpb24odCl7aWYobnVsbD09KHI9dC50cmFuc2Zvcm0pKXJldHVybiBlO3ZhciByLG4saSxhPXIuc2NhbGVbMF0sbz1yLnNjYWxlWzFdLHM9ci50cmFuc2xhdGVbMF0sbD1yLnRyYW5zbGF0ZVsxXTtyZXR1cm4gZnVuY3Rpb24odCxlKXtlfHwobj1pPTApO3ZhciByPU1hdGgucm91bmQoKHRbMF0tcykvYSksYz1NYXRoLnJvdW5kKCh0WzFdLWwpL28pO3JldHVybiB0WzBdPXItbixuPXIsdFsxXT1jLWksaT1jLHR9fSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0oXCJvYmplY3RcIj09dHlwZW9mIHImJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBlP3I6bi50b3BvanNvbj1uLnRvcG9qc29ufHx7fSl9LHt9XSw1MjY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYodDwwKXJldHVybltdO2lmKDA9PT10KXJldHVybltbMF1dO2Zvcih2YXIgZT0wfE1hdGgucm91bmQoYSh0KzEpKSxyPVtdLG89MDtvPGU7KytvKXtmb3IodmFyIHM9bi51bnJhbmsodCxvKSxsPVswXSxjPTAsdT0wO3U8cy5sZW5ndGg7Kyt1KWMrPTE8PHNbdV0sbC5wdXNoKGMpO2kocyk8MSYmKGxbMF09YyxsW3RdPTApLHIucHVzaChsKX1yZXR1cm4gcn07dmFyIG49dChcInBlcm11dGF0aW9uLXJhbmtcIiksaT10KFwicGVybXV0YXRpb24tcGFyaXR5XCIpLGE9dChcImdhbW1hXCIpfSx7Z2FtbWE6MjI4LFwicGVybXV0YXRpb24tcGFyaXR5XCI6NDU2LFwicGVybXV0YXRpb24tcmFua1wiOjQ1N31dLDUyNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuY2VudGVyfHxbMCwwLDBdLHI9dC51cHx8WzAsMSwwXSxuPXQucmlnaHR8fGgociksaT10LnJhZGl1c3x8MSxhPXQudGhldGF8fDAsdT10LnBoaXx8MDtpZihlPVtdLnNsaWNlLmNhbGwoZSwwLDMpLHI9W10uc2xpY2UuY2FsbChyLDAsMykscyhyLHIpLG49W10uc2xpY2UuY2FsbChuLDAsMykscyhuLG4pLFwiZXllXCJpbiB0KXt2YXIgcD10LmV5ZSxkPVtwWzBdLWVbMF0scFsxXS1lWzFdLHBbMl0tZVsyXV07byhuLGQsciksYyhuWzBdLG5bMV0sblsyXSk8MWUtNj9uPWgocik6cyhuLG4pLGk9YyhkWzBdLGRbMV0sZFsyXSk7dmFyIGc9bChyLGQpL2ksdj1sKG4sZCkvaTt1PU1hdGguYWNvcyhnKSxhPU1hdGguYWNvcyh2KX1yZXR1cm4gaT1NYXRoLmxvZyhpKSxuZXcgZih0Lnpvb21NaW4sdC56b29tTWF4LGUscixuLGksYSx1KX07dmFyIG49dChcImZpbHRlcmVkLXZlY3RvclwiKSxpPXQoXCJnbC1tYXQ0L2ludmVydFwiKSxhPXQoXCJnbC1tYXQ0L3JvdGF0ZVwiKSxvPXQoXCJnbC12ZWMzL2Nyb3NzXCIpLHM9dChcImdsLXZlYzMvbm9ybWFsaXplXCIpLGw9dChcImdsLXZlYzMvZG90XCIpO2Z1bmN0aW9uIGModCxlLHIpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codCwyKStNYXRoLnBvdyhlLDIpK01hdGgucG93KHIsMikpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIE1hdGgubWluKDEsTWF0aC5tYXgoLTEsdCkpfWZ1bmN0aW9uIGgodCl7dmFyIGU9TWF0aC5hYnModFswXSkscj1NYXRoLmFicyh0WzFdKSxuPU1hdGguYWJzKHRbMl0pLGk9WzAsMCwwXTtlPk1hdGgubWF4KHIsbik/aVsyXT0xOnI+TWF0aC5tYXgoZSxuKT9pWzBdPTE6aVsxXT0xO2Zvcih2YXIgYT0wLG89MCxsPTA7bDwzOysrbClhKz10W2xdKnRbbF0sbys9aVtsXSp0W2xdO2ZvcihsPTA7bDwzOysrbClpW2xdLT1vL2EqdFtsXTtyZXR1cm4gcyhpLGkpLGl9ZnVuY3Rpb24gZih0LGUscixpLGEsbyxzLGwpe3RoaXMuY2VudGVyPW4ociksdGhpcy51cD1uKGkpLHRoaXMucmlnaHQ9bihhKSx0aGlzLnJhZGl1cz1uKFtvXSksdGhpcy5hbmdsZT1uKFtzLGxdKSx0aGlzLmFuZ2xlLmJvdW5kcz1bWy0xLzAsLU1hdGguUEkvMl0sWzEvMCxNYXRoLlBJLzJdXSx0aGlzLnNldERpc3RhbmNlTGltaXRzKHQsZSksdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLmNlbnRlci5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVXA9dGhpcy51cC5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkUmlnaHQ9dGhpcy5yaWdodC5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkUmFkaXVzPXRoaXMucmFkaXVzLmN1cnZlKDApLHRoaXMuY29tcHV0ZWRBbmdsZT10aGlzLmFuZ2xlLmN1cnZlKDApLHRoaXMuY29tcHV0ZWRUb3dhcmQ9WzAsMCwwXSx0aGlzLmNvbXB1dGVkRXllPVswLDAsMF0sdGhpcy5jb21wdXRlZE1hdHJpeD1uZXcgQXJyYXkoMTYpO2Zvcih2YXIgYz0wO2M8MTY7KytjKXRoaXMuY29tcHV0ZWRNYXRyaXhbY109LjU7dGhpcy5yZWNhbGNNYXRyaXgoMCl9dmFyIHA9Zi5wcm90b3R5cGU7cC5zZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0LGUpe3Q9dD4wP01hdGgubG9nKHQpOi0xLzAsZT1lPjA/TWF0aC5sb2coZSk6MS8wLGU9TWF0aC5tYXgoZSx0KSx0aGlzLnJhZGl1cy5ib3VuZHNbMF1bMF09dCx0aGlzLnJhZGl1cy5ib3VuZHNbMV1bMF09ZX0scC5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnJhZGl1cy5ib3VuZHNbMF07cmV0dXJuIHQ/KHRbMF09TWF0aC5leHAoZVswXVswXSksdFsxXT1NYXRoLmV4cChlWzFdWzBdKSx0KTpbTWF0aC5leHAoZVswXVswXSksTWF0aC5leHAoZVsxXVswXSldfSxwLnJlY2FsY01hdHJpeD1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5jdXJ2ZSh0KSx0aGlzLnVwLmN1cnZlKHQpLHRoaXMucmlnaHQuY3VydmUodCksdGhpcy5yYWRpdXMuY3VydmUodCksdGhpcy5hbmdsZS5jdXJ2ZSh0KTtmb3IodmFyIGU9dGhpcy5jb21wdXRlZFVwLHI9dGhpcy5jb21wdXRlZFJpZ2h0LG49MCxpPTAsYT0wO2E8MzsrK2EpaSs9ZVthXSpyW2FdLG4rPWVbYV0qZVthXTt2YXIgbD1NYXRoLnNxcnQobiksdT0wO2ZvcihhPTA7YTwzOysrYSlyW2FdLT1lW2FdKmkvbix1Kz1yW2FdKnJbYV0sZVthXS89bDt2YXIgaD1NYXRoLnNxcnQodSk7Zm9yKGE9MDthPDM7KythKXJbYV0vPWg7dmFyIGY9dGhpcy5jb21wdXRlZFRvd2FyZDtvKGYsZSxyKSxzKGYsZik7dmFyIHA9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSksZD10aGlzLmNvbXB1dGVkQW5nbGVbMF0sZz10aGlzLmNvbXB1dGVkQW5nbGVbMV0sdj1NYXRoLmNvcyhkKSxtPU1hdGguc2luKGQpLHk9TWF0aC5jb3MoZykseD1NYXRoLnNpbihnKSxiPXRoaXMuY29tcHV0ZWRDZW50ZXIsXz12Knksdz1tKnksaz14LEE9LXYqeCxUPS1tKngsTT15LFM9dGhpcy5jb21wdXRlZEV5ZSxFPXRoaXMuY29tcHV0ZWRNYXRyaXg7Zm9yKGE9MDthPDM7KythKXt2YXIgQz1fKnJbYV0rdypmW2FdK2sqZVthXTtFWzQqYSsxXT1BKnJbYV0rVCpmW2FdK00qZVthXSxFWzQqYSsyXT1DLEVbNCphKzNdPTB9dmFyIEw9RVsxXSx6PUVbNV0sTz1FWzldLEk9RVsyXSxEPUVbNl0sUD1FWzEwXSxSPXoqUC1PKkQsRj1PKkktTCpQLEI9TCpELXoqSSxOPWMoUixGLEIpO1IvPU4sRi89TixCLz1OLEVbMF09UixFWzRdPUYsRVs4XT1CO2ZvcihhPTA7YTwzOysrYSlTW2FdPWJbYV0rRVsyKzQqYV0qcDtmb3IoYT0wO2E8MzsrK2Epe3U9MDtmb3IodmFyIGo9MDtqPDM7KytqKXUrPUVbYSs0KmpdKlNbal07RVsxMithXT0tdX1FWzE1XT0xfSxwLmdldE1hdHJpeD1mdW5jdGlvbih0LGUpe3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciByPXRoaXMuY29tcHV0ZWRNYXRyaXg7aWYoZSl7Zm9yKHZhciBuPTA7bjwxNjsrK24pZVtuXT1yW25dO3JldHVybiBlfXJldHVybiByfTt2YXIgZD1bMCwwLDBdO3Aucm90YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHRoaXMuYW5nbGUubW92ZSh0LGUsciksbil7dGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZE1hdHJpeDtkWzBdPWlbMl0sZFsxXT1pWzZdLGRbMl09aVsxMF07Zm9yKHZhciBvPXRoaXMuY29tcHV0ZWRVcCxzPXRoaXMuY29tcHV0ZWRSaWdodCxsPXRoaXMuY29tcHV0ZWRUb3dhcmQsYz0wO2M8MzsrK2MpaVs0KmNdPW9bY10saVs0KmMrMV09c1tjXSxpWzQqYysyXT1sW2NdO2EoaSxpLG4sZCk7Zm9yKGM9MDtjPDM7KytjKW9bY109aVs0KmNdLHNbY109aVs0KmMrMV07dGhpcy51cC5zZXQodCxvWzBdLG9bMV0sb1syXSksdGhpcy5yaWdodC5zZXQodCxzWzBdLHNbMV0sc1syXSl9fSxwLnBhbj1mdW5jdGlvbih0LGUscixuKXtlPWV8fDAscj1yfHwwLG49bnx8MCx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgaT10aGlzLmNvbXB1dGVkTWF0cml4LGE9KE1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pLGlbMV0pLG89aVs1XSxzPWlbOV0sbD1jKGEsbyxzKTthLz1sLG8vPWwscy89bDt2YXIgdT1pWzBdLGg9aVs0XSxmPWlbOF0scD11KmEraCpvK2YqcyxkPWModS09YSpwLGgtPW8qcCxmLT1zKnApLGc9KHUvPWQpKmUrYSpyLHY9KGgvPWQpKmUrbypyLG09KGYvPWQpKmUrcypyO3RoaXMuY2VudGVyLm1vdmUodCxnLHYsbSk7dmFyIHk9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7eT1NYXRoLm1heCgxZS00LHkrbiksdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coeSkpfSxwLnRyYW5zbGF0ZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLmNlbnRlci5tb3ZlKHQsZXx8MCxyfHwwLG58fDApfSxwLnNldE1hdHJpeD1mdW5jdGlvbih0LGUscixuKXt2YXIgYT0xO1wibnVtYmVyXCI9PXR5cGVvZiByJiYoYT0wfHIpLChhPDB8fGE+MykmJihhPTEpO3ZhciBvPShhKzIpJTM7ZXx8KHRoaXMucmVjYWxjTWF0cml4KHQpLGU9dGhpcy5jb21wdXRlZE1hdHJpeCk7dmFyIHM9ZVthXSxsPWVbYSs0XSxoPWVbYSs4XTtpZihuKXt2YXIgZj1NYXRoLmFicyhzKSxwPU1hdGguYWJzKGwpLGQ9TWF0aC5hYnMoaCksZz1NYXRoLm1heChmLHAsZCk7Zj09PWc/KHM9czwwPy0xOjEsbD1oPTApOmQ9PT1nPyhoPWg8MD8tMToxLHM9bD0wKToobD1sPDA/LTE6MSxzPWg9MCl9ZWxzZXt2YXIgdj1jKHMsbCxoKTtzLz12LGwvPXYsaC89dn12YXIgbSx5LHg9ZVtvXSxiPWVbbys0XSxfPWVbbys4XSx3PXgqcytiKmwrXypoLGs9Yyh4LT1zKncsYi09bCp3LF8tPWgqdyksQT1sKihfLz1rKS1oKihiLz1rKSxUPWgqKHgvPWspLXMqXyxNPXMqYi1sKngsUz1jKEEsVCxNKTtpZihBLz1TLFQvPVMsTS89Uyx0aGlzLmNlbnRlci5qdW1wKHQsSCxHLFkpLHRoaXMucmFkaXVzLmlkbGUodCksdGhpcy51cC5qdW1wKHQscyxsLGgpLHRoaXMucmlnaHQuanVtcCh0LHgsYixfKSwyPT09YSl7dmFyIEU9ZVsxXSxDPWVbNV0sTD1lWzldLHo9RSp4K0MqYitMKl8sTz1FKkErQypUK0wqTTttPVI8MD8tTWF0aC5QSS8yOk1hdGguUEkvMix5PU1hdGguYXRhbjIoTyx6KX1lbHNle3ZhciBJPWVbMl0sRD1lWzZdLFA9ZVsxMF0sUj1JKnMrRCpsK1AqaCxGPUkqeCtEKmIrUCpfLEI9SSpBK0QqVCtQKk07bT1NYXRoLmFzaW4odShSKSkseT1NYXRoLmF0YW4yKEIsRil9dGhpcy5hbmdsZS5qdW1wKHQseSxtKSx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgTj1lWzJdLGo9ZVs2XSxWPWVbMTBdLFU9dGhpcy5jb21wdXRlZE1hdHJpeDtpKFUsZSk7dmFyIHE9VVsxNV0sSD1VWzEyXS9xLEc9VVsxM10vcSxZPVVbMTRdL3EsVz1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKTt0aGlzLmNlbnRlci5qdW1wKHQsSC1OKlcsRy1qKlcsWS1WKlcpfSxwLmxhc3RUPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMuY2VudGVyLmxhc3RUKCksdGhpcy51cC5sYXN0VCgpLHRoaXMucmlnaHQubGFzdFQoKSx0aGlzLnJhZGl1cy5sYXN0VCgpLHRoaXMuYW5nbGUubGFzdFQoKSl9LHAuaWRsZT1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5pZGxlKHQpLHRoaXMudXAuaWRsZSh0KSx0aGlzLnJpZ2h0LmlkbGUodCksdGhpcy5yYWRpdXMuaWRsZSh0KSx0aGlzLmFuZ2xlLmlkbGUodCl9LHAuZmx1c2g9ZnVuY3Rpb24odCl7dGhpcy5jZW50ZXIuZmx1c2godCksdGhpcy51cC5mbHVzaCh0KSx0aGlzLnJpZ2h0LmZsdXNoKHQpLHRoaXMucmFkaXVzLmZsdXNoKHQpLHRoaXMuYW5nbGUuZmx1c2godCl9LHAuc2V0RGlzdGFuY2U9ZnVuY3Rpb24odCxlKXtlPjAmJnRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKGUpKX0scC5sb29rQXQ9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5yZWNhbGNNYXRyaXgodCksZT1lfHx0aGlzLmNvbXB1dGVkRXllLHI9cnx8dGhpcy5jb21wdXRlZENlbnRlcjt2YXIgaT0obj1ufHx0aGlzLmNvbXB1dGVkVXApWzBdLGE9blsxXSxvPW5bMl0scz1jKGksYSxvKTtpZighKHM8MWUtNikpe2kvPXMsYS89cyxvLz1zO3ZhciBsPWVbMF0tclswXSxoPWVbMV0tclsxXSxmPWVbMl0tclsyXSxwPWMobCxoLGYpO2lmKCEocDwxZS02KSl7bC89cCxoLz1wLGYvPXA7dmFyIGQ9dGhpcy5jb21wdXRlZFJpZ2h0LGc9ZFswXSx2PWRbMV0sbT1kWzJdLHk9aSpnK2EqditvKm0seD1jKGctPXkqaSx2LT15KmEsbS09eSpvKTtpZighKHg8LjAxJiYoeD1jKGc9YSpmLW8qaCx2PW8qbC1pKmYsbT1pKmgtYSpsKSk8MWUtNikpe2cvPXgsdi89eCxtLz14LHRoaXMudXAuc2V0KHQsaSxhLG8pLHRoaXMucmlnaHQuc2V0KHQsZyx2LG0pLHRoaXMuY2VudGVyLnNldCh0LHJbMF0sclsxXSxyWzJdKSx0aGlzLnJhZGl1cy5zZXQodCxNYXRoLmxvZyhwKSk7dmFyIGI9YSptLW8qdixfPW8qZy1pKm0sdz1pKnYtYSpnLGs9YyhiLF8sdyksQT1pKmwrYSpoK28qZixUPWcqbCt2KmgrbSpmLE09KGIvPWspKmwrKF8vPWspKmgrKHcvPWspKmYsUz1NYXRoLmFzaW4odShBKSksRT1NYXRoLmF0YW4yKE0sVCksQz10aGlzLmFuZ2xlLl9zdGF0ZSxMPUNbQy5sZW5ndGgtMV0sej1DW0MubGVuZ3RoLTJdO0wlPTIqTWF0aC5QSTt2YXIgTz1NYXRoLmFicyhMKzIqTWF0aC5QSS1FKSxJPU1hdGguYWJzKEwtRSksRD1NYXRoLmFicyhMLTIqTWF0aC5QSS1FKTtPPEkmJihMKz0yKk1hdGguUEkpLEQ8SSYmKEwtPTIqTWF0aC5QSSksdGhpcy5hbmdsZS5qdW1wKHRoaXMuYW5nbGUubGFzdFQoKSxMLHopLHRoaXMuYW5nbGUuc2V0KHQsRSxTKX19fX19LHtcImZpbHRlcmVkLXZlY3RvclwiOjIyMyxcImdsLW1hdDQvaW52ZXJ0XCI6MjYyLFwiZ2wtbWF0NC9yb3RhdGVcIjoyNjcsXCJnbC12ZWMzL2Nyb3NzXCI6MzI3LFwiZ2wtdmVjMy9kb3RcIjozMzIsXCJnbC12ZWMzL25vcm1hbGl6ZVwiOjM0OX1dLDUyODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9dCplLGE9bip0LG89YS0oYS10KSxzPXQtbyxsPW4qZSxjPWwtKGwtZSksdT1lLWMsaD1zKnUtKGktbypjLXMqYy1vKnUpO2lmKHIpcmV0dXJuIHJbMF09aCxyWzFdPWkscjtyZXR1cm5baCxpXX07dmFyIG49KyhNYXRoLnBvdygyLDI3KSsxKX0se31dLDUyOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49dCtlLGk9bi10LGE9ZS1pLG89dC0obi1pKTtpZihyKXJldHVybiByWzBdPW8rYSxyWzFdPW4scjtyZXR1cm5bbythLG5dfX0se31dLDUzMDpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlLG4pe1widXNlIHN0cmljdFwiO3ZhciBpPXQoXCJiaXQtdHdpZGRsZVwiKSxhPXQoXCJkdXBcIik7ZS5fX1RZUEVEQVJSQVlfUE9PTHx8KGUuX19UWVBFREFSUkFZX1BPT0w9e1VJTlQ4OmEoWzMyLDBdKSxVSU5UMTY6YShbMzIsMF0pLFVJTlQzMjphKFszMiwwXSksSU5UODphKFszMiwwXSksSU5UMTY6YShbMzIsMF0pLElOVDMyOmEoWzMyLDBdKSxGTE9BVDphKFszMiwwXSksRE9VQkxFOmEoWzMyLDBdKSxEQVRBOmEoWzMyLDBdKSxVSU5UOEM6YShbMzIsMF0pLEJVRkZFUjphKFszMiwwXSl9KTt2YXIgbz1cInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDhDbGFtcGVkQXJyYXkscz1lLl9fVFlQRURBUlJBWV9QT09MO3MuVUlOVDhDfHwocy5VSU5UOEM9YShbMzIsMF0pKSxzLkJVRkZFUnx8KHMuQlVGRkVSPWEoWzMyLDBdKSk7dmFyIGw9cy5EQVRBLGM9cy5CVUZGRVI7ZnVuY3Rpb24gdSh0KXtpZih0KXt2YXIgZT10Lmxlbmd0aHx8dC5ieXRlTGVuZ3RoLHI9aS5sb2cyKGUpO2xbcl0ucHVzaCh0KX19ZnVuY3Rpb24gaCh0KXt0PWkubmV4dFBvdzIodCk7dmFyIGU9aS5sb2cyKHQpLHI9bFtlXTtyZXR1cm4gci5sZW5ndGg+MD9yLnBvcCgpOm5ldyBBcnJheUJ1ZmZlcih0KX1mdW5jdGlvbiBmKHQpe3JldHVybiBuZXcgVWludDhBcnJheShoKHQpLDAsdCl9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gbmV3IFVpbnQxNkFycmF5KGgoMip0KSwwLHQpfWZ1bmN0aW9uIGQodCl7cmV0dXJuIG5ldyBVaW50MzJBcnJheShoKDQqdCksMCx0KX1mdW5jdGlvbiBnKHQpe3JldHVybiBuZXcgSW50OEFycmF5KGgodCksMCx0KX1mdW5jdGlvbiB2KHQpe3JldHVybiBuZXcgSW50MTZBcnJheShoKDIqdCksMCx0KX1mdW5jdGlvbiBtKHQpe3JldHVybiBuZXcgSW50MzJBcnJheShoKDQqdCksMCx0KX1mdW5jdGlvbiB5KHQpe3JldHVybiBuZXcgRmxvYXQzMkFycmF5KGgoNCp0KSwwLHQpfWZ1bmN0aW9uIHgodCl7cmV0dXJuIG5ldyBGbG9hdDY0QXJyYXkoaCg4KnQpLDAsdCl9ZnVuY3Rpb24gYih0KXtyZXR1cm4gbz9uZXcgVWludDhDbGFtcGVkQXJyYXkoaCh0KSwwLHQpOmYodCl9ZnVuY3Rpb24gXyh0KXtyZXR1cm4gbmV3IERhdGFWaWV3KGgodCksMCx0KX1mdW5jdGlvbiB3KHQpe3Q9aS5uZXh0UG93Mih0KTt2YXIgZT1pLmxvZzIodCkscj1jW2VdO3JldHVybiByLmxlbmd0aD4wP3IucG9wKCk6bmV3IG4odCl9ci5mcmVlPWZ1bmN0aW9uKHQpe2lmKG4uaXNCdWZmZXIodCkpY1tpLmxvZzIodC5sZW5ndGgpXS5wdXNoKHQpO2Vsc2V7aWYoXCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpJiYodD10LmJ1ZmZlciksIXQpcmV0dXJuO3ZhciBlPXQubGVuZ3RofHx0LmJ5dGVMZW5ndGgscj0wfGkubG9nMihlKTtsW3JdLnB1c2godCl9fSxyLmZyZWVVaW50OD1yLmZyZWVVaW50MTY9ci5mcmVlVWludDMyPXIuZnJlZUludDg9ci5mcmVlSW50MTY9ci5mcmVlSW50MzI9ci5mcmVlRmxvYXQzMj1yLmZyZWVGbG9hdD1yLmZyZWVGbG9hdDY0PXIuZnJlZURvdWJsZT1yLmZyZWVVaW50OENsYW1wZWQ9ci5mcmVlRGF0YVZpZXc9ZnVuY3Rpb24odCl7dSh0LmJ1ZmZlcil9LHIuZnJlZUFycmF5QnVmZmVyPXUsci5mcmVlQnVmZmVyPWZ1bmN0aW9uKHQpe2NbaS5sb2cyKHQubGVuZ3RoKV0ucHVzaCh0KX0sci5tYWxsb2M9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT1lfHxcImFycmF5YnVmZmVyXCI9PT1lKXJldHVybiBoKHQpO3N3aXRjaChlKXtjYXNlXCJ1aW50OFwiOnJldHVybiBmKHQpO2Nhc2VcInVpbnQxNlwiOnJldHVybiBwKHQpO2Nhc2VcInVpbnQzMlwiOnJldHVybiBkKHQpO2Nhc2VcImludDhcIjpyZXR1cm4gZyh0KTtjYXNlXCJpbnQxNlwiOnJldHVybiB2KHQpO2Nhc2VcImludDMyXCI6cmV0dXJuIG0odCk7Y2FzZVwiZmxvYXRcIjpjYXNlXCJmbG9hdDMyXCI6cmV0dXJuIHkodCk7Y2FzZVwiZG91YmxlXCI6Y2FzZVwiZmxvYXQ2NFwiOnJldHVybiB4KHQpO2Nhc2VcInVpbnQ4X2NsYW1wZWRcIjpyZXR1cm4gYih0KTtjYXNlXCJidWZmZXJcIjpyZXR1cm4gdyh0KTtjYXNlXCJkYXRhXCI6Y2FzZVwiZGF0YXZpZXdcIjpyZXR1cm4gXyh0KTtkZWZhdWx0OnJldHVybiBudWxsfXJldHVybiBudWxsfSxyLm1hbGxvY0FycmF5QnVmZmVyPWgsci5tYWxsb2NVaW50OD1mLHIubWFsbG9jVWludDE2PXAsci5tYWxsb2NVaW50MzI9ZCxyLm1hbGxvY0ludDg9ZyxyLm1hbGxvY0ludDE2PXYsci5tYWxsb2NJbnQzMj1tLHIubWFsbG9jRmxvYXQzMj1yLm1hbGxvY0Zsb2F0PXksci5tYWxsb2NGbG9hdDY0PXIubWFsbG9jRG91YmxlPXgsci5tYWxsb2NVaW50OENsYW1wZWQ9YixyLm1hbGxvY0RhdGFWaWV3PV8sci5tYWxsb2NCdWZmZXI9dyxyLmNsZWFyQ2FjaGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PDMyOysrdClzLlVJTlQ4W3RdLmxlbmd0aD0wLHMuVUlOVDE2W3RdLmxlbmd0aD0wLHMuVUlOVDMyW3RdLmxlbmd0aD0wLHMuSU5UOFt0XS5sZW5ndGg9MCxzLklOVDE2W3RdLmxlbmd0aD0wLHMuSU5UMzJbdF0ubGVuZ3RoPTAscy5GTE9BVFt0XS5sZW5ndGg9MCxzLkRPVUJMRVt0XS5sZW5ndGg9MCxzLlVJTlQ4Q1t0XS5sZW5ndGg9MCxsW3RdLmxlbmd0aD0wLGNbdF0ubGVuZ3RoPTB9fSkuY2FsbCh0aGlzLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30sdChcImJ1ZmZlclwiKS5CdWZmZXIpfSx7XCJiaXQtdHdpZGRsZVwiOjgzLGJ1ZmZlcjo5NixkdXA6MTYyfV0sNTMxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXt0aGlzLnJvb3RzPW5ldyBBcnJheSh0KSx0aGlzLnJhbmtzPW5ldyBBcnJheSh0KTtmb3IodmFyIGU9MDtlPHQ7KytlKXRoaXMucm9vdHNbZV09ZSx0aGlzLnJhbmtzW2VdPTB9ZS5leHBvcnRzPW47dmFyIGk9bi5wcm90b3R5cGU7T2JqZWN0LmRlZmluZVByb3BlcnR5KGksXCJsZW5ndGhcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdHMubGVuZ3RofX0pLGkubWFrZVNldD1mdW5jdGlvbigpe3ZhciB0PXRoaXMucm9vdHMubGVuZ3RoO3JldHVybiB0aGlzLnJvb3RzLnB1c2godCksdGhpcy5yYW5rcy5wdXNoKDApLHR9LGkuZmluZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dCxyPXRoaXMucm9vdHM7clt0XSE9PXQ7KXQ9clt0XTtmb3IoO3JbZV0hPT10Oyl7dmFyIG49cltlXTtyW2VdPXQsZT1ufXJldHVybiB0fSxpLmxpbms9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmZpbmQodCksbj10aGlzLmZpbmQoZSk7aWYociE9PW4pe3ZhciBpPXRoaXMucmFua3MsYT10aGlzLnJvb3RzLG89aVtyXSxzPWlbbl07bzxzP2Fbcl09bjpzPG8/YVtuXT1yOihhW25dPXIsKytpW3JdKX19fSx7fV0sNTMyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMD09PXQubGVuZ3RoP3Q6ZT8ocnx8dC5zb3J0KGUpLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTEsbj10Lmxlbmd0aCxpPXRbMF0sYT10WzBdLG89MTtvPG47KytvKWlmKGE9aSxlKGk9dFtvXSxhKSl7aWYobz09PXIpe3IrKztjb250aW51ZX10W3IrK109aX1yZXR1cm4gdC5sZW5ndGg9cix0fSh0LGUpKToocnx8dC5zb3J0KCksZnVuY3Rpb24odCl7Zm9yKHZhciBlPTEscj10Lmxlbmd0aCxuPXRbMF0saT10WzBdLGE9MTthPHI7KythLGk9bilpZihpPW4sKG49dFthXSkhPT1pKXtpZihhPT09ZSl7ZSsrO2NvbnRpbnVlfXRbZSsrXT1ufXJldHVybiB0Lmxlbmd0aD1lLHR9KHQpKX19LHt9XSw1MzM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj0vW1xcJ1xcXCJdLztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/KG4udGVzdCh0LmNoYXJBdCgwKSkmJih0PXQuc3Vic3RyKDEpKSxuLnRlc3QodC5jaGFyQXQodC5sZW5ndGgtMSkpJiYodD10LnN1YnN0cigwLHQubGVuZ3RoLTEpKSx0KTpcIlwifX0se31dLDUzNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7QXJyYXkuaXNBcnJheShyKXx8KHI9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMikpO2Zvcih2YXIgbj0wLGk9ci5sZW5ndGg7bjxpO24rKyl7dmFyIGE9cltuXTtmb3IodmFyIG8gaW4gYSlpZigodm9pZCAwPT09ZVtvXXx8QXJyYXkuaXNBcnJheShlW29dKXx8dFtvXSE9PWVbb10pJiZvIGluIGUpe3ZhciBzO2lmKCEwPT09YVtvXSlzPWVbb107ZWxzZXtpZighMT09PWFbb10pY29udGludWU7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYVtvXSYmdm9pZCAwPT09KHM9YVtvXShlW29dLHQsZSkpKWNvbnRpbnVlfXRbb109c319cmV0dXJuIHR9fSx7fV0sNTM1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7XCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lfHwoZT17fSk7cmV0dXJuIG4odCxlLmNhbnZhc3x8aSxlLmNvbnRleHR8fGEsZSl9O3ZhciBuPXQoXCIuL2xpYi92dGV4dFwiKSxpPW51bGwsYT1udWxsO1widW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudCYmKChpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIikpLndpZHRoPTgxOTIsaS5oZWlnaHQ9MTAyNCxhPWkuZ2V0Q29udGV4dChcIjJkXCIpKX0se1wiLi9saWIvdnRleHRcIjo1MzZ9XSw1MzY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9NjQsbz0xLjI1LHM9e2JyZWFrbGluZXM6ITEsYm9sZHM6ITEsaXRhbGljczohMSxzdWJzY3JpcHRzOiExLHN1cGVyc2NyaXB0czohMX07biYmKG4uc2l6ZSYmbi5zaXplPjAmJihhPW4uc2l6ZSksbi5saW5lU3BhY2luZyYmbi5saW5lU3BhY2luZz4wJiYobz1uLmxpbmVTcGFjaW5nKSxuLnN0eWxldGFncyYmbi5zdHlsZXRhZ3MuYnJlYWtsaW5lcyYmKHMuYnJlYWtsaW5lcz0hIW4uc3R5bGV0YWdzLmJyZWFrbGluZXMpLG4uc3R5bGV0YWdzJiZuLnN0eWxldGFncy5ib2xkcyYmKHMuYm9sZHM9ISFuLnN0eWxldGFncy5ib2xkcyksbi5zdHlsZXRhZ3MmJm4uc3R5bGV0YWdzLml0YWxpY3MmJihzLml0YWxpY3M9ISFuLnN0eWxldGFncy5pdGFsaWNzKSxuLnN0eWxldGFncyYmbi5zdHlsZXRhZ3Muc3Vic2NyaXB0cyYmKHMuc3Vic2NyaXB0cz0hIW4uc3R5bGV0YWdzLnN1YnNjcmlwdHMpLG4uc3R5bGV0YWdzJiZuLnN0eWxldGFncy5zdXBlcnNjcmlwdHMmJihzLnN1cGVyc2NyaXB0cz0hIW4uc3R5bGV0YWdzLnN1cGVyc2NyaXB0cykpO3JldHVybiByLmZvbnQ9W24uZm9udFN0eWxlLG4uZm9udFZhcmlhbnQsbi5mb250V2VpZ2h0LGErXCJweFwiLG4uZm9udF0uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkuam9pbihcIiBcIiksci50ZXh0QWxpZ249XCJzdGFydFwiLHIudGV4dEJhc2VsaW5lPVwiYWxwaGFiZXRpY1wiLHIuZGlyZWN0aW9uPVwibHRyXCIsdyhmdW5jdGlvbih0LGUscixuLGEsbyl7cj1yLnJlcGxhY2UoL1xcbi9nLFwiXCIpLHI9ITA9PT1vLmJyZWFrbGluZXM/ci5yZXBsYWNlKC9cXDxiclxcPi9nLFwiXFxuXCIpOnIucmVwbGFjZSgvXFw8YnJcXD4vZyxcIiBcIik7dmFyIHM9XCJcIixsPVtdO2ZvcihrPTA7azxyLmxlbmd0aDsrK2spbFtrXT1zOyEwPT09by5ib2xkcyYmKGw9eChjLHUscixsKSksITA9PT1vLml0YWxpY3MmJihsPXgoaCxmLHIsbCkpLCEwPT09by5zdXBlcnNjcmlwdHMmJihsPXgocCxnLHIsbCkpLCEwPT09by5zdWJzY3JpcHRzJiYobD14KHYseSxyLGwpKTt2YXIgYj1bXSxfPVwiXCI7Zm9yKGs9MDtrPHIubGVuZ3RoOysrayludWxsIT09bFtrXSYmKF8rPXJba10sYi5wdXNoKGxba10pKTt2YXIgdyxrLEEsVCxNLFM9Xy5zcGxpdChcIlxcblwiKSxFPVMubGVuZ3RoLEM9TWF0aC5yb3VuZChhKm4pLEw9bix6PTIqbixPPTAsST1FKkMrejt0LmhlaWdodDxJJiYodC5oZWlnaHQ9SSksZS5maWxsU3R5bGU9XCIjMDAwXCIsZS5maWxsUmVjdCgwLDAsdC53aWR0aCx0LmhlaWdodCksZS5maWxsU3R5bGU9XCIjZmZmXCI7dmFyIEQ9MCxQPVwiXCI7ZnVuY3Rpb24gUigpe2lmKFwiXCIhPT1QKXt2YXIgdD1lLm1lYXN1cmVUZXh0KFApLndpZHRoO2UuZmlsbFRleHQoUCxMK0EseitUKSxBKz10fX1mdW5jdGlvbiBGKCl7cmV0dXJuIE1hdGgucm91bmQoTSkrXCJweCBcIn1mdW5jdGlvbiBCKHQscil7dmFyIG49XCJcIitlLmZvbnQ7aWYoITA9PT1vLnN1YnNjcmlwdHMpe3ZhciBpPXQuaW5kZXhPZihtKSxhPXIuaW5kZXhPZihtKSxzPWk+LTE/cGFyc2VJbnQodFsxK2ldKTowLGw9YT4tMT9wYXJzZUludChyWzErYV0pOjA7cyE9PWwmJihuPW4ucmVwbGFjZShGKCksXCI/cHggXCIpLE0qPU1hdGgucG93KC43NSxsLXMpLG49bi5yZXBsYWNlKFwiP3B4IFwiLEYoKSkpLFQrPS4yNSpDKihsLXMpfWlmKCEwPT09by5zdXBlcnNjcmlwdHMpe3ZhciBjPXQuaW5kZXhPZihkKSxoPXIuaW5kZXhPZihkKSxwPWM+LTE/cGFyc2VJbnQodFsxK2NdKTowLGc9aD4tMT9wYXJzZUludChyWzEraF0pOjA7cCE9PWcmJihuPW4ucmVwbGFjZShGKCksXCI/cHggXCIpLE0qPU1hdGgucG93KC43NSxnLXApLG49bi5yZXBsYWNlKFwiP3B4IFwiLEYoKSkpLFQtPS4yNSpDKihnLXApfWlmKCEwPT09by5ib2xkcyl7dmFyIHY9dC5pbmRleE9mKHUpPi0xLHk9ci5pbmRleE9mKHUpPi0xOyF2JiZ5JiYobj14P24ucmVwbGFjZShcIml0YWxpYyBcIixcIml0YWxpYyBib2xkIFwiKTpcImJvbGQgXCIrbiksdiYmIXkmJihuPW4ucmVwbGFjZShcImJvbGQgXCIsXCJcIikpfWlmKCEwPT09by5pdGFsaWNzKXt2YXIgeD10LmluZGV4T2YoZik+LTEsYj1yLmluZGV4T2YoZik+LTE7IXgmJmImJihuPVwiaXRhbGljIFwiK24pLHgmJiFiJiYobj1uLnJlcGxhY2UoXCJpdGFsaWMgXCIsXCJcIikpfWUuZm9udD1ufWZvcih3PTA7dzxFOysrdyl7dmFyIE49U1t3XStcIlxcblwiO2ZvcihBPTAsVD13KkMsTT1uLFA9XCJcIixrPTA7azxOLmxlbmd0aDsrK2spe3ZhciBqPWsrRDxiLmxlbmd0aD9iW2srRF06YltiLmxlbmd0aC0xXTtzPT09aj9QKz1OW2tdOihSKCksUD1OW2tdLHZvaWQgMCE9PWomJihCKHMsaikscz1qKSl9UigpLEQrPU4ubGVuZ3RoO3ZhciBWPTB8TWF0aC5yb3VuZChBKzIqTCk7TzxWJiYoTz1WKX12YXIgVT1PLHE9eitDKkU7cmV0dXJuIGkoZS5nZXRJbWFnZURhdGEoMCwwLFUscSkuZGF0YSxbcSxVLDRdKS5waWNrKC0xLC0xLDApLnRyYW5zcG9zZSgxLDApfShlLHIsdCxhLG8scyksbixhKX0sZS5leHBvcnRzLnByb2Nlc3NQaXhlbHM9dzt2YXIgbj10KFwic3VyZmFjZS1uZXRzXCIpLGk9dChcIm5kYXJyYXlcIiksYT10KFwic2ltcGxpZnktcGxhbmFyLWdyYXBoXCIpLG89dChcImNsZWFuLXBzbGdcIikscz10KFwiY2R0MmRcIiksbD10KFwicGxhbmFyLWdyYXBoLXRvLXBvbHlsaW5lXCIpLGM9XCJiXCIsdT1cImJ8XCIsaD1cImlcIixmPVwiaXxcIixwPVwic3VwXCIsZD1cIitcIixnPVwiKzFcIix2PVwic3ViXCIsbT1cIi1cIix5PVwiLTFcIjtmdW5jdGlvbiB4KHQsZSxyLG4pe2Zvcih2YXIgaT1cIjxcIit0K1wiPlwiLGE9XCI8L1wiK3QrXCI+XCIsbz1pLmxlbmd0aCxzPWEubGVuZ3RoLGw9ZVswXT09PWR8fGVbMF09PT1tLGM9MCx1PS1zO2M+LTEmJi0xIT09KGM9ci5pbmRleE9mKGksYykpJiYtMSE9PSh1PXIuaW5kZXhPZihhLGMrbykpJiYhKHU8PWMpOyl7Zm9yKHZhciBoPWM7aDx1K3M7KytoKWlmKGg8YytvfHxoPj11KW5baF09bnVsbCxyPXIuc3Vic3RyKDAsaCkrXCIgXCIrci5zdWJzdHIoaCsxKTtlbHNlIGlmKG51bGwhPT1uW2hdKXt2YXIgZj1uW2hdLmluZGV4T2YoZVswXSk7LTE9PT1mP25baF0rPWU6bCYmKG5baF09bltoXS5zdWJzdHIoMCxmKzEpKygxK3BhcnNlSW50KG5baF1bZisxXSkpK25baF0uc3Vic3RyKGYrMikpfXZhciBwPWMrbyxnPXIuc3Vic3RyKHAsdS1wKS5pbmRleE9mKGkpO2M9LTEhPT1nP2c6dStzfXJldHVybiBufWZ1bmN0aW9uIGIodCxlKXt2YXIgcj1uKHQsMTI4KTtyZXR1cm4gZT9hKHIuY2VsbHMsci5wb3NpdGlvbnMsLjI1KTp7ZWRnZXM6ci5jZWxscyxwb3NpdGlvbnM6ci5wb3NpdGlvbnN9fWZ1bmN0aW9uIF8odCxlLHIsbil7dmFyIGk9Yih0LG4pLGE9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1lLnRleHRBbGlnbnx8XCJzdGFydFwiLGk9ZS50ZXh0QmFzZWxpbmV8fFwiYWxwaGFiZXRpY1wiLGE9WzE8PDMwLDE8PDMwXSxvPVswLDBdLHM9dC5sZW5ndGgsbD0wO2w8czsrK2wpZm9yKHZhciBjPXRbbF0sdT0wO3U8MjsrK3UpYVt1XT0wfE1hdGgubWluKGFbdV0sY1t1XSksb1t1XT0wfE1hdGgubWF4KG9bdV0sY1t1XSk7dmFyIGg9MDtzd2l0Y2gobil7Y2FzZVwiY2VudGVyXCI6aD0tLjUqKGFbMF0rb1swXSk7YnJlYWs7Y2FzZVwicmlnaHRcIjpjYXNlXCJlbmRcIjpoPS1vWzBdO2JyZWFrO2Nhc2VcImxlZnRcIjpjYXNlXCJzdGFydFwiOmg9LWFbMF07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJ2ZWN0b3JpemUtdGV4dDogVW5yZWNvZ25pemVkIHRleHRBbGlnbjogJ1wiK24rXCInXCIpfXZhciBmPTA7c3dpdGNoKGkpe2Nhc2VcImhhbmdpbmdcIjpjYXNlXCJ0b3BcIjpmPS1hWzFdO2JyZWFrO2Nhc2VcIm1pZGRsZVwiOmY9LS41KihhWzFdK29bMV0pO2JyZWFrO2Nhc2VcImFscGhhYmV0aWNcIjpjYXNlXCJpZGVvZ3JhcGhpY1wiOmY9LTMqcjticmVhaztjYXNlXCJib3R0b21cIjpmPS1vWzFdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwidmVjdG9yaXplLXRleHQ6IFVucmVjb2dpbml6ZWQgdGV4dEJhc2VsaW5lOiAnXCIraStcIidcIil9dmFyIHA9MS9yO3JldHVyblwibGluZUhlaWdodFwiaW4gZT9wKj0rZS5saW5lSGVpZ2h0Olwid2lkdGhcImluIGU/cD1lLndpZHRoLyhvWzBdLWFbMF0pOlwiaGVpZ2h0XCJpbiBlJiYocD1lLmhlaWdodC8ob1sxXS1hWzFdKSksdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW3AqKHRbMF0raCkscCoodFsxXStmKV19KX0oaS5wb3NpdGlvbnMsZSxyKSxjPWkuZWRnZXMsdT1cImNjd1wiPT09ZS5vcmllbnRhdGlvbjtpZihvKGEsYyksZS5wb2x5Z29uc3x8ZS5wb2x5Z29ufHxlLnBvbHlsaW5lKXtmb3IodmFyIGg9bChjLGEpLGY9bmV3IEFycmF5KGgubGVuZ3RoKSxwPTA7cDxoLmxlbmd0aDsrK3Ape2Zvcih2YXIgZD1oW3BdLGc9bmV3IEFycmF5KGQubGVuZ3RoKSx2PTA7djxkLmxlbmd0aDsrK3Ype2Zvcih2YXIgbT1kW3ZdLHk9bmV3IEFycmF5KG0ubGVuZ3RoKSx4PTA7eDxtLmxlbmd0aDsrK3gpeVt4XT1hW21beF1dLnNsaWNlKCk7dSYmeS5yZXZlcnNlKCksZ1t2XT15fWZbcF09Z31yZXR1cm4gZn1yZXR1cm4gZS50cmlhbmdsZXN8fGUudHJpYW5ndWxhdGV8fGUudHJpYW5nbGU/e2NlbGxzOnMoYSxjLHtkZWxhdW5heTohMSxleHRlcmlvcjohMSxpbnRlcmlvcjohMH0pLHBvc2l0aW9uczphfTp7ZWRnZXM6Yyxwb3NpdGlvbnM6YX19ZnVuY3Rpb24gdyh0LGUscil7dHJ5e3JldHVybiBfKHQsZSxyLCEwKX1jYXRjaCh0KXt9dHJ5e3JldHVybiBfKHQsZSxyLCExKX1jYXRjaCh0KXt9cmV0dXJuIGUucG9seWdvbnN8fGUucG9seWxpbmV8fGUucG9seWdvbj9bXTplLnRyaWFuZ2xlc3x8ZS50cmlhbmd1bGF0ZXx8ZS50cmlhbmdsZT97Y2VsbHM6W10scG9zaXRpb25zOltdfTp7ZWRnZXM6W10scG9zaXRpb25zOltdfX19LHtjZHQyZDo5NyxcImNsZWFuLXBzbGdcIjoxMDcsbmRhcnJheTo0NDMsXCJwbGFuYXItZ3JhcGgtdG8tcG9seWxpbmVcIjo0NjEsXCJzaW1wbGlmeS1wbGFuYXItZ3JhcGhcIjo1MDksXCJzdXJmYWNlLW5ldHNcIjo1MTZ9XSw1Mzc6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtpZihcInVuZGVmaW5lZFwiPT10eXBlb2Ygc2VzfHwhc2VzLm9rfHxzZXMub2soKSl7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlcyYmKHNlcy53ZWFrTWFwUGVybWl0SG9zdE9iamVjdHM9dik7dmFyIHQ9ITE7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgV2Vha01hcCl7dmFyIHI9V2Vha01hcDtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgbmF2aWdhdG9yJiYvRmlyZWZveC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSk7ZWxzZXt2YXIgbj1uZXcgcixpPU9iamVjdC5mcmVlemUoe30pO2lmKG4uc2V0KGksMSksMT09PW4uZ2V0KGkpKXJldHVybiB2b2lkKGUuZXhwb3J0cz1XZWFrTWFwKTt0PSEwfX1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzLG89T2JqZWN0LmRlZmluZVByb3BlcnR5LHM9T2JqZWN0LmlzRXh0ZW5zaWJsZSxsPVwid2Vha21hcDpcIixjPWwrXCJpZGVudDpcIitNYXRoLnJhbmRvbSgpK1wiX19fXCI7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGNyeXB0byYmXCJmdW5jdGlvblwiPT10eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyYmXCJmdW5jdGlvblwiPT10eXBlb2YgQXJyYXlCdWZmZXImJlwiZnVuY3Rpb25cIj09dHlwZW9mIFVpbnQ4QXJyYXkpe3ZhciB1PW5ldyBBcnJheUJ1ZmZlcigyNSksaD1uZXcgVWludDhBcnJheSh1KTtjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGgpLGM9bCtcInJhbmQ6XCIrQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGgsZnVuY3Rpb24odCl7cmV0dXJuKHQlMzYpLnRvU3RyaW5nKDM2KX0pLmpvaW4oXCJcIikrXCJfX19cIn1pZihvKE9iamVjdCxcImdldE93blByb3BlcnR5TmFtZXNcIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGEodCkuZmlsdGVyKG0pfX0pLFwiZ2V0UHJvcGVydHlOYW1lc1wiaW4gT2JqZWN0KXt2YXIgZj1PYmplY3QuZ2V0UHJvcGVydHlOYW1lcztvKE9iamVjdCxcImdldFByb3BlcnR5TmFtZXNcIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGYodCkuZmlsdGVyKG0pfX0pfSFmdW5jdGlvbigpe3ZhciB0PU9iamVjdC5mcmVlemU7byhPYmplY3QsXCJmcmVlemVcIix7dmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHkoZSksdChlKX19KTt2YXIgZT1PYmplY3Quc2VhbDtvKE9iamVjdCxcInNlYWxcIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHkodCksZSh0KX19KTt2YXIgcj1PYmplY3QucHJldmVudEV4dGVuc2lvbnM7byhPYmplY3QsXCJwcmV2ZW50RXh0ZW5zaW9uc1wiLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4geSh0KSxyKHQpfX0pfSgpO3ZhciBwPSExLGQ9MCxnPWZ1bmN0aW9uKCl7dGhpcyBpbnN0YW5jZW9mIGd8fGIoKTt2YXIgdD1bXSxlPVtdLHI9ZCsrO3JldHVybiBPYmplY3QuY3JlYXRlKGcucHJvdG90eXBlLHtnZXRfX186e3ZhbHVlOngoZnVuY3Rpb24obixpKXt2YXIgYSxvPXkobik7cmV0dXJuIG8/ciBpbiBvP29bcl06aTooYT10LmluZGV4T2YobikpPj0wP2VbYV06aX0pfSxoYXNfX186e3ZhbHVlOngoZnVuY3Rpb24oZSl7dmFyIG49eShlKTtyZXR1cm4gbj9yIGluIG46dC5pbmRleE9mKGUpPj0wfSl9LHNldF9fXzp7dmFsdWU6eChmdW5jdGlvbihuLGkpe3ZhciBhLG89eShuKTtyZXR1cm4gbz9vW3JdPWk6KGE9dC5pbmRleE9mKG4pKT49MD9lW2FdPWk6KGE9dC5sZW5ndGgsZVthXT1pLHRbYV09biksdGhpc30pfSxkZWxldGVfX186e3ZhbHVlOngoZnVuY3Rpb24obil7dmFyIGksYSxvPXkobik7cmV0dXJuIG8/ciBpbiBvJiZkZWxldGUgb1tyXTohKChpPXQuaW5kZXhPZihuKSk8MHx8KGE9dC5sZW5ndGgtMSx0W2ldPXZvaWQgMCxlW2ldPWVbYV0sdFtpXT10W2FdLHQubGVuZ3RoPWEsZS5sZW5ndGg9YSwwKSl9KX19KX07Zy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShPYmplY3QucHJvdG90eXBlLHtnZXQ6e3ZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZ2V0X19fKHQsZSl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0saGFzOnt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXNfX18odCl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sc2V0Ont2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnNldF9fXyh0LGUpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9LGRlbGV0ZTp7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZXRlX19fKHQpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksXCJmdW5jdGlvblwiPT10eXBlb2Ygcj9mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXt0aGlzIGluc3RhbmNlb2YgZ3x8YigpO3ZhciBlLG49bmV3IHIsaT12b2lkIDAsYT0hMTtyZXR1cm4gZT10P2Z1bmN0aW9uKHQsZSl7cmV0dXJuIG4uc2V0KHQsZSksbi5oYXModCl8fChpfHwoaT1uZXcgZyksaS5zZXQodCxlKSksdGhpc306ZnVuY3Rpb24odCxlKXtpZihhKXRyeXtuLnNldCh0LGUpfWNhdGNoKHIpe2l8fChpPW5ldyBnKSxpLnNldF9fXyh0LGUpfWVsc2Ugbi5zZXQodCxlKTtyZXR1cm4gdGhpc30sT2JqZWN0LmNyZWF0ZShnLnByb3RvdHlwZSx7Z2V0X19fOnt2YWx1ZTp4KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGk/bi5oYXModCk/bi5nZXQodCk6aS5nZXRfX18odCxlKTpuLmdldCh0LGUpfSl9LGhhc19fXzp7dmFsdWU6eChmdW5jdGlvbih0KXtyZXR1cm4gbi5oYXModCl8fCEhaSYmaS5oYXNfX18odCl9KX0sc2V0X19fOnt2YWx1ZTp4KGUpfSxkZWxldGVfX186e3ZhbHVlOngoZnVuY3Rpb24odCl7dmFyIGU9ISFuLmRlbGV0ZSh0KTtyZXR1cm4gaSYmaS5kZWxldGVfX18odCl8fGV9KX0scGVybWl0SG9zdE9iamVjdHNfX186e3ZhbHVlOngoZnVuY3Rpb24odCl7aWYodCE9PXYpdGhyb3cgbmV3IEVycm9yKFwiYm9ndXMgY2FsbCB0byBwZXJtaXRIb3N0T2JqZWN0c19fX1wiKTthPSEwfSl9fSl9dCYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFByb3h5JiYoUHJveHk9dm9pZCAwKSxuLnByb3RvdHlwZT1nLnByb3RvdHlwZSxlLmV4cG9ydHM9bixPYmplY3QuZGVmaW5lUHJvcGVydHkoV2Vha01hcC5wcm90b3R5cGUsXCJjb25zdHJ1Y3RvclwiLHt2YWx1ZTpXZWFrTWFwLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSl9KCk6KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBQcm94eSYmKFByb3h5PXZvaWQgMCksZS5leHBvcnRzPWcpfWZ1bmN0aW9uIHYodCl7dC5wZXJtaXRIb3N0T2JqZWN0c19fXyYmdC5wZXJtaXRIb3N0T2JqZWN0c19fXyh2KX1mdW5jdGlvbiBtKHQpe3JldHVybiEodC5zdWJzdHIoMCxsLmxlbmd0aCk9PWwmJlwiX19fXCI9PT10LnN1YnN0cih0Lmxlbmd0aC0zKSl9ZnVuY3Rpb24geSh0KXtpZih0IT09T2JqZWN0KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJOb3QgYW4gb2JqZWN0OiBcIit0KTt2YXIgZT10W2NdO2lmKGUmJmUua2V5PT09dClyZXR1cm4gZTtpZihzKHQpKXtlPXtrZXk6dH07dHJ5e3JldHVybiBvKHQsYyx7dmFsdWU6ZSx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMX0pLGV9Y2F0Y2godCl7cmV0dXJufX19ZnVuY3Rpb24geCh0KXtyZXR1cm4gdC5wcm90b3R5cGU9bnVsbCxPYmplY3QuZnJlZXplKHQpfWZ1bmN0aW9uIGIoKXtwfHxcInVuZGVmaW5lZFwiPT10eXBlb2YgY29uc29sZXx8KHA9ITAsY29uc29sZS53YXJuKFwiV2Vha01hcCBzaG91bGQgYmUgaW52b2tlZCBhcyBuZXcgV2Vha01hcCgpLCBub3QgV2Vha01hcCgpLiBUaGlzIHdpbGwgYmUgYW4gZXJyb3IgaW4gdGhlIGZ1dHVyZS5cIikpfX0oKX0se31dLDUzODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuL2hpZGRlbi1zdG9yZS5qc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoKFwib2JqZWN0XCIhPXR5cGVvZiBlfHxudWxsPT09ZSkmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKFwiV2Vha21hcC1zaGltOiBLZXkgbXVzdCBiZSBvYmplY3RcIik7dmFyIHI9ZS52YWx1ZU9mKHQpO3JldHVybiByJiZyLmlkZW50aXR5PT09dD9yOm4oZSx0KX19fSx7XCIuL2hpZGRlbi1zdG9yZS5qc1wiOjUzOX1dLDUzOTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXtpZGVudGl0eTplfSxuPXQudmFsdWVPZjtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJ2YWx1ZU9mXCIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0IT09ZT9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpyfSx3cml0YWJsZTohMH0pLHJ9fSx7fV0sNTQwOltmdW5jdGlvbih0LGUscil7dmFyIG49dChcIi4vY3JlYXRlLXN0b3JlLmpzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PW4oKTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGUscil7dmFyIG49dChlKTtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eShcInZhbHVlXCIpP24udmFsdWU6cn0sc2V0OmZ1bmN0aW9uKGUscil7cmV0dXJuIHQoZSkudmFsdWU9cix0aGlzfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuXCJ2YWx1ZVwiaW4gdChlKX0sZGVsZXRlOmZ1bmN0aW9uKGUpe3JldHVybiBkZWxldGUgdChlKS52YWx1ZX19fX0se1wiLi9jcmVhdGUtc3RvcmUuanNcIjo1Mzh9XSw1NDE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiZ2V0LWNhbnZhcy1jb250ZXh0XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbihcIndlYmdsXCIsdCl9fSx7XCJnZXQtY2FudmFzLWNvbnRleHRcIjoyMjl9XSw1NDI6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi4vbWFpblwiKSxpPXQoXCJvYmplY3QtYXNzaWduXCIpLGE9bi5pbnN0YW5jZSgpO2Z1bmN0aW9uIG8odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHxcIlwiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbXCJcIl19by5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoby5wcm90b3R5cGUse25hbWU6XCJDaGluZXNlXCIsamRFcG9jaDoxNzIxNDI1LjUsaGFzWWVhclplcm86ITEsbWluTW9udGg6MCxmaXJzdE1vbnRoOjAsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOntcIlwiOntuYW1lOlwiQ2hpbmVzZVwiLGVwb2NoczpbXCJCRUNcIixcIkVDXCJdLG1vbnRoTnVtYmVyczpmdW5jdGlvbih0LGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXt2YXIgcj10Lm1hdGNoKGwpO3JldHVybiByP3JbMF06XCJcIn12YXIgbj10aGlzLl92YWxpZGF0ZVllYXIodCksaT10Lm1vbnRoKCksYT1cIlwiK3RoaXMudG9DaGluZXNlTW9udGgobixpKTtyZXR1cm4gZSYmYS5sZW5ndGg8MiYmKGE9XCIwXCIrYSksdGhpcy5pc0ludGVyY2FsYXJ5TW9udGgobixpKSYmKGErPVwiaVwiKSxhfSxtb250aE5hbWVzOmZ1bmN0aW9uKHQpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXt2YXIgZT10Lm1hdGNoKGMpO3JldHVybiBlP2VbMF06XCJcIn12YXIgcj10aGlzLl92YWxpZGF0ZVllYXIodCksbj10Lm1vbnRoKCksaT1bXCJcXHU0ZTAwXFx1NjcwOFwiLFwiXFx1NGU4Y1xcdTY3MDhcIixcIlxcdTRlMDlcXHU2NzA4XCIsXCJcXHU1NmRiXFx1NjcwOFwiLFwiXFx1NGU5NFxcdTY3MDhcIixcIlxcdTUxNmRcXHU2NzA4XCIsXCJcXHU0ZTAzXFx1NjcwOFwiLFwiXFx1NTE2YlxcdTY3MDhcIixcIlxcdTRlNWRcXHU2NzA4XCIsXCJcXHU1MzQxXFx1NjcwOFwiLFwiXFx1NTM0MVxcdTRlMDBcXHU2NzA4XCIsXCJcXHU1MzQxXFx1NGU4Y1xcdTY3MDhcIl1bdGhpcy50b0NoaW5lc2VNb250aChyLG4pLTFdO3JldHVybiB0aGlzLmlzSW50ZXJjYWxhcnlNb250aChyLG4pJiYoaT1cIlxcdTk1ZjBcIitpKSxpfSxtb250aE5hbWVzU2hvcnQ6ZnVuY3Rpb24odCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpe3ZhciBlPXQubWF0Y2godSk7cmV0dXJuIGU/ZVswXTpcIlwifXZhciByPXRoaXMuX3ZhbGlkYXRlWWVhcih0KSxuPXQubW9udGgoKSxpPVtcIlxcdTRlMDBcIixcIlxcdTRlOGNcIixcIlxcdTRlMDlcIixcIlxcdTU2ZGJcIixcIlxcdTRlOTRcIixcIlxcdTUxNmRcIixcIlxcdTRlMDNcIixcIlxcdTUxNmJcIixcIlxcdTRlNWRcIixcIlxcdTUzNDFcIixcIlxcdTUzNDFcXHU0ZTAwXCIsXCJcXHU1MzQxXFx1NGU4Y1wiXVt0aGlzLnRvQ2hpbmVzZU1vbnRoKHIsbiktMV07cmV0dXJuIHRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKHIsbikmJihpPVwiXFx1OTVmMFwiK2kpLGl9LHBhcnNlTW9udGg6ZnVuY3Rpb24odCxlKXt0PXRoaXMuX3ZhbGlkYXRlWWVhcih0KTt2YXIgcixuPXBhcnNlSW50KGUpO2lmKGlzTmFOKG4pKVwiXFx1OTVmMFwiPT09ZVswXSYmKHI9ITAsZT1lLnN1YnN0cmluZygxKSksXCJcXHU2NzA4XCI9PT1lW2UubGVuZ3RoLTFdJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTEpKSxuPTErW1wiXFx1NGUwMFwiLFwiXFx1NGU4Y1wiLFwiXFx1NGUwOVwiLFwiXFx1NTZkYlwiLFwiXFx1NGU5NFwiLFwiXFx1NTE2ZFwiLFwiXFx1NGUwM1wiLFwiXFx1NTE2YlwiLFwiXFx1NGU1ZFwiLFwiXFx1NTM0MVwiLFwiXFx1NTM0MVxcdTRlMDBcIixcIlxcdTUzNDFcXHU0ZThjXCJdLmluZGV4T2YoZSk7ZWxzZXt2YXIgaT1lW2UubGVuZ3RoLTFdO3I9XCJpXCI9PT1pfHxcIklcIj09PWl9cmV0dXJuIHRoaXMudG9Nb250aEluZGV4KHQsbixyKX0sZGF5TmFtZXM6W1wiU3VuZGF5XCIsXCJNb25kYXlcIixcIlR1ZXNkYXlcIixcIldlZG5lc2RheVwiLFwiVGh1cnNkYXlcIixcIkZyaWRheVwiLFwiU2F0dXJkYXlcIl0sZGF5TmFtZXNTaG9ydDpbXCJTdW5cIixcIk1vblwiLFwiVHVlXCIsXCJXZWRcIixcIlRodVwiLFwiRnJpXCIsXCJTYXRcIl0sZGF5TmFtZXNNaW46W1wiU3VcIixcIk1vXCIsXCJUdVwiLFwiV2VcIixcIlRoXCIsXCJGclwiLFwiU2FcIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDpcInl5eXkvbW0vZGRcIixmaXJzdERheToxLGlzUlRMOiExfX0sX3ZhbGlkYXRlWWVhcjpmdW5jdGlvbih0LGUpe2lmKHQueWVhciYmKHQ9dC55ZWFyKCkpLFwibnVtYmVyXCIhPXR5cGVvZiB0fHx0PDE4ODh8fHQ+MjExMSl0aHJvdyBlLnJlcGxhY2UoL1xcezBcXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIHR9LHRvTW9udGhJbmRleDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpO2lmKHImJmUhPT1pfHxlPDF8fGU+MTIpdGhyb3cgbi5sb2NhbC5pbnZhbGlkTW9udGgucmVwbGFjZSgvXFx7MFxcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gaT8hciYmZTw9aT9lLTE6ZTplLTF9LHRvQ2hpbmVzZU1vbnRoOmZ1bmN0aW9uKHQsZSl7dC55ZWFyJiYoZT0odD10LnllYXIoKSkubW9udGgoKSk7dmFyIHI9dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpO2lmKGU8MHx8ZT4ocj8xMjoxMSkpdGhyb3cgbi5sb2NhbC5pbnZhbGlkTW9udGgucmVwbGFjZSgvXFx7MFxcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gcj9lPHI/ZSsxOmU6ZSsxfSxpbnRlcmNhbGFyeU1vbnRoOmZ1bmN0aW9uKHQpe3JldHVybiB0PXRoaXMuX3ZhbGlkYXRlWWVhcih0KSxoW3QtaFswXV0+PjEzfSxpc0ludGVyY2FsYXJ5TW9udGg6ZnVuY3Rpb24odCxlKXt0LnllYXImJihlPSh0PXQueWVhcigpKS5tb250aCgpKTt2YXIgcj10aGlzLmludGVyY2FsYXJ5TW9udGgodCk7cmV0dXJuISFyJiZyPT09ZX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIDAhPT10aGlzLmludGVyY2FsYXJ5TW9udGgodCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBpLG89dGhpcy5fdmFsaWRhdGVZZWFyKHQsbi5sb2NhbC5pbnZhbGlkeWVhcikscz1mW28tZlswXV0sbD1zPj45JjQwOTUsYz1zPj41JjE1LHU9MzEmczsoaT1hLm5ld0RhdGUobCxjLHUpKS5hZGQoNC0oaS5kYXlPZldlZWsoKXx8NyksXCJkXCIpO3ZhciBoPXRoaXMudG9KRCh0LGUsciktaS50b0pEKCk7cmV0dXJuIDErTWF0aC5mbG9vcihoLzcpfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVhcFllYXIodCk/MTM6MTJ9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dC55ZWFyJiYoZT10Lm1vbnRoKCksdD10LnllYXIoKSksdD10aGlzLl92YWxpZGF0ZVllYXIodCk7dmFyIHI9aFt0LWhbMF1dO2lmKGU+KHI+PjEzPzEyOjExKSl0aHJvdyBuLmxvY2FsLmludmFsaWRNb250aC5yZXBsYWNlKC9cXHswXFx9Lyx0aGlzLmxvY2FsLm5hbWUpO3JldHVybiByJjE8PDEyLWU/MzA6Mjl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQscyxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3Q9dGhpcy5fdmFsaWRhdGVZZWFyKGkueWVhcigpKSxlPWkubW9udGgoKSxyPWkuZGF5KCk7dmFyIG89dGhpcy5pc0ludGVyY2FsYXJ5TW9udGgodCxlKSxzPXRoaXMudG9DaGluZXNlTW9udGgodCxlKSxsPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbyxzO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KW89dCxhPWV8fHt9O2Vsc2V7dmFyIGw9XCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTE4ODgmJnQ8PTIxMTE7aWYoIWwpdGhyb3cgbmV3IEVycm9yKFwiTHVuYXIgeWVhciBvdXRzaWRlIHJhbmdlIDE4ODgtMjExMVwiKTt2YXIgYz1cIm51bWJlclwiPT10eXBlb2YgZSYmZT49MSYmZTw9MTI7aWYoIWMpdGhyb3cgbmV3IEVycm9yKFwiTHVuYXIgbW9udGggb3V0c2lkZSByYW5nZSAxIC0gMTJcIik7dmFyIHUscD1cIm51bWJlclwiPT10eXBlb2YgciYmcj49MSYmcjw9MzA7aWYoIXApdGhyb3cgbmV3IEVycm9yKFwiTHVuYXIgZGF5IG91dHNpZGUgcmFuZ2UgMSAtIDMwXCIpO1wib2JqZWN0XCI9PXR5cGVvZiBuPyh1PSExLGE9bik6KHU9ISFuLGE9aXx8e30pLG89e3llYXI6dCxtb250aDplLGRheTpyLGlzSW50ZXJjYWxhcnk6dX19cz1vLmRheS0xO3ZhciBkLGc9aFtvLnllYXItaFswXV0sdj1nPj4xMztkPXY/by5tb250aD52P28ubW9udGg6by5pc0ludGVyY2FsYXJ5P28ubW9udGg6by5tb250aC0xOm8ubW9udGgtMTtmb3IodmFyIG09MDttPGQ7bSsrKXt2YXIgeT1nJjE8PDEyLW0/MzA6Mjk7cys9eX12YXIgeD1mW28ueWVhci1mWzBdXSxiPW5ldyBEYXRlKHg+PjkmNDA5NSwoeD4+NSYxNSktMSwoMzEmeCkrcyk7cmV0dXJuIGEueWVhcj1iLmdldEZ1bGxZZWFyKCksYS5tb250aD0xK2IuZ2V0TW9udGgoKSxhLmRheT1iLmdldERhdGUoKSxhfSh0LHMscixvKTtyZXR1cm4gYS50b0pEKGwueWVhcixsLm1vbnRoLGwuZGF5KX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPWEuZnJvbUpEKHQpLHI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYTtpZihcIm9iamVjdFwiPT10eXBlb2YgdClpPXQsYT1lfHx7fTtlbHNle3ZhciBvPVwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0xODg4JiZ0PD0yMTExO2lmKCFvKXRocm93IG5ldyBFcnJvcihcIlNvbGFyIHllYXIgb3V0c2lkZSByYW5nZSAxODg4LTIxMTFcIik7dmFyIHM9XCJudW1iZXJcIj09dHlwZW9mIGUmJmU+PTEmJmU8PTEyO2lmKCFzKXRocm93IG5ldyBFcnJvcihcIlNvbGFyIG1vbnRoIG91dHNpZGUgcmFuZ2UgMSAtIDEyXCIpO3ZhciBsPVwibnVtYmVyXCI9PXR5cGVvZiByJiZyPj0xJiZyPD0zMTtpZighbCl0aHJvdyBuZXcgRXJyb3IoXCJTb2xhciBkYXkgb3V0c2lkZSByYW5nZSAxIC0gMzFcIik7aT17eWVhcjp0LG1vbnRoOmUsZGF5OnJ9LGE9bnx8e319dmFyIGM9ZltpLnllYXItZlswXV0sdT1pLnllYXI8PDl8aS5tb250aDw8NXxpLmRheTthLnllYXI9dT49Yz9pLnllYXI6aS55ZWFyLTEsYz1mW2EueWVhci1mWzBdXTt2YXIgcCxkPW5ldyBEYXRlKGM+PjkmNDA5NSwoYz4+NSYxNSktMSwzMSZjKSxnPW5ldyBEYXRlKGkueWVhcixpLm1vbnRoLTEsaS5kYXkpO3A9TWF0aC5yb3VuZCgoZy1kKS84NjRlNSk7dmFyIHYsbT1oW2EueWVhci1oWzBdXTtmb3Iodj0wO3Y8MTM7disrKXt2YXIgeT1tJjE8PDEyLXY/MzA6Mjk7aWYocDx5KWJyZWFrO3AtPXl9dmFyIHg9bT4+MTM7IXh8fHY8eD8oYS5pc0ludGVyY2FsYXJ5PSExLGEubW9udGg9MSt2KTp2PT09eD8oYS5pc0ludGVyY2FsYXJ5PSEwLGEubW9udGg9dik6KGEuaXNJbnRlcmNhbGFyeT0hMSxhLm1vbnRoPXYpO3JldHVybiBhLmRheT0xK3AsYX0oZS55ZWFyKCksZS5tb250aCgpLGUuZGF5KCkpLG49dGhpcy50b01vbnRoSW5kZXgoci55ZWFyLHIubW9udGgsci5pc0ludGVyY2FsYXJ5KTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIueWVhcixuLHIuZGF5KX0sZnJvbVN0cmluZzpmdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKHMpLHI9dGhpcy5fdmFsaWRhdGVZZWFyKCtlWzFdKSxuPStlWzJdLGk9ISFlWzNdLGE9dGhpcy50b01vbnRoSW5kZXgocixuLGkpLG89K2VbNF07cmV0dXJuIHRoaXMubmV3RGF0ZShyLGEsbyl9LGFkZDpmdW5jdGlvbih0LGUscil7dmFyIG49dC55ZWFyKCksaT10Lm1vbnRoKCksYT10aGlzLmlzSW50ZXJjYWxhcnlNb250aChuLGkpLHM9dGhpcy50b0NoaW5lc2VNb250aChuLGkpLGw9T2JqZWN0LmdldFByb3RvdHlwZU9mKG8ucHJvdG90eXBlKS5hZGQuY2FsbCh0aGlzLHQsZSxyKTtpZihcInlcIj09PXIpe3ZhciBjPWwueWVhcigpLHU9bC5tb250aCgpLGg9dGhpcy5pc0ludGVyY2FsYXJ5TW9udGgoYyxzKSxmPWEmJmg/dGhpcy50b01vbnRoSW5kZXgoYyxzLCEwKTp0aGlzLnRvTW9udGhJbmRleChjLHMsITEpO2YhPT11JiZsLm1vbnRoKGYpfXJldHVybiBsfX0pO3ZhciBzPS9eXFxzKigtP1xcZFxcZFxcZFxcZHxcXGRcXGQpWy1cXC9dKFxcZD9cXGQpKFtpSV0/KVstXFwvXShcXGQ/XFxkKS9tLGw9L15cXGQ/XFxkW2lJXT8vbSxjPS9eXFx1OTVmMD9cXHU1MzQxP1tcXHU0ZTAwXFx1NGU4Y1xcdTRlMDlcXHU1NmRiXFx1NGU5NFxcdTUxNmRcXHU0ZTAzXFx1NTE2YlxcdTRlNWRdP1xcdTY3MDgvbSx1PS9eXFx1OTVmMD9cXHU1MzQxP1tcXHU0ZTAwXFx1NGU4Y1xcdTRlMDlcXHU1NmRiXFx1NGU5NFxcdTUxNmRcXHU0ZTAzXFx1NTE2YlxcdTRlNWRdPy9tO24uY2FsZW5kYXJzLmNoaW5lc2U9bzt2YXIgaD1bMTg4Nyw1NzgwLDU4MDIsMTkxNTcsMjc0Miw1MDM1OSwxMTk4LDI2NDYsNDYzNzgsNzQ2NiwzNDEyLDMwMTIyLDU0ODIsNjc5NDksMjM5Niw1Mjk0LDQzNTk3LDY3MzIsNjk1NCwzNjE4MSwyNzcyLDQ5NTQsMTg3ODEsMjM5Niw1NDQyNyw1Mjc0LDY3MzAsNDc3ODEsNTgwMCw2ODY4LDIxMjEwLDQ3OTAsNTk3MDMsMjM1MCw1MjcwLDQ2NjY3LDM0MDIsMzQ5NiwzODMyNSwxMzg4LDQ3ODIsMTg3MzUsMjM1MCw1MjM3NCw2ODA0LDc0OTgsNDQ0NTcsMjkwNiwxMzg4LDI5Mjk0LDQ3MDAsNjM3ODksNjQ0Miw2ODA0LDU2MTM4LDU4MDIsMjc3MiwzODIzNSwxMjEwLDQ2OTgsMjI4MjcsNTQxOCw2MzEyNSwzNDc2LDU4MDIsNDM3MDEsMjQ4NCw1MzAyLDI3MjIzLDI2NDYsNzA5NTQsNzQ2NiwzNDEyLDU0Njk4LDU0ODIsMjQxMiwzODA2Miw1Mjk0LDI2MzYsMzIwMzgsNjk1NCw2MDI0NSwyNzcyLDQ4MjYsNDMzNTcsMjM5NCw1Mjc0LDM5NTAxLDY3MzAsNzIzNTcsNTgwMCw1ODQ0LDUzOTc4LDQ3OTAsMjM1OCwzODAzOSw1MjcwLDg3NjI3LDM0MDIsMzQ5Niw1NDcwOCw1NDg0LDQ3ODIsNDMzMTEsMjM1MCwzMjIyLDI3OTc4LDc0OTgsNjg5NjUsMjkwNCw1NDg0LDQ1Njc3LDQ3MDAsNjQ0NCwzOTU3Myw2ODA0LDY5ODYsMTkyODUsMjc3Miw2MjgxMSwxMjEwLDQ2OTgsNDc0MDMsNTQxOCw1NzgwLDM4NTcwLDU1NDYsNzY0NjksMjQyMCw1MzAyLDUxNzk5LDI2NDYsNTQxNCwzNjUwMSwzNDEyLDU1NDYsMTg4NjksMjQxMiw1NDQ0Niw1Mjc2LDY3MzIsNDg0MjIsNjgyMiwyOTAwLDI4MDEwLDQ4MjYsOTI1MDksMjM5NCw1Mjc0LDU1ODgzLDY3MzAsNjgyMCw0Nzk1Niw1ODEyLDI3NzgsMTg3NzksMjM1OCw2MjYxNSw1MjcwLDU0NTAsNDY3NTcsMzQ5Miw1NTU2LDI3MzE4LDQ3MTgsNjc4ODcsMjM1MCwzMjIyLDUyNTU0LDc0OTgsMzQyOCwzODI1Miw1NDY4LDQ3MDAsMzEwMjIsNjQ0NCw2NDE0OSw2ODA0LDY5ODYsNDM4NjEsMjc3Miw1MzM4LDM1NDIxLDI2NTAsNzA5NTUsNTQxOCw1NzgwLDU0OTU0LDU1NDYsMjc0MCwzODA3NCw1MzAyLDI2NDYsMjk5OTEsMzM2Niw2MTAxMSwzNDEyLDU1NDYsNDM0NDUsMjQxMiw1Mjk0LDM1NDA2LDY3MzIsNzI5OTgsNjgyMCw2OTk2LDUyNTg2LDI3NzgsMjM5NiwzODA0NSw1Mjc0LDY2OTgsMjMzMzMsNjgyMCw2NDMzOCw1ODEyLDI3NDYsNDMzNTUsMjM1OCw1MjcwLDM5NDk5LDU0NTAsNzk1MjUsMzQ5Miw1NTQ4XSxmPVsxODg3LDk2NjczMiw5NjcyMzEsOTY3NzMzLDk2ODI2NSw5Njg3NjYsOTY5Mjk3LDk2OTc5OCw5NzAyOTgsOTcwODI5LDk3MTMzMCw5NzE4MzAsOTcyMzYyLDk3Mjg2Myw5NzMzOTUsOTczODk2LDk3NDM5Nyw5NzQ5MjgsOTc1NDI4LDk3NTkyOSw5NzY0NjEsOTc2OTYyLDk3NzQ2Miw5Nzc5OTQsOTc4NDk0LDk3OTAyNiw5Nzk1MjYsOTgwMDI2LDk4MDU1OCw5ODEwNTksOTgxNTU5LDk4MjA5MSw5ODI1OTMsOTgzMTI0LDk4MzYyNCw5ODQxMjQsOTg0NjU2LDk4NTE1Nyw5ODU2NTYsOTg2MTg5LDk4NjY5MCw5ODcxOTEsOTg3NzIyLDk4ODIyMiw5ODg3NTMsOTg5MjU0LDk4OTc1NCw5OTAyODYsOTkwNzg4LDk5MTI4OCw5OTE4MTksOTkyMzE5LDk5Mjg1MSw5OTMzNTIsOTkzODUxLDk5NDM4Myw5OTQ4ODUsOTk1Mzg1LDk5NTkxNyw5OTY0MTgsOTk2OTE4LDk5NzQ1MCw5OTc5NDksOTk4NDgxLDk5ODk4Miw5OTk0ODMsMTAwMDAxNCwxMDAwNTE1LDEwMDEwMTYsMTAwMTU0OCwxMDAyMDQ3LDEwMDI1NzgsMTAwMzA4MCwxMDAzNTgwLDEwMDQxMTEsMTAwNDYxMywxMDA1MTEzLDEwMDU2NDUsMTAwNjE0NiwxMDA2NjQ1LDEwMDcxNzcsMTAwNzY3OCwxMDA4MjA5LDEwMDg3MTAsMTAwOTIxMSwxMDA5NzQzLDEwMTAyNDMsMTAxMDc0MywxMDExMjc1LDEwMTE3NzUsMTAxMjMwNiwxMDEyODA3LDEwMTMzMDgsMTAxMzg0MCwxMDE0MzQxLDEwMTQ4NDEsMTAxNTM3MywxMDE1ODc0LDEwMTY0MDQsMTAxNjkwNSwxMDE3NDA1LDEwMTc5MzcsMTAxODQzOCwxMDE4OTM5LDEwMTk0NzEsMTAxOTk3MiwxMDIwNDcxLDEwMjEwMDIsMTAyMTUwMywxMDIyMDM1LDEwMjI1MzUsMTAyMzAzNiwxMDIzNTY4LDEwMjQwNjksMTAyNDU2OCwxMDI1MTAwLDEwMjU2MDEsMTAyNjEwMiwxMDI2NjMzLDEwMjcxMzMsMTAyNzY2NiwxMDI4MTY3LDEwMjg2NjYsMTAyOTE5OCwxMDI5Njk5LDEwMzAxOTksMTAzMDczMCwxMDMxMjMxLDEwMzE3NjMsMTAzMjI2NCwxMDMyNzY0LDEwMzMyOTYsMTAzMzc5NywxMDM0Mjk3LDEwMzQ4MjgsMTAzNTMyOSwxMDM1ODMwLDEwMzYzNjIsMTAzNjg2MSwxMDM3MzkzLDEwMzc4OTQsMTAzODM5NCwxMDM4OTI1LDEwMzk0MjcsMTAzOTkyNywxMDQwNDU5LDEwNDA5NTksMTA0MTQ5MSwxMDQxOTkyLDEwNDI0OTIsMTA0MzAyMywxMDQzNTI0LDEwNDQwMjQsMTA0NDU1NiwxMDQ1MDU3LDEwNDU1NTgsMTA0NjA5MCwxMDQ2NTkwLDEwNDcxMjEsMTA0NzYyMiwxMDQ4MTIyLDEwNDg2NTQsMTA0OTE1NCwxMDQ5NjU1LDEwNTAxODcsMTA1MDY4OSwxMDUxMjE5LDEwNTE3MjAsMTA1MjIyMCwxMDUyNzUxLDEwNTMyNTIsMTA1Mzc1MiwxMDU0Mjg0LDEwNTQ3ODYsMTA1NTI4NSwxMDU1ODE3LDEwNTYzMTcsMTA1Njg0OSwxMDU3MzQ5LDEwNTc4NTAsMTA1ODM4MiwxMDU4ODgzLDEwNTkzODMsMTA1OTkxNSwxMDYwNDE1LDEwNjA5NDcsMTA2MTQ0NywxMDYxOTQ3LDEwNjI0NzksMTA2Mjk4MSwxMDYzNDgwLDEwNjQwMTIsMTA2NDUxNCwxMDY1MDE0LDEwNjU1NDUsMTA2NjA0NSwxMDY2NTc3LDEwNjcwNzgsMTA2NzU3OCwxMDY4MTEwLDEwNjg2MTEsMTA2OTExMiwxMDY5NjQyLDEwNzAxNDIsMTA3MDY3NCwxMDcxMTc1LDEwNzE2NzUsMTA3MjIwNywxMDcyNzA5LDEwNzMyMDksMTA3Mzc0MCwxMDc0MjQxLDEwNzQ3NDEsMTA3NTI3MywxMDc1NzczLDEwNzYzMDUsMTA3NjgwNywxMDc3MzA4LDEwNzc4MzksMTA3ODM0MCwxMDc4ODQwLDEwNzkzNzIsMTA3OTg3MSwxMDgwNDAzLDEwODA5MDRdfSx7XCIuLi9tYWluXCI6NTU2LFwib2JqZWN0LWFzc2lnblwiOjQ0N31dLDU0MzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuLi9tYWluXCIpLGk9dChcIm9iamVjdC1hc3NpZ25cIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fFwiXCJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZTpcIkNvcHRpY1wiLGpkRXBvY2g6MTgyNTAyOS41LGRheXNQZXJNb250aDpbMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsNV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOntcIlwiOntuYW1lOlwiQ29wdGljXCIsZXBvY2hzOltcIkJBTVwiLFwiQU1cIl0sbW9udGhOYW1lczpbXCJUaG91dFwiLFwiUGFvcGlcIixcIkhhdGhvclwiLFwiS29pYWtcIixcIlRvYmlcIixcIk1lc2hpclwiLFwiUGFyZW1oYXRcIixcIlBhcmVtb3VkZVwiLFwiUGFzaG9uc1wiLFwiUGFvbmlcIixcIkVwaXBcIixcIk1lc29yaVwiLFwiUGkgS29naSBFbmF2b3RcIl0sbW9udGhOYW1lc1Nob3J0OltcIlRob1wiLFwiUGFvXCIsXCJIYXRoXCIsXCJLb2lcIixcIlRvYlwiLFwiTWVzaFwiLFwiUGF0XCIsXCJQYWRcIixcIlBhc2hcIixcIlBhb1wiLFwiRXBpXCIsXCJNZXNvXCIsXCJQaUtcIl0sZGF5TmFtZXM6W1wiVGt5cmlha2FcIixcIlBlc25hdVwiLFwiUHNob21lbnRcIixcIlBlZnRvb3VcIixcIlB0aW91XCIsXCJQc29vdVwiLFwiUHNhYmJhdG9uXCJdLGRheU5hbWVzU2hvcnQ6W1wiVGt5XCIsXCJQZXNcIixcIlBzaFwiLFwiUGVmXCIsXCJQdGlcIixcIlBzb1wiLFwiUHNhXCJdLGRheU5hbWVzTWluOltcIlRrXCIsXCJQZXNcIixcIlBzaFwiLFwiUGVmXCIsXCJQdFwiLFwiUHNvXCIsXCJQc2FcIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDpcImRkL21tL3l5eXlcIixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybih0PWUueWVhcigpKyhlLnllYXIoKTwwPzE6MCkpJTQ9PTN8fHQlND09LTF9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXJ8fG4ucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWRZZWFyKSwxM30sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksXCJkXCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDEzPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4odD1pLnllYXIoKSk8MCYmdCsrLGkuZGF5KCkrMzAqKGkubW9udGgoKS0xKSszNjUqKHQtMSkrTWF0aC5mbG9vcih0LzQpK3RoaXMuamRFcG9jaC0xfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcih0KSsuNS10aGlzLmpkRXBvY2gscj1NYXRoLmZsb29yKChlLU1hdGguZmxvb3IoKGUrMzY2KS8xNDYxKSkvMzY1KSsxO3I8PTAmJnItLSxlPU1hdGguZmxvb3IodCkrLjUtdGhpcy5uZXdEYXRlKHIsMSwxKS50b0pEKCk7dmFyIG49TWF0aC5mbG9vcihlLzMwKSsxLGk9ZS0zMCoobi0xKSsxO3JldHVybiB0aGlzLm5ld0RhdGUocixuLGkpfX0pLG4uY2FsZW5kYXJzLmNvcHRpYz1hfSx7XCIuLi9tYWluXCI6NTU2LFwib2JqZWN0LWFzc2lnblwiOjQ0N31dLDU0NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuLi9tYWluXCIpLGk9dChcIm9iamVjdC1hc3NpZ25cIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fFwiXCJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZTpcIkRpc2N3b3JsZFwiLGpkRXBvY2g6MTcyMTQyNS41LGRheXNQZXJNb250aDpbMTYsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzJdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7XCJcIjp7bmFtZTpcIkRpc2N3b3JsZFwiLGVwb2NoczpbXCJCVUNcIixcIlVDXCJdLG1vbnRoTmFtZXM6W1wiSWNrXCIsXCJPZmZsZVwiLFwiRmVicnVhcnlcIixcIk1hcmNoXCIsXCJBcHJpbFwiLFwiTWF5XCIsXCJKdW5lXCIsXCJHcnVuZVwiLFwiQXVndXN0XCIsXCJTcHVuZVwiLFwiU2VrdG9iZXJcIixcIkVtYmVyXCIsXCJEZWNlbWJlclwiXSxtb250aE5hbWVzU2hvcnQ6W1wiSWNrXCIsXCJPZmZcIixcIkZlYlwiLFwiTWFyXCIsXCJBcHJcIixcIk1heVwiLFwiSnVuXCIsXCJHcnVcIixcIkF1Z1wiLFwiU3B1XCIsXCJTZWtcIixcIkVtYlwiLFwiRGVjXCJdLGRheU5hbWVzOltcIlN1bmRheVwiLFwiT2N0ZWRheVwiLFwiTW9uZGF5XCIsXCJUdWVzZGF5XCIsXCJXZWRuZXNkYXlcIixcIlRodXJzZGF5XCIsXCJGcmlkYXlcIixcIlNhdHVyZGF5XCJdLGRheU5hbWVzU2hvcnQ6W1wiU3VuXCIsXCJPY3RcIixcIk1vblwiLFwiVHVlXCIsXCJXZWRcIixcIlRodVwiLFwiRnJpXCIsXCJTYXRcIl0sZGF5TmFtZXNNaW46W1wiU3VcIixcIk9jXCIsXCJNb1wiLFwiVHVcIixcIldlXCIsXCJUaFwiLFwiRnJcIixcIlNhXCJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6XCJ5eXl5L21tL2RkXCIsZmlyc3REYXk6Mixpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksITF9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLDEzfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksNDAwfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSxcImRcIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS84KSsxfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXX0sZGF5c0luV2VlazpmdW5jdGlvbigpe3JldHVybiA4fSxkYXlPZldlZWs6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKS5kYXkoKSsxKSU4fSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmRheU9mV2Vlayh0LGUscik7cmV0dXJuIG4+PTImJm48PTZ9LGV4dHJhSW5mbzpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJue2NlbnR1cnk6b1tNYXRoLmZsb29yKChpLnllYXIoKS0xKS8xMDApKzFdfHxcIlwifX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuIHQ9aS55ZWFyKCkrKGkueWVhcigpPDA/MTowKSxlPWkubW9udGgoKSwocj1pLmRheSgpKSsoZT4xPzE2OjApKyhlPjI/MzIqKGUtMik6MCkrNDAwKih0LTEpK3RoaXMuamRFcG9jaC0xfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dD1NYXRoLmZsb29yKHQrLjUpLU1hdGguZmxvb3IodGhpcy5qZEVwb2NoKS0xO3ZhciBlPU1hdGguZmxvb3IodC80MDApKzE7dC09NDAwKihlLTEpLHQrPXQ+MTU/MTY6MDt2YXIgcj1NYXRoLmZsb29yKHQvMzIpKzEsbj10LTMyKihyLTEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShlPD0wP2UtMTplLHIsbil9fSk7dmFyIG89ezIwOlwiRnJ1aXRiYXRcIiwyMTpcIkFuY2hvdnlcIn07bi5jYWxlbmRhcnMuZGlzY3dvcmxkPWF9LHtcIi4uL21haW5cIjo1NTYsXCJvYmplY3QtYXNzaWduXCI6NDQ3fV0sNTQ1OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcIi4uL21haW5cIiksaT10KFwib2JqZWN0LWFzc2lnblwiKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8XCJcIl18fHRoaXMucmVnaW9uYWxPcHRpb25zW1wiXCJdfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOlwiRXRoaW9waWFuXCIsamRFcG9jaDoxNzI0MjIwLjUsZGF5c1Blck1vbnRoOlszMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCw1XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6e1wiXCI6e25hbWU6XCJFdGhpb3BpYW5cIixlcG9jaHM6W1wiQkVFXCIsXCJFRVwiXSxtb250aE5hbWVzOltcIk1lc2tlcmVtXCIsXCJUaWtlbWV0XCIsXCJIaWRhclwiLFwiVGFoZXNhc1wiLFwiVGlyXCIsXCJZZWthdGl0XCIsXCJNZWdhYml0XCIsXCJNaWF6aWFcIixcIkdlbmJvdFwiLFwiU2VuZVwiLFwiSGFtbGVcIixcIk5laGFzZVwiLFwiUGFndW1lXCJdLG1vbnRoTmFtZXNTaG9ydDpbXCJNZXNcIixcIlRpa1wiLFwiSGlkXCIsXCJUYWhcIixcIlRpclwiLFwiWWVrXCIsXCJNZWdcIixcIk1pYVwiLFwiR2VuXCIsXCJTZW5cIixcIkhhbVwiLFwiTmVoXCIsXCJQYWdcIl0sZGF5TmFtZXM6W1wiRWh1ZFwiLFwiU2Vnbm9cIixcIk1ha3NlZ25vXCIsXCJJcm9iXCIsXCJIYW11c1wiLFwiQXJiXCIsXCJLaWRhbWVcIl0sZGF5TmFtZXNTaG9ydDpbXCJFaHVcIixcIlNlZ1wiLFwiTWFrXCIsXCJJcm9cIixcIkhhbVwiLFwiQXJiXCIsXCJLaWRcIl0sZGF5TmFtZXNNaW46W1wiRWhcIixcIlNlXCIsXCJNYVwiLFwiSXJcIixcIkhhXCIsXCJBclwiLFwiS2lcIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDpcImRkL21tL3l5eXlcIixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybih0PWUueWVhcigpKyhlLnllYXIoKTwwPzE6MCkpJTQ9PTN8fHQlND09LTF9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXJ8fG4ucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWRZZWFyKSwxM30sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksXCJkXCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDEzPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4odD1pLnllYXIoKSk8MCYmdCsrLGkuZGF5KCkrMzAqKGkubW9udGgoKS0xKSszNjUqKHQtMSkrTWF0aC5mbG9vcih0LzQpK3RoaXMuamRFcG9jaC0xfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcih0KSsuNS10aGlzLmpkRXBvY2gscj1NYXRoLmZsb29yKChlLU1hdGguZmxvb3IoKGUrMzY2KS8xNDYxKSkvMzY1KSsxO3I8PTAmJnItLSxlPU1hdGguZmxvb3IodCkrLjUtdGhpcy5uZXdEYXRlKHIsMSwxKS50b0pEKCk7dmFyIG49TWF0aC5mbG9vcihlLzMwKSsxLGk9ZS0zMCoobi0xKSsxO3JldHVybiB0aGlzLm5ld0RhdGUocixuLGkpfX0pLG4uY2FsZW5kYXJzLmV0aGlvcGlhbj1hfSx7XCIuLi9tYWluXCI6NTU2LFwib2JqZWN0LWFzc2lnblwiOjQ0N31dLDU0NjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuLi9tYWluXCIpLGk9dChcIm9iamVjdC1hc3NpZ25cIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fFwiXCJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHQtZSpNYXRoLmZsb29yKHQvZSl9YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6XCJIZWJyZXdcIixqZEVwb2NoOjM0Nzk5NS41LGRheXNQZXJNb250aDpbMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMjldLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDo3LG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7XCJcIjp7bmFtZTpcIkhlYnJld1wiLGVwb2NoczpbXCJCQU1cIixcIkFNXCJdLG1vbnRoTmFtZXM6W1wiTmlzYW5cIixcIkl5YXJcIixcIlNpdmFuXCIsXCJUYW1tdXpcIixcIkF2XCIsXCJFbHVsXCIsXCJUaXNocmVpXCIsXCJDaGVzaHZhblwiLFwiS2lzbGV2XCIsXCJUZXZldFwiLFwiU2hldmF0XCIsXCJBZGFyXCIsXCJBZGFyIElJXCJdLG1vbnRoTmFtZXNTaG9ydDpbXCJOaXNcIixcIkl5YVwiLFwiU2l2XCIsXCJUYW1cIixcIkF2XCIsXCJFbHVcIixcIlRpc1wiLFwiQ2hlXCIsXCJLaXNcIixcIlRldlwiLFwiU2hlXCIsXCJBZGFcIixcIkFkMlwiXSxkYXlOYW1lczpbXCJZb20gUmlzaG9uXCIsXCJZb20gU2hlbmlcIixcIllvbSBTaGxpc2hpXCIsXCJZb20gUmV2aSdpXCIsXCJZb20gQ2hhbWlzaGlcIixcIllvbSBTaGlzaGlcIixcIllvbSBTaGFiYmF0XCJdLGRheU5hbWVzU2hvcnQ6W1wiUmlzXCIsXCJTaGVcIixcIlNobFwiLFwiUmV2XCIsXCJDaGFcIixcIlNoaVwiLFwiU2hhXCJdLGRheU5hbWVzTWluOltcIlJpXCIsXCJTaGVcIixcIlNobFwiLFwiUmVcIixcIkNoXCIsXCJTaGlcIixcIlNoYVwiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OlwiZGQvbW0veXl5eVwiLGZpcnN0RGF5OjAsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7cmV0dXJuIHRoaXMuX2xlYXBZZWFyKGUueWVhcigpKX0sX2xlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiBvKDcqKHQ9dDwwP3QrMTp0KSsxLDE5KTw3fSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKSx0aGlzLl9sZWFwWWVhcih0LnllYXI/dC55ZWFyKCk6dCk/MTM6MTJ9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLFwiZFwiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLnllYXIoKSx0aGlzLnRvSkQoLTE9PT10PzE6dCsxLDcsMSktdGhpcy50b0pEKHQsNywxKX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC55ZWFyJiYoZT10Lm1vbnRoKCksdD10LnllYXIoKSksdGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKSwxMj09PWUmJnRoaXMubGVhcFllYXIodCk/MzA6OD09PWUmJjU9PT1vKHRoaXMuZGF5c0luWWVhcih0KSwxMCk/MzA6OT09PWUmJjM9PT1vKHRoaXMuZGF5c0luWWVhcih0KSwxMCk/Mjk6dGhpcy5kYXlzUGVyTW9udGhbZS0xXX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIDYhPT10aGlzLmRheU9mV2Vlayh0LGUscil9LGV4dHJhSW5mbzpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJue3llYXJUeXBlOih0aGlzLmxlYXBZZWFyKGkpP1wiZW1ib2xpc21pY1wiOlwiY29tbW9uXCIpK1wiIFwiK1tcImRlZmljaWVudFwiLFwicmVndWxhclwiLFwiY29tcGxldGVcIl1bdGhpcy5kYXlzSW5ZZWFyKGkpJTEwLTNdfX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7dD1pLnllYXIoKSxlPWkubW9udGgoKSxyPWkuZGF5KCk7dmFyIGE9dDw9MD90KzE6dCxvPXRoaXMuamRFcG9jaCt0aGlzLl9kZWxheTEoYSkrdGhpcy5fZGVsYXkyKGEpK3IrMTtpZihlPDcpe2Zvcih2YXIgcz03O3M8PXRoaXMubW9udGhzSW5ZZWFyKHQpO3MrKylvKz10aGlzLmRheXNJbk1vbnRoKHQscyk7Zm9yKHM9MTtzPGU7cysrKW8rPXRoaXMuZGF5c0luTW9udGgodCxzKX1lbHNlIGZvcihzPTc7czxlO3MrKylvKz10aGlzLmRheXNJbk1vbnRoKHQscyk7cmV0dXJuIG99LF9kZWxheTE6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcigoMjM1KnQtMjM0KS8xOSkscj0xMjA4NCsxMzc1MyplLG49MjkqZStNYXRoLmZsb29yKHIvMjU5MjApO3JldHVybiBvKDMqKG4rMSksNyk8MyYmbisrLG59LF9kZWxheTI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZGVsYXkxKHQtMSkscj10aGlzLl9kZWxheTEodCk7cmV0dXJuIHRoaXMuX2RlbGF5MSh0KzEpLXI9PTM1Nj8yOnItZT09MzgyPzE6MH0sZnJvbUpEOmZ1bmN0aW9uKHQpe3Q9TWF0aC5mbG9vcih0KSsuNTtmb3IodmFyIGU9TWF0aC5mbG9vcig5ODQ5NioodC10aGlzLmpkRXBvY2gpLzM1OTc1MzUxKS0xO3Q+PXRoaXMudG9KRCgtMT09PWU/MTplKzEsNywxKTspZSsrO2Zvcih2YXIgcj10PHRoaXMudG9KRChlLDEsMSk/NzoxO3Q+dGhpcy50b0pEKGUscix0aGlzLmRheXNJbk1vbnRoKGUscikpOylyKys7dmFyIG49dC10aGlzLnRvSkQoZSxyLDEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShlLHIsbil9fSksbi5jYWxlbmRhcnMuaGVicmV3PWF9LHtcIi4uL21haW5cIjo1NTYsXCJvYmplY3QtYXNzaWduXCI6NDQ3fV0sNTQ3OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcIi4uL21haW5cIiksaT10KFwib2JqZWN0LWFzc2lnblwiKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8XCJcIl18fHRoaXMucmVnaW9uYWxPcHRpb25zW1wiXCJdfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOlwiSXNsYW1pY1wiLGpkRXBvY2g6MTk0ODQzOS41LGRheXNQZXJNb250aDpbMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjldLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7XCJcIjp7bmFtZTpcIklzbGFtaWNcIixlcG9jaHM6W1wiQkhcIixcIkFIXCJdLG1vbnRoTmFtZXM6W1wiTXVoYXJyYW1cIixcIlNhZmFyXCIsXCJSYWJpJyBhbC1hd3dhbFwiLFwiUmFiaScgYWwtdGhhbmlcIixcIkp1bWFkYSBhbC1hd3dhbFwiLFwiSnVtYWRhIGFsLXRoYW5pXCIsXCJSYWphYlwiLFwiU2hhJ2FiYW5cIixcIlJhbWFkYW5cIixcIlNoYXd3YWxcIixcIkRodSBhbC1RaSdkYWhcIixcIkRodSBhbC1IaWpqYWhcIl0sbW9udGhOYW1lc1Nob3J0OltcIk11aFwiLFwiU2FmXCIsXCJSYWIxXCIsXCJSYWIyXCIsXCJKdW0xXCIsXCJKdW0yXCIsXCJSYWpcIixcIlNoYSdcIixcIlJhbVwiLFwiU2hhd1wiLFwiRGh1UVwiLFwiRGh1SFwiXSxkYXlOYW1lczpbXCJZYXdtIGFsLWFoYWRcIixcIllhd20gYWwtaXRobmF5blwiLFwiWWF3bSBhdGgtdGh1bGFhdGhhYSdcIixcIllhd20gYWwtYXJiaSdhYSdcIixcIllhd20gYWwta2hhbVxcdTAxMmJzXCIsXCJZYXdtIGFsLWp1bSdhXCIsXCJZYXdtIGFzLXNhYnRcIl0sZGF5TmFtZXNTaG9ydDpbXCJBaGFcIixcIkl0aFwiLFwiVGh1XCIsXCJBcmJcIixcIktoYVwiLFwiSnVtXCIsXCJTYWJcIl0sZGF5TmFtZXNNaW46W1wiQWhcIixcIkl0XCIsXCJUaFwiLFwiQXJcIixcIktoXCIsXCJKdVwiLFwiU2FcIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDpcInl5eXkvbW0vZGRcIixmaXJzdERheTo2LGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuKDExKnRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCkrMTQpJTMwPDExfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSxcImRcIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlYXBZZWFyKHQpPzM1NTozNTR9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIDUhPT10aGlzLmRheU9mV2Vlayh0LGUscil9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybiB0PWkueWVhcigpLGU9aS5tb250aCgpLHQ9dDw9MD90KzE6dCwocj1pLmRheSgpKStNYXRoLmNlaWwoMjkuNSooZS0xKSkrMzU0Kih0LTEpK01hdGguZmxvb3IoKDMrMTEqdCkvMzApK3RoaXMuamRFcG9jaC0xfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dD1NYXRoLmZsb29yKHQpKy41O3ZhciBlPU1hdGguZmxvb3IoKDMwKih0LXRoaXMuamRFcG9jaCkrMTA2NDYpLzEwNjMxKTtlPWU8PTA/ZS0xOmU7dmFyIHI9TWF0aC5taW4oMTIsTWF0aC5jZWlsKCh0LTI5LXRoaXMudG9KRChlLDEsMSkpLzI5LjUpKzEpLG49dC10aGlzLnRvSkQoZSxyLDEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShlLHIsbil9fSksbi5jYWxlbmRhcnMuaXNsYW1pYz1hfSx7XCIuLi9tYWluXCI6NTU2LFwib2JqZWN0LWFzc2lnblwiOjQ0N31dLDU0ODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuLi9tYWluXCIpLGk9dChcIm9iamVjdC1hc3NpZ25cIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fFwiXCJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZTpcIkp1bGlhblwiLGpkRXBvY2g6MTcyMTQyMy41LGRheXNQZXJNb250aDpbMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7XCJcIjp7bmFtZTpcIkp1bGlhblwiLGVwb2NoczpbXCJCQ1wiLFwiQURcIl0sbW9udGhOYW1lczpbXCJKYW51YXJ5XCIsXCJGZWJydWFyeVwiLFwiTWFyY2hcIixcIkFwcmlsXCIsXCJNYXlcIixcIkp1bmVcIixcIkp1bHlcIixcIkF1Z3VzdFwiLFwiU2VwdGVtYmVyXCIsXCJPY3RvYmVyXCIsXCJOb3ZlbWJlclwiLFwiRGVjZW1iZXJcIl0sbW9udGhOYW1lc1Nob3J0OltcIkphblwiLFwiRmViXCIsXCJNYXJcIixcIkFwclwiLFwiTWF5XCIsXCJKdW5cIixcIkp1bFwiLFwiQXVnXCIsXCJTZXBcIixcIk9jdFwiLFwiTm92XCIsXCJEZWNcIl0sZGF5TmFtZXM6W1wiU3VuZGF5XCIsXCJNb25kYXlcIixcIlR1ZXNkYXlcIixcIldlZG5lc2RheVwiLFwiVGh1cnNkYXlcIixcIkZyaWRheVwiLFwiU2F0dXJkYXlcIl0sZGF5TmFtZXNTaG9ydDpbXCJTdW5cIixcIk1vblwiLFwiVHVlXCIsXCJXZWRcIixcIlRodVwiLFwiRnJpXCIsXCJTYXRcIl0sZGF5TmFtZXNNaW46W1wiU3VcIixcIk1vXCIsXCJUdVwiLFwiV2VcIixcIlRoXCIsXCJGclwiLFwiU2FcIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDpcIm1tL2RkL3l5eXlcIixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybih0PWUueWVhcigpPDA/ZS55ZWFyKCkrMTplLnllYXIoKSklND09MH0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoNC0obi5kYXlPZldlZWsoKXx8NyksXCJkXCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybiB0PWkueWVhcigpLGU9aS5tb250aCgpLHI9aS5kYXkoKSx0PDAmJnQrKyxlPD0yJiYodC0tLGUrPTEyKSxNYXRoLmZsb29yKDM2NS4yNSoodCs0NzE2KSkrTWF0aC5mbG9vcigzMC42MDAxKihlKzEpKStyLTE1MjQuNX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodCsuNSkrMTUyNCxyPU1hdGguZmxvb3IoKGUtMTIyLjEpLzM2NS4yNSksbj1NYXRoLmZsb29yKDM2NS4yNSpyKSxpPU1hdGguZmxvb3IoKGUtbikvMzAuNjAwMSksYT1pLU1hdGguZmxvb3IoaTwxND8xOjEzKSxvPXItTWF0aC5mbG9vcihhPjI/NDcxNjo0NzE1KSxzPWUtbi1NYXRoLmZsb29yKDMwLjYwMDEqaSk7cmV0dXJuIG88PTAmJm8tLSx0aGlzLm5ld0RhdGUobyxhLHMpfX0pLG4uY2FsZW5kYXJzLmp1bGlhbj1hfSx7XCIuLi9tYWluXCI6NTU2LFwib2JqZWN0LWFzc2lnblwiOjQ0N31dLDU0OTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuLi9tYWluXCIpLGk9dChcIm9iamVjdC1hc3NpZ25cIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fFwiXCJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHQtZSpNYXRoLmZsb29yKHQvZSl9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBvKHQtMSxlKSsxfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOlwiTWF5YW5cIixqZEVwb2NoOjU4NDI4Mi41LGhhc1llYXJaZXJvOiEwLG1pbk1vbnRoOjAsZmlyc3RNb250aDowLG1pbkRheTowLHJlZ2lvbmFsT3B0aW9uczp7XCJcIjp7bmFtZTpcIk1heWFuXCIsZXBvY2hzOltcIlwiLFwiXCJdLG1vbnRoTmFtZXM6W1wiMFwiLFwiMVwiLFwiMlwiLFwiM1wiLFwiNFwiLFwiNVwiLFwiNlwiLFwiN1wiLFwiOFwiLFwiOVwiLFwiMTBcIixcIjExXCIsXCIxMlwiLFwiMTNcIixcIjE0XCIsXCIxNVwiLFwiMTZcIixcIjE3XCJdLG1vbnRoTmFtZXNTaG9ydDpbXCIwXCIsXCIxXCIsXCIyXCIsXCIzXCIsXCI0XCIsXCI1XCIsXCI2XCIsXCI3XCIsXCI4XCIsXCI5XCIsXCIxMFwiLFwiMTFcIixcIjEyXCIsXCIxM1wiLFwiMTRcIixcIjE1XCIsXCIxNlwiLFwiMTdcIl0sZGF5TmFtZXM6W1wiMFwiLFwiMVwiLFwiMlwiLFwiM1wiLFwiNFwiLFwiNVwiLFwiNlwiLFwiN1wiLFwiOFwiLFwiOVwiLFwiMTBcIixcIjExXCIsXCIxMlwiLFwiMTNcIixcIjE0XCIsXCIxNVwiLFwiMTZcIixcIjE3XCIsXCIxOFwiLFwiMTlcIl0sZGF5TmFtZXNTaG9ydDpbXCIwXCIsXCIxXCIsXCIyXCIsXCIzXCIsXCI0XCIsXCI1XCIsXCI2XCIsXCI3XCIsXCI4XCIsXCI5XCIsXCIxMFwiLFwiMTFcIixcIjEyXCIsXCIxM1wiLFwiMTRcIixcIjE1XCIsXCIxNlwiLFwiMTdcIixcIjE4XCIsXCIxOVwiXSxkYXlOYW1lc01pbjpbXCIwXCIsXCIxXCIsXCIyXCIsXCIzXCIsXCI0XCIsXCI1XCIsXCI2XCIsXCI3XCIsXCI4XCIsXCI5XCIsXCIxMFwiLFwiMTFcIixcIjEyXCIsXCIxM1wiLFwiMTRcIixcIjE1XCIsXCIxNlwiLFwiMTdcIixcIjE4XCIsXCIxOVwiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OlwiWVlZWS5tLmRcIixmaXJzdERheTowLGlzUlRMOiExLGhhYWJNb250aHM6W1wiUG9wXCIsXCJVb1wiLFwiWmlwXCIsXCJab3R6XCIsXCJUemVjXCIsXCJYdWxcIixcIllheGtpblwiLFwiTW9sXCIsXCJDaGVuXCIsXCJZYXhcIixcIlphY1wiLFwiQ2VoXCIsXCJNYWNcIixcIkthbmtpblwiLFwiTXVhblwiLFwiUGF4XCIsXCJLYXlhYlwiLFwiQ3Vta3VcIixcIlVheWViXCJdLHR6b2xraW5Nb250aHM6W1wiSW1peFwiLFwiSWtcIixcIkFrYmFsXCIsXCJLYW5cIixcIkNoaWNjaGFuXCIsXCJDaW1pXCIsXCJNYW5pa1wiLFwiTGFtYXRcIixcIk11bHVjXCIsXCJPY1wiLFwiQ2h1ZW5cIixcIkViXCIsXCJCZW5cIixcIkl4XCIsXCJNZW5cIixcIkNpYlwiLFwiQ2FiYW5cIixcIkV0em5hYlwiLFwiQ2F1YWNcIixcIkFoYXVcIl19fSxsZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLCExfSxmb3JtYXRZZWFyOmZ1bmN0aW9uKHQpe3Q9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLnllYXIoKTt2YXIgZT1NYXRoLmZsb29yKHQvNDAwKTtyZXR1cm4gdCU9NDAwLHQrPXQ8MD80MDA6MCxlK1wiLlwiK01hdGguZmxvb3IodC8yMCkrXCIuXCIrdCUyMH0sZm9yWWVhcjpmdW5jdGlvbih0KXtpZigodD10LnNwbGl0KFwiLlwiKSkubGVuZ3RoPDMpdGhyb3dcIkludmFsaWQgTWF5YW4geWVhclwiO2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49cGFyc2VJbnQodFtyXSwxMCk7aWYoTWF0aC5hYnMobik+MTl8fHI+MCYmbjwwKXRocm93XCJJbnZhbGlkIE1heWFuIHllYXJcIjtlPTIwKmUrbn1yZXR1cm4gZX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksMTh9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKSwwfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksMzYwfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpLDIwfSxkYXlzSW5XZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDV9LGRheU9mV2VlazpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpLmRheSgpfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSksITB9LGV4dHJhSW5mbzpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSkudG9KRCgpLGE9dGhpcy5fdG9IYWFiKGkpLG89dGhpcy5fdG9Uem9sa2luKGkpO3JldHVybntoYWFiTW9udGhOYW1lOnRoaXMubG9jYWwuaGFhYk1vbnRoc1thWzBdLTFdLGhhYWJNb250aDphWzBdLGhhYWJEYXk6YVsxXSx0em9sa2luRGF5TmFtZTp0aGlzLmxvY2FsLnR6b2xraW5Nb250aHNbb1swXS0xXSx0em9sa2luRGF5Om9bMF0sdHpvbGtpblRyZWNlbmE6b1sxXX19LF90b0hhYWI6ZnVuY3Rpb24odCl7dmFyIGU9bygodC09dGhpcy5qZEVwb2NoKSs4KzM0MCwzNjUpO3JldHVybltNYXRoLmZsb29yKGUvMjApKzEsbyhlLDIwKV19LF90b1R6b2xraW46ZnVuY3Rpb24odCl7cmV0dXJuW3MoKHQtPXRoaXMuamRFcG9jaCkrMjAsMjApLHModCs0LDEzKV19LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybiBpLmRheSgpKzIwKmkubW9udGgoKSszNjAqaS55ZWFyKCkrdGhpcy5qZEVwb2NofSxmcm9tSkQ6ZnVuY3Rpb24odCl7dD1NYXRoLmZsb29yKHQpKy41LXRoaXMuamRFcG9jaDt2YXIgZT1NYXRoLmZsb29yKHQvMzYwKTt0JT0zNjAsdCs9dDwwPzM2MDowO3ZhciByPU1hdGguZmxvb3IodC8yMCksbj10JTIwO3JldHVybiB0aGlzLm5ld0RhdGUoZSxyLG4pfX0pLG4uY2FsZW5kYXJzLm1heWFuPWF9LHtcIi4uL21haW5cIjo1NTYsXCJvYmplY3QtYXNzaWduXCI6NDQ3fV0sNTUwOltmdW5jdGlvbih0LGUscil7dmFyIG49dChcIi4uL21haW5cIiksaT10KFwib2JqZWN0LWFzc2lnblwiKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8XCJcIl18fHRoaXMucmVnaW9uYWxPcHRpb25zW1wiXCJdfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcjt2YXIgbz1uLmluc3RhbmNlKFwiZ3JlZ29yaWFuXCIpO2koYS5wcm90b3R5cGUse25hbWU6XCJOYW5ha3NoYWhpXCIsamRFcG9jaDoyMjU3NjczLjUsZGF5c1Blck1vbnRoOlszMSwzMSwzMSwzMSwzMSwzMCwzMCwzMCwzMCwzMCwzMCwzMF0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOntcIlwiOntuYW1lOlwiTmFuYWtzaGFoaVwiLGVwb2NoczpbXCJCTlwiLFwiQU5cIl0sbW9udGhOYW1lczpbXCJDaGV0XCIsXCJWYWlzYWtoXCIsXCJKZXRoXCIsXCJIYXJoXCIsXCJTYXdhblwiLFwiQmhhZG9uXCIsXCJBc3N1XCIsXCJLYXRha1wiLFwiTWFnaGFyXCIsXCJQb2hcIixcIk1hZ2hcIixcIlBoYWd1blwiXSxtb250aE5hbWVzU2hvcnQ6W1wiQ2hlXCIsXCJWYWlcIixcIkpldFwiLFwiSGFyXCIsXCJTYXdcIixcIkJoYVwiLFwiQXNzXCIsXCJLYXRcIixcIk1nclwiLFwiUG9oXCIsXCJNZ2hcIixcIlBoYVwiXSxkYXlOYW1lczpbXCJTb212YWFyXCIsXCJNYW5nYWx2YXJcIixcIkJ1ZGh2YWFyXCIsXCJWZWVydmFhclwiLFwiU2h1a2FydmFhclwiLFwiU2FuaWNoYXJ2YWFyXCIsXCJFdHZhYXJcIl0sZGF5TmFtZXNTaG9ydDpbXCJTb21cIixcIk1hbmdhbFwiLFwiQnVkaFwiLFwiVmVlclwiLFwiU2h1a2FyXCIsXCJTYW5pY2hhclwiLFwiRXRcIl0sZGF5TmFtZXNNaW46W1wiU29cIixcIk1hXCIsXCJCdVwiLFwiVmVcIixcIlNoXCIsXCJTYVwiLFwiRXRcIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDpcImRkLW1tLXl5eXlcIixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXJ8fG4ucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWRZZWFyKTtyZXR1cm4gby5sZWFwWWVhcihlLnllYXIoKSsoZS55ZWFyKCk8MT8xOjApKzE0NjkpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgxLShuLmRheU9mV2VlaygpfHw3KSxcImRcIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMTI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZE1vbnRoKTsodD1pLnllYXIoKSk8MCYmdCsrO2Zvcih2YXIgYT1pLmRheSgpLHM9MTtzPGkubW9udGgoKTtzKyspYSs9dGhpcy5kYXlzUGVyTW9udGhbcy0xXTtyZXR1cm4gYStvLnRvSkQodCsxNDY4LDMsMTMpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dD1NYXRoLmZsb29yKHQrLjUpO2Zvcih2YXIgZT1NYXRoLmZsb29yKCh0LSh0aGlzLmpkRXBvY2gtMSkpLzM2Nik7dD49dGhpcy50b0pEKGUrMSwxLDEpOyllKys7Zm9yKHZhciByPXQtTWF0aC5mbG9vcih0aGlzLnRvSkQoZSwxLDEpKy41KSsxLG49MTtyPnRoaXMuZGF5c0luTW9udGgoZSxuKTspci09dGhpcy5kYXlzSW5Nb250aChlLG4pLG4rKztyZXR1cm4gdGhpcy5uZXdEYXRlKGUsbixyKX19KSxuLmNhbGVuZGFycy5uYW5ha3NoYWhpPWF9LHtcIi4uL21haW5cIjo1NTYsXCJvYmplY3QtYXNzaWduXCI6NDQ3fV0sNTUxOltmdW5jdGlvbih0LGUscil7dmFyIG49dChcIi4uL21haW5cIiksaT10KFwib2JqZWN0LWFzc2lnblwiKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8XCJcIl18fHRoaXMucmVnaW9uYWxPcHRpb25zW1wiXCJdfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOlwiTmVwYWxpXCIsamRFcG9jaDoxNzAwNzA5LjUsZGF5c1Blck1vbnRoOlszMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEsZGF5c1BlclllYXI6MzY1LHJlZ2lvbmFsT3B0aW9uczp7XCJcIjp7bmFtZTpcIk5lcGFsaVwiLGVwb2NoczpbXCJCQlNcIixcIkFCU1wiXSxtb250aE5hbWVzOltcIkJhaXNha2hcIixcIkplc3RoYVwiLFwiQXNoYWRoXCIsXCJTaHJhd2FuXCIsXCJCaGFkcmFcIixcIkFzaHdpblwiLFwiS2FydGlrXCIsXCJNYW5nc2lyXCIsXCJQYXVzaFwiLFwiTWFuZ2hcIixcIkZhbGd1blwiLFwiQ2hhaXRyYVwiXSxtb250aE5hbWVzU2hvcnQ6W1wiQmFpXCIsXCJKZVwiLFwiQXNcIixcIlNocmFcIixcIkJoYVwiLFwiQXNoXCIsXCJLYXJcIixcIk1hbmdcIixcIlBhdVwiLFwiTWFcIixcIkZhbFwiLFwiQ2hhaVwiXSxkYXlOYW1lczpbXCJBYWl0YWJhYXJcIixcIlNvbWJhYXJcIixcIk1hbmdsYmFhclwiLFwiQnVkaGFiYWFyXCIsXCJCaWhpYmFhclwiLFwiU2h1a3JhYmFhclwiLFwiU2hhbmliYWFyXCJdLGRheU5hbWVzU2hvcnQ6W1wiQWFpdGFcIixcIlNvbVwiLFwiTWFuZ2xcIixcIkJ1ZGhhXCIsXCJCaWhpXCIsXCJTaHVrcmFcIixcIlNoYW5pXCJdLGRheU5hbWVzTWluOltcIkFhaVwiLFwiU29cIixcIk1hblwiLFwiQnVcIixcIkJpXCIsXCJTaHVcIixcIlNoYVwiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OlwiZGQvbW0veXl5eVwiLGZpcnN0RGF5OjEsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kYXlzSW5ZZWFyKHQpIT09dGhpcy5kYXlzUGVyWWVhcn0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksXCJkXCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtpZih0PXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCksXCJ1bmRlZmluZWRcIj09dHlwZW9mIHRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbdF0pcmV0dXJuIHRoaXMuZGF5c1BlclllYXI7Zm9yKHZhciBlPTAscj10aGlzLm1pbk1vbnRoO3I8PTEyO3IrKyllKz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3RdW3JdO3JldHVybiBlfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3JldHVybiB0LnllYXImJihlPXQubW9udGgoKSx0PXQueWVhcigpKSx0aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpLFwidW5kZWZpbmVkXCI9PXR5cGVvZiB0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3RdP3RoaXMuZGF5c1Blck1vbnRoW2UtMV06dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVt0XVtlXX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIDYhPT10aGlzLmRheU9mV2Vlayh0LGUscil9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3Q9aS55ZWFyKCksZT1pLm1vbnRoKCkscj1pLmRheSgpO3ZhciBhPW4uaW5zdGFuY2UoKSxvPTAscz1lLGw9dDt0aGlzLl9jcmVhdGVNaXNzaW5nQ2FsZW5kYXJEYXRhKHQpO3ZhciBjPXQtKHM+OXx8OT09PXMmJnI+PXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbF1bMF0/NTY6NTcpO2Zvcig5IT09ZSYmKG89cixzLS0pOzkhPT1zOylzPD0wJiYocz0xMixsLS0pLG8rPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbF1bc10scy0tO3JldHVybiA5PT09ZT8obys9ci10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdWzBdKTwwJiYobys9YS5kYXlzSW5ZZWFyKGMpKTpvKz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdWzldLXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbF1bMF0sYS5uZXdEYXRlKGMsMSwxKS5hZGQobyxcImRcIikudG9KRCgpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9bi5pbnN0YW5jZSgpLmZyb21KRCh0KSxyPWUueWVhcigpLGk9ZS5kYXlPZlllYXIoKSxhPXIrNTY7dGhpcy5fY3JlYXRlTWlzc2luZ0NhbGVuZGFyRGF0YShhKTtmb3IodmFyIG89OSxzPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbYV1bMF0sbD10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2FdW29dLXMrMTtpPmw7KSsrbz4xMiYmKG89MSxhKyspLGwrPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbYV1bb107dmFyIGM9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVthXVtvXS0obC1pKTtyZXR1cm4gdGhpcy5uZXdEYXRlKGEsbyxjKX0sX2NyZWF0ZU1pc3NpbmdDYWxlbmRhckRhdGE6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kYXlzUGVyTW9udGguc2xpY2UoMCk7ZS51bnNoaWZ0KDE3KTtmb3IodmFyIHI9dC0xO3I8dCsyO3IrKylcInVuZGVmaW5lZFwiPT10eXBlb2YgdGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtyXSYmKHRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbcl09ZSl9LE5FUEFMSV9DQUxFTkRBUl9EQVRBOnsxOTcwOlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3MTpbMTgsMzEsMzEsMzIsMzEsMzIsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5NzI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwxOTczOlsxOSwzMCwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMTk3NDpbMTksMzEsMzEsMzIsMzAsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5NzU6WzE4LDMxLDMxLDMyLDMyLDMwLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTc2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMTk3NzpbMTgsMzEsMzIsMzEsMzIsMzEsMzEsMjksMzAsMjksMzAsMjksMzFdLDE5Nzg6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTc5OlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMTk4MDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDE5ODE6WzE4LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwxOTgyOlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk4MzpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5ODQ6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwxOTg1OlsxOCwzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwzMCwzMF0sMTk4NjpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5ODc6WzE4LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTg4OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMTk4OTpbMTgsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTA6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTkxOlsxOCwzMSwzMiwzMSwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDE5OTM6WzE4LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTk0OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5NTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzBdLDE5OTY6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwxOTk3OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5ODpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDAwOlsxNywzMCwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjAwMTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMDI6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDAzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAwNDpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMDU6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDA2OlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwNzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMDg6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDI5LDMxXSwyMDA5OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxMDpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMTE6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDEyOlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwzMCwzMF0sMjAxMzpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMTQ6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDE1OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAxNjpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwMTc6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDE4OlsxOCwzMSwzMiwzMSwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxOTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMjA6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDIxOlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAyMjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzBdLDIwMjM6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDI0OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAyNTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjY6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDI3OlsxNywzMCwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjAyODpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjk6WzE4LDMxLDMxLDMyLDMxLDMyLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDMwOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwzMCwzMCwzMCwzMV0sMjAzMTpbMTcsMzEsMzIsMzEsMzIsMzEsMzEsMzEsMzEsMzEsMzEsMzEsMzFdLDIwMzI6WzE3LDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyXSwyMDMzOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAzNDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMzU6WzE3LDMwLDMyLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDI5LDMxXSwyMDM2OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAzNzpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMzg6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDM5OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwzMCwzMF0sMjA0MDpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNDE6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDQyOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA0MzpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwNDQ6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDQ1OlsxOCwzMSwzMiwzMSwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0NjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNDc6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDQ4OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0OTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzBdLDIwNTA6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDUxOlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA1MjpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNTM6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDU0OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA1NTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMzAsMjksMzBdLDIwNTY6WzE3LDMxLDMxLDMyLDMxLDMyLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDU3OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA1ODpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwNTk6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDYwOlsxNywzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2MTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNjI6WzE3LDMwLDMyLDMxLDMyLDMxLDMxLDI5LDMwLDI5LDMwLDI5LDMxXSwyMDYzOlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2NDpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNjU6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDY2OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwyOSwzMV0sMjA2NzpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNjg6WzE3LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY5OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA3MDpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwNzE6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDcyOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3MzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNzQ6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDc1OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3NjpbMTYsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzBdLDIwNzc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDc4OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3OTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwODA6WzE2LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDgxOlsxNywzMSwzMSwzMiwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODM6WzE3LDMxLDMxLDMyLDMxLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg0OlsxNywzMSwzMSwzMiwzMSwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NTpbMTcsMzEsMzIsMzEsMzIsMzEsMzEsMzAsMzAsMjksMzAsMzAsMzBdLDIwODY6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg3OlsxNiwzMSwzMSwzMiwzMSwzMSwzMSwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4ODpbMTYsMzAsMzEsMzIsMzIsMzAsMzEsMzAsMzAsMjksMzAsMzAsMzBdLDIwODk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDkwOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MTpbMTYsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTI6WzE2LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDkzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5NDpbMTcsMzEsMzEsMzIsMzEsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTU6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDMwLDMwLDMwXSwyMDk2OlsxNywzMCwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA5NzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTg6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDI5LDMwLDI5LDMwLDMwLDMxXSwyMDk5OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwyOSwzMCwzMCwzMF0sMjEwMDpbMTcsMzEsMzIsMzEsMzIsMzAsMzEsMzAsMjksMzAsMjksMzAsMzBdfX0pLG4uY2FsZW5kYXJzLm5lcGFsaT1hfSx7XCIuLi9tYWluXCI6NTU2LFwib2JqZWN0LWFzc2lnblwiOjQ0N31dLDU1MjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuLi9tYWluXCIpLGk9dChcIm9iamVjdC1hc3NpZ25cIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fFwiXCJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHQtZSpNYXRoLmZsb29yKHQvZSl9YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6XCJQZXJzaWFuXCIsamRFcG9jaDoxOTQ4MzIwLjUsZGF5c1Blck1vbnRoOlszMSwzMSwzMSwzMSwzMSwzMSwzMCwzMCwzMCwzMCwzMCwyOV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOntcIlwiOntuYW1lOlwiUGVyc2lhblwiLGVwb2NoczpbXCJCUFwiLFwiQVBcIl0sbW9udGhOYW1lczpbXCJGYXJ2YXJkaW5cIixcIk9yZGliZWhlc2h0XCIsXCJLaG9yZGFkXCIsXCJUaXJcIixcIk1vcmRhZFwiLFwiU2hhaHJpdmFyXCIsXCJNZWhyXCIsXCJBYmFuXCIsXCJBemFyXCIsXCJEYXlcIixcIkJhaG1hblwiLFwiRXNmYW5kXCJdLG1vbnRoTmFtZXNTaG9ydDpbXCJGYXJcIixcIk9yZFwiLFwiS2hvXCIsXCJUaXJcIixcIk1vclwiLFwiU2hhXCIsXCJNZWhcIixcIkFiYVwiLFwiQXphXCIsXCJEYXlcIixcIkJhaFwiLFwiRXNmXCJdLGRheU5hbWVzOltcIllla3NoYW1iZVwiLFwiRG9zaGFtYmVcIixcIlNlc2hhbWJlXCIsXCJDaFxceGU2aGFyc2hhbWJlXCIsXCJQYW5qc2hhbWJlXCIsXCJKb20nZVwiLFwiU2hhbWJlXCJdLGRheU5hbWVzU2hvcnQ6W1wiWWVrXCIsXCJEb1wiLFwiU2VcIixcIkNoXFx4ZTZcIixcIlBhbmpcIixcIkpvbVwiLFwiU2hhXCJdLGRheU5hbWVzTWluOltcIlllXCIsXCJEb1wiLFwiU2VcIixcIkNoXCIsXCJQYVwiLFwiSm9cIixcIlNoXCJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6XCJ5eXl5L21tL2RkXCIsZmlyc3REYXk6Nixpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4gNjgyKigoZS55ZWFyKCktKGUueWVhcigpPjA/NDc0OjQ3MykpJTI4MjArNDc0KzM4KSUyODE2PDY4Mn0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLShuLmRheU9mV2VlaygpKzEpJTcsXCJkXCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDEyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNSE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7dD1pLnllYXIoKSxlPWkubW9udGgoKSxyPWkuZGF5KCk7dmFyIGE9dC0odD49MD80NzQ6NDczKSxzPTQ3NCtvKGEsMjgyMCk7cmV0dXJuIHIrKGU8PTc/MzEqKGUtMSk6MzAqKGUtMSkrNikrTWF0aC5mbG9vcigoNjgyKnMtMTEwKS8yODE2KSszNjUqKHMtMSkrMTAyOTk4MypNYXRoLmZsb29yKGEvMjgyMCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT0odD1NYXRoLmZsb29yKHQpKy41KS10aGlzLnRvSkQoNDc1LDEsMSkscj1NYXRoLmZsb29yKGUvMTAyOTk4Myksbj1vKGUsMTAyOTk4MyksaT0yODIwO2lmKDEwMjk5ODIhPT1uKXt2YXIgYT1NYXRoLmZsb29yKG4vMzY2KSxzPW8obiwzNjYpO2k9TWF0aC5mbG9vcigoMjEzNCphKzI4MTYqcysyODE1KS8xMDI4NTIyKSthKzF9dmFyIGw9aSsyODIwKnIrNDc0O2w9bDw9MD9sLTE6bDt2YXIgYz10LXRoaXMudG9KRChsLDEsMSkrMSx1PWM8PTE4Nj9NYXRoLmNlaWwoYy8zMSk6TWF0aC5jZWlsKChjLTYpLzMwKSxoPXQtdGhpcy50b0pEKGwsdSwxKSsxO3JldHVybiB0aGlzLm5ld0RhdGUobCx1LGgpfX0pLG4uY2FsZW5kYXJzLnBlcnNpYW49YSxuLmNhbGVuZGFycy5qYWxhbGk9YX0se1wiLi4vbWFpblwiOjU1NixcIm9iamVjdC1hc3NpZ25cIjo0NDd9XSw1NTM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi4vbWFpblwiKSxpPXQoXCJvYmplY3QtYXNzaWduXCIpLGE9bi5pbnN0YW5jZSgpO2Z1bmN0aW9uIG8odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHxcIlwiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbXCJcIl19by5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoby5wcm90b3R5cGUse25hbWU6XCJUYWl3YW5cIixqZEVwb2NoOjI0MTk0MDIuNSx5ZWFyc09mZnNldDoxOTExLGRheXNQZXJNb250aDpbMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7XCJcIjp7bmFtZTpcIlRhaXdhblwiLGVwb2NoczpbXCJCUk9DXCIsXCJST0NcIl0sbW9udGhOYW1lczpbXCJKYW51YXJ5XCIsXCJGZWJydWFyeVwiLFwiTWFyY2hcIixcIkFwcmlsXCIsXCJNYXlcIixcIkp1bmVcIixcIkp1bHlcIixcIkF1Z3VzdFwiLFwiU2VwdGVtYmVyXCIsXCJPY3RvYmVyXCIsXCJOb3ZlbWJlclwiLFwiRGVjZW1iZXJcIl0sbW9udGhOYW1lc1Nob3J0OltcIkphblwiLFwiRmViXCIsXCJNYXJcIixcIkFwclwiLFwiTWF5XCIsXCJKdW5cIixcIkp1bFwiLFwiQXVnXCIsXCJTZXBcIixcIk9jdFwiLFwiTm92XCIsXCJEZWNcIl0sZGF5TmFtZXM6W1wiU3VuZGF5XCIsXCJNb25kYXlcIixcIlR1ZXNkYXlcIixcIldlZG5lc2RheVwiLFwiVGh1cnNkYXlcIixcIkZyaWRheVwiLFwiU2F0dXJkYXlcIl0sZGF5TmFtZXNTaG9ydDpbXCJTdW5cIixcIk1vblwiLFwiVHVlXCIsXCJXZWRcIixcIlRodVwiLFwiRnJpXCIsXCJTYXRcIl0sZGF5TmFtZXNNaW46W1wiU3VcIixcIk1vXCIsXCJUdVwiLFwiV2VcIixcIlRoXCIsXCJGclwiLFwiU2FcIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDpcInl5eXkvbW0vZGRcIixmaXJzdERheToxLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3Q9dGhpcy5fdDJnWWVhcihlLnllYXIoKSk7cmV0dXJuIGEubGVhcFllYXIodCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLndlZWtPZlllYXIodCxpLm1vbnRoKCksaS5kYXkoKSl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLnRvSkQodCxpLm1vbnRoKCksaS5kYXkoKSl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1hLmZyb21KRCh0KSxyPXRoaXMuX2cydFllYXIoZS55ZWFyKCkpO3JldHVybiB0aGlzLm5ld0RhdGUocixlLm1vbnRoKCksZS5kYXkoKSl9LF90MmdZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0K3RoaXMueWVhcnNPZmZzZXQrKHQ+PS10aGlzLnllYXJzT2Zmc2V0JiZ0PD0tMT8xOjApfSxfZzJ0WWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdC10aGlzLnllYXJzT2Zmc2V0LSh0Pj0xJiZ0PD10aGlzLnllYXJzT2Zmc2V0PzE6MCl9fSksbi5jYWxlbmRhcnMudGFpd2FuPW99LHtcIi4uL21haW5cIjo1NTYsXCJvYmplY3QtYXNzaWduXCI6NDQ3fV0sNTU0OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcIi4uL21haW5cIiksaT10KFwib2JqZWN0LWFzc2lnblwiKSxhPW4uaW5zdGFuY2UoKTtmdW5jdGlvbiBvKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8XCJcIl18fHRoaXMucmVnaW9uYWxPcHRpb25zW1wiXCJdfW8ucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKG8ucHJvdG90eXBlLHtuYW1lOlwiVGhhaVwiLGpkRXBvY2g6MTUyMzA5OC41LHllYXJzT2Zmc2V0OjU0MyxkYXlzUGVyTW9udGg6WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6e1wiXCI6e25hbWU6XCJUaGFpXCIsZXBvY2hzOltcIkJCRVwiLFwiQkVcIl0sbW9udGhOYW1lczpbXCJKYW51YXJ5XCIsXCJGZWJydWFyeVwiLFwiTWFyY2hcIixcIkFwcmlsXCIsXCJNYXlcIixcIkp1bmVcIixcIkp1bHlcIixcIkF1Z3VzdFwiLFwiU2VwdGVtYmVyXCIsXCJPY3RvYmVyXCIsXCJOb3ZlbWJlclwiLFwiRGVjZW1iZXJcIl0sbW9udGhOYW1lc1Nob3J0OltcIkphblwiLFwiRmViXCIsXCJNYXJcIixcIkFwclwiLFwiTWF5XCIsXCJKdW5cIixcIkp1bFwiLFwiQXVnXCIsXCJTZXBcIixcIk9jdFwiLFwiTm92XCIsXCJEZWNcIl0sZGF5TmFtZXM6W1wiU3VuZGF5XCIsXCJNb25kYXlcIixcIlR1ZXNkYXlcIixcIldlZG5lc2RheVwiLFwiVGh1cnNkYXlcIixcIkZyaWRheVwiLFwiU2F0dXJkYXlcIl0sZGF5TmFtZXNTaG9ydDpbXCJTdW5cIixcIk1vblwiLFwiVHVlXCIsXCJXZWRcIixcIlRodVwiLFwiRnJpXCIsXCJTYXRcIl0sZGF5TmFtZXNNaW46W1wiU3VcIixcIk1vXCIsXCJUdVwiLFwiV2VcIixcIlRoXCIsXCJGclwiLFwiU2FcIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDpcImRkL21tL3l5eXlcIixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3Q9dGhpcy5fdDJnWWVhcihlLnllYXIoKSk7cmV0dXJuIGEubGVhcFllYXIodCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLndlZWtPZlllYXIodCxpLm1vbnRoKCksaS5kYXkoKSl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLnRvSkQodCxpLm1vbnRoKCksaS5kYXkoKSl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1hLmZyb21KRCh0KSxyPXRoaXMuX2cydFllYXIoZS55ZWFyKCkpO3JldHVybiB0aGlzLm5ld0RhdGUocixlLm1vbnRoKCksZS5kYXkoKSl9LF90MmdZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0LXRoaXMueWVhcnNPZmZzZXQtKHQ+PTEmJnQ8PXRoaXMueWVhcnNPZmZzZXQ/MTowKX0sX2cydFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQrdGhpcy55ZWFyc09mZnNldCsodD49LXRoaXMueWVhcnNPZmZzZXQmJnQ8PS0xPzE6MCl9fSksbi5jYWxlbmRhcnMudGhhaT1vfSx7XCIuLi9tYWluXCI6NTU2LFwib2JqZWN0LWFzc2lnblwiOjQ0N31dLDU1NTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuLi9tYWluXCIpLGk9dChcIm9iamVjdC1hc3NpZ25cIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fFwiXCJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZTpcIlVtbUFsUXVyYVwiLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7XCJcIjp7bmFtZTpcIlVtbSBhbC1RdXJhXCIsZXBvY2hzOltcIkJIXCIsXCJBSFwiXSxtb250aE5hbWVzOltcIkFsLU11aGFycmFtXCIsXCJTYWZhclwiLFwiUmFiaScgYWwtYXd3YWxcIixcIlJhYmknIEFsLVRoYW5pXCIsXCJKdW1hZGEgQWwtQXd3YWxcIixcIkp1bWFkYSBBbC1UaGFuaVwiLFwiUmFqYWJcIixcIlNoYSdhYmFuXCIsXCJSYW1hZGFuXCIsXCJTaGF3d2FsXCIsXCJEaHUgYWwtUWknZGFoXCIsXCJEaHUgYWwtSGlqamFoXCJdLG1vbnRoTmFtZXNTaG9ydDpbXCJNdWhcIixcIlNhZlwiLFwiUmFiMVwiLFwiUmFiMlwiLFwiSnVtMVwiLFwiSnVtMlwiLFwiUmFqXCIsXCJTaGEnXCIsXCJSYW1cIixcIlNoYXdcIixcIkRodVFcIixcIkRodUhcIl0sZGF5TmFtZXM6W1wiWWF3bSBhbC1BaGFkXCIsXCJZYXdtIGFsLUl0aG5haW5cIixcIllhd20gYWwtVGhhbFxcdTAxMDF0aFxcdTAxMDFcXHUyMDE5XCIsXCJZYXdtIGFsLUFyYmFcXHUyMDE4XFx1MDEwMVxcdTIwMTlcIixcIllhd20gYWwtS2hhbVxcdTAxMmJzXCIsXCJZYXdtIGFsLUp1bVxcdTIwMThhXCIsXCJZYXdtIGFsLVNhYnRcIl0sZGF5TmFtZXNNaW46W1wiQWhcIixcIkl0aFwiLFwiVGhcIixcIkFyXCIsXCJLaFwiLFwiSnVcIixcIlNhXCJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6XCJ5eXl5L21tL2RkXCIsZmlyc3REYXk6Nixpc1JUTDohMH19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4gMzU1PT09dGhpcy5kYXlzSW5ZZWFyKGUueWVhcigpKX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksXCJkXCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTE7cjw9MTI7cisrKWUrPXRoaXMuZGF5c0luTW9udGgodCxyKTtyZXR1cm4gZX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKS50b0pEKCktMjRlNSsuNSxpPTAsYT0wO2E8by5sZW5ndGg7YSsrKXtpZihvW2FdPnIpcmV0dXJuIG9baV0tb1tpLTFdO2krK31yZXR1cm4gMzB9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiA1IT09dGhpcy5kYXlPZldlZWsodCxlLHIpfSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKSxhPTEyKihpLnllYXIoKS0xKStpLm1vbnRoKCktMTUyOTI7cmV0dXJuIGkuZGF5KCkrb1thLTFdLTErMjRlNS0uNX0sZnJvbUpEOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LTI0ZTUrLjUscj0wLG49MDtuPG8ubGVuZ3RoJiYhKG9bbl0+ZSk7bisrKXIrKzt2YXIgaT1yKzE1MjkyLGE9TWF0aC5mbG9vcigoaS0xKS8xMikscz1hKzEsbD1pLTEyKmEsYz1lLW9bci0xXSsxO3JldHVybiB0aGlzLm5ld0RhdGUocyxsLGMpfSxpc1ZhbGlkOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1uLmJhc2VDYWxlbmRhci5wcm90b3R5cGUuaXNWYWxpZC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkmJihpPSh0PW51bGwhPXQueWVhcj90LnllYXI6dCk+PTEyNzYmJnQ8PTE1MDApLGl9LF92YWxpZGF0ZTpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1uLmJhc2VDYWxlbmRhci5wcm90b3R5cGUuX3ZhbGlkYXRlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihhLnllYXI8MTI3Nnx8YS55ZWFyPjE1MDApdGhyb3cgaS5yZXBsYWNlKC9cXHswXFx9Lyx0aGlzLmxvY2FsLm5hbWUpO3JldHVybiBhfX0pLG4uY2FsZW5kYXJzLnVtbWFscXVyYT1hO3ZhciBvPVsyMCw1MCw3OSwxMDksMTM4LDE2OCwxOTcsMjI3LDI1NiwyODYsMzE1LDM0NSwzNzQsNDA0LDQzMyw0NjMsNDkyLDUyMiw1NTEsNTgxLDYxMSw2NDEsNjcwLDcwMCw3MjksNzU5LDc4OCw4MTgsODQ3LDg3Nyw5MDYsOTM2LDk2NSw5OTUsMTAyNCwxMDU0LDEwODMsMTExMywxMTQyLDExNzIsMTIwMSwxMjMxLDEyNjAsMTI5MCwxMzIwLDEzNTAsMTM3OSwxNDA5LDE0MzgsMTQ2OCwxNDk3LDE1MjcsMTU1NiwxNTg2LDE2MTUsMTY0NSwxNjc0LDE3MDQsMTczMywxNzYzLDE3OTIsMTgyMiwxODUxLDE4ODEsMTkxMCwxOTQwLDE5NjksMTk5OSwyMDI4LDIwNTgsMjA4NywyMTE3LDIxNDYsMjE3NiwyMjA1LDIyMzUsMjI2NCwyMjk0LDIzMjMsMjM1MywyMzgzLDI0MTMsMjQ0MiwyNDcyLDI1MDEsMjUzMSwyNTYwLDI1OTAsMjYxOSwyNjQ5LDI2NzgsMjcwOCwyNzM3LDI3NjcsMjc5NiwyODI2LDI4NTUsMjg4NSwyOTE0LDI5NDQsMjk3MywzMDAzLDMwMzIsMzA2MiwzMDkxLDMxMjEsMzE1MCwzMTgwLDMyMDksMzIzOSwzMjY4LDMyOTgsMzMyNywzMzU3LDMzODYsMzQxNiwzNDQ2LDM0NzYsMzUwNSwzNTM1LDM1NjQsMzU5NCwzNjIzLDM2NTMsMzY4MiwzNzEyLDM3NDEsMzc3MSwzODAwLDM4MzAsMzg1OSwzODg5LDM5MTgsMzk0OCwzOTc3LDQwMDcsNDAzNiw0MDY2LDQwOTUsNDEyNSw0MTU1LDQxODUsNDIxNCw0MjQ0LDQyNzMsNDMwMyw0MzMyLDQzNjIsNDM5MSw0NDIxLDQ0NTAsNDQ4MCw0NTA5LDQ1MzksNDU2OCw0NTk4LDQ2MjcsNDY1Nyw0Njg2LDQ3MTYsNDc0NSw0Nzc1LDQ4MDQsNDgzNCw0ODYzLDQ4OTMsNDkyMiw0OTUyLDQ5ODEsNTAxMSw1MDQwLDUwNzAsNTA5OSw1MTI5LDUxNTgsNTE4OCw1MjE4LDUyNDgsNTI3Nyw1MzA3LDUzMzYsNTM2Niw1Mzk1LDU0MjUsNTQ1NCw1NDg0LDU1MTMsNTU0Myw1NTcyLDU2MDIsNTYzMSw1NjYxLDU2OTAsNTcyMCw1NzQ5LDU3NzksNTgwOCw1ODM4LDU4NjcsNTg5Nyw1OTI2LDU5NTYsNTk4NSw2MDE1LDYwNDQsNjA3NCw2MTAzLDYxMzMsNjE2Miw2MTkyLDYyMjEsNjI1MSw2MjgxLDYzMTEsNjM0MCw2MzcwLDYzOTksNjQyOSw2NDU4LDY0ODgsNjUxNyw2NTQ3LDY1NzYsNjYwNiw2NjM1LDY2NjUsNjY5NCw2NzI0LDY3NTMsNjc4Myw2ODEyLDY4NDIsNjg3MSw2OTAxLDY5MzAsNjk2MCw2OTg5LDcwMTksNzA0OCw3MDc4LDcxMDcsNzEzNyw3MTY2LDcxOTYsNzIyNSw3MjU1LDcyODQsNzMxNCw3MzQ0LDczNzQsNzQwMyw3NDMzLDc0NjIsNzQ5Miw3NTIxLDc1NTEsNzU4MCw3NjEwLDc2MzksNzY2OSw3Njk4LDc3MjgsNzc1Nyw3Nzg3LDc4MTYsNzg0Niw3ODc1LDc5MDUsNzkzNCw3OTY0LDc5OTMsODAyMyw4MDUzLDgwODMsODExMiw4MTQyLDgxNzEsODIwMSw4MjMwLDgyNjAsODI4OSw4MzE5LDgzNDgsODM3OCw4NDA3LDg0MzcsODQ2Niw4NDk2LDg1MjUsODU1NSw4NTg0LDg2MTQsODY0Myw4NjczLDg3MDIsODczMiw4NzYxLDg3OTEsODgyMSw4ODUwLDg4ODAsODkwOSw4OTM4LDg5NjgsODk5Nyw5MDI3LDkwNTYsOTA4Niw5MTE1LDkxNDUsOTE3NSw5MjA1LDkyMzQsOTI2NCw5MjkzLDkzMjIsOTM1Miw5MzgxLDk0MTAsOTQ0MCw5NDcwLDk0OTksOTUyOSw5NTU5LDk1ODksOTYxOCw5NjQ4LDk2NzcsOTcwNiw5NzM2LDk3NjUsOTc5NCw5ODI0LDk4NTMsOTg4Myw5OTEzLDk5NDMsOTk3MiwxMDAwMiwxMDAzMiwxMDA2MSwxMDA5MCwxMDEyMCwxMDE0OSwxMDE3OCwxMDIwOCwxMDIzNywxMDI2NywxMDI5NywxMDMyNiwxMDM1NiwxMDM4NiwxMDQxNSwxMDQ0NSwxMDQ3NCwxMDUwNCwxMDUzMywxMDU2MiwxMDU5MiwxMDYyMSwxMDY1MSwxMDY4MCwxMDcxMCwxMDc0MCwxMDc3MCwxMDc5OSwxMDgyOSwxMDg1OCwxMDg4OCwxMDkxNywxMDk0NywxMDk3NiwxMTAwNSwxMTAzNSwxMTA2NCwxMTA5NCwxMTEyNCwxMTE1MywxMTE4MywxMTIxMywxMTI0MiwxMTI3MiwxMTMwMSwxMTMzMSwxMTM2MCwxMTM4OSwxMTQxOSwxMTQ0OCwxMTQ3OCwxMTUwNywxMTUzNywxMTU2NywxMTU5NiwxMTYyNiwxMTY1NSwxMTY4NSwxMTcxNSwxMTc0NCwxMTc3NCwxMTgwMywxMTgzMiwxMTg2MiwxMTg5MSwxMTkyMSwxMTk1MCwxMTk4MCwxMjAxMCwxMjAzOSwxMjA2OSwxMjA5OSwxMjEyOCwxMjE1OCwxMjE4NywxMjIxNiwxMjI0NiwxMjI3NSwxMjMwNCwxMjMzNCwxMjM2NCwxMjM5MywxMjQyMywxMjQ1MywxMjQ4MywxMjUxMiwxMjU0MiwxMjU3MSwxMjYwMCwxMjYzMCwxMjY1OSwxMjY4OCwxMjcxOCwxMjc0NywxMjc3NywxMjgwNywxMjgzNywxMjg2NiwxMjg5NiwxMjkyNiwxMjk1NSwxMjk4NCwxMzAxNCwxMzA0MywxMzA3MiwxMzEwMiwxMzEzMSwxMzE2MSwxMzE5MSwxMzIyMCwxMzI1MCwxMzI4MCwxMzMxMCwxMzMzOSwxMzM2OCwxMzM5OCwxMzQyNywxMzQ1NiwxMzQ4NiwxMzUxNSwxMzU0NSwxMzU3NCwxMzYwNCwxMzYzNCwxMzY2NCwxMzY5MywxMzcyMywxMzc1MiwxMzc4MiwxMzgxMSwxMzg0MCwxMzg3MCwxMzg5OSwxMzkyOSwxMzk1OCwxMzk4OCwxNDAxOCwxNDA0NywxNDA3NywxNDEwNywxNDEzNiwxNDE2NiwxNDE5NSwxNDIyNCwxNDI1NCwxNDI4MywxNDMxMywxNDM0MiwxNDM3MiwxNDQwMSwxNDQzMSwxNDQ2MSwxNDQ5MCwxNDUyMCwxNDU1MCwxNDU3OSwxNDYwOSwxNDYzOCwxNDY2NywxNDY5NywxNDcyNiwxNDc1NiwxNDc4NSwxNDgxNSwxNDg0NCwxNDg3NCwxNDkwNCwxNDkzMywxNDk2MywxNDk5MywxNTAyMSwxNTA1MSwxNTA4MSwxNTExMCwxNTE0MCwxNTE2OSwxNTE5OSwxNTIyOCwxNTI1OCwxNTI4NywxNTMxNywxNTM0NywxNTM3NywxNTQwNiwxNTQzNiwxNTQ2NSwxNTQ5NCwxNTUyNCwxNTU1MywxNTU4MiwxNTYxMiwxNTY0MSwxNTY3MSwxNTcwMSwxNTczMSwxNTc2MCwxNTc5MCwxNTgyMCwxNTg0OSwxNTg3OCwxNTkwOCwxNTkzNywxNTk2NiwxNTk5NiwxNjAyNSwxNjA1NSwxNjA4NSwxNjExNCwxNjE0NCwxNjE3NCwxNjIwNCwxNjIzMywxNjI2MiwxNjI5MiwxNjMyMSwxNjM1MCwxNjM4MCwxNjQwOSwxNjQzOSwxNjQ2OCwxNjQ5OCwxNjUyOCwxNjU1OCwxNjU4NywxNjYxNywxNjY0NiwxNjY3NiwxNjcwNSwxNjczNCwxNjc2NCwxNjc5MywxNjgyMywxNjg1MiwxNjg4MiwxNjkxMiwxNjk0MSwxNjk3MSwxNzAwMSwxNzAzMCwxNzA2MCwxNzA4OSwxNzExOCwxNzE0OCwxNzE3NywxNzIwNywxNzIzNiwxNzI2NiwxNzI5NSwxNzMyNSwxNzM1NSwxNzM4NCwxNzQxNCwxNzQ0NCwxNzQ3MywxNzUwMiwxNzUzMiwxNzU2MSwxNzU5MSwxNzYyMCwxNzY1MCwxNzY3OSwxNzcwOSwxNzczOCwxNzc2OCwxNzc5OCwxNzgyNywxNzg1NywxNzg4NiwxNzkxNiwxNzk0NSwxNzk3NSwxODAwNCwxODAzNCwxODA2MywxODA5MywxODEyMiwxODE1MiwxODE4MSwxODIxMSwxODI0MSwxODI3MCwxODMwMCwxODMzMCwxODM1OSwxODM4OCwxODQxOCwxODQ0NywxODQ3NiwxODUwNiwxODUzNSwxODU2NSwxODU5NSwxODYyNSwxODY1NCwxODY4NCwxODcxNCwxODc0MywxODc3MiwxODgwMiwxODgzMSwxODg2MCwxODg5MCwxODkxOSwxODk0OSwxODk3OSwxOTAwOCwxOTAzOCwxOTA2OCwxOTA5OCwxOTEyNywxOTE1NiwxOTE4NiwxOTIxNSwxOTI0NCwxOTI3NCwxOTMwMywxOTMzMywxOTM2MiwxOTM5MiwxOTQyMiwxOTQ1MiwxOTQ4MSwxOTUxMSwxOTU0MCwxOTU3MCwxOTU5OSwxOTYyOCwxOTY1OCwxOTY4NywxOTcxNywxOTc0NiwxOTc3NiwxOTgwNiwxOTgzNiwxOTg2NSwxOTg5NSwxOTkyNCwxOTk1NCwxOTk4MywyMDAxMiwyMDA0MiwyMDA3MSwyMDEwMSwyMDEzMCwyMDE2MCwyMDE5MCwyMDIxOSwyMDI0OSwyMDI3OSwyMDMwOCwyMDMzOCwyMDM2NywyMDM5NiwyMDQyNiwyMDQ1NSwyMDQ4NSwyMDUxNCwyMDU0NCwyMDU3MywyMDYwMywyMDYzMywyMDY2MiwyMDY5MiwyMDcyMSwyMDc1MSwyMDc4MCwyMDgxMCwyMDgzOSwyMDg2OSwyMDg5OCwyMDkyOCwyMDk1NywyMDk4NywyMTAxNiwyMTA0NiwyMTA3NiwyMTEwNSwyMTEzNSwyMTE2NCwyMTE5NCwyMTIyMywyMTI1MywyMTI4MiwyMTMxMiwyMTM0MSwyMTM3MSwyMTQwMCwyMTQzMCwyMTQ1OSwyMTQ4OSwyMTUxOSwyMTU0OCwyMTU3OCwyMTYwNywyMTYzNywyMTY2NiwyMTY5NiwyMTcyNSwyMTc1NCwyMTc4NCwyMTgxMywyMTg0MywyMTg3MywyMTkwMiwyMTkzMiwyMTk2MiwyMTk5MSwyMjAyMSwyMjA1MCwyMjA4MCwyMjEwOSwyMjEzOCwyMjE2OCwyMjE5NywyMjIyNywyMjI1NiwyMjI4NiwyMjMxNiwyMjM0NiwyMjM3NSwyMjQwNSwyMjQzNCwyMjQ2NCwyMjQ5MywyMjUyMiwyMjU1MiwyMjU4MSwyMjYxMSwyMjY0MCwyMjY3MCwyMjcwMCwyMjczMCwyMjc1OSwyMjc4OSwyMjgxOCwyMjg0OCwyMjg3NywyMjkwNiwyMjkzNiwyMjk2NSwyMjk5NCwyMzAyNCwyMzA1NCwyMzA4MywyMzExMywyMzE0MywyMzE3MywyMzIwMiwyMzIzMiwyMzI2MSwyMzI5MCwyMzMyMCwyMzM0OSwyMzM3OSwyMzQwOCwyMzQzOCwyMzQ2NywyMzQ5NywyMzUyNywyMzU1NiwyMzU4NiwyMzYxNiwyMzY0NSwyMzY3NCwyMzcwNCwyMzczMywyMzc2MywyMzc5MiwyMzgyMiwyMzg1MSwyMzg4MSwyMzkxMCwyMzk0MCwyMzk3MCwyMzk5OSwyNDAyOSwyNDA1OCwyNDA4OCwyNDExNywyNDE0NywyNDE3NiwyNDIwNiwyNDIzNSwyNDI2NSwyNDI5NCwyNDMyNCwyNDM1MywyNDM4MywyNDQxMywyNDQ0MiwyNDQ3MiwyNDUwMSwyNDUzMSwyNDU2MCwyNDU5MCwyNDYxOSwyNDY0OCwyNDY3OCwyNDcwNywyNDczNywyNDc2NywyNDc5NiwyNDgyNiwyNDg1NiwyNDg4NSwyNDkxNSwyNDk0NCwyNDk3NCwyNTAwMywyNTAzMiwyNTA2MiwyNTA5MSwyNTEyMSwyNTE1MCwyNTE4MCwyNTIxMCwyNTI0MCwyNTI2OSwyNTI5OSwyNTMyOCwyNTM1OCwyNTM4NywyNTQxNiwyNTQ0NiwyNTQ3NSwyNTUwNSwyNTUzNCwyNTU2NCwyNTU5NCwyNTYyNCwyNTY1MywyNTY4MywyNTcxMiwyNTc0MiwyNTc3MSwyNTgwMCwyNTgzMCwyNTg1OSwyNTg4OCwyNTkxOCwyNTk0OCwyNTk3NywyNjAwNywyNjAzNywyNjA2NywyNjA5NiwyNjEyNiwyNjE1NSwyNjE4NCwyNjIxNCwyNjI0MywyNjI3MiwyNjMwMiwyNjMzMiwyNjM2MSwyNjM5MSwyNjQyMSwyNjQ1MSwyNjQ4MCwyNjUxMCwyNjUzOSwyNjU2OCwyNjU5OCwyNjYyNywyNjY1NiwyNjY4NiwyNjcxNSwyNjc0NSwyNjc3NSwyNjgwNSwyNjgzNCwyNjg2NCwyNjg5MywyNjkyMywyNjk1MiwyNjk4MiwyNzAxMSwyNzA0MSwyNzA3MCwyNzA5OSwyNzEyOSwyNzE1OSwyNzE4OCwyNzIxOCwyNzI0OCwyNzI3NywyNzMwNywyNzMzNiwyNzM2NiwyNzM5NSwyNzQyNSwyNzQ1NCwyNzQ4NCwyNzUxMywyNzU0MiwyNzU3MiwyNzYwMiwyNzYzMSwyNzY2MSwyNzY5MSwyNzcyMCwyNzc1MCwyNzc3OSwyNzgwOSwyNzgzOCwyNzg2OCwyNzg5NywyNzkyNiwyNzk1NiwyNzk4NSwyODAxNSwyODA0NSwyODA3NCwyODEwNCwyODEzNCwyODE2MywyODE5MywyODIyMiwyODI1MiwyODI4MSwyODMxMCwyODM0MCwyODM2OSwyODM5OSwyODQyOCwyODQ1OCwyODQ4OCwyODUxNywyODU0NywyODU3NywyODYwNywyODYzNiwyODY2NSwyODY5NSwyODcyNCwyODc1NCwyODc4MywyODgxMywyODg0MywyODg3MiwyODkwMSwyODkzMSwyODk2MCwyODk5MCwyOTAxOSwyOTA0OSwyOTA3OCwyOTEwOCwyOTEzNywyOTE2NywyOTE5NiwyOTIyNiwyOTI1NSwyOTI4NSwyOTMxNSwyOTM0NSwyOTM3NSwyOTQwNCwyOTQzNCwyOTQ2MywyOTQ5MiwyOTUyMiwyOTU1MSwyOTU4MCwyOTYxMCwyOTY0MCwyOTY2OSwyOTY5OSwyOTcyOSwyOTc1OSwyOTc4OCwyOTgxOCwyOTg0NywyOTg3NiwyOTkwNiwyOTkzNSwyOTk2NCwyOTk5NCwzMDAyMywzMDA1MywzMDA4MiwzMDExMiwzMDE0MSwzMDE3MSwzMDIwMCwzMDIzMCwzMDI1OSwzMDI4OSwzMDMxOCwzMDM0OCwzMDM3OCwzMDQwOCwzMDQzNywzMDQ2NywzMDQ5NiwzMDUyNiwzMDU1NSwzMDU4NSwzMDYxNCwzMDY0NCwzMDY3MywzMDcwMywzMDczMiwzMDc2MiwzMDc5MSwzMDgyMSwzMDg1MCwzMDg4MCwzMDkwOSwzMDkzOSwzMDk2OCwzMDk5OCwzMTAyNywzMTA1NywzMTA4NiwzMTExNiwzMTE0NSwzMTE3NSwzMTIwNCwzMTIzNCwzMTI2MywzMTI5MywzMTMyMiwzMTM1MiwzMTM4MSwzMTQxMSwzMTQ0MSwzMTQ3MSwzMTUwMCwzMTUzMCwzMTU1OSwzMTU4OSwzMTYxOCwzMTY0OCwzMTY3NiwzMTcwNiwzMTczNiwzMTc2NiwzMTc5NSwzMTgyNSwzMTg1NCwzMTg4NCwzMTkxMywzMTk0MywzMTk3MiwzMjAwMiwzMjAzMSwzMjA2MSwzMjA5MCwzMjEyMCwzMjE1MCwzMjE4MCwzMjIwOSwzMjIzOSwzMjI2OCwzMjI5OCwzMjMyNywzMjM1NywzMjM4NiwzMjQxNiwzMjQ0NSwzMjQ3NSwzMjUwNCwzMjUzNCwzMjU2MywzMjU5MywzMjYyMiwzMjY1MiwzMjY4MSwzMjcxMSwzMjc0MCwzMjc3MCwzMjc5OSwzMjgyOSwzMjg1OCwzMjg4OCwzMjkxNywzMjk0NywzMjk3NiwzMzAwNiwzMzAzNSwzMzA2NSwzMzA5NCwzMzEyNCwzMzE1MywzMzE4MywzMzIxMywzMzI0MywzMzI3MiwzMzMwMiwzMzMzMSwzMzM2MSwzMzM5MCwzMzQyMCwzMzQ1MCwzMzQ3OSwzMzUwOSwzMzUzOSwzMzU2OCwzMzU5OCwzMzYyNywzMzY1NywzMzY4NiwzMzcxNiwzMzc0NSwzMzc3NSwzMzgwNCwzMzgzNCwzMzg2MywzMzg5MywzMzkyMiwzMzk1MiwzMzk4MSwzNDAxMSwzNDA0MCwzNDA2OSwzNDA5OSwzNDEyOCwzNDE1OCwzNDE4NywzNDIxNywzNDI0NywzNDI3NywzNDMwNiwzNDMzNiwzNDM2NSwzNDM5NSwzNDQyNCwzNDQ1NCwzNDQ4MywzNDUxMiwzNDU0MiwzNDU3MSwzNDYwMSwzNDYzMSwzNDY2MCwzNDY5MCwzNDcxOSwzNDc0OSwzNDc3OCwzNDgwOCwzNDgzNywzNDg2NywzNDg5NiwzNDkyNiwzNDk1NSwzNDk4NSwzNTAxNSwzNTA0NCwzNTA3NCwzNTEwMywzNTEzMywzNTE2MiwzNTE5MiwzNTIyMiwzNTI1MSwzNTI4MCwzNTMxMCwzNTM0MCwzNTM3MCwzNTM5OSwzNTQyOSwzNTQ1OCwzNTQ4OCwzNTUxNywzNTU0NywzNTU3NiwzNTYwNSwzNTYzNSwzNTY2NSwzNTY5NCwzNTcyMywzNTc1MywzNTc4MiwzNTgxMSwzNTg0MSwzNTg3MSwzNTkwMSwzNTkzMCwzNTk2MCwzNTk4OSwzNjAxOSwzNjA0OCwzNjA3OCwzNjEwNywzNjEzNiwzNjE2NiwzNjE5NSwzNjIyNSwzNjI1NCwzNjI4NCwzNjMxNCwzNjM0MywzNjM3MywzNjQwMywzNjQzMywzNjQ2MiwzNjQ5MiwzNjUyMSwzNjU1MSwzNjU4MCwzNjYxMCwzNjYzOSwzNjY2OSwzNjY5OCwzNjcyOCwzNjc1NywzNjc4NiwzNjgxNiwzNjg0NSwzNjg3NSwzNjkwNCwzNjkzNCwzNjk2MywzNjk5MywzNzAyMiwzNzA1MiwzNzA4MSwzNzExMSwzNzE0MSwzNzE3MCwzNzIwMCwzNzIyOSwzNzI1OSwzNzI4OCwzNzMxOCwzNzM0NywzNzM3NywzNzQwNiwzNzQzNiwzNzQ2NSwzNzQ5NSwzNzUyNCwzNzU1NCwzNzU4NCwzNzYxMywzNzY0MywzNzY3MiwzNzcwMSwzNzczMSwzNzc2MCwzNzc5MCwzNzgxOSwzNzg0OSwzNzg3OCwzNzkwOCwzNzkzOCwzNzk2NywzNzk5NywzODAyNywzODA1NiwzODA4NSwzODExNSwzODE0NCwzODE3NCwzODIwMywzODIzMywzODI2MiwzODI5MiwzODMyMiwzODM1MSwzODM4MSwzODQxMCwzODQ0MCwzODQ2OSwzODQ5OSwzODUyOCwzODU1OCwzODU4NywzODYxNywzODY0NiwzODY3NiwzODcwNSwzODczNSwzODc2NCwzODc5NCwzODgyMywzODg1MywzODg4MiwzODkxMiwzODk0MSwzODk3MSwzOTAwMSwzOTAzMCwzOTA1OSwzOTA4OSwzOTExOCwzOTE0OCwzOTE3OCwzOTIwOCwzOTIzNywzOTI2NywzOTI5NywzOTMyNiwzOTM1NSwzOTM4NSwzOTQxNCwzOTQ0NCwzOTQ3MywzOTUwMywzOTUzMiwzOTU2MiwzOTU5MiwzOTYyMSwzOTY1MCwzOTY4MCwzOTcwOSwzOTczOSwzOTc2OCwzOTc5OCwzOTgyNywzOTg1NywzOTg4NiwzOTkxNiwzOTk0NiwzOTk3NSw0MDAwNSw0MDAzNSw0MDA2NCw0MDA5NCw0MDEyMyw0MDE1Myw0MDE4Miw0MDIxMiw0MDI0MSw0MDI3MSw0MDMwMCw0MDMzMCw0MDM1OSw0MDM4OSw0MDQxOCw0MDQ0OCw0MDQ3Nyw0MDUwNyw0MDUzNiw0MDU2Niw0MDU5NSw0MDYyNSw0MDY1NSw0MDY4NSw0MDcxNCw0MDc0NCw0MDc3Myw0MDgwMyw0MDgzMiw0MDg2Miw0MDg5Miw0MDkyMSw0MDk1MSw0MDk4MCw0MTAwOSw0MTAzOSw0MTA2OCw0MTA5OCw0MTEyNyw0MTE1Nyw0MTE4Niw0MTIxNiw0MTI0NSw0MTI3NSw0MTMwNCw0MTMzNCw0MTM2NCw0MTM5Myw0MTQyMiw0MTQ1Miw0MTQ4MSw0MTUxMSw0MTU0MCw0MTU3MCw0MTU5OSw0MTYyOSw0MTY1OCw0MTY4OCw0MTcxOCw0MTc0OCw0MTc3Nyw0MTgwNyw0MTgzNiw0MTg2NSw0MTg5NCw0MTkyNCw0MTk1Myw0MTk4Myw0MjAxMiw0MjA0Miw0MjA3Miw0MjEwMiw0MjEzMSw0MjE2MSw0MjE5MCw0MjIyMCw0MjI0OSw0MjI3OSw0MjMwOCw0MjMzNyw0MjM2Nyw0MjM5Nyw0MjQyNiw0MjQ1Niw0MjQ4NSw0MjUxNSw0MjU0NSw0MjU3NCw0MjYwNCw0MjYzMyw0MjY2Miw0MjY5Miw0MjcyMSw0Mjc1MSw0Mjc4MCw0MjgxMCw0MjgzOSw0Mjg2OSw0Mjg5OSw0MjkyOSw0Mjk1OCw0Mjk4OCw0MzAxNyw0MzA0Niw0MzA3Niw0MzEwNSw0MzEzNSw0MzE2NCw0MzE5NCw0MzIyMyw0MzI1Myw0MzI4Myw0MzMxMiw0MzM0Miw0MzM3MSw0MzQwMSw0MzQzMCw0MzQ2MCw0MzQ4OSw0MzUxOSw0MzU0OCw0MzU3OCw0MzYwNyw0MzYzNyw0MzY2Niw0MzY5Niw0MzcyNiw0Mzc1NSw0Mzc4NSw0MzgxNCw0Mzg0NCw0Mzg3Myw0MzkwMyw0MzkzMiw0Mzk2Miw0Mzk5MSw0NDAyMSw0NDA1MCw0NDA4MCw0NDEwOSw0NDEzOSw0NDE2OSw0NDE5OCw0NDIyOCw0NDI1OCw0NDI4Nyw0NDMxNyw0NDM0Niw0NDM3NSw0NDQwNSw0NDQzNCw0NDQ2NCw0NDQ5Myw0NDUyMyw0NDU1Myw0NDU4Miw0NDYxMiw0NDY0MSw0NDY3MSw0NDcwMCw0NDczMCw0NDc1OSw0NDc4OCw0NDgxOCw0NDg0Nyw0NDg3Nyw0NDkwNiw0NDkzNiw0NDk2Niw0NDk5Niw0NTAyNSw0NTA1NSw0NTA4NCw0NTExNCw0NTE0Myw0NTE3Miw0NTIwMiw0NTIzMSw0NTI2MSw0NTI5MCw0NTMyMCw0NTM1MCw0NTM4MCw0NTQwOSw0NTQzOSw0NTQ2OCw0NTQ5OCw0NTUyNyw0NTU1Niw0NTU4Niw0NTYxNSw0NTY0NCw0NTY3NCw0NTcwNCw0NTczMyw0NTc2Myw0NTc5Myw0NTgyMyw0NTg1Miw0NTg4Miw0NTkxMSw0NTk0MCw0NTk3MCw0NTk5OSw0NjAyOCw0NjA1OCw0NjA4OCw0NjExNyw0NjE0Nyw0NjE3Nyw0NjIwNiw0NjIzNiw0NjI2NSw0NjI5NSw0NjMyNCw0NjM1NCw0NjM4Myw0NjQxMyw0NjQ0Miw0NjQ3Miw0NjUwMSw0NjUzMSw0NjU2MCw0NjU5MCw0NjYyMCw0NjY0OSw0NjY3OSw0NjcwOCw0NjczOCw0Njc2Nyw0Njc5Nyw0NjgyNiw0Njg1Niw0Njg4NSw0NjkxNSw0Njk0NCw0Njk3NCw0NzAwMyw0NzAzMyw0NzA2Myw0NzA5Miw0NzEyMiw0NzE1MSw0NzE4MSw0NzIxMCw0NzI0MCw0NzI2OSw0NzI5OCw0NzMyOCw0NzM1Nyw0NzM4Nyw0NzQxNyw0NzQ0Niw0NzQ3Niw0NzUwNiw0NzUzNSw0NzU2NSw0NzU5NCw0NzYyNCw0NzY1Myw0NzY4Miw0NzcxMiw0Nzc0MSw0Nzc3MSw0NzgwMCw0NzgzMCw0Nzg2MCw0Nzg5MCw0NzkxOSw0Nzk0OSw0Nzk3OCw0ODAwOCw0ODAzNyw0ODA2Niw0ODA5Niw0ODEyNSw0ODE1NSw0ODE4NCw0ODIxNCw0ODI0NCw0ODI3Myw0ODMwMyw0ODMzMyw0ODM2Miw0ODM5Miw0ODQyMSw0ODQ1MCw0ODQ4MCw0ODUwOSw0ODUzOCw0ODU2OCw0ODU5OCw0ODYyNyw0ODY1Nyw0ODY4Nyw0ODcxNyw0ODc0Niw0ODc3Niw0ODgwNSw0ODgzNCw0ODg2NCw0ODg5Myw0ODkyMiw0ODk1Miw0ODk4Miw0OTAxMSw0OTA0MSw0OTA3MSw0OTEwMCw0OTEzMCw0OTE2MCw0OTE4OSw0OTIxOCw0OTI0OCw0OTI3Nyw0OTMwNiw0OTMzNiw0OTM2NSw0OTM5NSw0OTQyNSw0OTQ1NSw0OTQ4NCw0OTUxNCw0OTU0Myw0OTU3Myw0OTYwMiw0OTYzMiw0OTY2MSw0OTY5MCw0OTcyMCw0OTc0OSw0OTc3OSw0OTgwOSw0OTgzOCw0OTg2OCw0OTg5OCw0OTkyNyw0OTk1Nyw0OTk4Niw1MDAxNiw1MDA0NSw1MDA3NSw1MDEwNCw1MDEzMyw1MDE2Myw1MDE5Miw1MDIyMiw1MDI1Miw1MDI4MSw1MDMxMSw1MDM0MCw1MDM3MCw1MDQwMCw1MDQyOSw1MDQ1OSw1MDQ4OCw1MDUxOCw1MDU0Nyw1MDU3Niw1MDYwNiw1MDYzNSw1MDY2NSw1MDY5NCw1MDcyNCw1MDc1NCw1MDc4NCw1MDgxMyw1MDg0Myw1MDg3Miw1MDkwMiw1MDkzMSw1MDk2MCw1MDk5MCw1MTAxOSw1MTA0OSw1MTA3OCw1MTEwOCw1MTEzOCw1MTE2Nyw1MTE5Nyw1MTIyNyw1MTI1Niw1MTI4Niw1MTMxNSw1MTM0NSw1MTM3NCw1MTQwMyw1MTQzMyw1MTQ2Miw1MTQ5Miw1MTUyMiw1MTU1Miw1MTU4Miw1MTYxMSw1MTY0MSw1MTY3MCw1MTY5OSw1MTcyOSw1MTc1OCw1MTc4Nyw1MTgxNiw1MTg0Niw1MTg3Niw1MTkwNiw1MTkzNiw1MTk2NSw1MTk5NSw1MjAyNSw1MjA1NCw1MjA4Myw1MjExMyw1MjE0Miw1MjE3MSw1MjIwMCw1MjIzMCw1MjI2MCw1MjI5MCw1MjMxOSw1MjM0OSw1MjM3OSw1MjQwOCw1MjQzOCw1MjQ2Nyw1MjQ5Nyw1MjUyNiw1MjU1NSw1MjU4NSw1MjYxNCw1MjY0NCw1MjY3Myw1MjcwMyw1MjczMyw1Mjc2Miw1Mjc5Miw1MjgyMiw1Mjg1MSw1Mjg4MSw1MjkxMCw1MjkzOSw1Mjk2OSw1Mjk5OCw1MzAyOCw1MzA1Nyw1MzA4Nyw1MzExNiw1MzE0Niw1MzE3Niw1MzIwNSw1MzIzNSw1MzI2NCw1MzI5NCw1MzMyNCw1MzM1Myw1MzM4Myw1MzQxMiw1MzQ0MSw1MzQ3MSw1MzUwMCw1MzUzMCw1MzU1OSw1MzU4OSw1MzYxOSw1MzY0OCw1MzY3OCw1MzcwOCw1MzczNyw1Mzc2Nyw1Mzc5Niw1MzgyNSw1Mzg1NSw1Mzg4NCw1MzkxMyw1Mzk0Myw1Mzk3Myw1NDAwMyw1NDAzMiw1NDA2Miw1NDA5Miw1NDEyMSw1NDE1MSw1NDE4MCw1NDIwOSw1NDIzOSw1NDI2OCw1NDI5Nyw1NDMyNyw1NDM1Nyw1NDM4Nyw1NDQxNiw1NDQ0Niw1NDQ3Niw1NDUwNSw1NDUzNSw1NDU2NCw1NDU5Myw1NDYyMyw1NDY1Miw1NDY4MSw1NDcxMSw1NDc0MSw1NDc3MCw1NDgwMCw1NDgzMCw1NDg1OSw1NDg4OSw1NDkxOSw1NDk0OCw1NDk3Nyw1NTAwNyw1NTAzNiw1NTA2Niw1NTA5NSw1NTEyNSw1NTE1NCw1NTE4NCw1NTIxMyw1NTI0Myw1NTI3Myw1NTMwMiw1NTMzMiw1NTM2MSw1NTM5MSw1NTQyMCw1NTQ1MCw1NTQ3OSw1NTUwOCw1NTUzOCw1NTU2Nyw1NTU5Nyw1NTYyNyw1NTY1Nyw1NTY4Niw1NTcxNiw1NTc0NSw1NTc3NSw1NTgwNCw1NTgzNCw1NTg2Myw1NTg5Miw1NTkyMiw1NTk1MSw1NTk4MSw1NjAxMSw1NjA0MCw1NjA3MCw1NjEwMCw1NjEyOSw1NjE1OSw1NjE4OCw1NjIxOCw1NjI0Nyw1NjI3Niw1NjMwNiw1NjMzNSw1NjM2NSw1NjM5NCw1NjQyNCw1NjQ1NCw1NjQ4Myw1NjUxMyw1NjU0Myw1NjU3Miw1NjYwMSw1NjYzMSw1NjY2MCw1NjY5MCw1NjcxOSw1Njc0OSw1Njc3OCw1NjgwOCw1NjgzNyw1Njg2Nyw1Njg5Nyw1NjkyNiw1Njk1Niw1Njk4NSw1NzAxNSw1NzA0NCw1NzA3NCw1NzEwMyw1NzEzMyw1NzE2Miw1NzE5Miw1NzIyMSw1NzI1MSw1NzI4MCw1NzMxMCw1NzM0MCw1NzM2OSw1NzM5OSw1NzQyOSw1NzQ1OCw1NzQ4Nyw1NzUxNyw1NzU0Niw1NzU3Niw1NzYwNSw1NzYzNCw1NzY2NCw1NzY5NCw1NzcyMyw1Nzc1Myw1Nzc4Myw1NzgxMyw1Nzg0Miw1Nzg3MSw1NzkwMSw1NzkzMCw1Nzk1OSw1Nzk4OSw1ODAxOCw1ODA0OCw1ODA3Nyw1ODEwNyw1ODEzNyw1ODE2Nyw1ODE5Niw1ODIyNiw1ODI1NSw1ODI4NSw1ODMxNCw1ODM0Myw1ODM3Myw1ODQwMiw1ODQzMiw1ODQ2MSw1ODQ5MSw1ODUyMSw1ODU1MSw1ODU4MCw1ODYxMCw1ODYzOSw1ODY2OSw1ODY5OCw1ODcyNyw1ODc1Nyw1ODc4Niw1ODgxNiw1ODg0NSw1ODg3NSw1ODkwNSw1ODkzNCw1ODk2NCw1ODk5NCw1OTAyMyw1OTA1Myw1OTA4Miw1OTExMSw1OTE0MSw1OTE3MCw1OTIwMCw1OTIyOSw1OTI1OSw1OTI4OCw1OTMxOCw1OTM0OCw1OTM3Nyw1OTQwNyw1OTQzNiw1OTQ2Niw1OTQ5NSw1OTUyNSw1OTU1NCw1OTU4NCw1OTYxMyw1OTY0Myw1OTY3Miw1OTcwMiw1OTczMSw1OTc2MSw1OTc5MSw1OTgyMCw1OTg1MCw1OTg3OSw1OTkwOSw1OTkzOSw1OTk2OCw1OTk5Nyw2MDAyNyw2MDA1Niw2MDA4Niw2MDExNSw2MDE0NSw2MDE3NCw2MDIwNCw2MDIzNCw2MDI2NCw2MDI5Myw2MDMyMyw2MDM1Miw2MDM4MSw2MDQxMSw2MDQ0MCw2MDQ2OSw2MDQ5OSw2MDUyOCw2MDU1OCw2MDU4OCw2MDYxOCw2MDY0OCw2MDY3Nyw2MDcwNyw2MDczNiw2MDc2NSw2MDc5NSw2MDgyNCw2MDg1Myw2MDg4Myw2MDkxMiw2MDk0Miw2MDk3Miw2MTAwMiw2MTAzMSw2MTA2MSw2MTA5MCw2MTEyMCw2MTE0OSw2MTE3OSw2MTIwOCw2MTIzNyw2MTI2Nyw2MTI5Niw2MTMyNiw2MTM1Niw2MTM4NSw2MTQxNSw2MTQ0NSw2MTQ3NCw2MTUwNCw2MTUzMyw2MTU2Myw2MTU5Miw2MTYyMSw2MTY1MSw2MTY4MCw2MTcxMCw2MTczOSw2MTc2OSw2MTc5OSw2MTgyOCw2MTg1OCw2MTg4OCw2MTkxNyw2MTk0Nyw2MTk3Niw2MjAwNiw2MjAzNSw2MjA2NCw2MjA5NCw2MjEyMyw2MjE1Myw2MjE4Miw2MjIxMiw2MjI0Miw2MjI3MSw2MjMwMSw2MjMzMSw2MjM2MCw2MjM5MCw2MjQxOSw2MjQ0OCw2MjQ3OCw2MjUwNyw2MjUzNyw2MjU2Niw2MjU5Niw2MjYyNSw2MjY1NSw2MjY4NSw2MjcxNSw2Mjc0NCw2Mjc3NCw2MjgwMyw2MjgzMiw2Mjg2Miw2Mjg5MSw2MjkyMSw2Mjk1MCw2Mjk4MCw2MzAwOSw2MzAzOSw2MzA2OSw2MzA5OSw2MzEyOCw2MzE1Nyw2MzE4Nyw2MzIxNiw2MzI0Niw2MzI3NSw2MzMwNSw2MzMzNCw2MzM2Myw2MzM5Myw2MzQyMyw2MzQ1Myw2MzQ4Miw2MzUxMiw2MzU0MSw2MzU3MSw2MzYwMCw2MzYzMCw2MzY1OSw2MzY4OSw2MzcxOCw2Mzc0Nyw2Mzc3Nyw2MzgwNyw2MzgzNiw2Mzg2Niw2Mzg5NSw2MzkyNSw2Mzk1NSw2Mzk4NCw2NDAxNCw2NDA0Myw2NDA3Myw2NDEwMiw2NDEzMSw2NDE2MSw2NDE5MCw2NDIyMCw2NDI0OSw2NDI3OSw2NDMwOSw2NDMzOSw2NDM2OCw2NDM5OCw2NDQyNyw2NDQ1Nyw2NDQ4Niw2NDUxNSw2NDU0NSw2NDU3NCw2NDYwMyw2NDYzMyw2NDY2Myw2NDY5Miw2NDcyMiw2NDc1Miw2NDc4Miw2NDgxMSw2NDg0MSw2NDg3MCw2NDg5OSw2NDkyOSw2NDk1OCw2NDk4Nyw2NTAxNyw2NTA0Nyw2NTA3Niw2NTEwNiw2NTEzNiw2NTE2Niw2NTE5NSw2NTIyNSw2NTI1NCw2NTI4Myw2NTMxMyw2NTM0Miw2NTM3MSw2NTQwMSw2NTQzMSw2NTQ2MCw2NTQ5MCw2NTUyMCw2NTU0OSw2NTU3OSw2NTYwOCw2NTYzOCw2NTY2Nyw2NTY5Nyw2NTcyNiw2NTc1NSw2NTc4NSw2NTgxNSw2NTg0NCw2NTg3NCw2NTkwMyw2NTkzMyw2NTk2Myw2NTk5Miw2NjAyMiw2NjA1MSw2NjA4MSw2NjExMCw2NjE0MCw2NjE2OSw2NjE5OSw2NjIyOCw2NjI1OCw2NjI4Nyw2NjMxNyw2NjM0Niw2NjM3Niw2NjQwNSw2NjQzNSw2NjQ2NSw2NjQ5NCw2NjUyNCw2NjU1Myw2NjU4Myw2NjYxMiw2NjY0MSw2NjY3MSw2NjcwMCw2NjczMCw2Njc2MCw2Njc4OSw2NjgxOSw2Njg0OSw2Njg3OCw2NjkwOCw2NjkzNyw2Njk2Nyw2Njk5Niw2NzAyNSw2NzA1NSw2NzA4NCw2NzExNCw2NzE0Myw2NzE3Myw2NzIwMyw2NzIzMyw2NzI2Miw2NzI5Miw2NzMyMSw2NzM1MSw2NzM4MCw2NzQwOSw2NzQzOSw2NzQ2OCw2NzQ5Nyw2NzUyNyw2NzU1Nyw2NzU4Nyw2NzYxNyw2NzY0Niw2NzY3Niw2NzcwNSw2NzczNSw2Nzc2NCw2Nzc5Myw2NzgyMyw2Nzg1Miw2Nzg4Miw2NzkxMSw2Nzk0MSw2Nzk3MSw2OGUzLDY4MDMwLDY4MDYwLDY4MDg5LDY4MTE5LDY4MTQ4LDY4MTc3LDY4MjA3LDY4MjM2LDY4MjY2LDY4Mjk1LDY4MzI1LDY4MzU0LDY4Mzg0LDY4NDE0LDY4NDQzLDY4NDczLDY4NTAyLDY4NTMyLDY4NTYxLDY4NTkxLDY4NjIwLDY4NjUwLDY4Njc5LDY4NzA4LDY4NzM4LDY4NzY4LDY4Nzk3LDY4ODI3LDY4ODU3LDY4ODg2LDY4OTE2LDY4OTQ2LDY4OTc1LDY5MDA0LDY5MDM0LDY5MDYzLDY5MDkyLDY5MTIyLDY5MTUyLDY5MTgxLDY5MjExLDY5MjQwLDY5MjcwLDY5MzAwLDY5MzMwLDY5MzU5LDY5Mzg4LDY5NDE4LDY5NDQ3LDY5NDc2LDY5NTA2LDY5NTM1LDY5NTY1LDY5NTk1LDY5NjI0LDY5NjU0LDY5Njg0LDY5NzEzLDY5NzQzLDY5NzcyLDY5ODAyLDY5ODMxLDY5ODYxLDY5ODkwLDY5OTE5LDY5OTQ5LDY5OTc4LDcwMDA4LDcwMDM4LDcwMDY3LDcwMDk3LDcwMTI2LDcwMTU2LDcwMTg2LDcwMjE1LDcwMjQ1LDcwMjc0LDcwMzAzLDcwMzMzLDcwMzYyLDcwMzkyLDcwNDIxLDcwNDUxLDcwNDgxLDcwNTEwLDcwNTQwLDcwNTcwLDcwNTk5LDcwNjI5LDcwNjU4LDcwNjg3LDcwNzE3LDcwNzQ2LDcwNzc2LDcwODA1LDcwODM1LDcwODY0LDcwODk0LDcwOTI0LDcwOTU0LDcwOTgzLDcxMDEzLDcxMDQyLDcxMDcxLDcxMTAxLDcxMTMwLDcxMTU5LDcxMTg5LDcxMjE4LDcxMjQ4LDcxMjc4LDcxMzA4LDcxMzM3LDcxMzY3LDcxMzk3LDcxNDI2LDcxNDU1LDcxNDg1LDcxNTE0LDcxNTQzLDcxNTczLDcxNjAyLDcxNjMyLDcxNjYyLDcxNjkxLDcxNzIxLDcxNzUxLDcxNzgxLDcxODEwLDcxODM5LDcxODY5LDcxODk4LDcxOTI3LDcxOTU3LDcxOTg2LDcyMDE2LDcyMDQ2LDcyMDc1LDcyMTA1LDcyMTM1LDcyMTY0LDcyMTk0LDcyMjIzLDcyMjUzLDcyMjgyLDcyMzExLDcyMzQxLDcyMzcwLDcyNDAwLDcyNDI5LDcyNDU5LDcyNDg5LDcyNTE4LDcyNTQ4LDcyNTc3LDcyNjA3LDcyNjM3LDcyNjY2LDcyNjk1LDcyNzI1LDcyNzU0LDcyNzg0LDcyODEzLDcyODQzLDcyODcyLDcyOTAyLDcyOTMxLDcyOTYxLDcyOTkxLDczMDIwLDczMDUwLDczMDgwLDczMTA5LDczMTM5LDczMTY4LDczMTk3LDczMjI3LDczMjU2LDczMjg2LDczMzE1LDczMzQ1LDczMzc1LDczNDA0LDczNDM0LDczNDY0LDczNDkzLDczNTIzLDczNTUyLDczNTgxLDczNjExLDczNjQwLDczNjY5LDczNjk5LDczNzI5LDczNzU4LDczNzg4LDczODE4LDczODQ4LDczODc3LDczOTA3LDczOTM2LDczOTY1LDczOTk1LDc0MDI0LDc0MDUzLDc0MDgzLDc0MTEzLDc0MTQyLDc0MTcyLDc0MjAyLDc0MjMxLDc0MjYxLDc0MjkxLDc0MzIwLDc0MzQ5LDc0Mzc5LDc0NDA4LDc0NDM3LDc0NDY3LDc0NDk3LDc0NTI2LDc0NTU2LDc0NTg2LDc0NjE1LDc0NjQ1LDc0Njc1LDc0NzA0LDc0NzMzLDc0NzYzLDc0NzkyLDc0ODIyLDc0ODUxLDc0ODgxLDc0OTEwLDc0OTQwLDc0OTY5LDc0OTk5LDc1MDI5LDc1MDU4LDc1MDg4LDc1MTE3LDc1MTQ3LDc1MTc2LDc1MjA2LDc1MjM1LDc1MjY0LDc1Mjk0LDc1MzIzLDc1MzUzLDc1MzgzLDc1NDEyLDc1NDQyLDc1NDcyLDc1NTAxLDc1NTMxLDc1NTYwLDc1NTkwLDc1NjE5LDc1NjQ4LDc1Njc4LDc1NzA3LDc1NzM3LDc1NzY2LDc1Nzk2LDc1ODI2LDc1ODU2LDc1ODg1LDc1OTE1LDc1OTQ0LDc1OTc0LDc2MDAzLDc2MDMyLDc2MDYyLDc2MDkxLDc2MTIxLDc2MTUwLDc2MTgwLDc2MjEwLDc2MjM5LDc2MjY5LDc2Mjk5LDc2MzI4LDc2MzU4LDc2Mzg3LDc2NDE2LDc2NDQ2LDc2NDc1LDc2NTA1LDc2NTM0LDc2NTY0LDc2NTkzLDc2NjIzLDc2NjUzLDc2NjgyLDc2NzEyLDc2NzQxLDc2NzcxLDc2ODAxLDc2ODMwLDc2ODU5LDc2ODg5LDc2OTE4LDc2OTQ4LDc2OTc3LDc3MDA3LDc3MDM2LDc3MDY2LDc3MDk2LDc3MTI1LDc3MTU1LDc3MTg1LDc3MjE0LDc3MjQzLDc3MjczLDc3MzAyLDc3MzMyLDc3MzYxLDc3MzkwLDc3NDIwLDc3NDUwLDc3NDc5LDc3NTA5LDc3NTM5LDc3NTY5LDc3NTk4LDc3NjI3LDc3NjU3LDc3Njg2LDc3NzE1LDc3NzQ1LDc3Nzc0LDc3ODA0LDc3ODMzLDc3ODYzLDc3ODkzLDc3OTIzLDc3OTUyLDc3OTgyLDc4MDExLDc4MDQxLDc4MDcwLDc4MDk5LDc4MTI5LDc4MTU4LDc4MTg4LDc4MjE3LDc4MjQ3LDc4Mjc3LDc4MzA3LDc4MzM2LDc4MzY2LDc4Mzk1LDc4NDI1LDc4NDU0LDc4NDgzLDc4NTEzLDc4NTQyLDc4NTcyLDc4NjAxLDc4NjMxLDc4NjYxLDc4NjkwLDc4NzIwLDc4NzUwLDc4Nzc5LDc4ODA4LDc4ODM4LDc4ODY3LDc4ODk3LDc4OTI2LDc4OTU2LDc4OTg1LDc5MDE1LDc5MDQ0LDc5MDc0LDc5MTA0LDc5MTMzLDc5MTYzLDc5MTkyLDc5MjIyLDc5MjUxLDc5MjgxLDc5MzEwLDc5MzQwLDc5MzY5LDc5Mzk5LDc5NDI4LDc5NDU4LDc5NDg3LDc5NTE3LDc5NTQ2LDc5NTc2LDc5NjA2LDc5NjM1LDc5NjY1LDc5Njk1LDc5NzI0LDc5NzUzLDc5NzgzLDc5ODEyLDc5ODQxLDc5ODcxLDc5OTAwLDc5OTMwLDc5OTYwLDc5OTkwXX0se1wiLi4vbWFpblwiOjU1NixcIm9iamVjdC1hc3NpZ25cIjo0NDd9XSw1NTY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwib2JqZWN0LWFzc2lnblwiKTtmdW5jdGlvbiBpKCl7dGhpcy5yZWdpb25hbE9wdGlvbnM9W10sdGhpcy5yZWdpb25hbE9wdGlvbnNbXCJcIl09e2ludmFsaWRDYWxlbmRhcjpcIkNhbGVuZGFyIHswfSBub3QgZm91bmRcIixpbnZhbGlkRGF0ZTpcIkludmFsaWQgezB9IGRhdGVcIixpbnZhbGlkTW9udGg6XCJJbnZhbGlkIHswfSBtb250aFwiLGludmFsaWRZZWFyOlwiSW52YWxpZCB7MH0geWVhclwiLGRpZmZlcmVudENhbGVuZGFyczpcIkNhbm5vdCBtaXggezB9IGFuZCB7MX0gZGF0ZXNcIn0sdGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXSx0aGlzLmNhbGVuZGFycz17fSx0aGlzLl9sb2NhbENhbHM9e319ZnVuY3Rpb24gYSh0LGUscixuKXtpZih0aGlzLl9jYWxlbmRhcj10LHRoaXMuX3llYXI9ZSx0aGlzLl9tb250aD1yLHRoaXMuX2RheT1uLDA9PT10aGlzLl9jYWxlbmRhci5fdmFsaWRhdGVMZXZlbCYmIXRoaXMuX2NhbGVuZGFyLmlzVmFsaWQodGhpcy5feWVhcix0aGlzLl9tb250aCx0aGlzLl9kYXkpKXRocm93KGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWREYXRlKS5yZXBsYWNlKC9cXHswXFx9Lyx0aGlzLl9jYWxlbmRhci5sb2NhbC5uYW1lKX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuXCIwMDAwMDBcIi5zdWJzdHJpbmcoMCxlLSh0PVwiXCIrdCkubGVuZ3RoKSt0fWZ1bmN0aW9uIHMoKXt0aGlzLnNob3J0WWVhckN1dG9mZj1cIisxMFwifWZ1bmN0aW9uIGwodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0XXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbXCJcIl19bihpLnByb3RvdHlwZSx7aW5zdGFuY2U6ZnVuY3Rpb24odCxlKXt0PSh0fHxcImdyZWdvcmlhblwiKS50b0xvd2VyQ2FzZSgpLGU9ZXx8XCJcIjt2YXIgcj10aGlzLl9sb2NhbENhbHNbdCtcIi1cIitlXTtpZighciYmdGhpcy5jYWxlbmRhcnNbdF0mJihyPW5ldyB0aGlzLmNhbGVuZGFyc1t0XShlKSx0aGlzLl9sb2NhbENhbHNbdCtcIi1cIitlXT1yKSwhcil0aHJvdyh0aGlzLmxvY2FsLmludmFsaWRDYWxlbmRhcnx8dGhpcy5yZWdpb25hbE9wdGlvbnNbXCJcIl0uaW52YWxpZENhbGVuZGFyKS5yZXBsYWNlKC9cXHswXFx9Lyx0KTtyZXR1cm4gcn0sbmV3RGF0ZTpmdW5jdGlvbih0LGUscixuLGkpe3JldHVybihuPShudWxsIT10JiZ0LnllYXI/dC5jYWxlbmRhcigpOlwic3RyaW5nXCI9PXR5cGVvZiBuP3RoaXMuaW5zdGFuY2UobixpKTpuKXx8dGhpcy5pbnN0YW5jZSgpKS5uZXdEYXRlKHQsZSxyKX0sc3Vic3RpdHV0ZURpZ2l0czpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuKGUrXCJcIikucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfX0sc3Vic3RpdHV0ZUNoaW5lc2VEaWdpdHM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7Zm9yKHZhciBuPVwiXCIsaT0wO3I+MDspe3ZhciBhPXIlMTA7bj0oMD09PWE/XCJcIjp0W2FdK2VbaV0pK24saSsrLHI9TWF0aC5mbG9vcihyLzEwKX1yZXR1cm4gMD09PW4uaW5kZXhPZih0WzFdK2VbMV0pJiYobj1uLnN1YnN0cigxKSksbnx8dFswXX19fSksbihhLnByb3RvdHlwZSx7bmV3RGF0ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLm5ld0RhdGUobnVsbD09dD90aGlzOnQsZSxyKX0seWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5feWVhcjp0aGlzLnNldCh0LFwieVwiKX0sbW9udGg6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX21vbnRoOnRoaXMuc2V0KHQsXCJtXCIpfSxkYXk6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX2RheTp0aGlzLnNldCh0LFwiZFwiKX0sZGF0ZTpmdW5jdGlvbih0LGUscil7aWYoIXRoaXMuX2NhbGVuZGFyLmlzVmFsaWQodCxlLHIpKXRocm93KGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWREYXRlKS5yZXBsYWNlKC9cXHswXFx9Lyx0aGlzLl9jYWxlbmRhci5sb2NhbC5uYW1lKTtyZXR1cm4gdGhpcy5feWVhcj10LHRoaXMuX21vbnRoPWUsdGhpcy5fZGF5PXIsdGhpc30sbGVhcFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIubGVhcFllYXIodGhpcyl9LGVwb2NoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmVwb2NoKHRoaXMpfSxmb3JtYXRZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmZvcm1hdFllYXIodGhpcyl9LG1vbnRoT2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLndlZWtPZlllYXIodGhpcyl9LGRheXNJblllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5c0luWWVhcih0aGlzKX0sZGF5T2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheU9mWWVhcih0aGlzKX0sZGF5c0luTW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5c0luTW9udGgodGhpcyl9LGRheU9mV2VlazpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5kYXlPZldlZWsodGhpcyl9LHdlZWtEYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIud2Vla0RheSh0aGlzKX0sZXh0cmFJbmZvOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmV4dHJhSW5mbyh0aGlzKX0sYWRkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmFkZCh0aGlzLHQsZSl9LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9jYWxlbmRhci5zZXQodGhpcyx0LGUpfSxjb21wYXJlVG86ZnVuY3Rpb24odCl7aWYodGhpcy5fY2FsZW5kYXIubmFtZSE9PXQuX2NhbGVuZGFyLm5hbWUpdGhyb3coYy5sb2NhbC5kaWZmZXJlbnRDYWxlbmRhcnN8fGMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmRpZmZlcmVudENhbGVuZGFycykucmVwbGFjZSgvXFx7MFxcfS8sdGhpcy5fY2FsZW5kYXIubG9jYWwubmFtZSkucmVwbGFjZSgvXFx7MVxcfS8sdC5fY2FsZW5kYXIubG9jYWwubmFtZSk7dmFyIGU9dGhpcy5feWVhciE9PXQuX3llYXI/dGhpcy5feWVhci10Ll95ZWFyOnRoaXMuX21vbnRoIT09dC5fbW9udGg/dGhpcy5tb250aE9mWWVhcigpLXQubW9udGhPZlllYXIoKTp0aGlzLl9kYXktdC5fZGF5O3JldHVybiAwPT09ZT8wOmU8MD8tMToxfSxjYWxlbmRhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhcn0sdG9KRDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci50b0pEKHRoaXMpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmZyb21KRCh0KX0sdG9KU0RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIudG9KU0RhdGUodGhpcyl9LGZyb21KU0RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmZyb21KU0RhdGUodCl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMueWVhcigpPDA/XCItXCI6XCJcIikrbyhNYXRoLmFicyh0aGlzLnllYXIoKSksNCkrXCItXCIrbyh0aGlzLm1vbnRoKCksMikrXCItXCIrbyh0aGlzLmRheSgpLDIpfX0pLG4ocy5wcm90b3R5cGUse192YWxpZGF0ZUxldmVsOjAsbmV3RGF0ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuIG51bGw9PXQ/dGhpcy50b2RheSgpOih0LnllYXImJih0aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkRGF0ZSkscj10LmRheSgpLGU9dC5tb250aCgpLHQ9dC55ZWFyKCkpLG5ldyBhKHRoaXMsdCxlLHIpKX0sdG9kYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mcm9tSlNEYXRlKG5ldyBEYXRlKX0sZXBvY2g6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRZZWFyfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkWWVhcikueWVhcigpPDA/dGhpcy5sb2NhbC5lcG9jaHNbMF06dGhpcy5sb2NhbC5lcG9jaHNbMV19LGZvcm1hdFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZFllYXJ8fGMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWRZZWFyKTtyZXR1cm4oZS55ZWFyKCk8MD9cIi1cIjpcIlwiKStvKE1hdGguYWJzKGUueWVhcigpKSw0KX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbXCJcIl0uaW52YWxpZFllYXIpLDEyfSxtb250aE9mWWVhcjpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRNb250aHx8Yy5yZWdpb25hbE9wdGlvbnNbXCJcIl0uaW52YWxpZE1vbnRoKTtyZXR1cm4oci5tb250aCgpK3RoaXMubW9udGhzSW5ZZWFyKHIpLXRoaXMuZmlyc3RNb250aCkldGhpcy5tb250aHNJblllYXIocikrdGhpcy5taW5Nb250aH0sZnJvbU1vbnRoT2ZZZWFyOmZ1bmN0aW9uKHQsZSl7dmFyIHI9KGUrdGhpcy5maXJzdE1vbnRoLTIqdGhpcy5taW5Nb250aCkldGhpcy5tb250aHNJblllYXIodCkrdGhpcy5taW5Nb250aDtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxyLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZE1vbnRofHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkTW9udGgpLHJ9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZFllYXJ8fGMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWRZZWFyKTtyZXR1cm4gdGhpcy5sZWFwWWVhcihlKT8zNjY6MzY1fSxkYXlPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWREYXRlKTtyZXR1cm4gbi50b0pEKCktdGhpcy5uZXdEYXRlKG4ueWVhcigpLHRoaXMuZnJvbU1vbnRoT2ZZZWFyKG4ueWVhcigpLHRoaXMubWluTW9udGgpLHRoaXMubWluRGF5KS50b0pEKCkrMX0sZGF5c0luV2VlazpmdW5jdGlvbigpe3JldHVybiA3fSxkYXlPZldlZWs6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWREYXRlKTtyZXR1cm4oTWF0aC5mbG9vcih0aGlzLnRvSkQobikpKzIpJXRoaXMuZGF5c0luV2VlaygpfSxleHRyYUluZm86ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkRGF0ZSkse319LGFkZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkRGF0ZSksdGhpcy5fY29ycmVjdEFkZCh0LHRoaXMuX2FkZCh0LGUsciksZSxyKX0sX2FkZDpmdW5jdGlvbih0LGUscil7aWYodGhpcy5fdmFsaWRhdGVMZXZlbCsrLFwiZFwiPT09cnx8XCJ3XCI9PT1yKXt2YXIgbj10LnRvSkQoKStlKihcIndcIj09PXI/dGhpcy5kYXlzSW5XZWVrKCk6MSksaT10LmNhbGVuZGFyKCkuZnJvbUpEKG4pO3JldHVybiB0aGlzLl92YWxpZGF0ZUxldmVsLS0sW2kueWVhcigpLGkubW9udGgoKSxpLmRheSgpXX10cnl7dmFyIGE9dC55ZWFyKCkrKFwieVwiPT09cj9lOjApLG89dC5tb250aE9mWWVhcigpKyhcIm1cIj09PXI/ZTowKTtpPXQuZGF5KCk7XCJ5XCI9PT1yPyh0Lm1vbnRoKCkhPT10aGlzLmZyb21Nb250aE9mWWVhcihhLG8pJiYobz10aGlzLm5ld0RhdGUoYSx0Lm1vbnRoKCksdGhpcy5taW5EYXkpLm1vbnRoT2ZZZWFyKCkpLG89TWF0aC5taW4obyx0aGlzLm1vbnRoc0luWWVhcihhKSksaT1NYXRoLm1pbihpLHRoaXMuZGF5c0luTW9udGgoYSx0aGlzLmZyb21Nb250aE9mWWVhcihhLG8pKSkpOlwibVwiPT09ciYmKCFmdW5jdGlvbih0KXtmb3IoO288dC5taW5Nb250aDspYS0tLG8rPXQubW9udGhzSW5ZZWFyKGEpO2Zvcih2YXIgZT10Lm1vbnRoc0luWWVhcihhKTtvPmUtMSt0Lm1pbk1vbnRoOylhKyssby09ZSxlPXQubW9udGhzSW5ZZWFyKGEpfSh0aGlzKSxpPU1hdGgubWluKGksdGhpcy5kYXlzSW5Nb250aChhLHRoaXMuZnJvbU1vbnRoT2ZZZWFyKGEsbykpKSk7dmFyIHM9W2EsdGhpcy5mcm9tTW9udGhPZlllYXIoYSxvKSxpXTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLHN9Y2F0Y2godCl7dGhyb3cgdGhpcy5fdmFsaWRhdGVMZXZlbC0tLHR9fSxfY29ycmVjdEFkZDpmdW5jdGlvbih0LGUscixuKXtpZighKHRoaXMuaGFzWWVhclplcm98fFwieVwiIT09biYmXCJtXCIhPT1ufHwwIT09ZVswXSYmdC55ZWFyKCk+MD09ZVswXT4wKSl7dmFyIGk9e3k6WzEsMSxcInlcIl0sbTpbMSx0aGlzLm1vbnRoc0luWWVhcigtMSksXCJtXCJdLHc6W3RoaXMuZGF5c0luV2VlaygpLHRoaXMuZGF5c0luWWVhcigtMSksXCJkXCJdLGQ6WzEsdGhpcy5kYXlzSW5ZZWFyKC0xKSxcImRcIl19W25dLGE9cjwwPy0xOjE7ZT10aGlzLl9hZGQodCxyKmlbMF0rYSppWzFdLGlbMl0pfXJldHVybiB0LmRhdGUoZVswXSxlWzFdLGVbMl0pfSxzZXQ6ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkRGF0ZSk7dmFyIG49XCJ5XCI9PT1yP2U6dC55ZWFyKCksaT1cIm1cIj09PXI/ZTp0Lm1vbnRoKCksYT1cImRcIj09PXI/ZTp0LmRheSgpO3JldHVyblwieVwiIT09ciYmXCJtXCIhPT1yfHwoYT1NYXRoLm1pbihhLHRoaXMuZGF5c0luTW9udGgobixpKSkpLHQuZGF0ZShuLGksYSl9LGlzVmFsaWQ6ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3ZhbGlkYXRlTGV2ZWwrKzt2YXIgbj10aGlzLmhhc1llYXJaZXJvfHwwIT09dDtpZihuKXt2YXIgaT10aGlzLm5ld0RhdGUodCxlLHRoaXMubWluRGF5KTtuPWU+PXRoaXMubWluTW9udGgmJmUtdGhpcy5taW5Nb250aDx0aGlzLm1vbnRoc0luWWVhcihpKSYmcj49dGhpcy5taW5EYXkmJnItdGhpcy5taW5EYXk8dGhpcy5kYXlzSW5Nb250aChpKX1yZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLG59LHRvSlNEYXRlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkRGF0ZSk7cmV0dXJuIGMuaW5zdGFuY2UoKS5mcm9tSkQodGhpcy50b0pEKG4pKS50b0pTRGF0ZSgpfSxmcm9tSlNEYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZyb21KRChjLmluc3RhbmNlKCkuZnJvbUpTRGF0ZSh0KS50b0pEKCkpfSxfdmFsaWRhdGU6ZnVuY3Rpb24odCxlLHIsbil7aWYodC55ZWFyKXtpZigwPT09dGhpcy5fdmFsaWRhdGVMZXZlbCYmdGhpcy5uYW1lIT09dC5jYWxlbmRhcigpLm5hbWUpdGhyb3coYy5sb2NhbC5kaWZmZXJlbnRDYWxlbmRhcnN8fGMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmRpZmZlcmVudENhbGVuZGFycykucmVwbGFjZSgvXFx7MFxcfS8sdGhpcy5sb2NhbC5uYW1lKS5yZXBsYWNlKC9cXHsxXFx9Lyx0LmNhbGVuZGFyKCkubG9jYWwubmFtZSk7cmV0dXJuIHR9dHJ5e2lmKHRoaXMuX3ZhbGlkYXRlTGV2ZWwrKywxPT09dGhpcy5fdmFsaWRhdGVMZXZlbCYmIXRoaXMuaXNWYWxpZCh0LGUscikpdGhyb3cgbi5yZXBsYWNlKC9cXHswXFx9Lyx0aGlzLmxvY2FsLm5hbWUpO3ZhciBpPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLSxpfWNhdGNoKHQpe3Rocm93IHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLSx0fX19KSxsLnByb3RvdHlwZT1uZXcgcyxuKGwucHJvdG90eXBlLHtuYW1lOlwiR3JlZ29yaWFuXCIsamRFcG9jaDoxNzIxNDI1LjUsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOntcIlwiOntuYW1lOlwiR3JlZ29yaWFuXCIsZXBvY2hzOltcIkJDRVwiLFwiQ0VcIl0sbW9udGhOYW1lczpbXCJKYW51YXJ5XCIsXCJGZWJydWFyeVwiLFwiTWFyY2hcIixcIkFwcmlsXCIsXCJNYXlcIixcIkp1bmVcIixcIkp1bHlcIixcIkF1Z3VzdFwiLFwiU2VwdGVtYmVyXCIsXCJPY3RvYmVyXCIsXCJOb3ZlbWJlclwiLFwiRGVjZW1iZXJcIl0sbW9udGhOYW1lc1Nob3J0OltcIkphblwiLFwiRmViXCIsXCJNYXJcIixcIkFwclwiLFwiTWF5XCIsXCJKdW5cIixcIkp1bFwiLFwiQXVnXCIsXCJTZXBcIixcIk9jdFwiLFwiTm92XCIsXCJEZWNcIl0sZGF5TmFtZXM6W1wiU3VuZGF5XCIsXCJNb25kYXlcIixcIlR1ZXNkYXlcIixcIldlZG5lc2RheVwiLFwiVGh1cnNkYXlcIixcIkZyaWRheVwiLFwiU2F0dXJkYXlcIl0sZGF5TmFtZXNTaG9ydDpbXCJTdW5cIixcIk1vblwiLFwiVHVlXCIsXCJXZWRcIixcIlRodVwiLFwiRnJpXCIsXCJTYXRcIl0sZGF5TmFtZXNNaW46W1wiU3VcIixcIk1vXCIsXCJUdVwiLFwiV2VcIixcIlRoXCIsXCJGclwiLFwiU2FcIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDpcIm1tL2RkL3l5eXlcIixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZFllYXJ8fGMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWRZZWFyKTtyZXR1cm4odD1lLnllYXIoKSsoZS55ZWFyKCk8MD8xOjApKSU0PT0wJiYodCUxMDAhPTB8fHQlNDAwPT0wKX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoNC0obi5kYXlPZldlZWsoKXx8NyksXCJkXCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkTW9udGh8fGMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbXCJcIl0uaW52YWxpZERhdGUpO3Q9bi55ZWFyKCksZT1uLm1vbnRoKCkscj1uLmRheSgpLHQ8MCYmdCsrLGU8MyYmKGUrPTEyLHQtLSk7dmFyIGk9TWF0aC5mbG9vcih0LzEwMCksYT0yLWkrTWF0aC5mbG9vcihpLzQpO3JldHVybiBNYXRoLmZsb29yKDM2NS4yNSoodCs0NzE2KSkrTWF0aC5mbG9vcigzMC42MDAxKihlKzEpKStyK2EtMTUyNC41fSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcih0Ky41KSxyPU1hdGguZmxvb3IoKGUtMTg2NzIxNi4yNSkvMzY1MjQuMjUpLG49KHI9ZSsxK3ItTWF0aC5mbG9vcihyLzQpKSsxNTI0LGk9TWF0aC5mbG9vcigobi0xMjIuMSkvMzY1LjI1KSxhPU1hdGguZmxvb3IoMzY1LjI1KmkpLG89TWF0aC5mbG9vcigobi1hKS8zMC42MDAxKSxzPW4tYS1NYXRoLmZsb29yKDMwLjYwMDEqbyksbD1vLShvPjEzLjU/MTM6MSksYz1pLShsPjIuNT80NzE2OjQ3MTUpO3JldHVybiBjPD0wJiZjLS0sdGhpcy5uZXdEYXRlKGMsbCxzKX0sdG9KU0RhdGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWREYXRlKSxpPW5ldyBEYXRlKG4ueWVhcigpLG4ubW9udGgoKS0xLG4uZGF5KCkpO3JldHVybiBpLnNldEhvdXJzKDApLGkuc2V0TWludXRlcygwKSxpLnNldFNlY29uZHMoMCksaS5zZXRNaWxsaXNlY29uZHMoMCksaS5zZXRIb3VycyhpLmdldEhvdXJzKCk+MTI/aS5nZXRIb3VycygpKzI6MCksaX0sZnJvbUpTRGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5uZXdEYXRlKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCkrMSx0LmdldERhdGUoKSl9fSk7dmFyIGM9ZS5leHBvcnRzPW5ldyBpO2MuY2RhdGU9YSxjLmJhc2VDYWxlbmRhcj1zLGMuY2FsZW5kYXJzLmdyZWdvcmlhbj1sfSx7XCJvYmplY3QtYXNzaWduXCI6NDQ3fV0sNTU3OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcIm9iamVjdC1hc3NpZ25cIiksaT10KFwiLi9tYWluXCIpO24oaS5yZWdpb25hbE9wdGlvbnNbXCJcIl0se2ludmFsaWRBcmd1bWVudHM6XCJJbnZhbGlkIGFyZ3VtZW50c1wiLGludmFsaWRGb3JtYXQ6XCJDYW5ub3QgZm9ybWF0IGEgZGF0ZSBmcm9tIGFub3RoZXIgY2FsZW5kYXJcIixtaXNzaW5nTnVtYmVyQXQ6XCJNaXNzaW5nIG51bWJlciBhdCBwb3NpdGlvbiB7MH1cIix1bmtub3duTmFtZUF0OlwiVW5rbm93biBuYW1lIGF0IHBvc2l0aW9uIHswfVwiLHVuZXhwZWN0ZWRMaXRlcmFsQXQ6XCJVbmV4cGVjdGVkIGxpdGVyYWwgYXQgcG9zaXRpb24gezB9XCIsdW5leHBlY3RlZFRleHQ6XCJBZGRpdGlvbmFsIHRleHQgZm91bmQgYXQgZW5kXCJ9KSxpLmxvY2FsPWkucmVnaW9uYWxPcHRpb25zW1wiXCJdLG4oaS5jZGF0ZS5wcm90b3R5cGUse2Zvcm1hdERhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgdCYmKGU9dCx0PVwiXCIpLHRoaXMuX2NhbGVuZGFyLmZvcm1hdERhdGUodHx8XCJcIix0aGlzLGUpfX0pLG4oaS5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLHtVTklYX0VQT0NIOmkuaW5zdGFuY2UoKS5uZXdEYXRlKDE5NzAsMSwxKS50b0pEKCksU0VDU19QRVJfREFZOjg2NDAwLFRJQ0tTX0VQT0NIOmkuaW5zdGFuY2UoKS5qZEVwb2NoLFRJQ0tTX1BFUl9EQVk6ODY0ZTksQVRPTTpcInl5eXktbW0tZGRcIixDT09LSUU6XCJELCBkZCBNIHl5eXlcIixGVUxMOlwiREQsIE1NIGQsIHl5eXlcIixJU09fODYwMTpcInl5eXktbW0tZGRcIixKVUxJQU46XCJKXCIsUkZDXzgyMjpcIkQsIGQgTSB5eVwiLFJGQ184NTA6XCJERCwgZGQtTS15eVwiLFJGQ18xMDM2OlwiRCwgZCBNIHl5XCIsUkZDXzExMjM6XCJELCBkIE0geXl5eVwiLFJGQ18yODIyOlwiRCwgZCBNIHl5eXlcIixSU1M6XCJELCBkIE0geXlcIixUSUNLUzpcIiFcIixUSU1FU1RBTVA6XCJAXCIsVzNDOlwieXl5eS1tbS1kZFwiLGZvcm1hdERhdGU6ZnVuY3Rpb24odCxlLHIpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0JiYocj1lLGU9dCx0PVwiXCIpLCFlKXJldHVyblwiXCI7aWYoZS5jYWxlbmRhcigpIT09dGhpcyl0aHJvdyBpLmxvY2FsLmludmFsaWRGb3JtYXR8fGkucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWRGb3JtYXQ7dD10fHx0aGlzLmxvY2FsLmRhdGVGb3JtYXQ7Zm9yKHZhciBuLGEsbyxzLGw9KHI9cnx8e30pLmRheU5hbWVzU2hvcnR8fHRoaXMubG9jYWwuZGF5TmFtZXNTaG9ydCxjPXIuZGF5TmFtZXN8fHRoaXMubG9jYWwuZGF5TmFtZXMsdT1yLm1vbnRoTnVtYmVyc3x8dGhpcy5sb2NhbC5tb250aE51bWJlcnMsaD1yLm1vbnRoTmFtZXNTaG9ydHx8dGhpcy5sb2NhbC5tb250aE5hbWVzU2hvcnQsZj1yLm1vbnRoTmFtZXN8fHRoaXMubG9jYWwubW9udGhOYW1lcyxwPShyLmNhbGN1bGF0ZVdlZWt8fHRoaXMubG9jYWwuY2FsY3VsYXRlV2VlayxmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0xO3crbjx0Lmxlbmd0aCYmdC5jaGFyQXQodytuKT09PWU7KW4rKztyZXR1cm4gdys9bi0xLE1hdGguZmxvb3Iobi8ocnx8MSkpPjF9KSxkPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPVwiXCIrZTtpZihwKHQsbikpZm9yKDtpLmxlbmd0aDxyOylpPVwiMFwiK2k7cmV0dXJuIGl9LGc9dGhpcyx2PWZ1bmN0aW9uKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHU/dS5jYWxsKGcsdCxwKFwibVwiKSk6eChkKFwibVwiLHQubW9udGgoKSwyKSl9LG09ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9cImZ1bmN0aW9uXCI9PXR5cGVvZiBmP2YuY2FsbChnLHQpOmZbdC5tb250aCgpLWcubWluTW9udGhdOlwiZnVuY3Rpb25cIj09dHlwZW9mIGg/aC5jYWxsKGcsdCk6aFt0Lm1vbnRoKCktZy5taW5Nb250aF19LHk9dGhpcy5sb2NhbC5kaWdpdHMseD1mdW5jdGlvbih0KXtyZXR1cm4gci5sb2NhbE51bWJlcnMmJnk/eSh0KTp0fSxiPVwiXCIsXz0hMSx3PTA7dzx0Lmxlbmd0aDt3KyspaWYoXylcIidcIiE9PXQuY2hhckF0KHcpfHxwKFwiJ1wiKT9iKz10LmNoYXJBdCh3KTpfPSExO2Vsc2Ugc3dpdGNoKHQuY2hhckF0KHcpKXtjYXNlXCJkXCI6Yis9eChkKFwiZFwiLGUuZGF5KCksMikpO2JyZWFrO2Nhc2VcIkRcIjpiKz0obj1cIkRcIixhPWUuZGF5T2ZXZWVrKCksbz1sLHM9YyxwKG4pP3NbYV06b1thXSk7YnJlYWs7Y2FzZVwib1wiOmIrPWQoXCJvXCIsZS5kYXlPZlllYXIoKSwzKTticmVhaztjYXNlXCJ3XCI6Yis9ZChcIndcIixlLndlZWtPZlllYXIoKSwyKTticmVhaztjYXNlXCJtXCI6Yis9dihlKTticmVhaztjYXNlXCJNXCI6Yis9bShlLHAoXCJNXCIpKTticmVhaztjYXNlXCJ5XCI6Yis9cChcInlcIiwyKT9lLnllYXIoKTooZS55ZWFyKCklMTAwPDEwP1wiMFwiOlwiXCIpK2UueWVhcigpJTEwMDticmVhaztjYXNlXCJZXCI6cChcIllcIiwyKSxiKz1lLmZvcm1hdFllYXIoKTticmVhaztjYXNlXCJKXCI6Yis9ZS50b0pEKCk7YnJlYWs7Y2FzZVwiQFwiOmIrPShlLnRvSkQoKS10aGlzLlVOSVhfRVBPQ0gpKnRoaXMuU0VDU19QRVJfREFZO2JyZWFrO2Nhc2VcIiFcIjpiKz0oZS50b0pEKCktdGhpcy5USUNLU19FUE9DSCkqdGhpcy5USUNLU19QRVJfREFZO2JyZWFrO2Nhc2VcIidcIjpwKFwiJ1wiKT9iKz1cIidcIjpfPSEwO2JyZWFrO2RlZmF1bHQ6Yis9dC5jaGFyQXQodyl9cmV0dXJuIGJ9LHBhcnNlRGF0ZTpmdW5jdGlvbih0LGUscil7aWYobnVsbD09ZSl0aHJvdyBpLmxvY2FsLmludmFsaWRBcmd1bWVudHN8fGkucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWRBcmd1bWVudHM7aWYoXCJcIj09PShlPVwib2JqZWN0XCI9PXR5cGVvZiBlP2UudG9TdHJpbmcoKTplK1wiXCIpKXJldHVybiBudWxsO3Q9dHx8dGhpcy5sb2NhbC5kYXRlRm9ybWF0O3ZhciBuPShyPXJ8fHt9KS5zaG9ydFllYXJDdXRvZmZ8fHRoaXMuc2hvcnRZZWFyQ3V0b2ZmO249XCJzdHJpbmdcIiE9dHlwZW9mIG4/bjp0aGlzLnRvZGF5KCkueWVhcigpJTEwMCtwYXJzZUludChuLDEwKTtmb3IodmFyIGE9ci5kYXlOYW1lc1Nob3J0fHx0aGlzLmxvY2FsLmRheU5hbWVzU2hvcnQsbz1yLmRheU5hbWVzfHx0aGlzLmxvY2FsLmRheU5hbWVzLHM9ci5wYXJzZU1vbnRofHx0aGlzLmxvY2FsLnBhcnNlTW9udGgsbD1yLm1vbnRoTnVtYmVyc3x8dGhpcy5sb2NhbC5tb250aE51bWJlcnMsYz1yLm1vbnRoTmFtZXNTaG9ydHx8dGhpcy5sb2NhbC5tb250aE5hbWVzU2hvcnQsdT1yLm1vbnRoTmFtZXN8fHRoaXMubG9jYWwubW9udGhOYW1lcyxoPS0xLGY9LTEscD0tMSxkPS0xLGc9LTEsdj0hMSxtPSExLHk9ZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MTtNK248dC5sZW5ndGgmJnQuY2hhckF0KE0rbik9PT1lOyluKys7cmV0dXJuIE0rPW4tMSxNYXRoLmZsb29yKG4vKHJ8fDEpKT4xfSx4PWZ1bmN0aW9uKHQscil7dmFyIG49eSh0LHIpLGE9WzIsMyxuPzQ6MixuPzQ6MiwxMCwxMSwyMF1bXCJveVlKQCFcIi5pbmRleE9mKHQpKzFdLG89bmV3IFJlZ0V4cChcIl4tP1xcXFxkezEsXCIrYStcIn1cIikscz1lLnN1YnN0cmluZyhUKS5tYXRjaChvKTtpZighcyl0aHJvdyhpLmxvY2FsLm1pc3NpbmdOdW1iZXJBdHx8aS5yZWdpb25hbE9wdGlvbnNbXCJcIl0ubWlzc2luZ051bWJlckF0KS5yZXBsYWNlKC9cXHswXFx9LyxUKTtyZXR1cm4gVCs9c1swXS5sZW5ndGgscGFyc2VJbnQoc1swXSwxMCl9LGI9dGhpcyxfPWZ1bmN0aW9uKCl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgbCl7eShcIm1cIik7dmFyIHQ9bC5jYWxsKGIsZS5zdWJzdHJpbmcoVCkpO3JldHVybiBUKz10Lmxlbmd0aCx0fXJldHVybiB4KFwibVwiKX0sdz1mdW5jdGlvbih0LHIsbixhKXtmb3IodmFyIG89eSh0LGEpP246cixzPTA7czxvLmxlbmd0aDtzKyspaWYoZS5zdWJzdHIoVCxvW3NdLmxlbmd0aCkudG9Mb3dlckNhc2UoKT09PW9bc10udG9Mb3dlckNhc2UoKSlyZXR1cm4gVCs9b1tzXS5sZW5ndGgscytiLm1pbk1vbnRoO3Rocm93KGkubG9jYWwudW5rbm93bk5hbWVBdHx8aS5yZWdpb25hbE9wdGlvbnNbXCJcIl0udW5rbm93bk5hbWVBdCkucmVwbGFjZSgvXFx7MFxcfS8sVCl9LGs9ZnVuY3Rpb24oKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB1KXt2YXIgdD15KFwiTVwiKT91LmNhbGwoYixlLnN1YnN0cmluZyhUKSk6Yy5jYWxsKGIsZS5zdWJzdHJpbmcoVCkpO3JldHVybiBUKz10Lmxlbmd0aCx0fXJldHVybiB3KFwiTVwiLGMsdSl9LEE9ZnVuY3Rpb24oKXtpZihlLmNoYXJBdChUKSE9PXQuY2hhckF0KE0pKXRocm93KGkubG9jYWwudW5leHBlY3RlZExpdGVyYWxBdHx8aS5yZWdpb25hbE9wdGlvbnNbXCJcIl0udW5leHBlY3RlZExpdGVyYWxBdCkucmVwbGFjZSgvXFx7MFxcfS8sVCk7VCsrfSxUPTAsTT0wO008dC5sZW5ndGg7TSsrKWlmKG0pXCInXCIhPT10LmNoYXJBdChNKXx8eShcIidcIik/QSgpOm09ITE7ZWxzZSBzd2l0Y2godC5jaGFyQXQoTSkpe2Nhc2VcImRcIjpkPXgoXCJkXCIpO2JyZWFrO2Nhc2VcIkRcIjp3KFwiRFwiLGEsbyk7YnJlYWs7Y2FzZVwib1wiOmc9eChcIm9cIik7YnJlYWs7Y2FzZVwid1wiOngoXCJ3XCIpO2JyZWFrO2Nhc2VcIm1cIjpwPV8oKTticmVhaztjYXNlXCJNXCI6cD1rKCk7YnJlYWs7Y2FzZVwieVwiOnZhciBTPU07dj0heShcInlcIiwyKSxNPVMsZj14KFwieVwiLDIpO2JyZWFrO2Nhc2VcIllcIjpmPXgoXCJZXCIsMik7YnJlYWs7Y2FzZVwiSlwiOmg9eChcIkpcIikrLjUsXCIuXCI9PT1lLmNoYXJBdChUKSYmKFQrKyx4KFwiSlwiKSk7YnJlYWs7Y2FzZVwiQFwiOmg9eChcIkBcIikvdGhpcy5TRUNTX1BFUl9EQVkrdGhpcy5VTklYX0VQT0NIO2JyZWFrO2Nhc2VcIiFcIjpoPXgoXCIhXCIpL3RoaXMuVElDS1NfUEVSX0RBWSt0aGlzLlRJQ0tTX0VQT0NIO2JyZWFrO2Nhc2VcIipcIjpUPWUubGVuZ3RoO2JyZWFrO2Nhc2VcIidcIjp5KFwiJ1wiKT9BKCk6bT0hMDticmVhaztkZWZhdWx0OkEoKX1pZihUPGUubGVuZ3RoKXRocm93IGkubG9jYWwudW5leHBlY3RlZFRleHR8fGkucmVnaW9uYWxPcHRpb25zW1wiXCJdLnVuZXhwZWN0ZWRUZXh0O2lmKC0xPT09Zj9mPXRoaXMudG9kYXkoKS55ZWFyKCk6ZjwxMDAmJnYmJihmKz0tMT09PW4/MTkwMDp0aGlzLnRvZGF5KCkueWVhcigpLXRoaXMudG9kYXkoKS55ZWFyKCklMTAwLShmPD1uPzA6MTAwKSksXCJzdHJpbmdcIj09dHlwZW9mIHAmJihwPXMuY2FsbCh0aGlzLGYscCkpLGc+LTEpe3A9MSxkPWc7Zm9yKHZhciBFPXRoaXMuZGF5c0luTW9udGgoZixwKTtkPkU7RT10aGlzLmRheXNJbk1vbnRoKGYscCkpcCsrLGQtPUV9cmV0dXJuIGg+LTE/dGhpcy5mcm9tSkQoaCk6dGhpcy5uZXdEYXRlKGYscCxkKX0sZGV0ZXJtaW5lRGF0ZTpmdW5jdGlvbih0LGUscixuLGkpe3ImJlwib2JqZWN0XCIhPXR5cGVvZiByJiYoaT1uLG49cixyPW51bGwpLFwic3RyaW5nXCIhPXR5cGVvZiBuJiYoaT1uLG49XCJcIik7dmFyIGE9dGhpcztyZXR1cm4gZT1lP2UubmV3RGF0ZSgpOm51bGwsdD1udWxsPT10P2U6XCJzdHJpbmdcIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBhLnBhcnNlRGF0ZShuLHQsaSl9Y2F0Y2godCl7fWZvcih2YXIgZT0oKHQ9dC50b0xvd2VyQ2FzZSgpKS5tYXRjaCgvXmMvKSYmcj9yLm5ld0RhdGUoKTpudWxsKXx8YS50b2RheSgpLG89LyhbKy1dP1swLTldKylcXHMqKGR8d3xtfHkpPy9nLHM9by5leGVjKHQpO3M7KWUuYWRkKHBhcnNlSW50KHNbMV0sMTApLHNbMl18fFwiZFwiKSxzPW8uZXhlYyh0KTtyZXR1cm4gZX0odCk6XCJudW1iZXJcIj09dHlwZW9mIHQ/aXNOYU4odCl8fHQ9PT0xLzB8fHQ9PT0tMS8wP2U6YS50b2RheSgpLmFkZCh0LFwiZFwiKTphLm5ld0RhdGUodCl9fSl9LHtcIi4vbWFpblwiOjU1NixcIm9iamVjdC1hc3NpZ25cIjo0NDd9XSw1NTg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dChcImN3aXNlLWNvbXBpbGVyXCIpKHthcmdzOltcImFycmF5XCIse29mZnNldDpbMV0sYXJyYXk6MH0sXCJzY2FsYXJcIixcInNjYWxhclwiLFwiaW5kZXhcIl0scHJlOntib2R5Olwie31cIixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keTpcInt9XCIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6XCJ7XFxuICAgICAgICB2YXIgX2lubGluZV8xX2RhID0gX2lubGluZV8xX2FyZzBfIC0gX2lubGluZV8xX2FyZzNfXFxuICAgICAgICB2YXIgX2lubGluZV8xX2RiID0gX2lubGluZV8xX2FyZzFfIC0gX2lubGluZV8xX2FyZzNfXFxuICAgICAgICBpZigoX2lubGluZV8xX2RhID49IDApICE9PSAoX2lubGluZV8xX2RiID49IDApKSB7XFxuICAgICAgICAgIF9pbmxpbmVfMV9hcmcyXy5wdXNoKF9pbmxpbmVfMV9hcmc0X1swXSArIDAuNSArIDAuNSAqIChfaW5saW5lXzFfZGEgKyBfaW5saW5lXzFfZGIpIC8gKF9pbmxpbmVfMV9kYSAtIF9pbmxpbmVfMV9kYikpXFxuICAgICAgICB9XFxuICAgICAgfVwiLGFyZ3M6W3tuYW1lOlwiX2lubGluZV8xX2FyZzBfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfMV9hcmcxX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzFfYXJnMl9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xX2FyZzNfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfSx7bmFtZTpcIl9pbmxpbmVfMV9hcmc0X1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXCJfaW5saW5lXzFfZGFcIixcIl9pbmxpbmVfMV9kYlwiXX0sZnVuY05hbWU6XCJ6ZXJvQ3Jvc3NpbmdzXCJ9KX0se1wiY3dpc2UtY29tcGlsZXJcIjoxMzd9XSw1NTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1bXTtyZXR1cm4gZT0rZXx8MCxuKHQuaGkodC5zaGFwZVswXS0xKSxyLGUpLHJ9O3ZhciBuPXQoXCIuL2xpYi96Yy1jb3JlXCIpfSx7XCIuL2xpYi96Yy1jb3JlXCI6NTU4fV0sNTYwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPVt7cGF0aDpcIlwiLGJhY2tvZmY6MH0se3BhdGg6XCJNLTIuNCwtM1YzTDAuNiwwWlwiLGJhY2tvZmY6LjZ9LHtwYXRoOlwiTS0zLjcsLTIuNVYyLjVMMS4zLDBaXCIsYmFja29mZjoxLjN9LHtwYXRoOlwiTS00LjQ1LC0zTC0xLjY1LC0wLjJWMC4yTC00LjQ1LDNMMS41NSwwWlwiLGJhY2tvZmY6MS41NX0se3BhdGg6XCJNLTIuMiwtMi4yTC0wLjIsLTAuMlYwLjJMLTIuMiwyLjJMLTEuNCwzTDEuNiwwTC0xLjQsLTNaXCIsYmFja29mZjoxLjZ9LHtwYXRoOlwiTS00LjQsLTIuMUwtMC42LC0wLjJWMC4yTC00LjQsMi4xTC00LDNMMiwwTC00LC0zWlwiLGJhY2tvZmY6Mn0se3BhdGg6XCJNMiwwQTIsMiAwIDEsMSAwLC0yQTIsMiAwIDAsMSAyLDBaXCIsYmFja29mZjowLG5vUm90YXRlOiEwfSx7cGF0aDpcIk0yLDJWLTJILTJWMlpcIixiYWNrb2ZmOjAsbm9Sb3RhdGU6ITB9XX0se31dLDU2MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2Fycm93X3BhdGhzXCIpLGk9dChcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzXCIpLG89dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIikudGVtcGxhdGVkQXJyYXk7ZS5leHBvcnRzPW8oXCJhbm5vdGF0aW9uXCIse3Zpc2libGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LHRleHQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LHRleHRhbmdsZTp7dmFsVHlwZTpcImFuZ2xlXCIsZGZsdDowLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0sZm9udDppKHtlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCIsY29sb3JFZGl0VHlwZTpcImFycmF5ZHJhd1wifSksd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MSxkZmx0Om51bGwsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSxoZWlnaHQ6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MSxkZmx0Om51bGwsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSxvcGFjaXR5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGFsaWduOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJsZWZ0XCIsXCJjZW50ZXJcIixcInJpZ2h0XCJdLGRmbHQ6XCJjZW50ZXJcIixlZGl0VHlwZTpcImFycmF5ZHJhd1wifSx2YWxpZ246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInRvcFwiLFwibWlkZGxlXCIsXCJib3R0b21cIl0sZGZsdDpcIm1pZGRsZVwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGJnY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6XCJyZ2JhKDAsMCwwLDApXCIsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6XCJyZ2JhKDAsMCwwLDApXCIsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0sYm9yZGVycGFkOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSxzaG93YXJyb3c6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LGFycm93Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGFycm93aGVhZDp7dmFsVHlwZTpcImludGVnZXJcIixtaW46MCxtYXg6bi5sZW5ndGgsZGZsdDoxLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LHN0YXJ0YXJyb3doZWFkOnt2YWxUeXBlOlwiaW50ZWdlclwiLG1pbjowLG1heDpuLmxlbmd0aCxkZmx0OjEsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0sYXJyb3dzaWRlOnt2YWxUeXBlOlwiZmxhZ2xpc3RcIixmbGFnczpbXCJlbmRcIixcInN0YXJ0XCJdLGV4dHJhczpbXCJub25lXCJdLGRmbHQ6XCJlbmRcIixlZGl0VHlwZTpcImFycmF5ZHJhd1wifSxhcnJvd3NpemU6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46LjMsZGZsdDoxLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0sc3RhcnRhcnJvd3NpemU6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46LjMsZGZsdDoxLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0sYXJyb3d3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjouMSxlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LHN0YW5kb2ZmOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDowLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0sc3RhcnRzdGFuZG9mZjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LGF4Ont2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSxheTp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0sYXhyZWY6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsZGZsdDpcInBpeGVsXCIsdmFsdWVzOltcInBpeGVsXCIsYS5pZFJlZ2V4LngudG9TdHJpbmcoKV0sZWRpdFR5cGU6XCJjYWxjXCJ9LGF5cmVmOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLGRmbHQ6XCJwaXhlbFwiLHZhbHVlczpbXCJwaXhlbFwiLGEuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOlwiY2FsY1wifSx4cmVmOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJwYXBlclwiLGEuaWRSZWdleC54LnRvU3RyaW5nKCldLGVkaXRUeXBlOlwiY2FsY1wifSx4Ont2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSx4YW5jaG9yOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhdXRvXCIsXCJsZWZ0XCIsXCJjZW50ZXJcIixcInJpZ2h0XCJdLGRmbHQ6XCJhdXRvXCIsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSx4c2hpZnQ6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjAsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSx5cmVmOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJwYXBlclwiLGEuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOlwiY2FsY1wifSx5Ont2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSx5YW5jaG9yOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhdXRvXCIsXCJ0b3BcIixcIm1pZGRsZVwiLFwiYm90dG9tXCJdLGRmbHQ6XCJhdXRvXCIsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSx5c2hpZnQ6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjAsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSxjbGlja3Rvc2hvdzp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6WyExLFwib25vZmZcIixcIm9ub3V0XCJdLGRmbHQ6ITEsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0seGNsaWNrOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0seWNsaWNrOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0saG92ZXJsYWJlbDp7Ymdjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGZvbnQ6aSh7ZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0pLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGNhcHR1cmVldmVudHM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0sZWRpdFR5cGU6XCJjYWxjXCIsX2RlcHJlY2F0ZWQ6e3JlZjp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwiY2FsY1wifX19KX0se1wiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHNcIjo3NTUsXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIjo3NzUsXCIuL2Fycm93X3BhdGhzXCI6NTYwfV0sNTYyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxhPXQoXCIuL2RyYXdcIikuZHJhdztmdW5jdGlvbiBvKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7bi5maWx0ZXJWaXNpYmxlKGUuYW5ub3RhdGlvbnMpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHI9aS5nZXRGcm9tSWQodCxlLnhyZWYpLG49aS5nZXRGcm9tSWQodCxlLnlyZWYpO2UuX2V4dHJlbWVzPXt9LHImJnMoZSxyKSxuJiZzKGUsbil9KX1mdW5jdGlvbiBzKHQsZSl7dmFyIHIsbj1lLl9pZCxhPW4uY2hhckF0KDApLG89dFthXSxzPXRbXCJhXCIrYV0sbD10W2ErXCJyZWZcIl0sYz10W1wiYVwiK2ErXCJyZWZcIl0sdT10W1wiX1wiK2ErXCJwYWRwbHVzXCJdLGg9dFtcIl9cIithK1wicGFkbWludXNcIl0sZj17eDoxLHk6LTF9W2FdKnRbYStcInNoaWZ0XCJdLHA9Myp0LmFycm93c2l6ZSp0LmFycm93d2lkdGh8fDAsZD1wK2YsZz1wLWYsdj0zKnQuc3RhcnRhcnJvd3NpemUqdC5hcnJvd3dpZHRofHwwLG09ditmLHk9di1mO2lmKGM9PT1sKXt2YXIgeD1pLmZpbmRFeHRyZW1lcyhlLFtlLnIyYyhvKV0se3BwYWRwbHVzOmQscHBhZG1pbnVzOmd9KSxiPWkuZmluZEV4dHJlbWVzKGUsW2UucjJjKHMpXSx7cHBhZHBsdXM6TWF0aC5tYXgodSxtKSxwcGFkbWludXM6TWF0aC5tYXgoaCx5KX0pO3I9e21pbjpbeC5taW5bMF0sYi5taW5bMF1dLG1heDpbeC5tYXhbMF0sYi5tYXhbMF1dfX1lbHNlIG09cz9tK3M6bSx5PXM/eS1zOnkscj1pLmZpbmRFeHRyZW1lcyhlLFtlLnIyYyhvKV0se3BwYWRwbHVzOk1hdGgubWF4KHUsZCxtKSxwcGFkbWludXM6TWF0aC5tYXgoaCxnLHkpfSk7dC5fZXh0cmVtZXNbbl09cn1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtpZihuLmZpbHRlclZpc2libGUoZS5hbm5vdGF0aW9ucykubGVuZ3RoJiZ0Ll9mdWxsRGF0YS5sZW5ndGgpcmV0dXJuIG4uc3luY09yQXN5bmMoW2Esb10sdCl9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4vZHJhd1wiOjU2N31dLDU2MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcmVnaXN0cnlcIiksYT10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKS5hcnJheUVkaXRvcjtmdW5jdGlvbiBvKHQsZSl7dmFyIHIsbixpLGEsbyxsLGMsdT10Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zLGg9W10sZj1bXSxwPVtdLGQ9KGV8fFtdKS5sZW5ndGg7Zm9yKHI9MDtyPHUubGVuZ3RoO3IrKylpZihhPShpPXVbcl0pLmNsaWNrdG9zaG93KXtmb3Iobj0wO248ZDtuKyspaWYobD0obz1lW25dKS54YXhpcyxjPW8ueWF4aXMsbC5faWQ9PT1pLnhyZWYmJmMuX2lkPT09aS55cmVmJiZsLmQycihvLngpPT09cyhpLl94Y2xpY2ssbCkmJmMuZDJyKG8ueSk9PT1zKGkuX3ljbGljayxjKSl7KGkudmlzaWJsZT9cIm9ub3V0XCI9PT1hP2Y6cDpoKS5wdXNoKHIpO2JyZWFrfW49PT1kJiZpLnZpc2libGUmJlwib25vdXRcIj09PWEmJmYucHVzaChyKX1yZXR1cm57b246aCxvZmY6ZixleHBsaWNpdE9mZjpwfX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuXCJsb2dcIj09PWUudHlwZT9lLmwycih0KTplLmQycih0KX1lLmV4cG9ydHM9e2hhc0NsaWNrVG9TaG93OmZ1bmN0aW9uKHQsZSl7dmFyIHI9byh0LGUpO3JldHVybiByLm9uLmxlbmd0aD4wfHxyLmV4cGxpY2l0T2ZmLmxlbmd0aD4wfSxvbkNsaWNrOmZ1bmN0aW9uKHQsZSl7dmFyIHIscyxsPW8odCxlKSxjPWwub24sdT1sLm9mZi5jb25jYXQobC5leHBsaWNpdE9mZiksaD17fSxmPXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnM7aWYoIWMubGVuZ3RoJiYhdS5sZW5ndGgpcmV0dXJuO2ZvcihyPTA7cjxjLmxlbmd0aDtyKyspKHM9YSh0LmxheW91dCxcImFubm90YXRpb25zXCIsZltjW3JdXSkpLm1vZGlmeUl0ZW0oXCJ2aXNpYmxlXCIsITApLG4uZXh0ZW5kRmxhdChoLHMuZ2V0VXBkYXRlT2JqKCkpO2ZvcihyPTA7cjx1Lmxlbmd0aDtyKyspKHM9YSh0LmxheW91dCxcImFubm90YXRpb25zXCIsZlt1W3JdXSkpLm1vZGlmeUl0ZW0oXCJ2aXNpYmxlXCIsITEpLG4uZXh0ZW5kRmxhdChoLHMuZ2V0VXBkYXRlT2JqKCkpO3JldHVybiBpLmNhbGwoXCJ1cGRhdGVcIix0LHt9LGgpfX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi9yZWdpc3RyeVwiOjgyOX1dLDU2NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vY29sb3JcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe2EoXCJvcGFjaXR5XCIpO3ZhciBvPWEoXCJiZ2NvbG9yXCIpLHM9YShcImJvcmRlcmNvbG9yXCIpLGw9aS5vcGFjaXR5KHMpO2EoXCJib3JkZXJwYWRcIik7dmFyIGM9YShcImJvcmRlcndpZHRoXCIpLHU9YShcInNob3dhcnJvd1wiKTtpZihhKFwidGV4dFwiLHU/XCIgXCI6ci5fZGZsdFRpdGxlLmFubm90YXRpb24pLGEoXCJ0ZXh0YW5nbGVcIiksbi5jb2VyY2VGb250KGEsXCJmb250XCIsci5mb250KSxhKFwid2lkdGhcIiksYShcImFsaWduXCIpLGEoXCJoZWlnaHRcIikmJmEoXCJ2YWxpZ25cIiksdSl7dmFyIGgsZixwPWEoXCJhcnJvd3NpZGVcIik7LTEhPT1wLmluZGV4T2YoXCJlbmRcIikmJihoPWEoXCJhcnJvd2hlYWRcIiksZj1hKFwiYXJyb3dzaXplXCIpKSwtMSE9PXAuaW5kZXhPZihcInN0YXJ0XCIpJiYoYShcInN0YXJ0YXJyb3doZWFkXCIsaCksYShcInN0YXJ0YXJyb3dzaXplXCIsZikpLGEoXCJhcnJvd2NvbG9yXCIsbD9lLmJvcmRlcmNvbG9yOmkuZGVmYXVsdExpbmUpLGEoXCJhcnJvd3dpZHRoXCIsMioobCYmY3x8MSkpLGEoXCJzdGFuZG9mZlwiKSxhKFwic3RhcnRzdGFuZG9mZlwiKX12YXIgZD1hKFwiaG92ZXJ0ZXh0XCIpLGc9ci5ob3ZlcmxhYmVsfHx7fTtpZihkKXt2YXIgdj1hKFwiaG92ZXJsYWJlbC5iZ2NvbG9yXCIsZy5iZ2NvbG9yfHwoaS5vcGFjaXR5KG8pP2kucmdiKG8pOmkuZGVmYXVsdExpbmUpKSxtPWEoXCJob3ZlcmxhYmVsLmJvcmRlcmNvbG9yXCIsZy5ib3JkZXJjb2xvcnx8aS5jb250cmFzdCh2KSk7bi5jb2VyY2VGb250KGEsXCJob3ZlcmxhYmVsLmZvbnRcIix7ZmFtaWx5OmcuZm9udC5mYW1pbHksc2l6ZTpnLmZvbnQuc2l6ZSxjb2xvcjpnLmZvbnQuY29sb3J8fG19KX1hKFwiY2FwdHVyZWV2ZW50c1wiLCEhZCl9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9jb2xvclwiOjU3OH1dLDU2NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuLi8uLi9saWIvdG9fbG9nX3JhbmdlXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtlPWV8fHt9O3ZhciBvPVwibG9nXCI9PT1yJiZcImxpbmVhclwiPT09ZS50eXBlLHM9XCJsaW5lYXJcIj09PXImJlwibG9nXCI9PT1lLnR5cGU7aWYob3x8cylmb3IodmFyIGwsYyx1PXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnMsaD1lLl9pZC5jaGFyQXQoMCksZj0wO2Y8dS5sZW5ndGg7ZisrKWw9dVtmXSxjPVwiYW5ub3RhdGlvbnNbXCIrZitcIl0uXCIsbFtoK1wicmVmXCJdPT09ZS5faWQmJnAoaCksbFtcImFcIitoK1wicmVmXCJdPT09ZS5faWQmJnAoXCJhXCIraCk7ZnVuY3Rpb24gcCh0KXt2YXIgcj1sW3RdLHM9bnVsbDtzPW8/aShyLGUucmFuZ2UpOk1hdGgucG93KDEwLHIpLG4ocyl8fChzPW51bGwpLGEoYyt0LHMpfX19LHtcIi4uLy4uL2xpYi90b19sb2dfcmFuZ2VcIjo3MjcsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDU2NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksYT10KFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCIpLG89dChcIi4vY29tbW9uX2RlZmF1bHRzXCIpLHM9dChcIi4vYXR0cmlidXRlc1wiKTtmdW5jdGlvbiBsKHQsZSxyKXtmdW5jdGlvbiBhKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9dmFyIGw9YShcInZpc2libGVcIiksYz1hKFwiY2xpY2t0b3Nob3dcIik7aWYobHx8Yyl7byh0LGUscixhKTtmb3IodmFyIHU9ZS5zaG93YXJyb3csaD1bXCJ4XCIsXCJ5XCJdLGY9Wy0xMCwtMzBdLHA9e19mdWxsTGF5b3V0OnJ9LGQ9MDtkPDI7ZCsrKXt2YXIgZz1oW2RdLHY9aS5jb2VyY2VSZWYodCxlLHAsZyxcIlwiLFwicGFwZXJcIik7aWYoXCJwYXBlclwiIT09dilpLmdldEZyb21JZChwLHYpLl9hbm5JbmRpY2VzLnB1c2goZS5faW5kZXgpO2lmKGkuY29lcmNlUG9zaXRpb24oZSxwLGEsdixnLC41KSx1KXt2YXIgbT1cImFcIitnLHk9aS5jb2VyY2VSZWYodCxlLHAsbSxcInBpeGVsXCIpO1wicGl4ZWxcIiE9PXkmJnkhPT12JiYoeT1lW21dPVwicGl4ZWxcIik7dmFyIHg9XCJwaXhlbFwiPT09eT9mW2RdOi40O2kuY29lcmNlUG9zaXRpb24oZSxwLGEseSxtLHgpfWEoZytcImFuY2hvclwiKSxhKGcrXCJzaGlmdFwiKX1pZihuLm5vbmVPckFsbCh0LGUsW1wieFwiLFwieVwiXSksdSYmbi5ub25lT3JBbGwodCxlLFtcImF4XCIsXCJheVwiXSksYyl7dmFyIGI9YShcInhjbGlja1wiKSxfPWEoXCJ5Y2xpY2tcIik7ZS5feGNsaWNrPXZvaWQgMD09PWI/ZS54OmkuY2xlYW5Qb3NpdGlvbihiLHAsZS54cmVmKSxlLl95Y2xpY2s9dm9pZCAwPT09Xz9lLnk6aS5jbGVhblBvc2l0aW9uKF8scCxlLnlyZWYpfX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7YSh0LGUse25hbWU6XCJhbm5vdGF0aW9uc1wiLGhhbmRsZUl0ZW1EZWZhdWx0czpsfSl9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIjo3NDUsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4vYXR0cmlidXRlc1wiOjU2MSxcIi4vY29tbW9uX2RlZmF1bHRzXCI6NTY0fV0sNTY3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGE9dChcIi4uLy4uL3Bsb3RzL3Bsb3RzXCIpLG89dChcIi4uLy4uL2xpYlwiKSxzPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxsPXQoXCIuLi9jb2xvclwiKSxjPXQoXCIuLi9kcmF3aW5nXCIpLHU9dChcIi4uL2Z4XCIpLGg9dChcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiKSxmPXQoXCIuLi8uLi9saWIvc2V0Y3Vyc29yXCIpLHA9dChcIi4uL2RyYWdlbGVtZW50XCIpLGQ9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIikuYXJyYXlFZGl0b3IsZz10KFwiLi9kcmF3X2Fycm93X2hlYWRcIik7ZnVuY3Rpb24gdih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnNbZV18fHt9LG49cy5nZXRGcm9tSWQodCxyLnhyZWYpLGk9cy5nZXRGcm9tSWQodCxyLnlyZWYpO24mJm4uc2V0U2NhbGUoKSxpJiZpLnNldFNjYWxlKCksbSh0LHIsZSwhMSxuLGkpfWZ1bmN0aW9uIG0odCxlLHIsYSxzLHYpe3ZhciBtLHkseD10Ll9mdWxsTGF5b3V0LGI9dC5fZnVsbExheW91dC5fc2l6ZSxfPXQuX2NvbnRleHQuZWRpdHM7YT8obT1cImFubm90YXRpb24tXCIrYSx5PWErXCIuYW5ub3RhdGlvbnNcIik6KG09XCJhbm5vdGF0aW9uXCIseT1cImFubm90YXRpb25zXCIpO3ZhciB3PWQodC5sYXlvdXQseSxlKSxrPXcubW9kaWZ5QmFzZSxBPXcubW9kaWZ5SXRlbSxUPXcuZ2V0VXBkYXRlT2JqO3guX2luZm9sYXllci5zZWxlY3RBbGwoXCIuXCIrbSsnW2RhdGEtaW5kZXg9XCInK3IrJ1wiXScpLnJlbW92ZSgpO3ZhciBNPVwiY2xpcFwiK3guX3VpZCtcIl9hbm5cIityO2lmKGUuX2lucHV0JiYhMSE9PWUudmlzaWJsZSl7dmFyIFM9e3g6e30seTp7fX0sRT0rZS50ZXh0YW5nbGV8fDAsQz14Ll9pbmZvbGF5ZXIuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKG0sITApLmF0dHIoXCJkYXRhLWluZGV4XCIsU3RyaW5nKHIpKS5zdHlsZShcIm9wYWNpdHlcIixlLm9wYWNpdHkpLEw9Qy5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJhbm5vdGF0aW9uLXRleHQtZ1wiLCEwKSx6PV9bZS5zaG93YXJyb3c/XCJhbm5vdGF0aW9uVGFpbFwiOlwiYW5ub3RhdGlvblBvc2l0aW9uXCJdLE89ZS5jYXB0dXJlZXZlbnRzfHxfLmFubm90YXRpb25UZXh0fHx6LEk9TC5hcHBlbmQoXCJnXCIpLnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixPP1wiYWxsXCI6bnVsbCkuY2FsbChmLFwicG9pbnRlclwiKS5vbihcImNsaWNrXCIsZnVuY3Rpb24oKXt0Ll9kcmFnZ2luZz0hMTt2YXIgaT17aW5kZXg6cixhbm5vdGF0aW9uOmUuX2lucHV0LGZ1bGxBbm5vdGF0aW9uOmUsZXZlbnQ6bi5ldmVudH07YSYmKGkuc3VicGxvdElkPWEpLHQuZW1pdChcInBsb3RseV9jbGlja2Fubm90YXRpb25cIixpKX0pO2UuaG92ZXJ0ZXh0JiZJLm9uKFwibW91c2VvdmVyXCIsZnVuY3Rpb24oKXt2YXIgcj1lLmhvdmVybGFiZWwsbj1yLmZvbnQsaT10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGE9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt1LmxvbmVIb3Zlcih7eDA6aS5sZWZ0LWEubGVmdCx4MTppLnJpZ2h0LWEubGVmdCx5OihpLnRvcCtpLmJvdHRvbSkvMi1hLnRvcCx0ZXh0OmUuaG92ZXJ0ZXh0LGNvbG9yOnIuYmdjb2xvcixib3JkZXJDb2xvcjpyLmJvcmRlcmNvbG9yLGZvbnRGYW1pbHk6bi5mYW1pbHksZm9udFNpemU6bi5zaXplLGZvbnRDb2xvcjpuLmNvbG9yfSx7Y29udGFpbmVyOnguX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOnguX3BhcGVyLm5vZGUoKSxnZDp0fSl9KS5vbihcIm1vdXNlb3V0XCIsZnVuY3Rpb24oKXt1LmxvbmVVbmhvdmVyKHguX2hvdmVybGF5ZXIubm9kZSgpKX0pO3ZhciBEPWUuYm9yZGVyd2lkdGgsUD1lLmJvcmRlcnBhZCxSPUQrUCxGPUkuYXBwZW5kKFwicmVjdFwiKS5hdHRyKFwiY2xhc3NcIixcImJnXCIpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsRCtcInB4XCIpLmNhbGwobC5zdHJva2UsZS5ib3JkZXJjb2xvcikuY2FsbChsLmZpbGwsZS5iZ2NvbG9yKSxCPWUud2lkdGh8fGUuaGVpZ2h0LE49eC5fdG9wY2xpcHMuc2VsZWN0QWxsKFwiI1wiK00pLmRhdGEoQj9bMF06W10pO04uZW50ZXIoKS5hcHBlbmQoXCJjbGlwUGF0aFwiKS5jbGFzc2VkKFwiYW5uY2xpcFwiLCEwKS5hdHRyKFwiaWRcIixNKS5hcHBlbmQoXCJyZWN0XCIpLE4uZXhpdCgpLnJlbW92ZSgpO3ZhciBqPWUuZm9udCxWPXgubWV0YT9vLnRlbXBsYXRlU3RyaW5nKGUudGV4dCx7bWV0YTp4Lm1ldGF9KTplLnRleHQsVT1JLmFwcGVuZChcInRleHRcIikuY2xhc3NlZChcImFubm90YXRpb24tdGV4dFwiLCEwKS50ZXh0KFYpO18uYW5ub3RhdGlvblRleHQ/VS5jYWxsKGgubWFrZUVkaXRhYmxlLHtkZWxlZ2F0ZTpJLGdkOnR9KS5jYWxsKHEpLm9uKFwiZWRpdFwiLGZ1bmN0aW9uKHIpe2UudGV4dD1yLHRoaXMuY2FsbChxKSxBKFwidGV4dFwiLHIpLHMmJnMuYXV0b3JhbmdlJiZrKHMuX25hbWUrXCIuYXV0b3JhbmdlXCIsITApLHYmJnYuYXV0b3JhbmdlJiZrKHYuX25hbWUrXCIuYXV0b3JhbmdlXCIsITApLGkuY2FsbChcIl9ndWlSZWxheW91dFwiLHQsVCgpKX0pOlUuY2FsbChxKX1lbHNlIG4uc2VsZWN0QWxsKFwiI1wiK00pLnJlbW92ZSgpO2Z1bmN0aW9uIHEocil7cmV0dXJuIHIuY2FsbChjLmZvbnQsaikuYXR0cih7XCJ0ZXh0LWFuY2hvclwiOntsZWZ0Olwic3RhcnRcIixyaWdodDpcImVuZFwifVtlLmFsaWduXXx8XCJtaWRkbGVcIn0pLGguY29udmVydFRvVHNwYW5zKHIsdCxIKSxyfWZ1bmN0aW9uIEgoKXt2YXIgcj1VLnNlbGVjdEFsbChcImFcIik7MT09PXIuc2l6ZSgpJiZyLnRleHQoKT09PVUudGV4dCgpJiZJLmluc2VydChcImFcIixcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKHtcInhsaW5rOnhsaW5rOmhyZWZcIjpyLmF0dHIoXCJ4bGluazpocmVmXCIpLFwieGxpbms6eGxpbms6c2hvd1wiOnIuYXR0cihcInhsaW5rOnNob3dcIil9KS5zdHlsZSh7Y3Vyc29yOlwicG9pbnRlclwifSkubm9kZSgpLmFwcGVuZENoaWxkKEYubm9kZSgpKTt2YXIgbj1JLnNlbGVjdChcIi5hbm5vdGF0aW9uLXRleHQtbWF0aC1ncm91cFwiKSx1PSFuLmVtcHR5KCksZD1jLmJCb3goKHU/bjpVKS5ub2RlKCkpLG09ZC53aWR0aCx5PWQuaGVpZ2h0LHc9ZS53aWR0aHx8bSxPPWUuaGVpZ2h0fHx5LFA9TWF0aC5yb3VuZCh3KzIqUiksaj1NYXRoLnJvdW5kKE8rMipSKTtmdW5jdGlvbiBWKHQsZSl7cmV0dXJuXCJhdXRvXCI9PT1lJiYoZT10PDEvMz9cImxlZnRcIjp0PjIvMz9cInJpZ2h0XCI6XCJjZW50ZXJcIikse2NlbnRlcjowLG1pZGRsZTowLGxlZnQ6LjUsYm90dG9tOi0uNSxyaWdodDotLjUsdG9wOi41fVtlXX1mb3IodmFyIHE9ITEsSD1bXCJ4XCIsXCJ5XCJdLEc9MDtHPEgubGVuZ3RoO0crKyl7dmFyIFksVyxYLFosJCxKPUhbR10sSz1lW0orXCJyZWZcIl18fEosUT1lW1wiYVwiK0orXCJyZWZcIl0sdHQ9e3g6cyx5OnZ9W0pdLGV0PShFKyhcInhcIj09PUo/MDotOTApKSpNYXRoLlBJLzE4MCxydD1QKk1hdGguY29zKGV0KSxudD1qKk1hdGguc2luKGV0KSxpdD1NYXRoLmFicyhydCkrTWF0aC5hYnMobnQpLGF0PWVbSitcImFuY2hvclwiXSxvdD1lW0orXCJzaGlmdFwiXSooXCJ4XCI9PT1KPzE6LTEpLHN0PVNbSl07aWYodHQpe3ZhciBsdD10dC5yMmZyYWN0aW9uKGVbSl0pOyhsdDwwfHxsdD4xKSYmKFE9PT1LPygobHQ9dHQucjJmcmFjdGlvbihlW1wiYVwiK0pdKSk8MHx8bHQ+MSkmJihxPSEwKTpxPSEwKSxZPXR0Ll9vZmZzZXQrdHQucjJwKGVbSl0pLFo9LjV9ZWxzZVwieFwiPT09Sj8oWD1lW0pdLFk9Yi5sK2IudypYKTooWD0xLWVbSl0sWT1iLnQrYi5oKlgpLFo9ZS5zaG93YXJyb3c/LjU6WDtpZihlLnNob3dhcnJvdyl7c3QuaGVhZD1ZO3ZhciBjdD1lW1wiYVwiK0pdOyQ9cnQqViguNSxlLnhhbmNob3IpLW50KlYoLjUsZS55YW5jaG9yKSxRPT09Sz8oc3QudGFpbD10dC5fb2Zmc2V0K3R0LnIycChjdCksVz0kKTooc3QudGFpbD1ZK2N0LFc9JCtjdCksc3QudGV4dD1zdC50YWlsKyQ7dmFyIHV0PXhbXCJ4XCI9PT1KP1wid2lkdGhcIjpcImhlaWdodFwiXTtpZihcInBhcGVyXCI9PT1LJiYoc3QuaGVhZD1vLmNvbnN0cmFpbihzdC5oZWFkLDEsdXQtMSkpLFwicGl4ZWxcIj09PVEpe3ZhciBodD0tTWF0aC5tYXgoc3QudGFpbC0zLHN0LnRleHQpLGZ0PU1hdGgubWluKHN0LnRhaWwrMyxzdC50ZXh0KS11dDtodD4wPyhzdC50YWlsKz1odCxzdC50ZXh0Kz1odCk6ZnQ+MCYmKHN0LnRhaWwtPWZ0LHN0LnRleHQtPWZ0KX1zdC50YWlsKz1vdCxzdC5oZWFkKz1vdH1lbHNlIFc9JD1pdCpWKFosYXQpLHN0LnRleHQ9WSskO3N0LnRleHQrPW90LCQrPW90LFcrPW90LGVbXCJfXCIrSitcInBhZHBsdXNcIl09aXQvMitXLGVbXCJfXCIrSitcInBhZG1pbnVzXCJdPWl0LzItVyxlW1wiX1wiK0orXCJzaXplXCJdPWl0LGVbXCJfXCIrSitcInNoaWZ0XCJdPSR9aWYodC5fZHJhZ2dpbmd8fCFxKXt2YXIgcHQ9MCxkdD0wO2lmKFwibGVmdFwiIT09ZS5hbGlnbiYmKHB0PSh3LW0pKihcImNlbnRlclwiPT09ZS5hbGlnbj8uNToxKSksXCJ0b3BcIiE9PWUudmFsaWduJiYoZHQ9KE8teSkqKFwibWlkZGxlXCI9PT1lLnZhbGlnbj8uNToxKSksdSluLnNlbGVjdChcInN2Z1wiKS5hdHRyKHt4OlIrcHQtMSx5OlIrZHR9KS5jYWxsKGMuc2V0Q2xpcFVybCxCP006bnVsbCx0KTtlbHNle3ZhciBndD1SK2R0LWQudG9wLHZ0PVIrcHQtZC5sZWZ0O1UuY2FsbChoLnBvc2l0aW9uVGV4dCx2dCxndCkuY2FsbChjLnNldENsaXBVcmwsQj9NOm51bGwsdCl9Ti5zZWxlY3QoXCJyZWN0XCIpLmNhbGwoYy5zZXRSZWN0LFIsUix3LE8pLEYuY2FsbChjLnNldFJlY3QsRC8yLEQvMixQLUQsai1EKSxJLmNhbGwoYy5zZXRUcmFuc2xhdGUsTWF0aC5yb3VuZChTLngudGV4dC1QLzIpLE1hdGgucm91bmQoUy55LnRleHQtai8yKSksTC5hdHRyKHt0cmFuc2Zvcm06XCJyb3RhdGUoXCIrRStcIixcIitTLngudGV4dCtcIixcIitTLnkudGV4dCtcIilcIn0pO3ZhciBtdCx5dD1mdW5jdGlvbihyLG4pe0Muc2VsZWN0QWxsKFwiLmFubm90YXRpb24tYXJyb3ctZ1wiKS5yZW1vdmUoKTt2YXIgdT1TLnguaGVhZCxoPVMueS5oZWFkLGY9Uy54LnRhaWwrcixkPVMueS50YWlsK24sbT1TLngudGV4dCtyLHk9Uy55LnRleHQrbix4PW8ucm90YXRpb25YWU1hdHJpeChFLG0seSksdz1vLmFwcGx5MkRUcmFuc2Zvcm0oeCksTT1vLmFwcGx5MkRUcmFuc2Zvcm0yKHgpLHo9K0YuYXR0cihcIndpZHRoXCIpLE89K0YuYXR0cihcImhlaWdodFwiKSxEPW0tLjUqeixQPUQreixSPXktLjUqTyxCPVIrTyxOPVtbRCxSLEQsQl0sW0QsQixQLEJdLFtQLEIsUCxSXSxbUCxSLEQsUl1dLm1hcChNKTtpZighTi5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdF4hIW8uc2VnbWVudHNJbnRlcnNlY3QodSxoLHUrMWU2LGgrMWU2LGVbMF0sZVsxXSxlWzJdLGVbM10pfSwhMSkpe04uZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1vLnNlZ21lbnRzSW50ZXJzZWN0KGYsZCx1LGgsdFswXSx0WzFdLHRbMl0sdFszXSk7ZSYmKGY9ZS54LGQ9ZS55KX0pO3ZhciBqPWUuYXJyb3d3aWR0aCxWPWUuYXJyb3djb2xvcixVPWUuYXJyb3dzaWRlLHE9Qy5hcHBlbmQoXCJnXCIpLnN0eWxlKHtvcGFjaXR5Omwub3BhY2l0eShWKX0pLmNsYXNzZWQoXCJhbm5vdGF0aW9uLWFycm93LWdcIiwhMCksSD1xLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIixcIk1cIitmK1wiLFwiK2QrXCJMXCIrdStcIixcIitoKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLGorXCJweFwiKS5jYWxsKGwuc3Ryb2tlLGwucmdiKFYpKTtpZihnKEgsVSxlKSxfLmFubm90YXRpb25Qb3NpdGlvbiYmSC5ub2RlKCkucGFyZW50Tm9kZSYmIWEpe3ZhciBHPXUsWT1oO2lmKGUuc3RhbmRvZmYpe3ZhciBXPU1hdGguc3FydChNYXRoLnBvdyh1LWYsMikrTWF0aC5wb3coaC1kLDIpKTtHKz1lLnN0YW5kb2ZmKihmLXUpL1csWSs9ZS5zdGFuZG9mZiooZC1oKS9XfXZhciBYLFosJD1xLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChcImFubm90YXRpb24tYXJyb3dcIiwhMCkuY2xhc3NlZChcImFubmRyYWdcIiwhMCkuY2xhc3NlZChcImN1cnNvci1tb3ZlXCIsITApLmF0dHIoe2Q6XCJNMywzSC0zVi0zSDNaTTAsMExcIisoZi1HKStcIixcIisoZC1ZKSx0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoXCIrRytcIixcIitZK1wiKVwifSkuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixqKzYrXCJweFwiKS5jYWxsKGwuc3Ryb2tlLFwicmdiYSgwLDAsMCwwKVwiKS5jYWxsKGwuZmlsbCxcInJnYmEoMCwwLDAsMClcIik7cC5pbml0KHtlbGVtZW50OiQubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKCl7dmFyIHQ9Yy5nZXRUcmFuc2xhdGUoSSk7WD10LngsWj10LnkscyYmcy5hdXRvcmFuZ2UmJmsocy5fbmFtZStcIi5hdXRvcmFuZ2VcIiwhMCksdiYmdi5hdXRvcmFuZ2UmJmsodi5fbmFtZStcIi5hdXRvcmFuZ2VcIiwhMCl9LG1vdmVGbjpmdW5jdGlvbih0LHIpe3ZhciBuPXcoWCxaKSxpPW5bMF0rdCxhPW5bMV0rcjtJLmNhbGwoYy5zZXRUcmFuc2xhdGUsaSxhKSxBKFwieFwiLHM/cy5wMnIocy5yMnAoZS54KSt0KTplLngrdC9iLncpLEEoXCJ5XCIsdj92LnAycih2LnIycChlLnkpK3IpOmUueS1yL2IuaCksZS5heHJlZj09PWUueHJlZiYmQShcImF4XCIscy5wMnIocy5yMnAoZS5heCkrdCkpLGUuYXlyZWY9PT1lLnlyZWYmJkEoXCJheVwiLHYucDJyKHYucjJwKGUuYXkpK3IpKSxxLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIit0K1wiLFwiK3IrXCIpXCIpLEwuYXR0cih7dHJhbnNmb3JtOlwicm90YXRlKFwiK0UrXCIsXCIraStcIixcIithK1wiKVwifSl9LGRvbmVGbjpmdW5jdGlvbigpe2kuY2FsbChcIl9ndWlSZWxheW91dFwiLHQsVCgpKTt2YXIgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmpzLW5vdGVzLWJveC1wYW5lbFwiKTtlJiZlLnJlZHJhdyhlLnNlbGVjdGVkT2JqKX19KX19fTtpZihlLnNob3dhcnJvdyYmeXQoMCwwKSx6KXAuaW5pdCh7ZWxlbWVudDpJLm5vZGUoKSxnZDp0LHByZXBGbjpmdW5jdGlvbigpe210PUwuYXR0cihcInRyYW5zZm9ybVwiKX0sbW92ZUZuOmZ1bmN0aW9uKHQscil7dmFyIG49XCJwb2ludGVyXCI7aWYoZS5zaG93YXJyb3cpZS5heHJlZj09PWUueHJlZj9BKFwiYXhcIixzLnAycihzLnIycChlLmF4KSt0KSk6QShcImF4XCIsZS5heCt0KSxlLmF5cmVmPT09ZS55cmVmP0EoXCJheVwiLHYucDJyKHYucjJwKGUuYXkpK3IpKTpBKFwiYXlcIixlLmF5K3IpLHl0KHQscik7ZWxzZXtpZihhKXJldHVybjt2YXIgaSxvO2lmKHMpaT1zLnAycihzLnIycChlLngpK3QpO2Vsc2V7dmFyIGw9ZS5feHNpemUvYi53LGM9ZS54KyhlLl94c2hpZnQtZS54c2hpZnQpL2Iudy1sLzI7aT1wLmFsaWduKGMrdC9iLncsbCwwLDEsZS54YW5jaG9yKX1pZih2KW89di5wMnIodi5yMnAoZS55KStyKTtlbHNle3ZhciB1PWUuX3lzaXplL2IuaCxoPWUueS0oZS5feXNoaWZ0K2UueXNoaWZ0KS9iLmgtdS8yO289cC5hbGlnbihoLXIvYi5oLHUsMCwxLGUueWFuY2hvcil9QShcInhcIixpKSxBKFwieVwiLG8pLHMmJnZ8fChuPXAuZ2V0Q3Vyc29yKHM/LjU6aSx2Py41Om8sZS54YW5jaG9yLGUueWFuY2hvcikpfUwuYXR0cih7dHJhbnNmb3JtOlwidHJhbnNsYXRlKFwiK3QrXCIsXCIrcitcIilcIittdH0pLGYoSSxuKX0sZG9uZUZuOmZ1bmN0aW9uKCl7ZihJKSxpLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix0LFQoKSk7dmFyIGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5qcy1ub3Rlcy1ib3gtcGFuZWxcIik7ZSYmZS5yZWRyYXcoZS5zZWxlY3RlZE9iail9fSl9ZWxzZSBJLnJlbW92ZSgpfX1lLmV4cG9ydHM9e2RyYXc6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtlLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKFwiLmFubm90YXRpb25cIikucmVtb3ZlKCk7Zm9yKHZhciByPTA7cjxlLmFubm90YXRpb25zLmxlbmd0aDtyKyspZS5hbm5vdGF0aW9uc1tyXS52aXNpYmxlJiZ2KHQscik7cmV0dXJuIGEucHJldmlvdXNQcm9taXNlcyh0KX0sZHJhd09uZTp2LGRyYXdSYXc6bX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9zZXRjdXJzb3JcIjo3MjEsXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIjo3MjUsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi8uLi9wbG90cy9wbG90c1wiOjgxMCxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vY29sb3JcIjo1NzgsXCIuLi9kcmFnZWxlbWVudFwiOjU5NixcIi4uL2RyYXdpbmdcIjo1OTksXCIuLi9meFwiOjYxNyxcIi4vZHJhd19hcnJvd19oZWFkXCI6NTY4LGQzOjE1NX1dLDU2ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi9jb2xvclwiKSxhPXQoXCIuL2Fycm93X3BhdGhzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG8scyxsLGMsdT10Lm5vZGUoKSxoPWFbci5hcnJvd2hlYWR8fDBdLGY9YVtyLnN0YXJ0YXJyb3doZWFkfHwwXSxwPShyLmFycm93d2lkdGh8fDEpKihyLmFycm93c2l6ZXx8MSksZD0oci5hcnJvd3dpZHRofHwxKSooci5zdGFydGFycm93c2l6ZXx8MSksZz1lLmluZGV4T2YoXCJzdGFydFwiKT49MCx2PWUuaW5kZXhPZihcImVuZFwiKT49MCxtPWguYmFja29mZipwK3Iuc3RhbmRvZmYseT1mLmJhY2tvZmYqZCtyLnN0YXJ0c3RhbmRvZmY7aWYoXCJsaW5lXCI9PT11Lm5vZGVOYW1lKXtvPXt4Oit0LmF0dHIoXCJ4MVwiKSx5Oit0LmF0dHIoXCJ5MVwiKX0scz17eDordC5hdHRyKFwieDJcIikseTordC5hdHRyKFwieTJcIil9O3ZhciB4PW8ueC1zLngsYj1vLnktcy55O2lmKGM9KGw9TWF0aC5hdGFuMihiLHgpKStNYXRoLlBJLG0mJnkmJm0reT5NYXRoLnNxcnQoeCp4K2IqYikpcmV0dXJuIHZvaWQgeigpO2lmKG0pe2lmKG0qbT54KngrYipiKXJldHVybiB2b2lkIHooKTt2YXIgXz1tKk1hdGguY29zKGwpLHc9bSpNYXRoLnNpbihsKTtzLngrPV8scy55Kz13LHQuYXR0cih7eDI6cy54LHkyOnMueX0pfWlmKHkpe2lmKHkqeT54KngrYipiKXJldHVybiB2b2lkIHooKTt2YXIgaz15Kk1hdGguY29zKGwpLEE9eSpNYXRoLnNpbihsKTtvLngtPWssby55LT1BLHQuYXR0cih7eDE6by54LHkxOm8ueX0pfX1lbHNlIGlmKFwicGF0aFwiPT09dS5ub2RlTmFtZSl7dmFyIFQ9dS5nZXRUb3RhbExlbmd0aCgpLE09XCJcIjtpZihUPG0reSlyZXR1cm4gdm9pZCB6KCk7dmFyIFM9dS5nZXRQb2ludEF0TGVuZ3RoKDApLEU9dS5nZXRQb2ludEF0TGVuZ3RoKC4xKTtsPU1hdGguYXRhbjIoUy55LUUueSxTLngtRS54KSxvPXUuZ2V0UG9pbnRBdExlbmd0aChNYXRoLm1pbih5LFQpKSxNPVwiMHB4LFwiK3krXCJweCxcIjt2YXIgQz11LmdldFBvaW50QXRMZW5ndGgoVCksTD11LmdldFBvaW50QXRMZW5ndGgoVC0uMSk7Yz1NYXRoLmF0YW4yKEMueS1MLnksQy54LUwueCkscz11LmdldFBvaW50QXRMZW5ndGgoTWF0aC5tYXgoMCxULW0pKSxNKz1ULShNP3krbTptKStcInB4LFwiK1QrXCJweFwiLHQuc3R5bGUoXCJzdHJva2UtZGFzaGFycmF5XCIsTSl9ZnVuY3Rpb24geigpe3Quc3R5bGUoXCJzdHJva2UtZGFzaGFycmF5XCIsXCIwcHgsMTAwcHhcIil9ZnVuY3Rpb24gTyhlLGEsbyxzKXtlLnBhdGgmJihlLm5vUm90YXRlJiYobz0wKSxuLnNlbGVjdCh1LnBhcmVudE5vZGUpLmFwcGVuZChcInBhdGhcIikuYXR0cih7Y2xhc3M6dC5hdHRyKFwiY2xhc3NcIiksZDplLnBhdGgsdHJhbnNmb3JtOlwidHJhbnNsYXRlKFwiK2EueCtcIixcIithLnkrXCIpXCIrKG8/XCJyb3RhdGUoXCIrMTgwKm8vTWF0aC5QSStcIilcIjpcIlwiKStcInNjYWxlKFwiK3MrXCIpXCJ9KS5zdHlsZSh7ZmlsbDppLnJnYihyLmFycm93Y29sb3IpLFwic3Ryb2tlLXdpZHRoXCI6MH0pKX1nJiZPKGYsbyxsLGQpLHYmJk8oaCxzLGMscCl9fSx7XCIuLi9jb2xvclwiOjU3OCxcIi4vYXJyb3dfcGF0aHNcIjo1NjAsZDM6MTU1fV0sNTY5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vZHJhd1wiKSxpPXQoXCIuL2NsaWNrXCIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZTpcImNvbXBvbmVudFwiLG5hbWU6XCJhbm5vdGF0aW9uc1wiLGxheW91dEF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxpbmNsdWRlQmFzZVBsb3Q6dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHNcIikoXCJhbm5vdGF0aW9uc1wiKSxjYWxjQXV0b3JhbmdlOnQoXCIuL2NhbGNfYXV0b3JhbmdlXCIpLGRyYXc6bi5kcmF3LGRyYXdPbmU6bi5kcmF3T25lLGRyYXdSYXc6bi5kcmF3UmF3LGhhc0NsaWNrVG9TaG93OmkuaGFzQ2xpY2tUb1Nob3csb25DbGljazppLm9uQ2xpY2ssY29udmVydENvb3Jkczp0KFwiLi9jb252ZXJ0X2Nvb3Jkc1wiKX19LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHNcIjo3NTksXCIuL2F0dHJpYnV0ZXNcIjo1NjEsXCIuL2NhbGNfYXV0b3JhbmdlXCI6NTYyLFwiLi9jbGlja1wiOjU2MyxcIi4vY29udmVydF9jb29yZHNcIjo1NjUsXCIuL2RlZmF1bHRzXCI6NTY2LFwiLi9kcmF3XCI6NTY3fV0sNTcwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbCxhPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLnRlbXBsYXRlZEFycmF5O2UuZXhwb3J0cz1pKGEoXCJhbm5vdGF0aW9uXCIse3Zpc2libGU6bi52aXNpYmxlLHg6e3ZhbFR5cGU6XCJhbnlcIn0seTp7dmFsVHlwZTpcImFueVwifSx6Ont2YWxUeXBlOlwiYW55XCJ9LGF4Ont2YWxUeXBlOlwibnVtYmVyXCJ9LGF5Ont2YWxUeXBlOlwibnVtYmVyXCJ9LHhhbmNob3I6bi54YW5jaG9yLHhzaGlmdDpuLnhzaGlmdCx5YW5jaG9yOm4ueWFuY2hvcix5c2hpZnQ6bi55c2hpZnQsdGV4dDpuLnRleHQsdGV4dGFuZ2xlOm4udGV4dGFuZ2xlLGZvbnQ6bi5mb250LHdpZHRoOm4ud2lkdGgsaGVpZ2h0Om4uaGVpZ2h0LG9wYWNpdHk6bi5vcGFjaXR5LGFsaWduOm4uYWxpZ24sdmFsaWduOm4udmFsaWduLGJnY29sb3I6bi5iZ2NvbG9yLGJvcmRlcmNvbG9yOm4uYm9yZGVyY29sb3IsYm9yZGVycGFkOm4uYm9yZGVycGFkLGJvcmRlcndpZHRoOm4uYm9yZGVyd2lkdGgsc2hvd2Fycm93Om4uc2hvd2Fycm93LGFycm93Y29sb3I6bi5hcnJvd2NvbG9yLGFycm93aGVhZDpuLmFycm93aGVhZCxzdGFydGFycm93aGVhZDpuLnN0YXJ0YXJyb3doZWFkLGFycm93c2lkZTpuLmFycm93c2lkZSxhcnJvd3NpemU6bi5hcnJvd3NpemUsc3RhcnRhcnJvd3NpemU6bi5zdGFydGFycm93c2l6ZSxhcnJvd3dpZHRoOm4uYXJyb3d3aWR0aCxzdGFuZG9mZjpuLnN0YW5kb2ZmLHN0YXJ0c3RhbmRvZmY6bi5zdGFydHN0YW5kb2ZmLGhvdmVydGV4dDpuLmhvdmVydGV4dCxob3ZlcmxhYmVsOm4uaG92ZXJsYWJlbCxjYXB0dXJlZXZlbnRzOm4uY2FwdHVyZWV2ZW50c30pLFwiY2FsY1wiLFwiZnJvbS1yb290XCIpfSx7XCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXNcIjo1NjF9XSw1NzE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpO2Z1bmN0aW9uIGEodCxlKXt2YXIgcj1lLmZ1bGxTY2VuZUxheW91dC5kb21haW4sYT1lLmZ1bGxMYXlvdXQuX3NpemUsbz17cGRhdGE6bnVsbCx0eXBlOlwibGluZWFyXCIsYXV0b3JhbmdlOiExLHJhbmdlOlstMS8wLDEvMF19O3QuX3hhPXt9LG4uZXh0ZW5kRmxhdCh0Ll94YSxvKSxpLnNldENvbnZlcnQodC5feGEpLHQuX3hhLl9vZmZzZXQ9YS5sK3IueFswXSphLncsdC5feGEubDJwPWZ1bmN0aW9uKCl7cmV0dXJuLjUqKDErdC5fcGRhdGFbMF0vdC5fcGRhdGFbM10pKmEudyooci54WzFdLXIueFswXSl9LHQuX3lhPXt9LG4uZXh0ZW5kRmxhdCh0Ll95YSxvKSxpLnNldENvbnZlcnQodC5feWEpLHQuX3lhLl9vZmZzZXQ9YS50KygxLXIueVsxXSkqYS5oLHQuX3lhLmwycD1mdW5jdGlvbigpe3JldHVybi41KigxLXQuX3BkYXRhWzFdL3QuX3BkYXRhWzNdKSphLmgqKHIueVsxXS1yLnlbMF0pfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuZnVsbFNjZW5lTGF5b3V0LmFubm90YXRpb25zLHI9MDtyPGUubGVuZ3RoO3IrKylhKGVbcl0sdCk7dC5mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKFwiLmFubm90YXRpb24tXCIrdC5pZCkucmVtb3ZlKCl9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OX1dLDU3MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksYT10KFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCIpLG89dChcIi4uL2Fubm90YXRpb25zL2NvbW1vbl9kZWZhdWx0c1wiKSxzPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZnVuY3Rpb24gbCh0LGUscixhKXtmdW5jdGlvbiBsKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9ZnVuY3Rpb24gYyh0KXt2YXIgbj10K1wiYXhpc1wiLGE9e19mdWxsTGF5b3V0Ont9fTtyZXR1cm4gYS5fZnVsbExheW91dFtuXT1yW25dLGkuY29lcmNlUG9zaXRpb24oZSxhLGwsdCx0LC41KX1sKFwidmlzaWJsZVwiKSYmKG8odCxlLGEuZnVsbExheW91dCxsKSxjKFwieFwiKSxjKFwieVwiKSxjKFwielwiKSxuLm5vbmVPckFsbCh0LGUsW1wieFwiLFwieVwiLFwielwiXSksZS54cmVmPVwieFwiLGUueXJlZj1cInlcIixlLnpyZWY9XCJ6XCIsbChcInhhbmNob3JcIiksbChcInlhbmNob3JcIiksbChcInhzaGlmdFwiKSxsKFwieXNoaWZ0XCIpLGUuc2hvd2Fycm93JiYoZS5heHJlZj1cInBpeGVsXCIsZS5heXJlZj1cInBpeGVsXCIsbChcImF4XCIsLTEwKSxsKFwiYXlcIiwtMzApLG4ubm9uZU9yQWxsKHQsZSxbXCJheFwiLFwiYXlcIl0pKSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXthKHQsZSx7bmFtZTpcImFubm90YXRpb25zXCIsaGFuZGxlSXRlbURlZmF1bHRzOmwsZnVsbExheW91dDpyLmZ1bGxMYXlvdXR9KX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0c1wiOjc0NSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vYW5ub3RhdGlvbnMvY29tbW9uX2RlZmF1bHRzXCI6NTY0LFwiLi9hdHRyaWJ1dGVzXCI6NTcwfV0sNTczOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2Fubm90YXRpb25zL2RyYXdcIikuZHJhd1JhdyxpPXQoXCIuLi8uLi9wbG90cy9nbDNkL3Byb2plY3RcIiksYT1bXCJ4XCIsXCJ5XCIsXCJ6XCJdO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5mdWxsU2NlbmVMYXlvdXQscj10LmRhdGFTY2FsZSxvPWUuYW5ub3RhdGlvbnMscz0wO3M8by5sZW5ndGg7cysrKXtmb3IodmFyIGw9b1tzXSxjPSExLHU9MDt1PDM7dSsrKXt2YXIgaD1hW3VdLGY9bFtoXSxwPWVbaCtcImF4aXNcIl0ucjJmcmFjdGlvbihmKTtpZihwPDB8fHA+MSl7Yz0hMDticmVha319Yz90LmZ1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3QoXCIuYW5ub3RhdGlvbi1cIit0LmlkKydbZGF0YS1pbmRleD1cIicrcysnXCJdJykucmVtb3ZlKCk6KGwuX3BkYXRhPWkodC5nbHBsb3QuY2FtZXJhUGFyYW1zLFtlLnhheGlzLnIybChsLngpKnJbMF0sZS55YXhpcy5yMmwobC55KSpyWzFdLGUuemF4aXMucjJsKGwueikqclsyXV0pLG4odC5ncmFwaERpdixsLHMsdC5pZCxsLl94YSxsLl95YSkpfX19LHtcIi4uLy4uL3Bsb3RzL2dsM2QvcHJvamVjdFwiOjc5OCxcIi4uL2Fubm90YXRpb25zL2RyYXdcIjo1Njd9XSw1NzQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIiksaT10KFwiLi4vLi4vbGliXCIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZTpcImNvbXBvbmVudFwiLG5hbWU6XCJhbm5vdGF0aW9uczNkXCIsc2NoZW1hOntzdWJwbG90czp7c2NlbmU6e2Fubm90YXRpb25zOnQoXCIuL2F0dHJpYnV0ZXNcIil9fX0sbGF5b3V0QXR0cmlidXRlczp0KFwiLi9hdHRyaWJ1dGVzXCIpLGhhbmRsZURlZmF1bHRzOnQoXCIuL2RlZmF1bHRzXCIpLGluY2x1ZGVCYXNlUGxvdDpmdW5jdGlvbih0LGUpe3ZhciByPW4uc3VicGxvdHNSZWdpc3RyeS5nbDNkO2lmKCFyKXJldHVybjtmb3IodmFyIGE9ci5hdHRyUmVnZXgsbz1PYmplY3Qua2V5cyh0KSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107YS50ZXN0KGwpJiYodFtsXS5hbm5vdGF0aW9uc3x8W10pLmxlbmd0aCYmKGkucHVzaFVuaXF1ZShlLl9iYXNlUGxvdE1vZHVsZXMsciksaS5wdXNoVW5pcXVlKGUuX3N1YnBsb3RzLmdsM2QsbCkpfX0sY29udmVydDp0KFwiLi9jb252ZXJ0XCIpLGRyYXc6dChcIi4vZHJhd1wiKX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9hdHRyaWJ1dGVzXCI6NTcwLFwiLi9jb252ZXJ0XCI6NTcxLFwiLi9kZWZhdWx0c1wiOjU3MixcIi4vZHJhd1wiOjU3M31dLDU3NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvbWFpblwiKSx0KFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvcGx1c1wiKSx0KFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2NoaW5lc2VcIiksdChcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9jb3B0aWNcIiksdChcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9kaXNjd29ybGRcIiksdChcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9ldGhpb3BpYW5cIiksdChcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9oZWJyZXdcIiksdChcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9pc2xhbWljXCIpLHQoXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvanVsaWFuXCIpLHQoXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbWF5YW5cIiksdChcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9uYW5ha3NoYWhpXCIpLHQoXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmVwYWxpXCIpLHQoXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvcGVyc2lhblwiKSx0KFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3RhaXdhblwiKSx0KFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3RoYWlcIiksdChcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy91bW1hbHF1cmFcIil9LHtcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9jaGluZXNlXCI6NTQyLFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2NvcHRpY1wiOjU0MyxcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9kaXNjd29ybGRcIjo1NDQsXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvZXRoaW9waWFuXCI6NTQ1LFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2hlYnJld1wiOjU0NixcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9pc2xhbWljXCI6NTQ3LFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2p1bGlhblwiOjU0OCxcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9tYXlhblwiOjU0OSxcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9uYW5ha3NoYWhpXCI6NTUwLFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL25lcGFsaVwiOjU1MSxcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9wZXJzaWFuXCI6NTUyLFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3RhaXdhblwiOjU1MyxcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy90aGFpXCI6NTU0LFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3VtbWFscXVyYVwiOjU1NSxcIndvcmxkLWNhbGVuZGFycy9kaXN0L21haW5cIjo1NTYsXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9wbHVzXCI6NTU3fV0sNTc2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vY2FsZW5kYXJzXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLG89YS5FUE9DSEpELHM9YS5PTkVEQVksbD17dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6T2JqZWN0LmtleXMobi5jYWxlbmRhcnMpLGVkaXRUeXBlOlwiY2FsY1wiLGRmbHQ6XCJncmVnb3JpYW5cIn0sYz1mdW5jdGlvbih0LGUscixuKXt2YXIgYT17fTtyZXR1cm4gYVtyXT1sLGkuY29lcmNlKHQsZSxhLHIsbil9LHU9XCIjI1wiLGg9e2Q6ezA6XCJkZFwiLFwiLVwiOlwiZFwifSxlOnswOlwiZFwiLFwiLVwiOlwiZFwifSxhOnswOlwiRFwiLFwiLVwiOlwiRFwifSxBOnswOlwiRERcIixcIi1cIjpcIkREXCJ9LGo6ezA6XCJvb1wiLFwiLVwiOlwib1wifSxXOnswOlwid3dcIixcIi1cIjpcIndcIn0sbTp7MDpcIm1tXCIsXCItXCI6XCJtXCJ9LGI6ezA6XCJNXCIsXCItXCI6XCJNXCJ9LEI6ezA6XCJNTVwiLFwiLVwiOlwiTU1cIn0seTp7MDpcInl5XCIsXCItXCI6XCJ5eVwifSxZOnswOlwieXl5eVwiLFwiLVwiOlwieXl5eVwifSxVOnUsdzp1LGM6ezA6XCJEIE0gZCAlWCB5eXl5XCIsXCItXCI6XCJEIE0gZCAlWCB5eXl5XCJ9LHg6ezA6XCJtbS9kZC95eXl5XCIsXCItXCI6XCJtbS9kZC95eXl5XCJ9fTt2YXIgZj17fTtmdW5jdGlvbiBwKHQpe3ZhciBlPWZbdF07cmV0dXJuIGV8fChlPWZbdF09bi5pbnN0YW5jZSh0KSl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gaS5leHRlbmRGbGF0KHt9LGwse2Rlc2NyaXB0aW9uOnR9KX1mdW5jdGlvbiBnKHQpe3JldHVyblwiU2V0cyB0aGUgY2FsZW5kYXIgc3lzdGVtIHRvIHVzZSB3aXRoIGBcIit0K1wiYCBkYXRlIGRhdGEuXCJ9dmFyIHY9e3hjYWxlbmRhcjpkKGcoXCJ4XCIpKX0sbT1pLmV4dGVuZEZsYXQoe30sdix7eWNhbGVuZGFyOmQoZyhcInlcIikpfSkseT1pLmV4dGVuZEZsYXQoe30sbSx7emNhbGVuZGFyOmQoZyhcInpcIikpfSkseD1kKFtcIlNldHMgdGhlIGNhbGVuZGFyIHN5c3RlbSB0byB1c2UgZm9yIGByYW5nZWAgYW5kIGB0aWNrMGBcIixcImlmIHRoaXMgaXMgYSBkYXRlIGF4aXMuIFRoaXMgZG9lcyBub3Qgc2V0IHRoZSBjYWxlbmRhciBmb3JcIixcImludGVycHJldGluZyBkYXRhIG9uIHRoaXMgYXhpcywgdGhhdCdzIHNwZWNpZmllZCBpbiB0aGUgdHJhY2VcIixcIm9yIHZpYSB0aGUgZ2xvYmFsIGBsYXlvdXQuY2FsZW5kYXJgXCJdLmpvaW4oXCIgXCIpKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6XCJjb21wb25lbnRcIixuYW1lOlwiY2FsZW5kYXJzXCIsc2NoZW1hOnt0cmFjZXM6e3NjYXR0ZXI6bSxiYXI6bSxib3g6bSxoZWF0bWFwOm0sY29udG91cjptLGhpc3RvZ3JhbTptLGhpc3RvZ3JhbTJkOm0saGlzdG9ncmFtMmRjb250b3VyOm0sc2NhdHRlcjNkOnksc3VyZmFjZTp5LG1lc2gzZDp5LHNjYXR0ZXJnbDptLG9obGM6dixjYW5kbGVzdGljazp2fSxsYXlvdXQ6e2NhbGVuZGFyOmQoW1wiU2V0cyB0aGUgZGVmYXVsdCBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIGZvciBpbnRlcnByZXRpbmcgYW5kXCIsXCJkaXNwbGF5aW5nIGRhdGVzIHRocm91Z2hvdXQgdGhlIHBsb3QuXCJdLmpvaW4oXCIgXCIpKX0sc3VicGxvdHM6e3hheGlzOntjYWxlbmRhcjp4fSx5YXhpczp7Y2FsZW5kYXI6eH0sc2NlbmU6e3hheGlzOntjYWxlbmRhcjp4fSx5YXhpczp7Y2FsZW5kYXI6eH0semF4aXM6e2NhbGVuZGFyOnh9fSxwb2xhcjp7cmFkaWFsYXhpczp7Y2FsZW5kYXI6eH19fSx0cmFuc2Zvcm1zOntmaWx0ZXI6e3ZhbHVlY2FsZW5kYXI6ZChbXCJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIGZvciBgdmFsdWVgLCBpZiBpdCBpcyBhIGRhdGUuXCJdLmpvaW4oXCIgXCIpKSx0YXJnZXRjYWxlbmRhcjpkKFtcIlNldHMgdGhlIGNhbGVuZGFyIHN5c3RlbSB0byB1c2UgZm9yIGB0YXJnZXRgLCBpZiBpdCBpcyBhblwiLFwiYXJyYXkgb2YgZGF0ZXMuIElmIGB0YXJnZXRgIGlzIGEgc3RyaW5nIChlZyAqeCopIHdlIHVzZSB0aGVcIixcImNvcnJlc3BvbmRpbmcgdHJhY2UgYXR0cmlidXRlIChlZyBgeGNhbGVuZGFyYCkgaWYgaXQgZXhpc3RzLFwiLFwiZXZlbiBpZiBgdGFyZ2V0Y2FsZW5kYXJgIGlzIHByb3ZpZGVkLlwiXS5qb2luKFwiIFwiKSl9fX0sbGF5b3V0QXR0cmlidXRlczpsLGhhbmRsZURlZmF1bHRzOmMsaGFuZGxlVHJhY2VEZWZhdWx0czpmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyljKHQsZSxyW2ldK1wiY2FsZW5kYXJcIixuLmNhbGVuZGFyKX0sQ0FOT05JQ0FMX1NVTkRBWTp7Y2hpbmVzZTpcIjIwMDAtMDEtMDJcIixjb3B0aWM6XCIyMDAwLTAxLTAzXCIsZGlzY3dvcmxkOlwiMjAwMC0wMS0wM1wiLGV0aGlvcGlhbjpcIjIwMDAtMDEtMDVcIixoZWJyZXc6XCI1MDAwLTAxLTAxXCIsaXNsYW1pYzpcIjEwMDAtMDEtMDJcIixqdWxpYW46XCIyMDAwLTAxLTAzXCIsbWF5YW46XCI1MDAwLTAxLTAxXCIsbmFuYWtzaGFoaTpcIjEwMDAtMDEtMDVcIixuZXBhbGk6XCIyMDAwLTAxLTA1XCIscGVyc2lhbjpcIjEwMDAtMDEtMDFcIixqYWxhbGk6XCIxMDAwLTAxLTAxXCIsdGFpd2FuOlwiMTAwMC0wMS0wNFwiLHRoYWk6XCIyMDAwLTAxLTA0XCIsdW1tYWxxdXJhOlwiMTQwMC0wMS0wNlwifSxDQU5PTklDQUxfVElDSzp7Y2hpbmVzZTpcIjIwMDAtMDEtMDFcIixjb3B0aWM6XCIyMDAwLTAxLTAxXCIsZGlzY3dvcmxkOlwiMjAwMC0wMS0wMVwiLGV0aGlvcGlhbjpcIjIwMDAtMDEtMDFcIixoZWJyZXc6XCI1MDAwLTAxLTAxXCIsaXNsYW1pYzpcIjEwMDAtMDEtMDFcIixqdWxpYW46XCIyMDAwLTAxLTAxXCIsbWF5YW46XCI1MDAwLTAxLTAxXCIsbmFuYWtzaGFoaTpcIjEwMDAtMDEtMDFcIixuZXBhbGk6XCIyMDAwLTAxLTAxXCIscGVyc2lhbjpcIjEwMDAtMDEtMDFcIixqYWxhbGk6XCIxMDAwLTAxLTAxXCIsdGFpd2FuOlwiMTAwMC0wMS0wMVwiLHRoYWk6XCIyMDAwLTAxLTAxXCIsdW1tYWxxdXJhOlwiMTQwMC0wMS0wMVwifSxERkxUUkFOR0U6e2NoaW5lc2U6W1wiMjAwMC0wMS0wMVwiLFwiMjAwMS0wMS0wMVwiXSxjb3B0aWM6W1wiMTcwMC0wMS0wMVwiLFwiMTcwMS0wMS0wMVwiXSxkaXNjd29ybGQ6W1wiMTgwMC0wMS0wMVwiLFwiMTgwMS0wMS0wMVwiXSxldGhpb3BpYW46W1wiMjAwMC0wMS0wMVwiLFwiMjAwMS0wMS0wMVwiXSxoZWJyZXc6W1wiNTcwMC0wMS0wMVwiLFwiNTcwMS0wMS0wMVwiXSxpc2xhbWljOltcIjE0MDAtMDEtMDFcIixcIjE0MDEtMDEtMDFcIl0sanVsaWFuOltcIjIwMDAtMDEtMDFcIixcIjIwMDEtMDEtMDFcIl0sbWF5YW46W1wiNTIwMC0wMS0wMVwiLFwiNTIwMS0wMS0wMVwiXSxuYW5ha3NoYWhpOltcIjA1MDAtMDEtMDFcIixcIjA1MDEtMDEtMDFcIl0sbmVwYWxpOltcIjIwMDAtMDEtMDFcIixcIjIwMDEtMDEtMDFcIl0scGVyc2lhbjpbXCIxNDAwLTAxLTAxXCIsXCIxNDAxLTAxLTAxXCJdLGphbGFsaTpbXCIxNDAwLTAxLTAxXCIsXCIxNDAxLTAxLTAxXCJdLHRhaXdhbjpbXCIwMTAwLTAxLTAxXCIsXCIwMTAxLTAxLTAxXCJdLHRoYWk6W1wiMjUwMC0wMS0wMVwiLFwiMjUwMS0wMS0wMVwiXSx1bW1hbHF1cmE6W1wiMTQwMC0wMS0wMVwiLFwiMTQwMS0wMS0wMVwiXX0sZ2V0Q2FsOnAsd29ybGRDYWxGbXQ6ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpLGEsbCxjLGY9TWF0aC5mbG9vcigoZSsuMDUpL3MpK28sZD1wKHIpLmZyb21KRChmKSxnPTA7LTEhPT0oZz10LmluZGV4T2YoXCIlXCIsZykpOylcIjBcIj09PShuPXQuY2hhckF0KGcrMSkpfHxcIi1cIj09PW58fFwiX1wiPT09bj8oYT0zLGk9dC5jaGFyQXQoZysyKSxcIl9cIj09PW4mJihuPVwiLVwiKSk6KGk9bixuPVwiMFwiLGE9MiksKGw9aFtpXSk/KGM9bD09PXU/dTpkLmZvcm1hdERhdGUobFtuXSksdD10LnN1YnN0cigwLGcpK2MrdC5zdWJzdHIoZythKSxnKz1jLmxlbmd0aCk6Zys9YTtyZXR1cm4gdH19fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi9jYWxlbmRhcnNcIjo1NzV9XSw1Nzc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLmRlZmF1bHRzPVtcIiMxZjc3YjRcIixcIiNmZjdmMGVcIixcIiMyY2EwMmNcIixcIiNkNjI3MjhcIixcIiM5NDY3YmRcIixcIiM4YzU2NGJcIixcIiNlMzc3YzJcIixcIiM3ZjdmN2ZcIixcIiNiY2JkMjJcIixcIiMxN2JlY2ZcIl0sci5kZWZhdWx0TGluZT1cIiM0NDRcIixyLmxpZ2h0TGluZT1cIiNlZWVcIixyLmJhY2tncm91bmQ9XCIjZmZmXCIsci5ib3JkZXJMaW5lPVwiI0JFQzhEOVwiLHIubGlnaHRGcmFjdGlvbj0xZTMvMTF9LHt9XSw1Nzg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwidGlueWNvbG9yMlwiKSxpPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxhPWUuZXhwb3J0cz17fSxvPXQoXCIuL2F0dHJpYnV0ZXNcIik7YS5kZWZhdWx0cz1vLmRlZmF1bHRzO3ZhciBzPWEuZGVmYXVsdExpbmU9by5kZWZhdWx0TGluZTthLmxpZ2h0TGluZT1vLmxpZ2h0TGluZTt2YXIgbD1hLmJhY2tncm91bmQ9by5iYWNrZ3JvdW5kO2Z1bmN0aW9uIGModCl7aWYoaSh0KXx8XCJzdHJpbmdcIiE9dHlwZW9mIHQpcmV0dXJuIHQ7dmFyIGU9dC50cmltKCk7aWYoXCJyZ2JcIiE9PWUuc3Vic3RyKDAsMykpcmV0dXJuIHQ7dmFyIHI9ZS5tYXRjaCgvXnJnYmE/XFxzKlxcKChbXigpXSopXFwpJC8pO2lmKCFyKXJldHVybiB0O3ZhciBuPXJbMV0udHJpbSgpLnNwbGl0KC9cXHMqW1xccyxdXFxzKi8pLGE9XCJhXCI9PT1lLmNoYXJBdCgzKSYmND09PW4ubGVuZ3RoO2lmKCFhJiYzIT09bi5sZW5ndGgpcmV0dXJuIHQ7Zm9yKHZhciBvPTA7bzxuLmxlbmd0aDtvKyspe2lmKCFuW29dLmxlbmd0aClyZXR1cm4gdDtpZihuW29dPU51bWJlcihuW29dKSwhKG5bb10+PTApKXJldHVybiB0O2lmKDM9PT1vKW5bb10+MSYmKG5bb109MSk7ZWxzZSBpZihuW29dPj0xKXJldHVybiB0fXZhciBzPU1hdGgucm91bmQoMjU1Km5bMF0pK1wiLCBcIitNYXRoLnJvdW5kKDI1NSpuWzFdKStcIiwgXCIrTWF0aC5yb3VuZCgyNTUqblsyXSk7cmV0dXJuIGE/XCJyZ2JhKFwiK3MrXCIsIFwiK25bM10rXCIpXCI6XCJyZ2IoXCIrcytcIilcIn1hLnRpbnlSR0I9ZnVuY3Rpb24odCl7dmFyIGU9dC50b1JnYigpO3JldHVyblwicmdiKFwiK01hdGgucm91bmQoZS5yKStcIiwgXCIrTWF0aC5yb3VuZChlLmcpK1wiLCBcIitNYXRoLnJvdW5kKGUuYikrXCIpXCJ9LGEucmdiPWZ1bmN0aW9uKHQpe3JldHVybiBhLnRpbnlSR0Iobih0KSl9LGEub3BhY2l0eT1mdW5jdGlvbih0KXtyZXR1cm4gdD9uKHQpLmdldEFscGhhKCk6MH0sYS5hZGRPcGFjaXR5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0KS50b1JnYigpO3JldHVyblwicmdiYShcIitNYXRoLnJvdW5kKHIucikrXCIsIFwiK01hdGgucm91bmQoci5nKStcIiwgXCIrTWF0aC5yb3VuZChyLmIpK1wiLCBcIitlK1wiKVwifSxhLmNvbWJpbmU9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKHQpLnRvUmdiKCk7aWYoMT09PXIuYSlyZXR1cm4gbih0KS50b1JnYlN0cmluZygpO3ZhciBpPW4oZXx8bCkudG9SZ2IoKSxhPTE9PT1pLmE/aTp7cjoyNTUqKDEtaS5hKStpLnIqaS5hLGc6MjU1KigxLWkuYSkraS5nKmkuYSxiOjI1NSooMS1pLmEpK2kuYippLmF9LG89e3I6YS5yKigxLXIuYSkrci5yKnIuYSxnOmEuZyooMS1yLmEpK3IuZypyLmEsYjphLmIqKDEtci5hKStyLmIqci5hfTtyZXR1cm4gbihvKS50b1JnYlN0cmluZygpfSxhLmNvbnRyYXN0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1uKHQpO3JldHVybiAxIT09aS5nZXRBbHBoYSgpJiYoaT1uKGEuY29tYmluZSh0LGwpKSksKGkuaXNEYXJrKCk/ZT9pLmxpZ2h0ZW4oZSk6bDpyP2kuZGFya2VuKHIpOnMpLnRvU3RyaW5nKCl9LGEuc3Ryb2tlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bihlKTt0LnN0eWxlKHtzdHJva2U6YS50aW55UkdCKHIpLFwic3Ryb2tlLW9wYWNpdHlcIjpyLmdldEFscGhhKCl9KX0sYS5maWxsPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bihlKTt0LnN0eWxlKHtmaWxsOmEudGlueVJHQihyKSxcImZpbGwtb3BhY2l0eVwiOnIuZ2V0QWxwaGEoKX0pfSxhLmNsZWFuPWZ1bmN0aW9uKHQpe2lmKHQmJlwib2JqZWN0XCI9PXR5cGVvZiB0KXt2YXIgZSxyLG4saSxvPU9iamVjdC5rZXlzKHQpO2ZvcihlPTA7ZTxvLmxlbmd0aDtlKyspaWYoaT10W249b1tlXV0sXCJjb2xvclwiPT09bi5zdWJzdHIobi5sZW5ndGgtNSkpaWYoQXJyYXkuaXNBcnJheShpKSlmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWlbcl09YyhpW3JdKTtlbHNlIHRbbl09YyhpKTtlbHNlIGlmKFwiY29sb3JzY2FsZVwiPT09bi5zdWJzdHIobi5sZW5ndGgtMTApJiZBcnJheS5pc0FycmF5KGkpKWZvcihyPTA7cjxpLmxlbmd0aDtyKyspQXJyYXkuaXNBcnJheShpW3JdKSYmKGlbcl1bMV09YyhpW3JdWzFdKSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGkpKXt2YXIgcz1pWzBdO2lmKCFBcnJheS5pc0FycmF5KHMpJiZzJiZcIm9iamVjdFwiPT10eXBlb2Ygcylmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWEuY2xlYW4oaVtyXSl9ZWxzZSBpJiZcIm9iamVjdFwiPT10eXBlb2YgaSYmYS5jbGVhbihpKX19fSx7XCIuL2F0dHJpYnV0ZXNcIjo1NzcsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMix0aW55Y29sb3IyOjUyMn1dLDU3OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxvPXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsO2UuZXhwb3J0cz1vKHt0aGlja25lc3Ntb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJmcmFjdGlvblwiLFwicGl4ZWxzXCJdLGRmbHQ6XCJwaXhlbHNcIn0sdGhpY2tuZXNzOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDozMH0sbGVubW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiZnJhY3Rpb25cIixcInBpeGVsc1wiXSxkZmx0OlwiZnJhY3Rpb25cIn0sbGVuOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxfSx4Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxLjAyLG1pbjotMixtYXg6M30seGFuY2hvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibGVmdFwiLFwiY2VudGVyXCIsXCJyaWdodFwiXSxkZmx0OlwibGVmdFwifSx4cGFkOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxMH0seTp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6LjUsbWluOi0yLG1heDozfSx5YW5jaG9yOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ0b3BcIixcIm1pZGRsZVwiLFwiYm90dG9tXCJdLGRmbHQ6XCJtaWRkbGVcIn0seXBhZDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MTB9LG91dGxpbmVjb2xvcjpuLmxpbmVjb2xvcixvdXRsaW5ld2lkdGg6bi5saW5ld2lkdGgsYm9yZGVyY29sb3I6bi5saW5lY29sb3IsYm9yZGVyd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjB9LGJnY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6XCJyZ2JhKDAsMCwwLDApXCJ9LHRpY2ttb2RlOm4udGlja21vZGUsbnRpY2tzOm4ubnRpY2tzLHRpY2swOm4udGljazAsZHRpY2s6bi5kdGljayx0aWNrdmFsczpuLnRpY2t2YWxzLHRpY2t0ZXh0Om4udGlja3RleHQsdGlja3M6YSh7fSxuLnRpY2tzLHtkZmx0OlwiXCJ9KSx0aWNrbGVuOm4udGlja2xlbix0aWNrd2lkdGg6bi50aWNrd2lkdGgsdGlja2NvbG9yOm4udGlja2NvbG9yLHNob3d0aWNrbGFiZWxzOm4uc2hvd3RpY2tsYWJlbHMsdGlja2ZvbnQ6aSh7fSksdGlja2FuZ2xlOm4udGlja2FuZ2xlLHRpY2tmb3JtYXQ6bi50aWNrZm9ybWF0LHRpY2tmb3JtYXRzdG9wczpuLnRpY2tmb3JtYXRzdG9wcyx0aWNrcHJlZml4Om4udGlja3ByZWZpeCxzaG93dGlja3ByZWZpeDpuLnNob3d0aWNrcHJlZml4LHRpY2tzdWZmaXg6bi50aWNrc3VmZml4LHNob3d0aWNrc3VmZml4Om4uc2hvd3RpY2tzdWZmaXgsc2VwYXJhdGV0aG91c2FuZHM6bi5zZXBhcmF0ZXRob3VzYW5kcyxleHBvbmVudGZvcm1hdDpuLmV4cG9uZW50Zm9ybWF0LHNob3dleHBvbmVudDpuLnNob3dleHBvbmVudCx0aXRsZTp7dGV4dDp7dmFsVHlwZTpcInN0cmluZ1wifSxmb250Omkoe30pLHNpZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInJpZ2h0XCIsXCJ0b3BcIixcImJvdHRvbVwiXSxkZmx0OlwidG9wXCJ9fSxfZGVwcmVjYXRlZDp7dGl0bGU6e3ZhbFR5cGU6XCJzdHJpbmdcIn0sdGl0bGVmb250Omkoe30pLHRpdGxlc2lkZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wicmlnaHRcIixcInRvcFwiLFwiYm90dG9tXCJdLGRmbHQ6XCJ0b3BcIn19fSxcImNvbG9yYmFyc1wiLFwiZnJvbS1yb290XCIpfSx7XCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlc1wiOjc2MSxcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiOjc3NX1dLDU4MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2RyYXdcIiksaT10KFwiLi4vY29sb3JzY2FsZS9oZWxwZXJzXCIpLmZsaXBTY2FsZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHIpcmV0dXJuIHIodCxlKTt2YXIgYT1lWzBdLnRyYWNlLG89XCJjYlwiK2EudWlkO3I9QXJyYXkuaXNBcnJheShyKT9yOltyXTtmb3IodmFyIHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIGw9cltzXS5jb250YWluZXIsYz1sP2FbbF06YTtpZih0Ll9mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKFwiLlwiK28pLnJlbW92ZSgpLGMmJmMuc2hvd3NjYWxlKXt2YXIgdT1lWzBdLnQuY2I9bih0LG8pLGg9Yy5yZXZlcnNlc2NhbGU/aShjLmNvbG9yc2NhbGUpOmMuY29sb3JzY2FsZTtyZXR1cm4gdm9pZCB1LmZpbGxncmFkaWVudChoKS56cmFuZ2UoW2NbcltzXS5taW5dLGNbcltzXS5tYXhdXSkub3B0aW9ucyhjLmNvbG9yYmFyKSgpfX19fSx7XCIuLi9jb2xvcnNjYWxlL2hlbHBlcnNcIjo1ODksXCIuL2RyYXdcIjo1ODN9XSw1ODE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e2NuOntjb2xvcmJhcjpcImNvbG9yYmFyXCIsY2JiZzpcImNiYmdcIixjYmZpbGw6XCJjYmZpbGxcIixjYmZpbGxzOlwiY2JmaWxsc1wiLGNibGluZTpcImNibGluZVwiLGNibGluZXM6XCJjYmxpbmVzXCIsY2JheGlzOlwiY2JheGlzXCIsY2J0aXRsZXVuc2hpZnQ6XCJjYnRpdGxldW5zaGlmdFwiLGNidGl0bGU6XCJjYnRpdGxlXCIsY2JvdXRsaW5lOlwiY2JvdXRsaW5lXCIsY3Jpc3A6XCJjcmlzcFwiLGpzUGxhY2Vob2xkZXI6XCJqcy1wbGFjZWhvbGRlclwifX19LHt9XSw1ODI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIiksYT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHNcIiksbz10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0c1wiKSxzPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0c1wiKSxsPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYz1pLm5ld0NvbnRhaW5lcihlLFwiY29sb3JiYXJcIiksdT10LmNvbG9yYmFyfHx7fTtmdW5jdGlvbiBoKHQsZSl7cmV0dXJuIG4uY29lcmNlKHUsYyxsLHQsZSl9dmFyIGY9aChcInRoaWNrbmVzc21vZGVcIik7aChcInRoaWNrbmVzc1wiLFwiZnJhY3Rpb25cIj09PWY/MzAvKHIud2lkdGgtci5tYXJnaW4ubC1yLm1hcmdpbi5yKTozMCk7dmFyIHA9aChcImxlbm1vZGVcIik7aChcImxlblwiLFwiZnJhY3Rpb25cIj09PXA/MTpyLmhlaWdodC1yLm1hcmdpbi50LXIubWFyZ2luLmIpLGgoXCJ4XCIpLGgoXCJ4YW5jaG9yXCIpLGgoXCJ4cGFkXCIpLGgoXCJ5XCIpLGgoXCJ5YW5jaG9yXCIpLGgoXCJ5cGFkXCIpLG4ubm9uZU9yQWxsKHUsYyxbXCJ4XCIsXCJ5XCJdKSxoKFwib3V0bGluZWNvbG9yXCIpLGgoXCJvdXRsaW5ld2lkdGhcIiksaChcImJvcmRlcmNvbG9yXCIpLGgoXCJib3JkZXJ3aWR0aFwiKSxoKFwiYmdjb2xvclwiKSxhKHUsYyxoLFwibGluZWFyXCIpO3ZhciBkPXtvdXRlclRpY2tzOiExLGZvbnQ6ci5mb250fTtzKHUsYyxoLFwibGluZWFyXCIsZCksbyh1LGMsaCxcImxpbmVhclwiLGQpLGgoXCJ0aXRsZS50ZXh0XCIsci5fZGZsdFRpdGxlLmNvbG9yYmFyKSxuLmNvZXJjZUZvbnQoaCxcInRpdGxlLmZvbnRcIixyLmZvbnQpLGgoXCJ0aXRsZS5zaWRlXCIpfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzXCI6NzY4LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0c1wiOjc2OSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzXCI6NzcwLFwiLi9hdHRyaWJ1dGVzXCI6NTc5fV0sNTgzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcInRpbnljb2xvcjJcIiksYT10KFwiLi4vLi4vcGxvdHMvcGxvdHNcIiksbz10KFwiLi4vLi4vcmVnaXN0cnlcIikscz10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksbD10KFwiLi4vZHJhZ2VsZW1lbnRcIiksYz10KFwiLi4vLi4vbGliXCIpLHU9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxoPXQoXCIuLi8uLi9saWIvc2V0Y3Vyc29yXCIpLGY9dChcIi4uL2RyYXdpbmdcIikscD10KFwiLi4vY29sb3JcIiksZD10KFwiLi4vdGl0bGVzXCIpLGc9dChcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiKSx2PXQoXCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCIpLG09di5MSU5FX1NQQUNJTkcseT12LkZST01fVEwseD12LkZST01fQlIsYj10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZGVmYXVsdHNcIiksXz10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3Bvc2l0aW9uX2RlZmF1bHRzXCIpLHc9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlc1wiKSxrPXQoXCIuL2F0dHJpYnV0ZXNcIiksQT10KFwiLi9jb25zdGFudHNcIikuY247ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307Zm9yKHZhciB2IGluIGspclt2XT1udWxsO2Z1bmN0aW9uIFQoKXt2YXIgdj10Ll9mdWxsTGF5b3V0LGs9di5fc2l6ZTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiByLmZpbGxjb2xvcnx8XCJmdW5jdGlvblwiPT10eXBlb2Ygci5saW5lLmNvbG9yfHxyLmZpbGxncmFkaWVudCl7dmFyIEUsQyxMPXIuenJhbmdlfHxuLmV4dGVudCgoXCJmdW5jdGlvblwiPT10eXBlb2Ygci5maWxsY29sb3I/ci5maWxsY29sb3I6ci5saW5lLmNvbG9yKS5kb21haW4oKSksej1bXSxPPVtdLEk9XCJmdW5jdGlvblwiPT10eXBlb2Ygci5saW5lLmNvbG9yP3IubGluZS5jb2xvcjpmdW5jdGlvbigpe3JldHVybiByLmxpbmUuY29sb3J9LEQ9XCJmdW5jdGlvblwiPT10eXBlb2Ygci5maWxsY29sb3I/ci5maWxsY29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gci5maWxsY29sb3J9LFA9ci5sZXZlbHMuZW5kK3IubGV2ZWxzLnNpemUvMTAwLFI9ci5sZXZlbHMuc2l6ZSxGPTEuMDAxKkxbMF0tLjAwMSpMWzFdLEI9MS4wMDEqTFsxXS0uMDAxKkxbMF07Zm9yKEM9MDtDPDFlNSYmKEU9ci5sZXZlbHMuc3RhcnQrQypSLCEoUj4wP0U+PVA6RTw9UCkpO0MrKylFPkYmJkU8QiYmei5wdXNoKEUpO2lmKHIuZmlsbGdyYWRpZW50KU89WzBdO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygci5maWxsY29sb3IpaWYoci5maWxsbGV2ZWxzKWZvcihQPXIuZmlsbGxldmVscy5lbmQrci5maWxsbGV2ZWxzLnNpemUvMTAwLFI9ci5maWxsbGV2ZWxzLnNpemUsQz0wO0M8MWU1JiYoRT1yLmZpbGxsZXZlbHMuc3RhcnQrQypSLCEoUj4wP0U+PVA6RTw9UCkpO0MrKylFPkxbMF0mJkU8TFsxXSYmTy5wdXNoKEUpO2Vsc2UoTz16Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC1yLmxldmVscy5zaXplLzJ9KSkucHVzaChPW08ubGVuZ3RoLTFdK3IubGV2ZWxzLnNpemUpO2Vsc2Ugci5maWxsY29sb3ImJlwic3RyaW5nXCI9PXR5cGVvZiByLmZpbGxjb2xvciYmKE89WzBdKTtyLmxldmVscy5zaXplPDAmJih6LnJldmVyc2UoKSxPLnJldmVyc2UoKSk7dmFyIE4saj1rLmgsVj1rLncsVT1NYXRoLnJvdW5kKHIudGhpY2tuZXNzKihcImZyYWN0aW9uXCI9PT1yLnRoaWNrbmVzc21vZGU/VjoxKSkscT1VL2sudyxIPU1hdGgucm91bmQoci5sZW4qKFwiZnJhY3Rpb25cIj09PXIubGVubW9kZT9qOjEpKSxHPUgvay5oLFk9ci54cGFkL2sudyxXPShyLmJvcmRlcndpZHRoK3Iub3V0bGluZXdpZHRoKS8yLFg9ci55cGFkL2suaCxaPU1hdGgucm91bmQoci54KmsudytyLnhwYWQpLCQ9ci54LXEqKHttaWRkbGU6LjUscmlnaHQ6MX1bci54YW5jaG9yXXx8MCksSj1yLnkrRyooKHt0b3A6LS41LGJvdHRvbTouNX1bci55YW5jaG9yXXx8MCktLjUpLEs9TWF0aC5yb3VuZChrLmgqKDEtSikpLFE9Sy1ILHR0PXt0eXBlOlwibGluZWFyXCIscmFuZ2U6TCx0aWNrbW9kZTpyLnRpY2ttb2RlLG50aWNrczpyLm50aWNrcyx0aWNrMDpyLnRpY2swLGR0aWNrOnIuZHRpY2ssdGlja3ZhbHM6ci50aWNrdmFscyx0aWNrdGV4dDpyLnRpY2t0ZXh0LHRpY2tzOnIudGlja3MsdGlja2xlbjpyLnRpY2tsZW4sdGlja3dpZHRoOnIudGlja3dpZHRoLHRpY2tjb2xvcjpyLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczpyLnNob3d0aWNrbGFiZWxzLHRpY2tmb250OnIudGlja2ZvbnQsdGlja2FuZ2xlOnIudGlja2FuZ2xlLHRpY2tmb3JtYXQ6ci50aWNrZm9ybWF0LGV4cG9uZW50Zm9ybWF0OnIuZXhwb25lbnRmb3JtYXQsc2VwYXJhdGV0aG91c2FuZHM6ci5zZXBhcmF0ZXRob3VzYW5kcyxzaG93ZXhwb25lbnQ6ci5zaG93ZXhwb25lbnQsc2hvd3RpY2twcmVmaXg6ci5zaG93dGlja3ByZWZpeCx0aWNrcHJlZml4OnIudGlja3ByZWZpeCxzaG93dGlja3N1ZmZpeDpyLnNob3d0aWNrc3VmZml4LHRpY2tzdWZmaXg6ci50aWNrc3VmZml4LHRpdGxlOnIudGl0bGUsc2hvd2xpbmU6ITAsYW5jaG9yOlwiZnJlZVwiLHNpZGU6XCJyaWdodFwiLHBvc2l0aW9uOjF9LGV0PXt0eXBlOlwibGluZWFyXCIsX2lkOlwieVwiK2V9LHJ0PXtsZXR0ZXI6XCJ5XCIsZm9udDp2LmZvbnQsbm9Ib3ZlcjohMCxub1RpY2tzb246ITAsY2FsZW5kYXI6di5jYWxlbmRhcn07aWYoYih0dCxldCx5dCxydCx2KSxfKHR0LGV0LHl0LHJ0KSxldC5wb3NpdGlvbj1yLngrWStxLFQuYXhpcz1ldCwtMSE9PVtcInRvcFwiLFwiYm90dG9tXCJdLmluZGV4T2Yoci50aXRsZS5zaWRlKSYmKGV0LnRpdGxlLnNpZGU9ci50aXRsZS5zaWRlLGV0LnRpdGxleD1yLngrWSxldC50aXRsZXk9SisoXCJ0b3BcIj09PXIudGl0bGUuc2lkZT9HLVg6WCkpLHIubGluZS5jb2xvciYmXCJhdXRvXCI9PT1yLnRpY2ttb2RlKXtldC50aWNrbW9kZT1cImxpbmVhclwiLGV0LnRpY2swPXIubGV2ZWxzLnN0YXJ0O3ZhciBudD1yLmxldmVscy5zaXplLGl0PWMuY29uc3RyYWluKChLLVEpLzUwLDQsMTUpKzEsYXQ9KExbMV0tTFswXSkvKChyLm50aWNrc3x8aXQpKm50KTtpZihhdD4xKXt2YXIgb3Q9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhhdCkvTWF0aC5MTjEwKSk7bnQqPW90KmMucm91bmRVcChhdC9vdCxbMiw1LDEwXSksKE1hdGguYWJzKHIubGV2ZWxzLnN0YXJ0KS9yLmxldmVscy5zaXplKzFlLTYpJTE8MmUtNiYmKGV0LnRpY2swPTApfWV0LmR0aWNrPW50fWV0LmRvbWFpbj1bSitYLEorRy1YXSxldC5zZXRTY2FsZSgpO3ZhciBzdD1jLmVuc3VyZVNpbmdsZSh2Ll9pbmZvbGF5ZXIsXCJnXCIsZSxmdW5jdGlvbih0KXt0LmNsYXNzZWQoQS5jb2xvcmJhciwhMCkuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO3QuYXBwZW5kKFwicmVjdFwiKS5jbGFzc2VkKEEuY2JiZywhMCksdC5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoQS5jYmZpbGxzLCEwKSx0LmFwcGVuZChcImdcIikuY2xhc3NlZChBLmNibGluZXMsITApLHQuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKEEuY2JheGlzLCEwKS5jbGFzc2VkKEEuY3Jpc3AsITApLHQuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKEEuY2J0aXRsZXVuc2hpZnQsITApLmFwcGVuZChcImdcIikuY2xhc3NlZChBLmNidGl0bGUsITApLHQuYXBwZW5kKFwicmVjdFwiKS5jbGFzc2VkKEEuY2JvdXRsaW5lLCEwKSx0LnNlbGVjdChcIi5jYnRpdGxlXCIpLmRhdHVtKDApfSl9KTtzdC5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrTWF0aC5yb3VuZChrLmwpK1wiLFwiK01hdGgucm91bmQoay50KStcIilcIik7dmFyIGx0PXN0LnNlbGVjdChcIi5jYnRpdGxldW5zaGlmdFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoLVwiK01hdGgucm91bmQoay5sKStcIiwtXCIrTWF0aC5yb3VuZChrLnQpK1wiKVwiKSxjdD1zdC5zZWxlY3QoXCIuY2JheGlzXCIpLHV0PTA7aWYoLTEhPT1bXCJ0b3BcIixcImJvdHRvbVwiXS5pbmRleE9mKHIudGl0bGUuc2lkZSkpe3ZhciBodCxmdD1rLmwrKHIueCtZKSprLncscHQ9ZXQudGl0bGUuZm9udC5zaXplO2h0PVwidG9wXCI9PT1yLnRpdGxlLnNpZGU/KDEtKEorRy1YKSkqay5oK2sudCszKy43NSpwdDooMS0oSitYKSkqay5oK2sudC0zLS4yNSpwdCx4dChldC5faWQrXCJ0aXRsZVwiLHthdHRyaWJ1dGVzOnt4OmZ0LHk6aHQsXCJ0ZXh0LWFuY2hvclwiOlwic3RhcnRcIn19KX12YXIgZHQsZ3QsdnQsbXQ9Yy5zeW5jT3JBc3luYyhbYS5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7aWYoLTEhPT1bXCJ0b3BcIixcImJvdHRvbVwiXS5pbmRleE9mKHIudGl0bGUuc2lkZSkpe3ZhciBhPXN0LnNlbGVjdChcIi5jYnRpdGxlXCIpLG89YS5zZWxlY3QoXCJ0ZXh0XCIpLGw9Wy1yLm91dGxpbmV3aWR0aC8yLHIub3V0bGluZXdpZHRoLzJdLHU9YS5zZWxlY3QoXCIuaFwiK2V0Ll9pZCtcInRpdGxlLW1hdGgtZ3JvdXBcIikubm9kZSgpLGg9MTUuNjtpZihvLm5vZGUoKSYmKGg9cGFyc2VJbnQoby5ub2RlKCkuc3R5bGUuZm9udFNpemUsMTApKm0pLHU/KHV0PWYuYkJveCh1KS5oZWlnaHQpPmgmJihsWzFdLT0odXQtaCkvMik6by5ub2RlKCkmJiFvLmNsYXNzZWQoQS5qc1BsYWNlaG9sZGVyKSYmKHV0PWYuYkJveChvLm5vZGUoKSkuaGVpZ2h0KSx1dCl7aWYodXQrPTUsXCJ0b3BcIj09PXIudGl0bGUuc2lkZSlldC5kb21haW5bMV0tPXV0L2suaCxsWzFdKj0tMTtlbHNle2V0LmRvbWFpblswXSs9dXQvay5oO3ZhciBwPWcubGluZUNvdW50KG8pO2xbMV0rPSgxLXApKmh9YS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrbCtcIilcIiksZXQuc2V0U2NhbGUoKX19c3Quc2VsZWN0QWxsKFwiLmNiZmlsbHMsLmNibGluZXNcIikuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKDAsXCIrTWF0aC5yb3VuZChrLmgqKDEtZXQuZG9tYWluWzFdKSkrXCIpXCIpLGN0LmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZSgwLFwiK01hdGgucm91bmQoLWsudCkrXCIpXCIpO3ZhciBkPXN0LnNlbGVjdChcIi5jYmZpbGxzXCIpLnNlbGVjdEFsbChcInJlY3QuY2JmaWxsXCIpLmRhdGEoTyk7ZC5lbnRlcigpLmFwcGVuZChcInJlY3RcIikuY2xhc3NlZChBLmNiZmlsbCwhMCkuc3R5bGUoXCJzdHJva2VcIixcIm5vbmVcIiksZC5leGl0KCkucmVtb3ZlKCk7dmFyIHk9TC5tYXAoZXQuYzJwKS5tYXAoTWF0aC5yb3VuZCkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KTtkLmVhY2goZnVuY3Rpb24oYSxvKXt2YXIgcz1bMD09PW8/TFswXTooT1tvXStPW28tMV0pLzIsbz09PU8ubGVuZ3RoLTE/TFsxXTooT1tvXStPW28rMV0pLzJdLm1hcChldC5jMnApLm1hcChNYXRoLnJvdW5kKTtzWzFdPWMuY29uc3RyYWluKHNbMV0rKHNbMV0+c1swXSk/MTotMSx5WzBdLHlbMV0pO3ZhciBsPW4uc2VsZWN0KHRoaXMpLmF0dHIoe3g6Wix3aWR0aDpNYXRoLm1heChVLDIpLHk6bi5taW4ocyksaGVpZ2h0Ok1hdGgubWF4KG4ubWF4KHMpLW4ubWluKHMpLDIpfSk7aWYoci5maWxsZ3JhZGllbnQpZi5ncmFkaWVudChsLHQsZSxcInZlcnRpY2FsXCIsci5maWxsZ3JhZGllbnQsXCJmaWxsXCIpO2Vsc2V7dmFyIHU9RChhKS5yZXBsYWNlKFwiZS1cIixcIlwiKTtsLmF0dHIoXCJmaWxsXCIsaSh1KS50b0hleFN0cmluZygpKX19KTt2YXIgeD1zdC5zZWxlY3QoXCIuY2JsaW5lc1wiKS5zZWxlY3RBbGwoXCJwYXRoLmNibGluZVwiKS5kYXRhKHIubGluZS5jb2xvciYmci5saW5lLndpZHRoP3o6W10pO3JldHVybiB4LmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5jbGFzc2VkKEEuY2JsaW5lLCEwKSx4LmV4aXQoKS5yZW1vdmUoKSx4LmVhY2goZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuYXR0cihcImRcIixcIk1cIitaK1wiLFwiKyhNYXRoLnJvdW5kKGV0LmMycCh0KSkrci5saW5lLndpZHRoLzIlMSkrXCJoXCIrVSkuY2FsbChmLmxpbmVHcm91cFN0eWxlLHIubGluZS53aWR0aCxJKHQpLHIubGluZS5kYXNoKX0pLGN0LnNlbGVjdEFsbChcImcuXCIrZXQuX2lkK1widGljayxwYXRoXCIpLnJlbW92ZSgpLGMuc3luY09yQXN5bmMoW2Z1bmN0aW9uKCl7dmFyIGU9WitVKyhyLm91dGxpbmV3aWR0aHx8MCkvMi0oXCJvdXRzaWRlXCI9PT1yLnRpY2tzPzE6MCksbj1zLmNhbGNUaWNrcyhldCksaT1zLm1ha2VUcmFuc0ZuKGV0KSxhPXMuZ2V0VGlja1NpZ25zKGV0KVsyXTtyZXR1cm4gcy5kcmF3VGlja3ModCxldCx7dmFsczpcImluc2lkZVwiPT09ZXQudGlja3M/cy5jbGlwRW5kcyhldCxuKTpuLGxheWVyOmN0LHBhdGg6cy5tYWtlVGlja1BhdGgoZXQsZSxhKSx0cmFuc0ZuOml9KSxzLmRyYXdMYWJlbHModCxldCx7dmFsczpuLGxheWVyOmN0LHRyYW5zRm46aSxsYWJlbEZuczpzLm1ha2VMYWJlbEZucyhldCxlKX0pfSxmdW5jdGlvbigpe2lmKC0xPT09W1widG9wXCIsXCJib3R0b21cIl0uaW5kZXhPZihyLnRpdGxlLnNpZGUpKXt2YXIgZT1ldC50aXRsZS5mb250LnNpemUsaT1ldC5fb2Zmc2V0K2V0Ll9sZW5ndGgvMixhPWsubCsoZXQucG9zaXRpb258fDApKmsudysoXCJyaWdodFwiPT09ZXQuc2lkZT8xMCtlKihldC5zaG93dGlja2xhYmVscz8xOi41KTotMTAtZSooZXQuc2hvd3RpY2tsYWJlbHM/LjU6MCkpO3h0KFwiaFwiK2V0Ll9pZCtcInRpdGxlXCIse2F2b2lkOntzZWxlY3Rpb246bi5zZWxlY3QodCkuc2VsZWN0QWxsKFwiZy5cIitldC5faWQrXCJ0aWNrXCIpLHNpZGU6ci50aXRsZS5zaWRlLG9mZnNldExlZnQ6ay5sLG9mZnNldFRvcDowLG1heFNoaWZ0OnYud2lkdGh9LGF0dHJpYnV0ZXM6e3g6YSx5OmksXCJ0ZXh0LWFuY2hvclwiOlwibWlkZGxlXCJ9LHRyYW5zZm9ybTp7cm90YXRlOlwiLTkwXCIsb2Zmc2V0OjB9fSl9fV0pfSxhLnByZXZpb3VzUHJvbWlzZXMsZnVuY3Rpb24oKXt2YXIgbj1VK3Iub3V0bGluZXdpZHRoLzIrZi5iQm94KGN0Lm5vZGUoKSkud2lkdGg7aWYoKE49bHQuc2VsZWN0KFwidGV4dFwiKSkubm9kZSgpJiYhTi5jbGFzc2VkKEEuanNQbGFjZWhvbGRlcikpe3ZhciBpLG89bHQuc2VsZWN0KFwiLmhcIitldC5faWQrXCJ0aXRsZS1tYXRoLWdyb3VwXCIpLm5vZGUoKTtpPW8mJi0xIT09W1widG9wXCIsXCJib3R0b21cIl0uaW5kZXhPZihyLnRpdGxlLnNpZGUpP2YuYkJveChvKS53aWR0aDpmLmJCb3gobHQubm9kZSgpKS5yaWdodC1aLWsubCxuPU1hdGgubWF4KG4saSl9dmFyIHM9MipyLnhwYWQrbityLmJvcmRlcndpZHRoK3Iub3V0bGluZXdpZHRoLzIsbD1LLVE7c3Quc2VsZWN0KFwiLmNiYmdcIikuYXR0cih7eDpaLXIueHBhZC0oci5ib3JkZXJ3aWR0aCtyLm91dGxpbmV3aWR0aCkvMix5OlEtVyx3aWR0aDpNYXRoLm1heChzLDIpLGhlaWdodDpNYXRoLm1heChsKzIqVywyKX0pLmNhbGwocC5maWxsLHIuYmdjb2xvcikuY2FsbChwLnN0cm9rZSxyLmJvcmRlcmNvbG9yKS5zdHlsZSh7XCJzdHJva2Utd2lkdGhcIjpyLmJvcmRlcndpZHRofSksc3Quc2VsZWN0QWxsKFwiLmNib3V0bGluZVwiKS5hdHRyKHt4OloseTpRK3IueXBhZCsoXCJ0b3BcIj09PXIudGl0bGUuc2lkZT91dDowKSx3aWR0aDpNYXRoLm1heChVLDIpLGhlaWdodDpNYXRoLm1heChsLTIqci55cGFkLXV0LDIpfSkuY2FsbChwLnN0cm9rZSxyLm91dGxpbmVjb2xvcikuc3R5bGUoe2ZpbGw6XCJOb25lXCIsXCJzdHJva2Utd2lkdGhcIjpyLm91dGxpbmV3aWR0aH0pO3ZhciBjPSh7Y2VudGVyOi41LHJpZ2h0OjF9W3IueGFuY2hvcl18fDApKnM7c3QuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiKyhrLmwtYykrXCIsXCIray50K1wiKVwiKTt2YXIgdT17fSxoPXlbci55YW5jaG9yXSxkPXhbci55YW5jaG9yXTtcInBpeGVsc1wiPT09ci5sZW5tb2RlPyh1Lnk9ci55LHUudD1sKmgsdS5iPWwqZCk6KHUudD11LmI9MCx1Lnl0PXIueStyLmxlbipoLHUueWI9ci55LXIubGVuKmQpO3ZhciBnPXlbci54YW5jaG9yXSx2PXhbci54YW5jaG9yXTtpZihcInBpeGVsc1wiPT09ci50aGlja25lc3Ntb2RlKXUueD1yLngsdS5sPXMqZyx1LnI9cyp2O2Vsc2V7dmFyIG09cy1VO3UubD1tKmcsdS5yPW0qdix1LnhsPXIueC1yLnRoaWNrbmVzcypnLHUueHI9ci54K3IudGhpY2tuZXNzKnZ9YS5hdXRvTWFyZ2luKHQsZSx1KX1dLHQpO2lmKG10JiZtdC50aGVuJiYodC5fcHJvbWlzZXN8fFtdKS5wdXNoKG10KSx0Ll9jb250ZXh0LmVkaXRzLmNvbG9yYmFyUG9zaXRpb24pbC5pbml0KHtlbGVtZW50OnN0Lm5vZGUoKSxnZDp0LHByZXBGbjpmdW5jdGlvbigpe2R0PXN0LmF0dHIoXCJ0cmFuc2Zvcm1cIiksaChzdCl9LG1vdmVGbjpmdW5jdGlvbih0LGUpe3N0LmF0dHIoXCJ0cmFuc2Zvcm1cIixkdCtcIiB0cmFuc2xhdGUoXCIrdCtcIixcIitlK1wiKVwiKSxndD1sLmFsaWduKCQrdC9rLncscSwwLDEsci54YW5jaG9yKSx2dD1sLmFsaWduKEotZS9rLmgsRywwLDEsci55YW5jaG9yKTt2YXIgbj1sLmdldEN1cnNvcihndCx2dCxyLnhhbmNob3Isci55YW5jaG9yKTtoKHN0LG4pfSxkb25lRm46ZnVuY3Rpb24oKXtpZihoKHN0KSx2b2lkIDAhPT1ndCYmdm9pZCAwIT09dnQpe3ZhciBlPXt9O2VbUyhcInhcIildPWd0LGVbUyhcInlcIildPXZ0LG8uY2FsbChcIl9ndWlSZXN0eWxlXCIsdCxlLE0oKS5pbmRleCl9fX0pO3JldHVybiBtdH1mdW5jdGlvbiB5dCh0LGUpe3JldHVybiBjLmNvZXJjZSh0dCxldCx3LHQsZSl9ZnVuY3Rpb24geHQoZSxyKXt2YXIgbj17cHJvcENvbnRhaW5lcjpldCxwcm9wTmFtZTpTKFwidGl0bGVcIiksdHJhY2VJbmRleDpNKCkuaW5kZXgscGxhY2Vob2xkZXI6di5fZGZsdFRpdGxlLmNvbG9yYmFyLGNvbnRhaW5lckdyb3VwOnN0LnNlbGVjdChcIi5jYnRpdGxlXCIpfSxpPVwiaFwiPT09ZS5jaGFyQXQoMCk/ZS5zdWJzdHIoMSk6XCJoXCIrZTtzdC5zZWxlY3RBbGwoXCIuXCIraStcIiwuXCIraStcIi1tYXRoLWdyb3VwXCIpLnJlbW92ZSgpLGQuZHJhdyh0LGUsdShuLHJ8fHt9KSl9di5faW5mb2xheWVyLnNlbGVjdEFsbChcImcuXCIrZSkucmVtb3ZlKCl9ZnVuY3Rpb24gTSgpe2Zvcih2YXIgcj1lLnN1YnN0cigyKSxuPTA7bjx0Ll9mdWxsRGF0YS5sZW5ndGg7bisrKXt2YXIgaT10Ll9mdWxsRGF0YVtuXTtpZihpLnVpZD09PXIpcmV0dXJuIGl9fWZ1bmN0aW9uIFModCl7dmFyIGU9XCJjb2xvcmJhci5cIixyPU0oKS5fbW9kdWxlLmNvbG9yYmFyLmNvbnRhaW5lcjtyZXR1cm4gciYmKGU9citcIi5cIitlKSxlK3R9cmV0dXJuIHIuZmlsbGNvbG9yPW51bGwsci5saW5lPXtjb2xvcjpudWxsLHdpZHRoOm51bGwsZGFzaDpudWxsfSxyLmxldmVscz17c3RhcnQ6bnVsbCxlbmQ6bnVsbCxzaXplOm51bGx9LHIuZmlsbGxldmVscz1udWxsLHIuZmlsbGdyYWRpZW50PW51bGwsci56cmFuZ2U9bnVsbCxPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe1RbdF09ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHJbdF09Yy5pc1BsYWluT2JqZWN0KHJbdF0pP2MuZXh0ZW5kRmxhdChyW3RdLGUpOmUsVCk6clt0XX19KSxULm9wdGlvbnM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHQpXCJmdW5jdGlvblwiPT10eXBlb2YgVFtlXSYmVFtlXSh0W2VdKTtyZXR1cm4gVH0sVC5fb3B0cz1yLFR9fSx7XCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCI6NjczLFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL2xpYi9zZXRjdXJzb3JcIjo3MjEsXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIjo3MjUsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzXCI6NzUxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzXCI6NzYxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3Bvc2l0aW9uX2RlZmF1bHRzXCI6NzY0LFwiLi4vLi4vcGxvdHMvcGxvdHNcIjo4MTAsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL2NvbG9yXCI6NTc4LFwiLi4vZHJhZ2VsZW1lbnRcIjo1OTYsXCIuLi9kcmF3aW5nXCI6NTk5LFwiLi4vdGl0bGVzXCI6NjY2LFwiLi9hdHRyaWJ1dGVzXCI6NTc5LFwiLi9jb25zdGFudHNcIjo1ODEsZDM6MTU1LHRpbnljb2xvcjI6NTIyfV0sNTg0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4uaXNQbGFpbk9iamVjdCh0LmNvbG9yYmFyKX19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDU4NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL3NjYWxlcy5qc1wiKS5zY2FsZXM7T2JqZWN0LmtleXMobik7ZnVuY3Rpb24gaSh0KXtyZXR1cm5cImBcIit0K1wiYFwifWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Q9dHx8XCJcIjt2YXIgcixhPShlPWV8fHt9KS5jTGV0dGVyfHxcImNcIixvPShcIm9ubHlJZk51bWVyaWNhbFwiaW4gZT9lLm9ubHlJZk51bWVyaWNhbDpCb29sZWFuKHQpLFwibm9TY2FsZVwiaW4gZT9lLm5vU2NhbGU6XCJtYXJrZXIubGluZVwiPT09dCkscz1cInNob3dTY2FsZURmbHRcImluIGU/ZS5zaG93U2NhbGVEZmx0OlwielwiPT09YSxsPVwic3RyaW5nXCI9PXR5cGVvZiBlLmNvbG9yc2NhbGVEZmx0P25bZS5jb2xvcnNjYWxlRGZsdF06bnVsbCxjPWUuZWRpdFR5cGVPdmVycmlkZXx8XCJcIix1PXQ/dCtcIi5cIjpcIlwiO1wiY29sb3JBdHRyXCJpbiBlPyhyPWUuY29sb3JBdHRyLGUuY29sb3JBdHRyKTppKHUrKHI9e3o6XCJ6XCIsYzpcImNvbG9yXCJ9W2FdKSk7dmFyIGg9YStcImF1dG9cIixmPWErXCJtaW5cIixwPWErXCJtYXhcIixkPWErXCJtaWRcIixnPShpKHUraCksaSh1K2YpLGkodStwKSx7fSk7Z1tmXT1nW3BdPXZvaWQgMDt2YXIgdj17fTt2W2hdPSExO3ZhciBtPXt9O3JldHVyblwiY29sb3JcIj09PXImJihtLmNvbG9yPXt2YWxUeXBlOlwiY29sb3JcIixhcnJheU9rOiEwLGVkaXRUeXBlOmN8fFwic3R5bGVcIn0sZS5hbmltJiYobS5jb2xvci5hbmltPSEwKSksbVtoXT17dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wiLGltcGxpZWRFZGl0czpnfSxtW2ZdPXt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDpudWxsLGVkaXRUeXBlOmN8fFwicGxvdFwiLGltcGxpZWRFZGl0czp2fSxtW3BdPXt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDpudWxsLGVkaXRUeXBlOmN8fFwicGxvdFwiLGltcGxpZWRFZGl0czp2fSxtW2RdPXt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDpudWxsLGVkaXRUeXBlOlwiY2FsY1wiLGltcGxpZWRFZGl0czpnfSxtLmNvbG9yc2NhbGU9e3ZhbFR5cGU6XCJjb2xvcnNjYWxlXCIsZWRpdFR5cGU6XCJjYWxjXCIsZGZsdDpsLGltcGxpZWRFZGl0czp7YXV0b2NvbG9yc2NhbGU6ITF9fSxtLmF1dG9jb2xvcnNjYWxlPXt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEhPT1lLmF1dG9Db2xvckRmbHQsZWRpdFR5cGU6XCJjYWxjXCIsaW1wbGllZEVkaXRzOntjb2xvcnNjYWxlOnZvaWQgMH19LG0ucmV2ZXJzZXNjYWxlPXt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEsZWRpdFR5cGU6XCJwbG90XCJ9LG98fChtLnNob3dzY2FsZT17dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OnMsZWRpdFR5cGU6XCJjYWxjXCJ9KSxtfX0se1wiLi9zY2FsZXMuanNcIjo1OTN9XSw1ODY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9dC5fZnVsbExheW91dCxhPXIudmFscyxvPXIuY29udGFpbmVyU3RyLHM9ci5jTGV0dGVyLGw9bz9uLm5lc3RlZFByb3BlcnR5KGUsbykuZ2V0KCk6ZSxjPXMrXCJtaW5cIix1PXMrXCJtYXhcIixoPXMrXCJtaWRcIixmPWxbcytcImF1dG9cIl0scD1sW2NdLGQ9bFt1XSxnPWxbaF0sdj1sLmNvbG9yc2NhbGU7ITE9PT1mJiZ2b2lkIDAhPT1wfHwocD1uLmFnZ051bXMoTWF0aC5taW4sbnVsbCxhKSksITE9PT1mJiZ2b2lkIDAhPT1kfHwoZD1uLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxhKSksITEhPT1mJiZ2b2lkIDAhPT1nJiYoZC1nPmctcD9wPWctKGQtZyk6ZC1nPGctcCYmKGQ9ZysoZy1wKSkpLHA9PT1kJiYocC09LjUsZCs9LjUpLGxbXCJfXCIrY109bFtjXT1wLGxbXCJfXCIrdV09bFt1XT1kLGwuYXV0b2NvbG9yc2NhbGUmJih2PXAqZDwwP2kuY29sb3JzY2FsZS5kaXZlcmdpbmc6cD49MD9pLmNvbG9yc2NhbGUuc2VxdWVudGlhbDppLmNvbG9yc2NhbGUuc2VxdWVudGlhbG1pbnVzLGwuX2NvbG9yc2NhbGU9bC5jb2xvcnNjYWxlPXYpfX0se1wiLi4vLi4vbGliXCI6NzAxfV0sNTg3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2hlbHBlcnNcIikuaGFzQ29sb3JzY2FsZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe3ZhciByPXRbXCJfXCIrZV07dm9pZCAwIT09ciYmKHRbZV09cil9ZnVuY3Rpb24gcih0LHIpe3ZhciBpPXIuY29udGFpbmVyP24ubmVzdGVkUHJvcGVydHkodCxyLmNvbnRhaW5lcikuZ2V0KCk6dDtpZihpKXt2YXIgYT1pLnphdXRvfHxpLmNhdXRvLG89ci5taW4scz1yLm1heDsoYXx8dm9pZCAwPT09aVtvXSkmJmUoaSxvKSwoYXx8dm9pZCAwPT09aVtzXSkmJmUoaSxzKSxpLmF1dG9jb2xvcnNjYWxlJiZlKGksXCJjb2xvcnNjYWxlXCIpfX1mb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89dFthXSxzPW8uX21vZHVsZS5jb2xvcmJhcjtpZihzKWlmKEFycmF5LmlzQXJyYXkocykpZm9yKHZhciBsPTA7bDxzLmxlbmd0aDtsKyspcihvLHNbbF0pO2Vsc2UgcihvLHMpO2kobyxcIm1hcmtlci5saW5lXCIpJiZyKG8se2NvbnRhaW5lcjpcIm1hcmtlci5saW5lXCIsbWluOlwiY21pblwiLG1heDpcImNtYXhcIn0pLGkobyxcImxpbmVcIikmJnIobyx7Y29udGFpbmVyOlwibGluZVwiLG1pbjpcImNtaW5cIixtYXg6XCJjbWF4XCJ9KX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuL2hlbHBlcnNcIjo1ODl9XSw1ODg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uL2NvbG9yYmFyL2hhc19jb2xvcmJhclwiKSxvPXQoXCIuLi9jb2xvcmJhci9kZWZhdWx0c1wiKSxzPXQoXCIuL3NjYWxlc1wiKS5pc1ZhbGlkO2Z1bmN0aW9uIGwodCxlKXt2YXIgcj1lLnNsaWNlKDAsZS5sZW5ndGgtMSk7cmV0dXJuIGU/aS5uZXN0ZWRQcm9wZXJ0eSh0LHIpLmdldCgpfHx7fTp0fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLGMpe3ZhciB1PWMucHJlZml4LGg9Yy5jTGV0dGVyLGY9bCh0LHUpLHA9bChlLHUpLGQ9bChlLl90ZW1wbGF0ZXx8e30sdSl8fHt9LGc9ZltoK1wibWluXCJdLHY9ZltoK1wibWF4XCJdO2kodStoK1wiYXV0b1wiLCEobihnKSYmbih2KSYmZzx2KSk/aSh1K2grXCJtaWRcIik6KGkodStoK1wibWluXCIpLGkodStoK1wibWF4XCIpKTt2YXIgbSx5LHg9Zi5jb2xvcnNjYWxlLGI9ZC5jb2xvcnNjYWxlOyh2b2lkIDAhPT14JiYobT0hcyh4KSksdm9pZCAwIT09YiYmKG09IXMoYikpLGkodStcImF1dG9jb2xvcnNjYWxlXCIsbSksaSh1K1wiY29sb3JzY2FsZVwiKSxpKHUrXCJyZXZlcnNlc2NhbGVcIiksYy5ub1NjYWxlfHxcIm1hcmtlci5saW5lLlwiPT09dSl8fCh1JiYoeT1hKGYpKSxpKHUrXCJzaG93c2NhbGVcIix5KSYmbyhmLHAscikpfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vY29sb3JiYXIvZGVmYXVsdHNcIjo1ODIsXCIuLi9jb2xvcmJhci9oYXNfY29sb3JiYXJcIjo1ODQsXCIuL3NjYWxlc1wiOjU5MyxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sNTg5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcInRpbnljb2xvcjJcIiksYT10KFwiZmFzdC1pc251bWVyaWNcIiksbz10KFwiLi4vLi4vbGliXCIpLHM9dChcIi4uL2NvbG9yXCIpLGw9dChcIi4vc2NhbGVzXCIpLmlzVmFsaWQ7ZnVuY3Rpb24gYyh0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj1lLTEsaT0wO24+PTA7bi0tLGkrKyl7dmFyIGE9dFtuXTtyW2ldPVsxLWFbMF0sYVsxXV19cmV0dXJuIHJ9ZnVuY3Rpb24gdSh0KXt2YXIgZT17cjp0WzBdLGc6dFsxXSxiOnRbMl0sYTp0WzNdfTtyZXR1cm4gaShlKS50b1JnYlN0cmluZygpfWUuZXhwb3J0cz17aGFzQ29sb3JzY2FsZTpmdW5jdGlvbih0LGUpe3ZhciByPWU/by5uZXN0ZWRQcm9wZXJ0eSh0LGUpLmdldCgpfHx7fTp0LG49ci5jb2xvcixpPSExO2lmKG8uaXNBcnJheU9yVHlwZWRBcnJheShuKSlmb3IodmFyIHM9MDtzPG4ubGVuZ3RoO3MrKylpZihhKG5bc10pKXtpPSEwO2JyZWFrfXJldHVybiBvLmlzUGxhaW5PYmplY3QocikmJihpfHwhMD09PXIuc2hvd3NjYWxlfHxhKHIuY21pbikmJmEoci5jbWF4KXx8bChyLmNvbG9yc2NhbGUpfHxvLmlzUGxhaW5PYmplY3Qoci5jb2xvcmJhcikpfSxleHRyYWN0U2NhbGU6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5jTGV0dGVyLG49dC5yZXZlcnNlc2NhbGU/Yyh0LmNvbG9yc2NhbGUpOnQuY29sb3JzY2FsZSxpPXRbcitcIm1pblwiXSxhPXRbcitcIm1heFwiXSxvPW4ubGVuZ3RoLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLHU9MDt1PG87dSsrKXt2YXIgaD1uW3VdO3NbdV09aStoWzBdKihhLWkpLGxbdV09aFsxXX1yZXR1cm57ZG9tYWluOnMscmFuZ2U6bH19LGZsaXBTY2FsZTpjLG1ha2VDb2xvclNjYWxlRnVuYzpmdW5jdGlvbih0LGUpe2U9ZXx8e307Zm9yKHZhciByPXQuZG9tYWluLG89dC5yYW5nZSxsPW8ubGVuZ3RoLGM9bmV3IEFycmF5KGwpLGg9MDtoPGw7aCsrKXt2YXIgZj1pKG9baF0pLnRvUmdiKCk7Y1toXT1bZi5yLGYuZyxmLmIsZi5hXX12YXIgcCxkPW4uc2NhbGUubGluZWFyKCkuZG9tYWluKHIpLnJhbmdlKGMpLmNsYW1wKCEwKSxnPWUubm9OdW1lcmljQ2hlY2ssdj1lLnJldHVybkFycmF5O3JldHVybihwPWcmJnY/ZDpnP2Z1bmN0aW9uKHQpe3JldHVybiB1KGQodCkpfTp2P2Z1bmN0aW9uKHQpe3JldHVybiBhKHQpP2QodCk6aSh0KS5pc1ZhbGlkKCk/dDpzLmRlZmF1bHRMaW5lfTpmdW5jdGlvbih0KXtyZXR1cm4gYSh0KT91KGQodCkpOmkodCkuaXNWYWxpZCgpP3Q6cy5kZWZhdWx0TGluZX0pLmRvbWFpbj1kLmRvbWFpbixwLnJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIG99LHB9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vY29sb3JcIjo1NzgsXCIuL3NjYWxlc1wiOjU5MyxkMzoxNTUsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMix0aW55Y29sb3IyOjUyMn1dLDU5MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL3NjYWxlc1wiKSxpPXQoXCIuL2hlbHBlcnNcIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwiY29tcG9uZW50XCIsbmFtZTpcImNvbG9yc2NhbGVcIixhdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksbGF5b3V0QXR0cmlidXRlczp0KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KFwiLi9sYXlvdXRfZGVmYXVsdHNcIiksaGFuZGxlRGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIiksY3Jvc3NUcmFjZURlZmF1bHRzOnQoXCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzXCIpLGNhbGM6dChcIi4vY2FsY1wiKSxzY2FsZXM6bi5zY2FsZXMsZGVmYXVsdFNjYWxlOm4uZGVmYXVsdFNjYWxlLGdldFNjYWxlOm4uZ2V0LGlzVmFsaWRTY2FsZTpuLmlzVmFsaWQsaGFzQ29sb3JzY2FsZTppLmhhc0NvbG9yc2NhbGUsZmxpcFNjYWxlOmkuZmxpcFNjYWxlLGV4dHJhY3RTY2FsZTppLmV4dHJhY3RTY2FsZSxtYWtlQ29sb3JTY2FsZUZ1bmM6aS5tYWtlQ29sb3JTY2FsZUZ1bmN9fSx7XCIuL2F0dHJpYnV0ZXNcIjo1ODUsXCIuL2NhbGNcIjo1ODYsXCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzXCI6NTg3LFwiLi9kZWZhdWx0c1wiOjU4OCxcIi4vaGVscGVyc1wiOjU4OSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo1OTEsXCIuL2xheW91dF9kZWZhdWx0c1wiOjU5MixcIi4vc2NhbGVzXCI6NTkzfV0sNTkxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vc2NhbGVzXCIpLnNjYWxlcztlLmV4cG9ydHM9e2VkaXRUeXBlOlwiY2FsY1wiLHNlcXVlbnRpYWw6e3ZhbFR5cGU6XCJjb2xvcnNjYWxlXCIsZGZsdDpuLlJlZHMsZWRpdFR5cGU6XCJjYWxjXCJ9LHNlcXVlbnRpYWxtaW51czp7dmFsVHlwZTpcImNvbG9yc2NhbGVcIixkZmx0Om4uQmx1ZXMsZWRpdFR5cGU6XCJjYWxjXCJ9LGRpdmVyZ2luZzp7dmFsVHlwZTpcImNvbG9yc2NhbGVcIixkZmx0Om4uUmRCdSxlZGl0VHlwZTpcImNhbGNcIn19fSx7XCIuL3NjYWxlc1wiOjU5M31dLDU5MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuY29sb3JzY2FsZSxvPWEubmV3Q29udGFpbmVyKGUsXCJjb2xvcnNjYWxlXCIpO2Z1bmN0aW9uIHModCxlKXtyZXR1cm4gbi5jb2VyY2UocixvLGksdCxlKX1zKFwic2VxdWVudGlhbFwiKSxzKFwic2VxdWVudGlhbG1pbnVzXCIpLHMoXCJkaXZlcmdpbmdcIil9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjU5MX1dLDU5MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJ0aW55Y29sb3IyXCIpLGk9e0dyZXlzOltbMCxcInJnYigwLDAsMClcIl0sWzEsXCJyZ2IoMjU1LDI1NSwyNTUpXCJdXSxZbEduQnU6W1swLFwicmdiKDgsMjksODgpXCJdLFsuMTI1LFwicmdiKDM3LDUyLDE0OClcIl0sWy4yNSxcInJnYigzNCw5NCwxNjgpXCJdLFsuMzc1LFwicmdiKDI5LDE0NSwxOTIpXCJdLFsuNSxcInJnYig2NSwxODIsMTk2KVwiXSxbLjYyNSxcInJnYigxMjcsMjA1LDE4NylcIl0sWy43NSxcInJnYigxOTksMjMzLDE4MClcIl0sWy44NzUsXCJyZ2IoMjM3LDI0OCwyMTcpXCJdLFsxLFwicmdiKDI1NSwyNTUsMjE3KVwiXV0sR3JlZW5zOltbMCxcInJnYigwLDY4LDI3KVwiXSxbLjEyNSxcInJnYigwLDEwOSw0NClcIl0sWy4yNSxcInJnYigzNSwxMzksNjkpXCJdLFsuMzc1LFwicmdiKDY1LDE3MSw5MylcIl0sWy41LFwicmdiKDExNiwxOTYsMTE4KVwiXSxbLjYyNSxcInJnYigxNjEsMjE3LDE1NSlcIl0sWy43NSxcInJnYigxOTksMjMzLDE5MilcIl0sWy44NzUsXCJyZ2IoMjI5LDI0NSwyMjQpXCJdLFsxLFwicmdiKDI0NywyNTIsMjQ1KVwiXV0sWWxPclJkOltbMCxcInJnYigxMjgsMCwzOClcIl0sWy4xMjUsXCJyZ2IoMTg5LDAsMzgpXCJdLFsuMjUsXCJyZ2IoMjI3LDI2LDI4KVwiXSxbLjM3NSxcInJnYigyNTIsNzgsNDIpXCJdLFsuNSxcInJnYigyNTMsMTQxLDYwKVwiXSxbLjYyNSxcInJnYigyNTQsMTc4LDc2KVwiXSxbLjc1LFwicmdiKDI1NCwyMTcsMTE4KVwiXSxbLjg3NSxcInJnYigyNTUsMjM3LDE2MClcIl0sWzEsXCJyZ2IoMjU1LDI1NSwyMDQpXCJdXSxCbHVlcmVkOltbMCxcInJnYigwLDAsMjU1KVwiXSxbMSxcInJnYigyNTUsMCwwKVwiXV0sUmRCdTpbWzAsXCJyZ2IoNSwxMCwxNzIpXCJdLFsuMzUsXCJyZ2IoMTA2LDEzNywyNDcpXCJdLFsuNSxcInJnYigxOTAsMTkwLDE5MClcIl0sWy42LFwicmdiKDIyMCwxNzAsMTMyKVwiXSxbLjcsXCJyZ2IoMjMwLDE0NSw5MClcIl0sWzEsXCJyZ2IoMTc4LDEwLDI4KVwiXV0sUmVkczpbWzAsXCJyZ2IoMjIwLDIyMCwyMjApXCJdLFsuMixcInJnYigyNDUsMTk1LDE1NylcIl0sWy40LFwicmdiKDI0NSwxNjAsMTA1KVwiXSxbMSxcInJnYigxNzgsMTAsMjgpXCJdXSxCbHVlczpbWzAsXCJyZ2IoNSwxMCwxNzIpXCJdLFsuMzUsXCJyZ2IoNDAsNjAsMTkwKVwiXSxbLjUsXCJyZ2IoNzAsMTAwLDI0NSlcIl0sWy42LFwicmdiKDkwLDEyMCwyNDUpXCJdLFsuNyxcInJnYigxMDYsMTM3LDI0NylcIl0sWzEsXCJyZ2IoMjIwLDIyMCwyMjApXCJdXSxQaWNuaWM6W1swLFwicmdiKDAsMCwyNTUpXCJdLFsuMSxcInJnYig1MSwxNTMsMjU1KVwiXSxbLjIsXCJyZ2IoMTAyLDIwNCwyNTUpXCJdLFsuMyxcInJnYigxNTMsMjA0LDI1NSlcIl0sWy40LFwicmdiKDIwNCwyMDQsMjU1KVwiXSxbLjUsXCJyZ2IoMjU1LDI1NSwyNTUpXCJdLFsuNixcInJnYigyNTUsMjA0LDI1NSlcIl0sWy43LFwicmdiKDI1NSwxNTMsMjU1KVwiXSxbLjgsXCJyZ2IoMjU1LDEwMiwyMDQpXCJdLFsuOSxcInJnYigyNTUsMTAyLDEwMilcIl0sWzEsXCJyZ2IoMjU1LDAsMClcIl1dLFJhaW5ib3c6W1swLFwicmdiKDE1MCwwLDkwKVwiXSxbLjEyNSxcInJnYigwLDAsMjAwKVwiXSxbLjI1LFwicmdiKDAsMjUsMjU1KVwiXSxbLjM3NSxcInJnYigwLDE1MiwyNTUpXCJdLFsuNSxcInJnYig0NCwyNTUsMTUwKVwiXSxbLjYyNSxcInJnYigxNTEsMjU1LDApXCJdLFsuNzUsXCJyZ2IoMjU1LDIzNCwwKVwiXSxbLjg3NSxcInJnYigyNTUsMTExLDApXCJdLFsxLFwicmdiKDI1NSwwLDApXCJdXSxQb3J0bGFuZDpbWzAsXCJyZ2IoMTIsNTEsMTMxKVwiXSxbLjI1LFwicmdiKDEwLDEzNiwxODYpXCJdLFsuNSxcInJnYigyNDIsMjExLDU2KVwiXSxbLjc1LFwicmdiKDI0MiwxNDMsNTYpXCJdLFsxLFwicmdiKDIxNywzMCwzMClcIl1dLEpldDpbWzAsXCJyZ2IoMCwwLDEzMSlcIl0sWy4xMjUsXCJyZ2IoMCw2MCwxNzApXCJdLFsuMzc1LFwicmdiKDUsMjU1LDI1NSlcIl0sWy42MjUsXCJyZ2IoMjU1LDI1NSwwKVwiXSxbLjg3NSxcInJnYigyNTAsMCwwKVwiXSxbMSxcInJnYigxMjgsMCwwKVwiXV0sSG90OltbMCxcInJnYigwLDAsMClcIl0sWy4zLFwicmdiKDIzMCwwLDApXCJdLFsuNixcInJnYigyNTUsMjEwLDApXCJdLFsxLFwicmdiKDI1NSwyNTUsMjU1KVwiXV0sQmxhY2tib2R5OltbMCxcInJnYigwLDAsMClcIl0sWy4yLFwicmdiKDIzMCwwLDApXCJdLFsuNCxcInJnYigyMzAsMjEwLDApXCJdLFsuNyxcInJnYigyNTUsMjU1LDI1NSlcIl0sWzEsXCJyZ2IoMTYwLDIwMCwyNTUpXCJdXSxFYXJ0aDpbWzAsXCJyZ2IoMCwwLDEzMClcIl0sWy4xLFwicmdiKDAsMTgwLDE4MClcIl0sWy4yLFwicmdiKDQwLDIxMCw0MClcIl0sWy40LFwicmdiKDIzMCwyMzAsNTApXCJdLFsuNixcInJnYigxMjAsNzAsMjApXCJdLFsxLFwicmdiKDI1NSwyNTUsMjU1KVwiXV0sRWxlY3RyaWM6W1swLFwicmdiKDAsMCwwKVwiXSxbLjE1LFwicmdiKDMwLDAsMTAwKVwiXSxbLjQsXCJyZ2IoMTIwLDAsMTAwKVwiXSxbLjYsXCJyZ2IoMTYwLDkwLDApXCJdLFsuOCxcInJnYigyMzAsMjAwLDApXCJdLFsxLFwicmdiKDI1NSwyNTAsMjIwKVwiXV0sVmlyaWRpczpbWzAsXCIjNDQwMTU0XCJdLFsuMDYyNzQ1MDk4MDM5MjE1NjksXCIjNDgxODZhXCJdLFsuMTI1NDkwMTk2MDc4NDMxMzcsXCIjNDcyZDdiXCJdLFsuMTg4MjM1Mjk0MTE3NjQ3MDYsXCIjNDI0MDg2XCJdLFsuMjUwOTgwMzkyMTU2ODYyNzQsXCIjM2I1MjhiXCJdLFsuMzEzNzI1NDkwMTk2MDc4NCxcIiMzMzYzOGRcIl0sWy4zNzY0NzA1ODgyMzUyOTQxLFwiIzJjNzI4ZVwiXSxbLjQzOTIxNTY4NjI3NDUwOTgsXCIjMjY4MjhlXCJdLFsuNTAxOTYwNzg0MzEzNzI1NSxcIiMyMTkxOGNcIl0sWy41NjQ3MDU4ODIzNTI5NDEyLFwiIzFmYTA4OFwiXSxbLjYyNzQ1MDk4MDM5MjE1NjksXCIjMjhhZTgwXCJdLFsuNjkwMTk2MDc4NDMxMzcyNSxcIiMzZmJjNzNcIl0sWy43NTI5NDExNzY0NzA1ODgyLFwiIzVlYzk2MlwiXSxbLjgxNTY4NjI3NDUwOTgwMzksXCIjODRkNDRiXCJdLFsuODc4NDMxMzcyNTQ5MDE5NixcIiNhZGRjMzBcIl0sWy45NDExNzY0NzA1ODgyMzUzLFwiI2Q4ZTIxOVwiXSxbMSxcIiNmZGU3MjVcIl1dLENpdmlkaXM6W1swLFwicmdiKDAsMzIsNzYpXCJdLFsuMDU4ODI0LFwicmdiKDAsNDIsMTAyKVwiXSxbLjExNzY0NyxcInJnYigwLDUyLDExMClcIl0sWy4xNzY0NzEsXCJyZ2IoMzksNjMsMTA4KVwiXSxbLjIzNTI5NCxcInJnYig2MCw3NCwxMDcpXCJdLFsuMjk0MTE4LFwicmdiKDc2LDg1LDEwNylcIl0sWy4zNTI5NDEsXCJyZ2IoOTEsOTUsMTA5KVwiXSxbLjQxMTc2NSxcInJnYigxMDQsMTA2LDExMilcIl0sWy40NzA1ODgsXCJyZ2IoMTE3LDExNywxMTcpXCJdLFsuNTI5NDEyLFwicmdiKDEzMSwxMjksMTIwKVwiXSxbLjU4ODIzNSxcInJnYigxNDYsMTQwLDEyMClcIl0sWy42NDcwNTksXCJyZ2IoMTYxLDE1MiwxMTgpXCJdLFsuNzA1ODgyLFwicmdiKDE3NiwxNjUsMTE0KVwiXSxbLjc2NDcwNixcInJnYigxOTIsMTc3LDEwOSlcIl0sWy44MjM1MjksXCJyZ2IoMjA5LDE5MSwxMDIpXCJdLFsuODgyMzUzLFwicmdiKDIyNSwyMDQsOTIpXCJdLFsuOTQxMTc2LFwicmdiKDI0MywyMTksNzkpXCJdLFsxLFwicmdiKDI1NSwyMzMsNjkpXCJdXX0sYT1pLlJkQnU7ZnVuY3Rpb24gbyh0KXt2YXIgZT0wO2lmKCFBcnJheS5pc0FycmF5KHQpfHx0Lmxlbmd0aDwyKXJldHVybiExO2lmKCF0WzBdfHwhdFt0Lmxlbmd0aC0xXSlyZXR1cm4hMTtpZigwIT0rdFswXVswXXx8MSE9K3RbdC5sZW5ndGgtMV1bMF0pcmV0dXJuITE7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBpPXRbcl07aWYoMiE9PWkubGVuZ3RofHwraVswXTxlfHwhbihpWzFdKS5pc1ZhbGlkKCkpcmV0dXJuITE7ZT0raVswXX1yZXR1cm4hMH1lLmV4cG9ydHM9e3NjYWxlczppLGRlZmF1bHRTY2FsZTphLGdldDpmdW5jdGlvbih0LGUpe2lmKGV8fChlPWEpLCF0KXJldHVybiBlO2Z1bmN0aW9uIHIoKXt0cnl7dD1pW3RdfHxKU09OLnBhcnNlKHQpfWNhdGNoKHIpe3Q9ZX19cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQmJihyKCksXCJzdHJpbmdcIj09dHlwZW9mIHQmJnIoKSksbyh0KT90OmV9LGlzVmFsaWQ6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PWlbdF18fG8odCl9fX0se3Rpbnljb2xvcjI6NTIyfV0sNTk0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9KHQtcikvKG4tciksbz1hK2UvKG4tcikscz0oYStvKS8yO3JldHVyblwibGVmdFwiPT09aXx8XCJib3R0b21cIj09PWk/YTpcImNlbnRlclwiPT09aXx8XCJtaWRkbGVcIj09PWk/czpcInJpZ2h0XCI9PT1pfHxcInRvcFwiPT09aT9vOmE8Mi8zLXM/YTpvPjQvMy1zP286c319LHt9XSw1OTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9W1tcInN3LXJlc2l6ZVwiLFwicy1yZXNpemVcIixcInNlLXJlc2l6ZVwiXSxbXCJ3LXJlc2l6ZVwiLFwibW92ZVwiLFwiZS1yZXNpemVcIl0sW1wibnctcmVzaXplXCIsXCJuLXJlc2l6ZVwiLFwibmUtcmVzaXplXCJdXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7cmV0dXJuIHQ9XCJsZWZ0XCI9PT1yPzA6XCJjZW50ZXJcIj09PXI/MTpcInJpZ2h0XCI9PT1yPzI6bi5jb25zdHJhaW4oTWF0aC5mbG9vcigzKnQpLDAsMiksZT1cImJvdHRvbVwiPT09YT8wOlwibWlkZGxlXCI9PT1hPzE6XCJ0b3BcIj09PWE/MjpuLmNvbnN0cmFpbihNYXRoLmZsb29yKDMqZSksMCwyKSxpW2VdW3RdfX0se1wiLi4vLi4vbGliXCI6NzAxfV0sNTk2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIm1vdXNlLWV2ZW50LW9mZnNldFwiKSxpPXQoXCJoYXMtaG92ZXJcIiksYT10KFwiaGFzLXBhc3NpdmUtZXZlbnRzXCIpLG89dChcIi4uLy4uL2xpYlwiKS5yZW1vdmVFbGVtZW50LHM9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHNcIiksbD10KFwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9uc1wiKSxjPWUuZXhwb3J0cz17fTtjLmFsaWduPXQoXCIuL2FsaWduXCIpLGMuZ2V0Q3Vyc29yPXQoXCIuL2N1cnNvclwiKTt2YXIgdT10KFwiLi91bmhvdmVyXCIpO2Z1bmN0aW9uIGgoKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3QuY2xhc3NOYW1lPVwiZHJhZ2NvdmVyXCI7dmFyIGU9dC5zdHlsZTtyZXR1cm4gZS5wb3NpdGlvbj1cImZpeGVkXCIsZS5sZWZ0PTAsZS5yaWdodD0wLGUudG9wPTAsZS5ib3R0b209MCxlLnpJbmRleD05OTk5OTk5OTksZS5iYWNrZ3JvdW5kPVwibm9uZVwiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCksdH1mdW5jdGlvbiBmKHQpe3JldHVybiBuKHQuY2hhbmdlZFRvdWNoZXM/dC5jaGFuZ2VkVG91Y2hlc1swXTp0LGRvY3VtZW50LmJvZHkpfWMudW5ob3Zlcj11LndyYXBwZWQsYy51bmhvdmVyUmF3PXUucmF3LGMuaW5pdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4sdSxwLGQsZyx2LG09dC5nZCx5PTEseD1sLkRCTENMSUNLREVMQVksYj10LmVsZW1lbnQ7bS5fbW91c2VEb3duVGltZXx8KG0uX21vdXNlRG93blRpbWU9MCksYi5zdHlsZS5wb2ludGVyRXZlbnRzPVwiYWxsXCIsYi5vbm1vdXNlZG93bj13LGE/KGIuX29udG91Y2hzdGFydCYmYi5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLGIuX29udG91Y2hzdGFydCksYi5fb250b3VjaHN0YXJ0PXcsYi5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLHcse3Bhc3NpdmU6ITF9KSk6Yi5vbnRvdWNoc3RhcnQ9dzt2YXIgXz10LmNsYW1wRm58fGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gTWF0aC5hYnModCk8ciYmKHQ9MCksTWF0aC5hYnMoZSk8ciYmKGU9MCksW3QsZV19O2Z1bmN0aW9uIHcoYSl7bS5fZHJhZ2dlZD0hMSxtLl9kcmFnZ2luZz0hMDt2YXIgbz1mKGEpO2U9b1swXSxyPW9bMV0sZz1hLnRhcmdldCxkPWEsdj0yPT09YS5idXR0b25zfHxhLmN0cmxLZXksXCJ1bmRlZmluZWRcIj09dHlwZW9mIGEuY2xpZW50WCYmXCJ1bmRlZmluZWRcIj09dHlwZW9mIGEuY2xpZW50WSYmKGEuY2xpZW50WD1lLGEuY2xpZW50WT1yKSwobj0obmV3IERhdGUpLmdldFRpbWUoKSktbS5fbW91c2VEb3duVGltZTx4P3krPTE6KHk9MSxtLl9tb3VzZURvd25UaW1lPW4pLHQucHJlcEZuJiZ0LnByZXBGbihhLGUsciksaSYmIXY/KHA9aCgpKS5zdHlsZS5jdXJzb3I9d2luZG93LmdldENvbXB1dGVkU3R5bGUoYikuY3Vyc29yOml8fChwPWRvY3VtZW50LHU9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5jdXJzb3IsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmN1cnNvcj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShiKS5jdXJzb3IpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsQSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsQSksITEhPT10LmRyYWdtb2RlJiYoYS5wcmV2ZW50RGVmYXVsdCgpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixrKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsaykpfWZ1bmN0aW9uIGsobil7bi5wcmV2ZW50RGVmYXVsdCgpO3ZhciBpPWYobiksYT10Lm1pbkRyYWd8fHMuTUlORFJBRyxvPV8oaVswXS1lLGlbMV0tcixhKSxsPW9bMF0sdT1vWzFdOyhsfHx1KSYmKG0uX2RyYWdnZWQ9ITAsYy51bmhvdmVyKG0pKSxtLl9kcmFnZ2VkJiZ0Lm1vdmVGbiYmIXYmJihtLl9kcmFnZGF0YT17ZWxlbWVudDpiLGR4OmwsZHk6dX0sdC5tb3ZlRm4obCx1KSl9ZnVuY3Rpb24gQShlKXtpZihkZWxldGUgbS5fZHJhZ2RhdGEsITEhPT10LmRyYWdtb2RlJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixrKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsaykpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsQSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsQSksaT9vKHApOnUmJihwLmRvY3VtZW50RWxlbWVudC5zdHlsZS5jdXJzb3I9dSx1PW51bGwpLG0uX2RyYWdnaW5nKXtpZihtLl9kcmFnZ2luZz0hMSwobmV3IERhdGUpLmdldFRpbWUoKS1tLl9tb3VzZURvd25UaW1lPngmJih5PU1hdGgubWF4KHktMSwxKSksbS5fZHJhZ2dlZCl0LmRvbmVGbiYmdC5kb25lRm4oKTtlbHNlIGlmKHQuY2xpY2tGbiYmdC5jbGlja0ZuKHksZCksIXYpe3ZhciByO3RyeXtyPW5ldyBNb3VzZUV2ZW50KFwiY2xpY2tcIixlKX1jYXRjaCh0KXt2YXIgbj1mKGUpOyhyPWRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiTW91c2VFdmVudHNcIikpLmluaXRNb3VzZUV2ZW50KFwiY2xpY2tcIixlLmJ1YmJsZXMsZS5jYW5jZWxhYmxlLGUudmlldyxlLmRldGFpbCxlLnNjcmVlblgsZS5zY3JlZW5ZLG5bMF0sblsxXSxlLmN0cmxLZXksZS5hbHRLZXksZS5zaGlmdEtleSxlLm1ldGFLZXksZS5idXR0b24sZS5yZWxhdGVkVGFyZ2V0KX1nLmRpc3BhdGNoRXZlbnQocil9bS5fZHJhZ2dpbmc9ITEsbS5fZHJhZ2dlZD0hMX1lbHNlIG0uX2RyYWdnZWQ9ITF9fSxjLmNvdmVyU2xpcD1ofSx7XCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zXCI6Njc3LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50c1wiOjc1NSxcIi4vYWxpZ25cIjo1OTQsXCIuL2N1cnNvclwiOjU5NSxcIi4vdW5ob3ZlclwiOjU5NyxcImhhcy1ob3ZlclwiOjQwMyxcImhhcy1wYXNzaXZlLWV2ZW50c1wiOjQwNCxcIm1vdXNlLWV2ZW50LW9mZnNldFwiOjQyOX1dLDU5NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWIvZXZlbnRzXCIpLGk9dChcIi4uLy4uL2xpYi90aHJvdHRsZVwiKSxhPXQoXCIuLi8uLi9saWIvZ2V0X2dyYXBoX2RpdlwiKSxvPXQoXCIuLi9meC9jb25zdGFudHNcIikscz1lLmV4cG9ydHM9e307cy53cmFwcGVkPWZ1bmN0aW9uKHQsZSxyKXsodD1hKHQpKS5fZnVsbExheW91dCYmaS5jbGVhcih0Ll9mdWxsTGF5b3V0Ll91aWQrby5IT1ZFUklEKSxzLnJhdyh0LGUscil9LHMucmF3PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxpPXQuX2hvdmVyZGF0YTtlfHwoZT17fSksZS50YXJnZXQmJiExPT09bi50cmlnZ2VySGFuZGxlcih0LFwicGxvdGx5X2JlZm9yZWhvdmVyXCIsZSl8fChyLl9ob3ZlcmxheWVyLnNlbGVjdEFsbChcImdcIikucmVtb3ZlKCksci5faG92ZXJsYXllci5zZWxlY3RBbGwoXCJsaW5lXCIpLnJlbW92ZSgpLHIuX2hvdmVybGF5ZXIuc2VsZWN0QWxsKFwiY2lyY2xlXCIpLnJlbW92ZSgpLHQuX2hvdmVyZGF0YT12b2lkIDAsZS50YXJnZXQmJmkmJnQuZW1pdChcInBsb3RseV91bmhvdmVyXCIse2V2ZW50OmUscG9pbnRzOml9KSl9fSx7XCIuLi8uLi9saWIvZXZlbnRzXCI6NjkwLFwiLi4vLi4vbGliL2dldF9ncmFwaF9kaXZcIjo2OTcsXCIuLi8uLi9saWIvdGhyb3R0bGVcIjo3MjYsXCIuLi9meC9jb25zdGFudHNcIjo2MTF9XSw1OTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLmRhc2g9e3ZhbFR5cGU6XCJzdHJpbmdcIix2YWx1ZXM6W1wic29saWRcIixcImRvdFwiLFwiZGFzaFwiLFwibG9uZ2Rhc2hcIixcImRhc2hkb3RcIixcImxvbmdkYXNoZG90XCJdLGRmbHQ6XCJzb2xpZFwiLGVkaXRUeXBlOlwic3R5bGVcIn19LHt9XSw1OTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiZmFzdC1pc251bWVyaWNcIiksYT10KFwidGlueWNvbG9yMlwiKSxvPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxzPXQoXCIuLi9jb2xvclwiKSxsPXQoXCIuLi9jb2xvcnNjYWxlXCIpLGM9dChcIi4uLy4uL2xpYlwiKSx1PXQoXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIiksaD10KFwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIiksZj10KFwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiKS5MSU5FX1NQQUNJTkcscD10KFwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9uc1wiKS5ERVNFTEVDVERJTSxkPXQoXCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlc1wiKSxnPXQoXCIuLi8uLi90cmFjZXMvc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmNcIiksdj1lLmV4cG9ydHM9e307di5mb250PWZ1bmN0aW9uKHQsZSxyLG4pe2MuaXNQbGFpbk9iamVjdChlKSYmKG49ZS5jb2xvcixyPWUuc2l6ZSxlPWUuZmFtaWx5KSxlJiZ0LnN0eWxlKFwiZm9udC1mYW1pbHlcIixlKSxyKzEmJnQuc3R5bGUoXCJmb250LXNpemVcIixyK1wicHhcIiksbiYmdC5jYWxsKHMuZmlsbCxuKX0sdi5zZXRQb3NpdGlvbj1mdW5jdGlvbih0LGUscil7dC5hdHRyKFwieFwiLGUpLmF0dHIoXCJ5XCIscil9LHYuc2V0U2l6ZT1mdW5jdGlvbih0LGUscil7dC5hdHRyKFwid2lkdGhcIixlKS5hdHRyKFwiaGVpZ2h0XCIscil9LHYuc2V0UmVjdD1mdW5jdGlvbih0LGUscixuLGkpe3QuY2FsbCh2LnNldFBvc2l0aW9uLGUscikuY2FsbCh2LnNldFNpemUsbixpKX0sdi50cmFuc2xhdGVQb2ludD1mdW5jdGlvbih0LGUscixuKXt2YXIgYT1yLmMycCh0LngpLG89bi5jMnAodC55KTtyZXR1cm4hIShpKGEpJiZpKG8pJiZlLm5vZGUoKSkmJihcInRleHRcIj09PWUubm9kZSgpLm5vZGVOYW1lP2UuYXR0cihcInhcIixhKS5hdHRyKFwieVwiLG8pOmUuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK2ErXCIsXCIrbytcIilcIiksITApfSx2LnRyYW5zbGF0ZVBvaW50cz1mdW5jdGlvbih0LGUscil7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBpPW4uc2VsZWN0KHRoaXMpO3YudHJhbnNsYXRlUG9pbnQodCxpLGUscil9KX0sdi5oaWRlT3V0c2lkZVJhbmdlUG9pbnQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2UuYXR0cihcImRpc3BsYXlcIixyLmlzUHRXaXRoaW5SYW5nZSh0LGkpJiZuLmlzUHRXaXRoaW5SYW5nZSh0LGEpP251bGw6XCJub25lXCIpfSx2LmhpZGVPdXRzaWRlUmFuZ2VQb2ludHM9ZnVuY3Rpb24odCxlKXtpZihlLl9oYXNDbGlwT25BeGlzRmFsc2Upe3ZhciByPWUueGF4aXMsaT1lLnlheGlzO3QuZWFjaChmdW5jdGlvbihlKXt2YXIgYT1lWzBdLnRyYWNlLG89YS54Y2FsZW5kYXIscz1hLnljYWxlbmRhcixsPVwiYmFyXCI9PT1hLnR5cGU/XCIuYmFydGV4dFwiOlwid2F0ZXJmYWxsXCI9PT1hLnR5cGU/XCIuYmFydGV4dCwubGluZVwiOlwiLnBvaW50LC50ZXh0cG9pbnRcIjt0LnNlbGVjdEFsbChsKS5lYWNoKGZ1bmN0aW9uKHQpe3YuaGlkZU91dHNpZGVSYW5nZVBvaW50KHQsbi5zZWxlY3QodGhpcykscixpLG8scyl9KX0pfX0sdi5jcmlzcFJvdW5kPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSYmaShlKT90Ll9jb250ZXh0LnN0YXRpY1Bsb3Q/ZTplPDE/MTpNYXRoLnJvdW5kKGUpOnJ8fDB9LHYuc2luZ2xlTGluZVN0eWxlPWZ1bmN0aW9uKHQsZSxyLG4saSl7ZS5zdHlsZShcImZpbGxcIixcIm5vbmVcIik7dmFyIGE9KCgodHx8W10pWzBdfHx7fSkudHJhY2V8fHt9KS5saW5lfHx7fSxvPXJ8fGEud2lkdGh8fDAsbD1pfHxhLmRhc2h8fFwiXCI7cy5zdHJva2UoZSxufHxhLmNvbG9yKSx2LmRhc2hMaW5lKGUsbCxvKX0sdi5saW5lR3JvdXBTdHlsZT1mdW5jdGlvbih0LGUscixpKXt0LnN0eWxlKFwiZmlsbFwiLFwibm9uZVwiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBhPSgoKHR8fFtdKVswXXx8e30pLnRyYWNlfHx7fSkubGluZXx8e30sbz1lfHxhLndpZHRofHwwLGw9aXx8YS5kYXNofHxcIlwiO24uc2VsZWN0KHRoaXMpLmNhbGwocy5zdHJva2Uscnx8YS5jb2xvcikuY2FsbCh2LmRhc2hMaW5lLGwsbyl9KX0sdi5kYXNoTGluZT1mdW5jdGlvbih0LGUscil7cj0rcnx8MCxlPXYuZGFzaFN0eWxlKGUsciksdC5zdHlsZSh7XCJzdHJva2UtZGFzaGFycmF5XCI6ZSxcInN0cm9rZS13aWR0aFwiOnIrXCJweFwifSl9LHYuZGFzaFN0eWxlPWZ1bmN0aW9uKHQsZSl7ZT0rZXx8MTt2YXIgcj1NYXRoLm1heChlLDMpO3JldHVyblwic29saWRcIj09PXQ/dD1cIlwiOlwiZG90XCI9PT10P3Q9citcInB4LFwiK3IrXCJweFwiOlwiZGFzaFwiPT09dD90PTMqcitcInB4LFwiKzMqcitcInB4XCI6XCJsb25nZGFzaFwiPT09dD90PTUqcitcInB4LFwiKzUqcitcInB4XCI6XCJkYXNoZG90XCI9PT10P3Q9MypyK1wicHgsXCIrcitcInB4LFwiK3IrXCJweCxcIityK1wicHhcIjpcImxvbmdkYXNoZG90XCI9PT10JiYodD01KnIrXCJweCxcIisyKnIrXCJweCxcIityK1wicHgsXCIrMipyK1wicHhcIiksdH0sdi5zaW5nbGVGaWxsU3R5bGU9ZnVuY3Rpb24odCl7dmFyIGU9KCgobi5zZWxlY3QodC5ub2RlKCkpLmRhdGEoKVswXXx8W10pWzBdfHx7fSkudHJhY2V8fHt9KS5maWxsY29sb3I7ZSYmdC5jYWxsKHMuZmlsbCxlKX0sdi5maWxsR3JvdXBTdHlsZT1mdW5jdGlvbih0KXt0LnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsMCkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKTt0WzBdLnRyYWNlJiZlLmNhbGwocy5maWxsLHRbMF0udHJhY2UuZmlsbGNvbG9yKX0pfTt2YXIgbT10KFwiLi9zeW1ib2xfZGVmc1wiKTt2LnN5bWJvbE5hbWVzPVtdLHYuc3ltYm9sRnVuY3M9W10sdi5zeW1ib2xOZWVkTGluZXM9e30sdi5zeW1ib2xOb0RvdD17fSx2LnN5bWJvbE5vRmlsbD17fSx2LnN5bWJvbExpc3Q9W10sT2JqZWN0LmtleXMobSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1tW3RdO3Yuc3ltYm9sTGlzdD12LnN5bWJvbExpc3QuY29uY2F0KFtlLm4sdCxlLm4rMTAwLHQrXCItb3BlblwiXSksdi5zeW1ib2xOYW1lc1tlLm5dPXQsdi5zeW1ib2xGdW5jc1tlLm5dPWUuZixlLm5lZWRMaW5lJiYodi5zeW1ib2xOZWVkTGluZXNbZS5uXT0hMCksZS5ub0RvdD92LnN5bWJvbE5vRG90W2Uubl09ITA6di5zeW1ib2xMaXN0PXYuc3ltYm9sTGlzdC5jb25jYXQoW2UubisyMDAsdCtcIi1kb3RcIixlLm4rMzAwLHQrXCItb3Blbi1kb3RcIl0pLGUubm9GaWxsJiYodi5zeW1ib2xOb0ZpbGxbZS5uXT0hMCl9KTt2YXIgeT12LnN5bWJvbE5hbWVzLmxlbmd0aCx4PVwiTTAsMC41TDAuNSwwTDAsLTAuNUwtMC41LDBaXCI7ZnVuY3Rpb24gYih0LGUpe3ZhciByPXQlMTAwO3JldHVybiB2LnN5bWJvbEZ1bmNzW3JdKGUpKyh0Pj0yMDA/eDpcIlwiKX12LnN5bWJvbE51bWJlcj1mdW5jdGlvbih0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7dmFyIGU9MDt0LmluZGV4T2YoXCItb3BlblwiKT4wJiYoZT0xMDAsdD10LnJlcGxhY2UoXCItb3BlblwiLFwiXCIpKSx0LmluZGV4T2YoXCItZG90XCIpPjAmJihlKz0yMDAsdD10LnJlcGxhY2UoXCItZG90XCIsXCJcIikpLCh0PXYuc3ltYm9sTmFtZXMuaW5kZXhPZih0KSk+PTAmJih0Kz1lKX1yZXR1cm4gdCUxMDA+PXl8fHQ+PTQwMD8wOk1hdGguZmxvb3IoTWF0aC5tYXgodCwwKSl9O3ZhciBfPXt4MToxLHgyOjAseTE6MCx5MjowfSx3PXt4MTowLHgyOjAseTE6MSx5MjowfSxrPW4uZm9ybWF0KFwifi4xZlwiKSxBPXtyYWRpYWw6e25vZGU6XCJyYWRpYWxHcmFkaWVudFwifSxyYWRpYWxyZXZlcnNlZDp7bm9kZTpcInJhZGlhbEdyYWRpZW50XCIscmV2ZXJzZWQ6ITB9LGhvcml6b250YWw6e25vZGU6XCJsaW5lYXJHcmFkaWVudFwiLGF0dHJzOl99LGhvcml6b250YWxyZXZlcnNlZDp7bm9kZTpcImxpbmVhckdyYWRpZW50XCIsYXR0cnM6XyxyZXZlcnNlZDohMH0sdmVydGljYWw6e25vZGU6XCJsaW5lYXJHcmFkaWVudFwiLGF0dHJzOnd9LHZlcnRpY2FscmV2ZXJzZWQ6e25vZGU6XCJsaW5lYXJHcmFkaWVudFwiLGF0dHJzOncscmV2ZXJzZWQ6ITB9fTt2LmdyYWRpZW50PWZ1bmN0aW9uKHQsZSxyLGksbyxsKXtmb3IodmFyIHU9by5sZW5ndGgsaD1BW2ldLGY9bmV3IEFycmF5KHUpLHA9MDtwPHU7cCsrKWgucmV2ZXJzZWQ/Zlt1LTEtcF09W2soMTAwKigxLW9bcF1bMF0pKSxvW3BdWzFdXTpmW3BdPVtrKDEwMCpvW3BdWzBdKSxvW3BdWzFdXTt2YXIgZD1cImdcIitlLl9mdWxsTGF5b3V0Ll91aWQrXCItXCIrcixnPWUuX2Z1bGxMYXlvdXQuX2RlZnMuc2VsZWN0KFwiLmdyYWRpZW50c1wiKS5zZWxlY3RBbGwoXCIjXCIrZCkuZGF0YShbaStmLmpvaW4oXCI7XCIpXSxjLmlkZW50aXR5KTtnLmV4aXQoKS5yZW1vdmUoKSxnLmVudGVyKCkuYXBwZW5kKGgubm9kZSkuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO2guYXR0cnMmJnQuYXR0cihoLmF0dHJzKSx0LmF0dHIoXCJpZFwiLGQpO3ZhciBlPXQuc2VsZWN0QWxsKFwic3RvcFwiKS5kYXRhKGYpO2UuZXhpdCgpLnJlbW92ZSgpLGUuZW50ZXIoKS5hcHBlbmQoXCJzdG9wXCIpLGUuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1hKHRbMV0pO24uc2VsZWN0KHRoaXMpLmF0dHIoe29mZnNldDp0WzBdK1wiJVwiLFwic3RvcC1jb2xvclwiOnMudGlueVJHQihlKSxcInN0b3Atb3BhY2l0eVwiOmUuZ2V0QWxwaGEoKX0pfSl9KSx0LnN0eWxlKGwsRChkLGUpKS5zdHlsZShsK1wiLW9wYWNpdHlcIixudWxsKX0sdi5pbml0R3JhZGllbnRzPWZ1bmN0aW9uKHQpe2MuZW5zdXJlU2luZ2xlKHQuX2Z1bGxMYXlvdXQuX2RlZnMsXCJnXCIsXCJncmFkaWVudHNcIikuc2VsZWN0QWxsKFwibGluZWFyR3JhZGllbnQscmFkaWFsR3JhZGllbnRcIikucmVtb3ZlKCl9LHYucG9pbnRTdHlsZT1mdW5jdGlvbih0LGUscil7aWYodC5zaXplKCkpe3ZhciBpPXYubWFrZVBvaW50U3R5bGVGbnMoZSk7dC5lYWNoKGZ1bmN0aW9uKHQpe3Yuc2luZ2xlUG9pbnRTdHlsZSh0LG4uc2VsZWN0KHRoaXMpLGUsaSxyKX0pfX0sdi5zaW5nbGVQb2ludFN0eWxlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9ci5tYXJrZXIsbz1hLmxpbmU7aWYoZS5zdHlsZShcIm9wYWNpdHlcIixuLnNlbGVjdGVkT3BhY2l0eUZuP24uc2VsZWN0ZWRPcGFjaXR5Rm4odCk6dm9pZCAwPT09dC5tbz9hLm9wYWNpdHk6dC5tbyksbi5tczJtcmMpe3ZhciBsO2w9XCJ2YXJpb3VzXCI9PT10Lm1zfHxcInZhcmlvdXNcIj09PWEuc2l6ZT8zOm4ubXMybXJjKHQubXMpLHQubXJjPWwsbi5zZWxlY3RlZFNpemVGbiYmKGw9dC5tcmM9bi5zZWxlY3RlZFNpemVGbih0KSk7dmFyIHU9di5zeW1ib2xOdW1iZXIodC5teHx8YS5zeW1ib2wpfHwwO3Qub209dSUyMDA+PTEwMCxlLmF0dHIoXCJkXCIsYih1LGwpKX12YXIgaCxmLHAsZD0hMTtpZih0LnNvKXA9by5vdXRsaWVyd2lkdGgsZj1vLm91dGxpZXJjb2xvcixoPWEub3V0bGllcmNvbG9yO2Vsc2V7dmFyIGc9KG98fHt9KS53aWR0aDtwPSh0Lm1sdysxfHxnKzF8fCh0LnRyYWNlPyh0LnRyYWNlLm1hcmtlci5saW5lfHx7fSkud2lkdGg6MCkrMSktMXx8MCxmPVwibWxjXCJpbiB0P3QubWxjYz1uLmxpbmVTY2FsZSh0Lm1sYyk6Yy5pc0FycmF5T3JUeXBlZEFycmF5KG8uY29sb3IpP3MuZGVmYXVsdExpbmU6by5jb2xvcixjLmlzQXJyYXlPclR5cGVkQXJyYXkoYS5jb2xvcikmJihoPXMuZGVmYXVsdExpbmUsZD0hMCksaD1cIm1jXCJpbiB0P3QubWNjPW4ubWFya2VyU2NhbGUodC5tYyk6YS5jb2xvcnx8XCJyZ2JhKDAsMCwwLDApXCIsbi5zZWxlY3RlZENvbG9yRm4mJihoPW4uc2VsZWN0ZWRDb2xvckZuKHQpKX1pZih0Lm9tKWUuY2FsbChzLnN0cm9rZSxoKS5zdHlsZSh7XCJzdHJva2Utd2lkdGhcIjoocHx8MSkrXCJweFwiLGZpbGw6XCJub25lXCJ9KTtlbHNle2Uuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixwK1wicHhcIik7dmFyIG09YS5ncmFkaWVudCx5PXQubWd0O2lmKHk/ZD0hMDp5PW0mJm0udHlwZSxBcnJheS5pc0FycmF5KHkpJiYoeT15WzBdLEFbeV18fCh5PTApKSx5JiZcIm5vbmVcIiE9PXkpe3ZhciB4PXQubWdjO3g/ZD0hMDp4PW0uY29sb3I7dmFyIF89ci51aWQ7ZCYmKF8rPVwiLVwiK3QuaSksdi5ncmFkaWVudChlLGksXyx5LFtbMCx4XSxbMSxoXV0sXCJmaWxsXCIpfWVsc2Ugcy5maWxsKGUsaCk7cCYmcy5zdHJva2UoZSxmKX19LHYubWFrZVBvaW50U3R5bGVGbnM9ZnVuY3Rpb24odCl7dmFyIGU9e30scj10Lm1hcmtlcjtyZXR1cm4gZS5tYXJrZXJTY2FsZT12LnRyeUNvbG9yc2NhbGUocixcIlwiKSxlLmxpbmVTY2FsZT12LnRyeUNvbG9yc2NhbGUocixcImxpbmVcIiksby50cmFjZUlzKHQsXCJzeW1ib2xzXCIpJiYoZS5tczJtcmM9ZC5pc0J1YmJsZSh0KT9nKHQpOmZ1bmN0aW9uKCl7cmV0dXJuKHIuc2l6ZXx8NikvMn0pLHQuc2VsZWN0ZWRwb2ludHMmJmMuZXh0ZW5kRmxhdChlLHYubWFrZVNlbGVjdGVkUG9pbnRTdHlsZUZucyh0KSksZX0sdi5tYWtlU2VsZWN0ZWRQb2ludFN0eWxlRm5zPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LHI9dC5zZWxlY3RlZHx8e30sbj10LnVuc2VsZWN0ZWR8fHt9LGk9dC5tYXJrZXJ8fHt9LGE9ci5tYXJrZXJ8fHt9LHM9bi5tYXJrZXJ8fHt9LGw9aS5vcGFjaXR5LHU9YS5vcGFjaXR5LGg9cy5vcGFjaXR5LGY9dm9pZCAwIT09dSxkPXZvaWQgMCE9PWg7KGMuaXNBcnJheU9yVHlwZWRBcnJheShsKXx8Znx8ZCkmJihlLnNlbGVjdGVkT3BhY2l0eUZuPWZ1bmN0aW9uKHQpe3ZhciBlPXZvaWQgMD09PXQubW8/aS5vcGFjaXR5OnQubW87cmV0dXJuIHQuc2VsZWN0ZWQ/Zj91OmU6ZD9oOnAqZX0pO3ZhciBnPWkuY29sb3Isdj1hLmNvbG9yLG09cy5jb2xvcjsodnx8bSkmJihlLnNlbGVjdGVkQ29sb3JGbj1mdW5jdGlvbih0KXt2YXIgZT10Lm1jY3x8ZztyZXR1cm4gdC5zZWxlY3RlZD92fHxlOm18fGV9KTt2YXIgeT1pLnNpemUseD1hLnNpemUsYj1zLnNpemUsXz12b2lkIDAhPT14LHc9dm9pZCAwIT09YjtyZXR1cm4gby50cmFjZUlzKHQsXCJzeW1ib2xzXCIpJiYoX3x8dykmJihlLnNlbGVjdGVkU2l6ZUZuPWZ1bmN0aW9uKHQpe3ZhciBlPXQubXJjfHx5LzI7cmV0dXJuIHQuc2VsZWN0ZWQ/Xz94LzI6ZTp3P2IvMjplfSksZX0sdi5tYWtlU2VsZWN0ZWRUZXh0U3R5bGVGbnM9ZnVuY3Rpb24odCl7dmFyIGU9e30scj10LnNlbGVjdGVkfHx7fSxuPXQudW5zZWxlY3RlZHx8e30saT10LnRleHRmb250fHx7fSxhPXIudGV4dGZvbnR8fHt9LG89bi50ZXh0Zm9udHx8e30sbD1pLmNvbG9yLGM9YS5jb2xvcix1PW8uY29sb3I7cmV0dXJuIGUuc2VsZWN0ZWRUZXh0Q29sb3JGbj1mdW5jdGlvbih0KXt2YXIgZT10LnRjfHxsO3JldHVybiB0LnNlbGVjdGVkP2N8fGU6dXx8KGM/ZTpzLmFkZE9wYWNpdHkoZSxwKSl9LGV9LHYuc2VsZWN0ZWRQb2ludFN0eWxlPWZ1bmN0aW9uKHQsZSl7aWYodC5zaXplKCkmJmUuc2VsZWN0ZWRwb2ludHMpe3ZhciByPXYubWFrZVNlbGVjdGVkUG9pbnRTdHlsZUZucyhlKSxpPWUubWFya2VyfHx7fSxhPVtdO3Iuc2VsZWN0ZWRPcGFjaXR5Rm4mJmEucHVzaChmdW5jdGlvbih0LGUpe3Quc3R5bGUoXCJvcGFjaXR5XCIsci5zZWxlY3RlZE9wYWNpdHlGbihlKSl9KSxyLnNlbGVjdGVkQ29sb3JGbiYmYS5wdXNoKGZ1bmN0aW9uKHQsZSl7cy5maWxsKHQsci5zZWxlY3RlZENvbG9yRm4oZSkpfSksci5zZWxlY3RlZFNpemVGbiYmYS5wdXNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5teHx8aS5zeW1ib2x8fDAsYT1yLnNlbGVjdGVkU2l6ZUZuKGUpO3QuYXR0cihcImRcIixiKHYuc3ltYm9sTnVtYmVyKG4pLGEpKSxlLm1yYzI9YX0pLGEubGVuZ3RoJiZ0LmVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciBlPW4uc2VsZWN0KHRoaXMpLHI9MDtyPGEubGVuZ3RoO3IrKylhW3JdKGUsdCl9KX19LHYudHJ5Q29sb3JzY2FsZT1mdW5jdGlvbih0LGUpe3ZhciByPWU/Yy5uZXN0ZWRQcm9wZXJ0eSh0LGUpLmdldCgpOnQ7aWYocil7dmFyIG49ci5jb2xvcnNjYWxlLGk9ci5jb2xvcjtpZihuJiZjLmlzQXJyYXlPclR5cGVkQXJyYXkoaSkpcmV0dXJuIGwubWFrZUNvbG9yU2NhbGVGdW5jKGwuZXh0cmFjdFNjYWxlKHIse2NMZXR0ZXI6XCJjXCJ9KSl9cmV0dXJuIGMuaWRlbnRpdHl9O3ZhciBUPXtzdGFydDoxLGVuZDotMSxtaWRkbGU6MCxib3R0b206MSx0b3A6LTF9O2Z1bmN0aW9uIE0odCxlLHIsaSl7dmFyIGE9bi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSksbz0tMSE9PWUuaW5kZXhPZihcInRvcFwiKT9cInRvcFwiOi0xIT09ZS5pbmRleE9mKFwiYm90dG9tXCIpP1wiYm90dG9tXCI6XCJtaWRkbGVcIixzPS0xIT09ZS5pbmRleE9mKFwibGVmdFwiKT9cImVuZFwiOi0xIT09ZS5pbmRleE9mKFwicmlnaHRcIik/XCJzdGFydFwiOlwibWlkZGxlXCIsbD1pP2kvLjgrMTowLGM9KHUubGluZUNvdW50KHQpLTEpKmYrMSxoPVRbc10qbCxwPS43NSpyK1Rbb10qbCsoVFtvXS0xKSpjKnIvMjt0LmF0dHIoXCJ0ZXh0LWFuY2hvclwiLHMpLGEuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK2grXCIsXCIrcCtcIilcIil9ZnVuY3Rpb24gUyh0LGUpe3ZhciByPXQudHN8fGUudGV4dGZvbnQuc2l6ZTtyZXR1cm4gaShyKSYmcj4wP3I6MH12LnRleHRQb2ludFN0eWxlPWZ1bmN0aW9uKHQsZSxyKXtpZih0LnNpemUoKSl7dmFyIGk7aWYoZS5zZWxlY3RlZHBvaW50cyl7dmFyIGE9di5tYWtlU2VsZWN0ZWRUZXh0U3R5bGVGbnMoZSk7aT1hLnNlbGVjdGVkVGV4dENvbG9yRm59dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBhPW4uc2VsZWN0KHRoaXMpLG89Yy5leHRyYWN0T3B0aW9uKHQsZSxcInR4XCIsXCJ0ZXh0XCIpO2lmKG98fDA9PT1vKXt2YXIgcz10LnRwfHxlLnRleHRwb3NpdGlvbixsPVModCxlKSxoPWk/aSh0KTp0LnRjfHxlLnRleHRmb250LmNvbG9yO2EuY2FsbCh2LmZvbnQsdC50Znx8ZS50ZXh0Zm9udC5mYW1pbHksbCxoKS50ZXh0KG8pLmNhbGwodS5jb252ZXJ0VG9Uc3BhbnMscikuY2FsbChNLHMsbCx0Lm1yYyl9ZWxzZSBhLnJlbW92ZSgpfSl9fSx2LnNlbGVjdGVkVGV4dFN0eWxlPWZ1bmN0aW9uKHQsZSl7aWYodC5zaXplKCkmJmUuc2VsZWN0ZWRwb2ludHMpe3ZhciByPXYubWFrZVNlbGVjdGVkVGV4dFN0eWxlRm5zKGUpO3QuZWFjaChmdW5jdGlvbih0KXt2YXIgaT1uLnNlbGVjdCh0aGlzKSxhPXIuc2VsZWN0ZWRUZXh0Q29sb3JGbih0KSxvPXQudHB8fGUudGV4dHBvc2l0aW9uLGw9Uyh0LGUpO3MuZmlsbChpLGEpLE0oaSxvLGwsdC5tcmMyfHx0Lm1yYyl9KX19O3ZhciBFPS41O2Z1bmN0aW9uIEModCxlLHIsaSl7dmFyIGE9dFswXS1lWzBdLG89dFsxXS1lWzFdLHM9clswXS1lWzBdLGw9clsxXS1lWzFdLGM9TWF0aC5wb3coYSphK28qbyxFLzIpLHU9TWF0aC5wb3cocypzK2wqbCxFLzIpLGg9KHUqdSphLWMqYypzKSppLGY9KHUqdSpvLWMqYypsKSppLHA9Myp1KihjK3UpLGQ9MypjKihjK3UpO3JldHVybltbbi5yb3VuZChlWzBdKyhwJiZoL3ApLDIpLG4ucm91bmQoZVsxXSsocCYmZi9wKSwyKV0sW24ucm91bmQoZVswXS0oZCYmaC9kKSwyKSxuLnJvdW5kKGVbMV0tKGQmJmYvZCksMildXX12LnNtb290aG9wZW49ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwzKXJldHVyblwiTVwiK3Quam9pbihcIkxcIik7dmFyIHIsbj1cIk1cIit0WzBdLGk9W107Zm9yKHI9MTtyPHQubGVuZ3RoLTE7cisrKWkucHVzaChDKHRbci0xXSx0W3JdLHRbcisxXSxlKSk7Zm9yKG4rPVwiUVwiK2lbMF1bMF0rXCIgXCIrdFsxXSxyPTI7cjx0Lmxlbmd0aC0xO3IrKyluKz1cIkNcIitpW3ItMl1bMV0rXCIgXCIraVtyLTFdWzBdK1wiIFwiK3Rbcl07cmV0dXJuIG4rPVwiUVwiK2lbdC5sZW5ndGgtM11bMV0rXCIgXCIrdFt0Lmxlbmd0aC0xXX0sdi5zbW9vdGhjbG9zZWQ9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwzKXJldHVyblwiTVwiK3Quam9pbihcIkxcIikrXCJaXCI7dmFyIHIsbj1cIk1cIit0WzBdLGk9dC5sZW5ndGgtMSxhPVtDKHRbaV0sdFswXSx0WzFdLGUpXTtmb3Iocj0xO3I8aTtyKyspYS5wdXNoKEModFtyLTFdLHRbcl0sdFtyKzFdLGUpKTtmb3IoYS5wdXNoKEModFtpLTFdLHRbaV0sdFswXSxlKSkscj0xO3I8PWk7cisrKW4rPVwiQ1wiK2Fbci0xXVsxXStcIiBcIithW3JdWzBdK1wiIFwiK3Rbcl07cmV0dXJuIG4rPVwiQ1wiK2FbaV1bMV0rXCIgXCIrYVswXVswXStcIiBcIit0WzBdK1wiWlwifTt2YXIgTD17aHY6ZnVuY3Rpb24odCxlKXtyZXR1cm5cIkhcIituLnJvdW5kKGVbMF0sMikrXCJWXCIrbi5yb3VuZChlWzFdLDIpfSx2aDpmdW5jdGlvbih0LGUpe3JldHVyblwiVlwiK24ucm91bmQoZVsxXSwyKStcIkhcIituLnJvdW5kKGVbMF0sMil9LGh2aDpmdW5jdGlvbih0LGUpe3JldHVyblwiSFwiK24ucm91bmQoKHRbMF0rZVswXSkvMiwyKStcIlZcIituLnJvdW5kKGVbMV0sMikrXCJIXCIrbi5yb3VuZChlWzBdLDIpfSx2aHY6ZnVuY3Rpb24odCxlKXtyZXR1cm5cIlZcIituLnJvdW5kKCh0WzFdK2VbMV0pLzIsMikrXCJIXCIrbi5yb3VuZChlWzBdLDIpK1wiVlwiK24ucm91bmQoZVsxXSwyKX19LHo9ZnVuY3Rpb24odCxlKXtyZXR1cm5cIkxcIituLnJvdW5kKGVbMF0sMikrXCIsXCIrbi5yb3VuZChlWzFdLDIpfTt2LnN0ZXBzPWZ1bmN0aW9uKHQpe3ZhciBlPUxbdF18fHo7cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1cIk1cIituLnJvdW5kKHRbMF1bMF0sMikrXCIsXCIrbi5yb3VuZCh0WzBdWzFdLDIpLGk9MTtpPHQubGVuZ3RoO2krKylyKz1lKHRbaS0xXSx0W2ldKTtyZXR1cm4gcn19LHYubWFrZVRlc3Rlcj1mdW5jdGlvbigpe3ZhciB0PWMuZW5zdXJlU2luZ2xlQnlJZChuLnNlbGVjdChcImJvZHlcIiksXCJzdmdcIixcImpzLXBsb3RseS10ZXN0ZXJcIixmdW5jdGlvbih0KXt0LmF0dHIoaC5zdmdBdHRycykuc3R5bGUoe3Bvc2l0aW9uOlwiYWJzb2x1dGVcIixsZWZ0OlwiLTEwMDAwcHhcIix0b3A6XCItMTAwMDBweFwiLHdpZHRoOlwiOTAwMHB4XCIsaGVpZ2h0OlwiOTAwMHB4XCIsXCJ6LWluZGV4XCI6XCIxXCJ9KX0pLGU9Yy5lbnN1cmVTaW5nbGUodCxcInBhdGhcIixcImpzLXJlZmVyZW5jZS1wb2ludFwiLGZ1bmN0aW9uKHQpe3QuYXR0cihcImRcIixcIk0wLDBIMVYxSDBaXCIpLnN0eWxlKHtcInN0cm9rZS13aWR0aFwiOjAsZmlsbDpcImJsYWNrXCJ9KX0pO3YudGVzdGVyPXQsdi50ZXN0cmVmPWV9LHYuc2F2ZWRCQm94ZXM9e307dmFyIE89MDtmdW5jdGlvbiBJKHQpe3ZhciBlPXQuZ2V0QXR0cmlidXRlKFwiZGF0YS11bmZvcm1hdHRlZFwiKTtpZihudWxsIT09ZSlyZXR1cm4gZSt0LmdldEF0dHJpYnV0ZShcImRhdGEtbWF0aFwiKSt0LmdldEF0dHJpYnV0ZShcInRleHQtYW5jaG9yXCIpK3QuZ2V0QXR0cmlidXRlKFwic3R5bGVcIil9ZnVuY3Rpb24gRCh0LGUpe2lmKCF0KXJldHVybiBudWxsO3ZhciByPWUuX2NvbnRleHQ7cmV0dXJuXCJ1cmwoJ1wiKyhyLl9leHBvcnRlZFBsb3Q/XCJcIjpyLl9iYXNlVXJsfHxcIlwiKStcIiNcIit0K1wiJylcIn12LmJCb3g9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEsbztpZihyfHwocj1JKHQpKSxyKXtpZihpPXYuc2F2ZWRCQm94ZXNbcl0pcmV0dXJuIGMuZXh0ZW5kRmxhdCh7fSxpKX1lbHNlIGlmKDE9PT10LmNoaWxkTm9kZXMubGVuZ3RoKXt2YXIgcz10LmNoaWxkTm9kZXNbMF07aWYocj1JKHMpKXt2YXIgbD0rcy5nZXRBdHRyaWJ1dGUoXCJ4XCIpfHwwLGg9K3MuZ2V0QXR0cmlidXRlKFwieVwiKXx8MCxmPXMuZ2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIpO2lmKCFmKXt2YXIgcD12LmJCb3gocywhMSxyKTtyZXR1cm4gbCYmKHAubGVmdCs9bCxwLnJpZ2h0Kz1sKSxoJiYocC50b3ArPWgscC5ib3R0b20rPWgpLHB9aWYocis9XCJ+XCIrbCtcIn5cIitoK1wiflwiK2YsaT12LnNhdmVkQkJveGVzW3JdKXJldHVybiBjLmV4dGVuZEZsYXQoe30saSl9fWU/YT10OihvPXYudGVzdGVyLm5vZGUoKSxhPXQuY2xvbmVOb2RlKCEwKSxvLmFwcGVuZENoaWxkKGEpKSxuLnNlbGVjdChhKS5hdHRyKFwidHJhbnNmb3JtXCIsbnVsbCkuY2FsbCh1LnBvc2l0aW9uVGV4dCwwLDApO3ZhciBkPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZz12LnRlc3RyZWYubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2V8fG8ucmVtb3ZlQ2hpbGQoYSk7dmFyIG09e2hlaWdodDpkLmhlaWdodCx3aWR0aDpkLndpZHRoLGxlZnQ6ZC5sZWZ0LWcubGVmdCx0b3A6ZC50b3AtZy50b3AscmlnaHQ6ZC5yaWdodC1nLmxlZnQsYm90dG9tOmQuYm90dG9tLWcudG9wfTtyZXR1cm4gTz49MWU0JiYodi5zYXZlZEJCb3hlcz17fSxPPTApLHImJih2LnNhdmVkQkJveGVzW3JdPW0pLE8rKyxjLmV4dGVuZEZsYXQoe30sbSl9LHYuc2V0Q2xpcFVybD1mdW5jdGlvbih0LGUscil7dC5hdHRyKFwiY2xpcC1wYXRoXCIsRChlLHIpKX0sdi5nZXRUcmFuc2xhdGU9ZnVuY3Rpb24odCl7dmFyIGU9KHRbdC5hdHRyP1wiYXR0clwiOlwiZ2V0QXR0cmlidXRlXCJdKFwidHJhbnNmb3JtXCIpfHxcIlwiKS5yZXBsYWNlKC8uKlxcYnRyYW5zbGF0ZVxcKCgtP1xcZCpcXC4/XFxkKilbXi1cXGRdKigtP1xcZCpcXC4/XFxkKilbXlxcZF0uKi8sZnVuY3Rpb24odCxlLHIpe3JldHVybltlLHJdLmpvaW4oXCIgXCIpfSkuc3BsaXQoXCIgXCIpO3JldHVybnt4OitlWzBdfHwwLHk6K2VbMV18fDB9fSx2LnNldFRyYW5zbGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49dC5hdHRyP1wiYXR0clwiOlwiZ2V0QXR0cmlidXRlXCIsaT10LmF0dHI/XCJhdHRyXCI6XCJzZXRBdHRyaWJ1dGVcIixhPXRbbl0oXCJ0cmFuc2Zvcm1cIil8fFwiXCI7cmV0dXJuIGU9ZXx8MCxyPXJ8fDAsYT1hLnJlcGxhY2UoLyhcXGJ0cmFuc2xhdGVcXCguKj9cXCk7PykvLFwiXCIpLnRyaW0oKSxhPShhKz1cIiB0cmFuc2xhdGUoXCIrZStcIiwgXCIrcitcIilcIikudHJpbSgpLHRbaV0oXCJ0cmFuc2Zvcm1cIixhKSxhfSx2LmdldFNjYWxlPWZ1bmN0aW9uKHQpe3ZhciBlPSh0W3QuYXR0cj9cImF0dHJcIjpcImdldEF0dHJpYnV0ZVwiXShcInRyYW5zZm9ybVwiKXx8XCJcIikucmVwbGFjZSgvLipcXGJzY2FsZVxcKChcXGQqXFwuP1xcZCopW15cXGRdKihcXGQqXFwuP1xcZCopW15cXGRdLiovLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZSxyXS5qb2luKFwiIFwiKX0pLnNwbGl0KFwiIFwiKTtyZXR1cm57eDorZVswXXx8MSx5OitlWzFdfHwxfX0sdi5zZXRTY2FsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dC5hdHRyP1wiYXR0clwiOlwiZ2V0QXR0cmlidXRlXCIsaT10LmF0dHI/XCJhdHRyXCI6XCJzZXRBdHRyaWJ1dGVcIixhPXRbbl0oXCJ0cmFuc2Zvcm1cIil8fFwiXCI7cmV0dXJuIGU9ZXx8MSxyPXJ8fDEsYT1hLnJlcGxhY2UoLyhcXGJzY2FsZVxcKC4qP1xcKTs/KS8sXCJcIikudHJpbSgpLGE9KGErPVwiIHNjYWxlKFwiK2UrXCIsIFwiK3IrXCIpXCIpLnRyaW0oKSx0W2ldKFwidHJhbnNmb3JtXCIsYSksYX07dmFyIFA9L1xccypzYy4qLzt2LnNldFBvaW50R3JvdXBTY2FsZT1mdW5jdGlvbih0LGUscil7aWYoZT1lfHwxLHI9cnx8MSx0KXt2YXIgbj0xPT09ZSYmMT09PXI/XCJcIjpcIiBzY2FsZShcIitlK1wiLFwiK3IrXCIpXCI7dC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9KHRoaXMuZ2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIpfHxcIlwiKS5yZXBsYWNlKFAsXCJcIik7dD0odCs9bikudHJpbSgpLHRoaXMuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsdCl9KX19O3ZhciBSPS90cmFuc2xhdGVcXChbXildKlxcKVxccyokLzt2LnNldFRleHRQb2ludHNTY2FsZT1mdW5jdGlvbih0LGUscil7dCYmdC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQsaT1uLnNlbGVjdCh0aGlzKSxhPWkuc2VsZWN0KFwidGV4dFwiKTtpZihhLm5vZGUoKSl7dmFyIG89cGFyc2VGbG9hdChhLmF0dHIoXCJ4XCIpfHwwKSxzPXBhcnNlRmxvYXQoYS5hdHRyKFwieVwiKXx8MCksbD0oaS5hdHRyKFwidHJhbnNmb3JtXCIpfHxcIlwiKS5tYXRjaChSKTt0PTE9PT1lJiYxPT09cj9bXTpbXCJ0cmFuc2xhdGUoXCIrbytcIixcIitzK1wiKVwiLFwic2NhbGUoXCIrZStcIixcIityK1wiKVwiLFwidHJhbnNsYXRlKFwiKy1vK1wiLFwiKy1zK1wiKVwiXSxsJiZ0LnB1c2gobCksaS5hdHRyKFwidHJhbnNmb3JtXCIsdC5qb2luKFwiIFwiKSl9fSl9fSx7XCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCI6NjczLFwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9uc1wiOjY3NyxcIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzXCI6Njc5LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCI6NzI1LFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi8uLi90cmFjZXMvc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmNcIjoxMDY5LFwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi4vY29sb3JcIjo1NzgsXCIuLi9jb2xvcnNjYWxlXCI6NTkwLFwiLi9zeW1ib2xfZGVmc1wiOjYwMCxkMzoxNTUsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMix0aW55Y29sb3IyOjUyMn1dLDYwMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKTtlLmV4cG9ydHM9e2NpcmNsZTp7bjowLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVyblwiTVwiK2UrXCIsMEFcIitlK1wiLFwiK2UrXCIgMCAxLDEgMCwtXCIrZStcIkFcIitlK1wiLFwiK2UrXCIgMCAwLDEgXCIrZStcIiwwWlwifX0sc3F1YXJlOntuOjEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuXCJNXCIrZStcIixcIitlK1wiSC1cIitlK1wiVi1cIitlK1wiSFwiK2UrXCJaXCJ9fSxkaWFtb25kOntuOjIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMyp0LDIpO3JldHVyblwiTVwiK2UrXCIsMEwwLFwiK2UrXCJMLVwiK2UrXCIsMEwwLC1cIitlK1wiWlwifX0sY3Jvc3M6e246MyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjQqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuXCJNXCIrcitcIixcIitlK1wiSFwiK2UrXCJWXCIrcitcIkgtXCIrZStcIlZcIitlK1wiSC1cIityK1wiVi1cIitlK1wiSC1cIitlK1wiVi1cIityK1wiSFwiK2UrXCJWLVwiK2UrXCJIXCIrcitcIlpcIn19LHg6e246NCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjgqdC9NYXRoLnNxcnQoMiksMikscj1cImxcIitlK1wiLFwiK2UsaT1cImxcIitlK1wiLC1cIitlLGE9XCJsLVwiK2UrXCIsLVwiK2Usbz1cImwtXCIrZStcIixcIitlO3JldHVyblwiTTAsXCIrZStyK2krYStpK2ErbythK28rcitvK3IrXCJaXCJ9fSxcInRyaWFuZ2xlLXVwXCI6e246NSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0L01hdGguc3FydCgzKSwyKTtyZXR1cm5cIk0tXCIrZStcIixcIituLnJvdW5kKHQvMiwyKStcIkhcIitlK1wiTDAsLVwiK24ucm91bmQodCwyKStcIlpcIn19LFwidHJpYW5nbGUtZG93blwiOntuOjYsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdC9NYXRoLnNxcnQoMyksMik7cmV0dXJuXCJNLVwiK2UrXCIsLVwiK24ucm91bmQodC8yLDIpK1wiSFwiK2UrXCJMMCxcIituLnJvdW5kKHQsMikrXCJaXCJ9fSxcInRyaWFuZ2xlLWxlZnRcIjp7bjo3LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQvTWF0aC5zcXJ0KDMpLDIpO3JldHVyblwiTVwiK24ucm91bmQodC8yLDIpK1wiLC1cIitlK1wiVlwiK2UrXCJMLVwiK24ucm91bmQodCwyKStcIiwwWlwifX0sXCJ0cmlhbmdsZS1yaWdodFwiOntuOjgsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdC9NYXRoLnNxcnQoMyksMik7cmV0dXJuXCJNLVwiK24ucm91bmQodC8yLDIpK1wiLC1cIitlK1wiVlwiK2UrXCJMXCIrbi5yb3VuZCh0LDIpK1wiLDBaXCJ9fSxcInRyaWFuZ2xlLW5lXCI6e246OSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjYqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuXCJNLVwiK3IrXCIsLVwiK2UrXCJIXCIrZStcIlZcIityK1wiWlwifX0sXCJ0cmlhbmdsZS1zZVwiOntuOjEwLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNip0LDIpLHI9bi5yb3VuZCgxLjIqdCwyKTtyZXR1cm5cIk1cIitlK1wiLC1cIityK1wiVlwiK2UrXCJILVwiK3IrXCJaXCJ9fSxcInRyaWFuZ2xlLXN3XCI6e246MTEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC42KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVyblwiTVwiK3IrXCIsXCIrZStcIkgtXCIrZStcIlYtXCIrcitcIlpcIn19LFwidHJpYW5nbGUtbndcIjp7bjoxMixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjYqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuXCJNLVwiK2UrXCIsXCIrcitcIlYtXCIrZStcIkhcIityK1wiWlwifX0scGVudGFnb246e246MTMsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC45NTEqdCwyKSxyPW4ucm91bmQoLjU4OCp0LDIpLGk9bi5yb3VuZCgtdCwyKSxhPW4ucm91bmQoLS4zMDkqdCwyKTtyZXR1cm5cIk1cIitlK1wiLFwiK2ErXCJMXCIrcitcIixcIituLnJvdW5kKC44MDkqdCwyKStcIkgtXCIrcitcIkwtXCIrZStcIixcIithK1wiTDAsXCIraStcIlpcIn19LGhleGFnb246e246MTQsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMikscj1uLnJvdW5kKHQvMiwyKSxpPW4ucm91bmQodCpNYXRoLnNxcnQoMykvMiwyKTtyZXR1cm5cIk1cIitpK1wiLC1cIityK1wiVlwiK3IrXCJMMCxcIitlK1wiTC1cIitpK1wiLFwiK3IrXCJWLVwiK3IrXCJMMCwtXCIrZStcIlpcIn19LGhleGFnb24yOntuOjE1LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpLHI9bi5yb3VuZCh0LzIsMiksaT1uLnJvdW5kKHQqTWF0aC5zcXJ0KDMpLzIsMik7cmV0dXJuXCJNLVwiK3IrXCIsXCIraStcIkhcIityK1wiTFwiK2UrXCIsMExcIityK1wiLC1cIitpK1wiSC1cIityK1wiTC1cIitlK1wiLDBaXCJ9fSxvY3RhZ29uOntuOjE2LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguOTI0KnQsMikscj1uLnJvdW5kKC4zODMqdCwyKTtyZXR1cm5cIk0tXCIrcitcIiwtXCIrZStcIkhcIityK1wiTFwiK2UrXCIsLVwiK3IrXCJWXCIrcitcIkxcIityK1wiLFwiK2UrXCJILVwiK3IrXCJMLVwiK2UrXCIsXCIrcitcIlYtXCIrcitcIlpcIn19LHN0YXI6e246MTcsZjpmdW5jdGlvbih0KXt2YXIgZT0xLjQqdCxyPW4ucm91bmQoLjIyNSplLDIpLGk9bi5yb3VuZCguOTUxKmUsMiksYT1uLnJvdW5kKC4zNjMqZSwyKSxvPW4ucm91bmQoLjU4OCplLDIpLHM9bi5yb3VuZCgtZSwyKSxsPW4ucm91bmQoLS4zMDkqZSwyKSxjPW4ucm91bmQoLjExOCplLDIpLHU9bi5yb3VuZCguODA5KmUsMik7cmV0dXJuXCJNXCIrcitcIixcIitsK1wiSFwiK2krXCJMXCIrYStcIixcIitjK1wiTFwiK28rXCIsXCIrdStcIkwwLFwiK24ucm91bmQoLjM4MiplLDIpK1wiTC1cIitvK1wiLFwiK3UrXCJMLVwiK2ErXCIsXCIrYytcIkwtXCIraStcIixcIitsK1wiSC1cIityK1wiTDAsXCIrcytcIlpcIn19LGhleGFncmFtOntuOjE4LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNjYqdCwyKSxyPW4ucm91bmQoLjM4KnQsMiksaT1uLnJvdW5kKC43Nip0LDIpO3JldHVyblwiTS1cIitpK1wiLDBsLVwiK3IrXCIsLVwiK2UrXCJoXCIraStcImxcIityK1wiLC1cIitlK1wibFwiK3IrXCIsXCIrZStcImhcIitpK1wibC1cIityK1wiLFwiK2UrXCJsXCIrcitcIixcIitlK1wiaC1cIitpK1wibC1cIityK1wiLFwiK2UrXCJsLVwiK3IrXCIsLVwiK2UrXCJoLVwiK2krXCJaXCJ9fSxcInN0YXItdHJpYW5nbGUtdXBcIjp7bjoxOSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCpNYXRoLnNxcnQoMykqLjgsMikscj1uLnJvdW5kKC44KnQsMiksaT1uLnJvdW5kKDEuNip0LDIpLGE9bi5yb3VuZCg0KnQsMiksbz1cIkEgXCIrYStcIixcIithK1wiIDAgMCAxIFwiO3JldHVyblwiTS1cIitlK1wiLFwiK3IrbytlK1wiLFwiK3IrbytcIjAsLVwiK2krbytcIi1cIitlK1wiLFwiK3IrXCJaXCJ9fSxcInN0YXItdHJpYW5nbGUtZG93blwiOntuOjIwLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0Kk1hdGguc3FydCgzKSouOCwyKSxyPW4ucm91bmQoLjgqdCwyKSxpPW4ucm91bmQoMS42KnQsMiksYT1uLnJvdW5kKDQqdCwyKSxvPVwiQSBcIithK1wiLFwiK2ErXCIgMCAwIDEgXCI7cmV0dXJuXCJNXCIrZStcIiwtXCIrcitvK1wiLVwiK2UrXCIsLVwiK3IrbytcIjAsXCIraStvK2UrXCIsLVwiK3IrXCJaXCJ9fSxcInN0YXItc3F1YXJlXCI6e246MjEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMSp0LDIpLHI9bi5yb3VuZCgyKnQsMiksaT1cIkEgXCIrcitcIixcIityK1wiIDAgMCAxIFwiO3JldHVyblwiTS1cIitlK1wiLC1cIitlK2krXCItXCIrZStcIixcIitlK2krZStcIixcIitlK2krZStcIiwtXCIrZStpK1wiLVwiK2UrXCIsLVwiK2UrXCJaXCJ9fSxcInN0YXItZGlhbW9uZFwiOntuOjIyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjQqdCwyKSxyPW4ucm91bmQoMS45KnQsMiksaT1cIkEgXCIrcitcIixcIityK1wiIDAgMCAxIFwiO3JldHVyblwiTS1cIitlK1wiLDBcIitpK1wiMCxcIitlK2krZStcIiwwXCIraStcIjAsLVwiK2UraStcIi1cIitlK1wiLDBaXCJ9fSxcImRpYW1vbmQtdGFsbFwiOntuOjIzLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNyp0LDIpLHI9bi5yb3VuZCgxLjQqdCwyKTtyZXR1cm5cIk0wLFwiK3IrXCJMXCIrZStcIiwwTDAsLVwiK3IrXCJMLVwiK2UrXCIsMFpcIn19LFwiZGlhbW9uZC13aWRlXCI6e246MjQsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpLHI9bi5yb3VuZCguNyp0LDIpO3JldHVyblwiTTAsXCIrcitcIkxcIitlK1wiLDBMMCwtXCIrcitcIkwtXCIrZStcIiwwWlwifX0saG91cmdsYXNzOntuOjI1LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVyblwiTVwiK2UrXCIsXCIrZStcIkgtXCIrZStcIkxcIitlK1wiLC1cIitlK1wiSC1cIitlK1wiWlwifSxub0RvdDohMH0sYm93dGllOntuOjI2LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVyblwiTVwiK2UrXCIsXCIrZStcIlYtXCIrZStcIkwtXCIrZStcIixcIitlK1wiVi1cIitlK1wiWlwifSxub0RvdDohMH0sXCJjaXJjbGUtY3Jvc3NcIjp7bjoyNyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm5cIk0wLFwiK2UrXCJWLVwiK2UrXCJNXCIrZStcIiwwSC1cIitlK1wiTVwiK2UrXCIsMEFcIitlK1wiLFwiK2UrXCIgMCAxLDEgMCwtXCIrZStcIkFcIitlK1wiLFwiK2UrXCIgMCAwLDEgXCIrZStcIiwwWlwifSxuZWVkTGluZTohMCxub0RvdDohMH0sXCJjaXJjbGUteFwiOntuOjI4LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpLHI9bi5yb3VuZCh0L01hdGguc3FydCgyKSwyKTtyZXR1cm5cIk1cIityK1wiLFwiK3IrXCJMLVwiK3IrXCIsLVwiK3IrXCJNXCIrcitcIiwtXCIrcitcIkwtXCIrcitcIixcIityK1wiTVwiK2UrXCIsMEFcIitlK1wiLFwiK2UrXCIgMCAxLDEgMCwtXCIrZStcIkFcIitlK1wiLFwiK2UrXCIgMCAwLDEgXCIrZStcIiwwWlwifSxuZWVkTGluZTohMCxub0RvdDohMH0sXCJzcXVhcmUtY3Jvc3NcIjp7bjoyOSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm5cIk0wLFwiK2UrXCJWLVwiK2UrXCJNXCIrZStcIiwwSC1cIitlK1wiTVwiK2UrXCIsXCIrZStcIkgtXCIrZStcIlYtXCIrZStcIkhcIitlK1wiWlwifSxuZWVkTGluZTohMCxub0RvdDohMH0sXCJzcXVhcmUteFwiOntuOjMwLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVyblwiTVwiK2UrXCIsXCIrZStcIkwtXCIrZStcIiwtXCIrZStcIk1cIitlK1wiLC1cIitlK1wiTC1cIitlK1wiLFwiK2UrXCJNXCIrZStcIixcIitlK1wiSC1cIitlK1wiVi1cIitlK1wiSFwiK2UrXCJaXCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSxcImRpYW1vbmQtY3Jvc3NcIjp7bjozMSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4zKnQsMik7cmV0dXJuXCJNXCIrZStcIiwwTDAsXCIrZStcIkwtXCIrZStcIiwwTDAsLVwiK2UrXCJaTTAsLVwiK2UrXCJWXCIrZStcIk0tXCIrZStcIiwwSFwiK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSxcImRpYW1vbmQteFwiOntuOjMyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjMqdCwyKSxyPW4ucm91bmQoLjY1KnQsMik7cmV0dXJuXCJNXCIrZStcIiwwTDAsXCIrZStcIkwtXCIrZStcIiwwTDAsLVwiK2UrXCJaTS1cIityK1wiLC1cIityK1wiTFwiK3IrXCIsXCIrcitcIk0tXCIrcitcIixcIityK1wiTFwiK3IrXCIsLVwiK3J9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSxcImNyb3NzLXRoaW5cIjp7bjozMyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS40KnQsMik7cmV0dXJuXCJNMCxcIitlK1wiVi1cIitlK1wiTVwiK2UrXCIsMEgtXCIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSxcIngtdGhpblwiOntuOjM0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVyblwiTVwiK2UrXCIsXCIrZStcIkwtXCIrZStcIiwtXCIrZStcIk1cIitlK1wiLC1cIitlK1wiTC1cIitlK1wiLFwiK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sYXN0ZXJpc2s6e246MzUsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMip0LDIpLHI9bi5yb3VuZCguODUqdCwyKTtyZXR1cm5cIk0wLFwiK2UrXCJWLVwiK2UrXCJNXCIrZStcIiwwSC1cIitlK1wiTVwiK3IrXCIsXCIrcitcIkwtXCIrcitcIiwtXCIrcitcIk1cIityK1wiLC1cIityK1wiTC1cIityK1wiLFwiK3J9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0saGFzaDp7bjozNixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodC8yLDIpLHI9bi5yb3VuZCh0LDIpO3JldHVyblwiTVwiK2UrXCIsXCIrcitcIlYtXCIrcitcIm0tXCIrcitcIiwwVlwiK3IrXCJNXCIrcitcIixcIitlK1wiSC1cIityK1wibTAsLVwiK3IrXCJIXCIrcn0sbmVlZExpbmU6ITAsbm9GaWxsOiEwfSxcInktdXBcIjp7bjozNyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKDEuNip0LDIpLGk9bi5yb3VuZCguOCp0LDIpO3JldHVyblwiTS1cIitlK1wiLFwiK2krXCJMMCwwTVwiK2UrXCIsXCIraStcIkwwLDBNMCwtXCIrcitcIkwwLDBcIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSxcInktZG93blwiOntuOjM4LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjIqdCwyKSxyPW4ucm91bmQoMS42KnQsMiksaT1uLnJvdW5kKC44KnQsMik7cmV0dXJuXCJNLVwiK2UrXCIsLVwiK2krXCJMMCwwTVwiK2UrXCIsLVwiK2krXCJMMCwwTTAsXCIrcitcIkwwLDBcIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSxcInktbGVmdFwiOntuOjM5LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjIqdCwyKSxyPW4ucm91bmQoMS42KnQsMiksaT1uLnJvdW5kKC44KnQsMik7cmV0dXJuXCJNXCIraStcIixcIitlK1wiTDAsME1cIitpK1wiLC1cIitlK1wiTDAsME0tXCIrcitcIiwwTDAsMFwifSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LFwieS1yaWdodFwiOntuOjQwLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjIqdCwyKSxyPW4ucm91bmQoMS42KnQsMiksaT1uLnJvdW5kKC44KnQsMik7cmV0dXJuXCJNLVwiK2krXCIsXCIrZStcIkwwLDBNLVwiK2krXCIsLVwiK2UrXCJMMCwwTVwiK3IrXCIsMEwwLDBcIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSxcImxpbmUtZXdcIjp7bjo0MSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS40KnQsMik7cmV0dXJuXCJNXCIrZStcIiwwSC1cIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LFwibGluZS1uc1wiOntuOjQyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjQqdCwyKTtyZXR1cm5cIk0wLFwiK2UrXCJWLVwiK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sXCJsaW5lLW5lXCI6e246NDMsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuXCJNXCIrZStcIiwtXCIrZStcIkwtXCIrZStcIixcIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LFwibGluZS1ud1wiOntuOjQ0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVyblwiTVwiK2UrXCIsXCIrZStcIkwtXCIrZStcIiwtXCIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfX19LHtkMzoxNTV9XSw2MDE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e3Zpc2libGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHR5cGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInBlcmNlbnRcIixcImNvbnN0YW50XCIsXCJzcXJ0XCIsXCJkYXRhXCJdLGVkaXRUeXBlOlwiY2FsY1wifSxzeW1tZXRyaWM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGFycmF5Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxhcnJheW1pbnVzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx2YWx1ZTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MTAsZWRpdFR5cGU6XCJjYWxjXCJ9LHZhbHVlbWludXM6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjEwLGVkaXRUeXBlOlwiY2FsY1wifSx0cmFjZXJlZjp7dmFsVHlwZTpcImludGVnZXJcIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6XCJzdHlsZVwifSx0cmFjZXJlZm1pbnVzOnt2YWxUeXBlOlwiaW50ZWdlclwiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTpcInN0eWxlXCJ9LGNvcHlfeXN0eWxlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGVkaXRUeXBlOlwicGxvdFwifSxjb3B5X3pzdHlsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixlZGl0VHlwZTpcInN0eWxlXCJ9LGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcInN0eWxlXCJ9LHRoaWNrbmVzczp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MixlZGl0VHlwZTpcInN0eWxlXCJ9LHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZWRpdFR5cGU6XCJwbG90XCJ9LGVkaXRUeXBlOlwiY2FsY1wiLF9kZXByZWNhdGVkOntvcGFjaXR5Ont2YWxUeXBlOlwibnVtYmVyXCIsZWRpdFR5cGU6XCJzdHlsZVwifX19fSx7fV0sNjAyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGE9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLG89dChcIi4uLy4uL2xpYlwiKSxzPXQoXCIuL2NvbXB1dGVfZXJyb3JcIik7ZnVuY3Rpb24gbCh0LGUscixpKXt2YXIgbD1lW1wiZXJyb3JfXCIraV18fHt9LGM9W107aWYobC52aXNpYmxlJiYtMSE9PVtcImxpbmVhclwiLFwibG9nXCJdLmluZGV4T2Yoci50eXBlKSl7Zm9yKHZhciB1PXMobCksaD0wO2g8dC5sZW5ndGg7aCsrKXt2YXIgZj10W2hdLHA9Zi5pO2lmKHZvaWQgMD09PXApcD1oO2Vsc2UgaWYobnVsbD09PXApY29udGludWU7dmFyIGQ9ZltpXTtpZihuKHIuYzJsKGQpKSl7dmFyIGc9dShkLHApO2lmKG4oZ1swXSkmJm4oZ1sxXSkpe3ZhciB2PWZbaStcInNcIl09ZC1nWzBdLG09ZltpK1wiaFwiXT1kK2dbMV07Yy5wdXNoKHYsbSl9fX12YXIgeT1yLl9pZCx4PWUuX2V4dHJlbWVzW3ldLGI9YS5maW5kRXh0cmVtZXMocixjLG8uZXh0ZW5kRmxhdCh7dG96ZXJvOngub3B0cy50b3plcm99LHtwYWRkZWQ6ITB9KSk7eC5taW49eC5taW4uY29uY2F0KGIubWluKSx4Lm1heD14Lm1heC5jb25jYXQoYi5tYXgpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuY2FsY2RhdGEscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdLG89blswXS50cmFjZTtpZighMD09PW8udmlzaWJsZSYmaS50cmFjZUlzKG8sXCJlcnJvckJhcnNPS1wiKSl7dmFyIHM9YS5nZXRGcm9tSWQodCxvLnhheGlzKSxjPWEuZ2V0RnJvbUlkKHQsby55YXhpcyk7bChuLG8scyxcInhcIiksbChuLG8sYyxcInlcIil9fX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2NvbXB1dGVfZXJyb3JcIjo2MDMsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDYwMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm5cInBlcmNlbnRcIj09PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKHQqZS8xMDApfTpcImNvbnN0YW50XCI9PT10P2Z1bmN0aW9uKCl7cmV0dXJuIE1hdGguYWJzKGUpfTpcInNxcnRcIj09PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydChNYXRoLmFicyh0KSl9OnZvaWQgMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC50eXBlLHI9dC5zeW1tZXRyaWM7aWYoXCJkYXRhXCI9PT1lKXt2YXIgaT10LmFycmF5fHxbXTtpZihyKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPStpW2VdO3JldHVybltyLHJdfTt2YXIgYT10LmFycmF5bWludXN8fFtdO3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPStpW2VdLG49K2FbZV07cmV0dXJuIGlzTmFOKHIpJiZpc05hTihuKT9bTmFOLE5hTl06W258fDAscnx8MF19fXZhciBvPW4oZSx0LnZhbHVlKSxzPW4oZSx0LnZhbHVlbWludXMpO3JldHVybiByfHx2b2lkIDA9PT10LnZhbHVlbWludXM/ZnVuY3Rpb24odCl7dmFyIGU9byh0KTtyZXR1cm5bZSxlXX06ZnVuY3Rpb24odCl7cmV0dXJuW3ModCksbyh0KV19fX0se31dLDYwNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxhPXQoXCIuLi8uLi9saWJcIiksbz10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKSxzPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe3ZhciBjPVwiZXJyb3JfXCIrbC5heGlzLHU9by5uZXdDb250YWluZXIoZSxjKSxoPXRbY118fHt9O2Z1bmN0aW9uIGYodCxlKXtyZXR1cm4gYS5jb2VyY2UoaCx1LHMsdCxlKX1pZighMSE9PWYoXCJ2aXNpYmxlXCIsdm9pZCAwIT09aC5hcnJheXx8dm9pZCAwIT09aC52YWx1ZXx8XCJzcXJ0XCI9PT1oLnR5cGUpKXt2YXIgcD1mKFwidHlwZVwiLFwiYXJyYXlcImluIGg/XCJkYXRhXCI6XCJwZXJjZW50XCIpLGQ9ITA7XCJzcXJ0XCIhPT1wJiYoZD1mKFwic3ltbWV0cmljXCIsISgoXCJkYXRhXCI9PT1wP1wiYXJyYXltaW51c1wiOlwidmFsdWVtaW51c1wiKWluIGgpKSksXCJkYXRhXCI9PT1wPyhmKFwiYXJyYXlcIiksZihcInRyYWNlcmVmXCIpLGR8fChmKFwiYXJyYXltaW51c1wiKSxmKFwidHJhY2VyZWZtaW51c1wiKSkpOlwicGVyY2VudFwiIT09cCYmXCJjb25zdGFudFwiIT09cHx8KGYoXCJ2YWx1ZVwiKSxkfHxmKFwidmFsdWVtaW51c1wiKSk7dmFyIGc9XCJjb3B5X1wiK2wuaW5oZXJpdCtcInN0eWxlXCI7aWYobC5pbmhlcml0KShlW1wiZXJyb3JfXCIrbC5pbmhlcml0XXx8e30pLnZpc2libGUmJmYoZywhKGguY29sb3J8fG4oaC50aGlja25lc3MpfHxuKGgud2lkdGgpKSk7bC5pbmhlcml0JiZ1W2ddfHwoZihcImNvbG9yXCIsciksZihcInRoaWNrbmVzc1wiKSxmKFwid2lkdGhcIixpLnRyYWNlSXMoZSxcImdsM2RcIik/MDo0KSl9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9hdHRyaWJ1dGVzXCI6NjAxLFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw2MDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGwsYT10KFwiLi9hdHRyaWJ1dGVzXCIpLG89e2Vycm9yX3g6bi5leHRlbmRGbGF0KHt9LGEpLGVycm9yX3k6bi5leHRlbmRGbGF0KHt9LGEpfTtkZWxldGUgby5lcnJvcl94LmNvcHlfenN0eWxlLGRlbGV0ZSBvLmVycm9yX3kuY29weV96c3R5bGUsZGVsZXRlIG8uZXJyb3JfeS5jb3B5X3lzdHlsZTt2YXIgcz17ZXJyb3JfeDpuLmV4dGVuZEZsYXQoe30sYSksZXJyb3JfeTpuLmV4dGVuZEZsYXQoe30sYSksZXJyb3JfejpuLmV4dGVuZEZsYXQoe30sYSl9O2RlbGV0ZSBzLmVycm9yX3guY29weV95c3R5bGUsZGVsZXRlIHMuZXJyb3JfeS5jb3B5X3lzdHlsZSxkZWxldGUgcy5lcnJvcl96LmNvcHlfeXN0eWxlLGRlbGV0ZSBzLmVycm9yX3ouY29weV96c3R5bGUsZS5leHBvcnRzPXttb2R1bGVUeXBlOlwiY29tcG9uZW50XCIsbmFtZTpcImVycm9yYmFyc1wiLHNjaGVtYTp7dHJhY2VzOntzY2F0dGVyOm8sYmFyOm8saGlzdG9ncmFtOm8sc2NhdHRlcjNkOmkocyxcImNhbGNcIixcIm5lc3RlZFwiKSxzY2F0dGVyZ2w6aShvLFwiY2FsY1wiLFwibmVzdGVkXCIpfX0sc3VwcGx5RGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIiksY2FsYzp0KFwiLi9jYWxjXCIpLG1ha2VDb21wdXRlRXJyb3I6dChcIi4vY29tcHV0ZV9lcnJvclwiKSxwbG90OnQoXCIuL3Bsb3RcIiksc3R5bGU6dChcIi4vc3R5bGVcIiksaG92ZXJJbmZvOmZ1bmN0aW9uKHQsZSxyKXsoZS5lcnJvcl95fHx7fSkudmlzaWJsZSYmKHIueWVycj10LnloLXQueSxlLmVycm9yX3kuc3ltbWV0cmljfHwoci55ZXJybmVnPXQueS10LnlzKSk7KGUuZXJyb3JfeHx8e30pLnZpc2libGUmJihyLnhlcnI9dC54aC10LngsZS5lcnJvcl94LnN5bW1ldHJpY3x8KHIueGVycm5lZz10LngtdC54cykpfX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuL2F0dHJpYnV0ZXNcIjo2MDEsXCIuL2NhbGNcIjo2MDIsXCIuL2NvbXB1dGVfZXJyb3JcIjo2MDMsXCIuL2RlZmF1bHRzXCI6NjA0LFwiLi9wbG90XCI6NjA2LFwiLi9zdHlsZVwiOjYwN31dLDYwNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxhPXQoXCIuLi9kcmF3aW5nXCIpLG89dChcIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXt2YXIgbD1yLnhheGlzLGM9ci55YXhpcyx1PXMmJnMuZHVyYXRpb24+MDtlLmVhY2goZnVuY3Rpb24oZSl7dmFyIGgsZj1lWzBdLnRyYWNlLHA9Zi5lcnJvcl94fHx7fSxkPWYuZXJyb3JfeXx8e307Zi5pZHMmJihoPWZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSk7dmFyIGc9by5oYXNNYXJrZXJzKGYpJiZmLm1hcmtlci5tYXhkaXNwbGF5ZWQ+MDtkLnZpc2libGV8fHAudmlzaWJsZXx8KGU9W10pO3ZhciB2PW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbChcImcuZXJyb3JiYXJcIikuZGF0YShlLGgpO2lmKHYuZXhpdCgpLnJlbW92ZSgpLGUubGVuZ3RoKXtwLnZpc2libGV8fHYuc2VsZWN0QWxsKFwicGF0aC54ZXJyb3JcIikucmVtb3ZlKCksZC52aXNpYmxlfHx2LnNlbGVjdEFsbChcInBhdGgueWVycm9yXCIpLnJlbW92ZSgpLHYuc3R5bGUoXCJvcGFjaXR5XCIsMSk7dmFyIG09di5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcImVycm9yYmFyXCIsITApO3UmJm0uc3R5bGUoXCJvcGFjaXR5XCIsMCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMuZHVyYXRpb24pLnN0eWxlKFwib3BhY2l0eVwiLDEpLGEuc2V0Q2xpcFVybCh2LHIubGF5ZXJDbGlwSWQsdCksdi5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXt4OmUuYzJwKHQueCkseTpyLmMycCh0LnkpfTt2b2lkIDAhPT10LnloJiYobi55aD1yLmMycCh0LnloKSxuLnlzPXIuYzJwKHQueXMpLGkobi55cyl8fChuLm5vWVM9ITAsbi55cz1yLmMycCh0LnlzLCEwKSkpO3ZvaWQgMCE9PXQueGgmJihuLnhoPWUuYzJwKHQueGgpLG4ueHM9ZS5jMnAodC54cyksaShuLnhzKXx8KG4ubm9YUz0hMCxuLnhzPWUuYzJwKHQueHMsITApKSk7cmV0dXJuIG59KHQsbCxjKTtpZighZ3x8dC52aXMpe3ZhciBhLG89ZS5zZWxlY3QoXCJwYXRoLnllcnJvclwiKTtpZihkLnZpc2libGUmJmkoci54KSYmaShyLnloKSYmaShyLnlzKSl7dmFyIGg9ZC53aWR0aDthPVwiTVwiKyhyLngtaCkrXCIsXCIrci55aCtcImhcIisyKmgrXCJtLVwiK2grXCIsMFZcIityLnlzLHIubm9ZU3x8KGErPVwibS1cIitoK1wiLDBoXCIrMipoKSwhby5zaXplKCk/bz1lLmFwcGVuZChcInBhdGhcIikuc3R5bGUoXCJ2ZWN0b3ItZWZmZWN0XCIsXCJub24tc2NhbGluZy1zdHJva2VcIikuY2xhc3NlZChcInllcnJvclwiLCEwKTp1JiYobz1vLnRyYW5zaXRpb24oKS5kdXJhdGlvbihzLmR1cmF0aW9uKS5lYXNlKHMuZWFzaW5nKSksby5hdHRyKFwiZFwiLGEpfWVsc2Ugby5yZW1vdmUoKTt2YXIgZj1lLnNlbGVjdChcInBhdGgueGVycm9yXCIpO2lmKHAudmlzaWJsZSYmaShyLnkpJiZpKHIueGgpJiZpKHIueHMpKXt2YXIgdj0ocC5jb3B5X3lzdHlsZT9kOnApLndpZHRoO2E9XCJNXCIrci54aCtcIixcIisoci55LXYpK1widlwiKzIqditcIm0wLC1cIit2K1wiSFwiK3IueHMsci5ub1hTfHwoYSs9XCJtMCwtXCIrditcInZcIisyKnYpLCFmLnNpemUoKT9mPWUuYXBwZW5kKFwicGF0aFwiKS5zdHlsZShcInZlY3Rvci1lZmZlY3RcIixcIm5vbi1zY2FsaW5nLXN0cm9rZVwiKS5jbGFzc2VkKFwieGVycm9yXCIsITApOnUmJihmPWYudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMuZHVyYXRpb24pLmVhc2Uocy5lYXNpbmcpKSxmLmF0dHIoXCJkXCIsYSl9ZWxzZSBmLnJlbW92ZSgpfX0pfX0pfX0se1wiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi4vZHJhd2luZ1wiOjU5OSxkMzoxNTUsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDYwNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi9jb2xvclwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1lLmVycm9yX3l8fHt9LGE9ZS5lcnJvcl94fHx7fSxvPW4uc2VsZWN0KHRoaXMpO28uc2VsZWN0QWxsKFwicGF0aC55ZXJyb3JcIikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixyLnRoaWNrbmVzcytcInB4XCIpLmNhbGwoaS5zdHJva2Usci5jb2xvciksYS5jb3B5X3lzdHlsZSYmKGE9ciksby5zZWxlY3RBbGwoXCJwYXRoLnhlcnJvclwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLGEudGhpY2tuZXNzK1wicHhcIikuY2FsbChpLnN0cm9rZSxhLmNvbG9yKX0pfX0se1wiLi4vY29sb3JcIjo1NzgsZDM6MTU1fV0sNjA4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiKSxpPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLmhvdmVybGFiZWwsYT10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17aG92ZXJsYWJlbDp7Ymdjb2xvcjphKHt9LGkuYmdjb2xvcix7YXJyYXlPazohMH0pLGJvcmRlcmNvbG9yOmEoe30saS5ib3JkZXJjb2xvcix7YXJyYXlPazohMH0pLGZvbnQ6bih7YXJyYXlPazohMCxlZGl0VHlwZTpcIm5vbmVcIn0pLGFsaWduOmEoe30saS5hbGlnbix7YXJyYXlPazohMH0pLG5hbWVsZW5ndGg6YSh7fSxpLm5hbWVsZW5ndGgse2FycmF5T2s6ITB9KSxlZGl0VHlwZTpcIm5vbmVcIn19fSx7XCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCI6Nzc1LFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjYxOH1dLDYwOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcmVnaXN0cnlcIik7ZnVuY3Rpb24gYSh0LGUscixpKXtpPWl8fG4uaWRlbnRpdHksQXJyYXkuaXNBcnJheSh0KSYmKGVbMF1bcl09aSh0KSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2FsY2RhdGEscj10Ll9mdWxsTGF5b3V0O2Z1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBuLmNvZXJjZUhvdmVyaW5mbyh7aG92ZXJpbmZvOmV9LHtfbW9kdWxlOnQuX21vZHVsZX0scil9fWZvcih2YXIgcz0wO3M8ZS5sZW5ndGg7cysrKXt2YXIgbD1lW3NdLGM9bFswXS50cmFjZTtpZighaS50cmFjZUlzKGMsXCJwaWVcIikpe3ZhciB1PWkudHJhY2VJcyhjLFwiMmRNYXBcIik/YTpuLmZpbGxBcnJheTt1KGMuaG92ZXJpbmZvLGwsXCJoaVwiLG8oYykpLGMuaG92ZXJ0ZW1wbGF0ZSYmdShjLmhvdmVydGVtcGxhdGUsbCxcImh0XCIpLGMuaG92ZXJsYWJlbCYmKHUoYy5ob3ZlcmxhYmVsLmJnY29sb3IsbCxcImhiZ1wiKSx1KGMuaG92ZXJsYWJlbC5ib3JkZXJjb2xvcixsLFwiaGJjXCIpLHUoYy5ob3ZlcmxhYmVsLmZvbnQuc2l6ZSxsLFwiaHRzXCIpLHUoYy5ob3ZlcmxhYmVsLmZvbnQuY29sb3IsbCxcImh0Y1wiKSx1KGMuaG92ZXJsYWJlbC5mb250LmZhbWlseSxsLFwiaHRmXCIpLHUoYy5ob3ZlcmxhYmVsLm5hbWVsZW5ndGgsbCxcImhubFwiKSx1KGMuaG92ZXJsYWJlbC5hbGlnbixsLFwiaHRhXCIpKX19fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4Mjl9XSw2MTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIiksaT10KFwiLi9ob3ZlclwiKS5ob3ZlcjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPW4uZ2V0Q29tcG9uZW50TWV0aG9kKFwiYW5ub3RhdGlvbnNcIixcIm9uQ2xpY2tcIikodCx0Ll9ob3ZlcmRhdGEpO2Z1bmN0aW9uIG8oKXt0LmVtaXQoXCJwbG90bHlfY2xpY2tcIix7cG9pbnRzOnQuX2hvdmVyZGF0YSxldmVudDplfSl9dm9pZCAwIT09ciYmaSh0LGUsciwhMCksdC5faG92ZXJkYXRhJiZlJiZlLnRhcmdldCYmKGEmJmEudGhlbj9hLnRoZW4obyk6bygpLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uJiZlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX19LHtcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9ob3ZlclwiOjYxNH1dLDYxMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17WUFOR0xFOjYwLEhPVkVSQVJST1dTSVpFOjYsSE9WRVJURVhUUEFEOjMsSE9WRVJGT05UU0laRToxMyxIT1ZFUkZPTlQ6XCJBcmlhbCwgc2Fucy1zZXJpZlwiLEhPVkVSTUlOVElNRTo1MCxIT1ZFUklEOlwiLWhvdmVyXCJ9fSx7fV0sNjEyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2F0dHJpYnV0ZXNcIiksYT10KFwiLi9ob3ZlcmxhYmVsX2RlZmF1bHRzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcz1uLmV4dGVuZEZsYXQoe30sby5ob3ZlcmxhYmVsKTtlLmhvdmVydGVtcGxhdGUmJihzLm5hbWVsZW5ndGg9LTEpLGEodCxlLGZ1bmN0aW9uKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9LHMpfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi9hdHRyaWJ1dGVzXCI6NjA4LFwiLi9ob3ZlcmxhYmVsX2RlZmF1bHRzXCI6NjE1fV0sNjEzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKTtyLmdldFN1YnBsb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3VicGxvdHx8dC54YXhpcyt0LnlheGlzfHx0Lmdlb30sci5pc1RyYWNlSW5TdWJwbG90cz1mdW5jdGlvbih0LGUpe2lmKFwic3Bsb21cIj09PXQudHlwZSl7Zm9yKHZhciBuPXQueGF4ZXN8fFtdLGk9dC55YXhlc3x8W10sYT0wO2E8bi5sZW5ndGg7YSsrKWZvcih2YXIgbz0wO288aS5sZW5ndGg7bysrKWlmKC0xIT09ZS5pbmRleE9mKG5bYV0raVtvXSkpcmV0dXJuITA7cmV0dXJuITF9cmV0dXJuLTEhPT1lLmluZGV4T2Yoci5nZXRTdWJwbG90KHQpKX0sci5mbGF0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aCksbj0wO248dC5sZW5ndGg7bisrKXJbbl09ZTtyZXR1cm4gcn0sci5wMmM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDtuKyspcltuXT10W25dLnAyYyhlKTtyZXR1cm4gcn0sci5nZXREaXN0YW5jZUZ1bmN0aW9uPWZ1bmN0aW9uKHQsZSxuLGkpe3JldHVyblwiY2xvc2VzdFwiPT09dD9pfHxyLnF1YWRyYXR1cmUoZSxuKTpcInhcIj09PXQ/ZTpufSxyLmdldENsb3Nlc3Q9ZnVuY3Rpb24odCxlLHIpe2lmKCExIT09ci5pbmRleClyLmluZGV4Pj0wJiZyLmluZGV4PHQubGVuZ3RoP3IuZGlzdGFuY2U9MDpyLmluZGV4PSExO2Vsc2UgZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPWUodFtuXSk7aTw9ci5kaXN0YW5jZSYmKHIuaW5kZXg9bixyLmRpc3RhbmNlPWkpfXJldHVybiByfSxyLmluYm94PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdCplPDB8fDA9PT10P3I6MS8wfSxyLnF1YWRyYXR1cmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49dChyKSxpPWUocik7cmV0dXJuIE1hdGguc3FydChuKm4raSppKX19LHIubWFrZUV2ZW50RGF0YT1mdW5jdGlvbih0LGUsbil7dmFyIGk9XCJpbmRleFwiaW4gdD90LmluZGV4OnQucG9pbnROdW1iZXIsYT17ZGF0YTplLl9pbnB1dCxmdWxsRGF0YTplLGN1cnZlTnVtYmVyOmUuaW5kZXgscG9pbnROdW1iZXI6aX07aWYoZS5faW5kZXhUb1BvaW50cyl7dmFyIG89ZS5faW5kZXhUb1BvaW50c1tpXTsxPT09by5sZW5ndGg/YS5wb2ludEluZGV4PW9bMF06YS5wb2ludEluZGljZXM9b31lbHNlIGEucG9pbnRJbmRleD1pO3JldHVybiBlLl9tb2R1bGUuZXZlbnREYXRhP2E9ZS5fbW9kdWxlLmV2ZW50RGF0YShhLHQsZSxuLGkpOihcInhWYWxcImluIHQ/YS54PXQueFZhbDpcInhcImluIHQmJihhLng9dC54KSxcInlWYWxcImluIHQ/YS55PXQueVZhbDpcInlcImluIHQmJihhLnk9dC55KSx0LnhhJiYoYS54YXhpcz10LnhhKSx0LnlhJiYoYS55YXhpcz10LnlhKSx2b2lkIDAhPT10LnpMYWJlbFZhbCYmKGEuej10LnpMYWJlbFZhbCkpLHIuYXBwZW5kQXJyYXlQb2ludFZhbHVlKGEsZSxpKSxhfSxyLmFwcGVuZEFycmF5UG9pbnRWYWx1ZT1mdW5jdGlvbih0LGUscil7dmFyIGk9ZS5fYXJyYXlBdHRycztpZihpKWZvcih2YXIgcz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbD1pW3NdLGM9YShsKTtpZih2b2lkIDA9PT10W2NdKXt2YXIgdT1vKG4ubmVzdGVkUHJvcGVydHkoZSxsKS5nZXQoKSxyKTt2b2lkIDAhPT11JiYodFtjXT11KX19fSxyLmFwcGVuZEFycmF5TXVsdGlQb2ludFZhbHVlcz1mdW5jdGlvbih0LGUscil7dmFyIGk9ZS5fYXJyYXlBdHRycztpZihpKWZvcih2YXIgcz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbD1pW3NdLGM9YShsKTtpZih2b2lkIDA9PT10W2NdKXtmb3IodmFyIHU9bi5uZXN0ZWRQcm9wZXJ0eShlLGwpLmdldCgpLGg9bmV3IEFycmF5KHIubGVuZ3RoKSxmPTA7ZjxyLmxlbmd0aDtmKyspaFtmXT1vKHUscltmXSk7dFtjXT1ofX19O3ZhciBpPXtpZHM6XCJpZFwiLGxvY2F0aW9uczpcImxvY2F0aW9uXCIsbGFiZWxzOlwibGFiZWxcIix2YWx1ZXM6XCJ2YWx1ZVwiLFwibWFya2VyLmNvbG9yc1wiOlwiY29sb3JcIixwYXJlbnRzOlwicGFyZW50XCJ9O2Z1bmN0aW9uIGEodCl7cmV0dXJuIGlbdF18fHR9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP0FycmF5LmlzQXJyYXkodCkmJkFycmF5LmlzQXJyYXkodFtlWzBdXSk/dFtlWzBdXVtlWzFdXTp2b2lkIDA6dFtlXX19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDYxNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxhPXQoXCJ0aW55Y29sb3IyXCIpLG89dChcIi4uLy4uL2xpYlwiKSxzPXQoXCIuLi8uLi9saWIvZXZlbnRzXCIpLGw9dChcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiKSxjPXQoXCIuLi8uLi9saWIvb3ZlcnJpZGVfY3Vyc29yXCIpLHU9dChcIi4uL2RyYXdpbmdcIiksaD10KFwiLi4vY29sb3JcIiksZj10KFwiLi4vZHJhZ2VsZW1lbnRcIikscD10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksZD10KFwiLi4vLi4vcmVnaXN0cnlcIiksZz10KFwiLi9oZWxwZXJzXCIpLHY9dChcIi4vY29uc3RhbnRzXCIpLG09di5ZQU5HTEUseT1NYXRoLlBJKm0vMTgwLHg9MS9NYXRoLnNpbih5KSxiPU1hdGguY29zKHkpLF89TWF0aC5zaW4oeSksdz12LkhPVkVSQVJST1dTSVpFLGs9di5IT1ZFUlRFWFRQQUQ7ci5ob3Zlcj1mdW5jdGlvbih0LGUscixhKXt0PW8uZ2V0R3JhcGhEaXYodCksby50aHJvdHRsZSh0Ll9mdWxsTGF5b3V0Ll91aWQrdi5IT1ZFUklELHYuSE9WRVJNSU5USU1FLGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQsZSxyLGEpe3J8fChyPVwieHlcIik7dmFyIGw9QXJyYXkuaXNBcnJheShyKT9yOltyXSx1PXQuX2Z1bGxMYXlvdXQsdj11Ll9wbG90c3x8W10sbT12W3JdLHk9dS5faGFzKFwiY2FydGVzaWFuXCIpO2lmKG0pe3ZhciBiPW0ub3ZlcmxheXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSk7bD1sLmNvbmNhdChiKX1mb3IodmFyIF89bC5sZW5ndGgsdz1uZXcgQXJyYXkoXyksaz1uZXcgQXJyYXkoXyksQT0hMSxMPTA7TDxfO0wrKyl7dmFyIHo9bFtMXSxPPXZbel07aWYoTylBPSEwLHdbTF09cC5nZXRGcm9tSWQodCxPLnhheGlzLl9pZCksa1tMXT1wLmdldEZyb21JZCh0LE8ueWF4aXMuX2lkKTtlbHNle3ZhciBJPXVbel0uX3N1YnBsb3Q7d1tMXT1JLnhheGlzLGtbTF09SS55YXhpc319dmFyIEQ9ZS5ob3Zlcm1vZGV8fHUuaG92ZXJtb2RlO0QmJiFBJiYoRD1cImNsb3Nlc3RcIik7aWYoLTE9PT1bXCJ4XCIsXCJ5XCIsXCJjbG9zZXN0XCJdLmluZGV4T2YoRCl8fCF0LmNhbGNkYXRhfHx0LnF1ZXJ5U2VsZWN0b3IoXCIuem9vbWJveFwiKXx8dC5fZHJhZ2dpbmcpcmV0dXJuIGYudW5ob3ZlclJhdyh0LGUpO3ZhciBQLFIsRixCLE4saixWLFUscSxILEcsWSxXLFg9LTE9PT11LmhvdmVyZGlzdGFuY2U/MS8wOnUuaG92ZXJkaXN0YW5jZSxaPS0xPT09dS5zcGlrZWRpc3RhbmNlPzEvMDp1LnNwaWtlZGlzdGFuY2UsJD1bXSxKPVtdLEs9e2hMaW5lUG9pbnQ6bnVsbCx2TGluZVBvaW50Om51bGx9LFE9ITE7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IoRD1cImFycmF5XCIsRj0wO0Y8ZS5sZW5ndGg7RisrKShOPXQuY2FsY2RhdGFbZVtGXS5jdXJ2ZU51bWJlcnx8MF0pJiYoaj1OWzBdLnRyYWNlLFwic2tpcFwiIT09TlswXS50cmFjZS5ob3ZlcmluZm8mJihKLnB1c2goTiksXCJoXCI9PT1qLm9yaWVudGF0aW9uJiYoUT0hMCkpKTtlbHNle2ZvcihCPTA7Qjx0LmNhbGNkYXRhLmxlbmd0aDtCKyspTj10LmNhbGNkYXRhW0JdLFwic2tpcFwiIT09KGo9TlswXS50cmFjZSkuaG92ZXJpbmZvJiZnLmlzVHJhY2VJblN1YnBsb3RzKGosbCkmJihKLnB1c2goTiksXCJoXCI9PT1qLm9yaWVudGF0aW9uJiYoUT0hMCkpO3ZhciB0dCxldCxydD0hZS50YXJnZXQ7aWYocnQpdHQ9XCJ4cHhcImluIGU/ZS54cHg6d1swXS5fbGVuZ3RoLzIsZXQ9XCJ5cHhcImluIGU/ZS55cHg6a1swXS5fbGVuZ3RoLzI7ZWxzZXtpZighMT09PXMudHJpZ2dlckhhbmRsZXIodCxcInBsb3RseV9iZWZvcmVob3ZlclwiLGUpKXJldHVybjt2YXIgbnQ9ZS50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYodHQ9ZS5jbGllbnRYLW50LmxlZnQsZXQ9ZS5jbGllbnRZLW50LnRvcCx0dDwwfHx0dD53WzBdLl9sZW5ndGh8fGV0PDB8fGV0PmtbMF0uX2xlbmd0aClyZXR1cm4gZi51bmhvdmVyUmF3KHQsZSl9aWYoZS5wb2ludGVyWD10dCt3WzBdLl9vZmZzZXQsZS5wb2ludGVyWT1ldCtrWzBdLl9vZmZzZXQsUD1cInh2YWxcImluIGU/Zy5mbGF0KGwsZS54dmFsKTpnLnAyYyh3LHR0KSxSPVwieXZhbFwiaW4gZT9nLmZsYXQobCxlLnl2YWwpOmcucDJjKGssZXQpLCFpKFBbMF0pfHwhaShSWzBdKSlyZXR1cm4gby53YXJuKFwiRnguaG92ZXIgZmFpbGVkXCIsZSx0KSxmLnVuaG92ZXJSYXcodCxlKX12YXIgaXQ9MS8wO2ZvcihCPTA7QjxKLmxlbmd0aDtCKyspaWYoKE49SltCXSkmJk5bMF0mJk5bMF0udHJhY2UmJiEwPT09TlswXS50cmFjZS52aXNpYmxlJiYoaj1OWzBdLnRyYWNlLC0xPT09W1wiY2FycGV0XCIsXCJjb250b3VyY2FycGV0XCJdLmluZGV4T2Yoai5fbW9kdWxlLm5hbWUpKSl7aWYoXCJzcGxvbVwiPT09ai50eXBlP1Y9bFtVPTBdOihWPWcuZ2V0U3VicGxvdChqKSxVPWwuaW5kZXhPZihWKSkscT1ELFk9e2NkOk4sdHJhY2U6aix4YTp3W1VdLHlhOmtbVV0sbWF4SG92ZXJEaXN0YW5jZTpYLG1heFNwaWtlRGlzdGFuY2U6WixpbmRleDohMSxkaXN0YW5jZTpNYXRoLm1pbihpdCxYKSxzcGlrZURpc3RhbmNlOjEvMCx4U3Bpa2U6dm9pZCAwLHlTcGlrZTp2b2lkIDAsY29sb3I6aC5kZWZhdWx0TGluZSxuYW1lOmoubmFtZSx4MDp2b2lkIDAseDE6dm9pZCAwLHkwOnZvaWQgMCx5MTp2b2lkIDAseExhYmVsVmFsOnZvaWQgMCx5TGFiZWxWYWw6dm9pZCAwLHpMYWJlbFZhbDp2b2lkIDAsdGV4dDp2b2lkIDB9LHVbVl0mJihZLnN1YnBsb3Q9dVtWXS5fc3VicGxvdCksdS5fc3Bsb21TY2VuZXMmJnUuX3NwbG9tU2NlbmVzW2oudWlkXSYmKFkuc2NlbmU9dS5fc3Bsb21TY2VuZXNbai51aWRdKSxXPSQubGVuZ3RoLFwiYXJyYXlcIj09PXEpe3ZhciBhdD1lW0JdO1wicG9pbnROdW1iZXJcImluIGF0PyhZLmluZGV4PWF0LnBvaW50TnVtYmVyLHE9XCJjbG9zZXN0XCIpOihxPVwiXCIsXCJ4dmFsXCJpbiBhdCYmKEg9YXQueHZhbCxxPVwieFwiKSxcInl2YWxcImluIGF0JiYoRz1hdC55dmFsLHE9cT9cImNsb3Nlc3RcIjpcInlcIikpfWVsc2UgSD1QW1VdLEc9UltVXTtpZigwIT09WClpZihqLl9tb2R1bGUmJmouX21vZHVsZS5ob3ZlclBvaW50cyl7dmFyIG90PWouX21vZHVsZS5ob3ZlclBvaW50cyhZLEgsRyxxLHUuX2hvdmVybGF5ZXIpO2lmKG90KWZvcih2YXIgc3QsbHQ9MDtsdDxvdC5sZW5ndGg7bHQrKylzdD1vdFtsdF0saShzdC54MCkmJmkoc3QueTApJiYkLnB1c2goUyhzdCxEKSl9ZWxzZSBvLmxvZyhcIlVucmVjb2duaXplZCB0cmFjZSB0eXBlIGluIGhvdmVyOlwiLGopO2lmKFwiY2xvc2VzdFwiPT09RCYmJC5sZW5ndGg+VyYmKCQuc3BsaWNlKDAsVyksaXQ9JFswXS5kaXN0YW5jZSkseSYmMCE9PVomJjA9PT0kLmxlbmd0aCl7WS5kaXN0YW5jZT1aLFkuaW5kZXg9ITE7dmFyIGN0PWouX21vZHVsZS5ob3ZlclBvaW50cyhZLEgsRyxcImNsb3Nlc3RcIix1Ll9ob3ZlcmxheWVyKTtpZihjdCYmKGN0PWN0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5zcGlrZURpc3RhbmNlPD1afSkpLGN0JiZjdC5sZW5ndGgpe3ZhciB1dCxodD1jdC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQueGEuc2hvd3NwaWtlc30pO2lmKGh0Lmxlbmd0aCl7dmFyIGZ0PWh0WzBdO2koZnQueDApJiZpKGZ0LnkwKSYmKHV0PXZ0KGZ0KSwoIUsudkxpbmVQb2ludHx8Sy52TGluZVBvaW50LnNwaWtlRGlzdGFuY2U+dXQuc3Bpa2VEaXN0YW5jZSkmJihLLnZMaW5lUG9pbnQ9dXQpKX12YXIgcHQ9Y3QuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnlhLnNob3dzcGlrZXN9KTtpZihwdC5sZW5ndGgpe3ZhciBkdD1wdFswXTtpKGR0LngwKSYmaShkdC55MCkmJih1dD12dChkdCksKCFLLmhMaW5lUG9pbnR8fEsuaExpbmVQb2ludC5zcGlrZURpc3RhbmNlPnV0LnNwaWtlRGlzdGFuY2UpJiYoSy5oTGluZVBvaW50PXV0KSl9fX19ZnVuY3Rpb24gZ3QodCxlKXtmb3IodmFyIHIsbj1udWxsLGk9MS8wLGE9MDthPHQubGVuZ3RoO2ErKykocj10W2FdLnNwaWtlRGlzdGFuY2UpPGkmJnI8PWUmJihuPXRbYV0saT1yKTtyZXR1cm4gbn1mdW5jdGlvbiB2dCh0KXtyZXR1cm4gdD97eGE6dC54YSx5YTp0LnlhLHg6dm9pZCAwIT09dC54U3Bpa2U/dC54U3Bpa2U6KHQueDArdC54MSkvMix5OnZvaWQgMCE9PXQueVNwaWtlP3QueVNwaWtlOih0LnkwK3QueTEpLzIsZGlzdGFuY2U6dC5kaXN0YW5jZSxzcGlrZURpc3RhbmNlOnQuc3Bpa2VEaXN0YW5jZSxjdXJ2ZU51bWJlcjp0LnRyYWNlLmluZGV4LGNvbG9yOnQuY29sb3IscG9pbnROdW1iZXI6dC5pbmRleH06bnVsbH12YXIgbXQ9e2Z1bGxMYXlvdXQ6dSxjb250YWluZXI6dS5faG92ZXJsYXllcixvdXRlckNvbnRhaW5lcjp1Ll9wYXBlcmRpdixldmVudDplfSx5dD10Ll9zcGlrZXBvaW50cyx4dD17dkxpbmVQb2ludDpLLnZMaW5lUG9pbnQsaExpbmVQb2ludDpLLmhMaW5lUG9pbnR9O2lmKHQuX3NwaWtlcG9pbnRzPXh0LHkmJjAhPT1aJiYwIT09JC5sZW5ndGgpe3ZhciBidD0kLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC55YS5zaG93c3Bpa2VzfSksX3Q9Z3QoYnQsWik7Sy5oTGluZVBvaW50PXZ0KF90KTt2YXIgd3Q9JC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQueGEuc2hvd3NwaWtlc30pLGt0PWd0KHd0LFopO0sudkxpbmVQb2ludD12dChrdCl9aWYoMD09PSQubGVuZ3RoKXt2YXIgQXQ9Zi51bmhvdmVyUmF3KHQsZSk7cmV0dXJuIXl8fG51bGw9PT1LLmhMaW5lUG9pbnQmJm51bGw9PT1LLnZMaW5lUG9pbnR8fEMoeXQpJiZFKEssbXQpLEF0fXkmJkMoeXQpJiZFKEssbXQpOyQuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmRpc3RhbmNlLWUuZGlzdGFuY2V9KTt2YXIgVHQ9dC5faG92ZXJkYXRhLE10PVtdO2ZvcihGPTA7RjwkLmxlbmd0aDtGKyspe3ZhciBTdD0kW0ZdLEV0PWcubWFrZUV2ZW50RGF0YShTdCxTdC50cmFjZSxTdC5jZCk7aWYoITEhPT1TdC5ob3ZlcnRlbXBsYXRlKXt2YXIgQ3Q9ITE7U3QuY2RbU3QuaW5kZXhdJiZTdC5jZFtTdC5pbmRleF0uaHQmJihDdD1TdC5jZFtTdC5pbmRleF0uaHQpLFN0LmhvdmVydGVtcGxhdGU9Q3R8fFN0LnRyYWNlLmhvdmVydGVtcGxhdGV8fCExfVN0LmV2ZW50RGF0YT1bRXRdLE10LnB1c2goRXQpfXQuX2hvdmVyZGF0YT1NdDt2YXIgTHQ9XCJ5XCI9PT1EJiYoSi5sZW5ndGg+MXx8JC5sZW5ndGg+MSl8fFwiY2xvc2VzdFwiPT09RCYmUSYmJC5sZW5ndGg+MSx6dD1oLmNvbWJpbmUodS5wbG90X2JnY29sb3J8fGguYmFja2dyb3VuZCx1LnBhcGVyX2JnY29sb3IpLE90PXtob3Zlcm1vZGU6RCxyb3RhdGVMYWJlbHM6THQsYmdDb2xvcjp6dCxjb250YWluZXI6dS5faG92ZXJsYXllcixvdXRlckNvbnRhaW5lcjp1Ll9wYXBlcmRpdixjb21tb25MYWJlbE9wdHM6dS5ob3ZlcmxhYmVsLGhvdmVyZGlzdGFuY2U6dS5ob3ZlcmRpc3RhbmNlfSxJdD1UKCQsT3QsdCk7aWYoZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHMsbCxjLHU9MCxoPTEsZj10LnNpemUoKSxwPW5ldyBBcnJheShmKTtmdW5jdGlvbiBkKHQpe3ZhciBlPXRbMF0scj10W3QubGVuZ3RoLTFdO2lmKGk9ZS5wbWluLWUucG9zLWUuZHArZS5zaXplLGE9ci5wb3Mrci5kcCtyLnNpemUtZS5wbWF4LGk+LjAxKXtmb3Iocz10Lmxlbmd0aC0xO3M+PTA7cy0tKXRbc10uZHArPWk7bj0hMX1pZighKGE8LjAxKSl7aWYoaTwtLjAxKXtmb3Iocz10Lmxlbmd0aC0xO3M+PTA7cy0tKXRbc10uZHAtPWE7bj0hMX1pZihuKXt2YXIgYz0wO2ZvcihvPTA7bzx0Lmxlbmd0aDtvKyspKGw9dFtvXSkucG9zK2wuZHArbC5zaXplPmUucG1heCYmYysrO2ZvcihvPXQubGVuZ3RoLTE7bz49MCYmIShjPD0wKTtvLS0pKGw9dFtvXSkucG9zPmUucG1heC0xJiYobC5kZWw9ITAsYy0tKTtmb3Iobz0wO288dC5sZW5ndGgmJiEoYzw9MCk7bysrKWlmKChsPXRbb10pLnBvczxlLnBtaW4rMSlmb3IobC5kZWw9ITAsYy0tLGE9MipsLnNpemUscz10Lmxlbmd0aC0xO3M+PTA7cy0tKXRbc10uZHAtPWE7Zm9yKG89dC5sZW5ndGgtMTtvPj0wJiYhKGM8PTApO28tLSkobD10W29dKS5wb3MrbC5kcCtsLnNpemU+ZS5wbWF4JiYobC5kZWw9ITAsYy0tKX19fWZvcih0LmVhY2goZnVuY3Rpb24odCxuKXt2YXIgaT10W2VdLGE9XCJ4XCI9PT1pLl9pZC5jaGFyQXQoMCksbz1pLnJhbmdlOyFuJiZvJiZvWzBdPm9bMV0hPT1hJiYoaD0tMSkscFtuXT1be2RhdHVtOnQsaTpuLHRyYWNlSW5kZXg6dC50cmFjZS5pbmRleCxkcDowLHBvczp0LnBvcyxwb3NyZWY6dC5wb3NyZWYsc2l6ZTp0LmJ5KihhP3g6MSkvMixwbWluOjAscG1heDphP3Iud2lkdGg6ci5oZWlnaHR9XX0pLHAuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0WzBdLnBvc3JlZi1lWzBdLnBvc3JlZnx8aCooZVswXS50cmFjZUluZGV4LXRbMF0udHJhY2VJbmRleCl9KTshbiYmdTw9Zjspe2Zvcih1Kyssbj0hMCxvPTA7bzxwLmxlbmd0aC0xOyl7dmFyIGc9cFtvXSx2PXBbbysxXSxtPWdbZy5sZW5ndGgtMV0seT12WzBdO2lmKChpPW0ucG9zK20uZHArbS5zaXplLXkucG9zLXkuZHAreS5zaXplKT4uMDEmJm0ucG1pbj09PXkucG1pbiYmbS5wbWF4PT09eS5wbWF4KXtmb3Iocz12Lmxlbmd0aC0xO3M+PTA7cy0tKXZbc10uZHArPWk7Zm9yKGcucHVzaC5hcHBseShnLHYpLHAuc3BsaWNlKG8rMSwxKSxjPTAscz1nLmxlbmd0aC0xO3M+PTA7cy0tKWMrPWdbc10uZHA7Zm9yKGE9Yy9nLmxlbmd0aCxzPWcubGVuZ3RoLTE7cz49MDtzLS0pZ1tzXS5kcC09YTtuPSExfWVsc2UgbysrfXAuZm9yRWFjaChkKX1mb3Iobz1wLmxlbmd0aC0xO28+PTA7by0tKXt2YXIgYj1wW29dO2ZvcihzPWIubGVuZ3RoLTE7cz49MDtzLS0pe3ZhciBfPWJbc10sdz1fLmRhdHVtO3cub2Zmc2V0PV8uZHAsdy5kZWw9Xy5kZWx9fX0oSXQsTHQ/XCJ4YVwiOlwieWFcIix1KSxNKEl0LEx0KSxlLnRhcmdldCYmZS50YXJnZXQudGFnTmFtZSl7dmFyIER0PWQuZ2V0Q29tcG9uZW50TWV0aG9kKFwiYW5ub3RhdGlvbnNcIixcImhhc0NsaWNrVG9TaG93XCIpKHQsTXQpO2Mobi5zZWxlY3QoZS50YXJnZXQpLER0P1wicG9pbnRlclwiOlwiXCIpfWlmKCFlLnRhcmdldHx8YXx8IWZ1bmN0aW9uKHQsZSxyKXtpZighcnx8ci5sZW5ndGghPT10Ll9ob3ZlcmRhdGEubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgbj1yLmxlbmd0aC0xO24+PTA7bi0tKXt2YXIgaT1yW25dLGE9dC5faG92ZXJkYXRhW25dO2lmKGkuY3VydmVOdW1iZXIhPT1hLmN1cnZlTnVtYmVyfHxTdHJpbmcoaS5wb2ludE51bWJlcikhPT1TdHJpbmcoYS5wb2ludE51bWJlcil8fFN0cmluZyhpLnBvaW50TnVtYmVycykhPT1TdHJpbmcoYS5wb2ludE51bWJlcnMpKXJldHVybiEwfXJldHVybiExfSh0LDAsVHQpKXJldHVybjtUdCYmdC5lbWl0KFwicGxvdGx5X3VuaG92ZXJcIix7ZXZlbnQ6ZSxwb2ludHM6VHR9KTt0LmVtaXQoXCJwbG90bHlfaG92ZXJcIix7ZXZlbnQ6ZSxwb2ludHM6dC5faG92ZXJkYXRhLHhheGVzOncseWF4ZXM6ayx4dmFsczpQLHl2YWxzOlJ9KX0odCxlLHIsYSl9KX0sci5sb25lSG92ZXI9ZnVuY3Rpb24odCxlKXt2YXIgcj17Y29sb3I6dC5jb2xvcnx8aC5kZWZhdWx0TGluZSx4MDp0LngwfHx0Lnh8fDAseDE6dC54MXx8dC54fHwwLHkwOnQueTB8fHQueXx8MCx5MTp0LnkxfHx0Lnl8fDAseExhYmVsOnQueExhYmVsLHlMYWJlbDp0LnlMYWJlbCx6TGFiZWw6dC56TGFiZWwsdGV4dDp0LnRleHQsbmFtZTp0Lm5hbWUsaWRlYWxBbGlnbjp0LmlkZWFsQWxpZ24sYm9yZGVyQ29sb3I6dC5ib3JkZXJDb2xvcixmb250RmFtaWx5OnQuZm9udEZhbWlseSxmb250U2l6ZTp0LmZvbnRTaXplLGZvbnRDb2xvcjp0LmZvbnRDb2xvcixuYW1lTGVuZ3RoOnQubmFtZUxlbmd0aCx0ZXh0QWxpZ246dC50ZXh0QWxpZ24sdHJhY2U6dC50cmFjZXx8e2luZGV4OjAsaG92ZXJpbmZvOlwiXCJ9LHhhOntfb2Zmc2V0OjB9LHlhOntfb2Zmc2V0OjB9LGluZGV4OjAsaG92ZXJ0ZW1wbGF0ZTp0LmhvdmVydGVtcGxhdGV8fCExLGV2ZW50RGF0YTp0LmV2ZW50RGF0YXx8ITEsaG92ZXJ0ZW1wbGF0ZUxhYmVsczp0LmhvdmVydGVtcGxhdGVMYWJlbHN8fCExfSxpPW4uc2VsZWN0KGUuY29udGFpbmVyKSxhPWUub3V0ZXJDb250YWluZXI/bi5zZWxlY3QoZS5vdXRlckNvbnRhaW5lcik6aSxvPXtob3Zlcm1vZGU6XCJjbG9zZXN0XCIscm90YXRlTGFiZWxzOiExLGJnQ29sb3I6ZS5iZ0NvbG9yfHxoLmJhY2tncm91bmQsY29udGFpbmVyOmksb3V0ZXJDb250YWluZXI6YX0scz1UKFtyXSxvLGUuZ2QpO3JldHVybiBNKHMsby5yb3RhdGVMYWJlbHMpLHMubm9kZSgpfSxyLm11bHRpSG92ZXJzPWZ1bmN0aW9uKHQsZSl7QXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKTt2YXIgcj10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm57Y29sb3I6dC5jb2xvcnx8aC5kZWZhdWx0TGluZSx4MDp0LngwfHx0Lnh8fDAseDE6dC54MXx8dC54fHwwLHkwOnQueTB8fHQueXx8MCx5MTp0LnkxfHx0Lnl8fDAseExhYmVsOnQueExhYmVsLHlMYWJlbDp0LnlMYWJlbCx6TGFiZWw6dC56TGFiZWwsdGV4dDp0LnRleHQsbmFtZTp0Lm5hbWUsaWRlYWxBbGlnbjp0LmlkZWFsQWxpZ24sYm9yZGVyQ29sb3I6dC5ib3JkZXJDb2xvcixmb250RmFtaWx5OnQuZm9udEZhbWlseSxmb250U2l6ZTp0LmZvbnRTaXplLGZvbnRDb2xvcjp0LmZvbnRDb2xvcixuYW1lTGVuZ3RoOnQubmFtZUxlbmd0aCx0ZXh0QWxpZ246dC50ZXh0QWxpZ24sdHJhY2U6dC50cmFjZXx8e2luZGV4OjAsaG92ZXJpbmZvOlwiXCJ9LHhhOntfb2Zmc2V0OjB9LHlhOntfb2Zmc2V0OjB9LGluZGV4OjAsaG92ZXJ0ZW1wbGF0ZTp0LmhvdmVydGVtcGxhdGV8fCExLGV2ZW50RGF0YTp0LmV2ZW50RGF0YXx8ITEsaG92ZXJ0ZW1wbGF0ZUxhYmVsczp0LmhvdmVydGVtcGxhdGVMYWJlbHN8fCExfX0pLGk9bi5zZWxlY3QoZS5jb250YWluZXIpLGE9ZS5vdXRlckNvbnRhaW5lcj9uLnNlbGVjdChlLm91dGVyQ29udGFpbmVyKTppLG89e2hvdmVybW9kZTpcImNsb3Nlc3RcIixyb3RhdGVMYWJlbHM6ITEsYmdDb2xvcjplLmJnQ29sb3J8fGguYmFja2dyb3VuZCxjb250YWluZXI6aSxvdXRlckNvbnRhaW5lcjphfSxzPVQocixvLGUuZ2QpLGw9MCxjPTA7cmV0dXJuIHMuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LnkwLWUueTB9KS5lYWNoKGZ1bmN0aW9uKHQscil7dmFyIG49dC55MC10LmJ5LzI7dC5vZmZzZXQ9bi01PGw/bC1uKzU6MCxsPW4rdC5ieSt0Lm9mZnNldCxyPT09ZS5hbmNob3JJbmRleCYmKGM9dC5vZmZzZXQpfSkuZWFjaChmdW5jdGlvbih0KXt0Lm9mZnNldC09Y30pLE0ocyxvLnJvdGF0ZUxhYmVscyksc307dmFyIEE9LzxleHRyYT4oW1xcc1xcU10qKTxcXC9leHRyYT4vO2Z1bmN0aW9uIFQodCxlLHIpe3ZhciBpPXIuX2Z1bGxMYXlvdXQsYT1lLmhvdmVybW9kZSxzPWUucm90YXRlTGFiZWxzLGM9ZS5iZ0NvbG9yLGY9ZS5jb250YWluZXIscD1lLm91dGVyQ29udGFpbmVyLGQ9ZS5jb21tb25MYWJlbE9wdHN8fHt9LGc9ZS5mb250RmFtaWx5fHx2LkhPVkVSRk9OVCx5PWUuZm9udFNpemV8fHYuSE9WRVJGT05UU0laRSx4PXRbMF0sYj14LnhhLF89eC55YSxUPVwieVwiPT09YT9cInlMYWJlbFwiOlwieExhYmVsXCIsTT14W1RdLFM9KFN0cmluZyhNKXx8XCJcIikuc3BsaXQoXCIgXCIpWzBdLEU9cC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksQz1FLnRvcCx6PUUud2lkdGgsTz1FLmhlaWdodCxJPXZvaWQgMCE9PU0mJnguZGlzdGFuY2U8PWUuaG92ZXJkaXN0YW5jZSYmKFwieFwiPT09YXx8XCJ5XCI9PT1hKTtpZihJKXt2YXIgRCxQLFI9ITA7Zm9yKEQ9MDtEPHQubGVuZ3RoO0QrKylpZihSJiZ2b2lkIDA9PT10W0RdLnpMYWJlbCYmKFI9ITEpLFA9dFtEXS5ob3ZlcmluZm98fHRbRF0udHJhY2UuaG92ZXJpbmZvKXt2YXIgRj1BcnJheS5pc0FycmF5KFApP1A6UC5zcGxpdChcIitcIik7aWYoLTE9PT1GLmluZGV4T2YoXCJhbGxcIikmJi0xPT09Ri5pbmRleE9mKGEpKXtJPSExO2JyZWFrfX1SJiYoST0hMSl9dmFyIEI9Zi5zZWxlY3RBbGwoXCJnLmF4aXN0ZXh0XCIpLmRhdGEoST9bMF06W10pO0IuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJheGlzdGV4dFwiLCEwKSxCLmV4aXQoKS5yZW1vdmUoKSxCLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxpPW8uZW5zdXJlU2luZ2xlKGUsXCJwYXRoXCIsXCJcIixmdW5jdGlvbih0KXt0LnN0eWxlKHtcInN0cm9rZS13aWR0aFwiOlwiMXB4XCJ9KX0pLHM9by5lbnN1cmVTaW5nbGUoZSxcInRleHRcIixcIlwiLGZ1bmN0aW9uKHQpe3QuYXR0cihcImRhdGEtbm90ZXhcIiwxKX0pLGM9ZC5iZ2NvbG9yfHxoLmRlZmF1bHRMaW5lLGY9ZC5ib3JkZXJjb2xvcnx8aC5jb250cmFzdChjKSxwPWguY29udHJhc3QoYyk7aS5zdHlsZSh7ZmlsbDpjLHN0cm9rZTpmfSkscy50ZXh0KE0pLmNhbGwodS5mb250LGQuZm9udC5mYW1pbHl8fGcsZC5mb250LnNpemV8fHksZC5mb250LmNvbG9yfHxwKS5jYWxsKGwucG9zaXRpb25UZXh0LDAsMCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyxyKSxlLmF0dHIoXCJ0cmFuc2Zvcm1cIixcIlwiKTt2YXIgdj1zLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihcInhcIj09PWEpe3MuYXR0cihcInRleHQtYW5jaG9yXCIsXCJtaWRkbGVcIikuY2FsbChsLnBvc2l0aW9uVGV4dCwwLFwidG9wXCI9PT1iLnNpZGU/Qy12LmJvdHRvbS13LWs6Qy12LnRvcCt3K2spO3ZhciBtPVwidG9wXCI9PT1iLnNpZGU/XCItXCI6XCJcIjtpLmF0dHIoXCJkXCIsXCJNMCwwTFwiK3crXCIsXCIrbSt3K1wiSFwiKyhrK3Yud2lkdGgvMikrXCJ2XCIrbSsoMiprK3YuaGVpZ2h0KStcIkgtXCIrKGsrdi53aWR0aC8yKStcIlZcIittK3crXCJILVwiK3crXCJaXCIpLGUuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiKyhiLl9vZmZzZXQrKHgueDAreC54MSkvMikrXCIsXCIrKF8uX29mZnNldCsoXCJ0b3BcIj09PWIuc2lkZT8wOl8uX2xlbmd0aCkpK1wiKVwiKX1lbHNle3MuYXR0cihcInRleHQtYW5jaG9yXCIsXCJyaWdodFwiPT09Xy5zaWRlP1wic3RhcnRcIjpcImVuZFwiKS5jYWxsKGwucG9zaXRpb25UZXh0LChcInJpZ2h0XCI9PT1fLnNpZGU/MTotMSkqKGsrdyksQy12LnRvcC12LmhlaWdodC8yKTt2YXIgQT1cInJpZ2h0XCI9PT1fLnNpZGU/XCJcIjpcIi1cIjtpLmF0dHIoXCJkXCIsXCJNMCwwTFwiK0ErdytcIixcIit3K1wiVlwiKyhrK3YuaGVpZ2h0LzIpK1wiaFwiK0ErKDIqayt2LndpZHRoKStcIlYtXCIrKGsrdi5oZWlnaHQvMikrXCJIXCIrQSt3K1wiVi1cIit3K1wiWlwiKSxlLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIisoYi5fb2Zmc2V0KyhcInJpZ2h0XCI9PT1fLnNpZGU/Yi5fbGVuZ3RoOjApKStcIixcIisoXy5fb2Zmc2V0Kyh4LnkwK3gueTEpLzIpK1wiKVwiKX10PXQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10LnpMYWJlbFZhbHx8KHRbVF18fFwiXCIpLnNwbGl0KFwiIFwiKVswXT09PVN9KX0pO3ZhciBOPWYuc2VsZWN0QWxsKFwiZy5ob3ZlcnRleHRcIikuZGF0YSh0LGZ1bmN0aW9uKHQpe3JldHVyblt0LnRyYWNlLmluZGV4LHQuaW5kZXgsdC54MCx0LnkwLHQubmFtZSx0LmF0dHIsdC54YSx0LnlhfHxcIlwiXS5qb2luKFwiLFwiKX0pO3JldHVybiBOLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiaG92ZXJ0ZXh0XCIsITApLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTt0LmFwcGVuZChcInJlY3RcIikuY2FsbChoLmZpbGwsaC5hZGRPcGFjaXR5KGMsLjgpKSx0LmFwcGVuZChcInRleHRcIikuY2xhc3NlZChcIm5hbWVcIiwhMCksdC5hcHBlbmQoXCJwYXRoXCIpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsXCIxcHhcIiksdC5hcHBlbmQoXCJ0ZXh0XCIpLmNsYXNzZWQoXCJudW1zXCIsITApLmNhbGwodS5mb250LGcseSl9KSxOLmV4aXQoKS5yZW1vdmUoKSxOLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykuYXR0cihcInRyYW5zZm9ybVwiLFwiXCIpLGY9XCJcIixwPVwiXCIsZD10LmJnY29sb3J8fHQuY29sb3Isdj1oLmNvbWJpbmUoaC5vcGFjaXR5KGQpP2Q6aC5kZWZhdWx0TGluZSxjKSx4PWguY29tYmluZShoLm9wYWNpdHkodC5jb2xvcik/dC5jb2xvcjpoLmRlZmF1bHRMaW5lLGMpLGI9dC5ib3JkZXJDb2xvcnx8aC5jb250cmFzdCh2KTt2b2lkIDAhPT10Lm5hbWVPdmVycmlkZSYmKHQubmFtZT10Lm5hbWVPdmVycmlkZSksdC5uYW1lJiYoaS5tZXRhJiYodC5uYW1lPW8udGVtcGxhdGVTdHJpbmcodC5uYW1lLHttZXRhOmkubWV0YX0pKSxmPUwodC5uYW1lLHQubmFtZUxlbmd0aCkpLHZvaWQgMCE9PXQuekxhYmVsPyh2b2lkIDAhPT10LnhMYWJlbCYmKHArPVwieDogXCIrdC54TGFiZWwrXCI8YnI+XCIpLHZvaWQgMCE9PXQueUxhYmVsJiYocCs9XCJ5OiBcIit0LnlMYWJlbCtcIjxicj5cIikscCs9KHA/XCJ6OiBcIjpcIlwiKSt0LnpMYWJlbCk6SSYmdFthK1wiTGFiZWxcIl09PT1NP3A9dFsoXCJ4XCI9PT1hP1wieVwiOlwieFwiKStcIkxhYmVsXCJdfHxcIlwiOnZvaWQgMD09PXQueExhYmVsP3ZvaWQgMCE9PXQueUxhYmVsJiZcInNjYXR0ZXJjYXJwZXRcIiE9PXQudHJhY2UudHlwZSYmKHA9dC55TGFiZWwpOnA9dm9pZCAwPT09dC55TGFiZWw/dC54TGFiZWw6XCIoXCIrdC54TGFiZWwrXCIsIFwiK3QueUxhYmVsK1wiKVwiLCF0LnRleHQmJjAhPT10LnRleHR8fEFycmF5LmlzQXJyYXkodC50ZXh0KXx8KHArPShwP1wiPGJyPlwiOlwiXCIpK3QudGV4dCksdm9pZCAwIT09dC5leHRyYVRleHQmJihwKz0ocD9cIjxicj5cIjpcIlwiKSt0LmV4dHJhVGV4dCksXCJcIiE9PXB8fHQuaG92ZXJ0ZW1wbGF0ZXx8KFwiXCI9PT1mJiZlLnJlbW92ZSgpLHA9Zik7dmFyIF89ci5fZnVsbExheW91dC5fZDNsb2NhbGUsVD10LmhvdmVydGVtcGxhdGV8fCExLFM9dC5ob3ZlcnRlbXBsYXRlTGFiZWxzfHx0LEU9dC5ldmVudERhdGFbMF18fHt9O1QmJihwPShwPW8uaG92ZXJ0ZW1wbGF0ZVN0cmluZyhULFMsXyxFLHttZXRhOmkubWV0YX0pKS5yZXBsYWNlKEEsZnVuY3Rpb24oZSxyKXtyZXR1cm4gZj1MKHIsdC5uYW1lTGVuZ3RoKSxcIlwifSkpO3ZhciBEPWUuc2VsZWN0KFwidGV4dC5udW1zXCIpLmNhbGwodS5mb250LHQuZm9udEZhbWlseXx8Zyx0LmZvbnRTaXplfHx5LHQuZm9udENvbG9yfHxiKS50ZXh0KHApLmF0dHIoXCJkYXRhLW5vdGV4XCIsMSkuY2FsbChsLnBvc2l0aW9uVGV4dCwwLDApLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsciksUD1lLnNlbGVjdChcInRleHQubmFtZVwiKSxSPTAsRj0wO2lmKGYmJmYhPT1wKXtQLmNhbGwodS5mb250LHQuZm9udEZhbWlseXx8Zyx0LmZvbnRTaXplfHx5LHgpLnRleHQoZikuYXR0cihcImRhdGEtbm90ZXhcIiwxKS5jYWxsKGwucG9zaXRpb25UZXh0LDAsMCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyxyKTt2YXIgQj1QLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtSPUIud2lkdGgrMiprLEY9Qi5oZWlnaHQrMiprfWVsc2UgUC5yZW1vdmUoKSxlLnNlbGVjdChcInJlY3RcIikucmVtb3ZlKCk7ZS5zZWxlY3QoXCJwYXRoXCIpLnN0eWxlKHtmaWxsOnYsc3Ryb2tlOmJ9KTt2YXIgTixqLFY9RC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksVT10LnhhLl9vZmZzZXQrKHQueDArdC54MSkvMixxPXQueWEuX29mZnNldCsodC55MCt0LnkxKS8yLEg9TWF0aC5hYnModC54MS10LngwKSxHPU1hdGguYWJzKHQueTEtdC55MCksWT1WLndpZHRoK3craytSO2lmKHQudHkwPUMtVi50b3AsdC5ieD1WLndpZHRoKzIqayx0LmJ5PU1hdGgubWF4KFYuaGVpZ2h0KzIqayxGKSx0LmFuY2hvcj1cInN0YXJ0XCIsdC50eHdpZHRoPVYud2lkdGgsdC50eDJ3aWR0aD1SLHQub2Zmc2V0PTAscyl0LnBvcz1VLE49cStHLzIrWTw9TyxqPXEtRy8yLVk+PTAsXCJ0b3BcIiE9PXQuaWRlYWxBbGlnbiYmTnx8IWo/Tj8ocSs9Ry8yLHQuYW5jaG9yPVwic3RhcnRcIik6dC5hbmNob3I9XCJtaWRkbGVcIjoocS09Ry8yLHQuYW5jaG9yPVwiZW5kXCIpO2Vsc2UgaWYodC5wb3M9cSxOPVUrSC8yK1k8PXosaj1VLUgvMi1ZPj0wLFwibGVmdFwiIT09dC5pZGVhbEFsaWduJiZOfHwhailpZihOKVUrPUgvMix0LmFuY2hvcj1cInN0YXJ0XCI7ZWxzZXt0LmFuY2hvcj1cIm1pZGRsZVwiO3ZhciBXPVkvMixYPVUrVy16LFo9VS1XO1g+MCYmKFUtPVgpLFo8MCYmKFUrPS1aKX1lbHNlIFUtPUgvMix0LmFuY2hvcj1cImVuZFwiO0QuYXR0cihcInRleHQtYW5jaG9yXCIsdC5hbmNob3IpLFImJlAuYXR0cihcInRleHQtYW5jaG9yXCIsdC5hbmNob3IpLGUuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK1UrXCIsXCIrcStcIilcIisocz9cInJvdGF0ZShcIittK1wiKVwiOlwiXCIpKX0pLE59ZnVuY3Rpb24gTSh0LGUpe3QuZWFjaChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtpZih0LmRlbClyZXR1cm4gci5yZW1vdmUoKTt2YXIgaT1yLnNlbGVjdChcInRleHQubnVtc1wiKSxhPXQuYW5jaG9yLG89XCJlbmRcIj09PWE/LTE6MSxzPXtzdGFydDoxLGVuZDotMSxtaWRkbGU6MH1bYV0sYz1zKih3K2spLGg9YytzKih0LnR4d2lkdGgrayksZj0wLHA9dC5vZmZzZXQ7XCJtaWRkbGVcIj09PWEmJihjLT10LnR4MndpZHRoLzIsaCs9dC50eHdpZHRoLzIrayksZSYmKHAqPS1fLGY9dC5vZmZzZXQqYiksci5zZWxlY3QoXCJwYXRoXCIpLmF0dHIoXCJkXCIsXCJtaWRkbGVcIj09PWE/XCJNLVwiKyh0LmJ4LzIrdC50eDJ3aWR0aC8yKStcIixcIisocC10LmJ5LzIpK1wiaFwiK3QuYngrXCJ2XCIrdC5ieStcImgtXCIrdC5ieCtcIlpcIjpcIk0wLDBMXCIrKG8qdytmKStcIixcIisodytwKStcInZcIisodC5ieS8yLXcpK1wiaFwiK28qdC5ieCtcInYtXCIrdC5ieStcIkhcIisobyp3K2YpK1wiVlwiKyhwLXcpK1wiWlwiKTt2YXIgZD1jK2YsZz1wK3QudHkwLXQuYnkvMitrLHY9dC50ZXh0QWxpZ258fFwiYXV0b1wiO1wiYXV0b1wiIT09diYmKFwibGVmdFwiPT09diYmXCJzdGFydFwiIT09YT8oaS5hdHRyKFwidGV4dC1hbmNob3JcIixcInN0YXJ0XCIpLGQ9LXQuYngtayk6XCJyaWdodFwiPT09diYmXCJlbmRcIiE9PWEmJihpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLFwiZW5kXCIpLGQ9dC5ieCtrKSksaS5jYWxsKGwucG9zaXRpb25UZXh0LGQsZyksdC50eDJ3aWR0aCYmKHIuc2VsZWN0KFwidGV4dC5uYW1lXCIpLmNhbGwobC5wb3NpdGlvblRleHQsaCtzKmsrZixwK3QudHkwLXQuYnkvMitrKSxyLnNlbGVjdChcInJlY3RcIikuY2FsbCh1LnNldFJlY3QsaCsocy0xKSp0LnR4MndpZHRoLzIrZixwLXQuYnkvMi0xLHQudHgyd2lkdGgsdC5ieSsyKSl9KX1mdW5jdGlvbiBTKHQsZSl7dmFyIHI9dC5pbmRleCxuPXQudHJhY2V8fHt9LGE9dC5jZFswXSxzPXQuY2Rbcl18fHt9O2Z1bmN0aW9uIGwodCl7cmV0dXJuIHR8fGkodCkmJjA9PT10fXZhciBjPUFycmF5LmlzQXJyYXkocik/ZnVuY3Rpb24odCxlKXt2YXIgaT1vLmNhc3RPcHRpb24oYSxyLHQpO3JldHVybiBsKGkpP2k6by5leHRyYWN0T3B0aW9uKHt9LG4sXCJcIixlKX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gby5leHRyYWN0T3B0aW9uKHMsbix0LGUpfTtmdW5jdGlvbiB1KGUscixuKXt2YXIgaT1jKHIsbik7bChpKSYmKHRbZV09aSl9aWYodShcImhvdmVyaW5mb1wiLFwiaGlcIixcImhvdmVyaW5mb1wiKSx1KFwiYmdjb2xvclwiLFwiaGJnXCIsXCJob3ZlcmxhYmVsLmJnY29sb3JcIiksdShcImJvcmRlckNvbG9yXCIsXCJoYmNcIixcImhvdmVybGFiZWwuYm9yZGVyY29sb3JcIiksdShcImZvbnRGYW1pbHlcIixcImh0ZlwiLFwiaG92ZXJsYWJlbC5mb250LmZhbWlseVwiKSx1KFwiZm9udFNpemVcIixcImh0c1wiLFwiaG92ZXJsYWJlbC5mb250LnNpemVcIiksdShcImZvbnRDb2xvclwiLFwiaHRjXCIsXCJob3ZlcmxhYmVsLmZvbnQuY29sb3JcIiksdShcIm5hbWVMZW5ndGhcIixcImhubFwiLFwiaG92ZXJsYWJlbC5uYW1lbGVuZ3RoXCIpLHUoXCJ0ZXh0QWxpZ25cIixcImh0YVwiLFwiaG92ZXJsYWJlbC5hbGlnblwiKSx0LnBvc3JlZj1cInlcIj09PWV8fFwiY2xvc2VzdFwiPT09ZSYmXCJoXCI9PT1uLm9yaWVudGF0aW9uP3QueGEuX29mZnNldCsodC54MCt0LngxKS8yOnQueWEuX29mZnNldCsodC55MCt0LnkxKS8yLHQueDA9by5jb25zdHJhaW4odC54MCwwLHQueGEuX2xlbmd0aCksdC54MT1vLmNvbnN0cmFpbih0LngxLDAsdC54YS5fbGVuZ3RoKSx0LnkwPW8uY29uc3RyYWluKHQueTAsMCx0LnlhLl9sZW5ndGgpLHQueTE9by5jb25zdHJhaW4odC55MSwwLHQueWEuX2xlbmd0aCksdm9pZCAwIT09dC54TGFiZWxWYWwmJih0LnhMYWJlbD1cInhMYWJlbFwiaW4gdD90LnhMYWJlbDpwLmhvdmVyTGFiZWxUZXh0KHQueGEsdC54TGFiZWxWYWwpLHQueFZhbD10LnhhLmMyZCh0LnhMYWJlbFZhbCkpLHZvaWQgMCE9PXQueUxhYmVsVmFsJiYodC55TGFiZWw9XCJ5TGFiZWxcImluIHQ/dC55TGFiZWw6cC5ob3ZlckxhYmVsVGV4dCh0LnlhLHQueUxhYmVsVmFsKSx0LnlWYWw9dC55YS5jMmQodC55TGFiZWxWYWwpKSx2b2lkIDAhPT10LnpMYWJlbFZhbCYmdm9pZCAwPT09dC56TGFiZWwmJih0LnpMYWJlbD1TdHJpbmcodC56TGFiZWxWYWwpKSwhKGlzTmFOKHQueGVycil8fFwibG9nXCI9PT10LnhhLnR5cGUmJnQueGVycjw9MCkpe3ZhciBoPXAudGlja1RleHQodC54YSx0LnhhLmMybCh0LnhlcnIpLFwiaG92ZXJcIikudGV4dDt2b2lkIDAhPT10LnhlcnJuZWc/dC54TGFiZWwrPVwiICtcIitoK1wiIC8gLVwiK3AudGlja1RleHQodC54YSx0LnhhLmMybCh0LnhlcnJuZWcpLFwiaG92ZXJcIikudGV4dDp0LnhMYWJlbCs9XCIgXFx4YjEgXCIraCxcInhcIj09PWUmJih0LmRpc3RhbmNlKz0xKX1pZighKGlzTmFOKHQueWVycil8fFwibG9nXCI9PT10LnlhLnR5cGUmJnQueWVycjw9MCkpe3ZhciBmPXAudGlja1RleHQodC55YSx0LnlhLmMybCh0LnllcnIpLFwiaG92ZXJcIikudGV4dDt2b2lkIDAhPT10LnllcnJuZWc/dC55TGFiZWwrPVwiICtcIitmK1wiIC8gLVwiK3AudGlja1RleHQodC55YSx0LnlhLmMybCh0LnllcnJuZWcpLFwiaG92ZXJcIikudGV4dDp0LnlMYWJlbCs9XCIgXFx4YjEgXCIrZixcInlcIj09PWUmJih0LmRpc3RhbmNlKz0xKX12YXIgZD10LmhvdmVyaW5mb3x8dC50cmFjZS5ob3ZlcmluZm87cmV0dXJuIGQmJlwiYWxsXCIhPT1kJiYoLTE9PT0oZD1BcnJheS5pc0FycmF5KGQpP2Q6ZC5zcGxpdChcIitcIikpLmluZGV4T2YoXCJ4XCIpJiYodC54TGFiZWw9dm9pZCAwKSwtMT09PWQuaW5kZXhPZihcInlcIikmJih0LnlMYWJlbD12b2lkIDApLC0xPT09ZC5pbmRleE9mKFwielwiKSYmKHQuekxhYmVsPXZvaWQgMCksLTE9PT1kLmluZGV4T2YoXCJ0ZXh0XCIpJiYodC50ZXh0PXZvaWQgMCksLTE9PT1kLmluZGV4T2YoXCJuYW1lXCIpJiYodC5uYW1lPXZvaWQgMCkpLHR9ZnVuY3Rpb24gRSh0LGUpe3ZhciByLG4saT1lLmNvbnRhaW5lcixvPWUuZnVsbExheW91dCxzPWUuZXZlbnQsbD0hIXQuaExpbmVQb2ludCxjPSEhdC52TGluZVBvaW50O2lmKGkuc2VsZWN0QWxsKFwiLnNwaWtlbGluZVwiKS5yZW1vdmUoKSxjfHxsKXt2YXIgZj1oLmNvbWJpbmUoby5wbG90X2JnY29sb3Isby5wYXBlcl9iZ2NvbG9yKTtpZihsKXt2YXIgcCxkLGc9dC5oTGluZVBvaW50O3I9ZyYmZy54YSxcImN1cnNvclwiPT09KG49ZyYmZy55YSkuc3Bpa2VzbmFwPyhwPXMucG9pbnRlclgsZD1zLnBvaW50ZXJZKToocD1yLl9vZmZzZXQrZy54LGQ9bi5fb2Zmc2V0K2cueSk7dmFyIHYsbSx5PWEucmVhZGFiaWxpdHkoZy5jb2xvcixmKTwxLjU/aC5jb250cmFzdChmKTpnLmNvbG9yLHg9bi5zcGlrZW1vZGUsYj1uLnNwaWtldGhpY2tuZXNzLF89bi5zcGlrZWNvbG9yfHx5LHc9bi5fYm91bmRpbmdCb3gsaz0ody5sZWZ0K3cucmlnaHQpLzI8cD93LnJpZ2h0OncubGVmdDstMT09PXguaW5kZXhPZihcInRvYXhpc1wiKSYmLTE9PT14LmluZGV4T2YoXCJhY3Jvc3NcIil8fCgtMSE9PXguaW5kZXhPZihcInRvYXhpc1wiKSYmKHY9ayxtPXApLC0xIT09eC5pbmRleE9mKFwiYWNyb3NzXCIpJiYodj1uLl9jb3VudGVyU3BhblswXSxtPW4uX2NvdW50ZXJTcGFuWzFdKSxpLmluc2VydChcImxpbmVcIixcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKHt4MTp2LHgyOm0seTE6ZCx5MjpkLFwic3Ryb2tlLXdpZHRoXCI6YixzdHJva2U6XyxcInN0cm9rZS1kYXNoYXJyYXlcIjp1LmRhc2hTdHlsZShuLnNwaWtlZGFzaCxiKX0pLmNsYXNzZWQoXCJzcGlrZWxpbmVcIiwhMCkuY2xhc3NlZChcImNyaXNwXCIsITApLGkuaW5zZXJ0KFwibGluZVwiLFwiOmZpcnN0LWNoaWxkXCIpLmF0dHIoe3gxOnYseDI6bSx5MTpkLHkyOmQsXCJzdHJva2Utd2lkdGhcIjpiKzIsc3Ryb2tlOmZ9KS5jbGFzc2VkKFwic3Bpa2VsaW5lXCIsITApLmNsYXNzZWQoXCJjcmlzcFwiLCEwKSksLTEhPT14LmluZGV4T2YoXCJtYXJrZXJcIikmJmkuaW5zZXJ0KFwiY2lyY2xlXCIsXCI6Zmlyc3QtY2hpbGRcIikuYXR0cih7Y3g6aysoXCJyaWdodFwiIT09bi5zaWRlP2I6LWIpLGN5OmQscjpiLGZpbGw6X30pLmNsYXNzZWQoXCJzcGlrZWxpbmVcIiwhMCl9aWYoYyl7dmFyIEEsVCxNPXQudkxpbmVQb2ludDtyPU0mJk0ueGEsbj1NJiZNLnlhLFwiY3Vyc29yXCI9PT1yLnNwaWtlc25hcD8oQT1zLnBvaW50ZXJYLFQ9cy5wb2ludGVyWSk6KEE9ci5fb2Zmc2V0K00ueCxUPW4uX29mZnNldCtNLnkpO3ZhciBTLEUsQz1hLnJlYWRhYmlsaXR5KE0uY29sb3IsZik8MS41P2guY29udHJhc3QoZik6TS5jb2xvcixMPXIuc3Bpa2Vtb2RlLHo9ci5zcGlrZXRoaWNrbmVzcyxPPXIuc3Bpa2Vjb2xvcnx8QyxJPXIuX2JvdW5kaW5nQm94LEQ9KEkudG9wK0kuYm90dG9tKS8yPFQ/SS5ib3R0b206SS50b3A7LTE9PT1MLmluZGV4T2YoXCJ0b2F4aXNcIikmJi0xPT09TC5pbmRleE9mKFwiYWNyb3NzXCIpfHwoLTEhPT1MLmluZGV4T2YoXCJ0b2F4aXNcIikmJihTPUQsRT1UKSwtMSE9PUwuaW5kZXhPZihcImFjcm9zc1wiKSYmKFM9ci5fY291bnRlclNwYW5bMF0sRT1yLl9jb3VudGVyU3BhblsxXSksaS5pbnNlcnQoXCJsaW5lXCIsXCI6Zmlyc3QtY2hpbGRcIikuYXR0cih7eDE6QSx4MjpBLHkxOlMseTI6RSxcInN0cm9rZS13aWR0aFwiOnosc3Ryb2tlOk8sXCJzdHJva2UtZGFzaGFycmF5XCI6dS5kYXNoU3R5bGUoci5zcGlrZWRhc2gseil9KS5jbGFzc2VkKFwic3Bpa2VsaW5lXCIsITApLmNsYXNzZWQoXCJjcmlzcFwiLCEwKSxpLmluc2VydChcImxpbmVcIixcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKHt4MTpBLHgyOkEseTE6Uyx5MjpFLFwic3Ryb2tlLXdpZHRoXCI6eisyLHN0cm9rZTpmfSkuY2xhc3NlZChcInNwaWtlbGluZVwiLCEwKS5jbGFzc2VkKFwiY3Jpc3BcIiwhMCkpLC0xIT09TC5pbmRleE9mKFwibWFya2VyXCIpJiZpLmluc2VydChcImNpcmNsZVwiLFwiOmZpcnN0LWNoaWxkXCIpLmF0dHIoe2N4OkEsY3k6RC0oXCJ0b3BcIiE9PXIuc2lkZT96Oi16KSxyOnosZmlsbDpPfSkuY2xhc3NlZChcInNwaWtlbGluZVwiLCEwKX19fWZ1bmN0aW9uIEModCxlKXtyZXR1cm4hZXx8KGUudkxpbmVQb2ludCE9PXQuX3NwaWtlcG9pbnRzLnZMaW5lUG9pbnR8fGUuaExpbmVQb2ludCE9PXQuX3NwaWtlcG9pbnRzLmhMaW5lUG9pbnQpfWZ1bmN0aW9uIEwodCxlKXtyZXR1cm4gbC5wbGFpblRleHQodHx8XCJcIix7bGVuOmUsYWxsb3dlZFRhZ3M6W1wiYnJcIixcInN1YlwiLFwic3VwXCIsXCJiXCIsXCJpXCIsXCJlbVwiXX0pfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2V2ZW50c1wiOjY5MCxcIi4uLy4uL2xpYi9vdmVycmlkZV9jdXJzb3JcIjo3MTIsXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIjo3MjUsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vY29sb3JcIjo1NzgsXCIuLi9kcmFnZWxlbWVudFwiOjU5NixcIi4uL2RyYXdpbmdcIjo1OTksXCIuL2NvbnN0YW50c1wiOjYxMSxcIi4vaGVscGVyc1wiOjYxMyxkMzoxNTUsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMix0aW55Y29sb3IyOjUyMn1dLDYxNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3IoXCJob3ZlcmxhYmVsLmJnY29sb3JcIiwoaT1pfHx7fSkuYmdjb2xvcikscihcImhvdmVybGFiZWwuYm9yZGVyY29sb3JcIixpLmJvcmRlcmNvbG9yKSxyKFwiaG92ZXJsYWJlbC5uYW1lbGVuZ3RoXCIsaS5uYW1lbGVuZ3RoKSxuLmNvZXJjZUZvbnQocixcImhvdmVybGFiZWwuZm9udFwiLGkuZm9udCkscihcImhvdmVybGFiZWwuYWxpZ25cIixpLmFsaWduKX19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDYxNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Q9dHx8e307KGU9ZXx8e30pLmRlc2NyaXB0aW9uJiZlLmRlc2NyaXB0aW9uO3ZhciByPWUua2V5c3x8W107aWYoci5sZW5ndGg+MCl7Zm9yKHZhciBuPVtdLGk9MDtpPHIubGVuZ3RoO2krKyluW2ldPVwiYFwiK3JbaV0rXCJgXCI7XCJGaW5hbGx5LCB0aGUgdGVtcGxhdGUgc3RyaW5nIGhhcyBhY2Nlc3MgdG8gXCIsMT09PXIubGVuZ3RoP1widmFyaWFibGUgXCIrblswXTpcInZhcmlhYmxlcyBcIituLnNsaWNlKDAsLTEpLmpvaW4oXCIsIFwiKStcIiBhbmQgXCIrbi5zbGljZSgtMSkrXCIuXCJ9dmFyIGE9e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsZWRpdFR5cGU6dC5lZGl0VHlwZXx8XCJub25lXCJ9O3JldHVybiExIT09dC5hcnJheU9rJiYoYS5hcnJheU9rPSEwKSxhfX0se31dLDYxNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vZHJhZ2VsZW1lbnRcIiksbz10KFwiLi9oZWxwZXJzXCIpLHM9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksbD10KFwiLi9ob3ZlclwiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6XCJjb21wb25lbnRcIixuYW1lOlwiZnhcIixjb25zdGFudHM6dChcIi4vY29uc3RhbnRzXCIpLHNjaGVtYTp7bGF5b3V0OnN9LGF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxsYXlvdXRBdHRyaWJ1dGVzOnMsc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHM6dChcIi4vbGF5b3V0X2dsb2JhbF9kZWZhdWx0c1wiKSxzdXBwbHlEZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KFwiLi9sYXlvdXRfZGVmYXVsdHNcIiksY2FsYzp0KFwiLi9jYWxjXCIpLGdldERpc3RhbmNlRnVuY3Rpb246by5nZXREaXN0YW5jZUZ1bmN0aW9uLGdldENsb3Nlc3Q6by5nZXRDbG9zZXN0LGluYm94Om8uaW5ib3gscXVhZHJhdHVyZTpvLnF1YWRyYXR1cmUsYXBwZW5kQXJyYXlQb2ludFZhbHVlOm8uYXBwZW5kQXJyYXlQb2ludFZhbHVlLGNhc3RIb3Zlck9wdGlvbjpmdW5jdGlvbih0LGUscil7cmV0dXJuIGkuY2FzdE9wdGlvbih0LGUsXCJob3ZlcmxhYmVsLlwiK3IpfSxjYXN0SG92ZXJpbmZvOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gaS5jYXN0T3B0aW9uKHQscixcImhvdmVyaW5mb1wiLGZ1bmN0aW9uKHIpe3JldHVybiBpLmNvZXJjZUhvdmVyaW5mbyh7aG92ZXJpbmZvOnJ9LHtfbW9kdWxlOnQuX21vZHVsZX0sZSl9KX0saG92ZXI6bC5ob3Zlcix1bmhvdmVyOmEudW5ob3Zlcixsb25lSG92ZXI6bC5sb25lSG92ZXIsbXVsdGlIb3ZlcnM6bC5tdWx0aUhvdmVycyxsb25lVW5ob3ZlcjpmdW5jdGlvbih0KXt2YXIgZT1pLmlzRDNTZWxlY3Rpb24odCk/dDpuLnNlbGVjdCh0KTtlLnNlbGVjdEFsbChcImcuaG92ZXJ0ZXh0XCIpLnJlbW92ZSgpLGUuc2VsZWN0QWxsKFwiLnNwaWtlbGluZVwiKS5yZW1vdmUoKX0sY2xpY2s6dChcIi4vY2xpY2tcIil9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9kcmFnZWxlbWVudFwiOjU5NixcIi4vYXR0cmlidXRlc1wiOjYwOCxcIi4vY2FsY1wiOjYwOSxcIi4vY2xpY2tcIjo2MTAsXCIuL2NvbnN0YW50c1wiOjYxMSxcIi4vZGVmYXVsdHNcIjo2MTIsXCIuL2hlbHBlcnNcIjo2MTMsXCIuL2hvdmVyXCI6NjE0LFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjYxOCxcIi4vbGF5b3V0X2RlZmF1bHRzXCI6NjE5LFwiLi9sYXlvdXRfZ2xvYmFsX2RlZmF1bHRzXCI6NjIwLGQzOjE1NX1dLDYxODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2NvbnN0YW50c1wiKSxpPXQoXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIikoe2VkaXRUeXBlOlwibm9uZVwifSk7aS5mYW1pbHkuZGZsdD1uLkhPVkVSRk9OVCxpLnNpemUuZGZsdD1uLkhPVkVSRk9OVFNJWkUsZS5leHBvcnRzPXtjbGlja21vZGU6e3ZhbFR5cGU6XCJmbGFnbGlzdFwiLGZsYWdzOltcImV2ZW50XCIsXCJzZWxlY3RcIl0sZGZsdDpcImV2ZW50XCIsZWRpdFR5cGU6XCJwbG90XCIsZXh0cmFzOltcIm5vbmVcIl19LGRyYWdtb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ6b29tXCIsXCJwYW5cIixcInNlbGVjdFwiLFwibGFzc29cIixcIm9yYml0XCIsXCJ0dXJudGFibGVcIiwhMV0sZGZsdDpcInpvb21cIixlZGl0VHlwZTpcIm1vZGViYXJcIn0saG92ZXJtb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ4XCIsXCJ5XCIsXCJjbG9zZXN0XCIsITFdLGVkaXRUeXBlOlwibW9kZWJhclwifSxob3ZlcmRpc3RhbmNlOnt2YWxUeXBlOlwiaW50ZWdlclwiLG1pbjotMSxkZmx0OjIwLGVkaXRUeXBlOlwibm9uZVwifSxzcGlrZWRpc3RhbmNlOnt2YWxUeXBlOlwiaW50ZWdlclwiLG1pbjotMSxkZmx0OjIwLGVkaXRUeXBlOlwibm9uZVwifSxob3ZlcmxhYmVsOntiZ2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcIm5vbmVcIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwibm9uZVwifSxmb250OmksYWxpZ246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImxlZnRcIixcInJpZ2h0XCIsXCJhdXRvXCJdLGRmbHQ6XCJhdXRvXCIsZWRpdFR5cGU6XCJub25lXCJ9LG5hbWVsZW5ndGg6e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsbWluOi0xLGRmbHQ6MTUsZWRpdFR5cGU6XCJub25lXCJ9LGVkaXRUeXBlOlwibm9uZVwifSxzZWxlY3RkaXJlY3Rpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImhcIixcInZcIixcImRcIixcImFueVwiXSxkZmx0OlwiYW55XCIsZWRpdFR5cGU6XCJub25lXCJ9fX0se1wiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCI6Nzc1LFwiLi9jb25zdGFudHNcIjo2MTF9XSw2MTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBhKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9dmFyIG8scz1hKFwiY2xpY2ttb2RlXCIpO1wic2VsZWN0XCI9PT1hKFwiZHJhZ21vZGVcIikmJmEoXCJzZWxlY3RkaXJlY3Rpb25cIiksZS5faGFzKFwiY2FydGVzaWFuXCIpP3MuaW5kZXhPZihcInNlbGVjdFwiKT4tMT9vPVwiY2xvc2VzdFwiOihlLl9pc0hvcml6PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUuX3NjYXR0ZXJTdGFja09wdHN8fHt9LG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXSxhPWkueGF4aXMraS55YXhpcyxvPXJbYV18fHt9LHM9b1tpLnN0YWNrZ3JvdXBdfHx7fTtpZihcImhcIiE9PWkub3JpZW50YXRpb24mJlwiaFwiIT09cy5vcmllbnRhdGlvbilyZXR1cm4hMX1yZXR1cm4hMH0ocixlKSxvPWUuX2lzSG9yaXo/XCJ5XCI6XCJ4XCIpOm89XCJjbG9zZXN0XCIsYShcImhvdmVybW9kZVwiLG8pJiYoYShcImhvdmVyZGlzdGFuY2VcIiksYShcInNwaWtlZGlzdGFuY2VcIikpO3ZhciBsPWUuX2hhcyhcIm1hcGJveFwiKSxjPWUuX2hhcyhcImdlb1wiKSx1PWUuX2Jhc2VQbG90TW9kdWxlcy5sZW5ndGg7XCJ6b29tXCI9PT1lLmRyYWdtb2RlJiYoKGx8fGMpJiYxPT09dXx8bCYmYyYmMj09PXUpJiYoZS5kcmFnbW9kZT1cInBhblwiKX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo2MTh9XSw2MjA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vaG92ZXJsYWJlbF9kZWZhdWx0c1wiKSxhPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2kodCxlLGZ1bmN0aW9uKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9KX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4vaG92ZXJsYWJlbF9kZWZhdWx0c1wiOjYxNSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo2MTh9XSw2MjE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL2xpYi9yZWdleFwiKS5jb3VudGVyLGE9dChcIi4uLy4uL3Bsb3RzL2RvbWFpblwiKS5hdHRyaWJ1dGVzLG89dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHNcIikuaWRSZWdleCxzPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLGw9e3Jvd3M6e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsbWluOjEsZWRpdFR5cGU6XCJwbG90XCJ9LHJvd29yZGVyOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ0b3AgdG8gYm90dG9tXCIsXCJib3R0b20gdG8gdG9wXCJdLGRmbHQ6XCJ0b3AgdG8gYm90dG9tXCIsZWRpdFR5cGU6XCJwbG90XCJ9LGNvbHVtbnM6e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsbWluOjEsZWRpdFR5cGU6XCJwbG90XCJ9LHN1YnBsb3RzOnt2YWxUeXBlOlwiaW5mb19hcnJheVwiLGZyZWVMZW5ndGg6ITAsZGltZW5zaW9uczoyLGl0ZW1zOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbaShcInh5XCIpLnRvU3RyaW5nKCksXCJcIl0sZWRpdFR5cGU6XCJwbG90XCJ9LGVkaXRUeXBlOlwicGxvdFwifSx4YXhlczp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixmcmVlTGVuZ3RoOiEwLGl0ZW1zOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbby54LnRvU3RyaW5nKCksXCJcIl0sZWRpdFR5cGU6XCJwbG90XCJ9LGVkaXRUeXBlOlwicGxvdFwifSx5YXhlczp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixmcmVlTGVuZ3RoOiEwLGl0ZW1zOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbby55LnRvU3RyaW5nKCksXCJcIl0sZWRpdFR5cGU6XCJwbG90XCJ9LGVkaXRUeXBlOlwicGxvdFwifSxwYXR0ZXJuOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJpbmRlcGVuZGVudFwiLFwiY291cGxlZFwiXSxkZmx0OlwiY291cGxlZFwiLGVkaXRUeXBlOlwicGxvdFwifSx4Z2FwOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZWRpdFR5cGU6XCJwbG90XCJ9LHlnYXA6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxlZGl0VHlwZTpcInBsb3RcIn0sZG9tYWluOmEoe25hbWU6XCJncmlkXCIsZWRpdFR5cGU6XCJwbG90XCIsbm9HcmlkQ2VsbDohMH0se30pLHhzaWRlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJib3R0b21cIixcImJvdHRvbSBwbG90XCIsXCJ0b3AgcGxvdFwiLFwidG9wXCJdLGRmbHQ6XCJib3R0b20gcGxvdFwiLGVkaXRUeXBlOlwicGxvdFwifSx5c2lkZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibGVmdFwiLFwibGVmdCBwbG90XCIsXCJyaWdodCBwbG90XCIsXCJyaWdodFwiXSxkZmx0OlwibGVmdCBwbG90XCIsZWRpdFR5cGU6XCJwbG90XCJ9LGVkaXRUeXBlOlwicGxvdFwifTtmdW5jdGlvbiBjKHQsZSxyKXt2YXIgbj1lW3IrXCJheGVzXCJdLGk9T2JqZWN0LmtleXMoKHQuX3NwbG9tQXhlc3x8e30pW3JdfHx7fSk7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bjppLmxlbmd0aD9pOnZvaWQgMH1mdW5jdGlvbiB1KHQsZSxyLG4saSxhKXt2YXIgbz1lKHQrXCJnYXBcIixyKSxzPWUoXCJkb21haW4uXCIrdCk7ZSh0K1wic2lkZVwiLG4pO2Zvcih2YXIgbD1uZXcgQXJyYXkoaSksYz1zWzBdLHU9KHNbMV0tYykvKGktbyksaD11KigxLW8pLGY9MDtmPGk7ZisrKXt2YXIgcD1jK3UqZjtsW2E/aS0xLWY6Zl09W3AscCtoXX1yZXR1cm4gbH1mdW5jdGlvbiBoKHQsZSxyLG4saSl7dmFyIGEsbz1uZXcgQXJyYXkocik7ZnVuY3Rpb24gcyh0LHIpey0xIT09ZS5pbmRleE9mKHIpJiZ2b2lkIDA9PT1uW3JdPyhvW3RdPXIsbltyXT10KTpvW3RdPVwiXCJ9aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IoYT0wO2E8cjthKyspcyhhLHRbYV0pO2Vsc2UgZm9yKHMoMCxpKSxhPTE7YTxyO2ErKylzKGEsaSsoYSsxKSk7cmV0dXJuIG99ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwiY29tcG9uZW50XCIsbmFtZTpcImdyaWRcIixzY2hlbWE6e2xheW91dDp7Z3JpZDpsfX0sbGF5b3V0QXR0cmlidXRlczpsLHNpemVEZWZhdWx0czpmdW5jdGlvbih0LGUpe3ZhciByPXQuZ3JpZHx8e30saT1jKGUscixcInhcIiksYT1jKGUscixcInlcIik7aWYodC5ncmlkfHxpfHxhKXt2YXIgbyxoLGY9QXJyYXkuaXNBcnJheShyLnN1YnBsb3RzKSYmQXJyYXkuaXNBcnJheShyLnN1YnBsb3RzWzBdKSxwPUFycmF5LmlzQXJyYXkoaSksZD1BcnJheS5pc0FycmF5KGEpLGc9cCYmaSE9PXIueGF4ZXMmJmQmJmEhPT1yLnlheGVzO2Y/KG89ci5zdWJwbG90cy5sZW5ndGgsaD1yLnN1YnBsb3RzWzBdLmxlbmd0aCk6KGQmJihvPWEubGVuZ3RoKSxwJiYoaD1pLmxlbmd0aCkpO3ZhciB2PXMubmV3Q29udGFpbmVyKGUsXCJncmlkXCIpLG09QShcInJvd3NcIixvKSx5PUEoXCJjb2x1bW5zXCIsaCk7aWYobSp5PjEpe2Z8fHB8fGR8fFwiaW5kZXBlbmRlbnRcIj09PUEoXCJwYXR0ZXJuXCIpJiYoZj0hMCksdi5faGFzU3VicGxvdEdyaWQ9Zjt2YXIgeCxiLF89XCJ0b3AgdG8gYm90dG9tXCI9PT1BKFwicm93b3JkZXJcIiksdz1mPy4yOi4xLGs9Zj8uMzouMTtnJiZlLl9zcGxvbUdyaWREZmx0JiYoeD1lLl9zcGxvbUdyaWREZmx0LnhzaWRlLGI9ZS5fc3Bsb21HcmlkRGZsdC55c2lkZSksdi5fZG9tYWlucz17eDp1KFwieFwiLEEsdyx4LHkpLHk6dShcInlcIixBLGssYixtLF8pfX1lbHNlIGRlbGV0ZSBlLmdyaWR9ZnVuY3Rpb24gQSh0LGUpe3JldHVybiBuLmNvZXJjZShyLHYsbCx0LGUpfX0sY29udGVudERlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5ncmlkO2lmKHImJnIuX2RvbWFpbnMpe3ZhciBuLGksYSxvLHMsbCx1LGY9dC5ncmlkfHx7fSxwPWUuX3N1YnBsb3RzLGQ9ci5faGFzU3VicGxvdEdyaWQsZz1yLnJvd3Msdj1yLmNvbHVtbnMsbT1cImluZGVwZW5kZW50XCI9PT1yLnBhdHRlcm4seT1yLl9heGlzTWFwPXt9O2lmKGQpe3ZhciB4PWYuc3VicGxvdHN8fFtdO2w9ci5zdWJwbG90cz1uZXcgQXJyYXkoZyk7dmFyIGI9MTtmb3Iobj0wO248ZztuKyspe3ZhciBfPWxbbl09bmV3IEFycmF5KHYpLHc9eFtuXXx8W107Zm9yKGk9MDtpPHY7aSsrKWlmKG0/KHM9MT09PWI/XCJ4eVwiOlwieFwiK2IrXCJ5XCIrYixiKyspOnM9d1tpXSxfW2ldPVwiXCIsLTEhPT1wLmNhcnRlc2lhbi5pbmRleE9mKHMpKXtpZih1PXMuaW5kZXhPZihcInlcIiksYT1zLnNsaWNlKDAsdSksbz1zLnNsaWNlKHUpLHZvaWQgMCE9PXlbYV0mJnlbYV0hPT1pfHx2b2lkIDAhPT15W29dJiZ5W29dIT09biljb250aW51ZTtfW2ldPXMseVthXT1pLHlbb109bn19fWVsc2V7dmFyIGs9YyhlLGYsXCJ4XCIpLEE9YyhlLGYsXCJ5XCIpO3IueGF4ZXM9aChrLHAueGF4aXMsdix5LFwieFwiKSxyLnlheGVzPWgoQSxwLnlheGlzLGcseSxcInlcIil9dmFyIFQ9ci5fYW5jaG9ycz17fSxNPVwidG9wIHRvIGJvdHRvbVwiPT09ci5yb3dvcmRlcjtmb3IodmFyIFMgaW4geSl7dmFyIEUsQyxMLHo9Uy5jaGFyQXQoMCksTz1yW3orXCJzaWRlXCJdO2lmKE8ubGVuZ3RoPDgpVFtTXT1cImZyZWVcIjtlbHNlIGlmKFwieFwiPT09eil7aWYoXCJ0XCI9PT1PLmNoYXJBdCgwKT09PU0/KEU9MCxDPTEsTD1nKTooRT1nLTEsQz0tMSxMPS0xKSxkKXt2YXIgST15W1NdO2ZvcihuPUU7biE9PUw7bis9QylpZigocz1sW25dW0ldKSYmKHU9cy5pbmRleE9mKFwieVwiKSxzLnNsaWNlKDAsdSk9PT1TKSl7VFtTXT1zLnNsaWNlKHUpO2JyZWFrfX1lbHNlIGZvcihuPUU7biE9PUw7bis9QylpZihvPXIueWF4ZXNbbl0sLTEhPT1wLmNhcnRlc2lhbi5pbmRleE9mKFMrbykpe1RbU109bzticmVha319ZWxzZSBpZihcImxcIj09PU8uY2hhckF0KDApPyhFPTAsQz0xLEw9dik6KEU9di0xLEM9LTEsTD0tMSksZCl7dmFyIEQ9eVtTXTtmb3Iobj1FO24hPT1MO24rPUMpaWYoKHM9bFtEXVtuXSkmJih1PXMuaW5kZXhPZihcInlcIikscy5zbGljZSh1KT09PVMpKXtUW1NdPXMuc2xpY2UoMCx1KTticmVha319ZWxzZSBmb3Iobj1FO24hPT1MO24rPUMpaWYoYT1yLnhheGVzW25dLC0xIT09cC5jYXJ0ZXNpYW4uaW5kZXhPZihhK1MpKXtUW1NdPWE7YnJlYWt9fX19fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3JlZ2V4XCI6NzE3LFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHNcIjo3NTUsXCIuLi8uLi9wbG90cy9kb21haW5cIjo3NzR9XSw2MjI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50c1wiKSxpPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLnRlbXBsYXRlZEFycmF5O2UuZXhwb3J0cz1pKFwiaW1hZ2VcIix7dmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LHNvdXJjZTp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGxheWVyOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJiZWxvd1wiLFwiYWJvdmVcIl0sZGZsdDpcImFib3ZlXCIsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0sc2l6ZXg6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjAsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0sc2l6ZXk6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjAsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0sc2l6aW5nOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJmaWxsXCIsXCJjb250YWluXCIsXCJzdHJldGNoXCJdLGRmbHQ6XCJjb250YWluXCIsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0sb3BhY2l0eTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZTpcImFycmF5ZHJhd1wifSx4Ont2YWxUeXBlOlwiYW55XCIsZGZsdDowLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LHk6e3ZhbFR5cGU6XCJhbnlcIixkZmx0OjAsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0seGFuY2hvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibGVmdFwiLFwiY2VudGVyXCIsXCJyaWdodFwiXSxkZmx0OlwibGVmdFwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LHlhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInRvcFwiLFwibWlkZGxlXCIsXCJib3R0b21cIl0sZGZsdDpcInRvcFwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LHhyZWY6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInBhcGVyXCIsbi5pZFJlZ2V4LngudG9TdHJpbmcoKV0sZGZsdDpcInBhcGVyXCIsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0seXJlZjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wicGFwZXJcIixuLmlkUmVnZXgueS50b1N0cmluZygpXSxkZmx0OlwicGFwZXJcIixlZGl0VHlwZTpcImFycmF5ZHJhd1wifSxlZGl0VHlwZTpcImFycmF5ZHJhd1wifSl9LHtcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzXCI6NzU1fV0sNjIzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL2xpYi90b19sb2dfcmFuZ2VcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe2U9ZXx8e307dmFyIG89XCJsb2dcIj09PXImJlwibGluZWFyXCI9PT1lLnR5cGUscz1cImxpbmVhclwiPT09ciYmXCJsb2dcIj09PWUudHlwZTtpZihvfHxzKWZvcih2YXIgbCxjLHU9dC5fZnVsbExheW91dC5pbWFnZXMsaD1lLl9pZC5jaGFyQXQoMCksZj0wO2Y8dS5sZW5ndGg7ZisrKWlmKGM9XCJpbWFnZXNbXCIrZitcIl0uXCIsKGw9dVtmXSlbaCtcInJlZlwiXT09PWUuX2lkKXt2YXIgcD1sW2hdLGQ9bFtcInNpemVcIitoXSxnPW51bGwsdj1udWxsO2lmKG8pe2c9aShwLGUucmFuZ2UpO3ZhciBtPWQvTWF0aC5wb3coMTAsZykvMjt2PTIqTWF0aC5sb2cobStNYXRoLnNxcnQoMSttKm0pKS9NYXRoLkxOMTB9ZWxzZSB2PShnPU1hdGgucG93KDEwLHApKSooTWF0aC5wb3coMTAsZC8yKS1NYXRoLnBvdygxMCwtZC8yKSk7bihnKT9uKHYpfHwodj1udWxsKTooZz1udWxsLHY9bnVsbCksYShjK2gsZyksYShjK1wic2l6ZVwiK2gsdil9fX0se1wiLi4vLi4vbGliL3RvX2xvZ19yYW5nZVwiOjcyNyxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sNjI0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxhPXQoXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIiksbz10KFwiLi9hdHRyaWJ1dGVzXCIpO2Z1bmN0aW9uIHModCxlLHIpe2Z1bmN0aW9uIGEocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX12YXIgcz1hKFwic291cmNlXCIpO2lmKCFhKFwidmlzaWJsZVwiLCEhcykpcmV0dXJuIGU7YShcImxheWVyXCIpLGEoXCJ4YW5jaG9yXCIpLGEoXCJ5YW5jaG9yXCIpLGEoXCJzaXpleFwiKSxhKFwic2l6ZXlcIiksYShcInNpemluZ1wiKSxhKFwib3BhY2l0eVwiKTtmb3IodmFyIGw9e19mdWxsTGF5b3V0OnJ9LGM9W1wieFwiLFwieVwiXSx1PTA7dTwyO3UrKyl7dmFyIGg9Y1t1XSxmPWkuY29lcmNlUmVmKHQsZSxsLGgsXCJwYXBlclwiKTtpZihcInBhcGVyXCIhPT1mKWkuZ2V0RnJvbUlkKGwsZikuX2ltZ0luZGljZXMucHVzaChlLl9pbmRleCk7aS5jb2VyY2VQb3NpdGlvbihlLGwsYSxmLGgsMCl9cmV0dXJuIGV9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7YSh0LGUse25hbWU6XCJpbWFnZXNcIixoYW5kbGVJdGVtRGVmYXVsdHM6c30pfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCI6NzQ1LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuL2F0dHJpYnV0ZXNcIjo2MjJ9XSw2MjU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vZHJhd2luZ1wiKSxhPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxvPXQoXCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixzPXQuX2Z1bGxMYXlvdXQsbD1bXSxjPXt9LHU9W107Zm9yKHI9MDtyPHMuaW1hZ2VzLmxlbmd0aDtyKyspe3ZhciBoPXMuaW1hZ2VzW3JdO2lmKGgudmlzaWJsZSlpZihcImJlbG93XCI9PT1oLmxheWVyJiZcInBhcGVyXCIhPT1oLnhyZWYmJlwicGFwZXJcIiE9PWgueXJlZil7ZT1oLnhyZWYraC55cmVmO3ZhciBmPXMuX3Bsb3RzW2VdO2lmKCFmKXt1LnB1c2goaCk7Y29udGludWV9Zi5tYWlucGxvdCYmKGU9Zi5tYWlucGxvdC5pZCksY1tlXXx8KGNbZV09W10pLGNbZV0ucHVzaChoKX1lbHNlXCJhYm92ZVwiPT09aC5sYXllcj9sLnB1c2goaCk6dS5wdXNoKGgpfXZhciBwPXt4OntsZWZ0OntzaXppbmc6XCJ4TWluXCIsb2Zmc2V0OjB9LGNlbnRlcjp7c2l6aW5nOlwieE1pZFwiLG9mZnNldDotLjV9LHJpZ2h0OntzaXppbmc6XCJ4TWF4XCIsb2Zmc2V0Oi0xfX0seTp7dG9wOntzaXppbmc6XCJZTWluXCIsb2Zmc2V0OjB9LG1pZGRsZTp7c2l6aW5nOlwiWU1pZFwiLG9mZnNldDotLjV9LGJvdHRvbTp7c2l6aW5nOlwiWU1heFwiLG9mZnNldDotMX19fTtmdW5jdGlvbiBkKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKCF0aGlzLmltZ3x8dGhpcy5pbWcuc3JjIT09ZS5zb3VyY2Upe3IuYXR0cihcInhtbG5zXCIsby5zdmcpO3ZhciBpPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHQpe3ZhciBuPW5ldyBJbWFnZTtmdW5jdGlvbiBpKCl7ci5yZW1vdmUoKSx0KCl9dGhpcy5pbWc9bixuLnNldEF0dHJpYnV0ZShcImNyb3NzT3JpZ2luXCIsXCJhbm9ueW1vdXNcIiksbi5vbmVycm9yPWksbi5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO2Uud2lkdGg9dGhpcy53aWR0aCxlLmhlaWdodD10aGlzLmhlaWdodCxlLmdldENvbnRleHQoXCIyZFwiKS5kcmF3SW1hZ2UodGhpcywwLDApO3ZhciBuPWUudG9EYXRhVVJMKFwiaW1hZ2UvcG5nXCIpO3IuYXR0cihcInhsaW5rOmhyZWZcIixuKSx0KCl9LHIub24oXCJlcnJvclwiLGkpLG4uc3JjPWUuc291cmNlfS5iaW5kKHRoaXMpKTt0Ll9wcm9taXNlcy5wdXNoKGkpfX1mdW5jdGlvbiBnKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLG89YS5nZXRGcm9tSWQodCxlLnhyZWYpLGw9YS5nZXRGcm9tSWQodCxlLnlyZWYpLGM9cy5fc2l6ZSx1PW8/TWF0aC5hYnMoby5sMnAoZS5zaXpleCktby5sMnAoMCkpOmUuc2l6ZXgqYy53LGg9bD9NYXRoLmFicyhsLmwycChlLnNpemV5KS1sLmwycCgwKSk6ZS5zaXpleSpjLmgsZj11KnAueFtlLnhhbmNob3JdLm9mZnNldCxkPWgqcC55W2UueWFuY2hvcl0ub2Zmc2V0LGc9cC54W2UueGFuY2hvcl0uc2l6aW5nK3AueVtlLnlhbmNob3JdLnNpemluZyx2PShvP28ucjJwKGUueCkrby5fb2Zmc2V0OmUueCpjLncrYy5sKStmLG09KGw/bC5yMnAoZS55KStsLl9vZmZzZXQ6Yy5oLWUueSpjLmgrYy50KStkO3N3aXRjaChlLnNpemluZyl7Y2FzZVwiZmlsbFwiOmcrPVwiIHNsaWNlXCI7YnJlYWs7Y2FzZVwic3RyZXRjaFwiOmc9XCJub25lXCJ9ci5hdHRyKHt4OnYseTptLHdpZHRoOnUsaGVpZ2h0OmgscHJlc2VydmVBc3BlY3RSYXRpbzpnLG9wYWNpdHk6ZS5vcGFjaXR5fSk7dmFyIHk9KG8/by5faWQ6XCJcIikrKGw/bC5faWQ6XCJcIik7aS5zZXRDbGlwVXJsKHIseT9cImNsaXBcIitzLl91aWQreTpudWxsLHQpfXZhciB2PXMuX2ltYWdlTG93ZXJMYXllci5zZWxlY3RBbGwoXCJpbWFnZVwiKS5kYXRhKHUpLG09cy5faW1hZ2VVcHBlckxheWVyLnNlbGVjdEFsbChcImltYWdlXCIpLmRhdGEobCk7di5lbnRlcigpLmFwcGVuZChcImltYWdlXCIpLG0uZW50ZXIoKS5hcHBlbmQoXCJpbWFnZVwiKSx2LmV4aXQoKS5yZW1vdmUoKSxtLmV4aXQoKS5yZW1vdmUoKSx2LmVhY2goZnVuY3Rpb24odCl7ZC5iaW5kKHRoaXMpKHQpLGcuYmluZCh0aGlzKSh0KX0pLG0uZWFjaChmdW5jdGlvbih0KXtkLmJpbmQodGhpcykodCksZy5iaW5kKHRoaXMpKHQpfSk7dmFyIHk9T2JqZWN0LmtleXMocy5fcGxvdHMpO2ZvcihyPTA7cjx5Lmxlbmd0aDtyKyspe2U9eVtyXTt2YXIgeD1zLl9wbG90c1tlXTtpZih4LmltYWdlbGF5ZXIpe3ZhciBiPXguaW1hZ2VsYXllci5zZWxlY3RBbGwoXCJpbWFnZVwiKS5kYXRhKGNbZV18fFtdKTtiLmVudGVyKCkuYXBwZW5kKFwiaW1hZ2VcIiksYi5leGl0KCkucmVtb3ZlKCksYi5lYWNoKGZ1bmN0aW9uKHQpe2QuYmluZCh0aGlzKSh0KSxnLmJpbmQodGhpcykodCl9KX19fX0se1wiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIjo2NzksXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL2RyYXdpbmdcIjo1OTksZDM6MTU1fV0sNjI2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwiY29tcG9uZW50XCIsbmFtZTpcImltYWdlc1wiLGxheW91dEF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxpbmNsdWRlQmFzZVBsb3Q6dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHNcIikoXCJpbWFnZXNcIiksZHJhdzp0KFwiLi9kcmF3XCIpLGNvbnZlcnRDb29yZHM6dChcIi4vY29udmVydF9jb29yZHNcIil9fSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzXCI6NzU5LFwiLi9hdHRyaWJ1dGVzXCI6NjIyLFwiLi9jb252ZXJ0X2Nvb3Jkc1wiOjYyMyxcIi4vZGVmYXVsdHNcIjo2MjQsXCIuL2RyYXdcIjo2MjV9XSw2Mjc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uL2NvbG9yL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPXtiZ2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcImxlZ2VuZFwifSxib3JkZXJjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOlwibGVnZW5kXCJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDowLGVkaXRUeXBlOlwibGVnZW5kXCJ9LGZvbnQ6bih7ZWRpdFR5cGU6XCJsZWdlbmRcIn0pLG9yaWVudGF0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ2XCIsXCJoXCJdLGRmbHQ6XCJ2XCIsZWRpdFR5cGU6XCJsZWdlbmRcIn0sdHJhY2VvcmRlcjp7dmFsVHlwZTpcImZsYWdsaXN0XCIsZmxhZ3M6W1wicmV2ZXJzZWRcIixcImdyb3VwZWRcIl0sZXh0cmFzOltcIm5vcm1hbFwiXSxlZGl0VHlwZTpcImxlZ2VuZFwifSx0cmFjZWdyb3VwZ2FwOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxMCxlZGl0VHlwZTpcImxlZ2VuZFwifSxpdGVtc2l6aW5nOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ0cmFjZVwiLFwiY29uc3RhbnRcIl0sZGZsdDpcInRyYWNlXCIsZWRpdFR5cGU6XCJsZWdlbmRcIn0seDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjotMixtYXg6MyxkZmx0OjEuMDIsZWRpdFR5cGU6XCJsZWdlbmRcIn0seGFuY2hvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYXV0b1wiLFwibGVmdFwiLFwiY2VudGVyXCIsXCJyaWdodFwiXSxkZmx0OlwibGVmdFwiLGVkaXRUeXBlOlwibGVnZW5kXCJ9LHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46LTIsbWF4OjMsZGZsdDoxLGVkaXRUeXBlOlwibGVnZW5kXCJ9LHlhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImF1dG9cIixcInRvcFwiLFwibWlkZGxlXCIsXCJib3R0b21cIl0sZGZsdDpcImF1dG9cIixlZGl0VHlwZTpcImxlZ2VuZFwifSx1aXJldmlzaW9uOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJub25lXCJ9LHZhbGlnbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1widG9wXCIsXCJtaWRkbGVcIixcImJvdHRvbVwiXSxkZmx0OlwibWlkZGxlXCIsZWRpdFR5cGU6XCJsZWdlbmRcIn0sZWRpdFR5cGU6XCJsZWdlbmRcIn19LHtcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiOjc3NSxcIi4uL2NvbG9yL2F0dHJpYnV0ZXNcIjo1Nzd9XSw2Mjg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e3Njcm9sbEJhcldpZHRoOjYsc2Nyb2xsQmFyTWluSGVpZ2h0OjIwLHNjcm9sbEJhckNvbG9yOlwiIzgwOEJBNFwiLHNjcm9sbEJhck1hcmdpbjo0LHRleHRPZmZzZXRYOjQwfX0se31dLDYyOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKSxvPXQoXCIuL2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXNcIiksbD10KFwiLi9oZWxwZXJzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBjLHUsaCxmLHA9dC5sZWdlbmR8fHt9LGQ9MCxnPSExLHY9XCJub3JtYWxcIixtPTA7bTxyLmxlbmd0aDttKyspe3ZhciB5PXJbbV07eS52aXNpYmxlJiYoKHkuc2hvd2xlZ2VuZHx8eS5fZGZsdFNob3dMZWdlbmQpJiYoZCsrLHkuc2hvd2xlZ2VuZCYmKGc9ITAsKG4udHJhY2VJcyh5LFwicGllXCIpfHwhMD09PXkuX2lucHV0LnNob3dsZWdlbmQpJiZkKyspKSwobi50cmFjZUlzKHksXCJiYXJcIikmJlwic3RhY2tcIj09PWUuYmFybW9kZXx8LTEhPT1bXCJ0b25leHR4XCIsXCJ0b25leHR5XCJdLmluZGV4T2YoeS5maWxsKSkmJih2PWwuaXNHcm91cGVkKHt0cmFjZW9yZGVyOnZ9KT9cImdyb3VwZWQrcmV2ZXJzZWRcIjpcInJldmVyc2VkXCIpLHZvaWQgMCE9PXkubGVnZW5kZ3JvdXAmJlwiXCIhPT15LmxlZ2VuZGdyb3VwJiYodj1sLmlzUmV2ZXJzZWQoe3RyYWNlb3JkZXI6dn0pP1wicmV2ZXJzZWQrZ3JvdXBlZFwiOlwiZ3JvdXBlZFwiKSl9dmFyIHg9aS5jb2VyY2UodCxlLHMsXCJzaG93bGVnZW5kXCIsZyYmZD4xKTtpZighMSE9PXh8fHAudWlyZXZpc2lvbil7dmFyIGI9YS5uZXdDb250YWluZXIoZSxcImxlZ2VuZFwiKTtpZih3KFwidWlyZXZpc2lvblwiLGUudWlyZXZpc2lvbiksITEhPT14KXtpZih3KFwiYmdjb2xvclwiLGUucGFwZXJfYmdjb2xvciksdyhcImJvcmRlcmNvbG9yXCIpLHcoXCJib3JkZXJ3aWR0aFwiKSxpLmNvZXJjZUZvbnQodyxcImZvbnRcIixlLmZvbnQpLHcoXCJvcmllbnRhdGlvblwiKSxcImhcIj09PWIub3JpZW50YXRpb24pe3ZhciBfPXQueGF4aXM7bi5nZXRDb21wb25lbnRNZXRob2QoXCJyYW5nZXNsaWRlclwiLFwiaXNWaXNpYmxlXCIpKF8pPyhjPTAsaD1cImxlZnRcIix1PTEuMSxmPVwiYm90dG9tXCIpOihjPTAsaD1cImxlZnRcIix1PS0uMSxmPVwidG9wXCIpfXcoXCJ0cmFjZW9yZGVyXCIsdiksbC5pc0dyb3VwZWQoZS5sZWdlbmQpJiZ3KFwidHJhY2Vncm91cGdhcFwiKSx3KFwiaXRlbXNpemluZ1wiKSx3KFwieFwiLGMpLHcoXCJ4YW5jaG9yXCIsaCksdyhcInlcIix1KSx3KFwieWFuY2hvclwiLGYpLHcoXCJ2YWxpZ25cIiksaS5ub25lT3JBbGwocCxiLFtcInhcIixcInlcIl0pfX1mdW5jdGlvbiB3KHQsZSl7cmV0dXJuIGkuY29lcmNlKHAsYixvLHQsZSl9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzXCI6ODAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2F0dHJpYnV0ZXNcIjo2MjcsXCIuL2hlbHBlcnNcIjo2MzN9XSw2MzA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL3Bsb3RzL3Bsb3RzXCIpLG89dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLHM9dChcIi4uLy4uL2xpYi9ldmVudHNcIiksbD10KFwiLi4vZHJhZ2VsZW1lbnRcIiksYz10KFwiLi4vZHJhd2luZ1wiKSx1PXQoXCIuLi9jb2xvclwiKSxoPXQoXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIiksZj10KFwiLi9oYW5kbGVfY2xpY2tcIikscD10KFwiLi9jb25zdGFudHNcIiksZD10KFwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9uc1wiKSxnPXQoXCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCIpLHY9Zy5MSU5FX1NQQUNJTkcsbT1nLkZST01fVEwseT1nLkZST01fQlIseD10KFwiLi9nZXRfbGVnZW5kX2RhdGFcIiksYj10KFwiLi9zdHlsZVwiKSxfPXQoXCIuL2hlbHBlcnNcIiksdz1kLkRCTENMSUNLREVMQVk7ZnVuY3Rpb24gayh0LGUscixuLGkpe3ZhciBhPXIuZGF0YSgpWzBdWzBdLnRyYWNlLG89e2V2ZW50Omksbm9kZTpyLm5vZGUoKSxjdXJ2ZU51bWJlcjphLmluZGV4LGV4cGFuZGVkSW5kZXg6YS5fZXhwYW5kZWRJbmRleCxkYXRhOnQuZGF0YSxsYXlvdXQ6dC5sYXlvdXQsZnJhbWVzOnQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMsY29uZmlnOnQuX2NvbnRleHQsZnVsbERhdGE6dC5fZnVsbERhdGEsZnVsbExheW91dDp0Ll9mdWxsTGF5b3V0fTtpZihhLl9ncm91cCYmKG8uZ3JvdXA9YS5fZ3JvdXApLFwicGllXCI9PT1hLnR5cGUmJihvLmxhYmVsPXIuZGF0dW0oKVswXS5sYWJlbCksITEhPT1zLnRyaWdnZXJIYW5kbGVyKHQsXCJwbG90bHlfbGVnZW5kY2xpY2tcIixvKSlpZigxPT09billLl9jbGlja1RpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2Yocix0LG4pfSx3KTtlbHNlIGlmKDI9PT1uKXtlLl9jbGlja1RpbWVvdXQmJmNsZWFyVGltZW91dChlLl9jbGlja1RpbWVvdXQpLHQuX2xlZ2VuZE1vdXNlRG93blRpbWU9MCwhMSE9PXMudHJpZ2dlckhhbmRsZXIodCxcInBsb3RseV9sZWdlbmRkb3VibGVjbGlja1wiLG8pJiZmKHIsdCxuKX19ZnVuY3Rpb24gQSh0LGUscil7dmFyIG49dC5kYXRhKClbMF1bMF0sYT1lLl9mdWxsTGF5b3V0LHM9bi50cmFjZSxsPW8udHJhY2VJcyhzLFwicGllXCIpLHU9cy5pbmRleCxmPWUuX2NvbnRleHQuZWRpdHMubGVnZW5kVGV4dCYmIWwsZD1sP24ubGFiZWw6cy5uYW1lO2EubWV0YSYmKGQ9aS50ZW1wbGF0ZVN0cmluZyhkLHttZXRhOmEubWV0YX0pKTt2YXIgZz1pLmVuc3VyZVNpbmdsZSh0LFwidGV4dFwiLFwibGVnZW5kdGV4dFwiKTtmdW5jdGlvbiBtKHIpe2guY29udmVydFRvVHNwYW5zKHIsZSxmdW5jdGlvbigpeyFmdW5jdGlvbih0LGUpe3ZhciByPXQuZGF0YSgpWzBdWzBdO2lmKCFyLnRyYWNlLnNob3dsZWdlbmQpcmV0dXJuIHZvaWQgdC5yZW1vdmUoKTt2YXIgbixpLGE9dC5zZWxlY3QoXCJnW2NsYXNzKj1tYXRoLWdyb3VwXVwiKSxvPWEubm9kZSgpLHM9ZS5fZnVsbExheW91dC5sZWdlbmQuZm9udC5zaXplKnY7aWYobyl7dmFyIGw9Yy5iQm94KG8pO249bC5oZWlnaHQsaT1sLndpZHRoLGMuc2V0VHJhbnNsYXRlKGEsMCxuLzQpfWVsc2V7dmFyIHU9dC5zZWxlY3QoXCIubGVnZW5kdGV4dFwiKSxmPWgubGluZUNvdW50KHUpLGQ9dS5ub2RlKCk7bj1zKmYsaT1kP2MuYkJveChkKS53aWR0aDowO3ZhciBnPXMqKC4zKygxLWYpLzIpO2gucG9zaXRpb25UZXh0KHUscC50ZXh0T2Zmc2V0WCxnKX1yLmxpbmVIZWlnaHQ9cyxyLmhlaWdodD1NYXRoLm1heChuLDE2KSszLHIud2lkdGg9aX0odCxlKX0pfWcuYXR0cihcInRleHQtYW5jaG9yXCIsXCJzdGFydFwiKS5jbGFzc2VkKFwidXNlci1zZWxlY3Qtbm9uZVwiLCEwKS5jYWxsKGMuZm9udCxhLmxlZ2VuZC5mb250KS50ZXh0KGY/VChkLHIpOmQpLGgucG9zaXRpb25UZXh0KGcscC50ZXh0T2Zmc2V0WCwwKSxmP2cuY2FsbChoLm1ha2VFZGl0YWJsZSx7Z2Q6ZSx0ZXh0OmR9KS5jYWxsKG0pLm9uKFwiZWRpdFwiLGZ1bmN0aW9uKHQpe3RoaXMudGV4dChUKHQscikpLmNhbGwobSk7dmFyIGE9bi50cmFjZS5fZnVsbElucHV0fHx7fSxzPXt9O2lmKG8uaGFzVHJhbnNmb3JtKGEsXCJncm91cGJ5XCIpKXt2YXIgbD1vLmdldFRyYW5zZm9ybUluZGljZXMoYSxcImdyb3VwYnlcIiksYz1sW2wubGVuZ3RoLTFdLGg9aS5rZXllZENvbnRhaW5lcihhLFwidHJhbnNmb3Jtc1tcIitjK1wiXS5zdHlsZXNcIixcInRhcmdldFwiLFwidmFsdWUubmFtZVwiKTtoLnNldChuLnRyYWNlLl9ncm91cCx0KSxzPWguY29uc3RydWN0VXBkYXRlKCl9ZWxzZSBzLm5hbWU9dDtyZXR1cm4gby5jYWxsKFwiX2d1aVJlc3R5bGVcIixlLHMsdSl9KTptKGcpfWZ1bmN0aW9uIFQodCxlKXt2YXIgcj1NYXRoLm1heCg0LGUpO2lmKHQmJnQudHJpbSgpLmxlbmd0aD49ci8yKXJldHVybiB0O2Zvcih2YXIgbj1yLSh0PXR8fFwiXCIpLmxlbmd0aDtuPjA7bi0tKXQrPVwiIFwiO3JldHVybiB0fWZ1bmN0aW9uIE0odCxlKXt2YXIgcixhPTEsbz1pLmVuc3VyZVNpbmdsZSh0LFwicmVjdFwiLFwibGVnZW5kdG9nZ2xlXCIsZnVuY3Rpb24odCl7dC5zdHlsZShcImN1cnNvclwiLFwicG9pbnRlclwiKS5hdHRyKFwicG9pbnRlci1ldmVudHNcIixcImFsbFwiKS5jYWxsKHUuZmlsbCxcInJnYmEoMCwwLDAsMClcIil9KTtvLm9uKFwibW91c2Vkb3duXCIsZnVuY3Rpb24oKXsocj0obmV3IERhdGUpLmdldFRpbWUoKSktZS5fbGVnZW5kTW91c2VEb3duVGltZTx3P2ErPTE6KGE9MSxlLl9sZWdlbmRNb3VzZURvd25UaW1lPXIpfSksby5vbihcIm1vdXNldXBcIixmdW5jdGlvbigpe2lmKCFlLl9kcmFnZ2VkJiYhZS5fZWRpdGluZyl7dmFyIHI9ZS5fZnVsbExheW91dC5sZWdlbmQ7KG5ldyBEYXRlKS5nZXRUaW1lKCktZS5fbGVnZW5kTW91c2VEb3duVGltZT53JiYoYT1NYXRoLm1heChhLTEsMSkpLGsoZSxyLHQsYSxuLmV2ZW50KX19KX1mdW5jdGlvbiBTKHQsZSxyKXt2YXIgYT10Ll9mdWxsTGF5b3V0LG89YS5sZWdlbmQscz1vLmJvcmRlcndpZHRoLGw9Xy5pc0dyb3VwZWQobyksdT0wO2lmKG8uX3dpZHRoPTAsby5faGVpZ2h0PTAsXy5pc1ZlcnRpY2FsKG8pKWwmJmUuZWFjaChmdW5jdGlvbih0LGUpe2Muc2V0VHJhbnNsYXRlKHRoaXMsMCxlKm8udHJhY2Vncm91cGdhcCl9KSxyLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPWUuaGVpZ2h0LG49ZS53aWR0aDtjLnNldFRyYW5zbGF0ZSh0aGlzLHMsNStzK28uX2hlaWdodCtyLzIpLG8uX2hlaWdodCs9cixvLl93aWR0aD1NYXRoLm1heChvLl93aWR0aCxuKX0pLG8uX3dpZHRoKz00NSsyKnMsby5faGVpZ2h0Kz0xMCsyKnMsbCYmKG8uX2hlaWdodCs9KG8uX2xncm91cHNMZW5ndGgtMSkqby50cmFjZWdyb3VwZ2FwKSx1PTQwO2Vsc2UgaWYobCl7dmFyIGgsZj0wLHA9MCxkPWUuZGF0YSgpLGc9MDtmb3IoaD0wO2g8ZC5sZW5ndGg7aCsrKXt2YXIgdj1kW2hdLG09di5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0ud2lkdGh9KSx5PWkuYWdnTnVtcyhNYXRoLm1heCxudWxsLG0pLHg9di5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlWzBdLmhlaWdodH0sMCk7cD1NYXRoLm1heChwLHkpLGY9TWF0aC5tYXgoZix4KSxnPU1hdGgubWF4KGcsdi5sZW5ndGgpfXArPTUscCs9NDA7dmFyIGI9W28uX3dpZHRoXSx3PVtdLGs9MDtmb3IoaD0wO2g8ZC5sZW5ndGg7aCsrKXthLl9zaXplLnc8cytvLl93aWR0aCs1K3A/KGJbYi5sZW5ndGgtMV09YlswXSxvLl93aWR0aD1wLGsrKyk6by5fd2lkdGgrPXArczt2YXIgQT1rKmY7QSs9az4wP28udHJhY2Vncm91cGdhcDowLHcucHVzaChBKSxiLnB1c2goby5fd2lkdGgpfWUuZWFjaChmdW5jdGlvbih0LGUpe2Muc2V0VHJhbnNsYXRlKHRoaXMsYltlXSx3W2VdKX0pLGUuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbChcImcudHJhY2VzXCIpLGU9MDt0LmVhY2goZnVuY3Rpb24odCl7dmFyIHI9dFswXS5oZWlnaHQ7Yy5zZXRUcmFuc2xhdGUodGhpcywwLDUrcytlK3IvMiksZSs9cn0pfSk7dmFyIFQ9d1t3Lmxlbmd0aC0xXStmO28uX2hlaWdodD0xMCsyKnMrVDt2YXIgTT1NYXRoLm1heC5hcHBseShudWxsLGIpO28uX3dpZHRoPU0rcCs0MCxvLl93aWR0aCs9MipzfWVsc2V7dmFyIFM9MCxFPTAsQz0wLEw9MCx6PTA7ci5lYWNoKGZ1bmN0aW9uKHQpe0M9TWF0aC5tYXgoNDArdFswXS53aWR0aCxDKSx6Kz00MCt0WzBdLndpZHRoKzV9KTt2YXIgTz1hLl9zaXplLnc+cyt6LTU7ci5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj1PPzQwK3RbMF0ud2lkdGg6QztzK0wrNStyPmEuX3NpemUudyYmKEw9MCxTKz1FLG8uX2hlaWdodCs9RSxFPTApLGMuc2V0VHJhbnNsYXRlKHRoaXMscytMLDUrcytlLmhlaWdodC8yK1MpLG8uX3dpZHRoKz01K3IsTCs9NStyLEU9TWF0aC5tYXgoZS5oZWlnaHQsRSl9KSxPP28uX2hlaWdodD1FOm8uX2hlaWdodCs9RSxvLl93aWR0aCs9MipzLG8uX2hlaWdodCs9MTArMipzfW8uX3dpZHRoPU1hdGguY2VpbChvLl93aWR0aCksby5faGVpZ2h0PU1hdGguY2VpbChvLl9oZWlnaHQpO3ZhciBJPXQuX2NvbnRleHQuZWRpdHMubGVnZW5kVGV4dHx8dC5fY29udGV4dC5lZGl0cy5sZWdlbmRQb3NpdGlvbjtyLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPW4uc2VsZWN0KHRoaXMpLnNlbGVjdChcIi5sZWdlbmR0b2dnbGVcIik7Yy5zZXRSZWN0KHIsMCwtZS5oZWlnaHQvMiwoST8wOm8uX3dpZHRoKSt1LGUuaGVpZ2h0KX0pfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5fZnVsbExheW91dC5sZWdlbmQscj1cImxlZnRcIjtpLmlzUmlnaHRBbmNob3IoZSk/cj1cInJpZ2h0XCI6aS5pc0NlbnRlckFuY2hvcihlKSYmKHI9XCJjZW50ZXJcIik7dmFyIG49XCJ0b3BcIjtpLmlzQm90dG9tQW5jaG9yKGUpP249XCJib3R0b21cIjppLmlzTWlkZGxlQW5jaG9yKGUpJiYobj1cIm1pZGRsZVwiKSxhLmF1dG9NYXJnaW4odCxcImxlZ2VuZFwiLHt4OmUueCx5OmUueSxsOmUuX3dpZHRoKm1bcl0scjplLl93aWR0aCp5W3JdLGI6ZS5faGVpZ2h0Knlbbl0sdDplLl9oZWlnaHQqbVtuXX0pfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9XCJsZWdlbmRcIitlLl91aWQ7aWYoZS5faW5mb2xheWVyJiZ0LmNhbGNkYXRhKXt0Ll9sZWdlbmRNb3VzZURvd25UaW1lfHwodC5fbGVnZW5kTW91c2VEb3duVGltZT0wKTt2YXIgcz1lLmxlZ2VuZCxoPWUuc2hvd2xlZ2VuZCYmeCh0LmNhbGNkYXRhLHMpLGY9ZS5oaWRkZW5sYWJlbHN8fFtdO2lmKCFlLnNob3dsZWdlbmR8fCFoLmxlbmd0aClyZXR1cm4gZS5faW5mb2xheWVyLnNlbGVjdEFsbChcIi5sZWdlbmRcIikucmVtb3ZlKCksZS5fdG9wZGVmcy5zZWxlY3QoXCIjXCIrcikucmVtb3ZlKCksdm9pZCBhLmF1dG9NYXJnaW4odCxcImxlZ2VuZFwiKTtmb3IodmFyIGQ9MCxnPTA7ZzxoLmxlbmd0aDtnKyspZm9yKHZhciB2PTA7djxoW2ddLmxlbmd0aDt2Kyspe3ZhciBfPWhbZ11bdl1bMF0sdz1fLnRyYWNlLFQ9by50cmFjZUlzKHcsXCJwaWVcIik/Xy5sYWJlbDp3Lm5hbWU7ZD1NYXRoLm1heChkLFQmJlQubGVuZ3RofHwwKX12YXIgQz0hMSxMPWkuZW5zdXJlU2luZ2xlKGUuX2luZm9sYXllcixcImdcIixcImxlZ2VuZFwiLGZ1bmN0aW9uKHQpe3QuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsXCJhbGxcIiksQz0hMH0pLHo9aS5lbnN1cmVTaW5nbGVCeUlkKGUuX3RvcGRlZnMsXCJjbGlwUGF0aFwiLHIsZnVuY3Rpb24odCl7dC5hcHBlbmQoXCJyZWN0XCIpfSksTz1pLmVuc3VyZVNpbmdsZShMLFwicmVjdFwiLFwiYmdcIixmdW5jdGlvbih0KXt0LmF0dHIoXCJzaGFwZS1yZW5kZXJpbmdcIixcImNyaXNwRWRnZXNcIil9KTtPLmNhbGwodS5zdHJva2Uscy5ib3JkZXJjb2xvcikuY2FsbCh1LmZpbGwscy5iZ2NvbG9yKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLHMuYm9yZGVyd2lkdGgrXCJweFwiKTt2YXIgST1pLmVuc3VyZVNpbmdsZShMLFwiZ1wiLFwic2Nyb2xsYm94XCIpLEQ9aS5lbnN1cmVTaW5nbGUoTCxcInJlY3RcIixcInNjcm9sbGJhclwiLGZ1bmN0aW9uKHQpe3QuYXR0cih7cng6MjAscnk6Myx3aWR0aDowLGhlaWdodDowfSkuY2FsbCh1LmZpbGwsXCIjODA4QkE0XCIpfSksUD1JLnNlbGVjdEFsbChcImcuZ3JvdXBzXCIpLmRhdGEoaCk7UC5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsXCJncm91cHNcIiksUC5leGl0KCkucmVtb3ZlKCk7dmFyIFI9UC5zZWxlY3RBbGwoXCJnLnRyYWNlc1wiKS5kYXRhKGkuaWRlbnRpdHkpO1IuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLFwidHJhY2VzXCIpLFIuZXhpdCgpLnJlbW92ZSgpLFIuc3R5bGUoXCJvcGFjaXR5XCIsZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZTtyZXR1cm4gby50cmFjZUlzKGUsXCJwaWVcIik/LTEhPT1mLmluZGV4T2YodFswXS5sYWJlbCk/LjU6MTpcImxlZ2VuZG9ubHlcIj09PWUudmlzaWJsZT8uNToxfSkuZWFjaChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLmNhbGwoQSx0LGQpfSkuY2FsbChiLHQpLmVhY2goZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5jYWxsKE0sdCl9KSxpLnN5bmNPckFzeW5jKFthLnByZXZpb3VzUHJvbWlzZXMsZnVuY3Rpb24oKXtDJiYoUyh0LFAsUiksRSh0KSk7dmFyIHU9ZS53aWR0aCxoPWUuaGVpZ2h0O1ModCxQLFIpLHMuX2hlaWdodD5oP2Z1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQubGVnZW5kLHI9XCJsZWZ0XCI7aS5pc1JpZ2h0QW5jaG9yKGUpP3I9XCJyaWdodFwiOmkuaXNDZW50ZXJBbmNob3IoZSkmJihyPVwiY2VudGVyXCIpO2EuYXV0b01hcmdpbih0LFwibGVnZW5kXCIse3g6ZS54LHk6LjUsbDplLl93aWR0aCptW3JdLHI6ZS5fd2lkdGgqeVtyXSxiOjAsdDowfSl9KHQpOkUodCk7dmFyIGY9ZS5fc2l6ZSxkPWYubCtmLncqcy54LGc9Zi50K2YuaCooMS1zLnkpO2kuaXNSaWdodEFuY2hvcihzKT9kLT1zLl93aWR0aDppLmlzQ2VudGVyQW5jaG9yKHMpJiYoZC09cy5fd2lkdGgvMiksaS5pc0JvdHRvbUFuY2hvcihzKT9nLT1zLl9oZWlnaHQ6aS5pc01pZGRsZUFuY2hvcihzKSYmKGctPXMuX2hlaWdodC8yKTt2YXIgdj1zLl93aWR0aCx4PWYudzt2Png/KGQ9Zi5sLHY9eCk6KGQrdj51JiYoZD11LXYpLGQ8MCYmKGQ9MCksdj1NYXRoLm1pbih1LWQscy5fd2lkdGgpKTt2YXIgYixfLHcsQSxUPXMuX2hlaWdodCxNPWYuaDtpZihUPk0/KGc9Zi50LFQ9TSk6KGcrVD5oJiYoZz1oLVQpLGc8MCYmKGc9MCksVD1NYXRoLm1pbihoLWcscy5faGVpZ2h0KSksYy5zZXRUcmFuc2xhdGUoTCxkLGcpLEQub24oXCIuZHJhZ1wiLG51bGwpLEwub24oXCJ3aGVlbFwiLG51bGwpLHMuX2hlaWdodDw9VHx8dC5fY29udGV4dC5zdGF0aWNQbG90KU8uYXR0cih7d2lkdGg6di1zLmJvcmRlcndpZHRoLGhlaWdodDpULXMuYm9yZGVyd2lkdGgseDpzLmJvcmRlcndpZHRoLzIseTpzLmJvcmRlcndpZHRoLzJ9KSxjLnNldFRyYW5zbGF0ZShJLDAsMCksei5zZWxlY3QoXCJyZWN0XCIpLmF0dHIoe3dpZHRoOnYtMipzLmJvcmRlcndpZHRoLGhlaWdodDpULTIqcy5ib3JkZXJ3aWR0aCx4OnMuYm9yZGVyd2lkdGgseTpzLmJvcmRlcndpZHRofSksYy5zZXRDbGlwVXJsKEkscix0KSxjLnNldFJlY3QoRCwwLDAsMCwwKSxkZWxldGUgcy5fc2Nyb2xsWTtlbHNle3ZhciBGLEIsTj1NYXRoLm1heChwLnNjcm9sbEJhck1pbkhlaWdodCxUKlQvcy5faGVpZ2h0KSxqPVQtTi0yKnAuc2Nyb2xsQmFyTWFyZ2luLFY9cy5faGVpZ2h0LVQsVT1qL1YscT1NYXRoLm1pbihzLl9zY3JvbGxZfHwwLFYpO08uYXR0cih7d2lkdGg6di0yKnMuYm9yZGVyd2lkdGgrcC5zY3JvbGxCYXJXaWR0aCtwLnNjcm9sbEJhck1hcmdpbixoZWlnaHQ6VC1zLmJvcmRlcndpZHRoLHg6cy5ib3JkZXJ3aWR0aC8yLHk6cy5ib3JkZXJ3aWR0aC8yfSksei5zZWxlY3QoXCJyZWN0XCIpLmF0dHIoe3dpZHRoOnYtMipzLmJvcmRlcndpZHRoK3Auc2Nyb2xsQmFyV2lkdGgrcC5zY3JvbGxCYXJNYXJnaW4saGVpZ2h0OlQtMipzLmJvcmRlcndpZHRoLHg6cy5ib3JkZXJ3aWR0aCx5OnMuYm9yZGVyd2lkdGgrcX0pLGMuc2V0Q2xpcFVybChJLHIsdCksRyhxLE4sVSksTC5vbihcIndoZWVsXCIsZnVuY3Rpb24oKXtHKHE9aS5jb25zdHJhaW4ocy5fc2Nyb2xsWStuLmV2ZW50LmRlbHRhWS9qKlYsMCxWKSxOLFUpLDAhPT1xJiZxIT09ViYmbi5ldmVudC5wcmV2ZW50RGVmYXVsdCgpfSk7dmFyIEg9bi5iZWhhdmlvci5kcmFnKCkub24oXCJkcmFnc3RhcnRcIixmdW5jdGlvbigpe0Y9bi5ldmVudC5zb3VyY2VFdmVudC5jbGllbnRZLEI9cX0pLm9uKFwiZHJhZ1wiLGZ1bmN0aW9uKCl7dmFyIHQ9bi5ldmVudC5zb3VyY2VFdmVudDsyPT09dC5idXR0b25zfHx0LmN0cmxLZXl8fEcocT1pLmNvbnN0cmFpbigodC5jbGllbnRZLUYpL1UrQiwwLFYpLE4sVSl9KTtELmNhbGwoSCl9ZnVuY3Rpb24gRyhlLHIsbil7cy5fc2Nyb2xsWT10Ll9mdWxsTGF5b3V0LmxlZ2VuZC5fc2Nyb2xsWT1lLGMuc2V0VHJhbnNsYXRlKEksMCwtZSksYy5zZXRSZWN0KEQsdixwLnNjcm9sbEJhck1hcmdpbitlKm4scC5zY3JvbGxCYXJXaWR0aCxyKSx6LnNlbGVjdChcInJlY3RcIikuYXR0cih7eTpzLmJvcmRlcndpZHRoK2V9KX10Ll9jb250ZXh0LmVkaXRzLmxlZ2VuZFBvc2l0aW9uJiYoTC5jbGFzc2VkKFwiY3Vyc29yLW1vdmVcIiwhMCksbC5pbml0KHtlbGVtZW50Okwubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKCl7dmFyIHQ9Yy5nZXRUcmFuc2xhdGUoTCk7dz10LngsQT10Lnl9LG1vdmVGbjpmdW5jdGlvbih0LGUpe3ZhciByPXcrdCxuPUErZTtjLnNldFRyYW5zbGF0ZShMLHIsbiksYj1sLmFsaWduKHIsMCxmLmwsZi5sK2YudyxzLnhhbmNob3IpLF89bC5hbGlnbihuLDAsZi50K2YuaCxmLnQscy55YW5jaG9yKX0sZG9uZUZuOmZ1bmN0aW9uKCl7dm9pZCAwIT09YiYmdm9pZCAwIT09XyYmby5jYWxsKFwiX2d1aVJlbGF5b3V0XCIsdCx7XCJsZWdlbmQueFwiOmIsXCJsZWdlbmQueVwiOl99KX0sY2xpY2tGbjpmdW5jdGlvbihyLG4pe3ZhciBpPWUuX2luZm9sYXllci5zZWxlY3RBbGwoXCJnLnRyYWNlc1wiKS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBuLmNsaWVudFg+PXQubGVmdCYmbi5jbGllbnRYPD10LnJpZ2h0JiZuLmNsaWVudFk+PXQudG9wJiZuLmNsaWVudFk8PXQuYm90dG9tfSk7aS5zaXplKCk+MCYmayh0LEwsaSxyLG4pfX0pKX1dLHQpfX19LHtcIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIjo2NzMsXCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zXCI6Njc3LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2V2ZW50c1wiOjY5MCxcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiOjcyNSxcIi4uLy4uL3Bsb3RzL3Bsb3RzXCI6ODEwLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9jb2xvclwiOjU3OCxcIi4uL2RyYWdlbGVtZW50XCI6NTk2LFwiLi4vZHJhd2luZ1wiOjU5OSxcIi4vY29uc3RhbnRzXCI6NjI4LFwiLi9nZXRfbGVnZW5kX2RhdGFcIjo2MzEsXCIuL2hhbmRsZV9jbGlja1wiOjYzMixcIi4vaGVscGVyc1wiOjYzMyxcIi4vc3R5bGVcIjo2MzUsZDM6MTU1fV0sNjMxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4vaGVscGVyc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhLG89e30scz1bXSxsPSExLGM9e30sdT0wO2Z1bmN0aW9uIGgodCxyKXtpZihcIlwiIT09dCYmaS5pc0dyb3VwZWQoZSkpLTE9PT1zLmluZGV4T2YodCk/KHMucHVzaCh0KSxsPSEwLG9bdF09W1tyXV0pOm9bdF0ucHVzaChbcl0pO2Vsc2V7dmFyIG49XCJ+fmlcIit1O3MucHVzaChuKSxvW25dPVtbcl1dLHUrK319Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGY9dFtyXSxwPWZbMF0sZD1wLnRyYWNlLGc9ZC5sZWdlbmRncm91cDtpZihkLnZpc2libGUmJmQuc2hvd2xlZ2VuZClpZihuLnRyYWNlSXMoZCxcInBpZVwiKSlmb3IoY1tnXXx8KGNbZ109e30pLGE9MDthPGYubGVuZ3RoO2ErKyl7dmFyIHY9ZlthXS5sYWJlbDtjW2ddW3ZdfHwoaChnLHtsYWJlbDp2LGNvbG9yOmZbYV0uY29sb3IsaTpmW2FdLmksdHJhY2U6ZCxwdHM6ZlthXS5wdHN9KSxjW2ddW3ZdPSEwKX1lbHNlIGgoZyxwKX1pZighcy5sZW5ndGgpcmV0dXJuW107dmFyIG0seSx4PXMubGVuZ3RoO2lmKGwmJmkuaXNHcm91cGVkKGUpKWZvcih5PW5ldyBBcnJheSh4KSxyPTA7cjx4O3IrKyltPW9bc1tyXV0seVtyXT1pLmlzUmV2ZXJzZWQoZSk/bS5yZXZlcnNlKCk6bTtlbHNle2Zvcih5PVtuZXcgQXJyYXkoeCldLHI9MDtyPHg7cisrKW09b1tzW3JdXVswXSx5WzBdW2kuaXNSZXZlcnNlZChlKT94LXItMTpyXT1tO3g9MX1yZXR1cm4gZS5fbGdyb3Vwc0xlbmd0aD14LHl9fSx7XCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vaGVscGVyc1wiOjYzM31dLDYzMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcmVnaXN0cnlcIiksYT0hMDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKCFlLl9kcmFnZ2VkJiYhZS5fZWRpdGluZyl7dmFyIG8scyxsLGMsdSxoPWUuX2Z1bGxMYXlvdXQuaGlkZGVubGFiZWxzP2UuX2Z1bGxMYXlvdXQuaGlkZGVubGFiZWxzLnNsaWNlKCk6W10sZj10LmRhdGEoKVswXVswXSxwPWUuX2Z1bGxEYXRhLGQ9Zi50cmFjZSxnPWQubGVnZW5kZ3JvdXAsdj17fSxtPVtdLHk9W10seD1bXTtpZigxPT09ciYmYSYmZS5kYXRhJiZlLl9jb250ZXh0LnNob3dUaXBzPyhuLm5vdGlmaWVyKG4uXyhlLFwiRG91YmxlLWNsaWNrIG9uIGxlZ2VuZCB0byBpc29sYXRlIG9uZSB0cmFjZVwiKSxcImxvbmdcIiksYT0hMSk6YT0hMSxpLnRyYWNlSXMoZCxcInBpZVwiKSl7dmFyIGI9Zi5sYWJlbCxfPWguaW5kZXhPZihiKTsxPT09cj8tMT09PV8/aC5wdXNoKGIpOmguc3BsaWNlKF8sMSk6Mj09PXImJihoPVtdLGUuY2FsY2RhdGFbMF0uZm9yRWFjaChmdW5jdGlvbih0KXtiIT09dC5sYWJlbCYmaC5wdXNoKHQubGFiZWwpfSksZS5fZnVsbExheW91dC5oaWRkZW5sYWJlbHMmJmUuX2Z1bGxMYXlvdXQuaGlkZGVubGFiZWxzLmxlbmd0aD09PWgubGVuZ3RoJiYtMT09PV8mJihoPVtdKSksaS5jYWxsKFwiX2d1aVJlbGF5b3V0XCIsZSxcImhpZGRlbmxhYmVsc1wiLGgpfWVsc2V7dmFyIHcsaz1nJiZnLmxlbmd0aCxBPVtdO2lmKGspZm9yKG89MDtvPHAubGVuZ3RoO28rKykodz1wW29dKS52aXNpYmxlJiZ3LmxlZ2VuZGdyb3VwPT09ZyYmQS5wdXNoKG8pO2lmKDE9PT1yKXt2YXIgVDtzd2l0Y2goZC52aXNpYmxlKXtjYXNlITA6VD1cImxlZ2VuZG9ubHlcIjticmVhaztjYXNlITE6VD0hMTticmVhaztjYXNlXCJsZWdlbmRvbmx5XCI6VD0hMH1pZihrKWZvcihvPTA7bzxwLmxlbmd0aDtvKyspITEhPT1wW29dLnZpc2libGUmJnBbb10ubGVnZW5kZ3JvdXA9PT1nJiZPKHBbb10sVCk7ZWxzZSBPKGQsVCl9ZWxzZSBpZigyPT09cil7dmFyIE0sUyxFPSEwO2ZvcihvPTA7bzxwLmxlbmd0aDtvKyspaWYoIShwW29dPT09ZCkmJiEoTT1rJiZwW29dLmxlZ2VuZGdyb3VwPT09ZykmJiEwPT09cFtvXS52aXNpYmxlJiYhaS50cmFjZUlzKHBbb10sXCJub3RMZWdlbmRJc29sYXRhYmxlXCIpKXtFPSExO2JyZWFrfWZvcihvPTA7bzxwLmxlbmd0aDtvKyspaWYoITEhPT1wW29dLnZpc2libGUmJiFpLnRyYWNlSXMocFtvXSxcIm5vdExlZ2VuZElzb2xhdGFibGVcIikpc3dpdGNoKGQudmlzaWJsZSl7Y2FzZVwibGVnZW5kb25seVwiOk8ocFtvXSwhMCk7YnJlYWs7Y2FzZSEwOlM9ISFFfHxcImxlZ2VuZG9ubHlcIixNPXBbb109PT1kfHxrJiZwW29dLmxlZ2VuZGdyb3VwPT09ZyxPKHBbb10sISFNfHxTKX19Zm9yKG89MDtvPHkubGVuZ3RoO28rKylpZihsPXlbb10pe3ZhciBDPWwuY29uc3RydWN0VXBkYXRlKCksTD1PYmplY3Qua2V5cyhDKTtmb3Iocz0wO3M8TC5sZW5ndGg7cysrKWM9TFtzXSwodltjXT12W2NdfHxbXSlbeFtvXV09Q1tjXX1mb3IodT1PYmplY3Qua2V5cyh2KSxvPTA7bzx1Lmxlbmd0aDtvKyspZm9yKGM9dVtvXSxzPTA7czxtLmxlbmd0aDtzKyspdltjXS5oYXNPd25Qcm9wZXJ0eShzKXx8KHZbY11bc109dm9pZCAwKTtpLmNhbGwoXCJfZ3VpUmVzdHlsZVwiLGUsdixtKX19ZnVuY3Rpb24geih0LGUscil7dmFyIG49bS5pbmRleE9mKHQpLGk9dltlXTtyZXR1cm4gaXx8KGk9dltlXT1bXSksLTE9PT1tLmluZGV4T2YodCkmJihtLnB1c2godCksbj1tLmxlbmd0aC0xKSxpW25dPXIsbn1mdW5jdGlvbiBPKHQsZSl7dmFyIHI9dC5fZnVsbElucHV0O2lmKGkuaGFzVHJhbnNmb3JtKHIsXCJncm91cGJ5XCIpKXt2YXIgYT15W3IuaW5kZXhdO2lmKCFhKXt2YXIgbz1pLmdldFRyYW5zZm9ybUluZGljZXMocixcImdyb3VwYnlcIikscz1vW28ubGVuZ3RoLTFdO2E9bi5rZXllZENvbnRhaW5lcihyLFwidHJhbnNmb3Jtc1tcIitzK1wiXS5zdHlsZXNcIixcInRhcmdldFwiLFwidmFsdWUudmlzaWJsZVwiKSx5W3IuaW5kZXhdPWF9dmFyIGw9YS5nZXQodC5fZ3JvdXApO3ZvaWQgMD09PWwmJihsPSEwKSwhMSE9PWwmJmEuc2V0KHQuX2dyb3VwLGUpLHhbci5pbmRleF09eihyLmluZGV4LFwidmlzaWJsZVwiLCExIT09ci52aXNpYmxlKX1lbHNle3ZhciBjPSExIT09ci52aXNpYmxlJiZlO3ooci5pbmRleCxcInZpc2libGVcIixjKX19fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4Mjl9XSw2MzM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLmlzR3JvdXBlZD1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PSh0LnRyYWNlb3JkZXJ8fFwiXCIpLmluZGV4T2YoXCJncm91cGVkXCIpfSxyLmlzVmVydGljYWw9ZnVuY3Rpb24odCl7cmV0dXJuXCJoXCIhPT10Lm9yaWVudGF0aW9ufSxyLmlzUmV2ZXJzZWQ9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT0odC50cmFjZW9yZGVyfHxcIlwiKS5pbmRleE9mKFwicmV2ZXJzZWRcIil9fSx7fV0sNjM0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwiY29tcG9uZW50XCIsbmFtZTpcImxlZ2VuZFwiLGxheW91dEF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxkcmF3OnQoXCIuL2RyYXdcIiksc3R5bGU6dChcIi4vc3R5bGVcIil9fSx7XCIuL2F0dHJpYnV0ZXNcIjo2MjcsXCIuL2RlZmF1bHRzXCI6NjI5LFwiLi9kcmF3XCI6NjMwLFwiLi9zdHlsZVwiOjYzNX1dLDYzNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxhPXQoXCIuLi8uLi9saWJcIiksbz10KFwiLi4vZHJhd2luZ1wiKSxzPXQoXCIuLi9jb2xvclwiKSxsPXQoXCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlc1wiKSxjPXQoXCIuLi8uLi90cmFjZXMvcGllL3N0eWxlX29uZVwiKSx1PXQoXCIuLi8uLi90cmFjZXMvcGllL2hlbHBlcnNcIikuY2FzdE9wdGlvbixoPTEyLGY9NSxwPTIsZD0xMCxnPTU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5fZnVsbExheW91dC5sZWdlbmQsdj1cImNvbnN0YW50XCI9PT1yLml0ZW1zaXppbmc7ZnVuY3Rpb24gbSh0LGUscixuKXt2YXIgaTtpZih0KzEpaT10O2Vsc2V7aWYoIShlJiZlLndpZHRoPjApKXJldHVybiAwO2k9ZS53aWR0aH1yZXR1cm4gdj9uOk1hdGgubWluKGkscil9dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLGk9YS5lbnN1cmVTaW5nbGUoZSxcImdcIixcImxheWVyc1wiKTtpLnN0eWxlKFwib3BhY2l0eVwiLHRbMF0udHJhY2Uub3BhY2l0eSk7dmFyIG89ci52YWxpZ24scz10WzBdLmxpbmVIZWlnaHQsbD10WzBdLmhlaWdodDtpZihcIm1pZGRsZVwiIT09byYmcyYmbCl7dmFyIGM9e3RvcDoxLGJvdHRvbTotMX1bb10qKC41KihzLWwrMykpO2kuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKDAsXCIrYytcIilcIil9ZWxzZSBpLmF0dHIoXCJ0cmFuc2Zvcm1cIixudWxsKTtpLnNlbGVjdEFsbChcImcubGVnZW5kZmlsbFwiKS5kYXRhKFt0XSkuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJsZWdlbmRmaWxsXCIsITApLGkuc2VsZWN0QWxsKFwiZy5sZWdlbmRsaW5lc1wiKS5kYXRhKFt0XSkuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJsZWdlbmRsaW5lc1wiLCEwKTt2YXIgdT1pLnNlbGVjdEFsbChcImcubGVnZW5kc3ltYm9sc1wiKS5kYXRhKFt0XSk7dS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcImxlZ2VuZHN5bWJvbHNcIiwhMCksdS5zZWxlY3RBbGwoXCJnLmxlZ2VuZHBvaW50c1wiKS5kYXRhKFt0XSkuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJsZWdlbmRwb2ludHNcIiwhMCl9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1bXTtcIndhdGVyZmFsbFwiPT09ZS50eXBlJiZlLnZpc2libGUmJihyPXRbMF0uaGFzVG90YWxzP1tbXCJpbmNyZWFzaW5nXCIsXCJNLTYsLTZWNkgwWlwiXSxbXCJ0b3RhbHNcIixcIk02LDZIMEwtNiwtNkgtMFpcIl0sW1wiZGVjcmVhc2luZ1wiLFwiTTYsNlYtNkgwWlwiXV06W1tcImluY3JlYXNpbmdcIixcIk0tNiwtNlY2SDZaXCJdLFtcImRlY3JlYXNpbmdcIixcIk02LDZWLTZILTZaXCJdXSk7dmFyIGk9bi5zZWxlY3QodGhpcykuc2VsZWN0KFwiZy5sZWdlbmRwb2ludHNcIikuc2VsZWN0QWxsKFwicGF0aC5sZWdlbmR3YXRlcmZhbGxcIikuZGF0YShyKTtpLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5jbGFzc2VkKFwibGVnZW5kd2F0ZXJmYWxsXCIsITApLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZSgyMCwwKVwiKS5zdHlsZShcInN0cm9rZS1taXRlcmxpbWl0XCIsMSksaS5leGl0KCkucmVtb3ZlKCksaS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGk9ZVt0WzBdXS5tYXJrZXIsYT1tKHZvaWQgMCxpLmxpbmUsZyxwKTtyLmF0dHIoXCJkXCIsdFsxXSkuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixhK1wicHhcIikuY2FsbChzLmZpbGwsaS5jb2xvciksYSYmci5jYWxsKHMuc3Ryb2tlLGkubGluZS5jb2xvcil9KX0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPWUubWFya2VyfHx7fSxhPXIubGluZXx8e30sbz1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoXCJnLmxlZ2VuZHBvaW50c1wiKS5zZWxlY3RBbGwoXCJwYXRoLmxlZ2VuZGJhclwiKS5kYXRhKGkudHJhY2VJcyhlLFwiYmFyXCIpP1t0XTpbXSk7by5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChcImxlZ2VuZGJhclwiLCEwKS5hdHRyKFwiZFwiLFwiTTYsNkgtNlYtNkg2WlwiKS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoMjAsMClcIiksby5leGl0KCkucmVtb3ZlKCksby5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLGk9dFswXSxvPW0oaS5tbHcsci5saW5lLGcscCk7ZS5zdHlsZShcInN0cm9rZS13aWR0aFwiLG8rXCJweFwiKS5jYWxsKHMuZmlsbCxpLm1jfHxyLmNvbG9yKSxvJiZzLnN0cm9rZShlLGkubWxjfHxhLmNvbG9yKX0pfSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9bi5zZWxlY3QodGhpcykuc2VsZWN0KFwiZy5sZWdlbmRwb2ludHNcIikuc2VsZWN0QWxsKFwicGF0aC5sZWdlbmRib3hcIikuZGF0YShpLnRyYWNlSXMoZSxcImJveC12aW9saW5cIikmJmUudmlzaWJsZT9bdF06W10pO3IuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoXCJsZWdlbmRib3hcIiwhMCkuYXR0cihcImRcIixcIk02LDZILTZWLTZINlpcIikuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKDIwLDApXCIpLHIuZXhpdCgpLnJlbW92ZSgpLHIuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLHI9bSh2b2lkIDAsZS5saW5lLGcscCk7dC5zdHlsZShcInN0cm9rZS13aWR0aFwiLHIrXCJweFwiKS5jYWxsKHMuZmlsbCxlLmZpbGxjb2xvciksciYmcy5zdHJva2UodCxlLmxpbmUuY29sb3IpfSl9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj1lLnRyYWNlLG89bi5zZWxlY3QodGhpcykuc2VsZWN0KFwiZy5sZWdlbmRwb2ludHNcIikuc2VsZWN0QWxsKFwicGF0aC5sZWdlbmRwaWVcIikuZGF0YShpLnRyYWNlSXMocixcInBpZVwiKSYmci52aXNpYmxlP1t0XTpbXSk7aWYoby5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChcImxlZ2VuZHBpZVwiLCEwKS5hdHRyKFwiZFwiLFwiTTYsNkgtNlYtNkg2WlwiKS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoMjAsMClcIiksby5leGl0KCkucmVtb3ZlKCksby5zaXplKCkpe3ZhciBzPShyLm1hcmtlcnx8e30pLmxpbmUsbD1tKHUocy53aWR0aCxlLnB0cykscyxnLHApLGg9YS5taW5FeHRlbmQocix7bWFya2VyOntsaW5lOnt3aWR0aDpsfX19KSxmPWEubWluRXh0ZW5kKGUse3RyYWNlOmh9KTtjKG8sZixoKX19KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByLGkscz10WzBdLGM9cy50cmFjZSx1PWMudmlzaWJsZSYmYy5maWxsJiZcIm5vbmVcIiE9PWMuZmlsbCxoPWwuaGFzTGluZXMoYykscD1jLmNvbnRvdXJzLGc9ITEsdj0hMTtpZihwKXt2YXIgeT1wLmNvbG9yaW5nO1wibGluZXNcIj09PXk/Zz0hMDpoPVwibm9uZVwiPT09eXx8XCJoZWF0bWFwXCI9PT15fHxwLnNob3dsaW5lcyxcImNvbnN0cmFpbnRcIj09PXAudHlwZT91PVwiPVwiIT09cC5fb3BlcmF0aW9uOlwiZmlsbFwiIT09eSYmXCJoZWF0bWFwXCIhPT15fHwodj0hMCl9dmFyIHg9bC5oYXNNYXJrZXJzKGMpfHxsLmhhc1RleHQoYyksYj11fHx2LF89aHx8Zyx3PXh8fCFiP1wiTTUsMFwiOl8/XCJNNSwtMlwiOlwiTTUsLTNcIixrPW4uc2VsZWN0KHRoaXMpLEE9ay5zZWxlY3QoXCIubGVnZW5kZmlsbFwiKS5zZWxlY3RBbGwoXCJwYXRoXCIpLmRhdGEodXx8dj9bdF06W10pO2lmKEEuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoXCJqcy1maWxsXCIsITApLEEuZXhpdCgpLnJlbW92ZSgpLEEuYXR0cihcImRcIix3K1wiaDMwdjZoLTMwelwiKS5jYWxsKHU/by5maWxsR3JvdXBTdHlsZTpmdW5jdGlvbih0KXtpZih0LnNpemUoKSl7dmFyIHI9XCJsZWdlbmRmaWxsLVwiK2MudWlkO28uZ3JhZGllbnQodCxlLHIsXCJob3Jpem9udGFscmV2ZXJzZWRcIixjLmNvbG9yc2NhbGUsXCJmaWxsXCIpfX0pLGh8fGcpe3ZhciBUPW0odm9pZCAwLGMubGluZSxkLGYpO2k9YS5taW5FeHRlbmQoYyx7bGluZTp7d2lkdGg6VH19KSxyPVthLm1pbkV4dGVuZChzLHt0cmFjZTppfSldfXZhciBNPWsuc2VsZWN0KFwiLmxlZ2VuZGxpbmVzXCIpLnNlbGVjdEFsbChcInBhdGhcIikuZGF0YShofHxnP1tyXTpbXSk7TS5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChcImpzLWxpbmVcIiwhMCksTS5leGl0KCkucmVtb3ZlKCksTS5hdHRyKFwiZFwiLHcrKGc/XCJsMzAsMC4wMDAxXCI6XCJoMzBcIikpLmNhbGwoaD9vLmxpbmVHcm91cFN0eWxlOmZ1bmN0aW9uKHQpe2lmKHQuc2l6ZSgpKXt2YXIgcj1cImxlZ2VuZGxpbmUtXCIrYy51aWQ7by5saW5lR3JvdXBTdHlsZSh0KSxvLmdyYWRpZW50KHQsZSxyLFwiaG9yaXpvbnRhbHJldmVyc2VkXCIsYy5jb2xvcnNjYWxlLFwic3Ryb2tlXCIpfX0pfSkuZWFjaChmdW5jdGlvbih0KXt2YXIgcixpLHM9dFswXSxjPXMudHJhY2UsdT1sLmhhc01hcmtlcnMoYyksZD1sLmhhc1RleHQoYyksZz1sLmhhc0xpbmVzKGMpO2Z1bmN0aW9uIG0odCxlLHIsbil7dmFyIGk9YS5uZXN0ZWRQcm9wZXJ0eShjLHQpLmdldCgpLG89YS5pc0FycmF5T3JUeXBlZEFycmF5KGkpJiZlP2UoaSk6aTtpZih2JiZvJiZ2b2lkIDAhPT1uJiYobz1uKSxyKXtpZihvPHJbMF0pcmV0dXJuIHJbMF07aWYobz5yWzFdKXJldHVybiByWzFdfXJldHVybiBvfWZ1bmN0aW9uIHkodCl7cmV0dXJuIHRbMF19aWYodXx8ZHx8Zyl7dmFyIHg9e30sYj17fTtpZih1KXt4Lm1jPW0oXCJtYXJrZXIuY29sb3JcIix5KSx4Lm14PW0oXCJtYXJrZXIuc3ltYm9sXCIseSkseC5tbz1tKFwibWFya2VyLm9wYWNpdHlcIixhLm1lYW4sWy4yLDFdKSx4Lm1sYz1tKFwibWFya2VyLmxpbmUuY29sb3JcIix5KSx4Lm1sdz1tKFwibWFya2VyLmxpbmUud2lkdGhcIixhLm1lYW4sWzAsNV0scCksYi5tYXJrZXI9e3NpemVyZWY6MSxzaXplbWluOjEsc2l6ZW1vZGU6XCJkaWFtZXRlclwifTt2YXIgXz1tKFwibWFya2VyLnNpemVcIixhLm1lYW4sWzIsMTZdLGgpO3gubXM9XyxiLm1hcmtlci5zaXplPV99ZyYmKGIubGluZT17d2lkdGg6bShcImxpbmUud2lkdGhcIix5LFswLDEwXSxmKX0pLGQmJih4LnR4PVwiQWFcIix4LnRwPW0oXCJ0ZXh0cG9zaXRpb25cIix5KSx4LnRzPTEwLHgudGM9bShcInRleHRmb250LmNvbG9yXCIseSkseC50Zj1tKFwidGV4dGZvbnQuZmFtaWx5XCIseSkpLHI9W2EubWluRXh0ZW5kKHMseCldLChpPWEubWluRXh0ZW5kKGMsYikpLnNlbGVjdGVkcG9pbnRzPW51bGx9dmFyIHc9bi5zZWxlY3QodGhpcykuc2VsZWN0KFwiZy5sZWdlbmRwb2ludHNcIiksaz13LnNlbGVjdEFsbChcInBhdGguc2NhdHRlcnB0c1wiKS5kYXRhKHU/cjpbXSk7ay5lbnRlcigpLmluc2VydChcInBhdGhcIixcIjpmaXJzdC1jaGlsZFwiKS5jbGFzc2VkKFwic2NhdHRlcnB0c1wiLCEwKS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoMjAsMClcIiksay5leGl0KCkucmVtb3ZlKCksay5jYWxsKG8ucG9pbnRTdHlsZSxpLGUpLHUmJihyWzBdLm1yYz0zKTt2YXIgQT13LnNlbGVjdEFsbChcImcucG9pbnR0ZXh0XCIpLmRhdGEoZD9yOltdKTtBLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwicG9pbnR0ZXh0XCIsITApLmFwcGVuZChcInRleHRcIikuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKDIwLDApXCIpLEEuZXhpdCgpLnJlbW92ZSgpLEEuc2VsZWN0QWxsKFwidGV4dFwiKS5jYWxsKG8udGV4dFBvaW50U3R5bGUsaSxlKX0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPW4uc2VsZWN0KHRoaXMpLnNlbGVjdChcImcubGVnZW5kcG9pbnRzXCIpLnNlbGVjdEFsbChcInBhdGgubGVnZW5kY2FuZGxlXCIpLmRhdGEoXCJjYW5kbGVzdGlja1wiPT09ZS50eXBlJiZlLnZpc2libGU/W3QsdF06W10pO3IuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoXCJsZWdlbmRjYW5kbGVcIiwhMCkuYXR0cihcImRcIixmdW5jdGlvbih0LGUpe3JldHVybiBlP1wiTS0xNSwwSC04TS04LDZWLTZIOFpcIjpcIk0xNSwwSDhNOCwtNlY2SC04WlwifSkuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKDIwLDApXCIpLnN0eWxlKFwic3Ryb2tlLW1pdGVybGltaXRcIiwxKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmVhY2goZnVuY3Rpb24odCxyKXt2YXIgaT1uLnNlbGVjdCh0aGlzKSxhPWVbcj9cImluY3JlYXNpbmdcIjpcImRlY3JlYXNpbmdcIl0sbz1tKHZvaWQgMCxhLmxpbmUsZyxwKTtpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsbytcInB4XCIpLmNhbGwocy5maWxsLGEuZmlsbGNvbG9yKSxvJiZzLnN0cm9rZShpLGEubGluZS5jb2xvcil9KX0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPW4uc2VsZWN0KHRoaXMpLnNlbGVjdChcImcubGVnZW5kcG9pbnRzXCIpLnNlbGVjdEFsbChcInBhdGgubGVnZW5kb2hsY1wiKS5kYXRhKFwib2hsY1wiPT09ZS50eXBlJiZlLnZpc2libGU/W3QsdF06W10pO3IuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoXCJsZWdlbmRvaGxjXCIsITApLmF0dHIoXCJkXCIsZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9cIk0tMTUsMEgwTS04LC02VjBcIjpcIk0xNSwwSDBNOCw2VjBcIn0pLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZSgyMCwwKVwiKS5zdHlsZShcInN0cm9rZS1taXRlcmxpbWl0XCIsMSksci5leGl0KCkucmVtb3ZlKCksci5lYWNoKGZ1bmN0aW9uKHQscil7dmFyIGk9bi5zZWxlY3QodGhpcyksYT1lW3I/XCJpbmNyZWFzaW5nXCI6XCJkZWNyZWFzaW5nXCJdLGw9bSh2b2lkIDAsYS5saW5lLGcscCk7aS5zdHlsZShcImZpbGxcIixcIm5vbmVcIikuY2FsbChvLmRhc2hMaW5lLGEubGluZS5kYXNoLGwpLGwmJnMuc3Ryb2tlKGksYS5saW5lLmNvbG9yKX0pfSl9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uLy4uL3RyYWNlcy9waWUvaGVscGVyc1wiOjEwMzEsXCIuLi8uLi90cmFjZXMvcGllL3N0eWxlX29uZVwiOjEwMzcsXCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlc1wiOjEwNzYsXCIuLi9jb2xvclwiOjU3OCxcIi4uL2RyYXdpbmdcIjo1OTksZDM6MTU1fV0sNjM2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uLy4uL3Bsb3RzL3Bsb3RzXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiKSxvPXQoXCIuLi8uLi9saWJcIikscz10KFwiLi4vLi4vLi4vYnVpbGQvcGxvdGljb25cIiksbD1vLl8sYz1lLmV4cG9ydHM9e307ZnVuY3Rpb24gdSh0LGUpe3ZhciByLGksbz1lLmN1cnJlbnRUYXJnZXQscz1vLmdldEF0dHJpYnV0ZShcImRhdGEtYXR0clwiKSxsPW8uZ2V0QXR0cmlidXRlKFwiZGF0YS12YWxcIil8fCEwLGM9dC5fZnVsbExheW91dCx1PXt9LGg9YS5saXN0KHQsbnVsbCwhMCksZj1cIm9uXCI7aWYoXCJ6b29tXCI9PT1zKXt2YXIgcCxkPVwiaW5cIj09PWw/LjU6MixnPSgxK2QpLzIsdj0oMS1kKS8yO2ZvcihpPTA7aTxoLmxlbmd0aDtpKyspaWYoIShyPWhbaV0pLmZpeGVkcmFuZ2UpaWYocD1yLl9uYW1lLFwiYXV0b1wiPT09bCl1W3ArXCIuYXV0b3JhbmdlXCJdPSEwO2Vsc2UgaWYoXCJyZXNldFwiPT09bCl7aWYodm9pZCAwPT09ci5fcmFuZ2VJbml0aWFsKXVbcCtcIi5hdXRvcmFuZ2VcIl09ITA7ZWxzZXt2YXIgbT1yLl9yYW5nZUluaXRpYWwuc2xpY2UoKTt1W3ArXCIucmFuZ2VbMF1cIl09bVswXSx1W3ArXCIucmFuZ2VbMV1cIl09bVsxXX12b2lkIDAhPT1yLl9zaG93U3Bpa2VJbml0aWFsJiYodVtwK1wiLnNob3dzcGlrZXNcIl09ci5fc2hvd1NwaWtlSW5pdGlhbCxcIm9uXCIhPT1mfHxyLl9zaG93U3Bpa2VJbml0aWFsfHwoZj1cIm9mZlwiKSl9ZWxzZXt2YXIgeT1bci5yMmwoci5yYW5nZVswXSksci5yMmwoci5yYW5nZVsxXSldLHg9W2cqeVswXSt2KnlbMV0sZyp5WzFdK3YqeVswXV07dVtwK1wiLnJhbmdlWzBdXCJdPXIubDJyKHhbMF0pLHVbcCtcIi5yYW5nZVsxXVwiXT1yLmwycih4WzFdKX1jLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkPWZ9ZWxzZXtpZihcImhvdmVybW9kZVwiIT09c3x8XCJ4XCIhPT1sJiZcInlcIiE9PWwpe2lmKFwiaG92ZXJtb2RlXCI9PT1zJiZcImNsb3Nlc3RcIj09PWwpe2ZvcihpPTA7aTxoLmxlbmd0aDtpKyspcj1oW2ldLFwib25cIiE9PWZ8fHIuc2hvd3NwaWtlc3x8KGY9XCJvZmZcIik7Yy5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD1mfX1lbHNlIGw9Yy5faXNIb3Jpej9cInlcIjpcInhcIixvLnNldEF0dHJpYnV0ZShcImRhdGEtdmFsXCIsbCk7dVtzXT1sfW4uY2FsbChcIl9ndWlSZWxheW91dFwiLHQsdSl9ZnVuY3Rpb24gaCh0LGUpe2Zvcih2YXIgcj1lLmN1cnJlbnRUYXJnZXQsaT1yLmdldEF0dHJpYnV0ZShcImRhdGEtYXR0clwiKSxhPXIuZ2V0QXR0cmlidXRlKFwiZGF0YS12YWxcIil8fCEwLG89dC5fZnVsbExheW91dC5fc3VicGxvdHMuZ2wzZCxzPXt9LGw9aS5zcGxpdChcIi5cIiksYz0wO2M8by5sZW5ndGg7YysrKXNbb1tjXStcIi5cIitsWzFdXT1hO3ZhciB1PVwicGFuXCI9PT1hP2E6XCJ6b29tXCI7cy5kcmFnbW9kZT11LG4uY2FsbChcIl9ndWlSZWxheW91dFwiLHQscyl9ZnVuY3Rpb24gZih0LGUpe2Zvcih2YXIgcj1lLmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1hdHRyXCIpLGk9dC5fZnVsbExheW91dCxhPWkuX3N1YnBsb3RzLmdsM2Qsbz17fSxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc10sYz1sK1wiLmNhbWVyYVwiLHU9aVtsXS5fc2NlbmU7XCJyZXNldExhc3RTYXZlXCI9PT1yPyhvW2MrXCIudXBcIl09dS52aWV3SW5pdGlhbC51cCxvW2MrXCIuZXllXCJdPXUudmlld0luaXRpYWwuZXllLG9bYytcIi5jZW50ZXJcIl09dS52aWV3SW5pdGlhbC5jZW50ZXIpOlwicmVzZXREZWZhdWx0XCI9PT1yJiYob1tjK1wiLnVwXCJdPW51bGwsb1tjK1wiLmV5ZVwiXT1udWxsLG9bYytcIi5jZW50ZXJcIl09bnVsbCl9bi5jYWxsKFwiX2d1aVJlbGF5b3V0XCIsdCxvKX1mdW5jdGlvbiBwKHQsZSl7dmFyIHI9ZS5jdXJyZW50VGFyZ2V0LG49ci5fcHJldmlvdXNWYWwsaT10Ll9mdWxsTGF5b3V0LGE9aS5fc3VicGxvdHMuZ2wzZCxvPVtcInhheGlzXCIsXCJ5YXhpc1wiLFwiemF4aXNcIl0scz17fSxsPXt9O2lmKG4pbD1uLHIuX3ByZXZpb3VzVmFsPW51bGw7ZWxzZXtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIHU9YVtjXSxoPWlbdV0sZj11K1wiLmhvdmVybW9kZVwiO3NbZl09aC5ob3Zlcm1vZGUsbFtmXT0hMTtmb3IodmFyIHA9MDtwPDM7cCsrKXt2YXIgZD1vW3BdLGc9dStcIi5cIitkK1wiLnNob3dzcGlrZXNcIjtsW2ddPSExLHNbZ109aFtkXS5zaG93c3Bpa2VzfX1yLl9wcmV2aW91c1ZhbD1zfXJldHVybiBsfWZ1bmN0aW9uIGQodCxlKXtmb3IodmFyIHI9ZS5jdXJyZW50VGFyZ2V0LGk9ci5nZXRBdHRyaWJ1dGUoXCJkYXRhLWF0dHJcIiksYT1yLmdldEF0dHJpYnV0ZShcImRhdGEtdmFsXCIpfHwhMCxvPXQuX2Z1bGxMYXlvdXQscz1vLl9zdWJwbG90cy5nZW8sbD0wO2w8cy5sZW5ndGg7bCsrKXt2YXIgYz1zW2xdLHU9b1tjXTtpZihcInpvb21cIj09PWkpe3ZhciBoPXUucHJvamVjdGlvbi5zY2FsZSxmPVwiaW5cIj09PWE/MipoOi41Kmg7bi5jYWxsKFwiX2d1aVJlbGF5b3V0XCIsdCxjK1wiLnByb2plY3Rpb24uc2NhbGVcIixmKX1lbHNlXCJyZXNldFwiPT09aSYmbSh0LFwiZ2VvXCIpfX1mdW5jdGlvbiBnKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7cmV0dXJuIWUuaG92ZXJtb2RlJiYoZS5faGFzKFwiY2FydGVzaWFuXCIpP2UuX2lzSG9yaXo/XCJ5XCI6XCJ4XCI6XCJjbG9zZXN0XCIpfWZ1bmN0aW9uIHYodCl7dmFyIGU9Zyh0KTtuLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix0LFwiaG92ZXJtb2RlXCIsZSl9ZnVuY3Rpb24gbSh0LGUpe2Zvcih2YXIgcj10Ll9mdWxsTGF5b3V0LGk9ci5fc3VicGxvdHNbZV0sYT17fSxvPTA7bzxpLmxlbmd0aDtvKyspZm9yKHZhciBzPWlbb10sbD1yW3NdLl9zdWJwbG90LnZpZXdJbml0aWFsLGM9T2JqZWN0LmtleXMobCksdT0wO3U8Yy5sZW5ndGg7dSsrKXt2YXIgaD1jW3VdO2FbcytcIi5cIitoXT1sW2hdfW4uY2FsbChcIl9ndWlSZWxheW91dFwiLHQsYSl9Yy50b0ltYWdlPXtuYW1lOlwidG9JbWFnZVwiLHRpdGxlOmZ1bmN0aW9uKHQpe3ZhciBlPSh0Ll9jb250ZXh0LnRvSW1hZ2VCdXR0b25PcHRpb25zfHx7fSkuZm9ybWF0fHxcInBuZ1wiO3JldHVybiBsKHQsXCJwbmdcIj09PWU/XCJEb3dubG9hZCBwbG90IGFzIGEgcG5nXCI6XCJEb3dubG9hZCBwbG90XCIpfSxpY29uOnMuY2FtZXJhLGNsaWNrOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2NvbnRleHQudG9JbWFnZUJ1dHRvbk9wdGlvbnMscj17Zm9ybWF0OmUuZm9ybWF0fHxcInBuZ1wifTtvLm5vdGlmaWVyKGwodCxcIlRha2luZyBzbmFwc2hvdCAtIHRoaXMgbWF5IHRha2UgYSBmZXcgc2Vjb25kc1wiKSxcImxvbmdcIiksXCJzdmdcIiE9PXIuZm9ybWF0JiZvLmlzSUUoKSYmKG8ubm90aWZpZXIobCh0LFwiSUUgb25seSBzdXBwb3J0cyBzdmcuICBDaGFuZ2luZyBmb3JtYXQgdG8gc3ZnLlwiKSxcImxvbmdcIiksci5mb3JtYXQ9XCJzdmdcIiksW1wiZmlsZW5hbWVcIixcIndpZHRoXCIsXCJoZWlnaHRcIixcInNjYWxlXCJdLmZvckVhY2goZnVuY3Rpb24odCl7dCBpbiBlJiYoclt0XT1lW3RdKX0pLG4uY2FsbChcImRvd25sb2FkSW1hZ2VcIix0LHIpLnRoZW4oZnVuY3Rpb24oZSl7by5ub3RpZmllcihsKHQsXCJTbmFwc2hvdCBzdWNjZWVkZWRcIikrXCIgLSBcIitlLFwibG9uZ1wiKX0pLmNhdGNoKGZ1bmN0aW9uKCl7by5ub3RpZmllcihsKHQsXCJTb3JyeSwgdGhlcmUgd2FzIGEgcHJvYmxlbSBkb3dubG9hZGluZyB5b3VyIHNuYXBzaG90IVwiKSxcImxvbmdcIil9KX19LGMuc2VuZERhdGFUb0Nsb3VkPXtuYW1lOlwic2VuZERhdGFUb0Nsb3VkXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIkVkaXQgaW4gQ2hhcnQgU3R1ZGlvXCIpfSxpY29uOnMuZGlzayxjbGljazpmdW5jdGlvbih0KXtpLnNlbmREYXRhVG9DbG91ZCh0KX19LGMuem9vbTJkPXtuYW1lOlwiem9vbTJkXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlpvb21cIil9LGF0dHI6XCJkcmFnbW9kZVwiLHZhbDpcInpvb21cIixpY29uOnMuem9vbWJveCxjbGljazp1fSxjLnBhbjJkPXtuYW1lOlwicGFuMmRcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiUGFuXCIpfSxhdHRyOlwiZHJhZ21vZGVcIix2YWw6XCJwYW5cIixpY29uOnMucGFuLGNsaWNrOnV9LGMuc2VsZWN0MmQ9e25hbWU6XCJzZWxlY3QyZFwiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsXCJCb3ggU2VsZWN0XCIpfSxhdHRyOlwiZHJhZ21vZGVcIix2YWw6XCJzZWxlY3RcIixpY29uOnMuc2VsZWN0Ym94LGNsaWNrOnV9LGMubGFzc28yZD17bmFtZTpcImxhc3NvMmRcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiTGFzc28gU2VsZWN0XCIpfSxhdHRyOlwiZHJhZ21vZGVcIix2YWw6XCJsYXNzb1wiLGljb246cy5sYXNzbyxjbGljazp1fSxjLnpvb21JbjJkPXtuYW1lOlwiem9vbUluMmRcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiWm9vbSBpblwiKX0sYXR0cjpcInpvb21cIix2YWw6XCJpblwiLGljb246cy56b29tX3BsdXMsY2xpY2s6dX0sYy56b29tT3V0MmQ9e25hbWU6XCJ6b29tT3V0MmRcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiWm9vbSBvdXRcIil9LGF0dHI6XCJ6b29tXCIsdmFsOlwib3V0XCIsaWNvbjpzLnpvb21fbWludXMsY2xpY2s6dX0sYy5hdXRvU2NhbGUyZD17bmFtZTpcImF1dG9TY2FsZTJkXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIkF1dG9zY2FsZVwiKX0sYXR0cjpcInpvb21cIix2YWw6XCJhdXRvXCIsaWNvbjpzLmF1dG9zY2FsZSxjbGljazp1fSxjLnJlc2V0U2NhbGUyZD17bmFtZTpcInJlc2V0U2NhbGUyZFwiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsXCJSZXNldCBheGVzXCIpfSxhdHRyOlwiem9vbVwiLHZhbDpcInJlc2V0XCIsaWNvbjpzLmhvbWUsY2xpY2s6dX0sYy5ob3ZlckNsb3Nlc3RDYXJ0ZXNpYW49e25hbWU6XCJob3ZlckNsb3Nlc3RDYXJ0ZXNpYW5cIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiU2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXJcIil9LGF0dHI6XCJob3Zlcm1vZGVcIix2YWw6XCJjbG9zZXN0XCIsaWNvbjpzLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eTpcIm5lXCIsY2xpY2s6dX0sYy5ob3ZlckNvbXBhcmVDYXJ0ZXNpYW49e25hbWU6XCJob3ZlckNvbXBhcmVDYXJ0ZXNpYW5cIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiQ29tcGFyZSBkYXRhIG9uIGhvdmVyXCIpfSxhdHRyOlwiaG92ZXJtb2RlXCIsdmFsOmZ1bmN0aW9uKHQpe3JldHVybiB0Ll9mdWxsTGF5b3V0Ll9pc0hvcml6P1wieVwiOlwieFwifSxpY29uOnMudG9vbHRpcF9jb21wYXJlLGdyYXZpdHk6XCJuZVwiLGNsaWNrOnV9LGMuem9vbTNkPXtuYW1lOlwiem9vbTNkXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlpvb21cIil9LGF0dHI6XCJzY2VuZS5kcmFnbW9kZVwiLHZhbDpcInpvb21cIixpY29uOnMuem9vbWJveCxjbGljazpofSxjLnBhbjNkPXtuYW1lOlwicGFuM2RcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiUGFuXCIpfSxhdHRyOlwic2NlbmUuZHJhZ21vZGVcIix2YWw6XCJwYW5cIixpY29uOnMucGFuLGNsaWNrOmh9LGMub3JiaXRSb3RhdGlvbj17bmFtZTpcIm9yYml0Um90YXRpb25cIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiT3JiaXRhbCByb3RhdGlvblwiKX0sYXR0cjpcInNjZW5lLmRyYWdtb2RlXCIsdmFsOlwib3JiaXRcIixpY29uOnNbXCIzZF9yb3RhdGVcIl0sY2xpY2s6aH0sYy50YWJsZVJvdGF0aW9uPXtuYW1lOlwidGFibGVSb3RhdGlvblwiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsXCJUdXJudGFibGUgcm90YXRpb25cIil9LGF0dHI6XCJzY2VuZS5kcmFnbW9kZVwiLHZhbDpcInR1cm50YWJsZVwiLGljb246c1tcInotYXhpc1wiXSxjbGljazpofSxjLnJlc2V0Q2FtZXJhRGVmYXVsdDNkPXtuYW1lOlwicmVzZXRDYW1lcmFEZWZhdWx0M2RcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiUmVzZXQgY2FtZXJhIHRvIGRlZmF1bHRcIil9LGF0dHI6XCJyZXNldERlZmF1bHRcIixpY29uOnMuaG9tZSxjbGljazpmfSxjLnJlc2V0Q2FtZXJhTGFzdFNhdmUzZD17bmFtZTpcInJlc2V0Q2FtZXJhTGFzdFNhdmUzZFwiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsXCJSZXNldCBjYW1lcmEgdG8gbGFzdCBzYXZlXCIpfSxhdHRyOlwicmVzZXRMYXN0U2F2ZVwiLGljb246cy5tb3ZpZSxjbGljazpmfSxjLmhvdmVyQ2xvc2VzdDNkPXtuYW1lOlwiaG92ZXJDbG9zZXN0M2RcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyXCIpfSxhdHRyOlwiaG92ZXJtb2RlXCIsdmFsOm51bGwsdG9nZ2xlOiEwLGljb246cy50b29sdGlwX2Jhc2ljLGdyYXZpdHk6XCJuZVwiLGNsaWNrOmZ1bmN0aW9uKHQsZSl7dmFyIHI9cCh0LGUpO24uY2FsbChcIl9ndWlSZWxheW91dFwiLHQscil9fSxjLnpvb21Jbkdlbz17bmFtZTpcInpvb21Jbkdlb1wiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsXCJab29tIGluXCIpfSxhdHRyOlwiem9vbVwiLHZhbDpcImluXCIsaWNvbjpzLnpvb21fcGx1cyxjbGljazpkfSxjLnpvb21PdXRHZW89e25hbWU6XCJ6b29tT3V0R2VvXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlpvb20gb3V0XCIpfSxhdHRyOlwiem9vbVwiLHZhbDpcIm91dFwiLGljb246cy56b29tX21pbnVzLGNsaWNrOmR9LGMucmVzZXRHZW89e25hbWU6XCJyZXNldEdlb1wiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsXCJSZXNldFwiKX0sYXR0cjpcInJlc2V0XCIsdmFsOm51bGwsaWNvbjpzLmF1dG9zY2FsZSxjbGljazpkfSxjLmhvdmVyQ2xvc2VzdEdlbz17bmFtZTpcImhvdmVyQ2xvc2VzdEdlb1wiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsXCJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXJcIil9LGF0dHI6XCJob3Zlcm1vZGVcIix2YWw6bnVsbCx0b2dnbGU6ITAsaWNvbjpzLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eTpcIm5lXCIsY2xpY2s6dn0sYy5ob3ZlckNsb3Nlc3RHbDJkPXtuYW1lOlwiaG92ZXJDbG9zZXN0R2wyZFwiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsXCJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXJcIil9LGF0dHI6XCJob3Zlcm1vZGVcIix2YWw6bnVsbCx0b2dnbGU6ITAsaWNvbjpzLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eTpcIm5lXCIsY2xpY2s6dn0sYy5ob3ZlckNsb3Nlc3RQaWU9e25hbWU6XCJob3ZlckNsb3Nlc3RQaWVcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyXCIpfSxhdHRyOlwiaG92ZXJtb2RlXCIsdmFsOlwiY2xvc2VzdFwiLGljb246cy50b29sdGlwX2Jhc2ljLGdyYXZpdHk6XCJuZVwiLGNsaWNrOnZ9LGMucmVzZXRWaWV3U2Fua2V5PXtuYW1lOlwicmVzZXRTYW5rZXlHcm91cFwiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsXCJSZXNldCB2aWV3XCIpfSxpY29uOnMuaG9tZSxjbGljazpmdW5jdGlvbih0KXtmb3IodmFyIGU9e1wibm9kZS5ncm91cHNcIjpbXSxcIm5vZGUueFwiOltdLFwibm9kZS55XCI6W119LHI9MDtyPHQuX2Z1bGxEYXRhLmxlbmd0aDtyKyspe3ZhciBpPXQuX2Z1bGxEYXRhW3JdLl92aWV3SW5pdGlhbDtlW1wibm9kZS5ncm91cHNcIl0ucHVzaChpLm5vZGUuZ3JvdXBzLnNsaWNlKCkpLGVbXCJub2RlLnhcIl0ucHVzaChpLm5vZGUueC5zbGljZSgpKSxlW1wibm9kZS55XCJdLnB1c2goaS5ub2RlLnkuc2xpY2UoKSl9bi5jYWxsKFwicmVzdHlsZVwiLHQsZSl9fSxjLnRvZ2dsZUhvdmVyPXtuYW1lOlwidG9nZ2xlSG92ZXJcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyXCIpfSxhdHRyOlwiaG92ZXJtb2RlXCIsdmFsOm51bGwsdG9nZ2xlOiEwLGljb246cy50b29sdGlwX2Jhc2ljLGdyYXZpdHk6XCJuZVwiLGNsaWNrOmZ1bmN0aW9uKHQsZSl7dmFyIHI9cCh0LGUpO3IuaG92ZXJtb2RlPWcodCksbi5jYWxsKFwiX2d1aVJlbGF5b3V0XCIsdCxyKX19LGMucmVzZXRWaWV3cz17bmFtZTpcInJlc2V0Vmlld3NcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiUmVzZXQgdmlld3NcIil9LGljb246cy5ob21lLGNsaWNrOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5jdXJyZW50VGFyZ2V0O3Iuc2V0QXR0cmlidXRlKFwiZGF0YS1hdHRyXCIsXCJ6b29tXCIpLHIuc2V0QXR0cmlidXRlKFwiZGF0YS12YWxcIixcInJlc2V0XCIpLHUodCxlKSxyLnNldEF0dHJpYnV0ZShcImRhdGEtYXR0clwiLFwicmVzZXRMYXN0U2F2ZVwiKSxmKHQsZSksbSh0LFwiZ2VvXCIpLG0odCxcIm1hcGJveFwiKX19LGMudG9nZ2xlU3Bpa2VsaW5lcz17bmFtZTpcInRvZ2dsZVNwaWtlbGluZXNcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiVG9nZ2xlIFNwaWtlIExpbmVzXCIpfSxpY29uOnMuc3Bpa2VsaW5lLGF0dHI6XCJfY2FydGVzaWFuU3Bpa2VzRW5hYmxlZFwiLHZhbDpcIm9uXCIsY2xpY2s6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtlLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkPVwib25cIj09PWUuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQ/XCJvZmZcIjpcIm9uXCI7dmFyIHI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbj10Ll9mdWxsTGF5b3V0LGk9YS5saXN0KHQsbnVsbCwhMCksbz17fSxzPTA7czxpLmxlbmd0aDtzKyspZT1pW3NdLHI9ZS5fbmFtZSxvW3IrXCIuc2hvd3NwaWtlc1wiXT1cIm9uXCI9PT1uLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkfHxlLl9zaG93U3Bpa2VJbml0aWFsO3JldHVybiBvfSh0KTtuLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix0LHIpfX0sYy5yZXNldFZpZXdNYXBib3g9e25hbWU6XCJyZXNldFZpZXdNYXBib3hcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiUmVzZXQgdmlld1wiKX0sYXR0cjpcInJlc2V0XCIsaWNvbjpzLmhvbWUsY2xpY2s6ZnVuY3Rpb24odCl7bSh0LFwibWFwYm94XCIpfX19LHtcIi4uLy4uLy4uL2J1aWxkL3Bsb3RpY29uXCI6MixcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiOjc1MixcIi4uLy4uL3Bsb3RzL3Bsb3RzXCI6ODEwLFwiLi4vLi4vcmVnaXN0cnlcIjo4Mjl9XSw2Mzc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLm1hbmFnZT10KFwiLi9tYW5hZ2VcIil9LHtcIi4vbWFuYWdlXCI6NjM4fV0sNjM4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiKSxpPXQoXCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlc1wiKSxhPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxvPXQoXCIuL21vZGViYXJcIikscz10KFwiLi9idXR0b25zXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5fY29udGV4dCxsPWUuX21vZGVCYXI7aWYoci5kaXNwbGF5TW9kZUJhcnx8ci53YXRlcm1hcmspe2lmKCFBcnJheS5pc0FycmF5KHIubW9kZUJhckJ1dHRvbnNUb1JlbW92ZSkpdGhyb3cgbmV3IEVycm9yKFtcIiptb2RlQmFyQnV0dG9uc1RvUmVtb3ZlKiBjb25maWd1cmF0aW9uIG9wdGlvbnNcIixcIm11c3QgYmUgYW4gYXJyYXkuXCJdLmpvaW4oXCIgXCIpKTtpZighQXJyYXkuaXNBcnJheShyLm1vZGVCYXJCdXR0b25zVG9BZGQpKXRocm93IG5ldyBFcnJvcihbXCIqbW9kZUJhckJ1dHRvbnNUb0FkZCogY29uZmlndXJhdGlvbiBvcHRpb25zXCIsXCJtdXN0IGJlIGFuIGFycmF5LlwiXS5qb2luKFwiIFwiKSk7dmFyIGMsdT1yLm1vZGVCYXJCdXR0b25zO2M9QXJyYXkuaXNBcnJheSh1KSYmdS5sZW5ndGg/ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspZm9yKHZhciByPXRbZV0sbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBpKXtpZih2b2lkIDA9PT1zW2ldKXRocm93IG5ldyBFcnJvcihbXCIqbW9kZUJhckJ1dHRvbnMqIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1wiLFwiaW52YWxpZCBidXR0b24gbmFtZVwiXS5qb2luKFwiIFwiKSk7dFtlXVtuXT1zW2ldfX1yZXR1cm4gdH0odSk6IXIuZGlzcGxheU1vZGVCYXImJnIud2F0ZXJtYXJrP1tdOmZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBsPXQuX2Z1bGxMYXlvdXQsYz10Ll9mdWxsRGF0YSx1PWwuX2hhcyhcImNhcnRlc2lhblwiKSxoPWwuX2hhcyhcImdsM2RcIiksZj1sLl9oYXMoXCJnZW9cIikscD1sLl9oYXMoXCJwaWVcIiksZD1sLl9oYXMoXCJnbDJkXCIpLGc9bC5faGFzKFwidGVybmFyeVwiKSx2PWwuX2hhcyhcIm1hcGJveFwiKSxtPWwuX2hhcyhcInBvbGFyXCIpLHk9bC5faGFzKFwic2Fua2V5XCIpLHg9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW4ubGlzdCh7X2Z1bGxMYXlvdXQ6dH0sbnVsbCwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKWlmKCFlW3JdLmZpeGVkcmFuZ2UpcmV0dXJuITE7cmV0dXJuITB9KGwpLGI9W107ZnVuY3Rpb24gXyh0KXtpZih0Lmxlbmd0aCl7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXTstMT09PWUuaW5kZXhPZihpKSYmci5wdXNoKHNbaV0pfWIucHVzaChyKX19dmFyIHc9W1widG9JbWFnZVwiXTtvJiZ3LnB1c2goXCJzZW5kRGF0YVRvQ2xvdWRcIik7Xyh3KTt2YXIgaz1bXSxBPVtdLFQ9W10sTT1bXTsodXx8ZHx8cHx8ZykrZitoK3YrbT4xPyhBPVtcInRvZ2dsZUhvdmVyXCJdLFQ9W1wicmVzZXRWaWV3c1wiXSk6Zj8oaz1bXCJ6b29tSW5HZW9cIixcInpvb21PdXRHZW9cIl0sQT1bXCJob3ZlckNsb3Nlc3RHZW9cIl0sVD1bXCJyZXNldEdlb1wiXSk6aD8oQT1bXCJob3ZlckNsb3Nlc3QzZFwiXSxUPVtcInJlc2V0Q2FtZXJhRGVmYXVsdDNkXCIsXCJyZXNldENhbWVyYUxhc3RTYXZlM2RcIl0pOnY/KEE9W1widG9nZ2xlSG92ZXJcIl0sVD1bXCJyZXNldFZpZXdNYXBib3hcIl0pOmQ/QT1bXCJob3ZlckNsb3Nlc3RHbDJkXCJdOnA/QT1bXCJob3ZlckNsb3Nlc3RQaWVcIl06eT8oQT1bXCJob3ZlckNsb3Nlc3RDYXJ0ZXNpYW5cIixcImhvdmVyQ29tcGFyZUNhcnRlc2lhblwiXSxUPVtcInJlc2V0Vmlld1NhbmtleVwiXSk6QT1bXCJ0b2dnbGVIb3ZlclwiXTt1JiYoQT1bXCJ0b2dnbGVTcGlrZWxpbmVzXCIsXCJob3ZlckNsb3Nlc3RDYXJ0ZXNpYW5cIixcImhvdmVyQ29tcGFyZUNhcnRlc2lhblwiXSk7IXUmJiFkfHx4fHwoaz1bXCJ6b29tSW4yZFwiLFwiem9vbU91dDJkXCIsXCJhdXRvU2NhbGUyZFwiXSxcInJlc2V0Vmlld3NcIiE9PVRbMF0mJihUPVtcInJlc2V0U2NhbGUyZFwiXSkpO2g/TT1bXCJ6b29tM2RcIixcInBhbjNkXCIsXCJvcmJpdFJvdGF0aW9uXCIsXCJ0YWJsZVJvdGF0aW9uXCJdOih1fHxkKSYmIXh8fGc/TT1bXCJ6b29tMmRcIixcInBhbjJkXCJdOnZ8fGY/TT1bXCJwYW4yZFwiXTptJiYoTT1bXCJ6b29tMmRcIl0pOyhmdW5jdGlvbih0KXtmb3IodmFyIGU9ITEscj0wO3I8dC5sZW5ndGgmJiFlO3IrKyl7dmFyIG49dFtyXTtuLl9tb2R1bGUmJm4uX21vZHVsZS5zZWxlY3RQb2ludHMmJihhLnRyYWNlSXMobixcInNjYXR0ZXItbGlrZVwiKT8oaS5oYXNNYXJrZXJzKG4pfHxpLmhhc1RleHQobikpJiYoZT0hMCk6YS50cmFjZUlzKG4sXCJib3gtdmlvbGluXCIpJiZcImFsbFwiIT09bi5ib3hwb2ludHMmJlwiYWxsXCIhPT1uLnBvaW50c3x8KGU9ITApKX1yZXR1cm4gZX0pKGMpJiZNLnB1c2goXCJzZWxlY3QyZFwiLFwibGFzc28yZFwiKTtyZXR1cm4gXyhNKSxfKGsuY29uY2F0KFQpKSxfKEEpLGZ1bmN0aW9uKHQsZSl7aWYoZS5sZW5ndGgpaWYoQXJyYXkuaXNBcnJheShlWzBdKSlmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0LnB1c2goZVtyXSk7ZWxzZSB0LnB1c2goZSk7cmV0dXJuIHR9KGIscil9KHQsci5tb2RlQmFyQnV0dG9uc1RvUmVtb3ZlLHIubW9kZUJhckJ1dHRvbnNUb0FkZCxyLnNob3dTZW5kVG9DbG91ZCksbD9sLnVwZGF0ZSh0LGMpOmUuX21vZGVCYXI9byh0LGMpfWVsc2UgbCYmKGwuZGVzdHJveSgpLGRlbGV0ZSBlLl9tb2RlQmFyKX19LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiOjc1MixcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi9idXR0b25zXCI6NjM2LFwiLi9tb2RlYmFyXCI6NjM5fV0sNjM5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcImZhc3QtaXNudW1lcmljXCIpLGE9dChcIi4uLy4uL2xpYlwiKSxvPXQoXCIuLi8uLi8uLi9idWlsZC9wbG90aWNvblwiKSxzPW5ldyBET01QYXJzZXI7ZnVuY3Rpb24gbCh0KXt0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLmVsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSx0aGlzLnVwZGF0ZSh0LmdyYXBoSW5mbyx0LmJ1dHRvbnMpLHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCl9dmFyIGM9bC5wcm90b3R5cGU7Yy51cGRhdGU9ZnVuY3Rpb24odCxlKXt0aGlzLmdyYXBoSW5mbz10O3ZhciByPXRoaXMuZ3JhcGhJbmZvLl9jb250ZXh0LG49dGhpcy5ncmFwaEluZm8uX2Z1bGxMYXlvdXQsaT1cIm1vZGViYXItXCIrbi5fdWlkO3RoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJpZFwiLGkpLHRoaXMuX3VpZD1pLHRoaXMuZWxlbWVudC5jbGFzc05hbWU9XCJtb2RlYmFyXCIsXCJob3ZlclwiPT09ci5kaXNwbGF5TW9kZUJhciYmKHRoaXMuZWxlbWVudC5jbGFzc05hbWUrPVwiIG1vZGViYXItLWhvdmVyIGVhc2UtYmdcIiksXCJ2XCI9PT1uLm1vZGViYXIub3JpZW50YXRpb24mJih0aGlzLmVsZW1lbnQuY2xhc3NOYW1lKz1cIiB2ZXJ0aWNhbFwiLGU9ZS5yZXZlcnNlKCkpO3ZhciBvPW4ubW9kZWJhcixzPVwiaG92ZXJcIj09PXIuZGlzcGxheU1vZGVCYXI/XCIuanMtcGxvdGx5LXBsb3QgLnBsb3RseTpob3ZlciBcIjpcIlwiO2EuZGVsZXRlUmVsYXRlZFN0eWxlUnVsZShpKSxhLmFkZFJlbGF0ZWRTdHlsZVJ1bGUoaSxzK1wiI1wiK2krXCIgLm1vZGViYXItZ3JvdXBcIixcImJhY2tncm91bmQtY29sb3I6IFwiK28uYmdjb2xvciksYS5hZGRSZWxhdGVkU3R5bGVSdWxlKGksXCIjXCIraStcIiAubW9kZWJhci1idG4gLmljb24gcGF0aFwiLFwiZmlsbDogXCIrby5jb2xvciksYS5hZGRSZWxhdGVkU3R5bGVSdWxlKGksXCIjXCIraStcIiAubW9kZWJhci1idG46aG92ZXIgLmljb24gcGF0aFwiLFwiZmlsbDogXCIrby5hY3RpdmVjb2xvciksYS5hZGRSZWxhdGVkU3R5bGVSdWxlKGksXCIjXCIraStcIiAubW9kZWJhci1idG4uYWN0aXZlIC5pY29uIHBhdGhcIixcImZpbGw6IFwiK28uYWN0aXZlY29sb3IpO3ZhciBsPSF0aGlzLmhhc0J1dHRvbnMoZSksYz10aGlzLmhhc0xvZ28hPT1yLmRpc3BsYXlsb2dvLHU9dGhpcy5sb2NhbGUhPT1yLmxvY2FsZTtpZih0aGlzLmxvY2FsZT1yLmxvY2FsZSwobHx8Y3x8dSkmJih0aGlzLnJlbW92ZUFsbEJ1dHRvbnMoKSx0aGlzLnVwZGF0ZUJ1dHRvbnMoZSksci53YXRlcm1hcmt8fHIuZGlzcGxheWxvZ28pKXt2YXIgaD10aGlzLmdldExvZ28oKTtyLndhdGVybWFyayYmKGguY2xhc3NOYW1lPWguY2xhc3NOYW1lK1wiIHdhdGVybWFya1wiKSxcInZcIj09PW4ubW9kZWJhci5vcmllbnRhdGlvbj90aGlzLmVsZW1lbnQuaW5zZXJ0QmVmb3JlKGgsdGhpcy5lbGVtZW50LmNoaWxkTm9kZXNbMF0pOnRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChoKSx0aGlzLmhhc0xvZ289ITB9dGhpcy51cGRhdGVBY3RpdmVCdXR0b24oKX0sYy51cGRhdGVCdXR0b25zPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5idXR0b25zPXQsdGhpcy5idXR0b25FbGVtZW50cz1bXSx0aGlzLmJ1dHRvbnNOYW1lcz1bXSx0aGlzLmJ1dHRvbnMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcj1lLmNyZWF0ZUdyb3VwKCk7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPXQubmFtZTtpZighbil0aHJvdyBuZXcgRXJyb3IoXCJtdXN0IHByb3ZpZGUgYnV0dG9uICduYW1lJyBpbiBidXR0b24gY29uZmlnXCIpO2lmKC0xIT09ZS5idXR0b25zTmFtZXMuaW5kZXhPZihuKSl0aHJvdyBuZXcgRXJyb3IoXCJidXR0b24gbmFtZSAnXCIrbitcIicgaXMgdGFrZW5cIik7ZS5idXR0b25zTmFtZXMucHVzaChuKTt2YXIgaT1lLmNyZWF0ZUJ1dHRvbih0KTtlLmJ1dHRvbkVsZW1lbnRzLnB1c2goaSksci5hcHBlbmRDaGlsZChpKX0pLGUuZWxlbWVudC5hcHBlbmRDaGlsZChyKX0pfSxjLmNyZWF0ZUdyb3VwPWZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtyZXR1cm4gdC5jbGFzc05hbWU9XCJtb2RlYmFyLWdyb3VwXCIsdH0sYy5jcmVhdGVCdXR0b249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO3Iuc2V0QXR0cmlidXRlKFwicmVsXCIsXCJ0b29sdGlwXCIpLHIuY2xhc3NOYW1lPVwibW9kZWJhci1idG5cIjt2YXIgaT10LnRpdGxlO3ZvaWQgMD09PWk/aT10Lm5hbWU6XCJmdW5jdGlvblwiPT10eXBlb2YgaSYmKGk9aSh0aGlzLmdyYXBoSW5mbykpLChpfHwwPT09aSkmJnIuc2V0QXR0cmlidXRlKFwiZGF0YS10aXRsZVwiLGkpLHZvaWQgMCE9PXQuYXR0ciYmci5zZXRBdHRyaWJ1dGUoXCJkYXRhLWF0dHJcIix0LmF0dHIpO3ZhciBhPXQudmFsO2lmKHZvaWQgMCE9PWEmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiBhJiYoYT1hKHRoaXMuZ3JhcGhJbmZvKSksci5zZXRBdHRyaWJ1dGUoXCJkYXRhLXZhbFwiLGEpKSxcImZ1bmN0aW9uXCIhPXR5cGVvZiB0LmNsaWNrKXRocm93IG5ldyBFcnJvcihcIm11c3QgcHJvdmlkZSBidXR0b24gJ2NsaWNrJyBmdW5jdGlvbiBpbiBidXR0b24gY29uZmlnXCIpO3IuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsZnVuY3Rpb24ocil7dC5jbGljayhlLmdyYXBoSW5mbyxyKSxlLnVwZGF0ZUFjdGl2ZUJ1dHRvbihyLmN1cnJlbnRUYXJnZXQpfSksci5zZXRBdHRyaWJ1dGUoXCJkYXRhLXRvZ2dsZVwiLHQudG9nZ2xlfHwhMSksdC50b2dnbGUmJm4uc2VsZWN0KHIpLmNsYXNzZWQoXCJhY3RpdmVcIiwhMCk7dmFyIHM9dC5pY29uO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHM/ci5hcHBlbmRDaGlsZChzKCkpOnIuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVJY29uKHN8fG8ucXVlc3Rpb24pKSxyLnNldEF0dHJpYnV0ZShcImRhdGEtZ3Jhdml0eVwiLHQuZ3Jhdml0eXx8XCJuXCIpLHJ9LGMuY3JlYXRlSWNvbj1mdW5jdGlvbih0KXt2YXIgZSxyPWkodC5oZWlnaHQpP051bWJlcih0LmhlaWdodCk6dC5hc2NlbnQtdC5kZXNjZW50LG49XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO2lmKHQucGF0aCl7KGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG4sXCJzdmdcIikpLnNldEF0dHJpYnV0ZShcInZpZXdCb3hcIixbMCwwLHQud2lkdGgscl0uam9pbihcIiBcIikpLGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIixcImljb25cIik7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG4sXCJwYXRoXCIpO2Euc2V0QXR0cmlidXRlKFwiZFwiLHQucGF0aCksdC50cmFuc2Zvcm0/YS5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIix0LnRyYW5zZm9ybSk6dm9pZCAwIT09dC5hc2NlbnQmJmEuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsXCJtYXRyaXgoMSAwIDAgLTEgMCBcIit0LmFzY2VudCtcIilcIiksZS5hcHBlbmRDaGlsZChhKX10LnN2ZyYmKGU9cy5wYXJzZUZyb21TdHJpbmcodC5zdmcsXCJhcHBsaWNhdGlvbi94bWxcIikuY2hpbGROb2Rlc1swXSk7cmV0dXJuIGUuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsXCIxZW1cIiksZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLFwiMWVtXCIpLGV9LGMudXBkYXRlQWN0aXZlQnV0dG9uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ3JhcGhJbmZvLl9mdWxsTGF5b3V0LHI9dm9pZCAwIT09dD90LmdldEF0dHJpYnV0ZShcImRhdGEtYXR0clwiKTpudWxsO3RoaXMuYnV0dG9uRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgaT10LmdldEF0dHJpYnV0ZShcImRhdGEtdmFsXCIpfHwhMCxvPXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1hdHRyXCIpLHM9XCJ0cnVlXCI9PT10LmdldEF0dHJpYnV0ZShcImRhdGEtdG9nZ2xlXCIpLGw9bi5zZWxlY3QodCk7aWYocylvPT09ciYmbC5jbGFzc2VkKFwiYWN0aXZlXCIsIWwuY2xhc3NlZChcImFjdGl2ZVwiKSk7ZWxzZXt2YXIgYz1udWxsPT09bz9vOmEubmVzdGVkUHJvcGVydHkoZSxvKS5nZXQoKTtsLmNsYXNzZWQoXCJhY3RpdmVcIixjPT09aSl9fSl9LGMuaGFzQnV0dG9ucz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmJ1dHRvbnM7aWYoIWUpcmV0dXJuITE7aWYodC5sZW5ndGghPT1lLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil7aWYodFtyXS5sZW5ndGghPT1lW3JdLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHRbcl0ubGVuZ3RoO24rKylpZih0W3JdW25dLm5hbWUhPT1lW3JdW25dLm5hbWUpcmV0dXJuITF9cmV0dXJuITB9LGMuZ2V0TG9nbz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY3JlYXRlR3JvdXAoKSxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO3JldHVybiBlLmhyZWY9XCJodHRwczovL3Bsb3QubHkvXCIsZS50YXJnZXQ9XCJfYmxhbmtcIixlLnNldEF0dHJpYnV0ZShcImRhdGEtdGl0bGVcIixhLl8odGhpcy5ncmFwaEluZm8sXCJQcm9kdWNlZCB3aXRoIFBsb3RseVwiKSksZS5jbGFzc05hbWU9XCJtb2RlYmFyLWJ0biBwbG90bHlqc2ljb24gbW9kZWJhci1idG4tLWxvZ29cIixlLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlSWNvbihvLm5ld3Bsb3RseWxvZ28pKSx0LmFwcGVuZENoaWxkKGUpLHR9LGMucmVtb3ZlQWxsQnV0dG9ucz1mdW5jdGlvbigpe2Zvcig7dGhpcy5lbGVtZW50LmZpcnN0Q2hpbGQ7KXRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZCk7dGhpcy5oYXNMb2dvPSExfSxjLmRlc3Ryb3k9ZnVuY3Rpb24oKXthLnJlbW92ZUVsZW1lbnQodGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5tb2RlYmFyXCIpKSxhLmRlbGV0ZVJlbGF0ZWRTdHlsZVJ1bGUodGhpcy5fdWlkKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxpPW5ldyBsKHtncmFwaEluZm86dCxjb250YWluZXI6ci5fbW9kZWJhcmRpdi5ub2RlKCksYnV0dG9uczplfSk7cmV0dXJuIHIuX3ByaXZhdGVwbG90JiZuLnNlbGVjdChpLmVsZW1lbnQpLmFwcGVuZChcInNwYW5cIikuY2xhc3NlZChcImJhZGdlLXByaXZhdGUgZmxvYXQtLWxlZnRcIiwhMCkudGV4dChcIlBSSVZBVEVcIiksaX19LHtcIi4uLy4uLy4uL2J1aWxkL3Bsb3RpY29uXCI6MixcIi4uLy4uL2xpYlwiOjcwMSxkMzoxNTUsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDY0MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vY29sb3IvYXR0cmlidXRlc1wiKSxhPSgwLHQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLnRlbXBsYXRlZEFycmF5KShcImJ1dHRvblwiLHt2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJwbG90XCJ9LHN0ZXA6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcIm1vbnRoXCIsXCJ5ZWFyXCIsXCJkYXlcIixcImhvdXJcIixcIm1pbnV0ZVwiLFwic2Vjb25kXCIsXCJhbGxcIl0sZGZsdDpcIm1vbnRoXCIsZWRpdFR5cGU6XCJwbG90XCJ9LHN0ZXBtb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJiYWNrd2FyZFwiLFwidG9kYXRlXCJdLGRmbHQ6XCJiYWNrd2FyZFwiLGVkaXRUeXBlOlwicGxvdFwifSxjb3VudDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZTpcInBsb3RcIn0sbGFiZWw6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcInBsb3RcIn0sZWRpdFR5cGU6XCJwbG90XCJ9KTtlLmV4cG9ydHM9e3Zpc2libGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZWRpdFR5cGU6XCJwbG90XCJ9LGJ1dHRvbnM6YSx4Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOi0yLG1heDozLGVkaXRUeXBlOlwicGxvdFwifSx4YW5jaG9yOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhdXRvXCIsXCJsZWZ0XCIsXCJjZW50ZXJcIixcInJpZ2h0XCJdLGRmbHQ6XCJsZWZ0XCIsZWRpdFR5cGU6XCJwbG90XCJ9LHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46LTIsbWF4OjMsZWRpdFR5cGU6XCJwbG90XCJ9LHlhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImF1dG9cIixcInRvcFwiLFwibWlkZGxlXCIsXCJib3R0b21cIl0sZGZsdDpcImJvdHRvbVwiLGVkaXRUeXBlOlwicGxvdFwifSxmb250Om4oe2VkaXRUeXBlOlwicGxvdFwifSksYmdjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDppLmxpZ2h0TGluZSxlZGl0VHlwZTpcInBsb3RcIn0sYWN0aXZlY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwicGxvdFwifSxib3JkZXJjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOlwicGxvdFwifSxib3JkZXJ3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTpcInBsb3RcIn0sZWRpdFR5cGU6XCJwbG90XCJ9fSx7XCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCI6Nzc1LFwiLi4vY29sb3IvYXR0cmlidXRlc1wiOjU3N31dLDY0MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17eVBhZDouMDIsbWluQnV0dG9uV2lkdGg6MzAscng6MyxyeTozLGxpZ2h0QW1vdW50OjI1LGRhcmtBbW91bnQ6MTB9fSx7fV0sNjQyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi9jb2xvclwiKSxhPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLG89dChcIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0c1wiKSxzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbD10KFwiLi9jb25zdGFudHNcIik7ZnVuY3Rpb24gYyh0LGUscixpKXt2YXIgYT1pLmNhbGVuZGFyO2Z1bmN0aW9uIG8ocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMuYnV0dG9ucyxyLGkpfWlmKG8oXCJ2aXNpYmxlXCIpKXt2YXIgbD1vKFwic3RlcFwiKTtcImFsbFwiIT09bCYmKCFhfHxcImdyZWdvcmlhblwiPT09YXx8XCJtb250aFwiIT09bCYmXCJ5ZWFyXCIhPT1sP28oXCJzdGVwbW9kZVwiKTplLnN0ZXBtb2RlPVwiYmFja3dhcmRcIixvKFwiY291bnRcIikpLG8oXCJsYWJlbFwiKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUsaCl7dmFyIGY9dC5yYW5nZXNlbGVjdG9yfHx7fSxwPWEubmV3Q29udGFpbmVyKGUsXCJyYW5nZXNlbGVjdG9yXCIpO2Z1bmN0aW9uIGQodCxlKXtyZXR1cm4gbi5jb2VyY2UoZixwLHMsdCxlKX1pZihkKFwidmlzaWJsZVwiLG8oZixwLHtuYW1lOlwiYnV0dG9uc1wiLGhhbmRsZUl0ZW1EZWZhdWx0czpjLGNhbGVuZGFyOmh9KS5sZW5ndGg+MCkpe3ZhciBnPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ci5maWx0ZXIoZnVuY3Rpb24ocil7cmV0dXJuIGVbcl0uYW5jaG9yPT09dC5faWR9KSxpPTAsYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1lW25bYV1dLmRvbWFpbjtvJiYoaT1NYXRoLm1heChvWzFdLGkpKX1yZXR1cm5bdC5kb21haW5bMF0saStsLnlQYWRdfShlLHIsdSk7ZChcInhcIixnWzBdKSxkKFwieVwiLGdbMV0pLG4ubm9uZU9yQWxsKHQsZSxbXCJ4XCIsXCJ5XCJdKSxkKFwieGFuY2hvclwiKSxkKFwieWFuY2hvclwiKSxuLmNvZXJjZUZvbnQoZCxcImZvbnRcIixyLmZvbnQpO3ZhciB2PWQoXCJiZ2NvbG9yXCIpO2QoXCJhY3RpdmVjb2xvclwiLGkuY29udHJhc3QodixsLmxpZ2h0QW1vdW50LGwuZGFya0Ftb3VudCkpLGQoXCJib3JkZXJjb2xvclwiKSxkKFwiYm9yZGVyd2lkdGhcIil9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0c1wiOjc0NSxcIi4uL2NvbG9yXCI6NTc4LFwiLi9hdHRyaWJ1dGVzXCI6NjQwLFwiLi9jb25zdGFudHNcIjo2NDF9XSw2NDM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vcmVnaXN0cnlcIiksYT10KFwiLi4vLi4vcGxvdHMvcGxvdHNcIiksbz10KFwiLi4vY29sb3JcIikscz10KFwiLi4vZHJhd2luZ1wiKSxsPXQoXCIuLi8uLi9saWJcIiksYz10KFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCIpLHU9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiKSxoPXQoXCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCIpLGY9aC5MSU5FX1NQQUNJTkcscD1oLkZST01fVEwsZD1oLkZST01fQlIsZz10KFwiLi9jb25zdGFudHNcIiksdj10KFwiLi9nZXRfdXBkYXRlX29iamVjdFwiKTtmdW5jdGlvbiBtKHQpe3JldHVybiB0Ll9pZH1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj1sLmVuc3VyZVNpbmdsZSh0LFwicmVjdFwiLFwic2VsZWN0b3ItcmVjdFwiLGZ1bmN0aW9uKHQpe3QuYXR0cihcInNoYXBlLXJlbmRlcmluZ1wiLFwiY3Jpc3BFZGdlc1wiKX0pO24uYXR0cih7cng6Zy5yeCxyeTpnLnJ5fSksbi5jYWxsKG8uc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwoby5maWxsLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuX2lzQWN0aXZlfHxlLl9pc0hvdmVyZWQ/dC5hY3RpdmVjb2xvcjp0LmJnY29sb3J9KGUscikpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsZS5ib3JkZXJ3aWR0aCtcInB4XCIpfWZ1bmN0aW9uIHgodCxlLHIsbil7bC5lbnN1cmVTaW5nbGUodCxcInRleHRcIixcInNlbGVjdG9yLXRleHRcIixmdW5jdGlvbih0KXt0LmNsYXNzZWQoXCJ1c2VyLXNlbGVjdC1ub25lXCIsITApLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLFwibWlkZGxlXCIpfSkuY2FsbChzLmZvbnQsZS5mb250KS50ZXh0KGZ1bmN0aW9uKHQsZSl7aWYodC5sYWJlbClyZXR1cm4gZT9sLnRlbXBsYXRlU3RyaW5nKHQubGFiZWwse21ldGE6ZX0pOnQubGFiZWw7cmV0dXJuXCJhbGxcIj09PXQuc3RlcD9cImFsbFwiOnQuY291bnQrdC5zdGVwLmNoYXJBdCgwKX0ocixuLl9mdWxsTGF5b3V0Lm1ldGEpKS5jYWxsKGZ1bmN0aW9uKHQpe2MuY29udmVydFRvVHNwYW5zKHQsbil9KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdEFsbChcIi5yYW5nZXNlbGVjdG9yXCIpLmRhdGEoZnVuY3Rpb24odCl7Zm9yKHZhciBlPXUubGlzdCh0LFwieFwiLCEwKSxyPVtdLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXTtpLnJhbmdlc2VsZWN0b3ImJmkucmFuZ2VzZWxlY3Rvci52aXNpYmxlJiZyLnB1c2goaSl9cmV0dXJuIHJ9KHQpLG0pO2UuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJyYW5nZXNlbGVjdG9yXCIsITApLGUuZXhpdCgpLnJlbW92ZSgpLGUuc3R5bGUoe2N1cnNvcjpcInBvaW50ZXJcIixcInBvaW50ZXItZXZlbnRzXCI6XCJhbGxcIn0pLGUuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxvPWUsdT1vLnJhbmdlc2VsZWN0b3IsaD1yLnNlbGVjdEFsbChcImcuYnV0dG9uXCIpLmRhdGEobC5maWx0ZXJWaXNpYmxlKHUuYnV0dG9ucykpO2guZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJidXR0b25cIiwhMCksaC5leGl0KCkucmVtb3ZlKCksaC5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGE9dihvLGUpO2UuX2lzQWN0aXZlPWZ1bmN0aW9uKHQsZSxyKXtpZihcImFsbFwiPT09ZS5zdGVwKXJldHVybiEwPT09dC5hdXRvcmFuZ2U7dmFyIG49T2JqZWN0LmtleXMocik7cmV0dXJuIHQucmFuZ2VbMF09PT1yW25bMF1dJiZ0LnJhbmdlWzFdPT09cltuWzFdXX0obyxlLGEpLHIuY2FsbCh5LHUsZSksci5jYWxsKHgsdSxlLHQpLHIub24oXCJjbGlja1wiLGZ1bmN0aW9uKCl7dC5fZHJhZ2dlZHx8aS5jYWxsKFwiX2d1aVJlbGF5b3V0XCIsdCxhKX0pLHIub24oXCJtb3VzZW92ZXJcIixmdW5jdGlvbigpe2UuX2lzSG92ZXJlZD0hMCxyLmNhbGwoeSx1LGUpfSksci5vbihcIm1vdXNlb3V0XCIsZnVuY3Rpb24oKXtlLl9pc0hvdmVyZWQ9ITEsci5jYWxsKHksdSxlKX0pfSksZnVuY3Rpb24odCxlLHIsaSxvKXt2YXIgdT0wLGg9MCx2PXIuYm9yZGVyd2lkdGg7ZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT10LnNlbGVjdChcIi5zZWxlY3Rvci10ZXh0XCIpLGk9ci5mb250LnNpemUqZixhPU1hdGgubWF4KGkqYy5saW5lQ291bnQoZSksMTYpKzM7aD1NYXRoLm1heChoLGEpfSksZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT10LnNlbGVjdChcIi5zZWxlY3Rvci1yZWN0XCIpLGk9dC5zZWxlY3QoXCIuc2VsZWN0b3ItdGV4dFwiKSxhPWkubm9kZSgpJiZzLmJCb3goaS5ub2RlKCkpLndpZHRoLG89ci5mb250LnNpemUqZixsPWMubGluZUNvdW50KGkpLHA9TWF0aC5tYXgoYSsxMCxnLm1pbkJ1dHRvbldpZHRoKTt0LmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIisodit1KStcIixcIit2K1wiKVwiKSxlLmF0dHIoe3g6MCx5OjAsd2lkdGg6cCxoZWlnaHQ6aH0pLGMucG9zaXRpb25UZXh0KGkscC8yLGgvMi0obC0xKSpvLzIrMyksdSs9cCs1fSk7dmFyIG09dC5fZnVsbExheW91dC5fc2l6ZSx5PW0ubCttLncqci54LHg9bS50K20uaCooMS1yLnkpLGI9XCJsZWZ0XCI7bC5pc1JpZ2h0QW5jaG9yKHIpJiYoeS09dSxiPVwicmlnaHRcIik7bC5pc0NlbnRlckFuY2hvcihyKSYmKHktPXUvMixiPVwiY2VudGVyXCIpO3ZhciBfPVwidG9wXCI7bC5pc0JvdHRvbUFuY2hvcihyKSYmKHgtPWgsXz1cImJvdHRvbVwiKTtsLmlzTWlkZGxlQW5jaG9yKHIpJiYoeC09aC8yLF89XCJtaWRkbGVcIik7dT1NYXRoLmNlaWwodSksaD1NYXRoLmNlaWwoaCkseT1NYXRoLnJvdW5kKHkpLHg9TWF0aC5yb3VuZCh4KSxhLmF1dG9NYXJnaW4odCxpK1wiLXJhbmdlLXNlbGVjdG9yXCIse3g6ci54LHk6ci55LGw6dSpwW2JdLHI6dSpkW2JdLGI6aCpkW19dLHQ6aCpwW19dfSksby5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIreStcIixcIit4K1wiKVwiKX0odCxoLHUsby5fbmFtZSxyKX0pfX0se1wiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiOjY3MyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiOjcyNSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiOjc1MixcIi4uLy4uL3Bsb3RzL3Bsb3RzXCI6ODEwLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9jb2xvclwiOjU3OCxcIi4uL2RyYXdpbmdcIjo1OTksXCIuL2NvbnN0YW50c1wiOjY0MSxcIi4vZ2V0X3VwZGF0ZV9vYmplY3RcIjo2NDQsZDM6MTU1fV0sNjQ0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX25hbWUsaT17fTtpZihcImFsbFwiPT09ZS5zdGVwKWlbcitcIi5hdXRvcmFuZ2VcIl09ITA7ZWxzZXt2YXIgYT1mdW5jdGlvbih0LGUpe3ZhciByLGk9dC5yYW5nZSxhPW5ldyBEYXRlKHQucjJsKGlbMV0pKSxvPWUuc3RlcCxzPWUuY291bnQ7c3dpdGNoKGUuc3RlcG1vZGUpe2Nhc2VcImJhY2t3YXJkXCI6cj10Lmwycigrbi50aW1lW29dLnV0Yy5vZmZzZXQoYSwtcykpO2JyZWFrO2Nhc2VcInRvZGF0ZVwiOnZhciBsPW4udGltZVtvXS51dGMub2Zmc2V0KGEsLXMpO3I9dC5sMnIoK24udGltZVtvXS51dGMuY2VpbChsKSl9dmFyIGM9aVsxXTtyZXR1cm5bcixjXX0odCxlKTtpW3IrXCIucmFuZ2VbMF1cIl09YVswXSxpW3IrXCIucmFuZ2VbMV1cIl09YVsxXX1yZXR1cm4gaX19LHtkMzoxNTV9XSw2NDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6XCJjb21wb25lbnRcIixuYW1lOlwicmFuZ2VzZWxlY3RvclwiLHNjaGVtYTp7c3VicGxvdHM6e3hheGlzOntyYW5nZXNlbGVjdG9yOnQoXCIuL2F0dHJpYnV0ZXNcIil9fX0sbGF5b3V0QXR0cmlidXRlczp0KFwiLi9hdHRyaWJ1dGVzXCIpLGhhbmRsZURlZmF1bHRzOnQoXCIuL2RlZmF1bHRzXCIpLGRyYXc6dChcIi4vZHJhd1wiKX19LHtcIi4vYXR0cmlidXRlc1wiOjY0MCxcIi4vZGVmYXVsdHNcIjo2NDIsXCIuL2RyYXdcIjo2NDN9XSw2NDY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vY29sb3IvYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9e2JnY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6bi5iYWNrZ3JvdW5kLGVkaXRUeXBlOlwicGxvdFwifSxib3JkZXJjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDpuLmRlZmF1bHRMaW5lLGVkaXRUeXBlOlwicGxvdFwifSxib3JkZXJ3aWR0aDp7dmFsVHlwZTpcImludGVnZXJcIixkZmx0OjAsbWluOjAsZWRpdFR5cGU6XCJwbG90XCJ9LGF1dG9yYW5nZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wiLGltcGxpZWRFZGl0czp7XCJyYW5nZVswXVwiOnZvaWQgMCxcInJhbmdlWzFdXCI6dm9pZCAwfX0scmFuZ2U6e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsaXRlbXM6W3t2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjXCIsaW1wbGllZEVkaXRzOntcIl5hdXRvcmFuZ2VcIjohMX19LHt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjXCIsaW1wbGllZEVkaXRzOntcIl5hdXRvcmFuZ2VcIjohMX19XSxlZGl0VHlwZTpcImNhbGNcIixpbXBsaWVkRWRpdHM6e2F1dG9yYW5nZTohMX19LHRoaWNrbmVzczp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6LjE1LG1pbjowLG1heDoxLGVkaXRUeXBlOlwicGxvdFwifSx2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LGVkaXRUeXBlOlwiY2FsY1wifX0se1wiLi4vY29sb3IvYXR0cmlidXRlc1wiOjU3N31dLDY0NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIikubGlzdCxpPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlXCIpLmdldEF1dG9SYW5nZSxhPXQoXCIuL2NvbnN0YW50c1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW4odCxcInhcIiwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbz1lW3JdLHM9b1thLm5hbWVdO3MmJnMudmlzaWJsZSYmcy5hdXRvcmFuZ2UmJihzLl9pbnB1dC5hdXRvcmFuZ2U9ITAscy5faW5wdXQucmFuZ2U9cy5yYW5nZT1pKHQsbykpfX19LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2VcIjo3NDgsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIjo3NTIsXCIuL2NvbnN0YW50c1wiOjY0OH1dLDY0ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17bmFtZTpcInJhbmdlc2xpZGVyXCIsY29udGFpbmVyQ2xhc3NOYW1lOlwicmFuZ2VzbGlkZXItY29udGFpbmVyXCIsYmdDbGFzc05hbWU6XCJyYW5nZXNsaWRlci1iZ1wiLHJhbmdlUGxvdENsYXNzTmFtZTpcInJhbmdlc2xpZGVyLXJhbmdlcGxvdFwiLG1hc2tNaW5DbGFzc05hbWU6XCJyYW5nZXNsaWRlci1tYXNrLW1pblwiLG1hc2tNYXhDbGFzc05hbWU6XCJyYW5nZXNsaWRlci1tYXNrLW1heFwiLHNsaWRlQm94Q2xhc3NOYW1lOlwicmFuZ2VzbGlkZXItc2xpZGVib3hcIixncmFiYmVyTWluQ2xhc3NOYW1lOlwicmFuZ2VzbGlkZXItZ3JhYmJlci1taW5cIixncmFiQXJlYU1pbkNsYXNzTmFtZTpcInJhbmdlc2xpZGVyLWdyYWJhcmVhLW1pblwiLGhhbmRsZU1pbkNsYXNzTmFtZTpcInJhbmdlc2xpZGVyLWhhbmRsZS1taW5cIixncmFiYmVyTWF4Q2xhc3NOYW1lOlwicmFuZ2VzbGlkZXItZ3JhYmJlci1tYXhcIixncmFiQXJlYU1heENsYXNzTmFtZTpcInJhbmdlc2xpZGVyLWdyYWJhcmVhLW1heFwiLGhhbmRsZU1heENsYXNzTmFtZTpcInJhbmdlc2xpZGVyLWhhbmRsZS1tYXhcIixtYXNrTWluT3BwQXhpc0NsYXNzTmFtZTpcInJhbmdlc2xpZGVyLW1hc2stbWluLW9wcC1heGlzXCIsbWFza01heE9wcEF4aXNDbGFzc05hbWU6XCJyYW5nZXNsaWRlci1tYXNrLW1heC1vcHAtYXhpc1wiLG1hc2tDb2xvcjpcInJnYmEoMCwwLDAsMC40KVwiLG1hc2tPcHBBeGlzQ29sb3I6XCJyZ2JhKDAsMCwwLDAuMilcIixzbGlkZUJveEZpbGw6XCJ0cmFuc3BhcmVudFwiLHNsaWRlQm94Q3Vyc29yOlwiZXctcmVzaXplXCIsZ3JhYkFyZWFGaWxsOlwidHJhbnNwYXJlbnRcIixncmFiQXJlYUN1cnNvcjpcImNvbC1yZXNpemVcIixncmFiQXJlYVdpZHRoOjEwLGhhbmRsZVdpZHRoOjQsaGFuZGxlUmFkaXVzOjEsaGFuZGxlU3Ryb2tlV2lkdGg6MSxleHRyYVBhZDoxNX19LHt9XSw2NDk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIiksYT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCIpLG89dChcIi4vYXR0cmlidXRlc1wiKSxzPXQoXCIuL29wcGF4aXNfYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBsPXRbcl0sYz1lW3JdO2lmKGwucmFuZ2VzbGlkZXJ8fGUuX3JlcXVlc3RSYW5nZXNsaWRlcltjLl9pZF0pe24uaXNQbGFpbk9iamVjdChsLnJhbmdlc2xpZGVyKXx8KGwucmFuZ2VzbGlkZXI9e30pO3ZhciB1LGgsZj1sLnJhbmdlc2xpZGVyLHA9aS5uZXdDb250YWluZXIoYyxcInJhbmdlc2xpZGVyXCIpO2lmKF8oXCJ2aXNpYmxlXCIpKXtfKFwiYmdjb2xvclwiLGUucGxvdF9iZ2NvbG9yKSxfKFwiYm9yZGVyY29sb3JcIiksXyhcImJvcmRlcndpZHRoXCIpLF8oXCJ0aGlja25lc3NcIiksXyhcImF1dG9yYW5nZVwiLCFjLmlzVmFsaWRSYW5nZShmLnJhbmdlKSksXyhcInJhbmdlXCIpO3ZhciBkPWUuX3N1YnBsb3RzO2lmKGQpZm9yKHZhciBnPWQuY2FydGVzaWFuLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5zdWJzdHIoMCx0LmluZGV4T2YoXCJ5XCIpKT09PWEubmFtZTJpZChyKX0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdWJzdHIodC5pbmRleE9mKFwieVwiKSx0Lmxlbmd0aCl9KSx2PW4uc2ltcGxlTWFwKGcsYS5pZDJuYW1lKSxtPTA7bTx2Lmxlbmd0aDttKyspe3ZhciB5PXZbbV07dT1mW3ldfHx7fSxoPWkubmV3Q29udGFpbmVyKHAseSxcInlheGlzXCIpO3ZhciB4LGI9ZVt5XTt1LnJhbmdlJiZiLmlzVmFsaWRSYW5nZSh1LnJhbmdlKSYmKHg9XCJmaXhlZFwiKSxcIm1hdGNoXCIhPT13KFwicmFuZ2Vtb2RlXCIseCkmJncoXCJyYW5nZVwiLGIucmFuZ2Uuc2xpY2UoKSl9cC5faW5wdXQ9Zn19ZnVuY3Rpb24gXyh0LGUpe3JldHVybiBuLmNvZXJjZShmLHAsbyx0LGUpfWZ1bmN0aW9uIHcodCxlKXtyZXR1cm4gbi5jb2VyY2UodSxoLHMsdCxlKX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCI6NzUyLFwiLi9hdHRyaWJ1dGVzXCI6NjQ2LFwiLi9vcHBheGlzX2F0dHJpYnV0ZXNcIjo2NTN9XSw2NTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vcmVnaXN0cnlcIiksYT10KFwiLi4vLi4vcGxvdHMvcGxvdHNcIiksbz10KFwiLi4vLi4vbGliXCIpLHM9dChcIi4uL2RyYXdpbmdcIiksbD10KFwiLi4vY29sb3JcIiksYz10KFwiLi4vdGl0bGVzXCIpLHU9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiKSxoPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIiksZj10KFwiLi4vZHJhZ2VsZW1lbnRcIikscD10KFwiLi4vLi4vbGliL3NldGN1cnNvclwiKSxkPXQoXCIuL2NvbnN0YW50c1wiKTtmdW5jdGlvbiBnKHQsZSxyLG4pe3ZhciBpPW8uZW5zdXJlU2luZ2xlKHQsXCJyZWN0XCIsZC5iZ0NsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIoe3g6MCx5OjAsXCJzaGFwZS1yZW5kZXJpbmdcIjpcImNyaXNwRWRnZXNcIn0pfSksYT1uLmJvcmRlcndpZHRoJTI9PTA/bi5ib3JkZXJ3aWR0aDpuLmJvcmRlcndpZHRoLTEsbD0tbi5fb2Zmc2V0U2hpZnQsYz1zLmNyaXNwUm91bmQoZSxuLmJvcmRlcndpZHRoKTtpLmF0dHIoe3dpZHRoOm4uX3dpZHRoK2EsaGVpZ2h0Om4uX2hlaWdodCthLHRyYW5zZm9ybTpcInRyYW5zbGF0ZShcIitsK1wiLFwiK2wrXCIpXCIsZmlsbDpuLmJnY29sb3Isc3Ryb2tlOm4uYm9yZGVyY29sb3IsXCJzdHJva2Utd2lkdGhcIjpjfSl9ZnVuY3Rpb24gdih0LGUscixuKXt2YXIgaT1lLl9mdWxsTGF5b3V0O28uZW5zdXJlU2luZ2xlQnlJZChpLl90b3BkZWZzLFwiY2xpcFBhdGhcIixuLl9jbGlwSWQsZnVuY3Rpb24odCl7dC5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoe3g6MCx5OjB9KX0pLnNlbGVjdChcInJlY3RcIikuYXR0cih7d2lkdGg6bi5fd2lkdGgsaGVpZ2h0Om4uX2hlaWdodH0pfWZ1bmN0aW9uIG0odCxlLHIsaSl7dmFyIGwsYz1lLmNhbGNkYXRhLGY9dC5zZWxlY3RBbGwoXCJnLlwiK2QucmFuZ2VQbG90Q2xhc3NOYW1lKS5kYXRhKHIuX3N1YnBsb3RzV2l0aCxvLmlkZW50aXR5KTtmLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIixmdW5jdGlvbih0KXtyZXR1cm4gZC5yYW5nZVBsb3RDbGFzc05hbWUrXCIgXCIrdH0pLmNhbGwocy5zZXRDbGlwVXJsLGkuX2NsaXBJZCxlKSxmLm9yZGVyKCksZi5leGl0KCkucmVtb3ZlKCksZi5lYWNoKGZ1bmN0aW9uKHQsbyl7dmFyIHM9bi5zZWxlY3QodGhpcyksZj0wPT09byxwPWguZ2V0RnJvbUlkKGUsdCxcInlcIiksZD1wLl9uYW1lLGc9aVtkXSx2PXtkYXRhOltdLGxheW91dDp7eGF4aXM6e3R5cGU6ci50eXBlLGRvbWFpbjpbMCwxXSxyYW5nZTppLnJhbmdlLnNsaWNlKCksY2FsZW5kYXI6ci5jYWxlbmRhcn0sd2lkdGg6aS5fd2lkdGgsaGVpZ2h0OmkuX2hlaWdodCxtYXJnaW46e3Q6MCxiOjAsbDowLHI6MH19LF9jb250ZXh0OmUuX2NvbnRleHR9O3YubGF5b3V0W2RdPXt0eXBlOnAudHlwZSxkb21haW46WzAsMV0scmFuZ2U6XCJtYXRjaFwiIT09Zy5yYW5nZW1vZGU/Zy5yYW5nZS5zbGljZSgpOnAucmFuZ2Uuc2xpY2UoKSxjYWxlbmRhcjpwLmNhbGVuZGFyfSxhLnN1cHBseURlZmF1bHRzKHYpO3ZhciBtPXYuX2Z1bGxMYXlvdXQueGF4aXMseT12Ll9mdWxsTGF5b3V0W2RdO20uY2xlYXJDYWxjKCksbS5zZXRTY2FsZSgpLHkuY2xlYXJDYWxjKCkseS5zZXRTY2FsZSgpO3ZhciB4PXtpZDp0LHBsb3Rncm91cDpzLHhheGlzOm0seWF4aXM6eSxpc1JhbmdlUGxvdDohMH07Zj9sPXg6KHgubWFpbnBsb3Q9XCJ4eVwiLHgubWFpbnBsb3RpbmZvPWwpLHUucmFuZ2VQbG90KGUseCxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl0sYT1pWzBdLnRyYWNlO2EueGF4aXMrYS55YXhpcz09PWUmJnIucHVzaChpKX1yZXR1cm4gcn0oYyx0KSl9KX1mdW5jdGlvbiB5KHQsZSxyLG4saSl7KG8uZW5zdXJlU2luZ2xlKHQsXCJyZWN0XCIsZC5tYXNrTWluQ2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuYXR0cih7eDowLHk6MCxcInNoYXBlLXJlbmRlcmluZ1wiOlwiY3Jpc3BFZGdlc1wifSl9KS5hdHRyKFwiaGVpZ2h0XCIsbi5faGVpZ2h0KS5jYWxsKGwuZmlsbCxkLm1hc2tDb2xvciksby5lbnN1cmVTaW5nbGUodCxcInJlY3RcIixkLm1hc2tNYXhDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHt5OjAsXCJzaGFwZS1yZW5kZXJpbmdcIjpcImNyaXNwRWRnZXNcIn0pfSkuYXR0cihcImhlaWdodFwiLG4uX2hlaWdodCkuY2FsbChsLmZpbGwsZC5tYXNrQ29sb3IpLFwibWF0Y2hcIiE9PWkucmFuZ2Vtb2RlKSYmKG8uZW5zdXJlU2luZ2xlKHQsXCJyZWN0XCIsZC5tYXNrTWluT3BwQXhpc0NsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIoe3k6MCxcInNoYXBlLXJlbmRlcmluZ1wiOlwiY3Jpc3BFZGdlc1wifSl9KS5hdHRyKFwid2lkdGhcIixuLl93aWR0aCkuY2FsbChsLmZpbGwsZC5tYXNrT3BwQXhpc0NvbG9yKSxvLmVuc3VyZVNpbmdsZSh0LFwicmVjdFwiLGQubWFza01heE9wcEF4aXNDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHt5OjAsXCJzaGFwZS1yZW5kZXJpbmdcIjpcImNyaXNwRWRnZXNcIn0pfSkuYXR0cihcIndpZHRoXCIsbi5fd2lkdGgpLnN0eWxlKFwiYm9yZGVyLXRvcFwiLGQubWFza09wcEJvcmRlcikuY2FsbChsLmZpbGwsZC5tYXNrT3BwQXhpc0NvbG9yKSl9ZnVuY3Rpb24geCh0LGUscixuKXtlLl9jb250ZXh0LnN0YXRpY1Bsb3R8fG8uZW5zdXJlU2luZ2xlKHQsXCJyZWN0XCIsZC5zbGlkZUJveENsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIoe3k6MCxjdXJzb3I6ZC5zbGlkZUJveEN1cnNvcixcInNoYXBlLXJlbmRlcmluZ1wiOlwiY3Jpc3BFZGdlc1wifSl9KS5hdHRyKHtoZWlnaHQ6bi5faGVpZ2h0LGZpbGw6ZC5zbGlkZUJveEZpbGx9KX1mdW5jdGlvbiBiKHQsZSxyLG4pe3ZhciBpPW8uZW5zdXJlU2luZ2xlKHQsXCJnXCIsZC5ncmFiYmVyTWluQ2xhc3NOYW1lKSxhPW8uZW5zdXJlU2luZ2xlKHQsXCJnXCIsZC5ncmFiYmVyTWF4Q2xhc3NOYW1lKSxzPXt4OjAsd2lkdGg6ZC5oYW5kbGVXaWR0aCxyeDpkLmhhbmRsZVJhZGl1cyxmaWxsOmwuYmFja2dyb3VuZCxzdHJva2U6bC5kZWZhdWx0TGluZSxcInN0cm9rZS13aWR0aFwiOmQuaGFuZGxlU3Ryb2tlV2lkdGgsXCJzaGFwZS1yZW5kZXJpbmdcIjpcImNyaXNwRWRnZXNcIn0sYz17eTpNYXRoLnJvdW5kKG4uX2hlaWdodC80KSxoZWlnaHQ6TWF0aC5yb3VuZChuLl9oZWlnaHQvMil9O2lmKG8uZW5zdXJlU2luZ2xlKGksXCJyZWN0XCIsZC5oYW5kbGVNaW5DbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHMpfSkuYXR0cihjKSxvLmVuc3VyZVNpbmdsZShhLFwicmVjdFwiLGQuaGFuZGxlTWF4Q2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuYXR0cihzKX0pLmF0dHIoYyksIWUuX2NvbnRleHQuc3RhdGljUGxvdCl7dmFyIHU9e3dpZHRoOmQuZ3JhYkFyZWFXaWR0aCx4OjAseTowLGZpbGw6ZC5ncmFiQXJlYUZpbGwsY3Vyc29yOmQuZ3JhYkFyZWFDdXJzb3J9O28uZW5zdXJlU2luZ2xlKGksXCJyZWN0XCIsZC5ncmFiQXJlYU1pbkNsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIodSl9KS5hdHRyKFwiaGVpZ2h0XCIsbi5faGVpZ2h0KSxvLmVuc3VyZVNpbmdsZShhLFwicmVjdFwiLGQuZ3JhYkFyZWFNYXhDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHUpfSkuYXR0cihcImhlaWdodFwiLG4uX2hlaWdodCl9fWUuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3JhbmdlU2xpZGVyRGF0YSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV1bZC5uYW1lXTtzLl9jbGlwSWQ9cy5faWQrXCItXCIrZS5fdWlkfXZhciBsPWUuX2luZm9sYXllci5zZWxlY3RBbGwoXCJnLlwiK2QuY29udGFpbmVyQ2xhc3NOYW1lKS5kYXRhKHIsZnVuY3Rpb24odCl7cmV0dXJuIHQuX25hbWV9KTtsLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPXRbZC5uYW1lXTtlLl90b3BkZWZzLnNlbGVjdChcIiNcIityLl9jbGlwSWQpLnJlbW92ZSgpfSkucmVtb3ZlKCksMCE9PXIubGVuZ3RoJiYobC5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChkLmNvbnRhaW5lckNsYXNzTmFtZSwhMCkuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsXCJhbGxcIiksbC5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBhPW4uc2VsZWN0KHRoaXMpLHM9cltkLm5hbWVdLGw9ZVtoLmlkMm5hbWUoci5hbmNob3IpXSx1PXNbaC5pZDJuYW1lKHIuYW5jaG9yKV07aWYocy5yYW5nZSl7dmFyIF8sdz1vLnNpbXBsZU1hcChzLnJhbmdlLHIucjJsKSxrPW8uc2ltcGxlTWFwKHIucmFuZ2Usci5yMmwpO189a1swXTxrWzFdP1tNYXRoLm1pbih3WzBdLGtbMF0pLE1hdGgubWF4KHdbMV0sa1sxXSldOltNYXRoLm1heCh3WzBdLGtbMF0pLE1hdGgubWluKHdbMV0sa1sxXSldLHMucmFuZ2U9cy5faW5wdXQucmFuZ2U9by5zaW1wbGVNYXAoXyxyLmwycil9ci5jbGVhblJhbmdlKFwicmFuZ2VzbGlkZXIucmFuZ2VcIik7dmFyIEE9ZS5tYXJnaW4sVD1lLl9zaXplLE09ci5kb21haW4sUz1zLl90aWNrSGVpZ2h0LEU9cy5fb3BwQm90dG9tO3MuX3dpZHRoPVQudyooTVsxXS1NWzBdKTt2YXIgQz1NYXRoLnJvdW5kKEEubCtULncqTVswXSksTD1NYXRoLnJvdW5kKFQudCtULmgqKDEtRSkrUytzLl9vZmZzZXRTaGlmdCtkLmV4dHJhUGFkKTthLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIitDK1wiLFwiK0wrXCIpXCIpO3ZhciB6PXIucjJsKHMucmFuZ2VbMF0pLE89ci5yMmwocy5yYW5nZVsxXSksST1PLXo7aWYocy5wMmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQvcy5fd2lkdGgqSSt6fSxzLmQycD1mdW5jdGlvbih0KXtyZXR1cm4odC16KS9JKnMuX3dpZHRofSxzLl9ybD1beixPXSxcIm1hdGNoXCIhPT11LnJhbmdlbW9kZSl7dmFyIEQ9bC5yMmwodS5yYW5nZVswXSksUD1sLnIybCh1LnJhbmdlWzFdKS1EO3MuZDJwT3BwQXhpcz1mdW5jdGlvbih0KXtyZXR1cm4odC1EKS9QKnMuX2hlaWdodH19YS5jYWxsKGcsdCxyLHMpLmNhbGwodix0LHIscykuY2FsbChtLHQscixzKS5jYWxsKHksdCxyLHMsdSkuY2FsbCh4LHQscixzKS5jYWxsKGIsdCxyLHMpLGZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBzPXQuc2VsZWN0KFwicmVjdC5cIitkLnNsaWRlQm94Q2xhc3NOYW1lKS5ub2RlKCksbD10LnNlbGVjdChcInJlY3QuXCIrZC5ncmFiQXJlYU1pbkNsYXNzTmFtZSkubm9kZSgpLGM9dC5zZWxlY3QoXCJyZWN0LlwiK2QuZ3JhYkFyZWFNYXhDbGFzc05hbWUpLm5vZGUoKTt0Lm9uKFwibW91c2Vkb3duXCIsZnVuY3Rpb24oKXt2YXIgdT1uLmV2ZW50LGg9dS50YXJnZXQsZD11LmNsaWVudFgsZz1kLXQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQsdj1hLmQycChyLl9ybFswXSksbT1hLmQycChyLl9ybFsxXSkseT1mLmNvdmVyU2xpcCgpO2Z1bmN0aW9uIHgodCl7dmFyIHUsZix4LGI9K3QuY2xpZW50WC1kO3N3aXRjaChoKXtjYXNlIHM6eD1cImV3LXJlc2l6ZVwiLHU9ditiLGY9bStiO2JyZWFrO2Nhc2UgbDp4PVwiY29sLXJlc2l6ZVwiLHU9ditiLGY9bTticmVhaztjYXNlIGM6eD1cImNvbC1yZXNpemVcIix1PXYsZj1tK2I7YnJlYWs7ZGVmYXVsdDp4PVwiZXctcmVzaXplXCIsdT1nLGY9ZytifWlmKGY8dSl7dmFyIF89ZjtmPXUsdT1ffWEuX3BpeGVsTWluPXUsYS5fcGl4ZWxNYXg9ZixwKG4uc2VsZWN0KHkpLHgpLGZ1bmN0aW9uKHQsZSxyLG4pe2Z1bmN0aW9uIGEodCl7cmV0dXJuIHIubDJyKG8uY29uc3RyYWluKHQsbi5fcmxbMF0sbi5fcmxbMV0pKX12YXIgcz1hKG4ucDJkKG4uX3BpeGVsTWluKSksbD1hKG4ucDJkKG4uX3BpeGVsTWF4KSk7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe2kuY2FsbChcIl9ndWlSZWxheW91dFwiLGUsci5fbmFtZStcIi5yYW5nZVwiLFtzLGxdKX0pfSgwLGUscixhKX15LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIix4KSx5LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsZnVuY3Rpb24gdCgpe3kucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHgpO3kucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIix0KTtvLnJlbW92ZUVsZW1lbnQoeSl9KX0pfShhLHQscixzKSxmdW5jdGlvbih0LGUscixuLGksYSl7dmFyIHM9ZC5oYW5kbGVXaWR0aC8yO2Z1bmN0aW9uIGwodCl7cmV0dXJuIG8uY29uc3RyYWluKHQsMCxuLl93aWR0aCl9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gby5jb25zdHJhaW4odCwwLG4uX2hlaWdodCl9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gby5jb25zdHJhaW4odCwtcyxuLl93aWR0aCtzKX12YXIgaD1sKG4uZDJwKHIuX3JsWzBdKSksZj1sKG4uZDJwKHIuX3JsWzFdKSk7aWYodC5zZWxlY3QoXCJyZWN0LlwiK2Quc2xpZGVCb3hDbGFzc05hbWUpLmF0dHIoXCJ4XCIsaCkuYXR0cihcIndpZHRoXCIsZi1oKSx0LnNlbGVjdChcInJlY3QuXCIrZC5tYXNrTWluQ2xhc3NOYW1lKS5hdHRyKFwid2lkdGhcIixoKSx0LnNlbGVjdChcInJlY3QuXCIrZC5tYXNrTWF4Q2xhc3NOYW1lKS5hdHRyKFwieFwiLGYpLmF0dHIoXCJ3aWR0aFwiLG4uX3dpZHRoLWYpLFwibWF0Y2hcIiE9PWEucmFuZ2Vtb2RlKXt2YXIgcD1uLl9oZWlnaHQtYyhuLmQycE9wcEF4aXMoaS5fcmxbMV0pKSxnPW4uX2hlaWdodC1jKG4uZDJwT3BwQXhpcyhpLl9ybFswXSkpO3Quc2VsZWN0KFwicmVjdC5cIitkLm1hc2tNaW5PcHBBeGlzQ2xhc3NOYW1lKS5hdHRyKFwieFwiLGgpLmF0dHIoXCJoZWlnaHRcIixwKS5hdHRyKFwid2lkdGhcIixmLWgpLHQuc2VsZWN0KFwicmVjdC5cIitkLm1hc2tNYXhPcHBBeGlzQ2xhc3NOYW1lKS5hdHRyKFwieFwiLGgpLmF0dHIoXCJ5XCIsZykuYXR0cihcImhlaWdodFwiLG4uX2hlaWdodC1nKS5hdHRyKFwid2lkdGhcIixmLWgpLHQuc2VsZWN0KFwicmVjdC5cIitkLnNsaWRlQm94Q2xhc3NOYW1lKS5hdHRyKFwieVwiLHApLmF0dHIoXCJoZWlnaHRcIixnLXApfXZhciB2PU1hdGgucm91bmQodShoLXMpKS0uNSxtPU1hdGgucm91bmQodShmLXMpKSsuNTt0LnNlbGVjdChcImcuXCIrZC5ncmFiYmVyTWluQ2xhc3NOYW1lKS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrditcIiwwLjUpXCIpLHQuc2VsZWN0KFwiZy5cIitkLmdyYWJiZXJNYXhDbGFzc05hbWUpLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIittK1wiLDAuNSlcIil9KGEsMCxyLHMsbCx1KSxcImJvdHRvbVwiPT09ci5zaWRlJiZjLmRyYXcodCxyLl9pZCtcInRpdGxlXCIse3Byb3BDb250YWluZXI6cixwcm9wTmFtZTpyLl9uYW1lK1wiLnRpdGxlXCIscGxhY2Vob2xkZXI6ZS5fZGZsdFRpdGxlLngsYXR0cmlidXRlczp7eDpyLl9vZmZzZXQrci5fbGVuZ3RoLzIseTpMK3MuX2hlaWdodCtzLl9vZmZzZXRTaGlmdCsxMCsxLjUqci50aXRsZS5mb250LnNpemUsXCJ0ZXh0LWFuY2hvclwiOlwibWlkZGxlXCJ9fSl9KSl9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvc2V0Y3Vyc29yXCI6NzIxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCI6NzUyLFwiLi4vLi4vcGxvdHMvcGxvdHNcIjo4MTAsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL2NvbG9yXCI6NTc4LFwiLi4vZHJhZ2VsZW1lbnRcIjo1OTYsXCIuLi9kcmF3aW5nXCI6NTk5LFwiLi4vdGl0bGVzXCI6NjY2LFwiLi9jb25zdGFudHNcIjo2NDgsZDM6MTU1fV0sNjUxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiKSxpPXQoXCIuL2NvbnN0YW50c1wiKSxhPWkubmFtZTtmdW5jdGlvbiBvKHQpe3ZhciBlPXQmJnRbYV07cmV0dXJuIGUmJmUudmlzaWJsZX1yLmlzVmlzaWJsZT1vLHIubWFrZURhdGE9ZnVuY3Rpb24odCl7dmFyIGU9bi5saXN0KHtfZnVsbExheW91dDp0fSxcInhcIiwhMCkscj10Lm1hcmdpbixpPVtdO2lmKCF0Ll9oYXMoXCJnbDJkXCIpKWZvcih2YXIgcz0wO3M8ZS5sZW5ndGg7cysrKXt2YXIgbD1lW3NdO2lmKG8obCkpe2kucHVzaChsKTt2YXIgYz1sW2FdO2MuX2lkPWErbC5faWQsYy5faGVpZ2h0PSh0LmhlaWdodC1yLmItci50KSpjLnRoaWNrbmVzcyxjLl9vZmZzZXRTaGlmdD1NYXRoLmZsb29yKGMuYm9yZGVyd2lkdGgvMil9fXQuX3JhbmdlU2xpZGVyRGF0YT1pfSxyLmF1dG9NYXJnaW5PcHRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWVbYV0sbz0xLzAscz1lLl9jb3VudGVyQXhlcyxsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciBjPXNbbF0sdT1uLmdldEZyb21JZCh0LGMpO289TWF0aC5taW4obyx1LmRvbWFpblswXSl9ci5fb3BwQm90dG9tPW87dmFyIGg9XCJib3R0b21cIj09PWUuc2lkZSYmZS5fYm91bmRpbmdCb3guaGVpZ2h0fHwwO3JldHVybiByLl90aWNrSGVpZ2h0PWgse3g6MCx5Om8sbDowLHI6MCx0OjAsYjpyLl9oZWlnaHQrdC5fZnVsbExheW91dC5tYXJnaW4uYitoLHBhZDppLmV4dHJhUGFkKzIqci5fb2Zmc2V0U2hpZnR9fX0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCI6NzUyLFwiLi9jb25zdGFudHNcIjo2NDh9XSw2NTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vYXR0cmlidXRlc1wiKSxhPXQoXCIuL29wcGF4aXNfYXR0cmlidXRlc1wiKSxvPXQoXCIuL2hlbHBlcnNcIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwiY29tcG9uZW50XCIsbmFtZTpcInJhbmdlc2xpZGVyXCIsc2NoZW1hOntzdWJwbG90czp7eGF4aXM6e3Jhbmdlc2xpZGVyOm4uZXh0ZW5kRmxhdCh7fSxpLHt5YXhpczphfSl9fX0sbGF5b3V0QXR0cmlidXRlczp0KFwiLi9hdHRyaWJ1dGVzXCIpLGhhbmRsZURlZmF1bHRzOnQoXCIuL2RlZmF1bHRzXCIpLGNhbGNBdXRvcmFuZ2U6dChcIi4vY2FsY19hdXRvcmFuZ2VcIiksZHJhdzp0KFwiLi9kcmF3XCIpLGlzVmlzaWJsZTpvLmlzVmlzaWJsZSxtYWtlRGF0YTpvLm1ha2VEYXRhLGF1dG9NYXJnaW5PcHRzOm8uYXV0b01hcmdpbk9wdHN9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuL2F0dHJpYnV0ZXNcIjo2NDYsXCIuL2NhbGNfYXV0b3JhbmdlXCI6NjQ3LFwiLi9kZWZhdWx0c1wiOjY0OSxcIi4vZHJhd1wiOjY1MCxcIi4vaGVscGVyc1wiOjY1MSxcIi4vb3BwYXhpc19hdHRyaWJ1dGVzXCI6NjUzfV0sNjUzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtfaXNTdWJwbG90T2JqOiEwLHJhbmdlbW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYXV0b1wiLFwiZml4ZWRcIixcIm1hdGNoXCJdLGRmbHQ6XCJtYXRjaFwiLGVkaXRUeXBlOlwiY2FsY1wifSxyYW5nZTp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixpdGVtczpbe3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcInBsb3RcIn0se3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcInBsb3RcIn1dLGVkaXRUeXBlOlwicGxvdFwifSxlZGl0VHlwZTpcImNhbGNcIn19LHt9XSw2NTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vYW5ub3RhdGlvbnMvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzXCIpLmxpbmUsYT10KFwiLi4vZHJhd2luZy9hdHRyaWJ1dGVzXCIpLmRhc2gsbz10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LHM9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIikudGVtcGxhdGVkQXJyYXk7ZS5leHBvcnRzPXMoXCJzaGFwZVwiLHt2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSx0eXBlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJjaXJjbGVcIixcInJlY3RcIixcInBhdGhcIixcImxpbmVcIl0sZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSxsYXllcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYmVsb3dcIixcImFib3ZlXCJdLGRmbHQ6XCJhYm92ZVwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LHhyZWY6byh7fSxuLnhyZWYse30pLHhzaXplbW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wic2NhbGVkXCIsXCJwaXhlbFwiXSxkZmx0Olwic2NhbGVkXCIsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSx4YW5jaG9yOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSx4MDp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0seDE6e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LHlyZWY6byh7fSxuLnlyZWYse30pLHlzaXplbW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wic2NhbGVkXCIsXCJwaXhlbFwiXSxkZmx0Olwic2NhbGVkXCIsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSx5YW5jaG9yOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSx5MDp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0seTE6e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LHBhdGg6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LG9wYWNpdHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0sbGluZTp7Y29sb3I6byh7fSxpLmNvbG9yLHtlZGl0VHlwZTpcImFycmF5ZHJhd1wifSksd2lkdGg6byh7fSxpLndpZHRoLHtlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9KSxkYXNoOm8oe30sYSx7ZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0pLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0sZmlsbGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OlwicmdiYSgwLDAsMCwwKVwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9KX0se1wiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzXCI6MTA1MixcIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXNcIjo1NjEsXCIuLi9kcmF3aW5nL2F0dHJpYnV0ZXNcIjo1OTh9XSw2NTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGE9dChcIi4vY29uc3RhbnRzXCIpLG89dChcIi4vaGVscGVyc1wiKTtmdW5jdGlvbiBzKHQpe3JldHVybiBjKHQubGluZS53aWR0aCx0LnhzaXplbW9kZSx0LngwLHQueDEsdC5wYXRoLCExKX1mdW5jdGlvbiBsKHQpe3JldHVybiBjKHQubGluZS53aWR0aCx0LnlzaXplbW9kZSx0LnkwLHQueTEsdC5wYXRoLCEwKX1mdW5jdGlvbiBjKHQsZSxyLGkscyxsKXt2YXIgYz10LzIsdT1sO2lmKFwicGl4ZWxcIj09PWUpe3ZhciBoPXM/by5leHRyYWN0UGF0aENvb3JkcyhzLGw/YS5wYXJhbUlzWTphLnBhcmFtSXNYKTpbcixpXSxmPW4uYWdnTnVtcyhNYXRoLm1heCxudWxsLGgpLHA9bi5hZ2dOdW1zKE1hdGgubWluLG51bGwsaCksZD1wPDA/TWF0aC5hYnMocCkrYzpjLGc9Zj4wP2YrYzpjO3JldHVybntwcGFkOmMscHBhZHBsdXM6dT9kOmcscHBhZG1pbnVzOnU/ZzpkfX1yZXR1cm57cHBhZDpjfX1mdW5jdGlvbiB1KHQsZSxyLG4saSl7dmFyIHM9XCJjYXRlZ29yeVwiPT09dC50eXBlfHxcIm11bHRpY2F0ZWdvcnlcIj09PXQudHlwZT90LnIyYzp0LmQyYztpZih2b2lkIDAhPT1lKXJldHVybltzKGUpLHMocildO2lmKG4pe3ZhciBsLGMsdSxoLGY9MS8wLHA9LTEvMCxkPW4ubWF0Y2goYS5zZWdtZW50UkUpO2ZvcihcImRhdGVcIj09PXQudHlwZSYmKHM9by5kZWNvZGVEYXRlKHMpKSxsPTA7bDxkLmxlbmd0aDtsKyspdm9pZCAwIT09KGM9aVtkW2xdLmNoYXJBdCgwKV0uZHJhd24pJiYoISh1PWRbbF0uc3Vic3RyKDEpLm1hdGNoKGEucGFyYW1SRSkpfHx1Lmxlbmd0aDxjfHwoKGg9cyh1W2NdKSk8ZiYmKGY9aCksaD5wJiYocD1oKSkpO3JldHVybiBwPj1mP1tmLHBdOnZvaWQgMH19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1uLmZpbHRlclZpc2libGUoZS5zaGFwZXMpO2lmKHIubGVuZ3RoJiZ0Ll9mdWxsRGF0YS5sZW5ndGgpZm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspe3ZhciBjLGgsZj1yW29dO2lmKGYuX2V4dHJlbWVzPXt9LFwicGFwZXJcIiE9PWYueHJlZil7dmFyIHA9XCJwaXhlbFwiPT09Zi54c2l6ZW1vZGU/Zi54YW5jaG9yOmYueDAsZD1cInBpeGVsXCI9PT1mLnhzaXplbW9kZT9mLnhhbmNob3I6Zi54MTsoaD11KGM9aS5nZXRGcm9tSWQodCxmLnhyZWYpLHAsZCxmLnBhdGgsYS5wYXJhbUlzWCkpJiYoZi5fZXh0cmVtZXNbYy5faWRdPWkuZmluZEV4dHJlbWVzKGMsaCxzKGYpKSl9aWYoXCJwYXBlclwiIT09Zi55cmVmKXt2YXIgZz1cInBpeGVsXCI9PT1mLnlzaXplbW9kZT9mLnlhbmNob3I6Zi55MCx2PVwicGl4ZWxcIj09PWYueXNpemVtb2RlP2YueWFuY2hvcjpmLnkxOyhoPXUoYz1pLmdldEZyb21JZCh0LGYueXJlZiksZyx2LGYucGF0aCxhLnBhcmFtSXNZKSkmJihmLl9leHRyZW1lc1tjLl9pZF09aS5maW5kRXh0cmVtZXMoYyxoLGwoZikpKX19fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuL2NvbnN0YW50c1wiOjY1NixcIi4vaGVscGVyc1wiOjY1OX1dLDY1NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17c2VnbWVudFJFOi9bTUxIVlFDVFNaXVteTUxIVlFDVFNaXSovZyxwYXJhbVJFOi9bXlxccyxdKy9nLHBhcmFtSXNYOntNOnswOiEwLGRyYXduOjB9LEw6ezA6ITAsZHJhd246MH0sSDp7MDohMCxkcmF3bjowfSxWOnt9LFE6ezA6ITAsMjohMCxkcmF3bjoyfSxDOnswOiEwLDI6ITAsNDohMCxkcmF3bjo0fSxUOnswOiEwLGRyYXduOjB9LFM6ezA6ITAsMjohMCxkcmF3bjoyfSxaOnt9fSxwYXJhbUlzWTp7TTp7MTohMCxkcmF3bjoxfSxMOnsxOiEwLGRyYXduOjF9LEg6e30sVjp7MDohMCxkcmF3bjowfSxROnsxOiEwLDM6ITAsZHJhd246M30sQzp7MTohMCwzOiEwLDU6ITAsZHJhd246NX0sVDp7MTohMCxkcmF3bjoxfSxTOnsxOiEwLDM6ITAsZHJhd246NX0sWjp7fX0sbnVtUGFyYW1zOntNOjIsTDoyLEg6MSxWOjEsUTo0LEM6NixUOjIsUzo0LFo6MH19fSx7fV0sNjU3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxhPXQoXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIiksbz10KFwiLi9hdHRyaWJ1dGVzXCIpLHM9dChcIi4vaGVscGVyc1wiKTtmdW5jdGlvbiBsKHQsZSxyKXtmdW5jdGlvbiBhKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxvLHIsaSl9aWYoYShcInZpc2libGVcIikpe2EoXCJsYXllclwiKSxhKFwib3BhY2l0eVwiKSxhKFwiZmlsbGNvbG9yXCIpLGEoXCJsaW5lLmNvbG9yXCIpLGEoXCJsaW5lLndpZHRoXCIpLGEoXCJsaW5lLmRhc2hcIik7Zm9yKHZhciBsPWEoXCJ0eXBlXCIsdC5wYXRoP1wicGF0aFwiOlwicmVjdFwiKSxjPWEoXCJ4c2l6ZW1vZGVcIiksdT1hKFwieXNpemVtb2RlXCIpLGg9W1wieFwiLFwieVwiXSxmPTA7ZjwyO2YrKyl7dmFyIHAsZCxnLHY9aFtmXSxtPXYrXCJhbmNob3JcIix5PVwieFwiPT09dj9jOnUseD17X2Z1bGxMYXlvdXQ6cn0sYj1pLmNvZXJjZVJlZih0LGUseCx2LFwiXCIsXCJwYXBlclwiKTtpZihcInBhcGVyXCIhPT1iPygocD1pLmdldEZyb21JZCh4LGIpKS5fc2hhcGVJbmRpY2VzLnB1c2goZS5faW5kZXgpLGc9cy5yYW5nZVRvU2hhcGVQb3NpdGlvbihwKSxkPXMuc2hhcGVQb3NpdGlvblRvUmFuZ2UocCkpOmQ9Zz1uLmlkZW50aXR5LFwicGF0aFwiIT09bCl7dmFyIF89ditcIjBcIix3PXYrXCIxXCIsaz10W19dLEE9dFt3XTt0W19dPWQodFtfXSwhMCksdFt3XT1kKHRbd10sITApLFwicGl4ZWxcIj09PXk/KGEoXywwKSxhKHcsMTApKTooaS5jb2VyY2VQb3NpdGlvbihlLHgsYSxiLF8sLjI1KSxpLmNvZXJjZVBvc2l0aW9uKGUseCxhLGIsdywuNzUpKSxlW19dPWcoZVtfXSksZVt3XT1nKGVbd10pLHRbX109ayx0W3ddPUF9aWYoXCJwaXhlbFwiPT09eSl7dmFyIFQ9dFttXTt0W21dPWQodFttXSwhMCksaS5jb2VyY2VQb3NpdGlvbihlLHgsYSxiLG0sLjI1KSxlW21dPWcoZVttXSksdFttXT1UfX1cInBhdGhcIj09PWw/YShcInBhdGhcIik6bi5ub25lT3JBbGwodCxlLFtcIngwXCIsXCJ4MVwiLFwieTBcIixcInkxXCJdKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7YSh0LGUse25hbWU6XCJzaGFwZXNcIixoYW5kbGVJdGVtRGVmYXVsdHM6bH0pfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCI6NzQ1LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuL2F0dHJpYnV0ZXNcIjo2NTQsXCIuL2hlbHBlcnNcIjo2NTl9XSw2NTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLG89dChcIi4uL2NvbG9yXCIpLHM9dChcIi4uL2RyYXdpbmdcIiksbD10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKS5hcnJheUVkaXRvcixjPXQoXCIuLi9kcmFnZWxlbWVudFwiKSx1PXQoXCIuLi8uLi9saWIvc2V0Y3Vyc29yXCIpLGg9dChcIi4vY29uc3RhbnRzXCIpLGY9dChcIi4vaGVscGVyc1wiKTtmdW5jdGlvbiBwKHQsZSl7dC5fZnVsbExheW91dC5fcGFwZXJkaXYuc2VsZWN0QWxsKCcuc2hhcGVsYXllciBbZGF0YS1pbmRleD1cIicrZSsnXCJdJykucmVtb3ZlKCk7dmFyIHI9dC5fZnVsbExheW91dC5zaGFwZXNbZV18fHt9O2lmKHIuX2lucHV0JiYhMSE9PXIudmlzaWJsZSlpZihcImJlbG93XCIhPT1yLmxheWVyKW0odC5fZnVsbExheW91dC5fc2hhcGVVcHBlckxheWVyKTtlbHNlIGlmKFwicGFwZXJcIj09PXIueHJlZnx8XCJwYXBlclwiPT09ci55cmVmKW0odC5fZnVsbExheW91dC5fc2hhcGVMb3dlckxheWVyKTtlbHNle3ZhciBwPXQuX2Z1bGxMYXlvdXQuX3Bsb3RzW3IueHJlZityLnlyZWZdO2lmKHApbSgocC5tYWlucGxvdGluZm98fHApLnNoYXBlbGF5ZXIpO2Vsc2UgbSh0Ll9mdWxsTGF5b3V0Ll9zaGFwZUxvd2VyTGF5ZXIpfWZ1bmN0aW9uIG0ocCl7dmFyIG09e1wiZGF0YS1pbmRleFwiOmUsXCJmaWxsLXJ1bGVcIjpcImV2ZW5vZGRcIixkOmcodCxyKX0seT1yLmxpbmUud2lkdGg/ci5saW5lLmNvbG9yOlwicmdiYSgwLDAsMCwwKVwiLHg9cC5hcHBlbmQoXCJwYXRoXCIpLmF0dHIobSkuc3R5bGUoXCJvcGFjaXR5XCIsci5vcGFjaXR5KS5jYWxsKG8uc3Ryb2tlLHkpLmNhbGwoby5maWxsLHIuZmlsbGNvbG9yKS5jYWxsKHMuZGFzaExpbmUsci5saW5lLmRhc2gsci5saW5lLndpZHRoKTtkKHgsdCxyKSx0Ll9jb250ZXh0LmVkaXRzLnNoYXBlUG9zaXRpb24mJmZ1bmN0aW9uKHQsZSxyLG8scCl7dmFyIG0seSx4LGIsXyx3LGssQSxULE0sUyxFLEMsTCx6LE8sST0xMCxEPTEwLFA9XCJwaXhlbFwiPT09ci54c2l6ZW1vZGUsUj1cInBpeGVsXCI9PT1yLnlzaXplbW9kZSxGPVwibGluZVwiPT09ci50eXBlLEI9XCJwYXRoXCI9PT1yLnR5cGUsTj1sKHQubGF5b3V0LFwic2hhcGVzXCIsciksaj1OLm1vZGlmeUl0ZW0sVj1hLmdldEZyb21JZCh0LHIueHJlZiksVT1hLmdldEZyb21JZCh0LHIueXJlZikscT1mLmdldERhdGFUb1BpeGVsKHQsViksSD1mLmdldERhdGFUb1BpeGVsKHQsVSwhMCksRz1mLmdldFBpeGVsVG9EYXRhKHQsViksWT1mLmdldFBpeGVsVG9EYXRhKHQsVSwhMCksVz1GP2Z1bmN0aW9uKCl7dmFyIHQ9TWF0aC5tYXgoci5saW5lLndpZHRoLDEwKSxuPXAuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiZGF0YS1pbmRleFwiLG8pO24uYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLGUuYXR0cihcImRcIikpLnN0eWxlKHtjdXJzb3I6XCJtb3ZlXCIsXCJzdHJva2Utd2lkdGhcIjp0LFwic3Ryb2tlLW9wYWNpdHlcIjpcIjBcIn0pO3ZhciBpPXtcImZpbGwtb3BhY2l0eVwiOlwiMFwifSxhPXQvMj4xMD90LzI6MTA7cmV0dXJuIG4uYXBwZW5kKFwiY2lyY2xlXCIpLmF0dHIoe1wiZGF0YS1saW5lLXBvaW50XCI6XCJzdGFydC1wb2ludFwiLGN4OlA/cShyLnhhbmNob3IpK3IueDA6cShyLngwKSxjeTpSP0goci55YW5jaG9yKS1yLnkwOkgoci55MCkscjphfSkuc3R5bGUoaSkuY2xhc3NlZChcImN1cnNvci1ncmFiXCIsITApLG4uYXBwZW5kKFwiY2lyY2xlXCIpLmF0dHIoe1wiZGF0YS1saW5lLXBvaW50XCI6XCJlbmQtcG9pbnRcIixjeDpQP3Eoci54YW5jaG9yKStyLngxOnEoci54MSksY3k6Uj9IKHIueWFuY2hvciktci55MTpIKHIueTEpLHI6YX0pLnN0eWxlKGkpLmNsYXNzZWQoXCJjdXJzb3ItZ3JhYlwiLCEwKSxufSgpOmUsWD17ZWxlbWVudDpXLm5vZGUoKSxnZDp0LHByZXBGbjpmdW5jdGlvbihuKXtQJiYoXz1xKHIueGFuY2hvcikpO1ImJih3PUgoci55YW5jaG9yKSk7XCJwYXRoXCI9PT1yLnR5cGU/ej1yLnBhdGg6KG09UD9yLngwOnEoci54MCkseT1SP3IueTA6SChyLnkwKSx4PVA/ci54MTpxKHIueDEpLGI9Uj9yLnkxOkgoci55MSkpO208eD8oVD1tLEM9XCJ4MFwiLE09eCxMPVwieDFcIik6KFQ9eCxDPVwieDFcIixNPW0sTD1cIngwXCIpOyFSJiZ5PGJ8fFImJnk+Yj8oaz15LFM9XCJ5MFwiLEE9YixFPVwieTFcIik6KGs9YixTPVwieTFcIixBPXksRT1cInkwXCIpO1oobiksSyhwLHIpLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLnhyZWYsaT1lLnlyZWYsbz1hLmdldEZyb21JZChyLG4pLGw9YS5nZXRGcm9tSWQocixpKSxjPVwiXCI7XCJwYXBlclwiPT09bnx8by5hdXRvcmFuZ2V8fChjKz1uKTtcInBhcGVyXCI9PT1pfHxsLmF1dG9yYW5nZXx8KGMrPWkpO3Muc2V0Q2xpcFVybCh0LGM/XCJjbGlwXCIrci5fZnVsbExheW91dC5fdWlkK2M6bnVsbCxyKX0oZSxyLHQpLFgubW92ZUZuPVwibW92ZVwiPT09Tz8kOkp9LGRvbmVGbjpmdW5jdGlvbigpe3UoZSksUShwKSxkKGUsdCxyKSxuLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix0LE4uZ2V0VXBkYXRlT2JqKCkpfSxjbGlja0ZuOmZ1bmN0aW9uKCl7UShwKX19O2Z1bmN0aW9uIFoodCl7aWYoRilPPVwicGF0aFwiPT09dC50YXJnZXQudGFnTmFtZT9cIm1vdmVcIjpcInN0YXJ0LXBvaW50XCI9PT10LnRhcmdldC5hdHRyaWJ1dGVzW1wiZGF0YS1saW5lLXBvaW50XCJdLnZhbHVlP1wicmVzaXplLW92ZXItc3RhcnQtcG9pbnRcIjpcInJlc2l6ZS1vdmVyLWVuZC1wb2ludFwiO2Vsc2V7dmFyIHI9WC5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci5yaWdodC1yLmxlZnQsaT1yLmJvdHRvbS1yLnRvcCxhPXQuY2xpZW50WC1yLmxlZnQsbz10LmNsaWVudFktci50b3Ascz0hQiYmbj5JJiZpPkQmJiF0LnNoaWZ0S2V5P2MuZ2V0Q3Vyc29yKGEvbiwxLW8vaSk6XCJtb3ZlXCI7dShlLHMpLE89cy5zcGxpdChcIi1cIilbMF19fWZ1bmN0aW9uICQobixpKXtpZihcInBhdGhcIj09PXIudHlwZSl7dmFyIGE9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LG89YSxzPWE7UD9qKFwieGFuY2hvclwiLHIueGFuY2hvcj1HKF8rbikpOihvPWZ1bmN0aW9uKHQpe3JldHVybiBHKHEodCkrbil9LFYmJlwiZGF0ZVwiPT09Vi50eXBlJiYobz1mLmVuY29kZURhdGUobykpKSxSP2ooXCJ5YW5jaG9yXCIsci55YW5jaG9yPVkodytpKSk6KHM9ZnVuY3Rpb24odCl7cmV0dXJuIFkoSCh0KStpKX0sVSYmXCJkYXRlXCI9PT1VLnR5cGUmJihzPWYuZW5jb2RlRGF0ZShzKSkpLGooXCJwYXRoXCIsci5wYXRoPXYoeixvLHMpKX1lbHNlIFA/aihcInhhbmNob3JcIixyLnhhbmNob3I9RyhfK24pKTooaihcIngwXCIsci54MD1HKG0rbikpLGooXCJ4MVwiLHIueDE9Ryh4K24pKSksUj9qKFwieWFuY2hvclwiLHIueWFuY2hvcj1ZKHcraSkpOihqKFwieTBcIixyLnkwPVkoeStpKSksaihcInkxXCIsci55MT1ZKGIraSkpKTtlLmF0dHIoXCJkXCIsZyh0LHIpKSxLKHAscil9ZnVuY3Rpb24gSihuLGkpe2lmKEIpe3ZhciBhPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxvPWEscz1hO1A/aihcInhhbmNob3JcIixyLnhhbmNob3I9RyhfK24pKToobz1mdW5jdGlvbih0KXtyZXR1cm4gRyhxKHQpK24pfSxWJiZcImRhdGVcIj09PVYudHlwZSYmKG89Zi5lbmNvZGVEYXRlKG8pKSksUj9qKFwieWFuY2hvclwiLHIueWFuY2hvcj1ZKHcraSkpOihzPWZ1bmN0aW9uKHQpe3JldHVybiBZKEgodCkraSl9LFUmJlwiZGF0ZVwiPT09VS50eXBlJiYocz1mLmVuY29kZURhdGUocykpKSxqKFwicGF0aFwiLHIucGF0aD12KHosbyxzKSl9ZWxzZSBpZihGKXtpZihcInJlc2l6ZS1vdmVyLXN0YXJ0LXBvaW50XCI9PT1PKXt2YXIgbD1tK24sYz1SP3ktaTp5K2k7aihcIngwXCIsci54MD1QP2w6RyhsKSksaihcInkwXCIsci55MD1SP2M6WShjKSl9ZWxzZSBpZihcInJlc2l6ZS1vdmVyLWVuZC1wb2ludFwiPT09Tyl7dmFyIHU9eCtuLGg9Uj9iLWk6YitpO2ooXCJ4MVwiLHIueDE9UD91OkcodSkpLGooXCJ5MVwiLHIueTE9Uj9oOlkoaCkpfX1lbHNle3ZhciBkPX5PLmluZGV4T2YoXCJuXCIpP2sraTprLE49fk8uaW5kZXhPZihcInNcIik/QStpOkEsVz1+Ty5pbmRleE9mKFwid1wiKT9UK246VCxYPX5PLmluZGV4T2YoXCJlXCIpP00rbjpNO35PLmluZGV4T2YoXCJuXCIpJiZSJiYoZD1rLWkpLH5PLmluZGV4T2YoXCJzXCIpJiZSJiYoTj1BLWkpLCghUiYmTi1kPkR8fFImJmQtTj5EKSYmKGooUyxyW1NdPVI/ZDpZKGQpKSxqKEUscltFXT1SP046WShOKSkpLFgtVz5JJiYoaihDLHJbQ109UD9XOkcoVykpLGooTCxyW0xdPVA/WDpHKFgpKSl9ZS5hdHRyKFwiZFwiLGcodCxyKSksSyhwLHIpfWZ1bmN0aW9uIEsodCxlKXsoUHx8UikmJmZ1bmN0aW9uKCl7dmFyIHI9XCJwYXRoXCIhPT1lLnR5cGUsbj10LnNlbGVjdEFsbChcIi52aXN1YWwtY3VlXCIpLmRhdGEoWzBdKTtuLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5hdHRyKHtmaWxsOlwiI2ZmZlwiLFwiZmlsbC1ydWxlXCI6XCJldmVub2RkXCIsc3Ryb2tlOlwiIzAwMFwiLFwic3Ryb2tlLXdpZHRoXCI6MX0pLmNsYXNzZWQoXCJ2aXN1YWwtY3VlXCIsITApO3ZhciBhPXEoUD9lLnhhbmNob3I6aS5taWRSYW5nZShyP1tlLngwLGUueDFdOmYuZXh0cmFjdFBhdGhDb29yZHMoZS5wYXRoLGgucGFyYW1Jc1gpKSksbz1IKFI/ZS55YW5jaG9yOmkubWlkUmFuZ2Uocj9bZS55MCxlLnkxXTpmLmV4dHJhY3RQYXRoQ29vcmRzKGUucGF0aCxoLnBhcmFtSXNZKSkpO2lmKGE9Zi5yb3VuZFBvc2l0aW9uRm9yU2hhcnBTdHJva2VSZW5kZXJpbmcoYSwxKSxvPWYucm91bmRQb3NpdGlvbkZvclNoYXJwU3Ryb2tlUmVuZGVyaW5nKG8sMSksUCYmUil7dmFyIHM9XCJNXCIrKGEtMS0xKStcIixcIisoby0xLTEpK1wiaC04djJoOCB2OGgydi04IGg4di0yaC04IHYtOGgtMiBaXCI7bi5hdHRyKFwiZFwiLHMpfWVsc2UgaWYoUCl7dmFyIGw9XCJNXCIrKGEtMS0xKStcIixcIisoby05LTEpK1widjE4IGgyIHYtMTggWlwiO24uYXR0cihcImRcIixsKX1lbHNle3ZhciBjPVwiTVwiKyhhLTktMSkrXCIsXCIrKG8tMS0xKStcImgxOCB2MiBoLTE4IFpcIjtuLmF0dHIoXCJkXCIsYyl9fSgpfWZ1bmN0aW9uIFEodCl7dC5zZWxlY3RBbGwoXCIudmlzdWFsLWN1ZVwiKS5yZW1vdmUoKX1jLmluaXQoWCksVy5ub2RlKCkub25tb3VzZW1vdmU9Wn0odCx4LHIsZSxwKX19ZnVuY3Rpb24gZCh0LGUscil7dmFyIG49KHIueHJlZityLnlyZWYpLnJlcGxhY2UoL3BhcGVyL2csXCJcIik7cy5zZXRDbGlwVXJsKHQsbj9cImNsaXBcIitlLl9mdWxsTGF5b3V0Ll91aWQrbjpudWxsLGUpfWZ1bmN0aW9uIGcodCxlKXt2YXIgcixuLG8scyxsLGMsdSxwLGQ9ZS50eXBlLGc9YS5nZXRGcm9tSWQodCxlLnhyZWYpLHY9YS5nZXRGcm9tSWQodCxlLnlyZWYpLG09dC5fZnVsbExheW91dC5fc2l6ZTtpZihnPyhyPWYuc2hhcGVQb3NpdGlvblRvUmFuZ2UoZyksbj1mdW5jdGlvbih0KXtyZXR1cm4gZy5fb2Zmc2V0K2cucjJwKHIodCwhMCkpfSk6bj1mdW5jdGlvbih0KXtyZXR1cm4gbS5sK20udyp0fSx2PyhvPWYuc2hhcGVQb3NpdGlvblRvUmFuZ2Uodikscz1mdW5jdGlvbih0KXtyZXR1cm4gdi5fb2Zmc2V0K3YucjJwKG8odCwhMCkpfSk6cz1mdW5jdGlvbih0KXtyZXR1cm4gbS50K20uaCooMS10KX0sXCJwYXRoXCI9PT1kKXJldHVybiBnJiZcImRhdGVcIj09PWcudHlwZSYmKG49Zi5kZWNvZGVEYXRlKG4pKSx2JiZcImRhdGVcIj09PXYudHlwZSYmKHM9Zi5kZWNvZGVEYXRlKHMpKSxmdW5jdGlvbih0LGUscil7dmFyIG49dC5wYXRoLGE9dC54c2l6ZW1vZGUsbz10LnlzaXplbW9kZSxzPXQueGFuY2hvcixsPXQueWFuY2hvcjtyZXR1cm4gbi5yZXBsYWNlKGguc2VnbWVudFJFLGZ1bmN0aW9uKHQpe3ZhciBuPTAsYz10LmNoYXJBdCgwKSx1PWgucGFyYW1Jc1hbY10sZj1oLnBhcmFtSXNZW2NdLHA9aC5udW1QYXJhbXNbY10sZD10LnN1YnN0cigxKS5yZXBsYWNlKGgucGFyYW1SRSxmdW5jdGlvbih0KXtyZXR1cm4gdVtuXT90PVwicGl4ZWxcIj09PWE/ZShzKStOdW1iZXIodCk6ZSh0KTpmW25dJiYodD1cInBpeGVsXCI9PT1vP3IobCktTnVtYmVyKHQpOnIodCkpLCsrbj5wJiYodD1cIlhcIiksdH0pO3JldHVybiBuPnAmJihkPWQucmVwbGFjZSgvW1xccyxdKlguKi8sXCJcIiksaS5sb2coXCJJZ25vcmluZyBleHRyYSBwYXJhbXMgaW4gc2VnbWVudCBcIit0KSksYytkfSl9KGUsbixzKTtpZihcInBpeGVsXCI9PT1lLnhzaXplbW9kZSl7dmFyIHk9bihlLnhhbmNob3IpO2w9eStlLngwLGM9eStlLngxfWVsc2UgbD1uKGUueDApLGM9bihlLngxKTtpZihcInBpeGVsXCI9PT1lLnlzaXplbW9kZSl7dmFyIHg9cyhlLnlhbmNob3IpO3U9eC1lLnkwLHA9eC1lLnkxfWVsc2UgdT1zKGUueTApLHA9cyhlLnkxKTtpZihcImxpbmVcIj09PWQpcmV0dXJuXCJNXCIrbCtcIixcIit1K1wiTFwiK2MrXCIsXCIrcDtpZihcInJlY3RcIj09PWQpcmV0dXJuXCJNXCIrbCtcIixcIit1K1wiSFwiK2MrXCJWXCIrcCtcIkhcIitsK1wiWlwiO3ZhciBiPShsK2MpLzIsXz0odStwKS8yLHc9TWF0aC5hYnMoYi1sKSxrPU1hdGguYWJzKF8tdSksQT1cIkFcIit3K1wiLFwiK2ssVD1iK3crXCIsXCIrXztyZXR1cm5cIk1cIitUK0ErXCIgMCAxLDEgXCIrKGIrXCIsXCIrKF8taykpK0ErXCIgMCAwLDEgXCIrVCtcIlpcIn1mdW5jdGlvbiB2KHQsZSxyKXtyZXR1cm4gdC5yZXBsYWNlKGguc2VnbWVudFJFLGZ1bmN0aW9uKHQpe3ZhciBuPTAsaT10LmNoYXJBdCgwKSxhPWgucGFyYW1Jc1hbaV0sbz1oLnBhcmFtSXNZW2ldLHM9aC5udW1QYXJhbXNbaV07cmV0dXJuIGkrdC5zdWJzdHIoMSkucmVwbGFjZShoLnBhcmFtUkUsZnVuY3Rpb24odCl7cmV0dXJuIG4+PXM/dDooYVtuXT90PWUodCk6b1tuXSYmKHQ9cih0KSksbisrLHQpfSl9KX1lLmV4cG9ydHM9e2RyYXc6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtmb3IodmFyIHIgaW4gZS5fc2hhcGVVcHBlckxheWVyLnNlbGVjdEFsbChcInBhdGhcIikucmVtb3ZlKCksZS5fc2hhcGVMb3dlckxheWVyLnNlbGVjdEFsbChcInBhdGhcIikucmVtb3ZlKCksZS5fcGxvdHMpe3ZhciBuPWUuX3Bsb3RzW3JdLnNoYXBlbGF5ZXI7biYmbi5zZWxlY3RBbGwoXCJwYXRoXCIpLnJlbW92ZSgpfWZvcih2YXIgaT0wO2k8ZS5zaGFwZXMubGVuZ3RoO2krKyllLnNoYXBlc1tpXS52aXNpYmxlJiZwKHQsaSl9LGRyYXdPbmU6cH19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9zZXRjdXJzb3JcIjo3MjEsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL2NvbG9yXCI6NTc4LFwiLi4vZHJhZ2VsZW1lbnRcIjo1OTYsXCIuLi9kcmF3aW5nXCI6NTk5LFwiLi9jb25zdGFudHNcIjo2NTYsXCIuL2hlbHBlcnNcIjo2NTl9XSw2NTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9jb25zdGFudHNcIiksaT10KFwiLi4vLi4vbGliXCIpO3IucmFuZ2VUb1NoYXBlUG9zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuXCJsb2dcIj09PXQudHlwZT90LnIyZDpmdW5jdGlvbih0KXtyZXR1cm4gdH19LHIuc2hhcGVQb3NpdGlvblRvUmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuXCJsb2dcIj09PXQudHlwZT90LmQycjpmdW5jdGlvbih0KXtyZXR1cm4gdH19LHIuZGVjb2RlRGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSYmKGU9ZS5yZXBsYWNlKFwiX1wiLFwiIFwiKSksdChlKX19LHIuZW5jb2RlRGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkucmVwbGFjZShcIiBcIixcIl9cIil9fSxyLmV4dHJhY3RQYXRoQ29vcmRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107cmV0dXJuIHQubWF0Y2gobi5zZWdtZW50UkUpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGE9ZVt0LmNoYXJBdCgwKV0uZHJhd247aWYodm9pZCAwIT09YSl7dmFyIG89dC5zdWJzdHIoMSkubWF0Y2gobi5wYXJhbVJFKTshb3x8by5sZW5ndGg8YXx8ci5wdXNoKGkuY2xlYW5OdW1iZXIob1thXSkpfX0pLHJ9LHIuZ2V0RGF0YVRvUGl4ZWw9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGE9dC5fZnVsbExheW91dC5fc2l6ZTtpZihlKXt2YXIgbz1yLnNoYXBlUG9zaXRpb25Ub1JhbmdlKGUpO2k9ZnVuY3Rpb24odCl7cmV0dXJuIGUuX29mZnNldCtlLnIycChvKHQsITApKX0sXCJkYXRlXCI9PT1lLnR5cGUmJihpPXIuZGVjb2RlRGF0ZShpKSl9ZWxzZSBpPW4/ZnVuY3Rpb24odCl7cmV0dXJuIGEudCthLmgqKDEtdCl9OmZ1bmN0aW9uKHQpe3JldHVybiBhLmwrYS53KnR9O3JldHVybiBpfSxyLmdldFBpeGVsVG9EYXRhPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhPXQuX2Z1bGxMYXlvdXQuX3NpemU7aWYoZSl7dmFyIG89ci5yYW5nZVRvU2hhcGVQb3NpdGlvbihlKTtpPWZ1bmN0aW9uKHQpe3JldHVybiBvKGUucDJyKHQtZS5fb2Zmc2V0KSl9fWVsc2UgaT1uP2Z1bmN0aW9uKHQpe3JldHVybiAxLSh0LWEudCkvYS5ofTpmdW5jdGlvbih0KXtyZXR1cm4odC1hLmwpL2Eud307cmV0dXJuIGl9LHIucm91bmRQb3NpdGlvbkZvclNoYXJwU3Ryb2tlUmVuZGVyaW5nPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MT09PU1hdGgucm91bmQoZSUyKSxuPU1hdGgucm91bmQodCk7cmV0dXJuIHI/bisuNTpufX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi9jb25zdGFudHNcIjo2NTZ9XSw2NjA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9kcmF3XCIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZTpcImNvbXBvbmVudFwiLG5hbWU6XCJzaGFwZXNcIixsYXlvdXRBdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIiksaW5jbHVkZUJhc2VQbG90OnQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzXCIpKFwic2hhcGVzXCIpLGNhbGNBdXRvcmFuZ2U6dChcIi4vY2FsY19hdXRvcmFuZ2VcIiksZHJhdzpuLmRyYXcsZHJhd09uZTpuLmRyYXdPbmV9fSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzXCI6NzU5LFwiLi9hdHRyaWJ1dGVzXCI6NjU0LFwiLi9jYWxjX2F1dG9yYW5nZVwiOjY1NSxcIi4vZGVmYXVsdHNcIjo2NTcsXCIuL2RyYXdcIjo2NTh9XSw2NjE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL3Bsb3RzL3BhZF9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRGVlcEFsbCxvPXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsLHM9dChcIi4uLy4uL3Bsb3RzL2FuaW1hdGlvbl9hdHRyaWJ1dGVzXCIpLGw9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIikudGVtcGxhdGVkQXJyYXksYz10KFwiLi9jb25zdGFudHNcIiksdT1sKFwic3RlcFwiLHt2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITB9LG1ldGhvZDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wicmVzdHlsZVwiLFwicmVsYXlvdXRcIixcImFuaW1hdGVcIixcInVwZGF0ZVwiLFwic2tpcFwiXSxkZmx0OlwicmVzdHlsZVwifSxhcmdzOnt2YWxUeXBlOlwiaW5mb19hcnJheVwiLGZyZWVMZW5ndGg6ITAsaXRlbXM6W3t2YWxUeXBlOlwiYW55XCJ9LHt2YWxUeXBlOlwiYW55XCJ9LHt2YWxUeXBlOlwiYW55XCJ9XX0sbGFiZWw6e3ZhbFR5cGU6XCJzdHJpbmdcIn0sdmFsdWU6e3ZhbFR5cGU6XCJzdHJpbmdcIn0sZXhlY3V0ZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfX0pO2UuZXhwb3J0cz1vKGwoXCJzbGlkZXJcIix7dmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfSxhY3RpdmU6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjB9LHN0ZXBzOnUsbGVubW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiZnJhY3Rpb25cIixcInBpeGVsc1wiXSxkZmx0OlwiZnJhY3Rpb25cIn0sbGVuOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxfSx4Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOi0yLG1heDozLGRmbHQ6MH0scGFkOmEoaSh7ZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0pLHt9LHt0OntkZmx0OjIwfX0pLHhhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImF1dG9cIixcImxlZnRcIixcImNlbnRlclwiLFwicmlnaHRcIl0sZGZsdDpcImxlZnRcIn0seTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjotMixtYXg6MyxkZmx0OjB9LHlhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImF1dG9cIixcInRvcFwiLFwibWlkZGxlXCIsXCJib3R0b21cIl0sZGZsdDpcInRvcFwifSx0cmFuc2l0aW9uOntkdXJhdGlvbjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MTUwfSxlYXNpbmc6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOnMudHJhbnNpdGlvbi5lYXNpbmcudmFsdWVzLGRmbHQ6XCJjdWJpYy1pbi1vdXRcIn19LGN1cnJlbnR2YWx1ZTp7dmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfSx4YW5jaG9yOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJsZWZ0XCIsXCJjZW50ZXJcIixcInJpZ2h0XCJdLGRmbHQ6XCJsZWZ0XCJ9LG9mZnNldDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MTB9LHByZWZpeDp7dmFsVHlwZTpcInN0cmluZ1wifSxzdWZmaXg6e3ZhbFR5cGU6XCJzdHJpbmdcIn0sZm9udDpuKHt9KX0sZm9udDpuKHt9KSxhY3RpdmViZ2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmMuZ3JpcEJnQWN0aXZlQ29sb3J9LGJnY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6Yy5yYWlsQmdDb2xvcn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6Yy5yYWlsQm9yZGVyQ29sb3J9LGJvcmRlcndpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDpjLnJhaWxCb3JkZXJXaWR0aH0sdGlja2xlbjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6Yy50aWNrTGVuZ3RofSx0aWNrY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6Yy50aWNrQ29sb3J9LHRpY2t3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MX0sbWlub3J0aWNrbGVuOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDpjLm1pbm9yVGlja0xlbmd0aH19KSxcImFycmF5ZHJhd1wiLFwiZnJvbS1yb290XCIpfSx7XCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi9wbG90cy9hbmltYXRpb25fYXR0cmlidXRlc1wiOjc0NCxcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiOjc3NSxcIi4uLy4uL3Bsb3RzL3BhZF9hdHRyaWJ1dGVzXCI6ODA5LFwiLi9jb25zdGFudHNcIjo2NjJ9XSw2NjI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e25hbWU6XCJzbGlkZXJzXCIsY29udGFpbmVyQ2xhc3NOYW1lOlwic2xpZGVyLWNvbnRhaW5lclwiLGdyb3VwQ2xhc3NOYW1lOlwic2xpZGVyLWdyb3VwXCIsaW5wdXRBcmVhQ2xhc3M6XCJzbGlkZXItaW5wdXQtYXJlYVwiLHJhaWxSZWN0Q2xhc3M6XCJzbGlkZXItcmFpbC1yZWN0XCIscmFpbFRvdWNoUmVjdENsYXNzOlwic2xpZGVyLXJhaWwtdG91Y2gtcmVjdFwiLGdyaXBSZWN0Q2xhc3M6XCJzbGlkZXItZ3JpcC1yZWN0XCIsdGlja1JlY3RDbGFzczpcInNsaWRlci10aWNrLXJlY3RcIixpbnB1dFByb3h5Q2xhc3M6XCJzbGlkZXItaW5wdXQtcHJveHlcIixsYWJlbHNDbGFzczpcInNsaWRlci1sYWJlbHNcIixsYWJlbEdyb3VwQ2xhc3M6XCJzbGlkZXItbGFiZWwtZ3JvdXBcIixsYWJlbENsYXNzOlwic2xpZGVyLWxhYmVsXCIsY3VycmVudFZhbHVlQ2xhc3M6XCJzbGlkZXItY3VycmVudC12YWx1ZVwiLHJhaWxIZWlnaHQ6NSxtZW51SW5kZXhBdHRyTmFtZTpcInNsaWRlci1hY3RpdmUtaW5kZXhcIixhdXRvTWFyZ2luSWRSb290Olwic2xpZGVyLVwiLG1pbldpZHRoOjMwLG1pbkhlaWdodDozMCx0ZXh0UGFkWDo0MCxhcnJvd09mZnNldFg6NCxyYWlsUmFkaXVzOjIscmFpbFdpZHRoOjUscmFpbEJvcmRlcjo0LHJhaWxCb3JkZXJXaWR0aDoxLHJhaWxCb3JkZXJDb2xvcjpcIiNiZWM4ZDlcIixyYWlsQmdDb2xvcjpcIiNmOGZhZmNcIixyYWlsSW5zZXQ6OCxzdGVwSW5zZXQ6MTAsZ3JpcFJhZGl1czoxMCxncmlwV2lkdGg6MjAsZ3JpcEhlaWdodDoyMCxncmlwQm9yZGVyOjIwLGdyaXBCb3JkZXJXaWR0aDoxLGdyaXBCb3JkZXJDb2xvcjpcIiNiZWM4ZDlcIixncmlwQmdDb2xvcjpcIiNmNmY4ZmFcIixncmlwQmdBY3RpdmVDb2xvcjpcIiNkYmRkZTBcIixsYWJlbFBhZGRpbmc6OCxsYWJlbE9mZnNldDowLHRpY2tXaWR0aDoxLHRpY2tDb2xvcjpcIiMzMzNcIix0aWNrT2Zmc2V0OjI1LHRpY2tMZW5ndGg6NyxtaW5vclRpY2tPZmZzZXQ6MjUsbWlub3JUaWNrQ29sb3I6XCIjMzMzXCIsbWlub3JUaWNrTGVuZ3RoOjQsY3VycmVudFZhbHVlUGFkZGluZzo4LGN1cnJlbnRWYWx1ZUluc2V0OjB9fSx7fV0sNjYzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIiksYT10KFwiLi9hdHRyaWJ1dGVzXCIpLG89dChcIi4vY29uc3RhbnRzXCIpLm5hbWUscz1hLnN0ZXBzO2Z1bmN0aW9uIGwodCxlLHIpe2Z1bmN0aW9uIG8ocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX1mb3IodmFyIHM9aSh0LGUse25hbWU6XCJzdGVwc1wiLGhhbmRsZUl0ZW1EZWZhdWx0czpjfSksbD0wLHU9MDt1PHMubGVuZ3RoO3UrKylzW3VdLnZpc2libGUmJmwrKztpZihsPDI/ZS52aXNpYmxlPSExOm8oXCJ2aXNpYmxlXCIpKXtlLl9zdGVwQ291bnQ9bDt2YXIgaD1lLl92aXNpYmxlU3RlcHM9bi5maWx0ZXJWaXNpYmxlKHMpOyhzW28oXCJhY3RpdmVcIildfHx7fSkudmlzaWJsZXx8KGUuYWN0aXZlPWhbMF0uX2luZGV4KSxvKFwieFwiKSxvKFwieVwiKSxuLm5vbmVPckFsbCh0LGUsW1wieFwiLFwieVwiXSksbyhcInhhbmNob3JcIiksbyhcInlhbmNob3JcIiksbyhcImxlblwiKSxvKFwibGVubW9kZVwiKSxvKFwicGFkLnRcIiksbyhcInBhZC5yXCIpLG8oXCJwYWQuYlwiKSxvKFwicGFkLmxcIiksbi5jb2VyY2VGb250KG8sXCJmb250XCIsci5mb250KSxvKFwiY3VycmVudHZhbHVlLnZpc2libGVcIikmJihvKFwiY3VycmVudHZhbHVlLnhhbmNob3JcIiksbyhcImN1cnJlbnR2YWx1ZS5wcmVmaXhcIiksbyhcImN1cnJlbnR2YWx1ZS5zdWZmaXhcIiksbyhcImN1cnJlbnR2YWx1ZS5vZmZzZXRcIiksbi5jb2VyY2VGb250KG8sXCJjdXJyZW50dmFsdWUuZm9udFwiLGUuZm9udCkpLG8oXCJ0cmFuc2l0aW9uLmR1cmF0aW9uXCIpLG8oXCJ0cmFuc2l0aW9uLmVhc2luZ1wiKSxvKFwiYmdjb2xvclwiKSxvKFwiYWN0aXZlYmdjb2xvclwiKSxvKFwiYm9yZGVyY29sb3JcIiksbyhcImJvcmRlcndpZHRoXCIpLG8oXCJ0aWNrbGVuXCIpLG8oXCJ0aWNrd2lkdGhcIiksbyhcInRpY2tjb2xvclwiKSxvKFwibWlub3J0aWNrbGVuXCIpfX1mdW5jdGlvbiBjKHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfWlmKFwic2tpcFwiPT09dC5tZXRob2R8fEFycmF5LmlzQXJyYXkodC5hcmdzKT9yKFwidmlzaWJsZVwiKTplLnZpc2libGU9ITEpe3IoXCJtZXRob2RcIikscihcImFyZ3NcIik7dmFyIGk9cihcImxhYmVsXCIsXCJzdGVwLVwiK2UuX2luZGV4KTtyKFwidmFsdWVcIixpKSxyKFwiZXhlY3V0ZVwiKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aSh0LGUse25hbWU6byxoYW5kbGVJdGVtRGVmYXVsdHM6bH0pfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCI6NzQ1LFwiLi9hdHRyaWJ1dGVzXCI6NjYxLFwiLi9jb25zdGFudHNcIjo2NjJ9XSw2NjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vcGxvdHMvcGxvdHNcIiksYT10KFwiLi4vY29sb3JcIiksbz10KFwiLi4vZHJhd2luZ1wiKSxzPXQoXCIuLi8uLi9saWJcIiksbD10KFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCIpLGM9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIikuYXJyYXlFZGl0b3IsdT10KFwiLi9jb25zdGFudHNcIiksaD10KFwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiKSxmPWguTElORV9TUEFDSU5HLHA9aC5GUk9NX1RMLGQ9aC5GUk9NX0JSO2Z1bmN0aW9uIGcodCl7cmV0dXJuIHUuYXV0b01hcmdpbklkUm9vdCt0Ll9pbmRleH1mdW5jdGlvbiB2KHQpe3JldHVybiB0Ll9pbmRleH1mdW5jdGlvbiBtKHQsZSl7dmFyIHI9by50ZXN0ZXIuc2VsZWN0QWxsKFwiZy5cIit1LmxhYmVsR3JvdXBDbGFzcykuZGF0YShlLl92aXNpYmxlU3RlcHMpO3IuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQodS5sYWJlbEdyb3VwQ2xhc3MsITApO3ZhciBhPTAsYz0wO3IuZWFjaChmdW5jdGlvbih0KXt2YXIgcj1iKG4uc2VsZWN0KHRoaXMpLHtzdGVwOnR9LGUpLm5vZGUoKTtpZihyKXt2YXIgaT1vLmJCb3gocik7Yz1NYXRoLm1heChjLGkuaGVpZ2h0KSxhPU1hdGgubWF4KGEsaS53aWR0aCl9fSksci5yZW1vdmUoKTt2YXIgaD1lLl9kaW1zPXt9O2guaW5wdXRBcmVhV2lkdGg9TWF0aC5tYXgodS5yYWlsV2lkdGgsdS5ncmlwSGVpZ2h0KTt2YXIgZj10Ll9mdWxsTGF5b3V0Ll9zaXplO2gubHg9Zi5sK2YudyplLngsaC5seT1mLnQrZi5oKigxLWUueSksXCJmcmFjdGlvblwiPT09ZS5sZW5tb2RlP2gub3V0ZXJMZW5ndGg9TWF0aC5yb3VuZChmLncqZS5sZW4pOmgub3V0ZXJMZW5ndGg9ZS5sZW4saC5pbnB1dEFyZWFTdGFydD0wLGguaW5wdXRBcmVhTGVuZ3RoPU1hdGgucm91bmQoaC5vdXRlckxlbmd0aC1lLnBhZC5sLWUucGFkLnIpO3ZhciB2PShoLmlucHV0QXJlYUxlbmd0aC0yKnUuc3RlcEluc2V0KS8oZS5fc3RlcENvdW50LTEpLG09YSt1LmxhYmVsUGFkZGluZztpZihoLmxhYmVsU3RyaWRlPU1hdGgubWF4KDEsTWF0aC5jZWlsKG0vdikpLGgubGFiZWxIZWlnaHQ9YyxoLmN1cnJlbnRWYWx1ZU1heFdpZHRoPTAsaC5jdXJyZW50VmFsdWVIZWlnaHQ9MCxoLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0PTAsaC5jdXJyZW50VmFsdWVNYXhMaW5lcz0xLGUuY3VycmVudHZhbHVlLnZpc2libGUpe3ZhciB4PW8udGVzdGVyLmFwcGVuZChcImdcIik7ci5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPXkoeCxlLHQubGFiZWwpLG49ci5ub2RlKCkmJm8uYkJveChyLm5vZGUoKSl8fHt3aWR0aDowLGhlaWdodDowfSxpPWwubGluZUNvdW50KHIpO2guY3VycmVudFZhbHVlTWF4V2lkdGg9TWF0aC5tYXgoaC5jdXJyZW50VmFsdWVNYXhXaWR0aCxNYXRoLmNlaWwobi53aWR0aCkpLGguY3VycmVudFZhbHVlSGVpZ2h0PU1hdGgubWF4KGguY3VycmVudFZhbHVlSGVpZ2h0LE1hdGguY2VpbChuLmhlaWdodCkpLGguY3VycmVudFZhbHVlTWF4TGluZXM9TWF0aC5tYXgoaC5jdXJyZW50VmFsdWVNYXhMaW5lcyxpKX0pLGguY3VycmVudFZhbHVlVG90YWxIZWlnaHQ9aC5jdXJyZW50VmFsdWVIZWlnaHQrZS5jdXJyZW50dmFsdWUub2Zmc2V0LHgucmVtb3ZlKCl9aC5oZWlnaHQ9aC5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCt1LnRpY2tPZmZzZXQrZS50aWNrbGVuK3UubGFiZWxPZmZzZXQraC5sYWJlbEhlaWdodCtlLnBhZC50K2UucGFkLmI7dmFyIF89XCJsZWZ0XCI7cy5pc1JpZ2h0QW5jaG9yKGUpJiYoaC5seC09aC5vdXRlckxlbmd0aCxfPVwicmlnaHRcIikscy5pc0NlbnRlckFuY2hvcihlKSYmKGgubHgtPWgub3V0ZXJMZW5ndGgvMixfPVwiY2VudGVyXCIpO3ZhciB3PVwidG9wXCI7cy5pc0JvdHRvbUFuY2hvcihlKSYmKGgubHktPWguaGVpZ2h0LHc9XCJib3R0b21cIikscy5pc01pZGRsZUFuY2hvcihlKSYmKGgubHktPWguaGVpZ2h0LzIsdz1cIm1pZGRsZVwiKSxoLm91dGVyTGVuZ3RoPU1hdGguY2VpbChoLm91dGVyTGVuZ3RoKSxoLmhlaWdodD1NYXRoLmNlaWwoaC5oZWlnaHQpLGgubHg9TWF0aC5yb3VuZChoLmx4KSxoLmx5PU1hdGgucm91bmQoaC5seSk7dmFyIGs9e3k6ZS55LGI6aC5oZWlnaHQqZFt3XSx0OmguaGVpZ2h0KnBbd119O1wiZnJhY3Rpb25cIj09PWUubGVubW9kZT8oay5sPTAsay54bD1lLngtZS5sZW4qcFtfXSxrLnI9MCxrLnhyPWUueCtlLmxlbipkW19dKTooay54PWUueCxrLmw9aC5vdXRlckxlbmd0aCpwW19dLGsucj1oLm91dGVyTGVuZ3RoKmRbX10pLGkuYXV0b01hcmdpbih0LGcoZSksayl9ZnVuY3Rpb24geSh0LGUscil7aWYoZS5jdXJyZW50dmFsdWUudmlzaWJsZSl7dmFyIG4saSxhPWUuX2RpbXM7c3dpdGNoKGUuY3VycmVudHZhbHVlLnhhbmNob3Ipe2Nhc2VcInJpZ2h0XCI6bj1hLmlucHV0QXJlYUxlbmd0aC11LmN1cnJlbnRWYWx1ZUluc2V0LWEuY3VycmVudFZhbHVlTWF4V2lkdGgsaT1cImxlZnRcIjticmVhaztjYXNlXCJjZW50ZXJcIjpuPS41KmEuaW5wdXRBcmVhTGVuZ3RoLGk9XCJtaWRkbGVcIjticmVhaztkZWZhdWx0Om49dS5jdXJyZW50VmFsdWVJbnNldCxpPVwibGVmdFwifXZhciBjPXMuZW5zdXJlU2luZ2xlKHQsXCJ0ZXh0XCIsdS5sYWJlbENsYXNzLGZ1bmN0aW9uKHQpe3QuY2xhc3NlZChcInVzZXItc2VsZWN0LW5vbmVcIiwhMCkuYXR0cih7XCJ0ZXh0LWFuY2hvclwiOmksXCJkYXRhLW5vdGV4XCI6MX0pfSksaD1lLmN1cnJlbnR2YWx1ZS5wcmVmaXg/ZS5jdXJyZW50dmFsdWUucHJlZml4OlwiXCI7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHIpaCs9cjtlbHNle3ZhciBwPWUuc3RlcHNbZS5hY3RpdmVdLmxhYmVsLGQ9ZS5fZ2QuX2Z1bGxMYXlvdXQubWV0YTtkJiYocD1zLnRlbXBsYXRlU3RyaW5nKHAse21ldGE6ZH0pKSxoKz1wfWUuY3VycmVudHZhbHVlLnN1ZmZpeCYmKGgrPWUuY3VycmVudHZhbHVlLnN1ZmZpeCksYy5jYWxsKG8uZm9udCxlLmN1cnJlbnR2YWx1ZS5mb250KS50ZXh0KGgpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsZS5fZ2QpO3ZhciBnPWwubGluZUNvdW50KGMpLHY9KGEuY3VycmVudFZhbHVlTWF4TGluZXMrMS1nKSplLmN1cnJlbnR2YWx1ZS5mb250LnNpemUqZjtyZXR1cm4gbC5wb3NpdGlvblRleHQoYyxuLHYpLGN9fWZ1bmN0aW9uIHgodCxlLHIpe3MuZW5zdXJlU2luZ2xlKHQsXCJyZWN0XCIsdS5ncmlwUmVjdENsYXNzLGZ1bmN0aW9uKG4pe24uY2FsbChBLGUsdCxyKS5zdHlsZShcInBvaW50ZXItZXZlbnRzXCIsXCJhbGxcIil9KS5hdHRyKHt3aWR0aDp1LmdyaXBXaWR0aCxoZWlnaHQ6dS5ncmlwSGVpZ2h0LHJ4OnUuZ3JpcFJhZGl1cyxyeTp1LmdyaXBSYWRpdXN9KS5jYWxsKGEuc3Ryb2tlLHIuYm9yZGVyY29sb3IpLmNhbGwoYS5maWxsLHIuYmdjb2xvcikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixyLmJvcmRlcndpZHRoK1wicHhcIil9ZnVuY3Rpb24gYih0LGUscil7dmFyIG49cy5lbnN1cmVTaW5nbGUodCxcInRleHRcIix1LmxhYmVsQ2xhc3MsZnVuY3Rpb24odCl7dC5jbGFzc2VkKFwidXNlci1zZWxlY3Qtbm9uZVwiLCEwKS5hdHRyKHtcInRleHQtYW5jaG9yXCI6XCJtaWRkbGVcIixcImRhdGEtbm90ZXhcIjoxfSl9KSxpPWUuc3RlcC5sYWJlbCxhPXIuX2dkLl9mdWxsTGF5b3V0Lm1ldGE7cmV0dXJuIGEmJihpPXMudGVtcGxhdGVTdHJpbmcoaSx7bWV0YTphfSkpLG4uY2FsbChvLmZvbnQsci5mb250KS50ZXh0KGkpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsci5fZ2QpLG59ZnVuY3Rpb24gXyh0LGUpe3ZhciByPXMuZW5zdXJlU2luZ2xlKHQsXCJnXCIsdS5sYWJlbHNDbGFzcyksaT1lLl9kaW1zLGE9ci5zZWxlY3RBbGwoXCJnLlwiK3UubGFiZWxHcm91cENsYXNzKS5kYXRhKGkubGFiZWxTdGVwcyk7YS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZCh1LmxhYmVsR3JvdXBDbGFzcywhMCksYS5leGl0KCkucmVtb3ZlKCksYS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpO3IuY2FsbChiLHQsZSksby5zZXRUcmFuc2xhdGUocixTKGUsdC5mcmFjdGlvbiksdS50aWNrT2Zmc2V0K2UudGlja2xlbitlLmZvbnQuc2l6ZSpmK3UubGFiZWxPZmZzZXQraS5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCl9KX1mdW5jdGlvbiB3KHQsZSxyLG4saSl7dmFyIGE9TWF0aC5yb3VuZChuKihyLl9zdGVwQ291bnQtMSkpLG89ci5fdmlzaWJsZVN0ZXBzW2FdLl9pbmRleDtvIT09ci5hY3RpdmUmJmsodCxlLHIsbywhMCxpKX1mdW5jdGlvbiBrKHQsZSxyLG4sYSxvKXt2YXIgcz1yLmFjdGl2ZTtyLmFjdGl2ZT1uLGModC5sYXlvdXQsdS5uYW1lLHIpLmFwcGx5VXBkYXRlKFwiYWN0aXZlXCIsbik7dmFyIGw9ci5zdGVwc1tyLmFjdGl2ZV07ZS5jYWxsKE0scixvKSxlLmNhbGwoeSxyKSx0LmVtaXQoXCJwbG90bHlfc2xpZGVyY2hhbmdlXCIse3NsaWRlcjpyLHN0ZXA6ci5zdGVwc1tyLmFjdGl2ZV0saW50ZXJhY3Rpb246YSxwcmV2aW91c0FjdGl2ZTpzfSksbCYmbC5tZXRob2QmJmEmJihlLl9uZXh0TWV0aG9kPyhlLl9uZXh0TWV0aG9kLnN0ZXA9bCxlLl9uZXh0TWV0aG9kLmRvQ2FsbGJhY2s9YSxlLl9uZXh0TWV0aG9kLmRvVHJhbnNpdGlvbj1vKTooZS5fbmV4dE1ldGhvZD17c3RlcDpsLGRvQ2FsbGJhY2s6YSxkb1RyYW5zaXRpb246b30sZS5fbmV4dE1ldGhvZFJhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7dmFyIHI9ZS5fbmV4dE1ldGhvZC5zdGVwO3IubWV0aG9kJiYoci5leGVjdXRlJiZpLmV4ZWN1dGVBUElDb21tYW5kKHQsci5tZXRob2Qsci5hcmdzKSxlLl9uZXh0TWV0aG9kPW51bGwsZS5fbmV4dE1ldGhvZFJhZj1udWxsKX0pKSl9ZnVuY3Rpb24gQSh0LGUscil7dmFyIGk9ci5ub2RlKCksbz1uLnNlbGVjdChlKTtmdW5jdGlvbiBzKCl7cmV0dXJuIHIuZGF0YSgpWzBdfXQub24oXCJtb3VzZWRvd25cIixmdW5jdGlvbigpe3ZhciB0PXMoKTtlLmVtaXQoXCJwbG90bHlfc2xpZGVyc3RhcnRcIix7c2xpZGVyOnR9KTt2YXIgbD1yLnNlbGVjdChcIi5cIit1LmdyaXBSZWN0Q2xhc3MpO24uZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCksbi5ldmVudC5wcmV2ZW50RGVmYXVsdCgpLGwuY2FsbChhLmZpbGwsdC5hY3RpdmViZ2NvbG9yKTt2YXIgYz1FKHQsbi5tb3VzZShpKVswXSk7dyhlLHIsdCxjLCEwKSx0Ll9kcmFnZ2luZz0hMCxvLm9uKFwibW91c2Vtb3ZlXCIsZnVuY3Rpb24oKXt2YXIgdD1zKCksYT1FKHQsbi5tb3VzZShpKVswXSk7dyhlLHIsdCxhLCExKX0pLG8ub24oXCJtb3VzZXVwXCIsZnVuY3Rpb24oKXt2YXIgdD1zKCk7dC5fZHJhZ2dpbmc9ITEsbC5jYWxsKGEuZmlsbCx0LmJnY29sb3IpLG8ub24oXCJtb3VzZXVwXCIsbnVsbCksby5vbihcIm1vdXNlbW92ZVwiLG51bGwpLGUuZW1pdChcInBsb3RseV9zbGlkZXJlbmRcIix7c2xpZGVyOnQsc3RlcDp0LnN0ZXBzW3QuYWN0aXZlXX0pfSl9KX1mdW5jdGlvbiBUKHQsZSl7dmFyIHI9dC5zZWxlY3RBbGwoXCJyZWN0LlwiK3UudGlja1JlY3RDbGFzcykuZGF0YShlLl92aXNpYmxlU3RlcHMpLGk9ZS5fZGltcztyLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKS5jbGFzc2VkKHUudGlja1JlY3RDbGFzcywhMCksci5leGl0KCkucmVtb3ZlKCksci5hdHRyKHt3aWR0aDplLnRpY2t3aWR0aCtcInB4XCIsXCJzaGFwZS1yZW5kZXJpbmdcIjpcImNyaXNwRWRnZXNcIn0pLHIuZWFjaChmdW5jdGlvbih0LHIpe3ZhciBzPXIlaS5sYWJlbFN0cmlkZT09MCxsPW4uc2VsZWN0KHRoaXMpO2wuYXR0cih7aGVpZ2h0OnM/ZS50aWNrbGVuOmUubWlub3J0aWNrbGVufSkuY2FsbChhLmZpbGwsZS50aWNrY29sb3IpLG8uc2V0VHJhbnNsYXRlKGwsUyhlLHIvKGUuX3N0ZXBDb3VudC0xKSktLjUqZS50aWNrd2lkdGgsKHM/dS50aWNrT2Zmc2V0OnUubWlub3JUaWNrT2Zmc2V0KStpLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX0pfWZ1bmN0aW9uIE0odCxlLHIpe2Zvcih2YXIgbj10LnNlbGVjdChcInJlY3QuXCIrdS5ncmlwUmVjdENsYXNzKSxpPTAsYT0wO2E8ZS5fc3RlcENvdW50O2ErKylpZihlLl92aXNpYmxlU3RlcHNbYV0uX2luZGV4PT09ZS5hY3RpdmUpe2k9YTticmVha312YXIgbz1TKGUsaS8oZS5fc3RlcENvdW50LTEpKTtpZighZS5faW52b2tpbmdDb21tYW5kKXt2YXIgcz1uO3ImJmUudHJhbnNpdGlvbi5kdXJhdGlvbj4wJiYocz1zLnRyYW5zaXRpb24oKS5kdXJhdGlvbihlLnRyYW5zaXRpb24uZHVyYXRpb24pLmVhc2UoZS50cmFuc2l0aW9uLmVhc2luZykpLHMuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiKyhvLS41KnUuZ3JpcFdpZHRoKStcIixcIitlLl9kaW1zLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0K1wiKVwiKX19ZnVuY3Rpb24gUyh0LGUpe3ZhciByPXQuX2RpbXM7cmV0dXJuIHIuaW5wdXRBcmVhU3RhcnQrdS5zdGVwSW5zZXQrKHIuaW5wdXRBcmVhTGVuZ3RoLTIqdS5zdGVwSW5zZXQpKk1hdGgubWluKDEsTWF0aC5tYXgoMCxlKSl9ZnVuY3Rpb24gRSh0LGUpe3ZhciByPXQuX2RpbXM7cmV0dXJuIE1hdGgubWluKDEsTWF0aC5tYXgoMCwoZS11LnN0ZXBJbnNldC1yLmlucHV0QXJlYVN0YXJ0KS8oci5pbnB1dEFyZWFMZW5ndGgtMip1LnN0ZXBJbnNldC0yKnIuaW5wdXRBcmVhU3RhcnQpKSl9ZnVuY3Rpb24gQyh0LGUscil7dmFyIG49ci5fZGltcyxpPXMuZW5zdXJlU2luZ2xlKHQsXCJyZWN0XCIsdS5yYWlsVG91Y2hSZWN0Q2xhc3MsZnVuY3Rpb24obil7bi5jYWxsKEEsZSx0LHIpLnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixcImFsbFwiKX0pO2kuYXR0cih7d2lkdGg6bi5pbnB1dEFyZWFMZW5ndGgsaGVpZ2h0Ok1hdGgubWF4KG4uaW5wdXRBcmVhV2lkdGgsdS50aWNrT2Zmc2V0K3IudGlja2xlbituLmxhYmVsSGVpZ2h0KX0pLmNhbGwoYS5maWxsLHIuYmdjb2xvcikuYXR0cihcIm9wYWNpdHlcIiwwKSxvLnNldFRyYW5zbGF0ZShpLDAsbi5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCl9ZnVuY3Rpb24gTCh0LGUpe3ZhciByPWUuX2RpbXMsbj1yLmlucHV0QXJlYUxlbmd0aC0yKnUucmFpbEluc2V0LGk9cy5lbnN1cmVTaW5nbGUodCxcInJlY3RcIix1LnJhaWxSZWN0Q2xhc3MpO2kuYXR0cih7d2lkdGg6bixoZWlnaHQ6dS5yYWlsV2lkdGgscng6dS5yYWlsUmFkaXVzLHJ5OnUucmFpbFJhZGl1cyxcInNoYXBlLXJlbmRlcmluZ1wiOlwiY3Jpc3BFZGdlc1wifSkuY2FsbChhLnN0cm9rZSxlLmJvcmRlcmNvbG9yKS5jYWxsKGEuZmlsbCxlLmJnY29sb3IpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsZS5ib3JkZXJ3aWR0aCtcInB4XCIpLG8uc2V0VHJhbnNsYXRlKGksdS5yYWlsSW5zZXQsLjUqKHIuaW5wdXRBcmVhV2lkdGgtdS5yYWlsV2lkdGgpK3IuY3VycmVudFZhbHVlVG90YWxIZWlnaHQpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dFt1Lm5hbWVdLG49W10saT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldO2EudmlzaWJsZSYmKGEuX2dkPWUsbi5wdXNoKGEpKX1yZXR1cm4gbn0oZSx0KSxhPWUuX2luZm9sYXllci5zZWxlY3RBbGwoXCJnLlwiK3UuY29udGFpbmVyQ2xhc3NOYW1lKS5kYXRhKHIubGVuZ3RoPjA/WzBdOltdKTtmdW5jdGlvbiBzKGUpe2UuX2NvbW1hbmRPYnNlcnZlciYmKGUuX2NvbW1hbmRPYnNlcnZlci5yZW1vdmUoKSxkZWxldGUgZS5fY29tbWFuZE9ic2VydmVyKSxpLmF1dG9NYXJnaW4odCxnKGUpKX1pZihhLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKHUuY29udGFpbmVyQ2xhc3NOYW1lLCEwKS5zdHlsZShcImN1cnNvclwiLFwiZXctcmVzaXplXCIpLGEuZXhpdCgpLmVhY2goZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoXCJnLlwiK3UuZ3JvdXBDbGFzc05hbWUpLmVhY2gocyl9KS5yZW1vdmUoKSwwIT09ci5sZW5ndGgpe3ZhciBsPWEuc2VsZWN0QWxsKFwiZy5cIit1Lmdyb3VwQ2xhc3NOYW1lKS5kYXRhKHIsdik7bC5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZCh1Lmdyb3VwQ2xhc3NOYW1lLCEwKSxsLmV4aXQoKS5lYWNoKHMpLnJlbW92ZSgpO2Zvcih2YXIgYz0wO2M8ci5sZW5ndGg7YysrKXt2YXIgaD1yW2NdO20odCxoKX1sLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyk7IWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2RpbXM7ZS5sYWJlbFN0ZXBzPVtdO2Zvcih2YXIgcj10Ll9zdGVwQ291bnQsbj0wO248cjtuKz1lLmxhYmVsU3RyaWRlKWUubGFiZWxTdGVwcy5wdXNoKHtmcmFjdGlvbjpuLyhyLTEpLHN0ZXA6dC5fdmlzaWJsZVN0ZXBzW25dfSl9KGUpLGkubWFuYWdlQ29tbWFuZE9ic2VydmVyKHQsZSxlLl92aXNpYmxlU3RlcHMsZnVuY3Rpb24oZSl7dmFyIG49ci5kYXRhKClbMF07bi5hY3RpdmUhPT1lLmluZGV4JiYobi5fZHJhZ2dpbmd8fGsodCxyLG4sZS5pbmRleCwhMSwhMCkpfSksZnVuY3Rpb24odCxlLHIpeyhyLnN0ZXBzW3IuYWN0aXZlXXx8e30pLnZpc2libGV8fChyLmFjdGl2ZT1yLl92aXNpYmxlU3RlcHNbMF0uX2luZGV4KTtlLmNhbGwoeSxyKS5jYWxsKEwscikuY2FsbChfLHIpLmNhbGwoVCxyKS5jYWxsKEMsdCxyKS5jYWxsKHgsdCxyKTt2YXIgbj1yLl9kaW1zO28uc2V0VHJhbnNsYXRlKGUsbi5seCtyLnBhZC5sLG4ubHkrci5wYWQudCksZS5jYWxsKE0sciwhMSksZS5jYWxsKHkscil9KHQsbi5zZWxlY3QodGhpcyksZSl9KX19fSx7XCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCI6NjczLFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCI6NzI1LFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3Bsb3RzL3Bsb3RzXCI6ODEwLFwiLi4vY29sb3JcIjo1NzgsXCIuLi9kcmF3aW5nXCI6NTk5LFwiLi9jb25zdGFudHNcIjo2NjIsZDM6MTU1fV0sNjY1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vY29uc3RhbnRzXCIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZTpcImNvbXBvbmVudFwiLG5hbWU6bi5uYW1lLGxheW91dEF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxkcmF3OnQoXCIuL2RyYXdcIil9fSx7XCIuL2F0dHJpYnV0ZXNcIjo2NjEsXCIuL2NvbnN0YW50c1wiOjY2MixcIi4vZGVmYXVsdHNcIjo2NjMsXCIuL2RyYXdcIjo2NjR9XSw2NjY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiZmFzdC1pc251bWVyaWNcIiksYT10KFwiLi4vLi4vcGxvdHMvcGxvdHNcIiksbz10KFwiLi4vLi4vcmVnaXN0cnlcIikscz10KFwiLi4vLi4vbGliXCIpLGw9dChcIi4uL2RyYXdpbmdcIiksYz10KFwiLi4vY29sb3JcIiksdT10KFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCIpLGg9dChcIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnNcIik7ZS5leHBvcnRzPXtkcmF3OmZ1bmN0aW9uKHQsZSxyKXt2YXIgcCxkPXIucHJvcENvbnRhaW5lcixnPXIucHJvcE5hbWUsdj1yLnBsYWNlaG9sZGVyLG09ci50cmFjZUluZGV4LHk9ci5hdm9pZHx8e30seD1yLmF0dHJpYnV0ZXMsYj1yLnRyYW5zZm9ybSxfPXIuY29udGFpbmVyR3JvdXAsdz10Ll9mdWxsTGF5b3V0LGs9MSxBPSExLFQ9ZC50aXRsZSxNPShUJiZULnRleHQ/VC50ZXh0OlwiXCIpLnRyaW0oKSxTPVQmJlQuZm9udD9ULmZvbnQ6e30sRT1TLmZhbWlseSxDPVMuc2l6ZSxMPVMuY29sb3I7XCJ0aXRsZS50ZXh0XCI9PT1nP3A9XCJ0aXRsZVRleHRcIjotMSE9PWcuaW5kZXhPZihcImF4aXNcIik/cD1cImF4aXNUaXRsZVRleHRcIjpnLmluZGV4T2YoITApJiYocD1cImNvbG9yYmFyVGl0bGVUZXh0XCIpO3ZhciB6PXQuX2NvbnRleHQuZWRpdHNbcF07XCJcIj09PU0/az0wOk0ucmVwbGFjZShmLFwiICUgXCIpPT09di5yZXBsYWNlKGYsXCIgJSBcIikmJihrPS4yLEE9ITAsenx8KE09XCJcIikpO3cubWV0YSYmKE09cy50ZW1wbGF0ZVN0cmluZyhNLHttZXRhOncubWV0YX0pKTt2YXIgTz1NfHx6O198fChfPXMuZW5zdXJlU2luZ2xlKHcuX2luZm9sYXllcixcImdcIixcImctXCIrZSkpO3ZhciBJPV8uc2VsZWN0QWxsKFwidGV4dFwiKS5kYXRhKE8/WzBdOltdKTtpZihJLmVudGVyKCkuYXBwZW5kKFwidGV4dFwiKSxJLnRleHQoTSkuYXR0cihcImNsYXNzXCIsZSksSS5leGl0KCkucmVtb3ZlKCksIU8pcmV0dXJuIF87ZnVuY3Rpb24gRCh0KXtzLnN5bmNPckFzeW5jKFtQLFJdLHQpfWZ1bmN0aW9uIFAoZSl7dmFyIHI7cmV0dXJuIGI/KHI9XCJcIixiLnJvdGF0ZSYmKHIrPVwicm90YXRlKFwiK1tiLnJvdGF0ZSx4LngseC55XStcIilcIiksYi5vZmZzZXQmJihyKz1cInRyYW5zbGF0ZSgwLCBcIitiLm9mZnNldCtcIilcIikpOnI9bnVsbCxlLmF0dHIoXCJ0cmFuc2Zvcm1cIixyKSxlLnN0eWxlKHtcImZvbnQtZmFtaWx5XCI6RSxcImZvbnQtc2l6ZVwiOm4ucm91bmQoQywyKStcInB4XCIsZmlsbDpjLnJnYihMKSxvcGFjaXR5OmsqYy5vcGFjaXR5KEwpLFwiZm9udC13ZWlnaHRcIjphLmZvbnRXZWlnaHR9KS5hdHRyKHgpLmNhbGwodS5jb252ZXJ0VG9Uc3BhbnMsdCksYS5wcmV2aW91c1Byb21pc2VzKHQpfWZ1bmN0aW9uIFIodCl7dmFyIGU9bi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSk7aWYoeSYmeS5zZWxlY3Rpb24mJnkuc2lkZSYmTSl7ZS5hdHRyKFwidHJhbnNmb3JtXCIsbnVsbCk7dmFyIHI9MCxhPXtsZWZ0OlwicmlnaHRcIixyaWdodDpcImxlZnRcIix0b3A6XCJib3R0b21cIixib3R0b206XCJ0b3BcIn1beS5zaWRlXSxvPS0xIT09W1wibGVmdFwiLFwidG9wXCJdLmluZGV4T2YoeS5zaWRlKT8tMToxLGM9aSh5LnBhZCk/eS5wYWQ6Mix1PWwuYkJveChlLm5vZGUoKSksaD17bGVmdDowLHRvcDowLHJpZ2h0Oncud2lkdGgsYm90dG9tOncuaGVpZ2h0fSxmPXkubWF4U2hpZnR8fChoW3kuc2lkZV0tdVt5LnNpZGVdKSooXCJsZWZ0XCI9PT15LnNpZGV8fFwidG9wXCI9PT15LnNpZGU/LTE6MSk7aWYoZjwwKXI9ZjtlbHNle3ZhciBwPXkub2Zmc2V0TGVmdHx8MCxkPXkub2Zmc2V0VG9wfHwwO3UubGVmdC09cCx1LnJpZ2h0LT1wLHUudG9wLT1kLHUuYm90dG9tLT1kLHkuc2VsZWN0aW9uLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1sLmJCb3godGhpcyk7cy5iQm94SW50ZXJzZWN0KHUsdCxjKSYmKHI9TWF0aC5tYXgocixvKih0W3kuc2lkZV0tdVthXSkrYykpfSkscj1NYXRoLm1pbihmLHIpfWlmKHI+MHx8ZjwwKXt2YXIgZz17bGVmdDpbLXIsMF0scmlnaHQ6W3IsMF0sdG9wOlswLC1yXSxib3R0b206WzAscl19W3kuc2lkZV07ZS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrZytcIilcIil9fX1JLmNhbGwoRCkseiYmKE0/SS5vbihcIi5vcGFjaXR5XCIsbnVsbCk6KGs9MCxBPSEwLEkudGV4dCh2KS5vbihcIm1vdXNlb3Zlci5vcGFjaXR5XCIsZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oaC5TSE9XX1BMQUNFSE9MREVSKS5zdHlsZShcIm9wYWNpdHlcIiwxKX0pLm9uKFwibW91c2VvdXQub3BhY2l0eVwiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKGguSElERV9QTEFDRUhPTERFUikuc3R5bGUoXCJvcGFjaXR5XCIsMCl9KSksSS5jYWxsKHUubWFrZUVkaXRhYmxlLHtnZDp0fSkub24oXCJlZGl0XCIsZnVuY3Rpb24oZSl7dm9pZCAwIT09bT9vLmNhbGwoXCJfZ3VpUmVzdHlsZVwiLHQsZyxlLG0pOm8uY2FsbChcIl9ndWlSZWxheW91dFwiLHQsZyxlKX0pLm9uKFwiY2FuY2VsXCIsZnVuY3Rpb24oKXt0aGlzLnRleHQodGhpcy5hdHRyKFwiZGF0YS11bmZvcm1hdHRlZFwiKSkuY2FsbChEKX0pLm9uKFwiaW5wdXRcIixmdW5jdGlvbih0KXt0aGlzLnRleHQodHx8XCIgXCIpLmNhbGwodS5wb3NpdGlvblRleHQseC54LHgueSl9KSk7cmV0dXJuIEkuY2xhc3NlZChcImpzLXBsYWNlaG9sZGVyXCIsQSksX319O3ZhciBmPS8gW1hZXVswLTldKiAvfSx7XCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zXCI6Njc3LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCI6NzI1LFwiLi4vLi4vcGxvdHMvcGxvdHNcIjo4MTAsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL2NvbG9yXCI6NTc4LFwiLi4vZHJhd2luZ1wiOjU5OSxkMzoxNTUsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDY2NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vY29sb3IvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsbz10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbCxzPXQoXCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlc1wiKSxsPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLnRlbXBsYXRlZEFycmF5LGM9bChcImJ1dHRvblwiLHt2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwifSxtZXRob2Q6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInJlc3R5bGVcIixcInJlbGF5b3V0XCIsXCJhbmltYXRlXCIsXCJ1cGRhdGVcIixcInNraXBcIl0sZGZsdDpcInJlc3R5bGVcIn0sYXJnczp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixmcmVlTGVuZ3RoOiEwLGl0ZW1zOlt7dmFsVHlwZTpcImFueVwifSx7dmFsVHlwZTpcImFueVwifSx7dmFsVHlwZTpcImFueVwifV19LGxhYmVsOnt2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwifSxleGVjdXRlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITB9fSk7ZS5leHBvcnRzPW8obChcInVwZGF0ZW1lbnVcIix7X2FycmF5QXR0clJlZ2V4cHM6Wy9edXBkYXRlbWVudXNcXFsoMHxbMS05XVswLTldKylcXF1cXC5idXR0b25zL10sdmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIn0sdHlwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiZHJvcGRvd25cIixcImJ1dHRvbnNcIl0sZGZsdDpcImRyb3Bkb3duXCJ9LGRpcmVjdGlvbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibGVmdFwiLFwicmlnaHRcIixcInVwXCIsXCJkb3duXCJdLGRmbHQ6XCJkb3duXCJ9LGFjdGl2ZTp7dmFsVHlwZTpcImludGVnZXJcIixtaW46LTEsZGZsdDowfSxzaG93YWN0aXZlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITB9LGJ1dHRvbnM6Yyx4Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOi0yLG1heDozLGRmbHQ6LS4wNX0seGFuY2hvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYXV0b1wiLFwibGVmdFwiLFwiY2VudGVyXCIsXCJyaWdodFwiXSxkZmx0OlwicmlnaHRcIn0seTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjotMixtYXg6MyxkZmx0OjF9LHlhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImF1dG9cIixcInRvcFwiLFwibWlkZGxlXCIsXCJib3R0b21cIl0sZGZsdDpcInRvcFwifSxwYWQ6YShzKHtlZGl0VHlwZTpcImFycmF5ZHJhd1wifSkse30pLGZvbnQ6bih7fSksYmdjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmkuYm9yZGVyTGluZX0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn19KSxcImFycmF5ZHJhd1wiLFwiZnJvbS1yb290XCIpfSx7XCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIjo3NzUsXCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlc1wiOjgwOSxcIi4uL2NvbG9yL2F0dHJpYnV0ZXNcIjo1Nzd9XSw2Njg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e25hbWU6XCJ1cGRhdGVtZW51c1wiLGNvbnRhaW5lckNsYXNzTmFtZTpcInVwZGF0ZW1lbnUtY29udGFpbmVyXCIsaGVhZGVyR3JvdXBDbGFzc05hbWU6XCJ1cGRhdGVtZW51LWhlYWRlci1ncm91cFwiLGhlYWRlckNsYXNzTmFtZTpcInVwZGF0ZW1lbnUtaGVhZGVyXCIsaGVhZGVyQXJyb3dDbGFzc05hbWU6XCJ1cGRhdGVtZW51LWhlYWRlci1hcnJvd1wiLGRyb3Bkb3duQnV0dG9uR3JvdXBDbGFzc05hbWU6XCJ1cGRhdGVtZW51LWRyb3Bkb3duLWJ1dHRvbi1ncm91cFwiLGRyb3Bkb3duQnV0dG9uQ2xhc3NOYW1lOlwidXBkYXRlbWVudS1kcm9wZG93bi1idXR0b25cIixidXR0b25DbGFzc05hbWU6XCJ1cGRhdGVtZW51LWJ1dHRvblwiLGl0ZW1SZWN0Q2xhc3NOYW1lOlwidXBkYXRlbWVudS1pdGVtLXJlY3RcIixpdGVtVGV4dENsYXNzTmFtZTpcInVwZGF0ZW1lbnUtaXRlbS10ZXh0XCIsbWVudUluZGV4QXR0ck5hbWU6XCJ1cGRhdGVtZW51LWFjdGl2ZS1pbmRleFwiLGF1dG9NYXJnaW5JZFJvb3Q6XCJ1cGRhdGVtZW51LVwiLGJsYW5rSGVhZGVyT3B0czp7bGFiZWw6XCIgIFwifSxtaW5XaWR0aDozMCxtaW5IZWlnaHQ6MzAsdGV4dFBhZFg6MjQsYXJyb3dQYWRYOjE2LHJ4OjIscnk6Mix0ZXh0T2Zmc2V0WDoxMix0ZXh0T2Zmc2V0WTozLGFycm93T2Zmc2V0WDo0LGdhcEJ1dHRvbkhlYWRlcjo1LGdhcEJ1dHRvbjoyLGFjdGl2ZUNvbG9yOlwiI0Y0RkFGRlwiLGhvdmVyQ29sb3I6XCIjRjRGQUZGXCIsYXJyb3dTeW1ib2w6e2xlZnQ6XCJcXHUyNWM0XCIscmlnaHQ6XCJcXHUyNWJhXCIsdXA6XCJcXHUyNWIyXCIsZG93bjpcIlxcdTI1YmNcIn19fSx7fV0sNjY5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIiksYT10KFwiLi9hdHRyaWJ1dGVzXCIpLG89dChcIi4vY29uc3RhbnRzXCIpLm5hbWUscz1hLmJ1dHRvbnM7ZnVuY3Rpb24gbCh0LGUscil7ZnVuY3Rpb24gbyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfW8oXCJ2aXNpYmxlXCIsaSh0LGUse25hbWU6XCJidXR0b25zXCIsaGFuZGxlSXRlbURlZmF1bHRzOmN9KS5sZW5ndGg+MCkmJihvKFwiYWN0aXZlXCIpLG8oXCJkaXJlY3Rpb25cIiksbyhcInR5cGVcIiksbyhcInNob3dhY3RpdmVcIiksbyhcInhcIiksbyhcInlcIiksbi5ub25lT3JBbGwodCxlLFtcInhcIixcInlcIl0pLG8oXCJ4YW5jaG9yXCIpLG8oXCJ5YW5jaG9yXCIpLG8oXCJwYWQudFwiKSxvKFwicGFkLnJcIiksbyhcInBhZC5iXCIpLG8oXCJwYWQubFwiKSxuLmNvZXJjZUZvbnQobyxcImZvbnRcIixyLmZvbnQpLG8oXCJiZ2NvbG9yXCIsci5wYXBlcl9iZ2NvbG9yKSxvKFwiYm9yZGVyY29sb3JcIiksbyhcImJvcmRlcndpZHRoXCIpKX1mdW5jdGlvbiBjKHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfXIoXCJ2aXNpYmxlXCIsXCJza2lwXCI9PT10Lm1ldGhvZHx8QXJyYXkuaXNBcnJheSh0LmFyZ3MpKSYmKHIoXCJtZXRob2RcIikscihcImFyZ3NcIikscihcImxhYmVsXCIpLHIoXCJleGVjdXRlXCIpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpKHQsZSx7bmFtZTpvLGhhbmRsZUl0ZW1EZWZhdWx0czpsfSl9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIjo3NDUsXCIuL2F0dHJpYnV0ZXNcIjo2NjcsXCIuL2NvbnN0YW50c1wiOjY2OH1dLDY3MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9wbG90cy9wbG90c1wiKSxhPXQoXCIuLi9jb2xvclwiKSxvPXQoXCIuLi9kcmF3aW5nXCIpLHM9dChcIi4uLy4uL2xpYlwiKSxsPXQoXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIiksYz10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKS5hcnJheUVkaXRvcix1PXQoXCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCIpLkxJTkVfU1BBQ0lORyxoPXQoXCIuL2NvbnN0YW50c1wiKSxmPXQoXCIuL3Njcm9sbGJveFwiKTtmdW5jdGlvbiBwKHQpe3JldHVybiB0Ll9pbmRleH1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuK3QuYXR0cihoLm1lbnVJbmRleEF0dHJOYW1lKT09PWUuX2luZGV4fWZ1bmN0aW9uIGcodCxlLHIsbixpLGEsbyxzKXtlLmFjdGl2ZT1vLGModC5sYXlvdXQsaC5uYW1lLGUpLmFwcGx5VXBkYXRlKFwiYWN0aXZlXCIsbyksXCJidXR0b25zXCI9PT1lLnR5cGU/bSh0LG4sbnVsbCxudWxsLGUpOlwiZHJvcGRvd25cIj09PWUudHlwZSYmKGkuYXR0cihoLm1lbnVJbmRleEF0dHJOYW1lLFwiLTFcIiksdih0LG4saSxhLGUpLHN8fG0odCxuLGksYSxlKSl9ZnVuY3Rpb24gdih0LGUscixuLGkpe3ZhciBhPXMuZW5zdXJlU2luZ2xlKGUsXCJnXCIsaC5oZWFkZXJDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5zdHlsZShcInBvaW50ZXItZXZlbnRzXCIsXCJhbGxcIil9KSxsPWkuX2RpbXMsYz1pLmFjdGl2ZSx1PWkuYnV0dG9uc1tjXXx8aC5ibGFua0hlYWRlck9wdHMsZj17eTppLnBhZC50LHlQYWQ6MCx4OmkucGFkLmwseFBhZDowLGluZGV4OjB9LHA9e3dpZHRoOmwuaGVhZGVyV2lkdGgsaGVpZ2h0OmwuaGVhZGVySGVpZ2h0fTthLmNhbGwoeSxpLHUsdCkuY2FsbChNLGksZixwKSxzLmVuc3VyZVNpbmdsZShlLFwidGV4dFwiLGguaGVhZGVyQXJyb3dDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5jbGFzc2VkKFwidXNlci1zZWxlY3Qtbm9uZVwiLCEwKS5hdHRyKFwidGV4dC1hbmNob3JcIixcImVuZFwiKS5jYWxsKG8uZm9udCxpLmZvbnQpLnRleHQoaC5hcnJvd1N5bWJvbFtpLmRpcmVjdGlvbl0pfSkuYXR0cih7eDpsLmhlYWRlcldpZHRoLWguYXJyb3dPZmZzZXRYK2kucGFkLmwseTpsLmhlYWRlckhlaWdodC8yK2gudGV4dE9mZnNldFkraS5wYWQudH0pLGEub24oXCJjbGlja1wiLGZ1bmN0aW9uKCl7ci5jYWxsKFMsU3RyaW5nKGQocixpKT8tMTppLl9pbmRleCkpLG0odCxlLHIsbixpKX0pLGEub24oXCJtb3VzZW92ZXJcIixmdW5jdGlvbigpe2EuY2FsbCh3KX0pLGEub24oXCJtb3VzZW91dFwiLGZ1bmN0aW9uKCl7YS5jYWxsKGssaSl9KSxvLnNldFRyYW5zbGF0ZShlLGwubHgsbC5seSl9ZnVuY3Rpb24gbSh0LGUscixhLG8pe3J8fChyPWUpLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpO3ZhciBsPWZ1bmN0aW9uKHQpe3JldHVybi0xPT0rdC5hdHRyKGgubWVudUluZGV4QXR0ck5hbWUpfShyKSYmXCJidXR0b25zXCIhPT1vLnR5cGU/W106by5idXR0b25zLGM9XCJkcm9wZG93blwiPT09by50eXBlP2guZHJvcGRvd25CdXR0b25DbGFzc05hbWU6aC5idXR0b25DbGFzc05hbWUsdT1yLnNlbGVjdEFsbChcImcuXCIrYykuZGF0YShzLmZpbHRlclZpc2libGUobCkpLGY9dS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChjLCEwKSxwPXUuZXhpdCgpO1wiZHJvcGRvd25cIj09PW8udHlwZT8oZi5hdHRyKFwib3BhY2l0eVwiLFwiMFwiKS50cmFuc2l0aW9uKCkuYXR0cihcIm9wYWNpdHlcIixcIjFcIikscC50cmFuc2l0aW9uKCkuYXR0cihcIm9wYWNpdHlcIixcIjBcIikucmVtb3ZlKCkpOnAucmVtb3ZlKCk7dmFyIGQ9MCx2PTAsbT1vLl9kaW1zLHg9LTEhPT1bXCJ1cFwiLFwiZG93blwiXS5pbmRleE9mKG8uZGlyZWN0aW9uKTtcImRyb3Bkb3duXCI9PT1vLnR5cGUmJih4P3Y9bS5oZWFkZXJIZWlnaHQraC5nYXBCdXR0b25IZWFkZXI6ZD1tLmhlYWRlcldpZHRoK2guZ2FwQnV0dG9uSGVhZGVyKSxcImRyb3Bkb3duXCI9PT1vLnR5cGUmJlwidXBcIj09PW8uZGlyZWN0aW9uJiYodj0taC5nYXBCdXR0b25IZWFkZXIraC5nYXBCdXR0b24tbS5vcGVuSGVpZ2h0KSxcImRyb3Bkb3duXCI9PT1vLnR5cGUmJlwibGVmdFwiPT09by5kaXJlY3Rpb24mJihkPS1oLmdhcEJ1dHRvbkhlYWRlcitoLmdhcEJ1dHRvbi1tLm9wZW5XaWR0aCk7dmFyIGI9e3g6bS5seCtkK28ucGFkLmwseTptLmx5K3Yrby5wYWQudCx5UGFkOmguZ2FwQnV0dG9uLHhQYWQ6aC5nYXBCdXR0b24saW5kZXg6MH0sQT17bDpiLngrby5ib3JkZXJ3aWR0aCx0OmIueStvLmJvcmRlcndpZHRofTt1LmVhY2goZnVuY3Rpb24ocyxsKXt2YXIgYz1uLnNlbGVjdCh0aGlzKTtjLmNhbGwoeSxvLHMsdCkuY2FsbChNLG8sYiksYy5vbihcImNsaWNrXCIsZnVuY3Rpb24oKXtuLmV2ZW50LmRlZmF1bHRQcmV2ZW50ZWR8fChnKHQsbywwLGUscixhLGwpLHMuZXhlY3V0ZSYmaS5leGVjdXRlQVBJQ29tbWFuZCh0LHMubWV0aG9kLHMuYXJncyksdC5lbWl0KFwicGxvdGx5X2J1dHRvbmNsaWNrZWRcIix7bWVudTpvLGJ1dHRvbjpzLGFjdGl2ZTpvLmFjdGl2ZX0pKX0pLGMub24oXCJtb3VzZW92ZXJcIixmdW5jdGlvbigpe2MuY2FsbCh3KX0pLGMub24oXCJtb3VzZW91dFwiLGZ1bmN0aW9uKCl7Yy5jYWxsKGssbyksdS5jYWxsKF8sbyl9KX0pLHUuY2FsbChfLG8pLHg/KEEudz1NYXRoLm1heChtLm9wZW5XaWR0aCxtLmhlYWRlcldpZHRoKSxBLmg9Yi55LUEudCk6KEEudz1iLngtQS5sLEEuaD1NYXRoLm1heChtLm9wZW5IZWlnaHQsbS5oZWFkZXJIZWlnaHQpKSxBLmRpcmVjdGlvbj1vLmRpcmVjdGlvbixhJiYodS5zaXplKCk/ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvLHMsbCxjPWkuZGlyZWN0aW9uLHU9XCJ1cFwiPT09Y3x8XCJkb3duXCI9PT1jLGY9aS5fZGltcyxwPWkuYWN0aXZlO2lmKHUpZm9yKHM9MCxsPTA7bDxwO2wrKylzKz1mLmhlaWdodHNbbF0raC5nYXBCdXR0b247ZWxzZSBmb3Iobz0wLGw9MDtsPHA7bCsrKW8rPWYud2lkdGhzW2xdK2guZ2FwQnV0dG9uO24uZW5hYmxlKGEsbyxzKSxuLmhiYXImJm4uaGJhci5hdHRyKFwib3BhY2l0eVwiLFwiMFwiKS50cmFuc2l0aW9uKCkuYXR0cihcIm9wYWNpdHlcIixcIjFcIik7bi52YmFyJiZuLnZiYXIuYXR0cihcIm9wYWNpdHlcIixcIjBcIikudHJhbnNpdGlvbigpLmF0dHIoXCJvcGFjaXR5XCIsXCIxXCIpfSgwLDAsMCxhLG8sQSk6ZnVuY3Rpb24odCl7dmFyIGU9ISF0LmhiYXIscj0hIXQudmJhcjtlJiZ0LmhiYXIudHJhbnNpdGlvbigpLmF0dHIoXCJvcGFjaXR5XCIsXCIwXCIpLmVhY2goXCJlbmRcIixmdW5jdGlvbigpe2U9ITEscnx8dC5kaXNhYmxlKCl9KTtyJiZ0LnZiYXIudHJhbnNpdGlvbigpLmF0dHIoXCJvcGFjaXR5XCIsXCIwXCIpLmVhY2goXCJlbmRcIixmdW5jdGlvbigpe3I9ITEsZXx8dC5kaXNhYmxlKCl9KX0oYSkpfWZ1bmN0aW9uIHkodCxlLHIsbil7dC5jYWxsKHgsZSkuY2FsbChiLGUscixuKX1mdW5jdGlvbiB4KHQsZSl7cy5lbnN1cmVTaW5nbGUodCxcInJlY3RcIixoLml0ZW1SZWN0Q2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuYXR0cih7cng6aC5yeCxyeTpoLnJ5LFwic2hhcGUtcmVuZGVyaW5nXCI6XCJjcmlzcEVkZ2VzXCJ9KX0pLmNhbGwoYS5zdHJva2UsZS5ib3JkZXJjb2xvcikuY2FsbChhLmZpbGwsZS5iZ2NvbG9yKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLGUuYm9yZGVyd2lkdGgrXCJweFwiKX1mdW5jdGlvbiBiKHQsZSxyLG4pe3ZhciBpPXMuZW5zdXJlU2luZ2xlKHQsXCJ0ZXh0XCIsaC5pdGVtVGV4dENsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmNsYXNzZWQoXCJ1c2VyLXNlbGVjdC1ub25lXCIsITApLmF0dHIoe1widGV4dC1hbmNob3JcIjpcInN0YXJ0XCIsXCJkYXRhLW5vdGV4XCI6MX0pfSksYT1yLmxhYmVsLGM9bi5fZnVsbExheW91dC5tZXRhO2MmJihhPXMudGVtcGxhdGVTdHJpbmcoYSx7bWV0YTpjfSkpLGkuY2FsbChvLmZvbnQsZS5mb250KS50ZXh0KGEpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsbil9ZnVuY3Rpb24gXyh0LGUpe3ZhciByPWUuYWN0aXZlO3QuZWFjaChmdW5jdGlvbih0LGkpe3ZhciBvPW4uc2VsZWN0KHRoaXMpO2k9PT1yJiZlLnNob3dhY3RpdmUmJm8uc2VsZWN0KFwicmVjdC5cIitoLml0ZW1SZWN0Q2xhc3NOYW1lKS5jYWxsKGEuZmlsbCxoLmFjdGl2ZUNvbG9yKX0pfWZ1bmN0aW9uIHcodCl7dC5zZWxlY3QoXCJyZWN0LlwiK2guaXRlbVJlY3RDbGFzc05hbWUpLmNhbGwoYS5maWxsLGguaG92ZXJDb2xvcil9ZnVuY3Rpb24gayh0LGUpe3Quc2VsZWN0KFwicmVjdC5cIitoLml0ZW1SZWN0Q2xhc3NOYW1lKS5jYWxsKGEuZmlsbCxlLmJnY29sb3IpfWZ1bmN0aW9uIEEodCxlKXt2YXIgcj1lLl9kaW1zPXt3aWR0aDE6MCxoZWlnaHQxOjAsaGVpZ2h0czpbXSx3aWR0aHM6W10sdG90YWxXaWR0aDowLHRvdGFsSGVpZ2h0OjAsb3BlbldpZHRoOjAsb3BlbkhlaWdodDowLGx4OjAsbHk6MH0sYT1vLnRlc3Rlci5zZWxlY3RBbGwoXCJnLlwiK2guZHJvcGRvd25CdXR0b25DbGFzc05hbWUpLmRhdGEocy5maWx0ZXJWaXNpYmxlKGUuYnV0dG9ucykpO2EuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoaC5kcm9wZG93bkJ1dHRvbkNsYXNzTmFtZSwhMCk7dmFyIGM9LTEhPT1bXCJ1cFwiLFwiZG93blwiXS5pbmRleE9mKGUuZGlyZWN0aW9uKTthLmVhY2goZnVuY3Rpb24oaSxhKXt2YXIgcz1uLnNlbGVjdCh0aGlzKTtzLmNhbGwoeSxlLGksdCk7dmFyIGY9cy5zZWxlY3QoXCIuXCIraC5pdGVtVGV4dENsYXNzTmFtZSkscD1mLm5vZGUoKSYmby5iQm94KGYubm9kZSgpKS53aWR0aCxkPU1hdGgubWF4KHAraC50ZXh0UGFkWCxoLm1pbldpZHRoKSxnPWUuZm9udC5zaXplKnUsdj1sLmxpbmVDb3VudChmKSxtPU1hdGgubWF4KGcqdixoLm1pbkhlaWdodCkraC50ZXh0T2Zmc2V0WTttPU1hdGguY2VpbChtKSxkPU1hdGguY2VpbChkKSxyLndpZHRoc1thXT1kLHIuaGVpZ2h0c1thXT1tLHIuaGVpZ2h0MT1NYXRoLm1heChyLmhlaWdodDEsbSksci53aWR0aDE9TWF0aC5tYXgoci53aWR0aDEsZCksYz8oci50b3RhbFdpZHRoPU1hdGgubWF4KHIudG90YWxXaWR0aCxkKSxyLm9wZW5XaWR0aD1yLnRvdGFsV2lkdGgsci50b3RhbEhlaWdodCs9bStoLmdhcEJ1dHRvbixyLm9wZW5IZWlnaHQrPW0raC5nYXBCdXR0b24pOihyLnRvdGFsV2lkdGgrPWQraC5nYXBCdXR0b24sci5vcGVuV2lkdGgrPWQraC5nYXBCdXR0b24sci50b3RhbEhlaWdodD1NYXRoLm1heChyLnRvdGFsSGVpZ2h0LG0pLHIub3BlbkhlaWdodD1yLnRvdGFsSGVpZ2h0KX0pLGM/ci50b3RhbEhlaWdodC09aC5nYXBCdXR0b246ci50b3RhbFdpZHRoLT1oLmdhcEJ1dHRvbixyLmhlYWRlcldpZHRoPXIud2lkdGgxK2guYXJyb3dQYWRYLHIuaGVhZGVySGVpZ2h0PXIuaGVpZ2h0MSxcImRyb3Bkb3duXCI9PT1lLnR5cGUmJihjPyhyLndpZHRoMSs9aC5hcnJvd1BhZFgsci50b3RhbEhlaWdodD1yLmhlaWdodDEpOnIudG90YWxXaWR0aD1yLndpZHRoMSxyLnRvdGFsV2lkdGgrPWguYXJyb3dQYWRYKSxhLnJlbW92ZSgpO3ZhciBmPXIudG90YWxXaWR0aCtlLnBhZC5sK2UucGFkLnIscD1yLnRvdGFsSGVpZ2h0K2UucGFkLnQrZS5wYWQuYixkPXQuX2Z1bGxMYXlvdXQuX3NpemU7ci5seD1kLmwrZC53KmUueCxyLmx5PWQudCtkLmgqKDEtZS55KTt2YXIgZz1cImxlZnRcIjtzLmlzUmlnaHRBbmNob3IoZSkmJihyLmx4LT1mLGc9XCJyaWdodFwiKSxzLmlzQ2VudGVyQW5jaG9yKGUpJiYoci5seC09Zi8yLGc9XCJjZW50ZXJcIik7dmFyIHY9XCJ0b3BcIjtzLmlzQm90dG9tQW5jaG9yKGUpJiYoci5seS09cCx2PVwiYm90dG9tXCIpLHMuaXNNaWRkbGVBbmNob3IoZSkmJihyLmx5LT1wLzIsdj1cIm1pZGRsZVwiKSxyLnRvdGFsV2lkdGg9TWF0aC5jZWlsKHIudG90YWxXaWR0aCksci50b3RhbEhlaWdodD1NYXRoLmNlaWwoci50b3RhbEhlaWdodCksci5seD1NYXRoLnJvdW5kKHIubHgpLHIubHk9TWF0aC5yb3VuZChyLmx5KSxpLmF1dG9NYXJnaW4odCxUKGUpLHt4OmUueCx5OmUueSxsOmYqKHtyaWdodDoxLGNlbnRlcjouNX1bZ118fDApLHI6Ziooe2xlZnQ6MSxjZW50ZXI6LjV9W2ddfHwwKSxiOnAqKHt0b3A6MSxtaWRkbGU6LjV9W3ZdfHwwKSx0OnAqKHtib3R0b206MSxtaWRkbGU6LjV9W3ZdfHwwKX0pfWZ1bmN0aW9uIFQodCl7cmV0dXJuIGguYXV0b01hcmdpbklkUm9vdCt0Ll9pbmRleH1mdW5jdGlvbiBNKHQsZSxyLG4pe249bnx8e307dmFyIGk9dC5zZWxlY3QoXCIuXCIraC5pdGVtUmVjdENsYXNzTmFtZSksYT10LnNlbGVjdChcIi5cIitoLml0ZW1UZXh0Q2xhc3NOYW1lKSxzPWUuYm9yZGVyd2lkdGgsYz1yLmluZGV4LGY9ZS5fZGltcztvLnNldFRyYW5zbGF0ZSh0LHMrci54LHMrci55KTt2YXIgcD0tMSE9PVtcInVwXCIsXCJkb3duXCJdLmluZGV4T2YoZS5kaXJlY3Rpb24pLGQ9bi5oZWlnaHR8fChwP2YuaGVpZ2h0c1tjXTpmLmhlaWdodDEpO2kuYXR0cih7eDowLHk6MCx3aWR0aDpuLndpZHRofHwocD9mLndpZHRoMTpmLndpZHRoc1tjXSksaGVpZ2h0OmR9KTt2YXIgZz1lLmZvbnQuc2l6ZSp1LHY9KGwubGluZUNvdW50KGEpLTEpKmcvMjtsLnBvc2l0aW9uVGV4dChhLGgudGV4dE9mZnNldFgsZC8yLXYraC50ZXh0T2Zmc2V0WSkscD9yLnkrPWYuaGVpZ2h0c1tjXStyLnlQYWQ6ci54Kz1mLndpZHRoc1tjXStyLnhQYWQsci5pbmRleCsrfWZ1bmN0aW9uIFModCxlKXt0LmF0dHIoaC5tZW51SW5kZXhBdHRyTmFtZSxlfHxcIi0xXCIpLnNlbGVjdEFsbChcImcuXCIraC5kcm9wZG93bkJ1dHRvbkNsYXNzTmFtZSkucmVtb3ZlKCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1zLmZpbHRlclZpc2libGUoZVtoLm5hbWVdKTtmdW5jdGlvbiBhKGUpe2kuYXV0b01hcmdpbih0LFQoZSkpfXZhciBvPWUuX21lbnVsYXllci5zZWxlY3RBbGwoXCJnLlwiK2guY29udGFpbmVyQ2xhc3NOYW1lKS5kYXRhKHIubGVuZ3RoPjA/WzBdOltdKTtpZihvLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKGguY29udGFpbmVyQ2xhc3NOYW1lLCEwKS5zdHlsZShcImN1cnNvclwiLFwicG9pbnRlclwiKSxvLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKFwiZy5cIitoLmhlYWRlckdyb3VwQ2xhc3NOYW1lKS5lYWNoKGEpfSkucmVtb3ZlKCksMCE9PXIubGVuZ3RoKXt2YXIgbD1vLnNlbGVjdEFsbChcImcuXCIraC5oZWFkZXJHcm91cENsYXNzTmFtZSkuZGF0YShyLHApO2wuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoaC5oZWFkZXJHcm91cENsYXNzTmFtZSwhMCk7Zm9yKHZhciBjPXMuZW5zdXJlU2luZ2xlKG8sXCJnXCIsaC5kcm9wZG93bkJ1dHRvbkdyb3VwQ2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3Quc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpfSksdT0wO3U8ci5sZW5ndGg7dSsrKXt2YXIgeT1yW3VdO0EodCx5KX12YXIgeD1cInVwZGF0ZW1lbnVzXCIrZS5fdWlkLGI9bmV3IGYodCxjLHgpO2wuZW50ZXIoKS5zaXplKCkmJihjLm5vZGUoKS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGMubm9kZSgpKSxjLmNhbGwoUykpLGwuZXhpdCgpLmVhY2goZnVuY3Rpb24odCl7Yy5jYWxsKFMpLGEodCl9KS5yZW1vdmUoKSxsLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksYT1cImRyb3Bkb3duXCI9PT1lLnR5cGU/YzpudWxsO2kubWFuYWdlQ29tbWFuZE9ic2VydmVyKHQsZSxlLmJ1dHRvbnMsZnVuY3Rpb24obil7Zyh0LGUsZS5idXR0b25zW24uaW5kZXhdLHIsYSxiLG4uaW5kZXgsITApfSksXCJkcm9wZG93blwiPT09ZS50eXBlPyh2KHQscixjLGIsZSksZChjLGUpJiZtKHQscixjLGIsZSkpOm0odCxyLG51bGwsbnVsbCxlKX0pfX19LHtcIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIjo2NzMsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIjo3MjUsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vcGxvdHMvcGxvdHNcIjo4MTAsXCIuLi9jb2xvclwiOjU3OCxcIi4uL2RyYXdpbmdcIjo1OTksXCIuL2NvbnN0YW50c1wiOjY2OCxcIi4vc2Nyb2xsYm94XCI6NjcyLGQzOjE1NX1dLDY3MTpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVs2NjVdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se1wiLi9hdHRyaWJ1dGVzXCI6NjY3LFwiLi9jb25zdGFudHNcIjo2NjgsXCIuL2RlZmF1bHRzXCI6NjY5LFwiLi9kcmF3XCI6NjcwLGR1cDo2NjV9XSw2NzI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9czt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vY29sb3JcIiksYT10KFwiLi4vZHJhd2luZ1wiKSxvPXQoXCIuLi8uLi9saWJcIik7ZnVuY3Rpb24gcyh0LGUscil7dGhpcy5nZD10LHRoaXMuY29udGFpbmVyPWUsdGhpcy5pZD1yLHRoaXMucG9zaXRpb249bnVsbCx0aGlzLnRyYW5zbGF0ZVg9bnVsbCx0aGlzLnRyYW5zbGF0ZVk9bnVsbCx0aGlzLmhiYXI9bnVsbCx0aGlzLnZiYXI9bnVsbCx0aGlzLmJnPXRoaXMuY29udGFpbmVyLnNlbGVjdEFsbChcInJlY3Quc2Nyb2xsYm94LWJnXCIpLmRhdGEoWzBdKSx0aGlzLmJnLmV4aXQoKS5vbihcIi5kcmFnXCIsbnVsbCkub24oXCJ3aGVlbFwiLG51bGwpLnJlbW92ZSgpLHRoaXMuYmcuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpLmNsYXNzZWQoXCJzY3JvbGxib3gtYmdcIiwhMCkuc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpLmF0dHIoe29wYWNpdHk6MCx4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9KX1zLmJhcldpZHRoPTIscy5iYXJMZW5ndGg9MjAscy5iYXJSYWRpdXM9MixzLmJhclBhZD0xLHMuYmFyQ29sb3I9XCIjODA4QkE0XCIscy5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbz10aGlzLmdkLl9mdWxsTGF5b3V0LGw9by53aWR0aCxjPW8uaGVpZ2h0O3RoaXMucG9zaXRpb249dDt2YXIgdSxoLGYscCxkPXRoaXMucG9zaXRpb24ubCxnPXRoaXMucG9zaXRpb24udyx2PXRoaXMucG9zaXRpb24udCxtPXRoaXMucG9zaXRpb24uaCx5PXRoaXMucG9zaXRpb24uZGlyZWN0aW9uLHg9XCJkb3duXCI9PT15LGI9XCJsZWZ0XCI9PT15LF89XCJ1cFwiPT09eSx3PWcsaz1tO3h8fGJ8fFwicmlnaHRcIj09PXl8fF98fCh0aGlzLnBvc2l0aW9uLmRpcmVjdGlvbj1cImRvd25cIix4PSEwKSx4fHxfPyhoPSh1PWQpK3cseD8oZj12LGs9KHA9TWF0aC5taW4oZitrLGMpKS1mKTprPShwPXYrayktKGY9TWF0aC5tYXgocC1rLDApKSk6KHA9KGY9dikrayxiP3c9KGg9ZCt3KS0odT1NYXRoLm1heChoLXcsMCkpOih1PWQsdz0oaD1NYXRoLm1pbih1K3csbCkpLXUpKSx0aGlzLl9ib3g9e2w6dSx0OmYsdzp3LGg6a307dmFyIEE9Zz53LFQ9cy5iYXJMZW5ndGgrMipzLmJhclBhZCxNPXMuYmFyV2lkdGgrMipzLmJhclBhZCxTPWQsRT12K207RStNPmMmJihFPWMtTSk7dmFyIEM9dGhpcy5jb250YWluZXIuc2VsZWN0QWxsKFwicmVjdC5zY3JvbGxiYXItaG9yaXpvbnRhbFwiKS5kYXRhKEE/WzBdOltdKTtDLmV4aXQoKS5vbihcIi5kcmFnXCIsbnVsbCkucmVtb3ZlKCksQy5lbnRlcigpLmFwcGVuZChcInJlY3RcIikuY2xhc3NlZChcInNjcm9sbGJhci1ob3Jpem9udGFsXCIsITApLmNhbGwoaS5maWxsLHMuYmFyQ29sb3IpLEE/KHRoaXMuaGJhcj1DLmF0dHIoe3J4OnMuYmFyUmFkaXVzLHJ5OnMuYmFyUmFkaXVzLHg6Uyx5OkUsd2lkdGg6VCxoZWlnaHQ6TX0pLHRoaXMuX2hiYXJYTWluPVMrVC8yLHRoaXMuX2hiYXJUcmFuc2xhdGVNYXg9dy1UKTooZGVsZXRlIHRoaXMuaGJhcixkZWxldGUgdGhpcy5faGJhclhNaW4sZGVsZXRlIHRoaXMuX2hiYXJUcmFuc2xhdGVNYXgpO3ZhciBMPW0+ayx6PXMuYmFyV2lkdGgrMipzLmJhclBhZCxPPXMuYmFyTGVuZ3RoKzIqcy5iYXJQYWQsST1kK2csRD12O0krej5sJiYoST1sLXopO3ZhciBQPXRoaXMuY29udGFpbmVyLnNlbGVjdEFsbChcInJlY3Quc2Nyb2xsYmFyLXZlcnRpY2FsXCIpLmRhdGEoTD9bMF06W10pO1AuZXhpdCgpLm9uKFwiLmRyYWdcIixudWxsKS5yZW1vdmUoKSxQLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKS5jbGFzc2VkKFwic2Nyb2xsYmFyLXZlcnRpY2FsXCIsITApLmNhbGwoaS5maWxsLHMuYmFyQ29sb3IpLEw/KHRoaXMudmJhcj1QLmF0dHIoe3J4OnMuYmFyUmFkaXVzLHJ5OnMuYmFyUmFkaXVzLHg6SSx5OkQsd2lkdGg6eixoZWlnaHQ6T30pLHRoaXMuX3ZiYXJZTWluPUQrTy8yLHRoaXMuX3ZiYXJUcmFuc2xhdGVNYXg9ay1PKTooZGVsZXRlIHRoaXMudmJhcixkZWxldGUgdGhpcy5fdmJhcllNaW4sZGVsZXRlIHRoaXMuX3ZiYXJUcmFuc2xhdGVNYXgpO3ZhciBSPXRoaXMuaWQsRj11LS41LEI9TD9oK3orLjU6aCsuNSxOPWYtLjUsaj1BP3ArTSsuNTpwKy41LFY9by5fdG9wZGVmcy5zZWxlY3RBbGwoXCIjXCIrUikuZGF0YShBfHxMP1swXTpbXSk7aWYoVi5leGl0KCkucmVtb3ZlKCksVi5lbnRlcigpLmFwcGVuZChcImNsaXBQYXRoXCIpLmF0dHIoXCJpZFwiLFIpLmFwcGVuZChcInJlY3RcIiksQXx8TD8odGhpcy5fY2xpcFJlY3Q9Vi5zZWxlY3QoXCJyZWN0XCIpLmF0dHIoe3g6TWF0aC5mbG9vcihGKSx5Ok1hdGguZmxvb3IoTiksd2lkdGg6TWF0aC5jZWlsKEIpLU1hdGguZmxvb3IoRiksaGVpZ2h0Ok1hdGguY2VpbChqKS1NYXRoLmZsb29yKE4pfSksdGhpcy5jb250YWluZXIuY2FsbChhLnNldENsaXBVcmwsUix0aGlzLmdkKSx0aGlzLmJnLmF0dHIoe3g6ZCx5OnYsd2lkdGg6ZyxoZWlnaHQ6bX0pKToodGhpcy5iZy5hdHRyKHt3aWR0aDowLGhlaWdodDowfSksdGhpcy5jb250YWluZXIub24oXCJ3aGVlbFwiLG51bGwpLm9uKFwiLmRyYWdcIixudWxsKS5jYWxsKGEuc2V0Q2xpcFVybCxudWxsKSxkZWxldGUgdGhpcy5fY2xpcFJlY3QpLEF8fEwpe3ZhciBVPW4uYmVoYXZpb3IuZHJhZygpLm9uKFwiZHJhZ3N0YXJ0XCIsZnVuY3Rpb24oKXtuLmV2ZW50LnNvdXJjZUV2ZW50LnByZXZlbnREZWZhdWx0KCl9KS5vbihcImRyYWdcIix0aGlzLl9vbkJveERyYWcuYmluZCh0aGlzKSk7dGhpcy5jb250YWluZXIub24oXCJ3aGVlbFwiLG51bGwpLm9uKFwid2hlZWxcIix0aGlzLl9vbkJveFdoZWVsLmJpbmQodGhpcykpLm9uKFwiLmRyYWdcIixudWxsKS5jYWxsKFUpO3ZhciBxPW4uYmVoYXZpb3IuZHJhZygpLm9uKFwiZHJhZ3N0YXJ0XCIsZnVuY3Rpb24oKXtuLmV2ZW50LnNvdXJjZUV2ZW50LnByZXZlbnREZWZhdWx0KCksbi5ldmVudC5zb3VyY2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKX0pLm9uKFwiZHJhZ1wiLHRoaXMuX29uQmFyRHJhZy5iaW5kKHRoaXMpKTtBJiZ0aGlzLmhiYXIub24oXCIuZHJhZ1wiLG51bGwpLmNhbGwocSksTCYmdGhpcy52YmFyLm9uKFwiLmRyYWdcIixudWxsKS5jYWxsKHEpfXRoaXMuc2V0VHJhbnNsYXRlKGUscil9LHMucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXsodGhpcy5oYmFyfHx0aGlzLnZiYXIpJiYodGhpcy5iZy5hdHRyKHt3aWR0aDowLGhlaWdodDowfSksdGhpcy5jb250YWluZXIub24oXCJ3aGVlbFwiLG51bGwpLm9uKFwiLmRyYWdcIixudWxsKS5jYWxsKGEuc2V0Q2xpcFVybCxudWxsKSxkZWxldGUgdGhpcy5fY2xpcFJlY3QpLHRoaXMuaGJhciYmKHRoaXMuaGJhci5vbihcIi5kcmFnXCIsbnVsbCksdGhpcy5oYmFyLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLmhiYXIsZGVsZXRlIHRoaXMuX2hiYXJYTWluLGRlbGV0ZSB0aGlzLl9oYmFyVHJhbnNsYXRlTWF4KSx0aGlzLnZiYXImJih0aGlzLnZiYXIub24oXCIuZHJhZ1wiLG51bGwpLHRoaXMudmJhci5yZW1vdmUoKSxkZWxldGUgdGhpcy52YmFyLGRlbGV0ZSB0aGlzLl92YmFyWU1pbixkZWxldGUgdGhpcy5fdmJhclRyYW5zbGF0ZU1heCl9LHMucHJvdG90eXBlLl9vbkJveERyYWc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRyYW5zbGF0ZVgsZT10aGlzLnRyYW5zbGF0ZVk7dGhpcy5oYmFyJiYodC09bi5ldmVudC5keCksdGhpcy52YmFyJiYoZS09bi5ldmVudC5keSksdGhpcy5zZXRUcmFuc2xhdGUodCxlKX0scy5wcm90b3R5cGUuX29uQm94V2hlZWw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRyYW5zbGF0ZVgsZT10aGlzLnRyYW5zbGF0ZVk7dGhpcy5oYmFyJiYodCs9bi5ldmVudC5kZWx0YVkpLHRoaXMudmJhciYmKGUrPW4uZXZlbnQuZGVsdGFZKSx0aGlzLnNldFRyYW5zbGF0ZSh0LGUpfSxzLnByb3RvdHlwZS5fb25CYXJEcmFnPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50cmFuc2xhdGVYLGU9dGhpcy50cmFuc2xhdGVZO2lmKHRoaXMuaGJhcil7dmFyIHI9dCt0aGlzLl9oYmFyWE1pbixpPXIrdGhpcy5faGJhclRyYW5zbGF0ZU1heDt0PShvLmNvbnN0cmFpbihuLmV2ZW50LngscixpKS1yKS8oaS1yKSoodGhpcy5wb3NpdGlvbi53LXRoaXMuX2JveC53KX1pZih0aGlzLnZiYXIpe3ZhciBhPWUrdGhpcy5fdmJhcllNaW4scz1hK3RoaXMuX3ZiYXJUcmFuc2xhdGVNYXg7ZT0oby5jb25zdHJhaW4obi5ldmVudC55LGEscyktYSkvKHMtYSkqKHRoaXMucG9zaXRpb24uaC10aGlzLl9ib3guaCl9dGhpcy5zZXRUcmFuc2xhdGUodCxlKX0scy5wcm90b3R5cGUuc2V0VHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5wb3NpdGlvbi53LXRoaXMuX2JveC53LG49dGhpcy5wb3NpdGlvbi5oLXRoaXMuX2JveC5oO2lmKHQ9by5jb25zdHJhaW4odHx8MCwwLHIpLGU9by5jb25zdHJhaW4oZXx8MCwwLG4pLHRoaXMudHJhbnNsYXRlWD10LHRoaXMudHJhbnNsYXRlWT1lLHRoaXMuY29udGFpbmVyLmNhbGwoYS5zZXRUcmFuc2xhdGUsdGhpcy5fYm94LmwtdGhpcy5wb3NpdGlvbi5sLXQsdGhpcy5fYm94LnQtdGhpcy5wb3NpdGlvbi50LWUpLHRoaXMuX2NsaXBSZWN0JiZ0aGlzLl9jbGlwUmVjdC5hdHRyKHt4Ok1hdGguZmxvb3IodGhpcy5wb3NpdGlvbi5sK3QtLjUpLHk6TWF0aC5mbG9vcih0aGlzLnBvc2l0aW9uLnQrZS0uNSl9KSx0aGlzLmhiYXIpe3ZhciBpPXQvcjt0aGlzLmhiYXIuY2FsbChhLnNldFRyYW5zbGF0ZSx0K2kqdGhpcy5faGJhclRyYW5zbGF0ZU1heCxlKX1pZih0aGlzLnZiYXIpe3ZhciBzPWUvbjt0aGlzLnZiYXIuY2FsbChhLnNldFRyYW5zbGF0ZSx0LGUrcyp0aGlzLl92YmFyVHJhbnNsYXRlTWF4KX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9jb2xvclwiOjU3OCxcIi4uL2RyYXdpbmdcIjo1OTksZDM6MTU1fV0sNjczOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtGUk9NX0JMOntsZWZ0OjAsY2VudGVyOi41LHJpZ2h0OjEsYm90dG9tOjAsbWlkZGxlOi41LHRvcDoxfSxGUk9NX1RMOntsZWZ0OjAsY2VudGVyOi41LHJpZ2h0OjEsYm90dG9tOjEsbWlkZGxlOi41LHRvcDowfSxGUk9NX0JSOntsZWZ0OjEsY2VudGVyOi41LHJpZ2h0OjAsYm90dG9tOjAsbWlkZGxlOi41LHRvcDoxfSxMSU5FX1NQQUNJTkc6MS4zLENBUF9TSElGVDouNyxNSURfU0hJRlQ6LjM1LE9QUE9TSVRFX1NJREU6e2xlZnQ6XCJyaWdodFwiLHJpZ2h0OlwibGVmdFwiLHRvcDpcImJvdHRvbVwiLGJvdHRvbTpcInRvcFwifX19LHt9XSw2NzQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e0NPTVBBUklTT05fT1BTOltcIj1cIixcIiE9XCIsXCI8XCIsXCI+PVwiLFwiPlwiLFwiPD1cIl0sQ09NUEFSSVNPTl9PUFMyOltcIj1cIixcIjxcIixcIj49XCIsXCI+XCIsXCI8PVwiXSxJTlRFUlZBTF9PUFM6W1wiW11cIixcIigpXCIsXCJbKVwiLFwiKF1cIixcIl1bXCIsXCIpKFwiLFwiXShcIixcIilbXCJdLFNFVF9PUFM6W1wie31cIixcIn17XCJdLENPTlNUUkFJTlRfUkVEVUNUSU9OOntcIj1cIjpcIj1cIixcIjxcIjpcIjxcIixcIjw9XCI6XCI8XCIsXCI+XCI6XCI+XCIsXCI+PVwiOlwiPlwiLFwiW11cIjpcIltdXCIsXCIoKVwiOlwiW11cIixcIlspXCI6XCJbXVwiLFwiKF1cIjpcIltdXCIsXCJdW1wiOlwiXVtcIixcIikoXCI6XCJdW1wiLFwiXShcIjpcIl1bXCIsXCIpW1wiOlwiXVtcIn19fSx7fV0sNjc1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtzb2xpZDpbW10sMF0sZG90OltbLjUsMV0sMjAwXSxkYXNoOltbLjUsMV0sNTBdLGxvbmdkYXNoOltbLjUsMV0sMTBdLGRhc2hkb3Q6W1suNSwuNjI1LC44NzUsMV0sNTBdLGxvbmdkYXNoZG90OltbLjUsLjcsLjgsMV0sMTBdfX0se31dLDY3NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17Y2lyY2xlOlwiXFx1MjVjZlwiLFwiY2lyY2xlLW9wZW5cIjpcIlxcdTI1Y2JcIixzcXVhcmU6XCJcXHUyNWEwXCIsXCJzcXVhcmUtb3BlblwiOlwiXFx1MjVhMVwiLGRpYW1vbmQ6XCJcXHUyNWM2XCIsXCJkaWFtb25kLW9wZW5cIjpcIlxcdTI1YzdcIixjcm9zczpcIitcIix4OlwiXFx1Mjc0Y1wifX0se31dLDY3NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17U0hPV19QTEFDRUhPTERFUjoxMDAsSElERV9QTEFDRUhPTERFUjoxZTMsREJMQ0xJQ0tERUxBWTozMDAsREVTRUxFQ1RESU06LjJ9fSx7fV0sNjc4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtCQUROVU06dm9pZCAwLEZQX1NBRkU6TnVtYmVyLk1BWF9WQUxVRS8xZTQsT05FQVZHWUVBUjozMTU1NzZlNSxPTkVBVkdNT05USDoyNjI5OGU1LE9ORURBWTo4NjRlNSxPTkVIT1VSOjM2ZTUsT05FTUlOOjZlNCxPTkVTRUM6MWUzLEVQT0NISkQ6MjQ0MDU4Ny41LEFMTU9TVF9FUVVBTDoxLTFlLTYsTE9HX0NMSVA6MTAsTUlOVVNfU0lHTjpcIlxcdTIyMTJcIn19LHt9XSw2Nzk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLnhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy9cIixyLnN2Zz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsci54bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixyLnN2Z0F0dHJzPXt4bWxuczpyLnN2ZyxcInhtbG5zOnhsaW5rXCI6ci54bGlua319LHt9XSw2ODA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLnZlcnNpb249XCIxLjQ3LjFcIix0KFwiZXM2LXByb21pc2VcIikucG9seWZpbGwoKSx0KFwiLi4vYnVpbGQvcGxvdGNzc1wiKSx0KFwiLi9mb250cy9tYXRoamF4X2NvbmZpZ1wiKSgpO2Zvcih2YXIgbj10KFwiLi9yZWdpc3RyeVwiKSxpPXIucmVnaXN0ZXI9bi5yZWdpc3RlcixhPXQoXCIuL3Bsb3RfYXBpXCIpLG89T2JqZWN0LmtleXMoYSkscz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdO1wiX1wiIT09bC5jaGFyQXQoMCkmJihyW2xdPWFbbF0pLGkoe21vZHVsZVR5cGU6XCJhcGlNZXRob2RcIixuYW1lOmwsZm46YVtsXX0pfWkodChcIi4vdHJhY2VzL3NjYXR0ZXJcIikpLGkoW3QoXCIuL2NvbXBvbmVudHMvZnhcIiksdChcIi4vY29tcG9uZW50cy9sZWdlbmRcIiksdChcIi4vY29tcG9uZW50cy9hbm5vdGF0aW9uc1wiKSx0KFwiLi9jb21wb25lbnRzL2Fubm90YXRpb25zM2RcIiksdChcIi4vY29tcG9uZW50cy9zaGFwZXNcIiksdChcIi4vY29tcG9uZW50cy9pbWFnZXNcIiksdChcIi4vY29tcG9uZW50cy91cGRhdGVtZW51c1wiKSx0KFwiLi9jb21wb25lbnRzL3NsaWRlcnNcIiksdChcIi4vY29tcG9uZW50cy9yYW5nZXNsaWRlclwiKSx0KFwiLi9jb21wb25lbnRzL3Jhbmdlc2VsZWN0b3JcIiksdChcIi4vY29tcG9uZW50cy9ncmlkXCIpLHQoXCIuL2NvbXBvbmVudHMvZXJyb3JiYXJzXCIpLHQoXCIuL2NvbXBvbmVudHMvY29sb3JzY2FsZVwiKV0pLGkoW3QoXCIuL2xvY2FsZS1lblwiKSx0KFwiLi9sb2NhbGUtZW4tdXNcIildKSxyLkljb25zPXQoXCIuLi9idWlsZC9wbG90aWNvblwiKSxyLlBsb3RzPXQoXCIuL3Bsb3RzL3Bsb3RzXCIpLHIuRng9dChcIi4vY29tcG9uZW50cy9meFwiKSxyLlNuYXBzaG90PXQoXCIuL3NuYXBzaG90XCIpLHIuUGxvdFNjaGVtYT10KFwiLi9wbG90X2FwaS9wbG90X3NjaGVtYVwiKSxyLlF1ZXVlPXQoXCIuL2xpYi9xdWV1ZVwiKSxyLmQzPXQoXCJkM1wiKX0se1wiLi4vYnVpbGQvcGxvdGNzc1wiOjEsXCIuLi9idWlsZC9wbG90aWNvblwiOjIsXCIuL2NvbXBvbmVudHMvYW5ub3RhdGlvbnNcIjo1NjksXCIuL2NvbXBvbmVudHMvYW5ub3RhdGlvbnMzZFwiOjU3NCxcIi4vY29tcG9uZW50cy9jb2xvcnNjYWxlXCI6NTkwLFwiLi9jb21wb25lbnRzL2Vycm9yYmFyc1wiOjYwNSxcIi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4vY29tcG9uZW50cy9ncmlkXCI6NjIxLFwiLi9jb21wb25lbnRzL2ltYWdlc1wiOjYyNixcIi4vY29tcG9uZW50cy9sZWdlbmRcIjo2MzQsXCIuL2NvbXBvbmVudHMvcmFuZ2VzZWxlY3RvclwiOjY0NSxcIi4vY29tcG9uZW50cy9yYW5nZXNsaWRlclwiOjY1MixcIi4vY29tcG9uZW50cy9zaGFwZXNcIjo2NjAsXCIuL2NvbXBvbmVudHMvc2xpZGVyc1wiOjY2NSxcIi4vY29tcG9uZW50cy91cGRhdGVtZW51c1wiOjY3MSxcIi4vZm9udHMvbWF0aGpheF9jb25maWdcIjo2ODEsXCIuL2xpYi9xdWV1ZVwiOjcxNixcIi4vbG9jYWxlLWVuXCI6NzMwLFwiLi9sb2NhbGUtZW4tdXNcIjo3MjksXCIuL3Bsb3RfYXBpXCI6NzM0LFwiLi9wbG90X2FwaS9wbG90X3NjaGVtYVwiOjczOCxcIi4vcGxvdHMvcGxvdHNcIjo4MTAsXCIuL3JlZ2lzdHJ5XCI6ODI5LFwiLi9zbmFwc2hvdFwiOjgzNCxcIi4vdHJhY2VzL3NjYXR0ZXJcIjoxMDY0LGQzOjE1NSxcImVzNi1wcm9taXNlXCI6MjExfV0sNjgxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIE1hdGhKYXgmJihcImxvY2FsXCIhPT0od2luZG93LlBsb3RseUNvbmZpZ3x8e30pLk1hdGhKYXhDb25maWcmJihNYXRoSmF4Lkh1Yi5Db25maWcoe21lc3NhZ2VTdHlsZTpcIm5vbmVcIixza2lwU3RhcnR1cFR5cGVzZXQ6ITAsZGlzcGxheUFsaWduOlwibGVmdFwiLHRleDJqYXg6e2lubGluZU1hdGg6W1tcIiRcIixcIiRcIl0sW1wiXFxcXChcIixcIlxcXFwpXCJdXX19KSxNYXRoSmF4Lkh1Yi5Db25maWd1cmVkKCkpKX19LHt9XSw2ODI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLmlzTGVmdEFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm5cImxlZnRcIj09PXQueGFuY2hvcnx8XCJhdXRvXCI9PT10LnhhbmNob3ImJnQueDw9MS8zfSxyLmlzQ2VudGVyQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVyblwiY2VudGVyXCI9PT10LnhhbmNob3J8fFwiYXV0b1wiPT09dC54YW5jaG9yJiZ0Lng+MS8zJiZ0Lng8Mi8zfSxyLmlzUmlnaHRBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuXCJyaWdodFwiPT09dC54YW5jaG9yfHxcImF1dG9cIj09PXQueGFuY2hvciYmdC54Pj0yLzN9LHIuaXNUb3BBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuXCJ0b3BcIj09PXQueWFuY2hvcnx8XCJhdXRvXCI9PT10LnlhbmNob3ImJnQueT49Mi8zfSxyLmlzTWlkZGxlQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVyblwibWlkZGxlXCI9PT10LnlhbmNob3J8fFwiYXV0b1wiPT09dC55YW5jaG9yJiZ0Lnk+MS8zJiZ0Lnk8Mi8zfSxyLmlzQm90dG9tQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVyblwiYm90dG9tXCI9PT10LnlhbmNob3J8fFwiYXV0b1wiPT09dC55YW5jaG9yJiZ0Lnk8PTEvM319LHt9XSw2ODM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9tb2RcIiksaT1uLm1vZCxhPW4ubW9kSGFsZixvPU1hdGguUEkscz0yKm87ZnVuY3Rpb24gbCh0KXtyZXR1cm4gTWF0aC5hYnModFsxXS10WzBdKT5zLTFlLTE0fWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gYShlLXQscyl9ZnVuY3Rpb24gdSh0LGUpe2lmKGwoZSkpcmV0dXJuITA7dmFyIHIsbjtlWzBdPGVbMV0/KHI9ZVswXSxuPWVbMV0pOihyPWVbMV0sbj1lWzBdKSwocj1pKHIscykpPihuPWkobixzKSkmJihuKz1zKTt2YXIgYT1pKHQscyksbz1hK3M7cmV0dXJuIGE+PXImJmE8PW58fG8+PXImJm88PW59ZnVuY3Rpb24gaCh0LGUscixuLGksYSxjKXtpPWl8fDAsYT1hfHwwO3ZhciB1LGgsZixwLGQsZz1sKFtyLG5dKTtmdW5jdGlvbiB2KHQsZSl7cmV0dXJuW3QqTWF0aC5jb3MoZSkraSxhLXQqTWF0aC5zaW4oZSldfWc/KHU9MCxoPW8sZj1zKTpyPG4/KHU9cixmPW4pOih1PW4sZj1yKSx0PGU/KHA9dCxkPWUpOihwPWUsZD10KTt2YXIgbSx5PU1hdGguYWJzKGYtdSk8PW8/MDoxO2Z1bmN0aW9uIHgodCxlLHIpe3JldHVyblwiQVwiK1t0LHRdK1wiIFwiK1swLHkscl0rXCIgXCIrdih0LGUpfXJldHVybiBnP209bnVsbD09PXA/XCJNXCIrdihkLHUpK3goZCxoLDApK3goZCxmLDApK1wiWlwiOlwiTVwiK3YocCx1KSt4KHAsaCwwKSt4KHAsZiwwKStcIlpNXCIrdihkLHUpK3goZCxoLDEpK3goZCxmLDEpK1wiWlwiOm51bGw9PT1wPyhtPVwiTVwiK3YoZCx1KSt4KGQsZiwwKSxjJiYobSs9XCJMMCwwWlwiKSk6bT1cIk1cIit2KHAsdSkrXCJMXCIrdihkLHUpK3goZCxmLDApK1wiTFwiK3YocCxmKSt4KHAsdSwxKStcIlpcIixtfWUuZXhwb3J0cz17ZGVnMnJhZDpmdW5jdGlvbih0KXtyZXR1cm4gdC8xODAqb30scmFkMmRlZzpmdW5jdGlvbih0KXtyZXR1cm4gdC9vKjE4MH0sYW5nbGVEZWx0YTpjLGFuZ2xlRGlzdDpmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmFicyhjKHQsZSkpfSxpc0Z1bGxDaXJjbGU6bCxpc0FuZ2xlSW5zaWRlU2VjdG9yOnUsaXNQdEluc2lkZVNlY3RvcjpmdW5jdGlvbih0LGUscixuKXtyZXR1cm4hIXUoZSxuKSYmKHJbMF08clsxXT8oaT1yWzBdLGE9clsxXSk6KGk9clsxXSxhPXJbMF0pLHQ+PWkmJnQ8PWEpO3ZhciBpLGF9LHBhdGhBcmM6ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gaChudWxsLHQsZSxyLG4saSwwKX0scGF0aFNlY3RvcjpmdW5jdGlvbih0LGUscixuLGkpe3JldHVybiBoKG51bGwsdCxlLHIsbixpLDEpfSxwYXRoQW5udWx1czpmdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuIGgodCxlLHIsbixpLGEsMSl9fX0se1wiLi9tb2RcIjo3MDh9XSw2ODQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1BcnJheS5pc0FycmF5LGk9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXI6e2lzVmlldzpmdW5jdGlvbigpe3JldHVybiExfX0sYT1cInVuZGVmaW5lZFwiPT10eXBlb2YgRGF0YVZpZXc/ZnVuY3Rpb24oKXt9OkRhdGFWaWV3O2Z1bmN0aW9uIG8odCl7cmV0dXJuIGkuaXNWaWV3KHQpJiYhKHQgaW5zdGFuY2VvZiBhKX1mdW5jdGlvbiBzKHQpe3JldHVybiBuKHQpfHxvKHQpfWZ1bmN0aW9uIGwodCxlLHIpe2lmKHModCkpe2lmKHModFswXSkpe2Zvcih2YXIgbj1yLGk9MDtpPHQubGVuZ3RoO2krKyluPWUobix0W2ldLmxlbmd0aCk7cmV0dXJuIG59cmV0dXJuIHQubGVuZ3RofXJldHVybiAwfXIuaXNUeXBlZEFycmF5PW8sci5pc0FycmF5T3JUeXBlZEFycmF5PXMsci5pc0FycmF5MUQ9ZnVuY3Rpb24odCl7cmV0dXJuIXModFswXSl9LHIuZW5zdXJlQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0KXx8KHQ9W10pLHQubGVuZ3RoPWUsdH0sci5jb25jYXQ9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsaSxhLG8scyxsLGM9W10sdT0hMCxoPTA7Zm9yKHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKShvPShpPWFyZ3VtZW50c1tyXSkubGVuZ3RoKSYmKGU/Yy5wdXNoKGkpOihlPWksYT1vKSxuKGkpP3Q9ITE6KHU9ITEsaD90IT09aS5jb25zdHJ1Y3RvciYmKHQ9ITEpOnQ9aS5jb25zdHJ1Y3RvciksaCs9byk7aWYoIWgpcmV0dXJuW107aWYoIWMubGVuZ3RoKXJldHVybiBlO2lmKHUpcmV0dXJuIGUuY29uY2F0LmFwcGx5KGUsYyk7aWYodCl7Zm9yKChzPW5ldyB0KGgpKS5zZXQoZSkscj0wO3I8Yy5sZW5ndGg7cisrKWk9Y1tyXSxzLnNldChpLGEpLGErPWkubGVuZ3RoO3JldHVybiBzfWZvcihzPW5ldyBBcnJheShoKSxsPTA7bDxlLmxlbmd0aDtsKyspc1tsXT1lW2xdO2ZvcihyPTA7cjxjLmxlbmd0aDtyKyspe2ZvcihpPWNbcl0sbD0wO2w8aS5sZW5ndGg7bCsrKXNbYStsXT1pW2xdO2ErPWx9cmV0dXJuIHN9LHIubWF4Um93TGVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsTWF0aC5tYXgsMCl9LHIubWluUm93TGVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsTWF0aC5taW4sMS8wKX19LHt9XSw2ODU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKS5CQUROVU0sYT0vXlsnXCIlLCQjXFxzJ10rfFssIF18WydcIiUsJCNcXHMnXSskL2c7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD10LnJlcGxhY2UoYSxcIlwiKSksbih0KT9OdW1iZXIodCk6aX19LHtcIi4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDY4NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2UuX2dsY2FudmFzJiZlLl9nbGNhbnZhcy5zaXplKCkmJmUuX2dsY2FudmFzLmVhY2goZnVuY3Rpb24odCl7dC5yZWdsJiZ0LnJlZ2wuY2xlYXIoe2NvbG9yOiEwLGRlcHRoOiEwfSl9KX19LHt9XSw2ODc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlciYmKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlciksZGVsZXRlIHQuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXIpfX0se31dLDY4ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCJ0aW55Y29sb3IyXCIpLGE9dChcIi4uL3Bsb3RzL2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL3NjYWxlc1wiKSxzPXQoXCIuLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zXCIpLkRFU0VMRUNURElNLGw9dChcIi4vbmVzdGVkX3Byb3BlcnR5XCIpLGM9dChcIi4vcmVnZXhcIikuY291bnRlcix1PXQoXCIuL21vZFwiKS5tb2RIYWxmLGg9dChcIi4vYXJyYXlcIikuaXNBcnJheU9yVHlwZWRBcnJheTtmdW5jdGlvbiBmKHQsZSl7dmFyIG49ci52YWxPYmplY3RNZXRhW2UudmFsVHlwZV07aWYoZS5hcnJheU9rJiZoKHQpKXJldHVybiEwO2lmKG4udmFsaWRhdGVGdW5jdGlvbilyZXR1cm4gbi52YWxpZGF0ZUZ1bmN0aW9uKHQsZSk7dmFyIGk9e30sYT1pLG89e3NldDpmdW5jdGlvbih0KXthPXR9fTtyZXR1cm4gbi5jb2VyY2VGdW5jdGlvbih0LG8saSxlKSxhIT09aX1yLnZhbE9iamVjdE1ldGE9e2RhdGFfYXJyYXk6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtoKHQpP2Uuc2V0KHQpOnZvaWQgMCE9PXImJmUuc2V0KHIpfX0sZW51bWVyYXRlZDp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsbil7bi5jb2VyY2VOdW1iZXImJih0PSt0KSwtMT09PW4udmFsdWVzLmluZGV4T2YodCk/ZS5zZXQocik6ZS5zZXQodCl9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24odCxlKXtlLmNvZXJjZU51bWJlciYmKHQ9K3QpO2Zvcih2YXIgcj1lLnZhbHVlcyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPVN0cmluZyhyW25dKTtpZihcIi9cIj09PWkuY2hhckF0KDApJiZcIi9cIj09PWkuY2hhckF0KGkubGVuZ3RoLTEpKXtpZihuZXcgUmVnRXhwKGkuc3Vic3RyKDEsaS5sZW5ndGgtMikpLnRlc3QodCkpcmV0dXJuITB9ZWxzZSBpZih0PT09cltuXSlyZXR1cm4hMH1yZXR1cm4hMX19LGJvb2xlYW46e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXshMD09PXR8fCExPT09dD9lLnNldCh0KTplLnNldChyKX19LG51bWJlcjp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsaSl7IW4odCl8fHZvaWQgMCE9PWkubWluJiZ0PGkubWlufHx2b2lkIDAhPT1pLm1heCYmdD5pLm1heD9lLnNldChyKTplLnNldCgrdCl9fSxpbnRlZ2VyOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixpKXt0JTF8fCFuKHQpfHx2b2lkIDAhPT1pLm1pbiYmdDxpLm1pbnx8dm9pZCAwIT09aS5tYXgmJnQ+aS5tYXg/ZS5zZXQocik6ZS5zZXQoK3QpfX0sc3RyaW5nOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixuKXtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl7dmFyIGk9XCJudW1iZXJcIj09dHlwZW9mIHQ7ITAhPT1uLnN0cmljdCYmaT9lLnNldChTdHJpbmcodCkpOmUuc2V0KHIpfWVsc2Ugbi5ub0JsYW5rJiYhdD9lLnNldChyKTplLnNldCh0KX19LGNvbG9yOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7aSh0KS5pc1ZhbGlkKCk/ZS5zZXQodCk6ZS5zZXQocil9fSxjb2xvcmxpc3Q6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aCYmdC5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4gaSh0KS5pc1ZhbGlkKCl9KT9lLnNldCh0KTplLnNldChyKX19LGNvbG9yc2NhbGU6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtlLnNldChvLmdldCh0LHIpKX19LGFuZ2xlOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7XCJhdXRvXCI9PT10P2Uuc2V0KFwiYXV0b1wiKTpuKHQpP2Uuc2V0KHUoK3QsMzYwKSk6ZS5zZXQocil9fSxzdWJwbG90aWQ6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4ucmVnZXh8fGMocik7XCJzdHJpbmdcIj09dHlwZW9mIHQmJmkudGVzdCh0KT9lLnNldCh0KTplLnNldChyKX0sdmFsaWRhdGVGdW5jdGlvbjpmdW5jdGlvbih0LGUpe3ZhciByPWUuZGZsdDtyZXR1cm4gdD09PXJ8fFwic3RyaW5nXCI9PXR5cGVvZiB0JiYhIWMocikudGVzdCh0KX19LGZsYWdsaXN0Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixuKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdClpZigtMT09PShuLmV4dHJhc3x8W10pLmluZGV4T2YodCkpe2Zvcih2YXIgaT10LnNwbGl0KFwiK1wiKSxhPTA7YTxpLmxlbmd0aDspe3ZhciBvPWlbYV07LTE9PT1uLmZsYWdzLmluZGV4T2Yobyl8fGkuaW5kZXhPZihvKTxhP2kuc3BsaWNlKGEsMSk6YSsrfWkubGVuZ3RoP2Uuc2V0KGkuam9pbihcIitcIikpOmUuc2V0KHIpfWVsc2UgZS5zZXQodCk7ZWxzZSBlLnNldChyKX19LGFueTp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpe3ZvaWQgMD09PXQ/ZS5zZXQocik6ZS5zZXQodCl9fSxpbmZvX2FycmF5Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUsbixpKXtmdW5jdGlvbiBhKHQsZSxuKXt2YXIgaSxhPXtzZXQ6ZnVuY3Rpb24odCl7aT10fX07cmV0dXJuIHZvaWQgMD09PW4mJihuPWUuZGZsdCksci52YWxPYmplY3RNZXRhW2UudmFsVHlwZV0uY29lcmNlRnVuY3Rpb24odCxhLG4sZSksaX12YXIgbz0yPT09aS5kaW1lbnNpb25zfHxcIjEtMlwiPT09aS5kaW1lbnNpb25zJiZBcnJheS5pc0FycmF5KHQpJiZBcnJheS5pc0FycmF5KHRbMF0pO2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBzLGwsYyx1LGgsZixwPWkuaXRlbXMsZD1bXSxnPUFycmF5LmlzQXJyYXkocCksdj1nJiZvJiZBcnJheS5pc0FycmF5KHBbMF0pLG09byYmZyYmIXYseT1nJiYhbT9wLmxlbmd0aDp0Lmxlbmd0aDtpZihuPUFycmF5LmlzQXJyYXkobik/bjpbXSxvKWZvcihzPTA7czx5O3MrKylmb3IoZFtzXT1bXSxjPUFycmF5LmlzQXJyYXkodFtzXSk/dFtzXTpbXSxoPW0/cC5sZW5ndGg6Zz9wW3NdLmxlbmd0aDpjLmxlbmd0aCxsPTA7bDxoO2wrKyl1PW0/cFtsXTpnP3Bbc11bbF06cCx2b2lkIDAhPT0oZj1hKGNbbF0sdSwobltzXXx8W10pW2xdKSkmJihkW3NdW2xdPWYpO2Vsc2UgZm9yKHM9MDtzPHk7cysrKXZvaWQgMCE9PShmPWEodFtzXSxnP3Bbc106cCxuW3NdKSkmJihkW3NdPWYpO2Uuc2V0KGQpfWVsc2UgZS5zZXQobil9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24odCxlKXtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4hMTt2YXIgcj1lLml0ZW1zLG49QXJyYXkuaXNBcnJheShyKSxpPTI9PT1lLmRpbWVuc2lvbnM7aWYoIWUuZnJlZUxlbmd0aCYmdC5sZW5ndGghPT1yLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKylpZihpKXtpZighQXJyYXkuaXNBcnJheSh0W2FdKXx8IWUuZnJlZUxlbmd0aCYmdFthXS5sZW5ndGghPT1yW2FdLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG89MDtvPHRbYV0ubGVuZ3RoO28rKylpZighZih0W2FdW29dLG4/clthXVtvXTpyKSlyZXR1cm4hMX1lbHNlIGlmKCFmKHRbYV0sbj9yW2FdOnIpKXJldHVybiExO3JldHVybiEwfX19LHIuY29lcmNlPWZ1bmN0aW9uKHQsZSxuLGksYSl7dmFyIG89bChuLGkpLmdldCgpLHM9bCh0LGkpLGM9bChlLGkpLHU9cy5nZXQoKSxwPWUuX3RlbXBsYXRlO2lmKHZvaWQgMD09PXUmJnAmJih1PWwocCxpKS5nZXQoKSxwPTApLHZvaWQgMD09PWEmJihhPW8uZGZsdCksby5hcnJheU9rJiZoKHUpKXJldHVybiBjLnNldCh1KSx1O3ZhciBkPXIudmFsT2JqZWN0TWV0YVtvLnZhbFR5cGVdLmNvZXJjZUZ1bmN0aW9uO2QodSxjLGEsbyk7dmFyIGc9Yy5nZXQoKTtyZXR1cm4gcCYmZz09PWEmJiFmKHUsbykmJihkKHU9bChwLGkpLmdldCgpLGMsYSxvKSxnPWMuZ2V0KCkpLGd9LHIuY29lcmNlMj1mdW5jdGlvbih0LGUsbixpLGEpe3ZhciBvPWwodCxpKSxzPXIuY29lcmNlKHQsZSxuLGksYSksYz1vLmdldCgpO3JldHVybiBudWxsIT1jJiZzfSxyLmNvZXJjZUZvbnQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXt9O3JldHVybiByPXJ8fHt9LG4uZmFtaWx5PXQoZStcIi5mYW1pbHlcIixyLmZhbWlseSksbi5zaXplPXQoZStcIi5zaXplXCIsci5zaXplKSxuLmNvbG9yPXQoZStcIi5jb2xvclwiLHIuY29sb3IpLG59LHIuY29lcmNlSG92ZXJpbmZvPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxvPWUuX21vZHVsZS5hdHRyaWJ1dGVzLHM9by5ob3ZlcmluZm8/bzphLGw9cy5ob3ZlcmluZm87aWYoMT09PW4uX2RhdGFMZW5ndGgpe3ZhciBjPVwiYWxsXCI9PT1sLmRmbHQ/bC5mbGFncy5zbGljZSgpOmwuZGZsdC5zcGxpdChcIitcIik7Yy5zcGxpY2UoYy5pbmRleE9mKFwibmFtZVwiKSwxKSxpPWMuam9pbihcIitcIil9cmV0dXJuIHIuY29lcmNlKHQsZSxzLFwiaG92ZXJpbmZvXCIsaSl9LHIuY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eT1mdW5jdGlvbih0LGUpe2lmKHQubWFya2VyKXt2YXIgcixuLGk9dC5tYXJrZXIub3BhY2l0eTtpZih2b2lkIDAhPT1pKWgoaSl8fHQuc2VsZWN0ZWR8fHQudW5zZWxlY3RlZHx8KHI9aSxuPXMqaSksZShcInNlbGVjdGVkLm1hcmtlci5vcGFjaXR5XCIsciksZShcInVuc2VsZWN0ZWQubWFya2VyLm9wYWNpdHlcIixuKX19LHIudmFsaWRhdGU9Zn0se1wiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL3NjYWxlc1wiOjU5MyxcIi4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnNcIjo2NzcsXCIuLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi9hcnJheVwiOjY4NCxcIi4vbW9kXCI6NzA4LFwiLi9uZXN0ZWRfcHJvcGVydHlcIjo3MDksXCIuL3JlZ2V4XCI6NzE3LFwiZmFzdC1pc251bWVyaWNcIjoyMjIsdGlueWNvbG9yMjo1MjJ9XSw2ODk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbixpLGE9dChcImQzXCIpLG89dChcImZhc3QtaXNudW1lcmljXCIpLHM9dChcIi4vbG9nZ2Vyc1wiKSxsPXQoXCIuL21vZFwiKS5tb2QsYz10KFwiLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKSx1PWMuQkFETlVNLGg9Yy5PTkVEQVksZj1jLk9ORUhPVVIscD1jLk9ORU1JTixkPWMuT05FU0VDLGc9Yy5FUE9DSEpELHY9dChcIi4uL3JlZ2lzdHJ5XCIpLG09YS50aW1lLmZvcm1hdC51dGMseT0vXlxccyooLT9cXGRcXGRcXGRcXGR8XFxkXFxkKSgtKFxcZD9cXGQpKC0oXFxkP1xcZCkoWyBUdF0oWzAxXT9cXGR8MlswLTNdKSg6KFswLTVdXFxkKSg6KFswLTVdXFxkKFxcLlxcZCspPykpPyhafHp8WytcXC1dXFxkXFxkOj9cXGRcXGQpPyk/KT8pPyk/XFxzKiQvbSx4PS9eXFxzKigtP1xcZFxcZFxcZFxcZHxcXGRcXGQpKC0oXFxkP1xcZGk/KSgtKFxcZD9cXGQpKFsgVHRdKFswMV0/XFxkfDJbMC0zXSkoOihbMC01XVxcZCkoOihbMC01XVxcZChcXC5cXGQrKT8pKT8oWnx6fFsrXFwtXVxcZFxcZDo/XFxkXFxkKT8pPyk/KT8pP1xccyokL20sYj0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCktNzA7ZnVuY3Rpb24gXyh0KXtyZXR1cm4gdCYmdi5jb21wb25lbnRzUmVnaXN0cnkuY2FsZW5kYXJzJiZcInN0cmluZ1wiPT10eXBlb2YgdCYmXCJncmVnb3JpYW5cIiE9PXR9ZnVuY3Rpb24gdyh0LGUpe3JldHVybiBTdHJpbmcodCtNYXRoLnBvdygxMCxlKSkuc3Vic3RyKDEpfXIuZGF0ZVRpY2swPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIF8odCk/ZT92LmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiQ0FOT05JQ0FMX1NVTkRBWVwiKVt0XTp2LmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiQ0FOT05JQ0FMX1RJQ0tcIilbdF06ZT9cIjIwMDAtMDEtMDJcIjpcIjIwMDAtMDEtMDFcIn0sci5kZmx0UmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIF8odCk/di5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcIkRGTFRSQU5HRVwiKVt0XTpbXCIyMDAwLTAxLTAxXCIsXCIyMDAxLTAxLTAxXCJdfSxyLmlzSlNEYXRlPWZ1bmN0aW9uKHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0JiZudWxsIT09dCYmXCJmdW5jdGlvblwiPT10eXBlb2YgdC5nZXRUaW1lfSxyLmRhdGVUaW1lMm1zPWZ1bmN0aW9uKHQsZSl7aWYoci5pc0pTRGF0ZSh0KSl7dmFyIGE9dC5nZXRUaW1lem9uZU9mZnNldCgpKnAsbz0odC5nZXRVVENNaW51dGVzKCktdC5nZXRNaW51dGVzKCkpKnArKHQuZ2V0VVRDU2Vjb25kcygpLXQuZ2V0U2Vjb25kcygpKSpkKyh0LmdldFVUQ01pbGxpc2Vjb25kcygpLXQuZ2V0TWlsbGlzZWNvbmRzKCkpO2lmKG8pe3ZhciBzPTMqcDthPWEtcy8yK2woby1hK3MvMixzKX1yZXR1cm4odD1OdW1iZXIodCktYSk+PW4mJnQ8PWk/dDp1fWlmKFwic3RyaW5nXCIhPXR5cGVvZiB0JiZcIm51bWJlclwiIT10eXBlb2YgdClyZXR1cm4gdTt0PVN0cmluZyh0KTt2YXIgYz1fKGUpLG09dC5jaGFyQXQoMCk7IWN8fFwiR1wiIT09bSYmXCJnXCIhPT1tfHwodD10LnN1YnN0cigxKSxlPVwiXCIpO3ZhciB3PWMmJlwiY2hpbmVzZVwiPT09ZS5zdWJzdHIoMCw3KSxrPXQubWF0Y2godz94OnkpO2lmKCFrKXJldHVybiB1O3ZhciBBPWtbMV0sVD1rWzNdfHxcIjFcIixNPU51bWJlcihrWzVdfHwxKSxTPU51bWJlcihrWzddfHwwKSxFPU51bWJlcihrWzldfHwwKSxDPU51bWJlcihrWzExXXx8MCk7aWYoYyl7aWYoMj09PUEubGVuZ3RoKXJldHVybiB1O3ZhciBMO0E9TnVtYmVyKEEpO3RyeXt2YXIgej12LmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiZ2V0Q2FsXCIpKGUpO2lmKHcpe3ZhciBPPVwiaVwiPT09VC5jaGFyQXQoVC5sZW5ndGgtMSk7VD1wYXJzZUludChULDEwKSxMPXoubmV3RGF0ZShBLHoudG9Nb250aEluZGV4KEEsVCxPKSxNKX1lbHNlIEw9ei5uZXdEYXRlKEEsTnVtYmVyKFQpLE0pfWNhdGNoKHQpe3JldHVybiB1fXJldHVybiBMPyhMLnRvSkQoKS1nKSpoK1MqZitFKnArQypkOnV9QT0yPT09QS5sZW5ndGg/KE51bWJlcihBKSsyZTMtYiklMTAwK2I6TnVtYmVyKEEpLFQtPTE7dmFyIEk9bmV3IERhdGUoRGF0ZS5VVEMoMmUzLFQsTSxTLEUpKTtyZXR1cm4gSS5zZXRVVENGdWxsWWVhcihBKSxJLmdldFVUQ01vbnRoKCkhPT1UP3U6SS5nZXRVVENEYXRlKCkhPT1NP3U6SS5nZXRUaW1lKCkrQypkfSxuPXIuTUlOX01TPXIuZGF0ZVRpbWUybXMoXCItOTk5OVwiKSxpPXIuTUFYX01TPXIuZGF0ZVRpbWUybXMoXCI5OTk5LTEyLTMxIDIzOjU5OjU5Ljk5OTlcIiksci5pc0RhdGVUaW1lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZGF0ZVRpbWUybXModCxlKSE9PXV9O3ZhciBrPTkwKmgsQT0zKmYsVD01KnA7ZnVuY3Rpb24gTSh0LGUscixuLGkpe2lmKChlfHxyfHxufHxpKSYmKHQrPVwiIFwiK3coZSwyKStcIjpcIit3KHIsMiksKG58fGkpJiYodCs9XCI6XCIrdyhuLDIpLGkpKSl7Zm9yKHZhciBhPTQ7aSUxMD09MDspYS09MSxpLz0xMDt0Kz1cIi5cIit3KGksYSl9cmV0dXJuIHR9ci5tczJEYXRlVGltZT1mdW5jdGlvbih0LGUscil7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHR8fCEodD49biYmdDw9aSkpcmV0dXJuIHU7ZXx8KGU9MCk7dmFyIGEsbyxzLGMseSx4LGI9TWF0aC5mbG9vcigxMCpsKHQrLjA1LDEpKSx3PU1hdGgucm91bmQodC1iLzEwKTtpZihfKHIpKXt2YXIgUz1NYXRoLmZsb29yKHcvaCkrZyxFPU1hdGguZmxvb3IobCh0LGgpKTt0cnl7YT12LmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiZ2V0Q2FsXCIpKHIpLmZyb21KRChTKS5mb3JtYXREYXRlKFwieXl5eS1tbS1kZFwiKX1jYXRjaCh0KXthPW0oXCJHJVktJW0tJWRcIikobmV3IERhdGUodykpfWlmKFwiLVwiPT09YS5jaGFyQXQoMCkpZm9yKDthLmxlbmd0aDwxMTspYT1cIi0wXCIrYS5zdWJzdHIoMSk7ZWxzZSBmb3IoO2EubGVuZ3RoPDEwOylhPVwiMFwiK2E7bz1lPGs/TWF0aC5mbG9vcihFL2YpOjAscz1lPGs/TWF0aC5mbG9vcihFJWYvcCk6MCxjPWU8QT9NYXRoLmZsb29yKEUlcC9kKTowLHk9ZTxUP0UlZCoxMCtiOjB9ZWxzZSB4PW5ldyBEYXRlKHcpLGE9bShcIiVZLSVtLSVkXCIpKHgpLG89ZTxrP3guZ2V0VVRDSG91cnMoKTowLHM9ZTxrP3guZ2V0VVRDTWludXRlcygpOjAsYz1lPEE/eC5nZXRVVENTZWNvbmRzKCk6MCx5PWU8VD8xMCp4LmdldFVUQ01pbGxpc2Vjb25kcygpK2I6MDtyZXR1cm4gTShhLG8scyxjLHkpfSxyLm1zMkRhdGVUaW1lTG9jYWw9ZnVuY3Rpb24odCl7aWYoISh0Pj1uK2gmJnQ8PWktaCkpcmV0dXJuIHU7dmFyIGU9TWF0aC5mbG9vcigxMCpsKHQrLjA1LDEpKSxyPW5ldyBEYXRlKE1hdGgucm91bmQodC1lLzEwKSk7cmV0dXJuIE0oYS50aW1lLmZvcm1hdChcIiVZLSVtLSVkXCIpKHIpLHIuZ2V0SG91cnMoKSxyLmdldE1pbnV0ZXMoKSxyLmdldFNlY29uZHMoKSwxMCpyLmdldFVUQ01pbGxpc2Vjb25kcygpK2UpfSxyLmNsZWFuRGF0ZT1mdW5jdGlvbih0LGUsbil7aWYodD09PXUpcmV0dXJuIGU7aWYoci5pc0pTRGF0ZSh0KXx8XCJudW1iZXJcIj09dHlwZW9mIHQmJmlzRmluaXRlKHQpKXtpZihfKG4pKXJldHVybiBzLmVycm9yKFwiSlMgRGF0ZXMgYW5kIG1pbGxpc2Vjb25kcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggd29ybGQgY2FsZW5kYXJzXCIsdCksZTtpZighKHQ9ci5tczJEYXRlVGltZUxvY2FsKCt0KSkmJnZvaWQgMCE9PWUpcmV0dXJuIGV9ZWxzZSBpZighci5pc0RhdGVUaW1lKHQsbikpcmV0dXJuIHMuZXJyb3IoXCJ1bnJlY29nbml6ZWQgZGF0ZVwiLHQpLGU7cmV0dXJuIHR9O3ZhciBTPS8lXFxkP2YvZztmdW5jdGlvbiBFKHQsZSxyLG4pe3Q9dC5yZXBsYWNlKFMsZnVuY3Rpb24odCl7dmFyIHI9TWF0aC5taW4oK3QuY2hhckF0KDEpfHw2LDYpO3JldHVybihlLzFlMyUxKzIpLnRvRml4ZWQocikuc3Vic3RyKDIpLnJlcGxhY2UoLzArJC8sXCJcIil8fFwiMFwifSk7dmFyIGk9bmV3IERhdGUoTWF0aC5mbG9vcihlKy4wNSkpO2lmKF8obikpdHJ5e3Q9di5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcIndvcmxkQ2FsRm10XCIpKHQsZSxuKX1jYXRjaCh0KXtyZXR1cm5cIkludmFsaWRcIn1yZXR1cm4gcih0KShpKX12YXIgQz1bNTksNTkuOSw1OS45OSw1OS45OTksNTkuOTk5OV07ci5mb3JtYXREYXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtpZihpPV8oaSkmJmksIWUpaWYoXCJ5XCI9PT1yKWU9YS55ZWFyO2Vsc2UgaWYoXCJtXCI9PT1yKWU9YS5tb250aDtlbHNle2lmKFwiZFwiIT09cilyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj1sKHQrLjA1LGgpLG49dyhNYXRoLmZsb29yKHIvZiksMikrXCI6XCIrdyhsKE1hdGguZmxvb3Ioci9wKSw2MCksMik7aWYoXCJNXCIhPT1lKXtvKGUpfHwoZT0wKTt2YXIgaT0oMTAwK01hdGgubWluKGwodC9kLDYwKSxDW2VdKSkudG9GaXhlZChlKS5zdWJzdHIoMSk7ZT4wJiYoaT1pLnJlcGxhY2UoLzArJC8sXCJcIikucmVwbGFjZSgvW1xcLl0kLyxcIlwiKSksbis9XCI6XCIraX1yZXR1cm4gbn0odCxyKStcIlxcblwiK0UoYS5kYXlNb250aFllYXIsdCxuLGkpO2U9YS5kYXlNb250aCtcIlxcblwiK2EueWVhcn1yZXR1cm4gRShlLHQsbixpKX07dmFyIEw9MypoO3IuaW5jcmVtZW50TW9udGg9ZnVuY3Rpb24odCxlLHIpe3I9XyhyKSYmcjt2YXIgbj1sKHQsaCk7aWYodD1NYXRoLnJvdW5kKHQtbikscil0cnl7dmFyIGk9TWF0aC5yb3VuZCh0L2gpK2csYT12LmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiZ2V0Q2FsXCIpKHIpLG89YS5mcm9tSkQoaSk7cmV0dXJuIGUlMTI/YS5hZGQobyxlLFwibVwiKTphLmFkZChvLGUvMTIsXCJ5XCIpLChvLnRvSkQoKS1nKSpoK259Y2F0Y2goZSl7cy5lcnJvcihcImludmFsaWQgbXMgXCIrdCtcIiBpbiBjYWxlbmRhciBcIityKX12YXIgYz1uZXcgRGF0ZSh0K0wpO3JldHVybiBjLnNldFVUQ01vbnRoKGMuZ2V0VVRDTW9udGgoKStlKStuLUx9LHIuZmluZEV4YWN0RGF0ZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpPTAsYT0wLHM9MCxsPTAsYz1fKGUpJiZ2LmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiZ2V0Q2FsXCIpKGUpLHU9MDt1PHQubGVuZ3RoO3UrKylpZihuPXRbdV0sbyhuKSl7aWYoIShuJWgpKWlmKGMpdHJ5ezE9PT0ocj1jLmZyb21KRChuL2grZykpLmRheSgpPzE9PT1yLm1vbnRoKCk/aSsrOmErKzpzKyt9Y2F0Y2godCl7fWVsc2UgMT09PShyPW5ldyBEYXRlKG4pKS5nZXRVVENEYXRlKCk/MD09PXIuZ2V0VVRDTW9udGgoKT9pKys6YSsrOnMrK31lbHNlIGwrKztzKz1hKz1pO3ZhciBmPXQubGVuZ3RoLWw7cmV0dXJue2V4YWN0WWVhcnM6aS9mLGV4YWN0TW9udGhzOmEvZixleGFjdERheXM6cy9mfX19LHtcIi4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi9yZWdpc3RyeVwiOjgyOSxcIi4vbG9nZ2Vyc1wiOjcwNSxcIi4vbW9kXCI6NzA4LGQzOjE1NSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sNjkwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImV2ZW50c1wiKS5FdmVudEVtaXR0ZXIsaT17aW5pdDpmdW5jdGlvbih0KXtpZih0Ll9ldiBpbnN0YW5jZW9mIG4pcmV0dXJuIHQ7dmFyIGU9bmV3IG4scj1uZXcgbjtyZXR1cm4gdC5fZXY9ZSx0Ll9pbnRlcm5hbEV2PXIsdC5vbj1lLm9uLmJpbmQoZSksdC5vbmNlPWUub25jZS5iaW5kKGUpLHQucmVtb3ZlTGlzdGVuZXI9ZS5yZW1vdmVMaXN0ZW5lci5iaW5kKGUpLHQucmVtb3ZlQWxsTGlzdGVuZXJzPWUucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQoZSksdC5faW50ZXJuYWxPbj1yLm9uLmJpbmQociksdC5faW50ZXJuYWxPbmNlPXIub25jZS5iaW5kKHIpLHQuX3JlbW92ZUludGVybmFsTGlzdGVuZXI9ci5yZW1vdmVMaXN0ZW5lci5iaW5kKHIpLHQuX3JlbW92ZUFsbEludGVybmFsTGlzdGVuZXJzPXIucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQociksdC5lbWl0PWZ1bmN0aW9uKG4saSl7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGpRdWVyeSYmalF1ZXJ5KHQpLnRyaWdnZXIobixpKSxlLmVtaXQobixpKSxyLmVtaXQobixpKX0sdH0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGpRdWVyeSYmKG49alF1ZXJ5KHQpLnRyaWdnZXJIYW5kbGVyKGUscikpO3ZhciBhPXQuX2V2O2lmKCFhKXJldHVybiBuO3ZhciBvLHM9YS5fZXZlbnRzW2VdO2lmKCFzKXJldHVybiBuO2Z1bmN0aW9uIGwodCl7cmV0dXJuIHQubGlzdGVuZXI/KGEucmVtb3ZlTGlzdGVuZXIoZSx0Lmxpc3RlbmVyKSx0LmZpcmVkP3ZvaWQgMDoodC5maXJlZD0hMCx0Lmxpc3RlbmVyLmFwcGx5KGEsW3JdKSkpOnQuYXBwbHkoYSxbcl0pfWZvcihzPUFycmF5LmlzQXJyYXkocyk/czpbc10sbz0wO288cy5sZW5ndGgtMTtvKyspbChzW29dKTtyZXR1cm4gaT1sKHNbb10pLHZvaWQgMCE9PW4/bjppfSxwdXJnZTpmdW5jdGlvbih0KXtyZXR1cm4gZGVsZXRlIHQuX2V2LGRlbGV0ZSB0Lm9uLGRlbGV0ZSB0Lm9uY2UsZGVsZXRlIHQucmVtb3ZlTGlzdGVuZXIsZGVsZXRlIHQucmVtb3ZlQWxsTGlzdGVuZXJzLGRlbGV0ZSB0LmVtaXQsZGVsZXRlIHQuX2V2LGRlbGV0ZSB0Ll9pbnRlcm5hbEV2LGRlbGV0ZSB0Ll9pbnRlcm5hbE9uLGRlbGV0ZSB0Ll9pbnRlcm5hbE9uY2UsZGVsZXRlIHQuX3JlbW92ZUludGVybmFsTGlzdGVuZXIsZGVsZXRlIHQuX3JlbW92ZUFsbEludGVybmFsTGlzdGVuZXJzLHR9fTtlLmV4cG9ydHM9aX0se2V2ZW50czo5NX1dLDY5MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2lzX3BsYWluX29iamVjdC5qc1wiKSxpPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gYSh0LGUscixvKXt2YXIgcyxsLGMsdSxoLGYscD10WzBdLGQ9dC5sZW5ndGg7aWYoMj09PWQmJmkocCkmJmkodFsxXSkmJjA9PT1wLmxlbmd0aCl7aWYoZnVuY3Rpb24odCxlKXt2YXIgcixuO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe2lmKG51bGwhPT0obj10W3JdKSYmXCJvYmplY3RcIj09dHlwZW9mIG4pcmV0dXJuITE7dm9pZCAwIT09biYmKGVbcl09bil9cmV0dXJuITB9KHRbMV0scCkpcmV0dXJuIHA7cC5zcGxpY2UoMCxwLmxlbmd0aCl9Zm9yKHZhciBnPTE7ZzxkO2crKylmb3IobCBpbiBzPXRbZ10pYz1wW2xdLHU9c1tsXSxvJiZpKHUpP3BbbF09dTplJiZ1JiYobih1KXx8KGg9aSh1KSkpPyhoPyhoPSExLGY9YyYmaShjKT9jOltdKTpmPWMmJm4oYyk/Yzp7fSxwW2xdPWEoW2YsdV0sZSxyLG8pKTooXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHV8fHIpJiYocFtsXT11KTtyZXR1cm4gcH1yLmV4dGVuZEZsYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gYShhcmd1bWVudHMsITEsITEsITEpfSxyLmV4dGVuZERlZXA9ZnVuY3Rpb24oKXtyZXR1cm4gYShhcmd1bWVudHMsITAsITEsITEpfSxyLmV4dGVuZERlZXBBbGw9ZnVuY3Rpb24oKXtyZXR1cm4gYShhcmd1bWVudHMsITAsITAsITEpfSxyLmV4dGVuZERlZXBOb0FycmF5cz1mdW5jdGlvbigpe3JldHVybiBhKGFyZ3VtZW50cywhMCwhMSwhMCl9fSx7XCIuL2lzX3BsYWluX29iamVjdC5qc1wiOjcwMn1dLDY5MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9e30scj1bXSxuPTAsaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT10W2ldOzEhPT1lW2FdJiYoZVthXT0xLHJbbisrXT1hKX1yZXR1cm4gcn19LHt9XSw2OTM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe3JldHVybiEwPT09dC52aXNpYmxlfWZ1bmN0aW9uIGkodCl7cmV0dXJuITA9PT10WzBdLnRyYWNlLnZpc2libGV9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPShlPXQsQXJyYXkuaXNBcnJheShlKSYmQXJyYXkuaXNBcnJheShlWzBdKSYmZVswXVswXSYmZVswXVswXS50cmFjZT9pOm4pLGE9W10sbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dO3IocykmJmEucHVzaChzKX1yZXR1cm4gYX19LHt9XSw2OTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiY291bnRyeS1yZWdleFwiKSxpPXQoXCIuLi9saWJcIiksYT1PYmplY3Qua2V5cyhuKSxvPXtcIklTTy0zXCI6aS5pZGVudGl0eSxcIlVTQS1zdGF0ZXNcIjppLmlkZW50aXR5LFwiY291bnRyeSBuYW1lc1wiOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgcj1hW2VdLG89bmV3IFJlZ0V4cChuW3JdKTtpZihvLnRlc3QodC50cmltKCkudG9Mb3dlckNhc2UoKSkpcmV0dXJuIHJ9cmV0dXJuIGkubG9nKFwiVW5yZWNvZ25pemVkIGNvdW50cnkgbmFtZTogXCIrdCtcIi5cIiksITF9fTtyLmxvY2F0aW9uVG9GZWF0dXJlPWZ1bmN0aW9uKHQsZSxyKXtpZighZXx8XCJzdHJpbmdcIiE9dHlwZW9mIGUpcmV0dXJuITE7dmFyIG49ZnVuY3Rpb24odCxlKXtyZXR1cm4oMCxvW3RdKShlKX0odCxlKTtpZihuKXtmb3IodmFyIGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIHM9clthXTtpZihzLmlkPT09bilyZXR1cm4gc31pLmxvZyhbXCJMb2NhdGlvbiB3aXRoIGlkXCIsbixcImRvZXMgbm90IGhhdmUgYSBtYXRjaGluZyB0b3BvanNvbiBmZWF0dXJlIGF0IHRoaXMgcmVzb2x1dGlvbi5cIl0uam9pbihcIiBcIikpfXJldHVybiExfX0se1wiLi4vbGliXCI6NzAxLFwiY291bnRyeS1yZWdleFwiOjEyNX1dLDY5NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTTtyLmNhbGNUcmFjZVRvTGluZUNvb3Jkcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dFswXS50cmFjZS5jb25uZWN0Z2FwcyxyPVtdLGk9W10sYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz10W2FdLmxvbmxhdDtvWzBdIT09bj9pLnB1c2gobyk6IWUmJmkubGVuZ3RoPjAmJihyLnB1c2goaSksaT1bXSl9cmV0dXJuIGkubGVuZ3RoPjAmJnIucHVzaChpKSxyfSxyLm1ha2VMaW5lPWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dC5sZW5ndGg/e3R5cGU6XCJMaW5lU3RyaW5nXCIsY29vcmRpbmF0ZXM6dFswXX06e3R5cGU6XCJNdWx0aUxpbmVTdHJpbmdcIixjb29yZGluYXRlczp0fX0sci5tYWtlUG9seWdvbj1mdW5jdGlvbih0KXtpZigxPT09dC5sZW5ndGgpcmV0dXJue3R5cGU6XCJQb2x5Z29uXCIsY29vcmRpbmF0ZXM6dH07Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wO3I8dC5sZW5ndGg7cisrKWVbcl09W3Rbcl1dO3JldHVybnt0eXBlOlwiTXVsdGlQb2x5Z29uXCIsY29vcmRpbmF0ZXM6ZX19LHIubWFrZUJsYW5rPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6XCJQb2ludFwiLGNvb3JkaW5hdGVzOltdfX19LHtcIi4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2Nzh9XSw2OTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbixpLGEsbz10KFwiLi9tb2RcIikubW9kO2Z1bmN0aW9uIHModCxlLHIsbixpLGEsbyxzKXt2YXIgbD1yLXQsYz1pLXQsdT1vLWksaD1uLWUsZj1hLWUscD1zLWEsZD1sKnAtdSpoO2lmKDA9PT1kKXJldHVybiBudWxsO3ZhciBnPShjKnAtdSpmKS9kLHY9KGMqaC1sKmYpL2Q7cmV0dXJuIHY8MHx8dj4xfHxnPDB8fGc+MT9udWxsOnt4OnQrbCpnLHk6ZStoKmd9fWZ1bmN0aW9uIGwodCxlLHIsbixpKXt2YXIgYT1uKnQraSplO2lmKGE8MClyZXR1cm4gbipuK2kqaTtpZihhPnIpe3ZhciBvPW4tdCxzPWktZTtyZXR1cm4gbypvK3Mqc312YXIgbD1uKmUtaSp0O3JldHVybiBsKmwvcn1yLnNlZ21lbnRzSW50ZXJzZWN0PXMsci5zZWdtZW50RGlzdGFuY2U9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxjKXtpZihzKHQsZSxyLG4saSxhLG8sYykpcmV0dXJuIDA7dmFyIHU9ci10LGg9bi1lLGY9by1pLHA9Yy1hLGQ9dSp1K2gqaCxnPWYqZitwKnAsdj1NYXRoLm1pbihsKHUsaCxkLGktdCxhLWUpLGwodSxoLGQsby10LGMtZSksbChmLHAsZyx0LWksZS1hKSxsKGYscCxnLHItaSxuLWEpKTtyZXR1cm4gTWF0aC5zcXJ0KHYpfSxyLmdldFRleHRMb2NhdGlvbj1mdW5jdGlvbih0LGUscixzKXtpZih0PT09aSYmcz09PWF8fChuPXt9LGk9dCxhPXMpLG5bcl0pcmV0dXJuIG5bcl07dmFyIGw9dC5nZXRQb2ludEF0TGVuZ3RoKG8oci1zLzIsZSkpLGM9dC5nZXRQb2ludEF0TGVuZ3RoKG8ocitzLzIsZSkpLHU9TWF0aC5hdGFuKChjLnktbC55KS8oYy54LWwueCkpLGg9dC5nZXRQb2ludEF0TGVuZ3RoKG8ocixlKSksZj17eDooNCpoLngrbC54K2MueCkvNix5Oig0KmgueStsLnkrYy55KS82LHRoZXRhOnV9O3JldHVybiBuW3JdPWYsZn0sci5jbGVhckxvY2F0aW9uQ2FjaGU9ZnVuY3Rpb24oKXtpPW51bGx9LHIuZ2V0VmlzaWJsZVNlZ21lbnQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1lLmxlZnQsbz1lLnJpZ2h0LHM9ZS50b3AsbD1lLmJvdHRvbSxjPTAsdT10LmdldFRvdGFsTGVuZ3RoKCksaD11O2Z1bmN0aW9uIGYoZSl7dmFyIHI9dC5nZXRQb2ludEF0TGVuZ3RoKGUpOzA9PT1lP249cjplPT09dSYmKGk9cik7dmFyIGM9ci54PGE/YS1yLng6ci54Pm8/ci54LW86MCxoPXIueTxzP3Mtci55OnIueT5sP3IueS1sOjA7cmV0dXJuIE1hdGguc3FydChjKmMraCpoKX1mb3IodmFyIHA9ZihjKTtwOyl7aWYoKGMrPXArcik+aClyZXR1cm47cD1mKGMpfWZvcihwPWYoaCk7cDspe2lmKGM+KGgtPXArcikpcmV0dXJuO3A9ZihoKX1yZXR1cm57bWluOmMsbWF4OmgsbGVuOmgtYyx0b3RhbDp1LGlzQ2xvc2VkOjA9PT1jJiZoPT09dSYmTWF0aC5hYnMobi54LWkueCk8LjEmJk1hdGguYWJzKG4ueS1pLnkpPC4xfX0sci5maW5kUG9pbnRPblBhdGg9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpLGEsbyxzPShuPW58fHt9KS5wYXRoTGVuZ3RofHx0LmdldFRvdGFsTGVuZ3RoKCksbD1uLnRvbGVyYW5jZXx8LjAwMSxjPW4uaXRlcmF0aW9uTGltaXR8fDMwLHU9dC5nZXRQb2ludEF0TGVuZ3RoKDApW3JdPnQuZ2V0UG9pbnRBdExlbmd0aChzKVtyXT8tMToxLGg9MCxmPTAscD1zO2g8Yzspe2lmKGk9KGYrcCkvMixvPShhPXQuZ2V0UG9pbnRBdExlbmd0aChpKSlbcl0tZSxNYXRoLmFicyhvKTxsKXJldHVybiBhO3Uqbz4wP3A9aTpmPWksaCsrfXJldHVybiBhfX0se1wiLi9tb2RcIjo3MDh9XSw2OTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpe2lmKG51bGw9PT0oZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KSkpdGhyb3cgbmV3IEVycm9yKFwiTm8gRE9NIGVsZW1lbnQgd2l0aCBpZCAnXCIrdCtcIicgZXhpc3RzIG9uIHRoZSBwYWdlLlwiKTtyZXR1cm4gZX1pZihudWxsPT10KXRocm93IG5ldyBFcnJvcihcIkRPTSBlbGVtZW50IHByb3ZpZGVkIGlzIG51bGwgb3IgdW5kZWZpbmVkXCIpO3JldHVybiB0fX0se31dLDY5ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCJ0aW55Y29sb3IyXCIpLGE9dChcImNvbG9yLW5vcm1hbGl6ZVwiKSxvPXQoXCIuLi9jb21wb25lbnRzL2NvbG9yc2NhbGVcIikscz10KFwiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzXCIpLmRlZmF1bHRMaW5lLGw9dChcIi4vYXJyYXlcIikuaXNBcnJheU9yVHlwZWRBcnJheSxjPWEocyksdT0xO2Z1bmN0aW9uIGgodCxlKXt2YXIgcj10O3JldHVybiByWzNdKj1lLHJ9ZnVuY3Rpb24gZih0KXtpZihuKHQpKXJldHVybiBjO3ZhciBlPWEodCk7cmV0dXJuIGUubGVuZ3RoP2U6Y31mdW5jdGlvbiBwKHQpe3JldHVybiBuKHQpP3Q6dX1lLmV4cG9ydHM9e2Zvcm1hdENvbG9yOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLHMsZCxnLHY9dC5jb2xvcixtPWwodikseT1sKGUpLHg9W107aWYobj12b2lkIDAhPT10LmNvbG9yc2NhbGU/by5tYWtlQ29sb3JTY2FsZUZ1bmMoby5leHRyYWN0U2NhbGUodCx7Y0xldHRlcjpcImNcIn0pKTpmLGk9bT9mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT10W2VdP2M6YShuKHRbZV0pKX06ZixzPXk/ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09dFtlXT91OnAodFtlXSl9OnAsbXx8eSlmb3IodmFyIGI9MDtiPHI7YisrKWQ9aSh2LGIpLGc9cyhlLGIpLHhbYl09aChkLGcpO2Vsc2UgeD1oKGEodiksZSk7cmV0dXJuIHh9LHBhcnNlQ29sb3JTY2FsZTpmdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0xKSwodC5yZXZlcnNlc2NhbGU/by5mbGlwU2NhbGUodC5jb2xvcnNjYWxlKTp0LmNvbG9yc2NhbGUpLm1hcChmdW5jdGlvbih0KXt2YXIgcj10WzBdLG49aSh0WzFdKS50b1JnYigpO3JldHVybntpbmRleDpyLHJnYjpbbi5yLG4uZyxuLmIsZV19fSl9fX0se1wiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzXCI6NTc3LFwiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlXCI6NTkwLFwiLi9hcnJheVwiOjY4NCxcImNvbG9yLW5vcm1hbGl6ZVwiOjExMSxcImZhc3QtaXNudW1lcmljXCI6MjIyLHRpbnljb2xvcjI6NTIyfV0sNjk5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vaWRlbnRpdHlcIik7ZnVuY3Rpb24gaSh0KXtyZXR1cm5bdF19ZS5leHBvcnRzPXtrZXlGdW46ZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5fSxyZXBlYXQ6aSxkZXNjZW5kOm4sd3JhcDppLHVud3JhcDpmdW5jdGlvbih0KXtyZXR1cm4gdFswXX19fSx7XCIuL2lkZW50aXR5XCI6NzAwfV0sNzAwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0fX0se31dLDcwMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxhPXQoXCIuLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLG89YS5GUF9TQUZFLHM9YS5CQUROVU0sbD1lLmV4cG9ydHM9e307bC5uZXN0ZWRQcm9wZXJ0eT10KFwiLi9uZXN0ZWRfcHJvcGVydHlcIiksbC5rZXllZENvbnRhaW5lcj10KFwiLi9rZXllZF9jb250YWluZXJcIiksbC5yZWxhdGl2ZUF0dHI9dChcIi4vcmVsYXRpdmVfYXR0clwiKSxsLmlzUGxhaW5PYmplY3Q9dChcIi4vaXNfcGxhaW5fb2JqZWN0XCIpLGwudG9Mb2dSYW5nZT10KFwiLi90b19sb2dfcmFuZ2VcIiksbC5yZWxpbmtQcml2YXRlS2V5cz10KFwiLi9yZWxpbmtfcHJpdmF0ZVwiKTt2YXIgYz10KFwiLi9hcnJheVwiKTtsLmlzVHlwZWRBcnJheT1jLmlzVHlwZWRBcnJheSxsLmlzQXJyYXlPclR5cGVkQXJyYXk9Yy5pc0FycmF5T3JUeXBlZEFycmF5LGwuaXNBcnJheTFEPWMuaXNBcnJheTFELGwuZW5zdXJlQXJyYXk9Yy5lbnN1cmVBcnJheSxsLmNvbmNhdD1jLmNvbmNhdCxsLm1heFJvd0xlbmd0aD1jLm1heFJvd0xlbmd0aCxsLm1pblJvd0xlbmd0aD1jLm1pblJvd0xlbmd0aDt2YXIgdT10KFwiLi9tb2RcIik7bC5tb2Q9dS5tb2QsbC5tb2RIYWxmPXUubW9kSGFsZjt2YXIgaD10KFwiLi9jb2VyY2VcIik7bC52YWxPYmplY3RNZXRhPWgudmFsT2JqZWN0TWV0YSxsLmNvZXJjZT1oLmNvZXJjZSxsLmNvZXJjZTI9aC5jb2VyY2UyLGwuY29lcmNlRm9udD1oLmNvZXJjZUZvbnQsbC5jb2VyY2VIb3ZlcmluZm89aC5jb2VyY2VIb3ZlcmluZm8sbC5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5PWguY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eSxsLnZhbGlkYXRlPWgudmFsaWRhdGU7dmFyIGY9dChcIi4vZGF0ZXNcIik7bC5kYXRlVGltZTJtcz1mLmRhdGVUaW1lMm1zLGwuaXNEYXRlVGltZT1mLmlzRGF0ZVRpbWUsbC5tczJEYXRlVGltZT1mLm1zMkRhdGVUaW1lLGwubXMyRGF0ZVRpbWVMb2NhbD1mLm1zMkRhdGVUaW1lTG9jYWwsbC5jbGVhbkRhdGU9Zi5jbGVhbkRhdGUsbC5pc0pTRGF0ZT1mLmlzSlNEYXRlLGwuZm9ybWF0RGF0ZT1mLmZvcm1hdERhdGUsbC5pbmNyZW1lbnRNb250aD1mLmluY3JlbWVudE1vbnRoLGwuZGF0ZVRpY2swPWYuZGF0ZVRpY2swLGwuZGZsdFJhbmdlPWYuZGZsdFJhbmdlLGwuZmluZEV4YWN0RGF0ZXM9Zi5maW5kRXhhY3REYXRlcyxsLk1JTl9NUz1mLk1JTl9NUyxsLk1BWF9NUz1mLk1BWF9NUzt2YXIgcD10KFwiLi9zZWFyY2hcIik7bC5maW5kQmluPXAuZmluZEJpbixsLnNvcnRlckFzYz1wLnNvcnRlckFzYyxsLnNvcnRlckRlcz1wLnNvcnRlckRlcyxsLmRpc3RpbmN0VmFscz1wLmRpc3RpbmN0VmFscyxsLnJvdW5kVXA9cC5yb3VuZFVwLGwuc29ydD1wLnNvcnQsbC5maW5kSW5kZXhPZk1pbj1wLmZpbmRJbmRleE9mTWluO3ZhciBkPXQoXCIuL3N0YXRzXCIpO2wuYWdnTnVtcz1kLmFnZ051bXMsbC5sZW49ZC5sZW4sbC5tZWFuPWQubWVhbixsLm1pZFJhbmdlPWQubWlkUmFuZ2UsbC52YXJpYW5jZT1kLnZhcmlhbmNlLGwuc3RkZXY9ZC5zdGRldixsLmludGVycD1kLmludGVycDt2YXIgZz10KFwiLi9tYXRyaXhcIik7bC5pbml0MmRBcnJheT1nLmluaXQyZEFycmF5LGwudHJhbnNwb3NlUmFnZ2VkPWcudHJhbnNwb3NlUmFnZ2VkLGwuZG90PWcuZG90LGwudHJhbnNsYXRpb25NYXRyaXg9Zy50cmFuc2xhdGlvbk1hdHJpeCxsLnJvdGF0aW9uTWF0cml4PWcucm90YXRpb25NYXRyaXgsbC5yb3RhdGlvblhZTWF0cml4PWcucm90YXRpb25YWU1hdHJpeCxsLmFwcGx5MkRUcmFuc2Zvcm09Zy5hcHBseTJEVHJhbnNmb3JtLGwuYXBwbHkyRFRyYW5zZm9ybTI9Zy5hcHBseTJEVHJhbnNmb3JtMjt2YXIgdj10KFwiLi9hbmdsZXNcIik7bC5kZWcycmFkPXYuZGVnMnJhZCxsLnJhZDJkZWc9di5yYWQyZGVnLGwuYW5nbGVEZWx0YT12LmFuZ2xlRGVsdGEsbC5hbmdsZURpc3Q9di5hbmdsZURpc3QsbC5pc0Z1bGxDaXJjbGU9di5pc0Z1bGxDaXJjbGUsbC5pc0FuZ2xlSW5zaWRlU2VjdG9yPXYuaXNBbmdsZUluc2lkZVNlY3RvcixsLmlzUHRJbnNpZGVTZWN0b3I9di5pc1B0SW5zaWRlU2VjdG9yLGwucGF0aEFyYz12LnBhdGhBcmMsbC5wYXRoU2VjdG9yPXYucGF0aFNlY3RvcixsLnBhdGhBbm51bHVzPXYucGF0aEFubnVsdXM7dmFyIG09dChcIi4vYW5jaG9yX3V0aWxzXCIpO2wuaXNMZWZ0QW5jaG9yPW0uaXNMZWZ0QW5jaG9yLGwuaXNDZW50ZXJBbmNob3I9bS5pc0NlbnRlckFuY2hvcixsLmlzUmlnaHRBbmNob3I9bS5pc1JpZ2h0QW5jaG9yLGwuaXNUb3BBbmNob3I9bS5pc1RvcEFuY2hvcixsLmlzTWlkZGxlQW5jaG9yPW0uaXNNaWRkbGVBbmNob3IsbC5pc0JvdHRvbUFuY2hvcj1tLmlzQm90dG9tQW5jaG9yO3ZhciB5PXQoXCIuL2dlb21ldHJ5MmRcIik7bC5zZWdtZW50c0ludGVyc2VjdD15LnNlZ21lbnRzSW50ZXJzZWN0LGwuc2VnbWVudERpc3RhbmNlPXkuc2VnbWVudERpc3RhbmNlLGwuZ2V0VGV4dExvY2F0aW9uPXkuZ2V0VGV4dExvY2F0aW9uLGwuY2xlYXJMb2NhdGlvbkNhY2hlPXkuY2xlYXJMb2NhdGlvbkNhY2hlLGwuZ2V0VmlzaWJsZVNlZ21lbnQ9eS5nZXRWaXNpYmxlU2VnbWVudCxsLmZpbmRQb2ludE9uUGF0aD15LmZpbmRQb2ludE9uUGF0aDt2YXIgeD10KFwiLi9leHRlbmRcIik7bC5leHRlbmRGbGF0PXguZXh0ZW5kRmxhdCxsLmV4dGVuZERlZXA9eC5leHRlbmREZWVwLGwuZXh0ZW5kRGVlcEFsbD14LmV4dGVuZERlZXBBbGwsbC5leHRlbmREZWVwTm9BcnJheXM9eC5leHRlbmREZWVwTm9BcnJheXM7dmFyIGI9dChcIi4vbG9nZ2Vyc1wiKTtsLmxvZz1iLmxvZyxsLndhcm49Yi53YXJuLGwuZXJyb3I9Yi5lcnJvcjt2YXIgXz10KFwiLi9yZWdleFwiKTtsLmNvdW50ZXJSZWdleD1fLmNvdW50ZXI7dmFyIHc9dChcIi4vdGhyb3R0bGVcIik7ZnVuY3Rpb24gayh0KXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdClmb3IodmFyIG49dFtyXSxpPTA7aTxuLmxlbmd0aDtpKyspZVtuW2ldXT0rcjtyZXR1cm4gZX1sLnRocm90dGxlPXcudGhyb3R0bGUsbC50aHJvdHRsZURvbmU9dy5kb25lLGwuY2xlYXJUaHJvdHRsZT13LmNsZWFyLGwuZ2V0R3JhcGhEaXY9dChcIi4vZ2V0X2dyYXBoX2RpdlwiKSxsLmNsZWFyUmVzcG9uc2l2ZT10KFwiLi9jbGVhcl9yZXNwb25zaXZlXCIpLGwubWFrZVRyYWNlR3JvdXBzPXQoXCIuL21ha2VfdHJhY2VfZ3JvdXBzXCIpLGwuXz10KFwiLi9sb2NhbGl6ZVwiKSxsLm5vdGlmaWVyPXQoXCIuL25vdGlmaWVyXCIpLGwuZmlsdGVyVW5pcXVlPXQoXCIuL2ZpbHRlcl91bmlxdWVcIiksbC5maWx0ZXJWaXNpYmxlPXQoXCIuL2ZpbHRlcl92aXNpYmxlXCIpLGwucHVzaFVuaXF1ZT10KFwiLi9wdXNoX3VuaXF1ZVwiKSxsLmNsZWFuTnVtYmVyPXQoXCIuL2NsZWFuX251bWJlclwiKSxsLmVuc3VyZU51bWJlcj1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KT8odD1OdW1iZXIodCkpPC1vfHx0Pm8/czppKHQpP051bWJlcih0KTpzOnN9LGwuaXNJbmRleD1mdW5jdGlvbih0LGUpe3JldHVybiEodm9pZCAwIT09ZSYmdD49ZSkmJihpKHQpJiZ0Pj0wJiZ0JTE9PTApfSxsLm5vb3A9dChcIi4vbm9vcFwiKSxsLmlkZW50aXR5PXQoXCIuL2lkZW50aXR5XCIpLGwucmVwZWF0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7bjxlO24rKylyW25dPXQ7cmV0dXJuIHJ9LGwuc3dhcEF0dHJzPWZ1bmN0aW9uKHQsZSxyLG4pe3J8fChyPVwieFwiKSxufHwobj1cInlcIik7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPWVbaV0sbz1sLm5lc3RlZFByb3BlcnR5KHQsYS5yZXBsYWNlKFwiP1wiLHIpKSxzPWwubmVzdGVkUHJvcGVydHkodCxhLnJlcGxhY2UoXCI/XCIsbikpLGM9by5nZXQoKTtvLnNldChzLmdldCgpKSxzLnNldChjKX19LGwucmFpc2VUb1RvcD1mdW5jdGlvbih0KXt0LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodCl9LGwuY2FuY2VsVHJhbnNpdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdC50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCl9LGwuY29uc3RyYWluPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZT5yP01hdGgubWF4KHIsTWF0aC5taW4oZSx0KSk6TWF0aC5tYXgoZSxNYXRoLm1pbihyLHQpKX0sbC5iQm94SW50ZXJzZWN0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gcj1yfHwwLHQubGVmdDw9ZS5yaWdodCtyJiZlLmxlZnQ8PXQucmlnaHQrciYmdC50b3A8PWUuYm90dG9tK3ImJmUudG9wPD10LmJvdHRvbStyfSxsLnNpbXBsZU1hcD1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9dC5sZW5ndGgsYT1uZXcgQXJyYXkoaSksbz0wO288aTtvKyspYVtvXT1lKHRbb10scixuKTtyZXR1cm4gYX0sbC5yYW5kc3RyPWZ1bmN0aW9uIHQoZSxyLG4saSl7aWYobnx8KG49MTYpLHZvaWQgMD09PXImJihyPTI0KSxyPD0wKXJldHVyblwiMFwiO3ZhciBhLG8scz1NYXRoLmxvZyhNYXRoLnBvdygyLHIpKS9NYXRoLmxvZyhuKSxjPVwiXCI7Zm9yKGE9MjtzPT09MS8wO2EqPTIpcz1NYXRoLmxvZyhNYXRoLnBvdygyLHIvYSkpL01hdGgubG9nKG4pKmE7dmFyIHU9cy1NYXRoLmZsb29yKHMpO2ZvcihhPTA7YTxNYXRoLmZsb29yKHMpO2ErKyljPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpuKS50b1N0cmluZyhuKStjO3UmJihvPU1hdGgucG93KG4sdSksYz1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbykudG9TdHJpbmcobikrYyk7dmFyIGg9cGFyc2VJbnQoYyxuKTtyZXR1cm4gZSYmZVtjXXx8aCE9PTEvMCYmaD49TWF0aC5wb3coMixyKT9pPjEwPyhsLndhcm4oXCJyYW5kc3RyIGZhaWxlZCB1bmlxdWVuZXNzXCIpLGMpOnQoZSxyLG4sKGl8fDApKzEpOmN9LGwuT3B0aW9uQ29udHJvbD1mdW5jdGlvbih0LGUpe3R8fCh0PXt9KSxlfHwoZT1cIm9wdFwiKTt2YXIgcj17b3B0aW9uTGlzdDpbXSxfbmV3b3B0aW9uOmZ1bmN0aW9uKG4pe25bZV09dCxyW24ubmFtZV09bixyLm9wdGlvbkxpc3QucHVzaChuKX19O3JldHVybiByW1wiX1wiK2VdPXQscn0sbC5zbW9vdGg9ZnVuY3Rpb24odCxlKXtpZigoZT1NYXRoLnJvdW5kKGUpfHwwKTwyKXJldHVybiB0O3ZhciByLG4saSxhLG89dC5sZW5ndGgscz0yKm8sbD0yKmUtMSxjPW5ldyBBcnJheShsKSx1PW5ldyBBcnJheShvKTtmb3Iocj0wO3I8bDtyKyspY1tyXT0oMS1NYXRoLmNvcyhNYXRoLlBJKihyKzEpL2UpKS8oMiplKTtmb3Iocj0wO3I8bztyKyspe2ZvcihhPTAsbj0wO248bDtuKyspKGk9cituKzEtZSk8LW8/aS09cypNYXRoLnJvdW5kKGkvcyk6aT49cyYmKGktPXMqTWF0aC5mbG9vcihpL3MpKSxpPDA/aT0tMS1pOmk+PW8mJihpPXMtMS1pKSxhKz10W2ldKmNbbl07dVtyXT1hfXJldHVybiB1fSxsLnN5bmNPckFzeW5jPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjtmdW5jdGlvbiBpKCl7cmV0dXJuIGwuc3luY09yQXN5bmModCxlLHIpfWZvcig7dC5sZW5ndGg7KWlmKChuPSgwLHQuc3BsaWNlKDAsMSlbMF0pKGUpKSYmbi50aGVuKXJldHVybiBuLnRoZW4oaSkudGhlbih2b2lkIDAsbC5wcm9taXNlRXJyb3IpO3JldHVybiByJiZyKGUpfSxsLnN0cmlwVHJhaWxpbmdTbGFzaD1mdW5jdGlvbih0KXtyZXR1cm5cIi9cIj09PXQuc3Vic3RyKC0xKT90LnN1YnN0cigwLHQubGVuZ3RoLTEpOnR9LGwubm9uZU9yQWxsPWZ1bmN0aW9uKHQsZSxyKXtpZih0KXt2YXIgbixpPSExLGE9ITA7Zm9yKG49MDtuPHIubGVuZ3RoO24rKyludWxsIT10W3Jbbl1dP2k9ITA6YT0hMTtpZihpJiYhYSlmb3Iobj0wO248ci5sZW5ndGg7bisrKXRbcltuXV09ZVtyW25dXX19LGwubWVyZ2VBcnJheT1mdW5jdGlvbih0LGUscil7aWYobC5pc0FycmF5T3JUeXBlZEFycmF5KHQpKWZvcih2YXIgbj1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCksaT0wO2k8bjtpKyspZVtpXVtyXT10W2ldfSxsLmZpbGxBcnJheT1mdW5jdGlvbih0LGUscixuKXtpZihuPW58fGwuaWRlbnRpdHksbC5pc0FycmF5T3JUeXBlZEFycmF5KHQpKWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKWVbaV1bcl09bih0W2ldKX0sbC5jYXN0T3B0aW9uPWZ1bmN0aW9uKHQsZSxyLG4pe249bnx8bC5pZGVudGl0eTt2YXIgaT1sLm5lc3RlZFByb3BlcnR5KHQscikuZ2V0KCk7cmV0dXJuIGwuaXNBcnJheU9yVHlwZWRBcnJheShpKT9BcnJheS5pc0FycmF5KGUpJiZsLmlzQXJyYXlPclR5cGVkQXJyYXkoaVtlWzBdXSk/bihpW2VbMF1dW2VbMV1dKTpuKGlbZV0pOml9LGwuZXh0cmFjdE9wdGlvbj1mdW5jdGlvbih0LGUscixuKXtpZihyIGluIHQpcmV0dXJuIHRbcl07dmFyIGk9bC5uZXN0ZWRQcm9wZXJ0eShlLG4pLmdldCgpO3JldHVybiBBcnJheS5pc0FycmF5KGkpP3ZvaWQgMDppfSxsLnRhZ1NlbGVjdGVkPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9ZS5zZWxlY3RlZHBvaW50cyxvPWUuX2luZGV4VG9Qb2ludHM7byYmKG49ayhvKSk7Zm9yKHZhciBzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBjPWFbc107aWYobC5pc0luZGV4KGMpKXt2YXIgdT1uP25bY106YyxoPXI/clt1XTp1O3ZvaWQgMCE9PShpPWgpJiZpPHQubGVuZ3RoJiYodFtoXS5zZWxlY3RlZD0xKX19fSxsLnNlbEluZGljZXMyc2VsUG9pbnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0ZWRwb2ludHMscj10Ll9pbmRleFRvUG9pbnRzO2lmKHIpe2Zvcih2YXIgbj1rKHIpLGk9W10sYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1lW2FdO2lmKGwuaXNJbmRleChvKSl7dmFyIHM9bltvXTtsLmlzSW5kZXgocykmJmkucHVzaChzKX19cmV0dXJuIGl9cmV0dXJuIGV9LGwuZ2V0VGFyZ2V0QXJyYXk9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnRhcmdldDtpZihcInN0cmluZ1wiPT10eXBlb2YgciYmcil7dmFyIG49bC5uZXN0ZWRQcm9wZXJ0eSh0LHIpLmdldCgpO3JldHVybiEhQXJyYXkuaXNBcnJheShuKSYmbn1yZXR1cm4hIUFycmF5LmlzQXJyYXkocikmJnJ9LGwubWluRXh0ZW5kPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307XCJvYmplY3RcIiE9dHlwZW9mIGUmJihlPXt9KTt2YXIgbixpLGEsbz1PYmplY3Qua2V5cyh0KTtmb3Iobj0wO248by5sZW5ndGg7bisrKWE9dFtpPW9bbl1dLFwiX1wiIT09aS5jaGFyQXQoMCkmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGEmJihcIm1vZHVsZVwiPT09aT9yW2ldPWE6QXJyYXkuaXNBcnJheShhKT9yW2ldPVwiY29sb3JzY2FsZVwiPT09aT9hLnNsaWNlKCk6YS5zbGljZSgwLDMpOnJbaV09YSYmXCJvYmplY3RcIj09dHlwZW9mIGE/bC5taW5FeHRlbmQodFtpXSxlW2ldKTphKTtmb3Iobz1PYmplY3Qua2V5cyhlKSxuPTA7bjxvLmxlbmd0aDtuKyspXCJvYmplY3RcIj09dHlwZW9mKGE9ZVtpPW9bbl1dKSYmaSBpbiByJiZcIm9iamVjdFwiPT10eXBlb2YgcltpXXx8KHJbaV09YSk7cmV0dXJuIHJ9LGwudGl0bGVDYXNlPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc3Vic3RyKDEpfSxsLmNvbnRhaW5zQW55PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYoLTEhPT10LmluZGV4T2YoZVtyXSkpcmV0dXJuITA7cmV0dXJuITF9LGwuaXNQbG90RGl2PWZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHQpO3JldHVybiBlLm5vZGUoKWluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJmUuc2l6ZSgpJiZlLmNsYXNzZWQoXCJqcy1wbG90bHktcGxvdFwiKX0sbC5yZW1vdmVFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXQmJnQucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHQpfSxsLmFkZFN0eWxlUnVsZT1mdW5jdGlvbih0LGUpe2wuYWRkUmVsYXRlZFN0eWxlUnVsZShcImdsb2JhbFwiLHQsZSl9LGwuYWRkUmVsYXRlZFN0eWxlUnVsZT1mdW5jdGlvbih0LGUscil7dmFyIG49XCJwbG90bHkuanMtc3R5bGUtXCIrdCxpPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG4pO2l8fCgoaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIikpLnNldEF0dHJpYnV0ZShcImlkXCIsbiksaS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChpKSk7dmFyIGE9aS5zaGVldDthLmluc2VydFJ1bGU/YS5pbnNlcnRSdWxlKGUrXCJ7XCIrcitcIn1cIiwwKTphLmFkZFJ1bGU/YS5hZGRSdWxlKGUsciwwKTpsLndhcm4oXCJhZGRTdHlsZVJ1bGUgZmFpbGVkXCIpfSxsLmRlbGV0ZVJlbGF0ZWRTdHlsZVJ1bGU9ZnVuY3Rpb24odCl7dmFyIGU9XCJwbG90bHkuanMtc3R5bGUtXCIrdCxyPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO3ImJmwucmVtb3ZlRWxlbWVudChyKX0sbC5pc0lFPWZ1bmN0aW9uKCl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYn0sbC5pc0QzU2VsZWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmNsYXNzZWR9LGwuZW5zdXJlU2luZ2xlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuc2VsZWN0KGUrKHI/XCIuXCIrcjpcIlwiKSk7aWYoaS5zaXplKCkpcmV0dXJuIGk7dmFyIGE9dC5hcHBlbmQoZSk7cmV0dXJuIHImJmEuY2xhc3NlZChyLCEwKSxuJiZhLmNhbGwobiksYX0sbC5lbnN1cmVTaW5nbGVCeUlkPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuc2VsZWN0KGUrXCIjXCIrcik7aWYoaS5zaXplKCkpcmV0dXJuIGk7dmFyIGE9dC5hcHBlbmQoZSkuYXR0cihcImlkXCIscik7cmV0dXJuIG4mJmEuY2FsbChuKSxhfSxsLm9iamVjdEZyb21QYXRoPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC5zcGxpdChcIi5cIiksaT1yPXt9LGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXSxzPW51bGwsbD1uW2FdLm1hdGNoKC8oLiopXFxbKFswLTldKylcXF0vKTtsPyhvPWxbMV0scz1sWzJdLHI9cltvXT1bXSxhPT09bi5sZW5ndGgtMT9yW3NdPWU6cltzXT17fSxyPXJbc10pOihhPT09bi5sZW5ndGgtMT9yW29dPWU6cltvXT17fSxyPXJbb10pfXJldHVybiBpfTt2YXIgQT0vXihbXlxcW1xcLl0rKVxcLiguKyk/LyxUPS9eKFteXFwuXSspXFxbKFswLTldKylcXF0oXFwuKT8oLispPy87bC5leHBhbmRPYmplY3RQYXRocz1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scztpZihcIm9iamVjdFwiPT10eXBlb2YgdCYmIUFycmF5LmlzQXJyYXkodCkpZm9yKHIgaW4gdCl0Lmhhc093blByb3BlcnR5KHIpJiYoKGU9ci5tYXRjaChBKSk/KGk9dFtyXSxuPWVbMV0sZGVsZXRlIHRbcl0sdFtuXT1sLmV4dGVuZERlZXBOb0FycmF5cyh0W25dfHx7fSxsLm9iamVjdEZyb21QYXRoKHIsbC5leHBhbmRPYmplY3RQYXRocyhpKSlbbl0pKTooZT1yLm1hdGNoKFQpKT8oaT10W3JdLG49ZVsxXSxhPXBhcnNlSW50KGVbMl0pLGRlbGV0ZSB0W3JdLHRbbl09dFtuXXx8W10sXCIuXCI9PT1lWzNdPyhzPWVbNF0sbz10W25dW2FdPXRbbl1bYV18fHt9LGwuZXh0ZW5kRGVlcE5vQXJyYXlzKG8sbC5vYmplY3RGcm9tUGF0aChzLGwuZXhwYW5kT2JqZWN0UGF0aHMoaSkpKSk6dFtuXVthXT1sLmV4cGFuZE9iamVjdFBhdGhzKGkpKTp0W3JdPWwuZXhwYW5kT2JqZWN0UGF0aHModFtyXSkpO3JldHVybiB0fSxsLm51bVNlcGFyYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZihyfHwocj0hMSksXCJzdHJpbmdcIiE9dHlwZW9mIGV8fDA9PT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJTZXBhcmF0b3Igc3RyaW5nIHJlcXVpcmVkIGZvciBmb3JtYXR0aW5nIVwiKTtcIm51bWJlclwiPT10eXBlb2YgdCYmKHQ9U3RyaW5nKHQpKTt2YXIgbj0vKFxcZCspKFxcZHszfSkvLGk9ZS5jaGFyQXQoMCksYT1lLmNoYXJBdCgxKSxvPXQuc3BsaXQoXCIuXCIpLHM9b1swXSxsPW8ubGVuZ3RoPjE/aStvWzFdOlwiXCI7aWYoYSYmKG8ubGVuZ3RoPjF8fHMubGVuZ3RoPjR8fHIpKWZvcig7bi50ZXN0KHMpOylzPXMucmVwbGFjZShuLFwiJDFcIithK1wiJDJcIik7cmV0dXJuIHMrbH0sbC5URU1QTEFURV9TVFJJTkdfUkVHRVg9LyV7KFteXFxzJXt9Ol0qKSg6W159XSopP30vZzt2YXIgTT0vXlxcdyokLztsLnRlbXBsYXRlU3RyaW5nPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307cmV0dXJuIHQucmVwbGFjZShsLlRFTVBMQVRFX1NUUklOR19SRUdFWCxmdW5jdGlvbih0LG4pe3JldHVybiBNLnRlc3Qobik/ZVtuXXx8XCJcIjoocltuXT1yW25dfHxsLm5lc3RlZFByb3BlcnR5KGUsbikuZ2V0LHJbbl0oKXx8XCJcIil9KX07dmFyIFM9L146LyxFPTA7bC5ob3ZlcnRlbXBsYXRlU3RyaW5nPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1hcmd1bWVudHMsYT17fTtyZXR1cm4gdC5yZXBsYWNlKGwuVEVNUExBVEVfU1RSSU5HX1JFR0VYLGZ1bmN0aW9uKHQsbyxzKXt2YXIgYyx1LGg7Zm9yKGg9MztoPGkubGVuZ3RoO2grKyl7aWYoKGM9aVtoXSkuaGFzT3duUHJvcGVydHkobykpe3U9Y1tvXTticmVha31pZihNLnRlc3Qobyl8fCh1PWFbb118fGwubmVzdGVkUHJvcGVydHkoYyxvKS5nZXQoKSkmJihhW29dPXUpLHZvaWQgMCE9PXUpYnJlYWt9KHZvaWQgMD09PXUmJihFPDEwJiYobC53YXJuKFwiVmFyaWFibGUgJ1wiK28rXCInIGluIGhvdmVydGVtcGxhdGUgY291bGQgbm90IGJlIGZvdW5kIVwiKSx1PXQpLDEwPT09RSYmbC53YXJuKFwiVG9vIG1hbnkgaG92ZXJ0ZW1wbGF0ZSB3YXJuaW5ncyAtIGFkZGl0aW9uYWwgd2FybmluZ3Mgd2lsbCBiZSBzdXBwcmVzc2VkXCIpLEUrKykscyk/dT0ocj9yLm51bWJlckZvcm1hdDpuLmZvcm1hdCkocy5yZXBsYWNlKFMsXCJcIikpKHUpOmUuaGFzT3duUHJvcGVydHkobytcIkxhYmVsXCIpJiYodT1lW28rXCJMYWJlbFwiXSk7cmV0dXJuIHV9KX07bC5zdWJwbG90U29ydD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCkrMSxuPTAsaT0wLGE9MDthPHI7YSsrKXt2YXIgbz10LmNoYXJDb2RlQXQoYSl8fDAscz1lLmNoYXJDb2RlQXQoYSl8fDAsbD1vPj00OCYmbzw9NTcsYz1zPj00OCYmczw9NTc7aWYobCYmKG49MTAqbitvLTQ4KSxjJiYoaT0xMCppK3MtNDgpLCFsfHwhYyl7aWYobiE9PWkpcmV0dXJuIG4taTtpZihvIT09cylyZXR1cm4gby1zfX1yZXR1cm4gaS1ufTt2YXIgQz0yZTk7bC5zZWVkUHNldWRvUmFuZG9tPWZ1bmN0aW9uKCl7Qz0yZTl9LGwucHNldWRvUmFuZG9tPWZ1bmN0aW9uKCl7dmFyIHQ9QztyZXR1cm4gQz0oNjkwNjkqQysxKSU0Mjk0OTY3Mjk2LE1hdGguYWJzKEMtdCk8NDI5NDk2NzI5P2wucHNldWRvUmFuZG9tKCk6Qy80Mjk0OTY3Mjk2fX0se1wiLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4vYW5jaG9yX3V0aWxzXCI6NjgyLFwiLi9hbmdsZXNcIjo2ODMsXCIuL2FycmF5XCI6Njg0LFwiLi9jbGVhbl9udW1iZXJcIjo2ODUsXCIuL2NsZWFyX3Jlc3BvbnNpdmVcIjo2ODcsXCIuL2NvZXJjZVwiOjY4OCxcIi4vZGF0ZXNcIjo2ODksXCIuL2V4dGVuZFwiOjY5MSxcIi4vZmlsdGVyX3VuaXF1ZVwiOjY5MixcIi4vZmlsdGVyX3Zpc2libGVcIjo2OTMsXCIuL2dlb21ldHJ5MmRcIjo2OTYsXCIuL2dldF9ncmFwaF9kaXZcIjo2OTcsXCIuL2lkZW50aXR5XCI6NzAwLFwiLi9pc19wbGFpbl9vYmplY3RcIjo3MDIsXCIuL2tleWVkX2NvbnRhaW5lclwiOjcwMyxcIi4vbG9jYWxpemVcIjo3MDQsXCIuL2xvZ2dlcnNcIjo3MDUsXCIuL21ha2VfdHJhY2VfZ3JvdXBzXCI6NzA2LFwiLi9tYXRyaXhcIjo3MDcsXCIuL21vZFwiOjcwOCxcIi4vbmVzdGVkX3Byb3BlcnR5XCI6NzA5LFwiLi9ub29wXCI6NzEwLFwiLi9ub3RpZmllclwiOjcxMSxcIi4vcHVzaF91bmlxdWVcIjo3MTUsXCIuL3JlZ2V4XCI6NzE3LFwiLi9yZWxhdGl2ZV9hdHRyXCI6NzE4LFwiLi9yZWxpbmtfcHJpdmF0ZVwiOjcxOSxcIi4vc2VhcmNoXCI6NzIwLFwiLi9zdGF0c1wiOjcyMyxcIi4vdGhyb3R0bGVcIjo3MjYsXCIuL3RvX2xvZ19yYW5nZVwiOjcyNyxkMzoxNTUsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDcwMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gd2luZG93JiZ3aW5kb3cucHJvY2VzcyYmd2luZG93LnByb2Nlc3MudmVyc2lvbnM/XCJbb2JqZWN0IE9iamVjdF1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KTpcIltvYmplY3QgT2JqZWN0XVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1PYmplY3QucHJvdG90eXBlfX0se31dLDcwMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL25lc3RlZF9wcm9wZXJ0eVwiKSxpPS9eXFx3KiQvO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbyxzLGw7cj1yfHxcIm5hbWVcIixhPWF8fFwidmFsdWVcIjt2YXIgYz17fTtlJiZlLmxlbmd0aD8obD1uKHQsZSkscz1sLmdldCgpKTpzPXQsZT1lfHxcIlwiO3ZhciB1PXt9O2lmKHMpZm9yKG89MDtvPHMubGVuZ3RoO28rKyl1W3Nbb11bcl1dPW87dmFyIGg9aS50ZXN0KGEpLGY9e3NldDpmdW5jdGlvbih0LGUpe3ZhciBpPW51bGw9PT1lPzQ6MDtpZighcyl7aWYoIWx8fDQ9PT1pKXJldHVybjtzPVtdLGwuc2V0KHMpfXZhciBvPXVbdF07aWYodm9pZCAwPT09byl7aWYoND09PWkpcmV0dXJuO2l8PTMsbz1zLmxlbmd0aCx1W3RdPW99ZWxzZSBlIT09KGg/c1tvXVthXTpuKHNbb10sYSkuZ2V0KCkpJiYoaXw9Mik7dmFyIHA9c1tvXT1zW29dfHx7fTtyZXR1cm4gcFtyXT10LGg/cFthXT1lOm4ocCxhKS5zZXQoZSksbnVsbCE9PWUmJihpJj0tNSksY1tvXT1jW29dfGksZn0sZ2V0OmZ1bmN0aW9uKHQpe2lmKHMpe3ZhciBlPXVbdF07cmV0dXJuIHZvaWQgMD09PWU/dm9pZCAwOmg/c1tlXVthXTpuKHNbZV0sYSkuZ2V0KCl9fSxyZW5hbWU6ZnVuY3Rpb24odCxlKXt2YXIgbj11W3RdO3JldHVybiB2b2lkIDA9PT1uP2Y6KGNbbl09MXxjW25dLHVbZV09bixkZWxldGUgdVt0XSxzW25dW3JdPWUsZil9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT11W3RdO2lmKHZvaWQgMD09PWUpcmV0dXJuIGY7dmFyIGk9c1tlXTtpZihPYmplY3Qua2V5cyhpKS5sZW5ndGg+MilyZXR1cm4gY1tlXT0yfGNbZV0sZi5zZXQodCxudWxsKTtpZihoKXtmb3Iobz1lO288cy5sZW5ndGg7bysrKWNbb109M3xjW29dO2ZvcihvPWU7bzxzLmxlbmd0aDtvKyspdVtzW29dW3JdXS0tO3Muc3BsaWNlKGUsMSksZGVsZXRlIHVbdF19ZWxzZSBuKGksYSkuc2V0KG51bGwpLGNbZV09NnxjW2VdO3JldHVybiBmfSxjb25zdHJ1Y3RVcGRhdGU6ZnVuY3Rpb24oKXtmb3IodmFyIHQsaSxvPXt9LGw9T2JqZWN0LmtleXMoYyksdT0wO3U8bC5sZW5ndGg7dSsrKWk9bFt1XSx0PWUrXCJbXCIraStcIl1cIixzW2ldPygxJmNbaV0mJihvW3QrXCIuXCIrcl09c1tpXVtyXSksMiZjW2ldJiYob1t0K1wiLlwiK2FdPWg/NCZjW2ldP251bGw6c1tpXVthXTo0JmNbaV0/bnVsbDpuKHNbaV0sYSkuZ2V0KCkpKTpvW3RdPW51bGw7cmV0dXJuIG99fTtyZXR1cm4gZn19LHtcIi4vbmVzdGVkX3Byb3BlcnR5XCI6NzA5fV0sNzA0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3JlZ2lzdHJ5XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Ll9jb250ZXh0LmxvY2FsZSxpPTA7aTwyO2krKyl7Zm9yKHZhciBhPXQuX2NvbnRleHQubG9jYWxlcyxvPTA7bzwyO28rKyl7dmFyIHM9KGFbcl18fHt9KS5kaWN0aW9uYXJ5O2lmKHMpe3ZhciBsPXNbZV07aWYobClyZXR1cm4gbH1hPW4ubG9jYWxlUmVnaXN0cnl9dmFyIGM9ci5zcGxpdChcIi1cIilbMF07aWYoYz09PXIpYnJlYWs7cj1jfXJldHVybiBlfX0se1wiLi4vcmVnaXN0cnlcIjo4Mjl9XSw3MDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vcGxvdF9hcGkvcGxvdF9jb25maWdcIikuZGZsdENvbmZpZyxpPWUuZXhwb3J0cz17fTtmdW5jdGlvbiBhKHQsZSl7aWYodCYmdC5hcHBseSl0cnl7cmV0dXJuIHZvaWQgdC5hcHBseShjb25zb2xlLGUpfWNhdGNoKHQpe31mb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0cnl7dChlW3JdKX1jYXRjaCh0KXtjb25zb2xlLmxvZyhlW3JdKX19aS5sb2c9ZnVuY3Rpb24oKXtpZihuLmxvZ2dpbmc+MSl7Zm9yKHZhciB0PVtcIkxPRzpcIl0sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdC5wdXNoKGFyZ3VtZW50c1tlXSk7YShjb25zb2xlLnRyYWNlfHxjb25zb2xlLmxvZyx0KX19LGkud2Fybj1mdW5jdGlvbigpe2lmKG4ubG9nZ2luZz4wKXtmb3IodmFyIHQ9W1wiV0FSTjpcIl0sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdC5wdXNoKGFyZ3VtZW50c1tlXSk7YShjb25zb2xlLnRyYWNlfHxjb25zb2xlLmxvZyx0KX19LGkuZXJyb3I9ZnVuY3Rpb24oKXtpZihuLmxvZ2dpbmc+MCl7Zm9yKHZhciB0PVtcIkVSUk9SOlwiXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0LnB1c2goYXJndW1lbnRzW2VdKTthKGNvbnNvbGUuZXJyb3IsdCl9fX0se1wiLi4vcGxvdF9hcGkvcGxvdF9jb25maWdcIjo3Mzd9XSw3MDY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuc2VsZWN0QWxsKFwiZy5cIityLnJlcGxhY2UoL1xccy9nLFwiLlwiKSkuZGF0YShlLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLnVpZH0pO3JldHVybiBuLmV4aXQoKS5yZW1vdmUoKSxuLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIixyKSxuLm9yZGVyKCksbn19LHt9XSw3MDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLmluaXQyZEFycmF5PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0O24rKylyW25dPW5ldyBBcnJheShlKTtyZXR1cm4gcn0sci50cmFuc3Bvc2VSYWdnZWQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPTAsaT10Lmxlbmd0aDtmb3IoZT0wO2U8aTtlKyspbj1NYXRoLm1heChuLHRbZV0ubGVuZ3RoKTt2YXIgYT1uZXcgQXJyYXkobik7Zm9yKGU9MDtlPG47ZSsrKWZvcihhW2VdPW5ldyBBcnJheShpKSxyPTA7cjxpO3IrKylhW2VdW3JdPXRbcl1bZV07cmV0dXJuIGF9LHIuZG90PWZ1bmN0aW9uKHQsZSl7aWYoIXQubGVuZ3RofHwhZS5sZW5ndGh8fHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIG4saSxhPXQubGVuZ3RoO2lmKHRbMF0ubGVuZ3RoKWZvcihuPW5ldyBBcnJheShhKSxpPTA7aTxhO2krKyluW2ldPXIuZG90KHRbaV0sZSk7ZWxzZSBpZihlWzBdLmxlbmd0aCl7dmFyIG89ci50cmFuc3Bvc2VSYWdnZWQoZSk7Zm9yKG49bmV3IEFycmF5KG8ubGVuZ3RoKSxpPTA7aTxvLmxlbmd0aDtpKyspbltpXT1yLmRvdCh0LG9baV0pfWVsc2UgZm9yKG49MCxpPTA7aTxhO2krKyluKz10W2ldKmVbaV07cmV0dXJuIG59LHIudHJhbnNsYXRpb25NYXRyaXg9ZnVuY3Rpb24odCxlKXtyZXR1cm5bWzEsMCx0XSxbMCwxLGVdLFswLDAsMV1dfSxyLnJvdGF0aW9uTWF0cml4PWZ1bmN0aW9uKHQpe3ZhciBlPXQqTWF0aC5QSS8xODA7cmV0dXJuW1tNYXRoLmNvcyhlKSwtTWF0aC5zaW4oZSksMF0sW01hdGguc2luKGUpLE1hdGguY29zKGUpLDBdLFswLDAsMV1dfSxyLnJvdGF0aW9uWFlNYXRyaXg9ZnVuY3Rpb24odCxlLG4pe3JldHVybiByLmRvdChyLmRvdChyLnRyYW5zbGF0aW9uTWF0cml4KGUsbiksci5yb3RhdGlvbk1hdHJpeCh0KSksci50cmFuc2xhdGlvbk1hdHJpeCgtZSwtbikpfSxyLmFwcGx5MkRUcmFuc2Zvcm09ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzOzM9PT1lLmxlbmd0aCYmKGU9ZVswXSk7dmFyIG49MT09PWFyZ3VtZW50cy5sZW5ndGg/ZVswXTpbZVswXSxlWzFdXTtyZXR1cm4gci5kb3QodCxbblswXSxuWzFdLDFdKS5zbGljZSgwLDIpfX0sci5hcHBseTJEVHJhbnNmb3JtMj1mdW5jdGlvbih0KXt2YXIgZT1yLmFwcGx5MkRUcmFuc2Zvcm0odCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQuc2xpY2UoMCwyKSkuY29uY2F0KGUodC5zbGljZSgyLDQpKSl9fX0se31dLDcwODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17bW9kOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dCVlO3JldHVybiByPDA/citlOnJ9LG1vZEhhbGY6ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hYnModCk+ZS8yP3QtTWF0aC5yb3VuZCh0L2UpKmU6dH19fSx7fV0sNzA5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4vYXJyYXlcIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihuKGUpKWU9U3RyaW5nKGUpO2Vsc2UgaWYoXCJzdHJpbmdcIiE9dHlwZW9mIGV8fFwiWy0xXVwiPT09ZS5zdWJzdHIoZS5sZW5ndGgtNCkpdGhyb3dcImJhZCBwcm9wZXJ0eSBzdHJpbmdcIjtmb3IodmFyIHIsYSxvLGw9MCxjPWUuc3BsaXQoXCIuXCIpO2w8Yy5sZW5ndGg7KXtpZihyPVN0cmluZyhjW2xdKS5tYXRjaCgvXihbXlxcW1xcXV0qKSgoXFxbXFwtP1swLTldKlxcXSkrKSQvKSl7aWYoclsxXSljW2xdPXJbMV07ZWxzZXtpZigwIT09bCl0aHJvd1wiYmFkIHByb3BlcnR5IHN0cmluZ1wiO2Muc3BsaWNlKDAsMSl9Zm9yKGE9clsyXS5zdWJzdHIoMSxyWzJdLmxlbmd0aC0yKS5zcGxpdChcIl1bXCIpLG89MDtvPGEubGVuZ3RoO28rKylsKyssYy5zcGxpY2UobCwwLE51bWJlcihhW29dKSl9bCsrfXJldHVyblwib2JqZWN0XCIhPXR5cGVvZiB0P2Z1bmN0aW9uKHQsZSxyKXtyZXR1cm57c2V0OmZ1bmN0aW9uKCl7dGhyb3dcImJhZCBjb250YWluZXJcIn0sZ2V0OmZ1bmN0aW9uKCl7fSxhc3RyOmUscGFydHM6cixvYmo6dH19KHQsZSxjKTp7c2V0OnModCxjLGUpLGdldDpmdW5jdGlvbiB0KGUscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG4sYSxvLHMsbCxjPWU7Zm9yKHM9MDtzPHIubGVuZ3RoLTE7cysrKXtpZigtMT09PShuPXJbc10pKXtmb3IoYT0hMCxvPVtdLGw9MDtsPGMubGVuZ3RoO2wrKylvW2xdPXQoY1tsXSxyLnNsaWNlKHMrMSkpKCksb1tsXSE9PW9bMF0mJihhPSExKTtyZXR1cm4gYT9vWzBdOm99aWYoXCJudW1iZXJcIj09dHlwZW9mIG4mJiFpKGMpKXJldHVybjtpZihcIm9iamVjdFwiIT10eXBlb2YoYz1jW25dKXx8bnVsbD09PWMpcmV0dXJufWlmKFwib2JqZWN0XCI9PXR5cGVvZiBjJiZudWxsIT09YyYmbnVsbCE9PShvPWNbcltzXV0pKXJldHVybiBvfX0odCxjKSxhc3RyOmUscGFydHM6YyxvYmo6dH19O3ZhciBhPS8oXnxcXC4pYXJnc1xcWy87ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB2b2lkIDA9PT10fHxudWxsPT09dCYmIWUubWF0Y2goYSl9ZnVuY3Rpb24gcyh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBhLHMsaD10LGY9XCJcIixwPVtbdCxmXV0sZD1vKG4scik7Zm9yKHM9MDtzPGUubGVuZ3RoLTE7cysrKXtpZihcIm51bWJlclwiPT10eXBlb2YoYT1lW3NdKSYmIWkoaCkpdGhyb3dcImFycmF5IGluZGV4IGJ1dCBjb250YWluZXIgaXMgbm90IGFuIGFycmF5XCI7aWYoLTE9PT1hKXtpZihkPSFjKGgsZS5zbGljZShzKzEpLG4scikpYnJlYWs7cmV0dXJufWlmKCF1KGgsYSxlW3MrMV0sZCkpYnJlYWs7aWYoXCJvYmplY3RcIiE9dHlwZW9mKGg9aFthXSl8fG51bGw9PT1oKXRocm93XCJjb250YWluZXIgaXMgbm90IGFuIG9iamVjdFwiO2Y9bChmLGEpLHAucHVzaChbaCxmXSl9aWYoZCl7aWYocz09PWUubGVuZ3RoLTEmJihkZWxldGUgaFtlW3NdXSxBcnJheS5pc0FycmF5KGgpJiYrZVtzXT09aC5sZW5ndGgtMSkpZm9yKDtoLmxlbmd0aCYmdm9pZCAwPT09aFtoLmxlbmd0aC0xXTspaC5wb3AoKX1lbHNlIGhbZVtzXV09bn19ZnVuY3Rpb24gbCh0LGUpe3ZhciByPWU7cmV0dXJuIG4oZSk/cj1cIltcIitlK1wiXVwiOnQmJihyPVwiLlwiK2UpLHQrcn1mdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBhLGw9aShyKSxjPSEwLGg9cixmPW4ucmVwbGFjZShcIi0xXCIsMCkscD0hbCYmbyhyLGYpLGQ9ZVswXTtmb3IoYT0wO2E8dC5sZW5ndGg7YSsrKWY9bi5yZXBsYWNlKFwiLTFcIixhKSxsJiYocD1vKGg9clthJXIubGVuZ3RoXSxmKSkscCYmKGM9ITEpLHUodCxhLGQscCkmJnModFthXSxlLG4ucmVwbGFjZShcIi0xXCIsYSkpKGgpO3JldHVybiBjfWZ1bmN0aW9uIHUodCxlLHIsbil7aWYodm9pZCAwPT09dFtlXSl7aWYobilyZXR1cm4hMTt0W2VdPVwibnVtYmVyXCI9PXR5cGVvZiByP1tdOnt9fXJldHVybiEwfX0se1wiLi9hcnJheVwiOjY4NCxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sNzEwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7fX0se31dLDcxMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxhPVtdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKC0xPT09YS5pbmRleE9mKHQpKXthLnB1c2godCk7dmFyIHI9MWUzO2koZSk/cj1lOlwibG9uZ1wiPT09ZSYmKHI9M2UzKTt2YXIgbz1uLnNlbGVjdChcImJvZHlcIikuc2VsZWN0QWxsKFwiLnBsb3RseS1ub3RpZmllclwiKS5kYXRhKFswXSk7by5lbnRlcigpLmFwcGVuZChcImRpdlwiKS5jbGFzc2VkKFwicGxvdGx5LW5vdGlmaWVyXCIsITApLG8uc2VsZWN0QWxsKFwiLm5vdGlmaWVyLW5vdGVcIikuZGF0YShhKS5lbnRlcigpLmFwcGVuZChcImRpdlwiKS5jbGFzc2VkKFwibm90aWZpZXItbm90ZVwiLCEwKS5zdHlsZShcIm9wYWNpdHlcIiwwKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO2UuYXBwZW5kKFwiYnV0dG9uXCIpLmNsYXNzZWQoXCJub3RpZmllci1jbG9zZVwiLCEwKS5odG1sKFwiJnRpbWVzO1wiKS5vbihcImNsaWNrXCIsZnVuY3Rpb24oKXtlLnRyYW5zaXRpb24oKS5jYWxsKHMpfSk7Zm9yKHZhciBpPWUuYXBwZW5kKFwicFwiKSxhPXQuc3BsaXQoLzxiclxccypcXC8/Pi9nKSxvPTA7bzxhLmxlbmd0aDtvKyspbyYmaS5hcHBlbmQoXCJiclwiKSxpLmFwcGVuZChcInNwYW5cIikudGV4dChhW29dKTtlLnRyYW5zaXRpb24oKS5kdXJhdGlvbig3MDApLnN0eWxlKFwib3BhY2l0eVwiLDEpLnRyYW5zaXRpb24oKS5kZWxheShyKS5jYWxsKHMpfSl9ZnVuY3Rpb24gcyh0KXt0LmR1cmF0aW9uKDcwMCkuc3R5bGUoXCJvcGFjaXR5XCIsMCkuZWFjaChcImVuZFwiLGZ1bmN0aW9uKHQpe3ZhciBlPWEuaW5kZXhPZih0KTstMSE9PWUmJmEuc3BsaWNlKGUsMSksbi5zZWxlY3QodGhpcykucmVtb3ZlKCl9KX19fSx7ZDM6MTU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw3MTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9zZXRjdXJzb3JcIiksaT1cImRhdGEtc2F2ZWRjdXJzb3JcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmF0dHIoaSk7aWYoZSl7aWYoIXIpe2Zvcih2YXIgYT0odC5hdHRyKFwiY2xhc3NcIil8fFwiXCIpLnNwbGl0KFwiIFwiKSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107MD09PXMuaW5kZXhPZihcImN1cnNvci1cIikmJnQuYXR0cihpLHMuc3Vic3RyKDcpKS5jbGFzc2VkKHMsITEpfXQuYXR0cihpKXx8dC5hdHRyKGksXCIhIVwiKX1uKHQsZSl9ZWxzZSByJiYodC5hdHRyKGksbnVsbCksXCIhIVwiPT09cj9uKHQpOm4odCxyKSl9fSx7XCIuL3NldGN1cnNvclwiOjcyMX1dLDcxMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL21hdHJpeFwiKS5kb3QsaT10KFwiLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKS5CQUROVU0sYT1lLmV4cG9ydHM9e307YS50ZXN0ZXI9ZnVuY3Rpb24odCl7dmFyIGUscj10LnNsaWNlKCksbj1yWzBdWzBdLGE9bixvPXJbMF1bMV0scz1vO2ZvcihyLnB1c2goclswXSksZT0xO2U8ci5sZW5ndGg7ZSsrKW49TWF0aC5taW4obixyW2VdWzBdKSxhPU1hdGgubWF4KGEscltlXVswXSksbz1NYXRoLm1pbihvLHJbZV1bMV0pLHM9TWF0aC5tYXgocyxyW2VdWzFdKTt2YXIgbCxjPSExOzU9PT1yLmxlbmd0aCYmKHJbMF1bMF09PT1yWzFdWzBdP3JbMl1bMF09PT1yWzNdWzBdJiZyWzBdWzFdPT09clszXVsxXSYmclsxXVsxXT09PXJbMl1bMV0mJihjPSEwLGw9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09PT1yWzBdWzBdfSk6clswXVsxXT09PXJbMV1bMV0mJnJbMl1bMV09PT1yWzNdWzFdJiZyWzBdWzBdPT09clszXVswXSYmclsxXVswXT09PXJbMl1bMF0mJihjPSEwLGw9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMV09PT1yWzBdWzFdfSkpO3ZhciB1PSEwLGg9clswXTtmb3IoZT0xO2U8ci5sZW5ndGg7ZSsrKWlmKGhbMF0hPT1yW2VdWzBdfHxoWzFdIT09cltlXVsxXSl7dT0hMTticmVha31yZXR1cm57eG1pbjpuLHhtYXg6YSx5bWluOm8seW1heDpzLHB0czpyLGNvbnRhaW5zOmM/ZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLGM9dFsxXTtyZXR1cm4hKHI9PT1pfHxyPG58fHI+YXx8Yz09PWl8fGM8b3x8Yz5zfHxlJiZsKHQpKX06ZnVuY3Rpb24odCxlKXt2YXIgbD10WzBdLGM9dFsxXTtpZihsPT09aXx8bDxufHxsPmF8fGM9PT1pfHxjPG98fGM+cylyZXR1cm4hMTt2YXIgdSxoLGYscCxkLGc9ci5sZW5ndGgsdj1yWzBdWzBdLG09clswXVsxXSx5PTA7Zm9yKHU9MTt1PGc7dSsrKWlmKGg9dixmPW0sdj1yW3VdWzBdLG09clt1XVsxXSwhKGw8KHA9TWF0aC5taW4oaCx2KSl8fGw+TWF0aC5tYXgoaCx2KXx8Yz5NYXRoLm1heChmLG0pKSlpZihjPE1hdGgubWluKGYsbSkpbCE9PXAmJnkrKztlbHNle2lmKGM9PT0oZD12PT09aD9jOmYrKGwtaCkqKG0tZikvKHYtaCkpKXJldHVybiAxIT09dXx8IWU7Yzw9ZCYmbCE9PXAmJnkrK31yZXR1cm4geSUyPT0xfSxpc1JlY3Q6YyxkZWdlbmVyYXRlOnV9fTt2YXIgbz1hLmlzU2VnbWVudEJlbnQ9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbyxzLGw9dFtlXSxjPVt0W3JdWzBdLWxbMF0sdFtyXVsxXS1sWzFdXSx1PW4oYyxjKSxoPU1hdGguc3FydCh1KSxmPVstY1sxXS9oLGNbMF0vaF07Zm9yKGE9ZSsxO2E8cjthKyspaWYobz1bdFthXVswXS1sWzBdLHRbYV1bMV0tbFsxXV0sKHM9bihvLGMpKTwwfHxzPnV8fE1hdGguYWJzKG4obyxmKSk+aSlyZXR1cm4hMDtyZXR1cm4hMX07YS5maWx0ZXI9ZnVuY3Rpb24odCxlKXt2YXIgcj1bdFswXV0sbj0wLGk9MDtmdW5jdGlvbiBhKGEpe3QucHVzaChhKTt2YXIgcz1yLmxlbmd0aCxsPW47ci5zcGxpY2UoaSsxKTtmb3IodmFyIGM9bCsxO2M8dC5sZW5ndGg7YysrKShjPT09dC5sZW5ndGgtMXx8byh0LGwsYysxLGUpKSYmKHIucHVzaCh0W2NdKSxyLmxlbmd0aDxzLTImJihuPWMsaT1yLmxlbmd0aC0xKSxsPWMpfXQubGVuZ3RoPjEmJmEodC5wb3AoKSk7cmV0dXJue2FkZFB0OmEscmF3OnQsZmlsdGVyZWQ6cn19fSx7XCIuLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi9tYXRyaXhcIjo3MDd9XSw3MTQ6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vc2hvd19ub193ZWJnbF9tc2dcIiksaT10KFwicmVnbFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgYT10Ll9mdWxsTGF5b3V0LG89ITA7cmV0dXJuIGEuX2dsY2FudmFzLmVhY2goZnVuY3Rpb24obil7aWYoIW4ucmVnbCYmKCFuLnBpY2t8fGEuX2hhcyhcInBhcmNvb3Jkc1wiKSkpe3RyeXtuLnJlZ2w9aSh7Y2FudmFzOnRoaXMsYXR0cmlidXRlczp7YW50aWFsaWFzOiFuLnBpY2sscHJlc2VydmVEcmF3aW5nQnVmZmVyOiEwfSxwaXhlbFJhdGlvOnQuX2NvbnRleHQucGxvdEdsUGl4ZWxSYXRpb3x8ci5kZXZpY2VQaXhlbFJhdGlvLGV4dGVuc2lvbnM6ZXx8W119KX1jYXRjaCh0KXtvPSExfW8mJnRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcIndlYmdsY29udGV4dGxvc3RcIixmdW5jdGlvbihlKXt0JiZ0LmVtaXQmJnQuZW1pdChcInBsb3RseV93ZWJnbGNvbnRleHRsb3N0XCIse2V2ZW50OmUsbGF5ZXI6bi5rZXl9KX0sITEpfX0pLG98fG4oe2NvbnRhaW5lcjphLl9nbGNvbnRhaW5lci5ub2RlKCl9KSxvfX0pLmNhbGwodGhpcyxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se1wiLi9zaG93X25vX3dlYmdsX21zZ1wiOjcyMixyZWdsOjQ4N31dLDcxNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKGUgaW5zdGFuY2VvZiBSZWdFeHApe2Zvcih2YXIgcj1lLnRvU3RyaW5nKCksbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl1pbnN0YW5jZW9mIFJlZ0V4cCYmdFtuXS50b1N0cmluZygpPT09cilyZXR1cm4gdDt0LnB1c2goZSl9ZWxzZSFlJiYwIT09ZXx8LTEhPT10LmluZGV4T2YoZSl8fHQucHVzaChlKTtyZXR1cm4gdH19LHt9XSw3MTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vbGliXCIpLGk9dChcIi4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnXCIpLmRmbHRDb25maWc7dmFyIGE9e2FkZDpmdW5jdGlvbih0LGUscixuLGEpe3ZhciBvLHM7dC51bmRvUXVldWU9dC51bmRvUXVldWV8fHtpbmRleDowLHF1ZXVlOltdLHNlcXVlbmNlOiExfSxzPXQudW5kb1F1ZXVlLmluZGV4LHQuYXV0b3BsYXk/dC51bmRvUXVldWUuaW5TZXF1ZW5jZXx8KHQuYXV0b3BsYXk9ITEpOighdC51bmRvUXVldWUuc2VxdWVuY2V8fHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U/KG89e3VuZG86e2NhbGxzOltdLGFyZ3M6W119LHJlZG86e2NhbGxzOltdLGFyZ3M6W119fSx0LnVuZG9RdWV1ZS5xdWV1ZS5zcGxpY2Uocyx0LnVuZG9RdWV1ZS5xdWV1ZS5sZW5ndGgtcyxvKSx0LnVuZG9RdWV1ZS5pbmRleCs9MSk6bz10LnVuZG9RdWV1ZS5xdWV1ZVtzLTFdLHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U9ITEsbyYmKG8udW5kby5jYWxscy51bnNoaWZ0KGUpLG8udW5kby5hcmdzLnVuc2hpZnQociksby5yZWRvLmNhbGxzLnB1c2gobiksby5yZWRvLmFyZ3MucHVzaChhKSksdC51bmRvUXVldWUucXVldWUubGVuZ3RoPmkucXVldWVMZW5ndGgmJih0LnVuZG9RdWV1ZS5xdWV1ZS5zaGlmdCgpLHQudW5kb1F1ZXVlLmluZGV4LS0pKX0sc3RhcnRTZXF1ZW5jZTpmdW5jdGlvbih0KXt0LnVuZG9RdWV1ZT10LnVuZG9RdWV1ZXx8e2luZGV4OjAscXVldWU6W10sc2VxdWVuY2U6ITF9LHQudW5kb1F1ZXVlLnNlcXVlbmNlPSEwLHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U9ITB9LHN0b3BTZXF1ZW5jZTpmdW5jdGlvbih0KXt0LnVuZG9RdWV1ZT10LnVuZG9RdWV1ZXx8e2luZGV4OjAscXVldWU6W10sc2VxdWVuY2U6ITF9LHQudW5kb1F1ZXVlLnNlcXVlbmNlPSExLHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U9ITF9LHVuZG86ZnVuY3Rpb24odCl7dmFyIGUscjtpZih0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhcil0LmZyYW1ld29yay51bmRvKCk7ZWxzZSBpZighKHZvaWQgMD09PXQudW5kb1F1ZXVlfHxpc05hTih0LnVuZG9RdWV1ZS5pbmRleCl8fHQudW5kb1F1ZXVlLmluZGV4PD0wKSl7Zm9yKHQudW5kb1F1ZXVlLmluZGV4LS0sZT10LnVuZG9RdWV1ZS5xdWV1ZVt0LnVuZG9RdWV1ZS5pbmRleF0sdC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMCxyPTA7cjxlLnVuZG8uY2FsbHMubGVuZ3RoO3IrKylhLnBsb3REbyh0LGUudW5kby5jYWxsc1tyXSxlLnVuZG8uYXJnc1tyXSk7dC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMSx0LmF1dG9wbGF5PSExfX0scmVkbzpmdW5jdGlvbih0KXt2YXIgZSxyO2lmKHQuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5pc1BvbGFyKXQuZnJhbWV3b3JrLnJlZG8oKTtlbHNlIGlmKCEodm9pZCAwPT09dC51bmRvUXVldWV8fGlzTmFOKHQudW5kb1F1ZXVlLmluZGV4KXx8dC51bmRvUXVldWUuaW5kZXg+PXQudW5kb1F1ZXVlLnF1ZXVlLmxlbmd0aCkpe2ZvcihlPXQudW5kb1F1ZXVlLnF1ZXVlW3QudW5kb1F1ZXVlLmluZGV4XSx0LnVuZG9RdWV1ZS5pblNlcXVlbmNlPSEwLHI9MDtyPGUucmVkby5jYWxscy5sZW5ndGg7cisrKWEucGxvdERvKHQsZS5yZWRvLmNhbGxzW3JdLGUucmVkby5hcmdzW3JdKTt0LnVuZG9RdWV1ZS5pblNlcXVlbmNlPSExLHQuYXV0b3BsYXk9ITEsdC51bmRvUXVldWUuaW5kZXgrK319fTthLnBsb3REbz1mdW5jdGlvbih0LGUscil7dC5hdXRvcGxheT0hMCxyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLGk9W10sYT0wO2E8ZS5sZW5ndGg7YSsrKXI9ZVthXSxpW2FdPXI9PT10P3I6XCJvYmplY3RcIj09dHlwZW9mIHI/QXJyYXkuaXNBcnJheShyKT9uLmV4dGVuZERlZXAoW10scik6bi5leHRlbmREZWVwQWxsKHt9LHIpOnI7cmV0dXJuIGl9KHQsciksZS5hcHBseShudWxsLHIpfSxlLmV4cG9ydHM9YX0se1wiLi4vbGliXCI6NzAxLFwiLi4vcGxvdF9hcGkvcGxvdF9jb25maWdcIjo3Mzd9XSw3MTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLmNvdW50ZXI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9KGV8fFwiXCIpKyhyP1wiXCI6XCIkXCIpLGE9ITE9PT1uP1wiXCI6XCJeXCI7cmV0dXJuXCJ4eVwiPT09dD9uZXcgUmVnRXhwKGErXCJ4KFsyLTldfFsxLTldWzAtOV0rKT95KFsyLTldfFsxLTldWzAtOV0rKT9cIitpKTpuZXcgUmVnRXhwKGErdCtcIihbMi05XXxbMS05XVswLTldKyk/XCIraSl9fSx7fV0sNzE4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49L14oLiopKFxcLlteXFwuXFxbXFxdXSt8XFxbXFxkXFxdKSQvLGk9L15bXlxcLlxcW1xcXV0rJC87ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKDtlOyl7dmFyIHI9dC5tYXRjaChuKTtpZihyKXQ9clsxXTtlbHNle2lmKCF0Lm1hdGNoKGkpKXRocm93IG5ldyBFcnJvcihcImJhZCByZWxhdGl2ZUF0dHIgY2FsbDpcIitbdCxlXSk7dD1cIlwifWlmKFwiXlwiIT09ZS5jaGFyQXQoMCkpYnJlYWs7ZT1lLnNsaWNlKDEpfXJldHVybiB0JiZcIltcIiE9PWUuY2hhckF0KDApP3QrXCIuXCIrZTp0K2V9fSx7fV0sNzE5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vYXJyYXlcIikuaXNBcnJheU9yVHlwZWRBcnJheSxpPXQoXCIuL2lzX3BsYWluX29iamVjdFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24gdChlLHIpe2Zvcih2YXIgYSBpbiByKXt2YXIgbz1yW2FdLHM9ZVthXTtpZihzIT09bylpZihcIl9cIj09PWEuY2hhckF0KDApfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBvKXtpZihhIGluIGUpY29udGludWU7ZVthXT1vfWVsc2UgaWYobihvKSYmbihzKSYmaShvWzBdKSl7aWYoXCJjdXN0b21kYXRhXCI9PT1hfHxcImlkc1wiPT09YSljb250aW51ZTtmb3IodmFyIGw9TWF0aC5taW4oby5sZW5ndGgscy5sZW5ndGgpLGM9MDtjPGw7YysrKXNbY10hPT1vW2NdJiZpKG9bY10pJiZpKHNbY10pJiZ0KHNbY10sb1tjXSl9ZWxzZSBpKG8pJiZpKHMpJiYodChzLG8pLE9iamVjdC5rZXlzKHMpLmxlbmd0aHx8ZGVsZXRlIGVbYV0pfX19LHtcIi4vYXJyYXlcIjo2ODQsXCIuL2lzX3BsYWluX29iamVjdFwiOjcwMn1dLDcyMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuL2xvZ2dlcnNcIiksYT10KFwiLi9pZGVudGl0eVwiKTtmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHQ8ZX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIHQ8PWV9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0PmV9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiB0Pj1lfXIuZmluZEJpbj1mdW5jdGlvbih0LGUscil7aWYobihlLnN0YXJ0KSlyZXR1cm4gcj9NYXRoLmNlaWwoKHQtZS5zdGFydCkvZS5zaXplLTFlLTkpLTE6TWF0aC5mbG9vcigodC1lLnN0YXJ0KS9lLnNpemUrMWUtOSk7dmFyIGEsdSxoPTAsZj1lLmxlbmd0aCxwPTAsZD1mPjE/KGVbZi0xXS1lWzBdKS8oZi0xKToxO2Zvcih1PWQ+PTA/cj9vOnM6cj9jOmwsdCs9MWUtOSpkKihyPy0xOjEpKihkPj0wPzE6LTEpO2g8ZiYmcCsrPDEwMDspdShlW2E9TWF0aC5mbG9vcigoaCtmKS8yKV0sdCk/aD1hKzE6Zj1hO3JldHVybiBwPjkwJiZpLmxvZyhcIkxvbmcgYmluYXJ5IHNlYXJjaC4uLlwiKSxoLTF9LHIuc29ydGVyQXNjPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0sci5zb3J0ZXJEZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS10fSxyLmRpc3RpbmN0VmFscz1mdW5jdGlvbih0KXt2YXIgZT10LnNsaWNlKCk7ZS5zb3J0KHIuc29ydGVyQXNjKTtmb3IodmFyIG49ZS5sZW5ndGgtMSxpPWVbbl0tZVswXXx8MSxhPWkvKG58fDEpLzFlNCxvPVtlWzBdXSxzPTA7czxuO3MrKyllW3MrMV0+ZVtzXSthJiYoaT1NYXRoLm1pbihpLGVbcysxXS1lW3NdKSxvLnB1c2goZVtzKzFdKSk7cmV0dXJue3ZhbHM6byxtaW5EaWZmOml9fSxyLnJvdW5kVXA9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpPTAsYT1lLmxlbmd0aC0xLG89MCxzPXI/MDoxLGw9cj8xOjAsYz1yP01hdGguY2VpbDpNYXRoLmZsb29yO2k8YSYmbysrPDEwMDspZVtuPWMoKGkrYSkvMildPD10P2k9bitzOmE9bi1sO3JldHVybiBlW2ldfSxyLnNvcnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTAsaT0xO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT1lKHRbaV0sdFtpLTFdKTtpZihhPDA/cj0xOmE+MCYmKG49MSksciYmbilyZXR1cm4gdC5zb3J0KGUpfXJldHVybiBuP3Q6dC5yZXZlcnNlKCl9LHIuZmluZEluZGV4T2ZNaW49ZnVuY3Rpb24odCxlKXtlPWV8fGE7Zm9yKHZhciByLG49MS8wLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIG89ZSh0W2ldKTtvPG4mJihuPW8scj1pKX1yZXR1cm4gcn19LHtcIi4vaWRlbnRpdHlcIjo3MDAsXCIuL2xvZ2dlcnNcIjo3MDUsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDcyMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpeyh0LmF0dHIoXCJjbGFzc1wiKXx8XCJcIikuc3BsaXQoXCIgXCIpLmZvckVhY2goZnVuY3Rpb24oZSl7MD09PWUuaW5kZXhPZihcImN1cnNvci1cIikmJnQuY2xhc3NlZChlLCExKX0pLGUmJnQuY2xhc3NlZChcImN1cnNvci1cIitlLCEwKX19LHt9XSw3MjI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vY29tcG9uZW50cy9jb2xvclwiKSxpPWZ1bmN0aW9uKCl7fTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHQpXCJmdW5jdGlvblwiPT10eXBlb2YgdFtlXSYmKHRbZV09aSk7dC5kZXN0cm95PWZ1bmN0aW9uKCl7dC5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0LmNvbnRhaW5lcil9O3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7ci5jbGFzc05hbWU9XCJuby13ZWJnbFwiLHIuc3R5bGUuY3Vyc29yPVwicG9pbnRlclwiLHIuc3R5bGUuZm9udFNpemU9XCIyNHB4XCIsci5zdHlsZS5jb2xvcj1uLmRlZmF1bHRzWzBdLHIuc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwiLHIuc3R5bGUubGVmdD1yLnN0eWxlLnRvcD1cIjBweFwiLHIuc3R5bGUud2lkdGg9ci5zdHlsZS5oZWlnaHQ9XCIxMDAlXCIsci5zdHlsZVtcImJhY2tncm91bmQtY29sb3JcIl09bi5saWdodExpbmUsci5zdHlsZVtcInotaW5kZXhcIl09MzA7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7cmV0dXJuIGEudGV4dENvbnRlbnQ9XCJXZWJHTCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3NlciAtIHZpc2l0IGh0dHBzOi8vZ2V0LndlYmdsLm9yZyBmb3IgbW9yZSBpbmZvXCIsYS5zdHlsZS5wb3NpdGlvbj1cInJlbGF0aXZlXCIsYS5zdHlsZS50b3A9XCI1MCVcIixhLnN0eWxlLmxlZnQ9XCI1MCVcIixhLnN0eWxlLmhlaWdodD1cIjMwJVwiLGEuc3R5bGUud2lkdGg9XCI1MCVcIixhLnN0eWxlLm1hcmdpbj1cIi0xNSUgMCAwIC0yNSVcIixyLmFwcGVuZENoaWxkKGEpLHQuY29udGFpbmVyLmFwcGVuZENoaWxkKHIpLHQuY29udGFpbmVyLnN0eWxlLmJhY2tncm91bmQ9XCIjRkZGRkZGXCIsdC5jb250YWluZXIub25jbGljaz1mdW5jdGlvbigpe3dpbmRvdy5vcGVuKFwiaHR0cHM6Ly9nZXQud2ViZ2wub3JnXCIpfSwhMX19LHtcIi4uL2NvbXBvbmVudHMvY29sb3JcIjo1Nzh9XSw3MjM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi9hcnJheVwiKS5pc0FycmF5T3JUeXBlZEFycmF5O3IuYWdnTnVtcz1mdW5jdGlvbih0LGUsYSxvKXt2YXIgcyxsO2lmKCghb3x8bz5hLmxlbmd0aCkmJihvPWEubGVuZ3RoKSxuKGUpfHwoZT0hMSksaShhWzBdKSl7Zm9yKGw9bmV3IEFycmF5KG8pLHM9MDtzPG87cysrKWxbc109ci5hZ2dOdW1zKHQsZSxhW3NdKTthPWx9Zm9yKHM9MDtzPG87cysrKW4oZSk/bihhW3NdKSYmKGU9dCgrZSwrYVtzXSkpOmU9YVtzXTtyZXR1cm4gZX0sci5sZW49ZnVuY3Rpb24odCl7cmV0dXJuIHIuYWdnTnVtcyhmdW5jdGlvbih0KXtyZXR1cm4gdCsxfSwwLHQpfSxyLm1lYW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8KGU9ci5sZW4odCkpLHIuYWdnTnVtcyhmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9LDAsdCkvZX0sci5taWRSYW5nZT1mdW5jdGlvbih0KXtpZih2b2lkIDAhPT10JiYwIT09dC5sZW5ndGgpcmV0dXJuKHIuYWdnTnVtcyhNYXRoLm1heCxudWxsLHQpK3IuYWdnTnVtcyhNYXRoLm1pbixudWxsLHQpKS8yfSxyLnZhcmlhbmNlPWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gZXx8KGU9ci5sZW4odCkpLG4oaSl8fChpPXIubWVhbih0LGUpKSxyLmFnZ051bXMoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtNYXRoLnBvdyhlLWksMil9LDAsdCkvZX0sci5zdGRldj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIE1hdGguc3FydChyLnZhcmlhbmNlKHQsZSxuKSl9LHIuaW50ZXJwPWZ1bmN0aW9uKHQsZSl7aWYoIW4oZSkpdGhyb3dcIm4gc2hvdWxkIGJlIGEgZmluaXRlIG51bWJlclwiO2lmKChlPWUqdC5sZW5ndGgtLjUpPDApcmV0dXJuIHRbMF07aWYoZT50Lmxlbmd0aC0xKXJldHVybiB0W3QubGVuZ3RoLTFdO3ZhciByPWUlMTtyZXR1cm4gcip0W01hdGguY2VpbChlKV0rKDEtcikqdFtNYXRoLmZsb29yKGUpXX19LHtcIi4vYXJyYXlcIjo2ODQsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDcyNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJjb2xvci1ub3JtYWxpemVcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0P24odCk6WzAsMCwwLDFdfX0se1wiY29sb3Itbm9ybWFsaXplXCI6MTExfV0sNzI1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uL2xpYlwiKSxhPXQoXCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiKSxvPXQoXCIuLi9jb25zdGFudHMvYWxpZ25tZW50XCIpLkxJTkVfU1BBQ0lORztmdW5jdGlvbiBzKHQsZSl7cmV0dXJuIHQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2VdfXZhciBsPS8oW14kXSopKFskXStbXiRdKlskXSspKFteJF0qKS87ci5jb252ZXJ0VG9Uc3BhbnM9ZnVuY3Rpb24odCxlLE0pe3ZhciBTPXQudGV4dCgpLEM9IXQuYXR0cihcImRhdGEtbm90ZXhcIikmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBNYXRoSmF4JiZTLm1hdGNoKGwpLEw9bi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSk7aWYoIUwuZW1wdHkoKSl7dmFyIHo9dC5hdHRyKFwiY2xhc3NcIik/dC5hdHRyKFwiY2xhc3NcIikuc3BsaXQoXCIgXCIpWzBdOlwidGV4dFwiO3JldHVybiB6Kz1cIi1tYXRoXCIsTC5zZWxlY3RBbGwoXCJzdmcuXCIreikucmVtb3ZlKCksTC5zZWxlY3RBbGwoXCJnLlwiK3orXCItZ3JvdXBcIikucmVtb3ZlKCksdC5zdHlsZShcImRpc3BsYXlcIixudWxsKS5hdHRyKHtcImRhdGEtdW5mb3JtYXR0ZWRcIjpTLFwiZGF0YS1tYXRoXCI6XCJOXCJ9KSxDPyhlJiZlLl9wcm9taXNlc3x8W10pLnB1c2gobmV3IFByb21pc2UoZnVuY3Rpb24oZSl7dC5zdHlsZShcImRpc3BsYXlcIixcIm5vbmVcIik7dmFyIHI9cGFyc2VJbnQodC5ub2RlKCkuc3R5bGUuZm9udFNpemUsMTApLGE9e2ZvbnRTaXplOnJ9OyFmdW5jdGlvbih0LGUscil7dmFyIGEsbyxzLGw7TWF0aEpheC5IdWIuUXVldWUoZnVuY3Rpb24oKXtyZXR1cm4gbz1pLmV4dGVuZERlZXBBbGwoe30sTWF0aEpheC5IdWIuY29uZmlnKSxzPU1hdGhKYXguSHViLnByb2Nlc3NTZWN0aW9uRGVsYXksdm9pZCAwIT09TWF0aEpheC5IdWIucHJvY2Vzc1NlY3Rpb25EZWxheSYmKE1hdGhKYXguSHViLnByb2Nlc3NTZWN0aW9uRGVsYXk9MCksTWF0aEpheC5IdWIuQ29uZmlnKHttZXNzYWdlU3R5bGU6XCJub25lXCIsdGV4MmpheDp7aW5saW5lTWF0aDpbW1wiJFwiLFwiJFwiXSxbXCJcXFxcKFwiLFwiXFxcXClcIl1dfSxkaXNwbGF5QWxpZ246XCJsZWZ0XCJ9KX0sZnVuY3Rpb24oKXtpZihcIlNWR1wiIT09KGE9TWF0aEpheC5IdWIuY29uZmlnLm1lbnVTZXR0aW5ncy5yZW5kZXJlcikpcmV0dXJuIE1hdGhKYXguSHViLnNldFJlbmRlcmVyKFwiU1ZHXCIpfSxmdW5jdGlvbigpe3ZhciByPVwibWF0aC1vdXRwdXQtXCIraS5yYW5kc3RyKHt9LDY0KTtyZXR1cm4gbD1uLnNlbGVjdChcImJvZHlcIikuYXBwZW5kKFwiZGl2XCIpLmF0dHIoe2lkOnJ9KS5zdHlsZSh7dmlzaWJpbGl0eTpcImhpZGRlblwiLHBvc2l0aW9uOlwiYWJzb2x1dGVcIn0pLnN0eWxlKHtcImZvbnQtc2l6ZVwiOmUuZm9udFNpemUrXCJweFwifSkudGV4dCh0LnJlcGxhY2UoYyxcIlxcXFxsdCBcIikucmVwbGFjZSh1LFwiXFxcXGd0IFwiKSksTWF0aEpheC5IdWIuVHlwZXNldChsLm5vZGUoKSl9LGZ1bmN0aW9uKCl7dmFyIGU9bi5zZWxlY3QoXCJib2R5XCIpLnNlbGVjdChcIiNNYXRoSmF4X1NWR19nbHlwaHNcIik7aWYobC5zZWxlY3QoXCIuTWF0aEpheF9TVkdcIikuZW1wdHkoKXx8IWwuc2VsZWN0KFwic3ZnXCIpLm5vZGUoKSlpLmxvZyhcIlRoZXJlIHdhcyBhbiBlcnJvciBpbiB0aGUgdGV4IHN5bnRheC5cIix0KSxyKCk7ZWxzZXt2YXIgbz1sLnNlbGVjdChcInN2Z1wiKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cihsLnNlbGVjdChcIi5NYXRoSmF4X1NWR1wiKSxlLG8pfWlmKGwucmVtb3ZlKCksXCJTVkdcIiE9PWEpcmV0dXJuIE1hdGhKYXguSHViLnNldFJlbmRlcmVyKGEpfSxmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT1zJiYoTWF0aEpheC5IdWIucHJvY2Vzc1NlY3Rpb25EZWxheT1zKSxNYXRoSmF4Lkh1Yi5Db25maWcobyl9KX0oQ1syXSxhLGZ1bmN0aW9uKG4saSxhKXtMLnNlbGVjdEFsbChcInN2Zy5cIit6KS5yZW1vdmUoKSxMLnNlbGVjdEFsbChcImcuXCIreitcIi1ncm91cFwiKS5yZW1vdmUoKTt2YXIgbz1uJiZuLnNlbGVjdChcInN2Z1wiKTtpZighb3x8IW8ubm9kZSgpKXJldHVybiBPKCksdm9pZCBlKCk7dmFyIGw9TC5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoeitcIi1ncm91cFwiLCEwKS5hdHRyKHtcInBvaW50ZXItZXZlbnRzXCI6XCJub25lXCIsXCJkYXRhLXVuZm9ybWF0dGVkXCI6UyxcImRhdGEtbWF0aFwiOlwiWVwifSk7bC5ub2RlKCkuYXBwZW5kQ2hpbGQoby5ub2RlKCkpLGkmJmkubm9kZSgpJiZvLm5vZGUoKS5pbnNlcnRCZWZvcmUoaS5ub2RlKCkuY2xvbmVOb2RlKCEwKSxvLm5vZGUoKS5maXJzdENoaWxkKSxvLmF0dHIoe2NsYXNzOnosaGVpZ2h0OmEuaGVpZ2h0LHByZXNlcnZlQXNwZWN0UmF0aW86XCJ4TWluWU1pbiBtZWV0XCJ9KS5zdHlsZSh7b3ZlcmZsb3c6XCJ2aXNpYmxlXCIsXCJwb2ludGVyLWV2ZW50c1wiOlwibm9uZVwifSk7dmFyIGM9dC5ub2RlKCkuc3R5bGUuZmlsbHx8XCJibGFja1wiO28uc2VsZWN0KFwiZ1wiKS5hdHRyKHtmaWxsOmMsc3Ryb2tlOmN9KTt2YXIgdT1zKG8sXCJ3aWR0aFwiKSxoPXMobyxcImhlaWdodFwiKSxmPSt0LmF0dHIoXCJ4XCIpLXUqe3N0YXJ0OjAsbWlkZGxlOi41LGVuZDoxfVt0LmF0dHIoXCJ0ZXh0LWFuY2hvclwiKXx8XCJzdGFydFwiXSxwPS0ocnx8cyh0LFwiaGVpZ2h0XCIpKS80O1wieVwiPT09elswXT8obC5hdHRyKHt0cmFuc2Zvcm06XCJyb3RhdGUoXCIrWy05MCwrdC5hdHRyKFwieFwiKSwrdC5hdHRyKFwieVwiKV0rXCIpIHRyYW5zbGF0ZShcIitbLXUvMixwLWgvMl0rXCIpXCJ9KSxvLmF0dHIoe3g6K3QuYXR0cihcInhcIikseTordC5hdHRyKFwieVwiKX0pKTpcImxcIj09PXpbMF0/by5hdHRyKHt4OnQuYXR0cihcInhcIikseTpwLWgvMn0pOlwiYVwiPT09elswXSYmMCE9PXouaW5kZXhPZihcImF0aXRsZVwiKT9vLmF0dHIoe3g6MCx5OnB9KTpvLmF0dHIoe3g6Zix5Oit0LmF0dHIoXCJ5XCIpK3AtaC8yfSksTSYmTS5jYWxsKHQsbCksZShsKX0pfSkpOk8oKSx0fWZ1bmN0aW9uIE8oKXtMLmVtcHR5KCl8fCh6PXQuYXR0cihcImNsYXNzXCIpK1wiLW1hdGhcIixMLnNlbGVjdChcInN2Zy5cIit6KS5yZW1vdmUoKSksdC50ZXh0KFwiXCIpLnN0eWxlKFwid2hpdGUtc3BhY2VcIixcInByZVwiKSxmdW5jdGlvbih0LGUpe2U9ZS5yZXBsYWNlKHYsXCIgXCIpO3ZhciByLHM9ITEsbD1bXSxjPS0xO2Z1bmN0aW9uIHUoKXtjKys7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGEuc3ZnLFwidHNwYW5cIik7bi5zZWxlY3QoZSkuYXR0cih7Y2xhc3M6XCJsaW5lXCIsZHk6YypvK1wiZW1cIn0pLHQuYXBwZW5kQ2hpbGQoZSkscj1lO3ZhciBpPWw7aWYobD1be25vZGU6ZX1dLGkubGVuZ3RoPjEpZm9yKHZhciBzPTE7czxpLmxlbmd0aDtzKyspTShpW3NdKX1mdW5jdGlvbiBNKHQpe3ZhciBlLGk9dC50eXBlLG89e307aWYoXCJhXCI9PT1pKXtlPVwiYVwiO3ZhciBzPXQudGFyZ2V0LGM9dC5ocmVmLHU9dC5wb3B1cDtjJiYobz17XCJ4bGluazp4bGluazpzaG93XCI6XCJfYmxhbmtcIj09PXN8fFwiX1wiIT09cy5jaGFyQXQoMCk/XCJuZXdcIjpcInJlcGxhY2VcIix0YXJnZXQ6cyxcInhsaW5rOnhsaW5rOmhyZWZcIjpjfSx1JiYoby5vbmNsaWNrPSd3aW5kb3cub3Blbih0aGlzLmhyZWYuYmFzZVZhbCx0aGlzLnRhcmdldC5iYXNlVmFsLFwiJyt1KydcIik7cmV0dXJuIGZhbHNlOycpKX1lbHNlIGU9XCJ0c3BhblwiO3Quc3R5bGUmJihvLnN0eWxlPXQuc3R5bGUpO3ZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhhLnN2ZyxlKTtpZihcInN1cFwiPT09aXx8XCJzdWJcIj09PWkpe1MocixkKSxyLmFwcGVuZENoaWxkKGgpO3ZhciBnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhhLnN2ZyxcInRzcGFuXCIpO1MoZyxkKSxuLnNlbGVjdChnKS5hdHRyKFwiZHlcIixwW2ldKSxvLmR5PWZbaV0sci5hcHBlbmRDaGlsZChoKSxyLmFwcGVuZENoaWxkKGcpfWVsc2Ugci5hcHBlbmRDaGlsZChoKTtuLnNlbGVjdChoKS5hdHRyKG8pLHI9dC5ub2RlPWgsbC5wdXNoKHQpfWZ1bmN0aW9uIFModCxlKXt0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpKX1mdW5jdGlvbiBDKHQpe2lmKDEhPT1sLmxlbmd0aCl7dmFyIG49bC5wb3AoKTt0IT09bi50eXBlJiZpLmxvZyhcIlN0YXJ0IHRhZyA8XCIrbi50eXBlK1wiPiBkb2VzbnQgbWF0Y2ggZW5kIHRhZyA8XCIrdCtcIj4uIFByZXRlbmRpbmcgaXQgZGlkIG1hdGNoLlwiLGUpLHI9bFtsLmxlbmd0aC0xXS5ub2RlfWVsc2UgaS5sb2coXCJJZ25vcmluZyB1bmV4cGVjdGVkIGVuZCB0YWcgPC9cIit0K1wiPi5cIixlKX14LnRlc3QoZSk/dSgpOihyPXQsbD1be25vZGU6dH1dKTtmb3IodmFyIEw9ZS5zcGxpdChtKSx6PTA7ejxMLmxlbmd0aDt6Kyspe3ZhciBPPUxbel0sST1PLm1hdGNoKHkpLEQ9SSYmSVsyXS50b0xvd2VyQ2FzZSgpLFA9aFtEXTtpZihcImJyXCI9PT1EKXUoKTtlbHNlIGlmKHZvaWQgMD09PVApUyhyLEUoTykpO2Vsc2UgaWYoSVsxXSlDKEQpO2Vsc2V7dmFyIFI9SVs0XSxGPXt0eXBlOkR9LEI9QShSLGIpO2lmKEI/KEI9Qi5yZXBsYWNlKFQsXCIkMSBmaWxsOlwiKSxQJiYoQis9XCI7XCIrUCkpOlAmJihCPVApLEImJihGLnN0eWxlPUIpLFwiYVwiPT09RCl7cz0hMDt2YXIgTj1BKFIsXyk7aWYoTil7dmFyIGo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7ai5ocmVmPU4sLTEhPT1nLmluZGV4T2Yoai5wcm90b2NvbCkmJihGLmhyZWY9ZW5jb2RlVVJJKGRlY29kZVVSSShOKSksRi50YXJnZXQ9QShSLHcpfHxcIl9ibGFua1wiLEYucG9wdXA9QShSLGspKX19TShGKX19cmV0dXJuIHN9KHQubm9kZSgpLFMpJiZ0LnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixcImFsbFwiKSxyLnBvc2l0aW9uVGV4dCh0KSxNJiZNLmNhbGwodCl9fTt2YXIgYz0vKDx8Jmx0O3wmIzYwOykvZyx1PS8oPnwmZ3Q7fCYjNjI7KS9nO3ZhciBoPXtzdXA6XCJmb250LXNpemU6NzAlXCIsc3ViOlwiZm9udC1zaXplOjcwJVwiLGI6XCJmb250LXdlaWdodDpib2xkXCIsaTpcImZvbnQtc3R5bGU6aXRhbGljXCIsYTpcImN1cnNvcjpwb2ludGVyXCIsc3BhbjpcIlwiLGVtOlwiZm9udC1zdHlsZTppdGFsaWM7Zm9udC13ZWlnaHQ6Ym9sZFwifSxmPXtzdWI6XCIwLjNlbVwiLHN1cDpcIi0wLjZlbVwifSxwPXtzdWI6XCItMC4yMWVtXCIsc3VwOlwiMC40MmVtXCJ9LGQ9XCJcXHUyMDBiXCIsZz1bXCJodHRwOlwiLFwiaHR0cHM6XCIsXCJtYWlsdG86XCIsXCJcIix2b2lkIDAsXCI6XCJdLHY9LyhcXHJcXG4/fFxcbikvZyxtPS8oPFtePD5dKj4pLyx5PS88KFxcLz8pKFteID5dKikoXFxzKyguKikpPz4vaSx4PS88YnIoXFxzKy4qKT8+L2ksYj0vKF58W1xcc1wiJ10pc3R5bGVcXHMqPVxccyooXCIoW15cIl0qKTs/XCJ8JyhbXiddKik7PycpL2ksXz0vKF58W1xcc1wiJ10paHJlZlxccyo9XFxzKihcIihbXlwiXSopXCJ8JyhbXiddKiknKS9pLHc9LyhefFtcXHNcIiddKXRhcmdldFxccyo9XFxzKihcIihbXlwiXFxzXSopXCJ8JyhbXidcXHNdKiknKS9pLGs9LyhefFtcXHNcIiddKXBvcHVwXFxzKj1cXHMqKFwiKFtcXHc9LF0qKVwifCcoW1xcdz0sXSopJykvaTtmdW5jdGlvbiBBKHQsZSl7aWYoIXQpcmV0dXJuIG51bGw7dmFyIHI9dC5tYXRjaChlKSxuPXImJihyWzNdfHxyWzRdKTtyZXR1cm4gbiYmRShuKX12YXIgVD0vKF58OylcXHMqY29sb3I6LztyLnBsYWluVGV4dD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj12b2lkIDAhPT0oZT1lfHx7fSkubGVuJiYtMSE9PWUubGVuP2UubGVuOjEvMCxuPXZvaWQgMCE9PWUuYWxsb3dlZFRhZ3M/ZS5hbGxvd2VkVGFnczpbXCJiclwiXSxpPVwiLi4uXCIubGVuZ3RoLGE9dC5zcGxpdChtKSxvPVtdLHM9XCJcIixsPTAsYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgdT1hW2NdLGg9dS5tYXRjaCh5KSxmPWgmJmhbMl0udG9Mb3dlckNhc2UoKTtpZihmKS0xIT09bi5pbmRleE9mKGYpJiYoby5wdXNoKHUpLHM9Zik7ZWxzZXt2YXIgcD11Lmxlbmd0aDtpZihsK3A8cilvLnB1c2godSksbCs9cDtlbHNlIGlmKGw8cil7dmFyIGQ9ci1sO3MmJihcImJyXCIhPT1zfHxkPD1pfHxwPD1pKSYmby5wb3AoKSxyPmk/by5wdXNoKHUuc3Vic3RyKDAsZC1pKStcIi4uLlwiKTpvLnB1c2godS5zdWJzdHIoMCxkKSk7YnJlYWt9cz1cIlwifX1yZXR1cm4gby5qb2luKFwiXCIpfTt2YXIgTT17bXU6XCJcXHUwM2JjXCIsYW1wOlwiJlwiLGx0OlwiPFwiLGd0OlwiPlwiLG5ic3A6XCJcXHhhMFwiLHRpbWVzOlwiXFx4ZDdcIixwbHVzbW46XCJcXHhiMVwiLGRlZzpcIlxceGIwXCJ9LFM9LyYoI1xcZCt8I3hbXFxkYS1mQS1GXSt8W2Etel0rKTsvZztmdW5jdGlvbiBFKHQpe3JldHVybiB0LnJlcGxhY2UoUyxmdW5jdGlvbih0LGUpe3JldHVybihcIiNcIj09PWUuY2hhckF0KDApP2Z1bmN0aW9uKHQpe2lmKHQ+MTExNDExMSlyZXR1cm47dmFyIGU9U3RyaW5nLmZyb21Db2RlUG9pbnQ7aWYoZSlyZXR1cm4gZSh0KTt2YXIgcj1TdHJpbmcuZnJvbUNoYXJDb2RlO3JldHVybiB0PD02NTUzNT9yKHQpOnIoNTUyMzIrKHQ+PjEwKSx0JTEwMjQrNTYzMjApfShcInhcIj09PWUuY2hhckF0KDEpP3BhcnNlSW50KGUuc3Vic3RyKDIpLDE2KTpwYXJzZUludChlLnN1YnN0cigxKSwxMCkpOk1bZV0pfHx0fSl9ZnVuY3Rpb24gQyh0LGUscil7dmFyIG4saSxhLG89ci5ob3Jpem9udGFsQWxpZ24scz1yLnZlcnRpY2FsQWxpZ258fFwidG9wXCIsbD10Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjPWUubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBpPVwiYm90dG9tXCI9PT1zP2Z1bmN0aW9uKCl7cmV0dXJuIGwuYm90dG9tLW4uaGVpZ2h0fTpcIm1pZGRsZVwiPT09cz9mdW5jdGlvbigpe3JldHVybiBsLnRvcCsobC5oZWlnaHQtbi5oZWlnaHQpLzJ9OmZ1bmN0aW9uKCl7cmV0dXJuIGwudG9wfSxhPVwicmlnaHRcIj09PW8/ZnVuY3Rpb24oKXtyZXR1cm4gbC5yaWdodC1uLndpZHRofTpcImNlbnRlclwiPT09bz9mdW5jdGlvbigpe3JldHVybiBsLmxlZnQrKGwud2lkdGgtbi53aWR0aCkvMn06ZnVuY3Rpb24oKXtyZXR1cm4gbC5sZWZ0fSxmdW5jdGlvbigpe3JldHVybiBuPXRoaXMubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuc3R5bGUoe3RvcDppKCktYy50b3ArXCJweFwiLGxlZnQ6YSgpLWMubGVmdCtcInB4XCIsXCJ6LWluZGV4XCI6MWUzfSksdGhpc319ci5jb252ZXJ0RW50aXRpZXM9RSxyLmxpbmVDb3VudD1mdW5jdGlvbih0KXtyZXR1cm4gdC5zZWxlY3RBbGwoXCJ0c3Bhbi5saW5lXCIpLnNpemUoKXx8MX0sci5wb3NpdGlvblRleHQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0LmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTtmdW5jdGlvbiBpKGUscil7cmV0dXJuIHZvaWQgMD09PXI/bnVsbD09PShyPXQuYXR0cihlKSkmJih0LmF0dHIoZSwwKSxyPTApOnQuYXR0cihlLHIpLHJ9dmFyIGE9aShcInhcIixlKSxvPWkoXCJ5XCIscik7XCJ0ZXh0XCI9PT10aGlzLm5vZGVOYW1lJiZ0LnNlbGVjdEFsbChcInRzcGFuLmxpbmVcIikuYXR0cih7eDphLHk6b30pfSl9LHIubWFrZUVkaXRhYmxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5nZCxpPWUuZGVsZWdhdGUsYT1uLmRpc3BhdGNoKFwiZWRpdFwiLFwiaW5wdXRcIixcImNhbmNlbFwiKSxvPWl8fHQ7aWYodC5zdHlsZSh7XCJwb2ludGVyLWV2ZW50c1wiOmk/XCJub25lXCI6XCJhbGxcIn0pLDEhPT10LnNpemUoKSl0aHJvdyBuZXcgRXJyb3IoXCJib29cIik7ZnVuY3Rpb24gcygpeyFmdW5jdGlvbigpe3ZhciBpPW4uc2VsZWN0KHIpLnNlbGVjdChcIi5zdmctY29udGFpbmVyXCIpLG89aS5hcHBlbmQoXCJkaXZcIikscz10Lm5vZGUoKS5zdHlsZSxjPXBhcnNlRmxvYXQocy5mb250U2l6ZXx8MTIpLHU9ZS50ZXh0O3ZvaWQgMD09PXUmJih1PXQuYXR0cihcImRhdGEtdW5mb3JtYXR0ZWRcIikpO28uY2xhc3NlZChcInBsdWdpbi1lZGl0YWJsZSBlZGl0YWJsZVwiLCEwKS5zdHlsZSh7cG9zaXRpb246XCJhYnNvbHV0ZVwiLFwiZm9udC1mYW1pbHlcIjpzLmZvbnRGYW1pbHl8fFwiQXJpYWxcIixcImZvbnQtc2l6ZVwiOmMsY29sb3I6ZS5maWxsfHxzLmZpbGx8fFwiYmxhY2tcIixvcGFjaXR5OjEsXCJiYWNrZ3JvdW5kLWNvbG9yXCI6ZS5iYWNrZ3JvdW5kfHxcInRyYW5zcGFyZW50XCIsb3V0bGluZTpcIiNmZmZmZmYzMyAxcHggc29saWRcIixtYXJnaW46Wy1jLzgrMSwwLDAsLTFdLmpvaW4oXCJweCBcIikrXCJweFwiLHBhZGRpbmc6XCIwXCIsXCJib3gtc2l6aW5nXCI6XCJib3JkZXItYm94XCJ9KS5hdHRyKHtjb250ZW50ZWRpdGFibGU6ITB9KS50ZXh0KHUpLmNhbGwoQyh0LGksZSkpLm9uKFwiYmx1clwiLGZ1bmN0aW9uKCl7ci5fZWRpdGluZz0hMSx0LnRleHQodGhpcy50ZXh0Q29udGVudCkuc3R5bGUoe29wYWNpdHk6MX0pO3ZhciBlLGk9bi5zZWxlY3QodGhpcykuYXR0cihcImNsYXNzXCIpOyhlPWk/XCIuXCIraS5zcGxpdChcIiBcIilbMF0rXCItbWF0aC1ncm91cFwiOlwiW2NsYXNzKj0tbWF0aC1ncm91cF1cIikmJm4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpLnNlbGVjdChlKS5zdHlsZSh7b3BhY2l0eTowfSk7dmFyIG89dGhpcy50ZXh0Q29udGVudDtuLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkucmVtb3ZlKCksbi5zZWxlY3QoZG9jdW1lbnQpLm9uKFwibW91c2V1cFwiLG51bGwpLGEuZWRpdC5jYWxsKHQsbyl9KS5vbihcImZvY3VzXCIsZnVuY3Rpb24oKXt2YXIgdD10aGlzO3IuX2VkaXRpbmc9ITAsbi5zZWxlY3QoZG9jdW1lbnQpLm9uKFwibW91c2V1cFwiLGZ1bmN0aW9uKCl7aWYobi5ldmVudC50YXJnZXQ9PT10KXJldHVybiExO2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1vLm5vZGUoKSYmby5ub2RlKCkuYmx1cigpfSl9KS5vbihcImtleXVwXCIsZnVuY3Rpb24oKXsyNz09PW4uZXZlbnQud2hpY2g/KHIuX2VkaXRpbmc9ITEsdC5zdHlsZSh7b3BhY2l0eToxfSksbi5zZWxlY3QodGhpcykuc3R5bGUoe29wYWNpdHk6MH0pLm9uKFwiYmx1clwiLGZ1bmN0aW9uKCl7cmV0dXJuITF9KS50cmFuc2l0aW9uKCkucmVtb3ZlKCksYS5jYW5jZWwuY2FsbCh0LHRoaXMudGV4dENvbnRlbnQpKTooYS5pbnB1dC5jYWxsKHQsdGhpcy50ZXh0Q29udGVudCksbi5zZWxlY3QodGhpcykuY2FsbChDKHQsaSxlKSkpfSkub24oXCJrZXlkb3duXCIsZnVuY3Rpb24oKXsxMz09PW4uZXZlbnQud2hpY2gmJnRoaXMuYmx1cigpfSkuY2FsbChsKX0oKSx0LnN0eWxlKHtvcGFjaXR5OjB9KTt2YXIgaSxzPW8uYXR0cihcImNsYXNzXCIpOyhpPXM/XCIuXCIrcy5zcGxpdChcIiBcIilbMF0rXCItbWF0aC1ncm91cFwiOlwiW2NsYXNzKj0tbWF0aC1ncm91cF1cIikmJm4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpLnNlbGVjdChpKS5zdHlsZSh7b3BhY2l0eTowfSl9ZnVuY3Rpb24gbCh0KXt2YXIgZT10Lm5vZGUoKSxyPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7ci5zZWxlY3ROb2RlQ29udGVudHMoZSk7dmFyIG49d2luZG93LmdldFNlbGVjdGlvbigpO24ucmVtb3ZlQWxsUmFuZ2VzKCksbi5hZGRSYW5nZShyKSxlLmZvY3VzKCl9cmV0dXJuIGUuaW1tZWRpYXRlP3MoKTpvLm9uKFwiY2xpY2tcIixzKSxuLnJlYmluZCh0LGEsXCJvblwiKX19LHtcIi4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIjo2NzMsXCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiOjY3OSxcIi4uL2xpYlwiOjcwMSxkMzoxNTV9XSw3MjY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtmdW5jdGlvbiBpKHQpe3QmJm51bGwhPT10LnRpbWVyJiYoY2xlYXJUaW1lb3V0KHQudGltZXIpLHQudGltZXI9bnVsbCl9ci50aHJvdHRsZT1mdW5jdGlvbih0LGUscil7dmFyIGE9blt0XSxvPURhdGUubm93KCk7aWYoIWEpe2Zvcih2YXIgcyBpbiBuKW5bc10udHM8by02ZTQmJmRlbGV0ZSBuW3NdO2E9blt0XT17dHM6MCx0aW1lcjpudWxsfX1mdW5jdGlvbiBsKCl7cigpLGEudHM9RGF0ZS5ub3coKSxhLm9uRG9uZSYmKGEub25Eb25lKCksYS5vbkRvbmU9bnVsbCl9aShhKSxvPmEudHMrZT9sKCk6YS50aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bCgpLGEudGltZXI9bnVsbH0sZSl9LHIuZG9uZT1mdW5jdGlvbih0KXt2YXIgZT1uW3RdO3JldHVybiBlJiZlLnRpbWVyP25ldyBQcm9taXNlKGZ1bmN0aW9uKHQpe3ZhciByPWUub25Eb25lO2Uub25Eb25lPWZ1bmN0aW9uKCl7ciYmcigpLHQoKSxlLm9uRG9uZT1udWxsfX0pOlByb21pc2UucmVzb2x2ZSgpfSxyLmNsZWFyPWZ1bmN0aW9uKHQpe2lmKHQpaShuW3RdKSxkZWxldGUgblt0XTtlbHNlIGZvcih2YXIgZSBpbiBuKXIuY2xlYXIoZSl9fSx7fV0sNzI3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHQ+MClyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5MTjEwO3ZhciByPU1hdGgubG9nKE1hdGgubWluKGVbMF0sZVsxXSkpL01hdGguTE4xMDtyZXR1cm4gbihyKXx8KHI9TWF0aC5sb2coTWF0aC5tYXgoZVswXSxlWzFdKSkvTWF0aC5MTjEwLTYpLHJ9fSx7XCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDcyODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUuZXhwb3J0cz17fSxpPXQoXCIuLi9wbG90cy9nZW8vY29uc3RhbnRzXCIpLmxvY2F0aW9ubW9kZVRvTGF5ZXIsYT10KFwidG9wb2pzb24tY2xpZW50XCIpLmZlYXR1cmU7bi5nZXRUb3BvanNvbk5hbWU9ZnVuY3Rpb24odCl7cmV0dXJuW3Quc2NvcGUucmVwbGFjZSgvIC9nLFwiLVwiKSxcIl9cIix0LnJlc29sdXRpb24udG9TdHJpbmcoKSxcIm1cIl0uam9pbihcIlwiKX0sbi5nZXRUb3BvanNvblBhdGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlK1wiLmpzb25cIn0sbi5nZXRUb3BvanNvbkZlYXR1cmVzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9aVt0LmxvY2F0aW9ubW9kZV0sbj1lLm9iamVjdHNbcl07cmV0dXJuIGEoZSxuKS5mZWF0dXJlc319LHtcIi4uL3Bsb3RzL2dlby9jb25zdGFudHNcIjo3NzcsXCJ0b3BvanNvbi1jbGllbnRcIjo1MjV9XSw3Mjk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6XCJsb2NhbGVcIixuYW1lOlwiZW4tVVNcIixkaWN0aW9uYXJ5OntcIkNsaWNrIHRvIGVudGVyIENvbG9yc2NhbGUgdGl0bGVcIjpcIkNsaWNrIHRvIGVudGVyIENvbG9yc2NhbGUgdGl0bGVcIn0sZm9ybWF0OntkYXRlOlwiJW0vJWQvJVlcIn19fSx7fV0sNzMwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwibG9jYWxlXCIsbmFtZTpcImVuXCIsZGljdGlvbmFyeTp7XCJDbGljayB0byBlbnRlciBDb2xvcnNjYWxlIHRpdGxlXCI6XCJDbGljayB0byBlbnRlciBDb2xvdXJzY2FsZSB0aXRsZVwifSxmb3JtYXQ6e2RheXM6W1wiU3VuZGF5XCIsXCJNb25kYXlcIixcIlR1ZXNkYXlcIixcIldlZG5lc2RheVwiLFwiVGh1cnNkYXlcIixcIkZyaWRheVwiLFwiU2F0dXJkYXlcIl0sc2hvcnREYXlzOltcIlN1blwiLFwiTW9uXCIsXCJUdWVcIixcIldlZFwiLFwiVGh1XCIsXCJGcmlcIixcIlNhdFwiXSxtb250aHM6W1wiSmFudWFyeVwiLFwiRmVicnVhcnlcIixcIk1hcmNoXCIsXCJBcHJpbFwiLFwiTWF5XCIsXCJKdW5lXCIsXCJKdWx5XCIsXCJBdWd1c3RcIixcIlNlcHRlbWJlclwiLFwiT2N0b2JlclwiLFwiTm92ZW1iZXJcIixcIkRlY2VtYmVyXCJdLHNob3J0TW9udGhzOltcIkphblwiLFwiRmViXCIsXCJNYXJcIixcIkFwclwiLFwiTWF5XCIsXCJKdW5cIixcIkp1bFwiLFwiQXVnXCIsXCJTZXBcIixcIk9jdFwiLFwiTm92XCIsXCJEZWNcIl0scGVyaW9kczpbXCJBTVwiLFwiUE1cIl0sZGF0ZVRpbWU6XCIlYSAlYiAlZSAlWCAlWVwiLGRhdGU6XCIlZC8lbS8lWVwiLHRpbWU6XCIlSDolTTolU1wiLGRlY2ltYWw6XCIuXCIsdGhvdXNhbmRzOlwiLFwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbXCIkXCIsXCJcIl0seWVhcjpcIiVZXCIsbW9udGg6XCIlYiAlWVwiLGRheU1vbnRoOlwiJWIgJS1kXCIsZGF5TW9udGhZZWFyOlwiJWIgJS1kLCAlWVwifX19LHt9XSw3MzE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vcmVnaXN0cnlcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLGk9bi5sYXlvdXRBcnJheUNvbnRhaW5lcnMsYT1uLmxheW91dEFycmF5UmVnZXhlcyxvPXQuc3BsaXQoXCJbXCIpWzBdLHM9MDtzPGEubGVuZ3RoO3MrKylpZigocj10Lm1hdGNoKGFbc10pKSYmMD09PXIuaW5kZXgpe2U9clswXTticmVha31pZihlfHwoZT1pW2kuaW5kZXhPZihvKV0pLCFlKXJldHVybiExO3ZhciBsPXQuc3Vic3RyKGUubGVuZ3RoKTtyZXR1cm4gbD8hIShyPWwubWF0Y2goL15cXFsoMHxbMS05XVswLTldKilcXF0oXFwuKC4rKSk/JC8pKSYme2FycmF5OmUsaW5kZXg6TnVtYmVyKHJbMV0pLHByb3BlcnR5OnJbM118fFwiXCJ9OnthcnJheTplLGluZGV4OlwiXCIscHJvcGVydHk6XCJcIn19fSx7XCIuLi9yZWdpc3RyeVwiOjgyOX1dLDczMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9saWJcIiksaT1uLmV4dGVuZEZsYXQsYT1uLmlzUGxhaW5PYmplY3Qsbz17dmFsVHlwZTpcImZsYWdsaXN0XCIsZXh0cmFzOltcIm5vbmVcIl0sZmxhZ3M6W1wiY2FsY1wiLFwiY2xlYXJBeGlzVHlwZXNcIixcInBsb3RcIixcInN0eWxlXCIsXCJtYXJrZXJTaXplXCIsXCJjb2xvcmJhcnNcIl19LHM9e3ZhbFR5cGU6XCJmbGFnbGlzdFwiLGV4dHJhczpbXCJub25lXCJdLGZsYWdzOltcImNhbGNcIixcInBsb3RcIixcImxlZ2VuZFwiLFwidGlja3NcIixcImF4cmFuZ2VcIixcImxheW91dHN0eWxlXCIsXCJtb2RlYmFyXCIsXCJjYW1lcmFcIixcImFycmF5ZHJhd1wiXX0sbD1vLmZsYWdzLnNsaWNlKCkuY29uY2F0KFtcImZ1bGxSZXBsb3RcIl0pLGM9cy5mbGFncy5zbGljZSgpLmNvbmNhdChcImxheW91dFJlcGxvdFwiKTtmdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT17fSxyPTA7cjx0Lmxlbmd0aDtyKyspZVt0W3JdXT0hMTtyZXR1cm4gZX1mdW5jdGlvbiBoKHQsZSxyKXt2YXIgbj1pKHt9LHQpO2Zvcih2YXIgbyBpbiBuKXt2YXIgcz1uW29dO2EocykmJihuW29dPWYocyxlLHIsbykpfXJldHVyblwiZnJvbS1yb290XCI9PT1yJiYobi5lZGl0VHlwZT1lKSxufWZ1bmN0aW9uIGYodCxlLHIsbil7aWYodC52YWxUeXBlKXt2YXIgYT1pKHt9LHQpO2lmKGEuZWRpdFR5cGU9ZSxBcnJheS5pc0FycmF5KHQuaXRlbXMpKXthLml0ZW1zPW5ldyBBcnJheSh0Lml0ZW1zLmxlbmd0aCk7Zm9yKHZhciBvPTA7bzx0Lml0ZW1zLmxlbmd0aDtvKyspYS5pdGVtc1tvXT1mKHQuaXRlbXNbb10sZSxcImZyb20tcm9vdFwiKX1yZXR1cm4gYX1yZXR1cm4gaCh0LGUsXCJfXCI9PT1uLmNoYXJBdCgwKT9cIm5lc3RlZFwiOlwiZnJvbS1yb290XCIpfWUuZXhwb3J0cz17dHJhY2VzOm8sbGF5b3V0OnMsdHJhY2VGbGFnczpmdW5jdGlvbigpe3JldHVybiB1KGwpfSxsYXlvdXRGbGFnczpmdW5jdGlvbigpe3JldHVybiB1KGMpfSx1cGRhdGU6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmVkaXRUeXBlO2lmKHImJlwibm9uZVwiIT09cilmb3IodmFyIG49ci5zcGxpdChcIitcIiksaT0wO2k8bi5sZW5ndGg7aSsrKXRbbltpXV09ITB9LG92ZXJyaWRlQWxsOmh9fSx7XCIuLi9saWJcIjo3MDF9XSw3MzM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiZ2wtbWF0NC9mcm9tUXVhdFwiKSxhPXQoXCIuLi9yZWdpc3RyeVwiKSxvPXQoXCIuLi9saWJcIikscz10KFwiLi4vcGxvdHMvcGxvdHNcIiksbD10KFwiLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCIpLGM9dChcIi4uL2NvbXBvbmVudHMvY29sb3JcIiksdT1sLmNsZWFuSWQsaD1sLmdldEZyb21UcmFjZSxmPWEudHJhY2VJcztmdW5jdGlvbiBwKHQsZSl7dmFyIHI9dFtlXSxuPWUuY2hhckF0KDApO3ImJlwicGFwZXJcIiE9PXImJih0W2VdPXUocixuKSl9ZnVuY3Rpb24gZCh0KXtmdW5jdGlvbiBlKGUscil7dmFyIG49dFtlXSxpPXQudGl0bGUmJnQudGl0bGVbcl07biYmIWkmJih0LnRpdGxlfHwodC50aXRsZT17fSksdC50aXRsZVtyXT10W2VdLGRlbGV0ZSB0W2VdKX10JiYoXCJzdHJpbmdcIiE9dHlwZW9mIHQudGl0bGUmJlwibnVtYmVyXCIhPXR5cGVvZiB0LnRpdGxlfHwodC50aXRsZT17dGV4dDp0LnRpdGxlfSksZShcInRpdGxlZm9udFwiLFwiZm9udFwiKSxlKFwidGl0bGVwb3NpdGlvblwiLFwicG9zaXRpb25cIiksZShcInRpdGxlc2lkZVwiLFwic2lkZVwiKSxlKFwidGl0bGVvZmZzZXRcIixcIm9mZnNldFwiKSl9ZnVuY3Rpb24gZyh0KXtpZighby5pc1BsYWluT2JqZWN0KHQpKXJldHVybiExO3ZhciBlPXQubmFtZTtyZXR1cm4gZGVsZXRlIHQubmFtZSxkZWxldGUgdC5zaG93bGVnZW5kLChcInN0cmluZ1wiPT10eXBlb2YgZXx8XCJudW1iZXJcIj09dHlwZW9mIGUpJiZTdHJpbmcoZSl9ZnVuY3Rpb24gdih0LGUscixuKXtpZihyJiYhbilyZXR1cm4gdDtpZihuJiYhcilyZXR1cm4gZTtpZighdC50cmltKCkpcmV0dXJuIGU7aWYoIWUudHJpbSgpKXJldHVybiB0O3ZhciBpLGE9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpO2ZvcihpPTA7aTxhJiZ0LmNoYXJBdChpKT09PWUuY2hhckF0KGkpO2krKyk7cmV0dXJuIHQuc3Vic3RyKDAsaSkudHJpbSgpfWZ1bmN0aW9uIG0odCl7dmFyIGU9XCJtaWRkbGVcIixyPVwiY2VudGVyXCI7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQmJigtMSE9PXQuaW5kZXhPZihcInRvcFwiKT9lPVwidG9wXCI6LTEhPT10LmluZGV4T2YoXCJib3R0b21cIikmJihlPVwiYm90dG9tXCIpLC0xIT09dC5pbmRleE9mKFwibGVmdFwiKT9yPVwibGVmdFwiOi0xIT09dC5pbmRleE9mKFwicmlnaHRcIikmJihyPVwicmlnaHRcIikpLGUrXCIgXCIrcn1mdW5jdGlvbiB5KHQsZSl7cmV0dXJuIGUgaW4gdCYmXCJvYmplY3RcIj09dHlwZW9mIHRbZV0mJjA9PT1PYmplY3Qua2V5cyh0W2VdKS5sZW5ndGh9ci5jbGVhclByb21pc2VRdWV1ZT1mdW5jdGlvbih0KXtBcnJheS5pc0FycmF5KHQuX3Byb21pc2VzKSYmdC5fcHJvbWlzZXMubGVuZ3RoPjAmJm8ubG9nKFwiQ2xlYXJpbmcgcHJldmlvdXMgcmVqZWN0ZWQgcHJvbWlzZXMgZnJvbSBxdWV1ZS5cIiksdC5fcHJvbWlzZXM9W119LHIuY2xlYW5MYXlvdXQ9ZnVuY3Rpb24odCl7dmFyIGUsbjt0fHwodD17fSksdC54YXhpczEmJih0LnhheGlzfHwodC54YXhpcz10LnhheGlzMSksZGVsZXRlIHQueGF4aXMxKSx0LnlheGlzMSYmKHQueWF4aXN8fCh0LnlheGlzPXQueWF4aXMxKSxkZWxldGUgdC55YXhpczEpLHQuc2NlbmUxJiYodC5zY2VuZXx8KHQuc2NlbmU9dC5zY2VuZTEpLGRlbGV0ZSB0LnNjZW5lMSk7dmFyIGE9KHMuc3VicGxvdHNSZWdpc3RyeS5jYXJ0ZXNpYW58fHt9KS5hdHRyUmVnZXgsbD0ocy5zdWJwbG90c1JlZ2lzdHJ5LnBvbGFyfHx7fSkuYXR0clJlZ2V4LGg9KHMuc3VicGxvdHNSZWdpc3RyeS50ZXJuYXJ5fHx7fSkuYXR0clJlZ2V4LGY9KHMuc3VicGxvdHNSZWdpc3RyeS5nbDNkfHx7fSkuYXR0clJlZ2V4LGc9T2JqZWN0LmtleXModCk7Zm9yKGU9MDtlPGcubGVuZ3RoO2UrKyl7dmFyIHY9Z1tlXTtpZihhJiZhLnRlc3Qodikpe3ZhciBtPXRbdl07bS5hbmNob3ImJlwiZnJlZVwiIT09bS5hbmNob3ImJihtLmFuY2hvcj11KG0uYW5jaG9yKSksbS5vdmVybGF5aW5nJiYobS5vdmVybGF5aW5nPXUobS5vdmVybGF5aW5nKSksbS50eXBlfHwobS5pc2RhdGU/bS50eXBlPVwiZGF0ZVwiOm0uaXNsb2c/bS50eXBlPVwibG9nXCI6ITE9PT1tLmlzZGF0ZSYmITE9PT1tLmlzbG9nJiYobS50eXBlPVwibGluZWFyXCIpKSxcIndpdGh6ZXJvXCIhPT1tLmF1dG9yYW5nZSYmXCJ0b3plcm9cIiE9PW0uYXV0b3JhbmdlfHwobS5hdXRvcmFuZ2U9ITAsbS5yYW5nZW1vZGU9XCJ0b3plcm9cIiksZGVsZXRlIG0uaXNsb2csZGVsZXRlIG0uaXNkYXRlLGRlbGV0ZSBtLmNhdGVnb3JpZXMseShtLFwiZG9tYWluXCIpJiZkZWxldGUgbS5kb21haW4sdm9pZCAwIT09bS5hdXRvdGljayYmKHZvaWQgMD09PW0udGlja21vZGUmJihtLnRpY2ttb2RlPW0uYXV0b3RpY2s/XCJhdXRvXCI6XCJsaW5lYXJcIiksZGVsZXRlIG0uYXV0b3RpY2spLGQobSl9ZWxzZSBpZihsJiZsLnRlc3Qodikpe2QodFt2XS5yYWRpYWxheGlzKX1lbHNlIGlmKGgmJmgudGVzdCh2KSl7dmFyIHg9dFt2XTtkKHguYWF4aXMpLGQoeC5iYXhpcyksZCh4LmNheGlzKX1lbHNlIGlmKGYmJmYudGVzdCh2KSl7dmFyIGI9dFt2XSxfPWIuY2FtZXJhcG9zaXRpb247aWYoQXJyYXkuaXNBcnJheShfKSYmND09PV9bMF0ubGVuZ3RoKXt2YXIgdz1fWzBdLGs9X1sxXSxBPV9bMl0sVD1pKFtdLHcpLE09W107Zm9yKG49MDtuPDM7KytuKU1bbl09a1tuXStBKlRbMis0Km5dO2IuY2FtZXJhPXtleWU6e3g6TVswXSx5Ok1bMV0sejpNWzJdfSxjZW50ZXI6e3g6a1swXSx5OmtbMV0sejprWzJdfSx1cDp7eDowLHk6MCx6OjF9fSxkZWxldGUgYi5jYW1lcmFwb3NpdGlvbn1kKGIueGF4aXMpLGQoYi55YXhpcyksZChiLnpheGlzKX19dmFyIFM9QXJyYXkuaXNBcnJheSh0LmFubm90YXRpb25zKT90LmFubm90YXRpb25zLmxlbmd0aDowO2ZvcihlPTA7ZTxTO2UrKyl7dmFyIEU9dC5hbm5vdGF0aW9uc1tlXTtvLmlzUGxhaW5PYmplY3QoRSkmJihFLnJlZiYmKFwicGFwZXJcIj09PUUucmVmPyhFLnhyZWY9XCJwYXBlclwiLEUueXJlZj1cInBhcGVyXCIpOlwiZGF0YVwiPT09RS5yZWYmJihFLnhyZWY9XCJ4XCIsRS55cmVmPVwieVwiKSxkZWxldGUgRS5yZWYpLHAoRSxcInhyZWZcIikscChFLFwieXJlZlwiKSl9dmFyIEM9QXJyYXkuaXNBcnJheSh0LnNoYXBlcyk/dC5zaGFwZXMubGVuZ3RoOjA7Zm9yKGU9MDtlPEM7ZSsrKXt2YXIgTD10LnNoYXBlc1tlXTtvLmlzUGxhaW5PYmplY3QoTCkmJihwKEwsXCJ4cmVmXCIpLHAoTCxcInlyZWZcIikpfXZhciB6PXQubGVnZW5kO3JldHVybiB6JiYoei54PjM/KHoueD0xLjAyLHoueGFuY2hvcj1cImxlZnRcIik6ei54PC0yJiYoei54PS0uMDIsei54YW5jaG9yPVwicmlnaHRcIiksei55PjM/KHoueT0xLjAyLHoueWFuY2hvcj1cImJvdHRvbVwiKTp6Lnk8LTImJih6Lnk9LS4wMix6LnlhbmNob3I9XCJ0b3BcIikpLGQodCksXCJyb3RhdGVcIj09PXQuZHJhZ21vZGUmJih0LmRyYWdtb2RlPVwib3JiaXRcIiksYy5jbGVhbih0KSx0LnRlbXBsYXRlJiZ0LnRlbXBsYXRlLmxheW91dCYmci5jbGVhbkxheW91dCh0LnRlbXBsYXRlLmxheW91dCksdH0sci5jbGVhbkRhdGE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciBuLGk9dFtlXTtpZihcImhpc3RvZ3JhbXlcIj09PWkudHlwZSYmXCJ4Ymluc1wiaW4gaSYmIShcInliaW5zXCJpbiBpKSYmKGkueWJpbnM9aS54YmlucyxkZWxldGUgaS54YmlucyksaS5lcnJvcl95JiZcIm9wYWNpdHlcImluIGkuZXJyb3JfeSl7dmFyIGw9Yy5kZWZhdWx0cyxoPWkuZXJyb3JfeS5jb2xvcnx8KGYoaSxcImJhclwiKT9jLmRlZmF1bHRMaW5lOmxbZSVsLmxlbmd0aF0pO2kuZXJyb3JfeS5jb2xvcj1jLmFkZE9wYWNpdHkoYy5yZ2IoaCksYy5vcGFjaXR5KGgpKmkuZXJyb3JfeS5vcGFjaXR5KSxkZWxldGUgaS5lcnJvcl95Lm9wYWNpdHl9aWYoXCJiYXJkaXJcImluIGkmJihcImhcIiE9PWkuYmFyZGlyfHwhZihpLFwiYmFyXCIpJiZcImhpc3RvZ3JhbVwiIT09aS50eXBlLnN1YnN0cigwLDkpfHwoaS5vcmllbnRhdGlvbj1cImhcIixyLnN3YXBYWURhdGEoaSkpLGRlbGV0ZSBpLmJhcmRpciksXCJoaXN0b2dyYW15XCI9PT1pLnR5cGUmJnIuc3dhcFhZRGF0YShpKSxcImhpc3RvZ3JhbXhcIiE9PWkudHlwZSYmXCJoaXN0b2dyYW15XCIhPT1pLnR5cGV8fChpLnR5cGU9XCJoaXN0b2dyYW1cIiksXCJzY2xcImluIGkmJiEoXCJjb2xvcnNjYWxlXCJpbiBpKSYmKGkuY29sb3JzY2FsZT1pLnNjbCxkZWxldGUgaS5zY2wpLFwicmV2ZXJzZXNjbFwiaW4gaSYmIShcInJldmVyc2VzY2FsZVwiaW4gaSkmJihpLnJldmVyc2VzY2FsZT1pLnJldmVyc2VzY2wsZGVsZXRlIGkucmV2ZXJzZXNjbCksaS54YXhpcyYmKGkueGF4aXM9dShpLnhheGlzLFwieFwiKSksaS55YXhpcyYmKGkueWF4aXM9dShpLnlheGlzLFwieVwiKSksZihpLFwiZ2wzZFwiKSYmaS5zY2VuZSYmKGkuc2NlbmU9cy5zdWJwbG90c1JlZ2lzdHJ5LmdsM2QuY2xlYW5JZChpLnNjZW5lKSksIWYoaSxcInBpZVwiKSYmIWYoaSxcImJhclwiKSYmXCJ3YXRlcmZhbGxcIiE9PWkudHlwZSlpZihBcnJheS5pc0FycmF5KGkudGV4dHBvc2l0aW9uKSlmb3Iobj0wO248aS50ZXh0cG9zaXRpb24ubGVuZ3RoO24rKylpLnRleHRwb3NpdGlvbltuXT1tKGkudGV4dHBvc2l0aW9uW25dKTtlbHNlIGkudGV4dHBvc2l0aW9uJiYoaS50ZXh0cG9zaXRpb249bShpLnRleHRwb3NpdGlvbikpO3ZhciBwPWEuZ2V0TW9kdWxlKGkpO2lmKHAmJnAuY29sb3JiYXIpe3ZhciB4PXAuY29sb3JiYXIuY29udGFpbmVyLGI9eD9pW3hdOmk7YiYmYi5jb2xvcnNjYWxlJiYoXCJZSUduQnVcIj09PWIuY29sb3JzY2FsZSYmKGIuY29sb3JzY2FsZT1cIllsR25CdVwiKSxcIllJT3JSZFwiPT09Yi5jb2xvcnNjYWxlJiYoYi5jb2xvcnNjYWxlPVwiWWxPclJkXCIpKX1pZihcInN1cmZhY2VcIj09PWkudHlwZSYmby5pc1BsYWluT2JqZWN0KGkuY29udG91cnMpKXt2YXIgXz1bXCJ4XCIsXCJ5XCIsXCJ6XCJdO2ZvcihuPTA7bjxfLmxlbmd0aDtuKyspe3ZhciB3PWkuY29udG91cnNbX1tuXV07by5pc1BsYWluT2JqZWN0KHcpJiYody5oaWdobGlnaHRDb2xvciYmKHcuaGlnaGxpZ2h0Y29sb3I9dy5oaWdobGlnaHRDb2xvcixkZWxldGUgdy5oaWdobGlnaHRDb2xvciksdy5oaWdobGlnaHRXaWR0aCYmKHcuaGlnaGxpZ2h0d2lkdGg9dy5oaWdobGlnaHRXaWR0aCxkZWxldGUgdy5oaWdobGlnaHRXaWR0aCkpfX1pZihcImNhbmRsZXN0aWNrXCI9PT1pLnR5cGV8fFwib2hsY1wiPT09aS50eXBlKXt2YXIgaz0hMSE9PShpLmluY3JlYXNpbmd8fHt9KS5zaG93bGVnZW5kLEE9ITEhPT0oaS5kZWNyZWFzaW5nfHx7fSkuc2hvd2xlZ2VuZCxUPWcoaS5pbmNyZWFzaW5nKSxNPWcoaS5kZWNyZWFzaW5nKTtpZighMSE9PVQmJiExIT09TSl7dmFyIFM9dihULE0sayxBKTtTJiYoaS5uYW1lPVMpfWVsc2UhVCYmIU18fGkubmFtZXx8KGkubmFtZT1UfHxNKX1pZihBcnJheS5pc0FycmF5KGkudHJhbnNmb3Jtcykpe3ZhciBFPWkudHJhbnNmb3Jtcztmb3Iobj0wO248RS5sZW5ndGg7bisrKXt2YXIgQz1FW25dO2lmKG8uaXNQbGFpbk9iamVjdChDKSlzd2l0Y2goQy50eXBlKXtjYXNlXCJmaWx0ZXJcIjpDLmZpbHRlcnNyYyYmKEMudGFyZ2V0PUMuZmlsdGVyc3JjLGRlbGV0ZSBDLmZpbHRlcnNyYyksQy5jYWxlbmRhciYmKEMudmFsdWVjYWxlbmRhcnx8KEMudmFsdWVjYWxlbmRhcj1DLmNhbGVuZGFyKSxkZWxldGUgQy5jYWxlbmRhcik7YnJlYWs7Y2FzZVwiZ3JvdXBieVwiOmlmKEMuc3R5bGVzPUMuc3R5bGVzfHxDLnN0eWxlLEMuc3R5bGVzJiYhQXJyYXkuaXNBcnJheShDLnN0eWxlcykpe3ZhciBMPUMuc3R5bGVzLHo9T2JqZWN0LmtleXMoTCk7Qy5zdHlsZXM9W107Zm9yKHZhciBPPTA7Tzx6Lmxlbmd0aDtPKyspQy5zdHlsZXMucHVzaCh7dGFyZ2V0OnpbT10sdmFsdWU6TFt6W09dXX0pfX19fXkoaSxcImxpbmVcIikmJmRlbGV0ZSBpLmxpbmUsXCJtYXJrZXJcImluIGkmJih5KGkubWFya2VyLFwibGluZVwiKSYmZGVsZXRlIGkubWFya2VyLmxpbmUseShpLFwibWFya2VyXCIpJiZkZWxldGUgaS5tYXJrZXIpLGMuY2xlYW4oaSksaS5hdXRvYmlueCYmKGRlbGV0ZSBpLmF1dG9iaW54LGRlbGV0ZSBpLnhiaW5zKSxpLmF1dG9iaW55JiYoZGVsZXRlIGkuYXV0b2JpbnksZGVsZXRlIGkueWJpbnMpLGQoaSksaS5jb2xvcmJhciYmZChpLmNvbG9yYmFyKSxpLm1hcmtlciYmaS5tYXJrZXIuY29sb3JiYXImJmQoaS5tYXJrZXIuY29sb3JiYXIpLGkubGluZSYmaS5saW5lLmNvbG9yYmFyJiZkKGkubGluZS5jb2xvcmJhciksaS5hYXhpcyYmZChpLmFheGlzKSxpLmJheGlzJiZkKGkuYmF4aXMpfX0sci5zd2FwWFlEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKG8uc3dhcEF0dHJzKHQsW1wiP1wiLFwiPzBcIixcImQ/XCIsXCI/Ymluc1wiLFwibmJpbnM/XCIsXCJhdXRvYmluP1wiLFwiP3NyY1wiLFwiZXJyb3JfP1wiXSksQXJyYXkuaXNBcnJheSh0LnopJiZBcnJheS5pc0FycmF5KHQuelswXSkmJih0LnRyYW5zcG9zZT9kZWxldGUgdC50cmFuc3Bvc2U6dC50cmFuc3Bvc2U9ITApLHQuZXJyb3JfeCYmdC5lcnJvcl95KXt2YXIgcj10LmVycm9yX3ksbj1cImNvcHlfeXN0eWxlXCJpbiByP3IuY29weV95c3R5bGU6IShyLmNvbG9yfHxyLnRoaWNrbmVzc3x8ci53aWR0aCk7by5zd2FwQXR0cnModCxbXCJlcnJvcl8/LmNvcHlfeXN0eWxlXCJdKSxuJiZvLnN3YXBBdHRycyh0LFtcImVycm9yXz8uY29sb3JcIixcImVycm9yXz8udGhpY2tuZXNzXCIsXCJlcnJvcl8/LndpZHRoXCJdKX1pZihcInN0cmluZ1wiPT10eXBlb2YgdC5ob3ZlcmluZm8pe3ZhciBpPXQuaG92ZXJpbmZvLnNwbGl0KFwiK1wiKTtmb3IoZT0wO2U8aS5sZW5ndGg7ZSsrKVwieFwiPT09aVtlXT9pW2VdPVwieVwiOlwieVwiPT09aVtlXSYmKGlbZV09XCJ4XCIpO3QuaG92ZXJpbmZvPWkuam9pbihcIitcIil9fSxyLmNvZXJjZVRyYWNlSW5kaWNlcz1mdW5jdGlvbih0LGUpe2lmKG4oZSkpcmV0dXJuW2VdO2lmKCFBcnJheS5pc0FycmF5KGUpfHwhZS5sZW5ndGgpcmV0dXJuIHQuZGF0YS5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pO2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgcj1bXSxpPTA7aTxlLmxlbmd0aDtpKyspby5pc0luZGV4KGVbaV0sdC5kYXRhLmxlbmd0aCk/ci5wdXNoKGVbaV0pOm8ud2FybihcInRyYWNlIGluZGV4IChcIixlW2ldLFwiKSBpcyBub3QgYSBudW1iZXIgb3IgaXMgb3V0IG9mIGJvdW5kc1wiKTtyZXR1cm4gcn1yZXR1cm4gZX0sci5tYW5hZ2VBcnJheUNvbnRhaW5lcnM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQub2JqLGE9dC5wYXJ0cyxzPWEubGVuZ3RoLGw9YVtzLTFdLGM9bihsKTtpZihjJiZudWxsPT09ZSl7dmFyIHU9YS5zbGljZSgwLHMtMSkuam9pbihcIi5cIik7by5uZXN0ZWRQcm9wZXJ0eShpLHUpLmdldCgpLnNwbGljZShsLDEpfWVsc2UgYyYmdm9pZCAwPT09dC5nZXQoKT8odm9pZCAwPT09dC5nZXQoKSYmKHJbdC5hc3RyXT1udWxsKSx0LnNldChlKSk6dC5zZXQoZSl9O3ZhciB4PS8oXFwuW15cXFtcXF1cXC5dK3xcXFtbXlxcW1xcXVxcLl0rXFxdKSQvO2Z1bmN0aW9uIGIodCl7dmFyIGU9dC5zZWFyY2goeCk7aWYoZT4wKXJldHVybiB0LnN1YnN0cigwLGUpfXIuaGFzUGFyZW50PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWIoZSk7cjspe2lmKHIgaW4gdClyZXR1cm4hMDtyPWIocil9cmV0dXJuITF9O3ZhciBfPVtcInhcIixcInlcIixcInpcIl07ci5jbGVhckF4aXNUeXBlcz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspZm9yKHZhciBpPXQuX2Z1bGxEYXRhW25dLGE9MDthPDM7YSsrKXt2YXIgcz1oKHQsaSxfW2FdKTtpZihzJiZcImxvZ1wiIT09cy50eXBlKXt2YXIgbD1zLl9uYW1lLGM9cy5faWQuc3Vic3RyKDEpO2lmKFwic2NlbmVcIj09PWMuc3Vic3RyKDAsNSkpe2lmKHZvaWQgMCE9PXJbY10pY29udGludWU7bD1jK1wiLlwiK2x9dmFyIHU9bCtcIi50eXBlXCI7dm9pZCAwPT09cltsXSYmdm9pZCAwPT09clt1XSYmby5uZXN0ZWRQcm9wZXJ0eSh0LmxheW91dCx1KS5zZXQobnVsbCl9fX19LHtcIi4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi9saWJcIjo3MDEsXCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIjo3NTIsXCIuLi9wbG90cy9wbG90c1wiOjgxMCxcIi4uL3JlZ2lzdHJ5XCI6ODI5LFwiZmFzdC1pc251bWVyaWNcIjoyMjIsXCJnbC1tYXQ0L2Zyb21RdWF0XCI6MjU5fV0sNzM0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vcGxvdF9hcGlcIik7ci5wbG90PW4ucGxvdCxyLm5ld1Bsb3Q9bi5uZXdQbG90LHIucmVzdHlsZT1uLnJlc3R5bGUsci5yZWxheW91dD1uLnJlbGF5b3V0LHIucmVkcmF3PW4ucmVkcmF3LHIudXBkYXRlPW4udXBkYXRlLHIuX2d1aVJlc3R5bGU9bi5fZ3VpUmVzdHlsZSxyLl9ndWlSZWxheW91dD1uLl9ndWlSZWxheW91dCxyLl9ndWlVcGRhdGU9bi5fZ3VpVXBkYXRlLHIuX3N0b3JlRGlyZWN0R1VJRWRpdD1uLl9zdG9yZURpcmVjdEdVSUVkaXQsci5yZWFjdD1uLnJlYWN0LHIuZXh0ZW5kVHJhY2VzPW4uZXh0ZW5kVHJhY2VzLHIucHJlcGVuZFRyYWNlcz1uLnByZXBlbmRUcmFjZXMsci5hZGRUcmFjZXM9bi5hZGRUcmFjZXMsci5kZWxldGVUcmFjZXM9bi5kZWxldGVUcmFjZXMsci5tb3ZlVHJhY2VzPW4ubW92ZVRyYWNlcyxyLnB1cmdlPW4ucHVyZ2Usci5hZGRGcmFtZXM9bi5hZGRGcmFtZXMsci5kZWxldGVGcmFtZXM9bi5kZWxldGVGcmFtZXMsci5hbmltYXRlPW4uYW5pbWF0ZSxyLnNldFBsb3RDb25maWc9bi5zZXRQbG90Q29uZmlnLHIudG9JbWFnZT10KFwiLi90b19pbWFnZVwiKSxyLnZhbGlkYXRlPXQoXCIuL3ZhbGlkYXRlXCIpLHIuZG93bmxvYWRJbWFnZT10KFwiLi4vc25hcHNob3QvZG93bmxvYWRcIik7dmFyIGk9dChcIi4vdGVtcGxhdGVfYXBpXCIpO3IubWFrZVRlbXBsYXRlPWkubWFrZVRlbXBsYXRlLHIudmFsaWRhdGVUZW1wbGF0ZT1pLnZhbGlkYXRlVGVtcGxhdGV9LHtcIi4uL3NuYXBzaG90L2Rvd25sb2FkXCI6ODMxLFwiLi9wbG90X2FwaVwiOjczNixcIi4vdGVtcGxhdGVfYXBpXCI6NzQxLFwiLi90b19pbWFnZVwiOjc0MixcIi4vdmFsaWRhdGVcIjo3NDN9XSw3MzU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vbGliL2lzX3BsYWluX29iamVjdFwiKSxpPXQoXCIuLi9saWIvbm9vcFwiKSxhPXQoXCIuLi9saWIvbG9nZ2Vyc1wiKSxvPXQoXCIuLi9saWIvc2VhcmNoXCIpLnNvcnRlckFzYyxzPXQoXCIuLi9yZWdpc3RyeVwiKTtyLmNvbnRhaW5lckFycmF5TWF0Y2g9dChcIi4vY29udGFpbmVyX2FycmF5X21hdGNoXCIpO3ZhciBsPXIuaXNBZGRWYWw9ZnVuY3Rpb24odCl7cmV0dXJuXCJhZGRcIj09PXR8fG4odCl9LGM9ci5pc1JlbW92ZVZhbD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09PXR8fFwicmVtb3ZlXCI9PT10fTtyLmFwcGx5Q29udGFpbmVyQXJyYXlDaGFuZ2VzPWZ1bmN0aW9uKHQsZSxyLG4sdSl7dmFyIGg9ZS5hc3RyLGY9cy5nZXRDb21wb25lbnRNZXRob2QoaCxcInN1cHBseUxheW91dERlZmF1bHRzXCIpLHA9cy5nZXRDb21wb25lbnRNZXRob2QoaCxcImRyYXdcIiksZD1zLmdldENvbXBvbmVudE1ldGhvZChoLFwiZHJhd09uZVwiKSxnPW4ucmVwbG90fHxuLnJlY2FsY3x8Zj09PWl8fHA9PT1pLHY9dC5sYXlvdXQsbT10Ll9mdWxsTGF5b3V0O2lmKHJbXCJcIl0pe09iamVjdC5rZXlzKHIpLmxlbmd0aD4xJiZhLndhcm4oXCJGdWxsIGFycmF5IGVkaXRzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBvdGhlciBlZGl0c1wiLGgpO3ZhciB5PXJbXCJcIl1bXCJcIl07aWYoYyh5KSllLnNldChudWxsKTtlbHNle2lmKCFBcnJheS5pc0FycmF5KHkpKXJldHVybiBhLndhcm4oXCJVbnJlY29nbml6ZWQgZnVsbCBhcnJheSBlZGl0IHZhbHVlXCIsaCx5KSwhMDtlLnNldCh5KX1yZXR1cm4hZyYmKGYodixtKSxwKHQpLCEwKX12YXIgeCxiLF8sdyxrLEEsVCxNLFM9T2JqZWN0LmtleXMocikubWFwKE51bWJlcikuc29ydChvKSxFPWUuZ2V0KCksQz1FfHxbXSxMPXUobSxoKS5nZXQoKSx6PVtdLE89LTEsST1DLmxlbmd0aDtmb3IoeD0wO3g8Uy5sZW5ndGg7eCsrKWlmKHc9cltfPVNbeF1dLGs9T2JqZWN0LmtleXModyksQT13W1wiXCJdLFQ9bChBKSxfPDB8fF8+Qy5sZW5ndGgtKFQ/MDoxKSlhLndhcm4oXCJpbmRleCBvdXQgb2YgcmFuZ2VcIixoLF8pO2Vsc2UgaWYodm9pZCAwIT09QSlrLmxlbmd0aD4xJiZhLndhcm4oXCJJbnNlcnRpb24gJiByZW1vdmFsIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBlZGl0cyB0byB0aGUgc2FtZSBpbmRleC5cIixoLF8pLGMoQSk/ei5wdXNoKF8pOlQ/KFwiYWRkXCI9PT1BJiYoQT17fSksQy5zcGxpY2UoXywwLEEpLEwmJkwuc3BsaWNlKF8sMCx7fSkpOmEud2FybihcIlVucmVjb2duaXplZCBmdWxsIG9iamVjdCBlZGl0IHZhbHVlXCIsaCxfLEEpLC0xPT09TyYmKE89Xyk7ZWxzZSBmb3IoYj0wO2I8ay5sZW5ndGg7YisrKU09aCtcIltcIitfK1wiXS5cIix1KENbX10sa1tiXSxNKS5zZXQod1trW2JdXSk7Zm9yKHg9ei5sZW5ndGgtMTt4Pj0wO3gtLSlDLnNwbGljZSh6W3hdLDEpLEwmJkwuc3BsaWNlKHpbeF0sMSk7aWYoQy5sZW5ndGg/RXx8ZS5zZXQoQyk6ZS5zZXQobnVsbCksZylyZXR1cm4hMTtpZihmKHYsbSksZCE9PWkpe3ZhciBEO2lmKC0xPT09TylEPVM7ZWxzZXtmb3IoST1NYXRoLm1heChDLmxlbmd0aCxJKSxEPVtdLHg9MDt4PFMubGVuZ3RoJiYhKChfPVNbeF0pPj1PKTt4KyspRC5wdXNoKF8pO2Zvcih4PU87eDxJO3grKylELnB1c2goeCl9Zm9yKHg9MDt4PEQubGVuZ3RoO3grKylkKHQsRFt4XSl9ZWxzZSBwKHQpO3JldHVybiEwfX0se1wiLi4vbGliL2lzX3BsYWluX29iamVjdFwiOjcwMixcIi4uL2xpYi9sb2dnZXJzXCI6NzA1LFwiLi4vbGliL25vb3BcIjo3MTAsXCIuLi9saWIvc2VhcmNoXCI6NzIwLFwiLi4vcmVnaXN0cnlcIjo4MjksXCIuL2NvbnRhaW5lcl9hcnJheV9tYXRjaFwiOjczMX1dLDczNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxhPXQoXCJoYXMtaG92ZXJcIiksbz10KFwiLi4vbGliXCIpLHM9by5uZXN0ZWRQcm9wZXJ0eSxsPXQoXCIuLi9saWIvZXZlbnRzXCIpLGM9dChcIi4uL2xpYi9xdWV1ZVwiKSx1PXQoXCIuLi9yZWdpc3RyeVwiKSxoPXQoXCIuL3Bsb3Rfc2NoZW1hXCIpLGY9dChcIi4uL3Bsb3RzL3Bsb3RzXCIpLHA9dChcIi4uL3Bsb3RzL3BvbGFyL2xlZ2FjeVwiKSxkPXQoXCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxnPXQoXCIuLi9jb21wb25lbnRzL2RyYXdpbmdcIiksdj10KFwiLi4vY29tcG9uZW50cy9jb2xvclwiKSxtPXQoXCIuLi9jb21wb25lbnRzL2NvbG9yYmFyL2Nvbm5lY3RcIikseT10KFwiLi4vcGxvdHMvY2FydGVzaWFuL2dyYXBoX2ludGVyYWN0XCIpLmluaXRJbnRlcmFjdGlvbnMseD10KFwiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIiksYj10KFwiLi4vbGliL3N2Z190ZXh0X3V0aWxzXCIpLF89dChcIi4uL3Bsb3RzL2NhcnRlc2lhbi9zZWxlY3RcIikuY2xlYXJTZWxlY3Qsdz10KFwiLi9wbG90X2NvbmZpZ1wiKS5kZmx0Q29uZmlnLGs9dChcIi4vbWFuYWdlX2FycmF5c1wiKSxBPXQoXCIuL2hlbHBlcnNcIiksVD10KFwiLi9zdWJyb3V0aW5lc1wiKSxNPXQoXCIuL2VkaXRfdHlwZXNcIiksUz10KFwiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50c1wiKS5BWF9OQU1FX1BBVFRFUk4sRT0wO2Z1bmN0aW9uIEModCl7dmFyIGU9dC5fZnVsbExheW91dDtlLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50P2UuX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnQtLTp0LmVtaXQoXCJwbG90bHlfYWZ0ZXJwbG90XCIpfWZ1bmN0aW9uIEwodCxlKXt0cnl7dC5fZnVsbExheW91dC5fcGFwZXIuc3R5bGUoXCJiYWNrZ3JvdW5kXCIsZSl9Y2F0Y2godCl7by5lcnJvcih0KX19ZnVuY3Rpb24geih0LGUpe0wodCx2LmNvbWJpbmUoZSxcIndoaXRlXCIpKX1mdW5jdGlvbiBPKHQsZSl7aWYoIXQuX2NvbnRleHQpe3QuX2NvbnRleHQ9by5leHRlbmREZWVwKHt9LHcpO3ZhciByPW4uc2VsZWN0KFwiYmFzZVwiKTt0Ll9jb250ZXh0Ll9iYXNlVXJsPXIuc2l6ZSgpJiZyLmF0dHIoXCJocmVmXCIpP3dpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiI1wiKVswXTpcIlwifXZhciBpLHMsbCxjPXQuX2NvbnRleHQ7aWYoZSl7Zm9yKHM9T2JqZWN0LmtleXMoZSksaT0wO2k8cy5sZW5ndGg7aSsrKVwiZWRpdGFibGVcIiE9PShsPXNbaV0pJiZcImVkaXRzXCIhPT1sJiZsIGluIGMmJihcInNldEJhY2tncm91bmRcIj09PWwmJlwib3BhcXVlXCI9PT1lW2xdP2NbbF09ejpjW2xdPWVbbF0pO2UucGxvdDNkUGl4ZWxSYXRpbyYmIWMucGxvdEdsUGl4ZWxSYXRpbyYmKGMucGxvdEdsUGl4ZWxSYXRpbz1jLnBsb3QzZFBpeGVsUmF0aW8pO3ZhciB1PWUuZWRpdGFibGU7aWYodm9pZCAwIT09dSlmb3IoYy5lZGl0YWJsZT11LHM9T2JqZWN0LmtleXMoYy5lZGl0cyksaT0wO2k8cy5sZW5ndGg7aSsrKWMuZWRpdHNbc1tpXV09dTtpZihlLmVkaXRzKWZvcihzPU9iamVjdC5rZXlzKGUuZWRpdHMpLGk9MDtpPHMubGVuZ3RoO2krKykobD1zW2ldKWluIGMuZWRpdHMmJihjLmVkaXRzW2xdPWUuZWRpdHNbbF0pO2MuX2V4cG9ydGVkUGxvdD1lLl9leHBvcnRlZFBsb3R9Yy5zdGF0aWNQbG90JiYoYy5lZGl0YWJsZT0hMSxjLmVkaXRzPXt9LGMuYXV0b3NpemFibGU9ITEsYy5zY3JvbGxab29tPSExLGMuZG91YmxlQ2xpY2s9ITEsYy5zaG93VGlwcz0hMSxjLnNob3dMaW5rPSExLGMuZGlzcGxheU1vZGVCYXI9ITEpLFwiaG92ZXJcIiE9PWMuZGlzcGxheU1vZGVCYXJ8fGF8fChjLmRpc3BsYXlNb2RlQmFyPSEwKSxcInRyYW5zcGFyZW50XCIhPT1jLnNldEJhY2tncm91bmQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGMuc2V0QmFja2dyb3VuZHx8KGMuc2V0QmFja2dyb3VuZD1MKSxjLl9oYXNaZXJvSGVpZ2h0PWMuX2hhc1plcm9IZWlnaHR8fDA9PT10LmNsaWVudEhlaWdodCxjLl9oYXNaZXJvV2lkdGg9Yy5faGFzWmVyb1dpZHRofHwwPT09dC5jbGllbnRXaWR0aDt2YXIgaD1jLnNjcm9sbFpvb20sZj1jLl9zY3JvbGxab29tPXt9O2lmKCEwPT09aClmLmNhcnRlc2lhbj0xLGYuZ2wzZD0xLGYuZ2VvPTEsZi5tYXBib3g9MTtlbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiBoKXt2YXIgcD1oLnNwbGl0KFwiK1wiKTtmb3IoaT0wO2k8cC5sZW5ndGg7aSsrKWZbcFtpXV09MX1lbHNlITEhPT1oJiYoZi5nbDNkPTEsZi5nZW89MSxmLm1hcGJveD0xKX1mdW5jdGlvbiBJKHQsZSl7dmFyIHIsbixpPWUrMSxhPVtdO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspKG49dFtyXSk8MD9hLnB1c2goaStuKTphLnB1c2gobik7cmV0dXJuIGF9ZnVuY3Rpb24gRCh0LGUscil7dmFyIG4saTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKXtpZigoaT1lW25dKSE9PXBhcnNlSW50KGksMTApKXRocm93IG5ldyBFcnJvcihcImFsbCB2YWx1ZXMgaW4gXCIrcitcIiBtdXN0IGJlIGludGVnZXJzXCIpO2lmKGk+PXQuZGF0YS5sZW5ndGh8fGk8LXQuZGF0YS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKHIrXCIgbXVzdCBiZSB2YWxpZCBpbmRpY2VzIGZvciBnZC5kYXRhLlwiKTtpZihlLmluZGV4T2YoaSxuKzEpPi0xfHxpPj0wJiZlLmluZGV4T2YoLXQuZGF0YS5sZW5ndGgraSk+LTF8fGk8MCYmZS5pbmRleE9mKHQuZGF0YS5sZW5ndGgraSk+LTEpdGhyb3cgbmV3IEVycm9yKFwiZWFjaCBpbmRleCBpbiBcIityK1wiIG11c3QgYmUgdW5pcXVlLlwiKX19ZnVuY3Rpb24gUCh0LGUscil7aWYoIUFycmF5LmlzQXJyYXkodC5kYXRhKSl0aHJvdyBuZXcgRXJyb3IoXCJnZC5kYXRhIG11c3QgYmUgYW4gYXJyYXkuXCIpO2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcihcImN1cnJlbnRJbmRpY2VzIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQuXCIpO2lmKEFycmF5LmlzQXJyYXkoZSl8fChlPVtlXSksRCh0LGUsXCJjdXJyZW50SW5kaWNlc1wiKSxcInVuZGVmaW5lZFwiPT10eXBlb2Ygcnx8QXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgciYmRCh0LHIsXCJuZXdJbmRpY2VzXCIpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiByJiZlLmxlbmd0aCE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImN1cnJlbnQgYW5kIG5ldyBpbmRpY2VzIG11c3QgYmUgb2YgZXF1YWwgbGVuZ3RoLlwiKX1mdW5jdGlvbiBSKHQsZSxyLG4sYSl7IWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW8uaXNQbGFpbk9iamVjdChuKTtpZighQXJyYXkuaXNBcnJheSh0LmRhdGEpKXRocm93IG5ldyBFcnJvcihcImdkLmRhdGEgbXVzdCBiZSBhbiBhcnJheVwiKTtpZighby5pc1BsYWluT2JqZWN0KGUpKXRocm93IG5ldyBFcnJvcihcInVwZGF0ZSBtdXN0IGJlIGEga2V5OnZhbHVlIG9iamVjdFwiKTtpZihcInVuZGVmaW5lZFwiPT10eXBlb2Ygcil0aHJvdyBuZXcgRXJyb3IoXCJpbmRpY2VzIG11c3QgYmUgYW4gaW50ZWdlciBvciBhcnJheSBvZiBpbnRlZ2Vyc1wiKTtmb3IodmFyIGEgaW4gRCh0LHIsXCJpbmRpY2VzXCIpLGUpe2lmKCFBcnJheS5pc0FycmF5KGVbYV0pfHxlW2FdLmxlbmd0aCE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImF0dHJpYnV0ZSBcIithK1wiIG11c3QgYmUgYW4gYXJyYXkgb2YgbGVuZ3RoIGVxdWFsIHRvIGluZGljZXMgYXJyYXkgbGVuZ3RoXCIpO2lmKGkmJighKGEgaW4gbil8fCFBcnJheS5pc0FycmF5KG5bYV0pfHxuW2FdLmxlbmd0aCE9PWVbYV0ubGVuZ3RoKSl0aHJvdyBuZXcgRXJyb3IoXCJ3aGVuIG1heFBvaW50cyBpcyBzZXQgYXMgYSBrZXk6dmFsdWUgb2JqZWN0IGl0IG11c3QgY29udGFpbiBhIDE6MSBjb3JyaXNwb25kZW5jZSB3aXRoIHRoZSBrZXlzIGFuZCBudW1iZXIgb2YgdHJhY2VzIGluIHRoZSB1cGRhdGUgb2JqZWN0XCIpfX0odCxlLHIsbik7Zm9yKHZhciBsPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhLGwsYyx1LGgsZj1vLmlzUGxhaW5PYmplY3QobikscD1bXTtmb3IodmFyIGQgaW4gQXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSxyPUkocix0LmRhdGEubGVuZ3RoLTEpLGUpZm9yKHZhciBnPTA7ZzxyLmxlbmd0aDtnKyspe2lmKGE9dC5kYXRhW3JbZ11dLGw9KGM9cyhhLGQpKS5nZXQoKSx1PWVbZF1bZ10sIW8uaXNBcnJheU9yVHlwZWRBcnJheSh1KSl0aHJvdyBuZXcgRXJyb3IoXCJhdHRyaWJ1dGU6IFwiK2QrXCIgaW5kZXg6IFwiK2crXCIgbXVzdCBiZSBhbiBhcnJheVwiKTtpZighby5pc0FycmF5T3JUeXBlZEFycmF5KGwpKXRocm93IG5ldyBFcnJvcihcImNhbm5vdCBleHRlbmQgbWlzc2luZyBvciBub24tYXJyYXkgYXR0cmlidXRlOiBcIitkKTtpZihsLmNvbnN0cnVjdG9yIT09dS5jb25zdHJ1Y3Rvcil0aHJvdyBuZXcgRXJyb3IoXCJjYW5ub3QgZXh0ZW5kIGFycmF5IHdpdGggYW4gYXJyYXkgb2YgYSBkaWZmZXJlbnQgdHlwZTogXCIrZCk7aD1mP25bZF1bZ106bixpKGgpfHwoaD0tMSkscC5wdXNoKHtwcm9wOmMsdGFyZ2V0OmwsaW5zZXJ0OnUsbWF4cDpNYXRoLmZsb29yKGgpfSl9cmV0dXJuIHB9KHQsZSxyLG4pLGM9e30sdT17fSxoPTA7aDxsLmxlbmd0aDtoKyspe3ZhciBmPWxbaF0ucHJvcCxwPWxbaF0ubWF4cCxkPWEobFtoXS50YXJnZXQsbFtoXS5pbnNlcnQscCk7Zi5zZXQoZFswXSksQXJyYXkuaXNBcnJheShjW2YuYXN0cl0pfHwoY1tmLmFzdHJdPVtdKSxjW2YuYXN0cl0ucHVzaChkWzFdKSxBcnJheS5pc0FycmF5KHVbZi5hc3RyXSl8fCh1W2YuYXN0cl09W10pLHVbZi5hc3RyXS5wdXNoKGxbaF0udGFyZ2V0Lmxlbmd0aCl9cmV0dXJue3VwZGF0ZTpjLG1heFBvaW50czp1fX1mdW5jdGlvbiBGKHQsZSl7dmFyIHI9bmV3IHQuY29uc3RydWN0b3IodC5sZW5ndGgrZS5sZW5ndGgpO3JldHVybiByLnNldCh0KSxyLnNldChlLHQubGVuZ3RoKSxyfWZ1bmN0aW9uIEIodCxlLG4saSl7dD1vLmdldEdyYXBoRGl2KHQpLEEuY2xlYXJQcm9taXNlUXVldWUodCk7dmFyIGE9e307aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpYVtlXT1uO2Vsc2V7aWYoIW8uaXNQbGFpbk9iamVjdChlKSlyZXR1cm4gby53YXJuKFwiUmVzdHlsZSBmYWlsLlwiLGUsbixpKSxQcm9taXNlLnJlamVjdCgpO2E9by5leHRlbmRGbGF0KHt9LGUpLHZvaWQgMD09PWkmJihpPW4pfU9iamVjdC5rZXlzKGEpLmxlbmd0aCYmKHQuY2hhbmdlZD0hMCk7dmFyIHM9QS5jb2VyY2VUcmFjZUluZGljZXModCxpKSxsPVUodCxhLHMpLHU9bC5mbGFnczt1LmNhbGMmJih0LmNhbGNkYXRhPXZvaWQgMCksdS5jbGVhckF4aXNUeXBlcyYmQS5jbGVhckF4aXNUeXBlcyh0LHMse30pO3ZhciBoPVtdO3UuZnVsbFJlcGxvdD9oLnB1c2goci5wbG90KTooaC5wdXNoKGYucHJldmlvdXNQcm9taXNlcyksZi5zdXBwbHlEZWZhdWx0cyh0KSx1Lm1hcmtlclNpemUmJihmLmRvQ2FsY2RhdGEodCksWShoKSksdS5zdHlsZSYmaC5wdXNoKFQuZG9UcmFjZVN0eWxlKSx1LmNvbG9yYmFycyYmaC5wdXNoKFQuZG9Db2xvckJhcnMpLGgucHVzaChDKSksaC5wdXNoKGYucmVob3ZlcixmLnJlZHJhZyksYy5hZGQodCxCLFt0LGwudW5kb2l0LGwudHJhY2VzXSxCLFt0LGwucmVkb2l0LGwudHJhY2VzXSk7dmFyIHA9by5zeW5jT3JBc3luYyhoLHQpO3JldHVybiBwJiZwLnRoZW58fChwPVByb21pc2UucmVzb2x2ZSgpKSxwLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdC5lbWl0KFwicGxvdGx5X3Jlc3R5bGVcIixsLmV2ZW50RGF0YSksdH0pfWZ1bmN0aW9uIE4odCl7cmV0dXJuIHZvaWQgMD09PXQ/bnVsbDp0fWZ1bmN0aW9uIGoodCxlKXtyZXR1cm4gZT9mdW5jdGlvbihlLHIsbil7dmFyIGk9cyhlLHIpLGE9aS5zZXQ7cmV0dXJuIGkuc2V0PWZ1bmN0aW9uKGUpe1YoKG58fFwiXCIpK3IsaS5nZXQoKSxlLHQpLGEoZSl9LGl9OnN9ZnVuY3Rpb24gVih0LGUscixuKXtpZihBcnJheS5pc0FycmF5KGUpfHxBcnJheS5pc0FycmF5KHIpKWZvcih2YXIgaT1BcnJheS5pc0FycmF5KGUpP2U6W10sYT1BcnJheS5pc0FycmF5KHIpP3I6W10scz1NYXRoLm1heChpLmxlbmd0aCxhLmxlbmd0aCksbD0wO2w8cztsKyspVih0K1wiW1wiK2wrXCJdXCIsaVtsXSxhW2xdLG4pO2Vsc2UgaWYoby5pc1BsYWluT2JqZWN0KGUpfHxvLmlzUGxhaW5PYmplY3Qocikpe3ZhciBjPW8uaXNQbGFpbk9iamVjdChlKT9lOnt9LHU9by5pc1BsYWluT2JqZWN0KHIpP3I6e30saD1vLmV4dGVuZEZsYXQoe30sYyx1KTtmb3IodmFyIGYgaW4gaClWKHQrXCIuXCIrZixjW2ZdLHVbZl0sbil9ZWxzZSB2b2lkIDA9PT1uW3RdJiYoblt0XT1OKGUpKX1mdW5jdGlvbiBVKHQsZSxyKXt2YXIgbixpPXQuX2Z1bGxMYXlvdXQsYT10Ll9mdWxsRGF0YSxsPXQuZGF0YSxjPWkuX2d1aUVkaXRpbmcscD1qKGkuX3ByZUdVSSxjKSxnPW8uZXh0ZW5kRGVlcEFsbCh7fSxlKTtxKGUpO3ZhciB2LG09TS50cmFjZUZsYWdzKCkseT17fSx4PXt9O2Z1bmN0aW9uIGIoKXtyZXR1cm4gci5tYXAoZnVuY3Rpb24oKXt9KX1mdW5jdGlvbiBfKHQpe3ZhciBlPWQuaWQybmFtZSh0KTstMT09PXYuaW5kZXhPZihlKSYmdi5wdXNoKGUpfWZ1bmN0aW9uIHcodCl7cmV0dXJuXCJMQVlPVVRcIit0K1wiLmF1dG9yYW5nZVwifWZ1bmN0aW9uIGsodCl7cmV0dXJuXCJMQVlPVVRcIit0K1wiLnJhbmdlXCJ9ZnVuY3Rpb24gVCh0KXtmb3IodmFyIGU9dDtlPGEubGVuZ3RoO2UrKylpZihhW2VdLl9pbnB1dD09PWxbdF0pcmV0dXJuIGFbZV19ZnVuY3Rpb24gUyhuLGEsbyl7aWYoQXJyYXkuaXNBcnJheShuKSluLmZvckVhY2goZnVuY3Rpb24odCl7Uyh0LGEsbyl9KTtlbHNlIGlmKCEobiBpbiBlfHxBLmhhc1BhcmVudChlLG4pKSl7dmFyIHM7aWYoXCJMQVlPVVRcIj09PW4uc3Vic3RyKDAsNikpcz1wKHQubGF5b3V0LG4ucmVwbGFjZShcIkxBWU9VVFwiLFwiXCIpKTtlbHNle3ZhciB1PXJbb107cz1qKGkuX3RyYWNlUHJlR1VJW1QodSkuX2Z1bGxJbnB1dC51aWRdLGMpKGxbdV0sbil9biBpbiB4fHwoeFtuXT1iKCkpLHZvaWQgMD09PXhbbl1bb10mJih4W25dW29dPU4ocy5nZXQoKSkpLHZvaWQgMCE9PWEmJnMuc2V0KGEpfX1mdW5jdGlvbiBFKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gYVtlXVt0XX19ZnVuY3Rpb24gQyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4hMT09PWU/YVtyW25dXVt0XTpudWxsfX1mb3IodmFyIEwgaW4gZSl7aWYoQS5oYXNQYXJlbnQoZSxMKSl0aHJvdyBuZXcgRXJyb3IoXCJjYW5ub3Qgc2V0IFwiK0wrXCIgYW5kIGEgcGFyZW50IGF0dHJpYnV0ZSBzaW11bHRhbmVvdXNseVwiKTt2YXIgeixPLEksRCxQLFIsRj1lW0xdO2lmKFwiYXV0b2JpbnhcIiE9PUwmJlwiYXV0b2JpbnlcIiE9PUx8fChMPUwuY2hhckF0KEwubGVuZ3RoLTEpK1wiYmluc1wiLEY9QXJyYXkuaXNBcnJheShGKT9GLm1hcChDKEwpKTohMT09PUY/ci5tYXAoRShMKSk6bnVsbCkseVtMXT1GLFwiTEFZT1VUXCIhPT1MLnN1YnN0cigwLDYpKXtmb3IoeFtMXT1iKCksbj0wO248ci5sZW5ndGg7bisrKXtpZih6PWxbcltuXV0sTz1UKHJbbl0pLEQ9KEk9aihpLl90cmFjZVByZUdVSVtPLl9mdWxsSW5wdXQudWlkXSxjKSh6LEwpKS5nZXQoKSx2b2lkIDAhPT0oUD1BcnJheS5pc0FycmF5KEYpP0ZbbiVGLmxlbmd0aF06Rikpe3ZhciBCPUkucGFydHNbSS5wYXJ0cy5sZW5ndGgtMV0sVj1MLnN1YnN0cigwLEwubGVuZ3RoLUIubGVuZ3RoLTEpLFU9Vj9WK1wiLlwiOlwiXCIsSD1WP3MoTyxWKS5nZXQoKTpPO2lmKChSPWguZ2V0VHJhY2VWYWxPYmplY3QoTyxJLnBhcnRzKSkmJlIuaW1wbGllZEVkaXRzJiZudWxsIT09UClmb3IodmFyIEcgaW4gUi5pbXBsaWVkRWRpdHMpUyhvLnJlbGF0aXZlQXR0cihMLEcpLFIuaW1wbGllZEVkaXRzW0ddLG4pO2Vsc2UgaWYoXCJ0aGlja25lc3Ntb2RlXCIhPT1CJiZcImxlbm1vZGVcIiE9PUJ8fEQ9PT1QfHxcImZyYWN0aW9uXCIhPT1QJiZcInBpeGVsc1wiIT09UHx8IUgpe2lmKFwidHlwZVwiPT09TCYmXCJwaWVcIj09PVAhPShcInBpZVwiPT09RCkpe3ZhciBZPVwieFwiLFc9XCJ5XCI7XCJiYXJcIiE9PVAmJlwiYmFyXCIhPT1EfHxcImhcIiE9PXoub3JpZW50YXRpb258fChZPVwieVwiLFc9XCJ4XCIpLG8uc3dhcEF0dHJzKHosW1wiP1wiLFwiP3NyY1wiXSxcImxhYmVsc1wiLFkpLG8uc3dhcEF0dHJzKHosW1wiZD9cIixcIj8wXCJdLFwibGFiZWxcIixZKSxvLnN3YXBBdHRycyh6LFtcIj9cIixcIj9zcmNcIl0sXCJ2YWx1ZXNcIixXKSxcInBpZVwiPT09RD8ocyh6LFwibWFya2VyLmNvbG9yXCIpLnNldChzKHosXCJtYXJrZXIuY29sb3JzXCIpLmdldCgpKSxpLl9waWVsYXllci5zZWxlY3RBbGwoXCJnLnRyYWNlXCIpLnJlbW92ZSgpKTp1LnRyYWNlSXMoeixcImNhcnRlc2lhblwiKSYmcyh6LFwibWFya2VyLmNvbG9yc1wiKS5zZXQocyh6LFwibWFya2VyLmNvbG9yXCIpLmdldCgpKX19ZWxzZXt2YXIgWD1pLl9zaXplLFo9SC5vcmllbnQsJD1cInRvcFwiPT09Wnx8XCJib3R0b21cIj09PVo7aWYoXCJ0aGlja25lc3Ntb2RlXCI9PT1CKXt2YXIgSj0kP1guaDpYLnc7UyhVK1widGhpY2tuZXNzXCIsSC50aGlja25lc3MqKFwiZnJhY3Rpb25cIj09PVA/MS9KOkopLG4pfWVsc2V7dmFyIEs9JD9YLnc6WC5oO1MoVStcImxlblwiLEgubGVuKihcImZyYWN0aW9uXCI9PT1QPzEvSzpLKSxuKX19eFtMXVtuXT1OKEQpO2lmKC0xIT09W1wic3dhcHh5XCIsXCJzd2FweHlheGVzXCIsXCJvcmllbnRhdGlvblwiLFwib3JpZW50YXRpb25heGVzXCJdLmluZGV4T2YoTCkpe2lmKFwib3JpZW50YXRpb25cIj09PUwpe0kuc2V0KFApO3ZhciBRPXoueCYmIXoueT9cImhcIjpcInZcIjtpZigoSS5nZXQoKXx8USk9PT1PLm9yaWVudGF0aW9uKWNvbnRpbnVlfWVsc2VcIm9yaWVudGF0aW9uYXhlc1wiPT09TCYmKHoub3JpZW50YXRpb249e3Y6XCJoXCIsaDpcInZcIn1bTy5vcmllbnRhdGlvbl0pO0Euc3dhcFhZRGF0YSh6KSxtLmNhbGM9bS5jbGVhckF4aXNUeXBlcz0hMH1lbHNlLTEhPT1mLmRhdGFBcnJheUNvbnRhaW5lcnMuaW5kZXhPZihJLnBhcnRzWzBdKT8oQS5tYW5hZ2VBcnJheUNvbnRhaW5lcnMoSSxQLHgpLG0uY2FsYz0hMCk6KFI/Ui5hcnJheU9rJiYhdS50cmFjZUlzKE8sXCJyZWdsXCIpJiYoby5pc0FycmF5T3JUeXBlZEFycmF5KFApfHxvLmlzQXJyYXlPclR5cGVkQXJyYXkoRCkpP20uY2FsYz0hMDpNLnVwZGF0ZShtLFIpOm0uY2FsYz0hMCxJLnNldChQKSl9fWlmKC0xIT09W1wic3dhcHh5YXhlc1wiLFwib3JpZW50YXRpb25heGVzXCJdLmluZGV4T2YoTCkmJmQuc3dhcCh0LHIpLFwib3JpZW50YXRpb25heGVzXCI9PT1MKXt2YXIgdHQ9cyh0LmxheW91dCxcImhvdmVybW9kZVwiKTtcInhcIj09PXR0LmdldCgpP3R0LnNldChcInlcIik6XCJ5XCI9PT10dC5nZXQoKSYmdHQuc2V0KFwieFwiKX1pZigtMSE9PVtcIm9yaWVudGF0aW9uXCIsXCJ0eXBlXCJdLmluZGV4T2YoTCkpe2Zvcih2PVtdLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGV0PWxbcltuXV07dS50cmFjZUlzKGV0LFwiY2FydGVzaWFuXCIpJiYoXyhldC54YXhpc3x8XCJ4XCIpLF8oZXQueWF4aXN8fFwieVwiKSl9Uyh2Lm1hcCh3KSwhMCwwKSxTKHYubWFwKGspLFswLDFdLDApfX1lbHNlIEk9cCh0LmxheW91dCxMLnJlcGxhY2UoXCJMQVlPVVRcIixcIlwiKSkseFtMXT1bTihJLmdldCgpKV0sSS5zZXQoQXJyYXkuaXNBcnJheShGKT9GWzBdOkYpLG0uY2FsYz0hMH1yZXR1cm4obS5jYWxjfHxtLnBsb3QpJiYobS5mdWxsUmVwbG90PSEwKSx7ZmxhZ3M6bSx1bmRvaXQ6eCxyZWRvaXQ6eSx0cmFjZXM6cixldmVudERhdGE6by5leHRlbmREZWVwTm9BcnJheXMoW10sW2cscl0pfX1mdW5jdGlvbiBxKHQpe3ZhciBlLHIsbixpPW8uY291bnRlclJlZ2V4KFwiYXhpc1wiLFwiLnRpdGxlXCIsITEsITEpLGE9L2NvbG9yYmFyXFwudGl0bGUkLyxzPU9iamVjdC5rZXlzKHQpO2ZvcihlPTA7ZTxzLmxlbmd0aDtlKyspcj1zW2VdLG49dFtyXSxcInRpdGxlXCIhPT1yJiYhaS50ZXN0KHIpJiYhYS50ZXN0KHIpfHxcInN0cmluZ1wiIT10eXBlb2YgbiYmXCJudW1iZXJcIiE9dHlwZW9mIG4/ci5pbmRleE9mKFwidGl0bGVmb250XCIpPi0xP2wocixyLnJlcGxhY2UoXCJ0aXRsZWZvbnRcIixcInRpdGxlLmZvbnRcIikpOnIuaW5kZXhPZihcInRpdGxlcG9zaXRpb25cIik+LTE/bChyLHIucmVwbGFjZShcInRpdGxlcG9zaXRpb25cIixcInRpdGxlLnBvc2l0aW9uXCIpKTpyLmluZGV4T2YoXCJ0aXRsZXNpZGVcIik+LTE/bChyLHIucmVwbGFjZShcInRpdGxlc2lkZVwiLFwidGl0bGUuc2lkZVwiKSk6ci5pbmRleE9mKFwidGl0bGVvZmZzZXRcIik+LTEmJmwocixyLnJlcGxhY2UoXCJ0aXRsZW9mZnNldFwiLFwidGl0bGUub2Zmc2V0XCIpKTpsKHIsci5yZXBsYWNlKFwidGl0bGVcIixcInRpdGxlLnRleHRcIikpO2Z1bmN0aW9uIGwoZSxyKXt0W3JdPXRbZV0sZGVsZXRlIHRbZV19fWZ1bmN0aW9uIEgodCxlLHIpe2lmKHQ9by5nZXRHcmFwaERpdih0KSxBLmNsZWFyUHJvbWlzZVF1ZXVlKHQpLHQuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5pc1BvbGFyKXJldHVybiBQcm9taXNlLnJlc29sdmUodCk7dmFyIG49e307aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpbltlXT1yO2Vsc2V7aWYoIW8uaXNQbGFpbk9iamVjdChlKSlyZXR1cm4gby53YXJuKFwiUmVsYXlvdXQgZmFpbC5cIixlLHIpLFByb21pc2UucmVqZWN0KCk7bj1vLmV4dGVuZEZsYXQoe30sZSl9T2JqZWN0LmtleXMobikubGVuZ3RoJiYodC5jaGFuZ2VkPSEwKTt2YXIgaT0kKHQsbiksYT1pLmZsYWdzO2EuY2FsYyYmKHQuY2FsY2RhdGE9dm9pZCAwKTt2YXIgcz1bZi5wcmV2aW91c1Byb21pc2VzXTthLmxheW91dFJlcGxvdD9zLnB1c2goVC5sYXlvdXRSZXBsb3QpOk9iamVjdC5rZXlzKG4pLmxlbmd0aCYmKEcodCxhLGkpfHxmLnN1cHBseURlZmF1bHRzKHQpLGEubGVnZW5kJiZzLnB1c2goVC5kb0xlZ2VuZCksYS5sYXlvdXRzdHlsZSYmcy5wdXNoKFQubGF5b3V0U3R5bGVzKSxhLmF4cmFuZ2UmJlkocyxpLnJhbmdlc0FsdGVyZWQpLGEudGlja3MmJnMucHVzaChULmRvVGlja3NSZWxheW91dCksYS5tb2RlYmFyJiZzLnB1c2goVC5kb01vZGVCYXIpLGEuY2FtZXJhJiZzLnB1c2goVC5kb0NhbWVyYSkscy5wdXNoKEMpKSxzLnB1c2goZi5yZWhvdmVyLGYucmVkcmFnKSxjLmFkZCh0LEgsW3QsaS51bmRvaXRdLEgsW3QsaS5yZWRvaXRdKTt2YXIgbD1vLnN5bmNPckFzeW5jKHMsdCk7cmV0dXJuIGwmJmwudGhlbnx8KGw9UHJvbWlzZS5yZXNvbHZlKHQpKSxsLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdC5lbWl0KFwicGxvdGx5X3JlbGF5b3V0XCIsaS5ldmVudERhdGEpLHR9KX1mdW5jdGlvbiBHKHQsZSxyKXt2YXIgbj10Ll9mdWxsTGF5b3V0O2lmKCFlLmF4cmFuZ2UpcmV0dXJuITE7Zm9yKHZhciBpIGluIGUpaWYoXCJheHJhbmdlXCIhPT1pJiZlW2ldKXJldHVybiExO2Zvcih2YXIgYSBpbiByLnJhbmdlc0FsdGVyZWQpe3ZhciBvPWQuaWQybmFtZShhKSxzPXQubGF5b3V0W29dLGw9bltvXTtpZihsLmF1dG9yYW5nZT1zLmF1dG9yYW5nZSxsLnJhbmdlPXMucmFuZ2Uuc2xpY2UoKSxsLmNsZWFuUmFuZ2UoKSxsLl9tYXRjaEdyb3VwKWZvcih2YXIgYyBpbiBsLl9tYXRjaEdyb3VwKWlmKGMhPT1hKXt2YXIgdT1uW2QuaWQybmFtZShjKV07dS5hdXRvcmFuZ2U9bC5hdXRvcmFuZ2UsdS5yYW5nZT1sLnJhbmdlLnNsaWNlKCksdS5faW5wdXQucmFuZ2U9bC5yYW5nZS5zbGljZSgpfX1yZXR1cm4hMH1mdW5jdGlvbiBZKHQsZSl7dmFyIHI9ZT9mdW5jdGlvbih0KXt2YXIgcj1bXSxuPSEwO2Zvcih2YXIgaSBpbiBlKXt2YXIgYT1kLmdldEZyb21JZCh0LGkpO2lmKHIucHVzaChpKSxhLl9tYXRjaEdyb3VwKWZvcih2YXIgbyBpbiBhLl9tYXRjaEdyb3VwKWVbb118fHIucHVzaChvKTthLmF1dG9tYXJnaW4mJihuPSExKX1yZXR1cm4gZC5kcmF3KHQscix7c2tpcFRpdGxlOm59KX06ZnVuY3Rpb24odCl7cmV0dXJuIGQuZHJhdyh0LFwicmVkcmF3XCIpfTt0LnB1c2goXyxULmRvQXV0b1JhbmdlQW5kQ29uc3RyYWludHMscixULmRyYXdEYXRhLFQuZmluYWxEcmF3KX1yLnBsb3Q9ZnVuY3Rpb24odCxlLGksYSl7dmFyIHM7aWYodD1vLmdldEdyYXBoRGl2KHQpLGwuaW5pdCh0KSxvLmlzUGxhaW5PYmplY3QoZSkpe3ZhciBjPWU7ZT1jLmRhdGEsaT1jLmxheW91dCxhPWMuY29uZmlnLHM9Yy5mcmFtZXN9aWYoITE9PT1sLnRyaWdnZXJIYW5kbGVyKHQsXCJwbG90bHlfYmVmb3JlcGxvdFwiLFtlLGksYV0pKXJldHVybiBQcm9taXNlLnJlamVjdCgpO2V8fGl8fG8uaXNQbG90RGl2KHQpfHxvLndhcm4oXCJDYWxsaW5nIFBsb3RseS5wbG90IGFzIGlmIHJlZHJhd2luZyBidXQgdGhpcyBjb250YWluZXIgZG9lc24ndCB5ZXQgaGF2ZSBhIHBsb3QuXCIsdCksTyh0LGEpLGl8fChpPXt9KSxuLnNlbGVjdCh0KS5jbGFzc2VkKFwianMtcGxvdGx5LXBsb3RcIiwhMCksZy5tYWtlVGVzdGVyKCksQXJyYXkuaXNBcnJheSh0Ll9wcm9taXNlcyl8fCh0Ll9wcm9taXNlcz1bXSk7dmFyIGg9MD09PSh0LmRhdGF8fFtdKS5sZW5ndGgmJkFycmF5LmlzQXJyYXkoZSk7QXJyYXkuaXNBcnJheShlKSYmKEEuY2xlYW5EYXRhKGUpLGg/dC5kYXRhPWU6dC5kYXRhLnB1c2guYXBwbHkodC5kYXRhLGUpLHQuZW1wdHk9ITEpLHQubGF5b3V0JiYhaHx8KHQubGF5b3V0PUEuY2xlYW5MYXlvdXQoaSkpLGYuc3VwcGx5RGVmYXVsdHModCk7dmFyIHY9dC5fZnVsbExheW91dCx4PXYuX2hhcyhcImNhcnRlc2lhblwiKTtpZighdi5faGFzKFwicG9sYXJcIikmJmUmJmVbMF0mJmVbMF0ucilyZXR1cm4gby5sb2coXCJMZWdhY3kgcG9sYXIgY2hhcnRzIGFyZSBkZXByZWNhdGVkIVwiKSxmdW5jdGlvbih0LGUscil7dmFyIGk9bi5zZWxlY3QodCkuc2VsZWN0QWxsKFwiLnBsb3QtY29udGFpbmVyXCIpLmRhdGEoWzBdKTtpLmVudGVyKCkuaW5zZXJ0KFwiZGl2XCIsXCI6Zmlyc3QtY2hpbGRcIikuY2xhc3NlZChcInBsb3QtY29udGFpbmVyIHBsb3RseVwiLCEwKTt2YXIgYT1pLnNlbGVjdEFsbChcIi5zdmctY29udGFpbmVyXCIpLmRhdGEoWzBdKTthLmVudGVyKCkuYXBwZW5kKFwiZGl2XCIpLmNsYXNzZWQoXCJzdmctY29udGFpbmVyXCIsITApLnN0eWxlKFwicG9zaXRpb25cIixcInJlbGF0aXZlXCIpLGEuaHRtbChcIlwiKSxlJiYodC5kYXRhPWUpO3ImJih0LmxheW91dD1yKTtwLm1hbmFnZXIuZmlsbExheW91dCh0KSxhLnN0eWxlKHt3aWR0aDp0Ll9mdWxsTGF5b3V0LndpZHRoK1wicHhcIixoZWlnaHQ6dC5fZnVsbExheW91dC5oZWlnaHQrXCJweFwifSksdC5mcmFtZXdvcms9cC5tYW5hZ2VyLmZyYW1ld29yayh0KSx0LmZyYW1ld29yayh7ZGF0YTp0LmRhdGEsbGF5b3V0OnQubGF5b3V0fSxhLm5vZGUoKSksdC5mcmFtZXdvcmsuc2V0VW5kb1BvaW50KCk7dmFyIHM9dC5mcmFtZXdvcmsuc3ZnKCksbD0xLGM9dC5fZnVsbExheW91dC50aXRsZT90Ll9mdWxsTGF5b3V0LnRpdGxlLnRleHQ6XCJcIjtcIlwiIT09YyYmY3x8KGw9MCk7dmFyIHU9ZnVuY3Rpb24oKXt0aGlzLmNhbGwoYi5jb252ZXJ0VG9Uc3BhbnMsdCl9LGg9cy5zZWxlY3QoXCIudGl0bGUtZ3JvdXAgdGV4dFwiKS5jYWxsKHUpO2lmKHQuX2NvbnRleHQuZWRpdHMudGl0bGVUZXh0KXt2YXIgZD1vLl8odCxcIkNsaWNrIHRvIGVudGVyIFBsb3QgdGl0bGVcIik7YyYmYyE9PWR8fChsPS4yLGguYXR0cih7XCJkYXRhLXVuZm9ybWF0dGVkXCI6ZH0pLnRleHQoZCkuc3R5bGUoe29wYWNpdHk6bH0pLm9uKFwibW91c2VvdmVyLm9wYWNpdHlcIixmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxMDApLnN0eWxlKFwib3BhY2l0eVwiLDEpfSkub24oXCJtb3VzZW91dC5vcGFjaXR5XCIsZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMWUzKS5zdHlsZShcIm9wYWNpdHlcIiwwKX0pKTt2YXIgZz1mdW5jdGlvbigpe3RoaXMuY2FsbChiLm1ha2VFZGl0YWJsZSx7Z2Q6dH0pLm9uKFwiZWRpdFwiLGZ1bmN0aW9uKGUpe3QuZnJhbWV3b3JrKHtsYXlvdXQ6e3RpdGxlOnt0ZXh0OmV9fX0pLHRoaXMudGV4dChlKS5jYWxsKHUpLHRoaXMuY2FsbChnKX0pLm9uKFwiY2FuY2VsXCIsZnVuY3Rpb24oKXt2YXIgdD10aGlzLmF0dHIoXCJkYXRhLXVuZm9ybWF0dGVkXCIpO3RoaXMudGV4dCh0KS5jYWxsKHUpfSl9O2guY2FsbChnKX1yZXR1cm4gdC5fY29udGV4dC5zZXRCYWNrZ3JvdW5kKHQsdC5fZnVsbExheW91dC5wYXBlcl9iZ2NvbG9yKSxmLmFkZExpbmtzKHQpLFByb21pc2UucmVzb2x2ZSgpfSh0LGUsaSk7di5fcmVwbG90dGluZz0hMCxoJiZsdCh0KSx0LmZyYW1ld29yayE9PWx0JiYodC5mcmFtZXdvcms9bHQsbHQodCkpLGcuaW5pdEdyYWRpZW50cyh0KSxoJiZkLnNhdmVTaG93U3Bpa2VJbml0aWFsKHQpO3ZhciBfPSF0LmNhbGNkYXRhfHx0LmNhbGNkYXRhLmxlbmd0aCE9PSh0Ll9mdWxsRGF0YXx8W10pLmxlbmd0aDtfJiZmLmRvQ2FsY2RhdGEodCk7Zm9yKHZhciB3PTA7dzx0LmNhbGNkYXRhLmxlbmd0aDt3KyspdC5jYWxjZGF0YVt3XVswXS50cmFjZT10Ll9mdWxsRGF0YVt3XTt0Ll9jb250ZXh0LnJlc3BvbnNpdmU/dC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlcnx8KHQuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXI9ZnVuY3Rpb24oKXtmLnJlc2l6ZSh0KX0sd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0Ll9yZXNwb25zaXZlQ2hhcnRIYW5kbGVyKSk6by5jbGVhclJlc3BvbnNpdmUodCk7dmFyIGs9SlNPTi5zdHJpbmdpZnkodi5fc2l6ZSksTT0wO2Z1bmN0aW9uIFMoKXt2YXIgZSxyLG4saT10LmNhbGNkYXRhO2ZvcihmLmNsZWFyQXV0b01hcmdpbklkcyh0KSxULmRyYXdNYXJnaW5QdXNoZXJzKHQpLGQuYWxsb3dBdXRvTWFyZ2luKHQpLGU9MDtlPGkubGVuZ3RoO2UrKyl7dmFyIGE9KG49KHI9aVtlXSlbMF0udHJhY2UpLl9tb2R1bGUuY29sb3JiYXI7ITA9PT1uLnZpc2libGUmJmE/bSh0LHIsYSk6Zi5hdXRvTWFyZ2luKHQsXCJjYlwiK24udWlkKX1yZXR1cm4gZi5kb0F1dG9NYXJnaW4odCksZi5wcmV2aW91c1Byb21pc2VzKHQpfWZ1bmN0aW9uIEUoKXt0Ll90cmFuc2l0aW9uaW5nfHwoVC5kb0F1dG9SYW5nZUFuZENvbnN0cmFpbnRzKHQpLGgmJmQuc2F2ZVJhbmdlSW5pdGlhbCh0KSx1LmdldENvbXBvbmVudE1ldGhvZChcInJhbmdlc2xpZGVyXCIsXCJjYWxjQXV0b3JhbmdlXCIpKHQpKX12YXIgTD1bZi5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7aWYocylyZXR1cm4gci5hZGRGcmFtZXModCxzKX0sZnVuY3Rpb24gZSgpe2Zvcih2YXIgcj12Ll9iYXNlUGxvdE1vZHVsZXMsbj0wO248ci5sZW5ndGg7bisrKXJbbl0uZHJhd0ZyYW1ld29yayYmcltuXS5kcmF3RnJhbWV3b3JrKHQpO2lmKCF2Ll9nbGNhbnZhcyYmdi5faGFzKFwiZ2xcIikmJih2Ll9nbGNhbnZhcz12Ll9nbGNvbnRhaW5lci5zZWxlY3RBbGwoXCIuZ2wtY2FudmFzXCIpLmRhdGEoW3trZXk6XCJjb250ZXh0TGF5ZXJcIixjb250ZXh0OiEwLHBpY2s6ITF9LHtrZXk6XCJmb2N1c0xheWVyXCIsY29udGV4dDohMSxwaWNrOiExfSx7a2V5OlwicGlja0xheWVyXCIsY29udGV4dDohMSxwaWNrOiEwfV0sZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5fSksdi5fZ2xjYW52YXMuZW50ZXIoKS5hcHBlbmQoXCJjYW52YXNcIikuYXR0cihcImNsYXNzXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJnbC1jYW52YXMgZ2wtY2FudmFzLVwiK3Qua2V5LnJlcGxhY2UoXCJMYXllclwiLFwiXCIpfSkuc3R5bGUoe3Bvc2l0aW9uOlwiYWJzb2x1dGVcIix0b3A6MCxsZWZ0OjAsb3ZlcmZsb3c6XCJ2aXNpYmxlXCIsXCJwb2ludGVyLWV2ZW50c1wiOlwibm9uZVwifSkpLHYuX2dsY2FudmFzKXt2Ll9nbGNhbnZhcy5hdHRyKFwid2lkdGhcIix2LndpZHRoKS5hdHRyKFwiaGVpZ2h0XCIsdi5oZWlnaHQpO3ZhciBpPXYuX2dsY2FudmFzLmRhdGEoKVswXS5yZWdsO2lmKGkmJihNYXRoLmZsb29yKHYud2lkdGgpIT09aS5fZ2wuZHJhd2luZ0J1ZmZlcldpZHRofHxNYXRoLmZsb29yKHYuaGVpZ2h0KSE9PWkuX2dsLmRyYXdpbmdCdWZmZXJIZWlnaHQpKXt2YXIgYT1cIldlYkdMIGNvbnRleHQgYnVmZmVyIGFuZCBjYW52YXMgZGltZW5zaW9ucyBkbyBub3QgbWF0Y2ggZHVlIHRvIGJyb3dzZXIvV2ViR0wgYnVnLlwiO2lmKCFNKXJldHVybiBvLmxvZyhhK1wiIENsZWFyaW5nIGdyYXBoIGFuZCBwbG90dGluZyBhZ2Fpbi5cIiksZi5jbGVhblBsb3QoW10se30sdC5fZnVsbERhdGEsdiksZi5zdXBwbHlEZWZhdWx0cyh0KSx2PXQuX2Z1bGxMYXlvdXQsZi5kb0NhbGNkYXRhKHQpLE0rKyxlKCk7by5lcnJvcihhKX19cmV0dXJuXCJoXCI9PT12Lm1vZGViYXIub3JpZW50YXRpb24/di5fbW9kZWJhcmRpdi5zdHlsZShcImhlaWdodFwiLG51bGwpLnN0eWxlKFwid2lkdGhcIixcIjEwMCVcIik6di5fbW9kZWJhcmRpdi5zdHlsZShcIndpZHRoXCIsbnVsbCkuc3R5bGUoXCJoZWlnaHRcIix2LmhlaWdodCtcInB4XCIpLGYucHJldmlvdXNQcm9taXNlcyh0KX0sUyxmdW5jdGlvbigpe2lmKEpTT04uc3RyaW5naWZ5KHYuX3NpemUpIT09aylyZXR1cm4gby5zeW5jT3JBc3luYyhbUyxULmxheW91dFN0eWxlc10sdCl9XTt4JiZMLnB1c2goZnVuY3Rpb24oKXtpZihfKXJldHVybiBvLnN5bmNPckFzeW5jKFt1LmdldENvbXBvbmVudE1ldGhvZChcInNoYXBlc1wiLFwiY2FsY0F1dG9yYW5nZVwiKSx1LmdldENvbXBvbmVudE1ldGhvZChcImFubm90YXRpb25zXCIsXCJjYWxjQXV0b3JhbmdlXCIpLEVdLHQpO0UoKX0pLEwucHVzaChULmxheW91dFN0eWxlcykseCYmTC5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIGQuZHJhdyh0LGg/XCJcIjpcInJlZHJhd1wiKX0pLEwucHVzaChULmRyYXdEYXRhLFQuZmluYWxEcmF3LHksZi5hZGRMaW5rcyxmLnJlaG92ZXIsZi5yZWRyYWcsZi5kb0F1dG9NYXJnaW4sZi5wcmV2aW91c1Byb21pc2VzKTt2YXIgej1vLnN5bmNPckFzeW5jKEwsdCk7cmV0dXJuIHomJnoudGhlbnx8KHo9UHJvbWlzZS5yZXNvbHZlKCkpLHoudGhlbihmdW5jdGlvbigpe3JldHVybiBDKHQpLHR9KX0sci5zZXRQbG90Q29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybiBvLmV4dGVuZEZsYXQodyx0KX0sci5yZWRyYXc9ZnVuY3Rpb24odCl7aWYodD1vLmdldEdyYXBoRGl2KHQpLCFvLmlzUGxvdERpdih0KSl0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6IFwiK3QpO3JldHVybiBBLmNsZWFuRGF0YSh0LmRhdGEpLEEuY2xlYW5MYXlvdXQodC5sYXlvdXQpLHQuY2FsY2RhdGE9dm9pZCAwLHIucGxvdCh0KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdChcInBsb3RseV9yZWRyYXdcIiksdH0pfSxyLm5ld1Bsb3Q9ZnVuY3Rpb24odCxlLG4saSl7cmV0dXJuIHQ9by5nZXRHcmFwaERpdih0KSxmLmNsZWFuUGxvdChbXSx7fSx0Ll9mdWxsRGF0YXx8W10sdC5fZnVsbExheW91dHx8e30pLGYucHVyZ2UodCksci5wbG90KHQsZSxuLGkpfSxyLmV4dGVuZFRyYWNlcz1mdW5jdGlvbiB0KGUsbixpLGEpe3ZhciBzPVIoZT1vLmdldEdyYXBoRGl2KGUpLG4saSxhLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpO2lmKG8uaXNUeXBlZEFycmF5KHQpKWlmKHI8MCl7dmFyIGE9bmV3IHQuY29uc3RydWN0b3IoMCkscz1GKHQsZSk7cjwwPyhuPXMsaT1hKToobj1hLGk9cyl9ZWxzZSBpZihuPW5ldyB0LmNvbnN0cnVjdG9yKHIpLGk9bmV3IHQuY29uc3RydWN0b3IodC5sZW5ndGgrZS5sZW5ndGgtcikscj09PWUubGVuZ3RoKW4uc2V0KGUpLGkuc2V0KHQpO2Vsc2UgaWYocjxlLmxlbmd0aCl7dmFyIGw9ZS5sZW5ndGgtcjtuLnNldChlLnN1YmFycmF5KGwpKSxpLnNldCh0KSxpLnNldChlLnN1YmFycmF5KDAsbCksdC5sZW5ndGgpfWVsc2V7dmFyIGM9ci1lLmxlbmd0aCx1PXQubGVuZ3RoLWM7bi5zZXQodC5zdWJhcnJheSh1KSksbi5zZXQoZSxjKSxpLnNldCh0LnN1YmFycmF5KDAsdSkpfWVsc2Ugbj10LmNvbmNhdChlKSxpPXI+PTAmJnI8bi5sZW5ndGg/bi5zcGxpY2UoMCxuLmxlbmd0aC1yKTpbXTtyZXR1cm5bbixpXX0pLGw9ci5yZWRyYXcoZSksdT1bZSxzLnVwZGF0ZSxpLHMubWF4UG9pbnRzXTtyZXR1cm4gYy5hZGQoZSxyLnByZXBlbmRUcmFjZXMsdSx0LGFyZ3VtZW50cyksbH0sci5wcmVwZW5kVHJhY2VzPWZ1bmN0aW9uIHQoZSxuLGksYSl7dmFyIHM9UihlPW8uZ2V0R3JhcGhEaXYoZSksbixpLGEsZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk7aWYoby5pc1R5cGVkQXJyYXkodCkpaWYocjw9MCl7dmFyIGE9bmV3IHQuY29uc3RydWN0b3IoMCkscz1GKGUsdCk7cjwwPyhuPXMsaT1hKToobj1hLGk9cyl9ZWxzZSBpZihuPW5ldyB0LmNvbnN0cnVjdG9yKHIpLGk9bmV3IHQuY29uc3RydWN0b3IodC5sZW5ndGgrZS5sZW5ndGgtcikscj09PWUubGVuZ3RoKW4uc2V0KGUpLGkuc2V0KHQpO2Vsc2UgaWYocjxlLmxlbmd0aCl7dmFyIGw9ZS5sZW5ndGgtcjtuLnNldChlLnN1YmFycmF5KDAsbCkpLGkuc2V0KGUuc3ViYXJyYXkobCkpLGkuc2V0KHQsbCl9ZWxzZXt2YXIgYz1yLWUubGVuZ3RoO24uc2V0KGUpLG4uc2V0KHQuc3ViYXJyYXkoMCxjKSxlLmxlbmd0aCksaS5zZXQodC5zdWJhcnJheShjKSl9ZWxzZSBuPWUuY29uY2F0KHQpLGk9cj49MCYmcjxuLmxlbmd0aD9uLnNwbGljZShyLG4ubGVuZ3RoKTpbXTtyZXR1cm5bbixpXX0pLGw9ci5yZWRyYXcoZSksdT1bZSxzLnVwZGF0ZSxpLHMubWF4UG9pbnRzXTtyZXR1cm4gYy5hZGQoZSxyLmV4dGVuZFRyYWNlcyx1LHQsYXJndW1lbnRzKSxsfSxyLmFkZFRyYWNlcz1mdW5jdGlvbiB0KGUsbixpKXtlPW8uZ2V0R3JhcGhEaXYoZSk7dmFyIGEscyxsPVtdLHU9ci5kZWxldGVUcmFjZXMsaD10LGY9W2UsbF0scD1bZSxuXTtmb3IoZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk7aWYoIUFycmF5LmlzQXJyYXkodC5kYXRhKSl0aHJvdyBuZXcgRXJyb3IoXCJnZC5kYXRhIG11c3QgYmUgYW4gYXJyYXkuXCIpO2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcihcInRyYWNlcyBtdXN0IGJlIGRlZmluZWQuXCIpO2ZvcihBcnJheS5pc0FycmF5KGUpfHwoZT1bZV0pLG49MDtuPGUubGVuZ3RoO24rKylpZihcIm9iamVjdFwiIT10eXBlb2YoaT1lW25dKXx8QXJyYXkuaXNBcnJheShpKXx8bnVsbD09PWkpdGhyb3cgbmV3IEVycm9yKFwiYWxsIHZhbHVlcyBpbiB0cmFjZXMgYXJyYXkgbXVzdCBiZSBub24tYXJyYXkgb2JqZWN0c1wiKTtpZihcInVuZGVmaW5lZFwiPT10eXBlb2Ygcnx8QXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgciYmci5sZW5ndGghPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJpZiBpbmRpY2VzIGlzIHNwZWNpZmllZCwgdHJhY2VzLmxlbmd0aCBtdXN0IGVxdWFsIGluZGljZXMubGVuZ3RoXCIpfShlLG4saSksQXJyYXkuaXNBcnJheShuKXx8KG49W25dKSxuPW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBvLmV4dGVuZEZsYXQoe30sdCl9KSxBLmNsZWFuRGF0YShuKSxhPTA7YTxuLmxlbmd0aDthKyspZS5kYXRhLnB1c2goblthXSk7Zm9yKGE9MDthPG4ubGVuZ3RoO2ErKylsLnB1c2goLW4ubGVuZ3RoK2EpO2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBpKXJldHVybiBzPXIucmVkcmF3KGUpLGMuYWRkKGUsdSxmLGgscCkscztBcnJheS5pc0FycmF5KGkpfHwoaT1baV0pO3RyeXtQKGUsbCxpKX1jYXRjaCh0KXt0aHJvdyBlLmRhdGEuc3BsaWNlKGUuZGF0YS5sZW5ndGgtbi5sZW5ndGgsbi5sZW5ndGgpLHR9cmV0dXJuIGMuc3RhcnRTZXF1ZW5jZShlKSxjLmFkZChlLHUsZixoLHApLHM9ci5tb3ZlVHJhY2VzKGUsbCxpKSxjLnN0b3BTZXF1ZW5jZShlKSxzfSxyLmRlbGV0ZVRyYWNlcz1mdW5jdGlvbiB0KGUsbil7ZT1vLmdldEdyYXBoRGl2KGUpO3ZhciBpLGEscz1bXSxsPXIuYWRkVHJhY2VzLHU9dCxoPVtlLHMsbl0sZj1bZSxuXTtpZihcInVuZGVmaW5lZFwiPT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoXCJpbmRpY2VzIG11c3QgYmUgYW4gaW50ZWdlciBvciBhcnJheSBvZiBpbnRlZ2Vycy5cIik7Zm9yKEFycmF5LmlzQXJyYXkobil8fChuPVtuXSksRChlLG4sXCJpbmRpY2VzXCIpLChuPUkobixlLmRhdGEubGVuZ3RoLTEpKS5zb3J0KG8uc29ydGVyRGVzKSxpPTA7aTxuLmxlbmd0aDtpKz0xKWE9ZS5kYXRhLnNwbGljZShuW2ldLDEpWzBdLHMucHVzaChhKTt2YXIgcD1yLnJlZHJhdyhlKTtyZXR1cm4gYy5hZGQoZSxsLGgsdSxmKSxwfSxyLm1vdmVUcmFjZXM9ZnVuY3Rpb24gdChlLG4saSl7dmFyIGEscz1bXSxsPVtdLHU9dCxoPXQsZj1bZT1vLmdldEdyYXBoRGl2KGUpLGksbl0scD1bZSxuLGldO2lmKFAoZSxuLGkpLG49QXJyYXkuaXNBcnJheShuKT9uOltuXSxcInVuZGVmaW5lZFwiPT10eXBlb2YgaSlmb3IoaT1bXSxhPTA7YTxuLmxlbmd0aDthKyspaS5wdXNoKC1uLmxlbmd0aCthKTtmb3IoaT1BcnJheS5pc0FycmF5KGkpP2k6W2ldLG49SShuLGUuZGF0YS5sZW5ndGgtMSksaT1JKGksZS5kYXRhLmxlbmd0aC0xKSxhPTA7YTxlLmRhdGEubGVuZ3RoO2ErKyktMT09PW4uaW5kZXhPZihhKSYmcy5wdXNoKGUuZGF0YVthXSk7Zm9yKGE9MDthPG4ubGVuZ3RoO2ErKylsLnB1c2goe25ld0luZGV4OmlbYV0sdHJhY2U6ZS5kYXRhW25bYV1dfSk7Zm9yKGwuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0Lm5ld0luZGV4LWUubmV3SW5kZXh9KSxhPTA7YTxsLmxlbmd0aDthKz0xKXMuc3BsaWNlKGxbYV0ubmV3SW5kZXgsMCxsW2FdLnRyYWNlKTtlLmRhdGE9czt2YXIgZD1yLnJlZHJhdyhlKTtyZXR1cm4gYy5hZGQoZSx1LGYsaCxwKSxkfSxyLnJlc3R5bGU9QixyLl9zdG9yZURpcmVjdEdVSUVkaXQ9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbiBpbiByKXtWKG4scyh0LG4pLmdldCgpLHJbbl0sZSl9fSxyLnJlbGF5b3V0PUg7dmFyIFc9L15beHl6XWF4aXNbMC05XSpcXC5yYW5nZShcXFtbMHwxXVxcXSk/JC8sWD0vXlt4eXpdYXhpc1swLTldKlxcLmF1dG9yYW5nZSQvLFo9L15beHl6XWF4aXNbMC05XSpcXC5kb21haW4oXFxbWzB8MV1cXF0pPyQvO2Z1bmN0aW9uICQodCxlKXt2YXIgcixuLGksYT10LmxheW91dCxsPXQuX2Z1bGxMYXlvdXQsYz1sLl9ndWlFZGl0aW5nLGY9aihsLl9wcmVHVUksYykscD1PYmplY3Qua2V5cyhlKSxnPWQubGlzdCh0KSx2PW8uZXh0ZW5kRGVlcEFsbCh7fSxlKSxtPXt9O2ZvcihxKGUpLHA9T2JqZWN0LmtleXMoZSksbj0wO248cC5sZW5ndGg7bisrKWlmKDA9PT1wW25dLmluZGV4T2YoXCJhbGxheGVzXCIpKXtmb3IoaT0wO2k8Zy5sZW5ndGg7aSsrKXt2YXIgeT1nW2ldLl9pZC5zdWJzdHIoMSkseD0tMSE9PXkuaW5kZXhPZihcInNjZW5lXCIpP3krXCIuXCI6XCJcIixiPXBbbl0ucmVwbGFjZShcImFsbGF4ZXNcIix4K2dbaV0uX25hbWUpO2VbYl18fChlW2JdPWVbcFtuXV0pfWRlbGV0ZSBlW3Bbbl1dfXZhciBfPU0ubGF5b3V0RmxhZ3MoKSx3PXt9LFQ9e307ZnVuY3Rpb24gRSh0LHIpe2lmKEFycmF5LmlzQXJyYXkodCkpdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe0UodCxyKX0pO2Vsc2UgaWYoISh0IGluIGV8fEEuaGFzUGFyZW50KGUsdCkpKXt2YXIgbj1mKGEsdCk7dCBpbiBUfHwoVFt0XT1OKG4uZ2V0KCkpKSx2b2lkIDAhPT1yJiZuLnNldChyKX19dmFyIEMsTD17fTtmdW5jdGlvbiB6KHQpe3ZhciBlPWQubmFtZTJpZCh0LnNwbGl0KFwiLlwiKVswXSk7cmV0dXJuIExbZV09MSxlfWZvcih2YXIgTyBpbiBlKXtpZihBLmhhc1BhcmVudChlLE8pKXRocm93IG5ldyBFcnJvcihcImNhbm5vdCBzZXQgXCIrTytcIiBhbmQgYSBwYXJlbnQgYXR0cmlidXRlIHNpbXVsdGFuZW91c2x5XCIpO2Zvcih2YXIgST1mKGEsTyksRD1lW09dLFA9SS5wYXJ0cy5sZW5ndGgtMTtQPjAmJlwic3RyaW5nXCIhPXR5cGVvZiBJLnBhcnRzW1BdOylQLS07dmFyIFI9SS5wYXJ0c1tQXSxGPUkucGFydHNbUC0xXStcIi5cIitSLEI9SS5wYXJ0cy5zbGljZSgwLFApLmpvaW4oXCIuXCIpLFY9cyh0LmxheW91dCxCKS5nZXQoKSxVPXMobCxCKS5nZXQoKSxIPUkuZ2V0KCk7aWYodm9pZCAwIT09RCl7d1tPXT1ELFRbT109XCJyZXZlcnNlXCI9PT1SP0Q6TihIKTt2YXIgRz1oLmdldExheW91dFZhbE9iamVjdChsLEkucGFydHMpO2lmKEcmJkcuaW1wbGllZEVkaXRzJiZudWxsIT09RClmb3IodmFyIFkgaW4gRy5pbXBsaWVkRWRpdHMpRShvLnJlbGF0aXZlQXR0cihPLFkpLEcuaW1wbGllZEVkaXRzW1ldKTtpZigtMSE9PVtcIndpZHRoXCIsXCJoZWlnaHRcIl0uaW5kZXhPZihPKSlpZihEKXtFKFwiYXV0b3NpemVcIixudWxsKTt2YXIgJD1cImhlaWdodFwiPT09Tz9cIndpZHRoXCI6XCJoZWlnaHRcIjtFKCQsbFskXSl9ZWxzZSBsW09dPXQuX2luaXRpYWxBdXRvU2l6ZVtPXTtlbHNlIGlmKFwiYXV0b3NpemVcIj09PU8pRShcIndpZHRoXCIsRD9udWxsOmwud2lkdGgpLEUoXCJoZWlnaHRcIixEP251bGw6bC5oZWlnaHQpO2Vsc2UgaWYoRi5tYXRjaChXKSl6KEYpLHMobCxCK1wiLl9pbnB1dFJhbmdlXCIpLnNldChudWxsKTtlbHNlIGlmKEYubWF0Y2goWCkpe3ooRikscyhsLEIrXCIuX2lucHV0UmFuZ2VcIikuc2V0KG51bGwpO3ZhciBLPXMobCxCKS5nZXQoKTtLLl9pbnB1dERvbWFpbiYmKEsuX2lucHV0LmRvbWFpbj1LLl9pbnB1dERvbWFpbi5zbGljZSgpKX1lbHNlIEYubWF0Y2goWikmJnMobCxCK1wiLl9pbnB1dERvbWFpblwiKS5zZXQobnVsbCk7aWYoXCJ0eXBlXCI9PT1SKXt2YXIgUT1WLHR0PVwibGluZWFyXCI9PT1VLnR5cGUmJlwibG9nXCI9PT1ELGV0PVwibG9nXCI9PT1VLnR5cGUmJlwibGluZWFyXCI9PT1EO2lmKHR0fHxldCl7aWYoUSYmUS5yYW5nZSlpZihVLmF1dG9yYW5nZSl0dCYmKFEucmFuZ2U9US5yYW5nZVsxXT5RLnJhbmdlWzBdP1sxLDJdOlsyLDFdKTtlbHNle3ZhciBydD1RLnJhbmdlWzBdLG50PVEucmFuZ2VbMV07dHQ/KHJ0PD0wJiZudDw9MCYmRShCK1wiLmF1dG9yYW5nZVwiLCEwKSxydDw9MD9ydD1udC8xZTY6bnQ8PTAmJihudD1ydC8xZTYpLEUoQitcIi5yYW5nZVswXVwiLE1hdGgubG9nKHJ0KS9NYXRoLkxOMTApLEUoQitcIi5yYW5nZVsxXVwiLE1hdGgubG9nKG50KS9NYXRoLkxOMTApKTooRShCK1wiLnJhbmdlWzBdXCIsTWF0aC5wb3coMTAscnQpKSxFKEIrXCIucmFuZ2VbMV1cIixNYXRoLnBvdygxMCxudCkpKX1lbHNlIEUoQitcIi5hdXRvcmFuZ2VcIiwhMCk7QXJyYXkuaXNBcnJheShsLl9zdWJwbG90cy5wb2xhcikmJmwuX3N1YnBsb3RzLnBvbGFyLmxlbmd0aCYmbFtJLnBhcnRzWzBdXSYmXCJyYWRpYWxheGlzXCI9PT1JLnBhcnRzWzFdJiZkZWxldGUgbFtJLnBhcnRzWzBdXS5fc3VicGxvdC52aWV3SW5pdGlhbFtcInJhZGlhbGF4aXMucmFuZ2VcIl0sdS5nZXRDb21wb25lbnRNZXRob2QoXCJhbm5vdGF0aW9uc1wiLFwiY29udmVydENvb3Jkc1wiKSh0LFUsRCxFKSx1LmdldENvbXBvbmVudE1ldGhvZChcImltYWdlc1wiLFwiY29udmVydENvb3Jkc1wiKSh0LFUsRCxFKX1lbHNlIEUoQitcIi5hdXRvcmFuZ2VcIiwhMCksRShCK1wiLnJhbmdlXCIsbnVsbCk7cyhsLEIrXCIuX2lucHV0UmFuZ2VcIikuc2V0KG51bGwpfWVsc2UgaWYoUi5tYXRjaChTKSl7dmFyIGl0PXMobCxPKS5nZXQoKSxhdD0oRHx8e30pLnR5cGU7YXQmJlwiLVwiIT09YXR8fChhdD1cImxpbmVhclwiKSx1LmdldENvbXBvbmVudE1ldGhvZChcImFubm90YXRpb25zXCIsXCJjb252ZXJ0Q29vcmRzXCIpKHQsaXQsYXQsRSksdS5nZXRDb21wb25lbnRNZXRob2QoXCJpbWFnZXNcIixcImNvbnZlcnRDb29yZHNcIikodCxpdCxhdCxFKX12YXIgb3Q9ay5jb250YWluZXJBcnJheU1hdGNoKE8pO2lmKG90KXtyPW90LmFycmF5LG49b3QuaW5kZXg7dmFyIHN0PW90LnByb3BlcnR5LGx0PUd8fHtlZGl0VHlwZTpcImNhbGNcIn07XCJcIiE9PW4mJlwiXCI9PT1zdCYmKGsuaXNBZGRWYWwoRCk/VFtPXT1udWxsOmsuaXNSZW1vdmVWYWwoRCk/VFtPXT0ocyhhLHIpLmdldCgpfHxbXSlbbl06by53YXJuKFwidW5yZWNvZ25pemVkIGZ1bGwgb2JqZWN0IHZhbHVlXCIsZSkpLE0udXBkYXRlKF8sbHQpLG1bcl18fChtW3JdPXt9KTt2YXIgY3Q9bVtyXVtuXTtjdHx8KGN0PW1bcl1bbl09e30pLGN0W3N0XT1ELGRlbGV0ZSBlW09dfWVsc2VcInJldmVyc2VcIj09PVI/KFYucmFuZ2U/Vi5yYW5nZS5yZXZlcnNlKCk6KEUoQitcIi5hdXRvcmFuZ2VcIiwhMCksVi5yYW5nZT1bMSwwXSksVS5hdXRvcmFuZ2U/Xy5jYWxjPSEwOl8ucGxvdD0hMCk6KGwuX2hhcyhcInNjYXR0ZXItbGlrZVwiKSYmbC5faGFzKFwicmVnbFwiKSYmXCJkcmFnbW9kZVwiPT09TyYmKFwibGFzc29cIj09PUR8fFwic2VsZWN0XCI9PT1EKSYmXCJsYXNzb1wiIT09SCYmXCJzZWxlY3RcIiE9PUg/Xy5wbG90PSEwOmwuX2hhcyhcImdsMmRcIik/Xy5wbG90PSEwOkc/TS51cGRhdGUoXyxHKTpfLmNhbGM9ITAsSS5zZXQoRCkpfX1mb3IociBpbiBtKXtrLmFwcGx5Q29udGFpbmVyQXJyYXlDaGFuZ2VzKHQsZihhLHIpLG1bcl0sXyxmKXx8KF8ucGxvdD0hMCl9dmFyIHV0PWwuX2F4aXNDb25zdHJhaW50R3JvdXBzfHxbXTtmb3IoQyBpbiBMKWZvcihuPTA7bjx1dC5sZW5ndGg7bisrKXt2YXIgaHQ9dXRbbl07aWYoaHRbQ10pZm9yKHZhciBmdCBpbiBfLmNhbGM9ITAsaHQpTFtmdF18fChkLmdldEZyb21JZCh0LGZ0KS5fY29uc3RyYWludFNocmlua2FibGU9ITApfXJldHVybihKKHQpfHxlLmhlaWdodHx8ZS53aWR0aCkmJihfLnBsb3Q9ITApLChfLnBsb3R8fF8uY2FsYykmJihfLmxheW91dFJlcGxvdD0hMCkse2ZsYWdzOl8scmFuZ2VzQWx0ZXJlZDpMLHVuZG9pdDpULHJlZG9pdDp3LGV2ZW50RGF0YTp2fX1mdW5jdGlvbiBKKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLndpZHRoLG49ZS5oZWlnaHQ7cmV0dXJuIHQubGF5b3V0LmF1dG9zaXplJiZmLnBsb3RBdXRvU2l6ZSh0LHQubGF5b3V0LGUpLGUud2lkdGghPT1yfHxlLmhlaWdodCE9PW59ZnVuY3Rpb24gSyh0LGUsbixpKXtpZih0PW8uZ2V0R3JhcGhEaXYodCksQS5jbGVhclByb21pc2VRdWV1ZSh0KSx0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHQpO28uaXNQbGFpbk9iamVjdChlKXx8KGU9e30pLG8uaXNQbGFpbk9iamVjdChuKXx8KG49e30pLE9iamVjdC5rZXlzKGUpLmxlbmd0aCYmKHQuY2hhbmdlZD0hMCksT2JqZWN0LmtleXMobikubGVuZ3RoJiYodC5jaGFuZ2VkPSEwKTt2YXIgYT1BLmNvZXJjZVRyYWNlSW5kaWNlcyh0LGkpLHM9VSh0LG8uZXh0ZW5kRmxhdCh7fSxlKSxhKSxsPXMuZmxhZ3MsdT0kKHQsby5leHRlbmRGbGF0KHt9LG4pKSxoPXUuZmxhZ3M7KGwuY2FsY3x8aC5jYWxjKSYmKHQuY2FsY2RhdGE9dm9pZCAwKSxsLmNsZWFyQXhpc1R5cGVzJiZBLmNsZWFyQXhpc1R5cGVzKHQsYSxuKTt2YXIgcD1bXTtpZihsLmZ1bGxSZXBsb3QmJmgubGF5b3V0UmVwbG90KXt2YXIgZD10LmRhdGEsZz10LmxheW91dDt0LmRhdGE9dm9pZCAwLHQubGF5b3V0PXZvaWQgMCxwLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gci5wbG90KHQsZCxnKX0pfWVsc2UgbC5mdWxsUmVwbG90P3AucHVzaChyLnBsb3QpOmgubGF5b3V0UmVwbG90P3AucHVzaChULmxheW91dFJlcGxvdCk6KHAucHVzaChmLnByZXZpb3VzUHJvbWlzZXMpLEcodCxoLHUpfHxmLnN1cHBseURlZmF1bHRzKHQpLGwuc3R5bGUmJnAucHVzaChULmRvVHJhY2VTdHlsZSksbC5jb2xvcmJhcnMmJnAucHVzaChULmRvQ29sb3JCYXJzKSxoLmxlZ2VuZCYmcC5wdXNoKFQuZG9MZWdlbmQpLGgubGF5b3V0c3R5bGUmJnAucHVzaChULmxheW91dFN0eWxlcyksaC5heHJhbmdlJiZZKHAsdS5yYW5nZXNBbHRlcmVkKSxoLnRpY2tzJiZwLnB1c2goVC5kb1RpY2tzUmVsYXlvdXQpLGgubW9kZWJhciYmcC5wdXNoKFQuZG9Nb2RlQmFyKSxoLmNhbWVyYSYmcC5wdXNoKFQuZG9DYW1lcmEpLHAucHVzaChDKSk7cC5wdXNoKGYucmVob3ZlcixmLnJlZHJhZyksYy5hZGQodCxLLFt0LHMudW5kb2l0LHUudW5kb2l0LHMudHJhY2VzXSxLLFt0LHMucmVkb2l0LHUucmVkb2l0LHMudHJhY2VzXSk7dmFyIHY9by5zeW5jT3JBc3luYyhwLHQpO3JldHVybiB2JiZ2LnRoZW58fCh2PVByb21pc2UucmVzb2x2ZSh0KSksdi50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdChcInBsb3RseV91cGRhdGVcIix7ZGF0YTpzLmV2ZW50RGF0YSxsYXlvdXQ6dS5ldmVudERhdGF9KSx0fSl9ZnVuY3Rpb24gUSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5fZnVsbExheW91dC5fZ3VpRWRpdGluZz0hMDt2YXIgcj10LmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gZS5fZnVsbExheW91dC5fZ3VpRWRpdGluZz0hMSxyfX1yLnVwZGF0ZT1LLHIuX2d1aVJlc3R5bGU9UShCKSxyLl9ndWlSZWxheW91dD1RKEgpLHIuX2d1aVVwZGF0ZT1RKEspO3ZhciB0dD1be3BhdHRlcm46L15oaWRkZW5sYWJlbHMvLGF0dHI6XCJsZWdlbmQudWlyZXZpc2lvblwifSx7cGF0dGVybjovXigoeHx5KWF4aXNcXGQqKVxcLigoYXV0byk/cmFuZ2V8dGl0bGVcXC50ZXh0KS99LHtwYXR0ZXJuOi9heGlzXFxkKlxcLnNob3dzcGlrZXMkLyxhdHRyOlwibW9kZWJhci51aXJldmlzaW9uXCJ9LHtwYXR0ZXJuOi8oaG92ZXJ8ZHJhZyltb2RlJC8sYXR0cjpcIm1vZGViYXIudWlyZXZpc2lvblwifSx7cGF0dGVybjovXihzY2VuZVxcZCopXFwuY2FtZXJhL30se3BhdHRlcm46L14oZ2VvXFxkKilcXC4ocHJvamVjdGlvbnxjZW50ZXIpL30se3BhdHRlcm46L14odGVybmFyeVxcZCpcXC5bYWJjXWF4aXMpXFwuKG1pbnx0aXRsZVxcLnRleHQpJC99LHtwYXR0ZXJuOi9eKHBvbGFyXFxkKlxcLnJhZGlhbGF4aXMpXFwuKChhdXRvKT9yYW5nZXxhbmdsZXx0aXRsZVxcLnRleHQpL30se3BhdHRlcm46L14ocG9sYXJcXGQqXFwuYW5ndWxhcmF4aXMpXFwucm90YXRpb24vfSx7cGF0dGVybjovXihtYXBib3hcXGQqKVxcLihjZW50ZXJ8em9vbXxiZWFyaW5nfHBpdGNoKS99LHtwYXR0ZXJuOi9ebGVnZW5kXFwuKHh8eSkkLyxhdHRyOlwiZWRpdHJldmlzaW9uXCJ9LHtwYXR0ZXJuOi9eKHNoYXBlc3xhbm5vdGF0aW9ucykvLGF0dHI6XCJlZGl0cmV2aXNpb25cIn0se3BhdHRlcm46L150aXRsZVxcLnRleHQkLyxhdHRyOlwiZWRpdHJldmlzaW9uXCJ9XSxldD1be3BhdHRlcm46L15zZWxlY3RlZHBvaW50cyQvLGF0dHI6XCJzZWxlY3Rpb25yZXZpc2lvblwifSx7cGF0dGVybjovKF58dmFsdWVcXC4pdmlzaWJsZSQvLGF0dHI6XCJsZWdlbmQudWlyZXZpc2lvblwifSx7cGF0dGVybjovXmRpbWVuc2lvbnNcXFtcXGQrXFxdXFwuY29uc3RyYWludHJhbmdlL30se3BhdHRlcm46L15ub2RlXFwuKHh8eXxncm91cHMpL30se3BhdHRlcm46L15sZXZlbCQvfSx7cGF0dGVybjovKF58dmFsdWVcXC4pbmFtZSQvfSx7cGF0dGVybjovY29sb3JiYXJcXC50aXRsZVxcLnRleHQkL30se3BhdHRlcm46L2NvbG9yYmFyXFwuKHh8eSkkLyxhdHRyOlwiZWRpdHJldmlzaW9uXCJ9XTtmdW5jdGlvbiBydCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdLGk9dC5tYXRjaChuLnBhdHRlcm4pO2lmKGkpcmV0dXJue2hlYWQ6aVsxXSxhdHRyOm4uYXR0cn19fWZ1bmN0aW9uIG50KHQsZSl7dmFyIHI9cyhlLHQpLmdldCgpO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHI7dmFyIG49dC5zcGxpdChcIi5cIik7Zm9yKG4ucG9wKCk7bi5sZW5ndGg+MTspaWYobi5wb3AoKSx2b2lkIDAhPT0ocj1zKGUsbi5qb2luKFwiLlwiKStcIi51aXJldmlzaW9uXCIpLmdldCgpKSlyZXR1cm4gcjtyZXR1cm4gZS51aXJldmlzaW9ufWZ1bmN0aW9uIGl0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXS5fZnVsbElucHV0LnVpZD09PXQpcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gYXQodCxlLHIpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKGVbbl0udWlkPT09dClyZXR1cm4gbjtyZXR1cm4hZVtyXXx8ZVtyXS51aWQ/LTE6cn1mdW5jdGlvbiBvdCh0LGUpe3ZhciByPW8uaXNQbGFpbk9iamVjdCh0KSxuPUFycmF5LmlzQXJyYXkodCk7cmV0dXJuIHJ8fG4/KHImJm8uaXNQbGFpbk9iamVjdChlKXx8biYmQXJyYXkuaXNBcnJheShlKSkmJkpTT04uc3RyaW5naWZ5KHQpPT09SlNPTi5zdHJpbmdpZnkoZSk6dD09PWV9ZnVuY3Rpb24gc3QodCxlLHIsbil7dmFyIGksYSxsLGM9bi5nZXRWYWxPYmplY3QsdT1uLmZsYWdzLGg9bi5pbW11dGFibGUsZj1uLmluQXJyYXkscD1uLmFycmF5SW5kZXg7ZnVuY3Rpb24gZCgpe3ZhciB0PWkuZWRpdFR5cGU7ZiYmLTEhPT10LmluZGV4T2YoXCJhcnJheWRyYXdcIik/by5wdXNoVW5pcXVlKHUuYXJyYXlzW2ZdLHApOihNLnVwZGF0ZSh1LGkpLFwibm9uZVwiIT09dCYmdS5uQ2hhbmdlcysrLG4udHJhbnNpdGlvbiYmaS5hbmltJiZ1Lm5DaGFuZ2VzQW5pbSsrLChXLnRlc3QobCl8fFgudGVzdChsKSkmJih1LnJhbmdlc0FsdGVyZWRbclswXV09MSksWi50ZXN0KGwpJiZzKGUsXCJfaW5wdXREb21haW5cIikuc2V0KG51bGwpLFwiZGF0YXJldmlzaW9uXCI9PT1hJiYodS5uZXdEYXRhUmV2aXNpb249MSkpfWZ1bmN0aW9uIGcodCl7cmV0dXJuXCJkYXRhX2FycmF5XCI9PT10LnZhbFR5cGV8fHQuYXJyYXlPa31mb3IoYSBpbiB0KXtpZih1LmNhbGMmJiFuLnRyYW5zaXRpb24pcmV0dXJuO3ZhciB2PXRbYV0sbT1lW2FdLHk9ci5jb25jYXQoYSk7aWYobD15LmpvaW4oXCIuXCIpLFwiX1wiIT09YS5jaGFyQXQoMCkmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHYmJnYhPT1tKXtpZigoXCJ0aWNrMFwiPT09YXx8XCJkdGlja1wiPT09YSkmJlwiZ2VvXCIhPT1yWzBdKXt2YXIgeD1lLnRpY2ttb2RlO2lmKFwiYXV0b1wiPT09eHx8XCJhcnJheVwiPT09eHx8IXgpY29udGludWV9aWYoKFwicmFuZ2VcIiE9PWF8fCFlLmF1dG9yYW5nZSkmJihcInptaW5cIiE9PWEmJlwiem1heFwiIT09YXx8XCJjb250b3VyY2FycGV0XCIhPT1lLnR5cGUpJiYoaT1jKHkpKSYmKCFpLl9jb21wYXJlQXNKU09OfHxKU09OLnN0cmluZ2lmeSh2KSE9PUpTT04uc3RyaW5naWZ5KG0pKSl7dmFyIGIsXz1pLnZhbFR5cGUsdz1nKGkpLGs9QXJyYXkuaXNBcnJheSh2KSxBPUFycmF5LmlzQXJyYXkobSk7aWYoayYmQSl7dmFyIFQ9XCJfaW5wdXRfXCIrYSxTPXRbVF0sRT1lW1RdO2lmKEFycmF5LmlzQXJyYXkoUykmJlM9PT1FKWNvbnRpbnVlfWlmKHZvaWQgMD09PW0pdyYmaz91LmNhbGM9ITA6ZCgpO2Vsc2UgaWYoaS5faXNMaW5rZWRUb0FycmF5KXt2YXIgQz1bXSxMPSExO2Z8fCh1LmFycmF5c1thXT1DKTt2YXIgej1NYXRoLm1pbih2Lmxlbmd0aCxtLmxlbmd0aCksTz1NYXRoLm1heCh2Lmxlbmd0aCxtLmxlbmd0aCk7aWYoeiE9PU8pe2lmKFwiYXJyYXlkcmF3XCIhPT1pLmVkaXRUeXBlKXtkKCk7Y29udGludWV9TD0hMH1mb3IoYj0wO2I8ejtiKyspc3QodltiXSxtW2JdLHkuY29uY2F0KGIpLG8uZXh0ZW5kRmxhdCh7aW5BcnJheTphLGFycmF5SW5kZXg6Yn0sbikpO2lmKEwpZm9yKGI9ejtiPE87YisrKUMucHVzaChiKX1lbHNlIV8mJm8uaXNQbGFpbk9iamVjdCh2KT9zdCh2LG0seSxuKTp3P2smJkE/KGgmJih1LmNhbGM9ITApLChofHxuLm5ld0RhdGFSZXZpc2lvbikmJmQoKSk6ayE9PUE/dS5jYWxjPSEwOmQoKTprJiZBJiZ2Lmxlbmd0aD09PW0ubGVuZ3RoJiZTdHJpbmcodik9PT1TdHJpbmcobSl8fGQoKX19fWZvcihhIGluIGUpaWYoIShhIGluIHR8fFwiX1wiPT09YS5jaGFyQXQoMCl8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGVbYV0pKXtpZihnKGk9YyhyLmNvbmNhdChhKSkpJiZBcnJheS5pc0FycmF5KGVbYV0pKXJldHVybiB2b2lkKHUuY2FsYz0hMCk7ZCgpfX1mdW5jdGlvbiBsdCh0KXt2YXIgZT1uLnNlbGVjdCh0KSxyPXQuX2Z1bGxMYXlvdXQ7aWYoci5fY29udGFpbmVyPWUuc2VsZWN0QWxsKFwiLnBsb3QtY29udGFpbmVyXCIpLmRhdGEoWzBdKSxyLl9jb250YWluZXIuZW50ZXIoKS5pbnNlcnQoXCJkaXZcIixcIjpmaXJzdC1jaGlsZFwiKS5jbGFzc2VkKFwicGxvdC1jb250YWluZXJcIiwhMCkuY2xhc3NlZChcInBsb3RseVwiLCEwKSxyLl9wYXBlcmRpdj1yLl9jb250YWluZXIuc2VsZWN0QWxsKFwiLnN2Zy1jb250YWluZXJcIikuZGF0YShbMF0pLHIuX3BhcGVyZGl2LmVudGVyKCkuYXBwZW5kKFwiZGl2XCIpLmNsYXNzZWQoXCJzdmctY29udGFpbmVyXCIsITApLnN0eWxlKFwicG9zaXRpb25cIixcInJlbGF0aXZlXCIpLHIuX2dsY29udGFpbmVyPXIuX3BhcGVyZGl2LnNlbGVjdEFsbChcIi5nbC1jb250YWluZXJcIikuZGF0YShbe31dKSxyLl9nbGNvbnRhaW5lci5lbnRlcigpLmFwcGVuZChcImRpdlwiKS5jbGFzc2VkKFwiZ2wtY29udGFpbmVyXCIsITApLHIuX3BhcGVyZGl2LnNlbGVjdEFsbChcIi5tYWluLXN2Z1wiKS5yZW1vdmUoKSxyLl9wYXBlcmRpdi5zZWxlY3QoXCIubW9kZWJhci1jb250YWluZXJcIikucmVtb3ZlKCksci5fcGFwZXI9ci5fcGFwZXJkaXYuaW5zZXJ0KFwic3ZnXCIsXCI6Zmlyc3QtY2hpbGRcIikuY2xhc3NlZChcIm1haW4tc3ZnXCIsITApLHIuX3RvcHBhcGVyPXIuX3BhcGVyZGl2LmFwcGVuZChcInN2Z1wiKS5jbGFzc2VkKFwibWFpbi1zdmdcIiwhMCksci5fbW9kZWJhcmRpdj1yLl9wYXBlcmRpdi5hcHBlbmQoXCJkaXZcIiksci5faG92ZXJwYXBlcj1yLl9wYXBlcmRpdi5hcHBlbmQoXCJzdmdcIikuY2xhc3NlZChcIm1haW4tc3ZnXCIsITApLCFyLl91aWQpe3ZhciBpPXt9O24uc2VsZWN0QWxsKFwiZGVmc1wiKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5pZCYmKGlbdGhpcy5pZC5zcGxpdChcIi1cIilbMV1dPTEpfSksci5fdWlkPW8ucmFuZHN0cihpKX1yLl9wYXBlcmRpdi5zZWxlY3RBbGwoXCIubWFpbi1zdmdcIikuYXR0cih4LnN2Z0F0dHJzKSxyLl9kZWZzPXIuX3BhcGVyLmFwcGVuZChcImRlZnNcIikuYXR0cihcImlkXCIsXCJkZWZzLVwiK3IuX3VpZCksci5fY2xpcHM9ci5fZGVmcy5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJjbGlwc1wiLCEwKSxyLl90b3BkZWZzPXIuX3RvcHBhcGVyLmFwcGVuZChcImRlZnNcIikuYXR0cihcImlkXCIsXCJ0b3BkZWZzLVwiK3IuX3VpZCksci5fdG9wY2xpcHM9ci5fdG9wZGVmcy5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJjbGlwc1wiLCEwKSxyLl9iZ0xheWVyPXIuX3BhcGVyLmFwcGVuZChcImdcIikuY2xhc3NlZChcImJnbGF5ZXJcIiwhMCksci5fZHJhZ2dlcnM9ci5fcGFwZXIuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiZHJhZ2xheWVyXCIsITApO3ZhciBhPXIuX3BhcGVyLmFwcGVuZChcImdcIikuY2xhc3NlZChcImxheWVyLWJlbG93XCIsITApO3IuX2ltYWdlTG93ZXJMYXllcj1hLmFwcGVuZChcImdcIikuY2xhc3NlZChcImltYWdlbGF5ZXJcIiwhMCksci5fc2hhcGVMb3dlckxheWVyPWEuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwic2hhcGVsYXllclwiLCEwKSxyLl9jYXJ0ZXNpYW5sYXllcj1yLl9wYXBlci5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJjYXJ0ZXNpYW5sYXllclwiLCEwKSxyLl9wb2xhcmxheWVyPXIuX3BhcGVyLmFwcGVuZChcImdcIikuY2xhc3NlZChcInBvbGFybGF5ZXJcIiwhMCksci5fdGVybmFyeWxheWVyPXIuX3BhcGVyLmFwcGVuZChcImdcIikuY2xhc3NlZChcInRlcm5hcnlsYXllclwiLCEwKSxyLl9nZW9sYXllcj1yLl9wYXBlci5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJnZW9sYXllclwiLCEwKSxyLl9waWVsYXllcj1yLl9wYXBlci5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJwaWVsYXllclwiLCEwKSxyLl9zdW5idXJzdGxheWVyPXIuX3BhcGVyLmFwcGVuZChcImdcIikuY2xhc3NlZChcInN1bmJ1cnN0bGF5ZXJcIiwhMCksci5fZ2xpbWFnZXM9ci5fcGFwZXIuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiZ2xpbWFnZXNcIiwhMCk7dmFyIHM9ci5fdG9wcGFwZXIuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwibGF5ZXItYWJvdmVcIiwhMCk7ci5faW1hZ2VVcHBlckxheWVyPXMuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiaW1hZ2VsYXllclwiLCEwKSxyLl9zaGFwZVVwcGVyTGF5ZXI9cy5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJzaGFwZWxheWVyXCIsITApLHIuX2luZm9sYXllcj1yLl90b3BwYXBlci5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJpbmZvbGF5ZXJcIiwhMCksci5fbWVudWxheWVyPXIuX3RvcHBhcGVyLmFwcGVuZChcImdcIikuY2xhc3NlZChcIm1lbnVsYXllclwiLCEwKSxyLl96b29tbGF5ZXI9ci5fdG9wcGFwZXIuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiem9vbWxheWVyXCIsITApLHIuX2hvdmVybGF5ZXI9ci5faG92ZXJwYXBlci5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJob3ZlcmxheWVyXCIsITApLHIuX21vZGViYXJkaXYuY2xhc3NlZChcIm1vZGViYXItY29udGFpbmVyXCIsITApLnN0eWxlKFwicG9zaXRpb25cIixcImFic29sdXRlXCIpLnN0eWxlKFwidG9wXCIsXCIwcHhcIikuc3R5bGUoXCJyaWdodFwiLFwiMHB4XCIpLHQuZW1pdChcInBsb3RseV9mcmFtZXdvcmtcIil9ci5yZWFjdD1mdW5jdGlvbih0LGUsbixpKXt2YXIgYSxsO3ZhciBjPSh0PW8uZ2V0R3JhcGhEaXYodCkpLl9mdWxsRGF0YSxwPXQuX2Z1bGxMYXlvdXQ7aWYoby5pc1Bsb3REaXYodCkmJmMmJnApe2lmKG8uaXNQbGFpbk9iamVjdChlKSl7dmFyIGQ9ZTtlPWQuZGF0YSxuPWQubGF5b3V0LGk9ZC5jb25maWcsYT1kLmZyYW1lc312YXIgZz0hMTtpZihpKXt2YXIgdj1vLmV4dGVuZERlZXAoe30sdC5fY29udGV4dCk7dC5fY29udGV4dD12b2lkIDAsTyh0LGkpLGc9ZnVuY3Rpb24gdChlLHIpe3ZhciBuO2ZvcihuIGluIGUpaWYoXCJfXCIhPT1uLmNoYXJBdCgwKSl7dmFyIGk9ZVtuXSxhPXJbbl07aWYoaSE9PWEpaWYoby5pc1BsYWluT2JqZWN0KGkpJiZvLmlzUGxhaW5PYmplY3QoYSkpe2lmKHQoaSxhKSlyZXR1cm4hMH1lbHNle2lmKCFBcnJheS5pc0FycmF5KGkpfHwhQXJyYXkuaXNBcnJheShhKSlyZXR1cm4hMDtpZihpLmxlbmd0aCE9PWEubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgcz0wO3M8aS5sZW5ndGg7cysrKWlmKGlbc10hPT1hW3NdKXtpZighby5pc1BsYWluT2JqZWN0KGlbc10pfHwhby5pc1BsYWluT2JqZWN0KGFbc10pKXJldHVybiEwO2lmKHQoaVtzXSxhW3NdKSlyZXR1cm4hMH19fX0odix0Ll9jb250ZXh0KX10LmRhdGE9ZXx8W10sQS5jbGVhbkRhdGEodC5kYXRhKSx0LmxheW91dD1ufHx7fSxBLmNsZWFuTGF5b3V0KHQubGF5b3V0KSxmdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLGwsYyx1LGgsZixwLGQ9bi5fcHJlR1VJLGc9W10sdj17fTtmb3IoaSBpbiBkKXtpZih1PXJ0KGksdHQpKXtpZihhPXUuYXR0cnx8dS5oZWFkK1wiLnVpcmV2aXNpb25cIiwoYz0obD1zKG4sYSkuZ2V0KCkpJiZudChhLGUpKSYmYz09PWwmJihudWxsPT09KGg9ZFtpXSkmJihoPXZvaWQgMCksb3QocD0oZj1zKGUsaSkpLmdldCgpLGgpKSl7dm9pZCAwPT09cCYmXCJhdXRvcmFuZ2VcIj09PWkuc3Vic3RyKGkubGVuZ3RoLTkpJiZnLnB1c2goaS5zdWJzdHIoMCxpLmxlbmd0aC0xMCkpLGYuc2V0KE4ocyhuLGkpLmdldCgpKSk7Y29udGludWV9fWVsc2Ugby53YXJuKFwidW5yZWNvZ25pemVkIEdVSSBlZGl0OiBcIitpKTtkZWxldGUgZFtpXSxcInJhbmdlW1wiPT09aS5zdWJzdHIoaS5sZW5ndGgtOCw2KSYmKHZbaS5zdWJzdHIoMCxpLmxlbmd0aC05KV09MSl9Zm9yKHZhciBtPTA7bTxnLmxlbmd0aDttKyspe3ZhciB5PWdbbV07aWYodlt5XSl7dmFyIHg9cyhlLHkpLmdldCgpO3gmJmRlbGV0ZSB4LmF1dG9yYW5nZX19dmFyIGI9bi5fdHJhY2VQcmVHVUk7Zm9yKHZhciBfIGluIGIpe3ZhciB3LGs9YltfXSxBPW51bGw7Zm9yKGkgaW4gayl7aWYoIUEpe3ZhciBUPWl0KF8scik7aWYoVDwwKXtkZWxldGUgYltfXTticmVha312YXIgTT1hdChfLHQsKHc9cltUXS5fZnVsbElucHV0KS5pbmRleCk7aWYoTTwwKXtkZWxldGUgYltfXTticmVha31BPXRbTV19aWYodT1ydChpLGV0KSl7aWYodS5hdHRyP2M9KGw9cyhuLHUuYXR0cikuZ2V0KCkpJiZudCh1LmF0dHIsZSk6KGw9dy51aXJldmlzaW9uLHZvaWQgMD09PShjPUEudWlyZXZpc2lvbikmJihjPWUudWlyZXZpc2lvbikpLGMmJmM9PT1sJiYobnVsbD09PShoPWtbaV0pJiYoaD12b2lkIDApLG90KHA9KGY9cyhBLGkpKS5nZXQoKSxoKSkpe2Yuc2V0KE4ocyh3LGkpLmdldCgpKSk7Y29udGludWV9fWVsc2Ugby53YXJuKFwidW5yZWNvZ25pemVkIEdVSSBlZGl0OiBcIitpK1wiIGluIHRyYWNlIHVpZCBcIitfKTtkZWxldGUga1tpXX19fSh0LmRhdGEsdC5sYXlvdXQsYyxwKSxmLnN1cHBseURlZmF1bHRzKHQse3NraXBVcGRhdGVDYWxjOiEwfSk7dmFyIG09dC5fZnVsbERhdGEseT10Ll9mdWxsTGF5b3V0LHg9dm9pZCAwPT09eS5kYXRhcmV2aXNpb24sYj15LnRyYW5zaXRpb24sXz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPU0ubGF5b3V0RmxhZ3MoKTthLmFycmF5cz17fSxhLnJhbmdlc0FsdGVyZWQ9e30sYS5uQ2hhbmdlcz0wLGEubkNoYW5nZXNBbmltPTAsc3QoZSxyLFtdLHtnZXRWYWxPYmplY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIGguZ2V0TGF5b3V0VmFsT2JqZWN0KHIsdCl9LGZsYWdzOmEsaW1tdXRhYmxlOm4sdHJhbnNpdGlvbjppLGdkOnR9KSwoYS5wbG90fHxhLmNhbGMpJiYoYS5sYXlvdXRSZXBsb3Q9ITApO2kmJmEubkNoYW5nZXMmJmEubkNoYW5nZXNBbmltJiYoYS5hbmltPWEubkNoYW5nZXM9PT1hLm5DaGFuZ2VzQW5pbT9cImFsbFwiOlwic29tZVwiKTtyZXR1cm4gYX0odCxwLHkseCxiKSx3PV8ubmV3RGF0YVJldmlzaW9uLGs9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPWUubGVuZ3RoPT09ci5sZW5ndGg7aWYoIWkmJiFvKXJldHVybntmdWxsUmVwbG90OiEwLGNhbGM6ITB9O3ZhciBzLGwsYz1NLnRyYWNlRmxhZ3MoKTtjLmFycmF5cz17fSxjLm5DaGFuZ2VzPTAsYy5uQ2hhbmdlc0FuaW09MDt2YXIgdT17Z2V0VmFsT2JqZWN0OmZ1bmN0aW9uKHQpe3JldHVybiBoLmdldFRyYWNlVmFsT2JqZWN0KGwsdCl9LGZsYWdzOmMsaW1tdXRhYmxlOm4sdHJhbnNpdGlvbjppLG5ld0RhdGFSZXZpc2lvbjphLGdkOnR9LHA9e307Zm9yKHM9MDtzPGUubGVuZ3RoO3MrKylpZihyW3NdKXtpZihsPXJbc10uX2Z1bGxJbnB1dCxmLmhhc01ha2VzRGF0YVRyYW5zZm9ybShsKSYmKGw9cltzXSkscFtsLnVpZF0pY29udGludWU7cFtsLnVpZF09MSxzdChlW3NdLl9mdWxsSW5wdXQsbCxbXSx1KX0oYy5jYWxjfHxjLnBsb3QpJiYoYy5mdWxsUmVwbG90PSEwKTtpJiZjLm5DaGFuZ2VzJiZjLm5DaGFuZ2VzQW5pbSYmKGMuYW5pbT1jLm5DaGFuZ2VzPT09Yy5uQ2hhbmdlc0FuaW0mJm8/XCJhbGxcIjpcInNvbWVcIik7cmV0dXJuIGN9KHQsYyxtLHgsYix3KTtKKHQpJiYoXy5sYXlvdXRSZXBsb3Q9ITApLGsuY2FsY3x8Xy5jYWxjP3QuY2FsY2RhdGE9dm9pZCAwOmYuc3VwcGx5RGVmYXVsdHNVcGRhdGVDYWxjKHQuY2FsY2RhdGEsbSk7dmFyIFM9W107aWYoYSYmKHQuX3RyYW5zaXRpb25EYXRhPXt9LGYuY3JlYXRlVHJhbnNpdGlvbkRhdGEodCksUy5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIHIuYWRkRnJhbWVzKHQsYSl9KSkseS50cmFuc2l0aW9uJiYhZyYmKGsuYW5pbXx8Xy5hbmltKSlmLmRvQ2FsY2RhdGEodCksVC5kb0F1dG9SYW5nZUFuZENvbnN0cmFpbnRzKHQpLFMucHVzaChmdW5jdGlvbigpe3JldHVybiBmLnRyYW5zaXRpb25Gcm9tUmVhY3QodCxrLF8scCl9KTtlbHNlIGlmKGsuZnVsbFJlcGxvdHx8Xy5sYXlvdXRSZXBsb3R8fGcpdC5fZnVsbExheW91dC5fc2tpcERlZmF1bHRzPSEwLFMucHVzaChyLnBsb3QpO2Vsc2V7Zm9yKHZhciBFIGluIF8uYXJyYXlzKXt2YXIgTD1fLmFycmF5c1tFXTtpZihMLmxlbmd0aCl7dmFyIHo9dS5nZXRDb21wb25lbnRNZXRob2QoRSxcImRyYXdPbmVcIik7aWYoeiE9PW8ubm9vcClmb3IodmFyIEk9MDtJPEwubGVuZ3RoO0krKyl6KHQsTFtJXSk7ZWxzZXt2YXIgRD11LmdldENvbXBvbmVudE1ldGhvZChFLFwiZHJhd1wiKTtpZihEPT09by5ub29wKXRocm93IG5ldyBFcnJvcihcImNhbm5vdCBkcmF3IGNvbXBvbmVudHM6IFwiK0UpO0QodCl9fX1TLnB1c2goZi5wcmV2aW91c1Byb21pc2VzKSxrLnN0eWxlJiZTLnB1c2goVC5kb1RyYWNlU3R5bGUpLGsuY29sb3JiYXJzJiZTLnB1c2goVC5kb0NvbG9yQmFycyksXy5sZWdlbmQmJlMucHVzaChULmRvTGVnZW5kKSxfLmxheW91dHN0eWxlJiZTLnB1c2goVC5sYXlvdXRTdHlsZXMpLF8uYXhyYW5nZSYmWShTKSxfLnRpY2tzJiZTLnB1c2goVC5kb1RpY2tzUmVsYXlvdXQpLF8ubW9kZWJhciYmUy5wdXNoKFQuZG9Nb2RlQmFyKSxfLmNhbWVyYSYmUy5wdXNoKFQuZG9DYW1lcmEpLFMucHVzaChDKX1TLnB1c2goZi5yZWhvdmVyLGYucmVkcmFnKSwobD1vLnN5bmNPckFzeW5jKFMsdCkpJiZsLnRoZW58fChsPVByb21pc2UucmVzb2x2ZSh0KSl9ZWxzZSBsPXIubmV3UGxvdCh0LGUsbixpKTtyZXR1cm4gbC50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdChcInBsb3RseV9yZWFjdFwiLHtkYXRhOmUsbGF5b3V0Om59KSx0fSl9LHIuYW5pbWF0ZT1mdW5jdGlvbih0LGUscil7aWYodD1vLmdldEdyYXBoRGl2KHQpLCFvLmlzUGxvdERpdih0KSl0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6IFwiK3QrXCIuIEl0J3MgbGlrZWx5IHRoYXQgeW91J3ZlIGZhaWxlZCB0byBjcmVhdGUgYSBwbG90IGJlZm9yZSBhbmltYXRpbmcgaXQuIEZvciBtb3JlIGRldGFpbHMsIHNlZSBodHRwczovL3Bsb3QubHkvamF2YXNjcmlwdC9hbmltYXRpb25zL1wiKTt2YXIgbj10Ll90cmFuc2l0aW9uRGF0YTtuLl9mcmFtZVF1ZXVlfHwobi5fZnJhbWVRdWV1ZT1bXSk7dmFyIGk9KHI9Zi5zdXBwbHlBbmltYXRpb25EZWZhdWx0cyhyKSkudHJhbnNpdGlvbixhPXIuZnJhbWU7ZnVuY3Rpb24gcyh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShpKT90Pj1pLmxlbmd0aD9pWzBdOmlbdF06aX1mdW5jdGlvbiBsKHQpe3JldHVybiBBcnJheS5pc0FycmF5KGEpP3Q+PWEubGVuZ3RoP2FbMF06YVt0XTphfWZ1bmN0aW9uIGModCxlKXt2YXIgcj0wO3JldHVybiBmdW5jdGlvbigpe2lmKHQmJisrcj09PWUpcmV0dXJuIHQoKX19cmV0dXJuIHZvaWQgMD09PW4uX2ZyYW1lV2FpdGluZ0NudCYmKG4uX2ZyYW1lV2FpdGluZ0NudD0wKSxuZXcgUHJvbWlzZShmdW5jdGlvbihhLHUpe2Z1bmN0aW9uIGgoKXtuLl9jdXJyZW50RnJhbWUmJm4uX2N1cnJlbnRGcmFtZS5vbkNvbXBsZXRlJiZuLl9jdXJyZW50RnJhbWUub25Db21wbGV0ZSgpO3ZhciBlPW4uX2N1cnJlbnRGcmFtZT1uLl9mcmFtZVF1ZXVlLnNoaWZ0KCk7aWYoZSl7dmFyIHI9ZS5uYW1lP2UubmFtZS50b1N0cmluZygpOm51bGw7dC5fZnVsbExheW91dC5fY3VycmVudEZyYW1lPXIsbi5fbGFzdEZyYW1lQXQ9RGF0ZS5ub3coKSxuLl90aW1lVG9OZXh0PWUuZnJhbWVPcHRzLmR1cmF0aW9uLGYudHJhbnNpdGlvbih0LGUuZnJhbWUuZGF0YSxlLmZyYW1lLmxheW91dCxBLmNvZXJjZVRyYWNlSW5kaWNlcyh0LGUuZnJhbWUudHJhY2VzKSxlLmZyYW1lT3B0cyxlLnRyYW5zaXRpb25PcHRzKS50aGVuKGZ1bmN0aW9uKCl7ZS5vbkNvbXBsZXRlJiZlLm9uQ29tcGxldGUoKX0pLHQuZW1pdChcInBsb3RseV9hbmltYXRpbmdmcmFtZVwiLHtuYW1lOnIsZnJhbWU6ZS5mcmFtZSxhbmltYXRpb246e2ZyYW1lOmUuZnJhbWVPcHRzLHRyYW5zaXRpb246ZS50cmFuc2l0aW9uT3B0c319KX1lbHNlIHQuZW1pdChcInBsb3RseV9hbmltYXRlZFwiKSx3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUobi5fYW5pbWF0aW9uUmFmKSxuLl9hbmltYXRpb25SYWY9bnVsbH1mdW5jdGlvbiBwKCl7dC5lbWl0KFwicGxvdGx5X2FuaW1hdGluZ1wiKSxuLl9sYXN0RnJhbWVBdD0tMS8wLG4uX3RpbWVUb05leHQ9MCxuLl9ydW5uaW5nVHJhbnNpdGlvbnM9MCxuLl9jdXJyZW50RnJhbWU9bnVsbDt2YXIgZT1mdW5jdGlvbigpe24uX2FuaW1hdGlvblJhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpLERhdGUubm93KCktbi5fbGFzdEZyYW1lQXQ+bi5fdGltZVRvTmV4dCYmaCgpfTtlKCl9dmFyIGQsZyx2PTA7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShpKT92Pj1pLmxlbmd0aD90LnRyYW5zaXRpb25PcHRzPWlbdl06dC50cmFuc2l0aW9uT3B0cz1pWzBdOnQudHJhbnNpdGlvbk9wdHM9aSx2KyssdH12YXIgeT1bXSx4PW51bGw9PWUsYj1BcnJheS5pc0FycmF5KGUpO2lmKCF4JiYhYiYmby5pc1BsYWluT2JqZWN0KGUpKXkucHVzaCh7dHlwZTpcIm9iamVjdFwiLGRhdGE6bShvLmV4dGVuZEZsYXQoe30sZSkpfSk7ZWxzZSBpZih4fHwtMSE9PVtcInN0cmluZ1wiLFwibnVtYmVyXCJdLmluZGV4T2YodHlwZW9mIGUpKWZvcihkPTA7ZDxuLl9mcmFtZXMubGVuZ3RoO2QrKykoZz1uLl9mcmFtZXNbZF0pJiYoeHx8U3RyaW5nKGcuZ3JvdXApPT09U3RyaW5nKGUpKSYmeS5wdXNoKHt0eXBlOlwiYnluYW1lXCIsbmFtZTpTdHJpbmcoZy5uYW1lKSxkYXRhOm0oe25hbWU6Zy5uYW1lfSl9KTtlbHNlIGlmKGIpZm9yKGQ9MDtkPGUubGVuZ3RoO2QrKyl7dmFyIF89ZVtkXTstMSE9PVtcIm51bWJlclwiLFwic3RyaW5nXCJdLmluZGV4T2YodHlwZW9mIF8pPyhfPVN0cmluZyhfKSx5LnB1c2goe3R5cGU6XCJieW5hbWVcIixuYW1lOl8sZGF0YTptKHtuYW1lOl99KX0pKTpvLmlzUGxhaW5PYmplY3QoXykmJnkucHVzaCh7dHlwZTpcIm9iamVjdFwiLGRhdGE6bShvLmV4dGVuZEZsYXQoe30sXykpfSl9Zm9yKGQ9MDtkPHkubGVuZ3RoO2QrKylpZihcImJ5bmFtZVwiPT09KGc9eVtkXSkudHlwZSYmIW4uX2ZyYW1lSGFzaFtnLmRhdGEubmFtZV0pcmV0dXJuIG8ud2FybignYW5pbWF0ZSBmYWlsdXJlOiBmcmFtZSBub3QgZm91bmQ6IFwiJytnLmRhdGEubmFtZSsnXCInKSx2b2lkIHUoKTstMSE9PVtcIm5leHRcIixcImltbWVkaWF0ZVwiXS5pbmRleE9mKHIubW9kZSkmJmZ1bmN0aW9uKCl7aWYoMCE9PW4uX2ZyYW1lUXVldWUubGVuZ3RoKXtmb3IoO24uX2ZyYW1lUXVldWUubGVuZ3RoOyl7dmFyIGU9bi5fZnJhbWVRdWV1ZS5wb3AoKTtlLm9uSW50ZXJydXB0JiZlLm9uSW50ZXJydXB0KCl9dC5lbWl0KFwicGxvdGx5X2FuaW1hdGlvbmludGVycnVwdGVkXCIsW10pfX0oKSxcInJldmVyc2VcIj09PXIuZGlyZWN0aW9uJiZ5LnJldmVyc2UoKTt2YXIgdz10Ll9mdWxsTGF5b3V0Ll9jdXJyZW50RnJhbWU7aWYodyYmci5mcm9tY3VycmVudCl7dmFyIGs9LTE7Zm9yKGQ9MDtkPHkubGVuZ3RoO2QrKylpZihcImJ5bmFtZVwiPT09KGc9eVtkXSkudHlwZSYmZy5uYW1lPT09dyl7az1kO2JyZWFrfWlmKGs+MCYmazx5Lmxlbmd0aC0xKXt2YXIgVD1bXTtmb3IoZD0wO2Q8eS5sZW5ndGg7ZCsrKWc9eVtkXSwoXCJieW5hbWVcIiE9PXlbZF0udHlwZXx8ZD5rKSYmVC5wdXNoKGcpO3k9VH19eS5sZW5ndGg+MD9mdW5jdGlvbihlKXtpZigwIT09ZS5sZW5ndGgpe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbztvPVwiYnluYW1lXCI9PT1lW2ldLnR5cGU/Zi5jb21wdXRlRnJhbWUodCxlW2ldLm5hbWUpOmVbaV0uZGF0YTt2YXIgaD1sKGkpLGQ9cyhpKTtkLmR1cmF0aW9uPU1hdGgubWluKGQuZHVyYXRpb24saC5kdXJhdGlvbik7dmFyIGc9e2ZyYW1lOm8sbmFtZTplW2ldLm5hbWUsZnJhbWVPcHRzOmgsdHJhbnNpdGlvbk9wdHM6ZH07aT09PWUubGVuZ3RoLTEmJihnLm9uQ29tcGxldGU9YyhhLDIpLGcub25JbnRlcnJ1cHQ9dSksbi5fZnJhbWVRdWV1ZS5wdXNoKGcpfVwiaW1tZWRpYXRlXCI9PT1yLm1vZGUmJihuLl9sYXN0RnJhbWVBdD0tMS8wKSxuLl9hbmltYXRpb25SYWZ8fHAoKX19KHkpOih0LmVtaXQoXCJwbG90bHlfYW5pbWF0ZWRcIiksYSgpKX0pfSxyLmFkZEZyYW1lcz1mdW5jdGlvbih0LGUscil7aWYodD1vLmdldEdyYXBoRGl2KHQpLG51bGw9PWUpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO2lmKCFvLmlzUGxvdERpdih0KSl0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6IFwiK3QrXCIuIEl0J3MgbGlrZWx5IHRoYXQgeW91J3ZlIGZhaWxlZCB0byBjcmVhdGUgYSBwbG90IGJlZm9yZSBhZGRpbmcgZnJhbWVzLiBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9wbG90Lmx5L2phdmFzY3JpcHQvYW5pbWF0aW9ucy9cIik7dmFyIG4saSxhLHMsbD10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLHU9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaDtpZighQXJyYXkuaXNBcnJheShlKSl0aHJvdyBuZXcgRXJyb3IoXCJhZGRGcmFtZXMgZmFpbHVyZTogZnJhbWVMaXN0IG11c3QgYmUgYW4gQXJyYXkgb2YgZnJhbWUgZGVmaW5pdGlvbnNcIitlKTt2YXIgaD1sLmxlbmd0aCsyKmUubGVuZ3RoLHA9W10sZD17fTtmb3Iobj1lLmxlbmd0aC0xO24+PTA7bi0tKWlmKG8uaXNQbGFpbk9iamVjdChlW25dKSl7dmFyIGc9ZVtuXS5uYW1lLHY9KHVbZ118fGRbZ118fHt9KS5uYW1lLG09ZVtuXS5uYW1lLHk9dVt2XXx8ZFt2XTt2JiZtJiZcIm51bWJlclwiPT10eXBlb2YgbSYmeSYmRTw1JiYoRSsrLG8ud2FybignYWRkRnJhbWVzOiBvdmVyd3JpdGluZyBmcmFtZSBcIicrKHVbdl18fGRbdl0pLm5hbWUrJ1wiIHdpdGggYSBmcmFtZSB3aG9zZSBuYW1lIG9mIHR5cGUgXCJudW1iZXJcIiBhbHNvIGVxdWF0ZXMgdG8gXCInK3YrJ1wiLiBUaGlzIGlzIHZhbGlkIGJ1dCBtYXkgcG90ZW50aWFsbHkgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIHNpbmNlIGFsbCBwbG90bHkuanMgZnJhbWUgbmFtZXMgYXJlIHN0b3JlZCBpbnRlcm5hbGx5IGFzIHN0cmluZ3MuJyksNT09PUUmJm8ud2FybihcImFkZEZyYW1lczogVGhpcyBBUEkgY2FsbCBoYXMgeWllbGRlZCB0b28gbWFueSBvZiB0aGVzZSB3YXJuaW5ncy4gRm9yIHRoZSByZXN0IG9mIHRoaXMgY2FsbCwgZnVydGhlciB3YXJuaW5ncyBhYm91dCBudW1lcmljIGZyYW1lIG5hbWVzIHdpbGwgYmUgc3VwcHJlc3NlZC5cIikpLGRbZ109e25hbWU6Z30scC5wdXNoKHtmcmFtZTpmLnN1cHBseUZyYW1lRGVmYXVsdHMoZVtuXSksaW5kZXg6ciYmdm9pZCAwIT09cltuXSYmbnVsbCE9PXJbbl0/cltuXTpoK259KX1wLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbmRleD5lLmluZGV4Py0xOnQuaW5kZXg8ZS5pbmRleD8xOjB9KTt2YXIgeD1bXSxiPVtdLF89bC5sZW5ndGg7Zm9yKG49cC5sZW5ndGgtMTtuPj0wO24tLSl7aWYoXCJudW1iZXJcIj09dHlwZW9mKGk9cFtuXS5mcmFtZSkubmFtZSYmby53YXJuKFwiV2FybmluZzogYWRkRnJhbWVzIGFjY2VwdHMgZnJhbWVzIHdpdGggbnVtZXJpYyBuYW1lcywgYnV0IHRoZSBudW1iZXJzIGFyZWltcGxpY2l0bHkgY2FzdCB0byBzdHJpbmdzXCIpLCFpLm5hbWUpZm9yKDt1W2kubmFtZT1cImZyYW1lIFwiK3QuX3RyYW5zaXRpb25EYXRhLl9jb3VudGVyKytdOyk7aWYodVtpLm5hbWVdKXtmb3IoYT0wO2E8bC5sZW5ndGgmJihsW2FdfHx7fSkubmFtZSE9PWkubmFtZTthKyspO3gucHVzaCh7dHlwZTpcInJlcGxhY2VcIixpbmRleDphLHZhbHVlOml9KSxiLnVuc2hpZnQoe3R5cGU6XCJyZXBsYWNlXCIsaW5kZXg6YSx2YWx1ZTpsW2FdfSl9ZWxzZSBzPU1hdGgubWF4KDAsTWF0aC5taW4ocFtuXS5pbmRleCxfKSkseC5wdXNoKHt0eXBlOlwiaW5zZXJ0XCIsaW5kZXg6cyx2YWx1ZTppfSksYi51bnNoaWZ0KHt0eXBlOlwiZGVsZXRlXCIsaW5kZXg6c30pLF8rK312YXIgdz1mLm1vZGlmeUZyYW1lcyxrPWYubW9kaWZ5RnJhbWVzLEE9W3QsYl0sVD1bdCx4XTtyZXR1cm4gYyYmYy5hZGQodCx3LEEsayxUKSxmLm1vZGlmeUZyYW1lcyh0LHgpfSxyLmRlbGV0ZUZyYW1lcz1mdW5jdGlvbih0LGUpe2lmKHQ9by5nZXRHcmFwaERpdih0KSwhby5pc1Bsb3REaXYodCkpdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBlbGVtZW50IGlzIG5vdCBhIFBsb3RseSBwbG90OiBcIit0KTt2YXIgcixuLGk9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyxhPVtdLHM9W107aWYoIWUpZm9yKGU9W10scj0wO3I8aS5sZW5ndGg7cisrKWUucHVzaChyKTtmb3IoKGU9ZS5zbGljZSgwKSkuc29ydCgpLHI9ZS5sZW5ndGgtMTtyPj0wO3ItLSluPWVbcl0sYS5wdXNoKHt0eXBlOlwiZGVsZXRlXCIsaW5kZXg6bn0pLHMudW5zaGlmdCh7dHlwZTpcImluc2VydFwiLGluZGV4Om4sdmFsdWU6aVtuXX0pO3ZhciBsPWYubW9kaWZ5RnJhbWVzLHU9Zi5tb2RpZnlGcmFtZXMsaD1bdCxzXSxwPVt0LGFdO3JldHVybiBjJiZjLmFkZCh0LGwsaCx1LHApLGYubW9kaWZ5RnJhbWVzKHQsYSl9LHIucHVyZ2U9ZnVuY3Rpb24odCl7dmFyIGU9KHQ9by5nZXRHcmFwaERpdih0KSkuX2Z1bGxMYXlvdXR8fHt9LHI9dC5fZnVsbERhdGF8fFtdO3JldHVybiBmLmNsZWFuUGxvdChbXSx7fSxyLGUpLGYucHVyZ2UodCksbC5wdXJnZSh0KSxlLl9jb250YWluZXImJmUuX2NvbnRhaW5lci5yZW1vdmUoKSxkZWxldGUgdC5fY29udGV4dCx0fX0se1wiLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uL2NvbXBvbmVudHMvY29sb3JiYXIvY29ubmVjdFwiOjU4MCxcIi4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzXCI6Njc5LFwiLi4vbGliXCI6NzAxLFwiLi4vbGliL2V2ZW50c1wiOjY5MCxcIi4uL2xpYi9xdWV1ZVwiOjcxNixcIi4uL2xpYi9zdmdfdGV4dF91dGlsc1wiOjcyNSxcIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50c1wiOjc1NSxcIi4uL3Bsb3RzL2NhcnRlc2lhbi9ncmFwaF9pbnRlcmFjdFwiOjc1OCxcIi4uL3Bsb3RzL2NhcnRlc2lhbi9zZWxlY3RcIjo3NjYsXCIuLi9wbG90cy9wbG90c1wiOjgxMCxcIi4uL3Bsb3RzL3BvbGFyL2xlZ2FjeVwiOjgxOCxcIi4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9lZGl0X3R5cGVzXCI6NzMyLFwiLi9oZWxwZXJzXCI6NzMzLFwiLi9tYW5hZ2VfYXJyYXlzXCI6NzM1LFwiLi9wbG90X2NvbmZpZ1wiOjczNyxcIi4vcGxvdF9zY2hlbWFcIjo3MzgsXCIuL3N1YnJvdXRpbmVzXCI6NzQwLGQzOjE1NSxcImZhc3QtaXNudW1lcmljXCI6MjIyLFwiaGFzLWhvdmVyXCI6NDAzfV0sNzM3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e3N0YXRpY1Bsb3Q6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0scGxvdGx5U2VydmVyVVJMOnt2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcImh0dHBzOi8vcGxvdC5seVwifSxlZGl0YWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxlZGl0czp7YW5ub3RhdGlvblBvc2l0aW9uOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LGFubm90YXRpb25UYWlsOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LGFubm90YXRpb25UZXh0Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LGF4aXNUaXRsZVRleHQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sY29sb3JiYXJQb3NpdGlvbjp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxjb2xvcmJhclRpdGxlVGV4dDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxsZWdlbmRQb3NpdGlvbjp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxsZWdlbmRUZXh0Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LHNoYXBlUG9zaXRpb246e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sdGl0bGVUZXh0Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9fSxhdXRvc2l6YWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxyZXNwb25zaXZlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LGZpbGxGcmFtZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxmcmFtZU1hcmdpbnM6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjAsbWluOjAsbWF4Oi41fSxzY3JvbGxab29tOnt2YWxUeXBlOlwiZmxhZ2xpc3RcIixmbGFnczpbXCJjYXJ0ZXNpYW5cIixcImdsM2RcIixcImdlb1wiLFwibWFwYm94XCJdLGV4dHJhczpbITAsITFdLGRmbHQ6XCJnbDNkK2dlbyttYXBib3hcIn0sZG91YmxlQ2xpY2s6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOlshMSxcInJlc2V0XCIsXCJhdXRvc2l6ZVwiLFwicmVzZXQrYXV0b3NpemVcIl0sZGZsdDpcInJlc2V0K2F1dG9zaXplXCJ9LHNob3dBeGlzRHJhZ0hhbmRsZXM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMH0sc2hvd0F4aXNSYW5nZUVudHJ5Qm94ZXM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMH0sc2hvd1RpcHM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMH0sc2hvd0xpbms6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sbGlua1RleHQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiRWRpdCBjaGFydFwiLG5vQmxhbms6ITB9LHNlbmREYXRhOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITB9LHNob3dTb3VyY2VzOnt2YWxUeXBlOlwiYW55XCIsZGZsdDohMX0sZGlzcGxheU1vZGVCYXI6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImhvdmVyXCIsITAsITFdLGRmbHQ6XCJob3ZlclwifSxzaG93U2VuZFRvQ2xvdWQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sbW9kZUJhckJ1dHRvbnNUb1JlbW92ZTp7dmFsVHlwZTpcImFueVwiLGRmbHQ6W119LG1vZGVCYXJCdXR0b25zVG9BZGQ6e3ZhbFR5cGU6XCJhbnlcIixkZmx0OltdfSxtb2RlQmFyQnV0dG9uczp7dmFsVHlwZTpcImFueVwiLGRmbHQ6ITF9LHRvSW1hZ2VCdXR0b25PcHRpb25zOnt2YWxUeXBlOlwiYW55XCIsZGZsdDp7fX0sZGlzcGxheWxvZ286e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMH0sd2F0ZXJtYXJrOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LHBsb3RHbFBpeGVsUmF0aW86e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjIsbWluOjEsbWF4OjR9LHNldEJhY2tncm91bmQ6e3ZhbFR5cGU6XCJhbnlcIixkZmx0OlwidHJhbnNwYXJlbnRcIn0sdG9wb2pzb25VUkw6e3ZhbFR5cGU6XCJzdHJpbmdcIixub0JsYW5rOiEwLGRmbHQ6XCJodHRwczovL2Nkbi5wbG90Lmx5L1wifSxtYXBib3hBY2Nlc3NUb2tlbjp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6bnVsbH0sbG9nZ2luZzp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OjF9LHF1ZXVlTGVuZ3RoOnt2YWxUeXBlOlwiaW50ZWdlclwiLG1pbjowLGRmbHQ6MH0sZ2xvYmFsVHJhbnNmb3Jtczp7dmFsVHlwZTpcImFueVwiLGRmbHQ6W119LGxvY2FsZTp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJlbi1VU1wifSxsb2NhbGVzOnt2YWxUeXBlOlwiYW55XCIsZGZsdDp7fX19LGk9e307IWZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIG4gaW4gZSl7dmFyIGk9ZVtuXTtpLnZhbFR5cGU/cltuXT1pLmRmbHQ6KHJbbl18fChyW25dPXt9KSx0KGkscltuXSkpfX0obixpKSxlLmV4cG9ydHM9e2NvbmZpZ0F0dHJpYnV0ZXM6bixkZmx0Q29uZmlnOml9fSx7fV0sNzM4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uL2xpYlwiKSxhPXQoXCIuLi9wbG90cy9hdHRyaWJ1dGVzXCIpLG89dChcIi4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uL3Bsb3RzL2ZyYW1lX2F0dHJpYnV0ZXNcIiksbD10KFwiLi4vcGxvdHMvYW5pbWF0aW9uX2F0dHJpYnV0ZXNcIiksYz10KFwiLi9wbG90X2NvbmZpZ1wiKS5jb25maWdBdHRyaWJ1dGVzLHU9dChcIi4uL3Bsb3RzL3BvbGFyL2xlZ2FjeS9hcmVhX2F0dHJpYnV0ZXNcIiksaD10KFwiLi4vcGxvdHMvcG9sYXIvbGVnYWN5L2F4aXNfYXR0cmlidXRlc1wiKSxmPXQoXCIuL2VkaXRfdHlwZXNcIikscD1pLmV4dGVuZEZsYXQsZD1pLmV4dGVuZERlZXBBbGwsZz1pLmlzUGxhaW5PYmplY3Qsdj1cIl9pc1N1YnBsb3RPYmpcIixtPVwiX2lzTGlua2VkVG9BcnJheVwiLHk9W3YsbSxcIl9hcnJheUF0dHJSZWdleHBzXCIsXCJfZGVwcmVjYXRlZFwiXTtmdW5jdGlvbiB4KHQsZSxyKXtpZighdClyZXR1cm4hMTtpZih0Ll9pc0xpbmtlZFRvQXJyYXkpaWYoYihlW3JdKSlyKys7ZWxzZSBpZihyPGUubGVuZ3RoKXJldHVybiExO2Zvcig7cjxlLmxlbmd0aDtyKyspe3ZhciBuPXRbZVtyXV07aWYoIWcobikpYnJlYWs7aWYodD1uLHI9PT1lLmxlbmd0aC0xKWJyZWFrO2lmKHQuX2lzTGlua2VkVG9BcnJheSl7aWYoIWIoZVsrK3JdKSlyZXR1cm4hMX1lbHNlIGlmKFwiaW5mb19hcnJheVwiPT09dC52YWxUeXBlKXt2YXIgaT1lWysrcl07aWYoIWIoaSkpcmV0dXJuITE7dmFyIGE9dC5pdGVtcztpZihBcnJheS5pc0FycmF5KGEpKXtpZihpPj1hLmxlbmd0aClyZXR1cm4hMTtpZigyPT09dC5kaW1lbnNpb25zKXtpZihyKyssZS5sZW5ndGg9PT1yKXJldHVybiB0O3ZhciBvPWVbcl07aWYoIWIobykpcmV0dXJuITE7dD1hW2ldW29dfWVsc2UgdD1hW2ldfWVsc2UgdD1hfX1yZXR1cm4gdH1mdW5jdGlvbiBiKHQpe3JldHVybiB0PT09TWF0aC5yb3VuZCh0KSYmdD49MH1mdW5jdGlvbiBfKHQpe3JldHVybiBmdW5jdGlvbih0KXtyLmNyYXdsKHQsZnVuY3Rpb24odCxlLG4pe3IuaXNWYWxPYmplY3QodCk/XCJkYXRhX2FycmF5XCI9PT10LnZhbFR5cGU/KHQucm9sZT1cImRhdGFcIixuW2UrXCJzcmNcIl09e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcIm5vbmVcIn0pOiEwPT09dC5hcnJheU9rJiYobltlK1wic3JjXCJdPXt2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJub25lXCJ9KTpnKHQpJiYodC5yb2xlPVwib2JqZWN0XCIpfSl9KHQpLGZ1bmN0aW9uKHQpe3IuY3Jhd2wodCxmdW5jdGlvbih0LGUscil7aWYoIXQpcmV0dXJuO3ZhciBuPXRbbV07aWYoIW4pcmV0dXJuO2RlbGV0ZSB0W21dLHJbZV09e2l0ZW1zOnt9fSxyW2VdLml0ZW1zW25dPXQscltlXS5yb2xlPVwib2JqZWN0XCJ9KX0odCksZnVuY3Rpb24odCl7IWZ1bmN0aW9uIHQoZSl7Zm9yKHZhciByIGluIGUpaWYoZyhlW3JdKSl0KGVbcl0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlW3JdKSlmb3IodmFyIG49MDtuPGVbcl0ubGVuZ3RoO24rKyl0KGVbcl1bbl0pO2Vsc2UgZVtyXWluc3RhbmNlb2YgUmVnRXhwJiYoZVtyXT1lW3JdLnRvU3RyaW5nKCkpfSh0KX0odCksdH1mdW5jdGlvbiB3KHQsZSxyKXt2YXIgbj1pLm5lc3RlZFByb3BlcnR5KHQsciksYT1kKHt9LGUubGF5b3V0QXR0cmlidXRlcyk7YVt2XT0hMCxuLnNldChhKX1mdW5jdGlvbiBrKHQsZSxyKXt2YXIgbj1pLm5lc3RlZFByb3BlcnR5KHQscik7bi5zZXQoZChuLmdldCgpfHx7fSxlKSl9ci5JU19TVUJQTE9UX09CSj12LHIuSVNfTElOS0VEX1RPX0FSUkFZPW0sci5ERVBSRUNBVEVEPVwiX2RlcHJlY2F0ZWRcIixyLlVOREVSU0NPUkVfQVRUUlM9eSxyLmdldD1mdW5jdGlvbigpe3ZhciB0PXt9O24uYWxsVHlwZXMuY29uY2F0KFwiYXJlYVwiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RbZV09ZnVuY3Rpb24odCl7dmFyIGUsbztcImFyZWFcIj09PXQ/KGU9e2F0dHJpYnV0ZXM6dX0sbz17fSk6KGU9bi5tb2R1bGVzW3RdLl9tb2R1bGUsbz1lLmJhc2VQbG90TW9kdWxlKTt2YXIgcz17dHlwZTpudWxsfSxsPWQoe30sYSksYz1kKHt9LGUuYXR0cmlidXRlcyk7ci5jcmF3bChjLGZ1bmN0aW9uKHQsZSxyLG4sYSl7aS5uZXN0ZWRQcm9wZXJ0eShsLGEpLnNldCh2b2lkIDApLHZvaWQgMD09PXQmJmkubmVzdGVkUHJvcGVydHkoYyxhKS5zZXQodm9pZCAwKX0pLGQocyxsKSxuLnRyYWNlSXModCxcIm5vT3BhY2l0eVwiKSYmZGVsZXRlIHMub3BhY2l0eTtuLnRyYWNlSXModCxcInNob3dMZWdlbmRcIil8fChkZWxldGUgcy5zaG93bGVnZW5kLGRlbGV0ZSBzLmxlZ2VuZGdyb3VwKTtuLnRyYWNlSXModCxcIm5vSG92ZXJcIikmJihkZWxldGUgcy5ob3ZlcmluZm8sZGVsZXRlIHMuaG92ZXJsYWJlbCk7ZS5zZWxlY3RQb2ludHN8fGRlbGV0ZSBzLnNlbGVjdGVkcG9pbnRzO2QocyxjKSxvLmF0dHJpYnV0ZXMmJmQocyxvLmF0dHJpYnV0ZXMpO3MudHlwZT10O3ZhciBoPXttZXRhOmUubWV0YXx8e30sYXR0cmlidXRlczpfKHMpfTtpZihlLmxheW91dEF0dHJpYnV0ZXMpe3ZhciBmPXt9O2QoZixlLmxheW91dEF0dHJpYnV0ZXMpLGgubGF5b3V0QXR0cmlidXRlcz1fKGYpfXJldHVybiBofShlKX0pO3ZhciBlLGc9e307cmV0dXJuIE9iamVjdC5rZXlzKG4udHJhbnNmb3Jtc1JlZ2lzdHJ5KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2dbdF09ZnVuY3Rpb24odCl7dmFyIGU9bi50cmFuc2Zvcm1zUmVnaXN0cnlbdF0scj1kKHt9LGUuYXR0cmlidXRlcyk7cmV0dXJuIE9iamVjdC5rZXlzKG4uY29tcG9uZW50c1JlZ2lzdHJ5KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPW4uY29tcG9uZW50c1JlZ2lzdHJ5W2VdO2kuc2NoZW1hJiZpLnNjaGVtYS50cmFuc2Zvcm1zJiZpLnNjaGVtYS50cmFuc2Zvcm1zW3RdJiZPYmplY3Qua2V5cyhpLnNjaGVtYS50cmFuc2Zvcm1zW3RdKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2socixpLnNjaGVtYS50cmFuc2Zvcm1zW3RdW2VdLGUpfSl9KSx7YXR0cmlidXRlczpfKHIpfX0odCl9KSx7ZGVmczp7dmFsT2JqZWN0czppLnZhbE9iamVjdE1ldGEsbWV0YUtleXM6eS5jb25jYXQoW1wiZGVzY3JpcHRpb25cIixcInJvbGVcIixcImVkaXRUeXBlXCIsXCJpbXBsaWVkRWRpdHNcIl0pLGVkaXRUeXBlOnt0cmFjZXM6Zi50cmFjZXMsbGF5b3V0OmYubGF5b3V0fSxpbXBsaWVkRWRpdHM6e319LHRyYWNlczp0LGxheW91dDpmdW5jdGlvbigpe3ZhciB0LGUscj17fTtmb3IodCBpbiBkKHIsbyksbi5zdWJwbG90c1JlZ2lzdHJ5KWlmKChlPW4uc3VicGxvdHNSZWdpc3RyeVt0XSkubGF5b3V0QXR0cmlidXRlcylpZihBcnJheS5pc0FycmF5KGUuYXR0cikpZm9yKHZhciBpPTA7aTxlLmF0dHIubGVuZ3RoO2krKyl3KHIsZSxlLmF0dHJbaV0pO2Vsc2V7dmFyIGE9XCJzdWJwbG90XCI9PT1lLmF0dHI/ZS5uYW1lOmUuYXR0cjt3KHIsZSxhKX1mb3IodCBpbiByPWZ1bmN0aW9uKHQpe3JldHVybiBwKHQse3JhZGlhbGF4aXM6aC5yYWRpYWxheGlzLGFuZ3VsYXJheGlzOmguYW5ndWxhcmF4aXN9KSxwKHQsaC5sYXlvdXQpLHR9KHIpLG4uY29tcG9uZW50c1JlZ2lzdHJ5KXt2YXIgcz0oZT1uLmNvbXBvbmVudHNSZWdpc3RyeVt0XSkuc2NoZW1hO2lmKHMmJihzLnN1YnBsb3RzfHxzLmxheW91dCkpe3ZhciBsPXMuc3VicGxvdHM7aWYobCYmbC54YXhpcyYmIWwueWF4aXMpZm9yKHZhciBjIGluIGwueGF4aXMpZGVsZXRlIHIueWF4aXNbY119ZWxzZSBlLmxheW91dEF0dHJpYnV0ZXMmJmsocixlLmxheW91dEF0dHJpYnV0ZXMsZS5uYW1lKX1yZXR1cm57bGF5b3V0QXR0cmlidXRlczpfKHIpfX0oKSx0cmFuc2Zvcm1zOmcsZnJhbWVzOihlPXtmcmFtZXM6aS5leHRlbmREZWVwQWxsKHt9LHMpfSxfKGUpLGUuZnJhbWVzKSxhbmltYXRpb246XyhsKSxjb25maWc6XyhjKX19LHIuY3Jhd2w9ZnVuY3Rpb24odCxlLG4saSl7dmFyIGE9bnx8MDtpPWl8fFwiXCIsT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgbz10W25dO2lmKC0xPT09eS5pbmRleE9mKG4pKXt2YXIgcz0oaT9pK1wiLlwiOlwiXCIpK247ZShvLG4sdCxhLHMpLHIuaXNWYWxPYmplY3Qobyl8fGcobykmJlwiaW1wbGllZEVkaXRzXCIhPT1uJiZyLmNyYXdsKG8sZSxhKzEscyl9fSl9LHIuaXNWYWxPYmplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnZvaWQgMCE9PXQudmFsVHlwZX0sci5maW5kQXJyYXlBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQpe3ZhciBlLG4sbz1bXSxzPVtdLGw9W107ZnVuY3Rpb24gYyh0LHIsYSxjKXtzPXMuc2xpY2UoMCxjKS5jb25jYXQoW3JdKSxsPWwuc2xpY2UoMCxjKS5jb25jYXQoW3QmJnQuX2lzTGlua2VkVG9BcnJheV0pLHQmJihcImRhdGFfYXJyYXlcIj09PXQudmFsVHlwZXx8ITA9PT10LmFycmF5T2spJiYhKFwiY29sb3JiYXJcIj09PXNbYy0xXSYmKFwidGlja3RleHRcIj09PXJ8fFwidGlja3ZhbHNcIj09PXIpKSYmZnVuY3Rpb24gdChlLHIsYSl7dmFyIGM9ZVtzW3JdXTt2YXIgdT1hK3Nbcl07aWYocj09PXMubGVuZ3RoLTEpaS5pc0FycmF5T3JUeXBlZEFycmF5KGMpJiZvLnB1c2gobit1KTtlbHNlIGlmKGxbcl0pe2lmKEFycmF5LmlzQXJyYXkoYykpZm9yKHZhciBoPTA7aDxjLmxlbmd0aDtoKyspaS5pc1BsYWluT2JqZWN0KGNbaF0pJiZ0KGNbaF0scisxLHUrXCJbXCIraCtcIl0uXCIpfWVsc2UgaS5pc1BsYWluT2JqZWN0KGMpJiZ0KGMscisxLHUrXCIuXCIpfShlLDAsXCJcIil9ZT10LG49XCJcIixyLmNyYXdsKGEsYyksdC5fbW9kdWxlJiZ0Ll9tb2R1bGUuYXR0cmlidXRlcyYmci5jcmF3bCh0Ll9tb2R1bGUuYXR0cmlidXRlcyxjKTt2YXIgdT10LnRyYW5zZm9ybXM7aWYodSlmb3IodmFyIGg9MDtoPHUubGVuZ3RoO2grKyl7dmFyIGY9dVtoXSxwPWYuX21vZHVsZTtwJiYobj1cInRyYW5zZm9ybXNbXCIraCtcIl0uXCIsZT1mLHIuY3Jhd2wocC5hdHRyaWJ1dGVzLGMpKX1yZXR1cm4gb30sci5nZXRUcmFjZVZhbE9iamVjdD1mdW5jdGlvbih0LGUpe3ZhciByLGksbz1lWzBdLHM9MTtpZihcInRyYW5zZm9ybXNcIj09PW8pe2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gYS50cmFuc2Zvcm1zO3ZhciBsPXQudHJhbnNmb3JtcztpZighQXJyYXkuaXNBcnJheShsKXx8IWwubGVuZ3RoKXJldHVybiExO3ZhciBjPWVbMV07aWYoIWIoYyl8fGM+PWwubGVuZ3RoKXJldHVybiExO2k9KHI9KG4udHJhbnNmb3Jtc1JlZ2lzdHJ5W2xbY10udHlwZV18fHt9KS5hdHRyaWJ1dGVzKSYmcltlWzJdXSxzPTN9ZWxzZSBpZihcImFyZWFcIj09PXQudHlwZSlpPXVbb107ZWxzZXt2YXIgaD10Ll9tb2R1bGU7aWYoaHx8KGg9KG4ubW9kdWxlc1t0LnR5cGV8fGEudHlwZS5kZmx0XXx8e30pLl9tb2R1bGUpLCFoKXJldHVybiExO2lmKCEoaT0ocj1oLmF0dHJpYnV0ZXMpJiZyW29dKSl7dmFyIGY9aC5iYXNlUGxvdE1vZHVsZTtmJiZmLmF0dHJpYnV0ZXMmJihpPWYuYXR0cmlidXRlc1tvXSl9aXx8KGk9YVtvXSl9cmV0dXJuIHgoaSxlLHMpfSxyLmdldExheW91dFZhbE9iamVjdD1mdW5jdGlvbih0LGUpe3JldHVybiB4KGZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLHMsbD10Ll9iYXNlUGxvdE1vZHVsZXM7aWYobCl7dmFyIGM7Zm9yKHI9MDtyPGwubGVuZ3RoO3IrKyl7aWYoKGE9bFtyXSkuYXR0clJlZ2V4JiZhLmF0dHJSZWdleC50ZXN0KGUpKXtpZihhLmxheW91dEF0dHJPdmVycmlkZXMpcmV0dXJuIGEubGF5b3V0QXR0ck92ZXJyaWRlczshYyYmYS5sYXlvdXRBdHRyaWJ1dGVzJiYoYz1hLmxheW91dEF0dHJpYnV0ZXMpfXZhciB1PWEuYmFzZUxheW91dEF0dHJPdmVycmlkZXM7aWYodSYmZSBpbiB1KXJldHVybiB1W2VdfWlmKGMpcmV0dXJuIGN9dmFyIGY9dC5fbW9kdWxlcztpZihmKWZvcihyPTA7cjxmLmxlbmd0aDtyKyspaWYoKHM9ZltyXS5sYXlvdXRBdHRyaWJ1dGVzKSYmZSBpbiBzKXJldHVybiBzW2VdO2ZvcihpIGluIG4uY29tcG9uZW50c1JlZ2lzdHJ5KWlmKCEoYT1uLmNvbXBvbmVudHNSZWdpc3RyeVtpXSkuc2NoZW1hJiZlPT09YS5uYW1lKXJldHVybiBhLmxheW91dEF0dHJpYnV0ZXM7aWYoZSBpbiBvKXJldHVybiBvW2VdO2lmKFwicmFkaWFsYXhpc1wiPT09ZXx8XCJhbmd1bGFyYXhpc1wiPT09ZSlyZXR1cm4gaFtlXTtyZXR1cm4gaC5sYXlvdXRbZV18fCExfSh0LGVbMF0pLGUsMSl9fSx7XCIuLi9saWJcIjo3MDEsXCIuLi9wbG90cy9hbmltYXRpb25fYXR0cmlidXRlc1wiOjc0NCxcIi4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDYsXCIuLi9wbG90cy9mcmFtZV9hdHRyaWJ1dGVzXCI6Nzc2LFwiLi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXNcIjo4MDEsXCIuLi9wbG90cy9wb2xhci9sZWdhY3kvYXJlYV9hdHRyaWJ1dGVzXCI6ODE2LFwiLi4vcGxvdHMvcG9sYXIvbGVnYWN5L2F4aXNfYXR0cmlidXRlc1wiOjgxNyxcIi4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9lZGl0X3R5cGVzXCI6NzMyLFwiLi9wbG90X2NvbmZpZ1wiOjczN31dLDczOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9saWJcIiksaT10KFwiLi4vcGxvdHMvYXR0cmlidXRlc1wiKSxhPVwidGVtcGxhdGVpdGVtbmFtZVwiLG89e25hbWU6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcIm5vbmVcIn19O2Z1bmN0aW9uIHModCl7cmV0dXJuIHQmJlwic3RyaW5nXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIGwodCl7dmFyIGU9dC5sZW5ndGgtMTtyZXR1cm5cInNcIiE9PXQuY2hhckF0KGUpJiZuLndhcm4oXCJiYWQgYXJndW1lbnQgdG8gYXJyYXlEZWZhdWx0S2V5OiBcIit0KSx0LnN1YnN0cigwLHQubGVuZ3RoLTEpK1wiZGVmYXVsdHNcIn1vW2FdPXt2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHIudGVtcGxhdGVkQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5faXNMaW5rZWRUb0FycmF5PXQsZS5uYW1lPW8ubmFtZSxlW2FdPW9bYV0sZX0sci50cmFjZVRlbXBsYXRlcj1mdW5jdGlvbih0KXt2YXIgZSxyLGE9e307Zm9yKGUgaW4gdClyPXRbZV0sQXJyYXkuaXNBcnJheShyKSYmci5sZW5ndGgmJihhW2VdPTApO3JldHVybntuZXdUcmFjZTpmdW5jdGlvbihvKXt2YXIgcz17dHlwZTplPW4uY29lcmNlKG8se30saSxcInR5cGVcIiksX3RlbXBsYXRlOm51bGx9O2lmKGUgaW4gYSl7cj10W2VdO3ZhciBsPWFbZV0lci5sZW5ndGg7YVtlXSsrLHMuX3RlbXBsYXRlPXJbbF19cmV0dXJuIHN9fX0sci5uZXdDb250YWluZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQuX3RlbXBsYXRlLGE9aSYmKGlbZV18fHImJmlbcl0pO3JldHVybiBuLmlzUGxhaW5PYmplY3QoYSl8fChhPW51bGwpLHRbZV09e190ZW1wbGF0ZTphfX0sci5hcnJheVRlbXBsYXRlcj1mdW5jdGlvbih0LGUscil7dmFyIG49dC5fdGVtcGxhdGUsaT1uJiZuW2woZSldLG89biYmbltlXTtBcnJheS5pc0FycmF5KG8pJiZvLmxlbmd0aHx8KG89W10pO3ZhciBjPXt9O3JldHVybntuZXdJdGVtOmZ1bmN0aW9uKHQpe3ZhciBlPXtuYW1lOnQubmFtZSxfaW5wdXQ6dH0sbj1lW2FdPXRbYV07aWYoIXMobikpcmV0dXJuIGUuX3RlbXBsYXRlPWksZTtmb3IodmFyIGw9MDtsPG8ubGVuZ3RoO2wrKyl7dmFyIHU9b1tsXTtpZih1Lm5hbWU9PT1uKXJldHVybiBjW25dPTEsZS5fdGVtcGxhdGU9dSxlfXJldHVybiBlW3JdPXRbcl18fCExLGUuX3RlbXBsYXRlPSExLGV9LGRlZmF1bHRJdGVtczpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxvLmxlbmd0aDtlKyspe3ZhciByPW9bZV0sbj1yLm5hbWU7aWYocyhuKSYmIWNbbl0pe3ZhciBpPXtfdGVtcGxhdGU6cixuYW1lOm4sX2lucHV0OntfdGVtcGxhdGVpdGVtbmFtZTpufX07aVthXT1yW2FdLHQucHVzaChpKSxjW25dPTF9fXJldHVybiB0fX19LHIuYXJyYXlEZWZhdWx0S2V5PWwsci5hcnJheUVkaXRvcj1mdW5jdGlvbih0LGUscil7dmFyIGk9KG4ubmVzdGVkUHJvcGVydHkodCxlKS5nZXQoKXx8W10pLmxlbmd0aCxvPXIuX2luZGV4LHM9bz49aSYmKHIuX2lucHV0fHx7fSkuX3RlbXBsYXRlaXRlbW5hbWU7cyYmKG89aSk7dmFyIGwsYz1lK1wiW1wiK28rXCJdXCI7ZnVuY3Rpb24gdSgpe2w9e30scyYmKGxbY109e30sbFtjXVthXT1zKX1mdW5jdGlvbiBoKHQsZSl7cz9uLm5lc3RlZFByb3BlcnR5KGxbY10sdCkuc2V0KGUpOmxbYytcIi5cIit0XT1lfWZ1bmN0aW9uIGYoKXt2YXIgdD1sO3JldHVybiB1KCksdH1yZXR1cm4gdSgpLHttb2RpZnlCYXNlOmZ1bmN0aW9uKHQsZSl7bFt0XT1lfSxtb2RpZnlJdGVtOmgsZ2V0VXBkYXRlT2JqOmYsYXBwbHlVcGRhdGU6ZnVuY3Rpb24oZSxyKXtlJiZoKGUscik7dmFyIGk9ZigpO2Zvcih2YXIgYSBpbiBpKW4ubmVzdGVkUHJvcGVydHkodCxhKS5zZXQoaVthXSl9fX19LHtcIi4uL2xpYlwiOjcwMSxcIi4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDZ9XSw3NDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vcmVnaXN0cnlcIiksYT10KFwiLi4vcGxvdHMvcGxvdHNcIiksbz10KFwiLi4vbGliXCIpLHM9dChcIi4uL2xpYi9jbGVhcl9nbF9jYW52YXNlc1wiKSxsPXQoXCIuLi9jb21wb25lbnRzL2NvbG9yXCIpLGM9dChcIi4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSx1PXQoXCIuLi9jb21wb25lbnRzL3RpdGxlc1wiKSxoPXQoXCIuLi9jb21wb25lbnRzL21vZGViYXJcIiksZj10KFwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIikscD10KFwiLi4vY29uc3RhbnRzL2FsaWdubWVudFwiKSxkPXQoXCIuLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RyYWludHNcIiksZz1kLmVuZm9yY2Usdj1kLmNsZWFuLG09dChcIi4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2VcIikuZG9BdXRvUmFuZ2UseT1cInN0YXJ0XCIseD1cIm1pZGRsZVwiLGI9XCJlbmRcIjtmdW5jdGlvbiBfKHQsZSxyKXtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXVswXSxhPXJbbl1bMV07aWYoIShpWzBdPj10WzFdfHxpWzFdPD10WzBdKSYmKGFbMF08ZVsxXSYmYVsxXT5lWzBdKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiB3KHQpe3ZhciBlLGksYSxzLHUsZCxnPXQuX2Z1bGxMYXlvdXQsdj1nLl9zaXplLG09di5wLHk9Zi5saXN0KHQsXCJcIiwhMCk7aWYoZy5fcGFwZXJkaXYuc3R5bGUoe3dpZHRoOnQuX2NvbnRleHQucmVzcG9uc2l2ZSYmZy5hdXRvc2l6ZSYmIXQuX2NvbnRleHQuX2hhc1plcm9XaWR0aCYmIXQubGF5b3V0LndpZHRoP1wiMTAwJVwiOmcud2lkdGgrXCJweFwiLGhlaWdodDp0Ll9jb250ZXh0LnJlc3BvbnNpdmUmJmcuYXV0b3NpemUmJiF0Ll9jb250ZXh0Ll9oYXNaZXJvSGVpZ2h0JiYhdC5sYXlvdXQuaGVpZ2h0P1wiMTAwJVwiOmcuaGVpZ2h0K1wicHhcIn0pLnNlbGVjdEFsbChcIi5tYWluLXN2Z1wiKS5jYWxsKGMuc2V0U2l6ZSxnLndpZHRoLGcuaGVpZ2h0KSx0Ll9jb250ZXh0LnNldEJhY2tncm91bmQodCxnLnBhcGVyX2JnY29sb3IpLHIuZHJhd01haW5UaXRsZSh0KSxoLm1hbmFnZSh0KSwhZy5faGFzKFwiY2FydGVzaWFuXCIpKXJldHVybiB0Ll9wcm9taXNlcy5sZW5ndGgmJlByb21pc2UuYWxsKHQuX3Byb21pc2VzKTtmdW5jdGlvbiB4KHQsZSxyKXt2YXIgbj10Ll9sdy8yO3JldHVyblwieFwiPT09dC5faWQuY2hhckF0KDApP2U/XCJ0b3BcIj09PXI/ZS5fb2Zmc2V0LW0tbjplLl9vZmZzZXQrZS5fbGVuZ3RoK20rbjp2LnQrdi5oKigxLSh0LnBvc2l0aW9ufHwwKSkrbiUxOmU/XCJyaWdodFwiPT09cj9lLl9vZmZzZXQrZS5fbGVuZ3RoK20rbjplLl9vZmZzZXQtbS1uOnYubCt2LncqKHQucG9zaXRpb258fDApK24lMX1mb3IoZT0wO2U8eS5sZW5ndGg7ZSsrKXt2YXIgYj0ocz15W2VdKS5fYW5jaG9yQXhpcztzLl9saW5lcG9zaXRpb25zPXt9LHMuX2x3PWMuY3Jpc3BSb3VuZCh0LHMubGluZXdpZHRoLDEpLHMuX21haW5MaW5lUG9zaXRpb249eChzLGIscy5zaWRlKSxzLl9tYWluTWlycm9yUG9zaXRpb249cy5taXJyb3ImJmI/eChzLGIscC5PUFBPU0lURV9TSURFW3Muc2lkZV0pOm51bGx9dmFyIHc9W10sQT1bXSxNPVtdLFM9MT09PWwub3BhY2l0eShnLnBhcGVyX2JnY29sb3IpJiYxPT09bC5vcGFjaXR5KGcucGxvdF9iZ2NvbG9yKSYmZy5wYXBlcl9iZ2NvbG9yPT09Zy5wbG90X2JnY29sb3I7Zm9yKGkgaW4gZy5fcGxvdHMpaWYoKGE9Zy5fcGxvdHNbaV0pLm1haW5wbG90KWEuYmcmJmEuYmcucmVtb3ZlKCksYS5iZz12b2lkIDA7ZWxzZXt2YXIgRT1hLnhheGlzLmRvbWFpbixDPWEueWF4aXMuZG9tYWluLEw9YS5wbG90Z3JvdXA7aWYoXyhFLEMsTSkpe3ZhciB6PUwubm9kZSgpLE89YS5iZz1vLmVuc3VyZVNpbmdsZShMLFwicmVjdFwiLFwiYmdcIik7ei5pbnNlcnRCZWZvcmUoTy5ub2RlKCksei5jaGlsZE5vZGVzWzBdKSxBLnB1c2goaSl9ZWxzZSBMLnNlbGVjdChcInJlY3QuYmdcIikucmVtb3ZlKCksTS5wdXNoKFtFLENdKSxTfHwody5wdXNoKGkpLEEucHVzaChpKSl9dmFyIEksRCxQLFIsRixCLE4saixWLFUscSxILEcsWT1nLl9iZ0xheWVyLnNlbGVjdEFsbChcIi5iZ1wiKS5kYXRhKHcpO2ZvcihZLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKS5jbGFzc2VkKFwiYmdcIiwhMCksWS5leGl0KCkucmVtb3ZlKCksWS5lYWNoKGZ1bmN0aW9uKHQpe2cuX3Bsb3RzW3RdLmJnPW4uc2VsZWN0KHRoaXMpfSksZT0wO2U8QS5sZW5ndGg7ZSsrKWE9Zy5fcGxvdHNbQVtlXV0sdT1hLnhheGlzLGQ9YS55YXhpcyxhLmJnJiZhLmJnLmNhbGwoYy5zZXRSZWN0LHUuX29mZnNldC1tLGQuX29mZnNldC1tLHUuX2xlbmd0aCsyKm0sZC5fbGVuZ3RoKzIqbSkuY2FsbChsLmZpbGwsZy5wbG90X2JnY29sb3IpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsMCk7aWYoIWcuX2hhc09ubHlMYXJnZVNwbG9tcylmb3IoaSBpbiBnLl9wbG90cyl7YT1nLl9wbG90c1tpXSx1PWEueGF4aXMsZD1hLnlheGlzO3ZhciBXLFgsWj1hLmNsaXBJZD1cImNsaXBcIitnLl91aWQraStcInBsb3RcIiwkPW8uZW5zdXJlU2luZ2xlQnlJZChnLl9jbGlwcyxcImNsaXBQYXRoXCIsWixmdW5jdGlvbih0KXt0LmNsYXNzZWQoXCJwbG90Y2xpcFwiLCEwKS5hcHBlbmQoXCJyZWN0XCIpfSk7YS5jbGlwUmVjdD0kLnNlbGVjdChcInJlY3RcIikuYXR0cih7d2lkdGg6dS5fbGVuZ3RoLGhlaWdodDpkLl9sZW5ndGh9KSxjLnNldFRyYW5zbGF0ZShhLnBsb3QsdS5fb2Zmc2V0LGQuX29mZnNldCksYS5faGFzQ2xpcE9uQXhpc0ZhbHNlPyhXPW51bGwsWD1aKTooVz1aLFg9bnVsbCksYy5zZXRDbGlwVXJsKGEucGxvdCxXLHQpLGEubGF5ZXJDbGlwSWQ9WH1mdW5jdGlvbiBKKHQpe3JldHVyblwiTVwiK0krXCIsXCIrdCtcIkhcIitEfWZ1bmN0aW9uIEsodCl7cmV0dXJuXCJNXCIrdS5fb2Zmc2V0K1wiLFwiK3QrXCJoXCIrdS5fbGVuZ3RofWZ1bmN0aW9uIFEodCl7cmV0dXJuXCJNXCIrdCtcIixcIitqK1wiVlwiK059ZnVuY3Rpb24gdHQodCl7cmV0dXJuXCJNXCIrdCtcIixcIitkLl9vZmZzZXQrXCJ2XCIrZC5fbGVuZ3RofWZ1bmN0aW9uIGV0KHQsZSxyKXtpZighdC5zaG93bGluZXx8aSE9PXQuX21haW5TdWJwbG90KXJldHVyblwiXCI7aWYoIXQuX2FuY2hvckF4aXMpcmV0dXJuIHIodC5fbWFpbkxpbmVQb3NpdGlvbik7dmFyIG49ZSh0Ll9tYWluTGluZVBvc2l0aW9uKTtyZXR1cm4gdC5taXJyb3ImJihuKz1lKHQuX21haW5NaXJyb3JQb3NpdGlvbikpLG59Zm9yKGkgaW4gZy5fcGxvdHMpe2E9Zy5fcGxvdHNbaV0sdT1hLnhheGlzLGQ9YS55YXhpczt2YXIgcnQ9XCJNMCwwXCI7ayh1LGkpJiYoRj1UKHUsXCJsZWZ0XCIsZCx5KSxJPXUuX29mZnNldC0oRj9tK0Y6MCksQj1UKHUsXCJyaWdodFwiLGQseSksRD11Ll9vZmZzZXQrdS5fbGVuZ3RoKyhCP20rQjowKSxQPXgodSxkLFwiYm90dG9tXCIpLFI9eCh1LGQsXCJ0b3BcIiksIShHPSF1Ll9hbmNob3JBeGlzfHxpIT09dS5fbWFpblN1YnBsb3QpfHxcImFsbHRpY2tzXCIhPT11Lm1pcnJvciYmXCJhbGxcIiE9PXUubWlycm9yfHwodS5fbGluZXBvc2l0aW9uc1tpXT1bUCxSXSkscnQ9ZXQodSxKLEspLEcmJnUuc2hvd2xpbmUmJihcImFsbFwiPT09dS5taXJyb3J8fFwiYWxsdGlja3NcIj09PXUubWlycm9yKSYmKHJ0Kz1KKFApK0ooUikpLGEueGxpbmVzLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsdS5fbHcrXCJweFwiKS5jYWxsKGwuc3Ryb2tlLHUuc2hvd2xpbmU/dS5saW5lY29sb3I6XCJyZ2JhKDAsMCwwLDApXCIpKSxhLnhsaW5lcy5hdHRyKFwiZFwiLHJ0KTt2YXIgbnQ9XCJNMCwwXCI7ayhkLGkpJiYocT1UKGQsXCJib3R0b21cIix1LHkpLE49ZC5fb2Zmc2V0K2QuX2xlbmd0aCsocT9tOjApLEg9VChkLFwidG9wXCIsdSx5KSxqPWQuX29mZnNldC0oSD9tOjApLFY9eChkLHUsXCJsZWZ0XCIpLFU9eChkLHUsXCJyaWdodFwiKSwhKEc9IWQuX2FuY2hvckF4aXN8fGkhPT1kLl9tYWluU3VicGxvdCl8fFwiYWxsdGlja3NcIiE9PWQubWlycm9yJiZcImFsbFwiIT09ZC5taXJyb3J8fChkLl9saW5lcG9zaXRpb25zW2ldPVtWLFVdKSxudD1ldChkLFEsdHQpLEcmJmQuc2hvd2xpbmUmJihcImFsbFwiPT09ZC5taXJyb3J8fFwiYWxsdGlja3NcIj09PWQubWlycm9yKSYmKG50Kz1RKFYpK1EoVSkpLGEueWxpbmVzLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsZC5fbHcrXCJweFwiKS5jYWxsKGwuc3Ryb2tlLGQuc2hvd2xpbmU/ZC5saW5lY29sb3I6XCJyZ2JhKDAsMCwwLDApXCIpKSxhLnlsaW5lcy5hdHRyKFwiZFwiLG50KX1yZXR1cm4gZi5tYWtlQ2xpcFBhdGhzKHQpLHQuX3Byb21pc2VzLmxlbmd0aCYmUHJvbWlzZS5hbGwodC5fcHJvbWlzZXMpfWZ1bmN0aW9uIGsodCxlKXtyZXR1cm4odC50aWNrc3x8dC5zaG93bGluZSkmJihlPT09dC5fbWFpblN1YnBsb3R8fFwiYWxsXCI9PT10Lm1pcnJvcnx8XCJhbGx0aWNrc1wiPT09dC5taXJyb3IpfWZ1bmN0aW9uIEEodCxlLHIpe2lmKCFyLnNob3dsaW5lfHwhci5fbHcpcmV0dXJuITE7aWYoXCJhbGxcIj09PXIubWlycm9yfHxcImFsbHRpY2tzXCI9PT1yLm1pcnJvcilyZXR1cm4hMDt2YXIgbj1yLl9hbmNob3JBeGlzO2lmKCFuKXJldHVybiExO3ZhciBpPXAuRlJPTV9CTFtlXTtyZXR1cm4gci5zaWRlPT09ZT9uLmRvbWFpbltpXT09PXQuZG9tYWluW2ldOnIubWlycm9yJiZuLmRvbWFpblsxLWldPT09dC5kb21haW5bMS1pXX1mdW5jdGlvbiBUKHQsZSxyLG4pe2lmKEEodCxlLHIpKXJldHVybiByLl9sdztmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIGE9bltpXTtpZihhLl9tYWluQXhpcz09PXIuX21haW5BeGlzJiZBKHQsZSxhKSlyZXR1cm4gYS5fbHd9cmV0dXJuIDB9ci5sYXlvdXRTdHlsZXM9ZnVuY3Rpb24odCl7cmV0dXJuIG8uc3luY09yQXN5bmMoW2EuZG9BdXRvTWFyZ2luLHddLHQpfSxyLmRyYXdNYWluVGl0bGU9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWZ1bmN0aW9uKHQpe3ZhciBlPXQudGl0bGUscj14O28uaXNSaWdodEFuY2hvcihlKT9yPWI6by5pc0xlZnRBbmNob3IoZSkmJihyPXkpO3JldHVybiByfShlKSxuPWZ1bmN0aW9uKHQpe3ZhciBlPXQudGl0bGUscj1cIjBlbVwiO28uaXNUb3BBbmNob3IoZSk/cj1wLkNBUF9TSElGVCtcImVtXCI6by5pc01pZGRsZUFuY2hvcihlKSYmKHI9cC5NSURfU0hJRlQrXCJlbVwiKTtyZXR1cm4gcn0oZSk7dS5kcmF3KHQsXCJndGl0bGVcIix7cHJvcENvbnRhaW5lcjplLHByb3BOYW1lOlwidGl0bGUudGV4dFwiLHBsYWNlaG9sZGVyOmUuX2RmbHRUaXRsZS5wbG90LGF0dHJpYnV0ZXM6e3g6ZnVuY3Rpb24odCxlKXt2YXIgcj10LnRpdGxlLG49dC5fc2l6ZSxpPTA7ZT09PXk/aT1yLnBhZC5sOmU9PT1iJiYoaT0tci5wYWQucik7c3dpdGNoKHIueHJlZil7Y2FzZVwicGFwZXJcIjpyZXR1cm4gbi5sK24udypyLngraTtjYXNlXCJjb250YWluZXJcIjpkZWZhdWx0OnJldHVybiB0LndpZHRoKnIueCtpfX0oZSxyKSx5OmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC50aXRsZSxuPXQuX3NpemUsaT0wO1wiMGVtXCIhPT1lJiZlP2U9PT1wLkNBUF9TSElGVCtcImVtXCImJihpPXIucGFkLnQpOmk9LXIucGFkLmI7aWYoXCJhdXRvXCI9PT1yLnkpcmV0dXJuIG4udC8yO3N3aXRjaChyLnlyZWYpe2Nhc2VcInBhcGVyXCI6cmV0dXJuIG4udCtuLmgtbi5oKnIueStpO2Nhc2VcImNvbnRhaW5lclwiOmRlZmF1bHQ6cmV0dXJuIHQuaGVpZ2h0LXQuaGVpZ2h0KnIueStpfX0oZSxuKSxcInRleHQtYW5jaG9yXCI6cixkeTpufX0pfSxyLmRvVHJhY2VTdHlsZT1mdW5jdGlvbih0KXt2YXIgZSxuPXQuY2FsY2RhdGEsbz1bXTtmb3IoZT0wO2U8bi5sZW5ndGg7ZSsrKXt2YXIgbD1uW2VdLGM9bFswXXx8e30sdT1jLnRyYWNlfHx7fSxoPXUuX21vZHVsZXx8e30sZj1oLmFycmF5c1RvQ2FsY2RhdGE7ZiYmZihsLHUpO3ZhciBwPWguZWRpdFN0eWxlO3AmJm8ucHVzaCh7Zm46cCxjZDA6Y30pfWlmKG8ubGVuZ3RoKXtmb3IoZT0wO2U8by5sZW5ndGg7ZSsrKXt2YXIgZD1vW2VdO2QuZm4odCxkLmNkMCl9cyh0KSxyLnJlZHJhd1JlZ2xUcmFjZXModCl9cmV0dXJuIGEuc3R5bGUodCksaS5nZXRDb21wb25lbnRNZXRob2QoXCJsZWdlbmRcIixcImRyYXdcIikodCksYS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmRvQ29sb3JCYXJzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5jYWxjZGF0YS5sZW5ndGg7ZSsrKXt2YXIgcj10LmNhbGNkYXRhW2VdWzBdO2lmKChyLnR8fHt9KS5jYil7dmFyIG49ci50cmFjZSxvPXIudC5jYjtpLnRyYWNlSXMobixcImNvbnRvdXJcIikmJm8ubGluZSh7d2lkdGg6ITEhPT1uLmNvbnRvdXJzLnNob3dsaW5lcz9uLmxpbmUud2lkdGg6MCxkYXNoOm4ubGluZS5kYXNoLGNvbG9yOlwibGluZVwiPT09bi5jb250b3Vycy5jb2xvcmluZz9vLl9vcHRzLmxpbmUuY29sb3I6bi5saW5lLmNvbG9yfSk7dmFyIHM9bi5fbW9kdWxlLmNvbG9yYmFyLmNvbnRhaW5lcixsPShzP25bc106bikuY29sb3JiYXI7by5vcHRpb25zKGwpKCl9fXJldHVybiBhLnByZXZpb3VzUHJvbWlzZXModCl9LHIubGF5b3V0UmVwbG90PWZ1bmN0aW9uKHQpe3ZhciBlPXQubGF5b3V0O3JldHVybiB0LmxheW91dD12b2lkIDAsaS5jYWxsKFwicGxvdFwiLHQsXCJcIixlKX0sci5kb0xlZ2VuZD1mdW5jdGlvbih0KXtyZXR1cm4gaS5nZXRDb21wb25lbnRNZXRob2QoXCJsZWdlbmRcIixcImRyYXdcIikodCksYS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmRvVGlja3NSZWxheW91dD1mdW5jdGlvbih0KXtyZXR1cm4gZi5kcmF3KHQsXCJyZWRyYXdcIiksdC5fZnVsbExheW91dC5faGFzT25seUxhcmdlU3Bsb21zJiYoaS5zdWJwbG90c1JlZ2lzdHJ5LnNwbG9tLnVwZGF0ZUdyaWQodCkscyh0KSxyLnJlZHJhd1JlZ2xUcmFjZXModCkpLHIuZHJhd01haW5UaXRsZSh0KSxhLnByZXZpb3VzUHJvbWlzZXModCl9LHIuZG9Nb2RlQmFyPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7aC5tYW5hZ2UodCk7Zm9yKHZhciByPTA7cjxlLl9iYXNlUGxvdE1vZHVsZXMubGVuZ3RoO3IrKyl7dmFyIG49ZS5fYmFzZVBsb3RNb2R1bGVzW3JdLnVwZGF0ZUZ4O24mJm4odCl9cmV0dXJuIGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5kb0NhbWVyYT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLmdsM2Qsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1lW3Jbbl1dLGE9aS5fc2NlbmUsbz1pLmNhbWVyYTthLnNldENhbWVyYShvKX19LHIuZHJhd0RhdGE9ZnVuY3Rpb24odCl7dmFyIGUsbj10Ll9mdWxsTGF5b3V0LG89dC5jYWxjZGF0YTtmb3IoZT0wO2U8by5sZW5ndGg7ZSsrKXt2YXIgbD1vW2VdWzBdLnRyYWNlOyEwPT09bC52aXNpYmxlJiZsLl9tb2R1bGUuY29sb3JiYXJ8fG4uX2luZm9sYXllci5zZWxlY3QoXCIuY2JcIitsLnVpZCkucmVtb3ZlKCl9cyh0KTt2YXIgYz1uLl9iYXNlUGxvdE1vZHVsZXM7Zm9yKGU9MDtlPGMubGVuZ3RoO2UrKyljW2VdLnBsb3QodCk7cmV0dXJuIHIucmVkcmF3UmVnbFRyYWNlcyh0KSxhLnN0eWxlKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKFwic2hhcGVzXCIsXCJkcmF3XCIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKFwiYW5ub3RhdGlvbnNcIixcImRyYXdcIikodCksbi5fcmVwbG90dGluZz0hMSxhLnByZXZpb3VzUHJvbWlzZXModCl9LHIucmVkcmF3UmVnbFRyYWNlcz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2lmKGUuX2hhcyhcInJlZ2xcIikpe3ZhciByLG4saT10Ll9mdWxsRGF0YSxhPVtdLHM9W107Zm9yKGUuX2hhc09ubHlMYXJnZVNwbG9tcyYmZS5fc3Bsb21HcmlkLmRyYXcoKSxyPTA7cjxpLmxlbmd0aDtyKyspe3ZhciBsPWlbcl07ITA9PT1sLnZpc2libGUmJihcInNwbG9tXCI9PT1sLnR5cGU/ZS5fc3Bsb21TY2VuZXNbbC51aWRdLmRyYXcoKTpcInNjYXR0ZXJnbFwiPT09bC50eXBlP28ucHVzaFVuaXF1ZShhLGwueGF4aXMrbC55YXhpcyk6XCJzY2F0dGVycG9sYXJnbFwiPT09bC50eXBlJiZvLnB1c2hVbmlxdWUocyxsLnN1YnBsb3QpKX1mb3Iocj0wO3I8YS5sZW5ndGg7cisrKShuPWUuX3Bsb3RzW2Fbcl1dKS5fc2NlbmUmJm4uX3NjZW5lLmRyYXcoKTtmb3Iocj0wO3I8cy5sZW5ndGg7cisrKShuPWVbc1tyXV0uX3N1YnBsb3QpLl9zY2VuZSYmbi5fc2NlbmUuZHJhdygpfX0sci5kb0F1dG9SYW5nZUFuZENvbnN0cmFpbnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPXQuX2Z1bGxMYXlvdXQsbj1mLmxpc3QodCxcIlwiLCEwKSxpPXIuX2F4aXNNYXRjaEdyb3Vwc3x8W10sYT0wO2E8bi5sZW5ndGg7YSsrKWU9blthXSx2KHQsZSksbSh0LGUpO2codCk7dDpmb3IodmFyIG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHMsbD1pW29dLGM9bnVsbDtmb3IocyBpbiBsKXtpZighMT09PShlPWYuZ2V0RnJvbUlkKHQscykpLmF1dG9yYW5nZSljb250aW51ZSB0O2M/Y1swXTxjWzFdPyhjWzBdPU1hdGgubWluKGNbMF0sZS5yYW5nZVswXSksY1sxXT1NYXRoLm1heChjWzFdLGUucmFuZ2VbMV0pKTooY1swXT1NYXRoLm1heChjWzBdLGUucmFuZ2VbMF0pLGNbMV09TWF0aC5taW4oY1sxXSxlLnJhbmdlWzFdKSk6Yz1lLnJhbmdlfWZvcihzIGluIGwpKGU9Zi5nZXRGcm9tSWQodCxzKSkucmFuZ2U9Yy5zbGljZSgpLGUuX2lucHV0LnJhbmdlPWMuc2xpY2UoKSxlLnNldFNjYWxlKCl9fSxyLmZpbmFsRHJhdz1mdW5jdGlvbih0KXtpLmdldENvbXBvbmVudE1ldGhvZChcInNoYXBlc1wiLFwiZHJhd1wiKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZChcImltYWdlc1wiLFwiZHJhd1wiKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZChcImFubm90YXRpb25zXCIsXCJkcmF3XCIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKFwicmFuZ2VzbGlkZXJcIixcImRyYXdcIikodCksaS5nZXRDb21wb25lbnRNZXRob2QoXCJyYW5nZXNlbGVjdG9yXCIsXCJkcmF3XCIpKHQpfSxyLmRyYXdNYXJnaW5QdXNoZXJzPWZ1bmN0aW9uKHQpe2kuZ2V0Q29tcG9uZW50TWV0aG9kKFwibGVnZW5kXCIsXCJkcmF3XCIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKFwicmFuZ2VzZWxlY3RvclwiLFwiZHJhd1wiKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZChcInNsaWRlcnNcIixcImRyYXdcIikodCksaS5nZXRDb21wb25lbnRNZXRob2QoXCJ1cGRhdGVtZW51c1wiLFwiZHJhd1wiKSh0KX19LHtcIi4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi9jb21wb25lbnRzL21vZGViYXJcIjo2MzcsXCIuLi9jb21wb25lbnRzL3RpdGxlc1wiOjY2NixcIi4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIjo2NzMsXCIuLi9saWJcIjo3MDEsXCIuLi9saWIvY2xlYXJfZ2xfY2FudmFzZXNcIjo2ODYsXCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlXCI6NzQ4LFwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RyYWludHNcIjo3NTYsXCIuLi9wbG90cy9wbG90c1wiOjgxMCxcIi4uL3JlZ2lzdHJ5XCI6ODI5LGQzOjE1NX1dLDc0MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9saWJcIiksaT1uLmlzUGxhaW5PYmplY3QsYT10KFwiLi9wbG90X3NjaGVtYVwiKSxvPXQoXCIuLi9wbG90cy9wbG90c1wiKSxzPXQoXCIuLi9wbG90cy9hdHRyaWJ1dGVzXCIpLGw9dChcIi4vcGxvdF90ZW1wbGF0ZVwiKSxjPXQoXCIuL3Bsb3RfY29uZmlnXCIpLmRmbHRDb25maWc7ZnVuY3Rpb24gdSh0LGUpe3Q9bi5leHRlbmREZWVwKHt9LHQpO3ZhciByLGEsbz1PYmplY3Qua2V5cyh0KS5zb3J0KCk7ZnVuY3Rpb24gcyhlLHIsbil7aWYoaShyKSYmaShlKSl1KGUscik7ZWxzZSBpZihBcnJheS5pc0FycmF5KHIpJiZBcnJheS5pc0FycmF5KGUpKXt2YXIgbz1sLmFycmF5VGVtcGxhdGVyKHtfdGVtcGxhdGU6dH0sbik7Zm9yKGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIHM9clthXSxjPW8ubmV3SXRlbShzKS5fdGVtcGxhdGU7YyYmdShjLHMpfXZhciBoPW8uZGVmYXVsdEl0ZW1zKCk7Zm9yKGE9MDthPGgubGVuZ3RoO2ErKylyLnB1c2goaFthXS5fdGVtcGxhdGUpO2ZvcihhPTA7YTxyLmxlbmd0aDthKyspZGVsZXRlIHJbYV0udGVtcGxhdGVpdGVtbmFtZX19Zm9yKHI9MDtyPG8ubGVuZ3RoO3IrKyl7dmFyIGM9b1tyXSxmPXRbY107aWYoYyBpbiBlP3MoZixlW2NdLGMpOmVbY109ZixoKGMpPT09Yylmb3IodmFyIHAgaW4gZSl7dmFyIGQ9aChwKTtwPT09ZHx8ZCE9PWN8fHAgaW4gdHx8cyhmLGVbcF0sYyl9fX1mdW5jdGlvbiBoKHQpe3JldHVybiB0LnJlcGxhY2UoL1swLTldKyQvLFwiXCIpfWZ1bmN0aW9uIGYodCxlLHIsYSxvKXt2YXIgcz1vJiZyKG8pO2Zvcih2YXIgYyBpbiB0KXt2YXIgdT10W2NdLGQ9cCh0LGMsYSksZz1wKHQsYyxvKSx2PXIoZyk7aWYoIXYpe3ZhciBtPWgoYyk7bSE9PWMmJih2PXIoZz1wKHQsbSxvKSkpfWlmKCghc3x8cyE9PXYpJiYhKCF2fHx2Ll9ub1RlbXBsYXRpbmd8fFwiZGF0YV9hcnJheVwiPT09di52YWxUeXBlfHx2LmFycmF5T2smJkFycmF5LmlzQXJyYXkodSkpKWlmKCF2LnZhbFR5cGUmJmkodSkpZih1LGUscixkLGcpO2Vsc2UgaWYodi5faXNMaW5rZWRUb0FycmF5JiZBcnJheS5pc0FycmF5KHUpKWZvcih2YXIgeT0hMSx4PTAsYj17fSxfPTA7Xzx1Lmxlbmd0aDtfKyspe3ZhciB3PXVbX107aWYoaSh3KSl7dmFyIGs9dy5uYW1lO2lmKGspYltrXXx8KGYodyxlLHIscCh1LHgsZCkscCh1LHgsZykpLHgrKyxiW2tdPTEpO2Vsc2UgaWYoIXkpe3ZhciBBPXAodCxsLmFycmF5RGVmYXVsdEtleShjKSxhKSxUPXAodSx4LGQpO2YodyxlLHIsVCxwKHUseCxnKSk7dmFyIE09bi5uZXN0ZWRQcm9wZXJ0eShlLFQpO24ubmVzdGVkUHJvcGVydHkoZSxBKS5zZXQoTS5nZXQoKSksTS5zZXQobnVsbCkseT0hMH19fWVsc2V7bi5uZXN0ZWRQcm9wZXJ0eShlLGQpLnNldCh1KX19fWZ1bmN0aW9uIHAodCxlLHIpe3JldHVybiByP0FycmF5LmlzQXJyYXkodCk/citcIltcIitlK1wiXVwiOnIrXCIuXCIrZTplfWZ1bmN0aW9uIGQodCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYoaSh0W2VdKSlyZXR1cm4hMH1mdW5jdGlvbiBnKHQpe3ZhciBlO3N3aXRjaCh0LmNvZGUpe2Nhc2VcImRhdGFcIjplPVwiVGhlIHRlbXBsYXRlIGhhcyBubyBrZXkgZGF0YS5cIjticmVhaztjYXNlXCJsYXlvdXRcIjplPVwiVGhlIHRlbXBsYXRlIGhhcyBubyBrZXkgbGF5b3V0LlwiO2JyZWFrO2Nhc2VcIm1pc3NpbmdcIjplPXQucGF0aD9cIlRoZXJlIGFyZSBubyB0ZW1wbGF0ZXMgZm9yIGl0ZW0gXCIrdC5wYXRoK1wiIHdpdGggbmFtZSBcIit0LnRlbXBsYXRlaXRlbW5hbWU6XCJUaGVyZSBhcmUgbm8gdGVtcGxhdGVzIGZvciB0cmFjZSBcIit0LmluZGV4K1wiLCBvZiB0eXBlIFwiK3QudHJhY2VUeXBlK1wiLlwiO2JyZWFrO2Nhc2VcInVudXNlZFwiOmU9dC5wYXRoP1wiVGhlIHRlbXBsYXRlIGl0ZW0gYXQgXCIrdC5wYXRoK1wiIHdhcyBub3QgdXNlZCBpbiBjb25zdHJ1Y3RpbmcgdGhlIHBsb3QuXCI6dC5kYXRhQ291bnQ/XCJTb21lIG9mIHRoZSB0ZW1wbGF0ZXMgb2YgdHlwZSBcIit0LnRyYWNlVHlwZStcIiB3ZXJlIG5vdCB1c2VkLiBUaGUgdGVtcGxhdGUgaGFzIFwiK3QudGVtcGxhdGVDb3VudCtcIiB0cmFjZXMsIHRoZSBkYXRhIG9ubHkgaGFzIFwiK3QuZGF0YUNvdW50K1wiIG9mIHRoaXMgdHlwZS5cIjpcIlRoZSB0ZW1wbGF0ZSBoYXMgXCIrdC50ZW1wbGF0ZUNvdW50K1wiIHRyYWNlcyBvZiB0eXBlIFwiK3QudHJhY2VUeXBlK1wiIGJ1dCB0aGVyZSBhcmUgbm9uZSBpbiB0aGUgZGF0YS5cIjticmVhaztjYXNlXCJyZXVzZWRcIjplPVwiU29tZSBvZiB0aGUgdGVtcGxhdGVzIG9mIHR5cGUgXCIrdC50cmFjZVR5cGUrXCIgd2VyZSB1c2VkIG1vcmUgdGhhbiBvbmNlLiBUaGUgdGVtcGxhdGUgaGFzIFwiK3QudGVtcGxhdGVDb3VudCtcIiB0cmFjZXMsIHRoZSBkYXRhIGhhcyBcIit0LmRhdGFDb3VudCtcIiBvZiB0aGlzIHR5cGUuXCJ9cmV0dXJuIHQubXNnPWUsdH1yLm1ha2VUZW1wbGF0ZT1mdW5jdGlvbih0KXt0PW4uaXNQbGFpbk9iamVjdCh0KT90Om4uZ2V0R3JhcGhEaXYodCksdD1uLmV4dGVuZERlZXAoe19jb250ZXh0OmN9LHtkYXRhOnQuZGF0YSxsYXlvdXQ6dC5sYXlvdXR9KSxvLnN1cHBseURlZmF1bHRzKHQpO3ZhciBlPXQuZGF0YXx8W10scj10LmxheW91dHx8e307ci5fYmFzZVBsb3RNb2R1bGVzPXQuX2Z1bGxMYXlvdXQuX2Jhc2VQbG90TW9kdWxlcyxyLl9tb2R1bGVzPXQuX2Z1bGxMYXlvdXQuX21vZHVsZXM7dmFyIGw9e2RhdGE6e30sbGF5b3V0Ont9fTtlLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9e307Zih0LGUsZnVuY3Rpb24odCxlKXtyZXR1cm4gYS5nZXRUcmFjZVZhbE9iamVjdCh0LG4ubmVzdGVkUHJvcGVydHkoe30sZSkucGFydHMpfS5iaW5kKG51bGwsdCkpO3ZhciByPW4uY29lcmNlKHQse30scyxcInR5cGVcIiksaT1sLmRhdGFbcl07aXx8KGk9bC5kYXRhW3JdPVtdKSxpLnB1c2goZSl9KSxmKHIsbC5sYXlvdXQsZnVuY3Rpb24odCxlKXtyZXR1cm4gYS5nZXRMYXlvdXRWYWxPYmplY3QodCxuLm5lc3RlZFByb3BlcnR5KHt9LGUpLnBhcnRzKX0uYmluZChudWxsLHIpKSxkZWxldGUgbC5sYXlvdXQudGVtcGxhdGU7dmFyIGg9ci50ZW1wbGF0ZTtpZihpKGgpKXt2YXIgcCxkLGcsdixtLHkseD1oLmxheW91dDtpKHgpJiZ1KHgsbC5sYXlvdXQpO3ZhciBiPWguZGF0YTtpZihpKGIpKXtmb3IoZCBpbiBsLmRhdGEpaWYoZz1iW2RdLEFycmF5LmlzQXJyYXkoZykpe2Zvcih5PShtPWwuZGF0YVtkXSkubGVuZ3RoLHY9Zy5sZW5ndGgscD0wO3A8eTtwKyspdShnW3Aldl0sbVtwXSk7Zm9yKHA9eTtwPHY7cCsrKW0ucHVzaChuLmV4dGVuZERlZXAoe30sZ1twXSkpfWZvcihkIGluIGIpZCBpbiBsLmRhdGF8fChsLmRhdGFbZF09bi5leHRlbmREZWVwKFtdLGJbZF0pKX19cmV0dXJuIGx9LHIudmFsaWRhdGVUZW1wbGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPW4uZXh0ZW5kRGVlcCh7fSx7X2NvbnRleHQ6YyxkYXRhOnQuZGF0YSxsYXlvdXQ6dC5sYXlvdXR9KSxhPXIubGF5b3V0fHx7fTtpKGUpfHwoZT1hLnRlbXBsYXRlfHx7fSk7dmFyIHM9ZS5sYXlvdXQsbD1lLmRhdGEsdT1bXTtyLmxheW91dD1hLHIubGF5b3V0LnRlbXBsYXRlPWUsby5zdXBwbHlEZWZhdWx0cyhyKTt2YXIgZj1yLl9mdWxsTGF5b3V0LHY9ci5fZnVsbERhdGEsbT17fTtpZihpKHMpPyghZnVuY3Rpb24gdChlLHIpe2Zvcih2YXIgbiBpbiBlKWlmKFwiX1wiIT09bi5jaGFyQXQoMCkmJmkoZVtuXSkpe3ZhciBhLG89aChuKSxzPVtdO2ZvcihhPTA7YTxyLmxlbmd0aDthKyspcy5wdXNoKHAoZSxuLHJbYV0pKSxvIT09biYmcy5wdXNoKHAoZSxvLHJbYV0pKTtmb3IoYT0wO2E8cy5sZW5ndGg7YSsrKW1bc1thXV09MTt0KGVbbl0scyl9fShmLFtcImxheW91dFwiXSksZnVuY3Rpb24gdChlLHIpe2Zvcih2YXIgbiBpbiBlKWlmKC0xPT09bi5pbmRleE9mKFwiZGVmYXVsdHNcIikmJmkoZVtuXSkpe3ZhciBhPXAoZSxuLHIpO21bYV0/dChlW25dLGEpOnUucHVzaCh7Y29kZTpcInVudXNlZFwiLHBhdGg6YX0pfX0ocyxcImxheW91dFwiKSk6dS5wdXNoKHtjb2RlOlwibGF5b3V0XCJ9KSxpKGwpKXtmb3IodmFyIHkseD17fSxiPTA7Yjx2Lmxlbmd0aDtiKyspe3ZhciBfPXZbYl07eFt5PV8udHlwZV09KHhbeV18fDApKzEsXy5fZnVsbElucHV0Ll90ZW1wbGF0ZXx8dS5wdXNoKHtjb2RlOlwibWlzc2luZ1wiLGluZGV4Ol8uX2Z1bGxJbnB1dC5pbmRleCx0cmFjZVR5cGU6eX0pfWZvcih5IGluIGwpe3ZhciB3PWxbeV0ubGVuZ3RoLGs9eFt5XXx8MDt3Pms/dS5wdXNoKHtjb2RlOlwidW51c2VkXCIsdHJhY2VUeXBlOnksdGVtcGxhdGVDb3VudDp3LGRhdGFDb3VudDprfSk6az53JiZ1LnB1c2goe2NvZGU6XCJyZXVzZWRcIix0cmFjZVR5cGU6eSx0ZW1wbGF0ZUNvdW50OncsZGF0YUNvdW50Omt9KX19ZWxzZSB1LnB1c2goe2NvZGU6XCJkYXRhXCJ9KTtpZihmdW5jdGlvbiB0KGUscil7Zm9yKHZhciBuIGluIGUpaWYoXCJfXCIhPT1uLmNoYXJBdCgwKSl7dmFyIGE9ZVtuXSxvPXAoZSxuLHIpO2koYSk/KEFycmF5LmlzQXJyYXkoZSkmJiExPT09YS5fdGVtcGxhdGUmJmEudGVtcGxhdGVpdGVtbmFtZSYmdS5wdXNoKHtjb2RlOlwibWlzc2luZ1wiLHBhdGg6byx0ZW1wbGF0ZWl0ZW1uYW1lOmEudGVtcGxhdGVpdGVtbmFtZX0pLHQoYSxvKSk6QXJyYXkuaXNBcnJheShhKSYmZChhKSYmdChhLG8pfX0oe2RhdGE6dixsYXlvdXQ6Zn0sXCJcIiksdS5sZW5ndGgpcmV0dXJuIHUubWFwKGcpfX0se1wiLi4vbGliXCI6NzAxLFwiLi4vcGxvdHMvYXR0cmlidXRlc1wiOjc0NixcIi4uL3Bsb3RzL3Bsb3RzXCI6ODEwLFwiLi9wbG90X2NvbmZpZ1wiOjczNyxcIi4vcGxvdF9zY2hlbWFcIjo3MzgsXCIuL3Bsb3RfdGVtcGxhdGVcIjo3Mzl9XSw3NDI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi9wbG90X2FwaVwiKSxhPXQoXCIuLi9saWJcIiksbz10KFwiLi4vc25hcHNob3QvaGVscGVyc1wiKSxzPXQoXCIuLi9zbmFwc2hvdC90b3N2Z1wiKSxsPXQoXCIuLi9zbmFwc2hvdC9zdmd0b2ltZ1wiKSxjPXtmb3JtYXQ6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInBuZ1wiLFwianBlZ1wiLFwid2VicFwiLFwic3ZnXCJdLGRmbHQ6XCJwbmdcIn0sd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MX0saGVpZ2h0Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjF9LHNjYWxlOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxfSxzZXRCYWNrZ3JvdW5kOnt2YWxUeXBlOlwiYW55XCIsZGZsdDohMX0saW1hZ2VEYXRhT25seTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfX0sdT0vXmRhdGE6aW1hZ2VcXC9cXHcrO2Jhc2U2NCwvO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGgsZixwO2Z1bmN0aW9uIGQodCl7cmV0dXJuISh0IGluIGUpfHxhLnZhbGlkYXRlKGVbdF0sY1t0XSl9aWYoZT1lfHx7fSxhLmlzUGxhaW5PYmplY3QodCk/KHI9dC5kYXRhfHxbXSxoPXQubGF5b3V0fHx7fSxmPXQuY29uZmlnfHx7fSxwPXt9KToodD1hLmdldEdyYXBoRGl2KHQpLHI9YS5leHRlbmREZWVwKFtdLHQuZGF0YSksaD1hLmV4dGVuZERlZXAoe30sdC5sYXlvdXQpLGY9dC5fY29udGV4dCxwPXQuX2Z1bGxMYXlvdXR8fHt9KSwhZChcIndpZHRoXCIpJiZudWxsIT09ZS53aWR0aHx8IWQoXCJoZWlnaHRcIikmJm51bGwhPT1lLmhlaWdodCl0aHJvdyBuZXcgRXJyb3IoXCJIZWlnaHQgYW5kIHdpZHRoIHNob3VsZCBiZSBwaXhlbCB2YWx1ZXMuXCIpO2lmKCFkKFwiZm9ybWF0XCIpKXRocm93IG5ldyBFcnJvcihcIkltYWdlIGZvcm1hdCBpcyBub3QganBlZywgcG5nLCBzdmcgb3Igd2VicC5cIik7dmFyIGc9e307ZnVuY3Rpb24gdih0LHIpe3JldHVybiBhLmNvZXJjZShlLGcsYyx0LHIpfXZhciBtPXYoXCJmb3JtYXRcIikseT12KFwid2lkdGhcIikseD12KFwiaGVpZ2h0XCIpLGI9dihcInNjYWxlXCIpLF89dihcInNldEJhY2tncm91bmRcIiksdz12KFwiaW1hZ2VEYXRhT25seVwiKSxrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7ay5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsay5zdHlsZS5sZWZ0PVwiLTUwMDBweFwiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoayk7dmFyIEE9YS5leHRlbmRGbGF0KHt9LGgpO3k/QS53aWR0aD15Om51bGw9PT1lLndpZHRoJiZuKHAud2lkdGgpJiYoQS53aWR0aD1wLndpZHRoKSx4P0EuaGVpZ2h0PXg6bnVsbD09PWUuaGVpZ2h0JiZuKHAuaGVpZ2h0KSYmKEEuaGVpZ2h0PXAuaGVpZ2h0KTt2YXIgVD1hLmV4dGVuZEZsYXQoe30sZix7X2V4cG9ydGVkUGxvdDohMCxzdGF0aWNQbG90OiEwLHNldEJhY2tncm91bmQ6X30pLE09by5nZXRSZWRyYXdGdW5jKGspO2Z1bmN0aW9uIFMoKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LG8uZ2V0RGVsYXkoay5fZnVsbExheW91dCkpfSl9ZnVuY3Rpb24gRSgpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LGUpe3ZhciByPXMoayxtLGIpLG49ay5fZnVsbExheW91dC53aWR0aCxvPWsuX2Z1bGxMYXlvdXQuaGVpZ2h0O2lmKGkucHVyZ2UoayksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChrKSxcInN2Z1wiPT09bSlyZXR1cm4gdCh3P3I6XCJkYXRhOmltYWdlL3N2Zyt4bWwsXCIrZW5jb2RlVVJJQ29tcG9uZW50KHIpKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO2MuaWQ9YS5yYW5kc3RyKCksbCh7Zm9ybWF0Om0sd2lkdGg6bixoZWlnaHQ6byxzY2FsZTpiLGNhbnZhczpjLHN2ZzpyLHByb21pc2U6ITB9KS50aGVuKHQpLmNhdGNoKGUpfSl9cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsZSl7aS5wbG90KGsscixBLFQpLnRoZW4oTSkudGhlbihTKS50aGVuKEUpLnRoZW4oZnVuY3Rpb24oZSl7dChmdW5jdGlvbih0KXtyZXR1cm4gdz90LnJlcGxhY2UodSxcIlwiKTp0fShlKSl9KS5jYXRjaChmdW5jdGlvbih0KXtlKHQpfSl9KX19LHtcIi4uL2xpYlwiOjcwMSxcIi4uL3NuYXBzaG90L2hlbHBlcnNcIjo4MzMsXCIuLi9zbmFwc2hvdC9zdmd0b2ltZ1wiOjgzNSxcIi4uL3NuYXBzaG90L3Rvc3ZnXCI6ODM3LFwiLi9wbG90X2FwaVwiOjczNixcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sNzQzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2xpYlwiKSxpPXQoXCIuLi9wbG90cy9wbG90c1wiKSxhPXQoXCIuL3Bsb3Rfc2NoZW1hXCIpLG89dChcIi4vcGxvdF9jb25maWdcIikuZGZsdENvbmZpZyxzPW4uaXNQbGFpbk9iamVjdCxsPUFycmF5LmlzQXJyYXksYz1uLmlzQXJyYXlPclR5cGVkQXJyYXk7ZnVuY3Rpb24gdSh0LGUscixpLGEsbyl7bz1vfHxbXTtmb3IodmFyIGg9T2JqZWN0LmtleXModCksZj0wO2Y8aC5sZW5ndGg7ZisrKXt2YXIgdj1oW2ZdO2lmKFwidHJhbnNmb3Jtc1wiIT09dil7dmFyIG09by5zbGljZSgpO20ucHVzaCh2KTt2YXIgeT10W3ZdLHg9ZVt2XSxiPWcocix2KSxfPVwiaW5mb19hcnJheVwiPT09KGJ8fHt9KS52YWxUeXBlLHc9XCJjb2xvcnNjYWxlXCI9PT0oYnx8e30pLnZhbFR5cGUsaz0oYnx8e30pLml0ZW1zO2lmKGQocix2KSlpZihzKHkpJiZzKHgpKXUoeSx4LGIsaSxhLG0pO2Vsc2UgaWYoXyYmbCh5KSl7eS5sZW5ndGg+eC5sZW5ndGgmJmkucHVzaChwKFwidW51c2VkXCIsYSxtLmNvbmNhdCh4Lmxlbmd0aCkpKTt2YXIgQSxULE0sUyxFLEM9eC5sZW5ndGgsTD1BcnJheS5pc0FycmF5KGspO2lmKEwmJihDPU1hdGgubWluKEMsay5sZW5ndGgpKSwyPT09Yi5kaW1lbnNpb25zKWZvcihUPTA7VDxDO1QrKylpZihsKHlbVF0pKXt5W1RdLmxlbmd0aD54W1RdLmxlbmd0aCYmaS5wdXNoKHAoXCJ1bnVzZWRcIixhLG0uY29uY2F0KFQseFtUXS5sZW5ndGgpKSk7dmFyIHo9eFtUXS5sZW5ndGg7Zm9yKEE9MDtBPChMP01hdGgubWluKHosa1tUXS5sZW5ndGgpOnopO0ErKylNPUw/a1tUXVtBXTprLFM9eVtUXVtBXSxFPXhbVF1bQV0sbi52YWxpZGF0ZShTLE0pP0UhPT1TJiZFIT09K1MmJmkucHVzaChwKFwiZHluYW1pY1wiLGEsbS5jb25jYXQoVCxBKSxTLEUpKTppLnB1c2gocChcInZhbHVlXCIsYSxtLmNvbmNhdChULEEpLFMpKX1lbHNlIGkucHVzaChwKFwiYXJyYXlcIixhLG0uY29uY2F0KFQpLHlbVF0pKTtlbHNlIGZvcihUPTA7VDxDO1QrKylNPUw/a1tUXTprLFM9eVtUXSxFPXhbVF0sbi52YWxpZGF0ZShTLE0pP0UhPT1TJiZFIT09K1MmJmkucHVzaChwKFwiZHluYW1pY1wiLGEsbS5jb25jYXQoVCksUyxFKSk6aS5wdXNoKHAoXCJ2YWx1ZVwiLGEsbS5jb25jYXQoVCksUykpfWVsc2UgaWYoYi5pdGVtcyYmIV8mJmwoeSkpe3ZhciBPLEksRD1rW09iamVjdC5rZXlzKGspWzBdXSxQPVtdO2ZvcihPPTA7Tzx4Lmxlbmd0aDtPKyspe3ZhciBSPXhbT10uX2luZGV4fHxPO2lmKChJPW0uc2xpY2UoKSkucHVzaChSKSxzKHlbUl0pJiZzKHhbT10pKXtQLnB1c2goUik7dmFyIEY9eVtSXSxCPXhbT107cyhGKSYmITEhPT1GLnZpc2libGUmJiExPT09Qi52aXNpYmxlP2kucHVzaChwKFwiaW52aXNpYmxlXCIsYSxJKSk6dShGLEIsRCxpLGEsSSl9fWZvcihPPTA7Tzx5Lmxlbmd0aDtPKyspKEk9bS5zbGljZSgpKS5wdXNoKE8pLHMoeVtPXSk/LTE9PT1QLmluZGV4T2YoTykmJmkucHVzaChwKFwidW51c2VkXCIsYSxJKSk6aS5wdXNoKHAoXCJvYmplY3RcIixhLEkseVtPXSkpfWVsc2Uhcyh5KSYmcyh4KT9pLnB1c2gocChcIm9iamVjdFwiLGEsbSx5KSk6Yyh5KXx8IWMoeCl8fF98fHc/diBpbiBlP24udmFsaWRhdGUoeSxiKT9cImVudW1lcmF0ZWRcIj09PWIudmFsVHlwZSYmKGIuY29lcmNlTnVtYmVyJiZ5IT09K3h8fHkhPT14KSYmaS5wdXNoKHAoXCJkeW5hbWljXCIsYSxtLHkseCkpOmkucHVzaChwKFwidmFsdWVcIixhLG0seSkpOmkucHVzaChwKFwidW51c2VkXCIsYSxtLHkpKTppLnB1c2gocChcImFycmF5XCIsYSxtLHkpKTtlbHNlIGkucHVzaChwKFwic2NoZW1hXCIsYSxtKSl9fXJldHVybiBpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGMsaD1hLmdldCgpLGY9W10sZD17X2NvbnRleHQ6bi5leHRlbmRGbGF0KHt9LG8pfTtsKHQpPyhkLmRhdGE9bi5leHRlbmREZWVwKFtdLHQpLHI9dCk6KGQuZGF0YT1bXSxyPVtdLGYucHVzaChwKFwiYXJyYXlcIixcImRhdGFcIikpKSxzKGUpPyhkLmxheW91dD1uLmV4dGVuZERlZXAoe30sZSksYz1lKTooZC5sYXlvdXQ9e30sYz17fSxhcmd1bWVudHMubGVuZ3RoPjEmJmYucHVzaChwKFwib2JqZWN0XCIsXCJsYXlvdXRcIikpKSxpLnN1cHBseURlZmF1bHRzKGQpO2Zvcih2YXIgZz1kLl9mdWxsRGF0YSx2PXIubGVuZ3RoLG09MDttPHY7bSsrKXt2YXIgeT1yW21dLHg9W1wiZGF0YVwiLG1dO2lmKHMoeSkpe3ZhciBiPWdbbV0sXz1iLnR5cGUsdz1oLnRyYWNlc1tfXS5hdHRyaWJ1dGVzO3cudHlwZT17dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W19dfSwhMT09PWIudmlzaWJsZSYmITEhPT15LnZpc2libGUmJmYucHVzaChwKFwiaW52aXNpYmxlXCIseCkpLHUoeSxiLHcsZix4KTt2YXIgaz15LnRyYW5zZm9ybXMsQT1iLnRyYW5zZm9ybXM7aWYoayl7bChrKXx8Zi5wdXNoKHAoXCJhcnJheVwiLHgsW1widHJhbnNmb3Jtc1wiXSkpLHgucHVzaChcInRyYW5zZm9ybXNcIik7Zm9yKHZhciBUPTA7VDxrLmxlbmd0aDtUKyspe3ZhciBNPVtcInRyYW5zZm9ybXNcIixUXSxTPWtbVF0udHlwZTtpZihzKGtbVF0pKXt2YXIgRT1oLnRyYW5zZm9ybXNbU10/aC50cmFuc2Zvcm1zW1NdLmF0dHJpYnV0ZXM6e307RS50eXBlPXt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpPYmplY3Qua2V5cyhoLnRyYW5zZm9ybXMpfSx1KGtbVF0sQVtUXSxFLGYseCxNKX1lbHNlIGYucHVzaChwKFwib2JqZWN0XCIseCxNKSl9fX1lbHNlIGYucHVzaChwKFwib2JqZWN0XCIseCkpfXJldHVybiB1KGMsZC5fZnVsbExheW91dCxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmxheW91dC5sYXlvdXRBdHRyaWJ1dGVzLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXSxvPXQudHJhY2VzW2EudHlwZV0scz1vLmxheW91dEF0dHJpYnV0ZXM7cyYmKGEuc3VicGxvdD9uLmV4dGVuZEZsYXQocltvLmF0dHJpYnV0ZXMuc3VicGxvdC5kZmx0XSxzKTpuLmV4dGVuZEZsYXQocixzKSl9cmV0dXJuIHJ9KGgsZyksZixcImxheW91dFwiKSwwPT09Zi5sZW5ndGg/dm9pZCAwOmZ9O3ZhciBoPXtvYmplY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4oXCJsYXlvdXRcIj09PXQmJlwiXCI9PT1lP1wiVGhlIGxheW91dCBhcmd1bWVudFwiOlwiZGF0YVwiPT09dFswXSYmXCJcIj09PWU/XCJUcmFjZSBcIit0WzFdK1wiIGluIHRoZSBkYXRhIGFyZ3VtZW50XCI6Zih0KStcImtleSBcIitlKStcIiBtdXN0IGJlIGxpbmtlZCB0byBhbiBvYmplY3QgY29udGFpbmVyXCJ9LGFycmF5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuKFwiZGF0YVwiPT09dD9cIlRoZSBkYXRhIGFyZ3VtZW50XCI6Zih0KStcImtleSBcIitlKStcIiBtdXN0IGJlIGxpbmtlZCB0byBhbiBhcnJheSBjb250YWluZXJcIn0sc2NoZW1hOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYodCkrXCJrZXkgXCIrZStcIiBpcyBub3QgcGFydCBvZiB0aGUgc2NoZW1hXCJ9LHVudXNlZDpmdW5jdGlvbih0LGUscil7dmFyIG49cyhyKT9cImNvbnRhaW5lclwiOlwia2V5XCI7cmV0dXJuIGYodCkrbitcIiBcIitlK1wiIGRpZCBub3QgZ2V0IGNvZXJjZWRcIn0sZHluYW1pYzpmdW5jdGlvbih0LGUscixuKXtyZXR1cm5bZih0KStcImtleVwiLGUsXCIoc2V0IHRvICdcIityK1wiJylcIixcImdvdCByZXNldCB0b1wiLFwiJ1wiK24rXCInXCIsXCJkdXJpbmcgZGVmYXVsdHMuXCJdLmpvaW4oXCIgXCIpfSxpbnZpc2libGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4oZT9mKHQpK1wiaXRlbSBcIitlOlwiVHJhY2UgXCIrdFsxXSkrXCIgZ290IGRlZmF1bHRlZCB0byBiZSBub3QgdmlzaWJsZVwifSx2YWx1ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuW2YodCkrXCJrZXkgXCIrZSxcImlzIHNldCB0byBhbiBpbnZhbGlkIHZhbHVlIChcIityK1wiKVwiXS5qb2luKFwiIFwiKX19O2Z1bmN0aW9uIGYodCl7cmV0dXJuIGwodCk/XCJJbiBkYXRhIHRyYWNlIFwiK3RbMV0rXCIsIFwiOlwiSW4gXCIrdCtcIiwgXCJ9ZnVuY3Rpb24gcCh0LGUscixpLGEpe3ZhciBvLHM7cj1yfHxcIlwiLGwoZSk/KG89ZVswXSxzPWVbMV0pOihvPWUscz1udWxsKTt2YXIgYz1mdW5jdGlvbih0KXtpZighbCh0KSlyZXR1cm4gU3RyaW5nKHQpO2Zvcih2YXIgZT1cIlwiLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtcIm51bWJlclwiPT10eXBlb2Ygbj9lPWUuc3Vic3RyKDAsZS5sZW5ndGgtMSkrXCJbXCIrbitcIl1cIjplKz1uLHI8dC5sZW5ndGgtMSYmKGUrPVwiLlwiKX1yZXR1cm4gZX0ociksdT1oW3RdKGUsYyxpLGEpO3JldHVybiBuLmxvZyh1KSx7Y29kZTp0LGNvbnRhaW5lcjpvLHRyYWNlOnMscGF0aDpyLGFzdHI6Yyxtc2c6dX19ZnVuY3Rpb24gZCh0LGUpe3ZhciByPW0oZSksbj1yLmtleU1pbnVzSWQsaT1yLmlkO3JldHVybiEhKG4gaW4gdCYmdFtuXS5faXNTdWJwbG90T2JqJiZpKXx8ZSBpbiB0fWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gZSBpbiB0P3RbZV06dFttKGUpLmtleU1pbnVzSWRdfXZhciB2PW4uY291bnRlclJlZ2V4KFwiKFthLXpdKylcIik7ZnVuY3Rpb24gbSh0KXt2YXIgZT10Lm1hdGNoKHYpO3JldHVybntrZXlNaW51c0lkOmUmJmVbMV0saWQ6ZSYmZVsyXX19fSx7XCIuLi9saWJcIjo3MDEsXCIuLi9wbG90cy9wbG90c1wiOjgxMCxcIi4vcGxvdF9jb25maWdcIjo3MzcsXCIuL3Bsb3Rfc2NoZW1hXCI6NzM4fV0sNzQ0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXttb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLGRmbHQ6XCJhZnRlcmFsbFwiLHZhbHVlczpbXCJpbW1lZGlhdGVcIixcIm5leHRcIixcImFmdGVyYWxsXCJdfSxkaXJlY3Rpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImZvcndhcmRcIixcInJldmVyc2VcIl0sZGZsdDpcImZvcndhcmRcIn0sZnJvbWN1cnJlbnQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sZnJhbWU6e2R1cmF0aW9uOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDo1MDB9LHJlZHJhdzp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfX0sdHJhbnNpdGlvbjp7ZHVyYXRpb246e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjUwMCxlZGl0VHlwZTpcIm5vbmVcIn0sZWFzaW5nOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLGRmbHQ6XCJjdWJpYy1pbi1vdXRcIix2YWx1ZXM6W1wibGluZWFyXCIsXCJxdWFkXCIsXCJjdWJpY1wiLFwic2luXCIsXCJleHBcIixcImNpcmNsZVwiLFwiZWxhc3RpY1wiLFwiYmFja1wiLFwiYm91bmNlXCIsXCJsaW5lYXItaW5cIixcInF1YWQtaW5cIixcImN1YmljLWluXCIsXCJzaW4taW5cIixcImV4cC1pblwiLFwiY2lyY2xlLWluXCIsXCJlbGFzdGljLWluXCIsXCJiYWNrLWluXCIsXCJib3VuY2UtaW5cIixcImxpbmVhci1vdXRcIixcInF1YWQtb3V0XCIsXCJjdWJpYy1vdXRcIixcInNpbi1vdXRcIixcImV4cC1vdXRcIixcImNpcmNsZS1vdXRcIixcImVsYXN0aWMtb3V0XCIsXCJiYWNrLW91dFwiLFwiYm91bmNlLW91dFwiLFwibGluZWFyLWluLW91dFwiLFwicXVhZC1pbi1vdXRcIixcImN1YmljLWluLW91dFwiLFwic2luLWluLW91dFwiLFwiZXhwLWluLW91dFwiLFwiY2lyY2xlLWluLW91dFwiLFwiZWxhc3RpYy1pbi1vdXRcIixcImJhY2staW4tb3V0XCIsXCJib3VuY2UtaW4tb3V0XCJdLGVkaXRUeXBlOlwibm9uZVwifSxvcmRlcmluZzp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibGF5b3V0IGZpcnN0XCIsXCJ0cmFjZXMgZmlyc3RcIl0sZGZsdDpcImxheW91dCBmaXJzdFwiLGVkaXRUeXBlOlwibm9uZVwifX19fSx7fV0sNzQ1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2xpYlwiKSxpPXQoXCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGEsbyxzPXIubmFtZSxsPXIuaW5jbHVzaW9uQXR0cnx8XCJ2aXNpYmxlXCIsYz1lW3NdLHU9bi5pc0FycmF5T3JUeXBlZEFycmF5KHRbc10pP3Rbc106W10saD1lW3NdPVtdLGY9aS5hcnJheVRlbXBsYXRlcihlLHMsbCk7Zm9yKGE9MDthPHUubGVuZ3RoO2ErKyl7dmFyIHA9dVthXTtuLmlzUGxhaW5PYmplY3QocCk/bz1mLm5ld0l0ZW0ocCk6KG89Zi5uZXdJdGVtKHt9KSlbbF09ITEsby5faW5kZXg9YSwhMSE9PW9bbF0mJnIuaGFuZGxlSXRlbURlZmF1bHRzKHAsbyxlLHIpLGgucHVzaChvKX12YXIgZD1mLmRlZmF1bHRJdGVtcygpO2ZvcihhPTA7YTxkLmxlbmd0aDthKyspKG89ZFthXSkuX2luZGV4PWgubGVuZ3RoLHIuaGFuZGxlSXRlbURlZmF1bHRzKHt9LG8sZSxyLHt9KSxoLnB1c2gobyk7aWYobi5pc0FycmF5T3JUeXBlZEFycmF5KGMpKXt2YXIgZz1NYXRoLm1pbihjLmxlbmd0aCxoLmxlbmd0aCk7Zm9yKGE9MDthPGc7YSsrKW4ucmVsaW5rUHJpdmF0ZUtleXMoaFthXSxjW2FdKX1yZXR1cm4gaH19LHtcIi4uL2xpYlwiOjcwMSxcIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3Mzl9XSw3NDY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz17dHlwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W10sZGZsdDpcInNjYXR0ZXJcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIixfbm9UZW1wbGF0aW5nOiEwfSx2aXNpYmxlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbITAsITEsXCJsZWdlbmRvbmx5XCJdLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LHNob3dsZWdlbmQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcInN0eWxlXCJ9LGxlZ2VuZGdyb3VwOnt2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwic3R5bGVcIn0sb3BhY2l0eTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZTpcInN0eWxlXCJ9LG5hbWU6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcInN0eWxlXCJ9LHVpZDp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwicGxvdFwiLGFuaW06ITB9LGlkczp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIixhbmltOiEwfSxjdXN0b21kYXRhOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxzZWxlY3RlZHBvaW50czp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsY1wifSxob3ZlcmluZm86e3ZhbFR5cGU6XCJmbGFnbGlzdFwiLGZsYWdzOltcInhcIixcInlcIixcInpcIixcInRleHRcIixcIm5hbWVcIl0sZXh0cmFzOltcImFsbFwiLFwibm9uZVwiLFwic2tpcFwiXSxhcnJheU9rOiEwLGRmbHQ6XCJhbGxcIixlZGl0VHlwZTpcIm5vbmVcIn0saG92ZXJsYWJlbDpuLmhvdmVybGFiZWwsc3RyZWFtOnt0b2tlbjp7dmFsVHlwZTpcInN0cmluZ1wiLG5vQmxhbms6ITAsc3RyaWN0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSxtYXhwb2ludHM6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MWU0LGRmbHQ6NTAwLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0sdHJhbnNmb3Jtczp7X2lzTGlua2VkVG9BcnJheTpcInRyYW5zZm9ybVwiLGVkaXRUeXBlOlwiY2FsY1wifSx1aXJldmlzaW9uOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJub25lXCJ9fX0se1wiLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzXCI6NjA4fV0sNzQ3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXt4YXhpczp7dmFsVHlwZTpcInN1YnBsb3RpZFwiLGRmbHQ6XCJ4XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LHlheGlzOnt2YWxUeXBlOlwic3VicGxvdGlkXCIsZGZsdDpcInlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn19fSx7fV0sNzQ4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkZQX1NBRkUsbz10KFwiLi4vLi4vcmVnaXN0cnlcIik7ZnVuY3Rpb24gcyh0LGUpe3ZhciByLG4sYT1bXSxvPWwoZSkscz1jKHQsZSksdT1zLm1pbixoPXMubWF4O2lmKDA9PT11Lmxlbmd0aHx8MD09PWgubGVuZ3RoKXJldHVybiBpLnNpbXBsZU1hcChlLnJhbmdlLGUucjJsKTt2YXIgZj11WzBdLnZhbCxwPWhbMF0udmFsO2ZvcihyPTE7cjx1Lmxlbmd0aCYmZj09PXA7cisrKWY9TWF0aC5taW4oZix1W3JdLnZhbCk7Zm9yKHI9MTtyPGgubGVuZ3RoJiZmPT09cDtyKyspcD1NYXRoLm1heChwLGhbcl0udmFsKTt2YXIgZD0hMTtpZihlLnJhbmdlKXt2YXIgZz1pLnNpbXBsZU1hcChlLnJhbmdlLGUucjJsKTtkPWdbMV08Z1swXX1cInJldmVyc2VkXCI9PT1lLmF1dG9yYW5nZSYmKGQ9ITAsZS5hdXRvcmFuZ2U9ITApO3ZhciB2LG0seSx4LGIsXyx3PWUucmFuZ2Vtb2RlLGs9XCJ0b3plcm9cIj09PXcsQT1cIm5vbm5lZ2F0aXZlXCI9PT13LFQ9ZS5fbGVuZ3RoLE09VC8xMCxTPTA7Zm9yKHI9MDtyPHUubGVuZ3RoO3IrKylmb3Iodj11W3JdLG49MDtuPGgubGVuZ3RoO24rKykoXz0obT1oW25dKS52YWwtdi52YWwpPjAmJigoYj1ULW8odiktbyhtKSk+TT9fL2I+UyYmKHk9dix4PW0sUz1fL2IpOl8vVD5TJiYoeT17dmFsOnYudmFsLHBhZDowfSx4PXt2YWw6bS52YWwscGFkOjB9LFM9Xy9UKSk7aWYoZj09PXApe3ZhciBFPWYtMSxDPWYrMTtpZihrKWlmKDA9PT1mKWE9WzAsMV07ZWxzZXt2YXIgTD0oZj4wP2g6dSkucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsbyhlKSl9LDApLHo9Zi8oMS1NYXRoLm1pbiguNSxML1QpKTthPWY+MD9bMCx6XTpbeiwwXX1lbHNlIGE9QT9bTWF0aC5tYXgoMCxFKSxNYXRoLm1heCgxLEMpXTpbRSxDXX1lbHNlIGs/KHkudmFsPj0wJiYoeT17dmFsOjAscGFkOjB9KSx4LnZhbDw9MCYmKHg9e3ZhbDowLHBhZDowfSkpOkEmJih5LnZhbC1TKm8oeSk8MCYmKHk9e3ZhbDowLHBhZDowfSkseC52YWw8PTAmJih4PXt2YWw6MSxwYWQ6MH0pKSxTPSh4LnZhbC15LnZhbCkvKFQtbyh5KS1vKHgpKSxhPVt5LnZhbC1TKm8oeSkseC52YWwrUypvKHgpXTtyZXR1cm4gZCYmYS5yZXZlcnNlKCksaS5zaW1wbGVNYXAoYSxlLmwycnx8TnVtYmVyKX1mdW5jdGlvbiBsKHQpe3ZhciBlPXQuX2xlbmd0aC8yMDtyZXR1cm5cImRvbWFpblwiPT09dC5jb25zdHJhaW4mJnQuX2lucHV0RG9tYWluJiYoZSo9KHQuX2lucHV0RG9tYWluWzFdLXQuX2lucHV0RG9tYWluWzBdKS8odC5kb21haW5bMV0tdC5kb21haW5bMF0pKSxmdW5jdGlvbih0KXtyZXR1cm4gdC5wYWQrKHQuZXh0cmFwYWQ/ZTowKX19ZnVuY3Rpb24gYyh0LGUpe3ZhciByLG4saSxhPWUuX2lkLG89dC5fZnVsbERhdGEscz10Ll9mdWxsTGF5b3V0LGw9W10sYz1bXTtmdW5jdGlvbiBmKHQsZSl7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG89dFtlW3JdXSxzPShvLl9leHRyZW1lc3x8e30pW2FdO2lmKCEwPT09by52aXNpYmxlJiZzKXtmb3Iobj0wO248cy5taW4ubGVuZ3RoO24rKylpPXMubWluW25dLHUobCxpLnZhbCxpLnBhZCx7ZXh0cmFwYWQ6aS5leHRyYXBhZH0pO2ZvcihuPTA7bjxzLm1heC5sZW5ndGg7bisrKWk9cy5tYXhbbl0saChjLGkudmFsLGkucGFkLHtleHRyYXBhZDppLmV4dHJhcGFkfSl9fX1yZXR1cm4gZihvLGUuX3RyYWNlSW5kaWNlcyksZihzLmFubm90YXRpb25zfHxbXSxlLl9hbm5JbmRpY2VzfHxbXSksZihzLnNoYXBlc3x8W10sZS5fc2hhcGVJbmRpY2VzfHxbXSkse21pbjpsLG1heDpjfX1mdW5jdGlvbiB1KHQsZSxyLG4pe2YodCxlLHIsbixkKX1mdW5jdGlvbiBoKHQsZSxyLG4pe2YodCxlLHIsbixnKX1mdW5jdGlvbiBmKHQsZSxyLG4saSl7Zm9yKHZhciBhPW4udG96ZXJvLG89bi5leHRyYXBhZCxzPSEwLGw9MDtsPHQubGVuZ3RoJiZzO2wrKyl7dmFyIGM9dFtsXTtpZihpKGMudmFsLGUpJiZjLnBhZD49ciYmKGMuZXh0cmFwYWR8fCFvKSl7cz0hMTticmVha31pKGUsYy52YWwpJiZjLnBhZDw9ciYmKG98fCFjLmV4dHJhcGFkKSYmKHQuc3BsaWNlKGwsMSksbC0tKX1pZihzKXt2YXIgdT1hJiYwPT09ZTt0LnB1c2goe3ZhbDplLHBhZDp1PzA6cixleHRyYXBhZDohdSYmb30pfX1mdW5jdGlvbiBwKHQpe3JldHVybiBuKHQpJiZNYXRoLmFicyh0KTxhfWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4gdDw9ZX1mdW5jdGlvbiBnKHQsZSl7cmV0dXJuIHQ+PWV9ZS5leHBvcnRzPXtnZXRBdXRvUmFuZ2U6cyxtYWtlUGFkRm46bCxkb0F1dG9SYW5nZTpmdW5jdGlvbih0LGUpe2lmKGUuc2V0U2NhbGUoKSxlLmF1dG9yYW5nZSl7ZS5yYW5nZT1zKHQsZSksZS5fcj1lLnJhbmdlLnNsaWNlKCksZS5fcmw9aS5zaW1wbGVNYXAoZS5fcixlLnIybCk7dmFyIHI9ZS5faW5wdXQsbj17fTtuW2UuX2F0dHIrXCIucmFuZ2VcIl09ZS5yYW5nZSxuW2UuX2F0dHIrXCIuYXV0b3JhbmdlXCJdPWUuYXV0b3JhbmdlLG8uY2FsbChcIl9zdG9yZURpcmVjdEdVSUVkaXRcIix0LmxheW91dCx0Ll9mdWxsTGF5b3V0Ll9wcmVHVUksbiksci5yYW5nZT1lLnJhbmdlLnNsaWNlKCksci5hdXRvcmFuZ2U9ZS5hdXRvcmFuZ2V9dmFyIGE9ZS5fYW5jaG9yQXhpcztpZihhJiZhLnJhbmdlc2xpZGVyKXt2YXIgbD1hLnJhbmdlc2xpZGVyW2UuX25hbWVdO2wmJlwiYXV0b1wiPT09bC5yYW5nZW1vZGUmJihsLnJhbmdlPXModCxlKSksYS5faW5wdXQucmFuZ2VzbGlkZXJbZS5fbmFtZV09aS5leHRlbmRGbGF0KHt9LGwpfX0sZmluZEV4dHJlbWVzOmZ1bmN0aW9uKHQsZSxyKXtyfHwocj17fSk7dC5fbXx8dC5zZXRTY2FsZSgpO3ZhciBpLG8scyxsLGMsZixkLGcsdixtPVtdLHk9W10seD1lLmxlbmd0aCxiPXIucGFkZGVkfHwhMSxfPXIudG96ZXJvJiYoXCJsaW5lYXJcIj09PXQudHlwZXx8XCItXCI9PT10LnR5cGUpLHc9XCJsb2dcIj09PXQudHlwZSxrPSExO2Z1bmN0aW9uIEEodCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gaz0hMCxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5tYXgoTnVtYmVyKHRbZV18fDApLDApfTt2YXIgZT1NYXRoLm1heChOdW1iZXIodHx8MCksMCk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBUPUEoKHQuX20+MD9yLnBwYWRwbHVzOnIucHBhZG1pbnVzKXx8ci5wcGFkfHwwKSxNPUEoKHQuX20+MD9yLnBwYWRtaW51czpyLnBwYWRwbHVzKXx8ci5wcGFkfHwwKSxTPUEoci52cGFkcGx1c3x8ci52cGFkKSxFPUEoci52cGFkbWludXN8fHIudnBhZCk7aWYoIWspe2lmKGc9MS8wLHY9LTEvMCx3KWZvcihpPTA7aTx4O2krKykobz1lW2ldKTxnJiZvPjAmJihnPW8pLG8+diYmbzxhJiYodj1vKTtlbHNlIGZvcihpPTA7aTx4O2krKykobz1lW2ldKTxnJiZvPi1hJiYoZz1vKSxvPnYmJm88YSYmKHY9byk7ZT1bZyx2XSx4PTJ9dmFyIEM9e3RvemVybzpfLGV4dHJhcGFkOmJ9O2Z1bmN0aW9uIEwocil7cz1lW3JdLG4ocykmJihmPVQociksZD1NKHIpLGc9cy1FKHIpLHY9cytTKHIpLHcmJmc8di8xMCYmKGc9di8xMCksbD10LmMybChnKSxjPXQuYzJsKHYpLF8mJihsPU1hdGgubWluKDAsbCksYz1NYXRoLm1heCgwLGMpKSxwKGwpJiZ1KG0sbCxkLEMpLHAoYykmJmgoeSxjLGYsQykpfXZhciB6PU1hdGgubWluKDYseCk7Zm9yKGk9MDtpPHo7aSsrKUwoaSk7Zm9yKGk9eC0xO2k+PXo7aS0tKUwoaSk7cmV0dXJue21pbjptLG1heDp5LG9wdHM6cn19LGNvbmNhdEV4dHJlbWVzOmN9fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDc0OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxhPXQoXCIuLi8uLi9wbG90cy9wbG90c1wiKSxvPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxzPXQoXCIuLi8uLi9saWJcIiksbD10KFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCIpLGM9dChcIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzXCIpLHU9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksaD10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLGY9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIikscD10KFwiLi9jbGVhbl90aWNrc1wiKSxkPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLGc9ZC5PTkVBVkdZRUFSLHY9ZC5PTkVBVkdNT05USCxtPWQuT05FREFZLHk9ZC5PTkVIT1VSLHg9ZC5PTkVNSU4sYj1kLk9ORVNFQyxfPWQuTUlOVVNfU0lHTix3PWQuQkFETlVNLGs9dChcIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIikuTUlEX1NISUZULEE9dChcIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIikuTElORV9TUEFDSU5HLFQ9ZS5leHBvcnRzPXt9O1Quc2V0Q29udmVydD10KFwiLi9zZXRfY29udmVydFwiKTt2YXIgTT10KFwiLi9heGlzX2F1dG90eXBlXCIpLFM9dChcIi4vYXhpc19pZHNcIik7VC5pZDJuYW1lPVMuaWQybmFtZSxULm5hbWUyaWQ9Uy5uYW1lMmlkLFQuY2xlYW5JZD1TLmNsZWFuSWQsVC5saXN0PVMubGlzdCxULmxpc3RJZHM9Uy5saXN0SWRzLFQuZ2V0RnJvbUlkPVMuZ2V0RnJvbUlkLFQuZ2V0RnJvbVRyYWNlPVMuZ2V0RnJvbVRyYWNlO3ZhciBFPXQoXCIuL2F1dG9yYW5nZVwiKTtULmdldEF1dG9SYW5nZT1FLmdldEF1dG9SYW5nZSxULmZpbmRFeHRyZW1lcz1FLmZpbmRFeHRyZW1lcyxULmNvZXJjZVJlZj1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89bi5jaGFyQXQobi5sZW5ndGgtMSksbD1yLl9mdWxsTGF5b3V0Ll9zdWJwbG90c1tvK1wiYXhpc1wiXSxjPW4rXCJyZWZcIix1PXt9O3JldHVybiBpfHwoaT1sWzBdfHxhKSxhfHwoYT1pKSx1W2NdPXt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpsLmNvbmNhdChhP1thXTpbXSksZGZsdDppfSxzLmNvZXJjZSh0LGUsdSxjKX0sVC5jb2VyY2VQb3NpdGlvbj1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8sbDtpZihcInBhcGVyXCI9PT1ufHxcInBpeGVsXCI9PT1uKW89cy5lbnN1cmVOdW1iZXIsbD1yKGksYSk7ZWxzZXt2YXIgYz1ULmdldEZyb21JZChlLG4pO2w9cihpLGE9Yy5mcmFjdGlvbjJyKGEpKSxvPWMuY2xlYW5Qb3N9dFtpXT1vKGwpfSxULmNsZWFuUG9zaXRpb249ZnVuY3Rpb24odCxlLHIpe3JldHVybihcInBhcGVyXCI9PT1yfHxcInBpeGVsXCI9PT1yP3MuZW5zdXJlTnVtYmVyOlQuZ2V0RnJvbUlkKGUscikuY2xlYW5Qb3MpKHQpfSxULnJlZHJhd0NvbXBvbmVudHM9ZnVuY3Rpb24odCxlKXtlPWV8fFQubGlzdElkcyh0KTt2YXIgcj10Ll9mdWxsTGF5b3V0O2Z1bmN0aW9uIG4obixpLGEscyl7Zm9yKHZhciBsPW8uZ2V0Q29tcG9uZW50TWV0aG9kKG4saSksYz17fSx1PTA7dTxlLmxlbmd0aDt1KyspZm9yKHZhciBoPXJbVC5pZDJuYW1lKGVbdV0pXVthXSxmPTA7ZjxoLmxlbmd0aDtmKyspe3ZhciBwPWhbZl07aWYoIWNbcF0mJihsKHQscCksY1twXT0xLHMpKXJldHVybn19bihcImFubm90YXRpb25zXCIsXCJkcmF3T25lXCIsXCJfYW5uSW5kaWNlc1wiKSxuKFwic2hhcGVzXCIsXCJkcmF3T25lXCIsXCJfc2hhcGVJbmRpY2VzXCIpLG4oXCJpbWFnZXNcIixcImRyYXdcIixcIl9pbWdJbmRpY2VzXCIsITApfTt2YXIgQz1ULmdldERhdGFDb252ZXJzaW9ucz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPVwieFwiPT09cnx8XCJ5XCI9PT1yfHxcInpcIj09PXI/cjpuO2lmKEFycmF5LmlzQXJyYXkoYSkpe2lmKGk9e3R5cGU6TShuKSxfY2F0ZWdvcmllczpbXX0sVC5zZXRDb252ZXJ0KGkpLFwiY2F0ZWdvcnlcIj09PWkudHlwZSlmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKylpLmQyYyhuW29dKX1lbHNlIGk9VC5nZXRGcm9tVHJhY2UodCxlLGEpO3JldHVybiBpP3tkMmM6aS5kMmMsYzJkOmkuYzJkfTpcImlkc1wiPT09YT97ZDJjOnosYzJkOnp9OntkMmM6TCxjMmQ6TH19O2Z1bmN0aW9uIEwodCl7cmV0dXJuK3R9ZnVuY3Rpb24geih0KXtyZXR1cm4gU3RyaW5nKHQpfVQuZ2V0RGF0YVRvQ29vcmRGdW5jPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBDKHQsZSxyLG4pLmQyY30sVC5jb3VudGVyTGV0dGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckF0KDApO3JldHVyblwieFwiPT09ZT9cInlcIjpcInlcIj09PWU/XCJ4XCI6dm9pZCAwfSxULm1pbkR0aWNrPWZ1bmN0aW9uKHQsZSxyLG4pey0xPT09W1wibG9nXCIsXCJjYXRlZ29yeVwiLFwibXVsdGljYXRlZ29yeVwiXS5pbmRleE9mKHQudHlwZSkmJm4/dm9pZCAwPT09dC5fbWluRHRpY2s/KHQuX21pbkR0aWNrPWUsdC5fZm9yY2VUaWNrMD1yKTp0Ll9taW5EdGljayYmKCh0Ll9taW5EdGljay9lKzFlLTYpJTE8MmUtNiYmKChyLXQuX2ZvcmNlVGljazApL2UlMSsxLjAwMDAwMSklMTwyZS02Pyh0Ll9taW5EdGljaz1lLHQuX2ZvcmNlVGljazA9cik6KChlL3QuX21pbkR0aWNrKzFlLTYpJTE+MmUtNnx8KChyLXQuX2ZvcmNlVGljazApL3QuX21pbkR0aWNrJTErMS4wMDAwMDEpJTE+MmUtNikmJih0Ll9taW5EdGljaz0wKSk6dC5fbWluRHRpY2s9MH0sVC5zYXZlUmFuZ2VJbml0aWFsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVQubGlzdCh0LFwiXCIsITApLG49ITEsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldLG89dm9pZCAwPT09YS5fcmFuZ2VJbml0aWFsLHM9b3x8IShhLnJhbmdlWzBdPT09YS5fcmFuZ2VJbml0aWFsWzBdJiZhLnJhbmdlWzFdPT09YS5fcmFuZ2VJbml0aWFsWzFdKTsobyYmITE9PT1hLmF1dG9yYW5nZXx8ZSYmcykmJihhLl9yYW5nZUluaXRpYWw9YS5yYW5nZS5zbGljZSgpLG49ITApfXJldHVybiBufSxULnNhdmVTaG93U3Bpa2VJbml0aWFsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVQubGlzdCh0LFwiXCIsITApLG49ITEsaT1cIm9uXCIsYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgbz1yW2FdLHM9dm9pZCAwPT09by5fc2hvd1NwaWtlSW5pdGlhbCxsPXN8fCEoby5zaG93c3Bpa2VzPT09by5fc2hvd3NwaWtlcyk7KHN8fGUmJmwpJiYoby5fc2hvd1NwaWtlSW5pdGlhbD1vLnNob3dzcGlrZXMsbj0hMCksXCJvblwiIT09aXx8by5zaG93c3Bpa2VzfHwoaT1cIm9mZlwiKX1yZXR1cm4gdC5fZnVsbExheW91dC5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD1pLG59LFQuYXV0b0Jpbj1mdW5jdGlvbih0LGUscixuLGEsbyl7dmFyIGwsYz1zLmFnZ051bXMoTWF0aC5taW4sbnVsbCx0KSx1PXMuYWdnTnVtcyhNYXRoLm1heCxudWxsLHQpO2lmKFwiY2F0ZWdvcnlcIj09PWUudHlwZXx8XCJtdWx0aWNhdGVnb3J5XCI9PT1lLnR5cGUpcmV0dXJue3N0YXJ0OmMtLjUsZW5kOnUrLjUsc2l6ZTpNYXRoLm1heCgxLE1hdGgucm91bmQobyl8fDEpLF9kYXRhU3Bhbjp1LWN9O2lmKGF8fChhPWUuY2FsZW5kYXIpLGw9XCJsb2dcIj09PWUudHlwZT97dHlwZTpcImxpbmVhclwiLHJhbmdlOltjLHVdfTp7dHlwZTplLnR5cGUscmFuZ2U6cy5zaW1wbGVNYXAoW2MsdV0sZS5jMnIsMCxhKSxjYWxlbmRhcjphfSxULnNldENvbnZlcnQobCksbz1vJiZwLmR0aWNrKG8sbC50eXBlKSlsLmR0aWNrPW8sbC50aWNrMD1wLnRpY2swKHZvaWQgMCxsLnR5cGUsYSk7ZWxzZXt2YXIgaDtpZihyKWg9KHUtYykvcjtlbHNle3ZhciBmPXMuZGlzdGluY3RWYWxzKHQpLGQ9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhmLm1pbkRpZmYpL01hdGguTE4xMCkpLGc9ZCpzLnJvdW5kVXAoZi5taW5EaWZmL2QsWy45LDEuOSw0LjksOS45XSwhMCk7aD1NYXRoLm1heChnLDIqcy5zdGRldih0KS9NYXRoLnBvdyh0Lmxlbmd0aCxuPy4yNTouNCkpLGkoaCl8fChoPTEpfVQuYXV0b1RpY2tzKGwsaCl9dmFyIHYseT1sLmR0aWNrLHg9VC50aWNrSW5jcmVtZW50KFQudGlja0ZpcnN0KGwpLHksXCJyZXZlcnNlXCIsYSk7aWYoXCJudW1iZXJcIj09dHlwZW9mIHkpdj0oeD1mdW5jdGlvbih0LGUscixuLGEpe3ZhciBvPTAscz0wLGw9MCxjPTA7ZnVuY3Rpb24gdShlKXtyZXR1cm4oMSsxMDAqKGUtdCkvci5kdGljayklMTAwPDJ9Zm9yKHZhciBoPTA7aDxlLmxlbmd0aDtoKyspZVtoXSUxPT0wP2wrKzppKGVbaF0pfHxjKyssdShlW2hdKSYmbysrLHUoZVtoXStyLmR0aWNrLzIpJiZzKys7dmFyIGY9ZS5sZW5ndGgtYztpZihsPT09ZiYmXCJkYXRlXCIhPT1yLnR5cGUpci5kdGljazwxP3Q9bi0uNSpyLmR0aWNrOih0LT0uNSkrci5kdGljazxuJiYodCs9ci5kdGljayk7ZWxzZSBpZihzPC4xKmYmJihvPi4zKmZ8fHUobil8fHUoYSkpKXt2YXIgcD1yLmR0aWNrLzI7dCs9dCtwPG4/cDotcH1yZXR1cm4gdH0oeCx0LGwsYyx1KSkrKDErTWF0aC5mbG9vcigodS14KS95KSkqeTtlbHNlIGZvcihcIk1cIj09PWwuZHRpY2suY2hhckF0KDApJiYoeD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXMuZmluZEV4YWN0RGF0ZXMoZSxpKTtpZihhLmV4YWN0RGF5cz4uOCl7dmFyIG89TnVtYmVyKHIuc3Vic3RyKDEpKTthLmV4YWN0WWVhcnM+LjgmJm8lMTI9PTA/dD1ULnRpY2tJbmNyZW1lbnQodCxcIk02XCIsXCJyZXZlcnNlXCIpKzEuNSptOmEuZXhhY3RNb250aHM+Ljg/dD1ULnRpY2tJbmNyZW1lbnQodCxcIk0xXCIsXCJyZXZlcnNlXCIpKzE1LjUqbTp0LT1tLzI7dmFyIGw9VC50aWNrSW5jcmVtZW50KHQscik7aWYobDw9bilyZXR1cm4gbH1yZXR1cm4gdH0oeCx0LHksYyxhKSksdj14LDA7djw9dTspdj1ULnRpY2tJbmNyZW1lbnQodix5LCExLGEpLDA7cmV0dXJue3N0YXJ0OmUuYzJyKHgsMCxhKSxlbmQ6ZS5jMnIodiwwLGEpLHNpemU6eSxfZGF0YVNwYW46dS1jfX0sVC5wcmVwVGlja3M9ZnVuY3Rpb24odCl7dmFyIGU9cy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCk7aWYoXCJhdXRvXCI9PT10LnRpY2ttb2RlfHwhdC5kdGljayl7dmFyIHIsbj10Lm50aWNrcztufHwoXCJjYXRlZ29yeVwiPT09dC50eXBlfHxcIm11bHRpY2F0ZWdvcnlcIj09PXQudHlwZT8ocj10LnRpY2tmb250PzEuMioodC50aWNrZm9udC5zaXplfHwxMik6MTUsbj10Ll9sZW5ndGgvcik6KHI9XCJ5XCI9PT10Ll9pZC5jaGFyQXQoMCk/NDA6ODAsbj1zLmNvbnN0cmFpbih0Ll9sZW5ndGgvciw0LDkpKzEpLFwicmFkaWFsYXhpc1wiPT09dC5fbmFtZSYmKG4qPTIpKSxcImFycmF5XCI9PT10LnRpY2ttb2RlJiYobio9MTAwKSxULmF1dG9UaWNrcyh0LE1hdGguYWJzKGVbMV0tZVswXSkvbiksdC5fbWluRHRpY2s+MCYmdC5kdGljazwyKnQuX21pbkR0aWNrJiYodC5kdGljaz10Ll9taW5EdGljayx0LnRpY2swPXQubDJyKHQuX2ZvcmNlVGljazApKX10LnRpY2swfHwodC50aWNrMD1cImRhdGVcIj09PXQudHlwZT9cIjIwMDAtMDEtMDFcIjowKSxcImRhdGVcIj09PXQudHlwZSYmdC5kdGljazwuMSYmKHQuZHRpY2s9LjEpLGoodCl9LFQuY2FsY1RpY2tzPWZ1bmN0aW9uKHQpe1QucHJlcFRpY2tzKHQpO3ZhciBlPXMuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpO2lmKFwiYXJyYXlcIj09PXQudGlja21vZGUpcmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQudGlja3ZhbHMscj10LnRpY2t0ZXh0LG49bmV3IEFycmF5KGUubGVuZ3RoKSxpPXMuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpLGE9MS4wMDAxKmlbMF0tMWUtNCppWzFdLG89MS4wMDAxKmlbMV0tMWUtNCppWzBdLGw9TWF0aC5taW4oYSxvKSxjPU1hdGgubWF4KGEsbyksdT0wO0FycmF5LmlzQXJyYXkocil8fChyPVtdKTt2YXIgaD1cImNhdGVnb3J5XCI9PT10LnR5cGU/dC5kMmxfbm9hZGQ6dC5kMmw7XCJsb2dcIj09PXQudHlwZSYmXCJMXCIhPT1TdHJpbmcodC5kdGljaykuY2hhckF0KDApJiYodC5kdGljaz1cIkxcIitNYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubWluKHQucmFuZ2VbMF0sdC5yYW5nZVsxXSkpLTEpKTtmb3IodmFyIGY9MDtmPGUubGVuZ3RoO2YrKyl7dmFyIHA9aChlW2ZdKTtwPmwmJnA8YyYmKHZvaWQgMD09PXJbZl0/blt1XT1ULnRpY2tUZXh0KHQscCk6blt1XT1WKHQscCxTdHJpbmcocltmXSkpLHUrKyl9dTxlLmxlbmd0aCYmbi5zcGxpY2UodSxlLmxlbmd0aC11KTtyZXR1cm4gbn0odCk7dC5fdG1pbj1ULnRpY2tGaXJzdCh0KTt2YXIgcj0xLjAwMDEqZVswXS0xZS00KmVbMV0sbj0xLjAwMDEqZVsxXS0xZS00KmVbMF0saT1lWzFdPGVbMF07aWYodC5fdG1pbjxyIT09aSlyZXR1cm5bXTt2YXIgYT1bXTtcImNhdGVnb3J5XCIhPT10LnR5cGUmJlwibXVsdGljYXRlZ29yeVwiIT09dC50eXBlfHwobj1pP01hdGgubWF4KC0uNSxuKTpNYXRoLm1pbih0Ll9jYXRlZ29yaWVzLmxlbmd0aC0uNSxuKSk7Zm9yKHZhciBvPW51bGwsbD1NYXRoLm1heCgxZTMsdC5fbGVuZ3RofHwwKSxjPXQuX3RtaW47KGk/Yz49bjpjPD1uKSYmIShhLmxlbmd0aD5sfHxjPT09byk7Yz1ULnRpY2tJbmNyZW1lbnQoYyx0LmR0aWNrLGksdC5jYWxlbmRhcikpbz1jLGEucHVzaChjKTtydCh0KSYmMzYwPT09TWF0aC5hYnMoZVsxXS1lWzBdKSYmYS5wb3AoKSx0Ll90bWF4PWFbYS5sZW5ndGgtMV0sdC5fcHJldkRhdGVIZWFkPVwiXCIsdC5faW5DYWxjVGlja3M9ITA7Zm9yKHZhciB1PW5ldyBBcnJheShhLmxlbmd0aCksaD0wO2g8YS5sZW5ndGg7aCsrKXVbaF09VC50aWNrVGV4dCh0LGFbaF0pO3JldHVybiB0Ll9pbkNhbGNUaWNrcz0hMSx1fTt2YXIgTz1bMiw1LDEwXSxJPVsxLDIsMyw2LDEyXSxEPVsxLDIsNSwxMCwxNSwzMF0sUD1bMSwyLDMsNywxNF0sUj1bLS4wNDYsMCwuMzAxLC40NzcsLjYwMiwuNjk5LC43NzgsLjg0NSwuOTAzLC45NTQsMV0sRj1bLS4zMDEsMCwuMzAxLC42OTksMV0sQj1bMTUsMzAsNDUsOTAsMTgwXTtmdW5jdGlvbiBOKHQsZSxyKXtyZXR1cm4gZSpzLnJvdW5kVXAodC9lLHIpfWZ1bmN0aW9uIGoodCl7dmFyIGU9dC5kdGljaztpZih0Ll90aWNrZXhwb25lbnQ9MCxpKGUpfHxcInN0cmluZ1wiPT10eXBlb2YgZXx8KGU9MSksXCJjYXRlZ29yeVwiIT09dC50eXBlJiZcIm11bHRpY2F0ZWdvcnlcIiE9PXQudHlwZXx8KHQuX3RpY2tyb3VuZD1udWxsKSxcImRhdGVcIj09PXQudHlwZSl7dmFyIHI9dC5yMmwodC50aWNrMCksbj10LmwycihyKS5yZXBsYWNlKC8oXi18aSkvZyxcIlwiKSxhPW4ubGVuZ3RoO2lmKFwiTVwiPT09U3RyaW5nKGUpLmNoYXJBdCgwKSlhPjEwfHxcIjAxLTAxXCIhPT1uLnN1YnN0cig1KT90Ll90aWNrcm91bmQ9XCJkXCI6dC5fdGlja3JvdW5kPStlLnN1YnN0cigxKSUxMj09MD9cInlcIjpcIm1cIjtlbHNlIGlmKGU+PW0mJmE8PTEwfHxlPj0xNSptKXQuX3RpY2tyb3VuZD1cImRcIjtlbHNlIGlmKGU+PXgmJmE8PTE2fHxlPj15KXQuX3RpY2tyb3VuZD1cIk1cIjtlbHNlIGlmKGU+PWImJmE8PTE5fHxlPj14KXQuX3RpY2tyb3VuZD1cIlNcIjtlbHNle3ZhciBvPXQubDJyKHIrZSkucmVwbGFjZSgvXi0vLFwiXCIpLmxlbmd0aDt0Ll90aWNrcm91bmQ9TWF0aC5tYXgoYSxvKS0yMCx0Ll90aWNrcm91bmQ8MCYmKHQuX3RpY2tyb3VuZD00KX19ZWxzZSBpZihpKGUpfHxcIkxcIj09PWUuY2hhckF0KDApKXt2YXIgcz10LnJhbmdlLm1hcCh0LnIyZHx8TnVtYmVyKTtpKGUpfHwoZT1OdW1iZXIoZS5zdWJzdHIoMSkpKSx0Ll90aWNrcm91bmQ9Mi1NYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4xMCsuMDEpO3ZhciBsPU1hdGgubWF4KE1hdGguYWJzKHNbMF0pLE1hdGguYWJzKHNbMV0pKSxjPU1hdGguZmxvb3IoTWF0aC5sb2cobCkvTWF0aC5MTjEwKy4wMSk7TWF0aC5hYnMoYyk+MyYmKHEodC5leHBvbmVudGZvcm1hdCkmJiFIKGMpP3QuX3RpY2tleHBvbmVudD0zKk1hdGgucm91bmQoKGMtMSkvMyk6dC5fdGlja2V4cG9uZW50PWMpfWVsc2UgdC5fdGlja3JvdW5kPW51bGx9ZnVuY3Rpb24gVih0LGUscil7dmFyIG49dC50aWNrZm9udHx8e307cmV0dXJue3g6ZSxkeDowLGR5OjAsdGV4dDpyfHxcIlwiLGZvbnRTaXplOm4uc2l6ZSxmb250Om4uZmFtaWx5LGZvbnRDb2xvcjpuLmNvbG9yfX1ULmF1dG9UaWNrcz1mdW5jdGlvbih0LGUpe3ZhciByO2Z1bmN0aW9uIG4odCl7cmV0dXJuIE1hdGgucG93KHQsTWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMTApKX1pZihcImRhdGVcIj09PXQudHlwZSl7dC50aWNrMD1zLmRhdGVUaWNrMCh0LmNhbGVuZGFyKTt2YXIgYT0yKmU7YT5nPyhlLz1nLHI9bigxMCksdC5kdGljaz1cIk1cIisxMipOKGUscixPKSk6YT52PyhlLz12LHQuZHRpY2s9XCJNXCIrTihlLDEsSSkpOmE+bT8odC5kdGljaz1OKGUsbSxQKSx0LnRpY2swPXMuZGF0ZVRpY2swKHQuY2FsZW5kYXIsITApKTphPnk/dC5kdGljaz1OKGUseSxJKTphPng/dC5kdGljaz1OKGUseCxEKTphPmI/dC5kdGljaz1OKGUsYixEKToocj1uKDEwKSx0LmR0aWNrPU4oZSxyLE8pKX1lbHNlIGlmKFwibG9nXCI9PT10LnR5cGUpe3QudGljazA9MDt2YXIgbz1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKTtpZihlPi43KXQuZHRpY2s9TWF0aC5jZWlsKGUpO2Vsc2UgaWYoTWF0aC5hYnMob1sxXS1vWzBdKTwxKXt2YXIgbD0xLjUqTWF0aC5hYnMoKG9bMV0tb1swXSkvZSk7ZT1NYXRoLmFicyhNYXRoLnBvdygxMCxvWzFdKS1NYXRoLnBvdygxMCxvWzBdKSkvbCxyPW4oMTApLHQuZHRpY2s9XCJMXCIrTihlLHIsTyl9ZWxzZSB0LmR0aWNrPWU+LjM/XCJEMlwiOlwiRDFcIn1lbHNlXCJjYXRlZ29yeVwiPT09dC50eXBlfHxcIm11bHRpY2F0ZWdvcnlcIj09PXQudHlwZT8odC50aWNrMD0wLHQuZHRpY2s9TWF0aC5jZWlsKE1hdGgubWF4KGUsMSkpKTpydCh0KT8odC50aWNrMD0wLHI9MSx0LmR0aWNrPU4oZSxyLEIpKToodC50aWNrMD0wLHI9bigxMCksdC5kdGljaz1OKGUscixPKSk7aWYoMD09PXQuZHRpY2smJih0LmR0aWNrPTEpLCFpKHQuZHRpY2spJiZcInN0cmluZ1wiIT10eXBlb2YgdC5kdGljayl7dmFyIGM9dC5kdGljazt0aHJvdyB0LmR0aWNrPTEsXCJheC5kdGljayBlcnJvcjogXCIrU3RyaW5nKGMpfX0sVC50aWNrSW5jcmVtZW50PWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPXI/LTE6MTtpZihpKGUpKXJldHVybiB0K28qZTt2YXIgbD1lLmNoYXJBdCgwKSxjPW8qTnVtYmVyKGUuc3Vic3RyKDEpKTtpZihcIk1cIj09PWwpcmV0dXJuIHMuaW5jcmVtZW50TW9udGgodCxjLGEpO2lmKFwiTFwiPT09bClyZXR1cm4gTWF0aC5sb2coTWF0aC5wb3coMTAsdCkrYykvTWF0aC5MTjEwO2lmKFwiRFwiPT09bCl7dmFyIHU9XCJEMlwiPT09ZT9GOlIsaD10Ky4wMSpvLGY9cy5yb3VuZFVwKHMubW9kKGgsMSksdSxyKTtyZXR1cm4gTWF0aC5mbG9vcihoKStNYXRoLmxvZyhuLnJvdW5kKE1hdGgucG93KDEwLGYpLDEpKS9NYXRoLkxOMTB9dGhyb3dcInVucmVjb2duaXplZCBkdGljayBcIitTdHJpbmcoZSl9LFQudGlja0ZpcnN0PWZ1bmN0aW9uKHQpe3ZhciBlPXQucjJsfHxOdW1iZXIscj1zLnNpbXBsZU1hcCh0LnJhbmdlLGUpLGE9clsxXTxyWzBdLG89YT9NYXRoLmZsb29yOk1hdGguY2VpbCxsPTEuMDAwMSpyWzBdLTFlLTQqclsxXSxjPXQuZHRpY2ssdT1lKHQudGljazApO2lmKGkoYykpe3ZhciBoPW8oKGwtdSkvYykqYyt1O3JldHVyblwiY2F0ZWdvcnlcIiE9PXQudHlwZSYmXCJtdWx0aWNhdGVnb3J5XCIhPT10LnR5cGV8fChoPXMuY29uc3RyYWluKGgsMCx0Ll9jYXRlZ29yaWVzLmxlbmd0aC0xKSksaH12YXIgZj1jLmNoYXJBdCgwKSxwPU51bWJlcihjLnN1YnN0cigxKSk7aWYoXCJNXCI9PT1mKXtmb3IodmFyIGQsZyx2LG09MCx5PXU7bTwxMDspe2lmKCgoZD1ULnRpY2tJbmNyZW1lbnQoeSxjLGEsdC5jYWxlbmRhcikpLWwpKih5LWwpPD0wKXJldHVybiBhP01hdGgubWluKHksZCk6TWF0aC5tYXgoeSxkKTtnPShsLSh5K2QpLzIpLyhkLXkpLHY9ZisoTWF0aC5hYnMoTWF0aC5yb3VuZChnKSl8fDEpKnAseT1ULnRpY2tJbmNyZW1lbnQoeSx2LGc8MD8hYTphLHQuY2FsZW5kYXIpLG0rK31yZXR1cm4gcy5lcnJvcihcInRpY2tGaXJzdCBkaWQgbm90IGNvbnZlcmdlXCIsdCkseX1pZihcIkxcIj09PWYpcmV0dXJuIE1hdGgubG9nKG8oKE1hdGgucG93KDEwLGwpLXUpL3ApKnArdSkvTWF0aC5MTjEwO2lmKFwiRFwiPT09Zil7dmFyIHg9XCJEMlwiPT09Yz9GOlIsYj1zLnJvdW5kVXAocy5tb2QobCwxKSx4LGEpO3JldHVybiBNYXRoLmZsb29yKGwpK01hdGgubG9nKG4ucm91bmQoTWF0aC5wb3coMTAsYiksMSkpL01hdGguTE4xMH10aHJvd1widW5yZWNvZ25pemVkIGR0aWNrIFwiK1N0cmluZyhjKX0sVC50aWNrVGV4dD1mdW5jdGlvbih0LGUscil7dmFyIG4sYT1WKHQsZSksbz1cImFycmF5XCI9PT10LnRpY2ttb2RlLGw9cnx8byxjPXQudHlwZSx1PVwiY2F0ZWdvcnlcIj09PWM/dC5kMmxfbm9hZGQ6dC5kMmw7aWYobyYmQXJyYXkuaXNBcnJheSh0LnRpY2t0ZXh0KSl7dmFyIGg9cy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCksZj1NYXRoLmFicyhoWzFdLWhbMF0pLzFlNDtmb3Iobj0wO248dC50aWNrdGV4dC5sZW5ndGgmJiEoTWF0aC5hYnMoZS11KHQudGlja3ZhbHNbbl0pKTxmKTtuKyspO2lmKG48dC50aWNrdGV4dC5sZW5ndGgpcmV0dXJuIGEudGV4dD1TdHJpbmcodC50aWNrdGV4dFtuXSksYX1mdW5jdGlvbiBwKG4pe2lmKHZvaWQgMD09PW4pcmV0dXJuITA7aWYocilyZXR1cm5cIm5vbmVcIj09PW47dmFyIGk9e2ZpcnN0OnQuX3RtaW4sbGFzdDp0Ll90bWF4fVtuXTtyZXR1cm5cImFsbFwiIT09biYmZSE9PWl9dmFyIGQ9cj9cIm5ldmVyXCI6XCJub25lXCIhPT10LmV4cG9uZW50Zm9ybWF0JiZwKHQuc2hvd2V4cG9uZW50KT9cImhpZGVcIjpcIlwiO2lmKFwiZGF0ZVwiPT09Yz9mdW5jdGlvbih0LGUscixuKXt2YXIgYT10Ll90aWNrcm91bmQsbz1yJiZ0LmhvdmVyZm9ybWF0fHxULmdldFRpY2tGb3JtYXQodCk7biYmKGE9aShhKT80Ont5OlwibVwiLG06XCJkXCIsZDpcIk1cIixNOlwiU1wiLFM6NH1bYV0pO3ZhciBsLGM9cy5mb3JtYXREYXRlKGUueCxvLGEsdC5fZGF0ZUZvcm1hdCx0LmNhbGVuZGFyLHQuX2V4dHJhRm9ybWF0KSx1PWMuaW5kZXhPZihcIlxcblwiKTstMSE9PXUmJihsPWMuc3Vic3RyKHUrMSksYz1jLnN1YnN0cigwLHUpKTtuJiYoXCIwMDowMDowMFwiPT09Y3x8XCIwMDowMFwiPT09Yz8oYz1sLGw9XCJcIik6OD09PWMubGVuZ3RoJiYoYz1jLnJlcGxhY2UoLzowMCQvLFwiXCIpKSk7bCYmKHI/XCJkXCI9PT1hP2MrPVwiLCBcIitsOmM9bCsoYz9cIiwgXCIrYzpcIlwiKTp0Ll9pbkNhbGNUaWNrcyYmbD09PXQuX3ByZXZEYXRlSGVhZHx8KGMrPVwiPGJyPlwiK2wsdC5fcHJldkRhdGVIZWFkPWwpKTtlLnRleHQ9Y30odCxhLHIsbCk6XCJsb2dcIj09PWM/ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbz10LmR0aWNrLGw9ZS54LGM9dC50aWNrZm9ybWF0LHU9XCJzdHJpbmdcIj09dHlwZW9mIG8mJm8uY2hhckF0KDApO1wibmV2ZXJcIj09PWEmJihhPVwiXCIpO24mJlwiTFwiIT09dSYmKG89XCJMM1wiLHU9XCJMXCIpO2lmKGN8fFwiTFwiPT09dSllLnRleHQ9RyhNYXRoLnBvdygxMCxsKSx0LGEsbik7ZWxzZSBpZihpKG8pfHxcIkRcIj09PXUmJnMubW9kKGwrLjAxLDEpPC4xKXt2YXIgaD1NYXRoLnJvdW5kKGwpLGY9TWF0aC5hYnMoaCkscD10LmV4cG9uZW50Zm9ybWF0O1wicG93ZXJcIj09PXB8fHEocCkmJkgoaCk/KGUudGV4dD0wPT09aD8xOjE9PT1oP1wiMTBcIjpcIjEwPHN1cD5cIisoaD4xP1wiXCI6XykrZitcIjwvc3VwPlwiLGUuZm9udFNpemUqPTEuMjUpOihcImVcIj09PXB8fFwiRVwiPT09cCkmJmY+Mj9lLnRleHQ9XCIxXCIrcCsoaD4wP1wiK1wiOl8pK2Y6KGUudGV4dD1HKE1hdGgucG93KDEwLGwpLHQsXCJcIixcImZha2Vob3ZlclwiKSxcIkQxXCI9PT1vJiZcInlcIj09PXQuX2lkLmNoYXJBdCgwKSYmKGUuZHktPWUuZm9udFNpemUvNikpfWVsc2V7aWYoXCJEXCIhPT11KXRocm93XCJ1bnJlY29nbml6ZWQgZHRpY2sgXCIrU3RyaW5nKG8pO2UudGV4dD1TdHJpbmcoTWF0aC5yb3VuZChNYXRoLnBvdygxMCxzLm1vZChsLDEpKSkpLGUuZm9udFNpemUqPS43NX1pZihcIkQxXCI9PT10LmR0aWNrKXt2YXIgZD1TdHJpbmcoZS50ZXh0KS5jaGFyQXQoMCk7XCIwXCIhPT1kJiZcIjFcIiE9PWR8fChcInlcIj09PXQuX2lkLmNoYXJBdCgwKT9lLmR4LT1lLmZvbnRTaXplLzQ6KGUuZHkrPWUuZm9udFNpemUvMixlLmR4Kz0odC5yYW5nZVsxXT50LnJhbmdlWzBdPzE6LTEpKmUuZm9udFNpemUqKGw8MD8uNTouMjUpKSl9fSh0LGEsMCxsLGQpOlwiY2F0ZWdvcnlcIj09PWM/ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9jYXRlZ29yaWVzW01hdGgucm91bmQoZS54KV07dm9pZCAwPT09ciYmKHI9XCJcIik7ZS50ZXh0PVN0cmluZyhyKX0odCxhKTpcIm11bHRpY2F0ZWdvcnlcIj09PWM/ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGgucm91bmQoZS54KSxpPXQuX2NhdGVnb3JpZXNbbl18fFtdLGE9dm9pZCAwPT09aVsxXT9cIlwiOlN0cmluZyhpWzFdKSxvPXZvaWQgMD09PWlbMF0/XCJcIjpTdHJpbmcoaVswXSk7cj9lLnRleHQ9bytcIiAtIFwiK2E6KGUudGV4dD1hLGUudGV4dDI9byl9KHQsYSxyKTpydCh0KT9mdW5jdGlvbih0LGUscixuLGkpe2lmKFwicmFkaWFuc1wiIT09dC50aGV0YXVuaXR8fHIpZS50ZXh0PUcoZS54LHQsaSxuKTtlbHNle3ZhciBhPWUueC8xODA7aWYoMD09PWEpZS50ZXh0PVwiMFwiO2Vsc2V7dmFyIG89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiBNYXRoLmFicyh0LWUpPD0xZS02fXZhciByPWZ1bmN0aW9uKHQpe3ZhciByPTE7Zm9yKDshZShNYXRoLnJvdW5kKHQqcikvcix0KTspcio9MTA7cmV0dXJuIHJ9KHQpLG49dCpyLGk9TWF0aC5hYnMoZnVuY3Rpb24gdChyLG4pe3JldHVybiBlKG4sMCk/cjp0KG4sciVuKX0obixyKSk7cmV0dXJuW01hdGgucm91bmQobi9pKSxNYXRoLnJvdW5kKHIvaSldfShhKTtpZihvWzFdPj0xMDApZS50ZXh0PUcocy5kZWcycmFkKGUueCksdCxpLG4pO2Vsc2V7dmFyIGw9ZS54PDA7MT09PW9bMV0/MT09PW9bMF0/ZS50ZXh0PVwiXFx1MDNjMFwiOmUudGV4dD1vWzBdK1wiXFx1MDNjMFwiOmUudGV4dD1bXCI8c3VwPlwiLG9bMF0sXCI8L3N1cD5cIixcIlxcdTIwNDRcIixcIjxzdWI+XCIsb1sxXSxcIjwvc3ViPlwiLFwiXFx1MDNjMFwiXS5qb2luKFwiXCIpLGwmJihlLnRleHQ9XytlLnRleHQpfX19fSh0LGEscixsLGQpOmZ1bmN0aW9uKHQsZSxyLG4saSl7XCJuZXZlclwiPT09aT9pPVwiXCI6XCJhbGxcIj09PXQuc2hvd2V4cG9uZW50JiZNYXRoLmFicyhlLngvdC5kdGljayk8MWUtNiYmKGk9XCJoaWRlXCIpO2UudGV4dD1HKGUueCx0LGksbil9KHQsYSwwLGwsZCksdC50aWNrcHJlZml4JiYhcCh0LnNob3d0aWNrcHJlZml4KSYmKGEudGV4dD10LnRpY2twcmVmaXgrYS50ZXh0KSx0LnRpY2tzdWZmaXgmJiFwKHQuc2hvd3RpY2tzdWZmaXgpJiYoYS50ZXh0Kz10LnRpY2tzdWZmaXgpLFwiYm91bmRhcmllc1wiPT09dC50aWNrc29ufHx0LnNob3dkaXZpZGVycyl7dmFyIGc9ZnVuY3Rpb24oZSl7dmFyIHI9dC5sMnAoZSk7cmV0dXJuIHI+PTAmJnI8PXQuX2xlbmd0aD9lOm51bGx9O2EueGJuZD1bZyhhLngtLjUpLGcoYS54K3QuZHRpY2stLjUpXX1yZXR1cm4gYX0sVC5ob3ZlckxhYmVsVGV4dD1mdW5jdGlvbih0LGUscil7aWYociE9PXcmJnIhPT1lKXJldHVybiBULmhvdmVyTGFiZWxUZXh0KHQsZSkrXCIgLSBcIitULmhvdmVyTGFiZWxUZXh0KHQscik7dmFyIG49XCJsb2dcIj09PXQudHlwZSYmZTw9MCxpPVQudGlja1RleHQodCx0LmMybChuPy1lOmUpLFwiaG92ZXJcIikudGV4dDtyZXR1cm4gbj8wPT09ZT9cIjBcIjpfK2k6aX07dmFyIFU9W1wiZlwiLFwicFwiLFwiblwiLFwiXFx1MDNiY1wiLFwibVwiLFwiXCIsXCJrXCIsXCJNXCIsXCJHXCIsXCJUXCJdO2Z1bmN0aW9uIHEodCl7cmV0dXJuXCJTSVwiPT09dHx8XCJCXCI9PT10fWZ1bmN0aW9uIEgodCl7cmV0dXJuIHQ+MTR8fHQ8LTE1fWZ1bmN0aW9uIEcodCxlLHIsbil7dmFyIGE9dDwwLG89ZS5fdGlja3JvdW5kLGw9cnx8ZS5leHBvbmVudGZvcm1hdHx8XCJCXCIsYz1lLl90aWNrZXhwb25lbnQsdT1ULmdldFRpY2tGb3JtYXQoZSksaD1lLnNlcGFyYXRldGhvdXNhbmRzO2lmKG4pe3ZhciBmPXtleHBvbmVudGZvcm1hdDpsLGR0aWNrOlwibm9uZVwiPT09ZS5zaG93ZXhwb25lbnQ/ZS5kdGljazppKHQpJiZNYXRoLmFicyh0KXx8MSxyYW5nZTpcIm5vbmVcIj09PWUuc2hvd2V4cG9uZW50P2UucmFuZ2UubWFwKGUucjJkKTpbMCx0fHwxXX07aihmKSxvPShOdW1iZXIoZi5fdGlja3JvdW5kKXx8MCkrNCxjPWYuX3RpY2tleHBvbmVudCxlLmhvdmVyZm9ybWF0JiYodT1lLmhvdmVyZm9ybWF0KX1pZih1KXJldHVybiBlLl9udW1Gb3JtYXQodSkodCkucmVwbGFjZSgvLS9nLF8pO3ZhciBwLGQ9TWF0aC5wb3coMTAsLW8pLzI7aWYoXCJub25lXCI9PT1sJiYoYz0wKSwodD1NYXRoLmFicyh0KSk8ZCl0PVwiMFwiLGE9ITE7ZWxzZXtpZih0Kz1kLGMmJih0Kj1NYXRoLnBvdygxMCwtYyksbys9YyksMD09PW8pdD1TdHJpbmcoTWF0aC5mbG9vcih0KSk7ZWxzZSBpZihvPDApe3Q9KHQ9U3RyaW5nKE1hdGgucm91bmQodCkpKS5zdWJzdHIoMCx0Lmxlbmd0aCtvKTtmb3IodmFyIGc9bztnPDA7ZysrKXQrPVwiMFwifWVsc2V7dmFyIHY9KHQ9U3RyaW5nKHQpKS5pbmRleE9mKFwiLlwiKSsxO3YmJih0PXQuc3Vic3RyKDAsditvKS5yZXBsYWNlKC9cXC4/MCskLyxcIlwiKSl9dD1zLm51bVNlcGFyYXRlKHQsZS5fc2VwYXJhdG9ycyxoKX1jJiZcImhpZGVcIiE9PWwmJihxKGwpJiZIKGMpJiYobD1cInBvd2VyXCIpLHA9YzwwP18rLWM6XCJwb3dlclwiIT09bD9cIitcIitjOlN0cmluZyhjKSxcImVcIj09PWx8fFwiRVwiPT09bD90Kz1sK3A6XCJwb3dlclwiPT09bD90Kz1cIlxceGQ3MTA8c3VwPlwiK3ArXCI8L3N1cD5cIjpcIkJcIj09PWwmJjk9PT1jP3QrPVwiQlwiOnEobCkmJih0Kz1VW2MvMys1XSkpO3JldHVybiBhP18rdDp0fWZ1bmN0aW9uIFkodCxlKXt2YXIgcj10Ll9pZC5jaGFyQXQoMCksbj10Ll90aWNrQW5nbGVzW2VdfHwwLGk9cy5kZWcycmFkKG4pLGE9TWF0aC5zaW4oaSksbz1NYXRoLmNvcyhpKSxsPTAsYz0wO3JldHVybiB0Ll9zZWxlY3Rpb25zW2VdLmVhY2goZnVuY3Rpb24oKXt2YXIgdD0kKHRoaXMpLGU9aC5iQm94KHQubm9kZSgpKSxyPWUud2lkdGgsbj1lLmhlaWdodDtsPU1hdGgubWF4KGwsbypyLGEqbiksYz1NYXRoLm1heChjLGEqcixvKm4pfSkse3g6Yyx5Omx9W3JdfWZ1bmN0aW9uIFcodCl7cmV0dXJuW3QudGV4dCx0LngsdC5heEluZm8sdC5mb250LHQuZm9udFNpemUsdC5mb250Q29sb3JdLmpvaW4oXCJfXCIpfWZ1bmN0aW9uIFgodCxlKXt2YXIgcixuPXQuX2Z1bGxMYXlvdXQuX3NpemUsaT1lLl9pZC5jaGFyQXQoMCksYT1lLnNpZGU7cmV0dXJuXCJmcmVlXCIhPT1lLmFuY2hvcj9yPVMuZ2V0RnJvbUlkKHQsZS5hbmNob3IpOlwieFwiPT09aT9yPXtfb2Zmc2V0Om4udCsoMS0oZS5wb3NpdGlvbnx8MCkpKm4uaCxfbGVuZ3RoOjB9OlwieVwiPT09aSYmKHI9e19vZmZzZXQ6bi5sKyhlLnBvc2l0aW9ufHwwKSpuLncsX2xlbmd0aDowfSksXCJ0b3BcIj09PWF8fFwibGVmdFwiPT09YT9yLl9vZmZzZXQ6XCJib3R0b21cIj09PWF8fFwicmlnaHRcIj09PWE/ci5fb2Zmc2V0K3IuX2xlbmd0aDp2b2lkIDB9ZnVuY3Rpb24gWih0LGUpe3ZhciByPXQubDJwKGUpO3JldHVybiByPjEmJnI8dC5fbGVuZ3RoLTF9ZnVuY3Rpb24gJCh0KXt2YXIgZT1uLnNlbGVjdCh0KSxyPWUuc2VsZWN0KFwiLnRleHQtbWF0aC1ncm91cFwiKTtyZXR1cm4gci5lbXB0eSgpP2Uuc2VsZWN0KFwidGV4dFwiKTpyfWZ1bmN0aW9uIEoodCl7cmV0dXJuIHQuX2lkK1wiLmF1dG9tYXJnaW5cIn1mdW5jdGlvbiBLKHQpe3JldHVybiB0Ll9pZCtcIi5yYW5nZXNsaWRlclwifWZ1bmN0aW9uIFEodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyktMT09PXQuaW5kZXhPZihlW3JdKSYmdC5wdXNoKGVbcl0pfWZ1bmN0aW9uIHR0KHQsZSxyKXt2YXIgbixpLGE9W10sbz1bXSxsPXQubGF5b3V0O2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspYS5wdXNoKFQuZ2V0RnJvbUlkKHQsZVtuXSkpO2ZvcihuPTA7bjxyLmxlbmd0aDtuKyspby5wdXNoKFQuZ2V0RnJvbUlkKHQscltuXSkpO3ZhciBjPU9iamVjdC5rZXlzKGYpLHU9W1wiYW5jaG9yXCIsXCJkb21haW5cIixcIm92ZXJsYXlpbmdcIixcInBvc2l0aW9uXCIsXCJzaWRlXCIsXCJ0aWNrYW5nbGVcIixcImVkaXRUeXBlXCJdLGg9W1wibGluZWFyXCIsXCJsb2dcIl07Zm9yKG49MDtuPGMubGVuZ3RoO24rKyl7dmFyIHA9Y1tuXSxkPWFbMF1bcF0sZz1vWzBdW3BdLHY9ITAsbT0hMSx5PSExO2lmKFwiX1wiIT09cC5jaGFyQXQoMCkmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGQmJi0xPT09dS5pbmRleE9mKHApKXtmb3IoaT0xO2k8YS5sZW5ndGgmJnY7aSsrKXt2YXIgeD1hW2ldW3BdO1widHlwZVwiPT09cCYmLTEhPT1oLmluZGV4T2YoZCkmJi0xIT09aC5pbmRleE9mKHgpJiZkIT09eD9tPSEwOnghPT1kJiYodj0hMSl9Zm9yKGk9MTtpPG8ubGVuZ3RoJiZ2O2krKyl7dmFyIGI9b1tpXVtwXTtcInR5cGVcIj09PXAmJi0xIT09aC5pbmRleE9mKGcpJiYtMSE9PWguaW5kZXhPZihiKSYmZyE9PWI/eT0hMDpvW2ldW3BdIT09ZyYmKHY9ITEpfXYmJihtJiYobFthWzBdLl9uYW1lXS50eXBlPVwibGluZWFyXCIpLHkmJihsW29bMF0uX25hbWVdLnR5cGU9XCJsaW5lYXJcIiksZXQobCxwLGEsbyx0Ll9mdWxsTGF5b3V0Ll9kZmx0VGl0bGUpKX19Zm9yKG49MDtuPHQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnMubGVuZ3RoO24rKyl7dmFyIF89dC5fZnVsbExheW91dC5hbm5vdGF0aW9uc1tuXTstMSE9PWUuaW5kZXhPZihfLnhyZWYpJiYtMSE9PXIuaW5kZXhPZihfLnlyZWYpJiZzLnN3YXBBdHRycyhsLmFubm90YXRpb25zW25dLFtcIj9cIl0pfX1mdW5jdGlvbiBldCh0LGUscixuLGkpe3ZhciBhLG89cy5uZXN0ZWRQcm9wZXJ0eSxsPW8odFtyWzBdLl9uYW1lXSxlKS5nZXQoKSxjPW8odFtuWzBdLl9uYW1lXSxlKS5nZXQoKTtmb3IoXCJ0aXRsZVwiPT09ZSYmKGwmJmwudGV4dD09PWkueCYmKGwudGV4dD1pLnkpLGMmJmMudGV4dD09PWkueSYmKGMudGV4dD1pLngpKSxhPTA7YTxyLmxlbmd0aDthKyspbyh0LHJbYV0uX25hbWUrXCIuXCIrZSkuc2V0KGMpO2ZvcihhPTA7YTxuLmxlbmd0aDthKyspbyh0LG5bYV0uX25hbWUrXCIuXCIrZSkuc2V0KGwpfWZ1bmN0aW9uIHJ0KHQpe3JldHVyblwiYW5ndWxhcmF4aXNcIj09PXQuX2lkfVQuZ2V0VGlja0Zvcm1hdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scyxsO2Z1bmN0aW9uIGModCl7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIHQ/dDpOdW1iZXIodC5yZXBsYWNlKFwiTVwiLFwiXCIpKSp2fWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1bXCJMXCIsXCJEXCJdO2lmKHR5cGVvZiB0PT10eXBlb2YgZSl7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQpcmV0dXJuIHQtZTt2YXIgbj1yLmluZGV4T2YodC5jaGFyQXQoMCkpLGk9ci5pbmRleE9mKGUuY2hhckF0KDApKTtyZXR1cm4gbj09PWk/TnVtYmVyKHQucmVwbGFjZSgvKEx8RCkvZyxcIlwiKSktTnVtYmVyKGUucmVwbGFjZSgvKEx8RCkvZyxcIlwiKSk6bi1pfXJldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0PzE6LTF9ZnVuY3Rpb24gaCh0LGUpe3ZhciByPW51bGw9PT1lWzBdLG49bnVsbD09PWVbMV0saT11KHQsZVswXSk+PTAsYT11KHQsZVsxXSk8PTA7cmV0dXJuKHJ8fGkpJiYobnx8YSl9aWYodC50aWNrZm9ybWF0c3RvcHMmJnQudGlja2Zvcm1hdHN0b3BzLmxlbmd0aD4wKXN3aXRjaCh0LnR5cGUpe2Nhc2VcImRhdGVcIjpjYXNlXCJsaW5lYXJcIjpmb3IoZT0wO2U8dC50aWNrZm9ybWF0c3RvcHMubGVuZ3RoO2UrKylpZigobj10LnRpY2tmb3JtYXRzdG9wc1tlXSkuZW5hYmxlZCYmKGk9dC5kdGljayxhPW4uZHRpY2tyYW5nZSxvPXZvaWQgMCx2b2lkIDAsdm9pZCAwLG89Y3x8ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHM9YVswXSxsPWFbMV0sKCFzJiZcIm51bWJlclwiIT10eXBlb2Ygc3x8byhzKTw9byhpKSkmJighbCYmXCJudW1iZXJcIiE9dHlwZW9mIGx8fG8obCk+PW8oaSkpKSl7cj1uO2JyZWFrfWJyZWFrO2Nhc2VcImxvZ1wiOmZvcihlPTA7ZTx0LnRpY2tmb3JtYXRzdG9wcy5sZW5ndGg7ZSsrKWlmKChuPXQudGlja2Zvcm1hdHN0b3BzW2VdKS5lbmFibGVkJiZoKHQuZHRpY2ssbi5kdGlja3JhbmdlKSl7cj1uO2JyZWFrfX1yZXR1cm4gcj9yLnZhbHVlOnQudGlja2Zvcm1hdH0sVC5nZXRTdWJwbG90cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQuX3N1YnBsb3RzLG49ci5jYXJ0ZXNpYW4uY29uY2F0KHIuZ2wyZHx8W10pLGk9ZT9ULmZpbmRTdWJwbG90c1dpdGhBeGlzKG4sZSk6bjtyZXR1cm4gaS5zb3J0KGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdWJzdHIoMSkuc3BsaXQoXCJ5XCIpLG49ZS5zdWJzdHIoMSkuc3BsaXQoXCJ5XCIpO3JldHVybiByWzBdPT09blswXT8rclsxXS0rblsxXTorclswXS0rblswXX0pLGl9LFQuZmluZFN1YnBsb3RzV2l0aEF4aXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IFJlZ0V4cChcInhcIj09PWUuX2lkLmNoYXJBdCgwKT9cIl5cIitlLl9pZCtcInlcIjplLl9pZCtcIiRcIiksbj1bXSxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPXRbaV07ci50ZXN0KGEpJiZuLnB1c2goYSl9cmV0dXJuIG59LFQubWFrZUNsaXBQYXRocz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2lmKCFlLl9oYXNPbmx5TGFyZ2VTcGxvbXMpe3ZhciByLGksYT17X29mZnNldDowLF9sZW5ndGg6ZS53aWR0aCxfaWQ6XCJcIn0sbz17X29mZnNldDowLF9sZW5ndGg6ZS5oZWlnaHQsX2lkOlwiXCJ9LHM9VC5saXN0KHQsXCJ4XCIsITApLGw9VC5saXN0KHQsXCJ5XCIsITApLGM9W107Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKylmb3IoYy5wdXNoKHt4OnNbcl0seTpvfSksaT0wO2k8bC5sZW5ndGg7aSsrKTA9PT1yJiZjLnB1c2goe3g6YSx5OmxbaV19KSxjLnB1c2goe3g6c1tyXSx5OmxbaV19KTt2YXIgdT1lLl9jbGlwcy5zZWxlY3RBbGwoXCIuYXhlc2NsaXBcIikuZGF0YShjLGZ1bmN0aW9uKHQpe3JldHVybiB0LnguX2lkK3QueS5faWR9KTt1LmVudGVyKCkuYXBwZW5kKFwiY2xpcFBhdGhcIikuY2xhc3NlZChcImF4ZXNjbGlwXCIsITApLmF0dHIoXCJpZFwiLGZ1bmN0aW9uKHQpe3JldHVyblwiY2xpcFwiK2UuX3VpZCt0LnguX2lkK3QueS5faWR9KS5hcHBlbmQoXCJyZWN0XCIpLHUuZXhpdCgpLnJlbW92ZSgpLHUuZWFjaChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5zZWxlY3QoXCJyZWN0XCIpLmF0dHIoe3g6dC54Ll9vZmZzZXR8fDAseTp0LnkuX29mZnNldHx8MCx3aWR0aDp0LnguX2xlbmd0aHx8MSxoZWlnaHQ6dC55Ll9sZW5ndGh8fDF9KX0pfX0sVC5kcmF3PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Ll9mdWxsTGF5b3V0O1wicmVkcmF3XCI9PT1lJiZuLl9wYXBlci5zZWxlY3RBbGwoXCJnLnN1YnBsb3RcIikuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9bi5fcGxvdHNbZV0saT1yLnhheGlzLGE9ci55YXhpcztyLnhheGlzbGF5ZXIuc2VsZWN0QWxsKFwiLlwiK2kuX2lkK1widGlja1wiKS5yZW1vdmUoKSxyLnlheGlzbGF5ZXIuc2VsZWN0QWxsKFwiLlwiK2EuX2lkK1widGlja1wiKS5yZW1vdmUoKSxyLnhheGlzbGF5ZXIuc2VsZWN0QWxsKFwiLlwiK2kuX2lkK1widGljazJcIikucmVtb3ZlKCksci55YXhpc2xheWVyLnNlbGVjdEFsbChcIi5cIithLl9pZCtcInRpY2syXCIpLnJlbW92ZSgpLHIueGF4aXNsYXllci5zZWxlY3RBbGwoXCIuXCIraS5faWQrXCJkaXZpZGVyXCIpLnJlbW92ZSgpLHIueWF4aXNsYXllci5zZWxlY3RBbGwoXCIuXCIrYS5faWQrXCJkaXZpZGVyXCIpLnJlbW92ZSgpLHIuZ3JpZGxheWVyJiZyLmdyaWRsYXllci5zZWxlY3RBbGwoXCJwYXRoXCIpLnJlbW92ZSgpLHIuemVyb2xpbmVsYXllciYmci56ZXJvbGluZWxheWVyLnNlbGVjdEFsbChcInBhdGhcIikucmVtb3ZlKCksbi5faW5mb2xheWVyLnNlbGVjdChcIi5nLVwiK2kuX2lkK1widGl0bGVcIikucmVtb3ZlKCksbi5faW5mb2xheWVyLnNlbGVjdChcIi5nLVwiK2EuX2lkK1widGl0bGVcIikucmVtb3ZlKCl9KTt2YXIgaT1lJiZcInJlZHJhd1wiIT09ZT9lOlQubGlzdElkcyh0KTtyZXR1cm4gcy5zeW5jT3JBc3luYyhpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtpZihlKXt2YXIgbj1ULmdldEZyb21JZCh0LGUpLGk9VC5kcmF3T25lKHQsbixyKTtyZXR1cm4gbi5fcj1uLnJhbmdlLnNsaWNlKCksbi5fcmw9cy5zaW1wbGVNYXAobi5fcixuLnIybCksaX19fSkpfSxULmRyYXdPbmU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksbDtyPXJ8fHt9LGUuc2V0U2NhbGUoKTt2YXIgZj10Ll9mdWxsTGF5b3V0LHA9ZS5faWQsZD1wLmNoYXJBdCgwKSxnPVQuY291bnRlckxldHRlcihwKSx2PWUuX21haW5TdWJwbG90LG09ZS5fbWFpbkxpbmVQb3NpdGlvbix5PWUuX21haW5NaXJyb3JQb3NpdGlvbix4PWYuX3Bsb3RzW3ZdW2QrXCJheGlzbGF5ZXJcIl0sYj1lLl9zdWJwbG90c1dpdGgsXz1lLl92YWxzPVQuY2FsY1RpY2tzKGUpLHc9W2UubWlycm9yLG0seV0uam9pbihcIl9cIik7Zm9yKG49MDtuPF8ubGVuZ3RoO24rKylfW25dLmF4SW5mbz13O2lmKGUudmlzaWJsZSl7ZS5fc2VsZWN0aW9ucz17fSxlLl90aWNrQW5nbGVzPXt9O3ZhciBrLE0sUz1ULm1ha2VUcmFuc0ZuKGUpO2lmKFwiYm91bmRhcmllc1wiPT09ZS50aWNrc29uKXt2YXIgRT1mdW5jdGlvbih0LGUpe3ZhciByLG49W10saT1mdW5jdGlvbih0LGUpe3ZhciByPXQueGJuZFtlXTtudWxsIT09ciYmbi5wdXNoKHMuZXh0ZW5kRmxhdCh7fSx0LHt4OnJ9KSl9O2lmKGUubGVuZ3RoKXtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKWkoZVtyXSwwKTtpKGVbci0xXSwxKX1yZXR1cm4gbn0oMCxfKTtNPVQuY2xpcEVuZHMoZSxFKSxrPVwiaW5zaWRlXCI9PT1lLnRpY2tzP006RX1lbHNlIE09VC5jbGlwRW5kcyhlLF8pLGs9XCJpbnNpZGVcIj09PWUudGlja3M/TTpfO3ZhciBDPWUuX2dyaWRWYWxzPU0sTD1mdW5jdGlvbih0LGUpe3ZhciByLG4saT1bXSxhPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC54Ym5kW2VdO251bGwhPT1yJiZpLnB1c2gocy5leHRlbmRGbGF0KHt9LHQse3g6cn0pKX07aWYodC5zaG93ZGl2aWRlcnMmJmUubGVuZ3RoKXtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbz1lW3JdO28udGV4dDIhPT1uJiZhKG8sMCksbj1vLnRleHQyfWEoZVtyLTFdLDEpfXJldHVybiBpfShlLF8pO2lmKCFmLl9oYXNPbmx5TGFyZ2VTcGxvbXMpe3ZhciB6PXt9O2ZvcihuPTA7bjxiLmxlbmd0aDtuKyspe2k9YltuXTt2YXIgTz0obD1mLl9wbG90c1tpXSlbZytcImF4aXNcIl0sST1PLl9tYWluQXhpcy5faWQ7aWYoIXpbSV0pe3pbSV09MTt2YXIgRD1cInhcIj09PWQ/XCJNMCxcIitPLl9vZmZzZXQrXCJ2XCIrTy5fbGVuZ3RoOlwiTVwiK08uX29mZnNldCtcIiwwaFwiK08uX2xlbmd0aDtULmRyYXdHcmlkKHQsZSx7dmFsczpDLGNvdW50ZXJBeGlzOk8sbGF5ZXI6bC5ncmlkbGF5ZXIuc2VsZWN0KFwiLlwiK3ApLHBhdGg6RCx0cmFuc0ZuOlN9KSxULmRyYXdaZXJvTGluZSh0LGUse2NvdW50ZXJBeGlzOk8sbGF5ZXI6bC56ZXJvbGluZWxheWVyLHBhdGg6RCx0cmFuc0ZuOlN9KX19fXZhciBQPVQuZ2V0VGlja1NpZ25zKGUpLFI9W107aWYoZS50aWNrcyl7dmFyIEYsQixOLGo9VC5tYWtlVGlja1BhdGgoZSxtLFBbMl0pO2lmKGUuX2FuY2hvckF4aXMmJmUubWlycm9yJiYhMCE9PWUubWlycm9yPyhGPVQubWFrZVRpY2tQYXRoKGUseSxQWzNdKSxCPWorRik6KEY9XCJcIixCPWopLGUuc2hvd2RpdmlkZXJzJiZcIm91dHNpZGVcIj09PWUudGlja3MmJlwiYm91bmRhcmllc1wiPT09ZS50aWNrc29uKXt2YXIgVT17fTtmb3Iobj0wO248TC5sZW5ndGg7bisrKVVbTFtuXS54XT0xO049ZnVuY3Rpb24odCl7cmV0dXJuIFVbdC54XT9GOkJ9fWVsc2UgTj1CO1QuZHJhd1RpY2tzKHQsZSx7dmFsczprLGxheWVyOngscGF0aDpOLHRyYW5zRm46U30pLFI9T2JqZWN0LmtleXMoZS5fbGluZXBvc2l0aW9uc3x8e30pfWZvcihuPTA7bjxSLmxlbmd0aDtuKyspe2k9UltuXSxsPWYuX3Bsb3RzW2ldO3ZhciBxPWUuX2xpbmVwb3NpdGlvbnNbaV18fFtdLEg9VC5tYWtlVGlja1BhdGgoZSxxWzBdLFBbMF0pK1QubWFrZVRpY2tQYXRoKGUscVsxXSxQWzFdKTtULmRyYXdUaWNrcyh0LGUse3ZhbHM6ayxsYXllcjpsW2QrXCJheGlzbGF5ZXJcIl0scGF0aDpILHRyYW5zRm46U30pfXZhciBHPVtdO2lmKEcucHVzaChmdW5jdGlvbigpe3JldHVybiBULmRyYXdMYWJlbHModCxlLHt2YWxzOl8sbGF5ZXI6eCx0cmFuc0ZuOlMsbGFiZWxGbnM6VC5tYWtlTGFiZWxGbnMoZSxtKX0pfSksXCJtdWx0aWNhdGVnb3J5XCI9PT1lLnR5cGUpe3ZhciBaPTAsJD17eDoyLHk6MTB9W2RdLFE9UFsyXSooXCJpbnNpZGVcIj09PWUudGlja3M/LTE6MSk7Ry5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIForPVkoZSxwK1widGlja1wiKSskLForPWUuX3RpY2tBbmdsZXNbcCtcInRpY2tcIl0/ZS50aWNrZm9udC5zaXplKkE6MCxULmRyYXdMYWJlbHModCxlLHt2YWxzOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49e30saT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1lW2ldO25bYS50ZXh0Ml0/blthLnRleHQyXS5wdXNoKGEueCk6blthLnRleHQyXT1bYS54XX1mb3IodmFyIG8gaW4gbilyLnB1c2goVih0LHMuaW50ZXJwKG5bb10sLjUpLG8pKTtyZXR1cm4gcn0oZSxfKSxsYXllcjp4LGNsczpwK1widGljazJcIixyZXBvc2l0aW9uT25VcGRhdGU6ITAsc2Vjb25kYXJ5OiEwLHRyYW5zRm46UyxsYWJlbEZuczpULm1ha2VMYWJlbEZucyhlLG0rWipRKX0pfSksRy5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIForPVkoZSxwK1widGljazJcIiksZS5fbGFiZWxMZW5ndGg9WixmdW5jdGlvbih0LGUscil7dmFyIG49ZS5faWQrXCJkaXZpZGVyXCIsaT1yLnZhbHMsYT1yLmxheWVyLnNlbGVjdEFsbChcInBhdGguXCIrbikuZGF0YShpLFcpO2EuZXhpdCgpLnJlbW92ZSgpLGEuZW50ZXIoKS5pbnNlcnQoXCJwYXRoXCIsXCI6Zmlyc3QtY2hpbGRcIikuY2xhc3NlZChuLDEpLmNsYXNzZWQoXCJjcmlzcFwiLDEpLmNhbGwodS5zdHJva2UsZS5kaXZpZGVyY29sb3IpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsaC5jcmlzcFJvdW5kKHQsZS5kaXZpZGVyd2lkdGgsMSkrXCJweFwiKSxhLmF0dHIoXCJ0cmFuc2Zvcm1cIixyLnRyYW5zRm4pLmF0dHIoXCJkXCIsci5wYXRoKX0odCxlLHt2YWxzOkwsbGF5ZXI6eCxwYXRoOlQubWFrZVRpY2tQYXRoKGUsbSxRLFopLHRyYW5zRm46U30pfSl9dmFyIHR0PW8uZ2V0Q29tcG9uZW50TWV0aG9kKFwicmFuZ2VzbGlkZXJcIixcImlzVmlzaWJsZVwiKShlKTtyZXR1cm4gRy5wdXNoKGZ1bmN0aW9uKCl7aWYoZS5zaG93dGlja2xhYmVscyl7dmFyIHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXgubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2UuX2JvdW5kaW5nQm94PXt3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCxsZWZ0Om4ubGVmdC1yLmxlZnQscmlnaHQ6bi5yaWdodC1yLmxlZnQsdG9wOm4udG9wLXIudG9wLGJvdHRvbTpuLmJvdHRvbS1yLnRvcH19ZWxzZXt2YXIgaSxhPWYuX3NpemU7XCJ4XCI9PT1kPyhpPVwiZnJlZVwiPT09ZS5hbmNob3I/YS50K2EuaCooMS1lLnBvc2l0aW9uKTphLnQrYS5oKigxLWUuX2FuY2hvckF4aXMuZG9tYWluW3tib3R0b206MCx0b3A6MX1bZS5zaWRlXV0pLGUuX2JvdW5kaW5nQm94PXt0b3A6aSxib3R0b206aSxsZWZ0OmUuX29mZnNldCxyaWdodDplLl9vZmZzZXQrZS5fbGVuZ3RoLHdpZHRoOmUuX2xlbmd0aCxoZWlnaHQ6MH0pOihpPVwiZnJlZVwiPT09ZS5hbmNob3I/YS5sK2EudyplLnBvc2l0aW9uOmEubCthLncqZS5fYW5jaG9yQXhpcy5kb21haW5be2xlZnQ6MCxyaWdodDoxfVtlLnNpZGVdXSxlLl9ib3VuZGluZ0JveD17bGVmdDppLHJpZ2h0OmksYm90dG9tOmUuX29mZnNldCtlLl9sZW5ndGgsdG9wOmUuX29mZnNldCxoZWlnaHQ6ZS5fbGVuZ3RoLHdpZHRoOjB9KX1pZihiKXtmb3IodmFyIG89ZS5fY291bnRlclNwYW49WzEvMCwtMS8wXSxzPTA7czxiLmxlbmd0aDtzKyspe3ZhciBsPWYuX3Bsb3RzW2Jbc11dW1wieFwiPT09ZD9cInlheGlzXCI6XCJ4YXhpc1wiXTtldChvLFtsLl9vZmZzZXQsbC5fb2Zmc2V0K2wuX2xlbmd0aF0pfVwiZnJlZVwiPT09ZS5hbmNob3ImJmV0KG8sXCJ4XCI9PT1kP1tlLl9ib3VuZGluZ0JveC5ib3R0b20sZS5fYm91bmRpbmdCb3gudG9wXTpbZS5fYm91bmRpbmdCb3gucmlnaHQsZS5fYm91bmRpbmdCb3gubGVmdF0pfX0sZnVuY3Rpb24oKXt2YXIgcixuLGk9ZS5zaWRlLmNoYXJBdCgwKTtpZih0dCYmKG49by5nZXRDb21wb25lbnRNZXRob2QoXCJyYW5nZXNsaWRlclwiLFwiYXV0b01hcmdpbk9wdHNcIikodCxlKSksYS5hdXRvTWFyZ2luKHQsSyhlKSxuKSxlLmF1dG9tYXJnaW4mJighdHR8fFwiYlwiIT09aSkpe3I9e3g6MCx5OjAscjowLGw6MCx0OjAsYjowfTt2YXIgcyxsLGM9ZS5fYm91bmRpbmdCb3gsdT1YKHQsZSk7c3dpdGNoKGQraSl7Y2FzZVwieGJcIjpzPTAsbD1jLnRvcC11LHJbaV09Yy5oZWlnaHQ7YnJlYWs7Y2FzZVwieHRcIjpzPTEsbD11LWMuYm90dG9tLHJbaV09Yy5oZWlnaHQ7YnJlYWs7Y2FzZVwieWxcIjpzPTAsbD11LWMucmlnaHQscltpXT1jLndpZHRoO2JyZWFrO2Nhc2VcInlyXCI6cz0xLGw9Yy5sZWZ0LXUscltpXT1jLndpZHRofWlmKHJbZ109XCJmcmVlXCI9PT1lLmFuY2hvcj9lLnBvc2l0aW9uOmUuX2FuY2hvckF4aXMuZG9tYWluW3NdLHJbaV0+MCYmKHJbaV0rPWwpLGUudGl0bGUudGV4dCE9PWYuX2RmbHRUaXRsZVtkXSYmKHJbaV0rPWUudGl0bGUuZm9udC5zaXplKSxcInhcIj09PWQmJmMud2lkdGg+MCl7dmFyIGg9Yy5yaWdodC0oZS5fb2Zmc2V0K2UuX2xlbmd0aCk7aD4wJiYoci54PTEsci5yPWgpO3ZhciBwPWUuX29mZnNldC1jLmxlZnQ7cD4wJiYoci54PTAsci5sPXApfWVsc2UgaWYoXCJ5XCI9PT1kJiZjLmhlaWdodD4wKXt2YXIgdj1jLmJvdHRvbS0oZS5fb2Zmc2V0K2UuX2xlbmd0aCk7dj4wJiYoci55PTAsci5iPXYpO3ZhciBtPWUuX29mZnNldC1jLnRvcDttPjAmJihyLnk9MSxyLnQ9bSl9fWEuYXV0b01hcmdpbih0LEooZSkscil9KSxyLnNraXBUaXRsZXx8dHQmJmUuX2JvdW5kaW5nQm94JiZcImJvdHRvbVwiPT09ZS5zaWRlfHxHLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcixuPXQuX2Z1bGxMYXlvdXQsaT1lLl9pZCxhPWkuY2hhckF0KDApLG89ZS50aXRsZS5mb250LnNpemU7aWYoXCJtdWx0aWNhdGVnb3J5XCI9PT1lLnR5cGUpcj1lLl9sYWJlbExlbmd0aDtlbHNle3I9MTArMS41Km8rKGUubGluZXdpZHRoP2UubGluZXdpZHRoLTE6MCl9dmFyIHMsbCx1LGYscD1YKHQsZSk7XCJ4XCI9PT1hPyhsPWUuX29mZnNldCtlLl9sZW5ndGgvMix1PVwidG9wXCI9PT1lLnNpZGU/LXItbyooZS5zaG93dGlja2xhYmVscz8xOjApOnIrbyooZS5zaG93dGlja2xhYmVscz8xLjU6LjUpLHUrPXApOih1PWUuX29mZnNldCtlLl9sZW5ndGgvMixsPVwicmlnaHRcIj09PWUuc2lkZT9yK28qKGUuc2hvd3RpY2tsYWJlbHM/MTouNSk6LXItbyooZS5zaG93dGlja2xhYmVscz8uNTowKSxsKz1wLHM9e3JvdGF0ZTpcIi05MFwiLG9mZnNldDowfSk7aWYoXCJtdWx0aWNhdGVnb3J5XCIhPT1lLnR5cGUpe3ZhciBkPWUuX3NlbGVjdGlvbnNbZS5faWQrXCJ0aWNrXCJdO2lmKGY9e3NlbGVjdGlvbjpkLHNpZGU6ZS5zaWRlfSxkJiZkLm5vZGUoKSYmZC5ub2RlKCkucGFyZW50Tm9kZSl7dmFyIGc9aC5nZXRUcmFuc2xhdGUoZC5ub2RlKCkucGFyZW50Tm9kZSk7Zi5vZmZzZXRMZWZ0PWcueCxmLm9mZnNldFRvcD1nLnl9fXJldHVybiBjLmRyYXcodCxpK1widGl0bGVcIix7cHJvcENvbnRhaW5lcjplLHByb3BOYW1lOmUuX25hbWUrXCIudGl0bGUudGV4dFwiLHBsYWNlaG9sZGVyOm4uX2RmbHRUaXRsZVthXSxhdm9pZDpmLHRyYW5zZm9ybTpzLGF0dHJpYnV0ZXM6e3g6bCx5OnUsXCJ0ZXh0LWFuY2hvclwiOlwibWlkZGxlXCJ9fSl9KHQsZSl9KSxzLnN5bmNPckFzeW5jKEcpfWZ1bmN0aW9uIGV0KHQsZSl7dFswXT1NYXRoLm1pbih0WzBdLGVbMF0pLHRbMV09TWF0aC5tYXgodFsxXSxlWzFdKX19LFQuZ2V0VGlja1NpZ25zPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2lkLmNoYXJBdCgwKSxyPXt4OlwidG9wXCIseTpcInJpZ2h0XCJ9W2VdLG49dC5zaWRlPT09cj8xOi0xLGk9Wy0xLDEsbiwtbl07cmV0dXJuXCJpbnNpZGVcIiE9PXQudGlja3M9PShcInhcIj09PWUpJiYoaT1pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4tdH0pKSxpfSxULm1ha2VUcmFuc0ZuPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2lkLmNoYXJBdCgwKSxyPXQuX29mZnNldDtyZXR1cm5cInhcIj09PWU/ZnVuY3Rpb24oZSl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrKHIrdC5sMnAoZS54KSkrXCIsMClcIn06ZnVuY3Rpb24oZSl7cmV0dXJuXCJ0cmFuc2xhdGUoMCxcIisocit0LmwycChlLngpKStcIilcIn19LFQubWFrZVRpY2tQYXRoPWZ1bmN0aW9uKHQsZSxyLG4pe249dm9pZCAwIT09bj9uOnQudGlja2xlbjt2YXIgaT10Ll9pZC5jaGFyQXQoMCksYT0odC5saW5ld2lkdGh8fDEpLzI7cmV0dXJuXCJ4XCI9PT1pP1wiTTAsXCIrKGUrYSpyKStcInZcIituKnI6XCJNXCIrKGUrYSpyKStcIiwwaFwiK24qcn0sVC5tYWtlTGFiZWxGbnM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuX2lkLmNoYXJBdCgwKSxhPVwiYm91bmRhcmllc1wiIT09dC50aWNrc29uJiZcIm91dHNpZGVcIj09PXQudGlja3Msbz0wLGw9MDtpZihhJiYobys9dC50aWNrbGVuKSxyJiZcIm91dHNpZGVcIj09PXQudGlja3Mpe3ZhciBjPXMuZGVnMnJhZChyKTtvPXQudGlja2xlbipNYXRoLmNvcyhjKSsxLGw9dC50aWNrbGVuKk1hdGguc2luKGMpfXQuc2hvd3RpY2tsYWJlbHMmJihhfHx0LnNob3dsaW5lKSYmKG8rPS4yKnQudGlja2ZvbnQuc2l6ZSk7dmFyIHUsaCxmLHAsZD17bGFiZWxTdGFuZG9mZjpvKz0odC5saW5ld2lkdGh8fDEpLzIsbGFiZWxTaGlmdDpsfTtyZXR1cm5cInhcIj09PW4/KHA9XCJib3R0b21cIj09PXQuc2lkZT8xOi0xLHU9bCpwLGg9ZStvKnAsZj1cImJvdHRvbVwiPT09dC5zaWRlPzE6LS4yLGQueEZuPWZ1bmN0aW9uKHQpe3JldHVybiB0LmR4K3V9LGQueUZuPWZ1bmN0aW9uKHQpe3JldHVybiB0LmR5K2grdC5mb250U2l6ZSpmfSxkLmFuY2hvckZuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkoZSkmJjAhPT1lJiYxODAhPT1lP2UqcDwwP1wiZW5kXCI6XCJzdGFydFwiOlwibWlkZGxlXCJ9LGQuaGVpZ2h0Rm49ZnVuY3Rpb24oZSxyLG4pe3JldHVybiByPC02MHx8cj42MD8tLjUqbjpcInRvcFwiPT09dC5zaWRlPy1uOjB9KTpcInlcIj09PW4mJihwPVwicmlnaHRcIj09PXQuc2lkZT8xOi0xLHU9byxoPS1sKnAsZj05MD09PU1hdGguYWJzKHQudGlja2FuZ2xlKT8uNTowLGQueEZuPWZ1bmN0aW9uKHQpe3JldHVybiB0LmR4K2UrKHUrdC5mb250U2l6ZSpmKSpwfSxkLnlGbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5keStoK3QuZm9udFNpemUqa30sZC5hbmNob3JGbj1mdW5jdGlvbihlLHIpe3JldHVybiBpKHIpJiY5MD09PU1hdGguYWJzKHIpP1wibWlkZGxlXCI6XCJyaWdodFwiPT09dC5zaWRlP1wic3RhcnRcIjpcImVuZFwifSxkLmhlaWdodEZuPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4ocio9XCJsZWZ0XCI9PT10LnNpZGU/MTotMSk8LTMwPy1uOnI8MzA/LS41Km46MH0pLGR9LFQuZHJhd1RpY2tzPWZ1bmN0aW9uKHQsZSxyKXtyPXJ8fHt9O3ZhciBuPWUuX2lkK1widGlja1wiLGk9ci5sYXllci5zZWxlY3RBbGwoXCJwYXRoLlwiK24pLmRhdGEoZS50aWNrcz9yLnZhbHM6W10sVyk7aS5leGl0KCkucmVtb3ZlKCksaS5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChuLDEpLmNsYXNzZWQoXCJ0aWNrc1wiLDEpLmNsYXNzZWQoXCJjcmlzcFwiLCExIT09ci5jcmlzcCkuY2FsbCh1LnN0cm9rZSxlLnRpY2tjb2xvcikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixoLmNyaXNwUm91bmQodCxlLnRpY2t3aWR0aCwxKStcInB4XCIpLmF0dHIoXCJkXCIsci5wYXRoKSxpLmF0dHIoXCJ0cmFuc2Zvcm1cIixyLnRyYW5zRm4pfSxULmRyYXdHcmlkPWZ1bmN0aW9uKHQsZSxyKXtyPXJ8fHt9O3ZhciBuPWUuX2lkK1wiZ3JpZFwiLGk9ci52YWxzLGE9ci5jb3VudGVyQXhpcztpZighMT09PWUuc2hvd2dyaWQpaT1bXTtlbHNlIGlmKGEmJlQuc2hvdWxkU2hvd1plcm9MaW5lKHQsZSxhKSlmb3IodmFyIG89XCJhcnJheVwiPT09ZS50aWNrbW9kZSxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBsPWlbc10ueDtpZihvPyFsOk1hdGguYWJzKGwpPGUuZHRpY2svMTAwKXtpZihpPWkuc2xpY2UoMCxzKS5jb25jYXQoaS5zbGljZShzKzEpKSwhbylicmVhaztzLS19fXZhciBjPXIubGF5ZXIuc2VsZWN0QWxsKFwicGF0aC5cIituKS5kYXRhKGksVyk7Yy5leGl0KCkucmVtb3ZlKCksYy5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChuLDEpLmNsYXNzZWQoXCJjcmlzcFwiLCExIT09ci5jcmlzcCksZS5fZ3c9aC5jcmlzcFJvdW5kKHQsZS5ncmlkd2lkdGgsMSksYy5hdHRyKFwidHJhbnNmb3JtXCIsci50cmFuc0ZuKS5hdHRyKFwiZFwiLHIucGF0aCkuY2FsbCh1LnN0cm9rZSxlLmdyaWRjb2xvcnx8XCIjZGRkXCIpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsZS5fZ3crXCJweFwiKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiByLnBhdGgmJmMuYXR0cihcImRcIixyLnBhdGgpfSxULmRyYXdaZXJvTGluZT1mdW5jdGlvbih0LGUscil7cj1yfHxyO3ZhciBuPWUuX2lkK1wiemxcIixpPVQuc2hvdWxkU2hvd1plcm9MaW5lKHQsZSxyLmNvdW50ZXJBeGlzKSxhPXIubGF5ZXIuc2VsZWN0QWxsKFwicGF0aC5cIituKS5kYXRhKGk/W3t4OjAsaWQ6ZS5faWR9XTpbXSk7YS5leGl0KCkucmVtb3ZlKCksYS5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChuLDEpLmNsYXNzZWQoXCJ6bFwiLDEpLmNsYXNzZWQoXCJjcmlzcFwiLCExIT09ci5jcmlzcCkuZWFjaChmdW5jdGlvbigpe3IubGF5ZXIuc2VsZWN0QWxsKFwicGF0aFwiKS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFMuaWRTb3J0KHQuaWQsZS5pZCl9KX0pLGEuYXR0cihcInRyYW5zZm9ybVwiLHIudHJhbnNGbikuYXR0cihcImRcIixyLnBhdGgpLmNhbGwodS5zdHJva2UsZS56ZXJvbGluZWNvbG9yfHx1LmRlZmF1bHRMaW5lKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLGguY3Jpc3BSb3VuZCh0LGUuemVyb2xpbmV3aWR0aCxlLl9nd3x8MSkrXCJweFwiKX0sVC5kcmF3TGFiZWxzPWZ1bmN0aW9uKHQsZSxyKXtyPXJ8fHt9O3ZhciBhPWUuX2lkLG89YS5jaGFyQXQoMCksYz1yLmNsc3x8YStcInRpY2tcIix1PXIudmFscyxmPXIubGFiZWxGbnMscD1yLnNlY29uZGFyeT8wOmUudGlja2FuZ2xlLGQ9KGUuX3RpY2tBbmdsZXN8fHt9KVtjXSxnPXIubGF5ZXIuc2VsZWN0QWxsKFwiZy5cIitjKS5kYXRhKGUuc2hvd3RpY2tsYWJlbHM/dTpbXSxXKSx2PVtdO2Z1bmN0aW9uIG0odCxlKXt0LmVhY2goZnVuY3Rpb24odCl7dmFyIGE9bi5zZWxlY3QodGhpcyksbz1hLnNlbGVjdChcIi50ZXh0LW1hdGgtZ3JvdXBcIikscz1mLmFuY2hvckZuKHQsZSksYz1yLnRyYW5zRm4uY2FsbChhLm5vZGUoKSx0KSsoaShlKSYmMCE9K2U/XCIgcm90YXRlKFwiK2UrXCIsXCIrZi54Rm4odCkrXCIsXCIrKGYueUZuKHQpLXQuZm9udFNpemUvMikrXCIpXCI6XCJcIiksdT1sLmxpbmVDb3VudChhKSxwPUEqdC5mb250U2l6ZSxkPWYuaGVpZ2h0Rm4odCxpKGUpPytlOjAsKHUtMSkqcCk7aWYoZCYmKGMrPVwiIHRyYW5zbGF0ZSgwLCBcIitkK1wiKVwiKSxvLmVtcHR5KCkpYS5zZWxlY3QoXCJ0ZXh0XCIpLmF0dHIoe3RyYW5zZm9ybTpjLFwidGV4dC1hbmNob3JcIjpzfSk7ZWxzZXt2YXIgZz1oLmJCb3goby5ub2RlKCkpLndpZHRoKntlbmQ6LS41LHN0YXJ0Oi41fVtzXTtvLmF0dHIoXCJ0cmFuc2Zvcm1cIixjKyhnP1widHJhbnNsYXRlKFwiK2crXCIsMClcIjpcIlwiKSl9fSl9Zy5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChjLDEpLmFwcGVuZChcInRleHRcIikuYXR0cihcInRleHQtYW5jaG9yXCIsXCJtaWRkbGVcIikuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxpPXQuX3Byb21pc2VzLmxlbmd0aDtyLmNhbGwobC5wb3NpdGlvblRleHQsZi54Rm4oZSksZi55Rm4oZSkpLmNhbGwoaC5mb250LGUuZm9udCxlLmZvbnRTaXplLGUuZm9udENvbG9yKS50ZXh0KGUudGV4dCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyx0KSx0Ll9wcm9taXNlc1tpXT92LnB1c2godC5fcHJvbWlzZXMucG9wKCkudGhlbihmdW5jdGlvbigpe20ocixwKX0pKTptKHIscCl9KSxnLmV4aXQoKS5yZW1vdmUoKSxyLnJlcG9zaXRpb25PblVwZGF0ZSYmZy5lYWNoKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLnNlbGVjdChcInRleHRcIikuY2FsbChsLnBvc2l0aW9uVGV4dCxmLnhGbih0KSxmLnlGbih0KSl9KSxtKGcsZHx8cCksZS5fc2VsZWN0aW9ucyYmKGUuX3NlbGVjdGlvbnNbY109Zyk7dmFyIHk9cy5zeW5jT3JBc3luYyhbZnVuY3Rpb24oKXtyZXR1cm4gdi5sZW5ndGgmJlByb21pc2UuYWxsKHYpfSxmdW5jdGlvbigpe20oZyxwKTt2YXIgdD1udWxsO2lmKHUubGVuZ3RoJiZcInhcIj09PW8mJiFpKHApJiYoXCJsb2dcIiE9PWUudHlwZXx8XCJEXCIhPT1TdHJpbmcoZS5kdGljaykuY2hhckF0KDApKSl7dD0wO3ZhciBuLGE9MCxsPVtdO2lmKGcuZWFjaChmdW5jdGlvbih0KXthPU1hdGgubWF4KGEsdC5mb250U2l6ZSk7dmFyIHI9ZS5sMnAodC54KSxuPSQodGhpcyksaT1oLmJCb3gobi5ub2RlKCkpO2wucHVzaCh7dG9wOjAsYm90dG9tOjEwLGhlaWdodDoxMCxsZWZ0OnItaS53aWR0aC8yLHJpZ2h0OnIraS53aWR0aC8yKzIsd2lkdGg6aS53aWR0aCsyfSl9KSxcImJvdW5kYXJpZXNcIiE9PWUudGlja3NvbiYmIWUuc2hvd2RpdmlkZXJzfHxyLnNlY29uZGFyeSl7dmFyIGY9dS5sZW5ndGgsZD1NYXRoLmFicygodVtmLTFdLngtdVswXS54KSplLl9tKS8oZi0xKTwyLjUqYXx8XCJtdWx0aWNhdGVnb3J5XCI9PT1lLnR5cGU7Zm9yKG49MDtuPGwubGVuZ3RoLTE7bisrKWlmKHMuYkJveEludGVyc2VjdChsW25dLGxbbisxXSkpe3Q9ZD85MDozMDticmVha319ZWxzZXt2YXIgdj0yO2ZvcihlLnRpY2tzJiYodis9ZS50aWNrd2lkdGgvMiksbj0wO248bC5sZW5ndGg7bisrKXt2YXIgeT11W25dLnhibmQseD1sW25dO2lmKG51bGwhPT15WzBdJiZ4LmxlZnQtZS5sMnAoeVswXSk8dnx8bnVsbCE9PXlbMV0mJmUubDJwKHlbMV0pLXgucmlnaHQ8dil7dD05MDticmVha319fXQmJm0oZyx0KX1lLl90aWNrQW5nbGVzJiYoZS5fdGlja0FuZ2xlc1tjXT1udWxsPT09dD9pKHApP3A6MDp0KX1dKTtyZXR1cm4geSYmeS50aGVuJiZ0Ll9wcm9taXNlcy5wdXNoKHkpLHl9LFQuc2hvdWxkU2hvd1plcm9MaW5lPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1zLnNpbXBsZU1hcChlLnJhbmdlLGUucjJsKTtyZXR1cm4gblswXSpuWzFdPD0wJiZlLnplcm9saW5lJiYoXCJsaW5lYXJcIj09PWUudHlwZXx8XCItXCI9PT1lLnR5cGUpJiZlLl9ncmlkVmFscy5sZW5ndGgmJihaKGUsMCl8fCFmdW5jdGlvbih0LGUscixuKXt2YXIgaT1yLl9tYWluQXhpcztpZighaSlyZXR1cm47dmFyIGE9dC5fZnVsbExheW91dCxvPWUuX2lkLmNoYXJBdCgwKSxzPVQuY291bnRlckxldHRlcihlLl9pZCksbD1lLl9vZmZzZXQrKE1hdGguYWJzKG5bMF0pPE1hdGguYWJzKG5bMV0pPT0oXCJ4XCI9PT1vKT8wOmUuX2xlbmd0aCk7ZnVuY3Rpb24gYyh0KXtpZighdC5zaG93bGluZXx8IXQubGluZXdpZHRoKXJldHVybiExO3ZhciByPU1hdGgubWF4KCh0LmxpbmV3aWR0aCtlLnplcm9saW5ld2lkdGgpLzIsMSk7ZnVuY3Rpb24gbih0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdCYmTWF0aC5hYnModC1sKTxyfWlmKG4odC5fbWFpbkxpbmVQb3NpdGlvbil8fG4odC5fbWFpbk1pcnJvclBvc2l0aW9uKSlyZXR1cm4hMDt2YXIgaT10Ll9saW5lcG9zaXRpb25zfHx7fTtmb3IodmFyIGEgaW4gaSlpZihuKGlbYV1bMF0pfHxuKGlbYV1bMV0pKXJldHVybiEwfXZhciB1PWEuX3Bsb3RzW3IuX21haW5TdWJwbG90XTtpZighKHUubWFpbnBsb3RpbmZvfHx1KS5vdmVybGF5cy5sZW5ndGgpcmV0dXJuIGMocik7Zm9yKHZhciBoPVQubGlzdCh0LHMpLGY9MDtmPGgubGVuZ3RoO2YrKyl7dmFyIHA9aFtmXTtpZihwLl9tYWluQXhpcz09PWkmJmMocCkpcmV0dXJuITB9fSh0LGUscixuKXx8ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5fZnVsbERhdGEsbj1lLl9tYWluU3VicGxvdCxpPWUuX2lkLmNoYXJBdCgwKSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV07aWYoITA9PT1zLnZpc2libGUmJnMueGF4aXMrcy55YXhpcz09PW4pe2lmKChvLnRyYWNlSXMocyxcImJhclwiKXx8XCJ3YXRlcmZhbGxcIj09PXMudHlwZSkmJnMub3JpZW50YXRpb249PT17eDpcImhcIix5OlwidlwifVtpXSlyZXR1cm4hMDtpZihzLmZpbGwmJnMuZmlsbC5jaGFyQXQocy5maWxsLmxlbmd0aC0xKT09PWkpcmV0dXJuITB9fXJldHVybiExfSh0LGUpKX0sVC5jbGlwRW5kcz1mdW5jdGlvbih0LGUpe3JldHVybiBlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gWih0LGUueCl9KX0sVC5hbGxvd0F1dG9NYXJnaW49ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVQubGlzdCh0LFwiXCIsITApLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmF1dG9tYXJnaW4mJmEuYWxsb3dBdXRvTWFyZ2luKHQsSihuKSksby5nZXRDb21wb25lbnRNZXRob2QoXCJyYW5nZXNsaWRlclwiLFwiaXNWaXNpYmxlXCIpKG4pJiZhLmFsbG93QXV0b01hcmdpbih0LEsobikpfX0sVC5zd2FwPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPVtdO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBhPVtdLG89dC5fZnVsbERhdGFbZVtyXV0ueGF4aXMscz10Ll9mdWxsRGF0YVtlW3JdXS55YXhpcztpZihvJiZzKXtmb3Iobj0wO248aS5sZW5ndGg7bisrKS0xPT09aVtuXS54LmluZGV4T2YobykmJi0xPT09aVtuXS55LmluZGV4T2Yocyl8fGEucHVzaChuKTtpZihhLmxlbmd0aCl7dmFyIGwsYz1pW2FbMF1dO2lmKGEubGVuZ3RoPjEpZm9yKG49MTtuPGEubGVuZ3RoO24rKylsPWlbYVtuXV0sUShjLngsbC54KSxRKGMueSxsLnkpO1EoYy54LFtvXSksUShjLnksW3NdKX1lbHNlIGkucHVzaCh7eDpbb10seTpbc119KX19cmV0dXJuIGl9KHQsZSksbj0wO248ci5sZW5ndGg7bisrKXR0KHQscltuXS54LHJbbl0ueSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vY29tcG9uZW50cy90aXRsZXNcIjo2NjYsXCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCI6NjczLFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiOjcyNSxcIi4uLy4uL3Bsb3RzL3Bsb3RzXCI6ODEwLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2F1dG9yYW5nZVwiOjc0OCxcIi4vYXhpc19hdXRvdHlwZVwiOjc1MCxcIi4vYXhpc19pZHNcIjo3NTIsXCIuL2NsZWFuX3RpY2tzXCI6NzU0LFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjc2MSxcIi4vc2V0X2NvbnZlcnRcIjo3NjcsZDM6MTU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw3NTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIShyPXJ8fHt9KS5ub011bHRpQ2F0ZWdvcnkmJihvPXQsaS5pc0FycmF5T3JUeXBlZEFycmF5KG9bMF0pJiZpLmlzQXJyYXlPclR5cGVkQXJyYXkob1sxXSkpP1wibXVsdGljYXRlZ29yeVwiOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPU1hdGgubWF4KDEsKHQubGVuZ3RoLTEpLzFlMyksYT0wLG89MCxzPXt9LGw9MDtsPHQubGVuZ3RoO2wrPXIpe3ZhciBjPXRbTWF0aC5yb3VuZChsKV0sdT1TdHJpbmcoYyk7c1t1XXx8KHNbdV09MSxpLmlzRGF0ZVRpbWUoYyxlKSYmKGErPTEpLG4oYykmJihvKz0xKSl9cmV0dXJuIGE+MipvfSh0LGUpP1wiZGF0ZVwiOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1NYXRoLm1heCgxLCh0Lmxlbmd0aC0xKS8xZTMpLHI9MCxuPTAsbz17fSxzPTA7czx0Lmxlbmd0aDtzKz1lKXt2YXIgbD10W01hdGgucm91bmQocyldLGM9U3RyaW5nKGwpO29bY118fChvW2NdPTEsXCJib29sZWFuXCI9PXR5cGVvZiBsP24rKzppLmNsZWFuTnVtYmVyKGwpIT09YT9yKys6XCJzdHJpbmdcIj09dHlwZW9mIGwmJm4rKyl9cmV0dXJuIG4+MipyfSh0KT9cImNhdGVnb3J5XCI6ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuITE7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYobih0W2VdKSlyZXR1cm4hMDtyZXR1cm4hMX0odCk/XCJsaW5lYXJcIjpcIi1cIjt2YXIgb319LHtcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDc1MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxvPXQoXCIuL3RpY2tfdmFsdWVfZGVmYXVsdHNcIikscz10KFwiLi90aWNrX21hcmtfZGVmYXVsdHNcIiksbD10KFwiLi90aWNrX2xhYmVsX2RlZmF1bHRzXCIpLGM9dChcIi4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHNcIiksdT10KFwiLi9saW5lX2dyaWRfZGVmYXVsdHNcIiksaD10KFwiLi9zZXRfY29udmVydFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsZixwKXt2YXIgZD1mLmxldHRlcixnPWYuZm9udHx8e30sdj1mLnNwbG9tU3Rhc2h8fHt9LG09cihcInZpc2libGVcIiwhZi5jaGVhdGVyb25seSkseT1lLnR5cGU7XCJkYXRlXCI9PT15JiZuLmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiaGFuZGxlRGVmYXVsdHNcIikodCxlLFwiY2FsZW5kYXJcIixmLmNhbGVuZGFyKTtpZihoKGUscCksIXIoXCJhdXRvcmFuZ2VcIiwhZS5pc1ZhbGlkUmFuZ2UodC5yYW5nZSkpfHxcImxpbmVhclwiIT09eSYmXCItXCIhPT15fHxyKFwicmFuZ2Vtb2RlXCIpLHIoXCJyYW5nZVwiKSxlLmNsZWFuUmFuZ2UoKSxjKHQsZSxyLGYpLFwiY2F0ZWdvcnlcIj09PXl8fGYubm9Ib3Zlcnx8cihcImhvdmVyZm9ybWF0XCIpLCFtKXJldHVybiBlO3ZhciB4PXIoXCJjb2xvclwiKSxiPXghPT1hLmNvbG9yLmRmbHQ/eDpnLmNvbG9yO3IoXCJ0aXRsZS50ZXh0XCIsdi5sYWJlbHx8cC5fZGZsdFRpdGxlW2RdKSxpLmNvZXJjZUZvbnQocixcInRpdGxlLmZvbnRcIix7ZmFtaWx5OmcuZmFtaWx5LHNpemU6TWF0aC5yb3VuZCgxLjIqZy5zaXplKSxjb2xvcjpifSksbyh0LGUscix5KSxsKHQsZSxyLHksZikscyh0LGUscixmKSx1KHQsZSxyLHtkZmx0Q29sb3I6eCxiZ0NvbG9yOmYuYmdDb2xvcixzaG93R3JpZDpmLnNob3dHcmlkLGF0dHJpYnV0ZXM6YX0pLChlLnNob3dsaW5lfHxlLnRpY2tzKSYmcihcIm1pcnJvclwiKSxmLmF1dG9tYXJnaW4mJnIoXCJhdXRvbWFyZ2luXCIpO3ZhciBfLHc9XCJtdWx0aWNhdGVnb3J5XCI9PT1lLnR5cGU7Zi5ub1RpY2tzb258fFwiY2F0ZWdvcnlcIiE9PWUudHlwZSYmIXd8fCFlLnRpY2tzJiYhZS5zaG93Z3JpZHx8KHcmJihfPVwiYm91bmRhcmllc1wiKSxyKFwidGlja3NvblwiLF8pKTt3JiYocihcInNob3dkaXZpZGVyc1wiKSYmKHIoXCJkaXZpZGVyY29sb3JcIikscihcImRpdmlkZXJ3aWR0aFwiKSkpO3JldHVybiBlfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzXCI6NzUzLFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjc2MSxcIi4vbGluZV9ncmlkX2RlZmF1bHRzXCI6NzYzLFwiLi9zZXRfY29udmVydFwiOjc2NyxcIi4vdGlja19sYWJlbF9kZWZhdWx0c1wiOjc2OCxcIi4vdGlja19tYXJrX2RlZmF1bHRzXCI6NzY5LFwiLi90aWNrX3ZhbHVlX2RlZmF1bHRzXCI6NzcwfV0sNzUyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4vY29uc3RhbnRzXCIpO3IuaWQybmFtZT1mdW5jdGlvbih0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCYmdC5tYXRjaChpLkFYX0lEX1BBVFRFUk4pKXt2YXIgZT10LnN1YnN0cigxKTtyZXR1cm5cIjFcIj09PWUmJihlPVwiXCIpLHQuY2hhckF0KDApK1wiYXhpc1wiK2V9fSxyLm5hbWUyaWQ9ZnVuY3Rpb24odCl7aWYodC5tYXRjaChpLkFYX05BTUVfUEFUVEVSTikpe3ZhciBlPXQuc3Vic3RyKDUpO3JldHVyblwiMVwiPT09ZSYmKGU9XCJcIiksdC5jaGFyQXQoMCkrZX19LHIuY2xlYW5JZD1mdW5jdGlvbih0LGUpe2lmKHQubWF0Y2goaS5BWF9JRF9QQVRURVJOKSYmKCFlfHx0LmNoYXJBdCgwKT09PWUpKXt2YXIgcj10LnN1YnN0cigxKS5yZXBsYWNlKC9eMCsvLFwiXCIpO3JldHVyblwiMVwiPT09ciYmKHI9XCJcIiksdC5jaGFyQXQoMCkrcn19LHIubGlzdD1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC5fZnVsbExheW91dDtpZighaSlyZXR1cm5bXTt2YXIgYSxvPXIubGlzdElkcyh0LGUpLHM9bmV3IEFycmF5KG8ubGVuZ3RoKTtmb3IoYT0wO2E8by5sZW5ndGg7YSsrKXt2YXIgbD1vW2FdO3NbYV09aVtsLmNoYXJBdCgwKStcImF4aXNcIitsLnN1YnN0cigxKV19aWYoIW4pe3ZhciBjPWkuX3N1YnBsb3RzLmdsM2R8fFtdO2ZvcihhPTA7YTxjLmxlbmd0aDthKyspe3ZhciB1PWlbY1thXV07ZT9zLnB1c2godVtlK1wiYXhpc1wiXSk6cy5wdXNoKHUueGF4aXMsdS55YXhpcyx1LnpheGlzKX19cmV0dXJuIHN9LHIubGlzdElkcz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQ7aWYoIXIpcmV0dXJuW107dmFyIG49ci5fc3VicGxvdHM7cmV0dXJuIGU/bltlK1wiYXhpc1wiXTpuLnhheGlzLmNvbmNhdChuLnlheGlzKX0sci5nZXRGcm9tSWQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXQuX2Z1bGxMYXlvdXQ7cmV0dXJuXCJ4XCI9PT1uP2U9ZS5yZXBsYWNlKC95WzAtOV0qLyxcIlwiKTpcInlcIj09PW4mJihlPWUucmVwbGFjZSgveFswLTldKi8sXCJcIikpLGlbci5pZDJuYW1lKGUpXX0sci5nZXRGcm9tVHJhY2U9ZnVuY3Rpb24odCxlLGkpe3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz1udWxsO2lmKG4udHJhY2VJcyhlLFwiZ2wzZFwiKSl7dmFyIHM9ZS5zY2VuZTtcInNjZW5lXCI9PT1zLnN1YnN0cigwLDUpJiYobz1hW3NdW2krXCJheGlzXCJdKX1lbHNlIG89ci5nZXRGcm9tSWQodCxlW2krXCJheGlzXCJdfHxpKTtyZXR1cm4gb30sci5pZFNvcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmNoYXJBdCgwKSxuPWUuY2hhckF0KDApO3JldHVybiByIT09bj9yPm4/MTotMTorKHQuc3Vic3RyKDEpfHwxKS0rKGUuc3Vic3RyKDEpfHwxKX0sci5nZXRBeGlzR3JvdXA9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5fYXhpc01hdGNoR3JvdXBzLG49MDtuPHIubGVuZ3RoO24rKyl7aWYocltuXVtlXSlyZXR1cm5cImdcIitufXJldHVybiBlfX0se1wiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2NvbnN0YW50c1wiOjc1NX1dLDc1MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtpZihcImNhdGVnb3J5XCI9PT1lLnR5cGUpe3ZhciBpLGE9dC5jYXRlZ29yeWFycmF5LG89QXJyYXkuaXNBcnJheShhKSYmYS5sZW5ndGg+MDtvJiYoaT1cImFycmF5XCIpO3ZhciBzLGw9cihcImNhdGVnb3J5b3JkZXJcIixpKTtcImFycmF5XCI9PT1sJiYocz1yKFwiY2F0ZWdvcnlhcnJheVwiKSksb3x8XCJhcnJheVwiIT09bHx8KGw9ZS5jYXRlZ29yeW9yZGVyPVwidHJhY2VcIiksXCJ0cmFjZVwiPT09bD9lLl9pbml0aWFsQ2F0ZWdvcmllcz1bXTpcImFycmF5XCI9PT1sP2UuX2luaXRpYWxDYXRlZ29yaWVzPXMuc2xpY2UoKToocz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPWUuZGF0YUF0dHJ8fHQuX2lkLmNoYXJBdCgwKSxvPXt9O2lmKGUuYXhEYXRhKXI9ZS5heERhdGE7ZWxzZSBmb3Iocj1bXSxuPTA7bjxlLmRhdGEubGVuZ3RoO24rKyl7dmFyIHM9ZS5kYXRhW25dO3NbYStcImF4aXNcIl09PT10Ll9pZCYmci5wdXNoKHMpfWZvcihuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBsPXJbbl1bYV07Zm9yKGk9MDtpPGwubGVuZ3RoO2krKyl7dmFyIGM9bFtpXTtudWxsIT1jJiYob1tjXT0xKX19cmV0dXJuIE9iamVjdC5rZXlzKG8pfShlLG4pLnNvcnQoKSxcImNhdGVnb3J5IGFzY2VuZGluZ1wiPT09bD9lLl9pbml0aWFsQ2F0ZWdvcmllcz1zOlwiY2F0ZWdvcnkgZGVzY2VuZGluZ1wiPT09bCYmKGUuX2luaXRpYWxDYXRlZ29yaWVzPXMucmV2ZXJzZSgpKSl9fX0se31dLDc1NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKS5PTkVEQVk7ci5kdGljaz1mdW5jdGlvbih0LGUpe3ZhciByPVwibG9nXCI9PT1lLGk9XCJkYXRlXCI9PT1lLG89XCJjYXRlZ29yeVwiPT09ZSxzPWk/YToxO2lmKCF0KXJldHVybiBzO2lmKG4odCkpcmV0dXJuKHQ9TnVtYmVyKHQpKTw9MD9zOm8/TWF0aC5tYXgoMSxNYXRoLnJvdW5kKHQpKTppP01hdGgubWF4KC4xLHQpOnQ7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHR8fCFpJiYhcilyZXR1cm4gczt2YXIgbD10LmNoYXJBdCgwKSxjPXQuc3Vic3RyKDEpO3JldHVybihjPW4oYyk/TnVtYmVyKGMpOjApPD0wfHwhKGkmJlwiTVwiPT09bCYmYz09PU1hdGgucm91bmQoYyl8fHImJlwiTFwiPT09bHx8ciYmXCJEXCI9PT1sJiYoMT09PWN8fDI9PT1jKSk/czp0fSxyLnRpY2swPWZ1bmN0aW9uKHQsZSxyLGEpe3JldHVyblwiZGF0ZVwiPT09ZT9pLmNsZWFuRGF0ZSh0LGkuZGF0ZVRpY2swKHIpKTpcIkQxXCIhPT1hJiZcIkQyXCIhPT1hP24odCk/TnVtYmVyKHQpOjA6dm9pZCAwfX0se1wiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sNzU1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYi9yZWdleFwiKS5jb3VudGVyO2UuZXhwb3J0cz17aWRSZWdleDp7eDpuKFwieFwiKSx5Om4oXCJ5XCIpfSxhdHRyUmVnZXg6bihcIlt4eV1heGlzXCIpLHhBeGlzTWF0Y2g6bihcInhheGlzXCIpLHlBeGlzTWF0Y2g6bihcInlheGlzXCIpLEFYX0lEX1BBVFRFUk46L15beHl6XVswLTldKiQvLEFYX05BTUVfUEFUVEVSTjovXlt4eXpdYXhpc1swLTldKiQvLFNVQlBMT1RfUEFUVEVSTjovXngoWzAtOV0qKXkoWzAtOV0qKSQvLE1JTkRSQUc6OCxNSU5TRUxFQ1Q6MTIsTUlOWk9PTToyMCxEUkFHR0VSU0laRToyMCxCRU5EUFg6MS41LFJFRFJBV0RFTEFZOjUwLFNFTEVDVERFTEFZOjEwMCxTRUxFQ1RJRDpcIi1zZWxlY3RcIixERkxUUkFOR0VYOlstMSw2XSxERkxUUkFOR0VZOlstMSw0XSx0cmFjZUxheWVyQ2xhc3NlczpbXCJoZWF0bWFwbGF5ZXJcIixcImNvbnRvdXJjYXJwZXRsYXllclwiLFwiY29udG91cmxheWVyXCIsXCJ3YXRlcmZhbGxsYXllclwiLFwiYmFybGF5ZXJcIixcImNhcnBldGxheWVyXCIsXCJ2aW9saW5sYXllclwiLFwiYm94bGF5ZXJcIixcIm9obGNsYXllclwiLFwic2NhdHRlcmNhcnBldGxheWVyXCIsXCJzY2F0dGVybGF5ZXJcIl0sbGF5ZXJWYWx1ZTJsYXllckNsYXNzOntcImFib3ZlIHRyYWNlc1wiOlwiYWJvdmVcIixcImJlbG93IHRyYWNlc1wiOlwiYmVsb3dcIn19fSx7XCIuLi8uLi9saWIvcmVnZXhcIjo3MTd9XSw3NTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vYXhpc19pZHNcIikuaWQybmFtZSxhPXQoXCIuL3NjYWxlX3pvb21cIiksbz10KFwiLi9hdXRvcmFuZ2VcIikubWFrZVBhZEZuLHM9dChcIi4vYXV0b3JhbmdlXCIpLmNvbmNhdEV4dHJlbWVzLGw9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQUxNT1NUX0VRVUFMLGM9dChcIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIikuRlJPTV9CTDtmdW5jdGlvbiB1KHQsZSxyLG4sYSl7dmFyIG8scyxsLGMsdT1cInJhbmdlXCIhPT1hLGg9bltpKGUpXS50eXBlLGY9W107Zm9yKHM9MDtzPHIubGVuZ3RoO3MrKylpZigobD1yW3NdKSE9PWUmJihjPW5baShsKV0pLnR5cGU9PT1oKWlmKGMuZml4ZWRyYW5nZSl7aWYodSYmYy5hbmNob3Ipe25baShjLmFuY2hvcildLmZpeGVkcmFuZ2UmJmYucHVzaChsKX19ZWxzZSBmLnB1c2gobCk7Zm9yKG89MDtvPHQubGVuZ3RoO28rKylpZih0W29dW2VdKXt2YXIgcD10W29dLGQ9W107Zm9yKHM9MDtzPGYubGVuZ3RoO3MrKylwW2w9ZltzXV18fGQucHVzaChsKTtyZXR1cm57bGlua2FibGVBeGVzOmQsdGhpc0dyb3VwOnB9fXJldHVybntsaW5rYWJsZUF4ZXM6Zix0aGlzR3JvdXA6bnVsbH19ZnVuY3Rpb24gaCh0LGUscixuLGkpe3ZhciBhLG8scyxsLGM7bnVsbD09PWU/KChlPXt9KVtyXT0xLGM9dC5sZW5ndGgsdC5wdXNoKGUpKTpjPXQuaW5kZXhPZihlKTt2YXIgdT1PYmplY3Qua2V5cyhlKTtmb3IoYT0wO2E8dC5sZW5ndGg7YSsrKWlmKHM9dFthXSxhIT09YyYmc1tuXSl7dmFyIGg9c1tuXTtmb3Iobz0wO288dS5sZW5ndGg7bysrKXNbbD11W29dXT1oKmkqZVtsXTtyZXR1cm4gdm9pZCB0LnNwbGljZShjLDEpfWlmKDEhPT1pKWZvcihvPTA7bzx1Lmxlbmd0aDtvKyspZVt1W29dXSo9aTtlW25dPTF9ZnVuY3Rpb24gZih0LGUpe3ZhciByPXQuX2lucHV0RG9tYWluLG49Y1t0LmNvbnN0cmFpbnRvd2FyZF0saT1yWzBdKyhyWzFdLXJbMF0pKm47dC5kb21haW49dC5faW5wdXQuZG9tYWluPVtpKyhyWzBdLWkpL2UsaSsoclsxXS1pKS9lXSx0LnNldFNjYWxlKCl9ci5oYW5kbGVDb25zdHJhaW50RGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsaSxhKXt2YXIgbyxzLGwsYyxmPWEuX2F4aXNDb25zdHJhaW50R3JvdXBzLHA9YS5fYXhpc01hdGNoR3JvdXBzLGQ9ZS5faWQsZz1kLmNoYXJBdCgwKSx2PSgoYS5fc3Bsb21BeGVzfHx7fSlbZ118fHt9KVtkXXx8e30sbT1lLl9pZCx5PW0uY2hhckF0KDApLHg9cihcImNvbnN0cmFpblwiKTtpZihuLmNvZXJjZSh0LGUse2NvbnN0cmFpbnRvd2FyZDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6XCJ4XCI9PT15P1tcImxlZnRcIixcImNlbnRlclwiLFwicmlnaHRcIl06W1wiYm90dG9tXCIsXCJtaWRkbGVcIixcInRvcFwiXSxkZmx0OlwieFwiPT09eT9cImNlbnRlclwiOlwibWlkZGxlXCJ9fSxcImNvbnN0cmFpbnRvd2FyZFwiKSwhdC5tYXRjaGVzJiYhdi5tYXRjaGVzfHxlLmZpeGVkcmFuZ2V8fChzPXUocCxtLGksYSksbz1uLmNvZXJjZSh0LGUse21hdGNoZXM6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOnMubGlua2FibGVBeGVzfHxbXSxkZmx0OnYubWF0Y2hlc319LFwibWF0Y2hlc1wiKSksb3x8IXQuc2NhbGVhbmNob3J8fGUuZml4ZWRyYW5nZSYmXCJkb21haW5cIiE9PXh8fChjPXUoZixtLGksYSx4KSxsPW4uY29lcmNlKHQsZSx7c2NhbGVhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOmMubGlua2FibGVBeGVzfHxbXX19LFwic2NhbGVhbmNob3JcIikpLG8/KGRlbGV0ZSBlLmNvbnN0cmFpbixoKHAscy50aGlzR3JvdXAsbSxvLDEpKTotMSE9PWkuaW5kZXhPZih0Lm1hdGNoZXMpJiZuLndhcm4oXCJpZ25vcmVkIFwiK2UuX25hbWUrJy5tYXRjaGVzOiBcIicrdC5tYXRjaGVzKydcIiB0byBhdm9pZCBlaXRoZXIgYW4gaW5maW5pdGUgbG9vcCBvciBiZWNhdXNlIHRoZSB0YXJnZXQgYXhpcyBoYXMgZml4ZWQgcmFuZ2UuJyksbCl7dmFyIGI9cihcInNjYWxlcmF0aW9cIik7Ynx8KGI9ZS5zY2FsZXJhdGlvPTEpLGgoZixjLnRoaXNHcm91cCxtLGwsYil9ZWxzZS0xIT09aS5pbmRleE9mKHQuc2NhbGVhbmNob3IpJiZuLndhcm4oXCJpZ25vcmVkIFwiK2UuX25hbWUrJy5zY2FsZWFuY2hvcjogXCInK3Quc2NhbGVhbmNob3IrJ1wiIHRvIGF2b2lkIGVpdGhlciBhbiBpbmZpbml0ZSBsb29wIGFuZCBwb3NzaWJseSBpbmNvbnNpc3RlbnQgc2NhbGVyYXRpb3MsIG9yIGJlY2F1c2UgdGhlIHRhcmdldCBheGlzIGhhcyBmaXhlZCByYW5nZSBvciB0aGlzIGF4aXMgZGVjbGFyZXMgYSAqbWF0Y2hlcyogY29uc3RyYWludC4nKX0sci5lbmZvcmNlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixjLHUsaCxwLGQ9dC5fZnVsbExheW91dCxnPWQuX2F4aXNDb25zdHJhaW50R3JvdXBzfHxbXTtmb3IoZT0wO2U8Zy5sZW5ndGg7ZSsrKXt2YXIgdj1nW2VdLG09T2JqZWN0LmtleXModikseT0xLzAseD0wLGI9MS8wLF89e30sdz17fSxrPSExO2ZvcihyPTA7cjxtLmxlbmd0aDtyKyspd1tuPW1bcl1dPWM9ZFtpKG4pXSxjLl9pbnB1dERvbWFpbj9jLmRvbWFpbj1jLl9pbnB1dERvbWFpbi5zbGljZSgpOmMuX2lucHV0RG9tYWluPWMuZG9tYWluLnNsaWNlKCksYy5faW5wdXRSYW5nZXx8KGMuX2lucHV0UmFuZ2U9Yy5yYW5nZS5zbGljZSgpKSxjLnNldFNjYWxlKCksX1tuXT11PU1hdGguYWJzKGMuX20pL3Zbbl0seT1NYXRoLm1pbih5LHUpLFwiZG9tYWluXCIhPT1jLmNvbnN0cmFpbiYmYy5fY29uc3RyYWludFNocmlua2FibGV8fChiPU1hdGgubWluKGIsdSkpLGRlbGV0ZSBjLl9jb25zdHJhaW50U2hyaW5rYWJsZSx4PU1hdGgubWF4KHgsdSksXCJkb21haW5cIj09PWMuY29uc3RyYWluJiYoaz0hMCk7aWYoISh5PmwqeCl8fGspZm9yKHI9MDtyPG0ubGVuZ3RoO3IrKylpZih1PV9bbj1tW3JdXSxoPShjPXdbbl0pLmNvbnN0cmFpbix1IT09Ynx8XCJkb21haW5cIj09PWgpaWYocD11L2IsXCJyYW5nZVwiPT09aClhKGMscCk7ZWxzZXt2YXIgQT1jLl9pbnB1dERvbWFpbixUPShjLmRvbWFpblsxXS1jLmRvbWFpblswXSkvKEFbMV0tQVswXSksTT0oYy5yMmwoYy5yYW5nZVsxXSktYy5yMmwoYy5yYW5nZVswXSkpLyhjLnIybChjLl9pbnB1dFJhbmdlWzFdKS1jLnIybChjLl9pbnB1dFJhbmdlWzBdKSk7aWYoKHAvPVQpKk08MSl7Yy5kb21haW49Yy5faW5wdXQuZG9tYWluPUEuc2xpY2UoKSxhKGMscCk7Y29udGludWV9aWYoTTwxJiYoYy5yYW5nZT1jLl9pbnB1dC5yYW5nZT1jLl9pbnB1dFJhbmdlLnNsaWNlKCkscCo9TSksYy5hdXRvcmFuZ2Upe3ZhciBTPWMucjJsKGMucmFuZ2VbMF0pLEU9Yy5yMmwoYy5yYW5nZVsxXSksQz0oUytFKS8yLEw9Qyx6PUMsTz1NYXRoLmFicyhFLUMpLEk9Qy1PKnAqMS4wMDAxLEQ9QytPKnAqMS4wMDAxLFA9byhjKTtmKGMscCk7dmFyIFIsRixCPU1hdGguYWJzKGMuX20pLE49cyh0LGMpLGo9Ti5taW4sVj1OLm1heDtmb3IoRj0wO0Y8ai5sZW5ndGg7RisrKShSPWpbRl0udmFsLVAoaltGXSkvQik+SSYmUjxMJiYoTD1SKTtmb3IoRj0wO0Y8Vi5sZW5ndGg7RisrKShSPVZbRl0udmFsK1AoVltGXSkvQik8RCYmUj56JiYoej1SKTtwLz0oei1MKS8oMipPKSxMPWMubDJyKEwpLHo9Yy5sMnIoeiksYy5yYW5nZT1jLl9pbnB1dC5yYW5nZT1TPEU/W0wsel06W3osTF19ZihjLHApfX19LHIuY2xlYW49ZnVuY3Rpb24odCxlKXtpZihlLl9pbnB1dERvbWFpbil7Zm9yKHZhciByPSExLG49ZS5faWQsaT10Ll9mdWxsTGF5b3V0Ll9heGlzQ29uc3RyYWludEdyb3VwcyxhPTA7YTxpLmxlbmd0aDthKyspaWYoaVthXVtuXSl7cj0hMDticmVha31yJiZcImRvbWFpblwiPT09ZS5jb25zdHJhaW58fChlLl9pbnB1dC5kb21haW49ZS5kb21haW49ZS5faW5wdXREb21haW4sZGVsZXRlIGUuX2lucHV0RG9tYWluKX19fSx7XCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCI6NjczLFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4vYXV0b3JhbmdlXCI6NzQ4LFwiLi9heGlzX2lkc1wiOjc1MixcIi4vc2NhbGVfem9vbVwiOjc2NX1dLDc1NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJ0aW55Y29sb3IyXCIpLGE9dChcImhhcy1wYXNzaXZlLWV2ZW50c1wiKSxvPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxzPXQoXCIuLi8uLi9saWJcIiksbD10KFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCIpLGM9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksdT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLGg9dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIiksZj10KFwiLi9heGVzXCIpLHA9dChcIi4uLy4uL2xpYi9zZXRjdXJzb3JcIiksZD10KFwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudFwiKSxnPXQoXCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCIpLkZST01fVEwsdj10KFwiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzXCIpLG09dChcIi4uLy4uL3Bsb3RfYXBpL3N1YnJvdXRpbmVzXCIpLnJlZHJhd1JlZ2xUcmFjZXMseT10KFwiLi4vcGxvdHNcIikseD10KFwiLi9heGlzX2lkc1wiKS5nZXRGcm9tSWQsYj10KFwiLi9zZWxlY3RcIikucHJlcFNlbGVjdCxfPXQoXCIuL3NlbGVjdFwiKS5jbGVhclNlbGVjdCx3PXQoXCIuL3NlbGVjdFwiKS5zZWxlY3RPbkNsaWNrLGs9dChcIi4vc2NhbGVfem9vbVwiKSxBPXQoXCIuL2NvbnN0YW50c1wiKSxUPUEuTUlORFJBRyxNPUEuTUlOWk9PTSxTPSEwO2Z1bmN0aW9uIEUodCxlLHIsbil7dmFyIGk9cy5lbnN1cmVTaW5nbGUodC5kcmFnbGF5ZXIsZSxyLGZ1bmN0aW9uKGUpe2UuY2xhc3NlZChcImRyYWdcIiwhMCkuc3R5bGUoe2ZpbGw6XCJ0cmFuc3BhcmVudFwiLFwic3Ryb2tlLXdpZHRoXCI6MH0pLmF0dHIoXCJkYXRhLXN1YnBsb3RcIix0LmlkKX0pO3JldHVybiBpLmNhbGwocCxuKSxpLm5vZGUoKX1mdW5jdGlvbiBDKHQsZSxyLGksYSxvLHMpe3ZhciBsPUUodCxcInJlY3RcIixlLHIpO3JldHVybiBuLnNlbGVjdChsKS5jYWxsKHUuc2V0UmVjdCxpLGEsbyxzKSxsfWZ1bmN0aW9uIEwodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZighdFtyXS5maXhlZHJhbmdlKXJldHVybiBlO3JldHVyblwiXCJ9ZnVuY3Rpb24geih0LGUscixuLGkpe2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz10W2FdO2lmKCFvLmZpeGVkcmFuZ2Upe3ZhciBzPW8uX3JsWzBdLGw9by5fcmxbMV0tcztvLnJhbmdlPVtvLmwycihzK2wqZSksby5sMnIocytsKnIpXSxuW28uX25hbWUrXCIucmFuZ2VbMF1cIl09by5yYW5nZVswXSxuW28uX25hbWUrXCIucmFuZ2VbMV1cIl09by5yYW5nZVsxXX19aWYoaSYmaS5sZW5ndGgpe3ZhciBjPShlKygxLXIpKS8yO3ooaSxjLDEtYyxuLFtdKX19ZnVuY3Rpb24gTyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZml4ZWRyYW5nZXx8KG4ucmFuZ2U9W24ubDJyKG4uX3JsWzBdLWUvbi5fbSksbi5sMnIobi5fcmxbMV0tZS9uLl9tKV0pfX1mdW5jdGlvbiBJKHQpe3JldHVybiAxLSh0Pj0wP01hdGgubWluKHQsLjkpOjEvKDEvTWF0aC5tYXgodCwtLjMpKzMuMjIyKSl9ZnVuY3Rpb24gRCh0LGUscixuLGkpe3JldHVybiB0LmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsXCJ6b29tYm94XCIpLnN0eWxlKHtmaWxsOmU+LjI/XCJyZ2JhKDAsMCwwLDApXCI6XCJyZ2JhKDI1NSwyNTUsMjU1LDApXCIsXCJzdHJva2Utd2lkdGhcIjowfSkuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK3IrXCIsIFwiK24rXCIpXCIpLmF0dHIoXCJkXCIsaStcIlpcIil9ZnVuY3Rpb24gUCh0LGUscil7cmV0dXJuIHQuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiY2xhc3NcIixcInpvb21ib3gtY29ybmVyc1wiKS5zdHlsZSh7ZmlsbDpjLmJhY2tncm91bmQsc3Ryb2tlOmMuZGVmYXVsdExpbmUsXCJzdHJva2Utd2lkdGhcIjoxLG9wYWNpdHk6MH0pLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIitlK1wiLCBcIityK1wiKVwiKS5hdHRyKFwiZFwiLFwiTTAsMFpcIil9ZnVuY3Rpb24gUih0LGUscixuLGksYSl7dC5hdHRyKFwiZFwiLG4rXCJNXCIrci5sK1wiLFwiK3IudCtcInZcIityLmgrXCJoXCIrci53K1widi1cIityLmgrXCJoLVwiK3IudytcIlpcIiksRih0LGUsaSxhKX1mdW5jdGlvbiBGKHQsZSxyLG4pe3J8fCh0LnRyYW5zaXRpb24oKS5zdHlsZShcImZpbGxcIixuPi4yP1wicmdiYSgwLDAsMCwwLjQpXCI6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuMylcIikuZHVyYXRpb24oMjAwKSxlLnRyYW5zaXRpb24oKS5zdHlsZShcIm9wYWNpdHlcIiwxKS5kdXJhdGlvbigyMDApKX1mdW5jdGlvbiBCKHQpe24uc2VsZWN0KHQpLnNlbGVjdEFsbChcIi56b29tYm94LC5qcy16b29tYm94LWJhY2tkcm9wLC5qcy16b29tYm94LW1lbnUsLnpvb21ib3gtY29ybmVyc1wiKS5yZW1vdmUoKX1mdW5jdGlvbiBOKHQpe1MmJnQuZGF0YSYmdC5fY29udGV4dC5zaG93VGlwcyYmKHMubm90aWZpZXIocy5fKHQsXCJEb3VibGUtY2xpY2sgdG8gem9vbSBiYWNrIG91dFwiKSxcImxvbmdcIiksUz0hMSl9ZnVuY3Rpb24gaih0KXtyZXR1cm5cImxhc3NvXCI9PT10fHxcInNlbGVjdFwiPT09dH1mdW5jdGlvbiBWKHQpe3ZhciBlPU1hdGguZmxvb3IoTWF0aC5taW4odC5iLXQudCx0LnItdC5sLE0pLzIpO3JldHVyblwiTVwiKyh0LmwtMy41KStcIixcIisodC50LS41K2UpK1wiaDN2XCIrLWUrXCJoXCIrZStcInYtM2gtXCIrKGUrMykrXCJaTVwiKyh0LnIrMy41KStcIixcIisodC50LS41K2UpK1wiaC0zdlwiKy1lK1wiaFwiKy1lK1widi0zaFwiKyhlKzMpK1wiWk1cIisodC5yKzMuNSkrXCIsXCIrKHQuYisuNS1lKStcImgtM3ZcIitlK1wiaFwiKy1lK1widjNoXCIrKGUrMykrXCJaTVwiKyh0LmwtMy41KStcIixcIisodC5iKy41LWUpK1wiaDN2XCIrZStcImhcIitlK1widjNoLVwiKyhlKzMpK1wiWlwifWZ1bmN0aW9uIFUodCxlLHIsbil7Zm9yKHZhciBpLGEsbyxsLGM9ITEsdT17fSxoPXt9LGY9MDtmPGUubGVuZ3RoO2YrKyl7dmFyIHA9ZVtmXTtmb3IoaSBpbiByKWlmKHBbaV0pe2ZvcihvIGluIHApKFwieFwiPT09by5jaGFyQXQoMCk/cjpuKVtvXXx8KHVbb109aSk7Zm9yKGEgaW4gbilwW2FdJiYoYz0hMCl9Zm9yKGEgaW4gbilpZihwW2FdKWZvcihsIGluIHApKFwieFwiPT09bC5jaGFyQXQoMCk/cjpuKVtsXXx8KGhbbF09YSl9YyYmKHMuZXh0ZW5kRmxhdCh1LGgpLGg9e30pO3ZhciBkPXt9LGc9W107Zm9yKG8gaW4gdSl7dmFyIHY9eCh0LG8pO2cucHVzaCh2KSxkW3YuX2lkXT12fXZhciBtPXt9LHk9W107Zm9yKGwgaW4gaCl7dmFyIGI9eCh0LGwpO3kucHVzaChiKSxtW2IuX2lkXT1ifXJldHVybnt4YUhhc2g6ZCx5YUhhc2g6bSx4YXhlczpnLHlheGVzOnkseExpbmtzOnUseUxpbmtzOmgsaXNTdWJwbG90Q29uc3RyYWluZWQ6Y319ZnVuY3Rpb24gcSh0LGUpe2lmKGEpe3ZhciByPXZvaWQgMCE9PXQub253aGVlbD9cIndoZWVsXCI6XCJtb3VzZXdoZWVsXCI7dC5fb253aGVlbCYmdC5yZW1vdmVFdmVudExpc3RlbmVyKHIsdC5fb253aGVlbCksdC5fb253aGVlbD1lLHQuYWRkRXZlbnRMaXN0ZW5lcihyLGUse3Bhc3NpdmU6ITF9KX1lbHNlIHZvaWQgMCE9PXQub253aGVlbD90Lm9ud2hlZWw9ZTp2b2lkIDAhPT10Lm9ubW91c2V3aGVlbCYmKHQub25tb3VzZXdoZWVsPWUpfWZ1bmN0aW9uIEgodCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHRbcl0pO3JldHVybiBlfWUuZXhwb3J0cz17bWFrZURyYWdCb3g6ZnVuY3Rpb24odCxlLHIsYSxjLHAsUyxFKXt2YXIgRixHLFksVyxYLFosJCxKLEssUSx0dCxldCxydCxudCxpdCxhdCxvdCxzdCxsdCxjdCx1dCxodD10Ll9mdWxsTGF5b3V0Ll96b29tbGF5ZXIsZnQ9UytFPT09XCJuc2V3XCIscHQ9MT09PShTK0UpLmxlbmd0aDtmdW5jdGlvbiBkdCgpe2lmKEY9ZS54YXhpcyxHPWUueWF4aXMsSz1GLl9sZW5ndGgsUT1HLl9sZW5ndGgsJD1GLl9vZmZzZXQsSj1HLl9vZmZzZXQsKFk9e30pW0YuX2lkXT1GLChXPXt9KVtHLl9pZF09RyxTJiZFKWZvcih2YXIgcj1lLm92ZXJsYXlzLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXS54YXhpcztZW2kuX2lkXT1pO3ZhciBhPXJbbl0ueWF4aXM7V1thLl9pZF09YX1YPUgoWSksWj1IKFcpLHJ0PUwoWCxFKSxudD1MKFosUyksaXQ9IW50JiYhcnQsdHQ9VSh0LHQuX2Z1bGxMYXlvdXQuX2F4aXNDb25zdHJhaW50R3JvdXBzLFksVyksZXQ9VSh0LHQuX2Z1bGxMYXlvdXQuX2F4aXNNYXRjaEdyb3VwcyxZLFcpLGF0PUV8fHR0LmlzU3VicGxvdENvbnN0cmFpbmVkfHxldC5pc1N1YnBsb3RDb25zdHJhaW5lZCxvdD1TfHx0dC5pc1N1YnBsb3RDb25zdHJhaW5lZHx8ZXQuaXNTdWJwbG90Q29uc3RyYWluZWQ7dmFyIG89dC5fZnVsbExheW91dDtzdD1vLl9oYXMoXCJzY2F0dGVyZ2xcIiksbHQ9by5faGFzKFwic3Bsb21cIiksY3Q9by5faGFzKFwic3ZnXCIpfWR0KCk7dmFyIGd0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD9cIm5zZXdcIj09PXQ/cj9cIlwiOlwicGFuXCI9PT1lP1wibW92ZVwiOlwiY3Jvc3NoYWlyXCI6dC50b0xvd2VyQ2FzZSgpK1wiLXJlc2l6ZVwiOlwicG9pbnRlclwifShudCtydCx0Ll9mdWxsTGF5b3V0LmRyYWdtb2RlLGZ0KSx2dD1DKGUsUytFK1wiZHJhZ1wiLGd0LHIsYSxjLHApO2lmKGl0JiYhZnQpcmV0dXJuIHZ0Lm9ubW91c2Vkb3duPW51bGwsdnQuc3R5bGUucG9pbnRlckV2ZW50cz1cIm5vbmVcIix2dDt2YXIgbXQseXQseHQsYnQsX3Qsd3Qsa3QsQXQsVHQsTXQsU3Q9e2VsZW1lbnQ6dnQsZ2Q6dCxwbG90aW5mbzplfTtmdW5jdGlvbiBFdCgpe1N0LnBsb3RpbmZvLnNlbGVjdGlvbj0hMSxfKHQpfWZ1bmN0aW9uIEN0KHIsaSl7dmFyIGE9dC5fZnVsbExheW91dC5jbGlja21vZGU7aWYoQih0KSwyIT09cnx8cHR8fGZ1bmN0aW9uKCl7aWYoIXQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pe3ZhciBlPXQuX2NvbnRleHQuZG91YmxlQ2xpY2sscj1bXTtydCYmKHI9ci5jb25jYXQoWCkpLG50JiYocj1yLmNvbmNhdChaKSksZXQueGF4ZXMmJihyPXIuY29uY2F0KGV0LnhheGVzKSksZXQueWF4ZXMmJihyPXIuY29uY2F0KGV0LnlheGVzKSk7dmFyIG4saSxhLHM9e307aWYoXCJyZXNldCthdXRvc2l6ZVwiPT09ZSlmb3IoZT1cImF1dG9zaXplXCIsaT0wO2k8ci5sZW5ndGg7aSsrKWlmKChuPXJbaV0pLl9yYW5nZUluaXRpYWwmJihuLnJhbmdlWzBdIT09bi5fcmFuZ2VJbml0aWFsWzBdfHxuLnJhbmdlWzFdIT09bi5fcmFuZ2VJbml0aWFsWzFdKXx8IW4uX3JhbmdlSW5pdGlhbCYmIW4uYXV0b3JhbmdlKXtlPVwicmVzZXRcIjticmVha31pZihcImF1dG9zaXplXCI9PT1lKWZvcihpPTA7aTxyLmxlbmd0aDtpKyspKG49cltpXSkuZml4ZWRyYW5nZXx8KHNbbi5fbmFtZStcIi5hdXRvcmFuZ2VcIl09ITApO2Vsc2UgaWYoXCJyZXNldFwiPT09ZSlmb3IoKHJ0fHx0dC5pc1N1YnBsb3RDb25zdHJhaW5lZCkmJihyPXIuY29uY2F0KHR0LnhheGVzKSksbnQmJiF0dC5pc1N1YnBsb3RDb25zdHJhaW5lZCYmKHI9ci5jb25jYXQodHQueWF4ZXMpKSx0dC5pc1N1YnBsb3RDb25zdHJhaW5lZCYmKHJ0P250fHwocj1yLmNvbmNhdChaKSk6cj1yLmNvbmNhdChYKSksaT0wO2k8ci5sZW5ndGg7aSsrKShuPXJbaV0pLmZpeGVkcmFuZ2V8fChuLl9yYW5nZUluaXRpYWw/KGE9bi5fcmFuZ2VJbml0aWFsLHNbbi5fbmFtZStcIi5yYW5nZVswXVwiXT1hWzBdLHNbbi5fbmFtZStcIi5yYW5nZVsxXVwiXT1hWzFdKTpzW24uX25hbWUrXCIuYXV0b3JhbmdlXCJdPSEwKTt0LmVtaXQoXCJwbG90bHlfZG91YmxlY2xpY2tcIixudWxsKSxvLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix0LHMpfX0oKSxmdClhLmluZGV4T2YoXCJzZWxlY3RcIik+LTEmJncoaSx0LFgsWixlLmlkLFN0KSxhLmluZGV4T2YoXCJldmVudFwiKT4tMSYmaC5jbGljayh0LGksZS5pZCk7ZWxzZSBpZigxPT09ciYmcHQpe3ZhciBzPVM/RzpGLGM9XCJzXCI9PT1TfHxcIndcIj09PUU/MDoxLHU9cy5fbmFtZStcIi5yYW5nZVtcIitjK1wiXVwiLGY9ZnVuY3Rpb24odCxlKXt2YXIgcixpPXQucmFuZ2VbZV0sYT1NYXRoLmFicyhpLXQucmFuZ2VbMS1lXSk7cmV0dXJuXCJkYXRlXCI9PT10LnR5cGU/aTpcImxvZ1wiPT09dC50eXBlPyhyPU1hdGguY2VpbChNYXRoLm1heCgwLC1NYXRoLmxvZyhhKS9NYXRoLkxOMTApKSszLG4uZm9ybWF0KFwiLlwiK3IrXCJnXCIpKE1hdGgucG93KDEwLGkpKSk6KHI9TWF0aC5mbG9vcihNYXRoLmxvZyhNYXRoLmFicyhpKSkvTWF0aC5MTjEwKS1NYXRoLmZsb29yKE1hdGgubG9nKGEpL01hdGguTE4xMCkrNCxuLmZvcm1hdChcIi5cIitTdHJpbmcocikrXCJnXCIpKGkpKX0ocyxjKSxwPVwibGVmdFwiLGQ9XCJtaWRkbGVcIjtpZihzLmZpeGVkcmFuZ2UpcmV0dXJuO1M/KGQ9XCJuXCI9PT1TP1widG9wXCI6XCJib3R0b21cIixcInJpZ2h0XCI9PT1zLnNpZGUmJihwPVwicmlnaHRcIikpOlwiZVwiPT09RSYmKHA9XCJyaWdodFwiKSx0Ll9jb250ZXh0LnNob3dBeGlzUmFuZ2VFbnRyeUJveGVzJiZuLnNlbGVjdCh2dCkuY2FsbChsLm1ha2VFZGl0YWJsZSx7Z2Q6dCxpbW1lZGlhdGU6ITAsYmFja2dyb3VuZDp0Ll9mdWxsTGF5b3V0LnBhcGVyX2JnY29sb3IsdGV4dDpTdHJpbmcoZiksZmlsbDpzLnRpY2tmb250P3MudGlja2ZvbnQuY29sb3I6XCIjNDQ0XCIsaG9yaXpvbnRhbEFsaWduOnAsdmVydGljYWxBbGlnbjpkfSkub24oXCJlZGl0XCIsZnVuY3Rpb24oZSl7dmFyIHI9cy5kMnIoZSk7dm9pZCAwIT09ciYmby5jYWxsKFwiX2d1aVJlbGF5b3V0XCIsdCx1LHIpfSl9fWZ1bmN0aW9uIEx0KGUscil7aWYodC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbilyZXR1cm4hMTt2YXIgbj1NYXRoLm1heCgwLE1hdGgubWluKEssZSttdCkpLGk9TWF0aC5tYXgoMCxNYXRoLm1pbihRLHIreXQpKSxhPU1hdGguYWJzKG4tbXQpLG89TWF0aC5hYnMoaS15dCk7ZnVuY3Rpb24gcygpe2t0PVwiXCIseHQucj14dC5sLHh0LnQ9eHQuYixUdC5hdHRyKFwiZFwiLFwiTTAsMFpcIil9aWYoeHQubD1NYXRoLm1pbihtdCxuKSx4dC5yPU1hdGgubWF4KG10LG4pLHh0LnQ9TWF0aC5taW4oeXQsaSkseHQuYj1NYXRoLm1heCh5dCxpKSx0dC5pc1N1YnBsb3RDb25zdHJhaW5lZClhPk18fG8+TT8oa3Q9XCJ4eVwiLGEvSz5vL1E/KG89YSpRL0sseXQ+aT94dC50PXl0LW86eHQuYj15dCtvKTooYT1vKksvUSxtdD5uP3h0Lmw9bXQtYTp4dC5yPW10K2EpLFR0LmF0dHIoXCJkXCIsVih4dCkpKTpzKCk7ZWxzZSBpZihldC5pc1N1YnBsb3RDb25zdHJhaW5lZClpZihhPk18fG8+TSl7a3Q9XCJ4eVwiO3ZhciBsPU1hdGgubWluKHh0LmwvSywoUS14dC5iKS9RKSxjPU1hdGgubWF4KHh0LnIvSywoUS14dC50KS9RKTt4dC5sPWwqSyx4dC5yPWMqSyx4dC5iPSgxLWwpKlEseHQudD0oMS1jKSpRLFR0LmF0dHIoXCJkXCIsVih4dCkpfWVsc2UgcygpO2Vsc2UhbnR8fG88TWF0aC5taW4oTWF0aC5tYXgoLjYqYSxUKSxNKT9hPFR8fCFydD9zKCk6KHh0LnQ9MCx4dC5iPVEsa3Q9XCJ4XCIsVHQuYXR0cihcImRcIixmdW5jdGlvbih0LGUpe3JldHVyblwiTVwiKyh0LmwtLjUpK1wiLFwiKyhlLU0tLjUpK1wiaC0zdlwiKygyKk0rMSkrXCJoM1pNXCIrKHQucisuNSkrXCIsXCIrKGUtTS0uNSkrXCJoM3ZcIisoMipNKzEpK1wiaC0zWlwifSh4dCx5dCkpKTohcnR8fGE8TWF0aC5taW4oLjYqbyxNKT8oeHQubD0wLHh0LnI9SyxrdD1cInlcIixUdC5hdHRyKFwiZFwiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJNXCIrKGUtTS0uNSkrXCIsXCIrKHQudC0uNSkrXCJ2LTNoXCIrKDIqTSsxKStcInYzWk1cIisoZS1NLS41KStcIixcIisodC5iKy41KStcInYzaFwiKygyKk0rMSkrXCJ2LTNaXCJ9KHh0LG10KSkpOihrdD1cInh5XCIsVHQuYXR0cihcImRcIixWKHh0KSkpO3h0Lnc9eHQuci14dC5sLHh0Lmg9eHQuYi14dC50LGt0JiYoTXQ9ITApLHQuX2RyYWdnZWQ9TXQsUihBdCxUdCx4dCxfdCx3dCxidCksd3Q9ITB9ZnVuY3Rpb24genQoKXtpZih1dD17fSxNYXRoLm1pbih4dC5oLHh0LncpPDIqVClyZXR1cm4gQih0KTtcInh5XCIhPT1rdCYmXCJ4XCIhPT1rdHx8KHooWCx4dC5sL0sseHQuci9LLHV0LHR0LnhheGVzKSxGdChcInhcIix1dCkpLFwieHlcIiE9PWt0JiZcInlcIiE9PWt0fHwoeihaLChRLXh0LmIpL1EsKFEteHQudCkvUSx1dCx0dC55YXhlcyksRnQoXCJ5XCIsdXQpKSxCKHQpLE50KCksTih0KX1TdC5wcmVwRm49ZnVuY3Rpb24oZSxyLG4pe3ZhciBhPVN0LmRyYWdtb2RlLG89dC5fZnVsbExheW91dC5kcmFnbW9kZTtvIT09YSYmKFN0LmRyYWdtb2RlPW8pLGR0KCksaXR8fChmdD9lLnNoaWZ0S2V5P1wicGFuXCI9PT1vP289XCJ6b29tXCI6aihvKXx8KG89XCJwYW5cIik6ZS5jdHJsS2V5JiYobz1cInBhblwiKTpvPVwicGFuXCIpLFN0Lm1pbkRyYWc9XCJsYXNzb1wiPT09bz8xOnZvaWQgMCxqKG8pPyhTdC54YXhlcz1YLFN0LnlheGVzPVosYihlLHIsbixTdCxvKSk6KFN0LmNsaWNrRm49Q3QsaihhKSYmRXQoKSxpdHx8KFwiem9vbVwiPT09bz8oU3QubW92ZUZuPUx0LFN0LmRvbmVGbj16dCxTdC5taW5EcmFnPTEsZnVuY3Rpb24oZSxyLG4pe3ZhciBhPXZ0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO210PXItYS5sZWZ0LHl0PW4tYS50b3AseHQ9e2w6bXQscjptdCx3OjAsdDp5dCxiOnl0LGg6MH0sYnQ9dC5faG1waXhjb3VudD90Ll9obWx1bWNvdW50L3QuX2htcGl4Y291bnQ6aSh0Ll9mdWxsTGF5b3V0LnBsb3RfYmdjb2xvcikuZ2V0THVtaW5hbmNlKCksd3Q9ITEsa3Q9XCJ4eVwiLE10PSExLEF0PUQoaHQsYnQsJCxKLF90PVwiTTAsMEhcIitLK1wiVlwiK1ErXCJIMFYwXCIpLFR0PVAoaHQsJCxKKX0oMCxyLG4pKTpcInBhblwiPT09byYmKFN0Lm1vdmVGbj1SdCxTdC5kb25lRm49TnQpKSksdC5fZnVsbExheW91dC5fcmVkcmFnPWZ1bmN0aW9uKCl7dmFyIGU9dC5fZHJhZ2RhdGE7ZSYmZS5lbGVtZW50PT09dnQmJihqKHQuX2Z1bGxMYXlvdXQuZHJhZ21vZGUpfHwoZHQoKSxqdChbMCwwLEssUV0pLFN0Lm1vdmVGbihlLmR4LGUuZHkpKSl9fSxkLmluaXQoU3QpO3ZhciBPdD1bMCwwLEssUV0sSXQ9bnVsbCxEdD1BLlJFRFJBV0RFTEFZLFB0PWUubWFpbnBsb3Q/dC5fZnVsbExheW91dC5fcGxvdHNbZS5tYWlucGxvdF06ZTtmdW5jdGlvbiBSdChlLHIpe2lmKCF0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uKXtpZih0Ll9mdWxsTGF5b3V0Ll9yZXBsb3R0aW5nPSEwLFwiZXdcIj09PXJ0fHxcIm5zXCI9PT1udClyZXR1cm4gcnQmJihPKFgsZSksRnQoXCJ4XCIpKSxudCYmKE8oWixyKSxGdChcInlcIikpLGp0KFtydD8tZTowLG50Py1yOjAsSyxRXSksdm9pZCBCdCgpO2lmKHR0LmlzU3VicGxvdENvbnN0cmFpbmVkJiZydCYmbnQpe3ZhciBuPVwid1wiPT09cnQ9PShcIm5cIj09PW50KT8xOi0xLGk9KGUvSytuKnIvUSkvMjtlPWkqSyxyPW4qaSpRfVwid1wiPT09cnQ/ZT1sKFgsMCxlKTpcImVcIj09PXJ0P2U9bChYLDEsLWUpOnJ0fHwoZT0wKSxcIm5cIj09PW50P3I9bChaLDEscik6XCJzXCI9PT1udD9yPWwoWiwwLC1yKTpudHx8KHI9MCk7dmFyIGE9XCJ3XCI9PT1ydD9lOjAsbz1cIm5cIj09PW50P3I6MDtpZih0dC5pc1N1YnBsb3RDb25zdHJhaW5lZCl7dmFyIHM7aWYoIXJ0JiYxPT09bnQubGVuZ3RoKXtmb3Iocz0wO3M8WC5sZW5ndGg7cysrKVhbc10ucmFuZ2U9WFtzXS5fci5zbGljZSgpLGsoWFtzXSwxLXIvUSk7YT0oZT1yKksvUSkvMn1pZighbnQmJjE9PT1ydC5sZW5ndGgpe2ZvcihzPTA7czxaLmxlbmd0aDtzKyspWltzXS5yYW5nZT1aW3NdLl9yLnNsaWNlKCksayhaW3NdLDEtZS9LKTtvPShyPWUqUS9LKS8yfX1GdChcInhcIiksRnQoXCJ5XCIpLGp0KFthLG8sSy1lLFEtcl0pLEJ0KCl9ZnVuY3Rpb24gbCh0LGUscil7Zm9yKHZhciBuLGksYT0xLWUsbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dO2lmKCFzLmZpeGVkcmFuZ2Upe249cyxpPXMuX3JsW2FdKyhzLl9ybFtlXS1zLl9ybFthXSkvSShyL3MuX2xlbmd0aCk7dmFyIGw9cy5sMnIoaSk7ITEhPT1sJiZ2b2lkIDAhPT1sJiYocy5yYW5nZVtlXT1sKX19cmV0dXJuIG4uX2xlbmd0aCoobi5fcmxbZV0taSkvKG4uX3JsW2VdLW4uX3JsW2FdKX19ZnVuY3Rpb24gRnQodCxlKXtmb3IodmFyIHI9ZXQuaXNTdWJwbG90Q29uc3RyYWluZWQ/e3g6Wix5Olh9W3RdOmV0W3QrXCJheGVzXCJdLG49ZXQuaXNTdWJwbG90Q29uc3RyYWluZWQ/e3g6WCx5Olp9W3RdOltdLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXSxvPWEuX2lkLHM9ZXQueExpbmtzW29dfHxldC55TGlua3Nbb10sbD1uWzBdfHxZW3NdfHxXW3NdO2lmKGwpe3ZhciBjPWwucmFuZ2U7ZT8oZVthLl9uYW1lK1wiLnJhbmdlWzBdXCJdPWNbMF0sZVthLl9uYW1lK1wiLnJhbmdlWzFdXCJdPWNbMV0pOmEucmFuZ2U9Y319fWZ1bmN0aW9uIEJ0KCl7dmFyIGUscj1bXTtmdW5jdGlvbiBuKHQpe2ZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5maXhlZHJhbmdlfHxyLnB1c2godFtlXS5faWQpfWZvcihhdCYmKG4oWCksbih0dC54YXhlcyksbihldC54YXhlcykpLG90JiYobihaKSxuKHR0LnlheGVzKSxuKGV0LnlheGVzKSksdXQ9e30sZT0wO2U8ci5sZW5ndGg7ZSsrKXt2YXIgaT1yW2VdLGE9eCh0LGkpO2YuZHJhd09uZSh0LGEse3NraXBUaXRsZTohMH0pLHV0W2EuX25hbWUrXCIucmFuZ2VbMF1cIl09YS5yYW5nZVswXSx1dFthLl9uYW1lK1wiLnJhbmdlWzFdXCJdPWEucmFuZ2VbMV19Zi5yZWRyYXdDb21wb25lbnRzKHQscil9ZnVuY3Rpb24gTnQoKXtqdChbMCwwLEssUV0pLHMuc3luY09yQXN5bmMoW3kucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe3QuX2Z1bGxMYXlvdXQuX3JlcGxvdHRpbmc9ITEsby5jYWxsKFwiX2d1aVJlbGF5b3V0XCIsdCx1dCl9XSx0KX1mdW5jdGlvbiBqdChlKXt2YXIgcixuLGksYSxsPXQuX2Z1bGxMYXlvdXQsYz1sLl9wbG90cyxoPWwuX3N1YnBsb3RzLmNhcnRlc2lhbjtpZihsdCYmby5zdWJwbG90c1JlZ2lzdHJ5LnNwbG9tLmRyYWcodCksc3QpZm9yKHI9MDtyPGgubGVuZ3RoO3IrKylpZihpPShuPWNbaFtyXV0pLnhheGlzLGE9bi55YXhpcyxuLl9zY2VuZSl7dmFyIGY9cy5zaW1wbGVNYXAoaS5yYW5nZSxpLnIybCkscD1zLnNpbXBsZU1hcChhLnJhbmdlLGEucjJsKTtuLl9zY2VuZS51cGRhdGUoe3JhbmdlOltmWzBdLHBbMF0sZlsxXSxwWzFdXX0pfWlmKChsdHx8c3QpJiYodih0KSxtKHQpKSxjdCl7dmFyIGQ9ZVsyXS9GLl9sZW5ndGgsZz1lWzNdL0cuX2xlbmd0aDtmb3Iocj0wO3I8aC5sZW5ndGg7cisrKXtpPShuPWNbaFtyXV0pLnhheGlzLGE9bi55YXhpczt2YXIgeSx4LGIsXyx3PWF0JiYhaS5maXhlZHJhbmdlJiZZW2kuX2lkXSxrPW90JiYhYS5maXhlZHJhbmdlJiZXW2EuX2lkXTtpZih3Pyh5PWQsYj1FP2VbMF06cXQoaSx5KSk6ZXQueGFIYXNoW2kuX2lkXT8oeT1kLGI9ZVswXSppLl9sZW5ndGgvRi5fbGVuZ3RoKTpldC55YUhhc2hbaS5faWRdPyh5PWcsYj1cIm5zXCI9PT1udD8tZVsxXSppLl9sZW5ndGgvRy5fbGVuZ3RoOnF0KGkseSx7bjpcInRvcFwiLHM6XCJib3R0b21cIn1bbnRdKSk6Yj1VdChpLHk9VnQoaSxkLGcpKSxrPyh4PWcsXz1TP2VbMV06cXQoYSx4KSk6ZXQueWFIYXNoW2EuX2lkXT8oeD1nLF89ZVsxXSphLl9sZW5ndGgvRy5fbGVuZ3RoKTpldC54YUhhc2hbYS5faWRdPyh4PWQsXz1cImV3XCI9PT1ydD8tZVswXSphLl9sZW5ndGgvRi5fbGVuZ3RoOnF0KGEseCx7ZTpcInJpZ2h0XCIsdzpcImxlZnRcIn1bcnRdKSk6Xz1VdChhLHg9VnQoYSxkLGcpKSx5fHx4KXt5fHwoeT0xKSx4fHwoeD0xKTt2YXIgQT1pLl9vZmZzZXQtYi95LFQ9YS5fb2Zmc2V0LV8veDtuLmNsaXBSZWN0LmNhbGwodS5zZXRUcmFuc2xhdGUsYixfKS5jYWxsKHUuc2V0U2NhbGUseSx4KSxuLnBsb3QuY2FsbCh1LnNldFRyYW5zbGF0ZSxBLFQpLmNhbGwodS5zZXRTY2FsZSwxL3ksMS94KSx5PT09bi54U2NhbGVGYWN0b3ImJng9PT1uLnlTY2FsZUZhY3Rvcnx8KHUuc2V0UG9pbnRHcm91cFNjYWxlKG4uem9vbVNjYWxlUHRzLHkseCksdS5zZXRUZXh0UG9pbnRzU2NhbGUobi56b29tU2NhbGVUeHQseSx4KSksdS5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzKG4uY2xpcE9uQXhpc0ZhbHNlVHJhY2VzLG4pLG4ueFNjYWxlRmFjdG9yPXksbi55U2NhbGVGYWN0b3I9eH19fX1mdW5jdGlvbiBWdCh0LGUscil7cmV0dXJuIHQuZml4ZWRyYW5nZT8wOmF0JiZ0dC54YUhhc2hbdC5faWRdP2U6b3QmJih0dC5pc1N1YnBsb3RDb25zdHJhaW5lZD90dC54YUhhc2g6dHQueWFIYXNoKVt0Ll9pZF0/cjowfWZ1bmN0aW9uIFV0KHQsZSl7cmV0dXJuIGU/KHQucmFuZ2U9dC5fci5zbGljZSgpLGsodCxlKSxxdCh0LGUpKTowfWZ1bmN0aW9uIHF0KHQsZSxyKXtyZXR1cm4gdC5fbGVuZ3RoKigxLWUpKmdbcnx8dC5jb25zdHJhaW50b3dhcmR8fFwibWlkZGxlXCJdfXJldHVybiBTLmxlbmd0aCpFLmxlbmd0aCE9MSYmcSh2dCxmdW5jdGlvbihlKXtpZih0Ll9jb250ZXh0Ll9zY3JvbGxab29tLmNhcnRlc2lhbnx8dC5fZnVsbExheW91dC5fZW5hYmxlc2Nyb2xsem9vbSl7aWYoRXQoKSx0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uKXJldHVybiBlLnByZXZlbnREZWZhdWx0KCksdm9pZCBlLnN0b3BQcm9wYWdhdGlvbigpO2R0KCksY2xlYXJUaW1lb3V0KEl0KTt2YXIgcj0tZS5kZWx0YVk7aWYoaXNGaW5pdGUocil8fChyPWUud2hlZWxEZWx0YS8xMCksaXNGaW5pdGUocikpe3ZhciBuLGk9TWF0aC5leHAoLU1hdGgubWluKE1hdGgubWF4KHIsLTIwKSwyMCkvMjAwKSxhPVB0LmRyYWdsYXllci5zZWxlY3QoXCIubnNld2RyYWdcIikubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89KGUuY2xpZW50WC1hLmxlZnQpL2Eud2lkdGgsbD0oYS5ib3R0b20tZS5jbGllbnRZKS9hLmhlaWdodDtpZihhdCl7Zm9yKEV8fChvPS41KSxuPTA7bjxYLmxlbmd0aDtuKyspYyhYW25dLG8saSk7RnQoXCJ4XCIpLE90WzJdKj1pLE90WzBdKz1PdFsyXSpvKigxL2ktMSl9aWYob3Qpe2ZvcihTfHwobD0uNSksbj0wO248Wi5sZW5ndGg7bisrKWMoWltuXSxsLGkpO0Z0KFwieVwiKSxPdFszXSo9aSxPdFsxXSs9T3RbM10qKDEtbCkqKDEvaS0xKX1qdChPdCksQnQoKSxJdD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7T3Q9WzAsMCxLLFFdLE50KCl9LER0KSxlLnByZXZlbnREZWZhdWx0KCl9ZWxzZSBzLmxvZyhcIkRpZCBub3QgZmluZCB3aGVlbCBtb3Rpb24gYXR0cmlidXRlczogXCIsZSl9ZnVuY3Rpb24gYyh0LGUscil7aWYoIXQuZml4ZWRyYW5nZSl7dmFyIG49cy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCksaT1uWzBdKyhuWzFdLW5bMF0pKmU7dC5yYW5nZT1uLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdC5sMnIoaSsoZS1pKSpyKX0pfX19KSx2dH0sbWFrZURyYWdnZXI6RSxtYWtlUmVjdERyYWdnZXI6QyxtYWtlWm9vbWJveDpELG1ha2VDb3JuZXJzOlAsdXBkYXRlWm9vbWJveDpSLHh5Q29ybmVyczpWLHRyYW5zaXRpb25ab29tYm94OkYscmVtb3ZlWm9vbWJveDpCLHNob3dEb3VibGVDbGlja05vdGlmaWVyOk4sYXR0YWNoV2hlZWxFdmVudEhhbmRsZXI6cX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50XCI6NTk2LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIjo2NzMsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvY2xlYXJfZ2xfY2FudmFzZXNcIjo2ODYsXCIuLi8uLi9saWIvc2V0Y3Vyc29yXCI6NzIxLFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCI6NzI1LFwiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXNcIjo3NDAsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL3Bsb3RzXCI6ODEwLFwiLi9heGVzXCI6NzQ5LFwiLi9heGlzX2lkc1wiOjc1MixcIi4vY29uc3RhbnRzXCI6NzU1LFwiLi9zY2FsZV96b29tXCI6NzY1LFwiLi9zZWxlY3RcIjo3NjYsZDM6MTU1LFwiaGFzLXBhc3NpdmUtZXZlbnRzXCI6NDA0LHRpbnljb2xvcjI6NTIyfV0sNzU4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudFwiKSxvPXQoXCIuLi8uLi9saWIvc2V0Y3Vyc29yXCIpLHM9dChcIi4vZHJhZ2JveFwiKS5tYWtlRHJhZ0JveCxsPXQoXCIuL2NvbnN0YW50c1wiKS5EUkFHR0VSU0laRTtyLmluaXRJbnRlcmFjdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtpZih0Ll9jb250ZXh0LnN0YXRpY1Bsb3Qpbi5zZWxlY3QodCkuc2VsZWN0QWxsKFwiLmRyYWdcIikucmVtb3ZlKCk7ZWxzZSBpZihlLl9oYXMoXCJjYXJ0ZXNpYW5cIil8fGUuX2hhcyhcInNwbG9tXCIpKXtPYmplY3Qua2V5cyhlLl9wbG90c3x8e30pLnNvcnQoZnVuY3Rpb24odCxyKXtpZigoZS5fcGxvdHNbdF0ubWFpbnBsb3QmJiEwKT09PShlLl9wbG90c1tyXS5tYWlucGxvdCYmITApKXt2YXIgbj10LnNwbGl0KFwieVwiKSxpPXIuc3BsaXQoXCJ5XCIpO3JldHVybiBuWzBdPT09aVswXT9OdW1iZXIoblsxXXx8MSktTnVtYmVyKGlbMV18fDEpOk51bWJlcihuWzBdfHwxKS1OdW1iZXIoaVswXXx8MSl9cmV0dXJuIGUuX3Bsb3RzW3RdLm1haW5wbG90PzE6LTF9KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBuPWUuX3Bsb3RzW3JdLG89bi54YXhpcyxjPW4ueWF4aXM7aWYoIW4ubWFpbnBsb3Qpe3ZhciB1PXModCxuLG8uX29mZnNldCxjLl9vZmZzZXQsby5fbGVuZ3RoLGMuX2xlbmd0aCxcIm5zXCIsXCJld1wiKTt1Lm9ubW91c2Vtb3ZlPWZ1bmN0aW9uKGUpe3QuX2Z1bGxMYXlvdXQuX3JlaG92ZXI9ZnVuY3Rpb24oKXt0Ll9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9PT1yJiZpLmhvdmVyKHQsZSxyKX0saS5ob3Zlcih0LGUsciksdC5fZnVsbExheW91dC5fbGFzdGhvdmVyPXUsdC5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PXJ9LHUub25tb3VzZW91dD1mdW5jdGlvbihlKXt0Ll9kcmFnZ2luZ3x8KHQuX2Z1bGxMYXlvdXQuX2hvdmVyc3VicGxvdD1udWxsLGEudW5ob3Zlcih0LGUpKX0sdC5fY29udGV4dC5zaG93QXhpc0RyYWdIYW5kbGVzJiYocyh0LG4sby5fb2Zmc2V0LWwsYy5fb2Zmc2V0LWwsbCxsLFwiblwiLFwid1wiKSxzKHQsbixvLl9vZmZzZXQrby5fbGVuZ3RoLGMuX29mZnNldC1sLGwsbCxcIm5cIixcImVcIikscyh0LG4sby5fb2Zmc2V0LWwsYy5fb2Zmc2V0K2MuX2xlbmd0aCxsLGwsXCJzXCIsXCJ3XCIpLHModCxuLG8uX29mZnNldCtvLl9sZW5ndGgsYy5fb2Zmc2V0K2MuX2xlbmd0aCxsLGwsXCJzXCIsXCJlXCIpKX1pZih0Ll9jb250ZXh0LnNob3dBeGlzRHJhZ0hhbmRsZXMpe2lmKHI9PT1vLl9tYWluU3VicGxvdCl7dmFyIGg9by5fbWFpbkxpbmVQb3NpdGlvbjtcInRvcFwiPT09by5zaWRlJiYoaC09bCkscyh0LG4sby5fb2Zmc2V0Ky4xKm8uX2xlbmd0aCxoLC44Km8uX2xlbmd0aCxsLFwiXCIsXCJld1wiKSxzKHQsbixvLl9vZmZzZXQsaCwuMSpvLl9sZW5ndGgsbCxcIlwiLFwid1wiKSxzKHQsbixvLl9vZmZzZXQrLjkqby5fbGVuZ3RoLGgsLjEqby5fbGVuZ3RoLGwsXCJcIixcImVcIil9aWYocj09PWMuX21haW5TdWJwbG90KXt2YXIgZj1jLl9tYWluTGluZVBvc2l0aW9uO1wicmlnaHRcIiE9PWMuc2lkZSYmKGYtPWwpLHModCxuLGYsYy5fb2Zmc2V0Ky4xKmMuX2xlbmd0aCxsLC44KmMuX2xlbmd0aCxcIm5zXCIsXCJcIikscyh0LG4sZixjLl9vZmZzZXQrLjkqYy5fbGVuZ3RoLGwsLjEqYy5fbGVuZ3RoLFwic1wiLFwiXCIpLHModCxuLGYsYy5fb2Zmc2V0LGwsLjEqYy5fbGVuZ3RoLFwiblwiLFwiXCIpfX19KTt2YXIgbz1lLl9ob3ZlcmxheWVyLm5vZGUoKTtvLm9ubW91c2Vtb3ZlPWZ1bmN0aW9uKHIpe3IudGFyZ2V0PXQuX2Z1bGxMYXlvdXQuX2xhc3Rob3ZlcixpLmhvdmVyKHQscixlLl9ob3ZlcnN1YnBsb3QpfSxvLm9uY2xpY2s9ZnVuY3Rpb24oZSl7ZS50YXJnZXQ9dC5fZnVsbExheW91dC5fbGFzdGhvdmVyLGkuY2xpY2sodCxlKX0sby5vbm1vdXNlZG93bj1mdW5jdGlvbihlKXt0Ll9mdWxsTGF5b3V0Ll9sYXN0aG92ZXIub25tb3VzZWRvd24oZSl9LHIudXBkYXRlRngodCl9fSxyLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1cInBhblwiPT09ZS5kcmFnbW9kZT9cIm1vdmVcIjpcImNyb3NzaGFpclwiO28oZS5fZHJhZ2dlcnMscil9fSx7XCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50XCI6NTk2LFwiLi4vLi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4uLy4uL2xpYi9zZXRjdXJzb3JcIjo3MjEsXCIuL2NvbnN0YW50c1wiOjc1NSxcIi4vZHJhZ2JveFwiOjc1NyxkMzoxNTV9XSw3NTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIiksaT10KFwiLi4vLi4vbGliXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgYT1lW3RdO2lmKEFycmF5LmlzQXJyYXkoYSkpZm9yKHZhciBvPW4uc3VicGxvdHNSZWdpc3RyeS5jYXJ0ZXNpYW4scz1vLmlkUmVnZXgsbD1yLl9zdWJwbG90cyxjPWwueGF4aXMsdT1sLnlheGlzLGg9bC5jYXJ0ZXNpYW4sZj1yLl9oYXMoXCJjYXJ0ZXNpYW5cIil8fHIuX2hhcyhcImdsMmRcIikscD0wO3A8YS5sZW5ndGg7cCsrKXt2YXIgZD1hW3BdO2lmKGkuaXNQbGFpbk9iamVjdChkKSl7dmFyIGc9ZC54cmVmLHY9ZC55cmVmLG09cy54LnRlc3QoZykseT1zLnkudGVzdCh2KTtpZihtfHx5KXtmfHxpLnB1c2hVbmlxdWUoci5fYmFzZVBsb3RNb2R1bGVzLG8pO3ZhciB4PSExO20mJi0xPT09Yy5pbmRleE9mKGcpJiYoYy5wdXNoKGcpLHg9ITApLHkmJi0xPT09dS5pbmRleE9mKHYpJiYodS5wdXNoKHYpLHg9ITApLHgmJm0mJnkmJmgucHVzaChnK3YpfX19fX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5fV0sNzYwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGE9dChcIi4uLy4uL2xpYlwiKSxvPXQoXCIuLi9wbG90c1wiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksbD10KFwiLi4vZ2V0X2RhdGFcIikuZ2V0TW9kdWxlQ2FsY0RhdGEsYz10KFwiLi9heGlzX2lkc1wiKSx1PXQoXCIuL2NvbnN0YW50c1wiKSxoPXQoXCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiKSxmPWEuZW5zdXJlU2luZ2xlO2Z1bmN0aW9uIHAodCxlLHIpe3JldHVybiBhLmVuc3VyZVNpbmdsZSh0LGUscixmdW5jdGlvbih0KXt0LmRhdHVtKHIpfSl9ZnVuY3Rpb24gZCh0LGUscixhLG8pe2Zvcih2YXIgYyxoLGYscD11LnRyYWNlTGF5ZXJDbGFzc2VzLGQ9dC5fZnVsbExheW91dCxnPWQuX21vZHVsZXMsdj1bXSxtPVtdLHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIHg9KGM9Z1t5XSkubmFtZSxiPWkubW9kdWxlc1t4XS5jYXRlZ29yaWVzO2lmKGIuc3ZnKXt2YXIgXz1jLmxheWVyTmFtZXx8eCtcImxheWVyXCIsdz1jLnBsb3Q7Zj0oaD1sKHIsdykpWzBdLHI9aFsxXSxmLmxlbmd0aCYmdi5wdXNoKHtpOnAuaW5kZXhPZihfKSxjbGFzc05hbWU6XyxwbG90TWV0aG9kOncsY2RNb2R1bGU6Zn0pLGIuem9vbVNjYWxlJiZtLnB1c2goXCIuXCIrXyl9fXYuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmktZS5pfSk7dmFyIGs9ZS5wbG90LnNlbGVjdEFsbChcImcubWxheWVyXCIpLmRhdGEodixmdW5jdGlvbih0KXtyZXR1cm4gdC5jbGFzc05hbWV9KTtpZihrLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5jbGFzc05hbWV9KS5jbGFzc2VkKFwibWxheWVyXCIsITApLGsuZXhpdCgpLnJlbW92ZSgpLGsub3JkZXIoKSxrLmVhY2goZnVuY3Rpb24ocil7dmFyIGk9bi5zZWxlY3QodGhpcyksbD1yLmNsYXNzTmFtZTtyLnBsb3RNZXRob2QodCxlLHIuY2RNb2R1bGUsaSxhLG8pLFwic2NhdHRlcmxheWVyXCIhPT1sJiZcImJhcmxheWVyXCIhPT1sJiZcIndhdGVyZmFsbGxheWVyXCIhPT1sJiZzLnNldENsaXBVcmwoaSxlLmxheWVyQ2xpcElkLHQpfSksZC5faGFzKFwic2NhdHRlcmdsXCIpJiYoYz1pLmdldE1vZHVsZShcInNjYXR0ZXJnbFwiKSxmPWwocixjKVswXSxjLnBsb3QodCxlLGYpKSwhdC5fY29udGV4dC5zdGF0aWNQbG90JiYoZS5faGFzQ2xpcE9uQXhpc0ZhbHNlJiYoZS5jbGlwT25BeGlzRmFsc2VUcmFjZXM9ZS5wbG90LnNlbGVjdEFsbChcIi5zY2F0dGVybGF5ZXIsIC5iYXJsYXllciwgLndhdGVyZmFsbGxheWVyXCIpLnNlbGVjdEFsbChcIi50cmFjZVwiKSksbS5sZW5ndGgpKXt2YXIgQT1lLnBsb3Quc2VsZWN0QWxsKG0uam9pbihcIixcIikpLnNlbGVjdEFsbChcIi50cmFjZVwiKTtlLnpvb21TY2FsZVB0cz1BLnNlbGVjdEFsbChcInBhdGgucG9pbnRcIiksZS56b29tU2NhbGVUeHQ9QS5zZWxlY3RBbGwoXCIudGV4dHBvaW50XCIpfX1mdW5jdGlvbiBnKHQsZSl7dmFyIHI9ZS5wbG90Z3JvdXAsbj1lLmlkLGk9dS5sYXllclZhbHVlMmxheWVyQ2xhc3NbZS54YXhpcy5sYXllcl0sYT11LmxheWVyVmFsdWUybGF5ZXJDbGFzc1tlLnlheGlzLmxheWVyXSxvPXQuX2Z1bGxMYXlvdXQuX2hhc09ubHlMYXJnZVNwbG9tcztpZihlLm1haW5wbG90KXt2YXIgcz1lLm1haW5wbG90aW5mbyxsPXMucGxvdGdyb3VwLGg9bitcIi14XCIsZD1uK1wiLXlcIjtlLmdyaWRsYXllcj1zLmdyaWRsYXllcixlLnplcm9saW5lbGF5ZXI9cy56ZXJvbGluZWxheWVyLGYocy5vdmVybGluZXNCZWxvdyxcInBhdGhcIixoKSxmKHMub3ZlcmxpbmVzQmVsb3csXCJwYXRoXCIsZCksZihzLm92ZXJheGVzQmVsb3csXCJnXCIsaCksZihzLm92ZXJheGVzQmVsb3csXCJnXCIsZCksZS5wbG90PWYocy5vdmVycGxvdCxcImdcIixuKSxmKHMub3ZlcmxpbmVzQWJvdmUsXCJwYXRoXCIsaCksZihzLm92ZXJsaW5lc0Fib3ZlLFwicGF0aFwiLGQpLGYocy5vdmVyYXhlc0Fib3ZlLFwiZ1wiLGgpLGYocy5vdmVyYXhlc0Fib3ZlLFwiZ1wiLGQpLGUueGxpbmVzPWwuc2VsZWN0KFwiLm92ZXJsaW5lcy1cIitpKS5zZWxlY3QoXCIuXCIraCksZS55bGluZXM9bC5zZWxlY3QoXCIub3ZlcmxpbmVzLVwiK2EpLnNlbGVjdChcIi5cIitkKSxlLnhheGlzbGF5ZXI9bC5zZWxlY3QoXCIub3ZlcmF4ZXMtXCIraSkuc2VsZWN0KFwiLlwiK2gpLGUueWF4aXNsYXllcj1sLnNlbGVjdChcIi5vdmVyYXhlcy1cIithKS5zZWxlY3QoXCIuXCIrZCl9ZWxzZSBpZihvKWUueGxpbmVzPWYocixcInBhdGhcIixcInhsaW5lcy1hYm92ZVwiKSxlLnlsaW5lcz1mKHIsXCJwYXRoXCIsXCJ5bGluZXMtYWJvdmVcIiksZS54YXhpc2xheWVyPWYocixcImdcIixcInhheGlzbGF5ZXItYWJvdmVcIiksZS55YXhpc2xheWVyPWYocixcImdcIixcInlheGlzbGF5ZXItYWJvdmVcIik7ZWxzZXt2YXIgZz1mKHIsXCJnXCIsXCJsYXllci1zdWJwbG90XCIpO2Uuc2hhcGVsYXllcj1mKGcsXCJnXCIsXCJzaGFwZWxheWVyXCIpLGUuaW1hZ2VsYXllcj1mKGcsXCJnXCIsXCJpbWFnZWxheWVyXCIpLGUuZ3JpZGxheWVyPWYocixcImdcIixcImdyaWRsYXllclwiKSxlLnplcm9saW5lbGF5ZXI9ZihyLFwiZ1wiLFwiemVyb2xpbmVsYXllclwiKSxmKHIsXCJwYXRoXCIsXCJ4bGluZXMtYmVsb3dcIiksZihyLFwicGF0aFwiLFwieWxpbmVzLWJlbG93XCIpLGUub3ZlcmxpbmVzQmVsb3c9ZihyLFwiZ1wiLFwib3ZlcmxpbmVzLWJlbG93XCIpLGYocixcImdcIixcInhheGlzbGF5ZXItYmVsb3dcIiksZihyLFwiZ1wiLFwieWF4aXNsYXllci1iZWxvd1wiKSxlLm92ZXJheGVzQmVsb3c9ZihyLFwiZ1wiLFwib3ZlcmF4ZXMtYmVsb3dcIiksZS5wbG90PWYocixcImdcIixcInBsb3RcIiksZS5vdmVycGxvdD1mKHIsXCJnXCIsXCJvdmVycGxvdFwiKSxlLnhsaW5lcz1mKHIsXCJwYXRoXCIsXCJ4bGluZXMtYWJvdmVcIiksZS55bGluZXM9ZihyLFwicGF0aFwiLFwieWxpbmVzLWFib3ZlXCIpLGUub3ZlcmxpbmVzQWJvdmU9ZihyLFwiZ1wiLFwib3ZlcmxpbmVzLWFib3ZlXCIpLGYocixcImdcIixcInhheGlzbGF5ZXItYWJvdmVcIiksZihyLFwiZ1wiLFwieWF4aXNsYXllci1hYm92ZVwiKSxlLm92ZXJheGVzQWJvdmU9ZihyLFwiZ1wiLFwib3ZlcmF4ZXMtYWJvdmVcIiksZS54bGluZXM9ci5zZWxlY3QoXCIueGxpbmVzLVwiK2kpLGUueWxpbmVzPXIuc2VsZWN0KFwiLnlsaW5lcy1cIithKSxlLnhheGlzbGF5ZXI9ci5zZWxlY3QoXCIueGF4aXNsYXllci1cIitpKSxlLnlheGlzbGF5ZXI9ci5zZWxlY3QoXCIueWF4aXNsYXllci1cIithKX1vfHwocChlLmdyaWRsYXllcixcImdcIixlLnhheGlzLl9pZCkscChlLmdyaWRsYXllcixcImdcIixlLnlheGlzLl9pZCksZS5ncmlkbGF5ZXIuc2VsZWN0QWxsKFwiZ1wiKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KS5zb3J0KGMuaWRTb3J0KSksZS54bGluZXMuc3R5bGUoXCJmaWxsXCIsXCJub25lXCIpLmNsYXNzZWQoXCJjcmlzcFwiLCEwKSxlLnlsaW5lcy5zdHlsZShcImZpbGxcIixcIm5vbmVcIikuY2xhc3NlZChcImNyaXNwXCIsITApfWZ1bmN0aW9uIHYodCxlKXtpZih0KXt2YXIgcj17fTtmb3IodmFyIGkgaW4gdC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBpPXRbMF07bi5zZWxlY3QodGhpcykucmVtb3ZlKCksbShpLGUpLHJbaV09ITB9KSxlLl9wbG90cylmb3IodmFyIGE9ZS5fcGxvdHNbaV0ub3ZlcmxheXN8fFtdLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXTtyW3MuaWRdJiZzLnBsb3Quc2VsZWN0QWxsKFwiLnRyYWNlXCIpLnJlbW92ZSgpfX19ZnVuY3Rpb24gbSh0LGUpe2UuX2RyYWdnZXJzLnNlbGVjdEFsbChcImcuXCIrdCkucmVtb3ZlKCksZS5fZGVmcy5zZWxlY3QoXCIjY2xpcFwiK2UuX3VpZCt0K1wicGxvdFwiKS5yZW1vdmUoKX1yLm5hbWU9XCJjYXJ0ZXNpYW5cIixyLmF0dHI9W1wieGF4aXNcIixcInlheGlzXCJdLHIuaWRSb290PVtcInhcIixcInlcIl0sci5pZFJlZ2V4PXUuaWRSZWdleCxyLmF0dHJSZWdleD11LmF0dHJSZWdleCxyLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxyLmxheW91dEF0dHJpYnV0ZXM9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksci5zdXBwbHlMYXlvdXREZWZhdWx0cz10KFwiLi9sYXlvdXRfZGVmYXVsdHNcIiksci50cmFuc2l0aW9uQXhlcz10KFwiLi90cmFuc2l0aW9uX2F4ZXNcIiksci5maW5hbGl6ZVN1YnBsb3RzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLG89ZS5fc3VicGxvdHMscz1vLnhheGlzLGw9by55YXhpcyxoPW8uY2FydGVzaWFuLGY9aC5jb25jYXQoby5nbDJkfHxbXSkscD17fSxkPXt9O2ZvcihyPTA7cjxmLmxlbmd0aDtyKyspe3ZhciBnPWZbcl0uc3BsaXQoXCJ5XCIpO3BbZ1swXV09MSxkW1wieVwiK2dbMV1dPTF9Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKylwW249c1tyXV18fChpPSh0W2MuaWQybmFtZShuKV18fHt9KS5hbmNob3IsdS5pZFJlZ2V4LnkudGVzdChpKXx8KGk9XCJ5XCIpLGgucHVzaChuK2kpLGYucHVzaChuK2kpLGRbaV18fChkW2ldPTEsYS5wdXNoVW5pcXVlKGwsaSkpKTtmb3Iocj0wO3I8bC5sZW5ndGg7cisrKWRbaT1sW3JdXXx8KG49KHRbYy5pZDJuYW1lKGkpXXx8e30pLmFuY2hvcix1LmlkUmVnZXgueC50ZXN0KG4pfHwobj1cInhcIiksaC5wdXNoKG4raSksZi5wdXNoKG4raSkscFtuXXx8KHBbbl09MSxhLnB1c2hVbmlxdWUocyxuKSkpO2lmKCFmLmxlbmd0aCl7Zm9yKHZhciB2IGluIG49XCJcIixpPVwiXCIsdCl7aWYodS5hdHRyUmVnZXgudGVzdCh2KSlcInhcIj09PXYuY2hhckF0KDApPyghbnx8K3Yuc3Vic3RyKDUpPCtuLnN1YnN0cig1KSkmJihuPXYpOighaXx8K3Yuc3Vic3RyKDUpPCtpLnN1YnN0cig1KSkmJihpPXYpfW49bj9jLm5hbWUyaWQobik6XCJ4XCIsaT1pP2MubmFtZTJpZChpKTpcInlcIixzLnB1c2gobiksbC5wdXNoKGkpLGgucHVzaChuK2kpfX0sci5wbG90PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9dC5fZnVsbExheW91dCxvPWEuX3N1YnBsb3RzLmNhcnRlc2lhbixzPXQuY2FsY2RhdGE7aWYobnVsbCE9PWUpe2lmKCFBcnJheS5pc0FycmF5KGUpKWZvcihlPVtdLGk9MDtpPHMubGVuZ3RoO2krKyllLnB1c2goaSk7Zm9yKGk9MDtpPG8ubGVuZ3RoO2krKyl7Zm9yKHZhciBsLGM9b1tpXSx1PWEuX3Bsb3RzW2NdLGg9W10sZj0wO2Y8cy5sZW5ndGg7ZisrKXt2YXIgcD1zW2ZdLGc9cFswXS50cmFjZTtnLnhheGlzK2cueWF4aXM9PT1jJiYoKC0xIT09ZS5pbmRleE9mKGcuaW5kZXgpfHxnLmNhcnBldCkmJihsJiZsWzBdLnRyYWNlLnhheGlzK2xbMF0udHJhY2UueWF4aXM9PT1jJiYtMSE9PVtcInRvbmV4dHhcIixcInRvbmV4dHlcIixcInRvbmV4dFwiXS5pbmRleE9mKGcuZmlsbCkmJi0xPT09aC5pbmRleE9mKGwpJiZoLnB1c2gobCksaC5wdXNoKHApKSxsPXApfWQodCx1LGgscixuKX19fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzPW4uX3Bsb3RzfHx7fSxsPWUuX3Bsb3RzfHx7fSx1PW4uX3N1YnBsb3RzfHx7fTtpZihuLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJiFlLl9oYXNPbmx5TGFyZ2VTcGxvbXMpZm9yKG8gaW4gcykoaT1zW29dKS5wbG90Z3JvdXAmJmkucGxvdGdyb3VwLnJlbW92ZSgpO3ZhciBoPW4uX2hhcyYmbi5faGFzKFwiZ2xcIiksZj1lLl9oYXMmJmUuX2hhcyhcImdsXCIpO2lmKGgmJiFmKWZvcihvIGluIHMpKGk9c1tvXSkuX3NjZW5lJiZpLl9zY2VuZS5kZXN0cm95KCk7aWYodS54YXhpcyYmdS55YXhpcyl7dmFyIHA9Yy5saXN0SWRzKHtfZnVsbExheW91dDpufSk7Zm9yKGE9MDthPHAubGVuZ3RoO2ErKyl7dmFyIGQ9cFthXTtlW2MuaWQybmFtZShkKV18fG4uX2luZm9sYXllci5zZWxlY3RBbGwoXCIuZy1cIitkK1widGl0bGVcIikucmVtb3ZlKCl9fXZhciBnPW4uX2hhcyYmbi5faGFzKFwiY2FydGVzaWFuXCIpLHk9ZS5faGFzJiZlLl9oYXMoXCJjYXJ0ZXNpYW5cIik7aWYoZyYmIXkpdihuLl9jYXJ0ZXNpYW5sYXllci5zZWxlY3RBbGwoXCIuc3VicGxvdFwiKSxuKSxuLl9kZWZzLnNlbGVjdEFsbChcIi5heGVzY2xpcFwiKS5yZW1vdmUoKSxkZWxldGUgbi5fYXhpc0NvbnN0cmFpbnRHcm91cHM7ZWxzZSBpZih1LmNhcnRlc2lhbilmb3IoYT0wO2E8dS5jYXJ0ZXNpYW4ubGVuZ3RoO2ErKyl7dmFyIHg9dS5jYXJ0ZXNpYW5bYV07aWYoIWxbeF0pe3ZhciBiPVwiLlwiK3grXCIsLlwiK3grXCIteCwuXCIreCtcIi15XCI7bi5fY2FydGVzaWFubGF5ZXIuc2VsZWN0QWxsKGIpLnJlbW92ZSgpLG0oeCxuKX19fSxyLmRyYXdGcmFtZXdvcms9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbyxzPXQuX2Z1bGxMYXlvdXQsbD1zLl9zdWJwbG90cy5jYXJ0ZXNpYW4sYz1sLmxlbmd0aCx1PVtdLGg9W107Zm9yKGU9MDtlPGM7ZSsrKXtuPWxbZV0saT1zLl9wbG90c1tuXSxhPWkueGF4aXMsbz1pLnlheGlzO3ZhciBmPWEuX21haW5BeGlzLHA9by5fbWFpbkF4aXMsZD1mLl9pZCtwLl9pZCxnPXMuX3Bsb3RzW2RdO2kub3ZlcmxheXM9W10sZCE9PW4mJmc/KGkubWFpbnBsb3Q9ZCxpLm1haW5wbG90aW5mbz1nLGgucHVzaChuKSk6KGkubWFpbnBsb3Q9dm9pZCAwLGkubWFpblBsb3RpbmZvPXZvaWQgMCx1LnB1c2gobikpfWZvcihlPTA7ZTxoLmxlbmd0aDtlKyspbj1oW2VdLChpPXMuX3Bsb3RzW25dKS5tYWlucGxvdGluZm8ub3ZlcmxheXMucHVzaChpKTt2YXIgdj11LmNvbmNhdChoKSxtPW5ldyBBcnJheShjKTtmb3IoZT0wO2U8YztlKyspe249dltlXSxpPXMuX3Bsb3RzW25dLGE9aS54YXhpcyxvPWkueWF4aXM7dmFyIHk9W24sYS5sYXllcixvLmxheWVyLGEub3ZlcmxheWluZ3x8XCJcIixvLm92ZXJsYXlpbmd8fFwiXCJdO2ZvcihyPTA7cjxpLm92ZXJsYXlzLmxlbmd0aDtyKyspeS5wdXNoKGkub3ZlcmxheXNbcl0uaWQpO21bZV09eX1yZXR1cm4gbX0odCksaT1lLl9jYXJ0ZXNpYW5sYXllci5zZWxlY3RBbGwoXCIuc3VicGxvdFwiKS5kYXRhKHIsU3RyaW5nKTtpLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIixmdW5jdGlvbih0KXtyZXR1cm5cInN1YnBsb3QgXCIrdFswXX0pLGkub3JkZXIoKSxpLmV4aXQoKS5jYWxsKHYsZSksaS5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBpPXJbMF0sYT1lLl9wbG90c1tpXTthLnBsb3Rncm91cD1uLnNlbGVjdCh0aGlzKSxnKHQsYSksYS5kcmFnbGF5ZXI9ZihlLl9kcmFnZ2VycyxcImdcIixpKX0pfSxyLnJhbmdlUGxvdD1mdW5jdGlvbih0LGUscil7Zyh0LGUpLGQodCxlLHIpLG8uc3R5bGUodCl9LHIudG9TVkc9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5fZ2xpbWFnZXMscj1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoXCIuc3ZnLWNvbnRhaW5lclwiKTtyLmZpbHRlcihmdW5jdGlvbih0LGUpe3JldHVybiBlPT09ci5zaXplKCktMX0pLnNlbGVjdEFsbChcIi5nbC1jYW52YXMtY29udGV4dCwgLmdsLWNhbnZhcy1mb2N1c1wiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50b0RhdGFVUkwoXCJpbWFnZS9wbmdcIik7ZS5hcHBlbmQoXCJzdmc6aW1hZ2VcIikuYXR0cih7eG1sbnM6aC5zdmcsXCJ4bGluazpocmVmXCI6dCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwibm9uZVwiLHg6MCx5OjAsd2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHR9KX0pfSxyLnVwZGF0ZUZ4PXQoXCIuL2dyYXBoX2ludGVyYWN0XCIpLnVwZGF0ZUZ4fSx7XCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiOjY3OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vZ2V0X2RhdGFcIjo3ODQsXCIuLi9wbG90c1wiOjgxMCxcIi4vYXR0cmlidXRlc1wiOjc0NyxcIi4vYXhpc19pZHNcIjo3NTIsXCIuL2NvbnN0YW50c1wiOjc1NSxcIi4vZ3JhcGhfaW50ZXJhY3RcIjo3NTgsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6NzYxLFwiLi9sYXlvdXRfZGVmYXVsdHNcIjo3NjIsXCIuL3RyYW5zaXRpb25fYXhlc1wiOjc3MSxkMzoxNTV9XSw3NjE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vZm9udF9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlc1wiKS5kYXNoLG89dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxzPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLnRlbXBsYXRlZEFycmF5LGw9dChcIi4vY29uc3RhbnRzXCIpO2UuZXhwb3J0cz17dmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixlZGl0VHlwZTpcInBsb3RcIn0sY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZTpcInRpY2tzXCJ9LHRpdGxlOnt0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJ0aWNrc1wifSxmb250Om4oe2VkaXRUeXBlOlwidGlja3NcIn0pLGVkaXRUeXBlOlwidGlja3NcIn0sdHlwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiLVwiLFwibGluZWFyXCIsXCJsb2dcIixcImRhdGVcIixcImNhdGVnb3J5XCIsXCJtdWx0aWNhdGVnb3J5XCJdLGRmbHQ6XCItXCIsZWRpdFR5cGU6XCJjYWxjXCIsX25vVGVtcGxhdGluZzohMH0sYXV0b3JhbmdlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbITAsITEsXCJyZXZlcnNlZFwiXSxkZmx0OiEwLGVkaXRUeXBlOlwiYXhyYW5nZVwiLGltcGxpZWRFZGl0czp7XCJyYW5nZVswXVwiOnZvaWQgMCxcInJhbmdlWzFdXCI6dm9pZCAwfX0scmFuZ2Vtb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJub3JtYWxcIixcInRvemVyb1wiLFwibm9ubmVnYXRpdmVcIl0sZGZsdDpcIm5vcm1hbFwiLGVkaXRUeXBlOlwicGxvdFwifSxyYW5nZTp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixpdGVtczpbe3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImF4cmFuZ2VcIixpbXBsaWVkRWRpdHM6e1wiXmF1dG9yYW5nZVwiOiExfSxhbmltOiEwfSx7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiYXhyYW5nZVwiLGltcGxpZWRFZGl0czp7XCJeYXV0b3JhbmdlXCI6ITF9LGFuaW06ITB9XSxlZGl0VHlwZTpcImF4cmFuZ2VcIixpbXBsaWVkRWRpdHM6e2F1dG9yYW5nZTohMX0sYW5pbTohMH0sZml4ZWRyYW5nZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwiY2FsY1wifSxzY2FsZWFuY2hvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W2wuaWRSZWdleC54LnRvU3RyaW5nKCksbC5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6XCJwbG90XCJ9LHNjYWxlcmF0aW86e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6XCJwbG90XCJ9LGNvbnN0cmFpbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wicmFuZ2VcIixcImRvbWFpblwiXSxkZmx0OlwicmFuZ2VcIixlZGl0VHlwZTpcInBsb3RcIn0sY29uc3RyYWludG93YXJkOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJsZWZ0XCIsXCJjZW50ZXJcIixcInJpZ2h0XCIsXCJ0b3BcIixcIm1pZGRsZVwiLFwiYm90dG9tXCJdLGVkaXRUeXBlOlwicGxvdFwifSxtYXRjaGVzOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbbC5pZFJlZ2V4LngudG9TdHJpbmcoKSxsLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZTpcImNhbGNcIn0sdGlja21vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImF1dG9cIixcImxpbmVhclwiLFwiYXJyYXlcIl0sZWRpdFR5cGU6XCJ0aWNrc1wiLGltcGxpZWRFZGl0czp7dGljazA6dm9pZCAwLGR0aWNrOnZvaWQgMH19LG50aWNrczp7dmFsVHlwZTpcImludGVnZXJcIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6XCJ0aWNrc1wifSx0aWNrMDp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwidGlja3NcIixpbXBsaWVkRWRpdHM6e3RpY2ttb2RlOlwibGluZWFyXCJ9fSxkdGljazp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwidGlja3NcIixpbXBsaWVkRWRpdHM6e3RpY2ttb2RlOlwibGluZWFyXCJ9fSx0aWNrdmFsczp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcInRpY2tzXCJ9LHRpY2t0ZXh0Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwidGlja3NcIn0sdGlja3M6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcIm91dHNpZGVcIixcImluc2lkZVwiLFwiXCJdLGVkaXRUeXBlOlwidGlja3NcIn0sdGlja3Nvbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibGFiZWxzXCIsXCJib3VuZGFyaWVzXCJdLGRmbHQ6XCJsYWJlbHNcIixlZGl0VHlwZTpcInRpY2tzXCJ9LG1pcnJvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6WyEwLFwidGlja3NcIiwhMSxcImFsbFwiLFwiYWxsdGlja3NcIl0sZGZsdDohMSxlZGl0VHlwZTpcInRpY2tzK2xheW91dHN0eWxlXCJ9LHRpY2tsZW46e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjUsZWRpdFR5cGU6XCJ0aWNrc1wifSx0aWNrd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6XCJ0aWNrc1wifSx0aWNrY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZTpcInRpY2tzXCJ9LHNob3d0aWNrbGFiZWxzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJ0aWNrc1wifSxhdXRvbWFyZ2luOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEsZWRpdFR5cGU6XCJ0aWNrc1wifSxzaG93c3Bpa2VzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEsZWRpdFR5cGU6XCJtb2RlYmFyXCJ9LHNwaWtlY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6bnVsbCxlZGl0VHlwZTpcIm5vbmVcIn0sc3Bpa2V0aGlja25lc3M6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjMsZWRpdFR5cGU6XCJub25lXCJ9LHNwaWtlZGFzaDpvKHt9LGEse2RmbHQ6XCJkYXNoXCIsZWRpdFR5cGU6XCJub25lXCJ9KSxzcGlrZW1vZGU6e3ZhbFR5cGU6XCJmbGFnbGlzdFwiLGZsYWdzOltcInRvYXhpc1wiLFwiYWNyb3NzXCIsXCJtYXJrZXJcIl0sZGZsdDpcInRvYXhpc1wiLGVkaXRUeXBlOlwibm9uZVwifSxzcGlrZXNuYXA6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImRhdGFcIixcImN1cnNvclwiXSxkZmx0OlwiZGF0YVwiLGVkaXRUeXBlOlwibm9uZVwifSx0aWNrZm9udDpuKHtlZGl0VHlwZTpcInRpY2tzXCJ9KSx0aWNrYW5nbGU6e3ZhbFR5cGU6XCJhbmdsZVwiLGRmbHQ6XCJhdXRvXCIsZWRpdFR5cGU6XCJ0aWNrc1wifSx0aWNrcHJlZml4Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwidGlja3NcIn0sc2hvd3RpY2twcmVmaXg6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImFsbFwiLFwiZmlyc3RcIixcImxhc3RcIixcIm5vbmVcIl0sZGZsdDpcImFsbFwiLGVkaXRUeXBlOlwidGlja3NcIn0sdGlja3N1ZmZpeDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcInRpY2tzXCJ9LHNob3d0aWNrc3VmZml4Ont2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhbGxcIixcImZpcnN0XCIsXCJsYXN0XCIsXCJub25lXCJdLGRmbHQ6XCJhbGxcIixlZGl0VHlwZTpcInRpY2tzXCJ9LHNob3dleHBvbmVudDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYWxsXCIsXCJmaXJzdFwiLFwibGFzdFwiLFwibm9uZVwiXSxkZmx0OlwiYWxsXCIsZWRpdFR5cGU6XCJ0aWNrc1wifSxleHBvbmVudGZvcm1hdDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibm9uZVwiLFwiZVwiLFwiRVwiLFwicG93ZXJcIixcIlNJXCIsXCJCXCJdLGRmbHQ6XCJCXCIsZWRpdFR5cGU6XCJ0aWNrc1wifSxzZXBhcmF0ZXRob3VzYW5kczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwidGlja3NcIn0sdGlja2Zvcm1hdDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcInRpY2tzXCJ9LHRpY2tmb3JtYXRzdG9wczpzKFwidGlja2Zvcm1hdHN0b3BcIix7ZW5hYmxlZDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwidGlja3NcIn0sZHRpY2tyYW5nZTp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixpdGVtczpbe3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcInRpY2tzXCJ9LHt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJ0aWNrc1wifV0sZWRpdFR5cGU6XCJ0aWNrc1wifSx2YWx1ZTp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcInRpY2tzXCJ9LGVkaXRUeXBlOlwidGlja3NcIn0pLGhvdmVyZm9ybWF0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwibm9uZVwifSxzaG93bGluZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwidGlja3MrbGF5b3V0c3R5bGVcIn0sbGluZWNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6XCJsYXlvdXRzdHlsZVwifSxsaW5ld2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6XCJ0aWNrcytsYXlvdXRzdHlsZVwifSxzaG93Z3JpZDp7dmFsVHlwZTpcImJvb2xlYW5cIixlZGl0VHlwZTpcInRpY2tzXCJ9LGdyaWRjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDppLmxpZ2h0TGluZSxlZGl0VHlwZTpcInRpY2tzXCJ9LGdyaWR3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZTpcInRpY2tzXCJ9LHplcm9saW5lOnt2YWxUeXBlOlwiYm9vbGVhblwiLGVkaXRUeXBlOlwidGlja3NcIn0semVyb2xpbmVjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOlwidGlja3NcIn0semVyb2xpbmV3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MSxlZGl0VHlwZTpcInRpY2tzXCJ9LHNob3dkaXZpZGVyczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwidGlja3NcIn0sZGl2aWRlcmNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6XCJ0aWNrc1wifSxkaXZpZGVyd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjEsZWRpdFR5cGU6XCJ0aWNrc1wifSxhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImZyZWVcIixsLmlkUmVnZXgueC50b1N0cmluZygpLGwuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOlwicGxvdFwifSxzaWRlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ0b3BcIixcImJvdHRvbVwiLFwibGVmdFwiLFwicmlnaHRcIl0sZWRpdFR5cGU6XCJwbG90XCJ9LG92ZXJsYXlpbmc6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImZyZWVcIixsLmlkUmVnZXgueC50b1N0cmluZygpLGwuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOlwicGxvdFwifSxsYXllcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYWJvdmUgdHJhY2VzXCIsXCJiZWxvdyB0cmFjZXNcIl0sZGZsdDpcImFib3ZlIHRyYWNlc1wiLGVkaXRUeXBlOlwicGxvdFwifSxkb21haW46e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsaXRlbXM6W3t2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZWRpdFR5cGU6XCJwbG90XCJ9LHt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZWRpdFR5cGU6XCJwbG90XCJ9XSxkZmx0OlswLDFdLGVkaXRUeXBlOlwicGxvdFwifSxwb3NpdGlvbjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZTpcInBsb3RcIn0sY2F0ZWdvcnlvcmRlcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1widHJhY2VcIixcImNhdGVnb3J5IGFzY2VuZGluZ1wiLFwiY2F0ZWdvcnkgZGVzY2VuZGluZ1wiLFwiYXJyYXlcIl0sZGZsdDpcInRyYWNlXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGNhdGVnb3J5YXJyYXk6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHVpcmV2aXNpb246e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcIm5vbmVcIn0sZWRpdFR5cGU6XCJjYWxjXCIsX2RlcHJlY2F0ZWQ6e2F1dG90aWNrOnt2YWxUeXBlOlwiYm9vbGVhblwiLGVkaXRUeXBlOlwidGlja3NcIn0sdGl0bGU6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcInRpY2tzXCJ9LHRpdGxlZm9udDpuKHtlZGl0VHlwZTpcInRpY2tzXCJ9KX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIjo1NzcsXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlc1wiOjU5OCxcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vZm9udF9hdHRyaWJ1dGVzXCI6Nzc1LFwiLi9jb25zdGFudHNcIjo3NTV9XSw3NjI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksYT10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKSxvPXQoXCIuLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxzPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLGw9dChcIi4vdHlwZV9kZWZhdWx0c1wiKSxjPXQoXCIuL2F4aXNfZGVmYXVsdHNcIiksdT10KFwiLi9jb25zdHJhaW50c1wiKS5oYW5kbGVDb25zdHJhaW50RGVmYXVsdHMsaD10KFwiLi9wb3NpdGlvbl9kZWZhdWx0c1wiKSxmPXQoXCIuL2F4aXNfaWRzXCIpLHA9Zi5pZDJuYW1lLGQ9Zi5uYW1lMmlkLGc9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLHY9Zy50cmFjZUlzLG09Zy5nZXRDb21wb25lbnRNZXRob2Q7ZnVuY3Rpb24geSh0LGUscil7QXJyYXkuaXNBcnJheSh0W2VdKT90W2VdLnB1c2gocik6dFtlXT1bcl19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgZixnLHg9e30sYj17fSxfPXt9LHc9e30saz17fTtmb3IoZj0wO2Y8ci5sZW5ndGg7ZisrKXt2YXIgQT1yW2ZdO2lmKHYoQSxcImNhcnRlc2lhblwiKXx8dihBLFwiZ2wyZFwiKSl7dmFyIFQsTTtpZihBLnhheGlzKXkoeCxUPXAoQS54YXhpcyksQSk7ZWxzZSBpZihBLnhheGVzKWZvcihnPTA7ZzxBLnhheGVzLmxlbmd0aDtnKyspeSh4LHAoQS54YXhlc1tnXSksQSk7aWYoQS55YXhpcyl5KHgsTT1wKEEueWF4aXMpLEEpO2Vsc2UgaWYoQS55YXhlcylmb3IoZz0wO2c8QS55YXhlcy5sZW5ndGg7ZysrKXkoeCxwKEEueWF4ZXNbZ10pLEEpO2lmKHYoQSxcImNhcnBldFwiKSYmKFwiY2FycGV0XCIhPT1BLnR5cGV8fEEuX2NoZWF0ZXIpfHxUJiYoX1tUXT0xKSxcImNhcnBldFwiPT09QS50eXBlJiZBLl9jaGVhdGVyJiZUJiYoYltUXT0xKSx2KEEsXCIyZE1hcFwiKSYmKHdbVF09MSx3W01dPTEpLHYoQSxcIm9yaWVudGVkXCIpKWtbXCJoXCI9PT1BLm9yaWVudGF0aW9uP006VF09MX19dmFyIFM9ZS5fc3VicGxvdHMsRT1TLnhheGlzLEM9Uy55YXhpcyxMPW4uc2ltcGxlTWFwKEUscCksej1uLnNpbXBsZU1hcChDLHApLE89TC5jb25jYXQoeiksST1pLmJhY2tncm91bmQ7RS5sZW5ndGgmJkMubGVuZ3RoJiYoST1uLmNvZXJjZSh0LGUsbyxcInBsb3RfYmdjb2xvclwiKSk7dmFyIEQsUCxSLEYsQj1pLmNvbWJpbmUoSSxlLnBhcGVyX2JnY29sb3IpO2Z1bmN0aW9uIE4odCxlKXtyZXR1cm4gbi5jb2VyY2UoUixGLHMsdCxlKX1mdW5jdGlvbiBqKHQsZSl7cmV0dXJuIG4uY29lcmNlMihSLEYscyx0LGUpfWZ1bmN0aW9uIFYodCl7cmV0dXJuXCJ4XCI9PT10P0M6RX12YXIgVT17eDpWKFwieFwiKSx5OlYoXCJ5XCIpfSxxPVUueC5jb25jYXQoVS55KTtmdW5jdGlvbiBIKGUscil7Zm9yKHZhciBuPVwieFwiPT09ZT9MOnosaT1bXSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBvPW5bYV07bz09PXJ8fCh0W29dfHx7fSkub3ZlcmxheWluZ3x8aS5wdXNoKGQobykpfXJldHVybiBpfWZvcihmPTA7ZjxPLmxlbmd0aDtmKyspe1A9KEQ9T1tmXSkuY2hhckF0KDApLG4uaXNQbGFpbk9iamVjdCh0W0RdKXx8KHRbRF09e30pLFI9dFtEXSxGPWEubmV3Q29udGFpbmVyKGUsRCxQK1wiYXhpc1wiKTt2YXIgRz14W0RdfHxbXTtGLl90cmFjZUluZGljZXM9Ry5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuX2V4cGFuZGVkSW5kZXh9KSxGLl9hbm5JbmRpY2VzPVtdLEYuX3NoYXBlSW5kaWNlcz1bXSxGLl9pbWdJbmRpY2VzPVtdLEYuX3N1YnBsb3RzV2l0aD1bXSxGLl9jb3VudGVyQXhlcz1bXSxGLl9uYW1lPUYuX2F0dHI9RDt2YXIgWT1GLl9pZD1kKEQpLFc9SChQLEQpLFg9e2xldHRlcjpQLGZvbnQ6ZS5mb250LG91dGVyVGlja3M6d1tEXSxzaG93R3JpZDoha1tEXSxkYXRhOkcsYmdDb2xvcjpCLGNhbGVuZGFyOmUuY2FsZW5kYXIsYXV0b21hcmdpbjohMCxjaGVhdGVyb25seTpcInhcIj09PVAmJmJbRF0mJiFfW0RdLHNwbG9tU3Rhc2g6KChlLl9zcGxvbUF4ZXN8fHt9KVtQXXx8e30pW1ldfTtOKFwidWlyZXZpc2lvblwiLGUudWlyZXZpc2lvbiksbChSLEYsTixYKSxjKFIsRixOLFgsZSk7dmFyIFo9aihcInNwaWtlY29sb3JcIiksJD1qKFwic3Bpa2V0aGlja25lc3NcIiksSj1qKFwic3Bpa2VkYXNoXCIpLEs9aihcInNwaWtlbW9kZVwiKSxRPWooXCJzcGlrZXNuYXBcIik7TihcInNob3dzcGlrZXNcIiwhIShafHwkfHxKfHxLfHxRKSl8fChkZWxldGUgRi5zcGlrZWNvbG9yLGRlbGV0ZSBGLnNwaWtldGhpY2tuZXNzLGRlbGV0ZSBGLnNwaWtlZGFzaCxkZWxldGUgRi5zcGlrZW1vZGUsZGVsZXRlIEYuc3Bpa2VzbmFwKSxoKFIsRixOLHtsZXR0ZXI6UCxjb3VudGVyQXhlczpVW1BdLG92ZXJsYXlhYmxlQXhlczpXLGdyaWQ6ZS5ncmlkfSksRi5faW5wdXQ9Un12YXIgdHQ9bShcInJhbmdlc2xpZGVyXCIsXCJoYW5kbGVEZWZhdWx0c1wiKSxldD1tKFwicmFuZ2VzZWxlY3RvclwiLFwiaGFuZGxlRGVmYXVsdHNcIik7Zm9yKGY9MDtmPEwubGVuZ3RoO2YrKylEPUxbZl0sUj10W0RdLEY9ZVtEXSx0dCh0LGUsRCksXCJkYXRlXCI9PT1GLnR5cGUmJmV0KFIsRixlLHosRi5jYWxlbmRhciksTihcImZpeGVkcmFuZ2VcIik7Zm9yKGY9MDtmPHoubGVuZ3RoO2YrKyl7RD16W2ZdLFI9dFtEXSxGPWVbRF07dmFyIHJ0PWVbcChGLmFuY2hvcildO04oXCJmaXhlZHJhbmdlXCIsbShcInJhbmdlc2xpZGVyXCIsXCJpc1Zpc2libGVcIikocnQpKX12YXIgbnQ9ZS5fYXhpc0NvbnN0cmFpbnRHcm91cHM9W10saXQ9ZS5fYXhpc01hdGNoR3JvdXBzPVtdO2ZvcihmPTA7ZjxPLmxlbmd0aDtmKyspUD0oRD1PW2ZdKS5jaGFyQXQoMCksUj10W0RdLEY9ZVtEXSx1KFIsRixOLHEsZSk7Zm9yKGY9MDtmPGl0Lmxlbmd0aDtmKyspe3ZhciBhdCxvdD1pdFtmXSxzdD1udWxsLGx0PW51bGw7Zm9yKGF0IGluIG90KShGPWVbcChhdCldKS5tYXRjaGVzfHwoc3Q9Ri5yYW5nZSxsdD1GLmF1dG9yYW5nZSk7aWYobnVsbD09PXN0fHxudWxsPT09bHQpZm9yKGF0IGluIG90KXtzdD0oRj1lW3AoYXQpXSkucmFuZ2UsbHQ9Ri5hdXRvcmFuZ2U7YnJlYWt9Zm9yKGF0IGluIG90KShGPWVbcChhdCldKS5tYXRjaGVzJiYoRi5yYW5nZT1zdC5zbGljZSgpLEYuYXV0b3JhbmdlPWx0KSxGLl9tYXRjaEdyb3VwPW90O2lmKG50Lmxlbmd0aClmb3IoYXQgaW4gb3QpZm9yKGc9MDtnPG50Lmxlbmd0aDtnKyspe3ZhciBjdD1udFtnXTtmb3IodmFyIHV0IGluIGN0KWF0PT09dXQmJihuLndhcm4oXCJBeGlzIFwiK3V0K1wiIGlzIHNldCB3aXRoIGJvdGggYSAqc2NhbGVhbmNob3IqIGFuZCAqbWF0Y2hlcyogY29uc3RyYWludDsgaWdub3JpbmcgdGhlIHNjYWxlIGNvbnN0cmFpbnQuXCIpLGRlbGV0ZSBjdFt1dF0sT2JqZWN0LmtleXMoY3QpLmxlbmd0aDwyJiZudC5zcGxpY2UoZywxKSl9fX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9sYXlvdXRfYXR0cmlidXRlc1wiOjgwMSxcIi4vYXhpc19kZWZhdWx0c1wiOjc1MSxcIi4vYXhpc19pZHNcIjo3NTIsXCIuL2NvbnN0cmFpbnRzXCI6NzU2LFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjc2MSxcIi4vcG9zaXRpb25fZGVmYXVsdHNcIjo3NjQsXCIuL3R5cGVfZGVmYXVsdHNcIjo3NzJ9XSw3NjM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwidGlueWNvbG9yMlwiKS5taXgsaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzXCIpLmxpZ2h0RnJhY3Rpb24sYT10KFwiLi4vLi4vbGliXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcz0obz1vfHx7fSkuZGZsdENvbG9yO2Z1bmN0aW9uIGwocixuKXtyZXR1cm4gYS5jb2VyY2UyKHQsZSxvLmF0dHJpYnV0ZXMscixuKX12YXIgYz1sKFwibGluZWNvbG9yXCIscyksdT1sKFwibGluZXdpZHRoXCIpO3IoXCJzaG93bGluZVwiLG8uc2hvd0xpbmV8fCEhY3x8ISF1KXx8KGRlbGV0ZSBlLmxpbmVjb2xvcixkZWxldGUgZS5saW5ld2lkdGgpO3ZhciBoPWwoXCJncmlkY29sb3JcIixuKHMsby5iZ0NvbG9yLG8uYmxlbmR8fGkpLnRvUmdiU3RyaW5nKCkpLGY9bChcImdyaWR3aWR0aFwiKTtpZihyKFwic2hvd2dyaWRcIixvLnNob3dHcmlkfHwhIWh8fCEhZil8fChkZWxldGUgZS5ncmlkY29sb3IsZGVsZXRlIGUuZ3JpZHdpZHRoKSwhby5ub1plcm9MaW5lKXt2YXIgcD1sKFwiemVyb2xpbmVjb2xvclwiLHMpLGQ9bChcInplcm9saW5ld2lkdGhcIik7cihcInplcm9saW5lXCIsby5zaG93R3JpZHx8ISFwfHwhIWQpfHwoZGVsZXRlIGUuemVyb2xpbmVjb2xvcixkZWxldGUgZS56ZXJvbGluZXdpZHRoKX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIjo1NzcsXCIuLi8uLi9saWJcIjo3MDEsdGlueWNvbG9yMjo1MjJ9XSw3NjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vLi4vbGliXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbyxzLGwsYyx1PWEuY291bnRlckF4ZXN8fFtdLGg9YS5vdmVybGF5YWJsZUF4ZXN8fFtdLGY9YS5sZXR0ZXIscD1hLmdyaWQ7cCYmKHM9cC5fZG9tYWluc1tmXVtwLl9heGlzTWFwW2UuX2lkXV0sbz1wLl9hbmNob3JzW2UuX2lkXSxzJiYobD1wW2YrXCJzaWRlXCJdLnNwbGl0KFwiIFwiKVswXSxjPXAuZG9tYWluW2ZdW1wicmlnaHRcIj09PWx8fFwidG9wXCI9PT1sPzE6MF0pKSxzPXN8fFswLDFdLG89b3x8KG4odC5wb3NpdGlvbik/XCJmcmVlXCI6dVswXXx8XCJmcmVlXCIpLGw9bHx8KFwieFwiPT09Zj9cImJvdHRvbVwiOlwibGVmdFwiKSxjPWN8fDAsXCJmcmVlXCI9PT1pLmNvZXJjZSh0LGUse2FuY2hvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiZnJlZVwiXS5jb25jYXQodSksZGZsdDpvfX0sXCJhbmNob3JcIikmJnIoXCJwb3NpdGlvblwiLGMpLGkuY29lcmNlKHQsZSx7c2lkZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6XCJ4XCI9PT1mP1tcImJvdHRvbVwiLFwidG9wXCJdOltcImxlZnRcIixcInJpZ2h0XCJdLGRmbHQ6bH19LFwic2lkZVwiKTt2YXIgZD0hMTtpZihoLmxlbmd0aCYmKGQ9aS5jb2VyY2UodCxlLHtvdmVybGF5aW5nOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbITFdLmNvbmNhdChoKSxkZmx0OiExfX0sXCJvdmVybGF5aW5nXCIpKSwhZCl7dmFyIGc9cihcImRvbWFpblwiLHMpO2dbMF0+Z1sxXS0xLzQwOTYmJihlLmRvbWFpbj1zKSxpLm5vbmVPckFsbCh0LmRvbWFpbixlLmRvbWFpbixzKX1yZXR1cm4gcihcImxheWVyXCIpLGV9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDc2NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCIpLkZST01fQkw7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2b2lkIDA9PT1yJiYocj1uW3QuY29uc3RyYWludG93YXJkfHxcImNlbnRlclwiXSk7dmFyIGk9W3QucjJsKHQucmFuZ2VbMF0pLHQucjJsKHQucmFuZ2VbMV0pXSxhPWlbMF0rKGlbMV0taVswXSkqcjt0LnJhbmdlPXQuX2lucHV0LnJhbmdlPVt0LmwycihhKyhpWzBdLWEpKmUpLHQubDJyKGErKGlbMV0tYSkqZSldfX0se1wiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiOjY3M31dLDc2NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJwb2x5Ym9vbGpzXCIpLGk9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxzPXQoXCIuLi8uLi9saWJcIiksbD10KFwiLi4vLi4vbGliL3BvbHlnb25cIiksYz10KFwiLi4vLi4vbGliL3Rocm90dGxlXCIpLHU9dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVyc1wiKS5tYWtlRXZlbnREYXRhLGg9dChcIi4vYXhpc19pZHNcIikuZ2V0RnJvbUlkLGY9dChcIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlc1wiKSxwPXQoXCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lc1wiKS5yZWRyYXdSZWdsVHJhY2VzLGQ9dChcIi4vY29uc3RhbnRzXCIpLGc9ZC5NSU5TRUxFQ1Qsdj1sLmZpbHRlcixtPWwudGVzdGVyO2Z1bmN0aW9uIHkodCl7cmV0dXJuIHQuX2lkfWZ1bmN0aW9uIHgodCxlLHIsbixpLGEsbyl7dmFyIHMsbCxjLHUsaCxmLHAsZCxnLHY9ZS5faG92ZXJkYXRhLG09ZS5fZnVsbExheW91dC5jbGlja21vZGUuaW5kZXhPZihcImV2ZW50XCIpPi0xLHk9W107aWYoZnVuY3Rpb24odCl7cmV0dXJuIHQmJkFycmF5LmlzQXJyYXkodCkmJiEwIT09dFswXS5ob3Zlck9uQm94fSh2KSl7ayh0LGUsYSk7dmFyIHg9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dFswXSxhPS0xLG89W107Zm9yKG49MDtuPGUubGVuZ3RoO24rKylpZihyPWVbbl0saS5mdWxsRGF0YS5fZXhwYW5kZWRJbmRleD09PXIuY2RbMF0udHJhY2UuX2V4cGFuZGVkSW5kZXgpe2lmKCEwPT09aS5ob3Zlck9uQm94KWJyZWFrO3ZvaWQgMCE9PWkucG9pbnROdW1iZXI/YT1pLnBvaW50TnVtYmVyOnZvaWQgMCE9PWkuYmluTnVtYmVyJiYoYT1pLmJpbk51bWJlcixvPWkucG9pbnROdW1iZXJzKTticmVha31yZXR1cm57cG9pbnROdW1iZXI6YSxwb2ludE51bWJlcnM6byxzZWFyY2hJbmZvOnJ9fSh2LHM9VChlLHIsbixpKSk7aWYoeC5wb2ludE51bWJlcnMubGVuZ3RoPjA/ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT1bXTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKShyPXRbaV0pLmNkWzBdLnRyYWNlLnNlbGVjdGVkcG9pbnRzJiZyLmNkWzBdLnRyYWNlLnNlbGVjdGVkcG9pbnRzLmxlbmd0aD4wJiZhLnB1c2gocik7aWYoMT09PWEubGVuZ3RoJiZhWzBdPT09ZS5zZWFyY2hJbmZvJiYobj1lLnNlYXJjaEluZm8uY2RbMF0udHJhY2UpLnNlbGVjdGVkcG9pbnRzLmxlbmd0aD09PWUucG9pbnROdW1iZXJzLmxlbmd0aCl7Zm9yKGk9MDtpPGUucG9pbnROdW1iZXJzLmxlbmd0aDtpKyspaWYobi5zZWxlY3RlZHBvaW50cy5pbmRleE9mKGUucG9pbnROdW1iZXJzW2ldKTwwKXJldHVybiExO3JldHVybiEwfXJldHVybiExfShzLHgpOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPTA7Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpZihlPXRbbl0sKHI9ZS5jZFswXS50cmFjZSkuc2VsZWN0ZWRwb2ludHMpe2lmKHIuc2VsZWN0ZWRwb2ludHMubGVuZ3RoPjEpcmV0dXJuITE7aWYoKGkrPXIuc2VsZWN0ZWRwb2ludHMubGVuZ3RoKT4xKXJldHVybiExfXJldHVybiAxPT09aX0ocykmJihmPVMoeCkpKXtmb3IobyYmby5yZW1vdmUoKSxnPTA7ZzxzLmxlbmd0aDtnKyspKGw9c1tnXSkuX21vZHVsZS5zZWxlY3RQb2ludHMobCwhMSk7RShlLHMpLEEoYSksbSYmZS5lbWl0KFwicGxvdGx5X2Rlc2VsZWN0XCIsbnVsbCl9ZWxzZXtmb3IocD10LnNoaWZ0S2V5JiYodm9pZCAwIT09Zj9mOlMoeCkpLGM9ZnVuY3Rpb24odCxlLHIpe3JldHVybntwb2ludE51bWJlcjp0LHNlYXJjaEluZm86ZSxzdWJ0cmFjdDpyfX0oeC5wb2ludE51bWJlcix4LnNlYXJjaEluZm8scCksdT13KGEuc2VsZWN0aW9uRGVmcy5jb25jYXQoW2NdKSksZz0wO2c8cy5sZW5ndGg7ZysrKWlmKGg9QyhzW2ddLl9tb2R1bGUuc2VsZWN0UG9pbnRzKHNbZ10sdSksc1tnXSkseS5sZW5ndGgpZm9yKHZhciBiPTA7YjxoLmxlbmd0aDtiKyspeS5wdXNoKGhbYl0pO2Vsc2UgeT1oO0UoZSxzLGQ9e3BvaW50czp5fSksYyYmYSYmYS5zZWxlY3Rpb25EZWZzLnB1c2goYyksbyYmTShhLm1lcmdlZFBvbHlnb25zLG8pLG0mJmUuZW1pdChcInBsb3RseV9zZWxlY3RlZFwiLGQpfX19ZnVuY3Rpb24gYih0KXtyZXR1cm5cInBvaW50TnVtYmVyXCJpbiB0JiZcInNlYXJjaEluZm9cImluIHR9ZnVuY3Rpb24gXyh0KXtyZXR1cm57eG1pbjowLHhtYXg6MCx5bWluOjAseW1heDowLHB0czpbXSxjb250YWluczpmdW5jdGlvbihlLHIsbixpKXt2YXIgYT10LnNlYXJjaEluZm8uY2RbMF0udHJhY2UuX2V4cGFuZGVkSW5kZXg7cmV0dXJuIGkuY2RbMF0udHJhY2UuX2V4cGFuZGVkSW5kZXg9PT1hJiZuPT09dC5wb2ludE51bWJlcn0saXNSZWN0OiExLGRlZ2VuZXJhdGU6ITEsc3VidHJhY3Q6dC5zdWJ0cmFjdH19ZnVuY3Rpb24gdyh0KXtmb3IodmFyIGU9W10scj1iKHRbMF0pPzA6dFswXVswXVswXSxuPXIsaT1iKHRbMF0pPzA6dFswXVswXVsxXSxhPWksbz0wO288dC5sZW5ndGg7bysrKWlmKGIodFtvXSkpZS5wdXNoKF8odFtvXSkpO2Vsc2V7dmFyIHM9bC50ZXN0ZXIodFtvXSk7cy5zdWJ0cmFjdD10W29dLnN1YnRyYWN0LGUucHVzaChzKSxyPU1hdGgubWluKHIscy54bWluKSxuPU1hdGgubWF4KG4scy54bWF4KSxpPU1hdGgubWluKGkscy55bWluKSxhPU1hdGgubWF4KGEscy55bWF4KX1yZXR1cm57eG1pbjpyLHhtYXg6bix5bWluOmkseW1heDphLHB0czpbXSxjb250YWluczpmdW5jdGlvbih0LHIsbixpKXtmb3IodmFyIGE9ITEsbz0wO288ZS5sZW5ndGg7bysrKWVbb10uY29udGFpbnModCxyLG4saSkmJihhPSExPT09ZVtvXS5zdWJ0cmFjdCk7cmV0dXJuIGF9LGlzUmVjdDohMSxkZWdlbmVyYXRlOiExfX1mdW5jdGlvbiBrKHQsZSxyKXt2YXIgbj1lLl9mdWxsTGF5b3V0LGk9ci5wbG90aW5mbyxhPW4uX2xhc3RTZWxlY3RlZFN1YnBsb3QmJm4uX2xhc3RTZWxlY3RlZFN1YnBsb3Q9PT1pLmlkLG89dC5zaGlmdEtleXx8dC5hbHRLZXk7YSYmbyYmaS5zZWxlY3Rpb24mJmkuc2VsZWN0aW9uLnNlbGVjdGlvbkRlZnMmJiFyLnNlbGVjdGlvbkRlZnM/KHIuc2VsZWN0aW9uRGVmcz1pLnNlbGVjdGlvbi5zZWxlY3Rpb25EZWZzLHIubWVyZ2VkUG9seWdvbnM9aS5zZWxlY3Rpb24ubWVyZ2VkUG9seWdvbnMpOm8mJmkuc2VsZWN0aW9ufHxBKHIpLGF8fChMKGUpLG4uX2xhc3RTZWxlY3RlZFN1YnBsb3Q9aS5pZCl9ZnVuY3Rpb24gQSh0KXt2YXIgZT10LnBsb3RpbmZvO2Uuc2VsZWN0aW9uPXt9LGUuc2VsZWN0aW9uLnNlbGVjdGlvbkRlZnM9dC5zZWxlY3Rpb25EZWZzPVtdLGUuc2VsZWN0aW9uLm1lcmdlZFBvbHlnb25zPXQubWVyZ2VkUG9seWdvbnM9W119ZnVuY3Rpb24gVCh0LGUscixuKXt2YXIgaSxhLG8scz1bXSxsPWUubWFwKHkpLGM9ci5tYXAoeSk7Zm9yKG89MDtvPHQuY2FsY2RhdGEubGVuZ3RoO28rKylpZighMD09PShhPShpPXQuY2FsY2RhdGFbb10pWzBdLnRyYWNlKS52aXNpYmxlJiZhLl9tb2R1bGUmJmEuX21vZHVsZS5zZWxlY3RQb2ludHMpaWYoIW58fGEuc3VicGxvdCE9PW4mJmEuZ2VvIT09bilpZihcInNwbG9tXCI9PT1hLnR5cGUmJmEuX3hheGVzW2xbMF1dJiZhLl95YXhlc1tjWzBdXSl7dmFyIHU9cChhLl9tb2R1bGUsaSxlWzBdLHJbMF0pO3Uuc2NlbmU9dC5fZnVsbExheW91dC5fc3Bsb21TY2VuZXNbYS51aWRdLHMucHVzaCh1KX1lbHNlIGlmKFwic2Fua2V5XCI9PT1hLnR5cGUpe3ZhciBmPXAoYS5fbW9kdWxlLGksZVswXSxyWzBdKTtzLnB1c2goZil9ZWxzZXtpZigtMT09PWwuaW5kZXhPZihhLnhheGlzKSljb250aW51ZTtpZigtMT09PWMuaW5kZXhPZihhLnlheGlzKSljb250aW51ZTtzLnB1c2gocChhLl9tb2R1bGUsaSxoKHQsYS54YXhpcyksaCh0LGEueWF4aXMpKSl9ZWxzZSBzLnB1c2gocChhLl9tb2R1bGUsaSxlWzBdLHJbMF0pKTtyZXR1cm4gcztmdW5jdGlvbiBwKHQsZSxyLG4pe3JldHVybntfbW9kdWxlOnQsY2Q6ZSx4YXhpczpyLHlheGlzOm59fX1mdW5jdGlvbiBNKHQsZSl7dmFyIHIsbixpPVtdO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07aS5wdXNoKGEuam9pbihcIkxcIikrXCJMXCIrYVswXSl9bj10Lmxlbmd0aD4wP1wiTVwiK2kuam9pbihcIk1cIikrXCJaXCI6XCJNMCwwWlwiLGUuYXR0cihcImRcIixuKX1mdW5jdGlvbiBTKHQpe3ZhciBlPXQuc2VhcmNoSW5mby5jZFswXS50cmFjZSxyPXQucG9pbnROdW1iZXIsbj10LnBvaW50TnVtYmVycyxpPW4ubGVuZ3RoPjA/blswXTpyO3JldHVybiEhZS5zZWxlY3RlZHBvaW50cyYmZS5zZWxlY3RlZHBvaW50cy5pbmRleE9mKGkpPi0xfWZ1bmN0aW9uIEUodCxlLHIpe3ZhciBuLGEsbyxzO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBsPWVbbl0uY2RbMF0udHJhY2UuX2Z1bGxJbnB1dCxjPXQuX2Z1bGxMYXlvdXQuX3RyYWNlUHJlR1VJW2wudWlkXXx8e307dm9pZCAwPT09Yy5zZWxlY3RlZHBvaW50cyYmKGMuc2VsZWN0ZWRwb2ludHM9bC5faW5wdXQuc2VsZWN0ZWRwb2ludHN8fG51bGwpfWlmKHIpe3ZhciB1PXIucG9pbnRzfHxbXTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKShzPWVbbl0uY2RbMF0udHJhY2UpLl9pbnB1dC5zZWxlY3RlZHBvaW50cz1zLl9mdWxsSW5wdXQuc2VsZWN0ZWRwb2ludHM9W10scy5fZnVsbElucHV0IT09cyYmKHMuc2VsZWN0ZWRwb2ludHM9W10pO2ZvcihuPTA7bjx1Lmxlbmd0aDtuKyspe3ZhciBoPXVbbl0sZD1oLmRhdGEsZz1oLmZ1bGxEYXRhO2gucG9pbnRJbmRpY2VzPyhbXS5wdXNoLmFwcGx5KGQuc2VsZWN0ZWRwb2ludHMsaC5wb2ludEluZGljZXMpLHMuX2Z1bGxJbnB1dCE9PXMmJltdLnB1c2guYXBwbHkoZy5zZWxlY3RlZHBvaW50cyxoLnBvaW50SW5kaWNlcykpOihkLnNlbGVjdGVkcG9pbnRzLnB1c2goaC5wb2ludEluZGV4KSxzLl9mdWxsSW5wdXQhPT1zJiZnLnNlbGVjdGVkcG9pbnRzLnB1c2goaC5wb2ludEluZGV4KSl9fWVsc2UgZm9yKG49MDtuPGUubGVuZ3RoO24rKylkZWxldGUocz1lW25dLmNkWzBdLnRyYWNlKS5zZWxlY3RlZHBvaW50cyxkZWxldGUgcy5faW5wdXQuc2VsZWN0ZWRwb2ludHMscy5fZnVsbElucHV0IT09cyYmZGVsZXRlIHMuX2Z1bGxJbnB1dC5zZWxlY3RlZHBvaW50czt2YXIgdj0hMTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKXtzPShvPShhPWVbbl0pLmNkKVswXS50cmFjZSxpLnRyYWNlSXMocyxcInJlZ2xcIikmJih2PSEwKTt2YXIgbT1hLl9tb2R1bGUseT1tLnN0eWxlT25TZWxlY3R8fG0uc3R5bGU7eSYmeSh0LG8pfXYmJihmKHQpLHAodCkpfWZ1bmN0aW9uIEModCxlKXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgcj1lLmNkLG49ZS5jZFswXS50cmFjZSxpPTA7aTx0Lmxlbmd0aDtpKyspdFtpXT11KHRbaV0sbixyKTtyZXR1cm4gdH1mdW5jdGlvbiBMKHQpe3ZhciBlPSh0Ll9mdWxsTGF5b3V0fHx7fSkuX3pvb21sYXllcjtlJiZlLnNlbGVjdEFsbChcIi5zZWxlY3Qtb3V0bGluZVwiKS5yZW1vdmUoKX1lLmV4cG9ydHM9e3ByZXBTZWxlY3Q6ZnVuY3Rpb24odCxlLHIsaSxsKXt2YXIgdSxoLGYscCx5LGIsXyxTPWkuZ2QsTD1TLl9mdWxsTGF5b3V0LHo9TC5fem9vbWxheWVyLE89aS5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEk9aS5wbG90aW5mbyxEPUkueGF4aXMuX29mZnNldCxQPUkueWF4aXMuX29mZnNldCxSPWUtTy5sZWZ0LEY9ci1PLnRvcCxCPVIsTj1GLGo9XCJNXCIrUitcIixcIitGLFY9aS54YXhlc1swXS5fbGVuZ3RoLFU9aS55YXhlc1swXS5fbGVuZ3RoLHE9aS54YXhlcy5jb25jYXQoaS55YXhlcyksSD10LmFsdEtleTtrKHQsUyxpKSxcImxhc3NvXCI9PT1sJiYodT12KFtbUixGXV0sZC5CRU5EUFgpKTt2YXIgRz16LnNlbGVjdEFsbChcInBhdGguc2VsZWN0LW91dGxpbmUtXCIrSS5pZCkuZGF0YShbMSwyXSk7Ry5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJzZWxlY3Qtb3V0bGluZSBzZWxlY3Qtb3V0bGluZS1cIit0K1wiIHNlbGVjdC1vdXRsaW5lLVwiK0kuaWR9KS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrRCtcIiwgXCIrUCtcIilcIikuYXR0cihcImRcIixqK1wiWlwiKTt2YXIgWSxXPXouYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiY2xhc3NcIixcInpvb21ib3gtY29ybmVyc1wiKS5zdHlsZSh7ZmlsbDphLmJhY2tncm91bmQsc3Ryb2tlOmEuZGVmYXVsdExpbmUsXCJzdHJva2Utd2lkdGhcIjoxfSkuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK0QrXCIsIFwiK1ArXCIpXCIpLmF0dHIoXCJkXCIsXCJNMCwwWlwiKSxYPUwuX3VpZCtkLlNFTEVDVElELFo9W10sJD1UKFMsaS54YXhlcyxpLnlheGVzLGkuc3VicGxvdCk7ZnVuY3Rpb24gSih0KXt2YXIgZT1cInlcIj09PXQuX2lkLmNoYXJBdCgwKT8xOjA7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0LnAyZChyW2VdKX19ZnVuY3Rpb24gSyh0LGUpe3JldHVybiB0LWV9WT1JLmZpbGxSYW5nZUl0ZW1zP0kuZmlsbFJhbmdlSXRlbXM6XCJzZWxlY3RcIj09PWw/ZnVuY3Rpb24odCxlKXt2YXIgcj10LnJhbmdlPXt9O2Zvcih5PTA7eTxxLmxlbmd0aDt5Kyspe3ZhciBuPXFbeV0saT1uLl9pZC5jaGFyQXQoMCk7cltuLl9pZF09W24ucDJkKGVbaStcIm1pblwiXSksbi5wMmQoZVtpK1wibWF4XCJdKV0uc29ydChLKX19OmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Lmxhc3NvUG9pbnRzPXt9O2Zvcih5PTA7eTxxLmxlbmd0aDt5Kyspe3ZhciBpPXFbeV07bltpLl9pZF09ci5maWx0ZXJlZC5tYXAoSihpKSl9fSxpLm1vdmVGbj1mdW5jdGlvbih0LGUpe0I9TWF0aC5tYXgoMCxNYXRoLm1pbihWLHQrUikpLE49TWF0aC5tYXgoMCxNYXRoLm1pbihVLGUrRikpO3ZhciByPU1hdGguYWJzKEItUiksYT1NYXRoLmFicyhOLUYpO2lmKFwic2VsZWN0XCI9PT1sKXt2YXIgbz1MLnNlbGVjdGRpcmVjdGlvbjtcImhcIj09PShvPVwiYW55XCI9PT1MLnNlbGVjdGRpcmVjdGlvbj9hPE1hdGgubWluKC42KnIsZyk/XCJoXCI6cjxNYXRoLm1pbiguNiphLGcpP1widlwiOlwiZFwiOkwuc2VsZWN0ZGlyZWN0aW9uKT8oKHA9W1tSLDBdLFtSLFVdLFtCLFVdLFtCLDBdXSkueG1pbj1NYXRoLm1pbihSLEIpLHAueG1heD1NYXRoLm1heChSLEIpLHAueW1pbj1NYXRoLm1pbigwLFUpLHAueW1heD1NYXRoLm1heCgwLFUpLFcuYXR0cihcImRcIixcIk1cIitwLnhtaW4rXCIsXCIrKEYtZykrXCJoLTR2XCIrMipnK1wiaDRaTVwiKyhwLnhtYXgtMSkrXCIsXCIrKEYtZykrXCJoNHZcIisyKmcrXCJoLTRaXCIpKTpcInZcIj09PW8/KChwPVtbMCxGXSxbMCxOXSxbVixOXSxbVixGXV0pLnhtaW49TWF0aC5taW4oMCxWKSxwLnhtYXg9TWF0aC5tYXgoMCxWKSxwLnltaW49TWF0aC5taW4oRixOKSxwLnltYXg9TWF0aC5tYXgoRixOKSxXLmF0dHIoXCJkXCIsXCJNXCIrKFItZykrXCIsXCIrcC55bWluK1widi00aFwiKzIqZytcInY0Wk1cIisoUi1nKStcIixcIisocC55bWF4LTEpK1widjRoXCIrMipnK1widi00WlwiKSk6XCJkXCI9PT1vJiYoKHA9W1tSLEZdLFtSLE5dLFtCLE5dLFtCLEZdXSkueG1pbj1NYXRoLm1pbihSLEIpLHAueG1heD1NYXRoLm1heChSLEIpLHAueW1pbj1NYXRoLm1pbihGLE4pLHAueW1heD1NYXRoLm1heChGLE4pLFcuYXR0cihcImRcIixcIk0wLDBaXCIpKX1lbHNlXCJsYXNzb1wiPT09bCYmKHUuYWRkUHQoW0IsTl0pLHA9dS5maWx0ZXJlZCk7aS5zZWxlY3Rpb25EZWZzJiZpLnNlbGVjdGlvbkRlZnMubGVuZ3RoPyhmPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gcj9uLmRpZmZlcmVuY2Uoe3JlZ2lvbnM6dCxpbnZlcnRlZDohMX0se3JlZ2lvbnM6W2VdLGludmVydGVkOiExfSkucmVnaW9uczpuLnVuaW9uKHtyZWdpb25zOnQsaW52ZXJ0ZWQ6ITF9LHtyZWdpb25zOltlXSxpbnZlcnRlZDohMX0pLnJlZ2lvbnN9KGkubWVyZ2VkUG9seWdvbnMscCxIKSxwLnN1YnRyYWN0PUgsaD13KGkuc2VsZWN0aW9uRGVmcy5jb25jYXQoW3BdKSkpOihmPVtwXSxoPW0ocCkpLE0oZixHKSxjLnRocm90dGxlKFgsZC5TRUxFQ1RERUxBWSxmdW5jdGlvbigpe3ZhciB0O1o9W107dmFyIGUscj1bXTtmb3IoeT0wO3k8JC5sZW5ndGg7eSsrKWlmKGU9KGI9JFt5XSkuX21vZHVsZS5zZWxlY3RQb2ludHMoYixoKSxyLnB1c2goZSksdD1DKGUsYiksWi5sZW5ndGgpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspWi5wdXNoKHRbbl0pO2Vsc2UgWj10O0UoUywkLF89e3BvaW50czpafSksWShfLHAsdSksaS5nZC5lbWl0KFwicGxvdGx5X3NlbGVjdGluZ1wiLF8pfSl9LGkuY2xpY2tGbj1mdW5jdGlvbih0LGUpe3ZhciByPUwuY2xpY2ttb2RlO1cucmVtb3ZlKCksYy5kb25lKFgpLnRoZW4oZnVuY3Rpb24oKXtpZihjLmNsZWFyKFgpLDI9PT10KXtmb3IoRy5yZW1vdmUoKSx5PTA7eTwkLmxlbmd0aDt5KyspKGI9JFt5XSkuX21vZHVsZS5zZWxlY3RQb2ludHMoYiwhMSk7RShTLCQpLEEoaSksUy5lbWl0KFwicGxvdGx5X2Rlc2VsZWN0XCIsbnVsbCl9ZWxzZSByLmluZGV4T2YoXCJzZWxlY3RcIik+LTEmJngoZSxTLGkueGF4ZXMsaS55YXhlcyxpLnN1YnBsb3QsaSxHKSxcImV2ZW50XCI9PT1yJiZTLmVtaXQoXCJwbG90bHlfc2VsZWN0ZWRcIix2b2lkIDApO28uY2xpY2soUyxlKX0pLmNhdGNoKHMuZXJyb3IpfSxpLmRvbmVGbj1mdW5jdGlvbigpe1cucmVtb3ZlKCksYy5kb25lKFgpLnRoZW4oZnVuY3Rpb24oKXtjLmNsZWFyKFgpLGkuZ2QuZW1pdChcInBsb3RseV9zZWxlY3RlZFwiLF8pLHAmJmkuc2VsZWN0aW9uRGVmcyYmKHAuc3VidHJhY3Q9SCxpLnNlbGVjdGlvbkRlZnMucHVzaChwKSxpLm1lcmdlZFBvbHlnb25zLmxlbmd0aD0wLFtdLnB1c2guYXBwbHkoaS5tZXJnZWRQb2x5Z29ucyxmKSksaS5kb25lRm5Db21wbGV0ZWQmJmkuZG9uZUZuQ29tcGxldGVkKFopfSkuY2F0Y2gocy5lcnJvcil9fSxjbGVhclNlbGVjdDpMLHNlbGVjdE9uQ2xpY2s6eH19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2Z4XCI6NjE3LFwiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzXCI6NjEzLFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzXCI6Njg2LFwiLi4vLi4vbGliL3BvbHlnb25cIjo3MTMsXCIuLi8uLi9saWIvdGhyb3R0bGVcIjo3MjYsXCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lc1wiOjc0MCxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9heGlzX2lkc1wiOjc1MixcIi4vY29uc3RhbnRzXCI6NzU1LHBvbHlib29sanM6NDY2fV0sNzY3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcImZhc3QtaXNudW1lcmljXCIpLGE9dChcIi4uLy4uL2xpYlwiKSxvPWEuY2xlYW5OdW1iZXIscz1hLm1zMkRhdGVUaW1lLGw9YS5kYXRlVGltZTJtcyxjPWEuZW5zdXJlTnVtYmVyLHU9YS5pc0FycmF5T3JUeXBlZEFycmF5LGg9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIiksZj1oLkZQX1NBRkUscD1oLkJBRE5VTSxkPWguTE9HX0NMSVAsZz10KFwiLi9jb25zdGFudHNcIiksdj10KFwiLi9heGlzX2lkc1wiKTtmdW5jdGlvbiBtKHQpe3JldHVybiBNYXRoLnBvdygxMCx0KX1mdW5jdGlvbiB5KHQpe3JldHVybiBudWxsIT10fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2U9ZXx8e307dmFyIHI9dC5faWR8fFwieFwiLGg9ci5jaGFyQXQoMCk7ZnVuY3Rpb24geChlLHIpe2lmKGU+MClyZXR1cm4gTWF0aC5sb2coZSkvTWF0aC5MTjEwO2lmKGU8PTAmJnImJnQucmFuZ2UmJjI9PT10LnJhbmdlLmxlbmd0aCl7dmFyIG49dC5yYW5nZVswXSxpPXQucmFuZ2VbMV07cmV0dXJuLjUqKG4raS0yKmQqTWF0aC5hYnMobi1pKSl9cmV0dXJuIHB9ZnVuY3Rpb24gYihlLHIsbil7dmFyIG89bChlLG58fHQuY2FsZW5kYXIpO2lmKG89PT1wKXtpZighaShlKSlyZXR1cm4gcDtlPStlO3ZhciBzPU1hdGguZmxvb3IoMTAqYS5tb2QoZSsuMDUsMSkpLGM9TWF0aC5yb3VuZChlLXMvMTApO289bChuZXcgRGF0ZShjKSkrcy8xMH1yZXR1cm4gb31mdW5jdGlvbiBfKGUscixuKXtyZXR1cm4gcyhlLHIsbnx8dC5jYWxlbmRhcil9ZnVuY3Rpb24gdyhlKXtyZXR1cm4gdC5fY2F0ZWdvcmllc1tNYXRoLnJvdW5kKGUpXX1mdW5jdGlvbiBrKGUpe2lmKHkoZSkpe2lmKHZvaWQgMD09PXQuX2NhdGVnb3JpZXNNYXAmJih0Ll9jYXRlZ29yaWVzTWFwPXt9KSx2b2lkIDAhPT10Ll9jYXRlZ29yaWVzTWFwW2VdKXJldHVybiB0Ll9jYXRlZ29yaWVzTWFwW2VdO3QuX2NhdGVnb3JpZXMucHVzaChlKTt2YXIgcj10Ll9jYXRlZ29yaWVzLmxlbmd0aC0xO3JldHVybiB0Ll9jYXRlZ29yaWVzTWFwW2VdPXIscn1yZXR1cm4gcH1mdW5jdGlvbiBBKGUpe2lmKHQuX2NhdGVnb3JpZXNNYXApcmV0dXJuIHQuX2NhdGVnb3JpZXNNYXBbZV19ZnVuY3Rpb24gVCh0KXt2YXIgZT1BKHQpO3JldHVybiB2b2lkIDAhPT1lP2U6aSh0KT8rdDp2b2lkIDB9ZnVuY3Rpb24gTShlKXtyZXR1cm4gaShlKT9uLnJvdW5kKHQuX2IrdC5fbSplLDIpOnB9ZnVuY3Rpb24gUyhlKXtyZXR1cm4oZS10Ll9iKS90Ll9tfXQuYzJsPVwibG9nXCI9PT10LnR5cGU/eDpjLHQubDJjPVwibG9nXCI9PT10LnR5cGU/bTpjLHQubDJwPU0sdC5wMmw9Uyx0LmMycD1cImxvZ1wiPT09dC50eXBlP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIE0oeCh0LGUpKX06TSx0LnAyYz1cImxvZ1wiPT09dC50eXBlP2Z1bmN0aW9uKHQpe3JldHVybiBtKFModCkpfTpTLC0xIT09W1wibGluZWFyXCIsXCItXCJdLmluZGV4T2YodC50eXBlKT8odC5kMnI9dC5yMmQ9dC5kMmM9dC5yMmM9dC5kMmw9dC5yMmw9byx0LmMyZD10LmMycj10LmwyZD10Lmwycj1jLHQuZDJwPXQucjJwPWZ1bmN0aW9uKGUpe3JldHVybiB0LmwycChvKGUpKX0sdC5wMmQ9dC5wMnI9Uyx0LmNsZWFuUG9zPWMpOlwibG9nXCI9PT10LnR5cGU/KHQuZDJyPXQuZDJsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHgobyh0KSxlKX0sdC5yMmQ9dC5yMmM9ZnVuY3Rpb24odCl7cmV0dXJuIG0obyh0KSl9LHQuZDJjPXQucjJsPW8sdC5jMmQ9dC5sMnI9Yyx0LmMycj14LHQubDJkPW0sdC5kMnA9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5sMnAodC5kMnIoZSxyKSl9LHQucDJkPWZ1bmN0aW9uKHQpe3JldHVybiBtKFModCkpfSx0LnIycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5sMnAobyhlKSl9LHQucDJyPVMsdC5jbGVhblBvcz1jKTpcImRhdGVcIj09PXQudHlwZT8odC5kMnI9dC5yMmQ9YS5pZGVudGl0eSx0LmQyYz10LnIyYz10LmQybD10LnIybD1iLHQuYzJkPXQuYzJyPXQubDJkPXQubDJyPV8sdC5kMnA9dC5yMnA9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmwycChiKGUsMCxuKSl9LHQucDJkPXQucDJyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gXyhTKHQpLGUscil9LHQuY2xlYW5Qb3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGEuY2xlYW5EYXRlKGUscCx0LmNhbGVuZGFyKX0pOlwiY2F0ZWdvcnlcIj09PXQudHlwZT8odC5kMmM9dC5kMmw9ayx0LnIyZD10LmMyZD10LmwyZD13LHQuZDJyPXQuZDJsX25vYWRkPVQsdC5yMmM9ZnVuY3Rpb24oZSl7dmFyIHI9VChlKTtyZXR1cm4gdm9pZCAwIT09cj9yOnQuZnJhY3Rpb24yciguNSl9LHQubDJyPXQuYzJyPWMsdC5yMmw9VCx0LmQycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5sMnAodC5yMmMoZSkpfSx0LnAyZD1mdW5jdGlvbih0KXtyZXR1cm4gdyhTKHQpKX0sdC5yMnA9dC5kMnAsdC5wMnI9Uyx0LmNsZWFuUG9zPWZ1bmN0aW9uKHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiZcIlwiIT09dD90OmModCl9KTpcIm11bHRpY2F0ZWdvcnlcIj09PXQudHlwZSYmKHQucjJkPXQuYzJkPXQubDJkPXcsdC5kMnI9dC5kMmxfbm9hZGQ9VCx0LnIyYz1mdW5jdGlvbihlKXt2YXIgcj1UKGUpO3JldHVybiB2b2lkIDAhPT1yP3I6dC5mcmFjdGlvbjJyKC41KX0sdC5yMmNfanVzdF9pbmRpY2VzPUEsdC5sMnI9dC5jMnI9Yyx0LnIybD1ULHQuZDJwPWZ1bmN0aW9uKGUpe3JldHVybiB0LmwycCh0LnIyYyhlKSl9LHQucDJkPWZ1bmN0aW9uKHQpe3JldHVybiB3KFModCkpfSx0LnIycD10LmQycCx0LnAycj1TLHQuY2xlYW5Qb3M9ZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl8fFwic3RyaW5nXCI9PXR5cGVvZiB0JiZcIlwiIT09dD90OmModCl9LHQuc2V0dXBNdWx0aUNhdGVnb3J5PWZ1bmN0aW9uKG4pe3ZhciBpLG8scz10Ll90cmFjZUluZGljZXMsbD1lLl9heGlzTWF0Y2hHcm91cHM7aWYobCYmbC5sZW5ndGgmJjA9PT10Ll9jYXRlZ29yaWVzLmxlbmd0aClmb3IoaT0wO2k8bC5sZW5ndGg7aSsrKXt2YXIgYz1sW2ldO2lmKGNbcl0pZm9yKHZhciBmIGluIGMpaWYoZiE9PXIpe3ZhciBwPWVbdi5pZDJuYW1lKGYpXTtzPXMuY29uY2F0KHAuX3RyYWNlSW5kaWNlcyl9fXZhciBkPVtbMCx7fV0sWzAse31dXSxnPVtdO2ZvcihpPTA7aTxzLmxlbmd0aDtpKyspe3ZhciBtPW5bc1tpXV07aWYoaCBpbiBtKXt2YXIgeD1tW2hdLGI9bS5fbGVuZ3RofHxhLm1pblJvd0xlbmd0aCh4KTtpZih1KHhbMF0pJiZ1KHhbMV0pKWZvcihvPTA7bzxiO28rKyl7dmFyIF89eFswXVtvXSx3PXhbMV1bb107eShfKSYmeSh3KSYmKGcucHVzaChbXyx3XSksXyBpbiBkWzBdWzFdfHwoZFswXVsxXVtfXT1kWzBdWzBdKyspLHcgaW4gZFsxXVsxXXx8KGRbMV1bMV1bd109ZFsxXVswXSsrKSl9fX1mb3IoZy5zb3J0KGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZFswXVsxXSxuPXJbdFswXV0tcltlWzBdXTtpZihuKXJldHVybiBuO3ZhciBpPWRbMV1bMV07cmV0dXJuIGlbdFsxXV0taVtlWzFdXX0pLGk9MDtpPGcubGVuZ3RoO2krKylrKGdbaV0pfSksdC5mcmFjdGlvbjJyPWZ1bmN0aW9uKGUpe3ZhciByPXQucjJsKHQucmFuZ2VbMF0pLG49dC5yMmwodC5yYW5nZVsxXSk7cmV0dXJuIHQubDJyKHIrZSoobi1yKSl9LHQucjJmcmFjdGlvbj1mdW5jdGlvbihlKXt2YXIgcj10LnIybCh0LnJhbmdlWzBdKSxuPXQucjJsKHQucmFuZ2VbMV0pO3JldHVybih0LnIybChlKS1yKS8obi1yKX0sdC5jbGVhblJhbmdlPWZ1bmN0aW9uKGUscil7cnx8KHI9e30pLGV8fChlPVwicmFuZ2VcIik7dmFyIG4sbyxzPWEubmVzdGVkUHJvcGVydHkodCxlKS5nZXQoKTtpZihvPShvPVwiZGF0ZVwiPT09dC50eXBlP2EuZGZsdFJhbmdlKHQuY2FsZW5kYXIpOlwieVwiPT09aD9nLkRGTFRSQU5HRVk6ci5kZmx0UmFuZ2V8fGcuREZMVFJBTkdFWCkuc2xpY2UoKSxzJiYyPT09cy5sZW5ndGgpZm9yKFwiZGF0ZVwiPT09dC50eXBlJiYoc1swXT1hLmNsZWFuRGF0ZShzWzBdLHAsdC5jYWxlbmRhciksc1sxXT1hLmNsZWFuRGF0ZShzWzFdLHAsdC5jYWxlbmRhcikpLG49MDtuPDI7bisrKWlmKFwiZGF0ZVwiPT09dC50eXBlKXtpZighYS5pc0RhdGVUaW1lKHNbbl0sdC5jYWxlbmRhcikpe3RbZV09bzticmVha31pZih0LnIybChzWzBdKT09PXQucjJsKHNbMV0pKXt2YXIgbD1hLmNvbnN0cmFpbih0LnIybChzWzBdKSxhLk1JTl9NUysxZTMsYS5NQVhfTVMtMWUzKTtzWzBdPXQubDJyKGwtMWUzKSxzWzFdPXQubDJyKGwrMWUzKTticmVha319ZWxzZXtpZighaShzW25dKSl7aWYoIWkoc1sxLW5dKSl7dFtlXT1vO2JyZWFrfXNbbl09c1sxLW5dKihuPzEwOi4xKX1pZihzW25dPC1mP3Nbbl09LWY6c1tuXT5mJiYoc1tuXT1mKSxzWzBdPT09c1sxXSl7dmFyIGM9TWF0aC5tYXgoMSxNYXRoLmFicygxZS02KnNbMF0pKTtzWzBdLT1jLHNbMV0rPWN9fWVsc2UgYS5uZXN0ZWRQcm9wZXJ0eSh0LGUpLnNldChvKX0sdC5zZXRTY2FsZT1mdW5jdGlvbihyKXt2YXIgbj1lLl9zaXplO2lmKHQub3ZlcmxheWluZyl7dmFyIGk9di5nZXRGcm9tSWQoe19mdWxsTGF5b3V0OmV9LHQub3ZlcmxheWluZyk7dC5kb21haW49aS5kb21haW59dmFyIGE9ciYmdC5fcj9cIl9yXCI6XCJyYW5nZVwiLG89dC5jYWxlbmRhcjt0LmNsZWFuUmFuZ2UoYSk7dmFyIHM9dC5yMmwodFthXVswXSxvKSxsPXQucjJsKHRbYV1bMV0sbyk7aWYoXCJ5XCI9PT1oPyh0Ll9vZmZzZXQ9bi50KygxLXQuZG9tYWluWzFdKSpuLmgsdC5fbGVuZ3RoPW4uaCoodC5kb21haW5bMV0tdC5kb21haW5bMF0pLHQuX209dC5fbGVuZ3RoLyhzLWwpLHQuX2I9LXQuX20qbCk6KHQuX29mZnNldD1uLmwrdC5kb21haW5bMF0qbi53LHQuX2xlbmd0aD1uLncqKHQuZG9tYWluWzFdLXQuZG9tYWluWzBdKSx0Ll9tPXQuX2xlbmd0aC8obC1zKSx0Ll9iPS10Ll9tKnMpLCFpc0Zpbml0ZSh0Ll9tKXx8IWlzRmluaXRlKHQuX2IpfHx0Ll9sZW5ndGg8MCl0aHJvdyBlLl9yZXBsb3R0aW5nPSExLG5ldyBFcnJvcihcIlNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggYXhpcyBzY2FsaW5nXCIpfSx0Lm1ha2VDYWxjZGF0YT1mdW5jdGlvbihlLHIpe3ZhciBuLGksbyxzLGw9dC50eXBlLGM9XCJkYXRlXCI9PT1sJiZlW3IrXCJjYWxlbmRhclwiXTtpZihyIGluIGUpe2lmKG49ZVtyXSxzPWUuX2xlbmd0aHx8YS5taW5Sb3dMZW5ndGgobiksYS5pc1R5cGVkQXJyYXkobikmJihcImxpbmVhclwiPT09bHx8XCJsb2dcIj09PWwpKXtpZihzPT09bi5sZW5ndGgpcmV0dXJuIG47aWYobi5zdWJhcnJheSlyZXR1cm4gbi5zdWJhcnJheSgwLHMpfWlmKFwibXVsdGljYXRlZ29yeVwiPT09bClyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXt2YXIgaT0odFswXXx8W10pW25dLGE9KHRbMV18fFtdKVtuXTtyW25dPUEoW2ksYV0pfXJldHVybiByfShuLHMpO2ZvcihpPW5ldyBBcnJheShzKSxvPTA7bzxzO28rKylpW29dPXQuZDJjKG5bb10sMCxjKX1lbHNle3ZhciB1PXIrXCIwXCJpbiBlP3QuZDJjKGVbcitcIjBcIl0sMCxjKTowLGg9ZVtcImRcIityXT9OdW1iZXIoZVtcImRcIityXSk6MTtmb3Iobj1lW3t4OlwieVwiLHk6XCJ4XCJ9W3JdXSxzPWUuX2xlbmd0aHx8bi5sZW5ndGgsaT1uZXcgQXJyYXkocyksbz0wO288cztvKyspaVtvXT11K28qaH1yZXR1cm4gaX0sdC5pc1ZhbGlkUmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJjI9PT1lLmxlbmd0aCYmaSh0LnIybChlWzBdKSkmJmkodC5yMmwoZVsxXSkpfSx0LmlzUHRXaXRoaW5SYW5nZT1mdW5jdGlvbihlLHIpe3ZhciBuPXQuYzJsKGVbaF0sbnVsbCxyKSxpPXQucjJsKHQucmFuZ2VbMF0pLGE9dC5yMmwodC5yYW5nZVsxXSk7cmV0dXJuIGk8YT9pPD1uJiZuPD1hOmE8PW4mJm48PWl9LHQuY2xlYXJDYWxjPWZ1bmN0aW9uKCl7dmFyIG49ZnVuY3Rpb24oKXt0Ll9jYXRlZ29yaWVzPVtdLHQuX2NhdGVnb3JpZXNNYXA9e319LGk9ZS5fYXhpc01hdGNoR3JvdXBzO2lmKGkmJmkubGVuZ3RoKXtmb3IodmFyIGE9ITEsbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz1pW29dO2lmKHNbcl0pe2E9ITA7dmFyIGw9bnVsbCxjPW51bGw7Zm9yKHZhciB1IGluIHMpe3ZhciBoPWVbdi5pZDJuYW1lKHUpXTtpZihoLl9jYXRlZ29yaWVzKXtsPWguX2NhdGVnb3JpZXMsYz1oLl9jYXRlZ29yaWVzTWFwO2JyZWFrfX1sJiZjPyh0Ll9jYXRlZ29yaWVzPWwsdC5fY2F0ZWdvcmllc01hcD1jKTpuKCk7YnJlYWt9fWF8fG4oKX1lbHNlIG4oKTtpZih0Ll9pbml0aWFsQ2F0ZWdvcmllcylmb3IodmFyIGY9MDtmPHQuX2luaXRpYWxDYXRlZ29yaWVzLmxlbmd0aDtmKyspayh0Ll9pbml0aWFsQ2F0ZWdvcmllc1tmXSl9O3ZhciBFPWUuX2QzbG9jYWxlO1wiZGF0ZVwiPT09dC50eXBlJiYodC5fZGF0ZUZvcm1hdD1FP0UudGltZUZvcm1hdC51dGM6bi50aW1lLmZvcm1hdC51dGMsdC5fZXh0cmFGb3JtYXQ9ZS5fZXh0cmFGb3JtYXQpLHQuX3NlcGFyYXRvcnM9ZS5zZXBhcmF0b3JzLHQuX251bUZvcm1hdD1FP0UubnVtYmVyRm9ybWF0Om4uZm9ybWF0LGRlbGV0ZSB0Ll9taW5EdGljayxkZWxldGUgdC5fZm9yY2VUaWNrMH19LHtcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuL2F4aXNfaWRzXCI6NzUyLFwiLi9jb25zdGFudHNcIjo3NTUsZDM6MTU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw3Njg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCIpO2Z1bmN0aW9uIG8odCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLnRpY2tmb3JtYXRzdG9wcyxyLGEpfXIoXCJlbmFibGVkXCIpJiYocihcImR0aWNrcmFuZ2VcIikscihcInZhbHVlXCIpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyxsKXt2YXIgYz1mdW5jdGlvbih0KXt2YXIgZT1bXCJzaG93ZXhwb25lbnRcIixcInNob3d0aWNrcHJlZml4XCIsXCJzaG93dGlja3N1ZmZpeFwiXS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXRbZV19KTtpZihlLmV2ZXJ5KGZ1bmN0aW9uKHIpe3JldHVybiB0W3JdPT09dFtlWzBdXX0pfHwxPT09ZS5sZW5ndGgpcmV0dXJuIHRbZVswXV19KHQpO2lmKHIoXCJ0aWNrcHJlZml4XCIpJiZyKFwic2hvd3RpY2twcmVmaXhcIixjKSxyKFwidGlja3N1ZmZpeFwiLGwudGlja1N1ZmZpeERmbHQpJiZyKFwic2hvd3RpY2tzdWZmaXhcIixjKSxyKFwic2hvd3RpY2tsYWJlbHNcIikpe3ZhciB1PWwuZm9udHx8e30saD1lLmNvbG9yLGY9aCYmaCE9PWkuY29sb3IuZGZsdD9oOnUuY29sb3I7aWYobi5jb2VyY2VGb250KHIsXCJ0aWNrZm9udFwiLHtmYW1pbHk6dS5mYW1pbHksc2l6ZTp1LnNpemUsY29sb3I6Zn0pLHIoXCJ0aWNrYW5nbGVcIiksXCJjYXRlZ29yeVwiIT09cyl7dmFyIHA9cihcInRpY2tmb3JtYXRcIiksZD10LnRpY2tmb3JtYXRzdG9wcztBcnJheS5pc0FycmF5KGQpJiZkLmxlbmd0aCYmYSh0LGUse25hbWU6XCJ0aWNrZm9ybWF0c3RvcHNcIixpbmNsdXNpb25BdHRyOlwiZW5hYmxlZFwiLGhhbmRsZUl0ZW1EZWZhdWx0czpvfSkscHx8XCJkYXRlXCI9PT1zfHwocihcInNob3dleHBvbmVudFwiLGMpLHIoXCJleHBvbmVudGZvcm1hdFwiKSxyKFwic2VwYXJhdGV0aG91c2FuZHNcIikpfX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIjo3NDUsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6NzYxfV0sNzY5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1uLmNvZXJjZTIodCxlLGksXCJ0aWNrbGVuXCIpLHM9bi5jb2VyY2UyKHQsZSxpLFwidGlja3dpZHRoXCIpLGw9bi5jb2VyY2UyKHQsZSxpLFwidGlja2NvbG9yXCIsZS5jb2xvcik7cihcInRpY2tzXCIsYS5vdXRlclRpY2tzfHxvfHxzfHxsP1wib3V0c2lkZVwiOlwiXCIpfHwoZGVsZXRlIGUudGlja2xlbixkZWxldGUgZS50aWNrd2lkdGgsZGVsZXRlIGUudGlja2NvbG9yKX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo3NjF9XSw3NzA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9jbGVhbl90aWNrc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE7XCJhcnJheVwiIT09dC50aWNrbW9kZXx8XCJsb2dcIiE9PWkmJlwiZGF0ZVwiIT09aT9hPXIoXCJ0aWNrbW9kZVwiLEFycmF5LmlzQXJyYXkodC50aWNrdmFscyk/XCJhcnJheVwiOnQuZHRpY2s/XCJsaW5lYXJcIjpcImF1dG9cIik6YT1lLnRpY2ttb2RlPVwiYXV0b1wiO2lmKFwiYXV0b1wiPT09YSlyKFwibnRpY2tzXCIpO2Vsc2UgaWYoXCJsaW5lYXJcIj09PWEpe3ZhciBvPWUuZHRpY2s9bi5kdGljayh0LmR0aWNrLGkpO2UudGljazA9bi50aWNrMCh0LnRpY2swLGksZS5jYWxlbmRhcixvKX1lbHNlIGlmKFwibXVsdGljYXRlZ29yeVwiIT09aSl7dm9pZCAwPT09cihcInRpY2t2YWxzXCIpP2UudGlja21vZGU9XCJhdXRvXCI6cihcInRpY2t0ZXh0XCIpfX19LHtcIi4vY2xlYW5fdGlja3NcIjo3NTR9XSw3NzE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vcmVnaXN0cnlcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLG89dChcIi4vYXhlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7dmFyIGw9dC5fZnVsbExheW91dDtpZigwIT09ZS5sZW5ndGgpe3ZhciBjLHUsaCxmO3MmJihjPXMoKSk7dmFyIHA9bi5lYXNlKHIuZWFzaW5nKTtyZXR1cm4gdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShmKSxmPW51bGwsZnVuY3Rpb24oKXtmb3IodmFyIHI9e30sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgYT1lW25dO2EueHIwJiYoclthLnBsb3RpbmZvLnhheGlzLl9uYW1lK1wiLnJhbmdlXCJdPWEueHIwLnNsaWNlKCkpLGEueXIwJiYoclthLnBsb3RpbmZvLnlheGlzLl9uYW1lK1wiLnJhbmdlXCJdPWEueXIwLnNsaWNlKCkpfXJldHVybiBpLmNhbGwoXCJyZWxheW91dFwiLHQscikudGhlbihmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWQoZVt0XS5wbG90aW5mbyl9KX0oKX0pLHU9RGF0ZS5ub3coKSxmPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gbigpe2g9RGF0ZS5ub3coKTtmb3IodmFyIGE9TWF0aC5taW4oMSwoaC11KS9yLmR1cmF0aW9uKSxvPXAoYSkscz0wO3M8ZS5sZW5ndGg7cysrKWcoZVtzXSxvKTtoLXU+ci5kdXJhdGlvbj8oZnVuY3Rpb24oKXtmb3IodmFyIHI9e30sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgYT1lW25dO2EueHIxJiYoclthLnBsb3RpbmZvLnhheGlzLl9uYW1lK1wiLnJhbmdlXCJdPWEueHIxLnNsaWNlKCkpLGEueXIxJiYoclthLnBsb3RpbmZvLnlheGlzLl9uYW1lK1wiLnJhbmdlXCJdPWEueXIxLnNsaWNlKCkpfWMmJmMoKSxpLmNhbGwoXCJyZWxheW91dFwiLHQscikudGhlbihmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWQoZVt0XS5wbG90aW5mbyl9KX0oKSxmPXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShuKSk6Zj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG4pfSksUHJvbWlzZS5yZXNvbHZlKCl9ZnVuY3Rpb24gZCh0KXt2YXIgZT10LnhheGlzLHI9dC55YXhpcztsLl9kZWZzLnNlbGVjdChcIiNcIit0LmNsaXBJZCtcIj4gcmVjdFwiKS5jYWxsKGEuc2V0VHJhbnNsYXRlLDAsMCkuY2FsbChhLnNldFNjYWxlLDEsMSksdC5wbG90LmNhbGwoYS5zZXRUcmFuc2xhdGUsZS5fb2Zmc2V0LHIuX29mZnNldCkuY2FsbChhLnNldFNjYWxlLDEsMSk7dmFyIG49dC5wbG90LnNlbGVjdEFsbChcIi5zY2F0dGVybGF5ZXIgLnRyYWNlXCIpO24uc2VsZWN0QWxsKFwiLnBvaW50XCIpLmNhbGwoYS5zZXRQb2ludEdyb3VwU2NhbGUsMSwxKSxuLnNlbGVjdEFsbChcIi50ZXh0cG9pbnRcIikuY2FsbChhLnNldFRleHRQb2ludHNTY2FsZSwxLDEpLG4uY2FsbChhLmhpZGVPdXRzaWRlUmFuZ2VQb2ludHMsdCl9ZnVuY3Rpb24gZyhlLHIpe3ZhciBuPWUucGxvdGluZm8saT1uLnhheGlzLHM9bi55YXhpcyxsPWUueHIwLGM9ZS54cjEsdT1pLl9sZW5ndGgsaD1lLnlyMCxmPWUueXIxLHA9cy5fbGVuZ3RoLGQ9ISFjLGc9ISFmLHY9W107aWYoZCl7dmFyIG09bFsxXS1sWzBdLHk9Y1sxXS1jWzBdO3ZbMF09KGxbMF0qKDEtcikrcipjWzBdLWxbMF0pLyhsWzFdLWxbMF0pKnUsdlsyXT11KigxLXIrcip5L20pLGkucmFuZ2VbMF09bFswXSooMS1yKStyKmNbMF0saS5yYW5nZVsxXT1sWzFdKigxLXIpK3IqY1sxXX1lbHNlIHZbMF09MCx2WzJdPXU7aWYoZyl7dmFyIHg9aFsxXS1oWzBdLGI9ZlsxXS1mWzBdO3ZbMV09KGhbMV0qKDEtcikrcipmWzFdLWhbMV0pLyhoWzBdLWhbMV0pKnAsdlszXT1wKigxLXIrcipiL3gpLHMucmFuZ2VbMF09aFswXSooMS1yKStyKmZbMF0scy5yYW5nZVsxXT1oWzFdKigxLXIpK3IqZlsxXX1lbHNlIHZbMV09MCx2WzNdPXA7by5kcmF3T25lKHQsaSx7c2tpcFRpdGxlOiEwfSksby5kcmF3T25lKHQscyx7c2tpcFRpdGxlOiEwfSksby5yZWRyYXdDb21wb25lbnRzKHQsW2kuX2lkLHMuX2lkXSk7dmFyIF89ZD91L3ZbMl06MSx3PWc/cC92WzNdOjEsaz1kP3ZbMF06MCxBPWc/dlsxXTowLFQ9ZD92WzBdL3ZbMl0qdTowLE09Zz92WzFdL3ZbM10qcDowLFM9aS5fb2Zmc2V0LVQsRT1zLl9vZmZzZXQtTTtuLmNsaXBSZWN0LmNhbGwoYS5zZXRUcmFuc2xhdGUsayxBKS5jYWxsKGEuc2V0U2NhbGUsMS9fLDEvdyksbi5wbG90LmNhbGwoYS5zZXRUcmFuc2xhdGUsUyxFKS5jYWxsKGEuc2V0U2NhbGUsXyx3KSxhLnNldFBvaW50R3JvdXBTY2FsZShuLnpvb21TY2FsZVB0cywxL18sMS93KSxhLnNldFRleHRQb2ludHNTY2FsZShuLnpvb21TY2FsZVR4dCwxL18sMS93KX1vLnJlZHJhd0NvbXBvbmVudHModCl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vYXhlc1wiOjc0OSxkMzoxNTV9XSw3NzI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIikudHJhY2VJcyxpPXQoXCIuL2F4aXNfYXV0b3R5cGVcIik7ZnVuY3Rpb24gYSh0KXtyZXR1cm57djpcInhcIixoOlwieVwifVt0Lm9yaWVudGF0aW9ufHxcInZcIl19ZnVuY3Rpb24gbyh0LGUpe3ZhciByPWEodCksaT1uKHQsXCJib3gtdmlvbGluXCIpLG89bih0Ll9mdWxsSW5wdXR8fHt9LFwiY2FuZGxlc3RpY2tcIik7cmV0dXJuIGkmJiFvJiZlPT09ciYmdm9pZCAwPT09dFtyXSYmdm9pZCAwPT09dFtyK1wiMFwiXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7XCItXCI9PT1yKFwidHlwZVwiLChzLnNwbG9tU3Rhc2h8fHt9KS50eXBlKSYmKCFmdW5jdGlvbih0LGUpe2lmKFwiLVwiIT09dC50eXBlKXJldHVybjt2YXIgcj10Ll9pZCxzPXIuY2hhckF0KDApOy0xIT09ci5pbmRleE9mKFwic2NlbmVcIikmJihyPXMpO3ZhciBsPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXTtpZihcInNwbG9tXCI9PT1pLnR5cGUmJmkuX2xlbmd0aD4wJiYoaVtcIl9cIityK1wiYXhlc1wiXXx8e30pW2VdKXJldHVybiBpO2lmKChpW3IrXCJheGlzXCJdfHxyKT09PWUpe2lmKG8oaSxyKSlyZXR1cm4gaTtpZigoaVtyXXx8W10pLmxlbmd0aHx8aVtyK1wiMFwiXSlyZXR1cm4gaX19fShlLHIscyk7aWYoIWwpcmV0dXJuO2lmKFwiaGlzdG9ncmFtXCI9PT1sLnR5cGUmJnM9PT17djpcInlcIixoOlwieFwifVtsLm9yaWVudGF0aW9ufHxcInZcIl0pcmV0dXJuIHZvaWQodC50eXBlPVwibGluZWFyXCIpO3ZhciBjLHU9cytcImNhbGVuZGFyXCIsaD1sW3VdLGY9e25vTXVsdGlDYXRlZ29yeTohbihsLFwiY2FydGVzaWFuXCIpfHxuKGwsXCJub011bHRpQ2F0ZWdvcnlcIil9O2lmKG8obCxzKSl7dmFyIHA9YShsKSxkPVtdO2ZvcihjPTA7YzxlLmxlbmd0aDtjKyspe3ZhciBnPWVbY107bihnLFwiYm94LXZpb2xpblwiKSYmKGdbcytcImF4aXNcIl18fHMpPT09ciYmKHZvaWQgMCE9PWdbcF0/ZC5wdXNoKGdbcF1bMF0pOnZvaWQgMCE9PWcubmFtZT9kLnB1c2goZy5uYW1lKTpkLnB1c2goXCJ0ZXh0XCIpLGdbdV0hPT1oJiYoaD12b2lkIDApKX10LnR5cGU9aShkLGgsZil9ZWxzZSBpZihcInNwbG9tXCI9PT1sLnR5cGUpe3ZhciB2PWwuZGltZW5zaW9ucyxtPWwuX2RpYWc7Zm9yKGM9MDtjPHYubGVuZ3RoO2MrKyl7dmFyIHk9dltjXTtpZih5LnZpc2libGUmJihtW2NdWzBdPT09cnx8bVtjXVsxXT09PXIpKXt0LnR5cGU9aSh5LnZhbHVlcyxoLGYpO2JyZWFrfX19ZWxzZSB0LnR5cGU9aShsW3NdfHxbbFtzK1wiMFwiXV0saCxmKX0oZSxzLmRhdGEpLFwiLVwiPT09ZS50eXBlP2UudHlwZT1cImxpbmVhclwiOnQudHlwZT1lLnR5cGUpfX0se1wiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2F4aXNfYXV0b3R5cGVcIjo3NTB9XSw3NzM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vcmVnaXN0cnlcIiksaT10KFwiLi4vbGliXCIpO2Z1bmN0aW9uIGEodCxlLHIpe3ZhciBuLGEsbyxzPSExO2lmKFwiZGF0YVwiPT09ZS50eXBlKW49dC5fZnVsbERhdGFbbnVsbCE9PWUudHJhY2VzP2UudHJhY2VzWzBdOjBdO2Vsc2V7aWYoXCJsYXlvdXRcIiE9PWUudHlwZSlyZXR1cm4hMTtuPXQuX2Z1bGxMYXlvdXR9cmV0dXJuIGE9aS5uZXN0ZWRQcm9wZXJ0eShuLGUucHJvcCkuZ2V0KCksKG89cltlLnR5cGVdPXJbZS50eXBlXXx8e30pLmhhc093blByb3BlcnR5KGUucHJvcCkmJm9bZS5wcm9wXSE9PWEmJihzPSEwKSxvW2UucHJvcF09YSx7Y2hhbmdlZDpzLHZhbHVlOmF9fWZ1bmN0aW9uIG8odCxlKXt2YXIgcj1bXSxuPWVbMF0sYT17fTtpZihcInN0cmluZ1wiPT10eXBlb2YgbilhW25dPWVbMV07ZWxzZXtpZighaS5pc1BsYWluT2JqZWN0KG4pKXJldHVybiByO2E9bn1yZXR1cm4gbChhLGZ1bmN0aW9uKHQsZSxuKXtyLnB1c2goe3R5cGU6XCJsYXlvdXRcIixwcm9wOnQsdmFsdWU6bn0pfSxcIlwiLDApLHJ9ZnVuY3Rpb24gcyh0LGUpe3ZhciByLG4sYSxvLHM9W107aWYobj1lWzBdLGE9ZVsxXSxyPWVbMl0sbz17fSxcInN0cmluZ1wiPT10eXBlb2YgbilvW25dPWE7ZWxzZXtpZighaS5pc1BsYWluT2JqZWN0KG4pKXJldHVybiBzO289bix2b2lkIDA9PT1yJiYocj1hKX1yZXR1cm4gdm9pZCAwPT09ciYmKHI9bnVsbCksbChvLGZ1bmN0aW9uKGUsbixpKXt2YXIgYTtpZihBcnJheS5pc0FycmF5KGkpKXt2YXIgbz1NYXRoLm1pbihpLmxlbmd0aCx0LmRhdGEubGVuZ3RoKTtyJiYobz1NYXRoLm1pbihvLHIubGVuZ3RoKSksYT1bXTtmb3IodmFyIGw9MDtsPG87bCsrKWFbbF09cj9yW2xdOmx9ZWxzZSBhPXI/ci5zbGljZSgwKTpudWxsO2lmKG51bGw9PT1hKUFycmF5LmlzQXJyYXkoaSkmJihpPWlbMF0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShhKSl7aWYoIUFycmF5LmlzQXJyYXkoaSkpe3ZhciBjPWk7aT1bXTtmb3IodmFyIHU9MDt1PGEubGVuZ3RoO3UrKylpW3VdPWN9aS5sZW5ndGg9TWF0aC5taW4oYS5sZW5ndGgsaS5sZW5ndGgpfXMucHVzaCh7dHlwZTpcImRhdGFcIixwcm9wOmUsdHJhY2VzOmEsdmFsdWU6aX0pfSxcIlwiLDApLHN9ZnVuY3Rpb24gbCh0LGUscixuKXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBvPXRbYV07aWYoXCJfXCIhPT1hWzBdKXt2YXIgcz1yKyhuPjA/XCIuXCI6XCJcIikrYTtpLmlzUGxhaW5PYmplY3Qobyk/bChvLGUscyxuKzEpOmUocyxhLG8pfX0pfXIubWFuYWdlQ29tbWFuZE9ic2VydmVyPWZ1bmN0aW9uKHQsZSxuLG8pe3ZhciBzPXt9LGw9ITA7ZSYmZS5fY29tbWFuZE9ic2VydmVyJiYocz1lLl9jb21tYW5kT2JzZXJ2ZXIpLHMuY2FjaGV8fChzLmNhY2hlPXt9KSxzLmxvb2t1cFRhYmxlPXt9O3ZhciBjPXIuaGFzU2ltcGxlQVBJQ29tbWFuZEJpbmRpbmdzKHQsbixzLmxvb2t1cFRhYmxlKTtpZihlJiZlLl9jb21tYW5kT2JzZXJ2ZXIpe2lmKGMpcmV0dXJuIHM7aWYoZS5fY29tbWFuZE9ic2VydmVyLnJlbW92ZSlyZXR1cm4gZS5fY29tbWFuZE9ic2VydmVyLnJlbW92ZSgpLGUuX2NvbW1hbmRPYnNlcnZlcj1udWxsLHN9aWYoYyl7YSh0LGMscy5jYWNoZSkscy5jaGVjaz1mdW5jdGlvbigpe2lmKGwpe3ZhciBlPWEodCxjLHMuY2FjaGUpO3JldHVybiBlLmNoYW5nZWQmJm8mJnZvaWQgMCE9PXMubG9va3VwVGFibGVbZS52YWx1ZV0mJihzLmRpc2FibGUoKSxQcm9taXNlLnJlc29sdmUobyh7dmFsdWU6ZS52YWx1ZSx0eXBlOmMudHlwZSxwcm9wOmMucHJvcCx0cmFjZXM6Yy50cmFjZXMsaW5kZXg6cy5sb29rdXBUYWJsZVtlLnZhbHVlXX0pKS50aGVuKHMuZW5hYmxlLHMuZW5hYmxlKSksZS5jaGFuZ2VkfX07Zm9yKHZhciB1PVtcInBsb3RseV9yZWxheW91dFwiLFwicGxvdGx5X3JlZHJhd1wiLFwicGxvdGx5X3Jlc3R5bGVcIixcInBsb3RseV91cGRhdGVcIixcInBsb3RseV9hbmltYXRpbmdmcmFtZVwiLFwicGxvdGx5X2FmdGVycGxvdFwiXSxoPTA7aDx1Lmxlbmd0aDtoKyspdC5faW50ZXJuYWxPbih1W2hdLHMuY2hlY2spO3MucmVtb3ZlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx1Lmxlbmd0aDtlKyspdC5fcmVtb3ZlSW50ZXJuYWxMaXN0ZW5lcih1W2VdLHMuY2hlY2spfX1lbHNlIGkubG9nKFwiVW5hYmxlIHRvIGF1dG9tYXRpY2FsbHkgYmluZCBwbG90IHVwZGF0ZXMgdG8gQVBJIGNvbW1hbmRcIikscy5sb29rdXBUYWJsZT17fSxzLnJlbW92ZT1mdW5jdGlvbigpe307cmV0dXJuIHMuZGlzYWJsZT1mdW5jdGlvbigpe2w9ITF9LHMuZW5hYmxlPWZ1bmN0aW9uKCl7bD0hMH0sZSYmKGUuX2NvbW1hbmRPYnNlcnZlcj1zKSxzfSxyLmhhc1NpbXBsZUFQSUNvbW1hbmRCaW5kaW5ncz1mdW5jdGlvbih0LGUsbil7dmFyIGksYSxvPWUubGVuZ3RoO2ZvcihpPTA7aTxvO2krKyl7dmFyIHMsbD1lW2ldLGM9bC5tZXRob2QsdT1sLmFyZ3M7aWYoQXJyYXkuaXNBcnJheSh1KXx8KHU9W10pLCFjKXJldHVybiExO3ZhciBoPXIuY29tcHV0ZUFQSUNvbW1hbmRCaW5kaW5ncyh0LGMsdSk7aWYoMSE9PWgubGVuZ3RoKXJldHVybiExO2lmKGEpe2lmKChzPWhbMF0pLnR5cGUhPT1hLnR5cGUpcmV0dXJuITE7aWYocy5wcm9wIT09YS5wcm9wKXJldHVybiExO2lmKEFycmF5LmlzQXJyYXkoYS50cmFjZXMpKXtpZighQXJyYXkuaXNBcnJheShzLnRyYWNlcykpcmV0dXJuITE7cy50cmFjZXMuc29ydCgpO2Zvcih2YXIgZj0wO2Y8YS50cmFjZXMubGVuZ3RoO2YrKylpZihhLnRyYWNlc1tmXSE9PXMudHJhY2VzW2ZdKXJldHVybiExfWVsc2UgaWYocy5wcm9wIT09YS5wcm9wKXJldHVybiExfWVsc2UgYT1oWzBdLEFycmF5LmlzQXJyYXkoYS50cmFjZXMpJiZhLnRyYWNlcy5zb3J0KCk7dmFyIHA9KHM9aFswXSkudmFsdWU7aWYoQXJyYXkuaXNBcnJheShwKSl7aWYoMSE9PXAubGVuZ3RoKXJldHVybiExO3A9cFswXX1uJiYobltwXT1pKX1yZXR1cm4gYX0sci5leGVjdXRlQVBJQ29tbWFuZD1mdW5jdGlvbih0LGUscil7aWYoXCJza2lwXCI9PT1lKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTt2YXIgYT1uLmFwaU1ldGhvZFJlZ2lzdHJ5W2VdLG89W3RdO0FycmF5LmlzQXJyYXkocil8fChyPVtdKTtmb3IodmFyIHM9MDtzPHIubGVuZ3RoO3MrKylvLnB1c2gocltzXSk7cmV0dXJuIGEuYXBwbHkobnVsbCxvKS5jYXRjaChmdW5jdGlvbih0KXtyZXR1cm4gaS53YXJuKFwiQVBJIGNhbGwgdG8gUGxvdGx5LlwiK2UrXCIgcmVqZWN0ZWQuXCIsdCksUHJvbWlzZS5yZWplY3QodCl9KX0sci5jb21wdXRlQVBJQ29tbWFuZEJpbmRpbmdzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjtzd2l0Y2goQXJyYXkuaXNBcnJheShyKXx8KHI9W10pLGUpe2Nhc2VcInJlc3R5bGVcIjpuPXModCxyKTticmVhaztjYXNlXCJyZWxheW91dFwiOm49byh0LHIpO2JyZWFrO2Nhc2VcInVwZGF0ZVwiOm49cyh0LFtyWzBdLHJbMl1dKS5jb25jYXQobyh0LFtyWzFdXSkpO2JyZWFrO2Nhc2VcImFuaW1hdGVcIjpuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZVswXSkmJjE9PT1lWzBdLmxlbmd0aCYmLTEhPT1bXCJzdHJpbmdcIixcIm51bWJlclwiXS5pbmRleE9mKHR5cGVvZiBlWzBdWzBdKT9be3R5cGU6XCJsYXlvdXRcIixwcm9wOlwiX2N1cnJlbnRGcmFtZVwiLHZhbHVlOmVbMF1bMF0udG9TdHJpbmcoKX1dOltdfSgwLHIpO2JyZWFrO2RlZmF1bHQ6bj1bXX1yZXR1cm4gbn19LHtcIi4uL2xpYlwiOjcwMSxcIi4uL3JlZ2lzdHJ5XCI6ODI5fV0sNzc0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdDtyLmF0dHJpYnV0ZXM9ZnVuY3Rpb24odCxlKXtlPWV8fHt9O3ZhciByPXt2YWxUeXBlOlwiaW5mb19hcnJheVwiLGVkaXRUeXBlOih0PXR8fHt9KS5lZGl0VHlwZSxpdGVtczpbe3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxlZGl0VHlwZTp0LmVkaXRUeXBlfSx7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGVkaXRUeXBlOnQuZWRpdFR5cGV9XSxkZmx0OlswLDFdfSxpPSh0Lm5hbWUmJnQubmFtZSx0LnRyYWNlLGUuZGVzY3JpcHRpb24mJmUuZGVzY3JpcHRpb24se3g6bih7fSxyLHt9KSx5Om4oe30scix7fSksZWRpdFR5cGU6dC5lZGl0VHlwZX0pO3JldHVybiB0Lm5vR3JpZENlbGx8fChpLnJvdz17dmFsVHlwZTpcImludGVnZXJcIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6dC5lZGl0VHlwZX0saS5jb2x1bW49e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsbWluOjAsZGZsdDowLGVkaXRUeXBlOnQuZWRpdFR5cGV9KSxpfSxyLmRlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4mJm4ueHx8WzAsMV0sYT1uJiZuLnl8fFswLDFdLG89ZS5ncmlkO2lmKG8pe3ZhciBzPXIoXCJkb21haW4uY29sdW1uXCIpO3ZvaWQgMCE9PXMmJihzPG8uY29sdW1ucz9pPW8uX2RvbWFpbnMueFtzXTpkZWxldGUgdC5kb21haW4uY29sdW1uKTt2YXIgbD1yKFwiZG9tYWluLnJvd1wiKTt2b2lkIDAhPT1sJiYobDxvLnJvd3M/YT1vLl9kb21haW5zLnlbbF06ZGVsZXRlIHQuZG9tYWluLnJvdyl9cihcImRvbWFpbi54XCIsaSkscihcImRvbWFpbi55XCIsYSl9fSx7XCIuLi9saWIvZXh0ZW5kXCI6NjkxfV0sNzc1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZWRpdFR5cGUscj10LmNvbG9yRWRpdFR5cGU7dm9pZCAwPT09ciYmKHI9ZSk7dmFyIG49e2ZhbWlseTp7dmFsVHlwZTpcInN0cmluZ1wiLG5vQmxhbms6ITAsc3RyaWN0OiEwLGVkaXRUeXBlOmV9LHNpemU6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MSxlZGl0VHlwZTplfSxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6cn0sZWRpdFR5cGU6ZX07cmV0dXJuIHQuYXJyYXlPayYmKG4uZmFtaWx5LmFycmF5T2s9ITAsbi5zaXplLmFycmF5T2s9ITAsbi5jb2xvci5hcnJheU9rPSEwKSxufX0se31dLDc3NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17X2lzTGlua2VkVG9BcnJheTpcImZyYW1lc19lbnRyeVwiLGdyb3VwOnt2YWxUeXBlOlwic3RyaW5nXCJ9LG5hbWU6e3ZhbFR5cGU6XCJzdHJpbmdcIn0sdHJhY2VzOnt2YWxUeXBlOlwiYW55XCJ9LGJhc2VmcmFtZTp7dmFsVHlwZTpcInN0cmluZ1wifSxkYXRhOnt2YWxUeXBlOlwiYW55XCJ9LGxheW91dDp7dmFsVHlwZTpcImFueVwifX19LHt9XSw3Nzc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLnByb2pOYW1lcz17ZXF1aXJlY3Rhbmd1bGFyOlwiZXF1aXJlY3Rhbmd1bGFyXCIsbWVyY2F0b3I6XCJtZXJjYXRvclwiLG9ydGhvZ3JhcGhpYzpcIm9ydGhvZ3JhcGhpY1wiLFwibmF0dXJhbCBlYXJ0aFwiOlwibmF0dXJhbEVhcnRoXCIsa2F2cmF5c2tpeTc6XCJrYXZyYXlza2l5N1wiLG1pbGxlcjpcIm1pbGxlclwiLHJvYmluc29uOlwicm9iaW5zb25cIixlY2tlcnQ0OlwiZWNrZXJ0NFwiLFwiYXppbXV0aGFsIGVxdWFsIGFyZWFcIjpcImF6aW11dGhhbEVxdWFsQXJlYVwiLFwiYXppbXV0aGFsIGVxdWlkaXN0YW50XCI6XCJhemltdXRoYWxFcXVpZGlzdGFudFwiLFwiY29uaWMgZXF1YWwgYXJlYVwiOlwiY29uaWNFcXVhbEFyZWFcIixcImNvbmljIGNvbmZvcm1hbFwiOlwiY29uaWNDb25mb3JtYWxcIixcImNvbmljIGVxdWlkaXN0YW50XCI6XCJjb25pY0VxdWlkaXN0YW50XCIsZ25vbW9uaWM6XCJnbm9tb25pY1wiLHN0ZXJlb2dyYXBoaWM6XCJzdGVyZW9ncmFwaGljXCIsbW9sbHdlaWRlOlwibW9sbHdlaWRlXCIsaGFtbWVyOlwiaGFtbWVyXCIsXCJ0cmFuc3ZlcnNlIG1lcmNhdG9yXCI6XCJ0cmFuc3ZlcnNlTWVyY2F0b3JcIixcImFsYmVycyB1c2FcIjpcImFsYmVyc1VzYVwiLFwid2lua2VsIHRyaXBlbFwiOlwid2lua2VsM1wiLGFpdG9mZjpcImFpdG9mZlwiLHNpbnVzb2lkYWw6XCJzaW51c29pZGFsXCJ9LHIuYXhlc05hbWVzPVtcImxvbmF4aXNcIixcImxhdGF4aXNcIl0sci5sb25heGlzU3Bhbj17b3J0aG9ncmFwaGljOjE4MCxcImF6aW11dGhhbCBlcXVhbCBhcmVhXCI6MzYwLFwiYXppbXV0aGFsIGVxdWlkaXN0YW50XCI6MzYwLFwiY29uaWMgY29uZm9ybWFsXCI6MTgwLGdub21vbmljOjE2MCxzdGVyZW9ncmFwaGljOjE4MCxcInRyYW5zdmVyc2UgbWVyY2F0b3JcIjoxODAsXCIqXCI6MzYwfSxyLmxhdGF4aXNTcGFuPXtcImNvbmljIGNvbmZvcm1hbFwiOjE1MCxzdGVyZW9ncmFwaGljOjE3OS41LFwiKlwiOjE4MH0sci5zY29wZURlZmF1bHRzPXt3b3JsZDp7bG9uYXhpc1JhbmdlOlstMTgwLDE4MF0sbGF0YXhpc1JhbmdlOlstOTAsOTBdLHByb2pUeXBlOlwiZXF1aXJlY3Rhbmd1bGFyXCIscHJvalJvdGF0ZTpbMCwwLDBdfSx1c2E6e2xvbmF4aXNSYW5nZTpbLTE4MCwtNTBdLGxhdGF4aXNSYW5nZTpbMTUsODBdLHByb2pUeXBlOlwiYWxiZXJzIHVzYVwifSxldXJvcGU6e2xvbmF4aXNSYW5nZTpbLTMwLDYwXSxsYXRheGlzUmFuZ2U6WzMwLDg1XSxwcm9qVHlwZTpcImNvbmljIGNvbmZvcm1hbFwiLHByb2pSb3RhdGU6WzE1LDAsMF0scHJvalBhcmFsbGVsczpbMCw2MF19LGFzaWE6e2xvbmF4aXNSYW5nZTpbMjIsMTYwXSxsYXRheGlzUmFuZ2U6Wy0xNSw1NV0scHJvalR5cGU6XCJtZXJjYXRvclwiLHByb2pSb3RhdGU6WzAsMCwwXX0sYWZyaWNhOntsb25heGlzUmFuZ2U6Wy0zMCw2MF0sbGF0YXhpc1JhbmdlOlstNDAsNDBdLHByb2pUeXBlOlwibWVyY2F0b3JcIixwcm9qUm90YXRlOlswLDAsMF19LFwibm9ydGggYW1lcmljYVwiOntsb25heGlzUmFuZ2U6Wy0xODAsLTQ1XSxsYXRheGlzUmFuZ2U6WzUsODVdLHByb2pUeXBlOlwiY29uaWMgY29uZm9ybWFsXCIscHJvalJvdGF0ZTpbLTEwMCwwLDBdLHByb2pQYXJhbGxlbHM6WzI5LjUsNDUuNV19LFwic291dGggYW1lcmljYVwiOntsb25heGlzUmFuZ2U6Wy0xMDAsLTMwXSxsYXRheGlzUmFuZ2U6Wy02MCwxNV0scHJvalR5cGU6XCJtZXJjYXRvclwiLHByb2pSb3RhdGU6WzAsMCwwXX19LHIuY2xpcFBhZD0uMDAxLHIucHJlY2lzaW9uPS4xLHIubGFuZENvbG9yPVwiI0YwREM4MlwiLHIud2F0ZXJDb2xvcj1cIiMzMzk5RkZcIixyLmxvY2F0aW9ubW9kZVRvTGF5ZXI9e1wiSVNPLTNcIjpcImNvdW50cmllc1wiLFwiVVNBLXN0YXRlc1wiOlwic3VidW5pdHNcIixcImNvdW50cnkgbmFtZXNcIjpcImNvdW50cmllc1wifSxyLnNwaGVyZVNWRz17dHlwZTpcIlNwaGVyZVwifSxyLmZpbGxMYXllcnM9e29jZWFuOjEsbGFuZDoxLGxha2VzOjF9LHIubGluZUxheWVycz17c3VidW5pdHM6MSxjb3VudHJpZXM6MSxjb2FzdGxpbmVzOjEscml2ZXJzOjEsZnJhbWU6MX0sci5sYXllcnM9W1wiYmdcIixcIm9jZWFuXCIsXCJsYW5kXCIsXCJsYWtlc1wiLFwic3VidW5pdHNcIixcImNvdW50cmllc1wiLFwiY29hc3RsaW5lc1wiLFwicml2ZXJzXCIsXCJsYXRheGlzXCIsXCJsb25heGlzXCIsXCJmcmFtZVwiLFwiYmFja3Bsb3RcIixcImZyb250cGxvdFwiXSxyLmxheWVyc0ZvckNob3JvcGxldGg9W1wiYmdcIixcIm9jZWFuXCIsXCJsYW5kXCIsXCJzdWJ1bml0c1wiLFwiY291bnRyaWVzXCIsXCJjb2FzdGxpbmVzXCIsXCJsYXRheGlzXCIsXCJsb25heGlzXCIsXCJmcmFtZVwiLFwiYmFja3Bsb3RcIixcInJpdmVyc1wiLFwibGFrZXNcIixcImZyb250cGxvdFwiXSxyLmxheWVyTmFtZVRvQWRqZWN0aXZlPXtvY2VhbjpcIm9jZWFuXCIsbGFuZDpcImxhbmRcIixsYWtlczpcImxha2VcIixzdWJ1bml0czpcInN1YnVuaXRcIixjb3VudHJpZXM6XCJjb3VudHJ5XCIsY29hc3RsaW5lczpcImNvYXN0bGluZVwiLHJpdmVyczpcInJpdmVyXCIsZnJhbWU6XCJmcmFtZVwifX0se31dLDc3ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxhPXQoXCIuLi8uLi9saWJcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksbD10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxjPXQoXCIuLi9wbG90c1wiKSx1PXQoXCIuLi9jYXJ0ZXNpYW4vYXhlc1wiKSxoPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50XCIpLGY9dChcIi4uL2NhcnRlc2lhbi9zZWxlY3RcIikucHJlcFNlbGVjdCxwPXQoXCIuLi9jYXJ0ZXNpYW4vc2VsZWN0XCIpLnNlbGVjdE9uQ2xpY2ssZD10KFwiLi96b29tXCIpLGc9dChcIi4vY29uc3RhbnRzXCIpLHY9dChcIi4uLy4uL2xpYi90b3BvanNvbl91dGlsc1wiKSxtPXQoXCJ0b3BvanNvbi1jbGllbnRcIikuZmVhdHVyZTtmdW5jdGlvbiB5KHQpe3RoaXMuaWQ9dC5pZCx0aGlzLmdyYXBoRGl2PXQuZ3JhcGhEaXYsdGhpcy5jb250YWluZXI9dC5jb250YWluZXIsdGhpcy50b3BvanNvblVSTD10LnRvcG9qc29uVVJMLHRoaXMuaXNTdGF0aWM9dC5zdGF0aWNQbG90LHRoaXMudG9wb2pzb25OYW1lPW51bGwsdGhpcy50b3BvanNvbj1udWxsLHRoaXMucHJvamVjdGlvbj1udWxsLHRoaXMudmlld0luaXRpYWw9bnVsbCx0aGlzLmZpdFNjYWxlPW51bGwsdGhpcy5ib3VuZHM9bnVsbCx0aGlzLm1pZFB0PW51bGwsdGhpcy5oYXNDaG9yb3BsZXRoPSExLHRoaXMudHJhY2VIYXNoPXt9LHRoaXMubGF5ZXJzPXt9LHRoaXMuYmFzZVBhdGhzPXt9LHRoaXMuZGF0YVBhdGhzPXt9LHRoaXMuZGF0YVBvaW50cz17fSx0aGlzLmNsaXBEZWY9bnVsbCx0aGlzLmNsaXBSZWN0PW51bGwsdGhpcy5iZ1JlY3Q9bnVsbCx0aGlzLm1ha2VGcmFtZXdvcmsoKX10KFwiLi9wcm9qZWN0aW9uc1wiKShuKTt2YXIgeD15LnByb3RvdHlwZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB5KHQpfSx4LnBsb3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMsaT1lW3RoaXMuaWRdLGE9di5nZXRUb3BvanNvbk5hbWUoaSk7bnVsbD09PW4udG9wb2pzb258fGEhPT1uLnRvcG9qc29uTmFtZT8obi50b3BvanNvbk5hbWU9YSx2b2lkIDA9PT1QbG90bHlHZW9Bc3NldHMudG9wb2pzb25bbi50b3BvanNvbk5hbWVdP3IucHVzaChuLmZldGNoVG9wb2pzb24oKS50aGVuKGZ1bmN0aW9uKHIpe1Bsb3RseUdlb0Fzc2V0cy50b3BvanNvbltuLnRvcG9qc29uTmFtZV09cixuLnRvcG9qc29uPXIsbi51cGRhdGUodCxlKX0pKToobi50b3BvanNvbj1QbG90bHlHZW9Bc3NldHMudG9wb2pzb25bbi50b3BvanNvbk5hbWVdLG4udXBkYXRlKHQsZSkpKTpuLnVwZGF0ZSh0LGUpfSx4LmZldGNoVG9wb2pzb249ZnVuY3Rpb24oKXt2YXIgdD12LmdldFRvcG9qc29uUGF0aCh0aGlzLnRvcG9qc29uVVJMLHRoaXMudG9wb2pzb25OYW1lKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSxyKXtuLmpzb24odCxmdW5jdGlvbihuLGkpe2lmKG4pcmV0dXJuIDQwND09PW4uc3RhdHVzP3IobmV3IEVycm9yKFtcInBsb3RseS5qcyBjb3VsZCBub3QgZmluZCB0b3BvanNvbiBmaWxlIGF0XCIsdCxcIi5cIixcIk1ha2Ugc3VyZSB0aGUgKnRvcG9qc29uVVJMKiBwbG90IGNvbmZpZyBvcHRpb25cIixcImlzIHNldCBwcm9wZXJseS5cIl0uam9pbihcIiBcIikpKTpyKG5ldyBFcnJvcihbXCJ1bmV4cGVjdGVkIGVycm9yIHdoaWxlIGZldGNoaW5nIHRvcG9qc29uIGZpbGUgYXRcIix0XS5qb2luKFwiIFwiKSkpO2UoaSl9KX0pfSx4LnVwZGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPWVbdGhpcy5pZF07aWYoIXRoaXMudXBkYXRlUHJvamVjdGlvbihlLHIpKXt0aGlzLmhhc0Nob3JvcGxldGg9ITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspaWYoXCJjaG9yb3BsZXRoXCI9PT10W25dWzBdLnRyYWNlLnR5cGUpe3RoaXMuaGFzQ2hvcm9wbGV0aD0hMDticmVha310aGlzLnZpZXdJbml0aWFsfHx0aGlzLnNhdmVWaWV3SW5pdGlhbChyKSx0aGlzLnVwZGF0ZUJhc2VMYXllcnMoZSxyKSx0aGlzLnVwZGF0ZURpbXMoZSxyKSx0aGlzLnVwZGF0ZUZ4KGUsciksYy5nZW5lcmFsVXBkYXRlUGVyVHJhY2VNb2R1bGUodGhpcy5ncmFwaERpdix0aGlzLHQscik7dmFyIGk9dGhpcy5sYXllcnMuZnJvbnRwbG90LnNlbGVjdChcIi5zY2F0dGVybGF5ZXJcIik7dGhpcy5kYXRhUG9pbnRzLnBvaW50PWkuc2VsZWN0QWxsKFwiLnBvaW50XCIpLHRoaXMuZGF0YVBvaW50cy50ZXh0PWkuc2VsZWN0QWxsKFwidGV4dFwiKSx0aGlzLmRhdGFQYXRocy5saW5lPWkuc2VsZWN0QWxsKFwiLmpzLWxpbmVcIik7dmFyIGE9dGhpcy5sYXllcnMuYmFja3Bsb3Quc2VsZWN0KFwiLmNob3JvcGxldGhsYXllclwiKTt0aGlzLmRhdGFQYXRocy5jaG9yb3BsZXRoPWEuc2VsZWN0QWxsKFwicGF0aFwiKSx0aGlzLnJlbmRlcigpfX0seC51cGRhdGVQcm9qZWN0aW9uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fc2l6ZSxvPWUuZG9tYWluLHM9ZS5wcm9qZWN0aW9uLGw9cy5yb3RhdGlvbnx8e30sYz1lLmNlbnRlcnx8e30sdT10aGlzLnByb2plY3Rpb249ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQucHJvamVjdGlvbi50eXBlLHI9bi5nZW9bZy5wcm9qTmFtZXNbZV1dKCksaT10Ll9pc0NsaXBwZWQ/Zy5sb25heGlzU3BhbltlXS8yOm51bGwsYT1bXCJjZW50ZXJcIixcInJvdGF0ZVwiLFwicGFyYWxsZWxzXCIsXCJjbGlwRXh0ZW50XCJdLG89ZnVuY3Rpb24odCl7cmV0dXJuIHQ/cjpbXX0scz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdO1wiZnVuY3Rpb25cIiE9dHlwZW9mIHJbbF0mJihyW2xdPW8pfXIuaXNMb25MYXRPdmVyRWRnZXM9ZnVuY3Rpb24odCl7aWYobnVsbD09PXIodCkpcmV0dXJuITA7aWYoaSl7dmFyIGU9ci5yb3RhdGUoKTtyZXR1cm4gbi5nZW8uZGlzdGFuY2UodCxbLWVbMF0sLWVbMV1dKT5pKk1hdGguUEkvMTgwfXJldHVybiExfSxyLmdldFBhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gbi5nZW8ucGF0aCgpLnByb2plY3Rpb24ocil9LHIuZ2V0Qm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiByLmdldFBhdGgoKS5ib3VuZHModCl9LHIuZml0RXh0ZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dFsxXVswXS10WzBdWzBdLGk9dFsxXVsxXS10WzBdWzFdLGE9ci5jbGlwRXh0ZW50JiZyLmNsaXBFeHRlbnQoKTtyLnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxhJiZyLmNsaXBFeHRlbnQobnVsbCk7dmFyIG89ci5nZXRCb3VuZHMoZSkscz1NYXRoLm1pbihuLyhvWzFdWzBdLW9bMF1bMF0pLGkvKG9bMV1bMV0tb1swXVsxXSkpLGw9K3RbMF1bMF0rKG4tcyoob1sxXVswXStvWzBdWzBdKSkvMixjPSt0WzBdWzFdKyhpLXMqKG9bMV1bMV0rb1swXVsxXSkpLzI7cmV0dXJuIGEmJnIuY2xpcEV4dGVudChhKSxyLnNjYWxlKDE1MCpzKS50cmFuc2xhdGUoW2wsY10pfSxyLnByZWNpc2lvbihnLnByZWNpc2lvbiksaSYmci5jbGlwQW5nbGUoaS1nLmNsaXBQYWQpO3JldHVybiByfShlKTt1LmNlbnRlcihbYy5sb24tbC5sb24sYy5sYXQtbC5sYXRdKS5yb3RhdGUoWy1sLmxvbiwtbC5sYXQsbC5yb2xsXSkucGFyYWxsZWxzKHMucGFyYWxsZWxzKTt2YXIgaD1bW3IubCtyLncqby54WzBdLHIudCtyLmgqKDEtby55WzFdKV0sW3IubCtyLncqby54WzFdLHIudCtyLmgqKDEtby55WzBdKV1dLGY9ZS5sb25heGlzLHA9ZS5sYXRheGlzLGQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1nLmNsaXBQYWQsbj10WzBdK3IsaT10WzFdLXIsYT1lWzBdK3Isbz1lWzFdLXI7bj4wJiZpPDAmJihpKz0zNjApO3ZhciBzPShpLW4pLzQ7cmV0dXJue3R5cGU6XCJQb2x5Z29uXCIsY29vcmRpbmF0ZXM6W1tbbixhXSxbbixvXSxbbitzLG9dLFtuKzIqcyxvXSxbbiszKnMsb10sW2ksb10sW2ksYV0sW2ktcyxhXSxbaS0yKnMsYV0sW2ktMypzLGFdLFtuLGFdXV19fShmLnJhbmdlLHAucmFuZ2UpO3UuZml0RXh0ZW50KGgsZCk7dmFyIHY9dGhpcy5ib3VuZHM9dS5nZXRCb3VuZHMoZCksbT10aGlzLmZpdFNjYWxlPXUuc2NhbGUoKSx5PXUudHJhbnNsYXRlKCk7aWYoIWlzRmluaXRlKHZbMF1bMF0pfHwhaXNGaW5pdGUodlswXVsxXSl8fCFpc0Zpbml0ZSh2WzFdWzBdKXx8IWlzRmluaXRlKHZbMV1bMV0pfHxpc05hTih5WzBdKXx8aXNOYU4oeVswXSkpe2Zvcih2YXIgeD10aGlzLmdyYXBoRGl2LGI9W1wicHJvamVjdGlvbi5yb3RhdGlvblwiLFwiY2VudGVyXCIsXCJsb25heGlzLnJhbmdlXCIsXCJsYXRheGlzLnJhbmdlXCJdLF89XCJJbnZhbGlkIGdlbyBzZXR0aW5ncywgcmVsYXlvdXQnaW5nIHRvIGRlZmF1bHQgdmlldy5cIix3PXt9LGs9MDtrPGIubGVuZ3RoO2srKyl3W3RoaXMuaWQrXCIuXCIrYltrXV09bnVsbDtyZXR1cm4gdGhpcy52aWV3SW5pdGlhbD1udWxsLGEud2FybihfKSx4Ll9wcm9taXNlcy5wdXNoKGkuY2FsbChcInJlbGF5b3V0XCIseCx3KSksX312YXIgQT10aGlzLm1pZFB0PVsodlswXVswXSt2WzFdWzBdKS8yLCh2WzBdWzFdK3ZbMV1bMV0pLzJdO2lmKHUuc2NhbGUocy5zY2FsZSptKS50cmFuc2xhdGUoW3lbMF0rKEFbMF0teVswXSkseVsxXSsoQVsxXS15WzFdKV0pLmNsaXBFeHRlbnQodiksZS5faXNBbGJlcnNVc2Epe3ZhciBUPXUoW2MubG9uLGMubGF0XSksTT11LnRyYW5zbGF0ZSgpO3UudHJhbnNsYXRlKFtNWzBdLShUWzBdLU1bMF0pLE1bMV0tKFRbMV0tTVsxXSldKX19LHgudXBkYXRlQmFzZUxheWVycz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsaT1yLnRvcG9qc29uLGE9ci5sYXllcnMsbD1yLmJhc2VQYXRocztmdW5jdGlvbiBjKHQpe3JldHVyblwibG9uYXhpc1wiPT09dHx8XCJsYXRheGlzXCI9PT10fWZ1bmN0aW9uIGgodCl7cmV0dXJuIEJvb2xlYW4oZy5saW5lTGF5ZXJzW3RdKX1mdW5jdGlvbiBmKHQpe3JldHVybiBCb29sZWFuKGcuZmlsbExheWVyc1t0XSl9dmFyIHA9KHRoaXMuaGFzQ2hvcm9wbGV0aD9nLmxheWVyc0ZvckNob3JvcGxldGg6Zy5sYXllcnMpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gaCh0KXx8Zih0KT9lW1wic2hvd1wiK3RdOiFjKHQpfHxlW3RdLnNob3dncmlkfSksZD1yLmZyYW1ld29yay5zZWxlY3RBbGwoXCIubGF5ZXJcIikuZGF0YShwLFN0cmluZyk7ZC5leGl0KCkuZWFjaChmdW5jdGlvbih0KXtkZWxldGUgYVt0XSxkZWxldGUgbFt0XSxuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKX0pLGQuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLGZ1bmN0aW9uKHQpe3JldHVyblwibGF5ZXIgXCIrdH0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9YVt0XT1uLnNlbGVjdCh0aGlzKTtcImJnXCI9PT10P3IuYmdSZWN0PWUuYXBwZW5kKFwicmVjdFwiKS5zdHlsZShcInBvaW50ZXItZXZlbnRzXCIsXCJhbGxcIik6Yyh0KT9sW3RdPWUuYXBwZW5kKFwicGF0aFwiKS5zdHlsZShcImZpbGxcIixcIm5vbmVcIik6XCJiYWNrcGxvdFwiPT09dD9lLmFwcGVuZChcImdcIikuY2xhc3NlZChcImNob3JvcGxldGhsYXllclwiLCEwKTpcImZyb250cGxvdFwiPT09dD9lLmFwcGVuZChcImdcIikuY2xhc3NlZChcInNjYXR0ZXJsYXllclwiLCEwKTpoKHQpP2xbdF09ZS5hcHBlbmQoXCJwYXRoXCIpLnN0eWxlKFwiZmlsbFwiLFwibm9uZVwiKS5zdHlsZShcInN0cm9rZS1taXRlcmxpbWl0XCIsMik6Zih0KSYmKGxbdF09ZS5hcHBlbmQoXCJwYXRoXCIpLnN0eWxlKFwic3Ryb2tlXCIsXCJub25lXCIpKX0pLGQub3JkZXIoKSxkLmVhY2goZnVuY3Rpb24ocil7dmFyIG49bFtyXSxhPWcubGF5ZXJOYW1lVG9BZGplY3RpdmVbcl07XCJmcmFtZVwiPT09cj9uLmRhdHVtKGcuc3BoZXJlU1ZHKTpoKHIpfHxmKHIpP24uZGF0dW0obShpLGkub2JqZWN0c1tyXSkpOmMocikmJm4uZGF0dW0oZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvPWVbdF0scz1nLnNjb3BlRGVmYXVsdHNbZS5zY29wZV07XCJsb25heGlzXCI9PT10PyhuPXMubG9uYXhpc1JhbmdlLGk9cy5sYXRheGlzUmFuZ2UsYT1mdW5jdGlvbih0LGUpe3JldHVyblt0LGVdfSk6XCJsYXRheGlzXCI9PT10JiYobj1zLmxhdGF4aXNSYW5nZSxpPXMubG9uYXhpc1JhbmdlLGE9ZnVuY3Rpb24odCxlKXtyZXR1cm5bZSx0XX0pO3ZhciBsPXt0eXBlOlwibGluZWFyXCIscmFuZ2U6W25bMF0sblsxXS0xZS02XSx0aWNrMDpvLnRpY2swLGR0aWNrOm8uZHRpY2t9O3Uuc2V0Q29udmVydChsLHIpO3ZhciBjPXUuY2FsY1RpY2tzKGwpO2UuaXNTY29wZWR8fFwibG9uYXhpc1wiIT09dHx8Yy5wb3AoKTtmb3IodmFyIGg9Yy5sZW5ndGgsZj1uZXcgQXJyYXkoaCkscD0wO3A8aDtwKyspZm9yKHZhciBkPWNbcF0ueCx2PWZbcF09W10sbT1pWzBdO208aVsxXSsyLjU7bSs9Mi41KXYucHVzaChhKGQsbSkpO3JldHVybnt0eXBlOlwiTXVsdGlMaW5lU3RyaW5nXCIsY29vcmRpbmF0ZXM6Zn19KHIsZSx0KSkuY2FsbChvLnN0cm9rZSxlW3JdLmdyaWRjb2xvcikuY2FsbChzLmRhc2hMaW5lLFwiXCIsZVtyXS5ncmlkd2lkdGgpLGgocik/bi5jYWxsKG8uc3Ryb2tlLGVbYStcImNvbG9yXCJdKS5jYWxsKHMuZGFzaExpbmUsXCJcIixlW2ErXCJ3aWR0aFwiXSk6ZihyKSYmbi5jYWxsKG8uZmlsbCxlW2ErXCJjb2xvclwiXSl9KX0seC51cGRhdGVEaW1zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5ib3VuZHMsbj0oZS5mcmFtZXdpZHRofHwwKS8yLGk9clswXVswXS1uLGE9clswXVsxXS1uLGw9clsxXVswXS1pK24sYz1yWzFdWzFdLWErbjtzLnNldFJlY3QodGhpcy5jbGlwUmVjdCxpLGEsbCxjKSx0aGlzLmJnUmVjdC5jYWxsKHMuc2V0UmVjdCxpLGEsbCxjKS5jYWxsKG8uZmlsbCxlLmJnY29sb3IpLHRoaXMueGF4aXMuX29mZnNldD1pLHRoaXMueGF4aXMuX2xlbmd0aD1sLHRoaXMueWF4aXMuX29mZnNldD1hLHRoaXMueWF4aXMuX2xlbmd0aD1jfSx4LnVwZGF0ZUZ4PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxhPXIuZ3JhcGhEaXYsbz1yLmJnUmVjdCxzPXQuZHJhZ21vZGUsYz10LmNsaWNrbW9kZTtpZighci5pc1N0YXRpYyl7dmFyIHU7XCJzZWxlY3RcIj09PXM/dT1mdW5jdGlvbih0LGUpeyh0LnJhbmdlPXt9KVtyLmlkXT1bdihbZS54bWluLGUueW1pbl0pLHYoW2UueG1heCxlLnltYXhdKV19OlwibGFzc29cIj09PXMmJih1PWZ1bmN0aW9uKHQsZSxuKXsodC5sYXNzb1BvaW50cz17fSlbci5pZF09bi5maWx0ZXJlZC5tYXAodil9KTt2YXIgZz17ZWxlbWVudDpyLmJnUmVjdC5ub2RlKCksZ2Q6YSxwbG90aW5mbzp7aWQ6ci5pZCx4YXhpczpyLnhheGlzLHlheGlzOnIueWF4aXMsZmlsbFJhbmdlSXRlbXM6dX0seGF4ZXM6W3IueGF4aXNdLHlheGVzOltyLnlheGlzXSxzdWJwbG90OnIuaWQsY2xpY2tGbjpmdW5jdGlvbihlKXsyPT09ZSYmdC5fem9vbWxheWVyLnNlbGVjdEFsbChcIi5zZWxlY3Qtb3V0bGluZVwiKS5yZW1vdmUoKX19O1wicGFuXCI9PT1zPyhvLm5vZGUoKS5vbm1vdXNlZG93bj1udWxsLG8uY2FsbChkKHIsZSkpLG8ub24oXCJkYmxjbGljay56b29tXCIsZnVuY3Rpb24oKXt2YXIgdD1yLnZpZXdJbml0aWFsLGU9e307Zm9yKHZhciBuIGluIHQpZVtyLmlkK1wiLlwiK25dPXRbbl07aS5jYWxsKFwiX2d1aVJlbGF5b3V0XCIsYSxlKSxhLmVtaXQoXCJwbG90bHlfZG91YmxlY2xpY2tcIixudWxsKX0pLGEuX2NvbnRleHQuX3Njcm9sbFpvb20uZ2VvfHxvLm9uKFwid2hlZWwuem9vbVwiLG51bGwpKTpcInNlbGVjdFwiIT09cyYmXCJsYXNzb1wiIT09c3x8KG8ub24oXCIuem9vbVwiLG51bGwpLGcucHJlcEZuPWZ1bmN0aW9uKHQsZSxyKXtmKHQsZSxyLGcscyl9LGguaW5pdChnKSksby5vbihcIm1vdXNlbW92ZVwiLGZ1bmN0aW9uKCl7dmFyIHQ9ci5wcm9qZWN0aW9uLmludmVydChuLm1vdXNlKHRoaXMpKTtpZighdHx8aXNOYU4odFswXSl8fGlzTmFOKHRbMV0pKXJldHVybiBoLnVuaG92ZXIoYSxuLmV2ZW50KTtyLnhheGlzLnAyYz1mdW5jdGlvbigpe3JldHVybiB0WzBdfSxyLnlheGlzLnAyYz1mdW5jdGlvbigpe3JldHVybiB0WzFdfSxsLmhvdmVyKGEsbi5ldmVudCxyLmlkKX0pLG8ub24oXCJtb3VzZW91dFwiLGZ1bmN0aW9uKCl7YS5fZHJhZ2dpbmd8fGgudW5ob3ZlcihhLG4uZXZlbnQpfSksby5vbihcImNsaWNrXCIsZnVuY3Rpb24oKXtcInNlbGVjdFwiIT09cyYmXCJsYXNzb1wiIT09cyYmKGMuaW5kZXhPZihcInNlbGVjdFwiKT4tMSYmcChuLmV2ZW50LGEsW3IueGF4aXNdLFtyLnlheGlzXSxyLmlkLGcpLGMuaW5kZXhPZihcImV2ZW50XCIpPi0xJiZsLmNsaWNrKGEsbi5ldmVudCkpfSl9ZnVuY3Rpb24gdih0KXtyZXR1cm4gci5wcm9qZWN0aW9uLmludmVydChbdFswXStyLnhheGlzLl9vZmZzZXQsdFsxXStyLnlheGlzLl9vZmZzZXRdKX19LHgubWFrZUZyYW1ld29yaz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10LmdyYXBoRGl2LHI9ZS5fZnVsbExheW91dCxpPVwiY2xpcFwiK3IuX3VpZCt0LmlkO3QuY2xpcERlZj1yLl9jbGlwcy5hcHBlbmQoXCJjbGlwUGF0aFwiKS5hdHRyKFwiaWRcIixpKSx0LmNsaXBSZWN0PXQuY2xpcERlZi5hcHBlbmQoXCJyZWN0XCIpLHQuZnJhbWV3b3JrPW4uc2VsZWN0KHQuY29udGFpbmVyKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLFwiZ2VvIFwiK3QuaWQpLmNhbGwocy5zZXRDbGlwVXJsLGksZSksdC5wcm9qZWN0PWZ1bmN0aW9uKGUpe3ZhciByPXQucHJvamVjdGlvbihlKTtyZXR1cm4gcj9bclswXS10LnhheGlzLl9vZmZzZXQsclsxXS10LnlheGlzLl9vZmZzZXRdOltudWxsLG51bGxdfSx0LnhheGlzPXtfaWQ6XCJ4XCIsYzJwOmZ1bmN0aW9uKGUpe3JldHVybiB0LnByb2plY3QoZSlbMF19fSx0LnlheGlzPXtfaWQ6XCJ5XCIsYzJwOmZ1bmN0aW9uKGUpe3JldHVybiB0LnByb2plY3QoZSlbMV19fSx0Lm1vY2tBeGlzPXt0eXBlOlwibGluZWFyXCIsc2hvd2V4cG9uZW50OlwiYWxsXCIsZXhwb25lbnRmb3JtYXQ6XCJCXCJ9LHUuc2V0Q29udmVydCh0Lm1vY2tBeGlzLHIpfSx4LnNhdmVWaWV3SW5pdGlhbD1mdW5jdGlvbih0KXt2YXIgZT10LmNlbnRlcnx8e30scj10LnByb2plY3Rpb24sbj1yLnJvdGF0aW9ufHx7fTt0Ll9pc1Njb3BlZD90aGlzLnZpZXdJbml0aWFsPXtcImNlbnRlci5sb25cIjplLmxvbixcImNlbnRlci5sYXRcIjplLmxhdCxcInByb2plY3Rpb24uc2NhbGVcIjpyLnNjYWxlfTp0Ll9pc0NsaXBwZWQ/dGhpcy52aWV3SW5pdGlhbD17XCJwcm9qZWN0aW9uLnNjYWxlXCI6ci5zY2FsZSxcInByb2plY3Rpb24ucm90YXRpb24ubG9uXCI6bi5sb24sXCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxhdFwiOm4ubGF0fTp0aGlzLnZpZXdJbml0aWFsPXtcImNlbnRlci5sb25cIjplLmxvbixcImNlbnRlci5sYXRcIjplLmxhdCxcInByb2plY3Rpb24uc2NhbGVcIjpyLnNjYWxlLFwicHJvamVjdGlvbi5yb3RhdGlvbi5sb25cIjpuLmxvbn19LHgucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLnByb2plY3Rpb24scj1lLmdldFBhdGgoKTtmdW5jdGlvbiBuKHQpe3ZhciByPWUodC5sb25sYXQpO3JldHVybiByP1widHJhbnNsYXRlKFwiK3JbMF0rXCIsXCIrclsxXStcIilcIjpudWxsfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGUuaXNMb25MYXRPdmVyRWRnZXModC5sb25sYXQpP1wibm9uZVwiOm51bGx9Zm9yKHQgaW4gdGhpcy5iYXNlUGF0aHMpdGhpcy5iYXNlUGF0aHNbdF0uYXR0cihcImRcIixyKTtmb3IodCBpbiB0aGlzLmRhdGFQYXRocyl0aGlzLmRhdGFQYXRoc1t0XS5hdHRyKFwiZFwiLGZ1bmN0aW9uKHQpe3JldHVybiByKHQuZ2VvanNvbil9KTtmb3IodCBpbiB0aGlzLmRhdGFQb2ludHMpdGhpcy5kYXRhUG9pbnRzW3RdLmF0dHIoXCJkaXNwbGF5XCIsaSkuYXR0cihcInRyYW5zZm9ybVwiLG4pfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnRcIjo1OTYsXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9jb21wb25lbnRzL2Z4XCI6NjE3LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3RvcG9qc29uX3V0aWxzXCI6NzI4LFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL2NhcnRlc2lhbi9zZWxlY3RcIjo3NjYsXCIuLi9wbG90c1wiOjgxMCxcIi4vY29uc3RhbnRzXCI6Nzc3LFwiLi9wcm9qZWN0aW9uc1wiOjc4MixcIi4vem9vbVwiOjc4MyxkMzoxNTUsXCJ0b3BvanNvbi1jbGllbnRcIjo1MjV9XSw3Nzk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvZ2V0X2RhdGFcIikuZ2V0U3VicGxvdENhbGNEYXRhLGk9dChcIi4uLy4uL2xpYlwiKS5jb3VudGVyUmVnZXgsYT10KFwiLi9nZW9cIiksbz1cImdlb1wiLHM9aShvKSxsPXt9O2xbb109e3ZhbFR5cGU6XCJzdWJwbG90aWRcIixkZmx0Om8sZWRpdFR5cGU6XCJjYWxjXCJ9LGUuZXhwb3J0cz17YXR0cjpvLG5hbWU6byxpZFJvb3Q6byxpZFJlZ2V4OnMsYXR0clJlZ2V4OnMsYXR0cmlidXRlczpsLGxheW91dEF0dHJpYnV0ZXM6dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dChcIi4vbGF5b3V0X2RlZmF1bHRzXCIpLHBsb3Q6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsaT1lLl9zdWJwbG90c1tvXTt2b2lkIDA9PT13aW5kb3cuUGxvdGx5R2VvQXNzZXRzJiYod2luZG93LlBsb3RseUdlb0Fzc2V0cz17dG9wb2pzb246e319KTtmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXSxjPW4ocixvLGwpLHU9ZVtsXS5fc3VicGxvdDt1fHwodT1hKHtpZDpsLGdyYXBoRGl2OnQsY29udGFpbmVyOmUuX2dlb2xheWVyLm5vZGUoKSx0b3BvanNvblVSTDp0Ll9jb250ZXh0LnRvcG9qc29uVVJMLHN0YXRpY1Bsb3Q6dC5fY29udGV4dC5zdGF0aWNQbG90fSksZVtsXS5fc3VicGxvdD11KSx1LnBsb3QoYyxlLHQuX3Byb21pc2VzKX19LHVwZGF0ZUZ4OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fc3VicGxvdHNbb10sbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1lW3Jbbl1dO2kuX3N1YnBsb3QudXBkYXRlRngoZSxpKX19LGNsZWFuOmZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1uLl9zdWJwbG90c1tvXXx8W10sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgcz1pW2FdLGw9bltzXS5fc3VicGxvdDshZVtzXSYmbCYmKGwuZnJhbWV3b3JrLnJlbW92ZSgpLGwuY2xpcERlZi5yZW1vdmUoKSl9fX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCI6Nzg0LFwiLi9nZW9cIjo3NzgsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6NzgwLFwiLi9sYXlvdXRfZGVmYXVsdHNcIjo3ODF9XSw3ODA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uL2RvbWFpblwiKS5hdHRyaWJ1dGVzLGE9dChcIi4vY29uc3RhbnRzXCIpLG89dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGwscz17cmFuZ2U6e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsaXRlbXM6W3t2YWxUeXBlOlwibnVtYmVyXCJ9LHt2YWxUeXBlOlwibnVtYmVyXCJ9XX0sc2hvd2dyaWQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sdGljazA6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjB9LGR0aWNrOnt2YWxUeXBlOlwibnVtYmVyXCJ9LGdyaWRjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDpuLmxpZ2h0TGluZX0sZ3JpZHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxfX07KGUuZXhwb3J0cz1vKHtkb21haW46aSh7bmFtZTpcImdlb1wifSx7fSkscmVzb2x1dGlvbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6WzExMCw1MF0sZGZsdDoxMTAsY29lcmNlTnVtYmVyOiEwfSxzY29wZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6T2JqZWN0LmtleXMoYS5zY29wZURlZmF1bHRzKSxkZmx0Olwid29ybGRcIn0scHJvamVjdGlvbjp7dHlwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6T2JqZWN0LmtleXMoYS5wcm9qTmFtZXMpfSxyb3RhdGlvbjp7bG9uOnt2YWxUeXBlOlwibnVtYmVyXCJ9LGxhdDp7dmFsVHlwZTpcIm51bWJlclwifSxyb2xsOnt2YWxUeXBlOlwibnVtYmVyXCJ9fSxwYXJhbGxlbHM6e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsaXRlbXM6W3t2YWxUeXBlOlwibnVtYmVyXCJ9LHt2YWxUeXBlOlwibnVtYmVyXCJ9XX0sc2NhbGU6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjF9fSxjZW50ZXI6e2xvbjp7dmFsVHlwZTpcIm51bWJlclwifSxsYXQ6e3ZhbFR5cGU6XCJudW1iZXJcIn19LHNob3djb2FzdGxpbmVzOnt2YWxUeXBlOlwiYm9vbGVhblwifSxjb2FzdGxpbmVjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDpuLmRlZmF1bHRMaW5lfSxjb2FzdGxpbmV3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MX0sc2hvd2xhbmQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sbGFuZGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmEubGFuZENvbG9yfSxzaG93b2NlYW46e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sb2NlYW5jb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDphLndhdGVyQ29sb3J9LHNob3dsYWtlczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxsYWtlY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6YS53YXRlckNvbG9yfSxzaG93cml2ZXJzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LHJpdmVyY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6YS53YXRlckNvbG9yfSxyaXZlcndpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxfSxzaG93Y291bnRyaWVzOnt2YWxUeXBlOlwiYm9vbGVhblwifSxjb3VudHJ5Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6bi5kZWZhdWx0TGluZX0sY291bnRyeXdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxfSxzaG93c3VidW5pdHM6e3ZhbFR5cGU6XCJib29sZWFuXCJ9LHN1YnVuaXRjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDpuLmRlZmF1bHRMaW5lfSxzdWJ1bml0d2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjF9LHNob3dmcmFtZTp7dmFsVHlwZTpcImJvb2xlYW5cIn0sZnJhbWVjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDpuLmRlZmF1bHRMaW5lfSxmcmFtZXdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxfSxiZ2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0Om4uYmFja2dyb3VuZH0sbG9uYXhpczpzLGxhdGF4aXM6c30sXCJwbG90XCIsXCJmcm9tLXJvb3RcIikpLnVpcmV2aXNpb249e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcIm5vbmVcIn19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiOjU3NyxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi9kb21haW5cIjo3NzQsXCIuL2NvbnN0YW50c1wiOjc3N31dLDc4MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9zdWJwbG90X2RlZmF1bHRzXCIpLGk9dChcIi4vY29uc3RhbnRzXCIpLGE9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksbz1pLmF4ZXNOYW1lcztmdW5jdGlvbiBzKHQsZSxyKXt2YXIgbj1yKFwicmVzb2x1dGlvblwiKSxhPXIoXCJzY29wZVwiKSxzPWkuc2NvcGVEZWZhdWx0c1thXSxsPXIoXCJwcm9qZWN0aW9uLnR5cGVcIixzLnByb2pUeXBlKSxjPWUuX2lzQWxiZXJzVXNhPVwiYWxiZXJzIHVzYVwiPT09bDtjJiYoYT1lLnNjb3BlPVwidXNhXCIpO3ZhciB1PWUuX2lzU2NvcGVkPVwid29ybGRcIiE9PWEsaD1lLl9pc0NvbmljPS0xIT09bC5pbmRleE9mKFwiY29uaWNcIik7ZS5faXNDbGlwcGVkPSEhaS5sb25heGlzU3BhbltsXTtmb3IodmFyIGY9MDtmPG8ubGVuZ3RoO2YrKyl7dmFyIHAsZD1vW2ZdLGc9WzMwLDEwXVtmXTtpZih1KXA9c1tkK1wiUmFuZ2VcIl07ZWxzZXt2YXIgdj1pW2QrXCJTcGFuXCJdLG09KHZbbF18fHZbXCIqXCJdKS8yLHk9cihcInByb2plY3Rpb24ucm90YXRpb24uXCIrZC5zdWJzdHIoMCwzKSxzLnByb2pSb3RhdGVbZl0pO3A9W3ktbSx5K21dfXIoZCtcIi5yYW5nZVwiLHApLHIoZCtcIi50aWNrMFwiKSxyKGQrXCIuZHRpY2tcIixnKSxyKGQrXCIuc2hvd2dyaWRcIikmJihyKGQrXCIuZ3JpZGNvbG9yXCIpLHIoZCtcIi5ncmlkd2lkdGhcIikpfXZhciB4PWUubG9uYXhpcy5yYW5nZSxiPWUubGF0YXhpcy5yYW5nZSxfPXhbMF0sdz14WzFdO18+MCYmdzwwJiYodys9MzYwKTt2YXIgayxBLFQsTT0oXyt3KS8yO2lmKCFjKXt2YXIgUz11P3MucHJvalJvdGF0ZTpbTSwwLDBdO2s9cihcInByb2plY3Rpb24ucm90YXRpb24ubG9uXCIsU1swXSkscihcInByb2plY3Rpb24ucm90YXRpb24ubGF0XCIsU1sxXSkscihcInByb2plY3Rpb24ucm90YXRpb24ucm9sbFwiLFNbMl0pLHIoXCJzaG93Y29hc3RsaW5lc1wiLCF1KSYmKHIoXCJjb2FzdGxpbmVjb2xvclwiKSxyKFwiY29hc3RsaW5ld2lkdGhcIikpLHIoXCJzaG93b2NlYW5cIikmJnIoXCJvY2VhbmNvbG9yXCIpfShjPyhBPS05Ni42LFQ9MzguNyk6KEE9dT9NOmssVD0oYlswXStiWzFdKS8yKSxyKFwiY2VudGVyLmxvblwiLEEpLHIoXCJjZW50ZXIubGF0XCIsVCksaCkmJnIoXCJwcm9qZWN0aW9uLnBhcmFsbGVsc1wiLHMucHJvalBhcmFsbGVsc3x8WzAsNjBdKTtyKFwicHJvamVjdGlvbi5zY2FsZVwiKSxyKFwic2hvd2xhbmRcIikmJnIoXCJsYW5kY29sb3JcIikscihcInNob3dsYWtlc1wiKSYmcihcImxha2Vjb2xvclwiKSxyKFwic2hvd3JpdmVyc1wiKSYmKHIoXCJyaXZlcmNvbG9yXCIpLHIoXCJyaXZlcndpZHRoXCIpKSxyKFwic2hvd2NvdW50cmllc1wiLHUmJlwidXNhXCIhPT1hKSYmKHIoXCJjb3VudHJ5Y29sb3JcIikscihcImNvdW50cnl3aWR0aFwiKSksKFwidXNhXCI9PT1hfHxcIm5vcnRoIGFtZXJpY2FcIj09PWEmJjUwPT09bikmJihyKFwic2hvd3N1YnVuaXRzXCIsITApLHIoXCJzdWJ1bml0Y29sb3JcIikscihcInN1YnVuaXR3aWR0aFwiKSksdXx8cihcInNob3dmcmFtZVwiLCEwKSYmKHIoXCJmcmFtZWNvbG9yXCIpLHIoXCJmcmFtZXdpZHRoXCIpKSxyKFwiYmdjb2xvclwiKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe24odCxlLHIse3R5cGU6XCJnZW9cIixhdHRyaWJ1dGVzOmEsaGFuZGxlRGVmYXVsdHM6cyxwYXJ0aXRpb246XCJ5XCJ9KX19LHtcIi4uL3N1YnBsb3RfZGVmYXVsdHNcIjo4MjQsXCIuL2NvbnN0YW50c1wiOjc3NyxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo3ODB9XSw3ODI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe3JldHVybnt0eXBlOlwiRmVhdHVyZVwiLGlkOnQuaWQscHJvcGVydGllczp0LnByb3BlcnRpZXMsZ2VvbWV0cnk6cih0Lmdlb21ldHJ5LGUpfX1mdW5jdGlvbiByKGUsbil7aWYoIWUpcmV0dXJuIG51bGw7aWYoXCJHZW9tZXRyeUNvbGxlY3Rpb25cIj09PWUudHlwZSlyZXR1cm57dHlwZTpcIkdlb21ldHJ5Q29sbGVjdGlvblwiLGdlb21ldHJpZXM6b2JqZWN0Lmdlb21ldHJpZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiByKHQsbil9KX07aWYoIWMuaGFzT3duUHJvcGVydHkoZS50eXBlKSlyZXR1cm4gbnVsbDt2YXIgaT1jW2UudHlwZV07cmV0dXJuIHQuZ2VvLnN0cmVhbShlLG4oaSkpLGkucmVzdWx0KCl9dC5nZW8ucHJvamVjdD1mdW5jdGlvbih0LGUpe3ZhciBpPWUuc3RyZWFtO2lmKCFpKXRocm93IG5ldyBFcnJvcihcIm5vdCB5ZXQgc3VwcG9ydGVkXCIpO3JldHVybih0JiZuLmhhc093blByb3BlcnR5KHQudHlwZSk/blt0LnR5cGVdOnIpKHQsaSl9O3ZhciBuPXtGZWF0dXJlOmUsRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxyKXtyZXR1cm57dHlwZTpcIkZlYXR1cmVDb2xsZWN0aW9uXCIsZmVhdHVyZXM6dC5mZWF0dXJlcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGUodCxyKX0pfX19LGk9W10sYT1bXSxvPXtwb2ludDpmdW5jdGlvbih0LGUpe2kucHVzaChbdCxlXSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PWkubGVuZ3RoP2kubGVuZ3RoPDI/e3R5cGU6XCJQb2ludFwiLGNvb3JkaW5hdGVzOmlbMF19Ont0eXBlOlwiTXVsdGlQb2ludFwiLGNvb3JkaW5hdGVzOml9Om51bGw7cmV0dXJuIGk9W10sdH19LHM9e2xpbmVTdGFydDp1LHBvaW50OmZ1bmN0aW9uKHQsZSl7aS5wdXNoKFt0LGVdKX0sbGluZUVuZDpmdW5jdGlvbigpe2kubGVuZ3RoJiYoYS5wdXNoKGkpLGk9W10pfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1hLmxlbmd0aD9hLmxlbmd0aDwyP3t0eXBlOlwiTGluZVN0cmluZ1wiLGNvb3JkaW5hdGVzOmFbMF19Ont0eXBlOlwiTXVsdGlMaW5lU3RyaW5nXCIsY29vcmRpbmF0ZXM6YX06bnVsbDtyZXR1cm4gYT1bXSx0fX0sbD17cG9seWdvblN0YXJ0OnUsbGluZVN0YXJ0OnUscG9pbnQ6ZnVuY3Rpb24odCxlKXtpLnB1c2goW3QsZV0pfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9aS5sZW5ndGg7aWYodCl7ZG97aS5wdXNoKGlbMF0uc2xpY2UoKSl9d2hpbGUoKyt0PDQpO2EucHVzaChpKSxpPVtdfX0scG9seWdvbkVuZDp1LHJlc3VsdDpmdW5jdGlvbigpe2lmKCFhLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgdD1bXSxlPVtdO3JldHVybiBhLmZvckVhY2goZnVuY3Rpb24ocil7IWZ1bmN0aW9uKHQpe2lmKChlPXQubGVuZ3RoKTw0KXJldHVybiExO2Zvcih2YXIgZSxyPTAsbj10W2UtMV1bMV0qdFswXVswXS10W2UtMV1bMF0qdFswXVsxXTsrK3I8ZTspbis9dFtyLTFdWzFdKnRbcl1bMF0tdFtyLTFdWzBdKnRbcl1bMV07cmV0dXJuIG48PTB9KHIpP2UucHVzaChyKTp0LnB1c2goW3JdKX0pLGUuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcj1lWzBdO3Quc29tZShmdW5jdGlvbih0KXtpZihmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lWzBdLG49ZVsxXSxpPSExLGE9MCxvPXQubGVuZ3RoLHM9by0xO2E8bztzPWErKyl7dmFyIGw9dFthXSxjPWxbMF0sdT1sWzFdLGg9dFtzXSxmPWhbMF0scD1oWzFdO3U+bl5wPm4mJnI8KGYtYykqKG4tdSkvKHAtdSkrYyYmKGk9IWkpfXJldHVybiBpfSh0WzBdLHIpKXJldHVybiB0LnB1c2goZSksITB9KXx8dC5wdXNoKFtlXSl9KSxhPVtdLHQubGVuZ3RoP3QubGVuZ3RoPjE/e3R5cGU6XCJNdWx0aVBvbHlnb25cIixjb29yZGluYXRlczp0fTp7dHlwZTpcIlBvbHlnb25cIixjb29yZGluYXRlczp0WzBdfTpudWxsfX0sYz17UG9pbnQ6byxNdWx0aVBvaW50Om8sTGluZVN0cmluZzpzLE11bHRpTGluZVN0cmluZzpzLFBvbHlnb246bCxNdWx0aVBvbHlnb246bCxTcGhlcmU6bH07ZnVuY3Rpb24gdSgpe312YXIgaD0xZS02LGY9aCpoLHA9TWF0aC5QSSxkPXAvMixnPShNYXRoLnNxcnQocCkscC8xODApLHY9MTgwL3A7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdD4xP2Q6dDwtMT8tZDpNYXRoLmFzaW4odCl9ZnVuY3Rpb24geSh0KXtyZXR1cm4gdD4xPzA6dDwtMT9wOk1hdGguYWNvcyh0KX12YXIgeD10Lmdlby5wcm9qZWN0aW9uLGI9dC5nZW8ucHJvamVjdGlvbk11dGF0b3I7ZnVuY3Rpb24gXyh0LGUpe3ZhciByPSgyK2QpKk1hdGguc2luKGUpO2UvPTI7Zm9yKHZhciBuPTAsaT0xLzA7bjwxMCYmTWF0aC5hYnMoaSk+aDtuKyspe3ZhciBhPU1hdGguY29zKGUpO2UtPWk9KGUrTWF0aC5zaW4oZSkqKGErMiktcikvKDIqYSooMSthKSl9cmV0dXJuWzIvTWF0aC5zcXJ0KHAqKDQrcCkpKnQqKDErTWF0aC5jb3MoZSkpLDIqTWF0aC5zcXJ0KHAvKDQrcCkpKk1hdGguc2luKGUpXX10Lmdlby5pbnRlcnJ1cHQ9ZnVuY3Rpb24oZSl7dmFyIHIsbj1bW1tbLXAsMF0sWzAsZF0sW3AsMF1dXSxbW1stcCwwXSxbMCwtZF0sW3AsMF1dXV07ZnVuY3Rpb24gaSh0LHIpe2Zvcih2YXIgaT1yPDA/LTE6MSxhPW5bKyhyPDApXSxvPTAscz1hLmxlbmd0aC0xO288cyYmdD5hW29dWzJdWzBdOysrbyk7dmFyIGw9ZSh0LWFbb11bMV1bMF0scik7cmV0dXJuIGxbMF0rPWUoYVtvXVsxXVswXSxpKnI+aSphW29dWzBdWzFdP2Fbb11bMF1bMV06cilbMF0sbH1lLmludmVydCYmKGkuaW52ZXJ0PWZ1bmN0aW9uKHQsYSl7Zm9yKHZhciBvPXJbKyhhPDApXSxzPW5bKyhhPDApXSxjPTAsdT1vLmxlbmd0aDtjPHU7KytjKXt2YXIgaD1vW2NdO2lmKGhbMF1bMF08PXQmJnQ8aFsxXVswXSYmaFswXVsxXTw9YSYmYTxoWzFdWzFdKXt2YXIgZj1lLmludmVydCh0LWUoc1tjXVsxXVswXSwwKVswXSxhKTtyZXR1cm4gZlswXSs9c1tjXVsxXVswXSxsKGkoZlswXSxmWzFdKSxbdCxhXSk/ZjpudWxsfX19KTt2YXIgYT10Lmdlby5wcm9qZWN0aW9uKGkpLG89YS5zdHJlYW07ZnVuY3Rpb24gcyh0LGUpe2Zvcih2YXIgcixuLGksYT0tMSxvPXQubGVuZ3RoLHM9dFswXSxsPVtdOysrYTxvOyl7bj0oKHI9dFthXSlbMF0tc1swXSkvZSxpPShyWzFdLXNbMV0pL2U7Zm9yKHZhciBjPTA7YzxlOysrYylsLnB1c2goW3NbMF0rYypuLHNbMV0rYyppXSk7cz1yfXJldHVybiBsLnB1c2gociksbH1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIE1hdGguYWJzKHRbMF0tZVswXSk8aCYmTWF0aC5hYnModFsxXS1lWzFdKTxofXJldHVybiBhLnN0cmVhbT1mdW5jdGlvbihlKXt2YXIgcj1hLnJvdGF0ZSgpLGk9byhlKSxsPShhLnJvdGF0ZShbMCwwXSksbyhlKSk7cmV0dXJuIGEucm90YXRlKHIpLGkuc3BoZXJlPWZ1bmN0aW9uKCl7dC5nZW8uc3RyZWFtKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTFlLTYscj1bXSxpPTAsYT1uWzBdLmxlbmd0aDtpPGE7KytpKXt2YXIgbz1uWzBdW2ldLGw9MTgwKm9bMF1bMF0vcCxjPTE4MCpvWzBdWzFdL3AsdT0xODAqb1sxXVsxXS9wLGg9MTgwKm9bMl1bMF0vcCxmPTE4MCpvWzJdWzFdL3A7ci5wdXNoKHMoW1tsK2UsYytlXSxbbCtlLHUtZV0sW2gtZSx1LWVdLFtoLWUsZitlXV0sMzApKX1mb3IodmFyIGk9blsxXS5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIG89blsxXVtpXSxsPTE4MCpvWzBdWzBdL3AsYz0xODAqb1swXVsxXS9wLHU9MTgwKm9bMV1bMV0vcCxoPTE4MCpvWzJdWzBdL3AsZj0xODAqb1syXVsxXS9wO3IucHVzaChzKFtbaC1lLGYtZV0sW2gtZSx1K2VdLFtsK2UsdStlXSxbbCtlLGMtZV1dLDMwKSl9cmV0dXJue3R5cGU6XCJQb2x5Z29uXCIsY29vcmRpbmF0ZXM6W3QubWVyZ2UocildfX0oKSxsKX0saX0sYS5sb2Jlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW1t0WzBdWzBdKnAvMTgwLHRbMF1bMV0qcC8xODBdLFt0WzFdWzBdKnAvMTgwLHRbMV1bMV0qcC8xODBdLFt0WzJdWzBdKnAvMTgwLHRbMl1bMV0qcC8xODBdXX0pfSkscj1uLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7dmFyIHIsbj1lKHRbMF1bMF0sdFswXVsxXSlbMF0saT1lKHRbMl1bMF0sdFsyXVsxXSlbMF0sYT1lKHRbMV1bMF0sdFswXVsxXSlbMV0sbz1lKHRbMV1bMF0sdFsxXVsxXSlbMV07cmV0dXJuIGE+byYmKHI9YSxhPW8sbz1yKSxbW24sYV0sW2ksb11dfSl9KSxhKTpuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW1sxODAqdFswXVswXS9wLDE4MCp0WzBdWzFdL3BdLFsxODAqdFsxXVswXS9wLDE4MCp0WzFdWzFdL3BdLFsxODAqdFsyXVswXS9wLDE4MCp0WzJdWzFdL3BdXX0pfSl9LGF9LF8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9LjUqZSpNYXRoLnNxcnQoKDQrcCkvcCksbj1tKHIpLGk9TWF0aC5jb3Mobik7cmV0dXJuW3QvKDIvTWF0aC5zcXJ0KHAqKDQrcCkpKigxK2kpKSxtKChuK3IqKGkrMikpLygyK2QpKV19LCh0Lmdlby5lY2tlcnQ0PWZ1bmN0aW9uKCl7cmV0dXJuIHgoXyl9KS5yYXc9Xzt2YXIgdz10Lmdlby5hemltdXRoYWxFcXVhbEFyZWEucmF3O2Z1bmN0aW9uIGsodCxlKXtpZihhcmd1bWVudHMubGVuZ3RoPDImJihlPXQpLDE9PT1lKXJldHVybiB3O2lmKGU9PT0xLzApcmV0dXJuIEE7ZnVuY3Rpb24gcihyLG4pe3ZhciBpPXcoci9lLG4pO3JldHVybiBpWzBdKj10LGl9cmV0dXJuIHIuaW52ZXJ0PWZ1bmN0aW9uKHIsbil7dmFyIGk9dy5pbnZlcnQoci90LG4pO3JldHVybiBpWzBdKj1lLGl9LHJ9ZnVuY3Rpb24gQSh0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpL01hdGguY29zKGUvPTIpLDIqTWF0aC5zaW4oZSldfWZ1bmN0aW9uIFQodCxlKXtyZXR1cm5bMyp0LygyKnApKk1hdGguc3FydChwKnAvMy1lKmUpLGVdfWZ1bmN0aW9uIE0odCxlKXtyZXR1cm5bdCwxLjI1Kk1hdGgubG9nKE1hdGgudGFuKHAvNCsuNCplKSldfWZ1bmN0aW9uIFModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByLG49dCpNYXRoLnNpbihlKSxpPTMwO2Rve2UtPXI9KGUrTWF0aC5zaW4oZSktbikvKDErTWF0aC5jb3MoZSkpfXdoaWxlKE1hdGguYWJzKHIpPmgmJi0taT4wKTtyZXR1cm4gZS8yfX1BLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPTIqbShlLzIpO3JldHVyblt0Kk1hdGguY29zKHIvMikvTWF0aC5jb3Mocikscl19LCh0Lmdlby5oYW1tZXI9ZnVuY3Rpb24oKXt2YXIgdD0yLGU9YihrKSxyPWUodCk7cmV0dXJuIHIuY29lZmZpY2llbnQ9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZSh0PStyKTp0fSxyfSkucmF3PWssVC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bMi8zKnAqdC9NYXRoLnNxcnQocCpwLzMtZSplKSxlXX0sKHQuZ2VvLmthdnJheXNraXk3PWZ1bmN0aW9uKCl7cmV0dXJuIHgoVCl9KS5yYXc9VCxNLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0LDIuNSpNYXRoLmF0YW4oTWF0aC5leHAoLjgqZSkpLS42MjUqcF19LCh0Lmdlby5taWxsZXI9ZnVuY3Rpb24oKXtyZXR1cm4geChNKX0pLnJhdz1NLFMocCk7dmFyIEU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVMocik7ZnVuY3Rpb24gaShyLGkpe3JldHVyblt0KnIqTWF0aC5jb3MoaT1uKGkpKSxlKk1hdGguc2luKGkpXX1yZXR1cm4gaS5pbnZlcnQ9ZnVuY3Rpb24obixpKXt2YXIgYT1tKGkvZSk7cmV0dXJuW24vKHQqTWF0aC5jb3MoYSkpLG0oKDIqYStNYXRoLnNpbigyKmEpKS9yKV19LGl9KE1hdGguU1FSVDIvZCxNYXRoLlNRUlQyLHApO2Z1bmN0aW9uIEModCxlKXt2YXIgcj1lKmUsbj1yKnI7cmV0dXJuW3QqKC44NzA3LS4xMzE5NzkqcituKihuKiguMDAzOTcxKnItLjAwMTUyOSpuKS0uMDEzNzkxKSksZSooMS4wMDcyMjYrciooLjAxNTA4NStuKiguMDI4ODc0KnItLjA0NDQ3NS0uMDA1OTE2Km4pKSldfSh0Lmdlby5tb2xsd2VpZGU9ZnVuY3Rpb24oKXtyZXR1cm4geChFKX0pLnJhdz1FLEMuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1lLGk9MjU7ZG97dmFyIGE9bipuLG89YSphO24tPXI9KG4qKDEuMDA3MjI2K2EqKC4wMTUwODUrbyooLjAyODg3NCphLS4wNDQ0NzUtLjAwNTkxNipvKSkpLWUpLygxLjAwNzIyNithKiguMDQ1MjU1K28qKC4yNTk4NjYqYS0uMzExMzI1LS4wMDU5MTYqMTEqbykpKX13aGlsZShNYXRoLmFicyhyKT5oJiYtLWk+MCk7cmV0dXJuW3QvKC44NzA3KyhhPW4qbikqKGEqKGEqYSphKiguMDAzOTcxLS4wMDE1MjkqYSktLjAxMzc5MSktLjEzMTk3OSkpLG5dfSwodC5nZW8ubmF0dXJhbEVhcnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHgoQyl9KS5yYXc9Qzt2YXIgTD1bWy45OTg2LC0uMDYyXSxbMSwwXSxbLjk5ODYsLjA2Ml0sWy45OTU0LC4xMjRdLFsuOTksLjE4Nl0sWy45ODIyLC4yNDhdLFsuOTczLC4zMV0sWy45NiwuMzcyXSxbLjk0MjcsLjQzNF0sWy45MjE2LC40OTU4XSxbLjg5NjIsLjU1NzFdLFsuODY3OSwuNjE3Nl0sWy44MzUsLjY3NjldLFsuNzk4NiwuNzM0Nl0sWy43NTk3LC43OTAzXSxbLjcxODYsLjg0MzVdLFsuNjczMiwuODkzNl0sWy42MjEzLC45Mzk0XSxbLjU3MjIsLjk3NjFdLFsuNTMyMiwxXV07ZnVuY3Rpb24geih0LGUpe3ZhciByLG49TWF0aC5taW4oMTgsMzYqTWF0aC5hYnMoZSkvcCksaT1NYXRoLmZsb29yKG4pLGE9bi1pLG89KHI9TFtpXSlbMF0scz1yWzFdLGw9KHI9TFsrK2ldKVswXSxjPXJbMV0sdT0ocj1MW01hdGgubWluKDE5LCsraSldKVswXSxoPXJbMV07cmV0dXJuW3QqKGwrYSoodS1vKS8yK2EqYSoodS0yKmwrbykvMiksKGU+MD9kOi1kKSooYythKihoLXMpLzIrYSphKihoLTIqYytzKS8yKV19ZnVuY3Rpb24gTyh0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpLGVdfWZ1bmN0aW9uIEkodCxlKXt2YXIgcixuPU1hdGguY29zKGUpLGk9KHI9eShuKk1hdGguY29zKHQvPTIpKSk/ci9NYXRoLnNpbihyKToxO3JldHVyblsyKm4qTWF0aC5zaW4odCkqaSxNYXRoLnNpbihlKSppXX1mdW5jdGlvbiBEKHQsZSl7dmFyIHI9SSh0LGUpO3JldHVyblsoclswXSt0L2QpLzIsKHJbMV0rZSkvMl19TC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RbMV0qPTEuMDE0NH0pLHouaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS9kLG49OTAqcixpPU1hdGgubWluKDE4LE1hdGguYWJzKG4vNSkpLGE9TWF0aC5tYXgoMCxNYXRoLmZsb29yKGkpKTtkb3t2YXIgbz1MW2FdWzFdLHM9TFthKzFdWzFdLGw9TFtNYXRoLm1pbigxOSxhKzIpXVsxXSxjPWwtbyx1PWwtMipzK28saD0yKihNYXRoLmFicyhyKS1zKS9jLHA9dS9jLG09aCooMS1wKmgqKDEtMipwKmgpKTtpZihtPj0wfHwxPT09YSl7bj0oZT49MD81Oi01KSoobStpKTt2YXIgeSx4PTUwO2Rve209KGk9TWF0aC5taW4oMTgsTWF0aC5hYnMobikvNSkpLShhPU1hdGguZmxvb3IoaSkpLG89TFthXVsxXSxzPUxbYSsxXVsxXSxsPUxbTWF0aC5taW4oMTksYSsyKV1bMV0sbi09KHk9KGU+PTA/ZDotZCkqKHMrbSoobC1vKS8yK20qbSoobC0yKnMrbykvMiktZSkqdn13aGlsZShNYXRoLmFicyh5KT5mJiYtLXg+MCk7YnJlYWt9fXdoaWxlKC0tYT49MCk7dmFyIGI9TFthXVswXSxfPUxbYSsxXVswXSx3PUxbTWF0aC5taW4oMTksYSsyKV1bMF07cmV0dXJuW3QvKF8rbSoody1iKS8yK20qbSoody0yKl8rYikvMiksbipnXX0sKHQuZ2VvLnJvYmluc29uPWZ1bmN0aW9uKCl7cmV0dXJuIHgoeil9KS5yYXc9eixPLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0L01hdGguY29zKGUpLGVdfSwodC5nZW8uc2ludXNvaWRhbD1mdW5jdGlvbigpe3JldHVybiB4KE8pfSkucmF3PU8sSS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtpZighKHQqdCs0KmUqZT5wKnAraCkpe3ZhciByPXQsbj1lLGk9MjU7ZG97dmFyIGEsbz1NYXRoLnNpbihyKSxzPU1hdGguc2luKHIvMiksbD1NYXRoLmNvcyhyLzIpLGM9TWF0aC5zaW4obiksdT1NYXRoLmNvcyhuKSxmPU1hdGguc2luKDIqbiksZD1jKmMsZz11KnUsdj1zKnMsbT0xLWcqbCpsLHg9bT95KHUqbCkqTWF0aC5zcXJ0KGE9MS9tKTphPTAsYj0yKngqdSpzLXQsXz14KmMtZSx3PWEqKGcqdit4KnUqbCpkKSxrPWEqKC41Km8qZi0yKngqYypzKSxBPS4yNSphKihmKnMteCpjKmcqbyksVD1hKihkKmwreCp2KnUpLE09aypBLVQqdztpZighTSlicmVhazt2YXIgUz0oXyprLWIqVCkvTSxFPShiKkEtXyp3KS9NO3ItPVMsbi09RX13aGlsZSgoTWF0aC5hYnMoUyk+aHx8TWF0aC5hYnMoRSk+aCkmJi0taT4wKTtyZXR1cm5bcixuXX19LCh0Lmdlby5haXRvZmY9ZnVuY3Rpb24oKXtyZXR1cm4geChJKX0pLnJhdz1JLEQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dCxuPWUsaT0yNTtkb3t2YXIgYSxvPU1hdGguY29zKG4pLHM9TWF0aC5zaW4obiksbD1NYXRoLnNpbigyKm4pLGM9cypzLHU9bypvLGY9TWF0aC5zaW4ocikscD1NYXRoLmNvcyhyLzIpLGc9TWF0aC5zaW4oci8yKSx2PWcqZyxtPTEtdSpwKnAseD1tP3kobypwKSpNYXRoLnNxcnQoYT0xL20pOmE9MCxiPS41KigyKngqbypnK3IvZCktdCxfPS41Kih4KnMrbiktZSx3PS41KmEqKHUqdit4Km8qcCpjKSsuNS9kLGs9YSooZipsLzQteCpzKmcpLEE9LjEyNSphKihsKmcteCpzKnUqZiksVD0uNSphKihjKnAreCp2Km8pKy41LE09aypBLVQqdyxTPShfKmstYipUKS9NLEU9KGIqQS1fKncpL007ci09UyxuLT1FfXdoaWxlKChNYXRoLmFicyhTKT5ofHxNYXRoLmFicyhFKT5oKSYmLS1pPjApO3JldHVybltyLG5dfSwodC5nZW8ud2lua2VsMz1mdW5jdGlvbigpe3JldHVybiB4KEQpfSkucmF3PUR9fSx7fV0sNzgzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxvPU1hdGguUEkvMTgwLHM9MTgwL01hdGguUEksbD17Y3Vyc29yOlwicG9pbnRlclwifSxjPXtjdXJzb3I6XCJhdXRvXCJ9O2Z1bmN0aW9uIHUodCxlKXtyZXR1cm4gbi5iZWhhdmlvci56b29tKCkudHJhbnNsYXRlKGUudHJhbnNsYXRlKCkpLnNjYWxlKGUuc2NhbGUoKSl9ZnVuY3Rpb24gaCh0LGUscil7dmFyIG49dC5pZCxvPXQuZ3JhcGhEaXYscz1vLmxheW91dCxsPXNbbl0sYz1vLl9mdWxsTGF5b3V0LHU9Y1tuXSxoPXt9LGY9e307ZnVuY3Rpb24gcCh0LGUpe2hbbitcIi5cIit0XT1pLm5lc3RlZFByb3BlcnR5KGwsdCkuZ2V0KCksYS5jYWxsKFwiX3N0b3JlRGlyZWN0R1VJRWRpdFwiLHMsYy5fcHJlR1VJLGgpO3ZhciByPWkubmVzdGVkUHJvcGVydHkodSx0KTtyLmdldCgpIT09ZSYmKHIuc2V0KGUpLGkubmVzdGVkUHJvcGVydHkobCx0KS5zZXQoZSksZltuK1wiLlwiK3RdPWUpfXIocCkscChcInByb2plY3Rpb24uc2NhbGVcIixlLnNjYWxlKCkvdC5maXRTY2FsZSksby5lbWl0KFwicGxvdGx5X3JlbGF5b3V0XCIsZil9ZnVuY3Rpb24gZih0LGUpe3ZhciByPXUoMCxlKTtmdW5jdGlvbiBpKHIpe3ZhciBuPWUuaW52ZXJ0KHQubWlkUHQpO3IoXCJjZW50ZXIubG9uXCIsblswXSkscihcImNlbnRlci5sYXRcIixuWzFdKX1yZXR1cm4gci5vbihcInpvb21zdGFydFwiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUobCl9KS5vbihcInpvb21cIixmdW5jdGlvbigpe2Uuc2NhbGUobi5ldmVudC5zY2FsZSkudHJhbnNsYXRlKG4uZXZlbnQudHJhbnNsYXRlKSx0LnJlbmRlcigpfSkub24oXCJ6b29tZW5kXCIsZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5zdHlsZShjKSxoKHQsZSxpKX0pLHJ9ZnVuY3Rpb24gcCh0LGUpe3ZhciByLGksYSxvLHMsZixwLGQsZyx2PXUoMCxlKSxtPTI7ZnVuY3Rpb24geSh0KXtyZXR1cm4gZS5pbnZlcnQodCl9ZnVuY3Rpb24geChyKXt2YXIgbj1lLnJvdGF0ZSgpLGk9ZS5pbnZlcnQodC5taWRQdCk7cihcInByb2plY3Rpb24ucm90YXRpb24ubG9uXCIsLW5bMF0pLHIoXCJjZW50ZXIubG9uXCIsaVswXSkscihcImNlbnRlci5sYXRcIixpWzFdKX1yZXR1cm4gdi5vbihcInpvb21zdGFydFwiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUobCkscj1uLm1vdXNlKHRoaXMpLGk9ZS5yb3RhdGUoKSxhPWUudHJhbnNsYXRlKCksbz1pLHM9eShyKX0pLm9uKFwiem9vbVwiLGZ1bmN0aW9uKCl7aWYoZj1uLm1vdXNlKHRoaXMpLGZ1bmN0aW9uKHQpe3ZhciByPXkodCk7aWYoIXIpcmV0dXJuITA7dmFyIG49ZShyKTtyZXR1cm4gTWF0aC5hYnMoblswXS10WzBdKT5tfHxNYXRoLmFicyhuWzFdLXRbMV0pPm19KHIpKXJldHVybiB2LnNjYWxlKGUuc2NhbGUoKSksdm9pZCB2LnRyYW5zbGF0ZShlLnRyYW5zbGF0ZSgpKTtlLnNjYWxlKG4uZXZlbnQuc2NhbGUpLGUudHJhbnNsYXRlKFthWzBdLG4uZXZlbnQudHJhbnNsYXRlWzFdXSkscz95KGYpJiYoZD15KGYpLHA9W29bMF0rKGRbMF0tc1swXSksaVsxXSxpWzJdXSxlLnJvdGF0ZShwKSxvPXApOnM9eShyPWYpLGc9ITAsdC5yZW5kZXIoKX0pLm9uKFwiem9vbWVuZFwiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUoYyksZyYmaCh0LGUseCl9KSx2fWZ1bmN0aW9uIGQodCxlKXt2YXIgcixpPXtyOmUucm90YXRlKCksazplLnNjYWxlKCl9LGE9dSgwLGUpLGY9ZnVuY3Rpb24odCl7dmFyIGU9MCxyPWFyZ3VtZW50cy5sZW5ndGgsaT1bXTtmb3IoOysrZTxyOylpLnB1c2goYXJndW1lbnRzW2VdKTt2YXIgYT1uLmRpc3BhdGNoLmFwcGx5KG51bGwsaSk7cmV0dXJuIGEub2Y9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIG87dHJ5e289aS5zb3VyY2VFdmVudD1uLmV2ZW50LGkudGFyZ2V0PXQsbi5ldmVudD1pLGFbaS50eXBlXS5hcHBseShlLHIpfWZpbmFsbHl7bi5ldmVudD1vfX19LGF9KGEsXCJ6b29tc3RhcnRcIixcInpvb21cIixcInpvb21lbmRcIikscD0wLGQ9YS5vbjtmdW5jdGlvbiBtKHQpe3ZhciByPWUucm90YXRlKCk7dChcInByb2plY3Rpb24ucm90YXRpb24ubG9uXCIsLXJbMF0pLHQoXCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxhdFwiLC1yWzFdKX1yZXR1cm4gYS5vbihcInpvb21zdGFydFwiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUobCk7dmFyIHQsYyx1LGgsbSxiLF8sdyxrLEEsVCxNPW4ubW91c2UodGhpcyksUz1lLnJvdGF0ZSgpLEU9UyxDPWUudHJhbnNsYXRlKCksTD0oYz0uNSoodD1TKVswXSpvLHU9LjUqdFsxXSpvLGg9LjUqdFsyXSpvLG09TWF0aC5zaW4oYyksYj1NYXRoLmNvcyhjKSxfPU1hdGguc2luKHUpLHc9TWF0aC5jb3ModSksaz1NYXRoLnNpbihoKSxBPU1hdGguY29zKGgpLFtiKncqQSttKl8qayxtKncqQS1iKl8qayxiKl8qQSttKncqayxiKncqay1tKl8qQV0pO3I9ZyhlLE0pLGQuY2FsbChhLFwiem9vbVwiLGZ1bmN0aW9uKCl7dmFyIHQsYSxvLGwsYyx1LGgscCxkLG0sYj1uLm1vdXNlKHRoaXMpO2lmKGUuc2NhbGUoaS5rPW4uZXZlbnQuc2NhbGUpLHIpe2lmKGcoZSxiKSl7ZS5yb3RhdGUoUykudHJhbnNsYXRlKEMpO3ZhciBfPWcoZSxiKSx3PWZ1bmN0aW9uKHQsZSl7aWYoIXR8fCFlKXJldHVybjt2YXIgcj1mdW5jdGlvbih0LGUpe3JldHVyblt0WzFdKmVbMl0tdFsyXSplWzFdLHRbMl0qZVswXS10WzBdKmVbMl0sdFswXSplWzFdLXRbMV0qZVswXV19KHQsZSksbj1NYXRoLnNxcnQoeChyLHIpKSxpPS41Kk1hdGguYWNvcyhNYXRoLm1heCgtMSxNYXRoLm1pbigxLHgodCxlKSkpKSxhPU1hdGguc2luKGkpL247cmV0dXJuIG4mJltNYXRoLmNvcyhpKSxyWzJdKmEsLXJbMV0qYSxyWzBdKmFdfShyLF8pLGs9ZnVuY3Rpb24odCl7cmV0dXJuW01hdGguYXRhbjIoMioodFswXSp0WzFdK3RbMl0qdFszXSksMS0yKih0WzFdKnRbMV0rdFsyXSp0WzJdKSkqcyxNYXRoLmFzaW4oTWF0aC5tYXgoLTEsTWF0aC5taW4oMSwyKih0WzBdKnRbMl0tdFszXSp0WzFdKSkpKSpzLE1hdGguYXRhbjIoMioodFswXSp0WzNdK3RbMV0qdFsyXSksMS0yKih0WzJdKnRbMl0rdFszXSp0WzNdKSkqc119KChhPXcsbz0odD1MKVswXSxsPXRbMV0sYz10WzJdLHU9dFszXSxoPWFbMF0scD1hWzFdLGQ9YVsyXSxtPWFbM10sW28qaC1sKnAtYypkLXUqbSxvKnArbCpoK2MqbS11KmQsbypkLWwqbStjKmgrdSpwLG8qbStsKmQtYypwK3UqaF0pKSxBPWkucj1mdW5jdGlvbih0LGUscil7dmFyIG49eShlLDIsdFswXSk7bj15KG4sMSx0WzFdKSxuPXkobiwwLHRbMl0tclsyXSk7dmFyIGksYSxvPWVbMF0sbD1lWzFdLGM9ZVsyXSx1PW5bMF0saD1uWzFdLGY9blsyXSxwPU1hdGguYXRhbjIobCxvKSpzLGQ9TWF0aC5zcXJ0KG8qbytsKmwpO01hdGguYWJzKGgpPmQ/KGE9KGg+MD85MDotOTApLXAsaT0wKTooYT1NYXRoLmFzaW4oaC9kKSpzLXAsaT1NYXRoLnNxcnQoZCpkLWgqaCkpO3ZhciBnPTE4MC1hLTIqcCxtPShNYXRoLmF0YW4yKGYsdSktTWF0aC5hdGFuMihjLGkpKSpzLHg9KE1hdGguYXRhbjIoZix1KS1NYXRoLmF0YW4yKGMsLWkpKSpzLGI9dihyWzBdLHJbMV0sYSxtKSxfPXYoclswXSxyWzFdLGcseCk7cmV0dXJuIGI8PV8/W2EsbSxyWzJdXTpbZyx4LHJbMl1dfShrLHIsRSk7aXNGaW5pdGUoQVswXSkmJmlzRmluaXRlKEFbMV0pJiZpc0Zpbml0ZShBWzJdKXx8KEE9RSksZS5yb3RhdGUoQSksRT1BfX1lbHNlIHI9ZyhlLE09Yik7Zi5vZih0aGlzLGFyZ3VtZW50cykoe3R5cGU6XCJ6b29tXCJ9KX0pLFQ9Zi5vZih0aGlzLGFyZ3VtZW50cykscCsrfHxUKHt0eXBlOlwiem9vbXN0YXJ0XCJ9KX0pLm9uKFwiem9vbWVuZFwiLGZ1bmN0aW9uKCl7dmFyIHI7bi5zZWxlY3QodGhpcykuc3R5bGUoYyksZC5jYWxsKGEsXCJ6b29tXCIsbnVsbCkscj1mLm9mKHRoaXMsYXJndW1lbnRzKSwtLXB8fHIoe3R5cGU6XCJ6b29tZW5kXCJ9KSxoKHQsZSxtKX0pLm9uKFwiem9vbS5yZWRyYXdcIixmdW5jdGlvbigpe3QucmVuZGVyKCl9KSxuLnJlYmluZChhLGYsXCJvblwiKX1mdW5jdGlvbiBnKHQsZSl7dmFyIHI9dC5pbnZlcnQoZSk7cmV0dXJuIHImJmlzRmluaXRlKHJbMF0pJiZpc0Zpbml0ZShyWzFdKSYmZnVuY3Rpb24odCl7dmFyIGU9dFswXSpvLHI9dFsxXSpvLG49TWF0aC5jb3Mocik7cmV0dXJuW24qTWF0aC5jb3MoZSksbipNYXRoLnNpbihlKSxNYXRoLnNpbihyKV19KHIpfWZ1bmN0aW9uIHYodCxlLHIsbil7dmFyIGk9bShyLXQpLGE9bShuLWUpO3JldHVybiBNYXRoLnNxcnQoaSppK2EqYSl9ZnVuY3Rpb24gbSh0KXtyZXR1cm4odCUzNjArNTQwKSUzNjAtMTgwfWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBuPXIqbyxpPXQuc2xpY2UoKSxhPTA9PT1lPzE6MCxzPTI9PT1lPzE6MixsPU1hdGguY29zKG4pLGM9TWF0aC5zaW4obik7cmV0dXJuIGlbYV09dFthXSpsLXRbc10qYyxpW3NdPXRbc10qbCt0W2FdKmMsaX1mdW5jdGlvbiB4KHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9dC5sZW5ndGg7bjxpOysrbilyKz10W25dKmVbbl07cmV0dXJuIHJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5wcm9qZWN0aW9uO3JldHVybihlLl9pc1Njb3BlZD9mOmUuX2lzQ2xpcHBlZD9kOnApKHQscil9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxkMzoxNTV9XSw3ODQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vcmVnaXN0cnlcIiksaT10KFwiLi9jYXJ0ZXNpYW4vY29uc3RhbnRzXCIpLlNVQlBMT1RfUEFUVEVSTjtyLmdldFN1YnBsb3RDYWxjRGF0YT1mdW5jdGlvbih0LGUscil7dmFyIGk9bi5zdWJwbG90c1JlZ2lzdHJ5W2VdO2lmKCFpKXJldHVybltdO2Zvcih2YXIgYT1pLmF0dHIsbz1bXSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPXRbc107bFswXS50cmFjZVthXT09PXImJm8ucHVzaChsKX1yZXR1cm4gb30sci5nZXRNb2R1bGVDYWxjRGF0YT1mdW5jdGlvbih0LGUpe3ZhciByLGk9W10sYT1bXTtpZighKHI9XCJzdHJpbmdcIj09dHlwZW9mIGU/bi5nZXRNb2R1bGUoZSkucGxvdDpcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6ZS5wbG90KSlyZXR1cm5baSx0XTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9dFtvXSxsPXNbMF0udHJhY2U7ITA9PT1sLnZpc2libGUmJihsLl9tb2R1bGUucGxvdD09PXI/aS5wdXNoKHMpOmEucHVzaChzKSl9cmV0dXJuW2ksYV19LHIuZ2V0U3VicGxvdERhdGE9ZnVuY3Rpb24odCxlLHIpe2lmKCFuLnN1YnBsb3RzUmVnaXN0cnlbZV0pcmV0dXJuW107dmFyIGEsbyxzLGw9bi5zdWJwbG90c1JlZ2lzdHJ5W2VdLmF0dHIsYz1bXTtpZihcImdsMmRcIj09PWUpe3ZhciB1PXIubWF0Y2goaSk7bz1cInhcIit1WzFdLHM9XCJ5XCIrdVsyXX1mb3IodmFyIGg9MDtoPHQubGVuZ3RoO2grKylhPXRbaF0sXCJnbDJkXCI9PT1lJiZuLnRyYWNlSXMoYSxcImdsMmRcIik/YVtsWzBdXT09PW8mJmFbbFsxXV09PT1zJiZjLnB1c2goYSk6YVtsXT09PXImJmMucHVzaChhKTtyZXR1cm4gY319LHtcIi4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9jYXJ0ZXNpYW4vY29uc3RhbnRzXCI6NzU1fV0sNzg1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIm1vdXNlLWNoYW5nZVwiKSxpPXQoXCJtb3VzZS13aGVlbFwiKSxhPXQoXCJtb3VzZS1ldmVudC1vZmZzZXRcIiksbz10KFwiLi4vY2FydGVzaWFuL2NvbnN0YW50c1wiKSxzPXQoXCJoYXMtcGFzc2l2ZS1ldmVudHNcIik7ZnVuY3Rpb24gbCh0LGUpe3RoaXMuZWxlbWVudD10LHRoaXMucGxvdD1lLHRoaXMubW91c2VMaXN0ZW5lcj1udWxsLHRoaXMud2hlZWxMaXN0ZW5lcj1udWxsLHRoaXMubGFzdElucHV0VGltZT1EYXRlLm5vdygpLHRoaXMubGFzdFBvcz1bMCwwXSx0aGlzLmJveEVuYWJsZWQ9ITEsdGhpcy5ib3hJbml0ZWQ9ITEsdGhpcy5ib3hTdGFydD1bMCwwXSx0aGlzLmJveEVuZD1bMCwwXSx0aGlzLmRyYWdTdGFydD1bMCwwXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5tb3VzZUNvbnRhaW5lcixyPXQuZ2xwbG90LGM9bmV3IGwoZSxyKTtmdW5jdGlvbiB1KCl7dC54YXhpcy5hdXRvcmFuZ2U9ITEsdC55YXhpcy5hdXRvcmFuZ2U9ITF9ZnVuY3Rpb24gaChlLG4saSl7dmFyIGEscyxsPXQuY2FsY0RhdGFCb3goKSxoPXIudmlld0JveCxmPWMubGFzdFBvc1swXSxwPWMubGFzdFBvc1sxXSxkPW8uTUlORFJBRypyLnBpeGVsUmF0aW8sZz1vLk1JTlpPT00qci5waXhlbFJhdGlvO2Z1bmN0aW9uIHYoZSxyLG4pe3ZhciBpPU1hdGgubWluKHIsbiksYT1NYXRoLm1heChyLG4pO2khPT1hPyhsW2VdPWksbFtlKzJdPWEsYy5kYXRhQm94PWwsdC5zZXRSYW5nZXMobCkpOih0LnNlbGVjdEJveC5zZWxlY3RCb3g9WzAsMCwxLDFdLHQuZ2xwbG90LnNldERpcnR5KCkpfXN3aXRjaChuKj1yLnBpeGVsUmF0aW8saSo9ci5waXhlbFJhdGlvLGk9aFszXS1oWzFdLWksdC5mdWxsTGF5b3V0LmRyYWdtb2RlKXtjYXNlXCJ6b29tXCI6aWYoZSl7dmFyIG09bi8oaFsyXS1oWzBdKSoobFsyXS1sWzBdKStsWzBdLHk9aS8oaFszXS1oWzFdKSoobFszXS1sWzFdKStsWzFdO2MuYm94SW5pdGVkfHwoYy5ib3hTdGFydFswXT1tLGMuYm94U3RhcnRbMV09eSxjLmRyYWdTdGFydFswXT1uLGMuZHJhZ1N0YXJ0WzFdPWkpLGMuYm94RW5kWzBdPW0sYy5ib3hFbmRbMV09eSxjLmJveEluaXRlZD0hMCxjLmJveEVuYWJsZWR8fGMuYm94U3RhcnRbMF09PT1jLmJveEVuZFswXSYmYy5ib3hTdGFydFsxXT09PWMuYm94RW5kWzFdfHwoYy5ib3hFbmFibGVkPSEwKTt2YXIgeD1NYXRoLmFicyhjLmRyYWdTdGFydFswXS1uKTxnLGI9TWF0aC5hYnMoYy5kcmFnU3RhcnRbMV0taSk8ZztpZighZnVuY3Rpb24oKXtmb3IodmFyIGU9dC5ncmFwaERpdi5fZnVsbExheW91dC5fYXhpc0NvbnN0cmFpbnRHcm91cHMscj10LnhheGlzLl9pZCxuPXQueWF4aXMuX2lkLGk9MDtpPGUubGVuZ3RoO2krKylpZigtMSE9PWVbaV1bcl0pe2lmKC0xIT09ZVtpXVtuXSlyZXR1cm4hMDticmVha31yZXR1cm4hMX0oKXx8eCYmYil4JiYoYy5ib3hFbmRbMF09Yy5ib3hTdGFydFswXSksYiYmKGMuYm94RW5kWzFdPWMuYm94U3RhcnRbMV0pO2Vsc2V7YT1jLmJveEVuZFswXS1jLmJveFN0YXJ0WzBdLHM9Yy5ib3hFbmRbMV0tYy5ib3hTdGFydFsxXTt2YXIgXz0obFszXS1sWzFdKS8obFsyXS1sWzBdKTtNYXRoLmFicyhhKl8pPk1hdGguYWJzKHMpPyhjLmJveEVuZFsxXT1jLmJveFN0YXJ0WzFdK01hdGguYWJzKGEpKl8qKHM+PTA/MTotMSksYy5ib3hFbmRbMV08bFsxXT8oYy5ib3hFbmRbMV09bFsxXSxjLmJveEVuZFswXT1jLmJveFN0YXJ0WzBdKyhsWzFdLWMuYm94U3RhcnRbMV0pL01hdGguYWJzKF8pKTpjLmJveEVuZFsxXT5sWzNdJiYoYy5ib3hFbmRbMV09bFszXSxjLmJveEVuZFswXT1jLmJveFN0YXJ0WzBdKyhsWzNdLWMuYm94U3RhcnRbMV0pL01hdGguYWJzKF8pKSk6KGMuYm94RW5kWzBdPWMuYm94U3RhcnRbMF0rTWF0aC5hYnMocykvXyooYT49MD8xOi0xKSxjLmJveEVuZFswXTxsWzBdPyhjLmJveEVuZFswXT1sWzBdLGMuYm94RW5kWzFdPWMuYm94U3RhcnRbMV0rKGxbMF0tYy5ib3hTdGFydFswXSkqTWF0aC5hYnMoXykpOmMuYm94RW5kWzBdPmxbMl0mJihjLmJveEVuZFswXT1sWzJdLGMuYm94RW5kWzFdPWMuYm94U3RhcnRbMV0rKGxbMl0tYy5ib3hTdGFydFswXSkqTWF0aC5hYnMoXykpKX19ZWxzZSBjLmJveEVuYWJsZWQ/KGE9Yy5ib3hTdGFydFswXSE9PWMuYm94RW5kWzBdLHM9Yy5ib3hTdGFydFsxXSE9PWMuYm94RW5kWzFdLGF8fHM/KGEmJih2KDAsYy5ib3hTdGFydFswXSxjLmJveEVuZFswXSksdC54YXhpcy5hdXRvcmFuZ2U9ITEpLHMmJih2KDEsYy5ib3hTdGFydFsxXSxjLmJveEVuZFsxXSksdC55YXhpcy5hdXRvcmFuZ2U9ITEpLHQucmVsYXlvdXRDYWxsYmFjaygpKTp0LmdscGxvdC5zZXREaXJ0eSgpLGMuYm94RW5hYmxlZD0hMSxjLmJveEluaXRlZD0hMSk6Yy5ib3hJbml0ZWQmJihjLmJveEluaXRlZD0hMSk7YnJlYWs7Y2FzZVwicGFuXCI6Yy5ib3hFbmFibGVkPSExLGMuYm94SW5pdGVkPSExLGU/KGMucGFubmluZ3x8KGMuZHJhZ1N0YXJ0WzBdPW4sYy5kcmFnU3RhcnRbMV09aSksTWF0aC5hYnMoYy5kcmFnU3RhcnRbMF0tbik8ZCYmKG49Yy5kcmFnU3RhcnRbMF0pLE1hdGguYWJzKGMuZHJhZ1N0YXJ0WzFdLWkpPGQmJihpPWMuZHJhZ1N0YXJ0WzFdKSxhPShmLW4pKihsWzJdLWxbMF0pLyhyLnZpZXdCb3hbMl0tci52aWV3Qm94WzBdKSxzPShwLWkpKihsWzNdLWxbMV0pLyhyLnZpZXdCb3hbM10tci52aWV3Qm94WzFdKSxsWzBdKz1hLGxbMl0rPWEsbFsxXSs9cyxsWzNdKz1zLHQuc2V0UmFuZ2VzKGwpLGMucGFubmluZz0hMCxjLmxhc3RJbnB1dFRpbWU9RGF0ZS5ub3coKSx1KCksdC5jYW1lcmFDaGFuZ2VkKCksdC5oYW5kbGVBbm5vdGF0aW9ucygpKTpjLnBhbm5pbmcmJihjLnBhbm5pbmc9ITEsdC5yZWxheW91dENhbGxiYWNrKCkpfWMubGFzdFBvc1swXT1uLGMubGFzdFBvc1sxXT1pfXJldHVybiBjLm1vdXNlTGlzdGVuZXI9bihlLGgpLGUuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIixmdW5jdGlvbih0KXt2YXIgcj1hKHQuY2hhbmdlZFRvdWNoZXNbMF0sZSk7aCgwLHJbMF0sclsxXSksaCgxLHJbMF0sclsxXSksdC5wcmV2ZW50RGVmYXVsdCgpfSwhIXMmJntwYXNzaXZlOiExfSksZS5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpO3ZhciByPWEodC5jaGFuZ2VkVG91Y2hlc1swXSxlKTtoKDEsclswXSxyWzFdKSx0LnByZXZlbnREZWZhdWx0KCl9LCEhcyYme3Bhc3NpdmU6ITF9KSxlLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLGZ1bmN0aW9uKHQpe2goMCxjLmxhc3RQb3NbMF0sYy5sYXN0UG9zWzFdKSx0LnByZXZlbnREZWZhdWx0KCl9LCEhcyYme3Bhc3NpdmU6ITF9KSxjLndoZWVsTGlzdGVuZXI9aShlLGZ1bmN0aW9uKGUsbil7aWYoIXQuc2Nyb2xsWm9vbSlyZXR1cm4hMTt2YXIgaT10LmNhbGNEYXRhQm94KCksYT1yLnZpZXdCb3gsbz1jLmxhc3RQb3NbMF0scz1jLmxhc3RQb3NbMV0sbD1NYXRoLmV4cCg1Km4vKGFbM10tYVsxXSkpLGg9by8oYVsyXS1hWzBdKSooaVsyXS1pWzBdKStpWzBdLGY9cy8oYVszXS1hWzFdKSooaVszXS1pWzFdKStpWzFdO3JldHVybiBpWzBdPShpWzBdLWgpKmwraCxpWzJdPShpWzJdLWgpKmwraCxpWzFdPShpWzFdLWYpKmwrZixpWzNdPShpWzNdLWYpKmwrZix0LnNldFJhbmdlcyhpKSxjLmxhc3RJbnB1dFRpbWU9RGF0ZS5ub3coKSx1KCksdC5jYW1lcmFDaGFuZ2VkKCksdC5oYW5kbGVBbm5vdGF0aW9ucygpLHQucmVsYXlvdXRDYWxsYmFjaygpLCEwfSwhMCksY319LHtcIi4uL2NhcnRlc2lhbi9jb25zdGFudHNcIjo3NTUsXCJoYXMtcGFzc2l2ZS1ldmVudHNcIjo0MDQsXCJtb3VzZS1jaGFuZ2VcIjo0MjgsXCJtb3VzZS1ldmVudC1vZmZzZXRcIjo0MjksXCJtb3VzZS13aGVlbFwiOjQzMX1dLDc4NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9jYXJ0ZXNpYW4vYXhlc1wiKSxpPXQoXCIuLi8uLi9saWIvc3RyMnJnYmFycmF5XCIpO2Z1bmN0aW9uIGEodCl7dGhpcy5zY2VuZT10LHRoaXMuZ2w9dC5nbCx0aGlzLnBpeGVsUmF0aW89dC5waXhlbFJhdGlvLHRoaXMuc2NyZWVuQm94PVswLDAsMSwxXSx0aGlzLnZpZXdCb3g9WzAsMCwxLDFdLHRoaXMuZGF0YUJveD1bLTEsLTEsMSwxXSx0aGlzLmJvcmRlckxpbmVFbmFibGU9WyExLCExLCExLCExXSx0aGlzLmJvcmRlckxpbmVXaWR0aD1bMSwxLDEsMV0sdGhpcy5ib3JkZXJMaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aWNrcz1bW10sW11dLHRoaXMudGlja0VuYWJsZT1bITAsITAsITEsITFdLHRoaXMudGlja1BhZD1bMTUsMTUsMTUsMTVdLHRoaXMudGlja0FuZ2xlPVswLDAsMCwwXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tNYXJrTGVuZ3RoPVswLDAsMCwwXSx0aGlzLnRpY2tNYXJrV2lkdGg9WzAsMCwwLDBdLHRoaXMudGlja01hcmtDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVscz1bXCJ4XCIsXCJ5XCJdLHRoaXMubGFiZWxFbmFibGU9WyEwLCEwLCExLCExXSx0aGlzLmxhYmVsQW5nbGU9WzAsTWF0aC5QSS8yLDAsMypNYXRoLlBJLzJdLHRoaXMubGFiZWxQYWQ9WzE1LDE1LDE1LDE1XSx0aGlzLmxhYmVsU2l6ZT1bMTIsMTJdLHRoaXMubGFiZWxGb250PVtcInNhbnMtc2VyaWZcIixcInNhbnMtc2VyaWZcIl0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGl0bGU9XCJcIix0aGlzLnRpdGxlRW5hYmxlPSEwLHRoaXMudGl0bGVDZW50ZXI9WzAsMCwwLDBdLHRoaXMudGl0bGVBbmdsZT0wLHRoaXMudGl0bGVDb2xvcj1bMCwwLDAsMV0sdGhpcy50aXRsZUZvbnQ9XCJzYW5zLXNlcmlmXCIsdGhpcy50aXRsZVNpemU9MTgsdGhpcy5ncmlkTGluZUVuYWJsZT1bITAsITBdLHRoaXMuZ3JpZExpbmVDb2xvcj1bWzAsMCwwLC41XSxbMCwwLDAsLjVdXSx0aGlzLmdyaWRMaW5lV2lkdGg9WzEsMV0sdGhpcy56ZXJvTGluZUVuYWJsZT1bITAsITBdLHRoaXMuemVyb0xpbmVXaWR0aD1bMSwxXSx0aGlzLnplcm9MaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDBdLHRoaXMuYmFja2dyb3VuZENvbG9yPVswLDAsMCwwXSx0aGlzLnN0YXRpYz10aGlzLnNjZW5lLnN0YXRpY1Bsb3R9dmFyIG89YS5wcm90b3R5cGUscz1bXCJ4YXhpc1wiLFwieWF4aXNcIl07by5tZXJnZT1mdW5jdGlvbih0KXt2YXIgZSxyLG4sYSxvLGwsYyx1LGgsZixwO2Zvcih0aGlzLnRpdGxlRW5hYmxlPSExLHRoaXMuYmFja2dyb3VuZENvbG9yPWkodC5wbG90X2JnY29sb3IpLGY9MDtmPDI7KytmKXt2YXIgZD0oZT1zW2ZdKS5jaGFyQXQoMCk7Zm9yKG49KHI9dFt0aGlzLnNjZW5lW2VdLl9uYW1lXSkudGl0bGUudGV4dD09PXRoaXMuc2NlbmUuZnVsbExheW91dC5fZGZsdFRpdGxlW2RdP1wiXCI6ci50aXRsZS50ZXh0LHA9MDtwPD0yO3ArPTIpdGhpcy5sYWJlbEVuYWJsZVtmK3BdPSExLHRoaXMubGFiZWxzW2YrcF09bix0aGlzLmxhYmVsQ29sb3JbZitwXT1pKHIudGl0bGUuZm9udC5jb2xvciksdGhpcy5sYWJlbEZvbnRbZitwXT1yLnRpdGxlLmZvbnQuZmFtaWx5LHRoaXMubGFiZWxTaXplW2YrcF09ci50aXRsZS5mb250LnNpemUsdGhpcy5sYWJlbFBhZFtmK3BdPXRoaXMuZ2V0TGFiZWxQYWQoZSxyKSx0aGlzLnRpY2tFbmFibGVbZitwXT0hMSx0aGlzLnRpY2tDb2xvcltmK3BdPWkoKHIudGlja2ZvbnR8fHt9KS5jb2xvciksdGhpcy50aWNrQW5nbGVbZitwXT1cImF1dG9cIj09PXIudGlja2FuZ2xlPzA6TWF0aC5QSSotci50aWNrYW5nbGUvMTgwLHRoaXMudGlja1BhZFtmK3BdPXRoaXMuZ2V0VGlja1BhZChyKSx0aGlzLnRpY2tNYXJrTGVuZ3RoW2YrcF09MCx0aGlzLnRpY2tNYXJrV2lkdGhbZitwXT1yLnRpY2t3aWR0aHx8MCx0aGlzLnRpY2tNYXJrQ29sb3JbZitwXT1pKHIudGlja2NvbG9yKSx0aGlzLmJvcmRlckxpbmVFbmFibGVbZitwXT0hMSx0aGlzLmJvcmRlckxpbmVDb2xvcltmK3BdPWkoci5saW5lY29sb3IpLHRoaXMuYm9yZGVyTGluZVdpZHRoW2YrcF09ci5saW5ld2lkdGh8fDA7Yz10aGlzLmhhc1NoYXJlZEF4aXMociksbz10aGlzLmhhc0F4aXNJbkRmbHRQb3MoZSxyKSYmIWMsbD10aGlzLmhhc0F4aXNJbkFsdHJQb3MoZSxyKSYmIWMsYT1yLm1pcnJvcnx8ITEsdT1jPy0xIT09U3RyaW5nKGEpLmluZGV4T2YoXCJhbGxcIik6ISFhLGg9Yz9cImFsbHRpY2tzXCI9PT1hOi0xIT09U3RyaW5nKGEpLmluZGV4T2YoXCJ0aWNrc1wiKSxvP3RoaXMubGFiZWxFbmFibGVbZl09ITA6bCYmKHRoaXMubGFiZWxFbmFibGVbZisyXT0hMCksbz90aGlzLnRpY2tFbmFibGVbZl09ci5zaG93dGlja2xhYmVsczpsJiYodGhpcy50aWNrRW5hYmxlW2YrMl09ci5zaG93dGlja2xhYmVscyksKG98fHUpJiYodGhpcy5ib3JkZXJMaW5lRW5hYmxlW2ZdPXIuc2hvd2xpbmUpLChsfHx1KSYmKHRoaXMuYm9yZGVyTGluZUVuYWJsZVtmKzJdPXIuc2hvd2xpbmUpLChvfHxoKSYmKHRoaXMudGlja01hcmtMZW5ndGhbZl09dGhpcy5nZXRUaWNrTWFya0xlbmd0aChyKSksKGx8fGgpJiYodGhpcy50aWNrTWFya0xlbmd0aFtmKzJdPXRoaXMuZ2V0VGlja01hcmtMZW5ndGgocikpLHRoaXMuZ3JpZExpbmVFbmFibGVbZl09ci5zaG93Z3JpZCx0aGlzLmdyaWRMaW5lQ29sb3JbZl09aShyLmdyaWRjb2xvciksdGhpcy5ncmlkTGluZVdpZHRoW2ZdPXIuZ3JpZHdpZHRoLHRoaXMuemVyb0xpbmVFbmFibGVbZl09ci56ZXJvbGluZSx0aGlzLnplcm9MaW5lQ29sb3JbZl09aShyLnplcm9saW5lY29sb3IpLHRoaXMuemVyb0xpbmVXaWR0aFtmXT1yLnplcm9saW5ld2lkdGh9fSxvLmhhc1NoYXJlZEF4aXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zY2VuZSxyPWUuZnVsbExheW91dC5fc3VicGxvdHMuZ2wyZDtyZXR1cm4gMCE9PW4uZmluZFN1YnBsb3RzV2l0aEF4aXMocix0KS5pbmRleE9mKGUuaWQpfSxvLmhhc0F4aXNJbkRmbHRQb3M9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnNpZGU7cmV0dXJuXCJ4YXhpc1wiPT09dD9cImJvdHRvbVwiPT09cjpcInlheGlzXCI9PT10P1wibGVmdFwiPT09cjp2b2lkIDB9LG8uaGFzQXhpc0luQWx0clBvcz1mdW5jdGlvbih0LGUpe3ZhciByPWUuc2lkZTtyZXR1cm5cInhheGlzXCI9PT10P1widG9wXCI9PT1yOlwieWF4aXNcIj09PXQ/XCJyaWdodFwiPT09cjp2b2lkIDB9LG8uZ2V0TGFiZWxQYWQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnRpdGxlLmZvbnQuc2l6ZSxuPWUuc2hvd3RpY2tsYWJlbHM7cmV0dXJuXCJ4YXhpc1wiPT09dD9cInRvcFwiPT09ZS5zaWRlP3IqKDEuNSsobj8xOjApKS0xMDpyKigxLjUrKG4/LjU6MCkpLTEwOlwieWF4aXNcIj09PXQ/XCJyaWdodFwiPT09ZS5zaWRlPzEwK3IqKDEuNSsobj8xOi41KSk6MTArciooMS41KyhuPy41OjApKTp2b2lkIDB9LG8uZ2V0VGlja1BhZD1mdW5jdGlvbih0KXtyZXR1cm5cIm91dHNpZGVcIj09PXQudGlja3M/MTArdC50aWNrbGVuOjE1fSxvLmdldFRpY2tNYXJrTGVuZ3RoPWZ1bmN0aW9uKHQpe2lmKCF0LnRpY2tzKXJldHVybiAwO3ZhciBlPXQudGlja2xlbjtyZXR1cm5cImluc2lkZVwiPT09dC50aWNrcz8tZTplfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhKHQpfX0se1wiLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiOjcyNCxcIi4uL2NhcnRlc2lhbi9heGVzXCI6NzQ5fV0sNzg3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGwsaT10KFwiLi9zY2VuZTJkXCIpLGE9dChcIi4uL2xheW91dF9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzXCIpLHM9dChcIi4uL2NhcnRlc2lhbi9jb25zdGFudHNcIiksbD10KFwiLi4vY2FydGVzaWFuXCIpLGM9dChcIi4uLy4uL2NvbXBvbmVudHMvZngvbGF5b3V0X2F0dHJpYnV0ZXNcIiksdT10KFwiLi4vZ2V0X2RhdGFcIikuZ2V0U3VicGxvdERhdGE7ci5uYW1lPVwiZ2wyZFwiLHIuYXR0cj1bXCJ4YXhpc1wiLFwieWF4aXNcIl0sci5pZFJvb3Q9W1wieFwiLFwieVwiXSxyLmlkUmVnZXg9cy5pZFJlZ2V4LHIuYXR0clJlZ2V4PXMuYXR0clJlZ2V4LHIuYXR0cmlidXRlcz10KFwiLi4vY2FydGVzaWFuL2F0dHJpYnV0ZXNcIiksci5zdXBwbHlMYXlvdXREZWZhdWx0cz1mdW5jdGlvbih0LGUscil7ZS5faGFzKFwiY2FydGVzaWFuXCIpfHxsLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyKX0sci5sYXlvdXRBdHRyT3ZlcnJpZGVzPW4obC5sYXlvdXRBdHRyaWJ1dGVzLFwicGxvdFwiLFwiZnJvbS1yb290XCIpLHIuYmFzZUxheW91dEF0dHJPdmVycmlkZXM9bih7cGxvdF9iZ2NvbG9yOmEucGxvdF9iZ2NvbG9yLGhvdmVybGFiZWw6Yy5ob3ZlcmxhYmVsfSxcInBsb3RcIixcIm5lc3RlZFwiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj10Ll9mdWxsRGF0YSxuPWUuX3N1YnBsb3RzLmdsMmQsYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1uW2FdLHM9ZS5fcGxvdHNbb10sbD11KHIsXCJnbDJkXCIsbyksYz1zLl9zY2VuZTJkO3ZvaWQgMD09PWMmJihjPW5ldyBpKHtpZDpvLGdyYXBoRGl2OnQsY29udGFpbmVyOnQucXVlcnlTZWxlY3RvcihcIi5nbC1jb250YWluZXJcIiksc3RhdGljUGxvdDp0Ll9jb250ZXh0LnN0YXRpY1Bsb3QscGxvdEdsUGl4ZWxSYXRpbzp0Ll9jb250ZXh0LnBsb3RHbFBpeGVsUmF0aW99LGUpLHMuX3NjZW5lMmQ9YyksYy5wbG90KGwsdC5jYWxjZGF0YSxlLHQubGF5b3V0KX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLmdsMmR8fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXSxzPW4uX3Bsb3RzW29dO2lmKHMuX3NjZW5lMmQpMD09PXUodCxcImdsMmRcIixvKS5sZW5ndGgmJihzLl9zY2VuZTJkLmRlc3Ryb3koKSxkZWxldGUgbi5fcGxvdHNbb10pfWwuY2xlYW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxyLmRyYXdGcmFtZXdvcms9ZnVuY3Rpb24odCl7dC5fY29udGV4dC5zdGF0aWNQbG90fHxsLmRyYXdGcmFtZXdvcmsodCl9LHIudG9TVkc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDJkLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9ZS5fcGxvdHNbcltuXV0uX3NjZW5lMmQsYT1pLnRvSW1hZ2UoXCJwbmdcIik7ZS5fZ2xpbWFnZXMuYXBwZW5kKFwic3ZnOmltYWdlXCIpLmF0dHIoe3htbG5zOm8uc3ZnLFwieGxpbms6aHJlZlwiOmEseDowLHk6MCx3aWR0aDpcIjEwMCVcIixoZWlnaHQ6XCIxMDAlXCIscHJlc2VydmVBc3BlY3RSYXRpbzpcIm5vbmVcIn0pLGkuZGVzdHJveSgpfX0sci51cGRhdGVGeD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLmdsMmQsbj0wO248ci5sZW5ndGg7bisrKXtlLl9wbG90c1tyW25dXS5fc2NlbmUyZC51cGRhdGVGeChlLmRyYWdtb2RlKX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzXCI6NjE4LFwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIjo2NzksXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi4vY2FydGVzaWFuXCI6NzYwLFwiLi4vY2FydGVzaWFuL2F0dHJpYnV0ZXNcIjo3NDcsXCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzXCI6NzU1LFwiLi4vZ2V0X2RhdGFcIjo3ODQsXCIuLi9sYXlvdXRfYXR0cmlidXRlc1wiOjgwMSxcIi4vc2NlbmUyZFwiOjc4OH1dLDc4ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuLGksYT10KFwiLi4vLi4vcmVnaXN0cnlcIiksbz10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIikscz10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxsPXQoXCJnbC1wbG90MmRcIiksYz10KFwiZ2wtc3Bpa2VzMmRcIiksdT10KFwiZ2wtc2VsZWN0LWJveFwiKSxoPXQoXCJ3ZWJnbC1jb250ZXh0XCIpLGY9dChcIi4vY29udmVydFwiKSxwPXQoXCIuL2NhbWVyYVwiKSxkPXQoXCIuLi8uLi9saWIvc2hvd19ub193ZWJnbF9tc2dcIiksZz10KFwiLi4vY2FydGVzaWFuL2NvbnN0cmFpbnRzXCIpLHY9Zy5lbmZvcmNlLG09Zy5jbGVhbix5PXQoXCIuLi9jYXJ0ZXNpYW4vYXV0b3JhbmdlXCIpLmRvQXV0b1JhbmdlLHg9W1wieGF4aXNcIixcInlheGlzXCJdLGI9dChcIi4uL2NhcnRlc2lhbi9jb25zdGFudHNcIikuU1VCUExPVF9QQVRURVJOO2Z1bmN0aW9uIF8odCxlKXt0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLmdyYXBoRGl2PXQuZ3JhcGhEaXYsdGhpcy5waXhlbFJhdGlvPXQucGxvdEdsUGl4ZWxSYXRpb3x8d2luZG93LmRldmljZVBpeGVsUmF0aW8sdGhpcy5pZD10LmlkLHRoaXMuc3RhdGljUGxvdD0hIXQuc3RhdGljUGxvdCx0aGlzLnNjcm9sbFpvb209dGhpcy5ncmFwaERpdi5fY29udGV4dC5fc2Nyb2xsWm9vbS5jYXJ0ZXNpYW4sdGhpcy5mdWxsRGF0YT1udWxsLHRoaXMudXBkYXRlUmVmcyhlKSx0aGlzLm1ha2VGcmFtZXdvcmsoKSx0aGlzLnN0b3BwZWR8fCh0aGlzLmdscGxvdE9wdGlvbnM9Zih0aGlzKSx0aGlzLmdscGxvdE9wdGlvbnMubWVyZ2UoZSksdGhpcy5nbHBsb3Q9bCh0aGlzLmdscGxvdE9wdGlvbnMpLHRoaXMuY2FtZXJhPXAodGhpcyksdGhpcy50cmFjZXM9e30sdGhpcy5zcGlrZXM9Yyh0aGlzLmdscGxvdCksdGhpcy5zZWxlY3RCb3g9dSh0aGlzLmdscGxvdCx7aW5uZXJGaWxsOiExLG91dGVyRmlsbDohMH0pLHRoaXMubGFzdEJ1dHRvblN0YXRlPTAsdGhpcy5waWNrUmVzdWx0PW51bGwsdGhpcy5pc01vdXNlT3Zlcj0hMCx0aGlzLnN0b3BwZWQ9ITEsdGhpcy5yZWRyYXc9dGhpcy5kcmF3LmJpbmQodGhpcyksdGhpcy5yZWRyYXcoKSl9ZS5leHBvcnRzPV87dmFyIHc9Xy5wcm90b3R5cGU7dy5tYWtlRnJhbWV3b3JrPWZ1bmN0aW9uKCl7aWYodGhpcy5zdGF0aWNQbG90KXtpZighKGl8fChuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksaT1oKHtjYW52YXM6bixwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITEscHJlbXVsdGlwbGllZEFscGhhOiEwLGFudGlhbGlhczohMH0pKSkpdGhyb3cgbmV3IEVycm9yKFwiRXJyb3IgY3JlYXRpbmcgc3RhdGljIGNhbnZhcy9jb250ZXh0IGZvciBpbWFnZSBzZXJ2ZXJcIik7dGhpcy5jYW52YXM9bix0aGlzLmdsPWl9ZWxzZXt2YXIgdD10aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLmdsLWNhbnZhcy1mb2N1c1wiKSxlPWgoe2NhbnZhczp0LHByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMCxwcmVtdWx0aXBsaWVkQWxwaGE6ITB9KTtpZighZSlyZXR1cm4gZCh0aGlzKSx2b2lkKHRoaXMuc3RvcHBlZD0hMCk7dGhpcy5jYW52YXM9dCx0aGlzLmdsPWV9dmFyIHI9dGhpcy5jYW52YXM7ci5zdHlsZS53aWR0aD1cIjEwMCVcIixyLnN0eWxlLmhlaWdodD1cIjEwMCVcIixyLnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixyLnN0eWxlLnRvcD1cIjBweFwiLHIuc3R5bGUubGVmdD1cIjBweFwiLHIuc3R5bGVbXCJwb2ludGVyLWV2ZW50c1wiXT1cIm5vbmVcIix0aGlzLnVwZGF0ZVNpemUociksci5jbGFzc05hbWUrPVwiIHVzZXItc2VsZWN0LW5vbmVcIjt2YXIgYT10aGlzLnN2Z0NvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwic3ZnXCIpO2Euc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwiLGEuc3R5bGUudG9wPWEuc3R5bGUubGVmdD1cIjBweFwiLGEuc3R5bGUud2lkdGg9YS5zdHlsZS5oZWlnaHQ9XCIxMDAlXCIsYS5zdHlsZVtcInotaW5kZXhcIl09MjAsYS5zdHlsZVtcInBvaW50ZXItZXZlbnRzXCJdPVwibm9uZVwiO3ZhciBvPXRoaXMubW91c2VDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtvLnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixvLnN0eWxlW1wicG9pbnRlci1ldmVudHNcIl09XCJhdXRvXCIsdGhpcy5waWNrQ2FudmFzPXRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuZ2wtY2FudmFzLXBpY2tcIik7dmFyIHM9dGhpcy5jb250YWluZXI7cy5hcHBlbmRDaGlsZChhKSxzLmFwcGVuZENoaWxkKG8pO3ZhciBsPXRoaXM7by5hZGRFdmVudExpc3RlbmVyKFwibW91c2VvdXRcIixmdW5jdGlvbigpe2wuaXNNb3VzZU92ZXI9ITEsbC51bmhvdmVyKCl9KSxvLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIixmdW5jdGlvbigpe2wuaXNNb3VzZU92ZXI9ITB9KX0sdy50b0ltYWdlPWZ1bmN0aW9uKHQpe3R8fCh0PVwicG5nXCIpLHRoaXMuc3RvcHBlZD0hMCx0aGlzLnN0YXRpY1Bsb3QmJnRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKG4pLHRoaXMudXBkYXRlU2l6ZSh0aGlzLmNhbnZhcyk7dmFyIGU9dGhpcy5nbHBsb3QuZ2wscj1lLmRyYXdpbmdCdWZmZXJXaWR0aCxpPWUuZHJhd2luZ0J1ZmZlckhlaWdodDtlLmNsZWFyQ29sb3IoMSwxLDEsMCksZS5jbGVhcihlLkNPTE9SX0JVRkZFUl9CSVR8ZS5ERVBUSF9CVUZGRVJfQklUKSx0aGlzLmdscGxvdC5zZXREaXJ0eSgpLHRoaXMuZ2xwbG90LmRyYXcoKSxlLmJpbmRGcmFtZWJ1ZmZlcihlLkZSQU1FQlVGRkVSLG51bGwpO3ZhciBhPW5ldyBVaW50OEFycmF5KHIqaSo0KTtlLnJlYWRQaXhlbHMoMCwwLHIsaSxlLlJHQkEsZS5VTlNJR05FRF9CWVRFLGEpO2Zvcih2YXIgbz0wLHM9aS0xO288czsrK28sLS1zKWZvcih2YXIgbD0wO2w8cjsrK2wpZm9yKHZhciBjPTA7Yzw0OysrYyl7dmFyIHU9YVs0KihyKm8rbCkrY107YVs0KihyKm8rbCkrY109YVs0KihyKnMrbCkrY10sYVs0KihyKnMrbCkrY109dX12YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO2gud2lkdGg9cixoLmhlaWdodD1pO3ZhciBmLHA9aC5nZXRDb250ZXh0KFwiMmRcIiksZD1wLmNyZWF0ZUltYWdlRGF0YShyLGkpO3N3aXRjaChkLmRhdGEuc2V0KGEpLHAucHV0SW1hZ2VEYXRhKGQsMCwwKSx0KXtjYXNlXCJqcGVnXCI6Zj1oLnRvRGF0YVVSTChcImltYWdlL2pwZWdcIik7YnJlYWs7Y2FzZVwid2VicFwiOmY9aC50b0RhdGFVUkwoXCJpbWFnZS93ZWJwXCIpO2JyZWFrO2RlZmF1bHQ6Zj1oLnRvRGF0YVVSTChcImltYWdlL3BuZ1wiKX1yZXR1cm4gdGhpcy5zdGF0aWNQbG90JiZ0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZChuKSxmfSx3LnVwZGF0ZVNpemU9ZnVuY3Rpb24odCl7dHx8KHQ9dGhpcy5jYW52YXMpO3ZhciBlPXRoaXMucGl4ZWxSYXRpbyxyPXRoaXMuZnVsbExheW91dCxuPXIud2lkdGgsaT1yLmhlaWdodCxhPTB8TWF0aC5jZWlsKGUqbiksbz0wfE1hdGguY2VpbChlKmkpO3JldHVybiB0LndpZHRoPT09YSYmdC5oZWlnaHQ9PT1vfHwodC53aWR0aD1hLHQuaGVpZ2h0PW8pLHR9LHcuY29tcHV0ZVRpY2tNYXJrcz1mdW5jdGlvbigpe3RoaXMueGF4aXMuc2V0U2NhbGUoKSx0aGlzLnlheGlzLnNldFNjYWxlKCk7Zm9yKHZhciB0PVtvLmNhbGNUaWNrcyh0aGlzLnhheGlzKSxvLmNhbGNUaWNrcyh0aGlzLnlheGlzKV0sZT0wO2U8MjsrK2UpZm9yKHZhciByPTA7cjx0W2VdLmxlbmd0aDsrK3IpdFtlXVtyXS50ZXh0PXRbZV1bcl0udGV4dCtcIlwiO3JldHVybiB0fSx3LnVwZGF0ZVJlZnM9ZnVuY3Rpb24odCl7dGhpcy5mdWxsTGF5b3V0PXQ7dmFyIGU9dGhpcy5pZC5tYXRjaChiKSxyPVwieGF4aXNcIitlWzFdLG49XCJ5YXhpc1wiK2VbMl07dGhpcy54YXhpcz10aGlzLmZ1bGxMYXlvdXRbcl0sdGhpcy55YXhpcz10aGlzLmZ1bGxMYXlvdXRbbl19LHcucmVsYXlvdXRDYWxsYmFjaz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ3JhcGhEaXYsZT10aGlzLnhheGlzLHI9dGhpcy55YXhpcyxuPXQubGF5b3V0LGk9e30sbz1pW2UuX25hbWUrXCIucmFuZ2VcIl09ZS5yYW5nZS5zbGljZSgpLHM9aVtyLl9uYW1lK1wiLnJhbmdlXCJdPXIucmFuZ2Uuc2xpY2UoKTtpW2UuX25hbWUrXCIuYXV0b3JhbmdlXCJdPWUuYXV0b3JhbmdlLGlbci5fbmFtZStcIi5hdXRvcmFuZ2VcIl09ci5hdXRvcmFuZ2UsYS5jYWxsKFwiX3N0b3JlRGlyZWN0R1VJRWRpdFwiLHQubGF5b3V0LHQuX2Z1bGxMYXlvdXQuX3ByZUdVSSxpKTt2YXIgbD1uW2UuX25hbWVdO2wucmFuZ2U9byxsLmF1dG9yYW5nZT1lLmF1dG9yYW5nZTt2YXIgYz1uW3IuX25hbWVdO2MucmFuZ2U9cyxjLmF1dG9yYW5nZT1yLmF1dG9yYW5nZSxpLmxhc3RJbnB1dFRpbWU9dGhpcy5jYW1lcmEubGFzdElucHV0VGltZSx0LmVtaXQoXCJwbG90bHlfcmVsYXlvdXRcIixpKX0sdy5jYW1lcmFDaGFuZ2VkPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jYW1lcmE7dGhpcy5nbHBsb3Quc2V0RGF0YUJveCh0aGlzLmNhbGNEYXRhQm94KCkpO3ZhciBlPXRoaXMuY29tcHV0ZVRpY2tNYXJrcygpOyhmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8MjsrK3Ipe3ZhciBuPXRbcl0saT1lW3JdO2lmKG4ubGVuZ3RoIT09aS5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDsrK2EpaWYoblthXS54IT09aVthXS54KXJldHVybiEwfXJldHVybiExfSkoZSx0aGlzLmdscGxvdE9wdGlvbnMudGlja3MpJiYodGhpcy5nbHBsb3RPcHRpb25zLnRpY2tzPWUsdGhpcy5nbHBsb3RPcHRpb25zLmRhdGFCb3g9dC5kYXRhQm94LHRoaXMuZ2xwbG90LnVwZGF0ZSh0aGlzLmdscGxvdE9wdGlvbnMpLHRoaXMuaGFuZGxlQW5ub3RhdGlvbnMoKSl9LHcuaGFuZGxlQW5ub3RhdGlvbnM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5ncmFwaERpdixlPXRoaXMuZnVsbExheW91dC5hbm5vdGF0aW9ucyxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi54cmVmPT09dGhpcy54YXhpcy5faWQmJm4ueXJlZj09PXRoaXMueWF4aXMuX2lkJiZhLmdldENvbXBvbmVudE1ldGhvZChcImFubm90YXRpb25zXCIsXCJkcmF3T25lXCIpKHQscil9fSx3LmRlc3Ryb3k9ZnVuY3Rpb24oKXtpZih0aGlzLmdscGxvdCl7dmFyIHQ9dGhpcy50cmFjZXM7dCYmT2JqZWN0LmtleXModCkubWFwKGZ1bmN0aW9uKGUpe3RbZV0uZGlzcG9zZSgpLGRlbGV0ZSB0W2VdfSksdGhpcy5nbHBsb3QuZGlzcG9zZSgpLHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMuc3ZnQ29udGFpbmVyKSx0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLm1vdXNlQ29udGFpbmVyKSx0aGlzLmZ1bGxEYXRhPW51bGwsdGhpcy5nbHBsb3Q9bnVsbCx0aGlzLnN0b3BwZWQ9ITAsdGhpcy5jYW1lcmEubW91c2VMaXN0ZW5lci5lbmFibGVkPSExLHRoaXMubW91c2VDb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsdGhpcy5jYW1lcmEud2hlZWxMaXN0ZW5lciksdGhpcy5jYW1lcmE9bnVsbH19LHcucGxvdD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5nbHBsb3Q7dGhpcy51cGRhdGVSZWZzKHIpLHRoaXMueGF4aXMuY2xlYXJDYWxjKCksdGhpcy55YXhpcy5jbGVhckNhbGMoKSx0aGlzLnVwZGF0ZVRyYWNlcyh0LGUpLHRoaXMudXBkYXRlRngoci5kcmFnbW9kZSk7dmFyIGk9ci53aWR0aCxhPXIuaGVpZ2h0O3RoaXMudXBkYXRlU2l6ZSh0aGlzLmNhbnZhcyk7dmFyIG89dGhpcy5nbHBsb3RPcHRpb25zO28ubWVyZ2Uociksby5zY3JlZW5Cb3g9WzAsMCxpLGFdO3ZhciBzPXtfZnVsbExheW91dDp7X2F4aXNDb25zdHJhaW50R3JvdXBzOnRoaXMuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQuX2F4aXNDb25zdHJhaW50R3JvdXBzLHhheGlzOnRoaXMueGF4aXMseWF4aXM6dGhpcy55YXhpc319O20ocyx0aGlzLnhheGlzKSxtKHMsdGhpcy55YXhpcyk7dmFyIGwsYyx1PXIuX3NpemUsaD10aGlzLnhheGlzLmRvbWFpbixmPXRoaXMueWF4aXMuZG9tYWluO2ZvcihvLnZpZXdCb3g9W3UubCtoWzBdKnUudyx1LmIrZlswXSp1LmgsaS11LnItKDEtaFsxXSkqdS53LGEtdS50LSgxLWZbMV0pKnUuaF0sdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS53aWR0aD11LncqKGhbMV0taFswXSkrXCJweFwiLHRoaXMubW91c2VDb250YWluZXIuc3R5bGUuaGVpZ2h0PXUuaCooZlsxXS1mWzBdKStcInB4XCIsdGhpcy5tb3VzZUNvbnRhaW5lci5oZWlnaHQ9dS5oKihmWzFdLWZbMF0pLHRoaXMubW91c2VDb250YWluZXIuc3R5bGUubGVmdD11LmwraFswXSp1LncrXCJweFwiLHRoaXMubW91c2VDb250YWluZXIuc3R5bGUudG9wPXUudCsoMS1mWzFdKSp1LmgrXCJweFwiLGM9MDtjPDI7KytjKShsPXRoaXNbeFtjXV0pLl9sZW5ndGg9by52aWV3Qm94W2MrMl0tby52aWV3Qm94W2NdLHkodGhpcy5ncmFwaERpdixsKSxsLnNldFNjYWxlKCk7dihzKSxvLnRpY2tzPXRoaXMuY29tcHV0ZVRpY2tNYXJrcygpLG8uZGF0YUJveD10aGlzLmNhbGNEYXRhQm94KCksby5tZXJnZShyKSxuLnVwZGF0ZShvKSx0aGlzLmdscGxvdC5kcmF3KCl9LHcuY2FsY0RhdGFCb3g9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnhheGlzLGU9dGhpcy55YXhpcyxyPXQucmFuZ2Usbj1lLnJhbmdlLGk9dC5yMmwsYT1lLnIybDtyZXR1cm5baShyWzBdKSxhKG5bMF0pLGkoclsxXSksYShuWzFdKV19LHcuc2V0UmFuZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMueGF4aXMscj10aGlzLnlheGlzLG49ZS5sMnIsaT1yLmwycjtlLnJhbmdlPVtuKHRbMF0pLG4odFsyXSldLHIucmFuZ2U9W2kodFsxXSksaSh0WzNdKV19LHcudXBkYXRlVHJhY2VzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9T2JqZWN0LmtleXModGhpcy50cmFjZXMpO3RoaXMuZnVsbERhdGE9dDt0OmZvcihyPTA7cjxhLmxlbmd0aDtyKyspe3ZhciBvPWFbcl0scz10aGlzLnRyYWNlc1tvXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKWlmKChpPXRbbl0pLnVpZD09PW8mJmkudHlwZT09PXMudHlwZSljb250aW51ZSB0O3MuZGlzcG9zZSgpLGRlbGV0ZSB0aGlzLnRyYWNlc1tvXX1mb3Iocj0wO3I8dC5sZW5ndGg7cisrKXtpPXRbcl07dmFyIGw9ZVtyXSxjPXRoaXMudHJhY2VzW2kudWlkXTtjP2MudXBkYXRlKGksbCk6KGM9aS5fbW9kdWxlLnBsb3QodGhpcyxpLGwpLHRoaXMudHJhY2VzW2kudWlkXT1jKX10aGlzLmdscGxvdC5vYmplY3RzLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fdHJhY2UuaW5kZXgtZS5fdHJhY2UuaW5kZXh9KX0sdy51cGRhdGVGeD1mdW5jdGlvbih0KXtcImxhc3NvXCI9PT10fHxcInNlbGVjdFwiPT09dD8odGhpcy5waWNrQ2FudmFzLnN0eWxlW1wicG9pbnRlci1ldmVudHNcIl09XCJub25lXCIsdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZVtcInBvaW50ZXItZXZlbnRzXCJdPVwibm9uZVwiKToodGhpcy5waWNrQ2FudmFzLnN0eWxlW1wicG9pbnRlci1ldmVudHNcIl09XCJhdXRvXCIsdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZVtcInBvaW50ZXItZXZlbnRzXCJdPVwiYXV0b1wiKSx0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLmN1cnNvcj1cInBhblwiPT09dD9cIm1vdmVcIjpcInpvb21cIj09PXQ/XCJjcm9zc2hhaXJcIjpudWxsfSx3LmVtaXRQb2ludEFjdGlvbj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuPXQudHJhY2UudWlkLGk9dC5wb2ludEluZGV4LGE9MDthPHRoaXMuZnVsbERhdGEubGVuZ3RoO2ErKyl0aGlzLmZ1bGxEYXRhW2FdLnVpZD09PW4mJihyPXRoaXMuZnVsbERhdGFbYV0pO3ZhciBvPXt4OnQudHJhY2VDb29yZFswXSx5OnQudHJhY2VDb29yZFsxXSxjdXJ2ZU51bWJlcjpyLmluZGV4LHBvaW50TnVtYmVyOmksZGF0YTpyLl9pbnB1dCxmdWxsRGF0YTp0aGlzLmZ1bGxEYXRhLHhheGlzOnRoaXMueGF4aXMseWF4aXM6dGhpcy55YXhpc307cy5hcHBlbmRBcnJheVBvaW50VmFsdWUobyxyLGkpLHRoaXMuZ3JhcGhEaXYuZW1pdChlLHtwb2ludHM6W29dfSl9LHcuZHJhdz1mdW5jdGlvbigpe2lmKCF0aGlzLnN0b3BwZWQpe3JlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnJlZHJhdyk7dmFyIHQ9dGhpcy5nbHBsb3QsZT10aGlzLmNhbWVyYSxyPWUubW91c2VMaXN0ZW5lcixuPTE9PT10aGlzLmxhc3RCdXR0b25TdGF0ZSYmMD09PXIuYnV0dG9ucyxpPXRoaXMuZnVsbExheW91dDt0aGlzLmxhc3RCdXR0b25TdGF0ZT1yLmJ1dHRvbnMsdGhpcy5jYW1lcmFDaGFuZ2VkKCk7dmFyIGEsbz1yLngqdC5waXhlbFJhdGlvLGw9dGhpcy5jYW52YXMuaGVpZ2h0LXQucGl4ZWxSYXRpbypyLnk7aWYoZS5ib3hFbmFibGVkJiZcInpvb21cIj09PWkuZHJhZ21vZGUpe3RoaXMuc2VsZWN0Qm94LmVuYWJsZWQ9ITA7Zm9yKHZhciBjPXRoaXMuc2VsZWN0Qm94LnNlbGVjdEJveD1bTWF0aC5taW4oZS5ib3hTdGFydFswXSxlLmJveEVuZFswXSksTWF0aC5taW4oZS5ib3hTdGFydFsxXSxlLmJveEVuZFsxXSksTWF0aC5tYXgoZS5ib3hTdGFydFswXSxlLmJveEVuZFswXSksTWF0aC5tYXgoZS5ib3hTdGFydFsxXSxlLmJveEVuZFsxXSldLHU9MDt1PDI7dSsrKWUuYm94U3RhcnRbdV09PT1lLmJveEVuZFt1XSYmKGNbdV09dC5kYXRhQm94W3VdLGNbdSsyXT10LmRhdGFCb3hbdSsyXSk7dC5zZXREaXJ0eSgpfWVsc2UgaWYoIWUucGFubmluZyYmdGhpcy5pc01vdXNlT3Zlcil7dGhpcy5zZWxlY3RCb3guZW5hYmxlZD0hMTt2YXIgaD1pLl9zaXplLGY9dGhpcy54YXhpcy5kb21haW4scD10aGlzLnlheGlzLmRvbWFpbixkPShhPXQucGljayhvL3QucGl4ZWxSYXRpbytoLmwrZlswXSpoLncsbC90LnBpeGVsUmF0aW8tKGgudCsoMS1wWzFdKSpoLmgpKSkmJmEub2JqZWN0Ll90cmFjZS5oYW5kbGVQaWNrKGEpO2lmKGQmJm4mJnRoaXMuZW1pdFBvaW50QWN0aW9uKGQsXCJwbG90bHlfY2xpY2tcIiksYSYmXCJza2lwXCIhPT1hLm9iamVjdC5fdHJhY2UuaG92ZXJpbmZvJiZpLmhvdmVybW9kZSYmZCYmKCF0aGlzLmxhc3RQaWNrUmVzdWx0fHx0aGlzLmxhc3RQaWNrUmVzdWx0LnRyYWNlVWlkIT09ZC50cmFjZS51aWR8fHRoaXMubGFzdFBpY2tSZXN1bHQuZGF0YUNvb3JkWzBdIT09ZC5kYXRhQ29vcmRbMF18fHRoaXMubGFzdFBpY2tSZXN1bHQuZGF0YUNvb3JkWzFdIT09ZC5kYXRhQ29vcmRbMV0pKXt2YXIgZz1kO3RoaXMubGFzdFBpY2tSZXN1bHQ9e3RyYWNlVWlkOmQudHJhY2U/ZC50cmFjZS51aWQ6bnVsbCxkYXRhQ29vcmQ6ZC5kYXRhQ29vcmQuc2xpY2UoKX0sdGhpcy5zcGlrZXMudXBkYXRlKHtjZW50ZXI6YS5kYXRhQ29vcmR9KSxnLnNjcmVlbkNvb3JkPVsoKHQudmlld0JveFsyXS10LnZpZXdCb3hbMF0pKihhLmRhdGFDb29yZFswXS10LmRhdGFCb3hbMF0pLyh0LmRhdGFCb3hbMl0tdC5kYXRhQm94WzBdKSt0LnZpZXdCb3hbMF0pL3QucGl4ZWxSYXRpbywodGhpcy5jYW52YXMuaGVpZ2h0LSh0LnZpZXdCb3hbM10tdC52aWV3Qm94WzFdKSooYS5kYXRhQ29vcmRbMV0tdC5kYXRhQm94WzFdKS8odC5kYXRhQm94WzNdLXQuZGF0YUJveFsxXSktdC52aWV3Qm94WzFdKS90LnBpeGVsUmF0aW9dLHRoaXMuZW1pdFBvaW50QWN0aW9uKGQsXCJwbG90bHlfaG92ZXJcIik7dmFyIHY9dGhpcy5mdWxsRGF0YVtnLnRyYWNlLmluZGV4XXx8e30sbT1nLnBvaW50SW5kZXgseT1zLmNhc3RIb3ZlcmluZm8odixpLG0pO2lmKHkmJlwiYWxsXCIhPT15KXt2YXIgeD15LnNwbGl0KFwiK1wiKTstMT09PXguaW5kZXhPZihcInhcIikmJihnLnRyYWNlQ29vcmRbMF09dm9pZCAwKSwtMT09PXguaW5kZXhPZihcInlcIikmJihnLnRyYWNlQ29vcmRbMV09dm9pZCAwKSwtMT09PXguaW5kZXhPZihcInpcIikmJihnLnRyYWNlQ29vcmRbMl09dm9pZCAwKSwtMT09PXguaW5kZXhPZihcInRleHRcIikmJihnLnRleHRMYWJlbD12b2lkIDApLC0xPT09eC5pbmRleE9mKFwibmFtZVwiKSYmKGcubmFtZT12b2lkIDApfXMubG9uZUhvdmVyKHt4Omcuc2NyZWVuQ29vcmRbMF0seTpnLnNjcmVlbkNvb3JkWzFdLHhMYWJlbDp0aGlzLmhvdmVyRm9ybWF0dGVyKFwieGF4aXNcIixnLnRyYWNlQ29vcmRbMF0pLHlMYWJlbDp0aGlzLmhvdmVyRm9ybWF0dGVyKFwieWF4aXNcIixnLnRyYWNlQ29vcmRbMV0pLHpMYWJlbDpnLnRyYWNlQ29vcmRbMl0sdGV4dDpnLnRleHRMYWJlbCxuYW1lOmcubmFtZSxjb2xvcjpzLmNhc3RIb3Zlck9wdGlvbih2LG0sXCJiZ2NvbG9yXCIpfHxnLmNvbG9yLGJvcmRlckNvbG9yOnMuY2FzdEhvdmVyT3B0aW9uKHYsbSxcImJvcmRlcmNvbG9yXCIpLGZvbnRGYW1pbHk6cy5jYXN0SG92ZXJPcHRpb24odixtLFwiZm9udC5mYW1pbHlcIiksZm9udFNpemU6cy5jYXN0SG92ZXJPcHRpb24odixtLFwiZm9udC5zaXplXCIpLGZvbnRDb2xvcjpzLmNhc3RIb3Zlck9wdGlvbih2LG0sXCJmb250LmNvbG9yXCIpLG5hbWVMZW5ndGg6cy5jYXN0SG92ZXJPcHRpb24odixtLFwibmFtZWxlbmd0aFwiKSx0ZXh0QWxpZ246cy5jYXN0SG92ZXJPcHRpb24odixtLFwiYWxpZ25cIil9LHtjb250YWluZXI6dGhpcy5zdmdDb250YWluZXIsZ2Q6dGhpcy5ncmFwaERpdn0pfX1hfHx0aGlzLnVuaG92ZXIoKSx0LmRyYXcoKX19LHcudW5ob3Zlcj1mdW5jdGlvbigpe3RoaXMubGFzdFBpY2tSZXN1bHQmJih0aGlzLnNwaWtlcy51cGRhdGUoe30pLHRoaXMubGFzdFBpY2tSZXN1bHQ9bnVsbCx0aGlzLmdyYXBoRGl2LmVtaXQoXCJwbG90bHlfdW5ob3ZlclwiKSxzLmxvbmVVbmhvdmVyKHRoaXMuc3ZnQ29udGFpbmVyKSl9LHcuaG92ZXJGb3JtYXR0ZXI9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDAhPT1lKXt2YXIgcj10aGlzW3RdO3JldHVybiBvLnRpY2tUZXh0KHIsci5jMmwoZSksXCJob3ZlclwiKS50ZXh0fX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9saWIvc2hvd19ub193ZWJnbF9tc2dcIjo3MjIsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vY2FydGVzaWFuL2F1dG9yYW5nZVwiOjc0OCxcIi4uL2NhcnRlc2lhbi9jb25zdGFudHNcIjo3NTUsXCIuLi9jYXJ0ZXNpYW4vY29uc3RyYWludHNcIjo3NTYsXCIuL2NhbWVyYVwiOjc4NSxcIi4vY29udmVydFwiOjc4NixcImdsLXBsb3QyZFwiOjI4NCxcImdsLXNlbGVjdC1ib3hcIjoyOTYsXCJnbC1zcGlrZXMyZFwiOjMwNSxcIndlYmdsLWNvbnRleHRcIjo1NDF9XSw3ODk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbCxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzXCIpLGE9dChcIi4vc2NlbmVcIiksbz10KFwiLi4vZ2V0X2RhdGFcIikuZ2V0U3VicGxvdERhdGEscz10KFwiLi4vLi4vbGliXCIpLGw9dChcIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzXCIpO3IubmFtZT1cImdsM2RcIixyLmF0dHI9XCJzY2VuZVwiLHIuaWRSb290PVwic2NlbmVcIixyLmlkUmVnZXg9ci5hdHRyUmVnZXg9cy5jb3VudGVyUmVnZXgoXCJzY2VuZVwiKSxyLmF0dHJpYnV0ZXM9dChcIi4vbGF5b3V0L2F0dHJpYnV0ZXNcIiksci5sYXlvdXRBdHRyaWJ1dGVzPXQoXCIuL2xheW91dC9sYXlvdXRfYXR0cmlidXRlc1wiKSxyLmJhc2VMYXlvdXRBdHRyT3ZlcnJpZGVzPW4oe2hvdmVybGFiZWw6aS5ob3ZlcmxhYmVsfSxcInBsb3RcIixcIm5lc3RlZFwiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPXQoXCIuL2xheW91dC9kZWZhdWx0c1wiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj10Ll9mdWxsRGF0YSxuPWUuX3N1YnBsb3RzLmdsM2QsaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgcz1uW2ldLGw9byhyLFwiZ2wzZFwiLHMpLGM9ZVtzXSx1PWMuY2FtZXJhLGg9Yy5fc2NlbmU7aHx8KGg9bmV3IGEoe2lkOnMsZ3JhcGhEaXY6dCxjb250YWluZXI6dC5xdWVyeVNlbGVjdG9yKFwiLmdsLWNvbnRhaW5lclwiKSxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdCxwbG90R2xQaXhlbFJhdGlvOnQuX2NvbnRleHQucGxvdEdsUGl4ZWxSYXRpbyxjYW1lcmE6dX0sZSksYy5fc2NlbmU9aCksaC52aWV3SW5pdGlhbHx8KGgudmlld0luaXRpYWw9e3VwOnt4OnUudXAueCx5OnUudXAueSx6OnUudXAuen0sZXllOnt4OnUuZXllLngseTp1LmV5ZS55LHo6dS5leWUuen0sY2VudGVyOnt4OnUuY2VudGVyLngseTp1LmNlbnRlci55LHo6dS5jZW50ZXIuen19KSxoLnBsb3QobCxlLHQubGF5b3V0KX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLmdsM2R8fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTshZVtvXSYmbltvXS5fc2NlbmUmJihuW29dLl9zY2VuZS5kZXN0cm95KCksbi5faW5mb2xheWVyJiZuLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKFwiLmFubm90YXRpb24tXCIrbykucmVtb3ZlKCkpfX0sci50b1NWRz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLmdsM2Qsbj1lLl9zaXplLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9ZVtyW2ldXSxvPWEuZG9tYWluLHM9YS5fc2NlbmUsYz1zLnRvSW1hZ2UoXCJwbmdcIik7ZS5fZ2xpbWFnZXMuYXBwZW5kKFwic3ZnOmltYWdlXCIpLmF0dHIoe3htbG5zOmwuc3ZnLFwieGxpbms6aHJlZlwiOmMseDpuLmwrbi53Km8ueFswXSx5Om4udCtuLmgqKDEtby55WzFdKSx3aWR0aDpuLncqKG8ueFsxXS1vLnhbMF0pLGhlaWdodDpuLmgqKG8ueVsxXS1vLnlbMF0pLHByZXNlcnZlQXNwZWN0UmF0aW86XCJub25lXCJ9KSxzLmRlc3Ryb3koKX19LHIuY2xlYW5JZD1mdW5jdGlvbih0KXtpZih0Lm1hdGNoKC9ec2NlbmVbMC05XSokLykpe3ZhciBlPXQuc3Vic3RyKDUpO3JldHVyblwiMVwiPT09ZSYmKGU9XCJcIiksXCJzY2VuZVwiK2V9fSxyLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fc3VicGxvdHMuZ2wzZCxuPTA7bjxyLmxlbmd0aDtuKyspe2VbcltuXV0uX3NjZW5lLnVwZGF0ZUZ4KGUuZHJhZ21vZGUsZS5ob3Zlcm1vZGUpfX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZngvbGF5b3V0X2F0dHJpYnV0ZXNcIjo2MTgsXCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiOjY3OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi9nZXRfZGF0YVwiOjc4NCxcIi4vbGF5b3V0L2F0dHJpYnV0ZXNcIjo3OTAsXCIuL2xheW91dC9kZWZhdWx0c1wiOjc5NCxcIi4vbGF5b3V0L2xheW91dF9hdHRyaWJ1dGVzXCI6Nzk1LFwiLi9zY2VuZVwiOjc5OX1dLDc5MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17c2NlbmU6e3ZhbFR5cGU6XCJzdWJwbG90aWRcIixkZmx0Olwic2NlbmVcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn19fSx7fV0sNzkxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksaT10KFwiLi4vLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxvPXQoXCIuLi8uLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsO2UuZXhwb3J0cz1vKHt2aXNpYmxlOmkudmlzaWJsZSxzaG93c3Bpa2VzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITB9LHNwaWtlc2lkZXM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMH0sc3Bpa2V0aGlja25lc3M6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjJ9LHNwaWtlY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6bi5kZWZhdWx0TGluZX0sc2hvd2JhY2tncm91bmQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sYmFja2dyb3VuZGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OlwicmdiYSgyMDQsIDIwNCwgMjA0LCAwLjUpXCJ9LHNob3dheGVzbGFiZWxzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITB9LGNvbG9yOmkuY29sb3IsY2F0ZWdvcnlvcmRlcjppLmNhdGVnb3J5b3JkZXIsY2F0ZWdvcnlhcnJheTppLmNhdGVnb3J5YXJyYXksdGl0bGU6aS50aXRsZSx0eXBlOmEoe30saS50eXBlLHt2YWx1ZXM6W1wiLVwiLFwibGluZWFyXCIsXCJsb2dcIixcImRhdGVcIixcImNhdGVnb3J5XCJdfSksYXV0b3JhbmdlOmkuYXV0b3JhbmdlLHJhbmdlbW9kZTppLnJhbmdlbW9kZSxyYW5nZTphKHt9LGkucmFuZ2Use2l0ZW1zOlt7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwicGxvdFwiLGltcGxpZWRFZGl0czp7XCJeYXV0b3JhbmdlXCI6ITF9fSx7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwicGxvdFwiLGltcGxpZWRFZGl0czp7XCJeYXV0b3JhbmdlXCI6ITF9fV0sYW5pbTohMX0pLHRpY2ttb2RlOmkudGlja21vZGUsbnRpY2tzOmkubnRpY2tzLHRpY2swOmkudGljazAsZHRpY2s6aS5kdGljayx0aWNrdmFsczppLnRpY2t2YWxzLHRpY2t0ZXh0OmkudGlja3RleHQsdGlja3M6aS50aWNrcyxtaXJyb3I6aS5taXJyb3IsdGlja2xlbjppLnRpY2tsZW4sdGlja3dpZHRoOmkudGlja3dpZHRoLHRpY2tjb2xvcjppLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczppLnNob3d0aWNrbGFiZWxzLHRpY2tmb250OmkudGlja2ZvbnQsdGlja2FuZ2xlOmkudGlja2FuZ2xlLHRpY2twcmVmaXg6aS50aWNrcHJlZml4LHNob3d0aWNrcHJlZml4Omkuc2hvd3RpY2twcmVmaXgsdGlja3N1ZmZpeDppLnRpY2tzdWZmaXgsc2hvd3RpY2tzdWZmaXg6aS5zaG93dGlja3N1ZmZpeCxzaG93ZXhwb25lbnQ6aS5zaG93ZXhwb25lbnQsZXhwb25lbnRmb3JtYXQ6aS5leHBvbmVudGZvcm1hdCxzZXBhcmF0ZXRob3VzYW5kczppLnNlcGFyYXRldGhvdXNhbmRzLHRpY2tmb3JtYXQ6aS50aWNrZm9ybWF0LHRpY2tmb3JtYXRzdG9wczppLnRpY2tmb3JtYXRzdG9wcyxob3ZlcmZvcm1hdDppLmhvdmVyZm9ybWF0LHNob3dsaW5lOmkuc2hvd2xpbmUsbGluZWNvbG9yOmkubGluZWNvbG9yLGxpbmV3aWR0aDppLmxpbmV3aWR0aCxzaG93Z3JpZDppLnNob3dncmlkLGdyaWRjb2xvcjphKHt9LGkuZ3JpZGNvbG9yLHtkZmx0OlwicmdiKDIwNCwgMjA0LCAyMDQpXCJ9KSxncmlkd2lkdGg6aS5ncmlkd2lkdGgsemVyb2xpbmU6aS56ZXJvbGluZSx6ZXJvbGluZWNvbG9yOmkuemVyb2xpbmVjb2xvcix6ZXJvbGluZXdpZHRoOmkuemVyb2xpbmV3aWR0aCxfZGVwcmVjYXRlZDp7dGl0bGU6aS5fZGVwcmVjYXRlZC50aXRsZSx0aXRsZWZvbnQ6aS5fZGVwcmVjYXRlZC50aXRsZWZvbnR9fSxcInBsb3RcIixcImZyb20tcm9vdFwiKX0se1wiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi4vLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzXCI6NzYxfV0sNzkyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInRpbnljb2xvcjJcIikubWl4LGk9dChcIi4uLy4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLG89dChcIi4vYXhpc19hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL2NhcnRlc2lhbi90eXBlX2RlZmF1bHRzXCIpLGw9dChcIi4uLy4uL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzXCIpLGM9W1wieGF4aXNcIixcInlheGlzXCIsXCJ6YXhpc1wiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciB1LGg7ZnVuY3Rpb24gZih0LGUpe3JldHVybiBpLmNvZXJjZSh1LGgsbyx0LGUpfWZvcih2YXIgcD0wO3A8Yy5sZW5ndGg7cCsrKXt2YXIgZD1jW3BdO3U9dFtkXXx8e30sKGg9YS5uZXdDb250YWluZXIoZSxkKSkuX2lkPWRbMF0rci5zY2VuZSxoLl9uYW1lPWQscyh1LGgsZixyKSxsKHUsaCxmLHtmb250OnIuZm9udCxsZXR0ZXI6ZFswXSxkYXRhOnIuZGF0YSxzaG93R3JpZDohMCxub1RpY2tzb246ITAsYmdDb2xvcjpyLmJnQ29sb3IsY2FsZW5kYXI6ci5jYWxlbmRhcn0sci5mdWxsTGF5b3V0KSxmKFwiZ3JpZGNvbG9yXCIsbihoLmNvbG9yLHIuYmdDb2xvciwxMzYwMC8xODcpLnRvUmdiU3RyaW5nKCkpLGYoXCJ0aXRsZS50ZXh0XCIsZFswXSksaC5zZXRTY2FsZT1pLm5vb3AsZihcInNob3dzcGlrZXNcIikmJihmKFwic3Bpa2VzaWRlc1wiKSxmKFwic3Bpa2V0aGlja25lc3NcIiksZihcInNwaWtlY29sb3JcIixoLmNvbG9yKSksZihcInNob3dheGVzbGFiZWxzXCIpLGYoXCJzaG93YmFja2dyb3VuZFwiKSYmZihcImJhY2tncm91bmRjb2xvclwiKX19fSx7XCIuLi8uLi8uLi9saWJcIjo3MDEsXCIuLi8uLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vY2FydGVzaWFuL2F4aXNfZGVmYXVsdHNcIjo3NTEsXCIuLi8uLi9jYXJ0ZXNpYW4vdHlwZV9kZWZhdWx0c1wiOjc3MixcIi4vYXhpc19hdHRyaWJ1dGVzXCI6NzkxLHRpbnljb2xvcjI6NTIyfV0sNzkzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIiksaT10KFwiLi4vLi4vLi4vbGliXCIpLGE9W1wieGF4aXNcIixcInlheGlzXCIsXCJ6YXhpc1wiXTtmdW5jdGlvbiBvKCl7dGhpcy5ib3VuZHM9W1stMTAsLTEwLC0xMF0sWzEwLDEwLDEwXV0sdGhpcy50aWNrcz1bW10sW10sW11dLHRoaXMudGlja0VuYWJsZT1bITAsITAsITBdLHRoaXMudGlja0ZvbnQ9W1wic2Fucy1zZXJpZlwiLFwic2Fucy1zZXJpZlwiLFwic2Fucy1zZXJpZlwiXSx0aGlzLnRpY2tTaXplPVsxMiwxMiwxMl0sdGhpcy50aWNrQW5nbGU9WzAsMCwwXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja1BhZD1bMTgsMTgsMThdLHRoaXMubGFiZWxzPVtcInhcIixcInlcIixcInpcIl0sdGhpcy5sYWJlbEVuYWJsZT1bITAsITAsITBdLHRoaXMubGFiZWxGb250PVtcIk9wZW4gU2Fuc1wiLFwiT3BlbiBTYW5zXCIsXCJPcGVuIFNhbnNcIl0sdGhpcy5sYWJlbFNpemU9WzIwLDIwLDIwXSx0aGlzLmxhYmVsQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVsUGFkPVszMCwzMCwzMF0sdGhpcy5saW5lRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5saW5lTWlycm9yPVshMSwhMSwhMV0sdGhpcy5saW5lV2lkdGg9WzEsMSwxXSx0aGlzLmxpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGluZVRpY2tFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxpbmVUaWNrTWlycm9yPVshMSwhMSwhMV0sdGhpcy5saW5lVGlja0xlbmd0aD1bMTAsMTAsMTBdLHRoaXMubGluZVRpY2tXaWR0aD1bMSwxLDFdLHRoaXMubGluZVRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZ3JpZEVuYWJsZT1bITAsITAsITBdLHRoaXMuZ3JpZFdpZHRoPVsxLDEsMV0sdGhpcy5ncmlkQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnplcm9FbmFibGU9WyEwLCEwLCEwXSx0aGlzLnplcm9MaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnplcm9MaW5lV2lkdGg9WzIsMiwyXSx0aGlzLmJhY2tncm91bmRFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmJhY2tncm91bmRDb2xvcj1bWy44LC44LC44LC41XSxbLjgsLjgsLjgsLjVdLFsuOCwuOCwuOCwuNV1dLHRoaXMuX2RlZmF1bHRUaWNrUGFkPXRoaXMudGlja1BhZC5zbGljZSgpLHRoaXMuX2RlZmF1bHRMYWJlbFBhZD10aGlzLmxhYmVsUGFkLnNsaWNlKCksdGhpcy5fZGVmYXVsdExpbmVUaWNrTGVuZ3RoPXRoaXMubGluZVRpY2tMZW5ndGguc2xpY2UoKX1vLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8MzsrK3Ipe3ZhciBvPWVbYVtyXV07by52aXNpYmxlPyh0aGlzLmxhYmVsc1tyXT10Lm1ldGE/aS50ZW1wbGF0ZVN0cmluZyhvLnRpdGxlLnRleHQse21ldGE6dC5tZXRhfSk6by50aXRsZS50ZXh0LFwiZm9udFwiaW4gby50aXRsZSYmKG8udGl0bGUuZm9udC5jb2xvciYmKHRoaXMubGFiZWxDb2xvcltyXT1uKG8udGl0bGUuZm9udC5jb2xvcikpLG8udGl0bGUuZm9udC5mYW1pbHkmJih0aGlzLmxhYmVsRm9udFtyXT1vLnRpdGxlLmZvbnQuZmFtaWx5KSxvLnRpdGxlLmZvbnQuc2l6ZSYmKHRoaXMubGFiZWxTaXplW3JdPW8udGl0bGUuZm9udC5zaXplKSksXCJzaG93bGluZVwiaW4gbyYmKHRoaXMubGluZUVuYWJsZVtyXT1vLnNob3dsaW5lKSxcImxpbmVjb2xvclwiaW4gbyYmKHRoaXMubGluZUNvbG9yW3JdPW4oby5saW5lY29sb3IpKSxcImxpbmV3aWR0aFwiaW4gbyYmKHRoaXMubGluZVdpZHRoW3JdPW8ubGluZXdpZHRoKSxcInNob3dncmlkXCJpbiBvJiYodGhpcy5ncmlkRW5hYmxlW3JdPW8uc2hvd2dyaWQpLFwiZ3JpZGNvbG9yXCJpbiBvJiYodGhpcy5ncmlkQ29sb3Jbcl09bihvLmdyaWRjb2xvcikpLFwiZ3JpZHdpZHRoXCJpbiBvJiYodGhpcy5ncmlkV2lkdGhbcl09by5ncmlkd2lkdGgpLFwibG9nXCI9PT1vLnR5cGU/dGhpcy56ZXJvRW5hYmxlW3JdPSExOlwiemVyb2xpbmVcImluIG8mJih0aGlzLnplcm9FbmFibGVbcl09by56ZXJvbGluZSksXCJ6ZXJvbGluZWNvbG9yXCJpbiBvJiYodGhpcy56ZXJvTGluZUNvbG9yW3JdPW4oby56ZXJvbGluZWNvbG9yKSksXCJ6ZXJvbGluZXdpZHRoXCJpbiBvJiYodGhpcy56ZXJvTGluZVdpZHRoW3JdPW8uemVyb2xpbmV3aWR0aCksXCJ0aWNrc1wiaW4gbyYmby50aWNrcz90aGlzLmxpbmVUaWNrRW5hYmxlW3JdPSEwOnRoaXMubGluZVRpY2tFbmFibGVbcl09ITEsXCJ0aWNrbGVuXCJpbiBvJiYodGhpcy5saW5lVGlja0xlbmd0aFtyXT10aGlzLl9kZWZhdWx0TGluZVRpY2tMZW5ndGhbcl09by50aWNrbGVuKSxcInRpY2tjb2xvclwiaW4gbyYmKHRoaXMubGluZVRpY2tDb2xvcltyXT1uKG8udGlja2NvbG9yKSksXCJ0aWNrd2lkdGhcImluIG8mJih0aGlzLmxpbmVUaWNrV2lkdGhbcl09by50aWNrd2lkdGgpLFwidGlja2FuZ2xlXCJpbiBvJiYodGhpcy50aWNrQW5nbGVbcl09XCJhdXRvXCI9PT1vLnRpY2thbmdsZT8tMzYwMDpNYXRoLlBJKi1vLnRpY2thbmdsZS8xODApLFwic2hvd3RpY2tsYWJlbHNcImluIG8mJih0aGlzLnRpY2tFbmFibGVbcl09by5zaG93dGlja2xhYmVscyksXCJ0aWNrZm9udFwiaW4gbyYmKG8udGlja2ZvbnQuY29sb3ImJih0aGlzLnRpY2tDb2xvcltyXT1uKG8udGlja2ZvbnQuY29sb3IpKSxvLnRpY2tmb250LmZhbWlseSYmKHRoaXMudGlja0ZvbnRbcl09by50aWNrZm9udC5mYW1pbHkpLG8udGlja2ZvbnQuc2l6ZSYmKHRoaXMudGlja1NpemVbcl09by50aWNrZm9udC5zaXplKSksXCJtaXJyb3JcImluIG8/LTEhPT1bXCJ0aWNrc1wiLFwiYWxsXCIsXCJhbGx0aWNrc1wiXS5pbmRleE9mKG8ubWlycm9yKT8odGhpcy5saW5lVGlja01pcnJvcltyXT0hMCx0aGlzLmxpbmVNaXJyb3Jbcl09ITApOiEwPT09by5taXJyb3I/KHRoaXMubGluZVRpY2tNaXJyb3Jbcl09ITEsdGhpcy5saW5lTWlycm9yW3JdPSEwKToodGhpcy5saW5lVGlja01pcnJvcltyXT0hMSx0aGlzLmxpbmVNaXJyb3Jbcl09ITEpOnRoaXMubGluZU1pcnJvcltyXT0hMSxcInNob3diYWNrZ3JvdW5kXCJpbiBvJiYhMSE9PW8uc2hvd2JhY2tncm91bmQ/KHRoaXMuYmFja2dyb3VuZEVuYWJsZVtyXT0hMCx0aGlzLmJhY2tncm91bmRDb2xvcltyXT1uKG8uYmFja2dyb3VuZGNvbG9yKSk6dGhpcy5iYWNrZ3JvdW5kRW5hYmxlW3JdPSExKToodGhpcy50aWNrRW5hYmxlW3JdPSExLHRoaXMubGFiZWxFbmFibGVbcl09ITEsdGhpcy5saW5lRW5hYmxlW3JdPSExLHRoaXMubGluZVRpY2tFbmFibGVbcl09ITEsdGhpcy5ncmlkRW5hYmxlW3JdPSExLHRoaXMuemVyb0VuYWJsZVtyXT0hMSx0aGlzLmJhY2tncm91bmRFbmFibGVbcl09ITEpfX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IG87cmV0dXJuIHIubWVyZ2UodCxlKSxyfX0se1wiLi4vLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiOjcyNH1dLDc5NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi8uLi9saWJcIiksaT10KFwiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxhPXQoXCIuLi8uLi8uLi9yZWdpc3RyeVwiKSxvPXQoXCIuLi8uLi9zdWJwbG90X2RlZmF1bHRzXCIpLHM9dChcIi4vYXhpc19kZWZhdWx0c1wiKSxsPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLGM9dChcIi4uLy4uL2dldF9kYXRhXCIpLmdldFN1YnBsb3REYXRhLHU9XCJnbDNkXCI7ZnVuY3Rpb24gaCh0LGUscixuKXtmb3IodmFyIG89cihcImJnY29sb3JcIiksbD1pLmNvbWJpbmUobyxuLnBhcGVyX2JnY29sb3IpLGg9W1widXBcIixcImNlbnRlclwiLFwiZXllXCJdLGY9MDtmPGgubGVuZ3RoO2YrKylyKFwiY2FtZXJhLlwiK2hbZl0rXCIueFwiKSxyKFwiY2FtZXJhLlwiK2hbZl0rXCIueVwiKSxyKFwiY2FtZXJhLlwiK2hbZl0rXCIuelwiKTtyKFwiY2FtZXJhLnByb2plY3Rpb24udHlwZVwiKTt2YXIgcD0hIXIoXCJhc3BlY3RyYXRpby54XCIpJiYhIXIoXCJhc3BlY3RyYXRpby55XCIpJiYhIXIoXCJhc3BlY3RyYXRpby56XCIpLGQ9cihcImFzcGVjdG1vZGVcIixwP1wibWFudWFsXCI6XCJhdXRvXCIpO3B8fCh0LmFzcGVjdHJhdGlvPWUuYXNwZWN0cmF0aW89e3g6MSx5OjEsejoxfSxcIm1hbnVhbFwiPT09ZCYmKGUuYXNwZWN0bW9kZT1cImF1dG9cIiksdC5hc3BlY3Rtb2RlPWUuYXNwZWN0bW9kZSk7dmFyIGc9YyhuLmZ1bGxEYXRhLHUsbi5pZCk7cyh0LGUse2ZvbnQ6bi5mb250LHNjZW5lOm4uaWQsZGF0YTpnLGJnQ29sb3I6bCxjYWxlbmRhcjpuLmNhbGVuZGFyLGZ1bGxMYXlvdXQ6bi5mdWxsTGF5b3V0fSksYS5nZXRDb21wb25lbnRNZXRob2QoXCJhbm5vdGF0aW9uczNkXCIsXCJoYW5kbGVEZWZhdWx0c1wiKSh0LGUsbik7dmFyIHY9bi5nZXREZmx0RnJvbUxheW91dChcImRyYWdtb2RlXCIpO2lmKCExIT09diYmIXYpaWYodj1cIm9yYml0XCIsdC5jYW1lcmEmJnQuY2FtZXJhLnVwKXt2YXIgbT10LmNhbWVyYS51cC54LHk9dC5jYW1lcmEudXAueSx4PXQuY2FtZXJhLnVwLno7MCE9PXgmJihtJiZ5JiZ4P3gvTWF0aC5zcXJ0KG0qbSt5KnkreCp4KT4uOTk5JiYodj1cInR1cm50YWJsZVwiKTp2PVwidHVybnRhYmxlXCIpfWVsc2Ugdj1cInR1cm50YWJsZVwiO3IoXCJkcmFnbW9kZVwiLHYpLHIoXCJob3Zlcm1vZGVcIixuLmdldERmbHRGcm9tTGF5b3V0KFwiaG92ZXJtb2RlXCIpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUuX2Jhc2VQbG90TW9kdWxlcy5sZW5ndGg+MTtvKHQsZSxyLHt0eXBlOnUsYXR0cmlidXRlczpsLGhhbmRsZURlZmF1bHRzOmgsZnVsbExheW91dDplLGZvbnQ6ZS5mb250LGZ1bGxEYXRhOnIsZ2V0RGZsdEZyb21MYXlvdXQ6ZnVuY3Rpb24oZSl7aWYoIWkpcmV0dXJuIG4udmFsaWRhdGUodFtlXSxsW2VdKT90W2VdOnZvaWQgMH0scGFwZXJfYmdjb2xvcjplLnBhcGVyX2JnY29sb3IsY2FsZW5kYXI6ZS5jYWxlbmRhcn0pfX0se1wiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vLi4vZ2V0X2RhdGFcIjo3ODQsXCIuLi8uLi9zdWJwbG90X2RlZmF1bHRzXCI6ODI0LFwiLi9heGlzX2RlZmF1bHRzXCI6NzkyLFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjc5NX1dLDc5NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2F4aXNfYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9kb21haW5cIikuYXR0cmlidXRlcyxhPXQoXCIuLi8uLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsbz10KFwiLi4vLi4vLi4vbGliXCIpLmNvdW50ZXJSZWdleDtmdW5jdGlvbiBzKHQsZSxyKXtyZXR1cm57eDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6dCxlZGl0VHlwZTpcImNhbWVyYVwifSx5Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDplLGVkaXRUeXBlOlwiY2FtZXJhXCJ9LHo6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OnIsZWRpdFR5cGU6XCJjYW1lcmFcIn0sZWRpdFR5cGU6XCJjYW1lcmFcIn19ZS5leHBvcnRzPXtfYXJyYXlBdHRyUmVnZXhwczpbbyhcInNjZW5lXCIsXCIuYW5ub3RhdGlvbnNcIiwhMCldLGJnY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6XCJyZ2JhKDAsMCwwLDApXCIsZWRpdFR5cGU6XCJwbG90XCJ9LGNhbWVyYTp7dXA6YShzKDAsMCwxKSx7fSksY2VudGVyOmEocygwLDAsMCkse30pLGV5ZTphKHMoMS4yNSwxLjI1LDEuMjUpLHt9KSxwcm9qZWN0aW9uOnt0eXBlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJwZXJzcGVjdGl2ZVwiLFwib3J0aG9ncmFwaGljXCJdLGRmbHQ6XCJwZXJzcGVjdGl2ZVwiLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYW1lcmFcIn0sZG9tYWluOmkoe25hbWU6XCJzY2VuZVwiLGVkaXRUeXBlOlwicGxvdFwifSksYXNwZWN0bW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYXV0b1wiLFwiY3ViZVwiLFwiZGF0YVwiLFwibWFudWFsXCJdLGRmbHQ6XCJhdXRvXCIsZWRpdFR5cGU6XCJwbG90XCIsaW1wbGllZEVkaXRzOntcImFzcGVjdHJhdGlvLnhcIjp2b2lkIDAsXCJhc3BlY3RyYXRpby55XCI6dm9pZCAwLFwiYXNwZWN0cmF0aW8uelwiOnZvaWQgMH19LGFzcGVjdHJhdGlvOnt4Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZWRpdFR5cGU6XCJwbG90XCIsaW1wbGllZEVkaXRzOntcIl5hc3BlY3Rtb2RlXCI6XCJtYW51YWxcIn19LHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxlZGl0VHlwZTpcInBsb3RcIixpbXBsaWVkRWRpdHM6e1wiXmFzcGVjdG1vZGVcIjpcIm1hbnVhbFwifX0sejp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGVkaXRUeXBlOlwicGxvdFwiLGltcGxpZWRFZGl0czp7XCJeYXNwZWN0bW9kZVwiOlwibWFudWFsXCJ9fSxlZGl0VHlwZTpcInBsb3RcIixpbXBsaWVkRWRpdHM6e2FzcGVjdG1vZGU6XCJtYW51YWxcIn19LHhheGlzOm4seWF4aXM6bix6YXhpczpuLGRyYWdtb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJvcmJpdFwiLFwidHVybnRhYmxlXCIsXCJ6b29tXCIsXCJwYW5cIiwhMV0sZWRpdFR5cGU6XCJwbG90XCJ9LGhvdmVybW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiY2xvc2VzdFwiLCExXSxkZmx0OlwiY2xvc2VzdFwiLGVkaXRUeXBlOlwibW9kZWJhclwifSx1aXJldmlzaW9uOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJub25lXCJ9LGVkaXRUeXBlOlwicGxvdFwiLF9kZXByZWNhdGVkOntjYW1lcmFwb3NpdGlvbjp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixlZGl0VHlwZTpcImNhbWVyYVwifX19fSx7XCIuLi8uLi8uLi9saWJcIjo3MDEsXCIuLi8uLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vZG9tYWluXCI6Nzc0LFwiLi9heGlzX2F0dHJpYnV0ZXNcIjo3OTF9XSw3OTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiKSxpPVtcInhheGlzXCIsXCJ5YXhpc1wiLFwiemF4aXNcIl07ZnVuY3Rpb24gYSgpe3RoaXMuZW5hYmxlZD1bITAsITAsITBdLHRoaXMuY29sb3JzPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5kcmF3U2lkZXM9WyEwLCEwLCEwXSx0aGlzLmxpbmVXaWR0aD1bMSwxLDFdfWEucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8MzsrK2Upe3ZhciByPXRbaVtlXV07ci52aXNpYmxlPyh0aGlzLmVuYWJsZWRbZV09ci5zaG93c3Bpa2VzLHRoaXMuY29sb3JzW2VdPW4oci5zcGlrZWNvbG9yKSx0aGlzLmRyYXdTaWRlc1tlXT1yLnNwaWtlc2lkZXMsdGhpcy5saW5lV2lkdGhbZV09ci5zcGlrZXRoaWNrbmVzcyk6KHRoaXMuZW5hYmxlZFtlXT0hMSx0aGlzLmRyYXdTaWRlc1tlXT0hMSl9fSxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGE7cmV0dXJuIGUubWVyZ2UodCksZX19LHtcIi4uLy4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIjo3MjR9XSw3OTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuYXhlc09wdGlvbnMscj10LmdscGxvdC5heGVzUGl4ZWxzLHM9dC5mdWxsU2NlbmVMYXlvdXQsbD1bW10sW10sW11dLGM9MDtjPDM7KytjKXt2YXIgdT1zW2FbY11dO2lmKHUuX2xlbmd0aD0ocltjXS5oaS1yW2NdLmxvKSpyW2NdLnBpeGVsc1BlckRhdGFVbml0L3QuZGF0YVNjYWxlW2NdLE1hdGguYWJzKHUuX2xlbmd0aCk9PT0xLzB8fGlzTmFOKHUuX2xlbmd0aCkpbFtjXT1bXTtlbHNle3UuX2lucHV0X3JhbmdlPXUucmFuZ2Uuc2xpY2UoKSx1LnJhbmdlWzBdPXJbY10ubG8vdC5kYXRhU2NhbGVbY10sdS5yYW5nZVsxXT1yW2NdLmhpL3QuZGF0YVNjYWxlW2NdLHUuX209MS8odC5kYXRhU2NhbGVbY10qcltjXS5waXhlbHNQZXJEYXRhVW5pdCksdS5yYW5nZVswXT09PXUucmFuZ2VbMV0mJih1LnJhbmdlWzBdLT0xLHUucmFuZ2VbMV0rPTEpO3ZhciBoPXUudGlja21vZGU7aWYoXCJhdXRvXCI9PT11LnRpY2ttb2RlKXt1LnRpY2ttb2RlPVwibGluZWFyXCI7dmFyIGY9dS5udGlja3N8fGkuY29uc3RyYWluKHUuX2xlbmd0aC80MCw0LDkpO24uYXV0b1RpY2tzKHUsTWF0aC5hYnModS5yYW5nZVsxXS11LnJhbmdlWzBdKS9mKX1mb3IodmFyIHA9bi5jYWxjVGlja3ModSksZD0wO2Q8cC5sZW5ndGg7KytkKXBbZF0ueD1wW2RdLngqdC5kYXRhU2NhbGVbY10sXCJkYXRlXCI9PT11LnR5cGUmJihwW2RdLnRleHQ9cFtkXS50ZXh0LnJlcGxhY2UoL1xcPGJyXFw+L2csXCIgXCIpKTtsW2NdPXAsdS50aWNrbW9kZT1ofX1lLnRpY2tzPWw7Zm9yKHZhciBjPTA7YzwzOysrYyl7b1tjXT0uNSoodC5nbHBsb3QuYm91bmRzWzBdW2NdK3QuZ2xwbG90LmJvdW5kc1sxXVtjXSk7Zm9yKHZhciBkPTA7ZDwyOysrZCllLmJvdW5kc1tkXVtjXT10LmdscGxvdC5ib3VuZHNbZF1bY119dC5jb250b3VyTGV2ZWxzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkoMykscj0wO3I8MzsrK3Ipe2Zvcih2YXIgbj10W3JdLGk9bmV3IEFycmF5KG4ubGVuZ3RoKSxhPTA7YTxuLmxlbmd0aDsrK2EpaVthXT1uW2FdLng7ZVtyXT1pfXJldHVybiBlfShsKX07dmFyIG49dChcIi4uLy4uL2NhcnRlc2lhbi9heGVzXCIpLGk9dChcIi4uLy4uLy4uL2xpYlwiKSxhPVtcInhheGlzXCIsXCJ5YXhpc1wiLFwiemF4aXNcIl0sbz1bMCwwLDBdfSx7XCIuLi8uLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9jYXJ0ZXNpYW4vYXhlc1wiOjc0OX1dLDc5ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcixuLGk9WzAsMCwwLDBdO2ZvcihyPTA7cjw0Oysrcilmb3Iobj0wO248NDsrK24paVtuXSs9dFs0KnIrbl0qZVtyXTtyZXR1cm4gaX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LnByb2plY3Rpb24sbih0LnZpZXcsbih0Lm1vZGVsLFtlWzBdLGVbMV0sZVsyXSwxXSkpKX19LHt9XSw3OTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbixpLGE9dChcImdsLXBsb3QzZFwiKS5jcmVhdGVDYW1lcmEsbz10KFwiZ2wtcGxvdDNkXCIpLmNyZWF0ZVNjZW5lLHM9dChcIndlYmdsLWNvbnRleHRcIiksbD10KFwiaGFzLXBhc3NpdmUtZXZlbnRzXCIpLGM9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLHU9dChcIi4uLy4uL2xpYlwiKSxoPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxmPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4XCIpLHA9dChcIi4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIiksZD10KFwiLi4vLi4vbGliL3Nob3dfbm9fd2ViZ2xfbXNnXCIpLGc9dChcIi4vcHJvamVjdFwiKSx2PXQoXCIuL2xheW91dC9jb252ZXJ0XCIpLG09dChcIi4vbGF5b3V0L3NwaWtlc1wiKSx5PXQoXCIuL2xheW91dC90aWNrX21hcmtzXCIpO2Z1bmN0aW9uIHgodCxlLHIsYSl7aWYodC5pbml0aWFsaXplR0xDYW1lcmEoKSwhZnVuY3Rpb24odCxlLHIsYSxsKXt2YXIgYz17Y2FudmFzOmEsZ2w6bCxjb250YWluZXI6dC5jb250YWluZXIsYXhlczp0LmF4ZXNPcHRpb25zLHNwaWtlczp0LnNwaWtlT3B0aW9ucyxwaWNrUmFkaXVzOjEwLHNuYXBUb0RhdGE6ITAsYXV0b1NjYWxlOiEwLGF1dG9Cb3VuZHM6ITEsY2FtZXJhT2JqZWN0OmUscGl4ZWxSYXRpbzpyfTtpZih0LnN0YXRpY01vZGUpe2lmKCEoaXx8KG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSxpPXMoe2NhbnZhczpuLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMCxwcmVtdWx0aXBsaWVkQWxwaGE6ITAsYW50aWFsaWFzOiEwfSkpKSl0aHJvdyBuZXcgRXJyb3IoXCJlcnJvciBjcmVhdGluZyBzdGF0aWMgY2FudmFzL2NvbnRleHQgZm9yIGltYWdlIHNlcnZlclwiKTtjLnBpeGVsUmF0aW89dC5waXhlbFJhdGlvLGMuZ2w9aSxjLmNhbnZhcz1ufXRyeXt0LmdscGxvdD1vKGMpfWNhdGNoKHQpe3JldHVybiExfXJldHVybiEwfSh0LHQuY2FtZXJhLGUscixhKSlyZXR1cm4gZCh0KTt2YXIgYz10LmdyYXBoRGl2LHA9ZnVuY3Rpb24odCl7aWYoITEhPT10LmZ1bGxTY2VuZUxheW91dC5kcmFnbW9kZSl7dmFyIGU9e307ZVt0LmlkK1wiLmNhbWVyYVwiXT1BKHQuY2FtZXJhKSx0LnNhdmVDYW1lcmEoYy5sYXlvdXQpLHQuZ3JhcGhEaXYuZW1pdChcInBsb3RseV9yZWxheW91dFwiLGUpfX07cmV0dXJuIHQuZ2xwbG90LmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLGZ1bmN0aW9uKCl7cCh0KX0pLHQuZ2xwbG90LmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKFwid2hlZWxcIixmdW5jdGlvbigpe2MuX2NvbnRleHQuX3Njcm9sbFpvb20uZ2wzZCYmcCh0KX0sISFsJiZ7cGFzc2l2ZTohMX0pLHQuc3RhdGljTW9kZXx8dC5nbHBsb3QuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoXCJ3ZWJnbGNvbnRleHRsb3N0XCIsZnVuY3Rpb24oZSl7YyYmYy5lbWl0JiZjLmVtaXQoXCJwbG90bHlfd2ViZ2xjb250ZXh0bG9zdFwiLHtldmVudDplLGxheWVyOnQuaWR9KX0sITEpLHQuZ2xwbG90LmNhbWVyYT10LmNhbWVyYSx0LmdscGxvdC5vbmNvbnRleHRsb3NzPWZ1bmN0aW9uKCl7dC5yZWNvdmVyQ29udGV4dCgpfSx0LmdscGxvdC5vbnJlbmRlcj1mdW5jdGlvbih0KXt2YXIgZSxyPXQuZ3JhcGhEaXYsbj10LnN2Z0NvbnRhaW5lcixpPXQuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGE9aS53aWR0aCxvPWkuaGVpZ2h0O24uc2V0QXR0cmlidXRlTlMobnVsbCxcInZpZXdCb3hcIixcIjAgMCBcIithK1wiIFwiK28pLG4uc2V0QXR0cmlidXRlTlMobnVsbCxcIndpZHRoXCIsYSksbi5zZXRBdHRyaWJ1dGVOUyhudWxsLFwiaGVpZ2h0XCIsbykseSh0KSx0LmdscGxvdC5heGVzLnVwZGF0ZSh0LmF4ZXNPcHRpb25zKTtmb3IodmFyIHMsbD1PYmplY3Qua2V5cyh0LnRyYWNlcyksYz1udWxsLHA9dC5nbHBsb3Quc2VsZWN0aW9uLGQ9MDtkPGwubGVuZ3RoOysrZClcInNraXBcIiE9PShlPXQudHJhY2VzW2xbZF1dKS5kYXRhLmhvdmVyaW5mbyYmZS5oYW5kbGVQaWNrKHApJiYoYz1lKSxlLnNldENvbnRvdXJMZXZlbHMmJmUuc2V0Q29udG91ckxldmVscygpO2Z1bmN0aW9uIHYoZSxyKXt2YXIgbj10LmZ1bGxTY2VuZUxheW91dFtlXTtyZXR1cm4gaC50aWNrVGV4dChuLG4uZDJsKHIpLFwiaG92ZXJcIikudGV4dH1pZihudWxsIT09Yyl7dmFyIG09Zyh0LmdscGxvdC5jYW1lcmFQYXJhbXMscC5kYXRhQ29vcmRpbmF0ZSk7ZT1jLmRhdGE7dmFyIHgsYj1yLl9mdWxsRGF0YVtlLmluZGV4XSxfPXAuaW5kZXgsdz17eExhYmVsOnYoXCJ4YXhpc1wiLHAudHJhY2VDb29yZGluYXRlWzBdKSx5TGFiZWw6dihcInlheGlzXCIscC50cmFjZUNvb3JkaW5hdGVbMV0pLHpMYWJlbDp2KFwiemF4aXNcIixwLnRyYWNlQ29vcmRpbmF0ZVsyXSl9LGs9Zi5jYXN0SG92ZXJpbmZvKGIsdC5mdWxsTGF5b3V0LF8pLEE9KGt8fFwiXCIpLnNwbGl0KFwiK1wiKSxUPWsmJlwiYWxsXCI9PT1rO2IuaG92ZXJ0ZW1wbGF0ZXx8VHx8KC0xPT09QS5pbmRleE9mKFwieFwiKSYmKHcueExhYmVsPXZvaWQgMCksLTE9PT1BLmluZGV4T2YoXCJ5XCIpJiYody55TGFiZWw9dm9pZCAwKSwtMT09PUEuaW5kZXhPZihcInpcIikmJih3LnpMYWJlbD12b2lkIDApLC0xPT09QS5pbmRleE9mKFwidGV4dFwiKSYmKHAudGV4dExhYmVsPXZvaWQgMCksLTE9PT1BLmluZGV4T2YoXCJuYW1lXCIpJiYoYy5uYW1lPXZvaWQgMCkpO3ZhciBNPVtdO1wiY29uZVwiPT09ZS50eXBlfHxcInN0cmVhbXR1YmVcIj09PWUudHlwZT8ody51TGFiZWw9dihcInhheGlzXCIscC50cmFjZUNvb3JkaW5hdGVbM10pLChUfHwtMSE9PUEuaW5kZXhPZihcInVcIikpJiZNLnB1c2goXCJ1OiBcIit3LnVMYWJlbCksdy52TGFiZWw9dihcInlheGlzXCIscC50cmFjZUNvb3JkaW5hdGVbNF0pLChUfHwtMSE9PUEuaW5kZXhPZihcInZcIikpJiZNLnB1c2goXCJ2OiBcIit3LnZMYWJlbCksdy53TGFiZWw9dihcInpheGlzXCIscC50cmFjZUNvb3JkaW5hdGVbNV0pLChUfHwtMSE9PUEuaW5kZXhPZihcIndcIikpJiZNLnB1c2goXCJ3OiBcIit3LndMYWJlbCksdy5ub3JtTGFiZWw9cC50cmFjZUNvb3JkaW5hdGVbNl0udG9QcmVjaXNpb24oMyksKFR8fC0xIT09QS5pbmRleE9mKFwibm9ybVwiKSkmJk0ucHVzaChcIm5vcm06IFwiK3cubm9ybUxhYmVsKSxcInN0cmVhbXR1YmVcIj09PWUudHlwZSYmKHcuZGl2ZXJnZW5jZUxhYmVsPXAudHJhY2VDb29yZGluYXRlWzddLnRvUHJlY2lzaW9uKDMpLChUfHwtMSE9PUEuaW5kZXhPZihcImRpdmVyZ2VuY2VcIikpJiZNLnB1c2goXCJkaXZlcmdlbmNlOiBcIit3LmRpdmVyZ2VuY2VMYWJlbCkpLHAudGV4dExhYmVsJiZNLnB1c2gocC50ZXh0TGFiZWwpLHg9TS5qb2luKFwiPGJyPlwiKSk6XCJpc29zdXJmYWNlXCI9PT1lLnR5cGV8fFwidm9sdW1lXCI9PT1lLnR5cGU/KHcudmFsdWVMYWJlbD1oLnRpY2tUZXh0KHQubW9ja0F4aXMsdC5tb2NrQXhpcy5kMmwocC50cmFjZUNvb3JkaW5hdGVbM10pLFwiaG92ZXJcIikudGV4dCxNLnB1c2goXCJ2YWx1ZTogXCIrdy52YWx1ZUxhYmVsKSxwLnRleHRMYWJlbCYmTS5wdXNoKHAudGV4dExhYmVsKSx4PU0uam9pbihcIjxicj5cIikpOng9cC50ZXh0TGFiZWw7dmFyIFM9e3g6cC50cmFjZUNvb3JkaW5hdGVbMF0seTpwLnRyYWNlQ29vcmRpbmF0ZVsxXSx6OnAudHJhY2VDb29yZGluYXRlWzJdLGRhdGE6Yi5faW5wdXQsZnVsbERhdGE6YixjdXJ2ZU51bWJlcjpiLmluZGV4LHBvaW50TnVtYmVyOl99O2YuYXBwZW5kQXJyYXlQb2ludFZhbHVlKFMsYixfKSxlLl9tb2R1bGUuZXZlbnREYXRhJiYoUz1iLl9tb2R1bGUuZXZlbnREYXRhKFMscCxiLHt9LF8pKTt2YXIgRT17cG9pbnRzOltTXX07dC5mdWxsU2NlbmVMYXlvdXQuaG92ZXJtb2RlJiZmLmxvbmVIb3Zlcih7dHJhY2U6Yix4OiguNSsuNSptWzBdL21bM10pKmEseTooLjUtLjUqbVsxXS9tWzNdKSpvLHhMYWJlbDp3LnhMYWJlbCx5TGFiZWw6dy55TGFiZWwsekxhYmVsOncuekxhYmVsLHRleHQ6eCxuYW1lOmMubmFtZSxjb2xvcjpmLmNhc3RIb3Zlck9wdGlvbihiLF8sXCJiZ2NvbG9yXCIpfHxjLmNvbG9yLGJvcmRlckNvbG9yOmYuY2FzdEhvdmVyT3B0aW9uKGIsXyxcImJvcmRlcmNvbG9yXCIpLGZvbnRGYW1pbHk6Zi5jYXN0SG92ZXJPcHRpb24oYixfLFwiZm9udC5mYW1pbHlcIiksZm9udFNpemU6Zi5jYXN0SG92ZXJPcHRpb24oYixfLFwiZm9udC5zaXplXCIpLGZvbnRDb2xvcjpmLmNhc3RIb3Zlck9wdGlvbihiLF8sXCJmb250LmNvbG9yXCIpLG5hbWVMZW5ndGg6Zi5jYXN0SG92ZXJPcHRpb24oYixfLFwibmFtZWxlbmd0aFwiKSx0ZXh0QWxpZ246Zi5jYXN0SG92ZXJPcHRpb24oYixfLFwiYWxpZ25cIiksaG92ZXJ0ZW1wbGF0ZTp1LmNhc3RPcHRpb24oYixfLFwiaG92ZXJ0ZW1wbGF0ZVwiKSxob3ZlcnRlbXBsYXRlTGFiZWxzOnUuZXh0ZW5kRmxhdCh7fSxTLHcpLGV2ZW50RGF0YTpbU119LHtjb250YWluZXI6bixnZDpyfSkscC5idXR0b25zJiZwLmRpc3RhbmNlPDU/ci5lbWl0KFwicGxvdGx5X2NsaWNrXCIsRSk6ci5lbWl0KFwicGxvdGx5X2hvdmVyXCIsRSkscz1FfWVsc2UgZi5sb25lVW5ob3ZlcihuKSxyLmVtaXQoXCJwbG90bHlfdW5ob3ZlclwiLHMpO3QuZHJhd0Fubm90YXRpb25zKHQpfS5iaW5kKG51bGwsdCksdC50cmFjZXM9e30sdC5tYWtlNHRoRGltZW5zaW9uKCksITB9ZnVuY3Rpb24gYih0LGUpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksbj10LmNvbnRhaW5lcjt0aGlzLmdyYXBoRGl2PXQuZ3JhcGhEaXY7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcInN2Z1wiKTtpLnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixpLnN0eWxlLnRvcD1pLnN0eWxlLmxlZnQ9XCIwcHhcIixpLnN0eWxlLndpZHRoPWkuc3R5bGUuaGVpZ2h0PVwiMTAwJVwiLGkuc3R5bGVbXCJ6LWluZGV4XCJdPTIwLGkuc3R5bGVbXCJwb2ludGVyLWV2ZW50c1wiXT1cIm5vbmVcIixyLmFwcGVuZENoaWxkKGkpLHRoaXMuc3ZnQ29udGFpbmVyPWksci5pZD10LmlkLHIuc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwiLHIuc3R5bGUudG9wPXIuc3R5bGUubGVmdD1cIjBweFwiLHIuc3R5bGUud2lkdGg9ci5zdHlsZS5oZWlnaHQ9XCIxMDAlXCIsbi5hcHBlbmRDaGlsZChyKSx0aGlzLmZ1bGxMYXlvdXQ9ZSx0aGlzLmlkPXQuaWR8fFwic2NlbmVcIix0aGlzLmZ1bGxTY2VuZUxheW91dD1lW3RoaXMuaWRdLHRoaXMucGxvdEFyZ3M9W1tdLHt9LHt9XSx0aGlzLmF4ZXNPcHRpb25zPXYoZSxlW3RoaXMuaWRdKSx0aGlzLnNwaWtlT3B0aW9ucz1tKGVbdGhpcy5pZF0pLHRoaXMuY29udGFpbmVyPXIsdGhpcy5zdGF0aWNNb2RlPSEhdC5zdGF0aWNQbG90LHRoaXMucGl4ZWxSYXRpbz10aGlzLnBpeGVsUmF0aW98fHQucGxvdEdsUGl4ZWxSYXRpb3x8Mix0aGlzLmRhdGFTY2FsZT1bMSwxLDFdLHRoaXMuY29udG91ckxldmVscz1bW10sW10sW11dLHRoaXMuY29udmVydEFubm90YXRpb25zPWMuZ2V0Q29tcG9uZW50TWV0aG9kKFwiYW5ub3RhdGlvbnMzZFwiLFwiY29udmVydFwiKSx0aGlzLmRyYXdBbm5vdGF0aW9ucz1jLmdldENvbXBvbmVudE1ldGhvZChcImFubm90YXRpb25zM2RcIixcImRyYXdcIikseCh0aGlzLHRoaXMucGl4ZWxSYXRpbyl9dmFyIF89Yi5wcm90b3R5cGU7Xy5pbml0aWFsaXplR0xDYW1lcmE9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmZ1bGxTY2VuZUxheW91dC5jYW1lcmEsZT1cIm9ydGhvZ3JhcGhpY1wiPT09dC5wcm9qZWN0aW9uLnR5cGU7dGhpcy5jYW1lcmE9YSh0aGlzLmNvbnRhaW5lcix7Y2VudGVyOlt0LmNlbnRlci54LHQuY2VudGVyLnksdC5jZW50ZXIuel0sZXllOlt0LmV5ZS54LHQuZXllLnksdC5leWUuel0sdXA6W3QudXAueCx0LnVwLnksdC51cC56XSxfb3J0aG86ZSx6b29tTWluOi4wMSx6b29tTWF4OjEwMCxtb2RlOlwib3JiaXRcIn0pfSxfLnJlY292ZXJDb250ZXh0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMuZ2xwbG90LmdsLHI9dGhpcy5nbHBsb3QuY2FudmFzLG49dGhpcy5nbHBsb3QuY2FtZXJhLGk9dGhpcy5nbHBsb3QucGl4ZWxSYXRpbzt0aGlzLmdscGxvdC5kaXNwb3NlKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIGEoKXtlLmlzQ29udGV4dExvc3QoKT9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYSk6eCh0LG4saSxyKT90LnBsb3QuYXBwbHkodCx0LnBsb3RBcmdzKTp1LmVycm9yKFwiQ2F0YXN0cm9waGljIGFuZCB1bnJlY292ZXJhYmxlIFdlYkdMIGVycm9yLiBDb250ZXh0IGxvc3QuXCIpfSl9O3ZhciB3PVtcInhheGlzXCIsXCJ5YXhpc1wiLFwiemF4aXNcIl07ZnVuY3Rpb24gayh0LGUscil7Zm9yKHZhciBuPXQuZnVsbFNjZW5lTGF5b3V0LGk9MDtpPDM7aSsrKXt2YXIgYT13W2ldLG89YS5jaGFyQXQoMCkscz1uW2FdLGw9ZVtvXSxjPWVbbytcImNhbGVuZGFyXCJdLGg9ZVtcIl9cIitvK1wibGVuZ3RoXCJdO2lmKHUuaXNBcnJheU9yVHlwZWRBcnJheShsKSlmb3IodmFyIGYscD0wO3A8KGh8fGwubGVuZ3RoKTtwKyspaWYodS5pc0FycmF5T3JUeXBlZEFycmF5KGxbcF0pKWZvcih2YXIgZD0wO2Q8bFtwXS5sZW5ndGg7KytkKWY9cy5kMmwobFtwXVtkXSwwLGMpLCFpc05hTihmKSYmaXNGaW5pdGUoZikmJihyWzBdW2ldPU1hdGgubWluKHJbMF1baV0sZiksclsxXVtpXT1NYXRoLm1heChyWzFdW2ldLGYpKTtlbHNlIGY9cy5kMmwobFtwXSwwLGMpLCFpc05hTihmKSYmaXNGaW5pdGUoZikmJihyWzBdW2ldPU1hdGgubWluKHJbMF1baV0sZiksclsxXVtpXT1NYXRoLm1heChyWzFdW2ldLGYpKTtlbHNlIHJbMF1baV09TWF0aC5taW4oclswXVtpXSwwKSxyWzFdW2ldPU1hdGgubWF4KHJbMV1baV0saC0xKX19ZnVuY3Rpb24gQSh0KXtyZXR1cm57dXA6e3g6dC51cFswXSx5OnQudXBbMV0sejp0LnVwWzJdfSxjZW50ZXI6e3g6dC5jZW50ZXJbMF0seTp0LmNlbnRlclsxXSx6OnQuY2VudGVyWzJdfSxleWU6e3g6dC5leWVbMF0seTp0LmV5ZVsxXSx6OnQuZXllWzJdfSxwcm9qZWN0aW9uOnt0eXBlOiEwPT09dC5fb3J0aG8/XCJvcnRob2dyYXBoaWNcIjpcInBlcnNwZWN0aXZlXCJ9fX1fLnBsb3Q9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMucGxvdEFyZ3M9W3QsZSxyXSwhdGhpcy5nbHBsb3QuY29udGV4dExvc3Qpe3ZhciBuLGksYSxvLHMsbCxjPWVbdGhpcy5pZF0sdT1yW3RoaXMuaWRdO2MuYmdjb2xvcj90aGlzLmdscGxvdC5jbGVhckNvbG9yPXAoYy5iZ2NvbG9yKTp0aGlzLmdscGxvdC5jbGVhckNvbG9yPVswLDAsMCwwXSx0aGlzLmdscGxvdC5zbmFwVG9EYXRhPSEwLHRoaXMuZnVsbExheW91dD1lLHRoaXMuZnVsbFNjZW5lTGF5b3V0PWMsdGhpcy5nbHBsb3RMYXlvdXQ9Yyx0aGlzLmF4ZXNPcHRpb25zLm1lcmdlKGUsYyksdGhpcy5zcGlrZU9wdGlvbnMubWVyZ2UoYyksdGhpcy5zZXRDYW1lcmEoYy5jYW1lcmEpLHRoaXMudXBkYXRlRngoYy5kcmFnbW9kZSxjLmhvdmVybW9kZSksdGhpcy5jYW1lcmEuZW5hYmxlV2hlZWw9dGhpcy5ncmFwaERpdi5fY29udGV4dC5fc2Nyb2xsWm9vbS5nbDNkLHRoaXMuZ2xwbG90LnVwZGF0ZSh7fSksdGhpcy5zZXRDb252ZXJ0KHMpLHQ/QXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKTp0PVtdO3ZhciBoPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dO2ZvcihhPTA7YTx0Lmxlbmd0aDsrK2EpITA9PT0obj10W2FdKS52aXNpYmxlJiZrKHRoaXMsbixoKTshZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5mdWxsU2NlbmVMYXlvdXQsbj1yLmFubm90YXRpb25zfHxbXSxpPTA7aTwzO2krKylmb3IodmFyIGE9d1tpXSxvPWEuY2hhckF0KDApLHM9clthXSxsPTA7bDxuLmxlbmd0aDtsKyspe3ZhciBjPW5bbF07aWYoYy52aXNpYmxlKXt2YXIgdT1zLnIybChjW29dKTshaXNOYU4odSkmJmlzRmluaXRlKHUpJiYoZVswXVtpXT1NYXRoLm1pbihlWzBdW2ldLHUpLGVbMV1baV09TWF0aC5tYXgoZVsxXVtpXSx1KSl9fX0odGhpcyxoKTt2YXIgZj1bMSwxLDFdO2ZvcihvPTA7bzwzOysrbyloWzFdW29dPT09aFswXVtvXT9mW29dPTE6ZltvXT0xLyhoWzFdW29dLWhbMF1bb10pO2Zvcih0aGlzLmRhdGFTY2FsZT1mLHRoaXMuY29udmVydEFubm90YXRpb25zKHRoaXMpLGE9MDthPHQubGVuZ3RoOysrYSkhMD09PShuPXRbYV0pLnZpc2libGUmJigoaT10aGlzLnRyYWNlc1tuLnVpZF0pP2kuZGF0YS50eXBlPT09bi50eXBlP2kudXBkYXRlKG4pOihpLmRpc3Bvc2UoKSxpPW4uX21vZHVsZS5wbG90KHRoaXMsbiksdGhpcy50cmFjZXNbbi51aWRdPWkpOihpPW4uX21vZHVsZS5wbG90KHRoaXMsbiksdGhpcy50cmFjZXNbbi51aWRdPWkpLGkubmFtZT1uLm5hbWUpO3ZhciBkPU9iamVjdC5rZXlzKHRoaXMudHJhY2VzKTt0OmZvcihhPTA7YTxkLmxlbmd0aDsrK2Epe2ZvcihvPTA7bzx0Lmxlbmd0aDsrK28paWYodFtvXS51aWQ9PT1kW2FdJiYhMD09PXRbb10udmlzaWJsZSljb250aW51ZSB0OyhpPXRoaXMudHJhY2VzW2RbYV1dKS5kaXNwb3NlKCksZGVsZXRlIHRoaXMudHJhY2VzW2RbYV1dfXRoaXMuZ2xwbG90Lm9iamVjdHMuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0Ll90cmFjZS5kYXRhLmluZGV4LWUuX3RyYWNlLmRhdGEuaW5kZXh9KTt2YXIgZz1bWzAsMCwwXSxbMCwwLDBdXSx2PVtdLG09e307Zm9yKGE9MDthPDM7KythKXtpZigobD0ocz1jW3dbYV1dKS50eXBlKWluIG0/KG1bbF0uYWNjKj1mW2FdLG1bbF0uY291bnQrPTEpOm1bbF09e2FjYzpmW2FdLGNvdW50OjF9LHMuYXV0b3JhbmdlKXtnWzBdW2FdPTEvMCxnWzFdW2FdPS0xLzA7dmFyIHk9dGhpcy5nbHBsb3Qub2JqZWN0cyx4PXRoaXMuZnVsbFNjZW5lTGF5b3V0LmFubm90YXRpb25zfHxbXSxiPXMuX25hbWUuY2hhckF0KDApO2ZvcihvPTA7bzx5Lmxlbmd0aDtvKyspe3ZhciBfPXlbb10sQT1fLmJvdW5kcyxUPV8uX3RyYWNlLmRhdGEuX3BhZHx8MDtcIkVycm9yQmFyc1wiPT09Xy5jb25zdHJ1Y3Rvci5uYW1lJiZzLl9sb3dlckxvZ0Vycm9yQm91bmQ/Z1swXVthXT1NYXRoLm1pbihnWzBdW2FdLHMuX2xvd2VyTG9nRXJyb3JCb3VuZCk6Z1swXVthXT1NYXRoLm1pbihnWzBdW2FdLEFbMF1bYV0vZlthXS1UKSxnWzFdW2FdPU1hdGgubWF4KGdbMV1bYV0sQVsxXVthXS9mW2FdK1QpfWZvcihvPTA7bzx4Lmxlbmd0aDtvKyspe3ZhciBNPXhbb107aWYoTS52aXNpYmxlKXt2YXIgUz1zLnIybChNW2JdKTtnWzBdW2FdPU1hdGgubWluKGdbMF1bYV0sUyksZ1sxXVthXT1NYXRoLm1heChnWzFdW2FdLFMpfX1pZihcInJhbmdlbW9kZVwiaW4gcyYmXCJ0b3plcm9cIj09PXMucmFuZ2Vtb2RlJiYoZ1swXVthXT1NYXRoLm1pbihnWzBdW2FdLDApLGdbMV1bYV09TWF0aC5tYXgoZ1sxXVthXSwwKSksZ1swXVthXT5nWzFdW2FdKWdbMF1bYV09LTEsZ1sxXVthXT0xO2Vsc2V7dmFyIEU9Z1sxXVthXS1nWzBdW2FdO2dbMF1bYV0tPUUvMzIsZ1sxXVthXSs9RS8zMn1pZihcInJldmVyc2VkXCI9PT1zLmF1dG9yYW5nZSl7dmFyIEM9Z1swXVthXTtnWzBdW2FdPWdbMV1bYV0sZ1sxXVthXT1DfX1lbHNle3ZhciBMPXMucmFuZ2U7Z1swXVthXT1zLnIybChMWzBdKSxnWzFdW2FdPXMucjJsKExbMV0pfWdbMF1bYV09PT1nWzFdW2FdJiYoZ1swXVthXS09MSxnWzFdW2FdKz0xKSx2W2FdPWdbMV1bYV0tZ1swXVthXSx0aGlzLmdscGxvdC5ib3VuZHNbMF1bYV09Z1swXVthXSpmW2FdLHRoaXMuZ2xwbG90LmJvdW5kc1sxXVthXT1nWzFdW2FdKmZbYV19dmFyIHo9WzEsMSwxXTtmb3IoYT0wO2E8MzsrK2Epe3ZhciBPPW1bbD0ocz1jW3dbYV1dKS50eXBlXTt6W2FdPU1hdGgucG93KE8uYWNjLDEvTy5jb3VudCkvZlthXX12YXIgSTtpZihcImF1dG9cIj09PWMuYXNwZWN0bW9kZSlJPU1hdGgubWF4LmFwcGx5KG51bGwseikvTWF0aC5taW4uYXBwbHkobnVsbCx6KTw9ND96OlsxLDEsMV07ZWxzZSBpZihcImN1YmVcIj09PWMuYXNwZWN0bW9kZSlJPVsxLDEsMV07ZWxzZSBpZihcImRhdGFcIj09PWMuYXNwZWN0bW9kZSlJPXo7ZWxzZXtpZihcIm1hbnVhbFwiIT09Yy5hc3BlY3Rtb2RlKXRocm93IG5ldyBFcnJvcihcInNjZW5lLmpzIGFzcGVjdFJhdGlvIHdhcyBub3Qgb25lIG9mIHRoZSBlbnVtZXJhdGVkIHR5cGVzXCIpO3ZhciBEPWMuYXNwZWN0cmF0aW87ST1bRC54LEQueSxELnpdfWMuYXNwZWN0cmF0aW8ueD11LmFzcGVjdHJhdGlvLng9SVswXSxjLmFzcGVjdHJhdGlvLnk9dS5hc3BlY3RyYXRpby55PUlbMV0sYy5hc3BlY3RyYXRpby56PXUuYXNwZWN0cmF0aW8uej1JWzJdLHRoaXMuZ2xwbG90LmFzcGVjdD1JO3ZhciBQPWMuZG9tYWlufHxudWxsLFI9ZS5fc2l6ZXx8bnVsbDtpZihQJiZSKXt2YXIgRj10aGlzLmNvbnRhaW5lci5zdHlsZTtGLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixGLmxlZnQ9Ui5sK1AueFswXSpSLncrXCJweFwiLEYudG9wPVIudCsoMS1QLnlbMV0pKlIuaCtcInB4XCIsRi53aWR0aD1SLncqKFAueFsxXS1QLnhbMF0pK1wicHhcIixGLmhlaWdodD1SLmgqKFAueVsxXS1QLnlbMF0pK1wicHhcIn10aGlzLmdscGxvdC5yZWRyYXcoKX19LF8uZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZ2xwbG90JiYodGhpcy5jYW1lcmEubW91c2VMaXN0ZW5lci5lbmFibGVkPSExLHRoaXMuY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ3aGVlbFwiLHRoaXMuY2FtZXJhLndoZWVsTGlzdGVuZXIpLHRoaXMuY2FtZXJhPXRoaXMuZ2xwbG90LmNhbWVyYT1udWxsLHRoaXMuZ2xwbG90LmRpc3Bvc2UoKSx0aGlzLmNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyKSx0aGlzLmdscGxvdD1udWxsKX0sXy5nZXRDYW1lcmE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbHBsb3QuY2FtZXJhLnZpZXcucmVjYWxjTWF0cml4KHRoaXMuY2FtZXJhLnZpZXcubGFzdFQoKSksQSh0aGlzLmdscGxvdC5jYW1lcmEpfSxfLnNldENhbWVyYT1mdW5jdGlvbih0KXt2YXIgZTt0aGlzLmdscGxvdC5jYW1lcmEubG9va0F0LmFwcGx5KHRoaXMsW1soZT10KS5leWUueCxlLmV5ZS55LGUuZXllLnpdLFtlLmNlbnRlci54LGUuY2VudGVyLnksZS5jZW50ZXIuel0sW2UudXAueCxlLnVwLnksZS51cC56XV0pO3ZhciByPVwib3J0aG9ncmFwaGljXCI9PT10LnByb2plY3Rpb24udHlwZTtpZihyIT09dGhpcy5nbHBsb3QuY2FtZXJhLl9vcnRobyl7dGhpcy5nbHBsb3QucmVkcmF3KCk7dmFyIG49dGhpcy5nbHBsb3QucGl4ZWxSYXRpbyxpPXRoaXMuZ2xwbG90LmNsZWFyQ29sb3I7dGhpcy5nbHBsb3QuZ2wuY2xlYXJDb2xvcihpWzBdLGlbMV0saVsyXSxpWzNdKSx0aGlzLmdscGxvdC5nbC5jbGVhcih0aGlzLmdscGxvdC5nbC5ERVBUSF9CVUZGRVJfQklUfHRoaXMuZ2xwbG90LmdsLkNPTE9SX0JVRkZFUl9CSVQpLHRoaXMuZ2xwbG90LmRpc3Bvc2UoKSx4KHRoaXMsbiksdGhpcy5nbHBsb3QuY2FtZXJhLl9vcnRobz1yfX0sXy5zYXZlQ2FtZXJhPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZnVsbExheW91dCxyPXRoaXMuZ2V0Q2FtZXJhKCksbj11Lm5lc3RlZFByb3BlcnR5KHQsdGhpcy5pZCtcIi5jYW1lcmFcIiksaT1uLmdldCgpLGE9ITE7ZnVuY3Rpb24gbyh0LGUscixuKXt2YXIgaT1bXCJ1cFwiLFwiY2VudGVyXCIsXCJleWVcIl0sYT1bXCJ4XCIsXCJ5XCIsXCJ6XCJdO3JldHVybiBlW2lbcl1dJiZ0W2lbcl1dW2Fbbl1dPT09ZVtpW3JdXVthW25dXX1pZih2b2lkIDA9PT1pKWE9ITA7ZWxzZXtmb3IodmFyIHM9MDtzPDM7cysrKWZvcih2YXIgbD0wO2w8MztsKyspaWYoIW8ocixpLHMsbCkpe2E9ITA7YnJlYWt9KCFpLnByb2plY3Rpb258fHIucHJvamVjdGlvbiYmci5wcm9qZWN0aW9uLnR5cGUhPT1pLnByb2plY3Rpb24udHlwZSkmJihhPSEwKX1pZihhKXt2YXIgaD17fTtoW3RoaXMuaWQrXCIuY2FtZXJhXCJdPWksYy5jYWxsKFwiX3N0b3JlRGlyZWN0R1VJRWRpdFwiLHQsZS5fcHJlR1VJLGgpLG4uc2V0KHIpLHUubmVzdGVkUHJvcGVydHkoZSx0aGlzLmlkK1wiLmNhbWVyYVwiKS5zZXQocil9cmV0dXJuIGF9LF8udXBkYXRlRng9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmNhbWVyYTtpZihyKWlmKFwib3JiaXRcIj09PXQpci5tb2RlPVwib3JiaXRcIixyLmtleUJpbmRpbmdNb2RlPVwicm90YXRlXCI7ZWxzZSBpZihcInR1cm50YWJsZVwiPT09dCl7ci51cD1bMCwwLDFdLHIubW9kZT1cInR1cm50YWJsZVwiLHIua2V5QmluZGluZ01vZGU9XCJyb3RhdGVcIjt2YXIgbj10aGlzLmdyYXBoRGl2LGk9bi5fZnVsbExheW91dCxhPXRoaXMuZnVsbFNjZW5lTGF5b3V0LmNhbWVyYSxvPWEudXAueCxzPWEudXAueSxsPWEudXAuejtpZihsL01hdGguc3FydChvKm8rcypzK2wqbCk8Ljk5OSl7dmFyIGg9dGhpcy5pZCtcIi5jYW1lcmEudXBcIixmPXt4OjAseTowLHo6MX0scD17fTtwW2hdPWY7dmFyIGQ9bi5sYXlvdXQ7Yy5jYWxsKFwiX3N0b3JlRGlyZWN0R1VJRWRpdFwiLGQsaS5fcHJlR1VJLHApLGEudXA9Zix1Lm5lc3RlZFByb3BlcnR5KGQsaCkuc2V0KGYpfX1lbHNlIHIua2V5QmluZGluZ01vZGU9dDt0aGlzLmZ1bGxTY2VuZUxheW91dC5ob3Zlcm1vZGU9ZX0sXy50b0ltYWdlPWZ1bmN0aW9uKHQpe3R8fCh0PVwicG5nXCIpLHRoaXMuc3RhdGljTW9kZSYmdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQobiksdGhpcy5nbHBsb3QucmVkcmF3KCk7dmFyIGU9dGhpcy5nbHBsb3QuZ2wscj1lLmRyYXdpbmdCdWZmZXJXaWR0aCxpPWUuZHJhd2luZ0J1ZmZlckhlaWdodDtlLmJpbmRGcmFtZWJ1ZmZlcihlLkZSQU1FQlVGRkVSLG51bGwpO3ZhciBhPW5ldyBVaW50OEFycmF5KHIqaSo0KTtlLnJlYWRQaXhlbHMoMCwwLHIsaSxlLlJHQkEsZS5VTlNJR05FRF9CWVRFLGEpO2Zvcih2YXIgbz0wLHM9aS0xO288czsrK28sLS1zKWZvcih2YXIgbD0wO2w8cjsrK2wpZm9yKHZhciBjPTA7Yzw0OysrYyl7dmFyIHU9YVs0KihyKm8rbCkrY107YVs0KihyKm8rbCkrY109YVs0KihyKnMrbCkrY10sYVs0KihyKnMrbCkrY109dX12YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO2gud2lkdGg9cixoLmhlaWdodD1pO3ZhciBmLHA9aC5nZXRDb250ZXh0KFwiMmRcIiksZD1wLmNyZWF0ZUltYWdlRGF0YShyLGkpO3N3aXRjaChkLmRhdGEuc2V0KGEpLHAucHV0SW1hZ2VEYXRhKGQsMCwwKSx0KXtjYXNlXCJqcGVnXCI6Zj1oLnRvRGF0YVVSTChcImltYWdlL2pwZWdcIik7YnJlYWs7Y2FzZVwid2VicFwiOmY9aC50b0RhdGFVUkwoXCJpbWFnZS93ZWJwXCIpO2JyZWFrO2RlZmF1bHQ6Zj1oLnRvRGF0YVVSTChcImltYWdlL3BuZ1wiKX1yZXR1cm4gdGhpcy5zdGF0aWNNb2RlJiZ0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZChuKSxmfSxfLnNldENvbnZlcnQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PDM7dCsrKXt2YXIgZT10aGlzLmZ1bGxTY2VuZUxheW91dFt3W3RdXTtoLnNldENvbnZlcnQoZSx0aGlzLmZ1bGxMYXlvdXQpLGUuc2V0U2NhbGU9dS5ub29wfX0sXy5tYWtlNHRoRGltZW5zaW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5ncmFwaERpdi5fZnVsbExheW91dDt0aGlzLm1vY2tBeGlzPXt0eXBlOlwibGluZWFyXCIsc2hvd2V4cG9uZW50OlwiYWxsXCIsZXhwb25lbnRmb3JtYXQ6XCJCXCJ9LGguc2V0Q29udmVydCh0aGlzLm1vY2tBeGlzLHQpfSxlLmV4cG9ydHM9Yn0se1wiLi4vLi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9zaG93X25vX3dlYmdsX21zZ1wiOjcyMixcIi4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIjo3MjQsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9sYXlvdXQvY29udmVydFwiOjc5MyxcIi4vbGF5b3V0L3NwaWtlc1wiOjc5NixcIi4vbGF5b3V0L3RpY2tfbWFya3NcIjo3OTcsXCIuL3Byb2plY3RcIjo3OTgsXCJnbC1wbG90M2RcIjoyODcsXCJoYXMtcGFzc2l2ZS1ldmVudHNcIjo0MDQsXCJ3ZWJnbC1jb250ZXh0XCI6NTQxfV0sODAwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe249bnx8dC5sZW5ndGg7Zm9yKHZhciBpPW5ldyBBcnJheShuKSxhPTA7YTxuO2ErKylpW2FdPVt0W2FdLGVbYV0sclthXV07cmV0dXJuIGl9fSx7fV0sODAxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vZm9udF9hdHRyaWJ1dGVzXCIpLGk9dChcIi4vYW5pbWF0aW9uX2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzXCIpLG89dChcIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9sYXlvdXRfYXR0cmlidXRlc1wiKSxzPXQoXCIuL3BhZF9hdHRyaWJ1dGVzXCIpLGw9dChcIi4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxjPW4oe2VkaXRUeXBlOlwiY2FsY1wifSk7Yy5mYW1pbHkuZGZsdD0nXCJPcGVuIFNhbnNcIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLGMuc2l6ZS5kZmx0PTEyLGMuY29sb3IuZGZsdD1hLmRlZmF1bHRMaW5lLGUuZXhwb3J0cz17Zm9udDpjLHRpdGxlOnt0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJsYXlvdXRzdHlsZVwifSxmb250Om4oe2VkaXRUeXBlOlwibGF5b3V0c3R5bGVcIn0pLHhyZWY6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsZGZsdDpcImNvbnRhaW5lclwiLHZhbHVlczpbXCJjb250YWluZXJcIixcInBhcGVyXCJdLGVkaXRUeXBlOlwibGF5b3V0c3R5bGVcIn0seXJlZjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIixkZmx0OlwiY29udGFpbmVyXCIsdmFsdWVzOltcImNvbnRhaW5lclwiLFwicGFwZXJcIl0sZWRpdFR5cGU6XCJsYXlvdXRzdHlsZVwifSx4Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDouNSxlZGl0VHlwZTpcImxheW91dHN0eWxlXCJ9LHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OlwiYXV0b1wiLGVkaXRUeXBlOlwibGF5b3V0c3R5bGVcIn0seGFuY2hvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIixkZmx0OlwiYXV0b1wiLHZhbHVlczpbXCJhdXRvXCIsXCJsZWZ0XCIsXCJjZW50ZXJcIixcInJpZ2h0XCJdLGVkaXRUeXBlOlwibGF5b3V0c3R5bGVcIn0seWFuY2hvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIixkZmx0OlwiYXV0b1wiLHZhbHVlczpbXCJhdXRvXCIsXCJ0b3BcIixcIm1pZGRsZVwiLFwiYm90dG9tXCJdLGVkaXRUeXBlOlwibGF5b3V0c3R5bGVcIn0scGFkOmwocyh7ZWRpdFR5cGU6XCJsYXlvdXRzdHlsZVwifSkse30pLGVkaXRUeXBlOlwibGF5b3V0c3R5bGVcIn0sYXV0b3NpemU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMSxlZGl0VHlwZTpcIm5vbmVcIn0sd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MTAsZGZsdDo3MDAsZWRpdFR5cGU6XCJwbG90XCJ9LGhlaWdodDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjoxMCxkZmx0OjQ1MCxlZGl0VHlwZTpcInBsb3RcIn0sbWFyZ2luOntsOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDo4MCxlZGl0VHlwZTpcInBsb3RcIn0scjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6ODAsZWRpdFR5cGU6XCJwbG90XCJ9LHQ6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjEwMCxlZGl0VHlwZTpcInBsb3RcIn0sYjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6ODAsZWRpdFR5cGU6XCJwbG90XCJ9LHBhZDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTpcInBsb3RcIn0sYXV0b2V4cGFuZDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwicGxvdFwifSxlZGl0VHlwZTpcInBsb3RcIn0scGFwZXJfYmdjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDphLmJhY2tncm91bmQsZWRpdFR5cGU6XCJwbG90XCJ9LHBsb3RfYmdjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDphLmJhY2tncm91bmQsZWRpdFR5cGU6XCJsYXlvdXRzdHlsZVwifSxzZXBhcmF0b3JzOnt2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJwbG90XCJ9LGhpZGVzb3VyY2VzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEsZWRpdFR5cGU6XCJwbG90XCJ9LHNob3dsZWdlbmQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZWRpdFR5cGU6XCJsZWdlbmRcIn0sY29sb3J3YXk6e3ZhbFR5cGU6XCJjb2xvcmxpc3RcIixkZmx0OmEuZGVmYXVsdHMsZWRpdFR5cGU6XCJjYWxjXCJ9LGNvbG9yc2NhbGU6byxkYXRhcmV2aXNpb246e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImNhbGNcIn0sdWlyZXZpc2lvbjp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwibm9uZVwifSxlZGl0cmV2aXNpb246e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcIm5vbmVcIn0sc2VsZWN0aW9ucmV2aXNpb246e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcIm5vbmVcIn0sdGVtcGxhdGU6e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImNhbGNcIn0sbW9kZWJhcjp7b3JpZW50YXRpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInZcIixcImhcIl0sZGZsdDpcImhcIixlZGl0VHlwZTpcIm1vZGViYXJcIn0sYmdjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJtb2RlYmFyXCJ9LGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcIm1vZGViYXJcIn0sYWN0aXZlY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwibW9kZWJhclwifSx1aXJldmlzaW9uOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJub25lXCJ9LGVkaXRUeXBlOlwibW9kZWJhclwifSxtZXRhOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwicGxvdFwifSx0cmFuc2l0aW9uOmwoe30saS50cmFuc2l0aW9uLHtlZGl0VHlwZTpcIm5vbmVcIn0pLF9kZXByZWNhdGVkOnt0aXRsZTp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwibGF5b3V0c3R5bGVcIn0sdGl0bGVmb250Om4oe2VkaXRUeXBlOlwibGF5b3V0c3R5bGVcIn0pfX19LHtcIi4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiOjU3NyxcIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9sYXlvdXRfYXR0cmlidXRlc1wiOjU5MSxcIi4uL2xpYi9leHRlbmRcIjo2OTEsXCIuL2FuaW1hdGlvbl9hdHRyaWJ1dGVzXCI6NzQ0LFwiLi9mb250X2F0dHJpYnV0ZXNcIjo3NzUsXCIuL3BhZF9hdHRyaWJ1dGVzXCI6ODA5fV0sODAyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtyZXF1aXJlZFZlcnNpb246XCIwLjQ1LjBcIixzdHlsZVVybFByZWZpeDpcIm1hcGJveDovL3N0eWxlcy9tYXBib3gvXCIsc3R5bGVVcmxTdWZmaXg6XCJ2OVwiLGNvbnRyb2xDb250YWluZXJDbGFzc05hbWU6XCJtYXBib3hnbC1jb250cm9sLWNvbnRhaW5lclwiLHdyb25nVmVyc2lvbkVycm9yTXNnOltcIllvdXIgY3VzdG9tIHBsb3RseS5qcyBidW5kbGUgaXMgbm90IHVzaW5nIHRoZSBjb3JyZWN0IG1hcGJveC1nbCB2ZXJzaW9uXCIsXCJQbGVhc2UgaW5zdGFsbCBtYXBib3gtZ2xAMC40NS4wLlwiXS5qb2luKFwiXFxuXCIpLG5vQWNjZXNzVG9rZW5FcnJvck1zZzpbXCJNaXNzaW5nIE1hcGJveCBhY2Nlc3MgdG9rZW4uXCIsXCJNYXBib3ggdHJhY2UgdHlwZSByZXF1aXJlIGEgTWFwYm94IGFjY2VzcyB0b2tlbiB0byBiZSByZWdpc3RlcmVkLlwiLFwiRm9yIGV4YW1wbGU6XCIsXCIgIFBsb3RseS5wbG90KGdkLCBkYXRhLCBsYXlvdXQsIHsgbWFwYm94QWNjZXNzVG9rZW46ICdteS1hY2Nlc3MtdG9rZW4nIH0pO1wiLFwiTW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vaGVscC9kZWZpbmUtYWNjZXNzLXRva2VuL1wiXS5qb2luKFwiXFxuXCIpLG1hcE9uRXJyb3JNc2c6XCJNYXBib3ggZXJyb3IuXCIsc3R5bGVSdWxlczp7bWFwOlwib3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO1wiLFwibWlzc2luZy1jc3NcIjpcImRpc3BsYXk6bm9uZVwifX19LHt9XSw4MDM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuc3BsaXQoXCIgXCIpLGk9clswXSxhPXJbMV0sbz1uLmlzQXJyYXlPclR5cGVkQXJyYXkoZSk/bi5tZWFuKGUpOmUscz0uNStvLzEwMCxsPTEuNStvLzEwMCxjPVtcIlwiLFwiXCJdLHU9WzAsMF07c3dpdGNoKGkpe2Nhc2VcInRvcFwiOmNbMF09XCJ0b3BcIix1WzFdPS1sO2JyZWFrO2Nhc2VcImJvdHRvbVwiOmNbMF09XCJib3R0b21cIix1WzFdPWx9c3dpdGNoKGEpe2Nhc2VcImxlZnRcIjpjWzFdPVwicmlnaHRcIix1WzBdPS1zO2JyZWFrO2Nhc2VcInJpZ2h0XCI6Y1sxXT1cImxlZnRcIix1WzBdPXN9cmV0dXJue2FuY2hvcjpjWzBdJiZjWzFdP2Muam9pbihcIi1cIik6Y1swXT9jWzBdOmNbMV0/Y1sxXTpcImNlbnRlclwiLG9mZnNldDp1fX19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDgwNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJtYXBib3gtZ2xcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCIpLmdldFN1YnBsb3RDYWxjRGF0YSxvPXQoXCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiKSxzPXQoXCIuL21hcGJveFwiKSxsPXQoXCIuL2NvbnN0YW50c1wiKTtmb3IodmFyIGMgaW4gbC5zdHlsZVJ1bGVzKWkuYWRkU3R5bGVSdWxlKFwiLm1hcGJveGdsLVwiK2MsbC5zdHlsZVJ1bGVzW2NdKTtyLm5hbWU9XCJtYXBib3hcIixyLmF0dHI9XCJzdWJwbG90XCIsci5pZFJvb3Q9XCJtYXBib3hcIixyLmlkUmVnZXg9ci5hdHRyUmVnZXg9aS5jb3VudGVyUmVnZXgoXCJtYXBib3hcIiksci5hdHRyaWJ1dGVzPXtzdWJwbG90Ont2YWxUeXBlOlwic3VicGxvdGlkXCIsZGZsdDpcIm1hcGJveFwiLGVkaXRUeXBlOlwiY2FsY1wifX0sci5sYXlvdXRBdHRyaWJ1dGVzPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9dChcIi4vbGF5b3V0X2RlZmF1bHRzXCIpLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxvPWUuX3N1YnBsb3RzLm1hcGJveDtpZihuLnZlcnNpb24hPT1sLnJlcXVpcmVkVmVyc2lvbil0aHJvdyBuZXcgRXJyb3IobC53cm9uZ1ZlcnNpb25FcnJvck1zZyk7dmFyIGM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0O2lmKFwiXCI9PT10Ll9jb250ZXh0Lm1hcGJveEFjY2Vzc1Rva2VuKXJldHVyblwiXCI7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPXJbZVtuXV07aWYoaS5hY2Nlc3N0b2tlbilyZXR1cm4gaS5hY2Nlc3N0b2tlbn10aHJvdyBuZXcgRXJyb3IobC5ub0FjY2Vzc1Rva2VuRXJyb3JNc2cpfSh0LG8pO24uYWNjZXNzVG9rZW49Yztmb3IodmFyIHU9MDt1PG8ubGVuZ3RoO3UrKyl7dmFyIGg9b1t1XSxmPWEocixcIm1hcGJveFwiLGgpLHA9ZVtoXSxkPXAuX3N1YnBsb3Q7ZHx8KGQ9cyh7Z2Q6dCxjb250YWluZXI6ZS5fZ2xjb250YWluZXIubm9kZSgpLGlkOmgsZnVsbExheW91dDplLHN0YXRpY1Bsb3Q6dC5fY29udGV4dC5zdGF0aWNQbG90fSksZVtoXS5fc3VicGxvdD1kKSxkLnZpZXdJbml0aWFsfHwoZC52aWV3SW5pdGlhbD17Y2VudGVyOmkuZXh0ZW5kRmxhdCh7fSxwLmNlbnRlciksem9vbTpwLnpvb20sYmVhcmluZzpwLmJlYXJpbmcscGl0Y2g6cC5waXRjaH0pLGQucGxvdChmLGUsdC5fcHJvbWlzZXMpfX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9bi5fc3VicGxvdHMubWFwYm94fHxbXSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV07IWVbb10mJm5bb10uX3N1YnBsb3QmJm5bb10uX3N1YnBsb3QuZGVzdHJveSgpfX0sci50b1NWRz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLm1hcGJveCxuPWUuX3NpemUsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1lW3JbaV1dLHM9YS5kb21haW4sbD1hLl9zdWJwbG90LGM9bC50b0ltYWdlKFwicG5nXCIpO2UuX2dsaW1hZ2VzLmFwcGVuZChcInN2ZzppbWFnZVwiKS5hdHRyKHt4bWxuczpvLnN2ZyxcInhsaW5rOmhyZWZcIjpjLHg6bi5sK24udypzLnhbMF0seTpuLnQrbi5oKigxLXMueVsxXSksd2lkdGg6bi53KihzLnhbMV0tcy54WzBdKSxoZWlnaHQ6bi5oKihzLnlbMV0tcy55WzBdKSxwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwibm9uZVwifSksbC5kZXN0cm95KCl9fSxyLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fc3VicGxvdHMubWFwYm94LG49MDtuPHIubGVuZ3RoO24rKyl7ZVtyW25dXS5fc3VicGxvdC51cGRhdGVGeChlKX19fSx7XCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiOjY3OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCI6Nzg0LFwiLi9jb25zdGFudHNcIjo4MDIsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6ODA2LFwiLi9sYXlvdXRfZGVmYXVsdHNcIjo4MDcsXCIuL21hcGJveFwiOjgwOCxcIm1hcGJveC1nbFwiOjQxOX1dLDgwNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9jb252ZXJ0X3RleHRfb3B0c1wiKTtmdW5jdGlvbiBhKHQsZSl7dGhpcy5tYXBib3g9dCx0aGlzLm1hcD10Lm1hcCx0aGlzLnVpZD10LnVpZCtcIi1sYXllclwiK2UsdGhpcy5pZFNvdXJjZT10aGlzLnVpZCtcIi1zb3VyY2VcIix0aGlzLmlkTGF5ZXI9dGhpcy51aWQrXCItbGF5ZXJcIix0aGlzLnNvdXJjZVR5cGU9bnVsbCx0aGlzLnNvdXJjZT1udWxsLHRoaXMubGF5ZXJUeXBlPW51bGwsdGhpcy5iZWxvdz1udWxsLHRoaXMudmlzaWJsZT0hMX12YXIgbz1hLnByb3RvdHlwZTtmdW5jdGlvbiBzKHQpe3ZhciBlPXQuc291cmNlO3JldHVybiB0LnZpc2libGUmJihuLmlzUGxhaW5PYmplY3QoZSl8fFwic3RyaW5nXCI9PXR5cGVvZiBlJiZlLmxlbmd0aD4wKX1mdW5jdGlvbiBsKHQpe3ZhciBlPXt9LHI9e307c3dpdGNoKHQudHlwZSl7Y2FzZVwiY2lyY2xlXCI6bi5leHRlbmRGbGF0KHIse1wiY2lyY2xlLXJhZGl1c1wiOnQuY2lyY2xlLnJhZGl1cyxcImNpcmNsZS1jb2xvclwiOnQuY29sb3IsXCJjaXJjbGUtb3BhY2l0eVwiOnQub3BhY2l0eX0pO2JyZWFrO2Nhc2VcImxpbmVcIjpuLmV4dGVuZEZsYXQocix7XCJsaW5lLXdpZHRoXCI6dC5saW5lLndpZHRoLFwibGluZS1jb2xvclwiOnQuY29sb3IsXCJsaW5lLW9wYWNpdHlcIjp0Lm9wYWNpdHksXCJsaW5lLWRhc2hhcnJheVwiOnQubGluZS5kYXNofSk7YnJlYWs7Y2FzZVwiZmlsbFwiOm4uZXh0ZW5kRmxhdChyLHtcImZpbGwtY29sb3JcIjp0LmNvbG9yLFwiZmlsbC1vdXRsaW5lLWNvbG9yXCI6dC5maWxsLm91dGxpbmVjb2xvcixcImZpbGwtb3BhY2l0eVwiOnQub3BhY2l0eX0pO2JyZWFrO2Nhc2VcInN5bWJvbFwiOnZhciBhPXQuc3ltYm9sLG89aShhLnRleHRwb3NpdGlvbixhLmljb25zaXplKTtuLmV4dGVuZEZsYXQoZSx7XCJpY29uLWltYWdlXCI6YS5pY29uK1wiLTE1XCIsXCJpY29uLXNpemVcIjphLmljb25zaXplLzEwLFwidGV4dC1maWVsZFwiOmEudGV4dCxcInRleHQtc2l6ZVwiOmEudGV4dGZvbnQuc2l6ZSxcInRleHQtYW5jaG9yXCI6by5hbmNob3IsXCJ0ZXh0LW9mZnNldFwiOm8ub2Zmc2V0LFwic3ltYm9sLXBsYWNlbWVudFwiOmEucGxhY2VtZW50fSksbi5leHRlbmRGbGF0KHIse1wiaWNvbi1jb2xvclwiOnQuY29sb3IsXCJ0ZXh0LWNvbG9yXCI6YS50ZXh0Zm9udC5jb2xvcixcInRleHQtb3BhY2l0eVwiOnQub3BhY2l0eX0pfXJldHVybntsYXlvdXQ6ZSxwYWludDpyfX1vLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLnZpc2libGU/dGhpcy5uZWVkc05ld1NvdXJjZSh0KT8odGhpcy5yZW1vdmVMYXllcigpLHRoaXMudXBkYXRlU291cmNlKHQpLHRoaXMudXBkYXRlTGF5ZXIodCkpOnRoaXMubmVlZHNOZXdMYXllcih0KT90aGlzLnVwZGF0ZUxheWVyKHQpOnRoaXMudXBkYXRlU3R5bGUodCk6KHRoaXMudXBkYXRlU291cmNlKHQpLHRoaXMudXBkYXRlTGF5ZXIodCkpLHRoaXMudmlzaWJsZT1zKHQpfSxvLm5lZWRzTmV3U291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNvdXJjZVR5cGUhPT10LnNvdXJjZXR5cGV8fHRoaXMuc291cmNlIT09dC5zb3VyY2V8fHRoaXMubGF5ZXJUeXBlIT09dC50eXBlfSxvLm5lZWRzTmV3TGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGF5ZXJUeXBlIT09dC50eXBlfHx0aGlzLmJlbG93IT09dC5iZWxvd30sby51cGRhdGVTb3VyY2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tYXA7aWYoZS5nZXRTb3VyY2UodGhpcy5pZFNvdXJjZSkmJmUucmVtb3ZlU291cmNlKHRoaXMuaWRTb3VyY2UpLHRoaXMuc291cmNlVHlwZT10LnNvdXJjZXR5cGUsdGhpcy5zb3VyY2U9dC5zb3VyY2Uscyh0KSl7dmFyIHI9ZnVuY3Rpb24odCl7dmFyIGUscj10LnNvdXJjZXR5cGUsbj10LnNvdXJjZSxpPXt0eXBlOnJ9O1wiZ2VvanNvblwiPT09cj9lPVwiZGF0YVwiOlwidmVjdG9yXCI9PT1yJiYoZT1cInN0cmluZ1wiPT10eXBlb2Ygbj9cInVybFwiOlwidGlsZXNcIik7cmV0dXJuIGlbZV09bixpfSh0KTtlLmFkZFNvdXJjZSh0aGlzLmlkU291cmNlLHIpfX0sby51cGRhdGVMYXllcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm1hcCxyPWwodCk7dGhpcy5yZW1vdmVMYXllcigpLHRoaXMubGF5ZXJUeXBlPXQudHlwZSxzKHQpJiZlLmFkZExheWVyKHtpZDp0aGlzLmlkTGF5ZXIsc291cmNlOnRoaXMuaWRTb3VyY2UsXCJzb3VyY2UtbGF5ZXJcIjp0LnNvdXJjZWxheWVyfHxcIlwiLHR5cGU6dC50eXBlLG1pbnpvb206dC5taW56b29tLG1heHpvb206dC5tYXh6b29tLGxheW91dDpyLmxheW91dCxwYWludDpyLnBhaW50fSx0LmJlbG93KX0sby51cGRhdGVTdHlsZT1mdW5jdGlvbih0KXtpZihzKHQpKXt2YXIgZT1sKHQpO3RoaXMubWFwYm94LnNldE9wdGlvbnModGhpcy5pZExheWVyLFwic2V0TGF5b3V0UHJvcGVydHlcIixlLmxheW91dCksdGhpcy5tYXBib3guc2V0T3B0aW9ucyh0aGlzLmlkTGF5ZXIsXCJzZXRQYWludFByb3BlcnR5XCIsZS5wYWludCl9fSxvLnJlbW92ZUxheWVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXA7dC5nZXRMYXllcih0aGlzLmlkTGF5ZXIpJiZ0LnJlbW92ZUxheWVyKHRoaXMuaWRMYXllcil9LG8uZGlzcG9zZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMubWFwO3QucmVtb3ZlTGF5ZXIodGhpcy5pZExheWVyKSx0LnJlbW92ZVNvdXJjZSh0aGlzLmlkU291cmNlKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1uZXcgYSh0LGUpO3JldHVybiBuLnVwZGF0ZShyKSxufX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi9jb252ZXJ0X3RleHRfb3B0c1wiOjgwM31dLDgwNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKS5kZWZhdWx0TGluZSxhPXQoXCIuLi9kb21haW5cIikuYXR0cmlidXRlcyxvPXQoXCIuLi9mb250X2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlc1wiKS50ZXh0cG9zaXRpb24sbD10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbCxjPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLnRlbXBsYXRlZEFycmF5LHU9byh7fSk7dS5mYW1pbHkuZGZsdD1cIk9wZW4gU2FucyBSZWd1bGFyLCBBcmlhbCBVbmljb2RlIE1TIFJlZ3VsYXJcIiwoZS5leHBvcnRzPWwoe19hcnJheUF0dHJSZWdleHBzOltuLmNvdW50ZXJSZWdleChcIm1hcGJveFwiLFwiLmxheWVyc1wiLCEwKV0sZG9tYWluOmEoe25hbWU6XCJtYXBib3hcIn0pLGFjY2Vzc3Rva2VuOnt2YWxUeXBlOlwic3RyaW5nXCIsbm9CbGFuazohMCxzdHJpY3Q6ITB9LHN0eWxlOnt2YWxUeXBlOlwiYW55XCIsdmFsdWVzOltcImJhc2ljXCIsXCJzdHJlZXRzXCIsXCJvdXRkb29yc1wiLFwibGlnaHRcIixcImRhcmtcIixcInNhdGVsbGl0ZVwiLFwic2F0ZWxsaXRlLXN0cmVldHNcIl0sZGZsdDpcImJhc2ljXCJ9LGNlbnRlcjp7bG9uOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowfSxsYXQ6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjB9fSx6b29tOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxfSxiZWFyaW5nOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowfSxwaXRjaDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MH0sbGF5ZXJzOmMoXCJsYXllclwiLHt2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITB9LHNvdXJjZXR5cGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImdlb2pzb25cIixcInZlY3RvclwiXSxkZmx0OlwiZ2VvanNvblwifSxzb3VyY2U6e3ZhbFR5cGU6XCJhbnlcIn0sc291cmNlbGF5ZXI6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCJ9LHR5cGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImNpcmNsZVwiLFwibGluZVwiLFwiZmlsbFwiLFwic3ltYm9sXCJdLGRmbHQ6XCJjaXJjbGVcIn0sYmVsb3c6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCJ9LGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0Oml9LG9wYWNpdHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjF9LG1pbnpvb206e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MjQsZGZsdDowfSxtYXh6b29tOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjI0LGRmbHQ6MjR9LGNpcmNsZTp7cmFkaXVzOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxNX19LGxpbmU6e3dpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoyfSxkYXNoOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwifX0sZmlsbDp7b3V0bGluZWNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0Oml9fSxzeW1ib2w6e2ljb246e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwibWFya2VyXCJ9LGljb25zaXplOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxMH0sdGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIn0scGxhY2VtZW50Ont2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJwb2ludFwiLFwibGluZVwiLFwibGluZS1jZW50ZXJcIl0sZGZsdDpcInBvaW50XCJ9LHRleHRmb250OnUsdGV4dHBvc2l0aW9uOm4uZXh0ZW5kRmxhdCh7fSxzLHthcnJheU9rOiExfSl9fSl9LFwicGxvdFwiLFwiZnJvbS1yb290XCIpKS51aXJldmlzaW9uPXt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJub25lXCJ9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzXCI6MTA1MixcIi4uL2RvbWFpblwiOjc3NCxcIi4uL2ZvbnRfYXR0cmlidXRlc1wiOjc3NX1dLDgwNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vc3VicGxvdF9kZWZhdWx0c1wiKSxhPXQoXCIuLi9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIiksbz10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKTtmdW5jdGlvbiBzKHQsZSxyLG4pe3IoXCJhY2Nlc3N0b2tlblwiLG4uYWNjZXNzVG9rZW4pLHIoXCJzdHlsZVwiKSxyKFwiY2VudGVyLmxvblwiKSxyKFwiY2VudGVyLmxhdFwiKSxyKFwiem9vbVwiKSxyKFwiYmVhcmluZ1wiKSxyKFwicGl0Y2hcIiksYSh0LGUse25hbWU6XCJsYXllcnNcIixoYW5kbGVJdGVtRGVmYXVsdHM6bH0pLGUuX2lucHV0PXR9ZnVuY3Rpb24gbCh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8ubGF5ZXJzLHIsaSl9aWYocihcInZpc2libGVcIikpe3ZhciBpPXIoXCJzb3VyY2V0eXBlXCIpO3IoXCJzb3VyY2VcIiksXCJ2ZWN0b3JcIj09PWkmJnIoXCJzb3VyY2VsYXllclwiKTt2YXIgYT1yKFwidHlwZVwiKTtyKFwiYmVsb3dcIikscihcImNvbG9yXCIpLHIoXCJvcGFjaXR5XCIpLHIoXCJtaW56b29tXCIpLHIoXCJtYXh6b29tXCIpLFwiY2lyY2xlXCI9PT1hJiZyKFwiY2lyY2xlLnJhZGl1c1wiKSxcImxpbmVcIj09PWEmJihyKFwibGluZS53aWR0aFwiKSxyKFwibGluZS5kYXNoXCIpKSxcImZpbGxcIj09PWEmJnIoXCJmaWxsLm91dGxpbmVjb2xvclwiKSxcInN5bWJvbFwiPT09YSYmKHIoXCJzeW1ib2wuaWNvblwiKSxyKFwic3ltYm9sLmljb25zaXplXCIpLHIoXCJzeW1ib2wudGV4dFwiKSxuLmNvZXJjZUZvbnQocixcInN5bWJvbC50ZXh0Zm9udFwiKSxyKFwic3ltYm9sLnRleHRwb3NpdGlvblwiKSxyKFwic3ltYm9sLnBsYWNlbWVudFwiKSl9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aSh0LGUscix7dHlwZTpcIm1hcGJveFwiLGF0dHJpYnV0ZXM6byxoYW5kbGVEZWZhdWx0czpzLHBhcnRpdGlvbjpcInlcIixhY2Nlc3NUb2tlbjplLl9tYXBib3hBY2Nlc3NUb2tlbn0pfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCI6NzQ1LFwiLi4vc3VicGxvdF9kZWZhdWx0c1wiOjgyNCxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo4MDZ9XSw4MDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwibWFwYm94LWdsXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIiksYT10KFwiLi4vLi4vbGliXCIpLG89dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLHM9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnRcIiksbD10KFwiLi4vY2FydGVzaWFuL3NlbGVjdFwiKS5wcmVwU2VsZWN0LGM9dChcIi4uL2NhcnRlc2lhbi9zZWxlY3RcIikuc2VsZWN0T25DbGljayx1PXQoXCIuL2NvbnN0YW50c1wiKSxoPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLGY9dChcIi4vbGF5ZXJzXCIpO2Z1bmN0aW9uIHAodCl7dGhpcy5pZD10LmlkLHRoaXMuZ2Q9dC5nZCx0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLmlzU3RhdGljPXQuc3RhdGljUGxvdDt2YXIgZT10LmZ1bGxMYXlvdXQ7dGhpcy51aWQ9ZS5fdWlkK1wiLVwiK3RoaXMuaWQsdGhpcy5kaXY9bnVsbCx0aGlzLnhheGlzPW51bGwsdGhpcy55YXhpcz1udWxsLHRoaXMuY3JlYXRlRnJhbWV3b3JrKGUpLHRoaXMubWFwPW51bGwsdGhpcy5hY2Nlc3NUb2tlbj1udWxsLHRoaXMuc3R5bGVPYmo9bnVsbCx0aGlzLnRyYWNlSGFzaD17fSx0aGlzLmxheWVyTGlzdD1bXX12YXIgZD1wLnByb3RvdHlwZTtmdW5jdGlvbiBnKHQpe3ZhciBlPWguc3R5bGUudmFsdWVzLHI9aC5zdHlsZS5kZmx0LG49e307cmV0dXJuIGEuaXNQbGFpbk9iamVjdCh0KT8obi5pZD10LmlkLG4uc3R5bGU9dCk6XCJzdHJpbmdcIj09dHlwZW9mIHQ/KG4uaWQ9dCxuLnN0eWxlPS0xIT09ZS5pbmRleE9mKHQpP3YodCk6dCk6KG4uaWQ9cixuLnN0eWxlPXYocikpLG4udHJhbnNpdGlvbj17ZHVyYXRpb246MCxkZWxheTowfSxufWZ1bmN0aW9uIHYodCl7cmV0dXJuIHUuc3R5bGVVcmxQcmVmaXgrdCtcIi1cIit1LnN0eWxlVXJsU3VmZml4fWZ1bmN0aW9uIG0odCl7cmV0dXJuW3QubG9uLHQubGF0XX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBwKHQpfSxkLnBsb3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9dGhpcyxhPWVbaS5pZF07aS5tYXAmJmEuYWNjZXNzdG9rZW4hPT1pLmFjY2Vzc1Rva2VuJiYoaS5tYXAucmVtb3ZlKCksaS5tYXA9bnVsbCxpLnN0eWxlT2JqPW51bGwsaS50cmFjZUhhc2g9W10saS5sYXllckxpc3Q9e30pLG49aS5tYXA/bmV3IFByb21pc2UoZnVuY3Rpb24ocixuKXtpLnVwZGF0ZU1hcCh0LGUscixuKX0pOm5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbil7aS5jcmVhdGVNYXAodCxlLHIsbil9KSxyLnB1c2gobil9LGQuY3JlYXRlTWFwPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBzPXRoaXMsbD1zLmdkLGg9ZVtzLmlkXSxmPXMuc3R5bGVPYmo9ZyhoLnN0eWxlKTtzLmFjY2Vzc1Rva2VuPWguYWNjZXNzdG9rZW47dmFyIHA9cy5tYXA9bmV3IG4uTWFwKHtjb250YWluZXI6cy5kaXYsc3R5bGU6Zi5zdHlsZSxjZW50ZXI6bShoLmNlbnRlciksem9vbTpoLnpvb20sYmVhcmluZzpoLmJlYXJpbmcscGl0Y2g6aC5waXRjaCxpbnRlcmFjdGl2ZTohcy5pc1N0YXRpYyxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6cy5pc1N0YXRpYyxkb3VibGVDbGlja1pvb206ITEsYm94Wm9vbTohMX0pLGQ9dS5jb250cm9sQ29udGFpbmVyQ2xhc3NOYW1lLHY9cy5kaXYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShkKVswXTtpZihzLmRpdi5yZW1vdmVDaGlsZCh2KSxwLl9jYW52YXMuc3R5bGUubGVmdD1cIjBweFwiLHAuX2NhbnZhcy5zdHlsZS50b3A9XCIwcHhcIixzLnJlamVjdE9uRXJyb3IoYSkscC5vbmNlKFwibG9hZFwiLGZ1bmN0aW9uKCl7cy51cGRhdGVEYXRhKHQpLHMudXBkYXRlTGF5b3V0KGUpLHMucmVzb2x2ZU9uUmVuZGVyKHIpfSksIXMuaXNTdGF0aWMpe3ZhciB5PSExO3Aub24oXCJtb3ZlZW5kXCIsZnVuY3Rpb24odCl7aWYocy5tYXApe2lmKHQub3JpZ2luYWxFdmVudHx8eSl7dmFyIGU9bC5fZnVsbExheW91dFtzLmlkXTtvLmNhbGwoXCJfc3RvcmVEaXJlY3RHVUlFZGl0XCIsbC5sYXlvdXQsbC5fZnVsbExheW91dC5fcHJlR1VJLHMuZ2V0Vmlld0VkaXRzKGUpKTt2YXIgcj1zLmdldFZpZXcoKTtlLl9pbnB1dC5jZW50ZXI9ZS5jZW50ZXI9ci5jZW50ZXIsZS5faW5wdXQuem9vbT1lLnpvb209ci56b29tLGUuX2lucHV0LmJlYXJpbmc9ZS5iZWFyaW5nPXIuYmVhcmluZyxlLl9pbnB1dC5waXRjaD1lLnBpdGNoPXIucGl0Y2gsbC5lbWl0KFwicGxvdGx5X3JlbGF5b3V0XCIscy5nZXRWaWV3RWRpdHMocikpfXk9ITF9fSkscC5vbihcIndoZWVsXCIsZnVuY3Rpb24oKXt5PSEwfSkscC5vbihcIm1vdXNlbW92ZVwiLGZ1bmN0aW9uKHQpe3ZhciBlPXMuZGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3QuY2xpZW50WD10LnBvaW50LngrZS5sZWZ0LHQuY2xpZW50WT10LnBvaW50LnkrZS50b3AsdC50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGV9LHMueGF4aXMucDJjPWZ1bmN0aW9uKCl7cmV0dXJuIHQubG5nTGF0LmxuZ30scy55YXhpcy5wMmM9ZnVuY3Rpb24oKXtyZXR1cm4gdC5sbmdMYXQubGF0fSxpLmhvdmVyKGwsdCxzLmlkKX0pLHAub24oXCJkcmFnc3RhcnRcIix4KSxwLm9uKFwiem9vbXN0YXJ0XCIseCkscC5vbihcImRibGNsaWNrXCIsZnVuY3Rpb24oKXt2YXIgdD1sLl9mdWxsTGF5b3V0W3MuaWRdO28uY2FsbChcIl9zdG9yZURpcmVjdEdVSUVkaXRcIixsLmxheW91dCxsLl9mdWxsTGF5b3V0Ll9wcmVHVUkscy5nZXRWaWV3RWRpdHModCkpO3ZhciBlPXMudmlld0luaXRpYWw7cC5zZXRDZW50ZXIobShlLmNlbnRlcikpLHAuc2V0Wm9vbShlLnpvb20pLHAuc2V0QmVhcmluZyhlLmJlYXJpbmcpLHAuc2V0UGl0Y2goZS5waXRjaCk7dmFyIHI9cy5nZXRWaWV3KCk7dC5faW5wdXQuY2VudGVyPXQuY2VudGVyPXIuY2VudGVyLHQuX2lucHV0Lnpvb209dC56b29tPXIuem9vbSx0Ll9pbnB1dC5iZWFyaW5nPXQuYmVhcmluZz1yLmJlYXJpbmcsdC5faW5wdXQucGl0Y2g9dC5waXRjaD1yLnBpdGNoLGwuZW1pdChcInBsb3RseV9kb3VibGVjbGlja1wiLG51bGwpLGwuZW1pdChcInBsb3RseV9yZWxheW91dFwiLHMuZ2V0Vmlld0VkaXRzKHIpKX0pLHMuY2xlYXJTZWxlY3Q9ZnVuY3Rpb24oKXtsLl9mdWxsTGF5b3V0Ll96b29tbGF5ZXIuc2VsZWN0QWxsKFwiLnNlbGVjdC1vdXRsaW5lXCIpLnJlbW92ZSgpfSxzLm9uQ2xpY2tJblBhbkZuPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1sLl9mdWxsTGF5b3V0LmNsaWNrbW9kZTtyLmluZGV4T2YoXCJzZWxlY3RcIik+LTEmJmMoZS5vcmlnaW5hbEV2ZW50LGwsW3MueGF4aXNdLFtzLnlheGlzXSxzLmlkLHQpLHIuaW5kZXhPZihcImV2ZW50XCIpPi0xJiZpLmNsaWNrKGwsZS5vcmlnaW5hbEV2ZW50KX19fWZ1bmN0aW9uIHgoKXtpLmxvbmVVbmhvdmVyKGUuX3RvcHBhcGVyKX19LGQudXBkYXRlTWFwPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMsYT1pLm1hcCxvPWVbdGhpcy5pZF07aS5yZWplY3RPbkVycm9yKG4pO3ZhciBzPWcoby5zdHlsZSk7aS5zdHlsZU9iai5pZCE9PXMuaWQ/KGkuc3R5bGVPYmo9cyxhLnNldFN0eWxlKHMuc3R5bGUpLGEub25jZShcInN0eWxlZGF0YVwiLGZ1bmN0aW9uKCl7aS50cmFjZUhhc2g9e30saS51cGRhdGVEYXRhKHQpLGkudXBkYXRlTGF5b3V0KGUpLGkucmVzb2x2ZU9uUmVuZGVyKHIpfSkpOihpLnVwZGF0ZURhdGEodCksaS51cGRhdGVMYXlvdXQoZSksaS5yZXNvbHZlT25SZW5kZXIocikpfSxkLnVwZGF0ZURhdGE9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYT10aGlzLnRyYWNlSGFzaDtmb3Iobj0wO248dC5sZW5ndGg7bisrKXt2YXIgbz10W25dOyhlPWFbKHI9b1swXS50cmFjZSkudWlkXSk/ZS51cGRhdGUobyk6ci5fbW9kdWxlJiYoYVtyLnVpZF09ci5fbW9kdWxlLnBsb3QodGhpcyxvKSl9dmFyIHM9T2JqZWN0LmtleXMoYSk7dDpmb3Iobj0wO248cy5sZW5ndGg7bisrKXt2YXIgbD1zW25dO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspaWYobD09PShyPXRbaV1bMF0udHJhY2UpLnVpZCljb250aW51ZSB0OyhlPWFbbF0pLmRpc3Bvc2UoKSxkZWxldGUgYVtsXX19LGQudXBkYXRlTGF5b3V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWFwLHI9dFt0aGlzLmlkXTtlLnNldENlbnRlcihtKHIuY2VudGVyKSksZS5zZXRab29tKHIuem9vbSksZS5zZXRCZWFyaW5nKHIuYmVhcmluZyksZS5zZXRQaXRjaChyLnBpdGNoKSx0aGlzLnVwZGF0ZUxheWVycyh0KSx0aGlzLnVwZGF0ZUZyYW1ld29yayh0KSx0aGlzLnVwZGF0ZUZ4KHQpLHRoaXMubWFwLnJlc2l6ZSgpLHRoaXMuZ2QuX2NvbnRleHQuX3Njcm9sbFpvb20ubWFwYm94P2Uuc2Nyb2xsWm9vbS5lbmFibGUoKTplLnNjcm9sbFpvb20uZGlzYWJsZSgpfSxkLnJlc29sdmVPblJlbmRlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm1hcDtlLm9uKFwicmVuZGVyXCIsZnVuY3Rpb24gcigpe2UubG9hZGVkKCkmJihlLm9mZihcInJlbmRlclwiLHIpLHNldFRpbWVvdXQodCwwKSl9KX0sZC5yZWplY3RPbkVycm9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWFwO2Z1bmN0aW9uIHIoKXt0KG5ldyBFcnJvcih1Lm1hcE9uRXJyb3JNc2cpKX1lLm9uY2UoXCJlcnJvclwiLHIpLGUub25jZShcInN0eWxlLmVycm9yXCIsciksZS5vbmNlKFwic291cmNlLmVycm9yXCIsciksZS5vbmNlKFwidGlsZS5lcnJvclwiLHIpLGUub25jZShcImxheWVyLmVycm9yXCIscil9LGQuY3JlYXRlRnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLmRpdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3IuaWQ9ZS51aWQsci5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsZS5jb250YWluZXIuYXBwZW5kQ2hpbGQociksZS54YXhpcz17X2lkOlwieFwiLGMycDpmdW5jdGlvbih0KXtyZXR1cm4gZS5wcm9qZWN0KHQpLnh9fSxlLnlheGlzPXtfaWQ6XCJ5XCIsYzJwOmZ1bmN0aW9uKHQpe3JldHVybiBlLnByb2plY3QodCkueX19LGUudXBkYXRlRnJhbWV3b3JrKHQpfSxkLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLm1hcCxuPWUuZ2Q7aWYoIWUuaXNTdGF0aWMpe3ZhciBpLG89dC5kcmFnbW9kZTtpPVwic2VsZWN0XCI9PT1vP2Z1bmN0aW9uKHQscil7KHQucmFuZ2U9e30pW2UuaWRdPVt1KFtyLnhtaW4sci55bWluXSksdShbci54bWF4LHIueW1heF0pXX06ZnVuY3Rpb24odCxyLG4peyh0Lmxhc3NvUG9pbnRzPXt9KVtlLmlkXT1uLmZpbHRlcmVkLm1hcCh1KX07dmFyIGM9ZS5kcmFnT3B0aW9ucztlLmRyYWdPcHRpb25zPWEuZXh0ZW5kRGVlcChjfHx7fSx7ZWxlbWVudDplLmRpdixnZDpuLHBsb3RpbmZvOntpZDplLmlkLHhheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpcyxmaWxsUmFuZ2VJdGVtczppfSx4YXhlczpbZS54YXhpc10seWF4ZXM6W2UueWF4aXNdLHN1YnBsb3Q6ZS5pZH0pLHIub2ZmKFwiY2xpY2tcIixlLm9uQ2xpY2tJblBhbkhhbmRsZXIpLFwic2VsZWN0XCI9PT1vfHxcImxhc3NvXCI9PT1vPyhyLmRyYWdQYW4uZGlzYWJsZSgpLHIub24oXCJ6b29tc3RhcnRcIixlLmNsZWFyU2VsZWN0KSxlLmRyYWdPcHRpb25zLnByZXBGbj1mdW5jdGlvbih0LHIsbil7bCh0LHIsbixlLmRyYWdPcHRpb25zLG8pfSxzLmluaXQoZS5kcmFnT3B0aW9ucykpOihyLmRyYWdQYW4uZW5hYmxlKCksci5vZmYoXCJ6b29tc3RhcnRcIixlLmNsZWFyU2VsZWN0KSxlLmRpdi5vbm1vdXNlZG93bj1udWxsLGUub25DbGlja0luUGFuSGFuZGxlcj1lLm9uQ2xpY2tJblBhbkZuKGUuZHJhZ09wdGlvbnMpLHIub24oXCJjbGlja1wiLGUub25DbGlja0luUGFuSGFuZGxlcikpfWZ1bmN0aW9uIHUodCl7dmFyIHI9ZS5tYXAudW5wcm9qZWN0KHQpO3JldHVybltyLmxuZyxyLmxhdF19fSxkLnVwZGF0ZUZyYW1ld29yaz1mdW5jdGlvbih0KXt2YXIgZT10W3RoaXMuaWRdLmRvbWFpbixyPXQuX3NpemUsbj10aGlzLmRpdi5zdHlsZTtuLndpZHRoPXIudyooZS54WzFdLWUueFswXSkrXCJweFwiLG4uaGVpZ2h0PXIuaCooZS55WzFdLWUueVswXSkrXCJweFwiLG4ubGVmdD1yLmwrZS54WzBdKnIudytcInB4XCIsbi50b3A9ci50KygxLWUueVsxXSkqci5oK1wicHhcIix0aGlzLnhheGlzLl9vZmZzZXQ9ci5sK2UueFswXSpyLncsdGhpcy54YXhpcy5fbGVuZ3RoPXIudyooZS54WzFdLWUueFswXSksdGhpcy55YXhpcy5fb2Zmc2V0PXIudCsoMS1lLnlbMV0pKnIuaCx0aGlzLnlheGlzLl9sZW5ndGg9ci5oKihlLnlbMV0tZS55WzBdKX0sZC51cGRhdGVMYXllcnM9ZnVuY3Rpb24odCl7dmFyIGUscj10W3RoaXMuaWRdLmxheWVycyxuPXRoaXMubGF5ZXJMaXN0O2lmKHIubGVuZ3RoIT09bi5sZW5ndGgpe2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspbltlXS5kaXNwb3NlKCk7Zm9yKG49dGhpcy5sYXllckxpc3Q9W10sZT0wO2U8ci5sZW5ndGg7ZSsrKW4ucHVzaChmKHRoaXMsZSxyW2VdKSl9ZWxzZSBmb3IoZT0wO2U8ci5sZW5ndGg7ZSsrKW5bZV0udXBkYXRlKHJbZV0pfSxkLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLm1hcCYmKHRoaXMubWFwLnJlbW92ZSgpLHRoaXMubWFwPW51bGwsdGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5kaXYpKX0sZC50b0ltYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwLnN0b3AoKSx0aGlzLm1hcC5nZXRDYW52YXMoKS50b0RhdGFVUkwoKX0sZC5zZXRPcHRpb25zPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4gaW4gcil0aGlzLm1hcFtlXSh0LG4scltuXSl9LGQucHJvamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tYXAucHJvamVjdChuZXcgbi5MbmdMYXQodFswXSx0WzFdKSl9LGQuZ2V0Vmlldz1mdW5jdGlvbigpe3ZhciB0PXRoaXMubWFwLGU9dC5nZXRDZW50ZXIoKTtyZXR1cm57Y2VudGVyOntsb246ZS5sbmcsbGF0OmUubGF0fSx6b29tOnQuZ2V0Wm9vbSgpLGJlYXJpbmc6dC5nZXRCZWFyaW5nKCkscGl0Y2g6dC5nZXRQaXRjaCgpfX0sZC5nZXRWaWV3RWRpdHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuaWQscj1bXCJjZW50ZXJcIixcInpvb21cIixcImJlYXJpbmdcIixcInBpdGNoXCJdLG49e30saT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldO25bZStcIi5cIithXT10W2FdfXJldHVybiBufX0se1wiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudFwiOjU5NixcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL2NhcnRlc2lhbi9zZWxlY3RcIjo3NjYsXCIuL2NvbnN0YW50c1wiOjgwMixcIi4vbGF5ZXJzXCI6ODA1LFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjgwNixcIm1hcGJveC1nbFwiOjQxOX1dLDgwOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmVkaXRUeXBlO3JldHVybnt0Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLGVkaXRUeXBlOmV9LHI6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjAsZWRpdFR5cGU6ZX0sYjp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MCxlZGl0VHlwZTplfSxsOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLGVkaXRUeXBlOmV9LGVkaXRUeXBlOmV9fX0se31dLDgxMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxhPXQoXCIuLi9yZWdpc3RyeVwiKSxvPXQoXCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYVwiKSxzPXQoXCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLGw9dChcIi4uL2xpYlwiKSxjPXQoXCIuLi9jb21wb25lbnRzL2NvbG9yXCIpLHU9dChcIi4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNLGg9dChcIi4vY2FydGVzaWFuL2F4aXNfaWRzXCIpLGY9dChcIi4vYW5pbWF0aW9uX2F0dHJpYnV0ZXNcIikscD10KFwiLi9mcmFtZV9hdHRyaWJ1dGVzXCIpLGQ9bC5yZWxpbmtQcml2YXRlS2V5cyxnPWwuXyx2PWUuZXhwb3J0cz17fTtsLmV4dGVuZEZsYXQodixhKSx2LmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSx2LmF0dHJpYnV0ZXMudHlwZS52YWx1ZXM9di5hbGxUeXBlcyx2LmZvbnRBdHRycz10KFwiLi9mb250X2F0dHJpYnV0ZXNcIiksdi5sYXlvdXRBdHRyaWJ1dGVzPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLHYuZm9udFdlaWdodD1cIm5vcm1hbFwiO3ZhciBtPXYudHJhbnNmb3Jtc1JlZ2lzdHJ5LHk9dChcIi4vY29tbWFuZFwiKTt2LmV4ZWN1dGVBUElDb21tYW5kPXkuZXhlY3V0ZUFQSUNvbW1hbmQsdi5jb21wdXRlQVBJQ29tbWFuZEJpbmRpbmdzPXkuY29tcHV0ZUFQSUNvbW1hbmRCaW5kaW5ncyx2Lm1hbmFnZUNvbW1hbmRPYnNlcnZlcj15Lm1hbmFnZUNvbW1hbmRPYnNlcnZlcix2Lmhhc1NpbXBsZUFQSUNvbW1hbmRCaW5kaW5ncz15Lmhhc1NpbXBsZUFQSUNvbW1hbmRCaW5kaW5ncyx2LnJlZHJhd1RleHQ9ZnVuY3Rpb24odCl7aWYoISgodD1sLmdldEdyYXBoRGl2KHQpKS5kYXRhJiZ0LmRhdGFbMF0mJnQuZGF0YVswXS5yKSlyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSl7c2V0VGltZW91dChmdW5jdGlvbigpe2EuZ2V0Q29tcG9uZW50TWV0aG9kKFwiYW5ub3RhdGlvbnNcIixcImRyYXdcIikodCksYS5nZXRDb21wb25lbnRNZXRob2QoXCJsZWdlbmRcIixcImRyYXdcIikodCksKHQuY2FsY2RhdGF8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RbMF0mJnRbMF0udCYmdFswXS50LmNiJiZ0WzBdLnQuY2IoKX0pLGUodi5wcmV2aW91c1Byb21pc2VzKHQpKX0sMzAwKX0pfSx2LnJlc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdD1sLmdldEdyYXBoRGl2KHQpLG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbih0KXt2YXIgZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS5kaXNwbGF5O3JldHVybiFlfHxcIm5vbmVcIj09PWV9dCYmIW4odCl8fHIobmV3IEVycm9yKFwiUmVzaXplIG11c3QgYmUgcGFzc2VkIGEgZGlzcGxheWVkIHBsb3QgZGl2IGVsZW1lbnQuXCIpKSx0Ll9yZWRyYXdUaW1lciYmY2xlYXJUaW1lb3V0KHQuX3JlZHJhd1RpbWVyKSx0Ll9yZWRyYXdUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoIXQubGF5b3V0fHx0LmxheW91dC53aWR0aCYmdC5sYXlvdXQuaGVpZ2h0fHxuKHQpKWUodCk7ZWxzZXtkZWxldGUgdC5sYXlvdXQud2lkdGgsZGVsZXRlIHQubGF5b3V0LmhlaWdodDt2YXIgcj10LmNoYW5nZWQ7dC5hdXRvcGxheT0hMCxhLmNhbGwoXCJyZWxheW91dFwiLHQse2F1dG9zaXplOiEwfSkudGhlbihmdW5jdGlvbigpe3QuY2hhbmdlZD1yLGUodCl9KX19LDEwMCl9KX0sdi5wcmV2aW91c1Byb21pc2VzPWZ1bmN0aW9uKHQpe2lmKCh0Ll9wcm9taXNlc3x8W10pLmxlbmd0aClyZXR1cm4gUHJvbWlzZS5hbGwodC5fcHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24oKXt0Ll9wcm9taXNlcz1bXX0pfSx2LmFkZExpbmtzPWZ1bmN0aW9uKHQpe2lmKHQuX2NvbnRleHQuc2hvd0xpbmt8fHQuX2NvbnRleHQuc2hvd1NvdXJjZXMpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1sLmVuc3VyZVNpbmdsZShlLl9wYXBlcixcInRleHRcIixcImpzLXBsb3QtbGluay1jb250YWluZXJcIixmdW5jdGlvbih0KXt0LnN0eWxlKHtcImZvbnQtZmFtaWx5XCI6J1wiT3BlbiBTYW5zXCIsIEFyaWFsLCBzYW5zLXNlcmlmJyxcImZvbnQtc2l6ZVwiOlwiMTJweFwiLGZpbGw6Yy5kZWZhdWx0TGluZSxcInBvaW50ZXItZXZlbnRzXCI6XCJhbGxcIn0pLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTt0LmFwcGVuZChcInRzcGFuXCIpLmNsYXNzZWQoXCJqcy1saW5rLXRvLXRvb2xcIiwhMCksdC5hcHBlbmQoXCJ0c3BhblwiKS5jbGFzc2VkKFwianMtbGluay1zcGFjZXJcIiwhMCksdC5hcHBlbmQoXCJ0c3BhblwiKS5jbGFzc2VkKFwianMtc291cmNlbGlua3NcIiwhMCl9KX0pLGk9ci5ub2RlKCksYT17eTplLl9wYXBlci5hdHRyKFwiaGVpZ2h0XCIpLTl9O2RvY3VtZW50LmJvZHkuY29udGFpbnMoaSkmJmkuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCk+PWUud2lkdGgtMjA/KGFbXCJ0ZXh0LWFuY2hvclwiXT1cInN0YXJ0XCIsYS54PTUpOihhW1widGV4dC1hbmNob3JcIl09XCJlbmRcIixhLng9ZS5fcGFwZXIuYXR0cihcIndpZHRoXCIpLTcpLHIuYXR0cihhKTt2YXIgbz1yLnNlbGVjdChcIi5qcy1saW5rLXRvLXRvb2xcIikscz1yLnNlbGVjdChcIi5qcy1saW5rLXNwYWNlclwiKSx1PXIuc2VsZWN0KFwiLmpzLXNvdXJjZWxpbmtzXCIpO3QuX2NvbnRleHQuc2hvd1NvdXJjZXMmJnQuX2NvbnRleHQuc2hvd1NvdXJjZXModCksdC5fY29udGV4dC5zaG93TGluayYmZnVuY3Rpb24odCxlKXtlLnRleHQoXCJcIik7dmFyIHI9ZS5hcHBlbmQoXCJhXCIpLmF0dHIoe1wieGxpbms6eGxpbms6aHJlZlwiOlwiI1wiLGNsYXNzOlwibGluay0taW1wdCBsaW5rLS1lbWJlZHZpZXdcIixcImZvbnQtd2VpZ2h0XCI6XCJib2xkXCJ9KS50ZXh0KHQuX2NvbnRleHQubGlua1RleHQrXCIgXCIrU3RyaW5nLmZyb21DaGFyQ29kZSgxODcpKTtpZih0Ll9jb250ZXh0LnNlbmREYXRhKXIub24oXCJjbGlja1wiLGZ1bmN0aW9uKCl7di5zZW5kRGF0YVRvQ2xvdWQodCl9KTtlbHNle3ZhciBuPXdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zcGxpdChcIi9cIiksaT13aW5kb3cubG9jYXRpb24uc2VhcmNoO3IuYXR0cih7XCJ4bGluazp4bGluazpzaG93XCI6XCJuZXdcIixcInhsaW5rOnhsaW5rOmhyZWZcIjpcIi9cIituWzJdLnNwbGl0KFwiLlwiKVswXStcIi9cIituWzFdK2l9KX19KHQsbykscy50ZXh0KG8udGV4dCgpJiZ1LnRleHQoKT9cIiAtIFwiOlwiXCIpfX0sdi5zZW5kRGF0YVRvQ2xvdWQ9ZnVuY3Rpb24odCl7dC5lbWl0KFwicGxvdGx5X2JlZm9yZWV4cG9ydFwiKTt2YXIgZT0od2luZG93LlBMT1RMWUVOVnx8e30pLkJBU0VfVVJMfHx0Ll9jb250ZXh0LnBsb3RseVNlcnZlclVSTCxyPW4uc2VsZWN0KHQpLmFwcGVuZChcImRpdlwiKS5hdHRyKFwiaWRcIixcImhpZGRlbmZvcm1cIikuc3R5bGUoXCJkaXNwbGF5XCIsXCJub25lXCIpLGk9ci5hcHBlbmQoXCJmb3JtXCIpLmF0dHIoe2FjdGlvbjplK1wiL2V4dGVybmFsXCIsbWV0aG9kOlwicG9zdFwiLHRhcmdldDpcIl9ibGFua1wifSk7cmV0dXJuIGkuYXBwZW5kKFwiaW5wdXRcIikuYXR0cih7dHlwZTpcInRleHRcIixuYW1lOlwiZGF0YVwifSkubm9kZSgpLnZhbHVlPXYuZ3JhcGhKc29uKHQsITEsXCJrZWVwZGF0YVwiKSxpLm5vZGUoKS5zdWJtaXQoKSxyLnJlbW92ZSgpLHQuZW1pdChcInBsb3RseV9hZnRlcmV4cG9ydFwiKSwhMX07dmFyIHg9W1wiZGF5c1wiLFwic2hvcnREYXlzXCIsXCJtb250aHNcIixcInNob3J0TW9udGhzXCIsXCJwZXJpb2RzXCIsXCJkYXRlVGltZVwiLFwiZGF0ZVwiLFwidGltZVwiLFwiZGVjaW1hbFwiLFwidGhvdXNhbmRzXCIsXCJncm91cGluZ1wiLFwiY3VycmVuY3lcIl0sYj1bXCJ5ZWFyXCIsXCJtb250aFwiLFwiZGF5TW9udGhcIixcImRheU1vbnRoWWVhclwiXTtmdW5jdGlvbiBfKHQsZSl7dmFyIHI9dC5fY29udGV4dC5sb2NhbGUsbj0hMSxpPXt9O2Z1bmN0aW9uIG8odCl7Zm9yKHZhciByPSEwLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIG89ZVthXTtpW29dfHwodFtvXT9pW29dPXRbb106cj0hMSl9ciYmKG49ITApfWZvcih2YXIgcz0wO3M8MjtzKyspe2Zvcih2YXIgbD10Ll9jb250ZXh0LmxvY2FsZXMsYz0wO2M8MjtjKyspe3ZhciB1PShsW3JdfHx7fSkuZm9ybWF0O2lmKHUmJihvKHUpLG4pKWJyZWFrO2w9YS5sb2NhbGVSZWdpc3RyeX12YXIgaD1yLnNwbGl0KFwiLVwiKVswXTtpZihufHxoPT09cilicmVhaztyPWh9cmV0dXJuIG58fG8oYS5sb2NhbGVSZWdpc3RyeS5lbi5mb3JtYXQpLGl9ZnVuY3Rpb24gdyh0LGUpe3ZhciByPXtfZnVsbExheW91dDplfSxuPVwieFwiPT09dC5faWQuY2hhckF0KDApLGk9dC5fbWFpbkF4aXMuX2FuY2hvckF4aXMsYT1cIlwiLG89XCJcIixzPVwiXCI7aWYoaSYmKHM9aS5fbWFpbkF4aXMuX2lkLGE9bj90Ll9pZCtzOnMrdC5faWQpLCFhfHwhZS5fcGxvdHNbYV0pe2E9XCJcIjtmb3IodmFyIGw9dC5fY291bnRlckF4ZXMsYz0wO2M8bC5sZW5ndGg7YysrKXt2YXIgdT1sW2NdLGY9bj90Ll9pZCt1OnUrdC5faWQ7b3x8KG89Zik7dmFyIHA9aC5nZXRGcm9tSWQocix1KTtpZihzJiZwLm92ZXJsYXlpbmc9PT1zKXthPWY7YnJlYWt9fX1yZXR1cm4gYXx8b31mdW5jdGlvbiBrKHQpe3ZhciBlPXQudHJhbnNmb3JtcztpZihBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aClmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXSxpPW4uX21vZHVsZXx8bVtuLnR5cGVdO2lmKGkmJmkubWFrZXNEYXRhKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIEEodCxlLHIsbil7Zm9yKHZhciBpPXQudHJhbnNmb3JtcyxhPVt0XSxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBzPWlbb10sbD1tW3MudHlwZV07bCYmbC50cmFuc2Zvcm0mJihhPWwudHJhbnNmb3JtKGEse3RyYW5zZm9ybTpzLGZ1bGxUcmFjZTp0LGZ1bGxEYXRhOmUsbGF5b3V0OnIsZnVsbExheW91dDpuLHRyYW5zZm9ybUluZGV4Om99KSl9cmV0dXJuIGF9ZnVuY3Rpb24gVCh0KXt2YXIgZT10Lm1hcmdpbjtpZighdC5fc2l6ZSl7dmFyIHI9dC5fc2l6ZT17bDpNYXRoLnJvdW5kKGUubCkscjpNYXRoLnJvdW5kKGUuciksdDpNYXRoLnJvdW5kKGUudCksYjpNYXRoLnJvdW5kKGUuYikscDpNYXRoLnJvdW5kKGUucGFkKX07ci53PU1hdGgucm91bmQodC53aWR0aCktci5sLXIucixyLmg9TWF0aC5yb3VuZCh0LmhlaWdodCktci50LXIuYn10Ll9wdXNobWFyZ2lufHwodC5fcHVzaG1hcmdpbj17fSksdC5fcHVzaG1hcmdpbklkc3x8KHQuX3B1c2htYXJnaW5JZHM9e30pfWZ1bmN0aW9uIE0odCxlLHIpe3ZhciBuPSExO3ZhciBpPVt2LnByZXZpb3VzUHJvbWlzZXMsZnVuY3Rpb24oKXtpZih0Ll90cmFuc2l0aW9uRGF0YSlyZXR1cm4gdC5fdHJhbnNpdGlvbmluZz0hMSxmdW5jdGlvbih0KXt2YXIgZT1Qcm9taXNlLnJlc29sdmUoKTtpZighdClyZXR1cm4gZTtmb3IoO3QubGVuZ3RoOyllPWUudGhlbih0LnNoaWZ0KCkpO3JldHVybiBlfSh0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzKX0sci5wcmVwYXJlRm4sdi5yZWhvdmVyLGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdChcInBsb3RseV90cmFuc2l0aW9uaW5nXCIsW10pLG5ldyBQcm9taXNlKGZ1bmN0aW9uKGkpe3QuX3RyYW5zaXRpb25pbmc9ITAsZS5kdXJhdGlvbj4wJiYodC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbj0hMCksdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uKCl7bj0hMH0pLHIucmVkcmF3JiZ0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gYS5jYWxsKFwicmVkcmF3XCIsdCl9KSx0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLnB1c2goZnVuY3Rpb24oKXt0LmVtaXQoXCJwbG90bHlfdHJhbnNpdGlvbmludGVycnVwdGVkXCIsW10pfSk7dmFyIG89MCxzPTA7ZnVuY3Rpb24gbCgpe3JldHVybiBvKyssZnVuY3Rpb24oKXt2YXIgZTtzKyssbnx8cyE9PW98fChlPWksdC5fdHJhbnNpdGlvbkRhdGEmJihmdW5jdGlvbih0KXtpZih0KWZvcig7dC5sZW5ndGg7KXQuc2hpZnQoKX0odC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcyksUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe2lmKHIucmVkcmF3KXJldHVybiBhLmNhbGwoXCJyZWRyYXdcIix0KX0pLnRoZW4oZnVuY3Rpb24oKXt0Ll90cmFuc2l0aW9uaW5nPSExLHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb249ITEsdC5lbWl0KFwicGxvdGx5X3RyYW5zaXRpb25lZFwiLFtdKX0pLnRoZW4oZSkpKX19ci5ydW5GbihsKSxzZXRUaW1lb3V0KGwoKSl9KX1dLG89bC5zeW5jT3JBc3luYyhpLHQpO3JldHVybiBvJiZvLnRoZW58fChvPVByb21pc2UucmVzb2x2ZSgpKSxvLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdH0pfWZ1bmN0aW9uIFModCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmNsZWFyQ2FsYygpLFwibXVsdGljYXRlZ29yeVwiPT09bi50eXBlJiZuLnNldHVwTXVsdGlDYXRlZ29yeShlKX19di5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUmJmUuc2tpcFVwZGF0ZUNhbGMsaT10Ll9mdWxsTGF5b3V0fHx7fTtpZihpLl9za2lwRGVmYXVsdHMpZGVsZXRlIGkuX3NraXBEZWZhdWx0cztlbHNle3ZhciBvLHM9dC5fZnVsbExheW91dD17fSxjPXQubGF5b3V0fHx7fSx1PXQuX2Z1bGxEYXRhfHxbXSxoPXQuX2Z1bGxEYXRhPVtdLGY9dC5kYXRhfHxbXSxwPXQuY2FsY2RhdGF8fFtdLG09dC5fY29udGV4dHx8e307dC5fdHJhbnNpdGlvbkRhdGF8fHYuY3JlYXRlVHJhbnNpdGlvbkRhdGEodCkscy5fZGZsdFRpdGxlPXtwbG90OmcodCxcIkNsaWNrIHRvIGVudGVyIFBsb3QgdGl0bGVcIikseDpnKHQsXCJDbGljayB0byBlbnRlciBYIGF4aXMgdGl0bGVcIikseTpnKHQsXCJDbGljayB0byBlbnRlciBZIGF4aXMgdGl0bGVcIiksY29sb3JiYXI6Zyh0LFwiQ2xpY2sgdG8gZW50ZXIgQ29sb3JzY2FsZSB0aXRsZVwiKSxhbm5vdGF0aW9uOmcodCxcIm5ldyB0ZXh0XCIpfSxzLl90cmFjZVdvcmQ9Zyh0LFwidHJhY2VcIik7dmFyIHk9Xyh0LHgpO2lmKHMuX21hcGJveEFjY2Vzc1Rva2VuPW0ubWFwYm94QWNjZXNzVG9rZW4saS5faW5pdGlhbEF1dG9TaXplSXNEb25lKXt2YXIgdz1pLndpZHRoLGs9aS5oZWlnaHQ7di5zdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0cyhjLHMseSksYy53aWR0aHx8KHMud2lkdGg9dyksYy5oZWlnaHR8fChzLmhlaWdodD1rKSx2LnNhbml0aXplTWFyZ2lucyhzKX1lbHNle3Yuc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHMoYyxzLHkpO3ZhciBBPSFjLndpZHRofHwhYy5oZWlnaHQsTT1zLmF1dG9zaXplLFM9bS5hdXRvc2l6YWJsZTtBJiYoTXx8Uyk/di5wbG90QXV0b1NpemUodCxjLHMpOkEmJnYuc2FuaXRpemVNYXJnaW5zKHMpLCFNJiZBJiYoYy53aWR0aD1zLndpZHRoLGMuaGVpZ2h0PXMuaGVpZ2h0KX1zLl9kM2xvY2FsZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmRlY2ltYWw9ZS5jaGFyQXQoMCksdC50aG91c2FuZHM9ZS5jaGFyQXQoMSksbi5sb2NhbGUodCl9KHkscy5zZXBhcmF0b3JzKSxzLl9leHRyYUZvcm1hdD1fKHQsYikscy5faW5pdGlhbEF1dG9TaXplSXNEb25lPSEwLHMuX2RhdGFMZW5ndGg9Zi5sZW5ndGgscy5fbW9kdWxlcz1bXSxzLl92aXNpYmxlTW9kdWxlcz1bXSxzLl9iYXNlUGxvdE1vZHVsZXM9W107dmFyIEU9cy5fc3VicGxvdHM9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9YS5jb2xsZWN0YWJsZVN1YnBsb3RUeXBlcyxuPXt9O2lmKCFyKXtyPVtdO3ZhciBpPWEuc3VicGxvdHNSZWdpc3RyeTtmb3IodmFyIG8gaW4gaSl7dmFyIHM9aVtvXSxjPXMuYXR0cjtpZihjJiYoci5wdXNoKG8pLEFycmF5LmlzQXJyYXkoYykpKWZvcihlPTA7ZTxjLmxlbmd0aDtlKyspbC5wdXNoVW5pcXVlKHIsY1tlXSl9fWZvcih0PTA7dDxyLmxlbmd0aDt0KyspbltyW3RdXT1bXTtyZXR1cm4gbn0oKSxDPXMuX3NwbG9tQXhlcz17eDp7fSx5Ont9fSxMPXMuX3NwbG9tU3VicGxvdHM9e307cy5fc3Bsb21HcmlkRGZsdD17fSxzLl9zY2F0dGVyU3RhY2tPcHRzPXt9LHMuX2ZpcnN0U2NhdHRlcj17fSxzLl9hbGlnbm1lbnRPcHRzPXt9LHMuX3JlcXVlc3RSYW5nZXNsaWRlcj17fSxzLl90cmFjZVVpZHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9ZS5sZW5ndGgsYT1bXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbz10W3JdLl9mdWxsSW5wdXQ7byE9PW4mJmEucHVzaChvKSxuPW99dmFyIHM9YS5sZW5ndGgsYz1uZXcgQXJyYXkoaSksdT17fTtmdW5jdGlvbiBoKHQsZSl7Y1tlXT10LHVbdF09MX1mdW5jdGlvbiBmKHQsZSl7aWYodCYmXCJzdHJpbmdcIj09dHlwZW9mIHQmJiF1W3RdKXJldHVybiBoKHQsZSksITB9Zm9yKHI9MDtyPGk7cisrKXt2YXIgcD1lW3JdLnVpZDtcIm51bWJlclwiPT10eXBlb2YgcCYmKHA9U3RyaW5nKHApKSxmKHAscil8fChyPHMmJmYoYVtyXS51aWQscil8fGgobC5yYW5kc3RyKHUpLHIpKX1yZXR1cm4gY30odSxmKSxzLl9nbG9iYWxUcmFuc2Zvcm1zPSh0Ll9jb250ZXh0fHx7fSkuZ2xvYmFsVHJhbnNmb3Jtcyx2LnN1cHBseURhdGFEZWZhdWx0cyhmLGgsYyxzKTt2YXIgej1PYmplY3Qua2V5cyhDLngpLE89T2JqZWN0LmtleXMoQy55KTtpZih6Lmxlbmd0aD4xJiZPLmxlbmd0aD4xKXtmb3IoYS5nZXRDb21wb25lbnRNZXRob2QoXCJncmlkXCIsXCJzaXplRGVmYXVsdHNcIikoYyxzKSxvPTA7bzx6Lmxlbmd0aDtvKyspbC5wdXNoVW5pcXVlKEUueGF4aXMseltvXSk7Zm9yKG89MDtvPE8ubGVuZ3RoO28rKylsLnB1c2hVbmlxdWUoRS55YXhpcyxPW29dKTtmb3IodmFyIEkgaW4gTClsLnB1c2hVbmlxdWUoRS5jYXJ0ZXNpYW4sSSl9aWYocy5faGFzPXYuX2hhc1Bsb3RUeXBlLmJpbmQocyksdS5sZW5ndGg9PT1oLmxlbmd0aClmb3Iobz0wO288aC5sZW5ndGg7bysrKWQoaFtvXSx1W29dKTt2LnN1cHBseUxheW91dE1vZHVsZURlZmF1bHRzKGMscyxoLHQuX3RyYW5zaXRpb25EYXRhKTt2YXIgRD1zLl92aXNpYmxlTW9kdWxlcyxQPVtdO2ZvcihvPTA7bzxELmxlbmd0aDtvKyspe3ZhciBSPURbb10uY3Jvc3NUcmFjZURlZmF1bHRzO1ImJmwucHVzaFVuaXF1ZShQLFIpfWZvcihvPTA7bzxQLmxlbmd0aDtvKyspUFtvXShoLHMpO2EuZ2V0Q29tcG9uZW50TWV0aG9kKFwiY29sb3JzY2FsZVwiLFwiY3Jvc3NUcmFjZURlZmF1bHRzXCIpKGgscykscy5faGFzT25seUxhcmdlU3Bsb21zPTE9PT1zLl9iYXNlUGxvdE1vZHVsZXMubGVuZ3RoJiZcInNwbG9tXCI9PT1zLl9iYXNlUGxvdE1vZHVsZXNbMF0ubmFtZSYmei5sZW5ndGg+MTUmJk8ubGVuZ3RoPjE1JiYwPT09cy5zaGFwZXMubGVuZ3RoJiYwPT09cy5pbWFnZXMubGVuZ3RoLHMuX2hhc0NhcnRlc2lhbj1zLl9oYXMoXCJjYXJ0ZXNpYW5cIikscy5faGFzR2VvPXMuX2hhcyhcImdlb1wiKSxzLl9oYXNHTDNEPXMuX2hhcyhcImdsM2RcIikscy5faGFzR0wyRD1zLl9oYXMoXCJnbDJkXCIpLHMuX2hhc1Rlcm5hcnk9cy5faGFzKFwidGVybmFyeVwiKSxzLl9oYXNQaWU9cy5faGFzKFwicGllXCIpLHYubGlua1N1YnBsb3RzKGgscyx1LGkpLHYuY2xlYW5QbG90KGgscyx1LGkpLGkuX3pvb21sYXllciYmIXQuX2RyYWdnaW5nJiZpLl96b29tbGF5ZXIuc2VsZWN0QWxsKFwiLnNlbGVjdC1vdXRsaW5lXCIpLnJlbW92ZSgpLGQocyxpKSxzLl9wcmVHVUl8fChzLl9wcmVHVUk9e30pLHMuX3RyYWNlUHJlR1VJfHwocy5fdHJhY2VQcmVHVUk9e30pO3ZhciBGLEI9cy5fdHJhY2VQcmVHVUksTj17fTtmb3IoRiBpbiBCKU5bRl09XCJvbGRcIjtmb3Iobz0wO288aC5sZW5ndGg7bysrKU5bRj1oW29dLl9mdWxsSW5wdXQudWlkXXx8KEJbRl09e30pLE5bRl09XCJuZXdcIjtmb3IoRiBpbiBOKVwib2xkXCI9PT1OW0ZdJiZkZWxldGUgQltGXTtUKHMpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKFwicmFuZ2VzbGlkZXJcIixcIm1ha2VEYXRhXCIpKHMpLHJ8fHAubGVuZ3RoIT09aC5sZW5ndGh8fHYuc3VwcGx5RGVmYXVsdHNVcGRhdGVDYWxjKHAsaCl9fSx2LnN1cHBseURlZmF1bHRzVXBkYXRlQ2FsYz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdLGk9KHRbcl18fFtdKVswXTtpZihpJiZpLnRyYWNlKXt2YXIgYT1pLnRyYWNlO2lmKGEuX2hhc0NhbGNUcmFuc2Zvcm0pe3ZhciBvLHMsYyx1PWEuX2FycmF5QXR0cnM7Zm9yKG89MDtvPHUubGVuZ3RoO28rKylzPXVbb10sYz1sLm5lc3RlZFByb3BlcnR5KGEscykuZ2V0KCkuc2xpY2UoKSxsLm5lc3RlZFByb3BlcnR5KG4scykuc2V0KGMpfWkudHJhY2U9bn19fSx2LmNyZWF0ZVRyYW5zaXRpb25EYXRhPWZ1bmN0aW9uKHQpe3QuX3RyYW5zaXRpb25EYXRhfHwodC5fdHJhbnNpdGlvbkRhdGE9e30pLHQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXN8fCh0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzPVtdKSx0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNofHwodC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaD17fSksdC5fdHJhbnNpdGlvbkRhdGEuX2NvdW50ZXJ8fCh0Ll90cmFuc2l0aW9uRGF0YS5fY291bnRlcj0wKSx0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzfHwodC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcz1bXSl9LHYuX2hhc1Bsb3RUeXBlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5fYmFzZVBsb3RNb2R1bGVzfHxbXTtmb3IoZT0wO2U8ci5sZW5ndGg7ZSsrKWlmKHJbZV0ubmFtZT09PXQpcmV0dXJuITA7dmFyIG49dGhpcy5fbW9kdWxlc3x8W107Zm9yKGU9MDtlPG4ubGVuZ3RoO2UrKyl7dmFyIGk9bltlXS5uYW1lO2lmKGk9PT10KXJldHVybiEwO3ZhciBvPWEubW9kdWxlc1tpXTtpZihvJiZvLmNhdGVnb3JpZXNbdF0pcmV0dXJuITB9cmV0dXJuITF9LHYuY2xlYW5QbG90PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbz1uLl9iYXNlUGxvdE1vZHVsZXN8fFtdO2ZvcihpPTA7aTxvLmxlbmd0aDtpKyspe3ZhciBzPW9baV07cy5jbGVhbiYmcy5jbGVhbih0LGUscixuKX12YXIgbD1uLl9oYXMmJm4uX2hhcyhcImdsXCIpLGM9ZS5faGFzJiZlLl9oYXMoXCJnbFwiKTtsJiYhYyYmdm9pZCAwIT09bi5fZ2xjb250YWluZXImJihuLl9nbGNvbnRhaW5lci5zZWxlY3RBbGwoXCIuZ2wtY2FudmFzXCIpLnJlbW92ZSgpLG4uX2dsY29udGFpbmVyLnNlbGVjdEFsbChcIi5uby13ZWJnbFwiKS5yZW1vdmUoKSxuLl9nbGNhbnZhcz1udWxsKTt2YXIgdT0hIW4uX2luZm9sYXllcjt0OmZvcihpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBoPXJbaV0udWlkO2ZvcihhPTA7YTx0Lmxlbmd0aDthKyspe2lmKGg9PT10W2FdLnVpZCljb250aW51ZSB0fXUmJm4uX2luZm9sYXllci5zZWxlY3QoXCIuY2JcIitoKS5yZW1vdmUoKX19LHYubGlua1N1YnBsb3RzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbz1uLl9wbG90c3x8e30scz1lLl9wbG90cz17fSxjPWUuX3N1YnBsb3RzLHU9e19mdWxsRGF0YTp0LF9mdWxsTGF5b3V0OmV9LGY9Yy5jYXJ0ZXNpYW4uY29uY2F0KGMuZ2wyZHx8W10pO2ZvcihpPTA7aTxmLmxlbmd0aDtpKyspe3ZhciBwLGQ9ZltpXSxnPW9bZF0sdj1oLmdldEZyb21JZCh1LGQsXCJ4XCIpLG09aC5nZXRGcm9tSWQodSxkLFwieVwiKTtmb3IoZz9wPXNbZF09ZzoocD1zW2RdPXt9KS5pZD1kLHYuX2NvdW50ZXJBeGVzLnB1c2gobS5faWQpLG0uX2NvdW50ZXJBeGVzLnB1c2godi5faWQpLHYuX3N1YnBsb3RzV2l0aC5wdXNoKGQpLG0uX3N1YnBsb3RzV2l0aC5wdXNoKGQpLHAueGF4aXM9dixwLnlheGlzPW0scC5faGFzQ2xpcE9uQXhpc0ZhbHNlPSExLGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIHk9dFthXTtpZih5LnhheGlzPT09cC54YXhpcy5faWQmJnkueWF4aXM9PT1wLnlheGlzLl9pZCYmITE9PT15LmNsaXBvbmF4aXMpe3AuX2hhc0NsaXBPbkF4aXNGYWxzZT0hMDticmVha319fXZhciB4LGI9aC5saXN0KHUsbnVsbCwhMCk7Zm9yKGk9MDtpPGIubGVuZ3RoO2krKyl7dmFyIF89bnVsbDsoeD1iW2ldKS5vdmVybGF5aW5nJiYoXz1oLmdldEZyb21JZCh1LHgub3ZlcmxheWluZykpJiZfLm92ZXJsYXlpbmcmJih4Lm92ZXJsYXlpbmc9ITEsXz1udWxsKSx4Ll9tYWluQXhpcz1ffHx4LF8mJih4LmRvbWFpbj1fLmRvbWFpbi5zbGljZSgpKSx4Ll9hbmNob3JBeGlzPVwiZnJlZVwiPT09eC5hbmNob3I/bnVsbDpoLmdldEZyb21JZCh1LHguYW5jaG9yKX1mb3IoaT0wO2k8Yi5sZW5ndGg7aSsrKSh4PWJbaV0pLl9jb3VudGVyQXhlcy5zb3J0KGguaWRTb3J0KSx4Ll9zdWJwbG90c1dpdGguc29ydChsLnN1YnBsb3RTb3J0KSx4Ll9tYWluU3VicGxvdD13KHgsZSl9LHYuY2xlYXJFeHBhbmRlZFRyYWNlRGVmYXVsdENvbG9ycz1mdW5jdGlvbih0KXt2YXIgZSxyLG47Zm9yKHI9W10sKGU9dC5fbW9kdWxlLl9jb2xvckF0dHJzKXx8KHQuX21vZHVsZS5fY29sb3JBdHRycz1lPVtdLG8uY3Jhd2wodC5fbW9kdWxlLmF0dHJpYnV0ZXMsZnVuY3Rpb24odCxuLGksYSl7clthXT1uLHIubGVuZ3RoPWErMSxcImNvbG9yXCI9PT10LnZhbFR5cGUmJnZvaWQgMD09PXQuZGZsdCYmZS5wdXNoKHIuam9pbihcIi5cIikpfSkpLG49MDtuPGUubGVuZ3RoO24rKyl7bC5uZXN0ZWRQcm9wZXJ0eSh0LFwiX2lucHV0LlwiK2Vbbl0pLmdldCgpfHxsLm5lc3RlZFByb3BlcnR5KHQsZVtuXSkuc2V0KG51bGwpfX0sdi5zdXBwbHlEYXRhRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksbyxjLHU9bi5fbW9kdWxlcyxoPW4uX3Zpc2libGVNb2R1bGVzLGY9bi5fYmFzZVBsb3RNb2R1bGVzLHA9MCxnPTA7ZnVuY3Rpb24gbSh0KXtlLnB1c2godCk7dmFyIHI9dC5fbW9kdWxlO3ImJihsLnB1c2hVbmlxdWUodSxyKSwhMD09PXQudmlzaWJsZSYmbC5wdXNoVW5pcXVlKGgsciksbC5wdXNoVW5pcXVlKGYsdC5fbW9kdWxlLmJhc2VQbG90TW9kdWxlKSxwKyssITEhPT10Ll9pbnB1dC52aXNpYmxlJiZnKyspfW4uX3RyYW5zZm9ybU1vZHVsZXM9W107dmFyIHk9e30seD1bXSxiPShyLnRlbXBsYXRlfHx7fSkuZGF0YXx8e30sXz1zLnRyYWNlVGVtcGxhdGVyKGIpO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe2lmKGM9dFtpXSwobz1fLm5ld1RyYWNlKGMpKS51aWQ9bi5fdHJhY2VVaWRzW2ldLHYuc3VwcGx5VHJhY2VEZWZhdWx0cyhjLG8sZyxuLGkpLG8uaW5kZXg9aSxvLl9pbnB1dD1jLG8uX2V4cGFuZGVkSW5kZXg9cCxvLnRyYW5zZm9ybXMmJm8udHJhbnNmb3Jtcy5sZW5ndGgpZm9yKHZhciB3PSExIT09Yy52aXNpYmxlJiYhMT09PW8udmlzaWJsZSxrPUEobyxlLHIsbiksVD0wO1Q8ay5sZW5ndGg7VCsrKXt2YXIgTT1rW1RdLFM9e190ZW1wbGF0ZTpvLl90ZW1wbGF0ZSx0eXBlOm8udHlwZSx1aWQ6by51aWQrVH07dyYmITE9PT1NLnZpc2libGUmJmRlbGV0ZSBNLnZpc2libGUsdi5zdXBwbHlUcmFjZURlZmF1bHRzKE0sUyxwLG4saSksZChTLE0pLFMuaW5kZXg9aSxTLl9pbnB1dD1jLFMuX2Z1bGxJbnB1dD1vLFMuX2V4cGFuZGVkSW5kZXg9cCxTLl9leHBhbmRlZElucHV0PU0sbShTKX1lbHNlIG8uX2Z1bGxJbnB1dD1vLG8uX2V4cGFuZGVkSW5wdXQ9byxtKG8pO2EudHJhY2VJcyhvLFwiY2FycGV0QXhpc1wiKSYmKHlbby5jYXJwZXRdPW8pLGEudHJhY2VJcyhvLFwiY2FycGV0RGVwZW5kZW50XCIpJiZ4LnB1c2goaSl9Zm9yKGk9MDtpPHgubGVuZ3RoO2krKylpZigobz1lW3hbaV1dKS52aXNpYmxlKXt2YXIgRT15W28uY2FycGV0XTtvLl9jYXJwZXQ9RSxFJiZFLnZpc2libGU/KG8ueGF4aXM9RS54YXhpcyxvLnlheGlzPUUueWF4aXMpOm8udmlzaWJsZT0hMX19LHYuc3VwcGx5QW5pbWF0aW9uRGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU7dD10fHx7fTt2YXIgcj17fTtmdW5jdGlvbiBuKGUsbil7cmV0dXJuIGwuY29lcmNlKHR8fHt9LHIsZixlLG4pfWlmKG4oXCJtb2RlXCIpLG4oXCJkaXJlY3Rpb25cIiksbihcImZyb21jdXJyZW50XCIpLEFycmF5LmlzQXJyYXkodC5mcmFtZSkpZm9yKHIuZnJhbWU9W10sZT0wO2U8dC5mcmFtZS5sZW5ndGg7ZSsrKXIuZnJhbWVbZV09di5zdXBwbHlBbmltYXRpb25GcmFtZURlZmF1bHRzKHQuZnJhbWVbZV18fHt9KTtlbHNlIHIuZnJhbWU9di5zdXBwbHlBbmltYXRpb25GcmFtZURlZmF1bHRzKHQuZnJhbWV8fHt9KTtpZihBcnJheS5pc0FycmF5KHQudHJhbnNpdGlvbikpZm9yKHIudHJhbnNpdGlvbj1bXSxlPTA7ZTx0LnRyYW5zaXRpb24ubGVuZ3RoO2UrKylyLnRyYW5zaXRpb25bZV09di5zdXBwbHlBbmltYXRpb25UcmFuc2l0aW9uRGVmYXVsdHModC50cmFuc2l0aW9uW2VdfHx7fSk7ZWxzZSByLnRyYW5zaXRpb249di5zdXBwbHlBbmltYXRpb25UcmFuc2l0aW9uRGVmYXVsdHModC50cmFuc2l0aW9ufHx7fSk7cmV0dXJuIHJ9LHYuc3VwcGx5QW5pbWF0aW9uRnJhbWVEZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiByKHIsbil7cmV0dXJuIGwuY29lcmNlKHR8fHt9LGUsZi5mcmFtZSxyLG4pfXJldHVybiByKFwiZHVyYXRpb25cIikscihcInJlZHJhd1wiKSxlfSx2LnN1cHBseUFuaW1hdGlvblRyYW5zaXRpb25EZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiByKHIsbil7cmV0dXJuIGwuY29lcmNlKHR8fHt9LGUsZi50cmFuc2l0aW9uLHIsbil9cmV0dXJuIHIoXCJkdXJhdGlvblwiKSxyKFwiZWFzaW5nXCIpLGV9LHYuc3VwcGx5RnJhbWVEZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiByKHIsbil7cmV0dXJuIGwuY29lcmNlKHQsZSxwLHIsbil9cmV0dXJuIHIoXCJncm91cFwiKSxyKFwibmFtZVwiKSxyKFwidHJhY2VzXCIpLHIoXCJiYXNlZnJhbWVcIikscihcImRhdGFcIikscihcImxheW91dFwiKSxlfSx2LnN1cHBseVRyYWNlRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbyxzPW4uY29sb3J3YXl8fGMuZGVmYXVsdHMsdT1zW3Ilcy5sZW5ndGhdO2Z1bmN0aW9uIGgocixuKXtyZXR1cm4gbC5jb2VyY2UodCxlLHYuYXR0cmlidXRlcyxyLG4pfXZhciBmPWgoXCJ2aXNpYmxlXCIpO2goXCJ0eXBlXCIpLGgoXCJuYW1lXCIsbi5fdHJhY2VXb3JkK1wiIFwiK2kpLGgoXCJ1aXJldmlzaW9uXCIsbi51aXJldmlzaW9uKTt2YXIgcD12LmdldE1vZHVsZShlKTtpZihlLl9tb2R1bGU9cCxwKXt2YXIgZD1wLmJhc2VQbG90TW9kdWxlLGc9ZC5hdHRyLG09ZC5hdHRyaWJ1dGVzO2lmKGcmJm0pe3ZhciB5PW4uX3N1YnBsb3RzLHg9XCJcIjtpZihcImdsMmRcIiE9PWQubmFtZXx8Zil7aWYoQXJyYXkuaXNBcnJheShnKSlmb3Iobz0wO288Zy5sZW5ndGg7bysrKXt2YXIgYj1nW29dLF89bC5jb2VyY2UodCxlLG0sYik7eVtiXSYmbC5wdXNoVW5pcXVlKHlbYl0sXykseCs9X31lbHNlIHg9bC5jb2VyY2UodCxlLG0sZyk7eVtkLm5hbWVdJiZsLnB1c2hVbmlxdWUoeVtkLm5hbWVdLHgpfX19cmV0dXJuIGYmJihoKFwiY3VzdG9tZGF0YVwiKSxoKFwiaWRzXCIpLGEudHJhY2VJcyhlLFwic2hvd0xlZ2VuZFwiKT8oZS5fZGZsdFNob3dMZWdlbmQ9ITAsaChcInNob3dsZWdlbmRcIiksaChcImxlZ2VuZGdyb3VwXCIpKTplLl9kZmx0U2hvd0xlZ2VuZD0hMSxwJiZwLnN1cHBseURlZmF1bHRzKHQsZSx1LG4pLGEudHJhY2VJcyhlLFwibm9PcGFjaXR5XCIpfHxoKFwib3BhY2l0eVwiKSxhLnRyYWNlSXMoZSxcIm5vdExlZ2VuZElzb2xhdGFibGVcIikmJihlLnZpc2libGU9ISFlLnZpc2libGUpLGEudHJhY2VJcyhlLFwibm9Ib3ZlclwiKXx8KGUuaG92ZXJ0ZW1wbGF0ZXx8bC5jb2VyY2VIb3ZlcmluZm8odCxlLG4pLFwicGFyY2F0c1wiIT09ZS50eXBlJiZhLmdldENvbXBvbmVudE1ldGhvZChcImZ4XCIsXCJzdXBwbHlEZWZhdWx0c1wiKSh0LGUsdSxuKSkscCYmcC5zZWxlY3RQb2ludHMmJmgoXCJzZWxlY3RlZHBvaW50c1wiKSx2LnN1cHBseVRyYW5zZm9ybURlZmF1bHRzKHQsZSxuKSksZX0sdi5oYXNNYWtlc0RhdGFUcmFuc2Zvcm09ayx2LnN1cHBseVRyYW5zZm9ybURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyKXtpZihlLl9sZW5ndGh8fGsodCkpe3ZhciBuPXIuX2dsb2JhbFRyYW5zZm9ybXN8fFtdLGk9ci5fdHJhbnNmb3JtTW9kdWxlc3x8W107aWYoQXJyYXkuaXNBcnJheSh0LnRyYW5zZm9ybXMpfHwwIT09bi5sZW5ndGgpZm9yKHZhciBhPXQudHJhbnNmb3Jtc3x8W10sbz1uLmNvbmNhdChhKSxzPWUudHJhbnNmb3Jtcz1bXSxjPTA7YzxvLmxlbmd0aDtjKyspe3ZhciB1LGg9b1tjXSxmPWgudHlwZSxwPW1bZl0sZD0hKGguX21vZHVsZSYmaC5fbW9kdWxlPT09cCksZz1wJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBwLnRyYW5zZm9ybTtwfHxsLndhcm4oXCJVbnJlY29nbml6ZWQgdHJhbnNmb3JtIHR5cGUgXCIrZitcIi5cIikscCYmcC5zdXBwbHlEZWZhdWx0cyYmKGR8fGcpPygodT1wLnN1cHBseURlZmF1bHRzKGgsZSxyLHQpKS50eXBlPWYsdS5fbW9kdWxlPXAsbC5wdXNoVW5pcXVlKGkscCkpOnU9bC5leHRlbmRGbGF0KHt9LGgpLHMucHVzaCh1KX19fSx2LnN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHIsbil7cmV0dXJuIGwuY29lcmNlKHQsZSx2LmxheW91dEF0dHJpYnV0ZXMscixuKX12YXIgaT10LnRlbXBsYXRlO2wuaXNQbGFpbk9iamVjdChpKSYmKGUudGVtcGxhdGU9aSxlLl90ZW1wbGF0ZT1pLmxheW91dCxlLl9kYXRhVGVtcGxhdGU9aS5kYXRhKTt2YXIgbz1sLmNvZXJjZUZvbnQobixcImZvbnRcIik7bihcInRpdGxlLnRleHRcIixlLl9kZmx0VGl0bGUucGxvdCksbC5jb2VyY2VGb250KG4sXCJ0aXRsZS5mb250XCIse2ZhbWlseTpvLmZhbWlseSxzaXplOk1hdGgucm91bmQoMS40Km8uc2l6ZSksY29sb3I6by5jb2xvcn0pLG4oXCJ0aXRsZS54cmVmXCIpLG4oXCJ0aXRsZS55cmVmXCIpLG4oXCJ0aXRsZS54XCIpLG4oXCJ0aXRsZS55XCIpLG4oXCJ0aXRsZS54YW5jaG9yXCIpLG4oXCJ0aXRsZS55YW5jaG9yXCIpLG4oXCJ0aXRsZS5wYWQudFwiKSxuKFwidGl0bGUucGFkLnJcIiksbihcInRpdGxlLnBhZC5iXCIpLG4oXCJ0aXRsZS5wYWQubFwiKSxuKFwiYXV0b3NpemVcIiwhKHQud2lkdGgmJnQuaGVpZ2h0KSksbihcIndpZHRoXCIpLG4oXCJoZWlnaHRcIiksbihcIm1hcmdpbi5sXCIpLG4oXCJtYXJnaW4uclwiKSxuKFwibWFyZ2luLnRcIiksbihcIm1hcmdpbi5iXCIpLG4oXCJtYXJnaW4ucGFkXCIpLG4oXCJtYXJnaW4uYXV0b2V4cGFuZFwiKSx0LndpZHRoJiZ0LmhlaWdodCYmdi5zYW5pdGl6ZU1hcmdpbnMoZSksYS5nZXRDb21wb25lbnRNZXRob2QoXCJncmlkXCIsXCJzaXplRGVmYXVsdHNcIikodCxlKSxuKFwicGFwZXJfYmdjb2xvclwiKSxuKFwic2VwYXJhdG9yc1wiLHIuZGVjaW1hbCtyLnRob3VzYW5kcyksbihcImhpZGVzb3VyY2VzXCIpLG4oXCJjb2xvcndheVwiKSxuKFwiZGF0YXJldmlzaW9uXCIpO3ZhciBzPW4oXCJ1aXJldmlzaW9uXCIpO24oXCJlZGl0cmV2aXNpb25cIixzKSxuKFwic2VsZWN0aW9ucmV2aXNpb25cIixzKSxuKFwibW9kZWJhci5vcmllbnRhdGlvblwiKSxuKFwibW9kZWJhci5iZ2NvbG9yXCIsYy5hZGRPcGFjaXR5KGUucGFwZXJfYmdjb2xvciwuNSkpO3ZhciB1PWMuY29udHJhc3QoYy5yZ2IoZS5tb2RlYmFyLmJnY29sb3IpKTtuKFwibW9kZWJhci5jb2xvclwiLGMuYWRkT3BhY2l0eSh1LC4zKSksbihcIm1vZGViYXIuYWN0aXZlY29sb3JcIixjLmFkZE9wYWNpdHkodSwuNykpLG4oXCJtb2RlYmFyLnVpcmV2aXNpb25cIixzKSxuKFwibWV0YVwiKSxsLmlzUGxhaW5PYmplY3QodC50cmFuc2l0aW9uKSYmKG4oXCJ0cmFuc2l0aW9uLmR1cmF0aW9uXCIpLG4oXCJ0cmFuc2l0aW9uLmVhc2luZ1wiKSxuKFwidHJhbnNpdGlvbi5vcmRlcmluZ1wiKSksYS5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcImhhbmRsZURlZmF1bHRzXCIpKHQsZSxcImNhbGVuZGFyXCIpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKFwiZnhcIixcInN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzXCIpKHQsZSxuKX0sdi5wbG90QXV0b1NpemU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGEsbz10Ll9jb250ZXh0fHx7fSxzPW8uZnJhbWVNYXJnaW5zLGM9bC5pc1Bsb3REaXYodCk7aWYoYyYmdC5lbWl0KFwicGxvdGx5X2F1dG9zaXplXCIpLG8uZmlsbEZyYW1lKW49d2luZG93LmlubmVyV2lkdGgsYT13aW5kb3cuaW5uZXJIZWlnaHQsZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz1cImhpZGRlblwiO2Vsc2V7dmFyIHU9Yz93aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KTp7fTtpZihuPXBhcnNlRmxvYXQodS53aWR0aCl8fHBhcnNlRmxvYXQodS5tYXhXaWR0aCl8fHIud2lkdGgsYT1wYXJzZUZsb2F0KHUuaGVpZ2h0KXx8cGFyc2VGbG9hdCh1Lm1heEhlaWdodCl8fHIuaGVpZ2h0LGkocykmJnM+MCl7dmFyIGg9MS0yKnM7bj1NYXRoLnJvdW5kKGgqbiksYT1NYXRoLnJvdW5kKGgqYSl9fXZhciBmPXYubGF5b3V0QXR0cmlidXRlcy53aWR0aC5taW4scD12LmxheW91dEF0dHJpYnV0ZXMuaGVpZ2h0Lm1pbjtuPGYmJihuPWYpLGE8cCYmKGE9cCk7dmFyIGQ9IWUud2lkdGgmJk1hdGguYWJzKHIud2lkdGgtbik+MSxnPSFlLmhlaWdodCYmTWF0aC5hYnMoci5oZWlnaHQtYSk+MTsoZ3x8ZCkmJihkJiYoci53aWR0aD1uKSxnJiYoci5oZWlnaHQ9YSkpLHQuX2luaXRpYWxBdXRvU2l6ZXx8KHQuX2luaXRpYWxBdXRvU2l6ZT17d2lkdGg6bixoZWlnaHQ6YX0pLHYuc2FuaXRpemVNYXJnaW5zKHIpfSx2LnN1cHBseUxheW91dE1vZHVsZURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLG8scyxjPWEuY29tcG9uZW50c1JlZ2lzdHJ5LHU9ZS5fYmFzZVBsb3RNb2R1bGVzLGg9YS5zdWJwbG90c1JlZ2lzdHJ5LmNhcnRlc2lhbjtmb3IoaSBpbiBjKShzPWNbaV0pLmluY2x1ZGVCYXNlUGxvdCYmcy5pbmNsdWRlQmFzZVBsb3QodCxlKTtmb3IodmFyIGYgaW4gdS5sZW5ndGh8fHUucHVzaChoKSxlLl9oYXMoXCJjYXJ0ZXNpYW5cIikmJihhLmdldENvbXBvbmVudE1ldGhvZChcImdyaWRcIixcImNvbnRlbnREZWZhdWx0c1wiKSh0LGUpLGguZmluYWxpemVTdWJwbG90cyh0LGUpKSxlLl9zdWJwbG90cyllLl9zdWJwbG90c1tmXS5zb3J0KGwuc3VicGxvdFNvcnQpO2ZvcihvPTA7bzx1Lmxlbmd0aDtvKyspKHM9dVtvXSkuc3VwcGx5TGF5b3V0RGVmYXVsdHMmJnMuc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIpO3ZhciBwPWUuX21vZHVsZXM7Zm9yKG89MDtvPHAubGVuZ3RoO28rKykocz1wW29dKS5zdXBwbHlMYXlvdXREZWZhdWx0cyYmcy5zdXBwbHlMYXlvdXREZWZhdWx0cyh0LGUscik7dmFyIGQ9ZS5fdHJhbnNmb3JtTW9kdWxlcztmb3Iobz0wO288ZC5sZW5ndGg7bysrKShzPWRbb10pLnN1cHBseUxheW91dERlZmF1bHRzJiZzLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyLG4pO2ZvcihpIGluIGMpKHM9Y1tpXSkuc3VwcGx5TGF5b3V0RGVmYXVsdHMmJnMuc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIpfSx2LnB1cmdlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXR8fHt9O3ZvaWQgMCE9PWUuX2dsY29udGFpbmVyJiYoZS5fZ2xjb250YWluZXIuc2VsZWN0QWxsKFwiLmdsLWNhbnZhc1wiKS5yZW1vdmUoKSxlLl9nbGNvbnRhaW5lci5yZW1vdmUoKSxlLl9nbGNhbnZhcz1udWxsKSx2b2lkIDAhPT1lLl9nZW9jb250YWluZXImJmUuX2dlb2NvbnRhaW5lci5yZW1vdmUoKSxlLl9tb2RlQmFyJiZlLl9tb2RlQmFyLmRlc3Ryb3koKSx0Ll90cmFuc2l0aW9uRGF0YSYmKHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MmJih0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLmxlbmd0aD0wKSx0Ll90cmFuc2l0aW9uRGF0YS5fYW5pbWF0aW9uUmFmJiZ3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodC5fdHJhbnNpdGlvbkRhdGEuX2FuaW1hdGlvblJhZikpLGwuY2xlYXJUaHJvdHRsZSgpLGwuY2xlYXJSZXNwb25zaXZlKHQpLGRlbGV0ZSB0LmRhdGEsZGVsZXRlIHQubGF5b3V0LGRlbGV0ZSB0Ll9mdWxsRGF0YSxkZWxldGUgdC5fZnVsbExheW91dCxkZWxldGUgdC5jYWxjZGF0YSxkZWxldGUgdC5mcmFtZXdvcmssZGVsZXRlIHQuZW1wdHksZGVsZXRlIHQuZmlkLGRlbGV0ZSB0LnVuZG9xdWV1ZSxkZWxldGUgdC51bmRvbnVtLGRlbGV0ZSB0LmF1dG9wbGF5LGRlbGV0ZSB0LmNoYW5nZWQsZGVsZXRlIHQuX3Byb21pc2VzLGRlbGV0ZSB0Ll9yZWRyYXdUaW1lcixkZWxldGUgdC5faG1sdW1jb3VudCxkZWxldGUgdC5faG1waXhjb3VudCxkZWxldGUgdC5fdHJhbnNpdGlvbkRhdGEsZGVsZXRlIHQuX3RyYW5zaXRpb25pbmcsZGVsZXRlIHQuX2luaXRpYWxBdXRvU2l6ZSxkZWxldGUgdC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbixkZWxldGUgdC5fZHJhZ2dpbmcsZGVsZXRlIHQuX2RyYWdnZWQsZGVsZXRlIHQuX2RyYWdkYXRhLGRlbGV0ZSB0Ll9ob3ZlcmRhdGEsZGVsZXRlIHQuX3NuYXBzaG90SW5Qcm9ncmVzcyxkZWxldGUgdC5fZWRpdGluZyxkZWxldGUgdC5fbW91c2VEb3duVGltZSxkZWxldGUgdC5fbGVnZW5kTW91c2VEb3duVGltZSx0LnJlbW92ZUFsbExpc3RlbmVycyYmdC5yZW1vdmVBbGxMaXN0ZW5lcnMoKX0sdi5zdHlsZT1mdW5jdGlvbih0KXt2YXIgZSxyPXQuX2Z1bGxMYXlvdXQuX3Zpc2libGVNb2R1bGVzLG49W107Zm9yKGU9MDtlPHIubGVuZ3RoO2UrKyl7dmFyIGk9cltlXTtpLnN0eWxlJiZsLnB1c2hVbmlxdWUobixpLnN0eWxlKX1mb3IoZT0wO2U8bi5sZW5ndGg7ZSsrKW5bZV0odCl9LHYuc2FuaXRpemVNYXJnaW5zPWZ1bmN0aW9uKHQpe2lmKHQmJnQubWFyZ2luKXt2YXIgZSxyPXQud2lkdGgsbj10LmhlaWdodCxpPXQubWFyZ2luLGE9ci0oaS5sK2kuciksbz1uLShpLnQraS5iKTthPDAmJihlPShyLTEpLyhpLmwraS5yKSxpLmw9TWF0aC5mbG9vcihlKmkubCksaS5yPU1hdGguZmxvb3IoZSppLnIpKSxvPDAmJihlPShuLTEpLyhpLnQraS5iKSxpLnQ9TWF0aC5mbG9vcihlKmkudCksaS5iPU1hdGguZmxvb3IoZSppLmIpKX19LHYuY2xlYXJBdXRvTWFyZ2luSWRzPWZ1bmN0aW9uKHQpe3QuX2Z1bGxMYXlvdXQuX3B1c2htYXJnaW5JZHM9e319LHYuYWxsb3dBdXRvTWFyZ2luPWZ1bmN0aW9uKHQsZSl7dC5fZnVsbExheW91dC5fcHVzaG1hcmdpbklkc1tlXT0xfSx2LmF1dG9NYXJnaW49ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuX2Z1bGxMYXlvdXQsaT1uLl9wdXNobWFyZ2luLGE9bi5fcHVzaG1hcmdpbklkcztpZighMSE9PW4ubWFyZ2luLmF1dG9leHBhbmQpe2lmKHIpe3ZhciBvPXIucGFkO2lmKHZvaWQgMD09PW8pe3ZhciBzPW4ubWFyZ2luO289TWF0aC5taW4oMTIscy5sLHMucixzLnQscy5iKX1yLmwrci5yPi41Km4ud2lkdGgmJihyLmw9ci5yPTApLHIuYityLnQ+LjUqbi5oZWlnaHQmJihyLmI9ci50PTApO3ZhciBsPXZvaWQgMCE9PXIueGw/ci54bDpyLngsYz12b2lkIDAhPT1yLnhyP3IueHI6ci54LHU9dm9pZCAwIT09ci55dD9yLnl0OnIueSxoPXZvaWQgMCE9PXIueWI/ci55YjpyLnk7aVtlXT17bDp7dmFsOmwsc2l6ZTpyLmwrb30scjp7dmFsOmMsc2l6ZTpyLnIrb30sYjp7dmFsOmgsc2l6ZTpyLmIrb30sdDp7dmFsOnUsc2l6ZTpyLnQrb319LGFbZV09MX1lbHNlIGRlbGV0ZSBpW2VdLGRlbGV0ZSBhW2VdO24uX3JlcGxvdHRpbmd8fHYuZG9BdXRvTWFyZ2luKHQpfX0sdi5kb0F1dG9NYXJnaW49ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtlLl9zaXplfHwoZS5fc2l6ZT17fSksVChlKTt2YXIgcj1lLl9zaXplLG49SlNPTi5zdHJpbmdpZnkociksbz1lLm1hcmdpbixzPW8ubCxsPW8ucixjPW8udCx1PW8uYixoPWUud2lkdGgsZj1lLmhlaWdodCxwPWUuX3B1c2htYXJnaW4sZD1lLl9wdXNobWFyZ2luSWRzO2lmKCExIT09ZS5tYXJnaW4uYXV0b2V4cGFuZCl7Zm9yKHZhciBnIGluIHApZFtnXXx8ZGVsZXRlIHBbZ107Zm9yKHZhciB2IGluIHAuYmFzZT17bDp7dmFsOjAsc2l6ZTpzfSxyOnt2YWw6MSxzaXplOmx9LHQ6e3ZhbDoxLHNpemU6Y30sYjp7dmFsOjAsc2l6ZTp1fX0scCl7dmFyIG09cFt2XS5sfHx7fSx5PXBbdl0uYnx8e30seD1tLnZhbCxiPW0uc2l6ZSxfPXkudmFsLHc9eS5zaXplO2Zvcih2YXIgayBpbiBwKXtpZihpKGIpJiZwW2tdLnIpe3ZhciBBPXBba10uci52YWwsTT1wW2tdLnIuc2l6ZTtpZihBPngpe3ZhciBTPShiKkErKE0taCkqeCkvKEEteCksRT0oTSooMS14KSsoYi1oKSooMS1BKSkvKEEteCk7Uz49MCYmRT49MCYmaC0oUytFKT4wJiZTK0U+cytsJiYocz1TLGw9RSl9fWlmKGkodykmJnBba10udCl7dmFyIEM9cFtrXS50LnZhbCxMPXBba10udC5zaXplO2lmKEM+Xyl7dmFyIHo9KHcqQysoTC1mKSpfKS8oQy1fKSxPPShMKigxLV8pKyh3LWYpKigxLUMpKS8oQy1fKTt6Pj0wJiZPPj0wJiZmLShPK3opPjAmJnorTz51K2MmJih1PXosYz1PKX19fX19aWYoci5sPU1hdGgucm91bmQocyksci5yPU1hdGgucm91bmQobCksci50PU1hdGgucm91bmQoYyksci5iPU1hdGgucm91bmQodSksci5wPU1hdGgucm91bmQoby5wYWQpLHIudz1NYXRoLnJvdW5kKGgpLXIubC1yLnIsci5oPU1hdGgucm91bmQoZiktci50LXIuYiwhZS5fcmVwbG90dGluZyYmXCJ7fVwiIT09biYmbiE9PUpTT04uc3RyaW5naWZ5KGUuX3NpemUpKXJldHVyblwiX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnRcImluIGU/ZS5fcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudCsrOmUuX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnQ9MSxhLmNhbGwoXCJwbG90XCIsdCl9LHYuZ3JhcGhKc29uPWZ1bmN0aW9uKHQsZSxyLG4saSl7KGkmJmUmJiF0Ll9mdWxsRGF0YXx8aSYmIWUmJiF0Ll9mdWxsTGF5b3V0KSYmdi5zdXBwbHlEZWZhdWx0cyh0KTt2YXIgYT1pP3QuX2Z1bGxEYXRhOnQuZGF0YSxvPWk/dC5fZnVsbExheW91dDp0LmxheW91dCxzPSh0Ll90cmFuc2l0aW9uRGF0YXx8e30pLl9mcmFtZXM7ZnVuY3Rpb24gYyh0KXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KXJldHVybiBudWxsO2lmKGwuaXNQbGFpbk9iamVjdCh0KSl7dmFyIGUsbixpPXt9O2ZvcihlIGluIHQpaWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdFtlXSYmLTE9PT1bXCJfXCIsXCJbXCJdLmluZGV4T2YoZS5jaGFyQXQoMCkpKXtpZihcImtlZXBkYXRhXCI9PT1yKXtpZihcInNyY1wiPT09ZS5zdWJzdHIoZS5sZW5ndGgtMykpY29udGludWV9ZWxzZSBpZihcImtlZXBzdHJlYW1cIj09PXIpe2lmKFwic3RyaW5nXCI9PXR5cGVvZihuPXRbZStcInNyY1wiXSkmJm4uaW5kZXhPZihcIjpcIik+MCYmIWwuaXNQbGFpbk9iamVjdCh0LnN0cmVhbSkpY29udGludWV9ZWxzZSBpZihcImtlZXBhbGxcIiE9PXImJlwic3RyaW5nXCI9PXR5cGVvZihuPXRbZStcInNyY1wiXSkmJm4uaW5kZXhPZihcIjpcIik+MCljb250aW51ZTtpW2VdPWModFtlXSl9cmV0dXJuIGl9cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5tYXAoYyk6bC5pc1R5cGVkQXJyYXkodCk/bC5zaW1wbGVNYXAodCxsLmlkZW50aXR5KTpsLmlzSlNEYXRlKHQpP2wubXMyRGF0ZVRpbWVMb2NhbCgrdCk6dH12YXIgdT17ZGF0YTooYXx8W10pLm1hcChmdW5jdGlvbih0KXt2YXIgcj1jKHQpO3JldHVybiBlJiZkZWxldGUgci5maXQscn0pfTtyZXR1cm4gZXx8KHUubGF5b3V0PWMobykpLHQuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5pc1BvbGFyJiYodT10LmZyYW1ld29yay5nZXRDb25maWcoKSkscyYmKHUuZnJhbWVzPWMocykpLFwib2JqZWN0XCI9PT1uP3U6SlNPTi5zdHJpbmdpZnkodSl9LHYubW9kaWZ5RnJhbWVzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyxvPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKylzd2l0Y2goKG49ZVtyXSkudHlwZSl7Y2FzZVwicmVwbGFjZVwiOmk9bi52YWx1ZTt2YXIgcz0oYVtuLmluZGV4XXx8e30pLm5hbWUsbD1pLm5hbWU7YVtuLmluZGV4XT1vW2xdPWksbCE9PXMmJihkZWxldGUgb1tzXSxvW2xdPWkpO2JyZWFrO2Nhc2VcImluc2VydFwiOm9bKGk9bi52YWx1ZSkubmFtZV09aSxhLnNwbGljZShuLmluZGV4LDAsaSk7YnJlYWs7Y2FzZVwiZGVsZXRlXCI6ZGVsZXRlIG9bKGk9YVtuLmluZGV4XSkubmFtZV0sYS5zcGxpY2Uobi5pbmRleCwxKX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9LHYuY29tcHV0ZUZyYW1lPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbz10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoO2lmKCFlKXRocm93IG5ldyBFcnJvcihcImNvbXB1dGVGcmFtZSBtdXN0IGJlIGdpdmVuIGEgc3RyaW5nIGZyYW1lIG5hbWVcIik7dmFyIHM9b1tlLnRvU3RyaW5nKCldO2lmKCFzKXJldHVybiExO2Zvcih2YXIgbD1bc10sYz1bcy5uYW1lXTtzLmJhc2VmcmFtZSYmKHM9b1tzLmJhc2VmcmFtZS50b1N0cmluZygpXSkmJi0xPT09Yy5pbmRleE9mKHMubmFtZSk7KWwucHVzaChzKSxjLnB1c2gocy5uYW1lKTtmb3IodmFyIHU9e307cz1sLnBvcCgpOylpZihzLmxheW91dCYmKHUubGF5b3V0PXYuZXh0ZW5kTGF5b3V0KHUubGF5b3V0LHMubGF5b3V0KSkscy5kYXRhKXtpZih1LmRhdGF8fCh1LmRhdGE9W10pLCEobj1zLnRyYWNlcykpZm9yKG49W10scj0wO3I8cy5kYXRhLmxlbmd0aDtyKyspbltyXT1yO2Zvcih1LnRyYWNlc3x8KHUudHJhY2VzPVtdKSxyPTA7cjxzLmRhdGEubGVuZ3RoO3IrKyludWxsIT0oaT1uW3JdKSYmKC0xPT09KGE9dS50cmFjZXMuaW5kZXhPZihpKSkmJihhPXUuZGF0YS5sZW5ndGgsdS50cmFjZXNbYV09aSksdS5kYXRhW2FdPXYuZXh0ZW5kVHJhY2UodS5kYXRhW2FdLHMuZGF0YVtyXSkpfXJldHVybiB1fSx2LnJlY29tcHV0ZUZyYW1lSGFzaD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaD17fSxyPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2kmJmkubmFtZSYmKGVbaS5uYW1lXT1pKX19LHYuZXh0ZW5kT2JqZWN0V2l0aENvbnRhaW5lcnM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHMsYyx1LGg9bC5leHRlbmREZWVwTm9BcnJheXMoe30sZXx8e30pLGY9bC5leHBhbmRPYmplY3RQYXRocyhoKSxwPXt9O2lmKHImJnIubGVuZ3RoKWZvcihhPTA7YTxyLmxlbmd0aDthKyspdm9pZCAwPT09KGk9KG49bC5uZXN0ZWRQcm9wZXJ0eShmLHJbYV0pKS5nZXQoKSk/bC5uZXN0ZWRQcm9wZXJ0eShwLHJbYV0pLnNldChudWxsKToobi5zZXQobnVsbCksbC5uZXN0ZWRQcm9wZXJ0eShwLHJbYV0pLnNldChpKSk7aWYodD1sLmV4dGVuZERlZXBOb0FycmF5cyh0fHx7fSxmKSxyJiZyLmxlbmd0aClmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKWlmKGM9bC5uZXN0ZWRQcm9wZXJ0eShwLHJbYV0pLmdldCgpKXtmb3IodT0ocz1sLm5lc3RlZFByb3BlcnR5KHQsclthXSkpLmdldCgpLEFycmF5LmlzQXJyYXkodSl8fCh1PVtdLHMuc2V0KHUpKSxvPTA7bzxjLmxlbmd0aDtvKyspe3ZhciBkPWNbb107dVtvXT1udWxsPT09ZD9udWxsOnYuZXh0ZW5kT2JqZWN0V2l0aENvbnRhaW5lcnModVtvXSxkKX1zLnNldCh1KX1yZXR1cm4gdH0sdi5kYXRhQXJyYXlDb250YWluZXJzPVtcInRyYW5zZm9ybXNcIixcImRpbWVuc2lvbnNcIl0sdi5sYXlvdXRBcnJheUNvbnRhaW5lcnM9YS5sYXlvdXRBcnJheUNvbnRhaW5lcnMsdi5leHRlbmRUcmFjZT1mdW5jdGlvbih0LGUpe3JldHVybiB2LmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzKHQsZSx2LmRhdGFBcnJheUNvbnRhaW5lcnMpfSx2LmV4dGVuZExheW91dD1mdW5jdGlvbih0LGUpe3JldHVybiB2LmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzKHQsZSx2LmxheW91dEFycmF5Q29udGFpbmVycyl9LHYudHJhbnNpdGlvbj1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89e3JlZHJhdzppLnJlZHJhd30scz1bXSxjPVtdO3JldHVybiBvLnByZXBhcmVGbj1mdW5jdGlvbigpe2Zvcih2YXIgaT1BcnJheS5pc0FycmF5KGUpP2UubGVuZ3RoOjAsYT1uLnNsaWNlKDAsaSksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgdT1hW29dLGg9dC5fZnVsbERhdGFbdV0uX21vZHVsZTtoJiYoaC5hbmltYXRhYmxlJiZzLnB1c2godSksdC5kYXRhW2Fbb11dPXYuZXh0ZW5kVHJhY2UodC5kYXRhW2Fbb11dLGVbb10pKX12YXIgZj1sLmV4cGFuZE9iamVjdFBhdGhzKGwuZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LHIpKSxwPS9eW3h5XWF4aXNbMC05XSokLztmb3IodmFyIGQgaW4gZilwLnRlc3QoZCkmJmRlbGV0ZSBmW2RdLnJhbmdlO3YuZXh0ZW5kTGF5b3V0KHQubGF5b3V0LGYpLGRlbGV0ZSB0LmNhbGNkYXRhLHYuc3VwcGx5RGVmYXVsdHModCksdi5kb0NhbGNkYXRhKHQpO3ZhciBnPWwuZXhwYW5kT2JqZWN0UGF0aHMocik7aWYoZyl7dmFyIG09dC5fZnVsbExheW91dC5fcGxvdHM7Zm9yKHZhciB5IGluIG0pe3ZhciB4LGIsXyx3LGs9bVt5XSxBPWsueGF4aXMsVD1rLnlheGlzLE09QS5yYW5nZS5zbGljZSgpLFM9VC5yYW5nZS5zbGljZSgpO0FycmF5LmlzQXJyYXkoZ1tBLl9uYW1lK1wiLnJhbmdlXCJdKT94PWdbQS5fbmFtZStcIi5yYW5nZVwiXS5zbGljZSgpOkFycmF5LmlzQXJyYXkoKGdbQS5fbmFtZV18fHt9KS5yYW5nZSkmJih4PWdbQS5fbmFtZV0ucmFuZ2Uuc2xpY2UoKSksQXJyYXkuaXNBcnJheShnW1QuX25hbWUrXCIucmFuZ2VcIl0pP2I9Z1tULl9uYW1lK1wiLnJhbmdlXCJdLnNsaWNlKCk6QXJyYXkuaXNBcnJheSgoZ1tULl9uYW1lXXx8e30pLnJhbmdlKSYmKGI9Z1tULl9uYW1lXS5yYW5nZS5zbGljZSgpKSxNJiZ4JiYoTVswXSE9PXhbMF18fE1bMV0hPT14WzFdKSYmKF89e3hyMDpNLHhyMTp4fSksUyYmYiYmKFNbMF0hPT1iWzBdfHxTWzFdIT09YlsxXSkmJih3PXt5cjA6Uyx5cjE6Yn0pLChffHx3KSYmYy5wdXNoKGwuZXh0ZW5kRmxhdCh7cGxvdGluZm86a30sXyx3KSl9fXJldHVybiBQcm9taXNlLnJlc29sdmUoKX0sby5ydW5Gbj1mdW5jdGlvbihlKXt2YXIgbixpLG89dC5fZnVsbExheW91dC5fYmFzZVBsb3RNb2R1bGVzLHU9Yy5sZW5ndGg7aWYocilmb3IoaT0wO2k8by5sZW5ndGg7aSsrKW9baV0udHJhbnNpdGlvbkF4ZXMmJm9baV0udHJhbnNpdGlvbkF4ZXModCxjLGEsZSk7Zm9yKHU/KChuPWwuZXh0ZW5kRmxhdCh7fSxhKSkuZHVyYXRpb249MCxzPW51bGwpOm49YSxpPTA7aTxvLmxlbmd0aDtpKyspb1tpXS5wbG90KHQscyxuLGUpfSxNKHQsYSxvKX0sdi50cmFuc2l0aW9uRnJvbVJlYWN0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuX2Z1bGxMYXlvdXQsYT1pLnRyYW5zaXRpb24sbz17fSxzPVtdO3JldHVybiBvLnByZXBhcmVGbj1mdW5jdGlvbigpe3ZhciB0PWkuX3Bsb3RzO2Zvcih2YXIgYSBpbiBvLnJlZHJhdz0hMSxcInNvbWVcIj09PWUuYW5pbSYmKG8ucmVkcmF3PSEwKSxcInNvbWVcIj09PXIuYW5pbSYmKG8ucmVkcmF3PSEwKSx0KXt2YXIgYyx1LGg9dFthXSxmPWgueGF4aXMscD1oLnlheGlzLGQ9bltmLl9uYW1lXS5yYW5nZS5zbGljZSgpLGc9bltwLl9uYW1lXS5yYW5nZS5zbGljZSgpLHY9Zi5yYW5nZS5zbGljZSgpLG09cC5yYW5nZS5zbGljZSgpO2Yuc2V0U2NhbGUoKSxwLnNldFNjYWxlKCksZFswXT09PXZbMF0mJmRbMV09PT12WzFdfHwoYz17eHIwOmQseHIxOnZ9KSxnWzBdPT09bVswXSYmZ1sxXT09PW1bMV18fCh1PXt5cjA6Zyx5cjE6bX0pLChjfHx1KSYmcy5wdXNoKGwuZXh0ZW5kRmxhdCh7cGxvdGluZm86aH0sYyx1KSl9cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSxvLnJ1bkZuPWZ1bmN0aW9uKHIpe2Zvcih2YXIgbixpLG8sYz10Ll9mdWxsRGF0YSx1PXQuX2Z1bGxMYXlvdXQuX2Jhc2VQbG90TW9kdWxlcyxoPVtdLGY9MDtmPGMubGVuZ3RoO2YrKyloLnB1c2goZik7ZnVuY3Rpb24gcCgpe2Zvcih2YXIgZT0wO2U8dS5sZW5ndGg7ZSsrKXVbZV0udHJhbnNpdGlvbkF4ZXMmJnVbZV0udHJhbnNpdGlvbkF4ZXModCxzLG4scil9ZnVuY3Rpb24gZCgpe2Zvcih2YXIgZT0wO2U8dS5sZW5ndGg7ZSsrKXVbZV0ucGxvdCh0LG8saSxyKX1zLmxlbmd0aCYmZS5hbmltP1widHJhY2VzIGZpcnN0XCI9PT1hLm9yZGVyaW5nPyhuPWwuZXh0ZW5kRmxhdCh7fSxhLHtkdXJhdGlvbjowfSksbz1oLGk9YSxkKCksc2V0VGltZW91dChwLGEuZHVyYXRpb24pKToobj1hLG89bnVsbCxpPWwuZXh0ZW5kRmxhdCh7fSxhLHtkdXJhdGlvbjowfSkscCgpLGQoKSk6cy5sZW5ndGg/KG49YSxwKCkpOmUuYW5pbSYmKG89aCxpPWEsZCgpKX0sTSh0LGEsbyl9LHYuZG9DYWxjZGF0YT1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxzLGM9aC5saXN0KHQpLGY9dC5fZnVsbERhdGEscD10Ll9mdWxsTGF5b3V0LGQ9bmV3IEFycmF5KGYubGVuZ3RoKSxnPSh0LmNhbGNkYXRhfHxbXSkuc2xpY2UoMCk7Zm9yKHQuY2FsY2RhdGE9ZCxwLl9udW1Cb3hlcz0wLHAuX251bVZpb2xpbnM9MCxwLl92aW9saW5TY2FsZUdyb3VwU3RhdHM9e30sdC5faG1waXhjb3VudD0wLHQuX2htbHVtY291bnQ9MCxwLl9waWVjb2xvcm1hcD17fSxwLl9zdW5idXJzdGNvbG9ybWFwPXt9LGk9MDtpPGYubGVuZ3RoO2krKylBcnJheS5pc0FycmF5KGUpJiYtMT09PWUuaW5kZXhPZihpKSYmKGRbaV09Z1tpXSk7Zm9yKGk9MDtpPGYubGVuZ3RoO2krKykocj1mW2ldKS5fYXJyYXlBdHRycz1vLmZpbmRBcnJheUF0dHJpYnV0ZXMociksci5fZXh0cmVtZXM9e307dmFyIHY9cC5fc3VicGxvdHMucG9sYXJ8fFtdO2ZvcihpPTA7aTx2Lmxlbmd0aDtpKyspYy5wdXNoKHBbdltpXV0ucmFkaWFsYXhpcyxwW3ZbaV1dLmFuZ3VsYXJheGlzKTtTKGMsZik7dmFyIHk9ITE7Zm9yKGk9MDtpPGYubGVuZ3RoO2krKylpZighMD09PShyPWZbaV0pLnZpc2libGUmJnIudHJhbnNmb3Jtcyl7aWYoKG49ci5fbW9kdWxlKSYmbi5jYWxjKXt2YXIgeD1uLmNhbGModCxyKTt4WzBdJiZ4WzBdLnQmJnhbMF0udC5fc2NlbmUmJmRlbGV0ZSB4WzBdLnQuX3NjZW5lLmRpcnR5fWZvcihzPTA7czxyLnRyYW5zZm9ybXMubGVuZ3RoO3MrKyl7dmFyIGI9ci50cmFuc2Zvcm1zW3NdOyhuPW1bYi50eXBlXSkmJm4uY2FsY1RyYW5zZm9ybSYmKHIuX2hhc0NhbGNUcmFuc2Zvcm09ITAseT0hMCxuLmNhbGNUcmFuc2Zvcm0odCxyLGIpKX19ZnVuY3Rpb24gXyhlLGkpe2lmKHI9ZltlXSwhIShuPXIuX21vZHVsZSkuaXNDb250YWluZXI9PT1pKXt2YXIgYT1bXTtpZighMD09PXIudmlzaWJsZSl7ZGVsZXRlIHIuX2luZGV4VG9Qb2ludHM7dmFyIG89ci50cmFuc2Zvcm1zfHxbXTtmb3Iocz1vLmxlbmd0aC0xO3M+PTA7cy0tKWlmKG9bc10uZW5hYmxlZCl7ci5faW5kZXhUb1BvaW50cz1vW3NdLl9pbmRleFRvUG9pbnRzO2JyZWFrfW4mJm4uY2FsYyYmKGE9bi5jYWxjKHQscikpfUFycmF5LmlzQXJyYXkoYSkmJmFbMF18fChhPVt7eDp1LHk6dX1dKSxhWzBdLnR8fChhWzBdLnQ9e30pLGFbMF0udHJhY2U9cixkW2VdPWF9fWZvcih5JiZTKGMsZiksaT0wO2k8Zi5sZW5ndGg7aSsrKV8oaSwhMCk7Zm9yKGk9MDtpPGYubGVuZ3RoO2krKylfKGksITEpOyFmdW5jdGlvbih0KXt2YXIgZSxyLG4saT10Ll9mdWxsTGF5b3V0LGE9aS5fdmlzaWJsZU1vZHVsZXMsbz17fTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXt2YXIgcz1hW3JdLGM9cy5jcm9zc1RyYWNlQ2FsYztpZihjKXt2YXIgdT1zLmJhc2VQbG90TW9kdWxlLm5hbWU7b1t1XT9sLnB1c2hVbmlxdWUob1t1XSxjKTpvW3VdPVtjXX19Zm9yKG4gaW4gbyl7dmFyIGg9b1tuXSxmPWkuX3N1YnBsb3RzW25dO2lmKEFycmF5LmlzQXJyYXkoZikpZm9yKGU9MDtlPGYubGVuZ3RoO2UrKyl7dmFyIHA9ZltlXSxkPVwiY2FydGVzaWFuXCI9PT1uP2kuX3Bsb3RzW3BdOmlbcF07Zm9yKHI9MDtyPGgubGVuZ3RoO3IrKyloW3JdKHQsZCxwKX1lbHNlIGZvcihyPTA7cjxoLmxlbmd0aDtyKyspaFtyXSh0KX19KHQpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKFwiZnhcIixcImNhbGNcIikodCksYS5nZXRDb21wb25lbnRNZXRob2QoXCJlcnJvcmJhcnNcIixcImNhbGNcIikodCl9LHYucmVob3Zlcj1mdW5jdGlvbih0KXt0Ll9mdWxsTGF5b3V0Ll9yZWhvdmVyJiZ0Ll9mdWxsTGF5b3V0Ll9yZWhvdmVyKCl9LHYucmVkcmFnPWZ1bmN0aW9uKHQpe3QuX2Z1bGxMYXlvdXQuX3JlZHJhZyYmdC5fZnVsbExheW91dC5fcmVkcmFnKCl9LHYuZ2VuZXJhbFVwZGF0ZVBlclRyYWNlTW9kdWxlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9ZS50cmFjZUhhc2gsbz17fTtmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgcz1yW2ldLGM9c1swXS50cmFjZTtjLnZpc2libGUmJihvW2MudHlwZV09b1tjLnR5cGVdfHxbXSxvW2MudHlwZV0ucHVzaChzKSl9Zm9yKHZhciB1IGluIGEpaWYoIW9bdV0pe3ZhciBoPWFbdV1bMF07aFswXS50cmFjZS52aXNpYmxlPSExLG9bdV09W2hdfWZvcih2YXIgZiBpbiBvKXt2YXIgcD1vW2ZdO3BbMF1bMF0udHJhY2UuX21vZHVsZS5wbG90KHQsZSxsLmZpbHRlclZpc2libGUocCksbil9ZS50cmFjZUhhc2g9b319LHtcIi4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vbGliXCI6NzAxLFwiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWFcIjo3MzgsXCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vcmVnaXN0cnlcIjo4MjksXCIuL2FuaW1hdGlvbl9hdHRyaWJ1dGVzXCI6NzQ0LFwiLi9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi9jYXJ0ZXNpYW4vYXhpc19pZHNcIjo3NTIsXCIuL2NvbW1hbmRcIjo3NzMsXCIuL2ZvbnRfYXR0cmlidXRlc1wiOjc3NSxcIi4vZnJhbWVfYXR0cmlidXRlc1wiOjc3NixcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo4MDEsZDM6MTU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw4MTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e2F0dHI6XCJzdWJwbG90XCIsbmFtZTpcInBvbGFyXCIsYXhpc05hbWVzOltcImFuZ3VsYXJheGlzXCIsXCJyYWRpYWxheGlzXCJdLGF4aXNOYW1lMmRhdGFBcnJheTp7YW5ndWxhcmF4aXM6XCJ0aGV0YVwiLHJhZGlhbGF4aXM6XCJyXCJ9LGxheWVyTmFtZXM6W1wiZHJhZ2xheWVyXCIsXCJwbG90YmdcIixcImJhY2twbG90XCIsXCJhbmd1bGFyLWdyaWRcIixcInJhZGlhbC1ncmlkXCIsXCJmcm9udHBsb3RcIixcImFuZ3VsYXItbGluZVwiLFwicmFkaWFsLWxpbmVcIixcImFuZ3VsYXItYXhpc1wiLFwicmFkaWFsLWF4aXNcIl0scmFkaWFsRHJhZ0JveFNpemU6NTAsYW5ndWxhckRyYWdCb3hTaXplOjMwLGNvcm5lckxlbjoyNSxjb3JuZXJIYWxmV2lkdGg6MixNSU5EUkFHOjgsTUlOWk9PTToyMCxPRkZFREdFOjIwfX0se31dLDgxMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vbGliL3BvbHlnb25cIikudGVzdGVyLGE9bi5maW5kSW5kZXhPZk1pbixvPW4uaXNBbmdsZUluc2lkZVNlY3RvcixzPW4uYW5nbGVEZWx0YSxsPW4uYW5nbGVEaXN0O2Z1bmN0aW9uIGModCxlLHIsbil7dmFyIGksYSxvPW5bMF0scz1uWzFdLGw9aChNYXRoLnNpbihlKS1NYXRoLnNpbih0KSksYz1oKE1hdGguY29zKGUpLU1hdGguY29zKHQpKSx1PU1hdGgudGFuKHIpLGY9aCgxL3UpLHA9bC9jLGQ9cy1wKm87cmV0dXJuIGY/bCYmYz9hPXUqKGk9ZC8odS1wKSk6Yz8oaT1zKmYsYT1zKTooaT1vLGE9byp1KTpsJiZjPyhpPTAsYT1kKTpjPyhpPTAsYT1zKTppPWE9TmFOLFtpLGFdfWZ1bmN0aW9uIHUodCxlLHIsaSl7cmV0dXJuIG4uaXNGdWxsQ2lyY2xlKFtlLHJdKT9mdW5jdGlvbih0LGUpe3ZhciByLG49ZS5sZW5ndGgsaT1uZXcgQXJyYXkobisxKTtmb3Iocj0wO3I8bjtyKyspe3ZhciBhPWVbcl07aVtyXT1bdCpNYXRoLmNvcyhhKSx0Kk1hdGguc2luKGEpXX1yZXR1cm4gaVtyXT1pWzBdLnNsaWNlKCksaX0odCxpKTpmdW5jdGlvbih0LGUscixpKXt2YXIgcyx1LGg9aS5sZW5ndGgsZj1bXTtmdW5jdGlvbiBwKGUpe3JldHVyblt0Kk1hdGguY29zKGUpLHQqTWF0aC5zaW4oZSldfWZ1bmN0aW9uIGQodCxlLHIpe3JldHVybiBjKHQsZSxyLHAodCkpfWZ1bmN0aW9uIGcodCl7cmV0dXJuIG4ubW9kKHQsaCl9ZnVuY3Rpb24gdih0KXtyZXR1cm4gbyh0LFtlLHJdKX12YXIgbT1hKGksZnVuY3Rpb24odCl7cmV0dXJuIHYodCk/bCh0LGUpOjEvMH0pLHk9ZChpW21dLGlbZyhtLTEpXSxlKTtmb3IoZi5wdXNoKHkpLHM9bSx1PTA7dTxoO3MrKyx1Kyspe3ZhciB4PWlbZyhzKV07aWYoIXYoeCkpYnJlYWs7Zi5wdXNoKHAoeCkpfXZhciBiPWEoaSxmdW5jdGlvbih0KXtyZXR1cm4gdih0KT9sKHQscik6MS8wfSksXz1kKGlbYl0saVtnKGIrMSldLHIpO3JldHVybiBmLnB1c2goXyksZi5wdXNoKFswLDBdKSxmLnB1c2goZlswXS5zbGljZSgpKSxmfSh0LGUscixpKX1mdW5jdGlvbiBoKHQpe3JldHVybiBNYXRoLmFicyh0KT4xZS0xMD90OjB9ZnVuY3Rpb24gZih0LGUscil7ZT1lfHwwLHI9cnx8MDtmb3IodmFyIG49dC5sZW5ndGgsaT1uZXcgQXJyYXkobiksYT0wO2E8bjthKyspe3ZhciBvPXRbYV07aVthXT1bZStvWzBdLHItb1sxXV19cmV0dXJuIGl9ZS5leHBvcnRzPXtpc1B0SW5zaWRlUG9seWdvbjpmdW5jdGlvbih0LGUscixuLGEpe2lmKCFvKGUsbikpcmV0dXJuITE7dmFyIHMsbDtyWzBdPHJbMV0/KHM9clswXSxsPXJbMV0pOihzPXJbMV0sbD1yWzBdKTt2YXIgYz1pKHUocyxuWzBdLG5bMV0sYSkpLGg9aSh1KGwsblswXSxuWzFdLGEpKSxmPVt0Kk1hdGguY29zKGUpLHQqTWF0aC5zaW4oZSldO3JldHVybiBoLmNvbnRhaW5zKGYpJiYhYy5jb250YWlucyhmKX0sZmluZFBvbHlnb25PZmZzZXQ6ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTEvMCxhPTEvMCxvPXUodCxlLHIsbikscz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdO2k9TWF0aC5taW4oaSxsWzBdKSxhPU1hdGgubWluKGEsLWxbMV0pfXJldHVybltpLGFdfSxmaW5kRW5jbG9zaW5nVmVydGV4QW5nbGVzOmZ1bmN0aW9uKHQsZSl7dmFyIHI9YShlLGZ1bmN0aW9uKGUpe3ZhciByPXMoZSx0KTtyZXR1cm4gcj4wP3I6MS8wfSksaT1uLm1vZChyKzEsZS5sZW5ndGgpO3JldHVybltlW3JdLGVbaV1dfSxmaW5kSW50ZXJzZWN0aW9uWFk6YyxmaW5kWFlhdExlbmd0aDpmdW5jdGlvbih0LGUscixuKXt2YXIgaT0tZSpyLGE9ZSplKzEsbz0yKihlKmktcikscz1pKmkrcipyLXQqdCxsPU1hdGguc3FydChvKm8tNCphKnMpLGM9KC1vK2wpLygyKmEpLHU9KC1vLWwpLygyKmEpO3JldHVybltbYyxlKmMraStuXSxbdSxlKnUraStuXV19LGNsYW1wVGlueTpoLHBhdGhQb2x5Z29uOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXtyZXR1cm5cIk1cIitmKHUodCxlLHIsbiksaSxhKS5qb2luKFwiTFwiKX0scGF0aFBvbHlnb25Bbm51bHVzOmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzLGw7dDxlPyhzPXQsbD1lKToocz1lLGw9dCk7dmFyIGM9Zih1KHMscixuLGkpLGEsbyk7cmV0dXJuXCJNXCIrZih1KGwscixuLGkpLGEsbykucmV2ZXJzZSgpLmpvaW4oXCJMXCIpK1wiTVwiK2Muam9pbihcIkxcIil9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3BvbHlnb25cIjo3MTN9XSw4MTM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vZ2V0X2RhdGFcIikuZ2V0U3VicGxvdENhbGNEYXRhLGk9dChcIi4uLy4uL2xpYlwiKS5jb3VudGVyUmVnZXgsYT10KFwiLi9wb2xhclwiKSxvPXQoXCIuL2NvbnN0YW50c1wiKSxzPW8uYXR0cixsPW8ubmFtZSxjPWkobCksdT17fTt1W3NdPXt2YWxUeXBlOlwic3VicGxvdGlkXCIsZGZsdDpsLGVkaXRUeXBlOlwiY2FsY1wifSxlLmV4cG9ydHM9e2F0dHI6cyxuYW1lOmwsaWRSb290OmwsaWRSZWdleDpjLGF0dHJSZWdleDpjLGF0dHJpYnV0ZXM6dSxsYXlvdXRBdHRyaWJ1dGVzOnQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoXCIuL2xheW91dF9kZWZhdWx0c1wiKSxwbG90OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxpPWUuX3N1YnBsb3RzW2xdLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9aVtvXSxjPW4ocixsLHMpLHU9ZVtzXS5fc3VicGxvdDt1fHwodT1hKHQscyksZVtzXS5fc3VicGxvdD11KSx1LnBsb3QoYyxlLHQuX3Byb21pc2VzKX19LGNsZWFuOmZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1uLl9zdWJwbG90c1tsXXx8W10sYT1uLl9oYXMmJm4uX2hhcyhcImdsXCIpLG89ZS5faGFzJiZlLl9oYXMoXCJnbFwiKSxzPWEmJiFvLGM9MDtjPGkubGVuZ3RoO2MrKyl7dmFyIHU9aVtjXSxoPW5bdV0uX3N1YnBsb3Q7aWYoIWVbdV0mJmgpZm9yKHZhciBmIGluIGguZnJhbWV3b3JrLnJlbW92ZSgpLGgubGF5ZXJzW1wicmFkaWFsLWF4aXMtdGl0bGVcIl0ucmVtb3ZlKCksaC5jbGlwUGF0aHMpaC5jbGlwUGF0aHNbZl0ucmVtb3ZlKCk7cyYmaC5fc2NlbmUmJihoLl9zY2VuZS5kZXN0cm95KCksaC5fc2NlbmU9bnVsbCl9fSx0b1NWRzp0KFwiLi4vY2FydGVzaWFuXCIpLnRvU1ZHfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vY2FydGVzaWFuXCI6NzYwLFwiLi4vZ2V0X2RhdGFcIjo3ODQsXCIuL2NvbnN0YW50c1wiOjgxMSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo4MTQsXCIuL2xheW91dF9kZWZhdWx0c1wiOjgxNSxcIi4vcG9sYXJcIjo4MjJ9XSw4MTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlc1wiKSxhPXQoXCIuLi9kb21haW5cIikuYXR0cmlidXRlcyxvPXQoXCIuLi8uLi9saWJcIikuZXh0ZW5kRmxhdCxzPXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsLGw9cyh7Y29sb3I6aS5jb2xvcixzaG93bGluZTpvKHt9LGkuc2hvd2xpbmUse2RmbHQ6ITB9KSxsaW5lY29sb3I6aS5saW5lY29sb3IsbGluZXdpZHRoOmkubGluZXdpZHRoLHNob3dncmlkOm8oe30saS5zaG93Z3JpZCx7ZGZsdDohMH0pLGdyaWRjb2xvcjppLmdyaWRjb2xvcixncmlkd2lkdGg6aS5ncmlkd2lkdGh9LFwicGxvdFwiLFwiZnJvbS1yb290XCIpLGM9cyh7dGlja21vZGU6aS50aWNrbW9kZSxudGlja3M6aS5udGlja3MsdGljazA6aS50aWNrMCxkdGljazppLmR0aWNrLHRpY2t2YWxzOmkudGlja3ZhbHMsdGlja3RleHQ6aS50aWNrdGV4dCx0aWNrczppLnRpY2tzLHRpY2tsZW46aS50aWNrbGVuLHRpY2t3aWR0aDppLnRpY2t3aWR0aCx0aWNrY29sb3I6aS50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6aS5zaG93dGlja2xhYmVscyxzaG93dGlja3ByZWZpeDppLnNob3d0aWNrcHJlZml4LHRpY2twcmVmaXg6aS50aWNrcHJlZml4LHNob3d0aWNrc3VmZml4Omkuc2hvd3RpY2tzdWZmaXgsdGlja3N1ZmZpeDppLnRpY2tzdWZmaXgsc2hvd2V4cG9uZW50Omkuc2hvd2V4cG9uZW50LGV4cG9uZW50Zm9ybWF0OmkuZXhwb25lbnRmb3JtYXQsc2VwYXJhdGV0aG91c2FuZHM6aS5zZXBhcmF0ZXRob3VzYW5kcyx0aWNrZm9udDppLnRpY2tmb250LHRpY2thbmdsZTppLnRpY2thbmdsZSx0aWNrZm9ybWF0OmkudGlja2Zvcm1hdCx0aWNrZm9ybWF0c3RvcHM6aS50aWNrZm9ybWF0c3RvcHMsbGF5ZXI6aS5sYXllcn0sXCJwbG90XCIsXCJmcm9tLXJvb3RcIiksdT17dmlzaWJsZTpvKHt9LGkudmlzaWJsZSx7ZGZsdDohMH0pLHR5cGU6byh7fSxpLnR5cGUse3ZhbHVlczpbXCItXCIsXCJsaW5lYXJcIixcImxvZ1wiLFwiZGF0ZVwiLFwiY2F0ZWdvcnlcIl19KSxhdXRvcmFuZ2U6byh7fSxpLmF1dG9yYW5nZSx7ZWRpdFR5cGU6XCJwbG90XCJ9KSxyYW5nZW1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInRvemVyb1wiLFwibm9ubmVnYXRpdmVcIixcIm5vcm1hbFwiXSxkZmx0OlwidG96ZXJvXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHJhbmdlOm8oe30saS5yYW5nZSx7aXRlbXM6W3t2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJwbG90XCIsaW1wbGllZEVkaXRzOntcIl5hdXRvcmFuZ2VcIjohMX19LHt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJwbG90XCIsaW1wbGllZEVkaXRzOntcIl5hdXRvcmFuZ2VcIjohMX19XSxlZGl0VHlwZTpcInBsb3RcIn0pLGNhdGVnb3J5b3JkZXI6aS5jYXRlZ29yeW9yZGVyLGNhdGVnb3J5YXJyYXk6aS5jYXRlZ29yeWFycmF5LGFuZ2xlOnt2YWxUeXBlOlwiYW5nbGVcIixlZGl0VHlwZTpcInBsb3RcIn0sc2lkZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiY2xvY2t3aXNlXCIsXCJjb3VudGVyY2xvY2t3aXNlXCJdLGRmbHQ6XCJjbG9ja3dpc2VcIixlZGl0VHlwZTpcInBsb3RcIn0sdGl0bGU6cyhpLnRpdGxlLFwicGxvdFwiLFwiZnJvbS1yb290XCIpLGhvdmVyZm9ybWF0OmkuaG92ZXJmb3JtYXQsdWlyZXZpc2lvbjp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwibm9uZVwifSxlZGl0VHlwZTpcImNhbGNcIixfZGVwcmVjYXRlZDp7dGl0bGU6aS5fZGVwcmVjYXRlZC50aXRsZSx0aXRsZWZvbnQ6aS5fZGVwcmVjYXRlZC50aXRsZWZvbnR9fTt1LnRpdGxlLnRleHQuZGZsdD1cIlwiLG8odSxsLGMpO3ZhciBoPXt2aXNpYmxlOm8oe30saS52aXNpYmxlLHtkZmx0OiEwfSksdHlwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiLVwiLFwibGluZWFyXCIsXCJjYXRlZ29yeVwiXSxkZmx0OlwiLVwiLGVkaXRUeXBlOlwiY2FsY1wiLF9ub1RlbXBsYXRpbmc6ITB9LGNhdGVnb3J5b3JkZXI6aS5jYXRlZ29yeW9yZGVyLGNhdGVnb3J5YXJyYXk6aS5jYXRlZ29yeWFycmF5LHRoZXRhdW5pdDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wicmFkaWFuc1wiLFwiZGVncmVlc1wiXSxkZmx0OlwiZGVncmVlc1wiLGVkaXRUeXBlOlwiY2FsY1wifSxwZXJpb2Q6e3ZhbFR5cGU6XCJudW1iZXJcIixlZGl0VHlwZTpcImNhbGNcIixtaW46MH0sZGlyZWN0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJjb3VudGVyY2xvY2t3aXNlXCIsXCJjbG9ja3dpc2VcIl0sZGZsdDpcImNvdW50ZXJjbG9ja3dpc2VcIixlZGl0VHlwZTpcImNhbGNcIn0scm90YXRpb246e3ZhbFR5cGU6XCJhbmdsZVwiLGVkaXRUeXBlOlwiY2FsY1wifSxob3ZlcmZvcm1hdDppLmhvdmVyZm9ybWF0LHVpcmV2aXNpb246e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcIm5vbmVcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9O28oaCxsLGMpLGUuZXhwb3J0cz17ZG9tYWluOmEoe25hbWU6XCJwb2xhclwiLGVkaXRUeXBlOlwicGxvdFwifSksc2VjdG9yOnt2YWxUeXBlOlwiaW5mb19hcnJheVwiLGl0ZW1zOlt7dmFsVHlwZTpcIm51bWJlclwiLGVkaXRUeXBlOlwicGxvdFwifSx7dmFsVHlwZTpcIm51bWJlclwiLGVkaXRUeXBlOlwicGxvdFwifV0sZGZsdDpbMCwzNjBdLGVkaXRUeXBlOlwicGxvdFwifSxob2xlOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOlwicGxvdFwifSxiZ2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcInBsb3RcIixkZmx0Om4uYmFja2dyb3VuZH0scmFkaWFsYXhpczp1LGFuZ3VsYXJheGlzOmgsZ3JpZHNoYXBlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJjaXJjdWxhclwiLFwibGluZWFyXCJdLGRmbHQ6XCJjaXJjdWxhclwiLGVkaXRUeXBlOlwicGxvdFwifSx1aXJldmlzaW9uOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJub25lXCJ9LGVkaXRUeXBlOlwiY2FsY1wifX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzXCI6NTc3LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlc1wiOjc2MSxcIi4uL2RvbWFpblwiOjc3NH1dLDgxNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxhPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLG89dChcIi4uL3N1YnBsb3RfZGVmYXVsdHNcIikscz10KFwiLi4vZ2V0X2RhdGFcIikuZ2V0U3VicGxvdERhdGEsbD10KFwiLi4vY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHNcIiksYz10KFwiLi4vY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0c1wiKSx1PXQoXCIuLi9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0c1wiKSxoPXQoXCIuLi9jYXJ0ZXNpYW4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHNcIiksZj10KFwiLi4vY2FydGVzaWFuL2xpbmVfZ3JpZF9kZWZhdWx0c1wiKSxwPXQoXCIuLi9jYXJ0ZXNpYW4vYXhpc19hdXRvdHlwZVwiKSxkPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLGc9dChcIi4vc2V0X2NvbnZlcnRcIiksdj10KFwiLi9jb25zdGFudHNcIiksbT12LmF4aXNOYW1lcztmdW5jdGlvbiB5KHQsZSxyLG8pe3ZhciBwPXIoXCJiZ2NvbG9yXCIpO28uYmdDb2xvcj1pLmNvbWJpbmUocCxvLnBhcGVyX2JnY29sb3IpO3ZhciB5PXIoXCJzZWN0b3JcIik7cihcImhvbGVcIik7dmFyIGIsXz1zKG8uZnVsbERhdGEsdi5uYW1lLG8uaWQpLHc9by5sYXlvdXRPdXQ7ZnVuY3Rpb24gayh0LGUpe3JldHVybiByKGIrXCIuXCIrdCxlKX1mb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyl7Yj1tW0FdLG4uaXNQbGFpbk9iamVjdCh0W2JdKXx8KHRbYl09e30pO3ZhciBUPXRbYl0sTT1hLm5ld0NvbnRhaW5lcihlLGIpO00uX2lkPU0uX25hbWU9YixNLl9hdHRyPW8uaWQrXCIuXCIrYixNLl90cmFjZUluZGljZXM9Xy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuX2V4cGFuZGVkSW5kZXh9KTt2YXIgUz12LmF4aXNOYW1lMmRhdGFBcnJheVtiXSxFPXgoVCxNLGssXyxTKTtoKFQsTSxrLHtheERhdGE6XyxkYXRhQXR0cjpTfSk7dmFyIEMsTCx6PWsoXCJ2aXNpYmxlXCIpO3N3aXRjaChnKE0sZSx3KSxrKFwidWlyZXZpc2lvblwiLGUudWlyZXZpc2lvbikseiYmKEw9KEM9ayhcImNvbG9yXCIpKT09PVQuY29sb3I/QzpvLmZvbnQuY29sb3IpLE0uX209MSxiKXtjYXNlXCJyYWRpYWxheGlzXCI6dmFyIE89ayhcImF1dG9yYW5nZVwiLCFNLmlzVmFsaWRSYW5nZShULnJhbmdlKSk7VC5hdXRvcmFuZ2U9TywhT3x8XCJsaW5lYXJcIiE9PUUmJlwiLVwiIT09RXx8ayhcInJhbmdlbW9kZVwiKSxcInJldmVyc2VkXCI9PT1PJiYoTS5fbT0tMSksayhcInJhbmdlXCIpLE0uY2xlYW5SYW5nZShcInJhbmdlXCIse2RmbHRSYW5nZTpbMCwxXX0pLHomJihrKFwic2lkZVwiKSxrKFwiYW5nbGVcIix5WzBdKSxrKFwidGl0bGUudGV4dFwiKSxuLmNvZXJjZUZvbnQoayxcInRpdGxlLmZvbnRcIix7ZmFtaWx5Om8uZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKDEuMipvLmZvbnQuc2l6ZSksY29sb3I6TH0pKTticmVhaztjYXNlXCJhbmd1bGFyYXhpc1wiOmlmKFwiZGF0ZVwiPT09RSl7bi5sb2coXCJQb2xhciBwbG90cyBkbyBub3Qgc3VwcG9ydCBkYXRlIGFuZ3VsYXIgYXhlcyB5ZXQuXCIpO2Zvcih2YXIgST0wO0k8Xy5sZW5ndGg7SSsrKV9bSV0udmlzaWJsZT0hMTtFPVQudHlwZT1NLnR5cGU9XCJsaW5lYXJcIn1rKFwibGluZWFyXCI9PT1FP1widGhldGF1bml0XCI6XCJwZXJpb2RcIik7dmFyIEQ9ayhcImRpcmVjdGlvblwiKTtrKFwicm90YXRpb25cIix7Y291bnRlcmNsb2Nrd2lzZTowLGNsb2Nrd2lzZTo5MH1bRF0pfWlmKHopbChULE0sayxNLnR5cGUpLHUoVCxNLGssTS50eXBlLHt0aWNrU3VmZml4RGZsdDpcImRlZ3JlZXNcIj09PU0udGhldGF1bml0P1wiXFx4YjBcIjp2b2lkIDB9KSxjKFQsTSxrLHtvdXRlclRpY2tzOiEwfSksayhcInNob3d0aWNrbGFiZWxzXCIpJiYobi5jb2VyY2VGb250KGssXCJ0aWNrZm9udFwiLHtmYW1pbHk6by5mb250LmZhbWlseSxzaXplOm8uZm9udC5zaXplLGNvbG9yOkx9KSxrKFwidGlja2FuZ2xlXCIpLGsoXCJ0aWNrZm9ybWF0XCIpKSxmKFQsTSxrLHtkZmx0Q29sb3I6QyxiZ0NvbG9yOm8uYmdDb2xvcixibGVuZDo2MCxzaG93TGluZTohMCxzaG93R3JpZDohMCxub1plcm9MaW5lOiEwLGF0dHJpYnV0ZXM6ZFtiXX0pLGsoXCJsYXllclwiKTtcImNhdGVnb3J5XCIhPT1FJiZrKFwiaG92ZXJmb3JtYXRcIiksTS5faW5wdXQ9VH1cImNhdGVnb3J5XCI9PT1lLmFuZ3VsYXJheGlzLnR5cGUmJnIoXCJncmlkc2hhcGVcIil9ZnVuY3Rpb24geCh0LGUscixuLGkpe2lmKFwiLVwiPT09cihcInR5cGVcIikpe2Zvcih2YXIgYSxvPTA7bzxuLmxlbmd0aDtvKyspaWYobltvXS52aXNpYmxlKXthPW5bb107YnJlYWt9YSYmYVtpXSYmKGUudHlwZT1wKGFbaV0sXCJncmVnb3JpYW5cIikpLFwiLVwiPT09ZS50eXBlP2UudHlwZT1cImxpbmVhclwiOnQudHlwZT1lLnR5cGV9cmV0dXJuIGUudHlwZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe28odCxlLHIse3R5cGU6di5uYW1lLGF0dHJpYnV0ZXM6ZCxoYW5kbGVEZWZhdWx0czp5LGZvbnQ6ZS5mb250LHBhcGVyX2JnY29sb3I6ZS5wYXBlcl9iZ2NvbG9yLGZ1bGxEYXRhOnIsbGF5b3V0T3V0OmV9KX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vY2FydGVzaWFuL2F4aXNfYXV0b3R5cGVcIjo3NTAsXCIuLi9jYXJ0ZXNpYW4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHNcIjo3NTMsXCIuLi9jYXJ0ZXNpYW4vbGluZV9ncmlkX2RlZmF1bHRzXCI6NzYzLFwiLi4vY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHNcIjo3NjgsXCIuLi9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzXCI6NzY5LFwiLi4vY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHNcIjo3NzAsXCIuLi9nZXRfZGF0YVwiOjc4NCxcIi4uL3N1YnBsb3RfZGVmYXVsdHNcIjo4MjQsXCIuL2NvbnN0YW50c1wiOjgxMSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo4MTQsXCIuL3NldF9jb252ZXJ0XCI6ODIzfV0sODE2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXNcIiksaT1uLm1hcmtlcixhPXQoXCIuLi8uLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQ7W1wiQXJlYSB0cmFjZXMgYXJlIGRlcHJlY2F0ZWQhXCIsXCJQbGVhc2Ugc3dpdGNoIHRvIHRoZSAqYmFycG9sYXIqIHRyYWNlIHR5cGUuXCJdLmpvaW4oXCIgXCIpO2UuZXhwb3J0cz17cjphKHt9LG4ucix7fSksdDphKHt9LG4udCx7fSksbWFya2VyOntjb2xvcjphKHt9LGkuY29sb3Ise30pLHNpemU6YSh7fSxpLnNpemUse30pLHN5bWJvbDphKHt9LGkuc3ltYm9sLHt9KSxvcGFjaXR5OmEoe30saS5vcGFjaXR5LHt9KSxlZGl0VHlwZTpcImNhbGNcIn19fSx7XCIuLi8uLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlc1wiOjEwNTJ9XSw4MTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxhPXQoXCIuLi8uLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsLG89W1wiTGVnYWN5IHBvbGFyIGNoYXJ0cyBhcmUgZGVwcmVjYXRlZCFcIixcIlBsZWFzZSBzd2l0Y2ggdG8gKnBvbGFyKiBzdWJwbG90cy5cIl0uam9pbihcIiBcIikscz1pKHt9LG4uZG9tYWluLHt9KTtmdW5jdGlvbiBsKHQsZSl7cmV0dXJuIGkoe30sZSx7c2hvd2xpbmU6e3ZhbFR5cGU6XCJib29sZWFuXCJ9LHNob3d0aWNrbGFiZWxzOnt2YWxUeXBlOlwiYm9vbGVhblwifSx0aWNrb3JpZW50YXRpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImhvcml6b250YWxcIixcInZlcnRpY2FsXCJdfSx0aWNrbGVuOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjB9LHRpY2tjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCJ9LHRpY2tzdWZmaXg6e3ZhbFR5cGU6XCJzdHJpbmdcIn0sZW5kcGFkZGluZzp7dmFsVHlwZTpcIm51bWJlclwiLGRlc2NyaXB0aW9uOm99LHZpc2libGU6e3ZhbFR5cGU6XCJib29sZWFuXCJ9fSl9ZS5leHBvcnRzPWEoe3JhZGlhbGF4aXM6bCgwLHtyYW5nZTp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixpdGVtczpbe3ZhbFR5cGU6XCJudW1iZXJcIn0se3ZhbFR5cGU6XCJudW1iZXJcIn1dfSxkb21haW46cyxvcmllbnRhdGlvbjp7dmFsVHlwZTpcIm51bWJlclwifX0pLGFuZ3VsYXJheGlzOmwoMCx7cmFuZ2U6e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsaXRlbXM6W3t2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowfSx7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MzYwfV19LGRvbWFpbjpzfSksbGF5b3V0OntkaXJlY3Rpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImNsb2Nrd2lzZVwiLFwiY291bnRlcmNsb2Nrd2lzZVwiXX0sb3JpZW50YXRpb246e3ZhbFR5cGU6XCJhbmdsZVwifX19LFwicGxvdFwiLFwibmVzdGVkXCIpfSx7XCIuLi8uLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uLy4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlc1wiOjc2MX1dLDgxODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhlLmV4cG9ydHM9dChcIi4vbWljcm9wb2xhclwiKSkubWFuYWdlcj10KFwiLi9taWNyb3BvbGFyX21hbmFnZXJcIil9LHtcIi4vbWljcm9wb2xhclwiOjgxOSxcIi4vbWljcm9wb2xhcl9tYW5hZ2VyXCI6ODIwfV0sODE5OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uLy4uL2xpYlwiKS5leHRlbmREZWVwQWxsLGE9dChcIi4uLy4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIikuTUlEX1NISUZULG89ZS5leHBvcnRzPXt2ZXJzaW9uOlwiMC4yLjJcIn07by5BeGlzPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLHMsbD17ZGF0YTpbXSxsYXlvdXQ6e319LGM9e30sdT17fSxoPW4uZGlzcGF0Y2goXCJob3ZlclwiKSxmPXt9O3JldHVybiBmLnJlbmRlcj1mdW5jdGlvbihjKXtyZXR1cm4gZnVuY3Rpb24oYyl7ZT1jfHxlO3ZhciBoPWwuZGF0YSxmPWwubGF5b3V0OyhcInN0cmluZ1wiPT10eXBlb2YgZXx8ZS5ub2RlTmFtZSkmJihlPW4uc2VsZWN0KGUpKSxlLmRhdHVtKGgpLmVhY2goZnVuY3Rpb24oZSxsKXt2YXIgYz1lLnNsaWNlKCk7dT17ZGF0YTpvLnV0aWwuY2xvbmVKc29uKGMpLGxheW91dDpvLnV0aWwuY2xvbmVKc29uKGYpfTt2YXIgaD0wO2MuZm9yRWFjaChmdW5jdGlvbih0LGUpe3QuY29sb3J8fCh0LmNvbG9yPWYuZGVmYXVsdENvbG9yUmFuZ2VbaF0saD0oaCsxKSVmLmRlZmF1bHRDb2xvclJhbmdlLmxlbmd0aCksdC5zdHJva2VDb2xvcnx8KHQuc3Ryb2tlQ29sb3I9XCJMaW5lUGxvdFwiPT09dC5nZW9tZXRyeT90LmNvbG9yOm4ucmdiKHQuY29sb3IpLmRhcmtlcigpLnRvU3RyaW5nKCkpLHUuZGF0YVtlXS5jb2xvcj10LmNvbG9yLHUuZGF0YVtlXS5zdHJva2VDb2xvcj10LnN0cm9rZUNvbG9yLHUuZGF0YVtlXS5zdHJva2VEYXNoPXQuc3Ryb2tlRGFzaCx1LmRhdGFbZV0uc3Ryb2tlU2l6ZT10LnN0cm9rZVNpemV9KTt2YXIgcD1jLmZpbHRlcihmdW5jdGlvbih0LGUpe3ZhciByPXQudmlzaWJsZTtyZXR1cm5cInVuZGVmaW5lZFwiPT10eXBlb2Ygcnx8ITA9PT1yfSksZD0hMSxnPXAubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQ9ZHx8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHQuZ3JvdXBJZCx0fSk7aWYoZCl7dmFyIHY9bi5uZXN0KCkua2V5KGZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHQuZ3JvdXBJZD90Lmdyb3VwSWQ6XCJ1bnN0YWNrZWRcIn0pLmVudHJpZXMoZyksbT1bXSx5PXYubWFwKGZ1bmN0aW9uKHQsZSl7aWYoXCJ1bnN0YWNrZWRcIj09PXQua2V5KXJldHVybiB0LnZhbHVlczt2YXIgcj10LnZhbHVlc1swXS5yLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiAwfSk7cmV0dXJuIHQudmFsdWVzLmZvckVhY2goZnVuY3Rpb24odCxlLG4pe3QueVN0YWNrPVtyXSxtLnB1c2gocikscj1vLnV0aWwuc3VtQXJyYXlzKHQucixyKX0pLHQudmFsdWVzfSk7cD1uLm1lcmdlKHkpfXAuZm9yRWFjaChmdW5jdGlvbih0LGUpe3QudD1BcnJheS5pc0FycmF5KHQudFswXSk/dC50Olt0LnRdLHQucj1BcnJheS5pc0FycmF5KHQuclswXSk/dC5yOlt0LnJdfSk7dmFyIHg9TWF0aC5taW4oZi53aWR0aC1mLm1hcmdpbi5sZWZ0LWYubWFyZ2luLnJpZ2h0LGYuaGVpZ2h0LWYubWFyZ2luLnRvcC1mLm1hcmdpbi5ib3R0b20pLzI7eD1NYXRoLm1heCgxMCx4KTt2YXIgYixfPVtmLm1hcmdpbi5sZWZ0K3gsZi5tYXJnaW4udG9wK3hdO2I9ZD9bMCxuLm1heChvLnV0aWwuc3VtQXJyYXlzKG8udXRpbC5hcnJheUxhc3QocCkuclswXSxvLnV0aWwuYXJyYXlMYXN0KG0pKSldOm4uZXh0ZW50KG8udXRpbC5mbGF0dGVuQXJyYXkocC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5yfSkpKSxmLnJhZGlhbEF4aXMuZG9tYWluIT1vLkRBVEFFWFRFTlQmJihiWzBdPTApLHI9bi5zY2FsZS5saW5lYXIoKS5kb21haW4oZi5yYWRpYWxBeGlzLmRvbWFpbiE9by5EQVRBRVhURU5UJiZmLnJhZGlhbEF4aXMuZG9tYWluP2YucmFkaWFsQXhpcy5kb21haW46YikucmFuZ2UoWzAseF0pLHUubGF5b3V0LnJhZGlhbEF4aXMuZG9tYWluPXIuZG9tYWluKCk7dmFyIHcsaz1vLnV0aWwuZmxhdHRlbkFycmF5KHAubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudH0pKSxBPVwic3RyaW5nXCI9PXR5cGVvZiBrWzBdO0EmJihrPW8udXRpbC5kZWR1cGxpY2F0ZShrKSx3PWsuc2xpY2UoKSxrPW4ucmFuZ2Uoay5sZW5ndGgpLHA9cC5tYXAoZnVuY3Rpb24odCxlKXt2YXIgcj10O3JldHVybiB0LnQ9W2tdLGQmJihyLnlTdGFjaz10LnlTdGFjaykscn0pKTt2YXIgVD1wLmZpbHRlcihmdW5jdGlvbih0LGUpe3JldHVyblwiTGluZVBsb3RcIj09PXQuZ2VvbWV0cnl8fFwiRG90UGxvdFwiPT09dC5nZW9tZXRyeX0pLmxlbmd0aD09PXAubGVuZ3RoLE09bnVsbD09PWYubmVlZHNFbmRTcGFjaW5nP0F8fCFUOmYubmVlZHNFbmRTcGFjaW5nLFM9Zi5hbmd1bGFyQXhpcy5kb21haW4mJmYuYW5ndWxhckF4aXMuZG9tYWluIT1vLkRBVEFFWFRFTlQmJiFBJiZmLmFuZ3VsYXJBeGlzLmRvbWFpblswXT49MD9mLmFuZ3VsYXJBeGlzLmRvbWFpbjpuLmV4dGVudChrKSxFPU1hdGguYWJzKGtbMV0ta1swXSk7VCYmIUEmJihFPTApO3ZhciBDPVMuc2xpY2UoKTtNJiZBJiYoQ1sxXSs9RSk7dmFyIEw9Zi5hbmd1bGFyQXhpcy50aWNrc0NvdW50fHw0O0w+OCYmKEw9TC8oTC84KStMJTgpLGYuYW5ndWxhckF4aXMudGlja3NTdGVwJiYoTD0oQ1sxXS1DWzBdKS9MKTt2YXIgej1mLmFuZ3VsYXJBeGlzLnRpY2tzU3RlcHx8KENbMV0tQ1swXSkvKEwqKGYubWlub3JUaWNrcysxKSk7dyYmKHo9TWF0aC5tYXgoTWF0aC5yb3VuZCh6KSwxKSksQ1syXXx8KENbMl09eik7dmFyIE89bi5yYW5nZS5hcHBseSh0aGlzLEMpO2lmKE89Ty5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gcGFyc2VGbG9hdCh0LnRvUHJlY2lzaW9uKDEyKSl9KSxzPW4uc2NhbGUubGluZWFyKCkuZG9tYWluKEMuc2xpY2UoMCwyKSkucmFuZ2UoXCJjbG9ja3dpc2VcIj09PWYuZGlyZWN0aW9uP1swLDM2MF06WzM2MCwwXSksdS5sYXlvdXQuYW5ndWxhckF4aXMuZG9tYWluPXMuZG9tYWluKCksdS5sYXlvdXQuYW5ndWxhckF4aXMuZW5kUGFkZGluZz1NP0U6MCxcInVuZGVmaW5lZFwiPT10eXBlb2YodD1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoXCJzdmcuY2hhcnQtcm9vdFwiKSl8fHQuZW1wdHkoKSl7dmFyIEk9KG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhcIjxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyBjbGFzcz0nY2hhcnQtcm9vdCc+JyArICc8ZyBjbGFzcz0nb3V0ZXItZ3JvdXAnPicgKyAnPGcgY2xhc3M9J2NoYXJ0LWdyb3VwJz4nICsgJzxjaXJjbGUgY2xhc3M9J2JhY2tncm91bmQtY2lyY2xlJz48L2NpcmNsZT4nICsgJzxnIGNsYXNzPSdnZW9tZXRyeS1ncm91cCc+PC9nPicgKyAnPGcgY2xhc3M9J3JhZGlhbCBheGlzLWdyb3VwJz4nICsgJzxjaXJjbGUgY2xhc3M9J291dHNpZGUtY2lyY2xlJz48L2NpcmNsZT4nICsgJzwvZz4nICsgJzxnIGNsYXNzPSdhbmd1bGFyIGF4aXMtZ3JvdXAnPjwvZz4nICsgJzxnIGNsYXNzPSdndWlkZXMtZ3JvdXAnPjxsaW5lPjwvbGluZT48Y2lyY2xlIHI9JzAnPjwvY2lyY2xlPjwvZz4nICsgJzwvZz4nICsgJzxnIGNsYXNzPSdsZWdlbmQtZ3JvdXAnPjwvZz4nICsgJzxnIGNsYXNzPSd0b29sdGlwcy1ncm91cCc+PC9nPicgKyAnPGcgY2xhc3M9J3RpdGxlLWdyb3VwJz48dGV4dD48L3RleHQ+PC9nPicgKyAnPC9nPicgKyAnPC9zdmc+XCIsXCJhcHBsaWNhdGlvbi94bWxcIiksRD10aGlzLmFwcGVuZENoaWxkKHRoaXMub3duZXJEb2N1bWVudC5pbXBvcnROb2RlKEkuZG9jdW1lbnRFbGVtZW50LCEwKSk7dD1uLnNlbGVjdChEKX10LnNlbGVjdChcIi5ndWlkZXMtZ3JvdXBcIikuc3R5bGUoe1wicG9pbnRlci1ldmVudHNcIjpcIm5vbmVcIn0pLHQuc2VsZWN0KFwiLmFuZ3VsYXIuYXhpcy1ncm91cFwiKS5zdHlsZSh7XCJwb2ludGVyLWV2ZW50c1wiOlwibm9uZVwifSksdC5zZWxlY3QoXCIucmFkaWFsLmF4aXMtZ3JvdXBcIikuc3R5bGUoe1wicG9pbnRlci1ldmVudHNcIjpcIm5vbmVcIn0pO3ZhciBQLFI9dC5zZWxlY3QoXCIuY2hhcnQtZ3JvdXBcIiksRj17ZmlsbDpcIm5vbmVcIixzdHJva2U6Zi50aWNrQ29sb3J9LEI9e1wiZm9udC1zaXplXCI6Zi5mb250LnNpemUsXCJmb250LWZhbWlseVwiOmYuZm9udC5mYW1pbHksZmlsbDpmLmZvbnQuY29sb3IsXCJ0ZXh0LXNoYWRvd1wiOltcIi0xcHggMHB4XCIsXCIxcHggLTFweFwiLFwiLTFweCAxcHhcIixcIjFweCAxcHhcIl0ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuXCIgXCIrdCtcIiAwIFwiK2YuZm9udC5vdXRsaW5lQ29sb3J9KS5qb2luKFwiLFwiKX07aWYoZi5zaG93TGVnZW5kKXtQPXQuc2VsZWN0KFwiLmxlZ2VuZC1ncm91cFwiKS5hdHRyKHt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoXCIrW3gsZi5tYXJnaW4udG9wXStcIilcIn0pLnN0eWxlKHtkaXNwbGF5OlwiYmxvY2tcIn0pO3ZhciBOPXAubWFwKGZ1bmN0aW9uKHQsZSl7dmFyIHI9by51dGlsLmNsb25lSnNvbih0KTtyZXR1cm4gci5zeW1ib2w9XCJEb3RQbG90XCI9PT10Lmdlb21ldHJ5P3QuZG90VHlwZXx8XCJjaXJjbGVcIjpcIkxpbmVQbG90XCIhPXQuZ2VvbWV0cnk/XCJzcXVhcmVcIjpcImxpbmVcIixyLnZpc2libGVJbkxlZ2VuZD1cInVuZGVmaW5lZFwiPT10eXBlb2YgdC52aXNpYmxlSW5MZWdlbmR8fHQudmlzaWJsZUluTGVnZW5kLHIuY29sb3I9XCJMaW5lUGxvdFwiPT09dC5nZW9tZXRyeT90LnN0cm9rZUNvbG9yOnQuY29sb3Iscn0pO28uTGVnZW5kKCkuY29uZmlnKHtkYXRhOnAubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubmFtZXx8XCJFbGVtZW50XCIrZX0pLGxlZ2VuZENvbmZpZzppKHt9LG8uTGVnZW5kLmRlZmF1bHRDb25maWcoKS5sZWdlbmRDb25maWcse2NvbnRhaW5lcjpQLGVsZW1lbnRzOk4scmV2ZXJzZU9yZGVyOmYubGVnZW5kLnJldmVyc2VPcmRlcn0pfSkoKTt2YXIgaj1QLm5vZGUoKS5nZXRCQm94KCk7eD1NYXRoLm1pbihmLndpZHRoLWoud2lkdGgtZi5tYXJnaW4ubGVmdC1mLm1hcmdpbi5yaWdodCxmLmhlaWdodC1mLm1hcmdpbi50b3AtZi5tYXJnaW4uYm90dG9tKS8yLHg9TWF0aC5tYXgoMTAseCksXz1bZi5tYXJnaW4ubGVmdCt4LGYubWFyZ2luLnRvcCt4XSxyLnJhbmdlKFswLHhdKSx1LmxheW91dC5yYWRpYWxBeGlzLmRvbWFpbj1yLmRvbWFpbigpLFAuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK1tfWzBdK3gsX1sxXS14XStcIilcIil9ZWxzZSBQPXQuc2VsZWN0KFwiLmxlZ2VuZC1ncm91cFwiKS5zdHlsZSh7ZGlzcGxheTpcIm5vbmVcIn0pO3QuYXR0cih7d2lkdGg6Zi53aWR0aCxoZWlnaHQ6Zi5oZWlnaHR9KS5zdHlsZSh7b3BhY2l0eTpmLm9wYWNpdHl9KSxSLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIitfK1wiKVwiKS5zdHlsZSh7Y3Vyc29yOlwiY3Jvc3NoYWlyXCJ9KTt2YXIgVj1bKGYud2lkdGgtKGYubWFyZ2luLmxlZnQrZi5tYXJnaW4ucmlnaHQrMip4KyhqP2oud2lkdGg6MCkpKS8yLChmLmhlaWdodC0oZi5tYXJnaW4udG9wK2YubWFyZ2luLmJvdHRvbSsyKngpKS8yXTtpZihWWzBdPU1hdGgubWF4KDAsVlswXSksVlsxXT1NYXRoLm1heCgwLFZbMV0pLHQuc2VsZWN0KFwiLm91dGVyLWdyb3VwXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIitWK1wiKVwiKSxmLnRpdGxlJiZmLnRpdGxlLnRleHQpe3ZhciBVPXQuc2VsZWN0KFwiZy50aXRsZS1ncm91cCB0ZXh0XCIpLnN0eWxlKEIpLnRleHQoZi50aXRsZS50ZXh0KSxxPVUubm9kZSgpLmdldEJCb3goKTtVLmF0dHIoe3g6X1swXS1xLndpZHRoLzIseTpfWzFdLXgtMjB9KX12YXIgSD10LnNlbGVjdChcIi5yYWRpYWwuYXhpcy1ncm91cFwiKTtpZihmLnJhZGlhbEF4aXMuZ3JpZExpbmVzVmlzaWJsZSl7dmFyIEc9SC5zZWxlY3RBbGwoXCJjaXJjbGUuZ3JpZC1jaXJjbGVcIikuZGF0YShyLnRpY2tzKDUpKTtHLmVudGVyKCkuYXBwZW5kKFwiY2lyY2xlXCIpLmF0dHIoe2NsYXNzOlwiZ3JpZC1jaXJjbGVcIn0pLnN0eWxlKEYpLEcuYXR0cihcInJcIixyKSxHLmV4aXQoKS5yZW1vdmUoKX1ILnNlbGVjdChcImNpcmNsZS5vdXRzaWRlLWNpcmNsZVwiKS5hdHRyKHtyOnh9KS5zdHlsZShGKTt2YXIgWT10LnNlbGVjdChcImNpcmNsZS5iYWNrZ3JvdW5kLWNpcmNsZVwiKS5hdHRyKHtyOnh9KS5zdHlsZSh7ZmlsbDpmLmJhY2tncm91bmRDb2xvcixzdHJva2U6Zi5zdHJva2V9KTtmdW5jdGlvbiBXKHQsZSl7cmV0dXJuIHModCklMzYwK2Yub3JpZW50YXRpb259aWYoZi5yYWRpYWxBeGlzLnZpc2libGUpe3ZhciBYPW4uc3ZnLmF4aXMoKS5zY2FsZShyKS50aWNrcyg1KS50aWNrU2l6ZSg1KTtILmNhbGwoWCkuYXR0cih7dHJhbnNmb3JtOlwicm90YXRlKFwiK2YucmFkaWFsQXhpcy5vcmllbnRhdGlvbitcIilcIn0pLEguc2VsZWN0QWxsKFwiLmRvbWFpblwiKS5zdHlsZShGKSxILnNlbGVjdEFsbChcImc+dGV4dFwiKS50ZXh0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudGV4dENvbnRlbnQrZi5yYWRpYWxBeGlzLnRpY2tzU3VmZml4fSkuc3R5bGUoQikuc3R5bGUoe1widGV4dC1hbmNob3JcIjpcInN0YXJ0XCJ9KS5hdHRyKHt4OjAseTowLGR4OjAsZHk6MCx0cmFuc2Zvcm06ZnVuY3Rpb24odCxlKXtyZXR1cm5cImhvcml6b250YWxcIj09PWYucmFkaWFsQXhpcy50aWNrT3JpZW50YXRpb24/XCJyb3RhdGUoXCIrLWYucmFkaWFsQXhpcy5vcmllbnRhdGlvbitcIikgdHJhbnNsYXRlKFwiK1swLEJbXCJmb250LXNpemVcIl1dK1wiKVwiOlwidHJhbnNsYXRlKFwiK1swLEJbXCJmb250LXNpemVcIl1dK1wiKVwifX0pLEguc2VsZWN0QWxsKFwiZz5saW5lXCIpLnN0eWxlKHtzdHJva2U6XCJibGFja1wifSl9dmFyIFo9dC5zZWxlY3QoXCIuYW5ndWxhci5heGlzLWdyb3VwXCIpLnNlbGVjdEFsbChcImcuYW5ndWxhci10aWNrXCIpLmRhdGEoTyksJD1aLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiYW5ndWxhci10aWNrXCIsITApO1ouYXR0cih7dHJhbnNmb3JtOmZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJyb3RhdGUoXCIrVyh0KStcIilcIn19KS5zdHlsZSh7ZGlzcGxheTpmLmFuZ3VsYXJBeGlzLnZpc2libGU/XCJibG9ja1wiOlwibm9uZVwifSksWi5leGl0KCkucmVtb3ZlKCksJC5hcHBlbmQoXCJsaW5lXCIpLmNsYXNzZWQoXCJncmlkLWxpbmVcIiwhMCkuY2xhc3NlZChcIm1ham9yXCIsZnVuY3Rpb24odCxlKXtyZXR1cm4gZSUoZi5taW5vclRpY2tzKzEpPT0wfSkuY2xhc3NlZChcIm1pbm9yXCIsZnVuY3Rpb24odCxlKXtyZXR1cm4hKGUlKGYubWlub3JUaWNrcysxKT09MCl9KS5zdHlsZShGKSwkLnNlbGVjdEFsbChcIi5taW5vclwiKS5zdHlsZSh7c3Ryb2tlOmYubWlub3JUaWNrQ29sb3J9KSxaLnNlbGVjdChcImxpbmUuZ3JpZC1saW5lXCIpLmF0dHIoe3gxOmYudGlja0xlbmd0aD94LWYudGlja0xlbmd0aDowLHgyOnh9KS5zdHlsZSh7ZGlzcGxheTpmLmFuZ3VsYXJBeGlzLmdyaWRMaW5lc1Zpc2libGU/XCJibG9ja1wiOlwibm9uZVwifSksJC5hcHBlbmQoXCJ0ZXh0XCIpLmNsYXNzZWQoXCJheGlzLXRleHRcIiwhMCkuc3R5bGUoQik7dmFyIEo9Wi5zZWxlY3QoXCJ0ZXh0LmF4aXMtdGV4dFwiKS5hdHRyKHt4OngrZi5sYWJlbE9mZnNldCxkeTphK1wiZW1cIix0cmFuc2Zvcm06ZnVuY3Rpb24odCxlKXt2YXIgcj1XKHQpLG49eCtmLmxhYmVsT2Zmc2V0LGk9Zi5hbmd1bGFyQXhpcy50aWNrT3JpZW50YXRpb247cmV0dXJuXCJob3Jpem9udGFsXCI9PWk/XCJyb3RhdGUoXCIrLXIrXCIgXCIrbitcIiAwKVwiOlwicmFkaWFsXCI9PWk/cjwyNzAmJnI+OTA/XCJyb3RhdGUoMTgwIFwiK24rXCIgMClcIjpudWxsOlwicm90YXRlKFwiKyhyPD0xODAmJnI+MD8tOTA6OTApK1wiIFwiK24rXCIgMClcIn19KS5zdHlsZSh7XCJ0ZXh0LWFuY2hvclwiOlwibWlkZGxlXCIsZGlzcGxheTpmLmFuZ3VsYXJBeGlzLmxhYmVsc1Zpc2libGU/XCJibG9ja1wiOlwibm9uZVwifSkudGV4dChmdW5jdGlvbih0LGUpe3JldHVybiBlJShmLm1pbm9yVGlja3MrMSkhPTA/XCJcIjp3P3dbdF0rZi5hbmd1bGFyQXhpcy50aWNrc1N1ZmZpeDp0K2YuYW5ndWxhckF4aXMudGlja3NTdWZmaXh9KS5zdHlsZShCKTtmLmFuZ3VsYXJBeGlzLnJld3JpdGVUaWNrcyYmSi50ZXh0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUlKGYubWlub3JUaWNrcysxKSE9MD9cIlwiOmYuYW5ndWxhckF4aXMucmV3cml0ZVRpY2tzKHRoaXMudGV4dENvbnRlbnQsZSl9KTt2YXIgSz1uLm1heChSLnNlbGVjdEFsbChcIi5hbmd1bGFyLXRpY2sgdGV4dFwiKVswXS5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5nZXRDVE0oKS5lK3QuZ2V0QkJveCgpLndpZHRofSkpO1AuYXR0cih7dHJhbnNmb3JtOlwidHJhbnNsYXRlKFwiK1t4K0ssZi5tYXJnaW4udG9wXStcIilcIn0pO3ZhciBRPXQuc2VsZWN0KFwiZy5nZW9tZXRyeS1ncm91cFwiKS5zZWxlY3RBbGwoXCJnXCIpLnNpemUoKT4wLHR0PXQuc2VsZWN0KFwiZy5nZW9tZXRyeS1ncm91cFwiKS5zZWxlY3RBbGwoXCJnLmdlb21ldHJ5XCIpLmRhdGEocCk7aWYodHQuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoe2NsYXNzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJnZW9tZXRyeSBnZW9tZXRyeVwiK2V9fSksdHQuZXhpdCgpLnJlbW92ZSgpLHBbMF18fFEpe3ZhciBldD1bXTtwLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj17fTtuLnJhZGlhbFNjYWxlPXIsbi5hbmd1bGFyU2NhbGU9cyxuLmNvbnRhaW5lcj10dC5maWx0ZXIoZnVuY3Rpb24odCxyKXtyZXR1cm4gcj09ZX0pLG4uZ2VvbWV0cnk9dC5nZW9tZXRyeSxuLm9yaWVudGF0aW9uPWYub3JpZW50YXRpb24sbi5kaXJlY3Rpb249Zi5kaXJlY3Rpb24sbi5pbmRleD1lLGV0LnB1c2goe2RhdGE6dCxnZW9tZXRyeUNvbmZpZzpufSl9KTt2YXIgcnQ9bi5uZXN0KCkua2V5KGZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHQuZGF0YS5ncm91cElkfHxcInVuc3RhY2tlZFwifSkuZW50cmllcyhldCksbnQ9W107cnQuZm9yRWFjaChmdW5jdGlvbih0LGUpe1widW5zdGFja2VkXCI9PT10LmtleT9udD1udC5jb25jYXQodC52YWx1ZXMubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RdfSkpOm50LnB1c2godC52YWx1ZXMpfSksbnQuZm9yRWFjaChmdW5jdGlvbih0LGUpe3ZhciByO3I9QXJyYXkuaXNBcnJheSh0KT90WzBdLmdlb21ldHJ5Q29uZmlnLmdlb21ldHJ5OnQuZ2VvbWV0cnlDb25maWcuZ2VvbWV0cnk7dmFyIG49dC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gaShvW3JdLmRlZmF1bHRDb25maWcoKSx0KX0pO29bcl0oKS5jb25maWcobikoKX0pfXZhciBpdCxhdCxvdD10LnNlbGVjdChcIi5ndWlkZXMtZ3JvdXBcIiksc3Q9dC5zZWxlY3QoXCIudG9vbHRpcHMtZ3JvdXBcIiksbHQ9by50b29sdGlwUGFuZWwoKS5jb25maWcoe2NvbnRhaW5lcjpzdCxmb250U2l6ZTo4fSkoKSxjdD1vLnRvb2x0aXBQYW5lbCgpLmNvbmZpZyh7Y29udGFpbmVyOnN0LGZvbnRTaXplOjh9KSgpLHV0PW8udG9vbHRpcFBhbmVsKCkuY29uZmlnKHtjb250YWluZXI6c3QsaGFzVGljazohMH0pKCk7aWYoIUEpe3ZhciBodD1vdC5zZWxlY3QoXCJsaW5lXCIpLmF0dHIoe3gxOjAseTE6MCx5MjowfSkuc3R5bGUoe3N0cm9rZTpcImdyZXlcIixcInBvaW50ZXItZXZlbnRzXCI6XCJub25lXCJ9KTtSLm9uKFwibW91c2Vtb3ZlLmFuZ3VsYXItZ3VpZGVcIixmdW5jdGlvbih0LGUpe3ZhciByPW8udXRpbC5nZXRNb3VzZVBvcyhZKS5hbmdsZTtodC5hdHRyKHt4MjoteCx0cmFuc2Zvcm06XCJyb3RhdGUoXCIrcitcIilcIn0pLnN0eWxlKHtvcGFjaXR5Oi41fSk7dmFyIG49KHIrMTgwKzM2MC1mLm9yaWVudGF0aW9uKSUzNjA7aXQ9cy5pbnZlcnQobik7dmFyIGk9by51dGlsLmNvbnZlcnRUb0NhcnRlc2lhbih4KzEyLHIrMTgwKTtsdC50ZXh0KG8udXRpbC5yb3VuZChpdCkpLm1vdmUoW2lbMF0rX1swXSxpWzFdK19bMV1dKX0pLm9uKFwibW91c2VvdXQuYW5ndWxhci1ndWlkZVwiLGZ1bmN0aW9uKHQsZSl7b3Quc2VsZWN0KFwibGluZVwiKS5zdHlsZSh7b3BhY2l0eTowfSl9KX12YXIgZnQ9b3Quc2VsZWN0KFwiY2lyY2xlXCIpLnN0eWxlKHtzdHJva2U6XCJncmV5XCIsZmlsbDpcIm5vbmVcIn0pO1Iub24oXCJtb3VzZW1vdmUucmFkaWFsLWd1aWRlXCIsZnVuY3Rpb24odCxlKXt2YXIgbj1vLnV0aWwuZ2V0TW91c2VQb3MoWSkucmFkaXVzO2Z0LmF0dHIoe3I6bn0pLnN0eWxlKHtvcGFjaXR5Oi41fSksYXQ9ci5pbnZlcnQoby51dGlsLmdldE1vdXNlUG9zKFkpLnJhZGl1cyk7dmFyIGk9by51dGlsLmNvbnZlcnRUb0NhcnRlc2lhbihuLGYucmFkaWFsQXhpcy5vcmllbnRhdGlvbik7Y3QudGV4dChvLnV0aWwucm91bmQoYXQpKS5tb3ZlKFtpWzBdK19bMF0saVsxXStfWzFdXSl9KS5vbihcIm1vdXNlb3V0LnJhZGlhbC1ndWlkZVwiLGZ1bmN0aW9uKHQsZSl7ZnQuc3R5bGUoe29wYWNpdHk6MH0pLHV0LmhpZGUoKSxsdC5oaWRlKCksY3QuaGlkZSgpfSksdC5zZWxlY3RBbGwoXCIuZ2VvbWV0cnktZ3JvdXAgLm1hcmtcIikub24oXCJtb3VzZW92ZXIudG9vbHRpcFwiLGZ1bmN0aW9uKGUscil7dmFyIGk9bi5zZWxlY3QodGhpcyksYT10aGlzLnN0eWxlLmZpbGwscz1cImJsYWNrXCIsbD10aGlzLnN0eWxlLm9wYWNpdHl8fDE7aWYoaS5hdHRyKHtcImRhdGEtb3BhY2l0eVwiOmx9KSxhJiZcIm5vbmVcIiE9PWEpe2kuYXR0cih7XCJkYXRhLWZpbGxcIjphfSkscz1uLmhzbChhKS5kYXJrZXIoKS50b1N0cmluZygpLGkuc3R5bGUoe2ZpbGw6cyxvcGFjaXR5OjF9KTt2YXIgYz17dDpvLnV0aWwucm91bmQoZVswXSkscjpvLnV0aWwucm91bmQoZVsxXSl9O0EmJihjLnQ9d1tlWzBdXSk7dmFyIHU9XCJ0OiBcIitjLnQrXCIsIHI6IFwiK2MucixoPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZj10Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxwPVtoLmxlZnQraC53aWR0aC8yLVZbMF0tZi5sZWZ0LGgudG9wK2guaGVpZ2h0LzItVlsxXS1mLnRvcF07dXQuY29uZmlnKHtjb2xvcjpzfSkudGV4dCh1KSx1dC5tb3ZlKHApfWVsc2UgYT10aGlzLnN0eWxlLnN0cm9rZXx8XCJibGFja1wiLGkuYXR0cih7XCJkYXRhLXN0cm9rZVwiOmF9KSxzPW4uaHNsKGEpLmRhcmtlcigpLnRvU3RyaW5nKCksaS5zdHlsZSh7c3Ryb2tlOnMsb3BhY2l0eToxfSl9KS5vbihcIm1vdXNlbW92ZS50b29sdGlwXCIsZnVuY3Rpb24odCxlKXtpZigwIT1uLmV2ZW50LndoaWNoKXJldHVybiExO24uc2VsZWN0KHRoaXMpLmF0dHIoXCJkYXRhLWZpbGxcIikmJnV0LnNob3coKX0pLm9uKFwibW91c2VvdXQudG9vbHRpcFwiLGZ1bmN0aW9uKHQsZSl7dXQuaGlkZSgpO3ZhciByPW4uc2VsZWN0KHRoaXMpLGk9ci5hdHRyKFwiZGF0YS1maWxsXCIpO2k/ci5zdHlsZSh7ZmlsbDppLG9wYWNpdHk6ci5hdHRyKFwiZGF0YS1vcGFjaXR5XCIpfSk6ci5zdHlsZSh7c3Ryb2tlOnIuYXR0cihcImRhdGEtc3Ryb2tlXCIpLG9wYWNpdHk6ci5hdHRyKFwiZGF0YS1vcGFjaXR5XCIpfSl9KX0pfShjKSx0aGlzfSxmLmNvbmZpZz1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbDt2YXIgZT1vLnV0aWwuY2xvbmVKc29uKHQpO3JldHVybiBlLmRhdGEuZm9yRWFjaChmdW5jdGlvbih0LGUpe2wuZGF0YVtlXXx8KGwuZGF0YVtlXT17fSksaShsLmRhdGFbZV0sby5BeGlzLmRlZmF1bHRDb25maWcoKS5kYXRhWzBdKSxpKGwuZGF0YVtlXSx0KX0pLGkobC5sYXlvdXQsby5BeGlzLmRlZmF1bHRDb25maWcoKS5sYXlvdXQpLGkobC5sYXlvdXQsZS5sYXlvdXQpLHRoaXN9LGYuZ2V0TGl2ZUNvbmZpZz1mdW5jdGlvbigpe3JldHVybiB1fSxmLmdldGlucHV0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIGN9LGYucmFkaWFsU2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHJ9LGYuYW5ndWxhclNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBzfSxmLnN2Zz1mdW5jdGlvbigpe3JldHVybiB0fSxuLnJlYmluZChmLGgsXCJvblwiKSxmfSxvLkF4aXMuZGVmYXVsdENvbmZpZz1mdW5jdGlvbih0LGUpe3JldHVybntkYXRhOlt7dDpbMSwyLDMsNF0scjpbMTAsMTEsMTIsMTNdLG5hbWU6XCJMaW5lMVwiLGdlb21ldHJ5OlwiTGluZVBsb3RcIixjb2xvcjpudWxsLHN0cm9rZURhc2g6XCJzb2xpZFwiLHN0cm9rZUNvbG9yOm51bGwsc3Ryb2tlU2l6ZTpcIjFcIix2aXNpYmxlSW5MZWdlbmQ6ITAsb3BhY2l0eToxfV0sbGF5b3V0OntkZWZhdWx0Q29sb3JSYW5nZTpuLnNjYWxlLmNhdGVnb3J5MTAoKS5yYW5nZSgpLHRpdGxlOm51bGwsaGVpZ2h0OjQ1MCx3aWR0aDo1MDAsbWFyZ2luOnt0b3A6NDAscmlnaHQ6NDAsYm90dG9tOjQwLGxlZnQ6NDB9LGZvbnQ6e3NpemU6MTIsY29sb3I6XCJncmF5XCIsb3V0bGluZUNvbG9yOlwid2hpdGVcIixmYW1pbHk6XCJUYWhvbWEsIHNhbnMtc2VyaWZcIn0sZGlyZWN0aW9uOlwiY2xvY2t3aXNlXCIsb3JpZW50YXRpb246MCxsYWJlbE9mZnNldDoxMCxyYWRpYWxBeGlzOntkb21haW46bnVsbCxvcmllbnRhdGlvbjotNDUsdGlja3NTdWZmaXg6XCJcIix2aXNpYmxlOiEwLGdyaWRMaW5lc1Zpc2libGU6ITAsdGlja09yaWVudGF0aW9uOlwiaG9yaXpvbnRhbFwiLHJld3JpdGVUaWNrczpudWxsfSxhbmd1bGFyQXhpczp7ZG9tYWluOlswLDM2MF0sdGlja3NTdWZmaXg6XCJcIix2aXNpYmxlOiEwLGdyaWRMaW5lc1Zpc2libGU6ITAsbGFiZWxzVmlzaWJsZTohMCx0aWNrT3JpZW50YXRpb246XCJob3Jpem9udGFsXCIscmV3cml0ZVRpY2tzOm51bGwsdGlja3NDb3VudDpudWxsLHRpY2tzU3RlcDpudWxsfSxtaW5vclRpY2tzOjAsdGlja0xlbmd0aDpudWxsLHRpY2tDb2xvcjpcInNpbHZlclwiLG1pbm9yVGlja0NvbG9yOlwiI2VlZVwiLGJhY2tncm91bmRDb2xvcjpcIm5vbmVcIixuZWVkc0VuZFNwYWNpbmc6bnVsbCxzaG93TGVnZW5kOiEwLGxlZ2VuZDp7cmV2ZXJzZU9yZGVyOiExfSxvcGFjaXR5OjF9fX0sby51dGlsPXt9LG8uREFUQUVYVEVOVD1cImRhdGFFeHRlbnRcIixvLkFSRUE9XCJBcmVhQ2hhcnRcIixvLkxJTkU9XCJMaW5lUGxvdFwiLG8uRE9UPVwiRG90UGxvdFwiLG8uQkFSPVwiQmFyQ2hhcnRcIixvLnV0aWwuX292ZXJyaWRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIHQpciBpbiBlJiYoZVtyXT10W3JdKX0sby51dGlsLl9leHRlbmQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdCllW3JdPXRbcl19LG8udXRpbC5fcm5kU25kPWZ1bmN0aW9uKCl7cmV0dXJuIDIqTWF0aC5yYW5kb20oKS0xKygyKk1hdGgucmFuZG9tKCktMSkrKDIqTWF0aC5yYW5kb20oKS0xKX0sby51dGlsLmRhdGFGcm9tRXF1YXRpb24yPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZXx8NjtyZXR1cm4gbi5yYW5nZSgwLDM2MCtyLHIpLm1hcChmdW5jdGlvbihlLHIpe3ZhciBuPWUqTWF0aC5QSS8xODA7cmV0dXJuW2UsdChuKV19KX0sby51dGlsLmRhdGFGcm9tRXF1YXRpb249ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWV8fDYsYT1bXSxvPVtdO24ucmFuZ2UoMCwzNjAraSxpKS5mb3JFYWNoKGZ1bmN0aW9uKGUscil7dmFyIG49ZSpNYXRoLlBJLzE4MCxpPXQobik7YS5wdXNoKGUpLG8ucHVzaChpKX0pO3ZhciBzPXt0OmEscjpvfTtyZXR1cm4gciYmKHMubmFtZT1yKSxzfSxvLnV0aWwuZW5zdXJlQXJyYXk9ZnVuY3Rpb24odCxlKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgdClyZXR1cm4gbnVsbDt2YXIgcj1bXS5jb25jYXQodCk7cmV0dXJuIG4ucmFuZ2UoZSkubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHJbZV18fHJbMF19KX0sby51dGlsLmZpbGxBcnJheXM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSxuKXt0W2VdPW8udXRpbC5lbnN1cmVBcnJheSh0W2VdLHIpfSksdH0sby51dGlsLmNsb25lSnNvbj1mdW5jdGlvbih0KXtyZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0KSl9LG8udXRpbC52YWxpZGF0ZUtleXM9ZnVuY3Rpb24odCxlKXtcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9ZS5zcGxpdChcIi5cIikpO3ZhciByPWUuc2hpZnQoKTtyZXR1cm4gdFtyXSYmKCFlLmxlbmd0aHx8b2JqSGFzS2V5cyh0W3JdLGUpKX0sby51dGlsLnN1bUFycmF5cz1mdW5jdGlvbih0LGUpe3JldHVybiBuLnppcCh0LGUpLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBuLnN1bSh0KX0pfSxvLnV0aWwuYXJyYXlMYXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0W3QubGVuZ3RoLTFdfSxvLnV0aWwuYXJyYXlFcXVhbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1NYXRoLm1heCh0Lmxlbmd0aCxlLmxlbmd0aCwxKTtyLS0gPj0wJiZ0W3JdPT09ZVtyXTspO3JldHVybi0yPT09cn0sby51dGlsLmZsYXR0ZW5BcnJheT1mdW5jdGlvbih0KXtmb3IodmFyIGU9W107IW8udXRpbC5hcnJheUVxdWFsKGUsdCk7KWU9dCx0PVtdLmNvbmNhdC5hcHBseShbXSx0KTtyZXR1cm4gdH0sby51dGlsLmRlZHVwbGljYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0LmZpbHRlcihmdW5jdGlvbih0LGUscil7cmV0dXJuIHIuaW5kZXhPZih0KT09ZX0pfSxvLnV0aWwuY29udmVydFRvQ2FydGVzaWFuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZSpNYXRoLlBJLzE4MDtyZXR1cm5bdCpNYXRoLmNvcyhyKSx0Kk1hdGguc2luKHIpXX0sby51dGlsLnJvdW5kPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZXx8MixuPU1hdGgucG93KDEwLHIpO3JldHVybiBNYXRoLnJvdW5kKHQqbikvbn0sby51dGlsLmdldE1vdXNlUG9zPWZ1bmN0aW9uKHQpe3ZhciBlPW4ubW91c2UodC5ub2RlKCkpLHI9ZVswXSxpPWVbMV0sYT17fTtyZXR1cm4gYS54PXIsYS55PWksYS5wb3M9ZSxhLmFuZ2xlPTE4MCooTWF0aC5hdGFuMihpLHIpK01hdGguUEkpL01hdGguUEksYS5yYWRpdXM9TWF0aC5zcXJ0KHIqcitpKmkpLGF9LG8udXRpbC5kdXBsaWNhdGVzQ291bnQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9e30sbj17fSxpPTAsYT10Lmxlbmd0aDtpPGE7aSsrKShlPXRbaV0paW4gcj8ocltlXSsrLG5bZV09cltlXSk6cltlXT0xO3JldHVybiBufSxvLnV0aWwuZHVwbGljYXRlcz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXMoby51dGlsLmR1cGxpY2F0ZXNDb3VudCh0KSl9LG8udXRpbC50cmFuc2xhdG9yPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKG4pe3ZhciBpPXIuc2xpY2UoKTtyPWUsZT1pfXZhciBhPWUucmVkdWNlKGZ1bmN0aW9uKHQsZSl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHQpcmV0dXJuIHRbZV19LHQpO1widW5kZWZpbmVkXCIhPXR5cGVvZiBhJiYoZS5yZWR1Y2UoZnVuY3Rpb24odCxyLG4pe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB0KXJldHVybiBuPT09ZS5sZW5ndGgtMSYmZGVsZXRlIHRbcl0sdFtyXX0sdCksci5yZWR1Y2UoZnVuY3Rpb24odCxlLG4pe3JldHVyblwidW5kZWZpbmVkXCI9PXR5cGVvZiB0W2VdJiYodFtlXT17fSksbj09PXIubGVuZ3RoLTEmJih0W2VdPWEpLHRbZV19LHQpKX0sby5Qb2x5Q2hhcnQ9ZnVuY3Rpb24oKXt2YXIgdD1bby5Qb2x5Q2hhcnQuZGVmYXVsdENvbmZpZygpXSxlPW4uZGlzcGF0Y2goXCJob3ZlclwiKSxyPXtzb2xpZDpcIm5vbmVcIixkYXNoOls1LDJdLGRvdDpbMiw1XX07ZnVuY3Rpb24gYSgpe3ZhciBlPXRbMF0uZ2VvbWV0cnlDb25maWcsaT1lLmNvbnRhaW5lcjtcInN0cmluZ1wiPT10eXBlb2YgaSYmKGk9bi5zZWxlY3QoaSkpLGkuZGF0dW0odCkuZWFjaChmdW5jdGlvbih0LGkpe3ZhciBhPSEhdFswXS5kYXRhLnlTdGFjayxvPXQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGE/bi56aXAodC5kYXRhLnRbMF0sdC5kYXRhLnJbMF0sdC5kYXRhLnlTdGFja1swXSk6bi56aXAodC5kYXRhLnRbMF0sdC5kYXRhLnJbMF0pfSkscz1lLmFuZ3VsYXJTY2FsZSxsPWUucmFkaWFsU2NhbGUuZG9tYWluKClbMF0sYz17YmFyOmZ1bmN0aW9uKHIsaSxhKXt2YXIgbz10W2FdLmRhdGEsbD1lLnJhZGlhbFNjYWxlKHJbMV0pLWUucmFkaWFsU2NhbGUoMCksYz1lLnJhZGlhbFNjYWxlKHJbMl18fDApLHU9by5iYXJXaWR0aDtuLnNlbGVjdCh0aGlzKS5hdHRyKHtjbGFzczpcIm1hcmsgYmFyXCIsZDpcIk1cIitbW2wrYywtdS8yXSxbbCtjLHUvMl0sW2MsdS8yXSxbYywtdS8yXV0uam9pbihcIkxcIikrXCJaXCIsdHJhbnNmb3JtOmZ1bmN0aW9uKHQscil7cmV0dXJuXCJyb3RhdGUoXCIrKGUub3JpZW50YXRpb24rcyh0WzBdKSkrXCIpXCJ9fSl9fTtjLmRvdD1mdW5jdGlvbihyLGksYSl7dmFyIG89clsyXT9bclswXSxyWzFdK3JbMl1dOnIscz1uLnN2Zy5zeW1ib2woKS5zaXplKHRbYV0uZGF0YS5kb3RTaXplKS50eXBlKHRbYV0uZGF0YS5kb3RUeXBlKShyLGkpO24uc2VsZWN0KHRoaXMpLmF0dHIoe2NsYXNzOlwibWFyayBkb3RcIixkOnMsdHJhbnNmb3JtOmZ1bmN0aW9uKHQscil7dmFyIG4saSxhLHM9KG49ZnVuY3Rpb24odCxyKXt2YXIgbj1lLnJhZGlhbFNjYWxlKHRbMV0pLGk9KGUuYW5ndWxhclNjYWxlKHRbMF0pK2Uub3JpZW50YXRpb24pKk1hdGguUEkvMTgwO3JldHVybntyOm4sdDppfX0obyksaT1uLnIqTWF0aC5jb3Mobi50KSxhPW4ucipNYXRoLnNpbihuLnQpLHt4OmkseTphfSk7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrW3MueCxzLnldK1wiKVwifX0pfTt2YXIgdT1uLnN2Zy5saW5lLnJhZGlhbCgpLmludGVycG9sYXRlKHRbMF0uZGF0YS5saW5lSW50ZXJwb2xhdGlvbikucmFkaXVzKGZ1bmN0aW9uKHQpe3JldHVybiBlLnJhZGlhbFNjYWxlKHRbMV0pfSkuYW5nbGUoZnVuY3Rpb24odCl7cmV0dXJuIGUuYW5ndWxhclNjYWxlKHRbMF0pKk1hdGguUEkvMTgwfSk7Yy5saW5lPWZ1bmN0aW9uKHIsaSxhKXt2YXIgcz1yWzJdP29bYV0ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RbMF0sdFsxXSt0WzJdXX0pOm9bYV07aWYobi5zZWxlY3QodGhpcykuZWFjaChjLmRvdCkuc3R5bGUoe29wYWNpdHk6ZnVuY3Rpb24oZSxyKXtyZXR1cm4rdFthXS5kYXRhLmRvdFZpc2libGV9LGZpbGw6ZC5zdHJva2UocixpLGEpfSkuYXR0cih7Y2xhc3M6XCJtYXJrIGRvdFwifSksIShpPjApKXt2YXIgbD1uLnNlbGVjdCh0aGlzLnBhcmVudE5vZGUpLnNlbGVjdEFsbChcInBhdGgubGluZVwiKS5kYXRhKFswXSk7bC5lbnRlcigpLmluc2VydChcInBhdGhcIiksbC5hdHRyKHtjbGFzczpcImxpbmVcIixkOnUocyksdHJhbnNmb3JtOmZ1bmN0aW9uKHQscil7cmV0dXJuXCJyb3RhdGUoXCIrKGUub3JpZW50YXRpb24rOTApK1wiKVwifSxcInBvaW50ZXItZXZlbnRzXCI6XCJub25lXCJ9KS5zdHlsZSh7ZmlsbDpmdW5jdGlvbih0LGUpe3JldHVybiBkLmZpbGwocixpLGEpfSxcImZpbGwtb3BhY2l0eVwiOjAsc3Ryb2tlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQuc3Ryb2tlKHIsaSxhKX0sXCJzdHJva2Utd2lkdGhcIjpmdW5jdGlvbih0LGUpe3JldHVybiBkW1wic3Ryb2tlLXdpZHRoXCJdKHIsaSxhKX0sXCJzdHJva2UtZGFzaGFycmF5XCI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZFtcInN0cm9rZS1kYXNoYXJyYXlcIl0ocixpLGEpfSxvcGFjaXR5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQub3BhY2l0eShyLGksYSl9LGRpc3BsYXk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZC5kaXNwbGF5KHIsaSxhKX19KX19O3ZhciBoPWUuYW5ndWxhclNjYWxlLnJhbmdlKCksZj1NYXRoLmFicyhoWzFdLWhbMF0pL29bMF0ubGVuZ3RoKk1hdGguUEkvMTgwLHA9bi5zdmcuYXJjKCkuc3RhcnRBbmdsZShmdW5jdGlvbih0KXtyZXR1cm4tZi8yfSkuZW5kQW5nbGUoZnVuY3Rpb24odCl7cmV0dXJuIGYvMn0pLmlubmVyUmFkaXVzKGZ1bmN0aW9uKHQpe3JldHVybiBlLnJhZGlhbFNjYWxlKGwrKHRbMl18fDApKX0pLm91dGVyUmFkaXVzKGZ1bmN0aW9uKHQpe3JldHVybiBlLnJhZGlhbFNjYWxlKGwrKHRbMl18fDApKStlLnJhZGlhbFNjYWxlKHRbMV0pfSk7Yy5hcmM9ZnVuY3Rpb24odCxyLGkpe24uc2VsZWN0KHRoaXMpLmF0dHIoe2NsYXNzOlwibWFyayBhcmNcIixkOnAsdHJhbnNmb3JtOmZ1bmN0aW9uKHQscil7cmV0dXJuXCJyb3RhdGUoXCIrKGUub3JpZW50YXRpb24rcyh0WzBdKSs5MCkrXCIpXCJ9fSl9O3ZhciBkPXtmaWxsOmZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdFtuXS5kYXRhLmNvbG9yfSxzdHJva2U6ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0W25dLmRhdGEuc3Ryb2tlQ29sb3J9LFwic3Ryb2tlLXdpZHRoXCI6ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0W25dLmRhdGEuc3Ryb2tlU2l6ZStcInB4XCJ9LFwic3Ryb2tlLWRhc2hhcnJheVwiOmZ1bmN0aW9uKGUsbixpKXtyZXR1cm4gclt0W2ldLmRhdGEuc3Ryb2tlRGFzaF19LG9wYWNpdHk6ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0W25dLmRhdGEub3BhY2l0eX0sZGlzcGxheTpmdW5jdGlvbihlLHIsbil7cmV0dXJuXCJ1bmRlZmluZWRcIj09dHlwZW9mIHRbbl0uZGF0YS52aXNpYmxlfHx0W25dLmRhdGEudmlzaWJsZT9cImJsb2NrXCI6XCJub25lXCJ9fSxnPW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbChcImcubGF5ZXJcIikuZGF0YShvKTtnLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKHtjbGFzczpcImxheWVyXCJ9KTt2YXIgdj1nLnNlbGVjdEFsbChcInBhdGgubWFya1wiKS5kYXRhKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR9KTt2LmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5hdHRyKHtjbGFzczpcIm1hcmtcIn0pLHYuc3R5bGUoZCkuZWFjaChjW2UuZ2VvbWV0cnlUeXBlXSksdi5leGl0KCkucmVtb3ZlKCksZy5leGl0KCkucmVtb3ZlKCl9KX1yZXR1cm4gYS5jb25maWc9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGUuZm9yRWFjaChmdW5jdGlvbihlLHIpe3Rbcl18fCh0W3JdPXt9KSxpKHRbcl0sby5Qb2x5Q2hhcnQuZGVmYXVsdENvbmZpZygpKSxpKHRbcl0sZSl9KSx0aGlzKTp0fSxhLmdldENvbG9yU2NhbGU9ZnVuY3Rpb24oKXt9LG4ucmViaW5kKGEsZSxcIm9uXCIpLGF9LG8uUG9seUNoYXJ0LmRlZmF1bHRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57ZGF0YTp7bmFtZTpcImdlb20xXCIsdDpbWzEsMiwzLDRdXSxyOltbMSwyLDMsNF1dLGRvdFR5cGU6XCJjaXJjbGVcIixkb3RTaXplOjY0LGRvdFZpc2libGU6ITEsYmFyV2lkdGg6MjAsY29sb3I6XCIjZmZhNTAwXCIsc3Ryb2tlU2l6ZToxLHN0cm9rZUNvbG9yOlwic2lsdmVyXCIsc3Ryb2tlRGFzaDpcInNvbGlkXCIsb3BhY2l0eToxLGluZGV4OjAsdmlzaWJsZTohMCx2aXNpYmxlSW5MZWdlbmQ6ITB9LGdlb21ldHJ5Q29uZmlnOntnZW9tZXRyeTpcIkxpbmVQbG90XCIsZ2VvbWV0cnlUeXBlOlwiYXJjXCIsZGlyZWN0aW9uOlwiY2xvY2t3aXNlXCIsb3JpZW50YXRpb246MCxjb250YWluZXI6XCJib2R5XCIscmFkaWFsU2NhbGU6bnVsbCxhbmd1bGFyU2NhbGU6bnVsbCxjb2xvclNjYWxlOm4uc2NhbGUuY2F0ZWdvcnkyMCgpfX19LG8uQmFyQ2hhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gby5Qb2x5Q2hhcnQoKX0sby5CYXJDaGFydC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJue2dlb21ldHJ5Q29uZmlnOntnZW9tZXRyeVR5cGU6XCJiYXJcIn19fSxvLkFyZWFDaGFydD1mdW5jdGlvbigpe3JldHVybiBvLlBvbHlDaGFydCgpfSxvLkFyZWFDaGFydC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJue2dlb21ldHJ5Q29uZmlnOntnZW9tZXRyeVR5cGU6XCJhcmNcIn19fSxvLkRvdFBsb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gby5Qb2x5Q2hhcnQoKX0sby5Eb3RQbG90LmRlZmF1bHRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57Z2VvbWV0cnlDb25maWc6e2dlb21ldHJ5VHlwZTpcImRvdFwiLGRvdFR5cGU6XCJjaXJjbGVcIn19fSxvLkxpbmVQbG90PWZ1bmN0aW9uKCl7cmV0dXJuIG8uUG9seUNoYXJ0KCl9LG8uTGluZVBsb3QuZGVmYXVsdENvbmZpZz1mdW5jdGlvbigpe3JldHVybntnZW9tZXRyeUNvbmZpZzp7Z2VvbWV0cnlUeXBlOlwibGluZVwifX19LG8uTGVnZW5kPWZ1bmN0aW9uKCl7dmFyIHQ9by5MZWdlbmQuZGVmYXVsdENvbmZpZygpLGU9bi5kaXNwYXRjaChcImhvdmVyXCIpO2Z1bmN0aW9uIHIoKXt2YXIgZT10LmxlZ2VuZENvbmZpZyxhPXQuZGF0YS5tYXAoZnVuY3Rpb24odCxyKXtyZXR1cm5bXS5jb25jYXQodCkubWFwKGZ1bmN0aW9uKHQsbil7dmFyIGE9aSh7fSxlLmVsZW1lbnRzW3JdKTtyZXR1cm4gYS5uYW1lPXQsYS5jb2xvcj1bXS5jb25jYXQoZS5lbGVtZW50c1tyXS5jb2xvcilbbl0sYX0pfSksbz1uLm1lcmdlKGEpO289by5maWx0ZXIoZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5lbGVtZW50c1tyXSYmKGUuZWxlbWVudHNbcl0udmlzaWJsZUluTGVnZW5kfHxcInVuZGVmaW5lZFwiPT10eXBlb2YgZS5lbGVtZW50c1tyXS52aXNpYmxlSW5MZWdlbmQpfSksZS5yZXZlcnNlT3JkZXImJihvPW8ucmV2ZXJzZSgpKTt2YXIgcz1lLmNvbnRhaW5lcjsoXCJzdHJpbmdcIj09dHlwZW9mIHN8fHMubm9kZU5hbWUpJiYocz1uLnNlbGVjdChzKSk7dmFyIGw9by5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jb2xvcn0pLGM9ZS5mb250U2l6ZSx1PW51bGw9PWUuaXNDb250aW51b3VzP1wibnVtYmVyXCI9PXR5cGVvZiBvWzBdOmUuaXNDb250aW51b3VzLGg9dT9lLmhlaWdodDpjKm8ubGVuZ3RoLGY9cy5jbGFzc2VkKFwibGVnZW5kLWdyb3VwXCIsITApLnNlbGVjdEFsbChcInN2Z1wiKS5kYXRhKFswXSkscD1mLmVudGVyKCkuYXBwZW5kKFwic3ZnXCIpLmF0dHIoe3dpZHRoOjMwMCxoZWlnaHQ6aCtjLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcInhtbG5zOnhsaW5rXCI6XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsdmVyc2lvbjpcIjEuMVwifSk7cC5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJsZWdlbmQtYXhpc1wiLCEwKSxwLmFwcGVuZChcImdcIikuY2xhc3NlZChcImxlZ2VuZC1tYXJrc1wiLCEwKTt2YXIgZD1uLnJhbmdlKG8ubGVuZ3RoKSxnPW4uc2NhbGVbdT9cImxpbmVhclwiOlwib3JkaW5hbFwiXSgpLmRvbWFpbihkKS5yYW5nZShsKSx2PW4uc2NhbGVbdT9cImxpbmVhclwiOlwib3JkaW5hbFwiXSgpLmRvbWFpbihkKVt1P1wicmFuZ2VcIjpcInJhbmdlUG9pbnRzXCJdKFswLGhdKTtpZih1KXt2YXIgbT1mLnNlbGVjdChcIi5sZWdlbmQtbWFya3NcIikuYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJsaW5lYXJHcmFkaWVudFwiKS5hdHRyKHtpZDpcImdyYWQxXCIseDE6XCIwJVwiLHkxOlwiMCVcIix4MjpcIjAlXCIseTI6XCIxMDAlXCJ9KS5zZWxlY3RBbGwoXCJzdG9wXCIpLmRhdGEobCk7bS5lbnRlcigpLmFwcGVuZChcInN0b3BcIiksbS5hdHRyKHtvZmZzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS8obC5sZW5ndGgtMSkqMTAwK1wiJVwifX0pLnN0eWxlKHtcInN0b3AtY29sb3JcIjpmdW5jdGlvbih0LGUpe3JldHVybiB0fX0pLGYuYXBwZW5kKFwicmVjdFwiKS5jbGFzc2VkKFwibGVnZW5kLW1hcmtcIiwhMCkuYXR0cih7aGVpZ2h0OmUuaGVpZ2h0LHdpZHRoOmUuY29sb3JCYW5kV2lkdGgsZmlsbDpcInVybCgjZ3JhZDEpXCJ9KX1lbHNle3ZhciB5PWYuc2VsZWN0KFwiLmxlZ2VuZC1tYXJrc1wiKS5zZWxlY3RBbGwoXCJwYXRoLmxlZ2VuZC1tYXJrXCIpLmRhdGEobyk7eS5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChcImxlZ2VuZC1tYXJrXCIsITApLHkuYXR0cih7dHJhbnNmb3JtOmZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrW2MvMix2KGUpK2MvMl0rXCIpXCJ9LGQ6ZnVuY3Rpb24odCxlKXt2YXIgcixpLGEsbz10LnN5bWJvbDtyZXR1cm4gYT0zKihpPWMpLFwibGluZVwiPT09KHI9byk/XCJNXCIrW1staS8yLC1pLzEyXSxbaS8yLC1pLzEyXSxbaS8yLGkvMTJdLFstaS8yLGkvMTJdXStcIlpcIjotMSE9bi5zdmcuc3ltYm9sVHlwZXMuaW5kZXhPZihyKT9uLnN2Zy5zeW1ib2woKS50eXBlKHIpLnNpemUoYSkoKTpuLnN2Zy5zeW1ib2woKS50eXBlKFwic3F1YXJlXCIpLnNpemUoYSkoKX0sZmlsbDpmdW5jdGlvbih0LGUpe3JldHVybiBnKGUpfX0pLHkuZXhpdCgpLnJlbW92ZSgpfXZhciB4PW4uc3ZnLmF4aXMoKS5zY2FsZSh2KS5vcmllbnQoXCJyaWdodFwiKSxiPWYuc2VsZWN0KFwiZy5sZWdlbmQtYXhpc1wiKS5hdHRyKHt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoXCIrW3U/ZS5jb2xvckJhbmRXaWR0aDpjLGMvMl0rXCIpXCJ9KS5jYWxsKHgpO3JldHVybiBiLnNlbGVjdEFsbChcIi5kb21haW5cIikuc3R5bGUoe2ZpbGw6XCJub25lXCIsc3Ryb2tlOlwibm9uZVwifSksYi5zZWxlY3RBbGwoXCJsaW5lXCIpLnN0eWxlKHtmaWxsOlwibm9uZVwiLHN0cm9rZTp1P2UudGV4dENvbG9yOlwibm9uZVwifSksYi5zZWxlY3RBbGwoXCJ0ZXh0XCIpLnN0eWxlKHtmaWxsOmUudGV4dENvbG9yLFwiZm9udC1zaXplXCI6ZS5mb250U2l6ZX0pLnRleHQoZnVuY3Rpb24odCxlKXtyZXR1cm4gb1tlXS5uYW1lfSkscn1yZXR1cm4gci5jb25maWc9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkodCxlKSx0aGlzKTp0fSxuLnJlYmluZChyLGUsXCJvblwiKSxyfSxvLkxlZ2VuZC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKHQsZSl7cmV0dXJue2RhdGE6W1wiYVwiLFwiYlwiLFwiY1wiXSxsZWdlbmRDb25maWc6e2VsZW1lbnRzOlt7c3ltYm9sOlwibGluZVwiLGNvbG9yOlwicmVkXCJ9LHtzeW1ib2w6XCJzcXVhcmVcIixjb2xvcjpcInllbGxvd1wifSx7c3ltYm9sOlwiZGlhbW9uZFwiLGNvbG9yOlwibGltZWdyZWVuXCJ9XSxoZWlnaHQ6MTUwLGNvbG9yQmFuZFdpZHRoOjMwLGZvbnRTaXplOjEyLGNvbnRhaW5lcjpcImJvZHlcIixpc0NvbnRpbnVvdXM6bnVsbCx0ZXh0Q29sb3I6XCJncmV5XCIscmV2ZXJzZU9yZGVyOiExfX19LG8udG9vbHRpcFBhbmVsPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLGE9e2NvbnRhaW5lcjpudWxsLGhhc1RpY2s6ITEsZm9udFNpemU6MTIsY29sb3I6XCJ3aGl0ZVwiLHBhZGRpbmc6NX0scz1cInRvb2x0aXAtXCIrby50b29sdGlwUGFuZWwudWlkKyssbD0xMCxjPWZ1bmN0aW9uKCl7dmFyIG49KHQ9YS5jb250YWluZXIuc2VsZWN0QWxsKFwiZy5cIitzKS5kYXRhKFswXSkpLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKHMsITApLnN0eWxlKHtcInBvaW50ZXItZXZlbnRzXCI6XCJub25lXCIsZGlzcGxheTpcIm5vbmVcIn0pO3JldHVybiByPW4uYXBwZW5kKFwicGF0aFwiKS5zdHlsZSh7ZmlsbDpcIndoaXRlXCIsXCJmaWxsLW9wYWNpdHlcIjouOX0pLmF0dHIoe2Q6XCJNMCAwXCJ9KSxlPW4uYXBwZW5kKFwidGV4dFwiKS5hdHRyKHtkeDphLnBhZGRpbmcrbCxkeTouMyorYS5mb250U2l6ZX0pLGN9O3JldHVybiBjLnRleHQ9ZnVuY3Rpb24oaSl7dmFyIG89bi5oc2woYS5jb2xvcikubCxzPW8+PS41P1wiI2FhYVwiOlwid2hpdGVcIix1PW8+PS41P1wiYmxhY2tcIjpcIndoaXRlXCIsaD1pfHxcIlwiO2Uuc3R5bGUoe2ZpbGw6dSxcImZvbnQtc2l6ZVwiOmEuZm9udFNpemUrXCJweFwifSkudGV4dChoKTt2YXIgZj1hLnBhZGRpbmcscD1lLm5vZGUoKS5nZXRCQm94KCksZD17ZmlsbDphLmNvbG9yLHN0cm9rZTpzLFwic3Ryb2tlLXdpZHRoXCI6XCIycHhcIn0sZz1wLndpZHRoKzIqZitsLHY9cC5oZWlnaHQrMipmO3JldHVybiByLmF0dHIoe2Q6XCJNXCIrW1tsLC12LzJdLFtsLC12LzRdLFthLmhhc1RpY2s/MDpsLDBdLFtsLHYvNF0sW2wsdi8yXSxbZyx2LzJdLFtnLC12LzJdXS5qb2luKFwiTFwiKStcIlpcIn0pLnN0eWxlKGQpLHQuYXR0cih7dHJhbnNmb3JtOlwidHJhbnNsYXRlKFwiK1tsLC12LzIrMipmXStcIilcIn0pLHQuc3R5bGUoe2Rpc3BsYXk6XCJibG9ja1wifSksY30sYy5tb3ZlPWZ1bmN0aW9uKGUpe2lmKHQpcmV0dXJuIHQuYXR0cih7dHJhbnNmb3JtOlwidHJhbnNsYXRlKFwiK1tlWzBdLGVbMV1dK1wiKVwifSkuc3R5bGUoe2Rpc3BsYXk6XCJibG9ja1wifSksY30sYy5oaWRlPWZ1bmN0aW9uKCl7aWYodClyZXR1cm4gdC5zdHlsZSh7ZGlzcGxheTpcIm5vbmVcIn0pLGN9LGMuc2hvdz1mdW5jdGlvbigpe2lmKHQpcmV0dXJuIHQuc3R5bGUoe2Rpc3BsYXk6XCJibG9ja1wifSksY30sYy5jb25maWc9ZnVuY3Rpb24odCl7cmV0dXJuIGkoYSx0KSxjfSxjfSxvLnRvb2x0aXBQYW5lbC51aWQ9MSxvLmFkYXB0ZXI9e30sby5hZGFwdGVyLnBsb3RseT1mdW5jdGlvbigpe3ZhciB0PXtjb252ZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIHI9e307aWYodC5kYXRhJiYoci5kYXRhPXQuZGF0YS5tYXAoZnVuY3Rpb24odCxyKXt2YXIgbj1pKHt9LHQpO3JldHVybltbbixbXCJtYXJrZXJcIixcImNvbG9yXCJdLFtcImNvbG9yXCJdXSxbbixbXCJtYXJrZXJcIixcIm9wYWNpdHlcIl0sW1wib3BhY2l0eVwiXV0sW24sW1wibWFya2VyXCIsXCJsaW5lXCIsXCJjb2xvclwiXSxbXCJzdHJva2VDb2xvclwiXV0sW24sW1wibWFya2VyXCIsXCJsaW5lXCIsXCJkYXNoXCJdLFtcInN0cm9rZURhc2hcIl1dLFtuLFtcIm1hcmtlclwiLFwibGluZVwiLFwid2lkdGhcIl0sW1wic3Ryb2tlU2l6ZVwiXV0sW24sW1wibWFya2VyXCIsXCJzeW1ib2xcIl0sW1wiZG90VHlwZVwiXV0sW24sW1wibWFya2VyXCIsXCJzaXplXCJdLFtcImRvdFNpemVcIl1dLFtuLFtcIm1hcmtlclwiLFwiYmFyV2lkdGhcIl0sW1wiYmFyV2lkdGhcIl1dLFtuLFtcImxpbmVcIixcImludGVycG9sYXRpb25cIl0sW1wibGluZUludGVycG9sYXRpb25cIl1dLFtuLFtcInNob3dsZWdlbmRcIl0sW1widmlzaWJsZUluTGVnZW5kXCJdXV0uZm9yRWFjaChmdW5jdGlvbih0LHIpe28udXRpbC50cmFuc2xhdG9yLmFwcGx5KG51bGwsdC5jb25jYXQoZSkpfSksZXx8ZGVsZXRlIG4ubWFya2VyLGUmJmRlbGV0ZSBuLmdyb3VwSWQsZT8oXCJMaW5lUGxvdFwiPT09bi5nZW9tZXRyeT8obi50eXBlPVwic2NhdHRlclwiLCEwPT09bi5kb3RWaXNpYmxlPyhkZWxldGUgbi5kb3RWaXNpYmxlLG4ubW9kZT1cImxpbmVzK21hcmtlcnNcIik6bi5tb2RlPVwibGluZXNcIik6XCJEb3RQbG90XCI9PT1uLmdlb21ldHJ5PyhuLnR5cGU9XCJzY2F0dGVyXCIsbi5tb2RlPVwibWFya2Vyc1wiKTpcIkFyZWFDaGFydFwiPT09bi5nZW9tZXRyeT9uLnR5cGU9XCJhcmVhXCI6XCJCYXJDaGFydFwiPT09bi5nZW9tZXRyeSYmKG4udHlwZT1cImJhclwiKSxkZWxldGUgbi5nZW9tZXRyeSk6KFwic2NhdHRlclwiPT09bi50eXBlP1wibGluZXNcIj09PW4ubW9kZT9uLmdlb21ldHJ5PVwiTGluZVBsb3RcIjpcIm1hcmtlcnNcIj09PW4ubW9kZT9uLmdlb21ldHJ5PVwiRG90UGxvdFwiOlwibGluZXMrbWFya2Vyc1wiPT09bi5tb2RlJiYobi5nZW9tZXRyeT1cIkxpbmVQbG90XCIsbi5kb3RWaXNpYmxlPSEwKTpcImFyZWFcIj09PW4udHlwZT9uLmdlb21ldHJ5PVwiQXJlYUNoYXJ0XCI6XCJiYXJcIj09PW4udHlwZSYmKG4uZ2VvbWV0cnk9XCJCYXJDaGFydFwiKSxkZWxldGUgbi5tb2RlLGRlbGV0ZSBuLnR5cGUpLG59KSwhZSYmdC5sYXlvdXQmJlwic3RhY2tcIj09PXQubGF5b3V0LmJhcm1vZGUpKXt2YXIgYT1vLnV0aWwuZHVwbGljYXRlcyhyLmRhdGEubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZ2VvbWV0cnl9KSk7ci5kYXRhLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1hLmluZGV4T2YodC5nZW9tZXRyeSk7LTEhPW4mJihyLmRhdGFbZV0uZ3JvdXBJZD1uKX0pfWlmKHQubGF5b3V0KXt2YXIgcz1pKHt9LHQubGF5b3V0KTtpZihbW3MsW1wicGxvdF9iZ2NvbG9yXCJdLFtcImJhY2tncm91bmRDb2xvclwiXV0sW3MsW1wic2hvd2xlZ2VuZFwiXSxbXCJzaG93TGVnZW5kXCJdXSxbcyxbXCJyYWRpYWxheGlzXCJdLFtcInJhZGlhbEF4aXNcIl1dLFtzLFtcImFuZ3VsYXJheGlzXCJdLFtcImFuZ3VsYXJBeGlzXCJdXSxbcy5hbmd1bGFyYXhpcyxbXCJzaG93bGluZVwiXSxbXCJncmlkTGluZXNWaXNpYmxlXCJdXSxbcy5hbmd1bGFyYXhpcyxbXCJzaG93dGlja2xhYmVsc1wiXSxbXCJsYWJlbHNWaXNpYmxlXCJdXSxbcy5hbmd1bGFyYXhpcyxbXCJudGlja3NcIl0sW1widGlja3NDb3VudFwiXV0sW3MuYW5ndWxhcmF4aXMsW1widGlja29yaWVudGF0aW9uXCJdLFtcInRpY2tPcmllbnRhdGlvblwiXV0sW3MuYW5ndWxhcmF4aXMsW1widGlja3N1ZmZpeFwiXSxbXCJ0aWNrc1N1ZmZpeFwiXV0sW3MuYW5ndWxhcmF4aXMsW1wicmFuZ2VcIl0sW1wiZG9tYWluXCJdXSxbcy5hbmd1bGFyYXhpcyxbXCJlbmRwYWRkaW5nXCJdLFtcImVuZFBhZGRpbmdcIl1dLFtzLnJhZGlhbGF4aXMsW1wic2hvd2xpbmVcIl0sW1wiZ3JpZExpbmVzVmlzaWJsZVwiXV0sW3MucmFkaWFsYXhpcyxbXCJ0aWNrb3JpZW50YXRpb25cIl0sW1widGlja09yaWVudGF0aW9uXCJdXSxbcy5yYWRpYWxheGlzLFtcInRpY2tzdWZmaXhcIl0sW1widGlja3NTdWZmaXhcIl1dLFtzLnJhZGlhbGF4aXMsW1wicmFuZ2VcIl0sW1wiZG9tYWluXCJdXSxbcy5hbmd1bGFyQXhpcyxbXCJzaG93bGluZVwiXSxbXCJncmlkTGluZXNWaXNpYmxlXCJdXSxbcy5hbmd1bGFyQXhpcyxbXCJzaG93dGlja2xhYmVsc1wiXSxbXCJsYWJlbHNWaXNpYmxlXCJdXSxbcy5hbmd1bGFyQXhpcyxbXCJudGlja3NcIl0sW1widGlja3NDb3VudFwiXV0sW3MuYW5ndWxhckF4aXMsW1widGlja29yaWVudGF0aW9uXCJdLFtcInRpY2tPcmllbnRhdGlvblwiXV0sW3MuYW5ndWxhckF4aXMsW1widGlja3N1ZmZpeFwiXSxbXCJ0aWNrc1N1ZmZpeFwiXV0sW3MuYW5ndWxhckF4aXMsW1wicmFuZ2VcIl0sW1wiZG9tYWluXCJdXSxbcy5hbmd1bGFyQXhpcyxbXCJlbmRwYWRkaW5nXCJdLFtcImVuZFBhZGRpbmdcIl1dLFtzLnJhZGlhbEF4aXMsW1wic2hvd2xpbmVcIl0sW1wiZ3JpZExpbmVzVmlzaWJsZVwiXV0sW3MucmFkaWFsQXhpcyxbXCJ0aWNrb3JpZW50YXRpb25cIl0sW1widGlja09yaWVudGF0aW9uXCJdXSxbcy5yYWRpYWxBeGlzLFtcInRpY2tzdWZmaXhcIl0sW1widGlja3NTdWZmaXhcIl1dLFtzLnJhZGlhbEF4aXMsW1wicmFuZ2VcIl0sW1wiZG9tYWluXCJdXSxbcy5mb250LFtcIm91dGxpbmVjb2xvclwiXSxbXCJvdXRsaW5lQ29sb3JcIl1dLFtzLmxlZ2VuZCxbXCJ0cmFjZW9yZGVyXCJdLFtcInJldmVyc2VPcmRlclwiXV0sW3MsW1wibGFiZWxvZmZzZXRcIl0sW1wibGFiZWxPZmZzZXRcIl1dLFtzLFtcImRlZmF1bHRjb2xvcnJhbmdlXCJdLFtcImRlZmF1bHRDb2xvclJhbmdlXCJdXV0uZm9yRWFjaChmdW5jdGlvbih0LHIpe28udXRpbC50cmFuc2xhdG9yLmFwcGx5KG51bGwsdC5jb25jYXQoZSkpfSksZT8oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHMudGlja0xlbmd0aCYmKHMuYW5ndWxhcmF4aXMudGlja2xlbj1zLnRpY2tMZW5ndGgsZGVsZXRlIHMudGlja0xlbmd0aCkscy50aWNrQ29sb3ImJihzLmFuZ3VsYXJheGlzLnRpY2tjb2xvcj1zLnRpY2tDb2xvcixkZWxldGUgcy50aWNrQ29sb3IpKToocy5hbmd1bGFyQXhpcyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHMuYW5ndWxhckF4aXMudGlja2xlbiYmKHMudGlja0xlbmd0aD1zLmFuZ3VsYXJBeGlzLnRpY2tsZW4pLHMuYW5ndWxhckF4aXMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzLmFuZ3VsYXJBeGlzLnRpY2tjb2xvciYmKHMudGlja0NvbG9yPXMuYW5ndWxhckF4aXMudGlja2NvbG9yKSkscy5sZWdlbmQmJlwiYm9vbGVhblwiIT10eXBlb2Ygcy5sZWdlbmQucmV2ZXJzZU9yZGVyJiYocy5sZWdlbmQucmV2ZXJzZU9yZGVyPVwibm9ybWFsXCIhPXMubGVnZW5kLnJldmVyc2VPcmRlcikscy5sZWdlbmQmJlwiYm9vbGVhblwiPT10eXBlb2Ygcy5sZWdlbmQudHJhY2VvcmRlciYmKHMubGVnZW5kLnRyYWNlb3JkZXI9cy5sZWdlbmQudHJhY2VvcmRlcj9cInJldmVyc2VkXCI6XCJub3JtYWxcIixkZWxldGUgcy5sZWdlbmQucmV2ZXJzZU9yZGVyKSxzLm1hcmdpbiYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHMubWFyZ2luLnQpe3ZhciBsPVtcInRcIixcInJcIixcImJcIixcImxcIixcInBhZFwiXSxjPVtcInRvcFwiLFwicmlnaHRcIixcImJvdHRvbVwiLFwibGVmdFwiLFwicGFkXCJdLHU9e307bi5lbnRyaWVzKHMubWFyZ2luKS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dVtjW2wuaW5kZXhPZih0LmtleSldXT10LnZhbHVlfSkscy5tYXJnaW49dX1lJiYoZGVsZXRlIHMubmVlZHNFbmRTcGFjaW5nLGRlbGV0ZSBzLm1pbm9yVGlja0NvbG9yLGRlbGV0ZSBzLm1pbm9yVGlja3MsZGVsZXRlIHMuYW5ndWxhcmF4aXMudGlja3NDb3VudCxkZWxldGUgcy5hbmd1bGFyYXhpcy50aWNrc0NvdW50LGRlbGV0ZSBzLmFuZ3VsYXJheGlzLnRpY2tzU3RlcCxkZWxldGUgcy5hbmd1bGFyYXhpcy5yZXdyaXRlVGlja3MsZGVsZXRlIHMuYW5ndWxhcmF4aXMubnRpY2tzLGRlbGV0ZSBzLnJhZGlhbGF4aXMudGlja3NDb3VudCxkZWxldGUgcy5yYWRpYWxheGlzLnRpY2tzQ291bnQsZGVsZXRlIHMucmFkaWFsYXhpcy50aWNrc1N0ZXAsZGVsZXRlIHMucmFkaWFsYXhpcy5yZXdyaXRlVGlja3MsZGVsZXRlIHMucmFkaWFsYXhpcy5udGlja3MpLHIubGF5b3V0PXN9cmV0dXJuIHJ9fTtyZXR1cm4gdH19LHtcIi4uLy4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIjo2NzMsXCIuLi8uLi8uLi9saWJcIjo3MDEsZDM6MTU1fV0sODIwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLG89dChcIi4vbWljcm9wb2xhclwiKSxzPXQoXCIuL3VuZG9fbWFuYWdlclwiKSxsPWkuZXh0ZW5kRGVlcEFsbCxjPWUuZXhwb3J0cz17fTtjLmZyYW1ld29yaz1mdW5jdGlvbih0KXt2YXIgZSxyLGksYSx1LGg9bmV3IHM7ZnVuY3Rpb24gZihyLHMpe3JldHVybiBzJiYodT1zKSxuLnNlbGVjdChuLnNlbGVjdCh1KS5ub2RlKCkucGFyZW50Tm9kZSkuc2VsZWN0QWxsKFwiLnN2Zy1jb250YWluZXI+Kjpub3QoLmNoYXJ0LXJvb3QpXCIpLnJlbW92ZSgpLGU9ZT9sKGUscik6cixpfHwoaT1vLkF4aXMoKSksYT1vLmFkYXB0ZXIucGxvdGx5KCkuY29udmVydChlKSxpLmNvbmZpZyhhKS5yZW5kZXIodSksdC5kYXRhPWUuZGF0YSx0LmxheW91dD1lLmxheW91dCxjLmZpbGxMYXlvdXQodCksZX1yZXR1cm4gZi5pc1BvbGFyPSEwLGYuc3ZnPWZ1bmN0aW9uKCl7cmV0dXJuIGkuc3ZnKCl9LGYuZ2V0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LGYuZ2V0TGl2ZUNvbmZpZz1mdW5jdGlvbigpe3JldHVybiBvLmFkYXB0ZXIucGxvdGx5KCkuY29udmVydChpLmdldExpdmVDb25maWcoKSwhMCl9LGYuZ2V0TGl2ZVNjYWxlcz1mdW5jdGlvbigpe3JldHVybnt0OmkuYW5ndWxhclNjYWxlKCkscjppLnJhZGlhbFNjYWxlKCl9fSxmLnNldFVuZG9Qb2ludD1mdW5jdGlvbigpe3ZhciB0LG4saT10aGlzLGE9by51dGlsLmNsb25lSnNvbihlKTt0PWEsbj1yLGguYWRkKHt1bmRvOmZ1bmN0aW9uKCl7biYmaShuKX0scmVkbzpmdW5jdGlvbigpe2kodCl9fSkscj1vLnV0aWwuY2xvbmVKc29uKGEpfSxmLnVuZG89ZnVuY3Rpb24oKXtoLnVuZG8oKX0sZi5yZWRvPWZ1bmN0aW9uKCl7aC5yZWRvKCl9LGZ9LGMuZmlsbExheW91dD1mdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoXCIucGxvdC1jb250YWluZXJcIikscj1lLnNlbGVjdEFsbChcIi5zdmctY29udGFpbmVyXCIpLGk9dC5mcmFtZXdvcmsmJnQuZnJhbWV3b3JrLnN2ZyYmdC5mcmFtZXdvcmsuc3ZnKCksbz17d2lkdGg6ODAwLGhlaWdodDo2MDAscGFwZXJfYmdjb2xvcjphLmJhY2tncm91bmQsX2NvbnRhaW5lcjplLF9wYXBlcmRpdjpyLF9wYXBlcjppfTt0Ll9mdWxsTGF5b3V0PWwobyx0LmxheW91dCl9fSx7XCIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vLi4vbGliXCI6NzAxLFwiLi9taWNyb3BvbGFyXCI6ODE5LFwiLi91bmRvX21hbmFnZXJcIjo4MjEsZDM6MTU1fV0sODIxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQsZT1bXSxyPS0xLG49ITE7ZnVuY3Rpb24gaSh0LGUpe3JldHVybiB0PyhuPSEwLHRbZV0oKSxuPSExLHRoaXMpOnRoaXN9cmV0dXJue2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gbj90aGlzOihlLnNwbGljZShyKzEsZS5sZW5ndGgtciksZS5wdXNoKHQpLHI9ZS5sZW5ndGgtMSx0aGlzKX0sc2V0Q2FsbGJhY2s6ZnVuY3Rpb24oZSl7dD1lfSx1bmRvOmZ1bmN0aW9uKCl7dmFyIG49ZVtyXTtyZXR1cm4gbj8oaShuLFwidW5kb1wiKSxyLT0xLHQmJnQobi51bmRvKSx0aGlzKTp0aGlzfSxyZWRvOmZ1bmN0aW9uKCl7dmFyIG49ZVtyKzFdO3JldHVybiBuPyhpKG4sXCJyZWRvXCIpLHIrPTEsdCYmdChuLnJlZG8pLHRoaXMpOnRoaXN9LGNsZWFyOmZ1bmN0aW9uKCl7ZT1bXSxyPS0xfSxoYXNVbmRvOmZ1bmN0aW9uKCl7cmV0dXJuLTEhPT1yfSxoYXNSZWRvOmZ1bmN0aW9uKCl7cmV0dXJuIHI8ZS5sZW5ndGgtMX0sZ2V0Q29tbWFuZHM6ZnVuY3Rpb24oKXtyZXR1cm4gZX0sZ2V0UHJldmlvdXNDb21tYW5kOmZ1bmN0aW9uKCl7cmV0dXJuIGVbci0xXX0sZ2V0SW5kZXg6ZnVuY3Rpb24oKXtyZXR1cm4gcn19fX0se31dLDgyMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJ0aW55Y29sb3IyXCIpLGE9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLG89dChcIi4uLy4uL2xpYlwiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGw9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxjPXQoXCIuLi9wbG90c1wiKSx1PXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxoPXQoXCIuLi9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnRcIiksZj10KFwiLi9zZXRfY29udmVydFwiKSxwPXQoXCIuLi9jYXJ0ZXNpYW4vYXV0b3JhbmdlXCIpLmRvQXV0b1JhbmdlLGQ9dChcIi4uL2NhcnRlc2lhbi9kcmFnYm94XCIpLGc9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnRcIiksdj10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxtPXQoXCIuLi8uLi9jb21wb25lbnRzL3RpdGxlc1wiKSx5PXQoXCIuLi9jYXJ0ZXNpYW4vc2VsZWN0XCIpLnByZXBTZWxlY3QseD10KFwiLi4vY2FydGVzaWFuL3NlbGVjdFwiKS5zZWxlY3RPbkNsaWNrLGI9dChcIi4uL2NhcnRlc2lhbi9zZWxlY3RcIikuY2xlYXJTZWxlY3QsXz10KFwiLi4vLi4vbGliL3NldGN1cnNvclwiKSx3PXQoXCIuLi8uLi9saWIvY2xlYXJfZ2xfY2FudmFzZXNcIiksaz10KFwiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXNcIikucmVkcmF3UmVnbFRyYWNlcyxBPXQoXCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCIpLk1JRF9TSElGVCxUPXQoXCIuL2NvbnN0YW50c1wiKSxNPXQoXCIuL2hlbHBlcnNcIiksUz1vLl8sRT1vLm1vZCxDPW8uZGVnMnJhZCxMPW8ucmFkMmRlZztmdW5jdGlvbiB6KHQsZSl7dGhpcy5pZD1lLHRoaXMuZ2Q9dCx0aGlzLl9oYXNDbGlwT25BeGlzRmFsc2U9bnVsbCx0aGlzLnZhbmdsZXM9bnVsbCx0aGlzLnJhZGlhbEF4aXNBbmdsZT1udWxsLHRoaXMudHJhY2VIYXNoPXt9LHRoaXMubGF5ZXJzPXt9LHRoaXMuY2xpcFBhdGhzPXt9LHRoaXMuY2xpcElkcz17fSx0aGlzLnZpZXdJbml0aWFsPXt9O3ZhciByPXQuX2Z1bGxMYXlvdXQsbj1cImNsaXBcIityLl91aWQrZTt0aGlzLmNsaXBJZHMuZm9yVHJhY2VzPW4rXCItZm9yLXRyYWNlc1wiLHRoaXMuY2xpcFBhdGhzLmZvclRyYWNlcz1yLl9jbGlwcy5hcHBlbmQoXCJjbGlwUGF0aFwiKS5hdHRyKFwiaWRcIix0aGlzLmNsaXBJZHMuZm9yVHJhY2VzKSx0aGlzLmNsaXBQYXRocy5mb3JUcmFjZXMuYXBwZW5kKFwicGF0aFwiKSx0aGlzLmZyYW1ld29yaz1yLl9wb2xhcmxheWVyLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsZSksdGhpcy5yYWRpYWxUaWNrTGF5b3V0PW51bGwsdGhpcy5hbmd1bGFyVGlja0xheW91dD1udWxsfXZhciBPPXoucHJvdG90eXBlO2Z1bmN0aW9uIEkodCl7dmFyIGU9dC50aWNrcytTdHJpbmcodC50aWNrbGVuKStTdHJpbmcodC5zaG93dGlja2xhYmVscyk7cmV0dXJuXCJzaWRlXCJpbiB0JiYoZSs9dC5zaWRlKSxlfWZ1bmN0aW9uIEQodCxlKXtyZXR1cm4gZVtvLmZpbmRJbmRleE9mTWluKGUsZnVuY3Rpb24oZSl7cmV0dXJuIG8uYW5nbGVEaXN0KHQsZSl9KV19ZnVuY3Rpb24gUCh0LGUscil7cmV0dXJuIGU/KHQuYXR0cihcImRpc3BsYXlcIixudWxsKSx0LmF0dHIocikpOnQmJnQuYXR0cihcImRpc3BsYXlcIixcIm5vbmVcIiksdH1mdW5jdGlvbiBSKHQsZSl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrdCtcIixcIitlK1wiKVwifWZ1bmN0aW9uIEYodCl7cmV0dXJuXCJyb3RhdGUoXCIrdCtcIilcIn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IHoodCxlKX0sTy5wbG90PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVt0aGlzLmlkXTt0aGlzLl9oYXNDbGlwT25BeGlzRmFsc2U9ITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe2lmKCExPT09dFtuXVswXS50cmFjZS5jbGlwb25heGlzKXt0aGlzLl9oYXNDbGlwT25BeGlzRmFsc2U9ITA7YnJlYWt9fXRoaXMudXBkYXRlTGF5ZXJzKGUsciksdGhpcy51cGRhdGVMYXlvdXQoZSxyKSxjLmdlbmVyYWxVcGRhdGVQZXJUcmFjZU1vZHVsZSh0aGlzLmdkLHRoaXMsdCxyKSx0aGlzLnVwZGF0ZUZ4KGUscil9LE8udXBkYXRlTGF5ZXJzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sYXllcnMsaT1lLnJhZGlhbGF4aXMsYT1lLmFuZ3VsYXJheGlzLG89VC5sYXllck5hbWVzLHM9by5pbmRleE9mKFwiZnJvbnRwbG90XCIpLGw9by5zbGljZSgwLHMpLGM9XCJiZWxvdyB0cmFjZXNcIj09PWEubGF5ZXIsdT1cImJlbG93IHRyYWNlc1wiPT09aS5sYXllcjtjJiZsLnB1c2goXCJhbmd1bGFyLWxpbmVcIiksdSYmbC5wdXNoKFwicmFkaWFsLWxpbmVcIiksYyYmbC5wdXNoKFwiYW5ndWxhci1heGlzXCIpLHUmJmwucHVzaChcInJhZGlhbC1heGlzXCIpLGwucHVzaChcImZyb250cGxvdFwiKSxjfHxsLnB1c2goXCJhbmd1bGFyLWxpbmVcIiksdXx8bC5wdXNoKFwicmFkaWFsLWxpbmVcIiksY3x8bC5wdXNoKFwiYW5ndWxhci1heGlzXCIpLHV8fGwucHVzaChcInJhZGlhbC1heGlzXCIpO3ZhciBoPXRoaXMuZnJhbWV3b3JrLnNlbGVjdEFsbChcIi5wb2xhcnN1YmxheWVyXCIpLmRhdGEobCxTdHJpbmcpO2guZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLGZ1bmN0aW9uKHQpe3JldHVyblwicG9sYXJzdWJsYXllciBcIit0fSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1yW3RdPW4uc2VsZWN0KHRoaXMpO3N3aXRjaCh0KXtjYXNlXCJmcm9udHBsb3RcIjplLmFwcGVuZChcImdcIikuY2xhc3NlZChcImJhcmxheWVyXCIsITApLGUuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwic2NhdHRlcmxheWVyXCIsITApO2JyZWFrO2Nhc2VcImJhY2twbG90XCI6ZS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJtYXBsYXllclwiLCEwKTticmVhaztjYXNlXCJwbG90YmdcIjpyLmJnPWUuYXBwZW5kKFwicGF0aFwiKTticmVhaztjYXNlXCJyYWRpYWwtZ3JpZFwiOmNhc2VcImFuZ3VsYXItZ3JpZFwiOmUuc3R5bGUoXCJmaWxsXCIsXCJub25lXCIpO2JyZWFrO2Nhc2VcInJhZGlhbC1saW5lXCI6ZS5hcHBlbmQoXCJsaW5lXCIpLnN0eWxlKFwiZmlsbFwiLFwibm9uZVwiKTticmVhaztjYXNlXCJhbmd1bGFyLWxpbmVcIjplLmFwcGVuZChcInBhdGhcIikuc3R5bGUoXCJmaWxsXCIsXCJub25lXCIpfX0pLGgub3JkZXIoKX0sTy51cGRhdGVMYXlvdXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxheWVycyxuPXQuX3NpemUsaT1lLnJhZGlhbGF4aXMsYT1lLmFuZ3VsYXJheGlzLG89ZS5kb21haW4ueCxjPWUuZG9tYWluLnk7dGhpcy54T2Zmc2V0PW4ubCtuLncqb1swXSx0aGlzLnlPZmZzZXQ9bi50K24uaCooMS1jWzFdKTt2YXIgdT10aGlzLnhMZW5ndGg9bi53KihvWzFdLW9bMF0pLGg9dGhpcy55TGVuZ3RoPW4uaCooY1sxXS1jWzBdKSxmPWUuc2VjdG9yO3RoaXMuc2VjdG9ySW5SYWQ9Zi5tYXAoQyk7dmFyIHAsZCxnLHYsbSx5PXRoaXMuc2VjdG9yQkJveD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhPXRbMF0sbz10WzFdLWEscz1FKGEsMzYwKSxsPXMrbyxjPU1hdGguY29zKEMocykpLHU9TWF0aC5zaW4oQyhzKSksaD1NYXRoLmNvcyhDKGwpKSxmPU1hdGguc2luKEMobCkpO2k9czw9OTAmJmw+PTkwfHxzPjkwJiZsPj00NTA/MTp1PD0wJiZmPD0wPzA6TWF0aC5tYXgodSxmKTtlPXM8PTE4MCYmbD49MTgwfHxzPjE4MCYmbD49NTQwPy0xOmM+PTAmJmg+PTA/MDpNYXRoLm1pbihjLGgpO3I9czw9MjcwJiZsPj0yNzB8fHM+MjcwJiZsPj02MzA/LTE6dT49MCYmZj49MD8wOk1hdGgubWluKHUsZik7bj1sPj0zNjA/MTpjPD0wJiZoPD0wPzA6TWF0aC5tYXgoYyxoKTtyZXR1cm5bZSxyLG4saV19KGYpLHg9eVsyXS15WzBdLGI9eVszXS15WzFdLF89aC91LHc9TWF0aC5hYnMoYi94KTtfPnc/KHA9dSxtPShoLShkPXUqdykpL24uaC8yLGc9W29bMF0sb1sxXV0sdj1bY1swXSttLGNbMV0tbV0pOihkPWgsbT0odS0ocD1oL3cpKS9uLncvMixnPVtvWzBdK20sb1sxXS1tXSx2PVtjWzBdLGNbMV1dKSx0aGlzLnhMZW5ndGgyPXAsdGhpcy55TGVuZ3RoMj1kLHRoaXMueERvbWFpbjI9Zyx0aGlzLnlEb21haW4yPXY7dmFyIGs9dGhpcy54T2Zmc2V0Mj1uLmwrbi53KmdbMF0sQT10aGlzLnlPZmZzZXQyPW4udCtuLmgqKDEtdlsxXSksVD10aGlzLnJhZGl1cz1wL3gsTT10aGlzLmlubmVyUmFkaXVzPWUuaG9sZSpULFM9dGhpcy5jeD1rLVQqeVswXSxMPXRoaXMuY3k9QStUKnlbM10sej10aGlzLmN4eD1TLWssTz10aGlzLmN5eT1MLUE7dGhpcy5yYWRpYWxBeGlzPXRoaXMubW9ja0F4aXModCxlLGkse19pZDpcInhcIixzaWRlOntjb3VudGVyY2xvY2t3aXNlOlwidG9wXCIsY2xvY2t3aXNlOlwiYm90dG9tXCJ9W2kuc2lkZV0sZG9tYWluOltNL24udyxUL24ud119KSx0aGlzLmFuZ3VsYXJBeGlzPXRoaXMubW9ja0F4aXModCxlLGEse3NpZGU6XCJyaWdodFwiLGRvbWFpbjpbMCxNYXRoLlBJXSxhdXRvcmFuZ2U6ITF9KSx0aGlzLmRvQXV0b1JhbmdlKHQsZSksdGhpcy51cGRhdGVBbmd1bGFyQXhpcyh0LGUpLHRoaXMudXBkYXRlUmFkaWFsQXhpcyh0LGUpLHRoaXMudXBkYXRlUmFkaWFsQXhpc1RpdGxlKHQsZSksdGhpcy54YXhpcz10aGlzLm1vY2tDYXJ0ZXNpYW5BeGlzKHQsZSx7X2lkOlwieFwiLGRvbWFpbjpnfSksdGhpcy55YXhpcz10aGlzLm1vY2tDYXJ0ZXNpYW5BeGlzKHQsZSx7X2lkOlwieVwiLGRvbWFpbjp2fSk7dmFyIEk9dGhpcy5wYXRoU3VicGxvdCgpO3RoaXMuY2xpcFBhdGhzLmZvclRyYWNlcy5zZWxlY3QoXCJwYXRoXCIpLmF0dHIoXCJkXCIsSSkuYXR0cihcInRyYW5zZm9ybVwiLFIoeixPKSksci5mcm9udHBsb3QuYXR0cihcInRyYW5zZm9ybVwiLFIoayxBKSkuY2FsbChsLnNldENsaXBVcmwsdGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlP251bGw6dGhpcy5jbGlwSWRzLmZvclRyYWNlcyx0aGlzLmdkKSxyLmJnLmF0dHIoXCJkXCIsSSkuYXR0cihcInRyYW5zZm9ybVwiLFIoUyxMKSkuY2FsbChzLmZpbGwsZS5iZ2NvbG9yKX0sTy5tb2NrQXhpcz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1vLmV4dGVuZEZsYXQoe2FuY2hvcjpcImZyZWVcIixwb3NpdGlvbjowfSxyLG4pO3JldHVybiBmKGksZSx0KSxpfSxPLm1vY2tDYXJ0ZXNpYW5BeGlzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLGk9ci5faWQsYT1vLmV4dGVuZEZsYXQoe3R5cGU6XCJsaW5lYXJcIn0scik7aChhLHQpO3ZhciBzPXt4OlswLDJdLHk6WzEsM119O3JldHVybiBhLnNldFJhbmdlPWZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWN0b3JCQm94LHI9c1tpXSxvPW4ucmFkaWFsQXhpcy5fcmwsbD0ob1sxXS1vWzBdKS8oMS1lLmhvbGUpO2EucmFuZ2U9W3RbclswXV0qbCx0W3JbMV1dKmxdfSxhLmlzUHRXaXRoaW5SYW5nZT1cInhcIj09PWk/ZnVuY3Rpb24odCl7cmV0dXJuIG4uaXNQdEluc2lkZSh0KX06ZnVuY3Rpb24oKXtyZXR1cm4hMH0sYS5zZXRSYW5nZSgpLGEuc2V0U2NhbGUoKSxhfSxPLmRvQXV0b1JhbmdlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5nZCxuPXRoaXMucmFkaWFsQXhpcyxpPWUucmFkaWFsYXhpcztuLnNldFNjYWxlKCkscChyLG4pO3ZhciBhPW4ucmFuZ2U7aS5yYW5nZT1hLnNsaWNlKCksaS5faW5wdXQucmFuZ2U9YS5zbGljZSgpLG4uX3JsPVtuLnIybChhWzBdLG51bGwsXCJncmVnb3JpYW5cIiksbi5yMmwoYVsxXSxudWxsLFwiZ3JlZ29yaWFuXCIpXX0sTy51cGRhdGVSYWRpYWxBeGlzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuZ2QsaT1yLmxheWVycyxhPXIucmFkaXVzLGw9ci5pbm5lclJhZGl1cyxjPXIuY3gsaD1yLmN5LGY9ZS5yYWRpYWxheGlzLHA9RShlLnNlY3RvclswXSwzNjApLGQ9ci5yYWRpYWxBeGlzLGc9bDxhO3IuZmlsbFZpZXdJbml0aWFsS2V5KFwicmFkaWFsYXhpcy5hbmdsZVwiLGYuYW5nbGUpLHIuZmlsbFZpZXdJbml0aWFsS2V5KFwicmFkaWFsYXhpcy5yYW5nZVwiLGQucmFuZ2Uuc2xpY2UoKSksZC5zZXRHZW9tZXRyeSgpLFwiYXV0b1wiPT09ZC50aWNrYW5nbGUmJnA+OTAmJnA8PTI3MCYmKGQudGlja2FuZ2xlPTE4MCk7dmFyIHY9ZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrKGQubDJwKHQueCkrbCkrXCIsMClcIn0sbT1JKGYpO2lmKHIucmFkaWFsVGlja0xheW91dCE9PW0mJihpW1wicmFkaWFsLWF4aXNcIl0uc2VsZWN0QWxsKFwiLnh0aWNrXCIpLnJlbW92ZSgpLHIucmFkaWFsVGlja0xheW91dD1tKSxnKXtkLnNldFNjYWxlKCk7dmFyIHk9dS5jYWxjVGlja3MoZCkseD11LmNsaXBFbmRzKGQseSksYj11LmdldFRpY2tTaWducyhkKVsyXTt1LmRyYXdUaWNrcyhuLGQse3ZhbHM6eSxsYXllcjppW1wicmFkaWFsLWF4aXNcIl0scGF0aDp1Lm1ha2VUaWNrUGF0aChkLDAsYiksdHJhbnNGbjp2LGNyaXNwOiExfSksdS5kcmF3R3JpZChuLGQse3ZhbHM6eCxsYXllcjppW1wicmFkaWFsLWdyaWRcIl0scGF0aDpmdW5jdGlvbih0KXtyZXR1cm4gci5wYXRoQXJjKGQucjJwKHQueCkrbCl9LHRyYW5zRm46by5ub29wLGNyaXNwOiExfSksdS5kcmF3TGFiZWxzKG4sZCx7dmFsczp5LGxheWVyOmlbXCJyYWRpYWwtYXhpc1wiXSx0cmFuc0ZuOnYsbGFiZWxGbnM6dS5tYWtlTGFiZWxGbnMoZCwwKX0pfXZhciBfPXIucmFkaWFsQXhpc0FuZ2xlPXIudmFuZ2xlcz9MKEQoQyhmLmFuZ2xlKSxyLnZhbmdsZXMpKTpmLmFuZ2xlLHc9UihjLGgpLGs9dytGKC1fKTtQKGlbXCJyYWRpYWwtYXhpc1wiXSxnJiYoZi5zaG93dGlja2xhYmVsc3x8Zi50aWNrcykse3RyYW5zZm9ybTprfSksUChpW1wicmFkaWFsLWdyaWRcIl0sZyYmZi5zaG93Z3JpZCx7dHJhbnNmb3JtOnd9KSxQKGlbXCJyYWRpYWwtbGluZVwiXS5zZWxlY3QoXCJsaW5lXCIpLGcmJmYuc2hvd2xpbmUse3gxOmwseTE6MCx4MjphLHkyOjAsdHJhbnNmb3JtOmt9KS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsZi5saW5ld2lkdGgpLmNhbGwocy5zdHJva2UsZi5saW5lY29sb3IpfSxPLnVwZGF0ZVJhZGlhbEF4aXNUaXRsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5nZCxpPXRoaXMucmFkaXVzLGE9dGhpcy5jeCxvPXRoaXMuY3kscz1lLnJhZGlhbGF4aXMsYz10aGlzLmlkK1widGl0bGVcIix1PXZvaWQgMCE9PXI/cjp0aGlzLnJhZGlhbEF4aXNBbmdsZSxoPUModSksZj1NYXRoLmNvcyhoKSxwPU1hdGguc2luKGgpLGQ9MDtpZihzLnRpdGxlKXt2YXIgZz1sLmJCb3godGhpcy5sYXllcnNbXCJyYWRpYWwtYXhpc1wiXS5ub2RlKCkpLmhlaWdodCx2PXMudGl0bGUuZm9udC5zaXplO2Q9XCJjb3VudGVyY2xvY2t3aXNlXCI9PT1zLnNpZGU/LWctLjQqdjpnKy44KnZ9dGhpcy5sYXllcnNbXCJyYWRpYWwtYXhpcy10aXRsZVwiXT1tLmRyYXcobixjLHtwcm9wQ29udGFpbmVyOnMscHJvcE5hbWU6dGhpcy5pZCtcIi5yYWRpYWxheGlzLnRpdGxlXCIscGxhY2Vob2xkZXI6UyhuLFwiQ2xpY2sgdG8gZW50ZXIgcmFkaWFsIGF4aXMgdGl0bGVcIiksYXR0cmlidXRlczp7eDphK2kvMipmK2QqcCx5Om8taS8yKnArZCpmLFwidGV4dC1hbmNob3JcIjpcIm1pZGRsZVwifSx0cmFuc2Zvcm06e3JvdGF0ZTotdX19KX0sTy51cGRhdGVBbmd1bGFyQXhpcz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj1yLmdkLGk9ci5sYXllcnMsYT1yLnJhZGl1cyxsPXIuaW5uZXJSYWRpdXMsYz1yLmN4LGg9ci5jeSxmPWUuYW5ndWxhcmF4aXMscD1yLmFuZ3VsYXJBeGlzO3IuZmlsbFZpZXdJbml0aWFsS2V5KFwiYW5ndWxhcmF4aXMucm90YXRpb25cIixmLnJvdGF0aW9uKSxwLnNldEdlb21ldHJ5KCkscC5zZXRTY2FsZSgpO3ZhciBkPWZ1bmN0aW9uKHQpe3JldHVybiBwLnQyZyh0LngpfTtcImxpbmVhclwiPT09cC50eXBlJiZcInJhZGlhbnNcIj09PXAudGhldGF1bml0JiYocC50aWNrMD1MKHAudGljazApLHAuZHRpY2s9TChwLmR0aWNrKSk7dmFyIGc9ZnVuY3Rpb24odCl7cmV0dXJuIFIoYythKk1hdGguY29zKHQpLGgtYSpNYXRoLnNpbih0KSl9LHY9dS5tYWtlTGFiZWxGbnMocCwwKS5sYWJlbFN0YW5kb2ZmLG09e3hGbjpmdW5jdGlvbih0KXt2YXIgZT1kKHQpO3JldHVybiBNYXRoLmNvcyhlKSp2fSx5Rm46ZnVuY3Rpb24odCl7dmFyIGU9ZCh0KSxyPU1hdGguc2luKGUpPjA/LjI6MTtyZXR1cm4tTWF0aC5zaW4oZSkqKHYrdC5mb250U2l6ZSpyKStNYXRoLmFicyhNYXRoLmNvcyhlKSkqKHQuZm9udFNpemUqQSl9LGFuY2hvckZuOmZ1bmN0aW9uKHQpe3ZhciBlPWQodCkscj1NYXRoLmNvcyhlKTtyZXR1cm4gTWF0aC5hYnMocik8LjE/XCJtaWRkbGVcIjpyPjA/XCJzdGFydFwiOlwiZW5kXCJ9LGhlaWdodEZuOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1kKHQpO3JldHVybi0uNSooMStNYXRoLnNpbihuKSkqcn19LHk9SShmKTtyLmFuZ3VsYXJUaWNrTGF5b3V0IT09eSYmKGlbXCJhbmd1bGFyLWF4aXNcIl0uc2VsZWN0QWxsKFwiLlwiK3AuX2lkK1widGlja1wiKS5yZW1vdmUoKSxyLmFuZ3VsYXJUaWNrTGF5b3V0PXkpO3ZhciB4LGI9dS5jYWxjVGlja3MocCk7aWYoXCJsaW5lYXJcIj09PWUuZ3JpZHNoYXBlPyh4PWIubWFwKGQpLG8uYW5nbGVEZWx0YSh4WzBdLHhbMV0pPDAmJih4PXguc2xpY2UoKS5yZXZlcnNlKCkpKTp4PW51bGwsci52YW5nbGVzPXgsXCJjYXRlZ29yeVwiPT09cC50eXBlJiYoYj1iLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gby5pc0FuZ2xlSW5zaWRlU2VjdG9yKGQodCksci5zZWN0b3JJblJhZCl9KSkscC52aXNpYmxlKXt2YXIgXz1cImluc2lkZVwiPT09cC50aWNrcz8tMToxLHc9KHAubGluZXdpZHRofHwxKS8yO3UuZHJhd1RpY2tzKG4scCx7dmFsczpiLGxheWVyOmlbXCJhbmd1bGFyLWF4aXNcIl0scGF0aDpcIk1cIitfKncrXCIsMGhcIitfKnAudGlja2xlbix0cmFuc0ZuOmZ1bmN0aW9uKHQpe3ZhciBlPWQodCk7cmV0dXJuIGcoZSkrRigtTChlKSl9LGNyaXNwOiExfSksdS5kcmF3R3JpZChuLHAse3ZhbHM6YixsYXllcjppW1wiYW5ndWxhci1ncmlkXCJdLHBhdGg6ZnVuY3Rpb24odCl7dmFyIGU9ZCh0KSxyPU1hdGguY29zKGUpLG49TWF0aC5zaW4oZSk7cmV0dXJuXCJNXCIrW2MrbCpyLGgtbCpuXStcIkxcIitbYythKnIsaC1hKm5dfSx0cmFuc0ZuOm8ubm9vcCxjcmlzcDohMX0pLHUuZHJhd0xhYmVscyhuLHAse3ZhbHM6YixsYXllcjppW1wiYW5ndWxhci1heGlzXCJdLHJlcG9zaXRpb25PblVwZGF0ZTohMCx0cmFuc0ZuOmZ1bmN0aW9uKHQpe3JldHVybiBnKGQodCkpfSxsYWJlbEZuczptfSl9UChpW1wiYW5ndWxhci1saW5lXCJdLnNlbGVjdChcInBhdGhcIiksZi5zaG93bGluZSx7ZDpyLnBhdGhTdWJwbG90KCksdHJhbnNmb3JtOlIoYyxoKX0pLmF0dHIoXCJzdHJva2Utd2lkdGhcIixmLmxpbmV3aWR0aCkuY2FsbChzLnN0cm9rZSxmLmxpbmVjb2xvcil9LE8udXBkYXRlRng9ZnVuY3Rpb24odCxlKXt0aGlzLmdkLl9jb250ZXh0LnN0YXRpY1Bsb3R8fCh0aGlzLnVwZGF0ZUFuZ3VsYXJEcmFnKHQpLHRoaXMudXBkYXRlUmFkaWFsRHJhZyh0LGUsMCksdGhpcy51cGRhdGVSYWRpYWxEcmFnKHQsZSwxKSx0aGlzLnVwZGF0ZU1haW5EcmFnKHQpKX0sTy51cGRhdGVNYWluRHJhZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5nZCxvPWUubGF5ZXJzLHM9dC5fem9vbWxheWVyLGw9VC5NSU5aT09NLGM9VC5PRkZFREdFLHU9ZS5yYWRpdXMsaD1lLmlubmVyUmFkaXVzLGY9ZS5jeCxwPWUuY3ksbT1lLmN4eCxfPWUuY3l5LHc9ZS5zZWN0b3JJblJhZCxrPWUudmFuZ2xlcyxBPWUucmFkaWFsQXhpcyxTPU0uY2xhbXBUaW55LEU9TS5maW5kWFlhdExlbmd0aCxDPU0uZmluZEVuY2xvc2luZ1ZlcnRleEFuZ2xlcyxMPVQuY29ybmVySGFsZldpZHRoLHo9VC5jb3JuZXJMZW4vMixPPWQubWFrZURyYWdnZXIobyxcInBhdGhcIixcIm1haW5kcmFnXCIsXCJjcm9zc2hhaXJcIik7bi5zZWxlY3QoTykuYXR0cihcImRcIixlLnBhdGhTdWJwbG90KCkpLmF0dHIoXCJ0cmFuc2Zvcm1cIixSKGYscCkpO3ZhciBJLEQsUCxGLEIsTixqLFYsVSxxPXtlbGVtZW50Ok8sZ2Q6cixzdWJwbG90OmUuaWQscGxvdGluZm86e2lkOmUuaWQseGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzfSx4YXhlczpbZS54YXhpc10seWF4ZXM6W2UueWF4aXNdfTtmdW5jdGlvbiBIKHQsZSl7cmV0dXJuIE1hdGguc3FydCh0KnQrZSplKX1mdW5jdGlvbiBHKHQsZSl7cmV0dXJuIEgodC1tLGUtXyl9ZnVuY3Rpb24gWSh0LGUpe3JldHVybiBNYXRoLmF0YW4yKF8tZSx0LW0pfWZ1bmN0aW9uIFcodCxlKXtyZXR1cm5bdCpNYXRoLmNvcyhlKSx0Kk1hdGguc2luKC1lKV19ZnVuY3Rpb24gWCh0LHIpe2lmKDA9PT10KXJldHVybiBlLnBhdGhTZWN0b3IoMipMKTt2YXIgbj16L3QsaT1yLW4sYT1yK24sbz1NYXRoLm1heCgwLE1hdGgubWluKHQsdSkpLHM9by1MLGw9bytMO3JldHVyblwiTVwiK1cocyxpKStcIkFcIitbcyxzXStcIiAwLDAsMCBcIitXKHMsYSkrXCJMXCIrVyhsLGEpK1wiQVwiK1tsLGxdK1wiIDAsMCwxIFwiK1cobCxpKStcIlpcIn1mdW5jdGlvbiBaKHQscixuKXtpZigwPT09dClyZXR1cm4gZS5wYXRoU2VjdG9yKDIqTCk7dmFyIGksYSxvPVcodCxyKSxzPVcodCxuKSxsPVMoKG9bMF0rc1swXSkvMiksYz1TKChvWzFdK3NbMV0pLzIpO2lmKGwmJmMpe3ZhciB1PWMvbCxoPS0xL3UsZj1FKEwsdSxsLGMpO2k9RSh6LGgsZlswXVswXSxmWzBdWzFdKSxhPUUoeixoLGZbMV1bMF0sZlsxXVsxXSl9ZWxzZXt2YXIgcCxkO2M/KHA9eixkPUwpOihwPUwsZD16KSxpPVtbbC1wLGMtZF0sW2wrcCxjLWRdXSxhPVtbbC1wLGMrZF0sW2wrcCxjK2RdXX1yZXR1cm5cIk1cIitpLmpvaW4oXCJMXCIpK1wiTFwiK2EucmV2ZXJzZSgpLmpvaW4oXCJMXCIpK1wiWlwifWZ1bmN0aW9uICQodCxlKXtyZXR1cm4gZT1NYXRoLm1heChNYXRoLm1pbihlLHUpLGgpLHQ8Yz90PTA6dS10PGM/dD11OmU8Yz9lPTA6dS1lPGMmJihlPXUpLE1hdGguYWJzKGUtdCk+bD8odDxlPyhQPXQsRj1lKTooUD1lLEY9dCksITApOihQPW51bGwsRj1udWxsLCExKX1mdW5jdGlvbiBKKHQsZSl7dD10fHxCLGU9ZXx8XCJNMCwwWlwiLFYuYXR0cihcImRcIix0KSxVLmF0dHIoXCJkXCIsZSksZC50cmFuc2l0aW9uWm9vbWJveChWLFUsTixqKSxOPSEwfWZ1bmN0aW9uIEsodCxyKXt2YXIgbixpLGE9SSt0LG89RCtyLHM9RyhJLEQpLGw9TWF0aC5taW4oRyhhLG8pLHUpLGM9WShJLEQpOyQocyxsKSYmKG49QitlLnBhdGhTZWN0b3IoRiksUCYmKG4rPWUucGF0aFNlY3RvcihQKSksaT1YKFAsYykrWChGLGMpKSxKKG4saSl9ZnVuY3Rpb24gUSh0LGUscixuKXt2YXIgaT1NLmZpbmRJbnRlcnNlY3Rpb25YWShyLG4scixbdC1tLF8tZV0pO3JldHVybiBIKGlbMF0saVsxXSl9ZnVuY3Rpb24gdHQodCxyKXt2YXIgbixpLGE9SSt0LG89RCtyLHM9WShJLEQpLGw9WShhLG8pLGM9QyhzLGspLGg9QyhsLGspOyQoUShJLEQsY1swXSxjWzFdKSxNYXRoLm1pbihRKGEsbyxoWzBdLGhbMV0pLHUpKSYmKG49QitlLnBhdGhTZWN0b3IoRiksUCYmKG4rPWUucGF0aFNlY3RvcihQKSksaT1bWihQLGNbMF0sY1sxXSksWihGLGNbMF0sY1sxXSldLmpvaW4oXCIgXCIpKSxKKG4saSl9ZnVuY3Rpb24gZXQoKXtpZihkLnJlbW92ZVpvb21ib3gociksbnVsbCE9PVAmJm51bGwhPT1GKXtkLnNob3dEb3VibGVDbGlja05vdGlmaWVyKHIpO3ZhciB0PUEuX3JsLG49KHRbMV0tdFswXSkvKDEtaC91KS91LGk9W3RbMF0rKFAtaCkqbix0WzBdKyhGLWgpKm5dO2EuY2FsbChcIl9ndWlSZWxheW91dFwiLHIsZS5pZCtcIi5yYWRpYWxheGlzLnJhbmdlXCIsaSl9fWZ1bmN0aW9uIHJ0KHQsbil7dmFyIGk9ci5fZnVsbExheW91dC5jbGlja21vZGU7aWYoZC5yZW1vdmVab29tYm94KHIpLDI9PT10KXt2YXIgbz17fTtmb3IodmFyIHMgaW4gZS52aWV3SW5pdGlhbClvW2UuaWQrXCIuXCIrc109ZS52aWV3SW5pdGlhbFtzXTtyLmVtaXQoXCJwbG90bHlfZG91YmxlY2xpY2tcIixudWxsKSxhLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIixyLG8pfWkuaW5kZXhPZihcInNlbGVjdFwiKT4tMSYmMT09PXQmJngobixyLFtlLnhheGlzXSxbZS55YXhpc10sZS5pZCxxKSxpLmluZGV4T2YoXCJldmVudFwiKT4tMSYmdi5jbGljayhyLG4sZS5pZCl9cS5wcmVwRm49ZnVuY3Rpb24odCxuLGEpe3ZhciBvPXIuX2Z1bGxMYXlvdXQuZHJhZ21vZGUsbD1PLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKEk9bi1sLmxlZnQsRD1hLWwudG9wLGspe3ZhciBjPU0uZmluZFBvbHlnb25PZmZzZXQodSx3WzBdLHdbMV0sayk7SSs9bStjWzBdLEQrPV8rY1sxXX1zd2l0Y2gobyl7Y2FzZVwiem9vbVwiOnEubW92ZUZuPWs/dHQ6SyxxLmNsaWNrRm49cnQscS5kb25lRm49ZXQsZnVuY3Rpb24oKXtQPW51bGwsRj1udWxsLEI9ZS5wYXRoU3VicGxvdCgpLE49ITE7dmFyIHQ9ci5fZnVsbExheW91dFtlLmlkXTtqPWkodC5iZ2NvbG9yKS5nZXRMdW1pbmFuY2UoKSwoVj1kLm1ha2Vab29tYm94KHMsaixmLHAsQikpLmF0dHIoXCJmaWxsLXJ1bGVcIixcImV2ZW5vZGRcIiksVT1kLm1ha2VDb3JuZXJzKHMsZixwKSxiKHIpfSgpO2JyZWFrO2Nhc2VcInNlbGVjdFwiOmNhc2VcImxhc3NvXCI6eSh0LG4sYSxxLG8pfX0sTy5vbm1vdXNlbW92ZT1mdW5jdGlvbih0KXt2LmhvdmVyKHIsdCxlLmlkKSxyLl9mdWxsTGF5b3V0Ll9sYXN0aG92ZXI9TyxyLl9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9ZS5pZH0sTy5vbm1vdXNlb3V0PWZ1bmN0aW9uKHQpe3IuX2RyYWdnaW5nfHxnLnVuaG92ZXIocix0KX0sZy5pbml0KHEpfSxPLnVwZGF0ZVJhZGlhbERyYWc9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMscz1pLmdkLGw9aS5sYXllcnMsYz1pLnJhZGl1cyx1PWkuaW5uZXJSYWRpdXMsaD1pLmN4LGY9aS5jeSxwPWkucmFkaWFsQXhpcyx2PVQucmFkaWFsRHJhZ0JveFNpemUsbT12LzI7aWYocC52aXNpYmxlKXt2YXIgeSx4LF8sQT1DKGkucmFkaWFsQXhpc0FuZ2xlKSxNPXAuX3JsLFM9TVswXSxFPU1bMV0sej1NW3JdLE89Ljc1KihNWzFdLU1bMF0pLygxLWUuaG9sZSkvYztyPyh5PWgrKGMrbSkqTWF0aC5jb3MoQSkseD1mLShjK20pKk1hdGguc2luKEEpLF89XCJyYWRpYWxkcmFnXCIpOih5PWgrKHUtbSkqTWF0aC5jb3MoQSkseD1mLSh1LW0pKk1hdGguc2luKEEpLF89XCJyYWRpYWxkcmFnLWlubmVyXCIpO3ZhciBJLEIsTixqPWQubWFrZVJlY3REcmFnZ2VyKGwsXyxcImNyb3NzaGFpclwiLC1tLC1tLHYsdiksVj17ZWxlbWVudDpqLGdkOnN9O1Aobi5zZWxlY3QoaikscC52aXNpYmxlJiZ1PGMse3RyYW5zZm9ybTpSKHkseCl9KSxWLnByZXBGbj1mdW5jdGlvbigpe0k9bnVsbCxCPW51bGwsTj1udWxsLFYubW92ZUZuPVUsVi5kb25lRm49cSxiKHMpfSxWLmNsYW1wRm49ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5zcXJ0KHQqdCtlKmUpPFQuTUlORFJBRyYmKHQ9MCxlPTApLFt0LGVdfSxnLmluaXQoVil9ZnVuY3Rpb24gVSh0LGUpe2lmKEkpSSh0LGUpO2Vsc2V7dmFyIHI9W3QsLWVdLG49W01hdGguY29zKEEpLE1hdGguc2luKEEpXSxpPU1hdGguYWJzKG8uZG90KHIsbikvTWF0aC5zcXJ0KG8uZG90KHIscikpKTtpc05hTihpKXx8KEk9aTwuNT9IOkcpfX1mdW5jdGlvbiBxKCl7bnVsbCE9PUI/YS5jYWxsKFwiX2d1aVJlbGF5b3V0XCIscyxpLmlkK1wiLnJhZGlhbGF4aXMuYW5nbGVcIixCKTpudWxsIT09TiYmYS5jYWxsKFwiX2d1aVJlbGF5b3V0XCIscyxpLmlkK1wiLnJhZGlhbGF4aXMucmFuZ2VbXCIrcitcIl1cIixOKX1mdW5jdGlvbiBIKHQsZSl7aWYoMCE9PXIpe3ZhciBuPXkrdCxhPXgrZTtCPU1hdGguYXRhbjIoZi1hLG4taCksaS52YW5nbGVzJiYoQj1EKEIsaS52YW5nbGVzKSksQj1MKEIpO3ZhciBvPVIoaCxmKStGKC1CKTtsW1wicmFkaWFsLWF4aXNcIl0uYXR0cihcInRyYW5zZm9ybVwiLG8pLGxbXCJyYWRpYWwtbGluZVwiXS5zZWxlY3QoXCJsaW5lXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIixvKTt2YXIgcz1pLmdkLl9mdWxsTGF5b3V0LGM9c1tpLmlkXTtpLnVwZGF0ZVJhZGlhbEF4aXNUaXRsZShzLGMsQil9fWZ1bmN0aW9uIEcodCxlKXt2YXIgbj1vLmRvdChbdCwtZV0sW01hdGguY29zKEEpLE1hdGguc2luKEEpXSk7aWYoTj16LU8qbixPPjA9PShyP04+UzpOPEUpKXt2YXIgbD1zLl9mdWxsTGF5b3V0LGM9bFtpLmlkXTtwLnJhbmdlW3JdPU4scC5fcmxbcl09TixpLnVwZGF0ZVJhZGlhbEF4aXMobCxjKSxpLnhheGlzLnNldFJhbmdlKCksaS54YXhpcy5zZXRTY2FsZSgpLGkueWF4aXMuc2V0UmFuZ2UoKSxpLnlheGlzLnNldFNjYWxlKCk7dmFyIHU9ITE7Zm9yKHZhciBoIGluIGkudHJhY2VIYXNoKXt2YXIgZj1pLnRyYWNlSGFzaFtoXSxkPW8uZmlsdGVyVmlzaWJsZShmKTtmWzBdWzBdLnRyYWNlLl9tb2R1bGUucGxvdChzLGksZCxjKSxhLnRyYWNlSXMoaCxcImdsXCIpJiZkLmxlbmd0aCYmKHU9ITApfXUmJih3KHMpLGsocykpfWVsc2UgTj1udWxsfX0sTy51cGRhdGVBbmd1bGFyRHJhZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5nZCxpPWUubGF5ZXJzLHM9ZS5yYWRpdXMsYz1lLmFuZ3VsYXJBeGlzLHU9ZS5jeCxoPWUuY3ksZj1lLmN4eCxwPWUuY3l5LHY9VC5hbmd1bGFyRHJhZ0JveFNpemUsbT1kLm1ha2VEcmFnZ2VyKGksXCJwYXRoXCIsXCJhbmd1bGFyZHJhZ1wiLFwibW92ZVwiKSx5PXtlbGVtZW50Om0sZ2Q6cn07ZnVuY3Rpb24geCh0LGUpe3JldHVybiBNYXRoLmF0YW4yKHArdi1lLHQtZi12KX1uLnNlbGVjdChtKS5hdHRyKFwiZFwiLGUucGF0aEFubnVsdXMocyxzK3YpKS5hdHRyKFwidHJhbnNmb3JtXCIsUih1LGgpKS5jYWxsKF8sXCJtb3ZlXCIpO3ZhciBBLE0sUyxFLEMseixPPWkuZnJvbnRwbG90LnNlbGVjdChcIi5zY2F0dGVybGF5ZXJcIikuc2VsZWN0QWxsKFwiLnRyYWNlXCIpLEk9Ty5zZWxlY3RBbGwoXCIucG9pbnRcIiksRD1PLnNlbGVjdEFsbChcIi50ZXh0cG9pbnRcIik7ZnVuY3Rpb24gUCh0LHMpe3ZhciBkPWUuZ2QuX2Z1bGxMYXlvdXQsZz1kW2UuaWRdLHY9eChBK3QsTStzKSxtPUwodi16KTtpZihFPVMrbSxpLmZyb250cGxvdC5hdHRyKFwidHJhbnNmb3JtXCIsUihlLnhPZmZzZXQyLGUueU9mZnNldDIpK0YoWy1tLGYscF0pKSxlLnZhbmdsZXMpe0M9ZS5yYWRpYWxBeGlzQW5nbGUrbTt2YXIgeT1SKHUsaCkrRigtbSksYj1SKHUsaCkrRigtQyk7aS5iZy5hdHRyKFwidHJhbnNmb3JtXCIseSksaVtcInJhZGlhbC1ncmlkXCJdLmF0dHIoXCJ0cmFuc2Zvcm1cIix5KSxpW1wicmFkaWFsLWF4aXNcIl0uYXR0cihcInRyYW5zZm9ybVwiLGIpLGlbXCJyYWRpYWwtbGluZVwiXS5zZWxlY3QoXCJsaW5lXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIixiKSxlLnVwZGF0ZVJhZGlhbEF4aXNUaXRsZShkLGcsQyl9ZWxzZSBlLmNsaXBQYXRocy5mb3JUcmFjZXMuc2VsZWN0KFwicGF0aFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsUihmLHApK0YobSkpO0kuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9bC5nZXRUcmFuc2xhdGUodCk7dC5hdHRyKFwidHJhbnNmb3JtXCIsUihlLngsZS55KStGKFttXSkpfSksRC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT10LnNlbGVjdChcInRleHRcIikscj1sLmdldFRyYW5zbGF0ZSh0KTt0LmF0dHIoXCJ0cmFuc2Zvcm1cIixGKFttLGUuYXR0cihcInhcIiksZS5hdHRyKFwieVwiKV0pK1Ioci54LHIueSkpfSksYy5yb3RhdGlvbj1vLm1vZEhhbGYoRSwzNjApLGUudXBkYXRlQW5ndWxhckF4aXMoZCxnKSxlLl9oYXNDbGlwT25BeGlzRmFsc2UmJiFvLmlzRnVsbENpcmNsZShlLnNlY3RvckluUmFkKSYmTy5jYWxsKGwuaGlkZU91dHNpZGVSYW5nZVBvaW50cyxlKTt2YXIgXz0hMTtmb3IodmFyIFQgaW4gZS50cmFjZUhhc2gpaWYoYS50cmFjZUlzKFQsXCJnbFwiKSl7dmFyIFA9ZS50cmFjZUhhc2hbVF0sQj1vLmZpbHRlclZpc2libGUoUCk7UFswXVswXS50cmFjZS5fbW9kdWxlLnBsb3QocixlLEIsZyksQi5sZW5ndGgmJihfPSEwKX1fJiYodyhyKSxrKHIpKX1mdW5jdGlvbiBCKCl7RC5zZWxlY3QoXCJ0ZXh0XCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIixudWxsKTt2YXIgdD17fTt0W2UuaWQrXCIuYW5ndWxhcmF4aXMucm90YXRpb25cIl09RSxlLnZhbmdsZXMmJih0W2UuaWQrXCIucmFkaWFsYXhpcy5hbmdsZVwiXT1DKSxhLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIixyLHQpfXkucHJlcEZuPWZ1bmN0aW9uKG4saSxhKXt2YXIgbz10W2UuaWRdO1M9by5hbmd1bGFyYXhpcy5yb3RhdGlvbjt2YXIgcz1tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO0E9aS1zLmxlZnQsTT1hLXMudG9wLHo9eChBLE0pLHkubW92ZUZuPVAseS5kb25lRm49QixiKHIpfSxlLnZhbmdsZXMmJiFvLmlzRnVsbENpcmNsZShlLnNlY3RvckluUmFkKSYmKHkucHJlcEZuPW8ubm9vcCxfKG4uc2VsZWN0KG0pLG51bGwpKSxnLmluaXQoeSl9LE8uaXNQdEluc2lkZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNlY3RvckluUmFkLHI9dGhpcy52YW5nbGVzLG49dGhpcy5hbmd1bGFyQXhpcy5jMmcodC50aGV0YSksaT10aGlzLnJhZGlhbEF4aXMsYT1pLmMybCh0LnIpLHM9aS5fcmw7cmV0dXJuKHI/TS5pc1B0SW5zaWRlUG9seWdvbjpvLmlzUHRJbnNpZGVTZWN0b3IpKGEsbixzLGUscil9LE8ucGF0aEFyYz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNlY3RvckluUmFkLHI9dGhpcy52YW5nbGVzO3JldHVybihyP00ucGF0aFBvbHlnb246by5wYXRoQXJjKSh0LGVbMF0sZVsxXSxyKX0sTy5wYXRoU2VjdG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2VjdG9ySW5SYWQscj10aGlzLnZhbmdsZXM7cmV0dXJuKHI/TS5wYXRoUG9seWdvbjpvLnBhdGhTZWN0b3IpKHQsZVswXSxlWzFdLHIpfSxPLnBhdGhBbm51bHVzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5zZWN0b3JJblJhZCxuPXRoaXMudmFuZ2xlcztyZXR1cm4obj9NLnBhdGhQb2x5Z29uQW5udWx1czpvLnBhdGhBbm51bHVzKSh0LGUsclswXSxyWzFdLG4pfSxPLnBhdGhTdWJwbG90PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5pbm5lclJhZGl1cyxlPXRoaXMucmFkaXVzO3JldHVybiB0P3RoaXMucGF0aEFubnVsdXModCxlKTp0aGlzLnBhdGhTZWN0b3IoZSl9LE8uZmlsbFZpZXdJbml0aWFsS2V5PWZ1bmN0aW9uKHQsZSl7dCBpbiB0aGlzLnZpZXdJbml0aWFsfHwodGhpcy52aWV3SW5pdGlhbFt0XT1lKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50XCI6NTk2LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzXCI6NjY2LFwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiOjY3MyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlc1wiOjY4NixcIi4uLy4uL2xpYi9zZXRjdXJzb3JcIjo3MjEsXCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lc1wiOjc0MCxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9jYXJ0ZXNpYW4vYXV0b3JhbmdlXCI6NzQ4LFwiLi4vY2FydGVzaWFuL2RyYWdib3hcIjo3NTcsXCIuLi9jYXJ0ZXNpYW4vc2VsZWN0XCI6NzY2LFwiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0XCI6NzY3LFwiLi4vcGxvdHNcIjo4MTAsXCIuL2NvbnN0YW50c1wiOjgxMSxcIi4vaGVscGVyc1wiOjgxMixcIi4vc2V0X2NvbnZlcnRcIjo4MjMsZDM6MTU1LHRpbnljb2xvcjI6NTIyfV0sODIzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnRcIiksYT1uLmRlZzJyYWQsbz1uLnJhZDJkZWc7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtzd2l0Y2goaSh0LHIpLHQuX2lkKXtjYXNlXCJ4XCI6Y2FzZVwicmFkaWFsYXhpc1wiOiFmdW5jdGlvbih0LGUpe3ZhciByPWUuX3N1YnBsb3Q7dC5zZXRHZW9tZXRyeT1mdW5jdGlvbigpe3ZhciBlPXQuX3JsWzBdLG49dC5fcmxbMV0saT1yLmlubmVyUmFkaXVzLGE9KHIucmFkaXVzLWkpLyhuLWUpLG89aS9hLHM9ZT5uP2Z1bmN0aW9uKHQpe3JldHVybiB0PD0wfTpmdW5jdGlvbih0KXtyZXR1cm4gdD49MH07dC5jMmc9ZnVuY3Rpb24ocil7dmFyIG49dC5jMmwociktZTtyZXR1cm4ocyhuKT9uOjApK299LHQuZzJjPWZ1bmN0aW9uKHIpe3JldHVybiB0LmwyYyhyK2Utbyl9LHQuZzJwPWZ1bmN0aW9uKHQpe3JldHVybiB0KmF9LHQuYzJwPWZ1bmN0aW9uKGUpe3JldHVybiB0LmcycCh0LmMyZyhlKSl9fX0odCxlKTticmVhaztjYXNlXCJhbmd1bGFyYXhpc1wiOiFmdW5jdGlvbih0LGUpe3ZhciByPXQudHlwZTtpZihcImxpbmVhclwiPT09cil7dmFyIGk9dC5kMmMscz10LmMyZDt0LmQyYz1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVyblwiZGVncmVlc1wiPT09ZT9hKHQpOnR9KGkodCksZSl9LHQuYzJkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHMoZnVuY3Rpb24odCxlKXtyZXR1cm5cImRlZ3JlZXNcIj09PWU/byh0KTp0fSh0LGUpKX19dC5tYWtlQ2FsY2RhdGE9ZnVuY3Rpb24oZSxpKXt2YXIgYSxvLHM9ZVtpXSxsPWUuX2xlbmd0aCxjPWZ1bmN0aW9uKHIpe3JldHVybiB0LmQyYyhyLGUudGhldGF1bml0KX07aWYocyl7aWYobi5pc1R5cGVkQXJyYXkocykmJlwibGluZWFyXCI9PT1yKXtpZihsPT09cy5sZW5ndGgpcmV0dXJuIHM7aWYocy5zdWJhcnJheSlyZXR1cm4gcy5zdWJhcnJheSgwLGwpfWZvcihhPW5ldyBBcnJheShsKSxvPTA7bzxsO28rKylhW29dPWMoc1tvXSl9ZWxzZXt2YXIgdT1pK1wiMFwiLGg9XCJkXCIraSxmPXUgaW4gZT9jKGVbdV0pOjAscD1lW2hdP2MoZVtoXSk6KHQucGVyaW9kfHwyKk1hdGguUEkpL2w7Zm9yKGE9bmV3IEFycmF5KGwpLG89MDtvPGw7bysrKWFbb109ZitvKnB9cmV0dXJuIGF9LHQuc2V0R2VvbWV0cnk9ZnVuY3Rpb24oKXt2YXIgaSxzLGwsYyx1PWUuc2VjdG9yLGg9dS5tYXAoYSksZj17Y2xvY2t3aXNlOi0xLGNvdW50ZXJjbG9ja3dpc2U6MX1bdC5kaXJlY3Rpb25dLHA9YSh0LnJvdGF0aW9uKSxkPWZ1bmN0aW9uKHQpe3JldHVybiBmKnQrcH0sZz1mdW5jdGlvbih0KXtyZXR1cm4odC1wKS9mfTtzd2l0Y2gocil7Y2FzZVwibGluZWFyXCI6cz1pPW4uaWRlbnRpdHksYz1hLGw9byx0LnJhbmdlPW4uaXNGdWxsQ2lyY2xlKGgpP1t1WzBdLHVbMF0rMzYwXTpoLm1hcChnKS5tYXAobyk7YnJlYWs7Y2FzZVwiY2F0ZWdvcnlcIjp2YXIgdj10Ll9jYXRlZ29yaWVzLmxlbmd0aCxtPXQucGVyaW9kP01hdGgubWF4KHQucGVyaW9kLHYpOnY7cz1jPWZ1bmN0aW9uKHQpe3JldHVybiAyKnQqTWF0aC5QSS9tfSxpPWw9ZnVuY3Rpb24odCl7cmV0dXJuIHQqbS9NYXRoLlBJLzJ9LHQucmFuZ2U9WzAsbV19dC5jMmc9ZnVuY3Rpb24odCl7cmV0dXJuIGQocyh0KSl9LHQuZzJjPWZ1bmN0aW9uKHQpe3JldHVybiBpKGcodCkpfSx0LnQyZz1mdW5jdGlvbih0KXtyZXR1cm4gZChjKHQpKX0sdC5nMnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGwoZyh0KSl9fX0odCxlKX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnRcIjo3Njd9XSw4MjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vbGliXCIpLGk9dChcIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIiksYT10KFwiLi9kb21haW5cIikuZGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzLGwsYz1vLnR5cGUsdT1vLmF0dHJpYnV0ZXMsaD1vLmhhbmRsZURlZmF1bHRzLGY9by5wYXJ0aXRpb258fFwieFwiLHA9ZS5fc3VicGxvdHNbY10sZD1wLmxlbmd0aCxnPWQmJnBbMF0ucmVwbGFjZSgvXFxkKyQvLFwiXCIpO2Z1bmN0aW9uIHYodCxlKXtyZXR1cm4gbi5jb2VyY2UocyxsLHUsdCxlKX1mb3IodmFyIG09MDttPGQ7bSsrKXt2YXIgeT1wW21dO3M9dFt5XT90W3ldOnRbeV09e30sbD1pLm5ld0NvbnRhaW5lcihlLHksZyksdihcInVpcmV2aXNpb25cIixlLnVpcmV2aXNpb24pO3ZhciB4PXt9O3hbZl09W20vZCwobSsxKS9kXSxhKGwsZSx2LHgpLG8uaWQ9eSxoKHMsbCx2LG8pfX19LHtcIi4uL2xpYlwiOjcwMSxcIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuL2RvbWFpblwiOjc3NH1dLDgyNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL3Rlcm5hcnlcIiksaT10KFwiLi4vLi4vcGxvdHMvZ2V0X2RhdGFcIikuZ2V0U3VicGxvdENhbGNEYXRhLGE9dChcIi4uLy4uL2xpYlwiKS5jb3VudGVyUmVnZXg7ci5uYW1lPVwidGVybmFyeVwiO3ZhciBvPXIuYXR0cj1cInN1YnBsb3RcIjtyLmlkUm9vdD1cInRlcm5hcnlcIixyLmlkUmVnZXg9ci5hdHRyUmVnZXg9YShcInRlcm5hcnlcIiksKHIuYXR0cmlidXRlcz17fSlbb109e3ZhbFR5cGU6XCJzdWJwbG90aWRcIixkZmx0OlwidGVybmFyeVwiLGVkaXRUeXBlOlwiY2FsY1wifSxyLmxheW91dEF0dHJpYnV0ZXM9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksci5zdXBwbHlMYXlvdXREZWZhdWx0cz10KFwiLi9sYXlvdXRfZGVmYXVsdHNcIiksci5wbG90PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxhPWUuX3N1YnBsb3RzLnRlcm5hcnksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dLGw9aShyLFwidGVybmFyeVwiLHMpLGM9ZVtzXS5fc3VicGxvdDtjfHwoYz1uZXcgbih7aWQ6cyxncmFwaERpdjp0LGNvbnRhaW5lcjplLl90ZXJuYXJ5bGF5ZXIubm9kZSgpfSxlKSxlW3NdLl9zdWJwbG90PWMpLGMucGxvdChsLGUsdC5fcHJvbWlzZXMpfX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9bi5fc3VicGxvdHMudGVybmFyeXx8W10sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdLHM9bltvXS5fc3VicGxvdDshZVtvXSYmcyYmKHMucGxvdENvbnRhaW5lci5yZW1vdmUoKSxzLmNsaXBEZWYucmVtb3ZlKCkscy5jbGlwRGVmUmVsYXRpdmUucmVtb3ZlKCkscy5sYXllcnNbXCJhLXRpdGxlXCJdLnJlbW92ZSgpLHMubGF5ZXJzW1wiYi10aXRsZVwiXS5yZW1vdmUoKSxzLmxheWVyc1tcImMtdGl0bGVcIl0ucmVtb3ZlKCkpfX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCI6Nzg0LFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjgyNixcIi4vbGF5b3V0X2RlZmF1bHRzXCI6ODI3LFwiLi90ZXJuYXJ5XCI6ODI4fV0sODI2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi9kb21haW5cIikuYXR0cmlidXRlcyxhPXQoXCIuLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbCxzPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsbD17dGl0bGU6YS50aXRsZSxjb2xvcjphLmNvbG9yLHRpY2ttb2RlOmEudGlja21vZGUsbnRpY2tzOnMoe30sYS5udGlja3Mse2RmbHQ6NixtaW46MX0pLHRpY2swOmEudGljazAsZHRpY2s6YS5kdGljayx0aWNrdmFsczphLnRpY2t2YWxzLHRpY2t0ZXh0OmEudGlja3RleHQsdGlja3M6YS50aWNrcyx0aWNrbGVuOmEudGlja2xlbix0aWNrd2lkdGg6YS50aWNrd2lkdGgsdGlja2NvbG9yOmEudGlja2NvbG9yLHNob3d0aWNrbGFiZWxzOmEuc2hvd3RpY2tsYWJlbHMsc2hvd3RpY2twcmVmaXg6YS5zaG93dGlja3ByZWZpeCx0aWNrcHJlZml4OmEudGlja3ByZWZpeCxzaG93dGlja3N1ZmZpeDphLnNob3d0aWNrc3VmZml4LHRpY2tzdWZmaXg6YS50aWNrc3VmZml4LHNob3dleHBvbmVudDphLnNob3dleHBvbmVudCxleHBvbmVudGZvcm1hdDphLmV4cG9uZW50Zm9ybWF0LHNlcGFyYXRldGhvdXNhbmRzOmEuc2VwYXJhdGV0aG91c2FuZHMsdGlja2ZvbnQ6YS50aWNrZm9udCx0aWNrYW5nbGU6YS50aWNrYW5nbGUsdGlja2Zvcm1hdDphLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOmEudGlja2Zvcm1hdHN0b3BzLGhvdmVyZm9ybWF0OmEuaG92ZXJmb3JtYXQsc2hvd2xpbmU6cyh7fSxhLnNob3dsaW5lLHtkZmx0OiEwfSksbGluZWNvbG9yOmEubGluZWNvbG9yLGxpbmV3aWR0aDphLmxpbmV3aWR0aCxzaG93Z3JpZDpzKHt9LGEuc2hvd2dyaWQse2RmbHQ6ITB9KSxncmlkY29sb3I6YS5ncmlkY29sb3IsZ3JpZHdpZHRoOmEuZ3JpZHdpZHRoLGxheWVyOmEubGF5ZXIsbWluOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLG1pbjowfSxfZGVwcmVjYXRlZDp7dGl0bGU6YS5fZGVwcmVjYXRlZC50aXRsZSx0aXRsZWZvbnQ6YS5fZGVwcmVjYXRlZC50aXRsZWZvbnR9fSxjPWUuZXhwb3J0cz1vKHtkb21haW46aSh7bmFtZTpcInRlcm5hcnlcIn0pLGJnY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6bi5iYWNrZ3JvdW5kfSxzdW06e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjEsbWluOjB9LGFheGlzOmwsYmF4aXM6bCxjYXhpczpsfSxcInBsb3RcIixcImZyb20tcm9vdFwiKTtjLnVpcmV2aXNpb249e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcIm5vbmVcIn0sYy5hYXhpcy51aXJldmlzaW9uPWMuYmF4aXMudWlyZXZpc2lvbj1jLmNheGlzLnVpcmV2aXNpb249e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcIm5vbmVcIn19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiOjU3NyxcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzXCI6NzYxLFwiLi4vZG9tYWluXCI6Nzc0fV0sODI3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksaT10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKSxhPXQoXCIuLi8uLi9saWJcIiksbz10KFwiLi4vc3VicGxvdF9kZWZhdWx0c1wiKSxzPXQoXCIuLi9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0c1wiKSxsPXQoXCIuLi9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzXCIpLGM9dChcIi4uL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzXCIpLHU9dChcIi4uL2NhcnRlc2lhbi9saW5lX2dyaWRfZGVmYXVsdHNcIiksaD10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxmPVtcImFheGlzXCIsXCJiYXhpc1wiLFwiY2F4aXNcIl07ZnVuY3Rpb24gcCh0LGUscixhKXt2YXIgbyxzLGwsYz1yKFwiYmdjb2xvclwiKSx1PXIoXCJzdW1cIik7YS5iZ0NvbG9yPW4uY29tYmluZShjLGEucGFwZXJfYmdjb2xvcik7Zm9yKHZhciBoPTA7aDxmLmxlbmd0aDtoKyspcz10W289ZltoXV18fHt9LChsPWkubmV3Q29udGFpbmVyKGUsbykpLl9uYW1lPW8sZChzLGwsYSxlKTt2YXIgcD1lLmFheGlzLGc9ZS5iYXhpcyx2PWUuY2F4aXM7cC5taW4rZy5taW4rdi5taW4+PXUmJihwLm1pbj0wLGcubWluPTAsdi5taW49MCx0LmFheGlzJiZkZWxldGUgdC5hYXhpcy5taW4sdC5iYXhpcyYmZGVsZXRlIHQuYmF4aXMubWluLHQuY2F4aXMmJmRlbGV0ZSB0LmNheGlzLm1pbil9ZnVuY3Rpb24gZCh0LGUscixuKXt2YXIgaT1oW2UuX25hbWVdO2Z1bmN0aW9uIG8ocixuKXtyZXR1cm4gYS5jb2VyY2UodCxlLGkscixuKX1vKFwidWlyZXZpc2lvblwiLG4udWlyZXZpc2lvbiksZS50eXBlPVwibGluZWFyXCI7dmFyIGY9byhcImNvbG9yXCIpLHA9ZiE9PWkuY29sb3IuZGZsdD9mOnIuZm9udC5jb2xvcixkPWUuX25hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCksZz1cIkNvbXBvbmVudCBcIitkLHY9byhcInRpdGxlLnRleHRcIixnKTtlLl9ob3ZlcnRpdGxlPXY9PT1nP3Y6ZCxhLmNvZXJjZUZvbnQobyxcInRpdGxlLmZvbnRcIix7ZmFtaWx5OnIuZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKDEuMipyLmZvbnQuc2l6ZSksY29sb3I6cH0pLG8oXCJtaW5cIiksYyh0LGUsbyxcImxpbmVhclwiKSxzKHQsZSxvLFwibGluZWFyXCIse30pLGwodCxlLG8se291dGVyVGlja3M6ITB9KSxvKFwic2hvd3RpY2tsYWJlbHNcIikmJihhLmNvZXJjZUZvbnQobyxcInRpY2tmb250XCIse2ZhbWlseTpyLmZvbnQuZmFtaWx5LHNpemU6ci5mb250LnNpemUsY29sb3I6cH0pLG8oXCJ0aWNrYW5nbGVcIiksbyhcInRpY2tmb3JtYXRcIikpLHUodCxlLG8se2RmbHRDb2xvcjpmLGJnQ29sb3I6ci5iZ0NvbG9yLGJsZW5kOjYwLHNob3dMaW5lOiEwLHNob3dHcmlkOiEwLG5vWmVyb0xpbmU6ITAsYXR0cmlidXRlczppfSksbyhcImhvdmVyZm9ybWF0XCIpLG8oXCJsYXllclwiKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe28odCxlLHIse3R5cGU6XCJ0ZXJuYXJ5XCIsYXR0cmlidXRlczpoLGhhbmRsZURlZmF1bHRzOnAsZm9udDplLmZvbnQscGFwZXJfYmdjb2xvcjplLnBhcGVyX2JnY29sb3J9KX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vY2FydGVzaWFuL2xpbmVfZ3JpZF9kZWZhdWx0c1wiOjc2MyxcIi4uL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzXCI6NzY4LFwiLi4vY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0c1wiOjc2OSxcIi4uL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzXCI6NzcwLFwiLi4vc3VicGxvdF9kZWZhdWx0c1wiOjgyNCxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo4MjZ9XSw4Mjg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwidGlueWNvbG9yMlwiKSxhPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxvPXQoXCIuLi8uLi9saWJcIikscz1vLl8sbD10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxjPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksdT10KFwiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0XCIpLGg9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxmPXQoXCIuLi9wbG90c1wiKSxwPXQoXCIuLi9jYXJ0ZXNpYW4vYXhlc1wiKSxkPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50XCIpLGc9dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIiksdj10KFwiLi4vLi4vY29tcG9uZW50cy90aXRsZXNcIiksbT10KFwiLi4vY2FydGVzaWFuL3NlbGVjdFwiKS5wcmVwU2VsZWN0LHk9dChcIi4uL2NhcnRlc2lhbi9zZWxlY3RcIikuc2VsZWN0T25DbGljayx4PXQoXCIuLi9jYXJ0ZXNpYW4vc2VsZWN0XCIpLmNsZWFyU2VsZWN0LGI9dChcIi4uL2NhcnRlc2lhbi9jb25zdGFudHNcIik7ZnVuY3Rpb24gXyh0LGUpe3RoaXMuaWQ9dC5pZCx0aGlzLmdyYXBoRGl2PXQuZ3JhcGhEaXYsdGhpcy5pbml0KGUpLHRoaXMubWFrZUZyYW1ld29yayhlKSx0aGlzLmFUaWNrTGF5b3V0PW51bGwsdGhpcy5iVGlja0xheW91dD1udWxsLHRoaXMuY1RpY2tMYXlvdXQ9bnVsbH1lLmV4cG9ydHM9Xzt2YXIgdz1fLnByb3RvdHlwZTt3LmluaXQ9ZnVuY3Rpb24odCl7dGhpcy5jb250YWluZXI9dC5fdGVybmFyeWxheWVyLHRoaXMuZGVmcz10Ll9kZWZzLHRoaXMubGF5b3V0SWQ9dC5fdWlkLHRoaXMudHJhY2VIYXNoPXt9LHRoaXMubGF5ZXJzPXt9fSx3LnBsb3Q9ZnVuY3Rpb24odCxlKXt2YXIgcj1lW3RoaXMuaWRdLG49ZS5fc2l6ZTt0aGlzLl9oYXNDbGlwT25BeGlzRmFsc2U9ITE7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspe2lmKCExPT09dFtpXVswXS50cmFjZS5jbGlwb25heGlzKXt0aGlzLl9oYXNDbGlwT25BeGlzRmFsc2U9ITA7YnJlYWt9fXRoaXMudXBkYXRlTGF5ZXJzKHIpLHRoaXMuYWRqdXN0TGF5b3V0KHIsbiksZi5nZW5lcmFsVXBkYXRlUGVyVHJhY2VNb2R1bGUodGhpcy5ncmFwaERpdix0aGlzLHQsciksdGhpcy5sYXllcnMucGxvdGJnLnNlbGVjdChcInBhdGhcIikuY2FsbChsLmZpbGwsci5iZ2NvbG9yKX0sdy5tYWtlRnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ3JhcGhEaXYscj10W3RoaXMuaWRdLG49dGhpcy5jbGlwSWQ9XCJjbGlwXCIrdGhpcy5sYXlvdXRJZCt0aGlzLmlkLGk9dGhpcy5jbGlwSWRSZWxhdGl2ZT1cImNsaXAtcmVsYXRpdmVcIit0aGlzLmxheW91dElkK3RoaXMuaWQ7dGhpcy5jbGlwRGVmPW8uZW5zdXJlU2luZ2xlQnlJZCh0Ll9jbGlwcyxcImNsaXBQYXRoXCIsbixmdW5jdGlvbih0KXt0LmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIixcIk0wLDBaXCIpfSksdGhpcy5jbGlwRGVmUmVsYXRpdmU9by5lbnN1cmVTaW5nbGVCeUlkKHQuX2NsaXBzLFwiY2xpcFBhdGhcIixpLGZ1bmN0aW9uKHQpe3QuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLFwiTTAsMFpcIil9KSx0aGlzLnBsb3RDb250YWluZXI9by5lbnN1cmVTaW5nbGUodGhpcy5jb250YWluZXIsXCJnXCIsdGhpcy5pZCksdGhpcy51cGRhdGVMYXllcnMociksYy5zZXRDbGlwVXJsKHRoaXMubGF5ZXJzLmJhY2twbG90LG4sZSksYy5zZXRDbGlwVXJsKHRoaXMubGF5ZXJzLmdyaWRzLG4sZSl9LHcudXBkYXRlTGF5ZXJzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGF5ZXJzLHI9W1wiZHJhZ2xheWVyXCIsXCJwbG90YmdcIixcImJhY2twbG90XCIsXCJncmlkc1wiXTtcImJlbG93IHRyYWNlc1wiPT09dC5hYXhpcy5sYXllciYmci5wdXNoKFwiYWF4aXNcIixcImFsaW5lXCIpLFwiYmVsb3cgdHJhY2VzXCI9PT10LmJheGlzLmxheWVyJiZyLnB1c2goXCJiYXhpc1wiLFwiYmxpbmVcIiksXCJiZWxvdyB0cmFjZXNcIj09PXQuY2F4aXMubGF5ZXImJnIucHVzaChcImNheGlzXCIsXCJjbGluZVwiKSxyLnB1c2goXCJmcm9udHBsb3RcIiksXCJhYm92ZSB0cmFjZXNcIj09PXQuYWF4aXMubGF5ZXImJnIucHVzaChcImFheGlzXCIsXCJhbGluZVwiKSxcImFib3ZlIHRyYWNlc1wiPT09dC5iYXhpcy5sYXllciYmci5wdXNoKFwiYmF4aXNcIixcImJsaW5lXCIpLFwiYWJvdmUgdHJhY2VzXCI9PT10LmNheGlzLmxheWVyJiZyLnB1c2goXCJjYXhpc1wiLFwiY2xpbmVcIik7dmFyIGk9dGhpcy5wbG90Q29udGFpbmVyLnNlbGVjdEFsbChcImcudG9wbGV2ZWxcIikuZGF0YShyLFN0cmluZyksYT1bXCJhZ3JpZFwiLFwiYmdyaWRcIixcImNncmlkXCJdO2kuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLGZ1bmN0aW9uKHQpe3JldHVyblwidG9wbGV2ZWwgXCIrdH0pLmVhY2goZnVuY3Rpb24odCl7dmFyIHI9bi5zZWxlY3QodGhpcyk7ZVt0XT1yLFwiZnJvbnRwbG90XCI9PT10P3IuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwic2NhdHRlcmxheWVyXCIsITApOlwiYmFja3Bsb3RcIj09PXQ/ci5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJtYXBsYXllclwiLCEwKTpcInBsb3RiZ1wiPT09dD9yLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIixcIk0wLDBaXCIpOlwiYWxpbmVcIj09PXR8fFwiYmxpbmVcIj09PXR8fFwiY2xpbmVcIj09PXQ/ci5hcHBlbmQoXCJwYXRoXCIpOlwiZ3JpZHNcIj09PXQmJmEuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPXIuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiZ3JpZCBcIit0LCEwKX0pfSksaS5vcmRlcigpfTt2YXIgaz1NYXRoLnNxcnQoNC8zKTt3LmFkanVzdExheW91dD1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyxmPXRoaXMscD10LmRvbWFpbixkPShwLnhbMF0rcC54WzFdKS8yLGc9KHAueVswXStwLnlbMV0pLzIsdj1wLnhbMV0tcC54WzBdLG09cC55WzFdLXAueVswXSx5PXYqZS53LHg9bSplLmgsYj10LnN1bSxfPXQuYWF4aXMubWluLHc9dC5iYXhpcy5taW4sQT10LmNheGlzLm1pbjt5PmsqeD9pPShhPXgpKms6YT0oaT15KS9rLG89dippL3kscz1tKmEveCxyPWUubCtlLncqZC1pLzIsbj1lLnQrZS5oKigxLWcpLWEvMixmLngwPXIsZi55MD1uLGYudz1pLGYuaD1hLGYuc3VtPWIsZi54YXhpcz17dHlwZTpcImxpbmVhclwiLHJhbmdlOltfKzIqQS1iLGItXy0yKnddLGRvbWFpbjpbZC1vLzIsZCtvLzJdLF9pZDpcInhcIn0sdShmLnhheGlzLGYuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQpLGYueGF4aXMuc2V0U2NhbGUoKSxmLnhheGlzLmlzUHRXaXRoaW5SYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5hPj1mLmFheGlzLnJhbmdlWzBdJiZ0LmE8PWYuYWF4aXMucmFuZ2VbMV0mJnQuYj49Zi5iYXhpcy5yYW5nZVsxXSYmdC5iPD1mLmJheGlzLnJhbmdlWzBdJiZ0LmM+PWYuY2F4aXMucmFuZ2VbMV0mJnQuYzw9Zi5jYXhpcy5yYW5nZVswXX0sZi55YXhpcz17dHlwZTpcImxpbmVhclwiLHJhbmdlOltfLGItdy1BXSxkb21haW46W2ctcy8yLGcrcy8yXSxfaWQ6XCJ5XCJ9LHUoZi55YXhpcyxmLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxmLnlheGlzLnNldFNjYWxlKCksZi55YXhpcy5pc1B0V2l0aGluUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4hMH07dmFyIFQ9Zi55YXhpcy5kb21haW5bMF0sTT1mLmFheGlzPWgoe30sdC5hYXhpcyx7cmFuZ2U6W18sYi13LUFdLHNpZGU6XCJsZWZ0XCIsdGlja2FuZ2xlOigrdC5hYXhpcy50aWNrYW5nbGV8fDApLTMwLGRvbWFpbjpbVCxUK3Mqa10sYW5jaG9yOlwiZnJlZVwiLHBvc2l0aW9uOjAsX2lkOlwieVwiLF9sZW5ndGg6aX0pO3UoTSxmLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxNLnNldFNjYWxlKCk7dmFyIFM9Zi5iYXhpcz1oKHt9LHQuYmF4aXMse3JhbmdlOltiLV8tQSx3XSxzaWRlOlwiYm90dG9tXCIsZG9tYWluOmYueGF4aXMuZG9tYWluLGFuY2hvcjpcImZyZWVcIixwb3NpdGlvbjowLF9pZDpcInhcIixfbGVuZ3RoOml9KTt1KFMsZi5ncmFwaERpdi5fZnVsbExheW91dCksUy5zZXRTY2FsZSgpO3ZhciBFPWYuY2F4aXM9aCh7fSx0LmNheGlzLHtyYW5nZTpbYi1fLXcsQV0sc2lkZTpcInJpZ2h0XCIsdGlja2FuZ2xlOigrdC5jYXhpcy50aWNrYW5nbGV8fDApKzMwLGRvbWFpbjpbVCxUK3Mqa10sYW5jaG9yOlwiZnJlZVwiLHBvc2l0aW9uOjAsX2lkOlwieVwiLF9sZW5ndGg6aX0pO3UoRSxmLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxFLnNldFNjYWxlKCk7dmFyIEM9XCJNXCIrcitcIixcIisobithKStcImhcIitpK1wibC1cIitpLzIrXCIsLVwiK2ErXCJaXCI7Zi5jbGlwRGVmLnNlbGVjdChcInBhdGhcIikuYXR0cihcImRcIixDKSxmLmxheWVycy5wbG90Ymcuc2VsZWN0KFwicGF0aFwiKS5hdHRyKFwiZFwiLEMpO3ZhciBMPVwiTTAsXCIrYStcImhcIitpK1wibC1cIitpLzIrXCIsLVwiK2ErXCJaXCI7Zi5jbGlwRGVmUmVsYXRpdmUuc2VsZWN0KFwicGF0aFwiKS5hdHRyKFwiZFwiLEwpO3ZhciB6PVwidHJhbnNsYXRlKFwiK3IrXCIsXCIrbitcIilcIjtmLnBsb3RDb250YWluZXIuc2VsZWN0QWxsKFwiLnNjYXR0ZXJsYXllciwubWFwbGF5ZXJcIikuYXR0cihcInRyYW5zZm9ybVwiLHopLGYuY2xpcERlZlJlbGF0aXZlLnNlbGVjdChcInBhdGhcIikuYXR0cihcInRyYW5zZm9ybVwiLG51bGwpO3ZhciBPPVwidHJhbnNsYXRlKFwiKyhyLVMuX29mZnNldCkrXCIsXCIrKG4rYSkrXCIpXCI7Zi5sYXllcnMuYmF4aXMuYXR0cihcInRyYW5zZm9ybVwiLE8pLGYubGF5ZXJzLmJncmlkLmF0dHIoXCJ0cmFuc2Zvcm1cIixPKTt2YXIgST1cInRyYW5zbGF0ZShcIisocitpLzIpK1wiLFwiK24rXCIpcm90YXRlKDMwKXRyYW5zbGF0ZSgwLFwiKy1NLl9vZmZzZXQrXCIpXCI7Zi5sYXllcnMuYWF4aXMuYXR0cihcInRyYW5zZm9ybVwiLEkpLGYubGF5ZXJzLmFncmlkLmF0dHIoXCJ0cmFuc2Zvcm1cIixJKTt2YXIgRD1cInRyYW5zbGF0ZShcIisocitpLzIpK1wiLFwiK24rXCIpcm90YXRlKC0zMCl0cmFuc2xhdGUoMCxcIistRS5fb2Zmc2V0K1wiKVwiO2YubGF5ZXJzLmNheGlzLmF0dHIoXCJ0cmFuc2Zvcm1cIixEKSxmLmxheWVycy5jZ3JpZC5hdHRyKFwidHJhbnNmb3JtXCIsRCksZi5kcmF3QXhlcyghMCksZi5sYXllcnMuYWxpbmUuc2VsZWN0KFwicGF0aFwiKS5hdHRyKFwiZFwiLE0uc2hvd2xpbmU/XCJNXCIrcitcIixcIisobithKStcImxcIitpLzIrXCIsLVwiK2E6XCJNMCwwXCIpLmNhbGwobC5zdHJva2UsTS5saW5lY29sb3J8fFwiIzAwMFwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLChNLmxpbmV3aWR0aHx8MCkrXCJweFwiKSxmLmxheWVycy5ibGluZS5zZWxlY3QoXCJwYXRoXCIpLmF0dHIoXCJkXCIsUy5zaG93bGluZT9cIk1cIityK1wiLFwiKyhuK2EpK1wiaFwiK2k6XCJNMCwwXCIpLmNhbGwobC5zdHJva2UsUy5saW5lY29sb3J8fFwiIzAwMFwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLChTLmxpbmV3aWR0aHx8MCkrXCJweFwiKSxmLmxheWVycy5jbGluZS5zZWxlY3QoXCJwYXRoXCIpLmF0dHIoXCJkXCIsRS5zaG93bGluZT9cIk1cIisocitpLzIpK1wiLFwiK24rXCJsXCIraS8yK1wiLFwiK2E6XCJNMCwwXCIpLmNhbGwobC5zdHJva2UsRS5saW5lY29sb3J8fFwiIzAwMFwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLChFLmxpbmV3aWR0aHx8MCkrXCJweFwiKSxmLmdyYXBoRGl2Ll9jb250ZXh0LnN0YXRpY1Bsb3R8fGYuaW5pdEludGVyYWN0aW9ucygpLGMuc2V0Q2xpcFVybChmLmxheWVycy5mcm9udHBsb3QsZi5faGFzQ2xpcE9uQXhpc0ZhbHNlP251bGw6Zi5jbGlwSWQsZi5ncmFwaERpdil9LHcuZHJhd0F4ZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5ncmFwaERpdixyPXRoaXMuaWQuc3Vic3RyKDcpK1widGl0bGVcIixuPXRoaXMubGF5ZXJzLGk9dGhpcy5hYXhpcyxhPXRoaXMuYmF4aXMsbz10aGlzLmNheGlzO2lmKHRoaXMuZHJhd0F4KGkpLHRoaXMuZHJhd0F4KGEpLHRoaXMuZHJhd0F4KG8pLHQpe3ZhciBsPU1hdGgubWF4KGkuc2hvd3RpY2tsYWJlbHM/aS50aWNrZm9udC5zaXplLzI6MCwoby5zaG93dGlja2xhYmVscz8uNzUqby50aWNrZm9udC5zaXplOjApKyhcIm91dHNpZGVcIj09PW8udGlja3M/Ljg3Km8udGlja2xlbjowKSksYz0oYS5zaG93dGlja2xhYmVscz9hLnRpY2tmb250LnNpemU6MCkrKFwib3V0c2lkZVwiPT09YS50aWNrcz9hLnRpY2tsZW46MCkrMztuW1wiYS10aXRsZVwiXT12LmRyYXcoZSxcImFcIityLHtwcm9wQ29udGFpbmVyOmkscHJvcE5hbWU6dGhpcy5pZCtcIi5hYXhpcy50aXRsZVwiLHBsYWNlaG9sZGVyOnMoZSxcIkNsaWNrIHRvIGVudGVyIENvbXBvbmVudCBBIHRpdGxlXCIpLGF0dHJpYnV0ZXM6e3g6dGhpcy54MCt0aGlzLncvMix5OnRoaXMueTAtaS50aXRsZS5mb250LnNpemUvMy1sLFwidGV4dC1hbmNob3JcIjpcIm1pZGRsZVwifX0pLG5bXCJiLXRpdGxlXCJdPXYuZHJhdyhlLFwiYlwiK3Ise3Byb3BDb250YWluZXI6YSxwcm9wTmFtZTp0aGlzLmlkK1wiLmJheGlzLnRpdGxlXCIscGxhY2Vob2xkZXI6cyhlLFwiQ2xpY2sgdG8gZW50ZXIgQ29tcG9uZW50IEIgdGl0bGVcIiksYXR0cmlidXRlczp7eDp0aGlzLngwLWMseTp0aGlzLnkwK3RoaXMuaCsuODMqYS50aXRsZS5mb250LnNpemUrYyxcInRleHQtYW5jaG9yXCI6XCJtaWRkbGVcIn19KSxuW1wiYy10aXRsZVwiXT12LmRyYXcoZSxcImNcIityLHtwcm9wQ29udGFpbmVyOm8scHJvcE5hbWU6dGhpcy5pZCtcIi5jYXhpcy50aXRsZVwiLHBsYWNlaG9sZGVyOnMoZSxcIkNsaWNrIHRvIGVudGVyIENvbXBvbmVudCBDIHRpdGxlXCIpLGF0dHJpYnV0ZXM6e3g6dGhpcy54MCt0aGlzLncrYyx5OnRoaXMueTArdGhpcy5oKy44MypvLnRpdGxlLmZvbnQuc2l6ZStjLFwidGV4dC1hbmNob3JcIjpcIm1pZGRsZVwifX0pfX0sdy5kcmF3QXg9ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLmdyYXBoRGl2LG49dC5fbmFtZSxpPW4uY2hhckF0KDApLGE9dC5faWQscz10aGlzLmxheWVyc1tuXSxsPWkrXCJ0aWNrTGF5b3V0XCIsYz0oZT10KS50aWNrcytTdHJpbmcoZS50aWNrbGVuKStTdHJpbmcoZS5zaG93dGlja2xhYmVscyk7dGhpc1tsXSE9PWMmJihzLnNlbGVjdEFsbChcIi5cIithK1widGlja1wiKS5yZW1vdmUoKSx0aGlzW2xdPWMpLHQuc2V0U2NhbGUoKTt2YXIgdT1wLmNhbGNUaWNrcyh0KSxoPXAuY2xpcEVuZHModCx1KSxmPXAubWFrZVRyYW5zRm4odCksZD1wLmdldFRpY2tTaWducyh0KVsyXSxnPW8uZGVnMnJhZCgzMCksdj1kKih0LmxpbmV3aWR0aHx8MSkvMixtPWQqdC50aWNrbGVuLHk9dGhpcy53LHg9dGhpcy5oLGI9XCJiXCI9PT1pP1wiTTAsXCIrditcImxcIitNYXRoLnNpbihnKSptK1wiLFwiK01hdGguY29zKGcpKm06XCJNXCIrditcIiwwbFwiK01hdGguY29zKGcpKm0rXCIsXCIrLU1hdGguc2luKGcpKm0sXz17YTpcIk0wLDBsXCIreCtcIiwtXCIreS8yLGI6XCJNMCwwbC1cIit5LzIrXCIsLVwiK3gsYzpcIk0wLDBsLVwiK3grXCIsXCIreS8yfVtpXTtwLmRyYXdUaWNrcyhyLHQse3ZhbHM6XCJpbnNpZGVcIj09PXQudGlja3M/aDp1LGxheWVyOnMscGF0aDpiLHRyYW5zRm46ZixjcmlzcDohMX0pLHAuZHJhd0dyaWQocix0LHt2YWxzOmgsbGF5ZXI6dGhpcy5sYXllcnNbaStcImdyaWRcIl0scGF0aDpfLHRyYW5zRm46ZixjcmlzcDohMX0pLHAuZHJhd0xhYmVscyhyLHQse3ZhbHM6dSxsYXllcjpzLHRyYW5zRm46ZixsYWJlbEZuczpwLm1ha2VMYWJlbEZucyh0LDAsMzApfSl9O3ZhciBBPWIuTUlOWk9PTS8yKy44NyxUPVwibS0wLjg3LC41aFwiK0ErXCJ2M2gtXCIrKEErNS4yKStcImxcIisoQS8yKzIuNikrXCIsLVwiKyguODcqQSs0LjUpK1wibDIuNiwxLjVsLVwiK0EvMitcIixcIisuODcqQStcIlpcIixNPVwibTAuODcsLjVoLVwiK0ErXCJ2M2hcIisoQSs1LjIpK1wibC1cIisoQS8yKzIuNikrXCIsLVwiKyguODcqQSs0LjUpK1wibC0yLjYsMS41bFwiK0EvMitcIixcIisuODcqQStcIlpcIixTPVwibTAsMWxcIitBLzIrXCIsXCIrLjg3KkErXCJsMi42LC0xLjVsLVwiKyhBLzIrMi42KStcIiwtXCIrKC44NypBKzQuNSkrXCJsLVwiKyhBLzIrMi42KStcIixcIisoLjg3KkErNC41KStcImwyLjYsMS41bFwiK0EvMitcIiwtXCIrLjg3KkErXCJaXCIsRT1cIm0wLjUsMC41aDV2LTJoLTV2LTVoLTJ2NWgtNXYyaDV2NWgyWlwiLEM9ITA7ZnVuY3Rpb24gTCh0KXtuLnNlbGVjdCh0KS5zZWxlY3RBbGwoXCIuem9vbWJveCwuanMtem9vbWJveC1iYWNrZHJvcCwuanMtem9vbWJveC1tZW51LC56b29tYm94LWNvcm5lcnNcIikucmVtb3ZlKCl9dy5pbml0SW50ZXJhY3Rpb25zPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG4sdSxoLGYscCx2LF8sdz10aGlzLEE9dy5sYXllcnMucGxvdGJnLnNlbGVjdChcInBhdGhcIikubm9kZSgpLHo9dy5ncmFwaERpdixPPXouX2Z1bGxMYXlvdXQuX3pvb21sYXllcixJPXtlbGVtZW50OkEsZ2Q6eixwbG90aW5mbzp7aWQ6dy5pZCx4YXhpczp3LnhheGlzLHlheGlzOncueWF4aXN9LHN1YnBsb3Q6dy5pZCxwcmVwRm46ZnVuY3Rpb24oYSxvLHMpe0kueGF4ZXM9W3cueGF4aXNdLEkueWF4ZXM9W3cueWF4aXNdO3ZhciBjPXouX2Z1bGxMYXlvdXQuZHJhZ21vZGU7SS5taW5EcmFnPVwibGFzc29cIj09PWM/MTp2b2lkIDAsXCJ6b29tXCI9PT1jPyhJLm1vdmVGbj1OLEkuY2xpY2tGbj1QLEkuZG9uZUZuPWosZnVuY3Rpb24oYSxvLHMpe3ZhciBjPUEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dD1vLWMubGVmdCxlPXMtYy50b3Ascj17YTp3LmFheGlzLnJhbmdlWzBdLGI6dy5iYXhpcy5yYW5nZVsxXSxjOncuY2F4aXMucmFuZ2VbMV19LHU9cixuPXcuYWF4aXMucmFuZ2VbMV0tci5hLGg9aSh3LmdyYXBoRGl2Ll9mdWxsTGF5b3V0W3cuaWRdLmJnY29sb3IpLmdldEx1bWluYW5jZSgpLGY9XCJNMCxcIit3LmgrXCJMXCIrdy53LzIrXCIsIDBMXCIrdy53K1wiLFwiK3cuaCtcIlpcIixwPSExLHY9Ty5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJjbGFzc1wiLFwiem9vbWJveFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrdy54MCtcIiwgXCIrdy55MCtcIilcIikuc3R5bGUoe2ZpbGw6aD4uMj9cInJnYmEoMCwwLDAsMClcIjpcInJnYmEoMjU1LDI1NSwyNTUsMClcIixcInN0cm9rZS13aWR0aFwiOjB9KS5hdHRyKFwiZFwiLGYpLF89Ty5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJjbGFzc1wiLFwiem9vbWJveC1jb3JuZXJzXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIit3LngwK1wiLCBcIit3LnkwK1wiKVwiKS5zdHlsZSh7ZmlsbDpsLmJhY2tncm91bmQsc3Ryb2tlOmwuZGVmYXVsdExpbmUsXCJzdHJva2Utd2lkdGhcIjoxLG9wYWNpdHk6MH0pLmF0dHIoXCJkXCIsXCJNMCwwWlwiKSx4KHopfSgwLG8scykpOlwicGFuXCI9PT1jPyhJLm1vdmVGbj1WLEkuY2xpY2tGbj1QLEkuZG9uZUZuPVUscj17YTp3LmFheGlzLnJhbmdlWzBdLGI6dy5iYXhpcy5yYW5nZVsxXSxjOncuY2F4aXMucmFuZ2VbMV19LHU9cix4KHopKTpcInNlbGVjdFwiIT09YyYmXCJsYXNzb1wiIT09Y3x8bShhLG8scyxJLGMpfX07ZnVuY3Rpb24gRCh0KXt2YXIgZT17fTtyZXR1cm4gZVt3LmlkK1wiLmFheGlzLm1pblwiXT10LmEsZVt3LmlkK1wiLmJheGlzLm1pblwiXT10LmIsZVt3LmlkK1wiLmNheGlzLm1pblwiXT10LmMsZX1mdW5jdGlvbiBQKHQsZSl7dmFyIHI9ei5fZnVsbExheW91dC5jbGlja21vZGU7TCh6KSwyPT09dCYmKHouZW1pdChcInBsb3RseV9kb3VibGVjbGlja1wiLG51bGwpLGEuY2FsbChcIl9ndWlSZWxheW91dFwiLHosRCh7YTowLGI6MCxjOjB9KSkpLHIuaW5kZXhPZihcInNlbGVjdFwiKT4tMSYmMT09PXQmJnkoZSx6LFt3LnhheGlzXSxbdy55YXhpc10sdy5pZCxJKSxyLmluZGV4T2YoXCJldmVudFwiKT4tMSYmZy5jbGljayh6LGUsdy5pZCl9ZnVuY3Rpb24gUih0LGUpe3JldHVybiAxLWUvdy5ofWZ1bmN0aW9uIEYodCxlKXtyZXR1cm4gMS0odCsody5oLWUpL01hdGguc3FydCgzKSkvdy53fWZ1bmN0aW9uIEIodCxlKXtyZXR1cm4odC0ody5oLWUpL01hdGguc3FydCgzKSkvdy53fWZ1bmN0aW9uIE4oaSxhKXt2YXIgbz10K2kscz1lK2EsbD1NYXRoLm1heCgwLE1hdGgubWluKDEsUigwLGUpLFIoMCxzKSkpLGM9TWF0aC5tYXgoMCxNYXRoLm1pbigxLEYodCxlKSxGKG8scykpKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oMSxCKHQsZSksQihvLHMpKSksZz0obC8yK2QpKncudyxtPSgxLWwvMi1jKSp3LncseT0oZyttKS8yLHg9bS1nLEE9KDEtbCkqdy5oLEM9QS14L2s7eDxiLk1JTlpPT00/KHU9cix2LmF0dHIoXCJkXCIsZiksXy5hdHRyKFwiZFwiLFwiTTAsMFpcIikpOih1PXthOnIuYStsKm4sYjpyLmIrYypuLGM6ci5jK2Qqbn0sdi5hdHRyKFwiZFwiLGYrXCJNXCIrZytcIixcIitBK1wiSFwiK20rXCJMXCIreStcIixcIitDK1wiTFwiK2crXCIsXCIrQStcIlpcIiksXy5hdHRyKFwiZFwiLFwiTVwiK3QrXCIsXCIrZStFK1wiTVwiK2crXCIsXCIrQStUK1wiTVwiK20rXCIsXCIrQStNK1wiTVwiK3krXCIsXCIrQytTKSkscHx8KHYudHJhbnNpdGlvbigpLnN0eWxlKFwiZmlsbFwiLGg+LjI/XCJyZ2JhKDAsMCwwLDAuNClcIjpcInJnYmEoMjU1LDI1NSwyNTUsMC4zKVwiKS5kdXJhdGlvbigyMDApLF8udHJhbnNpdGlvbigpLnN0eWxlKFwib3BhY2l0eVwiLDEpLmR1cmF0aW9uKDIwMCkscD0hMCl9ZnVuY3Rpb24gaigpe0woeiksdSE9PXImJihhLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix6LEQodSkpLEMmJnouZGF0YSYmei5fY29udGV4dC5zaG93VGlwcyYmKG8ubm90aWZpZXIocyh6LFwiRG91YmxlLWNsaWNrIHRvIHpvb20gYmFjayBvdXRcIiksXCJsb25nXCIpLEM9ITEpKX1mdW5jdGlvbiBWKHQsZSl7dmFyIG49dC93LnhheGlzLl9tLGk9ZS93LnlheGlzLl9tLGE9Wyh1PXthOnIuYS1pLGI6ci5iKyhuK2kpLzIsYzpyLmMtKG4taSkvMn0pLmEsdS5iLHUuY10uc29ydCgpLG89YS5pbmRleE9mKHUuYSkscz1hLmluZGV4T2YodS5iKSxsPWEuaW5kZXhPZih1LmMpO2FbMF08MCYmKGFbMV0rYVswXS8yPDA/KGFbMl0rPWFbMF0rYVsxXSxhWzBdPWFbMV09MCk6KGFbMl0rPWFbMF0vMixhWzFdKz1hWzBdLzIsYVswXT0wKSx1PXthOmFbb10sYjphW3NdLGM6YVtsXX0sZT0oci5hLXUuYSkqdy55YXhpcy5fbSx0PShyLmMtdS5jLXIuYit1LmIpKncueGF4aXMuX20pO3ZhciBoPVwidHJhbnNsYXRlKFwiKyh3LngwK3QpK1wiLFwiKyh3LnkwK2UpK1wiKVwiO3cucGxvdENvbnRhaW5lci5zZWxlY3RBbGwoXCIuc2NhdHRlcmxheWVyLC5tYXBsYXllclwiKS5hdHRyKFwidHJhbnNmb3JtXCIsaCk7dmFyIGY9XCJ0cmFuc2xhdGUoXCIrLXQrXCIsXCIrLWUrXCIpXCI7dy5jbGlwRGVmUmVsYXRpdmUuc2VsZWN0KFwicGF0aFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsZiksdy5hYXhpcy5yYW5nZT1bdS5hLHcuc3VtLXUuYi11LmNdLHcuYmF4aXMucmFuZ2U9W3cuc3VtLXUuYS11LmMsdS5iXSx3LmNheGlzLnJhbmdlPVt3LnN1bS11LmEtdS5iLHUuY10sdy5kcmF3QXhlcyghMSksdy5faGFzQ2xpcE9uQXhpc0ZhbHNlJiZ3LnBsb3RDb250YWluZXIuc2VsZWN0KFwiLnNjYXR0ZXJsYXllclwiKS5zZWxlY3RBbGwoXCIudHJhY2VcIikuY2FsbChjLmhpZGVPdXRzaWRlUmFuZ2VQb2ludHMsdyl9ZnVuY3Rpb24gVSgpe2EuY2FsbChcIl9ndWlSZWxheW91dFwiLHosRCh1KSl9QS5vbm1vdXNlbW92ZT1mdW5jdGlvbih0KXtnLmhvdmVyKHosdCx3LmlkKSx6Ll9mdWxsTGF5b3V0Ll9sYXN0aG92ZXI9QSx6Ll9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9dy5pZH0sQS5vbm1vdXNlb3V0PWZ1bmN0aW9uKHQpe3ouX2RyYWdnaW5nfHxkLnVuaG92ZXIoeix0KX0sZC5pbml0KEkpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnRcIjo1OTYsXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9jb21wb25lbnRzL2Z4XCI6NjE3LFwiLi4vLi4vY29tcG9uZW50cy90aXRsZXNcIjo2NjYsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL2NhcnRlc2lhbi9jb25zdGFudHNcIjo3NTUsXCIuLi9jYXJ0ZXNpYW4vc2VsZWN0XCI6NzY2LFwiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0XCI6NzY3LFwiLi4vcGxvdHNcIjo4MTAsZDM6MTU1LHRpbnljb2xvcjI6NTIyfV0sODI5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vbGliL2xvZ2dlcnNcIiksaT10KFwiLi9saWIvbm9vcFwiKSxhPXQoXCIuL2xpYi9wdXNoX3VuaXF1ZVwiKSxvPXQoXCIuL2xpYi9pc19wbGFpbl9vYmplY3RcIikscz10KFwiLi9saWIvZXh0ZW5kXCIpLGw9dChcIi4vcGxvdHMvYXR0cmlidXRlc1wiKSxjPXQoXCIuL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzXCIpLHU9cy5leHRlbmRGbGF0LGg9cy5leHRlbmREZWVwQWxsO2Z1bmN0aW9uIGYodCl7dmFyIGU9dC5uYW1lLGk9dC5jYXRlZ29yaWVzLGE9dC5tZXRhO2lmKHIubW9kdWxlc1tlXSluLmxvZyhcIlR5cGUgXCIrZStcIiBhbHJlYWR5IHJlZ2lzdGVyZWRcIik7ZWxzZXtyLnN1YnBsb3RzUmVnaXN0cnlbdC5iYXNlUGxvdE1vZHVsZS5uYW1lXXx8ZnVuY3Rpb24odCl7dmFyIGU9dC5uYW1lO2lmKHIuc3VicGxvdHNSZWdpc3RyeVtlXSlyZXR1cm4gdm9pZCBuLmxvZyhcIlBsb3QgdHlwZSBcIitlK1wiIGFscmVhZHkgcmVnaXN0ZXJlZC5cIik7Zm9yKHZhciBpIGluIHYodCksci5zdWJwbG90c1JlZ2lzdHJ5W2VdPXQsci5jb21wb25lbnRzUmVnaXN0cnkpeChpLHQubmFtZSl9KHQuYmFzZVBsb3RNb2R1bGUpO2Zvcih2YXIgbz17fSxzPTA7czxpLmxlbmd0aDtzKyspb1tpW3NdXT0hMCxyLmFsbENhdGVnb3JpZXNbaVtzXV09ITA7Zm9yKHZhciBsIGluIHIubW9kdWxlc1tlXT17X21vZHVsZTp0LGNhdGVnb3JpZXM6b30sYSYmT2JqZWN0LmtleXMoYSkubGVuZ3RoJiYoci5tb2R1bGVzW2VdLm1ldGE9YSksci5hbGxUeXBlcy5wdXNoKGUpLHIuY29tcG9uZW50c1JlZ2lzdHJ5KW0obCxlKTt0LmxheW91dEF0dHJpYnV0ZXMmJnUoci50cmFjZUxheW91dEF0dHJpYnV0ZXMsdC5sYXlvdXRBdHRyaWJ1dGVzKX19ZnVuY3Rpb24gcCh0KXtpZihcInN0cmluZ1wiIT10eXBlb2YgdC5uYW1lKXRocm93IG5ldyBFcnJvcihcIkNvbXBvbmVudCBtb2R1bGUgKm5hbWUqIG11c3QgYmUgYSBzdHJpbmcuXCIpO3ZhciBlPXQubmFtZTtmb3IodmFyIG4gaW4gci5jb21wb25lbnRzUmVnaXN0cnlbZV09dCx0LmxheW91dEF0dHJpYnV0ZXMmJih0LmxheW91dEF0dHJpYnV0ZXMuX2lzTGlua2VkVG9BcnJheSYmYShyLmxheW91dEFycmF5Q29udGFpbmVycyxlKSx2KHQpKSxyLm1vZHVsZXMpbShlLG4pO2Zvcih2YXIgaSBpbiByLnN1YnBsb3RzUmVnaXN0cnkpeChlLGkpO2Zvcih2YXIgbyBpbiByLnRyYW5zZm9ybXNSZWdpc3RyeSl5KGUsbyk7dC5zY2hlbWEmJnQuc2NoZW1hLmxheW91dCYmaChjLHQuc2NoZW1hLmxheW91dCl9ZnVuY3Rpb24gZCh0KXtpZihcInN0cmluZ1wiIT10eXBlb2YgdC5uYW1lKXRocm93IG5ldyBFcnJvcihcIlRyYW5zZm9ybSBtb2R1bGUgKm5hbWUqIG11c3QgYmUgYSBzdHJpbmcuXCIpO3ZhciBlPVwiVHJhbnNmb3JtIG1vZHVsZSBcIit0Lm5hbWUsaT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnRyYW5zZm9ybSxhPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQuY2FsY1RyYW5zZm9ybTtpZighaSYmIWEpdGhyb3cgbmV3IEVycm9yKGUrXCIgaXMgbWlzc2luZyBhICp0cmFuc2Zvcm0qIG9yICpjYWxjVHJhbnNmb3JtKiBtZXRob2QuXCIpO2Zvcih2YXIgcyBpbiBpJiZhJiZuLmxvZyhbZStcIiBoYXMgYm90aCBhICp0cmFuc2Zvcm0qIGFuZCAqY2FsY1RyYW5zZm9ybSogbWV0aG9kcy5cIixcIlBsZWFzZSBub3RlIHRoYXQgYWxsICp0cmFuc2Zvcm0qIG1ldGhvZHMgYXJlIGV4ZWN1dGVkXCIsXCJiZWZvcmUgYWxsICpjYWxjVHJhbnNmb3JtKiBtZXRob2RzLlwiXS5qb2luKFwiIFwiKSksbyh0LmF0dHJpYnV0ZXMpfHxuLmxvZyhlK1wiIHJlZ2lzdGVyZWQgd2l0aG91dCBhbiAqYXR0cmlidXRlcyogb2JqZWN0LlwiKSxcImZ1bmN0aW9uXCIhPXR5cGVvZiB0LnN1cHBseURlZmF1bHRzJiZuLmxvZyhlK1wiIHJlZ2lzdGVyZWQgd2l0aG91dCBhICpzdXBwbHlEZWZhdWx0cyogbWV0aG9kLlwiKSxyLnRyYW5zZm9ybXNSZWdpc3RyeVt0Lm5hbWVdPXQsci5jb21wb25lbnRzUmVnaXN0cnkpeShzLHQubmFtZSl9ZnVuY3Rpb24gZyh0KXt2YXIgZT10Lm5hbWUsbj1lLnNwbGl0KFwiLVwiKVswXSxpPXQuZGljdGlvbmFyeSxhPXQuZm9ybWF0LG89aSYmT2JqZWN0LmtleXMoaSkubGVuZ3RoLHM9YSYmT2JqZWN0LmtleXMoYSkubGVuZ3RoLGw9ci5sb2NhbGVSZWdpc3RyeSxjPWxbZV07aWYoY3x8KGxbZV09Yz17fSksbiE9PWUpe3ZhciB1PWxbbl07dXx8KGxbbl09dT17fSksbyYmdS5kaWN0aW9uYXJ5PT09Yy5kaWN0aW9uYXJ5JiYodS5kaWN0aW9uYXJ5PWkpLHMmJnUuZm9ybWF0PT09Yy5mb3JtYXQmJih1LmZvcm1hdD1hKX1vJiYoYy5kaWN0aW9uYXJ5PWkpLHMmJihjLmZvcm1hdD1hKX1mdW5jdGlvbiB2KHQpe2lmKHQubGF5b3V0QXR0cmlidXRlcyl7dmFyIGU9dC5sYXlvdXRBdHRyaWJ1dGVzLl9hcnJheUF0dHJSZWdleHBzO2lmKGUpZm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspYShyLmxheW91dEFycmF5UmVnZXhlcyxlW25dKX19ZnVuY3Rpb24gbSh0LGUpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W3RdLnNjaGVtYTtpZihuJiZuLnRyYWNlcyl7dmFyIGk9bi50cmFjZXNbZV07aSYmaChyLm1vZHVsZXNbZV0uX21vZHVsZS5hdHRyaWJ1dGVzLGkpfX1mdW5jdGlvbiB5KHQsZSl7dmFyIG49ci5jb21wb25lbnRzUmVnaXN0cnlbdF0uc2NoZW1hO2lmKG4mJm4udHJhbnNmb3Jtcyl7dmFyIGk9bi50cmFuc2Zvcm1zW2VdO2kmJmgoci50cmFuc2Zvcm1zUmVnaXN0cnlbZV0uYXR0cmlidXRlcyxpKX19ZnVuY3Rpb24geCh0LGUpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W3RdLnNjaGVtYTtpZihuJiZuLnN1YnBsb3RzKXt2YXIgaT1yLnN1YnBsb3RzUmVnaXN0cnlbZV0sYT1pLmxheW91dEF0dHJpYnV0ZXMsbz1cInN1YnBsb3RcIj09PWkuYXR0cj9pLm5hbWU6aS5hdHRyO0FycmF5LmlzQXJyYXkobykmJihvPW9bMF0pO3ZhciBzPW4uc3VicGxvdHNbb107YSYmcyYmaChhLHMpfX1mdW5jdGlvbiBiKHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0JiYodD10LnR5cGUpLHR9ci5tb2R1bGVzPXt9LHIuYWxsQ2F0ZWdvcmllcz17fSxyLmFsbFR5cGVzPVtdLHIuc3VicGxvdHNSZWdpc3RyeT17fSxyLnRyYW5zZm9ybXNSZWdpc3RyeT17fSxyLmNvbXBvbmVudHNSZWdpc3RyeT17fSxyLmxheW91dEFycmF5Q29udGFpbmVycz1bXSxyLmxheW91dEFycmF5UmVnZXhlcz1bXSxyLnRyYWNlTGF5b3V0QXR0cmlidXRlcz17fSxyLmxvY2FsZVJlZ2lzdHJ5PXt9LHIuYXBpTWV0aG9kUmVnaXN0cnk9e30sci5jb2xsZWN0YWJsZVN1YnBsb3RUeXBlcz1udWxsLHIucmVnaXN0ZXI9ZnVuY3Rpb24odCl7aWYoci5jb2xsZWN0YWJsZVN1YnBsb3RUeXBlcz1udWxsLCF0KXRocm93IG5ldyBFcnJvcihcIk5vIGFyZ3VtZW50IHBhc3NlZCB0byBQbG90bHkucmVnaXN0ZXIuXCIpO3QmJiFBcnJheS5pc0FycmF5KHQpJiYodD1bdF0pO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgbj10W2VdO2lmKCFuKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbW9kdWxlIHdhcyBhdHRlbXB0ZWQgdG8gYmUgcmVnaXN0ZXJlZCFcIik7c3dpdGNoKG4ubW9kdWxlVHlwZSl7Y2FzZVwidHJhY2VcIjpmKG4pO2JyZWFrO2Nhc2VcInRyYW5zZm9ybVwiOmQobik7YnJlYWs7Y2FzZVwiY29tcG9uZW50XCI6cChuKTticmVhaztjYXNlXCJsb2NhbGVcIjpnKG4pO2JyZWFrO2Nhc2VcImFwaU1ldGhvZFwiOnZhciBpPW4ubmFtZTtyLmFwaU1ldGhvZFJlZ2lzdHJ5W2ldPW4uZm47YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIG1vZHVsZSB3YXMgYXR0ZW1wdGVkIHRvIGJlIHJlZ2lzdGVyZWQhXCIpfX19LHIuZ2V0TW9kdWxlPWZ1bmN0aW9uKHQpe3ZhciBlPXIubW9kdWxlc1tiKHQpXTtyZXR1cm4hIWUmJmUuX21vZHVsZX0sci50cmFjZUlzPWZ1bmN0aW9uKHQsZSl7aWYoXCJ2YXJpb3VzXCI9PT0odD1iKHQpKSlyZXR1cm4hMTt2YXIgaT1yLm1vZHVsZXNbdF07cmV0dXJuIGl8fCh0JiZcImFyZWFcIiE9PXQmJm4ubG9nKFwiVW5yZWNvZ25pemVkIHRyYWNlIHR5cGUgXCIrdCtcIi5cIiksaT1yLm1vZHVsZXNbbC50eXBlLmRmbHRdKSwhIWkuY2F0ZWdvcmllc1tlXX0sci5nZXRUcmFuc2Zvcm1JbmRpY2VzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49dC50cmFuc2Zvcm1zfHxbXSxpPTA7aTxuLmxlbmd0aDtpKyspbltpXS50eXBlPT09ZSYmci5wdXNoKGkpO3JldHVybiByfSxyLmhhc1RyYW5zZm9ybT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LnRyYW5zZm9ybXN8fFtdLG49MDtuPHIubGVuZ3RoO24rKylpZihyW25dLnR5cGU9PT1lKXJldHVybiEwO3JldHVybiExfSxyLmdldENvbXBvbmVudE1ldGhvZD1mdW5jdGlvbih0LGUpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W3RdO3JldHVybiBuJiZuW2VdfHxpfSxyLmNhbGw9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHNbMF0sZT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gci5hcGlNZXRob2RSZWdpc3RyeVt0XS5hcHBseShudWxsLGUpfX0se1wiLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi9saWIvaXNfcGxhaW5fb2JqZWN0XCI6NzAyLFwiLi9saWIvbG9nZ2Vyc1wiOjcwNSxcIi4vbGliL25vb3BcIjo3MTAsXCIuL2xpYi9wdXNoX3VuaXF1ZVwiOjcxNSxcIi4vcGxvdHMvYXR0cmlidXRlc1wiOjc0NixcIi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXNcIjo4MDF9XSw4MzA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vbGliXCIpLGk9bi5leHRlbmRGbGF0LGE9bi5leHRlbmREZWVwO2Z1bmN0aW9uIG8odCl7dmFyIGU7c3dpdGNoKHQpe2Nhc2VcInRoZW1lc19fdGh1bWJcIjplPXthdXRvc2l6ZTohMCx3aWR0aDoxNTAsaGVpZ2h0OjE1MCx0aXRsZTp7dGV4dDpcIlwifSxzaG93bGVnZW5kOiExLG1hcmdpbjp7bDo1LHI6NSx0OjUsYjo1LHBhZDowfSxhbm5vdGF0aW9uczpbXX07YnJlYWs7Y2FzZVwidGh1bWJuYWlsXCI6ZT17dGl0bGU6e3RleHQ6XCJcIn0saGlkZXNvdXJjZXM6ITAsc2hvd2xlZ2VuZDohMSxib3JkZXJ3aWR0aDowLGJvcmRlcmNvbG9yOlwiXCIsbWFyZ2luOntsOjEscjoxLHQ6MSxiOjEscGFkOjB9LGFubm90YXRpb25zOltdfTticmVhaztkZWZhdWx0OmU9e319cmV0dXJuIGV9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI7dC5mcmFtZXdvcmsmJnQuZnJhbWV3b3JrLmlzUG9sYXImJih0PXQuZnJhbWV3b3JrLmdldENvbmZpZygpKTt2YXIgbixzPXQuZGF0YSxsPXQubGF5b3V0LGM9YShbXSxzKSx1PWEoe30sbCxvKGUudGlsZUNsYXNzKSksaD10Ll9jb250ZXh0fHx7fTtpZihlLndpZHRoJiYodS53aWR0aD1lLndpZHRoKSxlLmhlaWdodCYmKHUuaGVpZ2h0PWUuaGVpZ2h0KSxcInRodW1ibmFpbFwiPT09ZS50aWxlQ2xhc3N8fFwidGhlbWVzX190aHVtYlwiPT09ZS50aWxlQ2xhc3Mpe3UuYW5ub3RhdGlvbnM9W107dmFyIGY9T2JqZWN0LmtleXModSk7Zm9yKHI9MDtyPGYubGVuZ3RoO3IrKyluPWZbcl0sW1wieGF4aXNcIixcInlheGlzXCIsXCJ6YXhpc1wiXS5pbmRleE9mKG4uc2xpY2UoMCw1KSk+LTEmJih1W2Zbcl1dLnRpdGxlPXt0ZXh0OlwiXCJ9KTtmb3Iocj0wO3I8Yy5sZW5ndGg7cisrKXt2YXIgcD1jW3JdO3Auc2hvd3NjYWxlPSExLHAubWFya2VyJiYocC5tYXJrZXIuc2hvd3NjYWxlPSExKSxcInBpZVwiPT09cC50eXBlJiYocC50ZXh0cG9zaXRpb249XCJub25lXCIpfX1pZihBcnJheS5pc0FycmF5KGUuYW5ub3RhdGlvbnMpKWZvcihyPTA7cjxlLmFubm90YXRpb25zLmxlbmd0aDtyKyspdS5hbm5vdGF0aW9ucy5wdXNoKGUuYW5ub3RhdGlvbnNbcl0pO3ZhciBkPU9iamVjdC5rZXlzKHUpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXRjaCgvXnNjZW5lXFxkKiQvKX0pO2lmKGQubGVuZ3RoKXt2YXIgZz17fTtmb3IoXCJ0aHVtYm5haWxcIj09PWUudGlsZUNsYXNzJiYoZz17dGl0bGU6e3RleHQ6XCJcIn0sc2hvd2F4ZXNsYWJlbHM6ITEsc2hvd3RpY2tsYWJlbHM6ITEsbGluZXRpY2tlbmFibGU6ITF9KSxyPTA7cjxkLmxlbmd0aDtyKyspe3ZhciB2PXVbZFtyXV07di54YXhpc3x8KHYueGF4aXM9e30pLHYueWF4aXN8fCh2LnlheGlzPXt9KSx2LnpheGlzfHwodi56YXhpcz17fSksaSh2LnhheGlzLGcpLGkodi55YXhpcyxnKSxpKHYuemF4aXMsZyksdi5fc2NlbmU9bnVsbH19dmFyIG09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtlLnRpbGVDbGFzcyYmKG0uY2xhc3NOYW1lPWUudGlsZUNsYXNzKTt2YXIgeT17Z2Q6bSx0ZDptLGxheW91dDp1LGRhdGE6Yyxjb25maWc6e3N0YXRpY1Bsb3Q6dm9pZCAwPT09ZS5zdGF0aWNQbG90fHxlLnN0YXRpY1Bsb3QscGxvdEdsUGl4ZWxSYXRpbzp2b2lkIDA9PT1lLnBsb3RHbFBpeGVsUmF0aW8/MjplLnBsb3RHbFBpeGVsUmF0aW8sZGlzcGxheWxvZ286ZS5kaXNwbGF5bG9nb3x8ITEsc2hvd0xpbms6ZS5zaG93TGlua3x8ITEsc2hvd1RpcHM6ZS5zaG93VGlwc3x8ITEsbWFwYm94QWNjZXNzVG9rZW46aC5tYXBib3hBY2Nlc3NUb2tlbn19O3JldHVyblwidHJhbnNwYXJlbnRcIiE9PWUuc2V0QmFja2dyb3VuZCYmKHkuY29uZmlnLnNldEJhY2tncm91bmQ9ZS5zZXRCYWNrZ3JvdW5kfHxcIm9wYXF1ZVwiKSx5LmdkLmRlZmF1bHRMYXlvdXQ9byhlLnRpbGVDbGFzcykseX19LHtcIi4uL2xpYlwiOjcwMX1dLDgzMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9wbG90X2FwaS90b19pbWFnZVwiKSxpPXQoXCIuLi9saWJcIiksYT10KFwiLi9maWxlc2F2ZXJcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI7cmV0dXJuIGkuaXNQbGFpbk9iamVjdCh0KXx8KHI9aS5nZXRHcmFwaERpdih0KSksKGU9ZXx8e30pLmZvcm1hdD1lLmZvcm1hdHx8XCJwbmdcIixuZXcgUHJvbWlzZShmdW5jdGlvbihvLHMpe3ImJnIuX3NuYXBzaG90SW5Qcm9ncmVzcyYmcyhuZXcgRXJyb3IoXCJTbmFwc2hvdHRpbmcgYWxyZWFkeSBpbiBwcm9ncmVzcy5cIikpLGkuaXNJRSgpJiZcInN2Z1wiIT09ZS5mb3JtYXQmJnMobmV3IEVycm9yKFwiU29ycnkgSUUgZG9lcyBub3Qgc3VwcG9ydCBkb3dubG9hZGluZyBmcm9tIGNhbnZhcy4gVHJ5IHtmb3JtYXQ6J3N2Zyd9IGluc3RlYWQuXCIpKSxyJiYoci5fc25hcHNob3RJblByb2dyZXNzPSEwKTt2YXIgbD1uKHQsZSksYz1lLmZpbGVuYW1lfHx0LmZufHxcIm5ld3Bsb3RcIjtjKz1cIi5cIitlLmZvcm1hdCxsLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIHImJihyLl9zbmFwc2hvdEluUHJvZ3Jlc3M9ITEpLGEodCxjKX0pLnRoZW4oZnVuY3Rpb24odCl7byh0KX0pLmNhdGNoKGZ1bmN0aW9uKHQpe3ImJihyLl9zbmFwc2hvdEluUHJvZ3Jlc3M9ITEpLHModCl9KX0pfX0se1wiLi4vbGliXCI6NzAxLFwiLi4vcGxvdF9hcGkvdG9faW1hZ2VcIjo3NDIsXCIuL2ZpbGVzYXZlclwiOjgzMn1dLDgzMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpLG49XCJkb3dubG9hZFwiaW4gcixpPS9WZXJzaW9uXFwvW1xcZFxcLl0rLipTYWZhcmkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGEsbyl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvciYmL01TSUUgWzEtOV1cXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJm8obmV3IEVycm9yKFwiSUUgPCAxMCB1bnN1cHBvcnRlZFwiKSksaSYmKGRvY3VtZW50LmxvY2F0aW9uLmhyZWY9XCJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiK3Quc2xpY2UodC5zZWFyY2goL1ssO10vKSksYShlKSksZXx8KGU9XCJkb3dubG9hZFwiKSxuJiYoci5ocmVmPXQsci5kb3dubG9hZD1lLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQociksci5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQociksYShlKSksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvciYmbmF2aWdhdG9yLm1zU2F2ZUJsb2Ipe3ZhciBzPXQuc3BsaXQoL15kYXRhOmltYWdlXFwvc3ZnXFwreG1sLC8pWzFdLGw9ZGVjb2RlVVJJQ29tcG9uZW50KHMpO25hdmlnYXRvci5tc1NhdmVCbG9iKG5ldyBCbG9iKFtsXSksZSksYShlKX1vKG5ldyBFcnJvcihcImRvd25sb2FkIGVycm9yXCIpKX0pfX0se31dLDgzMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IuZ2V0RGVsYXk9ZnVuY3Rpb24odCl7cmV0dXJuIHQuX2hhcyYmKHQuX2hhcyhcImdsM2RcIil8fHQuX2hhcyhcImdsMmRcIil8fHQuX2hhcyhcIm1hcGJveFwiKSk/NTAwOjB9LHIuZ2V0UmVkcmF3RnVuYz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0fHx7fTtpZighKCEoZS5faGFzJiZlLl9oYXMoXCJwb2xhclwiKSkmJnQuZGF0YSYmdC5kYXRhWzBdJiZ0LmRhdGFbMF0ucikpcmV0dXJuIGZ1bmN0aW9uKCl7KHQuY2FsY2RhdGF8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RbMF0mJnRbMF0udCYmdFswXS50LmNiJiZ0WzBdLnQuY2IoKX0pfX19LHt9XSw4MzQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9oZWxwZXJzXCIpLGk9e2dldERlbGF5Om4uZ2V0RGVsYXksZ2V0UmVkcmF3RnVuYzpuLmdldFJlZHJhd0Z1bmMsY2xvbmU6dChcIi4vY2xvbmVwbG90XCIpLHRvU1ZHOnQoXCIuL3Rvc3ZnXCIpLHN2Z1RvSW1nOnQoXCIuL3N2Z3RvaW1nXCIpLHRvSW1hZ2U6dChcIi4vdG9pbWFnZVwiKSxkb3dubG9hZEltYWdlOnQoXCIuL2Rvd25sb2FkXCIpfTtlLmV4cG9ydHM9aX0se1wiLi9jbG9uZXBsb3RcIjo4MzAsXCIuL2Rvd25sb2FkXCI6ODMxLFwiLi9oZWxwZXJzXCI6ODMzLFwiLi9zdmd0b2ltZ1wiOjgzNSxcIi4vdG9pbWFnZVwiOjgzNixcIi4vdG9zdmdcIjo4Mzd9XSw4MzU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vbGliXCIpLGk9dChcImV2ZW50c1wiKS5FdmVudEVtaXR0ZXI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZW1pdHRlcnx8bmV3IGkscj1uZXcgUHJvbWlzZShmdW5jdGlvbihpLGEpe3ZhciBvPXdpbmRvdy5JbWFnZSxzPXQuc3ZnLGw9dC5mb3JtYXR8fFwicG5nXCI7aWYobi5pc0lFKCkmJlwic3ZnXCIhPT1sKXt2YXIgYz1uZXcgRXJyb3IoXCJTb3JyeSBJRSBkb2VzIG5vdCBzdXBwb3J0IGRvd25sb2FkaW5nIGZyb20gY2FudmFzLiBUcnkge2Zvcm1hdDonc3ZnJ30gaW5zdGVhZC5cIik7cmV0dXJuIGEoYyksdC5wcm9taXNlP3I6ZS5lbWl0KFwiZXJyb3JcIixjKX12YXIgdT10LmNhbnZhcyxoPXQuc2NhbGV8fDEsZj10LndpZHRofHwzMDAscD10LmhlaWdodHx8MTUwLGQ9aCpmLGc9aCpwLHY9dS5nZXRDb250ZXh0KFwiMmRcIiksbT1uZXcgbyx5PVwiZGF0YTppbWFnZS9zdmcreG1sLFwiK2VuY29kZVVSSUNvbXBvbmVudChzKTt1LndpZHRoPWQsdS5oZWlnaHQ9ZyxtLm9ubG9hZD1mdW5jdGlvbigpe3ZhciByO3N3aXRjaChcInN2Z1wiIT09bCYmdi5kcmF3SW1hZ2UobSwwLDAsZCxnKSxsKXtjYXNlXCJqcGVnXCI6cj11LnRvRGF0YVVSTChcImltYWdlL2pwZWdcIik7YnJlYWs7Y2FzZVwicG5nXCI6cj11LnRvRGF0YVVSTChcImltYWdlL3BuZ1wiKTticmVhaztjYXNlXCJ3ZWJwXCI6cj11LnRvRGF0YVVSTChcImltYWdlL3dlYnBcIik7YnJlYWs7Y2FzZVwic3ZnXCI6cj15O2JyZWFrO2RlZmF1bHQ6dmFyIG49XCJJbWFnZSBmb3JtYXQgaXMgbm90IGpwZWcsIHBuZywgc3ZnIG9yIHdlYnAuXCI7aWYoYShuZXcgRXJyb3IobikpLCF0LnByb21pc2UpcmV0dXJuIGUuZW1pdChcImVycm9yXCIsbil9aShyKSx0LnByb21pc2V8fGUuZW1pdChcInN1Y2Nlc3NcIixyKX0sbS5vbmVycm9yPWZ1bmN0aW9uKHIpe2lmKGEociksIXQucHJvbWlzZSlyZXR1cm4gZS5lbWl0KFwiZXJyb3JcIixyKX0sbS5zcmM9eX0pO3JldHVybiB0LnByb21pc2U/cjplfX0se1wiLi4vbGliXCI6NzAxLGV2ZW50czo5NX1dLDgzNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJldmVudHNcIikuRXZlbnRFbWl0dGVyLGk9dChcIi4uL3JlZ2lzdHJ5XCIpLGE9dChcIi4uL2xpYlwiKSxvPXQoXCIuL2hlbHBlcnNcIikscz10KFwiLi9jbG9uZXBsb3RcIiksbD10KFwiLi90b3N2Z1wiKSxjPXQoXCIuL3N2Z3RvaW1nXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBuLHU9cyh0LHtmb3JtYXQ6XCJwbmdcIn0pLGg9dS5nZDtoLnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixoLnN0eWxlLmxlZnQ9XCItNTAwMHB4XCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoKTt2YXIgZj1vLmdldFJlZHJhd0Z1bmMoaCk7cmV0dXJuIGkuY2FsbChcInBsb3RcIixoLHUuZGF0YSx1LmxheW91dCx1LmNvbmZpZykudGhlbihmKS50aGVuKGZ1bmN0aW9uKCl7dmFyIHQ9by5nZXREZWxheShoLl9mdWxsTGF5b3V0KTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIHQ9bChoKSxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7bi5pZD1hLnJhbmRzdHIoKSwocj1jKHtmb3JtYXQ6ZS5mb3JtYXQsd2lkdGg6aC5fZnVsbExheW91dC53aWR0aCxoZWlnaHQ6aC5fZnVsbExheW91dC5oZWlnaHQsY2FudmFzOm4sZW1pdHRlcjpyLHN2Zzp0fSkpLmNsZWFuPWZ1bmN0aW9uKCl7aCYmZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChoKX19LHQpfSkuY2F0Y2goZnVuY3Rpb24odCl7ci5lbWl0KFwiZXJyb3JcIix0KX0pLHJ9fSx7XCIuLi9saWJcIjo3MDEsXCIuLi9yZWdpc3RyeVwiOjgyOSxcIi4vY2xvbmVwbG90XCI6ODMwLFwiLi9oZWxwZXJzXCI6ODMzLFwiLi9zdmd0b2ltZ1wiOjgzNSxcIi4vdG9zdmdcIjo4MzcsZXZlbnRzOjk1fV0sODM3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uL2xpYlwiKSxhPXQoXCIuLi9jb21wb25lbnRzL2RyYXdpbmdcIiksbz10KFwiLi4vY29tcG9uZW50cy9jb2xvclwiKSxzPXQoXCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiKSxsPS9cIi9nLGM9bmV3IFJlZ0V4cCgnKFwiVE9CRVNUUklQUEVEKXwoVE9CRVNUUklQUEVEXCIpJyxcImdcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgdSxoPXQuX2Z1bGxMYXlvdXQsZj1oLl9wYXBlcixwPWguX3RvcHBhcGVyLGQ9aC53aWR0aCxnPWguaGVpZ2h0O2YuaW5zZXJ0KFwicmVjdFwiLFwiOmZpcnN0LWNoaWxkXCIpLmNhbGwoYS5zZXRSZWN0LDAsMCxkLGcpLmNhbGwoby5maWxsLGgucGFwZXJfYmdjb2xvcik7dmFyIHY9aC5fYmFzZVBsb3RNb2R1bGVzfHxbXTtmb3IodT0wO3U8di5sZW5ndGg7dSsrKXt2YXIgbT12W3VdO20udG9TVkcmJm0udG9TVkcodCl9aWYocCl7dmFyIHk9cC5ub2RlKCkuY2hpbGROb2Rlcyx4PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHkpO2Zvcih1PTA7dTx4Lmxlbmd0aDt1Kyspe3ZhciBiPXhbdV07Yi5jaGlsZE5vZGVzLmxlbmd0aCYmZi5ub2RlKCkuYXBwZW5kQ2hpbGQoYil9fWguX2RyYWdnZXJzJiZoLl9kcmFnZ2Vycy5yZW1vdmUoKSxmLm5vZGUoKS5zdHlsZS5iYWNrZ3JvdW5kPVwiXCIsZi5zZWxlY3RBbGwoXCJ0ZXh0XCIpLmF0dHIoe1wiZGF0YS11bmZvcm1hdHRlZFwiOm51bGwsXCJkYXRhLW1hdGhcIjpudWxsfSkuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO2lmKFwiaGlkZGVuXCIhPT10aGlzLnN0eWxlLnZpc2liaWxpdHkmJlwibm9uZVwiIT09dGhpcy5zdHlsZS5kaXNwbGF5KXt0LnN0eWxlKHt2aXNpYmlsaXR5Om51bGwsZGlzcGxheTpudWxsfSk7dmFyIGU9dGhpcy5zdHlsZS5mb250RmFtaWx5O2UmJi0xIT09ZS5pbmRleE9mKCdcIicpJiZ0LnN0eWxlKFwiZm9udC1mYW1pbHlcIixlLnJlcGxhY2UobCxcIlRPQkVTVFJJUFBFRFwiKSl9ZWxzZSB0LnJlbW92ZSgpfSksZi5zZWxlY3RBbGwoXCIucG9pbnQsIC5zY2F0dGVycHRzLCAubGVnZW5kZmlsbD5wYXRoLCAubGVnZW5kbGluZXM+cGF0aCwgLmNiZmlsbFwiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT10aGlzLnN0eWxlLmZpbGw7ZSYmLTEhPT1lLmluZGV4T2YoXCJ1cmwoXCIpJiZ0LnN0eWxlKFwiZmlsbFwiLGUucmVwbGFjZShsLFwiVE9CRVNUUklQUEVEXCIpKTt2YXIgcj10aGlzLnN0eWxlLnN0cm9rZTtyJiYtMSE9PXIuaW5kZXhPZihcInVybChcIikmJnQuc3R5bGUoXCJzdHJva2VcIixyLnJlcGxhY2UobCxcIlRPQkVTVFJJUFBFRFwiKSl9KSxcInBkZlwiIT09ZSYmXCJlcHNcIiE9PWV8fGYuc2VsZWN0QWxsKFwiI01hdGhKYXhfU1ZHX2dseXBocyBwYXRoXCIpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwwKSxmLm5vZGUoKS5zZXRBdHRyaWJ1dGVOUyhzLnhtbG5zLFwieG1sbnNcIixzLnN2ZyksZi5ub2RlKCkuc2V0QXR0cmlidXRlTlMocy54bWxucyxcInhtbG5zOnhsaW5rXCIscy54bGluayksXCJzdmdcIj09PWUmJnImJihmLmF0dHIoXCJ3aWR0aFwiLHIqZCksZi5hdHRyKFwiaGVpZ2h0XCIscipnKSxmLmF0dHIoXCJ2aWV3Qm94XCIsXCIwIDAgXCIrZCtcIiBcIitnKSk7dmFyIF89KG5ldyB3aW5kb3cuWE1MU2VyaWFsaXplcikuc2VyaWFsaXplVG9TdHJpbmcoZi5ub2RlKCkpO3JldHVybiBfPWZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KFwiYm9keVwiKS5hcHBlbmQoXCJkaXZcIikuc3R5bGUoe2Rpc3BsYXk6XCJub25lXCJ9KS5odG1sKFwiXCIpLHI9dC5yZXBsYWNlKC8oJlteO10qOykvZ2ksZnVuY3Rpb24odCl7cmV0dXJuXCImbHQ7XCI9PT10P1wiJiM2MDtcIjpcIiZydDtcIj09PXQ/XCImIzYyO1wiOi0xIT09dC5pbmRleE9mKFwiPFwiKXx8LTEhPT10LmluZGV4T2YoXCI+XCIpP1wiXCI6ZS5odG1sKHQpLnRleHQoKX0pO3JldHVybiBlLnJlbW92ZSgpLHJ9KF8pLF89KF89Xy5yZXBsYWNlKC8mKD8hXFx3Kzt8XFwjWzAtOV0rO3wgXFwjeFswLTlBLUZdKzspL2csXCImYW1wO1wiKSkucmVwbGFjZShjLFwiJ1wiKSxpLmlzSUUoKSYmKF89KF89KF89Xy5yZXBsYWNlKC9cIi9naSxcIidcIikpLnJlcGxhY2UoLyhcXCgnIykoW14nXSopKCdcXCkpL2dpLCcoXCIjJDJcIiknKSkucmVwbGFjZSgvKFxcXFwnKS9naSwnXCInKSksX319LHtcIi4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiOjY3OSxcIi4uL2xpYlwiOjcwMSxkMzoxNTV9XSw4Mzg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLm1lcmdlQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspdFtyXS5pPXI7bihlLnRleHQsdCxcInR4XCIpLG4oZS5ob3ZlcnRleHQsdCxcImh0eFwiKTt2YXIgaT1lLm1hcmtlcjtpZihpKXtuKGkub3BhY2l0eSx0LFwibW9cIiksbihpLmNvbG9yLHQsXCJtY1wiKTt2YXIgYT1pLmxpbmU7YSYmKG4oYS5jb2xvcix0LFwibWxjXCIpLG4oYS53aWR0aCx0LFwibWx3XCIpKX19fSx7XCIuLi8uLi9saWJcIjo3MDF9XSw4Mzk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIiksbD10KFwiLi9jb25zdGFudHMuanNcIiksYz10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LHU9cyh7ZWRpdFR5cGU6XCJjYWxjXCIsYXJyYXlPazohMCxjb2xvckVkaXRUeXBlOlwic3R5bGVcIn0pLGg9Yyh7fSxuLm1hcmtlci5saW5lLndpZHRoLHtkZmx0OjB9KSxmPWMoe3dpZHRoOmgsZWRpdFR5cGU6XCJjYWxjXCJ9LGEoXCJtYXJrZXIubGluZVwiKSkscD1jKHtsaW5lOmYsZWRpdFR5cGU6XCJjYWxjXCJ9LGEoXCJtYXJrZXJcIikse2NvbG9yYmFyOm8sb3BhY2l0eTp7dmFsVHlwZTpcIm51bWJlclwiLGFycmF5T2s6ITAsZGZsdDoxLG1pbjowLG1heDoxLGVkaXRUeXBlOlwic3R5bGVcIn19KTtlLmV4cG9ydHM9e3g6bi54LHgwOm4ueDAsZHg6bi5keCx5Om4ueSx5MDpuLnkwLGR5Om4uZHksdGV4dDpuLnRleHQsaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LGhvdmVydGVtcGxhdGU6aSh7fSx7a2V5czpsLmV2ZW50RGF0YUtleXN9KSx0ZXh0cG9zaXRpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImluc2lkZVwiLFwib3V0c2lkZVwiLFwiYXV0b1wiLFwibm9uZVwiXSxkZmx0Olwibm9uZVwiLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LHRleHRmb250OmMoe30sdSx7fSksaW5zaWRldGV4dGZvbnQ6Yyh7fSx1LHt9KSxvdXRzaWRldGV4dGZvbnQ6Yyh7fSx1LHt9KSxjb25zdHJhaW50ZXh0Ont2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJpbnNpZGVcIixcIm91dHNpZGVcIixcImJvdGhcIixcIm5vbmVcIl0sZGZsdDpcImJvdGhcIixlZGl0VHlwZTpcImNhbGNcIn0sY2xpcG9uYXhpczpjKHt9LG4uY2xpcG9uYXhpcyx7fSksb3JpZW50YXRpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInZcIixcImhcIl0sZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LGJhc2U6e3ZhbFR5cGU6XCJhbnlcIixkZmx0Om51bGwsYXJyYXlPazohMCxlZGl0VHlwZTpcImNhbGNcIn0sb2Zmc2V0Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDpudWxsLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDpudWxsLG1pbjowLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LG1hcmtlcjpwLG9mZnNldGdyb3VwOnt2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwiY2FsY1wifSxhbGlnbm1lbnRncm91cDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcImNhbGNcIn0sc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTpuLnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LGNvbG9yOm4uc2VsZWN0ZWQubWFya2VyLmNvbG9yLGVkaXRUeXBlOlwic3R5bGVcIn0sdGV4dGZvbnQ6bi5zZWxlY3RlZC50ZXh0Zm9udCxlZGl0VHlwZTpcInN0eWxlXCJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTpuLnVuc2VsZWN0ZWQubWFya2VyLm9wYWNpdHksY29sb3I6bi51bnNlbGVjdGVkLm1hcmtlci5jb2xvcixlZGl0VHlwZTpcInN0eWxlXCJ9LHRleHRmb250Om4udW5zZWxlY3RlZC50ZXh0Zm9udCxlZGl0VHlwZTpcInN0eWxlXCJ9LHI6bi5yLHQ6bi50LF9kZXByZWNhdGVkOntiYXJkaXI6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsZWRpdFR5cGU6XCJjYWxjXCIsdmFsdWVzOltcInZcIixcImhcIl19fX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCI6Nzc1LFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCI6MTA1MixcIi4vY29uc3RhbnRzLmpzXCI6ODQxfV0sODQwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzXCIpLmhhc0NvbG9yc2NhbGUsYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIiksbz10KFwiLi9hcnJheXNfdG9fY2FsY2RhdGFcIikscz10KFwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvblwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixsLGM9bi5nZXRGcm9tSWQodCxlLnhheGlzfHxcInhcIiksdT1uLmdldEZyb21JZCh0LGUueWF4aXN8fFwieVwiKTtcImhcIj09PWUub3JpZW50YXRpb24/KHI9Yy5tYWtlQ2FsY2RhdGEoZSxcInhcIiksbD11Lm1ha2VDYWxjZGF0YShlLFwieVwiKSk6KHI9dS5tYWtlQ2FsY2RhdGEoZSxcInlcIiksbD1jLm1ha2VDYWxjZGF0YShlLFwieFwiKSk7Zm9yKHZhciBoPU1hdGgubWluKGwubGVuZ3RoLHIubGVuZ3RoKSxmPW5ldyBBcnJheShoKSxwPTA7cDxoO3ArKylmW3BdPXtwOmxbcF0sczpyW3BdfSxlLmlkcyYmKGZbcF0uaWQ9U3RyaW5nKGUuaWRzW3BdKSk7cmV0dXJuIGkoZSxcIm1hcmtlclwiKSYmYSh0LGUse3ZhbHM6ZS5tYXJrZXIuY29sb3IsY29udGFpbmVyU3RyOlwibWFya2VyXCIsY0xldHRlcjpcImNcIn0pLGkoZSxcIm1hcmtlci5saW5lXCIpJiZhKHQsZSx7dmFsczplLm1hcmtlci5saW5lLmNvbG9yLGNvbnRhaW5lclN0cjpcIm1hcmtlci5saW5lXCIsY0xldHRlcjpcImNcIn0pLG8oZixlKSxzKGYsZSksZn19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCI6NTg2LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnNcIjo1ODksXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIjoxMDU0LFwiLi9hcnJheXNfdG9fY2FsY2RhdGFcIjo4Mzh9XSw4NDE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e2V2ZW50RGF0YUtleXM6W119fSx7fV0sODQyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL2xpYlwiKS5pc0FycmF5T3JUeXBlZEFycmF5LGE9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNLG89dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLHM9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGw9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiKS5nZXRBeGlzR3JvdXAsYz10KFwiLi9zaWV2ZS5qc1wiKTtmdW5jdGlvbiB1KHQsZSxyLG8pe2lmKG8ubGVuZ3RoKXt2YXIgdSxiLF8sdyxrPXQuX2Z1bGxMYXlvdXQuYmFybW9kZTtzd2l0Y2goZnVuY3Rpb24odCxlLHIsYSl7dmFyIG8scztmb3Iobz0wO288YS5sZW5ndGg7bysrKXt2YXIgbCxjPWFbb10sdT1jWzBdLnRyYWNlLGg9dS5iYXNlLGY9XCJoXCI9PT11Lm9yaWVudGF0aW9uP3UueGNhbGVuZGFyOnUueWNhbGVuZGFyLHA9XCJjYXRlZ29yeVwiPT09ci50eXBlfHxcIm11bHRpY2F0ZWdvcnlcIj09PXIudHlwZT9mdW5jdGlvbigpe3JldHVybiBudWxsfTpyLmQyYztpZihpKGgpKXtmb3Iocz0wO3M8TWF0aC5taW4oaC5sZW5ndGgsYy5sZW5ndGgpO3MrKylsPXAoaFtzXSwwLGYpLG4obCk/KGNbc10uYj0rbCxjW3NdLmhhc0I9MSk6Y1tzXS5iPTA7Zm9yKDtzPGMubGVuZ3RoO3MrKyljW3NdLmI9MH1lbHNle2w9cChoLDAsZik7dmFyIGQ9bihsKTtmb3IobD1kP2w6MCxzPTA7czxjLmxlbmd0aDtzKyspY1tzXS5iPWwsZCYmKGNbc10uaGFzQj0xKX19fSgwLDAscixvKSxrKXtjYXNlXCJvdmVybGF5XCI6aCh0LGUscixvKTticmVhaztjYXNlXCJncm91cFwiOmZvcih1PVtdLGI9W10sXz0wO188by5sZW5ndGg7XysrKXZvaWQgMD09PSh3PW9bX10pWzBdLnRyYWNlLm9mZnNldD9iLnB1c2godyk6dS5wdXNoKHcpO2IubGVuZ3RoJiZmdW5jdGlvbih0LGUscixuKXt2YXIgaT10Ll9mdWxsTGF5b3V0LmJhcm5vcm0sbz1uZXcgYyhuLHtzZXBOZWdWYWw6ITEsb3ZlcmxhcE5vTWVyZ2U6IWl9KTsoZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj10Ll9mdWxsTGF5b3V0LGk9bi5iYXJnYXAsYT1uLmJhcmdyb3VwZ2FwfHwwLG89ci5wb3NpdGlvbnMscz1yLmRpc3RpbmN0UG9zaXRpb25zLGM9ci5taW5EaWZmLHU9ci50cmFjZXMsaD11Lmxlbmd0aCxmPW8ubGVuZ3RoIT09cy5sZW5ndGgsdj1jKigxLWkpLG09bChuLGUuX2lkKSt1WzBdWzBdLnRyYWNlLm9yaWVudGF0aW9uLHk9bi5fYWxpZ25tZW50T3B0c1ttXXx8e30seD0wO3g8aDt4Kyspe3ZhciBiLF8sdz11W3hdLGs9d1swXS50cmFjZSxBPXlbay5hbGlnbm1lbnRncm91cF18fHt9LFQ9T2JqZWN0LmtleXMoQS5vZmZzZXRHcm91cHN8fHt9KS5sZW5ndGgsTT0oYj1UP3YvVDpmP3YvaDp2KSooMS1hKTtfPVQ/KCgyKmsuX29mZnNldEluZGV4KzEtVCkqYi1NKS8yOmY/KCgyKngrMS1oKSpiLU0pLzI6LU0vMjt2YXIgUz13WzBdLnQ7Uy5iYXJ3aWR0aD1NLFMucG9mZnNldD1fLFMuYmFyZ3JvdXB3aWR0aD12LFMuYmFyZGVsdGE9Y31yLmJpbldpZHRoPXVbMF1bMF0udC5iYXJ3aWR0aC8xMDAscChyKSxkKHQsZSxyKSxnKHQsZSxyLGYpfSkodCxlLG8pLGZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ci50cmFjZXMsaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz1uW2ldLHM9b1swXS50cmFjZTtpZih2b2lkIDA9PT1zLmJhc2UpZm9yKHZhciBsPW5ldyBjKFtvXSx7c2VwTmVnVmFsOiEwLG92ZXJsYXBOb01lcmdlOiEwfSksdT0wO3U8by5sZW5ndGg7dSsrKXt2YXIgaD1vW3VdO2lmKGgucCE9PWEpe3ZhciBmPWwucHV0KGgucCxoLmIraC5zKTtmJiYoaC5iPWYpfX19fSgwLDAsbyksaT8obSh0LHIsbykseSh0LHIsbykpOnYodCxyLG8pfSh0LGUscixiKSx1Lmxlbmd0aCYmaCh0LGUscix1KTticmVhaztjYXNlXCJzdGFja1wiOmNhc2VcInJlbGF0aXZlXCI6Zm9yKHU9W10sYj1bXSxfPTA7XzxvLmxlbmd0aDtfKyspdm9pZCAwPT09KHc9b1tfXSlbMF0udHJhY2UuYmFzZT9iLnB1c2godyk6dS5wdXNoKHcpO2IubGVuZ3RoJiZmdW5jdGlvbih0LGUscixuKXt2YXIgaT10Ll9mdWxsTGF5b3V0LG89aS5iYXJtb2RlLGw9aS5iYXJub3JtLHU9bmV3IGMobix7c2VwTmVnVmFsOlwicmVsYXRpdmVcIj09PW8sb3ZlcmxhcE5vTWVyZ2U6IShsfHxcInN0YWNrXCI9PT1vfHxcInJlbGF0aXZlXCI9PT1vKX0pO2YodCxlLHUpLGZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC5fZnVsbExheW91dC5iYXJub3JtLGk9eChlKSxvPXIudHJhY2VzLGw9MDtsPG8ubGVuZ3RoO2wrKyl7Zm9yKHZhciBjPW9bbF0sdT1jWzBdLnRyYWNlLGg9W10sZj0wO2Y8Yy5sZW5ndGg7ZisrKXt2YXIgcD1jW2ZdO2lmKHAucyE9PWEpe3ZhciBkPXIucHV0KHAucCxwLmIrcC5zKSxnPWQrcC5iK3AucztwLmI9ZCxwW2ldPWcsbnx8KGgucHVzaChnKSxwLmhhc0ImJmgucHVzaChkKSl9fW58fCh1Ll9leHRyZW1lc1tlLl9pZF09cy5maW5kRXh0cmVtZXMoZSxoLHt0b3plcm86ITAscGFkZGVkOiEwfSkpfX0odCxyLHUpO2Zvcih2YXIgaD0wO2g8bi5sZW5ndGg7aCsrKWZvcih2YXIgcD1uW2hdLGQ9MDtkPHAubGVuZ3RoO2QrKyl7dmFyIGc9cFtkXTtpZihnLnMhPT1hKXt2YXIgdj1nLmIrZy5zPT09dS5nZXQoZy5wLGcucyk7diYmKGcuX291dG1vc3Q9ITApfX1sJiZ5KHQscix1KX0odCxlLHIsYiksdS5sZW5ndGgmJmgodCxlLHIsdSl9IWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLG89eChlKSxzPXt9LGw9MS8wLGM9LTEvMDtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKWZvcihhPXRbcl0saT0wO2k8YS5sZW5ndGg7aSsrKXt2YXIgdT1hW2ldLnA7bih1KSYmKGw9TWF0aC5taW4obCx1KSxjPU1hdGgubWF4KGMsdSkpfXZhciBoPTFlNC8oYy1sKSxmPXMucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyhNYXRoLnJvdW5kKGgqKHQtbCkpKX07Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7KGE9dFtyXSlbMF0udC5leHRlbnRzPXM7dmFyIHA9YVswXS50LnBvZmZzZXQsZD1BcnJheS5pc0FycmF5KHApO2ZvcihpPTA7aTxhLmxlbmd0aDtpKyspe3ZhciBnPWFbaV0sdj1nW29dLWcudy8yO2lmKG4odikpe3ZhciBtPWdbb10rZy53LzIseT1mKGcucCk7c1t5XT9zW3ldPVtNYXRoLm1pbih2LHNbeV1bMF0pLE1hdGgubWF4KG0sc1t5XVsxXSldOnNbeV09W3YsbV19Zy5wMD1nLnArKGQ/cFtpXTpwKSxnLnAxPWcucDArZy53LGcuczA9Zy5iLGcuczE9Zy5zMCtnLnN9fX0obyxlKX19ZnVuY3Rpb24gaCh0LGUscixuKXtmb3IodmFyIGk9dC5fZnVsbExheW91dC5iYXJub3JtLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXSxzPW5ldyBjKFtvXSx7c2VwTmVnVmFsOiExLG92ZXJsYXBOb01lcmdlOiFpfSk7Zih0LGUscyksaT8obSh0LHIscykseSh0LHIscykpOnYodCxyLHMpfX1mdW5jdGlvbiBmKHQsZSxyKXtmb3IodmFyIG49dC5fZnVsbExheW91dCxpPW4uYmFyZ2FwLGE9bi5iYXJncm91cGdhcHx8MCxvPXIubWluRGlmZixzPXIudHJhY2VzLGw9byooMS1pKSxjPWwqKDEtYSksdT0tYy8yLGg9MDtoPHMubGVuZ3RoO2grKyl7dmFyIGY9c1toXVswXS50O2YuYmFyd2lkdGg9YyxmLnBvZmZzZXQ9dSxmLmJhcmdyb3Vwd2lkdGg9bCxmLmJhcmRlbHRhPW99ci5iaW5XaWR0aD1zWzBdWzBdLnQuYmFyd2lkdGgvMTAwLHAociksZCh0LGUsciksZyh0LGUscil9ZnVuY3Rpb24gcCh0KXt2YXIgZSxyLGE9dC50cmFjZXM7Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKyl7dmFyIG8scz1hW2VdLGw9c1swXSxjPWwudHJhY2UsdT1sLnQsaD1jLl9vZmZzZXR8fGMub2Zmc2V0LGY9dS5wb2Zmc2V0O2lmKGkoaCkpe2ZvcihvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGgsMCxzLmxlbmd0aCkscj0wO3I8by5sZW5ndGg7cisrKW4ob1tyXSl8fChvW3JdPWYpO2ZvcihyPW8ubGVuZ3RoO3I8cy5sZW5ndGg7cisrKW8ucHVzaChmKTt1LnBvZmZzZXQ9b31lbHNlIHZvaWQgMCE9PWgmJih1LnBvZmZzZXQ9aCk7dmFyIHA9Yy5fd2lkdGh8fGMud2lkdGgsZD11LmJhcndpZHRoO2lmKGkocCkpe3ZhciBnPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHAsMCxzLmxlbmd0aCk7Zm9yKHI9MDtyPGcubGVuZ3RoO3IrKyluKGdbcl0pfHwoZ1tyXT1kKTtmb3Iocj1nLmxlbmd0aDtyPHMubGVuZ3RoO3IrKylnLnB1c2goZCk7aWYodS5iYXJ3aWR0aD1nLHZvaWQgMD09PWgpe2ZvcihvPVtdLHI9MDtyPHMubGVuZ3RoO3IrKylvLnB1c2goZisoZC1nW3JdKS8yKTt1LnBvZmZzZXQ9b319ZWxzZSB2b2lkIDAhPT1wJiYodS5iYXJ3aWR0aD1wLHZvaWQgMD09PWgmJih1LnBvZmZzZXQ9ZisoZC1wKS8yKSl9fWZ1bmN0aW9uIGQodCxlLHIpe2Zvcih2YXIgbj1yLnRyYWNlcyxpPXgoZSksYT0wO2E8bi5sZW5ndGg7YSsrKWZvcih2YXIgbz1uW2FdLHM9b1swXS50LGw9cy5wb2Zmc2V0LGM9QXJyYXkuaXNBcnJheShsKSx1PXMuYmFyd2lkdGgsaD1BcnJheS5pc0FycmF5KHUpLGY9MDtmPG8ubGVuZ3RoO2YrKyl7dmFyIHA9b1tmXSxkPXAudz1oP3VbZl06dTtwW2ldPXAucCsoYz9sW2ZdOmwpK2QvMn19ZnVuY3Rpb24gZyh0LGUscixuKXt2YXIgaT1yLnRyYWNlcyxhPXIubWluRGlmZi8yO3MubWluRHRpY2soZSxyLm1pbkRpZmYsci5kaXN0aW5jdFBvc2l0aW9uc1swXSxuKTtmb3IodmFyIG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIGwsYyx1LGgsZj1pW29dLHA9ZlswXSxkPXAudHJhY2UsZz1bXTtmb3IoaD0wO2g8Zi5sZW5ndGg7aCsrKWM9KGw9ZltoXSkucC1hLHU9bC5wK2EsZy5wdXNoKGMsdSk7aWYoZC53aWR0aHx8ZC5vZmZzZXQpe3ZhciB2PXAudCxtPXYucG9mZnNldCx5PXYuYmFyd2lkdGgseD1BcnJheS5pc0FycmF5KG0pLGI9QXJyYXkuaXNBcnJheSh5KTtmb3IoaD0wO2g8Zi5sZW5ndGg7aCsrKXtsPWZbaF07dmFyIF89eD9tW2hdOm0sdz1iP3lbaF06eTt1PShjPWwucCtfKSt3LGcucHVzaChjLHUpfX1kLl9leHRyZW1lc1tlLl9pZF09cy5maW5kRXh0cmVtZXMoZSxnLHtwYWRkZWQ6ITF9KX19ZnVuY3Rpb24gdih0LGUscil7Zm9yKHZhciBuPXIudHJhY2VzLGk9eChlKSxhPTA7YTxuLmxlbmd0aDthKyspe2Zvcih2YXIgbz1uW2FdLGw9b1swXS50cmFjZSxjPVtdLHU9ITAsaD0wO2g8by5sZW5ndGg7aCsrKXt2YXIgZj1vW2hdLHA9Zi5iLGQ9cCtmLnM7ZltpXT1kLGMucHVzaChkKSxmLmhhc0ImJmMucHVzaChwKSxmLmhhc0ImJmYuYj4wJiZmLnM+MHx8KHU9ITEpfWwuX2V4dHJlbWVzW2UuX2lkXT1zLmZpbmRFeHRyZW1lcyhlLGMse3RvemVybzohdSxwYWRkZWQ6ITB9KX19ZnVuY3Rpb24gbSh0LGUscil7Zm9yKHZhciBuPXIudHJhY2VzLGk9MDtpPG4ubGVuZ3RoO2krKylmb3IodmFyIG89bltpXSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107bC5zIT09YSYmci5wdXQobC5wLGwuYitsLnMpfX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgaT10Ll9mdWxsTGF5b3V0LG89ci50cmFjZXMsbD14KGUpLGM9XCJmcmFjdGlvblwiPT09aS5iYXJub3JtPzE6MTAwLHU9Yy8xZTksaD1lLmwyYyhlLmMybCgwKSksZj1cInN0YWNrXCI9PT1pLmJhcm1vZGU/YzpoO2Z1bmN0aW9uIHAodCl7cmV0dXJuIG4oZS5jMmwodCkpJiYodDxoLXV8fHQ+Zit1fHwhbihoKSl9Zm9yKHZhciBkPTA7ZDxvLmxlbmd0aDtkKyspe2Zvcih2YXIgZz1vW2RdLHY9Z1swXS50cmFjZSxtPVtdLHk9ITAsYj0hMSxfPTA7XzxnLmxlbmd0aDtfKyspe3ZhciB3PWdbX107aWYody5zIT09YSl7dmFyIGs9TWF0aC5hYnMoYy9yLmdldCh3LnAsdy5zKSk7dy5iKj1rLHcucyo9azt2YXIgQT13LmIsVD1BK3cuczt3W2xdPVQsbS5wdXNoKFQpLGI9Ynx8cChUKSx3Lmhhc0ImJihtLnB1c2goQSksYj1ifHxwKEEpKSx3Lmhhc0ImJncuYj4wJiZ3LnM+MHx8KHk9ITEpfX12Ll9leHRyZW1lc1tlLl9pZF09cy5maW5kRXh0cmVtZXMoZSxtLHt0b3plcm86IXkscGFkZGVkOmJ9KX19ZnVuY3Rpb24geCh0KXtyZXR1cm4gdC5faWQuY2hhckF0KDApfWUuZXhwb3J0cz17Y3Jvc3NUcmFjZUNhbGM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS54YXhpcyxuPWUueWF4aXMsaT10Ll9mdWxsRGF0YSxhPXQuY2FsY2RhdGEscz1bXSxsPVtdLGM9MDtjPGkubGVuZ3RoO2MrKyl7dmFyIGg9aVtjXTshMD09PWgudmlzaWJsZSYmby50cmFjZUlzKGgsXCJiYXJcIikmJmgueGF4aXM9PT1yLl9pZCYmaC55YXhpcz09PW4uX2lkJiYoXCJoXCI9PT1oLm9yaWVudGF0aW9uP3MucHVzaChhW2NdKTpsLnB1c2goYVtjXSkpfXUodCxyLG4sbCksdSh0LG4scixzKX0sc2V0R3JvdXBQb3NpdGlvbnM6dX19LHtcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiOjc1MixcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9zaWV2ZS5qc1wiOjg1MSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sODQzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGE9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLG89dChcIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHNcIikscz10KFwiLi9zdHlsZV9kZWZhdWx0c1wiKSxsPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIikuZ2V0QXhpc0dyb3VwLGM9dChcIi4vYXR0cmlidXRlc1wiKSx1PW4uY29lcmNlRm9udDtmdW5jdGlvbiBoKHQsZSxyLG4pe3ZhciBpPWUub3JpZW50YXRpb24sYT1lW3t2OlwieFwiLGg6XCJ5XCJ9W2ldK1wiYXhpc1wiXSxvPWwocixhKStpLHM9ci5fYWxpZ25tZW50T3B0c3x8e30sYz1uKFwiYWxpZ25tZW50Z3JvdXBcIiksdT1zW29dO3V8fCh1PXNbb109e30pO3ZhciBoPXVbY107aD9oLnRyYWNlcy5wdXNoKGUpOmg9dVtjXT17dHJhY2VzOltlXSxhbGlnbm1lbnRJbmRleDpPYmplY3Qua2V5cyh1KS5sZW5ndGgsb2Zmc2V0R3JvdXBzOnt9fTt2YXIgZj1uKFwib2Zmc2V0Z3JvdXBcIikscD1oLm9mZnNldEdyb3VwcyxkPXBbZl07ZiYmKGR8fChkPXBbZl09e29mZnNldEluZGV4Ok9iamVjdC5rZXlzKHApLmxlbmd0aH0pLGUuX29mZnNldEluZGV4PWQub2Zmc2V0SW5kZXgpfWZ1bmN0aW9uIGYodCxlLHIsaSxhKXt2YXIgbz1pKFwidGV4dHBvc2l0aW9uXCIpLHM9QXJyYXkuaXNBcnJheShvKXx8XCJhdXRvXCI9PT1vLGw9c3x8XCJvdXRzaWRlXCI9PT1vO2lmKHN8fFwiaW5zaWRlXCI9PT1vfHxsKXt2YXIgYz11KGksXCJ0ZXh0Zm9udFwiLHIuZm9udCksaD1uLmV4dGVuZEZsYXQoe30sYyk7ISh0LnRleHRmb250JiZ0LnRleHRmb250LmNvbG9yKSYmZGVsZXRlIGguY29sb3IsdShpLFwiaW5zaWRldGV4dGZvbnRcIixoKSxsJiZ1KGksXCJvdXRzaWRldGV4dGZvbnRcIixjKSxpKFwiY29uc3RyYWludGV4dFwiKSxhJiYoaShcInNlbGVjdGVkLnRleHRmb250LmNvbG9yXCIpLGkoXCJ1bnNlbGVjdGVkLnRleHRmb250LmNvbG9yXCIpKSxpKFwiY2xpcG9uYXhpc1wiKX19ZS5leHBvcnRzPXtzdXBwbHlEZWZhdWx0czpmdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiB1KHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxjLHIsaSl9aWYobyh0LGUsbCx1KSl7dShcIm9yaWVudGF0aW9uXCIsZS54JiYhZS55P1wiaFwiOlwidlwiKSx1KFwiYmFzZVwiKSx1KFwib2Zmc2V0XCIpLHUoXCJ3aWR0aFwiKSx1KFwidGV4dFwiKSx1KFwiaG92ZXJ0ZXh0XCIpLHUoXCJob3ZlcnRlbXBsYXRlXCIpLGYodCwwLGwsdSwhMCkscyh0LGUsdSxyLGwpO3ZhciBoPShlLm1hcmtlci5saW5lfHx7fSkuY29sb3IscD1hLmdldENvbXBvbmVudE1ldGhvZChcImVycm9yYmFyc1wiLFwic3VwcGx5RGVmYXVsdHNcIik7cCh0LGUsaHx8aS5kZWZhdWx0TGluZSx7YXhpczpcInlcIn0pLHAodCxlLGh8fGkuZGVmYXVsdExpbmUse2F4aXM6XCJ4XCIsaW5oZXJpdDpcInlcIn0pLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHUpfWVsc2UgZS52aXNpYmxlPSExfSxjcm9zc1RyYWNlRGVmYXVsdHM6ZnVuY3Rpb24odCxlKXt2YXIgcjtmdW5jdGlvbiBpKHQpe3JldHVybiBuLmNvZXJjZShyLl9pbnB1dCxyLGMsdCl9aWYoXCJncm91cFwiPT09ZS5iYXJtb2RlKWZvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKVwiYmFyXCI9PT0ocj10W2FdKS50eXBlJiYoci5faW5wdXQsaCgwLHIsZSxpKSl9LGhhbmRsZUdyb3VwaW5nRGVmYXVsdHM6aCxoYW5kbGVUZXh0OmZ9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCI6NzUyLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzXCI6MTA3OCxcIi4vYXR0cmlidXRlc1wiOjgzOSxcIi4vc3R5bGVfZGVmYXVsdHNcIjo4NTN9XSw4NDQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwidGlueWNvbG9yMlwiKTtyLmNvZXJjZVN0cmluZz1mdW5jdGlvbih0LGUscil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpe2lmKGV8fCF0Lm5vQmxhbmspcmV0dXJuIGV9ZWxzZSBpZihcIm51bWJlclwiPT10eXBlb2YgZSYmIXQuc3RyaWN0KXJldHVybiBTdHJpbmcoZSk7cmV0dXJuIHZvaWQgMCE9PXI/cjp0LmRmbHR9LHIuY29lcmNlTnVtYmVyPWZ1bmN0aW9uKHQsZSxyKXtpZihuKGUpKXtlPStlO3ZhciBpPXQubWluLGE9dC5tYXg7aWYoISh2b2lkIDAhPT1pJiZlPGl8fHZvaWQgMCE9PWEmJmU+YSkpcmV0dXJuIGV9cmV0dXJuIHZvaWQgMCE9PXI/cjp0LmRmbHR9LHIuY29lcmNlQ29sb3I9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBpKGUpLmlzVmFsaWQoKT9lOnZvaWQgMCE9PXI/cjp0LmRmbHR9LHIuY29lcmNlRW51bWVyYXRlZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQuY29lcmNlTnVtYmVyJiYoZT0rZSksLTEhPT10LnZhbHVlcy5pbmRleE9mKGUpP2U6dm9pZCAwIT09cj9yOnQuZGZsdH0sci5nZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBBcnJheS5pc0FycmF5KHQpP2U8dC5sZW5ndGgmJihyPXRbZV0pOnI9dCxyfX0se1wiZmFzdC1pc251bWVyaWNcIjoyMjIsdGlueWNvbG9yMjo1MjJ9XSw4NDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxpPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLG89dChcIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0XCIpO2Z1bmN0aW9uIHModCxlLHIsaSl7dmFyIGEscyxsLGMsdSxoLGYscD10LmNkLGQ9cFswXS50cmFjZSxnPXBbMF0udCx2PVwiY2xvc2VzdFwiPT09aSxtPXQubWF4SG92ZXJEaXN0YW5jZSx5PXQubWF4U3Bpa2VEaXN0YW5jZTtmdW5jdGlvbiB4KHQpe3JldHVybiB0W2xdLXQudy8yfWZ1bmN0aW9uIGIodCl7cmV0dXJuIHRbbF0rdC53LzJ9dmFyIF89dj94OmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1pbih4KHQpLHQucC1nLmJhcmRlbHRhLzIpfSx3PXY/YjpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoYih0KSx0LnArZy5iYXJkZWx0YS8yKX07ZnVuY3Rpb24gayh0LGUpe3JldHVybiBuLmluYm94KHQtYSxlLWEsbStNYXRoLm1pbigxLE1hdGguYWJzKGUtdCkvZiktMSl9ZnVuY3Rpb24gQSh0KXtyZXR1cm4gayhfKHQpLHcodCkpfWZ1bmN0aW9uIFQodCl7cmV0dXJuIG4uaW5ib3godC5iLXMsdFtjXS1zLG0rKHRbY10tcykvKHRbY10tdC5iKS0xKX1cImhcIj09PWQub3JpZW50YXRpb24/KGE9cixzPWUsbD1cInlcIixjPVwieFwiLHU9VCxoPUEpOihhPWUscz1yLGw9XCJ4XCIsYz1cInlcIixoPVQsdT1BKTt2YXIgTT10W2wrXCJhXCJdLFM9dFtjK1wiYVwiXTtmPU1hdGguYWJzKE0ucjJjKE0ucmFuZ2VbMV0pLU0ucjJjKE0ucmFuZ2VbMF0pKTt2YXIgRT1uLmdldERpc3RhbmNlRnVuY3Rpb24oaSx1LGgsZnVuY3Rpb24odCl7cmV0dXJuKHUodCkraCh0KSkvMn0pO2lmKG4uZ2V0Q2xvc2VzdChwLEUsdCksITEhPT10LmluZGV4KXt2fHwoXz1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5taW4oeCh0KSx0LnAtZy5iYXJncm91cHdpZHRoLzIpfSx3PWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heChiKHQpLHQucCtnLmJhcmdyb3Vwd2lkdGgvMil9KTt2YXIgQz1wW3QuaW5kZXhdLEw9ZC5iYXNlP0MuYitDLnM6Qy5zO3RbYytcIjBcIl09dFtjK1wiMVwiXT1TLmMycChDW2NdLCEwKSx0W2MrXCJMYWJlbFZhbFwiXT1MO3ZhciB6PWcuZXh0ZW50c1tnLmV4dGVudHMucm91bmQoQy5wKV07cmV0dXJuIHRbbCtcIjBcIl09TS5jMnAodj9fKEMpOnpbMF0sITApLHRbbCtcIjFcIl09TS5jMnAodj93KEMpOnpbMV0sITApLHRbbCtcIkxhYmVsVmFsXCJdPUMucCx0LnNwaWtlRGlzdGFuY2U9KFQoQykrZnVuY3Rpb24odCl7cmV0dXJuIGsoeCh0KSxiKHQpKX0oQykpLzIreS1tLHRbbCtcIlNwaWtlXCJdPU0uYzJwKEMucCwhMCksbyhDLGQsdCksdC5ob3ZlcnRlbXBsYXRlPWQuaG92ZXJ0ZW1wbGF0ZSx0fX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9ZS5tY2N8fHQubWFya2VyLmNvbG9yLG49ZS5tbGNjfHx0Lm1hcmtlci5saW5lLmNvbG9yLGk9ZS5tbHd8fHQubWFya2VyLmxpbmUud2lkdGg7cmV0dXJuIGEub3BhY2l0eShyKT9yOmEub3BhY2l0eShuKSYmaT9uOnZvaWQgMH1lLmV4cG9ydHM9e2hvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXModCxlLHIsbik7aWYoYSl7dmFyIG89YS5jZCxjPW9bMF0udHJhY2UsdT1vW2EuaW5kZXhdO3JldHVybiBhLmNvbG9yPWwoYyx1KSxpLmdldENvbXBvbmVudE1ldGhvZChcImVycm9yYmFyc1wiLFwiaG92ZXJJbmZvXCIpKHUsYyxhKSxbYV19fSxob3Zlck9uQmFyczpzLGdldFRyYWNlQ29sb3I6bH19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2Z4XCI6NjE3LFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dFwiOjEwNjB9XSw4NDY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLmxheW91dEF0dHJpYnV0ZXM9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKS5zdXBwbHlEZWZhdWx0cyxuLmNyb3NzVHJhY2VEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKS5jcm9zc1RyYWNlRGVmYXVsdHMsbi5zdXBwbHlMYXlvdXREZWZhdWx0cz10KFwiLi9sYXlvdXRfZGVmYXVsdHNcIiksbi5jYWxjPXQoXCIuL2NhbGNcIiksbi5jcm9zc1RyYWNlQ2FsYz10KFwiLi9jcm9zc190cmFjZV9jYWxjXCIpLmNyb3NzVHJhY2VDYWxjLG4uY29sb3JiYXI9dChcIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyXCIpLG4uYXJyYXlzVG9DYWxjZGF0YT10KFwiLi9hcnJheXNfdG9fY2FsY2RhdGFcIiksbi5wbG90PXQoXCIuL3Bsb3RcIiksbi5zdHlsZT10KFwiLi9zdHlsZVwiKS5zdHlsZSxuLnN0eWxlT25TZWxlY3Q9dChcIi4vc3R5bGVcIikuc3R5bGVPblNlbGVjdCxuLmhvdmVyUG9pbnRzPXQoXCIuL2hvdmVyXCIpLmhvdmVyUG9pbnRzLG4uc2VsZWN0UG9pbnRzPXQoXCIuL3NlbGVjdFwiKSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cImJhclwiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiKSxuLmNhdGVnb3JpZXM9W1wiY2FydGVzaWFuXCIsXCJzdmdcIixcImJhclwiLFwib3JpZW50ZWRcIixcImVycm9yQmFyc09LXCIsXCJzaG93TGVnZW5kXCIsXCJ6b29tU2NhbGVcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIjo3NjAsXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiOjEwNzAsXCIuL2FycmF5c190b19jYWxjZGF0YVwiOjgzOCxcIi4vYXR0cmlidXRlc1wiOjgzOSxcIi4vY2FsY1wiOjg0MCxcIi4vY3Jvc3NfdHJhY2VfY2FsY1wiOjg0MixcIi4vZGVmYXVsdHNcIjo4NDMsXCIuL2hvdmVyXCI6ODQ1LFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjg0NyxcIi4vbGF5b3V0X2RlZmF1bHRzXCI6ODQ4LFwiLi9wbG90XCI6ODQ5LFwiLi9zZWxlY3RcIjo4NTAsXCIuL3N0eWxlXCI6ODUyfV0sODQ3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtiYXJtb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJzdGFja1wiLFwiZ3JvdXBcIixcIm92ZXJsYXlcIixcInJlbGF0aXZlXCJdLGRmbHQ6XCJncm91cFwiLGVkaXRUeXBlOlwiY2FsY1wifSxiYXJub3JtOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJcIixcImZyYWN0aW9uXCIsXCJwZXJjZW50XCJdLGRmbHQ6XCJcIixlZGl0VHlwZTpcImNhbGNcIn0sYmFyZ2FwOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZWRpdFR5cGU6XCJjYWxjXCJ9LGJhcmdyb3VwZ2FwOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifX19LHt9XSw4NDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksYT10KFwiLi4vLi4vbGliXCIpLG89dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBzKHIsbil7cmV0dXJuIGEuY29lcmNlKHQsZSxvLHIsbil9Zm9yKHZhciBsPSExLGM9ITEsdT0hMSxoPXt9LGY9cyhcImJhcm1vZGVcIikscD0wO3A8ci5sZW5ndGg7cCsrKXt2YXIgZD1yW3BdO2lmKG4udHJhY2VJcyhkLFwiYmFyXCIpJiZkLnZpc2libGUpe2lmKGw9ITAsXCJncm91cFwiPT09Zil7dmFyIGc9ZC54YXhpcytkLnlheGlzO2hbZ10mJih1PSEwKSxoW2ddPSEwfWlmKGQudmlzaWJsZSYmXCJoaXN0b2dyYW1cIj09PWQudHlwZSlcImNhdGVnb3J5XCIhPT1pLmdldEZyb21JZCh7X2Z1bGxMYXlvdXQ6ZX0sZFtcInZcIj09PWQub3JpZW50YXRpb24/XCJ4YXhpc1wiOlwieWF4aXNcIl0pLnR5cGUmJihjPSEwKX19bD8oXCJvdmVybGF5XCIhPT1mJiZzKFwiYmFybm9ybVwiKSxzKFwiYmFyZ2FwXCIsYyYmIXU/MDouMikscyhcImJhcmdyb3VwZ2FwXCIpKTpkZWxldGUgZS5iYXJtb2RlfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo4NDd9XSw4NDk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiZmFzdC1pc251bWVyaWNcIiksYT10KFwiLi4vLi4vbGliXCIpLG89dChcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGw9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxjPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSx1PXQoXCIuL2F0dHJpYnV0ZXNcIiksaD11LnRleHQsZj11LnRleHRwb3NpdGlvbixwPXQoXCIuL2hlbHBlcnNcIiksZD10KFwiLi9zdHlsZVwiKSxnPTM7ZnVuY3Rpb24gdih0LGUscixuLGksYSl7dmFyIG87cmV0dXJuIGk8MT9vPVwic2NhbGUoXCIraStcIikgXCI6KGk9MSxvPVwiXCIpLFwidHJhbnNsYXRlKFwiKyhyLWkqdCkrXCIgXCIrKG4taSplKStcIilcIitvKyhhP1wicm90YXRlKFwiK2ErXCIgXCIrdCtcIiBcIitlK1wiKSBcIjpcIlwiKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7dmFyIG09ZS54YXhpcyx5PWUueWF4aXMseD10Ll9mdWxsTGF5b3V0LGI9YS5tYWtlVHJhY2VHcm91cHModSxyLFwidHJhY2UgYmFyc1wiKS5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBjLHU9bi5zZWxlY3QodGhpcyksYj1yWzBdLF89Yi50cmFjZSx3PTA7XCJ3YXRlcmZhbGxcIj09PV8udHlwZSYmXy5jb25uZWN0b3IudmlzaWJsZSYmXCJiZXR3ZWVuXCI9PT1fLmNvbm5lY3Rvci5tb2RlJiYodz1fLmNvbm5lY3Rvci5saW5lLndpZHRoLzIpO3ZhciBrPVwiaFwiPT09Xy5vcmllbnRhdGlvbjtlLmlzUmFuZ2VQbG90fHwoYi5ub2RlMz11KTt2YXIgQT1hLmVuc3VyZVNpbmdsZSh1LFwiZ1wiLFwicG9pbnRzXCIpLnNlbGVjdEFsbChcImcucG9pbnRcIikuZGF0YShhLmlkZW50aXR5KTtBLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwicG9pbnRcIiwhMCksQS5leGl0KCkucmVtb3ZlKCksQS5lYWNoKGZ1bmN0aW9uKHUsYil7dmFyIEEsVCxNLFMsRT1uLnNlbGVjdCh0aGlzKTtrPyhNPXkuYzJwKHUucDAsITApLFM9eS5jMnAodS5wMSwhMCksQT1tLmMycCh1LnMwLCEwKSxUPW0uYzJwKHUuczEsITApLHUuY3Q9W1QsKE0rUykvMl0pOihBPW0uYzJwKHUucDAsITApLFQ9bS5jMnAodS5wMSwhMCksTT15LmMycCh1LnMwLCEwKSxTPXkuYzJwKHUuczEsITApLHUuY3Q9WyhBK1QpLzIsU10pO3ZhciBDLEwseixPPXUuaXNCbGFuaz0hKGkoQSkmJmkoVCkmJmkoTSkmJmkoUykmJkEhPT1UJiZNIT09Uyk7aWYodyYmKGs/KEEtPShjPVQ8QT8tMToxKSp3LFQrPWMqdyk6KE0tPShjPVM8TT8tMToxKSp3LFMrPWMqdykpLFwid2F0ZXJmYWxsXCI9PT1fLnR5cGUpe2lmKCFPKXt2YXIgST1fW3UuZGlyXS5tYXJrZXI7Qz1JLmxpbmUud2lkdGgsTD1JLmNvbG9yfXo9XCJ3YXRlcmZhbGxcIn1lbHNlIEM9KHUubWx3KzF8fF8ubWFya2VyLmxpbmUud2lkdGgrMXx8KHUudHJhY2U/dS50cmFjZS5tYXJrZXIubGluZS53aWR0aDowKSsxKS0xLEw9dS5tY3x8Xy5tYXJrZXIuY29sb3Isej1cImJhclwiO3ZhciBEPW4ucm91bmQoQy8yJTEsMiksUD14W3orXCJnYXBcIl0sUj14W3orXCJncm91cGdhcFwiXTtmdW5jdGlvbiBGKHQpe3JldHVybiAwPT09UCYmMD09PVI/bi5yb3VuZChNYXRoLnJvdW5kKHQpLUQsMik6dH1pZighdC5fY29udGV4dC5zdGF0aWNQbG90KXt2YXIgQj1zLm9wYWNpdHkoTCk8MXx8Qz4uMDE/RjpmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmFicyh0LWUpPj0yP0YodCk6dD5lP01hdGguY2VpbCh0KTpNYXRoLmZsb29yKHQpfTtBPUIoQSxUKSxUPUIoVCxBKSxNPUIoTSxTKSxTPUIoUyxNKX1hLmVuc3VyZVNpbmdsZShFLFwicGF0aFwiKS5zdHlsZShcInZlY3Rvci1lZmZlY3RcIixcIm5vbi1zY2FsaW5nLXN0cm9rZVwiKS5hdHRyKFwiZFwiLE8/XCJNMCwwWlwiOlwiTVwiK0ErXCIsXCIrTStcIlZcIitTK1wiSFwiK1QrXCJWXCIrTStcIlpcIikuY2FsbChsLnNldENsaXBVcmwsZS5sYXllckNsaXBJZCx0KSxmdW5jdGlvbih0LGUscixuLGkscyxjLHUpe3ZhciBtLHk9dC5fZnVsbExheW91dDtmdW5jdGlvbiB4KGUscixuKXt2YXIgaT1hLmVuc3VyZVNpbmdsZShlLFwidGV4dFwiKS50ZXh0KHIpLmF0dHIoe2NsYXNzOlwiYmFydGV4dCBiYXJ0ZXh0LVwiK20sdHJhbnNmb3JtOlwiXCIsXCJ0ZXh0LWFuY2hvclwiOlwibWlkZGxlXCIsXCJkYXRhLW5vdGV4XCI6MX0pLmNhbGwobC5mb250LG4pLmNhbGwoby5jb252ZXJ0VG9Uc3BhbnMsdCk7cmV0dXJuIGl9dmFyIGI9clswXS50cmFjZSxfPWIub3JpZW50YXRpb24sdz1mdW5jdGlvbih0LGUpe3ZhciByPXAuZ2V0VmFsdWUodC50ZXh0LGUpO3JldHVybiBwLmNvZXJjZVN0cmluZyhoLHIpfShiLG4pO209ZnVuY3Rpb24odCxlKXt2YXIgcj1wLmdldFZhbHVlKHQudGV4dHBvc2l0aW9uLGUpO3JldHVybiBwLmNvZXJjZUVudW1lcmF0ZWQoZixyKX0oYixuKTt2YXIgaz1cIndhdGVyZmFsbFwiPT09Yi50eXBlP1wid2F0ZXJmYWxsXCI6XCJiYXJcIixBPXlbaytcIm1vZGVcIl0sVD1cInN0YWNrXCI9PT1BfHxcInJlbGF0aXZlXCI9PT1BLE09cltuXSxTPSFUfHxNLl9vdXRtb3N0O2lmKCF3fHxcIm5vbmVcIj09PW18fE0uaXNCbGFuayYmKFwiYXV0b1wiPT09bXx8XCJpbnNpZGVcIj09PW0pKXJldHVybiB2b2lkIGUuc2VsZWN0KFwidGV4dFwiKS5yZW1vdmUoKTt2YXIgRSxDLEwseixPLEksRD15LmZvbnQsUD1kLmdldEJhckNvbG9yKHJbbl0sYiksUj1kLmdldEluc2lkZVRleHRGb250KGIsbixELFApLEY9ZC5nZXRPdXRzaWRlVGV4dEZvbnQoYixuLEQpLEI9TWF0aC5hYnMocy1pKS0yKmcsTj1NYXRoLmFicyh1LWMpLTIqZztcIm91dHNpZGVcIj09PW0mJihTfHxNLmhhc0J8fChtPVwiaW5zaWRlXCIpKTtpZihcImF1dG9cIj09PW0paWYoUyl7bT1cImluc2lkZVwiLEU9eChlLHcsUiksQz1sLmJCb3goRS5ub2RlKCkpLEw9Qy53aWR0aCx6PUMuaGVpZ2h0O3ZhciBqPUw+MCYmej4wLFY9TDw9QiYmejw9TixVPUw8PU4mJno8PUIscT1cImhcIj09PV8/Qj49TCooTi96KTpOPj16KihCL0wpO2omJihWfHxVfHxxKT9tPVwiaW5zaWRlXCI6KG09XCJvdXRzaWRlXCIsRS5yZW1vdmUoKSxFPW51bGwpfWVsc2UgbT1cImluc2lkZVwiO2lmKCFFJiYoRT14KGUsdyxcIm91dHNpZGVcIj09PW0/RjpSKSxDPWwuYkJveChFLm5vZGUoKSksTD1DLndpZHRoLHo9Qy5oZWlnaHQsTDw9MHx8ejw9MCkpcmV0dXJuIHZvaWQgRS5yZW1vdmUoKTtcIm91dHNpZGVcIj09PW0/KEk9XCJib3RoXCI9PT1iLmNvbnN0cmFpbnRleHR8fFwib3V0c2lkZVwiPT09Yi5jb25zdHJhaW50ZXh0LE89ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHMsbD1cImhcIj09PWE/TWF0aC5hYnMobi1yKTpNYXRoLmFicyhlLXQpO2w+MipnJiYocz1nKTt2YXIgYz0xO28mJihjPVwiaFwiPT09YT9NYXRoLm1pbigxLGwvaS5oZWlnaHQpOk1hdGgubWluKDEsbC9pLndpZHRoKSk7dmFyIHUsaCxmLHAsZD0oaS5sZWZ0K2kucmlnaHQpLzIsbT0oaS50b3AraS5ib3R0b20pLzI7dT1jKmkud2lkdGgsaD1jKmkuaGVpZ2h0LFwiaFwiPT09YT9lPHQ/KGY9ZS1zLXUvMixwPShyK24pLzIpOihmPWUrcyt1LzIscD0ocituKS8yKTpuPnI/KGY9KHQrZSkvMixwPW4rcytoLzIpOihmPSh0K2UpLzIscD1uLXMtaC8yKTtyZXR1cm4gdihkLG0sZixwLGMsITEpfShpLHMsYyx1LEMsXyxJKSk6KEk9XCJib3RoXCI9PT1iLmNvbnN0cmFpbnRleHR8fFwiaW5zaWRlXCI9PT1iLmNvbnN0cmFpbnRleHQsTz1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcyxsLGMsdSxoLGYscCxkPWkud2lkdGgsbT1pLmhlaWdodCx5PShpLmxlZnQraS5yaWdodCkvMix4PShpLnRvcCtpLmJvdHRvbSkvMixiPU1hdGguYWJzKGUtdCksXz1NYXRoLmFicyhuLXIpO2I+MipnJiZfPjIqZz8oYi09MiooaD1nKSxfLT0yKmgpOmg9MDtkPD1iJiZtPD1fPyhmPSExLHA9MSk6ZDw9XyYmbTw9Yj8oZj0hMCxwPTEpOmQ8bT09YjxfPyhmPSExLHA9bz9NYXRoLm1pbihiL2QsXy9tKToxKTooZj0hMCxwPW8/TWF0aC5taW4oXy9kLGIvbSk6MSk7ZiYmKGY9OTApO2Y/KHM9cCptLGw9cCpkKToocz1wKmQsbD1wKm0pO1wiaFwiPT09YT9lPHQ/KGM9ZStoK3MvMix1PShyK24pLzIpOihjPWUtaC1zLzIsdT0ocituKS8yKTpuPnI/KGM9KHQrZSkvMix1PW4taC1sLzIpOihjPSh0K2UpLzIsdT1uK2grbC8yKTtyZXR1cm4gdih5LHgsYyx1LHAsZil9KGkscyxjLHUsQyxfLEkpKTtFLmF0dHIoXCJ0cmFuc2Zvcm1cIixPKX0odCxFLHIsYixBLFQsTSxTKSxlLmxheWVyQ2xpcElkJiZsLmhpZGVPdXRzaWRlUmFuZ2VQb2ludCh1LEUuc2VsZWN0KFwidGV4dFwiKSxtLHksXy54Y2FsZW5kYXIsXy55Y2FsZW5kYXIpfSk7dmFyIFQ9ITE9PT1iLnRyYWNlLmNsaXBvbmF4aXM7bC5zZXRDbGlwVXJsKHUsVD9udWxsOmUubGF5ZXJDbGlwSWQsdCl9KTtjLmdldENvbXBvbmVudE1ldGhvZChcImVycm9yYmFyc1wiLFwicGxvdFwiKSh0LGIsZSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCI6NzI1LFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2F0dHJpYnV0ZXNcIjo4MzksXCIuL2hlbHBlcnNcIjo4NDQsXCIuL3N0eWxlXCI6ODUyLGQzOjE1NSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sODUwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10LmNkLGk9dC54YXhpcyxhPXQueWF4aXMsbz1bXTtpZighMT09PWUpZm9yKHI9MDtyPG4ubGVuZ3RoO3IrKyluW3JdLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgcz1uW3JdO2UuY29udGFpbnMocy5jdCwhMSxyLHQpPyhvLnB1c2goe3BvaW50TnVtYmVyOnIseDppLmMyZChzLngpLHk6YS5jMmQocy55KX0pLHMuc2VsZWN0ZWQ9MSk6cy5zZWxlY3RlZD0wfXJldHVybiBvfX0se31dLDg1MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1hO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKS5CQUROVU07ZnVuY3Rpb24gYSh0LGUpe3RoaXMudHJhY2VzPXQsdGhpcy5zZXBOZWdWYWw9ZS5zZXBOZWdWYWwsdGhpcy5vdmVybGFwTm9NZXJnZT1lLm92ZXJsYXBOb01lcmdlO2Zvcih2YXIgcj0xLzAsYT1bXSxvPTA7bzx0Lmxlbmd0aDtvKyspe2Zvcih2YXIgcz10W29dLGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIGM9c1tsXTtjLnAhPT1pJiZhLnB1c2goYy5wKX1zWzBdJiZzWzBdLndpZHRoMSYmKHI9TWF0aC5taW4oc1swXS53aWR0aDEscikpfXRoaXMucG9zaXRpb25zPWE7dmFyIHU9bi5kaXN0aW5jdFZhbHMoYSk7dGhpcy5kaXN0aW5jdFBvc2l0aW9ucz11LnZhbHMsMT09PXUudmFscy5sZW5ndGgmJnIhPT0xLzA/dGhpcy5taW5EaWZmPXI6dGhpcy5taW5EaWZmPU1hdGgubWluKHUubWluRGlmZixyKSx0aGlzLmJpbldpZHRoPXRoaXMubWluRGlmZix0aGlzLmJpbnM9e319YS5wcm90b3R5cGUucHV0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5nZXRMYWJlbCh0LGUpLG49dGhpcy5iaW5zW3JdfHwwO3JldHVybiB0aGlzLmJpbnNbcl09bitlLG59LGEucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2V0TGFiZWwodCxlKTtyZXR1cm4gdGhpcy5iaW5zW3JdfHwwfSxhLnByb3RvdHlwZS5nZXRMYWJlbD1mdW5jdGlvbih0LGUpe3JldHVybihlPDAmJnRoaXMuc2VwTmVnVmFsP1widlwiOlwiXlwiKSsodGhpcy5vdmVybGFwTm9NZXJnZT90Ok1hdGgucm91bmQodC90aGlzLmJpbldpZHRoKSl9fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vbGliXCI6NzAxfV0sODUyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLG89dChcIi4uLy4uL2xpYlwiKSxzPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxsPXQoXCIuL2F0dHJpYnV0ZXNcIiksYz1sLnRleHRmb250LHU9bC5pbnNpZGV0ZXh0Zm9udCxoPWwub3V0c2lkZXRleHRmb250LGY9dChcIi4vaGVscGVyc1wiKTtmdW5jdGlvbiBwKHQsZSxyKXthLnBvaW50U3R5bGUodC5zZWxlY3RBbGwoXCJwYXRoXCIpLGUsciksZCh0LGUscil9ZnVuY3Rpb24gZCh0LGUscil7dC5zZWxlY3RBbGwoXCJ0ZXh0XCIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGk9bi5zZWxlY3QodGhpcyksbz1nKGksdCxlLHIpO2EuZm9udChpLG8pfSl9ZnVuY3Rpb24gZyh0LGUscixuKXt2YXIgaT1uLl9mdWxsTGF5b3V0LmZvbnQsYT1yLnRleHRmb250O2lmKHQuY2xhc3NlZChcImJhcnRleHQtaW5zaWRlXCIpKXt2YXIgbz1iKGUscik7YT1tKHIsZS5pLGksbyl9ZWxzZSB0LmNsYXNzZWQoXCJiYXJ0ZXh0LW91dHNpZGVcIikmJihhPXkocixlLmksaSkpO3JldHVybiBhfWZ1bmN0aW9uIHYodCxlLHIpe3JldHVybiB4KGMsdC50ZXh0Zm9udCxlLHIpfWZ1bmN0aW9uIG0odCxlLHIsbil7dmFyIGE9dih0LGUscik7cmV0dXJuKHZvaWQgMD09PXQuX2lucHV0LnRleHRmb250fHx2b2lkIDA9PT10Ll9pbnB1dC50ZXh0Zm9udC5jb2xvcnx8QXJyYXkuaXNBcnJheSh0LnRleHRmb250LmNvbG9yKSYmdm9pZCAwPT09dC50ZXh0Zm9udC5jb2xvcltlXSkmJihhPXtjb2xvcjppLmNvbnRyYXN0KG4pLGZhbWlseTphLmZhbWlseSxzaXplOmEuc2l6ZX0pLHgodSx0Lmluc2lkZXRleHRmb250LGUsYSl9ZnVuY3Rpb24geSh0LGUscil7dmFyIG49dih0LGUscik7cmV0dXJuIHgoaCx0Lm91dHNpZGV0ZXh0Zm9udCxlLG4pfWZ1bmN0aW9uIHgodCxlLHIsbil7ZT1lfHx7fTt2YXIgaT1mLmdldFZhbHVlKGUuZmFtaWx5LHIpLGE9Zi5nZXRWYWx1ZShlLnNpemUsciksbz1mLmdldFZhbHVlKGUuY29sb3Iscik7cmV0dXJue2ZhbWlseTpmLmNvZXJjZVN0cmluZyh0LmZhbWlseSxpLG4uZmFtaWx5KSxzaXplOmYuY29lcmNlTnVtYmVyKHQuc2l6ZSxhLG4uc2l6ZSksY29sb3I6Zi5jb2VyY2VDb2xvcih0LmNvbG9yLG8sbi5jb2xvcil9fWZ1bmN0aW9uIGIodCxlKXtyZXR1cm5cIndhdGVyZmFsbFwiPT09ZS50eXBlP2VbdC5kaXJdLm1hcmtlci5jb2xvcjp0Lm1jfHxlLm1hcmtlci5jb2xvcn1lLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZT9lWzBdLm5vZGUzOm4uc2VsZWN0KHQpLnNlbGVjdEFsbChcImcuYmFybGF5ZXJcIikuc2VsZWN0QWxsKFwiZy50cmFjZVwiKSxpPXIuc2l6ZSgpLGE9dC5fZnVsbExheW91dDtyLnN0eWxlKFwib3BhY2l0eVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KS5lYWNoKGZ1bmN0aW9uKHQpeyhcInN0YWNrXCI9PT1hLmJhcm1vZGUmJmk+MXx8MD09PWEuYmFyZ2FwJiYwPT09YS5iYXJncm91cGdhcCYmIXRbMF0udHJhY2UubWFya2VyLmxpbmUud2lkdGgpJiZuLnNlbGVjdCh0aGlzKS5hdHRyKFwic2hhcGUtcmVuZGVyaW5nXCIsXCJjcmlzcEVkZ2VzXCIpfSksci5zZWxlY3RBbGwoXCJnLnBvaW50c1wiKS5lYWNoKGZ1bmN0aW9uKGUpe3Aobi5zZWxlY3QodGhpcyksZVswXS50cmFjZSx0KX0pLHMuZ2V0Q29tcG9uZW50TWV0aG9kKFwiZXJyb3JiYXJzXCIsXCJzdHlsZVwiKShyKX0sc3R5bGVUZXh0UG9pbnRzOmQsc3R5bGVPblNlbGVjdDpmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0ubm9kZTMsaT1lWzBdLnRyYWNlO2kuc2VsZWN0ZWRwb2ludHM/ZnVuY3Rpb24odCxlLHIpe2Euc2VsZWN0ZWRQb2ludFN0eWxlKHQuc2VsZWN0QWxsKFwicGF0aFwiKSxlKSxmdW5jdGlvbih0LGUscil7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBpLHM9bi5zZWxlY3QodGhpcyk7aWYodC5zZWxlY3RlZCl7aT1vLmV4dGVuZEZsYXQoe30sZyhzLHQsZSxyKSk7dmFyIGw9ZS5zZWxlY3RlZC50ZXh0Zm9udCYmZS5zZWxlY3RlZC50ZXh0Zm9udC5jb2xvcjtsJiYoaS5jb2xvcj1sKSxhLmZvbnQocyxpKX1lbHNlIGEuc2VsZWN0ZWRUZXh0U3R5bGUocyxlKX0pfSh0LnNlbGVjdEFsbChcInRleHRcIiksZSxyKX0ocixpLHQpOnAocixpLHQpfSxnZXRJbnNpZGVUZXh0Rm9udDptLGdldE91dHNpZGVUZXh0Rm9udDp5LGdldEJhckNvbG9yOmJ9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2F0dHJpYnV0ZXNcIjo4MzksXCIuL2hlbHBlcnNcIjo4NDQsZDM6MTU1fV0sODUzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnNcIikuaGFzQ29sb3JzY2FsZSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyl7cihcIm1hcmtlci5jb2xvclwiLG8pLGkodCxcIm1hcmtlclwiKSYmYSh0LGUscyxyLHtwcmVmaXg6XCJtYXJrZXIuXCIsY0xldHRlcjpcImNcIn0pLHIoXCJtYXJrZXIubGluZS5jb2xvclwiLG4uZGVmYXVsdExpbmUpLGkodCxcIm1hcmtlci5saW5lXCIpJiZhKHQsZSxzLHIse3ByZWZpeDpcIm1hcmtlci5saW5lLlwiLGNMZXR0ZXI6XCJjXCJ9KSxyKFwibWFya2VyLmxpbmUud2lkdGhcIikscihcIm1hcmtlci5vcGFjaXR5XCIpLHIoXCJzZWxlY3RlZC5tYXJrZXIuY29sb3JcIikscihcInVuc2VsZWN0ZWQubWFya2VyLmNvbG9yXCIpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiOjU4OCxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzXCI6NTg5fV0sODU0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxhPXQoXCIuLi9zY2F0dGVycG9sYXIvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi9iYXIvYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9e3I6YS5yLHRoZXRhOmEudGhldGEscjA6YS5yMCxkcjphLmRyLHRoZXRhMDphLnRoZXRhMCxkdGhldGE6YS5kdGhldGEsdGhldGF1bml0OmEudGhldGF1bml0LGJhc2U6aSh7fSxvLmJhc2Use30pLG9mZnNldDppKHt9LG8ub2Zmc2V0LHt9KSx3aWR0aDppKHt9LG8ud2lkdGgse30pLHRleHQ6aSh7fSxvLnRleHQse30pLGhvdmVydGV4dDppKHt9LG8uaG92ZXJ0ZXh0LHt9KSxtYXJrZXI6by5tYXJrZXIsaG92ZXJpbmZvOmEuaG92ZXJpbmZvLGhvdmVydGVtcGxhdGU6bigpLHNlbGVjdGVkOm8uc2VsZWN0ZWQsdW5zZWxlY3RlZDpvLnVuc2VsZWN0ZWR9fSx7XCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi9iYXIvYXR0cmlidXRlc1wiOjgzOSxcIi4uL3NjYXR0ZXJwb2xhci9hdHRyaWJ1dGVzXCI6MTExNH1dLDg1NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVyc1wiKS5oYXNDb2xvcnNjYWxlLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCIpLGE9dChcIi4uL2Jhci9hcnJheXNfdG9fY2FsY2RhdGFcIiksbz10KFwiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGNcIikuc2V0R3JvdXBQb3NpdGlvbnMscz10KFwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvblwiKSxsPXQoXCIuLi8uLi9yZWdpc3RyeVwiKS50cmFjZUlzLGM9dChcIi4uLy4uL2xpYlwiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17Y2FsYzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Ll9mdWxsTGF5b3V0LG89ZS5zdWJwbG90LGw9cltvXS5yYWRpYWxheGlzLGM9cltvXS5hbmd1bGFyYXhpcyx1PWwubWFrZUNhbGNkYXRhKGUsXCJyXCIpLGg9Yy5tYWtlQ2FsY2RhdGEoZSxcInRoZXRhXCIpLGY9ZS5fbGVuZ3RoLHA9bmV3IEFycmF5KGYpLGQ9dSxnPWgsdj0wO3Y8Zjt2KyspcFt2XT17cDpnW3ZdLHM6ZFt2XX07ZnVuY3Rpb24gbSh0KXt2YXIgcj1lW3RdO3ZvaWQgMCE9PXImJihlW1wiX1wiK3RdPUFycmF5LmlzQXJyYXkocik/Yy5tYWtlQ2FsY2RhdGEoZSx0KTpjLmQyYyhyLGUudGhldGF1bml0KSl9cmV0dXJuXCJsaW5lYXJcIj09PWMudHlwZSYmKG0oXCJ3aWR0aFwiKSxtKFwib2Zmc2V0XCIpKSxuKGUsXCJtYXJrZXJcIikmJmkodCxlLHt2YWxzOmUubWFya2VyLmNvbG9yLGNvbnRhaW5lclN0cjpcIm1hcmtlclwiLGNMZXR0ZXI6XCJjXCJ9KSxuKGUsXCJtYXJrZXIubGluZVwiKSYmaSh0LGUse3ZhbHM6ZS5tYXJrZXIubGluZS5jb2xvcixjb250YWluZXJTdHI6XCJtYXJrZXIubGluZVwiLGNMZXR0ZXI6XCJjXCJ9KSxhKHAsZSkscyhwLGUpLHB9LGNyb3NzVHJhY2VDYWxjOmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC5jYWxjZGF0YSxpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIHM9blthXSx1PXNbMF0udHJhY2U7ITA9PT11LnZpc2libGUmJmwodSxcImJhclwiKSYmdS5zdWJwbG90PT09ciYmaS5wdXNoKHMpfXZhciBoPWMoe30sZS5yYWRpYWxheGlzLHtfaWQ6XCJ4XCJ9KSxmPWUuYW5ndWxhcmF4aXM7byh7X2Z1bGxMYXlvdXQ6ZX0sZixoLGkpfX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCI6NTg2LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnNcIjo1ODksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL2Jhci9hcnJheXNfdG9fY2FsY2RhdGFcIjo4MzgsXCIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsY1wiOjg0MixcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIjoxMDU0fV0sODU2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi9zY2F0dGVycG9sYXIvZGVmYXVsdHNcIikuaGFuZGxlUlRoZXRhRGVmYXVsdHMsYT10KFwiLi4vYmFyL3N0eWxlX2RlZmF1bHRzXCIpLG89dChcIi4vYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWkodCxlLHMsbCk/KGwoXCJ0aGV0YXVuaXRcIiksbChcImJhc2VcIiksbChcIm9mZnNldFwiKSxsKFwid2lkdGhcIiksbChcInRleHRcIiksbChcImhvdmVydGV4dFwiKSxsKFwiaG92ZXJ0ZW1wbGF0ZVwiKSxhKHQsZSxsLHIscyksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsbCkpOmUudmlzaWJsZT0hMX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2Jhci9zdHlsZV9kZWZhdWx0c1wiOjg1MyxcIi4uL3NjYXR0ZXJwb2xhci9kZWZhdWx0c1wiOjExMTYsXCIuL2F0dHJpYnV0ZXNcIjo4NTR9XSw4NTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vYmFyL2hvdmVyXCIpLmdldFRyYWNlQ29sb3Isbz10KFwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHRcIikscz10KFwiLi4vc2NhdHRlcnBvbGFyL2hvdmVyXCIpLm1ha2VIb3ZlclBvaW50VGV4dCxsPXQoXCIuLi8uLi9wbG90cy9wb2xhci9oZWxwZXJzXCIpLmlzUHRJbnNpZGVQb2x5Z29uO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGM9dC5jZCx1PWNbMF0udHJhY2UsaD10LnN1YnBsb3QsZj1oLnJhZGlhbEF4aXMscD1oLmFuZ3VsYXJBeGlzLGQ9aC52YW5nbGVzLGc9ZD9sOmkuaXNQdEluc2lkZVNlY3Rvcix2PXQubWF4SG92ZXJEaXN0YW5jZSxtPXAuX3BlcmlvZHx8MipNYXRoLlBJLHk9TWF0aC5hYnMoZi5nMnAoTWF0aC5zcXJ0KGUqZStyKnIpKSkseD1NYXRoLmF0YW4yKHIsZSk7Zi5yYW5nZVswXT5mLnJhbmdlWzFdJiYoeCs9TWF0aC5QSSk7aWYobi5nZXRDbG9zZXN0KGMsZnVuY3Rpb24odCl7cmV0dXJuIGcoeSx4LFt0LnJwMCx0LnJwMV0sW3QudGhldGFnMCx0LnRoZXRhZzFdLGQpP3YrTWF0aC5taW4oMSxNYXRoLmFicyh0LnRoZXRhZzEtdC50aGV0YWcwKS9tKS0xKyh0LnJwMS15KS8odC5ycDEtdC5ycDApLTE6MS8wfSx0KSwhMSE9PXQuaW5kZXgpe3ZhciBiPWNbdC5pbmRleF07dC54MD10LngxPWIuY3RbMF0sdC55MD10LnkxPWIuY3RbMV07dmFyIF89aS5leHRlbmRGbGF0KHt9LGIse3I6Yi5zLHRoZXRhOmIucH0pO3JldHVybiBvKGIsdSx0KSxzKF8sdSxoLHQpLHQuaG92ZXJ0ZW1wbGF0ZT11LmhvdmVydGVtcGxhdGUsdC5jb2xvcj1hKHUsYiksdC54TGFiZWxWYWw9dC55TGFiZWxWYWw9dm9pZCAwLGIuczwwJiYodC5pZGVhbEFsaWduPVwibGVmdFwiKSxbdF19fX0se1wiLi4vLi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL3BvbGFyL2hlbHBlcnNcIjo4MTIsXCIuLi9iYXIvaG92ZXJcIjo4NDUsXCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dFwiOjEwNjAsXCIuLi9zY2F0dGVycG9sYXIvaG92ZXJcIjoxMTE3fV0sODU4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwidHJhY2VcIixuYW1lOlwiYmFycG9sYXJcIixiYXNlUGxvdE1vZHVsZTp0KFwiLi4vLi4vcGxvdHMvcG9sYXJcIiksY2F0ZWdvcmllczpbXCJwb2xhclwiLFwiYmFyXCIsXCJzaG93TGVnZW5kXCJdLGF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLHN1cHBseURlZmF1bHRzOnQoXCIuL2RlZmF1bHRzXCIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoXCIuL2xheW91dF9kZWZhdWx0c1wiKSxjYWxjOnQoXCIuL2NhbGNcIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KFwiLi9jYWxjXCIpLmNyb3NzVHJhY2VDYWxjLHBsb3Q6dChcIi4vcGxvdFwiKSxjb2xvcmJhcjp0KFwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXJcIiksc3R5bGU6dChcIi4uL2Jhci9zdHlsZVwiKS5zdHlsZSxob3ZlclBvaW50czp0KFwiLi9ob3ZlclwiKSxzZWxlY3RQb2ludHM6dChcIi4uL2Jhci9zZWxlY3RcIiksbWV0YTp7fX19LHtcIi4uLy4uL3Bsb3RzL3BvbGFyXCI6ODEzLFwiLi4vYmFyL3NlbGVjdFwiOjg1MCxcIi4uL2Jhci9zdHlsZVwiOjg1MixcIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyXCI6MTA3MCxcIi4vYXR0cmlidXRlc1wiOjg1NCxcIi4vY2FsY1wiOjg1NSxcIi4vZGVmYXVsdHNcIjo4NTYsXCIuL2hvdmVyXCI6ODU3LFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjg1OSxcIi4vbGF5b3V0X2RlZmF1bHRzXCI6ODYwLFwiLi9wbG90XCI6ODYxfV0sODU5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtiYXJtb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJzdGFja1wiLFwib3ZlcmxheVwiXSxkZmx0Olwic3RhY2tcIixlZGl0VHlwZTpcImNhbGNcIn0sYmFyZ2FwOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDouMSxtaW46MCxtYXg6MSxlZGl0VHlwZTpcImNhbGNcIn19fSx7fV0sODYwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGEsbz17fTtmdW5jdGlvbiBzKHIsbyl7cmV0dXJuIG4uY29lcmNlKHRbYV18fHt9LGVbYV0saSxyLG8pfWZvcih2YXIgbD0wO2w8ci5sZW5ndGg7bCsrKXt2YXIgYz1yW2xdO1wiYmFycG9sYXJcIj09PWMudHlwZSYmITA9PT1jLnZpc2libGUmJihvW2E9Yy5zdWJwbG90XXx8KHMoXCJiYXJtb2RlXCIpLHMoXCJiYXJnYXBcIiksb1thXT0xKSl9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjg1OX1dLDg2MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxhPXQoXCIuLi8uLi9saWJcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLHM9dChcIi4uLy4uL3Bsb3RzL3BvbGFyL2hlbHBlcnNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbD1lLnhheGlzLGM9ZS55YXhpcyx1PWUucmFkaWFsQXhpcyxoPWUuYW5ndWxhckF4aXMsZj1mdW5jdGlvbih0KXt2YXIgZT10LmN4eCxyPXQuY3l5O2lmKHQudmFuZ2xlcylyZXR1cm4gZnVuY3Rpb24obixpLG8sbCl7dmFyIGMsdTthLmFuZ2xlRGVsdGEobyxsKT4wPyhjPW8sdT1sKTooYz1sLHU9byk7dmFyIGg9cy5maW5kRW5jbG9zaW5nVmVydGV4QW5nbGVzKGMsdC52YW5nbGVzKVswXSxmPXMuZmluZEVuY2xvc2luZ1ZlcnRleEFuZ2xlcyh1LHQudmFuZ2xlcylbMV0scD1baCwoYyt1KS8yLGZdO3JldHVybiBzLnBhdGhQb2x5Z29uQW5udWx1cyhuLGksYyx1LHAsZSxyKX07cmV0dXJuIGZ1bmN0aW9uKHQsbixpLG8pe3JldHVybiBhLnBhdGhBbm51bHVzKHQsbixpLG8sZSxyKX19KGUpLHA9ZS5sYXllcnMuZnJvbnRwbG90LnNlbGVjdChcImcuYmFybGF5ZXJcIik7YS5tYWtlVHJhY2VHcm91cHMocCxyLFwidHJhY2UgYmFyc1wiKS5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBzPXJbMF0ubm9kZTM9bi5zZWxlY3QodGhpcykscD1hLmVuc3VyZVNpbmdsZShzLFwiZ1wiLFwicG9pbnRzXCIpLnNlbGVjdEFsbChcImcucG9pbnRcIikuZGF0YShhLmlkZW50aXR5KTtwLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5zdHlsZShcInZlY3Rvci1lZmZlY3RcIixcIm5vbi1zY2FsaW5nLXN0cm9rZVwiKS5zdHlsZShcInN0cm9rZS1taXRlcmxpbWl0XCIsMikuY2xhc3NlZChcInBvaW50XCIsITApLHAuZXhpdCgpLnJlbW92ZSgpLHAuZWFjaChmdW5jdGlvbih0KXt2YXIgZSxyPW4uc2VsZWN0KHRoaXMpLG89dC5ycDA9dS5jMnAodC5zMCkscz10LnJwMT11LmMycCh0LnMxKSxwPXQudGhldGFnMD1oLmMyZyh0LnAwKSxkPXQudGhldGFnMT1oLmMyZyh0LnAxKTtpZihpKG8pJiZpKHMpJiZpKHApJiZpKGQpJiZvIT09cyYmcCE9PWQpe3ZhciBnPXUuYzJnKHQuczEpLHY9KHArZCkvMjt0LmN0PVtsLmMycChnKk1hdGguY29zKHYpKSxjLmMycChnKk1hdGguc2luKHYpKV0sZT1mKG8scyxwLGQpfWVsc2UgZT1cIk0wLDBaXCI7YS5lbnN1cmVTaW5nbGUocixcInBhdGhcIikuYXR0cihcImRcIixlKX0pLG8uc2V0Q2xpcFVybChzLGUuX2hhc0NsaXBPbkF4aXNGYWxzZT9lLmNsaXBJZHMuZm9yVHJhY2VzOm51bGwsdCl9KX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL3BvbGFyL2hlbHBlcnNcIjo4MTIsZDM6MTU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw4NjI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uL2Jhci9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsbD1uLm1hcmtlcixjPWwubGluZTtlLmV4cG9ydHM9e3k6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LHg6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LHgwOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LHkwOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LG5hbWU6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0sdGV4dDpzKHt9LG4udGV4dCx7fSksaG92ZXJ0ZXh0OnMoe30sbi5ob3ZlcnRleHQse30pLGhvdmVydGVtcGxhdGU6byh7fSksd2hpc2tlcndpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDouNSxlZGl0VHlwZTpcImNhbGNcIn0sbm90Y2hlZDp7dmFsVHlwZTpcImJvb2xlYW5cIixlZGl0VHlwZTpcImNhbGNcIn0sbm90Y2h3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDouNSxkZmx0Oi4yNSxlZGl0VHlwZTpcImNhbGNcIn0sYm94cG9pbnRzOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhbGxcIixcIm91dGxpZXJzXCIsXCJzdXNwZWN0ZWRvdXRsaWVyc1wiLCExXSxkZmx0Olwib3V0bGllcnNcIixlZGl0VHlwZTpcImNhbGNcIn0sYm94bWVhbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6WyEwLFwic2RcIiwhMV0sZGZsdDohMSxlZGl0VHlwZTpcImNhbGNcIn0saml0dGVyOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZWRpdFR5cGU6XCJjYWxjXCJ9LHBvaW50cG9zOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOi0yLG1heDoyLGVkaXRUeXBlOlwiY2FsY1wifSxvcmllbnRhdGlvbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1widlwiLFwiaFwiXSxlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0sd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6XCJjYWxjXCJ9LG1hcmtlcjp7b3V0bGllcmNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OlwicmdiYSgwLCAwLCAwLCAwKVwiLGVkaXRUeXBlOlwic3R5bGVcIn0sc3ltYm9sOnMoe30sbC5zeW1ib2wse2FycmF5T2s6ITEsZWRpdFR5cGU6XCJwbG90XCJ9KSxvcGFjaXR5OnMoe30sbC5vcGFjaXR5LHthcnJheU9rOiExLGRmbHQ6MSxlZGl0VHlwZTpcInN0eWxlXCJ9KSxzaXplOnMoe30sbC5zaXplLHthcnJheU9rOiExLGVkaXRUeXBlOlwiY2FsY1wifSksY29sb3I6cyh7fSxsLmNvbG9yLHthcnJheU9rOiExLGVkaXRUeXBlOlwic3R5bGVcIn0pLGxpbmU6e2NvbG9yOnMoe30sYy5jb2xvcix7YXJyYXlPazohMSxkZmx0OmEuZGVmYXVsdExpbmUsZWRpdFR5cGU6XCJzdHlsZVwifSksd2lkdGg6cyh7fSxjLndpZHRoLHthcnJheU9rOiExLGRmbHQ6MCxlZGl0VHlwZTpcInN0eWxlXCJ9KSxvdXRsaWVyY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwic3R5bGVcIn0sb3V0bGllcndpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOlwic3R5bGVcIn0sZWRpdFR5cGU6XCJzdHlsZVwifSxlZGl0VHlwZTpcInBsb3RcIn0sbGluZTp7Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwic3R5bGVcIn0sd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjIsZWRpdFR5cGU6XCJzdHlsZVwifSxlZGl0VHlwZTpcInBsb3RcIn0sZmlsbGNvbG9yOm4uZmlsbGNvbG9yLG9mZnNldGdyb3VwOmkub2Zmc2V0Z3JvdXAsYWxpZ25tZW50Z3JvdXA6aS5hbGlnbm1lbnRncm91cCxzZWxlY3RlZDp7bWFya2VyOm4uc2VsZWN0ZWQubWFya2VyLGVkaXRUeXBlOlwic3R5bGVcIn0sdW5zZWxlY3RlZDp7bWFya2VyOm4udW5zZWxlY3RlZC5tYXJrZXIsZWRpdFR5cGU6XCJzdHlsZVwifSxob3Zlcm9uOnt2YWxUeXBlOlwiZmxhZ2xpc3RcIixmbGFnczpbXCJib3hlc1wiLFwicG9pbnRzXCJdLGRmbHQ6XCJib3hlcytwb2ludHNcIixlZGl0VHlwZTpcInN0eWxlXCJ9fX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzXCI6NTc3LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vYmFyL2F0dHJpYnV0ZXNcIjo4MzksXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIjoxMDUyfV0sODYzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPWkuXyxvPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKTtmdW5jdGlvbiBzKHQsZSxyKXt2YXIgbj17dGV4dDpcInR4XCIsaG92ZXJ0ZXh0OlwiaHR4XCJ9O2Zvcih2YXIgaSBpbiBuKUFycmF5LmlzQXJyYXkoZVtpXSkmJih0W25baV1dPWVbaV1bcl0pfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gdC52LWUudn1mdW5jdGlvbiBjKHQpe3JldHVybiB0LnZ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsdSxoLGYscCxkPXQuX2Z1bGxMYXlvdXQsZz1vLmdldEZyb21JZCh0LGUueGF4aXN8fFwieFwiKSx2PW8uZ2V0RnJvbUlkKHQsZS55YXhpc3x8XCJ5XCIpLG09W10seT1cInZpb2xpblwiPT09ZS50eXBlP1wiX251bVZpb2xpbnNcIjpcIl9udW1Cb3hlc1wiO1wiaFwiPT09ZS5vcmllbnRhdGlvbj8odT1nLGg9XCJ4XCIsZj12LHA9XCJ5XCIpOih1PXYsaD1cInlcIixmPWcscD1cInhcIik7dmFyIHgsYj11Lm1ha2VDYWxjZGF0YShlLGgpLF89ZnVuY3Rpb24odCxlLHIsYSxvKXtpZihlIGluIHQpcmV0dXJuIHIubWFrZUNhbGNkYXRhKHQsZSk7dmFyIHM7cz1lK1wiMFwiaW4gdD90W2UrXCIwXCJdOlwibmFtZVwiaW4gdCYmKFwiY2F0ZWdvcnlcIj09PXIudHlwZXx8bih0Lm5hbWUpJiYtMSE9PVtcImxpbmVhclwiLFwibG9nXCJdLmluZGV4T2Yoci50eXBlKXx8aS5pc0RhdGVUaW1lKHQubmFtZSkmJlwiZGF0ZVwiPT09ci50eXBlKT90Lm5hbWU6bzt2YXIgbD1cIm11bHRpY2F0ZWdvcnlcIj09PXIudHlwZT9yLnIyY19qdXN0X2luZGljZXMocyk6ci5kMmMocywwLHRbZStcImNhbGVuZGFyXCJdKTtyZXR1cm4gYS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbH0pfShlLHAsZixiLGRbeV0pLHc9aS5kaXN0aW5jdFZhbHMoXyksaz13LnZhbHMsQT13Lm1pbkRpZmYvMixUPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49bmV3IEFycmF5KHIrMSksaT0wO2k8cjtpKyspbltpXT10W2ldLWU7cmV0dXJuIG5bcl09dFtyLTFdK2Usbn0oayxBKSxNPWsubGVuZ3RoLFM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPVtdO3JldHVybiBlfShNKTtmb3Iocj0wO3I8ZS5fbGVuZ3RoO3IrKyl7dmFyIEU9YltyXTtpZihuKEUpKXt2YXIgQz1pLmZpbmRCaW4oX1tyXSxUKTtpZihDPj0wJiZDPE0pe3ZhciBMPXt2OkUsaTpyfTtzKEwsZSxyKSxTW0NdLnB1c2goTCl9fX12YXIgej1cImFsbFwiPT09KGUuYm94cG9pbnRzfHxlLnBvaW50cyk/aS5pZGVudGl0eTpmdW5jdGlvbih0KXtyZXR1cm4gdC52PHgubGZ8fHQudj54LnVmfTtmb3Iocj0wO3I8TTtyKyspaWYoU1tyXS5sZW5ndGg+MCl7dmFyIE89U1tyXS5zb3J0KGwpLEk9Ty5tYXAoYyksRD1JLmxlbmd0aDsoeD17fSkucG9zPWtbcl0seC5wdHM9Tyx4Lm1pbj1JWzBdLHgubWF4PUlbRC0xXSx4Lm1lYW49aS5tZWFuKEksRCkseC5zZD1pLnN0ZGV2KEksRCx4Lm1lYW4pLHgucTE9aS5pbnRlcnAoSSwuMjUpLHgubWVkPWkuaW50ZXJwKEksLjUpLHgucTM9aS5pbnRlcnAoSSwuNzUpLHgubGY9TWF0aC5taW4oeC5xMSxJW01hdGgubWluKGkuZmluZEJpbigyLjUqeC5xMS0xLjUqeC5xMyxJLCEwKSsxLEQtMSldKSx4LnVmPU1hdGgubWF4KHgucTMsSVtNYXRoLm1heChpLmZpbmRCaW4oMi41KngucTMtMS41KngucTEsSSksMCldKSx4LmxvPTQqeC5xMS0zKngucTMseC51bz00KngucTMtMyp4LnExO3ZhciBQPTEuNTcqKHgucTMteC5xMSkvTWF0aC5zcXJ0KEQpO3gubG49eC5tZWQtUCx4LnVuPXgubWVkK1AseC5wdHMyPU8uZmlsdGVyKHopLG0ucHVzaCh4KX0hZnVuY3Rpb24odCxlKXtpZihpLmlzQXJyYXlPclR5cGVkQXJyYXkoZS5zZWxlY3RlZHBvaW50cykpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe2Zvcih2YXIgbj10W3JdLnB0c3x8W10sYT17fSxvPTA7bzxuLmxlbmd0aDtvKyspYVtuW29dLmldPW87aS50YWdTZWxlY3RlZChuLGUsYSl9fShtLGUpO3ZhciBSPW8uZmluZEV4dHJlbWVzKHUsYix7cGFkZGVkOiEwfSk7cmV0dXJuIGUuX2V4dHJlbWVzW3UuX2lkXT1SLG0ubGVuZ3RoPjA/KG1bMF0udD17bnVtOmRbeV0sZFBvczpBLHBvc0xldHRlcjpwLHZhbExldHRlcjpoLGxhYmVsczp7bWVkOmEodCxcIm1lZGlhbjpcIiksbWluOmEodCxcIm1pbjpcIikscTE6YSh0LFwicTE6XCIpLHEzOmEodCxcInEzOlwiKSxtYXg6YSh0LFwibWF4OlwiKSxtZWFuOlwic2RcIj09PWUuYm94bWVhbj9hKHQsXCJtZWFuIFxceGIxIFxcdTAzYzM6XCIpOmEodCxcIm1lYW46XCIpLGxmOmEodCxcImxvd2VyIGZlbmNlOlwiKSx1ZjphKHQsXCJ1cHBlciBmZW5jZTpcIil9fSxkW3ldKyssbSk6W3t0OntlbXB0eTohMH19XX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw4NjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiKS5nZXRBeGlzR3JvdXAsbz1bXCJ2XCIsXCJoXCJdO2Z1bmN0aW9uIHModCxlLHIsbyl7dmFyIHMsbCxjLHU9ZS5jYWxjZGF0YSxoPWUuX2Z1bGxMYXlvdXQsZj1vLl9pZCxwPWYuY2hhckF0KDApLGQ9W10sZz0wO2ZvcihzPTA7czxyLmxlbmd0aDtzKyspZm9yKGM9dVtyW3NdXSxsPTA7bDxjLmxlbmd0aDtsKyspZC5wdXNoKGNbbF0ucG9zKSxnKz0oY1tsXS5wdHMyfHxbXSkubGVuZ3RoO2lmKGQubGVuZ3RoKXt2YXIgdj1pLmRpc3RpbmN0VmFscyhkKSxtPXYubWluRGlmZi8yO24ubWluRHRpY2sobyx2Lm1pbkRpZmYsdi52YWxzWzBdLCEwKTt2YXIgeT1oW1widmlvbGluXCI9PT10P1wiX251bVZpb2xpbnNcIjpcIl9udW1Cb3hlc1wiXSx4PVwiZ3JvdXBcIj09PWhbdCtcIm1vZGVcIl0mJnk+MSxiPTEtaFt0K1wiZ2FwXCJdLF89MS1oW3QrXCJncm91cGdhcFwiXTtmb3Iocz0wO3M8ci5sZW5ndGg7cysrKXt2YXIgdyxrLEEsVCxNLFMsRT0oYz11W3Jbc11dKVswXS50cmFjZSxDPWNbMF0udCxMPUUud2lkdGgsej1FLnNpZGU7aWYoTCl3PWs9VD1MLzIsQT0wO2Vsc2UgaWYodz1tLHgpe3ZhciBPPWEoaCxvLl9pZCkrRS5vcmllbnRhdGlvbixJPShoLl9hbGlnbm1lbnRPcHRzW09dfHx7fSlbRS5hbGlnbm1lbnRncm91cF18fHt9LEQ9T2JqZWN0LmtleXMoSS5vZmZzZXRHcm91cHN8fHt9KS5sZW5ndGgsUD1EfHx5O2s9dypiKl8vUCxBPTIqdyooKChEP0UuX29mZnNldEluZGV4OkMubnVtKSsuNSkvUC0uNSkqYixUPXcqYi9QfWVsc2Ugaz13KmIqXyxBPTAsVD13O0MuZFBvcz13LEMuYlBvcz1BLEMuYmRQb3M9ayxDLndIb3Zlcj1UO3ZhciBSLEYsQixOLGosVixVPUEraztcInBvc2l0aXZlXCI9PT16PyhNPXcqKEw/MTouNSksUj1VLFM9Uj1BKTpcIm5lZ2F0aXZlXCI9PT16PyhNPVI9QSxTPXcqKEw/MTouNSksRj1VKTooTT1TPXcsUj1GPVUpO3ZhciBxPSExO2lmKChFLmJveHBvaW50c3x8RS5wb2ludHMpJiZnPjApe3ZhciBIPUUucG9pbnRwb3MsRz1FLmppdHRlcixZPUUubWFya2VyLnNpemUvMixXPTA7SCtHPj0wJiYoKFc9VSooSCtHKSk+TT8ocT0hMCxqPVksQj1XKTpXPlImJihqPVksQj1NKSksVzw9TSYmKEI9TSk7dmFyIFg9MDtILUc8PTAmJigoWD0tVSooSC1HKSk+Uz8ocT0hMCxWPVksTj1YKTpYPkYmJihWPVksTj1TKSksWDw9UyYmKE49Uyl9ZWxzZSBCPU0sTj1TO3ZhciBaPW5ldyBBcnJheShjLmxlbmd0aCk7Zm9yKGw9MDtsPGMubGVuZ3RoO2wrKylaW2xdPWNbbF0ucG9zO0UuX2V4dHJlbWVzW2ZdPW4uZmluZEV4dHJlbWVzKG8sWix7cGFkZGVkOnEsdnBhZG1pbnVzOk4sdnBhZHBsdXM6QixwcGFkbWludXM6e3g6Vix5Omp9W3BdLHBwYWRwbHVzOnt4OmoseTpWfVtwXX0pfX19ZS5leHBvcnRzPXtjcm9zc1RyYWNlQ2FsYzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNhbGNkYXRhLG49ZS54YXhpcyxpPWUueWF4aXMsYT0wO2E8by5sZW5ndGg7YSsrKXtmb3IodmFyIGw9b1thXSxjPVwiaFwiPT09bD9pOm4sdT1bXSxoPTA7aDxyLmxlbmd0aDtoKyspe3ZhciBmPXJbaF0scD1mWzBdLnQsZD1mWzBdLnRyYWNlOyEwIT09ZC52aXNpYmxlfHxcImJveFwiIT09ZC50eXBlJiZcImNhbmRsZXN0aWNrXCIhPT1kLnR5cGV8fHAuZW1wdHl8fChkLm9yaWVudGF0aW9ufHxcInZcIikhPT1sfHxkLnhheGlzIT09bi5faWR8fGQueWF4aXMhPT1pLl9pZHx8dS5wdXNoKGgpfXMoXCJib3hcIix0LHUsYyl9fSxzZXRQb3NpdGlvbk9mZnNldDpzfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIjo3NTJ9XSw4NjU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksbz10KFwiLi4vYmFyL2RlZmF1bHRzXCIpLmhhbmRsZUdyb3VwaW5nRGVmYXVsdHMscz10KFwiLi9hdHRyaWJ1dGVzXCIpO2Z1bmN0aW9uIGwodCxlLHIsYSl7dmFyIG8scyxsPXIoXCJ5XCIpLGM9cihcInhcIiksdT1jJiZjLmxlbmd0aDtpZihsJiZsLmxlbmd0aClvPVwidlwiLHU/cz1NYXRoLm1pbihuLm1pblJvd0xlbmd0aChjKSxuLm1pblJvd0xlbmd0aChsKSk6KHIoXCJ4MFwiKSxzPW4ubWluUm93TGVuZ3RoKGwpKTtlbHNle2lmKCF1KXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7bz1cImhcIixyKFwieTBcIikscz1uLm1pblJvd0xlbmd0aChjKX1lLl9sZW5ndGg9cyxpLmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiaGFuZGxlVHJhY2VEZWZhdWx0c1wiKSh0LGUsW1wieFwiLFwieVwiXSxhKSxyKFwib3JpZW50YXRpb25cIixvKX1mdW5jdGlvbiBjKHQsZSxyLGkpe3ZhciBhPWkucHJlZml4LG89bi5jb2VyY2UyKHQsZSxzLFwibWFya2VyLm91dGxpZXJjb2xvclwiKSxsPXIoXCJtYXJrZXIubGluZS5vdXRsaWVyY29sb3JcIiksYz1yKGErXCJwb2ludHNcIixvfHxsP1wic3VzcGVjdGVkb3V0bGllcnNcIjp2b2lkIDApO2M/KHIoXCJqaXR0ZXJcIixcImFsbFwiPT09Yz8uMzowKSxyKFwicG9pbnRwb3NcIixcImFsbFwiPT09Yz8tMS41OjApLHIoXCJtYXJrZXIuc3ltYm9sXCIpLHIoXCJtYXJrZXIub3BhY2l0eVwiKSxyKFwibWFya2VyLnNpemVcIikscihcIm1hcmtlci5jb2xvclwiLGUubGluZS5jb2xvcikscihcIm1hcmtlci5saW5lLmNvbG9yXCIpLHIoXCJtYXJrZXIubGluZS53aWR0aFwiKSxcInN1c3BlY3RlZG91dGxpZXJzXCI9PT1jJiYocihcIm1hcmtlci5saW5lLm91dGxpZXJjb2xvclwiLGUubWFya2VyLmNvbG9yKSxyKFwibWFya2VyLmxpbmUub3V0bGllcndpZHRoXCIpKSxyKFwic2VsZWN0ZWQubWFya2VyLmNvbG9yXCIpLHIoXCJ1bnNlbGVjdGVkLm1hcmtlci5jb2xvclwiKSxyKFwic2VsZWN0ZWQubWFya2VyLnNpemVcIikscihcInVuc2VsZWN0ZWQubWFya2VyLnNpemVcIikscihcInRleHRcIikscihcImhvdmVydGV4dFwiKSk6ZGVsZXRlIGUubWFya2VyO3ZhciB1PXIoXCJob3Zlcm9uXCIpO1wiYWxsXCIhPT11JiYtMT09PXUuaW5kZXhPZihcInBvaW50c1wiKXx8cihcImhvdmVydGVtcGxhdGVcIiksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUscil9ZS5leHBvcnRzPXtzdXBwbHlEZWZhdWx0czpmdW5jdGlvbih0LGUscixpKXtmdW5jdGlvbiBvKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9bCh0LGUsbyxpKSwhMSE9PWUudmlzaWJsZSYmKG8oXCJsaW5lLmNvbG9yXCIsKHQubWFya2VyfHx7fSkuY29sb3J8fHIpLG8oXCJsaW5lLndpZHRoXCIpLG8oXCJmaWxsY29sb3JcIixhLmFkZE9wYWNpdHkoZS5saW5lLmNvbG9yLC41KSksbyhcIndoaXNrZXJ3aWR0aFwiKSxvKFwiYm94bWVhblwiKSxvKFwid2lkdGhcIiksbyhcIm5vdGNoZWRcIix2b2lkIDAhPT10Lm5vdGNod2lkdGgpJiZvKFwibm90Y2h3aWR0aFwiKSxjKHQsZSxvLHtwcmVmaXg6XCJib3hcIn0pKX0sY3Jvc3NUcmFjZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHIsaTtmdW5jdGlvbiBhKHQpe3JldHVybiBuLmNvZXJjZShpLl9pbnB1dCxpLHMsdCl9Zm9yKHZhciBsPTA7bDx0Lmxlbmd0aDtsKyspe3ZhciBjPShpPXRbbF0pLnR5cGU7XCJib3hcIiE9PWMmJlwidmlvbGluXCIhPT1jfHwocj1pLl9pbnB1dCxcImdyb3VwXCI9PT1lW2MrXCJtb2RlXCJdJiZvKHIsaSxlLGEpKX19LGhhbmRsZVNhbXBsZURlZmF1bHRzOmwsaGFuZGxlUG9pbnRzRGVmYXVsdHM6Y319LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL2Jhci9kZWZhdWx0c1wiOjg0MyxcIi4vYXR0cmlidXRlc1wiOjg2Mn1dLDg2NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBlLmhvdmVyT25Cb3gmJih0LmhvdmVyT25Cb3g9ZS5ob3Zlck9uQm94KSxcInhWYWxcImluIGUmJih0Lng9ZS54VmFsKSxcInlWYWxcImluIGUmJih0Lnk9ZS55VmFsKSxlLnhhJiYodC54YXhpcz1lLnhhKSxlLnlhJiYodC55YXhpcz1lLnlhKSx0fX0se31dLDg2NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLHM9dChcIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0XCIpO2Z1bmN0aW9uIGwodCxlLHIscyl7dmFyIGwsYyx1LGgsZixwLGQsZyx2LG0seSx4LGI9dC5jZCxfPXQueGEsdz10LnlhLGs9YlswXS50cmFjZSxBPWJbMF0udCxUPVwidmlvbGluXCI9PT1rLnR5cGUsTT1bXSxTPUEuYmRQb3MsRT1BLndIb3ZlcixDPWZ1bmN0aW9uKHQpe3JldHVybiB0LnBvcytBLmJQb3MtcH07VCYmXCJib3RoXCIhPT1rLnNpZGU/KFwicG9zaXRpdmVcIj09PWsuc2lkZSYmKHY9ZnVuY3Rpb24odCl7dmFyIGU9Qyh0KTtyZXR1cm4gYS5pbmJveChlLGUrRSxtKX0pLFwibmVnYXRpdmVcIj09PWsuc2lkZSYmKHY9ZnVuY3Rpb24odCl7dmFyIGU9Qyh0KTtyZXR1cm4gYS5pbmJveChlLUUsZSxtKX0pKTp2PWZ1bmN0aW9uKHQpe3ZhciBlPUModCk7cmV0dXJuIGEuaW5ib3goZS1FLGUrRSxtKX0seD1UP2Z1bmN0aW9uKHQpe3JldHVybiBhLmluYm94KHQuc3BhblswXS1mLHQuc3BhblsxXS1mLG0pfTpmdW5jdGlvbih0KXtyZXR1cm4gYS5pbmJveCh0Lm1pbi1mLHQubWF4LWYsbSl9LFwiaFwiPT09ay5vcmllbnRhdGlvbj8oZj1lLHA9cixkPXgsZz12LGw9XCJ5XCIsdT13LGM9XCJ4XCIsaD1fKTooZj1yLHA9ZSxkPXYsZz14LGw9XCJ4XCIsdT1fLGM9XCJ5XCIsaD13KTt2YXIgTD1NYXRoLm1pbigxLFMvTWF0aC5hYnModS5yMmModS5yYW5nZVsxXSktdS5yMmModS5yYW5nZVswXSkpKTtmdW5jdGlvbiB6KHQpe3JldHVybihkKHQpK2codCkpLzJ9bT10Lm1heEhvdmVyRGlzdGFuY2UtTCx5PXQubWF4U3Bpa2VEaXN0YW5jZS1MO3ZhciBPPWEuZ2V0RGlzdGFuY2VGdW5jdGlvbihzLGQsZyx6KTtpZihhLmdldENsb3Nlc3QoYixPLHQpLCExPT09dC5pbmRleClyZXR1cm5bXTt2YXIgST1iW3QuaW5kZXhdLEQ9ay5saW5lLmNvbG9yLFA9KGsubWFya2VyfHx7fSkuY29sb3I7by5vcGFjaXR5KEQpJiZrLmxpbmUud2lkdGg/dC5jb2xvcj1EOm8ub3BhY2l0eShQKSYmay5ib3hwb2ludHM/dC5jb2xvcj1QOnQuY29sb3I9ay5maWxsY29sb3IsdFtsK1wiMFwiXT11LmMycChJLnBvcytBLmJQb3MtUywhMCksdFtsK1wiMVwiXT11LmMycChJLnBvcytBLmJQb3MrUywhMCksdFtsK1wiTGFiZWxWYWxcIl09SS5wb3M7dmFyIFI9bCtcIlNwaWtlXCI7dC5zcGlrZURpc3RhbmNlPXooSSkqeS9tLHRbUl09dS5jMnAoSS5wb3MsITApO3ZhciBGPXt9LEI9W1wibWVkXCIsXCJtaW5cIixcInExXCIsXCJxM1wiLFwibWF4XCJdOyhrLmJveG1lYW58fChrLm1lYW5saW5lfHx7fSkudmlzaWJsZSkmJkIucHVzaChcIm1lYW5cIiksKGsuYm94cG9pbnRzfHxrLnBvaW50cykmJkIucHVzaChcImxmXCIsXCJ1ZlwiKTtmb3IodmFyIE49MDtOPEIubGVuZ3RoO04rKyl7dmFyIGo9QltOXTtpZihqIGluIEkmJiEoSVtqXWluIEYpKXtGW0lbal1dPSEwO3ZhciBWPUlbal0sVT1oLmMycChWLCEwKSxxPWkuZXh0ZW5kRmxhdCh7fSx0KTtxW2MrXCIwXCJdPXFbYytcIjFcIl09VSxxW2MrXCJMYWJlbFZhbFwiXT1WLHFbYytcIkxhYmVsXCJdPShBLmxhYmVscz9BLmxhYmVsc1tqXStcIiBcIjpcIlwiKStuLmhvdmVyTGFiZWxUZXh0KGgsVikscS5ob3Zlck9uQm94PSEwLFwibWVhblwiPT09aiYmXCJzZFwiaW4gSSYmXCJzZFwiPT09ay5ib3htZWFuJiYocVtjK1wiZXJyXCJdPUkuc2QpLHQubmFtZT1cIlwiLHQuc3Bpa2VEaXN0YW5jZT12b2lkIDAsdFtSXT12b2lkIDAscS5ob3ZlcnRlbXBsYXRlPSExLE0ucHVzaChxKX19cmV0dXJuIE19ZnVuY3Rpb24gYyh0LGUscil7Zm9yKHZhciBuLG8sbCxjPXQuY2QsdT10LnhhLGg9dC55YSxmPWNbMF0udHJhY2UscD11LmMycChlKSxkPWguYzJwKHIpLGc9YS5xdWFkcmF0dXJlKGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDMsdC5tcmN8fDApO3JldHVybiBNYXRoLm1heChNYXRoLmFicyh1LmMycCh0LngpLXApLWUsMS0zL2UpfSxmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnMoaC5jMnAodC55KS1kKS1lLDEtMy9lKX0pLHY9ITEsbT0wO208Yy5sZW5ndGg7bSsrKXtvPWNbbV07Zm9yKHZhciB5PTA7eTwoby5wdHN8fFtdKS5sZW5ndGg7eSsrKXt2YXIgeD1nKGw9by5wdHNbeV0pO3g8PXQuZGlzdGFuY2UmJih0LmRpc3RhbmNlPXgsdj1bbSx5XSl9fWlmKCF2KXJldHVybiExO2w9KG89Y1t2WzBdXSkucHRzW3ZbMV1dO3ZhciBiLF89dS5jMnAobC54LCEwKSx3PWguYzJwKGwueSwhMCksaz1sLm1yY3x8MTtyZXR1cm4gbj1pLmV4dGVuZEZsYXQoe30sdCx7aW5kZXg6bC5pLGNvbG9yOihmLm1hcmtlcnx8e30pLmNvbG9yLG5hbWU6Zi5uYW1lLHgwOl8tayx4MTpfK2sseTA6dy1rLHkxOncrayxzcGlrZURpc3RhbmNlOnQuZGlzdGFuY2UsaG92ZXJ0ZW1wbGF0ZTpmLmhvdmVydGVtcGxhdGV9KSxcImhcIj09PWYub3JpZW50YXRpb24/KGI9aCxuLnhMYWJlbFZhbD1sLngsbi55TGFiZWxWYWw9by5wb3MpOihiPXUsbi54TGFiZWxWYWw9by5wb3Msbi55TGFiZWxWYWw9bC55KSxuW2IuX2lkLmNoYXJBdCgwKStcIlNwaWtlXCJdPWIuYzJwKG8ucG9zLCEwKSxzKGwsZixuKSxufWUuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT10LmNkWzBdLnRyYWNlLmhvdmVyb24sbz1bXTtyZXR1cm4tMSE9PWEuaW5kZXhPZihcImJveGVzXCIpJiYobz1vLmNvbmNhdChsKHQsZSxyLG4pKSksLTEhPT1hLmluZGV4T2YoXCJwb2ludHNcIikmJihpPWModCxlLHIpKSxcImNsb3Nlc3RcIj09PW4/aT9baV06bzppPyhvLnB1c2goaSksbyk6b30saG92ZXJPbkJveGVzOmwsaG92ZXJPblBvaW50czpjfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0XCI6MTA2MH1dLDg2ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4ubGF5b3V0QXR0cmlidXRlcz10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLnN1cHBseURlZmF1bHRzLG4uY3Jvc3NUcmFjZURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLmNyb3NzVHJhY2VEZWZhdWx0cyxuLnN1cHBseUxheW91dERlZmF1bHRzPXQoXCIuL2xheW91dF9kZWZhdWx0c1wiKS5zdXBwbHlMYXlvdXREZWZhdWx0cyxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLmNyb3NzVHJhY2VDYWxjPXQoXCIuL2Nyb3NzX3RyYWNlX2NhbGNcIikuY3Jvc3NUcmFjZUNhbGMsbi5wbG90PXQoXCIuL3Bsb3RcIikucGxvdCxuLnN0eWxlPXQoXCIuL3N0eWxlXCIpLnN0eWxlLG4uc3R5bGVPblNlbGVjdD10KFwiLi9zdHlsZVwiKS5zdHlsZU9uU2VsZWN0LG4uaG92ZXJQb2ludHM9dChcIi4vaG92ZXJcIikuaG92ZXJQb2ludHMsbi5ldmVudERhdGE9dChcIi4vZXZlbnRfZGF0YVwiKSxuLnNlbGVjdFBvaW50cz10KFwiLi9zZWxlY3RcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJib3hcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIiksbi5jYXRlZ29yaWVzPVtcImNhcnRlc2lhblwiLFwic3ZnXCIsXCJzeW1ib2xzXCIsXCJvcmllbnRlZFwiLFwiYm94LXZpb2xpblwiLFwic2hvd0xlZ2VuZFwiLFwiYm94TGF5b3V0XCIsXCJ6b29tU2NhbGVcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIjo3NjAsXCIuL2F0dHJpYnV0ZXNcIjo4NjIsXCIuL2NhbGNcIjo4NjMsXCIuL2Nyb3NzX3RyYWNlX2NhbGNcIjo4NjQsXCIuL2RlZmF1bHRzXCI6ODY1LFwiLi9ldmVudF9kYXRhXCI6ODY2LFwiLi9ob3ZlclwiOjg2NyxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo4NjksXCIuL2xheW91dF9kZWZhdWx0c1wiOjg3MCxcIi4vcGxvdFwiOjg3MSxcIi4vc2VsZWN0XCI6ODcyLFwiLi9zdHlsZVwiOjg3M31dLDg2OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17Ym94bW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiZ3JvdXBcIixcIm92ZXJsYXlcIl0sZGZsdDpcIm92ZXJsYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sYm94Z2FwOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDouMyxlZGl0VHlwZTpcImNhbGNcIn0sYm94Z3JvdXBnYXA6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0Oi4zLGVkaXRUeXBlOlwiY2FsY1wifX19LHt9XSw4NzA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIik7ZnVuY3Rpb24gbyh0LGUscixpLGEpe2Zvcih2YXIgbz1hK1wiTGF5b3V0XCIscz0hMSxsPTA7bDxyLmxlbmd0aDtsKyspe3ZhciBjPXJbbF07aWYobi50cmFjZUlzKGMsbykpe3M9ITA7YnJlYWt9fXMmJihpKGErXCJtb2RlXCIpLGkoYStcImdhcFwiKSxpKGErXCJncm91cGdhcFwiKSl9ZS5leHBvcnRzPXtzdXBwbHlMYXlvdXREZWZhdWx0czpmdW5jdGlvbih0LGUscil7bygwLDAscixmdW5jdGlvbihyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsYSxyLG4pfSxcImJveFwiKX0sX3N1cHBseTpvfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6ODY5fV0sODcxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksbz01LHM9LjAxO2Z1bmN0aW9uIGwodCxlLHIsYSl7dmFyIG8scyxsPWUucG9zLGM9ZS52YWwsdT1hLmJQb3MsaD1hLndkUG9zfHwwLGY9YS5iUG9zUHhPZmZzZXR8fDAscD1yLndoaXNrZXJ3aWR0aHx8MCxkPXIubm90Y2hlZHx8ITEsZz1kPzEtMipyLm5vdGNod2lkdGg6MTtBcnJheS5pc0FycmF5KGEuYmRQb3MpPyhvPWEuYmRQb3NbMF0scz1hLmJkUG9zWzFdKToobz1hLmJkUG9zLHM9YS5iZFBvcyk7dmFyIHY9dC5zZWxlY3RBbGwoXCJwYXRoLmJveFwiKS5kYXRhKFwidmlvbGluXCIhPT1yLnR5cGV8fHIuYm94LnZpc2libGU/aS5pZGVudGl0eTpbXSk7di5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuc3R5bGUoXCJ2ZWN0b3ItZWZmZWN0XCIsXCJub24tc2NhbGluZy1zdHJva2VcIikuYXR0cihcImNsYXNzXCIsXCJib3hcIiksdi5leGl0KCkucmVtb3ZlKCksdi5lYWNoKGZ1bmN0aW9uKHQpe2lmKHQuZW1wdHkpcmV0dXJuXCJNMCwwWlwiO3ZhciBlPXQucG9zLGE9bC5jMnAoZSt1LCEwKStmLHY9bC5jMnAoZSt1LW8sITApK2YsbT1sLmMycChlK3UrcywhMCkrZix5PWwuYzJwKGUrdS1oLCEwKStmLHg9bC5jMnAoZSt1K2gsITApK2YsYj1sLmMycChlK3UtbypnLCEwKStmLF89bC5jMnAoZSt1K3MqZywhMCkrZix3PWMuYzJwKHQucTEsITApLGs9Yy5jMnAodC5xMywhMCksQT1pLmNvbnN0cmFpbihjLmMycCh0Lm1lZCwhMCksTWF0aC5taW4odyxrKSsxLE1hdGgubWF4KHcsayktMSksVD12b2lkIDA9PT10LmxmfHwhMT09PXIuYm94cG9pbnRzLE09Yy5jMnAoVD90Lm1pbjp0LmxmLCEwKSxTPWMuYzJwKFQ/dC5tYXg6dC51ZiwhMCksRT1jLmMycCh0LmxuLCEwKSxDPWMuYzJwKHQudW4sITApO1wiaFwiPT09ci5vcmllbnRhdGlvbj9uLnNlbGVjdCh0aGlzKS5hdHRyKFwiZFwiLFwiTVwiK0ErXCIsXCIrYitcIlZcIitfK1wiTVwiK3crXCIsXCIrditcIlZcIittKyhkP1wiSFwiK0UrXCJMXCIrQStcIixcIitfK1wiTFwiK0MrXCIsXCIrbTpcIlwiKStcIkhcIitrK1wiVlwiK3YrKGQ/XCJIXCIrQytcIkxcIitBK1wiLFwiK2IrXCJMXCIrRStcIixcIit2OlwiXCIpK1wiWk1cIit3K1wiLFwiK2ErXCJIXCIrTStcIk1cIitrK1wiLFwiK2ErXCJIXCIrUysoMD09PXA/XCJcIjpcIk1cIitNK1wiLFwiK3krXCJWXCIreCtcIk1cIitTK1wiLFwiK3krXCJWXCIreCkpOm4uc2VsZWN0KHRoaXMpLmF0dHIoXCJkXCIsXCJNXCIrYitcIixcIitBK1wiSFwiK18rXCJNXCIrditcIixcIit3K1wiSFwiK20rKGQ/XCJWXCIrRStcIkxcIitfK1wiLFwiK0ErXCJMXCIrbStcIixcIitDOlwiXCIpK1wiVlwiK2srXCJIXCIrdisoZD9cIlZcIitDK1wiTFwiK2IrXCIsXCIrQStcIkxcIit2K1wiLFwiK0U6XCJcIikrXCJaTVwiK2ErXCIsXCIrdytcIlZcIitNK1wiTVwiK2ErXCIsXCIraytcIlZcIitTKygwPT09cD9cIlwiOlwiTVwiK3krXCIsXCIrTStcIkhcIit4K1wiTVwiK3krXCIsXCIrUytcIkhcIit4KSl9KX1mdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBsPWUueCxjPWUueSx1PW4uYmRQb3MsaD1uLmJQb3MsZj1yLmJveHBvaW50c3x8ci5wb2ludHM7aS5zZWVkUHNldWRvUmFuZG9tKCk7dmFyIHA9dC5zZWxlY3RBbGwoXCJnLnBvaW50c1wiKS5kYXRhKGY/ZnVuY3Rpb24odCl7cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXt0LnQ9bix0LnRyYWNlPXJ9KSx0fTpbXSk7cC5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsXCJwb2ludHNcIikscC5leGl0KCkucmVtb3ZlKCk7dmFyIGQ9cC5zZWxlY3RBbGwoXCJwYXRoXCIpLmRhdGEoZnVuY3Rpb24odCl7dmFyIGUsbixhPXQucHRzMixsPU1hdGgubWF4KCh0Lm1heC10Lm1pbikvMTAsdC5xMy10LnExKSxjPTFlLTkqbCxwPWwqcyxkPVtdLGc9MDtpZihyLmppdHRlcil7aWYoMD09PWwpZm9yKGc9MSxkPW5ldyBBcnJheShhLmxlbmd0aCksZT0wO2U8YS5sZW5ndGg7ZSsrKWRbZV09MTtlbHNlIGZvcihlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciB2PU1hdGgubWF4KDAsZS1vKSxtPWFbdl0udix5PU1hdGgubWluKGEubGVuZ3RoLTEsZStvKSx4PWFbeV0udjtcImFsbFwiIT09ZiYmKGFbZV0udjx0LmxmP3g9TWF0aC5taW4oeCx0LmxmKTptPU1hdGgubWF4KG0sdC51ZikpO3ZhciBiPU1hdGguc3FydChwKih5LXYpLyh4LW0rYykpfHwwO2I9aS5jb25zdHJhaW4oTWF0aC5hYnMoYiksMCwxKSxkLnB1c2goYiksZz1NYXRoLm1heChiLGcpfW49MipyLmppdHRlci8oZ3x8MSl9Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKyl7dmFyIF89YVtlXSx3PV8udixrPXIuaml0dGVyP24qZFtlXSooaS5wc2V1ZG9SYW5kb20oKS0uNSk6MCxBPXQucG9zK2grdSooci5wb2ludHBvcytrKTtcImhcIj09PXIub3JpZW50YXRpb24/KF8ueT1BLF8ueD13KTooXy54PUEsXy55PXcpLFwic3VzcGVjdGVkb3V0bGllcnNcIj09PWYmJnc8dC51byYmdz50LmxvJiYoXy5zbz0hMCl9cmV0dXJuIGF9KTtkLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5jbGFzc2VkKFwicG9pbnRcIiwhMCksZC5leGl0KCkucmVtb3ZlKCksZC5jYWxsKGEudHJhbnNsYXRlUG9pbnRzLGwsYyl9ZnVuY3Rpb24gdSh0LGUscixhKXt2YXIgbyxzLGw9ZS5wb3MsYz1lLnZhbCx1PWEuYlBvcyxoPWEuYlBvc1B4T2Zmc2V0fHwwLGY9ci5ib3htZWFufHwoci5tZWFubGluZXx8e30pLnZpc2libGU7QXJyYXkuaXNBcnJheShhLmJkUG9zKT8obz1hLmJkUG9zWzBdLHM9YS5iZFBvc1sxXSk6KG89YS5iZFBvcyxzPWEuYmRQb3MpO3ZhciBwPXQuc2VsZWN0QWxsKFwicGF0aC5tZWFuXCIpLmRhdGEoXCJib3hcIj09PXIudHlwZSYmci5ib3htZWFufHxcInZpb2xpblwiPT09ci50eXBlJiZyLmJveC52aXNpYmxlJiZyLm1lYW5saW5lLnZpc2libGU/aS5pZGVudGl0eTpbXSk7cC5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsXCJtZWFuXCIpLnN0eWxlKHtmaWxsOlwibm9uZVwiLFwidmVjdG9yLWVmZmVjdFwiOlwibm9uLXNjYWxpbmctc3Ryb2tlXCJ9KSxwLmV4aXQoKS5yZW1vdmUoKSxwLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9bC5jMnAodC5wb3MrdSwhMCkraCxpPWwuYzJwKHQucG9zK3UtbywhMCkraCxhPWwuYzJwKHQucG9zK3UrcywhMCkraCxwPWMuYzJwKHQubWVhbiwhMCksZD1jLmMycCh0Lm1lYW4tdC5zZCwhMCksZz1jLmMycCh0Lm1lYW4rdC5zZCwhMCk7XCJoXCI9PT1yLm9yaWVudGF0aW9uP24uc2VsZWN0KHRoaXMpLmF0dHIoXCJkXCIsXCJNXCIrcCtcIixcIitpK1wiVlwiK2ErKFwic2RcIj09PWY/XCJtMCwwTFwiK2QrXCIsXCIrZStcIkxcIitwK1wiLFwiK2krXCJMXCIrZytcIixcIitlK1wiWlwiOlwiXCIpKTpuLnNlbGVjdCh0aGlzKS5hdHRyKFwiZFwiLFwiTVwiK2krXCIsXCIrcCtcIkhcIithKyhcInNkXCI9PT1mP1wibTAsMExcIitlK1wiLFwiK2QrXCJMXCIraStcIixcIitwK1wiTFwiK2UrXCIsXCIrZytcIlpcIjpcIlwiKSl9KX1lLmV4cG9ydHM9e3Bsb3Q6ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89ZS54YXhpcyxzPWUueWF4aXM7aS5tYWtlVHJhY2VHcm91cHMoYSxyLFwidHJhY2UgYm94ZXNcIikuZWFjaChmdW5jdGlvbih0KXt2YXIgcixpLGE9bi5zZWxlY3QodGhpcyksaD10WzBdLGY9aC50LHA9aC50cmFjZTtlLmlzUmFuZ2VQbG90fHwoaC5ub2RlMz1hKSxmLndkUG9zPWYuYmRQb3MqcC53aGlza2Vyd2lkdGgsITAhPT1wLnZpc2libGV8fGYuZW1wdHk/YS5yZW1vdmUoKTooXCJoXCI9PT1wLm9yaWVudGF0aW9uPyhyPXMsaT1vKToocj1vLGk9cyksbChhLHtwb3M6cix2YWw6aX0scCxmKSxjKGEse3g6byx5OnN9LHAsZiksdShhLHtwb3M6cix2YWw6aX0scCxmKSl9KX0scGxvdEJveEFuZFdoaXNrZXJzOmwscGxvdFBvaW50czpjLHBsb3RCb3hNZWFuOnV9fSx7XCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9saWJcIjo3MDEsZDM6MTU1fV0sODcyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXQuY2QsYT10LnhheGlzLG89dC55YXhpcyxzPVtdO2lmKCExPT09ZSlmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWZvcihuPTA7bjwoaVtyXS5wdHN8fFtdKS5sZW5ndGg7bisrKWlbcl0ucHRzW25dLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWZvcihuPTA7bjwoaVtyXS5wdHN8fFtdKS5sZW5ndGg7bisrKXt2YXIgbD1pW3JdLnB0c1tuXSxjPWEuYzJwKGwueCksdT1vLmMycChsLnkpO2UuY29udGFpbnMoW2MsdV0sbnVsbCxsLmksdCk/KHMucHVzaCh7cG9pbnROdW1iZXI6bC5pLHg6YS5jMmQobC54KSx5Om8uYzJkKGwueSl9KSxsLnNlbGVjdGVkPTEpOmwuc2VsZWN0ZWQ9MH1yZXR1cm4gc319LHt9XSw4NzM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIik7ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUpe3ZhciByPWU/ZVswXS5ub2RlMzpuLnNlbGVjdCh0KS5zZWxlY3RBbGwoXCJnLnRyYWNlLmJveGVzXCIpO3Iuc3R5bGUoXCJvcGFjaXR5XCIsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pLHIuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxvPWVbMF0udHJhY2Uscz1vLmxpbmUud2lkdGg7ZnVuY3Rpb24gbCh0LGUscixuKXt0LnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsZStcInB4XCIpLmNhbGwoaS5zdHJva2UscikuY2FsbChpLmZpbGwsbil9dmFyIGM9ci5zZWxlY3RBbGwoXCJwYXRoLmJveFwiKTtpZihcImNhbmRsZXN0aWNrXCI9PT1vLnR5cGUpYy5lYWNoKGZ1bmN0aW9uKHQpe2lmKCF0LmVtcHR5KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPW9bdC5kaXJdO2woZSxyLmxpbmUud2lkdGgsci5saW5lLmNvbG9yLHIuZmlsbGNvbG9yKSxlLnN0eWxlKFwib3BhY2l0eVwiLG8uc2VsZWN0ZWRwb2ludHMmJiF0LnNlbGVjdGVkPy4zOjEpfX0pO2Vsc2V7bChjLHMsby5saW5lLmNvbG9yLG8uZmlsbGNvbG9yKSxyLnNlbGVjdEFsbChcInBhdGgubWVhblwiKS5zdHlsZSh7XCJzdHJva2Utd2lkdGhcIjpzLFwic3Ryb2tlLWRhc2hhcnJheVwiOjIqcytcInB4LFwiK3MrXCJweFwifSkuY2FsbChpLnN0cm9rZSxvLmxpbmUuY29sb3IpO3ZhciB1PXIuc2VsZWN0QWxsKFwicGF0aC5wb2ludFwiKTthLnBvaW50U3R5bGUodSxvLHQpfX0pfSxzdHlsZU9uU2VsZWN0OmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS5ub2RlMyxuPWVbMF0udHJhY2UsaT1yLnNlbGVjdEFsbChcInBhdGgucG9pbnRcIik7bi5zZWxlY3RlZHBvaW50cz9hLnNlbGVjdGVkUG9pbnRTdHlsZShpLG4pOmEucG9pbnRTdHlsZShpLG4sdCl9fX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxkMzoxNTV9XSw4NzQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLmV4dGVuZEZsYXQsaT10KFwiLi4vb2hsYy9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uL2JveC9hdHRyaWJ1dGVzXCIpO2Z1bmN0aW9uIG8odCl7cmV0dXJue2xpbmU6e2NvbG9yOm4oe30sYS5saW5lLmNvbG9yLHtkZmx0OnR9KSx3aWR0aDphLmxpbmUud2lkdGgsZWRpdFR5cGU6XCJzdHlsZVwifSxmaWxsY29sb3I6YS5maWxsY29sb3IsZWRpdFR5cGU6XCJzdHlsZVwifX1lLmV4cG9ydHM9e3g6aS54LG9wZW46aS5vcGVuLGhpZ2g6aS5oaWdoLGxvdzppLmxvdyxjbG9zZTppLmNsb3NlLGxpbmU6e3dpZHRoOm4oe30sYS5saW5lLndpZHRoLHt9KSxlZGl0VHlwZTpcInN0eWxlXCJ9LGluY3JlYXNpbmc6byhpLmluY3JlYXNpbmcubGluZS5jb2xvci5kZmx0KSxkZWNyZWFzaW5nOm8oaS5kZWNyZWFzaW5nLmxpbmUuY29sb3IuZGZsdCksdGV4dDppLnRleHQsaG92ZXJ0ZXh0OmkuaG92ZXJ0ZXh0LHdoaXNrZXJ3aWR0aDpuKHt9LGEud2hpc2tlcndpZHRoLHtkZmx0OjB9KSxob3ZlcmxhYmVsOmkuaG92ZXJsYWJlbH19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2JveC9hdHRyaWJ1dGVzXCI6ODYyLFwiLi4vb2hsYy9hdHRyaWJ1dGVzXCI6OTk5fV0sODc1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxhPXQoXCIuLi9vaGxjL2NhbGNcIikuY2FsY0NvbW1vbjtmdW5jdGlvbiBvKHQsZSxyLG4pe3JldHVybnttaW46cixxMTpNYXRoLm1pbih0LG4pLG1lZDpuLHEzOk1hdGgubWF4KHQsbiksbWF4OmV9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQscz1pLmdldEZyb21JZCh0LGUueGF4aXMpLGw9aS5nZXRGcm9tSWQodCxlLnlheGlzKSxjPXMubWFrZUNhbGNkYXRhKGUsXCJ4XCIpLHU9YSh0LGUsYyxsLG8pO3JldHVybiB1Lmxlbmd0aD8obi5leHRlbmRGbGF0KHVbMF0udCx7bnVtOnIuX251bUJveGVzLGRQb3M6bi5kaXN0aW5jdFZhbHMoYykubWluRGlmZi8yLHBvc0xldHRlcjpcInhcIix2YWxMZXR0ZXI6XCJ5XCJ9KSxyLl9udW1Cb3hlcysrLHUpOlt7dDp7ZW1wdHk6ITB9fV19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL29obGMvY2FsY1wiOjFlM31dLDg3NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxhPXQoXCIuLi9vaGxjL29obGNfZGVmYXVsdHNcIiksbz10KFwiLi9hdHRyaWJ1dGVzXCIpO2Z1bmN0aW9uIHModCxlLHIsbil7dmFyIGE9cihuK1wiLmxpbmUuY29sb3JcIik7cihuK1wiLmxpbmUud2lkdGhcIixlLmxpbmUud2lkdGgpLHIobitcIi5maWxsY29sb3JcIixpLmFkZE9wYWNpdHkoYSwuNSkpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXtmdW5jdGlvbiBsKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxvLHIsaSl9YSh0LGUsbCxpKT8obChcImxpbmUud2lkdGhcIikscyh0LGUsbCxcImluY3JlYXNpbmdcIikscyh0LGUsbCxcImRlY3JlYXNpbmdcIiksbChcInRleHRcIiksbChcImhvdmVydGV4dFwiKSxsKFwid2hpc2tlcndpZHRoXCIpLGkuX3JlcXVlc3RSYW5nZXNsaWRlcltlLnhheGlzXT0hMCk6ZS52aXNpYmxlPSExfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL29obGMvb2hsY19kZWZhdWx0c1wiOjEwMDQsXCIuL2F0dHJpYnV0ZXNcIjo4NzR9XSw4Nzc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6XCJ0cmFjZVwiLG5hbWU6XCJjYW5kbGVzdGlja1wiLGJhc2VQbG90TW9kdWxlOnQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIiksY2F0ZWdvcmllczpbXCJjYXJ0ZXNpYW5cIixcInN2Z1wiLFwic2hvd0xlZ2VuZFwiLFwiY2FuZGxlc3RpY2tcIixcImJveExheW91dFwiXSxtZXRhOnt9LGF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoXCIuLi9ib3gvbGF5b3V0X2F0dHJpYnV0ZXNcIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dChcIi4uL2JveC9sYXlvdXRfZGVmYXVsdHNcIikuc3VwcGx5TGF5b3V0RGVmYXVsdHMsY3Jvc3NUcmFjZUNhbGM6dChcIi4uL2JveC9jcm9zc190cmFjZV9jYWxjXCIpLmNyb3NzVHJhY2VDYWxjLHN1cHBseURlZmF1bHRzOnQoXCIuL2RlZmF1bHRzXCIpLGNhbGM6dChcIi4vY2FsY1wiKSxwbG90OnQoXCIuLi9ib3gvcGxvdFwiKS5wbG90LGxheWVyTmFtZTpcImJveGxheWVyXCIsc3R5bGU6dChcIi4uL2JveC9zdHlsZVwiKS5zdHlsZSxob3ZlclBvaW50czp0KFwiLi4vb2hsYy9ob3ZlclwiKS5ob3ZlclBvaW50cyxzZWxlY3RQb2ludHM6dChcIi4uL29obGMvc2VsZWN0XCIpfX0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi4vYm94L2Nyb3NzX3RyYWNlX2NhbGNcIjo4NjQsXCIuLi9ib3gvbGF5b3V0X2F0dHJpYnV0ZXNcIjo4NjksXCIuLi9ib3gvbGF5b3V0X2RlZmF1bHRzXCI6ODcwLFwiLi4vYm94L3Bsb3RcIjo4NzEsXCIuLi9ib3gvc3R5bGVcIjo4NzMsXCIuLi9vaGxjL2hvdmVyXCI6MTAwMixcIi4uL29obGMvc2VsZWN0XCI6MTAwNixcIi4vYXR0cmlidXRlc1wiOjg3NCxcIi4vY2FsY1wiOjg3NSxcIi4vZGVmYXVsdHNcIjo4NzZ9XSw4Nzg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9heGlzX2RlZmF1bHRzXCIpLGk9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyl7YShcImFcIil8fChhKFwiZGFcIiksYShcImEwXCIpKSxhKFwiYlwiKXx8KGEoXCJkYlwiKSxhKFwiYjBcIikpLGZ1bmN0aW9uKHQsZSxyLGEpe1tcImFheGlzXCIsXCJiYXhpc1wiXS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3ZhciBzPW8uY2hhckF0KDApLGw9dFtvXXx8e30sYz1pLm5ld0NvbnRhaW5lcihlLG8pLHU9e3RpY2tmb250OlwieFwiLGlkOnMrXCJheGlzXCIsbGV0dGVyOnMsZm9udDplLmZvbnQsbmFtZTpvLGRhdGE6dFtzXSxjYWxlbmRhcjplLmNhbGVuZGFyLGRmbHRDb2xvcjphLGJnQ29sb3I6ci5wYXBlcl9iZ2NvbG9yLGZ1bGxMYXlvdXQ6cn07bihsLGMsdSksYy5fY2F0ZWdvcmllcz1jLl9jYXRlZ29yaWVzfHxbXSx0W29dfHxcIi1cIj09PWwudHlwZXx8KHRbb109e3R5cGU6bC50eXBlfSl9KX0odCxlLHIsbyl9fSx7XCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi9heGlzX2RlZmF1bHRzXCI6ODgzfV0sODc5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24gdChlLHIpe2lmKCFuKGUpfHxyPj0xMClyZXR1cm4gbnVsbDt2YXIgaT0xLzA7dmFyIGE9LTEvMDt2YXIgbz1lLmxlbmd0aDtmb3IodmFyIHM9MDtzPG87cysrKXt2YXIgbD1lW3NdO2lmKG4obCkpe3ZhciBjPXQobCxyKzEpO2MmJihpPU1hdGgubWluKGNbMF0saSksYT1NYXRoLm1heChjWzFdLGEpKX1lbHNlIGk9TWF0aC5taW4obCxpKSxhPU1hdGgubWF4KGwsYSl9cmV0dXJuW2ksYV19KHQsMCl9fSx7XCIuLi8uLi9saWJcIjo3MDF9XSw4ODA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCIpLGk9dChcIi4vYXhpc19hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiKSxvPW4oe2VkaXRUeXBlOlwiY2FsY1wifSk7by5mYW1pbHkuZGZsdD0nXCJPcGVuIFNhbnNcIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLG8uc2l6ZS5kZmx0PTEyLG8uY29sb3IuZGZsdD1hLmRlZmF1bHRMaW5lLGUuZXhwb3J0cz17Y2FycGV0Ont2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHg6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LHk6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LGE6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGEwOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifSxkYTp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MSxlZGl0VHlwZTpcImNhbGNcIn0sYjp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sYjA6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjAsZWRpdFR5cGU6XCJjYWxjXCJ9LGRiOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxLGVkaXRUeXBlOlwiY2FsY1wifSxjaGVhdGVyc2xvcGU6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjEsZWRpdFR5cGU6XCJjYWxjXCJ9LGFheGlzOmksYmF4aXM6aSxmb250Om8sY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6YS5kZWZhdWx0TGluZSxlZGl0VHlwZTpcInBsb3RcIn0sdHJhbnNmb3Jtczp2b2lkIDB9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIjo1NzcsXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIjo3NzUsXCIuL2F4aXNfYXR0cmlidXRlc1wiOjg4Mn1dLDg4MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbyxzLGwsYyx1LGgsZixwLGQsZyx2LG0seT1uKHIpP1wiYVwiOlwiYlwiLHg9KFwiYVwiPT09eT90LmFheGlzOnQuYmF4aXMpLnNtb290aGluZyxiPVwiYVwiPT09eT90LmEyaTp0LmIyaixfPVwiYVwiPT09eT9yOmksdz1cImFcIj09PXk/aTpyLGs9XCJhXCI9PT15P2UuYS5sZW5ndGg6ZS5iLmxlbmd0aCxBPVwiYVwiPT09eT9lLmIubGVuZ3RoOmUuYS5sZW5ndGgsVD1NYXRoLmZsb29yKFwiYVwiPT09eT90LmIyaih3KTp0LmEyaSh3KSksTT1cImFcIj09PXk/ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLGUsVCl9OmZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxULGUpfTt4JiYocz1NYXRoLm1heCgwLE1hdGgubWluKEEtMixUKSksbD1ULXMsbz1cImFcIj09PXk/ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaShbXSxlLHMscixsKX06ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaihbXSxzLGUsbCxyKX0pO3ZhciBTPWIoX1swXSksRT1iKF9bMV0pLEM9UzxFPzE6LTEsTD0xZS04KihFLVMpLHo9Qz4wP01hdGguZmxvb3I6TWF0aC5jZWlsLE89Qz4wP01hdGguY2VpbDpNYXRoLmZsb29yLEk9Qz4wP01hdGgubWluOk1hdGgubWF4LEQ9Qz4wP01hdGgubWF4Ok1hdGgubWluLFA9eihTK0wpLFI9TyhFLUwpLEY9W1toPU0oUyldXTtmb3IoYT1QO2EqQzxSKkM7YSs9QyljPVtdLGc9RChTLGEpLG09KHY9SShFLGErQykpLWcsdT1NYXRoLm1heCgwLE1hdGgubWluKGstMixNYXRoLmZsb29yKC41KihnK3YpKSkpLGY9TSh2KSx4JiYocD1vKHUsZy11KSxkPW8odSx2LXUpLGMucHVzaChbaFswXStwWzBdLzMqbSxoWzFdK3BbMV0vMyptXSksYy5wdXNoKFtmWzBdLWRbMF0vMyptLGZbMV0tZFsxXS8zKm1dKSksYy5wdXNoKGYpLEYucHVzaChjKSxoPWY7cmV0dXJuIEZ9fSx7XCIuLi8uLi9saWJcIjo3MDF9XSw4ODI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbDtlLmV4cG9ydHM9e2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcImNhbGNcIn0sc21vb3RoaW5nOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxLG1pbjowLG1heDoxLjMsZWRpdFR5cGU6XCJjYWxjXCJ9LHRpdGxlOnt0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwiY2FsY1wifSxmb250Om4oe2VkaXRUeXBlOlwiY2FsY1wifSksb2Zmc2V0Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxMCxlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LHR5cGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcIi1cIixcImxpbmVhclwiLFwiZGF0ZVwiLFwiY2F0ZWdvcnlcIl0sZGZsdDpcIi1cIixlZGl0VHlwZTpcImNhbGNcIn0sYXV0b3JhbmdlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbITAsITEsXCJyZXZlcnNlZFwiXSxkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSxyYW5nZW1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcIm5vcm1hbFwiLFwidG96ZXJvXCIsXCJub25uZWdhdGl2ZVwiXSxkZmx0Olwibm9ybWFsXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHJhbmdlOnt2YWxUeXBlOlwiaW5mb19hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wiLGl0ZW1zOlt7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsY1wifSx7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsY1wifV19LGZpeGVkcmFuZ2U6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMSxlZGl0VHlwZTpcImNhbGNcIn0sY2hlYXRlcnR5cGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImluZGV4XCIsXCJ2YWx1ZVwiXSxkZmx0OlwidmFsdWVcIixlZGl0VHlwZTpcImNhbGNcIn0sdGlja21vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImxpbmVhclwiLFwiYXJyYXlcIl0sZGZsdDpcImFycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LG50aWNrczp7dmFsVHlwZTpcImludGVnZXJcIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6XCJjYWxjXCJ9LHRpY2t2YWxzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx0aWNrdGV4dDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sc2hvd3RpY2tsYWJlbHM6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInN0YXJ0XCIsXCJlbmRcIixcImJvdGhcIixcIm5vbmVcIl0sZGZsdDpcInN0YXJ0XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHRpY2tmb250Om4oe2VkaXRUeXBlOlwiY2FsY1wifSksdGlja2FuZ2xlOnt2YWxUeXBlOlwiYW5nbGVcIixkZmx0OlwiYXV0b1wiLGVkaXRUeXBlOlwiY2FsY1wifSx0aWNrcHJlZml4Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwiY2FsY1wifSxzaG93dGlja3ByZWZpeDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYWxsXCIsXCJmaXJzdFwiLFwibGFzdFwiLFwibm9uZVwiXSxkZmx0OlwiYWxsXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHRpY2tzdWZmaXg6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHNob3d0aWNrc3VmZml4Ont2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhbGxcIixcImZpcnN0XCIsXCJsYXN0XCIsXCJub25lXCJdLGRmbHQ6XCJhbGxcIixlZGl0VHlwZTpcImNhbGNcIn0sc2hvd2V4cG9uZW50Ont2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhbGxcIixcImZpcnN0XCIsXCJsYXN0XCIsXCJub25lXCJdLGRmbHQ6XCJhbGxcIixlZGl0VHlwZTpcImNhbGNcIn0sZXhwb25lbnRmb3JtYXQ6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcIm5vbmVcIixcImVcIixcIkVcIixcInBvd2VyXCIsXCJTSVwiLFwiQlwiXSxkZmx0OlwiQlwiLGVkaXRUeXBlOlwiY2FsY1wifSxzZXBhcmF0ZXRob3VzYW5kczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwiY2FsY1wifSx0aWNrZm9ybWF0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwiY2FsY1wifSx0aWNrZm9ybWF0c3RvcHM6byhhLnRpY2tmb3JtYXRzdG9wcyxcImNhbGNcIixcImZyb20tcm9vdFwiKSxjYXRlZ29yeW9yZGVyOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ0cmFjZVwiLFwiY2F0ZWdvcnkgYXNjZW5kaW5nXCIsXCJjYXRlZ29yeSBkZXNjZW5kaW5nXCIsXCJhcnJheVwiXSxkZmx0OlwidHJhY2VcIixlZGl0VHlwZTpcImNhbGNcIn0sY2F0ZWdvcnlhcnJheTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sbGFiZWxwYWRkaW5nOnt2YWxUeXBlOlwiaW50ZWdlclwiLGRmbHQ6MTAsZWRpdFR5cGU6XCJjYWxjXCJ9LGxhYmVscHJlZml4Ont2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGxhYmVsc3VmZml4Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwiY2FsY1wifSxzaG93bGluZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwiY2FsY1wifSxsaW5lY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZTpcImNhbGNcIn0sbGluZXdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOlwiY2FsY1wifSxncmlkY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwiY2FsY1wifSxncmlkd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6XCJjYWxjXCJ9LHNob3dncmlkOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LG1pbm9yZ3JpZGNvdW50Ont2YWxUeXBlOlwiaW50ZWdlclwiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTpcImNhbGNcIn0sbWlub3Jncmlkd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6XCJjYWxjXCJ9LG1pbm9yZ3JpZGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmkubGlnaHRMaW5lLGVkaXRUeXBlOlwiY2FsY1wifSxzdGFydGxpbmU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHN0YXJ0bGluZWNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcImNhbGNcIn0sc3RhcnRsaW5ld2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjEsZWRpdFR5cGU6XCJjYWxjXCJ9LGVuZGxpbmU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGVuZGxpbmV3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MSxlZGl0VHlwZTpcImNhbGNcIn0sZW5kbGluZWNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcImNhbGNcIn0sdGljazA6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6XCJjYWxjXCJ9LGR0aWNrOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOlwiY2FsY1wifSxhcnJheXRpY2swOnt2YWxUeXBlOlwiaW50ZWdlclwiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTpcImNhbGNcIn0sYXJyYXlkdGljazp7dmFsVHlwZTpcImludGVnZXJcIixtaW46MSxkZmx0OjEsZWRpdFR5cGU6XCJjYWxjXCJ9LF9kZXByZWNhdGVkOnt0aXRsZTp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwiY2FsY1wifSx0aXRsZWZvbnQ6bih7ZWRpdFR5cGU6XCJjYWxjXCJ9KSx0aXRsZW9mZnNldDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MTAsZWRpdFR5cGU6XCJjYWxjXCJ9fSxlZGl0VHlwZTpcImNhbGNcIn19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiOjU3NyxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo3NjEsXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIjo3NzV9XSw4ODM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIikuYWRkT3BhY2l0eSxhPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxvPXQoXCIuLi8uLi9saWJcIikscz10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHNcIiksbD10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHNcIiksYz10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzXCIpLHU9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZXRfY29udmVydFwiKSxoPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19hdXRvdHlwZVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBmPXIubGV0dGVyLHA9ci5mb250fHx7fSxkPW5bZitcImF4aXNcIl07ZnVuY3Rpb24gZyhyLG4pe3JldHVybiBvLmNvZXJjZSh0LGUsZCxyLG4pfWZ1bmN0aW9uIHYocixuKXtyZXR1cm4gby5jb2VyY2UyKHQsZSxkLHIsbil9ci5uYW1lJiYoZS5fbmFtZT1yLm5hbWUsZS5faWQ9ci5uYW1lKTt2YXIgbT1nKFwidHlwZVwiKTsoXCItXCI9PT1tJiYoci5kYXRhJiZmdW5jdGlvbih0LGUpe2lmKFwiLVwiIT09dC50eXBlKXJldHVybjt2YXIgcj10Ll9pZC5jaGFyQXQoMCksbj10W3IrXCJjYWxlbmRhclwiXTt0LnR5cGU9aChlLG4pfShlLHIuZGF0YSksXCItXCI9PT1lLnR5cGU/ZS50eXBlPVwibGluZWFyXCI6bT10LnR5cGU9ZS50eXBlKSxnKFwic21vb3RoaW5nXCIpLGcoXCJjaGVhdGVydHlwZVwiKSxnKFwic2hvd3RpY2tsYWJlbHNcIiksZyhcImxhYmVscHJlZml4XCIsZitcIiA9IFwiKSxnKFwibGFiZWxzdWZmaXhcIiksZyhcInNob3d0aWNrcHJlZml4XCIpLGcoXCJzaG93dGlja3N1ZmZpeFwiKSxnKFwic2VwYXJhdGV0aG91c2FuZHNcIiksZyhcInRpY2tmb3JtYXRcIiksZyhcImV4cG9uZW50Zm9ybWF0XCIpLGcoXCJzaG93ZXhwb25lbnRcIiksZyhcImNhdGVnb3J5b3JkZXJcIiksZyhcInRpY2ttb2RlXCIpLGcoXCJ0aWNrdmFsc1wiKSxnKFwidGlja3RleHRcIiksZyhcInRpY2swXCIpLGcoXCJkdGlja1wiKSxcImFycmF5XCI9PT1lLnRpY2ttb2RlJiYoZyhcImFycmF5dGljazBcIiksZyhcImFycmF5ZHRpY2tcIikpLGcoXCJsYWJlbHBhZGRpbmdcIiksZS5faG92ZXJ0aXRsZT1mLFwiZGF0ZVwiPT09bSkmJmEuZ2V0Q29tcG9uZW50TWV0aG9kKFwiY2FsZW5kYXJzXCIsXCJoYW5kbGVEZWZhdWx0c1wiKSh0LGUsXCJjYWxlbmRhclwiLHIuY2FsZW5kYXIpO3UoZSxyLmZ1bGxMYXlvdXQpLGUuYzJwPW8uaWRlbnRpdHk7dmFyIHk9ZyhcImNvbG9yXCIsci5kZmx0Q29sb3IpLHg9eT09PXQuY29sb3I/eTpwLmNvbG9yO2coXCJ0aXRsZS50ZXh0XCIpJiYoby5jb2VyY2VGb250KGcsXCJ0aXRsZS5mb250XCIse2ZhbWlseTpwLmZhbWlseSxzaXplOk1hdGgucm91bmQoMS4yKnAuc2l6ZSksY29sb3I6eH0pLGcoXCJ0aXRsZS5vZmZzZXRcIikpLGcoXCJ0aWNrYW5nbGVcIiksZyhcImF1dG9yYW5nZVwiLCFlLmlzVmFsaWRSYW5nZSh0LnJhbmdlKSkmJmcoXCJyYW5nZW1vZGVcIiksZyhcInJhbmdlXCIpLGUuY2xlYW5SYW5nZSgpLGcoXCJmaXhlZHJhbmdlXCIpLHModCxlLGcsbSksbCh0LGUsZyxtLHIpLGModCxlLGcse2RhdGE6ci5kYXRhLGRhdGFBdHRyOmZ9KTt2YXIgYj12KFwiZ3JpZGNvbG9yXCIsaSh5LC4zKSksXz12KFwiZ3JpZHdpZHRoXCIpLHc9ZyhcInNob3dncmlkXCIpO3d8fChkZWxldGUgZS5ncmlkY29sb3IsZGVsZXRlIGUuZ3JpZHdpZHRoKTt2YXIgaz12KFwic3RhcnRsaW5lY29sb3JcIix5KSxBPXYoXCJzdGFydGxpbmV3aWR0aFwiLF8pO2coXCJzdGFydGxpbmVcIixlLnNob3dncmlkfHwhIWt8fCEhQSl8fChkZWxldGUgZS5zdGFydGxpbmVjb2xvcixkZWxldGUgZS5zdGFydGxpbmV3aWR0aCk7dmFyIFQ9dihcImVuZGxpbmVjb2xvclwiLHkpLE09dihcImVuZGxpbmV3aWR0aFwiLF8pO3JldHVybiBnKFwiZW5kbGluZVwiLGUuc2hvd2dyaWR8fCEhVHx8ISFNKXx8KGRlbGV0ZSBlLmVuZGxpbmVjb2xvcixkZWxldGUgZS5lbmRsaW5ld2lkdGgpLHc/KGcoXCJtaW5vcmdyaWRjb3VudFwiKSxnKFwibWlub3Jncmlkd2lkdGhcIixfKSxnKFwibWlub3JncmlkY29sb3JcIixpKGIsLjA2KSksZS5taW5vcmdyaWRjb3VudHx8KGRlbGV0ZSBlLm1pbm9yZ3JpZHdpZHRoLGRlbGV0ZSBlLm1pbm9yZ3JpZGNvbG9yKSk6KGRlbGV0ZSBlLmdyaWRjb2xvcixkZWxldGUgZS5ncmlkV2lkdGgpLFwibm9uZVwiPT09ZS5zaG93dGlja2xhYmVscyYmKGRlbGV0ZSBlLnRpY2tmb250LGRlbGV0ZSBlLnRpY2thbmdsZSxkZWxldGUgZS5zaG93ZXhwb25lbnQsZGVsZXRlIGUuZXhwb25lbnRmb3JtYXQsZGVsZXRlIGUudGlja2Zvcm1hdCxkZWxldGUgZS5zaG93dGlja3N1ZmZpeCxkZWxldGUgZS5zaG93dGlja3ByZWZpeCksZS5zaG93dGlja3N1ZmZpeHx8ZGVsZXRlIGUudGlja3N1ZmZpeCxlLnNob3d0aWNrcHJlZml4fHxkZWxldGUgZS50aWNrcHJlZml4LGcoXCJ0aWNrbW9kZVwiKSxlfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlXCI6NzUwLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzXCI6NzUzLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3NldF9jb252ZXJ0XCI6NzY3LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHNcIjo3NjgsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0c1wiOjc3MCxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9hdHRyaWJ1dGVzXCI6ODgwfV0sODg0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGk9dChcIi4uLy4uL2xpYlwiKS5pc0FycmF5MUQsYT10KFwiLi9jaGVhdGVyX2Jhc2lzXCIpLG89dChcIi4vYXJyYXlfbWlubWF4XCIpLHM9dChcIi4vY2FsY19ncmlkbGluZXNcIiksbD10KFwiLi9jYWxjX2xhYmVsc1wiKSxjPXQoXCIuL2NhbGNfY2xpcHBhdGhcIiksdT10KFwiLi4vaGVhdG1hcC9jbGVhbl8yZF9hcnJheVwiKSxoPXQoXCIuL3Ntb290aF9maWxsXzJkX2FycmF5XCIpLGY9dChcIi4uL2hlYXRtYXAvY29udmVydF9jb2x1bW5feHl6XCIpLHA9dChcIi4vc2V0X2NvbnZlcnRcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5nZXRGcm9tSWQodCxlLnhheGlzKSxkPW4uZ2V0RnJvbUlkKHQsZS55YXhpcyksZz1lLmFheGlzLHY9ZS5iYXhpcyxtPWUueCx5PWUueSx4PVtdO20mJmkobSkmJngucHVzaChcInhcIikseSYmaSh5KSYmeC5wdXNoKFwieVwiKSx4Lmxlbmd0aCYmZihlLGcsdixcImFcIixcImJcIix4KTt2YXIgYj1lLl9hPWUuX2F8fGUuYSxfPWUuX2I9ZS5fYnx8ZS5iO209ZS5feHx8ZS54LHk9ZS5feXx8ZS55O3ZhciB3PXt9O2lmKGUuX2NoZWF0ZXIpe3ZhciBrPVwiaW5kZXhcIj09PWcuY2hlYXRlcnR5cGU/Yi5sZW5ndGg6YixBPVwiaW5kZXhcIj09PXYuY2hlYXRlcnR5cGU/Xy5sZW5ndGg6XzttPWEoayxBLGUuY2hlYXRlcnNsb3BlKX1lLl94PW09dShtKSxlLl95PXk9dSh5KSxoKG0sYixfKSxoKHksYixfKSxwKGUpLGUuc2V0U2NhbGUoKTt2YXIgVD1vKG0pLE09byh5KSxTPS41KihUWzFdLVRbMF0pLEU9LjUqKFRbMV0rVFswXSksQz0uNSooTVsxXS1NWzBdKSxMPS41KihNWzFdK01bMF0pO3JldHVybiBUPVtFLTEuMypTLEUrMS4zKlNdLE09W0wtMS4zKkMsTCsxLjMqQ10sZS5fZXh0cmVtZXNbci5faWRdPW4uZmluZEV4dHJlbWVzKHIsVCx7cGFkZGVkOiEwfSksZS5fZXh0cmVtZXNbZC5faWRdPW4uZmluZEV4dHJlbWVzKGQsTSx7cGFkZGVkOiEwfSkscyhlLFwiYVwiLFwiYlwiKSxzKGUsXCJiXCIsXCJhXCIpLGwoZSxnKSxsKGUsdiksdy5jbGlwc2VnbWVudHM9YyhlLl94Y3RybCxlLl95Y3RybCxnLHYpLHcueD1tLHcueT15LHcuYT1iLHcuYj1fLFt3XX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vaGVhdG1hcC9jbGVhbl8yZF9hcnJheVwiOjk1MCxcIi4uL2hlYXRtYXAvY29udmVydF9jb2x1bW5feHl6XCI6OTUyLFwiLi9hcnJheV9taW5tYXhcIjo4NzksXCIuL2NhbGNfY2xpcHBhdGhcIjo4ODUsXCIuL2NhbGNfZ3JpZGxpbmVzXCI6ODg2LFwiLi9jYWxjX2xhYmVsc1wiOjg4NyxcIi4vY2hlYXRlcl9iYXNpc1wiOjg4OSxcIi4vc2V0X2NvbnZlcnRcIjo5MDIsXCIuL3Ntb290aF9maWxsXzJkX2FycmF5XCI6OTAzfV0sODg1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzPVtdLGw9ISFyLnNtb290aGluZyxjPSEhbi5zbW9vdGhpbmcsdT10WzBdLmxlbmd0aC0xLGg9dC5sZW5ndGgtMTtmb3IoaT0wLGE9W10sbz1bXTtpPD11O2krKylhW2ldPXRbMF1baV0sb1tpXT1lWzBdW2ldO2ZvcihzLnB1c2goe3g6YSx5Om8sYmljdWJpYzpsfSksaT0wLGE9W10sbz1bXTtpPD1oO2krKylhW2ldPXRbaV1bdV0sb1tpXT1lW2ldW3VdO2ZvcihzLnB1c2goe3g6YSx5Om8sYmljdWJpYzpjfSksaT11LGE9W10sbz1bXTtpPj0wO2ktLSlhW3UtaV09dFtoXVtpXSxvW3UtaV09ZVtoXVtpXTtmb3Iocy5wdXNoKHt4OmEseTpvLGJpY3ViaWM6bH0pLGk9aCxhPVtdLG89W107aT49MDtpLS0pYVtoLWldPXRbaV1bMF0sb1toLWldPWVbaV1bMF07cmV0dXJuIHMucHVzaCh7eDphLHk6byxiaWN1YmljOmN9KSxzfX0se31dLDg4NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxpPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxvLHMsbCxjLHUsaCxmLHAsZCxnLHYsbSx5LHg9dFtcIl9cIitlXSxiPXRbZStcImF4aXNcIl0sXz1iLl9ncmlkbGluZXM9W10sdz1iLl9taW5vcmdyaWRsaW5lcz1bXSxrPWIuX2JvdW5kYXJ5bGluZXM9W10sQT10W1wiX1wiK3JdLFQ9dFtyK1wiYXhpc1wiXTtcImFycmF5XCI9PT1iLnRpY2ttb2RlJiYoYi50aWNrdmFscz14LnNsaWNlKCkpO3ZhciBNPXQuX3hjdHJsLFM9dC5feWN0cmwsRT1NWzBdLmxlbmd0aCxDPU0ubGVuZ3RoLEw9dC5fYS5sZW5ndGgsej10Ll9iLmxlbmd0aDtuLnByZXBUaWNrcyhiKSxcImFycmF5XCI9PT1iLnRpY2ttb2RlJiZkZWxldGUgYi50aWNrdmFsczt2YXIgTz1iLnNtb290aGluZz8zOjE7ZnVuY3Rpb24gSShuKXt2YXIgaSxhLG8scyxsLGMsdSxoLHAsZCxnLHYsbT1bXSx5PVtdLHg9e307aWYoXCJiXCI9PT1lKWZvcihhPXQuYjJqKG4pLG89TWF0aC5mbG9vcihNYXRoLm1heCgwLE1hdGgubWluKHotMixhKSkpLHM9YS1vLHgubGVuZ3RoPXoseC5jcm9zc0xlbmd0aD1MLHgueHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLGUsYSl9LHguZHh5PWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGkoW10sZSxvLHIscyl9LGk9MDtpPEw7aSsrKWM9TWF0aC5taW4oTC0yLGkpLHU9aS1jLGg9dC5ldmFseHkoW10saSxhKSxULnNtb290aGluZyYmaT4wJiYocD10LmR4eWRpKFtdLGktMSxvLDAscyksbS5wdXNoKGxbMF0rcFswXS8zKSx5LnB1c2gobFsxXStwWzFdLzMpLGQ9dC5keHlkaShbXSxpLTEsbywxLHMpLG0ucHVzaChoWzBdLWRbMF0vMykseS5wdXNoKGhbMV0tZFsxXS8zKSksbS5wdXNoKGhbMF0pLHkucHVzaChoWzFdKSxsPWg7ZWxzZSBmb3IoaT10LmEyaShuKSxjPU1hdGguZmxvb3IoTWF0aC5tYXgoMCxNYXRoLm1pbihMLTIsaSkpKSx1PWktYyx4Lmxlbmd0aD1MLHguY3Jvc3NMZW5ndGg9eix4Lnh5PWZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxpLGUpfSx4LmR4eT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmR4eWRqKFtdLGMsZSx1LHIpfSxhPTA7YTx6O2ErKylvPU1hdGgubWluKHotMixhKSxzPWEtbyxoPXQuZXZhbHh5KFtdLGksYSksVC5zbW9vdGhpbmcmJmE+MCYmKGc9dC5keHlkaihbXSxjLGEtMSx1LDApLG0ucHVzaChsWzBdK2dbMF0vMykseS5wdXNoKGxbMV0rZ1sxXS8zKSx2PXQuZHh5ZGooW10sYyxhLTEsdSwxKSxtLnB1c2goaFswXS12WzBdLzMpLHkucHVzaChoWzFdLXZbMV0vMykpLG0ucHVzaChoWzBdKSx5LnB1c2goaFsxXSksbD1oO3JldHVybiB4LmF4aXNMZXR0ZXI9ZSx4LmF4aXM9Yix4LmNyb3NzQXhpcz1ULHgudmFsdWU9bix4LmNvbnN0dmFyPXIseC5pbmRleD1mLHgueD1tLHgueT15LHguc21vb3RoaW5nPVQuc21vb3RoaW5nLHh9ZnVuY3Rpb24gRChuKXt2YXIgaSxhLG8scyxsLGM9W10sdT1bXSxoPXt9O2lmKGgubGVuZ3RoPXgubGVuZ3RoLGguY3Jvc3NMZW5ndGg9QS5sZW5ndGgsXCJiXCI9PT1lKWZvcihvPU1hdGgubWF4KDAsTWF0aC5taW4oei0yLG4pKSxsPU1hdGgubWluKDEsTWF0aC5tYXgoMCxuLW8pKSxoLnh5PWZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxlLG4pfSxoLmR4eT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmR4eWRpKFtdLGUsbyxyLGwpfSxpPTA7aTxFO2krKyljW2ldPU1bbipPXVtpXSx1W2ldPVNbbipPXVtpXTtlbHNlIGZvcihhPU1hdGgubWF4KDAsTWF0aC5taW4oTC0yLG4pKSxzPU1hdGgubWluKDEsTWF0aC5tYXgoMCxuLWEpKSxoLnh5PWZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxuLGUpfSxoLmR4eT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmR4eWRqKFtdLGEsZSxzLHIpfSxpPTA7aTxDO2krKyljW2ldPU1baV1bbipPXSx1W2ldPVNbaV1bbipPXTtyZXR1cm4gaC5heGlzTGV0dGVyPWUsaC5heGlzPWIsaC5jcm9zc0F4aXM9VCxoLnZhbHVlPXhbbl0saC5jb25zdHZhcj1yLGguaW5kZXg9bixoLng9YyxoLnk9dSxoLnNtb290aGluZz1ULnNtb290aGluZyxofWlmKFwiYXJyYXlcIj09PWIudGlja21vZGUpe2ZvcihsPTVlLTE1LHU9KGM9W01hdGguZmxvb3IoKHgubGVuZ3RoLTEtYi5hcnJheXRpY2swKS9iLmFycmF5ZHRpY2sqKDErbCkpLE1hdGguY2VpbCgtYi5hcnJheXRpY2swL2IuYXJyYXlkdGljay8oMStsKSldLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpWzBdLTEsaD1jWzFdKzEsZj11O2Y8aDtmKyspKG89Yi5hcnJheXRpY2swK2IuYXJyYXlkdGljaypmKTwwfHxvPngubGVuZ3RoLTF8fF8ucHVzaChpKEQobykse2NvbG9yOmIuZ3JpZGNvbG9yLHdpZHRoOmIuZ3JpZHdpZHRofSkpO2ZvcihmPXU7ZjxoO2YrKylpZihzPWIuYXJyYXl0aWNrMCtiLmFycmF5ZHRpY2sqZixnPU1hdGgubWluKHMrYi5hcnJheWR0aWNrLHgubGVuZ3RoLTEpLCEoczwwfHxzPngubGVuZ3RoLTF8fGc8MHx8Zz54Lmxlbmd0aC0xKSlmb3Iodj14W3NdLG09eFtnXSxhPTA7YTxiLm1pbm9yZ3JpZGNvdW50O2ErKykoeT1nLXMpPD0wfHwoZD12KyhtLXYpKihhKzEpLyhiLm1pbm9yZ3JpZGNvdW50KzEpKihiLmFycmF5ZHRpY2sveSkpPHhbMF18fGQ+eFt4Lmxlbmd0aC0xXXx8dy5wdXNoKGkoSShkKSx7Y29sb3I6Yi5taW5vcmdyaWRjb2xvcix3aWR0aDpiLm1pbm9yZ3JpZHdpZHRofSkpO2Iuc3RhcnRsaW5lJiZrLnB1c2goaShEKDApLHtjb2xvcjpiLnN0YXJ0bGluZWNvbG9yLHdpZHRoOmIuc3RhcnRsaW5ld2lkdGh9KSksYi5lbmRsaW5lJiZrLnB1c2goaShEKHgubGVuZ3RoLTEpLHtjb2xvcjpiLmVuZGxpbmVjb2xvcix3aWR0aDpiLmVuZGxpbmV3aWR0aH0pKX1lbHNle2ZvcihsPTVlLTE1LHU9KGM9W01hdGguZmxvb3IoKHhbeC5sZW5ndGgtMV0tYi50aWNrMCkvYi5kdGljayooMStsKSksTWF0aC5jZWlsKCh4WzBdLWIudGljazApL2IuZHRpY2svKDErbCkpXS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKVswXSxoPWNbMV0sZj11O2Y8PWg7ZisrKXA9Yi50aWNrMCtiLmR0aWNrKmYsXy5wdXNoKGkoSShwKSx7Y29sb3I6Yi5ncmlkY29sb3Isd2lkdGg6Yi5ncmlkd2lkdGh9KSk7Zm9yKGY9dS0xO2Y8aCsxO2YrKylmb3IocD1iLnRpY2swK2IuZHRpY2sqZixhPTA7YTxiLm1pbm9yZ3JpZGNvdW50O2ErKykoZD1wK2IuZHRpY2sqKGErMSkvKGIubWlub3JncmlkY291bnQrMSkpPHhbMF18fGQ+eFt4Lmxlbmd0aC0xXXx8dy5wdXNoKGkoSShkKSx7Y29sb3I6Yi5taW5vcmdyaWRjb2xvcix3aWR0aDpiLm1pbm9yZ3JpZHdpZHRofSkpO2Iuc3RhcnRsaW5lJiZrLnB1c2goaShJKHhbMF0pLHtjb2xvcjpiLnN0YXJ0bGluZWNvbG9yLHdpZHRoOmIuc3RhcnRsaW5ld2lkdGh9KSksYi5lbmRsaW5lJiZrLnB1c2goaShJKHhbeC5sZW5ndGgtMV0pLHtjb2xvcjpiLmVuZGxpbmVjb2xvcix3aWR0aDpiLmVuZGxpbmV3aWR0aH0pKX19fSx7XCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDl9XSw4ODc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksaT10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGEsbyxzPWUuX2xhYmVscz1bXSxsPWUuX2dyaWRsaW5lcztmb3Iocj0wO3I8bC5sZW5ndGg7cisrKW89bFtyXSwtMSE9PVtcInN0YXJ0XCIsXCJib3RoXCJdLmluZGV4T2YoZS5zaG93dGlja2xhYmVscykmJihhPW4udGlja1RleHQoZSxvLnZhbHVlKSxpKGEse3ByZWZpeDp2b2lkIDAsc3VmZml4OnZvaWQgMCxlbmRBbmNob3I6ITAseHk6by54eSgwKSxkeHk6by5keHkoMCwwKSxheGlzOm8uYXhpcyxsZW5ndGg6by5jcm9zc0F4aXMubGVuZ3RoLGZvbnQ6by5heGlzLnRpY2tmb250LGlzRmlyc3Q6MD09PXIsaXNMYXN0OnI9PT1sLmxlbmd0aC0xfSkscy5wdXNoKGEpKSwtMSE9PVtcImVuZFwiLFwiYm90aFwiXS5pbmRleE9mKGUuc2hvd3RpY2tsYWJlbHMpJiYoYT1uLnRpY2tUZXh0KGUsby52YWx1ZSksaShhLHtlbmRBbmNob3I6ITEseHk6by54eShvLmNyb3NzTGVuZ3RoLTEpLGR4eTpvLmR4eShvLmNyb3NzTGVuZ3RoLTIsMSksYXhpczpvLmF4aXMsbGVuZ3RoOm8uY3Jvc3NBeGlzLmxlbmd0aCxmb250Om8uYXhpcy50aWNrZm9udCxpc0ZpcnN0OjA9PT1yLGlzTGFzdDpyPT09bC5sZW5ndGgtMX0pLHMucHVzaChhKSl9fSx7XCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDl9XSw4ODg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dFswXS1lWzBdLGE9dFsxXS1lWzFdLG89clswXS1lWzBdLHM9clsxXS1lWzFdLGw9TWF0aC5wb3coaSppK2EqYSwuMjUpLGM9TWF0aC5wb3cobypvK3MqcywuMjUpLHU9KGMqYyppLWwqbCpvKSpuLGg9KGMqYyphLWwqbCpzKSpuLGY9YyoobCtjKSozLHA9bCoobCtjKSozO3JldHVybltbZVswXSsoZiYmdS9mKSxlWzFdKyhmJiZoL2YpXSxbZVswXS0ocCYmdS9wKSxlWzFdLShwJiZoL3ApXV19fSx7fV0sODg5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGksYSxvLHMsbCxjLHU9W10saD1uKHQpP3QubGVuZ3RoOnQsZj1uKGUpP2UubGVuZ3RoOmUscD1uKHQpP3Q6bnVsbCxkPW4oZSk/ZTpudWxsO3AmJihvPShwLmxlbmd0aC0xKS8ocFtwLmxlbmd0aC0xXS1wWzBdKS8oaC0xKSksZCYmKHM9KGQubGVuZ3RoLTEpLyhkW2QubGVuZ3RoLTFdLWRbMF0pLyhmLTEpKTt2YXIgZz0xLzAsdj0tMS8wO2ZvcihhPTA7YTxmO2ErKylmb3IodVthXT1bXSxsPWQ/KGRbYV0tZFswXSkqczphLyhmLTEpLGk9MDtpPGg7aSsrKWM9KHA/KHBbaV0tcFswXSkqbzppLyhoLTEpKS1sKnIsZz1NYXRoLm1pbihjLGcpLHY9TWF0aC5tYXgoYyx2KSx1W2FdW2ldPWM7dmFyIG09MS8odi1nKSx5PS1nKm07Zm9yKGE9MDthPGY7YSsrKWZvcihpPTA7aTxoO2krKyl1W2FdW2ldPW0qdVthXVtpXSt5O3JldHVybiB1fX0se1wiLi4vLi4vbGliXCI6NzAxfV0sODkwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vY2F0bXVsbF9yb21cIiksaT10KFwiLi4vLi4vbGliXCIpLmVuc3VyZUFycmF5O2Z1bmN0aW9uIGEodCxlLHIpe3ZhciBuPS0uNSpyWzBdKzEuNSplWzBdLGk9LS41KnJbMV0rMS41KmVbMV07cmV0dXJuWygyKm4rdFswXSkvMywoMippK3RbMV0pLzNdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMsbCl7dmFyIGMsdSxoLGYscCxkLGcsdixtLHkseD1yWzBdLmxlbmd0aCxiPXIubGVuZ3RoLF89cz8zKngtMjp4LHc9bD8zKmItMjpiO2Zvcih0PWkodCx3KSxlPWkoZSx3KSxoPTA7aDx3O2grKyl0W2hdPWkodFtoXSxfKSxlW2hdPWkoZVtoXSxfKTtmb3IodT0wLGY9MDt1PGI7dSsrLGYrPWw/MzoxKWZvcihwPXRbZl0sZD1lW2ZdLGc9clt1XSx2PW9bdV0sYz0wLGg9MDtjPHg7YysrLGgrPXM/MzoxKXBbaF09Z1tjXSxkW2hdPXZbY107aWYocylmb3IodT0wLGY9MDt1PGI7dSsrLGYrPWw/MzoxKXtmb3IoYz0xLGg9MztjPHgtMTtjKyssaCs9MyltPW4oW3JbdV1bYy0xXSxvW3VdW2MtMV1dLFtyW3VdW2NdLG9bdV1bY11dLFtyW3VdW2MrMV0sb1t1XVtjKzFdXSxzKSx0W2ZdW2gtMV09bVswXVswXSxlW2ZdW2gtMV09bVswXVsxXSx0W2ZdW2grMV09bVsxXVswXSxlW2ZdW2grMV09bVsxXVsxXTt5PWEoW3RbZl1bMF0sZVtmXVswXV0sW3RbZl1bMl0sZVtmXVsyXV0sW3RbZl1bM10sZVtmXVszXV0pLHRbZl1bMV09eVswXSxlW2ZdWzFdPXlbMV0seT1hKFt0W2ZdW18tMV0sZVtmXVtfLTFdXSxbdFtmXVtfLTNdLGVbZl1bXy0zXV0sW3RbZl1bXy00XSxlW2ZdW18tNF1dKSx0W2ZdW18tMl09eVswXSxlW2ZdW18tMl09eVsxXX1pZihsKWZvcihoPTA7aDxfO2grKyl7Zm9yKGY9MztmPHctMztmKz0zKW09bihbdFtmLTNdW2hdLGVbZi0zXVtoXV0sW3RbZl1baF0sZVtmXVtoXV0sW3RbZiszXVtoXSxlW2YrM11baF1dLGwpLHRbZi0xXVtoXT1tWzBdWzBdLGVbZi0xXVtoXT1tWzBdWzFdLHRbZisxXVtoXT1tWzFdWzBdLGVbZisxXVtoXT1tWzFdWzFdO3k9YShbdFswXVtoXSxlWzBdW2hdXSxbdFsyXVtoXSxlWzJdW2hdXSxbdFszXVtoXSxlWzNdW2hdXSksdFsxXVtoXT15WzBdLGVbMV1baF09eVsxXSx5PWEoW3Rbdy0xXVtoXSxlW3ctMV1baF1dLFt0W3ctM11baF0sZVt3LTNdW2hdXSxbdFt3LTRdW2hdLGVbdy00XVtoXV0pLHRbdy0yXVtoXT15WzBdLGVbdy0yXVtoXT15WzFdfWlmKHMmJmwpZm9yKGY9MTtmPHc7Zis9KGYrMSklMz09MD8yOjEpe2ZvcihoPTM7aDxfLTM7aCs9MyltPW4oW3RbZl1baC0zXSxlW2ZdW2gtM11dLFt0W2ZdW2hdLGVbZl1baF1dLFt0W2ZdW2grM10sZVtmXVtoKzNdXSxzKSx0W2ZdW2gtMV09LjUqKHRbZl1baC0xXSttWzBdWzBdKSxlW2ZdW2gtMV09LjUqKGVbZl1baC0xXSttWzBdWzFdKSx0W2ZdW2grMV09LjUqKHRbZl1baCsxXSttWzFdWzBdKSxlW2ZdW2grMV09LjUqKGVbZl1baCsxXSttWzFdWzFdKTt5PWEoW3RbZl1bMF0sZVtmXVswXV0sW3RbZl1bMl0sZVtmXVsyXV0sW3RbZl1bM10sZVtmXVszXV0pLHRbZl1bMV09LjUqKHRbZl1bMV0reVswXSksZVtmXVsxXT0uNSooZVtmXVsxXSt5WzFdKSx5PWEoW3RbZl1bXy0xXSxlW2ZdW18tMV1dLFt0W2ZdW18tM10sZVtmXVtfLTNdXSxbdFtmXVtfLTRdLGVbZl1bXy00XV0pLHRbZl1bXy0yXT0uNSoodFtmXVtfLTJdK3lbMF0pLGVbZl1bXy0yXT0uNSooZVtmXVtfLTJdK3lbMV0pfXJldHVyblt0LGVdfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi9jYXRtdWxsX3JvbVwiOjg4OH1dLDg5MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17UkVMQVRJVkVfQ1VMTF9UT0xFUkFOQ0U6MWUtNn19LHt9XSw4OTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlJiZyP2Z1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGMsdSxoO2V8fChlPVtdKSxyKj0zLG4qPTM7dmFyIGY9aSppLHA9MS1pLGQ9cCpwLGc9cCppKjIsdj0tMypkLG09MyooZC1nKSx5PTMqKGctZikseD0zKmYsYj1hKmEsXz1iKmEsdz0xLWEsaz13KncsQT1rKnc7Zm9yKGg9MDtoPHQubGVuZ3RoO2grKylvPXYqKHU9dFtoXSlbbl1bcl0rbSp1W25dW3IrMV0reSp1W25dW3IrMl0reCp1W25dW3IrM10scz12KnVbbisxXVtyXSttKnVbbisxXVtyKzFdK3kqdVtuKzFdW3IrMl0reCp1W24rMV1bciszXSxsPXYqdVtuKzJdW3JdK20qdVtuKzJdW3IrMV0reSp1W24rMl1bcisyXSt4KnVbbisyXVtyKzNdLGM9dip1W24rM11bcl0rbSp1W24rM11bcisxXSt5KnVbbiszXVtyKzJdK3gqdVtuKzNdW3IrM10sZVtoXT1BKm8rMyooayphKnMrdypiKmwpK18qYztyZXR1cm4gZX06ZT9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjO2V8fChlPVtdKSxyKj0zO3ZhciB1PWkqaSxoPTEtaSxmPWgqaCxwPWgqaSoyLGQ9LTMqZixnPTMqKGYtcCksdj0zKihwLXUpLG09Myp1LHk9MS1hO2ZvcihsPTA7bDx0Lmxlbmd0aDtsKyspbz1kKihjPXRbbF0pW25dW3JdK2cqY1tuXVtyKzFdK3YqY1tuXVtyKzJdK20qY1tuXVtyKzNdLHM9ZCpjW24rMV1bcl0rZypjW24rMV1bcisxXSt2KmNbbisxXVtyKzJdK20qY1tuKzFdW3IrM10sZVtsXT15Km8rYSpzO3JldHVybiBlfTpyP2Z1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGMsdSxoO2V8fChlPVtdKSxuKj0zO3ZhciBmPWEqYSxwPWYqYSxkPTEtYSxnPWQqZCx2PWcqZDtmb3IodT0wO3U8dC5sZW5ndGg7dSsrKW89KGg9dFt1XSlbbl1bcisxXS1oW25dW3JdLHM9aFtuKzFdW3IrMV0taFtuKzFdW3JdLGw9aFtuKzJdW3IrMV0taFtuKzJdW3JdLGM9aFtuKzNdW3IrMV0taFtuKzNdW3JdLGVbdV09dipvKzMqKGcqYSpzK2QqZipsKStwKmM7cmV0dXJuIGV9OmZ1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGM7ZXx8KGU9W10pO3ZhciB1PTEtYTtmb3IobD0wO2w8dC5sZW5ndGg7bCsrKW89KGM9dFtsXSlbbl1bcisxXS1jW25dW3JdLHM9Y1tuKzFdW3IrMV0tY1tuKzFdW3JdLGVbbF09dSpvK2EqcztyZXR1cm4gZX19fSx7fV0sODkzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSYmcj9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjLHUsaDtlfHwoZT1bXSkscio9MyxuKj0zO3ZhciBmPWkqaSxwPWYqaSxkPTEtaSxnPWQqZCx2PWcqZCxtPWEqYSx5PTEtYSx4PXkqeSxiPXkqYSoyLF89LTMqeCx3PTMqKHgtYiksaz0zKihiLW0pLEE9MyptO2ZvcihoPTA7aDx0Lmxlbmd0aDtoKyspbz1fKih1PXRbaF0pW25dW3JdK3cqdVtuKzFdW3JdK2sqdVtuKzJdW3JdK0EqdVtuKzNdW3JdLHM9Xyp1W25dW3IrMV0rdyp1W24rMV1bcisxXStrKnVbbisyXVtyKzFdK0EqdVtuKzNdW3IrMV0sbD1fKnVbbl1bcisyXSt3KnVbbisxXVtyKzJdK2sqdVtuKzJdW3IrMl0rQSp1W24rM11bcisyXSxjPV8qdVtuXVtyKzNdK3cqdVtuKzFdW3IrM10rayp1W24rMl1bciszXStBKnVbbiszXVtyKzNdLGVbaF09dipvKzMqKGcqaSpzK2QqZipsKStwKmM7cmV0dXJuIGV9OmU/ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbyxzLGwsYyx1LGg7ZXx8KGU9W10pLHIqPTM7dmFyIGY9YSphLHA9ZiphLGQ9MS1hLGc9ZCpkLHY9ZypkO2Zvcih1PTA7dTx0Lmxlbmd0aDt1Kyspbz0oaD10W3VdKVtuKzFdW3JdLWhbbl1bcl0scz1oW24rMV1bcisxXS1oW25dW3IrMV0sbD1oW24rMV1bcisyXS1oW25dW3IrMl0sYz1oW24rMV1bciszXS1oW25dW3IrM10sZVt1XT12Km8rMyooZyphKnMrZCpmKmwpK3AqYztyZXR1cm4gZX06cj9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjO2V8fChlPVtdKSxuKj0zO3ZhciB1PTEtaSxoPWEqYSxmPTEtYSxwPWYqZixkPWYqYSoyLGc9LTMqcCx2PTMqKHAtZCksbT0zKihkLWgpLHk9MypoO2ZvcihsPTA7bDx0Lmxlbmd0aDtsKyspbz1nKihjPXRbbF0pW25dW3JdK3YqY1tuKzFdW3JdK20qY1tuKzJdW3JdK3kqY1tuKzNdW3JdLHM9ZypjW25dW3IrMV0rdipjW24rMV1bcisxXSttKmNbbisyXVtyKzFdK3kqY1tuKzNdW3IrMV0sZVtsXT11Km8raSpzO3JldHVybiBlfTpmdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjO2V8fChlPVtdKTt2YXIgdT0xLWk7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylvPShjPXRbbF0pW24rMV1bcl0tY1tuXVtyXSxzPWNbbisxXVtyKzFdLWNbbl1bcisxXSxlW2xdPXUqbytpKnM7cmV0dXJuIGV9fX0se31dLDg5NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPWUtMixvPXItMjtyZXR1cm4gbiYmaT9mdW5jdGlvbihlLHIsbil7dmFyIGkscyxsLGMsdSxoO2V8fChlPVtdKTt2YXIgZj1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IociksYSkpLHA9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKG4pLG8pKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oMSxyLWYpKSxnPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuLXApKTtmKj0zLHAqPTM7dmFyIHY9ZCpkLG09dipkLHk9MS1kLHg9eSp5LGI9eCp5LF89ZypnLHc9XypnLGs9MS1nLEE9ayprLFQ9QSprO2ZvcihoPTA7aDx0Lmxlbmd0aDtoKyspaT1iKih1PXRbaF0pW3BdW2ZdKzMqKHgqZCp1W3BdW2YrMV0reSp2KnVbcF1bZisyXSkrbSp1W3BdW2YrM10scz1iKnVbcCsxXVtmXSszKih4KmQqdVtwKzFdW2YrMV0reSp2KnVbcCsxXVtmKzJdKSttKnVbcCsxXVtmKzNdLGw9Yip1W3ArMl1bZl0rMyooeCpkKnVbcCsyXVtmKzFdK3kqdip1W3ArMl1bZisyXSkrbSp1W3ArMl1bZiszXSxjPWIqdVtwKzNdW2ZdKzMqKHgqZCp1W3ArM11bZisxXSt5KnYqdVtwKzNdW2YrMl0pK20qdVtwKzNdW2YrM10sZVtoXT1UKmkrMyooQSpnKnMraypfKmwpK3cqYztyZXR1cm4gZX06bj9mdW5jdGlvbihlLHIsbil7ZXx8KGU9W10pO3ZhciBpLHMsbCxjLHUsaCxmPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihyKSxhKSkscD1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IobiksbykpLGQ9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHItZikpLGc9TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4tcCkpO2YqPTM7dmFyIHY9ZCpkLG09dipkLHk9MS1kLHg9eSp5LGI9eCp5LF89MS1nO2Zvcih1PTA7dTx0Lmxlbmd0aDt1KyspaT1fKihoPXRbdV0pW3BdW2ZdK2cqaFtwKzFdW2ZdLHM9XypoW3BdW2YrMV0rZypoW3ArMV1bZisxXSxsPV8qaFtwXVtmKzJdK2cqaFtwKzFdW2YrMV0sYz1fKmhbcF1bZiszXStnKmhbcCsxXVtmKzFdLGVbdV09YippKzMqKHgqZCpzK3kqdipsKSttKmM7cmV0dXJuIGV9Omk/ZnVuY3Rpb24oZSxyLG4pe2V8fChlPVtdKTt2YXIgaSxzLGwsYyx1LGgsZj1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IociksYSkpLHA9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKG4pLG8pKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oMSxyLWYpKSxnPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuLXApKTtwKj0zO3ZhciB2PWcqZyxtPXYqZyx5PTEtZyx4PXkqeSxiPXgqeSxfPTEtZDtmb3IodT0wO3U8dC5sZW5ndGg7dSsrKWk9XyooaD10W3VdKVtwXVtmXStkKmhbcF1bZisxXSxzPV8qaFtwKzFdW2ZdK2QqaFtwKzFdW2YrMV0sbD1fKmhbcCsyXVtmXStkKmhbcCsyXVtmKzFdLGM9XypoW3ArM11bZl0rZCpoW3ArM11bZisxXSxlW3VdPWIqaSszKih4Kmcqcyt5KnYqbCkrbSpjO3JldHVybiBlfTpmdW5jdGlvbihlLHIsbil7ZXx8KGU9W10pO3ZhciBpLHMsbCxjLHU9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKHIpLGEpKSxoPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihuKSxvKSksZj1NYXRoLm1heCgwLE1hdGgubWluKDEsci11KSkscD1NYXRoLm1heCgwLE1hdGgubWluKDEsbi1oKSksZD0xLXAsZz0xLWY7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylpPWcqKGM9dFtsXSlbaF1bdV0rZipjW2hdW3UrMV0scz1nKmNbaCsxXVt1XStmKmNbaCsxXVt1KzFdLGVbbF09ZCppK3AqcztyZXR1cm4gZX19fSx7fV0sODk1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL3h5X2RlZmF1bHRzXCIpLGE9dChcIi4vYWJfZGVmYXVsdHNcIiksbz10KFwiLi9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7ZnVuY3Rpb24gYyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWUuX2NsaXBQYXRoSWQ9XCJjbGlwXCIrZS51aWQrXCJjYXJwZXRcIjt2YXIgdT1jKFwiY29sb3JcIixzLmRlZmF1bHRMaW5lKTsobi5jb2VyY2VGb250KGMsXCJmb250XCIpLGMoXCJjYXJwZXRcIiksYSh0LGUsbCxjLHUpLGUuYSYmZS5iKT8oZS5hLmxlbmd0aDwzJiYoZS5hYXhpcy5zbW9vdGhpbmc9MCksZS5iLmxlbmd0aDwzJiYoZS5iYXhpcy5zbW9vdGhpbmc9MCksaSh0LGUsYyl8fChlLnZpc2libGU9ITEpLGUuX2NoZWF0ZXImJmMoXCJjaGVhdGVyc2xvcGVcIikpOmUudmlzaWJsZT0hMX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiOjU3NyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4vYWJfZGVmYXVsdHNcIjo4NzgsXCIuL2F0dHJpYnV0ZXNcIjo4ODAsXCIuL3h5X2RlZmF1bHRzXCI6OTA0fV0sODk2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLnBsb3Q9dChcIi4vcGxvdFwiKSxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLmFuaW1hdGFibGU9ITAsbi5pc0NvbnRhaW5lcj0hMCxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cImNhcnBldFwiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiKSxuLmNhdGVnb3JpZXM9W1wiY2FydGVzaWFuXCIsXCJzdmdcIixcImNhcnBldFwiLFwiY2FycGV0QXhpc1wiLFwibm90TGVnZW5kSXNvbGF0YWJsZVwiLFwibm9NdWx0aUNhdGVnb3J5XCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi9hdHRyaWJ1dGVzXCI6ODgwLFwiLi9jYWxjXCI6ODg0LFwiLi9kZWZhdWx0c1wiOjg5NSxcIi4vcGxvdFwiOjkwMX1dLDg5NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuPXQuX2Z1bGxEYXRhLmxlbmd0aCxpPTA7aTxuO2krKyl7dmFyIGE9dC5fZnVsbERhdGFbaV07aWYoYS5pbmRleCE9PWUuaW5kZXgmJihcImNhcnBldFwiPT09YS50eXBlJiYocnx8KHI9YSksYS5jYXJwZXQ9PT1lLmNhcnBldCkpKXJldHVybiBhfXJldHVybiByfX0se31dLDg5ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoMD09PXQubGVuZ3RoKXJldHVyblwiXCI7dmFyIG4saT1bXSxhPXI/MzoxO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKz1hKWkucHVzaCh0W25dK1wiLFwiK2Vbbl0pLHImJm48dC5sZW5ndGgtYSYmKGkucHVzaChcIkNcIiksaS5wdXNoKFt0W24rMV0rXCIsXCIrZVtuKzFdLHRbbisyXStcIixcIitlW24rMl0rXCIgXCJdLmpvaW4oXCIgXCIpKSk7cmV0dXJuIGkuam9pbihyP1wiXCI6XCJMXCIpfX0se31dLDg5OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpO2ZvcihuKHQpP3QubGVuZ3RoPmUubGVuZ3RoJiYodD10LnNsaWNlKDAsZS5sZW5ndGgpKTp0PVtdLGk9MDtpPGUubGVuZ3RoO2krKyl0W2ldPXIoZVtpXSk7cmV0dXJuIHR9fSx7XCIuLi8uLi9saWJcIjo3MDF9XSw5MDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPWlbMF0qdC5kcGR4KGUpLHM9aVsxXSp0LmRwZHkociksbD0xLGM9MTtpZihhKXt2YXIgdT1NYXRoLnNxcnQoaVswXSppWzBdK2lbMV0qaVsxXSksaD1NYXRoLnNxcnQoYVswXSphWzBdK2FbMV0qYVsxXSksZj0oaVswXSphWzBdK2lbMV0qYVsxXSkvdS9oO2M9TWF0aC5tYXgoMCxmKX12YXIgcD0xODAqTWF0aC5hdGFuMihzLG8pL01hdGguUEk7cmV0dXJuIHA8LTkwPyhwKz0xODAsbD0tbCk6cD45MCYmKHAtPTE4MCxsPS1sKSx7YW5nbGU6cCxmbGlwOmwscDp0LmMycChuLGUsciksb2Zmc2V0TXVsdHBsaWVyOmN9fX0se31dLDkwMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksYT10KFwiLi9tYXBfMWRfYXJyYXlcIiksbz10KFwiLi9tYWtlcGF0aFwiKSxzPXQoXCIuL29yaWVudF90ZXh0XCIpLGw9dChcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiKSxjPXQoXCIuLi8uLi9saWJcIiksdT10KFwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiKTtmdW5jdGlvbiBoKHQsZSxyLGkscyxsKXt2YXIgYz1cImNvbnN0LVwiK3MrXCItbGluZXNcIix1PXIuc2VsZWN0QWxsKFwiLlwiK2MpLmRhdGEobCk7dS5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChjLCEwKS5zdHlsZShcInZlY3Rvci1lZmZlY3RcIixcIm5vbi1zY2FsaW5nLXN0cm9rZVwiKSx1LmVhY2goZnVuY3Rpb24ocil7dmFyIGk9cixzPWkueCxsPWkueSxjPWEoW10scyx0LmMycCksdT1hKFtdLGwsZS5jMnApLGg9XCJNXCIrbyhjLHUsaS5zbW9vdGhpbmcpO24uc2VsZWN0KHRoaXMpLmF0dHIoXCJkXCIsaCkuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixpLndpZHRoKS5zdHlsZShcInN0cm9rZVwiLGkuY29sb3IpLnN0eWxlKFwiZmlsbFwiLFwibm9uZVwiKX0pLHUuZXhpdCgpLnJlbW92ZSgpfWZ1bmN0aW9uIGYodCxlLHIsYSxvLGMsdSxoKXt2YXIgZj1jLnNlbGVjdEFsbChcInRleHQuXCIraCkuZGF0YSh1KTtmLmVudGVyKCkuYXBwZW5kKFwidGV4dFwiKS5jbGFzc2VkKGgsITApO3ZhciBwPTAsZD17fTtyZXR1cm4gZi5lYWNoKGZ1bmN0aW9uKG8sYyl7dmFyIHU7aWYoXCJhdXRvXCI9PT1vLmF4aXMudGlja2FuZ2xlKXU9cyhhLGUscixvLnh5LG8uZHh5KTtlbHNle3ZhciBoPShvLmF4aXMudGlja2FuZ2xlKzE4MCkqTWF0aC5QSS8xODA7dT1zKGEsZSxyLG8ueHksW01hdGguY29zKGgpLE1hdGguc2luKGgpXSl9Y3x8KGQ9e2FuZ2xlOnUuYW5nbGUsZmxpcDp1LmZsaXB9KTt2YXIgZj0oby5lbmRBbmNob3I/LTE6MSkqdS5mbGlwLGc9bi5zZWxlY3QodGhpcykuYXR0cih7XCJ0ZXh0LWFuY2hvclwiOmY+MD9cInN0YXJ0XCI6XCJlbmRcIixcImRhdGEtbm90ZXhcIjoxfSkuY2FsbChpLmZvbnQsby5mb250KS50ZXh0KG8udGV4dCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyx0KSx2PWkuYkJveCh0aGlzKTtnLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIit1LnBbMF0rXCIsXCIrdS5wWzFdK1wiKSByb3RhdGUoXCIrdS5hbmdsZStcIil0cmFuc2xhdGUoXCIrby5heGlzLmxhYmVscGFkZGluZypmK1wiLFwiKy4zKnYuaGVpZ2h0K1wiKVwiKSxwPU1hdGgubWF4KHAsdi53aWR0aCtvLmF4aXMubGFiZWxwYWRkaW5nKX0pLGYuZXhpdCgpLnJlbW92ZSgpLGQubWF4RXh0ZW50PXAsZH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGw9ZS54YXhpcyx1PWUueWF4aXMscD10Ll9mdWxsTGF5b3V0Ll9jbGlwcztjLm1ha2VUcmFjZUdyb3VwcyhpLHIsXCJ0cmFjZVwiKS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGk9ZVswXSxkPWkudHJhY2Usdj1kLmFheGlzLG09ZC5iYXhpcyx5PWMuZW5zdXJlU2luZ2xlKHIsXCJnXCIsXCJtaW5vcmxheWVyXCIpLHg9Yy5lbnN1cmVTaW5nbGUocixcImdcIixcIm1ham9ybGF5ZXJcIiksYj1jLmVuc3VyZVNpbmdsZShyLFwiZ1wiLFwiYm91bmRhcnlsYXllclwiKSxfPWMuZW5zdXJlU2luZ2xlKHIsXCJnXCIsXCJsYWJlbGxheWVyXCIpO3Iuc3R5bGUoXCJvcGFjaXR5XCIsZC5vcGFjaXR5KSxoKGwsdSx4LHYsXCJhXCIsdi5fZ3JpZGxpbmVzKSxoKGwsdSx4LG0sXCJiXCIsbS5fZ3JpZGxpbmVzKSxoKGwsdSx5LHYsXCJhXCIsdi5fbWlub3JncmlkbGluZXMpLGgobCx1LHksbSxcImJcIixtLl9taW5vcmdyaWRsaW5lcyksaChsLHUsYix2LFwiYS1ib3VuZGFyeVwiLHYuX2JvdW5kYXJ5bGluZXMpLGgobCx1LGIsbSxcImItYm91bmRhcnlcIixtLl9ib3VuZGFyeWxpbmVzKTt2YXIgdz1mKHQsbCx1LGQsaSxfLHYuX2xhYmVscyxcImEtbGFiZWxcIiksaz1mKHQsbCx1LGQsaSxfLG0uX2xhYmVscyxcImItbGFiZWxcIik7IWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8sbCl7dmFyIHUsaCxmLHA7dT0uNSooci5hWzBdK3IuYVtyLmEubGVuZ3RoLTFdKSxoPXIuYlswXSxmPXIuYWIyeHkodSxoLCEwKSxwPXIuZHh5ZGFfcm91Z2godSxoKSx2b2lkIDA9PT1vLmFuZ2xlJiZjLmV4dGVuZEZsYXQobyxzKHIsaSxhLGYsci5keHlkYl9yb3VnaCh1LGgpKSk7Zyh0LGUscixuLGYscCxyLmFheGlzLGksYSxvLFwiYS10aXRsZVwiKSx1PXIuYVswXSxoPS41KihyLmJbMF0rci5iW3IuYi5sZW5ndGgtMV0pLGY9ci5hYjJ4eSh1LGgsITApLHA9ci5keHlkYl9yb3VnaCh1LGgpLHZvaWQgMD09PWwuYW5nbGUmJmMuZXh0ZW5kRmxhdChsLHMocixpLGEsZixyLmR4eWRhX3JvdWdoKHUsaCkpKTtnKHQsZSxyLG4sZixwLHIuYmF4aXMsaSxhLGwsXCJiLXRpdGxlXCIpfSh0LF8sZCxpLGwsdSx3LGspLGZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIHMsbCx1LGgsZj1yLnNlbGVjdChcIiNcIit0Ll9jbGlwUGF0aElkKTtmLnNpemUoKXx8KGY9ci5hcHBlbmQoXCJjbGlwUGF0aFwiKS5jbGFzc2VkKFwiY2FycGV0Y2xpcFwiLCEwKSk7dmFyIHA9Yy5lbnN1cmVTaW5nbGUoZixcInBhdGhcIixcImNhcnBldGJvdW5kYXJ5XCIpLGQ9ZS5jbGlwc2VnbWVudHMsZz1bXTtmb3IoaD0wO2g8ZC5sZW5ndGg7aCsrKXM9ZFtoXSxsPWEoW10scy54LG4uYzJwKSx1PWEoW10scy55LGkuYzJwKSxnLnB1c2gobyhsLHUscy5iaWN1YmljKSk7dmFyIHY9XCJNXCIrZy5qb2luKFwiTFwiKStcIlpcIjtmLmF0dHIoXCJpZFwiLHQuX2NsaXBQYXRoSWQpLHAuYXR0cihcImRcIix2KX0oZCxpLHAsbCx1KX0pfTt2YXIgcD11LkxJTkVfU1BBQ0lORyxkPSgxLXUuTUlEX1NISUZUKS9wKzE7ZnVuY3Rpb24gZyh0LGUscixhLG8sYyx1LGgsZixnLHYpe3ZhciBtPVtdO3UudGl0bGUudGV4dCYmbS5wdXNoKHUudGl0bGUudGV4dCk7dmFyIHk9ZS5zZWxlY3RBbGwoXCJ0ZXh0LlwiK3YpLmRhdGEobSkseD1nLm1heEV4dGVudDt5LmVudGVyKCkuYXBwZW5kKFwidGV4dFwiKS5jbGFzc2VkKHYsITApLHkuZWFjaChmdW5jdGlvbigpe3ZhciBlPXMocixoLGYsbyxjKTstMT09PVtcInN0YXJ0XCIsXCJib3RoXCJdLmluZGV4T2YodS5zaG93dGlja2xhYmVscykmJih4PTApO3ZhciBhPXUudGl0bGUuZm9udC5zaXplO3grPWErdS50aXRsZS5vZmZzZXQ7dmFyIHY9KGcuYW5nbGUrKGcuZmxpcDwwPzE4MDowKS1lLmFuZ2xlKzQ1MCklMzYwLG09dj45MCYmdjwyNzAseT1uLnNlbGVjdCh0aGlzKTt5LnRleHQodS50aXRsZS50ZXh0KS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHQpLG0mJih4PSgtbC5saW5lQ291bnQoeSkrZCkqcCphLXgpLHkuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK2UucFswXStcIixcIitlLnBbMV0rXCIpIHJvdGF0ZShcIitlLmFuZ2xlK1wiKSB0cmFuc2xhdGUoMCxcIit4K1wiKVwiKS5jbGFzc2VkKFwidXNlci1zZWxlY3Qtbm9uZVwiLCEwKS5hdHRyKFwidGV4dC1hbmNob3JcIixcIm1pZGRsZVwiKS5jYWxsKGkuZm9udCx1LnRpdGxlLmZvbnQpfSkseS5leGl0KCkucmVtb3ZlKCl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCI6NjczLFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCI6NzI1LFwiLi9tYWtlcGF0aFwiOjg5OCxcIi4vbWFwXzFkX2FycmF5XCI6ODk5LFwiLi9vcmllbnRfdGV4dFwiOjkwMCxkMzoxNTV9XSw5MDI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9jb25zdGFudHNcIiksaT10KFwiLi4vLi4vbGliL3NlYXJjaFwiKS5maW5kQmluLGE9dChcIi4vY29tcHV0ZV9jb250cm9sX3BvaW50c1wiKSxvPXQoXCIuL2NyZWF0ZV9zcGxpbmVfZXZhbHVhdG9yXCIpLHM9dChcIi4vY3JlYXRlX2lfZGVyaXZhdGl2ZV9ldmFsdWF0b3JcIiksbD10KFwiLi9jcmVhdGVfal9kZXJpdmF0aXZlX2V2YWx1YXRvclwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fYSxyPXQuX2IsYz1lLmxlbmd0aCx1PXIubGVuZ3RoLGg9dC5hYXhpcyxmPXQuYmF4aXMscD1lWzBdLGQ9ZVtjLTFdLGc9clswXSx2PXJbdS0xXSxtPWVbZS5sZW5ndGgtMV0tZVswXSx5PXJbci5sZW5ndGgtMV0tclswXSx4PW0qbi5SRUxBVElWRV9DVUxMX1RPTEVSQU5DRSxiPXkqbi5SRUxBVElWRV9DVUxMX1RPTEVSQU5DRTtwLT14LGQrPXgsZy09Yix2Kz1iLHQuaXNWaXNpYmxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+cCYmdDxkJiZlPmcmJmU8dn0sdC5pc09jY2x1ZGVkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8cHx8dD5kfHxlPGd8fGU+dn0sdC5zZXRTY2FsZT1mdW5jdGlvbigpe3ZhciBlPXQuX3gscj10Ll95LG49YSh0Ll94Y3RybCx0Ll95Y3RybCxlLHIsaC5zbW9vdGhpbmcsZi5zbW9vdGhpbmcpO3QuX3hjdHJsPW5bMF0sdC5feWN0cmw9blsxXSx0LmV2YWx4eT1vKFt0Ll94Y3RybCx0Ll95Y3RybF0sYyx1LGguc21vb3RoaW5nLGYuc21vb3RoaW5nKSx0LmR4eWRpPXMoW3QuX3hjdHJsLHQuX3ljdHJsXSxoLnNtb290aGluZyxmLnNtb290aGluZyksdC5keHlkaj1sKFt0Ll94Y3RybCx0Ll95Y3RybF0saC5zbW9vdGhpbmcsZi5zbW9vdGhpbmcpfSx0LmkyYT1mdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1heCgwLE1hdGguZmxvb3IodFswXSksYy0yKSxuPXRbMF0tcjtyZXR1cm4oMS1uKSplW3JdK24qZVtyKzFdfSx0LmoyYj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGguZmxvb3IodFsxXSksYy0yKSxuPXRbMV0tZTtyZXR1cm4oMS1uKSpyW2VdK24qcltlKzFdfSx0LmlqMmFiPWZ1bmN0aW9uKGUpe3JldHVyblt0LmkyYShlWzBdKSx0LmoyYihlWzFdKV19LHQuYTJpPWZ1bmN0aW9uKHQpe3ZhciByPU1hdGgubWF4KDAsTWF0aC5taW4oaSh0LGUpLGMtMikpLG49ZVtyXSxhPWVbcisxXTtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbihjLTEscisodC1uKS8oYS1uKSkpfSx0LmIyaj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKGkodCxyKSx1LTIpKSxuPXJbZV0sYT1yW2UrMV07cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odS0xLGUrKHQtbikvKGEtbikpKX0sdC5hYjJpaj1mdW5jdGlvbihlKXtyZXR1cm5bdC5hMmkoZVswXSksdC5iMmooZVsxXSldfSx0LmkyYz1mdW5jdGlvbihlLHIpe3JldHVybiB0LmV2YWx4eShbXSxlLHIpfSx0LmFiMnh5PWZ1bmN0aW9uKG4saSxhKXtpZighYSYmKG48ZVswXXx8bj5lW2MtMV18aTxyWzBdfHxpPnJbdS0xXSkpcmV0dXJuWyExLCExXTt2YXIgbz10LmEyaShuKSxzPXQuYjJqKGkpLGw9dC5ldmFseHkoW10sbyxzKTtpZihhKXt2YXIgaCxmLHAsZCxnPTAsdj0wLG09W107bjxlWzBdPyhoPTAsZj0wLGc9KG4tZVswXSkvKGVbMV0tZVswXSkpOm4+ZVtjLTFdPyhoPWMtMixmPTEsZz0obi1lW2MtMV0pLyhlW2MtMV0tZVtjLTJdKSk6Zj1vLShoPU1hdGgubWF4KDAsTWF0aC5taW4oYy0yLE1hdGguZmxvb3IobykpKSksaTxyWzBdPyhwPTAsZD0wLHY9KGktclswXSkvKHJbMV0tclswXSkpOmk+clt1LTFdPyhwPXUtMixkPTEsdj0oaS1yW3UtMV0pLyhyW3UtMV0tclt1LTJdKSk6ZD1zLShwPU1hdGgubWF4KDAsTWF0aC5taW4odS0yLE1hdGguZmxvb3IocykpKSksZyYmKHQuZHh5ZGkobSxoLHAsZixkKSxsWzBdKz1tWzBdKmcsbFsxXSs9bVsxXSpnKSx2JiYodC5keHlkaihtLGgscCxmLGQpLGxbMF0rPW1bMF0qdixsWzFdKz1tWzFdKnYpfXJldHVybiBsfSx0LmMycD1mdW5jdGlvbih0LGUscil7cmV0dXJuW2UuYzJwKHRbMF0pLHIuYzJwKHRbMV0pXX0sdC5wMng9ZnVuY3Rpb24odCxlLHIpe3JldHVybltlLnAyYyh0WzBdKSxyLnAyYyh0WzFdKV19LHQuZGFkaT1mdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1heCgwLE1hdGgubWluKGUubGVuZ3RoLTIsdCkpO3JldHVybiBlW3IrMV0tZVtyXX0sdC5kYmRqPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5taW4oci5sZW5ndGgtMix0KSk7cmV0dXJuIHJbZSsxXS1yW2VdfSx0LmR4eWRhPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXQuZHh5ZGkobnVsbCxlLHIsbixpKSxvPXQuZGFkaShlLG4pO3JldHVyblthWzBdL28sYVsxXS9vXX0sdC5keHlkYj1mdW5jdGlvbihlLHIsbixpKXt2YXIgYT10LmR4eWRqKG51bGwsZSxyLG4saSksbz10LmRiZGoocixpKTtyZXR1cm5bYVswXS9vLGFbMV0vb119LHQuZHh5ZGFfcm91Z2g9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPW0qKG58fC4xKSxhPXQuYWIyeHkoZStpLHIsITApLG89dC5hYjJ4eShlLWksciwhMCk7cmV0dXJuWy41KihhWzBdLW9bMF0pL2ksLjUqKGFbMV0tb1sxXSkvaV19LHQuZHh5ZGJfcm91Z2g9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXkqKG58fC4xKSxhPXQuYWIyeHkoZSxyK2ksITApLG89dC5hYjJ4eShlLHItaSwhMCk7cmV0dXJuWy41KihhWzBdLW9bMF0pL2ksLjUqKGFbMV0tb1sxXSkvaV19LHQuZHBkeD1mdW5jdGlvbih0KXtyZXR1cm4gdC5fbX0sdC5kcGR5PWZ1bmN0aW9uKHQpe3JldHVybiB0Ll9tfX19LHtcIi4uLy4uL2xpYi9zZWFyY2hcIjo3MjAsXCIuL2NvbXB1dGVfY29udHJvbF9wb2ludHNcIjo4OTAsXCIuL2NvbnN0YW50c1wiOjg5MSxcIi4vY3JlYXRlX2lfZGVyaXZhdGl2ZV9ldmFsdWF0b3JcIjo4OTIsXCIuL2NyZWF0ZV9qX2Rlcml2YXRpdmVfZXZhbHVhdG9yXCI6ODkzLFwiLi9jcmVhdGVfc3BsaW5lX2V2YWx1YXRvclwiOjg5NH1dLDkwMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLG8scz1bXSxsPVtdLGM9dFswXS5sZW5ndGgsdT10Lmxlbmd0aDtmdW5jdGlvbiBoKGUscil7dmFyIG4saT0wLGE9MDtyZXR1cm4gZT4wJiZ2b2lkIDAhPT0obj10W3JdW2UtMV0pJiYoYSsrLGkrPW4pLGU8Yy0xJiZ2b2lkIDAhPT0obj10W3JdW2UrMV0pJiYoYSsrLGkrPW4pLHI+MCYmdm9pZCAwIT09KG49dFtyLTFdW2VdKSYmKGErKyxpKz1uKSxyPHUtMSYmdm9pZCAwIT09KG49dFtyKzFdW2VdKSYmKGErKyxpKz1uKSxpL01hdGgubWF4KDEsYSl9dmFyIGYscCxkLGcsdixtLHkseCxiLF8sdyxrPTA7Zm9yKGk9MDtpPGM7aSsrKWZvcihhPTA7YTx1O2ErKyl2b2lkIDA9PT10W2FdW2ldJiYocy5wdXNoKGkpLGwucHVzaChhKSx0W2FdW2ldPWgoaSxhKSksaz1NYXRoLm1heChrLE1hdGguYWJzKHRbYV1baV0pKTtpZighcy5sZW5ndGgpcmV0dXJuIHQ7dmFyIEE9MCxUPTAsTT1zLmxlbmd0aDtkb3tmb3IoQT0wLG89MDtvPE07bysrKXtpPXNbb10sYT1sW29dO3ZhciBTLEUsQyxMLHosTyxJPTAsRD0wOzA9PT1pPyhDPWVbej1NYXRoLm1pbihjLTEsMildLEw9ZVsxXSxTPXRbYV1bel0sRCs9KEU9dFthXVsxXSkrKEUtUykqKGVbMF0tTCkvKEwtQyksSSsrKTppPT09Yy0xJiYoQz1lW3o9TWF0aC5tYXgoMCxjLTMpXSxMPWVbYy0yXSxTPXRbYV1bel0sRCs9KEU9dFthXVtjLTJdKSsoRS1TKSooZVtjLTFdLUwpLyhMLUMpLEkrKyksKDA9PT1pfHxpPT09Yy0xKSYmYT4wJiZhPHUtMSYmKGY9clthKzFdLXJbYV0sRCs9KChwPXJbYV0tclthLTFdKSp0W2ErMV1baV0rZip0W2EtMV1baV0pLyhwK2YpLEkrKyksMD09PWE/KEM9cltPPU1hdGgubWluKHUtMSwyKV0sTD1yWzFdLFM9dFtPXVtpXSxEKz0oRT10WzFdW2ldKSsoRS1TKSooclswXS1MKS8oTC1DKSxJKyspOmE9PT11LTEmJihDPXJbTz1NYXRoLm1heCgwLHUtMyldLEw9clt1LTJdLFM9dFtPXVtpXSxEKz0oRT10W3UtMl1baV0pKyhFLVMpKihyW3UtMV0tTCkvKEwtQyksSSsrKSwoMD09PWF8fGE9PT11LTEpJiZpPjAmJmk8Yy0xJiYoZj1lW2krMV0tZVtpXSxEKz0oKHA9ZVtpXS1lW2ktMV0pKnRbYV1baSsxXStmKnRbYV1baS0xXSkvKHArZiksSSsrKSxJP0QvPUk6KGQ9ZVtpKzFdLWVbaV0sZz1lW2ldLWVbaS0xXSx4PSh2PXJbYSsxXS1yW2FdKSoobT1yW2FdLXJbYS0xXSkqKHYrbSksRD0oKHk9ZCpnKihkK2cpKSoobSp0W2ErMV1baV0rdip0W2EtMV1baV0pK3gqKGcqdFthXVtpKzFdK2QqdFthXVtpLTFdKSkvKHgqKGcrZCkreSoobSt2KSkpLEErPShfPShiPUQtdFthXVtpXSkvaykqXyx3PUk/MDouODUsdFthXVtpXSs9YiooMSt3KX1BPU1hdGguc3FydChBKX13aGlsZShUKys8MTAwJiZBPjFlLTUpO3JldHVybiBuLmxvZyhcIlNtb290aGVyIGNvbnZlcmdlZCB0b1wiLEEsXCJhZnRlclwiLFQsXCJpdGVyYXRpb25zXCIpLHR9fSx7XCIuLi8uLi9saWJcIjo3MDF9XSw5MDQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLmlzQXJyYXkxRDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXIoXCJ4XCIpLGE9aSYmaS5sZW5ndGgsbz1yKFwieVwiKSxzPW8mJm8ubGVuZ3RoO2lmKCFhJiYhcylyZXR1cm4hMTtpZihlLl9jaGVhdGVyPSFpLGEmJiFuKGkpfHxzJiYhbihvKSllLl9sZW5ndGg9bnVsbDtlbHNle3ZhciBsPWE/aS5sZW5ndGg6MS8wO3MmJihsPU1hdGgubWluKGwsby5sZW5ndGgpKSxlLmEmJmUuYS5sZW5ndGgmJihsPU1hdGgubWluKGwsZS5hLmxlbmd0aCkpLGUuYiYmZS5iLmxlbmd0aCYmKGw9TWF0aC5taW4obCxlLmIubGVuZ3RoKSksZS5fbGVuZ3RoPWx9cmV0dXJuITB9fSx7XCIuLi8uLi9saWJcIjo3MDF9XSw5MDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vc2NhdHRlcmdlby9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCIpLGw9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxjPWkubWFya2VyLmxpbmU7ZS5leHBvcnRzPWwoe2xvY2F0aW9uczp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sbG9jYXRpb25tb2RlOmkubG9jYXRpb25tb2RlLHo6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHRleHQ6bCh7fSxpLnRleHQse30pLGhvdmVydGV4dDpsKHt9LGkuaG92ZXJ0ZXh0LHt9KSxtYXJrZXI6e2xpbmU6e2NvbG9yOmMuY29sb3Isd2lkdGg6bCh7fSxjLndpZHRoLHtkZmx0OjF9KSxlZGl0VHlwZTpcImNhbGNcIn0sb3BhY2l0eTp7dmFsVHlwZTpcIm51bWJlclwiLGFycmF5T2s6ITAsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOlwic3R5bGVcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LHNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6aS5zZWxlY3RlZC5tYXJrZXIub3BhY2l0eSxlZGl0VHlwZTpcInBsb3RcIn0sZWRpdFR5cGU6XCJwbG90XCJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTppLnVuc2VsZWN0ZWQubWFya2VyLm9wYWNpdHksZWRpdFR5cGU6XCJwbG90XCJ9LGVkaXRUeXBlOlwicGxvdFwifSxob3ZlcmluZm86bCh7fSxzLmhvdmVyaW5mbyx7ZWRpdFR5cGU6XCJjYWxjXCIsZmxhZ3M6W1wibG9jYXRpb25cIixcInpcIixcInRleHRcIixcIm5hbWVcIl19KSxob3ZlcnRlbXBsYXRlOm4oKX0sYShcIlwiLHtjTGV0dGVyOlwielwiLGVkaXRUeXBlT3ZlcnJpZGU6XCJjYWxjXCJ9KSx7Y29sb3JiYXI6b30pfSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIjo1NzksXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDYsXCIuLi9zY2F0dGVyZ2VvL2F0dHJpYnV0ZXNcIjoxMDkyfV0sOTA2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCIpLG89dChcIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhXCIpLHM9dChcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUuX2xlbmd0aCxsPW5ldyBBcnJheShyKSxjPTA7YzxyO2MrKyl7dmFyIHU9bFtjXT17fSxoPWUubG9jYXRpb25zW2NdLGY9ZS56W2NdO3UubG9jPVwic3RyaW5nXCI9PXR5cGVvZiBoP2g6bnVsbCx1Lno9bihmKT9mOml9cmV0dXJuIG8obCxlKSxhKHQsZSx7dmFsczplLnosY29udGFpbmVyU3RyOlwiXCIsY0xldHRlcjpcInpcIn0pLHMobCxlKSxsfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIjo1ODYsXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGFcIjoxMDUxLFwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvblwiOjEwNTQsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDkwNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCIpLGE9dChcIi4vYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7ZnVuY3Rpb24gcyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfXZhciBsPXMoXCJsb2NhdGlvbnNcIiksYz1zKFwielwiKTtsJiZsLmxlbmd0aCYmbi5pc0FycmF5T3JUeXBlZEFycmF5KGMpJiZjLmxlbmd0aD8oZS5fbGVuZ3RoPU1hdGgubWluKGwubGVuZ3RoLGMubGVuZ3RoKSxzKFwibG9jYXRpb25tb2RlXCIpLHMoXCJ0ZXh0XCIpLHMoXCJob3ZlcnRleHRcIikscyhcImhvdmVydGVtcGxhdGVcIikscyhcIm1hcmtlci5saW5lLmNvbG9yXCIpLHMoXCJtYXJrZXIubGluZS53aWR0aFwiKSxzKFwibWFya2VyLm9wYWNpdHlcIiksaSh0LGUsbyxzLHtwcmVmaXg6XCJcIixjTGV0dGVyOlwielwifSksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUscykpOmUudmlzaWJsZT0hMX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiOjU4OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4vYXR0cmlidXRlc1wiOjkwNX1dLDkwODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0LmxvY2F0aW9uPWUubG9jYXRpb24sdC56PWUueix0fX0se31dLDkwOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxpPXQoXCIuL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHRcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbyxzLGwsYyx1PXQuY2QsaD11WzBdLnRyYWNlLGY9dC5zdWJwbG90O2ZvcihzPTA7czx1Lmxlbmd0aDtzKyspaWYoYz0hMSwobz11W3NdKS5fcG9seWdvbnMpe2ZvcihsPTA7bDxvLl9wb2x5Z29ucy5sZW5ndGg7bCsrKW8uX3BvbHlnb25zW2xdLmNvbnRhaW5zKFtlLHJdKSYmKGM9IWMpLG8uX3BvbHlnb25zW2xdLmNvbnRhaW5zKFtlKzM2MCxyXSkmJihjPSFjKTtpZihjKWJyZWFrfWlmKGMmJm8pcmV0dXJuIHQueDA9dC54MT10LnhhLmMycChvLmN0KSx0LnkwPXQueTE9dC55YS5jMnAoby5jdCksdC5pbmRleD1vLmluZGV4LHQubG9jYXRpb249by5sb2MsdC56PW8ueix0LmhvdmVydGVtcGxhdGU9by5ob3ZlcnRlbXBsYXRlLGZ1bmN0aW9uKHQsZSxyLG8pe2lmKGUuaG92ZXJ0ZW1wbGF0ZSlyZXR1cm47dmFyIHM9ci5oaXx8ZS5ob3ZlcmluZm8sbD1cImFsbFwiPT09cz9pLmhvdmVyaW5mby5mbGFnczpzLnNwbGl0KFwiK1wiKSxjPS0xIT09bC5pbmRleE9mKFwibmFtZVwiKSx1PS0xIT09bC5pbmRleE9mKFwibG9jYXRpb25cIiksaD0tMSE9PWwuaW5kZXhPZihcInpcIiksZj0tMSE9PWwuaW5kZXhPZihcInRleHRcIikscD1bXTshYyYmdT90Lm5hbWVPdmVycmlkZT1yLmxvYzooYyYmKHQubmFtZU92ZXJyaWRlPWUubmFtZSksdSYmcC5wdXNoKHIubG9jKSk7aCYmcC5wdXNoKChkPXIueixuLnRpY2tUZXh0KG8sby5jMmwoZCksXCJob3ZlclwiKS50ZXh0KSk7dmFyIGQ7ZiYmYShyLGUscCk7dC5leHRyYVRleHQ9cC5qb2luKFwiPGJyPlwiKX0odCxoLG8sZi5tb2NrQXhpcyksW3RdfX0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dFwiOjEwNjAsXCIuL2F0dHJpYnV0ZXNcIjo5MDV9XSw5MTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLG4uY29sb3JiYXI9dChcIi4uL2hlYXRtYXAvY29sb3JiYXJcIiksbi5jYWxjPXQoXCIuL2NhbGNcIiksbi5wbG90PXQoXCIuL3Bsb3RcIiksbi5zdHlsZT10KFwiLi9zdHlsZVwiKS5zdHlsZSxuLnN0eWxlT25TZWxlY3Q9dChcIi4vc3R5bGVcIikuc3R5bGVPblNlbGVjdCxuLmhvdmVyUG9pbnRzPXQoXCIuL2hvdmVyXCIpLG4uZXZlbnREYXRhPXQoXCIuL2V2ZW50X2RhdGFcIiksbi5zZWxlY3RQb2ludHM9dChcIi4vc2VsZWN0XCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwiY2hvcm9wbGV0aFwiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4uLy4uL3Bsb3RzL2dlb1wiKSxuLmNhdGVnb3JpZXM9W1wiZ2VvXCIsXCJub09wYWNpdHlcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9nZW9cIjo3NzksXCIuLi9oZWF0bWFwL2NvbG9yYmFyXCI6OTUxLFwiLi9hdHRyaWJ1dGVzXCI6OTA1LFwiLi9jYWxjXCI6OTA2LFwiLi9kZWZhdWx0c1wiOjkwNyxcIi4vZXZlbnRfZGF0YVwiOjkwOCxcIi4vaG92ZXJcIjo5MDksXCIuL3Bsb3RcIjo5MTEsXCIuL3NlbGVjdFwiOjkxMixcIi4vc3R5bGVcIjo5MTN9XSw5MTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL2xpYi9wb2x5Z29uXCIpLG89dChcIi4uLy4uL2xpYi90b3BvanNvbl91dGlsc1wiKS5nZXRUb3BvanNvbkZlYXR1cmVzLHM9dChcIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHNcIikubG9jYXRpb25Ub0ZlYXR1cmUsbD10KFwiLi9zdHlsZVwiKS5zdHlsZTtmdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciByPXRbMF0udHJhY2Usbj10Lmxlbmd0aCxpPW8ocixlKSxhPTA7YTxuO2ErKyl7dmFyIGw9dFthXSxjPXMoci5sb2NhdGlvbm1vZGUsbC5sb2MsaSk7Yz8obC5nZW9qc29uPWMsbC5jdD1jLnByb3BlcnRpZXMuY3QsbC5pbmRleD1hLGwuX3BvbHlnb25zPXUoYykpOmwuZ2VvanNvbj1udWxsfX1mdW5jdGlvbiB1KHQpe3ZhciBlLHIsbixpLG89dC5nZW9tZXRyeSxzPW8uY29vcmRpbmF0ZXMsbD10LmlkLGM9W107ZnVuY3Rpb24gdSh0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoLTE7ZSsrKWlmKHRbZV1bMF0+MCYmdFtlKzFdWzBdPDApcmV0dXJuIGU7cmV0dXJuIG51bGx9c3dpdGNoKGU9XCJSVVNcIj09PWx8fFwiRkpJXCI9PT1sP2Z1bmN0aW9uKHQpe3ZhciBlO2lmKG51bGw9PT11KHQpKWU9dDtlbHNlIGZvcihlPW5ldyBBcnJheSh0Lmxlbmd0aCksaT0wO2k8dC5sZW5ndGg7aSsrKWVbaV09W3RbaV1bMF08MD90W2ldWzBdKzM2MDp0W2ldWzBdLHRbaV1bMV1dO2MucHVzaChhLnRlc3RlcihlKSl9OlwiQVRBXCI9PT1sP2Z1bmN0aW9uKHQpe3ZhciBlPXUodCk7aWYobnVsbD09PWUpcmV0dXJuIGMucHVzaChhLnRlc3Rlcih0KSk7dmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoKzEpLG49MDtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKWk+ZT9yW24rK109W3RbaV1bMF0rMzYwLHRbaV1bMV1dOmk9PT1lPyhyW24rK109dFtpXSxyW24rK109W3RbaV1bMF0sLTkwXSk6cltuKytdPXRbaV07dmFyIG89YS50ZXN0ZXIocik7by5wdHMucG9wKCksYy5wdXNoKG8pfTpmdW5jdGlvbih0KXtjLnB1c2goYS50ZXN0ZXIodCkpfSxvLnR5cGUpe2Nhc2VcIk11bHRpUG9seWdvblwiOmZvcihyPTA7cjxzLmxlbmd0aDtyKyspZm9yKG49MDtuPHNbcl0ubGVuZ3RoO24rKyllKHNbcl1bbl0pO2JyZWFrO2Nhc2VcIlBvbHlnb25cIjpmb3Iocj0wO3I8cy5sZW5ndGg7cisrKWUoc1tyXSl9cmV0dXJuIGN9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGE9MDthPHIubGVuZ3RoO2ErKyljKHJbYV0sZS50b3BvanNvbik7dmFyIG89ZS5sYXllcnMuYmFja3Bsb3Quc2VsZWN0KFwiLmNob3JvcGxldGhsYXllclwiKTtpLm1ha2VUcmFjZUdyb3VwcyhvLHIsXCJ0cmFjZSBjaG9yb3BsZXRoXCIpLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9KGVbMF0ubm9kZTM9bi5zZWxlY3QodGhpcykpLnNlbGVjdEFsbChcInBhdGguY2hvcm9wbGV0aGxvY2F0aW9uXCIpLmRhdGEoaS5pZGVudGl0eSk7ci5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChcImNob3JvcGxldGhsb2NhdGlvblwiLCEwKSxyLmV4aXQoKS5yZW1vdmUoKSxsKHQsZSl9KX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHNcIjo2OTQsXCIuLi8uLi9saWIvcG9seWdvblwiOjcxMyxcIi4uLy4uL2xpYi90b3BvanNvbl91dGlsc1wiOjcyOCxcIi4vc3R5bGVcIjo5MTMsZDM6MTU1fV0sOTEyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxzPXQuY2QsbD10LnhheGlzLGM9dC55YXhpcyx1PVtdO2lmKCExPT09ZSlmb3Iocj0wO3I8cy5sZW5ndGg7cisrKXNbcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxzLmxlbmd0aDtyKyspKGk9KG49c1tyXSkuY3QpJiYoYT1sLmMycChpKSxvPWMuYzJwKGkpLGUuY29udGFpbnMoW2Esb10sbnVsbCxyLHQpPyh1LnB1c2goe3BvaW50TnVtYmVyOnIsbG9uOmlbMF0sbGF0OmlbMV19KSxuLnNlbGVjdGVkPTEpOm4uc2VsZWN0ZWQ9MCk7cmV0dXJuIHV9fSx7fV0sOTEzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZVwiKTtmdW5jdGlvbiBzKHQsZSl7dmFyIHI9ZVswXS50cmFjZSxzPWVbMF0ubm9kZTMuc2VsZWN0QWxsKFwiLmNob3JvcGxldGhsb2NhdGlvblwiKSxsPXIubWFya2VyfHx7fSxjPWwubGluZXx8e30sdT1vLm1ha2VDb2xvclNjYWxlRnVuYyhvLmV4dHJhY3RTY2FsZShyLHtjTGV0dGVyOlwielwifSkpO3MuZWFjaChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5hdHRyKFwiZmlsbFwiLHUodC56KSkuY2FsbChpLnN0cm9rZSx0Lm1sY3x8Yy5jb2xvcikuY2FsbChhLmRhc2hMaW5lLFwiXCIsdC5tbHd8fGMud2lkdGh8fDApLnN0eWxlKFwib3BhY2l0eVwiLGwub3BhY2l0eSl9KSxhLnNlbGVjdGVkUG9pbnRTdHlsZShzLHIsdCl9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUpe2UmJnModCxlKX0sc3R5bGVPblNlbGVjdDpmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0ubm9kZTMsbj1lWzBdLnRyYWNlO24uc2VsZWN0ZWRwb2ludHM/YS5zZWxlY3RlZFBvaW50U3R5bGUoci5zZWxlY3RBbGwoXCIuY2hvcm9wbGV0aGxvY2F0aW9uXCIpLG4sdCk6cyh0LGUpfX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGVcIjo1OTAsXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksZDM6MTU1fV0sOTE0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxvPXQoXCIuLi9tZXNoM2QvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCIpLGw9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxjPXt4Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx5Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx6Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx1Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx2Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx3Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxzaXplbW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wic2NhbGVkXCIsXCJhYnNvbHV0ZVwiXSxlZGl0VHlwZTpcImNhbGNcIixkZmx0Olwic2NhbGVkXCJ9LHNpemVyZWY6e3ZhbFR5cGU6XCJudW1iZXJcIixlZGl0VHlwZTpcImNhbGNcIixtaW46MH0sYW5jaG9yOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLGVkaXRUeXBlOlwiY2FsY1wiLHZhbHVlczpbXCJ0aXBcIixcInRhaWxcIixcImNtXCIsXCJjZW50ZXJcIl0sZGZsdDpcImNtXCJ9LHRleHQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsYXJyYXlPazohMCxlZGl0VHlwZTpcImNhbGNcIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LGhvdmVydGVtcGxhdGU6YSh7ZWRpdFR5cGU6XCJjYWxjXCJ9LHtrZXlzOltcIm5vcm1cIl19KX07bChjLG4oXCJcIix7Y29sb3JBdHRyOlwidS92L3cgbm9ybVwiLHNob3dTY2FsZURmbHQ6ITAsZWRpdFR5cGVPdmVycmlkZTpcImNhbGNcIn0pLHtjb2xvcmJhcjppfSk7W1wib3BhY2l0eVwiLFwibGlnaHRwb3NpdGlvblwiLFwibGlnaHRpbmdcIl0uZm9yRWFjaChmdW5jdGlvbih0KXtjW3RdPW9bdF19KSxjLmhvdmVyaW5mbz1sKHt9LHMuaG92ZXJpbmZvLHtlZGl0VHlwZTpcImNhbGNcIixmbGFnczpbXCJ4XCIsXCJ5XCIsXCJ6XCIsXCJ1XCIsXCJ2XCIsXCJ3XCIsXCJub3JtXCIsXCJ0ZXh0XCIsXCJuYW1lXCJdLGRmbHQ6XCJ4K3kreitub3JtK3RleHQrbmFtZVwifSksYy50cmFuc2Zvcm1zPXZvaWQgMCxlLmV4cG9ydHM9Y30se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCI6NTc5LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIjo1ODUsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi4vbWVzaDNkL2F0dHJpYnV0ZXNcIjo5OTR9XSw5MTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUudSxpPWUudixhPWUudyxvPU1hdGgubWluKGUueC5sZW5ndGgsZS55Lmxlbmd0aCxlLnoubGVuZ3RoLHIubGVuZ3RoLGkubGVuZ3RoLGEubGVuZ3RoKSxzPS0xLzAsbD0xLzAsYz0wO2M8bztjKyspe3ZhciB1PXJbY10saD1pW2NdLGY9YVtjXSxwPU1hdGguc3FydCh1KnUraCpoK2YqZik7cz1NYXRoLm1heChzLHApLGw9TWF0aC5taW4obCxwKX1lLl9sZW49byxlLl9ub3JtTWF4PXMsbih0LGUse3ZhbHM6W2wsc10sY29udGFpbmVyU3RyOlwiXCIsY0xldHRlcjpcImNcIn0pfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIjo1ODZ9XSw5MTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2wtY29uZTNkXCIpLGk9dChcImdsLWNvbmUzZFwiKS5jcmVhdGVDb25lTWVzaCxhPXQoXCIuLi8uLi9saWJcIikuc2ltcGxlTWFwLG89dChcIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3JcIikucGFyc2VDb2xvclNjYWxlLHM9dChcIi4uLy4uL3Bsb3RzL2dsM2QvemlwM1wiKTtmdW5jdGlvbiBsKHQsZSl7dGhpcy5zY2VuZT10LHRoaXMudWlkPWUsdGhpcy5tZXNoPW51bGwsdGhpcy5kYXRhPW51bGx9dmFyIGM9bC5wcm90b3R5cGU7Yy5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0PT09dGhpcy5tZXNoKXt2YXIgZT10LmluZGV4PXQuZGF0YS5pbmRleCxyPXRoaXMuZGF0YS54W2VdLG49dGhpcy5kYXRhLnlbZV0saT10aGlzLmRhdGEueltlXSxhPXRoaXMuZGF0YS51W2VdLG89dGhpcy5kYXRhLnZbZV0scz10aGlzLmRhdGEud1tlXTt0LnRyYWNlQ29vcmRpbmF0ZT1bcixuLGksYSxvLHMsTWF0aC5zcXJ0KGEqYStvKm8rcypzKV07dmFyIGw9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQ7cmV0dXJuIEFycmF5LmlzQXJyYXkobCkmJnZvaWQgMCE9PWxbZV0/dC50ZXh0TGFiZWw9bFtlXTpsJiYodC50ZXh0TGFiZWw9bCksITB9fTt2YXIgdT17eGF4aXM6MCx5YXhpczoxLHpheGlzOjJ9LGg9e3RpcDoxLHRhaWw6MCxjbTouMjUsY2VudGVyOi41fSxmPXt0aXA6MSx0YWlsOjEsY206Ljc1LGNlbnRlcjouNX07ZnVuY3Rpb24gcCh0LGUpe3ZhciByPXQuZnVsbFNjZW5lTGF5b3V0LGk9dC5kYXRhU2NhbGUsbD17fTtmdW5jdGlvbiBjKHQsZSl7dmFyIG49cltlXSxvPWlbdVtlXV07cmV0dXJuIGEodCxmdW5jdGlvbih0KXtyZXR1cm4gbi5kMmwodCkqb30pfWwudmVjdG9ycz1zKGMoZS51LFwieGF4aXNcIiksYyhlLnYsXCJ5YXhpc1wiKSxjKGUudyxcInpheGlzXCIpLGUuX2xlbiksbC5wb3NpdGlvbnM9cyhjKGUueCxcInhheGlzXCIpLGMoZS55LFwieWF4aXNcIiksYyhlLnosXCJ6YXhpc1wiKSxlLl9sZW4pLGwuY29sb3JtYXA9byhlKSxsLnZlcnRleEludGVuc2l0eUJvdW5kcz1bZS5jbWluL2UuX25vcm1NYXgsZS5jbWF4L2UuX25vcm1NYXhdLGwuY29uZU9mZnNldD1oW2UuYW5jaG9yXSxcInNjYWxlZFwiPT09ZS5zaXplbW9kZT9sLmNvbmVTaXplPWUuc2l6ZXJlZnx8LjU6bC5jb25lU2l6ZT1lLnNpemVyZWYmJmUuX25vcm1NYXg/ZS5zaXplcmVmL2UuX25vcm1NYXg6LjU7dmFyIHA9bihsKSxkPWUubGlnaHRwb3NpdGlvbjtyZXR1cm4gcC5saWdodFBvc2l0aW9uPVtkLngsZC55LGQuel0scC5hbWJpZW50PWUubGlnaHRpbmcuYW1iaWVudCxwLmRpZmZ1c2U9ZS5saWdodGluZy5kaWZmdXNlLHAuc3BlY3VsYXI9ZS5saWdodGluZy5zcGVjdWxhcixwLnJvdWdobmVzcz1lLmxpZ2h0aW5nLnJvdWdobmVzcyxwLmZyZXNuZWw9ZS5saWdodGluZy5mcmVzbmVsLHAub3BhY2l0eT1lLm9wYWNpdHksZS5fcGFkPWZbZS5hbmNob3JdKnAudmVjdG9yU2NhbGUqcC5jb25lU2NhbGUqZS5fbm9ybU1heCxwfWMudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuZGF0YT10O3ZhciBlPXAodGhpcy5zY2VuZSx0KTt0aGlzLm1lc2gudXBkYXRlKGUpfSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5tZXNoKSx0aGlzLm1lc2guZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxuPXAodCxlKSxhPWkocixuKSxvPW5ldyBsKHQsZS51aWQpO3JldHVybiBvLm1lc2g9YSxvLmRhdGE9ZSxhLl90cmFjZT1vLHQuZ2xwbG90LmFkZChhKSxvfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvclwiOjY5OCxcIi4uLy4uL3Bsb3RzL2dsM2QvemlwM1wiOjgwMCxcImdsLWNvbmUzZFwiOjIzOX1dLDkxNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCIpLGE9dChcIi4vYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7ZnVuY3Rpb24gcyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfXZhciBsPXMoXCJ1XCIpLGM9cyhcInZcIiksdT1zKFwid1wiKSxoPXMoXCJ4XCIpLGY9cyhcInlcIikscD1zKFwielwiKTtsJiZsLmxlbmd0aCYmYyYmYy5sZW5ndGgmJnUmJnUubGVuZ3RoJiZoJiZoLmxlbmd0aCYmZiYmZi5sZW5ndGgmJnAmJnAubGVuZ3RoPyhzKFwic2l6ZXJlZlwiKSxzKFwic2l6ZW1vZGVcIikscyhcImFuY2hvclwiKSxzKFwibGlnaHRpbmcuYW1iaWVudFwiKSxzKFwibGlnaHRpbmcuZGlmZnVzZVwiKSxzKFwibGlnaHRpbmcuc3BlY3VsYXJcIikscyhcImxpZ2h0aW5nLnJvdWdobmVzc1wiKSxzKFwibGlnaHRpbmcuZnJlc25lbFwiKSxzKFwibGlnaHRwb3NpdGlvbi54XCIpLHMoXCJsaWdodHBvc2l0aW9uLnlcIikscyhcImxpZ2h0cG9zaXRpb24uelwiKSxpKHQsZSxvLHMse3ByZWZpeDpcIlwiLGNMZXR0ZXI6XCJjXCJ9KSxzKFwidGV4dFwiKSxzKFwiaG92ZXJ0ZXh0XCIpLHMoXCJob3ZlcnRlbXBsYXRlXCIpLGUuX2xlbmd0aD1udWxsKTplLnZpc2libGU9ITF9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIjo1ODgsXCIuLi8uLi9saWJcIjo3MDEsXCIuL2F0dHJpYnV0ZXNcIjo5MTR9XSw5MTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6XCJ0cmFjZVwiLG5hbWU6XCJjb25lXCIsYmFzZVBsb3RNb2R1bGU6dChcIi4uLy4uL3Bsb3RzL2dsM2RcIiksY2F0ZWdvcmllczpbXCJnbDNkXCJdLGF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxzdXBwbHlEZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxjb2xvcmJhcjp7bWluOlwiY21pblwiLG1heDpcImNtYXhcIn0sY2FsYzp0KFwiLi9jYWxjXCIpLHBsb3Q6dChcIi4vY29udmVydFwiKSxldmVudERhdGE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5ub3JtPWUudHJhY2VDb29yZGluYXRlWzZdLHR9LG1ldGE6e319fSx7XCIuLi8uLi9wbG90cy9nbDNkXCI6Nzg5LFwiLi9hdHRyaWJ1dGVzXCI6OTE0LFwiLi9jYWxjXCI6OTE1LFwiLi9jb252ZXJ0XCI6OTE2LFwiLi9kZWZhdWx0c1wiOjkxN31dLDkxOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlc1wiKS5kYXNoLGw9dChcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiKSxjPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsdT10KFwiLi4vLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHNcIiksaD11LkNPTVBBUklTT05fT1BTMixmPXUuSU5URVJWQUxfT1BTLHA9aS5saW5lO2UuZXhwb3J0cz1jKHt6Om4ueix4Om4ueCx4MDpuLngwLGR4Om4uZHgseTpuLnkseTA6bi55MCxkeTpuLmR5LHRleHQ6bi50ZXh0LGhvdmVydGV4dDpuLmhvdmVydGV4dCx0cmFuc3Bvc2U6bi50cmFuc3Bvc2UseHR5cGU6bi54dHlwZSx5dHlwZTpuLnl0eXBlLHpob3ZlcmZvcm1hdDpuLnpob3ZlcmZvcm1hdCxob3ZlcnRlbXBsYXRlOm4uaG92ZXJ0ZW1wbGF0ZSxjb25uZWN0Z2FwczpuLmNvbm5lY3RnYXBzLGZpbGxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGF1dG9jb250b3VyOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjXCIsaW1wbGllZEVkaXRzOntcImNvbnRvdXJzLnN0YXJ0XCI6dm9pZCAwLFwiY29udG91cnMuZW5kXCI6dm9pZCAwLFwiY29udG91cnMuc2l6ZVwiOnZvaWQgMH19LG5jb250b3Vyczp7dmFsVHlwZTpcImludGVnZXJcIixkZmx0OjE1LG1pbjoxLGVkaXRUeXBlOlwiY2FsY1wifSxjb250b3Vyczp7dHlwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibGV2ZWxzXCIsXCJjb25zdHJhaW50XCJdLGRmbHQ6XCJsZXZlbHNcIixlZGl0VHlwZTpcImNhbGNcIn0sc3RhcnQ6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0Om51bGwsZWRpdFR5cGU6XCJwbG90XCIsaW1wbGllZEVkaXRzOntcIl5hdXRvY29udG91clwiOiExfX0sZW5kOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDpudWxsLGVkaXRUeXBlOlwicGxvdFwiLGltcGxpZWRFZGl0czp7XCJeYXV0b2NvbnRvdXJcIjohMX19LHNpemU6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0Om51bGwsbWluOjAsZWRpdFR5cGU6XCJwbG90XCIsaW1wbGllZEVkaXRzOntcIl5hdXRvY29udG91clwiOiExfX0sY29sb3Jpbmc6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImZpbGxcIixcImhlYXRtYXBcIixcImxpbmVzXCIsXCJub25lXCJdLGRmbHQ6XCJmaWxsXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHNob3dsaW5lczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwicGxvdFwifSxzaG93bGFiZWxzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEsZWRpdFR5cGU6XCJwbG90XCJ9LGxhYmVsZm9udDpsKHtlZGl0VHlwZTpcInBsb3RcIixjb2xvckVkaXRUeXBlOlwic3R5bGVcIn0pLGxhYmVsZm9ybWF0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwicGxvdFwifSxvcGVyYXRpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltdLmNvbmNhdChoKS5jb25jYXQoZiksZGZsdDpcIj1cIixlZGl0VHlwZTpcImNhbGNcIn0sdmFsdWU6e3ZhbFR5cGU6XCJhbnlcIixkZmx0OjAsZWRpdFR5cGU6XCJjYWxjXCJ9LGVkaXRUeXBlOlwiY2FsY1wiLGltcGxpZWRFZGl0czp7YXV0b2NvbnRvdXI6ITF9fSxsaW5lOntjb2xvcjpjKHt9LHAuY29sb3Ise2VkaXRUeXBlOlwic3R5bGUrY29sb3JiYXJzXCJ9KSx3aWR0aDpjKHt9LHAud2lkdGgse2VkaXRUeXBlOlwic3R5bGUrY29sb3JiYXJzXCJ9KSxkYXNoOnMsc21vb3RoaW5nOmMoe30scC5zbW9vdGhpbmcse30pLGVkaXRUeXBlOlwicGxvdFwifX0sYShcIlwiLHtjTGV0dGVyOlwielwiLGF1dG9Db2xvckRmbHQ6ITEsZWRpdFR5cGVPdmVycmlkZTpcImNhbGNcIn0pLHtjb2xvcmJhcjpvfSl9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXNcIjo1OTgsXCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wc1wiOjY3NCxcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIjo3NzUsXCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXNcIjo5NDgsXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIjoxMDUyfV0sOTIwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2hlYXRtYXAvY2FsY1wiKSxpPXQoXCIuL3NldF9jb250b3Vyc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKHQsZSk7cmV0dXJuIGkoZSkscn19LHtcIi4uL2hlYXRtYXAvY2FsY1wiOjk0OSxcIi4vc2V0X2NvbnRvdXJzXCI6OTM4fV0sOTIxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzPXRbMF0sbD1zLngubGVuZ3RoLGM9cy55Lmxlbmd0aCx1PXMueixoPW4uY29udG91cnMsZj0tMS8wLHA9MS8wO2ZvcihpPTA7aTxjO2krKylwPU1hdGgubWluKHAsdVtpXVswXSkscD1NYXRoLm1pbihwLHVbaV1bbC0xXSksZj1NYXRoLm1heChmLHVbaV1bMF0pLGY9TWF0aC5tYXgoZix1W2ldW2wtMV0pO2ZvcihpPTE7aTxsLTE7aSsrKXA9TWF0aC5taW4ocCx1WzBdW2ldKSxwPU1hdGgubWluKHAsdVtjLTFdW2ldKSxmPU1hdGgubWF4KGYsdVswXVtpXSksZj1NYXRoLm1heChmLHVbYy0xXVtpXSk7c3dpdGNoKHMucHJlZml4Qm91bmRhcnk9ITEsZSl7Y2FzZVwiPlwiOmgudmFsdWU+ZiYmKHMucHJlZml4Qm91bmRhcnk9ITApO2JyZWFrO2Nhc2VcIjxcIjpoLnZhbHVlPHAmJihzLnByZWZpeEJvdW5kYXJ5PSEwKTticmVhaztjYXNlXCJbXVwiOmE9TWF0aC5taW4uYXBwbHkobnVsbCxoLnZhbHVlKSwoKG89TWF0aC5tYXguYXBwbHkobnVsbCxoLnZhbHVlKSk8cHx8YT5mKSYmKHMucHJlZml4Qm91bmRhcnk9ITApO2JyZWFrO2Nhc2VcIl1bXCI6YT1NYXRoLm1pbi5hcHBseShudWxsLGgudmFsdWUpLG89TWF0aC5tYXguYXBwbHkobnVsbCxoLnZhbHVlKSxhPHAmJm8+ZiYmKHMucHJlZml4Qm91bmRhcnk9ITApfX19LHt9XSw5MjI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9kcmF3XCIpLGk9dChcIi4vbWFrZV9jb2xvcl9tYXBcIiksYT10KFwiLi9lbmRfcGx1c1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLnRyYWNlLG89XCJjYlwiK3IudWlkO2lmKHQuX2Z1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3RBbGwoXCIuXCIrbykucmVtb3ZlKCksci5zaG93c2NhbGUpe3ZhciBzPWVbMF0udC5jYj1uKHQsbyksbD1yLmNvbnRvdXJzLGM9ci5saW5lLHU9bC5zaXplfHwxLGg9bC5jb2xvcmluZyxmPWkocix7aXNDb2xvcmJhcjohMH0pO3MuZmlsbGdyYWRpZW50KFwiaGVhdG1hcFwiPT09aD9yLmNvbG9yc2NhbGU6XCJcIikuenJhbmdlKFwiaGVhdG1hcFwiPT09aD9bci56bWluLHIuem1heF06XCJcIikuZmlsbGNvbG9yKFwiZmlsbFwiPT09aD9mOlwiXCIpLmxpbmUoe2NvbG9yOlwibGluZXNcIj09PWg/ZjpjLmNvbG9yLHdpZHRoOiExIT09bC5zaG93bGluZXM/Yy53aWR0aDowLGRhc2g6Yy5kYXNofSkubGV2ZWxzKHtzdGFydDpsLnN0YXJ0LGVuZDphKGwpLHNpemU6dX0pLm9wdGlvbnMoci5jb2xvcmJhcikoKX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2RyYXdcIjo1ODMsXCIuL2VuZF9wbHVzXCI6OTMwLFwiLi9tYWtlX2NvbG9yX21hcFwiOjkzNX1dLDkyMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17Qk9UVE9NU1RBUlQ6WzEsOSwxMywxMDQsNzEzXSxUT1BTVEFSVDpbNCw2LDcsMTA0LDcxM10sTEVGVFNUQVJUOls4LDEyLDE0LDIwOCwxMTE0XSxSSUdIVFNUQVJUOlsyLDMsMTEsMjA4LDExMTRdLE5FV0RFTFRBOltudWxsLFstMSwwXSxbMCwtMV0sWy0xLDBdLFsxLDBdLG51bGwsWzAsLTFdLFstMSwwXSxbMCwxXSxbMCwxXSxudWxsLFswLDFdLFsxLDBdLFsxLDBdLFswLC0xXV0sQ0hPT1NFU0FERExFOnsxMDQ6WzQsMV0sMjA4OlsyLDhdLDcxMzpbNywxM10sMTExNDpbMTEsMTRdfSxTQURETEVSRU1BSU5ERVI6ezE6NCwyOjgsNDoxLDc6MTMsODoyLDExOjE0LDEzOjcsMTQ6MTF9LExBQkVMRElTVEFOQ0U6MixMQUJFTElOQ1JFQVNFOjEwLExBQkVMTUlOOjMsTEFCRUxNQVg6MTAsTEFCRUxPUFRJTUlaRVI6e0VER0VDT1NUOjEsQU5HTEVDT1NUOjEsTkVJR0hCT1JDT1NUOjUsU0FNRUxFVkVMRkFDVE9SOjEwLFNBTUVMRVZFTERJU1RBTkNFOjUsTUFYQ09TVDoxMDAsSU5JVElBTFNFQVJDSFBPSU5UUzoxMCxJVEVSQVRJT05TOjV9fX0se31dLDkyNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuL2xhYmVsX2RlZmF1bHRzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksbz1hLmFkZE9wYWNpdHkscz1hLm9wYWNpdHksbD10KFwiLi4vLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHNcIiksYz1sLkNPTlNUUkFJTlRfUkVEVUNUSU9OLHU9bC5DT01QQVJJU09OX09QUzI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbCxoKXt2YXIgZixwLGQsZz1lLmNvbnRvdXJzLHY9cihcImNvbnRvdXJzLm9wZXJhdGlvblwiKTsoZy5fb3BlcmF0aW9uPWNbdl0sZnVuY3Rpb24odCxlKXt2YXIgcjstMT09PXUuaW5kZXhPZihlLm9wZXJhdGlvbik/KHQoXCJjb250b3Vycy52YWx1ZVwiLFswLDFdKSxBcnJheS5pc0FycmF5KGUudmFsdWUpP2UudmFsdWUubGVuZ3RoPjI/ZS52YWx1ZT1lLnZhbHVlLnNsaWNlKDIpOjA9PT1lLmxlbmd0aD9lLnZhbHVlPVswLDFdOmUubGVuZ3RoPDI/KHI9cGFyc2VGbG9hdChlLnZhbHVlWzBdKSxlLnZhbHVlPVtyLHIrMV0pOmUudmFsdWU9W3BhcnNlRmxvYXQoZS52YWx1ZVswXSkscGFyc2VGbG9hdChlLnZhbHVlWzFdKV06bihlLnZhbHVlKSYmKHI9cGFyc2VGbG9hdChlLnZhbHVlKSxlLnZhbHVlPVtyLHIrMV0pKToodChcImNvbnRvdXJzLnZhbHVlXCIsMCksbihlLnZhbHVlKXx8KEFycmF5LmlzQXJyYXkoZS52YWx1ZSk/ZS52YWx1ZT1wYXJzZUZsb2F0KGUudmFsdWVbMF0pOmUudmFsdWU9MCkpfShyLGcpLFwiPVwiPT09dj9mPWcuc2hvd2xpbmVzPSEwOihmPXIoXCJjb250b3Vycy5zaG93bGluZXNcIiksZD1yKFwiZmlsbGNvbG9yXCIsbygodC5saW5lfHx7fSkuY29sb3J8fGwsLjUpKSksZikmJihwPXIoXCJsaW5lLmNvbG9yXCIsZCYmcyhkKT9vKGUuZmlsbGNvbG9yLDEpOmwpLHIoXCJsaW5lLndpZHRoXCIsMikscihcImxpbmUuZGFzaFwiKSk7cihcImxpbmUuc21vb3RoaW5nXCIpLGkocixhLHAsaCl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHNcIjo2NzQsXCIuL2xhYmVsX2RlZmF1bHRzXCI6OTM0LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw5MjU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHNcIiksaT10KFwiZmFzdC1pc251bWVyaWNcIik7ZnVuY3Rpb24gYSh0LGUpe3ZhciByLGE9QXJyYXkuaXNBcnJheShlKTtmdW5jdGlvbiBvKHQpe3JldHVybiBpKHQpPyt0Om51bGx9cmV0dXJuLTEhPT1uLkNPTVBBUklTT05fT1BTMi5pbmRleE9mKHQpP3I9byhhP2VbMF06ZSk6LTEhPT1uLklOVEVSVkFMX09QUy5pbmRleE9mKHQpP3I9YT9bbyhlWzBdKSxvKGVbMV0pXTpbbyhlKSxvKGUpXTotMSE9PW4uU0VUX09QUy5pbmRleE9mKHQpJiYocj1hP2UubWFwKG8pOltvKGUpXSkscn1mdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbihlKXtlPWEodCxlKTt2YXIgcj1NYXRoLm1pbihlWzBdLGVbMV0pLG49TWF0aC5tYXgoZVswXSxlWzFdKTtyZXR1cm57c3RhcnQ6cixlbmQ6bixzaXplOm4tcn19fWZ1bmN0aW9uIHModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybntzdGFydDplPWEodCxlKSxlbmQ6MS8wLHNpemU6MS8wfX19ZS5leHBvcnRzPXtcIltdXCI6byhcIltdXCIpLFwiXVtcIjpvKFwiXVtcIiksXCI+XCI6cyhcIj5cIiksXCI8XCI6cyhcIjxcIiksXCI9XCI6cyhcIj1cIil9fSx7XCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wc1wiOjY3NCxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sOTI2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4oXCJjb250b3Vycy5zdGFydFwiKSxhPW4oXCJjb250b3Vycy5lbmRcIiksbz0hMT09PWl8fCExPT09YSxzPXIoXCJjb250b3Vycy5zaXplXCIpOyEobz9lLmF1dG9jb250b3VyPSEwOnIoXCJhdXRvY29udG91clwiLCExKSkmJnN8fHIoXCJuY29udG91cnNcIil9fSx7fV0sOTI3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKTtmdW5jdGlvbiBpKHQpe3JldHVybiBuLmV4dGVuZEZsYXQoe30sdCx7ZWRnZXBhdGhzOm4uZXh0ZW5kRGVlcChbXSx0LmVkZ2VwYXRocykscGF0aHM6bi5leHRlbmREZWVwKFtdLHQucGF0aHMpfSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmV2ZXJzZSgpfSxsPWZ1bmN0aW9uKHQpe3JldHVybiB0fTtzd2l0Y2goZSl7Y2FzZVwiPVwiOmNhc2VcIjxcIjpyZXR1cm4gdDtjYXNlXCI+XCI6Zm9yKDEhPT10Lmxlbmd0aCYmbi53YXJuKFwiQ29udG91ciBkYXRhIGludmFsaWQgZm9yIHRoZSBzcGVjaWZpZWQgaW5lcXVhbGl0eSBvcGVyYXRpb24uXCIpLGE9dFswXSxyPTA7cjxhLmVkZ2VwYXRocy5sZW5ndGg7cisrKWEuZWRnZXBhdGhzW3JdPXMoYS5lZGdlcGF0aHNbcl0pO2ZvcihyPTA7cjxhLnBhdGhzLmxlbmd0aDtyKyspYS5wYXRoc1tyXT1zKGEucGF0aHNbcl0pO3JldHVybiB0O2Nhc2VcIl1bXCI6dmFyIGM9cztzPWwsbD1jO2Nhc2VcIltdXCI6Zm9yKDIhPT10Lmxlbmd0aCYmbi53YXJuKFwiQ29udG91ciBkYXRhIGludmFsaWQgZm9yIHRoZSBzcGVjaWZpZWQgaW5lcXVhbGl0eSByYW5nZSBvcGVyYXRpb24uXCIpLGE9aSh0WzBdKSxvPWkodFsxXSkscj0wO3I8YS5lZGdlcGF0aHMubGVuZ3RoO3IrKylhLmVkZ2VwYXRoc1tyXT1zKGEuZWRnZXBhdGhzW3JdKTtmb3Iocj0wO3I8YS5wYXRocy5sZW5ndGg7cisrKWEucGF0aHNbcl09cyhhLnBhdGhzW3JdKTtmb3IoO28uZWRnZXBhdGhzLmxlbmd0aDspYS5lZGdlcGF0aHMucHVzaChsKG8uZWRnZXBhdGhzLnNoaWZ0KCkpKTtmb3IoO28ucGF0aHMubGVuZ3RoOylhLnBhdGhzLnB1c2gobChvLnBhdGhzLnNoaWZ0KCkpKTtyZXR1cm5bYV19fX0se1wiLi4vLi4vbGliXCI6NzAxfV0sOTI4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi9oZWF0bWFwL3h5el9kZWZhdWx0c1wiKSxhPXQoXCIuL2NvbnN0cmFpbnRfZGVmYXVsdHNcIiksbz10KFwiLi9jb250b3Vyc19kZWZhdWx0c1wiKSxzPXQoXCIuL3N0eWxlX2RlZmF1bHRzXCIpLGw9dChcIi4vYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7ZnVuY3Rpb24gdShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbCxyLGkpfWlmKGkodCxlLHUsYykpe3UoXCJ0ZXh0XCIpLHUoXCJob3ZlcnRleHRcIiksdShcImhvdmVydGVtcGxhdGVcIik7dmFyIGg9XCJjb25zdHJhaW50XCI9PT11KFwiY29udG91cnMudHlwZVwiKTt1KFwiY29ubmVjdGdhcHNcIixuLmlzQXJyYXkxRChlLnopKSxoP2EodCxlLHUsYyxyKToobyh0LGUsdSxmdW5jdGlvbihyKXtyZXR1cm4gbi5jb2VyY2UyKHQsZSxsLHIpfSkscyh0LGUsdSxjKSl9ZWxzZSBlLnZpc2libGU9ITF9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9oZWF0bWFwL3h5el9kZWZhdWx0c1wiOjk2MixcIi4vYXR0cmlidXRlc1wiOjkxOSxcIi4vY29uc3RyYWludF9kZWZhdWx0c1wiOjkyNCxcIi4vY29udG91cnNfZGVmYXVsdHNcIjo5MjYsXCIuL3N0eWxlX2RlZmF1bHRzXCI6OTQwfV0sOTI5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2NvbnN0cmFpbnRfbWFwcGluZ1wiKSxhPXQoXCIuL2VuZF9wbHVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBvPVwiY29uc3RyYWludFwiPT09dC50eXBlP2lbdC5fb3BlcmF0aW9uXSh0LnZhbHVlKTp0LHM9by5zaXplLGw9W10sYz1hKG8pLHU9ci50cmFjZS5fY2FycGV0VHJhY2UsaD11P3t4YXhpczp1LmFheGlzLHlheGlzOnUuYmF4aXMseDpyLmEseTpyLmJ9Ont4YXhpczplLnhheGlzLHlheGlzOmUueWF4aXMseDpyLngseTpyLnl9LGY9by5zdGFydDtmPGM7Zis9cylpZihsLnB1c2gobi5leHRlbmRGbGF0KHtsZXZlbDpmLGNyb3NzaW5nczp7fSxzdGFydHM6W10sZWRnZXBhdGhzOltdLHBhdGhzOltdLHo6ci56LHNtb290aGluZzpyLnRyYWNlLmxpbmUuc21vb3RoaW5nfSxoKSksbC5sZW5ndGg+MWUzKXtuLndhcm4oXCJUb28gbWFueSBjb250b3VycywgY2xpcHBpbmcgYXQgMTAwMFwiLHQpO2JyZWFrfXJldHVybiBsfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi9jb25zdHJhaW50X21hcHBpbmdcIjo5MjUsXCIuL2VuZF9wbHVzXCI6OTMwfV0sOTMwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0LmVuZCt0LnNpemUvMWU2fX0se31dLDkzMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9jb25zdGFudHNcIik7ZnVuY3Rpb24gYSh0LGUscixuKXtyZXR1cm4gTWF0aC5hYnModFswXS1lWzBdKTxyJiZNYXRoLmFicyh0WzFdLWVbMV0pPG59ZnVuY3Rpb24gbyh0LGUscixvLGwpe3ZhciBjLHU9ZS5qb2luKFwiLFwiKSxoPXUsZj10LmNyb3NzaW5nc1toXSxwPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0wLGE9MDt0PjIwJiZlPzIwOD09PXR8fDExMTQ9PT10P249MD09PXJbMF0/MTotMTphPTA9PT1yWzFdPzE6LTE6LTEhPT1pLkJPVFRPTVNUQVJULmluZGV4T2YodCk/YT0xOi0xIT09aS5MRUZUU1RBUlQuaW5kZXhPZih0KT9uPTE6LTEhPT1pLlRPUFNUQVJULmluZGV4T2YodCk/YT0tMTpuPS0xO3JldHVybltuLGFdfShmLHIsZSksZD1bcyh0LGUsWy1wWzBdLC1wWzFdXSldLGc9cC5qb2luKFwiLFwiKSx2PXQuei5sZW5ndGgsbT10LnpbMF0ubGVuZ3RoO2ZvcihjPTA7YzwxZTQ7YysrKXtpZihmPjIwPyhmPWkuQ0hPT1NFU0FERExFW2ZdWyhwWzBdfHxwWzFdKTwwPzA6MV0sdC5jcm9zc2luZ3NbaF09aS5TQURETEVSRU1BSU5ERVJbZl0pOmRlbGV0ZSB0LmNyb3NzaW5nc1toXSwhKHA9aS5ORVdERUxUQVtmXSkpe24ubG9nKFwiRm91bmQgYmFkIG1hcmNoaW5nIGluZGV4OlwiLGYsZSx0LmxldmVsKTticmVha31kLnB1c2gocyh0LGUscCkpLGVbMF0rPXBbMF0sZVsxXSs9cFsxXSxhKGRbZC5sZW5ndGgtMV0sZFtkLmxlbmd0aC0yXSxvLGwpJiZkLnBvcCgpLGg9ZS5qb2luKFwiLFwiKTt2YXIgeT1wWzBdJiYoZVswXTwwfHxlWzBdPm0tMil8fHBbMV0mJihlWzFdPDB8fGVbMV0+di0yKTtpZihoPT09dSYmcC5qb2luKFwiLFwiKT09PWd8fHImJnkpYnJlYWs7Zj10LmNyb3NzaW5nc1toXX0xZTQ9PT1jJiZuLmxvZyhcIkluZmluaXRlIGxvb3AgaW4gY29udG91cj9cIik7dmFyIHgsYixfLHcsayxBLFQsTSxTLEUsQyxMLHosTyxJLEQ9YShkWzBdLGRbZC5sZW5ndGgtMV0sbyxsKSxQPTAsUj0uMip0LnNtb290aGluZyxGPVtdLEI9MDtmb3IoYz0xO2M8ZC5sZW5ndGg7YysrKUw9ZFtjXSx6PWRbYy0xXSx2b2lkIDAsdm9pZCAwLE89TFsyXS16WzJdLEk9TFszXS16WzNdLFArPVQ9TWF0aC5zcXJ0KE8qTytJKkkpLEYucHVzaChUKTt2YXIgTj1QL0YubGVuZ3RoKlI7ZnVuY3Rpb24gaih0KXtyZXR1cm4gZFt0JWQubGVuZ3RoXX1mb3IoYz1kLmxlbmd0aC0yO2M+PUI7Yy0tKWlmKCh4PUZbY10pPE4pe2ZvcihfPTAsYj1jLTE7Yj49QiYmeCtGW2JdPE47Yi0tKXgrPUZbYl07aWYoRCYmYz09PWQubGVuZ3RoLTIpZm9yKF89MDtfPGImJngrRltfXTxOO18rKyl4Kz1GW19dO2s9Yy1iK18rMSxBPU1hdGguZmxvb3IoKGMrYitfKzIpLzIpLHc9RHx8YyE9PWQubGVuZ3RoLTI/RHx8LTEhPT1iP2slMj9qKEEpOlsoaihBKVswXStqKEErMSlbMF0pLzIsKGooQSlbMV0raihBKzEpWzFdKS8yXTpkWzBdOmRbZC5sZW5ndGgtMV0sZC5zcGxpY2UoYisxLGMtYisxLHcpLGM9YisxLF8mJihCPV8pLEQmJihjPT09ZC5sZW5ndGgtMj9kW19dPWRbZC5sZW5ndGgtMV06MD09PWMmJihkW2QubGVuZ3RoLTFdPWRbMF0pKX1mb3IoZC5zcGxpY2UoMCxCKSxjPTA7YzxkLmxlbmd0aDtjKyspZFtjXS5sZW5ndGg9MjtpZighKGQubGVuZ3RoPDIpKWlmKEQpZC5wb3AoKSx0LnBhdGhzLnB1c2goZCk7ZWxzZXtyfHxuLmxvZyhcIlVuY2xvc2VkIGludGVyaW9yIGNvbnRvdXI/XCIsdC5sZXZlbCx1LGQuam9pbihcIkxcIikpO3ZhciBWPSExO2ZvcihNPTA7TTx0LmVkZ2VwYXRocy5sZW5ndGg7TSsrKWlmKEU9dC5lZGdlcGF0aHNbTV0sIVYmJmEoRVswXSxkW2QubGVuZ3RoLTFdLG8sbCkpe2QucG9wKCksVj0hMDt2YXIgVT0hMTtmb3IoUz0wO1M8dC5lZGdlcGF0aHMubGVuZ3RoO1MrKylpZihhKChDPXQuZWRnZXBhdGhzW1NdKVtDLmxlbmd0aC0xXSxkWzBdLG8sbCkpe1U9ITAsZC5zaGlmdCgpLHQuZWRnZXBhdGhzLnNwbGljZShNLDEpLFM9PT1NP3QucGF0aHMucHVzaChkLmNvbmNhdChDKSk6KFM+TSYmUy0tLHQuZWRnZXBhdGhzW1NdPUMuY29uY2F0KGQsRSkpO2JyZWFrfVV8fCh0LmVkZ2VwYXRoc1tNXT1kLmNvbmNhdChFKSl9Zm9yKE09MDtNPHQuZWRnZXBhdGhzLmxlbmd0aCYmIVY7TSsrKWEoKEU9dC5lZGdlcGF0aHNbTV0pW0UubGVuZ3RoLTFdLGRbMF0sbyxsKSYmKGQuc2hpZnQoKSx0LmVkZ2VwYXRoc1tNXT1FLmNvbmNhdChkKSxWPSEwKTtWfHx0LmVkZ2VwYXRocy5wdXNoKGQpfX1mdW5jdGlvbiBzKHQsZSxyKXt2YXIgbj1lWzBdK01hdGgubWF4KHJbMF0sMCksaT1lWzFdK01hdGgubWF4KHJbMV0sMCksYT10LnpbaV1bbl0sbz10LnhheGlzLHM9dC55YXhpcztpZihyWzFdKXt2YXIgbD0odC5sZXZlbC1hKS8odC56W2ldW24rMV0tYSk7cmV0dXJuW28uYzJwKCgxLWwpKnQueFtuXStsKnQueFtuKzFdLCEwKSxzLmMycCh0LnlbaV0sITApLG4rbCxpXX12YXIgYz0odC5sZXZlbC1hKS8odC56W2krMV1bbl0tYSk7cmV0dXJuW28uYzJwKHQueFtuXSwhMCkscy5jMnAoKDEtYykqdC55W2ldK2MqdC55W2krMV0sITApLG4saStjXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEscyxsO2ZvcihlPWV8fC4wMSxyPXJ8fC4wMSxhPTA7YTx0Lmxlbmd0aDthKyspe2ZvcihzPXRbYV0sbD0wO2w8cy5zdGFydHMubGVuZ3RoO2wrKylvKHMscy5zdGFydHNbbF0sXCJlZGdlXCIsZSxyKTtmb3IoaT0wO09iamVjdC5rZXlzKHMuY3Jvc3NpbmdzKS5sZW5ndGgmJmk8MWU0OylpKyssbyhzLE9iamVjdC5rZXlzKHMuY3Jvc3NpbmdzKVswXS5zcGxpdChcIixcIikubWFwKE51bWJlciksdm9pZCAwLGUscik7MWU0PT09aSYmbi5sb2coXCJJbmZpbml0ZSBsb29wIGluIGNvbnRvdXI/XCIpfX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4vY29uc3RhbnRzXCI6OTIzfV0sOTMyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksaT10KFwiLi4vaGVhdG1hcC9ob3ZlclwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxvKXt2YXIgcz1pKHQsZSxyLGEsbywhMCk7cmV0dXJuIHMmJnMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LnRyYWNlO1wiY29uc3RyYWludFwiPT09ZS5jb250b3Vycy50eXBlJiYoZS5maWxsY29sb3ImJm4ub3BhY2l0eShlLmZpbGxjb2xvcik/dC5jb2xvcj1uLmFkZE9wYWNpdHkoZS5maWxsY29sb3IsMSk6ZS5jb250b3Vycy5zaG93bGluZXMmJm4ub3BhY2l0eShlLmxpbmUuY29sb3IpJiYodC5jb2xvcj1uLmFkZE9wYWNpdHkoZS5saW5lLmNvbG9yLDEpKSl9KSxzfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uL2hlYXRtYXAvaG92ZXJcIjo5NTV9XSw5MzM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLG4uY2FsYz10KFwiLi9jYWxjXCIpLG4ucGxvdD10KFwiLi9wbG90XCIpLnBsb3Qsbi5zdHlsZT10KFwiLi9zdHlsZVwiKSxuLmNvbG9yYmFyPXQoXCIuL2NvbG9yYmFyXCIpLG4uaG92ZXJQb2ludHM9dChcIi4vaG92ZXJcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJjb250b3VyXCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCIpLG4uY2F0ZWdvcmllcz1bXCJjYXJ0ZXNpYW5cIixcInN2Z1wiLFwiMmRNYXBcIixcImNvbnRvdXJcIixcInNob3dMZWdlbmRcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIjo3NjAsXCIuL2F0dHJpYnV0ZXNcIjo5MTksXCIuL2NhbGNcIjo5MjAsXCIuL2NvbG9yYmFyXCI6OTIyLFwiLi9kZWZhdWx0c1wiOjkyOCxcIi4vaG92ZXJcIjo5MzIsXCIuL3Bsb3RcIjo5MzcsXCIuL3N0eWxlXCI6OTM5fV0sOTM0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7aWYoaXx8KGk9e30pLHQoXCJjb250b3Vycy5zaG93bGFiZWxzXCIpKXt2YXIgYT1lLmZvbnQ7bi5jb2VyY2VGb250KHQsXCJjb250b3Vycy5sYWJlbGZvbnRcIix7ZmFtaWx5OmEuZmFtaWx5LHNpemU6YS5zaXplLGNvbG9yOnJ9KSx0KFwiY29udG91cnMubGFiZWxmb3JtYXRcIil9ITEhPT1pLmhhc0hvdmVyJiZ0KFwiemhvdmVyZm9ybWF0XCIpfX0se1wiLi4vLi4vbGliXCI6NzAxfV0sOTM1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZVwiKSxhPXQoXCIuL2VuZF9wbHVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmNvbnRvdXJzLHI9ZS5zdGFydCxvPWEoZSkscz1lLnNpemV8fDEsbD1NYXRoLmZsb29yKChvLXIpL3MpKzEsYz1cImxpbmVzXCI9PT1lLmNvbG9yaW5nPzA6MTtpc0Zpbml0ZShzKXx8KHM9MSxsPTEpO3ZhciB1LGgsZj10LnJldmVyc2VzY2FsZT9pLmZsaXBTY2FsZSh0LmNvbG9yc2NhbGUpOnQuY29sb3JzY2FsZSxwPWYubGVuZ3RoLGQ9bmV3IEFycmF5KHApLGc9bmV3IEFycmF5KHApO2lmKFwiaGVhdG1hcFwiPT09ZS5jb2xvcmluZyl7Zm9yKHQuemF1dG8mJiExPT09dC5hdXRvY29udG91ciYmKHQuem1pbj1yLXMvMix0LnptYXg9dC56bWluK2wqcyksaD0wO2g8cDtoKyspdT1mW2hdLGRbaF09dVswXSoodC56bWF4LXQuem1pbikrdC56bWluLGdbaF09dVsxXTt2YXIgdj1uLmV4dGVudChbdC56bWluLHQuem1heCxlLnN0YXJ0LGUuc3RhcnQrcyoobC0xKV0pLG09dlt0LnptaW48dC56bWF4PzA6MV0seT12W3Quem1pbjx0LnptYXg/MTowXTttIT09dC56bWluJiYoZC5zcGxpY2UoMCwwLG0pLGcuc3BsaWNlKDAsMCxSYW5nZVswXSkpLHkhPT10LnptYXgmJihkLnB1c2goeSksZy5wdXNoKGdbZy5sZW5ndGgtMV0pKX1lbHNlIGZvcihoPTA7aDxwO2grKyl1PWZbaF0sZFtoXT0odVswXSoobCtjLTEpLWMvMikqcytyLGdbaF09dVsxXTtyZXR1cm4gaS5tYWtlQ29sb3JTY2FsZUZ1bmMoe2RvbWFpbjpkLHJhbmdlOmd9LHtub051bWVyaWNDaGVjazohMH0pfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlXCI6NTkwLFwiLi9lbmRfcGx1c1wiOjkzMCxkMzoxNTV9XSw5MzY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9jb25zdGFudHNcIik7ZnVuY3Rpb24gaSh0LGUpe3ZhciByPShlWzBdWzBdPnQ/MDoxKSsoZVswXVsxXT50PzA6MikrKGVbMV1bMV0+dD8wOjQpKyhlWzFdWzBdPnQ/MDo4KTtyZXR1cm4gNT09PXJ8fDEwPT09cj90PihlWzBdWzBdK2VbMF1bMV0rZVsxXVswXStlWzFdWzFdKS80PzU9PT1yPzcxMzoxMTE0OjU9PT1yPzEwNDoyMDg6MTU9PT1yPzA6cn1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixhLG8scyxsLGMsdSxoLGY9dFswXS56LHA9Zi5sZW5ndGgsZD1mWzBdLmxlbmd0aCxnPTI9PT1wfHwyPT09ZDtmb3Iocj0wO3I8cC0xO3IrKylmb3Iobz1bXSwwPT09ciYmKG89by5jb25jYXQobi5CT1RUT01TVEFSVCkpLHI9PT1wLTImJihvPW8uY29uY2F0KG4uVE9QU1RBUlQpKSxlPTA7ZTxkLTE7ZSsrKWZvcihhPW8uc2xpY2UoKSwwPT09ZSYmKGE9YS5jb25jYXQobi5MRUZUU1RBUlQpKSxlPT09ZC0yJiYoYT1hLmNvbmNhdChuLlJJR0hUU1RBUlQpKSxzPWUrXCIsXCIrcixsPVtbZltyXVtlXSxmW3JdW2UrMV1dLFtmW3IrMV1bZV0sZltyKzFdW2UrMV1dXSxoPTA7aDx0Lmxlbmd0aDtoKyspKGM9aSgodT10W2hdKS5sZXZlbCxsKSkmJih1LmNyb3NzaW5nc1tzXT1jLC0xIT09YS5pbmRleE9mKGMpJiYodS5zdGFydHMucHVzaChbZSxyXSksZyYmLTEhPT1hLmluZGV4T2YoYyxhLmluZGV4T2YoYykrMSkmJnUuc3RhcnRzLnB1c2goW2Uscl0pKSl9fSx7XCIuL2NvbnN0YW50c1wiOjkyM31dLDkzNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLG89dChcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiKSxzPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxsPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnRcIiksYz10KFwiLi4vaGVhdG1hcC9wbG90XCIpLHU9dChcIi4vbWFrZV9jcm9zc2luZ3NcIiksaD10KFwiLi9maW5kX2FsbF9wYXRoc1wiKSxmPXQoXCIuL2VtcHR5X3BhdGhpbmZvXCIpLHA9dChcIi4vY29udmVydF90b19jb25zdHJhaW50c1wiKSxkPXQoXCIuL2Nsb3NlX2JvdW5kYXJpZXNcIiksZz10KFwiLi9jb25zdGFudHNcIiksdj1nLkxBQkVMT1BUSU1JWkVSO2Z1bmN0aW9uIG0odCxlKXt2YXIgcixuLG8scyxsLGMsdSxoPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5wcmVmaXhCb3VuZGFyeTtpZih2b2lkIDA9PT1yKXt2YXIgbj1NYXRoLm1pbih0LnpbMF1bMF0sdC56WzBdWzFdKTtyPSF0LmVkZ2VwYXRocy5sZW5ndGgmJm4+dC5sZXZlbH1yZXR1cm4gcj9cIk1cIitlLmpvaW4oXCJMXCIpK1wiWlwiOlwiXCJ9KHQsZSksZj0wLHA9dC5lZGdlcGF0aHMubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KSxkPSEwO2Z1bmN0aW9uIGcodCl7cmV0dXJuIE1hdGguYWJzKHRbMV0tZVsyXVsxXSk8LjAxfWZ1bmN0aW9uIHYodCl7cmV0dXJuIE1hdGguYWJzKHRbMF0tZVswXVswXSk8LjAxfWZ1bmN0aW9uIG0odCl7cmV0dXJuIE1hdGguYWJzKHRbMF0tZVsyXVswXSk8LjAxfWZvcig7cC5sZW5ndGg7KXtmb3IoYz1hLnNtb290aG9wZW4odC5lZGdlcGF0aHNbZl0sdC5zbW9vdGhpbmcpLGgrPWQ/YzpjLnJlcGxhY2UoL15NLyxcIkxcIikscC5zcGxpY2UocC5pbmRleE9mKGYpLDEpLHI9dC5lZGdlcGF0aHNbZl1bdC5lZGdlcGF0aHNbZl0ubGVuZ3RoLTFdLHM9LTEsbz0wO288NDtvKyspe2lmKCFyKXtpLmxvZyhcIk1pc3NpbmcgZW5kP1wiLGYsdCk7YnJlYWt9Zm9yKHU9cixNYXRoLmFicyh1WzFdLWVbMF1bMV0pPC4wMSYmIW0ocik/bj1lWzFdOnYocik/bj1lWzBdOmcocik/bj1lWzNdOm0ocikmJihuPWVbMl0pLGw9MDtsPHQuZWRnZXBhdGhzLmxlbmd0aDtsKyspe3ZhciB5PXQuZWRnZXBhdGhzW2xdWzBdO01hdGguYWJzKHJbMF0tblswXSk8LjAxP01hdGguYWJzKHJbMF0teVswXSk8LjAxJiYoeVsxXS1yWzFdKSooblsxXS15WzFdKT49MCYmKG49eSxzPWwpOk1hdGguYWJzKHJbMV0tblsxXSk8LjAxP01hdGguYWJzKHJbMV0teVsxXSk8LjAxJiYoeVswXS1yWzBdKSooblswXS15WzBdKT49MCYmKG49eSxzPWwpOmkubG9nKFwiZW5kcHQgdG8gbmV3ZW5kcHQgaXMgbm90IHZlcnQuIG9yIGhvcnouXCIscixuLHkpfWlmKHI9bixzPj0wKWJyZWFrO2grPVwiTFwiK259aWYocz09PXQuZWRnZXBhdGhzLmxlbmd0aCl7aS5sb2coXCJ1bmNsb3NlZCBwZXJpbWV0ZXIgcGF0aFwiKTticmVha31mPXMsKGQ9LTE9PT1wLmluZGV4T2YoZikpJiYoZj1wWzBdLGgrPVwiWlwiKX1mb3IoZj0wO2Y8dC5wYXRocy5sZW5ndGg7ZisrKWgrPWEuc21vb3RoY2xvc2VkKHQucGF0aHNbZl0sdC5zbW9vdGhpbmcpO3JldHVybiBofWZ1bmN0aW9uIHkodCxlLHIsbil7dmFyIGE9ZS53aWR0aC8yLG89ZS5oZWlnaHQvMixzPXQueCxsPXQueSxjPXQudGhldGEsdT1NYXRoLmNvcyhjKSphLGg9TWF0aC5zaW4oYykqYSxmPShzPm4uY2VudGVyP24ucmlnaHQtczpzLW4ubGVmdCkvKHUrTWF0aC5hYnMoTWF0aC5zaW4oYykqbykpLHA9KGw+bi5taWRkbGU/bi5ib3R0b20tbDpsLW4udG9wKS8oTWF0aC5hYnMoaCkrTWF0aC5jb3MoYykqbyk7aWYoZjwxfHxwPDEpcmV0dXJuIDEvMDt2YXIgZD12LkVER0VDT1NUKigxLyhmLTEpKzEvKHAtMSkpO2QrPXYuQU5HTEVDT1NUKmMqYztmb3IodmFyIGc9cy11LG09bC1oLHk9cyt1LHg9bCtoLGI9MDtiPHIubGVuZ3RoO2IrKyl7dmFyIF89cltiXSx3PU1hdGguY29zKF8udGhldGEpKl8ud2lkdGgvMixrPU1hdGguc2luKF8udGhldGEpKl8ud2lkdGgvMixBPTIqaS5zZWdtZW50RGlzdGFuY2UoZyxtLHkseCxfLngtdyxfLnktayxfLngrdyxfLnkraykvKGUuaGVpZ2h0K18uaGVpZ2h0KSxUPV8ubGV2ZWw9PT1lLmxldmVsLE09VD92LlNBTUVMRVZFTERJU1RBTkNFOjE7aWYoQTw9TSlyZXR1cm4gMS8wO2QrPXYuTkVJR0hCT1JDT1NUKihUP3YuU0FNRUxFVkVMRkFDVE9SOjEpLyhBLU0pfXJldHVybiBkfXIucGxvdD1mdW5jdGlvbih0LGUsbyxzKXt2YXIgbD1lLnhheGlzLHY9ZS55YXhpcztpLm1ha2VUcmFjZUdyb3VwcyhzLG8sXCJjb250b3VyXCIpLmVhY2goZnVuY3Rpb24obyl7dmFyIHM9bi5zZWxlY3QodGhpcykseT1vWzBdLHg9eS50cmFjZSxiPXkueCxfPXkueSx3PXguY29udG91cnMsaz1mKHcsZSx5KSxBPWkuZW5zdXJlU2luZ2xlKHMsXCJnXCIsXCJoZWF0bWFwY29sb3JpbmdcIiksVD1bXTtcImhlYXRtYXBcIj09PXcuY29sb3JpbmcmJih4LnphdXRvJiYhMT09PXguYXV0b2NvbnRvdXImJih4Ll9pbnB1dC56bWluPXguem1pbj13LnN0YXJ0LXcuc2l6ZS8yLHguX2lucHV0LnptYXg9eC56bWF4PXguem1pbitrLmxlbmd0aCp3LnNpemUpLFQ9W29dKSxjKHQsZSxULEEpLHUoayksaChrKTt2YXIgTT1sLmMycChiWzBdLCEwKSxTPWwuYzJwKGJbYi5sZW5ndGgtMV0sITApLEU9di5jMnAoX1swXSwhMCksQz12LmMycChfW18ubGVuZ3RoLTFdLCEwKSxMPVtbTSxDXSxbUyxDXSxbUyxFXSxbTSxFXV0sej1rO1wiY29uc3RyYWludFwiPT09dy50eXBlJiYoej1wKGssdy5fb3BlcmF0aW9uKSxkKHosdy5fb3BlcmF0aW9uLEwseCkpLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1pLmVuc3VyZVNpbmdsZSh0LFwiZ1wiLFwiY29udG91cmJnXCIpLnNlbGVjdEFsbChcInBhdGhcIikuZGF0YShcImZpbGxcIj09PXIuY29sb3Jpbmc/WzBdOltdKTtuLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKSxuLmV4aXQoKS5yZW1vdmUoKSxuLmF0dHIoXCJkXCIsXCJNXCIrZS5qb2luKFwiTFwiKStcIlpcIikuc3R5bGUoXCJzdHJva2VcIixcIm5vbmVcIil9KHMsTCx3KSxmdW5jdGlvbih0LGUscixhKXt2YXIgbz1pLmVuc3VyZVNpbmdsZSh0LFwiZ1wiLFwiY29udG91cmZpbGxcIikuc2VsZWN0QWxsKFwicGF0aFwiKS5kYXRhKFwiZmlsbFwiPT09YS5jb2xvcmluZ3x8XCJjb25zdHJhaW50XCI9PT1hLnR5cGUmJlwiPVwiIT09YS5fb3BlcmF0aW9uP2U6W10pO28uZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLG8uZXhpdCgpLnJlbW92ZSgpLG8uZWFjaChmdW5jdGlvbih0KXt2YXIgZT1tKHQscik7ZT9uLnNlbGVjdCh0aGlzKS5hdHRyKFwiZFwiLGUpLnN0eWxlKFwic3Ryb2tlXCIsXCJub25lXCIpOm4uc2VsZWN0KHRoaXMpLnJlbW92ZSgpfSl9KHMseixMLHcpLGZ1bmN0aW9uKHQsZSxvLHMsbCxjKXt2YXIgdT1pLmVuc3VyZVNpbmdsZSh0LFwiZ1wiLFwiY29udG91cmxpbmVzXCIpLGg9ITEhPT1sLnNob3dsaW5lcyxmPWwuc2hvd2xhYmVscyxwPWgmJmYsZD1yLmNyZWF0ZUxpbmVzKHUsaHx8ZixlKSx2PXIuY3JlYXRlTGluZUNsaXAodSxwLG8scy50cmFjZS51aWQpLG09dC5zZWxlY3RBbGwoXCJnLmNvbnRvdXJsYWJlbHNcIikuZGF0YShmP1swXTpbXSk7aWYobS5leGl0KCkucmVtb3ZlKCksbS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcImNvbnRvdXJsYWJlbHNcIiwhMCksZil7dmFyIHk9W10seD1bXTtpLmNsZWFyTG9jYXRpb25DYWNoZSgpO3ZhciBiPXIubGFiZWxGb3JtYXR0ZXIobCxzLnQuY2Isby5fZnVsbExheW91dCksXz1hLnRlc3Rlci5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJkYXRhLW5vdGV4XCIsMSkuY2FsbChhLmZvbnQsbC5sYWJlbGZvbnQpLHc9ZVswXS54YXhpcyxrPWVbMF0ueWF4aXMsQT13Ll9sZW5ndGgsVD1rLl9sZW5ndGgsTT13LnJhbmdlLFM9ay5yYW5nZSxFPU1hdGgubWF4KGNbMF1bMF0sMCksQz1NYXRoLm1pbihjWzJdWzBdLEEpLEw9TWF0aC5tYXgoY1swXVsxXSwwKSx6PU1hdGgubWluKGNbMl1bMV0sVCksTz17fTtNWzBdPE1bMV0/KE8ubGVmdD1FLE8ucmlnaHQ9Qyk6KE8ubGVmdD1DLE8ucmlnaHQ9RSksU1swXTxTWzFdPyhPLnRvcD1MLE8uYm90dG9tPXopOihPLnRvcD16LE8uYm90dG9tPUwpLE8ubWlkZGxlPShPLnRvcCtPLmJvdHRvbSkvMixPLmNlbnRlcj0oTy5sZWZ0K08ucmlnaHQpLzIseS5wdXNoKFtbTy5sZWZ0LE8udG9wXSxbTy5yaWdodCxPLnRvcF0sW08ucmlnaHQsTy5ib3R0b21dLFtPLmxlZnQsTy5ib3R0b21dXSk7dmFyIEk9TWF0aC5zcXJ0KEEqQStUKlQpLEQ9Zy5MQUJFTERJU1RBTkNFKkkvTWF0aC5tYXgoMSxlLmxlbmd0aC9nLkxBQkVMSU5DUkVBU0UpO2QuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1yLmNhbGNUZXh0T3B0cyh0LmxldmVsLGIsXyxvKTtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoXCJwYXRoXCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1pLmdldFZpc2libGVTZWdtZW50KHRoaXMsTyxlLmhlaWdodC8yKTtpZih0JiYhKHQubGVuPChlLndpZHRoK2UuaGVpZ2h0KSpnLkxBQkVMTUlOKSlmb3IodmFyIG49TWF0aC5taW4oTWF0aC5jZWlsKHQubGVuL0QpLGcuTEFCRUxNQVgpLGE9MDthPG47YSsrKXt2YXIgbz1yLmZpbmRCZXN0VGV4dExvY2F0aW9uKHRoaXMsdCxlLHgsTyk7aWYoIW8pYnJlYWs7ci5hZGRMYWJlbERhdGEobyxlLHgseSl9fSl9KSxfLnJlbW92ZSgpLHIuZHJhd0xhYmVscyhtLHgsbyx2LHA/eTpudWxsKX1mJiYhaCYmZC5yZW1vdmUoKX0ocyxrLHQseSx3LEwpLGZ1bmN0aW9uKHQsZSxyLG4sbyl7dmFyIHM9ci5fZnVsbExheW91dC5fY2xpcHMsbD1cImNsaXBcIituLnRyYWNlLnVpZCxjPXMuc2VsZWN0QWxsKFwiI1wiK2wpLmRhdGEobi50cmFjZS5jb25uZWN0Z2Fwcz9bXTpbMF0pO2lmKGMuZW50ZXIoKS5hcHBlbmQoXCJjbGlwUGF0aFwiKS5jbGFzc2VkKFwiY29udG91cmNsaXBcIiwhMCkuYXR0cihcImlkXCIsbCksYy5leGl0KCkucmVtb3ZlKCksITE9PT1uLnRyYWNlLmNvbm5lY3RnYXBzKXt2YXIgZj17bGV2ZWw6LjksY3Jvc3NpbmdzOnt9LHN0YXJ0czpbXSxlZGdlcGF0aHM6W10scGF0aHM6W10seGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLHg6bi54LHk6bi55LHo6ZnVuY3Rpb24odCl7dmFyIGUscixuPXQudHJhY2UuX2VtcHR5cG9pbnRzLGk9W10sYT10LnoubGVuZ3RoLG89dC56WzBdLmxlbmd0aCxzPVtdO2ZvcihlPTA7ZTxvO2UrKylzLnB1c2goMSk7Zm9yKGU9MDtlPGE7ZSsrKWkucHVzaChzLnNsaWNlKCkpO2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspcj1uW2VdLGlbclswXV1bclsxXV09MDtyZXR1cm4gdC56bWFzaz1pLGl9KG4pLHNtb290aGluZzowfTt1KFtmXSksaChbZl0pO3ZhciBwPW0oZixvKSxkPWkuZW5zdXJlU2luZ2xlKGMsXCJwYXRoXCIsXCJcIik7ZC5hdHRyKFwiZFwiLHApfWVsc2UgbD1udWxsO2Euc2V0Q2xpcFVybCh0LGwscil9KHMsZSx0LHksTCl9KX0sci5jcmVhdGVMaW5lcz1mdW5jdGlvbih0LGUscil7dmFyIG49clswXS5zbW9vdGhpbmcsaT10LnNlbGVjdEFsbChcImcuY29udG91cmxldmVsXCIpLmRhdGEoZT9yOltdKTtpZihpLmV4aXQoKS5yZW1vdmUoKSxpLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiY29udG91cmxldmVsXCIsITApLGUpe3ZhciBvPWkuc2VsZWN0QWxsKFwicGF0aC5vcGVubGluZVwiKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBlZGdlcGF0aHN8fHQuZWRnZXBhdGhzfSk7by5leGl0KCkucmVtb3ZlKCksby5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChcIm9wZW5saW5lXCIsITApLG8uYXR0cihcImRcIixmdW5jdGlvbih0KXtyZXR1cm4gYS5zbW9vdGhvcGVuKHQsbil9KS5zdHlsZShcInN0cm9rZS1taXRlcmxpbWl0XCIsMSkuc3R5bGUoXCJ2ZWN0b3ItZWZmZWN0XCIsXCJub24tc2NhbGluZy1zdHJva2VcIik7dmFyIHM9aS5zZWxlY3RBbGwoXCJwYXRoLmNsb3NlZGxpbmVcIikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5wcGF0aHN8fHQucGF0aHN9KTtzLmV4aXQoKS5yZW1vdmUoKSxzLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5jbGFzc2VkKFwiY2xvc2VkbGluZVwiLCEwKSxzLmF0dHIoXCJkXCIsZnVuY3Rpb24odCl7cmV0dXJuIGEuc21vb3RoY2xvc2VkKHQsbil9KS5zdHlsZShcInN0cm9rZS1taXRlcmxpbWl0XCIsMSkuc3R5bGUoXCJ2ZWN0b3ItZWZmZWN0XCIsXCJub24tc2NhbGluZy1zdHJva2VcIil9cmV0dXJuIGl9LHIuY3JlYXRlTGluZUNsaXA9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZT9cImNsaXBsaW5lXCIrbjpudWxsLG89ci5fZnVsbExheW91dC5fY2xpcHMuc2VsZWN0QWxsKFwiI1wiK2kpLmRhdGEoZT9bMF06W10pO3JldHVybiBvLmV4aXQoKS5yZW1vdmUoKSxvLmVudGVyKCkuYXBwZW5kKFwiY2xpcFBhdGhcIikuY2xhc3NlZChcImNvbnRvdXJsaW5lY2xpcFwiLCEwKS5hdHRyKFwiaWRcIixpKSxhLnNldENsaXBVcmwodCxpLHIpLG99LHIubGFiZWxGb3JtYXR0ZXI9ZnVuY3Rpb24odCxlLHIpe2lmKHQubGFiZWxmb3JtYXQpcmV0dXJuIHIuX2QzbG9jYWxlLm51bWJlckZvcm1hdCh0LmxhYmVsZm9ybWF0KTt2YXIgbjtpZihlKW49ZS5heGlzO2Vsc2V7aWYobj17dHlwZTpcImxpbmVhclwiLF9pZDpcInljb250b3VyXCIsc2hvd2V4cG9uZW50OlwiYWxsXCIsZXhwb25lbnRmb3JtYXQ6XCJCXCJ9LFwiY29uc3RyYWludFwiPT09dC50eXBlKXt2YXIgaT10LnZhbHVlO0FycmF5LmlzQXJyYXkoaSk/bi5yYW5nZT1baVswXSxpW2kubGVuZ3RoLTFdXTpuLnJhbmdlPVtpLGldfWVsc2Ugbi5yYW5nZT1bdC5zdGFydCx0LmVuZF0sbi5udGlja3M9KHQuZW5kLXQuc3RhcnQpL3Quc2l6ZTtuLnJhbmdlWzBdPT09bi5yYW5nZVsxXSYmKG4ucmFuZ2VbMV0rPW4ucmFuZ2VbMF18fDEpLG4ubnRpY2tzfHwobi5udGlja3M9MWUzKSxsKG4scikscy5wcmVwVGlja3Mobiksbi5fdG1pbj1udWxsLG4uX3RtYXg9bnVsbH1yZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHMudGlja1RleHQobix0KS50ZXh0fX0sci5jYWxjVGV4dE9wdHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZSh0KTtyLnRleHQoaSkuY2FsbChvLmNvbnZlcnRUb1RzcGFucyxuKTt2YXIgcz1hLmJCb3goci5ub2RlKCksITApO3JldHVybnt0ZXh0Omksd2lkdGg6cy53aWR0aCxoZWlnaHQ6cy5oZWlnaHQsbGV2ZWw6dCxkeToocy50b3Arcy5ib3R0b20pLzJ9fSxyLmZpbmRCZXN0VGV4dExvY2F0aW9uPWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIG8scyxsLGMsdSxoPXIud2lkdGg7ZS5pc0Nsb3NlZD8ocz1lLmxlbi92LklOSVRJQUxTRUFSQ0hQT0lOVFMsbz1lLm1pbitzLzIsbD1lLm1heCk6KHM9KGUubGVuLWgpLyh2LklOSVRJQUxTRUFSQ0hQT0lOVFMrMSksbz1lLm1pbitzK2gvMixsPWUubWF4LShzK2gpLzIpO2Zvcih2YXIgZj0xLzAscD0wO3A8di5JVEVSQVRJT05TO3ArKyl7Zm9yKHZhciBkPW87ZDxsO2QrPXMpe3ZhciBnPWkuZ2V0VGV4dExvY2F0aW9uKHQsZS50b3RhbCxkLGgpLG09eShnLHIsbixhKTttPGYmJihmPW0sdT1nLGM9ZCl9aWYoZj4yKnYuTUFYQ09TVClicmVhaztwJiYocy89MiksbD0obz1jLXMvMikrMS41KnN9aWYoZjw9di5NQVhDT1NUKXJldHVybiB1fSxyLmFkZExhYmVsRGF0YT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lLndpZHRoLzIsYT1lLmhlaWdodC8yLG89dC54LHM9dC55LGw9dC50aGV0YSxjPU1hdGguc2luKGwpLHU9TWF0aC5jb3MobCksaD1pKnUsZj1hKmMscD1pKmMsZD0tYSp1LGc9W1tvLWgtZixzLXAtZF0sW28raC1mLHMrcC1kXSxbbytoK2YscytwK2RdLFtvLWgrZixzLXArZF1dO3IucHVzaCh7dGV4dDplLnRleHQseDpvLHk6cyxkeTplLmR5LHRoZXRhOmwsbGV2ZWw6ZS5sZXZlbCx3aWR0aDplLndpZHRoLGhlaWdodDplLmhlaWdodH0pLG4ucHVzaChnKX0sci5kcmF3TGFiZWxzPWZ1bmN0aW9uKHQsZSxyLGEscyl7dmFyIGw9dC5zZWxlY3RBbGwoXCJ0ZXh0XCIpLmRhdGEoZSxmdW5jdGlvbih0KXtyZXR1cm4gdC50ZXh0K1wiLFwiK3QueCtcIixcIit0LnkrXCIsXCIrdC50aGV0YX0pO2lmKGwuZXhpdCgpLnJlbW92ZSgpLGwuZW50ZXIoKS5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoe1wiZGF0YS1ub3RleFwiOjEsXCJ0ZXh0LWFuY2hvclwiOlwibWlkZGxlXCJ9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQueCtNYXRoLnNpbih0LnRoZXRhKSp0LmR5LGk9dC55LU1hdGguY29zKHQudGhldGEpKnQuZHk7bi5zZWxlY3QodGhpcykudGV4dCh0LnRleHQpLmF0dHIoe3g6ZSx5OmksdHJhbnNmb3JtOlwicm90YXRlKFwiKzE4MCp0LnRoZXRhL01hdGguUEkrXCIgXCIrZStcIiBcIitpK1wiKVwifSkuY2FsbChvLmNvbnZlcnRUb1RzcGFucyxyKX0pLHMpe2Zvcih2YXIgYz1cIlwiLHU9MDt1PHMubGVuZ3RoO3UrKyljKz1cIk1cIitzW3VdLmpvaW4oXCJMXCIpK1wiWlwiO2kuZW5zdXJlU2luZ2xlKGEsXCJwYXRoXCIsXCJcIikuYXR0cihcImRcIixjKX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIjo3MjUsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZXRfY29udmVydFwiOjc2NyxcIi4uL2hlYXRtYXAvcGxvdFwiOjk1OSxcIi4vY2xvc2VfYm91bmRhcmllc1wiOjkyMSxcIi4vY29uc3RhbnRzXCI6OTIzLFwiLi9jb252ZXJ0X3RvX2NvbnN0cmFpbnRzXCI6OTI3LFwiLi9lbXB0eV9wYXRoaW5mb1wiOjkyOSxcIi4vZmluZF9hbGxfcGF0aHNcIjo5MzEsXCIuL21ha2VfY3Jvc3NpbmdzXCI6OTM2LGQzOjE1NX1dLDkzODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxpPXQoXCIuLi8uLi9saWJcIik7ZnVuY3Rpb24gYSh0LGUscil7dmFyIGk9e3R5cGU6XCJsaW5lYXJcIixyYW5nZTpbdCxlXX07cmV0dXJuIG4uYXV0b1RpY2tzKGksKGUtdCkvKHJ8fDE1KSksaX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5jb250b3VycztpZih0LmF1dG9jb250b3VyKXt2YXIgcj10LnptaW4sbz10LnptYXg7dm9pZCAwIT09ciYmdm9pZCAwIT09b3x8KHI9aS5hZ2dOdW1zKE1hdGgubWluLG51bGwsdC5feiksbz1pLmFnZ051bXMoTWF0aC5tYXgsbnVsbCx0Ll96KSk7dmFyIHM9YShyLG8sdC5uY29udG91cnMpO2Uuc2l6ZT1zLmR0aWNrLGUuc3RhcnQ9bi50aWNrRmlyc3Qocykscy5yYW5nZS5yZXZlcnNlKCksZS5lbmQ9bi50aWNrRmlyc3QocyksZS5zdGFydD09PXImJihlLnN0YXJ0Kz1lLnNpemUpLGUuZW5kPT09byYmKGUuZW5kLT1lLnNpemUpLGUuc3RhcnQ+ZS5lbmQmJihlLnN0YXJ0PWUuZW5kPShlLnN0YXJ0K2UuZW5kKS8yKSx0Ll9pbnB1dC5jb250b3Vyc3x8KHQuX2lucHV0LmNvbnRvdXJzPXt9KSxpLmV4dGVuZEZsYXQodC5faW5wdXQuY29udG91cnMse3N0YXJ0OmUuc3RhcnQsZW5kOmUuZW5kLHNpemU6ZS5zaXplfSksdC5faW5wdXQuYXV0b2NvbnRvdXI9ITB9ZWxzZSBpZihcImNvbnN0cmFpbnRcIiE9PWUudHlwZSl7dmFyIGwsYz1lLnN0YXJ0LHU9ZS5lbmQsaD10Ll9pbnB1dC5jb250b3VycztpZihjPnUmJihlLnN0YXJ0PWguc3RhcnQ9dSx1PWUuZW5kPWguZW5kPWMsYz1lLnN0YXJ0KSwhKGUuc2l6ZT4wKSlsPWM9PT11PzE6YShjLHUsdC5uY29udG91cnMpLmR0aWNrLGguc2l6ZT1lLnNpemU9bH19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OX1dLDkzOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksYT10KFwiLi4vaGVhdG1hcC9zdHlsZVwiKSxvPXQoXCIuL21ha2VfY29sb3JfbWFwXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoXCJnLmNvbnRvdXJcIik7ZS5zdHlsZShcIm9wYWNpdHlcIixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSksZS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9dFswXS50cmFjZSxhPXIuY29udG91cnMscz1yLmxpbmUsbD1hLnNpemV8fDEsYz1hLnN0YXJ0LHU9XCJjb25zdHJhaW50XCI9PT1hLnR5cGUsaD0hdSYmXCJsaW5lc1wiPT09YS5jb2xvcmluZyxmPSF1JiZcImZpbGxcIj09PWEuY29sb3JpbmcscD1ofHxmP28ocik6bnVsbDtlLnNlbGVjdEFsbChcImcuY29udG91cmxldmVsXCIpLmVhY2goZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKFwicGF0aFwiKS5jYWxsKGkubGluZUdyb3VwU3R5bGUscy53aWR0aCxoP3AodC5sZXZlbCk6cy5jb2xvcixzLmRhc2gpfSk7dmFyIGQ9YS5sYWJlbGZvbnQ7aWYoZS5zZWxlY3RBbGwoXCJnLmNvbnRvdXJsYWJlbHMgdGV4dFwiKS5lYWNoKGZ1bmN0aW9uKHQpe2kuZm9udChuLnNlbGVjdCh0aGlzKSx7ZmFtaWx5OmQuZmFtaWx5LHNpemU6ZC5zaXplLGNvbG9yOmQuY29sb3J8fChoP3AodC5sZXZlbCk6cy5jb2xvcil9KX0pLHUpZS5zZWxlY3RBbGwoXCJnLmNvbnRvdXJmaWxsIHBhdGhcIikuc3R5bGUoXCJmaWxsXCIsci5maWxsY29sb3IpO2Vsc2UgaWYoZil7dmFyIGc7ZS5zZWxlY3RBbGwoXCJnLmNvbnRvdXJmaWxsIHBhdGhcIikuc3R5bGUoXCJmaWxsXCIsZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PWcmJihnPXQubGV2ZWwpLHAodC5sZXZlbCsuNSpsKX0pLHZvaWQgMD09PWcmJihnPWMpLGUuc2VsZWN0QWxsKFwiZy5jb250b3VyYmcgcGF0aFwiKS5zdHlsZShcImZpbGxcIixwKGctLjUqbCkpfX0pLGEodCl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi9oZWF0bWFwL3N0eWxlXCI6OTYwLFwiLi9tYWtlX2NvbG9yX21hcFwiOjkzNSxkMzoxNTV9XSw5NDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCIpLGk9dChcIi4vbGFiZWxfZGVmYXVsdHNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyl7dmFyIHMsbD1yKFwiY29udG91cnMuY29sb3JpbmdcIiksYz1cIlwiO1wiZmlsbFwiPT09bCYmKHM9cihcImNvbnRvdXJzLnNob3dsaW5lc1wiKSksITEhPT1zJiYoXCJsaW5lc1wiIT09bCYmKGM9cihcImxpbmUuY29sb3JcIixcIiMwMDBcIikpLHIoXCJsaW5lLndpZHRoXCIsLjUpLHIoXCJsaW5lLmRhc2hcIikpLFwibm9uZVwiIT09bCYmKCEwIT09dC5zaG93bGVnZW5kJiYoZS5zaG93bGVnZW5kPSExKSxlLl9kZmx0U2hvd0xlZ2VuZD0hMSxuKHQsZSxhLHIse3ByZWZpeDpcIlwiLGNMZXR0ZXI6XCJ6XCJ9KSkscihcImxpbmUuc21vb3RoaW5nXCIpLGkocixhLGMsbyl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIjo1ODgsXCIuL2xhYmVsX2RlZmF1bHRzXCI6OTM0fV0sOTQxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2hlYXRtYXAvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi9jb250b3VyL2F0dHJpYnV0ZXNcIiksYT1pLmNvbnRvdXJzLG89dChcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxsPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIiksYz10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LHU9by5saW5lO2UuZXhwb3J0cz1jKHtjYXJwZXQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcImNhbGNcIn0sejpuLnosYTpuLngsYTA6bi54MCxkYTpuLmR4LGI6bi55LGIwOm4ueTAsZGI6bi5keSx0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsdHJhbnNwb3NlOm4udHJhbnNwb3NlLGF0eXBlOm4ueHR5cGUsYnR5cGU6bi55dHlwZSxmaWxsY29sb3I6aS5maWxsY29sb3IsYXV0b2NvbnRvdXI6aS5hdXRvY29udG91cixuY29udG91cnM6aS5uY29udG91cnMsY29udG91cnM6e3R5cGU6YS50eXBlLHN0YXJ0OmEuc3RhcnQsZW5kOmEuZW5kLHNpemU6YS5zaXplLGNvbG9yaW5nOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJmaWxsXCIsXCJsaW5lc1wiLFwibm9uZVwiXSxkZmx0OlwiZmlsbFwiLGVkaXRUeXBlOlwiY2FsY1wifSxzaG93bGluZXM6YS5zaG93bGluZXMsc2hvd2xhYmVsczphLnNob3dsYWJlbHMsbGFiZWxmb250OmEubGFiZWxmb250LGxhYmVsZm9ybWF0OmEubGFiZWxmb3JtYXQsb3BlcmF0aW9uOmEub3BlcmF0aW9uLHZhbHVlOmEudmFsdWUsZWRpdFR5cGU6XCJjYWxjXCIsaW1wbGllZEVkaXRzOnthdXRvY29udG91cjohMX19LGxpbmU6e2NvbG9yOmMoe30sdS5jb2xvcix7fSksd2lkdGg6dS53aWR0aCxkYXNoOnUuZGFzaCxzbW9vdGhpbmc6Yyh7fSx1LnNtb290aGluZyx7fSksZWRpdFR5cGU6XCJwbG90XCJ9LHRyYW5zZm9ybXM6dm9pZCAwfSxzKFwiXCIse2NMZXR0ZXI6XCJ6XCIsYXV0b0NvbG9yRGZsdDohMX0pLHtjb2xvcmJhcjpsfSl9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uL2NvbnRvdXIvYXR0cmlidXRlc1wiOjkxOSxcIi4uL2hlYXRtYXAvYXR0cmlidXRlc1wiOjk0OCxcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiOjEwNTJ9XSw5NDI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uL2hlYXRtYXAvY29udmVydF9jb2x1bW5feHl6XCIpLG89dChcIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXlcIikscz10KFwiLi4vaGVhdG1hcC9pbnRlcnAyZFwiKSxsPXQoXCIuLi9oZWF0bWFwL2ZpbmRfZW1wdGllc1wiKSxjPXQoXCIuLi9oZWF0bWFwL21ha2VfYm91bmRfYXJyYXlcIiksdT10KFwiLi9kZWZhdWx0c1wiKSxoPXQoXCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkXCIpLGY9dChcIi4uL2NvbnRvdXIvc2V0X2NvbnRvdXJzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUuX2NhcnBldFRyYWNlPWgodCxlKTtpZihyJiZyLnZpc2libGUmJlwibGVnZW5kb25seVwiIT09ci52aXNpYmxlKXtpZighZS5hfHwhZS5iKXt2YXIgcD10LmRhdGFbci5pbmRleF0sZD10LmRhdGFbZS5pbmRleF07ZC5hfHwoZC5hPXAuYSksZC5ifHwoZC5iPXAuYiksdShkLGUsZS5fZGVmYXVsdENvbG9yLHQuX2Z1bGxMYXlvdXQpfXZhciBnPWZ1bmN0aW9uKHQsZSl7dmFyIHIsdSxoLGYscCxkLGcsdj1lLl9jYXJwZXRUcmFjZSxtPXYuYWF4aXMseT12LmJheGlzO20uX21pbkR0aWNrPTAseS5fbWluRHRpY2s9MCxpLmlzQXJyYXkxRChlLnopJiZhKGUsbSx5LFwiYVwiLFwiYlwiLFtcInpcIl0pO3I9ZS5fYT1lLl9hfHxlLmEsZj1lLl9iPWUuX2J8fGUuYixyPXI/bS5tYWtlQ2FsY2RhdGEoZSxcIl9hXCIpOltdLGY9Zj95Lm1ha2VDYWxjZGF0YShlLFwiX2JcIik6W10sdT1lLmEwfHwwLGg9ZS5kYXx8MSxwPWUuYjB8fDAsZD1lLmRifHwxLGc9ZS5fej1vKGUuX3p8fGUueixlLnRyYW5zcG9zZSksZS5fZW1wdHlwb2ludHM9bChnKSxzKGcsZS5fZW1wdHlwb2ludHMpO3ZhciB4PWkubWF4Um93TGVuZ3RoKGcpLGI9XCJzY2FsZWRcIj09PWUueHR5cGU/XCJcIjpyLF89YyhlLGIsdSxoLHgsbSksdz1cInNjYWxlZFwiPT09ZS55dHlwZT9cIlwiOmYsaz1jKGUsdyxwLGQsZy5sZW5ndGgseSksQT17YTpfLGI6ayx6Omd9O1wibGV2ZWxzXCI9PT1lLmNvbnRvdXJzLnR5cGUmJlwibm9uZVwiIT09ZS5jb250b3Vycy5jb2xvcmluZyYmbih0LGUse3ZhbHM6Zyxjb250YWluZXJTdHI6XCJcIixjTGV0dGVyOlwielwifSk7cmV0dXJuW0FdfSh0LGUpO3JldHVybiBmKGUpLGd9fX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIjo1ODYsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkXCI6ODk3LFwiLi4vY29udG91ci9zZXRfY29udG91cnNcIjo5MzgsXCIuLi9oZWF0bWFwL2NsZWFuXzJkX2FycmF5XCI6OTUwLFwiLi4vaGVhdG1hcC9jb252ZXJ0X2NvbHVtbl94eXpcIjo5NTIsXCIuLi9oZWF0bWFwL2ZpbmRfZW1wdGllc1wiOjk1NCxcIi4uL2hlYXRtYXAvaW50ZXJwMmRcIjo5NTcsXCIuLi9oZWF0bWFwL21ha2VfYm91bmRfYXJyYXlcIjo5NTgsXCIuL2RlZmF1bHRzXCI6OTQzfV0sOTQzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi9oZWF0bWFwL3h5el9kZWZhdWx0c1wiKSxhPXQoXCIuL2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vY29udG91ci9jb25zdHJhaW50X2RlZmF1bHRzXCIpLHM9dChcIi4uL2NvbnRvdXIvY29udG91cnNfZGVmYXVsdHNcIiksbD10KFwiLi4vY29udG91ci9zdHlsZV9kZWZhdWx0c1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7ZnVuY3Rpb24gdShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfWlmKHUoXCJjYXJwZXRcIiksdC5hJiZ0LmIpe2lmKCFpKHQsZSx1LGMsXCJhXCIsXCJiXCIpKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7dShcInRleHRcIiksXCJjb25zdHJhaW50XCI9PT11KFwiY29udG91cnMudHlwZVwiKT9vKHQsZSx1LGMscix7aGFzSG92ZXI6ITF9KToocyh0LGUsdSxmdW5jdGlvbihyKXtyZXR1cm4gbi5jb2VyY2UyKHQsZSxhLHIpfSksbCh0LGUsdSxjLHtoYXNIb3ZlcjohMX0pKX1lbHNlIGUuX2RlZmF1bHRDb2xvcj1yLGUuX2xlbmd0aD1udWxsfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vY29udG91ci9jb25zdHJhaW50X2RlZmF1bHRzXCI6OTI0LFwiLi4vY29udG91ci9jb250b3Vyc19kZWZhdWx0c1wiOjkyNixcIi4uL2NvbnRvdXIvc3R5bGVfZGVmYXVsdHNcIjo5NDAsXCIuLi9oZWF0bWFwL3h5el9kZWZhdWx0c1wiOjk2MixcIi4vYXR0cmlidXRlc1wiOjk0MX1dLDk0NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIiksbi5jb2xvcmJhcj10KFwiLi4vY29udG91ci9jb2xvcmJhclwiKSxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLnBsb3Q9dChcIi4vcGxvdFwiKSxuLnN0eWxlPXQoXCIuLi9jb250b3VyL3N0eWxlXCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwiY29udG91cmNhcnBldFwiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiKSxuLmNhdGVnb3JpZXM9W1wiY2FydGVzaWFuXCIsXCJzdmdcIixcImNhcnBldFwiLFwiY29udG91clwiLFwic3ltYm9sc1wiLFwic2hvd0xlZ2VuZFwiLFwiaGFzTGluZXNcIixcImNhcnBldERlcGVuZGVudFwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiOjc2MCxcIi4uL2NvbnRvdXIvY29sb3JiYXJcIjo5MjIsXCIuLi9jb250b3VyL3N0eWxlXCI6OTM5LFwiLi9hdHRyaWJ1dGVzXCI6OTQxLFwiLi9jYWxjXCI6OTQyLFwiLi9kZWZhdWx0c1wiOjk0MyxcIi4vcGxvdFwiOjk0N31dLDk0NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksaT10KFwiLi4vY2FycGV0L2F4aXNfYWxpZ25lZF9saW5lXCIpLGE9dChcIi4uLy4uL2xpYlwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzLGwsYyx1KXt2YXIgaCxmLHAsZCxnLHYsbSx5PVwiXCIseD1lLmVkZ2VwYXRocy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pLGI9ITAsXz0xZS00Kk1hdGguYWJzKHJbMF1bMF0tclsyXVswXSksdz0xZS00Kk1hdGguYWJzKHJbMF1bMV0tclsyXVsxXSk7ZnVuY3Rpb24gayh0KXtyZXR1cm4gTWF0aC5hYnModFsxXS1yWzBdWzFdKTx3fWZ1bmN0aW9uIEEodCl7cmV0dXJuIE1hdGguYWJzKHRbMV0tclsyXVsxXSk8d31mdW5jdGlvbiBUKHQpe3JldHVybiBNYXRoLmFicyh0WzBdLXJbMF1bMF0pPF99ZnVuY3Rpb24gTSh0KXtyZXR1cm4gTWF0aC5hYnModFswXS1yWzJdWzBdKTxffWZ1bmN0aW9uIFModCxlKXt2YXIgcixuLGEsbyxoPVwiXCI7Zm9yKGsodCkmJiFNKHQpfHxBKHQpJiYhVCh0KT8obz1zLmFheGlzLGE9aShzLGwsW3RbMF0sZVswXV0sLjUqKHRbMV0rZVsxXSkpKToobz1zLmJheGlzLGE9aShzLGwsLjUqKHRbMF0rZVswXSksW3RbMV0sZVsxXV0pKSxyPTE7cjxhLmxlbmd0aDtyKyspZm9yKGgrPW8uc21vb3RoaW5nP1wiQ1wiOlwiTFwiLG49MDtuPGFbcl0ubGVuZ3RoO24rKyl7dmFyIGY9YVtyXVtuXTtoKz1bYy5jMnAoZlswXSksdS5jMnAoZlsxXSldK1wiIFwifXJldHVybiBofWZvcihoPTAsZj1udWxsO3gubGVuZ3RoOyl7dmFyIEU9ZS5lZGdlcGF0aHNbaF1bMF07Zm9yKGYmJih5Kz1TKGYsRSkpLG09bi5zbW9vdGhvcGVuKGUuZWRnZXBhdGhzW2hdLm1hcChvKSxlLnNtb290aGluZykseSs9Yj9tOm0ucmVwbGFjZSgvXk0vLFwiTFwiKSx4LnNwbGljZSh4LmluZGV4T2YoaCksMSksZj1lLmVkZ2VwYXRoc1toXVtlLmVkZ2VwYXRoc1toXS5sZW5ndGgtMV0sZz0tMSxkPTA7ZDw0O2QrKyl7aWYoIWYpe2EubG9nKFwiTWlzc2luZyBlbmQ/XCIsaCxlKTticmVha31mb3IoayhmKSYmIU0oZik/cD1yWzFdOlQoZik/cD1yWzBdOkEoZik/cD1yWzNdOk0oZikmJihwPXJbMl0pLHY9MDt2PGUuZWRnZXBhdGhzLmxlbmd0aDt2Kyspe3ZhciBDPWUuZWRnZXBhdGhzW3ZdWzBdO01hdGguYWJzKGZbMF0tcFswXSk8Xz9NYXRoLmFicyhmWzBdLUNbMF0pPF8mJihDWzFdLWZbMV0pKihwWzFdLUNbMV0pPj0wJiYocD1DLGc9dik6TWF0aC5hYnMoZlsxXS1wWzFdKTx3P01hdGguYWJzKGZbMV0tQ1sxXSk8dyYmKENbMF0tZlswXSkqKHBbMF0tQ1swXSk+PTAmJihwPUMsZz12KTphLmxvZyhcImVuZHB0IHRvIG5ld2VuZHB0IGlzIG5vdCB2ZXJ0LiBvciBob3J6LlwiLGYscCxDKX1pZihnPj0wKWJyZWFrO3krPVMoZixwKSxmPXB9aWYoZz09PWUuZWRnZXBhdGhzLmxlbmd0aCl7YS5sb2coXCJ1bmNsb3NlZCBwZXJpbWV0ZXIgcGF0aFwiKTticmVha31oPWcsKGI9LTE9PT14LmluZGV4T2YoaCkpJiYoaD14WzBdLHkrPVMoZixwKStcIlpcIixmPW51bGwpfWZvcihoPTA7aDxlLnBhdGhzLmxlbmd0aDtoKyspeSs9bi5zbW9vdGhjbG9zZWQoZS5wYXRoc1toXS5tYXAobyksZS5zbW9vdGhpbmcpO3JldHVybiB5fX0se1wiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vY2FycGV0L2F4aXNfYWxpZ25lZF9saW5lXCI6ODgxfV0sOTQ2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxzLGwsYyx1O2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe2ZvcihvPShhPXRbcl0pLnBlZGdlcGF0aHM9W10scz1hLnBwYXRocz1bXSxuPTA7bjxhLmVkZ2VwYXRocy5sZW5ndGg7bisrKXtmb3IodT1hLmVkZ2VwYXRoc1tuXSxsPVtdLGk9MDtpPHUubGVuZ3RoO2krKylsW2ldPWUodVtpXSk7by5wdXNoKGwpfWZvcihuPTA7bjxhLnBhdGhzLmxlbmd0aDtuKyspe2Zvcih1PWEucGF0aHNbbl0sYz1bXSxpPTA7aTx1Lmxlbmd0aDtpKyspY1tpXT1lKHVbaV0pO3MucHVzaChjKX19fX0se31dLDk0NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi9jYXJwZXQvbWFwXzFkX2FycmF5XCIpLGE9dChcIi4uL2NhcnBldC9tYWtlcGF0aFwiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIikscz10KFwiLi4vLi4vbGliXCIpLGw9dChcIi4uL2NvbnRvdXIvbWFrZV9jcm9zc2luZ3NcIiksYz10KFwiLi4vY29udG91ci9maW5kX2FsbF9wYXRoc1wiKSx1PXQoXCIuLi9jb250b3VyL3Bsb3RcIiksaD10KFwiLi4vY29udG91ci9jb25zdGFudHNcIiksZj10KFwiLi4vY29udG91ci9jb252ZXJ0X3RvX2NvbnN0cmFpbnRzXCIpLHA9dChcIi4vam9pbl9hbGxfcGF0aHNcIiksZD10KFwiLi4vY29udG91ci9lbXB0eV9wYXRoaW5mb1wiKSxnPXQoXCIuL21hcF9wYXRoaW5mb1wiKSx2PXQoXCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkXCIpLG09dChcIi4uL2NvbnRvdXIvY2xvc2VfYm91bmRhcmllc1wiKTtmdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj10LmdldFBvaW50QXRMZW5ndGgoZSksaT10LmdldFBvaW50QXRMZW5ndGgociksYT1pLngtbi54LG89aS55LW4ueSxzPU1hdGguc3FydChhKmErbypvKTtyZXR1cm5bYS9zLG8vc119ZnVuY3Rpb24geCh0KXt2YXIgZT1NYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSk7cmV0dXJuW3RbMF0vZSx0WzFdL2VdfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj1NYXRoLmFicyh0WzBdKmVbMF0rdFsxXSplWzFdKTtyZXR1cm4gTWF0aC5zcXJ0KDEtcipyKS9yfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixfKXt2YXIgdz1lLnhheGlzLGs9ZS55YXhpcztzLm1ha2VUcmFjZUdyb3VwcyhfLHIsXCJjb250b3VyXCIpLmVhY2goZnVuY3Rpb24ocil7dmFyIF89bi5zZWxlY3QodGhpcyksQT1yWzBdLFQ9QS50cmFjZSxNPVQuX2NhcnBldFRyYWNlPXYodCxUKSxTPXQuY2FsY2RhdGFbTS5pbmRleF1bMF07aWYoTS52aXNpYmxlJiZcImxlZ2VuZG9ubHlcIiE9PU0udmlzaWJsZSl7dmFyIEU9QS5hLEM9QS5iLEw9VC5jb250b3Vycyx6PWQoTCxlLEEpLE89XCJjb25zdHJhaW50XCI9PT1MLnR5cGUsST1MLl9vcGVyYXRpb24sRD1PP1wiPVwiPT09ST9cImxpbmVzXCI6XCJmaWxsXCI6TC5jb2xvcmluZyxQPVtbRVswXSxDW0MubGVuZ3RoLTFdXSxbRVtFLmxlbmd0aC0xXSxDW0MubGVuZ3RoLTFdXSxbRVtFLmxlbmd0aC0xXSxDWzBdXSxbRVswXSxDWzBdXV07bCh6KTt2YXIgUj0xZS04KihFW0UubGVuZ3RoLTFdLUVbMF0pLEY9MWUtOCooQ1tDLmxlbmd0aC0xXS1DWzBdKTtjKHosUixGKTt2YXIgQixOLGosVixVPXo7XCJjb25zdHJhaW50XCI9PT1MLnR5cGUmJihVPWYoeixJKSxtKFUsSSxQLFQpKSxnKHosRyk7dmFyIHE9W107Zm9yKFY9Uy5jbGlwc2VnbWVudHMubGVuZ3RoLTE7Vj49MDtWLS0pQj1TLmNsaXBzZWdtZW50c1tWXSxOPWkoW10sQi54LHcuYzJwKSxqPWkoW10sQi55LGsuYzJwKSxOLnJldmVyc2UoKSxqLnJldmVyc2UoKSxxLnB1c2goYShOLGosQi5iaWN1YmljKSk7dmFyIEg9XCJNXCIrcS5qb2luKFwiTFwiKStcIlpcIjshZnVuY3Rpb24odCxlLHIsbixvLGwpe3ZhciBjLHUsaCxmLHA9cy5lbnN1cmVTaW5nbGUodCxcImdcIixcImNvbnRvdXJiZ1wiKS5zZWxlY3RBbGwoXCJwYXRoXCIpLmRhdGEoXCJmaWxsXCIhPT1sfHxvP1tdOlswXSk7cC5lbnRlcigpLmFwcGVuZChcInBhdGhcIikscC5leGl0KCkucmVtb3ZlKCk7dmFyIGQ9W107Zm9yKGY9MDtmPGUubGVuZ3RoO2YrKyljPWVbZl0sdT1pKFtdLGMueCxyLmMycCksaD1pKFtdLGMueSxuLmMycCksZC5wdXNoKGEodSxoLGMuYmljdWJpYykpO3AuYXR0cihcImRcIixcIk1cIitkLmpvaW4oXCJMXCIpK1wiWlwiKS5zdHlsZShcInN0cm9rZVwiLFwibm9uZVwiKX0oXyxTLmNsaXBzZWdtZW50cyx3LGssTyxEKSxmdW5jdGlvbih0LGUscixpLGEsbyxsLGMsdSxoLGYpe3ZhciBkPXMuZW5zdXJlU2luZ2xlKGUsXCJnXCIsXCJjb250b3VyZmlsbFwiKS5zZWxlY3RBbGwoXCJwYXRoXCIpLmRhdGEoXCJmaWxsXCI9PT1oP2E6W10pO2QuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLGQuZXhpdCgpLnJlbW92ZSgpLGQuZWFjaChmdW5jdGlvbihlKXt2YXIgYT1wKHQsZSxvLGwsYyx1LHIsaSk7ZS5wcmVmaXhCb3VuZGFyeSYmKGE9ZithKSxhP24uc2VsZWN0KHRoaXMpLmF0dHIoXCJkXCIsYSkuc3R5bGUoXCJzdHJva2VcIixcIm5vbmVcIik6bi5zZWxlY3QodGhpcykucmVtb3ZlKCl9KX0oVCxfLHcsayxVLFAsRyxNLFMsRCxIKSxmdW5jdGlvbih0LGUscixpLGEsbCxjKXt2YXIgZj1zLmVuc3VyZVNpbmdsZSh0LFwiZ1wiLFwiY29udG91cmxpbmVzXCIpLHA9ITEhPT1hLnNob3dsaW5lcyxkPWEuc2hvd2xhYmVscyxnPXAmJmQsdj11LmNyZWF0ZUxpbmVzKGYscHx8ZCxlKSxtPXUuY3JlYXRlTGluZUNsaXAoZixnLHIsaS50cmFjZS51aWQpLF89dC5zZWxlY3RBbGwoXCJnLmNvbnRvdXJsYWJlbHNcIikuZGF0YShkP1swXTpbXSk7aWYoXy5leGl0KCkucmVtb3ZlKCksXy5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcImNvbnRvdXJsYWJlbHNcIiwhMCksZCl7dmFyIHc9bC54YXhpcyxrPWwueWF4aXMsQT13Ll9sZW5ndGgsVD1rLl9sZW5ndGgsTT1bW1swLDBdLFtBLDBdLFtBLFRdLFswLFRdXV0sUz1bXTtzLmNsZWFyTG9jYXRpb25DYWNoZSgpO3ZhciBFPXUubGFiZWxGb3JtYXR0ZXIoYSxpLnQuY2Isci5fZnVsbExheW91dCksQz1vLnRlc3Rlci5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJkYXRhLW5vdGV4XCIsMSkuY2FsbChvLmZvbnQsYS5sYWJlbGZvbnQpLEw9e2xlZnQ6MCxyaWdodDpBLGNlbnRlcjpBLzIsdG9wOjAsYm90dG9tOlQsbWlkZGxlOlQvMn0sej1NYXRoLnNxcnQoQSpBK1QqVCksTz1oLkxBQkVMRElTVEFOQ0Uqei9NYXRoLm1heCgxLGUubGVuZ3RoL2guTEFCRUxJTkNSRUFTRSk7di5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXUuY2FsY1RleHRPcHRzKHQubGV2ZWwsRSxDLHIpO24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbChcInBhdGhcIikuZWFjaChmdW5jdGlvbihyKXt2YXIgbj1zLmdldFZpc2libGVTZWdtZW50KHRoaXMsTCxlLmhlaWdodC8yKTtpZihuJiYoZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbyxzPTA7czxyLnBlZGdlcGF0aHMubGVuZ3RoO3MrKyllPT09ci5wZWRnZXBhdGhzW3NdJiYobz1yLmVkZ2VwYXRoc1tzXSk7aWYoIW8pcmV0dXJuO3ZhciBsPWkuYVswXSxjPWkuYVtpLmEubGVuZ3RoLTFdLHU9aS5iWzBdLGg9aS5iW2kuYi5sZW5ndGgtMV07ZnVuY3Rpb24gZih0LGUpe3ZhciByLG49MDtyZXR1cm4oTWF0aC5hYnModFswXS1sKTwuMXx8TWF0aC5hYnModFswXS1jKTwuMSkmJihyPXgoaS5keHlkYl9yb3VnaCh0WzBdLHRbMV0sLjEpKSxuPU1hdGgubWF4KG4sYSpiKGUscikvMikpLChNYXRoLmFicyh0WzFdLXUpPC4xfHxNYXRoLmFicyh0WzFdLWgpPC4xKSYmKHI9eChpLmR4eWRhX3JvdWdoKHRbMF0sdFsxXSwuMSkpLG49TWF0aC5tYXgobixhKmIoZSxyKS8yKSksbn12YXIgcD15KHQsMCwxKSxkPXkodCxuLnRvdGFsLG4udG90YWwtMSksZz1mKG9bMF0scCksdj1uLnRvdGFsLWYob1tvLmxlbmd0aC0xXSxkKTtuLm1pbjxnJiYobi5taW49Zyk7bi5tYXg+diYmKG4ubWF4PXYpO24ubGVuPW4ubWF4LW4ubWlufSh0aGlzLHIsdCxuLGMsZS5oZWlnaHQpLCEobi5sZW48KGUud2lkdGgrZS5oZWlnaHQpKmguTEFCRUxNSU4pKSlmb3IodmFyIGk9TWF0aC5taW4oTWF0aC5jZWlsKG4ubGVuL08pLGguTEFCRUxNQVgpLGE9MDthPGk7YSsrKXt2YXIgbz11LmZpbmRCZXN0VGV4dExvY2F0aW9uKHRoaXMsbixlLFMsTCk7aWYoIW8pYnJlYWs7dS5hZGRMYWJlbERhdGEobyxlLFMsTSl9fSl9KSxDLnJlbW92ZSgpLHUuZHJhd0xhYmVscyhfLFMscixtLGc/TTpudWxsKX1kJiYhcCYmdi5yZW1vdmUoKX0oXyx6LHQsQSxMLGUsTSksby5zZXRDbGlwVXJsKF8sTS5fY2xpcFBhdGhJZCx0KX1mdW5jdGlvbiBHKHQpe3ZhciBlPU0uYWIyeHkodFswXSx0WzFdLCEwKTtyZXR1cm5bdy5jMnAoZVswXSksay5jMnAoZVsxXSldfX0pfX0se1wiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZFwiOjg5NyxcIi4uL2NhcnBldC9tYWtlcGF0aFwiOjg5OCxcIi4uL2NhcnBldC9tYXBfMWRfYXJyYXlcIjo4OTksXCIuLi9jb250b3VyL2Nsb3NlX2JvdW5kYXJpZXNcIjo5MjEsXCIuLi9jb250b3VyL2NvbnN0YW50c1wiOjkyMyxcIi4uL2NvbnRvdXIvY29udmVydF90b19jb25zdHJhaW50c1wiOjkyNyxcIi4uL2NvbnRvdXIvZW1wdHlfcGF0aGluZm9cIjo5MjksXCIuLi9jb250b3VyL2ZpbmRfYWxsX3BhdGhzXCI6OTMxLFwiLi4vY29udG91ci9tYWtlX2Nyb3NzaW5nc1wiOjkzNixcIi4uL2NvbnRvdXIvcGxvdFwiOjkzNyxcIi4vam9pbl9hbGxfcGF0aHNcIjo5NDUsXCIuL21hcF9wYXRoaW5mb1wiOjk0NixkMzoxNTV9XSw5NDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXMoe3o6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHg6cyh7fSxuLngse2ltcGxpZWRFZGl0czp7eHR5cGU6XCJhcnJheVwifX0pLHgwOnMoe30sbi54MCx7aW1wbGllZEVkaXRzOnt4dHlwZTpcInNjYWxlZFwifX0pLGR4OnMoe30sbi5keCx7aW1wbGllZEVkaXRzOnt4dHlwZTpcInNjYWxlZFwifX0pLHk6cyh7fSxuLnkse2ltcGxpZWRFZGl0czp7eXR5cGU6XCJhcnJheVwifX0pLHkwOnMoe30sbi55MCx7aW1wbGllZEVkaXRzOnt5dHlwZTpcInNjYWxlZFwifX0pLGR5OnMoe30sbi5keSx7aW1wbGllZEVkaXRzOnt5dHlwZTpcInNjYWxlZFwifX0pLHRleHQ6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGhvdmVydGV4dDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sdHJhbnNwb3NlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEsZWRpdFR5cGU6XCJjYWxjXCJ9LHh0eXBlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhcnJheVwiLFwic2NhbGVkXCJdLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx5dHlwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYXJyYXlcIixcInNjYWxlZFwiXSxlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0senNtb290aDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiZmFzdFwiLFwiYmVzdFwiLCExXSxkZmx0OiExLGVkaXRUeXBlOlwiY2FsY1wifSxjb25uZWN0Z2Fwczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwiY2FsY1wifSx4Z2FwOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLG1pbjowLGVkaXRUeXBlOlwicGxvdFwifSx5Z2FwOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLG1pbjowLGVkaXRUeXBlOlwicGxvdFwifSx6aG92ZXJmb3JtYXQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsZWRpdFR5cGU6XCJub25lXCJ9LGhvdmVydGVtcGxhdGU6aSgpfSx7dHJhbnNmb3Jtczp2b2lkIDB9LGEoXCJcIix7Y0xldHRlcjpcInpcIixhdXRvQ29sb3JEZmx0OiExfSkse2NvbG9yYmFyOm99KX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCI6NTc5LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIjo1ODUsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIjoxMDUyfV0sOTQ5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxvPXQoXCIuLi9oaXN0b2dyYW0yZC9jYWxjXCIpLHM9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCIpLGw9dChcIi4vY29udmVydF9jb2x1bW5feHl6XCIpLGM9dChcIi4vY2xlYW5fMmRfYXJyYXlcIiksdT10KFwiLi9pbnRlcnAyZFwiKSxoPXQoXCIuL2ZpbmRfZW1wdGllc1wiKSxmPXQoXCIuL21ha2VfYm91bmRfYXJyYXlcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIscCxkLGcsdixtLHkseCxiLF89YS5nZXRGcm9tSWQodCxlLnhheGlzfHxcInhcIiksdz1hLmdldEZyb21JZCh0LGUueWF4aXN8fFwieVwiKSxrPW4udHJhY2VJcyhlLFwiY29udG91clwiKSxBPW4udHJhY2VJcyhlLFwiaGlzdG9ncmFtXCIpLFQ9bi50cmFjZUlzKGUsXCJnbDJkXCIpLE09az9cImJlc3RcIjplLnpzbW9vdGg7aWYoXy5fbWluRHRpY2s9MCx3Ll9taW5EdGljaz0wLEEpcj0oYj1vKHQsZSkpLngscD1iLngwLGQ9Yi5keCxnPWIueSx2PWIueTAsbT1iLmR5LHk9Yi56O2Vsc2V7dmFyIFM9ZS56O2kuaXNBcnJheTFEKFMpPyhsKGUsXyx3LFwieFwiLFwieVwiLFtcInpcIl0pLHI9ZS5feCxnPWUuX3ksUz1lLl96KToocj1lLng/Xy5tYWtlQ2FsY2RhdGEoZSxcInhcIik6W10sZz1lLnk/dy5tYWtlQ2FsY2RhdGEoZSxcInlcIik6W10pLHA9ZS54MCxkPWUuZHgsdj1lLnkwLG09ZS5keSx5PWMoUyxlLnRyYW5zcG9zZSksKGt8fGUuY29ubmVjdGdhcHMpJiYoZS5fZW1wdHlwb2ludHM9aCh5KSx1KHksZS5fZW1wdHlwb2ludHMpKX1mdW5jdGlvbiBFKHQpe009ZS5faW5wdXQuenNtb290aD1lLnpzbW9vdGg9ITEsaS53YXJuKCdjYW5ub3QgdXNlIHpzbW9vdGg6IFwiZmFzdFwiOiAnK3QpfWlmKFwiZmFzdFwiPT09TSlpZihcImxvZ1wiPT09Xy50eXBlfHxcImxvZ1wiPT09dy50eXBlKUUoXCJsb2cgYXhpcyBmb3VuZFwiKTtlbHNlIGlmKCFBKXtpZihyLmxlbmd0aCl7dmFyIEM9KHJbci5sZW5ndGgtMV0tclswXSkvKHIubGVuZ3RoLTEpLEw9TWF0aC5hYnMoQy8xMDApO2Zvcih4PTA7eDxyLmxlbmd0aC0xO3grKylpZihNYXRoLmFicyhyW3grMV0tclt4XS1DKT5MKXtFKFwieCBzY2FsZSBpcyBub3QgbGluZWFyXCIpO2JyZWFrfX1pZihnLmxlbmd0aCYmXCJmYXN0XCI9PT1NKXt2YXIgej0oZ1tnLmxlbmd0aC0xXS1nWzBdKS8oZy5sZW5ndGgtMSksTz1NYXRoLmFicyh6LzEwMCk7Zm9yKHg9MDt4PGcubGVuZ3RoLTE7eCsrKWlmKE1hdGguYWJzKGdbeCsxXS1nW3hdLXopPk8pe0UoXCJ5IHNjYWxlIGlzIG5vdCBsaW5lYXJcIik7YnJlYWt9fX12YXIgST1pLm1heFJvd0xlbmd0aCh5KSxEPVwic2NhbGVkXCI9PT1lLnh0eXBlP1wiXCI6cixQPWYoZSxELHAsZCxJLF8pLFI9XCJzY2FsZWRcIj09PWUueXR5cGU/XCJcIjpnLEY9ZihlLFIsdixtLHkubGVuZ3RoLHcpO1R8fChlLl9leHRyZW1lc1tfLl9pZF09YS5maW5kRXh0cmVtZXMoXyxQKSxlLl9leHRyZW1lc1t3Ll9pZF09YS5maW5kRXh0cmVtZXModyxGKSk7dmFyIEI9e3g6UCx5OkYsejp5LHRleHQ6ZS5fdGV4dHx8ZS50ZXh0LGhvdmVydGV4dDplLl9ob3ZlcnRleHR8fGUuaG92ZXJ0ZXh0fTtpZihEJiZELmxlbmd0aD09PVAubGVuZ3RoLTEmJihCLnhDZW50ZXI9RCksUiYmUi5sZW5ndGg9PT1GLmxlbmd0aC0xJiYoQi55Q2VudGVyPVIpLEEmJihCLnhSYW5nZXM9Yi54UmFuZ2VzLEIueVJhbmdlcz1iLnlSYW5nZXMsQi5wdHM9Yi5wdHMpLGsmJlwiY29uc3RyYWludFwiPT09ZS5jb250b3Vycy50eXBlfHxzKHQsZSx7dmFsczp5LGNvbnRhaW5lclN0cjpcIlwiLGNMZXR0ZXI6XCJ6XCJ9KSxrJiZlLmNvbnRvdXJzJiZcImhlYXRtYXBcIj09PWUuY29udG91cnMuY29sb3Jpbmcpe3ZhciBOPXt0eXBlOlwiY29udG91clwiPT09ZS50eXBlP1wiaGVhdG1hcFwiOlwiaGlzdG9ncmFtMmRcIix4Y2FsZW5kYXI6ZS54Y2FsZW5kYXIseWNhbGVuZGFyOmUueWNhbGVuZGFyfTtCLnhmaWxsPWYoTixELHAsZCxJLF8pLEIueWZpbGw9ZihOLFIsdixtLHkubGVuZ3RoLHcpfXJldHVybltCXX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCI6NTg2LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL2hpc3RvZ3JhbTJkL2NhbGNcIjo5ODAsXCIuL2NsZWFuXzJkX2FycmF5XCI6OTUwLFwiLi9jb252ZXJ0X2NvbHVtbl94eXpcIjo5NTIsXCIuL2ZpbmRfZW1wdGllc1wiOjk1NCxcIi4vaW50ZXJwMmRcIjo5NTcsXCIuL21ha2VfYm91bmRfYXJyYXlcIjo5NTh9XSw5NTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLG8scyxsO2Z1bmN0aW9uIGModCl7aWYobih0KSlyZXR1cm4rdH1pZihlKXtmb3Iocj0wLHM9MDtzPHQubGVuZ3RoO3MrKylyPU1hdGgubWF4KHIsdFtzXS5sZW5ndGgpO2lmKDA9PT1yKXJldHVybiExO2E9ZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RofSxvPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtyXVtlXX19ZWxzZSByPXQubGVuZ3RoLGE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtlXS5sZW5ndGh9LG89ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0W2VdW3JdfTt2YXIgdT1uZXcgQXJyYXkocik7Zm9yKHM9MDtzPHI7cysrKWZvcihpPWEodCxzKSx1W3NdPW5ldyBBcnJheShpKSxsPTA7bDxpO2wrKyl1W3NdW2xdPWMobyh0LHMsbCkpO3JldHVybiB1fX0se1wiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw5NTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e21pbjpcInptaW5cIixtYXg6XCJ6bWF4XCJ9fSx7fV0sOTUyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxvLHMpe3ZhciBsLGMsdSxoLGY9dC5fbGVuZ3RoLHA9ZS5tYWtlQ2FsY2RhdGEodCxhKSxkPXIubWFrZUNhbGNkYXRhKHQsbyksZz10LnRleHQsdj12b2lkIDAhPT1nJiZuLmlzQXJyYXkxRChnKSxtPXQuaG92ZXJ0ZXh0LHk9dm9pZCAwIT09bSYmbi5pc0FycmF5MUQobSkseD1uLmRpc3RpbmN0VmFscyhwKSxiPXgudmFscyxfPW4uZGlzdGluY3RWYWxzKGQpLHc9Xy52YWxzLGs9W107Zm9yKGw9MDtsPHMubGVuZ3RoO2wrKylrW2xdPW4uaW5pdDJkQXJyYXkody5sZW5ndGgsYi5sZW5ndGgpO2Zvcih2JiYodT1uLmluaXQyZEFycmF5KHcubGVuZ3RoLGIubGVuZ3RoKSkseSYmKGg9bi5pbml0MmRBcnJheSh3Lmxlbmd0aCxiLmxlbmd0aCkpLGw9MDtsPGY7bCsrKWlmKHBbbF0hPT1pJiZkW2xdIT09aSl7dmFyIEE9bi5maW5kQmluKHBbbF0reC5taW5EaWZmLzIsYiksVD1uLmZpbmRCaW4oZFtsXStfLm1pbkRpZmYvMix3KTtmb3IoYz0wO2M8cy5sZW5ndGg7YysrKXt2YXIgTT10W3NbY11dO2tbY11bVF1bQV09TVtsXX12JiYodVtUXVtBXT1nW2xdKSx5JiYoaFtUXVtBXT1tW2xdKX1mb3IodFtcIl9cIithXT1iLHRbXCJfXCIrb109dyxjPTA7YzxzLmxlbmd0aDtjKyspdFtcIl9cIitzW2NdXT1rW2NdO3YmJih0Ll90ZXh0PXUpLHkmJih0Ll9ob3ZlcnRleHQ9aCl9fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vbGliXCI6NzAxfV0sOTUzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL3h5el9kZWZhdWx0c1wiKSxhPXQoXCIuL3N0eWxlX2RlZmF1bHRzXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiKSxzPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1pKHQsZSxjLGwpPyhjKFwidGV4dFwiKSxjKFwiaG92ZXJ0ZXh0XCIpLGMoXCJob3ZlcnRlbXBsYXRlXCIpLGEodCxlLGMsbCksYyhcImNvbm5lY3RnYXBzXCIsbi5pc0FycmF5MUQoZS56KSYmITEhPT1lLnpzbW9vdGgpLG8odCxlLGwsYyx7cHJlZml4OlwiXCIsY0xldHRlcjpcInpcIn0pKTplLnZpc2libGU9ITF9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIjo1ODgsXCIuLi8uLi9saWJcIjo3MDEsXCIuL2F0dHJpYnV0ZXNcIjo5NDgsXCIuL3N0eWxlX2RlZmF1bHRzXCI6OTYxLFwiLi94eXpfZGVmYXVsdHNcIjo5NjJ9XSw5NTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLm1heFJvd0xlbmd0aDtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixpLGEsbyxzLGwsYyx1PVtdLGg9e30sZj1bXSxwPXRbMF0sZD1bXSxnPVswLDAsMF0sdj1uKHQpO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspZm9yKGU9ZCxkPXAscD10W3IrMV18fFtdLGk9MDtpPHY7aSsrKXZvaWQgMD09PWRbaV0mJigocz0odm9pZCAwIT09ZFtpLTFdPzE6MCkrKHZvaWQgMCE9PWRbaSsxXT8xOjApKyh2b2lkIDAhPT1lW2ldPzE6MCkrKHZvaWQgMCE9PXBbaV0/MTowKSk/KDA9PT1yJiZzKyssMD09PWkmJnMrKyxyPT09dC5sZW5ndGgtMSYmcysrLGk9PT1kLmxlbmd0aC0xJiZzKyssczw0JiYoaFtbcixpXV09W3IsaSxzXSksdS5wdXNoKFtyLGksc10pKTpmLnB1c2goW3IsaV0pKTtmb3IoO2YubGVuZ3RoOyl7Zm9yKGw9e30sYz0hMSxvPWYubGVuZ3RoLTE7bz49MDtvLS0pKHM9KChoW1socj0oYT1mW29dKVswXSktMSxpPWFbMV1dXXx8ZylbMl0rKGhbW3IrMSxpXV18fGcpWzJdKyhoW1tyLGktMV1dfHxnKVsyXSsoaFtbcixpKzFdXXx8ZylbMl0pLzIwKSYmKGxbYV09W3IsaSxzXSxmLnNwbGljZShvLDEpLGM9ITApO2lmKCFjKXRocm93XCJmaW5kRW1wdGllcyBpdGVyYXRlZCB3aXRoIG5vIG5ldyBuZWlnaGJvcnNcIjtmb3IoYSBpbiBsKWhbYV09bFthXSx1LnB1c2gobFthXSl9cmV0dXJuIHUuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBlWzJdLXRbMl19KX19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDk1NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4XCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzLGwpe3ZhciBjLHUsaCxmLHA9dC5jZFswXSxkPXAudHJhY2UsZz10LnhhLHY9dC55YSxtPXAueCx5PXAueSx4PXAueixiPXAueENlbnRlcixfPXAueUNlbnRlcix3PXAuem1hc2ssaz1bZC56bWluLGQuem1heF0sQT1kLnpob3ZlcmZvcm1hdCxUPW0sTT15O2lmKCExIT09dC5pbmRleCl7dHJ5e2g9TWF0aC5yb3VuZCh0LmluZGV4WzFdKSxmPU1hdGgucm91bmQodC5pbmRleFswXSl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgaS5lcnJvcihcIkVycm9yIGhvdmVyaW5nIG9uIGhlYXRtYXAsIHBvaW50TnVtYmVyIG11c3QgYmUgW3Jvdyxjb2xdLCBmb3VuZDpcIix0LmluZGV4KX1pZihoPDB8fGg+PXhbMF0ubGVuZ3RofHxmPDB8fGY+eC5sZW5ndGgpcmV0dXJufWVsc2V7aWYobi5pbmJveChlLW1bMF0sZS1tW20ubGVuZ3RoLTFdLDApPjB8fG4uaW5ib3goci15WzBdLHIteVt5Lmxlbmd0aC0xXSwwKT4wKXJldHVybjtpZihsKXt2YXIgUztmb3IoVD1bMiptWzBdLW1bMV1dLFM9MTtTPG0ubGVuZ3RoO1MrKylULnB1c2goKG1bU10rbVtTLTFdKS8yKTtmb3IoVC5wdXNoKFsyKm1bbS5sZW5ndGgtMV0tbVttLmxlbmd0aC0yXV0pLE09WzIqeVswXS15WzFdXSxTPTE7Uzx5Lmxlbmd0aDtTKyspTS5wdXNoKCh5W1NdK3lbUy0xXSkvMik7TS5wdXNoKFsyKnlbeS5sZW5ndGgtMV0teVt5Lmxlbmd0aC0yXV0pfWg9TWF0aC5tYXgoMCxNYXRoLm1pbihULmxlbmd0aC0yLGkuZmluZEJpbihlLFQpKSksZj1NYXRoLm1heCgwLE1hdGgubWluKE0ubGVuZ3RoLTIsaS5maW5kQmluKHIsTSkpKX12YXIgRT1nLmMycChtW2hdKSxDPWcuYzJwKG1baCsxXSksTD12LmMycCh5W2ZdKSx6PXYuYzJwKHlbZisxXSk7bD8oQz1FLGM9bVtoXSx6PUwsdT15W2ZdKTooYz1iP2JbaF06KG1baF0rbVtoKzFdKS8yLHU9Xz9fW2ZdOih5W2ZdK3lbZisxXSkvMixkLnpzbW9vdGgmJihFPUM9Zy5jMnAoYyksTD16PXYuYzJwKHUpKSk7dmFyIE8sSSxEPXhbZl1baF07dyYmIXdbZl1baF0mJihEPXZvaWQgMCksQXJyYXkuaXNBcnJheShwLmhvdmVydGV4dCkmJkFycmF5LmlzQXJyYXkocC5ob3ZlcnRleHRbZl0pP089cC5ob3ZlcnRleHRbZl1baF06QXJyYXkuaXNBcnJheShwLnRleHQpJiZBcnJheS5pc0FycmF5KHAudGV4dFtmXSkmJihPPXAudGV4dFtmXVtoXSk7dmFyIFA9e3R5cGU6XCJsaW5lYXJcIixyYW5nZTprLGhvdmVyZm9ybWF0OkEsX3NlcGFyYXRvcnM6Zy5fc2VwYXJhdG9ycyxfbnVtRm9ybWF0OmcuX251bUZvcm1hdH07cmV0dXJuIEk9YS50aWNrVGV4dChQLEQsXCJob3ZlclwiKS50ZXh0LFtpLmV4dGVuZEZsYXQodCx7aW5kZXg6W2YsaF0sZGlzdGFuY2U6dC5tYXhIb3ZlckRpc3RhbmNlLHNwaWtlRGlzdGFuY2U6dC5tYXhTcGlrZURpc3RhbmNlLHgwOkUseDE6Qyx5MDpMLHkxOnoseExhYmVsVmFsOmMseUxhYmVsVmFsOnUsekxhYmVsVmFsOkQsekxhYmVsOkksdGV4dDpPfSldfX0se1wiLi4vLi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5fV0sOTU2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLnBsb3Q9dChcIi4vcGxvdFwiKSxuLmNvbG9yYmFyPXQoXCIuL2NvbG9yYmFyXCIpLG4uc3R5bGU9dChcIi4vc3R5bGVcIiksbi5ob3ZlclBvaW50cz10KFwiLi9ob3ZlclwiKSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cImhlYXRtYXBcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIiksbi5jYXRlZ29yaWVzPVtcImNhcnRlc2lhblwiLFwic3ZnXCIsXCIyZE1hcFwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiOjc2MCxcIi4vYXR0cmlidXRlc1wiOjk0OCxcIi4vY2FsY1wiOjk0OSxcIi4vY29sb3JiYXJcIjo5NTEsXCIuL2RlZmF1bHRzXCI6OTUzLFwiLi9ob3ZlclwiOjk1NSxcIi4vcGxvdFwiOjk1OSxcIi4vc3R5bGVcIjo5NjB9XSw5NTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9W1stMSwwXSxbMSwwXSxbMCwtMV0sWzAsMV1dO2Z1bmN0aW9uIGEodCl7cmV0dXJuLjUtLjI1Kk1hdGgubWluKDEsLjUqdCl9ZnVuY3Rpb24gbyh0LGUscil7dmFyIG4sYSxvLHMsbCxjLHUsaCxmLHAsZCxnLHYsbT0wO2ZvcihzPTA7czxlLmxlbmd0aDtzKyspe2ZvcihhPShuPWVbc10pWzBdLG89blsxXSxkPXRbYV1bb10scD0wLGY9MCxsPTA7bDw0O2wrKykodT10W2ErKGM9aVtsXSlbMF1dKSYmdm9pZCAwIT09KGg9dVtvK2NbMV1dKSYmKDA9PT1wP2c9dj1oOihnPU1hdGgubWluKGcsaCksdj1NYXRoLm1heCh2LGgpKSxmKysscCs9aCk7aWYoMD09PWYpdGhyb3dcIml0ZXJhdGVJbnRlcnAyZCBvcmRlciBpcyB3cm9uZzogbm8gZGVmaW5lZCBuZWlnaGJvcnNcIjt0W2FdW29dPXAvZix2b2lkIDA9PT1kP2Y8NCYmKG09MSk6KHRbYV1bb109KDErcikqdFthXVtvXS1yKmQsdj5nJiYobT1NYXRoLm1heChtLE1hdGguYWJzKHRbYV1bb10tZCkvKHYtZykpKSl9cmV0dXJuIG19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaT0xO2ZvcihvKHQsZSkscj0wO3I8ZS5sZW5ndGgmJiEoZVtyXVsyXTw0KTtyKyspO2ZvcihlPWUuc2xpY2Uocikscj0wO3I8MTAwJiZpPi4wMTtyKyspaT1vKHQsZSxhKGkpKTtyZXR1cm4gaT4uMDEmJm4ubG9nKFwiaW50ZXJwMmQgZGlkbid0IGNvbnZlcmdlIHF1aWNrbHlcIixpKSx0fX0se1wiLi4vLi4vbGliXCI6NzAxfV0sOTU4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uLy4uL2xpYlwiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8scyl7dmFyIGwsYyx1LGg9W10sZj1uLnRyYWNlSXModCxcImNvbnRvdXJcIikscD1uLnRyYWNlSXModCxcImhpc3RvZ3JhbVwiKSxkPW4udHJhY2VJcyh0LFwiZ2wyZFwiKTtpZihpKGUpJiZlLmxlbmd0aD4xJiYhcCYmXCJjYXRlZ29yeVwiIT09cy50eXBlKXt2YXIgZz1lLmxlbmd0aDtpZighKGc8PW8pKXJldHVybiBmP2Uuc2xpY2UoMCxvKTplLnNsaWNlKDAsbysxKTtpZihmfHxkKWg9ZS5zbGljZSgwLG8pO2Vsc2UgaWYoMT09PW8paD1bZVswXS0uNSxlWzBdKy41XTtlbHNle2ZvcihoPVsxLjUqZVswXS0uNSplWzFdXSx1PTE7dTxnO3UrKyloLnB1c2goLjUqKGVbdS0xXStlW3VdKSk7aC5wdXNoKDEuNSplW2ctMV0tLjUqZVtnLTJdKX1pZihnPG8pe3ZhciB2PWhbaC5sZW5ndGgtMV0sbT12LWhbaC5sZW5ndGgtMl07Zm9yKHU9Zzt1PG87dSsrKXYrPW0saC5wdXNoKHYpfX1lbHNle3ZhciB5PXRbcy5faWQuY2hhckF0KDApK1wiY2FsZW5kYXJcIl07Zm9yKGw9aShlKSYmMT09PWUubGVuZ3RoP2VbMF06dm9pZCAwPT09cj8wOnB8fFwiY2F0ZWdvcnlcIj09PXMudHlwZXx8XCJtdWx0aWNhdGVnb3J5XCI9PT1zLnR5cGU/cy5yMmMociwwLHkpOnMuZDJjKHIsMCx5KSxjPWF8fDEsdT1mfHxkPzA6LS41O3U8bzt1KyspaC5wdXNoKGwrYyp1KX1yZXR1cm4gaH19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5fV0sOTU5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcInRpbnljb2xvcjJcIiksYT10KFwiLi4vLi4vcmVnaXN0cnlcIiksbz10KFwiLi4vLi4vbGliXCIpLHM9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZVwiKSxsPXQoXCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiKTtmdW5jdGlvbiBjKHQsZSl7dmFyIHI9ZS5sZW5ndGgtMixuPW8uY29uc3RyYWluKG8uZmluZEJpbih0LGUpLDAsciksaT1lW25dLGE9ZVtuKzFdLHM9by5jb25zdHJhaW4obisodC1pKS8oYS1pKS0uNSwwLHIpLGw9TWF0aC5yb3VuZChzKSxjPU1hdGguYWJzKHMtbCk7cmV0dXJuIHMmJnMhPT1yJiZjP3tiaW4wOmwsZnJhYzpjLGJpbjE6TWF0aC5yb3VuZChsK2MvKHMtbCkpfTp7YmluMDpsLGJpbjE6bCxmcmFjOjB9fWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1lLmxlbmd0aC0xLG49by5jb25zdHJhaW4oby5maW5kQmluKHQsZSksMCxyKSxpPWVbbl0sYT0odC1pKS8oZVtuKzFdLWkpfHwwO3JldHVybiBhPD0wP3tiaW4wOm4sYmluMTpuLGZyYWM6MH06YTwuNT97YmluMDpuLGJpbjE6bisxLGZyYWM6YX06e2JpbjA6bisxLGJpbjE6bixmcmFjOjEtYX19ZnVuY3Rpb24gaCh0LGUscil7dFtlXT1yWzBdLHRbZSsxXT1yWzFdLHRbZSsyXT1yWzJdLHRbZSszXT1NYXRoLnJvdW5kKDI1NSpyWzNdKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsZil7dmFyIHA9ZS54YXhpcyxkPWUueWF4aXM7by5tYWtlVHJhY2VHcm91cHMoZixyLFwiaG1cIikuZWFjaChmdW5jdGlvbihlKXt2YXIgcixmLGcsdixtLHkseD1uLnNlbGVjdCh0aGlzKSxiPWVbMF0sXz1iLnRyYWNlLHc9Yi56LGs9Yi54LEE9Yi55LFQ9Yi54Q2VudGVyLE09Yi55Q2VudGVyLFM9YS50cmFjZUlzKF8sXCJjb250b3VyXCIpLEU9Uz9cImJlc3RcIjpfLnpzbW9vdGgsQz13Lmxlbmd0aCxMPW8ubWF4Um93TGVuZ3RoKHcpLHo9ITEsTz0hMTtmb3IoeT0wO3ZvaWQgMD09PXImJnk8ay5sZW5ndGgtMTspcj1wLmMycChrW3ldKSx5Kys7Zm9yKHk9ay5sZW5ndGgtMTt2b2lkIDA9PT1mJiZ5PjA7KWY9cC5jMnAoa1t5XSkseS0tO2ZvcihmPHImJihnPWYsZj1yLHI9Zyx6PSEwKSx5PTA7dm9pZCAwPT09diYmeTxBLmxlbmd0aC0xOyl2PWQuYzJwKEFbeV0pLHkrKztmb3IoeT1BLmxlbmd0aC0xO3ZvaWQgMD09PW0mJnk+MDspbT1kLmMycChBW3ldKSx5LS07aWYobTx2JiYoZz12LHY9bSxtPWcsTz0hMCksUyYmKFQ9ayxNPUEsaz1iLnhmaWxsLEE9Yi55ZmlsbCksXCJmYXN0XCIhPT1FKXt2YXIgST1cImJlc3RcIj09PUU/MDouNTtyPU1hdGgubWF4KC1JKnAuX2xlbmd0aCxyKSxmPU1hdGgubWluKCgxK0kpKnAuX2xlbmd0aCxmKSx2PU1hdGgubWF4KC1JKmQuX2xlbmd0aCx2KSxtPU1hdGgubWluKCgxK0kpKmQuX2xlbmd0aCxtKX12YXIgRD1NYXRoLnJvdW5kKGYtciksUD1NYXRoLnJvdW5kKG0tdik7aWYoRDw9MHx8UDw9MCl7eC5zZWxlY3RBbGwoXCJpbWFnZVwiKS5kYXRhKFtdKS5leGl0KCkucmVtb3ZlKCl9ZWxzZXt2YXIgUixGO1wiZmFzdFwiPT09RT8oUj1MLEY9Qyk6KFI9RCxGPVApO3ZhciBCPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7Qi53aWR0aD1SLEIuaGVpZ2h0PUY7dmFyIE4saixWPUIuZ2V0Q29udGV4dChcIjJkXCIpLFU9cy5tYWtlQ29sb3JTY2FsZUZ1bmMocy5leHRyYWN0U2NhbGUoXyx7Y0xldHRlcjpcInpcIn0pLHtub051bWVyaWNDaGVjazohMCxyZXR1cm5BcnJheTohMH0pO1wiZmFzdFwiPT09RT8oTj16P2Z1bmN0aW9uKHQpe3JldHVybiBMLTEtdH06by5pZGVudGl0eSxqPU8/ZnVuY3Rpb24odCl7cmV0dXJuIEMtMS10fTpvLmlkZW50aXR5KTooTj1mdW5jdGlvbih0KXtyZXR1cm4gby5jb25zdHJhaW4oTWF0aC5yb3VuZChwLmMycChrW3RdKS1yKSwwLEQpfSxqPWZ1bmN0aW9uKHQpe3JldHVybiBvLmNvbnN0cmFpbihNYXRoLnJvdW5kKGQuYzJwKEFbdF0pLXYpLDAsUCl9KTt2YXIgcSxILEcsWSxXLFg9aigwKSxaPVtYLFhdLCQ9ej8wOjEsSj1PPzA6MSxLPTAsUT0wLHR0PTAsZXQ9MDtpZihFKXt2YXIgcnQsbnQ9MDt0cnl7cnQ9bmV3IFVpbnQ4QXJyYXkoRCpQKjQpfWNhdGNoKHQpe3J0PW5ldyBBcnJheShEKlAqNCl9aWYoXCJiZXN0XCI9PT1FKXt2YXIgaXQsYXQsb3Qsc3Q9VHx8ayxsdD1NfHxBLGN0PW5ldyBBcnJheShzdC5sZW5ndGgpLHV0PW5ldyBBcnJheShsdC5sZW5ndGgpLGh0PW5ldyBBcnJheShEKSxmdD1UP3U6YyxwdD1NP3U6Yztmb3IoeT0wO3k8c3QubGVuZ3RoO3krKyljdFt5XT1NYXRoLnJvdW5kKHAuYzJwKHN0W3ldKS1yKTtmb3IoeT0wO3k8bHQubGVuZ3RoO3krKyl1dFt5XT1NYXRoLnJvdW5kKGQuYzJwKGx0W3ldKS12KTtmb3IoeT0wO3k8RDt5KyspaHRbeV09ZnQoeSxjdCk7Zm9yKEg9MDtIPFA7SCsrKWZvcihhdD13WyhpdD1wdChILHV0KSkuYmluMF0sb3Q9d1tpdC5iaW4xXSx5PTA7eTxEO3krKyxudCs9NCloKHJ0LG50LFc9QXQoYXQsb3QsaHRbeV0saXQpKX1lbHNlIGZvcihIPTA7SDxDO0grKylmb3IoWT13W0hdLFo9aihIKSx5PTA7eTxEO3krKylXPWt0KFlbeV0sMSksaChydCxudD00KihaKkQrTih5KSksVyk7dmFyIGR0PVYuY3JlYXRlSW1hZ2VEYXRhKEQsUCk7dHJ5e2R0LmRhdGEuc2V0KHJ0KX1jYXRjaCh0KXt2YXIgZ3Q9ZHQuZGF0YSx2dD1ndC5sZW5ndGg7Zm9yKEg9MDtIPHZ0O0grKylndFtIXT1ydFtIXX1WLnB1dEltYWdlRGF0YShkdCwwLDApfWVsc2V7dmFyIG10PV8ueGdhcCx5dD1fLnlnYXAseHQ9TWF0aC5mbG9vcihtdC8yKSxidD1NYXRoLmZsb29yKHl0LzIpO2ZvcihIPTA7SDxDO0grKylpZihZPXdbSF0sWi5yZXZlcnNlKCksWltKXT1qKEgrMSksWlswXSE9PVpbMV0mJnZvaWQgMCE9PVpbMF0mJnZvaWQgMCE9PVpbMV0pZm9yKHE9W0c9TigwKSxHXSx5PTA7eTxMO3krKylxLnJldmVyc2UoKSxxWyRdPU4oeSsxKSxxWzBdIT09cVsxXSYmdm9pZCAwIT09cVswXSYmdm9pZCAwIT09cVsxXSYmKFc9a3QoWVt5XSwocVsxXS1xWzBdKSooWlsxXS1aWzBdKSksVi5maWxsU3R5bGU9XCJyZ2JhKFwiK1cuam9pbihcIixcIikrXCIpXCIsVi5maWxsUmVjdChxWzBdK3h0LFpbMF0rYnQscVsxXS1xWzBdLW10LFpbMV0tWlswXS15dCkpfVE9TWF0aC5yb3VuZChRL0spLHR0PU1hdGgucm91bmQodHQvSyksZXQ9TWF0aC5yb3VuZChldC9LKTt2YXIgX3Q9aShcInJnYihcIitRK1wiLFwiK3R0K1wiLFwiK2V0K1wiKVwiKTt0Ll9obXBpeGNvdW50PSh0Ll9obXBpeGNvdW50fHwwKStLLHQuX2htbHVtY291bnQ9KHQuX2htbHVtY291bnR8fDApK0sqX3QuZ2V0THVtaW5hbmNlKCk7dmFyIHd0PXguc2VsZWN0QWxsKFwiaW1hZ2VcIikuZGF0YShlKTt3dC5lbnRlcigpLmFwcGVuZChcInN2ZzppbWFnZVwiKS5hdHRyKHt4bWxuczpsLnN2ZyxwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwibm9uZVwifSksd3QuYXR0cih7aGVpZ2h0OlAsd2lkdGg6RCx4OnIseTp2LFwieGxpbms6aHJlZlwiOkIudG9EYXRhVVJMKFwiaW1hZ2UvcG5nXCIpfSl9ZnVuY3Rpb24ga3QodCxlKXtpZih2b2lkIDAhPT10KXt2YXIgcj1VKHQpO3JldHVybiByWzBdPU1hdGgucm91bmQoclswXSksclsxXT1NYXRoLnJvdW5kKHJbMV0pLHJbMl09TWF0aC5yb3VuZChyWzJdKSxLKz1lLFErPXJbMF0qZSx0dCs9clsxXSplLGV0Kz1yWzJdKmUscn1yZXR1cm5bMCwwLDAsMF19ZnVuY3Rpb24gQXQodCxlLHIsbil7dmFyIGk9dFtyLmJpbjBdO2lmKHZvaWQgMD09PWkpcmV0dXJuIGt0KHZvaWQgMCwxKTt2YXIgYSxvPXRbci5iaW4xXSxzPWVbci5iaW4wXSxsPWVbci5iaW4xXSxjPW8taXx8MCx1PXMtaXx8MDtyZXR1cm4gYT12b2lkIDA9PT1vP3ZvaWQgMD09PWw/MDp2b2lkIDA9PT1zPzIqKGwtaSk6MiooMipsLXMtaSkvMzp2b2lkIDA9PT1sP3ZvaWQgMD09PXM/MDoyKigyKmktby1zKS8zOnZvaWQgMD09PXM/MiooMipsLW8taSkvMzpsK2ktby1zLGt0KGkrci5mcmFjKmMrbi5mcmFjKih1K3IuZnJhYyphKSl9fSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGVcIjo1OTAsXCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiOjY3OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LGQzOjE1NSx0aW55Y29sb3IyOjUyMn1dLDk2MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7bi5zZWxlY3QodCkuc2VsZWN0QWxsKFwiLmhtIGltYWdlXCIpLnN0eWxlKFwib3BhY2l0eVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnRyYWNlLm9wYWNpdHl9KX19LHtkMzoxNTV9XSw5NjE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyExPT09cihcInpzbW9vdGhcIikmJihyKFwieGdhcFwiKSxyKFwieWdhcFwiKSkscihcInpob3ZlcmZvcm1hdFwiKX19LHt9XSw5NjI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpO2Z1bmN0aW9uIG8odCxlKXt2YXIgcj1lKHQpO3JldHVyblwic2NhbGVkXCI9PT0ocj9lKHQrXCJ0eXBlXCIsXCJhcnJheVwiKTpcInNjYWxlZFwiKSYmKGUodCtcIjBcIiksZShcImRcIit0KSkscn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyxsLGMpe3ZhciB1LGgsZj1yKFwielwiKTtpZihsPWx8fFwieFwiLGM9Y3x8XCJ5XCIsdm9pZCAwPT09Znx8IWYubGVuZ3RoKXJldHVybiAwO2lmKGkuaXNBcnJheTFEKHQueikpe3U9cihsKSxoPXIoYyk7dmFyIHA9aS5taW5Sb3dMZW5ndGgodSksZD1pLm1pblJvd0xlbmd0aChoKTtpZigwPT09cHx8MD09PWQpcmV0dXJuIDA7ZS5fbGVuZ3RoPU1hdGgubWluKHAsZCxmLmxlbmd0aCl9ZWxzZXtpZih1PW8obCxyKSxoPW8oYyxyKSwhZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9ITAsYT0hMSxvPSExLHM9MDtzPHQubGVuZ3RoO3MrKyl7aWYoZT10W3NdLCFpLmlzQXJyYXlPclR5cGVkQXJyYXkoZSkpe3I9ITE7YnJlYWt9ZS5sZW5ndGg+MCYmKGE9ITApO2Zvcih2YXIgbD0wO2w8ZS5sZW5ndGg7bCsrKWlmKG4oZVtsXSkpe289ITA7YnJlYWt9fXJldHVybiByJiZhJiZvfShmKSlyZXR1cm4gMDtyKFwidHJhbnNwb3NlXCIpLGUuX2xlbmd0aD1udWxsfXJldHVybiBhLmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiaGFuZGxlVHJhY2VEZWZhdWx0c1wiKSh0LGUsW2wsY10scyksITB9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sOTYzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7Zm9yKHZhciBuPXQoXCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxzPXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsLGw9W1wielwiLFwieFwiLFwieDBcIixcImR4XCIsXCJ5XCIsXCJ5MFwiLFwiZHlcIixcInRleHRcIixcInRyYW5zcG9zZVwiLFwieHR5cGVcIixcInl0eXBlXCJdLGM9e30sdT0wO3U8bC5sZW5ndGg7dSsrKXt2YXIgaD1sW3VdO2NbaF09bltoXX1vKGMsaShcIlwiLHtjTGV0dGVyOlwielwiLGF1dG9Db2xvckRmbHQ6ITF9KSx7Y29sb3JiYXI6YX0pLGUuZXhwb3J0cz1zKGMsXCJjYWxjXCIsXCJuZXN0ZWRcIil9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXNcIjo5NDh9XSw5NjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2wtaGVhdG1hcDJkXCIpLGk9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGE9dChcIi4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIik7ZnVuY3Rpb24gbyh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMudHlwZT1cImhlYXRtYXBnbFwiLHRoaXMubmFtZT1cIlwiLHRoaXMuaG92ZXJpbmZvPVwiYWxsXCIsdGhpcy54RGF0YT1bXSx0aGlzLnlEYXRhPVtdLHRoaXMuekRhdGE9W10sdGhpcy50ZXh0TGFiZWxzPVtdLHRoaXMuaWRUb0luZGV4PVtdLHRoaXMuYm91bmRzPVswLDAsMCwwXSx0aGlzLm9wdGlvbnM9e3o6W10seDpbXSx5OltdLHNoYXBlOlswLDBdLGNvbG9yTGV2ZWxzOlswXSxjb2xvclZhbHVlczpbMCwwLDAsMV19LHRoaXMuaGVhdG1hcD1uKHQuZ2xwbG90LHRoaXMub3B0aW9ucyksdGhpcy5oZWF0bWFwLl90cmFjZT10aGlzfXZhciBzPW8ucHJvdG90eXBlO3MuaGFuZGxlUGljaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMscj1lLnNoYXBlLG49dC5wb2ludElkLGk9biVyWzBdLGE9TWF0aC5mbG9vcihuL3JbMF0pLG89bjtyZXR1cm57dHJhY2U6dGhpcyxkYXRhQ29vcmQ6dC5kYXRhQ29vcmQsdHJhY2VDb29yZDpbZS54W2ldLGUueVthXSxlLnpbb11dLHRleHRMYWJlbDp0aGlzLnRleHRMYWJlbHNbbl0sbmFtZTp0aGlzLm5hbWUscG9pbnRJbmRleDpbYSxpXSxob3ZlcmluZm86dGhpcy5ob3ZlcmluZm99fSxzLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF07dGhpcy5pbmRleD10LmluZGV4LHRoaXMubmFtZT10Lm5hbWUsdGhpcy5ob3ZlcmluZm89dC5ob3ZlcmluZm87dmFyIG49ci56O3RoaXMub3B0aW9ucy56PVtdLmNvbmNhdC5hcHBseShbXSxuKTt2YXIgbz1uWzBdLmxlbmd0aCxzPW4ubGVuZ3RoO3RoaXMub3B0aW9ucy5zaGFwZT1bbyxzXSx0aGlzLm9wdGlvbnMueD1yLngsdGhpcy5vcHRpb25zLnk9ci55O3ZhciBsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmNvbG9yc2NhbGUscj10LnptaW4sbj10LnptYXgsaT1lLmxlbmd0aCxvPW5ldyBBcnJheShpKSxzPW5ldyBBcnJheSg0KmkpLGw9MDtsPGk7bCsrKXt2YXIgYz1lW2xdLHU9YShjWzFdKTtvW2xdPXIrY1swXSoobi1yKTtmb3IodmFyIGg9MDtoPDQ7aCsrKXNbNCpsK2hdPXVbaF19cmV0dXJue2NvbG9yTGV2ZWxzOm8sY29sb3JWYWx1ZXM6c319KHQpO3RoaXMub3B0aW9ucy5jb2xvckxldmVscz1sLmNvbG9yTGV2ZWxzLHRoaXMub3B0aW9ucy5jb2xvclZhbHVlcz1sLmNvbG9yVmFsdWVzLHRoaXMudGV4dExhYmVscz1bXS5jb25jYXQuYXBwbHkoW10sdC50ZXh0KSx0aGlzLmhlYXRtYXAudXBkYXRlKHRoaXMub3B0aW9ucyk7dmFyIGM9dGhpcy5zY2VuZS54YXhpcyx1PXRoaXMuc2NlbmUueWF4aXM7dC5fZXh0cmVtZXNbYy5faWRdPWkuZmluZEV4dHJlbWVzKGMsci54KSx0Ll9leHRyZW1lc1t1Ll9pZF09aS5maW5kRXh0cmVtZXModSxyLnkpfSxzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmhlYXRtYXAuZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW5ldyBvKHQsZS51aWQpO3JldHVybiBuLnVwZGF0ZShlLHIpLG59fSx7XCIuLi8uLi9saWIvc3RyMnJnYmFycmF5XCI6NzI0LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCJnbC1oZWF0bWFwMmRcIjoyNDh9XSw5NjU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuLi9oZWF0bWFwL2RlZmF1bHRzXCIpLG4uY29sb3JiYXI9dChcIi4uL2hlYXRtYXAvY29sb3JiYXJcIiksbi5jYWxjPXQoXCIuLi9oZWF0bWFwL2NhbGNcIiksbi5wbG90PXQoXCIuL2NvbnZlcnRcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJoZWF0bWFwZ2xcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9nbDJkXCIpLG4uY2F0ZWdvcmllcz1bXCJnbFwiLFwiZ2wyZFwiLFwiMmRNYXBcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9nbDJkXCI6Nzg3LFwiLi4vaGVhdG1hcC9jYWxjXCI6OTQ5LFwiLi4vaGVhdG1hcC9jb2xvcmJhclwiOjk1MSxcIi4uL2hlYXRtYXAvZGVmYXVsdHNcIjo5NTMsXCIuL2F0dHJpYnV0ZXNcIjo5NjMsXCIuL2NvbnZlcnRcIjo5NjR9XSw5NjY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vYmFyL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIiksYT10KFwiLi9iaW5fYXR0cmlidXRlc1wiKSxvPXQoXCIuL2NvbnN0YW50c1wiKSxzPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXt4Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx5Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx0ZXh0OnMoe30sbi50ZXh0LHt9KSxob3ZlcnRleHQ6cyh7fSxuLmhvdmVydGV4dCx7fSksb3JpZW50YXRpb246bi5vcmllbnRhdGlvbixoaXN0ZnVuYzp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiY291bnRcIixcInN1bVwiLFwiYXZnXCIsXCJtaW5cIixcIm1heFwiXSxkZmx0OlwiY291bnRcIixlZGl0VHlwZTpcImNhbGNcIn0saGlzdG5vcm06e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcIlwiLFwicGVyY2VudFwiLFwicHJvYmFiaWxpdHlcIixcImRlbnNpdHlcIixcInByb2JhYmlsaXR5IGRlbnNpdHlcIl0sZGZsdDpcIlwiLGVkaXRUeXBlOlwiY2FsY1wifSxjdW11bGF0aXZlOntlbmFibGVkOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEsZWRpdFR5cGU6XCJjYWxjXCJ9LGRpcmVjdGlvbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiaW5jcmVhc2luZ1wiLFwiZGVjcmVhc2luZ1wiXSxkZmx0OlwiaW5jcmVhc2luZ1wiLGVkaXRUeXBlOlwiY2FsY1wifSxjdXJyZW50YmluOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJpbmNsdWRlXCIsXCJleGNsdWRlXCIsXCJoYWxmXCJdLGRmbHQ6XCJpbmNsdWRlXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGVkaXRUeXBlOlwiY2FsY1wifSxuYmluc3g6e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsbWluOjAsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifSx4YmluczphKFwieFwiLCEwKSxuYmluc3k6e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsbWluOjAsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifSx5YmluczphKFwieVwiLCEwKSxhdXRvYmlueDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0Om51bGwsZWRpdFR5cGU6XCJjYWxjXCJ9LGF1dG9iaW55Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6bnVsbCxlZGl0VHlwZTpcImNhbGNcIn0saG92ZXJ0ZW1wbGF0ZTppKHt9LHtrZXlzOm8uZXZlbnREYXRhS2V5c30pLG1hcmtlcjpuLm1hcmtlcixvZmZzZXRncm91cDpuLm9mZnNldGdyb3VwLGFsaWdubWVudGdyb3VwOm4uYWxpZ25tZW50Z3JvdXAsc2VsZWN0ZWQ6bi5zZWxlY3RlZCx1bnNlbGVjdGVkOm4udW5zZWxlY3RlZCxfZGVwcmVjYXRlZDp7YmFyZGlyOm4uX2RlcHJlY2F0ZWQuYmFyZGlyfX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uL2Jhci9hdHRyaWJ1dGVzXCI6ODM5LFwiLi9iaW5fYXR0cmlidXRlc1wiOjk2OCxcIi4vY29uc3RhbnRzXCI6OTcyfV0sOTY3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49MCxpPTA7aTxyO2krKyllW2ldPyh0W2ldLz1lW2ldLG4rPXRbaV0pOnRbaV09bnVsbDtyZXR1cm4gbn19LHt9XSw5Njg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm57c3RhcnQ6e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImNhbGNcIn0sZW5kOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHNpemU6e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9fX0se31dLDk2OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKTtlLmV4cG9ydHM9e2NvdW50OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gclt0XSsrLDF9LHN1bTpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1pW2VdO3JldHVybiBuKGEpPyhhPU51bWJlcihhKSxyW3RdKz1hLGEpOjB9LGF2ZzpmdW5jdGlvbih0LGUscixpLGEpe3ZhciBvPWlbZV07cmV0dXJuIG4obykmJihvPU51bWJlcihvKSxyW3RdKz1vLGFbdF0rKyksMH0sbWluOmZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPWlbZV07aWYobihhKSl7aWYoYT1OdW1iZXIoYSksIW4oclt0XSkpcmV0dXJuIHJbdF09YSxhO2lmKHJbdF0+YSl7dmFyIG89YS1yW3RdO3JldHVybiByW3RdPWEsb319cmV0dXJuIDB9LG1heDpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1pW2VdO2lmKG4oYSkpe2lmKGE9TnVtYmVyKGEpLCFuKHJbdF0pKXJldHVybiByW3RdPWEsYTtpZihyW3RdPGEpe3ZhciBvPWEtclt0XTtyZXR1cm4gclt0XT1hLG99fXJldHVybiAwfX19LHtcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sOTcwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIiksaT1uLk9ORUFWR1lFQVIsYT1uLk9ORUFWR01PTlRILG89bi5PTkVEQVkscz1uLk9ORUhPVVIsbD1uLk9ORU1JTixjPW4uT05FU0VDLHU9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLnRpY2tJbmNyZW1lbnQ7ZnVuY3Rpb24gaCh0LGUscixuKXtpZih0KmU8PTApcmV0dXJuIDEvMDtmb3IodmFyIGk9TWF0aC5hYnMoZS10KSxhPVwiZGF0ZVwiPT09ci50eXBlLG89ZihpLGEpLHM9MDtzPDEwO3MrKyl7dmFyIGw9Zig4MCpvLGEpO2lmKG89PT1sKWJyZWFrO2lmKCFwKGwsdCxlLGEscixuKSlicmVhaztvPWx9cmV0dXJuIG99ZnVuY3Rpb24gZih0LGUpe3JldHVybiBlJiZ0PmM/dD5vP3Q+MS4xKmk/aTp0PjEuMSphP2E6bzp0PnM/czp0Pmw/bDpjOk1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjEwKSl9ZnVuY3Rpb24gcCh0LGUscixuLGEscyl7aWYobiYmdD5vKXt2YXIgbD1kKGUsYSxzKSxjPWQocixhLHMpLHU9dD09PWk/MDoxO3JldHVybiBsW3VdIT09Y1t1XX1yZXR1cm4gTWF0aC5mbG9vcihyL3QpLU1hdGguZmxvb3IoZS90KT4uMX1mdW5jdGlvbiBkKHQsZSxyKXt2YXIgbj1lLmMyZCh0LGkscikuc3BsaXQoXCItXCIpO3JldHVyblwiXCI9PT1uWzBdJiYobi51bnNoaWZ0KCksblswXT1cIi1cIituWzBdKSxufWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGEpe3ZhciBzLGwsYz0tMS4xKmUsZj0tLjEqZSxwPXQtZixkPXJbMF0sZz1yWzFdLHY9TWF0aC5taW4oaChkK2YsZCtwLG4sYSksaChnK2YsZytwLG4sYSkpLG09TWF0aC5taW4oaChkK2MsZCtmLG4sYSksaChnK2MsZytmLG4sYSkpO2lmKHY+bSYmbTxNYXRoLmFicyhnLWQpLzRlMz8ocz12LGw9ITEpOihzPU1hdGgubWluKHYsbSksbD0hMCksXCJkYXRlXCI9PT1uLnR5cGUmJnM+byl7dmFyIHk9cz09PWk/MTo2LHg9cz09PWk/XCJNMTJcIjpcIk0xXCI7cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIG89bi5jMmQoZSxpLGEpLHM9by5pbmRleE9mKFwiLVwiLHkpO3M+MCYmKG89by5zdWJzdHIoMCxzKSk7dmFyIGM9bi5kMmMobywwLGEpO2lmKGM8ZSl7dmFyIGg9dShjLHgsITEsYSk7KGMraCkvMjxlK3QmJihjPWgpfXJldHVybiByJiZsP3UoYyx4LCEwLGEpOmN9fXJldHVybiBmdW5jdGlvbihlLHIpe3ZhciBuPXMqTWF0aC5yb3VuZChlL3MpO3JldHVybiBuK3MvMTA8ZSYmbisuOSpzPGUrdCYmKG4rPXMpLHImJmwmJihuLT1zKSxufX19LHtcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OX1dLDk3MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksbz10KFwiLi4vYmFyL2FycmF5c190b19jYWxjZGF0YVwiKSxzPXQoXCIuL2Jpbl9mdW5jdGlvbnNcIiksbD10KFwiLi9ub3JtX2Z1bmN0aW9uc1wiKSxjPXQoXCIuL2F2ZXJhZ2VcIiksdT10KFwiLi9iaW5fbGFiZWxfdmFsc1wiKTtmdW5jdGlvbiBoKHQsZSxyLG8scyl7dmFyIGwsYyx1LGYscCxkLGcsdj1vK1wiYmluc1wiLG09dC5fZnVsbExheW91dCx5PVwib3ZlcmxheVwiPT09bS5iYXJtb2RlLHg9XCJkYXRlXCI9PT1yLnR5cGU/ZnVuY3Rpb24odCl7cmV0dXJuIHR8fDA9PT10P2kuY2xlYW5EYXRlKHQsbnVsbCxyLmNhbGVuZGFyKTpudWxsfTpmdW5jdGlvbih0KXtyZXR1cm4gbih0KT9OdW1iZXIodCk6bnVsbH07ZnVuY3Rpb24gYih0LGUscil7ZVt0K1wiRm91bmRcIl0/KGVbdF09eChlW3RdKSxudWxsPT09ZVt0XSYmKGVbdF09clt0XSkpOihkW3RdPWVbdF09clt0XSxpLm5lc3RlZFByb3BlcnR5KGNbMF0sditcIi5cIit0KS5zZXQoclt0XSkpfXZhciBfPW0uX2hpc3RvZ3JhbUJpbk9wdHNbZS5fZ3JvdXBOYW1lXTtpZihlLl9hdXRvQmluRmluaXNoZWQpZGVsZXRlIGUuX2F1dG9CaW5GaW5pc2hlZDtlbHNle2M9Xy50cmFjZXM7dmFyIHc9Xy5zaXplRm91bmQsaz1bXTtkPWNbMF0uX2F1dG9CaW49e307dmFyIEE9ITA7Zm9yKGw9MDtsPGMubGVuZ3RoO2wrKykodT1jW2xdKS52aXNpYmxlJiYocD11Ll9wb3MwPXIubWFrZUNhbGNkYXRhKHUsbyksaz1pLmNvbmNhdChrLHApLGRlbGV0ZSB1Ll9hdXRvQmluRmluaXNoZWQsITA9PT1lLnZpc2libGUmJihBP0E9ITE6KGRlbGV0ZSB1Ll9hdXRvQmluLHUuX2F1dG9CaW5GaW5pc2hlZD0xKSkpO2Y9Y1swXVtvK1wiY2FsZW5kYXJcIl07dmFyIFQ9YS5hdXRvQmluKGsscixfLm5iaW5zLCExLGYsdyYmXy5zaXplKTtpZih5JiYwPT09VC5fZGF0YVNwYW4mJlwiY2F0ZWdvcnlcIiE9PXIudHlwZSYmXCJtdWx0aWNhdGVnb3J5XCIhPT1yLnR5cGUpe2lmKHMpcmV0dXJuW1QscCwhMF07VD1mdW5jdGlvbih0LGUscixuLGEpe3ZhciBvLHMsbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLnhheGlzLG49ZS55YXhpcyxpPWUub3JpZW50YXRpb24sYT1bXSxvPXQuX2Z1bGxEYXRhLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTtcImhpc3RvZ3JhbVwiPT09bC50eXBlJiYhMD09PWwudmlzaWJsZSYmbC5vcmllbnRhdGlvbj09PWkmJmwueGF4aXM9PT1yJiZsLnlheGlzPT09biYmYS5wdXNoKGwpfXJldHVybiBhfSh0LGUpLGM9ITEsdT0xLzAsZj1bZV07Zm9yKG89MDtvPGwubGVuZ3RoO28rKylpZigocz1sW29dKT09PWUpYz0hMDtlbHNlIGlmKGMpe3ZhciBwPWgodCxzLHIsbiwhMCksZD1wWzBdLGc9cFsyXTtzLl9hdXRvQmluRmluaXNoZWQ9MSxzLl9wb3MwPXBbMV0sZz9mLnB1c2gocyk6dT1NYXRoLm1pbih1LGQuc2l6ZSl9ZWxzZSB1PU1hdGgubWluKHUsc1thXS5zaXplKTt2YXIgdj1uZXcgQXJyYXkoZi5sZW5ndGgpO2ZvcihvPTA7bzxmLmxlbmd0aDtvKyspZm9yKHZhciBtPWZbb10uX3BvczAseT0wO3k8bS5sZW5ndGg7eSsrKWlmKHZvaWQgMCE9PW1beV0pe3Zbb109bVt5XTticmVha31pc0Zpbml0ZSh1KXx8KHU9aS5kaXN0aW5jdFZhbHModikubWluRGlmZik7Zm9yKG89MDtvPGYubGVuZ3RoO28rKyl7dmFyIHg9KHM9ZltvXSlbbitcImNhbGVuZGFyXCJdO3MuX2lucHV0W2FdPXNbYV09e3N0YXJ0OnIuYzJyKHZbb10tdS8yLDAseCksZW5kOnIuYzJyKHZbb10rdS8yLDAseCksc2l6ZTp1fX1yZXR1cm4gZVthXX0odCxlLHIsbyx2KX0oZz11LmN1bXVsYXRpdmUpLmVuYWJsZWQmJlwiaW5jbHVkZVwiIT09Zy5jdXJyZW50YmluJiYoXCJkZWNyZWFzaW5nXCI9PT1nLmRpcmVjdGlvbj9ULnN0YXJ0PXIuYzJyKGEudGlja0luY3JlbWVudChyLnIyYyhULnN0YXJ0LDAsZiksVC5zaXplLCEwLGYpKTpULmVuZD1yLmMycihhLnRpY2tJbmNyZW1lbnQoci5yMmMoVC5lbmQsMCxmKSxULnNpemUsITEsZikpKSxfLnNpemU9VC5zaXplLHd8fChkLnNpemU9VC5zaXplLGkubmVzdGVkUHJvcGVydHkoY1swXSx2K1wiLnNpemVcIikuc2V0KFQuc2l6ZSkpLGIoXCJzdGFydFwiLF8sVCksYihcImVuZFwiLF8sVCl9cD1lLl9wb3MwLGRlbGV0ZSBlLl9wb3MwO3ZhciBNPWUuX2lucHV0W3ZdfHx7fSxTPWkuZXh0ZW5kRmxhdCh7fSxfKSxFPV8uc3RhcnQsQz1yLnIybChNLnN0YXJ0KSxMPXZvaWQgMCE9PUM7aWYoKF8uc3RhcnRGb3VuZHx8TCkmJkMhPT1yLnIybChFKSl7dmFyIHo9TD9DOmkuYWdnTnVtcyhNYXRoLm1pbixudWxsLHApLE89e3R5cGU6XCJjYXRlZ29yeVwiPT09ci50eXBlfHxcIm11bHRpY2F0ZWdvcnlcIj09PXIudHlwZT9cImxpbmVhclwiOnIudHlwZSxyMmw6ci5yMmwsZHRpY2s6Xy5zaXplLHRpY2swOkUsY2FsZW5kYXI6ZixyYW5nZTpbeixhLnRpY2tJbmNyZW1lbnQoeixfLnNpemUsITEsZildLm1hcChyLmwycil9LEk9YS50aWNrRmlyc3QoTyk7ST5yLnIybCh6KSYmKEk9YS50aWNrSW5jcmVtZW50KEksXy5zaXplLCEwLGYpKSxTLnN0YXJ0PXIubDJyKEkpLEx8fGkubmVzdGVkUHJvcGVydHkoZSx2K1wiLnN0YXJ0XCIpLnNldChTLnN0YXJ0KX12YXIgRD1fLmVuZCxQPXIucjJsKE0uZW5kKSxSPXZvaWQgMCE9PVA7aWYoKF8uZW5kRm91bmR8fFIpJiZQIT09ci5yMmwoRCkpe3ZhciBGPVI/UDppLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxwKTtTLmVuZD1yLmwycihGKSxSfHxpLm5lc3RlZFByb3BlcnR5KGUsditcIi5zdGFydFwiKS5zZXQoUy5lbmQpfXZhciBCPVwiYXV0b2JpblwiK287cmV0dXJuITE9PT1lLl9pbnB1dFtCXSYmKGUuX2lucHV0W3ZdPWkuZXh0ZW5kRmxhdCh7fSxlW3ZdfHx7fSksZGVsZXRlIGUuX2lucHV0W0JdLGRlbGV0ZSBlW0JdKSxbUyxwXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZighMD09PWUudmlzaWJsZSl7dmFyIHIsZixwLGQsZz1bXSx2PVtdLG09YS5nZXRGcm9tSWQodCxcImhcIj09PWUub3JpZW50YXRpb24/ZS55YXhpc3x8XCJ5XCI6ZS54YXhpc3x8XCJ4XCIpLHk9XCJoXCI9PT1lLm9yaWVudGF0aW9uP1wieVwiOlwieFwiLHg9e3g6XCJ5XCIseTpcInhcIn1beV0sYj1lW3krXCJjYWxlbmRhclwiXSxfPWUuY3VtdWxhdGl2ZSx3PWgodCxlLG0seSksaz13WzBdLEE9d1sxXSxUPVwic3RyaW5nXCI9PXR5cGVvZiBrLnNpemUsTT1bXSxTPVQ/TTprLEU9W10sQz1bXSxMPVtdLHo9MCxPPWUuaGlzdG5vcm0sST1lLmhpc3RmdW5jLEQ9LTEhPT1PLmluZGV4T2YoXCJkZW5zaXR5XCIpO18uZW5hYmxlZCYmRCYmKE89Ty5yZXBsYWNlKC8gP2RlbnNpdHkkLyxcIlwiKSxEPSExKTt2YXIgUCxSPVwibWF4XCI9PT1JfHxcIm1pblwiPT09ST9udWxsOjAsRj1zLmNvdW50LEI9bFtPXSxOPSExLGo9ZnVuY3Rpb24odCl7cmV0dXJuIG0ucjJjKHQsMCxiKX07Zm9yKGkuaXNBcnJheU9yVHlwZWRBcnJheShlW3hdKSYmXCJjb3VudFwiIT09SSYmKFA9ZVt4XSxOPVwiYXZnXCI9PT1JLEY9c1tJXSkscj1qKGsuc3RhcnQpLHA9aihrLmVuZCkrKHItYS50aWNrSW5jcmVtZW50KHIsay5zaXplLCExLGIpKS8xZTY7cjxwJiZnLmxlbmd0aDwxZTYmJihmPWEudGlja0luY3JlbWVudChyLGsuc2l6ZSwhMSxiKSxnLnB1c2goKHIrZikvMiksdi5wdXNoKFIpLEwucHVzaChbXSksTS5wdXNoKHIpLEQmJkUucHVzaCgxLyhmLXIpKSxOJiZDLnB1c2goMCksIShmPD1yKSk7KXI9ZjtNLnB1c2gociksVHx8XCJkYXRlXCIhPT1tLnR5cGV8fChTPXtzdGFydDpqKFMuc3RhcnQpLGVuZDpqKFMuZW5kKSxzaXplOlMuc2l6ZX0pO3ZhciBWLFU9di5sZW5ndGgscT0hMCxIPTEvMCxHPTEvMCxZPXt9O2ZvcihyPTA7cjxBLmxlbmd0aDtyKyspe3ZhciBXPUFbcl07KGQ9aS5maW5kQmluKFcsUykpPj0wJiZkPFUmJih6Kz1GKGQscix2LFAsQykscSYmTFtkXS5sZW5ndGgmJlchPT1BW0xbZF1bMF1dJiYocT0hMSksTFtkXS5wdXNoKHIpLFlbcl09ZCxIPU1hdGgubWluKEgsVy1NW2RdKSxHPU1hdGgubWluKEcsTVtkKzFdLVcpKX1xfHwoVj11KEgsRyxNLG0sYikpLE4mJih6PWModixDKSksQiYmQih2LHosRSksXy5lbmFibGVkJiZmdW5jdGlvbih0LGUscil7dmFyIG4saSxhO2Z1bmN0aW9uIG8oZSl7YT10W2VdLHRbZV0vPTJ9ZnVuY3Rpb24gcyhlKXtpPXRbZV0sdFtlXT1hK2kvMixhKz1pfWlmKFwiaGFsZlwiPT09cilpZihcImluY3JlYXNpbmdcIj09PWUpZm9yKG8oMCksbj0xO248dC5sZW5ndGg7bisrKXMobik7ZWxzZSBmb3Iobyh0Lmxlbmd0aC0xKSxuPXQubGVuZ3RoLTI7bj49MDtuLS0pcyhuKTtlbHNlIGlmKFwiaW5jcmVhc2luZ1wiPT09ZSl7Zm9yKG49MTtuPHQubGVuZ3RoO24rKyl0W25dKz10W24tMV07XCJleGNsdWRlXCI9PT1yJiYodC51bnNoaWZ0KDApLHQucG9wKCkpfWVsc2V7Zm9yKG49dC5sZW5ndGgtMjtuPj0wO24tLSl0W25dKz10W24rMV07XCJleGNsdWRlXCI9PT1yJiYodC5wdXNoKDApLHQuc2hpZnQoKSl9fSh2LF8uZGlyZWN0aW9uLF8uY3VycmVudGJpbik7dmFyIFg9TWF0aC5taW4oZy5sZW5ndGgsdi5sZW5ndGgpLFo9W10sJD0wLEo9WC0xO2ZvcihyPTA7cjxYO3IrKylpZih2W3JdKXskPXI7YnJlYWt9Zm9yKHI9WC0xO3I+PSQ7ci0tKWlmKHZbcl0pe0o9cjticmVha31mb3Iocj0kO3I8PUo7cisrKWlmKG4oZ1tyXSkmJm4odltyXSkpe3ZhciBLPXtwOmdbcl0sczp2W3JdLGI6MH07Xy5lbmFibGVkfHwoSy5wdHM9TFtyXSxxP0sucGgwPUsucGgxPUxbcl0ubGVuZ3RoP0FbTFtyXVswXV06Z1tyXTooSy5waDA9VihNW3JdKSxLLnBoMT1WKE1bcisxXSwhMCkpKSxaLnB1c2goSyl9cmV0dXJuIDE9PT1aLmxlbmd0aCYmKFpbMF0ud2lkdGgxPWEudGlja0luY3JlbWVudChaWzBdLnAsay5zaXplLCExLGIpLVpbMF0ucCksbyhaLGUpLGkuaXNBcnJheU9yVHlwZWRBcnJheShlLnNlbGVjdGVkcG9pbnRzKSYmaS50YWdTZWxlY3RlZChaLGUsWSksWn19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL2Jhci9hcnJheXNfdG9fY2FsY2RhdGFcIjo4MzgsXCIuL2F2ZXJhZ2VcIjo5NjcsXCIuL2Jpbl9mdW5jdGlvbnNcIjo5NjksXCIuL2Jpbl9sYWJlbF92YWxzXCI6OTcwLFwiLi9ub3JtX2Z1bmN0aW9uc1wiOjk3OCxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sOTcyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtldmVudERhdGFLZXlzOltcImJpbk51bWJlclwiXX19LHt9XSw5NzM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9bi5uZXN0ZWRQcm9wZXJ0eSxhPXQoXCIuLi9iYXIvZGVmYXVsdHNcIikuaGFuZGxlR3JvdXBpbmdEZWZhdWx0cyxvPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIikuZ2V0QXhpc0dyb3VwLHM9dChcIi4vYXR0cmlidXRlc1wiKSxsPXt4Olt7YVN0cjpcInhiaW5zLnN0YXJ0XCIsbmFtZTpcInN0YXJ0XCJ9LHthU3RyOlwieGJpbnMuZW5kXCIsbmFtZTpcImVuZFwifSx7YVN0cjpcInhiaW5zLnNpemVcIixuYW1lOlwic2l6ZVwifSx7YVN0cjpcIm5iaW5zeFwiLG5hbWU6XCJuYmluc1wifV0seTpbe2FTdHI6XCJ5Ymlucy5zdGFydFwiLG5hbWU6XCJzdGFydFwifSx7YVN0cjpcInliaW5zLmVuZFwiLG5hbWU6XCJlbmRcIn0se2FTdHI6XCJ5Ymlucy5zaXplXCIsbmFtZTpcInNpemVcIn0se2FTdHI6XCJuYmluc3lcIixuYW1lOlwibmJpbnNcIn1dfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixjLHUsaCxmLHAsZCxnPWUuX2hpc3RvZ3JhbUJpbk9wdHM9e30sdj1cIm92ZXJsYXlcIj09PWUuYmFybW9kZTtmdW5jdGlvbiBtKHQpe3JldHVybiBuLmNvZXJjZSh1Ll9pbnB1dCx1LHMsdCl9Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKylcImhpc3RvZ3JhbVwiPT09KHU9dFtyXSkudHlwZSYmKGRlbGV0ZSB1Ll9hdXRvQmluRmluaXNoZWQsZj1cInZcIj09PXUub3JpZW50YXRpb24/XCJ4XCI6XCJ5XCIsKGQ9Z1twPXUuX2dyb3VwTmFtZT12P3UudWlkOm8oZSx1LnhheGlzKStvKGUsdS55YXhpcykrZl0pP2QudHJhY2VzLnB1c2godSk6ZD1nW3BdPXt0cmFjZXM6W3VdLGRpcmVjdGlvbjpmfSxhKHUuX2lucHV0LHUsZSxtKSk7Zm9yKHAgaW4gZyl7Zj0oZD1nW3BdKS5kaXJlY3Rpb247dmFyIHk9bFtmXTtmb3IoYz0wO2M8eS5sZW5ndGg7YysrKXt2YXIgeD15W2NdLGI9eC5uYW1lO2lmKFwibmJpbnNcIiE9PWJ8fCFkLnNpemVGb3VuZCl7dmFyIF89eC5hU3RyO2ZvcihyPTA7cjxkLnRyYWNlcy5sZW5ndGg7cisrKXtpZihoPSh1PWQudHJhY2VzW3JdKS5faW5wdXQsdm9pZCAwIT09aShoLF8pLmdldCgpKXtkW2JdPW0oXyksZFtiK1wiRm91bmRcIl09ITA7YnJlYWt9dmFyIHc9dS5fYXV0b0Jpbjt3JiZ3W2JdJiZpKHUsXykuc2V0KHdbYl0pfWlmKFwic3RhcnRcIj09PWJ8fFwiZW5kXCI9PT1iKWZvcig7cjxkLnRyYWNlcy5sZW5ndGg7cisrKW0oXywoKHU9ZC50cmFjZXNbcl0pLl9hdXRvQmlufHx7fSlbYl0pO1wibmJpbnNcIiE9PWJ8fGQuc2l6ZUZvdW5kfHxkLm5iaW5zRm91bmR8fCh1PWQudHJhY2VzWzBdLGRbYl09bShfKSl9fX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIjo3NTIsXCIuLi9iYXIvZGVmYXVsdHNcIjo4NDMsXCIuL2F0dHJpYnV0ZXNcIjo5NjZ9XSw5NzQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksbz10KFwiLi4vYmFyL3N0eWxlX2RlZmF1bHRzXCIpLHM9dChcIi4vYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7ZnVuY3Rpb24gYyhyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUscyxyLG4pfXZhciB1PWMoXCJ4XCIpLGg9YyhcInlcIik7YyhcImN1bXVsYXRpdmUuZW5hYmxlZFwiKSYmKGMoXCJjdW11bGF0aXZlLmRpcmVjdGlvblwiKSxjKFwiY3VtdWxhdGl2ZS5jdXJyZW50YmluXCIpKSxjKFwidGV4dFwiKSxjKFwiaG92ZXJ0ZXh0XCIpLGMoXCJob3ZlcnRlbXBsYXRlXCIpO3ZhciBmPWMoXCJvcmllbnRhdGlvblwiLGgmJiF1P1wiaFwiOlwidlwiKSxwPVwidlwiPT09Zj9cInhcIjpcInlcIixkPVwidlwiPT09Zj9cInlcIjpcInhcIixnPXUmJmg/TWF0aC5taW4oaS5taW5Sb3dMZW5ndGgodSkmJmkubWluUm93TGVuZ3RoKGgpKTppLm1pblJvd0xlbmd0aChlW3BdfHxbXSk7aWYoZyl7ZS5fbGVuZ3RoPWcsbi5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcImhhbmRsZVRyYWNlRGVmYXVsdHNcIikodCxlLFtcInhcIixcInlcIl0sbCksZVtkXSYmYyhcImhpc3RmdW5jXCIpLGMoXCJoaXN0bm9ybVwiKSxjKFwiYXV0b2JpblwiK3ApLG8odCxlLGMscixsKSxpLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxjKTt2YXIgdj0oZS5tYXJrZXIubGluZXx8e30pLmNvbG9yLG09bi5nZXRDb21wb25lbnRNZXRob2QoXCJlcnJvcmJhcnNcIixcInN1cHBseURlZmF1bHRzXCIpO20odCxlLHZ8fGEuZGVmYXVsdExpbmUse2F4aXM6XCJ5XCJ9KSxtKHQsZSx2fHxhLmRlZmF1bHRMaW5lLHtheGlzOlwieFwiLGluaGVyaXQ6XCJ5XCJ9KX1lbHNlIGUudmlzaWJsZT0hMX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL2Jhci9zdHlsZV9kZWZhdWx0c1wiOjg1MyxcIi4vYXR0cmlidXRlc1wiOjk2Nn1dLDk3NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe2lmKHQueD1cInhWYWxcImluIGU/ZS54VmFsOmUueCx0Lnk9XCJ5VmFsXCJpbiBlP2UueVZhbDplLnksXCJ6TGFiZWxWYWxcImluIGUmJih0Lno9ZS56TGFiZWxWYWwpLGUueGEmJih0LnhheGlzPWUueGEpLGUueWEmJih0LnlheGlzPWUueWEpLCEoci5jdW11bGF0aXZlfHx7fSkuZW5hYmxlZCl7dmFyIGEsbz1BcnJheS5pc0FycmF5KGkpP25bMF0ucHRzW2lbMF1dW2lbMV1dOm5baV0ucHRzO2lmKHQucG9pbnROdW1iZXJzPW8sdC5iaW5OdW1iZXI9dC5wb2ludE51bWJlcixkZWxldGUgdC5wb2ludE51bWJlcixkZWxldGUgdC5wb2ludEluZGV4LHIuX2luZGV4VG9Qb2ludHMpe2E9W107Zm9yKHZhciBzPTA7czxvLmxlbmd0aDtzKyspYT1hLmNvbmNhdChyLl9pbmRleFRvUG9pbnRzW29bc11dKX1lbHNlIGE9bzt0LnBvaW50SW5kaWNlcz1hfXJldHVybiB0fX0se31dLDk3NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9iYXIvaG92ZXJcIikuaG92ZXJQb2ludHMsaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIikuaG92ZXJMYWJlbFRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4odCxlLHIsYSk7aWYobyl7dmFyIHM9KHQ9b1swXSkuY2RbdC5pbmRleF0sbD10LmNkWzBdLnRyYWNlO2lmKCFsLmN1bXVsYXRpdmUuZW5hYmxlZCl7dmFyIGM9XCJoXCI9PT1sLm9yaWVudGF0aW9uP1wieVwiOlwieFwiO3RbYytcIkxhYmVsXCJdPWkodFtjK1wiYVwiXSxzLnBoMCxzLnBoMSl9cmV0dXJuIGwuaG92ZXJtcGxhdGUmJih0LmhvdmVydGVtcGxhdGU9bC5ob3ZlcnRlbXBsYXRlKSxvfX19LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vYmFyL2hvdmVyXCI6ODQ1fV0sOTc3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5sYXlvdXRBdHRyaWJ1dGVzPXQoXCIuLi9iYXIvbGF5b3V0X2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNyb3NzVHJhY2VEZWZhdWx0cz10KFwiLi9jcm9zc190cmFjZV9kZWZhdWx0c1wiKSxuLnN1cHBseUxheW91dERlZmF1bHRzPXQoXCIuLi9iYXIvbGF5b3V0X2RlZmF1bHRzXCIpLG4uY2FsYz10KFwiLi9jYWxjXCIpLG4uY3Jvc3NUcmFjZUNhbGM9dChcIi4uL2Jhci9jcm9zc190cmFjZV9jYWxjXCIpLmNyb3NzVHJhY2VDYWxjLG4ucGxvdD10KFwiLi4vYmFyL3Bsb3RcIiksbi5sYXllck5hbWU9XCJiYXJsYXllclwiLG4uc3R5bGU9dChcIi4uL2Jhci9zdHlsZVwiKS5zdHlsZSxuLnN0eWxlT25TZWxlY3Q9dChcIi4uL2Jhci9zdHlsZVwiKS5zdHlsZU9uU2VsZWN0LG4uY29sb3JiYXI9dChcIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyXCIpLG4uaG92ZXJQb2ludHM9dChcIi4vaG92ZXJcIiksbi5zZWxlY3RQb2ludHM9dChcIi4uL2Jhci9zZWxlY3RcIiksbi5ldmVudERhdGE9dChcIi4vZXZlbnRfZGF0YVwiKSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cImhpc3RvZ3JhbVwiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiKSxuLmNhdGVnb3JpZXM9W1wiY2FydGVzaWFuXCIsXCJzdmdcIixcImJhclwiLFwiaGlzdG9ncmFtXCIsXCJvcmllbnRlZFwiLFwiZXJyb3JCYXJzT0tcIixcInNob3dMZWdlbmRcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIjo3NjAsXCIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsY1wiOjg0MixcIi4uL2Jhci9sYXlvdXRfYXR0cmlidXRlc1wiOjg0NyxcIi4uL2Jhci9sYXlvdXRfZGVmYXVsdHNcIjo4NDgsXCIuLi9iYXIvcGxvdFwiOjg0OSxcIi4uL2Jhci9zZWxlY3RcIjo4NTAsXCIuLi9iYXIvc3R5bGVcIjo4NTIsXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiOjEwNzAsXCIuL2F0dHJpYnV0ZXNcIjo5NjYsXCIuL2NhbGNcIjo5NzEsXCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzXCI6OTczLFwiLi9kZWZhdWx0c1wiOjk3NCxcIi4vZXZlbnRfZGF0YVwiOjk3NSxcIi4vaG92ZXJcIjo5NzZ9XSw5Nzg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e3BlcmNlbnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj0xMDAvZSxpPTA7aTxyO2krKyl0W2ldKj1ufSxwcm9iYWJpbGl0eTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPTA7bjxyO24rKyl0W25dLz1lfSxkZW5zaXR5OmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQubGVuZ3RoO249bnx8MTtmb3IodmFyIGE9MDthPGk7YSsrKXRbYV0qPXJbYV0qbn0sXCJwcm9iYWJpbGl0eSBkZW5zaXR5XCI6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5sZW5ndGg7biYmKGUvPW4pO2Zvcih2YXIgYT0wO2E8aTthKyspdFthXSo9clthXS9lfX19LHt9XSw5Nzk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vaGlzdG9ncmFtL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vaGlzdG9ncmFtL2Jpbl9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uL2hlYXRtYXAvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxsPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIiksYz10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1jKHt4Om4ueCx5Om4ueSx6Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxtYXJrZXI6e2NvbG9yOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0saGlzdG5vcm06bi5oaXN0bm9ybSxoaXN0ZnVuYzpuLmhpc3RmdW5jLG5iaW5zeDpuLm5iaW5zeCx4YmluczppKFwieFwiKSxuYmluc3k6bi5uYmluc3kseWJpbnM6aShcInlcIiksYXV0b2Jpbng6bi5hdXRvYmlueCxhdXRvYmlueTpuLmF1dG9iaW55LHhnYXA6YS54Z2FwLHlnYXA6YS55Z2FwLHpzbW9vdGg6YS56c21vb3RoLHpob3ZlcmZvcm1hdDphLnpob3ZlcmZvcm1hdCxob3ZlcnRlbXBsYXRlOm8oe30se2tleXM6XCJ6XCJ9KX0scyhcIlwiLHtjTGV0dGVyOlwielwiLGF1dG9Db2xvckRmbHQ6ITF9KSx7Y29sb3JiYXI6bH0pfSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIjo1NzksXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uL2hlYXRtYXAvYXR0cmlidXRlc1wiOjk0OCxcIi4uL2hpc3RvZ3JhbS9hdHRyaWJ1dGVzXCI6OTY2LFwiLi4vaGlzdG9ncmFtL2Jpbl9hdHRyaWJ1dGVzXCI6OTY4fV0sOTgwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxhPXQoXCIuLi9oaXN0b2dyYW0vYmluX2Z1bmN0aW9uc1wiKSxvPXQoXCIuLi9oaXN0b2dyYW0vbm9ybV9mdW5jdGlvbnNcIikscz10KFwiLi4vaGlzdG9ncmFtL2F2ZXJhZ2VcIiksbD10KFwiLi4vaGlzdG9ncmFtL2Jpbl9sYWJlbF92YWxzXCIpO2Z1bmN0aW9uIGModCxlLHIsYSxvLHMsbCl7dmFyIGM9ZStcImJpbnNcIix1PXRbY107dXx8KHU9dFtjXT17fSk7dmFyIGg9dC5faW5wdXRbY118fHt9LGY9dC5fYXV0b0Jpbj17fTtoLnNpemV8fGRlbGV0ZSB1LnNpemUsdm9pZCAwPT09aC5zdGFydCYmZGVsZXRlIHUuc3RhcnQsdm9pZCAwPT09aC5lbmQmJmRlbGV0ZSB1LmVuZDt2YXIgcD0hdS5zaXplLGQ9dm9pZCAwPT09dS5zdGFydCxnPXZvaWQgMD09PXUuZW5kO2lmKHB8fGR8fGcpe3ZhciB2PWkuYXV0b0JpbihyLGEsdFtcIm5iaW5zXCIrZV0sXCIyZFwiLGwsdS5zaXplKTtcImhpc3RvZ3JhbTJkY29udG91clwiPT09dC50eXBlJiYoZCYmKHYuc3RhcnQ9cyhpLnRpY2tJbmNyZW1lbnQobyh2LnN0YXJ0KSx2LnNpemUsITAsbCkpKSxnJiYodi5lbmQ9cyhpLnRpY2tJbmNyZW1lbnQobyh2LmVuZCksdi5zaXplLCExLGwpKSkpLHAmJih1LnNpemU9Zi5zaXplPXYuc2l6ZSksZCYmKHUuc3RhcnQ9Zi5zdGFydD12LnN0YXJ0KSxnJiYodS5lbmQ9Zi5lbmQ9di5lbmQpfXZhciBtPVwiYXV0b2JpblwiK2U7ITE9PT10Ll9pbnB1dFttXSYmKHQuX2lucHV0W2NdPW4uZXh0ZW5kRmxhdCh7fSx1KSxkZWxldGUgdC5faW5wdXRbbV0sZGVsZXRlIHRbbV0pfWZ1bmN0aW9uIHUodCxlLHIsbil7dmFyIGksYT1uZXcgQXJyYXkodCk7aWYobilmb3IoaT0wO2k8dDtpKyspYVtpXT0xLyhlW2krMV0tZVtpXSk7ZWxzZXt2YXIgbz0xL3I7Zm9yKGk9MDtpPHQ7aSsrKWFbaV09b31yZXR1cm4gYX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJue3N0YXJ0OnQoZS5zdGFydCksZW5kOnQoZS5lbmQpLHNpemU6ZS5zaXplfX1mdW5jdGlvbiBmKHQsZSxyLG4saSxhKXt2YXIgbyxzPXQubGVuZ3RoLTEsYz1uZXcgQXJyYXkocyk7aWYoZSlmb3Iobz0wO288cztvKyspY1tvXT1bZVtvXSxlW29dXTtlbHNle3ZhciB1PWwocixuLHQsaSxhKTtmb3Iobz0wO288cztvKyspY1tvXT1bdSh0W29dKSx1KHRbbysxXSwhMCldfXJldHVybiBjfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGwscCxkLGc9aS5nZXRGcm9tSWQodCxlLnhheGlzfHxcInhcIiksdj1lLng/Zy5tYWtlQ2FsY2RhdGEoZSxcInhcIik6W10sbT1pLmdldEZyb21JZCh0LGUueWF4aXN8fFwieVwiKSx5PWUueT9tLm1ha2VDYWxjZGF0YShlLFwieVwiKTpbXSx4PWUueGNhbGVuZGFyLGI9ZS55Y2FsZW5kYXIsXz1mdW5jdGlvbih0KXtyZXR1cm4gZy5yMmModCwwLHgpfSx3PWZ1bmN0aW9uKHQpe3JldHVybiBtLnIyYyh0LDAsYil9LGs9ZnVuY3Rpb24odCl7cmV0dXJuIGcuYzJyKHQsMCx4KX0sQT1mdW5jdGlvbih0KXtyZXR1cm4gbS5jMnIodCwwLGIpfSxUPWUuX2xlbmd0aDt2Lmxlbmd0aD5UJiZ2LnNwbGljZShULHYubGVuZ3RoLVQpLHkubGVuZ3RoPlQmJnkuc3BsaWNlKFQseS5sZW5ndGgtVCksYyhlLFwieFwiLHYsZyxfLGsseCksYyhlLFwieVwiLHksbSx3LEEsYik7dmFyIE09W10sUz1bXSxFPVtdLEM9XCJzdHJpbmdcIj09dHlwZW9mIGUueGJpbnMuc2l6ZSxMPVwic3RyaW5nXCI9PXR5cGVvZiBlLnliaW5zLnNpemUsej1bXSxPPVtdLEk9Qz96OmUueGJpbnMsRD1MP086ZS55YmlucyxQPTAsUj1bXSxGPVtdLEI9ZS5oaXN0bm9ybSxOPWUuaGlzdGZ1bmMsaj0tMSE9PUIuaW5kZXhPZihcImRlbnNpdHlcIiksVj1cIm1heFwiPT09Tnx8XCJtaW5cIj09PU4/bnVsbDowLFU9YS5jb3VudCxxPW9bQl0sSD0hMSxHPVtdLFk9W10sVz1cInpcImluIGU/ZS56OlwibWFya2VyXCJpbiBlJiZBcnJheS5pc0FycmF5KGUubWFya2VyLmNvbG9yKT9lLm1hcmtlci5jb2xvcjpcIlwiO1cmJlwiY291bnRcIiE9PU4mJihIPVwiYXZnXCI9PT1OLFU9YVtOXSk7dmFyIFg9ZS54YmlucyxaPV8oWC5zdGFydCksJD1fKFguZW5kKSsoWi1pLnRpY2tJbmNyZW1lbnQoWixYLnNpemUsITEseCkpLzFlNjtmb3Iocj1aO3I8JDtyPWkudGlja0luY3JlbWVudChyLFguc2l6ZSwhMSx4KSlTLnB1c2goViksei5wdXNoKHIpLEgmJkUucHVzaCgwKTt6LnB1c2gocik7dmFyIEo9Uy5sZW5ndGgsSz1fKGUueGJpbnMuc3RhcnQpLFE9KHItSykvSix0dD1rKEsrUS8yKTtmb3IoWj13KChYPWUueWJpbnMpLnN0YXJ0KSwkPXcoWC5lbmQpKyhaLWkudGlja0luY3JlbWVudChaLFguc2l6ZSwhMSxiKSkvMWU2LHI9WjtyPCQ7cj1pLnRpY2tJbmNyZW1lbnQocixYLnNpemUsITEsYikpe00ucHVzaChTLnNsaWNlKCkpLE8ucHVzaChyKTt2YXIgZXQ9bmV3IEFycmF5KEopO2ZvcihsPTA7bDxKO2wrKylldFtsXT1bXTtGLnB1c2goZXQpLEgmJlIucHVzaChFLnNsaWNlKCkpfU8ucHVzaChyKTt2YXIgcnQ9TS5sZW5ndGgsbnQ9dyhlLnliaW5zLnN0YXJ0KSxpdD0oci1udCkvcnQsYXQ9QShudCtpdC8yKTtqJiYoRz11KFMubGVuZ3RoLEksUSxDKSxZPXUoTS5sZW5ndGgsRCxpdCxMKSksQ3x8XCJkYXRlXCIhPT1nLnR5cGV8fChJPWgoXyxJKSksTHx8XCJkYXRlXCIhPT1tLnR5cGV8fChEPWgodyxEKSk7dmFyIG90PSEwLHN0PSEwLGx0PW5ldyBBcnJheShKKSxjdD1uZXcgQXJyYXkocnQpLHV0PTEvMCxodD0xLzAsZnQ9MS8wLHB0PTEvMDtmb3Iocj0wO3I8VDtyKyspe3ZhciBkdD12W3JdLGd0PXlbcl07cD1uLmZpbmRCaW4oZHQsSSksZD1uLmZpbmRCaW4oZ3QsRCkscD49MCYmcDxKJiZkPj0wJiZkPHJ0JiYoUCs9VShwLHIsTVtkXSxXLFJbZF0pLEZbZF1bcF0ucHVzaChyKSxvdCYmKHZvaWQgMD09PWx0W3BdP2x0W3BdPWR0Omx0W3BdIT09ZHQmJihvdD0hMSkpLHN0JiYodm9pZCAwPT09Y3RbcF0/Y3RbcF09Z3Q6Y3RbcF0hPT1ndCYmKHN0PSExKSksdXQ9TWF0aC5taW4odXQsZHQteltwXSksaHQ9TWF0aC5taW4oaHQseltwKzFdLWR0KSxmdD1NYXRoLm1pbihmdCxndC1PW2RdKSxwdD1NYXRoLm1pbihwdCxPW2QrMV0tZ3QpKX1pZihIKWZvcihkPTA7ZDxydDtkKyspUCs9cyhNW2RdLFJbZF0pO2lmKHEpZm9yKGQ9MDtkPHJ0O2QrKylxKE1bZF0sUCxHLFlbZF0pO3JldHVybnt4OnYseFJhbmdlczpmKHosb3QmJmx0LHV0LGh0LGcseCkseDA6dHQsZHg6USx5OnkseVJhbmdlczpmKE8sc3QmJmN0LGZ0LHB0LG0sYikseTA6YXQsZHk6aXQsejpNLHB0czpGfX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vaGlzdG9ncmFtL2F2ZXJhZ2VcIjo5NjcsXCIuLi9oaXN0b2dyYW0vYmluX2Z1bmN0aW9uc1wiOjk2OSxcIi4uL2hpc3RvZ3JhbS9iaW5fbGFiZWxfdmFsc1wiOjk3MCxcIi4uL2hpc3RvZ3JhbS9ub3JtX2Z1bmN0aW9uc1wiOjk3OH1dLDk4MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTSxhPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIiksbz10KFwiLi4vLi4vbGliXCIpLHM9dChcIi4vYXR0cmlidXRlc1wiKSxsPVtcInhcIixcInlcIl07ZnVuY3Rpb24gYyh0LGUscixzKXt2YXIgbD1yW2EuaWQybmFtZSh0W2UrXCJheGlzXCJdKV0udHlwZSxjPWUrXCJiaW5zXCIsdT10W2NdLGg9dFtlK1wiY2FsZW5kYXJcIl07dXx8KHU9dFtjXT17fSk7dmFyIGY9XCJkYXRlXCI9PT1sP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHR8fDA9PT10P28uY2xlYW5EYXRlKHQsaSxoKTplfTpmdW5jdGlvbih0LGUpe3JldHVybiBuKHQpP051bWJlcih0KTplfTt1LnN0YXJ0PWYodS5zdGFydCxzLnN0YXJ0KSx1LmVuZD1mKHUuZW5kLHMuZW5kKTt2YXIgcD1zLnNpemUsZD11LnNpemU7aWYobihkKSl1LnNpemU9ZD4wP051bWJlcihkKTpwO2Vsc2UgaWYoXCJzdHJpbmdcIiE9dHlwZW9mIGQpdS5zaXplPXA7ZWxzZXt2YXIgZz1kLmNoYXJBdCgwKSx2PWQuc3Vic3RyKDEpOygodj1uKHYpP051bWJlcih2KTowKTw9MHx8XCJkYXRlXCIhPT1sfHxcIk1cIiE9PWd8fHYhPT1NYXRoLnJvdW5kKHYpKSYmKHUuc2l6ZT1wKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE7ZnVuY3Rpb24gdSh0KXtyZXR1cm4gby5jb2VyY2UoaS5faW5wdXQsaSxzLHQpfWZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBoPShpPXRbcl0pLnR5cGU7aWYoXCJoaXN0b2dyYW0yZFwiPT09aHx8XCJoaXN0b2dyYW0yZGNvbnRvdXJcIj09PWgpZm9yKG49MDtuPGwubGVuZ3RoO24rKyl7dmFyIGY9KGE9bFtuXSkrXCJiaW5zXCIscD0oaS5fYXV0b0Jpbnx8e30pW2FdfHx7fTt1KGYrXCIuc3RhcnRcIixwLnN0YXJ0KSx1KGYrXCIuZW5kXCIscC5lbmQpLHUoZitcIi5zaXplXCIscC5zaXplKSxjKGksYSxlLHApLChpW2ZdfHx7fSkuc2l6ZXx8dShcIm5iaW5zXCIrYSl9fX19LHtcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIjo3NTIsXCIuL2F0dHJpYnV0ZXNcIjo5NzksXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDk4MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9zYW1wbGVfZGVmYXVsdHNcIiksYT10KFwiLi4vaGVhdG1hcC9zdHlsZV9kZWZhdWx0c1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIikscz10KFwiLi9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiBjKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9aSh0LGUsYyxsKSwhMSE9PWUudmlzaWJsZSYmKGEodCxlLGMsbCksbyh0LGUsbCxjLHtwcmVmaXg6XCJcIixjTGV0dGVyOlwielwifSksYyhcImhvdmVydGVtcGxhdGVcIikpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCI6NTg4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vaGVhdG1hcC9zdHlsZV9kZWZhdWx0c1wiOjk2MSxcIi4vYXR0cmlidXRlc1wiOjk3OSxcIi4vc2FtcGxlX2RlZmF1bHRzXCI6OTg1fV0sOTgzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2hlYXRtYXAvaG92ZXJcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIikuaG92ZXJMYWJlbFRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyxzKXt2YXIgbD1uKHQsZSxyLGEsbyxzKTtpZihsKXt2YXIgYz0odD1sWzBdKS5pbmRleCx1PWNbMF0saD1jWzFdLGY9dC5jZFswXSxwPWYueFJhbmdlc1toXSxkPWYueVJhbmdlc1t1XTtyZXR1cm4gdC54TGFiZWw9aSh0LnhhLHBbMF0scFsxXSksdC55TGFiZWw9aSh0LnlhLGRbMF0sZFsxXSksbH19fSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL2hlYXRtYXAvaG92ZXJcIjo5NTV9XSw5ODQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLG4uY3Jvc3NUcmFjZURlZmF1bHRzPXQoXCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzXCIpLG4uY2FsYz10KFwiLi4vaGVhdG1hcC9jYWxjXCIpLG4ucGxvdD10KFwiLi4vaGVhdG1hcC9wbG90XCIpLG4ubGF5ZXJOYW1lPVwiaGVhdG1hcGxheWVyXCIsbi5jb2xvcmJhcj10KFwiLi4vaGVhdG1hcC9jb2xvcmJhclwiKSxuLnN0eWxlPXQoXCIuLi9oZWF0bWFwL3N0eWxlXCIpLG4uaG92ZXJQb2ludHM9dChcIi4vaG92ZXJcIiksbi5ldmVudERhdGE9dChcIi4uL2hpc3RvZ3JhbS9ldmVudF9kYXRhXCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwiaGlzdG9ncmFtMmRcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIiksbi5jYXRlZ29yaWVzPVtcImNhcnRlc2lhblwiLFwic3ZnXCIsXCIyZE1hcFwiLFwiaGlzdG9ncmFtXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi4vaGVhdG1hcC9jYWxjXCI6OTQ5LFwiLi4vaGVhdG1hcC9jb2xvcmJhclwiOjk1MSxcIi4uL2hlYXRtYXAvcGxvdFwiOjk1OSxcIi4uL2hlYXRtYXAvc3R5bGVcIjo5NjAsXCIuLi9oaXN0b2dyYW0vZXZlbnRfZGF0YVwiOjk3NSxcIi4vYXR0cmlidXRlc1wiOjk3OSxcIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHNcIjo5ODEsXCIuL2RlZmF1bHRzXCI6OTgyLFwiLi9ob3ZlclwiOjk4M31dLDk4NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxpPXQoXCIuLi8uLi9saWJcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPXIoXCJ4XCIpLHM9cihcInlcIiksbD1pLm1pblJvd0xlbmd0aChvKSxjPWkubWluUm93TGVuZ3RoKHMpO2wmJmM/KGUuX2xlbmd0aD1NYXRoLm1pbihsLGMpLG4uZ2V0Q29tcG9uZW50TWV0aG9kKFwiY2FsZW5kYXJzXCIsXCJoYW5kbGVUcmFjZURlZmF1bHRzXCIpKHQsZSxbXCJ4XCIsXCJ5XCJdLGEpLChyKFwielwiKXx8cihcIm1hcmtlci5jb2xvclwiKSkmJnIoXCJoaXN0ZnVuY1wiKSxyKFwiaGlzdG5vcm1cIikscihcImF1dG9iaW54XCIpLHIoXCJhdXRvYmlueVwiKSk6ZS52aXNpYmxlPSExfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4Mjl9XSw5ODY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vaGlzdG9ncmFtMmQvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi9jb250b3VyL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9cyh7eDpuLngseTpuLnksejpuLnosbWFya2VyOm4ubWFya2VyLGhpc3Rub3JtOm4uaGlzdG5vcm0saGlzdGZ1bmM6bi5oaXN0ZnVuYyxuYmluc3g6bi5uYmluc3gseGJpbnM6bi54YmlucyxuYmluc3k6bi5uYmluc3kseWJpbnM6bi55YmlucyxhdXRvYmlueDpuLmF1dG9iaW54LGF1dG9iaW55Om4uYXV0b2JpbnksYXV0b2NvbnRvdXI6aS5hdXRvY29udG91cixuY29udG91cnM6aS5uY29udG91cnMsY29udG91cnM6aS5jb250b3VycyxsaW5lOmkubGluZSx6aG92ZXJmb3JtYXQ6bi56aG92ZXJmb3JtYXQsaG92ZXJ0ZW1wbGF0ZTpuLmhvdmVydGVtcGxhdGV9LGEoXCJcIix7Y0xldHRlcjpcInpcIixlZGl0VHlwZU92ZXJyaWRlOlwiY2FsY1wifSkse2NvbG9yYmFyOm99KX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCI6NTc5LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIjo1ODUsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vY29udG91ci9hdHRyaWJ1dGVzXCI6OTE5LFwiLi4vaGlzdG9ncmFtMmQvYXR0cmlidXRlc1wiOjk3OX1dLDk4NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vaGlzdG9ncmFtMmQvc2FtcGxlX2RlZmF1bHRzXCIpLGE9dChcIi4uL2NvbnRvdXIvY29udG91cnNfZGVmYXVsdHNcIiksbz10KFwiLi4vY29udG91ci9zdHlsZV9kZWZhdWx0c1wiKSxzPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1pKHQsZSxjLGwpLCExIT09ZS52aXNpYmxlJiYoYSh0LGUsYyxmdW5jdGlvbihyKXtyZXR1cm4gbi5jb2VyY2UyKHQsZSxzLHIpfSksbyh0LGUsYyxsKSxjKFwiaG92ZXJ0ZW1wbGF0ZVwiKSl9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9jb250b3VyL2NvbnRvdXJzX2RlZmF1bHRzXCI6OTI2LFwiLi4vY29udG91ci9zdHlsZV9kZWZhdWx0c1wiOjk0MCxcIi4uL2hpc3RvZ3JhbTJkL3NhbXBsZV9kZWZhdWx0c1wiOjk4NSxcIi4vYXR0cmlidXRlc1wiOjk4Nn1dLDk4ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIiksbi5jcm9zc1RyYWNlRGVmYXVsdHM9dChcIi4uL2hpc3RvZ3JhbTJkL2Nyb3NzX3RyYWNlX2RlZmF1bHRzXCIpLG4uY2FsYz10KFwiLi4vY29udG91ci9jYWxjXCIpLG4ucGxvdD10KFwiLi4vY29udG91ci9wbG90XCIpLnBsb3Qsbi5sYXllck5hbWU9XCJjb250b3VybGF5ZXJcIixuLnN0eWxlPXQoXCIuLi9jb250b3VyL3N0eWxlXCIpLG4uY29sb3JiYXI9dChcIi4uL2NvbnRvdXIvY29sb3JiYXJcIiksbi5ob3ZlclBvaW50cz10KFwiLi4vY29udG91ci9ob3ZlclwiKSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cImhpc3RvZ3JhbTJkY29udG91clwiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiKSxuLmNhdGVnb3JpZXM9W1wiY2FydGVzaWFuXCIsXCJzdmdcIixcIjJkTWFwXCIsXCJjb250b3VyXCIsXCJoaXN0b2dyYW1cIixcInNob3dMZWdlbmRcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIjo3NjAsXCIuLi9jb250b3VyL2NhbGNcIjo5MjAsXCIuLi9jb250b3VyL2NvbG9yYmFyXCI6OTIyLFwiLi4vY29udG91ci9ob3ZlclwiOjkzMixcIi4uL2NvbnRvdXIvcGxvdFwiOjkzNyxcIi4uL2NvbnRvdXIvc3R5bGVcIjo5MzksXCIuLi9oaXN0b2dyYW0yZC9jcm9zc190cmFjZV9kZWZhdWx0c1wiOjk4MSxcIi4vYXR0cmlidXRlc1wiOjk4NixcIi4vZGVmYXVsdHNcIjo5ODd9XSw5ODk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLG89dChcIi4uL21lc2gzZC9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIiksbD10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LGM9dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGw7dmFyIHU9ZS5leHBvcnRzPWMobCh7eDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIn0seTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIn0sejp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIn0sdmFsdWU6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCJ9LGlzb21pbjp7dmFsVHlwZTpcIm51bWJlclwifSxpc29tYXg6e3ZhbFR5cGU6XCJudW1iZXJcIn0sc3VyZmFjZTp7c2hvdzp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfSxjb3VudDp7dmFsVHlwZTpcImludGVnZXJcIixkZmx0OjIsbWluOjF9LGZpbGw6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjF9LHBhdHRlcm46e3ZhbFR5cGU6XCJmbGFnbGlzdFwiLGZsYWdzOltcIkFcIixcIkJcIixcIkNcIixcIkRcIixcIkVcIl0sZXh0cmFzOltcImFsbFwiLFwib2RkXCIsXCJldmVuXCJdLGRmbHQ6XCJhbGxcIn19LHNwYWNlZnJhbWU6e3Nob3c6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sZmlsbDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6LjE1fX0sc2xpY2VzOnt4OntzaG93Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LGxvY2F0aW9uczp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixkZmx0OltdfSxmaWxsOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDoxfX0seTp7c2hvdzp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxsb2NhdGlvbnM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZGZsdDpbXX0sZmlsbDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MX19LHo6e3Nob3c6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sbG9jYXRpb25zOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGRmbHQ6W119LGZpbGw6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjF9fX0sY2Fwczp7eDp7c2hvdzp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfSxmaWxsOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDoxfX0seTp7c2hvdzp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfSxmaWxsOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDoxfX0sejp7c2hvdzp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfSxmaWxsOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDoxfX19LHRleHQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsYXJyYXlPazohMH0saG92ZXJ0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGFycmF5T2s6ITB9LGhvdmVydGVtcGxhdGU6YSgpfSxuKFwiXCIse2NvbG9yQXR0cjpcImB2YWx1ZWBcIixzaG93U2NhbGVEZmx0OiEwLGVkaXRUeXBlT3ZlcnJpZGU6XCJjYWxjXCJ9KSx7Y29sb3JiYXI6aSxvcGFjaXR5Om8ub3BhY2l0eSxsaWdodHBvc2l0aW9uOm8ubGlnaHRwb3NpdGlvbixsaWdodGluZzpvLmxpZ2h0aW5nLGZsYXRzaGFkaW5nOm8uZmxhdHNoYWRpbmcsY29udG91cjpvLmNvbnRvdXIsaG92ZXJpbmZvOmwoe30scy5ob3ZlcmluZm8pfSksXCJjYWxjXCIsXCJuZXN0ZWRcIik7dS5mbGF0c2hhZGluZy5kZmx0PSEwLHUubGlnaHRpbmcuZmFjZW5vcm1hbHNlcHNpbG9uLmRmbHQ9MCx1LnguZWRpdFR5cGU9dS55LmVkaXRUeXBlPXUuei5lZGl0VHlwZT11LnZhbHVlLmVkaXRUeXBlPVwiY2FsYytjbGVhckF4aXNUeXBlc1wiLHUudHJhbnNmb3Jtcz12b2lkIDB9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDYsXCIuLi9tZXNoM2QvYXR0cmlidXRlc1wiOjk5NH1dLDk5MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsY1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlLl9sZW49TWF0aC5taW4oZS54Lmxlbmd0aCxlLnkubGVuZ3RoLGUuei5sZW5ndGgsZS52YWx1ZS5sZW5ndGgpO2Zvcih2YXIgcj0xLzAsaT0tMS8wLGE9ZS52YWx1ZS5sZW5ndGgsbz0wO288YTtvKyspe3ZhciBzPWUudmFsdWVbb107cj1NYXRoLm1pbihyLHMpLGk9TWF0aC5tYXgoaSxzKX1lLl9taW5WYWx1ZXM9cixlLl9tYXhWYWx1ZXM9aSxlLl92TWluPXZvaWQgMD09PWUuaXNvbWlufHxudWxsPT09ZS5pc29taW4/cjplLmlzb21pbixlLl92TWF4PXZvaWQgMD09PWUuaXNvbWF4fHxudWxsPT09ZS5pc29taW4/aTplLmlzb21heCxuKHQsZSx7dmFsczpbZS5fdk1pbixlLl92TWF4XSxjb250YWluZXJTdHI6XCJcIixjTGV0dGVyOlwiY1wifSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsY1wiOjU4Nn1dLDk5MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbC1tZXNoM2RcIiksaT10KFwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvclwiKS5wYXJzZUNvbG9yU2NhbGUsYT10KFwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiKSxvPXQoXCIuLi8uLi9wbG90cy9nbDNkL3ppcDNcIikscz10KFwiLi4vLi4vbGliXCIpO2Z1bmN0aW9uIGwodCl7cmV0dXJuIHMuZGlzdGluY3RWYWxzKHQpLnZhbHN9dmFyIGM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5sZW5ndGgtMTtyPjA7ci0tKXt2YXIgbj1NYXRoLm1pbihlW3JdLGVbci0xXSksaT1NYXRoLm1heChlW3JdLGVbci0xXSk7aWYoaT5uJiZuPHQmJnQ8PWkpcmV0dXJue2lkOnIsZGlzdFJhdGlvOihpLXQpLyhpLW4pfX1yZXR1cm57aWQ6MCxkaXN0UmF0aW86MH19O2Z1bmN0aW9uIHUodCxlLHIpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1yLHRoaXMubWVzaD1lLHRoaXMubmFtZT1cIlwiLHRoaXMuZGF0YT1udWxsLHRoaXMuc2hvd0NvbnRvdXI9ITF9dmFyIGg9dS5wcm90b3R5cGU7ZnVuY3Rpb24gZih0KXt0Ll9pPVtdLHQuX2o9W10sdC5faz1bXTt2YXIgZSxyLG49dC5zdXJmYWNlLnNob3csaT10LnNwYWNlZnJhbWUuc2hvdyxhPXQuc3VyZmFjZS5maWxsLG89dC5zcGFjZWZyYW1lLmZpbGwscz0hMSx1PSExLGg9MCxmPWwodC54LnNsaWNlKDAsdC5fbGVuKSkscD1sKHQueS5zbGljZSgwLHQuX2xlbikpLGQ9bCh0Lnouc2xpY2UoMCx0Ll9sZW4pKSxnPWYubGVuZ3RoLHY9cC5sZW5ndGgsbT1kLmxlbmd0aDtmdW5jdGlvbiB5KHQsZSxyKXtyZXR1cm4gcittKmUrbSp2KnR9dmFyIHgsYixfLHcsayxBPXQuX21pblZhbHVlcyxUPXQuX21heFZhbHVlcyxNPXQuX3ZNaW4sUz10Ll92TWF4O2Z1bmN0aW9uIEUodCxlLG4pe2Zvcih2YXIgaT13Lmxlbmd0aCxhPXI7YTxpO2ErKylpZih0PT09eFthXSYmZT09PWJbYV0mJm49PT1fW2FdKXJldHVybiBhO3JldHVybi0xfWZ1bmN0aW9uIEMoKXtyPWV9ZnVuY3Rpb24gTCgpe3g9W10sYj1bXSxfPVtdLHc9W10sZT0wLEMoKX1mdW5jdGlvbiB6KHQscixuLGkpe3JldHVybiB4LnB1c2godCksYi5wdXNoKHIpLF8ucHVzaChuKSx3LnB1c2goaSksKytlLTF9ZnVuY3Rpb24gTyh0LGUscil7Zm9yKHZhciBuPVtdLGk9MDtpPHQubGVuZ3RoO2krKyluW2ldPXRbaV0qKDEtcikrciplW2ldO3JldHVybiBufWZ1bmN0aW9uIEkodCl7az10fWZ1bmN0aW9uIEQodCxlKXtyZXR1cm5cImFsbFwiPT09dHx8bnVsbD09PXR8fHQuaW5kZXhPZihlKT4tMX1mdW5jdGlvbiBQKHQsZSl7cmV0dXJuIG51bGw9PT10P2U6dH1mdW5jdGlvbiBSKGUscixuKXtDKCk7dmFyIGksYSxvLHM9W3JdLGw9W25dO2lmKGs+PTEpcz1bcl0sbD1bbl07ZWxzZSBpZihrPjApe3ZhciBjPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxuPXRbMV0saT10WzJdLGE9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1bXSxpPTA7aTx0Lmxlbmd0aDtpKyspbltpXT0odFtpXStlW2ldK3JbaV0pLzM7cmV0dXJuIG59KHIsbixpKSxvPU1hdGguc3FydCgxLWspLHM9TyhhLHIsbyksbD1PKGEsbixvKSxjPU8oYSxpLG8pLHU9ZVswXSxoPWVbMV0sZj1lWzJdO3JldHVybnt4eXp2OltbcixuLGxdLFtsLHMscl0sW24saSxjXSxbYyxsLG5dLFtpLHIsc10sW3MsYyxpXV0sYWJjOltbdSxoLC0xXSxbLTEsLTEsdV0sW2gsZiwtMV0sWy0xLC0xLGhdLFtmLHUsLTFdLFstMSwtMSxmXV19fShyLG4pO3M9Yy54eXp2LGw9Yy5hYmN9Zm9yKHZhciB1PTA7dTxzLmxlbmd0aDt1Kyspe3I9c1t1XSxuPWxbdV07Zm9yKHZhciBmPVtdLHA9MDtwPDM7cCsrKXt2YXIgZD1yW3BdWzBdLGc9cltwXVsxXSx2PXJbcF1bMl0sbT1yW3BdWzNdLHk9bltwXT4tMT9uW3BdOkUoZCxnLHYpO2ZbcF09eT4tMT95OnooZCxnLHYsUChlLG0pKX1pPWZbMF0sYT1mWzFdLG89ZlsyXSx0Ll9pLnB1c2goaSksdC5fai5wdXNoKGEpLHQuX2sucHVzaChvKSwrK2h9fWZ1bmN0aW9uIEYodCxlLHIsbil7dmFyIGk9dFszXTtpPHImJihpPXIpLGk+biYmKGk9bik7Zm9yKHZhciBhPSh0WzNdLWkpLyh0WzNdLWVbM10rMWUtOSksbz1bXSxzPTA7czw0O3MrKylvW3NdPSgxLWEpKnRbc10rYSplW3NdO3JldHVybiBvfWZ1bmN0aW9uIEIodCxlLHIpe3JldHVybiB0Pj1lJiZ0PD1yfWZ1bmN0aW9uIE4odCl7dmFyIGU9LjAwMSooUy1NKTtyZXR1cm4gdD49TS1lJiZ0PD1TK2V9ZnVuY3Rpb24gaihlKXtmb3IodmFyIHI9W10sbj0wO248NDtuKyspe3ZhciBpPWVbbl07ci5wdXNoKFt0LnhbaV0sdC55W2ldLHQueltpXSx0LnZhbHVlW2ldXSl9cmV0dXJuIHJ9dmFyIFY9MztmdW5jdGlvbiBVKHQsZSxyLG4saSxhKXthfHwoYT0xKSxyPVstMSwtMSwtMV07dmFyIG89ITEscz1bQihlWzBdWzNdLG4saSksQihlWzFdWzNdLG4saSksQihlWzJdWzNdLG4saSldO2lmKCFzWzBdJiYhc1sxXSYmIXNbMl0pcmV0dXJuITE7dmFyIGw9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBOKGVbMF1bM10pJiZOKGVbMV1bM10pJiZOKGVbMl1bM10pPyhSKHQsZSxyKSwhMCk6YTxWJiZVKHQsZSxyLE0sUywrK2EpfTtpZihzWzBdJiZzWzFdJiZzWzJdKXJldHVybiBsKHQsZSxyKXx8bzt2YXIgYz0hMTtyZXR1cm5bWzAsMSwyXSxbMiwwLDFdLFsxLDIsMF1dLmZvckVhY2goZnVuY3Rpb24oYSl7aWYoc1thWzBdXSYmc1thWzFdXSYmIXNbYVsyXV0pe3ZhciB1PWVbYVswXV0saD1lW2FbMV1dLGY9ZVthWzJdXSxwPUYoZix1LG4saSksZD1GKGYsaCxuLGkpO289bCh0LFtkLHAsdV0sWy0xLC0xLHJbYVswXV1dKXx8byxvPWwodCxbdSxoLGRdLFtyW2FbMF1dLHJbYVsxXV0sLTFdKXx8byxjPSEwfX0pLGM/bzooW1swLDEsMl0sWzEsMiwwXSxbMiwwLDFdXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2lmKHNbYVswXV0mJiFzW2FbMV1dJiYhc1thWzJdXSl7dmFyIHU9ZVthWzBdXSxoPWVbYVsxXV0sZj1lW2FbMl1dLHA9RihoLHUsbixpKSxkPUYoZix1LG4saSk7bz1sKHQsW2QscCx1XSxbLTEsLTEsclthWzBdXV0pfHxvLGM9ITB9fSksbyl9ZnVuY3Rpb24gcSh0LGUscixuKXt2YXIgaT0hMSxhPWooZSksbz1bQihhWzBdWzNdLHIsbiksQihhWzFdWzNdLHIsbiksQihhWzJdWzNdLHIsbiksQihhWzNdWzNdLHIsbildO2lmKCEob1swXXx8b1sxXXx8b1syXXx8b1szXSkpcmV0dXJuIGk7aWYob1swXSYmb1sxXSYmb1syXSYmb1szXSlyZXR1cm4gdSYmKGk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWZ1bmN0aW9uKG4saSxhKXtSKHQsW2Vbbl0sZVtpXSxlW2FdXSxbcltuXSxyW2ldLHJbYV1dKX07bigwLDEsMiksbigzLDAsMSksbigyLDMsMCksbigxLDIsMyl9KHQsYSxlKXx8aSksaTt2YXIgcz0hMTtyZXR1cm5bWzAsMSwyLDNdLFszLDAsMSwyXSxbMiwzLDAsMV0sWzEsMiwzLDBdXS5mb3JFYWNoKGZ1bmN0aW9uKGwpe2lmKG9bbFswXV0mJm9bbFsxXV0mJm9bbFsyXV0mJiFvW2xbM11dKXt2YXIgYz1hW2xbMF1dLGg9YVtsWzFdXSxmPWFbbFsyXV0scD1hW2xbM11dO2lmKHUpaT1SKHQsW2MsaCxmXSxbZVtsWzBdXSxlW2xbMV1dLGVbbFsyXV1dKXx8aTtlbHNle3ZhciBkPUYocCxjLHIsbiksZz1GKHAsaCxyLG4pLHY9RihwLGYscixuKTtpPVIobnVsbCxbZCxnLHZdLFstMSwtMSwtMV0pfHxpfXM9ITB9fSkscz9pOihbWzAsMSwyLDNdLFsxLDIsMywwXSxbMiwzLDAsMV0sWzMsMCwxLDJdLFswLDIsMywxXSxbMSwzLDIsMF1dLmZvckVhY2goZnVuY3Rpb24obCl7aWYob1tsWzBdXSYmb1tsWzFdXSYmIW9bbFsyXV0mJiFvW2xbM11dKXt2YXIgYz1hW2xbMF1dLGg9YVtsWzFdXSxmPWFbbFsyXV0scD1hW2xbM11dLGQ9RihmLGMscixuKSxnPUYoZixoLHIsbiksdj1GKHAsaCxyLG4pLG09RihwLGMscixuKTt1PyhpPVIodCxbYyxtLGRdLFtlW2xbMF1dLC0xLC0xXSl8fGksaT1SKHQsW2gsZyx2XSxbZVtsWzFdXSwtMSwtMV0pfHxpKTppPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1mdW5jdGlvbihuLGksYSl7Uih0LFtlW25dLGVbaV0sZVthXV0sW3Jbbl0scltpXSxyW2FdXSl9O24oMCwxLDIpLG4oMiwzLDApfShudWxsLFtkLGcsdixtXSxbLTEsLTEsLTEsLTFdKXx8aSxzPSEwfX0pLHM/aTooW1swLDEsMiwzXSxbMSwyLDMsMF0sWzIsMywwLDFdLFszLDAsMSwyXV0uZm9yRWFjaChmdW5jdGlvbihsKXtpZihvW2xbMF1dJiYhb1tsWzFdXSYmIW9bbFsyXV0mJiFvW2xbM11dKXt2YXIgYz1hW2xbMF1dLGg9YVtsWzFdXSxmPWFbbFsyXV0scD1hW2xbM11dLGQ9RihoLGMscixuKSxnPUYoZixjLHIsbiksdj1GKHAsYyxyLG4pO3U/KGk9Uih0LFtjLGQsZ10sW2VbbFswXV0sLTEsLTFdKXx8aSxpPVIodCxbYyxnLHZdLFtlW2xbMF1dLC0xLC0xXSl8fGksaT1SKHQsW2MsdixkXSxbZVtsWzBdXSwtMSwtMV0pfHxpKTppPVIobnVsbCxbZCxnLHZdLFstMSwtMSwtMV0pfHxpLHM9ITB9fSksaSkpfWZ1bmN0aW9uIEgodCxlLHIsbixpLGEsbyxsLGMsaCxmKXt2YXIgcD0hMTtyZXR1cm4gcyYmKEQodCxcIkFcIikmJihwPXEobnVsbCxbZSxyLG4sYV0saCxmKXx8cCksRCh0LFwiQlwiKSYmKHA9cShudWxsLFtyLG4saSxjXSxoLGYpfHxwKSxEKHQsXCJDXCIpJiYocD1xKG51bGwsW3IsYSxvLGNdLGgsZil8fHApLEQodCxcIkRcIikmJihwPXEobnVsbCxbbixhLGwsY10saCxmKXx8cCksRCh0LFwiRVwiKSYmKHA9cShudWxsLFtyLG4sYSxjXSxoLGYpfHxwKSksdSYmKHA9cSh0LFtyLG4sYSxjXSxoLGYpfHxwKSxwfWZ1bmN0aW9uIEcodCxlLHIsbixpLGEsbyxzKXtyZXR1cm5bITA9PT1zWzBdfHxVKHQsaihbZSxyLG5dKSxbZSxyLG5dLGEsbyksITA9PT1zWzFdfHxVKHQsaihbbixpLGVdKSxbbixpLGVdLGEsbyldfWZ1bmN0aW9uIFkodCxlLHIsbixpLGEsbyxzLGwpe3JldHVybiBzP0codCxlLHIsaSxuLGEsbyxsKTpHKHQscixpLG4sZSxhLG8sbCl9ZnVuY3Rpb24gVyh0LGUscixuLGksYSxvKXt2YXIgcyxsLGMsdSxoPSExLGY9ZnVuY3Rpb24oKXtoPVUodCxbcyxsLGNdLFstMSwtMSwtMV0saSxhKXx8aCxoPVUodCxbYyx1LHNdLFstMSwtMSwtMV0saSxhKXx8aH0scD1vWzBdLGQ9b1sxXSxnPW9bMl07cmV0dXJuIHAmJihzPU8oaihbeShlLHItMCxuLTApXSlbMF0saihbeShlLTEsci0wLG4tMCldKVswXSxwKSxsPU8oaihbeShlLHItMCxuLTEpXSlbMF0saihbeShlLTEsci0wLG4tMSldKVswXSxwKSxjPU8oaihbeShlLHItMSxuLTEpXSlbMF0saihbeShlLTEsci0xLG4tMSldKVswXSxwKSx1PU8oaihbeShlLHItMSxuLTApXSlbMF0saihbeShlLTEsci0xLG4tMCldKVswXSxwKSxmKCkpLGQmJihzPU8oaihbeShlLTAscixuLTApXSlbMF0saihbeShlLTAsci0xLG4tMCldKVswXSxkKSxsPU8oaihbeShlLTAscixuLTEpXSlbMF0saihbeShlLTAsci0xLG4tMSldKVswXSxkKSxjPU8oaihbeShlLTEscixuLTEpXSlbMF0saihbeShlLTEsci0xLG4tMSldKVswXSxkKSx1PU8oaihbeShlLTEscixuLTApXSlbMF0saihbeShlLTEsci0xLG4tMCldKVswXSxkKSxmKCkpLGcmJihzPU8oaihbeShlLTAsci0wLG4pXSlbMF0saihbeShlLTAsci0wLG4tMSldKVswXSxnKSxsPU8oaihbeShlLTAsci0xLG4pXSlbMF0saihbeShlLTAsci0xLG4tMSldKVswXSxnKSxjPU8oaihbeShlLTEsci0xLG4pXSlbMF0saihbeShlLTEsci0xLG4tMSldKVswXSxnKSx1PU8oaihbeShlLTEsci0wLG4pXSlbMF0saihbeShlLTEsci0wLG4tMSldKVswXSxnKSxmKCkpLGh9ZnVuY3Rpb24gWCh0LGUscixuLGksYSxvLGwsYyx1LGgsZil7dmFyIHA9dDtyZXR1cm4gZj8ocyYmXCJldmVuXCI9PT10JiYocD1udWxsKSxIKHAsZSxyLG4saSxhLG8sbCxjLHUsaCkpOihzJiZcIm9kZFwiPT09dCYmKHA9bnVsbCksSChwLGMsbCxvLGEsaSxuLHIsZSx1LGgpKX1mdW5jdGlvbiBaKHQsZSxyLG4saSl7Zm9yKHZhciBhPVtdLG89MCxzPTA7czxlLmxlbmd0aDtzKyspZm9yKHZhciBsPWVbc10sYz0xO2M8bTtjKyspZm9yKHZhciB1PTE7dTx2O3UrKylhLnB1c2goWSh0LHkobCx1LTEsYy0xKSx5KGwsdS0xLGMpLHkobCx1LGMtMSkseShsLHUsYykscixuLChsK3UrYyklMixpJiZpW29dP2lbb106W10pKSxvKys7cmV0dXJuIGF9ZnVuY3Rpb24gJCh0LGUscixuLGkpe2Zvcih2YXIgYT1bXSxvPTAscz0wO3M8ZS5sZW5ndGg7cysrKWZvcih2YXIgbD1lW3NdLGM9MTtjPGc7YysrKWZvcih2YXIgdT0xO3U8bTt1KyspYS5wdXNoKFkodCx5KGMtMSxsLHUtMSkseShjLGwsdS0xKSx5KGMtMSxsLHUpLHkoYyxsLHUpLHIsbiwoYytsK3UpJTIsaSYmaVtvXT9pW29dOltdKSksbysrO3JldHVybiBhfWZ1bmN0aW9uIEoodCxlLHIsbixpKXtmb3IodmFyIGE9W10sbz0wLHM9MDtzPGUubGVuZ3RoO3MrKylmb3IodmFyIGw9ZVtzXSxjPTE7Yzx2O2MrKylmb3IodmFyIHU9MTt1PGc7dSsrKWEucHVzaChZKHQseSh1LTEsYy0xLGwpLHkodS0xLGMsbCkseSh1LGMtMSxsKSx5KHUsYyxsKSxyLG4sKHUrYytsKSUyLGkmJmlbb10/aVtvXTpbXSkpLG8rKztyZXR1cm4gYX1mdW5jdGlvbiBLKHQsZSxyKXtmb3IodmFyIG49MTtuPG07bisrKWZvcih2YXIgaT0xO2k8djtpKyspZm9yKHZhciBhPTE7YTxnO2ErKylYKHQseShhLTEsaS0xLG4tMSkseShhLTEsaS0xLG4pLHkoYS0xLGksbi0xKSx5KGEtMSxpLG4pLHkoYSxpLTEsbi0xKSx5KGEsaS0xLG4pLHkoYSxpLG4tMSkseShhLGksbiksZSxyLChhK2krbiklMil9ZnVuY3Rpb24gUSh0LGUscil7cz0hMCxLKHQsZSxyKSxzPSExfWZ1bmN0aW9uIHR0KHQsZSxyLG4saSxhKXtmb3IodmFyIG89W10scz0wLGw9MDtsPGUubGVuZ3RoO2wrKylmb3IodmFyIGM9ZVtsXSx1PTE7dTxtO3UrKylmb3IodmFyIGg9MTtoPHY7aCsrKW8ucHVzaChXKHQsYyxoLHUscixuLGlbbF0sYSYmYVtzXSYmYVtzXSkpLHMrKztyZXR1cm4gb31mdW5jdGlvbiBldCh0LGUscixuLGksYSl7Zm9yKHZhciBvPVtdLHM9MCxsPTA7bDxlLmxlbmd0aDtsKyspZm9yKHZhciBjPWVbbF0sdT0xO3U8Zzt1KyspZm9yKHZhciBoPTE7aDxtO2grKylvLnB1c2goVyh0LHUsYyxoLHIsbixpW2xdLGEmJmFbc10mJmFbc10pKSxzKys7cmV0dXJuIG99ZnVuY3Rpb24gcnQodCxlLHIsbixpLGEpe2Zvcih2YXIgbz1bXSxzPTAsbD0wO2w8ZS5sZW5ndGg7bCsrKWZvcih2YXIgYz1lW2xdLHU9MTt1PHY7dSsrKWZvcih2YXIgaD0xO2g8ZztoKyspby5wdXNoKFcodCxoLHUsYyxyLG4saVtsXSxhJiZhW3NdJiZhW3NdKSkscysrO3JldHVybiBvfWZ1bmN0aW9uIG50KHQsZSl7Zm9yKHZhciByPVtdLG49dDtuPGU7bisrKXIucHVzaChuKTtyZXR1cm4gcn1yZXR1cm4gZnVuY3Rpb24oKXtpZihMKCksZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPGc7ZSsrKWZvcih2YXIgcj0wO3I8djtyKyspZm9yKHZhciBuPTA7bjxtO24rKyl7dmFyIGk9eShlLHIsbik7eih0LnhbaV0sdC55W2ldLHQueltpXSx0LnZhbHVlW2ldKX19KCksaSYmbyYmKEkobyksdT0hMCxLKG51bGwsTSxTKSx1PSExKSxuJiZhKXtJKGEpO2Zvcih2YXIgZT10LnN1cmZhY2UucGF0dGVybixyPXQuc3VyZmFjZS5jb3VudCxzPTA7czxyO3MrKyl7dmFyIGw9MT09PXI/LjU6cy8oci0xKSxrPSgxLWwpKk0rbCpTLEU9TWF0aC5hYnMoay1BKT5NYXRoLmFicyhrLVQpP1tBLGtdOltrLFRdO1EoZSxFWzBdLEVbMV0pfX12YXIgQz1bW01hdGgubWluKE0sVCksTWF0aC5tYXgoTSxUKV0sW01hdGgubWluKEEsUyksTWF0aC5tYXgoQSxTKV1dO1tcInhcIixcInlcIixcInpcIl0uZm9yRWFjaChmdW5jdGlvbihlKXtmb3IodmFyIHI9W10sbj0wO248Qy5sZW5ndGg7bisrKXt2YXIgaT0wLGE9Q1tuXVswXSxvPUNbbl1bMV0scz10LnNsaWNlc1tlXTtpZihzLnNob3cmJnMuZmlsbCl7SShzLmZpbGwpO3ZhciBsPVtdLHU9W10saD1bXTtpZihzLmxvY2F0aW9ucy5sZW5ndGgpZm9yKHZhciB5PTA7eTxzLmxvY2F0aW9ucy5sZW5ndGg7eSsrKXt2YXIgeD1jKHMubG9jYXRpb25zW3ldLFwieFwiPT09ZT9mOlwieVwiPT09ZT9wOmQpOzA9PT14LmRpc3RSYXRpbz9sLnB1c2goeC5pZCk6eC5pZD4wJiYodS5wdXNoKHguaWQpLFwieFwiPT09ZT9oLnB1c2goW3guZGlzdFJhdGlvLDAsMF0pOlwieVwiPT09ZT9oLnB1c2goWzAseC5kaXN0UmF0aW8sMF0pOmgucHVzaChbMCwwLHguZGlzdFJhdGlvXSkpfWVsc2UgbD1udCgxLFwieFwiPT09ZT9nLTE6XCJ5XCI9PT1lP3YtMTptLTEpO3UubGVuZ3RoPjAmJihyW2ldPVwieFwiPT09ZT90dChudWxsLHUsYSxvLGgscltpXSk6XCJ5XCI9PT1lP2V0KG51bGwsdSxhLG8saCxyW2ldKTpydChudWxsLHUsYSxvLGgscltpXSksaSsrKSxsLmxlbmd0aD4wJiYocltpXT1cInhcIj09PWU/WihudWxsLGwsYSxvLHJbaV0pOlwieVwiPT09ZT8kKG51bGwsbCxhLG8scltpXSk6SihudWxsLGwsYSxvLHJbaV0pLGkrKyl9dmFyIGI9dC5jYXBzW2VdO2Iuc2hvdyYmYi5maWxsJiYoSShiLmZpbGwpLHJbaV09XCJ4XCI9PT1lP1oobnVsbCxbMCxnLTFdLGEsbyxyW2ldKTpcInlcIj09PWU/JChudWxsLFswLHYtMV0sYSxvLHJbaV0pOkoobnVsbCxbMCxtLTFdLGEsbyxyW2ldKSxpKyspfX0pLDA9PT1oJiZMKCksdC5feD14LHQuX3k9Yix0Ll96PV8sdC5faW50ZW5zaXR5PXcsdC5fWHM9Zix0Ll9Zcz1wLHQuX1pzPWR9KCksdH1oLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLm1lc2gpe3ZhciBlPXQuZGF0YS5pbmRleCxyPXRoaXMuZGF0YS5feFtlXSxuPXRoaXMuZGF0YS5feVtlXSxpPXRoaXMuZGF0YS5feltlXSxhPXRoaXMuZGF0YS5fWXMubGVuZ3RoLG89dGhpcy5kYXRhLl9acy5sZW5ndGgscz1jKHIsdGhpcy5kYXRhLl9YcykuaWQsbD1jKG4sdGhpcy5kYXRhLl9ZcykuaWQsdT1jKGksdGhpcy5kYXRhLl9acykuaWQsaD10LmluZGV4PXUrbypsK28qYSpzO3QudHJhY2VDb29yZGluYXRlPVt0aGlzLmRhdGEuX3hbaF0sdGhpcy5kYXRhLl95W2hdLHRoaXMuZGF0YS5feltoXSx0aGlzLmRhdGEudmFsdWVbaF1dO3ZhciBmPXRoaXMuZGF0YS5ob3ZlcnRleHR8fHRoaXMuZGF0YS50ZXh0O3JldHVybiBBcnJheS5pc0FycmF5KGYpJiZ2b2lkIDAhPT1mW2hdP3QudGV4dExhYmVsPWZbaF06ZiYmKHQudGV4dExhYmVsPWYpLCEwfX0saC51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zY2VuZSxyPWUuZnVsbFNjZW5lTGF5b3V0O2Z1bmN0aW9uIG4odCxlLHIsbil7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0LmQybChlLDAsbikqcn0pfXRoaXMuZGF0YT1mKHQpO3ZhciBzPXtwb3NpdGlvbnM6byhuKHIueGF4aXMsdC5feCxlLmRhdGFTY2FsZVswXSx0LnhjYWxlbmRhciksbihyLnlheGlzLHQuX3ksZS5kYXRhU2NhbGVbMV0sdC55Y2FsZW5kYXIpLG4oci56YXhpcyx0Ll96LGUuZGF0YVNjYWxlWzJdLHQuemNhbGVuZGFyKSksY2VsbHM6byh0Ll9pLHQuX2osdC5fayksbGlnaHRQb3NpdGlvbjpbdC5saWdodHBvc2l0aW9uLngsdC5saWdodHBvc2l0aW9uLnksdC5saWdodHBvc2l0aW9uLnpdLGFtYmllbnQ6dC5saWdodGluZy5hbWJpZW50LGRpZmZ1c2U6dC5saWdodGluZy5kaWZmdXNlLHNwZWN1bGFyOnQubGlnaHRpbmcuc3BlY3VsYXIscm91Z2huZXNzOnQubGlnaHRpbmcucm91Z2huZXNzLGZyZXNuZWw6dC5saWdodGluZy5mcmVzbmVsLHZlcnRleE5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24sZmFjZU5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcuZmFjZW5vcm1hbHNlcHNpbG9uLG9wYWNpdHk6dC5vcGFjaXR5LGNvbnRvdXJFbmFibGU6dC5jb250b3VyLnNob3csY29udG91ckNvbG9yOmEodC5jb250b3VyLmNvbG9yKS5zbGljZSgwLDMpLGNvbnRvdXJXaWR0aDp0LmNvbnRvdXIud2lkdGgsdXNlRmFjZXROb3JtYWxzOnQuZmxhdHNoYWRpbmd9O3MudmVydGV4SW50ZW5zaXR5PXQuX2ludGVuc2l0eSxzLnZlcnRleEludGVuc2l0eUJvdW5kcz1bdC5jbWluLHQuY21heF0scy5jb2xvcm1hcD1pKHQpLHRoaXMubWVzaC51cGRhdGUocyl9LGguZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLm1lc2gpLHRoaXMubWVzaC5kaXNwb3NlKCl9LGUuZXhwb3J0cz17ZmluZE5lYXJlc3RPbkF4aXM6YyxnZW5lcmF0ZUlzb01lc2hlczpmLGNyZWF0ZUlzb3N1cmZhY2VUcmFjZTpmdW5jdGlvbih0LGUpe3ZhciByPXQuZ2xwbG90LmdsLGk9bih7Z2w6cn0pLGE9bmV3IHUodCxpLGUudWlkKTtyZXR1cm4gaS5fdHJhY2U9YSxhLnVwZGF0ZShlKSx0LmdscGxvdC5hZGQoaSksYX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yXCI6Njk4LFwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiOjcyNCxcIi4uLy4uL3Bsb3RzL2dsM2QvemlwM1wiOjgwMCxcImdsLW1lc2gzZFwiOjI3N31dLDk5MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcmVnaXN0cnlcIiksYT10KFwiLi9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiKTtmdW5jdGlvbiBzKHQsZSxyLG4sYSl7dmFyIHM9YShcImlzb21pblwiKSxsPWEoXCJpc29tYXhcIik7bnVsbCE9bCYmbnVsbCE9cyYmcz5sJiYoZS5pc29taW49bnVsbCxlLmlzb21heD1udWxsKTt2YXIgYz1hKFwieFwiKSx1PWEoXCJ5XCIpLGg9YShcInpcIiksZj1hKFwidmFsdWVcIik7YyYmYy5sZW5ndGgmJnUmJnUubGVuZ3RoJiZoJiZoLmxlbmd0aCYmZiYmZi5sZW5ndGg/KGkuZ2V0Q29tcG9uZW50TWV0aG9kKFwiY2FsZW5kYXJzXCIsXCJoYW5kbGVUcmFjZURlZmF1bHRzXCIpKHQsZSxbXCJ4XCIsXCJ5XCIsXCJ6XCJdLG4pLFtcInhcIixcInlcIixcInpcIl0uZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1cImNhcHMuXCIrdDthKGUrXCIuc2hvd1wiKSYmYShlK1wiLmZpbGxcIik7dmFyIHI9XCJzbGljZXMuXCIrdDthKHIrXCIuc2hvd1wiKSYmKGEocitcIi5maWxsXCIpLGEocitcIi5sb2NhdGlvbnNcIikpfSksYShcInNwYWNlZnJhbWUuc2hvd1wiKSYmYShcInNwYWNlZnJhbWUuZmlsbFwiKSxhKFwic3VyZmFjZS5zaG93XCIpJiYoYShcInN1cmZhY2UuY291bnRcIiksYShcInN1cmZhY2UuZmlsbFwiKSxhKFwic3VyZmFjZS5wYXR0ZXJuXCIpKSxhKFwiY29udG91ci5zaG93XCIpJiYoYShcImNvbnRvdXIuY29sb3JcIiksYShcImNvbnRvdXIud2lkdGhcIikpLFtcInRleHRcIixcImhvdmVydGV4dFwiLFwiaG92ZXJ0ZW1wbGF0ZVwiLFwibGlnaHRpbmcuYW1iaWVudFwiLFwibGlnaHRpbmcuZGlmZnVzZVwiLFwibGlnaHRpbmcuc3BlY3VsYXJcIixcImxpZ2h0aW5nLnJvdWdobmVzc1wiLFwibGlnaHRpbmcuZnJlc25lbFwiLFwibGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb25cIixcImxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvblwiLFwibGlnaHRwb3NpdGlvbi54XCIsXCJsaWdodHBvc2l0aW9uLnlcIixcImxpZ2h0cG9zaXRpb24uelwiLFwiZmxhdHNoYWRpbmdcIixcIm9wYWNpdHlcIl0uZm9yRWFjaChmdW5jdGlvbih0KXthKHQpfSksbyh0LGUsbixhLHtwcmVmaXg6XCJcIixjTGV0dGVyOlwiY1wifSksZS5fbGVuZ3RoPW51bGwpOmUudmlzaWJsZT0hMX1lLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLGkpe3ModCxlLDAsaSxmdW5jdGlvbihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfSl9LHN1cHBseUlzb0RlZmF1bHRzOnN9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIjo1ODgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vYXR0cmlidXRlc1wiOjk4OX1dLDk5MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIikuc3VwcGx5RGVmYXVsdHMsbi5jYWxjPXQoXCIuL2NhbGNcIiksbi5jb2xvcmJhcj17bWluOlwiY21pblwiLG1heDpcImNtYXhcIn0sbi5wbG90PXQoXCIuL2NvbnZlcnRcIikuY3JlYXRlSXNvc3VyZmFjZVRyYWNlLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwiaXNvc3VyZmFjZVwiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4uLy4uL3Bsb3RzL2dsM2RcIiksbi5jYXRlZ29yaWVzPVtcImdsM2RcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9nbDNkXCI6Nzg5LFwiLi9hdHRyaWJ1dGVzXCI6OTg5LFwiLi9jYWxjXCI6OTkwLFwiLi9jb252ZXJ0XCI6OTkxLFwiLi9kZWZhdWx0c1wiOjk5Mn1dLDk5NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vc3VyZmFjZS9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIiksbD10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1sKHt4Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx5Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx6Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSxpOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxqOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxrOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LGhvdmVydGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixhcnJheU9rOiEwLGVkaXRUeXBlOlwiY2FsY1wifSxob3ZlcnRlbXBsYXRlOmEoe2VkaXRUeXBlOlwiY2FsY1wifSksZGVsYXVuYXlheGlzOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ4XCIsXCJ5XCIsXCJ6XCJdLGRmbHQ6XCJ6XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGFscGhhaHVsbDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6LTEsZWRpdFR5cGU6XCJjYWxjXCJ9LGludGVuc2l0eTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwiY2FsY1wifSx2ZXJ0ZXhjb2xvcjp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sZmFjZWNvbG9yOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx0cmFuc2Zvcm1zOnZvaWQgMH0sbihcIlwiLHtjb2xvckF0dHI6XCJgaW50ZW5zaXR5YFwiLHNob3dTY2FsZURmbHQ6ITAsZWRpdFR5cGVPdmVycmlkZTpcImNhbGNcIn0pLHtjb2xvcmJhcjppLG9wYWNpdHk6by5vcGFjaXR5LGZsYXRzaGFkaW5nOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEsZWRpdFR5cGU6XCJjYWxjXCJ9LGNvbnRvdXI6e3Nob3c6bCh7fSxvLmNvbnRvdXJzLnguc2hvdyx7fSksY29sb3I6by5jb250b3Vycy54LmNvbG9yLHdpZHRoOm8uY29udG91cnMueC53aWR0aCxlZGl0VHlwZTpcImNhbGNcIn0sbGlnaHRwb3NpdGlvbjp7eDpsKHt9LG8ubGlnaHRwb3NpdGlvbi54LHtkZmx0OjFlNX0pLHk6bCh7fSxvLmxpZ2h0cG9zaXRpb24ueSx7ZGZsdDoxZTV9KSx6Omwoe30sby5saWdodHBvc2l0aW9uLnose2RmbHQ6MH0pLGVkaXRUeXBlOlwiY2FsY1wifSxsaWdodGluZzpsKHt2ZXJ0ZXhub3JtYWxzZXBzaWxvbjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MWUtMTIsZWRpdFR5cGU6XCJjYWxjXCJ9LGZhY2Vub3JtYWxzZXBzaWxvbjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MWUtNixlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LG8ubGlnaHRpbmcpLGhvdmVyaW5mbzpsKHt9LHMuaG92ZXJpbmZvLHtlZGl0VHlwZTpcImNhbGNcIn0pfSl9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiOjc0NixcIi4uL3N1cmZhY2UvYXR0cmlidXRlc1wiOjExNDl9XSw5OTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZS5pbnRlbnNpdHkmJm4odCxlLHt2YWxzOmUuaW50ZW5zaXR5LGNvbnRhaW5lclN0cjpcIlwiLGNMZXR0ZXI6XCJjXCJ9KX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCI6NTg2fV0sOTk2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsLW1lc2gzZFwiKSxpPXQoXCJkZWxhdW5heS10cmlhbmd1bGF0ZVwiKSxhPXQoXCJhbHBoYS1zaGFwZVwiKSxvPXQoXCJjb252ZXgtaHVsbFwiKSxzPXQoXCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yXCIpLnBhcnNlQ29sb3JTY2FsZSxsPXQoXCIuLi8uLi9saWIvc3RyMnJnYmFycmF5XCIpLGM9dChcIi4uLy4uL3Bsb3RzL2dsM2QvemlwM1wiKTtmdW5jdGlvbiB1KHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLm1lc2g9ZSx0aGlzLm5hbWU9XCJcIix0aGlzLmNvbG9yPVwiI2ZmZlwiLHRoaXMuZGF0YT1udWxsLHRoaXMuc2hvd0NvbnRvdXI9ITF9dmFyIGg9dS5wcm90b3R5cGU7ZnVuY3Rpb24gZih0KXtmb3IodmFyIGU9W10scj10Lmxlbmd0aCxuPTA7bjxyO24rKyllW25dPWwodFtuXSk7cmV0dXJuIGV9ZnVuY3Rpb24gcCh0LGUscixuKXtmb3IodmFyIGk9W10sYT1lLmxlbmd0aCxvPTA7bzxhO28rKylpW29dPXQuZDJsKGVbb10sMCxuKSpyO3JldHVybiBpfWZ1bmN0aW9uIGQodCl7Zm9yKHZhciBlPVtdLHI9dC5sZW5ndGgsbj0wO248cjtuKyspZVtuXT1NYXRoLnJvdW5kKHRbbl0pO3JldHVybiBlfWZ1bmN0aW9uIGcodCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj0wO248cjtuKyspaWYodFtuXTw9LS41fHx0W25dPj1lLS41KXJldHVybiExO3JldHVybiEwfWguaGFuZGxlUGljaz1mdW5jdGlvbih0KXtpZih0Lm9iamVjdD09PXRoaXMubWVzaCl7dmFyIGU9dC5pbmRleD10LmRhdGEuaW5kZXg7dC50cmFjZUNvb3JkaW5hdGU9W3RoaXMuZGF0YS54W2VdLHRoaXMuZGF0YS55W2VdLHRoaXMuZGF0YS56W2VdXTt2YXIgcj10aGlzLmRhdGEuaG92ZXJ0ZXh0fHx0aGlzLmRhdGEudGV4dDtyZXR1cm4gQXJyYXkuaXNBcnJheShyKSYmdm9pZCAwIT09cltlXT90LnRleHRMYWJlbD1yW2VdOnImJih0LnRleHRMYWJlbD1yKSwhMH19LGgudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUscj1lLmZ1bGxTY2VuZUxheW91dDt0aGlzLmRhdGE9dDt2YXIgbix1PXQueC5sZW5ndGgsaD1jKHAoci54YXhpcyx0LngsZS5kYXRhU2NhbGVbMF0sdC54Y2FsZW5kYXIpLHAoci55YXhpcyx0LnksZS5kYXRhU2NhbGVbMV0sdC55Y2FsZW5kYXIpLHAoci56YXhpcyx0LnosZS5kYXRhU2NhbGVbMl0sdC56Y2FsZW5kYXIpKTtpZih0LmkmJnQuaiYmdC5rKXtpZih0LmkubGVuZ3RoIT09dC5qLmxlbmd0aHx8dC5qLmxlbmd0aCE9PXQuay5sZW5ndGh8fCFnKHQuaSx1KXx8IWcodC5qLHUpfHwhZyh0LmssdSkpcmV0dXJuO249YyhkKHQuaSksZCh0LmopLGQodC5rKSl9ZWxzZSBuPTA9PT10LmFscGhhaHVsbD9vKGgpOnQuYWxwaGFodWxsPjA/YSh0LmFscGhhaHVsbCxoKTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXCJ4XCIsXCJ5XCIsXCJ6XCJdLmluZGV4T2YodCksbj1bXSxhPWUubGVuZ3RoLG89MDtvPGE7bysrKW5bb109W2Vbb11bKHIrMSklM10sZVtvXVsocisyKSUzXV07cmV0dXJuIGkobil9KHQuZGVsYXVuYXlheGlzLGgpO3ZhciB2PXtwb3NpdGlvbnM6aCxjZWxsczpuLGxpZ2h0UG9zaXRpb246W3QubGlnaHRwb3NpdGlvbi54LHQubGlnaHRwb3NpdGlvbi55LHQubGlnaHRwb3NpdGlvbi56XSxhbWJpZW50OnQubGlnaHRpbmcuYW1iaWVudCxkaWZmdXNlOnQubGlnaHRpbmcuZGlmZnVzZSxzcGVjdWxhcjp0LmxpZ2h0aW5nLnNwZWN1bGFyLHJvdWdobmVzczp0LmxpZ2h0aW5nLnJvdWdobmVzcyxmcmVzbmVsOnQubGlnaHRpbmcuZnJlc25lbCx2ZXJ0ZXhOb3JtYWxzRXBzaWxvbjp0LmxpZ2h0aW5nLnZlcnRleG5vcm1hbHNlcHNpbG9uLGZhY2VOb3JtYWxzRXBzaWxvbjp0LmxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvbixvcGFjaXR5OnQub3BhY2l0eSxjb250b3VyRW5hYmxlOnQuY29udG91ci5zaG93LGNvbnRvdXJDb2xvcjpsKHQuY29udG91ci5jb2xvcikuc2xpY2UoMCwzKSxjb250b3VyV2lkdGg6dC5jb250b3VyLndpZHRoLHVzZUZhY2V0Tm9ybWFsczp0LmZsYXRzaGFkaW5nfTt0LmludGVuc2l0eT8odGhpcy5jb2xvcj1cIiNmZmZcIix2LnZlcnRleEludGVuc2l0eT10LmludGVuc2l0eSx2LnZlcnRleEludGVuc2l0eUJvdW5kcz1bdC5jbWluLHQuY21heF0sdi5jb2xvcm1hcD1zKHQpKTp0LnZlcnRleGNvbG9yPyh0aGlzLmNvbG9yPXQudmVydGV4Y29sb3JbMF0sdi52ZXJ0ZXhDb2xvcnM9Zih0LnZlcnRleGNvbG9yKSk6dC5mYWNlY29sb3I/KHRoaXMuY29sb3I9dC5mYWNlY29sb3JbMF0sdi5jZWxsQ29sb3JzPWYodC5mYWNlY29sb3IpKToodGhpcy5jb2xvcj10LmNvbG9yLHYubWVzaENvbG9yPWwodC5jb2xvcikpLHRoaXMubWVzaC51cGRhdGUodil9LGguZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLm1lc2gpLHRoaXMubWVzaC5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2xwbG90LmdsLGk9bih7Z2w6cn0pLGE9bmV3IHUodCxpLGUudWlkKTtyZXR1cm4gaS5fdHJhY2U9YSxhLnVwZGF0ZShlKSx0LmdscGxvdC5hZGQoaSksYX19LHtcIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3JcIjo2OTgsXCIuLi8uLi9saWIvc3RyMnJnYmFycmF5XCI6NzI0LFwiLi4vLi4vcGxvdHMvZ2wzZC96aXAzXCI6ODAwLFwiYWxwaGEtc2hhcGVcIjo1NSxcImNvbnZleC1odWxsXCI6MTIxLFwiZGVsYXVuYXktdHJpYW5ndWxhdGVcIjoxNTcsXCJnbC1tZXNoM2RcIjoyNzd9XSw5OTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiKSxvPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLG8scixuKX1mdW5jdGlvbiBjKHQpe3ZhciBlPXQubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPWwodCk7cmV0dXJuIGUmJmkuaXNBcnJheU9yVHlwZWRBcnJheShlKT9lOm51bGx9KTtyZXR1cm4gZS5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5sZW5ndGg9PT1lWzBdLmxlbmd0aH0pJiZlfWMoW1wieFwiLFwieVwiLFwielwiXSk/KGMoW1wiaVwiLFwialwiLFwia1wiXSksKCFlLml8fGUuaiYmZS5rKSYmKCFlLmp8fGUuayYmZS5pKSYmKCFlLmt8fGUuaSYmZS5qKT8obi5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcImhhbmRsZVRyYWNlRGVmYXVsdHNcIikodCxlLFtcInhcIixcInlcIixcInpcIl0scyksW1wibGlnaHRpbmcuYW1iaWVudFwiLFwibGlnaHRpbmcuZGlmZnVzZVwiLFwibGlnaHRpbmcuc3BlY3VsYXJcIixcImxpZ2h0aW5nLnJvdWdobmVzc1wiLFwibGlnaHRpbmcuZnJlc25lbFwiLFwibGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb25cIixcImxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvblwiLFwibGlnaHRwb3NpdGlvbi54XCIsXCJsaWdodHBvc2l0aW9uLnlcIixcImxpZ2h0cG9zaXRpb24uelwiLFwiY29udG91ci5zaG93XCIsXCJjb250b3VyLmNvbG9yXCIsXCJjb250b3VyLndpZHRoXCIsXCJjb2xvcnNjYWxlXCIsXCJyZXZlcnNlc2NhbGVcIixcImZsYXRzaGFkaW5nXCIsXCJhbHBoYWh1bGxcIixcImRlbGF1bmF5YXhpc1wiLFwib3BhY2l0eVwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2wodCl9KSxcImludGVuc2l0eVwiaW4gdD8obChcImludGVuc2l0eVwiKSxhKHQsZSxzLGwse3ByZWZpeDpcIlwiLGNMZXR0ZXI6XCJjXCJ9KSk6KGUuc2hvd3NjYWxlPSExLFwiZmFjZWNvbG9yXCJpbiB0P2woXCJmYWNlY29sb3JcIik6XCJ2ZXJ0ZXhjb2xvclwiaW4gdD9sKFwidmVydGV4Y29sb3JcIik6bChcImNvbG9yXCIscikpLGwoXCJ0ZXh0XCIpLGwoXCJob3ZlcnRleHRcIiksbChcImhvdmVydGVtcGxhdGVcIiksZS5fbGVuZ3RoPW51bGwpOmUudmlzaWJsZT0hMSk6ZS52aXNpYmxlPSExfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCI6NTg4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2F0dHJpYnV0ZXNcIjo5OTR9XSw5OTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLG4uY2FsYz10KFwiLi9jYWxjXCIpLG4uY29sb3JiYXI9e21pbjpcImNtaW5cIixtYXg6XCJjbWF4XCJ9LG4ucGxvdD10KFwiLi9jb252ZXJ0XCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwibWVzaDNkXCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvZ2wzZFwiKSxuLmNhdGVnb3JpZXM9W1wiZ2wzZFwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4uLy4uL3Bsb3RzL2dsM2RcIjo3ODksXCIuL2F0dHJpYnV0ZXNcIjo5OTQsXCIuL2NhbGNcIjo5OTUsXCIuL2NvbnZlcnRcIjo5OTYsXCIuL2RlZmF1bHRzXCI6OTk3fV0sOTk5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKS5leHRlbmRGbGF0LGk9dChcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlc1wiKS5kYXNoLG89dChcIi4uLy4uL2NvbXBvbmVudHMvZngvYXR0cmlidXRlc1wiKSxzPWkubGluZTtmdW5jdGlvbiBsKHQpe3JldHVybntsaW5lOntjb2xvcjpuKHt9LHMuY29sb3Ise2RmbHQ6dH0pLHdpZHRoOnMud2lkdGgsZGFzaDphLGVkaXRUeXBlOlwic3R5bGVcIn0sZWRpdFR5cGU6XCJzdHlsZVwifX1lLmV4cG9ydHM9e3g6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LG9wZW46e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGhpZ2g6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGxvdzp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sY2xvc2U6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGxpbmU6e3dpZHRoOm4oe30scy53aWR0aCx7fSksZGFzaDpuKHt9LGEse30pLGVkaXRUeXBlOlwic3R5bGVcIn0saW5jcmVhc2luZzpsKFwiIzNEOTk3MFwiKSxkZWNyZWFzaW5nOmwoXCIjRkY0MTM2XCIpLHRleHQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsYXJyYXlPazohMCxlZGl0VHlwZTpcImNhbGNcIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LHRpY2t3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDouNSxkZmx0Oi4zLGVkaXRUeXBlOlwiY2FsY1wifSxob3ZlcmxhYmVsOm4oe30sby5ob3ZlcmxhYmVsLHtzcGxpdDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwic3R5bGVcIn19KX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzXCI6NTk4LFwiLi4vLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzXCI6NjA4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCI6MTA1Mn1dLDEwMDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9bi5fLGE9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLG89dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNO2Z1bmN0aW9uIHModCxlLHIsbil7cmV0dXJue286dCxoOmUsbDpyLGM6bn19ZnVuY3Rpb24gbCh0LGUscixzLGwpe2Zvcih2YXIgYz1zLm1ha2VDYWxjZGF0YShlLFwib3BlblwiKSx1PXMubWFrZUNhbGNkYXRhKGUsXCJoaWdoXCIpLGg9cy5tYWtlQ2FsY2RhdGEoZSxcImxvd1wiKSxmPXMubWFrZUNhbGNkYXRhKGUsXCJjbG9zZVwiKSxwPUFycmF5LmlzQXJyYXkoZS50ZXh0KSxkPUFycmF5LmlzQXJyYXkoZS5ob3ZlcnRleHQpLGc9ITAsdj1udWxsLG09W10seT0wO3k8ci5sZW5ndGg7eSsrKXt2YXIgeD1yW3ldLGI9Y1t5XSxfPXVbeV0sdz1oW3ldLGs9Zlt5XTtpZih4IT09byYmYiE9PW8mJl8hPT1vJiZ3IT09byYmayE9PW8pe2s9PT1iP251bGwhPT12JiZrIT09diYmKGc9az52KTpnPWs+Yix2PWs7dmFyIEE9bChiLF8sdyxrKTtBLnBvcz14LEEueWM9KGIraykvMixBLmk9eSxBLmRpcj1nP1wiaW5jcmVhc2luZ1wiOlwiZGVjcmVhc2luZ1wiLHAmJihBLnR4PWUudGV4dFt5XSksZCYmKEEuaHR4PWUuaG92ZXJ0ZXh0W3ldKSxtLnB1c2goQSl9ZWxzZSBtLnB1c2goe3Bvczp4LGVtcHR5OiEwfSl9cmV0dXJuIGUuX2V4dHJlbWVzW3MuX2lkXT1hLmZpbmRFeHRyZW1lcyhzLG4uY29uY2F0KGgsdSkse3BhZGRlZDohMH0pLG0ubGVuZ3RoJiYobVswXS50PXtsYWJlbHM6e29wZW46aSh0LFwib3BlbjpcIikrXCIgXCIsaGlnaDppKHQsXCJoaWdoOlwiKStcIiBcIixsb3c6aSh0LFwibG93OlwiKStcIiBcIixjbG9zZTppKHQsXCJjbG9zZTpcIikrXCIgXCJ9fSksbX1lLmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24odCxlKXt2YXIgcj1hLmdldEZyb21JZCh0LGUueGF4aXMpLGk9YS5nZXRGcm9tSWQodCxlLnlheGlzKSxvPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1yLl9taW5EaWZmO2lmKCFpKXt2YXIgYSxvPXQuX2Z1bGxEYXRhLHM9W107Zm9yKGk9MS8wLGE9MDthPG8ubGVuZ3RoO2ErKyl7dmFyIGw9b1thXTtpZihcIm9obGNcIj09PWwudHlwZSYmITA9PT1sLnZpc2libGUmJmwueGF4aXM9PT1lLl9pZCl7cy5wdXNoKGwpO3ZhciBjPWUubWFrZUNhbGNkYXRhKGwsXCJ4XCIpO2wuX3hjYWxjPWM7dmFyIHU9bi5kaXN0aW5jdFZhbHMoYykubWluRGlmZjt1JiZpc0Zpbml0ZSh1KSYmKGk9TWF0aC5taW4oaSx1KSl9fWZvcihpPT09MS8wJiYoaT0xKSxhPTA7YTxzLmxlbmd0aDthKyspc1thXS5fbWluRGlmZj1pfXJldHVybiBpKnIudGlja3dpZHRofSh0LHIsZSksYz1lLl9taW5EaWZmO2UuX21pbkRpZmY9bnVsbDt2YXIgdT1lLl94Y2FsYztlLl94Y2FsYz1udWxsO3ZhciBoPWwodCxlLHUsaSxzKTtyZXR1cm4gZS5fZXh0cmVtZXNbci5faWRdPWEuZmluZEV4dHJlbWVzKHIsdSx7dnBhZDpjLzJ9KSxoLmxlbmd0aD8obi5leHRlbmRGbGF0KGhbMF0udCx7d0hvdmVyOmMvMix0aWNrTGVuOm99KSxoKTpbe3Q6e2VtcHR5OiEwfX1dfSxjYWxjQ29tbW9uOmx9fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDl9XSwxMDAxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL29obGNfZGVmYXVsdHNcIiksYT10KFwiLi9hdHRyaWJ1dGVzXCIpO2Z1bmN0aW9uIG8odCxlLHIsbil7cihuK1wiLmxpbmUuY29sb3JcIikscihuK1wiLmxpbmUud2lkdGhcIixlLmxpbmUud2lkdGgpLHIobitcIi5saW5lLmRhc2hcIixlLmxpbmUuZGFzaCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX1pKHQsZSxsLHMpPyhsKFwibGluZS53aWR0aFwiKSxsKFwibGluZS5kYXNoXCIpLG8odCxlLGwsXCJpbmNyZWFzaW5nXCIpLG8odCxlLGwsXCJkZWNyZWFzaW5nXCIpLGwoXCJ0ZXh0XCIpLGwoXCJob3ZlcnRleHRcIiksbChcInRpY2t3aWR0aFwiKSxzLl9yZXF1ZXN0UmFuZ2VzbGlkZXJbZS54YXhpc109ITApOmUudmlzaWJsZT0hMX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4vYXR0cmlidXRlc1wiOjk5OSxcIi4vb2hsY19kZWZhdWx0c1wiOjEwMDR9XSwxMDAyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4XCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIikscz10KFwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHRcIiksbD17aW5jcmVhc2luZzpcIlxcdTI1YjJcIixkZWNyZWFzaW5nOlwiXFx1MjViY1wifTtmdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBpLHMsbD10LmNkLGM9dC54YSx1PWxbMF0udHJhY2UsaD1sWzBdLnQsZj11LnR5cGUscD1cIm9obGNcIj09PWY/XCJsXCI6XCJtaW5cIixkPVwib2hsY1wiPT09Zj9cImhcIjpcIm1heFwiLGc9aC5iUG9zfHwwLHY9ZnVuY3Rpb24odCl7cmV0dXJuIHQucG9zK2ctZX0sbT1oLmJkUG9zfHxoLnRpY2tMZW4seT1oLndIb3Zlcix4PU1hdGgubWluKDEsbS9NYXRoLmFicyhjLnIyYyhjLnJhbmdlWzFdKS1jLnIyYyhjLnJhbmdlWzBdKSkpO2Z1bmN0aW9uIGIodCl7dmFyIGU9dih0KTtyZXR1cm4gYS5pbmJveChlLXksZSt5LGkpfWZ1bmN0aW9uIF8odCl7dmFyIGU9dFtwXSxuPXRbZF07cmV0dXJuIGU9PT1ufHxhLmluYm94KGUtcixuLXIsaSl9ZnVuY3Rpb24gdyh0KXtyZXR1cm4oYih0KStfKHQpKS8yfWk9dC5tYXhIb3ZlckRpc3RhbmNlLXgscz10Lm1heFNwaWtlRGlzdGFuY2UteDt2YXIgaz1hLmdldERpc3RhbmNlRnVuY3Rpb24obixiLF8sdyk7aWYoYS5nZXRDbG9zZXN0KGwsayx0KSwhMT09PXQuaW5kZXgpcmV0dXJuIG51bGw7dmFyIEE9bFt0LmluZGV4XTtpZihBLmVtcHR5KXJldHVybiBudWxsO3ZhciBUPXVbQS5kaXJdLE09VC5saW5lLmNvbG9yO3JldHVybiBvLm9wYWNpdHkoTSkmJlQubGluZS53aWR0aD90LmNvbG9yPU06dC5jb2xvcj1ULmZpbGxjb2xvcix0LngwPWMuYzJwKEEucG9zK2ctbSwhMCksdC54MT1jLmMycChBLnBvcytnK20sITApLHQueExhYmVsVmFsPUEucG9zLHQuc3Bpa2VEaXN0YW5jZT13KEEpKnMvaSx0LnhTcGlrZT1jLmMycChBLnBvcywhMCksdH1mdW5jdGlvbiB1KHQsZSxyLGEpe3ZhciBvPXQuY2Qscz10LnlhLGw9b1swXS50cmFjZSx1PW9bMF0udCxoPVtdLGY9Yyh0LGUscixhKTtpZighZilyZXR1cm5bXTt2YXIgcD1vW2YuaW5kZXhdLmhpfHxsLmhvdmVyaW5mbyxkPXAuc3BsaXQoXCIrXCIpO2lmKCEoXCJhbGxcIj09PXB8fC0xIT09ZC5pbmRleE9mKFwieVwiKSkpcmV0dXJuW107Zm9yKHZhciBnPVtcImhpZ2hcIixcIm9wZW5cIixcImNsb3NlXCIsXCJsb3dcIl0sdj17fSxtPTA7bTxnLmxlbmd0aDttKyspe3ZhciB5LHg9Z1ttXSxiPWxbeF1bZi5pbmRleF0sXz1zLmMycChiLCEwKTtiIGluIHY/KHk9dltiXSkueUxhYmVsKz1cIjxicj5cIit1LmxhYmVsc1t4XStuLmhvdmVyTGFiZWxUZXh0KHMsYik6KCh5PWkuZXh0ZW5kRmxhdCh7fSxmKSkueTA9eS55MT1fLHkueUxhYmVsVmFsPWIseS55TGFiZWw9dS5sYWJlbHNbeF0rbi5ob3ZlckxhYmVsVGV4dChzLGIpLHkubmFtZT1cIlwiLGgucHVzaCh5KSx2W2JdPXkpfXJldHVybiBofWZ1bmN0aW9uIGgodCxlLHIsaSl7dmFyIGE9dC5jZCxvPXQueWEsdT1hWzBdLnRyYWNlLGg9YVswXS50LGY9Yyh0LGUscixpKTtpZighZilyZXR1cm5bXTt2YXIgcD1hW2YuaW5kZXhdLGQ9Zi5pbmRleD1wLmksZz1wLmRpcjtmdW5jdGlvbiB2KHQpe3JldHVybiBoLmxhYmVsc1t0XStuLmhvdmVyTGFiZWxUZXh0KG8sdVt0XVtkXSl9dmFyIG09cC5oaXx8dS5ob3ZlcmluZm8seT1tLnNwbGl0KFwiK1wiKSx4PVwiYWxsXCI9PT1tLGI9eHx8LTEhPT15LmluZGV4T2YoXCJ5XCIpLF89eHx8LTEhPT15LmluZGV4T2YoXCJ0ZXh0XCIpLHc9Yj9bdihcIm9wZW5cIiksdihcImhpZ2hcIiksdihcImxvd1wiKSx2KFwiY2xvc2VcIikrXCIgIFwiK2xbZ11dOltdO3JldHVybiBfJiZzKHAsdSx3KSxmLmV4dHJhVGV4dD13LmpvaW4oXCI8YnI+XCIpLGYueTA9Zi55MT1vLmMycChwLnljLCEwKSxbZl19ZS5leHBvcnRzPXtob3ZlclBvaW50czpmdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdC5jZFswXS50cmFjZS5ob3ZlcmxhYmVsLnNwbGl0P3UodCxlLHIsbik6aCh0LGUscixuKX0saG92ZXJTcGxpdDp1LGhvdmVyT25Qb2ludHM6aH19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2Z4XCI6NjE3LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dFwiOjEwNjB9XSwxMDAzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwidHJhY2VcIixuYW1lOlwib2hsY1wiLGJhc2VQbG90TW9kdWxlOnQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIiksY2F0ZWdvcmllczpbXCJjYXJ0ZXNpYW5cIixcInN2Z1wiLFwic2hvd0xlZ2VuZFwiXSxtZXRhOnt9LGF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxzdXBwbHlEZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxjYWxjOnQoXCIuL2NhbGNcIikuY2FsYyxwbG90OnQoXCIuL3Bsb3RcIiksc3R5bGU6dChcIi4vc3R5bGVcIiksaG92ZXJQb2ludHM6dChcIi4vaG92ZXJcIikuaG92ZXJQb2ludHMsc2VsZWN0UG9pbnRzOnQoXCIuL3NlbGVjdFwiKX19LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiOjc2MCxcIi4vYXR0cmlidXRlc1wiOjk5OSxcIi4vY2FsY1wiOjFlMyxcIi4vZGVmYXVsdHNcIjoxMDAxLFwiLi9ob3ZlclwiOjEwMDIsXCIuL3Bsb3RcIjoxMDA1LFwiLi9zZWxlY3RcIjoxMDA2LFwiLi9zdHlsZVwiOjEwMDd9XSwxMDA0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uLy4uL2xpYlwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89cihcInhcIikscz1yKFwib3BlblwiKSxsPXIoXCJoaWdoXCIpLGM9cihcImxvd1wiKSx1PXIoXCJjbG9zZVwiKTtpZihyKFwiaG92ZXJsYWJlbC5zcGxpdFwiKSxuLmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiaGFuZGxlVHJhY2VEZWZhdWx0c1wiKSh0LGUsW1wieFwiXSxhKSxzJiZsJiZjJiZ1KXt2YXIgaD1NYXRoLm1pbihzLmxlbmd0aCxsLmxlbmd0aCxjLmxlbmd0aCx1Lmxlbmd0aCk7cmV0dXJuIG8mJihoPU1hdGgubWluKGgsaS5taW5Sb3dMZW5ndGgobykpKSxlLl9sZW5ndGg9aCxofX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5fV0sMTAwNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9saWJcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPWUueGF4aXMscz1lLnlheGlzO2kubWFrZVRyYWNlR3JvdXBzKGEscixcInRyYWNlIG9obGNcIikuZWFjaChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxhPXRbMF0sbD1hLnQsYz1hLnRyYWNlO2lmKGUuaXNSYW5nZVBsb3R8fChhLm5vZGUzPXIpLCEwIT09Yy52aXNpYmxlfHxsLmVtcHR5KXIucmVtb3ZlKCk7ZWxzZXt2YXIgdT1sLnRpY2tMZW4saD1yLnNlbGVjdEFsbChcInBhdGhcIikuZGF0YShpLmlkZW50aXR5KTtoLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKSxoLmV4aXQoKS5yZW1vdmUoKSxoLmF0dHIoXCJkXCIsZnVuY3Rpb24odCl7aWYodC5lbXB0eSlyZXR1cm5cIk0wLDBaXCI7dmFyIGU9by5jMnAodC5wb3MsITApLHI9by5jMnAodC5wb3MtdSwhMCksbj1vLmMycCh0LnBvcyt1LCEwKTtyZXR1cm5cIk1cIityK1wiLFwiK3MuYzJwKHQubywhMCkrXCJIXCIrZStcIk1cIitlK1wiLFwiK3MuYzJwKHQuaCwhMCkrXCJWXCIrcy5jMnAodC5sLCEwKStcIk1cIituK1wiLFwiK3MuYzJwKHQuYywhMCkrXCJIXCIrZX0pfX0pfX0se1wiLi4vLi4vbGliXCI6NzAxLGQzOjE1NX1dLDEwMDY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQuY2QsaT10LnhheGlzLGE9dC55YXhpcyxvPVtdLHM9blswXS50LmJQb3N8fDA7aWYoITE9PT1lKWZvcihyPTA7cjxuLmxlbmd0aDtyKyspbltyXS5zZWxlY3RlZD0wO2Vsc2UgZm9yKHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGw9bltyXTtlLmNvbnRhaW5zKFtpLmMycChsLnBvcytzKSxhLmMycChsLnljKV0sbnVsbCxsLmksdCk/KG8ucHVzaCh7cG9pbnROdW1iZXI6bC5pLHg6aS5jMmQobC5wb3MpLHk6YS5jMmQobC55Yyl9KSxsLnNlbGVjdGVkPTEpOmwuc2VsZWN0ZWQ9MH1yZXR1cm4gb319LHt9XSwxMDA3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWU/ZVswXS5ub2RlMzpuLnNlbGVjdCh0KS5zZWxlY3RBbGwoXCJnLm9obGNsYXllclwiKS5zZWxlY3RBbGwoXCJnLnRyYWNlXCIpO3Iuc3R5bGUoXCJvcGFjaXR5XCIsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pLHIuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlO24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbChcInBhdGhcIikuZWFjaChmdW5jdGlvbih0KXtpZighdC5lbXB0eSl7dmFyIHI9ZVt0LmRpcl0ubGluZTtuLnNlbGVjdCh0aGlzKS5zdHlsZShcImZpbGxcIixcIm5vbmVcIikuY2FsbChhLnN0cm9rZSxyLmNvbG9yKS5jYWxsKGkuZGFzaExpbmUsci5kYXNoLHIud2lkdGgpLnN0eWxlKFwib3BhY2l0eVwiLGUuc2VsZWN0ZWRwb2ludHMmJiF0LnNlbGVjdGVkPy4zOjEpfX0pfSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LGQzOjE1NX1dLDEwMDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LGk9dChcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLGw9dChcIi4uLy4uL3Bsb3RzL2RvbWFpblwiKS5hdHRyaWJ1dGVzLGM9dChcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiKS5saW5lLHU9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiKSxoPW4oe2VkaXRUeXBlOlwiY2FsY1wifSxvKFwibGluZVwiLHtlZGl0VHlwZTpcImNhbGNcIn0pLHtzaG93c2NhbGU6Yy5zaG93c2NhbGUsY29sb3JiYXI6dSxzaGFwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibGluZWFyXCIsXCJoc3BsaW5lXCJdLGRmbHQ6XCJsaW5lYXJcIixlZGl0VHlwZTpcInBsb3RcIn0saG92ZXJ0ZW1wbGF0ZTpzKHtlZGl0VHlwZTpcInBsb3RcIixhcnJheU9rOiExfSx7a2V5czpbXCJjb3VudFwiLFwicHJvYmFiaWxpdHlcIl19KX0pO2UuZXhwb3J0cz17ZG9tYWluOmwoe25hbWU6XCJwYXJjYXRzXCIsdHJhY2U6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9KSxob3ZlcmluZm86bih7fSxpLmhvdmVyaW5mbyx7ZmxhZ3M6W1wiY291bnRcIixcInByb2JhYmlsaXR5XCJdLGVkaXRUeXBlOlwicGxvdFwiLGFycmF5T2s6ITF9KSxob3Zlcm9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJjYXRlZ29yeVwiLFwiY29sb3JcIixcImRpbWVuc2lvblwiXSxkZmx0OlwiY2F0ZWdvcnlcIixlZGl0VHlwZTpcInBsb3RcIn0saG92ZXJ0ZW1wbGF0ZTpzKHtlZGl0VHlwZTpcInBsb3RcIixhcnJheU9rOiExfSx7a2V5czpbXCJjb3VudFwiLFwicHJvYmFiaWxpdHlcIixcImNhdGVnb3J5XCIsXCJjYXRlZ29yeWNvdW50XCIsXCJjb2xvcmNvdW50XCIsXCJiYW5kY29sb3Jjb3VudFwiXX0pLGFycmFuZ2VtZW50Ont2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJwZXJwZW5kaWN1bGFyXCIsXCJmcmVlZm9ybVwiLFwiZml4ZWRcIl0sZGZsdDpcInBlcnBlbmRpY3VsYXJcIixlZGl0VHlwZTpcInBsb3RcIn0sYnVuZGxlY29sb3JzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJwbG90XCJ9LHNvcnRwYXRoczp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiZm9yd2FyZFwiLFwiYmFja3dhcmRcIl0sZGZsdDpcImZvcndhcmRcIixlZGl0VHlwZTpcInBsb3RcIn0sbGFiZWxmb250OmEoe2VkaXRUeXBlOlwiY2FsY1wifSksdGlja2ZvbnQ6YSh7ZWRpdFR5cGU6XCJjYWxjXCJ9KSxkaW1lbnNpb25zOntfaXNMaW5rZWRUb0FycmF5OlwiZGltZW5zaW9uXCIsbGFiZWw6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcImNhbGNcIn0sY2F0ZWdvcnlvcmRlcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1widHJhY2VcIixcImNhdGVnb3J5IGFzY2VuZGluZ1wiLFwiY2F0ZWdvcnkgZGVzY2VuZGluZ1wiLFwiYXJyYXlcIl0sZGZsdDpcInRyYWNlXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGNhdGVnb3J5YXJyYXk6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHRpY2t0ZXh0Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx2YWx1ZXM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZGZsdDpbXSxlZGl0VHlwZTpcImNhbGNcIn0sZGlzcGxheWluZGV4Ont2YWxUeXBlOlwiaW50ZWdlclwiLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIix2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9fSxsaW5lOmgsY291bnRzOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LGN1c3RvbWRhdGE6dm9pZCAwLGhvdmVybGFiZWw6dm9pZCAwLGlkczp2b2lkIDAsbGVnZW5kZ3JvdXA6dm9pZCAwLG9wYWNpdHk6dm9pZCAwLHNlbGVjdGVkcG9pbnRzOnZvaWQgMCxzaG93bGVnZW5kOnZvaWQgMH19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiOjc0NixcIi4uLy4uL3Bsb3RzL2RvbWFpblwiOjc3NCxcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiOjc3NSxcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiOjEwNTJ9XSwxMDA5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCIpLmdldE1vZHVsZUNhbGNEYXRhLGk9dChcIi4vcGxvdFwiKTtyLm5hbWU9XCJwYXJjYXRzXCIsci5wbG90PWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4odC5jYWxjZGF0YSxcInBhcmNhdHNcIik7aWYoby5sZW5ndGgpe3ZhciBzPW9bMF07aSh0LHMscixhKX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5faGFzJiZuLl9oYXMoXCJwYXJjYXRzXCIpLGE9ZS5faGFzJiZlLl9oYXMoXCJwYXJjYXRzXCIpO2kmJiFhJiZuLl9wYXBlcmRpdi5zZWxlY3RBbGwoXCIucGFyY2F0c1wiKS5yZW1vdmUoKX19LHtcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCI6Nzg0LFwiLi9wbG90XCI6MTAxNH1dLDEwMTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliL2d1cFwiKS53cmFwLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzXCIpLmhhc0NvbG9yc2NhbGUsYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIiksbz10KFwiLi4vLi4vbGliL2ZpbHRlcl91bmlxdWUuanNcIikscz10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLGw9dChcIi4uLy4uL2xpYlwiKTtmdW5jdGlvbiBjKHQsZSxyKXt0LnZhbHVlSW5kcy5wdXNoKGUpLHQuY291bnQrPXJ9ZnVuY3Rpb24gdSh0LGUscil7dC52YWx1ZUluZHMucHVzaChlKSx0LmNvdW50Kz1yfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWwuZmlsdGVyVmlzaWJsZShlLmRpbWVuc2lvbnMpO2lmKDA9PT1yLmxlbmd0aClyZXR1cm5bXTt2YXIgaCxmLHAsZD1yLm1hcChmdW5jdGlvbih0KXt2YXIgZTtyZXR1cm5cInRyYWNlXCI9PT10LmNhdGVnb3J5b3JkZXI/ZT1udWxsOlwiYXJyYXlcIj09PXQuY2F0ZWdvcnlvcmRlcj9lPXQuY2F0ZWdvcnlhcnJheTooZT1vKHQudmFsdWVzKS5zb3J0KCksXCJjYXRlZ29yeSBkZXNjZW5kaW5nXCI9PT10LmNhdGVnb3J5b3JkZXImJihlPWUucmV2ZXJzZSgpKSksZnVuY3Rpb24odCxlKXtlPW51bGw9PWU/W106ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHR9KTt2YXIgcj17fSxuPXt9LGk9W107ZS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7clt0XT0wLG5bdF09ZX0pO2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbyxzPXRbYV07dm9pZCAwPT09cltzXT8ocltzXT0xLG89ZS5wdXNoKHMpLTEsbltzXT1vKToocltzXSsrLG89bltzXSksaS5wdXNoKG8pfXZhciBsPWUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiByW3RdfSk7cmV0dXJue3VuaXF1ZVZhbHVlczplLHVuaXF1ZUNvdW50czpsLGluZHM6aX19KHQudmFsdWVzLGUpfSk7aD1sLmlzQXJyYXlPclR5cGVkQXJyYXkoZS5jb3VudHMpP2UuY291bnRzOltlLmNvdW50c10sZnVuY3Rpb24odCl7dmFyIGU7aWYoZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wO3I8dC5sZW5ndGg7cisrKXtpZih0W3JdPDB8fHRbcl0+PXQubGVuZ3RoKXJldHVybiExO2lmKHZvaWQgMCE9PWVbdFtyXV0pcmV0dXJuITE7ZVt0W3JdXT0hMH1yZXR1cm4hMH0odC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheWluZGV4fSkpKWZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5fZGlzcGxheWluZGV4PXRbZV0uZGlzcGxheWluZGV4O2Vsc2UgZm9yKGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLl9kaXNwbGF5aW5kZXg9ZX0ociksci5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7IWZ1bmN0aW9uKHQsZSl7dC5fY2F0ZWdvcnlhcnJheT1lLnVuaXF1ZVZhbHVlcyxudWxsPT09dC50aWNrdGV4dHx8dm9pZCAwPT09dC50aWNrdGV4dD90Ll90aWNrdGV4dD1bXTp0Ll90aWNrdGV4dD10LnRpY2t0ZXh0LnNsaWNlKCk7Zm9yKHZhciByPXQuX3RpY2t0ZXh0Lmxlbmd0aDtyPGUudW5pcXVlVmFsdWVzLmxlbmd0aDtyKyspdC5fdGlja3RleHQucHVzaChlLnVuaXF1ZVZhbHVlc1tyXSl9KHQsZFtlXSl9KTt2YXIgZyx2PWUubGluZTt2PyhpKGUsXCJsaW5lXCIpJiZhKHQsZSx7dmFsczplLmxpbmUuY29sb3IsY29udGFpbmVyU3RyOlwibGluZVwiLGNMZXR0ZXI6XCJjXCJ9KSxnPXMudHJ5Q29sb3JzY2FsZSh2KSk6Zz1sLmlkZW50aXR5O3ZhciBtLHkseCxiLF89clswXS52YWx1ZXMubGVuZ3RoLHc9e30saz1kLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pbmRzfSk7Zm9yKHA9MCxtPTA7bTxfO20rKyl7dmFyIEE9W107Zm9yKHk9MDt5PGsubGVuZ3RoO3krKylBLnB1c2goa1t5XVttXSk7Zj1oW20laC5sZW5ndGhdLHArPWY7dmFyIFQ9KHg9bSxiPXZvaWQgMCxiPWwuaXNBcnJheU9yVHlwZWRBcnJheSh2LmNvbG9yKT92LmNvbG9yW3gldi5jb2xvci5sZW5ndGhdOnYuY29sb3Ise2NvbG9yOmcoYikscmF3Q29sb3I6Yn0pLE09QStcIi1cIitULnJhd0NvbG9yO3ZvaWQgMD09PXdbTV0mJih3W01dPXtjYXRlZ29yeUluZHM6QSxjb2xvcjpULmNvbG9yLHJhd0NvbG9yOlQucmF3Q29sb3IsdmFsdWVJbmRzOltdLGNvdW50OjB9KSx1KHdbTV0sbSxmKX12YXIgUyxFPXIubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHI9ZSxuPXQuX2luZGV4LGk9dC5fZGlzcGxheWluZGV4LGE9dC5sYWJlbCx7ZGltZW5zaW9uSW5kOnIsY29udGFpbmVySW5kOm4sZGlzcGxheUluZDppLGRpbWVuc2lvbkxhYmVsOmEsY291bnQ6cCxjYXRlZ29yaWVzOltdLGRyYWdYOm51bGx9O3ZhciByLG4saSxhfSk7Zm9yKG09MDttPF87bSsrKWZvcihmPWhbbSVoLmxlbmd0aF0seT0wO3k8RS5sZW5ndGg7eSsrKXt2YXIgQz1FW3ldLmNvbnRhaW5lckluZCxMPWRbeV0uaW5kc1ttXSx6PUVbeV0uY2F0ZWdvcmllcztpZih2b2lkIDA9PT16W0xdKXt2YXIgTz1lLmRpbWVuc2lvbnNbQ10uX2NhdGVnb3J5YXJyYXlbTF0sST1lLmRpbWVuc2lvbnNbQ10uX3RpY2t0ZXh0W0xdO3pbTF09e2RpbWVuc2lvbkluZDp5LGNhdGVnb3J5SW5kOlM9TCxjYXRlZ29yeVZhbHVlOk8sZGlzcGxheUluZDpTLGNhdGVnb3J5TGFiZWw6SSx2YWx1ZUluZHM6W10sY291bnQ6MCxkcmFnWTpudWxsfX1jKHpbTF0sbSxmKX1yZXR1cm4gbihmdW5jdGlvbih0LGUscil7dmFyIG49dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcmllcy5sZW5ndGh9KS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgodCxlKX0pO3JldHVybntkaW1lbnNpb25zOnQscGF0aHM6ZSx0cmFjZTp2b2lkIDAsbWF4Q2F0czpuLGNvdW50OnJ9fShFLHcscCkpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIjo1ODYsXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVyc1wiOjU4OSxcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9maWx0ZXJfdW5pcXVlLmpzXCI6NjkyLFwiLi4vLi4vbGliL2d1cFwiOjY5OX1dLDEwMTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzXCIpLmhhc0NvbG9yc2NhbGUsYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCIpLG89dChcIi4uLy4uL3Bsb3RzL2RvbWFpblwiKS5kZWZhdWx0cyxzPXQoXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIiksbD10KFwiLi9hdHRyaWJ1dGVzXCIpLGM9dChcIi4uL3BhcmNvb3Jkcy9tZXJnZV9sZW5ndGhcIik7ZnVuY3Rpb24gdSh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwuZGltZW5zaW9ucyxyLGkpfXZhciBpPXIoXCJ2YWx1ZXNcIiksYT1yKFwidmlzaWJsZVwiKTtpZihpJiZpLmxlbmd0aHx8KGE9ZS52aXNpYmxlPSExKSxhKXtyKFwibGFiZWxcIikscihcImRpc3BsYXlpbmRleFwiLGUuX2luZGV4KTt2YXIgbyxzPXQuY2F0ZWdvcnlhcnJheSxjPUFycmF5LmlzQXJyYXkocykmJnMubGVuZ3RoPjA7YyYmKG89XCJhcnJheVwiKTt2YXIgdT1yKFwiY2F0ZWdvcnlvcmRlclwiLG8pO1wiYXJyYXlcIj09PXU/KHIoXCJjYXRlZ29yeWFycmF5XCIpLHIoXCJ0aWNrdGV4dFwiKSk6KGRlbGV0ZSB0LmNhdGVnb3J5YXJyYXksZGVsZXRlIHQudGlja3RleHQpLGN8fFwiYXJyYXlcIiE9PXV8fChlLmNhdGVnb3J5b3JkZXI9XCJ0cmFjZVwiKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGgpe2Z1bmN0aW9uIGYocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwscixpKX12YXIgcD1zKHQsZSx7bmFtZTpcImRpbWVuc2lvbnNcIixoYW5kbGVJdGVtRGVmYXVsdHM6dX0pLGQ9ZnVuY3Rpb24odCxlLHIsbyxzKXtzKFwibGluZS5zaGFwZVwiKSxzKFwibGluZS5ob3ZlcnRlbXBsYXRlXCIpO3ZhciBsPXMoXCJsaW5lLmNvbG9yXCIsby5jb2xvcndheVswXSk7aWYoaSh0LFwibGluZVwiKSYmbi5pc0FycmF5T3JUeXBlZEFycmF5KGwpKXtpZihsLmxlbmd0aClyZXR1cm4gcyhcImxpbmUuY29sb3JzY2FsZVwiKSxhKHQsZSxvLHMse3ByZWZpeDpcImxpbmUuXCIsY0xldHRlcjpcImNcIn0pLGwubGVuZ3RoO2UubGluZS5jb2xvcj1yfXJldHVybiAxLzB9KHQsZSxyLGgsZik7byhlLGgsZiksQXJyYXkuaXNBcnJheShwKSYmcC5sZW5ndGh8fChlLnZpc2libGU9ITEpLGMoZSxwLFwidmFsdWVzXCIsZCksZihcImhvdmVyb25cIiksZihcImhvdmVydGVtcGxhdGVcIiksZihcImFycmFuZ2VtZW50XCIpLGYoXCJidW5kbGVjb2xvcnNcIiksZihcInNvcnRwYXRoc1wiKSxmKFwiY291bnRzXCIpO3ZhciBnPXtmYW1pbHk6aC5mb250LmZhbWlseSxzaXplOk1hdGgucm91bmQoaC5mb250LnNpemUpLGNvbG9yOmguZm9udC5jb2xvcn07bi5jb2VyY2VGb250KGYsXCJsYWJlbGZvbnRcIixnKTt2YXIgdj17ZmFtaWx5OmguZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKGguZm9udC5zaXplLzEuMiksY29sb3I6aC5mb250LmNvbG9yfTtuLmNvZXJjZUZvbnQoZixcInRpY2tmb250XCIsdil9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIjo1ODgsXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVyc1wiOjU4OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0c1wiOjc0NSxcIi4uLy4uL3Bsb3RzL2RvbWFpblwiOjc3NCxcIi4uL3BhcmNvb3Jkcy9tZXJnZV9sZW5ndGhcIjoxMDIzLFwiLi9hdHRyaWJ1dGVzXCI6MTAwOH1dLDEwMTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLG4uY2FsYz10KFwiLi9jYWxjXCIpLG4ucGxvdD10KFwiLi9wbG90XCIpLG4uY29sb3JiYXI9e2NvbnRhaW5lcjpcImxpbmVcIixtaW46XCJjbWluXCIsbWF4OlwiY21heFwifSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cInBhcmNhdHNcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuL2Jhc2VfcGxvdFwiKSxuLmNhdGVnb3JpZXM9W1wibm9PcGFjaXR5XCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi9hdHRyaWJ1dGVzXCI6MTAwOCxcIi4vYmFzZV9wbG90XCI6MTAwOSxcIi4vY2FsY1wiOjEwMTAsXCIuL2RlZmF1bHRzXCI6MTAxMSxcIi4vcGxvdFwiOjEwMTR9XSwxMDEzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfYXBpXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIiksbz10KFwiLi4vLi4vbGliXCIpLHM9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxsPXQoXCJ0aW55Y29sb3IyXCIpLGM9dChcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiKTtmdW5jdGlvbiB1KHQsZSxyLGkpe3ZhciBhPXQubWFwKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPXJbMF0sYT1lLm1hcmdpbnx8e2w6ODAscjo4MCx0OjEwMCxiOjgwfSxvPWkudHJhY2Uscz1vLmRvbWFpbixsPWUud2lkdGgsYz1lLmhlaWdodCx1PU1hdGguZmxvb3IobCoocy54WzFdLXMueFswXSkpLGg9TWF0aC5mbG9vcihjKihzLnlbMV0tcy55WzBdKSksZj1zLnhbMF0qbCthLmwscD1lLmhlaWdodC1zLnlbMV0qZS5oZWlnaHQrYS50LGQ9by5saW5lLnNoYXBlO249XCJhbGxcIj09PW8uaG92ZXJpbmZvP1tcImNvdW50XCIsXCJwcm9iYWJpbGl0eVwiXTooby5ob3ZlcmluZm98fFwiXCIpLnNwbGl0KFwiK1wiKTt2YXIgZz17dHJhY2U6byxrZXk6by51aWQsbW9kZWw6aSx4OmYseTpwLHdpZHRoOnUsaGVpZ2h0OmgsaG92ZXJvbjpvLmhvdmVyb24saG92ZXJpbmZvSXRlbXM6bixhcnJhbmdlbWVudDpvLmFycmFuZ2VtZW50LGJ1bmRsZWNvbG9yczpvLmJ1bmRsZWNvbG9ycyxzb3J0cGF0aHM6by5zb3J0cGF0aHMsbGFiZWxmb250Om8ubGFiZWxmb250LGNhdGVnb3J5bGFiZWxmb250Om8udGlja2ZvbnQscGF0aFNoYXBlOmQsZHJhZ0RpbWVuc2lvbjpudWxsLG1hcmdpbjphLHBhdGhzOltdLGRpbWVuc2lvbnM6W10sZ3JhcGhEaXY6dCx0cmFjZVNlbGVjdGlvbjpudWxsLHBhdGhTZWxlY3Rpb246bnVsbCxkaW1lbnNpb25TZWxlY3Rpb246bnVsbH07aS5kaW1lbnNpb25zJiYoUihnKSxQKGcpKTtyZXR1cm4gZ30uYmluZCgwLGUscikpLGw9aS5zZWxlY3RBbGwoXCJnLnBhcmNhdHNsYXllclwiKS5kYXRhKFtudWxsXSk7bC5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsXCJwYXJjYXRzbGF5ZXJcIikuc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpO3ZhciB1PWwuc2VsZWN0QWxsKFwiZy50cmFjZS5wYXJjYXRzXCIpLmRhdGEoYSxoKSx2PXUuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLFwidHJhY2UgcGFyY2F0c1wiKTt1LmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXtyZXR1cm5cInRyYW5zbGF0ZShcIit0LngrXCIsIFwiK3QueStcIilcIn0pLHYuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIixcInBhdGhzXCIpO3ZhciB4PXUuc2VsZWN0KFwiZy5wYXRoc1wiKS5zZWxlY3RBbGwoXCJwYXRoLnBhdGhcIikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5wYXRoc30saCk7eC5hdHRyKFwiZmlsbFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmNvbG9yfSk7dmFyIHc9eC5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsXCJwYXRoXCIpLmF0dHIoXCJzdHJva2Utb3BhY2l0eVwiLDApLmF0dHIoXCJmaWxsXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQubW9kZWwuY29sb3J9KS5hdHRyKFwiZmlsbC1vcGFjaXR5XCIsMCk7eSh3KSx4LmF0dHIoXCJkXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuc3ZnRH0pLHcuZW1wdHkoKXx8eC5zb3J0KHApLHguZXhpdCgpLnJlbW92ZSgpLHgub24oXCJtb3VzZW92ZXJcIixkKS5vbihcIm1vdXNlb3V0XCIsZykub24oXCJjbGlja1wiLG0pLHYuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIixcImRpbWVuc2lvbnNcIik7dmFyIGs9dS5zZWxlY3QoXCJnLmRpbWVuc2lvbnNcIikuc2VsZWN0QWxsKFwiZy5kaW1lbnNpb25cIikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5kaW1lbnNpb25zfSxoKTtrLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIixcImRpbWVuc2lvblwiKSxrLmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXtyZXR1cm5cInRyYW5zbGF0ZShcIit0LngrXCIsIDApXCJ9KSxrLmV4aXQoKS5yZW1vdmUoKTt2YXIgQT1rLnNlbGVjdEFsbChcImcuY2F0ZWdvcnlcIikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yaWVzfSxoKSxUPUEuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLFwiY2F0ZWdvcnlcIik7QS5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoMCwgXCIrdC55K1wiKVwifSksVC5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoXCJjbGFzc1wiLFwiY2F0cmVjdFwiKS5hdHRyKFwicG9pbnRlci1ldmVudHNcIixcIm5vbmVcIiksQS5zZWxlY3QoXCJyZWN0LmNhdHJlY3RcIikuYXR0cihcImZpbGxcIixcIm5vbmVcIikuYXR0cihcIndpZHRoXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGh9KS5hdHRyKFwiaGVpZ2h0XCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSksYihUKTt2YXIgej1BLnNlbGVjdEFsbChcInJlY3QuYmFuZHJlY3RcIikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5iYW5kc30saCk7ei5lYWNoKGZ1bmN0aW9uKCl7by5yYWlzZVRvVG9wKHRoaXMpfSksei5hdHRyKFwiZmlsbFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yfSk7dmFyIE89ei5lbnRlcigpLmFwcGVuZChcInJlY3RcIikuYXR0cihcImNsYXNzXCIsXCJiYW5kcmVjdFwiKS5hdHRyKFwic3Ryb2tlLW9wYWNpdHlcIiwwKS5hdHRyKFwiZmlsbFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yfSkuYXR0cihcImZpbGwtb3BhY2l0eVwiLDApO3ouYXR0cihcImZpbGxcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2xvcn0pLmF0dHIoXCJ3aWR0aFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRofSkuYXR0cihcImhlaWdodFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodH0pLmF0dHIoXCJ5XCIsZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pLmF0dHIoXCJjdXJzb3JcIixmdW5jdGlvbih0KXtyZXR1cm5cImZpeGVkXCI9PT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQ/XCJkZWZhdWx0XCI6XCJwZXJwZW5kaWN1bGFyXCI9PT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQ/XCJucy1yZXNpemVcIjpcIm1vdmVcIn0pLF8oTyksei5leGl0KCkucmVtb3ZlKCksVC5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJjbGFzc1wiLFwiY2F0bGFiZWxcIikuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsXCJub25lXCIpO3ZhciBJPWUuX2Z1bGxMYXlvdXQucGFwZXJfYmdjb2xvcjtBLnNlbGVjdChcInRleHQuY2F0bGFiZWxcIikuYXR0cihcInRleHQtYW5jaG9yXCIsZnVuY3Rpb24odCl7cmV0dXJuIGYodCk/XCJzdGFydFwiOlwiZW5kXCJ9KS5hdHRyKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsXCJtaWRkbGVcIikuc3R5bGUoXCJ0ZXh0LXNoYWRvd1wiLEkrXCIgLTFweCAgMXB4IDJweCwgXCIrSStcIiAxcHggIDFweCAycHgsIFwiK0krXCIgIDFweCAtMXB4IDJweCwgXCIrSStcIiAtMXB4IC0xcHggMnB4XCIpLnN0eWxlKFwiZmlsbFwiLFwicmdiKDAsIDAsIDApXCIpLmF0dHIoXCJ4XCIsZnVuY3Rpb24odCl7cmV0dXJuIGYodCk/dC53aWR0aCs1Oi01fSkuYXR0cihcInlcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHQvMn0pLnRleHQoZnVuY3Rpb24odCl7cmV0dXJuIHQubW9kZWwuY2F0ZWdvcnlMYWJlbH0pLmVhY2goZnVuY3Rpb24odCl7cy5mb250KG4uc2VsZWN0KHRoaXMpLHQucGFyY2F0c1ZpZXdNb2RlbC5jYXRlZ29yeWxhYmVsZm9udCksYy5jb252ZXJ0VG9Uc3BhbnMobi5zZWxlY3QodGhpcyksZSl9KSxULmFwcGVuZChcInRleHRcIikuYXR0cihcImNsYXNzXCIsXCJkaW1sYWJlbFwiKSxBLnNlbGVjdChcInRleHQuZGltbGFiZWxcIikuYXR0cihcInRleHQtYW5jaG9yXCIsXCJtaWRkbGVcIikuYXR0cihcImFsaWdubWVudC1iYXNlbGluZVwiLFwiYmFzZWxpbmVcIikuYXR0cihcImN1cnNvclwiLGZ1bmN0aW9uKHQpe3JldHVyblwiZml4ZWRcIj09PXQucGFyY2F0c1ZpZXdNb2RlbC5hcnJhbmdlbWVudD9cImRlZmF1bHRcIjpcImV3LXJlc2l6ZVwifSkuYXR0cihcInhcIixmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aC8yfSkuYXR0cihcInlcIiwtNSkudGV4dChmdW5jdGlvbih0LGUpe3JldHVybiAwPT09ZT90LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9uc1t0Lm1vZGVsLmRpbWVuc2lvbkluZF0uZGltZW5zaW9uTGFiZWw6bnVsbH0pLmVhY2goZnVuY3Rpb24odCl7cy5mb250KG4uc2VsZWN0KHRoaXMpLHQucGFyY2F0c1ZpZXdNb2RlbC5sYWJlbGZvbnQpfSksQS5zZWxlY3RBbGwoXCJyZWN0LmJhbmRyZWN0XCIpLm9uKFwibW91c2VvdmVyXCIsTSkub24oXCJtb3VzZW91dFwiLFMpLEEuZXhpdCgpLnJlbW92ZSgpLGsuY2FsbChuLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oZnVuY3Rpb24odCl7cmV0dXJue3g6dC54LHk6MH19KS5vbihcImRyYWdzdGFydFwiLEUpLm9uKFwiZHJhZ1wiLEMpLm9uKFwiZHJhZ2VuZFwiLEwpKSx1LmVhY2goZnVuY3Rpb24odCl7dC50cmFjZVNlbGVjdGlvbj1uLnNlbGVjdCh0aGlzKSx0LnBhdGhTZWxlY3Rpb249bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKFwiZy5wYXRoc1wiKS5zZWxlY3RBbGwoXCJwYXRoLnBhdGhcIiksdC5kaW1lbnNpb25TZWxlY3Rpb249bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKFwiZy5kaW1lbnNpb25zXCIpLnNlbGVjdEFsbChcImcuZGltZW5zaW9uXCIpfSksdS5leGl0KCkucmVtb3ZlKCl9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdC5rZXl9ZnVuY3Rpb24gZih0KXt2YXIgZT10LnBhcmNhdHNWaWV3TW9kZWwuZGltZW5zaW9ucy5sZW5ndGgscj10LnBhcmNhdHNWaWV3TW9kZWwuZGltZW5zaW9uc1tlLTFdLm1vZGVsLmRpbWVuc2lvbkluZDtyZXR1cm4gdC5tb2RlbC5kaW1lbnNpb25JbmQ9PT1yfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gdC5tb2RlbC5yYXdDb2xvcj5lLm1vZGVsLnJhd0NvbG9yPzE6dC5tb2RlbC5yYXdDb2xvcjxlLm1vZGVsLnJhd0NvbG9yPy0xOjB9ZnVuY3Rpb24gZCh0KXtpZighdC5wYXJjYXRzVmlld01vZGVsLmRyYWdEaW1lbnNpb24mJi0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoXCJza2lwXCIpKXtvLnJhaXNlVG9Ub3AodGhpcykseChuLnNlbGVjdCh0aGlzKSk7dmFyIGU9dih0KTtpZih0LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYuZW1pdChcInBsb3RseV9ob3ZlclwiLHtwb2ludHM6ZSxldmVudDpuLmV2ZW50fSksLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZihcIm5vbmVcIikpe3ZhciByLGkscyxjPW4ubW91c2UodGhpcylbMF0sdT10LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYsaD10LnBhcmNhdHNWaWV3TW9kZWwudHJhY2UsZj11Ll9mdWxsTGF5b3V0LHA9Zi5fcGFwZXJkaXYubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQ9dC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2ZvcihzPTA7czx0LmxlZnRYcy5sZW5ndGgtMTtzKyspaWYodC5sZWZ0WHNbc10rdC5kaW1XaWR0aHNbc10tMjw9YyYmYzw9dC5sZWZ0WHNbcysxXSsyKXt2YXIgZz10LnBhcmNhdHNWaWV3TW9kZWwuZGltZW5zaW9uc1tzXSxtPXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW3MrMV07cj0oZy54K2cud2lkdGgrbS54KS8yLGk9KHQudG9wWXNbc10rdC50b3BZc1tzKzFdK3QuaGVpZ2h0KS8yO2JyZWFrfXZhciB5PXQucGFyY2F0c1ZpZXdNb2RlbC54K3IsYj10LnBhcmNhdHNWaWV3TW9kZWwueStpLF89bC5tb3N0UmVhZGFibGUodC5tb2RlbC5jb2xvcixbXCJibGFja1wiLFwid2hpdGVcIl0pLHc9dC5tb2RlbC5jb3VudCxrPXcvdC5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmNvdW50LEE9e2NvdW50TGFiZWw6dyxwcm9iYWJpbGl0eUxhYmVsOmsudG9GaXhlZCgzKX0sVD1bXTstMSE9PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKFwiY291bnRcIikmJlQucHVzaChbXCJDb3VudDpcIixBLmNvdW50TGFiZWxdLmpvaW4oXCIgXCIpKSwtMSE9PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKFwicHJvYmFiaWxpdHlcIikmJlQucHVzaChbXCJQOlwiLEEucHJvYmFiaWxpdHlMYWJlbF0uam9pbihcIiBcIikpO3ZhciBNPVQuam9pbihcIjxicj5cIiksUz1uLm1vdXNlKHUpWzBdO2EubG9uZUhvdmVyKHt0cmFjZTpoLHg6eS1wLmxlZnQrZC5sZWZ0LHk6Yi1wLnRvcCtkLnRvcCx0ZXh0Ok0sY29sb3I6dC5tb2RlbC5jb2xvcixib3JkZXJDb2xvcjpcImJsYWNrXCIsZm9udEZhbWlseTonTW9uYWNvLCBcIkNvdXJpZXIgTmV3XCIsIG1vbm9zcGFjZScsZm9udFNpemU6MTAsZm9udENvbG9yOl8saWRlYWxBbGlnbjpTPHk/XCJyaWdodFwiOlwibGVmdFwiLGhvdmVydGVtcGxhdGU6KGgubGluZXx8e30pLmhvdmVydGVtcGxhdGUsaG92ZXJ0ZW1wbGF0ZUxhYmVsczpBLGV2ZW50RGF0YTpbe2RhdGE6aC5faW5wdXQsZnVsbERhdGE6aCxjb3VudDp3LHByb2JhYmlsaXR5Omt9XX0se2NvbnRhaW5lcjpmLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpmLl9wYXBlci5ub2RlKCksZ2Q6dX0pfX19ZnVuY3Rpb24gZyh0KXtpZighdC5wYXJjYXRzVmlld01vZGVsLmRyYWdEaW1lbnNpb24mJih5KG4uc2VsZWN0KHRoaXMpKSxhLmxvbmVVbmhvdmVyKHQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdi5fZnVsbExheW91dC5faG92ZXJsYXllci5ub2RlKCkpLHQucGFyY2F0c1ZpZXdNb2RlbC5wYXRoU2VsZWN0aW9uLnNvcnQocCksLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZihcInNraXBcIikpKXt2YXIgZT12KHQpO3QucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdi5lbWl0KFwicGxvdGx5X3VuaG92ZXJcIix7cG9pbnRzOmUsZXZlbnQ6bi5ldmVudH0pfX1mdW5jdGlvbiB2KHQpe2Zvcih2YXIgZT1bXSxyPXoodC5wYXJjYXRzVmlld01vZGVsKSxuPTA7bjx0Lm1vZGVsLnZhbHVlSW5kcy5sZW5ndGg7bisrKXt2YXIgaT10Lm1vZGVsLnZhbHVlSW5kc1tuXTtlLnB1c2goe2N1cnZlTnVtYmVyOnIscG9pbnROdW1iZXI6aX0pfXJldHVybiBlfWZ1bmN0aW9uIG0odCl7aWYoLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZihcInNraXBcIikpe3ZhciBlPXYodCk7dC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LmVtaXQoXCJwbG90bHlfY2xpY2tcIix7cG9pbnRzOmUsZXZlbnQ6bi5ldmVudH0pfX1mdW5jdGlvbiB5KHQpe3QuYXR0cihcImZpbGxcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5tb2RlbC5jb2xvcn0pLmF0dHIoXCJmaWxsLW9wYWNpdHlcIiwuNikuYXR0cihcInN0cm9rZVwiLFwibGlnaHRncmF5XCIpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwuMikuYXR0cihcInN0cm9rZS1vcGFjaXR5XCIsMSl9ZnVuY3Rpb24geCh0KXt0LmF0dHIoXCJmaWxsLW9wYWNpdHlcIiwuOCkuYXR0cihcInN0cm9rZVwiLGZ1bmN0aW9uKHQpe3JldHVybiBsLm1vc3RSZWFkYWJsZSh0Lm1vZGVsLmNvbG9yLFtcImJsYWNrXCIsXCJ3aGl0ZVwiXSl9KS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsLjMpfWZ1bmN0aW9uIGIodCl7dC5zZWxlY3QoXCJyZWN0LmNhdHJlY3RcIikuYXR0cihcInN0cm9rZVwiLFwiYmxhY2tcIikuYXR0cihcInN0cm9rZS13aWR0aFwiLDEpLmF0dHIoXCJzdHJva2Utb3BhY2l0eVwiLDEpfWZ1bmN0aW9uIF8odCl7dC5hdHRyKFwic3Ryb2tlXCIsXCJibGFja1wiKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsLjIpLmF0dHIoXCJzdHJva2Utb3BhY2l0eVwiLDEpLmF0dHIoXCJmaWxsLW9wYWNpdHlcIiwxKX1mdW5jdGlvbiB3KHQpe3ZhciBlPXQucGFyY2F0c1ZpZXdNb2RlbC5wYXRoU2VsZWN0aW9uLHI9dC5jYXRlZ29yeVZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25JbmQsbj10LmNhdGVnb3J5Vmlld01vZGVsLm1vZGVsLmNhdGVnb3J5SW5kO3JldHVybiBlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5tb2RlbC5jYXRlZ29yeUluZHNbcl09PT1uJiZlLm1vZGVsLmNvbG9yPT09dC5jb2xvcn0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBpPW4uc2VsZWN0KHQpLmRhdHVtKCkucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdixhPW4uc2VsZWN0KHQucGFyZW50Tm9kZSkuc2VsZWN0QWxsKFwicmVjdC5iYW5kcmVjdFwiKSxvPVtdO2EuZWFjaChmdW5jdGlvbih0KXt3KHQpLmVhY2goZnVuY3Rpb24odCl7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobyx2KHQpKX0pfSksaS5lbWl0KGUse3BvaW50czpvLGV2ZW50OnJ9KX1mdW5jdGlvbiBBKHQsZSxyKXt2YXIgaT1uLnNlbGVjdCh0KS5kYXR1bSgpLGE9aS5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LG89dyhpKSxzPVtdO28uZWFjaChmdW5jdGlvbih0KXtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShzLHYodCkpfSksYS5lbWl0KGUse3BvaW50czpzLGV2ZW50OnJ9KX1mdW5jdGlvbiBUKHQsZSl7dmFyIHIsaSxhPW4uc2VsZWN0KGUucGFyZW50Tm9kZSkuc2VsZWN0KFwicmVjdC5jYXRyZWN0XCIpLG89YS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz1hLmRhdHVtKCksbD1zLnBhcmNhdHNWaWV3TW9kZWwsYz1sLm1vZGVsLmRpbWVuc2lvbnNbcy5tb2RlbC5kaW1lbnNpb25JbmRdLHU9bC50cmFjZSxoPW8udG9wK28uaGVpZ2h0LzI7bC5kaW1lbnNpb25zLmxlbmd0aD4xJiZjLmRpc3BsYXlJbmQ9PT1sLmRpbWVuc2lvbnMubGVuZ3RoLTE/KHI9by5sZWZ0LGk9XCJsZWZ0XCIpOihyPW8ubGVmdCtvLndpZHRoLGk9XCJyaWdodFwiKTt2YXIgZj1zLm1vZGVsLmNvdW50LHA9cy5tb2RlbC5jYXRlZ29yeUxhYmVsLGQ9Zi9zLnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuY291bnQsZz17Y291bnRMYWJlbDpmLGNhdGVnb3J5TGFiZWw6cCxwcm9iYWJpbGl0eUxhYmVsOmQudG9GaXhlZCgzKX0sdj1bXTstMSE9PXMucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKFwiY291bnRcIikmJnYucHVzaChbXCJDb3VudDpcIixnLmNvdW50TGFiZWxdLmpvaW4oXCIgXCIpKSwtMSE9PXMucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKFwicHJvYmFiaWxpdHlcIikmJnYucHVzaChbXCJQKFwiK2cuY2F0ZWdvcnlMYWJlbCtcIik6XCIsZy5wcm9iYWJpbGl0eUxhYmVsXS5qb2luKFwiIFwiKSk7dmFyIG09di5qb2luKFwiPGJyPlwiKTtyZXR1cm57dHJhY2U6dSx4OnItdC5sZWZ0LHk6aC10LnRvcCx0ZXh0Om0sY29sb3I6XCJsaWdodGdyYXlcIixib3JkZXJDb2xvcjpcImJsYWNrXCIsZm9udEZhbWlseTonTW9uYWNvLCBcIkNvdXJpZXIgTmV3XCIsIG1vbm9zcGFjZScsZm9udFNpemU6MTIsZm9udENvbG9yOlwiYmxhY2tcIixpZGVhbEFsaWduOmksaG92ZXJ0ZW1wbGF0ZTp1LmhvdmVydGVtcGxhdGUsaG92ZXJ0ZW1wbGF0ZUxhYmVsczpnLGV2ZW50RGF0YTpbe2RhdGE6dS5faW5wdXQsZnVsbERhdGE6dSxjb3VudDpmLGNhdGVnb3J5OnAscHJvYmFiaWxpdHk6ZH1dfX1mdW5jdGlvbiBNKHQpe2lmKCF0LnBhcmNhdHNWaWV3TW9kZWwuZHJhZ0RpbWVuc2lvbiYmLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZihcInNraXBcIikpe2lmKG4ubW91c2UodGhpcylbMV08LTEpcmV0dXJuO3ZhciBlLHI9dC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LGk9ci5fZnVsbExheW91dCxzPWkuX3BhcGVyZGl2Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjPXQucGFyY2F0c1ZpZXdNb2RlbC5ob3Zlcm9uO2lmKFwiY29sb3JcIj09PWM/KCFmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KS5kYXR1bSgpLHI9dyhlKTt4KHIpLHIuZWFjaChmdW5jdGlvbigpe28ucmFpc2VUb1RvcCh0aGlzKX0pLG4uc2VsZWN0KHQucGFyZW50Tm9kZSkuc2VsZWN0QWxsKFwicmVjdC5iYW5kcmVjdFwiKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sb3I9PT1lLmNvbG9yfSkuZWFjaChmdW5jdGlvbigpe28ucmFpc2VUb1RvcCh0aGlzKSxuLnNlbGVjdCh0aGlzKS5hdHRyKFwic3Ryb2tlXCIsXCJibGFja1wiKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsMS41KX0pfSh0aGlzKSxBKHRoaXMsXCJwbG90bHlfaG92ZXJcIixuLmV2ZW50KSk6KCFmdW5jdGlvbih0KXtuLnNlbGVjdCh0LnBhcmVudE5vZGUpLnNlbGVjdEFsbChcInJlY3QuYmFuZHJlY3RcIikuZWFjaChmdW5jdGlvbih0KXt2YXIgZT13KHQpO3goZSksZS5lYWNoKGZ1bmN0aW9uKCl7by5yYWlzZVRvVG9wKHRoaXMpfSl9KSxuLnNlbGVjdCh0LnBhcmVudE5vZGUpLnNlbGVjdChcInJlY3QuY2F0cmVjdFwiKS5hdHRyKFwic3Ryb2tlXCIsXCJibGFja1wiKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsMi41KX0odGhpcyksayh0aGlzLFwicGxvdGx5X2hvdmVyXCIsbi5ldmVudCkpLC0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoXCJub25lXCIpKVwiY2F0ZWdvcnlcIj09PWM/ZT1UKHMsdGhpcyk6XCJjb2xvclwiPT09Yz9lPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1uLnNlbGVjdChlKS5kYXR1bSgpLHM9by5jYXRlZ29yeVZpZXdNb2RlbCxjPXMucGFyY2F0c1ZpZXdNb2RlbCx1PWMubW9kZWwuZGltZW5zaW9uc1tzLm1vZGVsLmRpbWVuc2lvbkluZF0saD1jLnRyYWNlLGY9YS55K2EuaGVpZ2h0LzI7Yy5kaW1lbnNpb25zLmxlbmd0aD4xJiZ1LmRpc3BsYXlJbmQ9PT1jLmRpbWVuc2lvbnMubGVuZ3RoLTE/KHI9YS5sZWZ0LGk9XCJsZWZ0XCIpOihyPWEubGVmdCthLndpZHRoLGk9XCJyaWdodFwiKTt2YXIgcD1zLm1vZGVsLmNhdGVnb3J5TGFiZWwsZD1vLnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuY291bnQsZz0wO28uY2F0ZWdvcnlWaWV3TW9kZWwuYmFuZHMuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNvbG9yPT09by5jb2xvciYmKGcrPXQuY291bnQpfSk7dmFyIHY9cy5tb2RlbC5jb3VudCxtPTA7Yy5wYXRoU2VsZWN0aW9uLmVhY2goZnVuY3Rpb24odCl7dC5tb2RlbC5jb2xvcj09PW8uY29sb3ImJihtKz10Lm1vZGVsLmNvdW50KX0pO3ZhciB5PWcvZCx4PWcvbSxiPWcvdixfPXtjb3VudExhYmVsOmQsY2F0ZWdvcnlMYWJlbDpwLHByb2JhYmlsaXR5TGFiZWw6eS50b0ZpeGVkKDMpfSx3PVtdOy0xIT09cy5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoXCJjb3VudFwiKSYmdy5wdXNoKFtcIkNvdW50OlwiLF8uY291bnRMYWJlbF0uam9pbihcIiBcIikpLC0xIT09cy5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoXCJwcm9iYWJpbGl0eVwiKSYmKHcucHVzaChcIlAoY29sb3IgXFx1MjIyOSBcIitwK1wiKTogXCIrXy5wcm9iYWJpbGl0eUxhYmVsKSx3LnB1c2goXCJQKFwiK3ArXCIgfCBjb2xvcik6IFwiK3gudG9GaXhlZCgzKSksdy5wdXNoKFwiUChjb2xvciB8IFwiK3ArXCIpOiBcIitiLnRvRml4ZWQoMykpKTt2YXIgaz13LmpvaW4oXCI8YnI+XCIpLEE9bC5tb3N0UmVhZGFibGUoby5jb2xvcixbXCJibGFja1wiLFwid2hpdGVcIl0pO3JldHVybnt0cmFjZTpoLHg6ci10LmxlZnQseTpmLXQudG9wLHRleHQ6ayxjb2xvcjpvLmNvbG9yLGJvcmRlckNvbG9yOlwiYmxhY2tcIixmb250RmFtaWx5OidNb25hY28sIFwiQ291cmllciBOZXdcIiwgbW9ub3NwYWNlJyxmb250Q29sb3I6QSxmb250U2l6ZToxMCxpZGVhbEFsaWduOmksaG92ZXJ0ZW1wbGF0ZTpoLmhvdmVydGVtcGxhdGUsaG92ZXJ0ZW1wbGF0ZUxhYmVsczpfLGV2ZW50RGF0YTpbe2RhdGE6aC5faW5wdXQsZnVsbERhdGE6aCxjYXRlZ29yeTpwLGNvdW50OmQscHJvYmFiaWxpdHk6eSxjYXRlZ29yeWNvdW50OnYsY29sb3Jjb3VudDptLGJhbmRjb2xvcmNvdW50Omd9XX19KHMsdGhpcyk6XCJkaW1lbnNpb25cIj09PWMmJihlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107cmV0dXJuIG4uc2VsZWN0KGUucGFyZW50Tm9kZS5wYXJlbnROb2RlKS5zZWxlY3RBbGwoXCJnLmNhdGVnb3J5XCIpLnNlbGVjdChcInJlY3QuY2F0cmVjdFwiKS5lYWNoKGZ1bmN0aW9uKCl7ci5wdXNoKFQodCx0aGlzKSl9KSxyfShzLHRoaXMpKSxlJiZhLm11bHRpSG92ZXJzKGUse2NvbnRhaW5lcjppLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjppLl9wYXBlci5ub2RlKCksZ2Q6cn0pfX1mdW5jdGlvbiBTKHQpe3ZhciBlPXQucGFyY2F0c1ZpZXdNb2RlbDtpZighZS5kcmFnRGltZW5zaW9uJiYoeShlLnBhdGhTZWxlY3Rpb24pLGIoZS5kaW1lbnNpb25TZWxlY3Rpb24uc2VsZWN0QWxsKFwiZy5jYXRlZ29yeVwiKSksXyhlLmRpbWVuc2lvblNlbGVjdGlvbi5zZWxlY3RBbGwoXCJnLmNhdGVnb3J5XCIpLnNlbGVjdEFsbChcInJlY3QuYmFuZHJlY3RcIikpLGEubG9uZVVuaG92ZXIoZS5ncmFwaERpdi5fZnVsbExheW91dC5faG92ZXJsYXllci5ub2RlKCkpLGUucGF0aFNlbGVjdGlvbi5zb3J0KHApLC0xPT09ZS5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKFwic2tpcFwiKSkpe1wiY29sb3JcIj09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3Zlcm9uP0EodGhpcyxcInBsb3RseV91bmhvdmVyXCIsbi5ldmVudCk6ayh0aGlzLFwicGxvdGx5X3VuaG92ZXJcIixuLmV2ZW50KX19ZnVuY3Rpb24gRSh0KXtcImZpeGVkXCIhPT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQmJih0LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kPXQubW9kZWwuZGlzcGxheUluZCx0LmluaXRpYWxEcmFnRGltZW5zaW9uRGlzcGxheUluZHM9dC5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmRpbWVuc2lvbnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3BsYXlJbmR9KSx0LmRyYWdIYXNNb3ZlZD0hMSx0LmRyYWdDYXRlZ29yeURpc3BsYXlJbmQ9bnVsbCxuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoXCJnLmNhdGVnb3J5XCIpLnNlbGVjdChcInJlY3QuY2F0cmVjdFwiKS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4ubW91c2UodGhpcylbMF0saT1uLm1vdXNlKHRoaXMpWzFdOy0yPD1yJiZyPD1lLndpZHRoKzImJi0yPD1pJiZpPD1lLmhlaWdodCsyJiYodC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kPWUubW9kZWwuZGlzcGxheUluZCx0LmluaXRpYWxEcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kcz10Lm1vZGVsLmNhdGVnb3JpZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3BsYXlJbmR9KSxlLm1vZGVsLmRyYWdZPWUueSxvLnJhaXNlVG9Ub3AodGhpcy5wYXJlbnROb2RlKSxuLnNlbGVjdCh0aGlzLnBhcmVudE5vZGUpLnNlbGVjdEFsbChcInJlY3QuYmFuZHJlY3RcIikuZWFjaChmdW5jdGlvbihlKXtlLnk8aSYmaTw9ZS55K2UuaGVpZ2h0JiYodC5wb3RlbnRpYWxDbGlja0JhbmQ9dGhpcyl9KSl9KSx0LnBhcmNhdHNWaWV3TW9kZWwuZHJhZ0RpbWVuc2lvbj10LGEubG9uZVVuaG92ZXIodC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2Ll9mdWxsTGF5b3V0Ll9ob3ZlcmxheWVyLm5vZGUoKSkpfWZ1bmN0aW9uIEModCl7aWYoXCJmaXhlZFwiIT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50JiYodC5kcmFnSGFzTW92ZWQ9ITAsbnVsbCE9PXQuZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmQpKXt2YXIgZT10LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kLHI9ZS0xLGk9ZSsxLGE9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbZV07aWYobnVsbCE9PXQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZCl7dmFyIG89YS5jYXRlZ29yaWVzW3QuZHJhZ0NhdGVnb3J5RGlzcGxheUluZF07by5tb2RlbC5kcmFnWSs9bi5ldmVudC5keTt2YXIgcz1vLm1vZGVsLmRyYWdZLGw9by5tb2RlbC5kaXNwbGF5SW5kLGM9YS5jYXRlZ29yaWVzLHU9Y1tsLTFdLGg9Y1tsKzFdO3ZvaWQgMCE9PXUmJnM8dS55K3UuaGVpZ2h0LzImJihvLm1vZGVsLmRpc3BsYXlJbmQ9dS5tb2RlbC5kaXNwbGF5SW5kLHUubW9kZWwuZGlzcGxheUluZD1sKSx2b2lkIDAhPT1oJiZzK28uaGVpZ2h0PmgueStoLmhlaWdodC8yJiYoby5tb2RlbC5kaXNwbGF5SW5kPWgubW9kZWwuZGlzcGxheUluZCxoLm1vZGVsLmRpc3BsYXlJbmQ9bCksdC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kPW8ubW9kZWwuZGlzcGxheUluZH1pZihudWxsPT09dC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kfHxcImZyZWVmb3JtXCI9PT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQpe2EubW9kZWwuZHJhZ1g9bi5ldmVudC54O3ZhciBmPXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW3JdLHA9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbaV07dm9pZCAwIT09ZiYmYS5tb2RlbC5kcmFnWDxmLngrZi53aWR0aCYmKGEubW9kZWwuZGlzcGxheUluZD1mLm1vZGVsLmRpc3BsYXlJbmQsZi5tb2RlbC5kaXNwbGF5SW5kPWUpLHZvaWQgMCE9PXAmJmEubW9kZWwuZHJhZ1grYS53aWR0aD5wLngmJihhLm1vZGVsLmRpc3BsYXlJbmQ9cC5tb2RlbC5kaXNwbGF5SW5kLHAubW9kZWwuZGlzcGxheUluZD10LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kKSx0LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kPWEubW9kZWwuZGlzcGxheUluZH1SKHQucGFyY2F0c1ZpZXdNb2RlbCksUCh0LnBhcmNhdHNWaWV3TW9kZWwpLEkodC5wYXJjYXRzVmlld01vZGVsKSxPKHQucGFyY2F0c1ZpZXdNb2RlbCl9fWZ1bmN0aW9uIEwodCl7aWYoXCJmaXhlZFwiIT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50JiZudWxsIT09dC5kcmFnRGltZW5zaW9uRGlzcGxheUluZCl7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKFwidGV4dFwiKS5hdHRyKFwiZm9udC13ZWlnaHRcIixcIm5vcm1hbFwiKTt2YXIgZT17fSxyPXoodC5wYXJjYXRzVmlld01vZGVsKSxhPXQucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5SW5kfSksbz10LmluaXRpYWxEcmFnRGltZW5zaW9uRGlzcGxheUluZHMuc29tZShmdW5jdGlvbih0LGUpe3JldHVybiB0IT09YVtlXX0pO28mJmEuZm9yRWFjaChmdW5jdGlvbihyLG4pe3ZhciBpPXQucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25zW25dLmNvbnRhaW5lckluZDtlW1wiZGltZW5zaW9uc1tcIitpK1wiXS5kaXNwbGF5aW5kZXhcIl09cn0pO3ZhciBzPSExO2lmKG51bGwhPT10LmRyYWdDYXRlZ29yeURpc3BsYXlJbmQpe3ZhciBsPXQubW9kZWwuY2F0ZWdvcmllcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheUluZH0pO2lmKHM9dC5pbml0aWFsRHJhZ0NhdGVnb3J5RGlzcGxheUluZHMuc29tZShmdW5jdGlvbih0LGUpe3JldHVybiB0IT09bFtlXX0pKXt2YXIgYz10Lm1vZGVsLmNhdGVnb3JpZXMuc2xpY2UoKS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGlzcGxheUluZC1lLmRpc3BsYXlJbmR9KSx1PWMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3J5VmFsdWV9KSxoPWMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3J5TGFiZWx9KTtlW1wiZGltZW5zaW9uc1tcIit0Lm1vZGVsLmNvbnRhaW5lckluZCtcIl0uY2F0ZWdvcnlhcnJheVwiXT1bdV0sZVtcImRpbWVuc2lvbnNbXCIrdC5tb2RlbC5jb250YWluZXJJbmQrXCJdLnRpY2t0ZXh0XCJdPVtoXSxlW1wiZGltZW5zaW9uc1tcIit0Lm1vZGVsLmNvbnRhaW5lckluZCtcIl0uY2F0ZWdvcnlvcmRlclwiXT1cImFycmF5XCJ9fWlmKC0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoXCJza2lwXCIpJiYhdC5kcmFnSGFzTW92ZWQmJnQucG90ZW50aWFsQ2xpY2tCYW5kJiYoXCJjb2xvclwiPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyb24/QSh0LnBvdGVudGlhbENsaWNrQmFuZCxcInBsb3RseV9jbGlja1wiLG4uZXZlbnQuc291cmNlRXZlbnQpOmsodC5wb3RlbnRpYWxDbGlja0JhbmQsXCJwbG90bHlfY2xpY2tcIixuLmV2ZW50LnNvdXJjZUV2ZW50KSksdC5tb2RlbC5kcmFnWD1udWxsLG51bGwhPT10LmRyYWdDYXRlZ29yeURpc3BsYXlJbmQpdC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbdC5kcmFnRGltZW5zaW9uRGlzcGxheUluZF0uY2F0ZWdvcmllc1t0LmRyYWdDYXRlZ29yeURpc3BsYXlJbmRdLm1vZGVsLmRyYWdZPW51bGwsdC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kPW51bGw7dC5kcmFnRGltZW5zaW9uRGlzcGxheUluZD1udWxsLHQucGFyY2F0c1ZpZXdNb2RlbC5kcmFnRGltZW5zaW9uPW51bGwsdC5kcmFnSGFzTW92ZWQ9bnVsbCx0LnBvdGVudGlhbENsaWNrQmFuZD1udWxsLFIodC5wYXJjYXRzVmlld01vZGVsKSxQKHQucGFyY2F0c1ZpZXdNb2RlbCksbi50cmFuc2l0aW9uKCkuZHVyYXRpb24oMzAwKS5lYXNlKFwiY3ViaWMtaW4tb3V0XCIpLmVhY2goZnVuY3Rpb24oKXtJKHQucGFyY2F0c1ZpZXdNb2RlbCwhMCksTyh0LnBhcmNhdHNWaWV3TW9kZWwsITApfSkuZWFjaChcImVuZFwiLGZ1bmN0aW9uKCl7KG98fHMpJiZpLnJlc3R5bGUodC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LGUsW3JdKX0pfX1mdW5jdGlvbiB6KHQpe2Zvcih2YXIgZSxyPXQuZ3JhcGhEaXYuX2Z1bGxEYXRhLG49MDtuPHIubGVuZ3RoO24rKylpZih0LmtleT09PXJbbl0udWlkKXtlPW47YnJlYWt9cmV0dXJuIGV9ZnVuY3Rpb24gTyh0LGUpe3ZhciByO3ZvaWQgMD09PWUmJihlPSExKSx0LnBhdGhTZWxlY3Rpb24uZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5wYXRoc30saCksKHI9dC5wYXRoU2VsZWN0aW9uLGU/ci50cmFuc2l0aW9uKCk6cikuYXR0cihcImRcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5zdmdEfSl9ZnVuY3Rpb24gSSh0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGU/dC50cmFuc2l0aW9uKCk6dH12b2lkIDA9PT1lJiYoZT0hMSksdC5kaW1lbnNpb25TZWxlY3Rpb24uZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5kaW1lbnNpb25zfSxoKTt2YXIgaT10LmRpbWVuc2lvblNlbGVjdGlvbi5zZWxlY3RBbGwoXCJnLmNhdGVnb3J5XCIpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcmllc30saCk7cih0LmRpbWVuc2lvblNlbGVjdGlvbikuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKFwiK3QueCtcIiwgMClcIn0pLHIoaSkuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKDAsIFwiK3QueStcIilcIn0pLGkuc2VsZWN0KFwiLmRpbWxhYmVsXCIpLnRleHQoZnVuY3Rpb24odCxlKXtyZXR1cm4gMD09PWU/dC5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmRpbWVuc2lvbnNbdC5tb2RlbC5kaW1lbnNpb25JbmRdLmRpbWVuc2lvbkxhYmVsOm51bGx9KSxpLnNlbGVjdChcIi5jYXRsYWJlbFwiKS5hdHRyKFwidGV4dC1hbmNob3JcIixmdW5jdGlvbih0KXtyZXR1cm4gZih0KT9cInN0YXJ0XCI6XCJlbmRcIn0pLmF0dHIoXCJ4XCIsZnVuY3Rpb24odCl7cmV0dXJuIGYodCk/dC53aWR0aCs1Oi01fSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZSxyO2YodCk/KGU9dC53aWR0aCs1LHI9XCJzdGFydFwiKTooZT0tNSxyPVwiZW5kXCIpLG4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbChcInRzcGFuXCIpLmF0dHIoXCJ4XCIsZSkuYXR0cihcInRleHQtYW5jaG9yXCIscil9KTt2YXIgYT1pLnNlbGVjdEFsbChcInJlY3QuYmFuZHJlY3RcIikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5iYW5kc30saCkscz1hLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKS5hdHRyKFwiY2xhc3NcIixcImJhbmRyZWN0XCIpLmF0dHIoXCJjdXJzb3JcIixcIm1vdmVcIikuYXR0cihcInN0cm9rZS1vcGFjaXR5XCIsMCkuYXR0cihcImZpbGxcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2xvcn0pLmF0dHIoXCJmaWxsLW9wYWNpdHlcIiwwKTthLmF0dHIoXCJmaWxsXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sb3J9KS5hdHRyKFwid2lkdGhcIixmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aH0pLmF0dHIoXCJoZWlnaHRcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KS5hdHRyKFwieVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSxfKHMpLGEuZWFjaChmdW5jdGlvbigpe28ucmFpc2VUb1RvcCh0aGlzKX0pLGEuZXhpdCgpLnJlbW92ZSgpfWZ1bmN0aW9uIEQodCxlLHIsaSxhKXt2YXIgbyxzLGw9W10sYz1bXTtmb3Iocz0wO3M8ci5sZW5ndGgtMTtzKyspbz1uLmludGVycG9sYXRlTnVtYmVyKHJbc10rdFtzXSx0W3MrMV0pLGwucHVzaChvKGEpKSxjLnB1c2gobygxLWEpKTt2YXIgdT1cIk0gXCIrdFswXStcIixcIitlWzBdO2Zvcih1Kz1cImxcIityWzBdK1wiLDAgXCIscz0xO3M8ci5sZW5ndGg7cysrKXUrPVwiQ1wiK2xbcy0xXStcIixcIitlW3MtMV0rXCIgXCIrY1tzLTFdK1wiLFwiK2Vbc10rXCIgXCIrdFtzXStcIixcIitlW3NdLHUrPVwibFwiK3Jbc10rXCIsMCBcIjtmb3IodSs9XCJsMCxcIitpK1wiIFwiLHUrPVwibCAtXCIrcltyLmxlbmd0aC0xXStcIiwwIFwiLHM9ci5sZW5ndGgtMjtzPj0wO3MtLSl1Kz1cIkNcIitjW3NdK1wiLFwiKyhlW3MrMV0raSkrXCIgXCIrbFtzXStcIixcIisoZVtzXStpKStcIiBcIisodFtzXStyW3NdKStcIixcIisoZVtzXStpKSx1Kz1cImwtXCIrcltzXStcIiwwIFwiO3JldHVybiB1Kz1cIlpcIn1mdW5jdGlvbiBQKHQpe3ZhciBlPXQuZGltZW5zaW9ucyxyPXQubW9kZWwsbj1lLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yaWVzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC55fSl9KSxpPXQubW9kZWwuZGltZW5zaW9ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcmllcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheUluZH0pfSksYT10Lm1vZGVsLmRpbWVuc2lvbnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3BsYXlJbmR9KSxvPXQuZGltZW5zaW9ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubW9kZWwuZGltZW5zaW9uSW5kfSkscz1lLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC54fSksbD1lLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aH0pLGM9W107Zm9yKHZhciB1IGluIHIucGF0aHMpci5wYXRocy5oYXNPd25Qcm9wZXJ0eSh1KSYmYy5wdXNoKHIucGF0aHNbdV0pO2Z1bmN0aW9uIGgodCl7dmFyIGU9dC5jYXRlZ29yeUluZHMubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGlbZV1bdF19KTtyZXR1cm4gby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KX1jLnNvcnQoZnVuY3Rpb24oZSxyKXt2YXIgbj1oKGUpLGk9aChyKTtyZXR1cm5cImJhY2t3YXJkXCI9PT10LnNvcnRwYXRocyYmKG4ucmV2ZXJzZSgpLGkucmV2ZXJzZSgpKSxuLnB1c2goZS52YWx1ZUluZHNbMF0pLGkucHVzaChyLnZhbHVlSW5kc1swXSksdC5idW5kbGVjb2xvcnMmJihuLnVuc2hpZnQoZS5yYXdDb2xvciksaS51bnNoaWZ0KHIucmF3Q29sb3IpKSxuPGk/LTE6bj5pPzE6MH0pO2Zvcih2YXIgZj1uZXcgQXJyYXkoYy5sZW5ndGgpLHA9ZVswXS5tb2RlbC5jb3VudCxkPWVbMF0uY2F0ZWdvcmllcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pLGc9MDtnPGMubGVuZ3RoO2crKyl7dmFyIHYsbT1jW2ddO3Y9cD4wP2QqKG0uY291bnQvcCk6MDtmb3IodmFyIHkseD1uZXcgQXJyYXkobi5sZW5ndGgpLGI9MDtiPG0uY2F0ZWdvcnlJbmRzLmxlbmd0aDtiKyspe3ZhciBfPW0uY2F0ZWdvcnlJbmRzW2JdLHc9aVtiXVtfXSxrPWFbYl07eFtrXT1uW2tdW3ddLG5ba11bd10rPXY7dmFyIEE9dC5kaW1lbnNpb25zW2tdLmNhdGVnb3JpZXNbd10sVD1BLmJhbmRzLmxlbmd0aCxNPUEuYmFuZHNbVC0xXTtpZih2b2lkIDA9PT1NfHxtLnJhd0NvbG9yIT09TS5yYXdDb2xvcil7dmFyIFM9dm9pZCAwPT09TT8wOk0ueStNLmhlaWdodDtBLmJhbmRzLnB1c2goe2tleTpTLGNvbG9yOm0uY29sb3IscmF3Q29sb3I6bS5yYXdDb2xvcixoZWlnaHQ6dix3aWR0aDpBLndpZHRoLGNvdW50Om0uY291bnQseTpTLGNhdGVnb3J5Vmlld01vZGVsOkEscGFyY2F0c1ZpZXdNb2RlbDp0fSl9ZWxzZXt2YXIgRT1BLmJhbmRzW1QtMV07RS5oZWlnaHQrPXYsRS5jb3VudCs9bS5jb3VudH19eT1cImhzcGxpbmVcIj09PXQucGF0aFNoYXBlP0Qocyx4LGwsdiwuNSk6RChzLHgsbCx2LDApLGZbZ109e2tleTptLnZhbHVlSW5kc1swXSxtb2RlbDptLGhlaWdodDp2LGxlZnRYczpzLHRvcFlzOngsZGltV2lkdGhzOmwsc3ZnRDp5LHBhcmNhdHNWaWV3TW9kZWw6dH19dC5wYXRocz1mfWZ1bmN0aW9uIFIodCl7dmFyIGU9dC5tb2RlbC5kaW1lbnNpb25zLm1hcChmdW5jdGlvbih0KXtyZXR1cm57ZGlzcGxheUluZDp0LmRpc3BsYXlJbmQsZGltZW5zaW9uSW5kOnQuZGltZW5zaW9uSW5kfX0pO2Uuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmRpc3BsYXlJbmQtZS5kaXNwbGF5SW5kfSk7dmFyIHI9W107Zm9yKHZhciBuIGluIGUpe3ZhciBpPWVbbl0uZGltZW5zaW9uSW5kLGE9dC5tb2RlbC5kaW1lbnNpb25zW2ldO3IucHVzaChGKHQsYSkpfXQuZGltZW5zaW9ucz1yfWZ1bmN0aW9uIEYodCxlKXt2YXIgcixuPXQubW9kZWwuZGltZW5zaW9ucy5sZW5ndGgsaT1lLmRpc3BsYXlJbmQ7cj00MCsobj4xPyh0LndpZHRoLTgwLTE2KS8obi0xKTowKSppO3ZhciBhLG8scyxsLGMsdT1bXSxoPXQubW9kZWwubWF4Q2F0cyxmPWUuY2F0ZWdvcmllcy5sZW5ndGgscD1lLmNvdW50LGQ9dC5oZWlnaHQtOCooaC0xKSxnPTgqKGgtZikvMix2PWUuY2F0ZWdvcmllcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJue2Rpc3BsYXlJbmQ6dC5kaXNwbGF5SW5kLGNhdGVnb3J5SW5kOnQuY2F0ZWdvcnlJbmR9fSk7Zm9yKHYuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmRpc3BsYXlJbmQtZS5kaXNwbGF5SW5kfSksYz0wO2M8ZjtjKyspbD12W2NdLmNhdGVnb3J5SW5kLG89ZS5jYXRlZ29yaWVzW2xdLGE9cD4wP28uY291bnQvcCpkOjAscz17a2V5Om8udmFsdWVJbmRzWzBdLG1vZGVsOm8sd2lkdGg6MTYsaGVpZ2h0OmEseTpudWxsIT09by5kcmFnWT9vLmRyYWdZOmcsYmFuZHM6W10scGFyY2F0c1ZpZXdNb2RlbDp0fSxnPWcrYSs4LHUucHVzaChzKTtyZXR1cm57a2V5OmUuZGltZW5zaW9uSW5kLHg6bnVsbCE9PWUuZHJhZ1g/ZS5kcmFnWDpyLHk6MCx3aWR0aDoxNixtb2RlbDplLGNhdGVnb3JpZXM6dSxwYXJjYXRzVmlld01vZGVsOnQsZHJhZ0NhdGVnb3J5RGlzcGxheUluZDpudWxsLGRyYWdEaW1lbnNpb25EaXNwbGF5SW5kOm51bGwsaW5pdGlhbERyYWdEaW1lbnNpb25EaXNwbGF5SW5kczpudWxsLGluaXRpYWxEcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kczpudWxsLGRyYWdIYXNNb3ZlZDpudWxsLHBvdGVudGlhbENsaWNrQmFuZDpudWxsfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dShyLHQsbixlKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIjo3MjUsXCIuLi8uLi9wbG90X2FwaS9wbG90X2FwaVwiOjczNixkMzoxNTUsdGlueWNvbG9yMjo1MjJ9XSwxMDE0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vcGFyY2F0c1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9dC5fZnVsbExheW91dCxvPWEuX3BhcGVyLHM9YS5fc2l6ZTtuKHQsbyxlLHt3aWR0aDpzLncsaGVpZ2h0OnMuaCxtYXJnaW46e3Q6cy50LHI6cy5yLGI6cy5iLGw6cy5sfX0scixpKX19LHtcIi4vcGFyY2F0c1wiOjEwMTN9XSwxMDE1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL3Bsb3RzL2RvbWFpblwiKS5hdHRyaWJ1dGVzLGw9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxjPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLnRlbXBsYXRlZEFycmF5O2UuZXhwb3J0cz17ZG9tYWluOnMoe25hbWU6XCJwYXJjb29yZHNcIix0cmFjZTohMCxlZGl0VHlwZTpcImNhbGNcIn0pLGxhYmVsZm9udDpvKHtlZGl0VHlwZTpcImNhbGNcIn0pLHRpY2tmb250Om8oe2VkaXRUeXBlOlwiY2FsY1wifSkscmFuZ2Vmb250Om8oe2VkaXRUeXBlOlwiY2FsY1wifSksZGltZW5zaW9uczpjKFwiZGltZW5zaW9uXCIse2xhYmVsOnt2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHRpY2t2YWxzOmwoe30sYS50aWNrdmFscyx7ZWRpdFR5cGU6XCJjYWxjXCJ9KSx0aWNrdGV4dDpsKHt9LGEudGlja3RleHQse2VkaXRUeXBlOlwiY2FsY1wifSksdGlja2Zvcm1hdDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCIzc1wiLGVkaXRUeXBlOlwiY2FsY1wifSx2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LHJhbmdlOnt2YWxUeXBlOlwiaW5mb19hcnJheVwiLGl0ZW1zOlt7dmFsVHlwZTpcIm51bWJlclwiLGVkaXRUeXBlOlwiY2FsY1wifSx7dmFsVHlwZTpcIm51bWJlclwiLGVkaXRUeXBlOlwiY2FsY1wifV0sZWRpdFR5cGU6XCJjYWxjXCJ9LGNvbnN0cmFpbnRyYW5nZTp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixmcmVlTGVuZ3RoOiEwLGRpbWVuc2lvbnM6XCIxLTJcIixpdGVtczpbe3ZhbFR5cGU6XCJudW1iZXJcIixlZGl0VHlwZTpcImNhbGNcIn0se3ZhbFR5cGU6XCJudW1iZXJcIixlZGl0VHlwZTpcImNhbGNcIn1dLGVkaXRUeXBlOlwiY2FsY1wifSxtdWx0aXNlbGVjdDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSx2YWx1ZXM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGVkaXRUeXBlOlwiY2FsY1wifSksbGluZTpsKG4oXCJsaW5lXCIse2NvbG9yc2NhbGVEZmx0OlwiVmlyaWRpc1wiLGF1dG9Db2xvckRmbHQ6ITEsZWRpdFR5cGVPdmVycmlkZTpcImNhbGNcIn0pLHtjb2xvcmJhcjppLGVkaXRUeXBlOlwiY2FsY1wifSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIjo1NzksXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzXCI6NzYxLFwiLi4vLi4vcGxvdHMvZG9tYWluXCI6Nzc0LFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCI6Nzc1fV0sMTAxNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2NvbnN0YW50c1wiKSxpPXQoXCJkM1wiKSxhPXQoXCIuLi8uLi9saWIvZ3VwXCIpLmtleUZ1bixvPXQoXCIuLi8uLi9saWIvZ3VwXCIpLnJlcGVhdCxzPXQoXCIuLi8uLi9saWJcIikuc29ydGVyQXNjLGw9bi5iYXIuc25hcFJhdGlvO2Z1bmN0aW9uIGModCxlKXtyZXR1cm4gdCooMS1sKStlKmx9dmFyIHU9bi5iYXIuc25hcENsb3NlO2Z1bmN0aW9uIGgodCxlKXtyZXR1cm4gdCooMS11KStlKnV9ZnVuY3Rpb24gZih0LGUscil7aWYoZChlLHIpKXJldHVybiBlO2Zvcih2YXIgbj10WzBdLGk9bixhPTE7YTx0Lmxlbmd0aDthKyspe3ZhciBvPXRbYV07aWYoZTxoKG4sbykpcmV0dXJuIGMobixpKTtpZihlPG98fGE9PT10Lmxlbmd0aC0xKXJldHVybiBjKG8sbik7aT1uLG49b319ZnVuY3Rpb24gcCh0LGUscil7aWYoZChlLHIpKXJldHVybiBlO2Zvcih2YXIgbj10W3QubGVuZ3RoLTFdLGk9bixhPXQubGVuZ3RoLTI7YT49MDthLS0pe3ZhciBvPXRbYV07aWYoZT5oKG4sbykpcmV0dXJuIGMobixpKTtpZihlPm98fGE9PT10Lmxlbmd0aC0xKXJldHVybiBjKG8sbik7aT1uLG49b319ZnVuY3Rpb24gZCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKHQ+PWVbcl1bMF0mJnQ8PWVbcl1bMV0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZyh0KXt0LmF0dHIoXCJ4XCIsLW4uYmFyLmNhcHR1cmVXaWR0aC8yKS5hdHRyKFwid2lkdGhcIixuLmJhci5jYXB0dXJlV2lkdGgpfWZ1bmN0aW9uIHYodCl7dC5hdHRyKFwidmlzaWJpbGl0eVwiLFwidmlzaWJsZVwiKS5zdHlsZShcInZpc2liaWxpdHlcIixcInZpc2libGVcIikuYXR0cihcImZpbGxcIixcInllbGxvd1wiKS5hdHRyKFwib3BhY2l0eVwiLDApfWZ1bmN0aW9uIG0odCl7aWYoIXQuYnJ1c2guZmlsdGVyU3BlY2lmaWVkKXJldHVyblwiMCxcIit0LmhlaWdodDtmb3IodmFyIGUscixuLGk9eSh0LmJydXNoLmZpbHRlci5nZXRDb25zb2xpZGF0ZWQoKSx0LmhlaWdodCksYT1bMF0sbz1pLmxlbmd0aD9pWzBdWzBdOm51bGwscz0wO3M8aS5sZW5ndGg7cysrKXI9KGU9aVtzXSlbMV0tZVswXSxhLnB1c2gobyksYS5wdXNoKHIpLChuPXMrMSk8aS5sZW5ndGgmJihvPWlbbl1bMF0tZVsxXSk7cmV0dXJuIGEucHVzaCh0LmhlaWdodCksYX1mdW5jdGlvbiB5KHQsZSl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdCplfSkuc29ydChzKX0pfWZ1bmN0aW9uIHgoKXtpLnNlbGVjdChkb2N1bWVudC5ib2R5KS5zdHlsZShcImN1cnNvclwiLG51bGwpfWZ1bmN0aW9uIGIodCl7dC5hdHRyKFwic3Ryb2tlLWRhc2hhcnJheVwiLG0pfWZ1bmN0aW9uIF8odCxlKXt2YXIgcj1pLnNlbGVjdCh0KS5zZWxlY3RBbGwoXCIuaGlnaGxpZ2h0LCAuaGlnaGxpZ2h0LXNoYWRvd1wiKTtiKGU/ci50cmFuc2l0aW9uKCkuZHVyYXRpb24obi5iYXIuc25hcER1cmF0aW9uKS5lYWNoKFwiZW5kXCIsZSk6cil9ZnVuY3Rpb24gdyh0LGUpe3ZhciByLGk9dC5icnVzaCxhPU5hTixvPXt9O2lmKGkuZmlsdGVyU3BlY2lmaWVkKXt2YXIgcz10LmhlaWdodCxsPWkuZmlsdGVyLmdldENvbnNvbGlkYXRlZCgpLGM9eShsLHMpLHU9TmFOLGg9TmFOLGY9TmFOO2ZvcihyPTA7cjw9Yy5sZW5ndGg7cisrKXt2YXIgcD1jW3JdO2lmKHAmJnBbMF08PWUmJmU8PXBbMV0pe3U9cjticmVha31pZihoPXI/ci0xOk5hTixwJiZwWzBdPmUpe2Y9cjticmVha319aWYoYT11LGlzTmFOKGEpJiYoYT1pc05hTihoKXx8aXNOYU4oZik/aXNOYU4oaCk/ZjpoOmUtY1toXVsxXTxjW2ZdWzBdLWU/aDpmKSwhaXNOYU4oYSkpe3ZhciBkPWNbYV0sZz1mdW5jdGlvbih0LGUpe3ZhciByPW4uYmFyLmhhbmRsZUhlaWdodDtpZighKGU+dFsxXStyfHxlPHRbMF0tcikpcmV0dXJuIGU+PS45KnRbMV0rLjEqdFswXT9cIm5cIjplPD0uOSp0WzBdKy4xKnRbMV0/XCJzXCI6XCJuc1wifShkLGUpO2cmJihvLmludGVydmFsPWxbYV0sby5pbnRlcnZhbFBpeD1kLG8ucmVnaW9uPWcpfX1pZih0Lm9yZGluYWwmJiFvLnJlZ2lvbil7dmFyIHY9dC51bml0VGlja3ZhbHMsbT10LnVuaXRUb1BhZGRlZFB4LmludmVydChlKTtmb3Iocj0wO3I8di5sZW5ndGg7cisrKXt2YXIgeD1bLjI1KnZbTWF0aC5tYXgoci0xLDApXSsuNzUqdltyXSwuMjUqdltNYXRoLm1pbihyKzEsdi5sZW5ndGgtMSldKy43NSp2W3JdXTtpZihtPj14WzBdJiZtPD14WzFdKXtvLmNsaWNrYWJsZU9yZGluYWxSYW5nZT14O2JyZWFrfX19cmV0dXJuIG99ZnVuY3Rpb24gayh0KXt0Lm9uKFwibW91c2Vtb3ZlXCIsZnVuY3Rpb24odCl7aWYoaS5ldmVudC5wcmV2ZW50RGVmYXVsdCgpLCF0LnBhcmVudC5pbkJydXNoRHJhZyl7dmFyIGU9dyh0LHQuaGVpZ2h0LWkubW91c2UodGhpcylbMV0tMipuLnZlcnRpY2FsUGFkZGluZykscj1cImNyb3NzaGFpclwiO2UuY2xpY2thYmxlT3JkaW5hbFJhbmdlP3I9XCJwb2ludGVyXCI6ZS5yZWdpb24mJihyPWUucmVnaW9uK1wiLXJlc2l6ZVwiKSxpLnNlbGVjdChkb2N1bWVudC5ib2R5KS5zdHlsZShcImN1cnNvclwiLHIpfX0pLm9uKFwibW91c2VsZWF2ZVwiLGZ1bmN0aW9uKHQpe3QucGFyZW50LmluQnJ1c2hEcmFnfHx4KCl9KS5jYWxsKGkuYmVoYXZpb3IuZHJhZygpLm9uKFwiZHJhZ3N0YXJ0XCIsZnVuY3Rpb24odCl7aS5ldmVudC5zb3VyY2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKTt2YXIgZT10LmhlaWdodC1pLm1vdXNlKHRoaXMpWzFdLTIqbi52ZXJ0aWNhbFBhZGRpbmcscj10LnVuaXRUb1BhZGRlZFB4LmludmVydChlKSxhPXQuYnJ1c2gsbz13KHQsZSkscz1vLmludGVydmFsLGw9YS5zdmdCcnVzaDtpZihsLndhc0RyYWdnZWQ9ITEsbC5ncmFiYmluZ0Jhcj1cIm5zXCI9PT1vLnJlZ2lvbixsLmdyYWJiaW5nQmFyKXt2YXIgYz1zLm1hcCh0LnVuaXRUb1BhZGRlZFB4KTtsLmdyYWJQb2ludD1lLWNbMF0tbi52ZXJ0aWNhbFBhZGRpbmcsbC5iYXJMZW5ndGg9Y1sxXS1jWzBdfWwuY2xpY2thYmxlT3JkaW5hbFJhbmdlPW8uY2xpY2thYmxlT3JkaW5hbFJhbmdlLGwuc3RheWluZ0ludGVydmFscz10Lm11bHRpc2VsZWN0JiZhLmZpbHRlclNwZWNpZmllZD9hLmZpbHRlci5nZXRDb25zb2xpZGF0ZWQoKTpbXSxzJiYobC5zdGF5aW5nSW50ZXJ2YWxzPWwuc3RheWluZ0ludGVydmFscy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0hPT1zWzBdJiZ0WzFdIT09c1sxXX0pKSxsLnN0YXJ0RXh0ZW50PW8ucmVnaW9uP3NbXCJzXCI9PT1vLnJlZ2lvbj8xOjBdOnIsdC5wYXJlbnQuaW5CcnVzaERyYWc9ITAsbC5icnVzaFN0YXJ0Q2FsbGJhY2soKX0pLm9uKFwiZHJhZ1wiLGZ1bmN0aW9uKHQpe2kuZXZlbnQuc291cmNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7dmFyIGU9dC5oZWlnaHQtaS5tb3VzZSh0aGlzKVsxXS0yKm4udmVydGljYWxQYWRkaW5nLHI9dC5icnVzaC5zdmdCcnVzaDtyLndhc0RyYWdnZWQ9ITAsci5ncmFiYmluZ0Jhcj9yLm5ld0V4dGVudD1bZS1yLmdyYWJQb2ludCxlK3IuYmFyTGVuZ3RoLXIuZ3JhYlBvaW50XS5tYXAodC51bml0VG9QYWRkZWRQeC5pbnZlcnQpOnIubmV3RXh0ZW50PVtyLnN0YXJ0RXh0ZW50LHQudW5pdFRvUGFkZGVkUHguaW52ZXJ0KGUpXS5zb3J0KHMpO3ZhciBhPU1hdGgubWF4KDAsLXIubmV3RXh0ZW50WzBdKSxvPU1hdGgubWF4KDAsci5uZXdFeHRlbnRbMV0tMSk7ci5uZXdFeHRlbnRbMF0rPWEsci5uZXdFeHRlbnRbMV0tPW8sci5ncmFiYmluZ0JhciYmKHIubmV3RXh0ZW50WzFdKz1hLHIubmV3RXh0ZW50WzBdLT1vKSx0LmJydXNoLmZpbHRlclNwZWNpZmllZD0hMCxyLmV4dGVudD1yLnN0YXlpbmdJbnRlcnZhbHMuY29uY2F0KFtyLm5ld0V4dGVudF0pLHIuYnJ1c2hDYWxsYmFjayh0KSxfKHRoaXMucGFyZW50Tm9kZSl9KS5vbihcImRyYWdlbmRcIixmdW5jdGlvbih0KXtpLmV2ZW50LnNvdXJjZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3ZhciBlPXQuYnJ1c2gscj1lLmZpbHRlcixuPWUuc3ZnQnJ1c2gsYT1uLmdyYWJiaW5nQmFyO2lmKG4uZ3JhYmJpbmdCYXI9ITEsbi5ncmFiTG9jYXRpb249dm9pZCAwLHQucGFyZW50LmluQnJ1c2hEcmFnPSExLHgoKSwhbi53YXNEcmFnZ2VkKXJldHVybiBuLndhc0RyYWdnZWQ9dm9pZCAwLG4uY2xpY2thYmxlT3JkaW5hbFJhbmdlP2UuZmlsdGVyU3BlY2lmaWVkJiZ0Lm11bHRpc2VsZWN0P24uZXh0ZW50LnB1c2gobi5jbGlja2FibGVPcmRpbmFsUmFuZ2UpOihuLmV4dGVudD1bbi5jbGlja2FibGVPcmRpbmFsUmFuZ2VdLGUuZmlsdGVyU3BlY2lmaWVkPSEwKTphPyhuLmV4dGVudD1uLnN0YXlpbmdJbnRlcnZhbHMsMD09PW4uZXh0ZW50Lmxlbmd0aCYmVChlKSk6VChlKSxuLmJydXNoQ2FsbGJhY2sodCksXyh0aGlzLnBhcmVudE5vZGUpLHZvaWQgbi5icnVzaEVuZENhbGxiYWNrKGUuZmlsdGVyU3BlY2lmaWVkP3IuZ2V0Q29uc29saWRhdGVkKCk6W10pO3ZhciBvPWZ1bmN0aW9uKCl7ci5zZXQoci5nZXRDb25zb2xpZGF0ZWQoKSl9O2lmKHQub3JkaW5hbCl7dmFyIHM9dC51bml0VGlja3ZhbHM7c1tzLmxlbmd0aC0xXTxzWzBdJiZzLnJldmVyc2UoKSxuLm5ld0V4dGVudD1bZihzLG4ubmV3RXh0ZW50WzBdLG4uc3RheWluZ0ludGVydmFscykscChzLG4ubmV3RXh0ZW50WzFdLG4uc3RheWluZ0ludGVydmFscyldO3ZhciBsPW4ubmV3RXh0ZW50WzFdPm4ubmV3RXh0ZW50WzBdO24uZXh0ZW50PW4uc3RheWluZ0ludGVydmFscy5jb25jYXQobD9bbi5uZXdFeHRlbnRdOltdKSxuLmV4dGVudC5sZW5ndGh8fFQoZSksbi5icnVzaENhbGxiYWNrKHQpLGw/Xyh0aGlzLnBhcmVudE5vZGUsbyk6KG8oKSxfKHRoaXMucGFyZW50Tm9kZSkpfWVsc2UgbygpO24uYnJ1c2hFbmRDYWxsYmFjayhlLmZpbHRlclNwZWNpZmllZD9yLmdldENvbnNvbGlkYXRlZCgpOltdKX0pKX1mdW5jdGlvbiBBKHQsZSl7cmV0dXJuIHRbMF0tZVswXX1mdW5jdGlvbiBUKHQpe3QuZmlsdGVyU3BlY2lmaWVkPSExLHQuc3ZnQnJ1c2guZXh0ZW50PVtbMCwxXV19ZnVuY3Rpb24gTSh0KXtmb3IodmFyIGUscj10LnNsaWNlKCksbj1bXSxpPXIuc2hpZnQoKTtpOyl7Zm9yKGU9aS5zbGljZSgpOyhpPXIuc2hpZnQoKSkmJmlbMF08PWVbMV07KWVbMV09TWF0aC5tYXgoZVsxXSxpWzFdKTtuLnB1c2goZSl9cmV0dXJuIG59ZS5leHBvcnRzPXttYWtlQnJ1c2g6ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvLGw9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9W107cmV0dXJue3NldDpmdW5jdGlvbihuKXtyPW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKCkuc29ydChzKX0pLnNvcnQoQSksdD1NKHIpLGU9ci5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm5bTWF0aC5taW4odFswXSxlWzBdKSxNYXRoLm1heCh0WzFdLGVbMV0pXX0sWzEvMCwtMS8wXSl9LGdldDpmdW5jdGlvbigpe3JldHVybiByLnNsaWNlKCl9LGdldENvbnNvbGlkYXRlZDpmdW5jdGlvbigpe3JldHVybiB0fSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm4gZX19fSgpO3JldHVybiBsLnNldChyKSx7ZmlsdGVyOmwsZmlsdGVyU3BlY2lmaWVkOmUsc3ZnQnJ1c2g6e2V4dGVudDpbXSxicnVzaFN0YXJ0Q2FsbGJhY2s6bixicnVzaENhbGxiYWNrOihvPWksZnVuY3Rpb24odCl7dmFyIGU9dC5icnVzaCxyPWZ1bmN0aW9uKHQpe3JldHVybiB0LnN2Z0JydXNoLmV4dGVudC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoKX0pfShlKS5zbGljZSgpO2UuZmlsdGVyLnNldChyKSxvKCl9KSxicnVzaEVuZENhbGxiYWNrOmF9fX0sZW5zdXJlQXhpc0JydXNoOmZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0QWxsKFwiLlwiK24uY24uYXhpc0JydXNoKS5kYXRhKG8sYSk7ZS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChuLmNuLmF4aXNCcnVzaCwhMCksZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoXCIuYmFja2dyb3VuZFwiKS5kYXRhKG8pO2UuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpLmNsYXNzZWQoXCJiYWNrZ3JvdW5kXCIsITApLmNhbGwoZykuY2FsbCh2KS5zdHlsZShcInBvaW50ZXItZXZlbnRzXCIsXCJhdXRvXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZSgwIFwiK24udmVydGljYWxQYWRkaW5nK1wiKVwiKSxlLmNhbGwoaykuYXR0cihcImhlaWdodFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodC1uLnZlcnRpY2FsUGFkZGluZ30pO3ZhciByPXQuc2VsZWN0QWxsKFwiLmhpZ2hsaWdodC1zaGFkb3dcIikuZGF0YShvKTtyLmVudGVyKCkuYXBwZW5kKFwibGluZVwiKS5jbGFzc2VkKFwiaGlnaGxpZ2h0LXNoYWRvd1wiLCEwKS5hdHRyKFwieFwiLC1uLmJhci53aWR0aC8yKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsbi5iYXIud2lkdGgrbi5iYXIuc3Ryb2tlV2lkdGgpLmF0dHIoXCJzdHJva2VcIixuLmJhci5zdHJva2VDb2xvcikuYXR0cihcIm9wYWNpdHlcIixuLmJhci5zdHJva2VPcGFjaXR5KS5hdHRyKFwic3Ryb2tlLWxpbmVjYXBcIixcImJ1dHRcIiksci5hdHRyKFwieTFcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KS5jYWxsKGIpO3ZhciBpPXQuc2VsZWN0QWxsKFwiLmhpZ2hsaWdodFwiKS5kYXRhKG8pO2kuZW50ZXIoKS5hcHBlbmQoXCJsaW5lXCIpLmNsYXNzZWQoXCJoaWdobGlnaHRcIiwhMCkuYXR0cihcInhcIiwtbi5iYXIud2lkdGgvMikuYXR0cihcInN0cm9rZS13aWR0aFwiLG4uYmFyLndpZHRoLW4uYmFyLnN0cm9rZVdpZHRoKS5hdHRyKFwic3Ryb2tlXCIsbi5iYXIuZmlsbENvbG9yKS5hdHRyKFwib3BhY2l0eVwiLG4uYmFyLmZpbGxPcGFjaXR5KS5hdHRyKFwic3Ryb2tlLWxpbmVjYXBcIixcImJ1dHRcIiksaS5hdHRyKFwieTFcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KS5jYWxsKGIpfShlKX0sY2xlYW5SYW5nZXM6ZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KHRbMF0pPyh0PXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNvcnQocyl9KSx0PWUubXVsdGlzZWxlY3Q/TSh0LnNvcnQoQSkpOlt0WzBdXSk6dD1bdC5zb3J0KHMpXSxlLnRpY2t2YWxzKXt2YXIgcj1lLnRpY2t2YWxzLnNsaWNlKCkuc29ydChzKTtpZighKHQ9dC5tYXAoZnVuY3Rpb24odCl7dmFyIGU9W2Yocix0WzBdLFtdKSxwKHIsdFsxXSxbXSldO2lmKGVbMV0+ZVswXSlyZXR1cm4gZX0pLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdH0pKS5sZW5ndGgpcmV0dXJufXJldHVybiB0Lmxlbmd0aD4xP3Q6dFswXX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvZ3VwXCI6Njk5LFwiLi9jb25zdGFudHNcIjoxMDE5LGQzOjE1NX1dLDEwMTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vcGxvdHMvZ2V0X2RhdGFcIikuZ2V0TW9kdWxlQ2FsY0RhdGEsYT10KFwiLi9wbG90XCIpLG89dChcIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzXCIpO3IubmFtZT1cInBhcmNvb3Jkc1wiLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT1pKHQuY2FsY2RhdGEsXCJwYXJjb29yZHNcIilbMF07ZS5sZW5ndGgmJmEodCxlKX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLl9oYXMmJm4uX2hhcyhcInBhcmNvb3Jkc1wiKSxhPWUuX2hhcyYmZS5faGFzKFwicGFyY29vcmRzXCIpO2kmJiFhJiYobi5fcGFwZXJkaXYuc2VsZWN0QWxsKFwiLnBhcmNvb3Jkc1wiKS5yZW1vdmUoKSxuLl9nbGltYWdlcy5zZWxlY3RBbGwoXCIqXCIpLnJlbW92ZSgpKX0sci50b1NWRz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll9nbGltYWdlcyxyPW4uc2VsZWN0KHQpLnNlbGVjdEFsbChcIi5zdmctY29udGFpbmVyXCIpO3IuZmlsdGVyKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9PT1yLnNpemUoKS0xfSkuc2VsZWN0QWxsKFwiLmdsLWNhbnZhcy1jb250ZXh0LCAuZ2wtY2FudmFzLWZvY3VzXCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRvRGF0YVVSTChcImltYWdlL3BuZ1wiKTtlLmFwcGVuZChcInN2ZzppbWFnZVwiKS5hdHRyKHt4bWxuczpvLnN2ZyxcInhsaW5rOmhyZWZcIjp0LHByZXNlcnZlQXNwZWN0UmF0aW86XCJub25lXCIseDowLHk6MCx3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodH0pfSksd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtuLnNlbGVjdEFsbChcIiNmaWx0ZXJCYXJQYXR0ZXJuXCIpLmF0dHIoXCJpZFwiLFwiZmlsdGVyQmFyUGF0dGVyblwiKX0sNjApfX0se1wiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIjo2NzksXCIuLi8uLi9wbG90cy9nZXRfZGF0YVwiOjc4NCxcIi4vcGxvdFwiOjEwMjUsZDM6MTU1fV0sMTAxODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVyc1wiKS5oYXNDb2xvcnNjYWxlLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCIpLGE9dChcIi4uLy4uL2xpYlwiKSxvPXQoXCIuLi8uLi9saWIvZ3VwXCIpLndyYXA7ZnVuY3Rpb24gcyh0KXtyZXR1cm4gYS5pc1R5cGVkQXJyYXkodCk/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCk6dH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPGUuZGltZW5zaW9ucy5sZW5ndGg7cisrKWUuZGltZW5zaW9uc1tyXS52YWx1ZXM9cyhlLmRpbWVuc2lvbnNbcl0udmFsdWVzKTtlLmxpbmUuY29sb3I9cyhlLmxpbmUuY29sb3IpO3ZhciBhPSEhZS5saW5lLmNvbG9yc2NhbGUmJkFycmF5LmlzQXJyYXkoZS5saW5lLmNvbG9yKSxsPWE/ZS5saW5lLmNvbG9yOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT0uNTtyZXR1cm4gZX0oZS5fbGVuZ3RoKSxjPWE/ZS5saW5lLmNvbG9yc2NhbGU6W1swLGUubGluZS5jb2xvcl0sWzEsZS5saW5lLmNvbG9yXV07cmV0dXJuIG4oZSxcImxpbmVcIikmJmkodCxlLHt2YWxzOmwsY29udGFpbmVyU3RyOlwibGluZVwiLGNMZXR0ZXI6XCJjXCJ9KSxvKHtsaW5lQ29sb3I6bCxjc2NhbGU6Y30pfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIjo1ODYsXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVyc1wiOjU4OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9ndXBcIjo2OTl9XSwxMDE5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXttYXhEaW1lbnNpb25Db3VudDo2MCxvdmVyZHJhZzo0NSx2ZXJ0aWNhbFBhZGRpbmc6Mix0aWNrRGlzdGFuY2U6NTAsY2FudmFzUGl4ZWxSYXRpbzoxLGJsb2NrTGluZUNvdW50OjVlMyxsYXllcnM6W1wiY29udGV4dExpbmVMYXllclwiLFwiZm9jdXNMaW5lTGF5ZXJcIixcInBpY2tMaW5lTGF5ZXJcIl0sYXhpc1RpdGxlT2Zmc2V0OjI4LGF4aXNFeHRlbnRPZmZzZXQ6MTAsYmFyOnt3aWR0aDo0LGNhcHR1cmVXaWR0aDoxMCxmaWxsQ29sb3I6XCJtYWdlbnRhXCIsZmlsbE9wYWNpdHk6MSxzbmFwRHVyYXRpb246MTUwLHNuYXBSYXRpbzouMjUsc25hcENsb3NlOi4wMSxzdHJva2VDb2xvcjpcIndoaXRlXCIsc3Ryb2tlT3BhY2l0eToxLHN0cm9rZVdpZHRoOjEsaGFuZGxlSGVpZ2h0OjgsaGFuZGxlT3BhY2l0eToxLGhhbmRsZU92ZXJsYXA6MH0sY246e2F4aXNFeHRlbnRUZXh0OlwiYXhpcy1leHRlbnQtdGV4dFwiLHBhcmNvb3Jkc0xpbmVMYXllcnM6XCJwYXJjb29yZHMtbGluZS1sYXllcnNcIixwYXJjb29yZHNMaW5lTGF5ZXI6XCJwYXJjb29yZHMtbGluZXNcIixwYXJjb29yZHM6XCJwYXJjb29yZHNcIixwYXJjb29yZHNDb250cm9sVmlldzpcInBhcmNvb3Jkcy1jb250cm9sLXZpZXdcIix5QXhpczpcInktYXhpc1wiLGF4aXNPdmVybGF5czpcImF4aXMtb3ZlcmxheXNcIixheGlzOlwiYXhpc1wiLGF4aXNIZWFkaW5nOlwiYXhpcy1oZWFkaW5nXCIsYXhpc1RpdGxlOlwiYXhpcy10aXRsZVwiLGF4aXNFeHRlbnQ6XCJheGlzLWV4dGVudFwiLGF4aXNFeHRlbnRUb3A6XCJheGlzLWV4dGVudC10b3BcIixheGlzRXh0ZW50VG9wVGV4dDpcImF4aXMtZXh0ZW50LXRvcC10ZXh0XCIsYXhpc0V4dGVudEJvdHRvbTpcImF4aXMtZXh0ZW50LWJvdHRvbVwiLGF4aXNFeHRlbnRCb3R0b21UZXh0OlwiYXhpcy1leHRlbnQtYm90dG9tLXRleHRcIixheGlzQnJ1c2g6XCJheGlzLWJydXNoXCJ9LGlkOntmaWx0ZXJCYXJQYXR0ZXJuOlwiZmlsdGVyLWJhci1wYXR0ZXJuXCJ9fX0se31dLDEwMjA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzXCIpLmhhc0NvbG9yc2NhbGUsYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCIpLG89dChcIi4uLy4uL3Bsb3RzL2RvbWFpblwiKS5kZWZhdWx0cyxzPXQoXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIiksbD10KFwiLi9hdHRyaWJ1dGVzXCIpLGM9dChcIi4vYXhpc2JydXNoXCIpLHU9dChcIi4vY29uc3RhbnRzXCIpLm1heERpbWVuc2lvbkNvdW50LGg9dChcIi4vbWVyZ2VfbGVuZ3RoXCIpO2Z1bmN0aW9uIGYodCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxsLmRpbWVuc2lvbnMscixpKX12YXIgaT1yKFwidmFsdWVzXCIpLGE9cihcInZpc2libGVcIik7aWYoaSYmaS5sZW5ndGh8fChhPWUudmlzaWJsZT0hMSksYSl7cihcImxhYmVsXCIpLHIoXCJ0aWNrdmFsc1wiKSxyKFwidGlja3RleHRcIikscihcInRpY2tmb3JtYXRcIikscihcInJhbmdlXCIpLHIoXCJtdWx0aXNlbGVjdFwiKTt2YXIgbz1yKFwiY29uc3RyYWludHJhbmdlXCIpO28mJihlLmNvbnN0cmFpbnRyYW5nZT1jLmNsZWFuUmFuZ2VzKG8sZSkpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7ZnVuY3Rpb24gcChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbCxyLGkpfXZhciBkPXQuZGltZW5zaW9ucztBcnJheS5pc0FycmF5KGQpJiZkLmxlbmd0aD51JiYobi5sb2coXCJwYXJjb29yZHMgdHJhY2VzIHN1cHBvcnQgdXAgdG8gXCIrdStcIiBkaW1lbnNpb25zIGF0IHRoZSBtb21lbnRcIiksZC5zcGxpY2UodSkpO3ZhciBnPXModCxlLHtuYW1lOlwiZGltZW5zaW9uc1wiLGhhbmRsZUl0ZW1EZWZhdWx0czpmfSksdj1mdW5jdGlvbih0LGUscixvLHMpe3ZhciBsPXMoXCJsaW5lLmNvbG9yXCIscik7aWYoaSh0LFwibGluZVwiKSYmbi5pc0FycmF5T3JUeXBlZEFycmF5KGwpKXtpZihsLmxlbmd0aClyZXR1cm4gcyhcImxpbmUuY29sb3JzY2FsZVwiKSxhKHQsZSxvLHMse3ByZWZpeDpcImxpbmUuXCIsY0xldHRlcjpcImNcIn0pLGwubGVuZ3RoO2UubGluZS5jb2xvcj1yfXJldHVybiAxLzB9KHQsZSxyLGMscCk7byhlLGMscCksQXJyYXkuaXNBcnJheShnKSYmZy5sZW5ndGh8fChlLnZpc2libGU9ITEpLGgoZSxnLFwidmFsdWVzXCIsdik7dmFyIG09e2ZhbWlseTpjLmZvbnQuZmFtaWx5LHNpemU6TWF0aC5yb3VuZChjLmZvbnQuc2l6ZS8xLjIpLGNvbG9yOmMuZm9udC5jb2xvcn07bi5jb2VyY2VGb250KHAsXCJsYWJlbGZvbnRcIixtKSxuLmNvZXJjZUZvbnQocCxcInRpY2tmb250XCIsbSksbi5jb2VyY2VGb250KHAsXCJyYW5nZWZvbnRcIixtKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiOjU4OCxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzXCI6NTg5LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCI6NzQ1LFwiLi4vLi4vcGxvdHMvZG9tYWluXCI6Nzc0LFwiLi9hdHRyaWJ1dGVzXCI6MTAxNSxcIi4vYXhpc2JydXNoXCI6MTAxNixcIi4vY29uc3RhbnRzXCI6MTAxOSxcIi4vbWVyZ2VfbGVuZ3RoXCI6MTAyM31dLDEwMjE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLG4uY2FsYz10KFwiLi9jYWxjXCIpLG4ucGxvdD10KFwiLi9wbG90XCIpLG4uY29sb3JiYXI9e2NvbnRhaW5lcjpcImxpbmVcIixtaW46XCJjbWluXCIsbWF4OlwiY21heFwifSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cInBhcmNvb3Jkc1wiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4vYmFzZV9wbG90XCIpLG4uY2F0ZWdvcmllcz1bXCJnbFwiLFwicmVnbFwiLFwibm9PcGFjaXR5XCIsXCJub0hvdmVyXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi9hdHRyaWJ1dGVzXCI6MTAxNSxcIi4vYmFzZV9wbG90XCI6MTAxNyxcIi4vY2FsY1wiOjEwMTgsXCIuL2RlZmF1bHRzXCI6MTAyMCxcIi4vcGxvdFwiOjEwMjV9XSwxMDIyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsc2xpZnlcIiksaT1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWM0IHAwLCBwMSwgcDIsIHAzLFxcbiAgICAgICAgICAgICAgIHA0LCBwNSwgcDYsIHA3LFxcbiAgICAgICAgICAgICAgIHA4LCBwOSwgcGEsIHBiLFxcbiAgICAgICAgICAgICAgIHBjLCBwZCwgcGU7XFxuXFxuYXR0cmlidXRlIHZlYzQgcGY7XFxuXFxudW5pZm9ybSBtYXQ0IGRpbTFBLCBkaW0yQSwgZGltMUIsIGRpbTJCLCBkaW0xQywgZGltMkMsIGRpbTFELCBkaW0yRCxcXG4gICAgICAgICAgICAgbG9BLCBoaUEsIGxvQiwgaGlCLCBsb0MsIGhpQywgbG9ELCBoaUQ7XFxuXFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb24sXFxuICAgICAgICAgICAgIHZpZXdCb3hQb3NpdGlvbixcXG4gICAgICAgICAgICAgdmlld0JveFNpemU7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgcGFsZXR0ZTtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXNrO1xcbnVuaWZvcm0gZmxvYXQgbWFza0hlaWdodDtcXG5cXG51bmlmb3JtIHZlYzIgY29sb3JDbGFtcDtcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xcblxcbnZlYzQgdW5pdF8xID0gdmVjNCgxLCAxLCAxLCAxKTtcXG5cXG5mbG9hdCB2YWwobWF0NCBwLCBtYXQ0IHYpIHtcXG4gICAgcmV0dXJuIGRvdChtYXRyaXhDb21wTXVsdChwLCB2KSAqIHVuaXRfMSwgdW5pdF8xKTtcXG59XFxuXFxuZmxvYXQgYXhpc1koXFxuICAgICAgICBmbG9hdCB4LFxcbiAgICAgICAgbWF0NCBkWzRdLFxcbiAgICAgICAgbWF0NCBkaW0xQSwgbWF0NCBkaW0yQSwgbWF0NCBkaW0xQiwgbWF0NCBkaW0yQiwgbWF0NCBkaW0xQywgbWF0NCBkaW0yQywgbWF0NCBkaW0xRCwgbWF0NCBkaW0yRFxcbiAgICApIHtcXG5cXG4gICAgZmxvYXQgeTEgPSB2YWwoZFswXSwgZGltMUEpICsgdmFsKGRbMV0sIGRpbTFCKSArIHZhbChkWzJdLCBkaW0xQykgKyB2YWwoZFszXSwgZGltMUQpO1xcbiAgICBmbG9hdCB5MiA9IHZhbChkWzBdLCBkaW0yQSkgKyB2YWwoZFsxXSwgZGltMkIpICsgdmFsKGRbMl0sIGRpbTJDKSArIHZhbChkWzNdLCBkaW0yRCk7XFxuICAgIHJldHVybiB5MSAqICgxLjAgLSB4KSArIHkyICogeDtcXG59XFxuXFxuY29uc3QgaW50IGJpdHNQZXJCeXRlID0gODtcXG5cXG5pbnQgbW9kMihpbnQgYSkge1xcbiAgICByZXR1cm4gYSAtIDIgKiAoYSAvIDIpO1xcbn1cXG5cXG5pbnQgbW9kOChpbnQgYSkge1xcbiAgICByZXR1cm4gYSAtIDggKiAoYSAvIDgpO1xcbn1cXG5cXG52ZWM0IHplcm8gPSB2ZWM0KDAsIDAsIDAsIDApO1xcbnZlYzQgdW5pdF8wID0gdmVjNCgxLCAxLCAxLCAxKTtcXG52ZWMyIHh5UHJvamVjdGlvbiA9IHZlYzIoMSwgMSk7XFxuXFxubWF0NCBtY2xhbXAobWF0NCBtLCBtYXQ0IGxvLCBtYXQ0IGhpKSB7XFxuICAgIHJldHVybiBtYXQ0KGNsYW1wKG1bMF0sIGxvWzBdLCBoaVswXSksXFxuICAgICAgICAgICAgICAgIGNsYW1wKG1bMV0sIGxvWzFdLCBoaVsxXSksXFxuICAgICAgICAgICAgICAgIGNsYW1wKG1bMl0sIGxvWzJdLCBoaVsyXSksXFxuICAgICAgICAgICAgICAgIGNsYW1wKG1bM10sIGxvWzNdLCBoaVszXSkpO1xcbn1cXG5cXG5ib29sIG1zaG93KG1hdDQgcCwgbWF0NCBsbywgbWF0NCBoaSkge1xcbiAgICByZXR1cm4gbWNsYW1wKHAsIGxvLCBoaSkgPT0gcDtcXG59XFxuXFxuYm9vbCB3aXRoaW5Cb3VuZGluZ0JveChcXG4gICAgICAgIG1hdDQgZFs0XSxcXG4gICAgICAgIG1hdDQgbG9BLCBtYXQ0IGhpQSwgbWF0NCBsb0IsIG1hdDQgaGlCLCBtYXQ0IGxvQywgbWF0NCBoaUMsIG1hdDQgbG9ELCBtYXQ0IGhpRFxcbiAgICApIHtcXG5cXG4gICAgcmV0dXJuIG1zaG93KGRbMF0sIGxvQSwgaGlBKSAmJlxcbiAgICAgICAgICAgbXNob3coZFsxXSwgbG9CLCBoaUIpICYmXFxuICAgICAgICAgICBtc2hvdyhkWzJdLCBsb0MsIGhpQykgJiZcXG4gICAgICAgICAgIG1zaG93KGRbM10sIGxvRCwgaGlEKTtcXG59XFxuXFxuYm9vbCB3aXRoaW5SYXN0ZXJNYXNrKG1hdDQgZFs0XSwgc2FtcGxlcjJEIG1hc2ssIGZsb2F0IGhlaWdodCkge1xcbiAgICBib29sIHJlc3VsdCA9IHRydWU7XFxuICAgIGludCBiaXRJbkJ5dGVTdGVwcGVyO1xcbiAgICBmbG9hdCB2YWxZLCB2YWx1ZVksIHNjYWxlWDtcXG4gICAgaW50IGhpdCwgYml0bWFzaywgdmFsWDtcXG4gICAgZm9yKGludCBpID0gMDsgaSA8IDQ7IGkrKykge1xcbiAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IDQ7IGorKykge1xcbiAgICAgICAgICAgIGZvcihpbnQgayA9IDA7IGsgPCA0OyBrKyspIHtcXG4gICAgICAgICAgICAgICAgYml0SW5CeXRlU3RlcHBlciA9IG1vZDgoaiAqIDQgKyBrKTtcXG4gICAgICAgICAgICAgICAgdmFsWCA9IGkgKiAyICsgaiAvIDI7XFxuICAgICAgICAgICAgICAgIHZhbFkgPSBkW2ldW2pdW2tdO1xcbiAgICAgICAgICAgICAgICB2YWx1ZVkgPSB2YWxZICogKGhlaWdodCAtIDEuMCkgKyAwLjU7XFxuICAgICAgICAgICAgICAgIHNjYWxlWCA9IChmbG9hdCh2YWxYKSArIDAuNSkgLyA4LjA7XFxuICAgICAgICAgICAgICAgIGhpdCA9IGludCh0ZXh0dXJlMkQobWFzaywgdmVjMihzY2FsZVgsICh2YWx1ZVkgKyAwLjUpIC8gaGVpZ2h0KSlbM10gKiAyNTUuMCkgLyBpbnQocG93KDIuMCwgZmxvYXQoYml0SW5CeXRlU3RlcHBlcikpKTtcXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIG1vZDIoaGl0KSA9PSAxO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG52ZWM0IHBvc2l0aW9uKFxcbiAgICAgICAgZmxvYXQgZGVwdGgsXFxuICAgICAgICB2ZWMyIHJlc29sdXRpb24sIHZlYzIgdmlld0JveFBvc2l0aW9uLCB2ZWMyIHZpZXdCb3hTaXplLFxcbiAgICAgICAgbWF0NCBkaW1zWzRdLFxcbiAgICAgICAgZmxvYXQgc2lnbnVtLFxcbiAgICAgICAgbWF0NCBkaW0xQSwgbWF0NCBkaW0yQSwgbWF0NCBkaW0xQiwgbWF0NCBkaW0yQiwgbWF0NCBkaW0xQywgbWF0NCBkaW0yQywgbWF0NCBkaW0xRCwgbWF0NCBkaW0yRCxcXG4gICAgICAgIG1hdDQgbG9BLCBtYXQ0IGhpQSwgbWF0NCBsb0IsIG1hdDQgaGlCLCBtYXQ0IGxvQywgbWF0NCBoaUMsIG1hdDQgbG9ELCBtYXQ0IGhpRCxcXG4gICAgICAgIHNhbXBsZXIyRCBtYXNrLCBmbG9hdCBtYXNrSGVpZ2h0XFxuICAgICkge1xcblxcbiAgICBmbG9hdCB4ID0gMC41ICogc2lnbnVtICsgMC41O1xcbiAgICBmbG9hdCB5ID0gYXhpc1koeCwgZGltcywgZGltMUEsIGRpbTJBLCBkaW0xQiwgZGltMkIsIGRpbTFDLCBkaW0yQywgZGltMUQsIGRpbTJEKTtcXG5cXG4gICAgZmxvYXQgc2hvdyA9IGZsb2F0KFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoaW5Cb3VuZGluZ0JveChkaW1zLCBsb0EsIGhpQSwgbG9CLCBoaUIsIGxvQywgaGlDLCBsb0QsIGhpRClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgJiYgd2l0aGluUmFzdGVyTWFzayhkaW1zLCBtYXNrLCBtYXNrSGVpZ2h0KVxcbiAgICAgICAgICAgICAgICAgICAgICApO1xcblxcbiAgICB2ZWMyIHZpZXdCb3hYWSA9IHZpZXdCb3hQb3NpdGlvbiArIHZpZXdCb3hTaXplICogdmVjMih4LCB5KTtcXG4gICAgZmxvYXQgZGVwdGhPckhpZGUgPSBkZXB0aCArIDIuMCAqICgxLjAgLSBzaG93KTtcXG5cXG4gICAgcmV0dXJuIHZlYzQoXFxuICAgICAgICB4eVByb2plY3Rpb24gKiAoMi4wICogdmlld0JveFhZIC8gcmVzb2x1dGlvbiAtIDEuMCksXFxuICAgICAgICBkZXB0aE9ySGlkZSxcXG4gICAgICAgIDEuMFxcbiAgICApO1xcbn1cXG5cXG52b2lkIG1haW4oKSB7XFxuXFxuICAgIGZsb2F0IHByb21pbmVuY2UgPSBhYnMocGZbM10pO1xcblxcbiAgICBtYXQ0IHBbNF07XFxuICAgIHBbMF0gPSBtYXQ0KHAwLCBwMSwgcDIsIHAzKTtcXG4gICAgcFsxXSA9IG1hdDQocDQsIHA1LCBwNiwgcDcpO1xcbiAgICBwWzJdID0gbWF0NChwOCwgcDksIHBhLCBwYik7XFxuICAgIHBbM10gPSBtYXQ0KHBjLCBwZCwgcGUsIGFicyhwZikpO1xcblxcbiAgICBnbF9Qb3NpdGlvbiA9IHBvc2l0aW9uKFxcbiAgICAgICAgMS4wIC0gcHJvbWluZW5jZSxcXG4gICAgICAgIHJlc29sdXRpb24sIHZpZXdCb3hQb3NpdGlvbiwgdmlld0JveFNpemUsXFxuICAgICAgICBwLFxcbiAgICAgICAgc2lnbihwZlszXSksXFxuICAgICAgICBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkQsXFxuICAgICAgICBsb0EsIGhpQSwgbG9CLCBoaUIsIGxvQywgaGlDLCBsb0QsIGhpRCxcXG4gICAgICAgIG1hc2ssIG1hc2tIZWlnaHRcXG4gICAgKTtcXG5cXG4gICAgZmxvYXQgY2xhbXBlZENvbG9ySW5kZXggPSBjbGFtcCgocHJvbWluZW5jZSAtIGNvbG9yQ2xhbXBbMF0pIC8gKGNvbG9yQ2xhbXBbMV0gLSBjb2xvckNsYW1wWzBdKSwgMC4wLCAxLjApO1xcbiAgICBmcmFnQ29sb3IgPSB0ZXh0dXJlMkQocGFsZXR0ZSwgdmVjMigoY2xhbXBlZENvbG9ySW5kZXggKiAyNTUuMCArIDAuNSkgLyAyNTYuMCwgMC41KSk7XFxufVxcblwiXSksYT1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWM0IHAwLCBwMSwgcDIsIHAzLFxcbiAgICAgICAgICAgICAgIHA0LCBwNSwgcDYsIHA3LFxcbiAgICAgICAgICAgICAgIHA4LCBwOSwgcGEsIHBiLFxcbiAgICAgICAgICAgICAgIHBjLCBwZCwgcGU7XFxuXFxuYXR0cmlidXRlIHZlYzQgcGY7XFxuXFxudW5pZm9ybSBtYXQ0IGRpbTFBLCBkaW0yQSwgZGltMUIsIGRpbTJCLCBkaW0xQywgZGltMkMsIGRpbTFELCBkaW0yRDtcXG5cXG51bmlmb3JtIHZlYzIgcmVzb2x1dGlvbixcXG4gICAgICAgICAgICAgdmlld0JveFBvc2l0aW9uLFxcbiAgICAgICAgICAgICB2aWV3Qm94U2l6ZTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCBwYWxldHRlO1xcblxcbnVuaWZvcm0gdmVjMiBjb2xvckNsYW1wO1xcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxuXFxudmVjMiB4eVByb2plY3Rpb24gPSB2ZWMyKDEsIDEpO1xcblxcbnZlYzQgdW5pdCA9IHZlYzQoMSwgMSwgMSwgMSk7XFxuXFxuZmxvYXQgdmFsKG1hdDQgcCwgbWF0NCB2KSB7XFxuICAgIHJldHVybiBkb3QobWF0cml4Q29tcE11bHQocCwgdikgKiB1bml0LCB1bml0KTtcXG59XFxuXFxuZmxvYXQgYXhpc1koXFxuICAgICAgICBmbG9hdCB4LFxcbiAgICAgICAgbWF0NCBkWzRdLFxcbiAgICAgICAgbWF0NCBkaW0xQSwgbWF0NCBkaW0yQSwgbWF0NCBkaW0xQiwgbWF0NCBkaW0yQiwgbWF0NCBkaW0xQywgbWF0NCBkaW0yQywgbWF0NCBkaW0xRCwgbWF0NCBkaW0yRFxcbiAgICApIHtcXG5cXG4gICAgZmxvYXQgeTEgPSB2YWwoZFswXSwgZGltMUEpICsgdmFsKGRbMV0sIGRpbTFCKSArIHZhbChkWzJdLCBkaW0xQykgKyB2YWwoZFszXSwgZGltMUQpO1xcbiAgICBmbG9hdCB5MiA9IHZhbChkWzBdLCBkaW0yQSkgKyB2YWwoZFsxXSwgZGltMkIpICsgdmFsKGRbMl0sIGRpbTJDKSArIHZhbChkWzNdLCBkaW0yRCk7XFxuICAgIHJldHVybiB5MSAqICgxLjAgLSB4KSArIHkyICogeDtcXG59XFxuXFxudmVjNCBwb3NpdGlvbihcXG4gICAgICAgIGZsb2F0IGRlcHRoLFxcbiAgICAgICAgdmVjMiByZXNvbHV0aW9uLCB2ZWMyIHZpZXdCb3hQb3NpdGlvbiwgdmVjMiB2aWV3Qm94U2l6ZSxcXG4gICAgICAgIG1hdDQgZGltc1s0XSxcXG4gICAgICAgIGZsb2F0IHNpZ251bSxcXG4gICAgICAgIG1hdDQgZGltMUEsIG1hdDQgZGltMkEsIG1hdDQgZGltMUIsIG1hdDQgZGltMkIsIG1hdDQgZGltMUMsIG1hdDQgZGltMkMsIG1hdDQgZGltMUQsIG1hdDQgZGltMkRcXG4gICAgKSB7XFxuXFxuICAgIGZsb2F0IHggPSAwLjUgKiBzaWdudW0gKyAwLjU7XFxuICAgIGZsb2F0IHkgPSBheGlzWSh4LCBkaW1zLCBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkQpO1xcblxcbiAgICB2ZWMyIHZpZXdCb3hYWSA9IHZpZXdCb3hQb3NpdGlvbiArIHZpZXdCb3hTaXplICogdmVjMih4LCB5KTtcXG5cXG4gICAgcmV0dXJuIHZlYzQoXFxuICAgICAgICB4eVByb2plY3Rpb24gKiAoMi4wICogdmlld0JveFhZIC8gcmVzb2x1dGlvbiAtIDEuMCksXFxuICAgICAgICBkZXB0aCxcXG4gICAgICAgIDEuMFxcbiAgICApO1xcbn1cXG5cXG52b2lkIG1haW4oKSB7XFxuXFxuICAgIGZsb2F0IHByb21pbmVuY2UgPSBhYnMocGZbM10pO1xcblxcbiAgICBtYXQ0IHBbNF07XFxuICAgIHBbMF0gPSBtYXQ0KHAwLCBwMSwgcDIsIHAzKTtcXG4gICAgcFsxXSA9IG1hdDQocDQsIHA1LCBwNiwgcDcpO1xcbiAgICBwWzJdID0gbWF0NChwOCwgcDksIHBhLCBwYik7XFxuICAgIHBbM10gPSBtYXQ0KHBjLCBwZCwgcGUsIGFicyhwZikpO1xcblxcbiAgICBnbF9Qb3NpdGlvbiA9IHBvc2l0aW9uKFxcbiAgICAgICAgMS4wIC0gcHJvbWluZW5jZSxcXG4gICAgICAgIHJlc29sdXRpb24sIHZpZXdCb3hQb3NpdGlvbiwgdmlld0JveFNpemUsXFxuICAgICAgICBwLFxcbiAgICAgICAgc2lnbihwZlszXSksXFxuICAgICAgICBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkRcXG4gICAgKTtcXG5cXG4gICAgZmxvYXQgY2xhbXBlZENvbG9ySW5kZXggPSBjbGFtcCgocHJvbWluZW5jZSAtIGNvbG9yQ2xhbXBbMF0pIC8gKGNvbG9yQ2xhbXBbMV0gLSBjb2xvckNsYW1wWzBdKSwgMC4wLCAxLjApO1xcbiAgICBmcmFnQ29sb3IgPSB0ZXh0dXJlMkQocGFsZXR0ZSwgdmVjMigoY2xhbXBlZENvbG9ySW5kZXggKiAyNTUuMCArIDAuNSkgLyAyNTYuMCwgMC41KSk7XFxufVxcblwiXSksbz1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWM0IHAwLCBwMSwgcDIsIHAzLFxcbiAgICAgICAgICAgICAgIHA0LCBwNSwgcDYsIHA3LFxcbiAgICAgICAgICAgICAgIHA4LCBwOSwgcGEsIHBiLFxcbiAgICAgICAgICAgICAgIHBjLCBwZCwgcGU7XFxuXFxuYXR0cmlidXRlIHZlYzQgcGY7XFxuXFxudW5pZm9ybSBtYXQ0IGRpbTFBLCBkaW0yQSwgZGltMUIsIGRpbTJCLCBkaW0xQywgZGltMkMsIGRpbTFELCBkaW0yRCxcXG4gICAgICAgICAgICAgbG9BLCBoaUEsIGxvQiwgaGlCLCBsb0MsIGhpQywgbG9ELCBoaUQ7XFxuXFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb24sXFxuICAgICAgICAgICAgIHZpZXdCb3hQb3NpdGlvbixcXG4gICAgICAgICAgICAgdmlld0JveFNpemU7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcXG51bmlmb3JtIGZsb2F0IG1hc2tIZWlnaHQ7XFxuXFxudW5pZm9ybSB2ZWMyIGNvbG9yQ2xhbXA7XFxuXFxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcXG5cXG52ZWM0IHVuaXRfMSA9IHZlYzQoMSwgMSwgMSwgMSk7XFxuXFxuZmxvYXQgdmFsKG1hdDQgcCwgbWF0NCB2KSB7XFxuICAgIHJldHVybiBkb3QobWF0cml4Q29tcE11bHQocCwgdikgKiB1bml0XzEsIHVuaXRfMSk7XFxufVxcblxcbmZsb2F0IGF4aXNZKFxcbiAgICAgICAgZmxvYXQgeCxcXG4gICAgICAgIG1hdDQgZFs0XSxcXG4gICAgICAgIG1hdDQgZGltMUEsIG1hdDQgZGltMkEsIG1hdDQgZGltMUIsIG1hdDQgZGltMkIsIG1hdDQgZGltMUMsIG1hdDQgZGltMkMsIG1hdDQgZGltMUQsIG1hdDQgZGltMkRcXG4gICAgKSB7XFxuXFxuICAgIGZsb2F0IHkxID0gdmFsKGRbMF0sIGRpbTFBKSArIHZhbChkWzFdLCBkaW0xQikgKyB2YWwoZFsyXSwgZGltMUMpICsgdmFsKGRbM10sIGRpbTFEKTtcXG4gICAgZmxvYXQgeTIgPSB2YWwoZFswXSwgZGltMkEpICsgdmFsKGRbMV0sIGRpbTJCKSArIHZhbChkWzJdLCBkaW0yQykgKyB2YWwoZFszXSwgZGltMkQpO1xcbiAgICByZXR1cm4geTEgKiAoMS4wIC0geCkgKyB5MiAqIHg7XFxufVxcblxcbmNvbnN0IGludCBiaXRzUGVyQnl0ZSA9IDg7XFxuXFxuaW50IG1vZDIoaW50IGEpIHtcXG4gICAgcmV0dXJuIGEgLSAyICogKGEgLyAyKTtcXG59XFxuXFxuaW50IG1vZDgoaW50IGEpIHtcXG4gICAgcmV0dXJuIGEgLSA4ICogKGEgLyA4KTtcXG59XFxuXFxudmVjNCB6ZXJvID0gdmVjNCgwLCAwLCAwLCAwKTtcXG52ZWM0IHVuaXRfMCA9IHZlYzQoMSwgMSwgMSwgMSk7XFxudmVjMiB4eVByb2plY3Rpb24gPSB2ZWMyKDEsIDEpO1xcblxcbm1hdDQgbWNsYW1wKG1hdDQgbSwgbWF0NCBsbywgbWF0NCBoaSkge1xcbiAgICByZXR1cm4gbWF0NChjbGFtcChtWzBdLCBsb1swXSwgaGlbMF0pLFxcbiAgICAgICAgICAgICAgICBjbGFtcChtWzFdLCBsb1sxXSwgaGlbMV0pLFxcbiAgICAgICAgICAgICAgICBjbGFtcChtWzJdLCBsb1syXSwgaGlbMl0pLFxcbiAgICAgICAgICAgICAgICBjbGFtcChtWzNdLCBsb1szXSwgaGlbM10pKTtcXG59XFxuXFxuYm9vbCBtc2hvdyhtYXQ0IHAsIG1hdDQgbG8sIG1hdDQgaGkpIHtcXG4gICAgcmV0dXJuIG1jbGFtcChwLCBsbywgaGkpID09IHA7XFxufVxcblxcbmJvb2wgd2l0aGluQm91bmRpbmdCb3goXFxuICAgICAgICBtYXQ0IGRbNF0sXFxuICAgICAgICBtYXQ0IGxvQSwgbWF0NCBoaUEsIG1hdDQgbG9CLCBtYXQ0IGhpQiwgbWF0NCBsb0MsIG1hdDQgaGlDLCBtYXQ0IGxvRCwgbWF0NCBoaURcXG4gICAgKSB7XFxuXFxuICAgIHJldHVybiBtc2hvdyhkWzBdLCBsb0EsIGhpQSkgJiZcXG4gICAgICAgICAgIG1zaG93KGRbMV0sIGxvQiwgaGlCKSAmJlxcbiAgICAgICAgICAgbXNob3coZFsyXSwgbG9DLCBoaUMpICYmXFxuICAgICAgICAgICBtc2hvdyhkWzNdLCBsb0QsIGhpRCk7XFxufVxcblxcbmJvb2wgd2l0aGluUmFzdGVyTWFzayhtYXQ0IGRbNF0sIHNhbXBsZXIyRCBtYXNrLCBmbG9hdCBoZWlnaHQpIHtcXG4gICAgYm9vbCByZXN1bHQgPSB0cnVlO1xcbiAgICBpbnQgYml0SW5CeXRlU3RlcHBlcjtcXG4gICAgZmxvYXQgdmFsWSwgdmFsdWVZLCBzY2FsZVg7XFxuICAgIGludCBoaXQsIGJpdG1hc2ssIHZhbFg7XFxuICAgIGZvcihpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHtcXG4gICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCA0OyBqKyspIHtcXG4gICAgICAgICAgICBmb3IoaW50IGsgPSAwOyBrIDwgNDsgaysrKSB7XFxuICAgICAgICAgICAgICAgIGJpdEluQnl0ZVN0ZXBwZXIgPSBtb2Q4KGogKiA0ICsgayk7XFxuICAgICAgICAgICAgICAgIHZhbFggPSBpICogMiArIGogLyAyO1xcbiAgICAgICAgICAgICAgICB2YWxZID0gZFtpXVtqXVtrXTtcXG4gICAgICAgICAgICAgICAgdmFsdWVZID0gdmFsWSAqIChoZWlnaHQgLSAxLjApICsgMC41O1xcbiAgICAgICAgICAgICAgICBzY2FsZVggPSAoZmxvYXQodmFsWCkgKyAwLjUpIC8gOC4wO1xcbiAgICAgICAgICAgICAgICBoaXQgPSBpbnQodGV4dHVyZTJEKG1hc2ssIHZlYzIoc2NhbGVYLCAodmFsdWVZICsgMC41KSAvIGhlaWdodCkpWzNdICogMjU1LjApIC8gaW50KHBvdygyLjAsIGZsb2F0KGJpdEluQnl0ZVN0ZXBwZXIpKSk7XFxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBtb2QyKGhpdCkgPT0gMTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxudmVjNCBwb3NpdGlvbihcXG4gICAgICAgIGZsb2F0IGRlcHRoLFxcbiAgICAgICAgdmVjMiByZXNvbHV0aW9uLCB2ZWMyIHZpZXdCb3hQb3NpdGlvbiwgdmVjMiB2aWV3Qm94U2l6ZSxcXG4gICAgICAgIG1hdDQgZGltc1s0XSxcXG4gICAgICAgIGZsb2F0IHNpZ251bSxcXG4gICAgICAgIG1hdDQgZGltMUEsIG1hdDQgZGltMkEsIG1hdDQgZGltMUIsIG1hdDQgZGltMkIsIG1hdDQgZGltMUMsIG1hdDQgZGltMkMsIG1hdDQgZGltMUQsIG1hdDQgZGltMkQsXFxuICAgICAgICBtYXQ0IGxvQSwgbWF0NCBoaUEsIG1hdDQgbG9CLCBtYXQ0IGhpQiwgbWF0NCBsb0MsIG1hdDQgaGlDLCBtYXQ0IGxvRCwgbWF0NCBoaUQsXFxuICAgICAgICBzYW1wbGVyMkQgbWFzaywgZmxvYXQgbWFza0hlaWdodFxcbiAgICApIHtcXG5cXG4gICAgZmxvYXQgeCA9IDAuNSAqIHNpZ251bSArIDAuNTtcXG4gICAgZmxvYXQgeSA9IGF4aXNZKHgsIGRpbXMsIGRpbTFBLCBkaW0yQSwgZGltMUIsIGRpbTJCLCBkaW0xQywgZGltMkMsIGRpbTFELCBkaW0yRCk7XFxuXFxuICAgIGZsb2F0IHNob3cgPSBmbG9hdChcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluQm91bmRpbmdCb3goZGltcywgbG9BLCBoaUEsIGxvQiwgaGlCLCBsb0MsIGhpQywgbG9ELCBoaUQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICYmIHdpdGhpblJhc3Rlck1hc2soZGltcywgbWFzaywgbWFza0hlaWdodClcXG4gICAgICAgICAgICAgICAgICAgICAgKTtcXG5cXG4gICAgdmVjMiB2aWV3Qm94WFkgPSB2aWV3Qm94UG9zaXRpb24gKyB2aWV3Qm94U2l6ZSAqIHZlYzIoeCwgeSk7XFxuICAgIGZsb2F0IGRlcHRoT3JIaWRlID0gZGVwdGggKyAyLjAgKiAoMS4wIC0gc2hvdyk7XFxuXFxuICAgIHJldHVybiB2ZWM0KFxcbiAgICAgICAgeHlQcm9qZWN0aW9uICogKDIuMCAqIHZpZXdCb3hYWSAvIHJlc29sdXRpb24gLSAxLjApLFxcbiAgICAgICAgZGVwdGhPckhpZGUsXFxuICAgICAgICAxLjBcXG4gICAgKTtcXG59XFxuXFxudm9pZCBtYWluKCkge1xcblxcbiAgICBmbG9hdCBwcm9taW5lbmNlID0gYWJzKHBmWzNdKTtcXG5cXG4gICAgbWF0NCBwWzRdO1xcbiAgICBwWzBdID0gbWF0NChwMCwgcDEsIHAyLCBwMyk7XFxuICAgIHBbMV0gPSBtYXQ0KHA0LCBwNSwgcDYsIHA3KTtcXG4gICAgcFsyXSA9IG1hdDQocDgsIHA5LCBwYSwgcGIpO1xcbiAgICBwWzNdID0gbWF0NChwYywgcGQsIHBlLCBhYnMocGYpKTtcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSBwb3NpdGlvbihcXG4gICAgICAgIDEuMCAtIHByb21pbmVuY2UsXFxuICAgICAgICByZXNvbHV0aW9uLCB2aWV3Qm94UG9zaXRpb24sIHZpZXdCb3hTaXplLFxcbiAgICAgICAgcCxcXG4gICAgICAgIHNpZ24ocGZbM10pLFxcbiAgICAgICAgZGltMUEsIGRpbTJBLCBkaW0xQiwgZGltMkIsIGRpbTFDLCBkaW0yQywgZGltMUQsIGRpbTJELFxcbiAgICAgICAgbG9BLCBoaUEsIGxvQiwgaGlCLCBsb0MsIGhpQywgbG9ELCBoaUQsXFxuICAgICAgICBtYXNrLCBtYXNrSGVpZ2h0XFxuICAgICk7XFxuXFxuICAgIGZyYWdDb2xvciA9IHZlYzQocGYucmdiLCAxLjApO1xcbn1cXG5cIl0pLHM9bihbXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICBnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XFxufVxcblwiXSksbD10KFwiLi4vLi4vbGliXCIpLGM9MWUtNix1PTFlLTcsaD0yMDQ4LGY9NjQscD0yLGQ9NCxnPTgsdj1mL2csbT1bMTE5LDExOSwxMTldLHk9bmV3IFVpbnQ4QXJyYXkoNCkseD1uZXcgVWludDhBcnJheSg0KSxiPXtzaGFwZTpbMjU2LDFdLGZvcm1hdDpcInJnYmFcIix0eXBlOlwidWludDhcIixtYWc6XCJuZWFyZXN0XCIsbWluOlwibmVhcmVzdFwifTtmdW5jdGlvbiBfKHQsZSxyLG4saSl7dmFyIGE9dC5fZ2w7YS5lbmFibGUoYS5TQ0lTU09SX1RFU1QpLGEuc2Npc3NvcihlLHIsbixpKSx0LmNsZWFyKHtjb2xvcjpbMCwwLDAsMF0sZGVwdGg6MX0pfWZ1bmN0aW9uIHcodCxlLHIsbixpLGEpe3ZhciBvPWEua2V5O3IuZHJhd0NvbXBsZXRlZHx8KCFmdW5jdGlvbih0KXt0LnJlYWQoe3g6MCx5OjAsd2lkdGg6MSxoZWlnaHQ6MSxkYXRhOnl9KX0odCksci5kcmF3Q29tcGxldGVkPSEwKSxmdW5jdGlvbiBzKGwpe3ZhciBjO2M9TWF0aC5taW4obixpLWwqbiksYS5vZmZzZXQ9cCpsKm4sYS5jb3VudD1wKmMsMD09PWwmJih3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoci5jdXJyZW50UmFmc1tvXSksZGVsZXRlIHIuY3VycmVudFJhZnNbb10sXyh0LGEuc2Npc3NvclgsYS5zY2lzc29yWSxhLnNjaXNzb3JXaWR0aCxhLnZpZXdCb3hTaXplWzFdKSksci5jbGVhck9ubHl8fChlKGEpLGwqbitjPGkmJihyLmN1cnJlbnRSYWZzW29dPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtzKGwrMSl9KSksci5kcmF3Q29tcGxldGVkPSExKX0oMCl9ZnVuY3Rpb24gayh0LGUpe3JldHVybih0Pj4+OCplKSUyNTYvMjU1fWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBuLGksYSxvPVtdO2ZvcihpPTA7aTx0O2krKylmb3IoYT0wO2E8cDthKyspZm9yKG49MDtuPGQ7bisrKW8ucHVzaChlW2kqZityKmQrbl0pLHIqZCtuPT09Zi0xJiZhJTI9PTAmJihvW28ubGVuZ3RoLTFdKj0tMSk7cmV0dXJuIG99ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixwLGQseSxUPWUuY29udGV4dCxNPWUucGljayxTPWUucmVnbCxFPXtjdXJyZW50UmFmczp7fSxkcmF3Q29tcGxldGVkOiEwLGNsZWFyT25seTohMX0sQz1mdW5jdGlvbih0KXtmb3IodmFyIGU9e30scj0wO3I8MTY7cisrKWVbXCJwXCIrci50b1N0cmluZygxNildPXQuYnVmZmVyKHt1c2FnZTpcImR5bmFtaWNcIix0eXBlOlwiZmxvYXRcIixkYXRhOm5ldyBVaW50OEFycmF5KDApfSk7cmV0dXJuIGV9KFMpLEw9Uy50ZXh0dXJlKGIpO08oZSk7dmFyIHo9Uyh7cHJvZmlsZTohMSxibGVuZDp7ZW5hYmxlOlQsZnVuYzp7c3JjUkdCOlwic3JjIGFscGhhXCIsZHN0UkdCOlwib25lIG1pbnVzIHNyYyBhbHBoYVwiLHNyY0FscGhhOjEsZHN0QWxwaGE6MX0sZXF1YXRpb246e3JnYjpcImFkZFwiLGFscGhhOlwiYWRkXCJ9LGNvbG9yOlswLDAsMCwwXX0sZGVwdGg6e2VuYWJsZTohVCxtYXNrOiEwLGZ1bmM6XCJsZXNzXCIscmFuZ2U6WzAsMV19LGN1bGw6e2VuYWJsZTohMCxmYWNlOlwiYmFja1wifSxzY2lzc29yOntlbmFibGU6ITAsYm94Ont4OlMucHJvcChcInNjaXNzb3JYXCIpLHk6Uy5wcm9wKFwic2Npc3NvcllcIiksd2lkdGg6Uy5wcm9wKFwic2Npc3NvcldpZHRoXCIpLGhlaWdodDpTLnByb3AoXCJzY2lzc29ySGVpZ2h0XCIpfX0sdmlld3BvcnQ6e3g6Uy5wcm9wKFwidmlld3BvcnRYXCIpLHk6Uy5wcm9wKFwidmlld3BvcnRZXCIpLHdpZHRoOlMucHJvcChcInZpZXdwb3J0V2lkdGhcIiksaGVpZ2h0OlMucHJvcChcInZpZXdwb3J0SGVpZ2h0XCIpfSxkaXRoZXI6ITEsdmVydDpNP286VD9hOmksZnJhZzpzLHByaW1pdGl2ZTpcImxpbmVzXCIsbGluZVdpZHRoOjEsYXR0cmlidXRlczpDLHVuaWZvcm1zOntyZXNvbHV0aW9uOlMucHJvcChcInJlc29sdXRpb25cIiksdmlld0JveFBvc2l0aW9uOlMucHJvcChcInZpZXdCb3hQb3NpdGlvblwiKSx2aWV3Qm94U2l6ZTpTLnByb3AoXCJ2aWV3Qm94U2l6ZVwiKSxkaW0xQTpTLnByb3AoXCJkaW0xQVwiKSxkaW0yQTpTLnByb3AoXCJkaW0yQVwiKSxkaW0xQjpTLnByb3AoXCJkaW0xQlwiKSxkaW0yQjpTLnByb3AoXCJkaW0yQlwiKSxkaW0xQzpTLnByb3AoXCJkaW0xQ1wiKSxkaW0yQzpTLnByb3AoXCJkaW0yQ1wiKSxkaW0xRDpTLnByb3AoXCJkaW0xRFwiKSxkaW0yRDpTLnByb3AoXCJkaW0yRFwiKSxsb0E6Uy5wcm9wKFwibG9BXCIpLGhpQTpTLnByb3AoXCJoaUFcIiksbG9COlMucHJvcChcImxvQlwiKSxoaUI6Uy5wcm9wKFwiaGlCXCIpLGxvQzpTLnByb3AoXCJsb0NcIiksaGlDOlMucHJvcChcImhpQ1wiKSxsb0Q6Uy5wcm9wKFwibG9EXCIpLGhpRDpTLnByb3AoXCJoaURcIikscGFsZXR0ZTpMLG1hc2s6Uy5wcm9wKFwibWFza1RleHR1cmVcIiksbWFza0hlaWdodDpTLnByb3AoXCJtYXNrSGVpZ2h0XCIpLGNvbG9yQ2xhbXA6Uy5wcm9wKFwiY29sb3JDbGFtcFwiKX0sb2Zmc2V0OlMucHJvcChcIm9mZnNldFwiKSxjb3VudDpTLnByb3AoXCJjb3VudFwiKX0pO2Z1bmN0aW9uIE8odCl7cj10Lm1vZGVsLG49dC52aWV3TW9kZWwscD1uLmRpbWVuc2lvbnMuc2xpY2UoKSxkPXBbMF0/cFswXS52YWx1ZXMubGVuZ3RoOjA7dmFyIGU9ci5saW5lcyxpPU0/ZS5jb2xvci5tYXAoZnVuY3Rpb24odCxyKXtyZXR1cm4gci9lLmNvbG9yLmxlbmd0aH0pOmUuY29sb3IsYT1NYXRoLm1heCgxLzI1NSxNYXRoLnBvdygxL2kubGVuZ3RoLDEvMykpLG89ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpPWUubGVuZ3RoLGE9W10sbz0wO288dDtvKyspZm9yKHZhciBzPTA7czxmO3MrKylhLnB1c2goczxpP2Vbc10ucGFkZGVkVW5pdFZhbHVlc1tvXTpzPT09Zi0xPyhuPXJbb10sTWF0aC5tYXgoYyxNYXRoLm1pbigxLWMsbikpKTpzPj1mLTQ/ayhvLGYtMi1zKTouNSk7cmV0dXJuIGF9KGQscCxpKTshZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248MTY7bisrKXRbXCJwXCIrbi50b1N0cmluZygxNildKEEoZSxyLG4pKX0oQyxkLG8pLEw9Uy50ZXh0dXJlKGwuZXh0ZW5kRmxhdCh7ZGF0YTpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPVtdLGk9MDtpPDI1NjtpKyspe3ZhciBhPXQoaS8yNTUpO24ucHVzaCgoZT9tOmEpLmNvbmNhdChyKSl9cmV0dXJuIG59KHIudW5pdFRvQ29sb3IsVCxNYXRoLnJvdW5kKDI1NSooVD9hOjEpKSl9LGIpKX12YXIgST1bMCwxXTt2YXIgRD1bXTtmdW5jdGlvbiBQKHQsZSxuLGksYSxvLHMsYyx1LGgsZil7dmFyIHAsZCxnLHYsbT1bdCxlXSx5PVswLDFdLm1hcChmdW5jdGlvbigpe3JldHVyblswLDEsMiwzXS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgxNil9KX0pO2ZvcihwPTA7cDwyO3ArKylmb3Iodj1tW3BdLGQ9MDtkPDQ7ZCsrKWZvcihnPTA7ZzwxNjtnKyspeVtwXVtkXVtnXT1nKzE2KmQ9PT12PzE6MDt2YXIgeD1yLmxpbmVzLmNhbnZhc092ZXJkcmFnLGI9ci5kb21haW4sXz1yLmNhbnZhc1dpZHRoLHc9ci5jYW52YXNIZWlnaHQ7cmV0dXJuIGwuZXh0ZW5kRmxhdCh7a2V5OnMscmVzb2x1dGlvbjpbXyx3XSx2aWV3Qm94UG9zaXRpb246W24reCxpXSx2aWV3Qm94U2l6ZTpbYSxvXSxpOnQsaWk6ZSxkaW0xQTp5WzBdWzBdLGRpbTFCOnlbMF1bMV0sZGltMUM6eVswXVsyXSxkaW0xRDp5WzBdWzNdLGRpbTJBOnlbMV1bMF0sZGltMkI6eVsxXVsxXSxkaW0yQzp5WzFdWzJdLGRpbTJEOnlbMV1bM10sY29sb3JDbGFtcDpJLHNjaXNzb3JYOihjPT09dT8wOm4reCkrKHIucGFkLmwteCkrci5sYXlvdXRXaWR0aCpiLnhbMF0sc2Npc3NvcldpZHRoOihjPT09aD9fLW4reDphKy41KSsoYz09PXU/bit4OjApLHNjaXNzb3JZOmkrci5wYWQuYityLmxheW91dEhlaWdodCpiLnlbMF0sc2Npc3NvckhlaWdodDpvLHZpZXdwb3J0WDpyLnBhZC5sLXgrci5sYXlvdXRXaWR0aCpiLnhbMF0sdmlld3BvcnRZOnIucGFkLmIrci5sYXlvdXRIZWlnaHQqYi55WzBdLHZpZXdwb3J0V2lkdGg6Xyx2aWV3cG9ydEhlaWdodDp3fSxmKX1yZXR1cm57c2V0Q29sb3JEb21haW46ZnVuY3Rpb24odCl7SVswXT10WzBdLElbMV09dFsxXX0scmVuZGVyOmZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhLG8scz10Lmxlbmd0aCxsPTEvMCxjPS0xLzA7Zm9yKGk9MDtpPHM7aSsrKXRbaV0uZGltMi5jYW52YXNYPmMmJihjPXRbaV0uZGltMi5jYW52YXNYLG89aSksdFtpXS5kaW0xLmNhbnZhc1g8bCYmKGw9dFtpXS5kaW0xLmNhbnZhc1gsYT1pKTswPT09cyYmXyhTLDAsMCxyLmNhbnZhc1dpZHRoLHIuY2FudmFzSGVpZ2h0KTt2YXIgZj1UP3t9OmZ1bmN0aW9uKCl7dmFyIHQsZSxyLG49WzAsMV0ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuWzAsMSwyLDNdLm1hcChmdW5jdGlvbigpe3JldHVybiBuZXcgRmxvYXQzMkFycmF5KDE2KX0pfSk7Zm9yKHQ9MDt0PDI7dCsrKWZvcihlPTA7ZTw0O2UrKylmb3Iocj0wO3I8MTY7cisrKXt2YXIgaSxhPXIrMTYqZTtpPWE8cC5sZW5ndGg/cFthXS5icnVzaC5maWx0ZXIuZ2V0Qm91bmRzKClbdF06dCxuW3RdW2VdW3JdPWkrKDIqdC0xKSp1fWZ1bmN0aW9uIG8odCxlKXt2YXIgcj1oLTE7cmV0dXJuW01hdGgubWF4KDAsTWF0aC5mbG9vcihlWzBdKnIpKSxNYXRoLm1pbihyLE1hdGguY2VpbChlWzFdKnIpKV19Zm9yKHZhciBzPUFycmF5LmFwcGx5KG51bGwsbmV3IEFycmF5KGgqdikpLm1hcChmdW5jdGlvbigpe3JldHVybiAyNTV9KSxsPTA7bDxwLmxlbmd0aDtsKyspe3ZhciBjPWwlZyxmPShsLWMpL2csZD1NYXRoLnBvdygyLGMpLG09cFtsXSx4PW0uYnJ1c2guZmlsdGVyLmdldCgpO2lmKCEoeC5sZW5ndGg8MikpZm9yKHZhciBiPW8oMCx4WzBdKVsxXSxfPTE7Xzx4Lmxlbmd0aDtfKyspe2Zvcih2YXIgdz1vKDAseFtfXSksaz1iKzE7azx3WzBdO2srKylzW2sqditmXSY9fmQ7Yj1NYXRoLm1heChiLHdbMV0pfX12YXIgQT17c2hhcGU6W3YsaF0sZm9ybWF0OlwiYWxwaGFcIix0eXBlOlwidWludDhcIixtYWc6XCJuZWFyZXN0XCIsbWluOlwibmVhcmVzdFwiLGRhdGE6c307cmV0dXJuIHk/eShBKTp5PVMudGV4dHVyZShBKSx7bWFza1RleHR1cmU6eSxtYXNrSGVpZ2h0OmgsbG9BOm5bMF1bMF0sbG9COm5bMF1bMV0sbG9DOm5bMF1bMl0sbG9EOm5bMF1bM10saGlBOm5bMV1bMF0saGlCOm5bMV1bMV0saGlDOm5bMV1bMl0saGlEOm5bMV1bM119fSgpO2ZvcihpPTA7aTxzO2krKyl7dmFyIG09dFtpXSx4PW0uZGltMSxiPXguY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleCxrPW0uY2FudmFzWCxBPW0uY2FudmFzWSxNPW0uZGltMi5jcm9zc2ZpbHRlckRpbWVuc2lvbkluZGV4LEM9bS5wYW5lbFNpemVYLEw9bS5wYW5lbFNpemVZLE89aytDO2lmKGV8fCFEW2JdfHxEW2JdWzBdIT09a3x8RFtiXVsxXSE9PU8pe0RbYl09W2ssT107dmFyIEk9UChiLE0sayxBLEMsTCx4LmNyb3NzZmlsdGVyRGltZW5zaW9uSW5kZXgsaSxhLG8sZik7RS5jbGVhck9ubHk9bix3KFMseixFLGU/ci5saW5lcy5ibG9ja0xpbmVDb3VudDpkLGQsSSl9fX0scmVhZFBpeGVsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFMucmVhZCh7eDp0LHk6ZSx3aWR0aDoxLGhlaWdodDoxLGRhdGE6eH0pLHh9LHJlYWRQaXhlbHM6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bmV3IFVpbnQ4QXJyYXkoNCpyKm4pO3JldHVybiBTLnJlYWQoe3g6dCx5OmUsd2lkdGg6cixoZWlnaHQ6bixkYXRhOml9KSxpfSxkZXN0cm95OmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHQuc3R5bGVbXCJwb2ludGVyLWV2ZW50c1wiXT1cIm5vbmVcIixMLmRlc3Ryb3koKSx5JiZ5LmRlc3Ryb3koKSxDKUNbZV0uZGVzdHJveSgpfSx1cGRhdGU6T319fSx7XCIuLi8uLi9saWJcIjo3MDEsZ2xzbGlmeTo0MDJ9XSwxMDIzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE7Zm9yKG58fChuPTEvMCksaT0wO2k8ZS5sZW5ndGg7aSsrKShhPWVbaV0pLnZpc2libGUmJihuPU1hdGgubWluKG4sYVtyXS5sZW5ndGgpKTtmb3Iobj09PTEvMCYmKG49MCksdC5fbGVuZ3RoPW4saT0wO2k8ZS5sZW5ndGg7aSsrKShhPWVbaV0pLnZpc2libGUmJihhLl9sZW5ndGg9bik7cmV0dXJuIG59fSx7fV0sMTAyNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZVwiKSxzPXQoXCIuLi8uLi9saWIvZ3VwXCIpLGw9cy5rZXlGdW4sYz1zLnJlcGVhdCx1PXMudW53cmFwLGg9dChcIi4vY29uc3RhbnRzXCIpLGY9dChcIi4vYXhpc2JydXNoXCIpLHA9dChcIi4vbGluZXNcIik7ZnVuY3Rpb24gZCh0KXtyZXR1cm4hKFwidmlzaWJsZVwiaW4gdCl8fHQudmlzaWJsZX1mdW5jdGlvbiBnKHQpe3ZhciBlPXQucmFuZ2U/dC5yYW5nZVswXTppLmFnZ051bXMoTWF0aC5taW4sbnVsbCx0LnZhbHVlcyx0Ll9sZW5ndGgpLHI9dC5yYW5nZT90LnJhbmdlWzFdOmkuYWdnTnVtcyhNYXRoLm1heCxudWxsLHQudmFsdWVzLHQuX2xlbmd0aCk7cmV0dXJuIWlzTmFOKGUpJiZpc0Zpbml0ZShlKXx8KGU9MCksIWlzTmFOKHIpJiZpc0Zpbml0ZShyKXx8KHI9MCksZT09PXImJigwPT09ZT8oZS09MSxyKz0xKTooZSo9Ljkscio9MS4xKSksW2Uscl19ZnVuY3Rpb24gdih0KXtyZXR1cm4gdC5kaW1lbnNpb25zLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHQuYnJ1c2guZmlsdGVyU3BlY2lmaWVkfSl9ZnVuY3Rpb24gbSh0LGUscil7dmFyIGE9dShlKSxzPWEudHJhY2UsbD1hLmxpbmVDb2xvcixjPXMubGluZSxmPWMucmV2ZXJzZXNjYWxlP28uZmxpcFNjYWxlKGEuY3NjYWxlKTphLmNzY2FsZSxwPXMuZG9tYWluLHY9cy5kaW1lbnNpb25zLG09dC53aWR0aCx5PXMubGFiZWxmb250LHg9cy50aWNrZm9udCxiPXMucmFuZ2Vmb250LF89aS5leHRlbmREZWVwTm9BcnJheXMoe30sYyx7Y29sb3I6bC5tYXAobi5zY2FsZS5saW5lYXIoKS5kb21haW4oZyh7dmFsdWVzOmwscmFuZ2U6W2MuY21pbixjLmNtYXhdLF9sZW5ndGg6cy5fbGVuZ3RofSkpKSxibG9ja0xpbmVDb3VudDpoLmJsb2NrTGluZUNvdW50LGNhbnZhc092ZXJkcmFnOmgub3ZlcmRyYWcqaC5jYW52YXNQaXhlbFJhdGlvfSksdz1NYXRoLmZsb29yKG0qKHAueFsxXS1wLnhbMF0pKSxrPU1hdGguZmxvb3IodC5oZWlnaHQqKHAueVsxXS1wLnlbMF0pKSxBPXQubWFyZ2lufHx7bDo4MCxyOjgwLHQ6MTAwLGI6ODB9LFQ9dyxNPWs7cmV0dXJue2tleTpyLGNvbENvdW50OnYuZmlsdGVyKGQpLmxlbmd0aCxkaW1lbnNpb25zOnYsdGlja0Rpc3RhbmNlOmgudGlja0Rpc3RhbmNlLHVuaXRUb0NvbG9yOmZ1bmN0aW9uKHQpe3ZhciBlPXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkscj10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbi5yZ2IodFsxXSl9KSxpPVwicmdiXCIuc3BsaXQoXCJcIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBuLnNjYWxlLmxpbmVhcigpLmNsYW1wKCEwKS5kb21haW4oZSkucmFuZ2Uoci5tYXAoKGk9dCxmdW5jdGlvbih0KXtyZXR1cm4gdFtpXX0pKSk7dmFyIGl9KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlKHQpfSl9fShmKSxsaW5lczpfLGxhYmVsRm9udDp5LHRpY2tGb250OngscmFuZ2VGb250OmIsbGF5b3V0V2lkdGg6bSxsYXlvdXRIZWlnaHQ6dC5oZWlnaHQsZG9tYWluOnAsdHJhbnNsYXRlWDpwLnhbMF0qbSx0cmFuc2xhdGVZOnQuaGVpZ2h0LXAueVsxXSp0LmhlaWdodCxwYWQ6QSxjYW52YXNXaWR0aDpUKmguY2FudmFzUGl4ZWxSYXRpbysyKl8uY2FudmFzT3ZlcmRyYWcsY2FudmFzSGVpZ2h0Ok0qaC5jYW52YXNQaXhlbFJhdGlvLHdpZHRoOlQsaGVpZ2h0Ok0sY2FudmFzUGl4ZWxSYXRpbzpoLmNhbnZhc1BpeGVsUmF0aW99fWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBhPXIud2lkdGgsbz1yLmhlaWdodCxzPXIuZGltZW5zaW9ucyxsPXIuY2FudmFzUGl4ZWxSYXRpbyxjPWZ1bmN0aW9uKHQpe3JldHVybiBhKnQvTWF0aC5tYXgoMSxyLmNvbENvdW50LTEpfSx1PWgudmVydGljYWxQYWRkaW5nL28scD1mdW5jdGlvbih0LGUpe3JldHVybiBuLnNjYWxlLmxpbmVhcigpLnJhbmdlKFtlLHQtZV0pfShvLGgudmVydGljYWxQYWRkaW5nKSxtPXtrZXk6ci5rZXkseFNjYWxlOmMsbW9kZWw6cixpbkJydXNoRHJhZzohMX0seT17fTtyZXR1cm4gbS5kaW1lbnNpb25zPXMuZmlsdGVyKGQpLm1hcChmdW5jdGlvbihhLHMpe3ZhciBkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uc2NhbGUubGluZWFyKCkuZG9tYWluKGcodCkpLnJhbmdlKFtlLDEtZV0pfShhLHUpLHg9eVthLmxhYmVsXTt5W2EubGFiZWxdPSh4fHwwKSsxO3ZhciBiPWEubGFiZWwrKHg/XCJfX1wiK3g6XCJcIiksXz1hLmNvbnN0cmFpbnRyYW5nZSx3PV8mJl8ubGVuZ3RoO3cmJiFBcnJheS5pc0FycmF5KF9bMF0pJiYoXz1bX10pO3ZhciBrPXc/Xy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGQpfSk6W1swLDFdXSxBPWEudmFsdWVzO0EubGVuZ3RoPmEuX2xlbmd0aCYmKEE9QS5zbGljZSgwLGEuX2xlbmd0aCkpO3ZhciBULE09YS50aWNrdmFscztmdW5jdGlvbiBTKHQsZSl7cmV0dXJue3ZhbDp0LHRleHQ6VFtlXX19ZnVuY3Rpb24gRSh0LGUpe3JldHVybiB0LnZhbC1lLnZhbH1pZihBcnJheS5pc0FycmF5KE0pJiZNLmxlbmd0aCl7VD1hLnRpY2t0ZXh0LEFycmF5LmlzQXJyYXkoVCkmJlQubGVuZ3RoP1QubGVuZ3RoPk0ubGVuZ3RoP1Q9VC5zbGljZSgwLE0ubGVuZ3RoKTpNLmxlbmd0aD5ULmxlbmd0aCYmKE09TS5zbGljZSgwLFQubGVuZ3RoKSk6VD1NLm1hcChuLmZvcm1hdChhLnRpY2tmb3JtYXQpKTtmb3IodmFyIEM9MTtDPE0ubGVuZ3RoO0MrKylpZihNW0NdPE1bQy0xXSl7Zm9yKHZhciBMPU0ubWFwKFMpLnNvcnQoRSksej0wO3o8TS5sZW5ndGg7eisrKU1bel09TFt6XS52YWwsVFt6XT1MW3pdLnRleHQ7YnJlYWt9fWVsc2UgTT12b2lkIDA7cmV0dXJue2tleTpiLGxhYmVsOmEubGFiZWwsdGlja0Zvcm1hdDphLnRpY2tmb3JtYXQsdGlja3ZhbHM6TSx0aWNrdGV4dDpULG9yZGluYWw6ISFNLG11bHRpc2VsZWN0OmEubXVsdGlzZWxlY3QseEluZGV4OnMsY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleDpzLHZpc2libGVJbmRleDphLl9pbmRleCxoZWlnaHQ6byx2YWx1ZXM6QSxwYWRkZWRVbml0VmFsdWVzOkEubWFwKGQpLHVuaXRUaWNrdmFsczpNJiZNLm1hcChkKSx4U2NhbGU6Yyx4OmMocyksY2FudmFzWDpjKHMpKmwsdW5pdFRvUGFkZGVkUHg6cCxkb21haW5TY2FsZTpmdW5jdGlvbih0LGUscixpLGEpe3ZhciBvLHMsbD1nKHIpO3JldHVybiBpP24uc2NhbGUub3JkaW5hbCgpLmRvbWFpbihpLm1hcCgobz1uLmZvcm1hdChyLnRpY2tmb3JtYXQpLHM9YSxzP2Z1bmN0aW9uKHQsZSl7dmFyIHI9c1tlXTtyZXR1cm4gbnVsbD09cj9vKHQpOnJ9Om8pKSkucmFuZ2UoaS5tYXAoZnVuY3Rpb24ocil7dmFyIG49KHItbFswXSkvKGxbMV0tbFswXSk7cmV0dXJuIHQtZStuKigyKmUtdCl9KSk6bi5zY2FsZS5saW5lYXIoKS5kb21haW4obCkucmFuZ2UoW3QtZSxlXSl9KG8saC52ZXJ0aWNhbFBhZGRpbmcsYSxNLFQpLG9yZGluYWxTY2FsZTpmdW5jdGlvbih0KXtpZih0LnRpY2t2YWxzKXt2YXIgZT1nKHQpO3JldHVybiBuLnNjYWxlLm9yZGluYWwoKS5kb21haW4odC50aWNrdmFscykucmFuZ2UodC50aWNrdmFscy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuKHQtZVswXSkvKGVbMV0tZVswXSl9KSl9fShhKSxwYXJlbnQ6bSxtb2RlbDpyLGJydXNoOmYubWFrZUJydXNoKHQsdyxrLGZ1bmN0aW9uKCl7dC5saW5lUGlja0FjdGl2ZSghMSl9LGZ1bmN0aW9uKCl7dmFyIGU9bTtlLmZvY3VzTGF5ZXImJmUuZm9jdXNMYXllci5yZW5kZXIoZS5wYW5lbHMsITApO3ZhciByPXYoZSk7IXQuY29udGV4dFNob3duKCkmJnI/KGUuY29udGV4dExheWVyJiZlLmNvbnRleHRMYXllci5yZW5kZXIoZS5wYW5lbHMsITApLHQuY29udGV4dFNob3duKCEwKSk6dC5jb250ZXh0U2hvd24oKSYmIXImJihlLmNvbnRleHRMYXllciYmZS5jb250ZXh0TGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwLCEwKSx0LmNvbnRleHRTaG93bighMSkpfSxmdW5jdGlvbihyKXt2YXIgbj1tO2lmKG4uZm9jdXNMYXllci5yZW5kZXIobi5wYW5lbHMsITApLG4ucGlja0xheWVyJiZuLnBpY2tMYXllci5yZW5kZXIobi5wYW5lbHMsITApLHQubGluZVBpY2tBY3RpdmUoITApLGUmJmUuZmlsdGVyQ2hhbmdlZCl7dmFyIG89ZC5pbnZlcnQscz1yLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAobykuc29ydChpLnNvcnRlckFzYyl9KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0tZVswXX0pO2UuZmlsdGVyQ2hhbmdlZChuLmtleSxhLl9pbmRleCxzKX19KX19KSxtfWZ1bmN0aW9uIHgodCl7dC5jbGFzc2VkKGguY24uYXhpc0V4dGVudFRleHQsITApLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLFwibWlkZGxlXCIpLnN0eWxlKFwiY3Vyc29yXCIsXCJkZWZhdWx0XCIpLnN0eWxlKFwidXNlci1zZWxlY3RcIixcIm5vbmVcIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyxkKXt2YXIgZyxiLF89KGc9ITAsYj0hMSx7bGluZVBpY2tBY3RpdmU6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/Zz0hIXQ6Z30sY29udGV4dFNob3duOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2I9ISF0OmJ9fSksdz1vLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdSh0KS50cmFjZS52aXNpYmxlfSkubWFwKG0uYmluZCgwLHMpKS5tYXAoeS5iaW5kKDAsXyxkKSk7ci5lYWNoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkuZXh0ZW5kRmxhdCh0LHdbZV0pfSk7dmFyIGs9ci5zZWxlY3RBbGwoXCIuZ2wtY2FudmFzXCIpLmVhY2goZnVuY3Rpb24odCl7dC52aWV3TW9kZWw9d1swXSx0Lm1vZGVsPXQudmlld01vZGVsP3Qudmlld01vZGVsLm1vZGVsOm51bGx9KSxBPW51bGw7ay5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQucGlja30pLnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixcImF1dG9cIikub24oXCJtb3VzZW1vdmVcIixmdW5jdGlvbih0KXtpZihfLmxpbmVQaWNrQWN0aXZlKCkmJnQubGluZUxheWVyJiZkJiZkLmhvdmVyKXt2YXIgZT1uLmV2ZW50LHI9dGhpcy53aWR0aCxpPXRoaXMuaGVpZ2h0LGE9bi5tb3VzZSh0aGlzKSxvPWFbMF0scz1hWzFdO2lmKG88MHx8czwwfHxvPj1yfHxzPj1pKXJldHVybjt2YXIgbD10LmxpbmVMYXllci5yZWFkUGl4ZWwobyxpLTEtcyksYz0wIT09bFszXSx1PWM/bFsyXSsyNTYqKGxbMV0rMjU2KmxbMF0pOm51bGwsaD17eDpvLHk6cyxjbGllbnRYOmUuY2xpZW50WCxjbGllbnRZOmUuY2xpZW50WSxkYXRhSW5kZXg6dC5tb2RlbC5rZXksY3VydmVOdW1iZXI6dX07dSE9PUEmJihjP2QuaG92ZXIoaCk6ZC51bmhvdmVyJiZkLnVuaG92ZXIoaCksQT11KX19KSxrLnN0eWxlKFwib3BhY2l0eVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnBpY2s/LjAxOjF9KSxlLnN0eWxlKFwiYmFja2dyb3VuZFwiLFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwKVwiKTt2YXIgVD1lLnNlbGVjdEFsbChcIi5cIitoLmNuLnBhcmNvb3JkcykuZGF0YSh3LGwpO1QuZXhpdCgpLnJlbW92ZSgpLFQuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoaC5jbi5wYXJjb29yZHMsITApLnN0eWxlKFwic2hhcGUtcmVuZGVyaW5nXCIsXCJjcmlzcEVkZ2VzXCIpLnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixcIm5vbmVcIiksVC5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrdC5tb2RlbC50cmFuc2xhdGVYK1wiLFwiK3QubW9kZWwudHJhbnNsYXRlWStcIilcIn0pO3ZhciBNPVQuc2VsZWN0QWxsKFwiLlwiK2guY24ucGFyY29vcmRzQ29udHJvbFZpZXcpLmRhdGEoYyxsKTtNLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKGguY24ucGFyY29vcmRzQ29udHJvbFZpZXcsITApLE0uYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKFwiK3QubW9kZWwucGFkLmwrXCIsXCIrdC5tb2RlbC5wYWQudCtcIilcIn0pO3ZhciBTPU0uc2VsZWN0QWxsKFwiLlwiK2guY24ueUF4aXMpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGltZW5zaW9uc30sbCk7ZnVuY3Rpb24gRSh0LGUpe2Zvcih2YXIgcj1lLnBhbmVsc3x8KGUucGFuZWxzPVtdKSxuPXQuZGF0YSgpLGk9bi5sZW5ndGgtMSxhPTA7YTxpO2ErKyl7dmFyIG89clthXXx8KHJbYV09e30pLHM9blthXSxsPW5bYSsxXTtvLmRpbTE9cyxvLmRpbTI9bCxvLmNhbnZhc1g9cy5jYW52YXNYLG8ucGFuZWxTaXplWD1sLmNhbnZhc1gtcy5jYW52YXNYLG8ucGFuZWxTaXplWT1lLm1vZGVsLmNhbnZhc0hlaWdodCxvLnk9MCxvLmNhbnZhc1k9MH19Uy5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChoLmNuLnlBeGlzLCEwKSxNLmVhY2goZnVuY3Rpb24odCl7RShTLHQpfSksay5lYWNoKGZ1bmN0aW9uKHQpe2lmKHQudmlld01vZGVsKXshdC5saW5lTGF5ZXJ8fGQ/dC5saW5lTGF5ZXI9cCh0aGlzLHQpOnQubGluZUxheWVyLnVwZGF0ZSh0KSwodC5rZXl8fDA9PT10LmtleSkmJih0LnZpZXdNb2RlbFt0LmtleV09dC5saW5lTGF5ZXIpO3ZhciBlPSF0LmNvbnRleHR8fGQ7dC5saW5lTGF5ZXIucmVuZGVyKHQudmlld01vZGVsLnBhbmVscyxlKX19KSxTLmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXtyZXR1cm5cInRyYW5zbGF0ZShcIit0LnhTY2FsZSh0LnhJbmRleCkrXCIsIDApXCJ9KSxTLmNhbGwobi5iZWhhdmlvci5kcmFnKCkub3JpZ2luKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkub24oXCJkcmFnXCIsZnVuY3Rpb24odCl7dmFyIGU9dC5wYXJlbnQ7Xy5saW5lUGlja0FjdGl2ZSghMSksdC54PU1hdGgubWF4KC1oLm92ZXJkcmFnLE1hdGgubWluKHQubW9kZWwud2lkdGgraC5vdmVyZHJhZyxuLmV2ZW50LngpKSx0LmNhbnZhc1g9dC54KnQubW9kZWwuY2FudmFzUGl4ZWxSYXRpbyxTLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54LWUueH0pLmVhY2goZnVuY3Rpb24oZSxyKXtlLnhJbmRleD1yLGUueD10PT09ZT9lLng6ZS54U2NhbGUoZS54SW5kZXgpLGUuY2FudmFzWD1lLngqZS5tb2RlbC5jYW52YXNQaXhlbFJhdGlvfSksRShTLGUpLFMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiAwIT09TWF0aC5hYnModC54SW5kZXgtZS54SW5kZXgpfSkuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKFwiK3QueFNjYWxlKHQueEluZGV4KStcIiwgMClcIn0pLG4uc2VsZWN0KHRoaXMpLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIit0LngrXCIsIDApXCIpLFMuZWFjaChmdW5jdGlvbihyLG4saSl7aT09PXQucGFyZW50LmtleSYmKGUuZGltZW5zaW9uc1tuXT1yKX0pLGUuY29udGV4dExheWVyJiZlLmNvbnRleHRMYXllci5yZW5kZXIoZS5wYW5lbHMsITEsIXYoZSkpLGUuZm9jdXNMYXllci5yZW5kZXImJmUuZm9jdXNMYXllci5yZW5kZXIoZS5wYW5lbHMpfSkub24oXCJkcmFnZW5kXCIsZnVuY3Rpb24odCl7dmFyIGU9dC5wYXJlbnQ7dC54PXQueFNjYWxlKHQueEluZGV4KSx0LmNhbnZhc1g9dC54KnQubW9kZWwuY2FudmFzUGl4ZWxSYXRpbyxFKFMsZSksbi5zZWxlY3QodGhpcykuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKFwiK3QueCtcIiwgMClcIn0pLGUuY29udGV4dExheWVyJiZlLmNvbnRleHRMYXllci5yZW5kZXIoZS5wYW5lbHMsITEsIXYoZSkpLGUuZm9jdXNMYXllciYmZS5mb2N1c0xheWVyLnJlbmRlcihlLnBhbmVscyksZS5waWNrTGF5ZXImJmUucGlja0xheWVyLnJlbmRlcihlLnBhbmVscywhMCksXy5saW5lUGlja0FjdGl2ZSghMCksZCYmZC5heGVzTW92ZWQmJmQuYXhlc01vdmVkKGUua2V5LGUuZGltZW5zaW9ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleH0pKX0pKSxTLmV4aXQoKS5yZW1vdmUoKTt2YXIgQz1TLnNlbGVjdEFsbChcIi5cIitoLmNuLmF4aXNPdmVybGF5cykuZGF0YShjLGwpO0MuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoaC5jbi5heGlzT3ZlcmxheXMsITApLEMuc2VsZWN0QWxsKFwiLlwiK2guY24uYXhpcykucmVtb3ZlKCk7dmFyIEw9Qy5zZWxlY3RBbGwoXCIuXCIraC5jbi5heGlzKS5kYXRhKGMsbCk7TC5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChoLmNuLmF4aXMsITApLEwuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10Lm1vZGVsLmhlaWdodC90Lm1vZGVsLnRpY2tEaXN0YW5jZSxyPXQuZG9tYWluU2NhbGUsaT1yLmRvbWFpbigpO24uc2VsZWN0KHRoaXMpLmNhbGwobi5zdmcuYXhpcygpLm9yaWVudChcImxlZnRcIikudGlja1NpemUoNCkub3V0ZXJUaWNrU2l6ZSgyKS50aWNrcyhlLHQudGlja0Zvcm1hdCkudGlja1ZhbHVlcyh0Lm9yZGluYWw/aTpudWxsKS50aWNrRm9ybWF0KHQub3JkaW5hbD9mdW5jdGlvbih0KXtyZXR1cm4gdH06bnVsbCkuc2NhbGUocikpLGEuZm9udChMLnNlbGVjdEFsbChcInRleHRcIiksdC5tb2RlbC50aWNrRm9udCl9KSxMLnNlbGVjdEFsbChcIi5kb21haW4sIC50aWNrPmxpbmVcIikuYXR0cihcImZpbGxcIixcIm5vbmVcIikuYXR0cihcInN0cm9rZVwiLFwiYmxhY2tcIikuYXR0cihcInN0cm9rZS1vcGFjaXR5XCIsLjI1KS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsXCIxcHhcIiksTC5zZWxlY3RBbGwoXCJ0ZXh0XCIpLnN0eWxlKFwidGV4dC1zaGFkb3dcIixcIjFweCAxcHggMXB4ICNmZmYsIC0xcHggLTFweCAxcHggI2ZmZiwgMXB4IC0xcHggMXB4ICNmZmYsIC0xcHggMXB4IDFweCAjZmZmXCIpLnN0eWxlKFwiY3Vyc29yXCIsXCJkZWZhdWx0XCIpLnN0eWxlKFwidXNlci1zZWxlY3RcIixcIm5vbmVcIik7dmFyIHo9Qy5zZWxlY3RBbGwoXCIuXCIraC5jbi5heGlzSGVhZGluZykuZGF0YShjLGwpO3ouZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoaC5jbi5heGlzSGVhZGluZywhMCk7dmFyIE89ei5zZWxlY3RBbGwoXCIuXCIraC5jbi5heGlzVGl0bGUpLmRhdGEoYyxsKTtPLmVudGVyKCkuYXBwZW5kKFwidGV4dFwiKS5jbGFzc2VkKGguY24uYXhpc1RpdGxlLCEwKS5hdHRyKFwidGV4dC1hbmNob3JcIixcIm1pZGRsZVwiKS5zdHlsZShcImN1cnNvclwiLFwiZXctcmVzaXplXCIpLnN0eWxlKFwidXNlci1zZWxlY3RcIixcIm5vbmVcIikuc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwiYXV0b1wiKSxPLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZSgwLFwiKy1oLmF4aXNUaXRsZU9mZnNldCtcIilcIikudGV4dChmdW5jdGlvbih0KXtyZXR1cm4gdC5sYWJlbH0pLmVhY2goZnVuY3Rpb24odCl7YS5mb250KG4uc2VsZWN0KHRoaXMpLHQubW9kZWwubGFiZWxGb250KX0pO3ZhciBJPUMuc2VsZWN0QWxsKFwiLlwiK2guY24uYXhpc0V4dGVudCkuZGF0YShjLGwpO0kuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoaC5jbi5heGlzRXh0ZW50LCEwKTt2YXIgRD1JLnNlbGVjdEFsbChcIi5cIitoLmNuLmF4aXNFeHRlbnRUb3ApLmRhdGEoYyxsKTtELmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKGguY24uYXhpc0V4dGVudFRvcCwhMCksRC5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoMCxcIistaC5heGlzRXh0ZW50T2Zmc2V0K1wiKVwiKTt2YXIgUD1ELnNlbGVjdEFsbChcIi5cIitoLmNuLmF4aXNFeHRlbnRUb3BUZXh0KS5kYXRhKGMsbCk7ZnVuY3Rpb24gUih0LGUpe2lmKHQub3JkaW5hbClyZXR1cm5cIlwiO3ZhciByPXQuZG9tYWluU2NhbGUuZG9tYWluKCk7cmV0dXJuIG4uZm9ybWF0KHQudGlja0Zvcm1hdCkocltlP3IubGVuZ3RoLTE6MF0pfVAuZW50ZXIoKS5hcHBlbmQoXCJ0ZXh0XCIpLmNsYXNzZWQoaC5jbi5heGlzRXh0ZW50VG9wVGV4dCwhMCkuY2FsbCh4KSxQLnRleHQoZnVuY3Rpb24odCl7cmV0dXJuIFIodCwhMCl9KS5lYWNoKGZ1bmN0aW9uKHQpe2EuZm9udChuLnNlbGVjdCh0aGlzKSx0Lm1vZGVsLnJhbmdlRm9udCl9KTt2YXIgRj1JLnNlbGVjdEFsbChcIi5cIitoLmNuLmF4aXNFeHRlbnRCb3R0b20pLmRhdGEoYyxsKTtGLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKGguY24uYXhpc0V4dGVudEJvdHRvbSwhMCksRi5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoMCxcIisodC5tb2RlbC5oZWlnaHQraC5heGlzRXh0ZW50T2Zmc2V0KStcIilcIn0pO3ZhciBCPUYuc2VsZWN0QWxsKFwiLlwiK2guY24uYXhpc0V4dGVudEJvdHRvbVRleHQpLmRhdGEoYyxsKTtCLmVudGVyKCkuYXBwZW5kKFwidGV4dFwiKS5jbGFzc2VkKGguY24uYXhpc0V4dGVudEJvdHRvbVRleHQsITApLmF0dHIoXCJkeVwiLFwiMC43NWVtXCIpLmNhbGwoeCksQi50ZXh0KGZ1bmN0aW9uKHQpe3JldHVybiBSKHQpfSkuZWFjaChmdW5jdGlvbih0KXthLmZvbnQobi5zZWxlY3QodGhpcyksdC5tb2RlbC5yYW5nZUZvbnQpfSksZi5lbnN1cmVBeGlzQnJ1c2goQyl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGVcIjo1OTAsXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvZ3VwXCI6Njk5LFwiLi9heGlzYnJ1c2hcIjoxMDE2LFwiLi9jb25zdGFudHNcIjoxMDE5LFwiLi9saW5lc1wiOjEwMjIsZDM6MTU1fV0sMTAyNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL3BhcmNvb3Jkc1wiKSxpPXQoXCIuLi8uLi9saWIvcHJlcGFyZV9yZWdsXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsYT1yLl90b3BwYXBlcixvPXIuX3BhcGVyZGl2LHM9ci5fZ2xjb250YWluZXI7aWYoaSh0KSl7dmFyIGw9e30sYz17fSx1PXt9LGg9e30sZj1yLl9zaXplO2UuZm9yRWFjaChmdW5jdGlvbihlLHIpe3ZhciBuPWVbMF0udHJhY2U7dVtyXT1uLmluZGV4O3ZhciBpPWhbcl09bi5fZnVsbElucHV0LmluZGV4O2xbcl09dC5kYXRhW2ldLmRpbWVuc2lvbnMsY1tyXT10LmRhdGFbaV0uZGltZW5zaW9ucy5zbGljZSgpfSk7bihvLGEscyxlLHt3aWR0aDpmLncsaGVpZ2h0OmYuaCxtYXJnaW46e3Q6Zi50LHI6Zi5yLGI6Zi5iLGw6Zi5sfX0se2ZpbHRlckNoYW5nZWQ6ZnVuY3Rpb24oZSxuLGkpe3ZhciBhPWNbZV1bbl0sbz1pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgpfSkscz1cImRpbWVuc2lvbnNbXCIrbitcIl0uY29uc3RyYWludHJhbmdlXCIsbD1yLl90cmFjZVByZUdVSVt0Ll9mdWxsRGF0YVt1W2VdXS5fZnVsbElucHV0LnVpZF07aWYodm9pZCAwPT09bFtzXSl7dmFyIGY9YS5jb25zdHJhaW50cmFuZ2U7bFtzXT1mfHxudWxsfXZhciBwPXQuX2Z1bGxEYXRhW3VbZV1dLmRpbWVuc2lvbnNbbl07by5sZW5ndGg/KDE9PT1vLmxlbmd0aCYmKG89b1swXSksYS5jb25zdHJhaW50cmFuZ2U9byxwLmNvbnN0cmFpbnRyYW5nZT1vLnNsaWNlKCksbz1bb10pOihkZWxldGUgYS5jb25zdHJhaW50cmFuZ2UsZGVsZXRlIHAuY29uc3RyYWludHJhbmdlLG89bnVsbCk7dmFyIGQ9e307ZFtzXT1vLHQuZW1pdChcInBsb3RseV9yZXN0eWxlXCIsW2QsW2hbZV1dXSl9LGhvdmVyOmZ1bmN0aW9uKGUpe3QuZW1pdChcInBsb3RseV9ob3ZlclwiLGUpfSx1bmhvdmVyOmZ1bmN0aW9uKGUpe3QuZW1pdChcInBsb3RseV91bmhvdmVyXCIsZSl9LGF4ZXNNb3ZlZDpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIShcInZpc2libGVcImluIHQpfHx0LnZpc2libGV9ZnVuY3Rpb24gaSh0LGUscil7dmFyIG49ZS5pbmRleE9mKHIpLGk9dC5pbmRleE9mKG4pO3JldHVybi0xPT09aSYmKGkrPWUubGVuZ3RoKSxpfXZhciBhPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiBpKHIsdCxlKS1pKHIsdCxuKX19KGNbZV0uZmlsdGVyKG4pKTtsW2VdLnNvcnQoYSksY1tlXS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIW4odCl9KS5zb3J0KGZ1bmN0aW9uKHQpe3JldHVybiBjW2VdLmluZGV4T2YodCl9KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2xbZV0uc3BsaWNlKGxbZV0uaW5kZXhPZih0KSwxKSxsW2VdLnNwbGljZShjW2VdLmluZGV4T2YodCksMCx0KX0pLHQuZW1pdChcInBsb3RseV9yZXN0eWxlXCIsW3tkaW1lbnNpb25zOltsW2VdXX0sW2hbZV1dXSl9fSl9fX0se1wiLi4vLi4vbGliL3ByZXBhcmVfcmVnbFwiOjcxNCxcIi4vcGFyY29vcmRzXCI6MTAyNH1dLDEwMjY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL3Bsb3RzL2RvbWFpblwiKS5hdHRyaWJ1dGVzLGw9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxjPWkoe2VkaXRUeXBlOlwiY2FsY1wiLGFycmF5T2s6ITAsY29sb3JFZGl0VHlwZTpcInBsb3RcIn0pO2UuZXhwb3J0cz17bGFiZWxzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxsYWJlbDA6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjAsZWRpdFR5cGU6XCJjYWxjXCJ9LGRsYWJlbDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MSxlZGl0VHlwZTpcImNhbGNcIn0sdmFsdWVzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxtYXJrZXI6e2NvbG9yczp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sbGluZTp7Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6bi5kZWZhdWx0TGluZSxhcnJheU9rOiEwLGVkaXRUeXBlOlwic3R5bGVcIn0sd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjAsYXJyYXlPazohMCxlZGl0VHlwZTpcInN0eWxlXCJ9LGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0sdGV4dDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJzdHlsZVwifSxzY2FsZWdyb3VwOnt2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwiY2FsY1wifSx0ZXh0aW5mbzp7dmFsVHlwZTpcImZsYWdsaXN0XCIsZmxhZ3M6W1wibGFiZWxcIixcInRleHRcIixcInZhbHVlXCIsXCJwZXJjZW50XCJdLGV4dHJhczpbXCJub25lXCJdLGVkaXRUeXBlOlwiY2FsY1wifSxob3ZlcmluZm86bCh7fSxhLmhvdmVyaW5mbyx7ZmxhZ3M6W1wibGFiZWxcIixcInRleHRcIixcInZhbHVlXCIsXCJwZXJjZW50XCIsXCJuYW1lXCJdfSksaG92ZXJ0ZW1wbGF0ZTpvKHt9LHtrZXlzOltcImxhYmVsXCIsXCJjb2xvclwiLFwidmFsdWVcIixcInBlcmNlbnRcIixcInRleHRcIl19KSx0ZXh0cG9zaXRpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImluc2lkZVwiLFwib3V0c2lkZVwiLFwiYXV0b1wiLFwibm9uZVwiXSxkZmx0OlwiYXV0b1wiLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LHRleHRmb250Omwoe30sYyx7fSksaW5zaWRldGV4dGZvbnQ6bCh7fSxjLHt9KSxvdXRzaWRldGV4dGZvbnQ6bCh7fSxjLHt9KSx0aXRsZTp7dGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcImNhbGNcIn0sZm9udDpsKHt9LGMse30pLHBvc2l0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ0b3AgbGVmdFwiLFwidG9wIGNlbnRlclwiLFwidG9wIHJpZ2h0XCIsXCJtaWRkbGUgY2VudGVyXCIsXCJib3R0b20gbGVmdFwiLFwiYm90dG9tIGNlbnRlclwiLFwiYm90dG9tIHJpZ2h0XCJdLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0sZG9tYWluOnMoe25hbWU6XCJwaWVcIix0cmFjZTohMCxlZGl0VHlwZTpcImNhbGNcIn0pLGhvbGU6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6XCJjYWxjXCJ9LHNvcnQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcImNhbGNcIn0sZGlyZWN0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJjbG9ja3dpc2VcIixcImNvdW50ZXJjbG9ja3dpc2VcIl0sZGZsdDpcImNvdW50ZXJjbG9ja3dpc2VcIixlZGl0VHlwZTpcImNhbGNcIn0scm90YXRpb246e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46LTM2MCxtYXg6MzYwLGRmbHQ6MCxlZGl0VHlwZTpcImNhbGNcIn0scHVsbDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MCxhcnJheU9rOiEwLGVkaXRUeXBlOlwiY2FsY1wifSxfZGVwcmVjYXRlZDp7dGl0bGU6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHRpdGxlZm9udDpsKHt9LGMse30pLHRpdGxlcG9zaXRpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInRvcCBsZWZ0XCIsXCJ0b3AgY2VudGVyXCIsXCJ0b3AgcmlnaHRcIixcIm1pZGRsZSBjZW50ZXJcIixcImJvdHRvbSBsZWZ0XCIsXCJib3R0b20gY2VudGVyXCIsXCJib3R0b20gcmlnaHRcIl0sZWRpdFR5cGU6XCJjYWxjXCJ9fX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiOjU3NyxcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDYsXCIuLi8uLi9wbG90cy9kb21haW5cIjo3NzQsXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIjo3NzV9XSwxMDI3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCIpLmdldE1vZHVsZUNhbGNEYXRhO3IubmFtZT1cInBpZVwiLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT1uLmdldE1vZHVsZShcInBpZVwiKSxyPWkodC5jYWxjZGF0YSxlKVswXTtlLnBsb3QodCxyKX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLl9oYXMmJm4uX2hhcyhcInBpZVwiKSxhPWUuX2hhcyYmZS5faGFzKFwicGllXCIpO2kmJiFhJiZuLl9waWVsYXllci5zZWxlY3RBbGwoXCJnLnRyYWNlXCIpLnJlbW92ZSgpfX0se1wiLi4vLi4vcGxvdHMvZ2V0X2RhdGFcIjo3ODQsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOX1dLDEwMjg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vLi4vbGliXCIpLmlzQXJyYXlPclR5cGVkQXJyYXksYT10KFwidGlueWNvbG9yMlwiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLHM9dChcIi4vaGVscGVyc1wiKSxsPXt9O2Z1bmN0aW9uIGModCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7cmV0dXJuISFlJiYoISEoZT1hKGUpKS5pc1ZhbGlkKCkmJihlPW8uYWRkT3BhY2l0eShlLGUuZ2V0QWxwaGEoKSksdFtyXXx8KHRbcl09ZSksZSkpfX1mdW5jdGlvbiB1KHQsZSl7dmFyIHIsbj1KU09OLnN0cmluZ2lmeSh0KSxpPWVbbl07aWYoIWkpe2ZvcihpPXQuc2xpY2UoKSxyPTA7cjx0Lmxlbmd0aDtyKyspaS5wdXNoKGEodFtyXSkubGlnaHRlbigyMCkudG9IZXhTdHJpbmcoKSk7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKylpLnB1c2goYSh0W3JdKS5kYXJrZW4oMjApLnRvSGV4U3RyaW5nKCkpO2Vbbl09aX1yZXR1cm4gaX1lLmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24odCxlKXt2YXIgcixhLG8sbCx1LGg9ZS52YWx1ZXMsZj1pKGgpJiZoLmxlbmd0aCxwPWUubGFiZWxzLGQ9ZS5tYXJrZXIuY29sb3JzfHxbXSxnPVtdLHY9dC5fZnVsbExheW91dCxtPXt9LHk9MCx4PXYuaGlkZGVubGFiZWxzfHxbXTtpZihlLmRsYWJlbClmb3IocD1uZXcgQXJyYXkoaC5sZW5ndGgpLHI9MDtyPGgubGVuZ3RoO3IrKylwW3JdPVN0cmluZyhlLmxhYmVsMCtyKmUuZGxhYmVsKTt2YXIgYj1jKHYuX3BpZWNvbG9ybWFwKSxfPShmP2g6cCkubGVuZ3RoO2ZvcihyPTA7cjxfO3IrKyl7aWYoZil7aWYoYT1oW3JdLCFuKGEpKWNvbnRpbnVlO2lmKChhPSthKTwwKWNvbnRpbnVlfWVsc2UgYT0xO3ZvaWQgMCE9PShvPXBbcl0pJiZcIlwiIT09b3x8KG89cik7dmFyIHc9bVtvPVN0cmluZyhvKV07dm9pZCAwPT09dz8obVtvXT1nLmxlbmd0aCwobD0tMSE9PXguaW5kZXhPZihvKSl8fCh5Kz1hKSxnLnB1c2goe3Y6YSxsYWJlbDpvLGNvbG9yOmIoZFtyXSxvKSxpOnIscHRzOltyXSxoaWRkZW46bH0pKTooKHU9Z1t3XSkudis9YSx1LnB0cy5wdXNoKHIpLHUuaGlkZGVufHwoeSs9YSksITE9PT11LmNvbG9yJiZkW3JdJiYodS5jb2xvcj1iKGRbcl0sbykpKX1pZihlLnNvcnQmJmcuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBlLnYtdC52fSksZ1swXSYmKGdbMF0udlRvdGFsPXkpLGUudGV4dGluZm8mJlwibm9uZVwiIT09ZS50ZXh0aW5mbyl7dmFyIGssQT0tMSE9PWUudGV4dGluZm8uaW5kZXhPZihcImxhYmVsXCIpLFQ9LTEhPT1lLnRleHRpbmZvLmluZGV4T2YoXCJ0ZXh0XCIpLE09LTEhPT1lLnRleHRpbmZvLmluZGV4T2YoXCJ2YWx1ZVwiKSxTPS0xIT09ZS50ZXh0aW5mby5pbmRleE9mKFwicGVyY2VudFwiKSxFPXYuc2VwYXJhdG9ycztmb3Iocj0wO3I8Zy5sZW5ndGg7cisrKXtpZih1PWdbcl0saz1BP1t1LmxhYmVsXTpbXSxUKXt2YXIgQz1zLmdldEZpcnN0RmlsbGVkKGUudGV4dCx1LnB0cyk7QyYmay5wdXNoKEMpfU0mJmsucHVzaChzLmZvcm1hdFBpZVZhbHVlKHUudixFKSksUyYmay5wdXNoKHMuZm9ybWF0UGllUGVyY2VudCh1LnYveSxFKSksdS50ZXh0PWsuam9pbihcIjxicj5cIil9fXJldHVybiBnfSxjcm9zc1RyYWNlQ2FsYzpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxuPWUucGllY29sb3J3YXksaT1lLl9waWVjb2xvcm1hcDtlLmV4dGVuZHBpZWNvbG9ycyYmKG49dShuLGwpKTtmb3IodmFyIGE9MCxvPTA7bzxyLmxlbmd0aDtvKyspe3ZhciBzPXJbb107aWYoXCJwaWVcIj09PXNbMF0udHJhY2UudHlwZSlmb3IodmFyIGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIGg9c1tjXTshMT09PWguY29sb3ImJihpW2gubGFiZWxdP2guY29sb3I9aVtoLmxhYmVsXTooaVtoLmxhYmVsXT1oLmNvbG9yPW5bYSVuLmxlbmd0aF0sYSsrKSl9fX0sbWFrZVB1bGxDb2xvckZuOmMsZ2VuZXJhdGVFeHRlbmRlZENvbG9yczp1fX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4vaGVscGVyc1wiOjEwMzEsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMix0aW55Y29sb3IyOjUyMn1dLDEwMjk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9wbG90cy9kb21haW5cIikuZGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHMocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX12YXIgbCxjPW4uY29lcmNlRm9udCx1PXMoXCJ2YWx1ZXNcIiksaD1uLmlzQXJyYXlPclR5cGVkQXJyYXkodSksZj1zKFwibGFiZWxzXCIpO2lmKEFycmF5LmlzQXJyYXkoZik/KGw9Zi5sZW5ndGgsaCYmKGw9TWF0aC5taW4obCx1Lmxlbmd0aCkpKTpoJiYobD11Lmxlbmd0aCxzKFwibGFiZWwwXCIpLHMoXCJkbGFiZWxcIikpLGwpe2UuX2xlbmd0aD1sLHMoXCJtYXJrZXIubGluZS53aWR0aFwiKSYmcyhcIm1hcmtlci5saW5lLmNvbG9yXCIpLHMoXCJtYXJrZXIuY29sb3JzXCIpLHMoXCJzY2FsZWdyb3VwXCIpO3ZhciBwPXMoXCJ0ZXh0XCIpLGQ9cyhcInRleHRpbmZvXCIsQXJyYXkuaXNBcnJheShwKT9cInRleHQrcGVyY2VudFwiOlwicGVyY2VudFwiKTtpZihzKFwiaG92ZXJ0ZXh0XCIpLHMoXCJob3ZlcnRlbXBsYXRlXCIpLGQmJlwibm9uZVwiIT09ZCl7dmFyIGc9cyhcInRleHRwb3NpdGlvblwiKSx2PUFycmF5LmlzQXJyYXkoZyl8fFwiYXV0b1wiPT09ZyxtPXZ8fFwiaW5zaWRlXCI9PT1nLHk9dnx8XCJvdXRzaWRlXCI9PT1nO2lmKG18fHkpe3ZhciB4PWMocyxcInRleHRmb250XCIsby5mb250KTtpZihtKXt2YXIgYj1uLmV4dGVuZEZsYXQoe30seCk7ISh0LnRleHRmb250JiZ0LnRleHRmb250LmNvbG9yKSYmZGVsZXRlIGIuY29sb3IsYyhzLFwiaW5zaWRldGV4dGZvbnRcIixiKX15JiZjKHMsXCJvdXRzaWRldGV4dGZvbnRcIix4KX19YShlLG8scyk7dmFyIF89cyhcImhvbGVcIik7aWYocyhcInRpdGxlLnRleHRcIikpe3ZhciB3PXMoXCJ0aXRsZS5wb3NpdGlvblwiLF8/XCJtaWRkbGUgY2VudGVyXCI6XCJ0b3AgY2VudGVyXCIpO198fFwibWlkZGxlIGNlbnRlclwiIT09d3x8KGUudGl0bGUucG9zaXRpb249XCJ0b3AgY2VudGVyXCIpLGMocyxcInRpdGxlLmZvbnRcIixvLmZvbnQpfXMoXCJzb3J0XCIpLHMoXCJkaXJlY3Rpb25cIikscyhcInJvdGF0aW9uXCIpLHMoXCJwdWxsXCIpfWVsc2UgZS52aXNpYmxlPSExfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvZG9tYWluXCI6Nzc0LFwiLi9hdHRyaWJ1dGVzXCI6MTAyNn1dLDEwMzA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzXCIpLmFwcGVuZEFycmF5TXVsdGlQb2ludFZhbHVlcztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17Y3VydmVOdW1iZXI6ZS5pbmRleCxwb2ludE51bWJlcnM6dC5wdHMsZGF0YTplLl9pbnB1dCxmdWxsRGF0YTplLGxhYmVsOnQubGFiZWwsY29sb3I6dC5jb2xvcix2YWx1ZTp0LnYscGVyY2VudDp0LnBlcmNlbnQsdGV4dDp0LnRleHQsdjp0LnZ9O3JldHVybiAxPT09dC5wdHMubGVuZ3RoJiYoci5wb2ludE51bWJlcj1yLmk9dC5wdHNbMF0pLG4ocixlLHQucHRzKSxyfX0se1wiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzXCI6NjEzfV0sMTAzMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIik7ci5mb3JtYXRQaWVQZXJjZW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9KDEwMCp0KS50b1ByZWNpc2lvbigzKTtyZXR1cm4tMSE9PXIubGFzdEluZGV4T2YoXCIuXCIpJiYocj1yLnJlcGxhY2UoL1suXT8wKyQvLFwiXCIpKSxuLm51bVNlcGFyYXRlKHIsZSkrXCIlXCJ9LHIuZm9ybWF0UGllVmFsdWU9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnRvUHJlY2lzaW9uKDEwKTtyZXR1cm4tMSE9PXIubGFzdEluZGV4T2YoXCIuXCIpJiYocj1yLnJlcGxhY2UoL1suXT8wKyQvLFwiXCIpKSxuLm51bVNlcGFyYXRlKHIsZSl9LHIuZ2V0Rmlyc3RGaWxsZWQ9ZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj10W2Vbcl1dO2lmKG58fDA9PT1uKXJldHVybiBufX0sci5jYXN0T3B0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/ci5nZXRGaXJzdEZpbGxlZCh0LGUpOnR8fHZvaWQgMH19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDEwMzI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLG4uc3VwcGx5TGF5b3V0RGVmYXVsdHM9dChcIi4vbGF5b3V0X2RlZmF1bHRzXCIpLG4ubGF5b3V0QXR0cmlidXRlcz10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKTt2YXIgaT10KFwiLi9jYWxjXCIpO24uY2FsYz1pLmNhbGMsbi5jcm9zc1RyYWNlQ2FsYz1pLmNyb3NzVHJhY2VDYWxjLG4ucGxvdD10KFwiLi9wbG90XCIpLnBsb3Qsbi5zdHlsZT10KFwiLi9zdHlsZVwiKSxuLnN0eWxlT25lPXQoXCIuL3N0eWxlX29uZVwiKSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cInBpZVwiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4vYmFzZV9wbG90XCIpLG4uY2F0ZWdvcmllcz1bXCJwaWVcIixcInNob3dMZWdlbmRcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuL2F0dHJpYnV0ZXNcIjoxMDI2LFwiLi9iYXNlX3Bsb3RcIjoxMDI3LFwiLi9jYWxjXCI6MTAyOCxcIi4vZGVmYXVsdHNcIjoxMDI5LFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjEwMzMsXCIuL2xheW91dF9kZWZhdWx0c1wiOjEwMzQsXCIuL3Bsb3RcIjoxMDM1LFwiLi9zdHlsZVwiOjEwMzYsXCIuL3N0eWxlX29uZVwiOjEwMzd9XSwxMDMzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtoaWRkZW5sYWJlbHM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHBpZWNvbG9yd2F5Ont2YWxUeXBlOlwiY29sb3JsaXN0XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGV4dGVuZHBpZWNvbG9yczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifX19LHt9XSwxMDM0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1yKFwiaGlkZGVubGFiZWxzXCIpLHIoXCJwaWVjb2xvcndheVwiLGUuY29sb3J3YXkpLHIoXCJleHRlbmRwaWVjb2xvcnNcIil9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6MTAzM31dLDEwMzU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxzPXQoXCIuLi8uLi9saWJcIiksbD10KFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCIpLGM9dChcIi4vaGVscGVyc1wiKSx1PXQoXCIuL2V2ZW50X2RhdGFcIik7ZnVuY3Rpb24gaCh0LGUscil7dmFyIGE9clswXSxvPWEudHJhY2Uscz1hLmN4LGw9YS5jeTtcIl9oYXNIb3ZlckxhYmVsXCJpbiBvfHwoby5faGFzSG92ZXJMYWJlbD0hMSksXCJfaGFzSG92ZXJFdmVudFwiaW4gb3x8KG8uX2hhc0hvdmVyRXZlbnQ9ITEpLHQub24oXCJtb3VzZW92ZXJcIixmdW5jdGlvbih0KXt2YXIgcj1lLl9mdWxsTGF5b3V0LGg9ZS5fZnVsbERhdGFbby5pbmRleF07aWYoIWUuX2RyYWdnaW5nJiYhMSE9PXIuaG92ZXJtb2RlKXt2YXIgZj1oLmhvdmVyaW5mbztpZihBcnJheS5pc0FycmF5KGYpJiYoZj1pLmNhc3RIb3ZlcmluZm8oe2hvdmVyaW5mbzpbYy5jYXN0T3B0aW9uKGYsdC5wdHMpXSxfbW9kdWxlOm8uX21vZHVsZX0sciwwKSksXCJhbGxcIj09PWYmJihmPVwibGFiZWwrdGV4dCt2YWx1ZStwZXJjZW50K25hbWVcIiksaC5ob3ZlcnRlbXBsYXRlfHxcIm5vbmVcIiE9PWYmJlwic2tpcFwiIT09ZiYmZil7dmFyIHA9dC5ySW5zY3JpYmVkLGQ9cyt0LnB4bWlkWzBdKigxLXApLGc9bCt0LnB4bWlkWzFdKigxLXApLHY9ci5zZXBhcmF0b3JzLG09W107aWYoZiYmLTEhPT1mLmluZGV4T2YoXCJsYWJlbFwiKSYmbS5wdXNoKHQubGFiZWwpLHQudGV4dD1jLmNhc3RPcHRpb24oaC5ob3ZlcnRleHR8fGgudGV4dCx0LnB0cyksZiYmLTEhPT1mLmluZGV4T2YoXCJ0ZXh0XCIpKXt2YXIgeT10LnRleHQ7eSYmbS5wdXNoKHkpfXQudmFsdWU9dC52LHQudmFsdWVMYWJlbD1jLmZvcm1hdFBpZVZhbHVlKHQudix2KSxmJiYtMSE9PWYuaW5kZXhPZihcInZhbHVlXCIpJiZtLnB1c2godC52YWx1ZUxhYmVsKSx0LnBlcmNlbnQ9dC52L2EudlRvdGFsLHQucGVyY2VudExhYmVsPWMuZm9ybWF0UGllUGVyY2VudCh0LnBlcmNlbnQsdiksZiYmLTEhPT1mLmluZGV4T2YoXCJwZXJjZW50XCIpJiZtLnB1c2godC5wZXJjZW50TGFiZWwpO3ZhciB4PWguaG92ZXJsYWJlbCxiPXguZm9udDtpLmxvbmVIb3Zlcih7dHJhY2U6byx4MDpkLXAqYS5yLHgxOmQrcCphLnIseTpnLHRleHQ6bS5qb2luKFwiPGJyPlwiKSxuYW1lOmguaG92ZXJ0ZW1wbGF0ZXx8LTEhPT1mLmluZGV4T2YoXCJuYW1lXCIpP2gubmFtZTp2b2lkIDAsaWRlYWxBbGlnbjp0LnB4bWlkWzBdPDA/XCJsZWZ0XCI6XCJyaWdodFwiLGNvbG9yOmMuY2FzdE9wdGlvbih4LmJnY29sb3IsdC5wdHMpfHx0LmNvbG9yLGJvcmRlckNvbG9yOmMuY2FzdE9wdGlvbih4LmJvcmRlcmNvbG9yLHQucHRzKSxmb250RmFtaWx5OmMuY2FzdE9wdGlvbihiLmZhbWlseSx0LnB0cyksZm9udFNpemU6Yy5jYXN0T3B0aW9uKGIuc2l6ZSx0LnB0cyksZm9udENvbG9yOmMuY2FzdE9wdGlvbihiLmNvbG9yLHQucHRzKSxuYW1lTGVuZ3RoOmMuY2FzdE9wdGlvbih4Lm5hbWVsZW5ndGgsdC5wdHMpLHRleHRBbGlnbjpjLmNhc3RPcHRpb24oeC5hbGlnbix0LnB0cyksaG92ZXJ0ZW1wbGF0ZTpjLmNhc3RPcHRpb24oaC5ob3ZlcnRlbXBsYXRlLHQucHRzKSxob3ZlcnRlbXBsYXRlTGFiZWxzOnQsZXZlbnREYXRhOlt1KHQsaCldfSx7Y29udGFpbmVyOnIuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOnIuX3BhcGVyLm5vZGUoKSxnZDplfSksby5faGFzSG92ZXJMYWJlbD0hMH1vLl9oYXNIb3ZlckV2ZW50PSEwLGUuZW1pdChcInBsb3RseV9ob3ZlclwiLHtwb2ludHM6W3UodCxoKV0sZXZlbnQ6bi5ldmVudH0pfX0pLHQub24oXCJtb3VzZW91dFwiLGZ1bmN0aW9uKHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQsYT1lLl9mdWxsRGF0YVtvLmluZGV4XSxzPW4uc2VsZWN0KHRoaXMpLmRhdHVtKCk7by5faGFzSG92ZXJFdmVudCYmKHQub3JpZ2luYWxFdmVudD1uLmV2ZW50LGUuZW1pdChcInBsb3RseV91bmhvdmVyXCIse3BvaW50czpbdShzLGEpXSxldmVudDpuLmV2ZW50fSksby5faGFzSG92ZXJFdmVudD0hMSksby5faGFzSG92ZXJMYWJlbCYmKGkubG9uZVVuaG92ZXIoci5faG92ZXJsYXllci5ub2RlKCkpLG8uX2hhc0hvdmVyTGFiZWw9ITEpfSksdC5vbihcImNsaWNrXCIsZnVuY3Rpb24odCl7dmFyIHI9ZS5fZnVsbExheW91dCxhPWUuX2Z1bGxEYXRhW28uaW5kZXhdO2UuX2RyYWdnaW5nfHwhMT09PXIuaG92ZXJtb2RlfHwoZS5faG92ZXJkYXRhPVt1KHQsYSldLGkuY2xpY2soZSxuLmV2ZW50KSl9KX1mdW5jdGlvbiBmKHQsZSxyKXt2YXIgbj1NYXRoLnNxcnQodC53aWR0aCp0LndpZHRoK3QuaGVpZ2h0KnQuaGVpZ2h0KSxpPXQud2lkdGgvdC5oZWlnaHQsYT1lLmhhbGZhbmdsZSxvPWUucmluZyxzPWUuckluc2NyaWJlZCxsPXIucnx8ZS5ycHgxLGM9e3NjYWxlOnMqbCoyL24sckNlbnRlcjoxLXMscm90YXRlOjB9O2lmKGMuc2NhbGU+PTEpcmV0dXJuIGM7dmFyIHU9aSsxLygyKk1hdGgudGFuKGEpKSxoPWwqTWF0aC5taW4oMS8oTWF0aC5zcXJ0KHUqdSsuNSkrdSksby8oTWF0aC5zcXJ0KGkqaStvLzIpK2kpKSxmPXtzY2FsZToyKmgvdC5oZWlnaHQsckNlbnRlcjpNYXRoLmNvcyhoL2wpLWgqaS9sLHJvdGF0ZTooMTgwL01hdGguUEkqZS5taWRhbmdsZSs3MjApJTE4MC05MH0scD0xL2ksZD1wKzEvKDIqTWF0aC50YW4oYSkpLGc9bCpNYXRoLm1pbigxLyhNYXRoLnNxcnQoZCpkKy41KStkKSxvLyhNYXRoLnNxcnQocCpwK28vMikrcCkpLHY9e3NjYWxlOjIqZy90LndpZHRoLHJDZW50ZXI6TWF0aC5jb3MoZy9sKS1nL2kvbCxyb3RhdGU6KDE4MC9NYXRoLlBJKmUubWlkYW5nbGUrODEwKSUxODAtOTB9LG09di5zY2FsZT5mLnNjYWxlP3Y6ZjtyZXR1cm4gYy5zY2FsZTwxJiZtLnNjYWxlPmMuc2NhbGU/bTpjfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gdC52IT09ZS52VG90YWx8fGUudHJhY2UuaG9sZT9NYXRoLm1pbigxLygxKzEvTWF0aC5zaW4odC5oYWxmYW5nbGUpKSx0LnJpbmcvMik6MX1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9ZS5weG1pZFswXSxuPWUucHhtaWRbMV0saT10LndpZHRoLzIsYT10LmhlaWdodC8yO3JldHVybiByPDAmJihpKj0tMSksbjwwJiYoYSo9LTEpLHtzY2FsZToxLHJDZW50ZXI6MSxyb3RhdGU6MCx4OmkrTWF0aC5hYnMoYSkqKGk+MD8xOi0xKS8yLHk6YS8oMStyKnIvKG4qbikpLG91dHNpZGU6ITB9fWZ1bmN0aW9uIGcodCxlKXt2YXIgcj10LnRyYWNlLG49ZS5oKihyLmRvbWFpbi55WzFdLXIuZG9tYWluLnlbMF0pO3JldHVybiBNYXRoLm1pbih0LnRpdGxlQm94LmhlaWdodCxuLzIpfWZ1bmN0aW9uIHYodCl7dmFyIGUscj10LnB1bGw7aWYoQXJyYXkuaXNBcnJheShyKSlmb3Iocj0wLGU9MDtlPHQucHVsbC5sZW5ndGg7ZSsrKXQucHVsbFtlXT5yJiYocj10LnB1bGxbZV0pO3JldHVybiByfWUuZXhwb3J0cz17cGxvdDpmdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQ7IWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG4saT1lLl9mdWxsTGF5b3V0LGE9MDthPHQubGVuZ3RoO2ErKylpZihyPXRbYV1bMF0sKG49ci50cmFjZSkudGl0bGUudGV4dCl7dmFyIGM9aS5tZXRhP3MudGVtcGxhdGVTdHJpbmcobi50aXRsZS50ZXh0LHttZXRhOmkubWV0YX0pOm4udGl0bGUudGV4dCx1PW8udGVzdGVyLmFwcGVuZChcInRleHRcIikuYXR0cihcImRhdGEtbm90ZXhcIiwxKS50ZXh0KGMpLmNhbGwoby5mb250LG4udGl0bGUuZm9udCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyxlKSxoPW8uYkJveCh1Lm5vZGUoKSwhMCk7ci50aXRsZUJveD17d2lkdGg6aC53aWR0aCxoZWlnaHQ6aC5oZWlnaHR9LHUucmVtb3ZlKCl9fShlLHQpLGZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxzLGwsYyx1LGg9W107Zm9yKGk9MDtpPHQubGVuZ3RoO2krKylvPXRbaV1bMF0scz1vLnRyYWNlLHI9ZS53KihzLmRvbWFpbi54WzFdLXMuZG9tYWluLnhbMF0pLG49ZS5oKihzLmRvbWFpbi55WzFdLXMuZG9tYWluLnlbMF0pLHMudGl0bGUudGV4dCYmXCJtaWRkbGUgY2VudGVyXCIhPT1zLnRpdGxlLnBvc2l0aW9uJiYobi09ZyhvLGUpKSxsPXYocyksby5yPU1hdGgubWluKHIsbikvKDIrMipsKSxvLmN4PWUubCtlLncqKHMuZG9tYWluLnhbMV0rcy5kb21haW4ueFswXSkvMixvLmN5PWUudCtlLmgqKDEtcy5kb21haW4ueVswXSktbi8yLHMudGl0bGUudGV4dCYmLTEhPT1zLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoXCJib3R0b21cIikmJihvLmN5LT1nKG8sZSkpLHMuc2NhbGVncm91cCYmLTE9PT1oLmluZGV4T2Yocy5zY2FsZWdyb3VwKSYmaC5wdXNoKHMuc2NhbGVncm91cCk7Zm9yKGE9MDthPGgubGVuZ3RoO2ErKyl7Zm9yKHU9MS8wLGM9aFthXSxpPTA7aTx0Lmxlbmd0aDtpKyspKG89dFtpXVswXSkudHJhY2Uuc2NhbGVncm91cD09PWMmJih1PU1hdGgubWluKHUsby5yKm8uci9vLnZUb3RhbCkpO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspKG89dFtpXVswXSkudHJhY2Uuc2NhbGVncm91cD09PWMmJihvLnI9TWF0aC5zcXJ0KHUqby52VG90YWwpKX19KGUsci5fc2l6ZSk7dmFyIGk9cy5tYWtlVHJhY2VHcm91cHMoci5fcGllbGF5ZXIsZSxcInRyYWNlXCIpLmVhY2goZnVuY3Rpb24oZSl7dmFyIGk9bi5zZWxlY3QodGhpcyksdT1lWzBdLG09dS50cmFjZTshZnVuY3Rpb24odCl7dmFyIGUscixuLGk9dFswXSxhPWkudHJhY2Usbz1hLnJvdGF0aW9uKk1hdGguUEkvMTgwLHM9MipNYXRoLlBJL2kudlRvdGFsLGw9XCJweDBcIixjPVwicHgxXCI7aWYoXCJjb3VudGVyY2xvY2t3aXNlXCI9PT1hLmRpcmVjdGlvbil7Zm9yKGU9MDtlPHQubGVuZ3RoJiZ0W2VdLmhpZGRlbjtlKyspO2lmKGU9PT10Lmxlbmd0aClyZXR1cm47bys9cyp0W2VdLnYscyo9LTEsbD1cInB4MVwiLGM9XCJweDBcIn1mdW5jdGlvbiB1KHQpe3JldHVybltpLnIqTWF0aC5zaW4odCksLWkucipNYXRoLmNvcyh0KV19Zm9yKG49dShvKSxlPTA7ZTx0Lmxlbmd0aDtlKyspKHI9dFtlXSkuaGlkZGVufHwocltsXT1uLG8rPXMqci52LzIsci5weG1pZD11KG8pLHIubWlkYW5nbGU9byxvKz1zKnIudi8yLG49dShvKSxyW2NdPW4sci5sYXJnZUFyYz1yLnY+aS52VG90YWwvMj8xOjAsci5oYWxmYW5nbGU9TWF0aC5QSSpNYXRoLm1pbihyLnYvaS52VG90YWwsLjUpLHIucmluZz0xLWEuaG9sZSxyLnJJbnNjcmliZWQ9cChyLGkpKX0oZSksaS5hdHRyKFwic3Ryb2tlLWxpbmVqb2luXCIsXCJyb3VuZFwiKSxpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoXCJnLnNsaWNlXCIpLmRhdGEoZSk7aS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcInNsaWNlXCIsITApLGkuZXhpdCgpLnJlbW92ZSgpO3ZhciBwPVtbW10sW11dLFtbXSxbXV1dLHk9ITE7aS5lYWNoKGZ1bmN0aW9uKHIpe2lmKHIuaGlkZGVuKW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbChcInBhdGgsZ1wiKS5yZW1vdmUoKTtlbHNle3IucG9pbnROdW1iZXI9ci5pLHIuY3VydmVOdW1iZXI9bS5pbmRleCxwW3IucHhtaWRbMV08MD8wOjFdW3IucHhtaWRbMF08MD8wOjFdLnB1c2gocik7dmFyIGk9dS5jeCxnPXUuY3ksdj1uLnNlbGVjdCh0aGlzKSx4PXYuc2VsZWN0QWxsKFwicGF0aC5zdXJmYWNlXCIpLmRhdGEoW3JdKTtpZih4LmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5jbGFzc2VkKFwic3VyZmFjZVwiLCEwKS5zdHlsZSh7XCJwb2ludGVyLWV2ZW50c1wiOlwiYWxsXCJ9KSx2LmNhbGwoaCx0LGUpLG0ucHVsbCl7dmFyIGI9K2MuY2FzdE9wdGlvbihtLnB1bGwsci5wdHMpfHwwO2I+MCYmKGkrPWIqci5weG1pZFswXSxnKz1iKnIucHhtaWRbMV0pfXIuY3hGaW5hbD1pLHIuY3lGaW5hbD1nO3ZhciBfPW0uaG9sZTtpZihyLnY9PT11LnZUb3RhbCl7dmFyIHc9XCJNXCIrKGkrci5weDBbMF0pK1wiLFwiKyhnK3IucHgwWzFdKStTKHIucHgwLHIucHhtaWQsITAsMSkrUyhyLnB4bWlkLHIucHgwLCEwLDEpK1wiWlwiO18/eC5hdHRyKFwiZFwiLFwiTVwiKyhpK18qci5weDBbMF0pK1wiLFwiKyhnK18qci5weDBbMV0pK1Moci5weDAsci5weG1pZCwhMSxfKStTKHIucHhtaWQsci5weDAsITEsXykrXCJaXCIrdyk6eC5hdHRyKFwiZFwiLHcpfWVsc2V7dmFyIGs9UyhyLnB4MCxyLnB4MSwhMCwxKTtpZihfKXt2YXIgQT0xLV87eC5hdHRyKFwiZFwiLFwiTVwiKyhpK18qci5weDFbMF0pK1wiLFwiKyhnK18qci5weDFbMV0pK1Moci5weDEsci5weDAsITEsXykrXCJsXCIrQSpyLnB4MFswXStcIixcIitBKnIucHgwWzFdK2srXCJaXCIpfWVsc2UgeC5hdHRyKFwiZFwiLFwiTVwiK2krXCIsXCIrZytcImxcIityLnB4MFswXStcIixcIityLnB4MFsxXStrK1wiWlwiKX12YXIgVD1jLmNhc3RPcHRpb24obS50ZXh0cG9zaXRpb24sci5wdHMpLE09di5zZWxlY3RBbGwoXCJnLnNsaWNldGV4dFwiKS5kYXRhKHIudGV4dCYmXCJub25lXCIhPT1UP1swXTpbXSk7TS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcInNsaWNldGV4dFwiLCEwKSxNLmV4aXQoKS5yZW1vdmUoKSxNLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1zLmVuc3VyZVNpbmdsZShuLnNlbGVjdCh0aGlzKSxcInRleHRcIixcIlwiLGZ1bmN0aW9uKHQpe3QuYXR0cihcImRhdGEtbm90ZXhcIiwxKX0pO2UudGV4dChyLnRleHQpLmF0dHIoe2NsYXNzOlwic2xpY2V0ZXh0XCIsdHJhbnNmb3JtOlwiXCIsXCJ0ZXh0LWFuY2hvclwiOlwibWlkZGxlXCJ9KS5jYWxsKG8uZm9udCxcIm91dHNpZGVcIj09PVQ/ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWMuY2FzdE9wdGlvbih0Lm91dHNpZGV0ZXh0Zm9udC5jb2xvcixlLnB0cyl8fGMuY2FzdE9wdGlvbih0LnRleHRmb250LmNvbG9yLGUucHRzKXx8ci5jb2xvcixpPWMuY2FzdE9wdGlvbih0Lm91dHNpZGV0ZXh0Zm9udC5mYW1pbHksZS5wdHMpfHxjLmNhc3RPcHRpb24odC50ZXh0Zm9udC5mYW1pbHksZS5wdHMpfHxyLmZhbWlseSxhPWMuY2FzdE9wdGlvbih0Lm91dHNpZGV0ZXh0Zm9udC5zaXplLGUucHRzKXx8Yy5jYXN0T3B0aW9uKHQudGV4dGZvbnQuc2l6ZSxlLnB0cyl8fHIuc2l6ZTtyZXR1cm57Y29sb3I6bixmYW1pbHk6aSxzaXplOmF9fShtLHIsdC5fZnVsbExheW91dC5mb250KTpmdW5jdGlvbih0LGUscil7dmFyIG49Yy5jYXN0T3B0aW9uKHQuaW5zaWRldGV4dGZvbnQuY29sb3IsZS5wdHMpOyFuJiZ0Ll9pbnB1dC50ZXh0Zm9udCYmKG49Yy5jYXN0T3B0aW9uKHQuX2lucHV0LnRleHRmb250LmNvbG9yLGUucHRzKSk7dmFyIGk9Yy5jYXN0T3B0aW9uKHQuaW5zaWRldGV4dGZvbnQuZmFtaWx5LGUucHRzKXx8Yy5jYXN0T3B0aW9uKHQudGV4dGZvbnQuZmFtaWx5LGUucHRzKXx8ci5mYW1pbHksbz1jLmNhc3RPcHRpb24odC5pbnNpZGV0ZXh0Zm9udC5zaXplLGUucHRzKXx8Yy5jYXN0T3B0aW9uKHQudGV4dGZvbnQuc2l6ZSxlLnB0cyl8fHIuc2l6ZTtyZXR1cm57Y29sb3I6bnx8YS5jb250cmFzdChlLmNvbG9yKSxmYW1pbHk6aSxzaXplOm99fShtLHIsdC5fZnVsbExheW91dC5mb250KSkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyx0KTt2YXIgaCxwPW8uYkJveChlLm5vZGUoKSk7XCJvdXRzaWRlXCI9PT1UP2g9ZChwLHIpOihoPWYocCxyLHUpLFwiYXV0b1wiPT09VCYmaC5zY2FsZTwxJiYoZS5jYWxsKG8uZm9udCxtLm91dHNpZGV0ZXh0Zm9udCksbS5vdXRzaWRldGV4dGZvbnQuZmFtaWx5PT09bS5pbnNpZGV0ZXh0Zm9udC5mYW1pbHkmJm0ub3V0c2lkZXRleHRmb250LnNpemU9PT1tLmluc2lkZXRleHRmb250LnNpemV8fChwPW8uYkJveChlLm5vZGUoKSkpLGg9ZChwLHIpKSk7dmFyIHY9aStyLnB4bWlkWzBdKmguckNlbnRlcisoaC54fHwwKSx4PWcrci5weG1pZFsxXSpoLnJDZW50ZXIrKGgueXx8MCk7aC5vdXRzaWRlJiYoci55TGFiZWxNaW49eC1wLmhlaWdodC8yLHIueUxhYmVsTWlkPXgsci55TGFiZWxNYXg9eCtwLmhlaWdodC8yLHIubGFiZWxFeHRyYVg9MCxyLmxhYmVsRXh0cmFZPTAseT0hMCksZS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrditcIixcIit4K1wiKVwiKyhoLnNjYWxlPDE/XCJzY2FsZShcIitoLnNjYWxlK1wiKVwiOlwiXCIpKyhoLnJvdGF0ZT9cInJvdGF0ZShcIitoLnJvdGF0ZStcIilcIjpcIlwiKStcInRyYW5zbGF0ZShcIistKHAubGVmdCtwLnJpZ2h0KS8yK1wiLFwiKy0ocC50b3ArcC5ib3R0b20pLzIrXCIpXCIpfSl9ZnVuY3Rpb24gUyh0LGUsbixpKXtyZXR1cm5cImFcIitpKnUucitcIixcIitpKnUucitcIiAwIFwiK3IubGFyZ2VBcmMrKG4/XCIgMSBcIjpcIiAwIFwiKStpKihlWzBdLXRbMF0pK1wiLFwiK2kqKGVbMV0tdFsxXSl9fSk7dmFyIHg9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKFwiZy50aXRsZXRleHRcIikuZGF0YShtLnRpdGxlLnRleHQ/WzBdOltdKTt4LmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwidGl0bGV0ZXh0XCIsITApLHguZXhpdCgpLnJlbW92ZSgpLHguZWFjaChmdW5jdGlvbigpe3ZhciBlLGk9cy5lbnN1cmVTaW5nbGUobi5zZWxlY3QodGhpcyksXCJ0ZXh0XCIsXCJcIixmdW5jdGlvbih0KXt0LmF0dHIoXCJkYXRhLW5vdGV4XCIsMSl9KSxhPXIubWV0YT9zLnRlbXBsYXRlU3RyaW5nKG0udGl0bGUudGV4dCx7bWV0YTpyLm1ldGF9KTptLnRpdGxlLnRleHQ7aS50ZXh0KGEpLmF0dHIoe2NsYXNzOlwidGl0bGV0ZXh0XCIsdHJhbnNmb3JtOlwiXCIsXCJ0ZXh0LWFuY2hvclwiOlwibWlkZGxlXCJ9KS5jYWxsKG8uZm9udCxtLnRpdGxlLmZvbnQpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsdCksZT1cIm1pZGRsZSBjZW50ZXJcIj09PW0udGl0bGUucG9zaXRpb24/ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQudGl0bGVCb3gud2lkdGgqdC50aXRsZUJveC53aWR0aCt0LnRpdGxlQm94LmhlaWdodCp0LnRpdGxlQm94LmhlaWdodCk7cmV0dXJue3g6dC5jeCx5OnQuY3ksc2NhbGU6dC50cmFjZS5ob2xlKnQucioyL2UsdHg6MCx0eTotdC50aXRsZUJveC5oZWlnaHQvMit0LnRyYWNlLnRpdGxlLmZvbnQuc2l6ZX19KHUpOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPTEsYT0xLG89dC50cmFjZSxzPXt4OnQuY3gseTp0LmN5fSxsPXt0eDowLHR5OjB9O3JldHVybiBsLnR5Kz1vLnRpdGxlLmZvbnQuc2l6ZSxuPXYobyksLTEhPT1vLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoXCJ0b3BcIik/KHMueS09KDErbikqdC5yLGwudHktPXQudGl0bGVCb3guaGVpZ2h0KTotMSE9PW8udGl0bGUucG9zaXRpb24uaW5kZXhPZihcImJvdHRvbVwiKSYmKHMueSs9KDErbikqdC5yKSwtMSE9PW8udGl0bGUucG9zaXRpb24uaW5kZXhPZihcImxlZnRcIik/KHI9ZS53KihvLmRvbWFpbi54WzFdLW8uZG9tYWluLnhbMF0pLzIrdC5yLHMueC09KDErbikqdC5yLGwudHgrPXQudGl0bGVCb3gud2lkdGgvMik6LTEhPT1vLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoXCJjZW50ZXJcIik/cj1lLncqKG8uZG9tYWluLnhbMV0tby5kb21haW4ueFswXSk6LTEhPT1vLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoXCJyaWdodFwiKSYmKHI9ZS53KihvLmRvbWFpbi54WzFdLW8uZG9tYWluLnhbMF0pLzIrdC5yLHMueCs9KDErbikqdC5yLGwudHgtPXQudGl0bGVCb3gud2lkdGgvMiksaT1yL3QudGl0bGVCb3gud2lkdGgsYT1nKHQsZSkvdC50aXRsZUJveC5oZWlnaHQse3g6cy54LHk6cy55LHNjYWxlOk1hdGgubWluKGksYSksdHg6bC50eCx0eTpsLnR5fX0odSxyLl9zaXplKSxpLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIitlLngrXCIsXCIrZS55K1wiKVwiKyhlLnNjYWxlPDE/XCJzY2FsZShcIitlLnNjYWxlK1wiKVwiOlwiXCIpK1widHJhbnNsYXRlKFwiK2UudHgrXCIsXCIrZS50eStcIilcIil9KSx5JiZmdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyxsLHUsaCxmLHAsZCxnO2Z1bmN0aW9uIHYodCxlKXtyZXR1cm4gdC5weG1pZFsxXS1lLnB4bWlkWzFdfWZ1bmN0aW9uIG0odCxlKXtyZXR1cm4gZS5weG1pZFsxXS10LnB4bWlkWzFdfWZ1bmN0aW9uIHkodCxyKXtyfHwocj17fSk7dmFyIGksdSxoLHAsZCxnLHY9ci5sYWJlbEV4dHJhWSsobj9yLnlMYWJlbE1heDpyLnlMYWJlbE1pbiksbT1uP3QueUxhYmVsTWluOnQueUxhYmVsTWF4LHk9bj90LnlMYWJlbE1heDp0LnlMYWJlbE1pbix4PXQuY3lGaW5hbCtvKHQucHgwWzFdLHQucHgxWzFdKSxiPXYtbTtpZihiKmw+MCYmKHQubGFiZWxFeHRyYVk9YiksQXJyYXkuaXNBcnJheShlLnB1bGwpKWZvcih1PTA7dTxmLmxlbmd0aDt1KyspKGg9Zlt1XSk9PT10fHwoYy5jYXN0T3B0aW9uKGUucHVsbCx0LnB0cyl8fDApPj0oYy5jYXN0T3B0aW9uKGUucHVsbCxoLnB0cyl8fDApfHwoKHQucHhtaWRbMV0taC5weG1pZFsxXSkqbD4wPyhwPWguY3lGaW5hbCtvKGgucHgwWzFdLGgucHgxWzFdKSwoYj1wLW0tdC5sYWJlbEV4dHJhWSkqbD4wJiYodC5sYWJlbEV4dHJhWSs9YikpOih5K3QubGFiZWxFeHRyYVkteCkqbD4wJiYoaT0zKnMqTWF0aC5hYnModS1mLmluZGV4T2YodCkpLGQ9aC5jeEZpbmFsK2EoaC5weDBbMF0saC5weDFbMF0pLChnPWQraS0odC5jeEZpbmFsK3QucHhtaWRbMF0pLXQubGFiZWxFeHRyYVgpKnM+MCYmKHQubGFiZWxFeHRyYVgrPWcpKSl9Zm9yKG49MDtuPDI7bisrKWZvcihpPW4/djptLG89bj9NYXRoLm1heDpNYXRoLm1pbixsPW4/MTotMSxyPTA7cjwyO3IrKyl7Zm9yKGE9cj9NYXRoLm1heDpNYXRoLm1pbixzPXI/MTotMSwodT10W25dW3JdKS5zb3J0KGkpLGg9dFsxLW5dW3JdLGY9aC5jb25jYXQodSksZD1bXSxwPTA7cDx1Lmxlbmd0aDtwKyspdm9pZCAwIT09dVtwXS55TGFiZWxNaWQmJmQucHVzaCh1W3BdKTtmb3IoZz0hMSxwPTA7biYmcDxoLmxlbmd0aDtwKyspaWYodm9pZCAwIT09aFtwXS55TGFiZWxNaWQpe2c9aFtwXTticmVha31mb3IocD0wO3A8ZC5sZW5ndGg7cCsrKXt2YXIgeD1wJiZkW3AtMV07ZyYmIXAmJih4PWcpLHkoZFtwXSx4KX19fShwLG0pLGZ1bmN0aW9uKHQsZSl7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHQubGFiZWxFeHRyYVh8fHQubGFiZWxFeHRyYVkpe3ZhciBpPXIuc2VsZWN0KFwiZy5zbGljZXRleHQgdGV4dFwiKTtpLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIit0LmxhYmVsRXh0cmFYK1wiLFwiK3QubGFiZWxFeHRyYVkrXCIpXCIraS5hdHRyKFwidHJhbnNmb3JtXCIpKTt2YXIgbz10LmN4RmluYWwrdC5weG1pZFswXSxsPXQuY3lGaW5hbCt0LnB4bWlkWzFdLGM9XCJNXCIrbytcIixcIitsLHU9KHQueUxhYmVsTWF4LXQueUxhYmVsTWluKSoodC5weG1pZFswXTwwPy0xOjEpLzQ7aWYodC5sYWJlbEV4dHJhWCl7dmFyIGg9dC5sYWJlbEV4dHJhWCp0LnB4bWlkWzFdL3QucHhtaWRbMF0sZj10LnlMYWJlbE1pZCt0LmxhYmVsRXh0cmFZLSh0LmN5RmluYWwrdC5weG1pZFsxXSk7TWF0aC5hYnMoaCk+TWF0aC5hYnMoZik/Yys9XCJsXCIrZip0LnB4bWlkWzBdL3QucHhtaWRbMV0rXCIsXCIrZitcIkhcIisobyt0LmxhYmVsRXh0cmFYK3UpOmMrPVwibFwiK3QubGFiZWxFeHRyYVgrXCIsXCIraCtcInZcIisoZi1oKStcImhcIit1fWVsc2UgYys9XCJWXCIrKHQueUxhYmVsTWlkK3QubGFiZWxFeHRyYVkpK1wiaFwiK3U7cy5lbnN1cmVTaW5nbGUocixcInBhdGhcIixcInRleHRsaW5lXCIpLmNhbGwoYS5zdHJva2UsZS5vdXRzaWRldGV4dGZvbnQuY29sb3IpLmF0dHIoe1wic3Ryb2tlLXdpZHRoXCI6TWF0aC5taW4oMixlLm91dHNpZGV0ZXh0Zm9udC5zaXplLzgpLGQ6YyxmaWxsOlwibm9uZVwifSl9ZWxzZSByLnNlbGVjdChcInBhdGgudGV4dGxpbmVcIikucmVtb3ZlKCl9KX0oaSxtKX0pfSk7c2V0VGltZW91dChmdW5jdGlvbigpe2kuc2VsZWN0QWxsKFwidHNwYW5cIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO3QuYXR0cihcImR5XCIpJiZ0LmF0dHIoXCJkeVwiLHQuYXR0cihcImR5XCIpKX0pfSwwKX0sdHJhbnNmb3JtSW5zaWRlVGV4dDpmfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIjo3MjUsXCIuL2V2ZW50X2RhdGFcIjoxMDMwLFwiLi9oZWxwZXJzXCI6MTAzMSxkMzoxNTV9XSwxMDM2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4vc3R5bGVfb25lXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt0Ll9mdWxsTGF5b3V0Ll9waWVsYXllci5zZWxlY3RBbGwoXCIudHJhY2VcIikuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9bi5zZWxlY3QodGhpcyk7ci5zdHlsZSh7b3BhY2l0eTplLm9wYWNpdHl9KSxyLnNlbGVjdEFsbChcInBhdGguc3VyZmFjZVwiKS5lYWNoKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmNhbGwoaSx0LGUpfSl9KX19LHtcIi4vc3R5bGVfb25lXCI6MTAzNyxkMzoxNTV9XSwxMDM3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksaT10KFwiLi9oZWxwZXJzXCIpLmNhc3RPcHRpb247ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1yLm1hcmtlci5saW5lLG89aShhLmNvbG9yLGUucHRzKXx8bi5kZWZhdWx0TGluZSxzPWkoYS53aWR0aCxlLnB0cyl8fDA7dC5zdHlsZShcInN0cm9rZS13aWR0aFwiLHMpLmNhbGwobi5maWxsLGUuY29sb3IpLmNhbGwobi5zdHJva2Usbyl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi9oZWxwZXJzXCI6MTAzMX1dLDEwMzg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz17eDpuLngseTpuLnkseHk6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGluZGljZXM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHhib3VuZHM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHlib3VuZHM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHRleHQ6bi50ZXh0LG1hcmtlcjp7Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGFycmF5T2s6ITEsZWRpdFR5cGU6XCJjYWxjXCJ9LG9wYWNpdHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjEsYXJyYXlPazohMSxlZGl0VHlwZTpcImNhbGNcIn0sYmxlbmQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDpudWxsLGVkaXRUeXBlOlwiY2FsY1wifSxzaXplbWluOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOi4xLG1heDoyLGRmbHQ6LjUsZWRpdFR5cGU6XCJjYWxjXCJ9LHNpemVtYXg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46LjEsZGZsdDoyMCxlZGl0VHlwZTpcImNhbGNcIn0sYm9yZGVyOntjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsYXJyYXlPazohMSxlZGl0VHlwZTpcImNhbGNcIn0sYXJlYXJhdGlvOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LHRyYW5zZm9ybXM6dm9pZCAwfX0se1wiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCI6MTA1Mn1dLDEwMzk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2wtcG9pbnRjbG91ZDJkXCIpLGk9dChcIi4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIiksYT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZVwiKS5maW5kRXh0cmVtZXMsbz10KFwiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3JcIik7ZnVuY3Rpb24gcyh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMudHlwZT1cInBvaW50Y2xvdWRcIix0aGlzLnBpY2tYRGF0YT1bXSx0aGlzLnBpY2tZRGF0YT1bXSx0aGlzLnhEYXRhPVtdLHRoaXMueURhdGE9W10sdGhpcy50ZXh0TGFiZWxzPVtdLHRoaXMuY29sb3I9XCJyZ2IoMCwgMCwgMClcIix0aGlzLm5hbWU9XCJcIix0aGlzLmhvdmVyaW5mbz1cImFsbFwiLHRoaXMuaWRUb0luZGV4PW5ldyBJbnQzMkFycmF5KDApLHRoaXMuYm91bmRzPVswLDAsMCwwXSx0aGlzLnBvaW50Y2xvdWRPcHRpb25zPXtwb3NpdGlvbnM6bmV3IEZsb2F0MzJBcnJheSgwKSxpZFRvSW5kZXg6dGhpcy5pZFRvSW5kZXgsc2l6ZW1pbjouNSxzaXplbWF4OjEyLGNvbG9yOlswLDAsMCwxXSxhcmVhUmF0aW86MSxib3JkZXJDb2xvcjpbMCwwLDAsMV19LHRoaXMucG9pbnRjbG91ZD1uKHQuZ2xwbG90LHRoaXMucG9pbnRjbG91ZE9wdGlvbnMpLHRoaXMucG9pbnRjbG91ZC5fdHJhY2U9dGhpc312YXIgbD1zLnByb3RvdHlwZTtsLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pZFRvSW5kZXhbdC5wb2ludElkXTtyZXR1cm57dHJhY2U6dGhpcyxkYXRhQ29vcmQ6dC5kYXRhQ29vcmQsdHJhY2VDb29yZDp0aGlzLnBpY2tYWURhdGE/W3RoaXMucGlja1hZRGF0YVsyKmVdLHRoaXMucGlja1hZRGF0YVsyKmUrMV1dOlt0aGlzLnBpY2tYRGF0YVtlXSx0aGlzLnBpY2tZRGF0YVtlXV0sdGV4dExhYmVsOkFycmF5LmlzQXJyYXkodGhpcy50ZXh0TGFiZWxzKT90aGlzLnRleHRMYWJlbHNbZV06dGhpcy50ZXh0TGFiZWxzLGNvbG9yOnRoaXMuY29sb3IsbmFtZTp0aGlzLm5hbWUscG9pbnRJbmRleDplLGhvdmVyaW5mbzp0aGlzLmhvdmVyaW5mb319LGwudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuaW5kZXg9dC5pbmRleCx0aGlzLnRleHRMYWJlbHM9dC50ZXh0LHRoaXMubmFtZT10Lm5hbWUsdGhpcy5ob3ZlcmluZm89dC5ob3ZlcmluZm8sdGhpcy5ib3VuZHM9WzEvMCwxLzAsLTEvMCwtMS8wXSx0aGlzLnVwZGF0ZUZhc3QodCksdGhpcy5jb2xvcj1vKHQse30pfSxsLnVwZGF0ZUZhc3Q9ZnVuY3Rpb24odCl7dmFyIGUscixuLG8scyxsLGM9dGhpcy54RGF0YT10aGlzLnBpY2tYRGF0YT10LngsdT10aGlzLnlEYXRhPXRoaXMucGlja1lEYXRhPXQueSxoPXRoaXMucGlja1hZRGF0YT10Lnh5LGY9dC54Ym91bmRzJiZ0Lnlib3VuZHMscD10LmluZGljZXMsZD10aGlzLmJvdW5kcztpZihoKXtpZihuPWgsZT1oLmxlbmd0aD4+PjEsZilkWzBdPXQueGJvdW5kc1swXSxkWzJdPXQueGJvdW5kc1sxXSxkWzFdPXQueWJvdW5kc1swXSxkWzNdPXQueWJvdW5kc1sxXTtlbHNlIGZvcihsPTA7bDxlO2wrKylvPW5bMipsXSxzPW5bMipsKzFdLG88ZFswXSYmKGRbMF09byksbz5kWzJdJiYoZFsyXT1vKSxzPGRbMV0mJihkWzFdPXMpLHM+ZFszXSYmKGRbM109cyk7aWYocClyPXA7ZWxzZSBmb3Iocj1uZXcgSW50MzJBcnJheShlKSxsPTA7bDxlO2wrKylyW2xdPWx9ZWxzZSBmb3IoZT1jLmxlbmd0aCxuPW5ldyBGbG9hdDMyQXJyYXkoMiplKSxyPW5ldyBJbnQzMkFycmF5KGUpLGw9MDtsPGU7bCsrKW89Y1tsXSxzPXVbbF0scltsXT1sLG5bMipsXT1vLG5bMipsKzFdPXMsbzxkWzBdJiYoZFswXT1vKSxvPmRbMl0mJihkWzJdPW8pLHM8ZFsxXSYmKGRbMV09cykscz5kWzNdJiYoZFszXT1zKTt0aGlzLmlkVG9JbmRleD1yLHRoaXMucG9pbnRjbG91ZE9wdGlvbnMuaWRUb0luZGV4PXIsdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5wb3NpdGlvbnM9bjt2YXIgZz1pKHQubWFya2VyLmNvbG9yKSx2PWkodC5tYXJrZXIuYm9yZGVyLmNvbG9yKSxtPXQub3BhY2l0eSp0Lm1hcmtlci5vcGFjaXR5O2dbM10qPW0sdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5jb2xvcj1nO3ZhciB5PXQubWFya2VyLmJsZW5kO2lmKG51bGw9PT15KXt5PWMubGVuZ3RoPDEwMHx8dS5sZW5ndGg8MTAwfXRoaXMucG9pbnRjbG91ZE9wdGlvbnMuYmxlbmQ9eSx2WzNdKj1tLHRoaXMucG9pbnRjbG91ZE9wdGlvbnMuYm9yZGVyQ29sb3I9djt2YXIgeD10Lm1hcmtlci5zaXplbWluLGI9TWF0aC5tYXgodC5tYXJrZXIuc2l6ZW1heCx0Lm1hcmtlci5zaXplbWluKTt0aGlzLnBvaW50Y2xvdWRPcHRpb25zLnNpemVNaW49eCx0aGlzLnBvaW50Y2xvdWRPcHRpb25zLnNpemVNYXg9Yix0aGlzLnBvaW50Y2xvdWRPcHRpb25zLmFyZWFSYXRpbz10Lm1hcmtlci5ib3JkZXIuYXJlYXJhdGlvLHRoaXMucG9pbnRjbG91ZC51cGRhdGUodGhpcy5wb2ludGNsb3VkT3B0aW9ucyk7dmFyIF89dGhpcy5zY2VuZS54YXhpcyx3PXRoaXMuc2NlbmUueWF4aXMsaz1iLzJ8fC41O3QuX2V4dHJlbWVzW18uX2lkXT1hKF8sW2RbMF0sZFsyXV0se3BwYWQ6a30pLHQuX2V4dHJlbWVzW3cuX2lkXT1hKHcsW2RbMV0sZFszXV0se3BwYWQ6a30pfSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnBvaW50Y2xvdWQuZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgcyh0LGUudWlkKTtyZXR1cm4gci51cGRhdGUoZSkscn19LHtcIi4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIjo3MjQsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlXCI6NzQ4LFwiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3JcIjoxMDYyLFwiZ2wtcG9pbnRjbG91ZDJkXCI6Mjg5fV0sMTA0MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gYShyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfWEoXCJ4XCIpLGEoXCJ5XCIpLGEoXCJ4Ym91bmRzXCIpLGEoXCJ5Ym91bmRzXCIpLHQueHkmJnQueHkgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkmJihlLnh5PXQueHkpLHQuaW5kaWNlcyYmdC5pbmRpY2VzIGluc3RhbmNlb2YgSW50MzJBcnJheSYmKGUuaW5kaWNlcz10LmluZGljZXMpLGEoXCJ0ZXh0XCIpLGEoXCJtYXJrZXIuY29sb3JcIixyKSxhKFwibWFya2VyLm9wYWNpdHlcIiksYShcIm1hcmtlci5ibGVuZFwiKSxhKFwibWFya2VyLnNpemVtaW5cIiksYShcIm1hcmtlci5zaXplbWF4XCIpLGEoXCJtYXJrZXIuYm9yZGVyLmNvbG9yXCIsciksYShcIm1hcmtlci5ib3JkZXIuYXJlYXJhdGlvXCIpLGUuX2xlbmd0aD1udWxsfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi9hdHRyaWJ1dGVzXCI6MTAzOH1dLDEwNDE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLG4uY2FsYz10KFwiLi4vc2NhdHRlcjNkL2NhbGNcIiksbi5wbG90PXQoXCIuL2NvbnZlcnRcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJwb2ludGNsb3VkXCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvZ2wyZFwiKSxuLmNhdGVnb3JpZXM9W1wiZ2xcIixcImdsMmRcIixcInNob3dMZWdlbmRcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9nbDJkXCI6Nzg3LFwiLi4vc2NhdHRlcjNkL2NhbGNcIjoxMDgwLFwiLi9hdHRyaWJ1dGVzXCI6MTAzOCxcIi4vY29udmVydFwiOjEwMzksXCIuL2RlZmF1bHRzXCI6MTA0MH1dLDEwNDI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvZngvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9wbG90cy9kb21haW5cIikuYXR0cmlidXRlcyxsPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxjPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSx1PXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLnRlbXBsYXRlZEFycmF5LGg9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxmPXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsOyhlLmV4cG9ydHM9Zih7aG92ZXJpbmZvOmgoe30saS5ob3ZlcmluZm8se2ZsYWdzOltdLGFycmF5T2s6ITF9KSxob3ZlcmxhYmVsOm8uaG92ZXJsYWJlbCxkb21haW46cyh7bmFtZTpcInNhbmtleVwiLHRyYWNlOiEwfSksb3JpZW50YXRpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInZcIixcImhcIl0sZGZsdDpcImhcIn0sdmFsdWVmb3JtYXQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiLjNzXCJ9LHZhbHVlc3VmZml4Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwifSxhcnJhbmdlbWVudDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wic25hcFwiLFwicGVycGVuZGljdWxhclwiLFwiZnJlZWZvcm1cIixcImZpeGVkXCJdLGRmbHQ6XCJzbmFwXCJ9LHRleHRmb250Om4oe30pLG5vZGU6e2xhYmVsOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGRmbHQ6W119LGdyb3Vwczp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixpbXBsaWVkRWRpdHM6e3g6W10seTpbXX0sZGltZW5zaW9uczoyLGZyZWVMZW5ndGg6ITAsZGZsdDpbXSxpdGVtczp7dmFsVHlwZTpcIm51bWJlclwiLGVkaXRUeXBlOlwiY2FsY1wifX0seDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixkZmx0OltdfSx5Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGRmbHQ6W119LGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixhcnJheU9rOiEwfSxsaW5lOntjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDphLmRlZmF1bHRMaW5lLGFycmF5T2s6ITB9LHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDouNSxhcnJheU9rOiEwfX0scGFkOnt2YWxUeXBlOlwibnVtYmVyXCIsYXJyYXlPazohMSxtaW46MCxkZmx0OjIwfSx0aGlja25lc3M6e3ZhbFR5cGU6XCJudW1iZXJcIixhcnJheU9rOiExLG1pbjoxLGRmbHQ6MjB9LGhvdmVyaW5mbzp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYWxsXCIsXCJub25lXCIsXCJza2lwXCJdLGRmbHQ6XCJhbGxcIn0saG92ZXJsYWJlbDpvLmhvdmVybGFiZWwsaG92ZXJ0ZW1wbGF0ZTpsKHt9LHtrZXlzOltcInZhbHVlXCIsXCJsYWJlbFwiXX0pfSxsaW5rOntsYWJlbDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixkZmx0OltdfSxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsYXJyYXlPazohMH0sbGluZTp7Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6YS5kZWZhdWx0TGluZSxhcnJheU9rOiEwfSx3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MCxhcnJheU9rOiEwfX0sc291cmNlOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGRmbHQ6W119LHRhcmdldDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixkZmx0OltdfSx2YWx1ZTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixkZmx0OltdfSxob3ZlcmluZm86e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImFsbFwiLFwibm9uZVwiLFwic2tpcFwiXSxkZmx0OlwiYWxsXCJ9LGhvdmVybGFiZWw6by5ob3ZlcmxhYmVsLGhvdmVydGVtcGxhdGU6bCh7fSx7a2V5czpbXCJ2YWx1ZVwiLFwibGFiZWxcIl19KSxjb2xvcnNjYWxlczp1KFwiY29uY2VudHJhdGlvbnNjYWxlc1wiLHtlZGl0VHlwZTpcImNhbGNcIixsYWJlbDp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwiY2FsY1wiLGRmbHQ6XCJcIn0sY21heDp7dmFsVHlwZTpcIm51bWJlclwiLGVkaXRUeXBlOlwiY2FsY1wiLGRmbHQ6MX0sY21pbjp7dmFsVHlwZTpcIm51bWJlclwiLGVkaXRUeXBlOlwiY2FsY1wiLGRmbHQ6MH0sY29sb3JzY2FsZTpoKGMoKS5jb2xvcnNjYWxlLHtkZmx0OltbMCxcIndoaXRlXCJdLFsxLFwiYmxhY2tcIl1dfSl9KX19LFwiY2FsY1wiLFwibmVzdGVkXCIpKS50cmFuc2Zvcm1zPXZvaWQgMH0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzXCI6NTc3LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIjo1ODUsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXNcIjo2MDgsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDYsXCIuLi8uLi9wbG90cy9kb21haW5cIjo3NzQsXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIjo3NzV9XSwxMDQzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGwsaT10KFwiLi4vLi4vcGxvdHMvZ2V0X2RhdGFcIikuZ2V0TW9kdWxlQ2FsY0RhdGEsYT10KFwiLi9wbG90XCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvZngvbGF5b3V0X2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vbGliL3NldGN1cnNvclwiKSxsPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50XCIpLGM9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZWxlY3RcIikucHJlcFNlbGVjdCx1PXQoXCIuLi8uLi9saWJcIiksaD10KFwiLi4vLi4vcmVnaXN0cnlcIik7ZnVuY3Rpb24gZih0LGUpe3ZhciByPXQuX2Z1bGxEYXRhW2VdLG49dC5fZnVsbExheW91dCxpPW4uZHJhZ21vZGUsYT1cInBhblwiPT09bi5kcmFnbW9kZT9cIm1vdmVcIjpcImNyb3NzaGFpclwiLG89ci5fYmdSZWN0O2lmKFwicGFuXCIhPT1pJiZcInpvb21cIiE9PWkpe3MobyxhKTt2YXIgZj17X2lkOlwieFwiLGMycDp1LmlkZW50aXR5LF9vZmZzZXQ6ci5fc2Fua2V5LnRyYW5zbGF0ZVgsX2xlbmd0aDpyLl9zYW5rZXkud2lkdGh9LHA9e19pZDpcInlcIixjMnA6dS5pZGVudGl0eSxfb2Zmc2V0OnIuX3NhbmtleS50cmFuc2xhdGVZLF9sZW5ndGg6ci5fc2Fua2V5LmhlaWdodH0sZD17Z2Q6dCxlbGVtZW50Om8ubm9kZSgpLHBsb3RpbmZvOntpZDplLHhheGlzOmYseWF4aXM6cCxmaWxsUmFuZ2VJdGVtczp1Lm5vb3B9LHN1YnBsb3Q6ZSx4YXhlczpbZl0seWF4ZXM6W3BdLGRvbmVGbkNvbXBsZXRlZDpmdW5jdGlvbihyKXt2YXIgbixpPXQuX2Z1bGxEYXRhW2VdLGE9aS5ub2RlLmdyb3Vwcy5zbGljZSgpLG89W107ZnVuY3Rpb24gcyh0KXtmb3IodmFyIGU9aS5fc2Fua2V5LmdyYXBoLm5vZGVzLHI9MDtyPGUubGVuZ3RoO3IrKylpZihlW3JdLnBvaW50TnVtYmVyPT09dClyZXR1cm4gZVtyXX1mb3IodmFyIGw9MDtsPHIubGVuZ3RoO2wrKyl7dmFyIGM9cyhyW2xdLnBvaW50TnVtYmVyKTtpZihjKWlmKGMuZ3JvdXApe2Zvcih2YXIgdT0wO3U8Yy5jaGlsZHJlbk5vZGVzLmxlbmd0aDt1Kyspby5wdXNoKGMuY2hpbGRyZW5Ob2Rlc1t1XS5wb2ludE51bWJlcik7YVtjLnBvaW50TnVtYmVyLWkubm9kZS5fY291bnRdPSExfWVsc2Ugby5wdXNoKGMucG9pbnROdW1iZXIpfW49YS5maWx0ZXIoQm9vbGVhbikuY29uY2F0KFtvXSksaC5jYWxsKFwiX2d1aVJlc3R5bGVcIix0LHtcIm5vZGUuZ3JvdXBzXCI6W25dfSxlKX0scHJlcEZuOmZ1bmN0aW9uKHQsZSxyKXtjKHQsZSxyLGQsaSl9fTtsLmluaXQoZCl9fXIubmFtZT1cInNhbmtleVwiLHIuYmFzZUxheW91dEF0dHJPdmVycmlkZXM9bih7aG92ZXJsYWJlbDpvLmhvdmVybGFiZWx9LFwicGxvdFwiLFwibmVzdGVkXCIpLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT1pKHQuY2FsY2RhdGEsXCJzYW5rZXlcIilbMF07YSh0LGUpLHIudXBkYXRlRngodCl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5faGFzJiZuLl9oYXMoXCJzYW5rZXlcIiksYT1lLl9oYXMmJmUuX2hhcyhcInNhbmtleVwiKTtpJiYhYSYmKG4uX3BhcGVyZGl2LnNlbGVjdEFsbChcIi5zYW5rZXlcIikucmVtb3ZlKCksbi5fcGFwZXJkaXYuc2VsZWN0QWxsKFwiLmJnc2Fua2V5XCIpLnJlbW92ZSgpKX0sci51cGRhdGVGeD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQuX2Z1bGxEYXRhLmxlbmd0aDtlKyspZih0LGUpfX0se1wiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudFwiOjU5NixcIi4uLy4uL2NvbXBvbmVudHMvZngvbGF5b3V0X2F0dHJpYnV0ZXNcIjo2MTgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvc2V0Y3Vyc29yXCI6NzIxLFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZWxlY3RcIjo3NjYsXCIuLi8uLi9wbG90cy9nZXRfZGF0YVwiOjc4NCxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9wbG90XCI6MTA0OH1dLDEwNDQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwic3Ryb25nbHktY29ubmVjdGVkLWNvbXBvbmVudHNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL2xpYi9ndXBcIikud3JhcCxvPWkuaXNBcnJheU9yVHlwZWRBcnJheSxzPWkuaXNJbmRleCxsPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGVcIik7ZnVuY3Rpb24gYyh0KXt2YXIgZSxyPXQubm9kZSxhPXQubGluayxjPVtdLHU9byhhLmNvbG9yKSxoPXt9LGY9e30scD1hLmNvbG9yc2NhbGVzLmxlbmd0aDtmb3IoZT0wO2U8cDtlKyspe3ZhciBkPWEuY29sb3JzY2FsZXNbZV0sZz1sLmV4dHJhY3RTY2FsZShkLHtjTGV0dGVyOlwiY1wifSksdj1sLm1ha2VDb2xvclNjYWxlRnVuYyhnKTtmW2QubGFiZWxdPXZ9dmFyIG09MDtmb3IoZT0wO2U8YS52YWx1ZS5sZW5ndGg7ZSsrKWEuc291cmNlW2VdPm0mJihtPWEuc291cmNlW2VdKSxhLnRhcmdldFtlXT5tJiYobT1hLnRhcmdldFtlXSk7dmFyIHkseD1tKzE7dC5ub2RlLl9jb3VudD14O3ZhciBiPXQubm9kZS5ncm91cHMsXz17fTtmb3IoZT0wO2U8Yi5sZW5ndGg7ZSsrKXt2YXIgdz1iW2VdO2Zvcih5PTA7eTx3Lmxlbmd0aDt5Kyspe3ZhciBrPXdbeV0sQT14K2U7Xy5oYXNPd25Qcm9wZXJ0eShrKT9pLndhcm4oXCJOb2RlIFwiK2srXCIgaXMgYWxyZWFkeSBwYXJ0IG9mIGEgZ3JvdXAuXCIpOl9ba109QX19dmFyIFQ9e3NvdXJjZTpbXSx0YXJnZXQ6W119O2ZvcihlPTA7ZTxhLnZhbHVlLmxlbmd0aDtlKyspe3ZhciBNPWEudmFsdWVbZV0sUz1hLnNvdXJjZVtlXSxFPWEudGFyZ2V0W2VdO2lmKE0+MCYmcyhTLHgpJiZzKEUseCkmJighXy5oYXNPd25Qcm9wZXJ0eShTKXx8IV8uaGFzT3duUHJvcGVydHkoRSl8fF9bU10hPT1fW0VdKSl7Xy5oYXNPd25Qcm9wZXJ0eShFKSYmKEU9X1tFXSksXy5oYXNPd25Qcm9wZXJ0eShTKSYmKFM9X1tTXSksRT0rRSxoW1M9K1NdPWhbRV09ITA7dmFyIEM9XCJcIjthLmxhYmVsJiZhLmxhYmVsW2VdJiYoQz1hLmxhYmVsW2VdKTt2YXIgTD1udWxsO0MmJmYuaGFzT3duUHJvcGVydHkoQykmJihMPWZbQ10pLGMucHVzaCh7cG9pbnROdW1iZXI6ZSxsYWJlbDpDLGNvbG9yOnU/YS5jb2xvcltlXTphLmNvbG9yLGNvbmNlbnRyYXRpb25zY2FsZTpMLHNvdXJjZTpTLHRhcmdldDpFLHZhbHVlOitNfSksVC5zb3VyY2UucHVzaChTKSxULnRhcmdldC5wdXNoKEUpfX12YXIgej14K2IubGVuZ3RoLE89byhyLmNvbG9yKSxJPVtdO2ZvcihlPTA7ZTx6O2UrKylpZihoW2VdKXt2YXIgRD1yLmxhYmVsW2VdO0kucHVzaCh7Z3JvdXA6ZT54LTEsY2hpbGRyZW5Ob2RlczpbXSxwb2ludE51bWJlcjplLGxhYmVsOkQsY29sb3I6Tz9yLmNvbG9yW2VdOnIuY29sb3J9KX12YXIgUD0hMTtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgYT1pLmluaXQyZEFycmF5KHQsMCksbz0wO288TWF0aC5taW4oZS5sZW5ndGgsci5sZW5ndGgpO28rKylpZihpLmlzSW5kZXgoZVtvXSx0KSYmaS5pc0luZGV4KHJbb10sdCkpe2lmKGVbb109PT1yW29dKXJldHVybiEwO2FbZVtvXV0ucHVzaChyW29dKX1yZXR1cm4gbihhKS5jb21wb25lbnRzLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RoPjF9KX0oeixULnNvdXJjZSxULnRhcmdldCkmJihQPSEwKSx7Y2lyY3VsYXI6UCxsaW5rczpjLG5vZGVzOkksZ3JvdXBzOmIsZ3JvdXBMb29rdXA6X319ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9YyhlKTtyZXR1cm4gYSh7Y2lyY3VsYXI6ci5jaXJjdWxhcixfbm9kZXM6ci5ub2RlcyxfbGlua3M6ci5saW5rcyxfZ3JvdXBzOnIuZ3JvdXBzLF9ncm91cExvb2t1cDpyLmdyb3VwTG9va3VwfSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGVcIjo1OTAsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvZ3VwXCI6Njk5LFwic3Ryb25nbHktY29ubmVjdGVkLWNvbXBvbmVudHNcIjo1MTV9XSwxMDQ1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtub2RlVGV4dE9mZnNldEhvcml6b250YWw6NCxub2RlVGV4dE9mZnNldFZlcnRpY2FsOjMsbm9kZVBhZEFjcm9zczoxMCxzYW5rZXlJdGVyYXRpb25zOjUwLGZvcmNlSXRlcmF0aW9uczo1LGZvcmNlVGlja3NQZXJGcmFtZToxMCxkdXJhdGlvbjo1MDAsZWFzZTpcImxpbmVhclwiLGNuOntzYW5rZXk6XCJzYW5rZXlcIixzYW5rZXlMaW5rczpcInNhbmtleS1saW5rc1wiLHNhbmtleUxpbms6XCJzYW5rZXktbGlua1wiLHNhbmtleU5vZGVTZXQ6XCJzYW5rZXktbm9kZS1zZXRcIixzYW5rZXlOb2RlOlwic2Fua2V5LW5vZGVcIixub2RlUmVjdDpcIm5vZGUtcmVjdFwiLG5vZGVDYXB0dXJlOlwibm9kZS1jYXB0dXJlXCIsbm9kZUNlbnRlcmVkOlwibm9kZS1lbnRlcmVkXCIsbm9kZUxhYmVsR3VpZGU6XCJub2RlLWxhYmVsLWd1aWRlXCIsbm9kZUxhYmVsOlwibm9kZS1sYWJlbFwiLG5vZGVMYWJlbFRleHRQYXRoOlwibm9kZS1sYWJlbC10ZXh0LXBhdGhcIn19fSx7fV0sMTA0NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksbz10KFwidGlueWNvbG9yMlwiKSxzPXQoXCIuLi8uLi9wbG90cy9kb21haW5cIikuZGVmYXVsdHMsbD10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcmxhYmVsX2RlZmF1bHRzXCIpLGM9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIiksdT10KFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCIpO2Z1bmN0aW9uIGgodCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLmxpbmsuY29sb3JzY2FsZXMscixhKX1yKFwibGFiZWxcIikscihcImNtaW5cIikscihcImNtYXhcIikscihcImNvbG9yc2NhbGVcIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYpe2Z1bmN0aW9uIHAocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX12YXIgZD1uLmV4dGVuZERlZXAoZi5ob3ZlcmxhYmVsLHQuaG92ZXJsYWJlbCksZz10Lm5vZGUsdj1jLm5ld0NvbnRhaW5lcihlLFwibm9kZVwiKTtmdW5jdGlvbiBtKHQsZSl7cmV0dXJuIG4uY29lcmNlKGcsdixpLm5vZGUsdCxlKX1tKFwibGFiZWxcIiksbShcImdyb3Vwc1wiKSxtKFwieFwiKSxtKFwieVwiKSxtKFwicGFkXCIpLG0oXCJ0aGlja25lc3NcIiksbShcImxpbmUuY29sb3JcIiksbShcImxpbmUud2lkdGhcIiksbShcImhvdmVyaW5mb1wiLHQuaG92ZXJpbmZvKSxsKGcsdixtLGQpLG0oXCJob3ZlcnRlbXBsYXRlXCIpO3ZhciB5PWYuY29sb3J3YXk7bShcImNvbG9yXCIsdi5sYWJlbC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gYS5hZGRPcGFjaXR5KGZ1bmN0aW9uKHQpe3JldHVybiB5W3QleS5sZW5ndGhdfShlKSwuOCl9KSk7dmFyIHg9dC5saW5rfHx7fSxiPWMubmV3Q29udGFpbmVyKGUsXCJsaW5rXCIpO2Z1bmN0aW9uIF8odCxlKXtyZXR1cm4gbi5jb2VyY2UoeCxiLGkubGluayx0LGUpfV8oXCJsYWJlbFwiKSxfKFwic291cmNlXCIpLF8oXCJ0YXJnZXRcIiksXyhcInZhbHVlXCIpLF8oXCJsaW5lLmNvbG9yXCIpLF8oXCJsaW5lLndpZHRoXCIpLF8oXCJob3ZlcmluZm9cIix0LmhvdmVyaW5mbyksbCh4LGIsXyxkKSxfKFwiaG92ZXJ0ZW1wbGF0ZVwiKTt2YXIgdyxrPW8oZi5wYXBlcl9iZ2NvbG9yKS5nZXRMdW1pbmFuY2UoKTwuMzMzP1wicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpXCI6XCJyZ2JhKDAsIDAsIDAsIDAuMilcIjtfKFwiY29sb3JcIixuLnJlcGVhdChrLGIudmFsdWUubGVuZ3RoKSksdSh4LGIse25hbWU6XCJjb2xvcnNjYWxlc1wiLGhhbmRsZUl0ZW1EZWZhdWx0czpofSkscyhlLGYscCkscChcIm9yaWVudGF0aW9uXCIpLHAoXCJ2YWx1ZWZvcm1hdFwiKSxwKFwidmFsdWVzdWZmaXhcIiksdi54Lmxlbmd0aCYmdi55Lmxlbmd0aCYmKHc9XCJmcmVlZm9ybVwiKSxwKFwiYXJyYW5nZW1lbnRcIix3KSxuLmNvZXJjZUZvbnQocCxcInRleHRmb250XCIsbi5leHRlbmRGbGF0KHt9LGYuZm9udCkpLGUuX2xlbmd0aD1udWxsfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJsYWJlbF9kZWZhdWx0c1wiOjYxNSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIjo3NDUsXCIuLi8uLi9wbG90cy9kb21haW5cIjo3NzQsXCIuL2F0dHJpYnV0ZXNcIjoxMDQyLHRpbnljb2xvcjI6NTIyfV0sMTA0NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIiksbi5jYWxjPXQoXCIuL2NhbGNcIiksbi5wbG90PXQoXCIuL3Bsb3RcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJzYW5rZXlcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuL2Jhc2VfcGxvdFwiKSxuLnNlbGVjdFBvaW50cz10KFwiLi9zZWxlY3QuanNcIiksbi5jYXRlZ29yaWVzPVtcIm5vT3BhY2l0eVwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4vYXR0cmlidXRlc1wiOjEwNDIsXCIuL2Jhc2VfcGxvdFwiOjEwNDMsXCIuL2NhbGNcIjoxMDQ0LFwiLi9kZWZhdWx0c1wiOjEwNDYsXCIuL3Bsb3RcIjoxMDQ4LFwiLi9zZWxlY3QuanNcIjoxMDUwfV0sMTA0ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuL3JlbmRlclwiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4XCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIikscz10KFwiLi4vLi4vbGliXCIpLGw9dChcIi4vY29uc3RhbnRzXCIpLmNuLGM9cy5fO2Z1bmN0aW9uIHUodCl7cmV0dXJuXCJcIiE9PXR9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXk9PT1lLnRyYWNlSWR9KX1mdW5jdGlvbiBmKHQsZSl7bi5zZWxlY3QodCkuc2VsZWN0KFwicGF0aFwiKS5zdHlsZShcImZpbGwtb3BhY2l0eVwiLGUpLG4uc2VsZWN0KHQpLnNlbGVjdChcInJlY3RcIikuc3R5bGUoXCJmaWxsLW9wYWNpdHlcIixlKX1mdW5jdGlvbiBwKHQpe24uc2VsZWN0KHQpLnNlbGVjdChcInRleHQubmFtZVwiKS5zdHlsZShcImZpbGxcIixcImJsYWNrXCIpfWZ1bmN0aW9uIGQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi0xIT09dC5ub2RlLnNvdXJjZUxpbmtzLmluZGV4T2YoZS5saW5rKXx8LTEhPT10Lm5vZGUudGFyZ2V0TGlua3MuaW5kZXhPZihlLmxpbmspfX1mdW5jdGlvbiBnKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4tMSE9PWUubm9kZS5zb3VyY2VMaW5rcy5pbmRleE9mKHQubGluayl8fC0xIT09ZS5ub2RlLnRhcmdldExpbmtzLmluZGV4T2YodC5saW5rKX19ZnVuY3Rpb24gdih0LGUscil7ZSYmciYmaChyLGUpLnNlbGVjdEFsbChcIi5cIitsLnNhbmtleUxpbmspLmZpbHRlcihkKGUpKS5jYWxsKHkuYmluZCgwLGUsciwhMSkpfWZ1bmN0aW9uIG0odCxlLHIpe2UmJnImJmgocixlKS5zZWxlY3RBbGwoXCIuXCIrbC5zYW5rZXlMaW5rKS5maWx0ZXIoZChlKSkuY2FsbCh4LmJpbmQoMCxlLHIsITEpKX1mdW5jdGlvbiB5KHQsZSxyLG4pe3ZhciBpPW4uZGF0dW0oKS5saW5rLmxhYmVsO24uc3R5bGUoXCJmaWxsLW9wYWNpdHlcIixmdW5jdGlvbih0KXtpZighdC5saW5rLmNvbmNlbnRyYXRpb25zY2FsZSlyZXR1cm4uNH0pLGkmJmgoZSx0KS5zZWxlY3RBbGwoXCIuXCIrbC5zYW5rZXlMaW5rKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQubGluay5sYWJlbD09PWl9KS5zdHlsZShcImZpbGwtb3BhY2l0eVwiLGZ1bmN0aW9uKHQpe2lmKCF0LmxpbmsuY29uY2VudHJhdGlvbnNjYWxlKXJldHVybi40fSksciYmaChlLHQpLnNlbGVjdEFsbChcIi5cIitsLnNhbmtleU5vZGUpLmZpbHRlcihnKHQpKS5jYWxsKHYpfWZ1bmN0aW9uIHgodCxlLHIsbil7dmFyIGk9bi5kYXR1bSgpLmxpbmsubGFiZWw7bi5zdHlsZShcImZpbGwtb3BhY2l0eVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbnlDb2xvckFscGhhfSksaSYmaChlLHQpLnNlbGVjdEFsbChcIi5cIitsLnNhbmtleUxpbmspLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5rLmxhYmVsPT09aX0pLnN0eWxlKFwiZmlsbC1vcGFjaXR5XCIsZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9yQWxwaGF9KSxyJiZoKGUsdCkuc2VsZWN0QWxsKGwuc2Fua2V5Tm9kZSkuZmlsdGVyKGcodCkpLmNhbGwobSl9ZnVuY3Rpb24gYih0LGUpe3ZhciByPXQuaG92ZXJsYWJlbHx8e30sbj1zLm5lc3RlZFByb3BlcnR5KHIsZSkuZ2V0KCk7cmV0dXJuIUFycmF5LmlzQXJyYXkobikmJm59ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuX2Z1bGxMYXlvdXQscz1yLl9wYXBlcixoPXIuX3NpemUsZD0wO2Q8ZS5sZW5ndGg7ZCsrKWlmKCF0Ll9mdWxsRGF0YVtkXS5fdmlld0luaXRpYWwpe3ZhciBnPXQuX2Z1bGxEYXRhW2RdLm5vZGU7dC5fZnVsbERhdGFbZF0uX3ZpZXdJbml0aWFsPXtub2RlOntncm91cHM6Zy5ncm91cHMuc2xpY2UoKSx4OmcueC5zbGljZSgpLHk6Zy55LnNsaWNlKCl9fX12YXIgXz1jKHQsXCJzb3VyY2U6XCIpK1wiIFwiLHc9Yyh0LFwidGFyZ2V0OlwiKStcIiBcIixrPWModCxcImNvbmNlbnRyYXRpb246XCIpK1wiIFwiLEE9Yyh0LFwiaW5jb21pbmcgZmxvdyBjb3VudDpcIikrXCIgXCIsVD1jKHQsXCJvdXRnb2luZyBmbG93IGNvdW50OlwiKStcIiBcIjtpKHQscyxlLHt3aWR0aDpoLncsaGVpZ2h0OmguaCxtYXJnaW46e3Q6aC50LHI6aC5yLGI6aC5iLGw6aC5sfX0se2xpbmtFdmVudHM6e2hvdmVyOmZ1bmN0aW9uKGUscixpKXshMSE9PXQuX2Z1bGxMYXlvdXQuaG92ZXJtb2RlJiYobi5zZWxlY3QoZSkuY2FsbCh5LmJpbmQoMCxyLGksITApKSxcInNraXBcIiE9PXIubGluay50cmFjZS5saW5rLmhvdmVyaW5mbyYmKHIubGluay5mdWxsRGF0YT1yLmxpbmsudHJhY2UsdC5lbWl0KFwicGxvdGx5X2hvdmVyXCIse2V2ZW50Om4uZXZlbnQscG9pbnRzOltyLmxpbmtdfSkpKX0sZm9sbG93OmZ1bmN0aW9uKGUsaSl7aWYoITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSl7dmFyIHM9aS5saW5rLnRyYWNlLmxpbms7aWYoXCJub25lXCIhPT1zLmhvdmVyaW5mbyYmXCJza2lwXCIhPT1zLmhvdmVyaW5mbyl7Zm9yKHZhciBsPVtdLGM9MCxoPTA7aDxpLmZsb3cubGlua3MubGVuZ3RoO2grKyl7dmFyIGQ9aS5mbG93LmxpbmtzW2hdO2lmKFwiY2xvc2VzdFwiIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGV8fGkubGluay5wb2ludE51bWJlcj09PWQucG9pbnROdW1iZXIpe2kubGluay5wb2ludE51bWJlcj09PWQucG9pbnROdW1iZXImJihjPWgpLGQuZnVsbERhdGE9ZC50cmFjZSxzPWkubGluay50cmFjZS5saW5rO3ZhciBnPW0oZCksdj17dmFsdWVMYWJlbDpuLmZvcm1hdChpLnZhbHVlRm9ybWF0KShkLnZhbHVlKStpLnZhbHVlU3VmZml4fTtsLnB1c2goe3g6Z1swXSx5OmdbMV0sbmFtZTp2LnZhbHVlTGFiZWwsdGV4dDpbZC5sYWJlbHx8XCJcIixfK2Quc291cmNlLmxhYmVsLHcrZC50YXJnZXQubGFiZWwsZC5jb25jZW50cmF0aW9uc2NhbGU/aytuLmZvcm1hdChcIiUwLjJmXCIpKGQuZmxvdy5sYWJlbENvbmNlbnRyYXRpb24pOlwiXCJdLmZpbHRlcih1KS5qb2luKFwiPGJyPlwiKSxjb2xvcjpiKHMsXCJiZ2NvbG9yXCIpfHxvLmFkZE9wYWNpdHkoZC5jb2xvciwxKSxib3JkZXJDb2xvcjpiKHMsXCJib3JkZXJjb2xvclwiKSxmb250RmFtaWx5OmIocyxcImZvbnQuZmFtaWx5XCIpLGZvbnRTaXplOmIocyxcImZvbnQuc2l6ZVwiKSxmb250Q29sb3I6YihzLFwiZm9udC5jb2xvclwiKSxuYW1lTGVuZ3RoOmIocyxcIm5hbWVsZW5ndGhcIiksdGV4dEFsaWduOmIocyxcImFsaWduXCIpLGlkZWFsQWxpZ246bi5ldmVudC54PGdbMF0/XCJyaWdodFwiOlwibGVmdFwiLGhvdmVydGVtcGxhdGU6cy5ob3ZlcnRlbXBsYXRlLGhvdmVydGVtcGxhdGVMYWJlbHM6dixldmVudERhdGE6W2RdfSl9fWEubXVsdGlIb3ZlcnMobCx7Y29udGFpbmVyOnIuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOnIuX3BhcGVyLm5vZGUoKSxnZDp0LGFuY2hvckluZGV4OmN9KS5lYWNoKGZ1bmN0aW9uKCl7aS5saW5rLmNvbmNlbnRyYXRpb25zY2FsZXx8Zih0aGlzLC42NSkscCh0aGlzKX0pfX1mdW5jdGlvbiBtKHQpe3ZhciBlLHI7cmV0dXJuIHQuY2lyY3VsYXI/KGU9KHQuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0SW5uZXJFeHRlbnQrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQpLzIraS5wYXJlbnQudHJhbnNsYXRlWCxyPXQuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQraS5wYXJlbnQudHJhbnNsYXRlWSk6KGU9KHQuc291cmNlLngxK3QudGFyZ2V0LngwKS8yK2kucGFyZW50LnRyYW5zbGF0ZVgscj0odC55MCt0LnkxKS8yK2kucGFyZW50LnRyYW5zbGF0ZVkpLFtlLHJdfX0sdW5ob3ZlcjpmdW5jdGlvbihlLGksbyl7ITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSYmKG4uc2VsZWN0KGUpLmNhbGwoeC5iaW5kKDAsaSxvLCEwKSksXCJza2lwXCIhPT1pLmxpbmsudHJhY2UubGluay5ob3ZlcmluZm8mJihpLmxpbmsuZnVsbERhdGE9aS5saW5rLnRyYWNlLHQuZW1pdChcInBsb3RseV91bmhvdmVyXCIse2V2ZW50Om4uZXZlbnQscG9pbnRzOltpLmxpbmtdfSkpLGEubG9uZVVuaG92ZXIoci5faG92ZXJsYXllci5ub2RlKCkpKX0sc2VsZWN0OmZ1bmN0aW9uKGUscil7dmFyIGk9ci5saW5rO2kub3JpZ2luYWxFdmVudD1uLmV2ZW50LHQuX2hvdmVyZGF0YT1baV0sYS5jbGljayh0LHt0YXJnZXQ6ITB9KX19LG5vZGVFdmVudHM6e2hvdmVyOmZ1bmN0aW9uKGUscixpKXshMSE9PXQuX2Z1bGxMYXlvdXQuaG92ZXJtb2RlJiYobi5zZWxlY3QoZSkuY2FsbCh2LHIsaSksXCJza2lwXCIhPT1yLm5vZGUudHJhY2Uubm9kZS5ob3ZlcmluZm8mJihyLm5vZGUuZnVsbERhdGE9ci5ub2RlLnRyYWNlLHQuZW1pdChcInBsb3RseV9ob3ZlclwiLHtldmVudDpuLmV2ZW50LHBvaW50czpbci5ub2RlXX0pKSl9LGZvbGxvdzpmdW5jdGlvbihlLGkpe2lmKCExIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGUpe3ZhciBvPWkubm9kZS50cmFjZS5ub2RlO2lmKFwibm9uZVwiIT09by5ob3ZlcmluZm8mJlwic2tpcFwiIT09by5ob3ZlcmluZm8pe3ZhciBzPW4uc2VsZWN0KGUpLnNlbGVjdChcIi5cIitsLm5vZGVSZWN0KSxjPXQuX2Z1bGxMYXlvdXQuX3BhcGVyZGl2Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPXMubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQ9aC5sZWZ0LTItYy5sZWZ0LGc9aC5yaWdodCsyLWMubGVmdCx2PWgudG9wK2guaGVpZ2h0LzQtYy50b3AsbT17dmFsdWVMYWJlbDpuLmZvcm1hdChpLnZhbHVlRm9ybWF0KShpLm5vZGUudmFsdWUpK2kudmFsdWVTdWZmaXh9O2kubm9kZS5mdWxsRGF0YT1pLm5vZGUudHJhY2U7dmFyIHk9YS5sb25lSG92ZXIoe3gwOmQseDE6Zyx5OnYsbmFtZTpuLmZvcm1hdChpLnZhbHVlRm9ybWF0KShpLm5vZGUudmFsdWUpK2kudmFsdWVTdWZmaXgsdGV4dDpbaS5ub2RlLmxhYmVsLEEraS5ub2RlLnRhcmdldExpbmtzLmxlbmd0aCxUK2kubm9kZS5zb3VyY2VMaW5rcy5sZW5ndGhdLmZpbHRlcih1KS5qb2luKFwiPGJyPlwiKSxjb2xvcjpiKG8sXCJiZ2NvbG9yXCIpfHxpLnRpbnlDb2xvckh1ZSxib3JkZXJDb2xvcjpiKG8sXCJib3JkZXJjb2xvclwiKSxmb250RmFtaWx5OmIobyxcImZvbnQuZmFtaWx5XCIpLGZvbnRTaXplOmIobyxcImZvbnQuc2l6ZVwiKSxmb250Q29sb3I6YihvLFwiZm9udC5jb2xvclwiKSxuYW1lTGVuZ3RoOmIobyxcIm5hbWVsZW5ndGhcIiksdGV4dEFsaWduOmIobyxcImFsaWduXCIpLGlkZWFsQWxpZ246XCJsZWZ0XCIsaG92ZXJ0ZW1wbGF0ZTpvLmhvdmVydGVtcGxhdGUsaG92ZXJ0ZW1wbGF0ZUxhYmVsczptLGV2ZW50RGF0YTpbaS5ub2RlXX0se2NvbnRhaW5lcjpyLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpyLl9wYXBlci5ub2RlKCksZ2Q6dH0pO2YoeSwuODUpLHAoeSl9fX0sdW5ob3ZlcjpmdW5jdGlvbihlLGksbyl7ITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSYmKG4uc2VsZWN0KGUpLmNhbGwobSxpLG8pLFwic2tpcFwiIT09aS5ub2RlLnRyYWNlLm5vZGUuaG92ZXJpbmZvJiYoaS5ub2RlLmZ1bGxEYXRhPWkubm9kZS50cmFjZSx0LmVtaXQoXCJwbG90bHlfdW5ob3ZlclwiLHtldmVudDpuLmV2ZW50LHBvaW50czpbaS5ub2RlXX0pKSxhLmxvbmVVbmhvdmVyKHIuX2hvdmVybGF5ZXIubm9kZSgpKSl9LHNlbGVjdDpmdW5jdGlvbihlLHIsaSl7dmFyIG89ci5ub2RlO28ub3JpZ2luYWxFdmVudD1uLmV2ZW50LHQuX2hvdmVyZGF0YT1bb10sbi5zZWxlY3QoZSkuY2FsbChtLHIsaSksYS5jbGljayh0LHt0YXJnZXQ6ITB9KX19fSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4vY29uc3RhbnRzXCI6MTA0NSxcIi4vcmVuZGVyXCI6MTA0OSxkMzoxNTV9XSwxMDQ5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vY29uc3RhbnRzXCIpLGk9dChcImQzXCIpLGE9dChcInRpbnljb2xvcjJcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksbD10KFwiQHBsb3RseS9kMy1zYW5rZXlcIiksYz10KFwiZDMtc2Fua2V5LWNpcmN1bGFyXCIpLHU9dChcImQzLWZvcmNlXCIpLGg9dChcIi4uLy4uL2xpYlwiKSxmPXQoXCIuLi8uLi9saWIvZ3VwXCIpLHA9Zi5rZXlGdW4sZD1mLnJlcGVhdCxnPWYudW53cmFwLHY9dChcImQzLWludGVycG9sYXRlXCIpLmludGVycG9sYXRlTnVtYmVyLG09dChcIi4uLy4uL3JlZ2lzdHJ5XCIpO2Z1bmN0aW9uIHkoKXt2YXIgdD0uNTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoZS5saW5rLmNpcmN1bGFyKXJldHVybiByPWUubGluayxuPXIud2lkdGgvMixpPXIuY2lyY3VsYXJQYXRoRGF0YSxcInRvcFwiPT09ci5jaXJjdWxhckxpbmtUeXBlP1wiTSBcIitpLnRhcmdldFgrXCIgXCIrKGkudGFyZ2V0WStuKStcIiBMXCIraS5yaWdodElubmVyRXh0ZW50K1wiIFwiKyhpLnRhcmdldFkrbikrXCJBXCIrKGkucmlnaHRMYXJnZUFyY1JhZGl1cytuKStcIiBcIisoaS5yaWdodFNtYWxsQXJjUmFkaXVzK24pK1wiIDAgMCAxIFwiKyhpLnJpZ2h0RnVsbEV4dGVudC1uKStcIiBcIisoaS50YXJnZXRZLWkucmlnaHRTbWFsbEFyY1JhZGl1cykrXCJMXCIrKGkucmlnaHRGdWxsRXh0ZW50LW4pK1wiIFwiK2kudmVydGljYWxSaWdodElubmVyRXh0ZW50K1wiQVwiKyhpLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrbikrXCIgXCIrKGkucmlnaHRMYXJnZUFyY1JhZGl1cytuKStcIiAwIDAgMSBcIitpLnJpZ2h0SW5uZXJFeHRlbnQrXCIgXCIrKGkudmVydGljYWxGdWxsRXh0ZW50LW4pK1wiTFwiK2kubGVmdElubmVyRXh0ZW50K1wiIFwiKyhpLnZlcnRpY2FsRnVsbEV4dGVudC1uKStcIkFcIisoaS5sZWZ0TGFyZ2VBcmNSYWRpdXMrbikrXCIgXCIrKGkubGVmdExhcmdlQXJjUmFkaXVzK24pK1wiIDAgMCAxIFwiKyhpLmxlZnRGdWxsRXh0ZW50K24pK1wiIFwiK2kudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQrXCJMXCIrKGkubGVmdEZ1bGxFeHRlbnQrbikrXCIgXCIrKGkuc291cmNlWS1pLmxlZnRTbWFsbEFyY1JhZGl1cykrXCJBXCIrKGkubGVmdExhcmdlQXJjUmFkaXVzK24pK1wiIFwiKyhpLmxlZnRTbWFsbEFyY1JhZGl1cytuKStcIiAwIDAgMSBcIitpLmxlZnRJbm5lckV4dGVudCtcIiBcIisoaS5zb3VyY2VZK24pK1wiTFwiK2kuc291cmNlWCtcIiBcIisoaS5zb3VyY2VZK24pK1wiTFwiK2kuc291cmNlWCtcIiBcIisoaS5zb3VyY2VZLW4pK1wiTFwiK2kubGVmdElubmVyRXh0ZW50K1wiIFwiKyhpLnNvdXJjZVktbikrXCJBXCIrKGkubGVmdExhcmdlQXJjUmFkaXVzLW4pK1wiIFwiKyhpLmxlZnRTbWFsbEFyY1JhZGl1cy1uKStcIiAwIDAgMCBcIisoaS5sZWZ0RnVsbEV4dGVudC1uKStcIiBcIisoaS5zb3VyY2VZLWkubGVmdFNtYWxsQXJjUmFkaXVzKStcIkxcIisoaS5sZWZ0RnVsbEV4dGVudC1uKStcIiBcIitpLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50K1wiQVwiKyhpLmxlZnRMYXJnZUFyY1JhZGl1cy1uKStcIiBcIisoaS5sZWZ0TGFyZ2VBcmNSYWRpdXMtbikrXCIgMCAwIDAgXCIraS5sZWZ0SW5uZXJFeHRlbnQrXCIgXCIrKGkudmVydGljYWxGdWxsRXh0ZW50K24pK1wiTFwiK2kucmlnaHRJbm5lckV4dGVudCtcIiBcIisoaS52ZXJ0aWNhbEZ1bGxFeHRlbnQrbikrXCJBXCIrKGkucmlnaHRMYXJnZUFyY1JhZGl1cy1uKStcIiBcIisoaS5yaWdodExhcmdlQXJjUmFkaXVzLW4pK1wiIDAgMCAwIFwiKyhpLnJpZ2h0RnVsbEV4dGVudCtuKStcIiBcIitpLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudCtcIkxcIisoaS5yaWdodEZ1bGxFeHRlbnQrbikrXCIgXCIrKGkudGFyZ2V0WS1pLnJpZ2h0U21hbGxBcmNSYWRpdXMpK1wiQVwiKyhpLnJpZ2h0TGFyZ2VBcmNSYWRpdXMtbikrXCIgXCIrKGkucmlnaHRTbWFsbEFyY1JhZGl1cy1uKStcIiAwIDAgMCBcIitpLnJpZ2h0SW5uZXJFeHRlbnQrXCIgXCIrKGkudGFyZ2V0WS1uKStcIkxcIitpLnRhcmdldFgrXCIgXCIrKGkudGFyZ2V0WS1uKStcIlpcIjpcIk0gXCIraS50YXJnZXRYK1wiIFwiKyhpLnRhcmdldFktbikrXCIgTFwiK2kucmlnaHRJbm5lckV4dGVudCtcIiBcIisoaS50YXJnZXRZLW4pK1wiQVwiKyhpLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrbikrXCIgXCIrKGkucmlnaHRTbWFsbEFyY1JhZGl1cytuKStcIiAwIDAgMCBcIisoaS5yaWdodEZ1bGxFeHRlbnQtbikrXCIgXCIrKGkudGFyZ2V0WStpLnJpZ2h0U21hbGxBcmNSYWRpdXMpK1wiTFwiKyhpLnJpZ2h0RnVsbEV4dGVudC1uKStcIiBcIitpLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudCtcIkFcIisoaS5yaWdodExhcmdlQXJjUmFkaXVzK24pK1wiIFwiKyhpLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrbikrXCIgMCAwIDAgXCIraS5yaWdodElubmVyRXh0ZW50K1wiIFwiKyhpLnZlcnRpY2FsRnVsbEV4dGVudCtuKStcIkxcIitpLmxlZnRJbm5lckV4dGVudCtcIiBcIisoaS52ZXJ0aWNhbEZ1bGxFeHRlbnQrbikrXCJBXCIrKGkubGVmdExhcmdlQXJjUmFkaXVzK24pK1wiIFwiKyhpLmxlZnRMYXJnZUFyY1JhZGl1cytuKStcIiAwIDAgMCBcIisoaS5sZWZ0RnVsbEV4dGVudCtuKStcIiBcIitpLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50K1wiTFwiKyhpLmxlZnRGdWxsRXh0ZW50K24pK1wiIFwiKyhpLnNvdXJjZVkraS5sZWZ0U21hbGxBcmNSYWRpdXMpK1wiQVwiKyhpLmxlZnRMYXJnZUFyY1JhZGl1cytuKStcIiBcIisoaS5sZWZ0U21hbGxBcmNSYWRpdXMrbikrXCIgMCAwIDAgXCIraS5sZWZ0SW5uZXJFeHRlbnQrXCIgXCIrKGkuc291cmNlWS1uKStcIkxcIitpLnNvdXJjZVgrXCIgXCIrKGkuc291cmNlWS1uKStcIkxcIitpLnNvdXJjZVgrXCIgXCIrKGkuc291cmNlWStuKStcIkxcIitpLmxlZnRJbm5lckV4dGVudCtcIiBcIisoaS5zb3VyY2VZK24pK1wiQVwiKyhpLmxlZnRMYXJnZUFyY1JhZGl1cy1uKStcIiBcIisoaS5sZWZ0U21hbGxBcmNSYWRpdXMtbikrXCIgMCAwIDEgXCIrKGkubGVmdEZ1bGxFeHRlbnQtbikrXCIgXCIrKGkuc291cmNlWStpLmxlZnRTbWFsbEFyY1JhZGl1cykrXCJMXCIrKGkubGVmdEZ1bGxFeHRlbnQtbikrXCIgXCIraS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudCtcIkFcIisoaS5sZWZ0TGFyZ2VBcmNSYWRpdXMtbikrXCIgXCIrKGkubGVmdExhcmdlQXJjUmFkaXVzLW4pK1wiIDAgMCAxIFwiK2kubGVmdElubmVyRXh0ZW50K1wiIFwiKyhpLnZlcnRpY2FsRnVsbEV4dGVudC1uKStcIkxcIitpLnJpZ2h0SW5uZXJFeHRlbnQrXCIgXCIrKGkudmVydGljYWxGdWxsRXh0ZW50LW4pK1wiQVwiKyhpLnJpZ2h0TGFyZ2VBcmNSYWRpdXMtbikrXCIgXCIrKGkucmlnaHRMYXJnZUFyY1JhZGl1cy1uKStcIiAwIDAgMSBcIisoaS5yaWdodEZ1bGxFeHRlbnQrbikrXCIgXCIraS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQrXCJMXCIrKGkucmlnaHRGdWxsRXh0ZW50K24pK1wiIFwiKyhpLnRhcmdldFkraS5yaWdodFNtYWxsQXJjUmFkaXVzKStcIkFcIisoaS5yaWdodExhcmdlQXJjUmFkaXVzLW4pK1wiIFwiKyhpLnJpZ2h0U21hbGxBcmNSYWRpdXMtbikrXCIgMCAwIDEgXCIraS5yaWdodElubmVyRXh0ZW50K1wiIFwiKyhpLnRhcmdldFkrbikrXCJMXCIraS50YXJnZXRYK1wiIFwiKyhpLnRhcmdldFkrbikrXCJaXCI7dmFyIHIsbixpLGE9ZS5saW5rLnNvdXJjZS54MSxvPWUubGluay50YXJnZXQueDAscz12KGEsbyksbD1zKHQpLGM9cygxLXQpLHU9ZS5saW5rLnkwLWUubGluay53aWR0aC8yLGg9ZS5saW5rLnkwK2UubGluay53aWR0aC8yLGY9ZS5saW5rLnkxLWUubGluay53aWR0aC8yLHA9ZS5saW5rLnkxK2UubGluay53aWR0aC8yO3JldHVyblwiTVwiK2ErXCIsXCIrdStcIkNcIitsK1wiLFwiK3UrXCIgXCIrYytcIixcIitmK1wiIFwiK28rXCIsXCIrZitcIkxcIitvK1wiLFwiK3ArXCJDXCIrYytcIixcIitwK1wiIFwiK2wrXCIsXCIraCtcIiBcIithK1wiLFwiK2grXCJaXCJ9fWZ1bmN0aW9uIHgodCl7dC5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrdC5ub2RlLngwLnRvRml4ZWQoMykrXCIsIFwiK3Qubm9kZS55MC50b0ZpeGVkKDMpK1wiKVwifSl9ZnVuY3Rpb24gYih0KXt0LmNhbGwoeCl9ZnVuY3Rpb24gXyh0LGUpe3QuY2FsbChiKSxlLmF0dHIoXCJkXCIseSgpKX1mdW5jdGlvbiB3KHQpe3QuYXR0cihcIndpZHRoXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZS54MS10Lm5vZGUueDB9KS5hdHRyKFwiaGVpZ2h0XCIsZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZUhlaWdodH0pfWZ1bmN0aW9uIGsodCl7cmV0dXJuIHQubGluay53aWR0aD4xfHx0LmxpbmtMaW5lV2lkdGg+MH1mdW5jdGlvbiBBKHQpe3JldHVyblwidHJhbnNsYXRlKFwiK3QudHJhbnNsYXRlWCtcIixcIit0LnRyYW5zbGF0ZVkrXCIpXCIrKHQuaG9yaXpvbnRhbD9cIm1hdHJpeCgxIDAgMCAxIDAgMClcIjpcIm1hdHJpeCgwIDEgMSAwIDAgMClcIil9ZnVuY3Rpb24gVCh0KXtyZXR1cm5cInRyYW5zbGF0ZShcIisodC5ob3Jpem9udGFsPzA6dC5sYWJlbFkpK1wiIFwiKyh0Lmhvcml6b250YWw/dC5sYWJlbFk6MCkrXCIpXCJ9ZnVuY3Rpb24gTSh0KXtyZXR1cm4gaS5zdmcubGluZSgpKFtbdC5ob3Jpem9udGFsP3QubGVmdD8tdC5zaXplQWNyb3NzOnQudmlzaWJsZVdpZHRoK24ubm9kZVRleHRPZmZzZXRIb3Jpem9udGFsOm4ubm9kZVRleHRPZmZzZXRIb3Jpem9udGFsLDBdLFt0Lmhvcml6b250YWw/dC5sZWZ0Py1uLm5vZGVUZXh0T2Zmc2V0SG9yaXpvbnRhbDp0LnNpemVBY3Jvc3M6dC52aXNpYmxlSGVpZ2h0LW4ubm9kZVRleHRPZmZzZXRIb3Jpem9udGFsLDBdXSl9ZnVuY3Rpb24gUyh0KXtyZXR1cm4gdC5ob3Jpem9udGFsP1wibWF0cml4KDEgMCAwIDEgMCAwKVwiOlwibWF0cml4KDAgMSAxIDAgMCAwKVwifWZ1bmN0aW9uIEUodCl7cmV0dXJuIHQuaG9yaXpvbnRhbD9cInNjYWxlKDEgMSlcIjpcInNjYWxlKC0xIDEpXCJ9ZnVuY3Rpb24gQyh0KXtyZXR1cm4gdC5kYXJrQmFja2dyb3VuZCYmIXQuaG9yaXpvbnRhbD9cInJnYigyNTUsMjU1LDI1NSlcIjpcInJnYigwLDAsMClcIn1mdW5jdGlvbiBMKHQpe3JldHVybiB0Lmhvcml6b250YWwmJnQubGVmdD9cIjEwMCVcIjpcIjAlXCJ9ZnVuY3Rpb24geih0LGUscil7dC5vbihcIi5iYXNpY1wiLG51bGwpLm9uKFwibW91c2VvdmVyLmJhc2ljXCIsZnVuY3Rpb24odCl7dC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzfHx0LnBhcnRPZkdyb3VwfHwoci5ob3Zlcih0aGlzLHQsZSksdC5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQ9W3RoaXMsdF0pfSkub24oXCJtb3VzZW1vdmUuYmFzaWNcIixmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3N8fHQucGFydE9mR3JvdXB8fChyLmZvbGxvdyh0aGlzLHQpLHQuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkPVt0aGlzLHRdKX0pLm9uKFwibW91c2VvdXQuYmFzaWNcIixmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3N8fHQucGFydE9mR3JvdXB8fChyLnVuaG92ZXIodGhpcyx0LGUpLHQuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkPSExKX0pLm9uKFwiY2xpY2suYmFzaWNcIixmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZCYmKHIudW5ob3Zlcih0aGlzLHQsZSksdC5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQ9ITEpLHQuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzc3x8dC5wYXJ0T2ZHcm91cHx8ci5zZWxlY3QodGhpcyx0LGUpfSl9ZnVuY3Rpb24gTyh0LGUscixhKXt2YXIgbz1pLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oZnVuY3Rpb24odCl7cmV0dXJue3g6dC5ub2RlLngwK3QudmlzaWJsZVdpZHRoLzIseTp0Lm5vZGUueTArdC52aXNpYmxlSGVpZ2h0LzJ9fSkub24oXCJkcmFnc3RhcnRcIixmdW5jdGlvbihpKXtpZihcImZpeGVkXCIhPT1pLmFycmFuZ2VtZW50JiYoaC5lbnN1cmVTaW5nbGUoYS5fZnVsbExheW91dC5faW5mb2xheWVyLFwiZ1wiLFwiZHJhZ2NvdmVyXCIsZnVuY3Rpb24odCl7YS5fZnVsbExheW91dC5fZHJhZ0NvdmVyPXR9KSxoLnJhaXNlVG9Ub3AodGhpcyksaS5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzPWkubm9kZSxEKGkubm9kZSksaS5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQmJihyLm5vZGVFdmVudHMudW5ob3Zlci5hcHBseSgwLGkuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkKSxpLmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD0hMSksXCJzbmFwXCI9PT1pLmFycmFuZ2VtZW50KSl7dmFyIG89aS50cmFjZUlkK1wifFwiK2kua2V5O2kuZm9yY2VMYXlvdXRzW29dP2kuZm9yY2VMYXlvdXRzW29dLmFscGhhKDEpOmZ1bmN0aW9uKHQsZSxyLGkpeyFmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLnk9KHRbZV0ueTArdFtlXS55MSkvMix0W2VdLng9KHRbZV0ueDArdFtlXS54MSkvMn0oci5ncmFwaC5ub2Rlcyk7dmFyIGE9ci5ncmFwaC5ub2Rlcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQub3JpZ2luYWxYPT09ci5ub2RlLm9yaWdpbmFsWH0pLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hdC5wYXJ0T2ZHcm91cH0pO3IuZm9yY2VMYXlvdXRzW2VdPXUuZm9yY2VTaW11bGF0aW9uKGEpLmFscGhhRGVjYXkoMCkuZm9yY2UoXCJjb2xsaWRlXCIsdS5mb3JjZUNvbGxpZGUoKS5yYWRpdXMoZnVuY3Rpb24odCl7cmV0dXJuIHQuZHkvMityLm5vZGVQYWQvMn0pLnN0cmVuZ3RoKDEpLml0ZXJhdGlvbnMobi5mb3JjZUl0ZXJhdGlvbnMpKS5mb3JjZShcImNvbnN0cmFpblwiLGZ1bmN0aW9uKHQsZSxyLGkpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD0wLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIG89clthXTtvPT09aS5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzPyhvLng9by5sYXN0RHJhZ2dlZFgsby55PW8ubGFzdERyYWdnZWRZKTooby52eD0oby5vcmlnaW5hbFgtby54KS9uLmZvcmNlVGlja3NQZXJGcmFtZSxvLnk9TWF0aC5taW4oaS5zaXplLW8uZHkvMixNYXRoLm1heChvLmR5LzIsby55KSkpLHQ9TWF0aC5tYXgodCxNYXRoLmFicyhvLnZ4KSxNYXRoLmFicyhvLnZ5KSl9IWkuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzcyYmdDwuMSYmaS5mb3JjZUxheW91dHNbZV0uYWxwaGEoKT4wJiZpLmZvcmNlTGF5b3V0c1tlXS5hbHBoYSgwKX19KDAsZSxhLHIpKS5zdG9wKCl9KDAsbyxpKSxmdW5jdGlvbih0LGUscixpLGEpe3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gbygpe3ZhciBzO2ZvcihzPTA7czxuLmZvcmNlVGlja3NQZXJGcmFtZTtzKyspci5mb3JjZUxheW91dHNbaV0udGljaygpO3ZhciBsPXIuZ3JhcGgubm9kZXM7aWYoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS55MD10W2VdLnktdFtlXS5keS8yLHRbZV0ueTE9dFtlXS55MCt0W2VdLmR5LHRbZV0ueDA9dFtlXS54LXRbZV0uZHgvMix0W2VdLngxPXRbZV0ueDArdFtlXS5keH0obCksci5zYW5rZXkudXBkYXRlKHIuZ3JhcGgpLF8odC5maWx0ZXIoUChyKSksZSksci5mb3JjZUxheW91dHNbaV0uYWxwaGEoKT4wKXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobyk7ZWxzZXt2YXIgYz1yLm5vZGUub3JpZ2luYWxYO3Iubm9kZS54MD1jLXIudmlzaWJsZVdpZHRoLzIsci5ub2RlLngxPWMrci52aXNpYmxlV2lkdGgvMixJKHIsYSl9fSl9KHQsZSxpLG8sYSl9fSkub24oXCJkcmFnXCIsZnVuY3Rpb24ocil7aWYoXCJmaXhlZFwiIT09ci5hcnJhbmdlbWVudCl7dmFyIG49aS5ldmVudC54LGE9aS5ldmVudC55O1wic25hcFwiPT09ci5hcnJhbmdlbWVudD8oci5ub2RlLngwPW4tci52aXNpYmxlV2lkdGgvMixyLm5vZGUueDE9bityLnZpc2libGVXaWR0aC8yLHIubm9kZS55MD1hLXIudmlzaWJsZUhlaWdodC8yLHIubm9kZS55MT1hK3IudmlzaWJsZUhlaWdodC8yKTooXCJmcmVlZm9ybVwiPT09ci5hcnJhbmdlbWVudCYmKHIubm9kZS54MD1uLXIudmlzaWJsZVdpZHRoLzIsci5ub2RlLngxPW4rci52aXNpYmxlV2lkdGgvMiksYT1NYXRoLm1heCgwLE1hdGgubWluKHIuc2l6ZS1yLnZpc2libGVIZWlnaHQvMixhKSksci5ub2RlLnkwPWEtci52aXNpYmxlSGVpZ2h0LzIsci5ub2RlLnkxPWErci52aXNpYmxlSGVpZ2h0LzIpLEQoci5ub2RlKSxcInNuYXBcIiE9PXIuYXJyYW5nZW1lbnQmJihyLnNhbmtleS51cGRhdGUoci5ncmFwaCksXyh0LmZpbHRlcihQKHIpKSxlKSl9fSkub24oXCJkcmFnZW5kXCIsZnVuY3Rpb24odCl7aWYoXCJmaXhlZFwiIT09dC5hcnJhbmdlbWVudCl7dC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzPSExO2Zvcih2YXIgZT0wO2U8dC5ub2RlLmNoaWxkcmVuTm9kZXMubGVuZ3RoO2UrKyl0Lm5vZGUuY2hpbGRyZW5Ob2Rlc1tlXS54PXQubm9kZS54LHQubm9kZS5jaGlsZHJlbk5vZGVzW2VdLnk9dC5ub2RlLnk7XCJzbmFwXCIhPT10LmFycmFuZ2VtZW50JiZJKHQsYSl9fSk7dC5vbihcIi5kcmFnXCIsbnVsbCkuY2FsbChvKX1mdW5jdGlvbiBJKHQsZSl7Zm9yKHZhciByPVtdLG49W10saT0wO2k8dC5ncmFwaC5ub2Rlcy5sZW5ndGg7aSsrKXt2YXIgYT0odC5ncmFwaC5ub2Rlc1tpXS54MCt0LmdyYXBoLm5vZGVzW2ldLngxKS8yLG89KHQuZ3JhcGgubm9kZXNbaV0ueTArdC5ncmFwaC5ub2Rlc1tpXS55MSkvMjtyLnB1c2goYS90LmZpZ3VyZS53aWR0aCksbi5wdXNoKG8vdC5maWd1cmUuaGVpZ2h0KX1tLmNhbGwoXCJfZ3VpUmVzdHlsZVwiLGUse1wibm9kZS54XCI6W3JdLFwibm9kZS55XCI6W25dfSx0LnRyYWNlLmluZGV4KS50aGVuKGZ1bmN0aW9uKCl7ZS5fZnVsbExheW91dC5fZHJhZ0NvdmVyJiZlLl9mdWxsTGF5b3V0Ll9kcmFnQ292ZXIucmVtb3ZlKCl9KX1mdW5jdGlvbiBEKHQpe3QubGFzdERyYWdnZWRYPXQueDArdC5keC8yLHQubGFzdERyYWdnZWRZPXQueTArdC5keS8yfWZ1bmN0aW9uIFAodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLm5vZGUub3JpZ2luYWxYPT09dC5ub2RlLm9yaWdpbmFsWH19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUsZil7dmFyIHY9ITE7aC5lbnN1cmVTaW5nbGUodC5fZnVsbExheW91dC5faW5mb2xheWVyLFwiZ1wiLFwiZmlyc3QtcmVuZGVyXCIsZnVuY3Rpb24oKXt2PSEwfSk7dmFyIG09dC5fZnVsbExheW91dC5fZHJhZ0NvdmVyLGI9ci5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGcodCkudHJhY2UudmlzaWJsZX0pLm1hcChmdW5jdGlvbih0LGUscil7dmFyIGksbz1nKGUpLHM9by50cmFjZSx1PXMuZG9tYWluLGY9XCJoXCI9PT1zLm9yaWVudGF0aW9uLHA9cy5ub2RlLnBhZCxkPXMubm9kZS50aGlja25lc3Msdj10LndpZHRoKih1LnhbMV0tdS54WzBdKSxtPXQuaGVpZ2h0Kih1LnlbMV0tdS55WzBdKSx5PW8uX25vZGVzLHg9by5fbGlua3MsYj1vLmNpcmN1bGFyOyhpPWI/Yy5zYW5rZXlDaXJjdWxhcigpLmNpcmN1bGFyTGlua0dhcCgwKTpsLnNhbmtleSgpKS5pdGVyYXRpb25zKG4uc2Fua2V5SXRlcmF0aW9ucykuc2l6ZShmP1t2LG1dOlttLHZdKS5ub2RlV2lkdGgoZCkubm9kZVBhZGRpbmcocCkubm9kZUlkKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBvaW50TnVtYmVyfSkubm9kZXMoeSkubGlua3MoeCk7dmFyIF8sdyxrLEE9aSgpO2Zvcih2YXIgVCBpbiBpLm5vZGVQYWRkaW5nKCk8cCYmaC53YXJuKFwibm9kZS5wYWQgd2FzIHJlZHVjZWQgdG8gXCIsaS5ub2RlUGFkZGluZygpLFwiIHRvIGZpdCB3aXRoaW4gdGhlIGZpZ3VyZS5cIiksby5fZ3JvdXBMb29rdXApe3ZhciBNLFM9cGFyc2VJbnQoby5fZ3JvdXBMb29rdXBbVF0pO2ZvcihfPTA7XzxBLm5vZGVzLmxlbmd0aDtfKyspaWYoQS5ub2Rlc1tfXS5wb2ludE51bWJlcj09PVMpe009QS5ub2Rlc1tfXTticmVha31pZihNKXt2YXIgRT17cG9pbnROdW1iZXI6cGFyc2VJbnQoVCkseDA6TS54MCx4MTpNLngxLHkwOk0ueTAseTE6TS55MSxwYXJ0T2ZHcm91cDohMCxzb3VyY2VMaW5rczpbXSx0YXJnZXRMaW5rczpbXX07QS5ub2Rlcy51bnNoaWZ0KEUpLE0uY2hpbGRyZW5Ob2Rlcy51bnNoaWZ0KEUpfX1pZihmdW5jdGlvbigpe2ZvcihfPTA7XzxBLm5vZGVzLmxlbmd0aDtfKyspe3ZhciB0LGUscj1BLm5vZGVzW19dLG49e307Zm9yKHc9MDt3PHIudGFyZ2V0TGlua3MubGVuZ3RoO3crKyl0PShlPXIudGFyZ2V0TGlua3Nbd10pLnNvdXJjZS5wb2ludE51bWJlcitcIjpcIitlLnRhcmdldC5wb2ludE51bWJlcixuLmhhc093blByb3BlcnR5KHQpfHwoblt0XT1bXSksblt0XS5wdXNoKGUpO3ZhciBpPU9iamVjdC5rZXlzKG4pO2Zvcih3PTA7dzxpLmxlbmd0aDt3Kyspe3ZhciBvPW5bdD1pW3ddXSxzPTAsbD17fTtmb3Ioaz0wO2s8by5sZW5ndGg7aysrKWxbKGU9b1trXSkubGFiZWxdfHwobFtlLmxhYmVsXT0wKSxsW2UubGFiZWxdKz1lLnZhbHVlLHMrPWUudmFsdWU7Zm9yKGs9MDtrPG8ubGVuZ3RoO2srKykoZT1vW2tdKS5mbG93PXt2YWx1ZTpzLGxhYmVsQ29uY2VudHJhdGlvbjpsW2UubGFiZWxdL3MsY29uY2VudHJhdGlvbjplLnZhbHVlL3MsbGlua3M6b30sZS5jb25jZW50cmF0aW9uc2NhbGUmJihlLmNvbG9yPWEoZS5jb25jZW50cmF0aW9uc2NhbGUoZS5mbG93LmxhYmVsQ29uY2VudHJhdGlvbikpKX12YXIgYz0wO2Zvcih3PTA7dzxyLnNvdXJjZUxpbmtzLmxlbmd0aDt3KyspYys9ci5zb3VyY2VMaW5rc1t3XS52YWx1ZTtmb3Iodz0wO3c8ci5zb3VyY2VMaW5rcy5sZW5ndGg7dysrKShlPXIuc291cmNlTGlua3Nbd10pLmNvbmNlbnRyYXRpb25PdXQ9ZS52YWx1ZS9jO3ZhciB1PTA7Zm9yKHc9MDt3PHIudGFyZ2V0TGlua3MubGVuZ3RoO3crKyl1Kz1yLnRhcmdldExpbmtzW3ddLnZhbHVlO2Zvcih3PTA7dzxyLnRhcmdldExpbmtzLmxlbmd0aDt3KyspKGU9ci50YXJnZXRMaW5rc1t3XSkuY29uY2VucmF0aW9uSW49ZS52YWx1ZS91fX0oKSxzLm5vZGUueC5sZW5ndGgmJnMubm9kZS55Lmxlbmd0aCl7Zm9yKF89MDtfPE1hdGgubWluKHMubm9kZS54Lmxlbmd0aCxzLm5vZGUueS5sZW5ndGgsQS5ub2Rlcy5sZW5ndGgpO18rKylpZihzLm5vZGUueFtfXSYmcy5ub2RlLnlbX10pe3ZhciBDPVtzLm5vZGUueFtfXSp2LHMubm9kZS55W19dKm1dO0Eubm9kZXNbX10ueDA9Q1swXS1kLzIsQS5ub2Rlc1tfXS54MT1DWzBdK2QvMjt2YXIgTD1BLm5vZGVzW19dLnkxLUEubm9kZXNbX10ueTA7QS5ub2Rlc1tfXS55MD1DWzFdLUwvMixBLm5vZGVzW19dLnkxPUNbMV0rTC8yfVwic25hcFwiPT09cy5hcnJhbmdlbWVudCYmZnVuY3Rpb24odCl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPTAsYT10Lmxlbmd0aDtmb3IodC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueTAtZS55MH0pLG49MDtuPGE7KytuKShlPXRbbl0pLnkwPj1pfHwocj1pLWUueTApPjFlLTYmJihlLnkwKz1yLGUueTErPXIpLGk9ZS55MStwfSl9KGZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybnt4MDp0LngwLGluZGV4OmV9fSkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LngwLWUueDB9KSxpPVtdLGE9LTEsbz0tMS8wO2ZvcihfPTA7XzxuLmxlbmd0aDtfKyspe3ZhciBzPXRbbltfXS5pbmRleF07cy54MD5vK2QmJihhKz0xLGU9cy54MCksbz1zLngwLGlbYV18fChpW2FdPVtdKSxpW2FdLnB1c2gocykscj1lLXMueDAscy54MCs9cixzLngxKz1yfXJldHVybiBpfSh5PUEubm9kZXMpKSxpLnVwZGF0ZShBKX1yZXR1cm57Y2lyY3VsYXI6YixrZXk6cix0cmFjZTpzLGd1aWQ6aC5yYW5kc3RyKCksaG9yaXpvbnRhbDpmLHdpZHRoOnYsaGVpZ2h0Om0sbm9kZVBhZDpzLm5vZGUucGFkLG5vZGVMaW5lQ29sb3I6cy5ub2RlLmxpbmUuY29sb3Isbm9kZUxpbmVXaWR0aDpzLm5vZGUubGluZS53aWR0aCxsaW5rTGluZUNvbG9yOnMubGluay5saW5lLmNvbG9yLGxpbmtMaW5lV2lkdGg6cy5saW5rLmxpbmUud2lkdGgsdmFsdWVGb3JtYXQ6cy52YWx1ZWZvcm1hdCx2YWx1ZVN1ZmZpeDpzLnZhbHVlc3VmZml4LHRleHRGb250OnMudGV4dGZvbnQsdHJhbnNsYXRlWDp1LnhbMF0qdC53aWR0aCt0Lm1hcmdpbi5sLHRyYW5zbGF0ZVk6dC5oZWlnaHQtdS55WzFdKnQuaGVpZ2h0K3QubWFyZ2luLnQsZHJhZ1BhcmFsbGVsOmY/bTp2LGRyYWdQZXJwZW5kaWN1bGFyOmY/djptLGFycmFuZ2VtZW50OnMuYXJyYW5nZW1lbnQsc2Fua2V5OmksZ3JhcGg6QSxmb3JjZUxheW91dHM6e30saW50ZXJhY3Rpb25TdGF0ZTp7ZHJhZ0luUHJvZ3Jlc3M6ITEsaG92ZXJlZDohMX19fS5iaW5kKG51bGwsdSkpLF89ZS5zZWxlY3RBbGwoXCIuXCIrbi5jbi5zYW5rZXkpLmRhdGEoYixwKTtfLmV4aXQoKS5yZW1vdmUoKSxfLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKG4uY24uc2Fua2V5LCEwKS5zdHlsZShcImJveC1zaXppbmdcIixcImNvbnRlbnQtYm94XCIpLnN0eWxlKFwicG9zaXRpb25cIixcImFic29sdXRlXCIpLnN0eWxlKFwibGVmdFwiLDApLnN0eWxlKFwic2hhcGUtcmVuZGVyaW5nXCIsXCJnZW9tZXRyaWNQcmVjaXNpb25cIikuc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwiYXV0b1wiKS5hdHRyKFwidHJhbnNmb3JtXCIsQSksXy5lYWNoKGZ1bmN0aW9uKGUscil7dC5fZnVsbERhdGFbcl0uX3NhbmtleT1lO3ZhciBuPVwiYmdzYW5rZXktXCIrZS50cmFjZS51aWQrXCItXCIrcjtoLmVuc3VyZVNpbmdsZSh0Ll9mdWxsTGF5b3V0Ll9kcmFnZ2VycyxcInJlY3RcIixuKSx0Ll9mdWxsRGF0YVtyXS5fYmdSZWN0PWkuc2VsZWN0KFwiLlwiK24pLHQuX2Z1bGxEYXRhW3JdLl9iZ1JlY3Quc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpLmF0dHIoXCJ3aWR0aFwiLGUud2lkdGgpLmF0dHIoXCJoZWlnaHRcIixlLmhlaWdodCkuYXR0cihcInhcIixlLnRyYW5zbGF0ZVgpLmF0dHIoXCJ5XCIsZS50cmFuc2xhdGVZKS5jbGFzc2VkKFwiYmdzYW5rZXlcIiwhMCkuc3R5bGUoe2ZpbGw6XCJ0cmFuc3BhcmVudFwiLFwic3Ryb2tlLXdpZHRoXCI6MH0pfSksXy50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLmF0dHIoXCJ0cmFuc2Zvcm1cIixBKTt2YXIgST1fLnNlbGVjdEFsbChcIi5cIituLmNuLnNhbmtleUxpbmtzKS5kYXRhKGQscCk7SS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChuLmNuLnNhbmtleUxpbmtzLCEwKS5zdHlsZShcImZpbGxcIixcIm5vbmVcIik7dmFyIEQ9SS5zZWxlY3RBbGwoXCIuXCIrbi5jbi5zYW5rZXlMaW5rKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdyYXBoLmxpbmtzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pLm1hcChmdW5jdGlvbih0LGUscil7dmFyIG49YShlLmNvbG9yKSxpPWUuc291cmNlLmxhYmVsK1wifFwiK2UudGFyZ2V0LmxhYmVsK1wiX19cIityO3JldHVybiBlLnRyYWNlPXQudHJhY2UsZS5jdXJ2ZU51bWJlcj10LnRyYWNlLmluZGV4LHtjaXJjdWxhcjp0LmNpcmN1bGFyLGtleTppLHRyYWNlSWQ6dC5rZXkscG9pbnROdW1iZXI6ZS5wb2ludE51bWJlcixsaW5rOmUsdGlueUNvbG9ySHVlOm8udGlueVJHQihuKSx0aW55Q29sb3JBbHBoYTpuLmdldEFscGhhKCksbGlua1BhdGg6eSxsaW5rTGluZUNvbG9yOnQubGlua0xpbmVDb2xvcixsaW5rTGluZVdpZHRoOnQubGlua0xpbmVXaWR0aCx2YWx1ZUZvcm1hdDp0LnZhbHVlRm9ybWF0LHZhbHVlU3VmZml4OnQudmFsdWVTdWZmaXgsc2Fua2V5OnQuc2Fua2V5LHBhcmVudDp0LGludGVyYWN0aW9uU3RhdGU6dC5pbnRlcmFjdGlvblN0YXRlLGZsb3c6ZS5mbG93fX0uYmluZChudWxsLHQpKX0scCk7RC5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChuLmNuLnNhbmtleUxpbmssITApLmNhbGwoeixfLGYubGlua0V2ZW50cyksRC5zdHlsZShcInN0cm9rZVwiLGZ1bmN0aW9uKHQpe3JldHVybiBrKHQpP28udGlueVJHQihhKHQubGlua0xpbmVDb2xvcikpOnQudGlueUNvbG9ySHVlfSkuc3R5bGUoXCJzdHJva2Utb3BhY2l0eVwiLGZ1bmN0aW9uKHQpe3JldHVybiBrKHQpP28ub3BhY2l0eSh0LmxpbmtMaW5lQ29sb3IpOnQudGlueUNvbG9yQWxwaGF9KS5zdHlsZShcImZpbGxcIixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JIdWV9KS5zdHlsZShcImZpbGwtb3BhY2l0eVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbnlDb2xvckFscGhhfSkuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixmdW5jdGlvbih0KXtyZXR1cm4gayh0KT90LmxpbmtMaW5lV2lkdGg6MX0pLmF0dHIoXCJkXCIseSgpKSxELnN0eWxlKFwib3BhY2l0eVwiLGZ1bmN0aW9uKCl7cmV0dXJuIHQuX2NvbnRleHQuc3RhdGljUGxvdHx8dnx8bT8xOjB9KS50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLnN0eWxlKFwib3BhY2l0eVwiLDEpLEQuZXhpdCgpLnRyYW5zaXRpb24oKS5lYXNlKG4uZWFzZSkuZHVyYXRpb24obi5kdXJhdGlvbikuc3R5bGUoXCJvcGFjaXR5XCIsMCkucmVtb3ZlKCk7dmFyIFA9Xy5zZWxlY3RBbGwoXCIuXCIrbi5jbi5zYW5rZXlOb2RlU2V0KS5kYXRhKGQscCk7UC5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChuLmNuLnNhbmtleU5vZGVTZXQsITApLFAuc3R5bGUoXCJjdXJzb3JcIixmdW5jdGlvbih0KXtzd2l0Y2godC5hcnJhbmdlbWVudCl7Y2FzZVwiZml4ZWRcIjpyZXR1cm5cImRlZmF1bHRcIjtjYXNlXCJwZXJwZW5kaWN1bGFyXCI6cmV0dXJuXCJucy1yZXNpemVcIjtkZWZhdWx0OnJldHVyblwibW92ZVwifX0pO3ZhciBSPVAuc2VsZWN0QWxsKFwiLlwiK24uY24uc2Fua2V5Tm9kZSkuZGF0YShmdW5jdGlvbih0KXt2YXIgZT10LmdyYXBoLm5vZGVzO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZSxyPVtdO2ZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5vcmlnaW5hbFg9KHRbZV0ueDArdFtlXS54MSkvMix0W2VdLm9yaWdpbmFsWT0odFtlXS55MCt0W2VdLnkxKS8yLC0xPT09ci5pbmRleE9mKHRbZV0ub3JpZ2luYWxYKSYmci5wdXNoKHRbZV0ub3JpZ2luYWxYKTtmb3Ioci5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pLGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLm9yaWdpbmFsTGF5ZXJJbmRleD1yLmluZGV4T2YodFtlXS5vcmlnaW5hbFgpLHRbZV0ub3JpZ2luYWxMYXllcj10W2VdLm9yaWdpbmFsTGF5ZXJJbmRleC8oci5sZW5ndGgtMSl9KGUpLGUubWFwKGZ1bmN0aW9uKHQsZSl7dmFyIHI9YShlLmNvbG9yKSxpPW4ubm9kZVBhZEFjcm9zcyxzPXQubm9kZVBhZC8yO2UuZHg9ZS54MS1lLngwLGUuZHk9ZS55MS1lLnkwO3ZhciBsPWUuZHgsYz1NYXRoLm1heCguNSxlLmR5KSx1PVwibm9kZV9cIitlLnBvaW50TnVtYmVyO3JldHVybiBlLmdyb3VwJiYodT1oLnJhbmRzdHIoKSksZS50cmFjZT10LnRyYWNlLGUuY3VydmVOdW1iZXI9dC50cmFjZS5pbmRleCx7aW5kZXg6ZS5wb2ludE51bWJlcixrZXk6dSxwYXJ0T2ZHcm91cDplLnBhcnRPZkdyb3VwfHwhMSxncm91cDplLmdyb3VwLHRyYWNlSWQ6dC5rZXksdHJhY2U6dC50cmFjZSxub2RlOmUsbm9kZVBhZDp0Lm5vZGVQYWQsbm9kZUxpbmVDb2xvcjp0Lm5vZGVMaW5lQ29sb3Isbm9kZUxpbmVXaWR0aDp0Lm5vZGVMaW5lV2lkdGgsdGV4dEZvbnQ6dC50ZXh0Rm9udCxzaXplOnQuaG9yaXpvbnRhbD90LmhlaWdodDp0LndpZHRoLHZpc2libGVXaWR0aDpNYXRoLmNlaWwobCksdmlzaWJsZUhlaWdodDpjLHpvbmVYOi1pLHpvbmVZOi1zLHpvbmVXaWR0aDpsKzIqaSx6b25lSGVpZ2h0OmMrMipzLGxhYmVsWTp0Lmhvcml6b250YWw/ZS5keS8yKzE6ZS5keC8yKzEsbGVmdDoxPT09ZS5vcmlnaW5hbExheWVyLHNpemVBY3Jvc3M6dC53aWR0aCxmb3JjZUxheW91dHM6dC5mb3JjZUxheW91dHMsaG9yaXpvbnRhbDp0Lmhvcml6b250YWwsZGFya0JhY2tncm91bmQ6ci5nZXRCcmlnaHRuZXNzKCk8PTEyOCx0aW55Q29sb3JIdWU6by50aW55UkdCKHIpLHRpbnlDb2xvckFscGhhOnIuZ2V0QWxwaGEoKSx2YWx1ZUZvcm1hdDp0LnZhbHVlRm9ybWF0LHZhbHVlU3VmZml4OnQudmFsdWVTdWZmaXgsc2Fua2V5OnQuc2Fua2V5LGdyYXBoOnQuZ3JhcGgsYXJyYW5nZW1lbnQ6dC5hcnJhbmdlbWVudCx1bmlxdWVOb2RlTGFiZWxQYXRoSWQ6W3QuZ3VpZCx0LmtleSx1XS5qb2luKFwiX1wiKSxpbnRlcmFjdGlvblN0YXRlOnQuaW50ZXJhY3Rpb25TdGF0ZSxmaWd1cmU6dH19LmJpbmQobnVsbCx0KSl9LHApO1IuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQobi5jbi5zYW5rZXlOb2RlLCEwKS5jYWxsKHgpLnN0eWxlKFwib3BhY2l0eVwiLGZ1bmN0aW9uKGUpe3JldHVybiF0Ll9jb250ZXh0LnN0YXRpY1Bsb3QmJiF2fHxlLnBhcnRPZkdyb3VwPzA6MX0pLFIuY2FsbCh6LF8sZi5ub2RlRXZlbnRzKS5jYWxsKE8sRCxmLHQpLFIudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5jYWxsKHgpLnN0eWxlKFwib3BhY2l0eVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnBhcnRPZkdyb3VwPzA6MX0pLFIuZXhpdCgpLnRyYW5zaXRpb24oKS5lYXNlKG4uZWFzZSkuZHVyYXRpb24obi5kdXJhdGlvbikuc3R5bGUoXCJvcGFjaXR5XCIsMCkucmVtb3ZlKCk7dmFyIEY9Ui5zZWxlY3RBbGwoXCIuXCIrbi5jbi5ub2RlUmVjdCkuZGF0YShkKTtGLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKS5jbGFzc2VkKG4uY24ubm9kZVJlY3QsITApLmNhbGwodyksRi5zdHlsZShcInN0cm9rZS13aWR0aFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVMaW5lV2lkdGh9KS5zdHlsZShcInN0cm9rZVwiLGZ1bmN0aW9uKHQpe3JldHVybiBvLnRpbnlSR0IoYSh0Lm5vZGVMaW5lQ29sb3IpKX0pLnN0eWxlKFwic3Ryb2tlLW9wYWNpdHlcIixmdW5jdGlvbih0KXtyZXR1cm4gby5vcGFjaXR5KHQubm9kZUxpbmVDb2xvcil9KS5zdHlsZShcImZpbGxcIixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JIdWV9KS5zdHlsZShcImZpbGwtb3BhY2l0eVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbnlDb2xvckFscGhhfSksRi50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLmNhbGwodyk7dmFyIEI9Ui5zZWxlY3RBbGwoXCIuXCIrbi5jbi5ub2RlQ2FwdHVyZSkuZGF0YShkKTtCLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKS5jbGFzc2VkKG4uY24ubm9kZUNhcHR1cmUsITApLnN0eWxlKFwiZmlsbC1vcGFjaXR5XCIsMCksQi5hdHRyKFwieFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnpvbmVYfSkuYXR0cihcInlcIixmdW5jdGlvbih0KXtyZXR1cm4gdC56b25lWX0pLmF0dHIoXCJ3aWR0aFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnpvbmVXaWR0aH0pLmF0dHIoXCJoZWlnaHRcIixmdW5jdGlvbih0KXtyZXR1cm4gdC56b25lSGVpZ2h0fSk7dmFyIE49Ui5zZWxlY3RBbGwoXCIuXCIrbi5jbi5ub2RlQ2VudGVyZWQpLmRhdGEoZCk7Ti5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChuLmNuLm5vZGVDZW50ZXJlZCwhMCkuYXR0cihcInRyYW5zZm9ybVwiLFQpLE4udHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5hdHRyKFwidHJhbnNmb3JtXCIsVCk7dmFyIGo9Ti5zZWxlY3RBbGwoXCIuXCIrbi5jbi5ub2RlTGFiZWxHdWlkZSkuZGF0YShkKTtqLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5jbGFzc2VkKG4uY24ubm9kZUxhYmVsR3VpZGUsITApLmF0dHIoXCJpZFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnVuaXF1ZU5vZGVMYWJlbFBhdGhJZH0pLmF0dHIoXCJkXCIsTSkuYXR0cihcInRyYW5zZm9ybVwiLFMpLGoudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5hdHRyKFwiZFwiLE0pLmF0dHIoXCJ0cmFuc2Zvcm1cIixTKTt2YXIgVj1OLnNlbGVjdEFsbChcIi5cIituLmNuLm5vZGVMYWJlbCkuZGF0YShkKTtWLmVudGVyKCkuYXBwZW5kKFwidGV4dFwiKS5jbGFzc2VkKG4uY24ubm9kZUxhYmVsLCEwKS5hdHRyKFwidHJhbnNmb3JtXCIsRSkuc3R5bGUoXCJ1c2VyLXNlbGVjdFwiLFwibm9uZVwiKS5zdHlsZShcImN1cnNvclwiLFwiZGVmYXVsdFwiKS5zdHlsZShcImZpbGxcIixcImJsYWNrXCIpLFYuc3R5bGUoXCJ0ZXh0LXNoYWRvd1wiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmhvcml6b250YWw/XCItMXB4IDFweCAxcHggI2ZmZiwgMXB4IDFweCAxcHggI2ZmZiwgMXB4IC0xcHggMXB4ICNmZmYsIC0xcHggLTFweCAxcHggI2ZmZlwiOlwibm9uZVwifSkuZWFjaChmdW5jdGlvbih0KXtzLmZvbnQoVix0LnRleHRGb250KX0pLFYudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5hdHRyKFwidHJhbnNmb3JtXCIsRSk7dmFyIFU9Vi5zZWxlY3RBbGwoXCIuXCIrbi5jbi5ub2RlTGFiZWxUZXh0UGF0aCkuZGF0YShkKTtVLmVudGVyKCkuYXBwZW5kKFwidGV4dFBhdGhcIikuY2xhc3NlZChuLmNuLm5vZGVMYWJlbFRleHRQYXRoLCEwKS5hdHRyKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsXCJtaWRkbGVcIikuYXR0cihcInhsaW5rOmhyZWZcIixmdW5jdGlvbih0KXtyZXR1cm5cIiNcIit0LnVuaXF1ZU5vZGVMYWJlbFBhdGhJZH0pLmF0dHIoXCJzdGFydE9mZnNldFwiLEwpLnN0eWxlKFwiZmlsbFwiLEMpLFUudGV4dChmdW5jdGlvbih0KXtyZXR1cm4gdC5ob3Jpem9udGFsfHx0Lm5vZGUuZHk+NT90Lm5vZGUubGFiZWw6XCJcIn0pLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmhvcml6b250YWwmJnQubGVmdD9cImVuZFwiOlwic3RhcnRcIn0pLFUudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5hdHRyKFwic3RhcnRPZmZzZXRcIixMKS5zdHlsZShcImZpbGxcIixDKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvZ3VwXCI6Njk5LFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2NvbnN0YW50c1wiOjEwNDUsXCJAcGxvdGx5L2QzLXNhbmtleVwiOjQ5LGQzOjE1NSxcImQzLWZvcmNlXCI6MTQ3LFwiZDMtaW50ZXJwb2xhdGVcIjoxNDksXCJkMy1zYW5rZXktY2lyY3VsYXJcIjoxNTIsdGlueWNvbG9yMjo1MjJ9XSwxMDUwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49dC5jZFswXS50cmFjZSxpPW4uX3NhbmtleS5ncmFwaC5ub2RlcyxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV07aWYoIW8ucGFydE9mR3JvdXApe3ZhciBzPVsoby54MCtvLngxKS8yLChvLnkwK28ueTEpLzJdO1widlwiPT09bi5vcmllbnRhdGlvbiYmcy5yZXZlcnNlKCksZSYmZS5jb250YWlucyhzLCExLGEsdCkmJnIucHVzaCh7cG9pbnROdW1iZXI6by5wb2ludE51bWJlcn0pfX1yZXR1cm4gcn19LHt9XSwxMDUxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl0W3JdLmk9cjtuLm1lcmdlQXJyYXkoZS50ZXh0LHQsXCJ0eFwiKSxuLm1lcmdlQXJyYXkoZS5ob3ZlcnRleHQsdCxcImh0eFwiKSxuLm1lcmdlQXJyYXkoZS5jdXN0b21kYXRhLHQsXCJkYXRhXCIpLG4ubWVyZ2VBcnJheShlLnRleHRwb3NpdGlvbix0LFwidHBcIiksZS50ZXh0Zm9udCYmKG4ubWVyZ2VBcnJheShlLnRleHRmb250LnNpemUsdCxcInRzXCIpLG4ubWVyZ2VBcnJheShlLnRleHRmb250LmNvbG9yLHQsXCJ0Y1wiKSxuLm1lcmdlQXJyYXkoZS50ZXh0Zm9udC5mYW1pbHksdCxcInRmXCIpKTt2YXIgaT1lLm1hcmtlcjtpZihpKXtuLm1lcmdlQXJyYXkoaS5zaXplLHQsXCJtc1wiKSxuLm1lcmdlQXJyYXkoaS5vcGFjaXR5LHQsXCJtb1wiKSxuLm1lcmdlQXJyYXkoaS5zeW1ib2wsdCxcIm14XCIpLG4ubWVyZ2VBcnJheShpLmNvbG9yLHQsXCJtY1wiKTt2YXIgYT1pLmxpbmU7aS5saW5lJiYobi5tZXJnZUFycmF5KGEuY29sb3IsdCxcIm1sY1wiKSxuLm1lcmdlQXJyYXkoYS53aWR0aCx0LFwibWx3XCIpKTt2YXIgbz1pLmdyYWRpZW50O28mJlwibm9uZVwiIT09by50eXBlJiYobi5tZXJnZUFycmF5KG8udHlwZSx0LFwibWd0XCIpLG4ubWVyZ2VBcnJheShvLmNvbG9yLHQsXCJtZ2NcIikpfX19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDEwNTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlc1wiKS5kYXNoLGw9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxjPXQoXCIuL2NvbnN0YW50c1wiKSx1PXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXt4Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wiLGFuaW06ITB9LHgwOnt2YWxUeXBlOlwiYW55XCIsZGZsdDowLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wiLGFuaW06ITB9LGR4Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxLGVkaXRUeXBlOlwiY2FsY1wiLGFuaW06ITB9LHk6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCIsYW5pbTohMH0seTA6e3ZhbFR5cGU6XCJhbnlcIixkZmx0OjAsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCIsYW5pbTohMH0sZHk6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjEsZWRpdFR5cGU6XCJjYWxjXCIsYW5pbTohMH0sc3RhY2tncm91cDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcImNhbGNcIn0sb3JpZW50YXRpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInZcIixcImhcIl0sZWRpdFR5cGU6XCJjYWxjXCJ9LGdyb3Vwbm9ybTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiXCIsXCJmcmFjdGlvblwiLFwicGVyY2VudFwiXSxkZmx0OlwiXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHN0YWNrZ2Fwczp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiaW5mZXIgemVyb1wiLFwiaW50ZXJwb2xhdGVcIl0sZGZsdDpcImluZmVyIHplcm9cIixlZGl0VHlwZTpcImNhbGNcIn0sdGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixhcnJheU9rOiEwLGVkaXRUeXBlOlwiY2FsY1wifSxob3ZlcnRleHQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsYXJyYXlPazohMCxlZGl0VHlwZTpcInN0eWxlXCJ9LG1vZGU6e3ZhbFR5cGU6XCJmbGFnbGlzdFwiLGZsYWdzOltcImxpbmVzXCIsXCJtYXJrZXJzXCIsXCJ0ZXh0XCJdLGV4dHJhczpbXCJub25lXCJdLGVkaXRUeXBlOlwiY2FsY1wifSxob3Zlcm9uOnt2YWxUeXBlOlwiZmxhZ2xpc3RcIixmbGFnczpbXCJwb2ludHNcIixcImZpbGxzXCJdLGVkaXRUeXBlOlwic3R5bGVcIn0saG92ZXJ0ZW1wbGF0ZTpuKHt9LHtrZXlzOmMuZXZlbnREYXRhS2V5c30pLGxpbmU6e2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcInN0eWxlXCIsYW5pbTohMH0sd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjIsZWRpdFR5cGU6XCJzdHlsZVwiLGFuaW06ITB9LHNoYXBlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJsaW5lYXJcIixcInNwbGluZVwiLFwiaHZcIixcInZoXCIsXCJodmhcIixcInZodlwiXSxkZmx0OlwibGluZWFyXCIsZWRpdFR5cGU6XCJwbG90XCJ9LHNtb290aGluZzp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLjMsZGZsdDoxLGVkaXRUeXBlOlwicGxvdFwifSxkYXNoOnUoe30scyx7ZWRpdFR5cGU6XCJzdHlsZVwifSksc2ltcGxpZnk6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcInBsb3RcIn0sZWRpdFR5cGU6XCJwbG90XCJ9LGNvbm5lY3RnYXBzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEsZWRpdFR5cGU6XCJjYWxjXCJ9LGNsaXBvbmF4aXM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcInBsb3RcIn0sZmlsbDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibm9uZVwiLFwidG96ZXJveVwiLFwidG96ZXJveFwiLFwidG9uZXh0eVwiLFwidG9uZXh0eFwiLFwidG9zZWxmXCIsXCJ0b25leHRcIl0sZWRpdFR5cGU6XCJjYWxjXCJ9LGZpbGxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJzdHlsZVwiLGFuaW06ITB9LG1hcmtlcjp1KHtzeW1ib2w6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOmwuc3ltYm9sTGlzdCxkZmx0OlwiY2lyY2xlXCIsYXJyYXlPazohMCxlZGl0VHlwZTpcInN0eWxlXCJ9LG9wYWNpdHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxhcnJheU9rOiEwLGVkaXRUeXBlOlwic3R5bGVcIixhbmltOiEwfSxzaXplOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDo2LGFycmF5T2s6ITAsZWRpdFR5cGU6XCJjYWxjXCIsYW5pbTohMH0sbWF4ZGlzcGxheWVkOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDowLGVkaXRUeXBlOlwicGxvdFwifSxzaXplcmVmOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxLGVkaXRUeXBlOlwiY2FsY1wifSxzaXplbWluOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifSxzaXplbW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiZGlhbWV0ZXJcIixcImFyZWFcIl0sZGZsdDpcImRpYW1ldGVyXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGNvbG9yYmFyOmEsbGluZTp1KHt3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJzdHlsZVwiLGFuaW06ITB9LGVkaXRUeXBlOlwiY2FsY1wifSxpKFwibWFya2VyLmxpbmVcIix7YW5pbTohMH0pKSxncmFkaWVudDp7dHlwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wicmFkaWFsXCIsXCJob3Jpem9udGFsXCIsXCJ2ZXJ0aWNhbFwiLFwibm9uZVwiXSxhcnJheU9rOiEwLGRmbHQ6XCJub25lXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixhcnJheU9rOiEwLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LGkoXCJtYXJrZXJcIix7YW5pbTohMH0pKSxzZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZWRpdFR5cGU6XCJzdHlsZVwifSxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJzdHlsZVwifSxzaXplOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZWRpdFR5cGU6XCJzdHlsZVwifSxlZGl0VHlwZTpcInN0eWxlXCJ9LHRleHRmb250Ontjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJzdHlsZVwifSxlZGl0VHlwZTpcInN0eWxlXCJ9LGVkaXRUeXBlOlwic3R5bGVcIn0sdW5zZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZWRpdFR5cGU6XCJzdHlsZVwifSxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJzdHlsZVwifSxzaXplOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZWRpdFR5cGU6XCJzdHlsZVwifSxlZGl0VHlwZTpcInN0eWxlXCJ9LHRleHRmb250Ontjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJzdHlsZVwifSxlZGl0VHlwZTpcInN0eWxlXCJ9LGVkaXRUeXBlOlwic3R5bGVcIn0sdGV4dHBvc2l0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ0b3AgbGVmdFwiLFwidG9wIGNlbnRlclwiLFwidG9wIHJpZ2h0XCIsXCJtaWRkbGUgbGVmdFwiLFwibWlkZGxlIGNlbnRlclwiLFwibWlkZGxlIHJpZ2h0XCIsXCJib3R0b20gbGVmdFwiLFwiYm90dG9tIGNlbnRlclwiLFwiYm90dG9tIHJpZ2h0XCJdLGRmbHQ6XCJtaWRkbGUgY2VudGVyXCIsYXJyYXlPazohMCxlZGl0VHlwZTpcImNhbGNcIn0sdGV4dGZvbnQ6byh7ZWRpdFR5cGU6XCJjYWxjXCIsY29sb3JFZGl0VHlwZTpcInN0eWxlXCIsYXJyYXlPazohMH0pLHI6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHQ6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9fX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCI6NTc5LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIjo1ODUsXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlc1wiOjU5OCxcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiOjc3NSxcIi4vY29uc3RhbnRzXCI6MTA1Nn1dLDEwNTM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLG89dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNLHM9dChcIi4vc3VidHlwZXNcIiksbD10KFwiLi9jb2xvcnNjYWxlX2NhbGNcIiksYz10KFwiLi9hcnJheXNfdG9fY2FsY2RhdGFcIiksdT10KFwiLi9jYWxjX3NlbGVjdGlvblwiKTtmdW5jdGlvbiBoKHQsZSxyLG4saSxvLGwpe3ZhciBjPWUuX2xlbmd0aCx1PXQuX2Z1bGxMYXlvdXQsaD1yLl9pZCxmPW4uX2lkLHA9dS5fZmlyc3RTY2F0dGVyW2QoZSldPT09ZS51aWQsdj0oZyhlLHUscixuKXx8e30pLm9yaWVudGF0aW9uLG09ZS5maWxsO3IuX21pbkR0aWNrPTAsbi5fbWluRHRpY2s9MDt2YXIgeT17cGFkZGVkOiEwfSx4PXtwYWRkZWQ6ITB9O2wmJih5LnBwYWQ9eC5wcGFkPWwpO3ZhciBiPWM8Mnx8aVswXSE9PWlbYy0xXXx8b1swXSE9PW9bYy0xXTtiJiYoXCJ0b3plcm94XCI9PT1tfHxcInRvbmV4dHhcIj09PW0mJihwfHxcImhcIj09PXYpKT95LnRvemVybz0hMDooZS5lcnJvcl95fHx7fSkudmlzaWJsZXx8XCJ0b25leHR5XCIhPT1tJiZcInRvemVyb3lcIiE9PW0mJihzLmhhc01hcmtlcnMoZSl8fHMuaGFzVGV4dChlKSl8fCh5LnBhZGRlZD0hMSx5LnBwYWQ9MCksYiYmKFwidG96ZXJveVwiPT09bXx8XCJ0b25leHR5XCI9PT1tJiYocHx8XCJ2XCI9PT12KSk/eC50b3plcm89ITA6XCJ0b25leHR4XCIhPT1tJiZcInRvemVyb3hcIiE9PW18fCh4LnBhZGRlZD0hMSksaCYmKGUuX2V4dHJlbWVzW2hdPWEuZmluZEV4dHJlbWVzKHIsaSx5KSksZiYmKGUuX2V4dHJlbWVzW2ZdPWEuZmluZEV4dHJlbWVzKG4sbyx4KSl9ZnVuY3Rpb24gZih0LGUpe2lmKHMuaGFzTWFya2Vycyh0KSl7dmFyIHIsbj10Lm1hcmtlcixvPTEuNioodC5tYXJrZXIuc2l6ZXJlZnx8MSk7aWYocj1cImFyZWFcIj09PXQubWFya2VyLnNpemVtb2RlP2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heChNYXRoLnNxcnQoKHR8fDApL28pLDMpfTpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoKHR8fDApL28sMyl9LGkuaXNBcnJheU9yVHlwZWRBcnJheShuLnNpemUpKXt2YXIgbD17dHlwZTpcImxpbmVhclwifTthLnNldENvbnZlcnQobCk7Zm9yKHZhciBjPWwubWFrZUNhbGNkYXRhKHQubWFya2VyLFwic2l6ZVwiKSx1PW5ldyBBcnJheShlKSxoPTA7aDxlO2grKyl1W2hdPXIoY1toXSk7cmV0dXJuIHV9cmV0dXJuIHIobi5zaXplKX19ZnVuY3Rpb24gcCh0LGUpe3ZhciByPWQoZSksbj10Ll9maXJzdFNjYXR0ZXI7bltyXXx8KG5bcl09ZS51aWQpfWZ1bmN0aW9uIGQodCl7dmFyIGU9dC5zdGFja2dyb3VwO3JldHVybiB0LnhheGlzK3QueWF4aXMrdC50eXBlKyhlP1wiLVwiK2U6XCJcIil9ZnVuY3Rpb24gZyh0LGUscixuKXt2YXIgaT10LnN0YWNrZ3JvdXA7aWYoaSl7dmFyIGE9ZS5fc2NhdHRlclN0YWNrT3B0c1tyLl9pZCtuLl9pZF1baV0sbz1cInZcIj09PWEub3JpZW50YXRpb24/bjpyO3JldHVyblwibGluZWFyXCI9PT1vLnR5cGV8fFwibG9nXCI9PT1vLnR5cGU/YTp2b2lkIDB9fWUuZXhwb3J0cz17Y2FsYzpmdW5jdGlvbih0LGUpe3ZhciByLHMsZCx2LG0seSx4PXQuX2Z1bGxMYXlvdXQsYj1hLmdldEZyb21JZCh0LGUueGF4aXN8fFwieFwiKSxfPWEuZ2V0RnJvbUlkKHQsZS55YXhpc3x8XCJ5XCIpLHc9Yi5tYWtlQ2FsY2RhdGEoZSxcInhcIiksaz1fLm1ha2VDYWxjZGF0YShlLFwieVwiKSxBPWUuX2xlbmd0aCxUPW5ldyBBcnJheShBKSxNPWUuaWRzLFM9ZyhlLHgsYixfKSxFPSExO3AoeCxlKTt2YXIgQyxMPVwieFwiLHo9XCJ5XCI7Zm9yKFM/KGkucHVzaFVuaXF1ZShTLnRyYWNlSW5kaWNlcyxlLl9leHBhbmRlZEluZGV4KSwocj1cInZcIj09PVMub3JpZW50YXRpb24pPyh6PVwic1wiLEM9XCJ4XCIpOihMPVwic1wiLEM9XCJ5XCIpLG09XCJpbnRlcnBvbGF0ZVwiPT09Uy5zdGFja2dhcHMpOmgodCxlLGIsXyx3LGssZihlLEEpKSxzPTA7czxBO3MrKyl7dmFyIE89VFtzXT17fSxJPW4od1tzXSksRD1uKGtbc10pO0kmJkQ/KE9bTF09d1tzXSxPW3pdPWtbc10pOlMmJihyP0k6RCk/KE9bQ109cj93W3NdOmtbc10sTy5nYXA9ITAsbT8oTy5zPW8sRT0hMCk6Ty5zPTApOk9bTF09T1t6XT1vLE0mJihPLmlkPVN0cmluZyhNW3NdKSl9aWYoYyhULGUpLGwodCxlKSx1KFQsZSksUyl7Zm9yKHM9MDtzPFQubGVuZ3RoOylUW3NdW0NdPT09bz9ULnNwbGljZShzLDEpOnMrKztpZihpLnNvcnQoVCxmdW5jdGlvbih0LGUpe3JldHVybiB0W0NdLWVbQ118fHQuaS1lLml9KSxFKXtmb3Iocz0wO3M8VC5sZW5ndGgtMSYmVFtzXS5nYXA7KXMrKztmb3IoKHk9VFtzXS5zKXx8KHk9VFtzXS5zPTApLGQ9MDtkPHM7ZCsrKVRbZF0ucz15O2Zvcih2PVQubGVuZ3RoLTE7dj5zJiZUW3ZdLmdhcDspdi0tO2Zvcih5PVRbdl0ucyxkPVQubGVuZ3RoLTE7ZD52O2QtLSlUW2RdLnM9eTtmb3IoO3M8djspaWYoVFsrK3NdLmdhcCl7Zm9yKGQ9cysxO1RbZF0uZ2FwOylkKys7Zm9yKHZhciBQPVRbcy0xXVtDXSxSPVRbcy0xXS5zLEY9KFRbZF0ucy1SKS8oVFtkXVtDXS1QKTtzPGQ7KVRbc10ucz1SKyhUW3NdW0NdLVApKkYscysrfX19cmV0dXJuIFR9LGNhbGNNYXJrZXJTaXplOmYsY2FsY0F4aXNFeHBhbnNpb246aCxzZXRGaXJzdFNjYXR0ZXI6cCxnZXRTdGFja09wdHM6Z319LHtcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4vYXJyYXlzX3RvX2NhbGNkYXRhXCI6MTA1MSxcIi4vY2FsY19zZWxlY3Rpb25cIjoxMDU0LFwiLi9jb2xvcnNjYWxlX2NhbGNcIjoxMDU1LFwiLi9zdWJ0eXBlc1wiOjEwNzYsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDEwNTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe24uaXNBcnJheU9yVHlwZWRBcnJheShlLnNlbGVjdGVkcG9pbnRzKSYmbi50YWdTZWxlY3RlZCh0LGUpfX0se1wiLi4vLi4vbGliXCI6NzAxfV0sMTA1NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVyc1wiKS5oYXNDb2xvcnNjYWxlLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCIpLGE9dChcIi4vc3VidHlwZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7YS5oYXNMaW5lcyhlKSYmbihlLFwibGluZVwiKSYmaSh0LGUse3ZhbHM6ZS5saW5lLmNvbG9yLGNvbnRhaW5lclN0cjpcImxpbmVcIixjTGV0dGVyOlwiY1wifSksYS5oYXNNYXJrZXJzKGUpJiYobihlLFwibWFya2VyXCIpJiZpKHQsZSx7dmFsczplLm1hcmtlci5jb2xvcixjb250YWluZXJTdHI6XCJtYXJrZXJcIixjTGV0dGVyOlwiY1wifSksbihlLFwibWFya2VyLmxpbmVcIikmJmkodCxlLHt2YWxzOmUubWFya2VyLmxpbmUuY29sb3IsY29udGFpbmVyU3RyOlwibWFya2VyLmxpbmVcIixjTGV0dGVyOlwiY1wifSkpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIjo1ODYsXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVyc1wiOjU4OSxcIi4vc3VidHlwZXNcIjoxMDc2fV0sMTA1NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17UFRTX0xJTkVTT05MWToyMCxtaW5Ub2xlcmFuY2U6LjIsdG9sZXJhbmNlR3Jvd3RoOjEwLG1heFNjcmVlbnNBd2F5OjIwLGV2ZW50RGF0YUtleXM6W119fSx7fV0sMTA1NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2NhbGNcIik7ZnVuY3Rpb24gaSh0LGUscixuLGksYSxvKXtpW25dPSEwO3ZhciBzPXtpOm51bGwsZ2FwOiEwLHM6MH07aWYoc1tvXT1yLHQuc3BsaWNlKGUsMCxzKSxlJiZyPT09dFtlLTFdW29dKXt2YXIgbD10W2UtMV07cy5zPWwucyxzLmk9bC5pLHMuZ2FwPWwuZ2FwfWVsc2UgYSYmKHMucz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10W2UtMV0sYT10W2UrMV07cmV0dXJuIGE/aT9pLnMrKGEucy1pLnMpKihyLWlbbl0pLyhhW25dLWlbbl0pOmEuczppLnN9KHQsZSxyLG8pKTtlfHwodFswXS50PXRbMV0udCx0WzBdLnRyYWNlPXRbMV0udHJhY2UsZGVsZXRlIHRbMV0udCxkZWxldGUgdFsxXS50cmFjZSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS54YXhpcyxhPWUueWF4aXMsbz1yLl9pZCthLl9pZCxzPXQuX2Z1bGxMYXlvdXQuX3NjYXR0ZXJTdGFja09wdHNbb107aWYocyl7dmFyIGwsYyx1LGgsZixwLGQsZyx2LG0seSx4LGIsXyx3LGs9dC5jYWxjZGF0YTtmb3IodmFyIEEgaW4gcyl7dmFyIFQ9KG09c1tBXSkudHJhY2VJbmRpY2VzO2lmKFQubGVuZ3RoKXtmb3IoeT1cImludGVycG9sYXRlXCI9PT1tLnN0YWNrZ2Fwcyx4PW0uZ3JvdXBub3JtLFwidlwiPT09bS5vcmllbnRhdGlvbj8oYj1cInhcIixfPVwieVwiKTooYj1cInlcIixfPVwieFwiKSx3PW5ldyBBcnJheShULmxlbmd0aCksbD0wO2w8dy5sZW5ndGg7bCsrKXdbbF09ITE7cD1rW1RbMF1dO3ZhciBNPW5ldyBBcnJheShwLmxlbmd0aCk7Zm9yKGw9MDtsPHAubGVuZ3RoO2wrKylNW2xdPXBbbF1bYl07Zm9yKGw9MTtsPFQubGVuZ3RoO2wrKyl7Zm9yKGY9a1tUW2xdXSxjPXU9MDtjPGYubGVuZ3RoO2MrKyl7Zm9yKGQ9ZltjXVtiXTtkPk1bdV0mJnU8TS5sZW5ndGg7dSsrKWkoZixjLE1bdV0sbCx3LHksYiksYysrO2lmKGQhPT1NW3VdKXtmb3IoaD0wO2g8bDtoKyspaShrW1RbaF1dLHUsZCxoLHcseSxiKTtNLnNwbGljZSh1LDAsZCl9dSsrfWZvcig7dTxNLmxlbmd0aDt1KyspaShmLGMsTVt1XSxsLHcseSxiKSxjKyt9dmFyIFM9TS5sZW5ndGg7Zm9yKGM9MDtjPHAubGVuZ3RoO2MrKyl7Zm9yKGc9cFtjXVtfXT1wW2NdLnMsbD0xO2w8VC5sZW5ndGg7bCsrKShmPWtbVFtsXV0pWzBdLnRyYWNlLl9yYXdMZW5ndGg9ZlswXS50cmFjZS5fbGVuZ3RoLGZbMF0udHJhY2UuX2xlbmd0aD1TLGcrPWZbY10ucyxmW2NdW19dPWc7aWYoeClmb3Iodj0oXCJmcmFjdGlvblwiPT09eD9nOmcvMTAwKXx8MSxsPTA7bDxULmxlbmd0aDtsKyspe3ZhciBFPWtbVFtsXV1bY107RVtfXS89dixFLnNOb3JtPUUucy92fX1mb3IobD0wO2w8VC5sZW5ndGg7bCsrKXt2YXIgQz0oZj1rW1RbbF1dKVswXS50cmFjZSxMPW4uY2FsY01hcmtlclNpemUoQyxDLl9yYXdMZW5ndGgpLHo9QXJyYXkuaXNBcnJheShMKTtpZihMJiZ3W2xdfHx6KXt2YXIgTz1MO2ZvcihMPW5ldyBBcnJheShTKSxjPTA7YzxTO2MrKylMW2NdPWZbY10uZ2FwPzA6ej9PW2ZbY10uaV06T312YXIgST1uZXcgQXJyYXkoUyksRD1uZXcgQXJyYXkoUyk7Zm9yKGM9MDtjPFM7YysrKUlbY109ZltjXS54LERbY109ZltjXS55O24uY2FsY0F4aXNFeHBhbnNpb24odCxDLHIsYSxJLEQsTCksZlswXS50Lm9yaWVudGF0aW9uPW0ub3JpZW50YXRpb259fX19fX0se1wiLi9jYWxjXCI6MTA1M31dLDEwNTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRbZV07aWYoXCJzY2F0dGVyXCI9PT1yLnR5cGUpe3ZhciBuPXIuZmlsbDtpZihcIm5vbmVcIiE9PW4mJlwidG9zZWxmXCIhPT1uJiYoci5vcGFjaXR5PXZvaWQgMCxcInRvbmV4dHlcIj09PW58fFwidG9uZXh0eFwiPT09bikpZm9yKHZhciBpPWUtMTtpPj0wO2ktLSl7dmFyIGE9dFtpXTtpZihcInNjYXR0ZXJcIj09PWEudHlwZSYmYS54YXhpcz09PXIueGF4aXMmJmEueWF4aXM9PT1yLnlheGlzKXthLm9wYWNpdHk9dm9pZCAwO2JyZWFrfX19fX19LHt9XSwxMDU5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxhPXQoXCIuL2F0dHJpYnV0ZXNcIiksbz10KFwiLi9jb25zdGFudHNcIikscz10KFwiLi9zdWJ0eXBlc1wiKSxsPXQoXCIuL3h5X2RlZmF1bHRzXCIpLGM9dChcIi4vc3RhY2tfZGVmYXVsdHNcIiksdT10KFwiLi9tYXJrZXJfZGVmYXVsdHNcIiksaD10KFwiLi9saW5lX2RlZmF1bHRzXCIpLGY9dChcIi4vbGluZV9zaGFwZV9kZWZhdWx0c1wiKSxwPXQoXCIuL3RleHRfZGVmYXVsdHNcIiksZD10KFwiLi9maWxsY29sb3JfZGVmYXVsdHNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGcpe2Z1bmN0aW9uIHYocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgbT1sKHQsZSxnLHYpO2lmKG18fChlLnZpc2libGU9ITEpLGUudmlzaWJsZSl7dmFyIHk9Yyh0LGUsZyx2KSx4PSF5JiZtPG8uUFRTX0xJTkVTT05MWT9cImxpbmVzK21hcmtlcnNcIjpcImxpbmVzXCI7dihcInRleHRcIiksdihcImhvdmVydGV4dFwiKSx2KFwibW9kZVwiLHgpLHMuaGFzTGluZXMoZSkmJihoKHQsZSxyLGcsdiksZih0LGUsdiksdihcImNvbm5lY3RnYXBzXCIpLHYoXCJsaW5lLnNpbXBsaWZ5XCIpKSxzLmhhc01hcmtlcnMoZSkmJnUodCxlLHIsZyx2LHtncmFkaWVudDohMH0pLHMuaGFzVGV4dChlKSYmcCh0LGUsZyx2KTt2YXIgYj1bXTsocy5oYXNNYXJrZXJzKGUpfHxzLmhhc1RleHQoZSkpJiYodihcImNsaXBvbmF4aXNcIiksdihcIm1hcmtlci5tYXhkaXNwbGF5ZWRcIiksYi5wdXNoKFwicG9pbnRzXCIpKSx2KFwiZmlsbFwiLHk/eS5maWxsRGZsdDpcIm5vbmVcIiksXCJub25lXCIhPT1lLmZpbGwmJihkKHQsZSxyLHYpLHMuaGFzTGluZXMoZSl8fGYodCxlLHYpKTt2YXIgXz0oZS5saW5lfHx7fSkuY29sb3Isdz0oZS5tYXJrZXJ8fHt9KS5jb2xvcjtcInRvbmV4dFwiIT09ZS5maWxsJiZcInRvc2VsZlwiIT09ZS5maWxsfHxiLnB1c2goXCJmaWxsc1wiKSx2KFwiaG92ZXJvblwiLGIuam9pbihcIitcIil8fFwicG9pbnRzXCIpLFwiZmlsbHNcIiE9PWUuaG92ZXJvbiYmdihcImhvdmVydGVtcGxhdGVcIik7dmFyIGs9aS5nZXRDb21wb25lbnRNZXRob2QoXCJlcnJvcmJhcnNcIixcInN1cHBseURlZmF1bHRzXCIpO2sodCxlLF98fHd8fHIse2F4aXM6XCJ5XCJ9KSxrKHQsZSxffHx3fHxyLHtheGlzOlwieFwiLGluaGVyaXQ6XCJ5XCJ9KSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSx2KX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vYXR0cmlidXRlc1wiOjEwNTIsXCIuL2NvbnN0YW50c1wiOjEwNTYsXCIuL2ZpbGxjb2xvcl9kZWZhdWx0c1wiOjEwNjEsXCIuL2xpbmVfZGVmYXVsdHNcIjoxMDY1LFwiLi9saW5lX3NoYXBlX2RlZmF1bHRzXCI6MTA2NyxcIi4vbWFya2VyX2RlZmF1bHRzXCI6MTA3MSxcIi4vc3RhY2tfZGVmYXVsdHNcIjoxMDc0LFwiLi9zdWJ0eXBlc1wiOjEwNzYsXCIuL3RleHRfZGVmYXVsdHNcIjoxMDc3LFwiLi94eV9kZWZhdWx0c1wiOjEwNzh9XSwxMDYwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKTtmdW5jdGlvbiBpKHQpe3JldHVybiB0fHwwPT09dH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPUFycmF5LmlzQXJyYXkocik/ZnVuY3Rpb24odCl7ci5wdXNoKHQpfTpmdW5jdGlvbih0KXtyLnRleHQ9dH0sbz1uLmV4dHJhY3RPcHRpb24odCxlLFwiaHR4XCIsXCJob3ZlcnRleHRcIik7aWYoaShvKSlyZXR1cm4gYShvKTt2YXIgcz1uLmV4dHJhY3RPcHRpb24odCxlLFwidHhcIixcInRleHRcIik7cmV0dXJuIGkocyk/YShzKTp2b2lkIDB9fSx7XCIuLi8uLi9saWJcIjo3MDF9XSwxMDYxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksaT10KFwiLi4vLi4vbGliXCIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPSExO2lmKGUubWFya2VyKXt2YXIgcz1lLm1hcmtlci5jb2xvcixsPShlLm1hcmtlci5saW5lfHx7fSkuY29sb3I7cyYmIWkocyk/bz1zOmwmJiFpKGwpJiYobz1sKX1hKFwiZmlsbGNvbG9yXCIsbi5hZGRPcGFjaXR5KChlLmxpbmV8fHt9KS5jb2xvcnx8b3x8ciwuNSkpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2xpYlwiOjcwMX1dLDEwNjI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxpPXQoXCIuL3N1YnR5cGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGE7aWYoXCJsaW5lc1wiPT09dC5tb2RlKXJldHVybihyPXQubGluZS5jb2xvcikmJm4ub3BhY2l0eShyKT9yOnQuZmlsbGNvbG9yO2lmKFwibm9uZVwiPT09dC5tb2RlKXJldHVybiB0LmZpbGw/dC5maWxsY29sb3I6XCJcIjt2YXIgbz1lLm1jY3x8KHQubWFya2VyfHx7fSkuY29sb3Iscz1lLm1sY2N8fCgodC5tYXJrZXJ8fHt9KS5saW5lfHx7fSkuY29sb3I7cmV0dXJuKGE9byYmbi5vcGFjaXR5KG8pP286cyYmbi5vcGFjaXR5KHMpJiYoZS5tbHd8fCgodC5tYXJrZXJ8fHt9KS5saW5lfHx7fSkud2lkdGgpP3M6XCJcIik/bi5vcGFjaXR5KGEpPC4zP24uYWRkT3BhY2l0eShhLC4zKTphOihyPSh0LmxpbmV8fHt9KS5jb2xvcikmJm4ub3BhY2l0eShyKSYmaS5oYXNMaW5lcyh0KSYmdC5saW5lLndpZHRoP3I6dC5maWxsY29sb3J9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi9zdWJ0eXBlc1wiOjEwNzZ9XSwxMDYzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4XCIpLGE9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLG89dChcIi4vZ2V0X3RyYWNlX2NvbG9yXCIpLHM9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksbD10KFwiLi9maWxsX2hvdmVyX3RleHRcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe3ZhciB1PXQuY2QsaD11WzBdLnRyYWNlLGY9dC54YSxwPXQueWEsZD1mLmMycChlKSxnPXAuYzJwKHIpLHY9W2QsZ10sbT1oLmhvdmVyb258fFwiXCIseT0tMSE9PWgubW9kZS5pbmRleE9mKFwibWFya2Vyc1wiKT8zOi41O2lmKC0xIT09bS5pbmRleE9mKFwicG9pbnRzXCIpKXt2YXIgeD1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCh5LHQubXJjfHwwKSxyPWYuYzJwKHQueCktZCxuPXAuYzJwKHQueSktZztyZXR1cm4gTWF0aC5tYXgoTWF0aC5zcXJ0KHIqcituKm4pLWUsMS15L2UpfSxiPWkuZ2V0RGlzdGFuY2VGdW5jdGlvbihjLGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDMsdC5tcmN8fDApLHI9MS0xL2Usbj1NYXRoLmFicyhmLmMycCh0LngpLWQpO3JldHVybiBuPGU/cipuL2U6bi1lK3J9LGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDMsdC5tcmN8fDApLHI9MS0xL2Usbj1NYXRoLmFicyhwLmMycCh0LnkpLWcpO3JldHVybiBuPGU/cipuL2U6bi1lK3J9LHgpO2lmKGkuZ2V0Q2xvc2VzdCh1LGIsdCksITEhPT10LmluZGV4KXt2YXIgXz11W3QuaW5kZXhdLHc9Zi5jMnAoXy54LCEwKSxrPXAuYzJwKF8ueSwhMCksQT1fLm1yY3x8MTt0LmluZGV4PV8uaTt2YXIgVD11WzBdLnQub3JpZW50YXRpb24sTT1UJiYoXy5zTm9ybXx8Xy5zKSxTPVwiaFwiPT09VD9NOl8ueCxFPVwidlwiPT09VD9NOl8ueTtyZXR1cm4gbi5leHRlbmRGbGF0KHQse2NvbG9yOm8oaCxfKSx4MDp3LUEseDE6dytBLHhMYWJlbFZhbDpTLHkwOmstQSx5MTprK0EseUxhYmVsVmFsOkUsc3Bpa2VEaXN0YW5jZTp4KF8pLGhvdmVydGVtcGxhdGU6aC5ob3ZlcnRlbXBsYXRlfSksbChfLGgsdCksYS5nZXRDb21wb25lbnRNZXRob2QoXCJlcnJvcmJhcnNcIixcImhvdmVySW5mb1wiKShfLGgsdCksW3RdfX1pZigtMSE9PW0uaW5kZXhPZihcImZpbGxzXCIpJiZoLl9wb2x5Z29ucyl7dmFyIEMsTCx6LE8sSSxELFAsUixGLEI9aC5fcG9seWdvbnMsTj1bXSxqPSExLFY9MS8wLFU9LTEvMCxxPTEvMCxIPS0xLzA7Zm9yKEM9MDtDPEIubGVuZ3RoO0MrKykoej1CW0NdKS5jb250YWlucyh2KSYmKGo9IWosTi5wdXNoKHopLHE9TWF0aC5taW4ocSx6LnltaW4pLEg9TWF0aC5tYXgoSCx6LnltYXgpKTtpZihqKXt2YXIgRz0oKHE9TWF0aC5tYXgocSwwKSkrKEg9TWF0aC5taW4oSCxwLl9sZW5ndGgpKSkvMjtmb3IoQz0wO0M8Ti5sZW5ndGg7QysrKWZvcihPPU5bQ10ucHRzLEw9MTtMPE8ubGVuZ3RoO0wrKykoUj1PW0wtMV1bMV0pPkchPShGPU9bTF1bMV0pPj1HJiYoRD1PW0wtMV1bMF0sUD1PW0xdWzBdLEYtUiYmKEk9RCsoUC1EKSooRy1SKS8oRi1SKSxWPU1hdGgubWluKFYsSSksVT1NYXRoLm1heChVLEkpKSk7Vj1NYXRoLm1heChWLDApLFU9TWF0aC5taW4oVSxmLl9sZW5ndGgpO3ZhciBZPXMuZGVmYXVsdExpbmU7cmV0dXJuIHMub3BhY2l0eShoLmZpbGxjb2xvcik/WT1oLmZpbGxjb2xvcjpzLm9wYWNpdHkoKGgubGluZXx8e30pLmNvbG9yKSYmKFk9aC5saW5lLmNvbG9yKSxuLmV4dGVuZEZsYXQodCx7ZGlzdGFuY2U6dC5tYXhIb3ZlckRpc3RhbmNlLHgwOlYseDE6VSx5MDpHLHkxOkcsY29sb3I6WSxob3ZlcnRlbXBsYXRlOiExfSksZGVsZXRlIHQuaW5kZXgsaC50ZXh0JiYhQXJyYXkuaXNBcnJheShoLnRleHQpP3QudGV4dD1TdHJpbmcoaC50ZXh0KTp0LnRleHQ9aC5uYW1lLFt0XX19fX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vZmlsbF9ob3Zlcl90ZXh0XCI6MTA2MCxcIi4vZ2V0X3RyYWNlX2NvbG9yXCI6MTA2Mn1dLDEwNjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fSxpPXQoXCIuL3N1YnR5cGVzXCIpO24uaGFzTGluZXM9aS5oYXNMaW5lcyxuLmhhc01hcmtlcnM9aS5oYXNNYXJrZXJzLG4uaGFzVGV4dD1pLmhhc1RleHQsbi5pc0J1YmJsZT1pLmlzQnViYmxlLG4uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIiksbi5jcm9zc1RyYWNlRGVmYXVsdHM9dChcIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHNcIiksbi5jYWxjPXQoXCIuL2NhbGNcIikuY2FsYyxuLmNyb3NzVHJhY2VDYWxjPXQoXCIuL2Nyb3NzX3RyYWNlX2NhbGNcIiksbi5hcnJheXNUb0NhbGNkYXRhPXQoXCIuL2FycmF5c190b19jYWxjZGF0YVwiKSxuLnBsb3Q9dChcIi4vcGxvdFwiKSxuLmNvbG9yYmFyPXQoXCIuL21hcmtlcl9jb2xvcmJhclwiKSxuLnN0eWxlPXQoXCIuL3N0eWxlXCIpLnN0eWxlLG4uc3R5bGVPblNlbGVjdD10KFwiLi9zdHlsZVwiKS5zdHlsZU9uU2VsZWN0LG4uaG92ZXJQb2ludHM9dChcIi4vaG92ZXJcIiksbi5zZWxlY3RQb2ludHM9dChcIi4vc2VsZWN0XCIpLG4uYW5pbWF0YWJsZT0hMCxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cInNjYXR0ZXJcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIiksbi5jYXRlZ29yaWVzPVtcImNhcnRlc2lhblwiLFwic3ZnXCIsXCJzeW1ib2xzXCIsXCJlcnJvckJhcnNPS1wiLFwic2hvd0xlZ2VuZFwiLFwic2NhdHRlci1saWtlXCIsXCJ6b29tU2NhbGVcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIjo3NjAsXCIuL2FycmF5c190b19jYWxjZGF0YVwiOjEwNTEsXCIuL2F0dHJpYnV0ZXNcIjoxMDUyLFwiLi9jYWxjXCI6MTA1MyxcIi4vY3Jvc3NfdHJhY2VfY2FsY1wiOjEwNTcsXCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzXCI6MTA1OCxcIi4vZGVmYXVsdHNcIjoxMDU5LFwiLi9ob3ZlclwiOjEwNjMsXCIuL21hcmtlcl9jb2xvcmJhclwiOjEwNzAsXCIuL3Bsb3RcIjoxMDcyLFwiLi9zZWxlY3RcIjoxMDczLFwiLi9zdHlsZVwiOjEwNzUsXCIuL3N1YnR5cGVzXCI6MTA3Nn1dLDEwNjU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLmlzQXJyYXlPclR5cGVkQXJyYXksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnNcIikuaGFzQ29sb3JzY2FsZSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyxsKXt2YXIgYz0odC5tYXJrZXJ8fHt9KS5jb2xvcjsocyhcImxpbmUuY29sb3JcIixyKSxpKHQsXCJsaW5lXCIpKT9hKHQsZSxvLHMse3ByZWZpeDpcImxpbmUuXCIsY0xldHRlcjpcImNcIn0pOnMoXCJsaW5lLmNvbG9yXCIsIW4oYykmJmN8fHIpO3MoXCJsaW5lLndpZHRoXCIpLChsfHx7fSkubm9EYXNofHxzKFwibGluZS5kYXNoXCIpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCI6NTg4LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnNcIjo1ODksXCIuLi8uLi9saWJcIjo3MDF9XSwxMDY2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIiksaT1uLkJBRE5VTSxhPW4uTE9HX0NMSVAsbz1hKy41LHM9YS0uNSxsPXQoXCIuLi8uLi9saWJcIiksYz1sLnNlZ21lbnRzSW50ZXJzZWN0LHU9bC5jb25zdHJhaW4saD10KFwiLi9jb25zdGFudHNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixhLGYscCxkLGcsdixtLHkseCxiLF8sdyxrLEEsVCxNLFM9ZS54YXhpcyxFPWUueWF4aXMsQz1cImxvZ1wiPT09Uy50eXBlLEw9XCJsb2dcIj09PUUudHlwZSx6PVMuX2xlbmd0aCxPPUUuX2xlbmd0aCxJPWUuY29ubmVjdEdhcHMsRD1lLmJhc2VUb2xlcmFuY2UsUD1lLnNoYXBlLFI9XCJsaW5lYXJcIj09PVAsRj1lLmZpbGwmJlwibm9uZVwiIT09ZS5maWxsLEI9W10sTj1oLm1pblRvbGVyYW5jZSxqPXQubGVuZ3RoLFY9bmV3IEFycmF5KGopLFU9MDtmdW5jdGlvbiBxKGUpe3ZhciByPXRbZV07aWYoIXIpcmV0dXJuITE7dmFyIG49Uy5jMnAoci54KSxhPUUuYzJwKHIueSk7aWYobj09PWkpe2lmKEMmJihuPVMuYzJwKHIueCwhMCkpLG49PT1pKXJldHVybiExO0wmJmE9PT1pJiYobio9TWF0aC5hYnMoUy5fbSpPKihTLl9tPjA/bzpzKS8oRS5fbSp6KihFLl9tPjA/bzpzKSkpKSxuKj0xZTN9aWYoYT09PWkpe2lmKEwmJihhPUUuYzJwKHIueSwhMCkpLGE9PT1pKXJldHVybiExO2EqPTFlM31yZXR1cm5bbixhXX1mdW5jdGlvbiBIKHQsZSxyLG4pe3ZhciBpPXItdCxhPW4tZSxvPS41LXQscz0uNS1lLGw9aSppK2EqYSxjPWkqbythKnM7aWYoYz4wJiZjPGwpe3ZhciB1PW8qYS1zKmk7aWYodSp1PGwpcmV0dXJuITB9fWZ1bmN0aW9uIEcodCxlKXt2YXIgcj10WzBdL3osbj10WzFdL08saT1NYXRoLm1heCgwLC1yLHItMSwtbixuLTEpO3JldHVybiBpJiZ2b2lkIDAhPT1UJiZIKHIsbixULE0pJiYoaT0wKSxpJiZlJiZIKHIsbixlWzBdL3osZVsxXS9PKSYmKGk9MCksKDEraC50b2xlcmFuY2VHcm93dGgqaSkqRH1mdW5jdGlvbiBZKHQsZSl7dmFyIHI9dFswXS1lWzBdLG49dFsxXS1lWzFdO3JldHVybiBNYXRoLnNxcnQocipyK24qbil9dmFyIFcsWCxaLCQsSixLLFEsdHQ9aC5tYXhTY3JlZW5zQXdheSxldD0teip0dCxydD16KigxK3R0KSxudD0tTyp0dCxpdD1PKigxK3R0KSxhdD1bW2V0LG50LHJ0LG50XSxbcnQsbnQscnQsaXRdLFtydCxpdCxldCxpdF0sW2V0LGl0LGV0LG50XV07ZnVuY3Rpb24gb3QodCl7aWYodFswXTxldHx8dFswXT5ydHx8dFsxXTxudHx8dFsxXT5pdClyZXR1cm5bdSh0WzBdLGV0LHJ0KSx1KHRbMV0sbnQsaXQpXX1mdW5jdGlvbiBzdCh0LGUpe3JldHVybiB0WzBdPT09ZVswXSYmKHRbMF09PT1ldHx8dFswXT09PXJ0KXx8KHRbMV09PT1lWzFdJiYodFsxXT09PW50fHx0WzFdPT09aXQpfHx2b2lkIDApfWZ1bmN0aW9uIGx0KHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24obixpKXt2YXIgYT1vdChuKSxvPW90KGkpLHM9W107aWYoYSYmbyYmc3QoYSxvKSlyZXR1cm4gczthJiZzLnB1c2goYSksbyYmcy5wdXNoKG8pO3ZhciBjPTIqbC5jb25zdHJhaW4oKG5bdF0raVt0XSkvMixlLHIpLSgoYXx8bilbdF0rKG98fGkpW3RdKTtjJiYoKGEmJm8/Yz4wPT1hW3RdPm9bdF0/YTpvOmF8fG8pW3RdKz1jKTtyZXR1cm4gc319ZnVuY3Rpb24gY3QodCl7dmFyIGU9dFswXSxyPXRbMV0sbj1lPT09VltVLTFdWzBdLGk9cj09PVZbVS0xXVsxXTtpZighbnx8IWkpaWYoVT4xKXt2YXIgYT1lPT09VltVLTJdWzBdLG89cj09PVZbVS0yXVsxXTtuJiYoZT09PWV0fHxlPT09cnQpJiZhP28/VS0tOlZbVS0xXT10OmkmJihyPT09bnR8fHI9PT1pdCkmJm8/YT9VLS06VltVLTFdPXQ6VltVKytdPXR9ZWxzZSBWW1UrK109dH1mdW5jdGlvbiB1dCh0KXtWW1UtMV1bMF0hPT10WzBdJiZWW1UtMV1bMV0hPT10WzFdJiZjdChbWiwkXSksY3QodCksSj1udWxsLFo9JD0wfWZ1bmN0aW9uIGh0KHQpe2lmKFQ9dFswXS96LE09dFsxXS9PLFc9dFswXTxldD9ldDp0WzBdPnJ0P3J0OjAsWD10WzFdPG50P250OnRbMV0+aXQ/aXQ6MCxXfHxYKXtpZihVKWlmKEope3ZhciBlPVEoSix0KTtlLmxlbmd0aD4xJiYodXQoZVswXSksVltVKytdPWVbMV0pfWVsc2UgSz1RKFZbVS0xXSx0KVswXSxWW1UrK109SztlbHNlIFZbVSsrXT1bV3x8dFswXSxYfHx0WzFdXTt2YXIgcj1WW1UtMV07VyYmWCYmKHJbMF0hPT1XfHxyWzFdIT09WCk/KEomJihaIT09VyYmJCE9PVg/Y3QoWiYmJD8obj1KLGE9KGk9dClbMF0tblswXSxvPShpWzFdLW5bMV0pL2EsKG5bMV0qaVswXS1pWzFdKm5bMF0pL2E+MD9bbz4wP2V0OnJ0LGl0XTpbbz4wP3J0OmV0LG50XSk6W1p8fFcsJHx8WF0pOlomJiQmJmN0KFtaLCRdKSksY3QoW1csWF0pKTpaLVcmJiQtWCYmY3QoW1d8fFosWHx8JF0pLEo9dCxaPVcsJD1YfWVsc2UgSiYmdXQoUShKLHQpWzBdKSxWW1UrK109dDt2YXIgbixpLGEsb31mb3IoXCJsaW5lYXJcIj09PVB8fFwic3BsaW5lXCI9PT1QP1E9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj0wLGk9MDtpPDQ7aSsrKXt2YXIgYT1hdFtpXSxvPWModFswXSx0WzFdLGVbMF0sZVsxXSxhWzBdLGFbMV0sYVsyXSxhWzNdKTtvJiYoIW58fE1hdGguYWJzKG8ueC1yWzBdWzBdKT4xfHxNYXRoLmFicyhvLnktclswXVsxXSk+MSkmJihvPVtvLngsby55XSxuJiZZKG8sdCk8WShyWzBdLHQpP3IudW5zaGlmdChvKTpyLnB1c2gobyksbisrKX1yZXR1cm4gcn06XCJodlwiPT09UHx8XCJ2aFwiPT09UD9RPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W10sbj1vdCh0KSxpPW90KGUpO3JldHVybiBuJiZpJiZzdChuLGkpP3I6KG4mJnIucHVzaChuKSxpJiZyLnB1c2goaSkscil9OlwiaHZoXCI9PT1QP1E9bHQoMCxldCxydCk6XCJ2aHZcIj09PVAmJihRPWx0KDEsbnQsaXQpKSxyPTA7cjxqO3IrKylpZihuPXEocikpe2ZvcihVPTAsSj1udWxsLGh0KG4pLHIrKztyPGo7cisrKXtpZighKGY9cShyKSkpe2lmKEkpY29udGludWU7YnJlYWt9aWYoUiYmZS5zaW1wbGlmeSl7dmFyIGZ0PXEocisxKTtpZih5PVkoZixuKSxGJiYoMD09PVV8fFU9PT1qLTEpfHwhKHk8RyhmLGZ0KSpOKSl7Zm9yKHY9WyhmWzBdLW5bMF0pL3ksKGZbMV0tblsxXSkveV0scD1uLHg9eSxiPXc9az0wLGc9ITEsYT1mLHIrKztyPHQubGVuZ3RoO3IrKyl7aWYoZD1mdCxmdD1xKHIrMSksIWQpe2lmKEkpY29udGludWU7YnJlYWt9aWYoQT0obT1bZFswXS1uWzBdLGRbMV0tblsxXV0pWzBdKnZbMV0tbVsxXSp2WzBdLHc9TWF0aC5taW4odyxBKSwoaz1NYXRoLm1heChrLEEpKS13PkcoZCxmdCkpYnJlYWs7YT1kLChfPW1bMF0qdlswXSttWzFdKnZbMV0pPng/KHg9XyxmPWQsZz0hMSk6XzxiJiYoYj1fLHA9ZCxnPSEwKX1pZihnPyhodChmKSxhIT09cCYmaHQocCkpOihwIT09biYmaHQocCksYSE9PWYmJmh0KGYpKSxodChhKSxyPj10Lmxlbmd0aHx8IWQpYnJlYWs7aHQoZCksbj1kfX1lbHNlIGh0KGYpfUomJmN0KFtafHxKWzBdLCR8fEpbMV1dKSxCLnB1c2goVi5zbGljZSgwLFUpKX1yZXR1cm4gQn19LHtcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuL2NvbnN0YW50c1wiOjEwNTZ9XSwxMDY3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtcInNwbGluZVwiPT09cihcImxpbmUuc2hhcGVcIikmJnIoXCJsaW5lLnNtb290aGluZ1wiKX19LHt9XSwxMDY4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e3RvbmV4dHg6MSx0b25leHR5OjEsdG9uZXh0OjF9O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGksYSxvLHMsbCxjPXt9LHU9ITEsaD0tMSxmPTAscD0tMTtmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKShvPShpPXJbYV1bMF0udHJhY2UpLnN0YWNrZ3JvdXB8fFwiXCIpP28gaW4gYz9sPWNbb106KGw9Y1tvXT1mLGYrKyk6aS5maWxsIGluIG4mJnA+PTA/bD1wOihsPXA9ZixmKyspLGw8aCYmKHU9ITApLGkuX2dyb3VwSW5kZXg9aD1sO3ZhciBkPXIuc2xpY2UoKTt1JiZkLnNvcnQoZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLnRyYWNlLG49ZVswXS50cmFjZTtyZXR1cm4gci5fZ3JvdXBJbmRleC1uLl9ncm91cEluZGV4fHxyLmluZGV4LW4uaW5kZXh9KTt2YXIgZz17fTtmb3IoYT0wO2E8ZC5sZW5ndGg7YSsrKW89KGk9ZFthXVswXS50cmFjZSkuc3RhY2tncm91cHx8XCJcIiwhMD09PWkudmlzaWJsZT8oaS5fbmV4dHRyYWNlPW51bGwsaS5maWxsIGluIG4mJihzPWdbb10saS5fcHJldnRyYWNlPXN8fG51bGwscyYmKHMuX25leHR0cmFjZT1pKSksaS5fb3duZmlsbD1pLmZpbGwmJihcInRvemVyb1wiPT09aS5maWxsLnN1YnN0cigwLDYpfHxcInRvc2VsZlwiPT09aS5maWxsfHxcInRvXCI9PT1pLmZpbGwuc3Vic3RyKDAsMikmJiFpLl9wcmV2dHJhY2UpLGdbb109aSk6aS5fcHJldnRyYWNlPWkuX25leHR0cmFjZT1pLl9vd25maWxsPW51bGw7cmV0dXJuIGR9fSx7fV0sMTA2OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXJrZXIscj1lLnNpemVyZWZ8fDEsaT1lLnNpemVtaW58fDAsYT1cImFyZWFcIj09PWUuc2l6ZW1vZGU/ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydCh0L3IpfTpmdW5jdGlvbih0KXtyZXR1cm4gdC9yfTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9YSh0LzIpO3JldHVybiBuKGUpJiZlPjA/TWF0aC5tYXgoZSxpKTowfX19LHtcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sMTA3MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17Y29udGFpbmVyOlwibWFya2VyXCIsbWluOlwiY21pblwiLG1heDpcImNtYXhcIn19LHt9XSwxMDcxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnNcIikuaGFzQ29sb3JzY2FsZSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIiksbz10KFwiLi9zdWJ0eXBlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyxsLGMpe3ZhciB1PW8uaXNCdWJibGUodCksaD0odC5saW5lfHx7fSkuY29sb3I7KGM9Y3x8e30saCYmKHI9aCksbChcIm1hcmtlci5zeW1ib2xcIiksbChcIm1hcmtlci5vcGFjaXR5XCIsdT8uNzoxKSxsKFwibWFya2VyLnNpemVcIiksbChcIm1hcmtlci5jb2xvclwiLHIpLGkodCxcIm1hcmtlclwiKSYmYSh0LGUscyxsLHtwcmVmaXg6XCJtYXJrZXIuXCIsY0xldHRlcjpcImNcIn0pLGMubm9TZWxlY3R8fChsKFwic2VsZWN0ZWQubWFya2VyLmNvbG9yXCIpLGwoXCJ1bnNlbGVjdGVkLm1hcmtlci5jb2xvclwiKSxsKFwic2VsZWN0ZWQubWFya2VyLnNpemVcIiksbChcInVuc2VsZWN0ZWQubWFya2VyLnNpemVcIikpLGMubm9MaW5lfHwobChcIm1hcmtlci5saW5lLmNvbG9yXCIsaCYmIUFycmF5LmlzQXJyYXkoaCkmJmUubWFya2VyLmNvbG9yIT09aD9oOnU/bi5iYWNrZ3JvdW5kOm4uZGVmYXVsdExpbmUpLGkodCxcIm1hcmtlci5saW5lXCIpJiZhKHQsZSxzLGwse3ByZWZpeDpcIm1hcmtlci5saW5lLlwiLGNMZXR0ZXI6XCJjXCJ9KSxsKFwibWFya2VyLmxpbmUud2lkdGhcIix1PzE6MCkpLHUmJihsKFwibWFya2VyLnNpemVyZWZcIiksbChcIm1hcmtlci5zaXplbWluXCIpLGwoXCJtYXJrZXIuc2l6ZW1vZGVcIikpLGMuZ3JhZGllbnQpJiYoXCJub25lXCIhPT1sKFwibWFya2VyLmdyYWRpZW50LnR5cGVcIikmJmwoXCJtYXJrZXIuZ3JhZGllbnQuY29sb3JcIikpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiOjU4OCxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzXCI6NTg5LFwiLi9zdWJ0eXBlc1wiOjEwNzZ9XSwxMDcyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGE9dChcIi4uLy4uL2xpYlwiKSxvPWEuZW5zdXJlU2luZ2xlLHM9YS5pZGVudGl0eSxsPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksYz10KFwiLi9zdWJ0eXBlc1wiKSx1PXQoXCIuL2xpbmVfcG9pbnRzXCIpLGg9dChcIi4vbGlua190cmFjZXNcIiksZj10KFwiLi4vLi4vbGliL3BvbHlnb25cIikudGVzdGVyO2Z1bmN0aW9uIHAodCxlLHIsaCxwLGQsZyl7dmFyIHY7IWZ1bmN0aW9uKHQsZSxyLGksbyl7dmFyIHM9ci54YXhpcyxsPXIueWF4aXMsdT1uLmV4dGVudChhLnNpbXBsZU1hcChzLnJhbmdlLHMucjJjKSksaD1uLmV4dGVudChhLnNpbXBsZU1hcChsLnJhbmdlLGwucjJjKSksZj1pWzBdLnRyYWNlO2lmKCFjLmhhc01hcmtlcnMoZikpcmV0dXJuO3ZhciBwPWYubWFya2VyLm1heGRpc3BsYXllZDtpZigwPT09cClyZXR1cm47dmFyIGQ9aS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQueD49dVswXSYmdC54PD11WzFdJiZ0Lnk+PWhbMF0mJnQueTw9aFsxXX0pLGc9TWF0aC5jZWlsKGQubGVuZ3RoL3ApLHY9MDtvLmZvckVhY2goZnVuY3Rpb24odCxyKXt2YXIgbj10WzBdLnRyYWNlO2MuaGFzTWFya2VycyhuKSYmbi5tYXJrZXIubWF4ZGlzcGxheWVkPjAmJnI8ZSYmdisrfSk7dmFyIG09TWF0aC5yb3VuZCh2KmcvMytNYXRoLmZsb29yKHYvMykqZy83LjEpO2kuZm9yRWFjaChmdW5jdGlvbih0KXtkZWxldGUgdC52aXN9KSxkLmZvckVhY2goZnVuY3Rpb24odCxlKXswPT09TWF0aC5yb3VuZCgoZSttKSVnKSYmKHQudmlzPSEwKX0pfSgwLGUscixoLHApO3ZhciBtPSEhZyYmZy5kdXJhdGlvbj4wO2Z1bmN0aW9uIHkodCl7cmV0dXJuIG0/dC50cmFuc2l0aW9uKCk6dH12YXIgeD1yLnhheGlzLGI9ci55YXhpcyxfPWhbMF0udHJhY2Usdz1fLmxpbmUsaz1uLnNlbGVjdChkKSxBPW8oayxcImdcIixcImVycm9yYmFyc1wiKSxUPW8oayxcImdcIixcImxpbmVzXCIpLE09byhrLFwiZ1wiLFwicG9pbnRzXCIpLFM9byhrLFwiZ1wiLFwidGV4dFwiKTtpZihpLmdldENvbXBvbmVudE1ldGhvZChcImVycm9yYmFyc1wiLFwicGxvdFwiKSh0LEEscixnKSwhMD09PV8udmlzaWJsZSl7dmFyIEUsQzt5KGspLnN0eWxlKFwib3BhY2l0eVwiLF8ub3BhY2l0eSk7dmFyIEw9Xy5maWxsLmNoYXJBdChfLmZpbGwubGVuZ3RoLTEpO1wieFwiIT09TCYmXCJ5XCIhPT1MJiYoTD1cIlwiKSxyLmlzUmFuZ2VQbG90fHwoaFswXS5ub2RlMz1rKTt2YXIgeixPLEk9XCJcIixEPVtdLFA9Xy5fcHJldnRyYWNlO1AmJihJPVAuX3ByZXZSZXZwYXRofHxcIlwiLEM9UC5fbmV4dEZpbGwsRD1QLl9wb2x5Z29ucyk7dmFyIFIsRixCLE4saixWLFUscT1cIlwiLEg9XCJcIixHPVtdLFk9YS5ub29wO2lmKEU9Xy5fb3duRmlsbCxjLmhhc0xpbmVzKF8pfHxcIm5vbmVcIiE9PV8uZmlsbCl7Zm9yKEMmJkMuZGF0dW0oaCksLTEhPT1bXCJodlwiLFwidmhcIixcImh2aFwiLFwidmh2XCJdLmluZGV4T2Yody5zaGFwZSk/KFI9bC5zdGVwcyh3LnNoYXBlKSxGPWwuc3RlcHMody5zaGFwZS5zcGxpdChcIlwiKS5yZXZlcnNlKCkuam9pbihcIlwiKSkpOlI9Rj1cInNwbGluZVwiPT09dy5zaGFwZT9mdW5jdGlvbih0KXt2YXIgZT10W3QubGVuZ3RoLTFdO3JldHVybiB0Lmxlbmd0aD4xJiZ0WzBdWzBdPT09ZVswXSYmdFswXVsxXT09PWVbMV0/bC5zbW9vdGhjbG9zZWQodC5zbGljZSgxKSx3LnNtb290aGluZyk6bC5zbW9vdGhvcGVuKHQsdy5zbW9vdGhpbmcpfTpmdW5jdGlvbih0KXtyZXR1cm5cIk1cIit0LmpvaW4oXCJMXCIpfSxCPWZ1bmN0aW9uKHQpe3JldHVybiBGKHQucmV2ZXJzZSgpKX0sRz11KGgse3hheGlzOngseWF4aXM6Yixjb25uZWN0R2FwczpfLmNvbm5lY3RnYXBzLGJhc2VUb2xlcmFuY2U6TWF0aC5tYXgody53aWR0aHx8MSwzKS80LHNoYXBlOncuc2hhcGUsc2ltcGxpZnk6dy5zaW1wbGlmeSxmaWxsOl8uZmlsbH0pLFU9Xy5fcG9seWdvbnM9bmV3IEFycmF5KEcubGVuZ3RoKSx2PTA7djxHLmxlbmd0aDt2KyspXy5fcG9seWdvbnNbdl09ZihHW3ZdKTtHLmxlbmd0aCYmKE49R1swXVswXSxWPShqPUdbRy5sZW5ndGgtMV0pW2oubGVuZ3RoLTFdKSxZPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtpZih6PVIoZSksTz1CKGUpLHE/TD8ocSs9XCJMXCIrei5zdWJzdHIoMSksSD1PK1wiTFwiK0guc3Vic3RyKDEpKToocSs9XCJaXCIreixIPU8rXCJaXCIrSCk6KHE9eixIPU8pLGMuaGFzTGluZXMoXykmJmUubGVuZ3RoPjEpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHIuZGF0dW0oaCksdCl5KHIuc3R5bGUoXCJvcGFjaXR5XCIsMCkuYXR0cihcImRcIix6KS5jYWxsKGwubGluZUdyb3VwU3R5bGUpKS5zdHlsZShcIm9wYWNpdHlcIiwxKTtlbHNle3ZhciBpPXkocik7aS5hdHRyKFwiZFwiLHopLGwuc2luZ2xlTGluZVN0eWxlKGgsaSl9fX19fXZhciBXPVQuc2VsZWN0QWxsKFwiLmpzLWxpbmVcIikuZGF0YShHKTt5KFcuZXhpdCgpKS5zdHlsZShcIm9wYWNpdHlcIiwwKS5yZW1vdmUoKSxXLmVhY2goWSghMSkpLFcuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoXCJqcy1saW5lXCIsITApLnN0eWxlKFwidmVjdG9yLWVmZmVjdFwiLFwibm9uLXNjYWxpbmctc3Ryb2tlXCIpLmNhbGwobC5saW5lR3JvdXBTdHlsZSkuZWFjaChZKCEwKSksbC5zZXRDbGlwVXJsKFcsci5sYXllckNsaXBJZCx0KSxHLmxlbmd0aD8oRT8oRS5kYXR1bShoKSxOJiZWJiYoTD8oXCJ5XCI9PT1MP05bMV09VlsxXT1iLmMycCgwLCEwKTpcInhcIj09PUwmJihOWzBdPVZbMF09eC5jMnAoMCwhMCkpLHkoRSkuYXR0cihcImRcIixcIk1cIitWK1wiTFwiK04rXCJMXCIrcS5zdWJzdHIoMSkpLmNhbGwobC5zaW5nbGVGaWxsU3R5bGUpKTp5KEUpLmF0dHIoXCJkXCIscStcIlpcIikuY2FsbChsLnNpbmdsZUZpbGxTdHlsZSkpKTpDJiYoXCJ0b25leHRcIj09PV8uZmlsbC5zdWJzdHIoMCw2KSYmcSYmST8oXCJ0b25leHRcIj09PV8uZmlsbD95KEMpLmF0dHIoXCJkXCIscStcIlpcIitJK1wiWlwiKS5jYWxsKGwuc2luZ2xlRmlsbFN0eWxlKTp5KEMpLmF0dHIoXCJkXCIscStcIkxcIitJLnN1YnN0cigxKStcIlpcIikuY2FsbChsLnNpbmdsZUZpbGxTdHlsZSksXy5fcG9seWdvbnM9Xy5fcG9seWdvbnMuY29uY2F0KEQpKTooWihDKSxfLl9wb2x5Z29ucz1udWxsKSksXy5fcHJldlJldnBhdGg9SCxfLl9wcmV2UG9seWdvbnM9VSk6KEU/WihFKTpDJiZaKEMpLF8uX3BvbHlnb25zPV8uX3ByZXZSZXZwYXRoPV8uX3ByZXZQb2x5Z29ucz1udWxsKSxNLmRhdHVtKGgpLFMuZGF0dW0oaCksZnVuY3Rpb24oZSxpLGEpe3ZhciBvLHU9YVswXS50cmFjZSxoPWMuaGFzTWFya2Vycyh1KSxmPWMuaGFzVGV4dCh1KSxwPXR0KHUpLGQ9ZXQsZz1ldDtpZihofHxmKXt2YXIgdj1zLF89dS5zdGFja2dyb3VwLHc9XyYmXCJpbmZlciB6ZXJvXCI9PT10Ll9mdWxsTGF5b3V0Ll9zY2F0dGVyU3RhY2tPcHRzW3guX2lkK2IuX2lkXVtfXS5zdGFja2dhcHM7dS5tYXJrZXIubWF4ZGlzcGxheWVkfHx1Ll9uZWVkc0N1bGw/dj13P0o6JDpfJiYhdyYmKHY9SyksaCYmKGQ9diksZiYmKGc9dil9dmFyIGssQT0obz1lLnNlbGVjdEFsbChcInBhdGgucG9pbnRcIikuZGF0YShkLHApKS5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChcInBvaW50XCIsITApO20mJkEuY2FsbChsLnBvaW50U3R5bGUsdSx0KS5jYWxsKGwudHJhbnNsYXRlUG9pbnRzLHgsYikuc3R5bGUoXCJvcGFjaXR5XCIsMCkudHJhbnNpdGlvbigpLnN0eWxlKFwib3BhY2l0eVwiLDEpLG8ub3JkZXIoKSxoJiYoaz1sLm1ha2VQb2ludFN0eWxlRm5zKHUpKSxvLmVhY2goZnVuY3Rpb24oZSl7dmFyIGk9bi5zZWxlY3QodGhpcyksYT15KGkpO2wudHJhbnNsYXRlUG9pbnQoZSxhLHgsYik/KGwuc2luZ2xlUG9pbnRTdHlsZShlLGEsdSxrLHQpLHIubGF5ZXJDbGlwSWQmJmwuaGlkZU91dHNpZGVSYW5nZVBvaW50KGUsYSx4LGIsdS54Y2FsZW5kYXIsdS55Y2FsZW5kYXIpLHUuY3VzdG9tZGF0YSYmaS5jbGFzc2VkKFwicGxvdGx5LWN1c3RvbWRhdGFcIixudWxsIT09ZS5kYXRhJiZ2b2lkIDAhPT1lLmRhdGEpKTphLnJlbW92ZSgpfSksbT9vLmV4aXQoKS50cmFuc2l0aW9uKCkuc3R5bGUoXCJvcGFjaXR5XCIsMCkucmVtb3ZlKCk6by5leGl0KCkucmVtb3ZlKCksKG89aS5zZWxlY3RBbGwoXCJnXCIpLmRhdGEoZyxwKSkuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJ0ZXh0cG9pbnRcIiwhMCkuYXBwZW5kKFwidGV4dFwiKSxvLm9yZGVyKCksby5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLGk9eShlLnNlbGVjdChcInRleHRcIikpO2wudHJhbnNsYXRlUG9pbnQodCxpLHgsYik/ci5sYXllckNsaXBJZCYmbC5oaWRlT3V0c2lkZVJhbmdlUG9pbnQodCxlLHgsYix1LnhjYWxlbmRhcix1LnljYWxlbmRhcik6ZS5yZW1vdmUoKX0pLG8uc2VsZWN0QWxsKFwidGV4dFwiKS5jYWxsKGwudGV4dFBvaW50U3R5bGUsdSx0KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXguYzJwKHQueCkscj1iLmMycCh0LnkpO24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbChcInRzcGFuLmxpbmVcIikuZWFjaChmdW5jdGlvbigpe3kobi5zZWxlY3QodGhpcykpLmF0dHIoe3g6ZSx5OnJ9KX0pfSksby5leGl0KCkucmVtb3ZlKCl9KE0sUyxoKTt2YXIgWD0hMT09PV8uY2xpcG9uYXhpcz9udWxsOnIubGF5ZXJDbGlwSWQ7bC5zZXRDbGlwVXJsKE0sWCx0KSxsLnNldENsaXBVcmwoUyxYLHQpfWZ1bmN0aW9uIFoodCl7eSh0KS5hdHRyKFwiZFwiLFwiTTAsMFpcIil9ZnVuY3Rpb24gJCh0KXtyZXR1cm4gdC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuZ2FwJiZ0LnZpc30pfWZ1bmN0aW9uIEoodCl7cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc30pfWZ1bmN0aW9uIEsodCl7cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiF0LmdhcH0pfWZ1bmN0aW9uIFEodCl7cmV0dXJuIHQuaWR9ZnVuY3Rpb24gdHQodCl7aWYodC5pZHMpcmV0dXJuIFF9ZnVuY3Rpb24gZXQoKXtyZXR1cm4hMX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksYSxjKXt2YXIgdSxmLGQ9IWEsZz0hIWEmJmEuZHVyYXRpb24+MCx2PWgodCxlLHIpOygodT1pLnNlbGVjdEFsbChcImcudHJhY2VcIikuZGF0YSh2LGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLnVpZH0pKS5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFjZSBzY2F0dGVyIHRyYWNlXCIrdFswXS50cmFjZS51aWR9KS5zdHlsZShcInN0cm9rZS1taXRlcmxpbWl0XCIsMiksdS5vcmRlcigpLGZ1bmN0aW9uKHQsZSxyKXtlLmVhY2goZnVuY3Rpb24oZSl7dmFyIGk9byhuLnNlbGVjdCh0aGlzKSxcImdcIixcImZpbGxzXCIpO2wuc2V0Q2xpcFVybChpLHIubGF5ZXJDbGlwSWQsdCk7dmFyIGE9ZVswXS50cmFjZSxjPVtdO2EuX293bmZpbGwmJmMucHVzaChcIl9vd25GaWxsXCIpLGEuX25leHR0cmFjZSYmYy5wdXNoKFwiX25leHRGaWxsXCIpO3ZhciB1PWkuc2VsZWN0QWxsKFwiZ1wiKS5kYXRhKGMscyk7dS5lbnRlcigpLmFwcGVuZChcImdcIiksdS5leGl0KCkuZWFjaChmdW5jdGlvbih0KXthW3RdPW51bGx9KS5yZW1vdmUoKSx1Lm9yZGVyKCkuZWFjaChmdW5jdGlvbih0KXthW3RdPW8obi5zZWxlY3QodGhpcyksXCJwYXRoXCIsXCJqcy1maWxsXCIpfSl9KX0odCx1LGUpLGcpPyhjJiYoZj1jKCkpLG4udHJhbnNpdGlvbigpLmR1cmF0aW9uKGEuZHVyYXRpb24pLmVhc2UoYS5lYXNpbmcpLmVhY2goXCJlbmRcIixmdW5jdGlvbigpe2YmJmYoKX0pLmVhY2goXCJpbnRlcnJ1cHRcIixmdW5jdGlvbigpe2YmJmYoKX0pLmVhY2goZnVuY3Rpb24oKXtpLnNlbGVjdEFsbChcImcudHJhY2VcIikuZWFjaChmdW5jdGlvbihyLG4pe3AodCxuLGUscix2LHRoaXMsYSl9KX0pKTp1LmVhY2goZnVuY3Rpb24ocixuKXtwKHQsbixlLHIsdix0aGlzLGEpfSk7ZCYmdS5leGl0KCkucmVtb3ZlKCksaS5zZWxlY3RBbGwoXCJwYXRoOm5vdChbZF0pXCIpLnJlbW92ZSgpfX0se1wiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3BvbHlnb25cIjo3MTMsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vbGluZV9wb2ludHNcIjoxMDY2LFwiLi9saW5rX3RyYWNlc1wiOjEwNjgsXCIuL3N1YnR5cGVzXCI6MTA3NixkMzoxNTV9XSwxMDczOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vc3VidHlwZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLG8scz10LmNkLGw9dC54YXhpcyxjPXQueWF4aXMsdT1bXSxoPXNbMF0udHJhY2U7aWYoIW4uaGFzTWFya2VycyhoKSYmIW4uaGFzVGV4dChoKSlyZXR1cm5bXTtpZighMT09PWUpZm9yKHI9MDtyPHMubGVuZ3RoO3IrKylzW3JdLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8cy5sZW5ndGg7cisrKWk9c1tyXSxhPWwuYzJwKGkueCksbz1jLmMycChpLnkpLG51bGwhPT1pLmkmJmUuY29udGFpbnMoW2Esb10sITEscix0KT8odS5wdXNoKHtwb2ludE51bWJlcjppLmkseDpsLmMyZChpLngpLHk6Yy5jMmQoaS55KX0pLGkuc2VsZWN0ZWQ9MSk6aS5zZWxlY3RlZD0wO3JldHVybiB1fX0se1wiLi9zdWJ0eXBlc1wiOjEwNzZ9XSwxMDc0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49W1wib3JpZW50YXRpb25cIixcImdyb3Vwbm9ybVwiLFwic3RhY2tnYXBzXCJdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYT1yLl9zY2F0dGVyU3RhY2tPcHRzLG89aShcInN0YWNrZ3JvdXBcIik7aWYobyl7dmFyIHM9ZS54YXhpcytlLnlheGlzLGw9YVtzXTtsfHwobD1hW3NdPXt9KTt2YXIgYz1sW29dLHU9ITE7Yz9jLnRyYWNlcy5wdXNoKGUpOihjPWxbb109e3RyYWNlSW5kaWNlczpbXSx0cmFjZXM6W2VdfSx1PSEwKTtmb3IodmFyIGg9e29yaWVudGF0aW9uOmUueCYmIWUueT9cImhcIjpcInZcIn0sZj0wO2Y8bi5sZW5ndGg7ZisrKXt2YXIgcD1uW2ZdLGQ9cCtcIkZvdW5kXCI7aWYoIWNbZF0pe3ZhciBnPXZvaWQgMCE9PXRbcF0sdj1cIm9yaWVudGF0aW9uXCI9PT1wO2lmKChnfHx1KSYmKGNbcF09aShwLGhbcF0pLHYmJihjLmZpbGxEZmx0PVwiaFwiPT09Y1twXT9cInRvbmV4dHhcIjpcInRvbmV4dHlcIiksZyYmKGNbZF09ITAsIXUmJihkZWxldGUgYy50cmFjZXNbMF1bcF0sdikpKSlmb3IodmFyIG09MDttPGMudHJhY2VzLmxlbmd0aC0xO20rKyl7dmFyIHk9Yy50cmFjZXNbbV07eS5faW5wdXQuZmlsbCE9PXkuZmlsbCYmKHkuZmlsbD1jLmZpbGxEZmx0KX19fXJldHVybiBjfX19LHt9XSwxMDc1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxhPXQoXCIuLi8uLi9yZWdpc3RyeVwiKTtmdW5jdGlvbiBvKHQsZSxyKXtpLnBvaW50U3R5bGUodC5zZWxlY3RBbGwoXCJwYXRoLnBvaW50XCIpLGUscil9ZnVuY3Rpb24gcyh0LGUscil7aS50ZXh0UG9pbnRTdHlsZSh0LnNlbGVjdEFsbChcInRleHRcIiksZSxyKX1lLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZT9lWzBdLm5vZGUzOm4uc2VsZWN0KHQpLnNlbGVjdEFsbChcImcudHJhY2Uuc2NhdHRlclwiKTtyLnN0eWxlKFwib3BhY2l0eVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSxyLnNlbGVjdEFsbChcImcucG9pbnRzXCIpLmVhY2goZnVuY3Rpb24oZSl7byhuLnNlbGVjdCh0aGlzKSxlLnRyYWNlfHxlWzBdLnRyYWNlLHQpfSksci5zZWxlY3RBbGwoXCJnLnRleHRcIikuZWFjaChmdW5jdGlvbihlKXtzKG4uc2VsZWN0KHRoaXMpLGUudHJhY2V8fGVbMF0udHJhY2UsdCl9KSxyLnNlbGVjdEFsbChcImcudHJhY2UgcGF0aC5qcy1saW5lXCIpLmNhbGwoaS5saW5lR3JvdXBTdHlsZSksci5zZWxlY3RBbGwoXCJnLnRyYWNlIHBhdGguanMtZmlsbFwiKS5jYWxsKGkuZmlsbEdyb3VwU3R5bGUpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKFwiZXJyb3JiYXJzXCIsXCJzdHlsZVwiKShyKX0sc3R5bGVQb2ludHM6byxzdHlsZVRleHQ6cyxzdHlsZU9uU2VsZWN0OmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS5ub2RlMyxuPWVbMF0udHJhY2U7bi5zZWxlY3RlZHBvaW50cz8oaS5zZWxlY3RlZFBvaW50U3R5bGUoci5zZWxlY3RBbGwoXCJwYXRoLnBvaW50XCIpLG4pLGkuc2VsZWN0ZWRUZXh0U3R5bGUoci5zZWxlY3RBbGwoXCJ0ZXh0XCIpLG4pKToobyhyLG4sdCkscyhyLG4sdCkpfX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LGQzOjE1NX1dLDEwNzY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpO2UuZXhwb3J0cz17aGFzTGluZXM6ZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZSYmdC5tb2RlJiYtMSE9PXQubW9kZS5pbmRleE9mKFwibGluZXNcIil9LGhhc01hcmtlcnM6ZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZSYmKHQubW9kZSYmLTEhPT10Lm1vZGUuaW5kZXhPZihcIm1hcmtlcnNcIil8fFwic3Bsb21cIj09PXQudHlwZSl9LGhhc1RleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZSYmdC5tb2RlJiYtMSE9PXQubW9kZS5pbmRleE9mKFwidGV4dFwiKX0saXNCdWJibGU6ZnVuY3Rpb24odCl7cmV0dXJuIG4uaXNQbGFpbk9iamVjdCh0Lm1hcmtlcikmJm4uaXNBcnJheU9yVHlwZWRBcnJheSh0Lm1hcmtlci5zaXplKX19fSx7XCIuLi8uLi9saWJcIjo3MDF9XSwxMDc3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSxhKXthPWF8fHt9LGkoXCJ0ZXh0cG9zaXRpb25cIiksbi5jb2VyY2VGb250KGksXCJ0ZXh0Zm9udFwiLHIuZm9udCksYS5ub1NlbGVjdHx8KGkoXCJzZWxlY3RlZC50ZXh0Zm9udC5jb2xvclwiKSxpKFwidW5zZWxlY3RlZC50ZXh0Zm9udC5jb2xvclwiKSl9fSx7XCIuLi8uLi9saWJcIjo3MDF9XSwxMDc4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9yZWdpc3RyeVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG8scz1hKFwieFwiKSxsPWEoXCJ5XCIpO2lmKGkuZ2V0Q29tcG9uZW50TWV0aG9kKFwiY2FsZW5kYXJzXCIsXCJoYW5kbGVUcmFjZURlZmF1bHRzXCIpKHQsZSxbXCJ4XCIsXCJ5XCJdLHIpLHMpe3ZhciBjPW4ubWluUm93TGVuZ3RoKHMpO2w/bz1NYXRoLm1pbihjLG4ubWluUm93TGVuZ3RoKGwpKToobz1jLGEoXCJ5MFwiKSxhKFwiZHlcIikpfWVsc2V7aWYoIWwpcmV0dXJuIDA7bz1uLm1pblJvd0xlbmd0aChsKSxhKFwieDBcIiksYShcImR4XCIpfXJldHVybiBlLl9sZW5ndGg9byxvfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4Mjl9XSwxMDc5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL2NvbnN0YW50cy9nbDNkX2Rhc2hlc1wiKSxsPXQoXCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzXCIpLGM9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCx1PXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsLGg9bi5saW5lLGY9bi5tYXJrZXIscD1mLmxpbmUsZD1jKHt3aWR0aDpoLndpZHRoLGRhc2g6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOk9iamVjdC5rZXlzKHMpLGRmbHQ6XCJzb2xpZFwifX0saShcImxpbmVcIikpO3ZhciBnPWUuZXhwb3J0cz11KHt4Om4ueCx5Om4ueSx6Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwifSx0ZXh0OmMoe30sbi50ZXh0LHt9KSxob3ZlcnRleHQ6Yyh7fSxuLmhvdmVydGV4dCx7fSksaG92ZXJ0ZW1wbGF0ZTphKCksbW9kZTpjKHt9LG4ubW9kZSx7ZGZsdDpcImxpbmVzK21hcmtlcnNcIn0pLHN1cmZhY2VheGlzOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbLTEsMCwxLDJdLGRmbHQ6LTF9LHN1cmZhY2Vjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCJ9LHByb2plY3Rpb246e3g6e3Nob3c6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sb3BhY2l0eTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MX0sc2NhbGU6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MTAsZGZsdDoyLzN9fSx5OntzaG93Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LG9wYWNpdHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjF9LHNjYWxlOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEwLGRmbHQ6Mi8zfX0sejp7c2hvdzp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxvcGFjaXR5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDoxfSxzY2FsZTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxMCxkZmx0OjIvM319fSxjb25uZWN0Z2FwczpuLmNvbm5lY3RnYXBzLGxpbmU6ZCxtYXJrZXI6Yyh7c3ltYm9sOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpPYmplY3Qua2V5cyhsKSxkZmx0OlwiY2lyY2xlXCIsYXJyYXlPazohMH0sc2l6ZTpjKHt9LGYuc2l6ZSx7ZGZsdDo4fSksc2l6ZXJlZjpmLnNpemVyZWYsc2l6ZW1pbjpmLnNpemVtaW4sc2l6ZW1vZGU6Zi5zaXplbW9kZSxvcGFjaXR5OmMoe30sZi5vcGFjaXR5LHthcnJheU9rOiExfSksY29sb3JiYXI6Zi5jb2xvcmJhcixsaW5lOmMoe3dpZHRoOmMoe30scC53aWR0aCx7YXJyYXlPazohMX0pfSxpKFwibWFya2VyLmxpbmVcIikpfSxpKFwibWFya2VyXCIpKSx0ZXh0cG9zaXRpb246Yyh7fSxuLnRleHRwb3NpdGlvbix7ZGZsdDpcInRvcCBjZW50ZXJcIn0pLHRleHRmb250Ontjb2xvcjpuLnRleHRmb250LmNvbG9yLHNpemU6bi50ZXh0Zm9udC5zaXplLGZhbWlseTpjKHt9LG4udGV4dGZvbnQuZmFtaWx5LHthcnJheU9rOiExfSl9LGhvdmVyaW5mbzpjKHt9LG8uaG92ZXJpbmZvKX0sXCJjYWxjXCIsXCJuZXN0ZWRcIik7Zy54LmVkaXRUeXBlPWcueS5lZGl0VHlwZT1nLnouZWRpdFR5cGU9XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9jb25zdGFudHMvZ2wzZF9kYXNoZXNcIjo2NzUsXCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzXCI6Njc2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCI6MTA1Mn1dLDEwODA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGFcIiksaT10KFwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W3t4OiExLHk6ITEsdHJhY2U6ZSx0Ont9fV07cmV0dXJuIG4ocixlKSxpKHQsZSkscn19LHtcIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhXCI6MTA1MSxcIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjXCI6MTA1NX1dLDEwODE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIik7ZnVuY3Rpb24gaSh0LGUscixpKXtpZighZXx8IWUudmlzaWJsZSlyZXR1cm4gbnVsbDtmb3IodmFyIGE9bi5nZXRDb21wb25lbnRNZXRob2QoXCJlcnJvcmJhcnNcIixcIm1ha2VDb21wdXRlRXJyb3JcIikoZSksbz1uZXcgQXJyYXkodC5sZW5ndGgpLHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIGw9YSgrdFtzXSxzKTtpZihcImxvZ1wiPT09aS50eXBlKXt2YXIgYz1pLmMybCh0W3NdKSx1PXRbc10tbFswXSxoPXRbc10rbFsxXTtpZihvW3NdPVsoaS5jMmwodSwhMCktYykqciwoaS5jMmwoaCwhMCktYykqcl0sdT4wKXt2YXIgZj1pLmMybCh1KTtpLl9sb3dlckxvZ0Vycm9yQm91bmR8fChpLl9sb3dlckxvZ0Vycm9yQm91bmQ9ZiksaS5fbG93ZXJFcnJvckJvdW5kPU1hdGgubWluKGkuX2xvd2VyTG9nRXJyb3JCb3VuZCxmKX19ZWxzZSBvW3NdPVstbFswXSpyLGxbMV0qcl19cmV0dXJuIG99ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1baSh0LngsdC5lcnJvcl94LGVbMF0sci54YXhpcyksaSh0LnksdC5lcnJvcl95LGVbMV0sci55YXhpcyksaSh0LnosdC5lcnJvcl96LGVbMl0sci56YXhpcyldLGE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYodFtlXSlyZXR1cm4gdFtlXS5sZW5ndGg7cmV0dXJuIDB9KG4pO2lmKDA9PT1hKXJldHVybiBudWxsO2Zvcih2YXIgbz1uZXcgQXJyYXkoYSkscz0wO3M8YTtzKyspe2Zvcih2YXIgbD1bWzAsMCwwXSxbMCwwLDBdXSxjPTA7YzwzO2MrKylpZihuW2NdKWZvcih2YXIgdT0wO3U8Mjt1KyspbFt1XVtjXT1uW2NdW3NdW3VdO29bc109bH1yZXR1cm4gb319LHtcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5fV0sMTA4MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbC1saW5lM2RcIiksaT10KFwiZ2wtc2NhdHRlcjNkXCIpLGE9dChcImdsLWVycm9yM2RcIiksbz10KFwiZ2wtbWVzaDNkXCIpLHM9dChcImRlbGF1bmF5LXRyaWFuZ3VsYXRlXCIpLGw9dChcIi4uLy4uL2xpYlwiKSxjPXQoXCIuLi8uLi9saWIvc3RyMnJnYmFycmF5XCIpLHU9dChcIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3JcIikuZm9ybWF0Q29sb3IsaD10KFwiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmNcIiksZj10KFwiLi4vLi4vY29uc3RhbnRzL2dsM2RfZGFzaGVzXCIpLHA9dChcIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnNcIiksZD10KFwiLi9jYWxjX2Vycm9yc1wiKTtmdW5jdGlvbiBnKHQsZSl7dGhpcy5zY2VuZT10LHRoaXMudWlkPWUsdGhpcy5saW5lUGxvdD1udWxsLHRoaXMuc2NhdHRlclBsb3Q9bnVsbCx0aGlzLmVycm9yQmFycz1udWxsLHRoaXMudGV4dE1hcmtlcnM9bnVsbCx0aGlzLmRlbGF1bmF5TWVzaD1udWxsLHRoaXMuY29sb3I9bnVsbCx0aGlzLm1vZGU9XCJcIix0aGlzLmRhdGFQb2ludHM9W10sdGhpcy5heGVzQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMudGV4dExhYmVscz1udWxsLHRoaXMuZGF0YT1udWxsfXZhciB2PWcucHJvdG90eXBlO2Z1bmN0aW9uIG0odCl7cmV0dXJuIG51bGw9PXQ/MDp0LmluZGV4T2YoXCJsZWZ0XCIpPi0xPy0xOnQuaW5kZXhPZihcInJpZ2h0XCIpPi0xPzE6MH1mdW5jdGlvbiB5KHQpe3JldHVybiBudWxsPT10PzA6dC5pbmRleE9mKFwidG9wXCIpPi0xPy0xOnQuaW5kZXhPZihcImJvdHRvbVwiKT4tMT8xOjB9ZnVuY3Rpb24geCh0LGUpe3JldHVybiBlKDQqdCl9ZnVuY3Rpb24gYih0KXtyZXR1cm4gcFt0XX1mdW5jdGlvbiBfKHQsZSxyLG4saSl7dmFyIGE9bnVsbDtpZihsLmlzQXJyYXlPclR5cGVkQXJyYXkodCkpe2E9W107Zm9yKHZhciBvPTA7bzxlO28rKyl2b2lkIDA9PT10W29dP2Fbb109bjphW29dPXIodFtvXSxpKX1lbHNlIGE9cih0LGwuaWRlbnRpdHkpO3JldHVybiBhfWZ1bmN0aW9uIHcodCxlKXt2YXIgcixuLGksYSxvLHMsZj1bXSxwPXQuZnVsbFNjZW5lTGF5b3V0LGc9dC5kYXRhU2NhbGUsdj1wLnhheGlzLHc9cC55YXhpcyxrPXAuemF4aXMsQT1lLm1hcmtlcixUPWUubGluZSxNPWUueHx8W10sUz1lLnl8fFtdLEU9ZS56fHxbXSxDPU0ubGVuZ3RoLEw9ZS54Y2FsZW5kYXIsej1lLnljYWxlbmRhcixPPWUuemNhbGVuZGFyO2ZvcihvPTA7bzxDO28rKylyPXYuZDJsKE1bb10sMCxMKSpnWzBdLG49dy5kMmwoU1tvXSwwLHopKmdbMV0saT1rLmQybChFW29dLDAsTykqZ1syXSxmW29dPVtyLG4saV07aWYoQXJyYXkuaXNBcnJheShlLnRleHQpKXM9ZS50ZXh0O2Vsc2UgaWYodm9pZCAwIT09ZS50ZXh0KWZvcihzPW5ldyBBcnJheShDKSxvPTA7bzxDO28rKylzW29dPWUudGV4dDtpZihhPXtwb3NpdGlvbjpmLG1vZGU6ZS5tb2RlLHRleHQ6c30sXCJsaW5lXCJpbiBlJiYoYS5saW5lQ29sb3I9dShULDEsQyksYS5saW5lV2lkdGg9VC53aWR0aCxhLmxpbmVEYXNoZXM9VC5kYXNoKSxcIm1hcmtlclwiaW4gZSl7dmFyIEk9aChlKTthLnNjYXR0ZXJDb2xvcj11KEEsMSxDKSxhLnNjYXR0ZXJTaXplPV8oQS5zaXplLEMseCwyMCxJKSxhLnNjYXR0ZXJNYXJrZXI9XyhBLnN5bWJvbCxDLGIsXCJcXHUyNWNmXCIpLGEuc2NhdHRlckxpbmVXaWR0aD1BLmxpbmUud2lkdGgsYS5zY2F0dGVyTGluZUNvbG9yPXUoQS5saW5lLDEsQyksYS5zY2F0dGVyQW5nbGU9MH1cInRleHRwb3NpdGlvblwiaW4gZSYmKGEudGV4dE9mZnNldD1mdW5jdGlvbih0KXt2YXIgZT1bMCwwXTtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWVbcl09WzAsMF0sdFtyXSYmKGVbcl1bMF09bSh0W3JdKSxlW3JdWzFdPXkodFtyXSkpO2Vsc2UgZVswXT1tKHQpLGVbMV09eSh0KTtyZXR1cm4gZX0oZS50ZXh0cG9zaXRpb24pLGEudGV4dENvbG9yPXUoZS50ZXh0Zm9udCwxLEMpLGEudGV4dFNpemU9XyhlLnRleHRmb250LnNpemUsQyxsLmlkZW50aXR5LDEyKSxhLnRleHRGb250PWUudGV4dGZvbnQuZmFtaWx5LGEudGV4dEFuZ2xlPTApO3ZhciBEPVtcInhcIixcInlcIixcInpcIl07Zm9yKGEucHJvamVjdD1bITEsITEsITFdLGEucHJvamVjdFNjYWxlPVsxLDEsMV0sYS5wcm9qZWN0T3BhY2l0eT1bMSwxLDFdLG89MDtvPDM7KytvKXt2YXIgUD1lLnByb2plY3Rpb25bRFtvXV07KGEucHJvamVjdFtvXT1QLnNob3cpJiYoYS5wcm9qZWN0T3BhY2l0eVtvXT1QLm9wYWNpdHksYS5wcm9qZWN0U2NhbGVbb109UC5zY2FsZSl9YS5lcnJvckJvdW5kcz1kKGUsZyxwKTt2YXIgUj1mdW5jdGlvbih0KXtmb3IodmFyIGU9WzAsMCwwXSxyPVtbMCwwLDBdLFswLDAsMF0sWzAsMCwwXV0sbj1bMSwxLDFdLGk9MDtpPDM7aSsrKXt2YXIgYT10W2ldO2EmJiExIT09YS5jb3B5X3pzdHlsZSYmITEhPT10WzJdLnZpc2libGUmJihhPXRbMl0pLGEmJmEudmlzaWJsZSYmKGVbaV09YS53aWR0aC8yLHJbaV09YyhhLmNvbG9yKSxuW2ldPWEudGhpY2tuZXNzKX1yZXR1cm57Y2FwU2l6ZTplLGNvbG9yOnIsbGluZVdpZHRoOm59fShbZS5lcnJvcl94LGUuZXJyb3JfeSxlLmVycm9yX3pdKTtyZXR1cm4gYS5lcnJvckNvbG9yPVIuY29sb3IsYS5lcnJvckxpbmVXaWR0aD1SLmxpbmVXaWR0aCxhLmVycm9yQ2FwU2l6ZT1SLmNhcFNpemUsYS5kZWxhdW5heUF4aXM9ZS5zdXJmYWNlYXhpcyxhLmRlbGF1bmF5Q29sb3I9YyhlLnN1cmZhY2Vjb2xvciksYX1mdW5jdGlvbiBrKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBlPXRbMF07cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJih0PWUpLFwicmdiKFwiK3Quc2xpY2UoMCwzKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQoMjU1KnQpfSkrXCIpXCJ9cmV0dXJuIG51bGx9di5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0JiYodC5vYmplY3Q9PT10aGlzLmxpbmVQbG90fHx0Lm9iamVjdD09PXRoaXMuZGVsYXVuYXlNZXNofHx0Lm9iamVjdD09PXRoaXMudGV4dE1hcmtlcnN8fHQub2JqZWN0PT09dGhpcy5zY2F0dGVyUGxvdCkpe3ZhciBlPXQuaW5kZXg9dC5kYXRhLmluZGV4O3JldHVybiB0Lm9iamVjdC5oaWdobGlnaHQmJnQub2JqZWN0LmhpZ2hsaWdodChudWxsKSx0aGlzLnNjYXR0ZXJQbG90JiYodC5vYmplY3Q9dGhpcy5zY2F0dGVyUGxvdCx0aGlzLnNjYXR0ZXJQbG90LmhpZ2hsaWdodCh0LmRhdGEpKSx0LnRleHRMYWJlbD1cIlwiLHRoaXMudGV4dExhYmVscyYmKEFycmF5LmlzQXJyYXkodGhpcy50ZXh0TGFiZWxzKT8odGhpcy50ZXh0TGFiZWxzW2VdfHwwPT09dGhpcy50ZXh0TGFiZWxzW2VdKSYmKHQudGV4dExhYmVsPXRoaXMudGV4dExhYmVsc1tlXSk6dC50ZXh0TGFiZWw9dGhpcy50ZXh0TGFiZWxzKSx0LnRyYWNlQ29vcmRpbmF0ZT1bdGhpcy5kYXRhLnhbZV0sdGhpcy5kYXRhLnlbZV0sdGhpcy5kYXRhLnpbZV1dLCEwfX0sdi51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGUscixsLGMsdT10aGlzLnNjZW5lLmdscGxvdC5nbCxoPWYuc29saWQ7dGhpcy5kYXRhPXQ7dmFyIHA9dyh0aGlzLnNjZW5lLHQpO1wibW9kZVwiaW4gcCYmKHRoaXMubW9kZT1wLm1vZGUpLFwibGluZURhc2hlc1wiaW4gcCYmcC5saW5lRGFzaGVzIGluIGYmJihoPWZbcC5saW5lRGFzaGVzXSksdGhpcy5jb2xvcj1rKHAuc2NhdHRlckNvbG9yKXx8ayhwLmxpbmVDb2xvciksdGhpcy5kYXRhUG9pbnRzPXAucG9zaXRpb24sZT17Z2w6dGhpcy5zY2VuZS5nbHBsb3QuZ2wscG9zaXRpb246cC5wb3NpdGlvbixjb2xvcjpwLmxpbmVDb2xvcixsaW5lV2lkdGg6cC5saW5lV2lkdGh8fDEsZGFzaGVzOmhbMF0sZGFzaFNjYWxlOmhbMV0sb3BhY2l0eTp0Lm9wYWNpdHksY29ubmVjdEdhcHM6dC5jb25uZWN0Z2Fwc30sLTEhPT10aGlzLm1vZGUuaW5kZXhPZihcImxpbmVzXCIpP3RoaXMubGluZVBsb3Q/dGhpcy5saW5lUGxvdC51cGRhdGUoZSk6KHRoaXMubGluZVBsb3Q9bihlKSx0aGlzLmxpbmVQbG90Ll90cmFjZT10aGlzLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLmxpbmVQbG90KSk6dGhpcy5saW5lUGxvdCYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmxpbmVQbG90KSx0aGlzLmxpbmVQbG90LmRpc3Bvc2UoKSx0aGlzLmxpbmVQbG90PW51bGwpO3ZhciBkPXQub3BhY2l0eTtpZih0Lm1hcmtlciYmdC5tYXJrZXIub3BhY2l0eSYmKGQqPXQubWFya2VyLm9wYWNpdHkpLHI9e2dsOnRoaXMuc2NlbmUuZ2xwbG90LmdsLHBvc2l0aW9uOnAucG9zaXRpb24sY29sb3I6cC5zY2F0dGVyQ29sb3Isc2l6ZTpwLnNjYXR0ZXJTaXplLGdseXBoOnAuc2NhdHRlck1hcmtlcixvcGFjaXR5OmQsb3J0aG9ncmFwaGljOiEwLGxpbmVXaWR0aDpwLnNjYXR0ZXJMaW5lV2lkdGgsbGluZUNvbG9yOnAuc2NhdHRlckxpbmVDb2xvcixwcm9qZWN0OnAucHJvamVjdCxwcm9qZWN0U2NhbGU6cC5wcm9qZWN0U2NhbGUscHJvamVjdE9wYWNpdHk6cC5wcm9qZWN0T3BhY2l0eX0sLTEhPT10aGlzLm1vZGUuaW5kZXhPZihcIm1hcmtlcnNcIik/dGhpcy5zY2F0dGVyUGxvdD90aGlzLnNjYXR0ZXJQbG90LnVwZGF0ZShyKToodGhpcy5zY2F0dGVyUGxvdD1pKHIpLHRoaXMuc2NhdHRlclBsb3QuX3RyYWNlPXRoaXMsdGhpcy5zY2F0dGVyUGxvdC5oaWdobGlnaHRTY2FsZT0xLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLnNjYXR0ZXJQbG90KSk6dGhpcy5zY2F0dGVyUGxvdCYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLnNjYXR0ZXJQbG90KSx0aGlzLnNjYXR0ZXJQbG90LmRpc3Bvc2UoKSx0aGlzLnNjYXR0ZXJQbG90PW51bGwpLGM9e2dsOnRoaXMuc2NlbmUuZ2xwbG90LmdsLHBvc2l0aW9uOnAucG9zaXRpb24sZ2x5cGg6cC50ZXh0LGNvbG9yOnAudGV4dENvbG9yLHNpemU6cC50ZXh0U2l6ZSxhbmdsZTpwLnRleHRBbmdsZSxhbGlnbm1lbnQ6cC50ZXh0T2Zmc2V0LGZvbnQ6cC50ZXh0Rm9udCxvcnRob2dyYXBoaWM6ITAsbGluZVdpZHRoOjAscHJvamVjdDohMSxvcGFjaXR5OnQub3BhY2l0eX0sdGhpcy50ZXh0TGFiZWxzPXQuaG92ZXJ0ZXh0fHx0LnRleHQsLTEhPT10aGlzLm1vZGUuaW5kZXhPZihcInRleHRcIik/dGhpcy50ZXh0TWFya2Vycz90aGlzLnRleHRNYXJrZXJzLnVwZGF0ZShjKToodGhpcy50ZXh0TWFya2Vycz1pKGMpLHRoaXMudGV4dE1hcmtlcnMuX3RyYWNlPXRoaXMsdGhpcy50ZXh0TWFya2Vycy5oaWdobGlnaHRTY2FsZT0xLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLnRleHRNYXJrZXJzKSk6dGhpcy50ZXh0TWFya2VycyYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLnRleHRNYXJrZXJzKSx0aGlzLnRleHRNYXJrZXJzLmRpc3Bvc2UoKSx0aGlzLnRleHRNYXJrZXJzPW51bGwpLGw9e2dsOnRoaXMuc2NlbmUuZ2xwbG90LmdsLHBvc2l0aW9uOnAucG9zaXRpb24sY29sb3I6cC5lcnJvckNvbG9yLGVycm9yOnAuZXJyb3JCb3VuZHMsbGluZVdpZHRoOnAuZXJyb3JMaW5lV2lkdGgsY2FwU2l6ZTpwLmVycm9yQ2FwU2l6ZSxvcGFjaXR5OnQub3BhY2l0eX0sdGhpcy5lcnJvckJhcnM/cC5lcnJvckJvdW5kcz90aGlzLmVycm9yQmFycy51cGRhdGUobCk6KHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmVycm9yQmFycyksdGhpcy5lcnJvckJhcnMuZGlzcG9zZSgpLHRoaXMuZXJyb3JCYXJzPW51bGwpOnAuZXJyb3JCb3VuZHMmJih0aGlzLmVycm9yQmFycz1hKGwpLHRoaXMuZXJyb3JCYXJzLl90cmFjZT10aGlzLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLmVycm9yQmFycykpLHAuZGVsYXVuYXlBeGlzPj0wKXt2YXIgZz1mdW5jdGlvbih0LGUscil7dmFyIG4saT0ocisxKSUzLGE9KHIrMiklMyxvPVtdLGw9W107Zm9yKG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGM9dFtuXTshaXNOYU4oY1tpXSkmJmlzRmluaXRlKGNbaV0pJiYhaXNOYU4oY1thXSkmJmlzRmluaXRlKGNbYV0pJiYoby5wdXNoKFtjW2ldLGNbYV1dKSxsLnB1c2gobikpfXZhciB1PXMobyk7Zm9yKG49MDtuPHUubGVuZ3RoOysrbilmb3IodmFyIGg9dVtuXSxmPTA7ZjxoLmxlbmd0aDsrK2YpaFtmXT1sW2hbZl1dO3JldHVybntwb3NpdGlvbnM6dCxjZWxsczp1LG1lc2hDb2xvcjplfX0ocC5wb3NpdGlvbixwLmRlbGF1bmF5Q29sb3IscC5kZWxhdW5heUF4aXMpO2cub3BhY2l0eT10Lm9wYWNpdHksdGhpcy5kZWxhdW5heU1lc2g/dGhpcy5kZWxhdW5heU1lc2gudXBkYXRlKGcpOihnLmdsPXUsdGhpcy5kZWxhdW5heU1lc2g9byhnKSx0aGlzLmRlbGF1bmF5TWVzaC5fdHJhY2U9dGhpcyx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5kZWxhdW5heU1lc2gpKX1lbHNlIHRoaXMuZGVsYXVuYXlNZXNoJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZGVsYXVuYXlNZXNoKSx0aGlzLmRlbGF1bmF5TWVzaC5kaXNwb3NlKCksdGhpcy5kZWxhdW5heU1lc2g9bnVsbCl9LHYuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMubGluZVBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5saW5lUGxvdCksdGhpcy5saW5lUGxvdC5kaXNwb3NlKCkpLHRoaXMuc2NhdHRlclBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5zY2F0dGVyUGxvdCksdGhpcy5zY2F0dGVyUGxvdC5kaXNwb3NlKCkpLHRoaXMuZXJyb3JCYXJzJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZXJyb3JCYXJzKSx0aGlzLmVycm9yQmFycy5kaXNwb3NlKCkpLHRoaXMudGV4dE1hcmtlcnMmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy50ZXh0TWFya2VycyksdGhpcy50ZXh0TWFya2Vycy5kaXNwb3NlKCkpLHRoaXMuZGVsYXVuYXlNZXNoJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZGVsYXVuYXlNZXNoKSx0aGlzLmRlbGF1bmF5TWVzaC5kaXNwb3NlKCkpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgZyh0LGUudWlkKTtyZXR1cm4gci51cGRhdGUoZSkscn19LHtcIi4uLy4uL2NvbnN0YW50cy9nbDNkX2Rhc2hlc1wiOjY3NSxcIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnNcIjo2NzYsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yXCI6Njk4LFwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiOjcyNCxcIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jXCI6MTA2OSxcIi4vY2FsY19lcnJvcnNcIjoxMDgxLFwiZGVsYXVuYXktdHJpYW5ndWxhdGVcIjoxNTcsXCJnbC1lcnJvcjNkXCI6MjQ0LFwiZ2wtbGluZTNkXCI6MjUyLFwiZ2wtbWVzaDNkXCI6Mjc3LFwiZ2wtc2NhdHRlcjNkXCI6Mjk0fV0sMTA4MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiKSxvPXQoXCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0c1wiKSxzPXQoXCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHNcIiksbD10KFwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzXCIpLGM9dChcIi4vYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7ZnVuY3Rpb24gaChyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsYyxyLG4pfWlmKGZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPTAsbz1yKFwieFwiKSxzPXIoXCJ5XCIpLGw9cihcInpcIik7bi5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcImhhbmRsZVRyYWNlRGVmYXVsdHNcIikodCxlLFtcInhcIixcInlcIixcInpcIl0saSksbyYmcyYmbCYmKGE9TWF0aC5taW4oby5sZW5ndGgscy5sZW5ndGgsbC5sZW5ndGgpLGUuX2xlbmd0aD1lLl94bGVuZ3RoPWUuX3lsZW5ndGg9ZS5femxlbmd0aD1hKTtyZXR1cm4gYX0odCxlLGgsdSkpe2goXCJ0ZXh0XCIpLGgoXCJob3ZlcnRleHRcIiksaChcImhvdmVydGVtcGxhdGVcIiksaChcIm1vZGVcIiksYS5oYXNMaW5lcyhlKSYmKGgoXCJjb25uZWN0Z2Fwc1wiKSxzKHQsZSxyLHUsaCkpLGEuaGFzTWFya2VycyhlKSYmbyh0LGUscix1LGgse25vU2VsZWN0OiEwfSksYS5oYXNUZXh0KGUpJiZsKHQsZSx1LGgse25vU2VsZWN0OiEwfSk7dmFyIGY9KGUubGluZXx8e30pLmNvbG9yLHA9KGUubWFya2VyfHx7fSkuY29sb3I7aChcInN1cmZhY2VheGlzXCIpPj0wJiZoKFwic3VyZmFjZWNvbG9yXCIsZnx8cCk7Zm9yKHZhciBkPVtcInhcIixcInlcIixcInpcIl0sZz0wO2c8MzsrK2cpe3ZhciB2PVwicHJvamVjdGlvbi5cIitkW2ddO2goditcIi5zaG93XCIpJiYoaCh2K1wiLm9wYWNpdHlcIiksaCh2K1wiLnNjYWxlXCIpKX12YXIgbT1uLmdldENvbXBvbmVudE1ldGhvZChcImVycm9yYmFyc1wiLFwic3VwcGx5RGVmYXVsdHNcIik7bSh0LGUsZnx8cHx8cix7YXhpczpcInpcIn0pLG0odCxlLGZ8fHB8fHIse2F4aXM6XCJ5XCIsaW5oZXJpdDpcInpcIn0pLG0odCxlLGZ8fHB8fHIse2F4aXM6XCJ4XCIsaW5oZXJpdDpcInpcIn0pfWVsc2UgZS52aXNpYmxlPSExfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHNcIjoxMDY1LFwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHNcIjoxMDcxLFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiOjEwNzYsXCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHNcIjoxMDc3LFwiLi9hdHRyaWJ1dGVzXCI6MTA3OX1dLDEwODQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLnBsb3Q9dChcIi4vY29udmVydFwiKSxuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLm1hcmtlclN5bWJvbHM9dChcIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNvbG9yYmFyPVt7Y29udGFpbmVyOlwibWFya2VyXCIsbWluOlwiY21pblwiLG1heDpcImNtYXhcIn0se2NvbnRhaW5lcjpcImxpbmVcIixtaW46XCJjbWluXCIsbWF4OlwiY21heFwifV0sbi5jYWxjPXQoXCIuL2NhbGNcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJzY2F0dGVyM2RcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9nbDNkXCIpLG4uY2F0ZWdvcmllcz1bXCJnbDNkXCIsXCJzeW1ib2xzXCIsXCJzaG93TGVnZW5kXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2Vyc1wiOjY3NixcIi4uLy4uL3Bsb3RzL2dsM2RcIjo3ODksXCIuL2F0dHJpYnV0ZXNcIjoxMDc5LFwiLi9jYWxjXCI6MTA4MCxcIi4vY29udmVydFwiOjEwODIsXCIuL2RlZmF1bHRzXCI6MTA4M31dLDEwODU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCIpLGw9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxjPW4ubWFya2VyLHU9bi5saW5lLGg9Yy5saW5lO2UuZXhwb3J0cz17Y2FycGV0Ont2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGE6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGI6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LG1vZGU6bCh7fSxuLm1vZGUse2RmbHQ6XCJtYXJrZXJzXCJ9KSx0ZXh0Omwoe30sbi50ZXh0LHt9KSxob3ZlcnRleHQ6bCh7fSxuLmhvdmVydGV4dCx7fSksbGluZTp7Y29sb3I6dS5jb2xvcix3aWR0aDp1LndpZHRoLGRhc2g6dS5kYXNoLHNoYXBlOmwoe30sdS5zaGFwZSx7dmFsdWVzOltcImxpbmVhclwiLFwic3BsaW5lXCJdfSksc21vb3RoaW5nOnUuc21vb3RoaW5nLGVkaXRUeXBlOlwiY2FsY1wifSxjb25uZWN0Z2FwczpuLmNvbm5lY3RnYXBzLGZpbGw6bCh7fSxuLmZpbGwse3ZhbHVlczpbXCJub25lXCIsXCJ0b3NlbGZcIixcInRvbmV4dFwiXSxkZmx0Olwibm9uZVwifSksZmlsbGNvbG9yOm4uZmlsbGNvbG9yLG1hcmtlcjpsKHtzeW1ib2w6Yy5zeW1ib2wsb3BhY2l0eTpjLm9wYWNpdHksbWF4ZGlzcGxheWVkOmMubWF4ZGlzcGxheWVkLHNpemU6Yy5zaXplLHNpemVyZWY6Yy5zaXplcmVmLHNpemVtaW46Yy5zaXplbWluLHNpemVtb2RlOmMuc2l6ZW1vZGUsbGluZTpsKHt3aWR0aDpoLndpZHRoLGVkaXRUeXBlOlwiY2FsY1wifSxvKFwibWFya2VyLmxpbmVcIikpLGdyYWRpZW50OmMuZ3JhZGllbnQsZWRpdFR5cGU6XCJjYWxjXCJ9LG8oXCJtYXJrZXJcIikse2NvbG9yYmFyOnN9KSx0ZXh0Zm9udDpuLnRleHRmb250LHRleHRwb3NpdGlvbjpuLnRleHRwb3NpdGlvbixzZWxlY3RlZDpuLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6bi51bnNlbGVjdGVkLGhvdmVyaW5mbzpsKHt9LGkuaG92ZXJpbmZvLHtmbGFnczpbXCJhXCIsXCJiXCIsXCJ0ZXh0XCIsXCJuYW1lXCJdfSksaG92ZXJvbjpuLmhvdmVyb24saG92ZXJ0ZW1wbGF0ZTphKCl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIjo1NzksXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDYsXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIjoxMDUyfV0sMTA4NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsY1wiKSxhPXQoXCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YVwiKSxvPXQoXCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uXCIpLHM9dChcIi4uL3NjYXR0ZXIvY2FsY1wiKS5jYWxjTWFya2VyU2l6ZSxsPXQoXCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUuX2NhcnBldFRyYWNlPWwodCxlKTtpZihyJiZyLnZpc2libGUmJlwibGVnZW5kb25seVwiIT09ci52aXNpYmxlKXt2YXIgYztlLnhheGlzPXIueGF4aXMsZS55YXhpcz1yLnlheGlzO3ZhciB1LGgsZj1lLl9sZW5ndGgscD1uZXcgQXJyYXkoZiksZD0hMTtmb3IoYz0wO2M8ZjtjKyspaWYodT1lLmFbY10saD1lLmJbY10sbih1KSYmbihoKSl7dmFyIGc9ci5hYjJ4eSgrdSwraCwhMCksdj1yLmlzVmlzaWJsZSgrdSwraCk7dnx8KGQ9ITApLHBbY109e3g6Z1swXSx5OmdbMV0sYTp1LGI6aCx2aXM6dn19ZWxzZSBwW2NdPXt4OiExLHk6ITF9O3JldHVybiBlLl9uZWVkc0N1bGw9ZCxwWzBdLmNhcnBldD1yLHBbMF0udHJhY2U9ZSxzKGUsZiksaSh0LGUpLGEocCxlKSxvKHAsZSkscH19fSx7XCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkXCI6ODk3LFwiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGFcIjoxMDUxLFwiLi4vc2NhdHRlci9jYWxjXCI6MTA1MyxcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIjoxMDU0LFwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGNcIjoxMDU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSwxMDg3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi9zY2F0dGVyL2NvbnN0YW50c1wiKSxhPXQoXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCIpLG89dChcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCIpLHM9dChcIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0c1wiKSxsPXQoXCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHNcIiksYz10KFwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzXCIpLHU9dChcIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzXCIpLGg9dChcIi4vYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsZil7ZnVuY3Rpb24gcChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsaCxyLGkpfXAoXCJjYXJwZXRcIiksZS54YXhpcz1cInhcIixlLnlheGlzPVwieVwiO3ZhciBkPXAoXCJhXCIpLGc9cChcImJcIiksdj1NYXRoLm1pbihkLmxlbmd0aCxnLmxlbmd0aCk7aWYodil7ZS5fbGVuZ3RoPXYscChcInRleHRcIikscChcImhvdmVydGV4dFwiKSxwKFwibW9kZVwiLHY8aS5QVFNfTElORVNPTkxZP1wibGluZXMrbWFya2Vyc1wiOlwibGluZXNcIiksYS5oYXNMaW5lcyhlKSYmKHModCxlLHIsZixwKSxsKHQsZSxwKSxwKFwiY29ubmVjdGdhcHNcIikpLGEuaGFzTWFya2VycyhlKSYmbyh0LGUscixmLHAse2dyYWRpZW50OiEwfSksYS5oYXNUZXh0KGUpJiZjKHQsZSxmLHApO3ZhciBtPVtdOyhhLmhhc01hcmtlcnMoZSl8fGEuaGFzVGV4dChlKSkmJihwKFwibWFya2VyLm1heGRpc3BsYXllZFwiKSxtLnB1c2goXCJwb2ludHNcIikpLHAoXCJmaWxsXCIpLFwibm9uZVwiIT09ZS5maWxsJiYodSh0LGUscixwKSxhLmhhc0xpbmVzKGUpfHxsKHQsZSxwKSksXCJ0b25leHRcIiE9PWUuZmlsbCYmXCJ0b3NlbGZcIiE9PWUuZmlsbHx8bS5wdXNoKFwiZmlsbHNcIiksXCJmaWxsc1wiIT09cChcImhvdmVyb25cIixtLmpvaW4oXCIrXCIpfHxcInBvaW50c1wiKSYmcChcImhvdmVydGVtcGxhdGVcIiksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUscCl9ZWxzZSBlLnZpc2libGU9ITF9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9zY2F0dGVyL2NvbnN0YW50c1wiOjEwNTYsXCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0c1wiOjEwNjEsXCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHNcIjoxMDY1LFwiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzXCI6MTA2NyxcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCI6MTA3MSxcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzXCI6MTA3NyxcIi4vYXR0cmlidXRlc1wiOjEwODV9XSwxMDg4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9bltpXTtyZXR1cm4gdC5hPWEuYSx0LmI9YS5iLHQueT1hLnksdH19LHt9XSwxMDg5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3NjYXR0ZXIvaG92ZXJcIiksaT10KFwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHRcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4odCxlLHIsYSk7aWYobyYmITEhPT1vWzBdLmluZGV4KXt2YXIgcz1vWzBdO2lmKHZvaWQgMD09PXMuaW5kZXgpe3ZhciBsPTEtcy55MC90LnlhLl9sZW5ndGgsYz10LnhhLl9sZW5ndGgsdT1jKmwvMixoPWMtdTtyZXR1cm4gcy54MD1NYXRoLm1heChNYXRoLm1pbihzLngwLGgpLHUpLHMueDE9TWF0aC5tYXgoTWF0aC5taW4ocy54MSxoKSx1KSxvfXZhciBmPXMuY2Rbcy5pbmRleF07cy5hPWYuYSxzLmI9Zi5iLHMueExhYmVsVmFsPXZvaWQgMCxzLnlMYWJlbFZhbD12b2lkIDA7dmFyIHA9cy50cmFjZSxkPXAuX2NhcnBldCxnPWQuYWIyaWooW2YuYSxmLmJdKSx2PU1hdGguZmxvb3IoZ1swXSksbT1nWzBdLXYseT1NYXRoLmZsb29yKGdbMV0pLHg9Z1sxXS15LGI9ZC5ldmFseHkoW10sdix5LG0seCk7cy55TGFiZWw9YlsxXS50b0ZpeGVkKDMpLGRlbGV0ZSBzLnRleHQ7dmFyIF89W107aWYoIXAuaG92ZXJ0ZW1wbGF0ZSl7dmFyIHc9KGYuaGl8fHAuaG92ZXJpbmZvKS5zcGxpdChcIitcIik7LTEhPT13LmluZGV4T2YoXCJhbGxcIikmJih3PVtcImFcIixcImJcIixcInRleHRcIl0pLC0xIT09dy5pbmRleE9mKFwiYVwiKSYmayhkLmFheGlzLGYuYSksLTEhPT13LmluZGV4T2YoXCJiXCIpJiZrKGQuYmF4aXMsZi5iKSxfLnB1c2goXCJ5OiBcIitzLnlMYWJlbCksLTEhPT13LmluZGV4T2YoXCJ0ZXh0XCIpJiZpKGYscCxfKSxzLmV4dHJhVGV4dD1fLmpvaW4oXCI8YnI+XCIpfXJldHVybiBvfWZ1bmN0aW9uIGsodCxlKXt2YXIgcjtyPXQubGFiZWxwcmVmaXgmJnQubGFiZWxwcmVmaXgubGVuZ3RoPjA/dC5sYWJlbHByZWZpeC5yZXBsYWNlKC8gPSAkLyxcIlwiKTp0Ll9ob3ZlcnRpdGxlLF8ucHVzaChyK1wiOiBcIitlLnRvRml4ZWQoMykrdC5sYWJlbHN1ZmZpeCl9fX0se1wiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHRcIjoxMDYwLFwiLi4vc2NhdHRlci9ob3ZlclwiOjEwNjN9XSwxMDkwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNvbG9yYmFyPXQoXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiKSxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLnBsb3Q9dChcIi4vcGxvdFwiKSxuLnN0eWxlPXQoXCIuLi9zY2F0dGVyL3N0eWxlXCIpLnN0eWxlLG4uc3R5bGVPblNlbGVjdD10KFwiLi4vc2NhdHRlci9zdHlsZVwiKS5zdHlsZU9uU2VsZWN0LG4uaG92ZXJQb2ludHM9dChcIi4vaG92ZXJcIiksbi5zZWxlY3RQb2ludHM9dChcIi4uL3NjYXR0ZXIvc2VsZWN0XCIpLG4uZXZlbnREYXRhPXQoXCIuL2V2ZW50X2RhdGFcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJzY2F0dGVyY2FycGV0XCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCIpLG4uY2F0ZWdvcmllcz1bXCJzdmdcIixcImNhcnBldFwiLFwic3ltYm9sc1wiLFwic2hvd0xlZ2VuZFwiLFwiY2FycGV0RGVwZW5kZW50XCIsXCJ6b29tU2NhbGVcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIjo3NjAsXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiOjEwNzAsXCIuLi9zY2F0dGVyL3NlbGVjdFwiOjEwNzMsXCIuLi9zY2F0dGVyL3N0eWxlXCI6MTA3NSxcIi4vYXR0cmlidXRlc1wiOjEwODUsXCIuL2NhbGNcIjoxMDg2LFwiLi9kZWZhdWx0c1wiOjEwODcsXCIuL2V2ZW50X2RhdGFcIjoxMDg4LFwiLi9ob3ZlclwiOjEwODksXCIuL3Bsb3RcIjoxMDkxfV0sMTA5MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9zY2F0dGVyL3Bsb3RcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcyxsLGMsdT1yWzBdWzBdLmNhcnBldCxoPXt4YXhpczppLmdldEZyb21JZCh0LHUueGF4aXN8fFwieFwiKSx5YXhpczppLmdldEZyb21JZCh0LHUueWF4aXN8fFwieVwiKSxwbG90OmUucGxvdH07Zm9yKG4odCxoLHIsbykscz0wO3M8ci5sZW5ndGg7cysrKWw9cltzXVswXS50cmFjZSxjPW8uc2VsZWN0QWxsKFwiZy50cmFjZVwiK2wudWlkK1wiIC5qcy1saW5lXCIpLGEuc2V0Q2xpcFVybChjLHJbc11bMF0uY2FycGV0Ll9jbGlwUGF0aElkLHQpfX0se1wiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9zY2F0dGVyL3Bsb3RcIjoxMDcyfV0sMTA5MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxpPXQoXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlc1wiKS5kYXNoLGw9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxjPXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsLHU9aS5tYXJrZXIsaD1pLmxpbmUsZj11LmxpbmU7ZS5leHBvcnRzPWMoe2xvbjp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIn0sbGF0Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwifSxsb2NhdGlvbnM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCJ9LGxvY2F0aW9ubW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiSVNPLTNcIixcIlVTQS1zdGF0ZXNcIixcImNvdW50cnkgbmFtZXNcIl0sZGZsdDpcIklTTy0zXCJ9LG1vZGU6bCh7fSxpLm1vZGUse2RmbHQ6XCJtYXJrZXJzXCJ9KSx0ZXh0Omwoe30saS50ZXh0LHt9KSxob3ZlcnRleHQ6bCh7fSxpLmhvdmVydGV4dCx7fSksdGV4dGZvbnQ6aS50ZXh0Zm9udCx0ZXh0cG9zaXRpb246aS50ZXh0cG9zaXRpb24sbGluZTp7Y29sb3I6aC5jb2xvcix3aWR0aDpoLndpZHRoLGRhc2g6c30sY29ubmVjdGdhcHM6aS5jb25uZWN0Z2FwcyxtYXJrZXI6bCh7c3ltYm9sOnUuc3ltYm9sLG9wYWNpdHk6dS5vcGFjaXR5LHNpemU6dS5zaXplLHNpemVyZWY6dS5zaXplcmVmLHNpemVtaW46dS5zaXplbWluLHNpemVtb2RlOnUuc2l6ZW1vZGUsY29sb3JiYXI6dS5jb2xvcmJhcixsaW5lOmwoe3dpZHRoOmYud2lkdGh9LG8oXCJtYXJrZXIubGluZVwiKSksZ3JhZGllbnQ6dS5ncmFkaWVudH0sbyhcIm1hcmtlclwiKSksZmlsbDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibm9uZVwiLFwidG9zZWxmXCJdLGRmbHQ6XCJub25lXCJ9LGZpbGxjb2xvcjppLmZpbGxjb2xvcixzZWxlY3RlZDppLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6aS51bnNlbGVjdGVkLGhvdmVyaW5mbzpsKHt9LGEuaG92ZXJpbmZvLHtmbGFnczpbXCJsb25cIixcImxhdFwiLFwibG9jYXRpb25cIixcInRleHRcIixcIm5hbWVcIl19KSxob3ZlcnRlbXBsYXRlOm4oKX0sXCJjYWxjXCIsXCJuZXN0ZWRcIil9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXNcIjo1OTgsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiOjc0NixcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiOjEwNTJ9XSwxMDkzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNLGE9dChcIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjXCIpLG89dChcIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhXCIpLHM9dChcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIiksbD10KFwiLi4vLi4vbGliXCIpLl87ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPUFycmF5LmlzQXJyYXkoZS5sb2NhdGlvbnMpLGM9cj9lLmxvY2F0aW9ucy5sZW5ndGg6ZS5fbGVuZ3RoLHU9bmV3IEFycmF5KGMpLGg9MDtoPGM7aCsrKXt2YXIgZj11W2hdPXt9O2lmKHIpe3ZhciBwPWUubG9jYXRpb25zW2hdO2YubG9jPVwic3RyaW5nXCI9PXR5cGVvZiBwP3A6bnVsbH1lbHNle3ZhciBkPWUubG9uW2hdLGc9ZS5sYXRbaF07bihkKSYmbihnKT9mLmxvbmxhdD1bK2QsK2ddOmYubG9ubGF0PVtpLGldfX1yZXR1cm4gbyh1LGUpLGEodCxlKSxzKHUsZSksYyYmKHVbMF0udD17bGFiZWxzOntsYXQ6bCh0LFwibGF0OlwiKStcIiBcIixsb246bCh0LFwibG9uOlwiKStcIiBcIn19KSx1fX0se1wiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhXCI6MTA1MSxcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIjoxMDU0LFwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGNcIjoxMDU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSwxMDk0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCIpLGE9dChcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCIpLG89dChcIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0c1wiKSxzPXQoXCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHNcIiksbD10KFwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHNcIiksYz10KFwiLi9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1KXtmdW5jdGlvbiBoKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxjLHIsaSl9IWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9MCxvPXIoXCJsb2NhdGlvbnNcIik7aWYobylyZXR1cm4gcihcImxvY2F0aW9ubW9kZVwiKSxhPW8ubGVuZ3RoO3JldHVybiBuPXIoXCJsb25cIil8fFtdLGk9cihcImxhdFwiKXx8W10sYT1NYXRoLm1pbihuLmxlbmd0aCxpLmxlbmd0aCksZS5fbGVuZ3RoPWEsYX0oMCxlLGgpP2UudmlzaWJsZT0hMTooaChcInRleHRcIiksaChcImhvdmVydGV4dFwiKSxoKFwiaG92ZXJ0ZW1wbGF0ZVwiKSxoKFwibW9kZVwiKSxpLmhhc0xpbmVzKGUpJiYobyh0LGUscix1LGgpLGgoXCJjb25uZWN0Z2Fwc1wiKSksaS5oYXNNYXJrZXJzKGUpJiZhKHQsZSxyLHUsaCx7Z3JhZGllbnQ6ITB9KSxpLmhhc1RleHQoZSkmJnModCxlLHUsaCksaChcImZpbGxcIiksXCJub25lXCIhPT1lLmZpbGwmJmwodCxlLHIsaCksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsaCkpfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHNcIjoxMDYxLFwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzXCI6MTA2NSxcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCI6MTA3MSxcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzXCI6MTA3NyxcIi4vYXR0cmlidXRlc1wiOjEwOTJ9XSwxMDk1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubG9uPWUubG9uLHQubGF0PWUubGF0LHQubG9jYXRpb249ZS5sb2M/ZS5sb2M6bnVsbCx0fX0se31dLDEwOTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxpPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxhPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTSxvPXQoXCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvclwiKSxzPXQoXCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dFwiKSxsPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYz10LmNkLHU9Y1swXS50cmFjZSxoPXQueGEsZj10LnlhLHA9dC5zdWJwbG90LGQ9cC5wcm9qZWN0aW9uLmlzTG9uTGF0T3ZlckVkZ2VzLGc9cC5wcm9qZWN0O2lmKG4uZ2V0Q2xvc2VzdChjLGZ1bmN0aW9uKHQpe3ZhciBuPXQubG9ubGF0O2lmKG5bMF09PT1hKXJldHVybiAxLzA7aWYoZChuKSlyZXR1cm4gMS8wO3ZhciBpPWcobiksbz1nKFtlLHJdKSxzPU1hdGguYWJzKGlbMF0tb1swXSksbD1NYXRoLmFicyhpWzFdLW9bMV0pLGM9TWF0aC5tYXgoMyx0Lm1yY3x8MCk7cmV0dXJuIE1hdGgubWF4KE1hdGguc3FydChzKnMrbCpsKS1jLDEtMy9jKX0sdCksITEhPT10LmluZGV4KXt2YXIgdj1jW3QuaW5kZXhdLG09di5sb25sYXQseT1baC5jMnAobSksZi5jMnAobSldLHg9di5tcmN8fDE7cmV0dXJuIHQueDA9eVswXS14LHQueDE9eVswXSt4LHQueTA9eVsxXS14LHQueTE9eVsxXSt4LHQubG9jPXYubG9jLHQubG9uPW1bMF0sdC5sYXQ9bVsxXSx0LmNvbG9yPW8odSx2KSx0LmV4dHJhVGV4dD1mdW5jdGlvbih0LGUscixuKXtpZih0LmhvdmVydGVtcGxhdGUpcmV0dXJuO3ZhciBhPWUuaGl8fHQuaG92ZXJpbmZvLG89XCJhbGxcIj09PWE/bC5ob3ZlcmluZm8uZmxhZ3M6YS5zcGxpdChcIitcIiksYz0tMSE9PW8uaW5kZXhPZihcImxvY2F0aW9uXCIpJiZBcnJheS5pc0FycmF5KHQubG9jYXRpb25zKSx1PS0xIT09by5pbmRleE9mKFwibG9uXCIpLGg9LTEhPT1vLmluZGV4T2YoXCJsYXRcIiksZj0tMSE9PW8uaW5kZXhPZihcInRleHRcIikscD1bXTtmdW5jdGlvbiBkKHQpe3JldHVybiBpLnRpY2tUZXh0KHIsci5jMmwodCksXCJob3ZlclwiKS50ZXh0K1wiXFx4YjBcIn1jP3AucHVzaChlLmxvYyk6dSYmaD9wLnB1c2goXCIoXCIrZChlLmxvbmxhdFswXSkrXCIsIFwiK2QoZS5sb25sYXRbMV0pK1wiKVwiKTp1P3AucHVzaChuLmxvbitkKGUubG9ubGF0WzBdKSk6aCYmcC5wdXNoKG4ubGF0K2QoZS5sb25sYXRbMV0pKTtmJiZzKGUsdCxwKTtyZXR1cm4gcC5qb2luKFwiPGJyPlwiKX0odSx2LHAubW9ja0F4aXMsY1swXS50LmxhYmVscyksdC5ob3ZlcnRlbXBsYXRlPXUuaG92ZXJ0ZW1wbGF0ZSxbdF19fX0se1wiLi4vLi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0XCI6MTA2MCxcIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yXCI6MTA2MixcIi4vYXR0cmlidXRlc1wiOjEwOTJ9XSwxMDk3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNvbG9yYmFyPXQoXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiKSxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLnBsb3Q9dChcIi4vcGxvdFwiKSxuLnN0eWxlPXQoXCIuL3N0eWxlXCIpLG4uc3R5bGVPblNlbGVjdD10KFwiLi4vc2NhdHRlci9zdHlsZVwiKS5zdHlsZU9uU2VsZWN0LG4uaG92ZXJQb2ludHM9dChcIi4vaG92ZXJcIiksbi5ldmVudERhdGE9dChcIi4vZXZlbnRfZGF0YVwiKSxuLnNlbGVjdFBvaW50cz10KFwiLi9zZWxlY3RcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJzY2F0dGVyZ2VvXCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvZ2VvXCIpLG4uY2F0ZWdvcmllcz1bXCJnZW9cIixcInN5bWJvbHNcIixcInNob3dMZWdlbmRcIixcInNjYXR0ZXItbGlrZVwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4uLy4uL3Bsb3RzL2dlb1wiOjc3OSxcIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyXCI6MTA3MCxcIi4uL3NjYXR0ZXIvc3R5bGVcIjoxMDc1LFwiLi9hdHRyaWJ1dGVzXCI6MTA5MixcIi4vY2FsY1wiOjEwOTMsXCIuL2RlZmF1bHRzXCI6MTA5NCxcIi4vZXZlbnRfZGF0YVwiOjEwOTUsXCIuL2hvdmVyXCI6MTA5NixcIi4vcGxvdFwiOjEwOTgsXCIuL3NlbGVjdFwiOjEwOTksXCIuL3N0eWxlXCI6MTEwMH1dLDEwOTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNLG89dChcIi4uLy4uL2xpYi90b3BvanNvbl91dGlsc1wiKS5nZXRUb3BvanNvbkZlYXR1cmVzLHM9dChcIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHNcIikubG9jYXRpb25Ub0ZlYXR1cmUsbD10KFwiLi4vLi4vbGliL2dlb2pzb25fdXRpbHNcIiksYz10KFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiKSx1PXQoXCIuL3N0eWxlXCIpO2Z1bmN0aW9uIGgodCxlKXt2YXIgcj10WzBdLnRyYWNlO2lmKEFycmF5LmlzQXJyYXkoci5sb2NhdGlvbnMpKWZvcih2YXIgbj1vKHIsZSksaT1yLmxvY2F0aW9ubW9kZSxsPTA7bDx0Lmxlbmd0aDtsKyspe3ZhciBjPXRbbF0sdT1zKGksYy5sb2Msbik7Yy5sb25sYXQ9dT91LnByb3BlcnRpZXMuY3Q6W2EsYV19fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspaChyW29dLGUudG9wb2pzb24pO2Z1bmN0aW9uIHModCxlKXt0LmxvbmxhdFswXT09PWEmJm4uc2VsZWN0KGUpLnJlbW92ZSgpfXZhciBmPWUubGF5ZXJzLmZyb250cGxvdC5zZWxlY3QoXCIuc2NhdHRlcmxheWVyXCIpLHA9aS5tYWtlVHJhY2VHcm91cHMoZixyLFwidHJhY2Ugc2NhdHRlcmdlb1wiKTtwLnNlbGVjdEFsbChcIipcIikucmVtb3ZlKCkscC5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWVbMF0ubm9kZTM9bi5zZWxlY3QodGhpcyksYT1lWzBdLnRyYWNlO2lmKGMuaGFzTGluZXMoYSl8fFwibm9uZVwiIT09YS5maWxsKXt2YXIgbz1sLmNhbGNUcmFjZVRvTGluZUNvb3JkcyhlKSxoPVwibm9uZVwiIT09YS5maWxsP2wubWFrZVBvbHlnb24obyk6bC5tYWtlTGluZShvKTtyLnNlbGVjdEFsbChcInBhdGguanMtbGluZVwiKS5kYXRhKFt7Z2VvanNvbjpoLHRyYWNlOmF9XSkuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoXCJqcy1saW5lXCIsITApLnN0eWxlKFwic3Ryb2tlLW1pdGVybGltaXRcIiwyKX1jLmhhc01hcmtlcnMoYSkmJnIuc2VsZWN0QWxsKFwicGF0aC5wb2ludFwiKS5kYXRhKGkuaWRlbnRpdHkpLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5jbGFzc2VkKFwicG9pbnRcIiwhMCkuZWFjaChmdW5jdGlvbih0KXtzKHQsdGhpcyl9KSxjLmhhc1RleHQoYSkmJnIuc2VsZWN0QWxsKFwiZ1wiKS5kYXRhKGkuaWRlbnRpdHkpLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hcHBlbmQoXCJ0ZXh0XCIpLmVhY2goZnVuY3Rpb24odCl7cyh0LHRoaXMpfSksdSh0LGUpfSl9fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlsc1wiOjY5NCxcIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzXCI6Njk1LFwiLi4vLi4vbGliL3RvcG9qc29uX3V0aWxzXCI6NzI4LFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiOjEwNzYsXCIuL3N0eWxlXCI6MTEwMCxkMzoxNTV9XSwxMDk5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIiksaT10KFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKS5CQUROVU07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLHMsbCxjPXQuY2QsdT10LnhheGlzLGg9dC55YXhpcyxmPVtdLHA9Y1swXS50cmFjZTtpZighbi5oYXNNYXJrZXJzKHApJiYhbi5oYXNUZXh0KHApKXJldHVybltdO2lmKCExPT09ZSlmb3IobD0wO2w8Yy5sZW5ndGg7bCsrKWNbbF0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihsPTA7bDxjLmxlbmd0aDtsKyspKGE9KHI9Y1tsXSkubG9ubGF0KVswXSE9PWkmJihvPXUuYzJwKGEpLHM9aC5jMnAoYSksZS5jb250YWlucyhbbyxzXSxudWxsLGwsdCk/KGYucHVzaCh7cG9pbnROdW1iZXI6bCxsb246YVswXSxsYXQ6YVsxXX0pLHIuc2VsZWN0ZWQ9MSk6ci5zZWxlY3RlZD0wKTtyZXR1cm4gZn19LHtcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCI6MTA3Nn1dLDExMDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksbz10KFwiLi4vc2NhdHRlci9zdHlsZVwiKSxzPW8uc3R5bGVQb2ludHMsbD1vLnN0eWxlVGV4dDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlJiZmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0udHJhY2Usbz1lWzBdLm5vZGUzO28uc3R5bGUoXCJvcGFjaXR5XCIsZVswXS50cmFjZS5vcGFjaXR5KSxzKG8scix0KSxsKG8scix0KSxvLnNlbGVjdEFsbChcInBhdGguanMtbGluZVwiKS5zdHlsZShcImZpbGxcIixcIm5vbmVcIikuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPXQudHJhY2Usbz1yLmxpbmV8fHt9O2UuY2FsbChhLnN0cm9rZSxvLmNvbG9yKS5jYWxsKGkuZGFzaExpbmUsby5kYXNofHxcIlwiLG8ud2lkdGh8fDApLFwibm9uZVwiIT09ci5maWxsJiZlLmNhbGwoYS5maWxsLHIuZmlsbGNvbG9yKX0pfSh0LGUpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uL3NjYXR0ZXIvc3R5bGVcIjoxMDc1LGQzOjE1NX1dLDExMDE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LHM9dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGwsbD10KFwiLi9jb25zdGFudHNcIikuREFTSEVTLGM9aS5saW5lLHU9aS5tYXJrZXIsaD11LmxpbmUsZj1lLmV4cG9ydHM9cyh7eDppLngseDA6aS54MCxkeDppLmR4LHk6aS55LHkwOmkueTAsZHk6aS5keSx0ZXh0OmkudGV4dCxob3ZlcnRleHQ6aS5ob3ZlcnRleHQsdGV4dHBvc2l0aW9uOmkudGV4dHBvc2l0aW9uLHRleHRmb250OmkudGV4dGZvbnQsbW9kZTp7dmFsVHlwZTpcImZsYWdsaXN0XCIsZmxhZ3M6W1wibGluZXNcIixcIm1hcmtlcnNcIixcInRleHRcIl0sZXh0cmFzOltcIm5vbmVcIl19LGxpbmU6e2NvbG9yOmMuY29sb3Isd2lkdGg6Yy53aWR0aCxzaGFwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibGluZWFyXCIsXCJodlwiLFwidmhcIixcImh2aFwiLFwidmh2XCJdLGRmbHQ6XCJsaW5lYXJcIixlZGl0VHlwZTpcInBsb3RcIn0sZGFzaDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6T2JqZWN0LmtleXMobCksZGZsdDpcInNvbGlkXCJ9fSxtYXJrZXI6byh7fSxhKFwibWFya2VyXCIpLHtzeW1ib2w6dS5zeW1ib2wsc2l6ZTp1LnNpemUsc2l6ZXJlZjp1LnNpemVyZWYsc2l6ZW1pbjp1LnNpemVtaW4sc2l6ZW1vZGU6dS5zaXplbW9kZSxvcGFjaXR5OnUub3BhY2l0eSxjb2xvcmJhcjp1LmNvbG9yYmFyLGxpbmU6byh7fSxhKFwibWFya2VyLmxpbmVcIikse3dpZHRoOmgud2lkdGh9KX0pLGNvbm5lY3RnYXBzOmkuY29ubmVjdGdhcHMsZmlsbDpvKHt9LGkuZmlsbCx7ZGZsdDpcIm5vbmVcIn0pLGZpbGxjb2xvcjppLmZpbGxjb2xvcixzZWxlY3RlZDp7bWFya2VyOmkuc2VsZWN0ZWQubWFya2VyLHRleHRmb250Omkuc2VsZWN0ZWQudGV4dGZvbnR9LHVuc2VsZWN0ZWQ6e21hcmtlcjppLnVuc2VsZWN0ZWQubWFya2VyLHRleHRmb250OmkudW5zZWxlY3RlZC50ZXh0Zm9udH0sb3BhY2l0eTpuLm9wYWNpdHl9LFwiY2FsY1wiLFwibmVzdGVkXCIpO2YueC5lZGl0VHlwZT1mLnkuZWRpdFR5cGU9Zi54MC5lZGl0VHlwZT1mLnkwLmVkaXRUeXBlPVwiY2FsYytjbGVhckF4aXNUeXBlc1wiLGYuaG92ZXJ0ZW1wbGF0ZT1pLmhvdmVydGVtcGxhdGV9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCI6MTA1MixcIi4vY29uc3RhbnRzXCI6MTEwMn1dLDExMDI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e1RPT19NQU5ZX1BPSU5UUzoxZTUsU1lNQk9MX1NERl9TSVpFOjIwMCxTWU1CT0xfU0laRToyMCxTWU1CT0xfU1RST0tFOjEsRE9UX1JFOi8tZG90LyxPUEVOX1JFOi8tb3Blbi8sREFTSEVTOntzb2xpZDpbMV0sZG90OlsxLDFdLGRhc2g6WzQsMV0sbG9uZ2Rhc2g6WzgsMV0sZGFzaGRvdDpbNCwxLDEsMV0sbG9uZ2Rhc2hkb3Q6WzgsMSwxLDFdfX19LHt9XSwxMTAzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcInN2Zy1wYXRoLXNkZlwiKSxhPXQoXCJjb2xvci1ub3JtYWxpemVcIiksbz10KFwiLi4vLi4vcmVnaXN0cnlcIikscz10KFwiLi4vLi4vbGliXCIpLGw9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxjPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIiksdT10KFwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvclwiKS5mb3JtYXRDb2xvcixoPXQoXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCIpLGY9dChcIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jXCIpLHA9dChcIi4vY29uc3RhbnRzXCIpLGQ9dChcIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnNcIikuREVTRUxFQ1RESU0sZz17c3RhcnQ6MSxsZWZ0OjEsZW5kOi0xLHJpZ2h0Oi0xLG1pZGRsZTowLGNlbnRlcjowLGJvdHRvbToxLHRvcDotMX07ZnVuY3Rpb24gdih0KXt2YXIgZSxyPXQuX2xlbmd0aCxpPXQudGV4dGZvbnQsYT10LnRleHRwb3NpdGlvbixvPUFycmF5LmlzQXJyYXkoYSk/YTpbYV0scz1pLmNvbG9yLGw9aS5zaXplLGM9aS5mYW1pbHksdT17fTtmb3IodS50ZXh0PXQudGV4dCx1Lm9wYWNpdHk9dC5vcGFjaXR5LHUuZm9udD17fSx1LmFsaWduPVtdLHUuYmFzZWxpbmU9W10sZT0wO2U8by5sZW5ndGg7ZSsrKXt2YXIgaD1vW2VdLnNwbGl0KC9cXHMrLyk7c3dpdGNoKGhbMV0pe2Nhc2VcImxlZnRcIjp1LmFsaWduLnB1c2goXCJyaWdodFwiKTticmVhaztjYXNlXCJyaWdodFwiOnUuYWxpZ24ucHVzaChcImxlZnRcIik7YnJlYWs7ZGVmYXVsdDp1LmFsaWduLnB1c2goaFsxXSl9c3dpdGNoKGhbMF0pe2Nhc2VcInRvcFwiOnUuYmFzZWxpbmUucHVzaChcImJvdHRvbVwiKTticmVhaztjYXNlXCJib3R0b21cIjp1LmJhc2VsaW5lLnB1c2goXCJ0b3BcIik7YnJlYWs7ZGVmYXVsdDp1LmJhc2VsaW5lLnB1c2goaFswXSl9fWlmKEFycmF5LmlzQXJyYXkocykpZm9yKHUuY29sb3I9bmV3IEFycmF5KHIpLGU9MDtlPHI7ZSsrKXUuY29sb3JbZV09c1tlXTtlbHNlIHUuY29sb3I9cztpZihBcnJheS5pc0FycmF5KGwpfHxBcnJheS5pc0FycmF5KGMpKWZvcih1LmZvbnQ9bmV3IEFycmF5KHIpLGU9MDtlPHI7ZSsrKXt2YXIgZj11LmZvbnRbZV09e307Zi5zaXplPUFycmF5LmlzQXJyYXkobCk/bihsW2VdKT9sW2VdOjA6bCxmLmZhbWlseT1BcnJheS5pc0FycmF5KGMpP2NbZV06Y31lbHNlIHUuZm9udD17c2l6ZTpsLGZhbWlseTpjfTtyZXR1cm4gdX1mdW5jdGlvbiBtKHQpe3ZhciBlLHIsbj10Ll9sZW5ndGgsaT10Lm1hcmtlcixvPXt9LGw9QXJyYXkuaXNBcnJheShpLnN5bWJvbCksYz1zLmlzQXJyYXlPclR5cGVkQXJyYXkoaS5jb2xvciksaD1zLmlzQXJyYXlPclR5cGVkQXJyYXkoaS5saW5lLmNvbG9yKSxkPXMuaXNBcnJheU9yVHlwZWRBcnJheShpLm9wYWNpdHkpLGc9cy5pc0FycmF5T3JUeXBlZEFycmF5KGkuc2l6ZSksdj1zLmlzQXJyYXlPclR5cGVkQXJyYXkoaS5saW5lLndpZHRoKTtpZihsfHwocj1wLk9QRU5fUkUudGVzdChpLnN5bWJvbCkpLGx8fGN8fGh8fGQpe28uY29sb3JzPW5ldyBBcnJheShuKSxvLmJvcmRlckNvbG9ycz1uZXcgQXJyYXkobik7dmFyIG09dShpLGkub3BhY2l0eSxuKSx5PXUoaS5saW5lLGkub3BhY2l0eSxuKTtpZighQXJyYXkuaXNBcnJheSh5WzBdKSl7dmFyIHg9eTtmb3IoeT1BcnJheShuKSxlPTA7ZTxuO2UrKyl5W2VdPXh9aWYoIUFycmF5LmlzQXJyYXkobVswXSkpe3ZhciBiPW07Zm9yKG09QXJyYXkobiksZT0wO2U8bjtlKyspbVtlXT1ifWZvcihvLmNvbG9ycz1tLG8uYm9yZGVyQ29sb3JzPXksZT0wO2U8bjtlKyspe2lmKGwpe3ZhciBfPWkuc3ltYm9sW2VdO3I9cC5PUEVOX1JFLnRlc3QoXyl9ciYmKHlbZV09bVtlXS5zbGljZSgpLG1bZV09bVtlXS5zbGljZSgpLG1bZV1bM109MCl9by5vcGFjaXR5PXQub3BhY2l0eX1lbHNlIHI/KG8uY29sb3I9YShpLmNvbG9yLFwidWludDhcIiksby5jb2xvclszXT0wLG8uYm9yZGVyQ29sb3I9YShpLmNvbG9yLFwidWludDhcIikpOihvLmNvbG9yPWEoaS5jb2xvcixcInVpbnQ4XCIpLG8uYm9yZGVyQ29sb3I9YShpLmxpbmUuY29sb3IsXCJ1aW50OFwiKSksby5vcGFjaXR5PXQub3BhY2l0eSppLm9wYWNpdHk7aWYobClmb3Ioby5tYXJrZXJzPW5ldyBBcnJheShuKSxlPTA7ZTxuO2UrKylvLm1hcmtlcnNbZV09TShpLnN5bWJvbFtlXSk7ZWxzZSBvLm1hcmtlcj1NKGkuc3ltYm9sKTt2YXIgdyxrPWYodCk7aWYoZ3x8dil7dmFyIEEsVD1vLnNpemVzPW5ldyBBcnJheShuKSxTPW8uYm9yZGVyU2l6ZXM9bmV3IEFycmF5KG4pLEU9MDtpZihnKXtmb3IoZT0wO2U8bjtlKyspVFtlXT1rKGkuc2l6ZVtlXSksRSs9VFtlXTtBPUUvbn1lbHNlIGZvcih3PWsoaS5zaXplKSxlPTA7ZTxuO2UrKylUW2VdPXc7aWYodilmb3IoZT0wO2U8bjtlKyspU1tlXT1pLmxpbmUud2lkdGhbZV0vMjtlbHNlIGZvcih3PWkubGluZS53aWR0aC8yLGU9MDtlPG47ZSsrKVNbZV09dztvLnNpemVBdmc9QX1lbHNlIG8uc2l6ZT1rKGkmJmkuc2l6ZXx8MTApLG8uYm9yZGVyU2l6ZXM9ayhpLmxpbmUud2lkdGgpO3JldHVybiBvfWZ1bmN0aW9uIHkodCxlKXt2YXIgcj10Lm1hcmtlcixuPXt9O3JldHVybiBlPyhlLm1hcmtlciYmZS5tYXJrZXIuc3ltYm9sP249bShzLmV4dGVuZEZsYXQoe30scixlLm1hcmtlcikpOmUubWFya2VyJiYoZS5tYXJrZXIuc2l6ZSYmKG4uc2l6ZT1lLm1hcmtlci5zaXplLzIpLGUubWFya2VyLmNvbG9yJiYobi5jb2xvcnM9ZS5tYXJrZXIuY29sb3IpLHZvaWQgMCE9PWUubWFya2VyLm9wYWNpdHkmJihuLm9wYWNpdHk9ZS5tYXJrZXIub3BhY2l0eSkpLG4pOm59ZnVuY3Rpb24geCh0LGUpe3ZhciByPXt9O2lmKCFlKXJldHVybiByO2lmKGUudGV4dGZvbnQpe3ZhciBuPXtvcGFjaXR5OjEsdGV4dDp0LnRleHQsdGV4dHBvc2l0aW9uOnQudGV4dHBvc2l0aW9uLHRleHRmb250OnMuZXh0ZW5kRmxhdCh7fSx0LnRleHRmb250KX07ZS50ZXh0Zm9udCYmcy5leHRlbmRGbGF0KG4udGV4dGZvbnQsZS50ZXh0Zm9udCkscj12KG4pfXJldHVybiByfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj17Y2FwU2l6ZToyKmUud2lkdGgsbGluZVdpZHRoOmUudGhpY2tuZXNzLGNvbG9yOmUuY29sb3J9O3JldHVybiBlLmNvcHlfeXN0eWxlJiYocj10LmVycm9yX3kpLHJ9dmFyIF89cC5TWU1CT0xfU0RGX1NJWkUsdz1wLlNZTUJPTF9TSVpFLGs9cC5TWU1CT0xfU1RST0tFLEE9e30sVD1sLnN5bWJvbEZ1bmNzWzBdKC4wNSp3KTtmdW5jdGlvbiBNKHQpe2lmKFwiY2lyY2xlXCI9PT10KXJldHVybiBudWxsO3ZhciBlLHIsbj1sLnN5bWJvbE51bWJlcih0KSxhPWwuc3ltYm9sRnVuY3NbbiUxMDBdLG89ISFsLnN5bWJvbE5vRG90W24lMTAwXSxzPSEhbC5zeW1ib2xOb0ZpbGxbbiUxMDBdLGM9cC5ET1RfUkUudGVzdCh0KTtyZXR1cm4gQVt0XT9BW3RdOihlPWMmJiFvP2EoMS4xKncpK1Q6YSh3KSxyPWkoZSx7dzpfLGg6Xyx2aWV3Qm94Olstdywtdyx3LHddLHN0cm9rZTpzP2s6LWt9KSxBW3RdPXIscnx8bnVsbCl9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUpe3ZhciByLG49e21hcmtlcjp2b2lkIDAsbWFya2VyU2VsOnZvaWQgMCxtYXJrZXJVbnNlbDp2b2lkIDAsbGluZTp2b2lkIDAsZmlsbDp2b2lkIDAsZXJyb3JYOnZvaWQgMCxlcnJvclk6dm9pZCAwLHRleHQ6dm9pZCAwLHRleHRTZWw6dm9pZCAwLHRleHRVbnNlbDp2b2lkIDB9O2lmKCEwIT09ZS52aXNpYmxlKXJldHVybiBuO2lmKGguaGFzVGV4dChlKSYmKG4udGV4dD12KGUpLG4udGV4dFNlbD14KGUsZS5zZWxlY3RlZCksbi50ZXh0VW5zZWw9eChlLGUudW5zZWxlY3RlZCkpLGguaGFzTWFya2VycyhlKSYmKG4ubWFya2VyPW0oZSksbi5tYXJrZXJTZWw9eShlLGUuc2VsZWN0ZWQpLG4ubWFya2VyVW5zZWw9eShlLGUudW5zZWxlY3RlZCksIWUudW5zZWxlY3RlZCYmQXJyYXkuaXNBcnJheShlLm1hcmtlci5vcGFjaXR5KSkpe3ZhciBpPWUubWFya2VyLm9wYWNpdHk7Zm9yKG4ubWFya2VyVW5zZWwub3BhY2l0eT1uZXcgQXJyYXkoaS5sZW5ndGgpLHI9MDtyPGkubGVuZ3RoO3IrKyluLm1hcmtlclVuc2VsLm9wYWNpdHlbcl09ZCppW3JdfWlmKGguaGFzTGluZXMoZSkpe24ubGluZT17b3ZlcmxheTohMCx0aGlja25lc3M6ZS5saW5lLndpZHRoLGNvbG9yOmUubGluZS5jb2xvcixvcGFjaXR5OmUub3BhY2l0eX07dmFyIGE9KHAuREFTSEVTW2UubGluZS5kYXNoXXx8WzFdKS5zbGljZSgpO2ZvcihyPTA7cjxhLmxlbmd0aDsrK3IpYVtyXSo9ZS5saW5lLndpZHRoO24ubGluZS5kYXNoZXM9YX1yZXR1cm4gZS5lcnJvcl94JiZlLmVycm9yX3gudmlzaWJsZSYmKG4uZXJyb3JYPWIoZSxlLmVycm9yX3gpKSxlLmVycm9yX3kmJmUuZXJyb3JfeS52aXNpYmxlJiYobi5lcnJvclk9YihlLGUuZXJyb3JfeSkpLGUuZmlsbCYmXCJub25lXCIhPT1lLmZpbGwmJihuLmZpbGw9e2Nsb3NlZDohMCxmaWxsOmUuZmlsbGNvbG9yLHRoaWNrbmVzczowfSksbn0sbWFya2VyU3R5bGU6bSxtYXJrZXJTZWxlY3Rpb246eSxsaW5lUG9zaXRpb25zOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9ci5sZW5ndGgsbz1hLzI7aWYoaC5oYXNMaW5lcyhlKSYmbylpZihcImh2XCI9PT1lLmxpbmUuc2hhcGUpe2ZvcihuPVtdLGk9MDtpPG8tMTtpKyspaXNOYU4oclsyKmldKXx8aXNOYU4oclsyKmkrMV0pP24ucHVzaChOYU4sTmFOLE5hTixOYU4pOihuLnB1c2goclsyKmldLHJbMippKzFdKSxpc05hTihyWzIqaSsyXSl8fGlzTmFOKHJbMippKzNdKT9uLnB1c2goTmFOLE5hTik6bi5wdXNoKHJbMippKzJdLHJbMippKzFdKSk7bi5wdXNoKHJbYS0yXSxyW2EtMV0pfWVsc2UgaWYoXCJodmhcIj09PWUubGluZS5zaGFwZSl7Zm9yKG49W10saT0wO2k8by0xO2krKylpZihpc05hTihyWzIqaV0pfHxpc05hTihyWzIqaSsxXSl8fGlzTmFOKHJbMippKzJdKXx8aXNOYU4oclsyKmkrM10pKWlzTmFOKHJbMippXSl8fGlzTmFOKHJbMippKzFdKT9uLnB1c2goTmFOLE5hTik6bi5wdXNoKHJbMippXSxyWzIqaSsxXSksbi5wdXNoKE5hTixOYU4pO2Vsc2V7dmFyIHM9KHJbMippXStyWzIqaSsyXSkvMjtuLnB1c2goclsyKmldLHJbMippKzFdLHMsclsyKmkrMV0scyxyWzIqaSszXSl9bi5wdXNoKHJbYS0yXSxyW2EtMV0pfWVsc2UgaWYoXCJ2aHZcIj09PWUubGluZS5zaGFwZSl7Zm9yKG49W10saT0wO2k8by0xO2krKylpZihpc05hTihyWzIqaV0pfHxpc05hTihyWzIqaSsxXSl8fGlzTmFOKHJbMippKzJdKXx8aXNOYU4oclsyKmkrM10pKWlzTmFOKHJbMippXSl8fGlzTmFOKHJbMippKzFdKT9uLnB1c2goTmFOLE5hTik6bi5wdXNoKHJbMippXSxyWzIqaSsxXSksbi5wdXNoKE5hTixOYU4pO2Vsc2V7dmFyIGw9KHJbMippKzFdK3JbMippKzNdKS8yO24ucHVzaChyWzIqaV0sclsyKmkrMV0sclsyKmldLGwsclsyKmkrMl0sbCl9bi5wdXNoKHJbYS0yXSxyW2EtMV0pfWVsc2UgaWYoXCJ2aFwiPT09ZS5saW5lLnNoYXBlKXtmb3Iobj1bXSxpPTA7aTxvLTE7aSsrKWlzTmFOKHJbMippXSl8fGlzTmFOKHJbMippKzFdKT9uLnB1c2goTmFOLE5hTixOYU4sTmFOKToobi5wdXNoKHJbMippXSxyWzIqaSsxXSksaXNOYU4oclsyKmkrMl0pfHxpc05hTihyWzIqaSszXSk/bi5wdXNoKE5hTixOYU4pOm4ucHVzaChyWzIqaV0sclsyKmkrM10pKTtuLnB1c2goclthLTJdLHJbYS0xXSl9ZWxzZSBuPXI7dmFyIGM9ITE7Zm9yKGk9MDtpPG4ubGVuZ3RoO2krKylpZihpc05hTihuW2ldKSl7Yz0hMDticmVha312YXIgdT1jfHxuLmxlbmd0aD5wLlRPT19NQU5ZX1BPSU5UUz9cInJlY3RcIjpoLmhhc01hcmtlcnMoZSk/XCJyZWN0XCI6XCJyb3VuZFwiO2lmKGMmJmUuY29ubmVjdGdhcHMpe3ZhciBmPW5bMF0sZD1uWzFdO2ZvcihpPTA7aTxuLmxlbmd0aDtpKz0yKWlzTmFOKG5baV0pfHxpc05hTihuW2krMV0pPyhuW2ldPWYsbltpKzFdPWQpOihmPW5baV0sZD1uW2krMV0pfXJldHVybntqb2luOnUscG9zaXRpb25zOm59fSxlcnJvckJhclBvc2l0aW9uczpmdW5jdGlvbih0LGUscixpLGEpe3ZhciBzPW8uZ2V0Q29tcG9uZW50TWV0aG9kKFwiZXJyb3JiYXJzXCIsXCJtYWtlQ29tcHV0ZUVycm9yXCIpLGw9Yy5nZXRGcm9tSWQodCxlLnhheGlzKSx1PWMuZ2V0RnJvbUlkKHQsZS55YXhpcyksaD1yLmxlbmd0aC8yLGY9e307ZnVuY3Rpb24gcCh0LGkpe3ZhciBhPWkuX2lkLmNoYXJBdCgwKSxvPWVbXCJlcnJvcl9cIithXTtpZihvJiZvLnZpc2libGUmJihcImxpbmVhclwiPT09aS50eXBlfHxcImxvZ1wiPT09aS50eXBlKSl7Zm9yKHZhciBsPXMobyksYz17eDowLHk6MX1bYV0sdT17eDpbMCwxLDIsM10seTpbMiwzLDAsMV19W2FdLHA9bmV3IEZsb2F0NjRBcnJheSg0KmgpLGQ9MS8wLGc9LTEvMCx2PTAsbT0wO3Y8aDt2KyssbSs9NCl7dmFyIHk9dFt2XTtpZihuKHkpKXt2YXIgeD1yWzIqditjXSxiPWwoeSx2KSxfPWJbMF0sdz1iWzFdO2lmKG4oXykmJm4odykpe3ZhciBrPXktXyxBPXkrdztwW20rdVswXV09eC1pLmMybChrKSxwW20rdVsxXV09aS5jMmwoQSkteCxwW20rdVsyXV09MCxwW20rdVszXV09MCxkPU1hdGgubWluKGQseS1fKSxnPU1hdGgubWF4KGcseSt3KX19fWZbYV09e3Bvc2l0aW9uczpyLGVycm9yczpwLF9ibmRzOltkLGddfX19cmV0dXJuIHAoaSxsKSxwKGEsdSksZn0sdGV4dFBvc2l0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9ZS5fbGVuZ3RoLG89e307aWYoaC5oYXNNYXJrZXJzKGUpKXt2YXIgcz1yLmZvbnQsbD1yLmFsaWduLGM9ci5iYXNlbGluZTtmb3Ioby5vZmZzZXQ9bmV3IEFycmF5KGEpLGk9MDtpPGE7aSsrKXt2YXIgdT1uLnNpemVzP24uc2l6ZXNbaV06bi5zaXplLGY9QXJyYXkuaXNBcnJheShzKT9zW2ldLnNpemU6cy5zaXplLHA9QXJyYXkuaXNBcnJheShsKT9sLmxlbmd0aD4xP2xbaV06bFswXTpsLGQ9QXJyYXkuaXNBcnJheShjKT9jLmxlbmd0aD4xP2NbaV06Y1swXTpjLHY9Z1twXSxtPWdbZF0seT11P3UvLjgrMTowLHg9LW0qeS0uNSptO28ub2Zmc2V0W2ldPVt2KnkvZix4L2ZdfX1yZXR1cm4gb319fSx7XCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zXCI6Njc3LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvclwiOjY5OCxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiOjc1MixcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmNcIjoxMDY5LFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiOjEwNzYsXCIuL2NvbnN0YW50c1wiOjExMDIsXCJjb2xvci1ub3JtYWxpemVcIjoxMTEsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMixcInN2Zy1wYXRoLXNkZlwiOjUyMH1dLDExMDQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGE9dChcIi4vYXR0cmlidXRlc1wiKSxvPXQoXCIuLi9zY2F0dGVyL2NvbnN0YW50c1wiKSxzPXQoXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCIpLGw9dChcIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHNcIiksYz10KFwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHNcIiksdT10KFwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzXCIpLGg9dChcIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzXCIpLGY9dChcIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0c1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscCl7ZnVuY3Rpb24gZChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfXZhciBnPSEhdC5tYXJrZXImJi8tb3Blbi8udGVzdCh0Lm1hcmtlci5zeW1ib2wpLHY9cy5pc0J1YmJsZSh0KSxtPWwodCxlLHAsZCk7aWYobSl7dmFyIHk9bTxvLlBUU19MSU5FU09OTFk/XCJsaW5lcyttYXJrZXJzXCI6XCJsaW5lc1wiO2QoXCJ0ZXh0XCIpLGQoXCJob3ZlcnRleHRcIiksZChcImhvdmVydGVtcGxhdGVcIiksZChcIm1vZGVcIix5KSxzLmhhc0xpbmVzKGUpJiYoZChcImNvbm5lY3RnYXBzXCIpLHUodCxlLHIscCxkKSxkKFwibGluZS5zaGFwZVwiKSkscy5oYXNNYXJrZXJzKGUpJiYoYyh0LGUscixwLGQpLGQoXCJtYXJrZXIubGluZS53aWR0aFwiLGd8fHY/MTowKSkscy5oYXNUZXh0KGUpJiZmKHQsZSxwLGQpO3ZhciB4PShlLmxpbmV8fHt9KS5jb2xvcixiPShlLm1hcmtlcnx8e30pLmNvbG9yO2QoXCJmaWxsXCIpLFwibm9uZVwiIT09ZS5maWxsJiZoKHQsZSxyLGQpO3ZhciBfPWkuZ2V0Q29tcG9uZW50TWV0aG9kKFwiZXJyb3JiYXJzXCIsXCJzdXBwbHlEZWZhdWx0c1wiKTtfKHQsZSx4fHxifHxyLHtheGlzOlwieVwifSksXyh0LGUseHx8Ynx8cix7YXhpczpcInhcIixpbmhlcml0OlwieVwifSksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsZCl9ZWxzZSBlLnZpc2libGU9ITF9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL3NjYXR0ZXIvY29uc3RhbnRzXCI6MTA1NixcIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzXCI6MTA2MSxcIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0c1wiOjEwNjUsXCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0c1wiOjEwNzEsXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCI6MTA3NixcIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0c1wiOjEwNzcsXCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzXCI6MTA3OCxcIi4vYXR0cmlidXRlc1wiOjExMDF9XSwxMTA1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInJlZ2wtc2NhdHRlcjJkXCIpLGk9dChcInJlZ2wtbGluZTJkXCIpLGE9dChcInJlZ2wtZXJyb3IyZFwiKSxvPXQoXCJwb2ludC1jbHVzdGVyXCIpLHM9dChcImFycmF5LXJhbmdlXCIpLGw9dChcImdsLXRleHRcIiksYz10KFwiLi4vLi4vcmVnaXN0cnlcIiksdT10KFwiLi4vLi4vbGliXCIpLGg9dChcIi4uLy4uL2xpYi9wcmVwYXJlX3JlZ2xcIiksZj10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCIpLHA9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2VcIikuZmluZEV4dHJlbWVzLGQ9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksZz10KFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiKSx2PXQoXCIuLi9zY2F0dGVyL2NhbGNcIiksbT12LmNhbGNNYXJrZXJTaXplLHk9di5jYWxjQXhpc0V4cGFuc2lvbix4PXYuc2V0Rmlyc3RTY2F0dGVyLGI9dChcIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjXCIpLF89dChcIi4uL3NjYXR0ZXIvbGlua190cmFjZXNcIiksdz10KFwiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3JcIiksaz10KFwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHRcIiksQT10KFwiLi9jb252ZXJ0XCIpLFQ9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNLE09dChcIi4vY29uc3RhbnRzXCIpLlRPT19NQU5ZX1BPSU5UUyxTPXQoXCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zXCIpLkRFU0VMRUNURElNO2Z1bmN0aW9uIEUodCxlLHIpe3ZhciBuPXQuX2V4dHJlbWVzW2UuX2lkXSxpPXAoZSxyLl9ibmRzLHtwYWRkZWQ6ITB9KTtuLm1pbj1uLm1pbi5jb25jYXQoaS5taW4pLG4ubWF4PW4ubWF4LmNvbmNhdChpLm1heCl9ZnVuY3Rpb24gQyh0LGUpe3ZhciByPWUuX3NjZW5lLG49e2NvdW50OjAsZGlydHk6ITAsbGluZU9wdGlvbnM6W10sZmlsbE9wdGlvbnM6W10sbWFya2VyT3B0aW9uczpbXSxtYXJrZXJTZWxlY3RlZE9wdGlvbnM6W10sbWFya2VyVW5zZWxlY3RlZE9wdGlvbnM6W10sZXJyb3JYT3B0aW9uczpbXSxlcnJvcllPcHRpb25zOltdLHRleHRPcHRpb25zOltdLHRleHRTZWxlY3RlZE9wdGlvbnM6W10sdGV4dFVuc2VsZWN0ZWRPcHRpb25zOltdfSxpPXtzZWxlY3RCYXRjaDpudWxsLHVuc2VsZWN0QmF0Y2g6bnVsbCxmaWxsMmQ6ITEsc2NhdHRlcjJkOiExLGVycm9yMmQ6ITEsbGluZTJkOiExLGdsVGV4dDohMSxzZWxlY3QyZDpudWxsfTtyZXR1cm4gZS5fc2NlbmV8fCgocj1lLl9zY2VuZT17fSkuaW5pdD1mdW5jdGlvbigpe3UuZXh0ZW5kRmxhdChyLGksbil9LHIuaW5pdCgpLHIudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXUucmVwZWF0KHQsci5jb3VudCk7aWYoci5maWxsMmQmJnIuZmlsbDJkLnVwZGF0ZShlKSxyLnNjYXR0ZXIyZCYmci5zY2F0dGVyMmQudXBkYXRlKGUpLHIubGluZTJkJiZyLmxpbmUyZC51cGRhdGUoZSksci5lcnJvcjJkJiZyLmVycm9yMmQudXBkYXRlKGUuY29uY2F0KGUpKSxyLnNlbGVjdDJkJiZyLnNlbGVjdDJkLnVwZGF0ZShlKSxyLmdsVGV4dClmb3IodmFyIG49MDtuPHIuY291bnQ7bisrKXIuZ2xUZXh0W25dLnVwZGF0ZSh0KX0sci5kcmF3PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXIuY291bnQsZT1yLmZpbGwyZCxuPXIuZXJyb3IyZCxpPXIubGluZTJkLGE9ci5zY2F0dGVyMmQsbz1yLmdsVGV4dCxzPXIuc2VsZWN0MmQsbD1yLnNlbGVjdEJhdGNoLGM9ci51bnNlbGVjdEJhdGNoLHU9MDt1PHQ7dSsrKWUmJnIuZmlsbE9yZGVyW3VdJiZlLmRyYXcoci5maWxsT3JkZXJbdV0pLGkmJnIubGluZU9wdGlvbnNbdV0mJmkuZHJhdyh1KSxuJiYoci5lcnJvclhPcHRpb25zW3VdJiZuLmRyYXcodSksci5lcnJvcllPcHRpb25zW3VdJiZuLmRyYXcodSt0KSksIWF8fCFyLm1hcmtlck9wdGlvbnNbdV18fGwmJmxbdV18fGEuZHJhdyh1KSxvW3VdJiZyLnRleHRPcHRpb25zW3VdJiZvW3VdLnJlbmRlcigpO2EmJnMmJmwmJihzLmRyYXcobCksYS5kcmF3KGMpKSxyLmRpcnR5PSExfSxyLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyLmZpbGwyZCYmci5maWxsMmQuZGVzdHJveSYmci5maWxsMmQuZGVzdHJveSgpLHIuc2NhdHRlcjJkJiZyLnNjYXR0ZXIyZC5kZXN0cm95JiZyLnNjYXR0ZXIyZC5kZXN0cm95KCksci5lcnJvcjJkJiZyLmVycm9yMmQuZGVzdHJveSYmci5lcnJvcjJkLmRlc3Ryb3koKSxyLmxpbmUyZCYmci5saW5lMmQuZGVzdHJveSYmci5saW5lMmQuZGVzdHJveSgpLHIuc2VsZWN0MmQmJnIuc2VsZWN0MmQuZGVzdHJveSYmci5zZWxlY3QyZC5kZXN0cm95KCksci5nbFRleHQmJnIuZ2xUZXh0LmZvckVhY2goZnVuY3Rpb24odCl7dC5kZXN0cm95JiZ0LmRlc3Ryb3koKX0pLHIubGluZU9wdGlvbnM9bnVsbCxyLmZpbGxPcHRpb25zPW51bGwsci5tYXJrZXJPcHRpb25zPW51bGwsci5tYXJrZXJTZWxlY3RlZE9wdGlvbnM9bnVsbCxyLm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zPW51bGwsci5lcnJvclhPcHRpb25zPW51bGwsci5lcnJvcllPcHRpb25zPW51bGwsci50ZXh0T3B0aW9ucz1udWxsLHIudGV4dFNlbGVjdGVkT3B0aW9ucz1udWxsLHIudGV4dFVuc2VsZWN0ZWRPcHRpb25zPW51bGwsci5zZWxlY3RCYXRjaD1udWxsLHIudW5zZWxlY3RCYXRjaD1udWxsLGUuX3NjZW5lPW51bGx9KSxyLmRpcnR5fHx1LmV4dGVuZEZsYXQocixuKSxyfWZ1bmN0aW9uIEwodCxlLHIsbil7dmFyIGk9dC54YSxhPXQueWEsbz10LmRpc3RhbmNlLHM9dC5keHksbD10LmluZGV4LGg9e3BvaW50TnVtYmVyOmwseDplW2xdLHk6cltsXX07aC50eD1BcnJheS5pc0FycmF5KG4udGV4dCk/bi50ZXh0W2xdOm4udGV4dCxoLmh0eD1BcnJheS5pc0FycmF5KG4uaG92ZXJ0ZXh0KT9uLmhvdmVydGV4dFtsXTpuLmhvdmVydGV4dCxoLmRhdGE9QXJyYXkuaXNBcnJheShuLmN1c3RvbWRhdGEpP24uY3VzdG9tZGF0YVtsXTpuLmN1c3RvbWRhdGEsaC50cD1BcnJheS5pc0FycmF5KG4udGV4dHBvc2l0aW9uKT9uLnRleHRwb3NpdGlvbltsXTpuLnRleHRwb3NpdGlvbjt2YXIgZj1uLnRleHRmb250O2YmJihoLnRzPUFycmF5LmlzQXJyYXkoZi5zaXplKT9mLnNpemVbbF06Zi5zaXplLGgudGM9QXJyYXkuaXNBcnJheShmLmNvbG9yKT9mLmNvbG9yW2xdOmYuY29sb3IsaC50Zj1BcnJheS5pc0FycmF5KGYuZmFtaWx5KT9mLmZhbWlseVtsXTpmLmZhbWlseSk7dmFyIHA9bi5tYXJrZXI7cCYmKGgubXM9dS5pc0FycmF5T3JUeXBlZEFycmF5KHAuc2l6ZSk/cC5zaXplW2xdOnAuc2l6ZSxoLm1vPXUuaXNBcnJheU9yVHlwZWRBcnJheShwLm9wYWNpdHkpP3Aub3BhY2l0eVtsXTpwLm9wYWNpdHksaC5teD1BcnJheS5pc0FycmF5KHAuc3ltYm9sKT9wLnN5bWJvbFtsXTpwLnN5bWJvbCxoLm1jPXUuaXNBcnJheU9yVHlwZWRBcnJheShwLmNvbG9yKT9wLmNvbG9yW2xdOnAuY29sb3IpO3ZhciBkPXAmJnAubGluZTtkJiYoaC5tbGM9QXJyYXkuaXNBcnJheShkLmNvbG9yKT9kLmNvbG9yW2xdOmQuY29sb3IsaC5tbHc9dS5pc0FycmF5T3JUeXBlZEFycmF5KGQud2lkdGgpP2Qud2lkdGhbbF06ZC53aWR0aCk7dmFyIGc9cCYmcC5ncmFkaWVudDtnJiZcIm5vbmVcIiE9PWcudHlwZSYmKGgubWd0PUFycmF5LmlzQXJyYXkoZy50eXBlKT9nLnR5cGVbbF06Zy50eXBlLGgubWdjPUFycmF5LmlzQXJyYXkoZy5jb2xvcik/Zy5jb2xvcltsXTpnLmNvbG9yKTt2YXIgdj1pLmMycChoLngsITApLG09YS5jMnAoaC55LCEwKSx5PWgubXJjfHwxLHg9bi5ob3ZlcmxhYmVsO3gmJihoLmhiZz1BcnJheS5pc0FycmF5KHguYmdjb2xvcik/eC5iZ2NvbG9yW2xdOnguYmdjb2xvcixoLmhiYz1BcnJheS5pc0FycmF5KHguYm9yZGVyY29sb3IpP3guYm9yZGVyY29sb3JbbF06eC5ib3JkZXJjb2xvcixoLmh0cz1BcnJheS5pc0FycmF5KHguZm9udC5zaXplKT94LmZvbnQuc2l6ZVtsXTp4LmZvbnQuc2l6ZSxoLmh0Yz1BcnJheS5pc0FycmF5KHguZm9udC5jb2xvcik/eC5mb250LmNvbG9yW2xdOnguZm9udC5jb2xvcixoLmh0Zj1BcnJheS5pc0FycmF5KHguZm9udC5mYW1pbHkpP3guZm9udC5mYW1pbHlbbF06eC5mb250LmZhbWlseSxoLmhubD1BcnJheS5pc0FycmF5KHgubmFtZWxlbmd0aCk/eC5uYW1lbGVuZ3RoW2xdOngubmFtZWxlbmd0aCk7dmFyIGI9bi5ob3ZlcmluZm87YiYmKGguaGk9QXJyYXkuaXNBcnJheShiKT9iW2xdOmIpO3ZhciBfPW4uaG92ZXJ0ZW1wbGF0ZTtfJiYoaC5odD1BcnJheS5pc0FycmF5KF8pP19bbF06Xyk7dmFyIEE9e307cmV0dXJuIEFbdC5pbmRleF09aCx1LmV4dGVuZEZsYXQodCx7Y29sb3I6dyhuLGgpLHgwOnYteSx4MTp2K3kseExhYmVsVmFsOmgueCx5MDptLXkseTE6bSt5LHlMYWJlbFZhbDpoLnksY2Q6QSxkaXN0YW5jZTpvLHNwaWtlRGlzdGFuY2U6cyxob3ZlcnRlbXBsYXRlOmguaHR9KSxoLmh0eD90LnRleHQ9aC5odHg6aC50eD90LnRleHQ9aC50eDpuLnRleHQmJih0LnRleHQ9bi50ZXh0KSxrKGgsbix0KSxjLmdldENvbXBvbmVudE1ldGhvZChcImVycm9yYmFyc1wiLFwiaG92ZXJJbmZvXCIpKGgsbix0KSx0fWZ1bmN0aW9uIHoodCl7dmFyIGUscixuPXRbMF0saT1uLnRyYWNlLGE9bi50LG89YS5fc2NlbmUscz1hLmluZGV4LGw9by5zZWxlY3RCYXRjaFtzXSxjPW8udW5zZWxlY3RCYXRjaFtzXSxoPW8udGV4dE9wdGlvbnNbc10sZj1vLnRleHRTZWxlY3RlZE9wdGlvbnNbc118fHt9LHA9by50ZXh0VW5zZWxlY3RlZE9wdGlvbnNbc118fHt9LGc9dS5leHRlbmRGbGF0KHt9LGgpO2lmKGwmJmMpe3ZhciB2PWYuY29sb3IsbT1wLmNvbG9yLHk9aC5jb2xvcix4PUFycmF5LmlzQXJyYXkoeSk7Zm9yKGcuY29sb3I9bmV3IEFycmF5KGkuX2xlbmd0aCksZT0wO2U8bC5sZW5ndGg7ZSsrKXI9bFtlXSxnLmNvbG9yW3JdPXZ8fCh4P3lbcl06eSk7Zm9yKGU9MDtlPGMubGVuZ3RoO2UrKyl7cj1jW2VdO3ZhciBiPXg/eVtyXTp5O2cuY29sb3Jbcl09bXx8KHY/YjpkLmFkZE9wYWNpdHkoYixTKSl9fW8uZ2xUZXh0W3NdLnVwZGF0ZShnKX1lLmV4cG9ydHM9e21vZHVsZVR5cGU6XCJ0cmFjZVwiLG5hbWU6XCJzY2F0dGVyZ2xcIixiYXNlUGxvdE1vZHVsZTp0KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCIpLGNhdGVnb3JpZXM6W1wiZ2xcIixcInJlZ2xcIixcImNhcnRlc2lhblwiLFwic3ltYm9sc1wiLFwiZXJyb3JCYXJzT0tcIixcInNob3dMZWdlbmRcIixcInNjYXR0ZXItbGlrZVwiXSxhdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksc3VwcGx5RGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIiksY3Jvc3NUcmFjZURlZmF1bHRzOnQoXCIuLi9zY2F0dGVyL2Nyb3NzX3RyYWNlX2RlZmF1bHRzXCIpLGNvbG9yYmFyOnQoXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiKSxjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9dC5fZnVsbExheW91dCxzPWYuZ2V0RnJvbUlkKHQsZS54YXhpcyksbD1mLmdldEZyb21JZCh0LGUueWF4aXMpLGM9YS5fcGxvdHNbZS54YXhpcytlLnlheGlzXSxoPWUuX2xlbmd0aCxwPWg+PU0sZD0yKmgsZz17fSx2PXMubWFrZUNhbGNkYXRhKGUsXCJ4XCIpLF89bC5tYWtlQ2FsY2RhdGEoZSxcInlcIiksdz1uZXcgQXJyYXkoZCk7Zm9yKHI9MDtyPGg7cisrKW49dltyXSxpPV9bcl0sd1syKnJdPW49PT1UP05hTjpuLHdbMipyKzFdPWk9PT1UP05hTjppO2lmKFwibG9nXCI9PT1zLnR5cGUpZm9yKHI9MDtyPGQ7cis9Mil3W3JdPXMuYzJsKHdbcl0pO2lmKFwibG9nXCI9PT1sLnR5cGUpZm9yKHI9MTtyPGQ7cis9Mil3W3JdPWwuYzJsKHdbcl0pO2lmKHAmJlwibG9nXCIhPT1zLnR5cGUmJlwibG9nXCIhPT1sLnR5cGUpZy50cmVlPW8odyk7ZWxzZXt2YXIgaz1nLmlkcz1uZXcgQXJyYXkoaCk7Zm9yKHI9MDtyPGg7cisrKWtbcl09cn1iKHQsZSk7dmFyIFMsTD1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89QS5zdHlsZSh0LHIpO2lmKG8ubWFya2VyJiYoby5tYXJrZXIucG9zaXRpb25zPW4pLG8ubGluZSYmbi5sZW5ndGg+MSYmdS5leHRlbmRGbGF0KG8ubGluZSxBLmxpbmVQb3NpdGlvbnModCxyLG4pKSxvLmVycm9yWHx8by5lcnJvclkpe3ZhciBzPUEuZXJyb3JCYXJQb3NpdGlvbnModCxyLG4saSxhKTtvLmVycm9yWCYmdS5leHRlbmRGbGF0KG8uZXJyb3JYLHMueCksby5lcnJvclkmJnUuZXh0ZW5kRmxhdChvLmVycm9yWSxzLnkpfXJldHVybiBvLnRleHQmJih1LmV4dGVuZEZsYXQoby50ZXh0LHtwb3NpdGlvbnM6bn0sQS50ZXh0UG9zaXRpb24odCxyLG8udGV4dCxvLm1hcmtlcikpLHUuZXh0ZW5kRmxhdChvLnRleHRTZWwse3Bvc2l0aW9uczpufSxBLnRleHRQb3NpdGlvbih0LHIsby50ZXh0LG8ubWFya2VyU2VsKSksdS5leHRlbmRGbGF0KG8udGV4dFVuc2VsLHtwb3NpdGlvbnM6bn0sQS50ZXh0UG9zaXRpb24odCxyLG8udGV4dCxvLm1hcmtlclVuc2VsKSkpLG99KHQsMCxlLHcsdixfKSx6PUMoMCxjKTtyZXR1cm4geChhLGUpLHA/TC5tYXJrZXImJihTPTIqKEwubWFya2VyLnNpemVBdmd8fE1hdGgubWF4KEwubWFya2VyLnNpemUsMykpKTpTPW0oZSxoKSx5KHQsZSxzLGwsdixfLFMpLEwuZXJyb3JYJiZFKGUscyxMLmVycm9yWCksTC5lcnJvclkmJkUoZSxsLEwuZXJyb3JZKSxMLmZpbGwmJiF6LmZpbGwyZCYmKHouZmlsbDJkPSEwKSxMLm1hcmtlciYmIXouc2NhdHRlcjJkJiYoei5zY2F0dGVyMmQ9ITApLEwubGluZSYmIXoubGluZTJkJiYoei5saW5lMmQ9ITApLCFMLmVycm9yWCYmIUwuZXJyb3JZfHx6LmVycm9yMmR8fCh6LmVycm9yMmQ9ITApLEwudGV4dCYmIXouZ2xUZXh0JiYoei5nbFRleHQ9ITApLEwubWFya2VyJiYoTC5tYXJrZXIuc25hcD1nLnRyZWV8fE0pLHoubGluZU9wdGlvbnMucHVzaChMLmxpbmUpLHouZXJyb3JYT3B0aW9ucy5wdXNoKEwuZXJyb3JYKSx6LmVycm9yWU9wdGlvbnMucHVzaChMLmVycm9yWSksei5maWxsT3B0aW9ucy5wdXNoKEwuZmlsbCksei5tYXJrZXJPcHRpb25zLnB1c2goTC5tYXJrZXIpLHoubWFya2VyU2VsZWN0ZWRPcHRpb25zLnB1c2goTC5tYXJrZXJTZWwpLHoubWFya2VyVW5zZWxlY3RlZE9wdGlvbnMucHVzaChMLm1hcmtlclVuc2VsKSx6LnRleHRPcHRpb25zLnB1c2goTC50ZXh0KSx6LnRleHRTZWxlY3RlZE9wdGlvbnMucHVzaChMLnRleHRTZWwpLHoudGV4dFVuc2VsZWN0ZWRPcHRpb25zLnB1c2goTC50ZXh0VW5zZWwpLGcuX3NjZW5lPXosZy5pbmRleD16LmNvdW50LGcueD12LGcueT1fLGcucG9zaXRpb25zPXcsei5jb3VudCsrLFt7eDohMSx5OiExLHQ6Zyx0cmFjZTplfV19LHBsb3Q6ZnVuY3Rpb24odCxlLHIpe2lmKHIubGVuZ3RoKXt2YXIgbyxzLGM9dC5fZnVsbExheW91dCxmPWUuX3NjZW5lLHA9ZS54YXhpcyxkPWUueWF4aXM7aWYoZilpZihoKHQsW1wiQU5HTEVfaW5zdGFuY2VkX2FycmF5c1wiLFwiT0VTX2VsZW1lbnRfaW5kZXhfdWludFwiXSkpe3ZhciB2PWMuX2dsY2FudmFzLmRhdGEoKVswXS5yZWdsO2lmKF8odCxlLHIpLGYuZGlydHkpe2lmKCEwPT09Zi5lcnJvcjJkJiYoZi5lcnJvcjJkPWEodikpLCEwPT09Zi5saW5lMmQmJihmLmxpbmUyZD1pKHYpKSwhMD09PWYuc2NhdHRlcjJkJiYoZi5zY2F0dGVyMmQ9bih2KSksITA9PT1mLmZpbGwyZCYmKGYuZmlsbDJkPWkodikpLCEwPT09Zi5nbFRleHQpZm9yKGYuZ2xUZXh0PW5ldyBBcnJheShmLmNvdW50KSxvPTA7bzxmLmNvdW50O28rKylmLmdsVGV4dFtvXT1uZXcgbCh2KTtpZihmLmdsVGV4dCl7aWYoZi5jb3VudD5mLmdsVGV4dC5sZW5ndGgpe3ZhciBtPWYuY291bnQtZi5nbFRleHQubGVuZ3RoO2ZvcihvPTA7bzxtO28rKylmLmdsVGV4dC5wdXNoKG5ldyBsKHYpKX1lbHNlIGlmKGYuY291bnQ8Zi5nbFRleHQubGVuZ3RoKXt2YXIgeT1mLmdsVGV4dC5sZW5ndGgtZi5jb3VudDtmLmdsVGV4dC5zcGxpY2UoZi5jb3VudCx5KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZGVzdHJveSgpfSl9Zm9yKG89MDtvPGYuY291bnQ7bysrKWYuZ2xUZXh0W29dLnVwZGF0ZShmLnRleHRPcHRpb25zW29dKX1pZihmLmxpbmUyZCYmKGYubGluZTJkLnVwZGF0ZShmLmxpbmVPcHRpb25zKSxmLmxpbmVPcHRpb25zPWYubGluZU9wdGlvbnMubWFwKGZ1bmN0aW9uKHQpe2lmKHQmJnQucG9zaXRpb25zKXtmb3IodmFyIGU9dC5wb3NpdGlvbnMscj0wO3I8ZS5sZW5ndGgmJihpc05hTihlW3JdKXx8aXNOYU4oZVtyKzFdKSk7KXIrPTI7Zm9yKHZhciBuPWUubGVuZ3RoLTI7bj5yJiYoaXNOYU4oZVtuXSl8fGlzTmFOKGVbbisxXSkpOyluLT0yO3QucG9zaXRpb25zPWUuc2xpY2UocixuKzIpfXJldHVybiB0fSksZi5saW5lMmQudXBkYXRlKGYubGluZU9wdGlvbnMpKSxmLmVycm9yMmQpe3ZhciB4PShmLmVycm9yWE9wdGlvbnN8fFtdKS5jb25jYXQoZi5lcnJvcllPcHRpb25zfHxbXSk7Zi5lcnJvcjJkLnVwZGF0ZSh4KX1mLnNjYXR0ZXIyZCYmZi5zY2F0dGVyMmQudXBkYXRlKGYubWFya2VyT3B0aW9ucyksZi5maWxsT3JkZXI9dS5yZXBlYXQobnVsbCxmLmNvdW50KSxmLmZpbGwyZCYmKGYuZmlsbE9wdGlvbnM9Zi5maWxsT3B0aW9ucy5tYXAoZnVuY3Rpb24odCxlKXt2YXIgbj1yW2VdO2lmKHQmJm4mJm5bMF0mJm5bMF0udHJhY2Upe3ZhciBpLGEsbz1uWzBdLHM9by50cmFjZSxsPW8udCxjPWYubGluZU9wdGlvbnNbZV0sdT1bXTtzLl9vd25maWxsJiZ1LnB1c2goZSkscy5fbmV4dHRyYWNlJiZ1LnB1c2goZSsxKSx1Lmxlbmd0aCYmKGYuZmlsbE9yZGVyW2VdPXUpO3ZhciBoLHAsZD1bXSxnPWMmJmMucG9zaXRpb25zfHxsLnBvc2l0aW9ucztpZihcInRvemVyb3lcIj09PXMuZmlsbCl7Zm9yKGg9MDtoPGcubGVuZ3RoJiZpc05hTihnW2grMV0pOyloKz0yO2ZvcihwPWcubGVuZ3RoLTI7cD5oJiZpc05hTihnW3ArMV0pOylwLT0yOzAhPT1nW2grMV0mJihkPVtnW2hdLDBdKSxkPWQuY29uY2F0KGcuc2xpY2UoaCxwKzIpKSwwIT09Z1twKzFdJiYoZD1kLmNvbmNhdChbZ1twXSwwXSkpfWVsc2UgaWYoXCJ0b3plcm94XCI9PT1zLmZpbGwpe2ZvcihoPTA7aDxnLmxlbmd0aCYmaXNOYU4oZ1toXSk7KWgrPTI7Zm9yKHA9Zy5sZW5ndGgtMjtwPmgmJmlzTmFOKGdbcF0pOylwLT0yOzAhPT1nW2hdJiYoZD1bMCxnW2grMV1dKSxkPWQuY29uY2F0KGcuc2xpY2UoaCxwKzIpKSwwIT09Z1twXSYmKGQ9ZC5jb25jYXQoWzAsZ1twKzFdXSkpfWVsc2UgaWYoXCJ0b3NlbGZcIj09PXMuZmlsbHx8XCJ0b25leHRcIj09PXMuZmlsbCl7Zm9yKGQ9W10saT0wLGE9MDthPGcubGVuZ3RoO2ErPTIpKGlzTmFOKGdbYV0pfHxpc05hTihnW2ErMV0pKSYmKChkPWQuY29uY2F0KGcuc2xpY2UoaSxhKSkpLnB1c2goZ1tpXSxnW2krMV0pLGk9YSsyKTtkPWQuY29uY2F0KGcuc2xpY2UoaSkpLGkmJmQucHVzaChnW2ldLGdbaSsxXSl9ZWxzZXt2YXIgdj1zLl9uZXh0dHJhY2U7aWYodil7dmFyIG09Zi5saW5lT3B0aW9uc1tlKzFdO2lmKG0pe3ZhciB5PW0ucG9zaXRpb25zO2lmKFwidG9uZXh0eVwiPT09cy5maWxsKXtmb3IoZD1nLnNsaWNlKCksZT1NYXRoLmZsb29yKHkubGVuZ3RoLzIpO2UtLTspe3ZhciB4PXlbMiplXSxiPXlbMiplKzFdO2lzTmFOKHgpfHxpc05hTihiKXx8ZC5wdXNoKHgsYil9dC5maWxsPXYuZmlsbGNvbG9yfX19fWlmKHMuX3ByZXZ0cmFjZSYmXCJ0b25leHRcIj09PXMuX3ByZXZ0cmFjZS5maWxsKXt2YXIgXz1mLmxpbmVPcHRpb25zW2UtMV0ucG9zaXRpb25zLHc9ZC5sZW5ndGgvMixrPVtpPXddO2ZvcihhPTA7YTxfLmxlbmd0aDthKz0yKShpc05hTihfW2FdKXx8aXNOYU4oX1thKzFdKSkmJihrLnB1c2goYS8yK3crMSksaT1hKzIpO2Q9ZC5jb25jYXQoXyksdC5ob2xlPWt9cmV0dXJuIHQuZmlsbG1vZGU9cy5maWxsLHQub3BhY2l0eT1zLm9wYWNpdHksdC5wb3NpdGlvbnM9ZCx0fX0pLGYuZmlsbDJkLnVwZGF0ZShmLmZpbGxPcHRpb25zKSl9Zi5zZWxlY3RCYXRjaD1udWxsLGYudW5zZWxlY3RCYXRjaD1udWxsO3ZhciBiPWMuZHJhZ21vZGUsdz1cImxhc3NvXCI9PT1ifHxcInNlbGVjdFwiPT09YixrPWMuY2xpY2ttb2RlLmluZGV4T2YoXCJzZWxlY3RcIik+LTE7Zm9yKG89MDtvPHIubGVuZ3RoO28rKyl7dmFyIEE9cltvXVswXSxUPUEudHJhY2UsTT1BLnQsUz1NLmluZGV4LEU9VC5fbGVuZ3RoLEM9TS54LEw9TS55O2lmKFQuc2VsZWN0ZWRwb2ludHN8fHd8fGspe2lmKHd8fCh3PSEwKSxmLnNlbGVjdEJhdGNofHwoZi5zZWxlY3RCYXRjaD1bXSxmLnVuc2VsZWN0QmF0Y2g9W10pLFQuc2VsZWN0ZWRwb2ludHMpe3ZhciBPPWYuc2VsZWN0QmF0Y2hbU109dS5zZWxJbmRpY2VzMnNlbFBvaW50cyhUKSxJPXt9O2ZvcihzPTA7czxPLmxlbmd0aDtzKyspSVtPW3NdXT0xO3ZhciBEPVtdO2ZvcihzPTA7czxFO3MrKylJW3NdfHxELnB1c2gocyk7Zi51bnNlbGVjdEJhdGNoW1NdPUR9dmFyIFA9TS54cHg9bmV3IEFycmF5KEUpLFI9TS55cHg9bmV3IEFycmF5KEUpO2ZvcihzPTA7czxFO3MrKylQW3NdPXAuYzJwKENbc10pLFJbc109ZC5jMnAoTFtzXSl9ZWxzZSBNLnhweD1NLnlweD1udWxsfXc/KGYuc2VsZWN0MmR8fChmLnNlbGVjdDJkPW4oYy5fZ2xjYW52YXMuZGF0YSgpWzFdLnJlZ2wpKSxmLnNjYXR0ZXIyZCYmZi5zZWxlY3RCYXRjaCYmZi5zZWxlY3RCYXRjaC5sZW5ndGgmJmYuc2NhdHRlcjJkLnVwZGF0ZShmLm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBmLnNlbGVjdEJhdGNoW2VdP3Q6bnVsbH0pKSxmLnNlbGVjdDJkJiYoZi5zZWxlY3QyZC51cGRhdGUoZi5tYXJrZXJPcHRpb25zKSxmLnNlbGVjdDJkLnVwZGF0ZShmLm1hcmtlclNlbGVjdGVkT3B0aW9ucykpLGYuZ2xUZXh0JiZyLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9KCh0fHxbXSlbMF18fHt9KS50cmFjZXx8e307Zy5oYXNUZXh0KGUpJiZ6KHQpfSkpOmYuc2NhdHRlcjJkJiZmLnNjYXR0ZXIyZC51cGRhdGUoZi5tYXJrZXJPcHRpb25zKTt2YXIgRj17dmlld3BvcnQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuX3NpemUsaT10LndpZHRoLGE9dC5oZWlnaHQ7cmV0dXJuW24ubCtlLmRvbWFpblswXSpuLncsbi5iK3IuZG9tYWluWzBdKm4uaCxpLW4uci0oMS1lLmRvbWFpblsxXSkqbi53LGEtbi50LSgxLXIuZG9tYWluWzFdKSpuLmhdfShjLHAsZCkscmFuZ2U6WyhwLl9ybHx8cC5yYW5nZSlbMF0sKGQuX3JsfHxkLnJhbmdlKVswXSwocC5fcmx8fHAucmFuZ2UpWzFdLChkLl9ybHx8ZC5yYW5nZSlbMV1dfSxCPXUucmVwZWF0KEYsZi5jb3VudCk7Zi5maWxsMmQmJmYuZmlsbDJkLnVwZGF0ZShCKSxmLmxpbmUyZCYmZi5saW5lMmQudXBkYXRlKEIpLGYuZXJyb3IyZCYmZi5lcnJvcjJkLnVwZGF0ZShCLmNvbmNhdChCKSksZi5zY2F0dGVyMmQmJmYuc2NhdHRlcjJkLnVwZGF0ZShCKSxmLnNlbGVjdDJkJiZmLnNlbGVjdDJkLnVwZGF0ZShCKSxmLmdsVGV4dCYmZi5nbFRleHQuZm9yRWFjaChmdW5jdGlvbih0KXt0LnVwZGF0ZShGKX0pfWVsc2UgZi5pbml0KCl9fSxob3ZlclBvaW50czpmdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scyxsLGMsdSxoLGYscD10LmNkLGQ9cFswXS50LGc9cFswXS50cmFjZSx2PXQueGEsbT10LnlhLHk9ZC54LHg9ZC55LGI9di5jMnAoZSksXz1tLmMycChyKSx3PXQuZGlzdGFuY2U7aWYoZC50cmVlKXt2YXIgaz12LnAyYyhiLXcpLEE9di5wMmMoYit3KSxUPW0ucDJjKF8tdyksTT1tLnAyYyhfK3cpO2k9XCJ4XCI9PT1uP2QudHJlZS5yYW5nZShNYXRoLm1pbihrLEEpLE1hdGgubWluKG0uX3JsWzBdLG0uX3JsWzFdKSxNYXRoLm1heChrLEEpLE1hdGgubWF4KG0uX3JsWzBdLG0uX3JsWzFdKSk6ZC50cmVlLnJhbmdlKE1hdGgubWluKGssQSksTWF0aC5taW4oVCxNKSxNYXRoLm1heChrLEEpLE1hdGgubWF4KFQsTSkpfWVsc2V7aWYoIWQuaWRzKXJldHVyblt0XTtpPWQuaWRzfXZhciBTPXc7aWYoXCJ4XCI9PT1uKWZvcihsPTA7bDxpLmxlbmd0aDtsKyspbz15W2lbbF1dLChjPU1hdGguYWJzKHYuYzJwKG8pLWIpKTxTJiYoUz1jLHU9bS5jMnAoeFtpW2xdXSktXyxmPU1hdGguc3FydChjKmMrdSp1KSxhPWlbbF0pO2Vsc2UgZm9yKGw9MDtsPGkubGVuZ3RoO2wrKylvPXlbaVtsXV0scz14W2lbbF1dLGM9di5jMnAobyktYix1PW0uYzJwKHMpLV8sKGg9TWF0aC5zcXJ0KGMqYyt1KnUpKTxTJiYoUz1mPWgsYT1pW2xdKTtyZXR1cm4gdC5pbmRleD1hLHQuZGlzdGFuY2U9Uyx0LmR4eT1mLHZvaWQgMD09PWE/W3RdOihMKHQseSx4LGcpLFt0XSl9LHNlbGVjdFBvaW50czpmdW5jdGlvbih0LGUpe3ZhciByPXQuY2Qsbj1bXSxpPXJbMF0udHJhY2UsYT1yWzBdLnQsbz1pLl9sZW5ndGgsbD1hLngsYz1hLnksdT1hLl9zY2VuZTtpZighdSlyZXR1cm4gbjt2YXIgaD1nLmhhc1RleHQoaSksZj1nLmhhc01hcmtlcnMoaSkscD0hZiYmIWg7aWYoITAhPT1pLnZpc2libGV8fHApcmV0dXJuIG47dmFyIGQsdj1udWxsLG09bnVsbDtpZighMT09PWV8fGUuZGVnZW5lcmF0ZSltPXMobyk7ZWxzZSBmb3Iodj1bXSxtPVtdLGQ9MDtkPG87ZCsrKWUuY29udGFpbnMoW2EueHB4W2RdLGEueXB4W2RdXSwhMSxkLHQpPyh2LnB1c2goZCksbi5wdXNoKHtwb2ludE51bWJlcjpkLHg6bFtkXSx5OmNbZF19KSk6bS5wdXNoKGQpO2lmKHUuc2VsZWN0QmF0Y2h8fCh1LnNlbGVjdEJhdGNoPVtdLHUudW5zZWxlY3RCYXRjaD1bXSksIXUuc2VsZWN0QmF0Y2hbYS5pbmRleF0pe2ZvcihkPTA7ZDx1LmNvdW50O2QrKyl1LnNlbGVjdEJhdGNoW2RdPVtdLHUudW5zZWxlY3RCYXRjaFtkXT1bXTtmJiZ1LnNjYXR0ZXIyZC51cGRhdGUodS5tYXJrZXJVbnNlbGVjdGVkT3B0aW9ucyl9cmV0dXJuIHUuc2VsZWN0QmF0Y2hbYS5pbmRleF09dix1LnVuc2VsZWN0QmF0Y2hbYS5pbmRleF09bSxoJiZ6KHIpLG59LHNjZW5lVXBkYXRlOkMsY2FsY0hvdmVyOkwsbWV0YTp7fX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zXCI6Njc3LFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9wcmVwYXJlX3JlZ2xcIjo3MTQsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIjo3NjAsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlXCI6NzQ4LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCI6NzUyLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9zY2F0dGVyL2NhbGNcIjoxMDUzLFwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGNcIjoxMDU1LFwiLi4vc2NhdHRlci9jcm9zc190cmFjZV9kZWZhdWx0c1wiOjEwNTgsXCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dFwiOjEwNjAsXCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvclwiOjEwNjIsXCIuLi9zY2F0dGVyL2xpbmtfdHJhY2VzXCI6MTA2OCxcIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyXCI6MTA3MCxcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi9hdHRyaWJ1dGVzXCI6MTEwMSxcIi4vY29uc3RhbnRzXCI6MTEwMixcIi4vY29udmVydFwiOjExMDMsXCIuL2RlZmF1bHRzXCI6MTEwNCxcImFycmF5LXJhbmdlXCI6NTgsXCJnbC10ZXh0XCI6MzE0LFwicG9pbnQtY2x1c3RlclwiOjQ2MixcInJlZ2wtZXJyb3IyZFwiOjQ4MyxcInJlZ2wtbGluZTJkXCI6NDg0LFwicmVnbC1zY2F0dGVyMmRcIjo0ODV9XSwxMTA2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uL3NjYXR0ZXJnZW8vYXR0cmlidXRlc1wiKSxhPXQoXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vLi4vcGxvdHMvbWFwYm94L2xheW91dF9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIiksbD10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCIpLGM9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCx1PXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsLGg9aS5saW5lLGY9aS5tYXJrZXI7ZS5leHBvcnRzPXUoe2xvbjppLmxvbixsYXQ6aS5sYXQsbW9kZTpjKHt9LGEubW9kZSx7ZGZsdDpcIm1hcmtlcnNcIn0pLHRleHQ6Yyh7fSxhLnRleHQse30pLGhvdmVydGV4dDpjKHt9LGEuaG92ZXJ0ZXh0LHt9KSxsaW5lOntjb2xvcjpoLmNvbG9yLHdpZHRoOmgud2lkdGh9LGNvbm5lY3RnYXBzOmEuY29ubmVjdGdhcHMsbWFya2VyOntzeW1ib2w6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiY2lyY2xlXCIsYXJyYXlPazohMH0sb3BhY2l0eTpmLm9wYWNpdHksc2l6ZTpmLnNpemUsc2l6ZXJlZjpmLnNpemVyZWYsc2l6ZW1pbjpmLnNpemVtaW4sc2l6ZW1vZGU6Zi5zaXplbW9kZSxjb2xvcjpmLmNvbG9yLGNvbG9yc2NhbGU6Zi5jb2xvcnNjYWxlLGNhdXRvOmYuY2F1dG8sY21heDpmLmNtYXgsY21pbjpmLmNtaW4sY21pZDpmLmNtaWQsYXV0b2NvbG9yc2NhbGU6Zi5hdXRvY29sb3JzY2FsZSxyZXZlcnNlc2NhbGU6Zi5yZXZlcnNlc2NhbGUsc2hvd3NjYWxlOmYuc2hvd3NjYWxlLGNvbG9yYmFyOmx9LGZpbGw6aS5maWxsLGZpbGxjb2xvcjphLmZpbGxjb2xvcix0ZXh0Zm9udDpvLmxheWVycy5zeW1ib2wudGV4dGZvbnQsdGV4dHBvc2l0aW9uOm8ubGF5ZXJzLnN5bWJvbC50ZXh0cG9zaXRpb24sc2VsZWN0ZWQ6e21hcmtlcjphLnNlbGVjdGVkLm1hcmtlcn0sdW5zZWxlY3RlZDp7bWFya2VyOmEudW5zZWxlY3RlZC5tYXJrZXJ9LGhvdmVyaW5mbzpjKHt9LHMuaG92ZXJpbmZvLHtmbGFnczpbXCJsb25cIixcImxhdFwiLFwidGV4dFwiLFwibmFtZVwiXX0pLGhvdmVydGVtcGxhdGU6bigpfSxcImNhbGNcIixcIm5lc3RlZFwiKX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCI6NTc5LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDYsXCIuLi8uLi9wbG90cy9tYXBib3gvbGF5b3V0X2F0dHJpYnV0ZXNcIjo4MDYsXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIjoxMDUyLFwiLi4vc2NhdHRlcmdlby9hdHRyaWJ1dGVzXCI6MTA5Mn1dLDExMDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNLG89dChcIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzXCIpLHM9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZVwiKSxsPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksYz10KFwiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmNcIiksdT10KFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiKSxoPXQoXCIuLi8uLi9wbG90cy9tYXBib3gvY29udmVydF90ZXh0X29wdHNcIik7ZnVuY3Rpb24gZigpe3JldHVybntnZW9qc29uOm8ubWFrZUJsYW5rKCksbGF5b3V0Ont2aXNpYmlsaXR5Olwibm9uZVwifSxwYWludDp7fX19ZnVuY3Rpb24gcCh0KXtyZXR1cm4gaS5pc0FycmF5T3JUeXBlZEFycmF5KHQpP2Z1bmN0aW9uKHQpe3JldHVybiB0fTp0P2Z1bmN0aW9uKCl7cmV0dXJuIHR9OmR9ZnVuY3Rpb24gZCgpe3JldHVyblwiXCJ9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdFswXT09PWF9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dFswXS50cmFjZSxhPSEwPT09ci52aXNpYmxlLHY9XCJub25lXCIhPT1yLmZpbGwsbT11Lmhhc0xpbmVzKHIpLHk9dS5oYXNNYXJrZXJzKHIpLHg9dS5oYXNUZXh0KHIpLGI9eSYmXCJjaXJjbGVcIj09PXIubWFya2VyLnN5bWJvbCxfPXkmJlwiY2lyY2xlXCIhPT1yLm1hcmtlci5zeW1ib2wsdz1mKCksaz1mKCksQT1mKCksVD1mKCksTT17ZmlsbDp3LGxpbmU6ayxjaXJjbGU6QSxzeW1ib2w6VH07aWYoIWEpcmV0dXJuIE07aWYoKHZ8fG0pJiYoZT1vLmNhbGNUcmFjZVRvTGluZUNvb3Jkcyh0KSksdiYmKHcuZ2VvanNvbj1vLm1ha2VQb2x5Z29uKGUpLHcubGF5b3V0LnZpc2liaWxpdHk9XCJ2aXNpYmxlXCIsaS5leHRlbmRGbGF0KHcucGFpbnQse1wiZmlsbC1jb2xvclwiOnIuZmlsbGNvbG9yfSkpLG0mJihrLmdlb2pzb249by5tYWtlTGluZShlKSxrLmxheW91dC52aXNpYmlsaXR5PVwidmlzaWJsZVwiLGkuZXh0ZW5kRmxhdChrLnBhaW50LHtcImxpbmUtd2lkdGhcIjpyLmxpbmUud2lkdGgsXCJsaW5lLWNvbG9yXCI6ci5saW5lLmNvbG9yLFwibGluZS1vcGFjaXR5XCI6ci5vcGFjaXR5fSkpLGIpe3ZhciBTPWZ1bmN0aW9uKHQpe3ZhciBlLHIsYSxvLHU9dFswXS50cmFjZSxoPXUubWFya2VyLGY9dS5zZWxlY3RlZHBvaW50cyxwPWkuaXNBcnJheU9yVHlwZWRBcnJheShoLmNvbG9yKSxkPWkuaXNBcnJheU9yVHlwZWRBcnJheShoLnNpemUpLHY9aS5pc0FycmF5T3JUeXBlZEFycmF5KGgub3BhY2l0eSk7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdS5vcGFjaXR5KnR9cCYmKHI9cy5oYXNDb2xvcnNjYWxlKHUsXCJtYXJrZXJcIik/cy5tYWtlQ29sb3JTY2FsZUZ1bmMocy5leHRyYWN0U2NhbGUoaCx7Y0xldHRlcjpcImNcIn0pKTppLmlkZW50aXR5KTtkJiYoYT1jKHUpKTt2JiYobz1mdW5jdGlvbih0KXt2YXIgZT1uKHQpPytpLmNvbnN0cmFpbih0LDAsMSk6MDtyZXR1cm4gbShlKX0pO3ZhciB5LHg9W107Zm9yKGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIGI9dFtlXSxfPWIubG9ubGF0O2lmKCFnKF8pKXt2YXIgdz17fTtyJiYody5tY2M9Yi5tY2M9cihiLm1jKSksYSYmKHcubXJjPWIubXJjPWEoYi5tcykpLG8mJih3Lm1vPW8oYi5tbykpLGYmJih3LnNlbGVjdGVkPWIuc2VsZWN0ZWR8fDApLHgucHVzaCh7dHlwZTpcIkZlYXR1cmVcIixnZW9tZXRyeTp7dHlwZTpcIlBvaW50XCIsY29vcmRpbmF0ZXM6X30scHJvcGVydGllczp3fSl9fWlmKGYpZm9yKHk9bC5tYWtlU2VsZWN0ZWRQb2ludFN0eWxlRm5zKHUpLGU9MDtlPHgubGVuZ3RoO2UrKyl7dmFyIGs9eFtlXS5wcm9wZXJ0aWVzO3kuc2VsZWN0ZWRPcGFjaXR5Rm4mJihrLm1vPW0oeS5zZWxlY3RlZE9wYWNpdHlGbihrKSkpLHkuc2VsZWN0ZWRDb2xvckZuJiYoay5tY2M9eS5zZWxlY3RlZENvbG9yRm4oaykpLHkuc2VsZWN0ZWRTaXplRm4mJihrLm1yYz15LnNlbGVjdGVkU2l6ZUZuKGspKX1yZXR1cm57Z2VvanNvbjp7dHlwZTpcIkZlYXR1cmVDb2xsZWN0aW9uXCIsZmVhdHVyZXM6eH0sbWNjOnB8fHkmJnkuc2VsZWN0ZWRDb2xvckZuP3t0eXBlOlwiaWRlbnRpdHlcIixwcm9wZXJ0eTpcIm1jY1wifTpoLmNvbG9yLG1yYzpkfHx5JiZ5LnNlbGVjdGVkU2l6ZUZuP3t0eXBlOlwiaWRlbnRpdHlcIixwcm9wZXJ0eTpcIm1yY1wifTooQT1oLnNpemUsQS8yKSxtbzp2fHx5JiZ5LnNlbGVjdGVkT3BhY2l0eUZuP3t0eXBlOlwiaWRlbnRpdHlcIixwcm9wZXJ0eTpcIm1vXCJ9Om0oaC5vcGFjaXR5KX07dmFyIEF9KHQpO0EuZ2VvanNvbj1TLmdlb2pzb24sQS5sYXlvdXQudmlzaWJpbGl0eT1cInZpc2libGVcIixpLmV4dGVuZEZsYXQoQS5wYWludCx7XCJjaXJjbGUtY29sb3JcIjpTLm1jYyxcImNpcmNsZS1yYWRpdXNcIjpTLm1yYyxcImNpcmNsZS1vcGFjaXR5XCI6Uy5tb30pfWlmKChffHx4KSYmKFQuZ2VvanNvbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dFswXS50cmFjZSxyPShlLm1hcmtlcnx8e30pLnN5bWJvbCxuPWUudGV4dCxpPVwiY2lyY2xlXCIhPT1yP3Aocik6ZCxhPXUuaGFzVGV4dChlKT9wKG4pOmQsbz1bXSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPXRbc107ZyhsLmxvbmxhdCl8fG8ucHVzaCh7dHlwZTpcIkZlYXR1cmVcIixnZW9tZXRyeTp7dHlwZTpcIlBvaW50XCIsY29vcmRpbmF0ZXM6bC5sb25sYXR9LHByb3BlcnRpZXM6e3N5bWJvbDppKGwubXgpLHRleHQ6YShsLnR4KX19KX1yZXR1cm57dHlwZTpcIkZlYXR1cmVDb2xsZWN0aW9uXCIsZmVhdHVyZXM6b319KHQpLGkuZXh0ZW5kRmxhdChULmxheW91dCx7dmlzaWJpbGl0eTpcInZpc2libGVcIixcImljb24taW1hZ2VcIjpcIntzeW1ib2x9LTE1XCIsXCJ0ZXh0LWZpZWxkXCI6XCJ7dGV4dH1cIn0pLF8mJihpLmV4dGVuZEZsYXQoVC5sYXlvdXQse1wiaWNvbi1zaXplXCI6ci5tYXJrZXIuc2l6ZS8xMH0pLGkuZXh0ZW5kRmxhdChULnBhaW50LHtcImljb24tb3BhY2l0eVwiOnIub3BhY2l0eSpyLm1hcmtlci5vcGFjaXR5LFwiaWNvbi1jb2xvclwiOnIubWFya2VyLmNvbG9yfSkpLHgpKXt2YXIgRT0oci5tYXJrZXJ8fHt9KS5zaXplLEM9aChyLnRleHRwb3NpdGlvbixFKTtpLmV4dGVuZEZsYXQoVC5sYXlvdXQse1widGV4dC1zaXplXCI6ci50ZXh0Zm9udC5zaXplLFwidGV4dC1hbmNob3JcIjpDLmFuY2hvcixcInRleHQtb2Zmc2V0XCI6Qy5vZmZzZXR9KSxpLmV4dGVuZEZsYXQoVC5wYWludCx7XCJ0ZXh0LWNvbG9yXCI6ci50ZXh0Zm9udC5jb2xvcixcInRleHQtb3BhY2l0eVwiOnIub3BhY2l0eX0pfXJldHVybiBNfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlXCI6NTkwLFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzXCI6Njk1LFwiLi4vLi4vcGxvdHMvbWFwYm94L2NvbnZlcnRfdGV4dF9vcHRzXCI6ODAzLFwiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmNcIjoxMDY5LFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiOjEwNzYsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDExMDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIiksYT10KFwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHNcIiksbz10KFwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzXCIpLHM9dChcIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0c1wiKSxsPXQoXCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0c1wiKSxjPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUpe2Z1bmN0aW9uIGgocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGMscixpKX1pZihmdW5jdGlvbih0LGUscil7dmFyIG49cihcImxvblwiKXx8W10saT1yKFwibGF0XCIpfHxbXSxhPU1hdGgubWluKG4ubGVuZ3RoLGkubGVuZ3RoKTtyZXR1cm4gZS5fbGVuZ3RoPWEsYX0oMCxlLGgpKXtpZihoKFwidGV4dFwiKSxoKFwiaG92ZXJ0ZXh0XCIpLGgoXCJob3ZlcnRlbXBsYXRlXCIpLGgoXCJtb2RlXCIpLGkuaGFzTGluZXMoZSkmJihvKHQsZSxyLHUsaCx7bm9EYXNoOiEwfSksaChcImNvbm5lY3RnYXBzXCIpKSxpLmhhc01hcmtlcnMoZSkpe2EodCxlLHIsdSxoLHtub0xpbmU6ITB9KTt2YXIgZj1lLm1hcmtlcjtcImNpcmNsZVwiIT09Zi5zeW1ib2wmJihuLmlzQXJyYXlPclR5cGVkQXJyYXkoZi5zaXplKSYmKGYuc2l6ZT1mLnNpemVbMF0pLG4uaXNBcnJheU9yVHlwZWRBcnJheShmLmNvbG9yKSYmKGYuY29sb3I9Zi5jb2xvclswXSkpfWkuaGFzVGV4dChlKSYmcyh0LGUsdSxoLHtub1NlbGVjdDohMH0pLGgoXCJmaWxsXCIpLFwibm9uZVwiIT09ZS5maWxsJiZsKHQsZSxyLGgpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGgpfWVsc2UgZS52aXNpYmxlPSExfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHNcIjoxMDYxLFwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzXCI6MTA2NSxcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCI6MTA3MSxcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzXCI6MTA3NyxcIi4vYXR0cmlidXRlc1wiOjExMDZ9XSwxMTA5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubG9uPWUubG9uLHQubGF0PWUubGF0LHR9fSx7fV0sMTExMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4XCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvclwiKSxvPXQoXCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dFwiKSxzPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBsPXQuY2QsYz1sWzBdLnRyYWNlLHU9dC54YSxoPXQueWEsZj10LnN1YnBsb3QscD0zNjAqKGU+PTA/TWF0aC5mbG9vcigoZSsxODApLzM2MCk6TWF0aC5jZWlsKChlLTE4MCkvMzYwKSksZD1lLXA7aWYobi5nZXRDbG9zZXN0KGwsZnVuY3Rpb24odCl7dmFyIGU9dC5sb25sYXQ7aWYoZVswXT09PXMpcmV0dXJuIDEvMDt2YXIgbj1pLm1vZEhhbGYoZVswXSwzNjApLGE9ZVsxXSxvPWYucHJvamVjdChbbixhXSksbD1vLngtdS5jMnAoW2QsYV0pLGM9by55LWguYzJwKFtuLHJdKSxwPU1hdGgubWF4KDMsdC5tcmN8fDApO3JldHVybiBNYXRoLm1heChNYXRoLnNxcnQobCpsK2MqYyktcCwxLTMvcCl9LHQpLCExIT09dC5pbmRleCl7dmFyIGc9bFt0LmluZGV4XSx2PWcubG9ubGF0LG09W2kubW9kSGFsZih2WzBdLDM2MCkrcCx2WzFdXSx5PXUuYzJwKG0pLHg9aC5jMnAobSksYj1nLm1yY3x8MTtyZXR1cm4gdC54MD15LWIsdC54MT15K2IsdC55MD14LWIsdC55MT14K2IsdC5jb2xvcj1hKGMsZyksdC5leHRyYVRleHQ9ZnVuY3Rpb24odCxlLHIpe2lmKHQuaG92ZXJ0ZW1wbGF0ZSlyZXR1cm47dmFyIG49KGUuaGl8fHQuaG92ZXJpbmZvKS5zcGxpdChcIitcIiksaT0tMSE9PW4uaW5kZXhPZihcImFsbFwiKSxhPS0xIT09bi5pbmRleE9mKFwibG9uXCIpLHM9LTEhPT1uLmluZGV4T2YoXCJsYXRcIiksbD1lLmxvbmxhdCxjPVtdO2Z1bmN0aW9uIHUodCl7cmV0dXJuIHQrXCJcXHhiMFwifWl8fGEmJnM/Yy5wdXNoKFwiKFwiK3UobFswXSkrXCIsIFwiK3UobFsxXSkrXCIpXCIpOmE/Yy5wdXNoKHIubG9uK3UobFswXSkpOnMmJmMucHVzaChyLmxhdCt1KGxbMV0pKTsoaXx8LTEhPT1uLmluZGV4T2YoXCJ0ZXh0XCIpKSYmbyhlLHQsYyk7cmV0dXJuIGMuam9pbihcIjxicj5cIil9KGMsZyxsWzBdLnQubGFiZWxzKSx0LmhvdmVydGVtcGxhdGU9Yy5ob3ZlcnRlbXBsYXRlLFt0XX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2Z4XCI6NjE3LFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0XCI6MTA2MCxcIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yXCI6MTA2Mn1dLDExMTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLG4uY29sb3JiYXI9dChcIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyXCIpLG4uY2FsYz10KFwiLi4vc2NhdHRlcmdlby9jYWxjXCIpLG4ucGxvdD10KFwiLi9wbG90XCIpLG4uaG92ZXJQb2ludHM9dChcIi4vaG92ZXJcIiksbi5ldmVudERhdGE9dChcIi4vZXZlbnRfZGF0YVwiKSxuLnNlbGVjdFBvaW50cz10KFwiLi9zZWxlY3RcIiksbi5zdHlsZT1mdW5jdGlvbih0LGUpe2UmJmVbMF0udHJhY2UuX2dsVHJhY2UudXBkYXRlKGUpfSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cInNjYXR0ZXJtYXBib3hcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9tYXBib3hcIiksbi5jYXRlZ29yaWVzPVtcIm1hcGJveFwiLFwiZ2xcIixcInN5bWJvbHNcIixcInNob3dMZWdlbmRcIixcInNjYXR0ZXJsaWtlXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvbWFwYm94XCI6ODA0LFwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXJcIjoxMDcwLFwiLi4vc2NhdHRlcmdlby9jYWxjXCI6MTA5MyxcIi4vYXR0cmlidXRlc1wiOjExMDYsXCIuL2RlZmF1bHRzXCI6MTEwOCxcIi4vZXZlbnRfZGF0YVwiOjExMDksXCIuL2hvdmVyXCI6MTExMCxcIi4vcGxvdFwiOjExMTIsXCIuL3NlbGVjdFwiOjExMTN9XSwxMTEyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vY29udmVydFwiKTtmdW5jdGlvbiBpKHQsZSl7dGhpcy5zdWJwbG90PXQsdGhpcy51aWQ9ZSx0aGlzLnNvdXJjZUlkcz17ZmlsbDplK1wiLXNvdXJjZS1maWxsXCIsbGluZTplK1wiLXNvdXJjZS1saW5lXCIsY2lyY2xlOmUrXCItc291cmNlLWNpcmNsZVwiLHN5bWJvbDplK1wiLXNvdXJjZS1zeW1ib2xcIn0sdGhpcy5sYXllcklkcz17ZmlsbDplK1wiLWxheWVyLWZpbGxcIixsaW5lOmUrXCItbGF5ZXItbGluZVwiLGNpcmNsZTplK1wiLWxheWVyLWNpcmNsZVwiLHN5bWJvbDplK1wiLWxheWVyLXN5bWJvbFwifSx0aGlzLm9yZGVyPVtcImZpbGxcIixcImxpbmVcIixcImNpcmNsZVwiLFwic3ltYm9sXCJdfXZhciBhPWkucHJvdG90eXBlO2EuYWRkU291cmNlPWZ1bmN0aW9uKHQsZSl7dGhpcy5zdWJwbG90Lm1hcC5hZGRTb3VyY2UodGhpcy5zb3VyY2VJZHNbdF0se3R5cGU6XCJnZW9qc29uXCIsZGF0YTplLmdlb2pzb259KX0sYS5zZXRTb3VyY2VEYXRhPWZ1bmN0aW9uKHQsZSl7dGhpcy5zdWJwbG90Lm1hcC5nZXRTb3VyY2UodGhpcy5zb3VyY2VJZHNbdF0pLnNldERhdGEoZS5nZW9qc29uKX0sYS5hZGRMYXllcj1mdW5jdGlvbih0LGUpe3RoaXMuc3VicGxvdC5tYXAuYWRkTGF5ZXIoe3R5cGU6dCxpZDp0aGlzLmxheWVySWRzW3RdLHNvdXJjZTp0aGlzLnNvdXJjZUlkc1t0XSxsYXlvdXQ6ZS5sYXlvdXQscGFpbnQ6ZS5wYWludH0pfSxhLnVwZGF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5zdWJwbG90LHI9bih0KSxpPTA7aTx0aGlzLm9yZGVyLmxlbmd0aDtpKyspe3ZhciBhPXRoaXMub3JkZXJbaV0sbz1yW2FdO2Uuc2V0T3B0aW9ucyh0aGlzLmxheWVySWRzW2FdLFwic2V0TGF5b3V0UHJvcGVydHlcIixvLmxheW91dCksXCJ2aXNpYmxlXCI9PT1vLmxheW91dC52aXNpYmlsaXR5JiYodGhpcy5zZXRTb3VyY2VEYXRhKGEsbyksZS5zZXRPcHRpb25zKHRoaXMubGF5ZXJJZHNbYV0sXCJzZXRQYWludFByb3BlcnR5XCIsby5wYWludCkpfXRbMF0udHJhY2UuX2dsVHJhY2U9dGhpc30sYS5kaXNwb3NlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuc3VicGxvdC5tYXAsZT0wO2U8dGhpcy5vcmRlci5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLm9yZGVyW2VdO3QucmVtb3ZlTGF5ZXIodGhpcy5sYXllcklkc1tyXSksdC5yZW1vdmVTb3VyY2UodGhpcy5zb3VyY2VJZHNbcl0pfX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBpKHQsZVswXS50cmFjZS51aWQpLGE9bihlKSxvPTA7bzxyLm9yZGVyLmxlbmd0aDtvKyspe3ZhciBzPXIub3JkZXJbb10sbD1hW3NdO3IuYWRkU291cmNlKHMsbCksci5hZGRMYXllcihzLGwpfXJldHVybiBlWzBdLnRyYWNlLl9nbFRyYWNlPXIscn19LHtcIi4vY29udmVydFwiOjExMDd9XSwxMTEzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCIpLGE9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG89dC5jZCxzPXQueGF4aXMsbD10LnlheGlzLGM9W10sdT1vWzBdLnRyYWNlO2lmKCFpLmhhc01hcmtlcnModSkpcmV0dXJuW107aWYoITE9PT1lKWZvcihyPTA7cjxvLmxlbmd0aDtyKyspb1tyXS5zZWxlY3RlZD0wO2Vsc2UgZm9yKHI9MDtyPG8ubGVuZ3RoO3IrKyl7dmFyIGg9b1tyXSxmPWgubG9ubGF0O2lmKGZbMF0hPT1hKXt2YXIgcD1bbi5tb2RIYWxmKGZbMF0sMzYwKSxmWzFdXSxkPVtzLmMycChwKSxsLmMycChwKV07ZS5jb250YWlucyhkLG51bGwscix0KT8oYy5wdXNoKHtwb2ludE51bWJlcjpyLGxvbjpmWzBdLGxhdDpmWzFdfSksaC5zZWxlY3RlZD0xKTpoLnNlbGVjdGVkPTB9fXJldHVybiBjfX0se1wiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2fV0sMTExNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsYT10KFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIikscz1hLmxpbmU7ZS5leHBvcnRzPXttb2RlOmEubW9kZSxyOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx0aGV0YTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0scjA6e3ZhbFR5cGU6XCJhbnlcIixkZmx0OjAsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LGRyOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxLGVkaXRUeXBlOlwiY2FsY1wifSx0aGV0YTA6e3ZhbFR5cGU6XCJhbnlcIixkZmx0OjAsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LGR0aGV0YTp7dmFsVHlwZTpcIm51bWJlclwiLGVkaXRUeXBlOlwiY2FsY1wifSx0aGV0YXVuaXQ6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInJhZGlhbnNcIixcImRlZ3JlZXNcIixcImdyYWRpYW5zXCJdLGRmbHQ6XCJkZWdyZWVzXCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LHRleHQ6YS50ZXh0LGhvdmVydGV4dDphLmhvdmVydGV4dCxsaW5lOntjb2xvcjpzLmNvbG9yLHdpZHRoOnMud2lkdGgsZGFzaDpzLmRhc2gsc2hhcGU6aSh7fSxzLnNoYXBlLHt2YWx1ZXM6W1wibGluZWFyXCIsXCJzcGxpbmVcIl19KSxzbW9vdGhpbmc6cy5zbW9vdGhpbmcsZWRpdFR5cGU6XCJjYWxjXCJ9LGNvbm5lY3RnYXBzOmEuY29ubmVjdGdhcHMsbWFya2VyOmEubWFya2VyLGNsaXBvbmF4aXM6aSh7fSxhLmNsaXBvbmF4aXMse2RmbHQ6ITF9KSx0ZXh0cG9zaXRpb246YS50ZXh0cG9zaXRpb24sdGV4dGZvbnQ6YS50ZXh0Zm9udCxmaWxsOmkoe30sYS5maWxsLHt2YWx1ZXM6W1wibm9uZVwiLFwidG9zZWxmXCIsXCJ0b25leHRcIl0sZGZsdDpcIm5vbmVcIn0pLGZpbGxjb2xvcjphLmZpbGxjb2xvcixob3ZlcmluZm86aSh7fSxvLmhvdmVyaW5mbyx7ZmxhZ3M6W1wiclwiLFwidGhldGFcIixcInRleHRcIixcIm5hbWVcIl19KSxob3Zlcm9uOmEuaG92ZXJvbixob3ZlcnRlbXBsYXRlOm4oKSxzZWxlY3RlZDphLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6YS51bnNlbGVjdGVkfX0se1wiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiOjc0NixcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiOjEwNTJ9XSwxMTE1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNLGE9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLG89dChcIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjXCIpLHM9dChcIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhXCIpLGw9dChcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIiksYz10KFwiLi4vc2NhdHRlci9jYWxjXCIpLmNhbGNNYXJrZXJTaXplO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Ll9mdWxsTGF5b3V0LHU9ZS5zdWJwbG90LGg9clt1XS5yYWRpYWxheGlzLGY9clt1XS5hbmd1bGFyYXhpcyxwPWgubWFrZUNhbGNkYXRhKGUsXCJyXCIpLGQ9Zi5tYWtlQ2FsY2RhdGEoZSxcInRoZXRhXCIpLGc9ZS5fbGVuZ3RoLHY9bmV3IEFycmF5KGcpLG09MDttPGc7bSsrKXt2YXIgeT1wW21dLHg9ZFttXSxiPXZbbV09e307bih5KSYmbih4KT8oYi5yPXksYi50aGV0YT14KTpiLnI9aX12YXIgXz1jKGUsZyk7cmV0dXJuIGUuX2V4dHJlbWVzLng9YS5maW5kRXh0cmVtZXMoaCxwLHtwcGFkOl99KSxvKHQsZSkscyh2LGUpLGwodixlKSx2fX0se1wiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGFcIjoxMDUxLFwiLi4vc2NhdHRlci9jYWxjXCI6MTA1MyxcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIjoxMDU0LFwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGNcIjoxMDU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSwxMTE2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCIpLGE9dChcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCIpLG89dChcIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0c1wiKSxzPXQoXCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHNcIiksbD10KFwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzXCIpLGM9dChcIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzXCIpLHU9dChcIi4uL3NjYXR0ZXIvY29uc3RhbnRzXCIpLlBUU19MSU5FU09OTFksaD10KFwiLi9hdHRyaWJ1dGVzXCIpO2Z1bmN0aW9uIGYodCxlLHIsbil7dmFyIGksYT1uKFwiclwiKSxvPW4oXCJ0aGV0YVwiKTtpZihhKW8/aT1NYXRoLm1pbihhLmxlbmd0aCxvLmxlbmd0aCk6KGk9YS5sZW5ndGgsbihcInRoZXRhMFwiKSxuKFwiZHRoZXRhXCIpKTtlbHNle2lmKCFvKXJldHVybiAwO2k9ZS50aGV0YS5sZW5ndGgsbihcInIwXCIpLG4oXCJkclwiKX1yZXR1cm4gZS5fbGVuZ3RoPWksaX1lLmV4cG9ydHM9e2hhbmRsZVJUaGV0YURlZmF1bHRzOmYsc3VwcGx5RGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIscCl7ZnVuY3Rpb24gZChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsaCxyLGkpfXZhciBnPWYoMCxlLDAsZCk7aWYoZyl7ZChcInRoZXRhdW5pdFwiKSxkKFwibW9kZVwiLGc8dT9cImxpbmVzK21hcmtlcnNcIjpcImxpbmVzXCIpLGQoXCJ0ZXh0XCIpLGQoXCJob3ZlcnRleHRcIiksXCJmaWxsc1wiIT09ZS5ob3Zlcm9uJiZkKFwiaG92ZXJ0ZW1wbGF0ZVwiKSxpLmhhc0xpbmVzKGUpJiYobyh0LGUscixwLGQpLHModCxlLGQpLGQoXCJjb25uZWN0Z2Fwc1wiKSksaS5oYXNNYXJrZXJzKGUpJiZhKHQsZSxyLHAsZCx7Z3JhZGllbnQ6ITB9KSxpLmhhc1RleHQoZSkmJmwodCxlLHAsZCk7dmFyIHY9W107KGkuaGFzTWFya2VycyhlKXx8aS5oYXNUZXh0KGUpKSYmKGQoXCJjbGlwb25heGlzXCIpLGQoXCJtYXJrZXIubWF4ZGlzcGxheWVkXCIpLHYucHVzaChcInBvaW50c1wiKSksZChcImZpbGxcIiksXCJub25lXCIhPT1lLmZpbGwmJihjKHQsZSxyLGQpLGkuaGFzTGluZXMoZSl8fHModCxlLGQpKSxcInRvbmV4dFwiIT09ZS5maWxsJiZcInRvc2VsZlwiIT09ZS5maWxsfHx2LnB1c2goXCJmaWxsc1wiKSxkKFwiaG92ZXJvblwiLHYuam9pbihcIitcIil8fFwicG9pbnRzXCIpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGQpfWVsc2UgZS52aXNpYmxlPSExfX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL3NjYXR0ZXIvY29uc3RhbnRzXCI6MTA1NixcIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzXCI6MTA2MSxcIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0c1wiOjEwNjUsXCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHNcIjoxMDY3LFwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHNcIjoxMDcxLFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiOjEwNzYsXCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHNcIjoxMDc3LFwiLi9hdHRyaWJ1dGVzXCI6MTExNH1dLDExMTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vc2NhdHRlci9ob3ZlclwiKSxpPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxhPXQoXCIuLi8uLi9saWJcIik7ZnVuY3Rpb24gbyh0LGUscixuKXt2YXIgbz1yLnJhZGlhbEF4aXMscz1yLmFuZ3VsYXJBeGlzO28uX2hvdmVydGl0bGU9XCJyXCIscy5faG92ZXJ0aXRsZT1cIlxcdTAzYjhcIjt2YXIgbD10LmhpfHxlLmhvdmVyaW5mbyxjPVtdO2Z1bmN0aW9uIHUodCxlKXtjLnB1c2godC5faG92ZXJ0aXRsZStcIjogXCIraS50aWNrVGV4dCh0LGUsXCJob3ZlclwiKS50ZXh0KX1pZighZS5ob3ZlcnRlbXBsYXRlKXt2YXIgaD1sLnNwbGl0KFwiK1wiKTtpZigtMSE9PWguaW5kZXhPZihcImFsbFwiKSYmKGg9W1wiclwiLFwidGhldGFcIixcInRleHRcIl0pLC0xIT09aC5pbmRleE9mKFwiclwiKSYmdShvLG8uYzJsKHQucikpLC0xIT09aC5pbmRleE9mKFwidGhldGFcIikpe3ZhciBmPXQudGhldGE7dShzLFwiZGVncmVlc1wiPT09cy50aGV0YXVuaXQ/YS5yYWQyZGVnKGYpOmYpfS0xIT09aC5pbmRleE9mKFwidGV4dFwiKSYmbi50ZXh0JiYoYy5wdXNoKG4udGV4dCksZGVsZXRlIG4udGV4dCksbi5leHRyYVRleHQ9Yy5qb2luKFwiPGJyPlwiKX19ZS5leHBvcnRzPXtob3ZlclBvaW50czpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1uKHQsZSxyLGkpO2lmKGEmJiExIT09YVswXS5pbmRleCl7dmFyIHM9YVswXTtpZih2b2lkIDA9PT1zLmluZGV4KXJldHVybiBhO3ZhciBsPXQuc3VicGxvdCxjPXMuY2Rbcy5pbmRleF0sdT1zLnRyYWNlO2lmKGwuaXNQdEluc2lkZShjKSlyZXR1cm4gcy54TGFiZWxWYWw9dm9pZCAwLHMueUxhYmVsVmFsPXZvaWQgMCxvKGMsdSxsLHMpLHMuaG92ZXJ0ZW1wbGF0ZT11LmhvdmVydGVtcGxhdGUsYX19LG1ha2VIb3ZlclBvaW50VGV4dDpvfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9zY2F0dGVyL2hvdmVyXCI6MTA2M31dLDExMTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6XCJ0cmFjZVwiLG5hbWU6XCJzY2F0dGVycG9sYXJcIixiYXNlUGxvdE1vZHVsZTp0KFwiLi4vLi4vcGxvdHMvcG9sYXJcIiksY2F0ZWdvcmllczpbXCJwb2xhclwiLFwic3ltYm9sc1wiLFwic2hvd0xlZ2VuZFwiLFwic2NhdHRlci1saWtlXCJdLGF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxzdXBwbHlEZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKS5zdXBwbHlEZWZhdWx0cyxjb2xvcmJhcjp0KFwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXJcIiksY2FsYzp0KFwiLi9jYWxjXCIpLHBsb3Q6dChcIi4vcGxvdFwiKSxzdHlsZTp0KFwiLi4vc2NhdHRlci9zdHlsZVwiKS5zdHlsZSxob3ZlclBvaW50czp0KFwiLi9ob3ZlclwiKS5ob3ZlclBvaW50cyxzZWxlY3RQb2ludHM6dChcIi4uL3NjYXR0ZXIvc2VsZWN0XCIpLG1ldGE6e319fSx7XCIuLi8uLi9wbG90cy9wb2xhclwiOjgxMyxcIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyXCI6MTA3MCxcIi4uL3NjYXR0ZXIvc2VsZWN0XCI6MTA3MyxcIi4uL3NjYXR0ZXIvc3R5bGVcIjoxMDc1LFwiLi9hdHRyaWJ1dGVzXCI6MTExNCxcIi4vY2FsY1wiOjExMTUsXCIuL2RlZmF1bHRzXCI6MTExNixcIi4vaG92ZXJcIjoxMTE3LFwiLi9wbG90XCI6MTExOX1dLDExMTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vc2NhdHRlci9wbG90XCIpLGk9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBhPWUubGF5ZXJzLmZyb250cGxvdC5zZWxlY3QoXCJnLnNjYXR0ZXJsYXllclwiKSxvPXt4YXhpczplLnhheGlzLHlheGlzOmUueWF4aXMscGxvdDplLmZyYW1ld29yayxsYXllckNsaXBJZDplLl9oYXNDbGlwT25BeGlzRmFsc2U/ZS5jbGlwSWRzLmZvclRyYWNlczpudWxsfSxzPWUucmFkaWFsQXhpcyxsPWUuYW5ndWxhckF4aXMsYz0wO2M8ci5sZW5ndGg7YysrKWZvcih2YXIgdT1yW2NdLGg9MDtoPHUubGVuZ3RoO2grKyl7dmFyIGY9dVtoXSxwPWYucjtpZihwPT09aSlmLng9Zi55PWk7ZWxzZXt2YXIgZD1zLmMyZyhwKSxnPWwuYzJnKGYudGhldGEpO2YueD1kKk1hdGguY29zKGcpLGYueT1kKk1hdGguc2luKGcpfX1uKHQsbyxyLGEpfX0se1wiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uL3NjYXR0ZXIvcGxvdFwiOjEwNzJ9XSwxMTIwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3NjYXR0ZXJwb2xhci9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uL3NjYXR0ZXJnbC9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz17bW9kZTpuLm1vZGUscjpuLnIsdGhldGE6bi50aGV0YSxyMDpuLnIwLGRyOm4uZHIsdGhldGEwOm4udGhldGEwLGR0aGV0YTpuLmR0aGV0YSx0aGV0YXVuaXQ6bi50aGV0YXVuaXQsdGV4dDpuLnRleHQsaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LGhvdmVydGVtcGxhdGU6bi5ob3ZlcnRlbXBsYXRlLGxpbmU6aS5saW5lLGNvbm5lY3RnYXBzOmkuY29ubmVjdGdhcHMsbWFya2VyOmkubWFya2VyLGZpbGw6aS5maWxsLGZpbGxjb2xvcjppLmZpbGxjb2xvcix0ZXh0cG9zaXRpb246aS50ZXh0cG9zaXRpb24sdGV4dGZvbnQ6aS50ZXh0Zm9udCxob3ZlcmluZm86bi5ob3ZlcmluZm8sc2VsZWN0ZWQ6bi5zZWxlY3RlZCx1bnNlbGVjdGVkOm4udW5zZWxlY3RlZH19LHtcIi4uL3NjYXR0ZXJnbC9hdHRyaWJ1dGVzXCI6MTEwMSxcIi4uL3NjYXR0ZXJwb2xhci9hdHRyaWJ1dGVzXCI6MTExNH1dLDExMjE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIiksYT10KFwiLi4vc2NhdHRlcnBvbGFyL2RlZmF1bHRzXCIpLmhhbmRsZVJUaGV0YURlZmF1bHRzLG89dChcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCIpLHM9dChcIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0c1wiKSxsPXQoXCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHNcIiksYz10KFwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHNcIiksdT10KFwiLi4vc2NhdHRlci9jb25zdGFudHNcIikuUFRTX0xJTkVTT05MWSxoPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYpe2Z1bmN0aW9uIHAocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGgscixpKX12YXIgZD1hKHQsZSxmLHApO2Q/KHAoXCJ0aGV0YXVuaXRcIikscChcIm1vZGVcIixkPHU/XCJsaW5lcyttYXJrZXJzXCI6XCJsaW5lc1wiKSxwKFwidGV4dFwiKSxwKFwiaG92ZXJ0ZXh0XCIpLFwiZmlsbHNcIiE9PWUuaG92ZXJvbiYmcChcImhvdmVydGVtcGxhdGVcIiksaS5oYXNMaW5lcyhlKSYmKHModCxlLHIsZixwKSxwKFwiY29ubmVjdGdhcHNcIikpLGkuaGFzTWFya2VycyhlKSYmbyh0LGUscixmLHApLGkuaGFzVGV4dChlKSYmbCh0LGUsZixwKSxwKFwiZmlsbFwiKSxcIm5vbmVcIiE9PWUuZmlsbCYmYyh0LGUscixwKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxwKSk6ZS52aXNpYmxlPSExfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vc2NhdHRlci9jb25zdGFudHNcIjoxMDU2LFwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHNcIjoxMDYxLFwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzXCI6MTA2NSxcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCI6MTA3MSxcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzXCI6MTA3NyxcIi4uL3NjYXR0ZXJwb2xhci9kZWZhdWx0c1wiOjExMTYsXCIuL2F0dHJpYnV0ZXNcIjoxMTIwfV0sMTEyMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJwb2ludC1jbHVzdGVyXCIpLGk9dChcImZhc3QtaXNudW1lcmljXCIpLGE9dChcIi4uL3NjYXR0ZXJnbFwiKSxvPXQoXCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsY1wiKSxzPXQoXCIuLi9zY2F0dGVyL2NhbGNcIikuY2FsY01hcmtlclNpemUsbD10KFwiLi4vc2NhdHRlcmdsL2NvbnZlcnRcIiksYz10KFwiLi4vLi4vbGliXCIpLHU9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGg9dChcIi4uL3NjYXR0ZXJwb2xhci9ob3ZlclwiKS5tYWtlSG92ZXJQb2ludFRleHQsZj10KFwiLi4vc2NhdHRlcmdsL2NvbnN0YW50c1wiKS5UT09fTUFOWV9QT0lOVFM7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwidHJhY2VcIixuYW1lOlwic2NhdHRlcnBvbGFyZ2xcIixiYXNlUGxvdE1vZHVsZTp0KFwiLi4vLi4vcGxvdHMvcG9sYXJcIiksY2F0ZWdvcmllczpbXCJnbFwiLFwicmVnbFwiLFwicG9sYXJcIixcInN5bWJvbHNcIixcInNob3dMZWdlbmRcIixcInNjYXR0ZXItbGlrZVwiXSxhdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksc3VwcGx5RGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIiksY29sb3JiYXI6dChcIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyXCIpLGNhbGM6ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LG49ZS5zdWJwbG90LGk9cltuXS5yYWRpYWxheGlzLGE9cltuXS5hbmd1bGFyYXhpcyxjPWkubWFrZUNhbGNkYXRhKGUsXCJyXCIpLGg9YS5tYWtlQ2FsY2RhdGEoZSxcInRoZXRhXCIpLHA9ZS5fbGVuZ3RoLGQ9e307cDxjLmxlbmd0aCYmKGM9Yy5zbGljZSgwLHApKSxwPGgubGVuZ3RoJiYoaD1oLnNsaWNlKDAscCkpLGQucj1jLGQudGhldGE9aCxvKHQsZSk7dmFyIGcsdj1kLm9wdHM9bC5zdHlsZSh0LGUpO3JldHVybiBwPGY/Zz1zKGUscCk6di5tYXJrZXImJihnPTIqKHYubWFya2VyLnNpemVBdmd8fE1hdGgubWF4KHYubWFya2VyLnNpemUsMykpKSxlLl9leHRyZW1lcy54PXUuZmluZEV4dHJlbWVzKGksYyx7cHBhZDpnfSksW3t4OiExLHk6ITEsdDpkLHRyYWNlOmV9XX0scGxvdDpmdW5jdGlvbih0LGUscil7aWYoci5sZW5ndGgpe3ZhciBvPWUucmFkaWFsQXhpcyxzPWUuYW5ndWxhckF4aXMsdT1hLnNjZW5lVXBkYXRlKHQsZSk7cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihyKXtpZihyJiZyWzBdJiZyWzBdLnRyYWNlKXt2YXIgYSxoPXJbMF0scD1oLnRyYWNlLGQ9aC50LGc9cC5fbGVuZ3RoLHY9ZC5yLG09ZC50aGV0YSx5PWQub3B0cyx4PXYuc2xpY2UoKSxiPW0uc2xpY2UoKTtmb3IoYT0wO2E8di5sZW5ndGg7YSsrKWUuaXNQdEluc2lkZSh7cjp2W2FdLHRoZXRhOm1bYV19KXx8KHhbYV09TmFOLGJbYV09TmFOKTt2YXIgXz1uZXcgQXJyYXkoMipnKSx3PUFycmF5KGcpLGs9QXJyYXkoZyk7Zm9yKGE9MDthPGc7YSsrKXt2YXIgQSxULE09eFthXTtpZihpKE0pKXt2YXIgUz1vLmMyZyhNKSxFPXMuYzJnKGJbYV0scC50aGV0YXVuaXQpO0E9UypNYXRoLmNvcyhFKSxUPVMqTWF0aC5zaW4oRSl9ZWxzZSBBPVQ9TmFOO3dbYV09X1syKmFdPUEsa1thXT1fWzIqYSsxXT1UfWQudHJlZT1uKF8pLHkubWFya2VyJiZnPj1mJiYoeS5tYXJrZXIuY2x1c3Rlcj1kLnRyZWUpLHkubWFya2VyJiYoeS5tYXJrZXJTZWwucG9zaXRpb25zPXkubWFya2VyVW5zZWwucG9zaXRpb25zPXkubWFya2VyLnBvc2l0aW9ucz1fKSx5LmxpbmUmJl8ubGVuZ3RoPjEmJmMuZXh0ZW5kRmxhdCh5LmxpbmUsbC5saW5lUG9zaXRpb25zKHQscCxfKSkseS50ZXh0JiYoYy5leHRlbmRGbGF0KHkudGV4dCx7cG9zaXRpb25zOl99LGwudGV4dFBvc2l0aW9uKHQscCx5LnRleHQseS5tYXJrZXIpKSxjLmV4dGVuZEZsYXQoeS50ZXh0U2VsLHtwb3NpdGlvbnM6X30sbC50ZXh0UG9zaXRpb24odCxwLHkudGV4dCx5Lm1hcmtlclNlbCkpLGMuZXh0ZW5kRmxhdCh5LnRleHRVbnNlbCx7cG9zaXRpb25zOl99LGwudGV4dFBvc2l0aW9uKHQscCx5LnRleHQseS5tYXJrZXJVbnNlbCkpKSx5LmZpbGwmJiF1LmZpbGwyZCYmKHUuZmlsbDJkPSEwKSx5Lm1hcmtlciYmIXUuc2NhdHRlcjJkJiYodS5zY2F0dGVyMmQ9ITApLHkubGluZSYmIXUubGluZTJkJiYodS5saW5lMmQ9ITApLHkudGV4dCYmIXUuZ2xUZXh0JiYodS5nbFRleHQ9ITApLHUubGluZU9wdGlvbnMucHVzaCh5LmxpbmUpLHUuZmlsbE9wdGlvbnMucHVzaCh5LmZpbGwpLHUubWFya2VyT3B0aW9ucy5wdXNoKHkubWFya2VyKSx1Lm1hcmtlclNlbGVjdGVkT3B0aW9ucy5wdXNoKHkubWFya2VyU2VsKSx1Lm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zLnB1c2goeS5tYXJrZXJVbnNlbCksdS50ZXh0T3B0aW9ucy5wdXNoKHkudGV4dCksdS50ZXh0U2VsZWN0ZWRPcHRpb25zLnB1c2goeS50ZXh0U2VsKSx1LnRleHRVbnNlbGVjdGVkT3B0aW9ucy5wdXNoKHkudGV4dFVuc2VsKSxkLng9dyxkLnk9ayxkLnJhd3g9dyxkLnJhd3k9ayxkLnI9dixkLnRoZXRhPW0sZC5wb3NpdGlvbnM9XyxkLl9zY2VuZT11LGQuaW5kZXg9dS5jb3VudCx1LmNvdW50Kyt9fSksYS5wbG90KHQsZSxyKX19LGhvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuY2RbMF0udCxvPWkucixzPWkudGhldGEsbD1hLmhvdmVyUG9pbnRzKHQsZSxyLG4pO2lmKGwmJiExIT09bFswXS5pbmRleCl7dmFyIGM9bFswXTtpZih2b2lkIDA9PT1jLmluZGV4KXJldHVybiBsO3ZhciB1PXQuc3VicGxvdCxmPWMuY2RbYy5pbmRleF0scD1jLnRyYWNlO2lmKGYucj1vW2MuaW5kZXhdLGYudGhldGE9c1tjLmluZGV4XSx1LmlzUHRJbnNpZGUoZikpcmV0dXJuIGMueExhYmVsVmFsPXZvaWQgMCxjLnlMYWJlbFZhbD12b2lkIDAsaChmLHAsdSxjKSxsfX0sc2VsZWN0UG9pbnRzOmEuc2VsZWN0UG9pbnRzLG1ldGE6e319fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uLy4uL3Bsb3RzL3BvbGFyXCI6ODEzLFwiLi4vc2NhdHRlci9jYWxjXCI6MTA1MyxcIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjXCI6MTA1NSxcIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyXCI6MTA3MCxcIi4uL3NjYXR0ZXJnbFwiOjExMDUsXCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzXCI6MTEwMixcIi4uL3NjYXR0ZXJnbC9jb252ZXJ0XCI6MTEwMyxcIi4uL3NjYXR0ZXJwb2xhci9ob3ZlclwiOjExMTcsXCIuL2F0dHJpYnV0ZXNcIjoxMTIwLFwiLi9kZWZhdWx0c1wiOjExMjEsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMixcInBvaW50LWNsdXN0ZXJcIjo0NjJ9XSwxMTIzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiKSxsPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlc1wiKS5kYXNoLGM9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCx1PWkubWFya2VyLGg9aS5saW5lLGY9dS5saW5lO2UuZXhwb3J0cz17YTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sYjp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sYzp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sc3VtOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLG1pbjowLGVkaXRUeXBlOlwiY2FsY1wifSxtb2RlOmMoe30saS5tb2RlLHtkZmx0OlwibWFya2Vyc1wifSksdGV4dDpjKHt9LGkudGV4dCx7fSksaG92ZXJ0ZXh0OmMoe30saS5ob3ZlcnRleHQse30pLGxpbmU6e2NvbG9yOmguY29sb3Isd2lkdGg6aC53aWR0aCxkYXNoOmwsc2hhcGU6Yyh7fSxoLnNoYXBlLHt2YWx1ZXM6W1wibGluZWFyXCIsXCJzcGxpbmVcIl19KSxzbW9vdGhpbmc6aC5zbW9vdGhpbmcsZWRpdFR5cGU6XCJjYWxjXCJ9LGNvbm5lY3RnYXBzOmkuY29ubmVjdGdhcHMsY2xpcG9uYXhpczppLmNsaXBvbmF4aXMsZmlsbDpjKHt9LGkuZmlsbCx7dmFsdWVzOltcIm5vbmVcIixcInRvc2VsZlwiLFwidG9uZXh0XCJdLGRmbHQ6XCJub25lXCJ9KSxmaWxsY29sb3I6aS5maWxsY29sb3IsbWFya2VyOmMoe3N5bWJvbDp1LnN5bWJvbCxvcGFjaXR5OnUub3BhY2l0eSxtYXhkaXNwbGF5ZWQ6dS5tYXhkaXNwbGF5ZWQsc2l6ZTp1LnNpemUsc2l6ZXJlZjp1LnNpemVyZWYsc2l6ZW1pbjp1LnNpemVtaW4sc2l6ZW1vZGU6dS5zaXplbW9kZSxsaW5lOmMoe3dpZHRoOmYud2lkdGgsZWRpdFR5cGU6XCJjYWxjXCJ9LG8oXCJtYXJrZXIubGluZVwiKSksZ3JhZGllbnQ6dS5ncmFkaWVudCxlZGl0VHlwZTpcImNhbGNcIn0sbyhcIm1hcmtlclwiKSx7Y29sb3JiYXI6c30pLHRleHRmb250OmkudGV4dGZvbnQsdGV4dHBvc2l0aW9uOmkudGV4dHBvc2l0aW9uLHNlbGVjdGVkOmkuc2VsZWN0ZWQsdW5zZWxlY3RlZDppLnVuc2VsZWN0ZWQsaG92ZXJpbmZvOmMoe30sYS5ob3ZlcmluZm8se2ZsYWdzOltcImFcIixcImJcIixcImNcIixcInRleHRcIixcIm5hbWVcIl19KSxob3Zlcm9uOmkuaG92ZXJvbixob3ZlcnRlbXBsYXRlOm4oKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXNcIjo1OTgsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCI6MTA1Mn1dLDExMjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGNcIiksYT10KFwiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGFcIiksbz10KFwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvblwiKSxzPXQoXCIuLi9zY2F0dGVyL2NhbGNcIikuY2FsY01hcmtlclNpemUsbD1bXCJhXCIsXCJiXCIsXCJjXCJdLGM9e2E6W1wiYlwiLFwiY1wiXSxiOltcImFcIixcImNcIl0sYzpbXCJhXCIsXCJiXCJdfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcix1LGgsZixwLGQsZz10Ll9mdWxsTGF5b3V0W2Uuc3VicGxvdF0uc3VtLHY9ZS5zdW18fGcsbT17YTplLmEsYjplLmIsYzplLmN9O2ZvcihyPTA7cjxsLmxlbmd0aDtyKyspaWYoIW1baD1sW3JdXSl7Zm9yKHA9bVtjW2hdWzBdXSxkPW1bY1toXVsxXV0sZj1uZXcgQXJyYXkocC5sZW5ndGgpLHU9MDt1PHAubGVuZ3RoO3UrKylmW3VdPXYtcFt1XS1kW3VdO21baF09Zn12YXIgeSx4LGIsXyx3LGssQT1lLl9sZW5ndGgsVD1uZXcgQXJyYXkoQSk7Zm9yKHI9MDtyPEE7cisrKXk9bS5hW3JdLHg9bS5iW3JdLGI9bS5jW3JdLG4oeSkmJm4oeCkmJm4oYik/KDEhPT0oXz1nLygoeT0reSkrKHg9K3gpKyhiPStiKSkpJiYoeSo9Xyx4Kj1fLGIqPV8pLGs9eSx3PWIteCxUW3JdPXt4OncseTprLGE6eSxiOngsYzpifSk6VFtyXT17eDohMSx5OiExfTtyZXR1cm4gcyhlLEEpLGkodCxlKSxhKFQsZSksbyhULGUpLFR9fSx7XCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YVwiOjEwNTEsXCIuLi9zY2F0dGVyL2NhbGNcIjoxMDUzLFwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvblwiOjEwNTQsXCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsY1wiOjEwNTUsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDExMjU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uL3NjYXR0ZXIvY29uc3RhbnRzXCIpLGE9dChcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIiksbz10KFwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHNcIikscz10KFwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzXCIpLGw9dChcIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0c1wiKSxjPXQoXCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHNcIiksdT10KFwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHNcIiksaD10KFwiLi9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixmKXtmdW5jdGlvbiBwKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxoLHIsaSl9dmFyIGQsZz1wKFwiYVwiKSx2PXAoXCJiXCIpLG09cChcImNcIik7aWYoZz8oZD1nLmxlbmd0aCx2PyhkPU1hdGgubWluKGQsdi5sZW5ndGgpLG0mJihkPU1hdGgubWluKGQsbS5sZW5ndGgpKSk6ZD1tP01hdGgubWluKGQsbS5sZW5ndGgpOjApOnYmJm0mJihkPU1hdGgubWluKHYubGVuZ3RoLG0ubGVuZ3RoKSksZCl7ZS5fbGVuZ3RoPWQscChcInN1bVwiKSxwKFwidGV4dFwiKSxwKFwiaG92ZXJ0ZXh0XCIpLFwiZmlsbHNcIiE9PWUuaG92ZXJvbiYmcChcImhvdmVydGVtcGxhdGVcIikscChcIm1vZGVcIixkPGkuUFRTX0xJTkVTT05MWT9cImxpbmVzK21hcmtlcnNcIjpcImxpbmVzXCIpLGEuaGFzTGluZXMoZSkmJihzKHQsZSxyLGYscCksbCh0LGUscCkscChcImNvbm5lY3RnYXBzXCIpKSxhLmhhc01hcmtlcnMoZSkmJm8odCxlLHIsZixwLHtncmFkaWVudDohMH0pLGEuaGFzVGV4dChlKSYmYyh0LGUsZixwKTt2YXIgeT1bXTsoYS5oYXNNYXJrZXJzKGUpfHxhLmhhc1RleHQoZSkpJiYocChcImNsaXBvbmF4aXNcIikscChcIm1hcmtlci5tYXhkaXNwbGF5ZWRcIikseS5wdXNoKFwicG9pbnRzXCIpKSxwKFwiZmlsbFwiKSxcIm5vbmVcIiE9PWUuZmlsbCYmKHUodCxlLHIscCksYS5oYXNMaW5lcyhlKXx8bCh0LGUscCkpLFwidG9uZXh0XCIhPT1lLmZpbGwmJlwidG9zZWxmXCIhPT1lLmZpbGx8fHkucHVzaChcImZpbGxzXCIpLHAoXCJob3Zlcm9uXCIseS5qb2luKFwiK1wiKXx8XCJwb2ludHNcIiksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUscCl9ZWxzZSBlLnZpc2libGU9ITF9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9zY2F0dGVyL2NvbnN0YW50c1wiOjEwNTYsXCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0c1wiOjEwNjEsXCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHNcIjoxMDY1LFwiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzXCI6MTA2NyxcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCI6MTA3MSxcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzXCI6MTA3NyxcIi4vYXR0cmlidXRlc1wiOjExMjN9XSwxMTI2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYoZS54YSYmKHQueGF4aXM9ZS54YSksZS55YSYmKHQueWF4aXM9ZS55YSksbltpXSl7dmFyIGE9bltpXTt0LmE9YS5hLHQuYj1hLmIsdC5jPWEuY31lbHNlIHQuYT1lLmEsdC5iPWUuYix0LmM9ZS5jO3JldHVybiB0fX0se31dLDExMjc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vc2NhdHRlci9ob3ZlclwiKSxpPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89bih0LGUscixhKTtpZihvJiYhMSE9PW9bMF0uaW5kZXgpe3ZhciBzPW9bMF07aWYodm9pZCAwPT09cy5pbmRleCl7dmFyIGw9MS1zLnkwL3QueWEuX2xlbmd0aCxjPXQueGEuX2xlbmd0aCx1PWMqbC8yLGg9Yy11O3JldHVybiBzLngwPU1hdGgubWF4KE1hdGgubWluKHMueDAsaCksdSkscy54MT1NYXRoLm1heChNYXRoLm1pbihzLngxLGgpLHUpLG99dmFyIGY9cy5jZFtzLmluZGV4XTtzLmE9Zi5hLHMuYj1mLmIscy5jPWYuYyxzLnhMYWJlbFZhbD12b2lkIDAscy55TGFiZWxWYWw9dm9pZCAwO3ZhciBwPXMudHJhY2UsZD1zLnN1YnBsb3QsZz1mLmhpfHxwLmhvdmVyaW5mbyx2PVtdO2lmKCFwLmhvdmVydGVtcGxhdGUpe3ZhciBtPWcuc3BsaXQoXCIrXCIpOy0xIT09bS5pbmRleE9mKFwiYWxsXCIpJiYobT1bXCJhXCIsXCJiXCIsXCJjXCJdKSwtMSE9PW0uaW5kZXhPZihcImFcIikmJnkoZC5hYXhpcyxmLmEpLC0xIT09bS5pbmRleE9mKFwiYlwiKSYmeShkLmJheGlzLGYuYiksLTEhPT1tLmluZGV4T2YoXCJjXCIpJiZ5KGQuY2F4aXMsZi5jKX1yZXR1cm4gcy5leHRyYVRleHQ9di5qb2luKFwiPGJyPlwiKSxzLmhvdmVydGVtcGxhdGU9cC5ob3ZlcnRlbXBsYXRlLG99ZnVuY3Rpb24geSh0LGUpe3YucHVzaCh0Ll9ob3ZlcnRpdGxlK1wiOiBcIitpLnRpY2tUZXh0KHQsZSxcImhvdmVyXCIpLnRleHQpfX19LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vc2NhdHRlci9ob3ZlclwiOjEwNjN9XSwxMTI4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNvbG9yYmFyPXQoXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiKSxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLnBsb3Q9dChcIi4vcGxvdFwiKSxuLnN0eWxlPXQoXCIuLi9zY2F0dGVyL3N0eWxlXCIpLnN0eWxlLG4uc3R5bGVPblNlbGVjdD10KFwiLi4vc2NhdHRlci9zdHlsZVwiKS5zdHlsZU9uU2VsZWN0LG4uaG92ZXJQb2ludHM9dChcIi4vaG92ZXJcIiksbi5zZWxlY3RQb2ludHM9dChcIi4uL3NjYXR0ZXIvc2VsZWN0XCIpLG4uZXZlbnREYXRhPXQoXCIuL2V2ZW50X2RhdGFcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJzY2F0dGVydGVybmFyeVwiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4uLy4uL3Bsb3RzL3Rlcm5hcnlcIiksbi5jYXRlZ29yaWVzPVtcInRlcm5hcnlcIixcInN5bWJvbHNcIixcInNob3dMZWdlbmRcIixcInNjYXR0ZXItbGlrZVwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4uLy4uL3Bsb3RzL3Rlcm5hcnlcIjo4MjUsXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiOjEwNzAsXCIuLi9zY2F0dGVyL3NlbGVjdFwiOjEwNzMsXCIuLi9zY2F0dGVyL3N0eWxlXCI6MTA3NSxcIi4vYXR0cmlidXRlc1wiOjExMjMsXCIuL2NhbGNcIjoxMTI0LFwiLi9kZWZhdWx0c1wiOjExMjUsXCIuL2V2ZW50X2RhdGFcIjoxMTI2LFwiLi9ob3ZlclwiOjExMjcsXCIuL3Bsb3RcIjoxMTI5fV0sMTEyOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9zY2F0dGVyL3Bsb3RcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1lLnBsb3RDb250YWluZXI7aS5zZWxlY3QoXCIuc2NhdHRlcmxheWVyXCIpLnNlbGVjdEFsbChcIipcIikucmVtb3ZlKCk7dmFyIGE9e3hheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpcyxwbG90OmksbGF5ZXJDbGlwSWQ6ZS5faGFzQ2xpcE9uQXhpc0ZhbHNlP2UuY2xpcElkUmVsYXRpdmU6bnVsbH0sbz1lLmxheWVycy5mcm9udHBsb3Quc2VsZWN0KFwiZy5zY2F0dGVybGF5ZXJcIik7bih0LGEscixvKX19LHtcIi4uL3NjYXR0ZXIvcGxvdFwiOjEwNzJ9XSwxMTMwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxvPXQoXCIuLi9zY2F0dGVyZ2wvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzXCIpLmlkUmVnZXgsbD10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKS50ZW1wbGF0ZWRBcnJheSxjPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsdT1uLm1hcmtlcixoPXUubGluZSxmPWMoaShcIm1hcmtlci5saW5lXCIse2VkaXRUeXBlT3ZlcnJpZGU6XCJjYWxjXCJ9KSx7d2lkdGg6Yyh7fSxoLndpZHRoLHtlZGl0VHlwZTpcImNhbGNcIn0pLGVkaXRUeXBlOlwiY2FsY1wifSkscD1jKGkoXCJtYXJrZXJcIikse3N5bWJvbDp1LnN5bWJvbCxzaXplOmMoe30sdS5zaXplLHtlZGl0VHlwZTpcIm1hcmtlclNpemVcIn0pLHNpemVyZWY6dS5zaXplcmVmLHNpemVtaW46dS5zaXplbWluLHNpemVtb2RlOnUuc2l6ZW1vZGUsb3BhY2l0eTp1Lm9wYWNpdHksY29sb3JiYXI6dS5jb2xvcmJhcixsaW5lOmYsZWRpdFR5cGU6XCJjYWxjXCJ9KTtmdW5jdGlvbiBkKHQpe3JldHVybnt2YWxUeXBlOlwiaW5mb19hcnJheVwiLGZyZWVMZW5ndGg6ITAsZWRpdFR5cGU6XCJjYWxjXCIsaXRlbXM6e3ZhbFR5cGU6XCJzdWJwbG90aWRcIixyZWdleDpzW3RdLGVkaXRUeXBlOlwicGxvdFwifX19cC5jb2xvci5lZGl0VHlwZT1wLmNtaW4uZWRpdFR5cGU9cC5jbWF4LmVkaXRUeXBlPVwic3R5bGVcIixlLmV4cG9ydHM9e2RpbWVuc2lvbnM6bChcImRpbWVuc2lvblwiLHt2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LGxhYmVsOnt2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHZhbHVlczp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0sYXhpczp7dHlwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibGluZWFyXCIsXCJsb2dcIixcImRhdGVcIixcImNhdGVnb3J5XCJdLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSxtYXRjaGVzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEsZWRpdFR5cGU6XCJjYWxjXCJ9LGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSxlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0pLHRleHQ6Yyh7fSxvLnRleHQse30pLGhvdmVydGV4dDpjKHt9LG8uaG92ZXJ0ZXh0LHt9KSxob3ZlcnRlbXBsYXRlOmEoKSxtYXJrZXI6cCx4YXhlczpkKFwieFwiKSx5YXhlczpkKFwieVwiKSxkaWFnb25hbDp7dmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0sc2hvd3VwcGVyaGFsZjp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSxzaG93bG93ZXJoYWxmOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LHNlbGVjdGVkOnttYXJrZXI6by5zZWxlY3RlZC5tYXJrZXIsZWRpdFR5cGU6XCJjYWxjXCJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjpvLnVuc2VsZWN0ZWQubWFya2VyLGVkaXRUeXBlOlwiY2FsY1wifSxvcGFjaXR5Om8ub3BhY2l0eX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHNcIjo3NTUsXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIjoxMDUyLFwiLi4vc2NhdHRlcmdsL2F0dHJpYnV0ZXNcIjoxMTAxfV0sMTEzMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJyZWdsLWxpbmUyZFwiKSxpPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxhPXQoXCIuLi8uLi9saWIvcHJlcGFyZV9yZWdsXCIpLG89dChcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCIpLmdldE1vZHVsZUNhbGNEYXRhLHM9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiKSxsPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIikuZ2V0RnJvbUlkLGM9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLnNob3VsZFNob3daZXJvTGluZSx1PVwic3Bsb21cIjtmdW5jdGlvbiBoKHQsZSxyKXtmb3IodmFyIG49ci5tYXRyaXhPcHRpb25zLmRhdGEubGVuZ3RoLGk9ZS5fdmlzaWJsZURpbXMsYT1yLnZpZXdPcHRzLnJhbmdlcz1uZXcgQXJyYXkobiksbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz1pW29dLGM9YVtvXT1uZXcgQXJyYXkoNCksdT1sKHQsZS5fZGlhZ1tzXVswXSk7dSYmKGNbMF09dS5yMmwodS5yYW5nZVswXSksY1syXT11LnIybCh1LnJhbmdlWzFdKSk7dmFyIGg9bCh0LGUuX2RpYWdbc11bMV0pO2gmJihjWzFdPWgucjJsKGgucmFuZ2VbMF0pLGNbM109aC5yMmwoaC5yYW5nZVsxXSkpfXIuc2VsZWN0QmF0Y2g/ci5tYXRyaXgudXBkYXRlKHtyYW5nZXM6YX0se3JhbmdlczphfSk6ci5tYXRyaXgudXBkYXRlKHtyYW5nZXM6YX0pfWZ1bmN0aW9uIGYodCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWUuX2dsY2FudmFzLmRhdGEoKVswXS5yZWdsLGk9ZS5fc3Bsb21HcmlkO2l8fChpPWUuX3NwbG9tR3JpZD1uKHIpKSxpLnVwZGF0ZShmdW5jdGlvbih0KXt2YXIgZSxyPXQuX2Z1bGxMYXlvdXQsbj1yLl9zaXplLGk9WzAsMCxyLndpZHRoLHIuaGVpZ2h0XSxhPXt9O2Z1bmN0aW9uIG8odCxlLHIsbixvLHMpe3ZhciBsPWVbdCtcImNvbG9yXCJdLGM9ZVt0K1wid2lkdGhcIl0sdT1TdHJpbmcobCtjKTt1IGluIGE/YVt1XS5kYXRhLnB1c2goTmFOLE5hTixyLG4sbyxzKTphW3VdPXtkYXRhOltyLG4sbyxzXSxqb2luOlwicmVjdFwiLHRoaWNrbmVzczpjLGNvbG9yOmwsdmlld3BvcnQ6aSxyYW5nZTppLG92ZXJsYXk6ITF9fWZvcihlIGluIHIuX3NwbG9tU3VicGxvdHMpe3ZhciBzLGwsdT1yLl9wbG90c1tlXSxoPXUueGF4aXMsZj11LnlheGlzLHA9aC5fdmFscyxkPWYuX3ZhbHMsZz1uLmIrZi5kb21haW5bMF0qbi5oLHY9LWYuX20sbT0tdipmLnIybChmLnJhbmdlWzBdLGYuY2FsZW5kYXIpO2lmKGguc2hvd2dyaWQpZm9yKGU9MDtlPHAubGVuZ3RoO2UrKylzPWguX29mZnNldCtoLmwycChwW2VdLngpLG8oXCJncmlkXCIsaCxzLGcscyxnK2YuX2xlbmd0aCk7aWYoZi5zaG93Z3JpZClmb3IoZT0wO2U8ZC5sZW5ndGg7ZSsrKWw9ZyttK3YqZFtlXS54LG8oXCJncmlkXCIsZixoLl9vZmZzZXQsbCxoLl9vZmZzZXQraC5fbGVuZ3RoLGwpO2ModCxoLGYpJiYocz1oLl9vZmZzZXQraC5sMnAoMCksbyhcInplcm9saW5lXCIsaCxzLGcscyxnK2YuX2xlbmd0aCkpLGModCxmLGgpJiYobD1nK20rMCxvKFwiemVyb2xpbmVcIixmLGguX29mZnNldCxsLGguX29mZnNldCtoLl9sZW5ndGgsbCkpfXZhciB5PVtdO2ZvcihlIGluIGEpeS5wdXNoKGFbZV0pO3JldHVybiB5fSh0KSl9ZS5leHBvcnRzPXtuYW1lOnUsYXR0cjpzLmF0dHIsYXR0clJlZ2V4OnMuYXR0clJlZ2V4LGxheW91dEF0dHJpYnV0ZXM6cy5sYXlvdXRBdHRyaWJ1dGVzLHN1cHBseUxheW91dERlZmF1bHRzOnMuc3VwcGx5TGF5b3V0RGVmYXVsdHMsZHJhd0ZyYW1ld29yazpzLmRyYXdGcmFtZXdvcmsscGxvdDpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9aS5nZXRNb2R1bGUodSksbj1vKHQuY2FsY2RhdGEscilbMF07YSh0LFtcIkFOR0xFX2luc3RhbmNlZF9hcnJheXNcIixcIk9FU19lbGVtZW50X2luZGV4X3VpbnRcIl0pJiYoZS5faGFzT25seUxhcmdlU3Bsb21zJiZmKHQpLHIucGxvdCh0LHt9LG4pKX0sZHJhZzpmdW5jdGlvbih0KXt2YXIgZT10LmNhbGNkYXRhLHI9dC5fZnVsbExheW91dDtyLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJmYodCk7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl1bMF0udHJhY2UsYT1yLl9zcGxvbVNjZW5lc1tpLnVpZF07XCJzcGxvbVwiPT09aS50eXBlJiZhJiZhLm1hdHJpeCYmaCh0LGksYSl9fSx1cGRhdGVHcmlkOmYsY2xlYW46ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT17fTtpZihuLl9zcGxvbVNjZW5lcyl7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIG89dFtpXTtcInNwbG9tXCI9PT1vLnR5cGUmJihhW28udWlkXT0xKX1mb3IoaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbD1yW2ldO2lmKCFhW2wudWlkXSl7dmFyIGM9bi5fc3Bsb21TY2VuZXNbbC51aWRdO2MmJmMuZGVzdHJveSYmYy5kZXN0cm95KCksbi5fc3Bsb21TY2VuZXNbbC51aWRdPW51bGwsZGVsZXRlIG4uX3NwbG9tU2NlbmVzW2wudWlkXX19fTA9PT1PYmplY3Qua2V5cyhuLl9zcGxvbVNjZW5lc3x8e30pLmxlbmd0aCYmZGVsZXRlIG4uX3NwbG9tU2NlbmVzLG4uX3NwbG9tR3JpZCYmIWUuX2hhc09ubHlMYXJnZVNwbG9tcyYmbi5faGFzT25seUxhcmdlU3Bsb21zJiYobi5fc3Bsb21HcmlkLmRlc3Ryb3koKSxuLl9zcGxvbUdyaWQ9bnVsbCxkZWxldGUgbi5fc3Bsb21HcmlkKSxzLmNsZWFuKHQsZSxyLG4pfSx1cGRhdGVGeDpmdW5jdGlvbih0KXtzLnVwZGF0ZUZ4KHQpO3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLmRyYWdtb2RlO2lmKFwiem9vbVwiPT09cnx8XCJwYW5cIj09PXIpZm9yKHZhciBuPXQuY2FsY2RhdGEsaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT1uW2ldWzBdLnRyYWNlO2lmKFwic3Bsb21cIj09PWEudHlwZSl7dmFyIG89ZS5fc3Bsb21TY2VuZXNbYS51aWRdO251bGw9PT1vLnNlbGVjdEJhdGNoJiZvLm1hdHJpeC51cGRhdGUoby5tYXRyaXhPcHRpb25zLG51bGwpfX19LHRvU1ZHOnMudG9TVkd9fSx7XCIuLi8uLi9saWIvcHJlcGFyZV9yZWdsXCI6NzE0LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIjo3NTIsXCIuLi8uLi9wbG90cy9nZXRfZGF0YVwiOjc4NCxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwicmVnbC1saW5lMmRcIjo0ODR9XSwxMTMyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIiksYT10KFwiLi9hdHRyaWJ1dGVzXCIpLG89dChcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIikscz10KFwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHNcIiksbD10KFwiLi4vcGFyY29vcmRzL21lcmdlX2xlbmd0aFwiKSxjPS8tb3Blbi87ZnVuY3Rpb24gdSh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEuZGltZW5zaW9ucyxyLGkpfXIoXCJsYWJlbFwiKTt2YXIgaT1yKFwidmFsdWVzXCIpO2kmJmkubGVuZ3RoP3IoXCJ2aXNpYmxlXCIpOmUudmlzaWJsZT0hMSxyKFwiYXhpcy50eXBlXCIpLHIoXCJheGlzLm1hdGNoZXNcIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGgpe2Z1bmN0aW9uIGYocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgcD1pKHQsZSx7bmFtZTpcImRpbWVuc2lvbnNcIixoYW5kbGVJdGVtRGVmYXVsdHM6dX0pLGQ9ZihcImRpYWdvbmFsLnZpc2libGVcIiksZz1mKFwic2hvd3VwcGVyaGFsZlwiKSx2PWYoXCJzaG93bG93ZXJoYWxmXCIpO2lmKGwoZSxwLFwidmFsdWVzXCIpJiYoZHx8Z3x8dikpe2YoXCJ0ZXh0XCIpLGYoXCJob3ZlcnRleHRcIiksZihcImhvdmVydGVtcGxhdGVcIikscyh0LGUscixoLGYpO3ZhciBtPWMudGVzdChlLm1hcmtlci5zeW1ib2wpLHk9by5pc0J1YmJsZShlKTtmKFwibWFya2VyLmxpbmUud2lkdGhcIixtfHx5PzE6MCksZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvPWUuZGltZW5zaW9ucyxzPW8ubGVuZ3RoLGw9ZS5zaG93dXBwZXJoYWxmLGM9ZS5zaG93bG93ZXJoYWxmLHU9ZS5kaWFnb25hbC52aXNpYmxlLGg9bmV3IEFycmF5KHMpLGY9bmV3IEFycmF5KHMpO2ZvcihpPTA7aTxzO2krKyl7dmFyIHA9aT9pKzE6XCJcIjtoW2ldPVwieFwiK3AsZltpXT1cInlcIitwfXZhciBkPW4oXCJ4YXhlc1wiLGgpLGc9bihcInlheGVzXCIsZiksdj1lLl9kaWFnPW5ldyBBcnJheShzKTtlLl94YXhlcz17fSxlLl95YXhlcz17fTt2YXIgbT1bXSx5PVtdO2Z1bmN0aW9uIHgodCxuLGksYSl7aWYodCl7dmFyIG89dC5jaGFyQXQoMCkscz1yLl9zcGxvbUF4ZXNbb107aWYoZVtcIl9cIitvK1wiYXhlc1wiXVt0XT0xLGEucHVzaCh0KSwhKHQgaW4gcykpe3ZhciBsPXNbdF09e307aSYmKGwubGFiZWw9aS5sYWJlbHx8XCJcIixpLnZpc2libGUmJmkuYXhpcyYmKGkuYXhpcy50eXBlJiYobC50eXBlPWkuYXhpcy50eXBlKSxpLmF4aXMubWF0Y2hlcyYmKGwubWF0Y2hlcz1uKSkpfX19dmFyIGI9IXUmJiFjLF89IXUmJiFsO2ZvcihpPTA7aTxzO2krKyl7dmFyIHc9b1tpXSxrPTA9PT1pLEE9aT09PXMtMSxUPWsmJmJ8fEEmJl8/dm9pZCAwOmRbaV0sTT1rJiZffHxBJiZiP3ZvaWQgMDpnW2ldO3goVCxNLHcsbSkseChNLFQsdyx5KSx2W2ldPVtULE1dfWZvcihpPTA7aTxtLmxlbmd0aDtpKyspZm9yKGE9MDthPHkubGVuZ3RoO2ErKyl7dmFyIFM9bVtpXSt5W2FdO2k+YSYmbD9yLl9zcGxvbVN1YnBsb3RzW1NdPTE6aTxhJiZjP3IuX3NwbG9tU3VicGxvdHNbU109MTppIT09YXx8IXUmJmMmJmx8fChyLl9zcGxvbVN1YnBsb3RzW1NdPTEpfSghY3x8IXUmJmwmJmMpJiYoci5fc3Bsb21HcmlkRGZsdC54c2lkZT1cImJvdHRvbVwiLHIuX3NwbG9tR3JpZERmbHQueXNpZGU9XCJsZWZ0XCIpfSgwLGUsaCxmKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxmKX1lbHNlIGUudmlzaWJsZT0hMX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0c1wiOjc0NSxcIi4uL3BhcmNvb3Jkcy9tZXJnZV9sZW5ndGhcIjoxMDIzLFwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHNcIjoxMDcxLFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiOjEwNzYsXCIuL2F0dHJpYnV0ZXNcIjoxMTMwfV0sMTEzMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJyZWdsLXNwbG9tXCIpLGk9dChcImFycmF5LXJhbmdlXCIpLGE9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvZ3JpZFwiKSxzPXQoXCIuLi8uLi9saWJcIiksbD10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCIpLGM9dChcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIiksdT10KFwiLi4vc2NhdHRlci9jYWxjXCIpLmNhbGNNYXJrZXJTaXplLGg9dChcIi4uL3NjYXR0ZXIvY2FsY1wiKS5jYWxjQXhpc0V4cGFuc2lvbixmPXQoXCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsY1wiKSxwPXQoXCIuLi9zY2F0dGVyZ2wvY29udmVydFwiKS5tYXJrZXJTZWxlY3Rpb24sZD10KFwiLi4vc2NhdHRlcmdsL2NvbnZlcnRcIikubWFya2VyU3R5bGUsZz10KFwiLi4vc2NhdHRlcmdsXCIpLmNhbGNIb3Zlcix2PXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTSxtPXQoXCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzXCIpLlRPT19NQU5ZX1BPSU5UUztmdW5jdGlvbiB5KHQsZSl7dmFyIHIsaSxhLG8sYyx1PXQuX2Z1bGxMYXlvdXQsaD11Ll9zaXplLGY9ZS50cmFjZSxwPWUudCxkPXUuX3NwbG9tU2NlbmVzW2YudWlkXSxnPWQubWF0cml4T3B0aW9ucyx2PWcuY2RhdGEsbT11Ll9nbGNhbnZhcy5kYXRhKClbMF0ucmVnbCx5PXUuZHJhZ21vZGU7aWYoMCE9PXYubGVuZ3RoKXtnLmxvd2VyPWYuc2hvd3VwcGVyaGFsZixnLnVwcGVyPWYuc2hvd2xvd2VyaGFsZixnLmRpYWdvbmFsPWYuZGlhZ29uYWwudmlzaWJsZTt2YXIgeD1mLl92aXNpYmxlRGltcyxiPXYubGVuZ3RoLF89ZC52aWV3T3B0cz17fTtmb3IoXy5yYW5nZXM9bmV3IEFycmF5KGIpLF8uZG9tYWlucz1uZXcgQXJyYXkoYiksYz0wO2M8eC5sZW5ndGg7YysrKXthPXhbY107dmFyIHc9Xy5yYW5nZXNbY109bmV3IEFycmF5KDQpLGs9Xy5kb21haW5zW2NdPW5ldyBBcnJheSg0KTsocj1sLmdldEZyb21JZCh0LGYuX2RpYWdbYV1bMF0pKSYmKHdbMF09ci5fcmxbMF0sd1syXT1yLl9ybFsxXSxrWzBdPXIuZG9tYWluWzBdLGtbMl09ci5kb21haW5bMV0pLChpPWwuZ2V0RnJvbUlkKHQsZi5fZGlhZ1thXVsxXSkpJiYod1sxXT1pLl9ybFswXSx3WzNdPWkuX3JsWzFdLGtbMV09aS5kb21haW5bMF0sa1szXT1pLmRvbWFpblsxXSl9Xy52aWV3cG9ydD1baC5sLGguYixoLncraC5sLGguaCtoLmJdLCEwPT09ZC5tYXRyaXgmJihkLm1hdHJpeD1uKG0pKTt2YXIgQT11LmNsaWNrbW9kZS5pbmRleE9mKFwic2VsZWN0XCIpPi0xLFQ9XCJsYXNzb1wiPT09eXx8XCJzZWxlY3RcIj09PXl8fCEhZi5zZWxlY3RlZHBvaW50c3x8QTtpZihkLnNlbGVjdEJhdGNoPW51bGwsZC51bnNlbGVjdEJhdGNoPW51bGwsVCl7dmFyIE09Zi5fbGVuZ3RoO2lmKGQuc2VsZWN0QmF0Y2h8fChkLnNlbGVjdEJhdGNoPVtdLGQudW5zZWxlY3RCYXRjaD1bXSksZi5zZWxlY3RlZHBvaW50cyl7ZC5zZWxlY3RCYXRjaD1mLnNlbGVjdGVkcG9pbnRzO3ZhciBTPWYuc2VsZWN0ZWRwb2ludHMsRT17fTtmb3IoYT0wO2E8Uy5sZW5ndGg7YSsrKUVbU1thXV09ITA7dmFyIEM9W107Zm9yKGE9MDthPE07YSsrKUVbYV18fEMucHVzaChhKTtkLnVuc2VsZWN0QmF0Y2g9Q312YXIgTD1wLnhweD1uZXcgQXJyYXkoYiksej1wLnlweD1uZXcgQXJyYXkoYik7Zm9yKGM9MDtjPHgubGVuZ3RoO2MrKyl7aWYoYT14W2NdLHI9bC5nZXRGcm9tSWQodCxmLl9kaWFnW2FdWzBdKSlmb3IoTFtjXT1uZXcgQXJyYXkoTSksbz0wO288TTtvKyspTFtjXVtvXT1yLmMycCh2W2NdW29dKTtpZihpPWwuZ2V0RnJvbUlkKHQsZi5fZGlhZ1thXVsxXSkpZm9yKHpbY109bmV3IEFycmF5KE0pLG89MDtvPE07bysrKXpbY11bb109aS5jMnAodltjXVtvXSl9ZC5zZWxlY3RCYXRjaD8oZC5tYXRyaXgudXBkYXRlKGcsZyksZC5tYXRyaXgudXBkYXRlKGQudW5zZWxlY3RlZE9wdGlvbnMsZC5zZWxlY3RlZE9wdGlvbnMpLGQubWF0cml4LnVwZGF0ZShfLF8pKTpkLm1hdHJpeC51cGRhdGUoXyxudWxsKX1lbHNle3ZhciBPPXMuZXh0ZW5kRmxhdCh7fSxnLF8pO2QubWF0cml4LnVwZGF0ZShPLG51bGwpLHAueHB4PXAueXB4PW51bGx9fX1mdW5jdGlvbiB4KHQsZSl7Zm9yKHZhciByPWUuX2lkLG49e3g6MCx5OjF9W3IuY2hhckF0KDApXSxpPXQuX3Zpc2libGVEaW1zLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTtpZih0Ll9kaWFnW29dW25dPT09cilyZXR1cm4gYX1yZXR1cm4hMX1lLmV4cG9ydHM9e21vZHVsZVR5cGU6XCJ0cmFjZVwiLG5hbWU6XCJzcGxvbVwiLGJhc2VQbG90TW9kdWxlOnQoXCIuL2Jhc2VfcGxvdFwiKSxjYXRlZ29yaWVzOltcImdsXCIsXCJyZWdsXCIsXCJjYXJ0ZXNpYW5cIixcInN5bWJvbHNcIixcInNob3dMZWdlbmRcIixcInNjYXR0ZXItbGlrZVwiXSxhdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksc3VwcGx5RGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIiksY29sb3JiYXI6dChcIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyXCIpLGNhbGM6ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLGMsZz1lLmRpbWVuc2lvbnMseT1lLl9sZW5ndGgseD17fSxiPXguY2RhdGE9W10sXz14LmRhdGE9W10sdz1lLl92aXNpYmxlRGltcz1bXTtmdW5jdGlvbiBrKHQscil7Zm9yKHZhciBuPXQubWFrZUNhbGNkYXRhKHt2OnIudmFsdWVzLHZjYWxlbmRhcjplLmNhbGVuZGFyfSxcInZcIiksaT0wO2k8bi5sZW5ndGg7aSsrKW5baV09bltpXT09PXY/TmFOOm5baV07Yi5wdXNoKG4pLF8ucHVzaChcImxvZ1wiPT09dC50eXBlP3Muc2ltcGxlTWFwKG4sdC5jMmwpOm4pfWZvcihyPTA7cjxnLmxlbmd0aDtyKyspaWYoKGk9Z1tyXSkudmlzaWJsZSl7aWYoYT1sLmdldEZyb21JZCh0LGUuX2RpYWdbcl1bMF0pLG89bC5nZXRGcm9tSWQodCxlLl9kaWFnW3JdWzFdKSxhJiZvJiZhLnR5cGUhPT1vLnR5cGUpe3MubG9nKFwiU2tpcHBpbmcgc3Bsb20gZGltZW5zaW9uIFwiK3IrXCIgd2l0aCBjb25mbGljdGluZyBheGlzIHR5cGVzXCIpO2NvbnRpbnVlfWE/KGsoYSxpKSxvJiZcImNhdGVnb3J5XCI9PT1vLnR5cGUmJihvLl9jYXRlZ29yaWVzPWEuX2NhdGVnb3JpZXMuc2xpY2UoKSkpOmsobyxpKSx3LnB1c2gocil9Zm9yKGYodCxlKSxzLmV4dGVuZEZsYXQoeCxkKGUpKSxjPWIubGVuZ3RoKnk+bT8yKih4LnNpemVBdmd8fE1hdGgubWF4KHguc2l6ZSwzKSk6dShlLHkpLG49MDtuPHcubGVuZ3RoO24rKylpPWdbcj13W25dXSxhPWwuZ2V0RnJvbUlkKHQsZS5fZGlhZ1tyXVswXSl8fHt9LG89bC5nZXRGcm9tSWQodCxlLl9kaWFnW3JdWzFdKXx8e30saCh0LGUsYSxvLGJbbl0sYltuXSxjKTt2YXIgQT1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsbj1lLnVpZCxpPXIuX3NwbG9tU2NlbmVzO2l8fChpPXIuX3NwbG9tU2NlbmVzPXt9KTt2YXIgYT17ZGlydHk6ITB9LG89aVtlLnVpZF07cmV0dXJuIG98fCgobz1pW25dPXMuZXh0ZW5kRmxhdCh7fSxhLHtzZWxlY3RCYXRjaDpudWxsLHVuc2VsZWN0QmF0Y2g6bnVsbCxtYXRyaXg6ITEsc2VsZWN0Om51bGx9KSkuZHJhdz1mdW5jdGlvbigpe28ubWF0cml4JiZvLm1hdHJpeC5kcmF3JiYoby5zZWxlY3RCYXRjaD9vLm1hdHJpeC5kcmF3KG8udW5zZWxlY3RCYXRjaCxvLnNlbGVjdEJhdGNoKTpvLm1hdHJpeC5kcmF3KCkpLG8uZGlydHk9ITF9LG8uZGVzdHJveT1mdW5jdGlvbigpe28ubWF0cml4JiZvLm1hdHJpeC5kZXN0cm95JiZvLm1hdHJpeC5kZXN0cm95KCksby5tYXRyaXhPcHRpb25zPW51bGwsby5zZWxlY3RCYXRjaD1udWxsLG8udW5zZWxlY3RCYXRjaD1udWxsLG89bnVsbH0pLG8uZGlydHl8fHMuZXh0ZW5kRmxhdChvLGEpLG99KHQsZSk7cmV0dXJuIEEubWF0cml4fHwoQS5tYXRyaXg9ITApLEEubWF0cml4T3B0aW9ucz14LEEuc2VsZWN0ZWRPcHRpb25zPXAoZSxlLnNlbGVjdGVkKSxBLnVuc2VsZWN0ZWRPcHRpb25zPXAoZSxlLnVuc2VsZWN0ZWQpLFt7eDohMSx5OiExLHQ6e30sdHJhY2U6ZX1dfSxwbG90OmZ1bmN0aW9uKHQsZSxyKXtpZihyLmxlbmd0aClmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl5KHQscltuXVswXSl9LGhvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmNkWzBdLnRyYWNlLGk9dC5zY2VuZS5tYXRyaXhPcHRpb25zLmNkYXRhLGE9dC54YSxvPXQueWEscz1hLmMycChlKSxsPW8uYzJwKHIpLGM9dC5kaXN0YW5jZSx1PXgobixhKSxoPXgobixvKTtpZighMT09PXV8fCExPT09aClyZXR1cm5bdF07Zm9yKHZhciBmLHAsZD1pW3VdLHY9aVtoXSxtPWMseT0wO3k8ZC5sZW5ndGg7eSsrKXt2YXIgYj1kW3ldLF89dlt5XSx3PWEuYzJwKGIpLXMsaz1vLmMycChfKS1sLEE9TWF0aC5zcXJ0KHcqdytrKmspO0E8bSYmKG09cD1BLGY9eSl9cmV0dXJuIHQuaW5kZXg9Zix0LmRpc3RhbmNlPW0sdC5keHk9cCx2b2lkIDA9PT1mP1t0XTooZyh0LGQsdixuKSxbdF0pfSxzZWxlY3RQb2ludHM6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQuY2QsYT1uWzBdLnRyYWNlLG89blswXS50LHM9dC5zY2VuZSxsPXMubWF0cml4T3B0aW9ucy5jZGF0YSx1PXQueGF4aXMsaD10LnlheGlzLGY9W107aWYoIXMpcmV0dXJuIGY7dmFyIHA9IWMuaGFzTWFya2VycyhhKSYmIWMuaGFzVGV4dChhKTtpZighMCE9PWEudmlzaWJsZXx8cClyZXR1cm4gZjt2YXIgZD14KGEsdSksZz14KGEsaCk7aWYoITE9PT1kfHwhMT09PWcpcmV0dXJuIGY7dmFyIHY9by54cHhbZF0sbT1vLnlweFtnXSx5PWxbZF0sYj1sW2ddLF89bnVsbCx3PW51bGw7aWYoITE9PT1lfHxlLmRlZ2VuZXJhdGUpdz1pKG8uY291bnQpO2Vsc2UgZm9yKF89W10sdz1bXSxyPTA7cjx5Lmxlbmd0aDtyKyspZS5jb250YWlucyhbdltyXSxtW3JdXSxudWxsLHIsdCk/KF8ucHVzaChyKSxmLnB1c2goe3BvaW50TnVtYmVyOnIseDp5W3JdLHk6YltyXX0pKTp3LnB1c2gocik7aWYocy5zZWxlY3RCYXRjaHx8KHMuc2VsZWN0QmF0Y2g9W10scy51bnNlbGVjdEJhdGNoPVtdKSwhcy5zZWxlY3RCYXRjaCl7Zm9yKHI9MDtyPHMuY291bnQ7cisrKXMuc2VsZWN0QmF0Y2g9W10scy51bnNlbGVjdEJhdGNoPVtdO3MubWF0cml4LnVwZGF0ZShzLnVuc2VsZWN0ZWRPcHRpb25zLHMuc2VsZWN0ZWRPcHRpb25zKX1yZXR1cm4gcy5zZWxlY3RCYXRjaD1fLHMudW5zZWxlY3RCYXRjaD13LGZ9LGVkaXRTdHlsZTpmdW5jdGlvbih0LGUpe3ZhciByPWUudHJhY2Usbj10Ll9mdWxsTGF5b3V0Ll9zcGxvbVNjZW5lc1tyLnVpZF07aWYobil7Zih0LHIpLHMuZXh0ZW5kRmxhdChuLm1hdHJpeE9wdGlvbnMsZChyKSk7dmFyIGk9cy5leHRlbmRGbGF0KHt9LG4ubWF0cml4T3B0aW9ucyxuLnZpZXdPcHRzKTtuLm1hdHJpeC51cGRhdGUoaSxudWxsKX19LG1ldGE6e319LGEucmVnaXN0ZXIobyl9LHtcIi4uLy4uL2NvbXBvbmVudHMvZ3JpZFwiOjYyMSxcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIjo3NTIsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL3NjYXR0ZXIvY2FsY1wiOjEwNTMsXCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsY1wiOjEwNTUsXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiOjEwNzAsXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCI6MTA3NixcIi4uL3NjYXR0ZXJnbFwiOjExMDUsXCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzXCI6MTEwMixcIi4uL3NjYXR0ZXJnbC9jb252ZXJ0XCI6MTEwMyxcIi4vYXR0cmlidXRlc1wiOjExMzAsXCIuL2Jhc2VfcGxvdFwiOjExMzEsXCIuL2RlZmF1bHRzXCI6MTEzMixcImFycmF5LXJhbmdlXCI6NTgsXCJyZWdsLXNwbG9tXCI6NDg2fV0sMTEzNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vbWVzaDNkL2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiKSxsPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsYz17eDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0seTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0sejp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0sdTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sdjp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sdzp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sc3RhcnRzOnt4Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx5Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx6Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0sbWF4ZGlzcGxheWVkOnt2YWxUeXBlOlwiaW50ZWdlclwiLG1pbjowLGRmbHQ6MWUzLGVkaXRUeXBlOlwiY2FsY1wifSxzaXplcmVmOnt2YWxUeXBlOlwibnVtYmVyXCIsZWRpdFR5cGU6XCJjYWxjXCIsbWluOjAsZGZsdDoxfSx0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwiY2FsY1wifSxob3ZlcnRleHQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGhvdmVydGVtcGxhdGU6YSh7ZWRpdFR5cGU6XCJjYWxjXCJ9LHtrZXlzOltcInR1YmV4XCIsXCJ0dWJleVwiLFwidHViZXpcIixcInR1YmV1XCIsXCJ0dWJldlwiLFwidHViZXdcIixcIm5vcm1cIixcImRpdmVyZ2VuY2VcIl19KX07bChjLG4oXCJcIix7Y29sb3JBdHRyOlwidS92L3cgbm9ybVwiLHNob3dTY2FsZURmbHQ6ITAsZWRpdFR5cGVPdmVycmlkZTpcImNhbGNcIn0pLHtjb2xvcmJhcjppfSk7W1wib3BhY2l0eVwiLFwibGlnaHRwb3NpdGlvblwiLFwibGlnaHRpbmdcIl0uZm9yRWFjaChmdW5jdGlvbih0KXtjW3RdPW9bdF19KSxjLmhvdmVyaW5mbz1sKHt9LHMuaG92ZXJpbmZvLHtlZGl0VHlwZTpcImNhbGNcIixmbGFnczpbXCJ4XCIsXCJ5XCIsXCJ6XCIsXCJ1XCIsXCJ2XCIsXCJ3XCIsXCJub3JtXCIsXCJkaXZlcmdlbmNlXCIsXCJ0ZXh0XCIsXCJuYW1lXCJdLGRmbHQ6XCJ4K3kreitub3JtK3RleHQrbmFtZVwifSksYy50cmFuc2Zvcm1zPXZvaWQgMCxlLmV4cG9ydHM9Y30se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCI6NTc5LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIjo1ODUsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi4vbWVzaDNkL2F0dHJpYnV0ZXNcIjo5OTR9XSwxMTM1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYSxvLHM9ZS51LGw9ZS52LGM9ZS53LHU9ZS54LGg9ZS55LGY9ZS56LHA9TWF0aC5taW4odS5sZW5ndGgsaC5sZW5ndGgsZi5sZW5ndGgscy5sZW5ndGgsbC5sZW5ndGgsYy5sZW5ndGgpLGQ9MDtlLnN0YXJ0cyYmKGk9ZS5zdGFydHMueHx8W10sYT1lLnN0YXJ0cy55fHxbXSxvPWUuc3RhcnRzLnp8fFtdLGQ9TWF0aC5taW4oaS5sZW5ndGgsYS5sZW5ndGgsby5sZW5ndGgpKTt2YXIgZz0wLHY9MS8wO2ZvcihyPTA7cjxwO3IrKyl7dmFyIG09c1tyXSx5PWxbcl0seD1jW3JdLGI9TWF0aC5zcXJ0KG0qbSt5KnkreCp4KTtnPU1hdGgubWF4KGcsYiksdj1NYXRoLm1pbih2LGIpfW4odCxlLHt2YWxzOlt2LGddLGNvbnRhaW5lclN0cjpcIlwiLGNMZXR0ZXI6XCJjXCJ9KTt2YXIgXz0tMS8wLHc9MS8wLGs9LTEvMCxBPTEvMCxUPS0xLzAsTT0xLzA7Zm9yKHI9MDtyPHA7cisrKXt2YXIgUz11W3JdO189TWF0aC5tYXgoXyxTKSx3PU1hdGgubWluKHcsUyk7dmFyIEU9aFtyXTtrPU1hdGgubWF4KGssRSksQT1NYXRoLm1pbihBLEUpO3ZhciBDPWZbcl07VD1NYXRoLm1heChULEMpLE09TWF0aC5taW4oTSxDKX1mb3Iocj0wO3I8ZDtyKyspe3ZhciBMPWlbcl07Xz1NYXRoLm1heChfLEwpLHc9TWF0aC5taW4odyxMKTt2YXIgej1hW3JdO2s9TWF0aC5tYXgoayx6KSxBPU1hdGgubWluKEEseik7dmFyIE89b1tyXTtUPU1hdGgubWF4KFQsTyksTT1NYXRoLm1pbihNLE8pfWUuX2xlbj1wLGUuX3NsZW49ZCxlLl9ub3JtTWF4PWcsZS5feGJuZHM9W3csX10sZS5feWJuZHM9W0Esa10sZS5femJuZHM9W00sVF19fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsY1wiOjU4Nn1dLDExMzY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2wtc3RyZWFtdHViZTNkXCIpLGk9bi5jcmVhdGVUdWJlTWVzaCxhPXQoXCIuLi8uLi9saWJcIiksbz10KFwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvclwiKS5wYXJzZUNvbG9yU2NhbGUscz10KFwiLi4vLi4vcGxvdHMvZ2wzZC96aXAzXCIpLGw9e3hheGlzOjAseWF4aXM6MSx6YXhpczoyfTtmdW5jdGlvbiBjKHQsZSl7dGhpcy5zY2VuZT10LHRoaXMudWlkPWUsdGhpcy5tZXNoPW51bGwsdGhpcy5kYXRhPW51bGx9dmFyIHU9Yy5wcm90b3R5cGU7ZnVuY3Rpb24gaCh0KXtyZXR1cm4gYS5kaXN0aW5jdFZhbHModCkudmFsc31mdW5jdGlvbiBmKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBlPjI/dC5zbGljZSgxLGUtMSk6Mj09PWU/Wyh0WzBdK3RbMV0pLzJdOnR9ZnVuY3Rpb24gcCh0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gMT09PWU/Wy41LC41XTpbdFsxXS10WzBdLHRbZS0xXS10W2UtMl1dfWZ1bmN0aW9uIGQodCxlKXt2YXIgcj10LmZ1bGxTY2VuZUxheW91dCxpPXQuZGF0YVNjYWxlLGM9ZS5fbGVuLHU9e307ZnVuY3Rpb24gZCh0LGUpe3ZhciBuPXJbZV0sbz1pW2xbZV1dO3JldHVybiBhLnNpbXBsZU1hcCh0LGZ1bmN0aW9uKHQpe3JldHVybiBuLmQybCh0KSpvfSl9dS52ZWN0b3JzPXMoZChlLnUsXCJ4YXhpc1wiKSxkKGUudixcInlheGlzXCIpLGQoZS53LFwiemF4aXNcIiksYyk7dmFyIGc9aChlLnguc2xpY2UoMCxjKSksdj1oKGUueS5zbGljZSgwLGMpKSxtPWgoZS56LnNsaWNlKDAsYykpO2lmKGcubGVuZ3RoKnYubGVuZ3RoKm0ubGVuZ3RoPmMpcmV0dXJue3Bvc2l0aW9uczpbXSxjZWxsczpbXX07dmFyIHk9ZChnLFwieGF4aXNcIikseD1kKHYsXCJ5YXhpc1wiKSxiPWQobSxcInpheGlzXCIpO2lmKHUubWVzaGdyaWQ9W3kseCxiXSxlLnN0YXJ0cyl7dmFyIF89ZS5fc2xlbjt1LnN0YXJ0aW5nUG9zaXRpb25zPXMoZChlLnN0YXJ0cy54LnNsaWNlKDAsXyksXCJ4YXhpc1wiKSxkKGUuc3RhcnRzLnkuc2xpY2UoMCxfKSxcInlheGlzXCIpLGQoZS5zdGFydHMuei5zbGljZSgwLF8pLFwiemF4aXNcIikpfWVsc2V7Zm9yKHZhciB3PXhbMF0saz1mKHkpLEE9ZihiKSxUPW5ldyBBcnJheShrLmxlbmd0aCpBLmxlbmd0aCksTT0wLFM9MDtTPGsubGVuZ3RoO1MrKylmb3IodmFyIEU9MDtFPEEubGVuZ3RoO0UrKylUW00rK109W2tbU10sdyxBW0VdXTt1LnN0YXJ0aW5nUG9zaXRpb25zPVR9dS5jb2xvcm1hcD1vKGUpLHUudHViZVNpemU9ZS5zaXplcmVmLHUubWF4TGVuZ3RoPWUubWF4ZGlzcGxheWVkO3ZhciBDPWQoZS5feGJuZHMsXCJ4YXhpc1wiKSxMPWQoZS5feWJuZHMsXCJ5YXhpc1wiKSx6PWQoZS5femJuZHMsXCJ6YXhpc1wiKSxPPXAoeSksST1wKHgpLEQ9cChiKSxQPVtbQ1swXS1PWzBdLExbMF0tSVswXSx6WzBdLURbMF1dLFtDWzFdK09bMV0sTFsxXStJWzFdLHpbMV0rRFsxXV1dLFI9bih1LFApO1IudmVydGV4SW50ZW5zaXR5Qm91bmRzPVtlLmNtaW4vZS5fbm9ybU1heCxlLmNtYXgvZS5fbm9ybU1heF07dmFyIEY9ZS5saWdodHBvc2l0aW9uO3JldHVybiBSLmxpZ2h0UG9zaXRpb249W0YueCxGLnksRi56XSxSLmFtYmllbnQ9ZS5saWdodGluZy5hbWJpZW50LFIuZGlmZnVzZT1lLmxpZ2h0aW5nLmRpZmZ1c2UsUi5zcGVjdWxhcj1lLmxpZ2h0aW5nLnNwZWN1bGFyLFIucm91Z2huZXNzPWUubGlnaHRpbmcucm91Z2huZXNzLFIuZnJlc25lbD1lLmxpZ2h0aW5nLmZyZXNuZWwsUi5vcGFjaXR5PWUub3BhY2l0eSxlLl9wYWQ9Ui50dWJlU2NhbGUqZS5zaXplcmVmKjIsUn11LmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zY2VuZS5mdWxsU2NlbmVMYXlvdXQscj10aGlzLnNjZW5lLmRhdGFTY2FsZTtmdW5jdGlvbiBuKHQsbil7dmFyIGk9ZVtuXSxhPXJbbFtuXV07cmV0dXJuIGkubDJjKHQpL2F9aWYodC5vYmplY3Q9PT10aGlzLm1lc2gpe3ZhciBpPXQuZGF0YS5wb3NpdGlvbixhPXQuZGF0YS52ZWxvY2l0eTtyZXR1cm4gdC50cmFjZUNvb3JkaW5hdGU9W24oaVswXSxcInhheGlzXCIpLG4oaVsxXSxcInlheGlzXCIpLG4oaVsyXSxcInpheGlzXCIpLG4oYVswXSxcInhheGlzXCIpLG4oYVsxXSxcInlheGlzXCIpLG4oYVsyXSxcInpheGlzXCIpLHQuZGF0YS5pbnRlbnNpdHkqdGhpcy5kYXRhLl9ub3JtTWF4LHQuZGF0YS5kaXZlcmdlbmNlXSx0LnRleHRMYWJlbD10aGlzLmRhdGEuaG92ZXJ0ZXh0fHx0aGlzLmRhdGEudGV4dCwhMH19LHUudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuZGF0YT10O3ZhciBlPWQodGhpcy5zY2VuZSx0KTt0aGlzLm1lc2gudXBkYXRlKGUpfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5tZXNoKSx0aGlzLm1lc2guZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxuPWQodCxlKSxhPWkocixuKSxvPW5ldyBjKHQsZS51aWQpO3JldHVybiBvLm1lc2g9YSxvLmRhdGE9ZSxhLl90cmFjZT1vLHQuZ2xwbG90LmFkZChhKSxvfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvclwiOjY5OCxcIi4uLy4uL3Bsb3RzL2dsM2QvemlwM1wiOjgwMCxcImdsLXN0cmVhbXR1YmUzZFwiOjMxMH1dLDExMzc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiKSxhPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgbD1zKFwidVwiKSxjPXMoXCJ2XCIpLHU9cyhcIndcIiksaD1zKFwieFwiKSxmPXMoXCJ5XCIpLHA9cyhcInpcIik7bCYmbC5sZW5ndGgmJmMmJmMubGVuZ3RoJiZ1JiZ1Lmxlbmd0aCYmaCYmaC5sZW5ndGgmJmYmJmYubGVuZ3RoJiZwJiZwLmxlbmd0aD8ocyhcInN0YXJ0cy54XCIpLHMoXCJzdGFydHMueVwiKSxzKFwic3RhcnRzLnpcIikscyhcIm1heGRpc3BsYXllZFwiKSxzKFwic2l6ZXJlZlwiKSxzKFwibGlnaHRpbmcuYW1iaWVudFwiKSxzKFwibGlnaHRpbmcuZGlmZnVzZVwiKSxzKFwibGlnaHRpbmcuc3BlY3VsYXJcIikscyhcImxpZ2h0aW5nLnJvdWdobmVzc1wiKSxzKFwibGlnaHRpbmcuZnJlc25lbFwiKSxzKFwibGlnaHRwb3NpdGlvbi54XCIpLHMoXCJsaWdodHBvc2l0aW9uLnlcIikscyhcImxpZ2h0cG9zaXRpb24uelwiKSxpKHQsZSxvLHMse3ByZWZpeDpcIlwiLGNMZXR0ZXI6XCJjXCJ9KSxzKFwidGV4dFwiKSxzKFwiaG92ZXJ0ZXh0XCIpLHMoXCJob3ZlcnRlbXBsYXRlXCIpLGUuX2xlbmd0aD1udWxsKTplLnZpc2libGU9ITF9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIjo1ODgsXCIuLi8uLi9saWJcIjo3MDEsXCIuL2F0dHJpYnV0ZXNcIjoxMTM0fV0sMTEzODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17bW9kdWxlVHlwZTpcInRyYWNlXCIsbmFtZTpcInN0cmVhbXR1YmVcIixiYXNlUGxvdE1vZHVsZTp0KFwiLi4vLi4vcGxvdHMvZ2wzZFwiKSxjYXRlZ29yaWVzOltcImdsM2RcIl0sYXR0cmlidXRlczp0KFwiLi9hdHRyaWJ1dGVzXCIpLHN1cHBseURlZmF1bHRzOnQoXCIuL2RlZmF1bHRzXCIpLGNvbG9yYmFyOnttaW46XCJjbWluXCIsbWF4OlwiY21heFwifSxjYWxjOnQoXCIuL2NhbGNcIikscGxvdDp0KFwiLi9jb252ZXJ0XCIpLGV2ZW50RGF0YTpmdW5jdGlvbih0LGUpe3JldHVybiB0LnR1YmV4PXQueCx0LnR1YmV5PXQueSx0LnR1YmV6PXQueix0LnR1YmV1PWUudHJhY2VDb29yZGluYXRlWzNdLHQudHViZXY9ZS50cmFjZUNvb3JkaW5hdGVbNF0sdC50dWJldz1lLnRyYWNlQ29vcmRpbmF0ZVs1XSx0Lm5vcm09ZS50cmFjZUNvb3JkaW5hdGVbNl0sdC5kaXZlcmdlbmNlPWUudHJhY2VDb29yZGluYXRlWzddLGRlbGV0ZSB0LngsZGVsZXRlIHQueSxkZWxldGUgdC56LHR9LG1ldGE6e319fSx7XCIuLi8uLi9wbG90cy9nbDNkXCI6Nzg5LFwiLi9hdHRyaWJ1dGVzXCI6MTEzNCxcIi4vY2FsY1wiOjExMzUsXCIuL2NvbnZlcnRcIjoxMTM2LFwiLi9kZWZhdWx0c1wiOjExMzd9XSwxMTM5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vcGxvdHMvZG9tYWluXCIpLmF0dHJpYnV0ZXMsbz10KFwiLi4vcGllL2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17bGFiZWxzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxwYXJlbnRzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx2YWx1ZXM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGJyYW5jaHZhbHVlczp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wicmVtYWluZGVyXCIsXCJ0b3RhbFwiXSxkZmx0OlwicmVtYWluZGVyXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGxldmVsOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJwbG90XCJ9LG1heGRlcHRoOnt2YWxUeXBlOlwiaW50ZWdlclwiLGVkaXRUeXBlOlwicGxvdFwiLGRmbHQ6LTF9LG1hcmtlcjp7Y29sb3JzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxsaW5lOntjb2xvcjpzKHt9LG8ubWFya2VyLmxpbmUuY29sb3Ise2RmbHQ6bnVsbH0pLHdpZHRoOnMoe30sby5tYXJrZXIubGluZS53aWR0aCx7ZGZsdDoxfSksZWRpdFR5cGU6XCJjYWxjXCJ9LGVkaXRUeXBlOlwiY2FsY1wifSxsZWFmOntvcGFjaXR5Ont2YWxUeXBlOlwibnVtYmVyXCIsZWRpdFR5cGU6XCJzdHlsZVwiLG1pbjowLG1heDoxLGRmbHQ6Ljd9LGVkaXRUeXBlOlwicGxvdFwifSx0ZXh0Om8udGV4dCx0ZXh0aW5mbzpzKHt9LG8udGV4dGluZm8se2VkaXRUeXBlOlwicGxvdFwiLGZsYWdzOltcImxhYmVsXCIsXCJ0ZXh0XCIsXCJ2YWx1ZVwiXX0pLHRleHRmb250Om8udGV4dGZvbnQsaG92ZXJ0ZXh0Om8uaG92ZXJ0ZXh0LGhvdmVyaW5mbzpzKHt9LG4uaG92ZXJpbmZvLHtmbGFnczpbXCJsYWJlbFwiLFwidGV4dFwiLFwidmFsdWVcIixcIm5hbWVcIl19KSxob3ZlcnRlbXBsYXRlOmkoKSxpbnNpZGV0ZXh0Zm9udDpvLmluc2lkZXRleHRmb250LG91dHNpZGV0ZXh0Zm9udDpvLm91dHNpZGV0ZXh0Zm9udCxkb21haW46YSh7bmFtZTpcInN1bmJ1cnN0XCIsdHJhY2U6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9KX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDYsXCIuLi8uLi9wbG90cy9kb21haW5cIjo3NzQsXCIuLi9waWUvYXR0cmlidXRlc1wiOjEwMjZ9XSwxMTQwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCIpLmdldE1vZHVsZUNhbGNEYXRhLGE9ci5uYW1lPVwic3VuYnVyc3RcIjtyLnBsb3Q9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHM9bi5nZXRNb2R1bGUoYSksbD1pKHQuY2FsY2RhdGEscylbMF07cy5wbG90KHQsbCxyLG8pfSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4uX2hhcyYmbi5faGFzKGEpLG89ZS5faGFzJiZlLl9oYXMoYSk7aSYmIW8mJm4uX3N1bmJ1cnN0bGF5ZXIuc2VsZWN0QWxsKFwiZy50cmFjZVwiKS5yZW1vdmUoKX19LHtcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCI6Nzg0LFwiLi4vLi4vcmVnaXN0cnlcIjo4Mjl9XSwxMTQxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzLWhpZXJhcmNoeVwiKSxpPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxhPXQoXCIuLi8uLi9saWJcIiksbz10KFwiLi4vcGllL2NhbGNcIikubWFrZVB1bGxDb2xvckZuLHM9dChcIi4uL3BpZS9jYWxjXCIpLmdlbmVyYXRlRXh0ZW5kZWRDb2xvcnMsbD1hLmlzQXJyYXlPclR5cGVkQXJyYXksYz17fTtyLmNhbGM9ZnVuY3Rpb24odCxlKXt2YXIgcixzLGMsdSxoLGYscD10Ll9mdWxsTGF5b3V0LGQ9ZS5pZHMsZz1sKGQpLHY9ZS5sYWJlbHMsbT1lLnBhcmVudHMseT1lLnZhbHVlcyx4PWwoeSksYj1bXSxfPXt9LHc9e30saz1mdW5jdGlvbih0KXtyZXR1cm4heHx8aSh5W3RdKSYmeVt0XT49MH07Zz8ocj1NYXRoLm1pbihkLmxlbmd0aCxtLmxlbmd0aCkscz1mdW5jdGlvbih0KXtyZXR1cm4gZFt0XSYmayh0KX0sYz1mdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nKGRbdF0pfSk6KHI9TWF0aC5taW4odi5sZW5ndGgsbS5sZW5ndGgpLHM9ZnVuY3Rpb24odCl7cmV0dXJuIHZbdF0mJmsodCl9LGM9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh2W3RdKX0pLHgmJihyPU1hdGgubWluKHIseS5sZW5ndGgpKTtmb3IodmFyIEE9MDtBPHI7QSsrKWlmKHMoQSkpe3ZhciBUPWMoQSksTT1tW0FdP1N0cmluZyhtW0FdKTpcIlwiLFM9e2k6QSxpZDpULHBpZDpNLGxhYmVsOnZbQV0/U3RyaW5nKHZbQV0pOlwiXCJ9O3gmJihTLnY9K3lbQV0pLGIucHVzaChTKSxoPVQsX1t1PU1dP19bdV0ucHVzaChoKTpfW3VdPVtoXSx3W2hdPTF9aWYoX1tcIlwiXSl7aWYoX1tcIlwiXS5sZW5ndGg+MSl7Zm9yKHZhciBFPWEucmFuZHN0cigpLEM9MDtDPGIubGVuZ3RoO0MrKylcIlwiPT09YltDXS5waWQmJihiW0NdLnBpZD1FKTtiLnVuc2hpZnQoe2hhc011bHRpcGxlUm9vdHM6ITAsaWQ6RSxwaWQ6XCJcIn0pfX1lbHNle3ZhciBMLHo9W107Zm9yKEwgaW4gXyl3W0xdfHx6LnB1c2goTCk7aWYoMSE9PXoubGVuZ3RoKXJldHVybiBhLndhcm4oXCJNdWx0aXBsZSBpbXBsaWVkIHJvb3RzLCBjYW5ub3QgYnVpbGQgc3VuYnVyc3QgaGllcmFyY2h5LlwiKTtMPXpbMF0sYi51bnNoaWZ0KHtpZDpMLHBpZDpcIlwiLGxhYmVsOkx9KX10cnl7Zj1uLnN0cmF0aWZ5KCkuaWQoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KS5wYXJlbnRJZChmdW5jdGlvbih0KXtyZXR1cm4gdC5waWR9KShiKX1jYXRjaCh0KXtyZXR1cm4gYS53YXJuKFwiRmFpbGVkIHRvIGJ1aWxkIHN1bmJ1cnN0IGhpZXJhcmNoeS4gRXJyb3I6IFwiK3QubWVzc2FnZSl9dmFyIE89bi5oaWVyYXJjaHkoZiksST0hMTtpZih4KXN3aXRjaChlLmJyYW5jaHZhbHVlcyl7Y2FzZVwicmVtYWluZGVyXCI6Ty5zdW0oZnVuY3Rpb24odCl7cmV0dXJuIHQuZGF0YS52fSk7YnJlYWs7Y2FzZVwidG90YWxcIjpPLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRhLmRhdGEudjtpZih0LmNoaWxkcmVuJiZlPHQuY2hpbGRyZW4ucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZS5kYXRhLmRhdGEudn0sMCkpcmV0dXJuIEk9ITAsYS53YXJuKFtcIlRvdGFsIHZhbHVlIGZvciBub2RlXCIsdC5kYXRhLmRhdGEuaWQsXCJpcyBzbWFsbGVyIHRoYW4gdGhlIHN1bSBvZiBpdHMgY2hpbGRyZW4uXCJdLmpvaW4oXCIgXCIpKTt0LnZhbHVlPWV9KX1lbHNlIE8uY291bnQoKTtpZighSSl7Ty5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUudmFsdWUtdC52YWx1ZX0pO3ZhciBEPWUubWFya2VyLmNvbG9yc3x8W10sUD1vKHAuX3N1bmJ1cnN0Y29sb3JtYXApO3JldHVybiBPLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRhLmRhdGEscj1lLmlkO2UuY29sb3I9UChEW2UuaV0scil9KSxiWzBdLmhpZXJhcmNoeT1PLGJ9fSxyLmNyb3NzVHJhY2VDYWxjPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj10LmNhbGNkYXRhLG49ZS5zdW5idXJzdGNvbG9yd2F5LGk9ZS5fc3VuYnVyc3Rjb2xvcm1hcDtlLmV4dGVuZHN1bmJ1cnN0Y29sb3JzJiYobj1zKG4sYykpO3ZhciBhPTA7ZnVuY3Rpb24gbyh0KXt2YXIgZT10LmRhdGEuZGF0YSxyPWUuaWQ7ITE9PT1lLmNvbG9yJiYoaVtyXT9lLmNvbG9yPWlbcl06dC5wYXJlbnQ/dC5wYXJlbnQucGFyZW50P2UuY29sb3I9dC5wYXJlbnQuZGF0YS5kYXRhLmNvbG9yOihpW3JdPWUuY29sb3I9blthJW4ubGVuZ3RoXSxhKyspOmUuY29sb3I9XCJyZ2JhKDAsMCwwLDApXCIpfWZvcih2YXIgbD0wO2w8ci5sZW5ndGg7bCsrKXt2YXIgdT1yW2xdWzBdO1wic3VuYnVyc3RcIj09PXUudHJhY2UudHlwZSYmdS5oaWVyYXJjaHkmJnUuaGllcmFyY2h5LmVhY2gobyl9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vcGllL2NhbGNcIjoxMDI4LFwiZDMtaGllcmFyY2h5XCI6MTQ4LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSwxMTQyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtDTElDS19UUkFOU0lUSU9OX1RJTUU6NzUwLENMSUNLX1RSQU5TSVRJT05fRUFTSU5HOlwibGluZWFyXCJ9fSx7fV0sMTE0MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2RvbWFpblwiKS5kZWZhdWx0cyxvPW4uY29lcmNlRm9udDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXZhciBjPWwoXCJsYWJlbHNcIiksdT1sKFwicGFyZW50c1wiKTtpZihjJiZjLmxlbmd0aCYmdSYmdS5sZW5ndGgpe3ZhciBoPWwoXCJ2YWx1ZXNcIik7aCYmaC5sZW5ndGgmJmwoXCJicmFuY2h2YWx1ZXNcIiksbChcImxldmVsXCIpLGwoXCJtYXhkZXB0aFwiKSxsKFwibWFya2VyLmxpbmUud2lkdGhcIikmJmwoXCJtYXJrZXIubGluZS5jb2xvclwiLHMucGFwZXJfYmdjb2xvciksbChcIm1hcmtlci5jb2xvcnNcIiksbChcImxlYWYub3BhY2l0eVwiKTt2YXIgZj1sKFwidGV4dFwiKTtsKFwidGV4dGluZm9cIixBcnJheS5pc0FycmF5KGYpP1widGV4dCtsYWJlbFwiOlwibGFiZWxcIiksbChcImhvdmVydGV4dFwiKSxsKFwiaG92ZXJ0ZW1wbGF0ZVwiKTt2YXIgcD1vKGwsXCJ0ZXh0Zm9udFwiLHMuZm9udCksZD1uLmV4dGVuZEZsYXQoe30scCk7ISh0LnRleHRmb250JiZ0LnRleHRmb250LmNvbG9yKSYmZGVsZXRlIGQuY29sb3IsbyhsLFwiaW5zaWRldGV4dGZvbnRcIixkKSxvKGwsXCJvdXRzaWRldGV4dGZvbnRcIixwKSxhKGUscyxsKSxlLl9sZW5ndGg9bnVsbH1lbHNlIGUudmlzaWJsZT0hMX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2RvbWFpblwiOjc3NCxcIi4vYXR0cmlidXRlc1wiOjExMzl9XSwxMTQ0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwidHJhY2VcIixuYW1lOlwic3VuYnVyc3RcIixiYXNlUGxvdE1vZHVsZTp0KFwiLi9iYXNlX3Bsb3RcIiksY2F0ZWdvcmllczpbXSxhbmltYXRhYmxlOiEwLGF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLHN1cHBseURlZmF1bHRzOnQoXCIuL2RlZmF1bHRzXCIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoXCIuL2xheW91dF9kZWZhdWx0c1wiKSxjYWxjOnQoXCIuL2NhbGNcIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KFwiLi9jYWxjXCIpLmNyb3NzVHJhY2VDYWxjLHBsb3Q6dChcIi4vcGxvdFwiKSxzdHlsZTp0KFwiLi9zdHlsZVwiKS5zdHlsZSxtZXRhOnt9fX0se1wiLi9hdHRyaWJ1dGVzXCI6MTEzOSxcIi4vYmFzZV9wbG90XCI6MTE0MCxcIi4vY2FsY1wiOjExNDEsXCIuL2RlZmF1bHRzXCI6MTE0MyxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjoxMTQ1LFwiLi9sYXlvdXRfZGVmYXVsdHNcIjoxMTQ2LFwiLi9wbG90XCI6MTE0NyxcIi4vc3R5bGVcIjoxMTQ4fV0sMTE0NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17c3VuYnVyc3Rjb2xvcndheTp7dmFsVHlwZTpcImNvbG9ybGlzdFwiLGVkaXRUeXBlOlwiY2FsY1wifSxleHRlbmRzdW5idXJzdGNvbG9yczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifX19LHt9XSwxMTQ2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1yKFwic3VuYnVyc3Rjb2xvcndheVwiLGUuY29sb3J3YXkpLHIoXCJleHRlbmRzdW5idXJzdGNvbG9yc1wiKX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjoxMTQ1fV0sMTE0NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJkMy1oaWVyYXJjaHlcIiksYT10KFwiLi4vLi4vcmVnaXN0cnlcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGw9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxjPXQoXCIuLi8uLi9saWJcIiksdT10KFwiLi4vLi4vbGliL2V2ZW50c1wiKSxoPXQoXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIiksZj10KFwiLi4vLi4vbGliL3NldGN1cnNvclwiKSxwPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnNcIikuYXBwZW5kQXJyYXlQb2ludFZhbHVlLGQ9dChcIi4uL3BpZS9wbG90XCIpLnRyYW5zZm9ybUluc2lkZVRleHQsZz10KFwiLi4vcGllL2hlbHBlcnNcIikuZm9ybWF0UGllVmFsdWUsdj10KFwiLi9zdHlsZVwiKS5zdHlsZU9uZSxtPXQoXCIuL2NvbnN0YW50c1wiKTtmdW5jdGlvbiB5KHQsZSxyLGEpe3ZhciBvPXQuX2Z1bGxMYXlvdXQsdT1hJiZhLmR1cmF0aW9uPjAsZj1uLnNlbGVjdChyKS5zZWxlY3RBbGwoXCJnLnNsaWNlXCIpLHA9ZVswXSxtPXAudHJhY2UseT14KHAuaGllcmFyY2h5LG0ubGV2ZWwpLHc9bS5tYXhkZXB0aD49MD9tLm1heGRlcHRoOjEvMCxNPW8uX3NpemUsUz1tLmRvbWFpbixFPU0udyooUy54WzFdLVMueFswXSksQz1NLmgqKFMueVsxXS1TLnlbMF0pLEw9LjUqTWF0aC5taW4oRSxDKSx6PXAuY3g9TS5sK00udyooUy54WzFdK1MueFswXSkvMixPPXAuY3k9TS50K00uaCooMS1TLnlbMF0pLUMvMjtpZigheSlyZXR1cm4gZi5yZW1vdmUoKTt2YXIgST1udWxsLEQ9e307dSYmZi5lYWNoKGZ1bmN0aW9uKHQpe0Rbayh0KV09e3JweDA6dC5ycHgwLHJweDE6dC5ycHgxLHgwOnQueDAseDE6dC54MSx0cmFuc2Zvcm06dC50cmFuc2Zvcm19LCFJJiZfKHQpJiYoST10KX0pO3ZhciBQPWZ1bmN0aW9uKHQpe3JldHVybiBpLnBhcnRpdGlvbigpLnNpemUoWzIqTWF0aC5QSSx0LmhlaWdodCsxXSkodCl9KHkpLmRlc2NlbmRhbnRzKCksUj15LmhlaWdodCsxLEY9MCxCPXc7cC5oYXNNdWx0aXBsZVJvb3RzJiZiKHkpJiYoUD1QLnNsaWNlKDEpLFItPTEsRj0xLEIrPTEpLFA9UC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQueTE8PUJ9KTt2YXIgTj1NYXRoLm1pbihSLHcpLGo9ZnVuY3Rpb24odCl7cmV0dXJuKHQtRikvTipMfSxWPWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QqTWF0aC5jb3MoZSksLXQqTWF0aC5zaW4oZSldfSxVPWZ1bmN0aW9uKHQpe3JldHVybiBjLnBhdGhBbm51bHVzKHQucnB4MCx0LnJweDEsdC54MCx0LngxLHosTyl9LHE9ZnVuY3Rpb24odCl7cmV0dXJuIHordC5weG1pZFswXSp0LnRyYW5zZm9ybS5yQ2VudGVyKyh0LnRyYW5zZm9ybS54fHwwKX0sSD1mdW5jdGlvbih0KXtyZXR1cm4gTyt0LnB4bWlkWzFdKnQudHJhbnNmb3JtLnJDZW50ZXIrKHQudHJhbnNmb3JtLnl8fDApfTsoZj1mLmRhdGEoUCxmdW5jdGlvbih0KXtyZXR1cm4gayh0KX0pKS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcInNsaWNlXCIsITApLHU/Zi5leGl0KCkudHJhbnNpdGlvbigpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTt0LnNlbGVjdChcInBhdGguc3VyZmFjZVwiKS50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKFwiZFwiLGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9ayh0KSxpPURbcl0sYT1EW2soeSldO2lmKGEpe3ZhciBvPXQueDE+YS54MT8yKk1hdGguUEk6MDtlPXQucnB4MTxhLnJweDE/e3JweDA6MCxycHgxOjB9Ont4MDpvLHgxOm99fWVsc2V7dmFyIHMsbD1rKHQucGFyZW50KTtmLmVhY2goZnVuY3Rpb24odCl7aWYoayh0KT09PWwpcmV0dXJuIHM9dH0pO3ZhciBjLHU9cy5jaGlsZHJlbjt1LmZvckVhY2goZnVuY3Rpb24odCxlKXtpZihrKHQpPT09cilyZXR1cm4gYz1lfSk7dmFyIGg9dS5sZW5ndGgscD1uLmludGVycG9sYXRlKHMueDAscy54MSk7ZT17cnB4MDpMLHJweDE6TCx4MDpwKGMvaCkseDE6cCgoYysxKS9oKX19cmV0dXJuIG4uaW50ZXJwb2xhdGUoaSxlKX0odCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBVKGUodCkpfX0pLHQuc2VsZWN0KFwiZy5zbGljZXRleHRcIikuYXR0cihcIm9wYWNpdHlcIiwwKX0pLnJlbW92ZSgpOmYuZXhpdCgpLnJlbW92ZSgpLGYub3JkZXIoKTt2YXIgRz1udWxsO2lmKHUmJkkpe3ZhciBZPWsoSSk7Zi5lYWNoKGZ1bmN0aW9uKHQpe251bGw9PT1HJiZrKHQpPT09WSYmKEc9dC54MSl9KX12YXIgVz1mO2Z1bmN0aW9uIFgodCl7dmFyIGU9dC5wYXJlbnQscj1EW2soZSldLGk9e307aWYocil7dmFyIGE9ZS5jaGlsZHJlbixvPWEuaW5kZXhPZih0KSxzPWEubGVuZ3RoLGw9bi5pbnRlcnBvbGF0ZShyLngwLHIueDEpO2kueDA9bChvL3MpLGkueDE9bChvL3MpfWVsc2UgaS54MD1pLngxPTA7cmV0dXJuIGl9dSYmKFc9Vy50cmFuc2l0aW9uKCkuZWFjaChcImVuZFwiLGZ1bmN0aW9uKCl7QShuLnNlbGVjdCh0aGlzKSx0LHtpc1RyYW5zaXRpb25pbmc6ITF9KX0pKSxXLmVhY2goZnVuY3Rpb24ocil7dmFyIGk9bi5zZWxlY3QodGhpcyksYT1jLmVuc3VyZVNpbmdsZShpLFwicGF0aFwiLFwic3VyZmFjZVwiLGZ1bmN0aW9uKHQpe3Quc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpfSk7ci5ycHgwPWooci55MCksci5ycHgxPWooci55MSksci54bWlkPShyLngwK3IueDEpLzIsci5weG1pZD1WKHIucnB4MSxyLnhtaWQpLHIubWlkYW5nbGU9LShyLnhtaWQtTWF0aC5QSS8yKSxyLmhhbGZhbmdsZT0uNSpNYXRoLm1pbihjLmFuZ2xlRGVsdGEoci54MCxyLngxKXx8TWF0aC5QSSxNYXRoLlBJKSxyLnJpbmc9MS1yLnJweDAvci5ycHgxLHIuckluc2NyaWJlZD1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXQucnB4MCYmdC54bWlkPT09TWF0aC5QST8xOk1hdGgubWF4KDAsTWF0aC5taW4oMS8oMSsxL01hdGguc2luKHQuaGFsZmFuZ2xlKSksdC5yaW5nLzIpKX0ociksdT9hLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oXCJkXCIsZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7dmFyIGUscj1EW2sodCldLGk9e3gwOnQueDAseDE6dC54MSxycHgwOnQucnB4MCxycHgxOnQucnB4MX07aWYocillPXI7ZWxzZSBpZihJKWlmKHQucGFyZW50KWlmKEcpe3ZhciBhPXQueDE+Rz8yKk1hdGguUEk6MDtlPXt4MDphLHgxOmF9fWVsc2UgZT17cnB4MDpMLHJweDE6TH0sYy5leHRlbmRGbGF0KGUsWCh0KSk7ZWxzZSBlPXtycHgwOjAscnB4MTowfTtlbHNlIGU9e3gwOjAseDE6MH07cmV0dXJuIG4uaW50ZXJwb2xhdGUoZSxpKX0odCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBVKGUodCkpfX0pOmEuYXR0cihcImRcIixVKSxpLmNhbGwoVCx0LGUpLmNhbGwoQSx0LHtpc1RyYW5zaXRpb25pbmc6dC5fdHJhbnNpdGlvbmluZ30pLGEuY2FsbCh2LHIsbSk7dmFyIGY9Yy5lbnN1cmVTaW5nbGUoaSxcImdcIixcInNsaWNldGV4dFwiKSx5PWMuZW5zdXJlU2luZ2xlKGYsXCJ0ZXh0XCIsXCJcIixmdW5jdGlvbih0KXt0LmF0dHIoXCJkYXRhLW5vdGV4XCIsMSl9KTt5LnRleHQoZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUudGV4dGluZm87aWYoIW58fFwibm9uZVwiPT09bilyZXR1cm5cIlwiO3ZhciBpPXQuZGF0YS5kYXRhLGE9ci5zZXBhcmF0b3JzLG89bi5zcGxpdChcIitcIikscz1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PW8uaW5kZXhPZih0KX0sbD1bXTtzKFwibGFiZWxcIikmJmkubGFiZWwmJmwucHVzaChpLmxhYmVsKTtpLmhhc093blByb3BlcnR5KFwidlwiKSYmcyhcInZhbHVlXCIpJiZsLnB1c2goZyhpLnYsYSkpO2lmKHMoXCJ0ZXh0XCIpKXt2YXIgdT1jLmNhc3RPcHRpb24oZSxpLmksXCJ0ZXh0XCIpO3UmJmwucHVzaCh1KX1yZXR1cm4gbC5qb2luKFwiPGJyPlwiKX0ocixtLG8pKS5jbGFzc2VkKFwic2xpY2V0ZXh0XCIsITApLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLFwibWlkZGxlXCIpLmNhbGwobC5mb250LGIocik/ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuZGF0YS5kYXRhLmksaT1jLmNhc3RPcHRpb24odCxuLFwib3V0c2lkZXRleHRmb250LmNvbG9yXCIpfHxjLmNhc3RPcHRpb24odCxuLFwidGV4dGZvbnQuY29sb3JcIil8fHIuY29sb3IsYT1jLmNhc3RPcHRpb24odCxuLFwib3V0c2lkZXRleHRmb250LmZhbWlseVwiKXx8Yy5jYXN0T3B0aW9uKHQsbixcInRleHRmb250LmZhbWlseVwiKXx8ci5mYW1pbHksbz1jLmNhc3RPcHRpb24odCxuLFwib3V0c2lkZXRleHRmb250LnNpemVcIil8fGMuY2FzdE9wdGlvbih0LG4sXCJ0ZXh0Zm9udC5zaXplXCIpfHxyLnNpemU7cmV0dXJue2NvbG9yOmksZmFtaWx5OmEsc2l6ZTpvfX0obSxyLG8uZm9udCk6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuZGF0YS5kYXRhLGk9bi5pLGE9Yy5jYXN0T3B0aW9uKHQsaSxcImluc2lkZXRleHRmb250LmNvbG9yXCIpOyFhJiZ0Ll9pbnB1dC50ZXh0Zm9udCYmKGE9Yy5jYXN0T3B0aW9uKHQuX2lucHV0LGksXCJ0ZXh0Zm9udC5jb2xvclwiKSk7dmFyIG89Yy5jYXN0T3B0aW9uKHQsaSxcImluc2lkZXRleHRmb250LmZhbWlseVwiKXx8Yy5jYXN0T3B0aW9uKHQsaSxcInRleHRmb250LmZhbWlseVwiKXx8ci5mYW1pbHksbD1jLmNhc3RPcHRpb24odCxpLFwiaW5zaWRldGV4dGZvbnQuc2l6ZVwiKXx8Yy5jYXN0T3B0aW9uKHQsaSxcInRleHRmb250LnNpemVcIil8fHIuc2l6ZTtyZXR1cm57Y29sb3I6YXx8cy5jb250cmFzdChuLmNvbG9yKSxmYW1pbHk6byxzaXplOmx9fShtLHIsby5mb250KSkuY2FsbChoLmNvbnZlcnRUb1RzcGFucyx0KTt2YXIgeD1sLmJCb3goeS5ub2RlKCkpO3IudHJhbnNmb3JtPWQoeCxyLHApLHIudHJhbnNsYXRlWD1xKHIpLHIudHJhbnNsYXRlWT1IKHIpO3ZhciBfPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrdC50cmFuc2xhdGVYK1wiLFwiK3QudHJhbnNsYXRlWStcIilcIisodC50cmFuc2Zvcm0uc2NhbGU8MT9cInNjYWxlKFwiK3QudHJhbnNmb3JtLnNjYWxlK1wiKVwiOlwiXCIpKyh0LnRyYW5zZm9ybS5yb3RhdGU/XCJyb3RhdGUoXCIrdC50cmFuc2Zvcm0ucm90YXRlK1wiKVwiOlwiXCIpK1widHJhbnNsYXRlKFwiKy0oZS5sZWZ0K2UucmlnaHQpLzIrXCIsXCIrLShlLnRvcCtlLmJvdHRvbSkvMitcIilcIn07dT95LnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZSxyPURbayh0KV0saT10LnRyYW5zZm9ybTtpZihyKWU9cjtlbHNlIGlmKGU9e3JweDE6dC5ycHgxLHRyYW5zZm9ybTp7c2NhbGU6MCxyb3RhdGU6aS5yb3RhdGUsckNlbnRlcjppLnJDZW50ZXIseDppLngseTppLnl9fSxJKWlmKHQucGFyZW50KWlmKEcpe3ZhciBhPXQueDE+Rz8yKk1hdGguUEk6MDtlLngwPWUueDE9YX1lbHNlIGMuZXh0ZW5kRmxhdChlLFgodCkpO2Vsc2UgZS54MD1lLngxPTA7ZWxzZSBlLngwPWUueDE9MDt2YXIgbz1uLmludGVycG9sYXRlKGUucnB4MSx0LnJweDEpLHM9bi5pbnRlcnBvbGF0ZShlLngwLHQueDApLGw9bi5pbnRlcnBvbGF0ZShlLngxLHQueDEpLHU9bi5pbnRlcnBvbGF0ZShlLnRyYW5zZm9ybS5zY2FsZSxpLnNjYWxlKSxoPW4uaW50ZXJwb2xhdGUoZS50cmFuc2Zvcm0ucm90YXRlLGkucm90YXRlKSxmPTA9PT1pLnJDZW50ZXI/MzowPT09ZS50cmFuc2Zvcm0uckNlbnRlcj8xLzM6MSxwPW4uaW50ZXJwb2xhdGUoZS50cmFuc2Zvcm0uckNlbnRlcixpLnJDZW50ZXIpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1vKHQpLHI9cyh0KSxuPWwodCksYT1mdW5jdGlvbih0KXtyZXR1cm4gcChNYXRoLnBvdyh0LGYpKX0odCksYz17cHhtaWQ6VihlLChyK24pLzIpLHRyYW5zZm9ybTp7ckNlbnRlcjphLHg6aS54LHk6aS55fX0sZD17cnB4MTpvKHQpLHRyYW5zbGF0ZVg6cShjKSx0cmFuc2xhdGVZOkgoYyksdHJhbnNmb3JtOntzY2FsZTp1KHQpLHJvdGF0ZTpoKHQpLHJDZW50ZXI6YX19O3JldHVybiBkfX0odCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBfKGUodCkseCl9fSk6eS5hdHRyKFwidHJhbnNmb3JtXCIsXyhyLHgpKX0pfWZ1bmN0aW9uIHgodCxlKXt2YXIgcjtyZXR1cm4gZSYmdC5lYWNoQWZ0ZXIoZnVuY3Rpb24odCl7aWYoayh0KT09PWUpcmV0dXJuIHI9dC5jb3B5KCl9KSxyfHx0fWZ1bmN0aW9uIGIodCl7cmV0dXJuXCJcIj09PXQuZGF0YS5kYXRhLnBpZH1mdW5jdGlvbiBfKHQpe3JldHVybiF0LnBhcmVudH1mdW5jdGlvbiB3KHQpe3JldHVybiF0LmNoaWxkcmVufWZ1bmN0aW9uIGsodCl7cmV0dXJuIHQuZGF0YS5kYXRhLmlkfWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBuPXQuZGF0dW0oKSxpPShyfHx7fSkuaXNUcmFuc2l0aW9uaW5nO2YodCxpfHx3KG4pfHxiKG4pP251bGw6XCJwb2ludGVyXCIpfWZ1bmN0aW9uIFQodCxlLHIpe3ZhciBpPXJbMF0scz1pLnRyYWNlO1wiX2hhc0hvdmVyTGFiZWxcImluIHN8fChzLl9oYXNIb3ZlckxhYmVsPSExKSxcIl9oYXNIb3ZlckV2ZW50XCJpbiBzfHwocy5faGFzSG92ZXJFdmVudD0hMSksdC5vbihcIm1vdXNlb3ZlclwiLGZ1bmN0aW9uKHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQ7aWYoIWUuX2RyYWdnaW5nJiYhMSE9PXIuaG92ZXJtb2RlKXt2YXIgYT1lLl9mdWxsRGF0YVtzLmluZGV4XSxsPXQuZGF0YS5kYXRhLHU9bC5pLGg9ZnVuY3Rpb24odCl7cmV0dXJuIGMuY2FzdE9wdGlvbihhLHUsdCl9LGY9aChcImhvdmVydGVtcGxhdGVcIikscD1vLmNhc3RIb3ZlcmluZm8oYSxyLHUpLGQ9ci5zZXBhcmF0b3JzO2lmKGZ8fHAmJlwibm9uZVwiIT09cCYmXCJza2lwXCIhPT1wKXt2YXIgdj10LnJJbnNjcmliZWQsbT1pLmN4K3QucHhtaWRbMF0qKDEtdikseT1pLmN5K3QucHhtaWRbMV0qKDEtdikseD17fSxiPVtdLF89W10sdz1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PWIuaW5kZXhPZih0KX07cCYmKGI9XCJhbGxcIj09PXA/YS5fbW9kdWxlLmF0dHJpYnV0ZXMuaG92ZXJpbmZvLmZsYWdzOnAuc3BsaXQoXCIrXCIpKSx4LmxhYmVsPWwubGFiZWwsdyhcImxhYmVsXCIpJiZ4LmxhYmVsJiZfLnB1c2goeC5sYWJlbCksbC5oYXNPd25Qcm9wZXJ0eShcInZcIikmJih4LnZhbHVlPWwudix4LnZhbHVlTGFiZWw9Zyh4LnZhbHVlLGQpLHcoXCJ2YWx1ZVwiKSYmXy5wdXNoKHgudmFsdWVMYWJlbCkpLHgudGV4dD1oKFwiaG92ZXJ0ZXh0XCIpfHxoKFwidGV4dFwiKSx3KFwidGV4dFwiKSYmeC50ZXh0JiZfLnB1c2goeC50ZXh0KSxvLmxvbmVIb3Zlcih7dHJhY2U6YSx4MDptLXYqdC5ycHgxLHgxOm0rdip0LnJweDEseTp5LGlkZWFsQWxpZ246dC5weG1pZFswXTwwP1wibGVmdFwiOlwicmlnaHRcIix0ZXh0Ol8uam9pbihcIjxicj5cIiksbmFtZTpmfHx3KFwibmFtZVwiKT9hLm5hbWU6dm9pZCAwLGNvbG9yOmgoXCJob3ZlcmxhYmVsLmJnY29sb3JcIil8fGwuY29sb3IsYm9yZGVyQ29sb3I6aChcImhvdmVybGFiZWwuYm9yZGVyY29sb3JcIiksZm9udEZhbWlseTpoKFwiaG92ZXJsYWJlbC5mb250LmZhbWlseVwiKSxmb250U2l6ZTpoKFwiaG92ZXJsYWJlbC5mb250LnNpemVcIiksZm9udENvbG9yOmgoXCJob3ZlcmxhYmVsLmZvbnQuY29sb3JcIiksbmFtZUxlbmd0aDpoKFwiaG92ZXJsYWJlbC5uYW1lbGVuZ3RoXCIpLHRleHRBbGlnbjpoKFwiaG92ZXJsYWJlbC5hbGlnblwiKSxob3ZlcnRlbXBsYXRlOmYsaG92ZXJ0ZW1wbGF0ZUxhYmVsczp4LGV2ZW50RGF0YTpbTSh0LGEpXX0se2NvbnRhaW5lcjpyLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpyLl9wYXBlci5ub2RlKCksZ2Q6ZX0pLHMuX2hhc0hvdmVyTGFiZWw9ITB9cy5faGFzSG92ZXJFdmVudD0hMCxlLmVtaXQoXCJwbG90bHlfaG92ZXJcIix7cG9pbnRzOltNKHQsYSldLGV2ZW50Om4uZXZlbnR9KX19KSx0Lm9uKFwibW91c2VvdXRcIixmdW5jdGlvbih0KXt2YXIgcj1lLl9mdWxsTGF5b3V0LGk9ZS5fZnVsbERhdGFbcy5pbmRleF0sYT1uLnNlbGVjdCh0aGlzKS5kYXR1bSgpO3MuX2hhc0hvdmVyRXZlbnQmJih0Lm9yaWdpbmFsRXZlbnQ9bi5ldmVudCxlLmVtaXQoXCJwbG90bHlfdW5ob3ZlclwiLHtwb2ludHM6W00oYSxpKV0sZXZlbnQ6bi5ldmVudH0pLHMuX2hhc0hvdmVyRXZlbnQ9ITEpLHMuX2hhc0hvdmVyTGFiZWwmJihvLmxvbmVVbmhvdmVyKHIuX2hvdmVybGF5ZXIubm9kZSgpKSxzLl9oYXNIb3ZlckxhYmVsPSExKX0pLHQub24oXCJjbGlja1wiLGZ1bmN0aW9uKHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQsbD1lLl9mdWxsRGF0YVtzLmluZGV4XTtpZighMT09PXUudHJpZ2dlckhhbmRsZXIoZSxcInBsb3RseV9zdW5idXJzdGNsaWNrXCIse3BvaW50czpbTSh0LGwpXSxldmVudDpuLmV2ZW50fSl8fHcodCl8fGIodCkpci5ob3Zlcm1vZGUmJihlLl9ob3ZlcmRhdGE9W00odCxsKV0sby5jbGljayhlLG4uZXZlbnQpKTtlbHNlIGlmKCFlLl9kcmFnZ2luZyYmIWUuX3RyYW5zaXRpb25pbmcpe2EuY2FsbChcIl9zdG9yZURpcmVjdEdVSUVkaXRcIixsLHIuX3RyYWNlUHJlR1VJW2wudWlkXSx7bGV2ZWw6bC5sZXZlbH0pO3ZhciBjPWkuaGllcmFyY2h5LGg9ayh0KSxmPV8odCk/ZnVuY3Rpb24odCxlKXt2YXIgcjtyZXR1cm4gdC5lYWNoQWZ0ZXIoZnVuY3Rpb24odCl7Zm9yKHZhciBuPXQuY2hpbGRyZW58fFtdLGk9MDtpPG4ubGVuZ3RoO2krKylpZihrKG5baV0pPT09ZSlyZXR1cm4gcj10LmNvcHkoKX0pLHJ8fHR9KGMsaCk6eChjLGgpLHA9e2RhdGE6W3tsZXZlbDprKGYpfV0sdHJhY2VzOltzLmluZGV4XX0sZD17ZnJhbWU6e3JlZHJhdzohMSxkdXJhdGlvbjptLkNMSUNLX1RSQU5TSVRJT05fVElNRX0sdHJhbnNpdGlvbjp7ZHVyYXRpb246bS5DTElDS19UUkFOU0lUSU9OX1RJTUUsZWFzaW5nOm0uQ0xJQ0tfVFJBTlNJVElPTl9FQVNJTkd9LG1vZGU6XCJpbW1lZGlhdGVcIixmcm9tY3VycmVudDohMH07by5sb25lVW5ob3ZlcihyLl9ob3ZlcmxheWVyLm5vZGUoKSksYS5jYWxsKFwiYW5pbWF0ZVwiLGUscCxkKX19KX1mdW5jdGlvbiBNKHQsZSl7dmFyIHI9dC5kYXRhLmRhdGEsbj17Y3VydmVOdW1iZXI6ZS5pbmRleCxwb2ludE51bWJlcjpyLmksZGF0YTplLl9pbnB1dCxmdWxsRGF0YTplfTtyZXR1cm4gcChuLGUsci5pKSxufWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYSxvLHM9dC5fZnVsbExheW91dC5fc3VuYnVyc3RsYXllcixsPSFyLGM9ciYmci5kdXJhdGlvbj4wOygoYT1zLnNlbGVjdEFsbChcImcudHJhY2Uuc3VuYnVyc3RcIikuZGF0YShlLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLnVpZH0pKS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcInRyYWNlXCIsITApLmNsYXNzZWQoXCJzdW5idXJzdFwiLCEwKS5hdHRyKFwic3Ryb2tlLWxpbmVqb2luXCIsXCJyb3VuZFwiKSxhLm9yZGVyKCksYyk/KGkmJihvPWkoKSksbi50cmFuc2l0aW9uKCkuZHVyYXRpb24oci5kdXJhdGlvbikuZWFzZShyLmVhc2luZykuZWFjaChcImVuZFwiLGZ1bmN0aW9uKCl7byYmbygpfSkuZWFjaChcImludGVycnVwdFwiLGZ1bmN0aW9uKCl7byYmbygpfSkuZWFjaChmdW5jdGlvbigpe3Muc2VsZWN0QWxsKFwiZy50cmFjZVwiKS5lYWNoKGZ1bmN0aW9uKGUpe3kodCxlLHRoaXMscil9KX0pKTphLmVhY2goZnVuY3Rpb24oZSl7eSh0LGUsdGhpcyxyKX0pO2wmJmEuZXhpdCgpLnJlbW92ZSgpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnNcIjo2MTMsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvZXZlbnRzXCI6NjkwLFwiLi4vLi4vbGliL3NldGN1cnNvclwiOjcyMSxcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiOjcyNSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vcGllL2hlbHBlcnNcIjoxMDMxLFwiLi4vcGllL3Bsb3RcIjoxMDM1LFwiLi9jb25zdGFudHNcIjoxMTQyLFwiLi9zdHlsZVwiOjExNDgsZDM6MTU1LFwiZDMtaGllcmFyY2h5XCI6MTQ4fV0sMTE0ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGE9dChcIi4uLy4uL2xpYlwiKTtmdW5jdGlvbiBvKHQsZSxyKXt2YXIgbj1lLmRhdGEuZGF0YSxvPSFlLmNoaWxkcmVuLHM9bi5pLGw9YS5jYXN0T3B0aW9uKHIscyxcIm1hcmtlci5saW5lLmNvbG9yXCIpfHxpLmRlZmF1bHRMaW5lLGM9YS5jYXN0T3B0aW9uKHIscyxcIm1hcmtlci5saW5lLndpZHRoXCIpfHwwO3Quc3R5bGUoXCJzdHJva2Utd2lkdGhcIixjKS5jYWxsKGkuZmlsbCxuLmNvbG9yKS5jYWxsKGkuc3Ryb2tlLGwpLnN0eWxlKFwib3BhY2l0eVwiLG8/ci5sZWFmLm9wYWNpdHk6bnVsbCl9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0KXt0Ll9mdWxsTGF5b3V0Ll9zdW5idXJzdGxheWVyLnNlbGVjdEFsbChcIi50cmFjZVwiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9dFswXS50cmFjZTtlLnN0eWxlKFwib3BhY2l0eVwiLHIub3BhY2l0eSksZS5zZWxlY3RBbGwoXCJwYXRoLnN1cmZhY2VcIikuZWFjaChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5jYWxsKG8sdCxyKX0pfSl9LHN0eWxlT25lOm99fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vbGliXCI6NzAxLGQzOjE1NX1dLDExNDk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiKSxsPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsYz10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbDtmdW5jdGlvbiB1KHQpe3JldHVybntzaG93Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LHN0YXJ0Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDpudWxsLGVkaXRUeXBlOlwicGxvdFwifSxlbmQ6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0Om51bGwsZWRpdFR5cGU6XCJwbG90XCJ9LHNpemU6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0Om51bGwsbWluOjAsZWRpdFR5cGU6XCJwbG90XCJ9LHByb2plY3Q6e3g6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0seTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSx6Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9fSxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDpuLmRlZmF1bHRMaW5lfSx1c2Vjb2xvcm1hcDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSx3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjoxLG1heDoxNixkZmx0OjJ9LGhpZ2hsaWdodDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfSxoaWdobGlnaHRjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDpuLmRlZmF1bHRMaW5lfSxoaWdobGlnaHR3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjoxLG1heDoxNixkZmx0OjJ9fX12YXIgaD1lLmV4cG9ydHM9YyhsKHt6Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwifSx4Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwifSx5Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwifSx0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGFycmF5T2s6ITB9LGhvdmVydGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixhcnJheU9rOiEwfSxob3ZlcnRlbXBsYXRlOm8oKSxjb25uZWN0Z2Fwczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwiY2FsY1wifSxzdXJmYWNlY29sb3I6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCJ9fSxpKFwiXCIse2NvbG9yQXR0cjpcInogb3Igc3VyZmFjZWNvbG9yXCIsc2hvd1NjYWxlRGZsdDohMCxhdXRvQ29sb3JEZmx0OiExLGVkaXRUeXBlT3ZlcnJpZGU6XCJjYWxjXCJ9KSx7Y29sb3JiYXI6YSxjb250b3Vyczp7eDp1KCkseTp1KCksejp1KCl9LGhpZGVzdXJmYWNlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LGxpZ2h0cG9zaXRpb246e3g6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46LTFlNSxtYXg6MWU1LGRmbHQ6MTB9LHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46LTFlNSxtYXg6MWU1LGRmbHQ6MWU0fSx6Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOi0xZTUsbWF4OjFlNSxkZmx0OjB9fSxsaWdodGluZzp7YW1iaWVudDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6Ljh9LGRpZmZ1c2U6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0Oi44fSxzcGVjdWxhcjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoyLGRmbHQ6LjA1fSxyb3VnaG5lc3M6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0Oi41fSxmcmVzbmVsOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjUsZGZsdDouMn19LG9wYWNpdHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjF9LF9kZXByZWNhdGVkOnt6YXV0bzpsKHt9LGkuemF1dG8se30pLHptaW46bCh7fSxpLnptaW4se30pLHptYXg6bCh7fSxpLnptYXgse30pfSxob3ZlcmluZm86bCh7fSxzLmhvdmVyaW5mbyl9KSxcImNhbGNcIixcIm5lc3RlZFwiKTtoLnguZWRpdFR5cGU9aC55LmVkaXRUeXBlPWguei5lZGl0VHlwZT1cImNhbGMrY2xlYXJBeGlzVHlwZXNcIixoLnRyYW5zZm9ybXM9dm9pZCAwfSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCI6NTc5LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIjo1ODUsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiOjc0Nn1dLDExNTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZS5zdXJmYWNlY29sb3I/bih0LGUse3ZhbHM6ZS5zdXJmYWNlY29sb3IsY29udGFpbmVyU3RyOlwiXCIsY0xldHRlcjpcImNcIn0pOm4odCxlLHt2YWxzOmUueixjb250YWluZXJTdHI6XCJcIixjTGV0dGVyOlwiY1wifSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsY1wiOjU4Nn1dLDExNTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2wtc3VyZmFjZTNkXCIpLGk9dChcIm5kYXJyYXlcIiksYT10KFwibmRhcnJheS1ob21vZ3JhcGh5XCIpLG89dChcIm5kYXJyYXktZmlsbFwiKSxzPXQoXCIuLi8uLi9saWJcIikuaXNBcnJheU9yVHlwZWRBcnJheSxsPXQoXCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yXCIpLnBhcnNlQ29sb3JTY2FsZSxjPXQoXCIuLi8uLi9saWIvc3RyMnJnYmFycmF5XCIpLHU9dChcIi4uL2hlYXRtYXAvaW50ZXJwMmRcIiksaD10KFwiLi4vaGVhdG1hcC9maW5kX2VtcHRpZXNcIik7ZnVuY3Rpb24gZih0LGUscil7dGhpcy5zY2VuZT10LHRoaXMudWlkPXIsdGhpcy5zdXJmYWNlPWUsdGhpcy5kYXRhPW51bGwsdGhpcy5zaG93Q29udG91cj1bITEsITEsITFdLHRoaXMuY29udG91clN0YXJ0PVtudWxsLG51bGwsbnVsbF0sdGhpcy5jb250b3VyRW5kPVtudWxsLG51bGwsbnVsbF0sdGhpcy5jb250b3VyU2l6ZT1bMCwwLDBdLHRoaXMubWluVmFsdWVzPVsxLzAsMS8wLDEvMF0sdGhpcy5tYXhWYWx1ZXM9Wy0xLzAsLTEvMCwtMS8wXSx0aGlzLmRhdGFTY2FsZVg9MSx0aGlzLmRhdGFTY2FsZVk9MSx0aGlzLnJlZmluZURhdGE9ITAsdGhpcy5vYmplY3RPZmZzZXQ9WzAsMCwwXX12YXIgcD1mLnByb3RvdHlwZTtwLmdldFhhdD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1zKHRoaXMuZGF0YS54KT9zKHRoaXMuZGF0YS54WzBdKT90aGlzLmRhdGEueFtlXVt0XTp0aGlzLmRhdGEueFt0XTp0O3JldHVybiB2b2lkIDA9PT1yP2k6bi5kMmwoaSwwLHIpfSxwLmdldFlhdD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1zKHRoaXMuZGF0YS55KT9zKHRoaXMuZGF0YS55WzBdKT90aGlzLmRhdGEueVtlXVt0XTp0aGlzLmRhdGEueVtlXTplO3JldHVybiB2b2lkIDA9PT1yP2k6bi5kMmwoaSwwLHIpfSxwLmdldFphdD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmRhdGEueltlXVt0XTtyZXR1cm4gbnVsbD09PWkmJnRoaXMuZGF0YS5jb25uZWN0Z2FwcyYmdGhpcy5kYXRhLl9pbnRlcnBvbGF0ZWRaJiYoaT10aGlzLmRhdGEuX2ludGVycG9sYXRlZFpbZV1bdF0pLHZvaWQgMD09PXI/aTpuLmQybChpLDAscil9LHAuaGFuZGxlUGljaz1mdW5jdGlvbih0KXtpZih0Lm9iamVjdD09PXRoaXMuc3VyZmFjZSl7dmFyIGU9KHQuZGF0YS5pbmRleFswXS0xKS90aGlzLmRhdGFTY2FsZVgtMSxyPSh0LmRhdGEuaW5kZXhbMV0tMSkvdGhpcy5kYXRhU2NhbGVZLTEsbj1NYXRoLm1heChNYXRoLm1pbihNYXRoLnJvdW5kKGUpLHRoaXMuZGF0YS56WzBdLmxlbmd0aC0xKSwwKSxpPU1hdGgubWF4KE1hdGgubWluKE1hdGgucm91bmQociksdGhpcy5kYXRhLl95bGVuZ3RoLTEpLDApO3QuaW5kZXg9W24saV0sdC50cmFjZUNvb3JkaW5hdGU9W3RoaXMuZ2V0WGF0KG4saSksdGhpcy5nZXRZYXQobixpKSx0aGlzLmdldFphdChuLGkpXSx0LmRhdGFDb29yZGluYXRlPVt0aGlzLmdldFhhdChuLGksdGhpcy5kYXRhLnhjYWxlbmRhcix0aGlzLnNjZW5lLmZ1bGxTY2VuZUxheW91dC54YXhpcyksdGhpcy5nZXRZYXQobixpLHRoaXMuZGF0YS55Y2FsZW5kYXIsdGhpcy5zY2VuZS5mdWxsU2NlbmVMYXlvdXQueWF4aXMpLHRoaXMuZ2V0WmF0KG4saSx0aGlzLmRhdGEuemNhbGVuZGFyLHRoaXMuc2NlbmUuZnVsbFNjZW5lTGF5b3V0LnpheGlzKV07Zm9yKHZhciBhPTA7YTwzO2ErKyl7dmFyIG89dC5kYXRhQ29vcmRpbmF0ZVthXTtudWxsIT1vJiYodC5kYXRhQ29vcmRpbmF0ZVthXSo9dGhpcy5zY2VuZS5kYXRhU2NhbGVbYV0pfXZhciBzPXRoaXMuZGF0YS5ob3ZlcnRleHR8fHRoaXMuZGF0YS50ZXh0O3JldHVybiBBcnJheS5pc0FycmF5KHMpJiZzW2ldJiZ2b2lkIDAhPT1zW2ldW25dP3QudGV4dExhYmVsPXNbaV1bbl06dC50ZXh0TGFiZWw9c3x8XCJcIix0LmRhdGEuZGF0YUNvb3JkaW5hdGU9dC5kYXRhQ29vcmRpbmF0ZS5zbGljZSgpLHRoaXMuc3VyZmFjZS5oaWdobGlnaHQodC5kYXRhKSx0aGlzLnNjZW5lLmdscGxvdC5zcGlrZXMucG9zaXRpb249dC5kYXRhQ29vcmRpbmF0ZSwhMH19O3ZhciBkPVsyLDMsNSw3LDExLDEzLDE3LDE5LDIzLDI5LDMxLDM3LDQxLDQzLDQ3LDUzLDU5LDYxLDY3LDcxLDczLDc5LDgzLDg5LDk3LDEwMSwxMDMsMTA3LDEwOSwxMTMsMTI3LDEzMSwxMzcsMTM5LDE0OSwxNTEsMTU3LDE2MywxNjcsMTczLDE3OSwxODEsMTkxLDE5MywxOTcsMTk5LDIxMSwyMjMsMjI3LDIyOSwyMzMsMjM5LDI0MSwyNTEsMjU3LDI2MywyNjksMjcxLDI3NywyODEsMjgzLDI5MywzMDcsMzExLDMxMywzMTcsMzMxLDMzNywzNDcsMzQ5LDM1MywzNTksMzY3LDM3MywzNzksMzgzLDM4OSwzOTcsNDAxLDQwOSw0MTksNDIxLDQzMSw0MzMsNDM5LDQ0Myw0NDksNDU3LDQ2MSw0NjMsNDY3LDQ3OSw0ODcsNDkxLDQ5OSw1MDMsNTA5LDUyMSw1MjMsNTQxLDU0Nyw1NTcsNTYzLDU2OSw1NzEsNTc3LDU4Nyw1OTMsNTk5LDYwMSw2MDcsNjEzLDYxNyw2MTksNjMxLDY0MSw2NDMsNjQ3LDY1Myw2NTksNjYxLDY3Myw2NzcsNjgzLDY5MSw3MDEsNzA5LDcxOSw3MjcsNzMzLDczOSw3NDMsNzUxLDc1Nyw3NjEsNzY5LDc3Myw3ODcsNzk3LDgwOSw4MTEsODIxLDgyMyw4MjcsODI5LDgzOSw4NTMsODU3LDg1OSw4NjMsODc3LDg4MSw4ODMsODg3LDkwNyw5MTEsOTE5LDkyOSw5MzcsOTQxLDk0Nyw5NTMsOTY3LDk3MSw5NzcsOTgzLDk5MSw5OTcsMTAwOSwxMDEzLDEwMTksMTAyMSwxMDMxLDEwMzMsMTAzOSwxMDQ5LDEwNTEsMTA2MSwxMDYzLDEwNjksMTA4NywxMDkxLDEwOTMsMTA5NywxMTAzLDExMDksMTExNywxMTIzLDExMjksMTE1MSwxMTUzLDExNjMsMTE3MSwxMTgxLDExODcsMTE5MywxMjAxLDEyMTMsMTIxNywxMjIzLDEyMjksMTIzMSwxMjM3LDEyNDksMTI1OSwxMjc3LDEyNzksMTI4MywxMjg5LDEyOTEsMTI5NywxMzAxLDEzMDMsMTMwNywxMzE5LDEzMjEsMTMyNywxMzYxLDEzNjcsMTM3MywxMzgxLDEzOTksMTQwOSwxNDIzLDE0MjcsMTQyOSwxNDMzLDE0MzksMTQ0NywxNDUxLDE0NTMsMTQ1OSwxNDcxLDE0ODEsMTQ4MywxNDg3LDE0ODksMTQ5MywxNDk5LDE1MTEsMTUyMywxNTMxLDE1NDMsMTU0OSwxNTUzLDE1NTksMTU2NywxNTcxLDE1NzksMTU4MywxNTk3LDE2MDEsMTYwNywxNjA5LDE2MTMsMTYxOSwxNjIxLDE2MjcsMTYzNywxNjU3LDE2NjMsMTY2NywxNjY5LDE2OTMsMTY5NywxNjk5LDE3MDksMTcyMSwxNzIzLDE3MzMsMTc0MSwxNzQ3LDE3NTMsMTc1OSwxNzc3LDE3ODMsMTc4NywxNzg5LDE4MDEsMTgxMSwxODIzLDE4MzEsMTg0NywxODYxLDE4NjcsMTg3MSwxODczLDE4NzcsMTg3OSwxODg5LDE5MDEsMTkwNywxOTEzLDE5MzEsMTkzMywxOTQ5LDE5NTEsMTk3MywxOTc5LDE5ODcsMTk5MywxOTk3LDE5OTksMjAwMywyMDExLDIwMTcsMjAyNywyMDI5LDIwMzksMjA1MywyMDYzLDIwNjksMjA4MSwyMDgzLDIwODcsMjA4OSwyMDk5LDIxMTEsMjExMywyMTI5LDIxMzEsMjEzNywyMTQxLDIxNDMsMjE1MywyMTYxLDIxNzksMjIwMywyMjA3LDIyMTMsMjIyMSwyMjM3LDIyMzksMjI0MywyMjUxLDIyNjcsMjI2OSwyMjczLDIyODEsMjI4NywyMjkzLDIyOTcsMjMwOSwyMzExLDIzMzMsMjMzOSwyMzQxLDIzNDcsMjM1MSwyMzU3LDIzNzEsMjM3NywyMzgxLDIzODMsMjM4OSwyMzkzLDIzOTksMjQxMSwyNDE3LDI0MjMsMjQzNywyNDQxLDI0NDcsMjQ1OSwyNDY3LDI0NzMsMjQ3NywyNTAzLDI1MjEsMjUzMSwyNTM5LDI1NDMsMjU0OSwyNTUxLDI1NTcsMjU3OSwyNTkxLDI1OTMsMjYwOSwyNjE3LDI2MjEsMjYzMywyNjQ3LDI2NTcsMjY1OSwyNjYzLDI2NzEsMjY3NywyNjgzLDI2ODcsMjY4OSwyNjkzLDI2OTksMjcwNywyNzExLDI3MTMsMjcxOSwyNzI5LDI3MzEsMjc0MSwyNzQ5LDI3NTMsMjc2NywyNzc3LDI3ODksMjc5MSwyNzk3LDI4MDEsMjgwMywyODE5LDI4MzMsMjgzNywyODQzLDI4NTEsMjg1NywyODYxLDI4NzksMjg4NywyODk3LDI5MDMsMjkwOSwyOTE3LDI5MjcsMjkzOSwyOTUzLDI5NTcsMjk2MywyOTY5LDI5NzEsMjk5OV07ZnVuY3Rpb24gZyh0LGUpe2lmKHQ8ZSlyZXR1cm4gMDtmb3IodmFyIHI9MDswPT09TWF0aC5mbG9vcih0JWUpOyl0Lz1lLHIrKztyZXR1cm4gcn1mdW5jdGlvbiB2KHQpe2Zvcih2YXIgZT1bXSxyPTA7cjxkLmxlbmd0aDtyKyspe3ZhciBuPWRbcl07ZS5wdXNoKGcodCxuKSl9cmV0dXJuIGV9ZnVuY3Rpb24gbSh0KXtmb3IodmFyIGU9dih0KSxyPXQsbj0wO248ZC5sZW5ndGg7bisrKWlmKGVbbl0+MCl7cj1kW25dO2JyZWFrfXJldHVybiByfWZ1bmN0aW9uIHkodCxlKXtpZighKHQ8MXx8ZTwxKSl7Zm9yKHZhciByPXYodCksbj12KGUpLGk9MSxhPTA7YTxkLmxlbmd0aDthKyspaSo9TWF0aC5wb3coZFthXSxNYXRoLm1heChyW2FdLG5bYV0pKTtyZXR1cm4gaX19cC5jYWxjWG51bXM9ZnVuY3Rpb24odCl7dmFyIGUscj1bXTtmb3IoZT0xO2U8dDtlKyspe3ZhciBuPXRoaXMuZ2V0WGF0KGUtMSwwKSxpPXRoaXMuZ2V0WGF0KGUsMCk7cltlLTFdPWkhPT1uJiZudWxsIT1uJiZudWxsIT1pP01hdGguYWJzKGktbik6MH12YXIgYT0wO2ZvcihlPTE7ZTx0O2UrKylhKz1yW2UtMV07Zm9yKGU9MTtlPHQ7ZSsrKTA9PT1yW2UtMV0/cltlLTFdPTE6cltlLTFdPU1hdGgucm91bmQoYS9yW2UtMV0pO3JldHVybiByfSxwLmNhbGNZbnVtcz1mdW5jdGlvbih0KXt2YXIgZSxyPVtdO2ZvcihlPTE7ZTx0O2UrKyl7dmFyIG49dGhpcy5nZXRZYXQoMCxlLTEpLGk9dGhpcy5nZXRZYXQoMCxlKTtyW2UtMV09aSE9PW4mJm51bGwhPW4mJm51bGwhPWk/TWF0aC5hYnMoaS1uKTowfXZhciBhPTA7Zm9yKGU9MTtlPHQ7ZSsrKWErPXJbZS0xXTtmb3IoZT0xO2U8dDtlKyspMD09PXJbZS0xXT9yW2UtMV09MTpyW2UtMV09TWF0aC5yb3VuZChhL3JbZS0xXSk7cmV0dXJuIHJ9O3ZhciB4PVsxLDIsNCw2LDEyLDI0LDM2LDQ4LDYwLDEyMCwxODAsMjQwLDM2MCw3MjAsODQwLDEyNjBdLGI9eFs5XSxfPXhbMTNdO2Z1bmN0aW9uIHcodCxlKXtmb3IodmFyIHI9ITEsbj0wO248dC5sZW5ndGg7bisrKWlmKGU9PT10W25dKXtyPSEwO2JyZWFrfSExPT09ciYmdC5wdXNoKGUpfXAuZXN0aW1hdGVTY2FsZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xK2Z1bmN0aW9uKHQpe2lmKDAhPT10Lmxlbmd0aCl7Zm9yKHZhciBlPTEscj0wO3I8dC5sZW5ndGg7cisrKWU9eShlLHRbcl0pO3JldHVybiBlfX0oMD09PWU/dGhpcy5jYWxjWG51bXModCk6dGhpcy5jYWxjWW51bXModCkpO3I8Yjspcio9Mjtmb3IoO3I+Xzspci0tLHIvPW0ociksKytyPGImJihyPV8pO3ZhciBuPU1hdGgucm91bmQoci90KTtyZXR1cm4gbj4xP246MX0scC5yZWZpbmVDb29yZHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuZGF0YVNjYWxlWCxyPXRoaXMuZGF0YVNjYWxlWSxuPXRbMF0uc2hhcGVbMF0sbz10WzBdLnNoYXBlWzFdLHM9MHxNYXRoLmZsb29yKHRbMF0uc2hhcGVbMF0qZSsxKSxsPTB8TWF0aC5mbG9vcih0WzBdLnNoYXBlWzFdKnIrMSksYz0xK24rMSx1PTErbysxLGg9aShuZXcgRmxvYXQzMkFycmF5KGMqdSksW2MsdV0pLGY9MDtmPHQubGVuZ3RoOysrZil7dGhpcy5zdXJmYWNlLnBhZEZpZWxkKGgsdFtmXSk7dmFyIHA9aShuZXcgRmxvYXQzMkFycmF5KHMqbCksW3MsbF0pO2EocCxoLFtlLDAsMCwwLHIsMCwwLDAsMV0pLHRbZl09cH19LHAuc2V0Q29udG91ckxldmVscz1mdW5jdGlvbigpe3ZhciB0LGUscixuPVtbXSxbXSxbXV0saT1bITEsITEsITFdLGE9ITE7Zm9yKHQ9MDt0PDM7Kyt0KWlmKHRoaXMuc2hvd0NvbnRvdXJbdF0mJihhPSEwLHRoaXMuY29udG91clNpemVbdF0+MCYmbnVsbCE9PXRoaXMuY29udG91clN0YXJ0W3RdJiZudWxsIT09dGhpcy5jb250b3VyRW5kW3RdJiZ0aGlzLmNvbnRvdXJFbmRbdF0+dGhpcy5jb250b3VyU3RhcnRbdF0pKWZvcihpW3RdPSEwLGU9dGhpcy5jb250b3VyU3RhcnRbdF07ZTx0aGlzLmNvbnRvdXJFbmRbdF07ZSs9dGhpcy5jb250b3VyU2l6ZVt0XSlyPWUqdGhpcy5zY2VuZS5kYXRhU2NhbGVbdF0sdyhuW3RdLHIpO2lmKGEpe3ZhciBvPVtbXSxbXSxbXV07Zm9yKHQ9MDt0PDM7Kyt0KXRoaXMuc2hvd0NvbnRvdXJbdF0mJihvW3RdPWlbdF0/blt0XTp0aGlzLnNjZW5lLmNvbnRvdXJMZXZlbHNbdF0pO3RoaXMuc3VyZmFjZS51cGRhdGUoe2xldmVsczpvfSl9fSxwLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyLG4sYSxzPXRoaXMuc2NlbmUsZj1zLmZ1bGxTY2VuZUxheW91dCxwPXRoaXMuc3VyZmFjZSxkPXQub3BhY2l0eSxnPWwodCxkKSx2PXMuZGF0YVNjYWxlLG09dC56WzBdLmxlbmd0aCx5PXQuX3lsZW5ndGgseD1zLmNvbnRvdXJMZXZlbHM7dGhpcy5kYXRhPXQ7dmFyIGI9W107Zm9yKGU9MDtlPDM7ZSsrKWZvcihiW2VdPVtdLHI9MDtyPG07cisrKWJbZV1bcl09W107Zm9yKHI9MDtyPG07cisrKWZvcihuPTA7bjx5O24rKyliWzBdW3JdW25dPXRoaXMuZ2V0WGF0KHIsbix0LnhjYWxlbmRhcixmLnhheGlzKSxiWzFdW3JdW25dPXRoaXMuZ2V0WWF0KHIsbix0LnljYWxlbmRhcixmLnlheGlzKSxiWzJdW3JdW25dPXRoaXMuZ2V0WmF0KHIsbix0LnpjYWxlbmRhcixmLnpheGlzKTtpZih0LmNvbm5lY3RnYXBzKWZvcih0Ll9lbXB0eXBvaW50cz1oKGJbMl0pLHUoYlsyXSx0Ll9lbXB0eXBvaW50cyksdC5faW50ZXJwb2xhdGVkWj1bXSxyPTA7cjxtO3IrKylmb3IodC5faW50ZXJwb2xhdGVkWltyXT1bXSxuPTA7bjx5O24rKyl0Ll9pbnRlcnBvbGF0ZWRaW3JdW25dPWJbMl1bcl1bbl07Zm9yKGU9MDtlPDM7ZSsrKWZvcihyPTA7cjxtO3IrKylmb3Iobj0wO248eTtuKyspbnVsbD09KGE9YltlXVtyXVtuXSk/YltlXVtyXVtuXT1OYU46YT1iW2VdW3JdW25dKj12W2VdO2ZvcihlPTA7ZTwzO2UrKylmb3Iocj0wO3I8bTtyKyspZm9yKG49MDtuPHk7bisrKW51bGwhPShhPWJbZV1bcl1bbl0pJiYodGhpcy5taW5WYWx1ZXNbZV0+YSYmKHRoaXMubWluVmFsdWVzW2VdPWEpLHRoaXMubWF4VmFsdWVzW2VdPGEmJih0aGlzLm1heFZhbHVlc1tlXT1hKSk7Zm9yKGU9MDtlPDM7ZSsrKXRoaXMub2JqZWN0T2Zmc2V0W2VdPS41Kih0aGlzLm1pblZhbHVlc1tlXSt0aGlzLm1heFZhbHVlc1tlXSk7Zm9yKGU9MDtlPDM7ZSsrKWZvcihyPTA7cjxtO3IrKylmb3Iobj0wO248eTtuKyspbnVsbCE9KGE9YltlXVtyXVtuXSkmJihiW2VdW3JdW25dLT10aGlzLm9iamVjdE9mZnNldFtlXSk7dmFyIHc9W2kobmV3IEZsb2F0MzJBcnJheShtKnkpLFttLHldKSxpKG5ldyBGbG9hdDMyQXJyYXkobSp5KSxbbSx5XSksaShuZXcgRmxvYXQzMkFycmF5KG0qeSksW20seV0pXTtvKHdbMF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gYlswXVt0XVtlXX0pLG8od1sxXSxmdW5jdGlvbih0LGUpe3JldHVybiBiWzFdW3RdW2VdfSksbyh3WzJdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGJbMl1bdF1bZV19KSxiPVtdO3ZhciBrPXtjb2xvcm1hcDpnLGxldmVsczpbW10sW10sW11dLHNob3dDb250b3VyOlshMCwhMCwhMF0sc2hvd1N1cmZhY2U6IXQuaGlkZXN1cmZhY2UsY29udG91clByb2plY3Q6W1shMSwhMSwhMV0sWyExLCExLCExXSxbITEsITEsITFdXSxjb250b3VyV2lkdGg6WzEsMSwxXSxjb250b3VyQ29sb3I6W1sxLDEsMSwxXSxbMSwxLDEsMV0sWzEsMSwxLDFdXSxjb250b3VyVGludDpbMSwxLDFdLGR5bmFtaWNDb2xvcjpbWzEsMSwxLDFdLFsxLDEsMSwxXSxbMSwxLDEsMV1dLGR5bmFtaWNXaWR0aDpbMSwxLDFdLGR5bmFtaWNUaW50OlsxLDEsMV0sb3BhY2l0eTp0Lm9wYWNpdHl9O2lmKGsuaW50ZW5zaXR5Qm91bmRzPVt0LmNtaW4sdC5jbWF4XSx0LnN1cmZhY2Vjb2xvcil7dmFyIEE9aShuZXcgRmxvYXQzMkFycmF5KG0qeSksW20seV0pO28oQSxmdW5jdGlvbihlLHIpe3JldHVybiB0LnN1cmZhY2Vjb2xvcltyXVtlXX0pLHcucHVzaChBKX1lbHNlIGsuaW50ZW5zaXR5Qm91bmRzWzBdKj12WzJdLGsuaW50ZW5zaXR5Qm91bmRzWzFdKj12WzJdOyhfPHdbMF0uc2hhcGVbMF18fF88d1swXS5zaGFwZVsxXSkmJih0aGlzLnJlZmluZURhdGE9ITEpLCEwPT09dGhpcy5yZWZpbmVEYXRhJiYodGhpcy5kYXRhU2NhbGVYPXRoaXMuZXN0aW1hdGVTY2FsZSh3WzBdLnNoYXBlWzBdLDApLHRoaXMuZGF0YVNjYWxlWT10aGlzLmVzdGltYXRlU2NhbGUod1swXS5zaGFwZVsxXSwxKSwxPT09dGhpcy5kYXRhU2NhbGVYJiYxPT09dGhpcy5kYXRhU2NhbGVZfHx0aGlzLnJlZmluZUNvb3Jkcyh3KSksdC5zdXJmYWNlY29sb3ImJihrLmludGVuc2l0eT13LnBvcCgpKTt2YXIgVD1bITAsITAsITBdLE09W1wieFwiLFwieVwiLFwielwiXTtmb3IoZT0wO2U8MzsrK2Upe3ZhciBTPXQuY29udG91cnNbTVtlXV07VFtlXT1TLmhpZ2hsaWdodCxrLnNob3dDb250b3VyW2VdPVMuc2hvd3x8Uy5oaWdobGlnaHQsay5zaG93Q29udG91cltlXSYmKGsuY29udG91clByb2plY3RbZV09W1MucHJvamVjdC54LFMucHJvamVjdC55LFMucHJvamVjdC56XSxTLnNob3c/KHRoaXMuc2hvd0NvbnRvdXJbZV09ITAsay5sZXZlbHNbZV09eFtlXSxwLmhpZ2hsaWdodENvbG9yW2VdPWsuY29udG91ckNvbG9yW2VdPWMoUy5jb2xvciksUy51c2Vjb2xvcm1hcD9wLmhpZ2hsaWdodFRpbnRbZV09ay5jb250b3VyVGludFtlXT0wOnAuaGlnaGxpZ2h0VGludFtlXT1rLmNvbnRvdXJUaW50W2VdPTEsay5jb250b3VyV2lkdGhbZV09Uy53aWR0aCx0aGlzLmNvbnRvdXJTdGFydFtlXT1TLnN0YXJ0LHRoaXMuY29udG91ckVuZFtlXT1TLmVuZCx0aGlzLmNvbnRvdXJTaXplW2VdPVMuc2l6ZSk6KHRoaXMuc2hvd0NvbnRvdXJbZV09ITEsdGhpcy5jb250b3VyU3RhcnRbZV09bnVsbCx0aGlzLmNvbnRvdXJFbmRbZV09bnVsbCx0aGlzLmNvbnRvdXJTaXplW2VdPTApLFMuaGlnaGxpZ2h0JiYoay5keW5hbWljQ29sb3JbZV09YyhTLmhpZ2hsaWdodGNvbG9yKSxrLmR5bmFtaWNXaWR0aFtlXT1TLmhpZ2hsaWdodHdpZHRoKSl9KGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0ucmdiLHI9dFt0Lmxlbmd0aC0xXS5yZ2I7cmV0dXJuIGVbMF09PT1yWzBdJiZlWzFdPT09clsxXSYmZVsyXT09PXJbMl0mJmVbM109PT1yWzNdfSkoZykmJihrLnZlcnRleENvbG9yPSEwKSxrLm9iamVjdE9mZnNldD10aGlzLm9iamVjdE9mZnNldCxrLmNvb3Jkcz13LHAudXBkYXRlKGspLHAudmlzaWJsZT10LnZpc2libGUscC5lbmFibGVEeW5hbWljPVQscC5lbmFibGVIaWdobGlnaHQ9VCxwLnNuYXBUb0RhdGE9ITAsXCJsaWdodGluZ1wiaW4gdCYmKHAuYW1iaWVudExpZ2h0PXQubGlnaHRpbmcuYW1iaWVudCxwLmRpZmZ1c2VMaWdodD10LmxpZ2h0aW5nLmRpZmZ1c2UscC5zcGVjdWxhckxpZ2h0PXQubGlnaHRpbmcuc3BlY3VsYXIscC5yb3VnaG5lc3M9dC5saWdodGluZy5yb3VnaG5lc3MscC5mcmVzbmVsPXQubGlnaHRpbmcuZnJlc25lbCksXCJsaWdodHBvc2l0aW9uXCJpbiB0JiYocC5saWdodFBvc2l0aW9uPVt0LmxpZ2h0cG9zaXRpb24ueCx0LmxpZ2h0cG9zaXRpb24ueSx0LmxpZ2h0cG9zaXRpb24uel0pLGQmJmQ8MSYmKHAuc3VwcG9ydHNUcmFuc3BhcmVuY3k9ITApfSxwLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5zdXJmYWNlKSx0aGlzLnN1cmZhY2UuZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxpPW4oe2dsOnJ9KSxhPW5ldyBmKHQsaSxlLnVpZCk7cmV0dXJuIGkuX3RyYWNlPWEsYS51cGRhdGUoZSksdC5nbHBsb3QuYWRkKGkpLGF9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yXCI6Njk4LFwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiOjcyNCxcIi4uL2hlYXRtYXAvZmluZF9lbXB0aWVzXCI6OTU0LFwiLi4vaGVhdG1hcC9pbnRlcnAyZFwiOjk1NyxcImdsLXN1cmZhY2UzZFwiOjMxMyxuZGFycmF5OjQ0MyxcIm5kYXJyYXktZmlsbFwiOjQzMyxcIm5kYXJyYXktaG9tb2dyYXBoeVwiOjQzNX1dLDExNTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiKSxvPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZnVuY3Rpb24gcyh0LGUscil7ZSBpbiB0JiYhKHIgaW4gdCkmJih0W3JdPXRbZV0pfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXt2YXIgYyx1O2Z1bmN0aW9uIGgocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLG8scixuKX12YXIgZj1oKFwieFwiKSxwPWgoXCJ5XCIpLGQ9aChcInpcIik7aWYoIWR8fCFkLmxlbmd0aHx8ZiYmZi5sZW5ndGg8MXx8cCYmcC5sZW5ndGg8MSllLnZpc2libGU9ITE7ZWxzZXtlLl94bGVuZ3RoPUFycmF5LmlzQXJyYXkoZikmJmkuaXNBcnJheU9yVHlwZWRBcnJheShmWzBdKT9kLmxlbmd0aDpkWzBdLmxlbmd0aCxlLl95bGVuZ3RoPWQubGVuZ3RoLG4uZ2V0Q29tcG9uZW50TWV0aG9kKFwiY2FsZW5kYXJzXCIsXCJoYW5kbGVUcmFjZURlZmF1bHRzXCIpKHQsZSxbXCJ4XCIsXCJ5XCIsXCJ6XCJdLGwpLGgoXCJ0ZXh0XCIpLGgoXCJob3ZlcnRleHRcIiksaChcImhvdmVydGVtcGxhdGVcIiksW1wibGlnaHRpbmcuYW1iaWVudFwiLFwibGlnaHRpbmcuZGlmZnVzZVwiLFwibGlnaHRpbmcuc3BlY3VsYXJcIixcImxpZ2h0aW5nLnJvdWdobmVzc1wiLFwibGlnaHRpbmcuZnJlc25lbFwiLFwibGlnaHRwb3NpdGlvbi54XCIsXCJsaWdodHBvc2l0aW9uLnlcIixcImxpZ2h0cG9zaXRpb24uelwiLFwiaGlkZXN1cmZhY2VcIixcImNvbm5lY3RnYXBzXCIsXCJvcGFjaXR5XCJdLmZvckVhY2goZnVuY3Rpb24odCl7aCh0KX0pO3ZhciBnPWgoXCJzdXJmYWNlY29sb3JcIiksdj1bXCJ4XCIsXCJ5XCIsXCJ6XCJdO2ZvcihjPTA7YzwzOysrYyl7dmFyIG09XCJjb250b3Vycy5cIit2W2NdLHk9aChtK1wiLnNob3dcIikseD1oKG0rXCIuaGlnaGxpZ2h0XCIpO2lmKHl8fHgpZm9yKHU9MDt1PDM7Kyt1KWgobStcIi5wcm9qZWN0LlwiK3ZbdV0pO3kmJihoKG0rXCIuY29sb3JcIiksaChtK1wiLndpZHRoXCIpLGgobStcIi51c2Vjb2xvcm1hcFwiKSkseCYmKGgobStcIi5oaWdobGlnaHRjb2xvclwiKSxoKG0rXCIuaGlnaGxpZ2h0d2lkdGhcIikpLGgobStcIi5zdGFydFwiKSxoKG0rXCIuZW5kXCIpLGgobStcIi5zaXplXCIpfWd8fChzKHQsXCJ6bWluXCIsXCJjbWluXCIpLHModCxcInptYXhcIixcImNtYXhcIikscyh0LFwiemF1dG9cIixcImNhdXRvXCIpKSxhKHQsZSxsLGgse3ByZWZpeDpcIlwiLGNMZXR0ZXI6XCJjXCJ9KSxlLl9sZW5ndGg9bnVsbH19fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIjo1ODgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vYXR0cmlidXRlc1wiOjExNDl9XSwxMTUzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNvbG9yYmFyPXttaW46XCJjbWluXCIsbWF4OlwiY21heFwifSxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLnBsb3Q9dChcIi4vY29udmVydFwiKSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cInN1cmZhY2VcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9nbDNkXCIpLG4uY2F0ZWdvcmllcz1bXCJnbDNkXCIsXCIyZE1hcFwiLFwibm9PcGFjaXR5XCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvZ2wzZFwiOjc4OSxcIi4vYXR0cmlidXRlc1wiOjExNDksXCIuL2NhbGNcIjoxMTUwLFwiLi9jb252ZXJ0XCI6MTE1MSxcIi4vZGVmYXVsdHNcIjoxMTUyfV0sMTE1NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2Fubm90YXRpb25zL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LGE9dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGwsbz10KFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL3Bsb3RzL2RvbWFpblwiKS5hdHRyaWJ1dGVzOyhlLmV4cG9ydHM9YSh7ZG9tYWluOnMoe25hbWU6XCJ0YWJsZVwiLHRyYWNlOiEwfSksY29sdW1ud2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixhcnJheU9rOiEwLGRmbHQ6bnVsbH0sY29sdW1ub3JkZXI6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCJ9LGhlYWRlcjp7dmFsdWVzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGRmbHQ6W119LGZvcm1hdDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixkZmx0OltdfSxwcmVmaXg6e3ZhbFR5cGU6XCJzdHJpbmdcIixhcnJheU9rOiEwLGRmbHQ6bnVsbH0sc3VmZml4Ont2YWxUeXBlOlwic3RyaW5nXCIsYXJyYXlPazohMCxkZmx0Om51bGx9LGhlaWdodDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6Mjh9LGFsaWduOmkoe30sbi5hbGlnbix7YXJyYXlPazohMH0pLGxpbmU6e3dpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsYXJyYXlPazohMCxkZmx0OjF9LGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixhcnJheU9rOiEwLGRmbHQ6XCJncmV5XCJ9fSxmaWxsOntjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsYXJyYXlPazohMCxkZmx0Olwid2hpdGVcIn19LGZvbnQ6aSh7fSxvKHthcnJheU9rOiEwfSkpfSxjZWxsczp7dmFsdWVzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGRmbHQ6W119LGZvcm1hdDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixkZmx0OltdfSxwcmVmaXg6e3ZhbFR5cGU6XCJzdHJpbmdcIixhcnJheU9rOiEwLGRmbHQ6bnVsbH0sc3VmZml4Ont2YWxUeXBlOlwic3RyaW5nXCIsYXJyYXlPazohMCxkZmx0Om51bGx9LGhlaWdodDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MjB9LGFsaWduOmkoe30sbi5hbGlnbix7YXJyYXlPazohMH0pLGxpbmU6e3dpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsYXJyYXlPazohMCxkZmx0OjF9LGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixhcnJheU9rOiEwLGRmbHQ6XCJncmV5XCJ9fSxmaWxsOntjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsYXJyYXlPazohMCxkZmx0Olwid2hpdGVcIn19LGZvbnQ6aSh7fSxvKHthcnJheU9rOiEwfSkpfX0sXCJjYWxjXCIsXCJmcm9tLXJvb3RcIikpLnRyYW5zZm9ybXM9dm9pZCAwfSx7XCIuLi8uLi9jb21wb25lbnRzL2Fubm90YXRpb25zL2F0dHJpYnV0ZXNcIjo1NjEsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uLy4uL3Bsb3RzL2RvbWFpblwiOjc3NCxcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiOjc3NX1dLDExNTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvZ2V0X2RhdGFcIikuZ2V0TW9kdWxlQ2FsY0RhdGEsaT10KFwiLi9wbG90XCIpO3IubmFtZT1cInRhYmxlXCIsci5wbG90PWZ1bmN0aW9uKHQpe3ZhciBlPW4odC5jYWxjZGF0YSxcInRhYmxlXCIpWzBdO2UubGVuZ3RoJiZpKHQsZSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5faGFzJiZuLl9oYXMoXCJ0YWJsZVwiKSxhPWUuX2hhcyYmZS5faGFzKFwidGFibGVcIik7aSYmIWEmJm4uX3BhcGVyZGl2LnNlbGVjdEFsbChcIi50YWJsZVwiKS5yZW1vdmUoKX19LHtcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCI6Nzg0LFwiLi9wbG90XCI6MTE2Mn1dLDExNTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliL2d1cFwiKS53cmFwO2UuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBuKHt9KX19LHtcIi4uLy4uL2xpYi9ndXBcIjo2OTl9XSwxMTU3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtjZWxsUGFkOjgsY29sdW1uRXh0ZW50T2Zmc2V0OjEwLGNvbHVtblRpdGxlT2Zmc2V0OjI4LGVtcHR5SGVhZGVySGVpZ2h0OjE2LGxhdGV4Q2hlY2s6L15cXCQuKlxcJCQvLGdvbGRlblJhdGlvOjEuNjE4LGxpbmVCcmVha2VyOlwiPGJyPlwiLG1heERpbWVuc2lvbkNvdW50OjYwLG92ZXJkcmFnOjQ1LHJlbGVhc2VUcmFuc2l0aW9uRHVyYXRpb246MTIwLHJlbGVhc2VUcmFuc2l0aW9uRWFzZTpcImN1YmljLW91dFwiLHNjcm9sbGJhckNhcHR1cmVXaWR0aDoxOCxzY3JvbGxiYXJIaWRlRGVsYXk6MWUzLHNjcm9sbGJhckhpZGVEdXJhdGlvbjoxZTMsc2Nyb2xsYmFyT2Zmc2V0OjUsc2Nyb2xsYmFyV2lkdGg6OCx0cmFuc2l0aW9uRHVyYXRpb246MTAwLHRyYW5zaXRpb25FYXNlOlwiY3ViaWMtb3V0XCIsdXBsaWZ0OjUsd3JhcFNwYWNlcjpcIiBcIix3cmFwU3BsaXRDaGFyYWN0ZXI6XCIgXCIsY246e3RhYmxlOlwidGFibGVcIix0YWJsZUNvbnRyb2xWaWV3OlwidGFibGUtY29udHJvbC12aWV3XCIsc2Nyb2xsQmFja2dyb3VuZDpcInNjcm9sbC1iYWNrZ3JvdW5kXCIseUNvbHVtbjpcInktY29sdW1uXCIsY29sdW1uQmxvY2s6XCJjb2x1bW4tYmxvY2tcIixzY3JvbGxBcmVhQ2xpcDpcInNjcm9sbC1hcmVhLWNsaXBcIixzY3JvbGxBcmVhQ2xpcFJlY3Q6XCJzY3JvbGwtYXJlYS1jbGlwLXJlY3RcIixjb2x1bW5Cb3VuZGFyeTpcImNvbHVtbi1ib3VuZGFyeVwiLGNvbHVtbkJvdW5kYXJ5Q2xpcHBhdGg6XCJjb2x1bW4tYm91bmRhcnktY2xpcHBhdGhcIixjb2x1bW5Cb3VuZGFyeVJlY3Q6XCJjb2x1bW4tYm91bmRhcnktcmVjdFwiLGNvbHVtbkNlbGxzOlwiY29sdW1uLWNlbGxzXCIsY29sdW1uQ2VsbDpcImNvbHVtbi1jZWxsXCIsY2VsbFJlY3Q6XCJjZWxsLXJlY3RcIixjZWxsVGV4dDpcImNlbGwtdGV4dFwiLGNlbGxUZXh0SG9sZGVyOlwiY2VsbC10ZXh0LWhvbGRlclwiLHNjcm9sbGJhcktpdDpcInNjcm9sbGJhci1raXRcIixzY3JvbGxiYXI6XCJzY3JvbGxiYXJcIixzY3JvbGxiYXJTbGlkZXI6XCJzY3JvbGxiYXItc2xpZGVyXCIsc2Nyb2xsYmFyR2x5cGg6XCJzY3JvbGxiYXItZ2x5cGhcIixzY3JvbGxiYXJDYXB0dXJlWm9uZTpcInNjcm9sbGJhci1jYXB0dXJlLXpvbmVcIn19fSx7fV0sMTE1ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2NvbnN0YW50c1wiKSxpPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsYT10KFwiZmFzdC1pc251bWVyaWNcIik7ZnVuY3Rpb24gbyh0KXtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspZT1NYXRoLm1heChlLG8odFtyXSkpO3JldHVybiBlfXJldHVybiB0fWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gdCtlfWZ1bmN0aW9uIGwodCl7dmFyIGUscj10LnNsaWNlKCksbj0xLzAsaT0wO2ZvcihlPTA7ZTxyLmxlbmd0aDtlKyspQXJyYXkuaXNBcnJheShyW2VdKXx8KHJbZV09W3JbZV1dKSxuPU1hdGgubWluKG4scltlXS5sZW5ndGgpLGk9TWF0aC5tYXgoaSxyW2VdLmxlbmd0aCk7aWYobiE9PWkpZm9yKGU9MDtlPHIubGVuZ3RoO2UrKyl7dmFyIGE9aS1yW2VdLmxlbmd0aDthJiYocltlXT1yW2VdLmNvbmNhdChjKGEpKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gYyh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09XCJcIjtyZXR1cm4gZX1mdW5jdGlvbiB1KHQpe3JldHVybiB0LmNhbGNkYXRhLmNvbHVtbnMucmVkdWNlKGZ1bmN0aW9uKGUscil7cmV0dXJuIHIueEluZGV4PHQueEluZGV4P2Urci5jb2x1bW5XaWR0aDplfSwwKX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gaSh7fSx0W3JdLHthdXhpbGlhcnlCbG9ja3M6ZX0pfSl9ZnVuY3Rpb24gZih0LGUpe2Zvcih2YXIgcixuPXt9LGk9MCxhPTAsbz17Zmlyc3RSb3dJbmRleDpudWxsLGxhc3RSb3dJbmRleDpudWxsLHJvd3M6W119LHM9MCxsPTAsYz0wO2M8dC5sZW5ndGg7YysrKXI9dFtjXSxvLnJvd3MucHVzaCh7cm93SW5kZXg6Yyxyb3dIZWlnaHQ6cn0pLCgoYSs9cik+PWV8fGM9PT10Lmxlbmd0aC0xKSYmKG5baV09byxvLmtleT1sKyssby5maXJzdFJvd0luZGV4PXMsby5sYXN0Um93SW5kZXg9YyxvPXtmaXJzdFJvd0luZGV4Om51bGwsbGFzdFJvd0luZGV4Om51bGwscm93czpbXX0saSs9YSxzPWMrMSxhPTApO3JldHVybiBufWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWwoZS5jZWxscy52YWx1ZXMpLHA9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoZS5oZWFkZXIudmFsdWVzLmxlbmd0aCx0Lmxlbmd0aCl9LGQ9bChlLmhlYWRlci52YWx1ZXMpO2QubGVuZ3RoJiYhZFswXS5sZW5ndGgmJihkWzBdPVtcIlwiXSxkPWwoZCkpO3ZhciBnPWQuY29uY2F0KHAocikubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGMoKGRbMF18fFtcIlwiXSkubGVuZ3RoKX0pKSx2PWUuZG9tYWluLG09TWF0aC5mbG9vcih0Ll9mdWxsTGF5b3V0Ll9zaXplLncqKHYueFsxXS12LnhbMF0pKSx5PU1hdGguZmxvb3IodC5fZnVsbExheW91dC5fc2l6ZS5oKih2LnlbMV0tdi55WzBdKSkseD1lLmhlYWRlci52YWx1ZXMubGVuZ3RoP2dbMF0ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGUuaGVhZGVyLmhlaWdodH0pOltuLmVtcHR5SGVhZGVySGVpZ2h0XSxiPXIubGVuZ3RoP3JbMF0ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGUuY2VsbHMuaGVpZ2h0fSk6W10sXz14LnJlZHVjZShzLDApLHc9ZihiLHktXytuLnVwbGlmdCksaz1oKGYoeCxfKSxbXSksQT1oKHcsayksVD17fSxNPWUuX2Z1bGxJbnB1dC5jb2x1bW5vcmRlci5jb25jYXQocChyLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBlfSkpKSxTPWcubWFwKGZ1bmN0aW9uKHQscil7dmFyIG49QXJyYXkuaXNBcnJheShlLmNvbHVtbndpZHRoKT9lLmNvbHVtbndpZHRoW01hdGgubWluKHIsZS5jb2x1bW53aWR0aC5sZW5ndGgtMSldOmUuY29sdW1ud2lkdGg7cmV0dXJuIGEobik/TnVtYmVyKG4pOjF9KSxFPVMucmVkdWNlKHMsMCk7Uz1TLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC9FKm19KTt2YXIgQz1NYXRoLm1heChvKGUuaGVhZGVyLmxpbmUud2lkdGgpLG8oZS5jZWxscy5saW5lLndpZHRoKSksTD17a2V5OmUudWlkK3QuX2NvbnRleHQuc3RhdGljUGxvdCx0cmFuc2xhdGVYOnYueFswXSp0Ll9mdWxsTGF5b3V0Ll9zaXplLncsdHJhbnNsYXRlWTp0Ll9mdWxsTGF5b3V0Ll9zaXplLmgqKDEtdi55WzFdKSxzaXplOnQuX2Z1bGxMYXlvdXQuX3NpemUsd2lkdGg6bSxtYXhMaW5lV2lkdGg6QyxoZWlnaHQ6eSxjb2x1bW5PcmRlcjpNLGdyb3VwSGVpZ2h0Onkscm93QmxvY2tzOkEsaGVhZGVyUm93QmxvY2tzOmssc2Nyb2xsWTowLGNlbGxzOmkoe30sZS5jZWxscyx7dmFsdWVzOnJ9KSxoZWFkZXJDZWxsczppKHt9LGUuaGVhZGVyLHt2YWx1ZXM6Z30pLGdkQ29sdW1uczpnLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pLGdkQ29sdW1uc09yaWdpbmFsT3JkZXI6Zy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSxwcmV2UGFnZXM6WzAsMF0sc2Nyb2xsYmFyU3RhdGU6e3Njcm9sbGJhclNjcm9sbEluUHJvZ3Jlc3M6ITF9LGNvbHVtbnM6Zy5tYXAoZnVuY3Rpb24odCxlKXt2YXIgcj1UW3RdO3JldHVybiBUW3RdPShyfHwwKSsxLHtrZXk6dCtcIl9fXCIrVFt0XSxsYWJlbDp0LHNwZWNJbmRleDplLHhJbmRleDpNW2VdLHhTY2FsZTp1LHg6dm9pZCAwLGNhbGNkYXRhOnZvaWQgMCxjb2x1bW5XaWR0aDpTW2VdfX0pfTtyZXR1cm4gTC5jb2x1bW5zLmZvckVhY2goZnVuY3Rpb24odCl7dC5jYWxjZGF0YT1MLHQueD11KHQpfSksTH19LHtcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuL2NvbnN0YW50c1wiOjExNTcsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDExNTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0O3Iuc3BsaXRUb1BhbmVscz1mdW5jdGlvbih0KXt2YXIgZT1bMCwwXSxyPW4oe30sdCx7a2V5OlwiaGVhZGVyXCIsdHlwZTpcImhlYWRlclwiLHBhZ2U6MCxwcmV2UGFnZXM6ZSxjdXJyZW50UmVwYWludDpbbnVsbCxudWxsXSxkcmFnSGFuZGxlOiEwLHZhbHVlczp0LmNhbGNkYXRhLmhlYWRlckNlbGxzLnZhbHVlc1t0LnNwZWNJbmRleF0scm93QmxvY2tzOnQuY2FsY2RhdGEuaGVhZGVyUm93QmxvY2tzLGNhbGNkYXRhOm4oe30sdC5jYWxjZGF0YSx7Y2VsbHM6dC5jYWxjZGF0YS5oZWFkZXJDZWxsc30pfSk7cmV0dXJuW24oe30sdCx7a2V5OlwiY2VsbHMxXCIsdHlwZTpcImNlbGxzXCIscGFnZTowLHByZXZQYWdlczplLGN1cnJlbnRSZXBhaW50OltudWxsLG51bGxdLGRyYWdIYW5kbGU6ITEsdmFsdWVzOnQuY2FsY2RhdGEuY2VsbHMudmFsdWVzW3Quc3BlY0luZGV4XSxyb3dCbG9ja3M6dC5jYWxjZGF0YS5yb3dCbG9ja3N9KSxuKHt9LHQse2tleTpcImNlbGxzMlwiLHR5cGU6XCJjZWxsc1wiLHBhZ2U6MSxwcmV2UGFnZXM6ZSxjdXJyZW50UmVwYWludDpbbnVsbCxudWxsXSxkcmFnSGFuZGxlOiExLHZhbHVlczp0LmNhbGNkYXRhLmNlbGxzLnZhbHVlc1t0LnNwZWNJbmRleF0scm93QmxvY2tzOnQuY2FsY2RhdGEucm93QmxvY2tzfSkscl19LHIuc3BsaXRUb0NlbGxzPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlPXQucm93QmxvY2tzW3QucGFnZV0scj1lP2Uucm93c1swXS5yb3dJbmRleDowLG49ZT9yK2Uucm93cy5sZW5ndGg6MDtyZXR1cm5bcixuXX0odCk7cmV0dXJuKHQudmFsdWVzfHxbXSkuc2xpY2UoZVswXSxlWzFdKS5tYXAoZnVuY3Rpb24ocixuKXtyZXR1cm57a2V5V2l0aGluQmxvY2s6bisoXCJzdHJpbmdcIj09dHlwZW9mIHImJnIubWF0Y2goL1s8JCY+IF0vKT9cIl9rZXlidXN0ZXJfXCIrTWF0aC5yYW5kb20oKTpcIlwiKSxrZXk6ZVswXStuLGNvbHVtbjp0LGNhbGNkYXRhOnQuY2FsY2RhdGEscGFnZTp0LnBhZ2Uscm93QmxvY2tzOnQucm93QmxvY2tzLHZhbHVlOnJ9fSl9fSx7XCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxfV0sMTE2MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2RvbWFpblwiKS5kZWZhdWx0cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7ZnVuY3Rpb24gcyhyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfWEoZSxvLHMpLHMoXCJjb2x1bW53aWR0aFwiKSxzKFwiaGVhZGVyLnZhbHVlc1wiKSxzKFwiaGVhZGVyLmZvcm1hdFwiKSxzKFwiaGVhZGVyLmFsaWduXCIpLHMoXCJoZWFkZXIucHJlZml4XCIpLHMoXCJoZWFkZXIuc3VmZml4XCIpLHMoXCJoZWFkZXIuaGVpZ2h0XCIpLHMoXCJoZWFkZXIubGluZS53aWR0aFwiKSxzKFwiaGVhZGVyLmxpbmUuY29sb3JcIikscyhcImhlYWRlci5maWxsLmNvbG9yXCIpLG4uY29lcmNlRm9udChzLFwiaGVhZGVyLmZvbnRcIixuLmV4dGVuZEZsYXQoe30sby5mb250KSksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jb2x1bW5vcmRlcnx8W10sbj10LmhlYWRlci52YWx1ZXMubGVuZ3RoLGk9ci5zbGljZSgwLG4pLGE9aS5zbGljZSgpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSksbz1pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gYS5pbmRleE9mKHQpfSkscz1vLmxlbmd0aDtzPG47cysrKW8ucHVzaChzKTtlKFwiY29sdW1ub3JkZXJcIixvKX0oZSxzKSxzKFwiY2VsbHMudmFsdWVzXCIpLHMoXCJjZWxscy5mb3JtYXRcIikscyhcImNlbGxzLmFsaWduXCIpLHMoXCJjZWxscy5wcmVmaXhcIikscyhcImNlbGxzLnN1ZmZpeFwiKSxzKFwiY2VsbHMuaGVpZ2h0XCIpLHMoXCJjZWxscy5saW5lLndpZHRoXCIpLHMoXCJjZWxscy5saW5lLmNvbG9yXCIpLHMoXCJjZWxscy5maWxsLmNvbG9yXCIpLG4uY29lcmNlRm9udChzLFwiY2VsbHMuZm9udFwiLG4uZXh0ZW5kRmxhdCh7fSxvLmZvbnQpKSxlLl9sZW5ndGg9bnVsbH19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2RvbWFpblwiOjc3NCxcIi4vYXR0cmlidXRlc1wiOjExNTR9XSwxMTYxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLnBsb3Q9dChcIi4vcGxvdFwiKSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cInRhYmxlXCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi9iYXNlX3Bsb3RcIiksbi5jYXRlZ29yaWVzPVtcIm5vT3BhY2l0eVwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4vYXR0cmlidXRlc1wiOjExNTQsXCIuL2Jhc2VfcGxvdFwiOjExNTUsXCIuL2NhbGNcIjoxMTU2LFwiLi9kZWZhdWx0c1wiOjExNjAsXCIuL3Bsb3RcIjoxMTYyfV0sMTE2MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2NvbnN0YW50c1wiKSxpPXQoXCJkM1wiKSxhPXQoXCIuLi8uLi9saWIvZ3VwXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxzPXQoXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIiksbD10KFwiLi4vLi4vbGliXCIpLnJhaXNlVG9Ub3AsYz10KFwiLi4vLi4vbGliXCIpLmNhbmNlbFRyYW5zaXRpb24sdT10KFwiLi9kYXRhX3ByZXBhcmF0aW9uX2hlbHBlclwiKSxoPXQoXCIuL2RhdGFfc3BsaXRfaGVscGVyc1wiKSxmPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpO2Z1bmN0aW9uIHAodCl7cmV0dXJuIE1hdGguY2VpbCh0LmNhbGNkYXRhLm1heExpbmVXaWR0aC8yKX1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuXCJjbGlwXCIrdC5fZnVsbExheW91dC5fdWlkK1wiX3Njcm9sbEFyZWFCb3R0b21DbGlwX1wiK2Uua2V5fWZ1bmN0aW9uIGcodCxlKXtyZXR1cm5cImNsaXBcIit0Ll9mdWxsTGF5b3V0Ll91aWQrXCJfY29sdW1uQm91bmRhcnlDbGlwcGF0aF9cIitlLmNhbGNkYXRhLmtleStcIl9cIitlLnNwZWNJbmRleH1mdW5jdGlvbiB2KHQpe3JldHVybltdLmNvbmNhdC5hcHBseShbXSx0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuX19kYXRhX199KX1mdW5jdGlvbiBtKHQsZSxyKXt2YXIgbz10LnNlbGVjdEFsbChcIi5cIituLmNuLnNjcm9sbGJhcktpdCkuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7by5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChuLmNuLnNjcm9sbGJhcktpdCwhMCkuc3R5bGUoXCJzaGFwZS1yZW5kZXJpbmdcIixcImdlb21ldHJpY1ByZWNpc2lvblwiKSxvLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5zY3JvbGxiYXJTdGF0ZTtlLnRvdGFsSGVpZ2h0PWZ1bmN0aW9uKHQpe3ZhciBlPXQucm93QmxvY2tzO3JldHVybiBJKGUsZS5sZW5ndGgtMSkrKGUubGVuZ3RoP0QoZVtlLmxlbmd0aC0xXSwxLzApOjEpfSh0KSxlLnNjcm9sbGFibGVBcmVhSGVpZ2h0PXQuZ3JvdXBIZWlnaHQtVCh0KSxlLmN1cnJlbnRseVZpc2libGVIZWlnaHQ9TWF0aC5taW4oZS50b3RhbEhlaWdodCxlLnNjcm9sbGFibGVBcmVhSGVpZ2h0KSxlLnJhdGlvPWUuY3VycmVudGx5VmlzaWJsZUhlaWdodC9lLnRvdGFsSGVpZ2h0LGUuYmFyTGVuZ3RoPU1hdGgubWF4KGUucmF0aW8qZS5jdXJyZW50bHlWaXNpYmxlSGVpZ2h0LG4uZ29sZGVuUmF0aW8qbi5zY3JvbGxiYXJXaWR0aCksZS5iYXJXaWdnbGVSb29tPWUuY3VycmVudGx5VmlzaWJsZUhlaWdodC1lLmJhckxlbmd0aCxlLndpZ2dsZVJvb209TWF0aC5tYXgoMCxlLnRvdGFsSGVpZ2h0LWUuc2Nyb2xsYWJsZUFyZWFIZWlnaHQpLGUudG9wWT0wPT09ZS5iYXJXaWdnbGVSb29tPzA6dC5zY3JvbGxZL2Uud2lnZ2xlUm9vbSplLmJhcldpZ2dsZVJvb20sZS5ib3R0b21ZPWUudG9wWStlLmJhckxlbmd0aCxlLmRyYWdNdWx0aXBsaWVyPWUud2lnZ2xlUm9vbS9lLmJhcldpZ2dsZVJvb219KS5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrKHQud2lkdGgrbi5zY3JvbGxiYXJXaWR0aC8yK24uc2Nyb2xsYmFyT2Zmc2V0KStcIiBcIitUKHQpK1wiKVwifSk7dmFyIHM9by5zZWxlY3RBbGwoXCIuXCIrbi5jbi5zY3JvbGxiYXIpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO3MuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQobi5jbi5zY3JvbGxiYXIsITApO3ZhciBsPXMuc2VsZWN0QWxsKFwiLlwiK24uY24uc2Nyb2xsYmFyU2xpZGVyKS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKTtsLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKG4uY24uc2Nyb2xsYmFyU2xpZGVyLCEwKSxsLmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXtyZXR1cm5cInRyYW5zbGF0ZSgwIFwiKyh0LnNjcm9sbGJhclN0YXRlLnRvcFl8fDApK1wiKVwifSk7dmFyIGM9bC5zZWxlY3RBbGwoXCIuXCIrbi5jbi5zY3JvbGxiYXJHbHlwaCkuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7Yy5lbnRlcigpLmFwcGVuZChcImxpbmVcIikuY2xhc3NlZChuLmNuLnNjcm9sbGJhckdseXBoLCEwKS5hdHRyKFwic3Ryb2tlXCIsXCJibGFja1wiKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsbi5zY3JvbGxiYXJXaWR0aCkuYXR0cihcInN0cm9rZS1saW5lY2FwXCIsXCJyb3VuZFwiKS5hdHRyKFwieTFcIixuLnNjcm9sbGJhcldpZHRoLzIpLGMuYXR0cihcInkyXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuc2Nyb2xsYmFyU3RhdGUuYmFyTGVuZ3RoLW4uc2Nyb2xsYmFyV2lkdGgvMn0pLmF0dHIoXCJzdHJva2Utb3BhY2l0eVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbkRyYWdJblByb2dyZXNzfHwhdC5zY3JvbGxiYXJTdGF0ZS5iYXJXaWdnbGVSb29tfHxyPzA6LjR9KSxjLnRyYW5zaXRpb24oKS5kZWxheSgwKS5kdXJhdGlvbigwKSxjLnRyYW5zaXRpb24oKS5kZWxheShuLnNjcm9sbGJhckhpZGVEZWxheSkuZHVyYXRpb24obi5zY3JvbGxiYXJIaWRlRHVyYXRpb24pLmF0dHIoXCJzdHJva2Utb3BhY2l0eVwiLDApO3ZhciB1PXMuc2VsZWN0QWxsKFwiLlwiK24uY24uc2Nyb2xsYmFyQ2FwdHVyZVpvbmUpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO3UuZW50ZXIoKS5hcHBlbmQoXCJsaW5lXCIpLmNsYXNzZWQobi5jbi5zY3JvbGxiYXJDYXB0dXJlWm9uZSwhMCkuYXR0cihcInN0cm9rZVwiLFwid2hpdGVcIikuYXR0cihcInN0cm9rZS1vcGFjaXR5XCIsLjAxKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsbi5zY3JvbGxiYXJDYXB0dXJlV2lkdGgpLmF0dHIoXCJzdHJva2UtbGluZWNhcFwiLFwiYnV0dFwiKS5hdHRyKFwieTFcIiwwKS5vbihcIm1vdXNlZG93blwiLGZ1bmN0aW9uKHIpe3ZhciBuPWkuZXZlbnQueSxhPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1yLnNjcm9sbGJhclN0YXRlLHM9bi1hLnRvcCxsPWkuc2NhbGUubGluZWFyKCkuZG9tYWluKFswLG8uc2Nyb2xsYWJsZUFyZWFIZWlnaHRdKS5yYW5nZShbMCxvLnRvdGFsSGVpZ2h0XSkuY2xhbXAoITApO28udG9wWTw9cyYmczw9by5ib3R0b21ZfHxTKGUsdCxudWxsLGwocy1vLmJhckxlbmd0aC8yKSkocil9KS5jYWxsKGkuYmVoYXZpb3IuZHJhZygpLm9yaWdpbihmdW5jdGlvbih0KXtyZXR1cm4gaS5ldmVudC5zdG9wUHJvcGFnYXRpb24oKSx0LnNjcm9sbGJhclN0YXRlLnNjcm9sbGJhclNjcm9sbEluUHJvZ3Jlc3M9ITAsdH0pLm9uKFwiZHJhZ1wiLFMoZSx0KSkub24oXCJkcmFnZW5kXCIsZnVuY3Rpb24oKXt9KSksdS5hdHRyKFwieTJcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5zY3JvbGxiYXJTdGF0ZS5zY3JvbGxhYmxlQXJlYUhlaWdodH0pLGUuX2NvbnRleHQuc3RhdGljUGxvdCYmKGMucmVtb3ZlKCksdS5yZW1vdmUoKSl9ZnVuY3Rpb24geSh0LGUscixzKXt2YXIgbD1mdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbChcIi5cIituLmNuLmNvbHVtbkNlbGwpLmRhdGEoaC5zcGxpdFRvQ2VsbHMsZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5V2l0aGluQmxvY2t9KTtyZXR1cm4gZS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChuLmNuLmNvbHVtbkNlbGwsITApLGUuZXhpdCgpLnJlbW92ZSgpLGV9KGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0QWxsKFwiLlwiK24uY24uY29sdW1uQ2VsbHMpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKG4uY24uY29sdW1uQ2VsbHMsITApLGUuZXhpdCgpLnJlbW92ZSgpLGV9KHIpKTshZnVuY3Rpb24odCl7dC5lYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5jYWxjZGF0YS5jZWxscy5mb250LG49dC5jb2x1bW4uc3BlY0luZGV4LGk9e3NpemU6XyhyLnNpemUsbixlKSxjb2xvcjpfKHIuY29sb3IsbixlKSxmYW1pbHk6XyhyLmZhbWlseSxuLGUpfTt0LnJvd051bWJlcj10LmtleSx0LmFsaWduPV8odC5jYWxjZGF0YS5jZWxscy5hbGlnbixuLGUpLHQuY2VsbEJvcmRlcldpZHRoPV8odC5jYWxjZGF0YS5jZWxscy5saW5lLndpZHRoLG4sZSksdC5mb250PWl9KX0obCksZnVuY3Rpb24odCl7dC5hdHRyKFwid2lkdGhcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW4uY29sdW1uV2lkdGh9KS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuY2VsbEJvcmRlcldpZHRofSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1pLnNlbGVjdCh0aGlzKTtmLnN0cm9rZShlLF8odC5jYWxjZGF0YS5jZWxscy5saW5lLmNvbG9yLHQuY29sdW1uLnNwZWNJbmRleCx0LnJvd051bWJlcikpLGYuZmlsbChlLF8odC5jYWxjZGF0YS5jZWxscy5maWxsLmNvbG9yLHQuY29sdW1uLnNwZWNJbmRleCx0LnJvd051bWJlcikpfSl9KGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0QWxsKFwiLlwiK24uY24uY2VsbFJlY3QpLmRhdGEoYS5yZXBlYXQsZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5V2l0aGluQmxvY2t9KTtyZXR1cm4gZS5lbnRlcigpLmFwcGVuZChcInJlY3RcIikuY2xhc3NlZChuLmNuLmNlbGxSZWN0LCEwKSxlfShsKSk7dmFyIGM9ZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoXCIuXCIrbi5jbi5jZWxsVGV4dCkuZGF0YShhLnJlcGVhdCxmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXlXaXRoaW5CbG9ja30pO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKFwidGV4dFwiKS5jbGFzc2VkKG4uY24uY2VsbFRleHQsITApLnN0eWxlKFwiY3Vyc29yXCIsZnVuY3Rpb24oKXtyZXR1cm5cImF1dG9cIn0pLm9uKFwibW91c2Vkb3duXCIsZnVuY3Rpb24oKXtpLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSksZX0oZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoXCIuXCIrbi5jbi5jZWxsVGV4dEhvbGRlcikuZGF0YShhLnJlcGVhdCxmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXlXaXRoaW5CbG9ja30pO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKG4uY24uY2VsbFRleHRIb2xkZXIsITApLnN0eWxlKFwic2hhcGUtcmVuZGVyaW5nXCIsXCJnZW9tZXRyaWNQcmVjaXNpb25cIiksZX0obCkpOyFmdW5jdGlvbih0KXt0LmVhY2goZnVuY3Rpb24odCl7by5mb250KGkuc2VsZWN0KHRoaXMpLHQuZm9udCl9KX0oYykseChjLGUscyx0KSxPKGwpfWZ1bmN0aW9uIHgodCxlLHIsYSl7dC50ZXh0KGZ1bmN0aW9uKHQpe3ZhciBlPXQuY29sdW1uLnNwZWNJbmRleCxyPXQucm93TnVtYmVyLGE9dC52YWx1ZSxvPVwic3RyaW5nXCI9PXR5cGVvZiBhLHM9byYmYS5tYXRjaCgvPGJyPi9pKSxsPSFvfHxzO3QubWF5SGF2ZU1hcmt1cD1vJiZhLm1hdGNoKC9bPCY+XS8pO3ZhciBjLHU9XCJzdHJpbmdcIj09dHlwZW9mKGM9YSkmJmMubWF0Y2gobi5sYXRleENoZWNrKTt0LmxhdGV4PXU7dmFyIGgsZixwPXU/XCJcIjpfKHQuY2FsY2RhdGEuY2VsbHMucHJlZml4LGUscil8fFwiXCIsZD11P1wiXCI6Xyh0LmNhbGNkYXRhLmNlbGxzLnN1ZmZpeCxlLHIpfHxcIlwiLGc9dT9udWxsOl8odC5jYWxjZGF0YS5jZWxscy5mb3JtYXQsZSxyKXx8bnVsbCx2PXArKGc/aS5mb3JtYXQoZykodC52YWx1ZSk6dC52YWx1ZSkrZDtpZih0LndyYXBwaW5nTmVlZGVkPSF0LndyYXBwZWQmJiFsJiYhdSYmKGg9Yih2KSksdC5jZWxsSGVpZ2h0TWF5SW5jcmVhc2U9c3x8dXx8dC5tYXlIYXZlTWFya3VwfHwodm9pZCAwPT09aD9iKHYpOmgpLHQubmVlZHNDb252ZXJ0VG9Uc3BhbnM9dC5tYXlIYXZlTWFya3VwfHx0LndyYXBwaW5nTmVlZGVkfHx0LmxhdGV4LHQud3JhcHBpbmdOZWVkZWQpe3ZhciBtPShcIiBcIj09PW4ud3JhcFNwbGl0Q2hhcmFjdGVyP3YucmVwbGFjZSgvPGEgaHJlZj0vZ2ksXCI8YV9ocmVmPVwiKTp2KS5zcGxpdChuLndyYXBTcGxpdENoYXJhY3RlcikseT1cIiBcIj09PW4ud3JhcFNwbGl0Q2hhcmFjdGVyP20ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoLzxhX2hyZWY9L2dpLFwiPGEgaHJlZj1cIil9KTptO3QuZnJhZ21lbnRzPXkubWFwKGZ1bmN0aW9uKHQpe3JldHVybnt0ZXh0OnQsd2lkdGg6bnVsbH19KSx0LmZyYWdtZW50cy5wdXNoKHtmcmFnbWVudDpuLndyYXBTcGFjZXIsd2lkdGg6bnVsbH0pLGY9eS5qb2luKG4ubGluZUJyZWFrZXIpK24ubGluZUJyZWFrZXIrbi53cmFwU3BhY2VyfWVsc2UgZGVsZXRlIHQuZnJhZ21lbnRzLGY9djtyZXR1cm4gZn0pLmF0dHIoXCJkeVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5lZWRzQ29udmVydFRvVHNwYW5zPzA6XCIwLjc1ZW1cIn0pLmVhY2goZnVuY3Rpb24odCl7dmFyIG89aS5zZWxlY3QodGhpcyksbD10LndyYXBwaW5nTmVlZGVkP0M6TDt0Lm5lZWRzQ29udmVydFRvVHNwYW5zP3MuY29udmVydFRvVHNwYW5zKG8sYSxsKHIsdGhpcyxlLGEsdCkpOmkuc2VsZWN0KHRoaXMucGFyZW50Tm9kZSkuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKFwiK3oodCkrXCIgXCIrbi5jZWxsUGFkK1wiKVwifSkuYXR0cihcInRleHQtYW5jaG9yXCIsZnVuY3Rpb24odCl7cmV0dXJue2xlZnQ6XCJzdGFydFwiLGNlbnRlcjpcIm1pZGRsZVwiLHJpZ2h0OlwiZW5kXCJ9W3QuYWxpZ25dfSl9KX1mdW5jdGlvbiBiKHQpe3JldHVybi0xIT09dC5pbmRleE9mKG4ud3JhcFNwbGl0Q2hhcmFjdGVyKX1mdW5jdGlvbiBfKHQsZSxyKXtpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgbj10W01hdGgubWluKGUsdC5sZW5ndGgtMSldO3JldHVybiBBcnJheS5pc0FycmF5KG4pP25bTWF0aC5taW4ocixuLmxlbmd0aC0xKV06bn1yZXR1cm4gdH1mdW5jdGlvbiB3KHQsZSxyKXt0LnRyYW5zaXRpb24oKS5lYXNlKG4ucmVsZWFzZVRyYW5zaXRpb25FYXNlKS5kdXJhdGlvbihuLnJlbGVhc2VUcmFuc2l0aW9uRHVyYXRpb24pLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIitlLngrXCIgXCIrcitcIilcIil9ZnVuY3Rpb24gayh0KXtyZXR1cm5cImNlbGxzXCI9PT10LnR5cGV9ZnVuY3Rpb24gQSh0KXtyZXR1cm5cImhlYWRlclwiPT09dC50eXBlfWZ1bmN0aW9uIFQodCl7cmV0dXJuKHQucm93QmxvY2tzLmxlbmd0aD90LnJvd0Jsb2Nrc1swXS5hdXhpbGlhcnlCbG9ja3M6W10pLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0K0QoZSwxLzApfSwwKX1mdW5jdGlvbiBNKHQsZSxyKXt2YXIgbj12KGUpWzBdO2lmKHZvaWQgMCE9PW4pe3ZhciBpPW4ucm93QmxvY2tzLGE9bi5jYWxjZGF0YSxvPUkoaSxpLmxlbmd0aCkscz1uLmNhbGNkYXRhLmdyb3VwSGVpZ2h0LVQobiksbD1hLnNjcm9sbFk9TWF0aC5tYXgoMCxNYXRoLm1pbihvLXMsYS5zY3JvbGxZKSksYz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPVtdLGk9MCxhPTA7YTx0Lmxlbmd0aDthKyspe2Zvcih2YXIgbz10W2FdLHM9by5yb3dzLGw9MCxjPTA7YzxzLmxlbmd0aDtjKyspbCs9c1tjXS5yb3dIZWlnaHQ7by5hbGxSb3dzSGVpZ2h0PWwsZTxpK2wmJmUrcj5pJiZuLnB1c2goYSksaSs9bH1yZXR1cm4gbn0oaSxsLHMpOzE9PT1jLmxlbmd0aCYmKGNbMF09PT1pLmxlbmd0aC0xP2MudW5zaGlmdChjWzBdLTEpOmMucHVzaChjWzBdKzEpKSxjWzBdJTImJmMucmV2ZXJzZSgpLGUuZWFjaChmdW5jdGlvbih0LGUpe3QucGFnZT1jW2VdLHQuc2Nyb2xsWT1sfSksZS5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoMCBcIisoSSh0LnJvd0Jsb2Nrcyx0LnBhZ2UpLXQuc2Nyb2xsWSkrXCIpXCJ9KSx0JiYoRSh0LHIsZSxjLG4ucHJldlBhZ2VzLG4sMCksRSh0LHIsZSxjLG4ucHJldlBhZ2VzLG4sMSksbShyLHQpKX19ZnVuY3Rpb24gUyh0LGUscixhKXtyZXR1cm4gZnVuY3Rpb24obyl7dmFyIHM9by5jYWxjZGF0YT9vLmNhbGNkYXRhOm8sbD1lLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gcy5rZXk9PT10LmtleX0pLGM9cnx8cy5zY3JvbGxiYXJTdGF0ZS5kcmFnTXVsdGlwbGllcix1PXMuc2Nyb2xsWTtzLnNjcm9sbFk9dm9pZCAwPT09YT9zLnNjcm9sbFkrYyppLmV2ZW50LmR5OmE7dmFyIGg9bC5zZWxlY3RBbGwoXCIuXCIrbi5jbi55Q29sdW1uKS5zZWxlY3RBbGwoXCIuXCIrbi5jbi5jb2x1bW5CbG9jaykuZmlsdGVyKGspO3JldHVybiBNKHQsaCxsKSxzLnNjcm9sbFk9PT11fX1mdW5jdGlvbiBFKHQsZSxyLG4saSxhLG8pe25bb10hPT1pW29dJiYoY2xlYXJUaW1lb3V0KGEuY3VycmVudFJlcGFpbnRbb10pLGEuY3VycmVudFJlcGFpbnRbb109c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBhPXIuZmlsdGVyKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9PT1vJiZuW2VdIT09aVtlXX0pO3kodCxlLGEsciksaVtvXT1uW29dfSkpfWZ1bmN0aW9uIEModCxlLHIsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89aS5zZWxlY3QoZS5wYXJlbnROb2RlKTtvLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5mcmFnbWVudHM7by5zZWxlY3RBbGwoXCJ0c3Bhbi5saW5lXCIpLmVhY2goZnVuY3Rpb24odCxyKXtlW3JdLndpZHRoPXRoaXMuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCl9KTt2YXIgcixpLGE9ZVtlLmxlbmd0aC0xXS53aWR0aCxzPWUuc2xpY2UoMCwtMSksbD1bXSxjPTAsdT10LmNvbHVtbi5jb2x1bW5XaWR0aC0yKm4uY2VsbFBhZDtmb3IodC52YWx1ZT1cIlwiO3MubGVuZ3RoOyljKyhpPShyPXMuc2hpZnQoKSkud2lkdGgrYSk+dSYmKHQudmFsdWUrPWwuam9pbihuLndyYXBTcGFjZXIpK24ubGluZUJyZWFrZXIsbD1bXSxjPTApLGwucHVzaChyLnRleHQpLGMrPWk7YyYmKHQudmFsdWUrPWwuam9pbihuLndyYXBTcGFjZXIpKSx0LndyYXBwZWQ9ITB9KSxvLnNlbGVjdEFsbChcInRzcGFuLmxpbmVcIikucmVtb3ZlKCkseChvLnNlbGVjdChcIi5cIituLmNuLmNlbGxUZXh0KSxyLHQsYSksaS5zZWxlY3QoZS5wYXJlbnROb2RlLnBhcmVudE5vZGUpLmNhbGwoTyl9fWZ1bmN0aW9uIEwodCxlLHIsYSxvKXtyZXR1cm4gZnVuY3Rpb24oKXtpZighby5zZXR0bGVkWSl7dmFyIHM9aS5zZWxlY3QoZS5wYXJlbnROb2RlKSxsPVIobyksYz1vLmtleS1sLmZpcnN0Um93SW5kZXgsdT1sLnJvd3NbY10ucm93SGVpZ2h0LGg9by5jZWxsSGVpZ2h0TWF5SW5jcmVhc2U/ZS5wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCsyKm4uY2VsbFBhZDp1LGY9TWF0aC5tYXgoaCx1KTtmLWwucm93c1tjXS5yb3dIZWlnaHQmJihsLnJvd3NbY10ucm93SGVpZ2h0PWYsdC5zZWxlY3RBbGwoXCIuXCIrbi5jbi5jb2x1bW5DZWxsKS5jYWxsKE8pLE0obnVsbCx0LmZpbHRlcihrKSwwKSxtKHIsYSwhMCkpLHMuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGU9aS5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5zZWxlY3QoXCIuXCIrbi5jbi5jZWxsUmVjdCkubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9dGhpcy50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpLGE9ZS50b3AtdC50b3ArKHI/ci5tYXRyaXguZjpuLmNlbGxQYWQpO3JldHVyblwidHJhbnNsYXRlKFwiK3oobyxpLnNlbGVjdCh0aGlzLnBhcmVudE5vZGUpLnNlbGVjdChcIi5cIituLmNuLmNlbGxUZXh0SG9sZGVyKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpK1wiIFwiK2ErXCIpXCJ9KSxvLnNldHRsZWRZPSEwfX19ZnVuY3Rpb24geih0LGUpe3N3aXRjaCh0LmFsaWduKXtjYXNlXCJsZWZ0XCI6cmV0dXJuIG4uY2VsbFBhZDtjYXNlXCJyaWdodFwiOnJldHVybiB0LmNvbHVtbi5jb2x1bW5XaWR0aC0oZXx8MCktbi5jZWxsUGFkO2Nhc2VcImNlbnRlclwiOnJldHVybih0LmNvbHVtbi5jb2x1bW5XaWR0aC0oZXx8MCkpLzI7ZGVmYXVsdDpyZXR1cm4gbi5jZWxsUGFkfX1mdW5jdGlvbiBPKHQpe3QuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3ZhciBlPXQucm93QmxvY2tzWzBdLmF1eGlsaWFyeUJsb2Nrcy5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtEKGUsMS8wKX0sMCk7cmV0dXJuXCJ0cmFuc2xhdGUoMCBcIisoRChSKHQpLHQua2V5KStlKStcIilcIn0pLnNlbGVjdEFsbChcIi5cIituLmNuLmNlbGxSZWN0KS5hdHRyKFwiaGVpZ2h0XCIsZnVuY3Rpb24odCl7cmV0dXJuKGU9Uih0KSxyPXQua2V5LGUucm93c1tyLWUuZmlyc3RSb3dJbmRleF0pLnJvd0hlaWdodDt2YXIgZSxyfSl9ZnVuY3Rpb24gSSh0LGUpe2Zvcih2YXIgcj0wLG49ZS0xO24+PTA7bi0tKXIrPVAodFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gRCh0LGUpe2Zvcih2YXIgcj0wLG49MDtuPHQucm93cy5sZW5ndGgmJnQucm93c1tuXS5yb3dJbmRleDxlO24rKylyKz10LnJvd3Nbbl0ucm93SGVpZ2h0O3JldHVybiByfWZ1bmN0aW9uIFAodCl7dmFyIGU9dC5hbGxSb3dzSGVpZ2h0O2lmKHZvaWQgMCE9PWUpcmV0dXJuIGU7Zm9yKHZhciByPTAsbj0wO248dC5yb3dzLmxlbmd0aDtuKyspcis9dC5yb3dzW25dLnJvd0hlaWdodDtyZXR1cm4gdC5hbGxSb3dzSGVpZ2h0PXIscn1mdW5jdGlvbiBSKHQpe3JldHVybiB0LnJvd0Jsb2Nrc1t0LnBhZ2VdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPSF0Ll9jb250ZXh0LnN0YXRpY1Bsb3Qscz10Ll9mdWxsTGF5b3V0Ll9wYXBlci5zZWxlY3RBbGwoXCIuXCIrbi5jbi50YWJsZSkuZGF0YShlLm1hcChmdW5jdGlvbihlKXt2YXIgcj1hLnVud3JhcChlKS50cmFjZTtyZXR1cm4gdSh0LHIpfSksYS5rZXlGdW4pO3MuZXhpdCgpLnJlbW92ZSgpLHMuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQobi5jbi50YWJsZSwhMCkuYXR0cihcIm92ZXJmbG93XCIsXCJ2aXNpYmxlXCIpLnN0eWxlKFwiYm94LXNpemluZ1wiLFwiY29udGVudC1ib3hcIikuc3R5bGUoXCJwb3NpdGlvblwiLFwiYWJzb2x1dGVcIikuc3R5bGUoXCJsZWZ0XCIsMCkuc3R5bGUoXCJvdmVyZmxvd1wiLFwidmlzaWJsZVwiKS5zdHlsZShcInNoYXBlLXJlbmRlcmluZ1wiLFwiY3Jpc3BFZGdlc1wiKS5zdHlsZShcInBvaW50ZXItZXZlbnRzXCIsXCJhbGxcIikscy5hdHRyKFwid2lkdGhcIixmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aCt0LnNpemUubCt0LnNpemUucn0pLmF0dHIoXCJoZWlnaHRcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHQrdC5zaXplLnQrdC5zaXplLmJ9KS5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrdC50cmFuc2xhdGVYK1wiLFwiK3QudHJhbnNsYXRlWStcIilcIn0pO3ZhciBmPXMuc2VsZWN0QWxsKFwiLlwiK24uY24udGFibGVDb250cm9sVmlldykuZGF0YShhLnJlcGVhdCxhLmtleUZ1bikseD1mLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKG4uY24udGFibGVDb250cm9sVmlldywhMCkuc3R5bGUoXCJib3gtc2l6aW5nXCIsXCJjb250ZW50LWJveFwiKTtyJiZ4Lm9uKFwibW91c2Vtb3ZlXCIsZnVuY3Rpb24oZSl7Zi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGU9PT10fSkuY2FsbChtLHQpfSkub24oXCJtb3VzZXdoZWVsXCIsZnVuY3Rpb24oZSl7aWYoIWUuc2Nyb2xsYmFyU3RhdGUud2hlZWxpbmcpe2Uuc2Nyb2xsYmFyU3RhdGUud2hlZWxpbmc9ITA7dmFyIHI9ZS5zY3JvbGxZK2kuZXZlbnQuZGVsdGFZO1ModCxmLG51bGwscikoZSl8fChpLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLGkuZXZlbnQucHJldmVudERlZmF1bHQoKSksZS5zY3JvbGxiYXJTdGF0ZS53aGVlbGluZz0hMX19KS5jYWxsKG0sdCwhMCksZi5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrdC5zaXplLmwrXCIgXCIrdC5zaXplLnQrXCIpXCJ9KTt2YXIgYj1mLnNlbGVjdEFsbChcIi5cIituLmNuLnNjcm9sbEJhY2tncm91bmQpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO2IuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpLmNsYXNzZWQobi5jbi5zY3JvbGxCYWNrZ3JvdW5kLCEwKS5hdHRyKFwiZmlsbFwiLFwibm9uZVwiKSxiLmF0dHIoXCJ3aWR0aFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRofSkuYXR0cihcImhlaWdodFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodH0pLGYuZWFjaChmdW5jdGlvbihlKXtvLnNldENsaXBVcmwoaS5zZWxlY3QodGhpcyksZCh0LGUpLHQpfSk7dmFyIF89Zi5zZWxlY3RBbGwoXCIuXCIrbi5jbi55Q29sdW1uKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbnN9LGEua2V5RnVuKTtfLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKG4uY24ueUNvbHVtbiwhMCksXy5leGl0KCkucmVtb3ZlKCksXy5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrdC54K1wiIDApXCJ9KSxyJiZfLmNhbGwoaS5iZWhhdmlvci5kcmFnKCkub3JpZ2luKGZ1bmN0aW9uKGUpe3JldHVybiB3KGkuc2VsZWN0KHRoaXMpLGUsLW4udXBsaWZ0KSxsKHRoaXMpLGUuY2FsY2RhdGEuY29sdW1uRHJhZ0luUHJvZ3Jlc3M9ITAsbShmLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gZS5jYWxjZGF0YS5rZXk9PT10LmtleX0pLHQpLGV9KS5vbihcImRyYWdcIixmdW5jdGlvbih0KXt2YXIgZT1pLnNlbGVjdCh0aGlzKSxyPWZ1bmN0aW9uKGUpe3JldHVybih0PT09ZT9pLmV2ZW50Lng6ZS54KStlLmNvbHVtbldpZHRoLzJ9O3QueD1NYXRoLm1heCgtbi5vdmVyZHJhZyxNYXRoLm1pbih0LmNhbGNkYXRhLndpZHRoK24ub3ZlcmRyYWctdC5jb2x1bW5XaWR0aCxpLmV2ZW50LngpKSx2KF8pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5jYWxjZGF0YS5rZXk9PT10LmNhbGNkYXRhLmtleX0pLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gcih0KS1yKGUpfSkuZm9yRWFjaChmdW5jdGlvbihlLHIpe2UueEluZGV4PXIsZS54PXQ9PT1lP2UueDplLnhTY2FsZShlKX0pLF8uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0IT09ZX0pLnRyYW5zaXRpb24oKS5lYXNlKG4udHJhbnNpdGlvbkVhc2UpLmR1cmF0aW9uKG4udHJhbnNpdGlvbkR1cmF0aW9uKS5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrdC54K1wiIDApXCJ9KSxlLmNhbGwoYykuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK3QueCtcIiAtXCIrbi51cGxpZnQrXCIgKVwiKX0pLm9uKFwiZHJhZ2VuZFwiLGZ1bmN0aW9uKGUpe3ZhciByPWkuc2VsZWN0KHRoaXMpLG49ZS5jYWxjZGF0YTtlLng9ZS54U2NhbGUoZSksZS5jYWxjZGF0YS5jb2x1bW5EcmFnSW5Qcm9ncmVzcz0hMSx3KHIsZSwwKSxmdW5jdGlvbih0LGUscil7dmFyIG49ZS5nZENvbHVtbnNPcmlnaW5hbE9yZGVyO2UuZ2RDb2x1bW5zLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gcltuLmluZGV4T2YodCldLXJbbi5pbmRleE9mKGUpXX0pLGUuY29sdW1ub3JkZXI9cix0LmVtaXQoXCJwbG90bHlfcmVzdHlsZVwiKX0odCxuLG4uY29sdW1ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQueEluZGV4fSkpfSkpLF8uZWFjaChmdW5jdGlvbihlKXtvLnNldENsaXBVcmwoaS5zZWxlY3QodGhpcyksZyh0LGUpLHQpfSk7dmFyIFQ9Xy5zZWxlY3RBbGwoXCIuXCIrbi5jbi5jb2x1bW5CbG9jaykuZGF0YShoLnNwbGl0VG9QYW5lbHMsYS5rZXlGdW4pO1QuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQobi5jbi5jb2x1bW5CbG9jaywhMCkuYXR0cihcImlkXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5fSksVC5zdHlsZShcImN1cnNvclwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmRyYWdIYW5kbGU/XCJldy1yZXNpemVcIjp0LmNhbGNkYXRhLnNjcm9sbGJhclN0YXRlLmJhcldpZ2dsZVJvb20/XCJucy1yZXNpemVcIjpcImRlZmF1bHRcIn0pO3ZhciBFPVQuZmlsdGVyKEEpLEM9VC5maWx0ZXIoayk7ciYmQy5jYWxsKGkuYmVoYXZpb3IuZHJhZygpLm9yaWdpbihmdW5jdGlvbih0KXtyZXR1cm4gaS5ldmVudC5zdG9wUHJvcGFnYXRpb24oKSx0fSkub24oXCJkcmFnXCIsUyh0LGYsLTEpKS5vbihcImRyYWdlbmRcIixmdW5jdGlvbigpe30pKSx5KHQsZixFLFQpLHkodCxmLEMsVCk7dmFyIEw9Zi5zZWxlY3RBbGwoXCIuXCIrbi5jbi5zY3JvbGxBcmVhQ2xpcCkuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7TC5lbnRlcigpLmFwcGVuZChcImNsaXBQYXRoXCIpLmNsYXNzZWQobi5jbi5zY3JvbGxBcmVhQ2xpcCwhMCkuYXR0cihcImlkXCIsZnVuY3Rpb24oZSl7cmV0dXJuIGQodCxlKX0pO3ZhciB6PUwuc2VsZWN0QWxsKFwiLlwiK24uY24uc2Nyb2xsQXJlYUNsaXBSZWN0KS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKTt6LmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKS5jbGFzc2VkKG4uY24uc2Nyb2xsQXJlYUNsaXBSZWN0LCEwKS5hdHRyKFwieFwiLC1uLm92ZXJkcmFnKS5hdHRyKFwieVwiLC1uLnVwbGlmdCkuYXR0cihcImZpbGxcIixcIm5vbmVcIiksei5hdHRyKFwid2lkdGhcIixmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aCsyKm4ub3ZlcmRyYWd9KS5hdHRyKFwiaGVpZ2h0XCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0K24udXBsaWZ0fSksXy5zZWxlY3RBbGwoXCIuXCIrbi5jbi5jb2x1bW5Cb3VuZGFyeSkuZGF0YShhLnJlcGVhdCxhLmtleUZ1bikuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQobi5jbi5jb2x1bW5Cb3VuZGFyeSwhMCk7dmFyIE89Xy5zZWxlY3RBbGwoXCIuXCIrbi5jbi5jb2x1bW5Cb3VuZGFyeUNsaXBwYXRoKS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKTtPLmVudGVyKCkuYXBwZW5kKFwiY2xpcFBhdGhcIikuY2xhc3NlZChuLmNuLmNvbHVtbkJvdW5kYXJ5Q2xpcHBhdGgsITApLE8uYXR0cihcImlkXCIsZnVuY3Rpb24oZSl7cmV0dXJuIGcodCxlKX0pO3ZhciBJPU8uc2VsZWN0QWxsKFwiLlwiK24uY24uY29sdW1uQm91bmRhcnlSZWN0KS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKTtJLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKS5jbGFzc2VkKG4uY24uY29sdW1uQm91bmRhcnlSZWN0LCEwKS5hdHRyKFwiZmlsbFwiLFwibm9uZVwiKSxJLmF0dHIoXCJ3aWR0aFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbldpZHRoKzIqcCh0KX0pLmF0dHIoXCJoZWlnaHRcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5jYWxjZGF0YS5oZWlnaHQrMipwKHQpK24udXBsaWZ0fSkuYXR0cihcInhcIixmdW5jdGlvbih0KXtyZXR1cm4tcCh0KX0pLmF0dHIoXCJ5XCIsZnVuY3Rpb24odCl7cmV0dXJuLXAodCl9KSxNKG51bGwsQyxmKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvZ3VwXCI6Njk5LFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCI6NzI1LFwiLi9jb25zdGFudHNcIjoxMTU3LFwiLi9kYXRhX3ByZXBhcmF0aW9uX2hlbHBlclwiOjExNTgsXCIuL2RhdGFfc3BsaXRfaGVscGVyc1wiOjExNTksZDM6MTU1fV0sMTE2MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9ib3gvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXt5Om4ueSx4Om4ueCx4MDpuLngwLHkwOm4ueTAsbmFtZTppKHt9LG4ubmFtZSx7fSksb3JpZW50YXRpb246aSh7fSxuLm9yaWVudGF0aW9uLHt9KSxiYW5kd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxlZGl0VHlwZTpcImNhbGNcIn0sc2NhbGVncm91cDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcImNhbGNcIn0sc2NhbGVtb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ3aWR0aFwiLFwiY291bnRcIl0sZGZsdDpcIndpZHRoXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHNwYW5tb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJzb2Z0XCIsXCJoYXJkXCIsXCJtYW51YWxcIl0sZGZsdDpcInNvZnRcIixlZGl0VHlwZTpcImNhbGNcIn0sc3Bhbjp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixpdGVtczpbe3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImNhbGNcIn0se3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImNhbGNcIn1dLGVkaXRUeXBlOlwiY2FsY1wifSxsaW5lOntjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJzdHlsZVwifSx3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MixlZGl0VHlwZTpcInN0eWxlXCJ9LGVkaXRUeXBlOlwicGxvdFwifSxmaWxsY29sb3I6bi5maWxsY29sb3IscG9pbnRzOmkoe30sbi5ib3hwb2ludHMse30pLGppdHRlcjppKHt9LG4uaml0dGVyLHt9KSxwb2ludHBvczppKHt9LG4ucG9pbnRwb3Mse30pLHdpZHRoOmkoe30sbi53aWR0aCx7fSksbWFya2VyOm4ubWFya2VyLHRleHQ6bi50ZXh0LGhvdmVydGV4dDpuLmhvdmVydGV4dCxob3ZlcnRlbXBsYXRlOm4uaG92ZXJ0ZW1wbGF0ZSxib3g6e3Zpc2libGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMSxlZGl0VHlwZTpcInBsb3RcIn0sd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0Oi4yNSxlZGl0VHlwZTpcInBsb3RcIn0sZmlsbGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcInN0eWxlXCJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcInN0eWxlXCJ9LHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZWRpdFR5cGU6XCJzdHlsZVwifSxlZGl0VHlwZTpcInN0eWxlXCJ9LGVkaXRUeXBlOlwicGxvdFwifSxtZWFubGluZTp7dmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwicGxvdFwifSxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJzdHlsZVwifSx3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGVkaXRUeXBlOlwic3R5bGVcIn0sZWRpdFR5cGU6XCJwbG90XCJ9LHNpZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImJvdGhcIixcInBvc2l0aXZlXCIsXCJuZWdhdGl2ZVwiXSxkZmx0OlwiYm90aFwiLGVkaXRUeXBlOlwiY2FsY1wifSxvZmZzZXRncm91cDpuLm9mZnNldGdyb3VwLGFsaWdubWVudGdyb3VwOm4uYWxpZ25tZW50Z3JvdXAsc2VsZWN0ZWQ6bi5zZWxlY3RlZCx1bnNlbGVjdGVkOm4udW5zZWxlY3RlZCxob3Zlcm9uOnt2YWxUeXBlOlwiZmxhZ2xpc3RcIixmbGFnczpbXCJ2aW9saW5zXCIsXCJwb2ludHNcIixcImtkZVwiXSxkZmx0OlwidmlvbGlucytwb2ludHMra2RlXCIsZXh0cmFzOltcImFsbFwiXSxlZGl0VHlwZTpcInN0eWxlXCJ9fX0se1wiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uL2JveC9hdHRyaWJ1dGVzXCI6ODYyfV0sMTE2NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksYT10KFwiLi4vYm94L2NhbGNcIiksbz10KFwiLi9oZWxwZXJzXCIpLHM9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNO2Z1bmN0aW9uIGwodCxlLHIpe3ZhciBpPWUubWF4LWUubWluO2lmKCFpKXJldHVybiB0LmJhbmR3aWR0aD90LmJhbmR3aWR0aDowO2lmKHQuYmFuZHdpZHRoKXJldHVybiBNYXRoLm1heCh0LmJhbmR3aWR0aCxpLzFlNCk7dmFyIGE9ci5sZW5ndGgsbz1uLnN0ZGV2KHIsYS0xLGUubWVhbik7cmV0dXJuIE1hdGgubWF4KGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMS4wNTkqTWF0aC5taW4oZSxyLzEuMzQ5KSpNYXRoLnBvdyh0LC0uMil9KGEsbyxlLnEzLWUucTEpLGkvMTAwKX1mdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBhLG89dC5zcGFubW9kZSxsPXQuc3Bhbnx8W10sYz1bZS5taW4sZS5tYXhdLHU9W2UubWluLTIqbixlLm1heCsyKm5dO2Z1bmN0aW9uIGgobil7dmFyIGk9bFtuXSxhPVwibXVsdGljYXRlZ29yeVwiPT09ci50eXBlP3IucjJjKGkpOnIuZDJjKGksMCx0W2UudmFsTGV0dGVyK1wiY2FsZW5kYXJcIl0pO3JldHVybiBhPT09cz91W25dOmF9dmFyIGY9e3R5cGU6XCJsaW5lYXJcIixyYW5nZTphPVwic29mdFwiPT09bz91OlwiaGFyZFwiPT09bz9jOltoKDApLGgoMSldfTtyZXR1cm4gaS5zZXRDb252ZXJ0KGYpLGYuY2xlYW5SYW5nZSgpLGF9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9YSh0LGUpO2lmKHJbMF0udC5lbXB0eSlyZXR1cm4gcjtmb3IodmFyIHM9dC5fZnVsbExheW91dCx1PWkuZ2V0RnJvbUlkKHQsZVtcImhcIj09PWUub3JpZW50YXRpb24/XCJ4YXhpc1wiOlwieWF4aXNcIl0pLGg9MS8wLGY9LTEvMCxwPTAsZD0wLGc9MDtnPHIubGVuZ3RoO2crKyl7dmFyIHY9cltnXSxtPXYucHRzLm1hcChvLmV4dHJhY3RWYWwpLHk9di5iYW5kd2lkdGg9bChlLHYsbSkseD12LnNwYW49YyhlLHYsdSx5KTtpZih2Lm1pbj09PXYubWF4JiYwPT09eSl4PXYuc3Bhbj1bdi5taW4sdi5tYXhdLHYuZGVuc2l0eT1be3Y6MSx0OnhbMF19XSx2LmJhbmR3aWR0aD15LHA9TWF0aC5tYXgocCwxKTtlbHNle3ZhciBiPXhbMV0teFswXSxfPU1hdGguY2VpbChiLyh5LzMpKSx3PWIvXztpZighaXNGaW5pdGUodyl8fCFpc0Zpbml0ZShfKSlyZXR1cm4gbi5lcnJvcihcIlNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggY29tcHV0aW5nIHRoZSB2aW9saW4gc3BhblwiKSxyWzBdLnQuZW1wdHk9ITAscjt2YXIgaz1vLm1ha2VLREUodixlLG0pO3YuZGVuc2l0eT1uZXcgQXJyYXkoXyk7Zm9yKHZhciBBPTAsVD14WzBdO1Q8eFsxXSt3LzI7QSsrLFQrPXcpe3ZhciBNPWsoVCk7di5kZW5zaXR5W0FdPXt2Ok0sdDpUfSxwPU1hdGgubWF4KHAsTSl9fWQ9TWF0aC5tYXgoZCxtLmxlbmd0aCksaD1NYXRoLm1pbihoLHhbMF0pLGY9TWF0aC5tYXgoZix4WzFdKX12YXIgUz1pLmZpbmRFeHRyZW1lcyh1LFtoLGZdLHtwYWRkZWQ6ITB9KTtpZihlLl9leHRyZW1lc1t1Ll9pZF09UyxlLndpZHRoKXJbMF0udC5tYXhLREU9cDtlbHNle3ZhciBFPXMuX3Zpb2xpblNjYWxlR3JvdXBTdGF0cyxDPWUuc2NhbGVncm91cCxMPUVbQ107TD8oTC5tYXhLREU9TWF0aC5tYXgoTC5tYXhLREUscCksTC5tYXhDb3VudD1NYXRoLm1heChMLm1heENvdW50LGQpKTpFW0NdPXttYXhLREU6cCxtYXhDb3VudDpkfX1yZXR1cm4gclswXS50LmxhYmVscy5rZGU9bi5fKHQsXCJrZGU6XCIpLHJ9fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9ib3gvY2FsY1wiOjg2MyxcIi4vaGVscGVyc1wiOjExNjd9XSwxMTY1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2JveC9jcm9zc190cmFjZV9jYWxjXCIpLnNldFBvc2l0aW9uT2Zmc2V0LGk9W1widlwiLFwiaFwiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jYWxjZGF0YSxhPWUueGF4aXMsbz1lLnlheGlzLHM9MDtzPGkubGVuZ3RoO3MrKyl7Zm9yKHZhciBsPWlbc10sYz1cImhcIj09PWw/bzphLHU9W10saD0wO2g8ci5sZW5ndGg7aCsrKXt2YXIgZj1yW2hdLHA9ZlswXS50LGQ9ZlswXS50cmFjZTshMCE9PWQudmlzaWJsZXx8XCJ2aW9saW5cIiE9PWQudHlwZXx8cC5lbXB0eXx8ZC5vcmllbnRhdGlvbiE9PWx8fGQueGF4aXMhPT1hLl9pZHx8ZC55YXhpcyE9PW8uX2lkfHx1LnB1c2goaCl9bihcInZpb2xpblwiLHQsdSxjKX19fSx7XCIuLi9ib3gvY3Jvc3NfdHJhY2VfY2FsY1wiOjg2NH1dLDExNjY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksYT10KFwiLi4vYm94L2RlZmF1bHRzXCIpLG89dChcIi4vYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWZ1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UyKHQsZSxvLHIsaSl9aWYoYS5oYW5kbGVTYW1wbGVEZWZhdWx0cyh0LGUsbCxzKSwhMSE9PWUudmlzaWJsZSl7bChcImJhbmR3aWR0aFwiKSxsKFwic2lkZVwiKSxsKFwid2lkdGhcIil8fChsKFwic2NhbGVncm91cFwiLGUubmFtZSksbChcInNjYWxlbW9kZVwiKSk7dmFyIHUsaD1sKFwic3BhblwiKTtBcnJheS5pc0FycmF5KGgpJiYodT1cIm1hbnVhbFwiKSxsKFwic3Bhbm1vZGVcIix1KTt2YXIgZj1sKFwibGluZS5jb2xvclwiLCh0Lm1hcmtlcnx8e30pLmNvbG9yfHxyKSxwPWwoXCJsaW5lLndpZHRoXCIpLGQ9bChcImZpbGxjb2xvclwiLGkuYWRkT3BhY2l0eShlLmxpbmUuY29sb3IsLjUpKTthLmhhbmRsZVBvaW50c0RlZmF1bHRzKHQsZSxsLHtwcmVmaXg6XCJcIn0pO3ZhciBnPWMoXCJib3gud2lkdGhcIiksdj1jKFwiYm94LmZpbGxjb2xvclwiLGQpLG09YyhcImJveC5saW5lLmNvbG9yXCIsZikseT1jKFwiYm94LmxpbmUud2lkdGhcIixwKTtsKFwiYm94LnZpc2libGVcIixCb29sZWFuKGd8fHZ8fG18fHkpKXx8KGUuYm94PXt2aXNpYmxlOiExfSk7dmFyIHg9YyhcIm1lYW5saW5lLmNvbG9yXCIsZiksYj1jKFwibWVhbmxpbmUud2lkdGhcIixwKTtsKFwibWVhbmxpbmUudmlzaWJsZVwiLEJvb2xlYW4oeHx8YikpfHwoZS5tZWFubGluZT17dmlzaWJsZTohMX0pfX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi9ib3gvZGVmYXVsdHNcIjo4NjUsXCIuL2F0dHJpYnV0ZXNcIjoxMTYzfV0sMTE2NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT1mdW5jdGlvbih0KXtyZXR1cm4gMS9NYXRoLnNxcnQoMipNYXRoLlBJKSpNYXRoLmV4cCgtLjUqdCp0KX07ci5tYWtlS0RFPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yLmxlbmd0aCxhPWksbz10LmJhbmR3aWR0aCxzPTEvKG4qbyk7cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLGk9MDtpPG47aSsrKWUrPWEoKHQtcltpXSkvbyk7cmV0dXJuIHMqZX19LHIuZ2V0UG9zaXRpb25PbktkZVBhdGg9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGE7XCJoXCI9PT1lLm9yaWVudGF0aW9uPyhpPVwieVwiLGE9XCJ4XCIpOihpPVwieFwiLGE9XCJ5XCIpO3ZhciBvPW4uZmluZFBvaW50T25QYXRoKHQucGF0aCxyLGEse3BhdGhMZW5ndGg6dC5wYXRoTGVuZ3RofSkscz10LnBvc0NlbnRlclB4LGw9b1tpXTtyZXR1cm5bbCxcImJvdGhcIj09PWUuc2lkZT8yKnMtbDpzXX0sci5nZXRLZGVWYWx1ZT1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC5wdHMubWFwKHIuZXh0cmFjdFZhbCk7cmV0dXJuIHIubWFrZUtERSh0LGUsaSkobikvdC5wb3NEZW5zaXR5U2NhbGV9LHIuZXh0cmFjdFZhbD1mdW5jdGlvbih0KXtyZXR1cm4gdC52fX0se1wiLi4vLi4vbGliXCI6NzAxfV0sMTE2ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksYT10KFwiLi4vYm94L2hvdmVyXCIpLG89dChcIi4vaGVscGVyc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyxsKXt2YXIgYyx1LGg9dC5jZCxmPWhbMF0udHJhY2UscD1mLmhvdmVyb24sZD0tMSE9PXAuaW5kZXhPZihcInZpb2xpbnNcIiksZz0tMSE9PXAuaW5kZXhPZihcImtkZVwiKSx2PVtdO2lmKGR8fGcpe3ZhciBtPWEuaG92ZXJPbkJveGVzKHQsZSxyLHMpO2lmKGQmJih2PXYuY29uY2F0KG0pKSxnJiZtLmxlbmd0aD4wKXt2YXIgeSx4LGIsXyx3LGs9dC54YSxBPXQueWE7XCJoXCI9PT1mLm9yaWVudGF0aW9uPyh3PWUseT1cInlcIixiPUEseD1cInhcIixfPWspOih3PXIseT1cInhcIixiPWsseD1cInlcIixfPUEpO3ZhciBUPWhbdC5pbmRleF07aWYodz49VC5zcGFuWzBdJiZ3PD1ULnNwYW5bMV0pe3ZhciBNPW4uZXh0ZW5kRmxhdCh7fSx0KSxTPV8uYzJwKHcsITApLEU9by5nZXRLZGVWYWx1ZShULGYsdyksQz1vLmdldFBvc2l0aW9uT25LZGVQYXRoKFQsZixTKSxMPWIuX29mZnNldCx6PWIuX2xlbmd0aDtNW3krXCIwXCJdPUNbMF0sTVt5K1wiMVwiXT1DWzFdLE1beCtcIjBcIl09TVt4K1wiMVwiXT1TLE1beCtcIkxhYmVsXCJdPXgrXCI6IFwiK2kuaG92ZXJMYWJlbFRleHQoXyx3KStcIiwgXCIraFswXS50LmxhYmVscy5rZGUrXCIgXCIrRS50b0ZpeGVkKDMpLE0uc3Bpa2VEaXN0YW5jZT1tWzBdLnNwaWtlRGlzdGFuY2U7dmFyIE89eStcIlNwaWtlXCI7TVtPXT1tWzBdW09dLG1bMF0uc3Bpa2VEaXN0YW5jZT12b2lkIDAsbVswXVtPXT12b2lkIDAsTS5ob3ZlcnRlbXBsYXRlPSExLHYucHVzaChNKSwodT17c3Ryb2tlOnQuY29sb3J9KVt5K1wiMVwiXT1uLmNvbnN0cmFpbihMK0NbMF0sTCxMK3opLHVbeStcIjJcIl09bi5jb25zdHJhaW4oTCtDWzFdLEwsTCt6KSx1W3grXCIxXCJdPXVbeCtcIjJcIl09Xy5fb2Zmc2V0K1N9fX0tMSE9PXAuaW5kZXhPZihcInBvaW50c1wiKSYmKGM9YS5ob3Zlck9uUG9pbnRzKHQsZSxyKSk7dmFyIEk9bC5zZWxlY3RBbGwoXCIudmlvbGlubGluZS1cIitmLnVpZCkuZGF0YSh1P1swXTpbXSk7cmV0dXJuIEkuZW50ZXIoKS5hcHBlbmQoXCJsaW5lXCIpLmNsYXNzZWQoXCJ2aW9saW5saW5lLVwiK2YudWlkLCEwKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsMS41KSxJLmV4aXQoKS5yZW1vdmUoKSxJLmF0dHIodSksXCJjbG9zZXN0XCI9PT1zP2M/W2NdOnY6Yz8odi5wdXNoKGMpLHYpOnZ9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL2JveC9ob3ZlclwiOjg2NyxcIi4vaGVscGVyc1wiOjExNjd9XSwxMTY5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksbGF5b3V0QXR0cmlidXRlczp0KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxzdXBwbHlEZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxjcm9zc1RyYWNlRGVmYXVsdHM6dChcIi4uL2JveC9kZWZhdWx0c1wiKS5jcm9zc1RyYWNlRGVmYXVsdHMsc3VwcGx5TGF5b3V0RGVmYXVsdHM6dChcIi4vbGF5b3V0X2RlZmF1bHRzXCIpLGNhbGM6dChcIi4vY2FsY1wiKSxjcm9zc1RyYWNlQ2FsYzp0KFwiLi9jcm9zc190cmFjZV9jYWxjXCIpLHBsb3Q6dChcIi4vcGxvdFwiKSxzdHlsZTp0KFwiLi9zdHlsZVwiKSxzdHlsZU9uU2VsZWN0OnQoXCIuLi9zY2F0dGVyL3N0eWxlXCIpLnN0eWxlT25TZWxlY3QsaG92ZXJQb2ludHM6dChcIi4vaG92ZXJcIiksc2VsZWN0UG9pbnRzOnQoXCIuLi9ib3gvc2VsZWN0XCIpLG1vZHVsZVR5cGU6XCJ0cmFjZVwiLG5hbWU6XCJ2aW9saW5cIixiYXNlUGxvdE1vZHVsZTp0KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCIpLGNhdGVnb3JpZXM6W1wiY2FydGVzaWFuXCIsXCJzdmdcIixcInN5bWJvbHNcIixcIm9yaWVudGVkXCIsXCJib3gtdmlvbGluXCIsXCJzaG93TGVnZW5kXCIsXCJ2aW9saW5MYXlvdXRcIixcInpvb21TY2FsZVwiXSxtZXRhOnt9fX0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi4vYm94L2RlZmF1bHRzXCI6ODY1LFwiLi4vYm94L3NlbGVjdFwiOjg3MixcIi4uL3NjYXR0ZXIvc3R5bGVcIjoxMDc1LFwiLi9hdHRyaWJ1dGVzXCI6MTE2MyxcIi4vY2FsY1wiOjExNjQsXCIuL2Nyb3NzX3RyYWNlX2NhbGNcIjoxMTY1LFwiLi9kZWZhdWx0c1wiOjExNjYsXCIuL2hvdmVyXCI6MTE2OCxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjoxMTcwLFwiLi9sYXlvdXRfZGVmYXVsdHNcIjoxMTcxLFwiLi9wbG90XCI6MTE3MixcIi4vc3R5bGVcIjoxMTczfV0sMTE3MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9ib3gvbGF5b3V0X2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vbGliXCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXt2aW9saW5tb2RlOmkoe30sbi5ib3htb2RlLHt9KSx2aW9saW5nYXA6aSh7fSxuLmJveGdhcCx7fSksdmlvbGluZ3JvdXBnYXA6aSh7fSxuLmJveGdyb3VwZ2FwLHt9KX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2JveC9sYXlvdXRfYXR0cmlidXRlc1wiOjg2OX1dLDExNzE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vYm94L2xheW91dF9kZWZhdWx0c1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2EuX3N1cHBseSh0LGUscixmdW5jdGlvbihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfSxcInZpb2xpblwiKX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2JveC9sYXlvdXRfZGVmYXVsdHNcIjo4NzAsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6MTE3MH1dLDExNzI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxvPXQoXCIuLi9ib3gvcGxvdFwiKSxzPXQoXCIuLi9zY2F0dGVyL2xpbmVfcG9pbnRzXCIpLGw9dChcIi4vaGVscGVyc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7dmFyIHU9dC5fZnVsbExheW91dCxoPWUueGF4aXMsZj1lLnlheGlzO2Z1bmN0aW9uIHAodCl7dmFyIGU9cyh0LHt4YXhpczpoLHlheGlzOmYsY29ubmVjdEdhcHM6ITAsYmFzZVRvbGVyYW5jZTouNzUsc2hhcGU6XCJzcGxpbmVcIixzaW1wbGlmeTohMH0pO3JldHVybiBhLnNtb290aG9wZW4oZVswXSwxKX1pLm1ha2VUcmFjZUdyb3VwcyhjLHIsXCJ0cmFjZSB2aW9saW5zXCIpLmVhY2goZnVuY3Rpb24odCl7dmFyIHI9bi5zZWxlY3QodGhpcyksYT10WzBdLHM9YS50LGM9YS50cmFjZTtpZihlLmlzUmFuZ2VQbG90fHwoYS5ub2RlMz1yKSwhMCE9PWMudmlzaWJsZXx8cy5lbXB0eSlyLnJlbW92ZSgpO2Vsc2V7dmFyIGQ9cy5iUG9zLGc9cy5iZFBvcyx2PWVbcy52YWxMZXR0ZXIrXCJheGlzXCJdLG09ZVtzLnBvc0xldHRlcitcImF4aXNcIl0seT1cImJvdGhcIj09PWMuc2lkZSx4PXl8fFwicG9zaXRpdmVcIj09PWMuc2lkZSxiPXl8fFwibmVnYXRpdmVcIj09PWMuc2lkZSxfPXIuc2VsZWN0QWxsKFwicGF0aC52aW9saW5cIikuZGF0YShpLmlkZW50aXR5KTtfLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5zdHlsZShcInZlY3Rvci1lZmZlY3RcIixcIm5vbi1zY2FsaW5nLXN0cm9rZVwiKS5hdHRyKFwiY2xhc3NcIixcInZpb2xpblwiKSxfLmV4aXQoKS5yZW1vdmUoKSxfLmVhY2goZnVuY3Rpb24odCl7dmFyIGUscixpLGEsbyxsLGgsZixfPW4uc2VsZWN0KHRoaXMpLHc9dC5kZW5zaXR5LGs9dy5sZW5ndGgsQT10LnBvcytkLFQ9bS5jMnAoQSk7aWYoYy53aWR0aCllPXMubWF4S0RFL2c7ZWxzZXt2YXIgTT11Ll92aW9saW5TY2FsZUdyb3VwU3RhdHNbYy5zY2FsZWdyb3VwXTtlPVwiY291bnRcIj09PWMuc2NhbGVtb2RlP00ubWF4S0RFL2cqKE0ubWF4Q291bnQvdC5wdHMubGVuZ3RoKTpNLm1heEtERS9nfWlmKHgpe2ZvcihoPW5ldyBBcnJheShrKSxvPTA7bzxrO28rKykoZj1oW29dPXt9KVtzLnBvc0xldHRlcl09QSt3W29dLnYvZSxmW3MudmFsTGV0dGVyXT13W29dLnQ7cj1wKGgpfWlmKGIpe2ZvcihoPW5ldyBBcnJheShrKSxsPTAsbz1rLTE7bDxrO2wrKyxvLS0pKGY9aFtsXT17fSlbcy5wb3NMZXR0ZXJdPUEtd1tvXS52L2UsZltzLnZhbExldHRlcl09d1tvXS50O2k9cChoKX1pZih5KWE9citcIkxcIitpLnN1YnN0cigxKStcIlpcIjtlbHNle3ZhciBTPVtULHYuYzJwKHdbMF0udCldLEU9W1Qsdi5jMnAod1trLTFdLnQpXTtcImhcIj09PWMub3JpZW50YXRpb24mJihTLnJldmVyc2UoKSxFLnJldmVyc2UoKSksYT14P1wiTVwiK1MrXCJMXCIrci5zdWJzdHIoMSkrXCJMXCIrRTpcIk1cIitFK1wiTFwiK2kuc3Vic3RyKDEpK1wiTFwiK1N9Xy5hdHRyKFwiZFwiLGEpLHQucG9zQ2VudGVyUHg9VCx0LnBvc0RlbnNpdHlTY2FsZT1lKmcsdC5wYXRoPV8ubm9kZSgpLHQucGF0aExlbmd0aD10LnBhdGguZ2V0VG90YWxMZW5ndGgoKS8oeT8yOjEpfSk7dmFyIHcsayxBLFQ9Yy5ib3gsTT1ULndpZHRoLFM9KFQubGluZXx8e30pLndpZHRoO3k/KHc9ZypNLGs9MCk6eD8odz1bMCxnKk0vMl0saz0tUyk6KHc9W2cqTS8yLDBdLGs9Uyksby5wbG90Qm94QW5kV2hpc2tlcnMocix7cG9zOm0sdmFsOnZ9LGMse2JQb3M6ZCxiZFBvczp3LGJQb3NQeE9mZnNldDprfSksby5wbG90Qm94TWVhbihyLHtwb3M6bSx2YWw6dn0sYyx7YlBvczpkLGJkUG9zOncsYlBvc1B4T2Zmc2V0Omt9KSwhYy5ib3gudmlzaWJsZSYmYy5tZWFubGluZS52aXNpYmxlJiYoQT1pLmlkZW50aXR5KTt2YXIgRT1yLnNlbGVjdEFsbChcInBhdGgubWVhbmxpbmVcIikuZGF0YShBfHxbXSk7RS5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsXCJtZWFubGluZVwiKS5zdHlsZShcImZpbGxcIixcIm5vbmVcIikuc3R5bGUoXCJ2ZWN0b3ItZWZmZWN0XCIsXCJub24tc2NhbGluZy1zdHJva2VcIiksRS5leGl0KCkucmVtb3ZlKCksRS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXYuYzJwKHQubWVhbiwhMCkscj1sLmdldFBvc2l0aW9uT25LZGVQYXRoKHQsYyxlKTtuLnNlbGVjdCh0aGlzKS5hdHRyKFwiZFwiLFwiaFwiPT09Yy5vcmllbnRhdGlvbj9cIk1cIitlK1wiLFwiK3JbMF0rXCJWXCIrclsxXTpcIk1cIityWzBdK1wiLFwiK2UrXCJIXCIrclsxXSl9KSxvLnBsb3RQb2ludHMocix7eDpoLHk6Zn0sYyxzKX19KX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2JveC9wbG90XCI6ODcxLFwiLi4vc2NhdHRlci9saW5lX3BvaW50c1wiOjEwNjYsXCIuL2hlbHBlcnNcIjoxMTY3LGQzOjE1NX1dLDExNzM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxhPXQoXCIuLi9zY2F0dGVyL3N0eWxlXCIpLnN0eWxlUG9pbnRzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWU/ZVswXS5ub2RlMzpuLnNlbGVjdCh0KS5zZWxlY3RBbGwoXCJnLnRyYWNlLnZpb2xpbnNcIik7ci5zdHlsZShcIm9wYWNpdHlcIixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSksci5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWVbMF0udHJhY2Usbz1uLnNlbGVjdCh0aGlzKSxzPXIuYm94fHx7fSxsPXMubGluZXx8e30sYz1yLm1lYW5saW5lfHx7fSx1PWMud2lkdGg7by5zZWxlY3RBbGwoXCJwYXRoLnZpb2xpblwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLHIubGluZS53aWR0aCtcInB4XCIpLmNhbGwoaS5zdHJva2Usci5saW5lLmNvbG9yKS5jYWxsKGkuZmlsbCxyLmZpbGxjb2xvciksby5zZWxlY3RBbGwoXCJwYXRoLmJveFwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLGwud2lkdGgrXCJweFwiKS5jYWxsKGkuc3Ryb2tlLGwuY29sb3IpLmNhbGwoaS5maWxsLHMuZmlsbGNvbG9yKTt2YXIgaD17XCJzdHJva2Utd2lkdGhcIjp1K1wicHhcIixcInN0cm9rZS1kYXNoYXJyYXlcIjoyKnUrXCJweCxcIit1K1wicHhcIn07by5zZWxlY3RBbGwoXCJwYXRoLm1lYW5cIikuc3R5bGUoaCkuY2FsbChpLnN0cm9rZSxjLmNvbG9yKSxvLnNlbGVjdEFsbChcInBhdGgubWVhbmxpbmVcIikuc3R5bGUoaCkuY2FsbChpLnN0cm9rZSxjLmNvbG9yKSxhKG8scix0KX0pfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uL3NjYXR0ZXIvc3R5bGVcIjoxMDc1LGQzOjE1NX1dLDExNzQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vaXNvc3VyZmFjZS9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LHM9dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGwsbD1lLmV4cG9ydHM9cyhvKHt4OmkueCx5OmkueSx6Omkueix2YWx1ZTppLnZhbHVlLGlzb21pbjppLmlzb21pbixpc29tYXg6aS5pc29tYXgsc3VyZmFjZTppLnN1cmZhY2Usc3BhY2VmcmFtZTp7c2hvdzp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxmaWxsOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDoxfX0sc2xpY2VzOmkuc2xpY2VzLGNhcHM6aS5jYXBzLHRleHQ6aS50ZXh0LGhvdmVydGV4dDppLmhvdmVydGV4dCxob3ZlcnRlbXBsYXRlOmkuaG92ZXJ0ZW1wbGF0ZX0sbihcIlwiLHtjb2xvckF0dHI6XCJgdmFsdWVgXCIsc2hvd1NjYWxlRGZsdDohMCxlZGl0VHlwZU92ZXJyaWRlOlwiY2FsY1wifSkse2NvbG9yYmFyOmkuY29sb3JiYXIsb3BhY2l0eTppLm9wYWNpdHksb3BhY2l0eXNjYWxlOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGxpZ2h0cG9zaXRpb246aS5saWdodHBvc2l0aW9uLGxpZ2h0aW5nOmkubGlnaHRpbmcsZmxhdHNoYWRpbmc6aS5mbGF0c2hhZGluZyxjb250b3VyOmkuY29udG91cixob3ZlcmluZm86byh7fSxhLmhvdmVyaW5mbyl9KSxcImNhbGNcIixcIm5lc3RlZFwiKTtsLnguZWRpdFR5cGU9bC55LmVkaXRUeXBlPWwuei5lZGl0VHlwZT1sLnZhbHVlLmVkaXRUeXBlPVwiY2FsYytjbGVhckF4aXNUeXBlc1wiLGwudHJhbnNmb3Jtcz12b2lkIDB9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi4vaXNvc3VyZmFjZS9hdHRyaWJ1dGVzXCI6OTg5fV0sMTE3NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbC1tZXNoM2RcIiksaT10KFwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvclwiKS5wYXJzZUNvbG9yU2NhbGUsYT10KFwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiKSxvPXQoXCIuLi8uLi9wbG90cy9nbDNkL3ppcDNcIikscz10KFwiLi4vaXNvc3VyZmFjZS9jb252ZXJ0XCIpLmZpbmROZWFyZXN0T25BeGlzLGw9dChcIi4uL2lzb3N1cmZhY2UvY29udmVydFwiKS5nZW5lcmF0ZUlzb01lc2hlcztmdW5jdGlvbiBjKHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLm1lc2g9ZSx0aGlzLm5hbWU9XCJcIix0aGlzLmRhdGE9bnVsbCx0aGlzLnNob3dDb250b3VyPSExfXZhciB1PWMucHJvdG90eXBlO3UuaGFuZGxlUGljaz1mdW5jdGlvbih0KXtpZih0Lm9iamVjdD09PXRoaXMubWVzaCl7dmFyIGU9dC5kYXRhLmluZGV4LHI9dGhpcy5kYXRhLl94W2VdLG49dGhpcy5kYXRhLl95W2VdLGk9dGhpcy5kYXRhLl96W2VdLGE9dGhpcy5kYXRhLl9Zcy5sZW5ndGgsbz10aGlzLmRhdGEuX1pzLmxlbmd0aCxsPXMocix0aGlzLmRhdGEuX1hzKS5pZCxjPXMobix0aGlzLmRhdGEuX1lzKS5pZCx1PXMoaSx0aGlzLmRhdGEuX1pzKS5pZCxoPXQuaW5kZXg9dStvKmMrbyphKmw7dC50cmFjZUNvb3JkaW5hdGU9W3RoaXMuZGF0YS5feFtoXSx0aGlzLmRhdGEuX3lbaF0sdGhpcy5kYXRhLl96W2hdLHRoaXMuZGF0YS52YWx1ZVtoXV07dmFyIGY9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQ7cmV0dXJuIEFycmF5LmlzQXJyYXkoZikmJnZvaWQgMCE9PWZbaF0/dC50ZXh0TGFiZWw9ZltoXTpmJiYodC50ZXh0TGFiZWw9ZiksITB9fSx1LnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjZW5lLHI9ZS5mdWxsU2NlbmVMYXlvdXQ7ZnVuY3Rpb24gbih0LGUscixuKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZDJsKGUsMCxuKSpyfSl9dGhpcy5kYXRhPWwodCk7dmFyIHM9e3Bvc2l0aW9uczpvKG4oci54YXhpcyx0Ll94LGUuZGF0YVNjYWxlWzBdLHQueGNhbGVuZGFyKSxuKHIueWF4aXMsdC5feSxlLmRhdGFTY2FsZVsxXSx0LnljYWxlbmRhciksbihyLnpheGlzLHQuX3osZS5kYXRhU2NhbGVbMl0sdC56Y2FsZW5kYXIpKSxjZWxsczpvKHQuX2ksdC5faix0Ll9rKSxsaWdodFBvc2l0aW9uOlt0LmxpZ2h0cG9zaXRpb24ueCx0LmxpZ2h0cG9zaXRpb24ueSx0LmxpZ2h0cG9zaXRpb24uel0sYW1iaWVudDp0LmxpZ2h0aW5nLmFtYmllbnQsZGlmZnVzZTp0LmxpZ2h0aW5nLmRpZmZ1c2Usc3BlY3VsYXI6dC5saWdodGluZy5zcGVjdWxhcixyb3VnaG5lc3M6dC5saWdodGluZy5yb3VnaG5lc3MsZnJlc25lbDp0LmxpZ2h0aW5nLmZyZXNuZWwsdmVydGV4Tm9ybWFsc0Vwc2lsb246dC5saWdodGluZy52ZXJ0ZXhub3JtYWxzZXBzaWxvbixmYWNlTm9ybWFsc0Vwc2lsb246dC5saWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb24sb3BhY2l0eTp0Lm9wYWNpdHksb3BhY2l0eXNjYWxlOnQub3BhY2l0eXNjYWxlLGNvbnRvdXJFbmFibGU6dC5jb250b3VyLnNob3csY29udG91ckNvbG9yOmEodC5jb250b3VyLmNvbG9yKS5zbGljZSgwLDMpLGNvbnRvdXJXaWR0aDp0LmNvbnRvdXIud2lkdGgsdXNlRmFjZXROb3JtYWxzOnQuZmxhdHNoYWRpbmd9O3MudmVydGV4SW50ZW5zaXR5PXQuX2ludGVuc2l0eSxzLnZlcnRleEludGVuc2l0eUJvdW5kcz1bdC5jbWluLHQuY21heF0scy5jb2xvcm1hcD1pKHQpLHRoaXMubWVzaC51cGRhdGUocyl9LHUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLm1lc2gpLHRoaXMubWVzaC5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2xwbG90LmdsLGk9bih7Z2w6cn0pLGE9bmV3IGModCxpLGUudWlkKTtyZXR1cm4gaS5fdHJhY2U9YSxhLnVwZGF0ZShlKSx0LmdscGxvdC5hZGQoaSksYX19LHtcIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3JcIjo2OTgsXCIuLi8uLi9saWIvc3RyMnJnYmFycmF5XCI6NzI0LFwiLi4vLi4vcGxvdHMvZ2wzZC96aXAzXCI6ODAwLFwiLi4vaXNvc3VyZmFjZS9jb252ZXJ0XCI6OTkxLFwiZ2wtbWVzaDNkXCI6Mjc3fV0sMTE3NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uL2lzb3N1cmZhY2UvZGVmYXVsdHNcIikuc3VwcGx5SXNvRGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHMocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1hKHQsZSxyLG8scyk7dmFyIGw9cyhcIm9wYWNpdHlzY2FsZVwiKTtcIm1heFwiPT09bD9lLm9wYWNpdHlzY2FsZT1bWzAsLjFdLFsxLDFdXTpcIm1pblwiPT09bD9lLm9wYWNpdHlzY2FsZT1bWzAsMV0sWzEsLjFdXTpcImV4dHJlbWVzXCI9PT1sP2Uub3BhY2l0eXNjYWxlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49MDtuPDMyO24rKyl7dmFyIGk9bi8zMSxhPWUrKDEtZSkqKDEtTWF0aC5wb3coTWF0aC5zaW4odCppKk1hdGguUEkpLDIpKTtyLnB1c2goW2ksTWF0aC5tYXgoMSxNYXRoLm1pbigwLGEpKV0pfXJldHVybiByfSgxLC4xKTpmdW5jdGlvbih0KXt2YXIgZT0wO2lmKCFBcnJheS5pc0FycmF5KHQpfHx0Lmxlbmd0aDwyKXJldHVybiExO2lmKCF0WzBdfHwhdFt0Lmxlbmd0aC0xXSlyZXR1cm4hMTtpZigwIT0rdFswXVswXXx8MSE9K3RbdC5sZW5ndGgtMV1bMF0pcmV0dXJuITE7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07aWYoMiE9PW4ubGVuZ3RofHwrblswXTxlKXJldHVybiExO2U9K25bMF19cmV0dXJuITB9KGwpfHwoZS5vcGFjaXR5c2NhbGU9dm9pZCAwKX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2lzb3N1cmZhY2UvZGVmYXVsdHNcIjo5OTIsXCIuL2F0dHJpYnV0ZXNcIjoxMTc0fV0sMTE3NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIiksbi5jYWxjPXQoXCIuLi9pc29zdXJmYWNlL2NhbGNcIiksbi5jb2xvcmJhcj17bWluOlwiY21pblwiLG1heDpcImNtYXhcIn0sbi5wbG90PXQoXCIuL2NvbnZlcnRcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJ2b2x1bWVcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9nbDNkXCIpLG4uY2F0ZWdvcmllcz1bXCJnbDNkXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvZ2wzZFwiOjc4OSxcIi4uL2lzb3N1cmZhY2UvY2FsY1wiOjk5MCxcIi4vYXR0cmlidXRlc1wiOjExNzQsXCIuL2NvbnZlcnRcIjoxMTc1LFwiLi9kZWZhdWx0c1wiOjExNzZ9XSwxMTc4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2Jhci9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiKS5saW5lLGE9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdDtmdW5jdGlvbiBvKHQpe3JldHVybnttYXJrZXI6e2NvbG9yOmEoe30sbi5tYXJrZXIuY29sb3Ise2FycmF5T2s6ITEsZWRpdFR5cGU6XCJzdHlsZVwifSksbGluZTp7Y29sb3I6YSh7fSxuLm1hcmtlci5saW5lLmNvbG9yLHthcnJheU9rOiExLGVkaXRUeXBlOlwic3R5bGVcIn0pLHdpZHRoOmEoe30sbi5tYXJrZXIubGluZS53aWR0aCx7YXJyYXlPazohMSxlZGl0VHlwZTpcInN0eWxlXCJ9KSxlZGl0VHlwZTpcInN0eWxlXCJ9LGVkaXRUeXBlOlwic3R5bGVcIn0sZWRpdFR5cGU6XCJzdHlsZVwifX1lLmV4cG9ydHM9e21lYXN1cmU6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZGZsdDpbXSxlZGl0VHlwZTpcImNhbGNcIn0sYmFzZTp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6bnVsbCxhcnJheU9rOiExLGVkaXRUeXBlOlwiY2FsY1wifSx4Om4ueCx4MDpuLngwLGR4Om4uZHgseTpuLnkseTA6bi55MCxkeTpuLmR5LGhvdmVydGV4dDpuLmhvdmVydGV4dCxob3ZlcnRlbXBsYXRlOm4uaG92ZXJ0ZW1wbGF0ZSx0ZXh0Om4udGV4dCx0ZXh0cG9zaXRpb246bi50ZXh0cG9zaXRpb24sdGV4dGZvbnQ6bi50ZXh0Zm9udCxpbnNpZGV0ZXh0Zm9udDpuLmluc2lkZXRleHRmb250LG91dHNpZGV0ZXh0Zm9udDpuLm91dHNpZGV0ZXh0Zm9udCxjb25zdHJhaW50ZXh0Om4uY29uc3RyYWludGV4dCxjbGlwb25heGlzOm4uY2xpcG9uYXhpcyxvcmllbnRhdGlvbjpuLm9yaWVudGF0aW9uLG9mZnNldDpuLm9mZnNldCx3aWR0aDpuLndpZHRoLGluY3JlYXNpbmc6bygpLGRlY3JlYXNpbmc6bygpLHRvdGFsczpvKCksY29ubmVjdG9yOntsaW5lOntjb2xvcjppLmNvbG9yLHdpZHRoOmkud2lkdGgsZGFzaDppLmRhc2gsZWRpdFR5cGU6XCJwbG90XCJ9LG1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInNwYW5uaW5nXCIsXCJiZXR3ZWVuXCJdLGRmbHQ6XCJiZXR3ZWVuXCIsZWRpdFR5cGU6XCJwbG90XCJ9LHZpc2libGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcInBsb3RcIn0sZWRpdFR5cGU6XCJwbG90XCJ9LG9mZnNldGdyb3VwOm4ub2Zmc2V0Z3JvdXAsYWxpZ25tZW50Z3JvdXA6bi5vZmZzZXRncm91cH19LHtcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi9iYXIvYXR0cmlidXRlc1wiOjgzOSxcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiOjEwNTJ9XSwxMTc5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGk9dChcIi4uLy4uL2xpYlwiKS5tZXJnZUFycmF5LGE9dChcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIiksbz10KFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKS5CQUROVU07ZnVuY3Rpb24gcyh0KXtyZXR1cm5cImFcIj09PXR8fFwiYWJzb2x1dGVcIj09PXR9ZnVuY3Rpb24gbCh0KXtyZXR1cm5cInRcIj09PXR8fFwidG90YWxcIj09PXR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYyx1PW4uZ2V0RnJvbUlkKHQsZS54YXhpc3x8XCJ4XCIpLGg9bi5nZXRGcm9tSWQodCxlLnlheGlzfHxcInlcIik7XCJoXCI9PT1lLm9yaWVudGF0aW9uPyhyPXUubWFrZUNhbGNkYXRhKGUsXCJ4XCIpLGM9aC5tYWtlQ2FsY2RhdGEoZSxcInlcIikpOihyPWgubWFrZUNhbGNkYXRhKGUsXCJ5XCIpLGM9dS5tYWtlQ2FsY2RhdGEoZSxcInhcIikpO2Zvcih2YXIgZixwPU1hdGgubWluKGMubGVuZ3RoLHIubGVuZ3RoKSxkPW5ldyBBcnJheShwKSxnPTAsdj0hMSxtPTA7bTxwO20rKyl7dmFyIHk9clttXXx8MCx4PSExOyhyW21dIT09b3x8bChlLm1lYXN1cmVbbV0pfHxzKGUubWVhc3VyZVttXSkpJiZtKzE8cCYmKHJbbSsxXSE9PW98fGwoZS5tZWFzdXJlW20rMV0pfHxzKGUubWVhc3VyZVttKzFdKSkmJih4PSEwKTt2YXIgYj1kW21dPXtpOm0scDpjW21dLHM6eSxyYXdTOnksY05leHQ6eH07cyhlLm1lYXN1cmVbbV0pPyhnPWIucyxiLmlzU3VtPSEwLGIuZGlyPVwidG90YWxzXCIsYi5zPWcpOmwoZS5tZWFzdXJlW21dKT8oYi5pc1N1bT0hMCxiLmRpcj1cInRvdGFsc1wiLGIucz1nKTooYi5pc1N1bT0hMSxiLmRpcj1iLnJhd1M8MD9cImRlY3JlYXNpbmdcIjpcImluY3JlYXNpbmdcIixmPWIucyxiLnM9ZytmLGcrPWYpLFwidG90YWxzXCI9PT1iLmRpciYmKHY9ITApLGUuaWRzJiYoYi5pZD1TdHJpbmcoZS5pZHNbbV0pKX1yZXR1cm4gZC5sZW5ndGgmJihkWzBdLmhhc1RvdGFscz12KSxpKGUudGV4dCxkLFwidHhcIiksaShlLmhvdmVydGV4dCxkLFwiaHR4XCIpLGEoZCxlKSxkfX0se1wiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvblwiOjEwNTR9XSwxMTgwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2Jhci9jcm9zc190cmFjZV9jYWxjXCIpLnNldEdyb3VwUG9zaXRpb25zO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYT10Ll9mdWxsTGF5b3V0LG89dC5fZnVsbERhdGEscz10LmNhbGNkYXRhLGw9ZS54YXhpcyxjPWUueWF4aXMsdT1bXSxoPVtdLGY9W107Zm9yKGk9MDtpPG8ubGVuZ3RoO2krKyl7dmFyIHA9b1tpXTshMD09PXAudmlzaWJsZSYmcC54YXhpcz09PWwuX2lkJiZwLnlheGlzPT09Yy5faWQmJlwid2F0ZXJmYWxsXCI9PT1wLnR5cGUmJihyPXNbaV0sXCJoXCI9PT1wLm9yaWVudGF0aW9uP2YucHVzaChyKTpoLnB1c2gociksdS5wdXNoKHIpKX12YXIgZD17X2Z1bGxMYXlvdXQ6e19heGlzTWF0Y2hHcm91cHM6YS5fYXhpc01hdGNoR3JvdXBzLF9hbGlnbm1lbnRPcHRzOmEuX2FsaWdubWVudE9wdHMsYmFybW9kZTphLndhdGVyZmFsbG1vZGUsYmFyZ2FwOmEud2F0ZXJmYWxsZ2FwLGJhcmdyb3VwZ2FwOmEud2F0ZXJmYWxsZ3JvdXBnYXB9fTtmb3IobihkLGwsYyxoKSxuKGQsYyxsLGYpLGk9MDtpPHUubGVuZ3RoO2krKyl7cj11W2ldO2Zvcih2YXIgZz0wO2c8ci5sZW5ndGg7ZysrKXt2YXIgdj1yW2ddOyExPT09di5pc1N1bSYmKHYuczArPTA9PT1nPzA6cltnLTFdLnMpfX19fSx7XCIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsY1wiOjg0Mn1dLDExODE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uL2Jhci9kZWZhdWx0c1wiKS5oYW5kbGVHcm91cGluZ0RlZmF1bHRzLGE9dChcIi4uL2Jhci9kZWZhdWx0c1wiKS5oYW5kbGVUZXh0LG89dChcIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHNcIikscz10KFwiLi9hdHRyaWJ1dGVzXCIpLGw9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksYz1cIiMzRDk5NzBcIix1PVwiI0ZGNDEzNlwiLGg9XCIjNDQ5OUZGXCI7ZnVuY3Rpb24gZih0LGUscil7dChlK1wiLm1hcmtlci5jb2xvclwiLHIpLHQoZStcIi5tYXJrZXIubGluZS5jb2xvclwiLGwuZGVmYXVsdExpbmUpLHQoZStcIi5tYXJrZXIubGluZS53aWR0aFwiKX1lLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLGkpe2Z1bmN0aW9uIGwocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1vKHQsZSxpLGwpPyhsKFwibWVhc3VyZVwiKSxsKFwib3JpZW50YXRpb25cIixlLngmJiFlLnk/XCJoXCI6XCJ2XCIpLGwoXCJiYXNlXCIpLGwoXCJvZmZzZXRcIiksbChcIndpZHRoXCIpLGwoXCJ0ZXh0XCIpLGwoXCJob3ZlcnRleHRcIiksbChcImhvdmVydGVtcGxhdGVcIiksYSh0LGUsaSxsLCExKSxmKGwsXCJpbmNyZWFzaW5nXCIsYyksZihsLFwiZGVjcmVhc2luZ1wiLHUpLGYobCxcInRvdGFsc1wiLGgpLGwoXCJjb25uZWN0b3IudmlzaWJsZVwiKSYmKGwoXCJjb25uZWN0b3IubW9kZVwiKSxsKFwiY29ubmVjdG9yLmxpbmUud2lkdGhcIikmJihsKFwiY29ubmVjdG9yLmxpbmUuY29sb3JcIiksbChcImNvbm5lY3Rvci5saW5lLmRhc2hcIikpKSk6ZS52aXNpYmxlPSExfSxjcm9zc1RyYWNlRGVmYXVsdHM6ZnVuY3Rpb24odCxlKXt2YXIgcixhO2Z1bmN0aW9uIG8odCl7cmV0dXJuIG4uY29lcmNlKGEuX2lucHV0LGEscyx0KX1pZihcImdyb3VwXCI9PT1lLndhdGVyZmFsbG1vZGUpZm9yKHZhciBsPTA7bDx0Lmxlbmd0aDtsKyspcj0oYT10W2xdKS5faW5wdXQsaShyLGEsZSxvKX0saGFuZGxlR3JvdXBpbmdEZWZhdWx0czppfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2Jhci9kZWZhdWx0c1wiOjg0MyxcIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHNcIjoxMDc4LFwiLi9hdHRyaWJ1dGVzXCI6MTE3OH1dLDExODI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIikuaG92ZXJMYWJlbFRleHQsaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKS5vcGFjaXR5LGE9dChcIi4uL2Jhci9ob3ZlclwiKS5ob3Zlck9uQmFycyxvPVwiXFx1MjViMlwiLHM9XCJcXHUyNWJjXCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe3ZhciBjPWEodCxlLHIsbCk7aWYoYyl7dmFyIHU9Yy5jZCxoPXVbMF0udHJhY2UsZj1cImhcIj09PWgub3JpZW50YXRpb24scD1mP3QueGE6dC55YSxkPXVbYy5pbmRleF0sZz1mP1wieFwiOlwieVwiLHY9ZC5pc1N1bT9kLmIrZC5zOmQucmF3UztpZihkLmlzU3VtKWNbZytcIkxhYmVsVmFsXCJdPW0odik7ZWxzZXtpZih2PjApYy5leHRyYVRleHQ9bSh2KStcIiBcIitvO2Vsc2V7aWYoISh2PDApKXJldHVybjtjLmV4dHJhVGV4dD1cIihcIittKC12KStcIikgXCIrc31jLmV4dHJhVGV4dCs9XCI8YnI+SW5pdGlhbDogXCIrbShkLmIrZC5zLXYpfXJldHVybiBjLmNvbG9yPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFtlLmRpcl0ubWFya2VyLG49ci5jb2xvcixhPXIubGluZS5jb2xvcixvPXIubGluZS53aWR0aDtpZihpKG4pKXJldHVybiBuO2lmKGkoYSkmJm8pcmV0dXJuIGF9KGgsZCksW2NdfWZ1bmN0aW9uIG0odCl7cmV0dXJuIG4ocCx0KX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9iYXIvaG92ZXJcIjo4NDV9XSwxMTgzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5sYXlvdXRBdHRyaWJ1dGVzPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIikuc3VwcGx5RGVmYXVsdHMsbi5jcm9zc1RyYWNlRGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIikuY3Jvc3NUcmFjZURlZmF1bHRzLG4uc3VwcGx5TGF5b3V0RGVmYXVsdHM9dChcIi4vbGF5b3V0X2RlZmF1bHRzXCIpLG4uY2FsYz10KFwiLi9jYWxjXCIpLG4uY3Jvc3NUcmFjZUNhbGM9dChcIi4vY3Jvc3NfdHJhY2VfY2FsY1wiKSxuLnBsb3Q9dChcIi4vcGxvdFwiKSxuLnN0eWxlPXQoXCIuL3N0eWxlXCIpLnN0eWxlLG4uaG92ZXJQb2ludHM9dChcIi4vaG92ZXJcIiksbi5zZWxlY3RQb2ludHM9dChcIi4uL2Jhci9zZWxlY3RcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJ3YXRlcmZhbGxcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIiksbi5jYXRlZ29yaWVzPVtcImNhcnRlc2lhblwiLFwic3ZnXCIsXCJvcmllbnRlZFwiLFwic2hvd0xlZ2VuZFwiLFwiem9vbVNjYWxlXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi4vYmFyL3NlbGVjdFwiOjg1MCxcIi4vYXR0cmlidXRlc1wiOjExNzgsXCIuL2NhbGNcIjoxMTc5LFwiLi9jcm9zc190cmFjZV9jYWxjXCI6MTE4MCxcIi4vZGVmYXVsdHNcIjoxMTgxLFwiLi9ob3ZlclwiOjExODIsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6MTE4NCxcIi4vbGF5b3V0X2RlZmF1bHRzXCI6MTE4NSxcIi4vcGxvdFwiOjExODYsXCIuL3N0eWxlXCI6MTE4N31dLDExODQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e3dhdGVyZmFsbG1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImdyb3VwXCIsXCJvdmVybGF5XCJdLGRmbHQ6XCJncm91cFwiLGVkaXRUeXBlOlwiY2FsY1wifSx3YXRlcmZhbGxnYXA6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxlZGl0VHlwZTpcImNhbGNcIn0sd2F0ZXJmYWxsZ3JvdXBnYXA6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6XCJjYWxjXCJ9fX0se31dLDExODU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT0hMTtmdW5jdGlvbiBvKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9Zm9yKHZhciBzPTA7czxyLmxlbmd0aDtzKyspe3ZhciBsPXJbc107aWYobC52aXNpYmxlJiZcIndhdGVyZmFsbFwiPT09bC50eXBlKXthPSEwO2JyZWFrfX1hJiYobyhcIndhdGVyZmFsbG1vZGVcIiksbyhcIndhdGVyZmFsbGdhcFwiLC4yKSxvKFwid2F0ZXJmYWxsZ3JvdXBnYXBcIikpfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjExODR9XSwxMTg2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksbz10KFwiLi4vYmFyL3Bsb3RcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe28odCxlLHIscyksZnVuY3Rpb24odCxlLHIsbyl7dmFyIHM9ZS54YXhpcyxsPWUueWF4aXM7aS5tYWtlVHJhY2VHcm91cHMobyxyLFwidHJhY2UgYmFyc1wiKS5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBvPW4uc2VsZWN0KHRoaXMpLGM9clswXSx1PWMudHJhY2UsaD1pLmVuc3VyZVNpbmdsZShvLFwiZ1wiLFwibGluZXNcIik7aWYodS5jb25uZWN0b3ImJnUuY29ubmVjdG9yLnZpc2libGUpe3ZhciBmPVwiaFwiPT09dS5vcmllbnRhdGlvbixwPXUuY29ubmVjdG9yLm1vZGU7ZS5pc1JhbmdlUGxvdHx8KGMubm9kZTM9byk7dmFyIGQ9aC5zZWxlY3RBbGwoXCJnLmxpbmVcIikuZGF0YShpLmlkZW50aXR5KTtkLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwibGluZVwiLCEwKSxkLmV4aXQoKS5yZW1vdmUoKTt2YXIgZz1kLnNpemUoKTtkLmVhY2goZnVuY3Rpb24ocixvKXtpZihvPT09Zy0xfHxyLmNOZXh0KXt2YXIgYyxoLGQsdixtLHkseCxiLF89bi5zZWxlY3QodGhpcyksdz1cIlwiLGs9MDtvKzE8ZyYmQXJyYXkuaXNBcnJheSh1Lm9mZnNldCkmJihrLT11Lm9mZnNldFtvKzFdLXUub2Zmc2V0W29dKSxmPyhjPXMuYzJwKHIuczEsITApLGg9bC5jMnAoci5wMSwhMCksZD1zLmMycChyLnMwLCEwKSx2PWwuYzJwKHIucDAsITApLG09cy5jMnAoci5zMSwhMCkseT1sLmMycChyLnAxLCEwKSxvKzE8ZyYmKHg9cy5jMnAoci5zMCsxLWssITApLGI9bC5jMnAoci5wMCsxLWssITApKSk6KGM9cy5jMnAoci5wMSwhMCksaD1sLmMycChyLnMxLCEwKSxkPXMuYzJwKHIucDAsITApLHY9bC5jMnAoci5zMCwhMCksbT1zLmMycChyLnAxLCEwKSx5PWwuYzJwKHIuczEsITApLG8rMTxnJiYoeD1zLmMycChyLnAwKzEtaywhMCksYj1sLmMycChyLnMwKzEtaywhMCkpKSxcInNwYW5uaW5nXCI9PT1wJiYhci5pc1N1bSYmbz4wJiYodys9Zj9cIk1cIitkK1wiLFwiK2grXCJWXCIrdjpcIk1cIitjK1wiLFwiK3YrXCJIXCIrZCksXCJiZXR3ZWVuXCIhPT1wJiYoci5pc1N1bXx8bzxnLTEpJiYodys9Zj9cIk1cIittK1wiLFwiK3YrXCJWXCIreTpcIk1cIitkK1wiLFwiK3krXCJIXCIrbSksdm9pZCAwIT09eCYmdm9pZCAwIT09YiYmKHcrPWY/XCJNXCIrbStcIixcIit5K1wiVlwiK2I6XCJNXCIrbStcIixcIit5K1wiSFwiK3gpLGkuZW5zdXJlU2luZ2xlKF8sXCJwYXRoXCIpLmF0dHIoXCJkXCIsdykuY2FsbChhLnNldENsaXBVcmwsZS5sYXllckNsaXBJZCx0KX19KX1lbHNlIGgucmVtb3ZlKCl9KX0odCxlLHIscyl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi9iYXIvcGxvdFwiOjg0OSxkMzoxNTV9XSwxMTg3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLG89dChcIi4uL2Jhci9zdHlsZVwiKS5zdHlsZVRleHRQb2ludHM7ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUpe3ZhciByPWU/ZVswXS5ub2RlMzpuLnNlbGVjdCh0KS5zZWxlY3RBbGwoXCJnLndhdGVyZmFsbGxheWVyXCIpLnNlbGVjdEFsbChcImcudHJhY2VcIik7ci5zdHlsZShcIm9wYWNpdHlcIixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSksci5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLHM9ZVswXS50cmFjZTtyLnNlbGVjdEFsbChcIi5wb2ludCA+IHBhdGhcIikuZWFjaChmdW5jdGlvbih0KXtpZighdC5pc0JsYW5rKXt2YXIgZT1zW3QuZGlyXS5tYXJrZXI7bi5zZWxlY3QodGhpcykuY2FsbChhLmZpbGwsZS5jb2xvcikuY2FsbChhLnN0cm9rZSxlLmxpbmUuY29sb3IpLmNhbGwoaS5kYXNoTGluZSxlLmxpbmUuZGFzaCxlLmxpbmUud2lkdGgpLnN0eWxlKFwib3BhY2l0eVwiLHMuc2VsZWN0ZWRwb2ludHMmJiF0LnNlbGVjdGVkPy4zOjEpfX0pLG8ocixzLHQpLHIuc2VsZWN0QWxsKFwiLmxpbmVzXCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxlPXMuY29ubmVjdG9yLmxpbmU7aS5saW5lR3JvdXBTdHlsZSh0LnNlbGVjdEFsbChcInBhdGhcIiksZS53aWR0aCxlLmNvbG9yLGUuZGFzaCl9KX0pfX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi9iYXIvc3R5bGVcIjo4NTIsZDM6MTU1fV0sMTE4ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxpPXQoXCIuLi9saWJcIiksYT10KFwiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWFcIiksbz10KFwiLi9oZWxwZXJzXCIpLnBvaW50c0FjY2Vzc29yRnVuY3Rpb24scz10KFwiLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKS5CQUROVU07ci5tb2R1bGVUeXBlPVwidHJhbnNmb3JtXCIsci5uYW1lPVwiYWdncmVnYXRlXCI7dmFyIGw9ci5hdHRyaWJ1dGVzPXtlbmFibGVkOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LGdyb3Vwczp7dmFsVHlwZTpcInN0cmluZ1wiLHN0cmljdDohMCxub0JsYW5rOiEwLGFycmF5T2s6ITAsZGZsdDpcInhcIixlZGl0VHlwZTpcImNhbGNcIn0sYWdncmVnYXRpb25zOntfaXNMaW5rZWRUb0FycmF5OlwiYWdncmVnYXRpb25cIix0YXJnZXQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcImNhbGNcIn0sZnVuYzp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiY291bnRcIixcInN1bVwiLFwiYXZnXCIsXCJtZWRpYW5cIixcIm1vZGVcIixcInJtc1wiLFwic3RkZGV2XCIsXCJtaW5cIixcIm1heFwiLFwiZmlyc3RcIixcImxhc3RcIixcImNoYW5nZVwiLFwicmFuZ2VcIl0sZGZsdDpcImZpcnN0XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGZ1bmNtb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJzYW1wbGVcIixcInBvcHVsYXRpb25cIl0sZGZsdDpcInNhbXBsZVwiLGVkaXRUeXBlOlwiY2FsY1wifSxlbmFibGVkOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0sYz1sLmFnZ3JlZ2F0aW9ucztmdW5jdGlvbiB1KHQsZSxyLGEpe2lmKGEuZW5hYmxlZCl7Zm9yKHZhciBvPWEudGFyZ2V0LGw9aS5uZXN0ZWRQcm9wZXJ0eShlLG8pLGM9bC5nZXQoKSx1PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5mdW5jLG49ZS5kMmMsaT1lLmMyZDtzd2l0Y2gocil7Y2FzZVwiY291bnRcIjpyZXR1cm4gaDtjYXNlXCJmaXJzdFwiOnJldHVybiBmO2Nhc2VcImxhc3RcIjpyZXR1cm4gcDtjYXNlXCJzdW1cIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBvPW4odFtlW2FdXSk7byE9PXMmJihyKz1vKX1yZXR1cm4gaShyKX07Y2FzZVwiYXZnXCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsYT0wLG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIGw9bih0W2Vbb11dKTtsIT09cyYmKHIrPWwsYSsrKX1yZXR1cm4gYT9pKHIvYSk6c307Y2FzZVwibWluXCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTEvMCxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBvPW4odFtlW2FdXSk7byE9PXMmJihyPU1hdGgubWluKHIsbykpfXJldHVybiByPT09MS8wP3M6aShyKX07Y2FzZVwibWF4XCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPS0xLzAsYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1uKHRbZVthXV0pO28hPT1zJiYocj1NYXRoLm1heChyLG8pKX1yZXR1cm4gcj09PS0xLzA/czppKHIpfTtjYXNlXCJyYW5nZVwiOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xLzAsYT0tMS8wLG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIGw9bih0W2Vbb11dKTtsIT09cyYmKHI9TWF0aC5taW4ocixsKSxhPU1hdGgubWF4KGEsbCkpfXJldHVybiBhPT09LTEvMHx8cj09PTEvMD9zOmkoYS1yKX07Y2FzZVwiY2hhbmdlXCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0W2VbMF1dKSxhPW4odFtlW2UubGVuZ3RoLTFdXSk7cmV0dXJuIHI9PT1zfHxhPT09cz9zOmkoYS1yKX07Y2FzZVwibWVkaWFuXCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIG89bih0W2VbYV1dKTtvIT09cyYmci5wdXNoKG8pfWlmKCFyLmxlbmd0aClyZXR1cm4gcztyLnNvcnQoKTt2YXIgbD0oci5sZW5ndGgtMSkvMjtyZXR1cm4gaSgocltNYXRoLmZsb29yKGwpXStyW01hdGguY2VpbChsKV0pLzIpfTtjYXNlXCJtb2RlXCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LGE9MCxvPXMsbD0wO2w8ZS5sZW5ndGg7bCsrKXt2YXIgYz1uKHRbZVtsXV0pO2lmKGMhPT1zKXt2YXIgdT1yW2NdPShyW2NdfHwwKSsxO3U+YSYmKGE9dSxvPWMpfX1yZXR1cm4gYT9pKG8pOnN9O2Nhc2VcInJtc1wiOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLGE9MCxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBsPW4odFtlW29dXSk7bCE9PXMmJihyKz1sKmwsYSsrKX1yZXR1cm4gYT9pKE1hdGguc3FydChyL2EpKTpzfTtjYXNlXCJzdGRkZXZcIjpyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgaSxhPTAsbz0wLGw9MSxjPXM7Zm9yKGk9MDtpPHIubGVuZ3RoJiZjPT09cztpKyspYz1uKGVbcltpXV0pO2lmKGM9PT1zKXJldHVybiBzO2Zvcig7aTxyLmxlbmd0aDtpKyspe3ZhciB1PW4oZVtyW2ldXSk7aWYodSE9PXMpe3ZhciBoPXUtYzthKz1oLG8rPWgqaCxsKyt9fXZhciBmPVwic2FtcGxlXCI9PT10LmZ1bmNtb2RlP2wtMTpsO3JldHVybiBmP01hdGguc3FydCgoby1hKmEvbCkvZik6MH19fShhLG4uZ2V0RGF0YUNvbnZlcnNpb25zKHQsZSxvLGMpKSxkPW5ldyBBcnJheShyLmxlbmd0aCksZz0wO2c8ci5sZW5ndGg7ZysrKWRbZ109dShjLHJbZ10pO2wuc2V0KGQpLFwiY291bnRcIj09PWEuZnVuYyYmaS5wdXNoVW5pcXVlKGUuX2FycmF5QXR0cnMsbyl9fWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gZS5sZW5ndGh9ZnVuY3Rpb24gZih0LGUpe3JldHVybiB0W2VbMF1dfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gdFtlW2UubGVuZ3RoLTFdXX1yLnN1cHBseURlZmF1bHRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj17fTtmdW5jdGlvbiBvKGUscil7cmV0dXJuIGkuY29lcmNlKHQsbixsLGUscil9aWYoIW8oXCJlbmFibGVkXCIpKXJldHVybiBuO3ZhciBzPWEuZmluZEFycmF5QXR0cmlidXRlcyhlKSx1PXt9O2ZvcihyPTA7cjxzLmxlbmd0aDtyKyspdVtzW3JdXT0xO3ZhciBoPW8oXCJncm91cHNcIik7aWYoIUFycmF5LmlzQXJyYXkoaCkpe2lmKCF1W2hdKXJldHVybiBuLmVuYWJsZWQ9ITEsbjt1W2hdPTB9dmFyIGYscD10LmFnZ3JlZ2F0aW9uc3x8W10sZD1uLmFnZ3JlZ2F0aW9ucz1uZXcgQXJyYXkocC5sZW5ndGgpO2Z1bmN0aW9uIGcodCxlKXtyZXR1cm4gaS5jb2VyY2UocFtyXSxmLGMsdCxlKX1mb3Iocj0wO3I8cC5sZW5ndGg7cisrKXtmPXtfaW5kZXg6cn07dmFyIHY9ZyhcInRhcmdldFwiKSxtPWcoXCJmdW5jXCIpO2coXCJlbmFibGVkXCIpJiZ2JiYodVt2XXx8XCJjb3VudFwiPT09bSYmdm9pZCAwPT09dVt2XSk/KFwic3RkZGV2XCI9PT1tJiZnKFwiZnVuY21vZGVcIiksdVt2XT0wLGRbcl09Zik6ZFtyXT17ZW5hYmxlZDohMSxfaW5kZXg6cn19Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKyl1W3Nbcl1dJiZkLnB1c2goe3RhcmdldDpzW3JdLGZ1bmM6Yy5mdW5jLmRmbHQsZW5hYmxlZDohMCxfaW5kZXg6LTF9KTtyZXR1cm4gbn0sci5jYWxjVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXtpZihyLmVuYWJsZWQpe3ZhciBuPXIuZ3JvdXBzLGE9aS5nZXRUYXJnZXRBcnJheShlLHt0YXJnZXQ6bn0pO2lmKGEpe3ZhciBzLGwsYyxoLGY9e30scD17fSxkPVtdLGc9byhlLnRyYW5zZm9ybXMsciksdj1hLmxlbmd0aDtmb3IoZS5fbGVuZ3RoJiYodj1NYXRoLm1pbih2LGUuX2xlbmd0aCkpLHM9MDtzPHY7cysrKXZvaWQgMD09PShjPWZbbD1hW3NdXSk/KGZbbF09ZC5sZW5ndGgsaD1bc10sZC5wdXNoKGgpLHBbZltsXV09ZyhzKSk6KGRbY10ucHVzaChzKSxwW2ZbbF1dPShwW2ZbbF1dfHxbXSkuY29uY2F0KGcocykpKTtyLl9pbmRleFRvUG9pbnRzPXA7dmFyIG09ci5hZ2dyZWdhdGlvbnM7Zm9yKHM9MDtzPG0ubGVuZ3RoO3MrKyl1KHQsZSxkLG1bc10pO1wic3RyaW5nXCI9PXR5cGVvZiBuJiZ1KHQsZSxkLHt0YXJnZXQ6bixmdW5jOlwiZmlyc3RcIixlbmFibGVkOiEwfSksZS5fbGVuZ3RoPWQubGVuZ3RofX19fSx7XCIuLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vbGliXCI6NzAxLFwiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWFcIjo3MzgsXCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4vaGVscGVyc1wiOjExOTF9XSwxMTg5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2xpYlwiKSxpPXQoXCIuLi9yZWdpc3RyeVwiKSxhPXQoXCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxvPXQoXCIuL2hlbHBlcnNcIikucG9pbnRzQWNjZXNzb3JGdW5jdGlvbixzPXQoXCIuLi9jb25zdGFudHMvZmlsdGVyX29wc1wiKSxsPXMuQ09NUEFSSVNPTl9PUFMsYz1zLklOVEVSVkFMX09QUyx1PXMuU0VUX09QUztyLm1vZHVsZVR5cGU9XCJ0cmFuc2Zvcm1cIixyLm5hbWU9XCJmaWx0ZXJcIixyLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcImNhbGNcIn0sdGFyZ2V0Ont2YWxUeXBlOlwic3RyaW5nXCIsc3RyaWN0OiEwLG5vQmxhbms6ITAsYXJyYXlPazohMCxkZmx0OlwieFwiLGVkaXRUeXBlOlwiY2FsY1wifSxvcGVyYXRpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltdLmNvbmNhdChsKS5jb25jYXQoYykuY29uY2F0KHUpLGRmbHQ6XCI9XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHZhbHVlOnt2YWxUeXBlOlwiYW55XCIsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifSxwcmVzZXJ2ZWdhcHM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMSxlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LHIuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gYShpLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsci5hdHRyaWJ1dGVzLGksYSl9aWYoYShcImVuYWJsZWRcIikpe2EoXCJwcmVzZXJ2ZWdhcHNcIiksYShcIm9wZXJhdGlvblwiKSxhKFwidmFsdWVcIiksYShcInRhcmdldFwiKTt2YXIgbz1pLmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiaGFuZGxlRGVmYXVsdHNcIik7byh0LGUsXCJ2YWx1ZWNhbGVuZGFyXCIsbnVsbCksbyh0LGUsXCJ0YXJnZXRjYWxlbmRhclwiLG51bGwpfXJldHVybiBlfSxyLmNhbGNUcmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe2lmKHIuZW5hYmxlZCl7dmFyIGk9bi5nZXRUYXJnZXRBcnJheShlLHIpO2lmKGkpe3ZhciBzPXIudGFyZ2V0LGg9aS5sZW5ndGg7ZS5fbGVuZ3RoJiYoaD1NYXRoLm1pbihoLGUuX2xlbmd0aCkpO3ZhciBmPXIudGFyZ2V0Y2FsZW5kYXIscD1lLl9hcnJheUF0dHJzLGQ9ci5wcmVzZXJ2ZWdhcHM7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHMpe3ZhciBnPW4ubmVzdGVkUHJvcGVydHkoZSxzK1wiY2FsZW5kYXJcIikuZ2V0KCk7ZyYmKGY9Zyl9dmFyIHYsbSx5PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Lm9wZXJhdGlvbixpPXQudmFsdWUsYT1BcnJheS5pc0FycmF5KGkpO2Z1bmN0aW9uIG8odCl7cmV0dXJuLTEhPT10LmluZGV4T2Yobil9dmFyIHMsaD1mdW5jdGlvbihyKXtyZXR1cm4gZShyLDAsdC52YWx1ZWNhbGVuZGFyKX0sZj1mdW5jdGlvbih0KXtyZXR1cm4gZSh0LDAscil9O28obCk/cz1oKGE/aVswXTppKTpvKGMpP3M9YT9baChpWzBdKSxoKGlbMV0pXTpbaChpKSxoKGkpXTpvKHUpJiYocz1hP2kubWFwKGgpOltoKGkpXSk7c3dpdGNoKG4pe2Nhc2VcIj1cIjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGYodCk9PT1zfTtjYXNlXCIhPVwiOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZih0KSE9PXN9O2Nhc2VcIjxcIjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGYodCk8c307Y2FzZVwiPD1cIjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGYodCk8PXN9O2Nhc2VcIj5cIjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGYodCk+c307Y2FzZVwiPj1cIjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGYodCk+PXN9O2Nhc2VcIltdXCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWYodCk7cmV0dXJuIGU+PXNbMF0mJmU8PXNbMV19O2Nhc2VcIigpXCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWYodCk7cmV0dXJuIGU+c1swXSYmZTxzWzFdfTtjYXNlXCJbKVwiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPj1zWzBdJiZlPHNbMV19O2Nhc2VcIihdXCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWYodCk7cmV0dXJuIGU+c1swXSYmZTw9c1sxXX07Y2FzZVwiXVtcIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9Zih0KTtyZXR1cm4gZTw9c1swXXx8ZT49c1sxXX07Y2FzZVwiKShcIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9Zih0KTtyZXR1cm4gZTxzWzBdfHxlPnNbMV19O2Nhc2VcIl0oXCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWYodCk7cmV0dXJuIGU8PXNbMF18fGU+c1sxXX07Y2FzZVwiKVtcIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9Zih0KTtyZXR1cm4gZTxzWzBdfHxlPj1zWzFdfTtjYXNlXCJ7fVwiOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tMSE9PXMuaW5kZXhPZihmKHQpKX07Y2FzZVwifXtcIjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLTE9PT1zLmluZGV4T2YoZih0KSl9fX0ocixhLmdldERhdGFUb0Nvb3JkRnVuYyh0LGUscyxpKSxmKSx4PXt9LGI9e30sXz0wO2Q/KHY9ZnVuY3Rpb24odCl7eFt0LmFzdHJdPW4uZXh0ZW5kRGVlcChbXSx0LmdldCgpKSx0LnNldChuZXcgQXJyYXkoaCkpfSxtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9eFt0LmFzdHJdW2VdO3QuZ2V0KClbZV09cn0pOih2PWZ1bmN0aW9uKHQpe3hbdC5hc3RyXT1uLmV4dGVuZERlZXAoW10sdC5nZXQoKSksdC5zZXQoW10pfSxtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9eFt0LmFzdHJdW2VdO3QuZ2V0KCkucHVzaChyKX0pLEEodik7Zm9yKHZhciB3PW8oZS50cmFuc2Zvcm1zLHIpLGs9MDtrPGg7aysrKXt5KGlba10pPyhBKG0sayksYltfKytdPXcoaykpOmQmJl8rK31yLl9pbmRleFRvUG9pbnRzPWIsZS5fbGVuZ3RoPV99fWZ1bmN0aW9uIEEodCxyKXtmb3IodmFyIGk9MDtpPHAubGVuZ3RoO2krKyl7dChuLm5lc3RlZFByb3BlcnR5KGUscFtpXSkscil9fX19LHtcIi4uL2NvbnN0YW50cy9maWx0ZXJfb3BzXCI6Njc0LFwiLi4vbGliXCI6NzAxLFwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9yZWdpc3RyeVwiOjgyOSxcIi4vaGVscGVyc1wiOjExOTF9XSwxMTkwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2xpYlwiKSxpPXQoXCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYVwiKSxhPXQoXCIuLi9wbG90cy9wbG90c1wiKSxvPXQoXCIuL2hlbHBlcnNcIikucG9pbnRzQWNjZXNzb3JGdW5jdGlvbjtmdW5jdGlvbiBzKHQsZSl7dmFyIHIscyxsLGMsdSxoLGYscCxkLGcsdj1lLnRyYW5zZm9ybSxtPWUudHJhbnNmb3JtSW5kZXgseT10LnRyYW5zZm9ybXNbbV0uZ3JvdXBzLHg9byh0LnRyYW5zZm9ybXMsdik7aWYoIUFycmF5LmlzQXJyYXkoeSl8fDA9PT15Lmxlbmd0aClyZXR1cm5bdF07dmFyIGI9bi5maWx0ZXJVbmlxdWUoeSksXz1uZXcgQXJyYXkoYi5sZW5ndGgpLHc9eS5sZW5ndGgsaz1pLmZpbmRBcnJheUF0dHJpYnV0ZXModCksQT12LnN0eWxlc3x8W10sVD17fTtmb3Iocj0wO3I8QS5sZW5ndGg7cisrKVRbQVtyXS50YXJnZXRdPUFbcl0udmFsdWU7di5zdHlsZXMmJihnPW4ua2V5ZWRDb250YWluZXIodixcInN0eWxlc1wiLFwidGFyZ2V0XCIsXCJ2YWx1ZS5uYW1lXCIpKTt2YXIgTT17fSxTPXt9O2ZvcihyPTA7cjxiLmxlbmd0aDtyKyspe01baD1iW3JdXT1yLFNbaF09MCwoZj1fW3JdPW4uZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LHQpKS5fZ3JvdXA9aCxmLnRyYW5zZm9ybXNbbV0uX2luZGV4VG9Qb2ludHM9e307dmFyIEU9bnVsbDtmb3IoZyYmKEU9Zy5nZXQoaCkpLGYubmFtZT1FfHxcIlwiPT09RT9FOm4udGVtcGxhdGVTdHJpbmcodi5uYW1lZm9ybWF0LHt0cmFjZTp0Lm5hbWUsZ3JvdXA6aH0pLHA9Zi50cmFuc2Zvcm1zLGYudHJhbnNmb3Jtcz1bXSxzPTA7czxwLmxlbmd0aDtzKyspZi50cmFuc2Zvcm1zW3NdPW4uZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LHBbc10pO2ZvcihzPTA7czxrLmxlbmd0aDtzKyspbi5uZXN0ZWRQcm9wZXJ0eShmLGtbc10pLnNldChbXSl9Zm9yKGw9MDtsPGsubGVuZ3RoO2wrKyl7Zm9yKGM9a1tsXSxzPTAsZD1bXTtzPGIubGVuZ3RoO3MrKylkW3NdPW4ubmVzdGVkUHJvcGVydHkoX1tzXSxjKS5nZXQoKTtmb3IodT1uLm5lc3RlZFByb3BlcnR5KHQsYykuZ2V0KCkscz0wO3M8dztzKyspZFtNW3lbc11dXS5wdXNoKHVbc10pfWZvcihzPTA7czx3O3MrKyl7KGY9X1tNW3lbc11dXSkudHJhbnNmb3Jtc1ttXS5faW5kZXhUb1BvaW50c1tTW3lbc11dXT14KHMpLFNbeVtzXV0rK31mb3Iocj0wO3I8Yi5sZW5ndGg7cisrKWg9YltyXSxmPV9bcl0sYS5jbGVhckV4cGFuZGVkVHJhY2VEZWZhdWx0Q29sb3JzKGYpLGY9bi5leHRlbmREZWVwTm9BcnJheXMoZixUW2hdfHx7fSk7cmV0dXJuIF99ci5tb2R1bGVUeXBlPVwidHJhbnNmb3JtXCIsci5uYW1lPVwiZ3JvdXBieVwiLHIuYXR0cmlidXRlcz17ZW5hYmxlZDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSxncm91cHM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZGZsdDpbXSxlZGl0VHlwZTpcImNhbGNcIn0sbmFtZWZvcm1hdDp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwiY2FsY1wifSxzdHlsZXM6e19pc0xpbmtlZFRvQXJyYXk6XCJzdHlsZVwiLHRhcmdldDp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwiY2FsY1wifSx2YWx1ZTp7dmFsVHlwZTpcImFueVwiLGRmbHQ6e30sZWRpdFR5cGU6XCJjYWxjXCIsX2NvbXBhcmVBc0pTT046ITB9LGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0sci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0LGUsaSl7dmFyIGEsbz17fTtmdW5jdGlvbiBzKGUsaSl7cmV0dXJuIG4uY29lcmNlKHQsbyxyLmF0dHJpYnV0ZXMsZSxpKX1pZighcyhcImVuYWJsZWRcIikpcmV0dXJuIG87cyhcImdyb3Vwc1wiKSxzKFwibmFtZWZvcm1hdFwiLGkuX2RhdGFMZW5ndGg+MT9cIiV7Z3JvdXB9ICgle3RyYWNlfSlcIjpcIiV7Z3JvdXB9XCIpO3ZhciBsPXQuc3R5bGVzLGM9by5zdHlsZXM9W107aWYobClmb3IoYT0wO2E8bC5sZW5ndGg7YSsrKXt2YXIgdT1jW2FdPXt9O24uY29lcmNlKGxbYV0sY1thXSxyLmF0dHJpYnV0ZXMuc3R5bGVzLFwidGFyZ2V0XCIpO3ZhciBoPW4uY29lcmNlKGxbYV0sY1thXSxyLmF0dHJpYnV0ZXMuc3R5bGVzLFwidmFsdWVcIik7bi5pc1BsYWluT2JqZWN0KGgpP3UudmFsdWU9bi5leHRlbmREZWVwKHt9LGgpOmgmJmRlbGV0ZSB1LnZhbHVlfXJldHVybiBvfSxyLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPVtdO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspZm9yKHI9cyh0W25dLGUpLGk9MDtpPHIubGVuZ3RoO2krKylhLnB1c2gocltpXSk7cmV0dXJuIGF9fSx7XCIuLi9saWJcIjo3MDEsXCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYVwiOjczOCxcIi4uL3Bsb3RzL3Bsb3RzXCI6ODEwLFwiLi9oZWxwZXJzXCI6MTE5MX1dLDExOTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLnBvaW50c0FjY2Vzc29yRnVuY3Rpb249ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpPTA7aTx0Lmxlbmd0aCYmKHI9dFtpXSkhPT1lO2krKylyLl9pbmRleFRvUG9pbnRzJiYhMSE9PXIuZW5hYmxlZCYmKG49ci5faW5kZXhUb1BvaW50cyk7cmV0dXJuIG4/ZnVuY3Rpb24odCl7cmV0dXJuIG5bdF19OmZ1bmN0aW9uKHQpe3JldHVyblt0XX19fSx7fV0sMTE5MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9saWJcIiksaT10KFwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksYT10KFwiLi9oZWxwZXJzXCIpLnBvaW50c0FjY2Vzc29yRnVuY3Rpb247ci5tb2R1bGVUeXBlPVwidHJhbnNmb3JtXCIsci5uYW1lPVwic29ydFwiLHIuYXR0cmlidXRlcz17ZW5hYmxlZDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSx0YXJnZXQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixzdHJpY3Q6ITAsbm9CbGFuazohMCxhcnJheU9rOiEwLGRmbHQ6XCJ4XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LG9yZGVyOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhc2NlbmRpbmdcIixcImRlc2NlbmRpbmdcIl0sZGZsdDpcImFzY2VuZGluZ1wiLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0sci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiBpKGksYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxyLmF0dHJpYnV0ZXMsaSxhKX1yZXR1cm4gaShcImVuYWJsZWRcIikmJihpKFwidGFyZ2V0XCIpLGkoXCJvcmRlclwiKSksZX0sci5jYWxjVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXtpZihyLmVuYWJsZWQpe3ZhciBvPW4uZ2V0VGFyZ2V0QXJyYXkoZSxyKTtpZihvKXt2YXIgcz1yLnRhcmdldCxsPW8ubGVuZ3RoO2UuX2xlbmd0aCYmKGw9TWF0aC5taW4obCxlLl9sZW5ndGgpKTt2YXIgYyx1LGg9ZS5fYXJyYXlBdHRycyxmPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9bmV3IEFycmF5KG4pLG89bmV3IEFycmF5KG4pO2ZvcihpPTA7aTxuO2krKylhW2ldPXt2OmVbaV0saTppfTtmb3IoYS5zb3J0KGZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQub3JkZXIpe2Nhc2VcImFzY2VuZGluZ1wiOnJldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBlKHQudiktZShyLnYpfTtjYXNlXCJkZXNjZW5kaW5nXCI6cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIGUoci52KS1lKHQudil9fX0odCxyKSksaT0wO2k8bjtpKyspb1tpXT1hW2ldLmk7cmV0dXJuIG99KHIsbyxpLmdldERhdGFUb0Nvb3JkRnVuYyh0LGUscyxvKSxsKSxwPWEoZS50cmFuc2Zvcm1zLHIpLGQ9e307Zm9yKGM9MDtjPGgubGVuZ3RoO2MrKyl7dmFyIGc9bi5uZXN0ZWRQcm9wZXJ0eShlLGhbY10pLHY9Zy5nZXQoKSxtPW5ldyBBcnJheShsKTtmb3IodT0wO3U8bDt1KyspbVt1XT12W2ZbdV1dO2cuc2V0KG0pfWZvcih1PTA7dTxsO3UrKylkW3VdPXAoZlt1XSk7ci5faW5kZXhUb1BvaW50cz1kLGUuX2xlbmd0aD1sfX19fSx7XCIuLi9saWJcIjo3MDEsXCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4vaGVscGVyc1wiOjExOTF9XX0se30sWzIyXSkoMjIpfSk7IiwibGV0IGhlbHAgPSByZXF1aXJlKCcuL3BhZ2UtaGVscCcpXG5cbmxldCB0ZW1wbGF0ZXMgPSB7XG4gICAgICAgIGlucHV0IDogKG1vZGFsSUQsIGlucHV0SUQsIHRpdGxlLCBsYWJlbCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgICAgPGRpdiBpZD0ke21vZGFsSUR9IGNsYXNzPVwibW9kYWxcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+JHt0aXRsZX08L2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ke2lucHV0SUR9PiR7bGFiZWx9PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPSR7aW5wdXRJRH0gbmFtZT0ke2lucHV0SUR9IHNpemU9XCIzMFwiIGF1dG9mb2N1cyB2YWx1ZT1cIiR7dmFsdWV9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBvay1tb2RlbC1idG4gYm94LXNoYWRvd1wiPk9LPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IGJveC1zaGFkb3dcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPkNsb3NlPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+YFxuICAgICAgICB9LFxuICAgICAgICBtZXNzYWdlIDogKG1vZGFsSUQsIHRpdGxlLCBtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9JHttb2RhbElEfSBjbGFzcz1cIm1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+ICR7dGl0bGV9IDwvaDU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cD4gJHttZXNzYWdlfSA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBib3gtc2hhZG93XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5DbG9zZTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PmBcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlybWF0aW9uIDogKG1vZGFsSUQsIHRpdGxlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9JHttb2RhbElEfSBjbGFzcz1cIm1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+ICR7dGl0bGV9IDwvaDU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHllcy1tb2RhbC1idG4gYm94LXNoYWRvd1wiPlllczwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBib3gtc2hhZG93XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5ObzwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PmBcbiAgICAgICAgfSxcbiAgICAgICAgdXBsb2FkIDogKG1vZGFsSUQsIHRpdGxlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9JHttb2RhbElEfSBjbGFzcz1cIm1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+ICR7dGl0bGV9IDwvaDU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmVydGljbGUtc3BhY2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmxpbmVcIiBmb3I9XCJkYXRhZmlsZVwiPlBsZWFzZSBzcGVjaWZ5IGEgZmlsZSB0byBpbXBvcnQ6IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiZmlsZUZvclVwbG9hZFwiIHR5cGU9XCJmaWxlXCIgaWQ9XCJkYXRhZmlsZVwiIG5hbWU9XCJkYXRhZmlsZVwiIHNpemU9XCIzMFwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmVydGljbGUtc3BhY2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmxpbmVcIiBmb3I9XCJmaWxlTmFtZUlucHV0XCI+TmV3IGZpbGUgbmFtZSAob3B0aW9uYWwpOiA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiZmlsZU5hbWVJbnB1dFwiIG5hbWU9XCJmaWxlTmFtZUlucHV0XCIgc2l6ZT1cIjMwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBib3gtc2hhZG93IHVwbG9hZC1tb2RhbC1idG5cIiBkaXNhYmxlZD5VcGxvYWQ8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYm94LXNoYWRvd1wiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+YFxuICAgICAgICB9XG4gICAgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBkZWxldGVGaWxlSHRtbCA6IChmaWxlVHlwZSkgPT4ge1xuICAgICAgICBsZXQgbW9kYWxJRCA9IFwiZGVsZXRlRmlsZU1vZGFsXCJcbiAgICAgICAgbGV0IHRpdGxlID0gYFBlcm1hbmVudGx5IGRlbGV0ZSB0aGlzICR7ZmlsZVR5cGV9P2BcblxuICAgICAgICByZXR1cm4gdGVtcGxhdGVzLmNvbmZpcm1hdGlvbihtb2RhbElELCB0aXRsZSlcbiAgICB9LFxuICAgIG9wZXJhdGlvbkluZm9Nb2RhbEh0bWwgOiAocGFnZSkgPT4ge1xuICAgICAgICBsZXQgbW9kYWxJRCA9IFwib3BlcmF0aW9uSW5mb01vZGFsXCJcbiAgICAgICAgbGV0IHRpdGxlID0gXCJIZWxwXCJcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSBoZWxwW3BhZ2VdXG4gICAgICAgICAgXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZXMubWVzc2FnZShtb2RhbElELCB0aXRsZSwgbWVzc2FnZSlcbiAgICB9LFxuICAgIHJlbmRlckNyZWF0ZU1vZGFsSHRtbCA6IChpc01vZGVsLCBpc1NwYXRpYWwpID0+IHtcbiAgICAgICAgdmFyIHRpdGxlID0gJ0RpcmVjdG9yeSc7XG4gICAgICAgIGlmKGlzTW9kZWwpe1xuICAgICAgICAgICAgdGl0bGUgPSBpc1NwYXRpYWwgPyAnU3BhdGlhbCBNb2RlbCcgOiAnTm9uLVNwYXRpYWwgTW9kZWwnO1xuICAgICAgICB9XG4gICAgICAgIHRpdGxlID0gXCJOZXcgXCIgKyB0aXRsZVxuICAgICAgICBsZXQgbW9kYWxJRCA9IFwibmV3TW9kYWxNb2RlbFwiXG4gICAgICAgIGxldCBpbnB1dElEID0gXCJtb2RlbE5hbWVJbnB1dFwiXG4gICAgICAgIGxldCBsYWJlbCA9IFwiTmFtZTpcIlxuICAgICAgICBsZXQgdmFsdWUgPSBcIlwiXG4gICAgICAgIFxuICAgICAgICByZXR1cm4gdGVtcGxhdGVzLmlucHV0KG1vZGFsSUQsIGlucHV0SUQsIHRpdGxlLCBsYWJlbCwgdmFsdWUpXG4gICAgfSxcbiAgICBzYm1sVG9Nb2RlbEh0bWwgOiAodGl0bGUsIGVycm9ycykgPT4ge1xuICAgICAgICBsZXQgbW9kYWxJRCA9IFwic2JtbFRvTW9kZWxNb2RhbFwiXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBlcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmKGVycm9yc1tpXS5zdGFydHNXaXRoKFwiU0JNTCBFcnJvclwiKSB8fCBlcnJvcnNbaV0uc3RhcnRzV2l0aChcIkVycm9yXCIpKXtcbiAgICAgICAgICAgICAgICBlcnJvcnNbaV0gPSBcIjxiPkVycm9yPC9iPjogXCIgKyBlcnJvcnNbaV1cbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGVycm9yc1tpXSA9IFwiPGI+V2FybmluZzwvYj46IFwiICsgZXJyb3JzW2ldXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1lc3NhZ2UgPSBlcnJvcnMuam9pbihcIjxicj5cIilcblxuICAgICAgICByZXR1cm4gdGVtcGxhdGVzLm1lc3NhZ2UobW9kYWxJRCwgdGl0bGUsIG1lc3NhZ2UpXG4gICAgfSxcbiAgICB1cGxvYWRGaWxlRXJyb3JzSHRtbCA6IChmaWxlLCB0eXBlLCBzdGF0dXNNZXNzYWdlLCBlcnJvcnMpID0+IHtcbiAgICAgICAgbGV0IG1vZGFsSUQgPSBcInNibWxUb01vZGVsTW9kYWxcIlxuICAgICAgICBsZXQgdGl0bGUgPSBgRXJyb3JzIHVwbG9hZGluZyAke2ZpbGV9IGFzIGEgJHt0eXBlfSBmaWxlYFxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgZXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBlcnJvcnNbaV0gPSBcIjxiPkVycm9yPC9iPjogXCIgKyBlcnJvcnNbaV1cbiAgICAgICAgfVxuICAgICAgICBsZXQgbWVzc2FnZSA9IGA8cD4ke2Vycm9ycy5qb2luKFwiPGJyPlwiKX08L3A+PHA+PGI+VXBsb2FkIHN0YXR1czwvYj46ICR7c3RhdHVzTWVzc2FnZX08L3A+YFxuXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZXMubWVzc2FnZShtb2RhbElELCB0aXRsZSwgbWVzc2FnZSlcbiAgICB9LFxuICAgIHVwbG9hZEZpbGVIdG1sIDogKHR5cGUpID0+IHtcbiAgICAgICAgbGV0IG1vZGFsSUQgPSBcInVwbG9hZEZpbGVNb2RhbFwiXG4gICAgICAgIGxldCB0aXRsZSA9IGBVcGxvYWQgYSAke3R5cGV9YFxuXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZXMudXBsb2FkKG1vZGFsSUQsIHRpdGxlKVxuICAgIH0sXG4gICAgZHVwbGljYXRlV29ya2Zsb3dIdG1sIDogKHdrZmxGaWxlLCBib2R5KSA9PiB7XG4gICAgICAgIGxldCBtb2RhbElEID0gXCJkdXBsaWNhdGVXb3JrZmxvd01vZGFsXCJcbiAgICAgICAgbGV0IHRpdGxlID0gYE1vZGVsIGZvciAke3drZmxGaWxlfWBcblxuICAgICAgICByZXR1cm4gdGVtcGxhdGVzLm1lc3NhZ2UobW9kYWxJRCwgdGl0bGUsIGJvZHkpXG4gICAgfSxcbiAgICBtb2RlbE5vdEZvdW5kSHRtbCA6ICh0aXRsZSwgZXJyb3JNZXNzYWdlKSA9PiB7XG4gICAgICAgIGxldCBtb2RhbElEID0gXCJtb2RlbE5vdEZvdW5kTW9kYWxcIlxuICAgICAgICBsZXQgbWVzc2FnZSA9IGA8cD4ke2Vycm9yTWVzc2FnZX08L3A+PHA+UGxlYXNlIGNvcnJlY3QgdGhlIG1vZGVsIHBhdGggYW5kIHByZXNzIGVudGVyIHRvIHJlc2V0IHRoZSB3b3JrZmxvdy48L3A+YFxuXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZXMubWVzc2FnZShtb2RhbElELCB0aXRsZSwgbWVzc2FnZSlcbiAgICB9LFxuICAgIGFubm90YXRpb25Nb2RhbEh0bWwgOiAodHlwZSwgbmFtZSwgYW5ub3RhdGlvbikgPT4ge1xuICAgICAgICBsZXQgbW9kYWxJRCA9IGAke3R5cGV9QW5ub3RhdGlvbk1vZGFsYFxuICAgICAgICBsZXQgaW5wdXRJRCA9IGAke3R5cGV9QW5ub3RhdGlvbklucHV0YFxuICAgICAgICBsZXQgdGl0bGUgPSBgQW5ub3RhdGlvbiBmb3IgJHtuYW1lfWBcbiAgICAgICAgbGV0IGxhYmVsID0gXCJBbm5vdGF0aW9uOlwiXG5cbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlcy5pbnB1dChtb2RhbElELCBpbnB1dElELCB0aXRsZSwgbGFiZWwsIGFubm90YXRpb24pXG4gICAgfSxcbiAgICBtb2RlbFNhdmVFcnJvckh0bWwgOiAodGl0bGUsIGVycm9yKSA9PiB7XG4gICAgICAgIGxldCBtb2RhbElEID0gXCJtb2RlbFNhdmVFcnJvck1vZGFsXCJcblxuICAgICAgICByZXR1cm4gdGVtcGxhdGVzLm1lc3NhZ2UobW9kYWxJRCwgdGl0bGUsIGVycm9yKVxuICAgIH0sXG4gICAgbmV3RGlyZWN0b3J5RXJyb3JIdG1sIDogKHRpdGxlLCBlcnJvcikgPT4ge1xuICAgICAgICBsZXQgbW9kYWxJRCA9IFwibmV3RGlyZWN0b3J5RXJyb3JNb2RhbFwiXG5cbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlcy5tZXNzYWdlKG1vZGFsSUQsIHRpdGxlLCBlcnJvcilcbiAgICB9LFxuICAgIHJlbmRlckRlZmF1bHRNb2RlTW9kYWxIdG1sIDogKCkgPT4ge1xuICAgICAgICBsZXQgY29uY2VudHJhdGlvbkRlc2NpcHRpb24gPSBgU3BlY2llcyB3aWxsIG9ubHkgYmUgcmVwcmVzZW50ZWQgdXNpbmcgY29udGludW91cyAoZmxvYXRpbmcgcG9pbnQpIHZhbHVlcy5gO1xuICAgICAgICBsZXQgcG9wdWxhdGlvbkRlc2NyaXB0aW9uID0gYFBvcHVsYXRpb24gLSBTcGVjaWVzIHdpbGwgb25seSBiZSByZXByZXNlbnRlZCB1c2luZyBkaXNjcmV0ZSAoaW50ZWdlciBjb3VudCkgdmFsdWVzLmA7XG4gICAgICAgIGxldCBoeWJyaWREZXNjcmlwdGlvbiA9IGBBbGxvd3MgYSBzcGVjaWVzIHRvIGJlIHJlcHJlc2VudGVkIHVzaW5nIGNvbnRpbnVvdXMgYW5kL29yIGRpc2NyZXRlIHZhbHVlcy5gO1xuXG4gICAgICAgIHJldHVybiBgXG4gICAgICAgICAgICA8ZGl2IGlkPVwiZGVmYXVsdE1vZGVNb2RhbFwiIGNsYXNzPVwibW9kYWxcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPkRlZmF1bHQgU3BlY2llcyBNb2RlIChyZXF1aXJlZCk8L2g1PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlIGNsb3NlLW1vZGFsXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IG1vZGUgaXMgdXNlZCB0byBzZXQgdGhlIG1vZGUgb2YgYWxsIHNwZWNpZXMgYWRkZWQgdG8gdGhlIG1vZGVsLiAgXG4gICAgICAgICAgICAgICAgICAgICAgICBUaGUgbW9kZSBvZiBhIHNwZWNpZXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgaG93IGl0IHdpbGwgYmUgcmVwcmVzZW50ZWQgaW4gYSBIeWJyaWQgc2ltdWxhdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgPHA+U2VsZWN0IG9uZSBvZiB0aGUgZm9sbG93aW5nOiA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVmYXVsdC1tb2RlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgY29uY2VudHJhdGlvbi1idG4gYm94LXNoYWRvd1wiPkNvbmNlbnRyYXRpb248L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT1cIm1hcmdpbi10b3A6IDVweDtcIj4ke2NvbmNlbnRyYXRpb25EZXNjaXB0aW9ufTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWZhdWx0LW1vZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBwb3B1bGF0aW9uLWJ0biBib3gtc2hhZG93XCI+UG9wdWxhdGlvbjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPVwibWFyZ2luLXRvcDogNXB4O1wiPiR7cG9wdWxhdGlvbkRlc2NyaXB0aW9ufTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWZhdWx0LW1vZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBoeWJyaWQtYnRuIGJveC1zaGFkb3dcIj5IeWJyaWQgQ29uY2VudHJhdGlvbi9Qb3B1bGF0aW9uPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9XCJtYXJnaW4tdG9wOiA1cHg7XCI+JHtoeWJyaWREZXNjcmlwdGlvbn08L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5gXG4gICAgfVxufSIsIi8vbW9kZWxzXG52YXIgU3RhdGUgPSByZXF1aXJlKCdhbXBlcnNhbmQtc3RhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGF0ZS5leHRlbmQoe1xuICBwcm9wczoge1xuICAgIGV4cHJlc3Npb246ICdzdHJpbmcnLFxuICAgIHZhcmlhYmxlOiAnb2JqZWN0JyxcbiAgfSxcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKGF0dHJzLCBvcHRpb25zKSB7XG4gICAgU3RhdGUucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfSxcbn0pOyIsIi8vbW9kZWxzXG52YXIgRXZlbnRBc3NpZ25tZW50ID0gcmVxdWlyZSgnLi9ldmVudC1hc3NpZ25tZW50Jyk7XG4vL2NvbGxlY3Rpb25zXG52YXIgQ29sbGVjdGlvbiA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1jb2xsZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ29sbGVjdGlvbi5leHRlbmQoe1xuICBtb2RlbDogRXZlbnRBc3NpZ25tZW50LFxuICBhZGRFdmVudEFzc2lnbm1lbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFyaWFibGUgPSB0aGlzLmdldERlZmF1bHRWYXJpYWJsZSgpO1xuICAgIHZhciBldmVudEFzc2lnbm1lbnQgPSB0aGlzLmFkZCh7XG4gICAgICB2YXJpYWJsZTogdmFyaWFibGUsXG4gICAgICBleHByZXNzaW9uOiBcIlwiLFxuICAgIH0pO1xuICB9LFxuICBnZXREZWZhdWx0VmFyaWFibGU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3BlY2llcyA9IHRoaXMucGFyZW50LmNvbGxlY3Rpb24ucGFyZW50LnNwZWNpZXNcbiAgICBpZihzcGVjaWVzLmxlbmd0aCA+IDApe1xuICAgICAgcmV0dXJuIHNwZWNpZXMuYXQoMCk7XG4gICAgfWVsc2V7XG4gICAgICByZXR1cm4gdGhpcy5wYXJlbnQuY29sbGVjdGlvbi5wYXJlbnQucGFyYW1ldGVycy5hdCgwKVxuICAgIH1cbiAgfSxcbiAgcmVtb3ZlRXZlbnRBc3NpZ25tZW50OiBmdW5jdGlvbiAoZXZlbnRBc3NpZ25tZW50KSB7XG4gICAgdGhpcy5yZW1vdmUoZXZlbnRBc3NpZ25tZW50KTtcbiAgfSxcbn0pOyIsIi8vbW9kZWxzXG52YXIgU3RhdGUgPSByZXF1aXJlKCdhbXBlcnNhbmQtc3RhdGUnKTtcbi8vY29sbGVjdGlvbnNcbnZhciBFdmVudEFzc2lnbm1lbnRzID0gcmVxdWlyZSgnLi9ldmVudC1hc3NpZ25tZW50cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRlLmV4dGVuZCh7XG4gIHByb3BzOiB7XG4gICAgY29tcElEOiAnbnVtYmVyJyxcbiAgICBuYW1lOiAnc3RyaW5nJyxcbiAgICBhbm5vdGF0aW9uOiAnc3RyaW5nJyxcbiAgICBkZWxheTogJ3N0cmluZycsXG4gICAgcHJpb3JpdHk6ICdzdHJpbmcnLFxuICAgIHRyaWdnZXJFeHByZXNzaW9uOiAnc3RyaW5nJyxcbiAgICBpbml0aWFsVmFsdWU6ICdib29sZWFuJyxcbiAgICBwZXJzaXN0ZW50OiAnYm9vbGVhbicsXG4gICAgdXNlVmFsdWVzRnJvbVRyaWdnZXJUaW1lOiAnYm9vbGVhbicsXG4gIH0sXG4gIGNvbGxlY3Rpb25zOiB7XG4gICAgZXZlbnRBc3NpZ25tZW50czogRXZlbnRBc3NpZ25tZW50cyxcbiAgfSxcbiAgc2Vzc2lvbjoge1xuICAgIHNlbGVjdGVkOiB7XG4gICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICBkZWZhdWx0OiB0cnVlLFxuICAgIH0sXG4gIH0sXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uIChhdHRycywgb3B0aW9ucykge1xuICAgIFN0YXRlLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH0sXG59KTsiLCJ2YXIgXyA9IHJlcXVpcmUoJ3VuZGVyc2NvcmUnKTtcbi8vbW9kZWxzXG52YXIgRXZlbnQgPSByZXF1aXJlKCcuL2V2ZW50Jyk7XG4vL2NvbGxlY3Rpb25zXG52YXIgQ29sbGVjdGlvbiA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1jb2xsZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ29sbGVjdGlvbi5leHRlbmQoe1xuICBtb2RlbDogRXZlbnQsXG4gIGFkZEV2ZW50OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGlkID0gdGhpcy5wYXJlbnQuZ2V0RGVmYXVsdElEKCk7XG4gICAgdmFyIG5hbWUgPSB0aGlzLmdldERlZmF1bHROYW1lKCk7XG4gICAgdmFyIGV2ZW50ID0gdGhpcy5hZGQoe1xuICAgICAgY29tcElEOiBpZCxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICBhbm5vdGF0aW9uOiBcIlwiLFxuICAgICAgZGVsYXk6IFwiXCIsXG4gICAgICBwcmlvcml0eTogXCIwXCIsXG4gICAgICB0cmlnZ2VyRXhwcmVzc2lvbjogXCJcIixcbiAgICAgIGluaXRpYWxWYWx1ZTogZmFsc2UsXG4gICAgICBwZXJzaXN0ZW50OiBmYWxzZSxcbiAgICAgIHVzZVZhbHVlc0Zyb21UcmlnZ2VyVGltZTogZmFsc2UsXG4gICAgfSk7XG4gICAgZXZlbnQuZXZlbnRBc3NpZ25tZW50cy5hZGRFdmVudEFzc2lnbm1lbnQoKVxuICAgIHJldHVybiBldmVudFxuICB9LFxuICBnZXREZWZhdWx0TmFtZTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBpID0gdGhpcy5sZW5ndGggKyAxO1xuICAgIG5hbWUgPSAnZScgKyBpO1xuICAgIHZhciBuYW1lcyA9IHRoaXMubWFwKGZ1bmN0aW9uIChldmVudCkgeyByZXR1cm4gZXZlbnQubmFtZTsgfSk7XG4gICAgd2hpbGUoXy5jb250YWlucyhuYW1lcywgbmFtZSkpe1xuICAgICAgaSArPSAxO1xuICAgICAgbmFtZSA9ICdlJyArIGk7XG4gICAgfVxuICAgIHJldHVybiBuYW1lO1xuICB9LFxuICByZW1vdmVFdmVudDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdGhpcy5yZW1vdmUoZXZlbnQpO1xuICB9LFxufSk7IiwiLy9tb2RlbHNcbnZhciBTdGF0ZSA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1zdGF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRlLmV4dGVuZCh7XG4gIHByb3BzOiB7XG4gICAgY29tcElEOiAnbnVtYmVyJyxcbiAgICBuYW1lOiAnc3RyaW5nJyxcbiAgICBmdW5jdGlvbjogJ3N0cmluZycsXG4gICAgZXhwcmVzc2lvbjogJ3N0cmluZycsXG4gICAgdmFyaWFibGVzOiAnc3RyaW5nJyxcbiAgICBzaWduYXR1cmU6ICdzdHJpbmcnLFxuICAgIGFubm90YXRpb246ICdzdHJpbmcnLFxuICB9XG59KTsiLCIvL2NvbGxlY3Rpb25zXG52YXIgQ29sbGVjdGlvbiA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1jb2xsZWN0aW9uJyk7XG4vL21vZGVsc1xudmFyIEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHJlcXVpcmUoJy4vZnVuY3Rpb24tZGVmaW5pdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgbW9kZWw6IEZ1bmN0aW9uRGVmaW5pdGlvbixcbn0pOyIsIi8vIE1vZGVsc1xudmFyIFN0YXRlID0gcmVxdWlyZSgnYW1wZXJzYW5kLXN0YXRlJyk7XG52YXIgU3BlY2llID0gcmVxdWlyZSgnLi9zcGVjaWUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGF0ZS5leHRlbmQoe1xuICBwcm9wczoge1xuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGNvdW50OiAnbnVtYmVyJyxcbiAgICBzdWJkb21haW46ICdzdHJpbmcnLFxuICAgIHg6ICdudW1iZXInLFxuICAgIHk6ICdudW1iZXInLFxuICAgIHo6ICdudW1iZXInLFxuICB9LFxuICBjaGlsZHJlbjoge1xuICAgIHNwZWNpZTogU3BlY2llLFxuICB9LFxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYXR0cnMsIG9wdGlvbnMpIHtcbiAgICBTdGF0ZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gIH0sXG59KTsiLCIvLyBDb2xsZWN0aW9uc1xudmFyIENvbGxlY3Rpb24gPSByZXF1aXJlKCdhbXBlcnNhbmQtY29sbGVjdGlvbicpO1xuLy9Nb2RlbHNcbnZhciBJbml0aWFsQ29uZGl0aW9uID0gcmVxdWlyZSgnLi9pbml0aWFsLWNvbmRpdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgbW9kZWw6IEluaXRpYWxDb25kaXRpb24sXG4gIGFkZEluaXRpYWxDb25kaXRpb246IGZ1bmN0aW9uIChpbml0aWFsQ29uZGl0aW9uVHlwZSkge1xuICAgIHZhciBzdWJkb21haW4gPSB0aGlzLmdldERlZmF1bHRTdWJkb21haW4oKTtcbiAgICB2YXIgaW5pdGlhbENvbmRpdGlvbiA9IHRoaXMuYWRkKHtcbiAgICAgIHR5cGU6IGluaXRpYWxDb25kaXRpb25UeXBlLFxuICAgICAgc3ViZG9tYWluOiBzdWJkb21haW4sXG4gICAgICBjb3VudDogMCxcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwLFxuICAgICAgejogMCxcbiAgICB9KTtcbiAgICBpbml0aWFsQ29uZGl0aW9uLnNwZWNpZSA9IHRoaXMuZ2V0RGVmYXVsdFNwZWNpZXMoKTtcbiAgfSxcbiAgZ2V0RGVmYXVsdFNwZWNpZXM6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3BlY2llID0gdGhpcy5wYXJlbnQuc3BlY2llcy5hdCgwKTtcbiAgICByZXR1cm4gc3BlY2llO1xuICB9LFxuICBnZXREZWZhdWx0U3ViZG9tYWluOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHN1YmRvbWFpbiA9IHRoaXMucGFyZW50Lm1lc2hTZXR0aW5ncy51bmlxdWVTdWJkb21haW5zLmF0KDApO1xuICAgIHJldHVybiBzdWJkb21haW4ubmFtZTtcbiAgfSxcbiAgcmVtb3ZlSW5pdGlhbENvbmRpdGlvbjogZnVuY3Rpb24gKGluaXRpYWxDb25kaXRpb24pIHtcbiAgICB0aGlzLnJlbW92ZShpbml0aWFsQ29uZGl0aW9uKTtcbiAgfSxcbn0pOyIsIi8vbW9kZWxzXG52YXIgU3RhdGUgPSByZXF1aXJlKCdhbXBlcnNhbmQtc3RhdGUnKTtcbnZhciBTdWJkb21haW5zID0gcmVxdWlyZSgnLi9zdWJkb21haW5zJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhdGUuZXh0ZW5kKHtcbiAgcHJvcHM6IHtcbiAgICBjb3VudDoge1xuICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICBkZWZhdWx0OiAyLFxuICAgIH0sXG4gIH0sXG4gIGRlcml2ZWQ6IHtcbiAgICB1bmlxdWVTdWJkb21haW5zOiB7XG4gICAgICBkZXBzOiBbJ2NvdW50J10sXG4gICAgICBmbjogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdW5pcXVlU3ViZG9tYWlucyA9IG5ldyBTdWJkb21haW5zKCk7XG4gICAgICAgIGZvcih2YXIgaSA9IDE7IGkgPD0gdGhpcy5jb3VudDsgaSsrKXtcbiAgICAgICAgICB1bmlxdWVTdWJkb21haW5zLmFkZFN1YmRvbWFpbignc3ViZG9tYWluICcgKyBpICsgJzonKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5pcXVlU3ViZG9tYWlucztcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKGF0dHJzLCBvcHRpb25zKSB7XG4gICAgU3RhdGUucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfSxcbn0pOyIsIi8vbW9kZWxzXG52YXIgU3RhdGUgPSByZXF1aXJlKCdhbXBlcnNhbmQtc3RhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGF0ZS5leHRlbmQoe1xuICBwcm9wczoge1xuICAgIGVuZFNpbTogJ251bWJlcicsXG4gICAgdGltZVN0ZXA6ICdudW1iZXInLFxuICAgIHZvbHVtZTogJ251bWJlcicsXG4gICAgYWxnb3JpdGhtOiAnc3RyaW5nJyxcbiAgICByZWFsaXphdGlvbnM6ICdudW1iZXInLFxuICB9LFxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYXR0cnMsIG9wdGlvbnMpIHtcbiAgICBTdGF0ZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gIH0sXG59KTsiLCJ2YXIgYXBwID0gcmVxdWlyZSgnLi4vYXBwJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbnZhciB4aHIgPSByZXF1aXJlKCd4aHInKTtcbi8vbW9kZWxzXG52YXIgTW9kZWwgPSByZXF1aXJlKCdhbXBlcnNhbmQtbW9kZWwnKTtcbnZhciBNb2RlbFNldHRpbmdzID0gcmVxdWlyZSgnLi9tb2RlbC1zZXR0aW5ncycpO1xudmFyIFNpbXVsYXRpb25TZXR0aW5ncyA9IHJlcXVpcmUoJy4vc2ltdWxhdGlvbi1zZXR0aW5ncycpO1xudmFyIFBhcmFtZXRlclN3ZWVwU2V0dGluZ3MgPSByZXF1aXJlKCcuL3BhcmFtZXRlci1zd2VlcC1zZXR0aW5ncycpO1xudmFyIE1lc2hTZXR0aW5ncyA9IHJlcXVpcmUoJy4vbWVzaC1zZXR0aW5ncycpO1xuLy9jb2xsZWN0aW9uc1xudmFyIFNwZWNpZXMgPSByZXF1aXJlKCcuL3NwZWNpZXMnKTtcbnZhciBJbml0aWFsQ29uZGl0aW9ucyA9IHJlcXVpcmUoJy4vaW5pdGlhbC1jb25kaXRpb25zJyk7XG52YXIgUGFyYW1ldGVycyA9IHJlcXVpcmUoJy4vcGFyYW1ldGVycycpO1xudmFyIFJlYWN0aW9ucyA9IHJlcXVpcmUoJy4vcmVhY3Rpb25zJyk7XG52YXIgUnVsZXMgPSByZXF1aXJlKCcuL3J1bGVzJyk7XG52YXIgRXZlbnRzID0gcmVxdWlyZSgnLi9ldmVudHMnKTtcbnZhciBGdW5jdGlvbkRlZmluaXRpb25zID0gcmVxdWlyZSgnLi9mdW5jdGlvbi1kZWZpbml0aW9ucycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1vZGVsLmV4dGVuZCh7XG4gIHVybDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBwYXRoLmpvaW4oYXBwLmdldEFwaVBhdGgoKSwgXCJmaWxlL2pzb24tZGF0YVwiKStcIj9mb3I9XCIrdGhpcy5mb3IrXCImcGF0aD1cIit0aGlzLmRpcmVjdG9yeTtcbiAgfSxcbiAgcHJvcHM6IHtcbiAgICBpc19zcGF0aWFsOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdElEOiB7XG4gICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgIGRlZmF1bHQ6IDEsXG4gICAgfSxcbiAgICBkZWZhdWx0TW9kZToge1xuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICBkZWZhdWx0OiAnJyxcbiAgICB9LFxuICB9LFxuICBjb2xsZWN0aW9uczoge1xuICAgIHNwZWNpZXM6IFNwZWNpZXMsXG4gICAgaW5pdGlhbENvbmRpdGlvbnM6IEluaXRpYWxDb25kaXRpb25zLFxuICAgIHBhcmFtZXRlcnM6IFBhcmFtZXRlcnMsXG4gICAgcmVhY3Rpb25zOiBSZWFjdGlvbnMsXG4gICAgcnVsZXM6IFJ1bGVzLFxuICAgIGV2ZW50c0NvbGxlY3Rpb246IEV2ZW50cyxcbiAgICBmdW5jdGlvbkRlZmluaXRpb25zOiBGdW5jdGlvbkRlZmluaXRpb25zLFxuICB9LFxuICBjaGlsZHJlbjoge1xuICAgIG1vZGVsU2V0dGluZ3M6IE1vZGVsU2V0dGluZ3MsXG4gICAgc2ltdWxhdGlvblNldHRpbmdzOiBTaW11bGF0aW9uU2V0dGluZ3MsXG4gICAgcGFyYW1ldGVyU3dlZXBTZXR0aW5nczogUGFyYW1ldGVyU3dlZXBTZXR0aW5ncyxcbiAgICBtZXNoU2V0dGluZ3M6IE1lc2hTZXR0aW5nc1xuICB9LFxuICBzZXNzaW9uOiB7XG4gICAgbmFtZTogJ3N0cmluZycsXG4gICAgc2VsZWN0ZWRSZWFjdGlvbjogJ29iamVjdCcsXG4gICAgZGlyZWN0b3J5OiAnc3RyaW5nJyxcbiAgICBpc1ByZXZpZXc6ICdib29sZWFuJyxcbiAgICBmb3I6ICdzdHJpbmcnLFxuICB9LFxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYXR0cnMsIG9wdGlvbnMpe1xuICAgIE1vZGVsLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH0sXG4gIGdldERlZmF1bHRJRDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBpZCA9IHRoaXMuZGVmYXVsdElEO1xuICAgIHRoaXMuZGVmYXVsdElEICs9IDE7XG4gICAgcmV0dXJuIGlkO1xuICB9LFxuICBhdXRvU2F2ZTogZnVuY3Rpb24gKCkge1xuICAgIC8vVE9ETzogaW1wbGVtZW50IGF1dG8gc2F2ZVxuICB9LFxuICAvL2NhbGxlZCB3aGVuIHNhdmUgYnV0dG9uIGlzIGNsaWNrZWRcbiAgc2F2ZU1vZGVsOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuc3BlY2llcy5tYXAoZnVuY3Rpb24gKHNwZWNpZSkge1xuICAgICAgc2VsZi5zcGVjaWVzLnRyaWdnZXIoJ3VwZGF0ZS1zcGVjaWVzJywgc3BlY2llLmNvbXBJRCwgc3BlY2llLCBmYWxzZSk7XG4gICAgfSk7XG4gICAgdGhpcy5wYXJhbWV0ZXJzLm1hcChmdW5jdGlvbiAocGFyYW1ldGVyKSB7XG4gICAgICBzZWxmLnBhcmFtZXRlcnMudHJpZ2dlcigndXBkYXRlLXBhcmFtZXRlcnMnLCBwYXJhbWV0ZXIuY29tcElELCBwYXJhbWV0ZXIpO1xuICAgIH0pO1xuICAgIGlmKCFpc1ByZXZpZXcpe1xuICAgICAgdGhpcy5zaW11bGF0aW9uU2V0dGluZ3MubGV0VXNDaG9vc2VGb3JVc2UoKVxuICAgIH1cbiAgICB0aGlzLnNhdmUoKTtcbiAgfSxcbn0pO1xuIiwiLy9tb2RlbHNcbnZhciBTdGF0ZSA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1zdGF0ZScpO1xudmFyIFBhcmFtZXRlciA9IHJlcXVpcmUoJy4vcGFyYW1ldGVyJyk7XG52YXIgU3BlY2llcyA9IHJlcXVpcmUoJy4vc3BlY2llJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhdGUuZXh0ZW5kKHtcbiAgcHJvcHM6IHtcbiAgICBpczFEOiAnYm9vbGVhbicsXG4gICAgcDFNaW46ICdudW1iZXInLFxuICAgIHAxTWF4OiAnbnVtYmVyJyxcbiAgICBwMVN0ZXBzOiAnbnVtYmVyJyxcbiAgICBwMk1pbjogJ251bWJlcicsXG4gICAgcDJNYXg6ICdudW1iZXInLFxuICAgIHAyU3RlcHM6ICdudW1iZXInLFxuICB9LFxuICBjaGlsZHJlbjoge1xuICAgIHBhcmFtZXRlck9uZTogUGFyYW1ldGVyLFxuICAgIHBhcmFtZXRlclR3bzogUGFyYW1ldGVyLFxuICAgIHNwZWNpZXNPZkludGVyZXN0OiBTcGVjaWVzXG4gIH0sXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uKGF0dHJzLCBvcHRpb25zKSB7XG4gICAgU3RhdGUucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxufSk7ICIsInZhciBfID0gcmVxdWlyZSgndW5kZXJzY29yZScpO1xuLy9tb2RlbHNcbnZhciBTdGF0ZSA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1zdGF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRlLmV4dGVuZCh7XG4gIHByb3BzOiB7XG4gICAgY29tcElEOiAnbnVtYmVyJyxcbiAgICBuYW1lOiAnc3RyaW5nJyxcbiAgICBleHByZXNzaW9uOiAnc3RyaW5nJyxcbiAgICBhbm5vdGF0aW9uOiAnc3RyaW5nJyxcbiAgfSxcbiAgc2Vzc2lvbjoge1xuICAgIGluVXNlOiB7XG4gICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICB9LFxuICB9LFxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYXR0cnMsIG9wdGlvbnMpIHtcbiAgICBTdGF0ZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9LFxufSk7IiwidmFyIF8gPSByZXF1aXJlKCd1bmRlcnNjb3JlJyk7XG4vL21vZGVsc1xudmFyIFBhcmFtZXRlciA9IHJlcXVpcmUoJy4vcGFyYW1ldGVyJyk7XG4vL2NvbGxlY3Rpb25zXG52YXIgQ29sbGVjdGlvbiA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1jb2xsZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ29sbGVjdGlvbi5leHRlbmQoe1xuICBtb2RlbDogUGFyYW1ldGVyLFxuICBhZGRQYXJhbWV0ZXI6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaWQgPSB0aGlzLnBhcmVudC5nZXREZWZhdWx0SUQoKTtcbiAgICB2YXIgbmFtZSA9IHRoaXMuZ2V0RGVmYXVsdE5hbWUoKTtcbiAgICB2YXIgcGFyYW1ldGVyID0gdGhpcy5hZGQoe1xuICAgICAgY29tcElEOiBpZCxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICBleHByZXNzaW9uOiAnMC4wJyxcbiAgICAgIGFubm90YXRpb246IFwiXCIsXG4gICAgfSk7XG4gIH0sXG4gIGdldERlZmF1bHROYW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGkgPSB0aGlzLmxlbmd0aCArIDE7XG4gICAgdmFyIG5hbWUgPSAnaycgKyBpO1xuICAgIHZhciBuYW1lcyA9IHRoaXMubWFwKGZ1bmN0aW9uIChwYXJhbWV0ZXIpIHtyZXR1cm4gcGFyYW1ldGVyLm5hbWU7IH0pO1xuICAgIHdoaWxlKF8uY29udGFpbnMobmFtZXMsIG5hbWUpKSB7XG4gICAgICBpICs9IDE7XG4gICAgICBuYW1lID0gJ2snICsgaTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWU7XG4gIH0sXG4gIHJlbW92ZVBhcmFtZXRlcjogZnVuY3Rpb24gKHBhcmFtZXRlcikge1xuICAgIHRoaXMucmVtb3ZlKHBhcmFtZXRlcik7XG4gIH0sXG59KTsiLCJ2YXIgXyA9IHJlcXVpcmUoJ3VuZGVyc2NvcmUnKTtcbi8vbW9kZWxzXG52YXIgU3RhdGUgPSByZXF1aXJlKCdhbXBlcnNhbmQtc3RhdGUnKTtcbnZhciBQYXJhbWV0ZXIgPSByZXF1aXJlKCcuL3BhcmFtZXRlcicpO1xuLy9jb2xsZWN0aW9uc1xudmFyIFN0b2ljaFNwZWNpZXMgPSByZXF1aXJlKCcuL3N0b2ljaC1zcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhdGUuZXh0ZW5kKHtcbiAgcHJvcHM6IHtcbiAgICBjb21wSUQ6ICdudW1iZXInLFxuICAgIG5hbWU6ICdzdHJpbmcnLFxuICAgIHJlYWN0aW9uVHlwZTogJ3N0cmluZycsXG4gICAgc3VtbWFyeTogJ3N0cmluZycsXG4gICAgbWFzc2FjdGlvbjogJ2Jvb2xlYW4nLFxuICAgIHByb3BlbnNpdHk6ICdzdHJpbmcnLFxuICAgIGFubm90YXRpb246ICdzdHJpbmcnLFxuICAgIHN1YmRvbWFpbnM6IHtcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gKCkge3JldHVybiBbXTsgfSxcbiAgICB9LFxuICB9LFxuICBjaGlsZHJlbjoge1xuICAgIHJhdGU6IFBhcmFtZXRlcixcbiAgfSxcbiAgY29sbGVjdGlvbnM6IHtcbiAgICByZWFjdGFudHM6IFN0b2ljaFNwZWNpZXMsXG4gICAgcHJvZHVjdHM6IFN0b2ljaFNwZWNpZXMsXG4gIH0sXG4gIHNlc3Npb246IHtcbiAgICBzZWxlY3RlZDoge1xuICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB9LFxuICAgIGhhc0NvbmZsaWN0OiB7XG4gICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICB9LFxuICB9LFxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYXR0cnMsIG9wdGlvbnMpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgU3RhdGUucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0aGlzLm9uKCdjaGFuZ2UtcmVhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLmJ1aWxkU3VtbWFyeSgpO1xuICAgICAgc2VsZi5jaGVja01vZGVzKCk7XG4gICAgfSk7XG4gIH0sXG4gIGJ1aWxkU3VtbWFyeTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdW1tYXJ5ID0gXCJcIjtcblxuICAgIHZhciBudW1SZWFjdGFudHMgPSB0aGlzLnJlYWN0YW50cy5tb2RlbHMubGVuZ3RoO1xuICAgIHZhciBudW1Qcm9kdWN0cyA9IHRoaXMucHJvZHVjdHMubW9kZWxzLmxlbmd0aDtcblxuICAgIGlmKG51bVJlYWN0YW50cyA9PT0gMCl7XG4gICAgICBzdW1tYXJ5ID0gJ1xcXFxlbXB0eXNldCc7XG4gICAgfWVsc2V7XG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgbnVtUmVhY3RhbnRzOyBpKyspe1xuICAgICAgICB2YXIgcmVhY3RhbnQgPSB0aGlzLnJlYWN0YW50cy5tb2RlbHNbaV07XG4gICAgICAgIGlmKHJlYWN0YW50LnJhdGlvID4gMSl7XG4gICAgICAgICAgc3VtbWFyeSArPSByZWFjdGFudC5yYXRpbyArIHJlYWN0YW50LnNwZWNpZS5uYW1lO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICBzdW1tYXJ5ICs9IHJlYWN0YW50LnNwZWNpZS5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoaSA8IG51bVJlYWN0YW50cyAtIDEpe1xuICAgICAgICAgIHN1bW1hcnkgKz0gJysnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3VtbWFyeSArPSAnIFxcXFxyaWdodGFycm93ICc7XG5cbiAgICBpZihudW1Qcm9kdWN0cyA9PT0gMCl7XG4gICAgICBzdW1tYXJ5ICs9ICdcXFxcZW1wdHlzZXQnO1xuICAgIH1lbHNle1xuICAgICAgZm9yKHZhciBpID0gMDsgaSA8IG51bVByb2R1Y3RzOyBpKyspe1xuICAgICAgICB2YXIgcHJvZHVjdCA9IHRoaXMucHJvZHVjdHMubW9kZWxzW2ldO1xuICAgICAgICBpZihwcm9kdWN0LnJhdGlvID4gMSl7XG4gICAgICAgICAgc3VtbWFyeSArPSBwcm9kdWN0LnJhdGlvICsgcHJvZHVjdC5zcGVjaWUubmFtZTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgc3VtbWFyeSArPSBwcm9kdWN0LnNwZWNpZS5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoaSA8IG51bVByb2R1Y3RzIC0gMSl7XG4gICAgICAgICAgc3VtbWFyeSArPSAnKyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3VtbWFyeSA9IHN1bW1hcnkucmVwbGFjZSgvXy9nLCAnXFxcXF8nKTtcblxuICAgIHRoaXMuc3VtbWFyeSA9IHN1bW1hcnlcbiAgfSxcbiAgY2hlY2tNb2RlczogZnVuY3Rpb24gKCkge1xuICAgIHZhciBoYXNDb250aW51b3VzID0gZmFsc2U7XG4gICAgdmFyIGhhc0R5bmFtaWMgPSBmYWxzZTtcbiAgICB2YXIgaGFzRGlzY3JldGUgPSBmYWxzZTtcbiAgICB0aGlzLnJlYWN0YW50cy5tYXAoZnVuY3Rpb24gKHJlYWN0YW50KSB7IFxuICAgICAgaWYocmVhY3RhbnQuc3BlY2llLm1vZGUgPT09ICdjb250aW51b3VzJyAmJiAhaGFzQ29udGludW91cylcbiAgICAgICAgaGFzQ29udGludW91cyA9IHRydWU7XG4gICAgICBlbHNlIGlmKHJlYWN0YW50LnNwZWNpZS5tb2RlID09PSAnZHluYW1pYycgJiYgIWhhc0R5bmFtaWMpXG4gICAgICAgIGhhc0R5bmFtaWMgPSB0cnVlO1xuICAgICAgZWxzZSBpZihyZWFjdGFudC5zcGVjaWUubW9kZSA9PT0gJ2Rpc2NyZXRlJyAmJiAhaGFzRGlzY3JldGUpXG4gICAgICAgIGhhc0Rpc2NyZXRlID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBpZighaGFzQ29udGludW91cyB8fCAhaGFzRHluYW1pYykge1xuICAgICAgdGhpcy5wcm9kdWN0cy5tYXAoZnVuY3Rpb24gKHByb2R1Y3QpIHsgXG4gICAgICAgIGlmKHByb2R1Y3Quc3BlY2llLm1vZGUgPT09ICdjb250aW51b3VzJyAmJiAhaGFzQ29udGludW91cylcbiAgICAgICAgICBoYXNDb250aW51b3VzID0gdHJ1ZTtcbiAgICAgICAgZWxzZSBpZihwcm9kdWN0LnNwZWNpZS5tb2RlID09PSAnZHluYW1pYycgJiYgIWhhc0R5bmFtaWMpXG4gICAgICAgICAgaGFzRHluYW1pYyA9IHRydWU7XG4gICAgICAgIGVsc2UgaWYocHJvZHVjdC5zcGVjaWUubW9kZSA9PT0gJ2Rpc2NyZXRlJyAmJiAhaGFzRGlzY3JldGUpXG4gICAgICAgIGhhc0Rpc2NyZXRlID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmhhc0NvbmZsaWN0ID0gQm9vbGVhbihoYXNDb250aW51b3VzICYmIChoYXNEeW5hbWljIHx8IGhhc0Rpc2NyZXRlKSlcbiAgfSxcbn0pOyIsInZhciBfID0gcmVxdWlyZSgndW5kZXJzY29yZScpO1xudmFyIEV2ZW50cyA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1ldmVudHMnKTtcbi8vbW9kZWxzXG52YXIgUmVhY3Rpb24gPSByZXF1aXJlKCcuL3JlYWN0aW9uJyk7XG4vL2NvbGxlY3Rpb25zXG52YXIgQ29sbGVjdGlvbiA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1jb2xsZWN0aW9uJyk7XG5cblJlYWN0aW9ucyA9IENvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgbW9kZWw6IFJlYWN0aW9uLFxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYXR0cnMsIG9wdGlvbnMpIHtcbiAgICBDb2xsZWN0aW9uLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH0sXG4gIGFkZFJlYWN0aW9uOiBmdW5jdGlvbiAocmVhY3Rpb25UeXBlLCBzdG9pY2hBcmdzLCBzdWJkb21haW5zKSB7XG4gICAgdmFyIGlkID0gdGhpcy5wYXJlbnQuZ2V0RGVmYXVsdElEKCk7XG4gICAgdmFyIG5hbWUgPSB0aGlzLmdldERlZmF1bHROYW1lKCk7XG4gICAgdmFyIG1hc3NhY3Rpb24gPSByZWFjdGlvblR5cGUgPT09ICdjdXN0b20tbWFzc2FjdGlvbic7XG4gICAgdmFyIHJlYWN0aW9uID0gbmV3IFJlYWN0aW9uKHtcbiAgICAgIGNvbXBJRDogaWQsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgcmVhY3Rpb25UeXBlOiByZWFjdGlvblR5cGUsXG4gICAgICBtYXNzYWN0aW9uOiBtYXNzYWN0aW9uLFxuICAgICAgcHJvcGVuc2l0eTogJycsXG4gICAgICBhbm5vdGF0aW9uOiAnJyxcbiAgICAgIHN1YmRvbWFpbnM6IHN1YmRvbWFpbnMsXG4gICAgICByZWFjdGFudHM6IHN0b2ljaEFyZ3MucmVhY3RhbnRzLFxuICAgICAgcHJvZHVjdHM6IHN0b2ljaEFyZ3MucHJvZHVjdHMsXG4gICAgfSk7XG4gICAgdGhpcy5zZXREZWZhdWx0U3BlY2llRm9yU3RvaWNoU3BlY2llcyhyZWFjdGlvbi5yZWFjdGFudHMpO1xuICAgIHRoaXMuc2V0RGVmYXVsdFNwZWNpZUZvclN0b2ljaFNwZWNpZXMocmVhY3Rpb24ucHJvZHVjdHMpO1xuICAgIGlmKHJlYWN0aW9uVHlwZSAhPT0gJ2N1c3RvbS1wcm9wZW5zaXR5JylcbiAgICAgIHJlYWN0aW9uLnJhdGUgPSB0aGlzLmdldERlZmF1bHRSYXRlKCk7XG4gICAgcmVhY3Rpb24uYnVpbGRTdW1tYXJ5KClcbiAgICB0aGlzLmFkZChyZWFjdGlvbik7XG4gICAgcmV0dXJuIHJlYWN0aW9uO1xuICB9LFxuICBnZXREZWZhdWx0TmFtZTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBpID0gdGhpcy5sZW5ndGggKyAxO1xuICAgIHZhciBuYW1lID0gJ3InICsgaTtcbiAgICB2YXIgbmFtZXMgPSB0aGlzLm1hcChmdW5jdGlvbiAocmVhY3Rpb24pIHtyZXR1cm4gcmVhY3Rpb24ubmFtZTsgfSk7XG4gICAgd2hpbGUoXy5jb250YWlucyhuYW1lcywgbmFtZSkpe1xuICAgICAgaSArPSAxO1xuICAgICAgbmFtZSA9ICdyJyArIGk7XG4gICAgfVxuICAgIHJldHVybiBuYW1lO1xuICB9LFxuICBzZXREZWZhdWx0U3BlY2llRm9yU3RvaWNoU3BlY2llczogZnVuY3Rpb24gKHN0b2ljaFNwZWNpZXMpIHtcbiAgICBzdG9pY2hTcGVjaWVzLmZvckVhY2goZnVuY3Rpb24gKHN0b2ljaFNwZWNpZSkge1xuICAgICAgc3RvaWNoU3BlY2llLnNwZWNpZSA9IHRoaXMuZ2V0RGVmYXVsdFNwZWNpZSgpO1xuICAgIH0sIHRoaXMpO1xuICB9LFxuICBnZXREZWZhdWx0U3BlY2llOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNwZWNpZSA9IHRoaXMucGFyZW50LnNwZWNpZXMuYXQoMCk7XG4gICAgcmV0dXJuIHNwZWNpZTtcbiAgfSxcbiAgZ2V0RGVmYXVsdFJhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyYW1ldGVyID0gdGhpcy5wYXJlbnQucGFyYW1ldGVycy5hdCgwKTtcbiAgICByZXR1cm4gcGFyYW1ldGVyO1xuICB9LFxuICByZW1vdmVSZWFjdGlvbjogZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgdGhpcy5yZW1vdmUocmVhY3Rpb24pO1xuICB9LFxufSk7XG5cbkV2ZW50cy5jcmVhdGVFbWl0dGVyKFJlYWN0aW9ucyk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3Rpb25zOyIsIi8vbW9kZWxzXG52YXIgU3RhdGUgPSByZXF1aXJlKCdhbXBlcnNhbmQtc3RhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGF0ZS5leHRlbmQoe1xuICBwcm9wczoge1xuICAgIGNvbXBJRDogJ251bWJlcicsXG4gICAgbmFtZTogJ3N0cmluZycsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgdmFyaWFibGU6ICdvYmplY3QnLFxuICAgIGV4cHJlc3Npb246ICdzdHJpbmcnLFxuICAgIGFubm90YXRpb246ICdzdHJpbmcnLFxuICB9LFxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYXR0cnMsIG9wdGlvbnMpIHtcbiAgICBTdGF0ZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9LFxufSk7IiwidmFyIF8gPSByZXF1aXJlKCd1bmRlcnNjb3JlJyk7XG4vL21vZGVsc1xudmFyIFJ1bGUgPSByZXF1aXJlKCcuL3J1bGUnKTtcbi8vY29sbGVjdGlvbnNcbnZhciBDb2xsZWN0aW9uID0gcmVxdWlyZSgnYW1wZXJzYW5kLWNvbGxlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBDb2xsZWN0aW9uLmV4dGVuZCh7XG4gIG1vZGVsOiBSdWxlLFxuICBhZGRSdWxlOiBmdW5jdGlvbiAodHlwZSkge1xuICAgIHZhciBpZCA9IHRoaXMucGFyZW50LmdldERlZmF1bHRJRCgpO1xuICAgIHZhciBuYW1lID0gdGhpcy5nZXREZWZhdWx0TmFtZSgpO1xuICAgIHZhciB2YXJpYWJsZSA9IHRoaXMuZ2V0RGVmYXVsdFZhcmlhYmxlKCk7XG4gICAgdmFyIHJ1bGUgPSBuZXcgUnVsZSh7XG4gICAgICBjb21wSUQ6IGlkLFxuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBleHByZXNzaW9uOiAnJyxcbiAgICAgIGFubm90YXRpb246ICcnLFxuICAgIH0pO1xuICAgIHJ1bGUudmFyaWFibGUgPSB2YXJpYWJsZTtcbiAgICB0aGlzLmFkZChydWxlKTtcbiAgfSxcbiAgcmVtb3ZlUnVsZTogZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICB0aGlzLnJlbW92ZShydWxlKTtcbiAgfSxcbiAgZ2V0RGVmYXVsdE5hbWU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaSA9IHRoaXMubGVuZ3RoICsgMTtcbiAgICB2YXIgbmFtZSA9ICdycicgKyBpO1xuICAgIHZhciBuYW1lcyA9IHRoaXMubWFwKGZ1bmN0aW9uIChydWxlKSB7cmV0dXJuIHJ1bGUubmFtZTsgfSk7XG4gICAgd2hpbGUoXy5jb250YWlucyhuYW1lcywgbmFtZSkpe1xuICAgICAgaSArPSAxO1xuICAgICAgbmFtZSA9ICdycicgKyBpO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZTtcbiAgfSxcbiAgZ2V0RGVmYXVsdFZhcmlhYmxlOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNwZWNpZXMgPSB0aGlzLnBhcmVudC5zcGVjaWVzXG4gICAgaWYoc3BlY2llcy5sZW5ndGggPiAwKXtcbiAgICAgIHJldHVybiBzcGVjaWVzLmF0KDApO1xuICAgIH1lbHNle1xuICAgICAgcmV0dXJuIHRoaXMucGFyZW50LnBhcmFtZXRlcnMuYXQoMClcbiAgICB9XG4gIH0sXG59KTsiLCIvL21vZGVsc1xudmFyIFN0YXRlID0gcmVxdWlyZSgnYW1wZXJzYW5kLXN0YXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhdGUuZXh0ZW5kKHtcbiAgcHJvcHM6IHtcbiAgICBpc0F1dG9tYXRpYzogJ2Jvb2xlYW4nLFxuICAgIHJlbGF0aXZlVG9sOiAnbnVtYmVyJyxcbiAgICBhYnNvbHV0ZVRvbDogJ251bWJlcicsXG4gICAgcmVhbGl6YXRpb25zOiAnbnVtYmVyJyxcbiAgICBhbGdvcml0aG06ICdzdHJpbmcnLFxuICAgIHNlZWQ6ICdudW1iZXInLFxuICAgIHRhdVRvbDogJ251bWJlcicsXG4gIH0sXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uIChhdHRycywgb3B0aW9ucykge1xuICAgIFN0YXRlLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH0sXG4gIGxldFVzQ2hvb3NlRm9yWW91OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGRlZmF1bHRNb2RlID0gdGhpcy5wYXJlbnQuZGVmYXVsdE1vZGU7XG4gICAgaWYoZGVmYXVsdE1vZGUgPT09IFwiZHluYW1pY1wiKXtcbiAgICAgIHZhciBzcGVjaWVzID0gdGhpcy5wYXJlbnQuc3BlY2llc1xuICAgICAgdmFyIGRpc2NyZXRlU3BlY2llcyA9IHNwZWNpZXMuZmlsdGVyKGZ1bmN0aW9uIChzcGVjaWUpIHtcbiAgICAgICAgY29uc29sZS5sb2coc3BlY2llLm1vZGUpXG4gICAgICAgIGlmKHNwZWNpZS5tb2RlID09PSBcImRpc2NyZXRlXCIpXG4gICAgICAgICAgcmV0dXJuIHNwZWNpZVxuICAgICAgfSk7XG4gICAgICBpZihkaXNjcmV0ZVNwZWNpZXMubGVuZ3RoID09PSBzcGVjaWVzLmxlbmd0aClcbiAgICAgICAgZGVmYXVsdE1vZGUgPSBcImRpc2NyZXRlXCJcbiAgICB9XG4gICAgdmFyIG51bUV2ZW50cyA9IHRoaXMucGFyZW50LmV2ZW50c0NvbGxlY3Rpb24ubGVuZ3RoO1xuICAgIHZhciBudW1SdWxlcyA9IHRoaXMucGFyZW50LnJ1bGVzLmxlbmd0aDtcbiAgICB2YXIgbnVtRnVuY0RlZiA9IHRoaXMucGFyZW50LmZ1bmN0aW9uRGVmaW5pdGlvbnMubGVuZ3RoO1xuICAgIHZhciB0VG9sID0gdGhpcy50YXVUb2xcbiAgICB2YXIgYVRvbCA9IHRoaXMuYWJzb2x1dGVUb2xcbiAgICB2YXIgclRvbCA9IHRoaXMucmVsYXRpdmVUb2xcblxuICAgIGlmKG51bUV2ZW50cyB8fCBudW1SdWxlcyB8fCBudW1GdW5jRGVmIHx8IHJUb2wgIT09IDFlLTMgfHwgYVRvbCAhPT0gMWUtNiB8fCBkZWZhdWx0TW9kZSAhPT0gJ2Rpc2NyZXRlJyl7XG4gICAgICB0aGlzLmFsZ29yaXRobSA9IFwiSHlicmlkLVRhdS1MZWFwaW5nXCI7XG4gICAgfWVsc2UgaWYodFRvbCAhPT0gMC4wMyl7XG4gICAgICB0aGlzLmFsZ29yaXRobSA9IFwiVGF1LUxlYXBpbmdcIjtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMuYWxnb3JpdGhtID0gXCJTU0FcIlxuICAgIH1cbiAgfSxcbn0pOyIsInZhciBfID0gcmVxdWlyZSgndW5kZXJzY29yZScpO1xuLy9tb2RlbHNcbnZhciBTdGF0ZSA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1zdGF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRlLmV4dGVuZCh7XG4gIHByb3BzOiB7XG4gICAgY29tcElEOiAnbnVtYmVyJyxcbiAgICBuYW1lOiAnc3RyaW5nJyxcbiAgICB2YWx1ZTogJ251bWJlcicsXG4gICAgbW9kZTogJ3N0cmluZycsXG4gICAgc3dpdGNoVG9sOiAnbnVtYmVyJyxcbiAgICBzd2l0Y2hNaW46ICdudW1iZXInLFxuICAgIGlzU3dpdGNoVG9sOiAnYm9vbGVhbicsXG4gICAgYW5ub3RhdGlvbjogJ3N0cmluZycsXG4gICAgZGlmZnVzaW9uQ29lZmY6ICdudW1iZXInLFxuICAgIHN1YmRvbWFpbnM6IHtcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24oKSB7cmV0dXJuIFtdOyB9XG4gICAgfSxcbiAgfSxcbiAgc2Vzc2lvbjoge1xuICAgIGluVXNlOiB7XG4gICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICB9LFxuICB9LFxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYXR0cnMsIG9wdGlvbnMpIHtcbiAgICBTdGF0ZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9LFxufSk7IiwidmFyIF8gPSByZXF1aXJlKCd1bmRlcnNjb3JlJyk7XG4vL21vZGVsc1xudmFyIFNwZWNpZSA9IHJlcXVpcmUoJy4vc3BlY2llJyk7XG4vL2NvbGxlY3Rpb25zXG52YXIgQ29sbGVjdGlvbiA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1jb2xsZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ29sbGVjdGlvbi5leHRlbmQoe1xuICBtb2RlbDogU3BlY2llLFxuICBhZGRTcGVjaWU6IGZ1bmN0aW9uIChzdWJkb21haW5zKSB7XG4gICAgdmFyIGlkID0gdGhpcy5wYXJlbnQuZ2V0RGVmYXVsdElEKCk7XG4gICAgdmFyIG5hbWUgPSB0aGlzLmdldERlZmF1bHROYW1lKCk7XG4gICAgdmFyIHNwZWNpZSA9IHRoaXMuYWRkKHtcbiAgICAgIGNvbXBJRDogaWQsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6IDAsXG4gICAgICBtb2RlOiB0aGlzLnBhcmVudC5kZWZhdWx0TW9kZSxcbiAgICAgIHN3aXRjaFRvbDogMC4wMyxcbiAgICAgIHN3aXRjaE1pbjogMTAwLFxuICAgICAgaXNTd2l0Y2hUb2w6IHRydWUsXG4gICAgICBhbm5vdGF0aW9uOiBcIlwiLFxuICAgICAgZGlmZnVzaW9uQ29lZmY6IDAuMCxcbiAgICAgIHN1YmRvbWFpbnM6IHN1YmRvbWFpbnNcbiAgICB9KTtcbiAgfSxcbiAgZ2V0RGVmYXVsdE5hbWU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaSA9IHRoaXMubGVuZ3RoICsgMTtcbiAgICB2YXIgbmFtZSA9ICdzJyArIGk7XG4gICAgdmFyIG5hbWVzID0gdGhpcy5tYXAoZnVuY3Rpb24gKHNwZWNpZSkgeyByZXR1cm4gc3BlY2llLm5hbWU7IH0pO1xuICAgIHdoaWxlKF8uY29udGFpbnMobmFtZXMsIG5hbWUpKSB7XG4gICAgICBpICs9IDE7XG4gICAgICBuYW1lID0gJ3MnICsgaTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWU7XG4gIH0sXG4gIHJlbW92ZVNwZWNpZTogZnVuY3Rpb24gKHNwZWNpZSkge1xuICAgIHRoaXMucmVtb3ZlKHNwZWNpZSk7XG4gIH0sXG59KTsiLCJ2YXIgXyA9IHJlcXVpcmUoJ3VuZGVyc2NvcmUnKTtcbi8vbW9kZWxzXG52YXIgU3RhdGUgPSByZXF1aXJlKCdhbXBlcnNhbmQtc3RhdGUnKTtcbnZhciBTcGVjaWUgPSByZXF1aXJlKCcuL3NwZWNpZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRlLmV4dGVuZCh7XG4gIHByb3BzOiB7XG4gICAgcmF0aW86ICdudW1iZXInLFxuICB9LFxuICBjaGlsZHJlbjoge1xuICAgIHNwZWNpZTogU3BlY2llLFxuICB9LFxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYXR0cnMsIG9wdGlvbnMpIHtcbiAgICBTdGF0ZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9LFxufSk7IiwidmFyIF8gPSByZXF1aXJlKCd1bmRlcnNjb3JlJyk7XG4vL21vZGVsc1xudmFyIFN0b2ljaFNwZWNpZSA9IHJlcXVpcmUoJy4vc3RvaWNoLXNwZWNpZScpO1xuLy9jb2xsZWN0aW9uc1xudmFyIENvbGxlY3Rpb24gPSByZXF1aXJlKCdhbXBlcnNhbmQtY29sbGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgbW9kZWw6IFN0b2ljaFNwZWNpZSxcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKGF0dHJzLCBvcHRpb25zKSB7XG4gICAgQ29sbGVjdGlvbi5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHRoaXMub24oJ2FkZCByZW1vdmUnLCBfLmJpbmQodGhpcy50cmlnZ2VyQ2hhbmdlLCB0aGlzKSk7XG4gIH0sXG4gIHRyaWdnZXJDaGFuZ2U6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmJhc2VNb2RlbCA9IHRoaXMucGFyZW50LmNvbGxlY3Rpb24ucGFyZW50O1xuICAgIHRoaXMuYmFzZU1vZGVsLnNwZWNpZXMudHJpZ2dlcignc3RvaWNoLXNwZWNpZXMtY2hhbmdlJyk7XG4gIH0sXG4gIGFkZFN0b2ljaFNwZWNpZTogZnVuY3Rpb24gKHNwZWNpZU5hbWUpIHtcbiAgICB2YXIgc3BlY2llID0gdGhpcy5wYXJlbnQuY29sbGVjdGlvbi5wYXJlbnQuc3BlY2llcy5maWx0ZXIoZnVuY3Rpb24gKHNwZWNpZSkge1xuICAgICAgICByZXR1cm4gc3BlY2llLm5hbWUgPT09IHNwZWNpZU5hbWU7XG4gICAgfSlbMF07XG4gICAgdmFyIHN0b2ljaFNwZWNpZSA9IG5ldyBTdG9pY2hTcGVjaWUoe1xuICAgICAgICByYXRpbzogMVxuICAgIH0pO1xuICAgIHN0b2ljaFNwZWNpZS5zcGVjaWUgPSBzcGVjaWU7XG4gICAgdGhpcy5hZGQoc3RvaWNoU3BlY2llKTtcbiAgfSxcbiAgcmVtb3ZlU3RvaWNoU3BlY2llOiBmdW5jdGlvbiAoc3RvaWNoU3BlY2llKSB7XG4gICAgc3RvaWNoU3BlY2llLnN0b3BMaXN0ZW5pbmcoKTtcbiAgICB0aGlzLnJlbW92ZShzdG9pY2hTcGVjaWUpO1xuICB9LFxufSk7IiwiLy9tb2RlbFxudmFyIFN0YXRlID0gcmVxdWlyZSgnYW1wZXJzYW5kLXN0YXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhdGUuZXh0ZW5kKHtcbiAgcHJvcHM6IHtcbiAgICBuYW1lOiAnc3RyaW5nJyxcbiAgfSxcbn0pOyIsIi8vbW9kZWxzXG52YXIgU3ViZG9tYWluID0gcmVxdWlyZSgnLi9zdWJkb21haW4nKTtcbi8vY29sbGVjdGlvbnNcbnZhciBDb2xsZWN0aW9uID0gcmVxdWlyZSgnYW1wZXJzYW5kLWNvbGxlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBDb2xsZWN0aW9uLmV4dGVuZCh7XG4gIG1vZGVsOiBTdWJkb21haW4sXG4gIGFkZFN1YmRvbWFpbjogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aGlzLmFkZCh7bmFtZTogbmFtZX0pO1xuICB9LFxuICByZW1vdmVTdWJkb21haW5zOiBmdW5jdGlvbiAoc3ViZG9tYWluKSB7XG4gICAgdGhpcy5yZW1vdmUoc3ViZG9tYWluKTtcbiAgfSxcbn0pOyIsIm1vZHVsZS5leHBvcnRzID0ge1xuICAgICdmaWxlLWJyb3dzZXInIDogYFxuICAgICAgICA8cD48Yj5PcGVuL0VkaXQgYSBGaWxlPC9iPjogRG91YmxlLWNsaWNrIG9uIGEgZmlsZSBvciByaWdodC1jbGljayBvbiBhIGZpbGUgYW5kIGNsaWNrIE9wZW4vRWRpdC4gIFxuICAgICAgICA8Yj5Ob3RlPC9iPjogU29tZSBmaWxlcyB3aWxsIG9wZW4gaW4gYSBuZXcgdGFiIHNvIHlvdSBtYXkgd2FudCB0byB0dXJuIG9mZiB0aGUgcG9wLXVwIGJsb2NrZXIuPC9wPlxuICAgICAgICA8cD48Yj5PcGVuIERpcmVjdG9yeTwvYj46IENsaWNrIG9uIHRoZSBhcnJvdyBuZXh0IHRvIHRoZSBkaXJlY3Rvcnkgb3IgZG91YmxlLWNsaWNrIG9uIHRoZSBkaXJlY3RvcnkuPC9wPlxuICAgICAgICA8cD48Yj5DcmVhdGUgYSBEaXJlY3RvcnkvTW9kZWw8L2I+OiBSaWdodC1jbGljayBvbiBhIGRpcmVjdG9yeSwgY2xpY2sgTmV3IERpcmVjdG9yeS9OZXcgTW9kZWwsIGFuZCBlbnRlciB0aGUgbmFtZSBvZiBkaXJlY3RvcnkvbW9kZWwgb3IgcGF0aC4gIFxuICAgICAgICBGb3IgbW9kZWxzIHlvdSB3aWxsIG5lZWQgdG8gY2xpY2sgb24gdGhlIHR5cGUgb2YgbW9kZWwgeW91IHdpc2ggdG8gY3JlYXRlIGJlZm9yZSBlbnRlcmluZyB0aGUgbmFtZSBvciBwYXRoLjwvcD5cbiAgICAgICAgPHA+PGI+Q3JlYXRlIGEgV29ya2Zsb3c8L2I+OiBSaWdodC1jbGljayBvbiBhIG1vZGVsIGFuZCBjbGljayBOZXcgV29ya2Zsb3csIHRoaXMgdGFrZXMgeW91IHRvIHRoZSB3b3JrZmxvdyBzZWxlY3Rpb24gcGFnZS4gIFxuICAgICAgICBGcm9tIHRoZSB3b3JrZmxvdyBzZWxlY3Rpb24gcGFnZSwgY2xpY2sgb24gb25lIG9mIHRoZSBsaXN0ZWQgd29ya2Zsb3dzLjwvcD5cbiAgICAgICAgPHA+PGI+Q29udmVydCBhIEZpbGU8L2I+OiBSaWdodC1jbGljayBvbiBhIE1vZGVsL1NCTUwsIGNsaWNrIENvbnZlcnQsIGFuZCBjbGljayBvbiB0aGUgZGVzaXJlZCBDb252ZXJ0IHRvIG9wdGlvbi4gIFxuICAgICAgICBNb2RlbCBmaWxlcyBjYW4gYmUgY29udmVydGVkIHRvIFNwYXRpYWwgTW9kZWxzLCBOb3RlYm9va3MsIG9yIFNCTUwgZmlsZXMuICBcbiAgICAgICAgU3BhdGlhbCBNb2RlbHMgYW5kIFNCTUwgZmlsZSBjYW4gYmUgY29udmVydGVkIHRvIE1vZGVscy4gIFxuICAgICAgICA8Yj5Ob3RlPC9iPjogTm90ZWJvb2tzIHdpbGwgb3BlbiBpbiBhIG5ldyB0YWIgc28geW91IG1heSB3YW50IHRvIHR1cm4gb2ZmIHRoZSBwb3AtdXAgYmxvY2tlci48L3A+XG4gICAgICAgIDxwPjxiPk1vdmUgRmlsZSBvciBEaXJlY3Rvcnk8L2I+OiBDbGljayBhbmQgZHJhZyB0aGUgZmlsZSBvciBkaXJlY3RvcnkgdG8gdGhlIG5ldyBsb2NhdGlvbi4gIFxuICAgICAgICBZb3UgY2FuIG9ubHkgbW92ZSBhbiBpdGVtIHRvIGEgZGlyZWN0b3J5IGlmIHRoZXJlIGlzbid0IGEgZmlsZSBvciBkaXJlY3Rvcnkgd2l0aCB0aGUgc2FtZSBuYW1lIGluIHRoYXQgbG9jYXRpb24uPC9wPlxuICAgICAgICA8cD48Yj5Eb3dubG9hZCBhIE1vZGVsL05vdGVib29rL1NCTUwgRmlsZTwvYj46IFJpZ2h0LWNsaWNrIG9uIHRoZSBmaWxlIGFuZCBjbGljayBkb3dubG9hZC48L3A+XG4gICAgICAgIDxwPjxiPlJlbmFtZSBGaWxlL0RpcmVjdG9yeTwvYj46IFJpZ2h0LWNsaWNrIG9uIGEgZmlsZS9kaXJlY3RvcnksIGNsaWNrIHJlbmFtZSwgYW5kIGVudGVyIHRoZSBuZXcgbmFtZS48L3A+XG4gICAgICAgIDxwPjxiPkR1cGxpY2F0ZS9EZWxldGUgQSBGaWxlL0RpcmVjdG9yeTwvYj46IFJpZ2h0LWNsaWNrIG9uIHRoZSBmaWxlL2RpcmVjdG9yeSBhbmQgY2xpY2sgRHVwbGljYXRlL0RlbGV0ZS48L3A+XG4gICAgYCxcbiAgICAnbW9kZWwtZWRpdG9yJyA6IGBcbiAgICAgICAgPHA+PGI+U3BlY2llczwvYj46IEEgc3BlY2llcyByZWZlcnMgdG8gYSBwb29sIG9mIGVudGl0aWVzIHRoYXQgYXJlIGNvbnNpZGVyZWQgXG4gICAgICAgICAgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBlYWNoIG90aGVyIGZvciB0aGUgcHVycG9zZXMgb2YgdGhlIG1vZGVsIGFuZCBtYXkgcGFydGljaXBhdGUgXG4gICAgICAgICAgaW4gcmVhY3Rpb25zLjwvcD5cbiAgICAgICAgPHA+PGI+UGFyYW1ldGVyPC9iPjogQSBQYXJhbWV0ZXIgaXMgdXNlZCB0byBkZWZpbmUgYSBzeW1ib2wgYXNzb2NpYXRlZCB3aXRoIFxuICAgICAgICAgIGEgdmFsdWU7IHRoaXMgc3ltYm9sIGNhbiB0aGVuIGJlIHVzZWQgaW4gbWF0aGVtYXRpY2FsIGZvcm11bGFzIGluIGEgbW9kZWwuPC9wPlxuICAgICAgICA8cD48Yj5SZWFjdGlvbjwvYj46IEEgcmVhY3Rpb24gaW4gU0JNTCByZXByZXNlbnRzIGFueSBraW5kIG9mIHByb2Nlc3MgdGhhdCBjYW4gY2hhbmdlIFxuICAgICAgICAgIHRoZSBxdWFudGl0eSBvZiBvbmUgb3IgbW9yZSBzcGVjaWVzIGluIGEgbW9kZWwuICBBdCBsZWFzdCBvbmUgc3BlY2llcyBpcyByZXF1aXJlZCB0byBcbiAgICAgICAgICBhZGQgYSByZWFjdGlvbiBhbmQgYXQgbGVhc3Qgb25lIHBhcmFtZXRlciBpcyByZXF1aXJlZCB0byBhZGQgYSBtYXNzIGFjdGlvbiByZWFjdGlvbi48L3A+XG4gICAgICAgIDxwPjxiPkV2ZW50PC9iPjogRXZlbnRzIGRlc2NyaWJlIHRoZSB0aW1lIGFuZCBmb3JtIG9mIGluc3RhbnRhbmVvdXMsIGRpc2NvbnRpbnVvdXMgc3RhdGUgXG4gICAgICAgICAgY2hhbmdlcyBpbiB0aGUgbW9kZWwuICBBbiBFdmVudCBvYmplY3QgZGVmaW5lcyB3aGVuIHRoZSBldmVudCBjYW4gb2NjdXIsIHRoZSB2YXJpYWJsZXMgXG4gICAgICAgICAgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgaXQsIGhvdyB0aGUgdmFyaWFibGVzIGFyZSBhZmZlY3RlZCwgYW5kIHRoZSBldmVudOKAmXMgcmVsYXRpb25zaGlwIFxuICAgICAgICAgIHRvIG90aGVyIGV2ZW50cy4gIEF0IGxlYXN0IG9uZSBzcGVjaWVzIG9yIHBhcmFtZXRlciBpcyByZXF1aXJlZCB0byBhZGQgYW4gZXZlbnQuPC9wPlxuICAgICAgICA8cD48Yj5SdWxlPC9iPjogUnVsZXMgcHJvdmlkZSBhZGRpdGlvbmFsIHdheXMgdG8gZGVmaW5lIHRoZSB2YWx1ZXMgb2YgdmFyaWFibGVzIFxuICAgICAgICAgIGluIGEgbW9kZWwsIHRoZWlyIHJlbGF0aW9uc2hpcHMsIGFuZCB0aGUgZHluYW1pY2FsIGJlaGF2aW9ycyBvZiB0aG9zZSB2YXJpYWJsZXMuICBUaGUgXG4gICAgICAgICAgcnVsZSB0eXBlIEFzc2lnbm1lbnQgUnVsZSBpcyB1c2VkIHRvIGV4cHJlc3MgZXF1YXRpb25zIHRoYXQgc2V0IHRoZSB2YWx1ZXMgb2YgdmFyaWFibGVzLiAgXG4gICAgICAgICAgVGhlIHJ1bGUgdHlwZSBSYXRlIFJ1bGUgaXMgdXNlZCB0byBleHByZXNzIGVxdWF0aW9ucyB0aGF0IGRldGVybWluZSB0aGUgcmF0ZXMgb2YgY2hhbmdlIFxuICAgICAgICAgIG9mIHZhcmlhYmxlcy4gIEF0IGxlYXN0IG9uZSBzcGVjaWVzIG9yIHBhcmFtZXRlciBpcyByZXF1aXJlZCB0byBhZGQgYSBydWxlLjwvcD5cbiAgICAgICAgPHA+PGI+UHJldmlldzwvYj46IEEgcHJldmlldyBvZiB0aGUgbW9kZWwgc2hvd3MgdGhlIHJlc3VsdHMgb2YgdGhlIGZpcnN0IGZpdmUgc2Vjb25kcyBvZiBhIFxuICAgICAgICAgIHNpbmdsZSB0cmFqZWN0b3J5IG9mIHRoZSBtb2RlbCBzaW11bGF0aW9uLiAgQXQgbGVhc3Qgb25lIHNwZWNpZXMgYW5kIG9uZSByZWFjdGlvbiwgZXZlbnQsIFxuICAgICAgICAgIG9yIHJ1bGUgaXMgcmVxdWlyZWQgdG8gcnVuIGEgcHJldmlldy48L3A+XG4gICAgICAgIDxwPjxiPldvcmtmbG93PC9iPjogQSB3b3JrZmxvdyBhbGxvd3MgeW91IHRvIHJ1biBhIGZ1bGwgbW9kZWwgd2l0aCBtdWx0aXBsZSB0cmFqZWN0b3JpZXMgd2l0aCBcbiAgICAgICAgICBzZXR0aW5ncyB0aGUgd2lsbCBoZWxwIHJlZmluZSB0aGUgc2ltdWxhdGlvbi4gIEF0IGxlYXN0IG9uZSBzcGVjaWVzIGFuZCBvbmUgcmVhY3Rpb24sIGV2ZW50LCBcbiAgICAgICAgICBvciBydWxlIGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBhIG5ldyB3b3JrZmxvdy48L3A+XG4gICAgYCxcbiAgICAnd2tmbC1tYW5hZ2VyJyA6IGBcbiAgICAgICAgPHA+PGI+V29ya2Zsb3cgTmFtZS9QYXRoPC9iPjogWW91IG1heSBlZGl0IHRoZSBuYW1lL3BhdGggb2YgdGhlIHdvcmtmbG93IGFzIGxvbmcgYXMgdGhlIHdvcmtmbG93IGhhcyBub3QgYmVlbiBzYXZlZC4gIFxuICAgICAgICBXb3JrZmxvdyBOYW1lcyBhbHdheXMgZW5kIHdpdGggYSB0aW1lIHN0YW1wLjwvcD5cbiAgICAgICAgPHA+PGI+TW9kZWwgUGF0aDwvYj46IElmIHlvdSBtb3ZlIG9yIHJlbmFtZSB0aGUgbW9kZWwgbWFrZSBzdXJlIHRvIHVwZGF0ZSB0aGlzIHBhdGguPC9wPlxuICAgICAgICA8cD48Yj5TZXR0aW5nczwvYj46IFRoaXMgaXMgd2hlcmUgeW91IGNhbiBjdXN0b21pemUgdGhlIHNldHRpbmdzIGZvciB5b3VyIHdvcmtmbG93LlxuICAgICAgICBJZiB5b3UgbmVlZCB0byBlZGl0IG90aGVyIHBhcnQgb2YgeW91IG1vZGVsIGNsaWNrIG9uIHRoZSBlZGl0IG1vZGVsIGJ1dHRvbi4gIFxuICAgICAgICBUaGUgc2V0dGluZ3MgYXJlIG9ubHkgYXZhaWxhYmxlIGZvciB3b3JrZmxvd3MgdGhhdCBoYXZlIG5vdCBiZWVuIHJ1bi48L3A+XG4gICAgICAgIDxwPjxiPlN0YXR1czwvYj46IFRoaXMgc2VjdGlvbiBkaXNwbGF5cyB0aGUgc3RhdHVzIGFuZCBzdGFydCB0aW1lIG9mIHRoZSBXb3JrZmxvdy4gIElmIHRoZSB3b3JrZmxvdyBoYXNuJ3QgYmVlbiBzYXJ0ZWQgdGhpcyBzZWN0aW9uIGlzIGNsb3NlZC48L3A+XG4gICAgICAgIDxwPjxiPlJlc3VsdHM8L2I+OiBZb3UgbWF5IGNoYW5nZSB0aGUgdGl0bGUsIHgtYXhpcyBsYWJlbCwgYW5kIHktYXhpcyBsYWJlbCBieSBjbGlja2luZyBvbiB0aGUgZWRpdCBwbG90IGJ1dHRvbiB0aGVuIGVudGVyIHRoZSBuYW1lIGluIHRoZSBjb3JyZWN0IGZpZWxkLjwvcD5cbiAgICAgICAgPHA+PGI+SW5mbzwvYj46IFRoaXMgc2VjdGlvbiBkaXNwbGF5cyBhbnkgd2FybmluZ3MgYW5kL29yIGVycm9yIHRoYXQgYXJlIGxvZ2dlZCBieSB0aGUgcnVubmluZyB3b3JrZmxvdy48L3A+XG4gICAgICAgIDxwPjxiPk1vZGVsPC9iPjogVGhpcyBzZWN0aW9uIGxldHMgeW91IHZpZXcgdGhlIG1vZGVsIHRoYXQgd2FzIHVzZWQgd2hlbiB5b3UgcmFuIHRoZSB3b3JrZmxvdy48L3A+XG4gICAgYCxcbn0iLCJ2YXIgVmlldyA9IHJlcXVpcmUoJ2FtcGVyc2FuZC12aWV3Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gVmlldy5leHRlbmQoe1xuXG59KTtcbiIsImxldCBQYWdlVmlldyA9IHJlcXVpcmUoJy4vYmFzZScpO1xubGV0IE1haW5WaWV3ID0gcmVxdWlyZSgnLi4vdmlld3MvbWFpbicpO1xuLy92YXIgdGVtcGxhdGVzID0gcmVxdWlyZSgnLi4vdGVtcGxhdGVzJyk7XG5sZXQgdGVtcGxhdGUgPSByZXF1aXJlKCcuLi90ZW1wbGF0ZXMvcGFnZXMvaG9tZS5wdWcnKTtcbmxldCBkb21SZWFkeSA9IHJlcXVpcmUoJ2RvbXJlYWR5Jyk7XG5cbmxldCBib290c3RyYXAgPSByZXF1aXJlKCdib290c3RyYXAnKTtcblxubGV0IGFwcCA9IHJlcXVpcmUoJy4uL2FwcCcpO1xuXG5pbXBvcnQgYm9vdHN0cmFwU3R5bGVzIGZyb20gJy4uL3N0eWxlcy9ib290c3RyYXAuY3NzJztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi4vc3R5bGVzL3N0eWxlcy5jc3MnO1xuaW1wb3J0IGZvbnRhd2Vzb21lU3R5bGVzIGZyb20gJ0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1mcmVlL2Nzcy9zdmctd2l0aC1qcy5taW4uY3NzJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0UGFnZSAocGFnZSkge1xuICBkb21SZWFkeSgoKSA9PiB7XG4gICAgbGV0IG1haW5WaWV3ID0gbmV3IE1haW5WaWV3KHtcbiAgICAgIGVsOiBkb2N1bWVudC5ib2R5XG4gICAgfSk7XG4gICAgbGV0IHAgPSBuZXcgcGFnZSh7XG4gICAgICBlbDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtaG9vaz1cInBhZ2UtY29udGFpbmVyXCJdJyksXG4gICAgfSk7XG4gICAgcC5yZW5kZXIoKVxuICB9KVxufVxuIiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vYm9vdHN0cmFwLmNzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IHVuZGVmaW5lZDtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2FscztcblxuaWYobW9kdWxlLmhvdCkge1xuXHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9ib290c3RyYXAuY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9ib290c3RyYXAuY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59IiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGVzLmNzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IHVuZGVmaW5lZDtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2FscztcblxuaWYobW9kdWxlLmhvdCkge1xuXHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZXMuY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZXMuY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59IiwidmFyIHB1ZyA9IHJlcXVpcmUoXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3B1Zy1ydW50aW1lL2luZGV4LmpzXCIpO1xuXG5mdW5jdGlvbiB0ZW1wbGF0ZShsb2NhbHMpIHt2YXIgcHVnX2h0bWwgPSBcIlwiLCBwdWdfbWl4aW5zID0ge30sIHB1Z19pbnRlcnA7cHVnX2h0bWwgPSBwdWdfaHRtbCArIFwiXFx1MDAzQyFET0NUWVBFIGh0bWxcXHUwMDNFXFx1MDAzQ2h0bWxcXHUwMDNFXFx1MDAzQ2hlYWRcXHUwMDNFXFx1MDAzQ21ldGEgY2hhcnNldD1cXFwidXRmLThcXFwiXFx1MDAzRVxcdTAwM0N0aXRsZVxcdTAwM0VTdG9jaFNTOiBTdG9jaGFzdGljIFNpbWxhdGlvbiBTZXJ2aWNlXFx1MDAzQ1xcdTAwMkZ0aXRsZVxcdTAwM0VcXHUwMDNDbWV0YSBuYW1lPVxcXCJ2aWV3cG9ydFxcXCIgY29udGVudD1cXFwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMFxcXCJcXHUwMDNFXFx1MDAzQ21ldGEgbmFtZT1cXFwiZGVzY3JpcHRpb25cXFwiIGNvbnRlbnQ9XFxcIlxcXCJcXHUwMDNFXFx1MDAzQ21ldGEgbmFtZT1cXFwiYXV0aG9yXFxcIiBjb250ZW50PVxcXCJcXFwiXFx1MDAzRVxcdTAwM0NcXHUwMDJGaGVhZFxcdTAwM0VcXHUwMDNDYm9keVxcdTAwM0VcXHUwMDNDZGl2IGNsYXNzPVxcXCJjb250YWluZXIgY2FyZCBjYXJkLWJvZHlcXFwiIGlkPVxcXCJob21lLXdyYXBwZXJcXFwiXFx1MDAzRVxcdTAwM0NkaXYgY2xhc3M9XFxcImxvZ29cXFwiIGlkPVxcXCJzdG9jaHNzLWxvZ29cXFwiIGRhdGEtaG9vaz1cXFwic3RvY2hzcy1sb2dvXFxcIlxcdTAwM0VcXHUwMDNDaW1nIHNyYz1cXFwiXFx1MDAyRmh1YlxcdTAwMkZzdGF0aWNcXHUwMDJGc3RvY2hzcy1sb2dvLnBuZ1xcXCJcXHUwMDNFXFx1MDAzQ1xcdTAwMkZkaXZcXHUwMDNFXFx1MDAzQ2RpdiBjbGFzcz1cXFwiY2VudGVyZWRcXFwiXFx1MDAzRVxcdTAwM0NoMSBjbGFzcz1cXFwiZGlzcGxheS01XFxcIlxcdTAwM0VXZWxjb21lIHRvIHRoZSBTdG9jaGFzdGljIFNpbXVsYXRpb24gU2VydmljZSFcXHUwMDNDXFx1MDAyRmgxXFx1MDAzRVxcdTAwM0NwIGNsYXNzPVxcXCJob21lLXBcXFwiXFx1MDAzRVN0b2NoU1MgMi4wIGlzIGFuIGFjY2Vzc2libGUgcGxhdGZvcm0gZm9yIG1vZGVsaW5nIGJpb2NoZW1pY2FsIHN5c3RlbXMuXFx1MDAzQ1xcdTAwMkZwXFx1MDAzRVxcdTAwM0NcXHUwMDJGZGl2XFx1MDAzRVxcdTAwM0NkaXYgY2xhc3M9XFxcInJvdyBob21lLWhpZ2hsaWdodHNcXFwiXFx1MDAzRVxcdTAwM0NkaXYgY2xhc3M9XFxcImNvbC1tZC0yXFxcIlxcdTAwM0VcXHUwMDNDXFx1MDAyRmRpdlxcdTAwM0VcXHUwMDNDZGl2IGNsYXNzPVxcXCJjb2wtbWQtNVxcXCJcXHUwMDNFXFx1MDAzQ2g1XFx1MDAzRUZlYXR1cmVzXFx1MDAzQ1xcdTAwMkZoNVxcdTAwM0VcXHUwMDNDdWwgY2xhc3M9XFxcImhvbWUtbGlzdFxcXCJcXHUwMDNFXFx1MDAzQ2xpXFx1MDAzRURpc2NyZXRlIFN0b2NoYXN0aWMgTW9kZWxpbmdcXHUwMDNDXFx1MDAyRmxpXFx1MDAzRVxcdTAwM0NsaVxcdTAwM0VDb250aW51b3VzIE9ERSBNb2RlbGluZ1xcdTAwM0NcXHUwMDJGbGlcXHUwMDNFXFx1MDAzQ2xpXFx1MDAzRUNvbnZlcnQgQmV0d2VlbiBTdG9jaGFzdGljIGFuZCBPREUgTW9kZWxzXFx1MDAzQ1xcdTAwMkZsaVxcdTAwM0VcXHUwMDNDbGlcXHUwMDNFSW1wb3J0IFNCTUwgTW9kZWxzXFx1MDAzQ1xcdTAwMkZsaVxcdTAwM0VcXHUwMDNDbGlcXHUwMDNFUGFyYW1ldGVyIFN3ZWVwIFdvcmtmbG93c1xcdTAwM0NcXHUwMDJGbGlcXHUwMDNFXFx1MDAzQ1xcdTAwMkZ1bFxcdTAwM0VcXHUwMDNDXFx1MDAyRmRpdlxcdTAwM0VcXHUwMDNDZGl2IGNsYXNzPVxcXCJjb2wtbWQtNVxcXCJcXHUwMDNFXFx1MDAzQ2g1XFx1MDAzRUNvbWluZyBzb29uLi4uXFx1MDAzQ1xcdTAwMkZoNVxcdTAwM0VcXHUwMDNDdWwgY2xhc3M9XFxcImhvbWUtbGlzdFxcXCJcXHUwMDNFXFx1MDAzQ2xpXFx1MDAzRVNjaW9wZSBJbnRlZ3JhdGlvblxcdTAwM0NcXHUwMDJGbGlcXHUwMDNFXFx1MDAzQ2xpXFx1MDAzRVNwYXRpYWwgU2ltdWxhdGlvbnNcXHUwMDNDXFx1MDAyRmxpXFx1MDAzRVxcdTAwM0NsaVxcdTAwM0VCcmluZyBZb3VyIE93biBDbG91ZFxcdTAwM0NcXHUwMDJGbGlcXHUwMDNFXFx1MDAzQ1xcdTAwMkZ1bFxcdTAwM0VcXHUwMDNDXFx1MDAyRmRpdlxcdTAwM0VcXHUwMDNDXFx1MDAyRmRpdlxcdTAwM0VcXHUwMDNDZGl2IGNsYXNzPVxcXCJjZW50ZXJlZFxcXCJcXHUwMDNFXFx1MDAzQ2EgY2xhc3M9XFxcInRyeS1zdG9jaHNzLWJ0biBidG4gYnRuLXByaW1hcnkgYm94LXNoYWRvd1xcXCIgaHJlZj1cXFwiXFx1MDAyRmh1YlxcdTAwMkZzcGF3blxcXCIgcm9sZT1cXFwiYnV0dG9uXFxcIlxcdTAwM0VDbGljayBoZXJlIHRvIGxvZ2luXFx1MDAzQ1xcdTAwMkZhXFx1MDAzRVxcdTAwM0NcXHUwMDJGZGl2XFx1MDAzRVxcdTAwM0NcXHUwMDJGZGl2XFx1MDAzRVxcdTAwM0NkaXYgY2xhc3M9XFxcImNvbnRhaW5lciBjYXJkIGNhcmQtYm9keVxcXCIgaWQ9XFxcInJlZ2lzdHJhdGlvbi1ob21lXFxcIlxcdTAwM0VcXHUwMDNDZGl2IGNsYXNzPVxcXCJjZW50ZXJlZFxcXCJcXHUwMDNFXFx1MDAzQ3AgY2xhc3M9XFxcImhvbWUtcFxcXCJcXHUwMDNFU3RvY2hTUyBpcyBvcGVuLXNvdXJjZSBzb2Z0d2FyZS4gIFRvIG9idGFpbiBjb250aW51ZWQgZnVuZGluZyBmb3Igc3VzdGFpbmVkIGRldmVsb3BtZW50LCB3ZSBtdXN0IHNob3cgdGhhdCBTdG9jaFNTIGlzIG1ha2luZyBhbiBpbXBhY3QgaW4gdGhlIHNjaWVudGlmaWMgY29tbXVuaXR5LiAgRm9yIHRoaXMsIHdlIG5lZWQgdG8ga25vdyB3aG8gaXMgdXNpbmcgdGhlIHNvZnR3YXJlLCBhbmQgYSBiaXQgYWJvdXQgd2hhdCB0aGV5IGFyZSB1c2luZyBpdCBmb3IuICBQbGVhc2UgY29uc2lkZXIgcmVnaXN0ZXJpbmcgU3RvY2hTUyB0byBzaG93IHlvdXIgc3VwcG9ydC5cXHUwMDNDXFx1MDAyRnBcXHUwMDNFXFx1MDAzQ2RpdiBjbGFzcz1cXFwiY29sbGFwc2VcXFwiIGRhdGEtaG9vaz1cXFwicmVnaXN0cmF0aW9uLWxpbmtcXFwiXFx1MDAzRVxcdTAwM0NidXR0b24gY2xhc3M9XFxcImJ0biBidG4tcHJpbWFyeSBib3gtc2hhZG93XFxcIiBkYXRhLWhvb2s9XFxcInJlZ2lzdHJhdGlvbi1saW5rLWJ1dHRvblxcXCIgc3R5bGU9XFxcIm1hcmdpbjogMS41cmVtO1xcXCJcXHUwMDNFUmVnaXN0ZXIgU3RvY2hzc1xcdTAwM0NcXHUwMDJGYnV0dG9uXFx1MDAzRVxcdTAwM0NcXHUwMDJGZGl2XFx1MDAzRVxcdTAwM0NkaXYgY2xhc3M9XFxcImNvbGxhcHNlIHNob3dcXFwiIGRhdGEtaG9vaz1cXFwicmVnaXN0cmF0aW9uLWZvcm1cXFwiIGlkPVxcXCJyZWdpc3RyYXRpb24tZm9ybVxcXCJcXHUwMDNFXFx1MDAzQ2lmcmFtZSBzcmM9XFxcImh0dHBzOlxcdTAwMkZcXHUwMDJGZG9jcy5nb29nbGUuY29tXFx1MDAyRmZvcm1zXFx1MDAyRmRcXHUwMDJGMTJ0QUg0ZjhDSi0zRi1sSzQ0UTl1UUhGaW9fbUdvSzBvWTgyOXE1bEQ3aTRcXHUwMDJGdmlld2Zvcm0/ZW1iZWRkZWQ9dHJ1ZVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGhlaWdodD1cXFwiODAwXFxcIiBmcmFtZWJvcmRlcj1cXFwiMFxcXCJcXHUwMDNFXFx1MDAzQ1xcdTAwMkZpZnJhbWVcXHUwMDNFXFx1MDAzQ1xcdTAwMkZkaXZcXHUwMDNFXFx1MDAzQ1xcdTAwMkZkaXZcXHUwMDNFXFx1MDAzQ1xcdTAwMkZkaXZcXHUwMDNFXFx1MDAzQ1xcdTAwMkZib2R5XFx1MDAzRVxcdTAwM0NcXHUwMDJGaHRtbFxcdTAwM0VcIjs7cmV0dXJuIHB1Z19odG1sO307XG5tb2R1bGUuZXhwb3J0cyA9IHRlbXBsYXRlOyIsIm1vZHVsZS5leHBvcnRzID0ge1xuICBzcGVjaWVzRWRpdG9yOiB7XG4gICAgbmFtZTogXCJOYW1lcyBmb3Igc3BlY2llcywgcGFyYW1ldGVycywgcmVhY3Rpb25zLCBldmVudHMsIGFuZCBydWxlcyBtdXN0IGJlIHVuaXF1ZS5cIixcblxuICAgIGluaXRpYWxWYWx1ZTogXCJJbml0aWFsIHBvcHVsYXRpb24gb2YgYSBzcGVjaWVzLlwiLFxuXG4gICAgYW5ub3RhdGlvbjogXCJBbiBvcHRpb25hbCBub3RlIGFib3V0IHRoZSBzcGVjaWVzLlwiLFxuXG4gICAgcmVtb3ZlOiBcIkEgc3BlY2llcyBtYXkgb25seSBiZSByZW1vdmVkIGlmIGl0IGlzIG5vdCBhIHBhcnQgb2YgYW55IHJlYWN0aW9uLCBldmVudCBhc3NpZ25tZW50LCBvciBydWxlLlwiLFxuICAgIFxuICAgIHNwZWNpZXNNb2RlOiBcIkNvbmNlbnRyYXRpb24gLSBTcGVjaWVzIHdpbGwgb25seSBiZSByZXByZXNlbnRlZCB1c2luZyBjb250aW51b3VzIChmbG9hdGluZyBwb2ludCkgdmFsdWVzLjxicj5Qb3B1bGF0aW9uIC0gU3BlY2llcyB3aWxsIG9ubHkgYmUgcmVwcmVzZW50ZWQgXCIrXG4gICAgICAgIFwidXNpbmcgZGlzY3JldGUgKGludGVnZXIgY291bnQpIHZhbHVlcy48YnI+SHlicmlkIENvbmNlbnRyYXRpb24vUG9wdWxhdGlvbiAtIEFsbG93cyBhIHNwZWNpZXMgdG8gYmUgcmVwcmVzZW50ZWQgdXNpbmcgY29udGludW91cyBhbmQvb3IgZGlzY3JldGUgdmFsdWVzLlwiLFxuXG4gICAgbW9kZTogXCJDb25jZW50cmF0aW9uIC0gU3BlY2llcyB3aWxsIG9ubHkgYmUgcmVwcmVzZW50ZWQgdXNpbmcgY29udGludW91cyAoZmxvYXRpbmcgcG9pbnQpIHZhbHVlcy48YnI+UG9wdWxhdGlvbiAtIFNwZWNpZXMgd2lsbCBvbmx5IGJlIHJlcHJlc2VudGVkIFwiK1xuICAgICAgICBcInVzaW5nIGRpc2NyZXRlIChpbnRlZ2VyIGNvdW50KSB2YWx1ZXMuPGJyPkh5YnJpZCBDb25jZW50cmF0aW9uL1BvcHVsYXRpb24gLSBBbGxvd3MgYSBzcGVjaWVzIHRvIGJlIHJlcHJlc2VudGVkIHVzaW5nIGNvbnRpbnVvdXMgYW5kL29yIGRpc2NyZXRlIHZhbHVlcy5cIixcblxuICAgIHN3aXRjaFZhbHVlOiBcIlN3aXRjaGluZyBUb2xlcmFuY2UgLSBUb2xlcmFuY2UgbGV2ZWwgZm9yIGNvbnNpZGVyaW5nIGEgZHluYW1pYyBzcGVjaWVzIGRldGVybWluaXN0aWNhbGx5LCB2YWx1ZSBpcyBjb21wYXJlZCB0byBhbiBlc3RpbWF0ZWQgc2QvbWVhbiBwb3B1bGF0aW9uIFwiK1xuICAgICAgICBcIm9mIGEgc3BlY2llcyBhZnRlciBhIGdpdmVuIHRpbWUgc3RlcC4gVGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgaWYgYSAnTWluaW11bSBWYWx1ZScgbm90IHByb3ZpZGVkLjxicj5NaW5pbXVtIFZhbHVlIEZvciBTd2l0Y2hpbmcgLSBNaW5pbXVtIHBvcHVsYXRpb24gdmFsdWUgXCIrXG4gICAgICAgIFwiYXQgd2hpY2ggc3BlY2llcyB3aWxsIGJlIHJlcHJlc2VudGVkIGFzIENvbmNlbnRyYXRpb24uXCJcbiAgfSxcbiAgcGFyYW1ldGVyc0VkaXRvcjoge1xuICAgIG5hbWU6IFwiTmFtZXMgZm9yIHNwZWNpZXMsIHBhcmFtZXRlcnMsIHJlYWN0aW9ucywgZXZlbnRzLCBhbmQgcnVsZXMgbXVzdCBiZSB1bmlxdWUuXCIsXG4gICAgXG4gICAgZXhwcmVzc2lvbjogXCJBIHBhcmFtZXRlciB2YWx1ZSBvciBhIG1hdGhlbWF0aWNhbCBleHByZXNzaW9uIGNhbGN1bGF0aW5nIHRoZSBwYXJhbWV0ZXIgdmFsdWUuXCIsXG4gICAgXG4gICAgYW5ub3RhdGlvbjogXCJBbiBvcHRpb25hbCBub3RlIGFib3V0IGEgcGFyYW1ldGVyLlwiLFxuICAgIFxuICAgIHJlbW92ZTogXCJBIHBhcmFtZXRlciBtYXkgb25seSBiZSByZW1vdmVkIGlmIGl0IGlzIG5vdCB1c2VkIGluIGFueSByZWFjdGlvbiwgZXZlbnQgYXNzaWdubWVudCwgb3IgcnVsZS5cIlxuICB9LFxuICByZWFjdGlvbnNFZGl0b3I6IHtcbiAgICBuYW1lOiBcIk5hbWVzIGZvciBzcGVjaWVzLCBwYXJhbWV0ZXJzLCByZWFjdGlvbnMsIGV2ZW50cywgYW5kIHJ1bGVzIG11c3QgYmUgdW5pcXVlLlwiLFxuICAgIFxuICAgIGFubm90YXRpb246IFwiQW4gb3B0aW9uYWwgbm90ZSBhYm91dCB0aGUgcmVhY3Rpb24uXCIsXG4gICAgXG4gICAgcmF0ZTogXCJUaGUgcmF0ZSBvZiB0aGUgbWFzcy1hY3Rpb24gcmVhY3Rpb24uXCIsXG4gICAgXG4gICAgcHJvcGVuc2l0eTogXCJUaGUgY3VzdG9tIHByb3BlbnNpdHkgZXhwcmVzc2lvbiBmb3IgdGhlIHJlYWN0aW9uLlwiLFxuICAgIFxuICAgIHJlYWN0YW50OiBcIlRoZSByZWFjdGFudHMgdGhhdCBhcmUgY29uc3VtZWQgaW4gdGhlIHJlYWN0aW9uLCB3aXRoIHN0b2ljaGlvbWV0cnkuXCIsXG4gICAgXG4gICAgcHJvZHVjdDogXCJUaGUgc3BlY2llcyB0aGF0IGFyZSBjcmVhdGVkIGJ5IHRoZSByZWFjdGlvbiBldmVudCwgd2l0aCBzdG9pY2hpb21ldHJ5LlwiLFxuICB9LFxuICBldmVudHNFZGl0b3I6IHtcbiAgICBuYW1lOiBcIk5hbWVzIGZvciBzcGVjaWVzLCBwYXJhbWV0ZXJzLCByZWFjdGlvbnMsIGV2ZW50cywgYW5kIHJ1bGVzIG11c3QgYmUgdW5pcXVlLlwiLFxuICAgIFxuICAgIGFubm90YXRpb246IFwiQW4gb3B0aW9uYWwgbm90ZSBhYm91dCBhbiBldmVudC5cIixcbiAgICBcbiAgICB0cmlnZ2VyRXhwcmVzc2lvbjogXCJUaGUgdHJpZ2dlciBleHByZXNzaW9uIGNhbiBiZSBhbnkgbWF0aGVtYXRpY2FsIGV4cHJlc3Npb24gd2hpY2ggZXZhbHVhdGVzIHRvIGEgYm9vbGVhbiB2YWx1ZSBpbiBhIHB5dGhvbiBlbnZpcm9ubWVudCAoaS5lLiB0PT01MCkuICBUaGlzIFwiK1xuICAgICAgICBcImV4cHJlc3Npb24gaXMgZXZhbHVhYmxlIHdpdGhpbiB0aGUgbW9kZWwgbmFtZXNwYWNlLCBhbmQgYW55IHZhcmlhYmxlIChTcGVjaWVzLCBQYXJhbWV0ZXJzLCBldGMuKSBjYW4gYmUgcmVmZXJlbmNlZCBpbiB0aGUgZXhwcmVzc2lvbi4gIFRpbWUgaXMgcmVwcmVzZW50ZWQgXCIrXG4gICAgICAgIFwid2l0aCB0aGUgbG93ZXIgY2FzZSB2YXJpYWJsZSAndCcuIEFuIGV2ZW50IHdpbGwgYmVnaW4gZXhlY3V0aW9uIG9mIGFzc2lnbm1lbnRzIChvciBkZWxheSwgaWYgYW55KSBvbmNlIHRoaXMgZXhwcmVzc2lvbiBjaGFuZ2VzIGZyb20gJ0ZhbHNlJyB0byAnVHJ1ZS4nXCIsXG4gICAgXG4gICAgZGVsYXk6IFwiY29udGFpbnMgbWF0aCBleHByZXNzaW9uIGV2YWx1YWJsZSB3aXRoaW4gbW9kZWwgbmFtZXNwYWNlLiBUaGlzIGV4cHJlc3Npb24gZGVzaWduYXRlcyBhIGRlbGF5IGJldHdlZW4gdGhlIHRyaWdnZXIgb2YgYW4gZXZlbnQgYW5kIHRoZSBleGVjdXRpb24gb2YgaXRzIGFzc2lnbm1lbnRzLlwiLFxuICAgIFxuICAgIHByaW9yaXR5OiBcIlR5cGljYWxseSBhIG51bWJlcjogMSwgMiwgZXRjLiB0aGF0IGRlc2lnbmF0ZXMgdGhlIGV4ZWN1dGlvbiBvcmRlciBmb3IgZXZlbnRzIHdoaWNoIGFyZSBleGVjdXRlZCBzaW11bHRhbmVvdXNseS4gIENhbiBiZSBhIG1hdGggZXhwcmVzc2lvbiBldmFsdWFibGUgXCIrXG4gICAgICAgIFwid2l0aGluIHRoZSBtb2RlbCBuYW1lc3BhY2UuXCIsXG4gICAgXG4gICAgaW5pdGlhbFZhbHVlOiBcIklmIHRydWUsIHRoZSB0cmlnZ2VyIGV4cHJlc3Npb24gd2lsbCBiZSBldmFsdWF0ZWQgYXMgJ1RydWUnIGF0IHN0YXJ0IG9mIHNpbXVsYXRpb24uICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIHNvbWUgbW9kZWxzLCBzaW5jZSBhbiBldmVudCBpcyBvbmx5IFwiK1xuICAgICAgICBcImV4ZWN1dGVkIHdoZW4gdGhlIHRyaWdnZXIgZXhwcmVzc2lvbiBzdGF0ZSBjaGFuZ2VzIGZyb20gJ0ZhbHNlJyB0byAnVHJ1ZScuXCIsXG4gICAgXG4gICAgcGVyc2lzdGVudDogXCJJZiBwZXJzaXN0ZW50LCBhbiBldmVudCBhc3NpZ25tZW50IHdpbGwgYWx3YXlzIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGV2ZW50J3MgdHJpZ2dlciBleHByZXNzaW9uIGV2YWx1YXRlcyB0byB0cnVlLiAgSWYgbm90IHBlcnNpc3RlbnQsIHRoZSBldmVudCBcIitcbiAgICAgICAgXCJhc3NpZ25tZW50IHdpbGwgbm90IGJlIGV4ZWN1dGVkIGlmIHRoZSB0cmlnZ2VyIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGZhbHNlIGJldHdlZW4gdGhlIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZCBhbmQgdGhlIHRpbWUgdGhlIGFzc2lnbm1lbnQgaXMgZXhlY3V0ZWQuXCIsXG4gICAgXG4gICAgdXNlVmFsdWVzRnJvbVRyaWdnZXJUaW1lOiBcIklmIHNldCB0byB0cnVlLCBhc3NpZ25tZW50IGV4ZWN1dGlvbiB3aWxsIGJlIGJhc2VkIG9mZiBvZiB0aGUgbW9kZWwgc3RhdGUgYXQgdHJpZ2dlciB0aW1lLiBJZiBmYWxzZSAoZGVmYXVsdCksIHRoZSBhc3NpZ25tZW50IHdpbGwgYmUgXCIrXG4gICAgICAgIFwibWFkZSB1c2luZyB2YWx1ZXMgYXQgYXNzaWdubWVudCB0aW1lLlwiLFxuICAgIFxuICAgIGFzc2lnbm1lbnRzOiBcIkFuIEV2ZW50IEFzc2lnbm1lbnQgZGVzY3JpYmVzIGEgY2hhbmdlIHRvIGJlIHBlcmZvcm1lZCB0byB0aGUgY3VycmVudCBtb2RlbCBzaW11bGF0aW9uLiAgVGhpcyBhc3NpZ25tZW50IGNhbiBlaXRoZXIgYmUgZmlyZWQgYXQgdGhlIHRpbWUgaXRzIGFzc29jaWF0ZWQgXCIrXG4gICAgICAgIFwidHJpZ2dlciBjaGFuZ2VzIGZyb20gZmFsc2UgdG8gdHJ1ZSwgb3IgYWZ0ZXIgYSBzcGVjaWZpZWQgZGVsYXksIGRlcGVuZGluZyBvbiB0aGUgRXZlbnQgY29uZmlndXJhdGlvbi4gQW4gZXZlbnQgbWF5IGNvbnRhaW4gb25lIG9yIG1vcmUgYXNzaWdubWVudHMuXCIsXG4gICAgXG4gICAgdmFyaWFibGU6IFwiVGhlIHRhcmdldCBTcGVjaWVzIG9yIFBhcmFtZXRlciB0byBiZSBtb2RpZmllZCBieSB0aGUgZXZlbnQuXCIsXG4gICAgXG4gICAgYXNzaWdubWVudEV4cHJlc3Npb246IFwiQ2FuIGJlIGFueSBtYXRoZW1hdGljYWwgc3RhdGVtZW50IHdoaWNoIHJlc29sdmVzIHRvIGFuIGludGVnZXIgb3IgZmxvYXQgdmFsdWUuICBUaGlzIHZhbHVlIHdpbGwgYmUgYXNzaWduZWQgdG8gdGhlIGFzc2lnbm1lbnQncyB0YXJnZXQgdmFyaWFibGUgXCIrXG4gICAgICAgIFwidXBvbiBldmVudCBleGVjdXRpb24uXCJcbiAgfSxcbiAgcnVsZXNFZGl0b3I6IHtcbiAgICBuYW1lOiBcIk5hbWVzIGZvciBzcGVjaWVzLCBwYXJhbWV0ZXJzLCByZWFjdGlvbnMsIGV2ZW50cywgYW5kIHJ1bGVzIG11c3QgYmUgdW5pcXVlLlwiLFxuICAgIFxuICAgIHR5cGU6IFwiQXNzaWdubWVudCBSdWxlczogQW4gYXNzaWdubWVudCBydWxlIGRlc2NyaWJlcyBhIGNoYW5nZSB0byBhIFNwZWNpZXMgb3IgUGFyYW1ldGVyIGFzIGEgZnVuY3Rpb24gd2hvc2UgbGVmdC1oYW5kIHNpZGUgaXMgYSBzY2FsYXIgKGkuZS4geCA9IGYoViksIHdoZXJlIFYgaXMgYSBcIitcbiAgICAgICAgXCJ2ZWN0b3Igb2Ygc3ltYm9scywgbm90IGluY2x1ZGluZyB4KS48YnI+ICBSYXRlIFJ1bGVzOiBBIHJhdGUgcnVsZSBkZXNjcmliZXMgYSBjaGFuZ2UgdG8gYSBTcGVjaWVzIG9yIFBhcmFtZXRlciBhcyBhIGZ1bmN0aW9uIHdob3NlIGxlZnQtaGFuZCBzaWRlIGlzIGEgcmF0ZSBvZiBcIitcbiAgICAgICAgXCJjaGFuZ2UgKGkuZS4gZHgvZHQgPSBmKFcpLCB3aGVyZSBXIGlzIGEgdmVjdG9yIG9mIHN5bWJvbHMgd2hpY2ggbWF5IGluY2x1ZGUgeCkuXCIsXG4gICAgXG4gICAgdmFyaWFibGU6IFwiVGFyZ2V0IHZhcmlhYmxlIHRvIGJlIG1vZGlmaWVkIGJ5IHRoZSBSdWxlJ3MgZm9ybXVsYS5cIixcbiAgICBcbiAgICBleHByZXNzaW9uOiBcIkEgUHl0aG9uIGV2YWx1YWJsZSBtYXRoZW1hdGljYWwgZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiBhIHJ1bGUgZnVuY3Rpb24uPGJyPiAgRm9yIEFzc2lnbm1lbnQgUnVsZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgcmlnaHQgaGFuZCBcIitcbiAgICAgICAgXCJzaWRlIG9mIGEgc2NhbGFyIGVxdWF0aW9uLjxicj4gIEZvciBSYXRlIFJ1bGVzLCB0aGlzIHJlcHJlc2VudHMgdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiBhIHJhdGUtb2YtY2hhbmdlIGVxdWF0aW9uLlwiLFxuICAgIFxuICAgIGFubm90YXRpb246IFwiQW4gb3B0aW9uYWwgbm90ZSBhYm91dCBhIHJ1bGUuXCJcbiAgfSxcbiAgc2JtbENvbXBvbmVudHNFZGl0b3I6IHtcbiAgICBhbm5vdGF0aW9uOiBcIkFuIG9wdGlvbmFsIG5vdGUgYWJvdXQgdGhlIFNCTUwgQ29tcG9uZW50LlwiXG4gIH0sXG4gIG1vZGVsU2V0dGluZ3M6IHtcbiAgICBwcmV2aWV3U2V0dGluZ3M6IFwiUHJldmlldyBTZXR0aW5ncyBhcmUgYXBwbGllZCB0byB0aGUgbW9kZWwgYW5kIGFyZSB1c2VkIGZvciB0aGUgbW9kZWwgcHJldmlldyBhbmQgYWxsIHdvcmtmbG93cy5cIixcbiAgICBcbiAgICBwcmV2aWV3VGltZTogXCJFbmQgdGltZSBvZiBzaW11bGF0aW9uLlwiLFxuICAgIFxuICAgIHRpbWVVbml0czogXCJTYXZlIHBvaW50IGluY3JlbWVudCBmb3IgcmVjb3JkaW5nIGRhdGEuXCIsXG4gICAgXG4gICAgdm9sdW1lOiBcIlRoZSB2b2x1bWUgb2YgdGhlIHN5c3RlbSBtYXR0ZXJzIHdoZW4gY29udmVydGluZyB0byBmcm9tIHBvcHVsYXRpb24gdG8gY29uY2VudHJhdGlvbiBmb3JtLiBUaGlzIHdpbGwgYWxzbyBzZXQgYSBwYXJhbWV0ZXIgJ3ZvbCcgZm9yIHVzZSBpbiBjdXN0b20gKGkuZS4gXCIrXG4gICAgICAgIFwibm9uLW1hc3MtYWN0aW9uKSBwcm9wZW5zaXR5IGZ1bmN0aW9ucy5cIlxuICB9LFxuICBzaW11bGF0aW9uU2V0dGluZ3M6IHtcbiAgICBydG9sOiBcIlJlbGF0aXZlIHRvbGVyYW5jZSBmb3Igb2RlIHNvbHV0aW9ucywgY29udHJvbHMgYSByZWxhdGl2ZSBhY2N1cmFjeSAobnVtYmVyIG9mIGNvcnJlY3QgZGlnaXRzKS4gIFRoZSBzb2x2ZXIga2VlcHMgdGhlIGxvY2FsIGVycm9yIGVzdGltYXRlcyBsZXNzIHRoYW4gYXRvbCArIFwiK1xuICAgICAgICBcInJ0b2wgKiBhYnMoeSkuICBWYWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLjAuXCIsXG5cbiAgICBhdG9sOiBcIkFic29sdXRlIHRvbGVyYW5jZSBmb3Igb2RlIHNvbHV0aW9ucywgaWYgYSBjb21wb25lbnQgb2YgeSBpcyBhcHByb3hpbWF0ZWx5IGJlbG93IGF0b2wsIHRoZSBlcnJvciBvbmx5IG5lZWRzIHRvIGZhbGwgd2l0aGluIHRoZSBzYW1lIGF0b2wgdGhyZXNob2xkLCBhbmQgdGhlIFwiK1xuICAgICAgICBcIm51bWJlciBvZiBjb3JyZWN0IGRpZ2l0cyBpcyBub3QgZ3VhcmFudGVlZC4gIFRoZSBzb2x2ZXIga2VlcHMgdGhlIGxvY2FsIGVycm9yIGVzdGltYXRlcyBsZXNzIHRoYW4gYXRvbCArIHJ0b2wgKiBhYnMoeSkuICBWYWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLjAuXCIsXG5cbiAgICB0dG9sOiBcIkEgcmVsYXRpdmUgZXJyb3IgdG9sZXJhbmNlIHZhbHVlIGdvdmVybmluZyB0YXUtbGVhcGluZyB0YXUgc2VsZWN0aW9ucy4gIEJhc2VkIG9uIENhbywgWS47IEdpbGxlc3BpZSwgRC4gVC47IFBldHpvbGQsIEwuIFIuICgyMDA2KS4gJ0VmZmljaWVudCBzdGVwIHNpemUgXCIrXG4gICAgICAgIFwic2VsZWN0aW9uIGZvciB0aGUgdGF1LWxlYXBpbmcgc2ltdWxhdGlvbiBtZXRob2QnIChQREYpLiBUaGUgSm91cm5hbCBvZiBDaGVtaWNhbCBQaHlzaWNzLiAxMjQgKDQpOiAwNDQxMDkuIEJpYmNvZGU6MjAwNkpDaFBoLjEyNGQ0MTA5Qy4gZG9pOjEwLjEwNjMvMS4yMTU5NDY4LiBcIitcbiAgICAgICAgXCJQTUlEIDE2NDYwMTUxICBWYWx1ZSBtdXN0IGJlIGJldHdlZW4gMC4wIGFuZCAxLjAuXCIsXG5cbiAgICBzZWVkOiBcIlRoZSBzZWVkIGZvciB0aGUgc2ltdWxhdGlvbi4gIFNldCB0byAtMSBmb3IgYSByYW5kb20gc2VlZC5cIixcblxuICAgIHJlYWxpemF0aW9uczogXCJUaGUgbnVtYmVyIG9mIHNpbXVsYXRpb24gcmVhbGl6YXRpb25zIHRvIGJlIGV4ZWN1dGVkLiBBIHRpbWUtc2VyaWVzIHRyYWplY3RvcnkgZm9yIGVhY2ggcmVhbGl6YXRpb24gd2lsbCBiZSByZXR1cm5lZCB1cG9uIGNvbXBsZXRpb24gb2YgYWxsIFwiK1xuICAgICAgICBcInJlYWxpemF0aW9ucy5cIixcblxuICAgIGFsZ29yaXRobTpcIlRoZSBzb2x2ZXIgYnkgd2hpY2ggdG8gc2ltdWxhdGUgdGhlIG1vZGVsLlwiLFxuXG4gICAgb2RlOiBcIlRoaXMgYWxnb3JpdGhtIHByb2R1Y2VzIGEgJ2NvbnRpbnVvdXMtZGV0ZXJtaW5pc3RpYycgc29sdXRpb24gaW4gdGhlIHN0eWxlIG9mIE9yZGluYXJ5IERpZmZlcmVudGlhbCBFcXVhdGlvbnMgKE9ERSkuXCIsXG5cbiAgICBzc2E6IFwiVGhpcyBhbGdvcml0aG0gcHJvZHVjZXMgYSAnZGlzY3JldGUtc3RvY2hhc3RpYycgc29sdXRpb24gdXNpbmcgdGhlIFN0b2NoYXN0aWMgU2ltdWxhdGlvbiBBbGdvcml0aG0gKFNTQSwgYWxzbyBrbm93IGFzIHRoZSBHaWxsZXNwaWUgYWxnb3JpdGhtKS5cIixcblxuICAgIHRhdUxlYXBpbmc6IFwiVGhpcyBhbGdvcml0aG0gcHJvZHVjZXMgYSAnZGlzY3JldGUtc3RvY2hhc3RpYycgc29sdXRpb24gdXNpbmcgYSB2YXJpYW50IG9mIHRoZSBTU0EgdGhhdCBpcyBtb3JlIGVmZmljaWVudCwgYnV0IGxlc3MgYWNjdXJhdGUuXCIsXG5cbiAgICBoeWJyaWQ6IFwiVGhpcyBoeWJyaWQgZGV0ZXJtaW5pc3RpYy1zdG9jaGFzdGljIHdpbGwgcHJvZHVjZSBhIHNvbHV0aW9uIHRoYXQgaXMgJ2Rpc2NyZXRlLXN0b2NoYXN0aWMnIGZvciBzbWFsbCBwb3B1bGF0aW9uIHNpemVzIGFuZCAnY29udGludW91cy1kZXRlcm1pbmlzdGljJyBcIitcbiAgICAgICAgXCJmb3IgbGFyZ2UgcG9wdWxhdGlvbiBzaXplcy5cIixcblxuICAgIGNob29zZUZvck1lOiBcIkh5YnJpZCB3aWxsIGJlIHNlbGVjdGVkIGJhc2VkIG9uIEV2ZW50LCBSdWxlcywgYW5kIG90aGVyIFNCTUwgbW9kZWwgY29tcG9uZW50cyBvciBpZiB0aGUgbW9kZWwgaXMgcmVwcmVzZW50ZWQgYXMgQ29uY2VudHJhdGlvbiBvciBIeWJyaWQgXCIrXG4gICAgICAgIFwiQ29uY2VudHJhdGlvbi9Qb3B1bGF0aW9uLiAgSWYgdGhlIG1vZGVsIGlzIHJlcHJlc2VudGVkIGFzIHBvcHVsYXRpb24sIHRoZSBTU0Egd2lsbCBiZSBzZWxlY3RlZC4gIFRoaXMgY2FuIGJlIG1vZGlmaWVkIHRvIGEgVGF1LUxlYXBpbmcgYWxnb3JpdGhtIGJ5IFwiK1xuICAgICAgICBcImNoYW5naW5nIHRoZSBhdS10b2xlcmFuY2UgdmFsdWUgZnJvbSB0aGUgZGVmYXVsdCBvZiAwLjAzLlwiXG4gIH0sXG4gIHBhcmFtZXRlclN3ZWVwU2V0dGluZ3M6IHtcbiAgICBzd2VlcFR5cGU6IFwiVGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIHRvIHN3ZWVwIHRocm91Z2guXCIsXG5cbiAgICBzcGVjaWVzOiBcIlRoZSBpbml0aWFsIHNwZWNpZXMgdG8gdmlldyBzd2VlcCBkYXRhIGZvci5cIixcblxuICAgIHZhcmlhYmxlOiBcIlRoZSBwYXJhbWV0ZXIocykgdG8gc3dlZXAgdGhyb3VnaC5cIixcbiAgICBcbiAgICB2YWx1ZTogXCJUaGUgY3VycmVudCB2YWx1ZSBmb3IgdGhlIHBhcmFtZXRlciB5b3Ugd2l0aCB0byBzd2VlcCB0aHJvdWdoLlwiLFxuICAgIFxuICAgIG1pbjogXCJUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgc3dlZXAgcmFuZ2UuICBEZWZhdWx0cyB0byBoYWxmIG9mIHRoZSBjdXJyZW50IHZhbHVlLlwiLFxuICAgIFxuICAgIG1heDogXCJUaGUgZmluYWwgdmFsdWUgb2YgdGhlIHN3ZWVwIHJhbmdlLiAgRGVmYXVsdHMgdG8gMS41IHRpbWVzIHRoZSBjdXJyZW50IHZhbHVlLlwiLFxuICAgIFxuICAgIHN0ZXBzOiBcIlRoZSBudW1iZXIgb2Ygc3RlcHMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHN3ZWVwIHZhbHVlcyBhY3Jvc3MgdGhlIHN3ZWVwIHJhbmdlLlwiXG4gIH0sXG4gIHBhcmFtZXRlclN3ZWVwUmVzdWx0czoge1xuICAgIHNwZWNpZXM6IFwiVGhlIHNwZWNpZXMgdG8gdmlldyBzd2VlcCBkYXRhIGZvclwiLFxuXG4gICAgbWFwcGVyOiBcIlRoZSAnZmVhdHVyZSBleHRyYWN0b3InIHdoaWNoIGNhbGN1bGF0ZXMgYSBzaW5nbGUgdmFsdWUgZnJvbSB0aGUgc3BlY2llcyBwb3B1bGF0aW9uL2NvbmNlbnRyYXRpb24gZGF0YSBvZiBlYWNoIHNpbXVsYXRlZCB0cmFqZWN0b3J5LlwiLFxuICAgIFxuICAgIHJlZHVjZXI6IFwiVGhlIHN0YXRpc3RpY2FsIGZ1bmN0aW9uIGFwcGxpZWQgdG8gdGhlIGVuc2VtYmxlIG9mIHZhbHVlcyBleHRyYWN0ZWQgYnkgdGhlICdmZWF0dXJlIGV4dHJhY3RvcicgZnJvbSBlYWNoIHNpbXVsYXRpb24gdHJhamVjdG9yeS5cIlxuICB9LFxuICB3b3JrZmxvd1NlbGVjdGlvbjoge1xuICAgIGVuc2VtYmxlU2ltdWxhdGlvbjogXCJQcm9kdWNlIGEgdGltZS1zZXJpZXMgcmVzdWx0IGZvciBvbmUgb3IgbW9yZSBzaW11bGF0aW9uKHMpIG9mIHRoZSBtb2RlbC5cIixcblxuICAgIHBhcmFtZXRlclN3ZWVwOiBcIlByb2R1Y2VkIGFuZCBjb21wYXJlIHJlc3VsdHMgZnJvbSBtb2RlbCBzaW11bGF0aW9ucyBieSB2YXJ5aW5nIHBhcmFtZXRlcnMgb3ZlciBhIHJhbmdlLlwiXG4gIH1cbn0iLCJ2YXIgQW1wZXJzYW5kSW5wdXRWaWV3ID0gcmVxdWlyZSgnYW1wZXJzYW5kLWlucHV0LXZpZXcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBBbXBlcnNhbmRJbnB1dFZpZXcuZXh0ZW5kKHtcbiAgcHJvcHM6IHtcbiAgICBuYW1lOiAnc3RyaW5nJyxcbiAgICBsYWJlbDogJ3N0cmluZycsXG4gICAgbW9kZWxLZXk6ICdzdHJpbmcnLFxuICAgIHZhbHVlVHlwZTogJ3N0cmluZycsXG4gIH0sXG4gIGV2ZW50czoge1xuICAgICdjaGFuZ2UgaW5wdXQnIDogJ2NoYW5nZUlucHV0SGFuZGxlcicsXG4gIH0sXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uIChhdHRycywgb3B0aW9ucykge1xuICAgIEFtcGVyc2FuZElucHV0Vmlldy5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uICgpIHtcbiAgICBpZih0aGlzLmxhYmVsKVxuICAgICAgdGhpcy50ZW1wbGF0ZSA9IFtcbiAgICAgICAgJzxsYWJlbD4nLFxuICAgICAgICAgICAgJzxzcGFuIGRhdGEtaG9vaz1cImxhYmVsXCI+PC9zcGFuPicsXG4gICAgICAgICAgICAnPGlucHV0IGNsYXNzPVwiZm9ybS1pbnB1dCBsYWJlbGVkXCI+JyxcbiAgICAgICAgICAgICc8ZGl2IGRhdGEtaG9vaz1cIm1lc3NhZ2UtY29udGFpbmVyXCIgY2xhc3M9XCJtZXNzYWdlIG1lc3NhZ2UtYmVsb3cgbWVzc2FnZS1lcnJvclwiPicsXG4gICAgICAgICAgICAgICAgJzxwIGRhdGEtaG9vaz1cIm1lc3NhZ2UtdGV4dFwiPjwvcD4nLFxuICAgICAgICAgICAgJzwvZGl2PicsXG4gICAgICAgICc8L2xhYmVsPidcbiAgICAgIF0uam9pbignJylcbiAgICBBbXBlcnNhbmRJbnB1dFZpZXcucHJvdG90eXBlLnJlbmRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9LFxuICBjaGFuZ2VJbnB1dEhhbmRsZXI6IGZ1bmN0aW9uIChlKSB7XG4gICAgaWYodGhpcy5tb2RlbEtleSl7XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlVHlwZSA9PT0gJ251bWJlcicgPyBOdW1iZXIoZS50YXJnZXQudmFsdWUpIDogZS50YXJnZXQudmFsdWU7XG4gICAgICB0aGlzLnBhcmVudC5tb2RlbFt0aGlzLm1vZGVsS2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfSxcbn0pOyIsInZhciBfID0gcmVxdWlyZSgndW5kZXJzY29yZScpO1xudmFyICQgPSByZXF1aXJlKCdqcXVlcnknKTtcbi8vdmFyIHNldEZhdmljb24gPSByZXF1aXJlKCdmYXZpY29uLXNldHRlcicpO1xudmFyIGFwcCA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1hcHAnKTtcbnZhciBWaWV3ID0gcmVxdWlyZSgnYW1wZXJzYW5kLXZpZXcnKTtcbnZhciBWaWV3U3dpdGNoZXIgPSByZXF1aXJlKCdhbXBlcnNhbmQtdmlldy1zd2l0Y2hlcicpO1xudmFyIGxvY2FsTGlua3MgPSByZXF1aXJlKCdsb2NhbC1saW5rcycpO1xudmFyIGRvbWlmeSA9IHJlcXVpcmUoJ2RvbWlmeScpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cbnZhciBoZWFkVGVtcGxhdGUgPSByZXF1aXJlKCchcHVnLWxvYWRlciEuLi90ZW1wbGF0ZXMvaGVhZC5wdWcnKTtcbnZhciBib2R5VGVtcGxhdGUgPSByZXF1aXJlKCchcHVnLWxvYWRlciEuLi90ZW1wbGF0ZXMvYm9keS5wdWcnKTtcblxubGV0IG9wZXJhdGlvbkluZm9Nb2RhbEh0bWwgPSAoaW5mb0tleSkgPT4ge1xuICBsZXQgZmlsZUJyb3dzZXJJbmZvID0gYFxuICAgIDxwPkluIFN0b2NoU1Mgd2UgdXNlIGN1c3RvbSBmaWxlIGV4dGVuc2lvbnMgZm9yIGEgbnVtYmVyIG9mIGZpbGVzIHdlIHdvcmsgd2l0aC4gIEhlcmUgaXMgYSBsaXN0IG9mIG91ciBleHRlbnRpb25zIHdpdGggdGhlIGZpbGVzIHRoZXkgYXJlIGFzc29jaWF0ZWQgd2l0aDo8L3A+XG4gICAgPHRhYmxlIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDJlbTtcIj5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRkIHdpZHRoPTIwMD4gU3RvY2hTUyBNb2RlbCA8L3RkPlxuICAgICAgICA8dGQ+IC5tZGwgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHI+XG4gICAgICAgIDx0ZCB3aWR0aD0yMDA+IFN0b2NoU1MgU3BhdGlhbCBNb2RlbCA8L3RkPlxuICAgICAgICA8dGQ+IC5zbWRsIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgICAgPHRyPlxuICAgICAgICA8dGQgd2lkdGg9MjAwPiBTQk1MIE1vZGVsIDwvdGQ+XG4gICAgICAgIDx0ZD4gLnNibWwgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHI+XG4gICAgICAgIDx0ZCB3aWR0aD0yMDA+IFdvcmtmbG93cyA8L3RkPlxuICAgICAgICA8dGQ+IC53a2ZsIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvdGFibGU+XG4gICAgPGJyPlxuICAgIDxwPk90aGVyIHVzZWZ1bCBmaWxlIGV4dGVuc2lvbnMgaW5jbHVkZSB0aGUgZm9sbG93aW5nOjwvcD5cbiAgICA8dGFibGUgc3R5bGU9XCJtYXJnaW4tbGVmdDogMmVtO1wiPlxuICAgICAgPHRyPlxuICAgICAgICA8dGQgd2lkdGg9MjAwPiBKdXB5dGVyIE5vdGVib29rIDwvdGQ+XG4gICAgICAgIDx0ZD4gLmlweW5iIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvdGFibGU+XG4gIGA7XG4gIGxldCBtb2RlbEluZm8gPSBgXG4gICAgTW9kZWwgSW5mb3JtYXRpb25cbiAgYDtcbiAgbGV0IHdvcmtmbG93SW5mbyA9IGBcbiAgICBXb3JrZmxvdyBJbmZvcm1hdGlvblxuICBgO1xuXG4gIGxldCBpbmZvTGlzdCA9IHtcIkZpbGUgQnJvd3NlclwiOmZpbGVCcm93c2VySW5mbywgXCJNb2RlbHNcIjptb2RlbEluZm8sIFwiV29ya2Zsb3dzXCI6d29ya2Zsb3dJbmZvfVxuICBcbiAgcmV0dXJuIGBcbiAgICA8ZGl2IGlkPVwib3BlcmF0aW9uSW5mb01vZGFsXCIgY2xhc3M9XCJtb2RhbFwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50IGluZm9cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPiBXb3JraW5nIHdpdGggJHtpbmZvS2V5fSA8L2g1PlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgPHA+ICR7aW5mb0xpc3RbaW5mb0tleV19IDwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5DbG9zZTwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgIFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFZpZXcuZXh0ZW5kKHtcbiAgdGVtcGxhdGU6IGJvZHlUZW1wbGF0ZSxcbiAgYXV0b1JlbmRlcjogdHJ1ZSxcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5saXN0ZW5UbyhhcHAsICdwYWdlJywgdGhpcy5oYW5kbGVOZXdQYWdlKTtcbiAgfSxcbiAgZXZlbnRzOiB7XG4gICAgJ2NsaWNrIFtkYXRhLWhvb2s9cmVnaXN0cmF0aW9uLWxpbmstYnV0dG9uXScgOiAnaGFuZGxlUmVnaXN0cmF0aW9uTGlua0NsaWNrJyxcbiAgICAvLydjbGljayBhW2hyZWZdJzogJ2hhbmRsZUxpbmtDbGljaydcbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7XG5cbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGRvbWlmeShoZWFkVGVtcGxhdGUoKSkpO1xuXG4gICAgdGhpcy5yZW5kZXJXaXRoVGVtcGxhdGUodGhpcyk7XG4gICAgXG4gICAgdGhpcy5wYWdlQ29udGFpbmVyID0gdGhpcy5xdWVyeUJ5SG9vaygncGFnZS1jb250YWluZXInKTtcblxuICAgIHRoaXMucGFnZVN3aXRjaGVyID0gbmV3IFZpZXdTd2l0Y2hlcih7XG4gICAgICBlbDogdGhpcy5wYWdlQ29udGFpbmVyLFxuICAgICAgc2hvdzogZnVuY3Rpb24gKG5ld1ZpZXcsIG9sZFZpZXcpIHtcbiAgICAgICAgZG9jdW1lbnQudGl0bGUgPSBfLnJlc3VsdChuZXdWaWV3LCAncGFnZVRpdGxlJykgfHwgJ1N0b2NoU1MnO1xuICAgICAgICBkb2N1bWVudC5zY3JvbGxUb3AgPSAwO1xuICAgICAgICBcbiAgICAgICAgYXBwLmN1cnJlbnRQYWdlID0gbmV3VmlldztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBob21lUGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zdGFydHNXaXRoKFwiL3VzZXJcIikgPyBcIi9odWIvc3RvY2hzc1wiIDogXCJzdG9jaHNzL21vZGVsc1wiXG4gICAgJCh0aGlzLnF1ZXJ5QnlIb29rKFwiaG9tZS1saW5rXCIpKS5wcm9wKCdocmVmJywgaG9tZVBhdGgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIFxuICBoYW5kbGVOZXdQYWdlOiBmdW5jdGlvbiAodmlldykge1xuICAgIHRoaXMucGFnZVN3aXRjaGVyLnNldCh2aWV3KTtcbiAgICAvL3RoaXMudXBkYXRlQWN0aXZlTmF2KCk7XG4gIH0sXG5cbiAgaGFuZGxlTGlua0NsaWNrOiBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBsb2NhbFBhdGggPSBsb2NhbExpbmtzLnBhdGhuYW1lKGUpO1xuXG4gICAgaWYgKGxvY2FsUGF0aCkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5uYXZpZ2F0ZShsb2NhbFBhdGgpO1xuICAgIH1cbiAgfSxcblxuICBoYW5kbGVSZWdpc3RyYXRpb25MaW5rQ2xpY2s6IGZ1bmN0aW9uICgpIHtcbiAgICAkKHRoaXMucXVlcnlCeUhvb2soXCJyZWdpc3RyYXRpb24tZm9ybVwiKSkuY29sbGFwc2UoJ3Nob3cnKTtcbiAgICAkKHRoaXMucXVlcnlCeUhvb2soXCJyZWdpc3RyYXRpb24tbGlua1wiKSkuY29sbGFwc2UoKTtcbiAgfSxcblxuICBuYXZpZ2F0ZTogZnVuY3Rpb24gKHBhZ2UpIHtcbiAgICB3aW5kb3cubG9jYXRpb24gPSB1cmw7XG4gIH1cbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIG5hbWVUZXN0czogW1xuICAgIGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICBpZiAoL15bMC05XSsvLnRlc3QodGV4dCkpIHtcbiAgICAgICAgcmV0dXJuIFwiRmllbGQgY2Fubm90IHN0YXJ0IHdpdGggYSBudW1iZXIuIFN0YXJ0IHdpdGggbGV0dGVyIG9yIHVuZGVyc2NvcmUuXCIgXG4gICAgICB9XG4gICAgfSxcbiAgICBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgaWYgKCEvXlthLXpBLVowLTlfXSskLy50ZXN0KHRleHQpKSB7XG4gICAgICAgIHJldHVybiBcIkludmFsaWQgY2hhcmFjdGVycy4gUGxlYXNlIG9ubHkgdXNlIGxldHRlcnMsIG51bWJlcnMsIG9yIHVuZGVyc2NvcmVzLlwiXG4gICAgICB9XG4gICAgfSxcbiAgICBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgaWYodGhpcy5wYXJlbnQubW9kZWwgJiYgdGhpcy5wYXJlbnQubW9kZWwuY29sbGVjdGlvbil7XG4gICAgICAgIHZhciBpc0R1cGxpY2F0ZSA9IHRoaXMucGFyZW50Lm1vZGVsLmNvbGxlY3Rpb24uc29tZShmdW5jdGlvbiAobSkgeyByZXR1cm4gbS5uYW1lID09PSB0ZXh0ICYmIHRoaXMucGFyZW50Lm1vZGVsICE9PSBtO1xuICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgaWYgKGlzRHVwbGljYXRlKSB7XG4gICAgICAgICAgcmV0dXJuIFwiTm8gZHVwbGljYXRlIGVudHJpZXMuXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIF0sXG4gIHZhbHVlVGVzdHM6IFtcbiAgICBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmIChpc05hTihOdW1iZXIodmFsdWUpKSkge1xuICAgICAgICByZXR1cm4gXCJNdXN0IGJlIGEgbnVtYmVyLlwiXG4gICAgICB9XG4gICAgfSxcbiAgICBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmIChOdW1iZXIodmFsdWUpIDwgMCkge1xuICAgICAgICByZXR1cm4gXCJNdXN0IGJlIG5vbi1uZWdhdGl2ZS5cIlxuICAgICAgfVxuICAgIH0sXG4gIF0sXG59IiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdmctd2l0aC1qcy5taW4uY3NzXCIpO1xuXG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcblxudmFyIHRyYW5zZm9ybTtcbnZhciBpbnNlcnRJbnRvO1xuXG5cblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxuXG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxub3B0aW9ucy5pbnNlcnRJbnRvID0gdW5kZWZpbmVkO1xuXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi8uLi9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1wiKShjb250ZW50LCBvcHRpb25zKTtcblxuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG5cbmlmKG1vZHVsZS5ob3QpIHtcblx0bW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdmctd2l0aC1qcy5taW4uY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N2Zy13aXRoLWpzLm1pbi5jc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iLCIvKiRBTVBFUlNBTkRfVkVSU0lPTiovXG52YXIgRXZlbnRzID0gcmVxdWlyZSgnYW1wZXJzYW5kLWV2ZW50cycpO1xudmFyIHRvQXJyYXkgPSByZXF1aXJlKCdsb2Rhc2gvdG9BcnJheScpO1xudmFyIGV4dGVuZCA9IHJlcXVpcmUoJ2xvZGFzaC9hc3NpZ24nKTtcblxuXG4vLyBpbnN0YW5jZSBhcHAsIGNhbiBiZSB1c2VkIGp1c3QgYnkgaXRzZWxmXG4vLyBvciBieSBjYWxsaW5nIGFzIGZ1bmN0aW9uIHRvIHBhc3MgbGFiZWxzXG4vLyBieSBhdHRhY2hpbmcgYWxsIGluc3RhbmNlcyB0byB0aGlzLCB3ZSBjYW5cbi8vIGF2b2lkIGdsb2JhbHNcbnZhciBhcHAgPSB7XG4gICAgZXh0ZW5kOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gdG9BcnJheShhcmd1bWVudHMpO1xuICAgICAgICBhcmdzLnVuc2hpZnQodGhpcyk7XG4gICAgICAgIHJldHVybiBleHRlbmQuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSxcbiAgICByZXNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBjbGVhciBhbGwgZXZlbnRzXG4gICAgICAgIHRoaXMub2ZmKCk7XG4gICAgICAgIC8vIHJlbW92ZSBhbGwgYnV0IG1haW4gdHdvIG1ldGhvZHNcbiAgICAgICAgZm9yICh2YXIgaXRlbSBpbiB0aGlzKSB7XG4gICAgICAgICAgICBpZiAoaXRlbSAhPT0gJ2V4dGVuZCcgJiYgaXRlbSAhPT0gJ3Jlc2V0Jykge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzW2l0ZW1dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHJlbWl4IGV2ZW50c1xuICAgICAgICBFdmVudHMuY3JlYXRlRW1pdHRlcih0aGlzKTtcbiAgICB9XG59O1xuXG5FdmVudHMuY3JlYXRlRW1pdHRlcihhcHApO1xuXG4vLyBleHBvcnQgb3VyIHNpbmdsZXRvblxubW9kdWxlLmV4cG9ydHMgPSBhcHA7XG4iLCJ2YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpO1xuXG4vLy8gRm9sbG93aW5nIGNvZGUgaXMgbGFyZ2VseSBwYXN0ZWQgZnJvbSBCYWNrYm9uZS5qc1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29ycmVjdGx5IHNldCB1cCB0aGUgcHJvdG90eXBlIGNoYWluLCBmb3Igc3ViY2xhc3Nlcy5cbi8vIFNpbWlsYXIgdG8gYGdvb2cuaW5oZXJpdHNgLCBidXQgdXNlcyBhIGhhc2ggb2YgcHJvdG90eXBlIHByb3BlcnRpZXMgYW5kXG4vLyBjbGFzcyBwcm9wZXJ0aWVzIHRvIGJlIGV4dGVuZGVkLlxudmFyIGV4dGVuZCA9IGZ1bmN0aW9uKHByb3RvUHJvcHMpIHtcbiAgICB2YXIgcGFyZW50ID0gdGhpcztcbiAgICB2YXIgY2hpbGQ7XG4gICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cbiAgICAvLyBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBuZXcgc3ViY2xhc3MgaXMgZWl0aGVyIGRlZmluZWQgYnkgeW91XG4gICAgLy8gKHRoZSBcImNvbnN0cnVjdG9yXCIgcHJvcGVydHkgaW4geW91ciBgZXh0ZW5kYCBkZWZpbml0aW9uKSwgb3IgZGVmYXVsdGVkXG4gICAgLy8gYnkgdXMgdG8gc2ltcGx5IGNhbGwgdGhlIHBhcmVudCdzIGNvbnN0cnVjdG9yLlxuICAgIGlmIChwcm90b1Byb3BzICYmIHByb3RvUHJvcHMuaGFzT3duUHJvcGVydHkoJ2NvbnN0cnVjdG9yJykpIHtcbiAgICAgICAgY2hpbGQgPSBwcm90b1Byb3BzLmNvbnN0cnVjdG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIEFkZCBzdGF0aWMgcHJvcGVydGllcyB0byB0aGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZnJvbSBwYXJlbnRcbiAgICBhc3NpZ24oY2hpbGQsIHBhcmVudCk7XG5cbiAgICAvLyBTZXQgdGhlIHByb3RvdHlwZSBjaGFpbiB0byBpbmhlcml0IGZyb20gYHBhcmVudGAsIHdpdGhvdXQgY2FsbGluZ1xuICAgIC8vIGBwYXJlbnRgJ3MgY29uc3RydWN0b3IgZnVuY3Rpb24uXG4gICAgdmFyIFN1cnJvZ2F0ZSA9IGZ1bmN0aW9uKCl7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfTtcbiAgICBTdXJyb2dhdGUucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTtcbiAgICBjaGlsZC5wcm90b3R5cGUgPSBuZXcgU3Vycm9nYXRlKCk7XG5cbiAgICAvLyBNaXggaW4gYWxsIHByb3RvdHlwZSBwcm9wZXJ0aWVzIHRvIHRoZSBzdWJjbGFzcyBpZiBzdXBwbGllZC5cbiAgICBpZiAocHJvdG9Qcm9wcykge1xuICAgICAgICBhcmdzLnVuc2hpZnQoY2hpbGQucHJvdG90eXBlKTtcbiAgICAgICAgYXNzaWduLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH1cblxuICAgIC8vIFNldCBhIGNvbnZlbmllbmNlIHByb3BlcnR5IGluIGNhc2UgdGhlIHBhcmVudCdzIHByb3RvdHlwZSBpcyBuZWVkZWRcbiAgICAvLyBsYXRlci5cbiAgICBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlO1xuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLy8gRXhwb3NlIHRoZSBleHRlbmQgZnVuY3Rpb25cbm1vZHVsZS5leHBvcnRzID0gZXh0ZW5kO1xuIiwiLyokQU1QRVJTQU5EX1ZFUlNJT04qL1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ2xvZGFzaC9hc3NpZ24nKTtcbnZhciBpbnZva2VNYXAgPSByZXF1aXJlKCdsb2Rhc2gvaW52b2tlTWFwJyk7XG52YXIgcGljayA9IHJlcXVpcmUoJ2xvZGFzaC9waWNrJyk7XG52YXIgZmluZCA9IHJlcXVpcmUoJ2xvZGFzaC9maW5kJyk7XG52YXIgZGlmZmVyZW5jZSA9IHJlcXVpcmUoJ2xvZGFzaC9kaWZmZXJlbmNlJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJ2xvZGFzaC9iaW5kJyk7XG52YXIgRXZlbnRzID0gcmVxdWlyZSgnYW1wZXJzYW5kLWV2ZW50cycpO1xudmFyIGFtcEV4dGVuZCA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1jbGFzcy1leHRlbmQnKTtcblxuLy8gb3B0aW9uc1xudmFyIG9wdGlvbnMgPSBbJ2NvbGxlY3Rpb24nLCAnZWwnLCAndmlld09wdGlvbnMnLCAndmlldycsICdlbXB0eVZpZXcnLCAnZmlsdGVyJywgJ3JldmVyc2UnLCAncGFyZW50J107XG5cblxuZnVuY3Rpb24gQ29sbGVjdGlvblZpZXcoc3BlYykge1xuICAgIGlmICghc3BlYykge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ0NvbGxlY3Rpb24gdmlldyBtaXNzaW5nIHJlcXVpcmVkIHBhcmFtZXRlcnM6IGNvbGxlY3Rpb24sIGVsJyk7XG4gICAgfVxuICAgIGlmICghc3BlYy5jb2xsZWN0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignQ29sbGVjdGlvbiB2aWV3IHJlcXVpcmVzIGEgY29sbGVjdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIXNwZWMuZWwgJiYgIXRoaXMuaW5zZXJ0U2VsZikge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ0NvbGxlY3Rpb24gdmlldyByZXF1aXJlcyBhbiBlbCcpO1xuICAgIH1cbiAgICBhc3NpZ24odGhpcywgcGljayhzcGVjLCBvcHRpb25zKSk7XG4gICAgdGhpcy52aWV3cyA9IFtdO1xuICAgIHRoaXMubGlzdGVuVG8odGhpcy5jb2xsZWN0aW9uLCAnYWRkJywgdGhpcy5fYWRkVmlld0Zvck1vZGVsKTtcbiAgICB0aGlzLmxpc3RlblRvKHRoaXMuY29sbGVjdGlvbiwgJ3JlbW92ZScsIHRoaXMuX3JlbW92ZVZpZXdGb3JNb2RlbCk7XG4gICAgdGhpcy5saXN0ZW5Ubyh0aGlzLmNvbGxlY3Rpb24sICdzb3J0JywgdGhpcy5fcmVyZW5kZXJBbGwpO1xuICAgIHRoaXMubGlzdGVuVG8odGhpcy5jb2xsZWN0aW9uLCAncmVmcmVzaCByZXNldCcsIHRoaXMuX3Jlc2V0KTtcbn1cblxuYXNzaWduKENvbGxlY3Rpb25WaWV3LnByb3RvdHlwZSwgRXZlbnRzLCB7XG4gICAgLy8gZm9yIHZpZXcgY29udHJhY3QgY29tcGxpYW5jZVxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl9yZW5kZXJBbGwoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICByZW1vdmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaW52b2tlTWFwKHRoaXMudmlld3MsICdyZW1vdmUnKTtcbiAgICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nKCk7XG4gICAgfSxcbiAgICBfZ2V0Vmlld0J5TW9kZWw6IGZ1bmN0aW9uIChtb2RlbCkge1xuICAgICAgICByZXR1cm4gZmluZCh0aGlzLnZpZXdzLCBmdW5jdGlvbiAodmlldykge1xuICAgICAgICAgICAgcmV0dXJuIG1vZGVsID09PSB2aWV3Lm1vZGVsO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIF9jcmVhdGVWaWV3Rm9yTW9kZWw6IGZ1bmN0aW9uIChtb2RlbCwgcmVuZGVyT3B0cykge1xuICAgICAgICB2YXIgZGVmYXVsdFZpZXdPcHRpb25zID0ge21vZGVsOiBtb2RlbCwgY29sbGVjdGlvbjogdGhpcy5jb2xsZWN0aW9uLCBwYXJlbnQ6IHRoaXN9O1xuICAgICAgICB2YXIgdmlldyA9IG5ldyB0aGlzLnZpZXcoYXNzaWduKGRlZmF1bHRWaWV3T3B0aW9ucywgdGhpcy52aWV3T3B0aW9ucykpO1xuICAgICAgICB0aGlzLnZpZXdzLnB1c2godmlldyk7XG4gICAgICAgIHZpZXcucmVuZGVyZWRCeVBhcmVudFZpZXcgPSB0cnVlO1xuICAgICAgICB2aWV3LnJlbmRlcihyZW5kZXJPcHRzKTtcbiAgICAgICAgcmV0dXJuIHZpZXc7XG4gICAgfSxcbiAgICBfZ2V0T3JDcmVhdGVCeU1vZGVsOiBmdW5jdGlvbiAobW9kZWwsIHJlbmRlck9wdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFZpZXdCeU1vZGVsKG1vZGVsKSB8fCB0aGlzLl9jcmVhdGVWaWV3Rm9yTW9kZWwobW9kZWwsIHJlbmRlck9wdHMpO1xuICAgIH0sXG4gICAgX2FkZFZpZXdGb3JNb2RlbDogZnVuY3Rpb24gKG1vZGVsLCBjb2xsZWN0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBtYXRjaGVzID0gdGhpcy5maWx0ZXIgPyB0aGlzLmZpbHRlcihtb2RlbCkgOiB0cnVlO1xuICAgICAgICBpZiAoIW1hdGNoZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZW5kZXJlZEVtcHR5Vmlldykge1xuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlVmlldyh0aGlzLnJlbmRlcmVkRW1wdHlWaWV3KTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnJlbmRlcmVkRW1wdHlWaWV3O1xuICAgICAgICB9XG4gICAgICAgIHZhciB2aWV3ID0gdGhpcy5fZ2V0T3JDcmVhdGVCeU1vZGVsKG1vZGVsLCB7Y29udGFpbmVyRWw6IHRoaXMuZWx9KTtcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yZXJlbmRlcikge1xuICAgICAgICAgICAgdGhpcy5faW5zZXJ0Vmlldyh2aWV3KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2luc2VydFZpZXdBdEluZGV4KHZpZXcpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBfaW5zZXJ0Vmlld0F0SW5kZXg6IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgICAgIGlmICghdmlldy5pbnNlcnRTZWxmKSB7XG4gICAgICAgICAgICB2YXIgcG9zID0gdGhpcy5jb2xsZWN0aW9uLmluZGV4T2Yodmlldy5tb2RlbCk7XG4gICAgICAgICAgICBwb3MgPSB0aGlzLnJldmVyc2UgPyBwb3MgLSAxIDogcG9zICsgMTtcblxuICAgICAgICAgICAgdmFyIG1vZGVsVG9JbnNlcnRCZWZvcmUgPSB0aGlzLmNvbGxlY3Rpb24uYXQocG9zKTtcblxuICAgICAgICAgICAgdmFyIHZpZXdUb0luc2VydEJlZm9yZSA9IHRoaXMuX2dldFZpZXdCeU1vZGVsKG1vZGVsVG9JbnNlcnRCZWZvcmUpO1xuXG4gICAgICAgICAgICAvLyBGSVggSUUgYnVnIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTm9kZS5pbnNlcnRCZWZvcmUpXG4gICAgICAgICAgICAvLyBcIkluIEludGVybmV0IEV4cGxvcmVyIGFuIHVuZGVmaW5lZCB2YWx1ZSBhcyByZWZlcmVuY2VFbGVtZW50IHdpbGwgdGhyb3cgZXJyb3JzLCB3aGlsZSBpbiByZXN0IG9mIHRoZSBtb2Rlcm4gYnJvd3NlcnMsIHRoaXMgd29ya3MgZmluZS5cIlxuICAgICAgICAgICAgaWYgKHZpZXdUb0luc2VydEJlZm9yZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZWwuaW5zZXJ0QmVmb3JlKHZpZXcuZWwsIHZpZXdUb0luc2VydEJlZm9yZSAmJiB2aWV3VG9JbnNlcnRCZWZvcmUuZWwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsLmFwcGVuZENoaWxkKHZpZXcuZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBfaW5zZXJ0VmlldzogZnVuY3Rpb24gKHZpZXcpIHtcbiAgICAgICAgaWYgKCF2aWV3Lmluc2VydFNlbGYpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJldmVyc2UgJiYgdGhpcy5lbC5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5pbnNlcnRCZWZvcmUodmlldy5lbCwgdGhpcy5lbC5maXJzdENoaWxkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5hcHBlbmRDaGlsZCh2aWV3LmVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgX3JlbW92ZVZpZXdGb3JNb2RlbDogZnVuY3Rpb24gKG1vZGVsKSB7XG4gICAgICAgIHZhciB2aWV3ID0gdGhpcy5fZ2V0Vmlld0J5TW9kZWwobW9kZWwpO1xuICAgICAgICBpZiAoIXZpZXcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnZpZXdzLmluZGV4T2Yodmlldyk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSBpdCBpZiB3ZSBmb3VuZCBpdCBjYWxsaW5nIGFuaW1hdGVSZW1vdmVcbiAgICAgICAgICAgIC8vIHRvIGdpdmUgdXNlciBvcHRpb24gb2YgZ3JhY2VmdWxseSBkZXN0cm95aW5nLlxuICAgICAgICAgICAgdmlldyA9IHRoaXMudmlld3Muc3BsaWNlKGluZGV4LCAxKVswXTtcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZVZpZXcodmlldyk7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJFbXB0eVZpZXcoKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgX3JlbW92ZVZpZXc6IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgICAgIGlmICh2aWV3LmFuaW1hdGVSZW1vdmUpIHtcbiAgICAgICAgICAgIHZpZXcuYW5pbWF0ZVJlbW92ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmlldy5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgX3JlbmRlckFsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmNvbGxlY3Rpb24uZWFjaChiaW5kKHRoaXMuX2FkZFZpZXdGb3JNb2RlbCwgdGhpcykpO1xuICAgICAgICB0aGlzLl9yZW5kZXJFbXB0eVZpZXcoKTtcbiAgICB9LFxuICAgIF9yZXJlbmRlckFsbDogZnVuY3Rpb24gKGNvbGxlY3Rpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIHRoaXMuY29sbGVjdGlvbi5lYWNoKGJpbmQoZnVuY3Rpb24gKG1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLl9hZGRWaWV3Rm9yTW9kZWwobW9kZWwsIHRoaXMsIGFzc2lnbihvcHRpb25zLCB7cmVyZW5kZXI6IHRydWV9KSk7XG4gICAgICAgIH0sIHRoaXMpKTtcbiAgICB9LFxuICAgIF9yZW5kZXJFbXB0eVZpZXc6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy52aWV3cy5sZW5ndGggPT09IDAgJiYgdGhpcy5lbXB0eVZpZXcgJiYgIXRoaXMucmVuZGVyZWRFbXB0eVZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZWRFbXB0eVZpZXcgPSBuZXcgdGhpcy5lbXB0eVZpZXcoe3BhcmVudDogdGhpc30pO1xuICAgICAgICAgICAgdGhpcy5lbC5hcHBlbmRDaGlsZCh0aGlzLnJlbmRlcmVkRW1wdHlWaWV3LnJlbmRlcigpLmVsKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgX3Jlc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBuZXdWaWV3cyA9IHRoaXMuY29sbGVjdGlvbi5tYXAoYmluZCh0aGlzLl9nZXRPckNyZWF0ZUJ5TW9kZWwsIHRoaXMpKTtcblxuICAgICAgICAvL1JlbW92ZSBleGlzdGluZyB2aWV3cyBmcm9tIHRoZSB1aVxuICAgICAgICB2YXIgdG9SZW1vdmUgPSBkaWZmZXJlbmNlKHRoaXMudmlld3MsIG5ld1ZpZXdzKTtcbiAgICAgICAgdG9SZW1vdmUuZm9yRWFjaCh0aGlzLl9yZW1vdmVWaWV3LCB0aGlzKTtcblxuICAgICAgICAvL1JlcmVuZGVyIHRoZSBmdWxsIGxpc3Qgd2l0aCB0aGUgbmV3IHZpZXdzXG4gICAgICAgIHRoaXMudmlld3MgPSBuZXdWaWV3cztcbiAgICAgICAgdGhpcy5fcmVyZW5kZXJBbGwoKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyRW1wdHlWaWV3KCk7XG4gICAgfVxufSk7XG5cbkNvbGxlY3Rpb25WaWV3LmV4dGVuZCA9IGFtcEV4dGVuZDtcblxubW9kdWxlLmV4cG9ydHMgPSBDb2xsZWN0aW9uVmlldztcbiIsInZhciBBbXBlcnNhbmRFdmVudHMgPSByZXF1aXJlKCdhbXBlcnNhbmQtZXZlbnRzJyk7XG52YXIgY2xhc3NFeHRlbmQgPSByZXF1aXJlKCdhbXBlcnNhbmQtY2xhc3MtZXh0ZW5kJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJ2xvZGFzaC9pc0FycmF5Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJ2xvZGFzaC9iaW5kJyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpO1xudmFyIHNsaWNlID0gW10uc2xpY2U7XG5cbmZ1bmN0aW9uIENvbGxlY3Rpb24obW9kZWxzLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTtcbiAgICBpZiAob3B0aW9ucy5tb2RlbCkgdGhpcy5tb2RlbCA9IG9wdGlvbnMubW9kZWw7XG4gICAgaWYgKG9wdGlvbnMuY29tcGFyYXRvcikgdGhpcy5jb21wYXJhdG9yID0gb3B0aW9ucy5jb21wYXJhdG9yO1xuICAgIGlmIChvcHRpb25zLnBhcmVudCkgdGhpcy5wYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcbiAgICBpZiAoIXRoaXMubWFpbkluZGV4KSB7XG4gICAgICAgIHZhciBpZEF0dHJpYnV0ZSA9IHRoaXMubW9kZWwgJiYgdGhpcy5tb2RlbC5wcm90b3R5cGUgJiYgdGhpcy5tb2RlbC5wcm90b3R5cGUuaWRBdHRyaWJ1dGU7XG4gICAgICAgIHRoaXMubWFpbkluZGV4ID0gaWRBdHRyaWJ1dGUgfHwgJ2lkJztcbiAgICB9XG4gICAgdGhpcy5fcmVzZXQoKTtcbiAgICB0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAobW9kZWxzKSB0aGlzLnJlc2V0KG1vZGVscywgYXNzaWduKHtzaWxlbnQ6IHRydWV9LCBvcHRpb25zKSk7XG59XG5cbmFzc2lnbihDb2xsZWN0aW9uLnByb3RvdHlwZSwgQW1wZXJzYW5kRXZlbnRzLCB7XG4gICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKCkge30sXG5cbiAgICBpc01vZGVsOiBmdW5jdGlvbiAobW9kZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwgJiYgbW9kZWwgaW5zdGFuY2VvZiB0aGlzLm1vZGVsO1xuICAgIH0sXG5cbiAgICBhZGQ6IGZ1bmN0aW9uIChtb2RlbHMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0KG1vZGVscywgYXNzaWduKHttZXJnZTogZmFsc2UsIGFkZDogdHJ1ZSwgcmVtb3ZlOiBmYWxzZX0sIG9wdGlvbnMpKTtcbiAgICB9LFxuXG4gICAgLy8gb3ZlcnJpZGFibGUgcGFyc2UgbWV0aG9kXG4gICAgcGFyc2U6IGZ1bmN0aW9uIChyZXMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuXG4gICAgLy8gb3ZlcnJpZGFibGUgc2VyaWFsaXplIG1ldGhvZFxuICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKG1vZGVsKSB7XG4gICAgICAgICAgICBpZiAobW9kZWwuc2VyaWFsaXplKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZGVsLnNlcmlhbGl6ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgb3V0ID0ge307XG4gICAgICAgICAgICAgICAgYXNzaWduKG91dCwgbW9kZWwpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBvdXQuY29sbGVjdGlvbjtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgdG9KU09OOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZSgpO1xuICAgIH0sXG5cbiAgICBzZXQ6IGZ1bmN0aW9uIChtb2RlbHMsIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGFzc2lnbih7YWRkOiB0cnVlLCByZW1vdmU6IHRydWUsIG1lcmdlOiB0cnVlfSwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChvcHRpb25zLnBhcnNlKSBtb2RlbHMgPSB0aGlzLnBhcnNlKG1vZGVscywgb3B0aW9ucyk7XG4gICAgICAgIHZhciBzaW5ndWxhciA9ICFpc0FycmF5KG1vZGVscyk7XG4gICAgICAgIG1vZGVscyA9IHNpbmd1bGFyID8gKG1vZGVscyA/IFttb2RlbHNdIDogW10pIDogbW9kZWxzLnNsaWNlKCk7XG4gICAgICAgIHZhciBpZCwgbW9kZWwsIGF0dHJzLCBleGlzdGluZywgc29ydCwgaSwgbGVuZ3RoO1xuICAgICAgICB2YXIgYXQgPSBvcHRpb25zLmF0O1xuICAgICAgICB2YXIgc29ydGFibGUgPSB0aGlzLmNvbXBhcmF0b3IgJiYgKGF0ID09IG51bGwpICYmIG9wdGlvbnMuc29ydCAhPT0gZmFsc2U7XG4gICAgICAgIHZhciBzb3J0QXR0ciA9ICgnc3RyaW5nJyA9PT0gdHlwZW9mIHRoaXMuY29tcGFyYXRvcikgPyB0aGlzLmNvbXBhcmF0b3IgOiBudWxsO1xuICAgICAgICB2YXIgdG9BZGQgPSBbXSwgdG9SZW1vdmUgPSBbXSwgbW9kZWxNYXAgPSB7fTtcbiAgICAgICAgdmFyIGFkZCA9IG9wdGlvbnMuYWRkLCBtZXJnZSA9IG9wdGlvbnMubWVyZ2UsIHJlbW92ZSA9IG9wdGlvbnMucmVtb3ZlO1xuICAgICAgICB2YXIgb3JkZXIgPSAhc29ydGFibGUgJiYgYWRkICYmIHJlbW92ZSA/IFtdIDogZmFsc2U7XG4gICAgICAgIHZhciB0YXJnZXRQcm90byA9IHRoaXMubW9kZWwgJiYgdGhpcy5tb2RlbC5wcm90b3R5cGUgfHwgT2JqZWN0LnByb3RvdHlwZTtcblxuICAgICAgICAvLyBUdXJuIGJhcmUgb2JqZWN0cyBpbnRvIG1vZGVsIHJlZmVyZW5jZXMsIGFuZCBwcmV2ZW50IGludmFsaWQgbW9kZWxzXG4gICAgICAgIC8vIGZyb20gYmVpbmcgYWRkZWQuXG4gICAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IG1vZGVscy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXR0cnMgPSBtb2RlbHNbaV0gfHwge307XG4gICAgICAgICAgICBpZiAodGhpcy5pc01vZGVsKGF0dHJzKSkge1xuICAgICAgICAgICAgICAgIGlkID0gbW9kZWwgPSBhdHRycztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0UHJvdG8uZ2VuZXJhdGVJZCkge1xuICAgICAgICAgICAgICAgIGlkID0gdGFyZ2V0UHJvdG8uZ2VuZXJhdGVJZChhdHRycyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlkID0gYXR0cnNbdGhpcy5tYWluSW5kZXhdO1xuICAgICAgICAgICAgICAgIGlmIChpZCA9PT0gdW5kZWZpbmVkICYmIHRoaXMuX2lzRGVyaXZlZEluZGV4KHRhcmdldFByb3RvKSkge1xuICAgICAgICAgICAgICAgICAgICBpZCA9IHRhcmdldFByb3RvLl9kZXJpdmVkW3RoaXMubWFpbkluZGV4XS5mbi5jYWxsKGF0dHJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIGEgZHVwbGljYXRlIGlzIGZvdW5kLCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgYWRkZWQgYW5kXG4gICAgICAgICAgICAvLyBvcHRpb25hbGx5IG1lcmdlIGl0IGludG8gdGhlIGV4aXN0aW5nIG1vZGVsLlxuICAgICAgICAgICAgaWYgKGV4aXN0aW5nID0gdGhpcy5nZXQoaWQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlbW92ZSkgbW9kZWxNYXBbZXhpc3RpbmcuY2lkIHx8IGV4aXN0aW5nW3RoaXMubWFpbkluZGV4XV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChtZXJnZSkge1xuICAgICAgICAgICAgICAgICAgICBhdHRycyA9IGF0dHJzID09PSBtb2RlbCA/IG1vZGVsLmF0dHJpYnV0ZXMgOiBhdHRycztcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucGFyc2UpIGF0dHJzID0gZXhpc3RpbmcucGFyc2UoYXR0cnMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGlzIGlzIG1vZGVsXG4gICAgICAgICAgICAgICAgICAgIGlmIChleGlzdGluZy5zZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLnNldChhdHRycywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc29ydGFibGUgJiYgIXNvcnQgJiYgZXhpc3RpbmcuaGFzQ2hhbmdlZChzb3J0QXR0cikpIHNvcnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgbm90IGp1c3QgdXBkYXRlIHRoZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ24oZXhpc3RpbmcsIGF0dHJzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtb2RlbHNbaV0gPSBleGlzdGluZztcblxuICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIG5ldywgdmFsaWQgbW9kZWwsIHB1c2ggaXQgdG8gdGhlIGB0b0FkZGAgbGlzdC5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWRkKSB7XG4gICAgICAgICAgICAgICAgbW9kZWwgPSBtb2RlbHNbaV0gPSB0aGlzLl9wcmVwYXJlTW9kZWwoYXR0cnMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGlmICghbW9kZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHRvQWRkLnB1c2gobW9kZWwpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkZFJlZmVyZW5jZShtb2RlbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIERvIG5vdCBhZGQgbXVsdGlwbGUgbW9kZWxzIHdpdGggdGhlIHNhbWUgYGlkYC5cbiAgICAgICAgICAgIG1vZGVsID0gZXhpc3RpbmcgfHwgbW9kZWw7XG4gICAgICAgICAgICBpZiAoIW1vZGVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChvcmRlciAmJiAoKG1vZGVsLmlzTmV3ICYmIG1vZGVsLmlzTmV3KCkgfHwgIW1vZGVsW3RoaXMubWFpbkluZGV4XSkgfHwgIW1vZGVsTWFwW21vZGVsLmNpZCB8fCBtb2RlbFt0aGlzLm1haW5JbmRleF1dKSkgb3JkZXIucHVzaChtb2RlbCk7XG4gICAgICAgICAgICBtb2RlbE1hcFttb2RlbFt0aGlzLm1haW5JbmRleF1dID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlbW92ZSBub25leGlzdGVudCBtb2RlbHMgaWYgYXBwcm9wcmlhdGUuXG4gICAgICAgIGlmIChyZW1vdmUpIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IHRoaXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBtb2RlbCA9IHRoaXMubW9kZWxzW2ldO1xuICAgICAgICAgICAgICAgIGlmICghbW9kZWxNYXBbbW9kZWwuY2lkIHx8IG1vZGVsW3RoaXMubWFpbkluZGV4XV0pIHRvUmVtb3ZlLnB1c2gobW9kZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRvUmVtb3ZlLmxlbmd0aCkgdGhpcy5yZW1vdmUodG9SZW1vdmUsIG9wdGlvbnMpO1xuXG4gICAgICAgICAgICAvLyBBZGQgaW5kZXhlcyBhZ2FpbiB0byBtYWtlIHN1cmUgdGhleSB3ZXJlIG5vdCByZW1vdmVkIGFib3ZlLlxuICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9BZGQubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbmRleCh0b0FkZFtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZWUgaWYgc29ydGluZyBpcyBuZWVkZWQsIHVwZGF0ZSBgbGVuZ3RoYCBhbmQgc3BsaWNlIGluIG5ldyBtb2RlbHMuXG4gICAgICAgIGlmICh0b0FkZC5sZW5ndGggfHwgKG9yZGVyICYmIG9yZGVyLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIGlmIChzb3J0YWJsZSkgc29ydCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoYXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IHRvQWRkLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWxzLnNwbGljZShhdCArIGksIDAsIHRvQWRkW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBvcmRlcmVkTW9kZWxzID0gb3JkZXIgfHwgdG9BZGQ7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gb3JkZXJlZE1vZGVscy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVscy5wdXNoKG9yZGVyZWRNb2RlbHNbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNpbGVudGx5IHNvcnQgdGhlIGNvbGxlY3Rpb24gaWYgYXBwcm9wcmlhdGUuXG4gICAgICAgIGlmIChzb3J0KSB0aGlzLnNvcnQoe3NpbGVudDogdHJ1ZX0pO1xuXG4gICAgICAgIC8vIFVubGVzcyBzaWxlbmNlZCwgaXQncyB0aW1lIHRvIGZpcmUgYWxsIGFwcHJvcHJpYXRlIGFkZC9zb3J0IGV2ZW50cy5cbiAgICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9BZGQubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBtb2RlbCA9IHRvQWRkW2ldO1xuICAgICAgICAgICAgICAgIGlmIChtb2RlbC50cmlnZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGVsLnRyaWdnZXIoJ2FkZCcsIG1vZGVsLCB0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2FkZCcsIG1vZGVsLCB0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc29ydCB8fCAob3JkZXIgJiYgb3JkZXIubGVuZ3RoKSkgdGhpcy50cmlnZ2VyKCdzb3J0JywgdGhpcywgb3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gdGhlIGFkZGVkIChvciBtZXJnZWQpIG1vZGVsIChvciBtb2RlbHMpLlxuICAgICAgICByZXR1cm4gc2luZ3VsYXIgPyBtb2RlbHNbMF0gOiBtb2RlbHM7XG4gICAgfSxcblxuICAgIGdldDogZnVuY3Rpb24gKHF1ZXJ5LCBpbmRleE5hbWUpIHtcbiAgICAgICAgaWYgKHF1ZXJ5ID09IG51bGwpIHJldHVybjtcblxuICAgICAgICB2YXIgY29sbGVjdGlvbk1haW5JbmRleCA9IHRoaXMubWFpbkluZGV4O1xuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9pbmRleGVzW2luZGV4TmFtZSB8fCBjb2xsZWN0aW9uTWFpbkluZGV4XTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgIGluZGV4ICYmIChcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhbcXVlcnldIHx8IChcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5W2NvbGxlY3Rpb25NYWluSW5kZXhdICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4W3F1ZXJ5W2NvbGxlY3Rpb25NYWluSW5kZXhdXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB8fFxuICAgICAgICAgICAgdGhpcy5faW5kZXhlcy5jaWRbcXVlcnldIHx8XG4gICAgICAgICAgICB0aGlzLl9pbmRleGVzLmNpZFtxdWVyeS5jaWRdXG4gICAgICAgICk7XG4gICAgfSxcblxuICAgIC8vIEdldCB0aGUgbW9kZWwgYXQgdGhlIGdpdmVuIGluZGV4LlxuICAgIGF0OiBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWxzW2luZGV4XTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAobW9kZWxzLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBzaW5ndWxhciA9ICFpc0FycmF5KG1vZGVscyk7XG4gICAgICAgIHZhciBpLCBsZW5ndGgsIG1vZGVsLCBpbmRleDtcblxuICAgICAgICBtb2RlbHMgPSBzaW5ndWxhciA/IFttb2RlbHNdIDogc2xpY2UuY2FsbChtb2RlbHMpO1xuICAgICAgICBvcHRpb25zIHx8IChvcHRpb25zID0ge30pO1xuICAgICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBtb2RlbHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG1vZGVsID0gbW9kZWxzW2ldID0gdGhpcy5nZXQobW9kZWxzW2ldKTtcbiAgICAgICAgICAgIGlmICghbW9kZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGhpcy5fZGVJbmRleChtb2RlbCk7XG4gICAgICAgICAgICBpbmRleCA9IHRoaXMubW9kZWxzLmluZGV4T2YobW9kZWwpO1xuICAgICAgICAgICAgdGhpcy5tb2RlbHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgaWYgKG1vZGVsLnRyaWdnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWwudHJpZ2dlcigncmVtb3ZlJywgbW9kZWwsIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcigncmVtb3ZlJywgbW9kZWwsIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZVJlZmVyZW5jZShtb2RlbCwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNpbmd1bGFyID8gbW9kZWxzWzBdIDogbW9kZWxzO1xuICAgIH0sXG5cbiAgICAvLyBXaGVuIHlvdSBoYXZlIG1vcmUgaXRlbXMgdGhhbiB5b3Ugd2FudCB0byBhZGQgb3IgcmVtb3ZlIGluZGl2aWR1YWxseSxcbiAgICAvLyB5b3UgY2FuIHJlc2V0IHRoZSBlbnRpcmUgc2V0IHdpdGggYSBuZXcgbGlzdCBvZiBtb2RlbHMsIHdpdGhvdXQgZmlyaW5nXG4gICAgLy8gYW55IGdyYW51bGFyIGBhZGRgIG9yIGByZW1vdmVgIGV2ZW50cy4gRmlyZXMgYHJlc2V0YCB3aGVuIGZpbmlzaGVkLlxuICAgIC8vIFVzZWZ1bCBmb3IgYnVsayBvcGVyYXRpb25zIGFuZCBvcHRpbWl6YXRpb25zLlxuICAgIHJlc2V0OiBmdW5jdGlvbiAobW9kZWxzLCBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSB0aGlzLm1vZGVscy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlUmVmZXJlbmNlKHRoaXMubW9kZWxzW2ldLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLnByZXZpb3VzTW9kZWxzID0gdGhpcy5tb2RlbHM7XG4gICAgICAgIHRoaXMuX3Jlc2V0KCk7XG4gICAgICAgIG1vZGVscyA9IHRoaXMuYWRkKG1vZGVscywgYXNzaWduKHtzaWxlbnQ6IHRydWV9LCBvcHRpb25zKSk7XG4gICAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHRoaXMudHJpZ2dlcigncmVzZXQnLCB0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIG1vZGVscztcbiAgICB9LFxuXG4gICAgc29ydDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICBpZiAoIXRoaXMuY29tcGFyYXRvcikgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc29ydCBhIHNldCB3aXRob3V0IGEgY29tcGFyYXRvcicpO1xuICAgICAgICBvcHRpb25zIHx8IChvcHRpb25zID0ge30pO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb21wYXJhdG9yID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5tb2RlbHMuc29ydChmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgICAgICBpZiAobGVmdC5nZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGxlZnQuZ2V0KHNlbGYuY29tcGFyYXRvcik7XG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gcmlnaHQuZ2V0KHNlbGYuY29tcGFyYXRvcik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGxlZnRbc2VsZi5jb21wYXJhdG9yXTtcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSByaWdodFtzZWxmLmNvbXBhcmF0b3JdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobGVmdCA+IHJpZ2h0IHx8IGxlZnQgPT09IHZvaWQgMCkgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgaWYgKGxlZnQgPCByaWdodCB8fCByaWdodCA9PT0gdm9pZCAwKSByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbXBhcmF0b3IubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVscy5zb3J0KGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgIGxlZnQgPSBzZWxmLmNvbXBhcmF0b3IobGVmdCk7XG4gICAgICAgICAgICAgICAgcmlnaHQgPSBzZWxmLmNvbXBhcmF0b3IocmlnaHQpO1xuICAgICAgICAgICAgICAgIGlmIChsZWZ0ID4gcmlnaHQgfHwgbGVmdCA9PT0gdm9pZCAwKSByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICBpZiAobGVmdCA8IHJpZ2h0IHx8IHJpZ2h0ID09PSB2b2lkIDApIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tb2RlbHMuc29ydChiaW5kKHRoaXMuY29tcGFyYXRvcix0aGlzKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB0aGlzLnRyaWdnZXIoJ3NvcnQnLCB0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8vIFByaXZhdGUgbWV0aG9kIHRvIHJlc2V0IGFsbCBpbnRlcm5hbCBzdGF0ZS4gQ2FsbGVkIHdoZW4gdGhlIGNvbGxlY3Rpb25cbiAgICAvLyBpcyBmaXJzdCBpbml0aWFsaXplZCBvciByZXNldC5cbiAgICBfcmVzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGxpc3QgPSBzbGljZS5jYWxsKHRoaXMuaW5kZXhlcyB8fCBbXSk7XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgbGlzdC5wdXNoKHRoaXMubWFpbkluZGV4KTtcbiAgICAgICAgbGlzdC5wdXNoKCdjaWQnKTtcbiAgICAgICAgdmFyIGwgPSBsaXN0Lmxlbmd0aDtcbiAgICAgICAgdGhpcy5tb2RlbHMgPSBbXTtcbiAgICAgICAgdGhpcy5faW5kZXhlcyA9IHt9O1xuICAgICAgICBmb3IgKDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5faW5kZXhlc1tsaXN0W2ldXSA9IHt9O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIF9wcmVwYXJlTW9kZWw6IGZ1bmN0aW9uIChhdHRycywgb3B0aW9ucykge1xuICAgICAgICAvLyBpZiB3ZSBoYXZlbid0IGRlZmluZWQgYSBjb25zdHJ1Y3Rvciwgc2tpcCB0aGlzXG4gICAgICAgIGlmICghdGhpcy5tb2RlbCkgcmV0dXJuIGF0dHJzO1xuXG4gICAgICAgIGlmICh0aGlzLmlzTW9kZWwoYXR0cnMpKSB7XG4gICAgICAgICAgICBpZiAoIWF0dHJzLmNvbGxlY3Rpb24pIGF0dHJzLmNvbGxlY3Rpb24gPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIGF0dHJzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgPyBhc3NpZ24oe30sIG9wdGlvbnMpIDoge307XG4gICAgICAgICAgICBvcHRpb25zLmNvbGxlY3Rpb24gPSB0aGlzO1xuICAgICAgICAgICAgdmFyIG1vZGVsID0gbmV3IHRoaXMubW9kZWwoYXR0cnMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKCFtb2RlbC52YWxpZGF0aW9uRXJyb3IpIHJldHVybiBtb2RlbDtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcignaW52YWxpZCcsIHRoaXMsIG1vZGVsLnZhbGlkYXRpb25FcnJvciwgb3B0aW9ucyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX2RlSW5kZXg6IGZ1bmN0aW9uIChtb2RlbCwgYXR0cmlidXRlLCB2YWx1ZSkge1xuICAgICAgICB2YXIgaW5kZXhWYWw7XG4gICAgICAgIGlmIChhdHRyaWJ1dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHVuZGVmaW5lZCA9PT0gdGhpcy5faW5kZXhlc1thdHRyaWJ1dGVdKSB0aHJvdyBuZXcgRXJyb3IoJ0dpdmVuIGF0dHJpYnV0ZSBpcyBub3QgYW4gaW5kZXgnKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9pbmRleGVzW2F0dHJpYnV0ZV1bdmFsdWVdO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdCBhIHNwZWNpZmljIGF0dHJpYnV0ZVxuICAgICAgICBmb3IgKHZhciBpbmRleEF0dHIgaW4gdGhpcy5faW5kZXhlcykge1xuICAgICAgICAgICAgaW5kZXhWYWwgPSBtb2RlbC5oYXNPd25Qcm9wZXJ0eShpbmRleEF0dHIpID8gbW9kZWxbaW5kZXhBdHRyXSA6IChtb2RlbC5nZXQgJiYgbW9kZWwuZ2V0KGluZGV4QXR0cikpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2luZGV4ZXNbaW5kZXhBdHRyXVtpbmRleFZhbF07XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX2luZGV4OiBmdW5jdGlvbiAobW9kZWwsIGF0dHJpYnV0ZSkge1xuICAgICAgICB2YXIgaW5kZXhWYWw7XG4gICAgICAgIGlmIChhdHRyaWJ1dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHVuZGVmaW5lZCA9PT0gdGhpcy5faW5kZXhlc1thdHRyaWJ1dGVdKSB0aHJvdyBuZXcgRXJyb3IoJ0dpdmVuIGF0dHJpYnV0ZSBpcyBub3QgYW4gaW5kZXgnKTtcbiAgICAgICAgICAgIGluZGV4VmFsID0gbW9kZWxbYXR0cmlidXRlXSB8fCAobW9kZWwuZ2V0ICYmIG1vZGVsLmdldChhdHRyaWJ1dGUpKTtcbiAgICAgICAgICAgIGlmIChpbmRleFZhbCkgdGhpcy5faW5kZXhlc1thdHRyaWJ1dGVdW2luZGV4VmFsXSA9IG1vZGVsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdCBhIHNwZWNpZmljIGF0dHJpYnV0ZVxuICAgICAgICBmb3IgKHZhciBpbmRleEF0dHIgaW4gdGhpcy5faW5kZXhlcykge1xuICAgICAgICAgICAgaW5kZXhWYWwgPSBtb2RlbC5oYXNPd25Qcm9wZXJ0eShpbmRleEF0dHIpID8gbW9kZWxbaW5kZXhBdHRyXSA6IChtb2RlbC5nZXQgJiYgbW9kZWwuZ2V0KGluZGV4QXR0cikpO1xuICAgICAgICAgICAgaWYgKGluZGV4VmFsICE9IG51bGwpIHRoaXMuX2luZGV4ZXNbaW5kZXhBdHRyXVtpbmRleFZhbF0gPSBtb2RlbDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBfaXNEZXJpdmVkSW5kZXg6IGZ1bmN0aW9uKHByb3RvKSB7XG4gICAgICAgIGlmICghcHJvdG8gfHwgdHlwZW9mIHByb3RvLl9kZXJpdmVkICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm90by5fZGVyaXZlZCkuaW5kZXhPZih0aGlzLm1haW5JbmRleCkgPj0gMDtcbiAgICB9LFxuXG4gICAgLy8gSW50ZXJuYWwgbWV0aG9kIHRvIGNyZWF0ZSBhIG1vZGVsJ3MgdGllcyB0byBhIGNvbGxlY3Rpb24uXG4gICAgX2FkZFJlZmVyZW5jZTogZnVuY3Rpb24gKG1vZGVsLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX2luZGV4KG1vZGVsKTtcbiAgICAgICAgaWYgKCFtb2RlbC5jb2xsZWN0aW9uKSBtb2RlbC5jb2xsZWN0aW9uID0gdGhpcztcbiAgICAgICAgaWYgKG1vZGVsLm9uKSBtb2RlbC5vbignYWxsJywgdGhpcy5fb25Nb2RlbEV2ZW50LCB0aGlzKTtcbiAgICB9LFxuXG4gICAgICAgIC8vIEludGVybmFsIG1ldGhvZCB0byBzZXZlciBhIG1vZGVsJ3MgdGllcyB0byBhIGNvbGxlY3Rpb24uXG4gICAgX3JlbW92ZVJlZmVyZW5jZTogZnVuY3Rpb24gKG1vZGVsLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICh0aGlzID09PSBtb2RlbC5jb2xsZWN0aW9uKSBkZWxldGUgbW9kZWwuY29sbGVjdGlvbjtcbiAgICAgICAgdGhpcy5fZGVJbmRleChtb2RlbCk7XG4gICAgICAgIGlmIChtb2RlbC5vZmYpIG1vZGVsLm9mZignYWxsJywgdGhpcy5fb25Nb2RlbEV2ZW50LCB0aGlzKTtcbiAgICB9LFxuXG4gICAgX29uTW9kZWxFdmVudDogZnVuY3Rpb24gKGV2ZW50LCBtb2RlbCwgY29sbGVjdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB2YXIgZXZlbnROYW1lID0gZXZlbnQuc3BsaXQoJzonKVswXTtcbiAgICAgICAgdmFyIGF0dHJpYnV0ZSA9IGV2ZW50LnNwbGl0KCc6JylbMV07XG5cbiAgICAgICAgaWYgKChldmVudE5hbWUgPT09ICdhZGQnIHx8IGV2ZW50TmFtZSA9PT0gJ3JlbW92ZScpICYmIGNvbGxlY3Rpb24gIT09IHRoaXMpIHJldHVybjtcbiAgICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2Rlc3Ryb3knKSB0aGlzLnJlbW92ZShtb2RlbCwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChtb2RlbCAmJiBldmVudE5hbWUgPT09ICdjaGFuZ2UnICYmIGF0dHJpYnV0ZSAmJiB0aGlzLl9pbmRleGVzW2F0dHJpYnV0ZV0pIHtcbiAgICAgICAgICAgIHRoaXMuX2RlSW5kZXgobW9kZWwsIGF0dHJpYnV0ZSwgbW9kZWwucHJldmlvdXNBdHRyaWJ1dGVzKClbYXR0cmlidXRlXSk7XG4gICAgICAgICAgICB0aGlzLl9pbmRleChtb2RlbCwgYXR0cmlidXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRyaWdnZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sbGVjdGlvbi5wcm90b3R5cGUsIHtcbiAgICBsZW5ndGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlbHMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBpc0NvbGxlY3Rpb246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG52YXIgYXJyYXlNZXRob2RzID0gW1xuICAgICdpbmRleE9mJyxcbiAgICAnbGFzdEluZGV4T2YnLFxuICAgICdldmVyeScsXG4gICAgJ3NvbWUnLFxuICAgICdmb3JFYWNoJyxcbiAgICAnbWFwJyxcbiAgICAnZmlsdGVyJyxcbiAgICAncmVkdWNlJyxcbiAgICAncmVkdWNlUmlnaHQnXG5dO1xuXG5hcnJheU1ldGhvZHMuZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgQ29sbGVjdGlvbi5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWxzW21ldGhvZF0uYXBwbHkodGhpcy5tb2RlbHMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbn0pO1xuXG4vLyBhbGlhcyBlYWNoL2ZvckVhY2ggZm9yIG1heGltdW0gY29tcGF0aWJpbGl0eVxuQ29sbGVjdGlvbi5wcm90b3R5cGUuZWFjaCA9IENvbGxlY3Rpb24ucHJvdG90eXBlLmZvckVhY2g7XG5cbkNvbGxlY3Rpb24uZXh0ZW5kID0gY2xhc3NFeHRlbmQ7XG5cbm1vZHVsZS5leHBvcnRzID0gQ29sbGVjdGlvbjtcbiIsIi8qJEFNUEVSU0FORF9WRVJTSU9OKi9cbnZhciBTdG9yZSA9IHJlcXVpcmUoJ2tleS10cmVlLXN0b3JlJyk7XG52YXIgZG9tID0gcmVxdWlyZSgnYW1wZXJzYW5kLWRvbScpO1xudmFyIG1hdGNoZXNTZWxlY3RvciA9IHJlcXVpcmUoJ21hdGNoZXMtc2VsZWN0b3InKTtcbnZhciBwYXJ0aWFsID0gcmVxdWlyZSgnbG9kYXNoL3BhcnRpYWwnKTtcbnZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcblxuZnVuY3Rpb24gZ2V0TWF0Y2hlcyhlbCwgc2VsZWN0b3IsIGZpcnN0T25seSkge1xuICAgIGlmIChzZWxlY3RvciA9PT0gJycpIHJldHVybiBbZWxdO1xuICAgIHZhciBtYXRjaGVzID0gW107XG4gICAgaWYgKCFzZWxlY3RvcikgcmV0dXJuIG1hdGNoZXM7XG4gICAgaWYgKGZpcnN0T25seSkge1xuICAgICAgICBpZiAobWF0Y2hlc1NlbGVjdG9yKGVsLCBzZWxlY3RvcikpIHJldHVybiBbZWxdO1xuICAgICAgICByZXR1cm4gZWwucXVlcnlTZWxlY3RvcihzZWxlY3RvcikgPyBbZWwucXVlcnlTZWxlY3RvcihzZWxlY3RvcildIDogW107XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG1hdGNoZXNTZWxlY3RvcihlbCwgc2VsZWN0b3IpKSBtYXRjaGVzLnB1c2goZWwpO1xuICAgICAgICByZXR1cm4gbWF0Y2hlcy5jb25jYXQoc2xpY2UuY2FsbChlbC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZXMoZWwsIGF0dHJzKSB7XG4gICAgZm9yICh2YXIgbmFtZSBpbiBhdHRycykge1xuICAgICAgICBkb20uc2V0QXR0cmlidXRlKGVsLCBuYW1lLCBhdHRyc1tuYW1lXSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVBdHRyaWJ1dGVzKGVsLCBhdHRycykge1xuICAgIGZvciAodmFyIG5hbWUgaW4gYXR0cnMpIHtcbiAgICAgICAgZG9tLnJlbW92ZUF0dHJpYnV0ZShlbCwgbmFtZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBtYWtlQXJyYXkodmFsKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsKSA/IHZhbCA6IFt2YWxdO1xufVxuXG5mdW5jdGlvbiBzd2l0Y2hIYW5kbGVyKGJpbmRpbmcsIGVsLCB2YWx1ZSkge1xuICAgIC8vIHRoZSBlbGVtZW50IHNlbGVjdG9yIHRvIHNob3dcbiAgICB2YXIgc2hvd1ZhbHVlID0gYmluZGluZy5jYXNlc1t2YWx1ZV07XG5cbiAgICB2YXIgZmlyc3RNYXRjaE9ubHkgPSBiaW5kaW5nLmZpcnN0TWF0Y2hPbmx5O1xuXG4gICAgLy8gaGlkZSBhbGwgdGhlIG90aGVyIGVsZW1lbnRzIHdpdGggYSBkaWZmZXJlbnQgdmFsdWVcbiAgICBmb3IgKHZhciBpdGVtIGluIGJpbmRpbmcuY2FzZXMpIHtcbiAgICAgICAgdmFyIGN1clZhbHVlID0gYmluZGluZy5jYXNlc1tpdGVtXTtcblxuICAgICAgICBpZiAodmFsdWUgIT09IGl0ZW0gJiYgY3VyVmFsdWUgIT09IHNob3dWYWx1ZSkge1xuICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgY3VyVmFsdWUsIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIGRvbS5oaWRlKG1hdGNoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldE1hdGNoZXMoZWwsIHNob3dWYWx1ZSwgZmlyc3RNYXRjaE9ubHkpLmZvckVhY2goZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgIGRvbS5zaG93KG1hdGNoKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0b3IoYmluZGluZykge1xuICAgIGlmICh0eXBlb2YgYmluZGluZy5zZWxlY3RvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGJpbmRpbmcuc2VsZWN0b3I7XG4gICAgfSBlbHNlIGlmIChiaW5kaW5nLmhvb2spIHtcbiAgICAgICAgcmV0dXJuICdbZGF0YS1ob29rfj1cIicgKyBiaW5kaW5nLmhvb2sgKyAnXCJdJztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRCaW5kaW5nRnVuYyhiaW5kaW5nLCBjb250ZXh0KSB7XG4gICAgdmFyIHR5cGUgPSBiaW5kaW5nLnR5cGUgfHwgJ3RleHQnO1xuICAgIHZhciBpc0N1c3RvbUJpbmRpbmcgPSB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJztcbiAgICB2YXIgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihiaW5kaW5nKTtcbiAgICB2YXIgZmlyc3RNYXRjaE9ubHkgPSBiaW5kaW5nLmZpcnN0TWF0Y2hPbmx5O1xuICAgIHZhciB5ZXMgPSBiaW5kaW5nLnllcztcbiAgICB2YXIgbm8gPSBiaW5kaW5nLm5vO1xuICAgIHZhciBoYXNZZXNObyA9ICEhKHllcyB8fCBubyk7XG5cbiAgICAvLyBzdG9yYWdlIHZhcmlhYmxlIGZvciBwcmV2aW91cyBpZiByZWxldmFudFxuICAgIHZhciBwcmV2aW91c1ZhbHVlO1xuXG4gICAgaWYgKGlzQ3VzdG9tQmluZGluZykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVsLCB2YWx1ZSkge1xuICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgc2VsZWN0b3IsIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHR5cGUuY2FsbChjb250ZXh0LCBtYXRjaCwgdmFsdWUsIHByZXZpb3VzVmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcmV2aW91c1ZhbHVlID0gdmFsdWU7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlbCwgdmFsdWUpIHtcbiAgICAgICAgICAgIGdldE1hdGNoZXMoZWwsIHNlbGVjdG9yLCBmaXJzdE1hdGNoT25seSkuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBkb20udGV4dChtYXRjaCwgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnY2xhc3MnKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWwsIHZhbHVlKSB7XG4gICAgICAgICAgICBnZXRNYXRjaGVzKGVsLCBzZWxlY3RvciwgZmlyc3RNYXRjaE9ubHkpLmZvckVhY2goZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgZG9tLnN3aXRjaENsYXNzKG1hdGNoLCBwcmV2aW91c1ZhbHVlLCB2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHByZXZpb3VzVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdhdHRyaWJ1dGUnKSB7XG4gICAgICAgIGlmICghYmluZGluZy5uYW1lKSB0aHJvdyBFcnJvcignYXR0cmlidXRlIGJpbmRpbmdzIG11c3QgaGF2ZSBhIFwibmFtZVwiJyk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWwsIHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgbmFtZXMgPSBtYWtlQXJyYXkoYmluZGluZy5uYW1lKTtcbiAgICAgICAgICAgIGdldE1hdGNoZXMoZWwsIHNlbGVjdG9yLCBmaXJzdE1hdGNoT25seSkuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBuYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbS5zZXRBdHRyaWJ1dGUobWF0Y2gsIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcHJldmlvdXNWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3ZhbHVlJykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVsLCB2YWx1ZSkge1xuICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgc2VsZWN0b3IsIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIGlmICghdmFsdWUgJiYgdmFsdWUgIT09IDApIHZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgLy8gb25seSBhcHBseSBiaW5kaW5ncyBpZiBlbGVtZW50IGlzIG5vdCBjdXJyZW50bHkgZm9jdXNlZFxuICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBtYXRjaCkgbWF0Y2gudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcHJldmlvdXNWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2Jvb2xlYW5DbGFzcycpIHtcbiAgICAgICAgLy8gaWYgdGhlcmUncyBhIGBub2AgY2FzZSB0aGlzIGlzIGFjdHVhbGx5IGEgc3dpdGNoXG4gICAgICAgIGlmIChoYXNZZXNObykge1xuICAgICAgICAgICAgeWVzID0gbWFrZUFycmF5KHllcyB8fCAnJyk7XG4gICAgICAgICAgICBubyA9IG1ha2VBcnJheShubyB8fCAnJyk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVsLCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBwcmV2Q2xhc3MgPSB2YWx1ZSA/IG5vIDogeWVzO1xuICAgICAgICAgICAgICAgIHZhciBuZXdDbGFzcyA9IHZhbHVlID8geWVzIDogbm87XG4gICAgICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgc2VsZWN0b3IsIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBwcmV2Q2xhc3MuZm9yRWFjaChmdW5jdGlvbiAocGMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbS5yZW1vdmVDbGFzcyhtYXRjaCwgcGMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q2xhc3MuZm9yRWFjaChmdW5jdGlvbiAobmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbS5hZGRDbGFzcyhtYXRjaCwgbmMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVsLCB2YWx1ZSwga2V5TmFtZSkge1xuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gbWFrZUFycmF5KGJpbmRpbmcubmFtZSB8fCBrZXlOYW1lKTtcbiAgICAgICAgICAgICAgICB2YXIgaW52ZXJ0ID0gKGJpbmRpbmcuaW52ZXJ0IHx8IGZhbHNlKTtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IChpbnZlcnQgPyAodmFsdWUgPyBmYWxzZSA6IHRydWUpIDogdmFsdWUpO1xuICAgICAgICAgICAgICAgIGdldE1hdGNoZXMoZWwsIHNlbGVjdG9yLCBmaXJzdE1hdGNoT25seSkuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbVt2YWx1ZSA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnXShtYXRjaCwgY2xhc3NOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnYm9vbGVhbkF0dHJpYnV0ZScpIHtcbiAgICAgICAgLy8gaWYgdGhlcmUgYXJlIGB5ZXNgIGFuZCBgbm9gIHNlbGVjdG9ycywgdGhpcyBzd2FwcyBiZXR3ZWVuIHRoZW1cbiAgICAgICAgaWYgKGhhc1llc05vKSB7XG4gICAgICAgICAgICB5ZXMgPSBtYWtlQXJyYXkoeWVzIHx8ICcnKTtcbiAgICAgICAgICAgIG5vID0gbWFrZUFycmF5KG5vIHx8ICcnKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWwsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHByZXZBdHRyaWJ1dGUgPSB2YWx1ZSA/IG5vIDogeWVzO1xuICAgICAgICAgICAgICAgIHZhciBuZXdBdHRyaWJ1dGUgPSB2YWx1ZSA/IHllcyA6IG5vO1xuICAgICAgICAgICAgICAgIGdldE1hdGNoZXMoZWwsIHNlbGVjdG9yLCBmaXJzdE1hdGNoT25seSkuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldkF0dHJpYnV0ZS5mb3JFYWNoKGZ1bmN0aW9uIChwYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tLnJlbW92ZUF0dHJpYnV0ZShtYXRjaCwgcGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgbmV3QXR0cmlidXRlLmZvckVhY2goZnVuY3Rpb24gKG5hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb20uYWRkQXR0cmlidXRlKG1hdGNoLCBuYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWwsIHZhbHVlLCBrZXlOYW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBtYWtlQXJyYXkoYmluZGluZy5uYW1lIHx8IGtleU5hbWUpO1xuICAgICAgICAgICAgICAgIHZhciBpbnZlcnQgPSAoYmluZGluZy5pbnZlcnQgfHwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gKGludmVydCA/ICh2YWx1ZSA/IGZhbHNlIDogdHJ1ZSkgOiB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgc2VsZWN0b3IsIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBuYW1lLmZvckVhY2goZnVuY3Rpb24gKGF0dHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbVt2YWx1ZSA/ICdhZGRBdHRyaWJ1dGUnIDogJ3JlbW92ZUF0dHJpYnV0ZSddKG1hdGNoLCBhdHRyKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAndG9nZ2xlJykge1xuICAgICAgICB2YXIgbW9kZSA9IChiaW5kaW5nLm1vZGUgfHwgJ2Rpc3BsYXknKTtcbiAgICAgICAgdmFyIGludmVydCA9IChiaW5kaW5nLmludmVydCB8fCBmYWxzZSk7XG4gICAgICAgIC8vIHRoaXMgZG9lc24ndCByZXF1aXJlIGEgc2VsZWN0b3Igc2luY2Ugd2UgY2FuIHBhc3MgeWVzL25vIHNlbGVjdG9yc1xuICAgICAgICBpZiAoaGFzWWVzTm8pIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWwsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgeWVzLCBmaXJzdE1hdGNoT25seSkuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9tW3ZhbHVlID8gJ3Nob3cnIDogJ2hpZGUnXShtYXRjaCwgbW9kZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgbm8sIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBkb21bdmFsdWUgPyAnaGlkZScgOiAnc2hvdyddKG1hdGNoLCBtb2RlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVsLCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gKGludmVydCA/ICh2YWx1ZSA/IGZhbHNlIDogdHJ1ZSkgOiB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgc2VsZWN0b3IsIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBkb21bdmFsdWUgPyAnc2hvdycgOiAnaGlkZSddKG1hdGNoLCBtb2RlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzd2l0Y2gnKSB7XG4gICAgICAgIGlmICghYmluZGluZy5jYXNlcykgdGhyb3cgRXJyb3IoJ3N3aXRjaCBiaW5kaW5ncyBtdXN0IGhhdmUgXCJjYXNlc1wiJyk7XG4gICAgICAgIHJldHVybiBwYXJ0aWFsKHN3aXRjaEhhbmRsZXIsIGJpbmRpbmcpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2lubmVySFRNTCcpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlbCwgdmFsdWUpIHtcbiAgICAgICAgICAgIGdldE1hdGNoZXMoZWwsIHNlbGVjdG9yLCBmaXJzdE1hdGNoT25seSkuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBkb20uaHRtbChtYXRjaCwgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnc3dpdGNoQ2xhc3MnKSB7XG4gICAgICAgIGlmICghYmluZGluZy5jYXNlcykgdGhyb3cgRXJyb3IoJ3N3aXRjaENsYXNzIGJpbmRpbmdzIG11c3QgaGF2ZSBcImNhc2VzXCInKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlbCwgdmFsdWUsIGtleU5hbWUpIHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gbWFrZUFycmF5KGJpbmRpbmcubmFtZSB8fCBrZXlOYW1lKTtcbiAgICAgICAgICAgIGZvciAodmFyIGl0ZW0gaW4gYmluZGluZy5jYXNlcykge1xuICAgICAgICAgICAgICAgIGdldE1hdGNoZXMoZWwsIGJpbmRpbmcuY2FzZXNbaXRlbV0sIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBuYW1lLmZvckVhY2goZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9tW3ZhbHVlID09PSBpdGVtID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyddKG1hdGNoLCBjbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzd2l0Y2hBdHRyaWJ1dGUnKSB7XG4gICAgICAgIGlmICghYmluZGluZy5jYXNlcykgdGhyb3cgRXJyb3IoJ3N3aXRjaEF0dHJpYnV0ZSBiaW5kaW5ncyBtdXN0IGhhdmUgXCJjYXNlc1wiJyk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWwsIHZhbHVlLCBrZXlOYW1lKSB7XG4gICAgICAgICAgICBnZXRNYXRjaGVzKGVsLCBzZWxlY3RvciwgZmlyc3RNYXRjaE9ubHkpLmZvckVhY2goZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQXR0cmlidXRlcyhtYXRjaCwgcHJldmlvdXNWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlIGluIGJpbmRpbmcuY2FzZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJzID0gYmluZGluZy5jYXNlc1t2YWx1ZV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXR0cnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRycyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnNbYmluZGluZy5uYW1lIHx8IGtleU5hbWVdID0gYmluZGluZy5jYXNlc1t2YWx1ZV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2V0QXR0cmlidXRlcyhtYXRjaCwgYXR0cnMpO1xuXG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsdWUgPSBhdHRycztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIHN1Y2ggYmluZGluZyB0eXBlOiAnICsgdHlwZSk7XG4gICAgfVxufVxuXG4vLyByZXR1cm5zIGEga2V5LXRyZWUtc3RvcmUgb2YgZnVuY3Rpb25zXG4vLyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIGFueSBlbGVtZW50L21vZGVsLlxuXG4vLyBhbGwgcmVzdWx0aW5nIGZ1bmN0aW9ucyBzaG91bGQgYmUgY2FsbGVkXG4vLyBsaWtlIGZ1bmMoZWwsIHZhbHVlLCBsYXN0S2V5TmFtZSlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpbmRpbmdzLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0b3JlID0gbmV3IFN0b3JlKCk7XG4gICAgdmFyIGtleSwgY3VycmVudDtcblxuICAgIGZvciAoa2V5IGluIGJpbmRpbmdzKSB7XG4gICAgICAgIGN1cnJlbnQgPSBiaW5kaW5nc1trZXldO1xuICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBzdG9yZS5hZGQoa2V5LCBnZXRCaW5kaW5nRnVuYyh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiBjdXJyZW50XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5mb3JFYWNoKSB7XG4gICAgICAgICAgICBjdXJyZW50LmZvckVhY2goZnVuY3Rpb24gKGJpbmRpbmcpIHtcbiAgICAgICAgICAgICAgICBzdG9yZS5hZGQoa2V5LCBnZXRCaW5kaW5nRnVuYyhiaW5kaW5nLCBjb250ZXh0KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0b3JlLmFkZChrZXksIGdldEJpbmRpbmdGdW5jKGN1cnJlbnQsIGNvbnRleHQpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdG9yZTtcbn07XG4iLCIvKiRBTVBFUlNBTkRfVkVSU0lPTiovXG52YXIgZG9tID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgdGV4dDogZnVuY3Rpb24gKGVsLCB2YWwpIHtcbiAgICAgICAgZWwudGV4dENvbnRlbnQgPSBnZXRTdHJpbmcodmFsKTtcbiAgICB9LFxuICAgIC8vIG9wdGltaXplIGlmIHdlIGhhdmUgY2xhc3NMaXN0XG4gICAgYWRkQ2xhc3M6IGZ1bmN0aW9uIChlbCwgY2xzKSB7XG4gICAgICAgIGNscyA9IGdldFN0cmluZyhjbHMpO1xuICAgICAgICBpZiAoIWNscykgcmV0dXJuO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjbHMpKSB7XG4gICAgICAgICAgICBjbHMuZm9yRWFjaChmdW5jdGlvbihjKSB7XG4gICAgICAgICAgICAgICAgZG9tLmFkZENsYXNzKGVsLCBjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGVsLmNsYXNzTGlzdCkge1xuICAgICAgICAgICAgZWwuY2xhc3NMaXN0LmFkZChjbHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNDbGFzcyhlbCwgY2xzKSkge1xuICAgICAgICAgICAgICAgIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgZWwuY2xhc3NMaXN0LmFkZChjbHMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsLmNsYXNzTmFtZSArPSAnICcgKyBjbHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICByZW1vdmVDbGFzczogZnVuY3Rpb24gKGVsLCBjbHMpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2xzKSkge1xuICAgICAgICAgICAgY2xzLmZvckVhY2goZnVuY3Rpb24oYykge1xuICAgICAgICAgICAgICAgIGRvbS5yZW1vdmVDbGFzcyhlbCwgYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICAgICAgICAgIGNscyA9IGdldFN0cmluZyhjbHMpO1xuICAgICAgICAgICAgaWYgKGNscykgZWwuY2xhc3NMaXN0LnJlbW92ZShjbHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbWF5IGJlIGZhc3RlciB0byBub3QgZWRpdCB1bmxlc3Mgd2Uga25vdyB3ZSBoYXZlIGl0P1xuICAgICAgICAgICAgZWwuY2xhc3NOYW1lID0gZWwuY2xhc3NOYW1lLnJlcGxhY2UobmV3IFJlZ0V4cCgnKF58XFxcXGIpJyArIGNscy5zcGxpdCgnICcpLmpvaW4oJ3wnKSArICcoXFxcXGJ8JCknLCAnZ2knKSwgJyAnKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaGFzQ2xhc3M6IGhhc0NsYXNzLFxuICAgIHN3aXRjaENsYXNzOiBmdW5jdGlvbiAoZWwsIHByZXZDbHMsIG5ld0Nscykge1xuICAgICAgICBpZiAocHJldkNscykgdGhpcy5yZW1vdmVDbGFzcyhlbCwgcHJldkNscyk7XG4gICAgICAgIHRoaXMuYWRkQ2xhc3MoZWwsIG5ld0Nscyk7XG4gICAgfSxcbiAgICAvLyBtYWtlcyBzdXJlIGF0dHJpYnV0ZSAod2l0aCBubyBjb250ZW50KSBpcyBhZGRlZFxuICAgIC8vIGlmIGV4aXN0cyBpdCB3aWxsIGJlIGNsZWFyZWQgb2YgY29udGVudFxuICAgIGFkZEF0dHJpYnV0ZTogZnVuY3Rpb24gKGVsLCBhdHRyKSB7XG4gICAgICAgIC8vIHNldHRpbmcgdG8gZW1wdHkgc3RyaW5nIGRvZXMgc2FtZVxuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoYXR0ciwgJycpO1xuICAgICAgICAvLyBTb21lIGJyb3dzZXJzIHdvbid0IHVwZGF0ZSBVSSBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzIHVubGVzcyB5b3VcbiAgICAgICAgLy8gc2V0IGl0IGRpcmVjdGx5LiBTbyB3ZSBkbyBib3RoXG4gICAgICAgIGlmIChoYXNCb29sZWFuUHJvcGVydHkoZWwsIGF0dHIpKSBlbFthdHRyXSA9IHRydWU7XG4gICAgfSxcbiAgICAvLyBjb21wbGV0ZWx5IHJlbW92ZXMgYXR0cmlidXRlXG4gICAgcmVtb3ZlQXR0cmlidXRlOiBmdW5jdGlvbiAoZWwsIGF0dHIpIHtcbiAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGF0dHIpO1xuICAgICAgICBpZiAoaGFzQm9vbGVhblByb3BlcnR5KGVsLCBhdHRyKSkgZWxbYXR0cl0gPSBmYWxzZTtcbiAgICB9LFxuICAgIC8vIHNldHMgYXR0cmlidXRlIHRvIHN0cmluZyB2YWx1ZSBnaXZlbiwgY2xlYXJpbmcgYW55IGN1cnJlbnQgdmFsdWVcbiAgICBzZXRBdHRyaWJ1dGU6IGZ1bmN0aW9uIChlbCwgYXR0ciwgdmFsdWUpIHtcbiAgICAgICAgZWwuc2V0QXR0cmlidXRlKGF0dHIsIGdldFN0cmluZyh2YWx1ZSkpO1xuICAgIH0sXG4gICAgZ2V0QXR0cmlidXRlOiBmdW5jdGlvbiAoZWwsIGF0dHIpIHtcbiAgICAgICAgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShhdHRyKTtcbiAgICB9LFxuICAgIGhhc0F0dHJpYnV0ZTogZnVuY3Rpb24gKGVsLCBhdHRyKSB7XG4gICAgICAgIHJldHVybiBlbC5oYXNBdHRyaWJ1dGUoYXR0cik7XG4gICAgfSxcbiAgICBoaWRlOiBmdW5jdGlvbiAoZWwsIG1vZGUpIHtcbiAgICAgICAgaWYgKCFtb2RlKSBtb2RlID0gJ2Rpc3BsYXknO1xuICAgICAgICBpZiAoIWlzSGlkZGVuKGVsKSkge1xuICAgICAgICAgICAgc3RvcmVEaXNwbGF5U3R5bGUoZWwsIG1vZGUpO1xuICAgICAgICAgICAgaGlkZShlbCwgbW9kZSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8vIHNob3cgZWxlbWVudFxuICAgIHNob3c6IGZ1bmN0aW9uIChlbCwgbW9kZSkge1xuICAgICAgICBpZiAoIW1vZGUpIG1vZGUgPSAnZGlzcGxheSc7XG4gICAgICAgIHNob3coZWwsIG1vZGUpO1xuICAgIH0sXG4gICAgdG9nZ2xlOiBmdW5jdGlvbiAoZWwsIG1vZGUpIHtcbiAgICAgICAgaWYgKCFpc0hpZGRlbihlbCkpIHtcbiAgICAgICAgICAgIGRvbS5oaWRlKGVsLCBtb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvbS5zaG93KGVsLCBtb2RlKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaHRtbDogZnVuY3Rpb24gKGVsLCBjb250ZW50KSB7XG4gICAgICAgIGVsLmlubmVySFRNTCA9IGNvbnRlbnQ7XG4gICAgfVxufTtcblxuLy8gaGVscGVyc1xuZnVuY3Rpb24gZ2V0U3RyaW5nKHZhbCkge1xuICAgIGlmICghdmFsICYmIHZhbCAhPT0gMCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGhhc0NsYXNzKGVsLCBjbHMpIHtcbiAgICBpZiAoZWwuY2xhc3NMaXN0KSB7XG4gICAgICAgIHJldHVybiBlbC5jbGFzc0xpc3QuY29udGFpbnMoY2xzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCgnKF58ICknICsgY2xzICsgJyggfCQpJywgJ2dpJykudGVzdChlbC5jbGFzc05hbWUpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaGFzQm9vbGVhblByb3BlcnR5KGVsLCBwcm9wKSB7XG4gICAgdmFyIHZhbCA9IGVsW3Byb3BdO1xuICAgIHJldHVybiBwcm9wIGluIGVsICYmICh2YWwgPT09IHRydWUgfHwgdmFsID09PSBmYWxzZSk7XG59XG5cbmZ1bmN0aW9uIGlzSGlkZGVuIChlbCkge1xuICAgIHJldHVybiBkb20uZ2V0QXR0cmlidXRlKGVsLCAnZGF0YS1hbmRkb20taGlkZGVuJykgPT09ICd0cnVlJztcbn1cblxuZnVuY3Rpb24gc3RvcmVEaXNwbGF5U3R5bGUgKGVsLCBtb2RlKSB7XG4gICAgZG9tLnNldEF0dHJpYnV0ZShlbCwgJ2RhdGEtYW5kZG9tLScgKyBtb2RlLCBlbC5zdHlsZVttb2RlXSk7XG59XG5cbmZ1bmN0aW9uIHNob3cgKGVsLCBtb2RlKSB7XG4gICAgZWwuc3R5bGVbbW9kZV0gPSBkb20uZ2V0QXR0cmlidXRlKGVsLCAnZGF0YS1hbmRkb20tJyArIG1vZGUpIHx8ICcnO1xuICAgIGRvbS5yZW1vdmVBdHRyaWJ1dGUoZWwsICdkYXRhLWFuZGRvbS1oaWRkZW4nKTtcbn1cblxuZnVuY3Rpb24gaGlkZSAoZWwsIG1vZGUpIHtcbiAgICBkb20uc2V0QXR0cmlidXRlKGVsLCAnZGF0YS1hbmRkb20taGlkZGVuJywgJ3RydWUnKTtcbiAgICBlbC5zdHlsZVttb2RlXSA9IChtb2RlID09PSAndmlzaWJpbGl0eScgPyAnaGlkZGVuJyA6ICdub25lJyk7XG59XG4iLCIvKiRBTVBFUlNBTkRfVkVSU0lPTiovXG52YXIgcnVuT25jZSA9IHJlcXVpcmUoJ2xvZGFzaC9vbmNlJyk7XG52YXIga2V5cyA9IHJlcXVpcmUoJ2xvZGFzaC9rZXlzJyk7XG52YXIgaXNFbXB0eSA9IHJlcXVpcmUoJ2xvZGFzaC9pc0VtcHR5Jyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpO1xudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL2xpYnMvdXRpbHMnKTtcblxudmFyIEV2ZW50cyA9IHtcbiAgICAvLyBCaW5kIGFuIGV2ZW50IHRvIGEgYGNhbGxiYWNrYCBmdW5jdGlvbi4gUGFzc2luZyBgXCJhbGxcImAgd2lsbCBiaW5kXG4gICAgLy8gdGhlIGNhbGxiYWNrIHRvIGFsbCBldmVudHMgZmlyZWQuXG4gICAgb246IGZ1bmN0aW9uIChuYW1lLCBjYWxsYmFjaywgY29udGV4dCkge1xuICAgICAgICBpZiAoIXV0aWxzLmV2ZW50c0FwaSh0aGlzLCAnb24nLCBuYW1lLCBbY2FsbGJhY2ssIGNvbnRleHRdKSB8fCAhY2FsbGJhY2spIHJldHVybiB0aGlzO1xuICAgICAgICB0aGlzLl9ldmVudHMgfHwgKHRoaXMuX2V2ZW50cyA9IHt9KTtcbiAgICAgICAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50c1tuYW1lXSB8fCAodGhpcy5fZXZlbnRzW25hbWVdID0gW10pO1xuICAgICAgICBldmVudHMucHVzaCh7Y2FsbGJhY2s6IGNhbGxiYWNrLCBjb250ZXh0OiBjb250ZXh0LCBjdHg6IGNvbnRleHQgfHwgdGhpc30pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLy8gQmluZCBhbiBldmVudCB0byBvbmx5IGJlIHRyaWdnZXJlZCBhIHNpbmdsZSB0aW1lLiBBZnRlciB0aGUgZmlyc3QgdGltZVxuICAgIC8vIHRoZSBjYWxsYmFjayBpcyBpbnZva2VkLCBpdCB3aWxsIGJlIHJlbW92ZWQuXG4gICAgb25jZTogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gICAgICAgIGlmICghdXRpbHMuZXZlbnRzQXBpKHRoaXMsICdvbmNlJywgbmFtZSwgW2NhbGxiYWNrLCBjb250ZXh0XSkgfHwgIWNhbGxiYWNrKSByZXR1cm4gdGhpcztcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB2YXIgb25jZSA9IHJ1bk9uY2UoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2VsZi5vZmYobmFtZSwgb25jZSk7XG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9KTtcbiAgICAgICAgb25jZS5fY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgcmV0dXJuIHRoaXMub24obmFtZSwgb25jZSwgY29udGV4dCk7XG4gICAgfSxcblxuICAgIC8vIFJlbW92ZSBvbmUgb3IgbWFueSBjYWxsYmFja3MuIElmIGBjb250ZXh0YCBpcyBudWxsLCByZW1vdmVzIGFsbFxuICAgIC8vIGNhbGxiYWNrcyB3aXRoIHRoYXQgZnVuY3Rpb24uIElmIGBjYWxsYmFja2AgaXMgbnVsbCwgcmVtb3ZlcyBhbGxcbiAgICAvLyBjYWxsYmFja3MgZm9yIHRoZSBldmVudC4gSWYgYG5hbWVgIGlzIG51bGwsIHJlbW92ZXMgYWxsIGJvdW5kXG4gICAgLy8gY2FsbGJhY2tzIGZvciBhbGwgZXZlbnRzLlxuICAgIG9mZjogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gICAgICAgIHZhciByZXRhaW4sIGV2LCBldmVudHMsIG5hbWVzLCBpLCBsLCBqLCBrO1xuICAgICAgICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdXRpbHMuZXZlbnRzQXBpKHRoaXMsICdvZmYnLCBuYW1lLCBbY2FsbGJhY2ssIGNvbnRleHRdKSkgcmV0dXJuIHRoaXM7XG4gICAgICAgIGlmICghbmFtZSAmJiAhY2FsbGJhY2sgJiYgIWNvbnRleHQpIHtcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IHZvaWQgMDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIG5hbWVzID0gbmFtZSA/IFtuYW1lXSA6IGtleXModGhpcy5fZXZlbnRzKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IG5hbWVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgbmFtZSA9IG5hbWVzW2ldO1xuICAgICAgICAgICAgaWYgKGV2ZW50cyA9IHRoaXMuX2V2ZW50c1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1tuYW1lXSA9IHJldGFpbiA9IFtdO1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayB8fCBjb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDAsIGsgPSBldmVudHMubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldiA9IGV2ZW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY2FsbGJhY2sgJiYgY2FsbGJhY2sgIT09IGV2LmNhbGxiYWNrICYmIGNhbGxiYWNrICE9PSBldi5jYWxsYmFjay5fY2FsbGJhY2spIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb250ZXh0ICYmIGNvbnRleHQgIT09IGV2LmNvbnRleHQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0YWluLnB1c2goZXYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghcmV0YWluLmxlbmd0aCkgZGVsZXRlIHRoaXMuX2V2ZW50c1tuYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyBUcmlnZ2VyIG9uZSBvciBtYW55IGV2ZW50cywgZmlyaW5nIGFsbCBib3VuZCBjYWxsYmFja3MuIENhbGxiYWNrcyBhcmVcbiAgICAvLyBwYXNzZWQgdGhlIHNhbWUgYXJndW1lbnRzIGFzIGB0cmlnZ2VyYCBpcywgYXBhcnQgZnJvbSB0aGUgZXZlbnQgbmFtZVxuICAgIC8vICh1bmxlc3MgeW91J3JlIGxpc3RlbmluZyBvbiBgXCJhbGxcImAsIHdoaWNoIHdpbGwgY2F1c2UgeW91ciBjYWxsYmFjayB0b1xuICAgIC8vIHJlY2VpdmUgdGhlIHRydWUgbmFtZSBvZiB0aGUgZXZlbnQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50KS5cbiAgICB0cmlnZ2VyOiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBpZiAoIXRoaXMuX2V2ZW50cykgcmV0dXJuIHRoaXM7XG4gICAgICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICBpZiAoIXV0aWxzLmV2ZW50c0FwaSh0aGlzLCAndHJpZ2dlcicsIG5hbWUsIGFyZ3MpKSByZXR1cm4gdGhpcztcbiAgICAgICAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50c1tuYW1lXTtcbiAgICAgICAgdmFyIGFsbEV2ZW50cyA9IHRoaXMuX2V2ZW50cy5hbGw7XG4gICAgICAgIGlmIChldmVudHMpIHV0aWxzLnRyaWdnZXJFdmVudHMoZXZlbnRzLCBhcmdzKTtcbiAgICAgICAgaWYgKGFsbEV2ZW50cykgdXRpbHMudHJpZ2dlckV2ZW50cyhhbGxFdmVudHMsIGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyBUZWxsIHRoaXMgb2JqZWN0IHRvIHN0b3AgbGlzdGVuaW5nIHRvIGVpdGhlciBzcGVjaWZpYyBldmVudHMgLi4uIG9yXG4gICAgLy8gdG8gZXZlcnkgb2JqZWN0IGl0J3MgY3VycmVudGx5IGxpc3RlbmluZyB0by5cbiAgICBzdG9wTGlzdGVuaW5nOiBmdW5jdGlvbiAob2JqLCBuYW1lLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgbGlzdGVuaW5nVG8gPSB0aGlzLl9saXN0ZW5pbmdUbztcbiAgICAgICAgaWYgKCFsaXN0ZW5pbmdUbykgcmV0dXJuIHRoaXM7XG4gICAgICAgIHZhciByZW1vdmUgPSAhbmFtZSAmJiAhY2FsbGJhY2s7XG4gICAgICAgIGlmICghY2FsbGJhY2sgJiYgdHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSBjYWxsYmFjayA9IHRoaXM7XG4gICAgICAgIGlmIChvYmopIChsaXN0ZW5pbmdUbyA9IHt9KVtvYmouX2xpc3RlbklkXSA9IG9iajtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICBmb3JFYWNoKGxpc3RlbmluZ1RvLCBmdW5jdGlvbiAoaXRlbSwgaWQpIHtcbiAgICAgICAgICAgIGl0ZW0ub2ZmKG5hbWUsIGNhbGxiYWNrLCBzZWxmKTtcbiAgICAgICAgICAgIGlmIChyZW1vdmUgfHwgaXNFbXB0eShpdGVtLl9ldmVudHMpKSBkZWxldGUgc2VsZi5fbGlzdGVuaW5nVG9baWRdO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8vIGV4dGVuZCBhbiBvYmplY3Qgd2l0aCBldmVudCBjYXBhYmlsaXRpZXMgaWYgcGFzc2VkXG4gICAgLy8gb3IganVzdCByZXR1cm4gYSBuZXcgb25lLlxuICAgIGNyZWF0ZUVtaXR0ZXI6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIGFzc2lnbihvYmogfHwge30sIEV2ZW50cyk7XG4gICAgfSxcblxuICAgIGxpc3RlblRvOiB1dGlscy5jcmVhdGVMaXN0ZW5NZXRob2QoJ29uJyksXG5cbiAgICBsaXN0ZW5Ub09uY2U6IHV0aWxzLmNyZWF0ZUxpc3Rlbk1ldGhvZCgnb25jZScpLFxuXG4gICAgbGlzdGVuVG9BbmRSdW46IGZ1bmN0aW9uIChvYmosIG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMubGlzdGVuVG8uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgaWYgKCFjYWxsYmFjayAmJiB0eXBlb2YgbmFtZSA9PT0gJ29iamVjdCcpIGNhbGxiYWNrID0gdGhpcztcbiAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn07XG5cbi8vIHNldHVwIGFsaWFzZXNcbkV2ZW50cy5iaW5kID0gRXZlbnRzLm9uO1xuRXZlbnRzLnVuYmluZCA9IEV2ZW50cy5vZmY7XG5FdmVudHMucmVtb3ZlTGlzdGVuZXIgPSBFdmVudHMub2ZmO1xuRXZlbnRzLnJlbW92ZUFsbExpc3RlbmVycyA9IEV2ZW50cy5vZmY7XG5FdmVudHMuZW1pdCA9IEV2ZW50cy50cmlnZ2VyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50cztcbiIsInZhciB1bmlxdWVJZCA9IHJlcXVpcmUoJ2xvZGFzaC91bmlxdWVJZCcpO1xudmFyIGV2ZW50U3BsaXR0ZXIgPSAvXFxzKy87XG5cbi8vIEEgZGlmZmljdWx0LXRvLWJlbGlldmUsIGJ1dCBvcHRpbWl6ZWQgaW50ZXJuYWwgZGlzcGF0Y2ggZnVuY3Rpb24gZm9yXG4vLyB0cmlnZ2VyaW5nIGV2ZW50cy4gVHJpZXMgdG8ga2VlcCB0aGUgdXN1YWwgY2FzZXMgc3BlZWR5LlxuZXhwb3J0cy50cmlnZ2VyRXZlbnRzID0gZnVuY3Rpb24gdHJpZ2dlckV2ZW50cyhldmVudHMsIGFyZ3MpIHtcbiAgICB2YXIgZXY7XG4gICAgdmFyIGkgPSAtMTtcbiAgICB2YXIgbCA9IGV2ZW50cy5sZW5ndGg7XG4gICAgdmFyIGExID0gYXJnc1swXTtcbiAgICB2YXIgYTIgPSBhcmdzWzFdO1xuICAgIHZhciBhMyA9IGFyZ3NbMl07XG4gICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHdoaWxlICgrK2kgPCBsKSAoZXYgPSBldmVudHNbaV0pLmNhbGxiYWNrLmNhbGwoZXYuY3R4KTsgcmV0dXJuO1xuICAgICAgICBjYXNlIDE6IHdoaWxlICgrK2kgPCBsKSAoZXYgPSBldmVudHNbaV0pLmNhbGxiYWNrLmNhbGwoZXYuY3R4LCBhMSk7IHJldHVybjtcbiAgICAgICAgY2FzZSAyOiB3aGlsZSAoKytpIDwgbCkgKGV2ID0gZXZlbnRzW2ldKS5jYWxsYmFjay5jYWxsKGV2LmN0eCwgYTEsIGEyKTsgcmV0dXJuO1xuICAgICAgICBjYXNlIDM6IHdoaWxlICgrK2kgPCBsKSAoZXYgPSBldmVudHNbaV0pLmNhbGxiYWNrLmNhbGwoZXYuY3R4LCBhMSwgYTIsIGEzKTsgcmV0dXJuO1xuICAgICAgICBkZWZhdWx0OiB3aGlsZSAoKytpIDwgbCkgKGV2ID0gZXZlbnRzW2ldKS5jYWxsYmFjay5hcHBseShldi5jdHgsIGFyZ3MpOyByZXR1cm47XG4gICAgfVxufTtcblxuLy8gSW1wbGVtZW50IGZhbmN5IGZlYXR1cmVzIG9mIHRoZSBFdmVudHMgQVBJIHN1Y2ggYXMgbXVsdGlwbGUgZXZlbnRcbi8vIG5hbWVzIGBcImNoYW5nZSBibHVyXCJgIGFuZCBqUXVlcnktc3R5bGUgZXZlbnQgbWFwcyBge2NoYW5nZTogYWN0aW9ufWBcbi8vIGluIHRlcm1zIG9mIHRoZSBleGlzdGluZyBBUEkuXG5leHBvcnRzLmV2ZW50c0FwaSA9IGZ1bmN0aW9uIGV2ZW50c0FwaShvYmosIGFjdGlvbiwgbmFtZSwgcmVzdCkge1xuICAgIGlmICghbmFtZSkgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBIYW5kbGUgZXZlbnQgbWFwcy5cbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBuYW1lKSB7XG4gICAgICAgICAgICBvYmpbYWN0aW9uXS5hcHBseShvYmosIFtrZXksIG5hbWVba2V5XV0uY29uY2F0KHJlc3QpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHNwYWNlIHNlcGFyYXRlZCBldmVudCBuYW1lcy5cbiAgICBpZiAoZXZlbnRTcGxpdHRlci50ZXN0KG5hbWUpKSB7XG4gICAgICAgIHZhciBuYW1lcyA9IG5hbWUuc3BsaXQoZXZlbnRTcGxpdHRlcik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gbmFtZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICBvYmpbYWN0aW9uXS5hcHBseShvYmosIFtuYW1lc1tpXV0uY29uY2F0KHJlc3QpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vLyBJbnZlcnNpb24tb2YtY29udHJvbCB2ZXJzaW9ucyBvZiBgb25gIGFuZCBgb25jZWAuIFRlbGwgKnRoaXMqIG9iamVjdCB0b1xuLy8gbGlzdGVuIHRvIGFuIGV2ZW50IGluIGFub3RoZXIgb2JqZWN0IC4uLiBrZWVwaW5nIHRyYWNrIG9mIHdoYXQgaXQnc1xuLy8gbGlzdGVuaW5nIHRvLlxuZXhwb3J0cy5jcmVhdGVMaXN0ZW5NZXRob2QgPSBmdW5jdGlvbiBjcmVhdGVMaXN0ZW5NZXRob2QoaW1wbGVtZW50YXRpb24pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbGlzdGVuTWV0aG9kKG9iaiwgbmFtZSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFvYmopIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHJ5aW5nIHRvIGxpc3RlblRvIGV2ZW50OiBcXCcnICsgbmFtZSArICdcXCcgYnV0IHRoZSB0YXJnZXQgb2JqZWN0IGlzIHVuZGVmaW5lZCcpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBsaXN0ZW5pbmdUbyA9IHRoaXMuX2xpc3RlbmluZ1RvIHx8ICh0aGlzLl9saXN0ZW5pbmdUbyA9IHt9KTtcbiAgICAgICAgdmFyIGlkID0gb2JqLl9saXN0ZW5JZCB8fCAob2JqLl9saXN0ZW5JZCA9IHVuaXF1ZUlkKCdsJykpO1xuICAgICAgICBsaXN0ZW5pbmdUb1tpZF0gPSBvYmo7XG4gICAgICAgIGlmICghY2FsbGJhY2sgJiYgdHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSBjYWxsYmFjayA9IHRoaXM7XG4gICAgICAgIGlmICh0eXBlb2Ygb2JqW2ltcGxlbWVudGF0aW9uXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcnlpbmcgdG8gbGlzdGVuVG8gZXZlbnQ6IFxcJycgKyBuYW1lICsgJ1xcJyBvbiBvYmplY3Q6ICcgKyBvYmoudG9TdHJpbmcoKSArICcgYnV0IGl0IGRvZXMgbm90IGhhdmUgYW4gXFwnb25cXCcgbWV0aG9kIHNvIGlzIHVuYmluZGFibGUnKTtcbiAgICAgICAgfVxuICAgICAgICBvYmpbaW1wbGVtZW50YXRpb25dKG5hbWUsIGNhbGxiYWNrLCB0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbn07XG4iLCIvKiRBTVBFUlNBTkRfVkVSU0lPTiovXG52YXIgVmlldyA9IHJlcXVpcmUoJ2FtcGVyc2FuZC12aWV3Jyk7XG52YXIgZG9tID0gcmVxdWlyZSgnYW1wZXJzYW5kLWRvbScpO1xudmFyIG1hdGNoZXNTZWxlY3RvciA9IHJlcXVpcmUoJ21hdGNoZXMtc2VsZWN0b3InKTtcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG5mdW5jdGlvbiBnZXRNYXRjaGVzKGVsLCBzZWxlY3Rvcikge1xuICAgIGlmIChzZWxlY3RvciA9PT0gJycpIHJldHVybiBbZWxdO1xuICAgIHZhciBtYXRjaGVzID0gW107XG4gICAgaWYgKG1hdGNoZXNTZWxlY3RvcihlbCwgc2VsZWN0b3IpKSBtYXRjaGVzLnB1c2goZWwpO1xuICAgIHJldHVybiBtYXRjaGVzLmNvbmNhdChzbGljZS5jYWxsKGVsLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVmlldy5leHRlbmQoe1xuICAgIHRlbXBsYXRlOiBbXG4gICAgICAgICc8bGFiZWw+JyxcbiAgICAgICAgICAgICc8c3BhbiBkYXRhLWhvb2s9XCJsYWJlbFwiPjwvc3Bhbj4nLFxuICAgICAgICAgICAgJzxpbnB1dCBjbGFzcz1cImZvcm0taW5wdXRcIj4nLFxuICAgICAgICAgICAgJzxkaXYgZGF0YS1ob29rPVwibWVzc2FnZS1jb250YWluZXJcIiBjbGFzcz1cIm1lc3NhZ2UgbWVzc2FnZS1iZWxvdyBtZXNzYWdlLWVycm9yXCI+JyxcbiAgICAgICAgICAgICAgICAnPHAgZGF0YS1ob29rPVwibWVzc2FnZS10ZXh0XCI+PC9wPicsXG4gICAgICAgICAgICAnPC9kaXY+JyxcbiAgICAgICAgJzwvbGFiZWw+J1xuICAgIF0uam9pbignJyksXG4gICAgYmluZGluZ3M6IHtcbiAgICAgICAgJ25hbWUnOiB7XG4gICAgICAgICAgICB0eXBlOiAnYXR0cmlidXRlJyxcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnaW5wdXQsIHRleHRhcmVhJyxcbiAgICAgICAgICAgIG5hbWU6ICduYW1lJ1xuICAgICAgICB9LFxuICAgICAgICAndGFiaW5kZXgnOiB7XG4gICAgICAgICAgICB0eXBlOiAnYXR0cmlidXRlJyxcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnaW5wdXQsIHRleHRhcmVhJyxcbiAgICAgICAgICAgIG5hbWU6ICd0YWJpbmRleCdcbiAgICAgICAgfSxcbiAgICAgICAgJ2xhYmVsJzogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhvb2s6ICdsYWJlbCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3RvZ2dsZScsXG4gICAgICAgICAgICAgICAgaG9vazogJ2xhYmVsJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnbWVzc2FnZSc6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGhvb2s6ICdtZXNzYWdlLXRleHQnXG4gICAgICAgIH0sXG4gICAgICAgICdzaG93TWVzc2FnZSc6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0b2dnbGUnLFxuICAgICAgICAgICAgaG9vazogJ21lc3NhZ2UtY29udGFpbmVyJ1xuICAgICAgICB9LFxuICAgICAgICAncGxhY2Vob2xkZXInOiB7XG4gICAgICAgICAgICB0eXBlOiAnYXR0cmlidXRlJyxcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnaW5wdXQsIHRleHRhcmVhJyxcbiAgICAgICAgICAgIG5hbWU6ICdwbGFjZWhvbGRlcidcbiAgICAgICAgfSxcbiAgICAgICAgJ3JlYWRvbmx5Jzoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW5BdHRyaWJ1dGUnLFxuICAgICAgICAgICAgbmFtZTogJ3JlYWRvbmx5JyxcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnaW5wdXQsIHRleHRhcmVhJ1xuICAgICAgICB9LFxuICAgICAgICAnYXV0b2ZvY3VzJzoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW5BdHRyaWJ1dGUnLFxuICAgICAgICAgICAgbmFtZTogJ2F1dG9mb2N1cycsXG4gICAgICAgICAgICBzZWxlY3RvcjogJ2lucHV0LCB0ZXh0YXJlYSdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKHNwZWMpIHtcbiAgICAgICAgc3BlYyB8fCAoc3BlYyA9IHt9KTtcbiAgICAgICAgdGhpcy50ZXN0cyA9IHRoaXMudGVzdHMgfHwgc3BlYy50ZXN0cyB8fCBbXTtcbiAgICAgICAgdGhpcy5vbignY2hhbmdlOnR5cGUnLCB0aGlzLmhhbmRsZVR5cGVDaGFuZ2UsIHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2VkID0gdGhpcy5oYW5kbGVJbnB1dENoYW5nZWQuYmluZCh0aGlzKTtcbiAgICAgICAgdmFyIHZhbHVlID0gIXNwZWMudmFsdWUgJiYgc3BlYy52YWx1ZSAhPT0gMCA/ICcnIDogc3BlYy52YWx1ZTtcbiAgICAgICAgdGhpcy5zdGFydGluZ1ZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLm9uKCdjaGFuZ2U6dmFsaWQgY2hhbmdlOnZhbHVlJywgdGhpcy5yZXBvcnRUb1BhcmVudCwgdGhpcyk7XG4gICAgICAgIHRoaXMub24oJ2NoYW5nZTp2YWxpZGl0eUNsYXNzJywgdGhpcy52YWxpZGl0eUNsYXNzQ2hhbmdlZCwgdGhpcyk7XG4gICAgICAgIGlmIChzcGVjLmF1dG9SZW5kZXIpIHRoaXMuYXV0b1JlbmRlciA9IHNwZWMuYXV0b1JlbmRlcjtcbiAgICAgICAgaWYgKHNwZWMudGVtcGxhdGUpIHRoaXMudGVtcGxhdGUgPSBzcGVjLnRlbXBsYXRlO1xuICAgICAgICBpZiAoc3BlYy5iZWZvcmVTdWJtaXQpIHRoaXMuYmVmb3JlU3VibWl0ID0gc3BlYy5iZWZvcmVTdWJtaXQ7XG4gICAgfSxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJXaXRoVGVtcGxhdGUoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMucXVlcnkoJ2lucHV0JykgfHwgdGhpcy5xdWVyeSgndGV4dGFyZWEnKTtcbiAgICAgICAgLy8gc3dpdGNoZXMgb3V0IGlucHV0IGZvciB0ZXh0YXJlYSBpZiB0aGF0J3Mgd2hhdCB3ZSB3YW50XG4gICAgICAgIHRoaXMuaGFuZGxlVHlwZUNoYW5nZSgpO1xuICAgICAgICB0aGlzLmluaXRJbnB1dEJpbmRpbmdzKCk7XG4gICAgICAgIC8vIFNraXAgdmFsaWRhdGlvbiBvbiBpbml0aWFsIHNldFZhbHVlXG4gICAgICAgIC8vIGlmIHRoZSBmaWVsZCBpcyBub3QgcmVxdWlyZWRcbiAgICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLmlucHV0VmFsdWUsICF0aGlzLnJlcXVpcmVkKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgICBpbnB1dFZhbHVlOiAnYW55JyxcbiAgICAgICAgc3RhcnRpbmdWYWx1ZTogJ2FueScsXG4gICAgICAgIG5hbWU6ICdzdHJpbmcnLFxuICAgICAgICB0eXBlOiBbJ3N0cmluZycsIHRydWUsICd0ZXh0J10sXG4gICAgICAgIHBsYWNlaG9sZGVyOiBbJ3N0cmluZycsIHRydWUsICcnXSxcbiAgICAgICAgbGFiZWw6IFsnc3RyaW5nJywgdHJ1ZSwgJyddLFxuICAgICAgICByZXF1aXJlZDogWydib29sZWFuJywgdHJ1ZSwgdHJ1ZV0sXG4gICAgICAgIGRpcmVjdGx5RWRpdGVkOiBbJ2Jvb2xlYW4nLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgIHJlYWRvbmx5OiBbJ2Jvb2xlYW4nLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgIGF1dG9mb2N1czogWydib29sZWFuJywgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICBzaG91bGRWYWxpZGF0ZTogWydib29sZWFuJywgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICBtZXNzYWdlOiBbJ3N0cmluZycsIHRydWUsICcnXSxcbiAgICAgICAgcmVxdWlyZWRNZXNzYWdlOiBbJ3N0cmluZycsIHRydWUsICdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiddLFxuICAgICAgICB2YWxpZENsYXNzOiBbJ3N0cmluZycsIHRydWUsICdpbnB1dC12YWxpZCddLFxuICAgICAgICBpbnZhbGlkQ2xhc3M6IFsnc3RyaW5nJywgdHJ1ZSwgJ2lucHV0LWludmFsaWQnXSxcbiAgICAgICAgdmFsaWRpdHlDbGFzc1NlbGVjdG9yOiBbJ3N0cmluZycsIHRydWUsICdpbnB1dCwgdGV4dGFyZWEnXSxcbiAgICAgICAgdGFiaW5kZXg6IFsnbnVtYmVyJywgdHJ1ZSwgMF1cbiAgICB9LFxuICAgIGRlcml2ZWQ6IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIGRlcHM6IFsnaW5wdXRWYWx1ZSddLFxuICAgICAgICAgICAgZm46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB2YWxpZDoge1xuICAgICAgICAgICAgY2FjaGU6IGZhbHNlLFxuICAgICAgICAgICAgZGVwczogWydpbnB1dFZhbHVlJ10sXG4gICAgICAgICAgICBmbjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5ydW5UZXN0cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzaG93TWVzc2FnZToge1xuICAgICAgICAgICAgZGVwczogWydtZXNzYWdlJywgJ3Nob3VsZFZhbGlkYXRlJ10sXG4gICAgICAgICAgICBmbjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3VsZFZhbGlkYXRlICYmIHRoaXMubWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2hhbmdlZDoge1xuICAgICAgICAgICAgZGVwczogWydpbnB1dFZhbHVlJywgJ3N0YXJ0aW5nVmFsdWUnXSxcbiAgICAgICAgICAgIGZuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRWYWx1ZSAhPT0gdGhpcy5zdGFydGluZ1ZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB2YWxpZGl0eUNsYXNzOiB7XG4gICAgICAgICAgICBkZXBzOiBbJ3ZhbGlkJywgJ3ZhbGlkQ2xhc3MnLCAnaW52YWxpZENsYXNzJywgJ3Nob3VsZFZhbGlkYXRlJ10sXG4gICAgICAgICAgICBmbjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaG91bGRWYWxpZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsaWQgPyB0aGlzLnZhbGlkQ2xhc3MgOiB0aGlzLmludmFsaWRDbGFzcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHNldFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIHNraXBWYWxpZGF0aW9uKSB7XG4gICAgICAgIGlmICghdGhpcy5pbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dC52YWx1ZSA9ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnB1dC52YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5jbGVhbih0aGlzLmlucHV0LnZhbHVlKTtcbiAgICAgICAgaWYgKCFza2lwVmFsaWRhdGlvbiAmJiAhdGhpcy5nZXRFcnJvck1lc3NhZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5zaG91bGRWYWxpZGF0ZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoc2tpcFZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc2hvdWxkVmFsaWRhdGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZ2V0RXJyb3JNZXNzYWdlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBtZXNzYWdlID0gJyc7XG4gICAgICAgIGlmICh0aGlzLnJlcXVpcmVkICYmIHRoaXMudmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1aXJlZE1lc3NhZ2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAodGhpcy50ZXN0cyB8fCBbXSkuc29tZShmdW5jdGlvbiAodGVzdCkge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSB0ZXN0LmNhbGwodGhpcywgdGhpcy52YWx1ZSkgfHwgJyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVUeXBlQ2hhbmdlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICd0ZXh0YXJlYScgJiYgdGhpcy5pbnB1dC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICd0ZXh0YXJlYScpIHtcbiAgICAgICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLmlucHV0LnBhcmVudE5vZGU7XG4gICAgICAgICAgICB2YXIgdGV4dGFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgICAgICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZCh0ZXh0YXJlYSwgdGhpcy5pbnB1dCk7XG4gICAgICAgICAgICB0aGlzLmlucHV0ID0gdGV4dGFyZWE7XG4gICAgICAgICAgICB0aGlzLl9hcHBseUJpbmRpbmdzRm9yS2V5KCcnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQudHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgY2xlYW46IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnR5cGUgPT09ICdudW1iZXInKSA/IE51bWJlcih2YWwpIDogdmFsLnRyaW0oKTtcbiAgICB9LFxuICAgIC8vYGlucHV0YCBldmVudCBoYW5kbGVyXG4gICAgaGFuZGxlSW5wdXRDaGFuZ2VkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLmlucHV0KSB7XG4gICAgICAgICAgICB0aGlzLmRpcmVjdGx5RWRpdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmNsZWFuKHRoaXMuaW5wdXQudmFsdWUpO1xuICAgIH0sXG4gICAgLy9gY2hhbmdlYCBldmVudCBoYW5kbGVyXG4gICAgaGFuZGxlQ2hhbmdlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0VmFsdWUgJiYgdGhpcy5jaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLnNob3VsZFZhbGlkYXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJ1blRlc3RzKCk7XG4gICAgfSxcbiAgICBiZWZvcmVTdWJtaXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gY2F0Y2ggdW5kZXRlY3RlZCBpbnB1dCBjaGFuZ2VzIHRoYXQgd2VyZSBub3QgY2F1Z2h0IGR1ZSB0byBsYWNrIG9mXG4gICAgICAgIC8vIGJyb3dzZXIgZXZlbnQgZmlyaW5nIHNlZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0FtcGVyc2FuZEpTL2FtcGVyc2FuZC1pbnB1dC12aWV3L2lzc3Vlcy8yXG4gICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IHRoaXMuY2xlYW4odGhpcy5pbnB1dC52YWx1ZSk7XG5cbiAgICAgICAgLy8gYXQgdGhlIHBvaW50IHdoZXJlIHdlJ3ZlIHRyaWVkXG4gICAgICAgIC8vIHRvIHN1Ym1pdCwgd2Ugd2FudCB0byB2YWxpZGF0ZVxuICAgICAgICAvLyBldmVyeXRoaW5nIGZyb20gbm93IG9uLlxuICAgICAgICB0aGlzLnNob3VsZFZhbGlkYXRlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ydW5UZXN0cygpO1xuICAgIH0sXG4gICAgcnVuVGVzdHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSgpO1xuICAgICAgICBpZiAoIW1lc3NhZ2UgJiYgdGhpcy5pbnB1dFZhbHVlICYmIHRoaXMuY2hhbmdlZCkge1xuICAgICAgICAgICAgLy8gaWYgaXQncyBldmVyIGJlZW4gdmFsaWQsXG4gICAgICAgICAgICAvLyB3ZSB3YW50IHRvIHZhbGlkYXRlIGZyb20gbm93XG4gICAgICAgICAgICAvLyBvbi5cbiAgICAgICAgICAgIHRoaXMuc2hvdWxkVmFsaWRhdGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH0sXG4gICAgaW5pdElucHV0QmluZGluZ3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2VkLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5oYW5kbGVDaGFuZ2UsZmFsc2UpO1xuICAgIH0sXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignaW5wdXQnLCB0aGlzLmhhbmRsZUlucHV0Q2hhbmdlZCwgZmFsc2UpO1xuICAgICAgICB0aGlzLmlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuaGFuZGxlQ2hhbmdlLCBmYWxzZSk7XG4gICAgICAgIFZpZXcucHJvdG90eXBlLnJlbW92ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLnN0YXJ0aW5nVmFsdWUsIHRydWUpOyAvL1NraXAgdmFsaWRhdGlvbiBqdXN0IGxpa2Ugb24gaW5pdGlhbCByZW5kZXJcbiAgICB9LFxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUoJycsIHRydWUpO1xuICAgIH0sXG4gICAgdmFsaWRpdHlDbGFzc0NoYW5nZWQ6IGZ1bmN0aW9uICh2aWV3LCBuZXdDbGFzcykge1xuICAgICAgICB2YXIgb2xkQ2xhc3MgPSB2aWV3LnByZXZpb3VzQXR0cmlidXRlcygpLnZhbGlkaXR5Q2xhc3M7XG4gICAgICAgIGdldE1hdGNoZXModGhpcy5lbCwgdGhpcy52YWxpZGl0eUNsYXNzU2VsZWN0b3IpLmZvckVhY2goZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICBkb20uc3dpdGNoQ2xhc3MobWF0Y2gsIG9sZENsYXNzLCBuZXdDbGFzcyk7XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgcmVwb3J0VG9QYXJlbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB0aGlzLnBhcmVudC51cGRhdGUodGhpcyk7XG4gICAgfVxufSk7XG4iLCIvKiRBTVBFUlNBTkRfVkVSU0lPTiovXG52YXIgU3RhdGUgPSByZXF1aXJlKCdhbXBlcnNhbmQtc3RhdGUnKTtcbnZhciBzeW5jID0gcmVxdWlyZSgnYW1wZXJzYW5kLXN5bmMnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdsb2Rhc2gvYXNzaWduJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCdsb2Rhc2gvaXNPYmplY3QnKTtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJ2xvZGFzaC9jbG9uZScpO1xudmFyIHJlc3VsdCA9IHJlcXVpcmUoJ2xvZGFzaC9yZXN1bHQnKTtcblxuLy8gVGhyb3cgYW4gZXJyb3Igd2hlbiBhIFVSTCBpcyBuZWVkZWQsIGFuZCBub25lIGlzIHN1cHBsaWVkLlxudmFyIHVybEVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQSBcInVybFwiIHByb3BlcnR5IG9yIGZ1bmN0aW9uIG11c3QgYmUgc3BlY2lmaWVkJyk7XG59O1xuXG4vLyBXcmFwIGFuIG9wdGlvbmFsIGVycm9yIGNhbGxiYWNrIHdpdGggYSBmYWxsYmFjayBlcnJvciBldmVudC5cbnZhciB3cmFwRXJyb3IgPSBmdW5jdGlvbiAobW9kZWwsIG9wdGlvbnMpIHtcbiAgICB2YXIgZXJyb3IgPSBvcHRpb25zLmVycm9yO1xuICAgIG9wdGlvbnMuZXJyb3IgPSBmdW5jdGlvbiAocmVzcCkge1xuICAgICAgICBpZiAoZXJyb3IpIGVycm9yKG1vZGVsLCByZXNwLCBvcHRpb25zKTtcbiAgICAgICAgbW9kZWwudHJpZ2dlcignZXJyb3InLCBtb2RlbCwgcmVzcCwgb3B0aW9ucyk7XG4gICAgfTtcbn07XG5cbnZhciBNb2RlbCA9IFN0YXRlLmV4dGVuZCh7XG4gICAgc2F2ZTogZnVuY3Rpb24gKGtleSwgdmFsLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBhdHRycywgbWV0aG9kO1xuXG4gICAgICAgIC8vIEhhbmRsZSBib3RoIGBcImtleVwiLCB2YWx1ZWAgYW5kIGB7a2V5OiB2YWx1ZX1gIC1zdHlsZSBhcmd1bWVudHMuXG4gICAgICAgIGlmIChrZXkgPT0gbnVsbCB8fCB0eXBlb2Yga2V5ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgYXR0cnMgPSBrZXk7XG4gICAgICAgICAgICBvcHRpb25zID0gdmFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgKGF0dHJzID0ge30pW2tleV0gPSB2YWw7XG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zID0gYXNzaWduKHt2YWxpZGF0ZTogdHJ1ZX0sIG9wdGlvbnMpO1xuXG4gICAgICAgIC8vIElmIHdlJ3JlIG5vdCB3YWl0aW5nIGFuZCBhdHRyaWJ1dGVzIGV4aXN0LCBzYXZlIGFjdHMgYXNcbiAgICAgICAgLy8gYHNldChhdHRyKS5zYXZlKG51bGwsIG9wdHMpYCB3aXRoIHZhbGlkYXRpb24uIE90aGVyd2lzZSwgY2hlY2sgaWZcbiAgICAgICAgLy8gdGhlIG1vZGVsIHdpbGwgYmUgdmFsaWQgd2hlbiB0aGUgYXR0cmlidXRlcywgaWYgYW55LCBhcmUgc2V0LlxuICAgICAgICBpZiAoYXR0cnMgJiYgIW9wdGlvbnMud2FpdCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNldChhdHRycywgb3B0aW9ucykpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fdmFsaWRhdGUoYXR0cnMsIG9wdGlvbnMpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZnRlciBhIHN1Y2Nlc3NmdWwgc2VydmVyLXNpZGUgc2F2ZSwgdGhlIGNsaWVudCBpcyAob3B0aW9uYWxseSlcbiAgICAgICAgLy8gdXBkYXRlZCB3aXRoIHRoZSBzZXJ2ZXItc2lkZSBzdGF0ZS5cbiAgICAgICAgaWYgKG9wdGlvbnMucGFyc2UgPT09IHZvaWQgMCkgb3B0aW9ucy5wYXJzZSA9IHRydWU7XG4gICAgICAgIHZhciBtb2RlbCA9IHRoaXM7XG4gICAgICAgIHZhciBzdWNjZXNzID0gb3B0aW9ucy5zdWNjZXNzO1xuICAgICAgICBvcHRpb25zLnN1Y2Nlc3MgPSBmdW5jdGlvbiAocmVzcCkge1xuICAgICAgICAgICAgdmFyIHNlcnZlckF0dHJzID0gbW9kZWwucGFyc2UocmVzcCwgb3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy53YWl0KSBzZXJ2ZXJBdHRycyA9IGFzc2lnbihhdHRycyB8fCB7fSwgc2VydmVyQXR0cnMpO1xuICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHNlcnZlckF0dHJzKSAmJiAhbW9kZWwuc2V0KHNlcnZlckF0dHJzLCBvcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdWNjZXNzKSBzdWNjZXNzKG1vZGVsLCByZXNwLCBvcHRpb25zKTtcbiAgICAgICAgICAgIG1vZGVsLnRyaWdnZXIoJ3N5bmMnLCBtb2RlbCwgcmVzcCwgb3B0aW9ucyk7XG4gICAgICAgIH07XG4gICAgICAgIHdyYXBFcnJvcih0aGlzLCBvcHRpb25zKTtcblxuICAgICAgICBtZXRob2QgPSB0aGlzLmlzTmV3KCkgPyAnY3JlYXRlJyA6IChvcHRpb25zLnBhdGNoID8gJ3BhdGNoJyA6ICd1cGRhdGUnKTtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ3BhdGNoJykgb3B0aW9ucy5hdHRycyA9IGF0dHJzO1xuICAgICAgICAvLyBpZiB3ZSdyZSB3YWl0aW5nIHdlIGhhdmVuJ3QgYWN0dWFsbHkgc2V0IG91ciBhdHRyaWJ1dGVzIHlldCBzb1xuICAgICAgICAvLyB3ZSBuZWVkIHRvIGRvIG1ha2Ugc3VyZSB3ZSBzZW5kIHJpZ2h0IGRhdGFcbiAgICAgICAgaWYgKG9wdGlvbnMud2FpdCAmJiBtZXRob2QgIT09ICdwYXRjaCcpIG9wdGlvbnMuYXR0cnMgPSBhc3NpZ24obW9kZWwuc2VyaWFsaXplKCksIGF0dHJzKTtcbiAgICAgICAgdmFyIHN5bmMgPSB0aGlzLnN5bmMobWV0aG9kLCB0aGlzLCBvcHRpb25zKTtcblxuICAgICAgICAvLyBNYWtlIHRoZSByZXF1ZXN0IGF2YWlsYWJsZSBvbiB0aGUgb3B0aW9ucyBvYmplY3Qgc28gaXQgY2FuIGJlIGFjY2Vzc2VkXG4gICAgICAgIC8vIGZ1cnRoZXIgZG93biB0aGUgbGluZSBieSBgcGFyc2VgLCBhdHRhY2hlZCBsaXN0ZW5lcnMsIGV0Y1xuICAgICAgICAvLyBTYW1lIHRoaW5nIGlzIGRvbmUgYmVsb3cgZm9yIGZldGNoIGFuZCBkZXN0cm95XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9BbXBlcnNhbmRKUy9hbXBlcnNhbmQtY29sbGVjdGlvbi1yZXN0LW1peGluL2NvbW1pdC9kMzJkNzg4YWFmZjkxMjM4N2ViMTEwNmYyZDdhZDE4M2VjMzllMTFhI2RpZmYtODRjODQ3MDMxNjliZjUwMTdiMWJjMzIzNjUzYWNhYTNSMzJcbiAgICAgICAgb3B0aW9ucy54aHIgPSBzeW5jO1xuICAgICAgICByZXR1cm4gc3luYztcbiAgICB9LFxuXG4gICAgLy8gRmV0Y2ggdGhlIG1vZGVsIGZyb20gdGhlIHNlcnZlci4gSWYgdGhlIHNlcnZlcidzIHJlcHJlc2VudGF0aW9uIG9mIHRoZVxuICAgIC8vIG1vZGVsIGRpZmZlcnMgZnJvbSBpdHMgY3VycmVudCBhdHRyaWJ1dGVzLCB0aGV5IHdpbGwgYmUgb3ZlcnJpZGRlbixcbiAgICAvLyB0cmlnZ2VyaW5nIGEgYFwiY2hhbmdlXCJgIGV2ZW50LlxuICAgIGZldGNoOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyA/IGNsb25lKG9wdGlvbnMpIDoge307XG4gICAgICAgIGlmIChvcHRpb25zLnBhcnNlID09PSB2b2lkIDApIG9wdGlvbnMucGFyc2UgPSB0cnVlO1xuICAgICAgICB2YXIgbW9kZWwgPSB0aGlzO1xuICAgICAgICB2YXIgc3VjY2VzcyA9IG9wdGlvbnMuc3VjY2VzcztcbiAgICAgICAgb3B0aW9ucy5zdWNjZXNzID0gZnVuY3Rpb24gKHJlc3ApIHtcbiAgICAgICAgICAgIGlmICghbW9kZWwuc2V0KG1vZGVsLnBhcnNlKHJlc3AsIG9wdGlvbnMpLCBvcHRpb25zKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHN1Y2Nlc3MobW9kZWwsIHJlc3AsIG9wdGlvbnMpO1xuICAgICAgICAgICAgbW9kZWwudHJpZ2dlcignc3luYycsIG1vZGVsLCByZXNwLCBvcHRpb25zKTtcbiAgICAgICAgfTtcbiAgICAgICAgd3JhcEVycm9yKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICB2YXIgc3luYyA9IHRoaXMuc3luYygncmVhZCcsIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICBvcHRpb25zLnhociA9IHN5bmM7XG4gICAgICAgIHJldHVybiBzeW5jO1xuICAgIH0sXG5cbiAgICAvLyBEZXN0cm95IHRoaXMgbW9kZWwgb24gdGhlIHNlcnZlciBpZiBpdCB3YXMgYWxyZWFkeSBwZXJzaXN0ZWQuXG4gICAgLy8gT3B0aW1pc3RpY2FsbHkgcmVtb3ZlcyB0aGUgbW9kZWwgZnJvbSBpdHMgY29sbGVjdGlvbiwgaWYgaXQgaGFzIG9uZS5cbiAgICAvLyBJZiBgd2FpdDogdHJ1ZWAgaXMgcGFzc2VkLCB3YWl0cyBmb3IgdGhlIHNlcnZlciB0byByZXNwb25kIGJlZm9yZSByZW1vdmFsLlxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zID8gY2xvbmUob3B0aW9ucykgOiB7fTtcbiAgICAgICAgdmFyIG1vZGVsID0gdGhpcztcbiAgICAgICAgdmFyIHN1Y2Nlc3MgPSBvcHRpb25zLnN1Y2Nlc3M7XG5cbiAgICAgICAgdmFyIGRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBtb2RlbC50cmlnZ2VyKCdkZXN0cm95JywgbW9kZWwsIG1vZGVsLmNvbGxlY3Rpb24sIG9wdGlvbnMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIG9wdGlvbnMuc3VjY2VzcyA9IGZ1bmN0aW9uIChyZXNwKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy53YWl0IHx8IG1vZGVsLmlzTmV3KCkpIGRlc3Ryb3koKTtcbiAgICAgICAgICAgIGlmIChzdWNjZXNzKSBzdWNjZXNzKG1vZGVsLCByZXNwLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGlmICghbW9kZWwuaXNOZXcoKSkgbW9kZWwudHJpZ2dlcignc3luYycsIG1vZGVsLCByZXNwLCBvcHRpb25zKTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5pc05ldygpKSB7XG4gICAgICAgICAgICBvcHRpb25zLnN1Y2Nlc3MoKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwRXJyb3IodGhpcywgb3B0aW9ucyk7XG5cbiAgICAgICAgdmFyIHN5bmMgPSB0aGlzLnN5bmMoJ2RlbGV0ZScsIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICBvcHRpb25zLnhociA9IHN5bmM7XG4gICAgICAgIGlmICghb3B0aW9ucy53YWl0KSBkZXN0cm95KCk7XG4gICAgICAgIHJldHVybiBzeW5jO1xuICAgIH0sXG5cbiAgICAvLyBQcm94eSBgYW1wZXJzYW5kLXN5bmNgIGJ5IGRlZmF1bHQgLS0gYnV0IG92ZXJyaWRlIHRoaXMgaWYgeW91IG5lZWRcbiAgICAvLyBjdXN0b20gc3luY2luZyBzZW1hbnRpY3MgZm9yICp0aGlzKiBwYXJ0aWN1bGFyIG1vZGVsLlxuICAgIHN5bmM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHN5bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9LFxuXG4gICAgLy8gRGVmYXVsdCBVUkwgZm9yIHRoZSBtb2RlbCdzIHJlcHJlc2VudGF0aW9uIG9uIHRoZSBzZXJ2ZXIgLS0gaWYgeW91J3JlXG4gICAgLy8gdXNpbmcgQmFja2JvbmUncyByZXN0ZnVsIG1ldGhvZHMsIG92ZXJyaWRlIHRoaXMgdG8gY2hhbmdlIHRoZSBlbmRwb2ludFxuICAgIC8vIHRoYXQgd2lsbCBiZSBjYWxsZWQuXG4gICAgdXJsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBiYXNlID0gcmVzdWx0KHRoaXMsICd1cmxSb290JykgfHwgcmVzdWx0KHRoaXMuY29sbGVjdGlvbiwgJ3VybCcpIHx8IHVybEVycm9yKCk7XG4gICAgICAgIGlmICh0aGlzLmlzTmV3KCkpIHJldHVybiBiYXNlO1xuICAgICAgICByZXR1cm4gYmFzZSArIChiYXNlLmNoYXJBdChiYXNlLmxlbmd0aCAtIDEpID09PSAnLycgPyAnJyA6ICcvJykgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5nZXRJZCgpKTtcbiAgICB9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBNb2RlbDtcbiIsIi8qICRBTVBFUlNBTkRfVkVSU0lPTiAqL1xudmFyIGRvbWlmeSA9IHJlcXVpcmUoJ2RvbWlmeScpO1xudmFyIGRvbSA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1kb20nKTtcbnZhciBtYXRjaGVzID0gcmVxdWlyZSgnbWF0Y2hlcy1zZWxlY3RvcicpO1xudmFyIFZpZXcgPSByZXF1aXJlKCdhbXBlcnNhbmQtdmlldycpO1xuXG52YXIgY3JlYXRlT3B0aW9uID0gZnVuY3Rpb24odmFsdWUsIHRleHQsIGRpc2FibGVkKSB7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTtcblxuICAgIC8vU2V0IHRvIGVtcHR5LXN0cmluZyBpZiB1bmRlZmluZWQgb3IgbnVsbCwgYnV0IG5vdCBpZiAwLCBmYWxzZSwgZXRjXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHZhbHVlID0gJyc7XG5cbiAgICBpZiAoZGlzYWJsZWQpIG5vZGUuZGlzYWJsZWQgPSB0cnVlO1xuICAgIG5vZGUudGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgIG5vZGUudmFsdWUgPSB2YWx1ZTtcblxuICAgIHJldHVybiBub2RlO1xufTtcblxudmFyIGNyZWF0ZU9wdGdyb3VwID0gZnVuY3Rpb24odGV4dCkge1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0Z3JvdXAnKTtcbiAgICBub2RlLmxhYmVsID0gdGV4dDtcblxuICAgIHJldHVybiBub2RlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBWaWV3LmV4dGVuZCh7XG4gICAgLy9SZXBsYWNlYWJsZSB3aXRoIGFueXRoaW5nIHdpdGggbGFiZWwsIG1lc3NhZ2UtY29udGFpbmVyLCBtZXNzYWdlLXRleHQgZGF0YS1ob29rcyBhbmQgYSA8c2VsZWN0PlxuICAgIHRlbXBsYXRlOiBbXG4gICAgICAgICc8bGFiZWwgY2xhc3M9XCJzZWxlY3RcIj4nLFxuICAgICAgICAgICAgJzxzcGFuIGRhdGEtaG9vaz1cImxhYmVsXCI+PC9zcGFuPicsXG4gICAgICAgICAgICAnPHNlbGVjdD48L3NlbGVjdD4nLFxuICAgICAgICAgICAgJzxzcGFuIGRhdGEtaG9vaz1cIm1lc3NhZ2UtY29udGFpbmVyXCIgY2xhc3M9XCJtZXNzYWdlIG1lc3NhZ2UtYmVsb3cgbWVzc2FnZS1lcnJvclwiPicsXG4gICAgICAgICAgICAgICAgJzxwIGRhdGEtaG9vaz1cIm1lc3NhZ2UtdGV4dFwiPjwvcD4nLFxuICAgICAgICAgICAgJzwvc3Bhbj4nLFxuICAgICAgICAnPC9sYWJlbD4nXG4gICAgXS5qb2luKCdcXG4nKSxcbiAgICBpbml0aWFsaXplOiBmdW5jdGlvbihvcHRzKSB7XG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5uYW1lICE9PSAnc3RyaW5nJykgdGhyb3cgbmV3IEVycm9yKCdTZWxlY3RWaWV3IHJlcXVpcmVzIGEgbmFtZSBwcm9wZXJ0eS4nKTtcbiAgICAgICAgdGhpcy5uYW1lID0gb3B0cy5uYW1lO1xuXG4gICAgICAgIGlmIChvcHRzLmdyb3VwT3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdHMub3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRG9uXFwndCBwcm92aWRlIGFtcGVyc2FuZC1zZWxlY3QtdmlldyB3aXRoIGJvdGggb3B0aW9ucyBhbmQgZ3JvdXBPcHRpb25zIHByb3BlcnRpZXMsIGFzIG9wdGlvbiB3aWxsIGJlIGdlbmVyYXRlZCB3aXRoIHZhbHVlcyBmcm9tIGdyb3VwT3B0aW9ucy4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgb3B0aW9ucyBhcnJheSBmcm9tIHRoZSBncm91cE9wdGlvbnMgcHJvcGVydHksIGNvbnRhaW5pbmdcbiAgICAgICAgICAgIC8vIG9ubHkgdGhlIHZhbHVlcyB0aGF0IHdpbGwgcmVzdWx0IGluIGFuIDxvcHRpb24+IGVsZW1lbnRcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBPcHRpb25zID0gb3B0cy5ncm91cE9wdGlvbnM7XG4gICAgICAgICAgICBvcHRzLm9wdGlvbnMgPSBbXTtcblxuICAgICAgICAgICAgb3B0cy5ncm91cE9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbihvcHRncm91cCkge1xuICAgICAgICAgICAgICAgIG9wdGdyb3VwLm9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbihvcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0cy5vcHRpb25zLnB1c2gob3B0aW9uKTtcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvcHRzLm9wdGlvbnMpICYmICFvcHRzLm9wdGlvbnMuaXNDb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlbGVjdFZpZXcgcmVxdWlyZXMgc2VsZWN0IG9wdGlvbnMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0cy5vcHRpb25zO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaXNDb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmlkQXR0cmlidXRlID0gb3B0cy5pZEF0dHJpYnV0ZSB8fCB0aGlzLm9wdGlvbnMubWFpbkluZGV4IHx8ICdpZCc7XG4gICAgICAgICAgICB0aGlzLnRleHRBdHRyaWJ1dGUgPSBvcHRzLnRleHRBdHRyaWJ1dGUgfHwgJ3RleHQnO1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZEF0dHJpYnV0ZSA9IG9wdHMuZGlzYWJsZWRBdHRyaWJ1dGU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVsID0gb3B0cy5lbDtcbiAgICAgICAgdGhpcy5sYWJlbCA9IG9wdHMubGFiZWwgfHwgJyc7XG4gICAgICAgIHRoaXMucGFyZW50ID0gb3B0cy5wYXJlbnQgfHwgdGhpcy5wYXJlbnQ7XG4gICAgICAgIGlmIChvcHRzLnRlbXBsYXRlKSB0aGlzLnRlbXBsYXRlID0gb3B0cy50ZW1wbGF0ZTtcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkVGV4dCA9IG9wdHMudW5zZWxlY3RlZFRleHQ7XG4gICAgICAgIHRoaXMuc3RhcnRpbmdWYWx1ZSA9IG9wdHMudmFsdWU7XG4gICAgICAgIHRoaXMueWllbGRNb2RlbCA9IChvcHRzLnlpZWxkTW9kZWwgPT09IGZhbHNlKSA/IGZhbHNlIDogdHJ1ZTtcblxuICAgICAgICB0aGlzLnRhYmluZGV4ID0gb3B0cy50YWJpbmRleCB8fCAnMCc7XG5cbiAgICAgICAgdGhpcy5lYWdlclZhbGlkYXRlID0gb3B0cy5lYWdlclZhbGlkYXRlO1xuICAgICAgICB0aGlzLnJlcXVpcmVkID0gb3B0cy5yZXF1aXJlZCB8fCBmYWxzZTtcbiAgICAgICAgdGhpcy52YWxpZENsYXNzID0gb3B0cy52YWxpZENsYXNzIHx8ICdpbnB1dC12YWxpZCc7XG4gICAgICAgIHRoaXMuaW52YWxpZENsYXNzID0gb3B0cy5pbnZhbGlkQ2xhc3MgfHwgJ2lucHV0LWludmFsaWQnO1xuICAgICAgICBpZiAob3B0cy5yZXF1aXJlZE1lc3NhZ2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5yZXF1aXJlZE1lc3NhZ2UgPSAnU2VsZWN0aW9uIHJlcXVpcmVkJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVxdWlyZWRNZXNzYWdlID0gb3B0cy5yZXF1aXJlZE1lc3NhZ2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuc3RhcnRpbmdWYWx1ZSA9IHRoaXMuc2V0VmFsdWUob3B0cy52YWx1ZSwgdGhpcy5lYWdlclZhbGlkYXRlID8gZmFsc2UgOiB0cnVlLCB0cnVlKTtcblxuICAgICAgICBpZiAob3B0cy5iZWZvcmVTdWJtaXQpIHRoaXMuYmVmb3JlU3VibWl0ID0gb3B0cy5iZWZvcmVTdWJtaXQ7XG4gICAgICAgIGlmIChvcHRzLmF1dG9SZW5kZXIpIHRoaXMuYXV0b1JlbmRlciA9IG9wdHMuYXV0b1JlbmRlcjtcbiAgICB9LFxuXG4gICAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGVsRG9tLFxuICAgICAgICAgICAgbGFiZWxFbDtcbiAgICAgICAgaWYgKHRoaXMucmVuZGVyZWQpIHJldHVybjtcblxuICAgICAgICBlbERvbSA9IGRvbWlmeSh0aGlzLnRlbXBsYXRlKTtcbiAgICAgICAgaWYgKCF0aGlzLmVsKSB0aGlzLmVsID0gZWxEb207XG4gICAgICAgIGVsc2UgdGhpcy5lbC5hcHBlbmRDaGlsZChlbERvbSk7XG5cbiAgICAgICAgbGFiZWxFbCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignW2RhdGEtaG9va349bGFiZWxdJyk7XG4gICAgICAgIGlmIChsYWJlbEVsKSB7XG4gICAgICAgICAgICBsYWJlbEVsLnRleHRDb250ZW50ID0gdGhpcy5sYWJlbDtcbiAgICAgICAgICAgIHRoaXMubGFiZWwgPSBsYWJlbEVsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMubGFiZWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5lbC50YWdOYW1lID09PSAnU0VMRUNUJykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLmVsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoJ3NlbGVjdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3QpIHRocm93IG5ldyBFcnJvcignbm8gc2VsZWN0IGZvdW5kIGluIHRlbXBsYXRlJyk7XG4gICAgICAgIGlmIChtYXRjaGVzKHRoaXMuZWwsICdzZWxlY3QnKSkgdGhpcy5zZWxlY3QgPSB0aGlzLmVsO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3QpIHRoaXMuc2VsZWN0LnNldEF0dHJpYnV0ZSgnbmFtZScsIHRoaXMubmFtZSk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdCkgdGhpcy5zZWxlY3Quc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsIHRoaXMudGFiaW5kZXgpO1xuXG4gICAgICAgIHRoaXMuYmluZERPTUV2ZW50cygpO1xuICAgICAgICB0aGlzLnJlbmRlck9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZE9wdGlvbigpO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaXNDb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMub24oJ2FkZCByZW1vdmUgcmVzZXQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgc2V0VmFsdWVGaXJzdE1vZGVsID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy55aWVsZE1vZGVsKSB0aGlzLnNldFZhbHVlKHRoaXMub3B0aW9ucy5tb2RlbHNbMF0pO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHRoaXMuc2V0VmFsdWUodGhpcy5vcHRpb25zLm1vZGVsc1swXVt0aGlzLmlkQXR0cmlidXRlXSk7XG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJPcHRpb25zKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzT3B0aW9uQnlWYWx1ZSh0aGlzLnZhbHVlKSkgdGhpcy51cGRhdGVTZWxlY3RlZE9wdGlvbigpO1xuICAgICAgICAgICAgICAgIGVsc2Ugc2V0VmFsdWVGaXJzdE1vZGVsKCk7XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52YWxpZGF0ZSh0aGlzLmVhZ2VyVmFsaWRhdGUgPyBmYWxzZSA6IHRydWUsIHRydWUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cblxuICAgIG9uQ2hhbmdlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5zZWxlY3Qub3B0aW9uc1t0aGlzLnNlbGVjdC5zZWxlY3RlZEluZGV4XS52YWx1ZTtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlzQ29sbGVjdGlvbiAmJiB0aGlzLnlpZWxkTW9kZWwpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXRNb2RlbEZvcklkKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyBhIG1vZGVsIGluIHRoZSBvcHRpb25zIGNvbGxlY3Rpb24gcHJvdmlkZWQgYW4gSURcbiAgICAgKiBAcGFyYW0gIHthbnl9IGlkXG4gICAgICogQHJldHVybiB7U3RhdGV9XG4gICAgICogQHRocm93cyB7UmFuZ2VFcnJvcn0gSWYgbW9kZWwgbm90IGZvdW5kXG4gICAgICovXG4gICAgZ2V0TW9kZWxGb3JJZDogZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24obW9kZWwpIHtcbiAgICAgICAgICAgIC8vIGludGVudGlvbmFsbHkgY29lcmNlIGZvciAnMScgPT0gMVxuICAgICAgICAgICAgcmV0dXJuIG1vZGVsW3RoaXMuaWRBdHRyaWJ1dGVdID09IGlkO1xuICAgICAgICB9LmJpbmQodGhpcykpWzBdO1xuICAgIH0sXG5cbiAgICBiaW5kRE9NRXZlbnRzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5zZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5vbkNoYW5nZSwgZmFsc2UpO1xuICAgIH0sXG5cbiAgICByZW5kZXJPcHRpb25zOiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdCkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0LmlubmVySFRNTCA9ICcnO1xuICAgICAgICBpZiAodGhpcy51bnNlbGVjdGVkVGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdC5hcHBlbmRDaGlsZChcbiAgICAgICAgICAgICAgICBjcmVhdGVPcHRpb24obnVsbCwgdGhpcy51bnNlbGVjdGVkVGV4dClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5ncm91cE9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBPcHRpb25zLmZvckVhY2goZnVuY3Rpb24ob3B0Z3JvdXApIHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmdyb3VwT3B0aW9ucyBpcyBhbiBhcnJheSBvZiBPYmplY3RzIHJlcHJlc2VudGluZyA8b3B0Z3JvdXA+IGVsZW1lbnRzXG4gICAgICAgICAgICAgICAgdmFyIG9wdEdyb3VwRWxlbWVudCA9IGNyZWF0ZU9wdGdyb3VwKG9wdGdyb3VwLmdyb3VwTmFtZSk7XG4gICAgICAgICAgICAgICAgLy8gTG9vcCBvdmVyIHRoZSA8b3B0aW9ucz4gZnJvbSB0aGF0IDxvcHRncm91cD5cbiAgICAgICAgICAgICAgICBvcHRncm91cC5vcHRpb25zLmZvckVhY2goZnVuY3Rpb24ob3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgPG9wdGlvbj5zIHRvIHRoZSA8b3B0Z3JvdXA+XG4gICAgICAgICAgICAgICAgICAgIG9wdEdyb3VwRWxlbWVudC5hcHBlbmRDaGlsZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZU9wdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE9wdGlvblZhbHVlKG9wdGlvbiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRPcHRpb25UZXh0KG9wdGlvbiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRPcHRpb25EaXNhYmxlZChvcHRpb24pXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIDxvcHRncm91cD4gdG8gdGhlIDxzZWxlY3Q+XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QuYXBwZW5kQ2hpbGQob3B0R3JvdXBFbGVtZW50KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbihvcHRpb24pIHtcbiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYW5kIGFkZCB0aGUgPG9wdGlvbj4gdG8gdGhlIDxzZWxlY3Q+XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QuYXBwZW5kQ2hpbGQoXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZU9wdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uVmFsdWUob3B0aW9uKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uVGV4dChvcHRpb24pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRPcHRpb25EaXNhYmxlZChvcHRpb24pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSA8c2VsZWN0PiBjb250cm9sIHRvIHNldCB0aGUgc2VsZWN0IG9wdGlvbiB3aGVuIHRoZSBvcHRpb25cbiAgICAgKiBoYXMgY2hhbmdlZCBwcm9ncmFtYXRpY2FsbHkgKGkuZS4gbm90IHRocm91Z2ggZGlyZWN0IHVzZXIgc2VsZWN0aW9uKVxuICAgICAqIEByZXR1cm4ge1NlbGVjdFZpZXd9IHRoaXNcbiAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgbm8gb3B0aW9uIGV4aXN0cyBmb3IgdGhpcy52YWx1ZVxuICAgICAqL1xuICAgIHVwZGF0ZVNlbGVjdGVkT3B0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGxvb2t1cFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgaWYgKGxvb2t1cFZhbHVlID09PSBudWxsIHx8IGxvb2t1cFZhbHVlID09PSB1bmRlZmluZWQgfHwgbG9va3VwVmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy51bnNlbGVjdGVkVGV4dCAhPT0gdW5kZWZpbmVkIHx8ICghdGhpcy5zdGFydGluZ1ZhbHVlICYmICF0aGlzLnJlbmRlcmVkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0LnNlbGVjdGVkSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zLmxlbmd0aCAmJiB0aGlzLnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQdWxsIG91dCB0aGUgaWQgaWYgaXQncyBhIG1vZGVsXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaXNDb2xsZWN0aW9uICYmIHRoaXMueWllbGRNb2RlbCkge1xuICAgICAgICAgICAgbG9va3VwVmFsdWUgPSBsb29rdXBWYWx1ZSAmJiBsb29rdXBWYWx1ZVt0aGlzLmlkQXR0cmlidXRlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb29rdXBWYWx1ZSB8fCBsb29rdXBWYWx1ZSA9PT0gMCB8fCBsb29rdXBWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGxvb2t1cFZhbHVlID09PSBudWxsKSBsb29rdXBWYWx1ZSA9ICcnOyAvLyBET00gc2VlcyBvbmx5ICcnIGVtcHR5IHZhbHVlXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5zZWxlY3Qub3B0aW9ucy5sZW5ndGg7IGktLTsgaSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdC5vcHRpb25zW2ldLnZhbHVlID09IGxvb2t1cFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0LnNlbGVjdGVkSW5kZXggPSBpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBmYWlsZWQgdG8gbWF0Y2ggYW55XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gb3B0aW9uIGV4aXN0cyBmb3IgdmFsdWU6ICcgKyBsb29rdXBWYWx1ZSk7XG4gICAgfSxcblxuICAgIHJlbW92ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmVsICYmIHRoaXMuZWwucGFyZW50Tm9kZSkgdGhpcy5lbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWwpO1xuICAgICAgICB0aGlzLmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMub25DaGFuZ2UsIGZhbHNlKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyBjb250cm9sIHRvIHVuc2VsZWN0ZWRUZXh0IG9wdGlvbiwgb3IgdXNlciBzcGVjaWZpZWQgb3B0aW9uIHdpdGggYG51bGxgXG4gICAgICogdmFsdWVcbiAgICAgKiBAcmV0dXJuIHtTZWxlY3RWaWV3fSB0aGlzXG4gICAgICovXG4gICAgY2xlYXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnNldFZhbHVlKG51bGwsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc2VsZWN0ZWQgb3B0aW9uIGFuZCB2aWV3IHZhbHVlIHRvIHRoZSBvcmlnaW5hbCBvcHRpb24gdmFsdWUgcHJvdmlkZWRcbiAgICAgKiBkdXJpbmcgY29uc3RydWN0aW9uXG4gICAgICogQHJldHVybiB7U2VsZWN0Vmlld30gdGhpc1xuICAgICAqL1xuICAgIHJlc2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0VmFsdWUodGhpcy5zdGFydGluZ1ZhbHVlLCB0cnVlKTtcbiAgICB9LFxuXG4gICAgc2V0VmFsdWU6IGZ1bmN0aW9uKHZhbHVlLCBza2lwVmFsaWRhdGlvbk1lc3NhZ2UsIGluaXQpIHtcbiAgICAgICAgdmFyIG9wdGlvbiwgbW9kZWwsIG51bGxWYWxpZDtcblxuICAgICAgICAvLyBlbmZvcmNlIHRoZSA8c2VsZWN0PiBjb250cm9sIHRvIGNvbnRhaW4gb25seSBhIHNpbmd1bGFyIGZhbHN5XG4gICAgICAgIC8vIHZhbHVlIChleGNsdWRpbmcgMCksIGJlY2F1c2UgYnJvd3NlcnMgd2lsbCBzZXQgdGhlIHNlbGVjdC52YWx1ZVxuICAgICAgICAvLyBpbiBlYWNoIGNhc2UgdG8gYmUgdGhlIGVtcHR5IHN0cmluZ1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuXG4gICAgICAgICAgICAvLyB0ZXN0IGlmIG51bGwgaXMgYSB2YWxpZCBvcHRpb25cbiAgICAgICAgICAgIGlmICh0aGlzLnVuc2VsZWN0ZWRUZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBudWxsVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBudWxsVmFsaWQgPSB0aGlzLmhhc09wdGlvbkJ5VmFsdWUobnVsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGVtcHR5IHZhbHVlIHJlcXVlc3RlZCB0byBiZSBzZXQuICBUaGlzIG1heSBiZSBiZWNhdXNlIHRoZSBmaWVsZCBpcyBqdXN0XG4gICAgICAgICAgICAvLyBpbml0aWFsaXppbmcuICBJZiBpbml0aWFsaXppbmcgYW5kIGBudWxsYCBpc24ndCBpbiB0aGUgaG9ub3JlZCBvcHRpb24gc2V0XG4gICAgICAgICAgICAvLyBzZXQgdGhlIHNlbGVjdCB0byB0aGUgMC10aCBpbmRleFxuICAgICAgICAgICAgaWYgKGluaXQgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCAmJiAhbnVsbFZhbGlkKSB7XG4gICAgICAgICAgICAgICAgLy8gbm8gaW5pdGlhbCB2YWx1ZSBwYXNzZWQsIHNldCBpbml0aWFsIHZhbHVlIHRvIGZpcnN0IGl0ZW0gaW4gc2V0XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pc0NvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWwgPSB0aGlzLm9wdGlvbnMubW9kZWxzWzBdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy55aWVsZE1vZGVsID8gbW9kZWwgOiBtb2RlbFt0aGlzLmlkQXR0cmlidXRlXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnNbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5vcHRpb25zWzBdWzBdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMub3B0aW9uc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEVuc3VyZSBjb3JyZXNwb25kaW5nIG9wdGlvbiBleGlzdHMgYmVmb3JlIGFzc2lnbmluZyB2YWx1ZVxuICAgICAgICAgICAgb3B0aW9uID0gdGhpcy5nZXRPcHRpb25CeVZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBBcnJheS5pc0FycmF5KG9wdGlvbikgPyBvcHRpb25bMF0gOiBvcHRpb247XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWxpZGF0ZShza2lwVmFsaWRhdGlvbk1lc3NhZ2UpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3QpIHRoaXMudXBkYXRlU2VsZWN0ZWRPcHRpb24oKTtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50ICYmIHR5cGVvZiB0aGlzLnBhcmVudC51cGRhdGUgPT09ICdmdW5jdGlvbicpIHRoaXMucGFyZW50LnVwZGF0ZSh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfSxcblxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihza2lwVmFsaWRhdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICAvLyBzZWxlY3RlZCBvcHRpb24gYWx3YXlzIGtub3duIHRvIGJlIGluIG9wdGlvbiBzZXQsXG4gICAgICAgICAgICAvLyB0aHVzIGZpZWxkIGlzIGFsd2F5cyB2YWxpZCBpZiBub3QgcmVxdWlyZWRcbiAgICAgICAgICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0KSB0aGlzLnRvZ2dsZU1lc3NhZ2Uoc2tpcFZhbGlkYXRpb25NZXNzYWdlKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbGlkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgIXRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZSAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0KSB0aGlzLnRvZ2dsZU1lc3NhZ2Uoc2tpcFZhbGlkYXRpb25NZXNzYWdlLCB0aGlzLnJlcXVpcmVkTWVzc2FnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdCkgdGhpcy50b2dnbGVNZXNzYWdlKHNraXBWYWxpZGF0aW9uTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy52YWxpZDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIGJ5IEZvcm1WaWV3IG9uIHN1Ym1pdFxuICAgICAqIEByZXR1cm4ge1NlbGVjdFZpZXd9IHRoaXNcbiAgICAgKi9cbiAgICBiZWZvcmVTdWJtaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3QpIHRoaXMuc2V0VmFsdWUodGhpcy5zZWxlY3Qub3B0aW9uc1t0aGlzLnNlbGVjdC5zZWxlY3RlZEluZGV4XS52YWx1ZSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG9wdGlvbiBjb3JyZXNwb25kaW5nIHRvIHByb3ZpZGVkIHZhbHVlLlxuICAgICAqIEBwYXJhbSAgeyp9IHN0cmluZywgc3RhdGUsIG9yIG1vZGVsXG4gICAgICogQHJldHVybiB7Kn0gc3RyaW5nLCBhcnJheSwgc3RhdGUsIG9yIG1vZGVsXG4gICAgICovXG4gICAgZ2V0T3B0aW9uQnlWYWx1ZTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdmFyIG1vZGVsO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlzQ29sbGVjdGlvbikge1xuICAgICAgICAgICAgLy8gZmluZCB2YWx1ZSBpbiBjb2xsZWN0aW9uLCBlcnJvciBpZiBubyBtb2RlbCBmb3VuZFxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbmRleE9mKHZhbHVlKSA9PT0gLTEpIG1vZGVsID0gdGhpcy5nZXRNb2RlbEZvcklkKHZhbHVlKTtcbiAgICAgICAgICAgIGVsc2UgbW9kZWwgPSB2YWx1ZTtcbiAgICAgICAgICAgIGlmICghbW9kZWwpIHRocm93IG5ldyBFcnJvcignbW9kZWwgb3IgbW9kZWwgaWRBdHRyaWJ1dGUgbm90IGZvdW5kIGluIG9wdGlvbnMgY29sbGVjdGlvbicpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMueWllbGRNb2RlbCA/IG1vZGVsIDogbW9kZWxbdGhpcy5pZEF0dHJpYnV0ZV07XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnMpKSB7XG4gICAgICAgICAgICAvLyBmaW5kIHZhbHVlIHZhbHVlIGluIG9wdGlvbnMgYXJyYXlcbiAgICAgICAgICAgIC8vIGZpbmQgb3B0aW9uLCBmb3JtYXR0ZWQgW1sndmFsJywgJ3RleHQnXSwgLi4uXVxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sZW5ndGggJiYgQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnNbMF0pKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMub3B0aW9ucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zW2ldWzBdID09IHZhbHVlKSByZXR1cm4gdGhpcy5vcHRpb25zW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGZpbmQgb3B0aW9uLCBmb3JtYXR0ZWQgWyd2YWxBbmRUZXh0JywgLi4uXSBmb3JtYXRcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGVuZ3RoICYmIHRoaXMub3B0aW9ucy5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndmFsdWUgbm90IGluIHNldCBvZiBwcm92aWRlZCBvcHRpb25zJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZWxlY3Qgb3B0aW9uIHNldCBpbnZhbGlkJyk7XG4gICAgfSxcblxuXG5cbiAgICAvKipcbiAgICAgKiBUZXN0cyBpZiBvcHRpb24gc2V0IGhhcyBhbiBvcHRpb24gY29ycmVzcG9uZGluZyB0byB0aGUgcHJvdmlkZWQgdmFsdWVcbiAgICAgKiBAcGFyYW0gIHsqfSB2YWx1ZVxuICAgICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAgICovXG4gICAgaGFzT3B0aW9uQnlWYWx1ZTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uQnlWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG5cblxuICAgIGdldE9wdGlvblZhbHVlOiBmdW5jdGlvbihvcHRpb24pIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9uKSkgcmV0dXJuIG9wdGlvblswXTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pc0NvbGxlY3Rpb24pIHJldHVybiBvcHRpb25bdGhpcy5pZEF0dHJpYnV0ZV07XG4gICAgICAgIHJldHVybiBvcHRpb247XG4gICAgfSxcblxuICAgIGdldE9wdGlvblRleHQ6IGZ1bmN0aW9uKG9wdGlvbikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb24pKSByZXR1cm4gb3B0aW9uWzFdO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlzQ29sbGVjdGlvbikge1xuICAgICAgICAgICAgaWYgKHRoaXMudGV4dEF0dHJpYnV0ZSAmJiBvcHRpb25bdGhpcy50ZXh0QXR0cmlidXRlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvblt0aGlzLnRleHRBdHRyaWJ1dGVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICB9LFxuXG4gICAgZ2V0T3B0aW9uRGlzYWJsZWQ6IGZ1bmN0aW9uKG9wdGlvbikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb24pKSByZXR1cm4gb3B0aW9uWzJdO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlzQ29sbGVjdGlvbiAmJiB0aGlzLmRpc2FibGVkQXR0cmlidXRlKSByZXR1cm4gb3B0aW9uW3RoaXMuZGlzYWJsZWRBdHRyaWJ1dGVdO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgdG9nZ2xlTWVzc2FnZTogZnVuY3Rpb24oaGlkZSwgbWVzc2FnZSkge1xuICAgICAgICB2YXIgbUNvbnRhaW5lciA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignW2RhdGEtaG9va349bWVzc2FnZS1jb250YWluZXJdJyksXG4gICAgICAgICAgICBtVGV4dCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignW2RhdGEtaG9va349bWVzc2FnZS10ZXh0XScpO1xuXG4gICAgICAgIGlmICghbUNvbnRhaW5lciB8fCAhbVRleHQpIHJldHVybjtcblxuICAgICAgICBpZiAoaGlkZSkge1xuICAgICAgICAgICAgZG9tLmhpZGUobUNvbnRhaW5lcik7XG4gICAgICAgICAgICBtVGV4dC50ZXh0Q29udGVudCA9ICcnO1xuICAgICAgICAgICAgZG9tLnJlbW92ZUNsYXNzKHRoaXMuZWwsIHRoaXMudmFsaWRDbGFzcyk7XG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2xhc3ModGhpcy5lbCwgdGhpcy5pbnZhbGlkQ2xhc3MpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgIGRvbS5zaG93KG1Db250YWluZXIpO1xuICAgICAgICAgICAgbVRleHQudGV4dENvbnRlbnQgPSBtZXNzYWdlO1xuICAgICAgICAgICAgZG9tLmFkZENsYXNzKHRoaXMuZWwsIHRoaXMuaW52YWxpZENsYXNzKTtcbiAgICAgICAgICAgIGRvbS5yZW1vdmVDbGFzcyh0aGlzLmVsLCB0aGlzLnZhbGlkQ2xhc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZG9tLmhpZGUobUNvbnRhaW5lcik7XG4gICAgICAgICAgICBtVGV4dC50ZXh0Q29udGVudCA9ICcnO1xuICAgICAgICAgICAgZG9tLmFkZENsYXNzKHRoaXMuZWwsIHRoaXMudmFsaWRDbGFzcyk7XG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2xhc3ModGhpcy5lbCwgdGhpcy5pbnZhbGlkQ2xhc3MpO1xuICAgICAgICB9XG4gICAgfVxuXG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qJEFNUEVSU0FORF9WRVJTSU9OKi9cbnZhciB1bmlxdWVJZCA9IHJlcXVpcmUoJ2xvZGFzaC91bmlxdWVJZCcpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ2xvZGFzaC9hc3NpZ24nKTtcbnZhciBjbG9uZU9iaiA9IGZ1bmN0aW9uKG9iaikgeyByZXR1cm4gYXNzaWduKHt9LCBvYmopOyB9O1xudmFyIG9taXQgPSByZXF1aXJlKCdsb2Rhc2gvb21pdCcpO1xudmFyIGVzY2FwZSA9IHJlcXVpcmUoJ2xvZGFzaC9lc2NhcGUnKTtcbnZhciBmb3JPd24gPSByZXF1aXJlKCdsb2Rhc2gvZm9yT3duJyk7XG52YXIgaW5jbHVkZXMgPSByZXF1aXJlKCdsb2Rhc2gvaW5jbHVkZXMnKTtcbnZhciBpc1N0cmluZyA9IHJlcXVpcmUoJ2xvZGFzaC9pc1N0cmluZycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnbG9kYXNoL2lzT2JqZWN0Jyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnbG9kYXNoL2lzRGF0ZScpO1xudmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCdsb2Rhc2gvaXNGdW5jdGlvbicpO1xudmFyIF9pc0VxdWFsID0gcmVxdWlyZSgnbG9kYXNoL2lzRXF1YWwnKTsgLy8gdG8gYXZvaWQgc2hhZG93aW5nXG52YXIgaGFzID0gcmVxdWlyZSgnbG9kYXNoL2hhcycpO1xudmFyIHJlc3VsdCA9IHJlcXVpcmUoJ2xvZGFzaC9yZXN1bHQnKTtcbnZhciB1bmlvbiA9IHJlcXVpcmUoJ2xvZGFzaC91bmlvbicpO1xudmFyIEV2ZW50cyA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1ldmVudHMnKTtcbnZhciBLZXlUcmVlID0gcmVxdWlyZSgna2V5LXRyZWUtc3RvcmUnKTtcbnZhciBhcnJheU5leHQgPSByZXF1aXJlKCdhcnJheS1uZXh0Jyk7XG52YXIgY2hhbmdlUkUgPSAvXmNoYW5nZTovO1xudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7fTtcblxuZnVuY3Rpb24gQmFzZShhdHRycywgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7XG4gICAgdGhpcy5jaWQgfHwgKHRoaXMuY2lkID0gdW5pcXVlSWQoJ3N0YXRlJykpO1xuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuICAgIHRoaXMuX3ZhbHVlcyA9IHt9O1xuICAgIHRoaXMuX2V2ZW50QnViYmxpbmdIYW5kbGVyQ2FjaGUgPSB7fTtcbiAgICB0aGlzLl9kZWZpbml0aW9uID0gT2JqZWN0LmNyZWF0ZSh0aGlzLl9kZWZpbml0aW9uKTtcbiAgICBpZiAob3B0aW9ucy5wYXJzZSkgYXR0cnMgPSB0aGlzLnBhcnNlKGF0dHJzLCBvcHRpb25zKTtcbiAgICB0aGlzLnBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuICAgIHRoaXMuY29sbGVjdGlvbiA9IG9wdGlvbnMuY29sbGVjdGlvbjtcbiAgICB0aGlzLl9rZXlUcmVlID0gbmV3IEtleVRyZWUoKTtcbiAgICB0aGlzLl9pbml0Q29sbGVjdGlvbnMoKTtcbiAgICB0aGlzLl9pbml0Q2hpbGRyZW4oKTtcbiAgICB0aGlzLl9jYWNoZSA9IHt9O1xuICAgIHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcyA9IHt9O1xuICAgIGlmIChhdHRycykgdGhpcy5zZXQoYXR0cnMsIGFzc2lnbih7c2lsZW50OiB0cnVlLCBpbml0aWFsOiB0cnVlfSwgb3B0aW9ucykpO1xuICAgIHRoaXMuX2NoYW5nZWQgPSB7fTtcbiAgICBpZiAodGhpcy5fZGVyaXZlZCkgdGhpcy5faW5pdERlcml2ZWQoKTtcbiAgICBpZiAob3B0aW9ucy5pbml0ICE9PSBmYWxzZSkgdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmFzc2lnbihCYXNlLnByb3RvdHlwZSwgRXZlbnRzLCB7XG4gICAgLy8gY2FuIGJlIGFsbG93LCBpZ25vcmUsIHJlamVjdFxuICAgIGV4dHJhUHJvcGVydGllczogJ2lnbm9yZScsXG5cbiAgICBpZEF0dHJpYnV0ZTogJ2lkJyxcblxuICAgIG5hbWVzcGFjZUF0dHJpYnV0ZTogJ25hbWVzcGFjZScsXG5cbiAgICB0eXBlQXR0cmlidXRlOiAnbW9kZWxUeXBlJyxcblxuICAgIC8vIFN0dWJiZWQgb3V0IHRvIGJlIG92ZXJ3cml0dGVuXG4gICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLy8gR2V0IElEIG9mIG1vZGVsIHBlciBjb25maWd1cmF0aW9uLlxuICAgIC8vIFNob3VsZCAqYWx3YXlzKiBiZSBob3cgSUQgaXMgZGV0ZXJtaW5lZCBieSBvdGhlciBjb2RlLlxuICAgIGdldElkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW3RoaXMuaWRBdHRyaWJ1dGVdO1xuICAgIH0sXG5cbiAgICAvLyBHZXQgbmFtZXNwYWNlIG9mIG1vZGVsIHBlciBjb25maWd1cmF0aW9uLlxuICAgIC8vIFNob3VsZCAqYWx3YXlzKiBiZSBob3cgbmFtZXNwYWNlIGlzIGRldGVybWluZWQgYnkgb3RoZXIgY29kZS5cbiAgICBnZXROYW1lc3BhY2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbdGhpcy5uYW1lc3BhY2VBdHRyaWJ1dGVdO1xuICAgIH0sXG5cbiAgICAvLyBHZXQgdHlwZSBvZiBtb2RlbCBwZXIgY29uZmlndXJhdGlvbi5cbiAgICAvLyBTaG91bGQgKmFsd2F5cyogYmUgaG93IHR5cGUgaXMgZGV0ZXJtaW5lZCBieSBvdGhlciBjb2RlLlxuICAgIGdldFR5cGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbdGhpcy50eXBlQXR0cmlidXRlXTtcbiAgICB9LFxuXG4gICAgLy8gQSBtb2RlbCBpcyBuZXcgaWYgaXQgaGFzIG5ldmVyIGJlZW4gc2F2ZWQgdG8gdGhlIHNlcnZlciwgYW5kIGxhY2tzIGFuIGlkLlxuICAgIGlzTmV3OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldElkKCkgPT0gbnVsbDtcbiAgICB9LFxuXG4gICAgLy8gZ2V0IEhUTUwtZXNjYXBlZCB2YWx1ZSBvZiBhdHRyaWJ1dGVcbiAgICBlc2NhcGU6IGZ1bmN0aW9uIChhdHRyKSB7XG4gICAgICAgIHJldHVybiBlc2NhcGUodGhpcy5nZXQoYXR0cikpO1xuICAgIH0sXG5cbiAgICAvLyBDaGVjayBpZiB0aGUgbW9kZWwgaXMgY3VycmVudGx5IGluIGEgdmFsaWQgc3RhdGUuXG4gICAgaXNWYWxpZDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHt9LCBhc3NpZ24ob3B0aW9ucyB8fCB7fSwgeyB2YWxpZGF0ZTogdHJ1ZSB9KSk7XG4gICAgfSxcblxuICAgIC8vIFBhcnNlIGNhbiBiZSB1c2VkIHJlbWFwL3Jlc3RydWN0dXJlL3JlbmFtZSBpbmNvbWluZyBwcm9wZXJ0aWVzXG4gICAgLy8gYmVmb3JlIHRoZXkgYXJlIGFwcGxpZWQgdG8gYXR0cmlidXRlcy5cbiAgICBwYXJzZTogZnVuY3Rpb24gKHJlc3AsIG9wdGlvbnMpIHtcbiAgICAgICAgLy9qc2hpbnQgdW51c2VkOmZhbHNlXG4gICAgICAgIHJldHVybiByZXNwO1xuICAgIH0sXG5cbiAgICAvLyBTZXJpYWxpemUgaXMgdGhlIGludmVyc2Ugb2YgYHBhcnNlYCBpdCBsZXRzIHlvdSBtYXNzYWdlIGRhdGFcbiAgICAvLyBvbiB0aGUgd2F5IG91dC4gQmVmb3JlLCBzZW5kaW5nIHRvIHNlcnZlciwgZm9yIGV4YW1wbGUuXG4gICAgc2VyaWFsaXplOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICB2YXIgYXR0ck9wdHMgPSBhc3NpZ24oe3Byb3BzOiB0cnVlfSwgb3B0aW9ucyk7XG4gICAgICAgIHZhciByZXMgPSB0aGlzLmdldEF0dHJpYnV0ZXMoYXR0ck9wdHMsIHRydWUpO1xuICAgICAgICBcbiAgICAgICAgdmFyIHNldEZyb21TZXJpYWxpemVkVmFsdWUgPSBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuXHQgICAgICAgIHJlc1trZXldID0gdGhpc1trZXldLnNlcmlhbGl6ZSgpO1xuICAgICAgICB9LmJpbmQodGhpcyk7XG4gICAgICAgIFxuICAgICAgICBmb3JPd24odGhpcy5fY2hpbGRyZW4sIHNldEZyb21TZXJpYWxpemVkVmFsdWUpO1xuICAgICAgICBmb3JPd24odGhpcy5fY29sbGVjdGlvbnMsIHNldEZyb21TZXJpYWxpemVkVmFsdWUpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG5cbiAgICAvLyBNYWluIHNldCBtZXRob2QgdXNlZCBieSBnZW5lcmF0ZWQgc2V0dGVycy9nZXR0ZXJzIGFuZCBjYW5cbiAgICAvLyBiZSB1c2VkIGRpcmVjdGx5IGlmIHlvdSBuZWVkIHRvIHBhc3Mgb3B0aW9ucyBvciBzZXQgbXVsdGlwbGVcbiAgICAvLyBwcm9wZXJ0aWVzIGF0IG9uY2UuXG4gICAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHZhciBleHRyYVByb3BlcnRpZXMgPSB0aGlzLmV4dHJhUHJvcGVydGllcztcbiAgICAgICAgdmFyIHdhc0NoYW5naW5nLCBjaGFuZ2VFdmVudHMsIG5ld1R5cGUsIG5ld1ZhbCwgZGVmLCBjYXN0LCBlcnIsIGF0dHIsXG4gICAgICAgICAgICBhdHRycywgZGF0YVR5cGUsIHNpbGVudCwgdW5zZXQsIGN1cnJlbnRWYWwsIGluaXRpYWwsIGhhc0NoYW5nZWQsIGlzRXF1YWwsIG9uQ2hhbmdlO1xuXG4gICAgICAgIC8vIEhhbmRsZSBib3RoIGBcImtleVwiLCB2YWx1ZWAgYW5kIGB7a2V5OiB2YWx1ZX1gIC1zdHlsZSBhcmd1bWVudHMuXG4gICAgICAgIGlmIChpc09iamVjdChrZXkpIHx8IGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgYXR0cnMgPSBrZXk7XG4gICAgICAgICAgICBvcHRpb25zID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhdHRycyA9IHt9O1xuICAgICAgICAgICAgYXR0cnNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAgICAgaWYgKCF0aGlzLl92YWxpZGF0ZShhdHRycywgb3B0aW9ucykpIHJldHVybiBmYWxzZTtcblxuICAgICAgICAvLyBFeHRyYWN0IGF0dHJpYnV0ZXMgYW5kIG9wdGlvbnMuXG4gICAgICAgIHVuc2V0ID0gb3B0aW9ucy51bnNldDtcbiAgICAgICAgc2lsZW50ID0gb3B0aW9ucy5zaWxlbnQ7XG4gICAgICAgIGluaXRpYWwgPSBvcHRpb25zLmluaXRpYWw7XG5cbiAgICAgICAgLy8gSW5pdGlhbGl6ZSBjaGFuZ2UgdHJhY2tpbmcuXG4gICAgICAgIHdhc0NoYW5naW5nID0gdGhpcy5fY2hhbmdpbmc7XG4gICAgICAgIHRoaXMuX2NoYW5naW5nID0gdHJ1ZTtcbiAgICAgICAgY2hhbmdlRXZlbnRzID0gW107XG5cbiAgICAgICAgLy8gaWYgbm90IGFscmVhZHkgY2hhbmdpbmcsIHN0b3JlIHByZXZpb3VzXG4gICAgICAgIGlmIChpbml0aWFsKSB7XG4gICAgICAgICAgICB0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgfSBlbHNlIGlmICghd2FzQ2hhbmdpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZWQgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZvciBlYWNoIGBzZXRgIGF0dHJpYnV0ZS4uLlxuICAgICAgICBmb3IgKHZhciBpID0gMCwga2V5cyA9IE9iamVjdC5rZXlzKGF0dHJzKSwgbGVuID0ga2V5cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgYXR0ciA9IGtleXNbaV07XG4gICAgICAgICAgICBuZXdWYWwgPSBhdHRyc1thdHRyXTtcbiAgICAgICAgICAgIG5ld1R5cGUgPSB0eXBlb2YgbmV3VmFsO1xuICAgICAgICAgICAgY3VycmVudFZhbCA9IHRoaXMuX3ZhbHVlc1thdHRyXTtcbiAgICAgICAgICAgIGRlZiA9IHRoaXMuX2RlZmluaXRpb25bYXR0cl07XG5cbiAgICAgICAgICAgIGlmICghZGVmKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBhIGNoaWxkIG1vZGVsIG9yIGNvbGxlY3Rpb25cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hpbGRyZW5bYXR0cl0gfHwgdGhpcy5fY29sbGVjdGlvbnNbYXR0cl0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09iamVjdChuZXdWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdWYWwgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXNbYXR0cl0uc2V0KG5ld1ZhbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXh0cmFQcm9wZXJ0aWVzID09PSAnaWdub3JlJykge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV4dHJhUHJvcGVydGllcyA9PT0gJ3JlamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gXCInICsgYXR0ciArICdcIiBwcm9wZXJ0eSBkZWZpbmVkIG9uICcgKyAodGhpcy50eXBlIHx8ICd0aGlzJykgKyAnIG1vZGVsIGFuZCBleHRyYVByb3BlcnRpZXMgbm90IHNldCB0byBcImlnbm9yZVwiIG9yIFwiYWxsb3dcIicpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXh0cmFQcm9wZXJ0aWVzID09PSAnYWxsb3cnKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZiA9IHRoaXMuX2NyZWF0ZVByb3BlcnR5RGVmaW5pdGlvbihhdHRyLCAnYW55Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChleHRyYVByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCB2YWx1ZSBmb3IgZXh0cmFQcm9wZXJ0aWVzOiBcIicgKyBleHRyYVByb3BlcnRpZXMgKyAnXCInKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlzRXF1YWwgPSB0aGlzLl9nZXRDb21wYXJlRm9yVHlwZShkZWYudHlwZSk7XG4gICAgICAgICAgICBvbkNoYW5nZSA9IHRoaXMuX2dldE9uQ2hhbmdlRm9yVHlwZShkZWYudHlwZSk7XG4gICAgICAgICAgICBkYXRhVHlwZSA9IHRoaXMuX2RhdGFUeXBlc1tkZWYudHlwZV07XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIHR5cGUgaWYgd2UgaGF2ZSBvbmVcbiAgICAgICAgICAgIGlmIChkYXRhVHlwZSAmJiBkYXRhVHlwZS5zZXQpIHtcbiAgICAgICAgICAgICAgICBjYXN0ID0gZGF0YVR5cGUuc2V0KG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgbmV3VmFsID0gY2FzdC52YWw7XG4gICAgICAgICAgICAgICAgbmV3VHlwZSA9IGNhc3QudHlwZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgd2UndmUgZGVmaW5lZCBhIHRlc3QsIHJ1biBpdFxuICAgICAgICAgICAgaWYgKGRlZi50ZXN0KSB7XG4gICAgICAgICAgICAgICAgZXJyID0gZGVmLnRlc3QuY2FsbCh0aGlzLCBuZXdWYWwsIG5ld1R5cGUpO1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvcGVydHkgXFwnJyArIGF0dHIgKyAnXFwnIGZhaWxlZCB2YWxpZGF0aW9uIHdpdGggZXJyb3I6ICcgKyBlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgd2UgYXJlIHJlcXVpcmVkIGJ1dCB1bmRlZmluZWQsIHRocm93IGVycm9yLlxuICAgICAgICAgICAgLy8gSWYgd2UgYXJlIG51bGwgYW5kIGFyZSBub3QgYWxsb3dpbmcgbnVsbCwgdGhyb3cgZXJyb3JcbiAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBkZWZpbmVkIHR5cGUgYW5kIHRoZSBuZXcgdHlwZSBkb2Vzbid0IG1hdGNoLCBhbmQgd2UgYXJlIG5vdCBudWxsLCB0aHJvdyBlcnJvci5cbiAgICAgICAgICAgIC8vIElmIHdlIHJlcXVpcmUgc3BlY2lmaWMgdmFsdWUgYW5kIG5ldyBvbmUgaXMgbm90IG9uZSBvZiB0aGVtLCB0aHJvdyBlcnJvciAodW5sZXNzIGl0IGhhcyBkZWZhdWx0IHZhbHVlIG9yIHdlJ3JlIHVuc2V0dGluZyBpdCB3aXRoIHVuZGVmaW5lZCkuXG5cbiAgICAgICAgICAgIGlmIChuZXdWYWwgPT09IHVuZGVmaW5lZCAmJiBkZWYucmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1aXJlZCBwcm9wZXJ0eSBcXCcnICsgYXR0ciArICdcXCcgbXVzdCBiZSBvZiB0eXBlICcgKyBkZWYudHlwZSArICcuIFRyaWVkIHRvIHNldCAnICsgbmV3VmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXdWYWwgPT09IG51bGwgJiYgZGVmLnJlcXVpcmVkICYmICFkZWYuYWxsb3dOdWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvcGVydHkgXFwnJyArIGF0dHIgKyAnXFwnIG11c3QgYmUgb2YgdHlwZSAnICsgZGVmLnR5cGUgKyAnIChjYW5ub3QgYmUgbnVsbCkuIFRyaWVkIHRvIHNldCAnICsgbmV3VmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoZGVmLnR5cGUgJiYgZGVmLnR5cGUgIT09ICdhbnknICYmIGRlZi50eXBlICE9PSBuZXdUeXBlKSAmJiBuZXdWYWwgIT09IG51bGwgJiYgbmV3VmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9wZXJ0eSBcXCcnICsgYXR0ciArICdcXCcgbXVzdCBiZSBvZiB0eXBlICcgKyBkZWYudHlwZSArICcuIFRyaWVkIHRvIHNldCAnICsgbmV3VmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkZWYudmFsdWVzICYmICFpbmNsdWRlcyhkZWYudmFsdWVzLCBuZXdWYWwpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlZmF1bHRWYWx1ZSA9IHJlc3VsdChkZWYsICdkZWZhdWx0Jyk7XG4gICAgICAgICAgICAgICAgaWYgKHVuc2V0ICYmIGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbCA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF1bnNldCB8fCAodW5zZXQgJiYgbmV3VmFsICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3BlcnR5IFxcJycgKyBhdHRyICsgJ1xcJyBtdXN0IGJlIG9uZSBvZiB2YWx1ZXM6ICcgKyBkZWYudmFsdWVzLmpvaW4oJywgJykgKyAnLiBUcmllZCB0byBzZXQgJyArIG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBXZSBrbm93IHRoaXMgaGFzICdjaGFuZ2VkJyBpZiBpdCdzIHRoZSBpbml0aWFsIHNldCwgc28gc2tpcCBhIHBvdGVudGlhbGx5IGV4cGVuc2l2ZSBpc0VxdWFsIGNoZWNrLlxuICAgICAgICAgICAgaGFzQ2hhbmdlZCA9IGluaXRpYWwgfHwgIWlzRXF1YWwoY3VycmVudFZhbCwgbmV3VmFsLCBhdHRyKTtcblxuICAgICAgICAgICAgLy8gZW5mb3JjZSBgc2V0T25jZWAgZm9yIHByb3BlcnRpZXMgaWYgc2V0XG4gICAgICAgICAgICBpZiAoZGVmLnNldE9uY2UgJiYgY3VycmVudFZhbCAhPT0gdW5kZWZpbmVkICYmIGhhc0NoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9wZXJ0eSBcXCcnICsgYXR0ciArICdcXCcgY2FuIG9ubHkgYmUgc2V0IG9uY2UuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHNldC91bnNldCBhdHRyaWJ1dGVzLlxuICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBub3QgdGhlIGluaXRpYWwgc2V0LCBrZWVwIHRyYWNrIG9mIGNoYW5nZWQgYXR0cmlidXRlc1xuICAgICAgICAgICAgLy8gYW5kIHB1c2ggdG8gY2hhbmdlRXZlbnRzIGFycmF5IHNvIHdlIGNhbiBmaXJlIGV2ZW50cy5cbiAgICAgICAgICAgIGlmIChoYXNDaGFuZ2VkKSB7XG5cbiAgICAgICAgICAgICAgICAvLyBUaGlzIGZpcmVzIG5vIG1hdHRlciB3aGF0LCBldmVuIG9uIGluaXRpYWwgc2V0LlxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlKG5ld1ZhbCwgY3VycmVudFZhbCwgYXR0cik7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY2hhbmdlIChub3QgYW4gaW5pdGlhbCBzZXQpLCBtYXJrIHRoZSBjaGFuZ2UuXG4gICAgICAgICAgICAgICAgLy8gTm90ZSBpdCdzIGltcG9zc2libGUgdG8gdW5zZXQgb24gdGhlIGluaXRpYWwgc2V0IChpdCB3aWxsIGFscmVhZHkgYmUgdW5zZXQpLFxuICAgICAgICAgICAgICAgIC8vIHNvIHdlIG9ubHkgaW5jbHVkZSB0aGF0IGxvZ2ljIGhlcmUuXG4gICAgICAgICAgICAgICAgaWYgKCFpbml0aWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZWRbYXR0cl0gPSBuZXdWYWw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlc1thdHRyXSA9IGN1cnJlbnRWYWw7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1bnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUUgZGVsZXRlIGlzIHZlcnkgc2xvdy4gQ2FuIHdlIGdldCBhd2F5IHdpdGggc2V0dGluZyB0byB1bmRlZmluZWQ/XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fdmFsdWVzW2F0dHJdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2lsZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VFdmVudHMucHVzaCh7cHJldjogY3VycmVudFZhbCwgdmFsOiBuZXdWYWwsIGtleTogYXR0cn0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdW5zZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzW2F0dHJdID0gbmV3VmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTm90IGNoYW5nZWRcbiAgICAgICAgICAgICAgICAvLyBGSVhNRSBkZWxldGUgaXMgdmVyeSBzbG93LiBDYW4gd2UgZ2V0IGF3YXkgd2l0aCBzZXR0aW5nIHRvIHVuZGVmaW5lZD9cbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fY2hhbmdlZFthdHRyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpcmUgZXZlbnRzLiBUaGlzIGFycmF5IGlzIG5vdCBwb3B1bGF0ZWQgaWYgd2UgYXJlIHRvbGQgdG8gYmUgc2lsZW50LlxuICAgICAgICBpZiAoY2hhbmdlRXZlbnRzLmxlbmd0aCkgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIGNoYW5nZUV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChjaGFuZ2UpIHtcbiAgICAgICAgICAgIHNlbGYudHJpZ2dlcignY2hhbmdlOicgKyBjaGFuZ2Uua2V5LCBzZWxmLCBjaGFuZ2UudmFsLCBvcHRpb25zKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gWW91IG1pZ2h0IGJlIHdvbmRlcmluZyB3aHkgdGhlcmUncyBhIGB3aGlsZWAgbG9vcCBoZXJlLiBDaGFuZ2VzIGNhblxuICAgICAgICAvLyBiZSByZWN1cnNpdmVseSBuZXN0ZWQgd2l0aGluIGBcImNoYW5nZVwiYCBldmVudHMuXG4gICAgICAgIGlmICh3YXNDaGFuZ2luZykgcmV0dXJuIHRoaXM7XG4gICAgICAgIHdoaWxlICh0aGlzLl9wZW5kaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2NoYW5nZScsIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbmdpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIGdldDogZnVuY3Rpb24gKGF0dHIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbYXR0cl07XG4gICAgfSxcblxuICAgIC8vIFRvZ2dsZSBib29sZWFuIHByb3BlcnRpZXMgb3IgcHJvcGVydGllcyB0aGF0IGhhdmUgYSBgdmFsdWVzYFxuICAgIC8vIGFycmF5IGluIGl0cyBkZWZpbml0aW9uLlxuICAgIHRvZ2dsZTogZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICAgIHZhciBkZWYgPSB0aGlzLl9kZWZpbml0aW9uW3Byb3BlcnR5XTtcbiAgICAgICAgaWYgKGRlZi50eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIC8vIGlmIGl0J3MgYSBib29sLCBqdXN0IGZsaXAgaXRcbiAgICAgICAgICAgIHRoaXNbcHJvcGVydHldID0gIXRoaXNbcHJvcGVydHldO1xuICAgICAgICB9IGVsc2UgaWYgKGRlZiAmJiBkZWYudmFsdWVzKSB7XG4gICAgICAgICAgICAvLyBJZiBpdCdzIGEgcHJvcGVydHkgd2l0aCBhbiBhcnJheSBvZiB2YWx1ZXNcbiAgICAgICAgICAgIC8vIHNraXAgdG8gdGhlIG5leHQgb25lIGxvb3BpbmcgYmFjayBpZiBhdCBlbmQuXG4gICAgICAgICAgICB0aGlzW3Byb3BlcnR5XSA9IGFycmF5TmV4dChkZWYudmFsdWVzLCB0aGlzW3Byb3BlcnR5XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW4gb25seSB0b2dnbGUgcHJvcGVydGllcyB0aGF0IGFyZSB0eXBlIGBib29sZWFuYCBvciBoYXZlIGB2YWx1ZXNgIGFycmF5LicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyBHZXQgYWxsIG9mIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBtb2RlbCBhdCB0aGUgdGltZSBvZiB0aGUgcHJldmlvdXNcbiAgICAvLyBgXCJjaGFuZ2VcImAgZXZlbnQuXG4gICAgcHJldmlvdXNBdHRyaWJ1dGVzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBjbG9uZU9iaih0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXMpO1xuICAgIH0sXG5cbiAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIG1vZGVsIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IGBcImNoYW5nZVwiYCBldmVudC5cbiAgICAvLyBJZiB5b3Ugc3BlY2lmeSBhbiBhdHRyaWJ1dGUgbmFtZSwgZGV0ZXJtaW5lIGlmIHRoYXQgYXR0cmlidXRlIGhhcyBjaGFuZ2VkLlxuICAgIGhhc0NoYW5nZWQ6IGZ1bmN0aW9uIChhdHRyKSB7XG4gICAgICAgIGlmIChhdHRyID09IG51bGwpIHJldHVybiAhIU9iamVjdC5rZXlzKHRoaXMuX2NoYW5nZWQpLmxlbmd0aDtcbiAgICAgICAgaWYgKGhhcyh0aGlzLl9kZXJpdmVkLCBhdHRyKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rlcml2ZWRbYXR0cl0uZGVwTGlzdC5zb21lKGZ1bmN0aW9uIChkZXApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYXNDaGFuZ2VkKGRlcCk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFzKHRoaXMuX2NoYW5nZWQsIGF0dHIpO1xuICAgIH0sXG5cbiAgICAvLyBSZXR1cm4gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBjaGFuZ2VkLCBvclxuICAgIC8vIGZhbHNlIGlmIHRoZXJlIGFyZSBubyBjaGFuZ2VkIGF0dHJpYnV0ZXMuIFVzZWZ1bCBmb3IgZGV0ZXJtaW5pbmcgd2hhdFxuICAgIC8vIHBhcnRzIG9mIGEgdmlldyBuZWVkIHRvIGJlIHVwZGF0ZWQgYW5kL29yIHdoYXQgYXR0cmlidXRlcyBuZWVkIHRvIGJlXG4gICAgLy8gcGVyc2lzdGVkIHRvIHRoZSBzZXJ2ZXIuIFVuc2V0IGF0dHJpYnV0ZXMgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICAgIC8vIFlvdSBjYW4gYWxzbyBwYXNzIGFuIGF0dHJpYnV0ZXMgb2JqZWN0IHRvIGRpZmYgYWdhaW5zdCB0aGUgbW9kZWwsXG4gICAgLy8gZGV0ZXJtaW5pbmcgaWYgdGhlcmUgKndvdWxkIGJlKiBhIGNoYW5nZS5cbiAgICBjaGFuZ2VkQXR0cmlidXRlczogZnVuY3Rpb24gKGRpZmYpIHtcbiAgICAgICAgaWYgKCFkaWZmKSByZXR1cm4gdGhpcy5oYXNDaGFuZ2VkKCkgPyBjbG9uZU9iaih0aGlzLl9jaGFuZ2VkKSA6IGZhbHNlO1xuICAgICAgICB2YXIgdmFsLCBjaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIHZhciBvbGQgPSB0aGlzLl9jaGFuZ2luZyA/IHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcyA6IHRoaXMuYXR0cmlidXRlcztcbiAgICAgICAgdmFyIGRlZiwgaXNFcXVhbDtcbiAgICAgICAgZm9yICh2YXIgYXR0ciBpbiBkaWZmKSB7XG4gICAgICAgICAgICBkZWYgPSB0aGlzLl9kZWZpbml0aW9uW2F0dHJdO1xuICAgICAgICAgICAgaWYgKCFkZWYpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaXNFcXVhbCA9IHRoaXMuX2dldENvbXBhcmVGb3JUeXBlKGRlZi50eXBlKTtcbiAgICAgICAgICAgIGlmIChpc0VxdWFsKG9sZFthdHRyXSwgKHZhbCA9IGRpZmZbYXR0cl0pKSkgY29udGludWU7XG4gICAgICAgICAgICAoY2hhbmdlZCB8fCAoY2hhbmdlZCA9IHt9KSlbYXR0cl0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoYW5nZWQ7XG4gICAgfSxcblxuICAgIHRvSlNPTjogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXJpYWxpemUoKTtcbiAgICB9LFxuXG4gICAgdW5zZXQ6IGZ1bmN0aW9uIChhdHRycywgb3B0aW9ucykge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIGF0dHJzID0gQXJyYXkuaXNBcnJheShhdHRycykgPyBhdHRycyA6IFthdHRyc107XG4gICAgICAgIGF0dHJzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgdmFyIGRlZiA9IHNlbGYuX2RlZmluaXRpb25ba2V5XTtcbiAgICAgICAgICAgIGlmICghZGVmKSByZXR1cm47XG4gICAgICAgICAgICB2YXIgdmFsO1xuICAgICAgICAgICAgaWYgKGRlZi5yZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIHZhbCA9IHJlc3VsdChkZWYsICdkZWZhdWx0Jyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0KGtleSwgdmFsLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0KGtleSwgdmFsLCBhc3NpZ24oe30sIG9wdGlvbnMsIHt1bnNldDogdHJ1ZX0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGNsZWFyOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBzZWxmLnVuc2V0KGtleSwgb3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgcHJldmlvdXM6IGZ1bmN0aW9uIChhdHRyKSB7XG4gICAgICAgIGlmIChhdHRyID09IG51bGwgfHwgIU9iamVjdC5rZXlzKHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcykubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlc1thdHRyXTtcbiAgICB9LFxuXG4gICAgLy8gR2V0IGRlZmF1bHQgdmFsdWVzIGZvciBhIGNlcnRhaW4gdHlwZVxuICAgIF9nZXREZWZhdWx0Rm9yVHlwZTogZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgICAgdmFyIGRhdGFUeXBlID0gdGhpcy5fZGF0YVR5cGVzW3R5cGVdO1xuICAgICAgICByZXR1cm4gZGF0YVR5cGUgJiYgZGF0YVR5cGVbJ2RlZmF1bHQnXTtcbiAgICB9LFxuXG4gICAgLy8gRGV0ZXJtaW5lIHdoaWNoIGNvbXBhcmlzb24gYWxnb3JpdGhtIHRvIHVzZSBmb3IgY29tcGFyaW5nIGEgcHJvcGVydHlcbiAgICBfZ2V0Q29tcGFyZUZvclR5cGU6IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIHZhciBkYXRhVHlwZSA9IHRoaXMuX2RhdGFUeXBlc1t0eXBlXTtcbiAgICAgICAgaWYgKGRhdGFUeXBlICYmIGRhdGFUeXBlLmNvbXBhcmUpIHJldHVybiBkYXRhVHlwZS5jb21wYXJlLmJpbmQodGhpcyk7XG4gICAgICAgIHJldHVybiBfaXNFcXVhbDsgLy8gaWYgbm8gY29tcGFyZSBmdW5jdGlvbiBpcyBkZWZpbmVkLCB1c2UgXy5pc0VxdWFsXG4gICAgfSxcblxuICAgIF9nZXRPbkNoYW5nZUZvclR5cGUgOiBmdW5jdGlvbih0eXBlKXtcbiAgICAgICAgdmFyIGRhdGFUeXBlID0gdGhpcy5fZGF0YVR5cGVzW3R5cGVdO1xuICAgICAgICBpZiAoZGF0YVR5cGUgJiYgZGF0YVR5cGUub25DaGFuZ2UpIHJldHVybiBkYXRhVHlwZS5vbkNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICByZXR1cm4gbm9vcDtcbiAgICB9LFxuXG4gICAgLy8gUnVuIHZhbGlkYXRpb24gYWdhaW5zdCB0aGUgbmV4dCBjb21wbGV0ZSBzZXQgb2YgbW9kZWwgYXR0cmlidXRlcyxcbiAgICAvLyByZXR1cm5pbmcgYHRydWVgIGlmIGFsbCBpcyB3ZWxsLiBPdGhlcndpc2UsIGZpcmUgYW4gYFwiaW52YWxpZFwiYCBldmVudC5cbiAgICBfdmFsaWRhdGU6IGZ1bmN0aW9uIChhdHRycywgb3B0aW9ucykge1xuICAgICAgICBpZiAoIW9wdGlvbnMudmFsaWRhdGUgfHwgIXRoaXMudmFsaWRhdGUpIHJldHVybiB0cnVlO1xuICAgICAgICBhdHRycyA9IGFzc2lnbih7fSwgdGhpcy5hdHRyaWJ1dGVzLCBhdHRycyk7XG4gICAgICAgIHZhciBlcnJvciA9IHRoaXMudmFsaWRhdGlvbkVycm9yID0gdGhpcy52YWxpZGF0ZShhdHRycywgb3B0aW9ucykgfHwgbnVsbDtcbiAgICAgICAgaWYgKCFlcnJvcikgcmV0dXJuIHRydWU7XG4gICAgICAgIHRoaXMudHJpZ2dlcignaW52YWxpZCcsIHRoaXMsIGVycm9yLCBhc3NpZ24ob3B0aW9ucyB8fCB7fSwge3ZhbGlkYXRpb25FcnJvcjogZXJyb3J9KSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgX2NyZWF0ZVByb3BlcnR5RGVmaW5pdGlvbjogZnVuY3Rpb24gKG5hbWUsIGRlc2MsIGlzU2Vzc2lvbikge1xuICAgICAgICByZXR1cm4gY3JlYXRlUHJvcGVydHlEZWZpbml0aW9uKHRoaXMsIG5hbWUsIGRlc2MsIGlzU2Vzc2lvbik7XG4gICAgfSxcblxuICAgIC8vIGp1c3QgbWFrZXMgZnJpZW5kbGllciBlcnJvcnMgd2hlbiB0cnlpbmcgdG8gZGVmaW5lIGEgbmV3IG1vZGVsXG4gICAgLy8gb25seSB1c2VkIHdoZW4gc2V0dGluZyB1cCBvcmlnaW5hbCBwcm9wZXJ0eSBkZWZpbml0aW9uc1xuICAgIF9lbnN1cmVWYWxpZFR5cGU6IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIHJldHVybiBpbmNsdWRlcyhbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbicsICdhcnJheScsICdvYmplY3QnLCAnZGF0ZScsICdzdGF0ZScsICdhbnknXVxuICAgICAgICAgICAgLmNvbmNhdChPYmplY3Qua2V5cyh0aGlzLl9kYXRhVHlwZXMpKSwgdHlwZSkgPyB0eXBlIDogdW5kZWZpbmVkO1xuICAgIH0sXG5cbiAgICBnZXRBdHRyaWJ1dGVzOiBmdW5jdGlvbiAob3B0aW9ucywgcmF3KSB7XG4gICAgICAgIG9wdGlvbnMgPSBhc3NpZ24oe1xuICAgICAgICAgICAgc2Vzc2lvbjogZmFsc2UsXG4gICAgICAgICAgICBwcm9wczogZmFsc2UsXG4gICAgICAgICAgICBkZXJpdmVkOiBmYWxzZVxuICAgICAgICB9LCBvcHRpb25zIHx8IHt9KTtcbiAgICAgICAgdmFyIHJlcyA9IHt9O1xuICAgICAgICB2YXIgdmFsLCBkZWY7XG4gICAgICAgIGZvciAodmFyIGl0ZW0gaW4gdGhpcy5fZGVmaW5pdGlvbikge1xuICAgICAgICAgICAgZGVmID0gdGhpcy5fZGVmaW5pdGlvbltpdGVtXTtcbiAgICAgICAgICAgIGlmICgob3B0aW9ucy5zZXNzaW9uICYmIGRlZi5zZXNzaW9uKSB8fCAob3B0aW9ucy5wcm9wcyAmJiAhZGVmLnNlc3Npb24pKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gcmF3ID8gdGhpcy5fdmFsdWVzW2l0ZW1dIDogdGhpc1tpdGVtXTtcbiAgICAgICAgICAgICAgICBpZiAocmF3ICYmIHZhbCAmJiBpc0Z1bmN0aW9uKHZhbC5zZXJpYWxpemUpKSB2YWwgPSB2YWwuc2VyaWFsaXplKCk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnKSB2YWwgPSByZXN1bHQoZGVmLCAnZGVmYXVsdCcpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsICE9PSAndW5kZWZpbmVkJykgcmVzW2l0ZW1dID0gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmRlcml2ZWQpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGRlcml2ZWRJdGVtIGluIHRoaXMuX2Rlcml2ZWQpIHJlc1tkZXJpdmVkSXRlbV0gPSB0aGlzW2Rlcml2ZWRJdGVtXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG5cbiAgICBfaW5pdERlcml2ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIGZvck93bih0aGlzLl9kZXJpdmVkLCBmdW5jdGlvbiAodmFsdWUsIG5hbWUpIHtcbiAgICAgICAgICAgIHZhciBkZWYgPSBzZWxmLl9kZXJpdmVkW25hbWVdO1xuICAgICAgICAgICAgZGVmLmRlcHMgPSBkZWYuZGVwTGlzdDtcblxuICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgbmV3VmFsID0gZGVmLmZuLmNhbGwoc2VsZik7XG5cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5fY2FjaGVbbmFtZV0gIT09IG5ld1ZhbCB8fCAhZGVmLmNhY2hlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWYuY2FjaGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3ByZXZpb3VzQXR0cmlidXRlc1tuYW1lXSA9IHNlbGYuX2NhY2hlW25hbWVdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlW25hbWVdID0gbmV3VmFsO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ2NoYW5nZTonICsgbmFtZSwgc2VsZiwgc2VsZi5fY2FjaGVbbmFtZV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGRlZi5kZXBzLmZvckVhY2goZnVuY3Rpb24gKHByb3BTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9rZXlUcmVlLmFkZChwcm9wU3RyaW5nLCB1cGRhdGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub24oJ2FsbCcsIGZ1bmN0aW9uIChldmVudE5hbWUpIHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VSRS50ZXN0KGV2ZW50TmFtZSkpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9rZXlUcmVlLmdldChldmVudE5hbWUuc3BsaXQoJzonKVsxXSkuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfSxcblxuICAgIF9nZXREZXJpdmVkUHJvcGVydHk6IGZ1bmN0aW9uIChuYW1lLCBmbHVzaENhY2hlKSB7XG4gICAgICAgIC8vIGlzIHRoaXMgYSBkZXJpdmVkIHByb3BlcnR5IHRoYXQgaXMgY2FjaGVkXG4gICAgICAgIGlmICh0aGlzLl9kZXJpdmVkW25hbWVdLmNhY2hlKSB7XG4gICAgICAgICAgICAvL3NldCBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lLCBvciBmbHVzaENhY2hlIGlzIHNldFxuICAgICAgICAgICAgaWYgKGZsdXNoQ2FjaGUgfHwgIXRoaXMuX2NhY2hlLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVbbmFtZV0gPSB0aGlzLl9kZXJpdmVkW25hbWVdLmZuLmFwcGx5KHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlW25hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rlcml2ZWRbbmFtZV0uZm4uYXBwbHkodGhpcyk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX2luaXRDb2xsZWN0aW9uczogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY29sbDtcbiAgICAgICAgaWYgKCF0aGlzLl9jb2xsZWN0aW9ucykgcmV0dXJuO1xuICAgICAgICBmb3IgKGNvbGwgaW4gdGhpcy5fY29sbGVjdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuX3NhZmVTZXQoY29sbCwgbmV3IHRoaXMuX2NvbGxlY3Rpb25zW2NvbGxdKG51bGwsIHtwYXJlbnQ6IHRoaXN9KSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX2luaXRDaGlsZHJlbjogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY2hpbGQ7XG4gICAgICAgIGlmICghdGhpcy5fY2hpbGRyZW4pIHJldHVybjtcbiAgICAgICAgZm9yIChjaGlsZCBpbiB0aGlzLl9jaGlsZHJlbikge1xuICAgICAgICAgICAgdGhpcy5fc2FmZVNldChjaGlsZCwgbmV3IHRoaXMuX2NoaWxkcmVuW2NoaWxkXSh7fSwge3BhcmVudDogdGhpc30pKTtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuVG8odGhpc1tjaGlsZF0sICdhbGwnLCB0aGlzLl9nZXRDYWNoZWRFdmVudEJ1YmJsaW5nSGFuZGxlcihjaGlsZCkpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgYSBib3VuZCBoYW5kbGVyIGZvciBkb2luZyBldmVudCBidWJibGluZyB3aGlsZVxuICAgIC8vIGFkZGluZyBhIG5hbWUgdG8gdGhlIGNoYW5nZSBzdHJpbmcuXG4gICAgX2dldENhY2hlZEV2ZW50QnViYmxpbmdIYW5kbGVyOiBmdW5jdGlvbiAocHJvcGVydHlOYW1lKSB7XG4gICAgICAgIGlmICghdGhpcy5fZXZlbnRCdWJibGluZ0hhbmRsZXJDYWNoZVtwcm9wZXJ0eU5hbWVdKSB7XG4gICAgICAgICAgICB0aGlzLl9ldmVudEJ1YmJsaW5nSGFuZGxlckNhY2hlW3Byb3BlcnR5TmFtZV0gPSBmdW5jdGlvbiAobmFtZSwgbW9kZWwsIG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoYW5nZVJFLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdjaGFuZ2U6JyArIHByb3BlcnR5TmFtZSArICcuJyArIG5hbWUuc3BsaXQoJzonKVsxXSwgbW9kZWwsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdjaGFuZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignY2hhbmdlJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9ldmVudEJ1YmJsaW5nSGFuZGxlckNhY2hlW3Byb3BlcnR5TmFtZV07XG4gICAgfSxcblxuICAgIC8vIENoZWNrIHRoYXQgYWxsIHJlcXVpcmVkIGF0dHJpYnV0ZXMgYXJlIHByZXNlbnRcbiAgICBfdmVyaWZ5UmVxdWlyZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGF0dHJzID0gdGhpcy5hdHRyaWJ1dGVzOyAvLyBzaG91bGQgaW5jbHVkZSBzZXNzaW9uXG4gICAgICAgIGZvciAodmFyIGRlZiBpbiB0aGlzLl9kZWZpbml0aW9uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZGVmaW5pdGlvbltkZWZdLnJlcXVpcmVkICYmIHR5cGVvZiBhdHRyc1tkZWZdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuXG4gICAgLy8gZXhwb3NlIHNhZmVTZXQgbWV0aG9kXG4gICAgX3NhZmVTZXQ6IGZ1bmN0aW9uIHNhZmVTZXQocHJvcGVydHksIHZhbHVlKSB7XG4gICAgICAgIGlmIChwcm9wZXJ0eSBpbiB0aGlzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIG5hbWVzcGFjZSBjb2xsaXNpb24gd2hpbGUgc2V0dGluZyBpbnN0YW5jZSBwcm9wZXJ0eSBgJyArIHByb3BlcnR5ICsgJ2AnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzW3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59KTtcblxuLy8gZ2V0dGVyIGZvciBhdHRyaWJ1dGVzXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCYXNlLnByb3RvdHlwZSwge1xuICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVzKHtwcm9wczogdHJ1ZSwgc2Vzc2lvbjogdHJ1ZX0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBhbGw6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAgICAgICBzZXNzaW9uOiB0cnVlLFxuICAgICAgICAgICAgICAgIHByb3BzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGRlcml2ZWQ6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBpc1N0YXRlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZTsgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7IH1cbiAgICB9XG59KTtcblxuLy8gaGVscGVyIGZvciBjcmVhdGluZy9zdG9yaW5nIHByb3BlcnR5IGRlZmluaXRpb25zIGFuZCBjcmVhdGluZ1xuLy8gYXBwcm9wcmlhdGUgZ2V0dGVycy9zZXR0ZXJzXG5mdW5jdGlvbiBjcmVhdGVQcm9wZXJ0eURlZmluaXRpb24ob2JqZWN0LCBuYW1lLCBkZXNjLCBpc1Nlc3Npb24pIHtcbiAgICB2YXIgZGVmID0gb2JqZWN0Ll9kZWZpbml0aW9uW25hbWVdID0ge307XG4gICAgdmFyIHR5cGUsIGRlc2NBcnJheTtcblxuICAgIGlmIChpc1N0cmluZyhkZXNjKSkge1xuICAgICAgICAvLyBncmFiIG91ciB0eXBlIGlmIGFsbCB3ZSd2ZSBnb3QgaXMgYSBzdHJpbmdcbiAgICAgICAgdHlwZSA9IG9iamVjdC5fZW5zdXJlVmFsaWRUeXBlKGRlc2MpO1xuICAgICAgICBpZiAodHlwZSkgZGVmLnR5cGUgPSB0eXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vVHJhbnNmb3JtIGFycmF5IG9mIFsndHlwZScsIHJlcXVpcmVkLCBkZWZhdWx0XSB0byBvYmplY3QgZm9ybVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkZXNjKSkge1xuICAgICAgICAgICAgZGVzY0FycmF5ID0gZGVzYztcbiAgICAgICAgICAgIGRlc2MgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogZGVzY0FycmF5WzBdLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBkZXNjQXJyYXlbMV0sXG4gICAgICAgICAgICAgICAgJ2RlZmF1bHQnOiBkZXNjQXJyYXlbMl1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB0eXBlID0gb2JqZWN0Ll9lbnN1cmVWYWxpZFR5cGUoZGVzYy50eXBlKTtcbiAgICAgICAgaWYgKHR5cGUpIGRlZi50eXBlID0gdHlwZTtcblxuICAgICAgICBpZiAoZGVzYy5yZXF1aXJlZCkgZGVmLnJlcXVpcmVkID0gdHJ1ZTtcblxuICAgICAgICBpZiAoZGVzY1snZGVmYXVsdCddICYmIHR5cGVvZiBkZXNjWydkZWZhdWx0J10gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgJyArIG5hbWUgKyAnIGNhbm5vdCBiZSBhbiBvYmplY3QvYXJyYXksIG11c3QgYmUgYSB2YWx1ZSBvciBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYSB2YWx1ZS9vYmplY3QvYXJyYXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZlsnZGVmYXVsdCddID0gZGVzY1snZGVmYXVsdCddO1xuXG4gICAgICAgIGRlZi5hbGxvd051bGwgPSBkZXNjLmFsbG93TnVsbCA/IGRlc2MuYWxsb3dOdWxsIDogZmFsc2U7XG4gICAgICAgIGlmIChkZXNjLnNldE9uY2UpIGRlZi5zZXRPbmNlID0gdHJ1ZTtcbiAgICAgICAgaWYgKGRlZi5yZXF1aXJlZCAmJiBkZWZbJ2RlZmF1bHQnXSA9PT0gdW5kZWZpbmVkICYmICFkZWYuc2V0T25jZSkgZGVmWydkZWZhdWx0J10gPSBvYmplY3QuX2dldERlZmF1bHRGb3JUeXBlKHR5cGUpO1xuICAgICAgICBkZWYudGVzdCA9IGRlc2MudGVzdDtcbiAgICAgICAgZGVmLnZhbHVlcyA9IGRlc2MudmFsdWVzO1xuICAgIH1cbiAgICBpZiAoaXNTZXNzaW9uKSBkZWYuc2Vzc2lvbiA9IHRydWU7XG5cbiAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgdHlwZSA9IGlzU3RyaW5nKGRlc2MpID8gZGVzYyA6IGRlc2MudHlwZTtcbiAgICAgICAgLy8gVE9ETzogc3RhcnQgdGhyb3dpbmcgYSBUeXBlRXJyb3IgaW4gZnV0dXJlIG1ham9yIHZlcnNpb25zIGluc3RlYWQgb2Ygd2FybmluZ1xuICAgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgZGF0YSB0eXBlIG9mIGAnICsgdHlwZSArICdgIGZvciBgJyArIG5hbWUgKyAnYCBwcm9wZXJ0eS4gVXNlIG9uZSBvZiB0aGUgZGVmYXVsdCB0eXBlcyBvciBkZWZpbmUgeW91ciBvd24nKTtcbiAgICB9XG5cbiAgICAvLyBkZWZpbmUgYSBnZXR0ZXIvc2V0dGVyIG9uIHRoZSBwcm90b3R5cGVcbiAgICAvLyBidXQgdGhleSBnZXQvc2V0IG9uIHRoZSBpbnN0YW5jZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldChuYW1lLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1lvdSBtYXkgYmUgdHJ5aW5nIHRvIGBleHRlbmRgIGEgc3RhdGUgb2JqZWN0IHdpdGggXCInICsgbmFtZSArICdcIiB3aGljaCBoYXMgYmVlbiBkZWZpbmVkIGluIGBwcm9wc2Agb24gdGhlIG9iamVjdCBiZWluZyBleHRlbmRlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5fdmFsdWVzW25hbWVdO1xuICAgICAgICAgICAgdmFyIHR5cGVEZWYgPSB0aGlzLl9kYXRhVHlwZXNbZGVmLnR5cGVdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZURlZiAmJiB0eXBlRGVmLmdldCkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHR5cGVEZWYuZ2V0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRlZmF1bHRWYWx1ZSA9IHJlc3VsdChkZWYsICdkZWZhdWx0Jyk7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZXNbbmFtZV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAvLyBJZiB3ZSd2ZSBzZXQgYSBkZWZhdWx0VmFsdWUsIGZpcmUgYSBjaGFuZ2UgaGFuZGxlciBlZmZlY3RpdmVseSBtYXJraW5nXG4gICAgICAgICAgICAvLyBpdHMgY2hhbmdlIGZyb20gdW5kZWZpbmVkIHRvIHRoZSBkZWZhdWx0IHZhbHVlLlxuICAgICAgICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9uQ2hhbmdlID0gdGhpcy5fZ2V0T25DaGFuZ2VGb3JUeXBlKGRlZi50eXBlKTtcbiAgICAgICAgICAgICAgICBvbkNoYW5nZShkZWZhdWx0VmFsdWUsIHZhbHVlLCBuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBkZWY7XG59XG5cbi8vIGhlbHBlciBmb3IgY3JlYXRpbmcgZGVyaXZlZCBwcm9wZXJ0eSBkZWZpbml0aW9uc1xuZnVuY3Rpb24gY3JlYXRlRGVyaXZlZFByb3BlcnR5KG1vZGVsUHJvdG8sIG5hbWUsIGRlZmluaXRpb24pIHtcbiAgICB2YXIgZGVmID0gbW9kZWxQcm90by5fZGVyaXZlZFtuYW1lXSA9IHtcbiAgICAgICAgZm46IGlzRnVuY3Rpb24oZGVmaW5pdGlvbikgPyBkZWZpbml0aW9uIDogZGVmaW5pdGlvbi5mbixcbiAgICAgICAgY2FjaGU6IChkZWZpbml0aW9uLmNhY2hlICE9PSBmYWxzZSksXG4gICAgICAgIGRlcExpc3Q6IGRlZmluaXRpb24uZGVwcyB8fCBbXVxuICAgIH07XG5cbiAgICAvLyBhZGQgdG8gb3VyIHNoYXJlZCBkZXBlbmRlbmN5IGxpc3RcbiAgICBkZWYuZGVwTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChkZXApIHtcbiAgICAgICAgbW9kZWxQcm90by5fZGVwc1tkZXBdID0gdW5pb24obW9kZWxQcm90by5fZGVwc1tkZXBdIHx8IFtdLCBbbmFtZV0pO1xuICAgIH0pO1xuXG4gICAgLy8gZGVmaW5lZCBhIHRvcC1sZXZlbCBnZXR0ZXIgZm9yIGRlcml2ZWQgbmFtZXNcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kZWxQcm90bywgbmFtZSwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXREZXJpdmVkUHJvcGVydHkobmFtZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImBcIiArIG5hbWUgKyBcImAgaXMgYSBkZXJpdmVkIHByb3BlcnR5LCBpdCBjYW4ndCBiZSBzZXQgZGlyZWN0bHkuXCIpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbnZhciBkYXRhVHlwZXMgPSB7XG4gICAgc3RyaW5nOiB7XG4gICAgICAgICdkZWZhdWx0JzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBkYXRlOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ZhbCkge1xuICAgICAgICAgICAgdmFyIG5ld1R5cGU7XG4gICAgICAgICAgICBpZiAobmV3VmFsID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBuZXdUeXBlID0gdHlwZW9mIG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpc0RhdGUobmV3VmFsKSkge1xuICAgICAgICAgICAgICAgIHZhciBlcnIgPSBudWxsO1xuICAgICAgICAgICAgICAgIHZhciBkYXRlVmFsID0gbmV3IERhdGUobmV3VmFsKS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKGRhdGVWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBuZXdWYWwgY2FudCBiZSBwYXJzZWQsIHRoZW4gdHJ5IHBhcnNlSW50IGZpcnN0XG4gICAgICAgICAgICAgICAgICAgIGRhdGVWYWwgPSBuZXcgRGF0ZShwYXJzZUludChuZXdWYWwsIDEwKSkudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4oZGF0ZVZhbCkpIGVyciA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5ld1ZhbCA9IGRhdGVWYWw7XG4gICAgICAgICAgICAgICAgbmV3VHlwZSA9ICdkYXRlJztcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1R5cGUgPSB0eXBlb2YgbmV3VmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3VHlwZSA9ICdkYXRlJztcbiAgICAgICAgICAgICAgICBuZXdWYWwgPSBuZXdWYWwudmFsdWVPZigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHZhbDogbmV3VmFsLFxuICAgICAgICAgICAgICAgIHR5cGU6IG5ld1R5cGVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGdldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgaWYgKHZhbCA9PSBudWxsKSB7IHJldHVybiB2YWw7IH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWwpO1xuICAgICAgICB9LFxuICAgICAgICAnZGVmYXVsdCc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSgpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBhcnJheToge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdWYWwpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdmFsOiBuZXdWYWwsXG4gICAgICAgICAgICAgICAgdHlwZTogQXJyYXkuaXNBcnJheShuZXdWYWwpID8gJ2FycmF5JyA6IHR5cGVvZiBuZXdWYWxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgICdkZWZhdWx0JzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBvYmplY3Q6IHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3VmFsKSB7XG4gICAgICAgICAgICB2YXIgbmV3VHlwZSA9IHR5cGVvZiBuZXdWYWw7XG4gICAgICAgICAgICAvLyB3ZSBoYXZlIHRvIGhhdmUgYSB3YXkgb2Ygc3VwcG9ydGluZyBcIm1pc3NpbmdcIiBvYmplY3RzLlxuICAgICAgICAgICAgLy8gTnVsbCBpcyBhbiBvYmplY3QsIGJ1dCBzZXR0aW5nIGEgdmFsdWUgdG8gdW5kZWZpbmVkXG4gICAgICAgICAgICAvLyBzaG91bGQgd29yayB0b28sIElNTy4gV2UganVzdCBvdmVycmlkZSBpdCwgaW4gdGhhdCBjYXNlLlxuICAgICAgICAgICAgaWYgKG5ld1R5cGUgIT09ICdvYmplY3QnICYmIG5ld1ZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbmV3VmFsID0gbnVsbDtcbiAgICAgICAgICAgICAgICBuZXdUeXBlID0gJ29iamVjdCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHZhbDogbmV3VmFsLFxuICAgICAgICAgICAgICAgIHR5cGU6IG5ld1R5cGVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgICdkZWZhdWx0JzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvLyB0aGUgYHN0YXRlYCBkYXRhIHR5cGUgaXMgYSBiaXQgc3BlY2lhbCBpbiB0aGF0IHNldHRpbmcgaXQgc2hvdWxkXG4gICAgLy8gYWxzbyBidWJibGUgZXZlbnRzXG4gICAgc3RhdGU6IHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3VmFsKSB7XG4gICAgICAgICAgICB2YXIgaXNJbnN0YW5jZSA9IG5ld1ZhbCBpbnN0YW5jZW9mIEJhc2UgfHwgKG5ld1ZhbCAmJiBuZXdWYWwuaXNTdGF0ZSk7XG4gICAgICAgICAgICBpZiAoaXNJbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbDogbmV3VmFsLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3RhdGUnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsOiBuZXdWYWwsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVvZiBuZXdWYWxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb21wYXJlOiBmdW5jdGlvbiAoY3VycmVudFZhbCwgbmV3VmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFZhbCA9PT0gbmV3VmFsO1xuICAgICAgICB9LFxuXG4gICAgICAgIG9uQ2hhbmdlIDogZnVuY3Rpb24obmV3VmFsLCBwcmV2aW91c1ZhbCwgYXR0cmlidXRlTmFtZSl7XG4gICAgICAgICAgICAvLyBpZiB0aGlzIGhhcyBjaGFuZ2VkIHdlIHdhbnQgdG8gYWxzbyBoYW5kbGVcbiAgICAgICAgICAgIC8vIGV2ZW50IHByb3BhZ2F0aW9uXG4gICAgICAgICAgICBpZiAocHJldmlvdXNWYWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3BMaXN0ZW5pbmcocHJldmlvdXNWYWwsICdhbGwnLCB0aGlzLl9nZXRDYWNoZWRFdmVudEJ1YmJsaW5nSGFuZGxlcihhdHRyaWJ1dGVOYW1lKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuZXdWYWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuVG8obmV3VmFsLCAnYWxsJywgdGhpcy5fZ2V0Q2FjaGVkRXZlbnRCdWJibGluZ0hhbmRsZXIoYXR0cmlidXRlTmFtZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLy8gdGhlIGV4dGVuZCBtZXRob2QgdXNlZCB0byBleHRlbmQgcHJvdG90eXBlcywgbWFpbnRhaW4gaW5oZXJpdGFuY2UgY2hhaW5zIGZvciBpbnN0YW5jZW9mXG4vLyBhbmQgYWxsb3cgZm9yIGFkZGl0aW9ucyB0byB0aGUgbW9kZWwgZGVmaW5pdGlvbnMuXG5mdW5jdGlvbiBleHRlbmQocHJvdG9Qcm9wcykge1xuICAgIC8qanNoaW50IHZhbGlkdGhpczp0cnVlKi9cbiAgICB2YXIgcGFyZW50ID0gdGhpcztcbiAgICB2YXIgY2hpbGQ7XG5cbiAgICAvLyBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBuZXcgc3ViY2xhc3MgaXMgZWl0aGVyIGRlZmluZWQgYnkgeW91XG4gICAgLy8gKHRoZSBcImNvbnN0cnVjdG9yXCIgcHJvcGVydHkgaW4geW91ciBgZXh0ZW5kYCBkZWZpbml0aW9uKSwgb3IgZGVmYXVsdGVkXG4gICAgLy8gYnkgdXMgdG8gc2ltcGx5IGNhbGwgdGhlIHBhcmVudCdzIGNvbnN0cnVjdG9yLlxuICAgIGlmIChwcm90b1Byb3BzICYmIHByb3RvUHJvcHMuaGFzT3duUHJvcGVydHkoJ2NvbnN0cnVjdG9yJykpIHtcbiAgICAgICAgY2hpbGQgPSBwcm90b1Byb3BzLmNvbnN0cnVjdG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIEFkZCBzdGF0aWMgcHJvcGVydGllcyB0byB0aGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZnJvbSBwYXJlbnRcbiAgICBhc3NpZ24oY2hpbGQsIHBhcmVudCk7XG5cbiAgICAvLyBTZXQgdGhlIHByb3RvdHlwZSBjaGFpbiB0byBpbmhlcml0IGZyb20gYHBhcmVudGAsIHdpdGhvdXQgY2FsbGluZ1xuICAgIC8vIGBwYXJlbnRgJ3MgY29uc3RydWN0b3IgZnVuY3Rpb24uXG4gICAgdmFyIFN1cnJvZ2F0ZSA9IGZ1bmN0aW9uICgpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9O1xuICAgIFN1cnJvZ2F0ZS5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlO1xuICAgIGNoaWxkLnByb3RvdHlwZSA9IG5ldyBTdXJyb2dhdGUoKTtcblxuICAgIC8vIHNldCBwcm90b3R5cGUgbGV2ZWwgb2JqZWN0c1xuICAgIGNoaWxkLnByb3RvdHlwZS5fZGVyaXZlZCA9ICBhc3NpZ24oe30sIHBhcmVudC5wcm90b3R5cGUuX2Rlcml2ZWQpO1xuICAgIGNoaWxkLnByb3RvdHlwZS5fZGVwcyA9IGFzc2lnbih7fSwgcGFyZW50LnByb3RvdHlwZS5fZGVwcyk7XG4gICAgY2hpbGQucHJvdG90eXBlLl9kZWZpbml0aW9uID0gYXNzaWduKHt9LCBwYXJlbnQucHJvdG90eXBlLl9kZWZpbml0aW9uKTtcbiAgICBjaGlsZC5wcm90b3R5cGUuX2NvbGxlY3Rpb25zID0gYXNzaWduKHt9LCBwYXJlbnQucHJvdG90eXBlLl9jb2xsZWN0aW9ucyk7XG4gICAgY2hpbGQucHJvdG90eXBlLl9jaGlsZHJlbiA9IGFzc2lnbih7fSwgcGFyZW50LnByb3RvdHlwZS5fY2hpbGRyZW4pO1xuICAgIGNoaWxkLnByb3RvdHlwZS5fZGF0YVR5cGVzID0gYXNzaWduKHt9LCBwYXJlbnQucHJvdG90eXBlLl9kYXRhVHlwZXMgfHwgZGF0YVR5cGVzKTtcblxuICAgIC8vIE1peCBpbiBhbGwgcHJvdG90eXBlIHByb3BlcnRpZXMgdG8gdGhlIHN1YmNsYXNzIGlmIHN1cHBsaWVkLlxuICAgIGlmIChwcm90b1Byb3BzKSB7XG4gICAgICAgIHZhciBvbWl0RnJvbUV4dGVuZCA9IFtcbiAgICAgICAgICAgICdkYXRhVHlwZXMnLCAncHJvcHMnLCAnc2Vzc2lvbicsICdkZXJpdmVkJywgJ2NvbGxlY3Rpb25zJywgJ2NoaWxkcmVuJ1xuICAgICAgICBdO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgZGVmID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgaWYgKGRlZi5kYXRhVHlwZXMpIHtcbiAgICAgICAgICAgICAgICBmb3JPd24oZGVmLmRhdGFUeXBlcywgZnVuY3Rpb24gKGRlZiwgbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZC5wcm90b3R5cGUuX2RhdGFUeXBlc1tuYW1lXSA9IGRlZjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkZWYucHJvcHMpIHtcbiAgICAgICAgICAgICAgICBmb3JPd24oZGVmLnByb3BzLCBmdW5jdGlvbiAoZGVmLCBuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZVByb3BlcnR5RGVmaW5pdGlvbihjaGlsZC5wcm90b3R5cGUsIG5hbWUsIGRlZik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGVmLnNlc3Npb24pIHtcbiAgICAgICAgICAgICAgICBmb3JPd24oZGVmLnNlc3Npb24sIGZ1bmN0aW9uIChkZWYsIG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlUHJvcGVydHlEZWZpbml0aW9uKGNoaWxkLnByb3RvdHlwZSwgbmFtZSwgZGVmLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkZWYuZGVyaXZlZCkge1xuICAgICAgICAgICAgICAgIGZvck93bihkZWYuZGVyaXZlZCwgZnVuY3Rpb24gKGRlZiwgbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGVEZXJpdmVkUHJvcGVydHkoY2hpbGQucHJvdG90eXBlLCBuYW1lLCBkZWYpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRlZi5jb2xsZWN0aW9ucykge1xuICAgICAgICAgICAgICAgIGZvck93bihkZWYuY29sbGVjdGlvbnMsIGZ1bmN0aW9uIChjb25zdHJ1Y3RvciwgbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZC5wcm90b3R5cGUuX2NvbGxlY3Rpb25zW25hbWVdID0gY29uc3RydWN0b3I7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGVmLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgZm9yT3duKGRlZi5jaGlsZHJlbiwgZnVuY3Rpb24gKGNvbnN0cnVjdG9yLCBuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLnByb3RvdHlwZS5fY2hpbGRyZW5bbmFtZV0gPSBjb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzc2lnbihjaGlsZC5wcm90b3R5cGUsIG9taXQoZGVmLCBvbWl0RnJvbUV4dGVuZCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IGEgY29udmVuaWVuY2UgcHJvcGVydHkgaW4gY2FzZSB0aGUgcGFyZW50J3MgcHJvdG90eXBlIGlzIG5lZWRlZFxuICAgIC8vIGxhdGVyLlxuICAgIGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59XG5cbkJhc2UuZXh0ZW5kID0gZXh0ZW5kO1xuXG4vLyBPdXIgbWFpbiBleHBvcnRzXG5tb2R1bGUuZXhwb3J0cyA9IEJhc2U7XG4iLCJ2YXIgeGhyID0gcmVxdWlyZSgneGhyJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29yZScpKHhocik7XG4iLCIvKiRBTVBFUlNBTkRfVkVSU0lPTiovXG52YXIgcmVzdWx0ID0gcmVxdWlyZSgnbG9kYXNoL3Jlc3VsdCcpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnbG9kYXNoL2RlZmF1bHRzJyk7XG52YXIgaW5jbHVkZXMgPSByZXF1aXJlKCdsb2Rhc2gvaW5jbHVkZXMnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdsb2Rhc2gvYXNzaWduJyk7XG52YXIgcXMgPSByZXF1aXJlKCdxcycpO1xudmFyIG1lZGlhVHlwZSA9IHJlcXVpcmUoJ21lZGlhLXR5cGUnKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh4aHIpIHtcblxuICAvLyBUaHJvdyBhbiBlcnJvciB3aGVuIGEgVVJMIGlzIG5lZWRlZCwgYW5kIG5vbmUgaXMgc3VwcGxpZWQuXG4gIHZhciB1cmxFcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQSBcInVybFwiIHByb3BlcnR5IG9yIGZ1bmN0aW9uIG11c3QgYmUgc3BlY2lmaWVkJyk7XG4gIH07XG5cbiAgLy8gTWFwIGZyb20gQ1JVRCB0byBIVFRQIGZvciBvdXIgZGVmYXVsdCBgQmFja2JvbmUuc3luY2AgaW1wbGVtZW50YXRpb24uXG4gIHZhciBtZXRob2RNYXAgPSB7XG4gICAgICAnY3JlYXRlJzogJ1BPU1QnLFxuICAgICAgJ3VwZGF0ZSc6ICdQVVQnLFxuICAgICAgJ3BhdGNoJzogICdQQVRDSCcsXG4gICAgICAnZGVsZXRlJzogJ0RFTEVURScsXG4gICAgICAncmVhZCc6ICAgJ0dFVCdcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKG1ldGhvZCwgbW9kZWwsIG9wdGlvbnNJbnB1dCkge1xuICAgICAgLy9Db3B5IHRoZSBvcHRpb25zIG9iamVjdC4gSXQncyB1c2luZyBhc3NpZ24gaW5zdGVhZCBvZiBjbG9uZWRlZXAgYXMgYW4gb3B0aW1pemF0aW9uLlxuICAgICAgLy9UaGUgb25seSBvYmplY3Qgd2UgY291bGQgZXhwZWN0IGluIG9wdGlvbnMgaXMgaGVhZGVycywgd2hpY2ggaXMgc2FmZWx5IHRyYW5zZmVyZWQgYmVsb3cuXG4gICAgICB2YXIgb3B0aW9ucyA9IGFzc2lnbih7fSxvcHRpb25zSW5wdXQpO1xuICAgICAgdmFyIHR5cGUgPSBtZXRob2RNYXBbbWV0aG9kXTtcbiAgICAgIHZhciBoZWFkZXJzID0ge307XG5cbiAgICAgIC8vIERlZmF1bHQgb3B0aW9ucywgdW5sZXNzIHNwZWNpZmllZC5cbiAgICAgIGRlZmF1bHRzKG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSksIHtcbiAgICAgICAgICBlbXVsYXRlSFRUUDogZmFsc2UsXG4gICAgICAgICAgZW11bGF0ZUpTT046IGZhbHNlLFxuICAgICAgICAgIC8vIG92ZXJyaWRlYWJsZSBwcmltYXJpbHkgdG8gZW5hYmxlIHRlc3RpbmdcbiAgICAgICAgICB4aHJJbXBsZW1lbnRhdGlvbjogeGhyXG4gICAgICB9KTtcblxuICAgICAgLy8gRGVmYXVsdCByZXF1ZXN0IG9wdGlvbnMuXG4gICAgICB2YXIgcGFyYW1zID0ge3R5cGU6IHR5cGV9O1xuXG4gICAgICB2YXIgYWpheENvbmZpZyA9IHJlc3VsdChtb2RlbCwgJ2FqYXhDb25maWcnLCB7fSk7XG4gICAgICB2YXIga2V5O1xuICAgICAgLy8gQ29tYmluZSBnZW5lcmF0ZWQgaGVhZGVycyB3aXRoIHVzZXIncyBoZWFkZXJzLlxuICAgICAgaWYgKGFqYXhDb25maWcuaGVhZGVycykge1xuICAgICAgICAgIGZvciAoa2V5IGluIGFqYXhDb25maWcuaGVhZGVycykge1xuICAgICAgICAgICAgICBoZWFkZXJzW2tleS50b0xvd2VyQ2FzZSgpXSA9IGFqYXhDb25maWcuaGVhZGVyc1trZXldO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICBmb3IgKGtleSBpbiBvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgaGVhZGVyc1trZXkudG9Mb3dlckNhc2UoKV0gPSBvcHRpb25zLmhlYWRlcnNba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVsZXRlIG9wdGlvbnMuaGVhZGVycztcbiAgICAgIH1cbiAgICAgIC8vYWpheENvbmZpZyBoYXMgdG8gYmUgbWVyZ2VkIGludG8gcGFyYW1zIGJlZm9yZSBvdGhlciBvcHRpb25zIHRha2UgZWZmZWN0LCBzbyBpdCBpcyBpbiBmYWN0IGEgMmx2bCBkZWZhdWx0XG4gICAgICBhc3NpZ24ocGFyYW1zLCBhamF4Q29uZmlnKTtcbiAgICAgIHBhcmFtcy5oZWFkZXJzID0gaGVhZGVycztcblxuICAgICAgLy8gRW5zdXJlIHRoYXQgd2UgaGF2ZSBhIFVSTC5cbiAgICAgIGlmICghb3B0aW9ucy51cmwpIHtcbiAgICAgICAgICBvcHRpb25zLnVybCA9IHJlc3VsdChtb2RlbCwgJ3VybCcpIHx8IHVybEVycm9yKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IHdlIGhhdmUgdGhlIGFwcHJvcHJpYXRlIHJlcXVlc3QgZGF0YS5cbiAgICAgIGlmIChvcHRpb25zLmRhdGEgPT0gbnVsbCAmJiBtb2RlbCAmJiAobWV0aG9kID09PSAnY3JlYXRlJyB8fCBtZXRob2QgPT09ICd1cGRhdGUnIHx8IG1ldGhvZCA9PT0gJ3BhdGNoJykpIHtcbiAgICAgICAgICBwYXJhbXMuanNvbiA9IG9wdGlvbnMuYXR0cnMgfHwgbW9kZWwudG9KU09OKG9wdGlvbnMpO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBwYXNzZWQgYSBkYXRhIHBhcmFtLCB3ZSBhZGQgaXQgdG8gdGhlIFVSTCBvciBib2R5IGRlcGVuZGluZyBvbiByZXF1ZXN0IHR5cGVcbiAgICAgIGlmIChvcHRpb25zLmRhdGEgJiYgdHlwZSA9PT0gJ0dFVCcpIHtcbiAgICAgICAgICAvLyBtYWtlIHN1cmUgd2UndmUgZ290IGEgJz8nXG4gICAgICAgICAgb3B0aW9ucy51cmwgKz0gaW5jbHVkZXMob3B0aW9ucy51cmwsICc/JykgPyAnJicgOiAnPyc7XG4gICAgICAgICAgb3B0aW9ucy51cmwgKz0gcXMuc3RyaW5naWZ5KG9wdGlvbnMuZGF0YSk7XG4gICAgICAgICAgLy9kZWxldGUgYGRhdGFgIHNvIGB4aHJgIGRvZXNuJ3QgdXNlIGl0IGFzIGEgYm9keVxuICAgICAgICAgIGRlbGV0ZSBvcHRpb25zLmRhdGE7XG4gICAgICB9XG5cbiAgICAgIC8vIEZvciBvbGRlciBzZXJ2ZXJzLCBlbXVsYXRlIEpTT04gYnkgZW5jb2RpbmcgdGhlIHJlcXVlc3QgaW50byBhbiBIVE1MLWZvcm0uXG4gICAgICBpZiAob3B0aW9ucy5lbXVsYXRlSlNPTikge1xuICAgICAgICAgIHBhcmFtcy5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnO1xuICAgICAgICAgIHBhcmFtcy5ib2R5ID0gcGFyYW1zLmpzb24gPyB7bW9kZWw6IHBhcmFtcy5qc29ufSA6IHt9O1xuICAgICAgICAgIGRlbGV0ZSBwYXJhbXMuanNvbjtcbiAgICAgIH1cblxuICAgICAgLy8gRm9yIG9sZGVyIHNlcnZlcnMsIGVtdWxhdGUgSFRUUCBieSBtaW1pY2tpbmcgdGhlIEhUVFAgbWV0aG9kIHdpdGggYF9tZXRob2RgXG4gICAgICAvLyBBbmQgYW4gYFgtSFRUUC1NZXRob2QtT3ZlcnJpZGVgIGhlYWRlci5cbiAgICAgIGlmIChvcHRpb25zLmVtdWxhdGVIVFRQICYmICh0eXBlID09PSAnUFVUJyB8fCB0eXBlID09PSAnREVMRVRFJyB8fCB0eXBlID09PSAnUEFUQ0gnKSkge1xuICAgICAgICAgIHBhcmFtcy50eXBlID0gJ1BPU1QnO1xuICAgICAgICAgIGlmIChvcHRpb25zLmVtdWxhdGVKU09OKSBwYXJhbXMuYm9keS5fbWV0aG9kID0gdHlwZTtcbiAgICAgICAgICBwYXJhbXMuaGVhZGVyc1sneC1odHRwLW1ldGhvZC1vdmVycmlkZSddID0gdHlwZTtcbiAgICAgIH1cblxuICAgICAgLy8gV2hlbiBlbXVsYXRpbmcgSlNPTiwgd2UgdHVybiB0aGUgYm9keSBpbnRvIGEgcXVlcnlzdHJpbmcuXG4gICAgICAvLyBXZSBkbyB0aGlzIGxhdGVyIHRvIGxldCB0aGUgZW11bGF0ZUhUVFAgcnVuIGl0cyBjb3Vyc2UuXG4gICAgICBpZiAob3B0aW9ucy5lbXVsYXRlSlNPTikge1xuICAgICAgICAgIHBhcmFtcy5ib2R5ID0gcXMuc3RyaW5naWZ5KHBhcmFtcy5ib2R5KTtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IHJhdyBYTUxIdHRwUmVxdWVzdCBvcHRpb25zLlxuICAgICAgaWYgKGFqYXhDb25maWcueGhyRmllbGRzKSB7XG4gICAgICAgICAgdmFyIGJlZm9yZVNlbmQgPSBhamF4Q29uZmlnLmJlZm9yZVNlbmQ7XG4gICAgICAgICAgcGFyYW1zLmJlZm9yZVNlbmQgPSBmdW5jdGlvbiAocmVxKSB7XG4gICAgICAgICAgICAgIGFzc2lnbihyZXEsIGFqYXhDb25maWcueGhyRmllbGRzKTtcbiAgICAgICAgICAgICAgaWYgKGJlZm9yZVNlbmQpIHJldHVybiBiZWZvcmVTZW5kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBwYXJhbXMueGhyRmllbGRzID0gYWpheENvbmZpZy54aHJGaWVsZHM7XG4gICAgICB9XG5cbiAgICAgIC8vIFR1cm4gYSBqUXVlcnkuYWpheCBmb3JtYXR0ZWQgcmVxdWVzdCBpbnRvIHhociBjb21wYXRpYmxlXG4gICAgICBwYXJhbXMubWV0aG9kID0gcGFyYW1zLnR5cGU7XG5cbiAgICAgIHZhciBhamF4U2V0dGluZ3MgPSBhc3NpZ24ocGFyYW1zLCBvcHRpb25zKTtcblxuICAgICAgLy8gTWFrZSB0aGUgcmVxdWVzdC4gVGhlIGNhbGxiYWNrIGV4ZWN1dGVzIGZ1bmN0aW9ucyB0aGF0IGFyZSBjb21wYXRpYmxlXG4gICAgICAvLyBXaXRoIGpRdWVyeS5hamF4J3Mgc3ludGF4LlxuICAgICAgdmFyIHJlcXVlc3QgPSBvcHRpb25zLnhockltcGxlbWVudGF0aW9uKGFqYXhTZXR0aW5ncywgZnVuY3Rpb24gKGVyciwgcmVzcCwgYm9keSkge1xuICAgICAgICAgIGlmIChlcnIgfHwgcmVzcC5zdGF0dXNDb2RlID49IDQwMCkge1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gSlNPTi5wYXJzZShib2R5KTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSl7fVxuICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSAoZXJyPyBlcnIubWVzc2FnZSA6IChib2R5IHx8IFwiSFRUUFwiK3Jlc3Auc3RhdHVzQ29kZSkpO1xuICAgICAgICAgICAgICAgICAgb3B0aW9ucy5lcnJvcihyZXNwLCAnZXJyb3InLCBtZXNzYWdlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFBhcnNlIGJvZHkgYXMgSlNPTlxuICAgICAgICAgICAgICB2YXIgYWNjZXB0ID0gbWVkaWFUeXBlLmZyb21TdHJpbmcocGFyYW1zLmhlYWRlcnMuYWNjZXB0KTtcbiAgICAgICAgICAgICAgdmFyIHBhcnNlSnNvbiA9IGFjY2VwdC5pc1ZhbGlkKCkgJiYgYWNjZXB0LnR5cGUgPT09ICdhcHBsaWNhdGlvbicgJiYgKGFjY2VwdC5zdWJ0eXBlID09PSAnanNvbicgfHwgYWNjZXB0LnN1ZmZpeCA9PT0gJ2pzb24nKTtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyAmJiBib2R5ICE9PSAnJyAmJiAoIXBhcmFtcy5oZWFkZXJzLmFjY2VwdCB8fCBwYXJzZUpzb24pKSB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSBKU09OLnBhcnNlKGJvZHkpO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZXJyb3IpIG9wdGlvbnMuZXJyb3IocmVzcCwgJ2Vycm9yJywgZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFsd2F5cykgb3B0aW9ucy5hbHdheXMoZXJyLCByZXNwLCBib2R5KTtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3VjY2Vzcykgb3B0aW9ucy5zdWNjZXNzKGJvZHksICdzdWNjZXNzJywgcmVzcCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRpb25zLmFsd2F5cykgb3B0aW9ucy5hbHdheXMoZXJyLCByZXNwLCBib2R5KTtcbiAgICAgIH0pO1xuICAgICAgaWYgKG1vZGVsKSBtb2RlbC50cmlnZ2VyKCdyZXF1ZXN0JywgbW9kZWwsIHJlcXVlc3QsIG9wdGlvbnNJbnB1dCwgYWpheFNldHRpbmdzKTtcbiAgICAgIHJlcXVlc3QuYWpheFNldHRpbmdzID0gYWpheFNldHRpbmdzO1xuICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gIH07XG59O1xuIiwiLyokQU1QRVJTQU5EX1ZFUlNJT04qL1xuZnVuY3Rpb24gVmlld1N3aXRjaGVyKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zIHx8IChvcHRpb25zID0ge30pO1xuICAgIHRoaXMuZWwgPSBvcHRpb25zLmVsO1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgICBoaWRlOiBudWxsLFxuICAgICAgICBzaG93OiBudWxsLFxuICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgcHJlcGVuZDogZmFsc2UsXG4gICAgICAgIHdhaXRGb3JSZW1vdmU6IGZhbHNlLFxuICAgICAgICBhdXRvUmVuZGVyOiB0cnVlXG4gICAgfTtcbiAgICBmb3IgKHZhciBpdGVtIGluIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmhhc093blByb3BlcnR5KGl0ZW0pKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ1tpdGVtXSA9IG9wdGlvbnNbaXRlbV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdGhpcy5fc2V0Q3VycmVudChvcHRpb25zLnZpZXcpO1xuICAgIGlmICh0aGlzLmNvbmZpZy5hdXRvUmVuZGVyKSB0aGlzLnJlbmRlcigpO1xufVxuXG5WaWV3U3dpdGNoZXIucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBwcmV2ID0gdGhpcy5wcmV2aW91cyA9IHRoaXMuY3VycmVudDtcblxuICAgIGlmIChwcmV2ID09PSB2aWV3KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcud2FpdEZvclJlbW92ZSkge1xuICAgICAgICB0aGlzLm5leHQgPSB2aWV3O1xuICAgICAgICB0aGlzLl9oaWRlKHByZXYsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLm5leHQgPT09IHZpZXcpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgc2VsZi5uZXh0O1xuICAgICAgICAgICAgICAgIHNlbGYuX3Nob3codmlldyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2hpZGUocHJldik7XG4gICAgICAgIHRoaXMuX3Nob3codmlldyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuVmlld1N3aXRjaGVyLnByb3RvdHlwZS5fc2V0Q3VycmVudCA9IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgdGhpcy5jdXJyZW50ID0gdmlldztcbiAgICBpZiAodmlldykgdGhpcy5fcmVnaXN0ZXJSZW1vdmVMaXN0ZW5lcih2aWV3KTtcbiAgICB2YXIgZW1wdHlDYiA9IHRoaXMuY29uZmlnLmVtcHR5O1xuICAgIGlmIChlbXB0eUNiICYmICF0aGlzLmN1cnJlbnQpIHtcbiAgICAgICAgZW1wdHlDYigpO1xuICAgIH1cbiAgICByZXR1cm4gdmlldztcbn07XG5cblZpZXdTd2l0Y2hlci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB0aGlzLl9oaWRlKHRoaXMuY3VycmVudCwgY2IpO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLy8gSWYgdGhlIHZpZXcgc3dpdGNoZXIgaXRzZWxmIGlzIHJlbW92ZWQsIHJlbW92ZSBpdHMgY2hpbGQgdG8gYXZvaWQgbWVtb3J5IGxlYWtzXG5WaWV3U3dpdGNoZXIucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50KSB0aGlzLmN1cnJlbnQucmVtb3ZlKCk7XG4gICAgaWYgKHRoaXMucHJldmlvdXMpIHRoaXMucHJldmlvdXMucmVtb3ZlKCk7XG4gICAgaWYgKHRoaXMuZWwgJiYgdGhpcy5lbC5wYXJlbnROb2RlKSB0aGlzLmVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5lbCk7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5WaWV3U3dpdGNoZXIucHJvdG90eXBlLl9zaG93ID0gZnVuY3Rpb24gKHZpZXcpIHtcbiAgICB2YXIgY3VzdG9tU2hvdyA9IHRoaXMuY29uZmlnLnNob3c7XG4gICAgdGhpcy5fc2V0Q3VycmVudCh2aWV3KTtcbiAgICB0aGlzLl9yZW5kZXIodmlldyk7XG4gICAgaWYgKGN1c3RvbVNob3cpIGN1c3RvbVNob3codmlldyk7XG59O1xuXG5WaWV3U3dpdGNoZXIucHJvdG90eXBlLl9yZWdpc3RlclJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKHZpZXcpIHtcbiAgICBpZiAodmlldyAmJiB2aWV3Lm9uY2UpIHZpZXcub25jZSgncmVtb3ZlJywgdGhpcy5fb25WaWV3UmVtb3ZlLCB0aGlzKTtcbn07XG5cblZpZXdTd2l0Y2hlci5wcm90b3R5cGUuX29uVmlld1JlbW92ZSA9IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgdmFyIGVtcHR5Q2IgPSB0aGlzLmNvbmZpZy5lbXB0eTtcbiAgICBpZiAodGhpcy5jdXJyZW50ID09PSB2aWV3KSB7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICAgIGlmIChlbXB0eUNiICYmICF0aGlzLmN1cnJlbnQpIHtcbiAgICAgICAgZW1wdHlDYigpO1xuICAgIH1cbn07XG5cblZpZXdTd2l0Y2hlci5wcm90b3R5cGUuX3JlbmRlciA9IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgaWYgKCF0aGlzLmVsKSByZXR1cm47XG4gICAgaWYgKCF2aWV3LnJlbmRlcmVkKSB2aWV3LnJlbmRlcih7Y29udGFpbmVyRWw6IHRoaXMuZWx9KTtcbiAgICBpZiAoIXZpZXcuaW5zZXJ0U2VsZikge1xuICAgICAgICBpZiAodGhpcy5jb25maWcucHJlcGVuZCkge1xuICAgICAgICAgICAgdGhpcy5lbC5pbnNlcnRCZWZvcmUodmlldy5lbCwgdGhpcy5lbC5maXJzdENoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZWwuYXBwZW5kQ2hpbGQodmlldy5lbCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5WaWV3U3dpdGNoZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50ICYmICF0aGlzLl9yZW5kZXJlZCkge1xuICAgICAgICB0aGlzLl9yZW5kZXIodGhpcy5jdXJyZW50KTtcbiAgICB9XG4gICAgLy9zZXQgcmVuZGVyZWQsIGVsIGV4aXN0cyBldmVuIGlmIGEgY3VycmVudCB2aWV3IHdhcyBub3QgaW5zZXJ0ZWQvYXBwZW5kZWRcbiAgICB0aGlzLl9yZW5kZXJlZCA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5WaWV3U3dpdGNoZXIucHJvdG90eXBlLl9oaWRlID0gZnVuY3Rpb24gKHZpZXcsIGNiKSB7XG4gICAgdmFyIGN1c3RvbUhpZGUgPSB0aGlzLmNvbmZpZy5oaWRlO1xuICAgIGlmICghdmlldykgcmV0dXJuIGNiICYmIGNiKCk7XG4gICAgaWYgKGN1c3RvbUhpZGUpIHtcbiAgICAgICAgaWYgKGN1c3RvbUhpZGUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBjdXN0b21IaWRlKHZpZXcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2aWV3LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChjYikgY2IoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3VzdG9tSGlkZSh2aWV3KTtcbiAgICAgICAgICAgIHZpZXcucmVtb3ZlKCk7XG4gICAgICAgICAgICBpZiAoY2IpIGNiKCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB2aWV3LnJlbW92ZSgpO1xuICAgICAgICBpZiAoY2IpIGNiKCk7XG4gICAgfVxufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IFZpZXdTd2l0Y2hlcjtcbiIsIi8qJEFNUEVSU0FORF9WRVJTSU9OKi9cbnZhciBTdGF0ZSA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1zdGF0ZScpO1xudmFyIENvbGxlY3Rpb25WaWV3ID0gcmVxdWlyZSgnYW1wZXJzYW5kLWNvbGxlY3Rpb24tdmlldycpO1xudmFyIGRvbWlmeSA9IHJlcXVpcmUoJ2RvbWlmeScpO1xudmFyIHVuaXF1ZUlkID0gcmVxdWlyZShcImxvZGFzaC91bmlxdWVJZFwiKTtcbnZhciBwaWNrID0gcmVxdWlyZShcImxvZGFzaC9waWNrXCIpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCJsb2Rhc2gvYXNzaWduXCIpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKFwibG9kYXNoL2ZvckVhY2hcIik7XG52YXIgcmVzdWx0ID0gcmVxdWlyZShcImxvZGFzaC9yZXN1bHRcIik7XG52YXIgbGFzdCA9IHJlcXVpcmUoXCJsb2Rhc2gvbGFzdFwiKTtcbnZhciBpc1N0cmluZyA9IHJlcXVpcmUoXCJsb2Rhc2gvaXNTdHJpbmdcIik7XG52YXIgYmluZCA9IHJlcXVpcmUoXCJsb2Rhc2gvYmluZFwiKTtcbnZhciBmbGF0dGVuID0gcmVxdWlyZShcImxvZGFzaC9mbGF0dGVuXCIpO1xudmFyIGludm9rZU1hcCA9IHJlcXVpcmUoXCJsb2Rhc2gvaW52b2tlTWFwXCIpO1xudmFyIGV2ZW50cyA9IHJlcXVpcmUoJ2V2ZW50cy1taXhpbicpO1xudmFyIG1hdGNoZXMgPSByZXF1aXJlKCdtYXRjaGVzLXNlbGVjdG9yJyk7XG52YXIgYmluZGluZ3MgPSByZXF1aXJlKCdhbXBlcnNhbmQtZG9tLWJpbmRpbmdzJyk7XG52YXIgZ2V0UGF0aCA9IHJlcXVpcmUoJ2xvZGFzaC9nZXQnKTtcblxuZnVuY3Rpb24gVmlldyhhdHRycykge1xuICAgIHRoaXMuY2lkID0gdW5pcXVlSWQoJ3ZpZXcnKTtcbiAgICBhdHRycyB8fCAoYXR0cnMgPSB7fSk7XG4gICAgdmFyIHBhcmVudCA9IGF0dHJzLnBhcmVudDtcbiAgICBkZWxldGUgYXR0cnMucGFyZW50O1xuICAgIEJhc2VTdGF0ZS5jYWxsKHRoaXMsIGF0dHJzLCB7aW5pdDogZmFsc2UsIHBhcmVudDogcGFyZW50fSk7XG4gICAgdGhpcy5vbignY2hhbmdlOmVsJywgdGhpcy5faGFuZGxlRWxlbWVudENoYW5nZSwgdGhpcyk7XG4gICAgdGhpcy5fdXBzZXJ0QmluZGluZ3MoKTtcbiAgICB0aGlzLnRlbXBsYXRlID0gYXR0cnMudGVtcGxhdGUgfHwgdGhpcy50ZW1wbGF0ZTtcbiAgICB0aGlzLl9jYWNoZS5yZW5kZXJlZCA9IGZhbHNlOyAvLyBwcmVwIGByZW5kZXJlZGAgZGVyaXZlZCBjYWNoZSBpbW1lZGlhdGVseVxuICAgIHRoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh0aGlzLmF1dG9SZW5kZXIgJiYgdGhpcy50ZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cbn1cblxudmFyIEJhc2VTdGF0ZSA9IFN0YXRlLmV4dGVuZCh7XG4gICAgZGF0YVR5cGVzOiB7XG4gICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ZhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbDogbmV3VmFsLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBuZXdWYWwgaW5zdGFuY2VvZiBFbGVtZW50ID8gJ2VsZW1lbnQnIDogdHlwZW9mIG5ld1ZhbFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGFyZTogZnVuY3Rpb24gKGVsMSwgZWwyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsMSA9PT0gZWwyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb2xsZWN0aW9uOiB7XG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdWYWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB2YWw6IG5ld1ZhbCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogbmV3VmFsICYmIG5ld1ZhbC5pc0NvbGxlY3Rpb24gPyAnY29sbGVjdGlvbicgOiB0eXBlb2YgbmV3VmFsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wYXJlOiBmdW5jdGlvbiAoY3VycmVudFZhbCwgbmV3VmFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRWYWwgPT09IG5ld1ZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgbW9kZWw6ICdzdGF0ZScsXG4gICAgICAgIGVsOiAnZWxlbWVudCcsXG4gICAgICAgIGNvbGxlY3Rpb246ICdjb2xsZWN0aW9uJyxcbiAgICB9LFxuICAgIHNlc3Npb246IHtcbiAgICAgICAgX3JlbmRlcmVkOiBbJ2Jvb2xlYW4nLCB0cnVlLCBmYWxzZV1cbiAgICB9LFxuICAgIGRlcml2ZWQ6IHtcbiAgICAgICAgaGFzRGF0YToge1xuICAgICAgICAgICAgZGVwczogWydtb2RlbCddLFxuICAgICAgICAgICAgZm46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISF0aGlzLm1vZGVsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZW5kZXJlZDoge1xuICAgICAgICAgICAgZGVwczogWydfcmVuZGVyZWQnXSxcbiAgICAgICAgICAgIGZuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmVuZGVyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdyZW5kZXInLCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcigncmVtb3ZlJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cblZpZXcucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlU3RhdGUucHJvdG90eXBlKTtcblxudmFyIHF1ZXJ5Tm9FbE1zZyA9ICdRdWVyeSBjYW5ub3QgYmUgcGVyZm9ybWVkIGFzIHRoaXMuZWwgaXMgbm90IGRlZmluZWQuIEVuc3VyZSB0aGF0IHRoZSB2aWV3IGhhcyBiZWVuIHJlbmRlcmVkLic7XG5cbi8vIFNldCB1cCBhbGwgaW5oZXJpdGFibGUgcHJvcGVydGllcyBhbmQgbWV0aG9kcy5cbmFzc2lnbihWaWV3LnByb3RvdHlwZSwge1xuICAgIC8vICMjIHF1ZXJ5XG4gICAgLy8gR2V0IGFuIHNpbmdsZSBlbGVtZW50IGJhc2VkIG9uIENTUyBzZWxlY3RvciBzY29wZWQgdG8gdGhpcy5lbFxuICAgIC8vIGlmIHlvdSBwYXNzIGFuIGVtcHR5IHN0cmluZyBpdCByZXR1cm4gYHRoaXMuZWxgLlxuICAgIC8vIElmIHlvdSBwYXNzIGFuIGVsZW1lbnQgd2UganVzdCByZXR1cm4gaXQgYmFjay5cbiAgICAvLyBUaGlzIGxldHMgdXMgdXNlIGBnZXRgIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB1c2Vyc1xuICAgIC8vIGNhbiBwYXNzIGEgc2VsZWN0b3Igb3IgYW4gYWxyZWFkeSBzZWxlY3RlZCBlbGVtZW50LlxuICAgIHF1ZXJ5OiBmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocXVlcnlOb0VsTXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNlbGVjdG9yKSByZXR1cm4gdGhpcy5lbDtcbiAgICAgICAgaWYgKHR5cGVvZiBzZWxlY3RvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmIChtYXRjaGVzKHRoaXMuZWwsIHNlbGVjdG9yKSkgcmV0dXJuIHRoaXMuZWw7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKSB8fCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yO1xuICAgIH0sXG5cbiAgICAvLyAjIyBxdWVyeUFsbFxuICAgIC8vIFJldHVybnMgYW4gYXJyYXkgb2YgZWxlbWVudHMgYmFzZWQgb24gQ1NTIHNlbGVjdG9yIHNjb3BlZCB0byB0aGlzLmVsXG4gICAgLy8gaWYgeW91IHBhc3MgYW4gZW1wdHkgc3RyaW5nIGl0IHJldHVybiBgdGhpcy5lbGAuIEFsc28gaW5jbHVkZXMgcm9vdFxuICAgIC8vIGVsZW1lbnQuXG4gICAgcXVlcnlBbGw6IGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgICAgICBpZiAoIXRoaXMuZWwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihxdWVyeU5vRWxNc2cpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2VsZWN0b3IpIHJldHVybiBbdGhpcy5lbF07XG4gICAgICAgIHZhciByZXMgPSBbXTtcbiAgICAgICAgaWYgKG1hdGNoZXModGhpcy5lbCwgc2VsZWN0b3IpKSByZXMucHVzaCh0aGlzLmVsKTtcbiAgICAgICAgcmV0dXJuIHJlcy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5lbC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkpO1xuICAgIH0sXG5cbiAgICAvLyAjIyBxdWVyeUJ5SG9va1xuICAgIC8vIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgZmV0Y2hpbmcgZWxlbWVudCBieSBpdCdzIGBkYXRhLWhvb2tgIGF0dHJpYnV0ZS5cbiAgICAvLyBBbHNvIHRyaWVzIHRvIG1hdGNoIGFnYWluc3Qgcm9vdCBlbGVtZW50LlxuICAgIC8vIEFsc28gc3VwcG9ydHMgbWF0Y2hpbmcgJ29uZScgb2Ygc2V2ZXJhbCBzcGFjZSBzZXBhcmF0ZWQgaG9va3MuXG4gICAgcXVlcnlCeUhvb2s6IGZ1bmN0aW9uIChob29rKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5KCdbZGF0YS1ob29rfj1cIicgKyBob29rICsgJ1wiXScpO1xuICAgIH0sXG5cbiAgICAvLyAjIyBxdWVyeUFsbEJ5SG9va1xuICAgIC8vIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgZmV0Y2hpbmcgYWxsIGVsZW1lbnRzIGJ5IHRoZWlyJ3MgYGRhdGEtaG9va2AgYXR0cmlidXRlLlxuICAgIHF1ZXJ5QWxsQnlIb29rOiBmdW5jdGlvbiAoaG9vaykge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVyeUFsbCgnW2RhdGEtaG9va349XCInICsgaG9vayArICdcIl0nKTtcbiAgICB9LFxuXG4gICAgLy8gSW5pdGlhbGl6ZSBpcyBhbiBlbXB0eSBmdW5jdGlvbiBieSBkZWZhdWx0LiBPdmVycmlkZSBpdCB3aXRoIHlvdXIgb3duXG4gICAgLy8gaW5pdGlhbGl6YXRpb24gbG9naWMuXG4gICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKCkge30sXG5cbiAgICAvLyAqKnJlbmRlcioqIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIHRoYXQgeW91ciB2aWV3IGNhbiBvdmVycmlkZS4gSXRzIGpvYiBpc1xuICAgIC8vIHRvIHBvcHVsYXRlIGl0cyBlbGVtZW50IChgdGhpcy5lbGApLCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBIVE1MLlxuICAgIF9yZW5kZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fdXBzZXJ0QmluZGluZ3MoKTtcbiAgICAgICAgdGhpcy5yZW5kZXJXaXRoVGVtcGxhdGUodGhpcyk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8vIFJlbW92ZXMgdGhpcyB2aWV3IGJ5IHRha2luZyB0aGUgZWxlbWVudCBvdXQgb2YgdGhlIERPTSwgYW5kIHJlbW92aW5nIGFueVxuICAgIC8vIGFwcGxpY2FibGUgZXZlbnRzIGxpc3RlbmVycy5cbiAgICBfcmVtb3ZlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmVsICYmIHRoaXMuZWwucGFyZW50Tm9kZSkgdGhpcy5lbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWwpO1xuICAgICAgICB0aGlzLl9yZW5kZXJlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9kb3duc2VydEJpbmRpbmdzKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyBDaGFuZ2UgdGhlIHZpZXcncyBlbGVtZW50IChgdGhpcy5lbGAgcHJvcGVydHkpLCBpbmNsdWRpbmcgZXZlbnRcbiAgICAvLyByZS1kZWxlZ2F0aW9uLlxuICAgIF9oYW5kbGVFbGVtZW50Q2hhbmdlOiBmdW5jdGlvbiAoZWxlbWVudCwgZGVsZWdhdGUpIHtcbiAgICAgICAgaWYgKHRoaXMuZXZlbnRNYW5hZ2VyKSB0aGlzLmV2ZW50TWFuYWdlci51bmJpbmQoKTtcbiAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIgPSBldmVudHModGhpcy5lbCwgdGhpcyk7XG4gICAgICAgIHRoaXMuZGVsZWdhdGVFdmVudHMoKTtcbiAgICAgICAgdGhpcy5fYXBwbHlCaW5kaW5nc0ZvcktleSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLy8gU2V0IGNhbGxiYWNrcywgd2hlcmUgYHRoaXMuZXZlbnRzYCBpcyBhIGhhc2ggb2ZcbiAgICAvL1xuICAgIC8vICp7XCJldmVudCBzZWxlY3RvclwiOiBcImNhbGxiYWNrXCJ9KlxuICAgIC8vXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICAnbW91c2Vkb3duIC50aXRsZSc6ICAnZWRpdCcsXG4gICAgLy8gICAgICAgJ2NsaWNrIC5idXR0b24nOiAgICAgJ3NhdmUnLFxuICAgIC8vICAgICAgICdjbGljayAub3Blbic6ICAgICAgIGZ1bmN0aW9uIChlKSB7IC4uLiB9XG4gICAgLy8gICAgIH1cbiAgICAvL1xuICAgIC8vIHBhaXJzLiBDYWxsYmFja3Mgd2lsbCBiZSBib3VuZCB0byB0aGUgdmlldywgd2l0aCBgdGhpc2Agc2V0IHByb3Blcmx5LlxuICAgIC8vIFVzZXMgZXZlbnQgZGVsZWdhdGlvbiBmb3IgZWZmaWNpZW5jeS5cbiAgICAvLyBPbWl0dGluZyB0aGUgc2VsZWN0b3IgYmluZHMgdGhlIGV2ZW50IHRvIGB0aGlzLmVsYC5cbiAgICAvLyBUaGlzIG9ubHkgd29ya3MgZm9yIGRlbGVnYXRlLWFibGUgZXZlbnRzOiBub3QgYGZvY3VzYCwgYGJsdXJgLCBhbmRcbiAgICAvLyBub3QgYGNoYW5nZWAsIGBzdWJtaXRgLCBhbmQgYHJlc2V0YCBpbiBJbnRlcm5ldCBFeHBsb3Jlci5cbiAgICBkZWxlZ2F0ZUV2ZW50czogZnVuY3Rpb24gKGV2ZW50cykge1xuICAgICAgICBpZiAoIShldmVudHMgfHwgKGV2ZW50cyA9IHJlc3VsdCh0aGlzLCAnZXZlbnRzJykpKSkgcmV0dXJuIHRoaXM7XG4gICAgICAgIHRoaXMudW5kZWxlZ2F0ZUV2ZW50cygpO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gZXZlbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50TWFuYWdlci5iaW5kKGtleSwgZXZlbnRzW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyBDbGVhcnMgYWxsIGNhbGxiYWNrcyBwcmV2aW91c2x5IGJvdW5kIHRvIHRoZSB2aWV3IHdpdGggYGRlbGVnYXRlRXZlbnRzYC5cbiAgICAvLyBZb3UgdXN1YWxseSBkb24ndCBuZWVkIHRvIHVzZSB0aGlzLCBidXQgbWF5IHdpc2ggdG8gaWYgeW91IGhhdmUgbXVsdGlwbGVcbiAgICAvLyBCYWNrYm9uZSB2aWV3cyBhdHRhY2hlZCB0byB0aGUgc2FtZSBET00gZWxlbWVudC5cbiAgICB1bmRlbGVnYXRlRXZlbnRzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLnVuYmluZCgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLy8gIyMgcmVnaXN0ZXJTdWJ2aWV3XG4gICAgLy8gUGFzcyBpdCBhIHZpZXcuIFRoaXMgY2FuIGJlIGFueXRoaW5nIHdpdGggYSBgcmVtb3ZlYCBtZXRob2RcbiAgICByZWdpc3RlclN1YnZpZXc6IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgICAgIC8vIFN0b3JhZ2UgZm9yIG91ciBzdWJ2aWV3cy5cbiAgICAgICAgdGhpcy5fc3Vidmlld3MgPSB0aGlzLl9zdWJ2aWV3cyB8fCBbXTtcbiAgICAgICAgdGhpcy5fc3Vidmlld3MucHVzaCh2aWV3KTtcbiAgICAgICAgLy8gc2V0IHRoZSBwYXJlbnQgcmVmZXJlbmNlIGlmIGl0IGhhcyBub3QgYmVlbiBzZXRcbiAgICAgICAgaWYgKCF2aWV3LnBhcmVudCkgdmlldy5wYXJlbnQgPSB0aGlzO1xuICAgICAgICByZXR1cm4gdmlldztcbiAgICB9LFxuXG4gICAgLy8gIyMgcmVuZGVyU3Vidmlld1xuICAgIC8vIFBhc3MgaXQgYSB2aWV3IGluc3RhbmNlIGFuZCBhIGNvbnRhaW5lciBlbGVtZW50XG4gICAgLy8gdG8gcmVuZGVyIGl0IGluLiBJdCdzIGByZW1vdmVgIG1ldGhvZCB3aWxsIGJlIGNhbGxlZFxuICAgIC8vIHdoZW4gdGhlIHBhcmVudCB2aWV3IGlzIGRlc3Ryb3llZC5cbiAgICByZW5kZXJTdWJ2aWV3OiBmdW5jdGlvbiAodmlldywgY29udGFpbmVyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29udGFpbmVyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29udGFpbmVyID0gdGhpcy5xdWVyeShjb250YWluZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29udGFpbmVyKSBjb250YWluZXIgPSB0aGlzLmVsO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyU3Vidmlldyh2aWV3KTtcbiAgICAgICAgdmlldy5yZW5kZXIoKTtcbiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHZpZXcuZWwpO1xuICAgICAgICByZXR1cm4gdmlldztcbiAgICB9LFxuXG4gICAgX2FwcGx5QmluZGluZ3NGb3JLZXk6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIGlmICghdGhpcy5lbCkgcmV0dXJuO1xuICAgICAgICB2YXIgZm5zID0gdGhpcy5fcGFyc2VkQmluZGluZ3MuZ2V0R3JvdXBlZChuYW1lKTtcbiAgICAgICAgdmFyIGl0ZW07XG4gICAgICAgIGZvciAoaXRlbSBpbiBmbnMpIHtcbiAgICAgICAgICAgIGZuc1tpdGVtXS5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKHRoaXMuZWwsIGdldFBhdGgodGhpcywgaXRlbSksIGxhc3QoaXRlbS5zcGxpdCgnLicpKSk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdGlhbGl6ZUJpbmRpbmdzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5iaW5kaW5ncykgcmV0dXJuO1xuICAgICAgICB0aGlzLm9uKCdhbGwnLCBmdW5jdGlvbiAoZXZlbnROYW1lKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnROYW1lLnNsaWNlKDAsIDcpID09PSAnY2hhbmdlOicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBseUJpbmRpbmdzRm9yS2V5KGV2ZW50TmFtZS5zcGxpdCgnOicpWzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfSxcblxuICAgIC8vICMjIF9pbml0aWFsaXplU3Vidmlld3NcbiAgICAvLyB0aGlzIGlzIGNhbGxlZCBhdCBzZXR1cCBhbmQgZ3JhYnMgZGVjbGFyZWQgc3Vidmlld3NcbiAgICBfaW5pdGlhbGl6ZVN1YnZpZXdzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5zdWJ2aWV3cykgcmV0dXJuO1xuICAgICAgICBmb3IgKHZhciBpdGVtIGluIHRoaXMuc3Vidmlld3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcnNlU3Vidmlldyh0aGlzLnN1YnZpZXdzW2l0ZW1dLCBpdGVtKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyAjIyBfcGFyc2VTdWJ2aWV3XG4gICAgLy8gaGVscGVyIGZvciBwYXJzaW5nIG91dCB0aGUgc3VidmlldyBkZWNsYXJhdGlvbiBhbmQgcmVnaXN0ZXJpbmdcbiAgICAvLyB0aGUgYHdhaXRGb3JgIGlmIG5lZWQgYmUuXG4gICAgX3BhcnNlU3VidmlldzogZnVuY3Rpb24gKHN1YnZpZXcsIG5hbWUpIHtcbiAgICAgICAgLy9iYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zLCB3aGVuIGBjb250YWluZXJgIHdhcyBhIHZhbGlkIHByb3BlcnR5ICgjMTE0KVxuICAgICAgICBpZiAoc3Vidmlldy5jb250YWluZXIpIHtcbiAgICAgICAgICAgIHN1YnZpZXcuc2VsZWN0b3IgPSBzdWJ2aWV3LmNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb3B0cyA9IHRoaXMuX3BhcnNlU3Vidmlld09wdHMoc3Vidmlldyk7XG5cbiAgICAgICAgZnVuY3Rpb24gYWN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGVsLCBzdWJ2aWV3O1xuICAgICAgICAgICAgLy8gaWYgbm90IHJlbmRlcmVkIG9yIHdlIGNhbid0IGZpbmQgb3VyIGVsZW1lbnQsIHN0b3AgaGVyZS5cbiAgICAgICAgICAgIGlmICghdGhpcy5lbCB8fCAhKGVsID0gdGhpcy5xdWVyeShvcHRzLnNlbGVjdG9yKSkpIHJldHVybjtcbiAgICAgICAgICAgIGlmICghb3B0cy53YWl0Rm9yIHx8IGdldFBhdGgodGhpcywgb3B0cy53YWl0Rm9yKSkge1xuICAgICAgICAgICAgICAgIHN1YnZpZXcgPSB0aGlzW25hbWVdID0gb3B0cy5wcmVwYXJlVmlldy5jYWxsKHRoaXMsIGVsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXN1YnZpZXcuZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJTdWJ2aWV3KHN1YnZpZXcsIGVsKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdWJ2aWV3LnJlbmRlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyU3VidmlldyhzdWJ2aWV3KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoJ2NoYW5nZScsIGFjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2UgbGlzdGVuIGZvciBtYWluIGBjaGFuZ2VgIGl0ZW1zXG4gICAgICAgIHRoaXMub24oJ2NoYW5nZScsIGFjdGlvbiwgdGhpcyk7XG4gICAgfSxcblxuICAgIC8vIFBhcnNlcyB0aGUgZGVjbGFyYXRpdmUgc3VidmlldyBkZWZpbml0aW9uLlxuICAgIC8vIFlvdSBtYXkgb3ZlcmxvYWQgdGhpcyBtZXRob2QgdG8gY3JlYXRlIHlvdXIgb3duIGRlY2xhcmF0aXZlIHN1YnZpZXcgc3R5bGUuXG4gICAgLy8gWW91IG11c3QgcmV0dXJuIGFuIG9iamVjdCB3aXRoIG1lbWJlcnMgJ3NlbGVjdG9yJywgJ3dhaXRGb3InIGFuZCAncHJlcGFyZVZpZXcnLlxuICAgIC8vIHdhaXRGb3IgaXMgdHJpZ2dlZCBvbiB0aGUgdmlldyAnY2hhbmdlJyBldmVudCBhbmQgc28gb25lIHdheSB0byBleHRlbmQgdGhlIGRlZmVycmVkIHZpZXdcbiAgICAvLyBjb25zdHJ1Y3Rpb24gaXMgdG8gYWRkIGFuIGFkZGl0aW9uYWwgcHJvcGVydHkgKHByb3BzKSB0byB0aGUgdmlldy4gVGhlbiBzZXR0aW5nIHRoaXMgcHJvcGVydHlcbiAgICAvLyB3aWxsIHNhdGlzZnkgdGhlIHdhaXRGb3IgY29uZGl0aW9uLiBZb3UgY2FuIHRoZW4gZXh0ZW5kIHRoZSBwcmVwYXJlVmlldyBmdW5jdGlvbiB0byBwYXNzIGluXG4gICAgLy8gYWRkaXRpb25hbCBkYXRhIGZyb20gdGhlIHBhcmVudCB2aWV3LiBUaGlzIGNhbiBhbGxvdyB5b3UgdG8gaGF2ZSBtdWx0aS1zdGFnZSByZW5kZXJpbmcgb2ZcbiAgICAvLyBjdXN0b20gZGF0YSBmb3JtYXRzIGFuZCB0byBkZWNsYXJhdGl2ZWx5IGRlZmluZS5cbiAgICBfcGFyc2VTdWJ2aWV3T3B0czogZnVuY3Rpb24gKHN1YnZpZXcpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB2YXIgb3B0cyA9IHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiBzdWJ2aWV3LnNlbGVjdG9yIHx8ICdbZGF0YS1ob29rPVwiJyArIHN1YnZpZXcuaG9vayArICdcIl0nLFxuICAgICAgICAgICAgd2FpdEZvcjogc3Vidmlldy53YWl0Rm9yIHx8ICcnLFxuICAgICAgICAgICAgcHJlcGFyZVZpZXc6IHN1YnZpZXcucHJlcGFyZVZpZXcgfHwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgc3Vidmlldy5jb25zdHJ1Y3Rvcih7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogc2VsZlxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gb3B0cztcbiAgICB9LFxuXG4gICAgLy8gU2hvcnRjdXQgZm9yIGRvaW5nIGV2ZXJ5dGhpbmcgd2UgbmVlZCB0byBkbyB0b1xuICAgIC8vIHJlbmRlciBhbmQgZnVsbHkgcmVwbGFjZSBjdXJyZW50IHJvb3QgZWxlbWVudC5cbiAgICAvLyBFaXRoZXIgZGVmaW5lIGEgYHRlbXBsYXRlYCBwcm9wZXJ0eSBvZiB5b3VyIHZpZXdcbiAgICAvLyBvciBwYXNzIGluIGEgdGVtcGxhdGUgZGlyZWN0bHkuXG4gICAgLy8gVGhlIHRlbXBsYXRlIGNhbiBlaXRoZXIgYmUgYSBzdHJpbmcgb3IgYSBmdW5jdGlvbi5cbiAgICAvLyBJZiBpdCdzIGEgZnVuY3Rpb24gaXQgd2lsbCBiZSBwYXNzZWQgdGhlIGBjb250ZXh0YFxuICAgIC8vIGFyZ3VtZW50LlxuICAgIHJlbmRlcldpdGhUZW1wbGF0ZTogZnVuY3Rpb24gKGNvbnRleHQsIHRlbXBsYXRlQXJnKSB7XG4gICAgICAgIHZhciB0ZW1wbGF0ZSA9IHRlbXBsYXRlQXJnIHx8IHRoaXMudGVtcGxhdGU7XG4gICAgICAgIGlmICghdGVtcGxhdGUpIHRocm93IG5ldyBFcnJvcignVGVtcGxhdGUgc3RyaW5nIG9yIGZ1bmN0aW9uIG5lZWRlZC4nKTtcbiAgICAgICAgdmFyIG5ld0RvbSA9IGlzU3RyaW5nKHRlbXBsYXRlKSA/IHRlbXBsYXRlIDogdGVtcGxhdGUuY2FsbCh0aGlzLCBjb250ZXh0IHx8IHRoaXMpO1xuICAgICAgICBpZiAoaXNTdHJpbmcobmV3RG9tKSkgbmV3RG9tID0gZG9taWZ5KG5ld0RvbSk7XG4gICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLmVsICYmIHRoaXMuZWwucGFyZW50Tm9kZTtcbiAgICAgICAgaWYgKHBhcmVudCkgcGFyZW50LnJlcGxhY2VDaGlsZChuZXdEb20sIHRoaXMuZWwpO1xuICAgICAgICBpZiAobmV3RG9tLm5vZGVOYW1lID09PSAnI2RvY3VtZW50LWZyYWdtZW50JykgdGhyb3cgbmV3IEVycm9yKCdWaWV3cyBjYW4gb25seSBoYXZlIG9uZSByb290IGVsZW1lbnQsIGluY2x1ZGluZyBjb21tZW50IG5vZGVzLicpO1xuICAgICAgICB0aGlzLmVsID0gbmV3RG9tO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLy8gIyMgY2FjaGVFbGVtZW50c1xuICAgIC8vIFRoaXMgaXMgYSBzaG9ydGN1dCBmb3IgYWRkaW5nIHJlZmVyZW5jZSB0byBzcGVjaWZpYyBlbGVtZW50cyB3aXRoaW4geW91ciB2aWV3IGZvclxuICAgIC8vIGFjY2VzcyBsYXRlci4gVGhpcyBhdm9pZHMgZXhjZXNzaXZlIERPTSBxdWVyaWVzIGFuZCBtYWtlcyBpdCBlYXNpZXIgdG8gdXBkYXRlXG4gICAgLy8geW91ciB2aWV3IGlmIHlvdXIgdGVtcGxhdGUgY2hhbmdlcy5cbiAgICAvL1xuICAgIC8vIEluIHlvdXIgYHJlbmRlcmAgbWV0aG9kLiBVc2UgaXQgbGlrZSBzbzpcbiAgICAvL1xuICAgIC8vICAgICByZW5kZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAvLyAgICAgICB0aGlzLmJhc2ljUmVuZGVyKCk7XG4gICAgLy8gICAgICAgdGhpcy5jYWNoZUVsZW1lbnRzKHtcbiAgICAvLyAgICAgICAgIHBhZ2VzOiAnI3BhZ2VzJyxcbiAgICAvLyAgICAgICAgIGNoYXQ6ICcjdGVhbUNoYXQnLFxuICAgIC8vICAgICAgICAgbmF2OiAnbmF2I3ZpZXdzIHVsJyxcbiAgICAvLyAgICAgICAgIG1lOiAnI21lJyxcbiAgICAvLyAgICAgICAgIGNoZWF0U2hlZXQ6ICcjY2hlYXRTaGVldCcsXG4gICAgLy8gICAgICAgICBvbW5pQm94OiAnI2F3ZXNvbWVTYXVjZSdcbiAgICAvLyAgICAgICB9KTtcbiAgICAvLyAgICAgfVxuICAgIC8vXG4gICAgLy8gVGhlbiBsYXRlciB5b3UgY2FuIGFjY2VzcyBlbGVtZW50cyBieSByZWZlcmVuY2UgbGlrZSBzbzogYHRoaXMucGFnZXNgLCBvciBgdGhpcy5jaGF0YC5cbiAgICBjYWNoZUVsZW1lbnRzOiBmdW5jdGlvbiAoaGFzaCkge1xuICAgICAgICBmb3IgKHZhciBpdGVtIGluIGhhc2gpIHtcbiAgICAgICAgICAgIHRoaXNbaXRlbV0gPSB0aGlzLnF1ZXJ5KGhhc2hbaXRlbV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyAjIyBhbmltYXRlUmVtb3ZlXG4gICAgLy8gUGxhY2Vob2xkZXIgZm9yIGlmIHlvdSB3YW50IHRvIGRvIHNvbWV0aGluZyBzcGVjaWFsIHdoZW4gdGhleSdyZSByZW1vdmVkLlxuICAgIC8vIEZvciBleGFtcGxlIGZhZGUgaXQgb3V0LCBldGMuXG4gICAgLy8gQW55IG92ZXJyaWRlIGhlcmUgc2hvdWxkIGNhbGwgYC5yZW1vdmUoKWAgd2hlbiBkb25lLlxuICAgIGFuaW1hdGVSZW1vdmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5yZW1vdmUoKTtcbiAgICB9LFxuXG4gICAgLy8gIyMgcmVuZGVyQ29sbGVjdGlvblxuICAgIC8vIE1ldGhvZCBmb3IgcmVuZGVyaW5nIGEgY29sbGVjdGlvbnMgd2l0aCBpbmRpdmlkdWFsIHZpZXdzLlxuICAgIC8vIEp1c3QgcGFzcyBpdCB0aGUgY29sbGVjdGlvbiwgYW5kIHRoZSB2aWV3IHRvIHVzZSBmb3IgdGhlIGl0ZW1zIGluIHRoZVxuICAgIC8vIGNvbGxlY3Rpb24uIFRoZSBjb2xsZWN0aW9uVmlldyBpcyByZXR1cm5lZC5cbiAgICByZW5kZXJDb2xsZWN0aW9uOiBmdW5jdGlvbiAoY29sbGVjdGlvbiwgVmlld0NsYXNzLCBjb250YWluZXIsIG9wdHMpIHtcbiAgICAgICAgdmFyIGNvbnRhaW5lckVsID0gKHR5cGVvZiBjb250YWluZXIgPT09ICdzdHJpbmcnKSA/IHRoaXMucXVlcnkoY29udGFpbmVyKSA6IGNvbnRhaW5lcjtcbiAgICAgICAgdmFyIGNvbmZpZyA9IGFzc2lnbih7XG4gICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uLFxuICAgICAgICAgICAgZWw6IGNvbnRhaW5lckVsIHx8IHRoaXMuZWwsXG4gICAgICAgICAgICB2aWV3OiBWaWV3Q2xhc3MsXG4gICAgICAgICAgICBwYXJlbnQ6IHRoaXMsXG4gICAgICAgICAgICB2aWV3T3B0aW9uczoge1xuICAgICAgICAgICAgICAgIHBhcmVudDogdGhpc1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBvcHRzKTtcbiAgICAgICAgdmFyIGNvbGxlY3Rpb25WaWV3ID0gbmV3IENvbGxlY3Rpb25WaWV3KGNvbmZpZyk7XG4gICAgICAgIGNvbGxlY3Rpb25WaWV3LnJlbmRlcigpO1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RlclN1YnZpZXcoY29sbGVjdGlvblZpZXcpO1xuICAgIH0sXG5cbiAgICBfc2V0UmVuZGVyOiBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgJ3JlbmRlcicsIHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlcjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIF9zZXRSZW1vdmU6IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCAncmVtb3ZlJywge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVtb3ZlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIF9kb3duc2VydEJpbmRpbmdzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBhcnNlZEJpbmRpbmdzID0gdGhpcy5fcGFyc2VkQmluZGluZ3M7XG4gICAgICAgIGlmICghdGhpcy5iaW5kaW5nc1NldCkgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5fc3Vidmlld3Mpe1xuICAgICAgICAgIGludm9rZU1hcChmbGF0dGVuKHRoaXMuX3N1YnZpZXdzKSwgJ3JlbW92ZScpO1xuICAgICAgICAgIHRoaXMuX3N1YnZpZXdzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nKCk7XG4gICAgICAgIHRoaXMuYmluZGluZ3NTZXQgPSBmYWxzZTtcbiAgICB9LFxuXG4gICAgX3Vwc2VydEJpbmRpbmdzOiBmdW5jdGlvbihhdHRycykge1xuICAgICAgICBhdHRycyA9IGF0dHJzIHx8IHRoaXM7XG4gICAgICAgIGlmICh0aGlzLmJpbmRpbmdzU2V0KSByZXR1cm47XG4gICAgICAgIHRoaXMuX3BhcnNlZEJpbmRpbmdzID0gYmluZGluZ3ModGhpcy5iaW5kaW5ncywgdGhpcyk7XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVCaW5kaW5ncygpO1xuICAgICAgICBpZiAoYXR0cnMuZWwgJiYgIXRoaXMuYXV0b1JlbmRlcikge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlRWxlbWVudENoYW5nZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVTdWJ2aWV3cygpO1xuICAgICAgICB0aGlzLmJpbmRpbmdzU2V0ID0gdHJ1ZTtcbiAgICB9XG59KTtcblxuVmlldy5wcm90b3R5cGUuX3NldFJlbmRlcihWaWV3LnByb3RvdHlwZSk7XG5WaWV3LnByb3RvdHlwZS5fc2V0UmVtb3ZlKFZpZXcucHJvdG90eXBlKTtcblZpZXcuZXh0ZW5kID0gQmFzZVN0YXRlLmV4dGVuZDtcbm1vZHVsZS5leHBvcnRzID0gVmlldztcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYXJyYXlOZXh0KGFycmF5LCBjdXJyZW50SXRlbSkge1xuICAgIHZhciBsZW4gPSBhcnJheS5sZW5ndGg7XG4gICAgdmFyIG5ld0luZGV4ID0gYXJyYXkuaW5kZXhPZihjdXJyZW50SXRlbSkgKyAxO1xuICAgIGlmIChuZXdJbmRleCA+IChsZW4gLSAxKSkgbmV3SW5kZXggPSAwO1xuICAgIHJldHVybiBhcnJheVtuZXdJbmRleF07XG59O1xuIiwiLyohXG4gICogQm9vdHN0cmFwIHY0LjMuMSAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcbiAgKiBDb3B5cmlnaHQgMjAxMS0yMDE5IFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpXG4gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAgKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cywgcmVxdWlyZSgnanF1ZXJ5JyksIHJlcXVpcmUoJ3BvcHBlci5qcycpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnLCAnanF1ZXJ5JywgJ3BvcHBlci5qcyddLCBmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSBnbG9iYWwgfHwgc2VsZiwgZmFjdG9yeShnbG9iYWwuYm9vdHN0cmFwID0ge30sIGdsb2JhbC5qUXVlcnksIGdsb2JhbC5Qb3BwZXIpKTtcbn0odGhpcywgZnVuY3Rpb24gKGV4cG9ydHMsICQsIFBvcHBlcikgeyAndXNlIHN0cmljdCc7XG5cbiAgJCA9ICQgJiYgJC5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdCcpID8gJFsnZGVmYXVsdCddIDogJDtcbiAgUG9wcGVyID0gUG9wcGVyICYmIFBvcHBlci5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdCcpID8gUG9wcGVyWydkZWZhdWx0J10gOiBQb3BwZXI7XG5cbiAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9XG5cbiAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICAgIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG4gICAgICB2YXIgb3duS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG5cbiAgICAgIGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvd25LZXlzID0gb3duS2V5cy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBzeW0pLmVudW1lcmFibGU7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgb3duS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgICBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xuICB9XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCAodjQuMy4xKTogdXRpbC5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBQcml2YXRlIFRyYW5zaXRpb25FbmQgSGVscGVyc1xuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgdmFyIFRSQU5TSVRJT05fRU5EID0gJ3RyYW5zaXRpb25lbmQnO1xuICB2YXIgTUFYX1VJRCA9IDEwMDAwMDA7XG4gIHZhciBNSUxMSVNFQ09ORFNfTVVMVElQTElFUiA9IDEwMDA7IC8vIFNob3V0b3V0IEFuZ3VzQ3JvbGwgKGh0dHBzOi8vZ29vLmdsL3B4d1FHcClcblxuICBmdW5jdGlvbiB0b1R5cGUob2JqKSB7XG4gICAgcmV0dXJuIHt9LnRvU3RyaW5nLmNhbGwob2JqKS5tYXRjaCgvXFxzKFthLXpdKykvaSlbMV0udG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFNwZWNpYWxUcmFuc2l0aW9uRW5kRXZlbnQoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJpbmRUeXBlOiBUUkFOU0lUSU9OX0VORCxcbiAgICAgIGRlbGVnYXRlVHlwZTogVFJBTlNJVElPTl9FTkQsXG4gICAgICBoYW5kbGU6IGZ1bmN0aW9uIGhhbmRsZShldmVudCkge1xuICAgICAgICBpZiAoJChldmVudC50YXJnZXQpLmlzKHRoaXMpKSB7XG4gICAgICAgICAgcmV0dXJuIGV2ZW50LmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmaW5lZFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2l0aW9uRW5kRW11bGF0b3IoZHVyYXRpb24pIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICAgICQodGhpcykub25lKFV0aWwuVFJBTlNJVElPTl9FTkQsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgfSk7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgICBVdGlsLnRyaWdnZXJUcmFuc2l0aW9uRW5kKF90aGlzKTtcbiAgICAgIH1cbiAgICB9LCBkdXJhdGlvbik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uRW5kU3VwcG9ydCgpIHtcbiAgICAkLmZuLmVtdWxhdGVUcmFuc2l0aW9uRW5kID0gdHJhbnNpdGlvbkVuZEVtdWxhdG9yO1xuICAgICQuZXZlbnQuc3BlY2lhbFtVdGlsLlRSQU5TSVRJT05fRU5EXSA9IGdldFNwZWNpYWxUcmFuc2l0aW9uRW5kRXZlbnQoKTtcbiAgfVxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogUHVibGljIFV0aWwgQXBpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgdmFyIFV0aWwgPSB7XG4gICAgVFJBTlNJVElPTl9FTkQ6ICdic1RyYW5zaXRpb25FbmQnLFxuICAgIGdldFVJRDogZnVuY3Rpb24gZ2V0VUlEKHByZWZpeCkge1xuICAgICAgZG8ge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgICBwcmVmaXggKz0gfn4oTWF0aC5yYW5kb20oKSAqIE1BWF9VSUQpOyAvLyBcIn5+XCIgYWN0cyBsaWtlIGEgZmFzdGVyIE1hdGguZmxvb3IoKSBoZXJlXG4gICAgICB9IHdoaWxlIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcmVmaXgpKTtcblxuICAgICAgcmV0dXJuIHByZWZpeDtcbiAgICB9LFxuICAgIGdldFNlbGVjdG9yRnJvbUVsZW1lbnQ6IGZ1bmN0aW9uIGdldFNlbGVjdG9yRnJvbUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgdmFyIHNlbGVjdG9yID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGFyZ2V0Jyk7XG5cbiAgICAgIGlmICghc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09ICcjJykge1xuICAgICAgICB2YXIgaHJlZkF0dHIgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuICAgICAgICBzZWxlY3RvciA9IGhyZWZBdHRyICYmIGhyZWZBdHRyICE9PSAnIycgPyBocmVmQXR0ci50cmltKCkgOiAnJztcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpID8gc2VsZWN0b3IgOiBudWxsO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQ6IGZ1bmN0aW9uIGdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gLy8gR2V0IHRyYW5zaXRpb24tZHVyYXRpb24gb2YgdGhlIGVsZW1lbnRcblxuXG4gICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gJChlbGVtZW50KS5jc3MoJ3RyYW5zaXRpb24tZHVyYXRpb24nKTtcbiAgICAgIHZhciB0cmFuc2l0aW9uRGVsYXkgPSAkKGVsZW1lbnQpLmNzcygndHJhbnNpdGlvbi1kZWxheScpO1xuICAgICAgdmFyIGZsb2F0VHJhbnNpdGlvbkR1cmF0aW9uID0gcGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pO1xuICAgICAgdmFyIGZsb2F0VHJhbnNpdGlvbkRlbGF5ID0gcGFyc2VGbG9hdCh0cmFuc2l0aW9uRGVsYXkpOyAvLyBSZXR1cm4gMCBpZiBlbGVtZW50IG9yIHRyYW5zaXRpb24gZHVyYXRpb24gaXMgbm90IGZvdW5kXG5cbiAgICAgIGlmICghZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24gJiYgIWZsb2F0VHJhbnNpdGlvbkRlbGF5KSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfSAvLyBJZiBtdWx0aXBsZSBkdXJhdGlvbnMgYXJlIGRlZmluZWQsIHRha2UgdGhlIGZpcnN0XG5cblxuICAgICAgdHJhbnNpdGlvbkR1cmF0aW9uID0gdHJhbnNpdGlvbkR1cmF0aW9uLnNwbGl0KCcsJylbMF07XG4gICAgICB0cmFuc2l0aW9uRGVsYXkgPSB0cmFuc2l0aW9uRGVsYXkuc3BsaXQoJywnKVswXTtcbiAgICAgIHJldHVybiAocGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pICsgcGFyc2VGbG9hdCh0cmFuc2l0aW9uRGVsYXkpKSAqIE1JTExJU0VDT05EU19NVUxUSVBMSUVSO1xuICAgIH0sXG4gICAgcmVmbG93OiBmdW5jdGlvbiByZWZsb3coZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgIH0sXG4gICAgdHJpZ2dlclRyYW5zaXRpb25FbmQ6IGZ1bmN0aW9uIHRyaWdnZXJUcmFuc2l0aW9uRW5kKGVsZW1lbnQpIHtcbiAgICAgICQoZWxlbWVudCkudHJpZ2dlcihUUkFOU0lUSU9OX0VORCk7XG4gICAgfSxcbiAgICAvLyBUT0RPOiBSZW1vdmUgaW4gdjVcbiAgICBzdXBwb3J0c1RyYW5zaXRpb25FbmQ6IGZ1bmN0aW9uIHN1cHBvcnRzVHJhbnNpdGlvbkVuZCgpIHtcbiAgICAgIHJldHVybiBCb29sZWFuKFRSQU5TSVRJT05fRU5EKTtcbiAgICB9LFxuICAgIGlzRWxlbWVudDogZnVuY3Rpb24gaXNFbGVtZW50KG9iaikge1xuICAgICAgcmV0dXJuIChvYmpbMF0gfHwgb2JqKS5ub2RlVHlwZTtcbiAgICB9LFxuICAgIHR5cGVDaGVja0NvbmZpZzogZnVuY3Rpb24gdHlwZUNoZWNrQ29uZmlnKGNvbXBvbmVudE5hbWUsIGNvbmZpZywgY29uZmlnVHlwZXMpIHtcbiAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGNvbmZpZ1R5cGVzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29uZmlnVHlwZXMsIHByb3BlcnR5KSkge1xuICAgICAgICAgIHZhciBleHBlY3RlZFR5cGVzID0gY29uZmlnVHlwZXNbcHJvcGVydHldO1xuICAgICAgICAgIHZhciB2YWx1ZSA9IGNvbmZpZ1twcm9wZXJ0eV07XG4gICAgICAgICAgdmFyIHZhbHVlVHlwZSA9IHZhbHVlICYmIFV0aWwuaXNFbGVtZW50KHZhbHVlKSA/ICdlbGVtZW50JyA6IHRvVHlwZSh2YWx1ZSk7XG5cbiAgICAgICAgICBpZiAoIW5ldyBSZWdFeHAoZXhwZWN0ZWRUeXBlcykudGVzdCh2YWx1ZVR5cGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY29tcG9uZW50TmFtZS50b1VwcGVyQ2FzZSgpICsgXCI6IFwiICsgKFwiT3B0aW9uIFxcXCJcIiArIHByb3BlcnR5ICsgXCJcXFwiIHByb3ZpZGVkIHR5cGUgXFxcIlwiICsgdmFsdWVUeXBlICsgXCJcXFwiIFwiKSArIChcImJ1dCBleHBlY3RlZCB0eXBlIFxcXCJcIiArIGV4cGVjdGVkVHlwZXMgKyBcIlxcXCIuXCIpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGZpbmRTaGFkb3dSb290OiBmdW5jdGlvbiBmaW5kU2hhZG93Um9vdChlbGVtZW50KSB7XG4gICAgICBpZiAoIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hdHRhY2hTaGFkb3cpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IC8vIENhbiBmaW5kIHRoZSBzaGFkb3cgcm9vdCBvdGhlcndpc2UgaXQnbGwgcmV0dXJuIHRoZSBkb2N1bWVudFxuXG5cbiAgICAgIGlmICh0eXBlb2YgZWxlbWVudC5nZXRSb290Tm9kZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgcm9vdCA9IGVsZW1lbnQuZ2V0Um9vdE5vZGUoKTtcbiAgICAgICAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgIH0gLy8gd2hlbiB3ZSBkb24ndCBmaW5kIGEgc2hhZG93IHJvb3RcblxuXG4gICAgICBpZiAoIWVsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFV0aWwuZmluZFNoYWRvd1Jvb3QoZWxlbWVudC5wYXJlbnROb2RlKTtcbiAgICB9XG4gIH07XG4gIHNldFRyYW5zaXRpb25FbmRTdXBwb3J0KCk7XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBDb25zdGFudHNcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBOQU1FID0gJ2FsZXJ0JztcbiAgdmFyIFZFUlNJT04gPSAnNC4zLjEnO1xuICB2YXIgREFUQV9LRVkgPSAnYnMuYWxlcnQnO1xuICB2YXIgRVZFTlRfS0VZID0gXCIuXCIgKyBEQVRBX0tFWTtcbiAgdmFyIERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknO1xuICB2YXIgSlFVRVJZX05PX0NPTkZMSUNUID0gJC5mbltOQU1FXTtcbiAgdmFyIFNlbGVjdG9yID0ge1xuICAgIERJU01JU1M6ICdbZGF0YS1kaXNtaXNzPVwiYWxlcnRcIl0nXG4gIH07XG4gIHZhciBFdmVudCA9IHtcbiAgICBDTE9TRTogXCJjbG9zZVwiICsgRVZFTlRfS0VZLFxuICAgIENMT1NFRDogXCJjbG9zZWRcIiArIEVWRU5UX0tFWSxcbiAgICBDTElDS19EQVRBX0FQSTogXCJjbGlja1wiICsgRVZFTlRfS0VZICsgREFUQV9BUElfS0VZXG4gIH07XG4gIHZhciBDbGFzc05hbWUgPSB7XG4gICAgQUxFUlQ6ICdhbGVydCcsXG4gICAgRkFERTogJ2ZhZGUnLFxuICAgIFNIT1c6ICdzaG93J1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIENsYXNzIERlZmluaXRpb25cbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuICB9O1xuXG4gIHZhciBBbGVydCA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEFsZXJ0KGVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgIH0gLy8gR2V0dGVyc1xuXG5cbiAgICB2YXIgX3Byb3RvID0gQWxlcnQucHJvdG90eXBlO1xuXG4gICAgLy8gUHVibGljXG4gICAgX3Byb3RvLmNsb3NlID0gZnVuY3Rpb24gY2xvc2UoZWxlbWVudCkge1xuICAgICAgdmFyIHJvb3RFbGVtZW50ID0gdGhpcy5fZWxlbWVudDtcblxuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgcm9vdEVsZW1lbnQgPSB0aGlzLl9nZXRSb290RWxlbWVudChlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgdmFyIGN1c3RvbUV2ZW50ID0gdGhpcy5fdHJpZ2dlckNsb3NlRXZlbnQocm9vdEVsZW1lbnQpO1xuXG4gICAgICBpZiAoY3VzdG9tRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9yZW1vdmVFbGVtZW50KHJvb3RFbGVtZW50KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgJC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsIERBVEFfS0VZKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsO1xuICAgIH0gLy8gUHJpdmF0ZVxuICAgIDtcblxuICAgIF9wcm90by5fZ2V0Um9vdEVsZW1lbnQgPSBmdW5jdGlvbiBfZ2V0Um9vdEVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgdmFyIHNlbGVjdG9yID0gVXRpbC5nZXRTZWxlY3RvckZyb21FbGVtZW50KGVsZW1lbnQpO1xuICAgICAgdmFyIHBhcmVudCA9IGZhbHNlO1xuXG4gICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgcGFyZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICB9XG5cbiAgICAgIGlmICghcGFyZW50KSB7XG4gICAgICAgIHBhcmVudCA9ICQoZWxlbWVudCkuY2xvc2VzdChcIi5cIiArIENsYXNzTmFtZS5BTEVSVClbMF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfTtcblxuICAgIF9wcm90by5fdHJpZ2dlckNsb3NlRXZlbnQgPSBmdW5jdGlvbiBfdHJpZ2dlckNsb3NlRXZlbnQoZWxlbWVudCkge1xuICAgICAgdmFyIGNsb3NlRXZlbnQgPSAkLkV2ZW50KEV2ZW50LkNMT1NFKTtcbiAgICAgICQoZWxlbWVudCkudHJpZ2dlcihjbG9zZUV2ZW50KTtcbiAgICAgIHJldHVybiBjbG9zZUV2ZW50O1xuICAgIH07XG5cbiAgICBfcHJvdG8uX3JlbW92ZUVsZW1lbnQgPSBmdW5jdGlvbiBfcmVtb3ZlRWxlbWVudChlbGVtZW50KSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAkKGVsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZS5TSE9XKTtcblxuICAgICAgaWYgKCEkKGVsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZS5GQURFKSkge1xuICAgICAgICB0aGlzLl9kZXN0cm95RWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciB0cmFuc2l0aW9uRHVyYXRpb24gPSBVdGlsLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KGVsZW1lbnQpO1xuICAgICAgJChlbGVtZW50KS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5fZGVzdHJveUVsZW1lbnQoZWxlbWVudCwgZXZlbnQpO1xuICAgICAgfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9kZXN0cm95RWxlbWVudCA9IGZ1bmN0aW9uIF9kZXN0cm95RWxlbWVudChlbGVtZW50KSB7XG4gICAgICAkKGVsZW1lbnQpLmRldGFjaCgpLnRyaWdnZXIoRXZlbnQuQ0xPU0VEKS5yZW1vdmUoKTtcbiAgICB9IC8vIFN0YXRpY1xuICAgIDtcblxuICAgIEFsZXJ0Ll9qUXVlcnlJbnRlcmZhY2UgPSBmdW5jdGlvbiBfalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciAkZWxlbWVudCA9ICQodGhpcyk7XG4gICAgICAgIHZhciBkYXRhID0gJGVsZW1lbnQuZGF0YShEQVRBX0tFWSk7XG5cbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IG5ldyBBbGVydCh0aGlzKTtcbiAgICAgICAgICAkZWxlbWVudC5kYXRhKERBVEFfS0VZLCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcgPT09ICdjbG9zZScpIHtcbiAgICAgICAgICBkYXRhW2NvbmZpZ10odGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBBbGVydC5faGFuZGxlRGlzbWlzcyA9IGZ1bmN0aW9uIF9oYW5kbGVEaXNtaXNzKGFsZXJ0SW5zdGFuY2UpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFsZXJ0SW5zdGFuY2UuY2xvc2UodGhpcyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBfY3JlYXRlQ2xhc3MoQWxlcnQsIG51bGwsIFt7XG4gICAgICBrZXk6IFwiVkVSU0lPTlwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBWRVJTSU9OO1xuICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBBbGVydDtcbiAgfSgpO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuXG4gICQoZG9jdW1lbnQpLm9uKEV2ZW50LkNMSUNLX0RBVEFfQVBJLCBTZWxlY3Rvci5ESVNNSVNTLCBBbGVydC5faGFuZGxlRGlzbWlzcyhuZXcgQWxlcnQoKSkpO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIGpRdWVyeVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgJC5mbltOQU1FXSA9IEFsZXJ0Ll9qUXVlcnlJbnRlcmZhY2U7XG4gICQuZm5bTkFNRV0uQ29uc3RydWN0b3IgPSBBbGVydDtcblxuICAkLmZuW05BTUVdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbltOQU1FXSA9IEpRVUVSWV9OT19DT05GTElDVDtcbiAgICByZXR1cm4gQWxlcnQuX2pRdWVyeUludGVyZmFjZTtcbiAgfTtcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIENvbnN0YW50c1xuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgdmFyIE5BTUUkMSA9ICdidXR0b24nO1xuICB2YXIgVkVSU0lPTiQxID0gJzQuMy4xJztcbiAgdmFyIERBVEFfS0VZJDEgPSAnYnMuYnV0dG9uJztcbiAgdmFyIEVWRU5UX0tFWSQxID0gXCIuXCIgKyBEQVRBX0tFWSQxO1xuICB2YXIgREFUQV9BUElfS0VZJDEgPSAnLmRhdGEtYXBpJztcbiAgdmFyIEpRVUVSWV9OT19DT05GTElDVCQxID0gJC5mbltOQU1FJDFdO1xuICB2YXIgQ2xhc3NOYW1lJDEgPSB7XG4gICAgQUNUSVZFOiAnYWN0aXZlJyxcbiAgICBCVVRUT046ICdidG4nLFxuICAgIEZPQ1VTOiAnZm9jdXMnXG4gIH07XG4gIHZhciBTZWxlY3RvciQxID0ge1xuICAgIERBVEFfVE9HR0xFX0NBUlJPVDogJ1tkYXRhLXRvZ2dsZV49XCJidXR0b25cIl0nLFxuICAgIERBVEFfVE9HR0xFOiAnW2RhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiXScsXG4gICAgSU5QVVQ6ICdpbnB1dDpub3QoW3R5cGU9XCJoaWRkZW5cIl0pJyxcbiAgICBBQ1RJVkU6ICcuYWN0aXZlJyxcbiAgICBCVVRUT046ICcuYnRuJ1xuICB9O1xuICB2YXIgRXZlbnQkMSA9IHtcbiAgICBDTElDS19EQVRBX0FQSTogXCJjbGlja1wiICsgRVZFTlRfS0VZJDEgKyBEQVRBX0FQSV9LRVkkMSxcbiAgICBGT0NVU19CTFVSX0RBVEFfQVBJOiBcImZvY3VzXCIgKyBFVkVOVF9LRVkkMSArIERBVEFfQVBJX0tFWSQxICsgXCIgXCIgKyAoXCJibHVyXCIgKyBFVkVOVF9LRVkkMSArIERBVEFfQVBJX0tFWSQxKVxuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIENsYXNzIERlZmluaXRpb25cbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuICB9O1xuXG4gIHZhciBCdXR0b24gPVxuICAvKiNfX1BVUkVfXyovXG4gIGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBCdXR0b24oZWxlbWVudCkge1xuICAgICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgfSAvLyBHZXR0ZXJzXG5cblxuICAgIHZhciBfcHJvdG8gPSBCdXR0b24ucHJvdG90eXBlO1xuXG4gICAgLy8gUHVibGljXG4gICAgX3Byb3RvLnRvZ2dsZSA9IGZ1bmN0aW9uIHRvZ2dsZSgpIHtcbiAgICAgIHZhciB0cmlnZ2VyQ2hhbmdlRXZlbnQgPSB0cnVlO1xuICAgICAgdmFyIGFkZEFyaWFQcmVzc2VkID0gdHJ1ZTtcbiAgICAgIHZhciByb290RWxlbWVudCA9ICQodGhpcy5fZWxlbWVudCkuY2xvc2VzdChTZWxlY3RvciQxLkRBVEFfVE9HR0xFKVswXTtcblxuICAgICAgaWYgKHJvb3RFbGVtZW50KSB7XG4gICAgICAgIHZhciBpbnB1dCA9IHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcihTZWxlY3RvciQxLklOUFVUKTtcblxuICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICBpZiAoaW5wdXQudHlwZSA9PT0gJ3JhZGlvJykge1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoZWNrZWQgJiYgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ2xhc3NOYW1lJDEuQUNUSVZFKSkge1xuICAgICAgICAgICAgICB0cmlnZ2VyQ2hhbmdlRXZlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhciBhY3RpdmVFbGVtZW50ID0gcm9vdEVsZW1lbnQucXVlcnlTZWxlY3RvcihTZWxlY3RvciQxLkFDVElWRSk7XG5cbiAgICAgICAgICAgICAgaWYgKGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAkKGFjdGl2ZUVsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQxLkFDVElWRSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZUV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpIHx8IHJvb3RFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSB8fCBpbnB1dC5jbGFzc0xpc3QuY29udGFpbnMoJ2Rpc2FibGVkJykgfHwgcm9vdEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9ICF0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDbGFzc05hbWUkMS5BQ1RJVkUpO1xuICAgICAgICAgICAgJChpbnB1dCkudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICBhZGRBcmlhUHJlc3NlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhZGRBcmlhUHJlc3NlZCkge1xuICAgICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgIXRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENsYXNzTmFtZSQxLkFDVElWRSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHJpZ2dlckNoYW5nZUV2ZW50KSB7XG4gICAgICAgICQodGhpcy5fZWxlbWVudCkudG9nZ2xlQ2xhc3MoQ2xhc3NOYW1lJDEuQUNUSVZFKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgJC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsIERBVEFfS0VZJDEpO1xuICAgICAgdGhpcy5fZWxlbWVudCA9IG51bGw7XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBCdXR0b24uX2pRdWVyeUludGVyZmFjZSA9IGZ1bmN0aW9uIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAkKHRoaXMpLmRhdGEoREFUQV9LRVkkMSk7XG5cbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IG5ldyBCdXR0b24odGhpcyk7XG4gICAgICAgICAgJCh0aGlzKS5kYXRhKERBVEFfS0VZJDEsIGRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZyA9PT0gJ3RvZ2dsZScpIHtcbiAgICAgICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9jcmVhdGVDbGFzcyhCdXR0b24sIG51bGwsIFt7XG4gICAgICBrZXk6IFwiVkVSU0lPTlwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBWRVJTSU9OJDE7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIEJ1dHRvbjtcbiAgfSgpO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuXG4gICQoZG9jdW1lbnQpLm9uKEV2ZW50JDEuQ0xJQ0tfREFUQV9BUEksIFNlbGVjdG9yJDEuREFUQV9UT0dHTEVfQ0FSUk9ULCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHZhciBidXR0b24gPSBldmVudC50YXJnZXQ7XG5cbiAgICBpZiAoISQoYnV0dG9uKS5oYXNDbGFzcyhDbGFzc05hbWUkMS5CVVRUT04pKSB7XG4gICAgICBidXR0b24gPSAkKGJ1dHRvbikuY2xvc2VzdChTZWxlY3RvciQxLkJVVFRPTik7XG4gICAgfVxuXG4gICAgQnV0dG9uLl9qUXVlcnlJbnRlcmZhY2UuY2FsbCgkKGJ1dHRvbiksICd0b2dnbGUnKTtcbiAgfSkub24oRXZlbnQkMS5GT0NVU19CTFVSX0RBVEFfQVBJLCBTZWxlY3RvciQxLkRBVEFfVE9HR0xFX0NBUlJPVCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIGJ1dHRvbiA9ICQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFNlbGVjdG9yJDEuQlVUVE9OKVswXTtcbiAgICAkKGJ1dHRvbikudG9nZ2xlQ2xhc3MoQ2xhc3NOYW1lJDEuRk9DVVMsIC9eZm9jdXMoaW4pPyQvLnRlc3QoZXZlbnQudHlwZSkpO1xuICB9KTtcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBqUXVlcnlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gICQuZm5bTkFNRSQxXSA9IEJ1dHRvbi5falF1ZXJ5SW50ZXJmYWNlO1xuICAkLmZuW05BTUUkMV0uQ29uc3RydWN0b3IgPSBCdXR0b247XG5cbiAgJC5mbltOQU1FJDFdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbltOQU1FJDFdID0gSlFVRVJZX05PX0NPTkZMSUNUJDE7XG4gICAgcmV0dXJuIEJ1dHRvbi5falF1ZXJ5SW50ZXJmYWNlO1xuICB9O1xuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQ29uc3RhbnRzXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICB2YXIgTkFNRSQyID0gJ2Nhcm91c2VsJztcbiAgdmFyIFZFUlNJT04kMiA9ICc0LjMuMSc7XG4gIHZhciBEQVRBX0tFWSQyID0gJ2JzLmNhcm91c2VsJztcbiAgdmFyIEVWRU5UX0tFWSQyID0gXCIuXCIgKyBEQVRBX0tFWSQyO1xuICB2YXIgREFUQV9BUElfS0VZJDIgPSAnLmRhdGEtYXBpJztcbiAgdmFyIEpRVUVSWV9OT19DT05GTElDVCQyID0gJC5mbltOQU1FJDJdO1xuICB2YXIgQVJST1dfTEVGVF9LRVlDT0RFID0gMzc7IC8vIEtleWJvYXJkRXZlbnQud2hpY2ggdmFsdWUgZm9yIGxlZnQgYXJyb3cga2V5XG5cbiAgdmFyIEFSUk9XX1JJR0hUX0tFWUNPREUgPSAzOTsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3IgcmlnaHQgYXJyb3cga2V5XG5cbiAgdmFyIFRPVUNIRVZFTlRfQ09NUEFUX1dBSVQgPSA1MDA7IC8vIFRpbWUgZm9yIG1vdXNlIGNvbXBhdCBldmVudHMgdG8gZmlyZSBhZnRlciB0b3VjaFxuXG4gIHZhciBTV0lQRV9USFJFU0hPTEQgPSA0MDtcbiAgdmFyIERlZmF1bHQgPSB7XG4gICAgaW50ZXJ2YWw6IDUwMDAsXG4gICAga2V5Ym9hcmQ6IHRydWUsXG4gICAgc2xpZGU6IGZhbHNlLFxuICAgIHBhdXNlOiAnaG92ZXInLFxuICAgIHdyYXA6IHRydWUsXG4gICAgdG91Y2g6IHRydWVcbiAgfTtcbiAgdmFyIERlZmF1bHRUeXBlID0ge1xuICAgIGludGVydmFsOiAnKG51bWJlcnxib29sZWFuKScsXG4gICAga2V5Ym9hcmQ6ICdib29sZWFuJyxcbiAgICBzbGlkZTogJyhib29sZWFufHN0cmluZyknLFxuICAgIHBhdXNlOiAnKHN0cmluZ3xib29sZWFuKScsXG4gICAgd3JhcDogJ2Jvb2xlYW4nLFxuICAgIHRvdWNoOiAnYm9vbGVhbidcbiAgfTtcbiAgdmFyIERpcmVjdGlvbiA9IHtcbiAgICBORVhUOiAnbmV4dCcsXG4gICAgUFJFVjogJ3ByZXYnLFxuICAgIExFRlQ6ICdsZWZ0JyxcbiAgICBSSUdIVDogJ3JpZ2h0J1xuICB9O1xuICB2YXIgRXZlbnQkMiA9IHtcbiAgICBTTElERTogXCJzbGlkZVwiICsgRVZFTlRfS0VZJDIsXG4gICAgU0xJRDogXCJzbGlkXCIgKyBFVkVOVF9LRVkkMixcbiAgICBLRVlET1dOOiBcImtleWRvd25cIiArIEVWRU5UX0tFWSQyLFxuICAgIE1PVVNFRU5URVI6IFwibW91c2VlbnRlclwiICsgRVZFTlRfS0VZJDIsXG4gICAgTU9VU0VMRUFWRTogXCJtb3VzZWxlYXZlXCIgKyBFVkVOVF9LRVkkMixcbiAgICBUT1VDSFNUQVJUOiBcInRvdWNoc3RhcnRcIiArIEVWRU5UX0tFWSQyLFxuICAgIFRPVUNITU9WRTogXCJ0b3VjaG1vdmVcIiArIEVWRU5UX0tFWSQyLFxuICAgIFRPVUNIRU5EOiBcInRvdWNoZW5kXCIgKyBFVkVOVF9LRVkkMixcbiAgICBQT0lOVEVSRE9XTjogXCJwb2ludGVyZG93blwiICsgRVZFTlRfS0VZJDIsXG4gICAgUE9JTlRFUlVQOiBcInBvaW50ZXJ1cFwiICsgRVZFTlRfS0VZJDIsXG4gICAgRFJBR19TVEFSVDogXCJkcmFnc3RhcnRcIiArIEVWRU5UX0tFWSQyLFxuICAgIExPQURfREFUQV9BUEk6IFwibG9hZFwiICsgRVZFTlRfS0VZJDIgKyBEQVRBX0FQSV9LRVkkMixcbiAgICBDTElDS19EQVRBX0FQSTogXCJjbGlja1wiICsgRVZFTlRfS0VZJDIgKyBEQVRBX0FQSV9LRVkkMlxuICB9O1xuICB2YXIgQ2xhc3NOYW1lJDIgPSB7XG4gICAgQ0FST1VTRUw6ICdjYXJvdXNlbCcsXG4gICAgQUNUSVZFOiAnYWN0aXZlJyxcbiAgICBTTElERTogJ3NsaWRlJyxcbiAgICBSSUdIVDogJ2Nhcm91c2VsLWl0ZW0tcmlnaHQnLFxuICAgIExFRlQ6ICdjYXJvdXNlbC1pdGVtLWxlZnQnLFxuICAgIE5FWFQ6ICdjYXJvdXNlbC1pdGVtLW5leHQnLFxuICAgIFBSRVY6ICdjYXJvdXNlbC1pdGVtLXByZXYnLFxuICAgIElURU06ICdjYXJvdXNlbC1pdGVtJyxcbiAgICBQT0lOVEVSX0VWRU5UOiAncG9pbnRlci1ldmVudCdcbiAgfTtcbiAgdmFyIFNlbGVjdG9yJDIgPSB7XG4gICAgQUNUSVZFOiAnLmFjdGl2ZScsXG4gICAgQUNUSVZFX0lURU06ICcuYWN0aXZlLmNhcm91c2VsLWl0ZW0nLFxuICAgIElURU06ICcuY2Fyb3VzZWwtaXRlbScsXG4gICAgSVRFTV9JTUc6ICcuY2Fyb3VzZWwtaXRlbSBpbWcnLFxuICAgIE5FWFRfUFJFVjogJy5jYXJvdXNlbC1pdGVtLW5leHQsIC5jYXJvdXNlbC1pdGVtLXByZXYnLFxuICAgIElORElDQVRPUlM6ICcuY2Fyb3VzZWwtaW5kaWNhdG9ycycsXG4gICAgREFUQV9TTElERTogJ1tkYXRhLXNsaWRlXSwgW2RhdGEtc2xpZGUtdG9dJyxcbiAgICBEQVRBX1JJREU6ICdbZGF0YS1yaWRlPVwiY2Fyb3VzZWxcIl0nXG4gIH07XG4gIHZhciBQb2ludGVyVHlwZSA9IHtcbiAgICBUT1VDSDogJ3RvdWNoJyxcbiAgICBQRU46ICdwZW4nXG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG4gIH07XG5cbiAgdmFyIENhcm91c2VsID1cbiAgLyojX19QVVJFX18qL1xuICBmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ2Fyb3VzZWwoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgICB0aGlzLl9pdGVtcyA9IG51bGw7XG4gICAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGw7XG4gICAgICB0aGlzLl9hY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuX2lzUGF1c2VkID0gZmFsc2U7XG4gICAgICB0aGlzLl9pc1NsaWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMudG91Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICAgIHRoaXMudG91Y2hTdGFydFggPSAwO1xuICAgICAgdGhpcy50b3VjaERlbHRhWCA9IDA7XG4gICAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQgPSB0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoU2VsZWN0b3IkMi5JTkRJQ0FUT1JTKTtcbiAgICAgIHRoaXMuX3RvdWNoU3VwcG9ydGVkID0gJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDA7XG4gICAgICB0aGlzLl9wb2ludGVyRXZlbnQgPSBCb29sZWFuKHdpbmRvdy5Qb2ludGVyRXZlbnQgfHwgd2luZG93Lk1TUG9pbnRlckV2ZW50KTtcblxuICAgICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICB9IC8vIEdldHRlcnNcblxuXG4gICAgdmFyIF9wcm90byA9IENhcm91c2VsLnByb3RvdHlwZTtcblxuICAgIC8vIFB1YmxpY1xuICAgIF9wcm90by5uZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGlmICghdGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICAgIHRoaXMuX3NsaWRlKERpcmVjdGlvbi5ORVhUKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLm5leHRXaGVuVmlzaWJsZSA9IGZ1bmN0aW9uIG5leHRXaGVuVmlzaWJsZSgpIHtcbiAgICAgIC8vIERvbid0IGNhbGwgbmV4dCB3aGVuIHRoZSBwYWdlIGlzbid0IHZpc2libGVcbiAgICAgIC8vIG9yIHRoZSBjYXJvdXNlbCBvciBpdHMgcGFyZW50IGlzbid0IHZpc2libGVcbiAgICAgIGlmICghZG9jdW1lbnQuaGlkZGVuICYmICQodGhpcy5fZWxlbWVudCkuaXMoJzp2aXNpYmxlJykgJiYgJCh0aGlzLl9lbGVtZW50KS5jc3MoJ3Zpc2liaWxpdHknKSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5wcmV2ID0gZnVuY3Rpb24gcHJldigpIHtcbiAgICAgIGlmICghdGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICAgIHRoaXMuX3NsaWRlKERpcmVjdGlvbi5QUkVWKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLnBhdXNlID0gZnVuY3Rpb24gcGF1c2UoZXZlbnQpIHtcbiAgICAgIGlmICghZXZlbnQpIHtcbiAgICAgICAgdGhpcy5faXNQYXVzZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yJDIuTkVYVF9QUkVWKSkge1xuICAgICAgICBVdGlsLnRyaWdnZXJUcmFuc2l0aW9uRW5kKHRoaXMuX2VsZW1lbnQpO1xuICAgICAgICB0aGlzLmN5Y2xlKHRydWUpO1xuICAgICAgfVxuXG4gICAgICBjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKTtcbiAgICAgIHRoaXMuX2ludGVydmFsID0gbnVsbDtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmN5Y2xlID0gZnVuY3Rpb24gY3ljbGUoZXZlbnQpIHtcbiAgICAgIGlmICghZXZlbnQpIHtcbiAgICAgICAgdGhpcy5faXNQYXVzZWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2ludGVydmFsKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWwpO1xuICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcuaW50ZXJ2YWwgJiYgIXRoaXMuX2lzUGF1c2VkKSB7XG4gICAgICAgIHRoaXMuX2ludGVydmFsID0gc2V0SW50ZXJ2YWwoKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA/IHRoaXMubmV4dFdoZW5WaXNpYmxlIDogdGhpcy5uZXh0KS5iaW5kKHRoaXMpLCB0aGlzLl9jb25maWcuaW50ZXJ2YWwpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8udG8gPSBmdW5jdGlvbiB0byhpbmRleCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdGhpcy5fYWN0aXZlRWxlbWVudCA9IHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcihTZWxlY3RvciQyLkFDVElWRV9JVEVNKTtcblxuICAgICAgdmFyIGFjdGl2ZUluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KHRoaXMuX2FjdGl2ZUVsZW1lbnQpO1xuXG4gICAgICBpZiAoaW5kZXggPiB0aGlzLl9pdGVtcy5sZW5ndGggLSAxIHx8IGluZGV4IDwgMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9pc1NsaWRpbmcpIHtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbmUoRXZlbnQkMi5TTElELCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLnRvKGluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGFjdGl2ZUluZGV4ID09PSBpbmRleCkge1xuICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICAgIHRoaXMuY3ljbGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGlyZWN0aW9uID0gaW5kZXggPiBhY3RpdmVJbmRleCA/IERpcmVjdGlvbi5ORVhUIDogRGlyZWN0aW9uLlBSRVY7XG5cbiAgICAgIHRoaXMuX3NsaWRlKGRpcmVjdGlvbiwgdGhpcy5faXRlbXNbaW5kZXhdKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgJCh0aGlzLl9lbGVtZW50KS5vZmYoRVZFTlRfS0VZJDIpO1xuICAgICAgJC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsIERBVEFfS0VZJDIpO1xuICAgICAgdGhpcy5faXRlbXMgPSBudWxsO1xuICAgICAgdGhpcy5fY29uZmlnID0gbnVsbDtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsO1xuICAgICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsO1xuICAgICAgdGhpcy5faXNQYXVzZWQgPSBudWxsO1xuICAgICAgdGhpcy5faXNTbGlkaW5nID0gbnVsbDtcbiAgICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICAgICAgdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQgPSBudWxsO1xuICAgIH0gLy8gUHJpdmF0ZVxuICAgIDtcblxuICAgIF9wcm90by5fZ2V0Q29uZmlnID0gZnVuY3Rpb24gX2dldENvbmZpZyhjb25maWcpIHtcbiAgICAgIGNvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIERlZmF1bHQsIGNvbmZpZyk7XG4gICAgICBVdGlsLnR5cGVDaGVja0NvbmZpZyhOQU1FJDIsIGNvbmZpZywgRGVmYXVsdFR5cGUpO1xuICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9oYW5kbGVTd2lwZSA9IGZ1bmN0aW9uIF9oYW5kbGVTd2lwZSgpIHtcbiAgICAgIHZhciBhYnNEZWx0YXggPSBNYXRoLmFicyh0aGlzLnRvdWNoRGVsdGFYKTtcblxuICAgICAgaWYgKGFic0RlbHRheCA8PSBTV0lQRV9USFJFU0hPTEQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGlyZWN0aW9uID0gYWJzRGVsdGF4IC8gdGhpcy50b3VjaERlbHRhWDsgLy8gc3dpcGUgbGVmdFxuXG4gICAgICBpZiAoZGlyZWN0aW9uID4gMCkge1xuICAgICAgICB0aGlzLnByZXYoKTtcbiAgICAgIH0gLy8gc3dpcGUgcmlnaHRcblxuXG4gICAgICBpZiAoZGlyZWN0aW9uIDwgMCkge1xuICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLl9hZGRFdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uIF9hZGRFdmVudExpc3RlbmVycygpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICAgICQodGhpcy5fZWxlbWVudCkub24oRXZlbnQkMi5LRVlET1dOLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLl9rZXlkb3duKGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcucGF1c2UgPT09ICdob3ZlcicpIHtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbihFdmVudCQyLk1PVVNFRU5URVIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczIucGF1c2UoZXZlbnQpO1xuICAgICAgICB9KS5vbihFdmVudCQyLk1PVVNFTEVBVkUsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczIuY3ljbGUoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2NvbmZpZy50b3VjaCkge1xuICAgICAgICB0aGlzLl9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5fYWRkVG91Y2hFdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uIF9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIGlmICghdGhpcy5fdG91Y2hTdXBwb3J0ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RhcnQgPSBmdW5jdGlvbiBzdGFydChldmVudCkge1xuICAgICAgICBpZiAoX3RoaXMzLl9wb2ludGVyRXZlbnQgJiYgUG9pbnRlclR5cGVbZXZlbnQub3JpZ2luYWxFdmVudC5wb2ludGVyVHlwZS50b1VwcGVyQ2FzZSgpXSkge1xuICAgICAgICAgIF90aGlzMy50b3VjaFN0YXJ0WCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQuY2xpZW50WDtcbiAgICAgICAgfSBlbHNlIGlmICghX3RoaXMzLl9wb2ludGVyRXZlbnQpIHtcbiAgICAgICAgICBfdGhpczMudG91Y2hTdGFydFggPSBldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdmFyIG1vdmUgPSBmdW5jdGlvbiBtb3ZlKGV2ZW50KSB7XG4gICAgICAgIC8vIGVuc3VyZSBzd2lwaW5nIHdpdGggb25lIHRvdWNoIGFuZCBub3QgcGluY2hpbmdcbiAgICAgICAgaWYgKGV2ZW50Lm9yaWdpbmFsRXZlbnQudG91Y2hlcyAmJiBldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIF90aGlzMy50b3VjaERlbHRhWCA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMzLnRvdWNoRGVsdGFYID0gZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLmNsaWVudFggLSBfdGhpczMudG91Y2hTdGFydFg7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHZhciBlbmQgPSBmdW5jdGlvbiBlbmQoZXZlbnQpIHtcbiAgICAgICAgaWYgKF90aGlzMy5fcG9pbnRlckV2ZW50ICYmIFBvaW50ZXJUeXBlW2V2ZW50Lm9yaWdpbmFsRXZlbnQucG9pbnRlclR5cGUudG9VcHBlckNhc2UoKV0pIHtcbiAgICAgICAgICBfdGhpczMudG91Y2hEZWx0YVggPSBldmVudC5vcmlnaW5hbEV2ZW50LmNsaWVudFggLSBfdGhpczMudG91Y2hTdGFydFg7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczMuX2hhbmRsZVN3aXBlKCk7XG5cbiAgICAgICAgaWYgKF90aGlzMy5fY29uZmlnLnBhdXNlID09PSAnaG92ZXInKSB7XG4gICAgICAgICAgLy8gSWYgaXQncyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlLCBtb3VzZWVudGVyL2xlYXZlIGFyZSBmaXJlZCBhc1xuICAgICAgICAgIC8vIHBhcnQgb2YgdGhlIG1vdXNlIGNvbXBhdGliaWxpdHkgZXZlbnRzIG9uIGZpcnN0IHRhcCAtIHRoZSBjYXJvdXNlbFxuICAgICAgICAgIC8vIHdvdWxkIHN0b3AgY3ljbGluZyB1bnRpbCB1c2VyIHRhcHBlZCBvdXQgb2YgaXQ7XG4gICAgICAgICAgLy8gaGVyZSwgd2UgbGlzdGVuIGZvciB0b3VjaGVuZCwgZXhwbGljaXRseSBwYXVzZSB0aGUgY2Fyb3VzZWxcbiAgICAgICAgICAvLyAoYXMgaWYgaXQncyB0aGUgc2Vjb25kIHRpbWUgd2UgdGFwIG9uIGl0LCBtb3VzZWVudGVyIGNvbXBhdCBldmVudFxuICAgICAgICAgIC8vIGlzIE5PVCBmaXJlZCkgYW5kIGFmdGVyIGEgdGltZW91dCAodG8gYWxsb3cgZm9yIG1vdXNlIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAvLyBldmVudHMgdG8gZmlyZSkgd2UgZXhwbGljaXRseSByZXN0YXJ0IGN5Y2xpbmdcbiAgICAgICAgICBfdGhpczMucGF1c2UoKTtcblxuICAgICAgICAgIGlmIChfdGhpczMudG91Y2hUaW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoX3RoaXMzLnRvdWNoVGltZW91dCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3RoaXMzLnRvdWNoVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMzLmN5Y2xlKGV2ZW50KTtcbiAgICAgICAgICB9LCBUT1VDSEVWRU5UX0NPTVBBVF9XQUlUICsgX3RoaXMzLl9jb25maWcuaW50ZXJ2YWwpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAkKHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3RvciQyLklURU1fSU1HKSkub24oRXZlbnQkMi5EUkFHX1NUQVJULCBmdW5jdGlvbiAoZSkge1xuICAgICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLl9wb2ludGVyRXZlbnQpIHtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbihFdmVudCQyLlBPSU5URVJET1dOLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gc3RhcnQoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbihFdmVudCQyLlBPSU5URVJVUCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGVuZChldmVudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDbGFzc05hbWUkMi5QT0lOVEVSX0VWRU5UKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICQodGhpcy5fZWxlbWVudCkub24oRXZlbnQkMi5UT1VDSFNUQVJULCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gc3RhcnQoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbihFdmVudCQyLlRPVUNITU9WRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIG1vdmUoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbihFdmVudCQyLlRPVUNIRU5ELCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gZW5kKGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5fa2V5ZG93biA9IGZ1bmN0aW9uIF9rZXlkb3duKGV2ZW50KSB7XG4gICAgICBpZiAoL2lucHV0fHRleHRhcmVhL2kudGVzdChldmVudC50YXJnZXQudGFnTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGV2ZW50LndoaWNoKSB7XG4gICAgICAgIGNhc2UgQVJST1dfTEVGVF9LRVlDT0RFOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5wcmV2KCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBBUlJPV19SSUdIVF9LRVlDT0RFOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLl9nZXRJdGVtSW5kZXggPSBmdW5jdGlvbiBfZ2V0SXRlbUluZGV4KGVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2l0ZW1zID0gZWxlbWVudCAmJiBlbGVtZW50LnBhcmVudE5vZGUgPyBbXS5zbGljZS5jYWxsKGVsZW1lbnQucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKFNlbGVjdG9yJDIuSVRFTSkpIDogW107XG4gICAgICByZXR1cm4gdGhpcy5faXRlbXMuaW5kZXhPZihlbGVtZW50KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9nZXRJdGVtQnlEaXJlY3Rpb24gPSBmdW5jdGlvbiBfZ2V0SXRlbUJ5RGlyZWN0aW9uKGRpcmVjdGlvbiwgYWN0aXZlRWxlbWVudCkge1xuICAgICAgdmFyIGlzTmV4dERpcmVjdGlvbiA9IGRpcmVjdGlvbiA9PT0gRGlyZWN0aW9uLk5FWFQ7XG4gICAgICB2YXIgaXNQcmV2RGlyZWN0aW9uID0gZGlyZWN0aW9uID09PSBEaXJlY3Rpb24uUFJFVjtcblxuICAgICAgdmFyIGFjdGl2ZUluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KGFjdGl2ZUVsZW1lbnQpO1xuXG4gICAgICB2YXIgbGFzdEl0ZW1JbmRleCA9IHRoaXMuX2l0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgaXNHb2luZ1RvV3JhcCA9IGlzUHJldkRpcmVjdGlvbiAmJiBhY3RpdmVJbmRleCA9PT0gMCB8fCBpc05leHREaXJlY3Rpb24gJiYgYWN0aXZlSW5kZXggPT09IGxhc3RJdGVtSW5kZXg7XG5cbiAgICAgIGlmIChpc0dvaW5nVG9XcmFwICYmICF0aGlzLl9jb25maWcud3JhcCkge1xuICAgICAgICByZXR1cm4gYWN0aXZlRWxlbWVudDtcbiAgICAgIH1cblxuICAgICAgdmFyIGRlbHRhID0gZGlyZWN0aW9uID09PSBEaXJlY3Rpb24uUFJFViA/IC0xIDogMTtcbiAgICAgIHZhciBpdGVtSW5kZXggPSAoYWN0aXZlSW5kZXggKyBkZWx0YSkgJSB0aGlzLl9pdGVtcy5sZW5ndGg7XG4gICAgICByZXR1cm4gaXRlbUluZGV4ID09PSAtMSA/IHRoaXMuX2l0ZW1zW3RoaXMuX2l0ZW1zLmxlbmd0aCAtIDFdIDogdGhpcy5faXRlbXNbaXRlbUluZGV4XTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl90cmlnZ2VyU2xpZGVFdmVudCA9IGZ1bmN0aW9uIF90cmlnZ2VyU2xpZGVFdmVudChyZWxhdGVkVGFyZ2V0LCBldmVudERpcmVjdGlvbk5hbWUpIHtcbiAgICAgIHZhciB0YXJnZXRJbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleChyZWxhdGVkVGFyZ2V0KTtcblxuICAgICAgdmFyIGZyb21JbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleCh0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoU2VsZWN0b3IkMi5BQ1RJVkVfSVRFTSkpO1xuXG4gICAgICB2YXIgc2xpZGVFdmVudCA9ICQuRXZlbnQoRXZlbnQkMi5TTElERSwge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiByZWxhdGVkVGFyZ2V0LFxuICAgICAgICBkaXJlY3Rpb246IGV2ZW50RGlyZWN0aW9uTmFtZSxcbiAgICAgICAgZnJvbTogZnJvbUluZGV4LFxuICAgICAgICB0bzogdGFyZ2V0SW5kZXhcbiAgICAgIH0pO1xuICAgICAgJCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKHNsaWRlRXZlbnQpO1xuICAgICAgcmV0dXJuIHNsaWRlRXZlbnQ7XG4gICAgfTtcblxuICAgIF9wcm90by5fc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudCA9IGZ1bmN0aW9uIF9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgIGlmICh0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCkge1xuICAgICAgICB2YXIgaW5kaWNhdG9ycyA9IFtdLnNsaWNlLmNhbGwodGhpcy5faW5kaWNhdG9yc0VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3RvciQyLkFDVElWRSkpO1xuICAgICAgICAkKGluZGljYXRvcnMpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQyLkFDVElWRSk7XG5cbiAgICAgICAgdmFyIG5leHRJbmRpY2F0b3IgPSB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudC5jaGlsZHJlblt0aGlzLl9nZXRJdGVtSW5kZXgoZWxlbWVudCldO1xuXG4gICAgICAgIGlmIChuZXh0SW5kaWNhdG9yKSB7XG4gICAgICAgICAgJChuZXh0SW5kaWNhdG9yKS5hZGRDbGFzcyhDbGFzc05hbWUkMi5BQ1RJVkUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5fc2xpZGUgPSBmdW5jdGlvbiBfc2xpZGUoZGlyZWN0aW9uLCBlbGVtZW50KSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSB0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoU2VsZWN0b3IkMi5BQ1RJVkVfSVRFTSk7XG5cbiAgICAgIHZhciBhY3RpdmVFbGVtZW50SW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgoYWN0aXZlRWxlbWVudCk7XG5cbiAgICAgIHZhciBuZXh0RWxlbWVudCA9IGVsZW1lbnQgfHwgYWN0aXZlRWxlbWVudCAmJiB0aGlzLl9nZXRJdGVtQnlEaXJlY3Rpb24oZGlyZWN0aW9uLCBhY3RpdmVFbGVtZW50KTtcblxuICAgICAgdmFyIG5leHRFbGVtZW50SW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgobmV4dEVsZW1lbnQpO1xuXG4gICAgICB2YXIgaXNDeWNsaW5nID0gQm9vbGVhbih0aGlzLl9pbnRlcnZhbCk7XG4gICAgICB2YXIgZGlyZWN0aW9uYWxDbGFzc05hbWU7XG4gICAgICB2YXIgb3JkZXJDbGFzc05hbWU7XG4gICAgICB2YXIgZXZlbnREaXJlY3Rpb25OYW1lO1xuXG4gICAgICBpZiAoZGlyZWN0aW9uID09PSBEaXJlY3Rpb24uTkVYVCkge1xuICAgICAgICBkaXJlY3Rpb25hbENsYXNzTmFtZSA9IENsYXNzTmFtZSQyLkxFRlQ7XG4gICAgICAgIG9yZGVyQ2xhc3NOYW1lID0gQ2xhc3NOYW1lJDIuTkVYVDtcbiAgICAgICAgZXZlbnREaXJlY3Rpb25OYW1lID0gRGlyZWN0aW9uLkxFRlQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXJlY3Rpb25hbENsYXNzTmFtZSA9IENsYXNzTmFtZSQyLlJJR0hUO1xuICAgICAgICBvcmRlckNsYXNzTmFtZSA9IENsYXNzTmFtZSQyLlBSRVY7XG4gICAgICAgIGV2ZW50RGlyZWN0aW9uTmFtZSA9IERpcmVjdGlvbi5SSUdIVDtcbiAgICAgIH1cblxuICAgICAgaWYgKG5leHRFbGVtZW50ICYmICQobmV4dEVsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQyLkFDVElWRSkpIHtcbiAgICAgICAgdGhpcy5faXNTbGlkaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNsaWRlRXZlbnQgPSB0aGlzLl90cmlnZ2VyU2xpZGVFdmVudChuZXh0RWxlbWVudCwgZXZlbnREaXJlY3Rpb25OYW1lKTtcblxuICAgICAgaWYgKHNsaWRlRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWFjdGl2ZUVsZW1lbnQgfHwgIW5leHRFbGVtZW50KSB7XG4gICAgICAgIC8vIFNvbWUgd2VpcmRuZXNzIGlzIGhhcHBlbmluZywgc28gd2UgYmFpbFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lzU2xpZGluZyA9IHRydWU7XG5cbiAgICAgIGlmIChpc0N5Y2xpbmcpIHtcbiAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50KG5leHRFbGVtZW50KTtcblxuICAgICAgdmFyIHNsaWRFdmVudCA9ICQuRXZlbnQoRXZlbnQkMi5TTElELCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IG5leHRFbGVtZW50LFxuICAgICAgICBkaXJlY3Rpb246IGV2ZW50RGlyZWN0aW9uTmFtZSxcbiAgICAgICAgZnJvbTogYWN0aXZlRWxlbWVudEluZGV4LFxuICAgICAgICB0bzogbmV4dEVsZW1lbnRJbmRleFxuICAgICAgfSk7XG5cbiAgICAgIGlmICgkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQyLlNMSURFKSkge1xuICAgICAgICAkKG5leHRFbGVtZW50KS5hZGRDbGFzcyhvcmRlckNsYXNzTmFtZSk7XG4gICAgICAgIFV0aWwucmVmbG93KG5leHRFbGVtZW50KTtcbiAgICAgICAgJChhY3RpdmVFbGVtZW50KS5hZGRDbGFzcyhkaXJlY3Rpb25hbENsYXNzTmFtZSk7XG4gICAgICAgICQobmV4dEVsZW1lbnQpLmFkZENsYXNzKGRpcmVjdGlvbmFsQ2xhc3NOYW1lKTtcbiAgICAgICAgdmFyIG5leHRFbGVtZW50SW50ZXJ2YWwgPSBwYXJzZUludChuZXh0RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaW50ZXJ2YWwnKSwgMTApO1xuXG4gICAgICAgIGlmIChuZXh0RWxlbWVudEludGVydmFsKSB7XG4gICAgICAgICAgdGhpcy5fY29uZmlnLmRlZmF1bHRJbnRlcnZhbCA9IHRoaXMuX2NvbmZpZy5kZWZhdWx0SW50ZXJ2YWwgfHwgdGhpcy5fY29uZmlnLmludGVydmFsO1xuICAgICAgICAgIHRoaXMuX2NvbmZpZy5pbnRlcnZhbCA9IG5leHRFbGVtZW50SW50ZXJ2YWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fY29uZmlnLmludGVydmFsID0gdGhpcy5fY29uZmlnLmRlZmF1bHRJbnRlcnZhbCB8fCB0aGlzLl9jb25maWcuaW50ZXJ2YWw7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudChhY3RpdmVFbGVtZW50KTtcbiAgICAgICAgJChhY3RpdmVFbGVtZW50KS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICQobmV4dEVsZW1lbnQpLnJlbW92ZUNsYXNzKGRpcmVjdGlvbmFsQ2xhc3NOYW1lICsgXCIgXCIgKyBvcmRlckNsYXNzTmFtZSkuYWRkQ2xhc3MoQ2xhc3NOYW1lJDIuQUNUSVZFKTtcbiAgICAgICAgICAkKGFjdGl2ZUVsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQyLkFDVElWRSArIFwiIFwiICsgb3JkZXJDbGFzc05hbWUgKyBcIiBcIiArIGRpcmVjdGlvbmFsQ2xhc3NOYW1lKTtcbiAgICAgICAgICBfdGhpczQuX2lzU2xpZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICQoX3RoaXM0Ll9lbGVtZW50KS50cmlnZ2VyKHNsaWRFdmVudCk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkKGFjdGl2ZUVsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQyLkFDVElWRSk7XG4gICAgICAgICQobmV4dEVsZW1lbnQpLmFkZENsYXNzKENsYXNzTmFtZSQyLkFDVElWRSk7XG4gICAgICAgIHRoaXMuX2lzU2xpZGluZyA9IGZhbHNlO1xuICAgICAgICAkKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoc2xpZEV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzQ3ljbGluZykge1xuICAgICAgICB0aGlzLmN5Y2xlKCk7XG4gICAgICB9XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBDYXJvdXNlbC5falF1ZXJ5SW50ZXJmYWNlID0gZnVuY3Rpb24gX2pRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YShEQVRBX0tFWSQyKTtcblxuICAgICAgICB2YXIgX2NvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIERlZmF1bHQsICQodGhpcykuZGF0YSgpKTtcblxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBfY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgX2NvbmZpZywgY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBhY3Rpb24gPSB0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJyA/IGNvbmZpZyA6IF9jb25maWcuc2xpZGU7XG5cbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IG5ldyBDYXJvdXNlbCh0aGlzLCBfY29uZmlnKTtcbiAgICAgICAgICAkKHRoaXMpLmRhdGEoREFUQV9LRVkkMiwgZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBkYXRhLnRvKGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGRhdGFbYWN0aW9uXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyBtZXRob2QgbmFtZWQgXFxcIlwiICsgYWN0aW9uICsgXCJcXFwiXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRhdGFbYWN0aW9uXSgpO1xuICAgICAgICB9IGVsc2UgaWYgKF9jb25maWcuaW50ZXJ2YWwgJiYgX2NvbmZpZy5yaWRlKSB7XG4gICAgICAgICAgZGF0YS5wYXVzZSgpO1xuICAgICAgICAgIGRhdGEuY3ljbGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIENhcm91c2VsLl9kYXRhQXBpQ2xpY2tIYW5kbGVyID0gZnVuY3Rpb24gX2RhdGFBcGlDbGlja0hhbmRsZXIoZXZlbnQpIHtcbiAgICAgIHZhciBzZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0aGlzKTtcblxuICAgICAgaWYgKCFzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciB0YXJnZXQgPSAkKHNlbGVjdG9yKVswXTtcblxuICAgICAgaWYgKCF0YXJnZXQgfHwgISQodGFyZ2V0KS5oYXNDbGFzcyhDbGFzc05hbWUkMi5DQVJPVVNFTCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgJCh0YXJnZXQpLmRhdGEoKSwgJCh0aGlzKS5kYXRhKCkpO1xuXG4gICAgICB2YXIgc2xpZGVJbmRleCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdkYXRhLXNsaWRlLXRvJyk7XG5cbiAgICAgIGlmIChzbGlkZUluZGV4KSB7XG4gICAgICAgIGNvbmZpZy5pbnRlcnZhbCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBDYXJvdXNlbC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoJCh0YXJnZXQpLCBjb25maWcpO1xuXG4gICAgICBpZiAoc2xpZGVJbmRleCkge1xuICAgICAgICAkKHRhcmdldCkuZGF0YShEQVRBX0tFWSQyKS50byhzbGlkZUluZGV4KTtcbiAgICAgIH1cblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9O1xuXG4gICAgX2NyZWF0ZUNsYXNzKENhcm91c2VsLCBudWxsLCBbe1xuICAgICAga2V5OiBcIlZFUlNJT05cIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gVkVSU0lPTiQyO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJEZWZhdWx0XCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIERlZmF1bHQ7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIENhcm91c2VsO1xuICB9KCk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJChkb2N1bWVudCkub24oRXZlbnQkMi5DTElDS19EQVRBX0FQSSwgU2VsZWN0b3IkMi5EQVRBX1NMSURFLCBDYXJvdXNlbC5fZGF0YUFwaUNsaWNrSGFuZGxlcik7XG4gICQod2luZG93KS5vbihFdmVudCQyLkxPQURfREFUQV9BUEksIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY2Fyb3VzZWxzID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFNlbGVjdG9yJDIuREFUQV9SSURFKSk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gY2Fyb3VzZWxzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB2YXIgJGNhcm91c2VsID0gJChjYXJvdXNlbHNbaV0pO1xuXG4gICAgICBDYXJvdXNlbC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoJGNhcm91c2VsLCAkY2Fyb3VzZWwuZGF0YSgpKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIGpRdWVyeVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgJC5mbltOQU1FJDJdID0gQ2Fyb3VzZWwuX2pRdWVyeUludGVyZmFjZTtcbiAgJC5mbltOQU1FJDJdLkNvbnN0cnVjdG9yID0gQ2Fyb3VzZWw7XG5cbiAgJC5mbltOQU1FJDJdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbltOQU1FJDJdID0gSlFVRVJZX05PX0NPTkZMSUNUJDI7XG4gICAgcmV0dXJuIENhcm91c2VsLl9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBDb25zdGFudHNcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBOQU1FJDMgPSAnY29sbGFwc2UnO1xuICB2YXIgVkVSU0lPTiQzID0gJzQuMy4xJztcbiAgdmFyIERBVEFfS0VZJDMgPSAnYnMuY29sbGFwc2UnO1xuICB2YXIgRVZFTlRfS0VZJDMgPSBcIi5cIiArIERBVEFfS0VZJDM7XG4gIHZhciBEQVRBX0FQSV9LRVkkMyA9ICcuZGF0YS1hcGknO1xuICB2YXIgSlFVRVJZX05PX0NPTkZMSUNUJDMgPSAkLmZuW05BTUUkM107XG4gIHZhciBEZWZhdWx0JDEgPSB7XG4gICAgdG9nZ2xlOiB0cnVlLFxuICAgIHBhcmVudDogJydcbiAgfTtcbiAgdmFyIERlZmF1bHRUeXBlJDEgPSB7XG4gICAgdG9nZ2xlOiAnYm9vbGVhbicsXG4gICAgcGFyZW50OiAnKHN0cmluZ3xlbGVtZW50KSdcbiAgfTtcbiAgdmFyIEV2ZW50JDMgPSB7XG4gICAgU0hPVzogXCJzaG93XCIgKyBFVkVOVF9LRVkkMyxcbiAgICBTSE9XTjogXCJzaG93blwiICsgRVZFTlRfS0VZJDMsXG4gICAgSElERTogXCJoaWRlXCIgKyBFVkVOVF9LRVkkMyxcbiAgICBISURERU46IFwiaGlkZGVuXCIgKyBFVkVOVF9LRVkkMyxcbiAgICBDTElDS19EQVRBX0FQSTogXCJjbGlja1wiICsgRVZFTlRfS0VZJDMgKyBEQVRBX0FQSV9LRVkkM1xuICB9O1xuICB2YXIgQ2xhc3NOYW1lJDMgPSB7XG4gICAgU0hPVzogJ3Nob3cnLFxuICAgIENPTExBUFNFOiAnY29sbGFwc2UnLFxuICAgIENPTExBUFNJTkc6ICdjb2xsYXBzaW5nJyxcbiAgICBDT0xMQVBTRUQ6ICdjb2xsYXBzZWQnXG4gIH07XG4gIHZhciBEaW1lbnNpb24gPSB7XG4gICAgV0lEVEg6ICd3aWR0aCcsXG4gICAgSEVJR0hUOiAnaGVpZ2h0J1xuICB9O1xuICB2YXIgU2VsZWN0b3IkMyA9IHtcbiAgICBBQ1RJVkVTOiAnLnNob3csIC5jb2xsYXBzaW5nJyxcbiAgICBEQVRBX1RPR0dMRTogJ1tkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJdJ1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIENsYXNzIERlZmluaXRpb25cbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuICB9O1xuXG4gIHZhciBDb2xsYXBzZSA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbGxhcHNlKGVsZW1lbnQsIGNvbmZpZykge1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgICAgdGhpcy5fdHJpZ2dlckFycmF5ID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtdG9nZ2xlPVxcXCJjb2xsYXBzZVxcXCJdW2hyZWY9XFxcIiNcIiArIGVsZW1lbnQuaWQgKyBcIlxcXCJdLFwiICsgKFwiW2RhdGEtdG9nZ2xlPVxcXCJjb2xsYXBzZVxcXCJdW2RhdGEtdGFyZ2V0PVxcXCIjXCIgKyBlbGVtZW50LmlkICsgXCJcXFwiXVwiKSkpO1xuICAgICAgdmFyIHRvZ2dsZUxpc3QgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IkMy5EQVRBX1RPR0dMRSkpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdG9nZ2xlTGlzdC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICB2YXIgZWxlbSA9IHRvZ2dsZUxpc3RbaV07XG4gICAgICAgIHZhciBzZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtKTtcbiAgICAgICAgdmFyIGZpbHRlckVsZW1lbnQgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKS5maWx0ZXIoZnVuY3Rpb24gKGZvdW5kRWxlbSkge1xuICAgICAgICAgIHJldHVybiBmb3VuZEVsZW0gPT09IGVsZW1lbnQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChzZWxlY3RvciAhPT0gbnVsbCAmJiBmaWx0ZXJFbGVtZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3RvciA9IHNlbGVjdG9yO1xuXG4gICAgICAgICAgdGhpcy5fdHJpZ2dlckFycmF5LnB1c2goZWxlbSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fcGFyZW50ID0gdGhpcy5fY29uZmlnLnBhcmVudCA/IHRoaXMuX2dldFBhcmVudCgpIDogbnVsbDtcblxuICAgICAgaWYgKCF0aGlzLl9jb25maWcucGFyZW50KSB7XG4gICAgICAgIHRoaXMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0aGlzLl9lbGVtZW50LCB0aGlzLl90cmlnZ2VyQXJyYXkpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fY29uZmlnLnRvZ2dsZSkge1xuICAgICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgICAgfVxuICAgIH0gLy8gR2V0dGVyc1xuXG5cbiAgICB2YXIgX3Byb3RvID0gQ29sbGFwc2UucHJvdG90eXBlO1xuXG4gICAgLy8gUHVibGljXG4gICAgX3Byb3RvLnRvZ2dsZSA9IGZ1bmN0aW9uIHRvZ2dsZSgpIHtcbiAgICAgIGlmICgkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQzLlNIT1cpKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5zaG93ID0gZnVuY3Rpb24gc2hvdygpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLl9pc1RyYW5zaXRpb25pbmcgfHwgJCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUkMy5TSE9XKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBhY3RpdmVzO1xuICAgICAgdmFyIGFjdGl2ZXNEYXRhO1xuXG4gICAgICBpZiAodGhpcy5fcGFyZW50KSB7XG4gICAgICAgIGFjdGl2ZXMgPSBbXS5zbGljZS5jYWxsKHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFNlbGVjdG9yJDMuQUNUSVZFUykpLmZpbHRlcihmdW5jdGlvbiAoZWxlbSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgX3RoaXMuX2NvbmZpZy5wYXJlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGFyZW50JykgPT09IF90aGlzLl9jb25maWcucGFyZW50O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBlbGVtLmNsYXNzTGlzdC5jb250YWlucyhDbGFzc05hbWUkMy5DT0xMQVBTRSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChhY3RpdmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGFjdGl2ZXMgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhY3RpdmVzKSB7XG4gICAgICAgIGFjdGl2ZXNEYXRhID0gJChhY3RpdmVzKS5ub3QodGhpcy5fc2VsZWN0b3IpLmRhdGEoREFUQV9LRVkkMyk7XG5cbiAgICAgICAgaWYgKGFjdGl2ZXNEYXRhICYmIGFjdGl2ZXNEYXRhLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHN0YXJ0RXZlbnQgPSAkLkV2ZW50KEV2ZW50JDMuU0hPVyk7XG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoc3RhcnRFdmVudCk7XG5cbiAgICAgIGlmIChzdGFydEV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGFjdGl2ZXMpIHtcbiAgICAgICAgQ29sbGFwc2UuX2pRdWVyeUludGVyZmFjZS5jYWxsKCQoYWN0aXZlcykubm90KHRoaXMuX3NlbGVjdG9yKSwgJ2hpZGUnKTtcblxuICAgICAgICBpZiAoIWFjdGl2ZXNEYXRhKSB7XG4gICAgICAgICAgJChhY3RpdmVzKS5kYXRhKERBVEFfS0VZJDMsIG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBkaW1lbnNpb24gPSB0aGlzLl9nZXREaW1lbnNpb24oKTtcblxuICAgICAgJCh0aGlzLl9lbGVtZW50KS5yZW1vdmVDbGFzcyhDbGFzc05hbWUkMy5DT0xMQVBTRSkuYWRkQ2xhc3MoQ2xhc3NOYW1lJDMuQ09MTEFQU0lORyk7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSAwO1xuXG4gICAgICBpZiAodGhpcy5fdHJpZ2dlckFycmF5Lmxlbmd0aCkge1xuICAgICAgICAkKHRoaXMuX3RyaWdnZXJBcnJheSkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lJDMuQ09MTEFQU0VEKS5hdHRyKCdhcmlhLWV4cGFuZGVkJywgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0VHJhbnNpdGlvbmluZyh0cnVlKTtcblxuICAgICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24gY29tcGxldGUoKSB7XG4gICAgICAgICQoX3RoaXMuX2VsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQzLkNPTExBUFNJTkcpLmFkZENsYXNzKENsYXNzTmFtZSQzLkNPTExBUFNFKS5hZGRDbGFzcyhDbGFzc05hbWUkMy5TSE9XKTtcbiAgICAgICAgX3RoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9ICcnO1xuXG4gICAgICAgIF90aGlzLnNldFRyYW5zaXRpb25pbmcoZmFsc2UpO1xuXG4gICAgICAgICQoX3RoaXMuX2VsZW1lbnQpLnRyaWdnZXIoRXZlbnQkMy5TSE9XTik7XG4gICAgICB9O1xuXG4gICAgICB2YXIgY2FwaXRhbGl6ZWREaW1lbnNpb24gPSBkaW1lbnNpb25bMF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSgxKTtcbiAgICAgIHZhciBzY3JvbGxTaXplID0gXCJzY3JvbGxcIiArIGNhcGl0YWxpemVkRGltZW5zaW9uO1xuICAgICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7XG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCBjb21wbGV0ZSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9IHRoaXMuX2VsZW1lbnRbc2Nyb2xsU2l6ZV0gKyBcInB4XCI7XG4gICAgfTtcblxuICAgIF9wcm90by5oaWRlID0gZnVuY3Rpb24gaGlkZSgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5faXNUcmFuc2l0aW9uaW5nIHx8ICEkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQzLlNIT1cpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0YXJ0RXZlbnQgPSAkLkV2ZW50KEV2ZW50JDMuSElERSk7XG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoc3RhcnRFdmVudCk7XG5cbiAgICAgIGlmIChzdGFydEV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGRpbWVuc2lvbiA9IHRoaXMuX2dldERpbWVuc2lvbigpO1xuXG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSB0aGlzLl9lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2RpbWVuc2lvbl0gKyBcInB4XCI7XG4gICAgICBVdGlsLnJlZmxvdyh0aGlzLl9lbGVtZW50KTtcbiAgICAgICQodGhpcy5fZWxlbWVudCkuYWRkQ2xhc3MoQ2xhc3NOYW1lJDMuQ09MTEFQU0lORykucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lJDMuQ09MTEFQU0UpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQzLlNIT1cpO1xuICAgICAgdmFyIHRyaWdnZXJBcnJheUxlbmd0aCA9IHRoaXMuX3RyaWdnZXJBcnJheS5sZW5ndGg7XG5cbiAgICAgIGlmICh0cmlnZ2VyQXJyYXlMZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJpZ2dlckFycmF5TGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgdHJpZ2dlciA9IHRoaXMuX3RyaWdnZXJBcnJheVtpXTtcbiAgICAgICAgICB2YXIgc2VsZWN0b3IgPSBVdGlsLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodHJpZ2dlcik7XG5cbiAgICAgICAgICBpZiAoc2VsZWN0b3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciAkZWxlbSA9ICQoW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkpO1xuXG4gICAgICAgICAgICBpZiAoISRlbGVtLmhhc0NsYXNzKENsYXNzTmFtZSQzLlNIT1cpKSB7XG4gICAgICAgICAgICAgICQodHJpZ2dlcikuYWRkQ2xhc3MoQ2xhc3NOYW1lJDMuQ09MTEFQU0VEKS5hdHRyKCdhcmlhLWV4cGFuZGVkJywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFRyYW5zaXRpb25pbmcodHJ1ZSk7XG5cbiAgICAgIHZhciBjb21wbGV0ZSA9IGZ1bmN0aW9uIGNvbXBsZXRlKCkge1xuICAgICAgICBfdGhpczIuc2V0VHJhbnNpdGlvbmluZyhmYWxzZSk7XG5cbiAgICAgICAgJChfdGhpczIuX2VsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQzLkNPTExBUFNJTkcpLmFkZENsYXNzKENsYXNzTmFtZSQzLkNPTExBUFNFKS50cmlnZ2VyKEV2ZW50JDMuSElEREVOKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9ICcnO1xuICAgICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7XG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCBjb21wbGV0ZSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLnNldFRyYW5zaXRpb25pbmcgPSBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uaW5nKGlzVHJhbnNpdGlvbmluZykge1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gaXNUcmFuc2l0aW9uaW5nO1xuICAgIH07XG5cbiAgICBfcHJvdG8uZGlzcG9zZSA9IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgICAkLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwgREFUQV9LRVkkMyk7XG4gICAgICB0aGlzLl9jb25maWcgPSBudWxsO1xuICAgICAgdGhpcy5fcGFyZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsO1xuICAgICAgdGhpcy5fdHJpZ2dlckFycmF5ID0gbnVsbDtcbiAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IG51bGw7XG4gICAgfSAvLyBQcml2YXRlXG4gICAgO1xuXG4gICAgX3Byb3RvLl9nZXRDb25maWcgPSBmdW5jdGlvbiBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgICAgY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgRGVmYXVsdCQxLCBjb25maWcpO1xuICAgICAgY29uZmlnLnRvZ2dsZSA9IEJvb2xlYW4oY29uZmlnLnRvZ2dsZSk7IC8vIENvZXJjZSBzdHJpbmcgdmFsdWVzXG5cbiAgICAgIFV0aWwudHlwZUNoZWNrQ29uZmlnKE5BTUUkMywgY29uZmlnLCBEZWZhdWx0VHlwZSQxKTtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0RGltZW5zaW9uID0gZnVuY3Rpb24gX2dldERpbWVuc2lvbigpIHtcbiAgICAgIHZhciBoYXNXaWR0aCA9ICQodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoRGltZW5zaW9uLldJRFRIKTtcbiAgICAgIHJldHVybiBoYXNXaWR0aCA/IERpbWVuc2lvbi5XSURUSCA6IERpbWVuc2lvbi5IRUlHSFQ7XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0UGFyZW50ID0gZnVuY3Rpb24gX2dldFBhcmVudCgpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgcGFyZW50O1xuXG4gICAgICBpZiAoVXRpbC5pc0VsZW1lbnQodGhpcy5fY29uZmlnLnBhcmVudCkpIHtcbiAgICAgICAgcGFyZW50ID0gdGhpcy5fY29uZmlnLnBhcmVudDsgLy8gSXQncyBhIGpRdWVyeSBvYmplY3RcblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX2NvbmZpZy5wYXJlbnQuanF1ZXJ5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHBhcmVudCA9IHRoaXMuX2NvbmZpZy5wYXJlbnRbMF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5fY29uZmlnLnBhcmVudCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzZWxlY3RvciA9IFwiW2RhdGEtdG9nZ2xlPVxcXCJjb2xsYXBzZVxcXCJdW2RhdGEtcGFyZW50PVxcXCJcIiArIHRoaXMuX2NvbmZpZy5wYXJlbnQgKyBcIlxcXCJdXCI7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBbXS5zbGljZS5jYWxsKHBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSk7XG4gICAgICAkKGNoaWxkcmVuKS5lYWNoKGZ1bmN0aW9uIChpLCBlbGVtZW50KSB7XG4gICAgICAgIF90aGlzMy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKENvbGxhcHNlLl9nZXRUYXJnZXRGcm9tRWxlbWVudChlbGVtZW50KSwgW2VsZW1lbnRdKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MgPSBmdW5jdGlvbiBfYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKGVsZW1lbnQsIHRyaWdnZXJBcnJheSkge1xuICAgICAgdmFyIGlzT3BlbiA9ICQoZWxlbWVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1lJDMuU0hPVyk7XG5cbiAgICAgIGlmICh0cmlnZ2VyQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICQodHJpZ2dlckFycmF5KS50b2dnbGVDbGFzcyhDbGFzc05hbWUkMy5DT0xMQVBTRUQsICFpc09wZW4pLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCBpc09wZW4pO1xuICAgICAgfVxuICAgIH0gLy8gU3RhdGljXG4gICAgO1xuXG4gICAgQ29sbGFwc2UuX2dldFRhcmdldEZyb21FbGVtZW50ID0gZnVuY3Rpb24gX2dldFRhcmdldEZyb21FbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgIHZhciBzZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtZW50KTtcbiAgICAgIHJldHVybiBzZWxlY3RvciA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpIDogbnVsbDtcbiAgICB9O1xuXG4gICAgQ29sbGFwc2UuX2pRdWVyeUludGVyZmFjZSA9IGZ1bmN0aW9uIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTtcbiAgICAgICAgdmFyIGRhdGEgPSAkdGhpcy5kYXRhKERBVEFfS0VZJDMpO1xuXG4gICAgICAgIHZhciBfY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgRGVmYXVsdCQxLCAkdGhpcy5kYXRhKCksIHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZyA/IGNvbmZpZyA6IHt9KTtcblxuICAgICAgICBpZiAoIWRhdGEgJiYgX2NvbmZpZy50b2dnbGUgJiYgL3Nob3d8aGlkZS8udGVzdChjb25maWcpKSB7XG4gICAgICAgICAgX2NvbmZpZy50b2dnbGUgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgIGRhdGEgPSBuZXcgQ29sbGFwc2UodGhpcywgX2NvbmZpZyk7XG4gICAgICAgICAgJHRoaXMuZGF0YShEQVRBX0tFWSQzLCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIG1ldGhvZCBuYW1lZCBcXFwiXCIgKyBjb25maWcgKyBcIlxcXCJcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBfY3JlYXRlQ2xhc3MoQ29sbGFwc2UsIG51bGwsIFt7XG4gICAgICBrZXk6IFwiVkVSU0lPTlwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBWRVJTSU9OJDM7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkRlZmF1bHRcIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gRGVmYXVsdCQxO1xuICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBDb2xsYXBzZTtcbiAgfSgpO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuXG4gICQoZG9jdW1lbnQpLm9uKEV2ZW50JDMuQ0xJQ0tfREFUQV9BUEksIFNlbGVjdG9yJDMuREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIC8vIHByZXZlbnREZWZhdWx0IG9ubHkgZm9yIDxhPiBlbGVtZW50cyAod2hpY2ggY2hhbmdlIHRoZSBVUkwpIG5vdCBpbnNpZGUgdGhlIGNvbGxhcHNpYmxlIGVsZW1lbnRcbiAgICBpZiAoZXZlbnQuY3VycmVudFRhcmdldC50YWdOYW1lID09PSAnQScpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyICR0cmlnZ2VyID0gJCh0aGlzKTtcbiAgICB2YXIgc2VsZWN0b3IgPSBVdGlsLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodGhpcyk7XG4gICAgdmFyIHNlbGVjdG9ycyA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikpO1xuICAgICQoc2VsZWN0b3JzKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkdGFyZ2V0ID0gJCh0aGlzKTtcbiAgICAgIHZhciBkYXRhID0gJHRhcmdldC5kYXRhKERBVEFfS0VZJDMpO1xuICAgICAgdmFyIGNvbmZpZyA9IGRhdGEgPyAndG9nZ2xlJyA6ICR0cmlnZ2VyLmRhdGEoKTtcblxuICAgICAgQ29sbGFwc2UuX2pRdWVyeUludGVyZmFjZS5jYWxsKCR0YXJnZXQsIGNvbmZpZyk7XG4gICAgfSk7XG4gIH0pO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIGpRdWVyeVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgJC5mbltOQU1FJDNdID0gQ29sbGFwc2UuX2pRdWVyeUludGVyZmFjZTtcbiAgJC5mbltOQU1FJDNdLkNvbnN0cnVjdG9yID0gQ29sbGFwc2U7XG5cbiAgJC5mbltOQU1FJDNdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbltOQU1FJDNdID0gSlFVRVJZX05PX0NPTkZMSUNUJDM7XG4gICAgcmV0dXJuIENvbGxhcHNlLl9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBDb25zdGFudHNcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBOQU1FJDQgPSAnZHJvcGRvd24nO1xuICB2YXIgVkVSU0lPTiQ0ID0gJzQuMy4xJztcbiAgdmFyIERBVEFfS0VZJDQgPSAnYnMuZHJvcGRvd24nO1xuICB2YXIgRVZFTlRfS0VZJDQgPSBcIi5cIiArIERBVEFfS0VZJDQ7XG4gIHZhciBEQVRBX0FQSV9LRVkkNCA9ICcuZGF0YS1hcGknO1xuICB2YXIgSlFVRVJZX05PX0NPTkZMSUNUJDQgPSAkLmZuW05BTUUkNF07XG4gIHZhciBFU0NBUEVfS0VZQ09ERSA9IDI3OyAvLyBLZXlib2FyZEV2ZW50LndoaWNoIHZhbHVlIGZvciBFc2NhcGUgKEVzYykga2V5XG5cbiAgdmFyIFNQQUNFX0tFWUNPREUgPSAzMjsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3Igc3BhY2Uga2V5XG5cbiAgdmFyIFRBQl9LRVlDT0RFID0gOTsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3IgdGFiIGtleVxuXG4gIHZhciBBUlJPV19VUF9LRVlDT0RFID0gMzg7IC8vIEtleWJvYXJkRXZlbnQud2hpY2ggdmFsdWUgZm9yIHVwIGFycm93IGtleVxuXG4gIHZhciBBUlJPV19ET1dOX0tFWUNPREUgPSA0MDsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3IgZG93biBhcnJvdyBrZXlcblxuICB2YXIgUklHSFRfTU9VU0VfQlVUVE9OX1dISUNIID0gMzsgLy8gTW91c2VFdmVudC53aGljaCB2YWx1ZSBmb3IgdGhlIHJpZ2h0IGJ1dHRvbiAoYXNzdW1pbmcgYSByaWdodC1oYW5kZWQgbW91c2UpXG5cbiAgdmFyIFJFR0VYUF9LRVlET1dOID0gbmV3IFJlZ0V4cChBUlJPV19VUF9LRVlDT0RFICsgXCJ8XCIgKyBBUlJPV19ET1dOX0tFWUNPREUgKyBcInxcIiArIEVTQ0FQRV9LRVlDT0RFKTtcbiAgdmFyIEV2ZW50JDQgPSB7XG4gICAgSElERTogXCJoaWRlXCIgKyBFVkVOVF9LRVkkNCxcbiAgICBISURERU46IFwiaGlkZGVuXCIgKyBFVkVOVF9LRVkkNCxcbiAgICBTSE9XOiBcInNob3dcIiArIEVWRU5UX0tFWSQ0LFxuICAgIFNIT1dOOiBcInNob3duXCIgKyBFVkVOVF9LRVkkNCxcbiAgICBDTElDSzogXCJjbGlja1wiICsgRVZFTlRfS0VZJDQsXG4gICAgQ0xJQ0tfREFUQV9BUEk6IFwiY2xpY2tcIiArIEVWRU5UX0tFWSQ0ICsgREFUQV9BUElfS0VZJDQsXG4gICAgS0VZRE9XTl9EQVRBX0FQSTogXCJrZXlkb3duXCIgKyBFVkVOVF9LRVkkNCArIERBVEFfQVBJX0tFWSQ0LFxuICAgIEtFWVVQX0RBVEFfQVBJOiBcImtleXVwXCIgKyBFVkVOVF9LRVkkNCArIERBVEFfQVBJX0tFWSQ0XG4gIH07XG4gIHZhciBDbGFzc05hbWUkNCA9IHtcbiAgICBESVNBQkxFRDogJ2Rpc2FibGVkJyxcbiAgICBTSE9XOiAnc2hvdycsXG4gICAgRFJPUFVQOiAnZHJvcHVwJyxcbiAgICBEUk9QUklHSFQ6ICdkcm9wcmlnaHQnLFxuICAgIERST1BMRUZUOiAnZHJvcGxlZnQnLFxuICAgIE1FTlVSSUdIVDogJ2Ryb3Bkb3duLW1lbnUtcmlnaHQnLFxuICAgIE1FTlVMRUZUOiAnZHJvcGRvd24tbWVudS1sZWZ0JyxcbiAgICBQT1NJVElPTl9TVEFUSUM6ICdwb3NpdGlvbi1zdGF0aWMnXG4gIH07XG4gIHZhciBTZWxlY3RvciQ0ID0ge1xuICAgIERBVEFfVE9HR0xFOiAnW2RhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIl0nLFxuICAgIEZPUk1fQ0hJTEQ6ICcuZHJvcGRvd24gZm9ybScsXG4gICAgTUVOVTogJy5kcm9wZG93bi1tZW51JyxcbiAgICBOQVZCQVJfTkFWOiAnLm5hdmJhci1uYXYnLFxuICAgIFZJU0lCTEVfSVRFTVM6ICcuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbTpub3QoLmRpc2FibGVkKTpub3QoOmRpc2FibGVkKSdcbiAgfTtcbiAgdmFyIEF0dGFjaG1lbnRNYXAgPSB7XG4gICAgVE9QOiAndG9wLXN0YXJ0JyxcbiAgICBUT1BFTkQ6ICd0b3AtZW5kJyxcbiAgICBCT1RUT006ICdib3R0b20tc3RhcnQnLFxuICAgIEJPVFRPTUVORDogJ2JvdHRvbS1lbmQnLFxuICAgIFJJR0hUOiAncmlnaHQtc3RhcnQnLFxuICAgIFJJR0hURU5EOiAncmlnaHQtZW5kJyxcbiAgICBMRUZUOiAnbGVmdC1zdGFydCcsXG4gICAgTEVGVEVORDogJ2xlZnQtZW5kJ1xuICB9O1xuICB2YXIgRGVmYXVsdCQyID0ge1xuICAgIG9mZnNldDogMCxcbiAgICBmbGlwOiB0cnVlLFxuICAgIGJvdW5kYXJ5OiAnc2Nyb2xsUGFyZW50JyxcbiAgICByZWZlcmVuY2U6ICd0b2dnbGUnLFxuICAgIGRpc3BsYXk6ICdkeW5hbWljJ1xuICB9O1xuICB2YXIgRGVmYXVsdFR5cGUkMiA9IHtcbiAgICBvZmZzZXQ6ICcobnVtYmVyfHN0cmluZ3xmdW5jdGlvbiknLFxuICAgIGZsaXA6ICdib29sZWFuJyxcbiAgICBib3VuZGFyeTogJyhzdHJpbmd8ZWxlbWVudCknLFxuICAgIHJlZmVyZW5jZTogJyhzdHJpbmd8ZWxlbWVudCknLFxuICAgIGRpc3BsYXk6ICdzdHJpbmcnXG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG4gIH07XG5cbiAgdmFyIERyb3Bkb3duID1cbiAgLyojX19QVVJFX18qL1xuICBmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRHJvcGRvd24oZWxlbWVudCwgY29uZmlnKSB7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgIHRoaXMuX3BvcHBlciA9IG51bGw7XG4gICAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICAgIHRoaXMuX21lbnUgPSB0aGlzLl9nZXRNZW51RWxlbWVudCgpO1xuICAgICAgdGhpcy5faW5OYXZiYXIgPSB0aGlzLl9kZXRlY3ROYXZiYXIoKTtcblxuICAgICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICB9IC8vIEdldHRlcnNcblxuXG4gICAgdmFyIF9wcm90byA9IERyb3Bkb3duLnByb3RvdHlwZTtcblxuICAgIC8vIFB1YmxpY1xuICAgIF9wcm90by50b2dnbGUgPSBmdW5jdGlvbiB0b2dnbGUoKSB7XG4gICAgICBpZiAodGhpcy5fZWxlbWVudC5kaXNhYmxlZCB8fCAkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQ0LkRJU0FCTEVEKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBwYXJlbnQgPSBEcm9wZG93bi5fZ2V0UGFyZW50RnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7XG5cbiAgICAgIHZhciBpc0FjdGl2ZSA9ICQodGhpcy5fbWVudSkuaGFzQ2xhc3MoQ2xhc3NOYW1lJDQuU0hPVyk7XG5cbiAgICAgIERyb3Bkb3duLl9jbGVhck1lbnVzKCk7XG5cbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiB0aGlzLl9lbGVtZW50XG4gICAgICB9O1xuICAgICAgdmFyIHNob3dFdmVudCA9ICQuRXZlbnQoRXZlbnQkNC5TSE9XLCByZWxhdGVkVGFyZ2V0KTtcbiAgICAgICQocGFyZW50KS50cmlnZ2VyKHNob3dFdmVudCk7XG5cbiAgICAgIGlmIChzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBEaXNhYmxlIHRvdGFsbHkgUG9wcGVyLmpzIGZvciBEcm9wZG93biBpbiBOYXZiYXJcblxuXG4gICAgICBpZiAoIXRoaXMuX2luTmF2YmFyKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDaGVjayBmb3IgUG9wcGVyIGRlcGVuZGVuY3lcbiAgICAgICAgICogUG9wcGVyIC0gaHR0cHM6Ly9wb3BwZXIuanMub3JnXG4gICAgICAgICAqL1xuICAgICAgICBpZiAodHlwZW9mIFBvcHBlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb290c3RyYXBcXCdzIGRyb3Bkb3ducyByZXF1aXJlIFBvcHBlci5qcyAoaHR0cHM6Ly9wb3BwZXIuanMub3JnLyknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fZWxlbWVudDtcblxuICAgICAgICBpZiAodGhpcy5fY29uZmlnLnJlZmVyZW5jZSA9PT0gJ3BhcmVudCcpIHtcbiAgICAgICAgICByZWZlcmVuY2VFbGVtZW50ID0gcGFyZW50O1xuICAgICAgICB9IGVsc2UgaWYgKFV0aWwuaXNFbGVtZW50KHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UpKSB7XG4gICAgICAgICAgcmVmZXJlbmNlRWxlbWVudCA9IHRoaXMuX2NvbmZpZy5yZWZlcmVuY2U7IC8vIENoZWNrIGlmIGl0J3MgalF1ZXJ5IGVsZW1lbnRcblxuICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fY29uZmlnLnJlZmVyZW5jZS5qcXVlcnkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fY29uZmlnLnJlZmVyZW5jZVswXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gSWYgYm91bmRhcnkgaXMgbm90IGBzY3JvbGxQYXJlbnRgLCB0aGVuIHNldCBwb3NpdGlvbiB0byBgc3RhdGljYFxuICAgICAgICAvLyB0byBhbGxvdyB0aGUgbWVudSB0byBcImVzY2FwZVwiIHRoZSBzY3JvbGwgcGFyZW50J3MgYm91bmRhcmllc1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzI0MjUxXG5cblxuICAgICAgICBpZiAodGhpcy5fY29uZmlnLmJvdW5kYXJ5ICE9PSAnc2Nyb2xsUGFyZW50Jykge1xuICAgICAgICAgICQocGFyZW50KS5hZGRDbGFzcyhDbGFzc05hbWUkNC5QT1NJVElPTl9TVEFUSUMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcG9wcGVyID0gbmV3IFBvcHBlcihyZWZlcmVuY2VFbGVtZW50LCB0aGlzLl9tZW51LCB0aGlzLl9nZXRQb3BwZXJDb25maWcoKSk7XG4gICAgICB9IC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSBhZGQgZXh0cmFcbiAgICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgdG8gdGhlIGJvZHkncyBpbW1lZGlhdGUgY2hpbGRyZW47XG4gICAgICAvLyBvbmx5IG5lZWRlZCBiZWNhdXNlIG9mIGJyb2tlbiBldmVudCBkZWxlZ2F0aW9uIG9uIGlPU1xuICAgICAgLy8gaHR0cHM6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDE0LzAyL21vdXNlX2V2ZW50X2J1Yi5odG1sXG5cblxuICAgICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiAkKHBhcmVudCkuY2xvc2VzdChTZWxlY3RvciQ0Lk5BVkJBUl9OQVYpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAkKGRvY3VtZW50LmJvZHkpLmNoaWxkcmVuKCkub24oJ21vdXNlb3ZlcicsIG51bGwsICQubm9vcCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuZm9jdXMoKTtcblxuICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCB0cnVlKTtcblxuICAgICAgJCh0aGlzLl9tZW51KS50b2dnbGVDbGFzcyhDbGFzc05hbWUkNC5TSE9XKTtcbiAgICAgICQocGFyZW50KS50b2dnbGVDbGFzcyhDbGFzc05hbWUkNC5TSE9XKS50cmlnZ2VyKCQuRXZlbnQoRXZlbnQkNC5TSE9XTiwgcmVsYXRlZFRhcmdldCkpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uc2hvdyA9IGZ1bmN0aW9uIHNob3coKSB7XG4gICAgICBpZiAodGhpcy5fZWxlbWVudC5kaXNhYmxlZCB8fCAkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQ0LkRJU0FCTEVEKSB8fCAkKHRoaXMuX21lbnUpLmhhc0NsYXNzKENsYXNzTmFtZSQ0LlNIT1cpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlbGF0ZWRUYXJnZXQgPSB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRoaXMuX2VsZW1lbnRcbiAgICAgIH07XG4gICAgICB2YXIgc2hvd0V2ZW50ID0gJC5FdmVudChFdmVudCQ0LlNIT1csIHJlbGF0ZWRUYXJnZXQpO1xuXG4gICAgICB2YXIgcGFyZW50ID0gRHJvcGRvd24uX2dldFBhcmVudEZyb21FbGVtZW50KHRoaXMuX2VsZW1lbnQpO1xuXG4gICAgICAkKHBhcmVudCkudHJpZ2dlcihzaG93RXZlbnQpO1xuXG4gICAgICBpZiAoc2hvd0V2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgJCh0aGlzLl9tZW51KS50b2dnbGVDbGFzcyhDbGFzc05hbWUkNC5TSE9XKTtcbiAgICAgICQocGFyZW50KS50b2dnbGVDbGFzcyhDbGFzc05hbWUkNC5TSE9XKS50cmlnZ2VyKCQuRXZlbnQoRXZlbnQkNC5TSE9XTiwgcmVsYXRlZFRhcmdldCkpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uaGlkZSA9IGZ1bmN0aW9uIGhpZGUoKSB7XG4gICAgICBpZiAodGhpcy5fZWxlbWVudC5kaXNhYmxlZCB8fCAkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQ0LkRJU0FCTEVEKSB8fCAhJCh0aGlzLl9tZW51KS5oYXNDbGFzcyhDbGFzc05hbWUkNC5TSE9XKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiB0aGlzLl9lbGVtZW50XG4gICAgICB9O1xuICAgICAgdmFyIGhpZGVFdmVudCA9ICQuRXZlbnQoRXZlbnQkNC5ISURFLCByZWxhdGVkVGFyZ2V0KTtcblxuICAgICAgdmFyIHBhcmVudCA9IERyb3Bkb3duLl9nZXRQYXJlbnRGcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcblxuICAgICAgJChwYXJlbnQpLnRyaWdnZXIoaGlkZUV2ZW50KTtcblxuICAgICAgaWYgKGhpZGVFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgICQodGhpcy5fbWVudSkudG9nZ2xlQ2xhc3MoQ2xhc3NOYW1lJDQuU0hPVyk7XG4gICAgICAkKHBhcmVudCkudG9nZ2xlQ2xhc3MoQ2xhc3NOYW1lJDQuU0hPVykudHJpZ2dlcigkLkV2ZW50KEV2ZW50JDQuSElEREVOLCByZWxhdGVkVGFyZ2V0KSk7XG4gICAgfTtcblxuICAgIF9wcm90by5kaXNwb3NlID0gZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICAgICQucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LCBEQVRBX0tFWSQ0KTtcbiAgICAgICQodGhpcy5fZWxlbWVudCkub2ZmKEVWRU5UX0tFWSQ0KTtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsO1xuICAgICAgdGhpcy5fbWVudSA9IG51bGw7XG5cbiAgICAgIGlmICh0aGlzLl9wb3BwZXIgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5fcG9wcGVyLmRlc3Ryb3koKTtcblxuICAgICAgICB0aGlzLl9wb3BwZXIgPSBudWxsO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8udXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgICAgdGhpcy5faW5OYXZiYXIgPSB0aGlzLl9kZXRlY3ROYXZiYXIoKTtcblxuICAgICAgaWYgKHRoaXMuX3BvcHBlciAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9wb3BwZXIuc2NoZWR1bGVVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9IC8vIFByaXZhdGVcbiAgICA7XG5cbiAgICBfcHJvdG8uX2FkZEV2ZW50TGlzdGVuZXJzID0gZnVuY3Rpb24gX2FkZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbihFdmVudCQ0LkNMSUNLLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgX3RoaXMudG9nZ2xlKCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9nZXRDb25maWcgPSBmdW5jdGlvbiBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgICAgY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0LCAkKHRoaXMuX2VsZW1lbnQpLmRhdGEoKSwgY29uZmlnKTtcbiAgICAgIFV0aWwudHlwZUNoZWNrQ29uZmlnKE5BTUUkNCwgY29uZmlnLCB0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRUeXBlKTtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0TWVudUVsZW1lbnQgPSBmdW5jdGlvbiBfZ2V0TWVudUVsZW1lbnQoKSB7XG4gICAgICBpZiAoIXRoaXMuX21lbnUpIHtcbiAgICAgICAgdmFyIHBhcmVudCA9IERyb3Bkb3duLl9nZXRQYXJlbnRGcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcblxuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgdGhpcy5fbWVudSA9IHBhcmVudC5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yJDQuTUVOVSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX21lbnU7XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0UGxhY2VtZW50ID0gZnVuY3Rpb24gX2dldFBsYWNlbWVudCgpIHtcbiAgICAgIHZhciAkcGFyZW50RHJvcGRvd24gPSAkKHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSk7XG4gICAgICB2YXIgcGxhY2VtZW50ID0gQXR0YWNobWVudE1hcC5CT1RUT007IC8vIEhhbmRsZSBkcm9wdXBcblxuICAgICAgaWYgKCRwYXJlbnREcm9wZG93bi5oYXNDbGFzcyhDbGFzc05hbWUkNC5EUk9QVVApKSB7XG4gICAgICAgIHBsYWNlbWVudCA9IEF0dGFjaG1lbnRNYXAuVE9QO1xuXG4gICAgICAgIGlmICgkKHRoaXMuX21lbnUpLmhhc0NsYXNzKENsYXNzTmFtZSQ0Lk1FTlVSSUdIVCkpIHtcbiAgICAgICAgICBwbGFjZW1lbnQgPSBBdHRhY2htZW50TWFwLlRPUEVORDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgkcGFyZW50RHJvcGRvd24uaGFzQ2xhc3MoQ2xhc3NOYW1lJDQuRFJPUFJJR0hUKSkge1xuICAgICAgICBwbGFjZW1lbnQgPSBBdHRhY2htZW50TWFwLlJJR0hUO1xuICAgICAgfSBlbHNlIGlmICgkcGFyZW50RHJvcGRvd24uaGFzQ2xhc3MoQ2xhc3NOYW1lJDQuRFJPUExFRlQpKSB7XG4gICAgICAgIHBsYWNlbWVudCA9IEF0dGFjaG1lbnRNYXAuTEVGVDtcbiAgICAgIH0gZWxzZSBpZiAoJCh0aGlzLl9tZW51KS5oYXNDbGFzcyhDbGFzc05hbWUkNC5NRU5VUklHSFQpKSB7XG4gICAgICAgIHBsYWNlbWVudCA9IEF0dGFjaG1lbnRNYXAuQk9UVE9NRU5EO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGxhY2VtZW50O1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2RldGVjdE5hdmJhciA9IGZ1bmN0aW9uIF9kZXRlY3ROYXZiYXIoKSB7XG4gICAgICByZXR1cm4gJCh0aGlzLl9lbGVtZW50KS5jbG9zZXN0KCcubmF2YmFyJykubGVuZ3RoID4gMDtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9nZXRPZmZzZXQgPSBmdW5jdGlvbiBfZ2V0T2Zmc2V0KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBvZmZzZXQgPSB7fTtcblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLl9jb25maWcub2Zmc2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG9mZnNldC5mbiA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgZGF0YS5vZmZzZXRzID0gX29iamVjdFNwcmVhZCh7fSwgZGF0YS5vZmZzZXRzLCBfdGhpczIuX2NvbmZpZy5vZmZzZXQoZGF0YS5vZmZzZXRzLCBfdGhpczIuX2VsZW1lbnQpIHx8IHt9KTtcbiAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9mZnNldC5vZmZzZXQgPSB0aGlzLl9jb25maWcub2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2Zmc2V0O1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldFBvcHBlckNvbmZpZyA9IGZ1bmN0aW9uIF9nZXRQb3BwZXJDb25maWcoKSB7XG4gICAgICB2YXIgcG9wcGVyQ29uZmlnID0ge1xuICAgICAgICBwbGFjZW1lbnQ6IHRoaXMuX2dldFBsYWNlbWVudCgpLFxuICAgICAgICBtb2RpZmllcnM6IHtcbiAgICAgICAgICBvZmZzZXQ6IHRoaXMuX2dldE9mZnNldCgpLFxuICAgICAgICAgIGZsaXA6IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRoaXMuX2NvbmZpZy5mbGlwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcmV2ZW50T3ZlcmZsb3c6IHtcbiAgICAgICAgICAgIGJvdW5kYXJpZXNFbGVtZW50OiB0aGlzLl9jb25maWcuYm91bmRhcnlcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gRGlzYWJsZSBQb3BwZXIuanMgaWYgd2UgaGF2ZSBhIHN0YXRpYyBkaXNwbGF5XG5cbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcuZGlzcGxheSA9PT0gJ3N0YXRpYycpIHtcbiAgICAgICAgcG9wcGVyQ29uZmlnLm1vZGlmaWVycy5hcHBseVN0eWxlID0ge1xuICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwb3BwZXJDb25maWc7XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBEcm9wZG93bi5falF1ZXJ5SW50ZXJmYWNlID0gZnVuY3Rpb24gX2pRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YShEQVRBX0tFWSQ0KTtcblxuICAgICAgICB2YXIgX2NvbmZpZyA9IHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnID8gY29uZmlnIDogbnVsbDtcblxuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICBkYXRhID0gbmV3IERyb3Bkb3duKHRoaXMsIF9jb25maWcpO1xuICAgICAgICAgICQodGhpcykuZGF0YShEQVRBX0tFWSQ0LCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIG1ldGhvZCBuYW1lZCBcXFwiXCIgKyBjb25maWcgKyBcIlxcXCJcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBEcm9wZG93bi5fY2xlYXJNZW51cyA9IGZ1bmN0aW9uIF9jbGVhck1lbnVzKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQgJiYgKGV2ZW50LndoaWNoID09PSBSSUdIVF9NT1VTRV9CVVRUT05fV0hJQ0ggfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBldmVudC53aGljaCAhPT0gVEFCX0tFWUNPREUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHRvZ2dsZXMgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IkNC5EQVRBX1RPR0dMRSkpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdG9nZ2xlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICB2YXIgcGFyZW50ID0gRHJvcGRvd24uX2dldFBhcmVudEZyb21FbGVtZW50KHRvZ2dsZXNbaV0pO1xuXG4gICAgICAgIHZhciBjb250ZXh0ID0gJCh0b2dnbGVzW2ldKS5kYXRhKERBVEFfS0VZJDQpO1xuICAgICAgICB2YXIgcmVsYXRlZFRhcmdldCA9IHtcbiAgICAgICAgICByZWxhdGVkVGFyZ2V0OiB0b2dnbGVzW2ldXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LnR5cGUgPT09ICdjbGljaycpIHtcbiAgICAgICAgICByZWxhdGVkVGFyZ2V0LmNsaWNrRXZlbnQgPSBldmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29udGV4dCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRyb3Bkb3duTWVudSA9IGNvbnRleHQuX21lbnU7XG5cbiAgICAgICAgaWYgKCEkKHBhcmVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1lJDQuU0hPVykpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudCAmJiAoZXZlbnQudHlwZSA9PT0gJ2NsaWNrJyAmJiAvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSB8fCBldmVudC50eXBlID09PSAna2V5dXAnICYmIGV2ZW50LndoaWNoID09PSBUQUJfS0VZQ09ERSkgJiYgJC5jb250YWlucyhwYXJlbnQsIGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBoaWRlRXZlbnQgPSAkLkV2ZW50KEV2ZW50JDQuSElERSwgcmVsYXRlZFRhcmdldCk7XG4gICAgICAgICQocGFyZW50KS50cmlnZ2VyKGhpZGVFdmVudCk7XG5cbiAgICAgICAgaWYgKGhpZGVFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSByZW1vdmUgdGhlIGV4dHJhXG4gICAgICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgd2UgYWRkZWQgZm9yIGlPUyBzdXBwb3J0XG5cblxuICAgICAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgICAgJChkb2N1bWVudC5ib2R5KS5jaGlsZHJlbigpLm9mZignbW91c2VvdmVyJywgbnVsbCwgJC5ub29wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRvZ2dsZXNbaV0uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XG4gICAgICAgICQoZHJvcGRvd25NZW51KS5yZW1vdmVDbGFzcyhDbGFzc05hbWUkNC5TSE9XKTtcbiAgICAgICAgJChwYXJlbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQ0LlNIT1cpLnRyaWdnZXIoJC5FdmVudChFdmVudCQ0LkhJRERFTiwgcmVsYXRlZFRhcmdldCkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBEcm9wZG93bi5fZ2V0UGFyZW50RnJvbUVsZW1lbnQgPSBmdW5jdGlvbiBfZ2V0UGFyZW50RnJvbUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgdmFyIHBhcmVudDtcbiAgICAgIHZhciBzZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgIHBhcmVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyZW50IHx8IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gICAgO1xuXG4gICAgRHJvcGRvd24uX2RhdGFBcGlLZXlkb3duSGFuZGxlciA9IGZ1bmN0aW9uIF9kYXRhQXBpS2V5ZG93bkhhbmRsZXIoZXZlbnQpIHtcbiAgICAgIC8vIElmIG5vdCBpbnB1dC90ZXh0YXJlYTpcbiAgICAgIC8vICAtIEFuZCBub3QgYSBrZXkgaW4gUkVHRVhQX0tFWURPV04gPT4gbm90IGEgZHJvcGRvd24gY29tbWFuZFxuICAgICAgLy8gSWYgaW5wdXQvdGV4dGFyZWE6XG4gICAgICAvLyAgLSBJZiBzcGFjZSBrZXkgPT4gbm90IGEgZHJvcGRvd24gY29tbWFuZFxuICAgICAgLy8gIC0gSWYga2V5IGlzIG90aGVyIHRoYW4gZXNjYXBlXG4gICAgICAvLyAgICAtIElmIGtleSBpcyBub3QgdXAgb3IgZG93biA9PiBub3QgYSBkcm9wZG93biBjb21tYW5kXG4gICAgICAvLyAgICAtIElmIHRyaWdnZXIgaW5zaWRlIHRoZSBtZW51ID0+IG5vdCBhIGRyb3Bkb3duIGNvbW1hbmRcbiAgICAgIGlmICgvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSA/IGV2ZW50LndoaWNoID09PSBTUEFDRV9LRVlDT0RFIHx8IGV2ZW50LndoaWNoICE9PSBFU0NBUEVfS0VZQ09ERSAmJiAoZXZlbnQud2hpY2ggIT09IEFSUk9XX0RPV05fS0VZQ09ERSAmJiBldmVudC53aGljaCAhPT0gQVJST1dfVVBfS0VZQ09ERSB8fCAkKGV2ZW50LnRhcmdldCkuY2xvc2VzdChTZWxlY3RvciQ0Lk1FTlUpLmxlbmd0aCkgOiAhUkVHRVhQX0tFWURPV04udGVzdChldmVudC53aGljaCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8ICQodGhpcykuaGFzQ2xhc3MoQ2xhc3NOYW1lJDQuRElTQUJMRUQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHBhcmVudCA9IERyb3Bkb3duLl9nZXRQYXJlbnRGcm9tRWxlbWVudCh0aGlzKTtcblxuICAgICAgdmFyIGlzQWN0aXZlID0gJChwYXJlbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQ0LlNIT1cpO1xuXG4gICAgICBpZiAoIWlzQWN0aXZlIHx8IGlzQWN0aXZlICYmIChldmVudC53aGljaCA9PT0gRVNDQVBFX0tFWUNPREUgfHwgZXZlbnQud2hpY2ggPT09IFNQQUNFX0tFWUNPREUpKSB7XG4gICAgICAgIGlmIChldmVudC53aGljaCA9PT0gRVNDQVBFX0tFWUNPREUpIHtcbiAgICAgICAgICB2YXIgdG9nZ2xlID0gcGFyZW50LnF1ZXJ5U2VsZWN0b3IoU2VsZWN0b3IkNC5EQVRBX1RPR0dMRSk7XG4gICAgICAgICAgJCh0b2dnbGUpLnRyaWdnZXIoJ2ZvY3VzJyk7XG4gICAgICAgIH1cblxuICAgICAgICAkKHRoaXMpLnRyaWdnZXIoJ2NsaWNrJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGl0ZW1zID0gW10uc2xpY2UuY2FsbChwYXJlbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3RvciQ0LlZJU0lCTEVfSVRFTVMpKTtcblxuICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBpbmRleCA9IGl0ZW1zLmluZGV4T2YoZXZlbnQudGFyZ2V0KTtcblxuICAgICAgaWYgKGV2ZW50LndoaWNoID09PSBBUlJPV19VUF9LRVlDT0RFICYmIGluZGV4ID4gMCkge1xuICAgICAgICAvLyBVcFxuICAgICAgICBpbmRleC0tO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQud2hpY2ggPT09IEFSUk9XX0RPV05fS0VZQ09ERSAmJiBpbmRleCA8IGl0ZW1zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgLy8gRG93blxuICAgICAgICBpbmRleCsrO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIGluZGV4ID0gMDtcbiAgICAgIH1cblxuICAgICAgaXRlbXNbaW5kZXhdLmZvY3VzKCk7XG4gICAgfTtcblxuICAgIF9jcmVhdGVDbGFzcyhEcm9wZG93biwgbnVsbCwgW3tcbiAgICAgIGtleTogXCJWRVJTSU9OXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIFZFUlNJT04kNDtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiRGVmYXVsdFwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBEZWZhdWx0JDI7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkRlZmF1bHRUeXBlXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIERlZmF1bHRUeXBlJDI7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIERyb3Bkb3duO1xuICB9KCk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJChkb2N1bWVudCkub24oRXZlbnQkNC5LRVlET1dOX0RBVEFfQVBJLCBTZWxlY3RvciQ0LkRBVEFfVE9HR0xFLCBEcm9wZG93bi5fZGF0YUFwaUtleWRvd25IYW5kbGVyKS5vbihFdmVudCQ0LktFWURPV05fREFUQV9BUEksIFNlbGVjdG9yJDQuTUVOVSwgRHJvcGRvd24uX2RhdGFBcGlLZXlkb3duSGFuZGxlcikub24oRXZlbnQkNC5DTElDS19EQVRBX0FQSSArIFwiIFwiICsgRXZlbnQkNC5LRVlVUF9EQVRBX0FQSSwgRHJvcGRvd24uX2NsZWFyTWVudXMpLm9uKEV2ZW50JDQuQ0xJQ0tfREFUQV9BUEksIFNlbGVjdG9yJDQuREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBEcm9wZG93bi5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoJCh0aGlzKSwgJ3RvZ2dsZScpO1xuICB9KS5vbihFdmVudCQ0LkNMSUNLX0RBVEFfQVBJLCBTZWxlY3RvciQ0LkZPUk1fQ0hJTEQsIGZ1bmN0aW9uIChlKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfSk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogalF1ZXJ5XG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICAkLmZuW05BTUUkNF0gPSBEcm9wZG93bi5falF1ZXJ5SW50ZXJmYWNlO1xuICAkLmZuW05BTUUkNF0uQ29uc3RydWN0b3IgPSBEcm9wZG93bjtcblxuICAkLmZuW05BTUUkNF0ubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAkLmZuW05BTUUkNF0gPSBKUVVFUllfTk9fQ09ORkxJQ1QkNDtcbiAgICByZXR1cm4gRHJvcGRvd24uX2pRdWVyeUludGVyZmFjZTtcbiAgfTtcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIENvbnN0YW50c1xuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgdmFyIE5BTUUkNSA9ICdtb2RhbCc7XG4gIHZhciBWRVJTSU9OJDUgPSAnNC4zLjEnO1xuICB2YXIgREFUQV9LRVkkNSA9ICdicy5tb2RhbCc7XG4gIHZhciBFVkVOVF9LRVkkNSA9IFwiLlwiICsgREFUQV9LRVkkNTtcbiAgdmFyIERBVEFfQVBJX0tFWSQ1ID0gJy5kYXRhLWFwaSc7XG4gIHZhciBKUVVFUllfTk9fQ09ORkxJQ1QkNSA9ICQuZm5bTkFNRSQ1XTtcbiAgdmFyIEVTQ0FQRV9LRVlDT0RFJDEgPSAyNzsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3IgRXNjYXBlIChFc2MpIGtleVxuXG4gIHZhciBEZWZhdWx0JDMgPSB7XG4gICAgYmFja2Ryb3A6IHRydWUsXG4gICAga2V5Ym9hcmQ6IHRydWUsXG4gICAgZm9jdXM6IHRydWUsXG4gICAgc2hvdzogdHJ1ZVxuICB9O1xuICB2YXIgRGVmYXVsdFR5cGUkMyA9IHtcbiAgICBiYWNrZHJvcDogJyhib29sZWFufHN0cmluZyknLFxuICAgIGtleWJvYXJkOiAnYm9vbGVhbicsXG4gICAgZm9jdXM6ICdib29sZWFuJyxcbiAgICBzaG93OiAnYm9vbGVhbidcbiAgfTtcbiAgdmFyIEV2ZW50JDUgPSB7XG4gICAgSElERTogXCJoaWRlXCIgKyBFVkVOVF9LRVkkNSxcbiAgICBISURERU46IFwiaGlkZGVuXCIgKyBFVkVOVF9LRVkkNSxcbiAgICBTSE9XOiBcInNob3dcIiArIEVWRU5UX0tFWSQ1LFxuICAgIFNIT1dOOiBcInNob3duXCIgKyBFVkVOVF9LRVkkNSxcbiAgICBGT0NVU0lOOiBcImZvY3VzaW5cIiArIEVWRU5UX0tFWSQ1LFxuICAgIFJFU0laRTogXCJyZXNpemVcIiArIEVWRU5UX0tFWSQ1LFxuICAgIENMSUNLX0RJU01JU1M6IFwiY2xpY2suZGlzbWlzc1wiICsgRVZFTlRfS0VZJDUsXG4gICAgS0VZRE9XTl9ESVNNSVNTOiBcImtleWRvd24uZGlzbWlzc1wiICsgRVZFTlRfS0VZJDUsXG4gICAgTU9VU0VVUF9ESVNNSVNTOiBcIm1vdXNldXAuZGlzbWlzc1wiICsgRVZFTlRfS0VZJDUsXG4gICAgTU9VU0VET1dOX0RJU01JU1M6IFwibW91c2Vkb3duLmRpc21pc3NcIiArIEVWRU5UX0tFWSQ1LFxuICAgIENMSUNLX0RBVEFfQVBJOiBcImNsaWNrXCIgKyBFVkVOVF9LRVkkNSArIERBVEFfQVBJX0tFWSQ1XG4gIH07XG4gIHZhciBDbGFzc05hbWUkNSA9IHtcbiAgICBTQ1JPTExBQkxFOiAnbW9kYWwtZGlhbG9nLXNjcm9sbGFibGUnLFxuICAgIFNDUk9MTEJBUl9NRUFTVVJFUjogJ21vZGFsLXNjcm9sbGJhci1tZWFzdXJlJyxcbiAgICBCQUNLRFJPUDogJ21vZGFsLWJhY2tkcm9wJyxcbiAgICBPUEVOOiAnbW9kYWwtb3BlbicsXG4gICAgRkFERTogJ2ZhZGUnLFxuICAgIFNIT1c6ICdzaG93J1xuICB9O1xuICB2YXIgU2VsZWN0b3IkNSA9IHtcbiAgICBESUFMT0c6ICcubW9kYWwtZGlhbG9nJyxcbiAgICBNT0RBTF9CT0RZOiAnLm1vZGFsLWJvZHknLFxuICAgIERBVEFfVE9HR0xFOiAnW2RhdGEtdG9nZ2xlPVwibW9kYWxcIl0nLFxuICAgIERBVEFfRElTTUlTUzogJ1tkYXRhLWRpc21pc3M9XCJtb2RhbFwiXScsXG4gICAgRklYRURfQ09OVEVOVDogJy5maXhlZC10b3AsIC5maXhlZC1ib3R0b20sIC5pcy1maXhlZCwgLnN0aWNreS10b3AnLFxuICAgIFNUSUNLWV9DT05URU5UOiAnLnN0aWNreS10b3AnXG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG4gIH07XG5cbiAgdmFyIE1vZGFsID1cbiAgLyojX19QVVJFX18qL1xuICBmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTW9kYWwoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgdGhpcy5fZGlhbG9nID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yJDUuRElBTE9HKTtcbiAgICAgIHRoaXMuX2JhY2tkcm9wID0gbnVsbDtcbiAgICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZTtcbiAgICAgIHRoaXMuX2lzQm9keU92ZXJmbG93aW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrID0gZmFsc2U7XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3Njcm9sbGJhcldpZHRoID0gMDtcbiAgICB9IC8vIEdldHRlcnNcblxuXG4gICAgdmFyIF9wcm90byA9IE1vZGFsLnByb3RvdHlwZTtcblxuICAgIC8vIFB1YmxpY1xuICAgIF9wcm90by50b2dnbGUgPSBmdW5jdGlvbiB0b2dnbGUocmVsYXRlZFRhcmdldCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2lzU2hvd24gPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdyhyZWxhdGVkVGFyZ2V0KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLnNob3cgPSBmdW5jdGlvbiBzaG93KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLl9pc1Nob3duIHx8IHRoaXMuX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICgkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQ1LkZBREUpKSB7XG4gICAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBzaG93RXZlbnQgPSAkLkV2ZW50KEV2ZW50JDUuU0hPVywge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiByZWxhdGVkVGFyZ2V0XG4gICAgICB9KTtcbiAgICAgICQodGhpcy5fZWxlbWVudCkudHJpZ2dlcihzaG93RXZlbnQpO1xuXG4gICAgICBpZiAodGhpcy5faXNTaG93biB8fCBzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pc1Nob3duID0gdHJ1ZTtcblxuICAgICAgdGhpcy5fY2hlY2tTY3JvbGxiYXIoKTtcblxuICAgICAgdGhpcy5fc2V0U2Nyb2xsYmFyKCk7XG5cbiAgICAgIHRoaXMuX2FkanVzdERpYWxvZygpO1xuXG4gICAgICB0aGlzLl9zZXRFc2NhcGVFdmVudCgpO1xuXG4gICAgICB0aGlzLl9zZXRSZXNpemVFdmVudCgpO1xuXG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLm9uKEV2ZW50JDUuQ0xJQ0tfRElTTUlTUywgU2VsZWN0b3IkNS5EQVRBX0RJU01JU1MsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICByZXR1cm4gX3RoaXMuaGlkZShldmVudCk7XG4gICAgICB9KTtcbiAgICAgICQodGhpcy5fZGlhbG9nKS5vbihFdmVudCQ1Lk1PVVNFRE9XTl9ESVNNSVNTLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICQoX3RoaXMuX2VsZW1lbnQpLm9uZShFdmVudCQ1Lk1PVVNFVVBfRElTTUlTUywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgaWYgKCQoZXZlbnQudGFyZ2V0KS5pcyhfdGhpcy5fZWxlbWVudCkpIHtcbiAgICAgICAgICAgIF90aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX3Nob3dCYWNrZHJvcChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5fc2hvd0VsZW1lbnQocmVsYXRlZFRhcmdldCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmhpZGUgPSBmdW5jdGlvbiBoaWRlKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5faXNTaG93biB8fCB0aGlzLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgaGlkZUV2ZW50ID0gJC5FdmVudChFdmVudCQ1LkhJREUpO1xuICAgICAgJCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKGhpZGVFdmVudCk7XG5cbiAgICAgIGlmICghdGhpcy5faXNTaG93biB8fCBoaWRlRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pc1Nob3duID0gZmFsc2U7XG4gICAgICB2YXIgdHJhbnNpdGlvbiA9ICQodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1lJDUuRkFERSk7XG5cbiAgICAgIGlmICh0cmFuc2l0aW9uKSB7XG4gICAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3NldEVzY2FwZUV2ZW50KCk7XG5cbiAgICAgIHRoaXMuX3NldFJlc2l6ZUV2ZW50KCk7XG5cbiAgICAgICQoZG9jdW1lbnQpLm9mZihFdmVudCQ1LkZPQ1VTSU4pO1xuICAgICAgJCh0aGlzLl9lbGVtZW50KS5yZW1vdmVDbGFzcyhDbGFzc05hbWUkNS5TSE9XKTtcbiAgICAgICQodGhpcy5fZWxlbWVudCkub2ZmKEV2ZW50JDUuQ0xJQ0tfRElTTUlTUyk7XG4gICAgICAkKHRoaXMuX2RpYWxvZykub2ZmKEV2ZW50JDUuTU9VU0VET1dOX0RJU01JU1MpO1xuXG4gICAgICBpZiAodHJhbnNpdGlvbikge1xuICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5faGlkZU1vZGFsKGV2ZW50KTtcbiAgICAgICAgfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2hpZGVNb2RhbCgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uZGlzcG9zZSA9IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgICBbd2luZG93LCB0aGlzLl9lbGVtZW50LCB0aGlzLl9kaWFsb2ddLmZvckVhY2goZnVuY3Rpb24gKGh0bWxFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiAkKGh0bWxFbGVtZW50KS5vZmYoRVZFTlRfS0VZJDUpO1xuICAgICAgfSk7XG4gICAgICAvKipcbiAgICAgICAqIGBkb2N1bWVudGAgaGFzIDIgZXZlbnRzIGBFdmVudC5GT0NVU0lOYCBhbmQgYEV2ZW50LkNMSUNLX0RBVEFfQVBJYFxuICAgICAgICogRG8gbm90IG1vdmUgYGRvY3VtZW50YCBpbiBgaHRtbEVsZW1lbnRzYCBhcnJheVxuICAgICAgICogSXQgd2lsbCByZW1vdmUgYEV2ZW50LkNMSUNLX0RBVEFfQVBJYCBldmVudCB0aGF0IHNob3VsZCByZW1haW5cbiAgICAgICAqL1xuXG4gICAgICAkKGRvY3VtZW50KS5vZmYoRXZlbnQkNS5GT0NVU0lOKTtcbiAgICAgICQucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LCBEQVRBX0tFWSQ1KTtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IG51bGw7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuX2RpYWxvZyA9IG51bGw7XG4gICAgICB0aGlzLl9iYWNrZHJvcCA9IG51bGw7XG4gICAgICB0aGlzLl9pc1Nob3duID0gbnVsbDtcbiAgICAgIHRoaXMuX2lzQm9keU92ZXJmbG93aW5nID0gbnVsbDtcbiAgICAgIHRoaXMuX2lnbm9yZUJhY2tkcm9wQ2xpY2sgPSBudWxsO1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gbnVsbDtcbiAgICAgIHRoaXMuX3Njcm9sbGJhcldpZHRoID0gbnVsbDtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmhhbmRsZVVwZGF0ZSA9IGZ1bmN0aW9uIGhhbmRsZVVwZGF0ZSgpIHtcbiAgICAgIHRoaXMuX2FkanVzdERpYWxvZygpO1xuICAgIH0gLy8gUHJpdmF0ZVxuICAgIDtcblxuICAgIF9wcm90by5fZ2V0Q29uZmlnID0gZnVuY3Rpb24gX2dldENvbmZpZyhjb25maWcpIHtcbiAgICAgIGNvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIERlZmF1bHQkMywgY29uZmlnKTtcbiAgICAgIFV0aWwudHlwZUNoZWNrQ29uZmlnKE5BTUUkNSwgY29uZmlnLCBEZWZhdWx0VHlwZSQzKTtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfTtcblxuICAgIF9wcm90by5fc2hvd0VsZW1lbnQgPSBmdW5jdGlvbiBfc2hvd0VsZW1lbnQocmVsYXRlZFRhcmdldCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciB0cmFuc2l0aW9uID0gJCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUkNS5GQURFKTtcblxuICAgICAgaWYgKCF0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUgfHwgdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAvLyBEb24ndCBtb3ZlIG1vZGFsJ3MgRE9NIHBvc2l0aW9uXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpO1xuXG4gICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcsIHRydWUpO1xuXG4gICAgICBpZiAoJCh0aGlzLl9kaWFsb2cpLmhhc0NsYXNzKENsYXNzTmFtZSQ1LlNDUk9MTEFCTEUpKSB7XG4gICAgICAgIHRoaXMuX2RpYWxvZy5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yJDUuTU9EQUxfQk9EWSkuc2Nyb2xsVG9wID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRyYW5zaXRpb24pIHtcbiAgICAgICAgVXRpbC5yZWZsb3codGhpcy5fZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgICQodGhpcy5fZWxlbWVudCkuYWRkQ2xhc3MoQ2xhc3NOYW1lJDUuU0hPVyk7XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcuZm9jdXMpIHtcbiAgICAgICAgdGhpcy5fZW5mb3JjZUZvY3VzKCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzaG93bkV2ZW50ID0gJC5FdmVudChFdmVudCQ1LlNIT1dOLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHJlbGF0ZWRUYXJnZXRcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgdHJhbnNpdGlvbkNvbXBsZXRlID0gZnVuY3Rpb24gdHJhbnNpdGlvbkNvbXBsZXRlKCkge1xuICAgICAgICBpZiAoX3RoaXMzLl9jb25maWcuZm9jdXMpIHtcbiAgICAgICAgICBfdGhpczMuX2VsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzMy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICAgICQoX3RoaXMzLl9lbGVtZW50KS50cmlnZ2VyKHNob3duRXZlbnQpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHRyYW5zaXRpb24pIHtcbiAgICAgICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fZGlhbG9nKTtcbiAgICAgICAgJCh0aGlzLl9kaWFsb2cpLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCB0cmFuc2l0aW9uQ29tcGxldGUpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2l0aW9uQ29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLl9lbmZvcmNlRm9jdXMgPSBmdW5jdGlvbiBfZW5mb3JjZUZvY3VzKCkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgICQoZG9jdW1lbnQpLm9mZihFdmVudCQ1LkZPQ1VTSU4pIC8vIEd1YXJkIGFnYWluc3QgaW5maW5pdGUgZm9jdXMgbG9vcFxuICAgICAgLm9uKEV2ZW50JDUuRk9DVVNJTiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGlmIChkb2N1bWVudCAhPT0gZXZlbnQudGFyZ2V0ICYmIF90aGlzNC5fZWxlbWVudCAhPT0gZXZlbnQudGFyZ2V0ICYmICQoX3RoaXM0Ll9lbGVtZW50KS5oYXMoZXZlbnQudGFyZ2V0KS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBfdGhpczQuX2VsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9wcm90by5fc2V0RXNjYXBlRXZlbnQgPSBmdW5jdGlvbiBfc2V0RXNjYXBlRXZlbnQoKSB7XG4gICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuX2lzU2hvd24gJiYgdGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICAgICQodGhpcy5fZWxlbWVudCkub24oRXZlbnQkNS5LRVlET1dOX0RJU01JU1MsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIGlmIChldmVudC53aGljaCA9PT0gRVNDQVBFX0tFWUNPREUkMSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgX3RoaXM1LmhpZGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5faXNTaG93bikge1xuICAgICAgICAkKHRoaXMuX2VsZW1lbnQpLm9mZihFdmVudCQ1LktFWURPV05fRElTTUlTUyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5fc2V0UmVzaXplRXZlbnQgPSBmdW5jdGlvbiBfc2V0UmVzaXplRXZlbnQoKSB7XG4gICAgICB2YXIgX3RoaXM2ID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuX2lzU2hvd24pIHtcbiAgICAgICAgJCh3aW5kb3cpLm9uKEV2ZW50JDUuUkVTSVpFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXM2LmhhbmRsZVVwZGF0ZShldmVudCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJCh3aW5kb3cpLm9mZihFdmVudCQ1LlJFU0laRSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5faGlkZU1vZGFsID0gZnVuY3Rpb24gX2hpZGVNb2RhbCgpIHtcbiAgICAgIHZhciBfdGhpczcgPSB0aGlzO1xuXG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHRydWUpO1xuXG4gICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcpO1xuXG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcblxuICAgICAgdGhpcy5fc2hvd0JhY2tkcm9wKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJChkb2N1bWVudC5ib2R5KS5yZW1vdmVDbGFzcyhDbGFzc05hbWUkNS5PUEVOKTtcblxuICAgICAgICBfdGhpczcuX3Jlc2V0QWRqdXN0bWVudHMoKTtcblxuICAgICAgICBfdGhpczcuX3Jlc2V0U2Nyb2xsYmFyKCk7XG5cbiAgICAgICAgJChfdGhpczcuX2VsZW1lbnQpLnRyaWdnZXIoRXZlbnQkNS5ISURERU4pO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9wcm90by5fcmVtb3ZlQmFja2Ryb3AgPSBmdW5jdGlvbiBfcmVtb3ZlQmFja2Ryb3AoKSB7XG4gICAgICBpZiAodGhpcy5fYmFja2Ryb3ApIHtcbiAgICAgICAgJCh0aGlzLl9iYWNrZHJvcCkucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMuX2JhY2tkcm9wID0gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLl9zaG93QmFja2Ryb3AgPSBmdW5jdGlvbiBfc2hvd0JhY2tkcm9wKGNhbGxiYWNrKSB7XG4gICAgICB2YXIgX3RoaXM4ID0gdGhpcztcblxuICAgICAgdmFyIGFuaW1hdGUgPSAkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQ1LkZBREUpID8gQ2xhc3NOYW1lJDUuRkFERSA6ICcnO1xuXG4gICAgICBpZiAodGhpcy5faXNTaG93biAmJiB0aGlzLl9jb25maWcuYmFja2Ryb3ApIHtcbiAgICAgICAgdGhpcy5fYmFja2Ryb3AgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5fYmFja2Ryb3AuY2xhc3NOYW1lID0gQ2xhc3NOYW1lJDUuQkFDS0RST1A7XG5cbiAgICAgICAgaWYgKGFuaW1hdGUpIHtcbiAgICAgICAgICB0aGlzLl9iYWNrZHJvcC5jbGFzc0xpc3QuYWRkKGFuaW1hdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgJCh0aGlzLl9iYWNrZHJvcCkuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSk7XG4gICAgICAgICQodGhpcy5fZWxlbWVudCkub24oRXZlbnQkNS5DTElDS19ESVNNSVNTLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBpZiAoX3RoaXM4Ll9pZ25vcmVCYWNrZHJvcENsaWNrKSB7XG4gICAgICAgICAgICBfdGhpczguX2lnbm9yZUJhY2tkcm9wQ2xpY2sgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ICE9PSBldmVudC5jdXJyZW50VGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF90aGlzOC5fY29uZmlnLmJhY2tkcm9wID09PSAnc3RhdGljJykge1xuICAgICAgICAgICAgX3RoaXM4Ll9lbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzOC5oaWRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoYW5pbWF0ZSkge1xuICAgICAgICAgIFV0aWwucmVmbG93KHRoaXMuX2JhY2tkcm9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgICQodGhpcy5fYmFja2Ryb3ApLmFkZENsYXNzKENsYXNzTmFtZSQ1LlNIT1cpO1xuXG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWFuaW1hdGUpIHtcbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBiYWNrZHJvcFRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fYmFja2Ryb3ApO1xuICAgICAgICAkKHRoaXMuX2JhY2tkcm9wKS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgY2FsbGJhY2spLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGJhY2tkcm9wVHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX2lzU2hvd24gJiYgdGhpcy5fYmFja2Ryb3ApIHtcbiAgICAgICAgJCh0aGlzLl9iYWNrZHJvcCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lJDUuU0hPVyk7XG5cbiAgICAgICAgdmFyIGNhbGxiYWNrUmVtb3ZlID0gZnVuY3Rpb24gY2FsbGJhY2tSZW1vdmUoKSB7XG4gICAgICAgICAgX3RoaXM4Ll9yZW1vdmVCYWNrZHJvcCgpO1xuXG4gICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoJCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUkNS5GQURFKSkge1xuICAgICAgICAgIHZhciBfYmFja2Ryb3BUcmFuc2l0aW9uRHVyYXRpb24gPSBVdGlsLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMuX2JhY2tkcm9wKTtcblxuICAgICAgICAgICQodGhpcy5fYmFja2Ryb3ApLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCBjYWxsYmFja1JlbW92ZSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoX2JhY2tkcm9wVHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFja1JlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfSAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gdGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSB1c2VkIHRvIGhhbmRsZSBvdmVyZmxvd2luZyBtb2RhbHNcbiAgICAvLyB0b2RvIChmYXQpOiB0aGVzZSBzaG91bGQgcHJvYmFibHkgYmUgcmVmYWN0b3JlZCBvdXQgb2YgbW9kYWwuanNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgO1xuXG4gICAgX3Byb3RvLl9hZGp1c3REaWFsb2cgPSBmdW5jdGlvbiBfYWRqdXN0RGlhbG9nKCkge1xuICAgICAgdmFyIGlzTW9kYWxPdmVyZmxvd2luZyA9IHRoaXMuX2VsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcblxuICAgICAgaWYgKCF0aGlzLl9pc0JvZHlPdmVyZmxvd2luZyAmJiBpc01vZGFsT3ZlcmZsb3dpbmcpIHtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nTGVmdCA9IHRoaXMuX3Njcm9sbGJhcldpZHRoICsgXCJweFwiO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5faXNCb2R5T3ZlcmZsb3dpbmcgJiYgIWlzTW9kYWxPdmVyZmxvd2luZykge1xuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9IHRoaXMuX3Njcm9sbGJhcldpZHRoICsgXCJweFwiO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uX3Jlc2V0QWRqdXN0bWVudHMgPSBmdW5jdGlvbiBfcmVzZXRBZGp1c3RtZW50cygpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ0xlZnQgPSAnJztcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0ID0gJyc7XG4gICAgfTtcblxuICAgIF9wcm90by5fY2hlY2tTY3JvbGxiYXIgPSBmdW5jdGlvbiBfY2hlY2tTY3JvbGxiYXIoKSB7XG4gICAgICB2YXIgcmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB0aGlzLl9pc0JvZHlPdmVyZmxvd2luZyA9IHJlY3QubGVmdCArIHJlY3QucmlnaHQgPCB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICAgIHRoaXMuX3Njcm9sbGJhcldpZHRoID0gdGhpcy5fZ2V0U2Nyb2xsYmFyV2lkdGgoKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9zZXRTY3JvbGxiYXIgPSBmdW5jdGlvbiBfc2V0U2Nyb2xsYmFyKCkge1xuICAgICAgdmFyIF90aGlzOSA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLl9pc0JvZHlPdmVyZmxvd2luZykge1xuICAgICAgICAvLyBOb3RlOiBET01Ob2RlLnN0eWxlLnBhZGRpbmdSaWdodCByZXR1cm5zIHRoZSBhY3R1YWwgdmFsdWUgb3IgJycgaWYgbm90IHNldFxuICAgICAgICAvLyAgIHdoaWxlICQoRE9NTm9kZSkuY3NzKCdwYWRkaW5nLXJpZ2h0JykgcmV0dXJucyB0aGUgY2FsY3VsYXRlZCB2YWx1ZSBvciAwIGlmIG5vdCBzZXRcbiAgICAgICAgdmFyIGZpeGVkQ29udGVudCA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3RvciQ1LkZJWEVEX0NPTlRFTlQpKTtcbiAgICAgICAgdmFyIHN0aWNreUNvbnRlbnQgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IkNS5TVElDS1lfQ09OVEVOVCkpOyAvLyBBZGp1c3QgZml4ZWQgY29udGVudCBwYWRkaW5nXG5cbiAgICAgICAgJChmaXhlZENvbnRlbnQpLmVhY2goZnVuY3Rpb24gKGluZGV4LCBlbGVtZW50KSB7XG4gICAgICAgICAgdmFyIGFjdHVhbFBhZGRpbmcgPSBlbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodDtcbiAgICAgICAgICB2YXIgY2FsY3VsYXRlZFBhZGRpbmcgPSAkKGVsZW1lbnQpLmNzcygncGFkZGluZy1yaWdodCcpO1xuICAgICAgICAgICQoZWxlbWVudCkuZGF0YSgncGFkZGluZy1yaWdodCcsIGFjdHVhbFBhZGRpbmcpLmNzcygncGFkZGluZy1yaWdodCcsIHBhcnNlRmxvYXQoY2FsY3VsYXRlZFBhZGRpbmcpICsgX3RoaXM5Ll9zY3JvbGxiYXJXaWR0aCArIFwicHhcIik7XG4gICAgICAgIH0pOyAvLyBBZGp1c3Qgc3RpY2t5IGNvbnRlbnQgbWFyZ2luXG5cbiAgICAgICAgJChzdGlja3lDb250ZW50KS5lYWNoKGZ1bmN0aW9uIChpbmRleCwgZWxlbWVudCkge1xuICAgICAgICAgIHZhciBhY3R1YWxNYXJnaW4gPSBlbGVtZW50LnN0eWxlLm1hcmdpblJpZ2h0O1xuICAgICAgICAgIHZhciBjYWxjdWxhdGVkTWFyZ2luID0gJChlbGVtZW50KS5jc3MoJ21hcmdpbi1yaWdodCcpO1xuICAgICAgICAgICQoZWxlbWVudCkuZGF0YSgnbWFyZ2luLXJpZ2h0JywgYWN0dWFsTWFyZ2luKS5jc3MoJ21hcmdpbi1yaWdodCcsIHBhcnNlRmxvYXQoY2FsY3VsYXRlZE1hcmdpbikgLSBfdGhpczkuX3Njcm9sbGJhcldpZHRoICsgXCJweFwiKTtcbiAgICAgICAgfSk7IC8vIEFkanVzdCBib2R5IHBhZGRpbmdcblxuICAgICAgICB2YXIgYWN0dWFsUGFkZGluZyA9IGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0O1xuICAgICAgICB2YXIgY2FsY3VsYXRlZFBhZGRpbmcgPSAkKGRvY3VtZW50LmJvZHkpLmNzcygncGFkZGluZy1yaWdodCcpO1xuICAgICAgICAkKGRvY3VtZW50LmJvZHkpLmRhdGEoJ3BhZGRpbmctcmlnaHQnLCBhY3R1YWxQYWRkaW5nKS5jc3MoJ3BhZGRpbmctcmlnaHQnLCBwYXJzZUZsb2F0KGNhbGN1bGF0ZWRQYWRkaW5nKSArIHRoaXMuX3Njcm9sbGJhcldpZHRoICsgXCJweFwiKTtcbiAgICAgIH1cblxuICAgICAgJChkb2N1bWVudC5ib2R5KS5hZGRDbGFzcyhDbGFzc05hbWUkNS5PUEVOKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9yZXNldFNjcm9sbGJhciA9IGZ1bmN0aW9uIF9yZXNldFNjcm9sbGJhcigpIHtcbiAgICAgIC8vIFJlc3RvcmUgZml4ZWQgY29udGVudCBwYWRkaW5nXG4gICAgICB2YXIgZml4ZWRDb250ZW50ID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFNlbGVjdG9yJDUuRklYRURfQ09OVEVOVCkpO1xuICAgICAgJChmaXhlZENvbnRlbnQpLmVhY2goZnVuY3Rpb24gKGluZGV4LCBlbGVtZW50KSB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gJChlbGVtZW50KS5kYXRhKCdwYWRkaW5nLXJpZ2h0Jyk7XG4gICAgICAgICQoZWxlbWVudCkucmVtb3ZlRGF0YSgncGFkZGluZy1yaWdodCcpO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9IHBhZGRpbmcgPyBwYWRkaW5nIDogJyc7XG4gICAgICB9KTsgLy8gUmVzdG9yZSBzdGlja3kgY29udGVudFxuXG4gICAgICB2YXIgZWxlbWVudHMgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJcIiArIFNlbGVjdG9yJDUuU1RJQ0tZX0NPTlRFTlQpKTtcbiAgICAgICQoZWxlbWVudHMpLmVhY2goZnVuY3Rpb24gKGluZGV4LCBlbGVtZW50KSB7XG4gICAgICAgIHZhciBtYXJnaW4gPSAkKGVsZW1lbnQpLmRhdGEoJ21hcmdpbi1yaWdodCcpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgbWFyZ2luICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICQoZWxlbWVudCkuY3NzKCdtYXJnaW4tcmlnaHQnLCBtYXJnaW4pLnJlbW92ZURhdGEoJ21hcmdpbi1yaWdodCcpO1xuICAgICAgICB9XG4gICAgICB9KTsgLy8gUmVzdG9yZSBib2R5IHBhZGRpbmdcblxuICAgICAgdmFyIHBhZGRpbmcgPSAkKGRvY3VtZW50LmJvZHkpLmRhdGEoJ3BhZGRpbmctcmlnaHQnKTtcbiAgICAgICQoZG9jdW1lbnQuYm9keSkucmVtb3ZlRGF0YSgncGFkZGluZy1yaWdodCcpO1xuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQgPSBwYWRkaW5nID8gcGFkZGluZyA6ICcnO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldFNjcm9sbGJhcldpZHRoID0gZnVuY3Rpb24gX2dldFNjcm9sbGJhcldpZHRoKCkge1xuICAgICAgLy8gdGh4IGQud2Fsc2hcbiAgICAgIHZhciBzY3JvbGxEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHNjcm9sbERpdi5jbGFzc05hbWUgPSBDbGFzc05hbWUkNS5TQ1JPTExCQVJfTUVBU1VSRVI7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcm9sbERpdik7XG4gICAgICB2YXIgc2Nyb2xsYmFyV2lkdGggPSBzY3JvbGxEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLSBzY3JvbGxEaXYuY2xpZW50V2lkdGg7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHNjcm9sbERpdik7XG4gICAgICByZXR1cm4gc2Nyb2xsYmFyV2lkdGg7XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBNb2RhbC5falF1ZXJ5SW50ZXJmYWNlID0gZnVuY3Rpb24gX2pRdWVyeUludGVyZmFjZShjb25maWcsIHJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YShEQVRBX0tFWSQ1KTtcblxuICAgICAgICB2YXIgX2NvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIERlZmF1bHQkMywgJCh0aGlzKS5kYXRhKCksIHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZyA/IGNvbmZpZyA6IHt9KTtcblxuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICBkYXRhID0gbmV3IE1vZGFsKHRoaXMsIF9jb25maWcpO1xuICAgICAgICAgICQodGhpcykuZGF0YShEQVRBX0tFWSQ1LCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIG1ldGhvZCBuYW1lZCBcXFwiXCIgKyBjb25maWcgKyBcIlxcXCJcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YVtjb25maWddKHJlbGF0ZWRUYXJnZXQpO1xuICAgICAgICB9IGVsc2UgaWYgKF9jb25maWcuc2hvdykge1xuICAgICAgICAgIGRhdGEuc2hvdyhyZWxhdGVkVGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9jcmVhdGVDbGFzcyhNb2RhbCwgbnVsbCwgW3tcbiAgICAgIGtleTogXCJWRVJTSU9OXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIFZFUlNJT04kNTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiRGVmYXVsdFwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBEZWZhdWx0JDM7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIE1vZGFsO1xuICB9KCk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJChkb2N1bWVudCkub24oRXZlbnQkNS5DTElDS19EQVRBX0FQSSwgU2VsZWN0b3IkNS5EQVRBX1RPR0dMRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIF90aGlzMTAgPSB0aGlzO1xuXG4gICAgdmFyIHRhcmdldDtcbiAgICB2YXIgc2VsZWN0b3IgPSBVdGlsLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodGhpcyk7XG5cbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgIHRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgIH1cblxuICAgIHZhciBjb25maWcgPSAkKHRhcmdldCkuZGF0YShEQVRBX0tFWSQ1KSA/ICd0b2dnbGUnIDogX29iamVjdFNwcmVhZCh7fSwgJCh0YXJnZXQpLmRhdGEoKSwgJCh0aGlzKS5kYXRhKCkpO1xuXG4gICAgaWYgKHRoaXMudGFnTmFtZSA9PT0gJ0EnIHx8IHRoaXMudGFnTmFtZSA9PT0gJ0FSRUEnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciAkdGFyZ2V0ID0gJCh0YXJnZXQpLm9uZShFdmVudCQ1LlNIT1csIGZ1bmN0aW9uIChzaG93RXZlbnQpIHtcbiAgICAgIGlmIChzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgLy8gT25seSByZWdpc3RlciBmb2N1cyByZXN0b3JlciBpZiBtb2RhbCB3aWxsIGFjdHVhbGx5IGdldCBzaG93blxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgICR0YXJnZXQub25lKEV2ZW50JDUuSElEREVOLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICgkKF90aGlzMTApLmlzKCc6dmlzaWJsZScpKSB7XG4gICAgICAgICAgX3RoaXMxMC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIE1vZGFsLl9qUXVlcnlJbnRlcmZhY2UuY2FsbCgkKHRhcmdldCksIGNvbmZpZywgdGhpcyk7XG4gIH0pO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIGpRdWVyeVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgJC5mbltOQU1FJDVdID0gTW9kYWwuX2pRdWVyeUludGVyZmFjZTtcbiAgJC5mbltOQU1FJDVdLkNvbnN0cnVjdG9yID0gTW9kYWw7XG5cbiAgJC5mbltOQU1FJDVdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbltOQU1FJDVdID0gSlFVRVJZX05PX0NPTkZMSUNUJDU7XG4gICAgcmV0dXJuIE1vZGFsLl9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCAodjQuMy4xKTogdG9vbHMvc2FuaXRpemVyLmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuICB2YXIgdXJpQXR0cnMgPSBbJ2JhY2tncm91bmQnLCAnY2l0ZScsICdocmVmJywgJ2l0ZW10eXBlJywgJ2xvbmdkZXNjJywgJ3Bvc3RlcicsICdzcmMnLCAneGxpbms6aHJlZiddO1xuICB2YXIgQVJJQV9BVFRSSUJVVEVfUEFUVEVSTiA9IC9eYXJpYS1bXFx3LV0qJC9pO1xuICB2YXIgRGVmYXVsdFdoaXRlbGlzdCA9IHtcbiAgICAvLyBHbG9iYWwgYXR0cmlidXRlcyBhbGxvd2VkIG9uIGFueSBzdXBwbGllZCBlbGVtZW50IGJlbG93LlxuICAgICcqJzogWydjbGFzcycsICdkaXInLCAnaWQnLCAnbGFuZycsICdyb2xlJywgQVJJQV9BVFRSSUJVVEVfUEFUVEVSTl0sXG4gICAgYTogWyd0YXJnZXQnLCAnaHJlZicsICd0aXRsZScsICdyZWwnXSxcbiAgICBhcmVhOiBbXSxcbiAgICBiOiBbXSxcbiAgICBicjogW10sXG4gICAgY29sOiBbXSxcbiAgICBjb2RlOiBbXSxcbiAgICBkaXY6IFtdLFxuICAgIGVtOiBbXSxcbiAgICBocjogW10sXG4gICAgaDE6IFtdLFxuICAgIGgyOiBbXSxcbiAgICBoMzogW10sXG4gICAgaDQ6IFtdLFxuICAgIGg1OiBbXSxcbiAgICBoNjogW10sXG4gICAgaTogW10sXG4gICAgaW1nOiBbJ3NyYycsICdhbHQnLCAndGl0bGUnLCAnd2lkdGgnLCAnaGVpZ2h0J10sXG4gICAgbGk6IFtdLFxuICAgIG9sOiBbXSxcbiAgICBwOiBbXSxcbiAgICBwcmU6IFtdLFxuICAgIHM6IFtdLFxuICAgIHNtYWxsOiBbXSxcbiAgICBzcGFuOiBbXSxcbiAgICBzdWI6IFtdLFxuICAgIHN1cDogW10sXG4gICAgc3Ryb25nOiBbXSxcbiAgICB1OiBbXSxcbiAgICB1bDogW11cbiAgICAvKipcbiAgICAgKiBBIHBhdHRlcm4gdGhhdCByZWNvZ25pemVzIGEgY29tbW9ubHkgdXNlZnVsIHN1YnNldCBvZiBVUkxzIHRoYXQgYXJlIHNhZmUuXG4gICAgICpcbiAgICAgKiBTaG91dG91dCB0byBBbmd1bGFyIDcgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iLzcuMi40L3BhY2thZ2VzL2NvcmUvc3JjL3Nhbml0aXphdGlvbi91cmxfc2FuaXRpemVyLnRzXG4gICAgICovXG5cbiAgfTtcbiAgdmFyIFNBRkVfVVJMX1BBVFRFUk4gPSAvXig/Oig/Omh0dHBzP3xtYWlsdG98ZnRwfHRlbHxmaWxlKTp8W14mOi8/I10qKD86Wy8/I118JCkpL2dpO1xuICAvKipcbiAgICogQSBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBzYWZlIGRhdGEgVVJMcy4gT25seSBtYXRjaGVzIGltYWdlLCB2aWRlbyBhbmQgYXVkaW8gdHlwZXMuXG4gICAqXG4gICAqIFNob3V0b3V0IHRvIEFuZ3VsYXIgNyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2Jsb2IvNy4yLjQvcGFja2FnZXMvY29yZS9zcmMvc2FuaXRpemF0aW9uL3VybF9zYW5pdGl6ZXIudHNcbiAgICovXG5cbiAgdmFyIERBVEFfVVJMX1BBVFRFUk4gPSAvXmRhdGE6KD86aW1hZ2VcXC8oPzpibXB8Z2lmfGpwZWd8anBnfHBuZ3x0aWZmfHdlYnApfHZpZGVvXFwvKD86bXBlZ3xtcDR8b2dnfHdlYm0pfGF1ZGlvXFwvKD86bXAzfG9nYXxvZ2d8b3B1cykpO2Jhc2U2NCxbYS16MC05Ky9dKz0qJC9pO1xuXG4gIGZ1bmN0aW9uIGFsbG93ZWRBdHRyaWJ1dGUoYXR0ciwgYWxsb3dlZEF0dHJpYnV0ZUxpc3QpIHtcbiAgICB2YXIgYXR0ck5hbWUgPSBhdHRyLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoYWxsb3dlZEF0dHJpYnV0ZUxpc3QuaW5kZXhPZihhdHRyTmFtZSkgIT09IC0xKSB7XG4gICAgICBpZiAodXJpQXR0cnMuaW5kZXhPZihhdHRyTmFtZSkgIT09IC0xKSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKGF0dHIubm9kZVZhbHVlLm1hdGNoKFNBRkVfVVJMX1BBVFRFUk4pIHx8IGF0dHIubm9kZVZhbHVlLm1hdGNoKERBVEFfVVJMX1BBVFRFUk4pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHJlZ0V4cCA9IGFsbG93ZWRBdHRyaWJ1dGVMaXN0LmZpbHRlcihmdW5jdGlvbiAoYXR0clJlZ2V4KSB7XG4gICAgICByZXR1cm4gYXR0clJlZ2V4IGluc3RhbmNlb2YgUmVnRXhwO1xuICAgIH0pOyAvLyBDaGVjayBpZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB2YWxpZGF0ZXMgdGhlIGF0dHJpYnV0ZS5cblxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gcmVnRXhwLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGF0dHJOYW1lLm1hdGNoKHJlZ0V4cFtpXSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2FuaXRpemVIdG1sKHVuc2FmZUh0bWwsIHdoaXRlTGlzdCwgc2FuaXRpemVGbikge1xuICAgIGlmICh1bnNhZmVIdG1sLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuc2FmZUh0bWw7XG4gICAgfVxuXG4gICAgaWYgKHNhbml0aXplRm4gJiYgdHlwZW9mIHNhbml0aXplRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBzYW5pdGl6ZUZuKHVuc2FmZUh0bWwpO1xuICAgIH1cblxuICAgIHZhciBkb21QYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuICAgIHZhciBjcmVhdGVkRG9jdW1lbnQgPSBkb21QYXJzZXIucGFyc2VGcm9tU3RyaW5nKHVuc2FmZUh0bWwsICd0ZXh0L2h0bWwnKTtcbiAgICB2YXIgd2hpdGVsaXN0S2V5cyA9IE9iamVjdC5rZXlzKHdoaXRlTGlzdCk7XG4gICAgdmFyIGVsZW1lbnRzID0gW10uc2xpY2UuY2FsbChjcmVhdGVkRG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKCcqJykpO1xuXG4gICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoaSwgbGVuKSB7XG4gICAgICB2YXIgZWwgPSBlbGVtZW50c1tpXTtcbiAgICAgIHZhciBlbE5hbWUgPSBlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBpZiAod2hpdGVsaXN0S2V5cy5pbmRleE9mKGVsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpID09PSAtMSkge1xuICAgICAgICBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcbiAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcbiAgICAgIH1cblxuICAgICAgdmFyIGF0dHJpYnV0ZUxpc3QgPSBbXS5zbGljZS5jYWxsKGVsLmF0dHJpYnV0ZXMpO1xuICAgICAgdmFyIHdoaXRlbGlzdGVkQXR0cmlidXRlcyA9IFtdLmNvbmNhdCh3aGl0ZUxpc3RbJyonXSB8fCBbXSwgd2hpdGVMaXN0W2VsTmFtZV0gfHwgW10pO1xuICAgICAgYXR0cmlidXRlTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyKSB7XG4gICAgICAgIGlmICghYWxsb3dlZEF0dHJpYnV0ZShhdHRyLCB3aGl0ZWxpc3RlZEF0dHJpYnV0ZXMpKSB7XG4gICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGF0dHIubm9kZU5hbWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGVsZW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB2YXIgX3JldCA9IF9sb29wKGksIGxlbik7XG5cbiAgICAgIGlmIChfcmV0ID09PSBcImNvbnRpbnVlXCIpIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVkRG9jdW1lbnQuYm9keS5pbm5lckhUTUw7XG4gIH1cblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIENvbnN0YW50c1xuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgdmFyIE5BTUUkNiA9ICd0b29sdGlwJztcbiAgdmFyIFZFUlNJT04kNiA9ICc0LjMuMSc7XG4gIHZhciBEQVRBX0tFWSQ2ID0gJ2JzLnRvb2x0aXAnO1xuICB2YXIgRVZFTlRfS0VZJDYgPSBcIi5cIiArIERBVEFfS0VZJDY7XG4gIHZhciBKUVVFUllfTk9fQ09ORkxJQ1QkNiA9ICQuZm5bTkFNRSQ2XTtcbiAgdmFyIENMQVNTX1BSRUZJWCA9ICdicy10b29sdGlwJztcbiAgdmFyIEJTQ0xTX1BSRUZJWF9SRUdFWCA9IG5ldyBSZWdFeHAoXCIoXnxcXFxccylcIiArIENMQVNTX1BSRUZJWCArIFwiXFxcXFMrXCIsICdnJyk7XG4gIHZhciBESVNBTExPV0VEX0FUVFJJQlVURVMgPSBbJ3Nhbml0aXplJywgJ3doaXRlTGlzdCcsICdzYW5pdGl6ZUZuJ107XG4gIHZhciBEZWZhdWx0VHlwZSQ0ID0ge1xuICAgIGFuaW1hdGlvbjogJ2Jvb2xlYW4nLFxuICAgIHRlbXBsYXRlOiAnc3RyaW5nJyxcbiAgICB0aXRsZTogJyhzdHJpbmd8ZWxlbWVudHxmdW5jdGlvbiknLFxuICAgIHRyaWdnZXI6ICdzdHJpbmcnLFxuICAgIGRlbGF5OiAnKG51bWJlcnxvYmplY3QpJyxcbiAgICBodG1sOiAnYm9vbGVhbicsXG4gICAgc2VsZWN0b3I6ICcoc3RyaW5nfGJvb2xlYW4pJyxcbiAgICBwbGFjZW1lbnQ6ICcoc3RyaW5nfGZ1bmN0aW9uKScsXG4gICAgb2Zmc2V0OiAnKG51bWJlcnxzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgICBjb250YWluZXI6ICcoc3RyaW5nfGVsZW1lbnR8Ym9vbGVhbiknLFxuICAgIGZhbGxiYWNrUGxhY2VtZW50OiAnKHN0cmluZ3xhcnJheSknLFxuICAgIGJvdW5kYXJ5OiAnKHN0cmluZ3xlbGVtZW50KScsXG4gICAgc2FuaXRpemU6ICdib29sZWFuJyxcbiAgICBzYW5pdGl6ZUZuOiAnKG51bGx8ZnVuY3Rpb24pJyxcbiAgICB3aGl0ZUxpc3Q6ICdvYmplY3QnXG4gIH07XG4gIHZhciBBdHRhY2htZW50TWFwJDEgPSB7XG4gICAgQVVUTzogJ2F1dG8nLFxuICAgIFRPUDogJ3RvcCcsXG4gICAgUklHSFQ6ICdyaWdodCcsXG4gICAgQk9UVE9NOiAnYm90dG9tJyxcbiAgICBMRUZUOiAnbGVmdCdcbiAgfTtcbiAgdmFyIERlZmF1bHQkNCA9IHtcbiAgICBhbmltYXRpb246IHRydWUsXG4gICAgdGVtcGxhdGU6ICc8ZGl2IGNsYXNzPVwidG9vbHRpcFwiIHJvbGU9XCJ0b29sdGlwXCI+JyArICc8ZGl2IGNsYXNzPVwiYXJyb3dcIj48L2Rpdj4nICsgJzxkaXYgY2xhc3M9XCJ0b29sdGlwLWlubmVyXCI+PC9kaXY+PC9kaXY+JyxcbiAgICB0cmlnZ2VyOiAnaG92ZXIgZm9jdXMnLFxuICAgIHRpdGxlOiAnJyxcbiAgICBkZWxheTogMCxcbiAgICBodG1sOiBmYWxzZSxcbiAgICBzZWxlY3RvcjogZmFsc2UsXG4gICAgcGxhY2VtZW50OiAndG9wJyxcbiAgICBvZmZzZXQ6IDAsXG4gICAgY29udGFpbmVyOiBmYWxzZSxcbiAgICBmYWxsYmFja1BsYWNlbWVudDogJ2ZsaXAnLFxuICAgIGJvdW5kYXJ5OiAnc2Nyb2xsUGFyZW50JyxcbiAgICBzYW5pdGl6ZTogdHJ1ZSxcbiAgICBzYW5pdGl6ZUZuOiBudWxsLFxuICAgIHdoaXRlTGlzdDogRGVmYXVsdFdoaXRlbGlzdFxuICB9O1xuICB2YXIgSG92ZXJTdGF0ZSA9IHtcbiAgICBTSE9XOiAnc2hvdycsXG4gICAgT1VUOiAnb3V0J1xuICB9O1xuICB2YXIgRXZlbnQkNiA9IHtcbiAgICBISURFOiBcImhpZGVcIiArIEVWRU5UX0tFWSQ2LFxuICAgIEhJRERFTjogXCJoaWRkZW5cIiArIEVWRU5UX0tFWSQ2LFxuICAgIFNIT1c6IFwic2hvd1wiICsgRVZFTlRfS0VZJDYsXG4gICAgU0hPV046IFwic2hvd25cIiArIEVWRU5UX0tFWSQ2LFxuICAgIElOU0VSVEVEOiBcImluc2VydGVkXCIgKyBFVkVOVF9LRVkkNixcbiAgICBDTElDSzogXCJjbGlja1wiICsgRVZFTlRfS0VZJDYsXG4gICAgRk9DVVNJTjogXCJmb2N1c2luXCIgKyBFVkVOVF9LRVkkNixcbiAgICBGT0NVU09VVDogXCJmb2N1c291dFwiICsgRVZFTlRfS0VZJDYsXG4gICAgTU9VU0VFTlRFUjogXCJtb3VzZWVudGVyXCIgKyBFVkVOVF9LRVkkNixcbiAgICBNT1VTRUxFQVZFOiBcIm1vdXNlbGVhdmVcIiArIEVWRU5UX0tFWSQ2XG4gIH07XG4gIHZhciBDbGFzc05hbWUkNiA9IHtcbiAgICBGQURFOiAnZmFkZScsXG4gICAgU0hPVzogJ3Nob3cnXG4gIH07XG4gIHZhciBTZWxlY3RvciQ2ID0ge1xuICAgIFRPT0xUSVA6ICcudG9vbHRpcCcsXG4gICAgVE9PTFRJUF9JTk5FUjogJy50b29sdGlwLWlubmVyJyxcbiAgICBBUlJPVzogJy5hcnJvdydcbiAgfTtcbiAgdmFyIFRyaWdnZXIgPSB7XG4gICAgSE9WRVI6ICdob3ZlcicsXG4gICAgRk9DVVM6ICdmb2N1cycsXG4gICAgQ0xJQ0s6ICdjbGljaycsXG4gICAgTUFOVUFMOiAnbWFudWFsJ1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIENsYXNzIERlZmluaXRpb25cbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuICB9O1xuXG4gIHZhciBUb29sdGlwID1cbiAgLyojX19QVVJFX18qL1xuICBmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVG9vbHRpcChlbGVtZW50LCBjb25maWcpIHtcbiAgICAgIC8qKlxuICAgICAgICogQ2hlY2sgZm9yIFBvcHBlciBkZXBlbmRlbmN5XG4gICAgICAgKiBQb3BwZXIgLSBodHRwczovL3BvcHBlci5qcy5vcmdcbiAgICAgICAqL1xuICAgICAgaWYgKHR5cGVvZiBQb3BwZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Jvb3RzdHJhcFxcJ3MgdG9vbHRpcHMgcmVxdWlyZSBQb3BwZXIuanMgKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy8pJyk7XG4gICAgICB9IC8vIHByaXZhdGVcblxuXG4gICAgICB0aGlzLl9pc0VuYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fdGltZW91dCA9IDA7XG4gICAgICB0aGlzLl9ob3ZlclN0YXRlID0gJyc7XG4gICAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyID0ge307XG4gICAgICB0aGlzLl9wb3BwZXIgPSBudWxsOyAvLyBQcm90ZWN0ZWRcblxuICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgIHRoaXMuY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgICB0aGlzLnRpcCA9IG51bGw7XG5cbiAgICAgIHRoaXMuX3NldExpc3RlbmVycygpO1xuICAgIH0gLy8gR2V0dGVyc1xuXG5cbiAgICB2YXIgX3Byb3RvID0gVG9vbHRpcC5wcm90b3R5cGU7XG5cbiAgICAvLyBQdWJsaWNcbiAgICBfcHJvdG8uZW5hYmxlID0gZnVuY3Rpb24gZW5hYmxlKCkge1xuICAgICAgdGhpcy5faXNFbmFibGVkID0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmRpc2FibGUgPSBmdW5jdGlvbiBkaXNhYmxlKCkge1xuICAgICAgdGhpcy5faXNFbmFibGVkID0gZmFsc2U7XG4gICAgfTtcblxuICAgIF9wcm90by50b2dnbGVFbmFibGVkID0gZnVuY3Rpb24gdG9nZ2xlRW5hYmxlZCgpIHtcbiAgICAgIHRoaXMuX2lzRW5hYmxlZCA9ICF0aGlzLl9pc0VuYWJsZWQ7XG4gICAgfTtcblxuICAgIF9wcm90by50b2dnbGUgPSBmdW5jdGlvbiB0b2dnbGUoZXZlbnQpIHtcbiAgICAgIGlmICghdGhpcy5faXNFbmFibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgIHZhciBkYXRhS2V5ID0gdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWTtcbiAgICAgICAgdmFyIGNvbnRleHQgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmRhdGEoZGF0YUtleSk7XG5cbiAgICAgICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICAgICAgY29udGV4dCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKGV2ZW50LmN1cnJlbnRUYXJnZXQsIHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkpO1xuICAgICAgICAgICQoZXZlbnQuY3VycmVudFRhcmdldCkuZGF0YShkYXRhS2V5LCBjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQuX2FjdGl2ZVRyaWdnZXIuY2xpY2sgPSAhY29udGV4dC5fYWN0aXZlVHJpZ2dlci5jbGljaztcblxuICAgICAgICBpZiAoY29udGV4dC5faXNXaXRoQWN0aXZlVHJpZ2dlcigpKSB7XG4gICAgICAgICAgY29udGV4dC5fZW50ZXIobnVsbCwgY29udGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGV4dC5fbGVhdmUobnVsbCwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICgkKHRoaXMuZ2V0VGlwRWxlbWVudCgpKS5oYXNDbGFzcyhDbGFzc05hbWUkNi5TSE9XKSkge1xuICAgICAgICAgIHRoaXMuX2xlYXZlKG51bGwsIHRoaXMpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZW50ZXIobnVsbCwgdGhpcyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5kaXNwb3NlID0gZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICAgICQucmVtb3ZlRGF0YSh0aGlzLmVsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVkpO1xuICAgICAgJCh0aGlzLmVsZW1lbnQpLm9mZih0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0tFWSk7XG4gICAgICAkKHRoaXMuZWxlbWVudCkuY2xvc2VzdCgnLm1vZGFsJykub2ZmKCdoaWRlLmJzLm1vZGFsJyk7XG5cbiAgICAgIGlmICh0aGlzLnRpcCkge1xuICAgICAgICAkKHRoaXMudGlwKS5yZW1vdmUoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faXNFbmFibGVkID0gbnVsbDtcbiAgICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsO1xuICAgICAgdGhpcy5faG92ZXJTdGF0ZSA9IG51bGw7XG4gICAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyID0gbnVsbDtcblxuICAgICAgaWYgKHRoaXMuX3BvcHBlciAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9wb3BwZXIuZGVzdHJveSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9wb3BwZXIgPSBudWxsO1xuICAgICAgdGhpcy5lbGVtZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuY29uZmlnID0gbnVsbDtcbiAgICAgIHRoaXMudGlwID0gbnVsbDtcbiAgICB9O1xuXG4gICAgX3Byb3RvLnNob3cgPSBmdW5jdGlvbiBzaG93KCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKCQodGhpcy5lbGVtZW50KS5jc3MoJ2Rpc3BsYXknKSA9PT0gJ25vbmUnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHVzZSBzaG93IG9uIHZpc2libGUgZWxlbWVudHMnKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHNob3dFdmVudCA9ICQuRXZlbnQodGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5TSE9XKTtcblxuICAgICAgaWYgKHRoaXMuaXNXaXRoQ29udGVudCgpICYmIHRoaXMuX2lzRW5hYmxlZCkge1xuICAgICAgICAkKHRoaXMuZWxlbWVudCkudHJpZ2dlcihzaG93RXZlbnQpO1xuICAgICAgICB2YXIgc2hhZG93Um9vdCA9IFV0aWwuZmluZFNoYWRvd1Jvb3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgdmFyIGlzSW5UaGVEb20gPSAkLmNvbnRhaW5zKHNoYWRvd1Jvb3QgIT09IG51bGwgPyBzaGFkb3dSb290IDogdGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCB0aGlzLmVsZW1lbnQpO1xuXG4gICAgICAgIGlmIChzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgfHwgIWlzSW5UaGVEb20pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdGlwID0gdGhpcy5nZXRUaXBFbGVtZW50KCk7XG4gICAgICAgIHZhciB0aXBJZCA9IFV0aWwuZ2V0VUlEKHRoaXMuY29uc3RydWN0b3IuTkFNRSk7XG4gICAgICAgIHRpcC5zZXRBdHRyaWJ1dGUoJ2lkJywgdGlwSWQpO1xuICAgICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgdGlwSWQpO1xuICAgICAgICB0aGlzLnNldENvbnRlbnQoKTtcblxuICAgICAgICBpZiAodGhpcy5jb25maWcuYW5pbWF0aW9uKSB7XG4gICAgICAgICAgJCh0aXApLmFkZENsYXNzKENsYXNzTmFtZSQ2LkZBREUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBsYWNlbWVudCA9IHR5cGVvZiB0aGlzLmNvbmZpZy5wbGFjZW1lbnQgPT09ICdmdW5jdGlvbicgPyB0aGlzLmNvbmZpZy5wbGFjZW1lbnQuY2FsbCh0aGlzLCB0aXAsIHRoaXMuZWxlbWVudCkgOiB0aGlzLmNvbmZpZy5wbGFjZW1lbnQ7XG5cbiAgICAgICAgdmFyIGF0dGFjaG1lbnQgPSB0aGlzLl9nZXRBdHRhY2htZW50KHBsYWNlbWVudCk7XG5cbiAgICAgICAgdGhpcy5hZGRBdHRhY2htZW50Q2xhc3MoYXR0YWNobWVudCk7XG5cbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IHRoaXMuX2dldENvbnRhaW5lcigpO1xuXG4gICAgICAgICQodGlwKS5kYXRhKHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVksIHRoaXMpO1xuXG4gICAgICAgIGlmICghJC5jb250YWlucyh0aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHRoaXMudGlwKSkge1xuICAgICAgICAgICQodGlwKS5hcHBlbmRUbyhjb250YWluZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgJCh0aGlzLmVsZW1lbnQpLnRyaWdnZXIodGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5JTlNFUlRFRCk7XG4gICAgICAgIHRoaXMuX3BvcHBlciA9IG5ldyBQb3BwZXIodGhpcy5lbGVtZW50LCB0aXAsIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6IGF0dGFjaG1lbnQsXG4gICAgICAgICAgbW9kaWZpZXJzOiB7XG4gICAgICAgICAgICBvZmZzZXQ6IHRoaXMuX2dldE9mZnNldCgpLFxuICAgICAgICAgICAgZmxpcDoge1xuICAgICAgICAgICAgICBiZWhhdmlvcjogdGhpcy5jb25maWcuZmFsbGJhY2tQbGFjZW1lbnRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhcnJvdzoge1xuICAgICAgICAgICAgICBlbGVtZW50OiBTZWxlY3RvciQ2LkFSUk9XXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJldmVudE92ZXJmbG93OiB7XG4gICAgICAgICAgICAgIGJvdW5kYXJpZXNFbGVtZW50OiB0aGlzLmNvbmZpZy5ib3VuZGFyeVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25DcmVhdGU6IGZ1bmN0aW9uIG9uQ3JlYXRlKGRhdGEpIHtcbiAgICAgICAgICAgIGlmIChkYXRhLm9yaWdpbmFsUGxhY2VtZW50ICE9PSBkYXRhLnBsYWNlbWVudCkge1xuICAgICAgICAgICAgICBfdGhpcy5faGFuZGxlUG9wcGVyUGxhY2VtZW50Q2hhbmdlKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25VcGRhdGU6IGZ1bmN0aW9uIG9uVXBkYXRlKGRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5faGFuZGxlUG9wcGVyUGxhY2VtZW50Q2hhbmdlKGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgICQodGlwKS5hZGRDbGFzcyhDbGFzc05hbWUkNi5TSE9XKTsgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIGFkZCBleHRyYVxuICAgICAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHRvIHRoZSBib2R5J3MgaW1tZWRpYXRlIGNoaWxkcmVuO1xuICAgICAgICAvLyBvbmx5IG5lZWRlZCBiZWNhdXNlIG9mIGJyb2tlbiBldmVudCBkZWxlZ2F0aW9uIG9uIGlPU1xuICAgICAgICAvLyBodHRwczovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMTQvMDIvbW91c2VfZXZlbnRfYnViLmh0bWxcblxuICAgICAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgICAgJChkb2N1bWVudC5ib2R5KS5jaGlsZHJlbigpLm9uKCdtb3VzZW92ZXInLCBudWxsLCAkLm5vb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24gY29tcGxldGUoKSB7XG4gICAgICAgICAgaWYgKF90aGlzLmNvbmZpZy5hbmltYXRpb24pIHtcbiAgICAgICAgICAgIF90aGlzLl9maXhUcmFuc2l0aW9uKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHByZXZIb3ZlclN0YXRlID0gX3RoaXMuX2hvdmVyU3RhdGU7XG4gICAgICAgICAgX3RoaXMuX2hvdmVyU3RhdGUgPSBudWxsO1xuICAgICAgICAgICQoX3RoaXMuZWxlbWVudCkudHJpZ2dlcihfdGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5TSE9XTik7XG5cbiAgICAgICAgICBpZiAocHJldkhvdmVyU3RhdGUgPT09IEhvdmVyU3RhdGUuT1VUKSB7XG4gICAgICAgICAgICBfdGhpcy5fbGVhdmUobnVsbCwgX3RoaXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoJCh0aGlzLnRpcCkuaGFzQ2xhc3MoQ2xhc3NOYW1lJDYuRkFERSkpIHtcbiAgICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLnRpcCk7XG4gICAgICAgICAgJCh0aGlzLnRpcCkub25lKFV0aWwuVFJBTlNJVElPTl9FTkQsIGNvbXBsZXRlKS5lbXVsYXRlVHJhbnNpdGlvbkVuZCh0cmFuc2l0aW9uRHVyYXRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLmhpZGUgPSBmdW5jdGlvbiBoaWRlKGNhbGxiYWNrKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIHRpcCA9IHRoaXMuZ2V0VGlwRWxlbWVudCgpO1xuICAgICAgdmFyIGhpZGVFdmVudCA9ICQuRXZlbnQodGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5ISURFKTtcblxuICAgICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24gY29tcGxldGUoKSB7XG4gICAgICAgIGlmIChfdGhpczIuX2hvdmVyU3RhdGUgIT09IEhvdmVyU3RhdGUuU0hPVyAmJiB0aXAucGFyZW50Tm9kZSkge1xuICAgICAgICAgIHRpcC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRpcCk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczIuX2NsZWFuVGlwQ2xhc3MoKTtcblxuICAgICAgICBfdGhpczIuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknKTtcblxuICAgICAgICAkKF90aGlzMi5lbGVtZW50KS50cmlnZ2VyKF90aGlzMi5jb25zdHJ1Y3Rvci5FdmVudC5ISURERU4pO1xuXG4gICAgICAgIGlmIChfdGhpczIuX3BvcHBlciAhPT0gbnVsbCkge1xuICAgICAgICAgIF90aGlzMi5fcG9wcGVyLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgICQodGhpcy5lbGVtZW50KS50cmlnZ2VyKGhpZGVFdmVudCk7XG5cbiAgICAgIGlmIChoaWRlRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAkKHRpcCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lJDYuU0hPVyk7IC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSByZW1vdmUgdGhlIGV4dHJhXG4gICAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHdlIGFkZGVkIGZvciBpT1Mgc3VwcG9ydFxuXG4gICAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgICQoZG9jdW1lbnQuYm9keSkuY2hpbGRyZW4oKS5vZmYoJ21vdXNlb3ZlcicsIG51bGwsICQubm9vcCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVHJpZ2dlci5DTElDS10gPSBmYWxzZTtcbiAgICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVHJpZ2dlci5GT0NVU10gPSBmYWxzZTtcbiAgICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVHJpZ2dlci5IT1ZFUl0gPSBmYWxzZTtcblxuICAgICAgaWYgKCQodGhpcy50aXApLmhhc0NsYXNzKENsYXNzTmFtZSQ2LkZBREUpKSB7XG4gICAgICAgIHZhciB0cmFuc2l0aW9uRHVyYXRpb24gPSBVdGlsLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRpcCk7XG4gICAgICAgICQodGlwKS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgY29tcGxldGUpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9ob3ZlclN0YXRlID0gJyc7XG4gICAgfTtcblxuICAgIF9wcm90by51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICBpZiAodGhpcy5fcG9wcGVyICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX3BvcHBlci5zY2hlZHVsZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH0gLy8gUHJvdGVjdGVkXG4gICAgO1xuXG4gICAgX3Byb3RvLmlzV2l0aENvbnRlbnQgPSBmdW5jdGlvbiBpc1dpdGhDb250ZW50KCkge1xuICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5nZXRUaXRsZSgpKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmFkZEF0dGFjaG1lbnRDbGFzcyA9IGZ1bmN0aW9uIGFkZEF0dGFjaG1lbnRDbGFzcyhhdHRhY2htZW50KSB7XG4gICAgICAkKHRoaXMuZ2V0VGlwRWxlbWVudCgpKS5hZGRDbGFzcyhDTEFTU19QUkVGSVggKyBcIi1cIiArIGF0dGFjaG1lbnQpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uZ2V0VGlwRWxlbWVudCA9IGZ1bmN0aW9uIGdldFRpcEVsZW1lbnQoKSB7XG4gICAgICB0aGlzLnRpcCA9IHRoaXMudGlwIHx8ICQodGhpcy5jb25maWcudGVtcGxhdGUpWzBdO1xuICAgICAgcmV0dXJuIHRoaXMudGlwO1xuICAgIH07XG5cbiAgICBfcHJvdG8uc2V0Q29udGVudCA9IGZ1bmN0aW9uIHNldENvbnRlbnQoKSB7XG4gICAgICB2YXIgdGlwID0gdGhpcy5nZXRUaXBFbGVtZW50KCk7XG4gICAgICB0aGlzLnNldEVsZW1lbnRDb250ZW50KCQodGlwLnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IkNi5UT09MVElQX0lOTkVSKSksIHRoaXMuZ2V0VGl0bGUoKSk7XG4gICAgICAkKHRpcCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lJDYuRkFERSArIFwiIFwiICsgQ2xhc3NOYW1lJDYuU0hPVyk7XG4gICAgfTtcblxuICAgIF9wcm90by5zZXRFbGVtZW50Q29udGVudCA9IGZ1bmN0aW9uIHNldEVsZW1lbnRDb250ZW50KCRlbGVtZW50LCBjb250ZW50KSB7XG4gICAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdvYmplY3QnICYmIChjb250ZW50Lm5vZGVUeXBlIHx8IGNvbnRlbnQuanF1ZXJ5KSkge1xuICAgICAgICAvLyBDb250ZW50IGlzIGEgRE9NIG5vZGUgb3IgYSBqUXVlcnlcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmh0bWwpIHtcbiAgICAgICAgICBpZiAoISQoY29udGVudCkucGFyZW50KCkuaXMoJGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAkZWxlbWVudC5lbXB0eSgpLmFwcGVuZChjb250ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgJGVsZW1lbnQudGV4dCgkKGNvbnRlbnQpLnRleHQoKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbmZpZy5odG1sKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5zYW5pdGl6ZSkge1xuICAgICAgICAgIGNvbnRlbnQgPSBzYW5pdGl6ZUh0bWwoY29udGVudCwgdGhpcy5jb25maWcud2hpdGVMaXN0LCB0aGlzLmNvbmZpZy5zYW5pdGl6ZUZuKTtcbiAgICAgICAgfVxuXG4gICAgICAgICRlbGVtZW50Lmh0bWwoY29udGVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkZWxlbWVudC50ZXh0KGNvbnRlbnQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uZ2V0VGl0bGUgPSBmdW5jdGlvbiBnZXRUaXRsZSgpIHtcbiAgICAgIHZhciB0aXRsZSA9IHRoaXMuZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtb3JpZ2luYWwtdGl0bGUnKTtcblxuICAgICAgaWYgKCF0aXRsZSkge1xuICAgICAgICB0aXRsZSA9IHR5cGVvZiB0aGlzLmNvbmZpZy50aXRsZSA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMuY29uZmlnLnRpdGxlLmNhbGwodGhpcy5lbGVtZW50KSA6IHRoaXMuY29uZmlnLnRpdGxlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGl0bGU7XG4gICAgfSAvLyBQcml2YXRlXG4gICAgO1xuXG4gICAgX3Byb3RvLl9nZXRPZmZzZXQgPSBmdW5jdGlvbiBfZ2V0T2Zmc2V0KCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBvZmZzZXQgPSB7fTtcblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZy5vZmZzZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb2Zmc2V0LmZuID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICBkYXRhLm9mZnNldHMgPSBfb2JqZWN0U3ByZWFkKHt9LCBkYXRhLm9mZnNldHMsIF90aGlzMy5jb25maWcub2Zmc2V0KGRhdGEub2Zmc2V0cywgX3RoaXMzLmVsZW1lbnQpIHx8IHt9KTtcbiAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9mZnNldC5vZmZzZXQgPSB0aGlzLmNvbmZpZy5vZmZzZXQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvZmZzZXQ7XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0Q29udGFpbmVyID0gZnVuY3Rpb24gX2dldENvbnRhaW5lcigpIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5jb250YWluZXIgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5ib2R5O1xuICAgICAgfVxuXG4gICAgICBpZiAoVXRpbC5pc0VsZW1lbnQodGhpcy5jb25maWcuY29udGFpbmVyKSkge1xuICAgICAgICByZXR1cm4gJCh0aGlzLmNvbmZpZy5jb250YWluZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gJChkb2N1bWVudCkuZmluZCh0aGlzLmNvbmZpZy5jb250YWluZXIpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldEF0dGFjaG1lbnQgPSBmdW5jdGlvbiBfZ2V0QXR0YWNobWVudChwbGFjZW1lbnQpIHtcbiAgICAgIHJldHVybiBBdHRhY2htZW50TWFwJDFbcGxhY2VtZW50LnRvVXBwZXJDYXNlKCldO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX3NldExpc3RlbmVycyA9IGZ1bmN0aW9uIF9zZXRMaXN0ZW5lcnMoKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgdmFyIHRyaWdnZXJzID0gdGhpcy5jb25maWcudHJpZ2dlci5zcGxpdCgnICcpO1xuICAgICAgdHJpZ2dlcnMuZm9yRWFjaChmdW5jdGlvbiAodHJpZ2dlcikge1xuICAgICAgICBpZiAodHJpZ2dlciA9PT0gJ2NsaWNrJykge1xuICAgICAgICAgICQoX3RoaXM0LmVsZW1lbnQpLm9uKF90aGlzNC5jb25zdHJ1Y3Rvci5FdmVudC5DTElDSywgX3RoaXM0LmNvbmZpZy5zZWxlY3RvciwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM0LnRvZ2dsZShldmVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHJpZ2dlciAhPT0gVHJpZ2dlci5NQU5VQUwpIHtcbiAgICAgICAgICB2YXIgZXZlbnRJbiA9IHRyaWdnZXIgPT09IFRyaWdnZXIuSE9WRVIgPyBfdGhpczQuY29uc3RydWN0b3IuRXZlbnQuTU9VU0VFTlRFUiA6IF90aGlzNC5jb25zdHJ1Y3Rvci5FdmVudC5GT0NVU0lOO1xuICAgICAgICAgIHZhciBldmVudE91dCA9IHRyaWdnZXIgPT09IFRyaWdnZXIuSE9WRVIgPyBfdGhpczQuY29uc3RydWN0b3IuRXZlbnQuTU9VU0VMRUFWRSA6IF90aGlzNC5jb25zdHJ1Y3Rvci5FdmVudC5GT0NVU09VVDtcbiAgICAgICAgICAkKF90aGlzNC5lbGVtZW50KS5vbihldmVudEluLCBfdGhpczQuY29uZmlnLnNlbGVjdG9yLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczQuX2VudGVyKGV2ZW50KTtcbiAgICAgICAgICB9KS5vbihldmVudE91dCwgX3RoaXM0LmNvbmZpZy5zZWxlY3RvciwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM0Ll9sZWF2ZShldmVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgJCh0aGlzLmVsZW1lbnQpLmNsb3Nlc3QoJy5tb2RhbCcpLm9uKCdoaWRlLmJzLm1vZGFsJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXM0LmVsZW1lbnQpIHtcbiAgICAgICAgICBfdGhpczQuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMuY29uZmlnLnNlbGVjdG9yKSB7XG4gICAgICAgIHRoaXMuY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgdGhpcy5jb25maWcsIHtcbiAgICAgICAgICB0cmlnZ2VyOiAnbWFudWFsJyxcbiAgICAgICAgICBzZWxlY3RvcjogJydcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9maXhUaXRsZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uX2ZpeFRpdGxlID0gZnVuY3Rpb24gX2ZpeFRpdGxlKCkge1xuICAgICAgdmFyIHRpdGxlVHlwZSA9IHR5cGVvZiB0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLW9yaWdpbmFsLXRpdGxlJyk7XG5cbiAgICAgIGlmICh0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0aXRsZScpIHx8IHRpdGxlVHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1vcmlnaW5hbC10aXRsZScsIHRoaXMuZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RpdGxlJykgfHwgJycpO1xuICAgICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCd0aXRsZScsICcnKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLl9lbnRlciA9IGZ1bmN0aW9uIF9lbnRlcihldmVudCwgY29udGV4dCkge1xuICAgICAgdmFyIGRhdGFLZXkgPSB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZO1xuICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgJChldmVudC5jdXJyZW50VGFyZ2V0KS5kYXRhKGRhdGFLZXkpO1xuXG4gICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgY29udGV4dCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKGV2ZW50LmN1cnJlbnRUYXJnZXQsIHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkpO1xuICAgICAgICAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmRhdGEoZGF0YUtleSwgY29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudCkge1xuICAgICAgICBjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyW2V2ZW50LnR5cGUgPT09ICdmb2N1c2luJyA/IFRyaWdnZXIuRk9DVVMgOiBUcmlnZ2VyLkhPVkVSXSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICgkKGNvbnRleHQuZ2V0VGlwRWxlbWVudCgpKS5oYXNDbGFzcyhDbGFzc05hbWUkNi5TSE9XKSB8fCBjb250ZXh0Ll9ob3ZlclN0YXRlID09PSBIb3ZlclN0YXRlLlNIT1cpIHtcbiAgICAgICAgY29udGV4dC5faG92ZXJTdGF0ZSA9IEhvdmVyU3RhdGUuU0hPVztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjbGVhclRpbWVvdXQoY29udGV4dC5fdGltZW91dCk7XG4gICAgICBjb250ZXh0Ll9ob3ZlclN0YXRlID0gSG92ZXJTdGF0ZS5TSE9XO1xuXG4gICAgICBpZiAoIWNvbnRleHQuY29uZmlnLmRlbGF5IHx8ICFjb250ZXh0LmNvbmZpZy5kZWxheS5zaG93KSB7XG4gICAgICAgIGNvbnRleHQuc2hvdygpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGNvbnRleHQuX2hvdmVyU3RhdGUgPT09IEhvdmVyU3RhdGUuU0hPVykge1xuICAgICAgICAgIGNvbnRleHQuc2hvdygpO1xuICAgICAgICB9XG4gICAgICB9LCBjb250ZXh0LmNvbmZpZy5kZWxheS5zaG93KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9sZWF2ZSA9IGZ1bmN0aW9uIF9sZWF2ZShldmVudCwgY29udGV4dCkge1xuICAgICAgdmFyIGRhdGFLZXkgPSB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZO1xuICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgJChldmVudC5jdXJyZW50VGFyZ2V0KS5kYXRhKGRhdGFLZXkpO1xuXG4gICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgY29udGV4dCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKGV2ZW50LmN1cnJlbnRUYXJnZXQsIHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkpO1xuICAgICAgICAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmRhdGEoZGF0YUtleSwgY29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudCkge1xuICAgICAgICBjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyW2V2ZW50LnR5cGUgPT09ICdmb2N1c291dCcgPyBUcmlnZ2VyLkZPQ1VTIDogVHJpZ2dlci5IT1ZFUl0gPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbnRleHQuX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNsZWFyVGltZW91dChjb250ZXh0Ll90aW1lb3V0KTtcbiAgICAgIGNvbnRleHQuX2hvdmVyU3RhdGUgPSBIb3ZlclN0YXRlLk9VVDtcblxuICAgICAgaWYgKCFjb250ZXh0LmNvbmZpZy5kZWxheSB8fCAhY29udGV4dC5jb25maWcuZGVsYXkuaGlkZSkge1xuICAgICAgICBjb250ZXh0LmhpZGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Ll90aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChjb250ZXh0Ll9ob3ZlclN0YXRlID09PSBIb3ZlclN0YXRlLk9VVCkge1xuICAgICAgICAgIGNvbnRleHQuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICB9LCBjb250ZXh0LmNvbmZpZy5kZWxheS5oaWRlKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9pc1dpdGhBY3RpdmVUcmlnZ2VyID0gZnVuY3Rpb24gX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKSB7XG4gICAgICBmb3IgKHZhciB0cmlnZ2VyIGluIHRoaXMuX2FjdGl2ZVRyaWdnZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZVRyaWdnZXJbdHJpZ2dlcl0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0Q29uZmlnID0gZnVuY3Rpb24gX2dldENvbmZpZyhjb25maWcpIHtcbiAgICAgIHZhciBkYXRhQXR0cmlidXRlcyA9ICQodGhpcy5lbGVtZW50KS5kYXRhKCk7XG4gICAgICBPYmplY3Qua2V5cyhkYXRhQXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoZGF0YUF0dHIpIHtcbiAgICAgICAgaWYgKERJU0FMTE9XRURfQVRUUklCVVRFUy5pbmRleE9mKGRhdGFBdHRyKSAhPT0gLTEpIHtcbiAgICAgICAgICBkZWxldGUgZGF0YUF0dHJpYnV0ZXNbZGF0YUF0dHJdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdCwgZGF0YUF0dHJpYnV0ZXMsIHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZyA/IGNvbmZpZyA6IHt9KTtcblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcuZGVsYXkgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGNvbmZpZy5kZWxheSA9IHtcbiAgICAgICAgICBzaG93OiBjb25maWcuZGVsYXksXG4gICAgICAgICAgaGlkZTogY29uZmlnLmRlbGF5XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnLnRpdGxlID09PSAnbnVtYmVyJykge1xuICAgICAgICBjb25maWcudGl0bGUgPSBjb25maWcudGl0bGUudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcuY29udGVudCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uZmlnLmNvbnRlbnQgPSBjb25maWcuY29udGVudC50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICBVdGlsLnR5cGVDaGVja0NvbmZpZyhOQU1FJDYsIGNvbmZpZywgdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0VHlwZSk7XG5cbiAgICAgIGlmIChjb25maWcuc2FuaXRpemUpIHtcbiAgICAgICAgY29uZmlnLnRlbXBsYXRlID0gc2FuaXRpemVIdG1sKGNvbmZpZy50ZW1wbGF0ZSwgY29uZmlnLndoaXRlTGlzdCwgY29uZmlnLnNhbml0aXplRm4pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldERlbGVnYXRlQ29uZmlnID0gZnVuY3Rpb24gX2dldERlbGVnYXRlQ29uZmlnKCkge1xuICAgICAgdmFyIGNvbmZpZyA9IHt9O1xuXG4gICAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuY29uZmlnKSB7XG4gICAgICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFtrZXldICE9PSB0aGlzLmNvbmZpZ1trZXldKSB7XG4gICAgICAgICAgICBjb25maWdba2V5XSA9IHRoaXMuY29uZmlnW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfTtcblxuICAgIF9wcm90by5fY2xlYW5UaXBDbGFzcyA9IGZ1bmN0aW9uIF9jbGVhblRpcENsYXNzKCkge1xuICAgICAgdmFyICR0aXAgPSAkKHRoaXMuZ2V0VGlwRWxlbWVudCgpKTtcbiAgICAgIHZhciB0YWJDbGFzcyA9ICR0aXAuYXR0cignY2xhc3MnKS5tYXRjaChCU0NMU19QUkVGSVhfUkVHRVgpO1xuXG4gICAgICBpZiAodGFiQ2xhc3MgIT09IG51bGwgJiYgdGFiQ2xhc3MubGVuZ3RoKSB7XG4gICAgICAgICR0aXAucmVtb3ZlQ2xhc3ModGFiQ2xhc3Muam9pbignJykpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uX2hhbmRsZVBvcHBlclBsYWNlbWVudENoYW5nZSA9IGZ1bmN0aW9uIF9oYW5kbGVQb3BwZXJQbGFjZW1lbnRDaGFuZ2UocG9wcGVyRGF0YSkge1xuICAgICAgdmFyIHBvcHBlckluc3RhbmNlID0gcG9wcGVyRGF0YS5pbnN0YW5jZTtcbiAgICAgIHRoaXMudGlwID0gcG9wcGVySW5zdGFuY2UucG9wcGVyO1xuXG4gICAgICB0aGlzLl9jbGVhblRpcENsYXNzKCk7XG5cbiAgICAgIHRoaXMuYWRkQXR0YWNobWVudENsYXNzKHRoaXMuX2dldEF0dGFjaG1lbnQocG9wcGVyRGF0YS5wbGFjZW1lbnQpKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9maXhUcmFuc2l0aW9uID0gZnVuY3Rpb24gX2ZpeFRyYW5zaXRpb24oKSB7XG4gICAgICB2YXIgdGlwID0gdGhpcy5nZXRUaXBFbGVtZW50KCk7XG4gICAgICB2YXIgaW5pdENvbmZpZ0FuaW1hdGlvbiA9IHRoaXMuY29uZmlnLmFuaW1hdGlvbjtcblxuICAgICAgaWYgKHRpcC5nZXRBdHRyaWJ1dGUoJ3gtcGxhY2VtZW50JykgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAkKHRpcCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lJDYuRkFERSk7XG4gICAgICB0aGlzLmNvbmZpZy5hbmltYXRpb24gPSBmYWxzZTtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgdGhpcy5zaG93KCk7XG4gICAgICB0aGlzLmNvbmZpZy5hbmltYXRpb24gPSBpbml0Q29uZmlnQW5pbWF0aW9uO1xuICAgIH0gLy8gU3RhdGljXG4gICAgO1xuXG4gICAgVG9vbHRpcC5falF1ZXJ5SW50ZXJmYWNlID0gZnVuY3Rpb24gX2pRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YShEQVRBX0tFWSQ2KTtcblxuICAgICAgICB2YXIgX2NvbmZpZyA9IHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZztcblxuICAgICAgICBpZiAoIWRhdGEgJiYgL2Rpc3Bvc2V8aGlkZS8udGVzdChjb25maWcpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IG5ldyBUb29sdGlwKHRoaXMsIF9jb25maWcpO1xuICAgICAgICAgICQodGhpcykuZGF0YShEQVRBX0tFWSQ2LCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIG1ldGhvZCBuYW1lZCBcXFwiXCIgKyBjb25maWcgKyBcIlxcXCJcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBfY3JlYXRlQ2xhc3MoVG9vbHRpcCwgbnVsbCwgW3tcbiAgICAgIGtleTogXCJWRVJTSU9OXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIFZFUlNJT04kNjtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiRGVmYXVsdFwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBEZWZhdWx0JDQ7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIk5BTUVcIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gTkFNRSQ2O1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJEQVRBX0tFWVwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBEQVRBX0tFWSQ2O1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJFdmVudFwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBFdmVudCQ2O1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJFVkVOVF9LRVlcIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gRVZFTlRfS0VZJDY7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkRlZmF1bHRUeXBlXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIERlZmF1bHRUeXBlJDQ7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIFRvb2x0aXA7XG4gIH0oKTtcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBqUXVlcnlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJC5mbltOQU1FJDZdID0gVG9vbHRpcC5falF1ZXJ5SW50ZXJmYWNlO1xuICAkLmZuW05BTUUkNl0uQ29uc3RydWN0b3IgPSBUb29sdGlwO1xuXG4gICQuZm5bTkFNRSQ2XS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICQuZm5bTkFNRSQ2XSA9IEpRVUVSWV9OT19DT05GTElDVCQ2O1xuICAgIHJldHVybiBUb29sdGlwLl9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBDb25zdGFudHNcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBOQU1FJDcgPSAncG9wb3Zlcic7XG4gIHZhciBWRVJTSU9OJDcgPSAnNC4zLjEnO1xuICB2YXIgREFUQV9LRVkkNyA9ICdicy5wb3BvdmVyJztcbiAgdmFyIEVWRU5UX0tFWSQ3ID0gXCIuXCIgKyBEQVRBX0tFWSQ3O1xuICB2YXIgSlFVRVJZX05PX0NPTkZMSUNUJDcgPSAkLmZuW05BTUUkN107XG4gIHZhciBDTEFTU19QUkVGSVgkMSA9ICdicy1wb3BvdmVyJztcbiAgdmFyIEJTQ0xTX1BSRUZJWF9SRUdFWCQxID0gbmV3IFJlZ0V4cChcIihefFxcXFxzKVwiICsgQ0xBU1NfUFJFRklYJDEgKyBcIlxcXFxTK1wiLCAnZycpO1xuXG4gIHZhciBEZWZhdWx0JDUgPSBfb2JqZWN0U3ByZWFkKHt9LCBUb29sdGlwLkRlZmF1bHQsIHtcbiAgICBwbGFjZW1lbnQ6ICdyaWdodCcsXG4gICAgdHJpZ2dlcjogJ2NsaWNrJyxcbiAgICBjb250ZW50OiAnJyxcbiAgICB0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9XCJwb3BvdmVyXCIgcm9sZT1cInRvb2x0aXBcIj4nICsgJzxkaXYgY2xhc3M9XCJhcnJvd1wiPjwvZGl2PicgKyAnPGgzIGNsYXNzPVwicG9wb3Zlci1oZWFkZXJcIj48L2gzPicgKyAnPGRpdiBjbGFzcz1cInBvcG92ZXItYm9keVwiPjwvZGl2PjwvZGl2PidcbiAgfSk7XG5cbiAgdmFyIERlZmF1bHRUeXBlJDUgPSBfb2JqZWN0U3ByZWFkKHt9LCBUb29sdGlwLkRlZmF1bHRUeXBlLCB7XG4gICAgY29udGVudDogJyhzdHJpbmd8ZWxlbWVudHxmdW5jdGlvbiknXG4gIH0pO1xuXG4gIHZhciBDbGFzc05hbWUkNyA9IHtcbiAgICBGQURFOiAnZmFkZScsXG4gICAgU0hPVzogJ3Nob3cnXG4gIH07XG4gIHZhciBTZWxlY3RvciQ3ID0ge1xuICAgIFRJVExFOiAnLnBvcG92ZXItaGVhZGVyJyxcbiAgICBDT05URU5UOiAnLnBvcG92ZXItYm9keSdcbiAgfTtcbiAgdmFyIEV2ZW50JDcgPSB7XG4gICAgSElERTogXCJoaWRlXCIgKyBFVkVOVF9LRVkkNyxcbiAgICBISURERU46IFwiaGlkZGVuXCIgKyBFVkVOVF9LRVkkNyxcbiAgICBTSE9XOiBcInNob3dcIiArIEVWRU5UX0tFWSQ3LFxuICAgIFNIT1dOOiBcInNob3duXCIgKyBFVkVOVF9LRVkkNyxcbiAgICBJTlNFUlRFRDogXCJpbnNlcnRlZFwiICsgRVZFTlRfS0VZJDcsXG4gICAgQ0xJQ0s6IFwiY2xpY2tcIiArIEVWRU5UX0tFWSQ3LFxuICAgIEZPQ1VTSU46IFwiZm9jdXNpblwiICsgRVZFTlRfS0VZJDcsXG4gICAgRk9DVVNPVVQ6IFwiZm9jdXNvdXRcIiArIEVWRU5UX0tFWSQ3LFxuICAgIE1PVVNFRU5URVI6IFwibW91c2VlbnRlclwiICsgRVZFTlRfS0VZJDcsXG4gICAgTU9VU0VMRUFWRTogXCJtb3VzZWxlYXZlXCIgKyBFVkVOVF9LRVkkN1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIENsYXNzIERlZmluaXRpb25cbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuICB9O1xuXG4gIHZhciBQb3BvdmVyID1cbiAgLyojX19QVVJFX18qL1xuICBmdW5jdGlvbiAoX1Rvb2x0aXApIHtcbiAgICBfaW5oZXJpdHNMb29zZShQb3BvdmVyLCBfVG9vbHRpcCk7XG5cbiAgICBmdW5jdGlvbiBQb3BvdmVyKCkge1xuICAgICAgcmV0dXJuIF9Ub29sdGlwLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG5cbiAgICB2YXIgX3Byb3RvID0gUG9wb3Zlci5wcm90b3R5cGU7XG5cbiAgICAvLyBPdmVycmlkZXNcbiAgICBfcHJvdG8uaXNXaXRoQ29udGVudCA9IGZ1bmN0aW9uIGlzV2l0aENvbnRlbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRUaXRsZSgpIHx8IHRoaXMuX2dldENvbnRlbnQoKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmFkZEF0dGFjaG1lbnRDbGFzcyA9IGZ1bmN0aW9uIGFkZEF0dGFjaG1lbnRDbGFzcyhhdHRhY2htZW50KSB7XG4gICAgICAkKHRoaXMuZ2V0VGlwRWxlbWVudCgpKS5hZGRDbGFzcyhDTEFTU19QUkVGSVgkMSArIFwiLVwiICsgYXR0YWNobWVudCk7XG4gICAgfTtcblxuICAgIF9wcm90by5nZXRUaXBFbGVtZW50ID0gZnVuY3Rpb24gZ2V0VGlwRWxlbWVudCgpIHtcbiAgICAgIHRoaXMudGlwID0gdGhpcy50aXAgfHwgJCh0aGlzLmNvbmZpZy50ZW1wbGF0ZSlbMF07XG4gICAgICByZXR1cm4gdGhpcy50aXA7XG4gICAgfTtcblxuICAgIF9wcm90by5zZXRDb250ZW50ID0gZnVuY3Rpb24gc2V0Q29udGVudCgpIHtcbiAgICAgIHZhciAkdGlwID0gJCh0aGlzLmdldFRpcEVsZW1lbnQoKSk7IC8vIFdlIHVzZSBhcHBlbmQgZm9yIGh0bWwgb2JqZWN0cyB0byBtYWludGFpbiBqcyBldmVudHNcblxuICAgICAgdGhpcy5zZXRFbGVtZW50Q29udGVudCgkdGlwLmZpbmQoU2VsZWN0b3IkNy5USVRMRSksIHRoaXMuZ2V0VGl0bGUoKSk7XG5cbiAgICAgIHZhciBjb250ZW50ID0gdGhpcy5fZ2V0Q29udGVudCgpO1xuXG4gICAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQuY2FsbCh0aGlzLmVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldEVsZW1lbnRDb250ZW50KCR0aXAuZmluZChTZWxlY3RvciQ3LkNPTlRFTlQpLCBjb250ZW50KTtcbiAgICAgICR0aXAucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lJDcuRkFERSArIFwiIFwiICsgQ2xhc3NOYW1lJDcuU0hPVyk7XG4gICAgfSAvLyBQcml2YXRlXG4gICAgO1xuXG4gICAgX3Byb3RvLl9nZXRDb250ZW50ID0gZnVuY3Rpb24gX2dldENvbnRlbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1jb250ZW50JykgfHwgdGhpcy5jb25maWcuY29udGVudDtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9jbGVhblRpcENsYXNzID0gZnVuY3Rpb24gX2NsZWFuVGlwQ2xhc3MoKSB7XG4gICAgICB2YXIgJHRpcCA9ICQodGhpcy5nZXRUaXBFbGVtZW50KCkpO1xuICAgICAgdmFyIHRhYkNsYXNzID0gJHRpcC5hdHRyKCdjbGFzcycpLm1hdGNoKEJTQ0xTX1BSRUZJWF9SRUdFWCQxKTtcblxuICAgICAgaWYgKHRhYkNsYXNzICE9PSBudWxsICYmIHRhYkNsYXNzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgJHRpcC5yZW1vdmVDbGFzcyh0YWJDbGFzcy5qb2luKCcnKSk7XG4gICAgICB9XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBQb3BvdmVyLl9qUXVlcnlJbnRlcmZhY2UgPSBmdW5jdGlvbiBfalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkYXRhID0gJCh0aGlzKS5kYXRhKERBVEFfS0VZJDcpO1xuXG4gICAgICAgIHZhciBfY29uZmlnID0gdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiBudWxsO1xuXG4gICAgICAgIGlmICghZGF0YSAmJiAvZGlzcG9zZXxoaWRlLy50ZXN0KGNvbmZpZykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICBkYXRhID0gbmV3IFBvcG92ZXIodGhpcywgX2NvbmZpZyk7XG4gICAgICAgICAgJCh0aGlzKS5kYXRhKERBVEFfS0VZJDcsIGRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gbWV0aG9kIG5hbWVkIFxcXCJcIiArIGNvbmZpZyArIFwiXFxcIlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9jcmVhdGVDbGFzcyhQb3BvdmVyLCBudWxsLCBbe1xuICAgICAga2V5OiBcIlZFUlNJT05cIixcbiAgICAgIC8vIEdldHRlcnNcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gVkVSU0lPTiQ3O1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJEZWZhdWx0XCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIERlZmF1bHQkNTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiTkFNRVwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBOQU1FJDc7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkRBVEFfS0VZXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIERBVEFfS0VZJDc7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkV2ZW50XCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIEV2ZW50JDc7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkVWRU5UX0tFWVwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBFVkVOVF9LRVkkNztcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiRGVmYXVsdFR5cGVcIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gRGVmYXVsdFR5cGUkNTtcbiAgICAgIH1cbiAgICB9XSk7XG5cbiAgICByZXR1cm4gUG9wb3ZlcjtcbiAgfShUb29sdGlwKTtcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBqUXVlcnlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJC5mbltOQU1FJDddID0gUG9wb3Zlci5falF1ZXJ5SW50ZXJmYWNlO1xuICAkLmZuW05BTUUkN10uQ29uc3RydWN0b3IgPSBQb3BvdmVyO1xuXG4gICQuZm5bTkFNRSQ3XS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICQuZm5bTkFNRSQ3XSA9IEpRVUVSWV9OT19DT05GTElDVCQ3O1xuICAgIHJldHVybiBQb3BvdmVyLl9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBDb25zdGFudHNcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBOQU1FJDggPSAnc2Nyb2xsc3B5JztcbiAgdmFyIFZFUlNJT04kOCA9ICc0LjMuMSc7XG4gIHZhciBEQVRBX0tFWSQ4ID0gJ2JzLnNjcm9sbHNweSc7XG4gIHZhciBFVkVOVF9LRVkkOCA9IFwiLlwiICsgREFUQV9LRVkkODtcbiAgdmFyIERBVEFfQVBJX0tFWSQ2ID0gJy5kYXRhLWFwaSc7XG4gIHZhciBKUVVFUllfTk9fQ09ORkxJQ1QkOCA9ICQuZm5bTkFNRSQ4XTtcbiAgdmFyIERlZmF1bHQkNiA9IHtcbiAgICBvZmZzZXQ6IDEwLFxuICAgIG1ldGhvZDogJ2F1dG8nLFxuICAgIHRhcmdldDogJydcbiAgfTtcbiAgdmFyIERlZmF1bHRUeXBlJDYgPSB7XG4gICAgb2Zmc2V0OiAnbnVtYmVyJyxcbiAgICBtZXRob2Q6ICdzdHJpbmcnLFxuICAgIHRhcmdldDogJyhzdHJpbmd8ZWxlbWVudCknXG4gIH07XG4gIHZhciBFdmVudCQ4ID0ge1xuICAgIEFDVElWQVRFOiBcImFjdGl2YXRlXCIgKyBFVkVOVF9LRVkkOCxcbiAgICBTQ1JPTEw6IFwic2Nyb2xsXCIgKyBFVkVOVF9LRVkkOCxcbiAgICBMT0FEX0RBVEFfQVBJOiBcImxvYWRcIiArIEVWRU5UX0tFWSQ4ICsgREFUQV9BUElfS0VZJDZcbiAgfTtcbiAgdmFyIENsYXNzTmFtZSQ4ID0ge1xuICAgIERST1BET1dOX0lURU06ICdkcm9wZG93bi1pdGVtJyxcbiAgICBEUk9QRE9XTl9NRU5VOiAnZHJvcGRvd24tbWVudScsXG4gICAgQUNUSVZFOiAnYWN0aXZlJ1xuICB9O1xuICB2YXIgU2VsZWN0b3IkOCA9IHtcbiAgICBEQVRBX1NQWTogJ1tkYXRhLXNweT1cInNjcm9sbFwiXScsXG4gICAgQUNUSVZFOiAnLmFjdGl2ZScsXG4gICAgTkFWX0xJU1RfR1JPVVA6ICcubmF2LCAubGlzdC1ncm91cCcsXG4gICAgTkFWX0xJTktTOiAnLm5hdi1saW5rJyxcbiAgICBOQVZfSVRFTVM6ICcubmF2LWl0ZW0nLFxuICAgIExJU1RfSVRFTVM6ICcubGlzdC1ncm91cC1pdGVtJyxcbiAgICBEUk9QRE9XTjogJy5kcm9wZG93bicsXG4gICAgRFJPUERPV05fSVRFTVM6ICcuZHJvcGRvd24taXRlbScsXG4gICAgRFJPUERPV05fVE9HR0xFOiAnLmRyb3Bkb3duLXRvZ2dsZSdcbiAgfTtcbiAgdmFyIE9mZnNldE1ldGhvZCA9IHtcbiAgICBPRkZTRVQ6ICdvZmZzZXQnLFxuICAgIFBPU0lUSU9OOiAncG9zaXRpb24nXG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG4gIH07XG5cbiAgdmFyIFNjcm9sbFNweSA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNjcm9sbFNweShlbGVtZW50LCBjb25maWcpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgdGhpcy5fc2Nyb2xsRWxlbWVudCA9IGVsZW1lbnQudGFnTmFtZSA9PT0gJ0JPRFknID8gd2luZG93IDogZWxlbWVudDtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgICAgdGhpcy5fc2VsZWN0b3IgPSB0aGlzLl9jb25maWcudGFyZ2V0ICsgXCIgXCIgKyBTZWxlY3RvciQ4Lk5BVl9MSU5LUyArIFwiLFwiICsgKHRoaXMuX2NvbmZpZy50YXJnZXQgKyBcIiBcIiArIFNlbGVjdG9yJDguTElTVF9JVEVNUyArIFwiLFwiKSArICh0aGlzLl9jb25maWcudGFyZ2V0ICsgXCIgXCIgKyBTZWxlY3RvciQ4LkRST1BET1dOX0lURU1TKTtcbiAgICAgIHRoaXMuX29mZnNldHMgPSBbXTtcbiAgICAgIHRoaXMuX3RhcmdldHMgPSBbXTtcbiAgICAgIHRoaXMuX2FjdGl2ZVRhcmdldCA9IG51bGw7XG4gICAgICB0aGlzLl9zY3JvbGxIZWlnaHQgPSAwO1xuICAgICAgJCh0aGlzLl9zY3JvbGxFbGVtZW50KS5vbihFdmVudCQ4LlNDUk9MTCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5fcHJvY2VzcyhldmVudCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuXG4gICAgICB0aGlzLl9wcm9jZXNzKCk7XG4gICAgfSAvLyBHZXR0ZXJzXG5cblxuICAgIHZhciBfcHJvdG8gPSBTY3JvbGxTcHkucHJvdG90eXBlO1xuXG4gICAgLy8gUHVibGljXG4gICAgX3Byb3RvLnJlZnJlc2ggPSBmdW5jdGlvbiByZWZyZXNoKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBhdXRvTWV0aG9kID0gdGhpcy5fc2Nyb2xsRWxlbWVudCA9PT0gdGhpcy5fc2Nyb2xsRWxlbWVudC53aW5kb3cgPyBPZmZzZXRNZXRob2QuT0ZGU0VUIDogT2Zmc2V0TWV0aG9kLlBPU0lUSU9OO1xuICAgICAgdmFyIG9mZnNldE1ldGhvZCA9IHRoaXMuX2NvbmZpZy5tZXRob2QgPT09ICdhdXRvJyA/IGF1dG9NZXRob2QgOiB0aGlzLl9jb25maWcubWV0aG9kO1xuICAgICAgdmFyIG9mZnNldEJhc2UgPSBvZmZzZXRNZXRob2QgPT09IE9mZnNldE1ldGhvZC5QT1NJVElPTiA/IHRoaXMuX2dldFNjcm9sbFRvcCgpIDogMDtcbiAgICAgIHRoaXMuX29mZnNldHMgPSBbXTtcbiAgICAgIHRoaXMuX3RhcmdldHMgPSBbXTtcbiAgICAgIHRoaXMuX3Njcm9sbEhlaWdodCA9IHRoaXMuX2dldFNjcm9sbEhlaWdodCgpO1xuICAgICAgdmFyIHRhcmdldHMgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5fc2VsZWN0b3IpKTtcbiAgICAgIHRhcmdldHMubWFwKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIHZhciB0YXJnZXQ7XG4gICAgICAgIHZhciB0YXJnZXRTZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICBpZiAodGFyZ2V0U2VsZWN0b3IpIHtcbiAgICAgICAgICB0YXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldFNlbGVjdG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICB2YXIgdGFyZ2V0QkNSID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgaWYgKHRhcmdldEJDUi53aWR0aCB8fCB0YXJnZXRCQ1IuaGVpZ2h0KSB7XG4gICAgICAgICAgICAvLyBUT0RPIChmYXQpOiByZW1vdmUgc2tldGNoIHJlbGlhbmNlIG9uIGpRdWVyeSBwb3NpdGlvbi9vZmZzZXRcbiAgICAgICAgICAgIHJldHVybiBbJCh0YXJnZXQpW29mZnNldE1ldGhvZF0oKS50b3AgKyBvZmZzZXRCYXNlLCB0YXJnZXRTZWxlY3Rvcl07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9KS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHJldHVybiBhWzBdIC0gYlswXTtcbiAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgX3RoaXMyLl9vZmZzZXRzLnB1c2goaXRlbVswXSk7XG5cbiAgICAgICAgX3RoaXMyLl90YXJnZXRzLnB1c2goaXRlbVsxXSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgJC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsIERBVEFfS0VZJDgpO1xuICAgICAgJCh0aGlzLl9zY3JvbGxFbGVtZW50KS5vZmYoRVZFTlRfS0VZJDgpO1xuICAgICAgdGhpcy5fZWxlbWVudCA9IG51bGw7XG4gICAgICB0aGlzLl9zY3JvbGxFbGVtZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IG51bGw7XG4gICAgICB0aGlzLl9zZWxlY3RvciA9IG51bGw7XG4gICAgICB0aGlzLl9vZmZzZXRzID0gbnVsbDtcbiAgICAgIHRoaXMuX3RhcmdldHMgPSBudWxsO1xuICAgICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gbnVsbDtcbiAgICAgIHRoaXMuX3Njcm9sbEhlaWdodCA9IG51bGw7XG4gICAgfSAvLyBQcml2YXRlXG4gICAgO1xuXG4gICAgX3Byb3RvLl9nZXRDb25maWcgPSBmdW5jdGlvbiBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgICAgY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgRGVmYXVsdCQ2LCB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiBjb25maWcgPyBjb25maWcgOiB7fSk7XG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnLnRhcmdldCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFyIGlkID0gJChjb25maWcudGFyZ2V0KS5hdHRyKCdpZCcpO1xuXG4gICAgICAgIGlmICghaWQpIHtcbiAgICAgICAgICBpZCA9IFV0aWwuZ2V0VUlEKE5BTUUkOCk7XG4gICAgICAgICAgJChjb25maWcudGFyZ2V0KS5hdHRyKCdpZCcsIGlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZy50YXJnZXQgPSBcIiNcIiArIGlkO1xuICAgICAgfVxuXG4gICAgICBVdGlsLnR5cGVDaGVja0NvbmZpZyhOQU1FJDgsIGNvbmZpZywgRGVmYXVsdFR5cGUkNik7XG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldFNjcm9sbFRvcCA9IGZ1bmN0aW9uIF9nZXRTY3JvbGxUb3AoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2Nyb2xsRWxlbWVudCA9PT0gd2luZG93ID8gdGhpcy5fc2Nyb2xsRWxlbWVudC5wYWdlWU9mZnNldCA6IHRoaXMuX3Njcm9sbEVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldFNjcm9sbEhlaWdodCA9IGZ1bmN0aW9uIF9nZXRTY3JvbGxIZWlnaHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2Nyb2xsRWxlbWVudC5zY3JvbGxIZWlnaHQgfHwgTWF0aC5tYXgoZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQsIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldE9mZnNldEhlaWdodCA9IGZ1bmN0aW9uIF9nZXRPZmZzZXRIZWlnaHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2Nyb2xsRWxlbWVudCA9PT0gd2luZG93ID8gd2luZG93LmlubmVySGVpZ2h0IDogdGhpcy5fc2Nyb2xsRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgfTtcblxuICAgIF9wcm90by5fcHJvY2VzcyA9IGZ1bmN0aW9uIF9wcm9jZXNzKCkge1xuICAgICAgdmFyIHNjcm9sbFRvcCA9IHRoaXMuX2dldFNjcm9sbFRvcCgpICsgdGhpcy5fY29uZmlnLm9mZnNldDtcblxuICAgICAgdmFyIHNjcm9sbEhlaWdodCA9IHRoaXMuX2dldFNjcm9sbEhlaWdodCgpO1xuXG4gICAgICB2YXIgbWF4U2Nyb2xsID0gdGhpcy5fY29uZmlnLm9mZnNldCArIHNjcm9sbEhlaWdodCAtIHRoaXMuX2dldE9mZnNldEhlaWdodCgpO1xuXG4gICAgICBpZiAodGhpcy5fc2Nyb2xsSGVpZ2h0ICE9PSBzY3JvbGxIZWlnaHQpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzY3JvbGxUb3AgPj0gbWF4U2Nyb2xsKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLl90YXJnZXRzW3RoaXMuX3RhcmdldHMubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZVRhcmdldCAhPT0gdGFyZ2V0KSB7XG4gICAgICAgICAgdGhpcy5fYWN0aXZhdGUodGFyZ2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2FjdGl2ZVRhcmdldCAmJiBzY3JvbGxUb3AgPCB0aGlzLl9vZmZzZXRzWzBdICYmIHRoaXMuX29mZnNldHNbMF0gPiAwKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRhcmdldCA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5fY2xlYXIoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBvZmZzZXRMZW5ndGggPSB0aGlzLl9vZmZzZXRzLmxlbmd0aDtcblxuICAgICAgZm9yICh2YXIgaSA9IG9mZnNldExlbmd0aDsgaS0tOykge1xuICAgICAgICB2YXIgaXNBY3RpdmVUYXJnZXQgPSB0aGlzLl9hY3RpdmVUYXJnZXQgIT09IHRoaXMuX3RhcmdldHNbaV0gJiYgc2Nyb2xsVG9wID49IHRoaXMuX29mZnNldHNbaV0gJiYgKHR5cGVvZiB0aGlzLl9vZmZzZXRzW2kgKyAxXSA9PT0gJ3VuZGVmaW5lZCcgfHwgc2Nyb2xsVG9wIDwgdGhpcy5fb2Zmc2V0c1tpICsgMV0pO1xuXG4gICAgICAgIGlmIChpc0FjdGl2ZVRhcmdldCkge1xuICAgICAgICAgIHRoaXMuX2FjdGl2YXRlKHRoaXMuX3RhcmdldHNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5fYWN0aXZhdGUgPSBmdW5jdGlvbiBfYWN0aXZhdGUodGFyZ2V0KSB7XG4gICAgICB0aGlzLl9hY3RpdmVUYXJnZXQgPSB0YXJnZXQ7XG5cbiAgICAgIHRoaXMuX2NsZWFyKCk7XG5cbiAgICAgIHZhciBxdWVyaWVzID0gdGhpcy5fc2VsZWN0b3Iuc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RvciArIFwiW2RhdGEtdGFyZ2V0PVxcXCJcIiArIHRhcmdldCArIFwiXFxcIl0sXCIgKyBzZWxlY3RvciArIFwiW2hyZWY9XFxcIlwiICsgdGFyZ2V0ICsgXCJcXFwiXVwiO1xuICAgICAgfSk7XG5cbiAgICAgIHZhciAkbGluayA9ICQoW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJpZXMuam9pbignLCcpKSkpO1xuXG4gICAgICBpZiAoJGxpbmsuaGFzQ2xhc3MoQ2xhc3NOYW1lJDguRFJPUERPV05fSVRFTSkpIHtcbiAgICAgICAgJGxpbmsuY2xvc2VzdChTZWxlY3RvciQ4LkRST1BET1dOKS5maW5kKFNlbGVjdG9yJDguRFJPUERPV05fVE9HR0xFKS5hZGRDbGFzcyhDbGFzc05hbWUkOC5BQ1RJVkUpO1xuICAgICAgICAkbGluay5hZGRDbGFzcyhDbGFzc05hbWUkOC5BQ1RJVkUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2V0IHRyaWdnZXJlZCBsaW5rIGFzIGFjdGl2ZVxuICAgICAgICAkbGluay5hZGRDbGFzcyhDbGFzc05hbWUkOC5BQ1RJVkUpOyAvLyBTZXQgdHJpZ2dlcmVkIGxpbmtzIHBhcmVudHMgYXMgYWN0aXZlXG4gICAgICAgIC8vIFdpdGggYm90aCA8dWw+IGFuZCA8bmF2PiBtYXJrdXAgYSBwYXJlbnQgaXMgdGhlIHByZXZpb3VzIHNpYmxpbmcgb2YgYW55IG5hdiBhbmNlc3RvclxuXG4gICAgICAgICRsaW5rLnBhcmVudHMoU2VsZWN0b3IkOC5OQVZfTElTVF9HUk9VUCkucHJldihTZWxlY3RvciQ4Lk5BVl9MSU5LUyArIFwiLCBcIiArIFNlbGVjdG9yJDguTElTVF9JVEVNUykuYWRkQ2xhc3MoQ2xhc3NOYW1lJDguQUNUSVZFKTsgLy8gSGFuZGxlIHNwZWNpYWwgY2FzZSB3aGVuIC5uYXYtbGluayBpcyBpbnNpZGUgLm5hdi1pdGVtXG5cbiAgICAgICAgJGxpbmsucGFyZW50cyhTZWxlY3RvciQ4Lk5BVl9MSVNUX0dST1VQKS5wcmV2KFNlbGVjdG9yJDguTkFWX0lURU1TKS5jaGlsZHJlbihTZWxlY3RvciQ4Lk5BVl9MSU5LUykuYWRkQ2xhc3MoQ2xhc3NOYW1lJDguQUNUSVZFKTtcbiAgICAgIH1cblxuICAgICAgJCh0aGlzLl9zY3JvbGxFbGVtZW50KS50cmlnZ2VyKEV2ZW50JDguQUNUSVZBVEUsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogdGFyZ2V0XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9jbGVhciA9IGZ1bmN0aW9uIF9jbGVhcigpIHtcbiAgICAgIFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0aGlzLl9zZWxlY3RvcikpLmZpbHRlcihmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5jbGFzc0xpc3QuY29udGFpbnMoQ2xhc3NOYW1lJDguQUNUSVZFKTtcbiAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUuY2xhc3NMaXN0LnJlbW92ZShDbGFzc05hbWUkOC5BQ1RJVkUpO1xuICAgICAgfSk7XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBTY3JvbGxTcHkuX2pRdWVyeUludGVyZmFjZSA9IGZ1bmN0aW9uIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAkKHRoaXMpLmRhdGEoREFUQV9LRVkkOCk7XG5cbiAgICAgICAgdmFyIF9jb25maWcgPSB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiBjb25maWc7XG5cbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IG5ldyBTY3JvbGxTcHkodGhpcywgX2NvbmZpZyk7XG4gICAgICAgICAgJCh0aGlzKS5kYXRhKERBVEFfS0VZJDgsIGRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gbWV0aG9kIG5hbWVkIFxcXCJcIiArIGNvbmZpZyArIFwiXFxcIlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9jcmVhdGVDbGFzcyhTY3JvbGxTcHksIG51bGwsIFt7XG4gICAgICBrZXk6IFwiVkVSU0lPTlwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBWRVJTSU9OJDg7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkRlZmF1bHRcIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gRGVmYXVsdCQ2O1xuICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBTY3JvbGxTcHk7XG4gIH0oKTtcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBEYXRhIEFwaSBpbXBsZW1lbnRhdGlvblxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cblxuICAkKHdpbmRvdykub24oRXZlbnQkOC5MT0FEX0RBVEFfQVBJLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNjcm9sbFNweXMgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IkOC5EQVRBX1NQWSkpO1xuICAgIHZhciBzY3JvbGxTcHlzTGVuZ3RoID0gc2Nyb2xsU3B5cy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpID0gc2Nyb2xsU3B5c0xlbmd0aDsgaS0tOykge1xuICAgICAgdmFyICRzcHkgPSAkKHNjcm9sbFNweXNbaV0pO1xuXG4gICAgICBTY3JvbGxTcHkuX2pRdWVyeUludGVyZmFjZS5jYWxsKCRzcHksICRzcHkuZGF0YSgpKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIGpRdWVyeVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgJC5mbltOQU1FJDhdID0gU2Nyb2xsU3B5Ll9qUXVlcnlJbnRlcmZhY2U7XG4gICQuZm5bTkFNRSQ4XS5Db25zdHJ1Y3RvciA9IFNjcm9sbFNweTtcblxuICAkLmZuW05BTUUkOF0ubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAkLmZuW05BTUUkOF0gPSBKUVVFUllfTk9fQ09ORkxJQ1QkODtcbiAgICByZXR1cm4gU2Nyb2xsU3B5Ll9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBDb25zdGFudHNcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBOQU1FJDkgPSAndGFiJztcbiAgdmFyIFZFUlNJT04kOSA9ICc0LjMuMSc7XG4gIHZhciBEQVRBX0tFWSQ5ID0gJ2JzLnRhYic7XG4gIHZhciBFVkVOVF9LRVkkOSA9IFwiLlwiICsgREFUQV9LRVkkOTtcbiAgdmFyIERBVEFfQVBJX0tFWSQ3ID0gJy5kYXRhLWFwaSc7XG4gIHZhciBKUVVFUllfTk9fQ09ORkxJQ1QkOSA9ICQuZm5bTkFNRSQ5XTtcbiAgdmFyIEV2ZW50JDkgPSB7XG4gICAgSElERTogXCJoaWRlXCIgKyBFVkVOVF9LRVkkOSxcbiAgICBISURERU46IFwiaGlkZGVuXCIgKyBFVkVOVF9LRVkkOSxcbiAgICBTSE9XOiBcInNob3dcIiArIEVWRU5UX0tFWSQ5LFxuICAgIFNIT1dOOiBcInNob3duXCIgKyBFVkVOVF9LRVkkOSxcbiAgICBDTElDS19EQVRBX0FQSTogXCJjbGlja1wiICsgRVZFTlRfS0VZJDkgKyBEQVRBX0FQSV9LRVkkN1xuICB9O1xuICB2YXIgQ2xhc3NOYW1lJDkgPSB7XG4gICAgRFJPUERPV05fTUVOVTogJ2Ryb3Bkb3duLW1lbnUnLFxuICAgIEFDVElWRTogJ2FjdGl2ZScsXG4gICAgRElTQUJMRUQ6ICdkaXNhYmxlZCcsXG4gICAgRkFERTogJ2ZhZGUnLFxuICAgIFNIT1c6ICdzaG93J1xuICB9O1xuICB2YXIgU2VsZWN0b3IkOSA9IHtcbiAgICBEUk9QRE9XTjogJy5kcm9wZG93bicsXG4gICAgTkFWX0xJU1RfR1JPVVA6ICcubmF2LCAubGlzdC1ncm91cCcsXG4gICAgQUNUSVZFOiAnLmFjdGl2ZScsXG4gICAgQUNUSVZFX1VMOiAnPiBsaSA+IC5hY3RpdmUnLFxuICAgIERBVEFfVE9HR0xFOiAnW2RhdGEtdG9nZ2xlPVwidGFiXCJdLCBbZGF0YS10b2dnbGU9XCJwaWxsXCJdLCBbZGF0YS10b2dnbGU9XCJsaXN0XCJdJyxcbiAgICBEUk9QRE9XTl9UT0dHTEU6ICcuZHJvcGRvd24tdG9nZ2xlJyxcbiAgICBEUk9QRE9XTl9BQ1RJVkVfQ0hJTEQ6ICc+IC5kcm9wZG93bi1tZW51IC5hY3RpdmUnXG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG4gIH07XG5cbiAgdmFyIFRhYiA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFRhYihlbGVtZW50KSB7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICB9IC8vIEdldHRlcnNcblxuXG4gICAgdmFyIF9wcm90byA9IFRhYi5wcm90b3R5cGU7XG5cbiAgICAvLyBQdWJsaWNcbiAgICBfcHJvdG8uc2hvdyA9IGZ1bmN0aW9uIHNob3coKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5fZWxlbWVudC5wYXJlbnROb2RlICYmIHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgJCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUkOS5BQ1RJVkUpIHx8ICQodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1lJDkuRElTQUJMRUQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHRhcmdldDtcbiAgICAgIHZhciBwcmV2aW91cztcbiAgICAgIHZhciBsaXN0RWxlbWVudCA9ICQodGhpcy5fZWxlbWVudCkuY2xvc2VzdChTZWxlY3RvciQ5Lk5BVl9MSVNUX0dST1VQKVswXTtcbiAgICAgIHZhciBzZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcblxuICAgICAgaWYgKGxpc3RFbGVtZW50KSB7XG4gICAgICAgIHZhciBpdGVtU2VsZWN0b3IgPSBsaXN0RWxlbWVudC5ub2RlTmFtZSA9PT0gJ1VMJyB8fCBsaXN0RWxlbWVudC5ub2RlTmFtZSA9PT0gJ09MJyA/IFNlbGVjdG9yJDkuQUNUSVZFX1VMIDogU2VsZWN0b3IkOS5BQ1RJVkU7XG4gICAgICAgIHByZXZpb3VzID0gJC5tYWtlQXJyYXkoJChsaXN0RWxlbWVudCkuZmluZChpdGVtU2VsZWN0b3IpKTtcbiAgICAgICAgcHJldmlvdXMgPSBwcmV2aW91c1twcmV2aW91cy5sZW5ndGggLSAxXTtcbiAgICAgIH1cblxuICAgICAgdmFyIGhpZGVFdmVudCA9ICQuRXZlbnQoRXZlbnQkOS5ISURFLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRoaXMuX2VsZW1lbnRcbiAgICAgIH0pO1xuICAgICAgdmFyIHNob3dFdmVudCA9ICQuRXZlbnQoRXZlbnQkOS5TSE9XLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHByZXZpb3VzXG4gICAgICB9KTtcblxuICAgICAgaWYgKHByZXZpb3VzKSB7XG4gICAgICAgICQocHJldmlvdXMpLnRyaWdnZXIoaGlkZUV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgJCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKHNob3dFdmVudCk7XG5cbiAgICAgIGlmIChzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgfHwgaGlkZUV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgIHRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9hY3RpdmF0ZSh0aGlzLl9lbGVtZW50LCBsaXN0RWxlbWVudCk7XG5cbiAgICAgIHZhciBjb21wbGV0ZSA9IGZ1bmN0aW9uIGNvbXBsZXRlKCkge1xuICAgICAgICB2YXIgaGlkZGVuRXZlbnQgPSAkLkV2ZW50KEV2ZW50JDkuSElEREVOLCB7XG4gICAgICAgICAgcmVsYXRlZFRhcmdldDogX3RoaXMuX2VsZW1lbnRcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBzaG93bkV2ZW50ID0gJC5FdmVudChFdmVudCQ5LlNIT1dOLCB7XG4gICAgICAgICAgcmVsYXRlZFRhcmdldDogcHJldmlvdXNcbiAgICAgICAgfSk7XG4gICAgICAgICQocHJldmlvdXMpLnRyaWdnZXIoaGlkZGVuRXZlbnQpO1xuICAgICAgICAkKF90aGlzLl9lbGVtZW50KS50cmlnZ2VyKHNob3duRXZlbnQpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICB0aGlzLl9hY3RpdmF0ZSh0YXJnZXQsIHRhcmdldC5wYXJlbnROb2RlLCBjb21wbGV0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uZGlzcG9zZSA9IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgICAkLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwgREFUQV9LRVkkOSk7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgICB9IC8vIFByaXZhdGVcbiAgICA7XG5cbiAgICBfcHJvdG8uX2FjdGl2YXRlID0gZnVuY3Rpb24gX2FjdGl2YXRlKGVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgYWN0aXZlRWxlbWVudHMgPSBjb250YWluZXIgJiYgKGNvbnRhaW5lci5ub2RlTmFtZSA9PT0gJ1VMJyB8fCBjb250YWluZXIubm9kZU5hbWUgPT09ICdPTCcpID8gJChjb250YWluZXIpLmZpbmQoU2VsZWN0b3IkOS5BQ1RJVkVfVUwpIDogJChjb250YWluZXIpLmNoaWxkcmVuKFNlbGVjdG9yJDkuQUNUSVZFKTtcbiAgICAgIHZhciBhY3RpdmUgPSBhY3RpdmVFbGVtZW50c1swXTtcbiAgICAgIHZhciBpc1RyYW5zaXRpb25pbmcgPSBjYWxsYmFjayAmJiBhY3RpdmUgJiYgJChhY3RpdmUpLmhhc0NsYXNzKENsYXNzTmFtZSQ5LkZBREUpO1xuXG4gICAgICB2YXIgY29tcGxldGUgPSBmdW5jdGlvbiBjb21wbGV0ZSgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzMi5fdHJhbnNpdGlvbkNvbXBsZXRlKGVsZW1lbnQsIGFjdGl2ZSwgY2FsbGJhY2spO1xuICAgICAgfTtcblxuICAgICAgaWYgKGFjdGl2ZSAmJiBpc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQoYWN0aXZlKTtcbiAgICAgICAgJChhY3RpdmUpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQ5LlNIT1cpLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCBjb21wbGV0ZSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5fdHJhbnNpdGlvbkNvbXBsZXRlID0gZnVuY3Rpb24gX3RyYW5zaXRpb25Db21wbGV0ZShlbGVtZW50LCBhY3RpdmUsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgICQoYWN0aXZlKS5yZW1vdmVDbGFzcyhDbGFzc05hbWUkOS5BQ1RJVkUpO1xuICAgICAgICB2YXIgZHJvcGRvd25DaGlsZCA9ICQoYWN0aXZlLnBhcmVudE5vZGUpLmZpbmQoU2VsZWN0b3IkOS5EUk9QRE9XTl9BQ1RJVkVfQ0hJTEQpWzBdO1xuXG4gICAgICAgIGlmIChkcm9wZG93bkNoaWxkKSB7XG4gICAgICAgICAgJChkcm9wZG93bkNoaWxkKS5yZW1vdmVDbGFzcyhDbGFzc05hbWUkOS5BQ1RJVkUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFjdGl2ZS5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSA9PT0gJ3RhYicpIHtcbiAgICAgICAgICBhY3RpdmUuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICQoZWxlbWVudCkuYWRkQ2xhc3MoQ2xhc3NOYW1lJDkuQUNUSVZFKTtcblxuICAgICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdyb2xlJykgPT09ICd0YWInKSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIFV0aWwucmVmbG93KGVsZW1lbnQpO1xuXG4gICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ2xhc3NOYW1lJDkuRkFERSkpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZSQ5LlNIT1cpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxlbWVudC5wYXJlbnROb2RlICYmICQoZWxlbWVudC5wYXJlbnROb2RlKS5oYXNDbGFzcyhDbGFzc05hbWUkOS5EUk9QRE9XTl9NRU5VKSkge1xuICAgICAgICB2YXIgZHJvcGRvd25FbGVtZW50ID0gJChlbGVtZW50KS5jbG9zZXN0KFNlbGVjdG9yJDkuRFJPUERPV04pWzBdO1xuXG4gICAgICAgIGlmIChkcm9wZG93bkVsZW1lbnQpIHtcbiAgICAgICAgICB2YXIgZHJvcGRvd25Ub2dnbGVMaXN0ID0gW10uc2xpY2UuY2FsbChkcm9wZG93bkVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3RvciQ5LkRST1BET1dOX1RPR0dMRSkpO1xuICAgICAgICAgICQoZHJvcGRvd25Ub2dnbGVMaXN0KS5hZGRDbGFzcyhDbGFzc05hbWUkOS5BQ1RJVkUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBUYWIuX2pRdWVyeUludGVyZmFjZSA9IGZ1bmN0aW9uIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTtcbiAgICAgICAgdmFyIGRhdGEgPSAkdGhpcy5kYXRhKERBVEFfS0VZJDkpO1xuXG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgIGRhdGEgPSBuZXcgVGFiKHRoaXMpO1xuICAgICAgICAgICR0aGlzLmRhdGEoREFUQV9LRVkkOSwgZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyBtZXRob2QgbmFtZWQgXFxcIlwiICsgY29uZmlnICsgXCJcXFwiXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRhdGFbY29uZmlnXSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX2NyZWF0ZUNsYXNzKFRhYiwgbnVsbCwgW3tcbiAgICAgIGtleTogXCJWRVJTSU9OXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIFZFUlNJT04kOTtcbiAgICAgIH1cbiAgICB9XSk7XG5cbiAgICByZXR1cm4gVGFiO1xuICB9KCk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJChkb2N1bWVudCkub24oRXZlbnQkOS5DTElDS19EQVRBX0FQSSwgU2VsZWN0b3IkOS5EQVRBX1RPR0dMRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIFRhYi5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoJCh0aGlzKSwgJ3Nob3cnKTtcbiAgfSk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogalF1ZXJ5XG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICAkLmZuW05BTUUkOV0gPSBUYWIuX2pRdWVyeUludGVyZmFjZTtcbiAgJC5mbltOQU1FJDldLkNvbnN0cnVjdG9yID0gVGFiO1xuXG4gICQuZm5bTkFNRSQ5XS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICQuZm5bTkFNRSQ5XSA9IEpRVUVSWV9OT19DT05GTElDVCQ5O1xuICAgIHJldHVybiBUYWIuX2pRdWVyeUludGVyZmFjZTtcbiAgfTtcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIENvbnN0YW50c1xuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgdmFyIE5BTUUkYSA9ICd0b2FzdCc7XG4gIHZhciBWRVJTSU9OJGEgPSAnNC4zLjEnO1xuICB2YXIgREFUQV9LRVkkYSA9ICdicy50b2FzdCc7XG4gIHZhciBFVkVOVF9LRVkkYSA9IFwiLlwiICsgREFUQV9LRVkkYTtcbiAgdmFyIEpRVUVSWV9OT19DT05GTElDVCRhID0gJC5mbltOQU1FJGFdO1xuICB2YXIgRXZlbnQkYSA9IHtcbiAgICBDTElDS19ESVNNSVNTOiBcImNsaWNrLmRpc21pc3NcIiArIEVWRU5UX0tFWSRhLFxuICAgIEhJREU6IFwiaGlkZVwiICsgRVZFTlRfS0VZJGEsXG4gICAgSElEREVOOiBcImhpZGRlblwiICsgRVZFTlRfS0VZJGEsXG4gICAgU0hPVzogXCJzaG93XCIgKyBFVkVOVF9LRVkkYSxcbiAgICBTSE9XTjogXCJzaG93blwiICsgRVZFTlRfS0VZJGFcbiAgfTtcbiAgdmFyIENsYXNzTmFtZSRhID0ge1xuICAgIEZBREU6ICdmYWRlJyxcbiAgICBISURFOiAnaGlkZScsXG4gICAgU0hPVzogJ3Nob3cnLFxuICAgIFNIT1dJTkc6ICdzaG93aW5nJ1xuICB9O1xuICB2YXIgRGVmYXVsdFR5cGUkNyA9IHtcbiAgICBhbmltYXRpb246ICdib29sZWFuJyxcbiAgICBhdXRvaGlkZTogJ2Jvb2xlYW4nLFxuICAgIGRlbGF5OiAnbnVtYmVyJ1xuICB9O1xuICB2YXIgRGVmYXVsdCQ3ID0ge1xuICAgIGFuaW1hdGlvbjogdHJ1ZSxcbiAgICBhdXRvaGlkZTogdHJ1ZSxcbiAgICBkZWxheTogNTAwXG4gIH07XG4gIHZhciBTZWxlY3RvciRhID0ge1xuICAgIERBVEFfRElTTUlTUzogJ1tkYXRhLWRpc21pc3M9XCJ0b2FzdFwiXSdcbiAgICAvKipcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKiBDbGFzcyBEZWZpbml0aW9uXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICovXG5cbiAgfTtcblxuICB2YXIgVG9hc3QgPVxuICAvKiNfX1BVUkVfXyovXG4gIGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUb2FzdChlbGVtZW50LCBjb25maWcpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgICB0aGlzLl90aW1lb3V0ID0gbnVsbDtcblxuICAgICAgdGhpcy5fc2V0TGlzdGVuZXJzKCk7XG4gICAgfSAvLyBHZXR0ZXJzXG5cblxuICAgIHZhciBfcHJvdG8gPSBUb2FzdC5wcm90b3R5cGU7XG5cbiAgICAvLyBQdWJsaWNcbiAgICBfcHJvdG8uc2hvdyA9IGZ1bmN0aW9uIHNob3coKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoRXZlbnQkYS5TSE9XKTtcblxuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5hbmltYXRpb24pIHtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZSRhLkZBREUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29tcGxldGUgPSBmdW5jdGlvbiBjb21wbGV0ZSgpIHtcbiAgICAgICAgX3RoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDbGFzc05hbWUkYS5TSE9XSU5HKTtcblxuICAgICAgICBfdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZSRhLlNIT1cpO1xuXG4gICAgICAgICQoX3RoaXMuX2VsZW1lbnQpLnRyaWdnZXIoRXZlbnQkYS5TSE9XTik7XG5cbiAgICAgICAgaWYgKF90aGlzLl9jb25maWcuYXV0b2hpZGUpIHtcbiAgICAgICAgICBfdGhpcy5oaWRlKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDbGFzc05hbWUkYS5ISURFKTtcblxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZSRhLlNIT1dJTkcpO1xuXG4gICAgICBpZiAodGhpcy5fY29uZmlnLmFuaW1hdGlvbikge1xuICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgY29tcGxldGUpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uaGlkZSA9IGZ1bmN0aW9uIGhpZGUod2l0aG91dFRpbWVvdXQpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAoIXRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENsYXNzTmFtZSRhLlNIT1cpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgJCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKEV2ZW50JGEuSElERSk7XG5cbiAgICAgIGlmICh3aXRob3V0VGltZW91dCkge1xuICAgICAgICB0aGlzLl9jbG9zZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMi5fY2xvc2UoKTtcbiAgICAgICAgfSwgdGhpcy5fY29uZmlnLmRlbGF5KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuICAgICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGlmICh0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDbGFzc05hbWUkYS5TSE9XKSkge1xuICAgICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ2xhc3NOYW1lJGEuU0hPVyk7XG4gICAgICB9XG5cbiAgICAgICQodGhpcy5fZWxlbWVudCkub2ZmKEV2ZW50JGEuQ0xJQ0tfRElTTUlTUyk7XG4gICAgICAkLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwgREFUQV9LRVkkYSk7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IG51bGw7XG4gICAgfSAvLyBQcml2YXRlXG4gICAgO1xuXG4gICAgX3Byb3RvLl9nZXRDb25maWcgPSBmdW5jdGlvbiBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgICAgY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgRGVmYXVsdCQ3LCAkKHRoaXMuX2VsZW1lbnQpLmRhdGEoKSwgdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiYgY29uZmlnID8gY29uZmlnIDoge30pO1xuICAgICAgVXRpbC50eXBlQ2hlY2tDb25maWcoTkFNRSRhLCBjb25maWcsIHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFR5cGUpO1xuICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9zZXRMaXN0ZW5lcnMgPSBmdW5jdGlvbiBfc2V0TGlzdGVuZXJzKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgICQodGhpcy5fZWxlbWVudCkub24oRXZlbnQkYS5DTElDS19ESVNNSVNTLCBTZWxlY3RvciRhLkRBVEFfRElTTUlTUywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMzLmhpZGUodHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9jbG9zZSA9IGZ1bmN0aW9uIF9jbG9zZSgpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICB2YXIgY29tcGxldGUgPSBmdW5jdGlvbiBjb21wbGV0ZSgpIHtcbiAgICAgICAgX3RoaXM0Ll9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lJGEuSElERSk7XG5cbiAgICAgICAgJChfdGhpczQuX2VsZW1lbnQpLnRyaWdnZXIoRXZlbnQkYS5ISURERU4pO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENsYXNzTmFtZSRhLlNIT1cpO1xuXG4gICAgICBpZiAodGhpcy5fY29uZmlnLmFuaW1hdGlvbikge1xuICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgY29tcGxldGUpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0gLy8gU3RhdGljXG4gICAgO1xuXG4gICAgVG9hc3QuX2pRdWVyeUludGVyZmFjZSA9IGZ1bmN0aW9uIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyICRlbGVtZW50ID0gJCh0aGlzKTtcbiAgICAgICAgdmFyIGRhdGEgPSAkZWxlbWVudC5kYXRhKERBVEFfS0VZJGEpO1xuXG4gICAgICAgIHZhciBfY29uZmlnID0gdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiYgY29uZmlnO1xuXG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgIGRhdGEgPSBuZXcgVG9hc3QodGhpcywgX2NvbmZpZyk7XG4gICAgICAgICAgJGVsZW1lbnQuZGF0YShEQVRBX0tFWSRhLCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIG1ldGhvZCBuYW1lZCBcXFwiXCIgKyBjb25maWcgKyBcIlxcXCJcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YVtjb25maWddKHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX2NyZWF0ZUNsYXNzKFRvYXN0LCBudWxsLCBbe1xuICAgICAga2V5OiBcIlZFUlNJT05cIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gVkVSU0lPTiRhO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJEZWZhdWx0VHlwZVwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBEZWZhdWx0VHlwZSQ3O1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJEZWZhdWx0XCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIERlZmF1bHQkNztcbiAgICAgIH1cbiAgICB9XSk7XG5cbiAgICByZXR1cm4gVG9hc3Q7XG4gIH0oKTtcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBqUXVlcnlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJC5mbltOQU1FJGFdID0gVG9hc3QuX2pRdWVyeUludGVyZmFjZTtcbiAgJC5mbltOQU1FJGFdLkNvbnN0cnVjdG9yID0gVG9hc3Q7XG5cbiAgJC5mbltOQU1FJGFdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbltOQU1FJGFdID0gSlFVRVJZX05PX0NPTkZMSUNUJGE7XG4gICAgcmV0dXJuIFRvYXN0Ll9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCAodjQuMy4xKTogaW5kZXguanNcbiAgICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodHlwZW9mICQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb290c3RyYXBcXCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgalF1ZXJ5LiBqUXVlcnkgbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgQm9vdHN0cmFwXFwncyBKYXZhU2NyaXB0LicpO1xuICAgIH1cblxuICAgIHZhciB2ZXJzaW9uID0gJC5mbi5qcXVlcnkuc3BsaXQoJyAnKVswXS5zcGxpdCgnLicpO1xuICAgIHZhciBtaW5NYWpvciA9IDE7XG4gICAgdmFyIGx0TWFqb3IgPSAyO1xuICAgIHZhciBtaW5NaW5vciA9IDk7XG4gICAgdmFyIG1pblBhdGNoID0gMTtcbiAgICB2YXIgbWF4TWFqb3IgPSA0O1xuXG4gICAgaWYgKHZlcnNpb25bMF0gPCBsdE1ham9yICYmIHZlcnNpb25bMV0gPCBtaW5NaW5vciB8fCB2ZXJzaW9uWzBdID09PSBtaW5NYWpvciAmJiB2ZXJzaW9uWzFdID09PSBtaW5NaW5vciAmJiB2ZXJzaW9uWzJdIDwgbWluUGF0Y2ggfHwgdmVyc2lvblswXSA+PSBtYXhNYWpvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdCb290c3RyYXBcXCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgYXQgbGVhc3QgalF1ZXJ5IHYxLjkuMSBidXQgbGVzcyB0aGFuIHY0LjAuMCcpO1xuICAgIH1cbiAgfSkoKTtcblxuICBleHBvcnRzLlV0aWwgPSBVdGlsO1xuICBleHBvcnRzLkFsZXJ0ID0gQWxlcnQ7XG4gIGV4cG9ydHMuQnV0dG9uID0gQnV0dG9uO1xuICBleHBvcnRzLkNhcm91c2VsID0gQ2Fyb3VzZWw7XG4gIGV4cG9ydHMuQ29sbGFwc2UgPSBDb2xsYXBzZTtcbiAgZXhwb3J0cy5Ecm9wZG93biA9IERyb3Bkb3duO1xuICBleHBvcnRzLk1vZGFsID0gTW9kYWw7XG4gIGV4cG9ydHMuUG9wb3ZlciA9IFBvcG92ZXI7XG4gIGV4cG9ydHMuU2Nyb2xsc3B5ID0gU2Nyb2xsU3B5O1xuICBleHBvcnRzLlRhYiA9IFRhYjtcbiAgZXhwb3J0cy5Ub2FzdCA9IFRvYXN0O1xuICBleHBvcnRzLlRvb2x0aXAgPSBUb29sdGlwO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJvb3RzdHJhcC5qcy5tYXBcbiIsInZhciBtYXRjaGVzID0gcmVxdWlyZSgnbWF0Y2hlcy1zZWxlY3RvcicpXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChlbGVtZW50LCBzZWxlY3RvciwgY2hlY2tZb1NlbGYpIHtcclxuICB2YXIgcGFyZW50ID0gY2hlY2tZb1NlbGYgPyBlbGVtZW50IDogZWxlbWVudC5wYXJlbnROb2RlXHJcblxyXG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50ICE9PSBkb2N1bWVudCkge1xyXG4gICAgaWYgKG1hdGNoZXMocGFyZW50LCBzZWxlY3RvcikpIHJldHVybiBwYXJlbnQ7XHJcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZVxyXG4gIH1cclxufVxyXG4iLCJcclxuLyoqXHJcbiAqIEVsZW1lbnQgcHJvdG90eXBlLlxyXG4gKi9cclxuXHJcbnZhciBwcm90byA9IEVsZW1lbnQucHJvdG90eXBlO1xyXG5cclxuLyoqXHJcbiAqIFZlbmRvciBmdW5jdGlvbi5cclxuICovXHJcblxyXG52YXIgdmVuZG9yID0gcHJvdG8ubWF0Y2hlc1NlbGVjdG9yXHJcbiAgfHwgcHJvdG8ud2Via2l0TWF0Y2hlc1NlbGVjdG9yXHJcbiAgfHwgcHJvdG8ubW96TWF0Y2hlc1NlbGVjdG9yXHJcbiAgfHwgcHJvdG8ubXNNYXRjaGVzU2VsZWN0b3JcclxuICB8fCBwcm90by5vTWF0Y2hlc1NlbGVjdG9yO1xyXG5cclxuLyoqXHJcbiAqIEV4cG9zZSBgbWF0Y2goKWAuXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBtYXRjaDtcclxuXHJcbi8qKlxyXG4gKiBNYXRjaCBgZWxgIHRvIGBzZWxlY3RvcmAuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcclxuICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yXHJcbiAqIEByZXR1cm4ge0Jvb2xlYW59XHJcbiAqIEBhcGkgcHVibGljXHJcbiAqL1xyXG5cclxuZnVuY3Rpb24gbWF0Y2goZWwsIHNlbGVjdG9yKSB7XHJcbiAgaWYgKHZlbmRvcikgcmV0dXJuIHZlbmRvci5jYWxsKGVsLCBzZWxlY3Rvcik7XHJcbiAgdmFyIG5vZGVzID0gZWwucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcclxuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgKytpKSB7XHJcbiAgICBpZiAobm9kZXNbaV0gPT0gZWwpIHJldHVybiB0cnVlO1xyXG4gIH1cclxuICByZXR1cm4gZmFsc2U7XHJcbn0iLCJ2YXIgYmluZCA9IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyID8gJ2FkZEV2ZW50TGlzdGVuZXInIDogJ2F0dGFjaEV2ZW50JyxcbiAgICB1bmJpbmQgPSB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciA/ICdyZW1vdmVFdmVudExpc3RlbmVyJyA6ICdkZXRhY2hFdmVudCcsXG4gICAgcHJlZml4ID0gYmluZCAhPT0gJ2FkZEV2ZW50TGlzdGVuZXInID8gJ29uJyA6ICcnO1xuXG4vKipcbiAqIEJpbmQgYGVsYCBldmVudCBgdHlwZWAgdG8gYGZuYC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gY2FwdHVyZVxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMuYmluZCA9IGZ1bmN0aW9uKGVsLCB0eXBlLCBmbiwgY2FwdHVyZSl7XG4gIGVsW2JpbmRdKHByZWZpeCArIHR5cGUsIGZuLCBjYXB0dXJlIHx8IGZhbHNlKTtcbiAgcmV0dXJuIGZuO1xufTtcblxuLyoqXG4gKiBVbmJpbmQgYGVsYCBldmVudCBgdHlwZWAncyBjYWxsYmFjayBgZm5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtCb29sZWFufSBjYXB0dXJlXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy51bmJpbmQgPSBmdW5jdGlvbihlbCwgdHlwZSwgZm4sIGNhcHR1cmUpe1xuICBlbFt1bmJpbmRdKHByZWZpeCArIHR5cGUsIGZuLCBjYXB0dXJlIHx8IGZhbHNlKTtcbiAgcmV0dXJuIGZuO1xufTsiLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiKShmYWxzZSk7XG4vLyBNb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi8qIVxcbiAqIEJvb3RzdHJhcCB2NC4zLjEgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXFxuICogQ29weXJpZ2h0IDIwMTEtMjAxOSBUaGUgQm9vdHN0cmFwIEF1dGhvcnNcXG4gKiBDb3B5cmlnaHQgMjAxMS0yMDE5IFR3aXR0ZXIsIEluYy5cXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxcbiAqL1xcbjpyb290IHtcXG4gIC0tYmx1ZTogIzAwN2JmZjtcXG4gIC0taW5kaWdvOiAjNjYxMGYyO1xcbiAgLS1wdXJwbGU6ICM2ZjQyYzE7XFxuICAtLXBpbms6ICNlODNlOGM7XFxuICAtLXJlZDogI2RjMzU0NTtcXG4gIC0tb3JhbmdlOiAjZmQ3ZTE0O1xcbiAgLS15ZWxsb3c6ICNmZmMxMDc7XFxuICAtLWdyZWVuOiAjMjhhNzQ1O1xcbiAgLS10ZWFsOiAjMjBjOTk3O1xcbiAgLS1jeWFuOiAjMTdhMmI4O1xcbiAgLS13aGl0ZTogI2ZmZjtcXG4gIC0tZ3JheTogIzZjNzU3ZDtcXG4gIC0tZ3JheS1kYXJrOiAjMzQzYTQwO1xcbiAgLS1wcmltYXJ5OiAjMDA3YmZmO1xcbiAgLS1zZWNvbmRhcnk6ICM2Yzc1N2Q7XFxuICAtLXN1Y2Nlc3M6ICMyOGE3NDU7XFxuICAtLWluZm86ICMxN2EyYjg7XFxuICAtLXdhcm5pbmc6ICNmZmMxMDc7XFxuICAtLWRhbmdlcjogI2RjMzU0NTtcXG4gIC0tbGlnaHQ6ICNmOGY5ZmE7XFxuICAtLWRhcms6ICMzNDNhNDA7XFxuICAtLWJyZWFrcG9pbnQteHM6IDA7XFxuICAtLWJyZWFrcG9pbnQtc206IDU3NnB4O1xcbiAgLS1icmVha3BvaW50LW1kOiA3NjhweDtcXG4gIC0tYnJlYWtwb2ludC1sZzogOTkycHg7XFxuICAtLWJyZWFrcG9pbnQteGw6IDEyMDBweDtcXG4gIC0tZm9udC1mYW1pbHktc2Fucy1zZXJpZjogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcXFwiU2Vnb2UgVUlcXFwiLCBSb2JvdG8sIFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsIEFyaWFsLCBcXFwiTm90byBTYW5zXFxcIiwgc2Fucy1zZXJpZiwgXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIiwgXFxcIlNlZ29lIFVJIEVtb2ppXFxcIiwgXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCIsIFxcXCJOb3RvIENvbG9yIEVtb2ppXFxcIjtcXG4gIC0tZm9udC1mYW1pbHktbW9ub3NwYWNlOiBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFxcXCJMaWJlcmF0aW9uIE1vbm9cXFwiLCBcXFwiQ291cmllciBOZXdcXFwiLCBtb25vc3BhY2U7XFxufVxcblxcbiosXFxuKjo6YmVmb3JlLFxcbio6OmFmdGVyIHtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcblxcbmh0bWwge1xcbiAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7XFxuICBsaW5lLWhlaWdodDogMS4xNTtcXG4gIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcXG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTtcXG59XFxuXFxuYXJ0aWNsZSwgYXNpZGUsIGZpZ2NhcHRpb24sIGZpZ3VyZSwgZm9vdGVyLCBoZWFkZXIsIGhncm91cCwgbWFpbiwgbmF2LCBzZWN0aW9uIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG5ib2R5IHtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFxcXCJTZWdvZSBVSVxcXCIsIFJvYm90bywgXFxcIkhlbHZldGljYSBOZXVlXFxcIiwgQXJpYWwsIFxcXCJOb3RvIFNhbnNcXFwiLCBzYW5zLXNlcmlmLCBcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLCBcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLCBcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIiwgXFxcIk5vdG8gQ29sb3IgRW1vamlcXFwiO1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbn1cXG5cXG5bdGFiaW5kZXg9XFxcIi0xXFxcIl06Zm9jdXMge1xcbiAgb3V0bGluZTogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG5ociB7XFxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcXG4gIGhlaWdodDogMDtcXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xcbn1cXG5cXG5oMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHtcXG4gIG1hcmdpbi10b3A6IDA7XFxuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XFxufVxcblxcbnAge1xcbiAgbWFyZ2luLXRvcDogMDtcXG4gIG1hcmdpbi1ib3R0b206IDFyZW07XFxufVxcblxcbmFiYnJbdGl0bGVdLFxcbmFiYnJbZGF0YS1vcmlnaW5hbC10aXRsZV0ge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICAtd2Via2l0LXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDtcXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDtcXG4gIGN1cnNvcjogaGVscDtcXG4gIGJvcmRlci1ib3R0b206IDA7XFxuICAtd2Via2l0LXRleHQtZGVjb3JhdGlvbi1za2lwLWluazogbm9uZTtcXG4gIHRleHQtZGVjb3JhdGlvbi1za2lwLWluazogbm9uZTtcXG59XFxuXFxuYWRkcmVzcyB7XFxuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxufVxcblxcbm9sLFxcbnVsLFxcbmRsIHtcXG4gIG1hcmdpbi10b3A6IDA7XFxuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xcbn1cXG5cXG5vbCBvbCxcXG51bCB1bCxcXG5vbCB1bCxcXG51bCBvbCB7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbn1cXG5cXG5kdCB7XFxuICBmb250LXdlaWdodDogNzAwO1xcbn1cXG5cXG5kZCB7XFxuICBtYXJnaW4tYm90dG9tOiAuNXJlbTtcXG4gIG1hcmdpbi1sZWZ0OiAwO1xcbn1cXG5cXG5ibG9ja3F1b3RlIHtcXG4gIG1hcmdpbjogMCAwIDFyZW07XFxufVxcblxcbmIsXFxuc3Ryb25nIHtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XFxufVxcblxcbnNtYWxsIHtcXG4gIGZvbnQtc2l6ZTogODAlO1xcbn1cXG5cXG5zdWIsXFxuc3VwIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGZvbnQtc2l6ZTogNzUlO1xcbiAgbGluZS1oZWlnaHQ6IDA7XFxuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XFxufVxcblxcbnN1YiB7XFxuICBib3R0b206IC0uMjVlbTtcXG59XFxuXFxuc3VwIHtcXG4gIHRvcDogLS41ZW07XFxufVxcblxcbmEge1xcbiAgY29sb3I6ICMwMDdiZmY7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuYTpob3ZlciB7XFxuICBjb2xvcjogIzAwNTZiMztcXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbn1cXG5cXG5hOm5vdChbaHJlZl0pOm5vdChbdGFiaW5kZXhdKSB7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuXFxuYTpub3QoW2hyZWZdKTpub3QoW3RhYmluZGV4XSk6aG92ZXIsIGE6bm90KFtocmVmXSk6bm90KFt0YWJpbmRleF0pOmZvY3VzIHtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbn1cXG5cXG5hOm5vdChbaHJlZl0pOm5vdChbdGFiaW5kZXhdKTpmb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbn1cXG5cXG5wcmUsXFxuY29kZSxcXG5rYmQsXFxuc2FtcCB7XFxuICBmb250LWZhbWlseTogU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcXFwiTGliZXJhdGlvbiBNb25vXFxcIiwgXFxcIkNvdXJpZXIgTmV3XFxcIiwgbW9ub3NwYWNlO1xcbiAgZm9udC1zaXplOiAxZW07XFxufVxcblxcbnByZSB7XFxuICBtYXJnaW4tdG9wOiAwO1xcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbn1cXG5cXG5maWd1cmUge1xcbiAgbWFyZ2luOiAwIDAgMXJlbTtcXG59XFxuXFxuaW1nIHtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuICBib3JkZXItc3R5bGU6IG5vbmU7XFxufVxcblxcbnN2ZyB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG59XFxuXFxudGFibGUge1xcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcXG59XFxuXFxuY2FwdGlvbiB7XFxuICBwYWRkaW5nLXRvcDogMC43NXJlbTtcXG4gIHBhZGRpbmctYm90dG9tOiAwLjc1cmVtO1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgY2FwdGlvbi1zaWRlOiBib3R0b207XFxufVxcblxcbnRoIHtcXG4gIHRleHQtYWxpZ246IGluaGVyaXQ7XFxufVxcblxcbmxhYmVsIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcXG59XFxuXFxuYnV0dG9uIHtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxufVxcblxcbmJ1dHRvbjpmb2N1cyB7XFxuICBvdXRsaW5lOiAxcHggZG90dGVkO1xcbiAgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO1xcbn1cXG5cXG5pbnB1dCxcXG5idXR0b24sXFxuc2VsZWN0LFxcbm9wdGdyb3VwLFxcbnRleHRhcmVhIHtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xcbiAgZm9udC1zaXplOiBpbmhlcml0O1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxufVxcblxcbmJ1dHRvbixcXG5pbnB1dCB7XFxuICBvdmVyZmxvdzogdmlzaWJsZTtcXG59XFxuXFxuYnV0dG9uLFxcbnNlbGVjdCB7XFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXG59XFxuXFxuc2VsZWN0IHtcXG4gIHdvcmQtd3JhcDogbm9ybWFsO1xcbn1cXG5cXG5idXR0b24sXFxuW3R5cGU9XFxcImJ1dHRvblxcXCJdLFxcblt0eXBlPVxcXCJyZXNldFxcXCJdLFxcblt0eXBlPVxcXCJzdWJtaXRcXFwiXSB7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjtcXG59XFxuXFxuYnV0dG9uOm5vdCg6ZGlzYWJsZWQpLFxcblt0eXBlPVxcXCJidXR0b25cXFwiXTpub3QoOmRpc2FibGVkKSxcXG5bdHlwZT1cXFwicmVzZXRcXFwiXTpub3QoOmRpc2FibGVkKSxcXG5bdHlwZT1cXFwic3VibWl0XFxcIl06bm90KDpkaXNhYmxlZCkge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG5idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXFxuW3R5cGU9XFxcImJ1dHRvblxcXCJdOjotbW96LWZvY3VzLWlubmVyLFxcblt0eXBlPVxcXCJyZXNldFxcXCJdOjotbW96LWZvY3VzLWlubmVyLFxcblt0eXBlPVxcXCJzdWJtaXRcXFwiXTo6LW1vei1mb2N1cy1pbm5lciB7XFxuICBwYWRkaW5nOiAwO1xcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xcbn1cXG5cXG5pbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdLFxcbmlucHV0W3R5cGU9XFxcImNoZWNrYm94XFxcIl0ge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIHBhZGRpbmc6IDA7XFxufVxcblxcbmlucHV0W3R5cGU9XFxcImRhdGVcXFwiXSxcXG5pbnB1dFt0eXBlPVxcXCJ0aW1lXFxcIl0sXFxuaW5wdXRbdHlwZT1cXFwiZGF0ZXRpbWUtbG9jYWxcXFwiXSxcXG5pbnB1dFt0eXBlPVxcXCJtb250aFxcXCJdIHtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbGlzdGJveDtcXG59XFxuXFxudGV4dGFyZWEge1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxuICByZXNpemU6IHZlcnRpY2FsO1xcbn1cXG5cXG5maWVsZHNldCB7XFxuICBtaW4td2lkdGg6IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgbWFyZ2luOiAwO1xcbiAgYm9yZGVyOiAwO1xcbn1cXG5cXG5sZWdlbmQge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIHBhZGRpbmc6IDA7XFxuICBtYXJnaW4tYm90dG9tOiAuNXJlbTtcXG4gIGZvbnQtc2l6ZTogMS41cmVtO1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XFxufVxcblxcbnByb2dyZXNzIHtcXG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcXG59XFxuXFxuW3R5cGU9XFxcIm51bWJlclxcXCJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxcblt0eXBlPVxcXCJudW1iZXJcXFwiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcblxcblt0eXBlPVxcXCJzZWFyY2hcXFwiXSB7XFxuICBvdXRsaW5lLW9mZnNldDogLTJweDtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuXFxuW3R5cGU9XFxcInNlYXJjaFxcXCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuXFxuOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiB7XFxuICBmb250OiBpbmhlcml0O1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247XFxufVxcblxcbm91dHB1dCB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcblxcbnN1bW1hcnkge1xcbiAgZGlzcGxheTogbGlzdC1pdGVtO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG50ZW1wbGF0ZSB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5cXG5baGlkZGVuXSB7XFxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxufVxcblxcbmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsXFxuLmgxLCAuaDIsIC5oMywgLmg0LCAuaDUsIC5oNiB7XFxuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuMjtcXG59XFxuXFxuaDEsIC5oMSB7XFxuICBmb250LXNpemU6IDIuNXJlbTtcXG59XFxuXFxuaDIsIC5oMiB7XFxuICBmb250LXNpemU6IDJyZW07XFxufVxcblxcbmgzLCAuaDMge1xcbiAgZm9udC1zaXplOiAxLjc1cmVtO1xcbn1cXG5cXG5oNCwgLmg0IHtcXG4gIGZvbnQtc2l6ZTogMS41cmVtO1xcbn1cXG5cXG5oNSwgLmg1IHtcXG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcXG59XFxuXFxuaDYsIC5oNiB7XFxuICBmb250LXNpemU6IDFyZW07XFxufVxcblxcbi5sZWFkIHtcXG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcXG4gIGZvbnQtd2VpZ2h0OiAzMDA7XFxufVxcblxcbi5kaXNwbGF5LTEge1xcbiAgZm9udC1zaXplOiA2cmVtO1xcbiAgZm9udC13ZWlnaHQ6IDMwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjI7XFxufVxcblxcbi5kaXNwbGF5LTIge1xcbiAgZm9udC1zaXplOiA1LjVyZW07XFxuICBmb250LXdlaWdodDogMzAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuMjtcXG59XFxuXFxuLmRpc3BsYXktMyB7XFxuICBmb250LXNpemU6IDQuNXJlbTtcXG4gIGZvbnQtd2VpZ2h0OiAzMDA7XFxuICBsaW5lLWhlaWdodDogMS4yO1xcbn1cXG5cXG4uZGlzcGxheS00IHtcXG4gIGZvbnQtc2l6ZTogMy41cmVtO1xcbiAgZm9udC13ZWlnaHQ6IDMwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjI7XFxufVxcblxcbmhyIHtcXG4gIG1hcmdpbi10b3A6IDFyZW07XFxuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xcbiAgYm9yZGVyOiAwO1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xKTtcXG59XFxuXFxuc21hbGwsXFxuLnNtYWxsIHtcXG4gIGZvbnQtc2l6ZTogODAlO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG59XFxuXFxubWFyayxcXG4ubWFyayB7XFxuICBwYWRkaW5nOiAwLjJlbTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmY2Y4ZTM7XFxufVxcblxcbi5saXN0LXVuc3R5bGVkIHtcXG4gIHBhZGRpbmctbGVmdDogMDtcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XFxufVxcblxcbi5saXN0LWlubGluZSB7XFxuICBwYWRkaW5nLWxlZnQ6IDA7XFxuICBsaXN0LXN0eWxlOiBub25lO1xcbn1cXG5cXG4ubGlzdC1pbmxpbmUtaXRlbSB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcblxcbi5saXN0LWlubGluZS1pdGVtOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgbWFyZ2luLXJpZ2h0OiAwLjVyZW07XFxufVxcblxcbi5pbml0aWFsaXNtIHtcXG4gIGZvbnQtc2l6ZTogOTAlO1xcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcXG59XFxuXFxuLmJsb2NrcXVvdGUge1xcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcXG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcXG59XFxuXFxuLmJsb2NrcXVvdGUtZm9vdGVyIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgZm9udC1zaXplOiA4MCU7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG59XFxuXFxuLmJsb2NrcXVvdGUtZm9vdGVyOjpiZWZvcmUge1xcbiAgY29udGVudDogXFxcIlxcXFwyMDE0XFxcXDAwQTBcXFwiO1xcbn1cXG5cXG4uaW1nLWZsdWlkIHtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIGhlaWdodDogYXV0bztcXG59XFxuXFxuLmltZy10aHVtYm5haWwge1xcbiAgcGFkZGluZzogMC4yNXJlbTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZGVlMmU2O1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIGhlaWdodDogYXV0bztcXG59XFxuXFxuLmZpZ3VyZSB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcblxcbi5maWd1cmUtaW1nIHtcXG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxO1xcbn1cXG5cXG4uZmlndXJlLWNhcHRpb24ge1xcbiAgZm9udC1zaXplOiA5MCU7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG59XFxuXFxuY29kZSB7XFxuICBmb250LXNpemU6IDg3LjUlO1xcbiAgY29sb3I6ICNlODNlOGM7XFxuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xcbn1cXG5cXG5hID4gY29kZSB7XFxuICBjb2xvcjogaW5oZXJpdDtcXG59XFxuXFxua2JkIHtcXG4gIHBhZGRpbmc6IDAuMnJlbSAwLjRyZW07XFxuICBmb250LXNpemU6IDg3LjUlO1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjEyNTI5O1xcbiAgYm9yZGVyLXJhZGl1czogMC4ycmVtO1xcbn1cXG5cXG5rYmQga2JkIHtcXG4gIHBhZGRpbmc6IDA7XFxuICBmb250LXNpemU6IDEwMCU7XFxuICBmb250LXdlaWdodDogNzAwO1xcbn1cXG5cXG5wcmUge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBmb250LXNpemU6IDg3LjUlO1xcbiAgY29sb3I6ICMyMTI1Mjk7XFxufVxcblxcbnByZSBjb2RlIHtcXG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgd29yZC1icmVhazogbm9ybWFsO1xcbn1cXG5cXG4ucHJlLXNjcm9sbGFibGUge1xcbiAgbWF4LWhlaWdodDogMzQwcHg7XFxuICBvdmVyZmxvdy15OiBzY3JvbGw7XFxufVxcblxcbi5jb250YWluZXIge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLmNvbnRhaW5lciB7XFxuICAgIG1heC13aWR0aDogNTQwcHg7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLmNvbnRhaW5lciB7XFxuICAgIG1heC13aWR0aDogNzIwcHg7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xcbiAgLmNvbnRhaW5lciB7XFxuICAgIG1heC13aWR0aDogOTYwcHg7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC5jb250YWluZXIge1xcbiAgICBtYXgtd2lkdGg6IDExNDBweDtcXG4gIH1cXG59XFxuXFxuLmNvbnRhaW5lci1mbHVpZCB7XFxuICB3aWR0aDogMTAwJTtcXG4gIHBhZGRpbmctcmlnaHQ6IDE1cHg7XFxuICBwYWRkaW5nLWxlZnQ6IDE1cHg7XFxuICBtYXJnaW4tcmlnaHQ6IGF1dG87XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG59XFxuXFxuLnJvdyB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgbWFyZ2luLXJpZ2h0OiAtMTVweDtcXG4gIG1hcmdpbi1sZWZ0OiAtMTVweDtcXG59XFxuXFxuLm5vLWd1dHRlcnMge1xcbiAgbWFyZ2luLXJpZ2h0OiAwO1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxufVxcblxcbi5uby1ndXR0ZXJzID4gLmNvbCxcXG4ubm8tZ3V0dGVycyA+IFtjbGFzcyo9XFxcImNvbC1cXFwiXSB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwO1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbn1cXG5cXG4uY29sLTEsIC5jb2wtMiwgLmNvbC0zLCAuY29sLTQsIC5jb2wtNSwgLmNvbC02LCAuY29sLTcsIC5jb2wtOCwgLmNvbC05LCAuY29sLTEwLCAuY29sLTExLCAuY29sLTEyLCAuY29sLFxcbi5jb2wtYXV0bywgLmNvbC1zbS0xLCAuY29sLXNtLTIsIC5jb2wtc20tMywgLmNvbC1zbS00LCAuY29sLXNtLTUsIC5jb2wtc20tNiwgLmNvbC1zbS03LCAuY29sLXNtLTgsIC5jb2wtc20tOSwgLmNvbC1zbS0xMCwgLmNvbC1zbS0xMSwgLmNvbC1zbS0xMiwgLmNvbC1zbSxcXG4uY29sLXNtLWF1dG8sIC5jb2wtbWQtMSwgLmNvbC1tZC0yLCAuY29sLW1kLTMsIC5jb2wtbWQtNCwgLmNvbC1tZC01LCAuY29sLW1kLTYsIC5jb2wtbWQtNywgLmNvbC1tZC04LCAuY29sLW1kLTksIC5jb2wtbWQtMTAsIC5jb2wtbWQtMTEsIC5jb2wtbWQtMTIsIC5jb2wtbWQsXFxuLmNvbC1tZC1hdXRvLCAuY29sLWxnLTEsIC5jb2wtbGctMiwgLmNvbC1sZy0zLCAuY29sLWxnLTQsIC5jb2wtbGctNSwgLmNvbC1sZy02LCAuY29sLWxnLTcsIC5jb2wtbGctOCwgLmNvbC1sZy05LCAuY29sLWxnLTEwLCAuY29sLWxnLTExLCAuY29sLWxnLTEyLCAuY29sLWxnLFxcbi5jb2wtbGctYXV0bywgLmNvbC14bC0xLCAuY29sLXhsLTIsIC5jb2wteGwtMywgLmNvbC14bC00LCAuY29sLXhsLTUsIC5jb2wteGwtNiwgLmNvbC14bC03LCAuY29sLXhsLTgsIC5jb2wteGwtOSwgLmNvbC14bC0xMCwgLmNvbC14bC0xMSwgLmNvbC14bC0xMiwgLmNvbC14bCxcXG4uY29sLXhsLWF1dG8ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xcbn1cXG5cXG4uY29sIHtcXG4gIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiAwO1xcbiAgZmxleC1iYXNpczogMDtcXG4gIC1tcy1mbGV4LXBvc2l0aXZlOiAxO1xcbiAgZmxleC1ncm93OiAxO1xcbiAgbWF4LXdpZHRoOiAxMDAlO1xcbn1cXG5cXG4uY29sLWF1dG8ge1xcbiAgLW1zLWZsZXg6IDAgMCBhdXRvO1xcbiAgZmxleDogMCAwIGF1dG87XFxuICB3aWR0aDogYXV0bztcXG4gIG1heC13aWR0aDogMTAwJTtcXG59XFxuXFxuLmNvbC0xIHtcXG4gIC1tcy1mbGV4OiAwIDAgOC4zMzMzMzMlO1xcbiAgZmxleDogMCAwIDguMzMzMzMzJTtcXG4gIG1heC13aWR0aDogOC4zMzMzMzMlO1xcbn1cXG5cXG4uY29sLTIge1xcbiAgLW1zLWZsZXg6IDAgMCAxNi42NjY2NjclO1xcbiAgZmxleDogMCAwIDE2LjY2NjY2NyU7XFxuICBtYXgtd2lkdGg6IDE2LjY2NjY2NyU7XFxufVxcblxcbi5jb2wtMyB7XFxuICAtbXMtZmxleDogMCAwIDI1JTtcXG4gIGZsZXg6IDAgMCAyNSU7XFxuICBtYXgtd2lkdGg6IDI1JTtcXG59XFxuXFxuLmNvbC00IHtcXG4gIC1tcy1mbGV4OiAwIDAgMzMuMzMzMzMzJTtcXG4gIGZsZXg6IDAgMCAzMy4zMzMzMzMlO1xcbiAgbWF4LXdpZHRoOiAzMy4zMzMzMzMlO1xcbn1cXG5cXG4uY29sLTUge1xcbiAgLW1zLWZsZXg6IDAgMCA0MS42NjY2NjclO1xcbiAgZmxleDogMCAwIDQxLjY2NjY2NyU7XFxuICBtYXgtd2lkdGg6IDQxLjY2NjY2NyU7XFxufVxcblxcbi5jb2wtNiB7XFxuICAtbXMtZmxleDogMCAwIDUwJTtcXG4gIGZsZXg6IDAgMCA1MCU7XFxuICBtYXgtd2lkdGg6IDUwJTtcXG59XFxuXFxuLmNvbC03IHtcXG4gIC1tcy1mbGV4OiAwIDAgNTguMzMzMzMzJTtcXG4gIGZsZXg6IDAgMCA1OC4zMzMzMzMlO1xcbiAgbWF4LXdpZHRoOiA1OC4zMzMzMzMlO1xcbn1cXG5cXG4uY29sLTgge1xcbiAgLW1zLWZsZXg6IDAgMCA2Ni42NjY2NjclO1xcbiAgZmxleDogMCAwIDY2LjY2NjY2NyU7XFxuICBtYXgtd2lkdGg6IDY2LjY2NjY2NyU7XFxufVxcblxcbi5jb2wtOSB7XFxuICAtbXMtZmxleDogMCAwIDc1JTtcXG4gIGZsZXg6IDAgMCA3NSU7XFxuICBtYXgtd2lkdGg6IDc1JTtcXG59XFxuXFxuLmNvbC0xMCB7XFxuICAtbXMtZmxleDogMCAwIDgzLjMzMzMzMyU7XFxuICBmbGV4OiAwIDAgODMuMzMzMzMzJTtcXG4gIG1heC13aWR0aDogODMuMzMzMzMzJTtcXG59XFxuXFxuLmNvbC0xMSB7XFxuICAtbXMtZmxleDogMCAwIDkxLjY2NjY2NyU7XFxuICBmbGV4OiAwIDAgOTEuNjY2NjY3JTtcXG4gIG1heC13aWR0aDogOTEuNjY2NjY3JTtcXG59XFxuXFxuLmNvbC0xMiB7XFxuICAtbXMtZmxleDogMCAwIDEwMCU7XFxuICBmbGV4OiAwIDAgMTAwJTtcXG4gIG1heC13aWR0aDogMTAwJTtcXG59XFxuXFxuLm9yZGVyLWZpcnN0IHtcXG4gIC1tcy1mbGV4LW9yZGVyOiAtMTtcXG4gIG9yZGVyOiAtMTtcXG59XFxuXFxuLm9yZGVyLWxhc3Qge1xcbiAgLW1zLWZsZXgtb3JkZXI6IDEzO1xcbiAgb3JkZXI6IDEzO1xcbn1cXG5cXG4ub3JkZXItMCB7XFxuICAtbXMtZmxleC1vcmRlcjogMDtcXG4gIG9yZGVyOiAwO1xcbn1cXG5cXG4ub3JkZXItMSB7XFxuICAtbXMtZmxleC1vcmRlcjogMTtcXG4gIG9yZGVyOiAxO1xcbn1cXG5cXG4ub3JkZXItMiB7XFxuICAtbXMtZmxleC1vcmRlcjogMjtcXG4gIG9yZGVyOiAyO1xcbn1cXG5cXG4ub3JkZXItMyB7XFxuICAtbXMtZmxleC1vcmRlcjogMztcXG4gIG9yZGVyOiAzO1xcbn1cXG5cXG4ub3JkZXItNCB7XFxuICAtbXMtZmxleC1vcmRlcjogNDtcXG4gIG9yZGVyOiA0O1xcbn1cXG5cXG4ub3JkZXItNSB7XFxuICAtbXMtZmxleC1vcmRlcjogNTtcXG4gIG9yZGVyOiA1O1xcbn1cXG5cXG4ub3JkZXItNiB7XFxuICAtbXMtZmxleC1vcmRlcjogNjtcXG4gIG9yZGVyOiA2O1xcbn1cXG5cXG4ub3JkZXItNyB7XFxuICAtbXMtZmxleC1vcmRlcjogNztcXG4gIG9yZGVyOiA3O1xcbn1cXG5cXG4ub3JkZXItOCB7XFxuICAtbXMtZmxleC1vcmRlcjogODtcXG4gIG9yZGVyOiA4O1xcbn1cXG5cXG4ub3JkZXItOSB7XFxuICAtbXMtZmxleC1vcmRlcjogOTtcXG4gIG9yZGVyOiA5O1xcbn1cXG5cXG4ub3JkZXItMTAge1xcbiAgLW1zLWZsZXgtb3JkZXI6IDEwO1xcbiAgb3JkZXI6IDEwO1xcbn1cXG5cXG4ub3JkZXItMTEge1xcbiAgLW1zLWZsZXgtb3JkZXI6IDExO1xcbiAgb3JkZXI6IDExO1xcbn1cXG5cXG4ub3JkZXItMTIge1xcbiAgLW1zLWZsZXgtb3JkZXI6IDEyO1xcbiAgb3JkZXI6IDEyO1xcbn1cXG5cXG4ub2Zmc2V0LTEge1xcbiAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzJTtcXG59XFxuXFxuLm9mZnNldC0yIHtcXG4gIG1hcmdpbi1sZWZ0OiAxNi42NjY2NjclO1xcbn1cXG5cXG4ub2Zmc2V0LTMge1xcbiAgbWFyZ2luLWxlZnQ6IDI1JTtcXG59XFxuXFxuLm9mZnNldC00IHtcXG4gIG1hcmdpbi1sZWZ0OiAzMy4zMzMzMzMlO1xcbn1cXG5cXG4ub2Zmc2V0LTUge1xcbiAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NyU7XFxufVxcblxcbi5vZmZzZXQtNiB7XFxuICBtYXJnaW4tbGVmdDogNTAlO1xcbn1cXG5cXG4ub2Zmc2V0LTcge1xcbiAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzMyU7XFxufVxcblxcbi5vZmZzZXQtOCB7XFxuICBtYXJnaW4tbGVmdDogNjYuNjY2NjY3JTtcXG59XFxuXFxuLm9mZnNldC05IHtcXG4gIG1hcmdpbi1sZWZ0OiA3NSU7XFxufVxcblxcbi5vZmZzZXQtMTAge1xcbiAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMyU7XFxufVxcblxcbi5vZmZzZXQtMTEge1xcbiAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY2NyU7XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLmNvbC1zbSB7XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiAwO1xcbiAgICBmbGV4LWJhc2lzOiAwO1xcbiAgICAtbXMtZmxleC1wb3NpdGl2ZTogMTtcXG4gICAgZmxleC1ncm93OiAxO1xcbiAgICBtYXgtd2lkdGg6IDEwMCU7XFxuICB9XFxuICAuY29sLXNtLWF1dG8ge1xcbiAgICAtbXMtZmxleDogMCAwIGF1dG87XFxuICAgIGZsZXg6IDAgMCBhdXRvO1xcbiAgICB3aWR0aDogYXV0bztcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLmNvbC1zbS0xIHtcXG4gICAgLW1zLWZsZXg6IDAgMCA4LjMzMzMzMyU7XFxuICAgIGZsZXg6IDAgMCA4LjMzMzMzMyU7XFxuICAgIG1heC13aWR0aDogOC4zMzMzMzMlO1xcbiAgfVxcbiAgLmNvbC1zbS0yIHtcXG4gICAgLW1zLWZsZXg6IDAgMCAxNi42NjY2NjclO1xcbiAgICBmbGV4OiAwIDAgMTYuNjY2NjY3JTtcXG4gICAgbWF4LXdpZHRoOiAxNi42NjY2NjclO1xcbiAgfVxcbiAgLmNvbC1zbS0zIHtcXG4gICAgLW1zLWZsZXg6IDAgMCAyNSU7XFxuICAgIGZsZXg6IDAgMCAyNSU7XFxuICAgIG1heC13aWR0aDogMjUlO1xcbiAgfVxcbiAgLmNvbC1zbS00IHtcXG4gICAgLW1zLWZsZXg6IDAgMCAzMy4zMzMzMzMlO1xcbiAgICBmbGV4OiAwIDAgMzMuMzMzMzMzJTtcXG4gICAgbWF4LXdpZHRoOiAzMy4zMzMzMzMlO1xcbiAgfVxcbiAgLmNvbC1zbS01IHtcXG4gICAgLW1zLWZsZXg6IDAgMCA0MS42NjY2NjclO1xcbiAgICBmbGV4OiAwIDAgNDEuNjY2NjY3JTtcXG4gICAgbWF4LXdpZHRoOiA0MS42NjY2NjclO1xcbiAgfVxcbiAgLmNvbC1zbS02IHtcXG4gICAgLW1zLWZsZXg6IDAgMCA1MCU7XFxuICAgIGZsZXg6IDAgMCA1MCU7XFxuICAgIG1heC13aWR0aDogNTAlO1xcbiAgfVxcbiAgLmNvbC1zbS03IHtcXG4gICAgLW1zLWZsZXg6IDAgMCA1OC4zMzMzMzMlO1xcbiAgICBmbGV4OiAwIDAgNTguMzMzMzMzJTtcXG4gICAgbWF4LXdpZHRoOiA1OC4zMzMzMzMlO1xcbiAgfVxcbiAgLmNvbC1zbS04IHtcXG4gICAgLW1zLWZsZXg6IDAgMCA2Ni42NjY2NjclO1xcbiAgICBmbGV4OiAwIDAgNjYuNjY2NjY3JTtcXG4gICAgbWF4LXdpZHRoOiA2Ni42NjY2NjclO1xcbiAgfVxcbiAgLmNvbC1zbS05IHtcXG4gICAgLW1zLWZsZXg6IDAgMCA3NSU7XFxuICAgIGZsZXg6IDAgMCA3NSU7XFxuICAgIG1heC13aWR0aDogNzUlO1xcbiAgfVxcbiAgLmNvbC1zbS0xMCB7XFxuICAgIC1tcy1mbGV4OiAwIDAgODMuMzMzMzMzJTtcXG4gICAgZmxleDogMCAwIDgzLjMzMzMzMyU7XFxuICAgIG1heC13aWR0aDogODMuMzMzMzMzJTtcXG4gIH1cXG4gIC5jb2wtc20tMTEge1xcbiAgICAtbXMtZmxleDogMCAwIDkxLjY2NjY2NyU7XFxuICAgIGZsZXg6IDAgMCA5MS42NjY2NjclO1xcbiAgICBtYXgtd2lkdGg6IDkxLjY2NjY2NyU7XFxuICB9XFxuICAuY29sLXNtLTEyIHtcXG4gICAgLW1zLWZsZXg6IDAgMCAxMDAlO1xcbiAgICBmbGV4OiAwIDAgMTAwJTtcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLm9yZGVyLXNtLWZpcnN0IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IC0xO1xcbiAgICBvcmRlcjogLTE7XFxuICB9XFxuICAub3JkZXItc20tbGFzdCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAxMztcXG4gICAgb3JkZXI6IDEzO1xcbiAgfVxcbiAgLm9yZGVyLXNtLTAge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMDtcXG4gICAgb3JkZXI6IDA7XFxuICB9XFxuICAub3JkZXItc20tMSB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAxO1xcbiAgICBvcmRlcjogMTtcXG4gIH1cXG4gIC5vcmRlci1zbS0yIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDI7XFxuICAgIG9yZGVyOiAyO1xcbiAgfVxcbiAgLm9yZGVyLXNtLTMge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMztcXG4gICAgb3JkZXI6IDM7XFxuICB9XFxuICAub3JkZXItc20tNCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA0O1xcbiAgICBvcmRlcjogNDtcXG4gIH1cXG4gIC5vcmRlci1zbS01IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDU7XFxuICAgIG9yZGVyOiA1O1xcbiAgfVxcbiAgLm9yZGVyLXNtLTYge1xcbiAgICAtbXMtZmxleC1vcmRlcjogNjtcXG4gICAgb3JkZXI6IDY7XFxuICB9XFxuICAub3JkZXItc20tNyB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA3O1xcbiAgICBvcmRlcjogNztcXG4gIH1cXG4gIC5vcmRlci1zbS04IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDg7XFxuICAgIG9yZGVyOiA4O1xcbiAgfVxcbiAgLm9yZGVyLXNtLTkge1xcbiAgICAtbXMtZmxleC1vcmRlcjogOTtcXG4gICAgb3JkZXI6IDk7XFxuICB9XFxuICAub3JkZXItc20tMTAge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTA7XFxuICAgIG9yZGVyOiAxMDtcXG4gIH1cXG4gIC5vcmRlci1zbS0xMSB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAxMTtcXG4gICAgb3JkZXI6IDExO1xcbiAgfVxcbiAgLm9yZGVyLXNtLTEyIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDEyO1xcbiAgICBvcmRlcjogMTI7XFxuICB9XFxuICAub2Zmc2V0LXNtLTAge1xcbiAgICBtYXJnaW4tbGVmdDogMDtcXG4gIH1cXG4gIC5vZmZzZXQtc20tMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA4LjMzMzMzMyU7XFxuICB9XFxuICAub2Zmc2V0LXNtLTIge1xcbiAgICBtYXJnaW4tbGVmdDogMTYuNjY2NjY3JTtcXG4gIH1cXG4gIC5vZmZzZXQtc20tMyB7XFxuICAgIG1hcmdpbi1sZWZ0OiAyNSU7XFxuICB9XFxuICAub2Zmc2V0LXNtLTQge1xcbiAgICBtYXJnaW4tbGVmdDogMzMuMzMzMzMzJTtcXG4gIH1cXG4gIC5vZmZzZXQtc20tNSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY2NjclO1xcbiAgfVxcbiAgLm9mZnNldC1zbS02IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDUwJTtcXG4gIH1cXG4gIC5vZmZzZXQtc20tNyB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzMzMlO1xcbiAgfVxcbiAgLm9mZnNldC1zbS04IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDY2LjY2NjY2NyU7XFxuICB9XFxuICAub2Zmc2V0LXNtLTkge1xcbiAgICBtYXJnaW4tbGVmdDogNzUlO1xcbiAgfVxcbiAgLm9mZnNldC1zbS0xMCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA4My4zMzMzMzMlO1xcbiAgfVxcbiAgLm9mZnNldC1zbS0xMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY2NjclO1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gIC5jb2wtbWQge1xcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMDtcXG4gICAgZmxleC1iYXNpczogMDtcXG4gICAgLW1zLWZsZXgtcG9zaXRpdmU6IDE7XFxuICAgIGZsZXgtZ3JvdzogMTtcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLmNvbC1tZC1hdXRvIHtcXG4gICAgLW1zLWZsZXg6IDAgMCBhdXRvO1xcbiAgICBmbGV4OiAwIDAgYXV0bztcXG4gICAgd2lkdGg6IGF1dG87XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5jb2wtbWQtMSB7XFxuICAgIC1tcy1mbGV4OiAwIDAgOC4zMzMzMzMlO1xcbiAgICBmbGV4OiAwIDAgOC4zMzMzMzMlO1xcbiAgICBtYXgtd2lkdGg6IDguMzMzMzMzJTtcXG4gIH1cXG4gIC5jb2wtbWQtMiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMTYuNjY2NjY3JTtcXG4gICAgZmxleDogMCAwIDE2LjY2NjY2NyU7XFxuICAgIG1heC13aWR0aDogMTYuNjY2NjY3JTtcXG4gIH1cXG4gIC5jb2wtbWQtMyB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMjUlO1xcbiAgICBmbGV4OiAwIDAgMjUlO1xcbiAgICBtYXgtd2lkdGg6IDI1JTtcXG4gIH1cXG4gIC5jb2wtbWQtNCB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMzMuMzMzMzMzJTtcXG4gICAgZmxleDogMCAwIDMzLjMzMzMzMyU7XFxuICAgIG1heC13aWR0aDogMzMuMzMzMzMzJTtcXG4gIH1cXG4gIC5jb2wtbWQtNSB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNDEuNjY2NjY3JTtcXG4gICAgZmxleDogMCAwIDQxLjY2NjY2NyU7XFxuICAgIG1heC13aWR0aDogNDEuNjY2NjY3JTtcXG4gIH1cXG4gIC5jb2wtbWQtNiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNTAlO1xcbiAgICBmbGV4OiAwIDAgNTAlO1xcbiAgICBtYXgtd2lkdGg6IDUwJTtcXG4gIH1cXG4gIC5jb2wtbWQtNyB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNTguMzMzMzMzJTtcXG4gICAgZmxleDogMCAwIDU4LjMzMzMzMyU7XFxuICAgIG1heC13aWR0aDogNTguMzMzMzMzJTtcXG4gIH1cXG4gIC5jb2wtbWQtOCB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNjYuNjY2NjY3JTtcXG4gICAgZmxleDogMCAwIDY2LjY2NjY2NyU7XFxuICAgIG1heC13aWR0aDogNjYuNjY2NjY3JTtcXG4gIH1cXG4gIC5jb2wtbWQtOSB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNzUlO1xcbiAgICBmbGV4OiAwIDAgNzUlO1xcbiAgICBtYXgtd2lkdGg6IDc1JTtcXG4gIH1cXG4gIC5jb2wtbWQtMTAge1xcbiAgICAtbXMtZmxleDogMCAwIDgzLjMzMzMzMyU7XFxuICAgIGZsZXg6IDAgMCA4My4zMzMzMzMlO1xcbiAgICBtYXgtd2lkdGg6IDgzLjMzMzMzMyU7XFxuICB9XFxuICAuY29sLW1kLTExIHtcXG4gICAgLW1zLWZsZXg6IDAgMCA5MS42NjY2NjclO1xcbiAgICBmbGV4OiAwIDAgOTEuNjY2NjY3JTtcXG4gICAgbWF4LXdpZHRoOiA5MS42NjY2NjclO1xcbiAgfVxcbiAgLmNvbC1tZC0xMiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMTAwJTtcXG4gICAgZmxleDogMCAwIDEwMCU7XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5vcmRlci1tZC1maXJzdCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAtMTtcXG4gICAgb3JkZXI6IC0xO1xcbiAgfVxcbiAgLm9yZGVyLW1kLWxhc3Qge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTM7XFxuICAgIG9yZGVyOiAxMztcXG4gIH1cXG4gIC5vcmRlci1tZC0wIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDA7XFxuICAgIG9yZGVyOiAwO1xcbiAgfVxcbiAgLm9yZGVyLW1kLTEge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTtcXG4gICAgb3JkZXI6IDE7XFxuICB9XFxuICAub3JkZXItbWQtMiB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAyO1xcbiAgICBvcmRlcjogMjtcXG4gIH1cXG4gIC5vcmRlci1tZC0zIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDM7XFxuICAgIG9yZGVyOiAzO1xcbiAgfVxcbiAgLm9yZGVyLW1kLTQge1xcbiAgICAtbXMtZmxleC1vcmRlcjogNDtcXG4gICAgb3JkZXI6IDQ7XFxuICB9XFxuICAub3JkZXItbWQtNSB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA1O1xcbiAgICBvcmRlcjogNTtcXG4gIH1cXG4gIC5vcmRlci1tZC02IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDY7XFxuICAgIG9yZGVyOiA2O1xcbiAgfVxcbiAgLm9yZGVyLW1kLTcge1xcbiAgICAtbXMtZmxleC1vcmRlcjogNztcXG4gICAgb3JkZXI6IDc7XFxuICB9XFxuICAub3JkZXItbWQtOCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA4O1xcbiAgICBvcmRlcjogODtcXG4gIH1cXG4gIC5vcmRlci1tZC05IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDk7XFxuICAgIG9yZGVyOiA5O1xcbiAgfVxcbiAgLm9yZGVyLW1kLTEwIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDEwO1xcbiAgICBvcmRlcjogMTA7XFxuICB9XFxuICAub3JkZXItbWQtMTEge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTE7XFxuICAgIG9yZGVyOiAxMTtcXG4gIH1cXG4gIC5vcmRlci1tZC0xMiB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAxMjtcXG4gICAgb3JkZXI6IDEyO1xcbiAgfVxcbiAgLm9mZnNldC1tZC0wIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDA7XFxuICB9XFxuICAub2Zmc2V0LW1kLTEge1xcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzMzMlO1xcbiAgfVxcbiAgLm9mZnNldC1tZC0yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY2NyU7XFxuICB9XFxuICAub2Zmc2V0LW1kLTMge1xcbiAgICBtYXJnaW4tbGVmdDogMjUlO1xcbiAgfVxcbiAgLm9mZnNldC1tZC00IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzMyU7XFxuICB9XFxuICAub2Zmc2V0LW1kLTUge1xcbiAgICBtYXJnaW4tbGVmdDogNDEuNjY2NjY3JTtcXG4gIH1cXG4gIC5vZmZzZXQtbWQtNiB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1MCU7XFxuICB9XFxuICAub2Zmc2V0LW1kLTcge1xcbiAgICBtYXJnaW4tbGVmdDogNTguMzMzMzMzJTtcXG4gIH1cXG4gIC5vZmZzZXQtbWQtOCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NjclO1xcbiAgfVxcbiAgLm9mZnNldC1tZC05IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDc1JTtcXG4gIH1cXG4gIC5vZmZzZXQtbWQtMTAge1xcbiAgICBtYXJnaW4tbGVmdDogODMuMzMzMzMzJTtcXG4gIH1cXG4gIC5vZmZzZXQtbWQtMTEge1xcbiAgICBtYXJnaW4tbGVmdDogOTEuNjY2NjY3JTtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XFxuICAuY29sLWxnIHtcXG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDA7XFxuICAgIGZsZXgtYmFzaXM6IDA7XFxuICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAxO1xcbiAgICBmbGV4LWdyb3c6IDE7XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5jb2wtbGctYXV0byB7XFxuICAgIC1tcy1mbGV4OiAwIDAgYXV0bztcXG4gICAgZmxleDogMCAwIGF1dG87XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgICBtYXgtd2lkdGg6IDEwMCU7XFxuICB9XFxuICAuY29sLWxnLTEge1xcbiAgICAtbXMtZmxleDogMCAwIDguMzMzMzMzJTtcXG4gICAgZmxleDogMCAwIDguMzMzMzMzJTtcXG4gICAgbWF4LXdpZHRoOiA4LjMzMzMzMyU7XFxuICB9XFxuICAuY29sLWxnLTIge1xcbiAgICAtbXMtZmxleDogMCAwIDE2LjY2NjY2NyU7XFxuICAgIGZsZXg6IDAgMCAxNi42NjY2NjclO1xcbiAgICBtYXgtd2lkdGg6IDE2LjY2NjY2NyU7XFxuICB9XFxuICAuY29sLWxnLTMge1xcbiAgICAtbXMtZmxleDogMCAwIDI1JTtcXG4gICAgZmxleDogMCAwIDI1JTtcXG4gICAgbWF4LXdpZHRoOiAyNSU7XFxuICB9XFxuICAuY29sLWxnLTQge1xcbiAgICAtbXMtZmxleDogMCAwIDMzLjMzMzMzMyU7XFxuICAgIGZsZXg6IDAgMCAzMy4zMzMzMzMlO1xcbiAgICBtYXgtd2lkdGg6IDMzLjMzMzMzMyU7XFxuICB9XFxuICAuY29sLWxnLTUge1xcbiAgICAtbXMtZmxleDogMCAwIDQxLjY2NjY2NyU7XFxuICAgIGZsZXg6IDAgMCA0MS42NjY2NjclO1xcbiAgICBtYXgtd2lkdGg6IDQxLjY2NjY2NyU7XFxuICB9XFxuICAuY29sLWxnLTYge1xcbiAgICAtbXMtZmxleDogMCAwIDUwJTtcXG4gICAgZmxleDogMCAwIDUwJTtcXG4gICAgbWF4LXdpZHRoOiA1MCU7XFxuICB9XFxuICAuY29sLWxnLTcge1xcbiAgICAtbXMtZmxleDogMCAwIDU4LjMzMzMzMyU7XFxuICAgIGZsZXg6IDAgMCA1OC4zMzMzMzMlO1xcbiAgICBtYXgtd2lkdGg6IDU4LjMzMzMzMyU7XFxuICB9XFxuICAuY29sLWxnLTgge1xcbiAgICAtbXMtZmxleDogMCAwIDY2LjY2NjY2NyU7XFxuICAgIGZsZXg6IDAgMCA2Ni42NjY2NjclO1xcbiAgICBtYXgtd2lkdGg6IDY2LjY2NjY2NyU7XFxuICB9XFxuICAuY29sLWxnLTkge1xcbiAgICAtbXMtZmxleDogMCAwIDc1JTtcXG4gICAgZmxleDogMCAwIDc1JTtcXG4gICAgbWF4LXdpZHRoOiA3NSU7XFxuICB9XFxuICAuY29sLWxnLTEwIHtcXG4gICAgLW1zLWZsZXg6IDAgMCA4My4zMzMzMzMlO1xcbiAgICBmbGV4OiAwIDAgODMuMzMzMzMzJTtcXG4gICAgbWF4LXdpZHRoOiA4My4zMzMzMzMlO1xcbiAgfVxcbiAgLmNvbC1sZy0xMSB7XFxuICAgIC1tcy1mbGV4OiAwIDAgOTEuNjY2NjY3JTtcXG4gICAgZmxleDogMCAwIDkxLjY2NjY2NyU7XFxuICAgIG1heC13aWR0aDogOTEuNjY2NjY3JTtcXG4gIH1cXG4gIC5jb2wtbGctMTIge1xcbiAgICAtbXMtZmxleDogMCAwIDEwMCU7XFxuICAgIGZsZXg6IDAgMCAxMDAlO1xcbiAgICBtYXgtd2lkdGg6IDEwMCU7XFxuICB9XFxuICAub3JkZXItbGctZmlyc3Qge1xcbiAgICAtbXMtZmxleC1vcmRlcjogLTE7XFxuICAgIG9yZGVyOiAtMTtcXG4gIH1cXG4gIC5vcmRlci1sZy1sYXN0IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDEzO1xcbiAgICBvcmRlcjogMTM7XFxuICB9XFxuICAub3JkZXItbGctMCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAwO1xcbiAgICBvcmRlcjogMDtcXG4gIH1cXG4gIC5vcmRlci1sZy0xIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDE7XFxuICAgIG9yZGVyOiAxO1xcbiAgfVxcbiAgLm9yZGVyLWxnLTIge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMjtcXG4gICAgb3JkZXI6IDI7XFxuICB9XFxuICAub3JkZXItbGctMyB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAzO1xcbiAgICBvcmRlcjogMztcXG4gIH1cXG4gIC5vcmRlci1sZy00IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDQ7XFxuICAgIG9yZGVyOiA0O1xcbiAgfVxcbiAgLm9yZGVyLWxnLTUge1xcbiAgICAtbXMtZmxleC1vcmRlcjogNTtcXG4gICAgb3JkZXI6IDU7XFxuICB9XFxuICAub3JkZXItbGctNiB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA2O1xcbiAgICBvcmRlcjogNjtcXG4gIH1cXG4gIC5vcmRlci1sZy03IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDc7XFxuICAgIG9yZGVyOiA3O1xcbiAgfVxcbiAgLm9yZGVyLWxnLTgge1xcbiAgICAtbXMtZmxleC1vcmRlcjogODtcXG4gICAgb3JkZXI6IDg7XFxuICB9XFxuICAub3JkZXItbGctOSB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA5O1xcbiAgICBvcmRlcjogOTtcXG4gIH1cXG4gIC5vcmRlci1sZy0xMCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAxMDtcXG4gICAgb3JkZXI6IDEwO1xcbiAgfVxcbiAgLm9yZGVyLWxnLTExIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDExO1xcbiAgICBvcmRlcjogMTE7XFxuICB9XFxuICAub3JkZXItbGctMTIge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTI7XFxuICAgIG9yZGVyOiAxMjtcXG4gIH1cXG4gIC5vZmZzZXQtbGctMCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAwO1xcbiAgfVxcbiAgLm9mZnNldC1sZy0xIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzJTtcXG4gIH1cXG4gIC5vZmZzZXQtbGctMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY2NjclO1xcbiAgfVxcbiAgLm9mZnNldC1sZy0zIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDI1JTtcXG4gIH1cXG4gIC5vZmZzZXQtbGctNCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAzMy4zMzMzMzMlO1xcbiAgfVxcbiAgLm9mZnNldC1sZy01IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NyU7XFxuICB9XFxuICAub2Zmc2V0LWxnLTYge1xcbiAgICBtYXJnaW4tbGVmdDogNTAlO1xcbiAgfVxcbiAgLm9mZnNldC1sZy03IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzMyU7XFxuICB9XFxuICAub2Zmc2V0LWxnLTgge1xcbiAgICBtYXJnaW4tbGVmdDogNjYuNjY2NjY3JTtcXG4gIH1cXG4gIC5vZmZzZXQtbGctOSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA3NSU7XFxuICB9XFxuICAub2Zmc2V0LWxnLTEwIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMyU7XFxuICB9XFxuICAub2Zmc2V0LWxnLTExIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY2NyU7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC5jb2wteGwge1xcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMDtcXG4gICAgZmxleC1iYXNpczogMDtcXG4gICAgLW1zLWZsZXgtcG9zaXRpdmU6IDE7XFxuICAgIGZsZXgtZ3JvdzogMTtcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLmNvbC14bC1hdXRvIHtcXG4gICAgLW1zLWZsZXg6IDAgMCBhdXRvO1xcbiAgICBmbGV4OiAwIDAgYXV0bztcXG4gICAgd2lkdGg6IGF1dG87XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5jb2wteGwtMSB7XFxuICAgIC1tcy1mbGV4OiAwIDAgOC4zMzMzMzMlO1xcbiAgICBmbGV4OiAwIDAgOC4zMzMzMzMlO1xcbiAgICBtYXgtd2lkdGg6IDguMzMzMzMzJTtcXG4gIH1cXG4gIC5jb2wteGwtMiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMTYuNjY2NjY3JTtcXG4gICAgZmxleDogMCAwIDE2LjY2NjY2NyU7XFxuICAgIG1heC13aWR0aDogMTYuNjY2NjY3JTtcXG4gIH1cXG4gIC5jb2wteGwtMyB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMjUlO1xcbiAgICBmbGV4OiAwIDAgMjUlO1xcbiAgICBtYXgtd2lkdGg6IDI1JTtcXG4gIH1cXG4gIC5jb2wteGwtNCB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMzMuMzMzMzMzJTtcXG4gICAgZmxleDogMCAwIDMzLjMzMzMzMyU7XFxuICAgIG1heC13aWR0aDogMzMuMzMzMzMzJTtcXG4gIH1cXG4gIC5jb2wteGwtNSB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNDEuNjY2NjY3JTtcXG4gICAgZmxleDogMCAwIDQxLjY2NjY2NyU7XFxuICAgIG1heC13aWR0aDogNDEuNjY2NjY3JTtcXG4gIH1cXG4gIC5jb2wteGwtNiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNTAlO1xcbiAgICBmbGV4OiAwIDAgNTAlO1xcbiAgICBtYXgtd2lkdGg6IDUwJTtcXG4gIH1cXG4gIC5jb2wteGwtNyB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNTguMzMzMzMzJTtcXG4gICAgZmxleDogMCAwIDU4LjMzMzMzMyU7XFxuICAgIG1heC13aWR0aDogNTguMzMzMzMzJTtcXG4gIH1cXG4gIC5jb2wteGwtOCB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNjYuNjY2NjY3JTtcXG4gICAgZmxleDogMCAwIDY2LjY2NjY2NyU7XFxuICAgIG1heC13aWR0aDogNjYuNjY2NjY3JTtcXG4gIH1cXG4gIC5jb2wteGwtOSB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNzUlO1xcbiAgICBmbGV4OiAwIDAgNzUlO1xcbiAgICBtYXgtd2lkdGg6IDc1JTtcXG4gIH1cXG4gIC5jb2wteGwtMTAge1xcbiAgICAtbXMtZmxleDogMCAwIDgzLjMzMzMzMyU7XFxuICAgIGZsZXg6IDAgMCA4My4zMzMzMzMlO1xcbiAgICBtYXgtd2lkdGg6IDgzLjMzMzMzMyU7XFxuICB9XFxuICAuY29sLXhsLTExIHtcXG4gICAgLW1zLWZsZXg6IDAgMCA5MS42NjY2NjclO1xcbiAgICBmbGV4OiAwIDAgOTEuNjY2NjY3JTtcXG4gICAgbWF4LXdpZHRoOiA5MS42NjY2NjclO1xcbiAgfVxcbiAgLmNvbC14bC0xMiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMTAwJTtcXG4gICAgZmxleDogMCAwIDEwMCU7XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5vcmRlci14bC1maXJzdCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAtMTtcXG4gICAgb3JkZXI6IC0xO1xcbiAgfVxcbiAgLm9yZGVyLXhsLWxhc3Qge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTM7XFxuICAgIG9yZGVyOiAxMztcXG4gIH1cXG4gIC5vcmRlci14bC0wIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDA7XFxuICAgIG9yZGVyOiAwO1xcbiAgfVxcbiAgLm9yZGVyLXhsLTEge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTtcXG4gICAgb3JkZXI6IDE7XFxuICB9XFxuICAub3JkZXIteGwtMiB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAyO1xcbiAgICBvcmRlcjogMjtcXG4gIH1cXG4gIC5vcmRlci14bC0zIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDM7XFxuICAgIG9yZGVyOiAzO1xcbiAgfVxcbiAgLm9yZGVyLXhsLTQge1xcbiAgICAtbXMtZmxleC1vcmRlcjogNDtcXG4gICAgb3JkZXI6IDQ7XFxuICB9XFxuICAub3JkZXIteGwtNSB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA1O1xcbiAgICBvcmRlcjogNTtcXG4gIH1cXG4gIC5vcmRlci14bC02IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDY7XFxuICAgIG9yZGVyOiA2O1xcbiAgfVxcbiAgLm9yZGVyLXhsLTcge1xcbiAgICAtbXMtZmxleC1vcmRlcjogNztcXG4gICAgb3JkZXI6IDc7XFxuICB9XFxuICAub3JkZXIteGwtOCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA4O1xcbiAgICBvcmRlcjogODtcXG4gIH1cXG4gIC5vcmRlci14bC05IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDk7XFxuICAgIG9yZGVyOiA5O1xcbiAgfVxcbiAgLm9yZGVyLXhsLTEwIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDEwO1xcbiAgICBvcmRlcjogMTA7XFxuICB9XFxuICAub3JkZXIteGwtMTEge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTE7XFxuICAgIG9yZGVyOiAxMTtcXG4gIH1cXG4gIC5vcmRlci14bC0xMiB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAxMjtcXG4gICAgb3JkZXI6IDEyO1xcbiAgfVxcbiAgLm9mZnNldC14bC0wIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDA7XFxuICB9XFxuICAub2Zmc2V0LXhsLTEge1xcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzMzMlO1xcbiAgfVxcbiAgLm9mZnNldC14bC0yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY2NyU7XFxuICB9XFxuICAub2Zmc2V0LXhsLTMge1xcbiAgICBtYXJnaW4tbGVmdDogMjUlO1xcbiAgfVxcbiAgLm9mZnNldC14bC00IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzMyU7XFxuICB9XFxuICAub2Zmc2V0LXhsLTUge1xcbiAgICBtYXJnaW4tbGVmdDogNDEuNjY2NjY3JTtcXG4gIH1cXG4gIC5vZmZzZXQteGwtNiB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1MCU7XFxuICB9XFxuICAub2Zmc2V0LXhsLTcge1xcbiAgICBtYXJnaW4tbGVmdDogNTguMzMzMzMzJTtcXG4gIH1cXG4gIC5vZmZzZXQteGwtOCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NjclO1xcbiAgfVxcbiAgLm9mZnNldC14bC05IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDc1JTtcXG4gIH1cXG4gIC5vZmZzZXQteGwtMTAge1xcbiAgICBtYXJnaW4tbGVmdDogODMuMzMzMzMzJTtcXG4gIH1cXG4gIC5vZmZzZXQteGwtMTEge1xcbiAgICBtYXJnaW4tbGVmdDogOTEuNjY2NjY3JTtcXG4gIH1cXG59XFxuXFxuLnRhYmxlIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbn1cXG5cXG4udGFibGUgdGgsXFxuLnRhYmxlIHRkIHtcXG4gIHBhZGRpbmc6IDAuNzVyZW07XFxuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZWUyZTY7XFxufVxcblxcbi50YWJsZSB0aGVhZCB0aCB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xcbiAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNkZWUyZTY7XFxufVxcblxcbi50YWJsZSB0Ym9keSArIHRib2R5IHtcXG4gIGJvcmRlci10b3A6IDJweCBzb2xpZCAjZGVlMmU2O1xcbn1cXG5cXG4udGFibGUtc20gdGgsXFxuLnRhYmxlLXNtIHRkIHtcXG4gIHBhZGRpbmc6IDAuM3JlbTtcXG59XFxuXFxuLnRhYmxlLWJvcmRlcmVkIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZWUyZTY7XFxufVxcblxcbi50YWJsZS1ib3JkZXJlZCB0aCxcXG4udGFibGUtYm9yZGVyZWQgdGQge1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2RlZTJlNjtcXG59XFxuXFxuLnRhYmxlLWJvcmRlcmVkIHRoZWFkIHRoLFxcbi50YWJsZS1ib3JkZXJlZCB0aGVhZCB0ZCB7XFxuICBib3JkZXItYm90dG9tLXdpZHRoOiAycHg7XFxufVxcblxcbi50YWJsZS1ib3JkZXJsZXNzIHRoLFxcbi50YWJsZS1ib3JkZXJsZXNzIHRkLFxcbi50YWJsZS1ib3JkZXJsZXNzIHRoZWFkIHRoLFxcbi50YWJsZS1ib3JkZXJsZXNzIHRib2R5ICsgdGJvZHkge1xcbiAgYm9yZGVyOiAwO1xcbn1cXG5cXG4udGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZShvZGQpIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XFxufVxcblxcbi50YWJsZS1ob3ZlciB0Ym9keSB0cjpob3ZlciB7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNzUpO1xcbn1cXG5cXG4udGFibGUtcHJpbWFyeSxcXG4udGFibGUtcHJpbWFyeSA+IHRoLFxcbi50YWJsZS1wcmltYXJ5ID4gdGQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2I4ZGFmZjtcXG59XFxuXFxuLnRhYmxlLXByaW1hcnkgdGgsXFxuLnRhYmxlLXByaW1hcnkgdGQsXFxuLnRhYmxlLXByaW1hcnkgdGhlYWQgdGgsXFxuLnRhYmxlLXByaW1hcnkgdGJvZHkgKyB0Ym9keSB7XFxuICBib3JkZXItY29sb3I6ICM3YWJhZmY7XFxufVxcblxcbi50YWJsZS1ob3ZlciAudGFibGUtcHJpbWFyeTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWZjZGZmO1xcbn1cXG5cXG4udGFibGUtaG92ZXIgLnRhYmxlLXByaW1hcnk6aG92ZXIgPiB0ZCxcXG4udGFibGUtaG92ZXIgLnRhYmxlLXByaW1hcnk6aG92ZXIgPiB0aCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWZjZGZmO1xcbn1cXG5cXG4udGFibGUtc2Vjb25kYXJ5LFxcbi50YWJsZS1zZWNvbmRhcnkgPiB0aCxcXG4udGFibGUtc2Vjb25kYXJ5ID4gdGQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q2ZDhkYjtcXG59XFxuXFxuLnRhYmxlLXNlY29uZGFyeSB0aCxcXG4udGFibGUtc2Vjb25kYXJ5IHRkLFxcbi50YWJsZS1zZWNvbmRhcnkgdGhlYWQgdGgsXFxuLnRhYmxlLXNlY29uZGFyeSB0Ym9keSArIHRib2R5IHtcXG4gIGJvcmRlci1jb2xvcjogI2IzYjdiYjtcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1zZWNvbmRhcnk6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M4Y2JjZjtcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1zZWNvbmRhcnk6aG92ZXIgPiB0ZCxcXG4udGFibGUtaG92ZXIgLnRhYmxlLXNlY29uZGFyeTpob3ZlciA+IHRoIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjOGNiY2Y7XFxufVxcblxcbi50YWJsZS1zdWNjZXNzLFxcbi50YWJsZS1zdWNjZXNzID4gdGgsXFxuLnRhYmxlLXN1Y2Nlc3MgPiB0ZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzNlNmNiO1xcbn1cXG5cXG4udGFibGUtc3VjY2VzcyB0aCxcXG4udGFibGUtc3VjY2VzcyB0ZCxcXG4udGFibGUtc3VjY2VzcyB0aGVhZCB0aCxcXG4udGFibGUtc3VjY2VzcyB0Ym9keSArIHRib2R5IHtcXG4gIGJvcmRlci1jb2xvcjogIzhmZDE5ZTtcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1zdWNjZXNzOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiMWRmYmI7XFxufVxcblxcbi50YWJsZS1ob3ZlciAudGFibGUtc3VjY2Vzczpob3ZlciA+IHRkLFxcbi50YWJsZS1ob3ZlciAudGFibGUtc3VjY2Vzczpob3ZlciA+IHRoIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiMWRmYmI7XFxufVxcblxcbi50YWJsZS1pbmZvLFxcbi50YWJsZS1pbmZvID4gdGgsXFxuLnRhYmxlLWluZm8gPiB0ZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmVlNWViO1xcbn1cXG5cXG4udGFibGUtaW5mbyB0aCxcXG4udGFibGUtaW5mbyB0ZCxcXG4udGFibGUtaW5mbyB0aGVhZCB0aCxcXG4udGFibGUtaW5mbyB0Ym9keSArIHRib2R5IHtcXG4gIGJvcmRlci1jb2xvcjogIzg2Y2ZkYTtcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1pbmZvOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhYmRkZTU7XFxufVxcblxcbi50YWJsZS1ob3ZlciAudGFibGUtaW5mbzpob3ZlciA+IHRkLFxcbi50YWJsZS1ob3ZlciAudGFibGUtaW5mbzpob3ZlciA+IHRoIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhYmRkZTU7XFxufVxcblxcbi50YWJsZS13YXJuaW5nLFxcbi50YWJsZS13YXJuaW5nID4gdGgsXFxuLnRhYmxlLXdhcm5pbmcgPiB0ZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlZWJhO1xcbn1cXG5cXG4udGFibGUtd2FybmluZyB0aCxcXG4udGFibGUtd2FybmluZyB0ZCxcXG4udGFibGUtd2FybmluZyB0aGVhZCB0aCxcXG4udGFibGUtd2FybmluZyB0Ym9keSArIHRib2R5IHtcXG4gIGJvcmRlci1jb2xvcjogI2ZmZGY3ZTtcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS13YXJuaW5nOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmU4YTE7XFxufVxcblxcbi50YWJsZS1ob3ZlciAudGFibGUtd2FybmluZzpob3ZlciA+IHRkLFxcbi50YWJsZS1ob3ZlciAudGFibGUtd2FybmluZzpob3ZlciA+IHRoIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmU4YTE7XFxufVxcblxcbi50YWJsZS1kYW5nZXIsXFxuLnRhYmxlLWRhbmdlciA+IHRoLFxcbi50YWJsZS1kYW5nZXIgPiB0ZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVjNmNiO1xcbn1cXG5cXG4udGFibGUtZGFuZ2VyIHRoLFxcbi50YWJsZS1kYW5nZXIgdGQsXFxuLnRhYmxlLWRhbmdlciB0aGVhZCB0aCxcXG4udGFibGUtZGFuZ2VyIHRib2R5ICsgdGJvZHkge1xcbiAgYm9yZGVyLWNvbG9yOiAjZWQ5NjllO1xcbn1cXG5cXG4udGFibGUtaG92ZXIgLnRhYmxlLWRhbmdlcjpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFiMGI3O1xcbn1cXG5cXG4udGFibGUtaG92ZXIgLnRhYmxlLWRhbmdlcjpob3ZlciA+IHRkLFxcbi50YWJsZS1ob3ZlciAudGFibGUtZGFuZ2VyOmhvdmVyID4gdGgge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YxYjBiNztcXG59XFxuXFxuLnRhYmxlLWxpZ2h0LFxcbi50YWJsZS1saWdodCA+IHRoLFxcbi50YWJsZS1saWdodCA+IHRkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZGZkZmU7XFxufVxcblxcbi50YWJsZS1saWdodCB0aCxcXG4udGFibGUtbGlnaHQgdGQsXFxuLnRhYmxlLWxpZ2h0IHRoZWFkIHRoLFxcbi50YWJsZS1saWdodCB0Ym9keSArIHRib2R5IHtcXG4gIGJvcmRlci1jb2xvcjogI2ZiZmNmYztcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1saWdodDpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2Y2O1xcbn1cXG5cXG4udGFibGUtaG92ZXIgLnRhYmxlLWxpZ2h0OmhvdmVyID4gdGQsXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1saWdodDpob3ZlciA+IHRoIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlY2VjZjY7XFxufVxcblxcbi50YWJsZS1kYXJrLFxcbi50YWJsZS1kYXJrID4gdGgsXFxuLnRhYmxlLWRhcmsgPiB0ZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzZjOGNhO1xcbn1cXG5cXG4udGFibGUtZGFyayB0aCxcXG4udGFibGUtZGFyayB0ZCxcXG4udGFibGUtZGFyayB0aGVhZCB0aCxcXG4udGFibGUtZGFyayB0Ym9keSArIHRib2R5IHtcXG4gIGJvcmRlci1jb2xvcjogIzk1OTk5YztcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1kYXJrOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiOWJiYmU7XFxufVxcblxcbi50YWJsZS1ob3ZlciAudGFibGUtZGFyazpob3ZlciA+IHRkLFxcbi50YWJsZS1ob3ZlciAudGFibGUtZGFyazpob3ZlciA+IHRoIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiOWJiYmU7XFxufVxcblxcbi50YWJsZS1hY3RpdmUsXFxuLnRhYmxlLWFjdGl2ZSA+IHRoLFxcbi50YWJsZS1hY3RpdmUgPiB0ZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1hY3RpdmU6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA3NSk7XFxufVxcblxcbi50YWJsZS1ob3ZlciAudGFibGUtYWN0aXZlOmhvdmVyID4gdGQsXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1hY3RpdmU6aG92ZXIgPiB0aCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcXG59XFxuXFxuLnRhYmxlIC50aGVhZC1kYXJrIHRoIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM0M2E0MDtcXG4gIGJvcmRlci1jb2xvcjogIzQ1NGQ1NTtcXG59XFxuXFxuLnRhYmxlIC50aGVhZC1saWdodCB0aCB7XFxuICBjb2xvcjogIzQ5NTA1NztcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlOWVjZWY7XFxuICBib3JkZXItY29sb3I6ICNkZWUyZTY7XFxufVxcblxcbi50YWJsZS1kYXJrIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM0M2E0MDtcXG59XFxuXFxuLnRhYmxlLWRhcmsgdGgsXFxuLnRhYmxlLWRhcmsgdGQsXFxuLnRhYmxlLWRhcmsgdGhlYWQgdGgge1xcbiAgYm9yZGVyLWNvbG9yOiAjNDU0ZDU1O1xcbn1cXG5cXG4udGFibGUtZGFyay50YWJsZS1ib3JkZXJlZCB7XFxuICBib3JkZXI6IDA7XFxufVxcblxcbi50YWJsZS1kYXJrLnRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpO1xcbn1cXG5cXG4udGFibGUtZGFyay50YWJsZS1ob3ZlciB0Ym9keSB0cjpob3ZlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNzUpO1xcbn1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogNTc1Ljk4cHgpIHtcXG4gIC50YWJsZS1yZXNwb25zaXZlLXNtIHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xcbiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XFxuICB9XFxuICAudGFibGUtcmVzcG9uc2l2ZS1zbSA+IC50YWJsZS1ib3JkZXJlZCB7XFxuICAgIGJvcmRlcjogMDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDc2Ny45OHB4KSB7XFxuICAudGFibGUtcmVzcG9uc2l2ZS1tZCB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgb3ZlcmZsb3cteDogYXV0bztcXG4gICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xcbiAgfVxcbiAgLnRhYmxlLXJlc3BvbnNpdmUtbWQgPiAudGFibGUtYm9yZGVyZWQge1xcbiAgICBib3JkZXI6IDA7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5OTEuOThweCkge1xcbiAgLnRhYmxlLXJlc3BvbnNpdmUtbGcge1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIG92ZXJmbG93LXg6IGF1dG87XFxuICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcXG4gIH1cXG4gIC50YWJsZS1yZXNwb25zaXZlLWxnID4gLnRhYmxlLWJvcmRlcmVkIHtcXG4gICAgYm9yZGVyOiAwO1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogMTE5OS45OHB4KSB7XFxuICAudGFibGUtcmVzcG9uc2l2ZS14bCB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgb3ZlcmZsb3cteDogYXV0bztcXG4gICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xcbiAgfVxcbiAgLnRhYmxlLXJlc3BvbnNpdmUteGwgPiAudGFibGUtYm9yZGVyZWQge1xcbiAgICBib3JkZXI6IDA7XFxuICB9XFxufVxcblxcbi50YWJsZS1yZXNwb25zaXZlIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBvdmVyZmxvdy14OiBhdXRvO1xcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xcbn1cXG5cXG4udGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCB7XFxuICBib3JkZXI6IDA7XFxufVxcblxcbi5mb3JtLWNvbnRyb2wge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogY2FsYygxLjVlbSArIDAuNzVyZW0gKyAycHgpO1xcbiAgcGFkZGluZzogMC4zNzVyZW0gMC43NXJlbTtcXG4gIGZvbnQtc2l6ZTogMXJlbTtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgY29sb3I6ICM0OTUwNTc7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNjZWQ0ZGE7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3gtc2hhZG93IDAuMTVzIGVhc2UtaW4tb3V0O1xcbn1cXG5cXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xcbiAgLmZvcm0tY29udHJvbCB7XFxuICAgIHRyYW5zaXRpb246IG5vbmU7XFxuICB9XFxufVxcblxcbi5mb3JtLWNvbnRyb2w6Oi1tcy1leHBhbmQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXI6IDA7XFxufVxcblxcbi5mb3JtLWNvbnRyb2w6Zm9jdXMge1xcbiAgY29sb3I6ICM0OTUwNTc7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyLWNvbG9yOiAjODBiZGZmO1xcbiAgb3V0bGluZTogMDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDAsIDEyMywgMjU1LCAwLjI1KTtcXG59XFxuXFxuLmZvcm0tY29udHJvbDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi5mb3JtLWNvbnRyb2w6Oi1tb3otcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG5cXG4uZm9ybS1jb250cm9sOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi5mb3JtLWNvbnRyb2w6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi5mb3JtLWNvbnRyb2w6OnBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiAjNmM3NTdkO1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLmZvcm0tY29udHJvbDpkaXNhYmxlZCwgLmZvcm0tY29udHJvbFtyZWFkb25seV0ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U5ZWNlZjtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbnNlbGVjdC5mb3JtLWNvbnRyb2w6Zm9jdXM6Oi1tcy12YWx1ZSB7XFxuICBjb2xvcjogIzQ5NTA1NztcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxufVxcblxcbi5mb3JtLWNvbnRyb2wtZmlsZSxcXG4uZm9ybS1jb250cm9sLXJhbmdlIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcblxcbi5jb2wtZm9ybS1sYWJlbCB7XFxuICBwYWRkaW5nLXRvcDogY2FsYygwLjM3NXJlbSArIDFweCk7XFxuICBwYWRkaW5nLWJvdHRvbTogY2FsYygwLjM3NXJlbSArIDFweCk7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgZm9udC1zaXplOiBpbmhlcml0O1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG59XFxuXFxuLmNvbC1mb3JtLWxhYmVsLWxnIHtcXG4gIHBhZGRpbmctdG9wOiBjYWxjKDAuNXJlbSArIDFweCk7XFxuICBwYWRkaW5nLWJvdHRvbTogY2FsYygwLjVyZW0gKyAxcHgpO1xcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG59XFxuXFxuLmNvbC1mb3JtLWxhYmVsLXNtIHtcXG4gIHBhZGRpbmctdG9wOiBjYWxjKDAuMjVyZW0gKyAxcHgpO1xcbiAgcGFkZGluZy1ib3R0b206IGNhbGMoMC4yNXJlbSArIDFweCk7XFxuICBmb250LXNpemU6IDAuODc1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG59XFxuXFxuLmZvcm0tY29udHJvbC1wbGFpbnRleHQge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIHBhZGRpbmctdG9wOiAwLjM3NXJlbTtcXG4gIHBhZGRpbmctYm90dG9tOiAwLjM3NXJlbTtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgY29sb3I6ICMyMTI1Mjk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItd2lkdGg6IDFweCAwO1xcbn1cXG5cXG4uZm9ybS1jb250cm9sLXBsYWludGV4dC5mb3JtLWNvbnRyb2wtc20sIC5mb3JtLWNvbnRyb2wtcGxhaW50ZXh0LmZvcm0tY29udHJvbC1sZyB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwO1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbn1cXG5cXG4uZm9ybS1jb250cm9sLXNtIHtcXG4gIGhlaWdodDogY2FsYygxLjVlbSArIDAuNXJlbSArIDJweCk7XFxuICBwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbTtcXG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgYm9yZGVyLXJhZGl1czogMC4ycmVtO1xcbn1cXG5cXG4uZm9ybS1jb250cm9sLWxnIHtcXG4gIGhlaWdodDogY2FsYygxLjVlbSArIDFyZW0gKyAycHgpO1xcbiAgcGFkZGluZzogMC41cmVtIDFyZW07XFxuICBmb250LXNpemU6IDEuMjVyZW07XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgYm9yZGVyLXJhZGl1czogMC4zcmVtO1xcbn1cXG5cXG5zZWxlY3QuZm9ybS1jb250cm9sW3NpemVdLCBzZWxlY3QuZm9ybS1jb250cm9sW211bHRpcGxlXSB7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcblxcbnRleHRhcmVhLmZvcm0tY29udHJvbCB7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcblxcbi5mb3JtLWdyb3VwIHtcXG4gIG1hcmdpbi1ib3R0b206IDFyZW07XFxufVxcblxcbi5mb3JtLXRleHQge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBtYXJnaW4tdG9wOiAwLjI1cmVtO1xcbn1cXG5cXG4uZm9ybS1yb3cge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcXG4gIGZsZXgtd3JhcDogd3JhcDtcXG4gIG1hcmdpbi1yaWdodDogLTVweDtcXG4gIG1hcmdpbi1sZWZ0OiAtNXB4O1xcbn1cXG5cXG4uZm9ybS1yb3cgPiAuY29sLFxcbi5mb3JtLXJvdyA+IFtjbGFzcyo9XFxcImNvbC1cXFwiXSB7XFxuICBwYWRkaW5nLXJpZ2h0OiA1cHg7XFxuICBwYWRkaW5nLWxlZnQ6IDVweDtcXG59XFxuXFxuLmZvcm0tY2hlY2sge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwYWRkaW5nLWxlZnQ6IDEuMjVyZW07XFxufVxcblxcbi5mb3JtLWNoZWNrLWlucHV0IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIG1hcmdpbi10b3A6IDAuM3JlbTtcXG4gIG1hcmdpbi1sZWZ0OiAtMS4yNXJlbTtcXG59XFxuXFxuLmZvcm0tY2hlY2staW5wdXQ6ZGlzYWJsZWQgfiAuZm9ybS1jaGVjay1sYWJlbCB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG59XFxuXFxuLmZvcm0tY2hlY2stbGFiZWwge1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG59XFxuXFxuLmZvcm0tY2hlY2staW5saW5lIHtcXG4gIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBwYWRkaW5nLWxlZnQ6IDA7XFxuICBtYXJnaW4tcmlnaHQ6IDAuNzVyZW07XFxufVxcblxcbi5mb3JtLWNoZWNrLWlubGluZSAuZm9ybS1jaGVjay1pbnB1dCB7XFxuICBwb3NpdGlvbjogc3RhdGljO1xcbiAgbWFyZ2luLXRvcDogMDtcXG4gIG1hcmdpbi1yaWdodDogMC4zMTI1cmVtO1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxufVxcblxcbi52YWxpZC1mZWVkYmFjayB7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXJnaW4tdG9wOiAwLjI1cmVtO1xcbiAgZm9udC1zaXplOiA4MCU7XFxuICBjb2xvcjogIzI4YTc0NTtcXG59XFxuXFxuLnZhbGlkLXRvb2x0aXAge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAxMDAlO1xcbiAgei1pbmRleDogNTtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbTtcXG4gIG1hcmdpbi10b3A6IC4xcmVtO1xcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoNDAsIDE2NywgNjksIDAuOSk7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jb250cm9sOnZhbGlkLCAuZm9ybS1jb250cm9sLmlzLXZhbGlkIHtcXG4gIGJvcmRlci1jb2xvcjogIzI4YTc0NTtcXG4gIHBhZGRpbmctcmlnaHQ6IGNhbGMoMS41ZW0gKyAwLjc1cmVtKTtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA4IDgnJTNlJTNjcGF0aCBmaWxsPSclMjMyOGE3NDUnIGQ9J00yLjMgNi43M0wuNiA0LjUzYy0uNC0xLjA0LjQ2LTEuNCAxLjEtLjhsMS4xIDEuNCAzLjQtMy44Yy42LS42MyAxLjYtLjI3IDEuMi43bC00IDQuNmMtLjQzLjUtLjguNC0xLjEuMXonLyUzZSUzYy9zdmclM2VcXFwiKTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgcmlnaHQgY2FsYygwLjM3NWVtICsgMC4xODc1cmVtKTtcXG4gIGJhY2tncm91bmQtc2l6ZTogY2FsYygwLjc1ZW0gKyAwLjM3NXJlbSkgY2FsYygwLjc1ZW0gKyAwLjM3NXJlbSk7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5mb3JtLWNvbnRyb2w6dmFsaWQ6Zm9jdXMsIC5mb3JtLWNvbnRyb2wuaXMtdmFsaWQ6Zm9jdXMge1xcbiAgYm9yZGVyLWNvbG9yOiAjMjhhNzQ1O1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNDAsIDE2NywgNjksIDAuMjUpO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jb250cm9sOnZhbGlkIH4gLnZhbGlkLWZlZWRiYWNrLFxcbi53YXMtdmFsaWRhdGVkIC5mb3JtLWNvbnRyb2w6dmFsaWQgfiAudmFsaWQtdG9vbHRpcCwgLmZvcm0tY29udHJvbC5pcy12YWxpZCB+IC52YWxpZC1mZWVkYmFjayxcXG4uZm9ybS1jb250cm9sLmlzLXZhbGlkIH4gLnZhbGlkLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIHRleHRhcmVhLmZvcm0tY29udHJvbDp2YWxpZCwgdGV4dGFyZWEuZm9ybS1jb250cm9sLmlzLXZhbGlkIHtcXG4gIHBhZGRpbmctcmlnaHQ6IGNhbGMoMS41ZW0gKyAwLjc1cmVtKTtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IHRvcCBjYWxjKDAuMzc1ZW0gKyAwLjE4NzVyZW0pIHJpZ2h0IGNhbGMoMC4zNzVlbSArIDAuMTg3NXJlbSk7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tc2VsZWN0OnZhbGlkLCAuY3VzdG9tLXNlbGVjdC5pcy12YWxpZCB7XFxuICBib3JkZXItY29sb3I6ICMyOGE3NDU7XFxuICBwYWRkaW5nLXJpZ2h0OiBjYWxjKCgxZW0gKyAwLjc1cmVtKSAqIDMgLyA0ICsgMS43NXJlbSk7XFxuICBiYWNrZ3JvdW5kOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNCA1JyUzZSUzY3BhdGggZmlsbD0nJTIzMzQzYTQwJyBkPSdNMiAwTDAgMmg0em0wIDVMMCAzaDR6Jy8lM2UlM2Mvc3ZnJTNlXFxcIikgbm8tcmVwZWF0IHJpZ2h0IDAuNzVyZW0gY2VudGVyLzhweCAxMHB4LCB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgOCA4JyUzZSUzY3BhdGggZmlsbD0nJTIzMjhhNzQ1JyBkPSdNMi4zIDYuNzNMLjYgNC41M2MtLjQtMS4wNC40Ni0xLjQgMS4xLS44bDEuMSAxLjQgMy40LTMuOGMuNi0uNjMgMS42LS4yNyAxLjIuN2wtNCA0LjZjLS40My41LS44LjQtMS4xLjF6Jy8lM2UlM2Mvc3ZnJTNlXFxcIikgI2ZmZiBuby1yZXBlYXQgY2VudGVyIHJpZ2h0IDEuNzVyZW0vY2FsYygwLjc1ZW0gKyAwLjM3NXJlbSkgY2FsYygwLjc1ZW0gKyAwLjM3NXJlbSk7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tc2VsZWN0OnZhbGlkOmZvY3VzLCAuY3VzdG9tLXNlbGVjdC5pcy12YWxpZDpmb2N1cyB7XFxuICBib3JkZXItY29sb3I6ICMyOGE3NDU7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSg0MCwgMTY3LCA2OSwgMC4yNSk7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tc2VsZWN0OnZhbGlkIH4gLnZhbGlkLWZlZWRiYWNrLFxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tc2VsZWN0OnZhbGlkIH4gLnZhbGlkLXRvb2x0aXAsIC5jdXN0b20tc2VsZWN0LmlzLXZhbGlkIH4gLnZhbGlkLWZlZWRiYWNrLFxcbi5jdXN0b20tc2VsZWN0LmlzLXZhbGlkIH4gLnZhbGlkLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5mb3JtLWNvbnRyb2wtZmlsZTp2YWxpZCB+IC52YWxpZC1mZWVkYmFjayxcXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jb250cm9sLWZpbGU6dmFsaWQgfiAudmFsaWQtdG9vbHRpcCwgLmZvcm0tY29udHJvbC1maWxlLmlzLXZhbGlkIH4gLnZhbGlkLWZlZWRiYWNrLFxcbi5mb3JtLWNvbnRyb2wtZmlsZS5pcy12YWxpZCB+IC52YWxpZC10b29sdGlwIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jaGVjay1pbnB1dDp2YWxpZCB+IC5mb3JtLWNoZWNrLWxhYmVsLCAuZm9ybS1jaGVjay1pbnB1dC5pcy12YWxpZCB+IC5mb3JtLWNoZWNrLWxhYmVsIHtcXG4gIGNvbG9yOiAjMjhhNzQ1O1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jaGVjay1pbnB1dDp2YWxpZCB+IC52YWxpZC1mZWVkYmFjayxcXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jaGVjay1pbnB1dDp2YWxpZCB+IC52YWxpZC10b29sdGlwLCAuZm9ybS1jaGVjay1pbnB1dC5pcy12YWxpZCB+IC52YWxpZC1mZWVkYmFjayxcXG4uZm9ybS1jaGVjay1pbnB1dC5pcy12YWxpZCB+IC52YWxpZC10b29sdGlwIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6dmFsaWQgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWwsIC5jdXN0b20tY29udHJvbC1pbnB1dC5pcy12YWxpZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbCB7XFxuICBjb2xvcjogIzI4YTc0NTtcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1jb250cm9sLWlucHV0OnZhbGlkIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUsIC5jdXN0b20tY29udHJvbC1pbnB1dC5pcy12YWxpZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJvcmRlci1jb2xvcjogIzI4YTc0NTtcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1jb250cm9sLWlucHV0OnZhbGlkIH4gLnZhbGlkLWZlZWRiYWNrLFxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tY29udHJvbC1pbnB1dDp2YWxpZCB+IC52YWxpZC10b29sdGlwLCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQuaXMtdmFsaWQgfiAudmFsaWQtZmVlZGJhY2ssXFxuLmN1c3RvbS1jb250cm9sLWlucHV0LmlzLXZhbGlkIH4gLnZhbGlkLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tY29udHJvbC1pbnB1dDp2YWxpZDpjaGVja2VkIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUsIC5jdXN0b20tY29udHJvbC1pbnB1dC5pcy12YWxpZDpjaGVja2VkIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUge1xcbiAgYm9yZGVyLWNvbG9yOiAjMzRjZTU3O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM0Y2U1NztcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1jb250cm9sLWlucHV0OnZhbGlkOmZvY3VzIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUsIC5jdXN0b20tY29udHJvbC1pbnB1dC5pcy12YWxpZDpmb2N1cyB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDQwLCAxNjcsIDY5LCAwLjI1KTtcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1jb250cm9sLWlucHV0OnZhbGlkOmZvY3VzOm5vdCg6Y2hlY2tlZCkgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSwgLmN1c3RvbS1jb250cm9sLWlucHV0LmlzLXZhbGlkOmZvY3VzOm5vdCg6Y2hlY2tlZCkgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSB7XFxuICBib3JkZXItY29sb3I6ICMyOGE3NDU7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tZmlsZS1pbnB1dDp2YWxpZCB+IC5jdXN0b20tZmlsZS1sYWJlbCwgLmN1c3RvbS1maWxlLWlucHV0LmlzLXZhbGlkIH4gLmN1c3RvbS1maWxlLWxhYmVsIHtcXG4gIGJvcmRlci1jb2xvcjogIzI4YTc0NTtcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1maWxlLWlucHV0OnZhbGlkIH4gLnZhbGlkLWZlZWRiYWNrLFxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tZmlsZS1pbnB1dDp2YWxpZCB+IC52YWxpZC10b29sdGlwLCAuY3VzdG9tLWZpbGUtaW5wdXQuaXMtdmFsaWQgfiAudmFsaWQtZmVlZGJhY2ssXFxuLmN1c3RvbS1maWxlLWlucHV0LmlzLXZhbGlkIH4gLnZhbGlkLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tZmlsZS1pbnB1dDp2YWxpZDpmb2N1cyB+IC5jdXN0b20tZmlsZS1sYWJlbCwgLmN1c3RvbS1maWxlLWlucHV0LmlzLXZhbGlkOmZvY3VzIH4gLmN1c3RvbS1maWxlLWxhYmVsIHtcXG4gIGJvcmRlci1jb2xvcjogIzI4YTc0NTtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDQwLCAxNjcsIDY5LCAwLjI1KTtcXG59XFxuXFxuLmludmFsaWQtZmVlZGJhY2sge1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luLXRvcDogMC4yNXJlbTtcXG4gIGZvbnQtc2l6ZTogODAlO1xcbiAgY29sb3I6ICNkYzM1NDU7XFxufVxcblxcbi5pbnZhbGlkLXRvb2x0aXAge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAxMDAlO1xcbiAgei1pbmRleDogNTtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbTtcXG4gIG1hcmdpbi10b3A6IC4xcmVtO1xcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjIwLCA1MywgNjksIDAuOSk7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jb250cm9sOmludmFsaWQsIC5mb3JtLWNvbnRyb2wuaXMtaW52YWxpZCB7XFxuICBib3JkZXItY29sb3I6ICNkYzM1NDU7XFxuICBwYWRkaW5nLXJpZ2h0OiBjYWxjKDEuNWVtICsgMC43NXJlbSk7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyBmaWxsPSclMjNkYzM1NDUnIHZpZXdCb3g9Jy0yIC0yIDcgNyclM2UlM2NwYXRoIHN0cm9rZT0nJTIzZGMzNTQ1JyBkPSdNMCAwbDMgM20wLTNMMCAzJy8lM2UlM2NjaXJjbGUgcj0nLjUnLyUzZSUzY2NpcmNsZSBjeD0nMycgcj0nLjUnLyUzZSUzY2NpcmNsZSBjeT0nMycgcj0nLjUnLyUzZSUzY2NpcmNsZSBjeD0nMycgY3k9JzMnIHI9Jy41Jy8lM2UlM2Mvc3ZnJTNFXFxcIik7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0IGNhbGMoMC4zNzVlbSArIDAuMTg3NXJlbSk7XFxuICBiYWNrZ3JvdW5kLXNpemU6IGNhbGMoMC43NWVtICsgMC4zNzVyZW0pIGNhbGMoMC43NWVtICsgMC4zNzVyZW0pO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jb250cm9sOmludmFsaWQ6Zm9jdXMsIC5mb3JtLWNvbnRyb2wuaXMtaW52YWxpZDpmb2N1cyB7XFxuICBib3JkZXItY29sb3I6ICNkYzM1NDU7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgyMjAsIDUzLCA2OSwgMC4yNSk7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5mb3JtLWNvbnRyb2w6aW52YWxpZCB+IC5pbnZhbGlkLWZlZWRiYWNrLFxcbi53YXMtdmFsaWRhdGVkIC5mb3JtLWNvbnRyb2w6aW52YWxpZCB+IC5pbnZhbGlkLXRvb2x0aXAsIC5mb3JtLWNvbnRyb2wuaXMtaW52YWxpZCB+IC5pbnZhbGlkLWZlZWRiYWNrLFxcbi5mb3JtLWNvbnRyb2wuaXMtaW52YWxpZCB+IC5pbnZhbGlkLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIHRleHRhcmVhLmZvcm0tY29udHJvbDppbnZhbGlkLCB0ZXh0YXJlYS5mb3JtLWNvbnRyb2wuaXMtaW52YWxpZCB7XFxuICBwYWRkaW5nLXJpZ2h0OiBjYWxjKDEuNWVtICsgMC43NXJlbSk7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiB0b3AgY2FsYygwLjM3NWVtICsgMC4xODc1cmVtKSByaWdodCBjYWxjKDAuMzc1ZW0gKyAwLjE4NzVyZW0pO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLXNlbGVjdDppbnZhbGlkLCAuY3VzdG9tLXNlbGVjdC5pcy1pbnZhbGlkIHtcXG4gIGJvcmRlci1jb2xvcjogI2RjMzU0NTtcXG4gIHBhZGRpbmctcmlnaHQ6IGNhbGMoKDFlbSArIDAuNzVyZW0pICogMyAvIDQgKyAxLjc1cmVtKTtcXG4gIGJhY2tncm91bmQ6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA0IDUnJTNlJTNjcGF0aCBmaWxsPSclMjMzNDNhNDAnIGQ9J00yIDBMMCAyaDR6bTAgNUwwIDNoNHonLyUzZSUzYy9zdmclM2VcXFwiKSBuby1yZXBlYXQgcmlnaHQgMC43NXJlbSBjZW50ZXIvOHB4IDEwcHgsIHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIGZpbGw9JyUyM2RjMzU0NScgdmlld0JveD0nLTIgLTIgNyA3JyUzZSUzY3BhdGggc3Ryb2tlPSclMjNkYzM1NDUnIGQ9J00wIDBsMyAzbTAtM0wwIDMnLyUzZSUzY2NpcmNsZSByPScuNScvJTNlJTNjY2lyY2xlIGN4PSczJyByPScuNScvJTNlJTNjY2lyY2xlIGN5PSczJyByPScuNScvJTNlJTNjY2lyY2xlIGN4PSczJyBjeT0nMycgcj0nLjUnLyUzZSUzYy9zdmclM0VcXFwiKSAjZmZmIG5vLXJlcGVhdCBjZW50ZXIgcmlnaHQgMS43NXJlbS9jYWxjKDAuNzVlbSArIDAuMzc1cmVtKSBjYWxjKDAuNzVlbSArIDAuMzc1cmVtKTtcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1zZWxlY3Q6aW52YWxpZDpmb2N1cywgLmN1c3RvbS1zZWxlY3QuaXMtaW52YWxpZDpmb2N1cyB7XFxuICBib3JkZXItY29sb3I6ICNkYzM1NDU7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgyMjAsIDUzLCA2OSwgMC4yNSk7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tc2VsZWN0OmludmFsaWQgfiAuaW52YWxpZC1mZWVkYmFjayxcXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLXNlbGVjdDppbnZhbGlkIH4gLmludmFsaWQtdG9vbHRpcCwgLmN1c3RvbS1zZWxlY3QuaXMtaW52YWxpZCB+IC5pbnZhbGlkLWZlZWRiYWNrLFxcbi5jdXN0b20tc2VsZWN0LmlzLWludmFsaWQgfiAuaW52YWxpZC10b29sdGlwIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jb250cm9sLWZpbGU6aW52YWxpZCB+IC5pbnZhbGlkLWZlZWRiYWNrLFxcbi53YXMtdmFsaWRhdGVkIC5mb3JtLWNvbnRyb2wtZmlsZTppbnZhbGlkIH4gLmludmFsaWQtdG9vbHRpcCwgLmZvcm0tY29udHJvbC1maWxlLmlzLWludmFsaWQgfiAuaW52YWxpZC1mZWVkYmFjayxcXG4uZm9ybS1jb250cm9sLWZpbGUuaXMtaW52YWxpZCB+IC5pbnZhbGlkLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5mb3JtLWNoZWNrLWlucHV0OmludmFsaWQgfiAuZm9ybS1jaGVjay1sYWJlbCwgLmZvcm0tY2hlY2staW5wdXQuaXMtaW52YWxpZCB+IC5mb3JtLWNoZWNrLWxhYmVsIHtcXG4gIGNvbG9yOiAjZGMzNTQ1O1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jaGVjay1pbnB1dDppbnZhbGlkIH4gLmludmFsaWQtZmVlZGJhY2ssXFxuLndhcy12YWxpZGF0ZWQgLmZvcm0tY2hlY2staW5wdXQ6aW52YWxpZCB+IC5pbnZhbGlkLXRvb2x0aXAsIC5mb3JtLWNoZWNrLWlucHV0LmlzLWludmFsaWQgfiAuaW52YWxpZC1mZWVkYmFjayxcXG4uZm9ybS1jaGVjay1pbnB1dC5pcy1pbnZhbGlkIH4gLmludmFsaWQtdG9vbHRpcCB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1jb250cm9sLWlucHV0OmludmFsaWQgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWwsIC5jdXN0b20tY29udHJvbC1pbnB1dC5pcy1pbnZhbGlkIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsIHtcXG4gIGNvbG9yOiAjZGMzNTQ1O1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6aW52YWxpZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlLCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQuaXMtaW52YWxpZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJvcmRlci1jb2xvcjogI2RjMzU0NTtcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1jb250cm9sLWlucHV0OmludmFsaWQgfiAuaW52YWxpZC1mZWVkYmFjayxcXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6aW52YWxpZCB+IC5pbnZhbGlkLXRvb2x0aXAsIC5jdXN0b20tY29udHJvbC1pbnB1dC5pcy1pbnZhbGlkIH4gLmludmFsaWQtZmVlZGJhY2ssXFxuLmN1c3RvbS1jb250cm9sLWlucHV0LmlzLWludmFsaWQgfiAuaW52YWxpZC10b29sdGlwIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6aW52YWxpZDpjaGVja2VkIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUsIC5jdXN0b20tY29udHJvbC1pbnB1dC5pcy1pbnZhbGlkOmNoZWNrZWQgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSB7XFxuICBib3JkZXItY29sb3I6ICNlNDYwNmQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTQ2MDZkO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6aW52YWxpZDpmb2N1cyB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlLCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQuaXMtaW52YWxpZDpmb2N1cyB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDIyMCwgNTMsIDY5LCAwLjI1KTtcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1jb250cm9sLWlucHV0OmludmFsaWQ6Zm9jdXM6bm90KDpjaGVja2VkKSB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlLCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQuaXMtaW52YWxpZDpmb2N1czpub3QoOmNoZWNrZWQpIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUge1xcbiAgYm9yZGVyLWNvbG9yOiAjZGMzNTQ1O1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLWZpbGUtaW5wdXQ6aW52YWxpZCB+IC5jdXN0b20tZmlsZS1sYWJlbCwgLmN1c3RvbS1maWxlLWlucHV0LmlzLWludmFsaWQgfiAuY3VzdG9tLWZpbGUtbGFiZWwge1xcbiAgYm9yZGVyLWNvbG9yOiAjZGMzNTQ1O1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLWZpbGUtaW5wdXQ6aW52YWxpZCB+IC5pbnZhbGlkLWZlZWRiYWNrLFxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tZmlsZS1pbnB1dDppbnZhbGlkIH4gLmludmFsaWQtdG9vbHRpcCwgLmN1c3RvbS1maWxlLWlucHV0LmlzLWludmFsaWQgfiAuaW52YWxpZC1mZWVkYmFjayxcXG4uY3VzdG9tLWZpbGUtaW5wdXQuaXMtaW52YWxpZCB+IC5pbnZhbGlkLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tZmlsZS1pbnB1dDppbnZhbGlkOmZvY3VzIH4gLmN1c3RvbS1maWxlLWxhYmVsLCAuY3VzdG9tLWZpbGUtaW5wdXQuaXMtaW52YWxpZDpmb2N1cyB+IC5jdXN0b20tZmlsZS1sYWJlbCB7XFxuICBib3JkZXItY29sb3I6ICNkYzM1NDU7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgyMjAsIDUzLCA2OSwgMC4yNSk7XFxufVxcblxcbi5mb3JtLWlubGluZSB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC1mbG93OiByb3cgd3JhcDtcXG4gIGZsZXgtZmxvdzogcm93IHdyYXA7XFxuICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuXFxuLmZvcm0taW5saW5lIC5mb3JtLWNoZWNrIHtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIHtcXG4gIC5mb3JtLWlubGluZSBsYWJlbCB7XFxuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgfVxcbiAgLmZvcm0taW5saW5lIC5mb3JtLWdyb3VwIHtcXG4gICAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIC1tcy1mbGV4OiAwIDAgYXV0bztcXG4gICAgZmxleDogMCAwIGF1dG87XFxuICAgIC1tcy1mbGV4LWZsb3c6IHJvdyB3cmFwO1xcbiAgICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xcbiAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgfVxcbiAgLmZvcm0taW5saW5lIC5mb3JtLWNvbnRyb2wge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgfVxcbiAgLmZvcm0taW5saW5lIC5mb3JtLWNvbnRyb2wtcGxhaW50ZXh0IHtcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgfVxcbiAgLmZvcm0taW5saW5lIC5pbnB1dC1ncm91cCxcXG4gIC5mb3JtLWlubGluZSAuY3VzdG9tLXNlbGVjdCB7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLmZvcm0taW5saW5lIC5mb3JtLWNoZWNrIHtcXG4gICAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XFxuICB9XFxuICAuZm9ybS1pbmxpbmUgLmZvcm0tY2hlY2staW5wdXQge1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIC1tcy1mbGV4LW5lZ2F0aXZlOiAwO1xcbiAgICBmbGV4LXNocmluazogMDtcXG4gICAgbWFyZ2luLXRvcDogMDtcXG4gICAgbWFyZ2luLXJpZ2h0OiAwLjI1cmVtO1xcbiAgICBtYXJnaW4tbGVmdDogMDtcXG4gIH1cXG4gIC5mb3JtLWlubGluZSAuY3VzdG9tLWNvbnRyb2wge1xcbiAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgfVxcbiAgLmZvcm0taW5saW5lIC5jdXN0b20tY29udHJvbC1sYWJlbCB7XFxuICAgIG1hcmdpbi1ib3R0b206IDA7XFxuICB9XFxufVxcblxcbi5idG4ge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgcGFkZGluZzogMC4zNzVyZW0gMC43NXJlbTtcXG4gIGZvbnQtc2l6ZTogMXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbiAgdHJhbnNpdGlvbjogY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAwLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAwLjE1cyBlYXNlLWluLW91dDtcXG59XFxuXFxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcXG4gIC5idG4ge1xcbiAgICB0cmFuc2l0aW9uOiBub25lO1xcbiAgfVxcbn1cXG5cXG4uYnRuOmhvdmVyIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbn1cXG5cXG4uYnRuOmZvY3VzLCAuYnRuLmZvY3VzIHtcXG4gIG91dGxpbmU6IDA7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgwLCAxMjMsIDI1NSwgMC4yNSk7XFxufVxcblxcbi5idG4uZGlzYWJsZWQsIC5idG46ZGlzYWJsZWQge1xcbiAgb3BhY2l0eTogMC42NTtcXG59XFxuXFxuYS5idG4uZGlzYWJsZWQsXFxuZmllbGRzZXQ6ZGlzYWJsZWQgYS5idG4ge1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi5idG4tcHJpbWFyeSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDdiZmY7XFxuICBib3JkZXItY29sb3I6ICMwMDdiZmY7XFxufVxcblxcbi5idG4tcHJpbWFyeTpob3ZlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDY5ZDk7XFxuICBib3JkZXItY29sb3I6ICMwMDYyY2M7XFxufVxcblxcbi5idG4tcHJpbWFyeTpmb2N1cywgLmJ0bi1wcmltYXJ5LmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDM4LCAxNDMsIDI1NSwgMC41KTtcXG59XFxuXFxuLmJ0bi1wcmltYXJ5LmRpc2FibGVkLCAuYnRuLXByaW1hcnk6ZGlzYWJsZWQge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3YmZmO1xcbiAgYm9yZGVyLWNvbG9yOiAjMDA3YmZmO1xcbn1cXG5cXG4uYnRuLXByaW1hcnk6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlLCAuYnRuLXByaW1hcnk6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlLFxcbi5zaG93ID4gLmJ0bi1wcmltYXJ5LmRyb3Bkb3duLXRvZ2dsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDYyY2M7XFxuICBib3JkZXItY29sb3I6ICMwMDVjYmY7XFxufVxcblxcbi5idG4tcHJpbWFyeTpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmU6Zm9jdXMsIC5idG4tcHJpbWFyeTpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsXFxuLnNob3cgPiAuYnRuLXByaW1hcnkuZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDM4LCAxNDMsIDI1NSwgMC41KTtcXG59XFxuXFxuLmJ0bi1zZWNvbmRhcnkge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM3NTdkO1xcbiAgYm9yZGVyLWNvbG9yOiAjNmM3NTdkO1xcbn1cXG5cXG4uYnRuLXNlY29uZGFyeTpob3ZlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1YTYyNjg7XFxuICBib3JkZXItY29sb3I6ICM1NDViNjI7XFxufVxcblxcbi5idG4tc2Vjb25kYXJ5OmZvY3VzLCAuYnRuLXNlY29uZGFyeS5mb2N1cyB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgxMzAsIDEzOCwgMTQ1LCAwLjUpO1xcbn1cXG5cXG4uYnRuLXNlY29uZGFyeS5kaXNhYmxlZCwgLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM3NTdkO1xcbiAgYm9yZGVyLWNvbG9yOiAjNmM3NTdkO1xcbn1cXG5cXG4uYnRuLXNlY29uZGFyeTpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmUsIC5idG4tc2Vjb25kYXJ5Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSxcXG4uc2hvdyA+IC5idG4tc2Vjb25kYXJ5LmRyb3Bkb3duLXRvZ2dsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1NDViNjI7XFxuICBib3JkZXItY29sb3I6ICM0ZTU1NWI7XFxufVxcblxcbi5idG4tc2Vjb25kYXJ5Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZTpmb2N1cywgLmJ0bi1zZWNvbmRhcnk6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlOmZvY3VzLFxcbi5zaG93ID4gLmJ0bi1zZWNvbmRhcnkuZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDEzMCwgMTM4LCAxNDUsIDAuNSk7XFxufVxcblxcbi5idG4tc3VjY2VzcyB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyOGE3NDU7XFxuICBib3JkZXItY29sb3I6ICMyOGE3NDU7XFxufVxcblxcbi5idG4tc3VjY2Vzczpob3ZlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyMTg4Mzg7XFxuICBib3JkZXItY29sb3I6ICMxZTdlMzQ7XFxufVxcblxcbi5idG4tc3VjY2Vzczpmb2N1cywgLmJ0bi1zdWNjZXNzLmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDcyLCAxODAsIDk3LCAwLjUpO1xcbn1cXG5cXG4uYnRuLXN1Y2Nlc3MuZGlzYWJsZWQsIC5idG4tc3VjY2VzczpkaXNhYmxlZCB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyOGE3NDU7XFxuICBib3JkZXItY29sb3I6ICMyOGE3NDU7XFxufVxcblxcbi5idG4tc3VjY2Vzczpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmUsIC5idG4tc3VjY2Vzczpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmUsXFxuLnNob3cgPiAuYnRuLXN1Y2Nlc3MuZHJvcGRvd24tdG9nZ2xlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFlN2UzNDtcXG4gIGJvcmRlci1jb2xvcjogIzFjNzQzMDtcXG59XFxuXFxuLmJ0bi1zdWNjZXNzOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZTpmb2N1cywgLmJ0bi1zdWNjZXNzOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZTpmb2N1cyxcXG4uc2hvdyA+IC5idG4tc3VjY2Vzcy5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNzIsIDE4MCwgOTcsIDAuNSk7XFxufVxcblxcbi5idG4taW5mbyB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxN2EyYjg7XFxuICBib3JkZXItY29sb3I6ICMxN2EyYjg7XFxufVxcblxcbi5idG4taW5mbzpob3ZlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxMzg0OTY7XFxuICBib3JkZXItY29sb3I6ICMxMTdhOGI7XFxufVxcblxcbi5idG4taW5mbzpmb2N1cywgLmJ0bi1pbmZvLmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDU4LCAxNzYsIDE5NSwgMC41KTtcXG59XFxuXFxuLmJ0bi1pbmZvLmRpc2FibGVkLCAuYnRuLWluZm86ZGlzYWJsZWQge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTdhMmI4O1xcbiAgYm9yZGVyLWNvbG9yOiAjMTdhMmI4O1xcbn1cXG5cXG4uYnRuLWluZm86bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlLCAuYnRuLWluZm86bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlLFxcbi5zaG93ID4gLmJ0bi1pbmZvLmRyb3Bkb3duLXRvZ2dsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxMTdhOGI7XFxuICBib3JkZXItY29sb3I6ICMxMDcwN2Y7XFxufVxcblxcbi5idG4taW5mbzpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmU6Zm9jdXMsIC5idG4taW5mbzpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsXFxuLnNob3cgPiAuYnRuLWluZm8uZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDU4LCAxNzYsIDE5NSwgMC41KTtcXG59XFxuXFxuLmJ0bi13YXJuaW5nIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYzEwNztcXG4gIGJvcmRlci1jb2xvcjogI2ZmYzEwNztcXG59XFxuXFxuLmJ0bi13YXJuaW5nOmhvdmVyIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UwYTgwMDtcXG4gIGJvcmRlci1jb2xvcjogI2QzOWUwMDtcXG59XFxuXFxuLmJ0bi13YXJuaW5nOmZvY3VzLCAuYnRuLXdhcm5pbmcuZm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjIyLCAxNzAsIDEyLCAwLjUpO1xcbn1cXG5cXG4uYnRuLXdhcm5pbmcuZGlzYWJsZWQsIC5idG4td2FybmluZzpkaXNhYmxlZCB7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmMxMDc7XFxuICBib3JkZXItY29sb3I6ICNmZmMxMDc7XFxufVxcblxcbi5idG4td2FybmluZzpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmUsIC5idG4td2FybmluZzpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmUsXFxuLnNob3cgPiAuYnRuLXdhcm5pbmcuZHJvcGRvd24tdG9nZ2xlIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QzOWUwMDtcXG4gIGJvcmRlci1jb2xvcjogI2M2OTUwMDtcXG59XFxuXFxuLmJ0bi13YXJuaW5nOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZTpmb2N1cywgLmJ0bi13YXJuaW5nOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZTpmb2N1cyxcXG4uc2hvdyA+IC5idG4td2FybmluZy5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjIyLCAxNzAsIDEyLCAwLjUpO1xcbn1cXG5cXG4uYnRuLWRhbmdlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkYzM1NDU7XFxuICBib3JkZXItY29sb3I6ICNkYzM1NDU7XFxufVxcblxcbi5idG4tZGFuZ2VyOmhvdmVyIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M4MjMzMztcXG4gIGJvcmRlci1jb2xvcjogI2JkMjEzMDtcXG59XFxuXFxuLmJ0bi1kYW5nZXI6Zm9jdXMsIC5idG4tZGFuZ2VyLmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDIyNSwgODMsIDk3LCAwLjUpO1xcbn1cXG5cXG4uYnRuLWRhbmdlci5kaXNhYmxlZCwgLmJ0bi1kYW5nZXI6ZGlzYWJsZWQge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGMzNTQ1O1xcbiAgYm9yZGVyLWNvbG9yOiAjZGMzNTQ1O1xcbn1cXG5cXG4uYnRuLWRhbmdlcjpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmUsIC5idG4tZGFuZ2VyOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSxcXG4uc2hvdyA+IC5idG4tZGFuZ2VyLmRyb3Bkb3duLXRvZ2dsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiZDIxMzA7XFxuICBib3JkZXItY29sb3I6ICNiMjFmMmQ7XFxufVxcblxcbi5idG4tZGFuZ2VyOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZTpmb2N1cywgLmJ0bi1kYW5nZXI6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlOmZvY3VzLFxcbi5zaG93ID4gLmJ0bi1kYW5nZXIuZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDIyNSwgODMsIDk3LCAwLjUpO1xcbn1cXG5cXG4uYnRuLWxpZ2h0IHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcXG4gIGJvcmRlci1jb2xvcjogI2Y4ZjlmYTtcXG59XFxuXFxuLmJ0bi1saWdodDpob3ZlciB7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlMmU2ZWE7XFxuICBib3JkZXItY29sb3I6ICNkYWUwZTU7XFxufVxcblxcbi5idG4tbGlnaHQ6Zm9jdXMsIC5idG4tbGlnaHQuZm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjE2LCAyMTcsIDIxOSwgMC41KTtcXG59XFxuXFxuLmJ0bi1saWdodC5kaXNhYmxlZCwgLmJ0bi1saWdodDpkaXNhYmxlZCB7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmOGY5ZmE7XFxuICBib3JkZXItY29sb3I6ICNmOGY5ZmE7XFxufVxcblxcbi5idG4tbGlnaHQ6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlLCAuYnRuLWxpZ2h0Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSxcXG4uc2hvdyA+IC5idG4tbGlnaHQuZHJvcGRvd24tdG9nZ2xlIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RhZTBlNTtcXG4gIGJvcmRlci1jb2xvcjogI2QzZDlkZjtcXG59XFxuXFxuLmJ0bi1saWdodDpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmU6Zm9jdXMsIC5idG4tbGlnaHQ6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlOmZvY3VzLFxcbi5zaG93ID4gLmJ0bi1saWdodC5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjE2LCAyMTcsIDIxOSwgMC41KTtcXG59XFxuXFxuLmJ0bi1kYXJrIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM0M2E0MDtcXG4gIGJvcmRlci1jb2xvcjogIzM0M2E0MDtcXG59XFxuXFxuLmJ0bi1kYXJrOmhvdmVyIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzIzMjcyYjtcXG4gIGJvcmRlci1jb2xvcjogIzFkMjEyNDtcXG59XFxuXFxuLmJ0bi1kYXJrOmZvY3VzLCAuYnRuLWRhcmsuZm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoODIsIDg4LCA5MywgMC41KTtcXG59XFxuXFxuLmJ0bi1kYXJrLmRpc2FibGVkLCAuYnRuLWRhcms6ZGlzYWJsZWQge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzQzYTQwO1xcbiAgYm9yZGVyLWNvbG9yOiAjMzQzYTQwO1xcbn1cXG5cXG4uYnRuLWRhcms6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlLCAuYnRuLWRhcms6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlLFxcbi5zaG93ID4gLmJ0bi1kYXJrLmRyb3Bkb3duLXRvZ2dsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxZDIxMjQ7XFxuICBib3JkZXItY29sb3I6ICMxNzFhMWQ7XFxufVxcblxcbi5idG4tZGFyazpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmU6Zm9jdXMsIC5idG4tZGFyazpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsXFxuLnNob3cgPiAuYnRuLWRhcmsuZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDgyLCA4OCwgOTMsIDAuNSk7XFxufVxcblxcbi5idG4tb3V0bGluZS1wcmltYXJ5IHtcXG4gIGNvbG9yOiAjMDA3YmZmO1xcbiAgYm9yZGVyLWNvbG9yOiAjMDA3YmZmO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtcHJpbWFyeTpob3ZlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDdiZmY7XFxuICBib3JkZXItY29sb3I6ICMwMDdiZmY7XFxufVxcblxcbi5idG4tb3V0bGluZS1wcmltYXJ5OmZvY3VzLCAuYnRuLW91dGxpbmUtcHJpbWFyeS5mb2N1cyB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgwLCAxMjMsIDI1NSwgMC41KTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQsIC5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVkIHtcXG4gIGNvbG9yOiAjMDA3YmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5idG4tb3V0bGluZS1wcmltYXJ5Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZSwgLmJ0bi1vdXRsaW5lLXByaW1hcnk6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlLFxcbi5zaG93ID4gLmJ0bi1vdXRsaW5lLXByaW1hcnkuZHJvcGRvd24tdG9nZ2xlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjtcXG4gIGJvcmRlci1jb2xvcjogIzAwN2JmZjtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLXByaW1hcnk6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlOmZvY3VzLCAuYnRuLW91dGxpbmUtcHJpbWFyeTpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsXFxuLnNob3cgPiAuYnRuLW91dGxpbmUtcHJpbWFyeS5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMCwgMTIzLCAyNTUsIDAuNSk7XFxufVxcblxcbi5idG4tb3V0bGluZS1zZWNvbmRhcnkge1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICBib3JkZXItY29sb3I6ICM2Yzc1N2Q7XFxufVxcblxcbi5idG4tb3V0bGluZS1zZWNvbmRhcnk6aG92ZXIge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM3NTdkO1xcbiAgYm9yZGVyLWNvbG9yOiAjNmM3NTdkO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmZvY3VzLCAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDEwOCwgMTE3LCAxMjUsIDAuNSk7XFxufVxcblxcbi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQsIC5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQge1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmUsIC5idG4tb3V0bGluZS1zZWNvbmRhcnk6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlLFxcbi5zaG93ID4gLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kcm9wZG93bi10b2dnbGUge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM3NTdkO1xcbiAgYm9yZGVyLWNvbG9yOiAjNmM3NTdkO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZTpmb2N1cywgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsXFxuLnNob3cgPiAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgxMDgsIDExNywgMTI1LCAwLjUpO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtc3VjY2VzcyB7XFxuICBjb2xvcjogIzI4YTc0NTtcXG4gIGJvcmRlci1jb2xvcjogIzI4YTc0NTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6aG92ZXIge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjhhNzQ1O1xcbiAgYm9yZGVyLWNvbG9yOiAjMjhhNzQ1O1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtc3VjY2Vzczpmb2N1cywgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNDAsIDE2NywgNjksIDAuNSk7XFxufVxcblxcbi5idG4tb3V0bGluZS1zdWNjZXNzLmRpc2FibGVkLCAuYnRuLW91dGxpbmUtc3VjY2VzczpkaXNhYmxlZCB7XFxuICBjb2xvcjogIzI4YTc0NTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtc3VjY2Vzczpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmUsIC5idG4tb3V0bGluZS1zdWNjZXNzOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSxcXG4uc2hvdyA+IC5idG4tb3V0bGluZS1zdWNjZXNzLmRyb3Bkb3duLXRvZ2dsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyOGE3NDU7XFxuICBib3JkZXItY29sb3I6ICMyOGE3NDU7XFxufVxcblxcbi5idG4tb3V0bGluZS1zdWNjZXNzOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZTpmb2N1cywgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlOmZvY3VzLFxcbi5zaG93ID4gLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDQwLCAxNjcsIDY5LCAwLjUpO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtaW5mbyB7XFxuICBjb2xvcjogIzE3YTJiODtcXG4gIGJvcmRlci1jb2xvcjogIzE3YTJiODtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWluZm86aG92ZXIge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTdhMmI4O1xcbiAgYm9yZGVyLWNvbG9yOiAjMTdhMmI4O1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtaW5mbzpmb2N1cywgLmJ0bi1vdXRsaW5lLWluZm8uZm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjMsIDE2MiwgMTg0LCAwLjUpO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCwgLmJ0bi1vdXRsaW5lLWluZm86ZGlzYWJsZWQge1xcbiAgY29sb3I6ICMxN2EyYjg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWluZm86bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlLCAuYnRuLW91dGxpbmUtaW5mbzpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmUsXFxuLnNob3cgPiAuYnRuLW91dGxpbmUtaW5mby5kcm9wZG93bi10b2dnbGUge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTdhMmI4O1xcbiAgYm9yZGVyLWNvbG9yOiAjMTdhMmI4O1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtaW5mbzpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmU6Zm9jdXMsIC5idG4tb3V0bGluZS1pbmZvOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZTpmb2N1cyxcXG4uc2hvdyA+IC5idG4tb3V0bGluZS1pbmZvLmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgyMywgMTYyLCAxODQsIDAuNSk7XFxufVxcblxcbi5idG4tb3V0bGluZS13YXJuaW5nIHtcXG4gIGNvbG9yOiAjZmZjMTA3O1xcbiAgYm9yZGVyLWNvbG9yOiAjZmZjMTA3O1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtd2FybmluZzpob3ZlciB7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmMxMDc7XFxuICBib3JkZXItY29sb3I6ICNmZmMxMDc7XFxufVxcblxcbi5idG4tb3V0bGluZS13YXJuaW5nOmZvY3VzLCAuYnRuLW91dGxpbmUtd2FybmluZy5mb2N1cyB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgyNTUsIDE5MywgNywgMC41KTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLXdhcm5pbmcuZGlzYWJsZWQsIC5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkIHtcXG4gIGNvbG9yOiAjZmZjMTA3O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5idG4tb3V0bGluZS13YXJuaW5nOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZSwgLmJ0bi1vdXRsaW5lLXdhcm5pbmc6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlLFxcbi5zaG93ID4gLmJ0bi1vdXRsaW5lLXdhcm5pbmcuZHJvcGRvd24tdG9nZ2xlIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYzEwNztcXG4gIGJvcmRlci1jb2xvcjogI2ZmYzEwNztcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLXdhcm5pbmc6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlOmZvY3VzLCAuYnRuLW91dGxpbmUtd2FybmluZzpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsXFxuLnNob3cgPiAuYnRuLW91dGxpbmUtd2FybmluZy5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjU1LCAxOTMsIDcsIDAuNSk7XFxufVxcblxcbi5idG4tb3V0bGluZS1kYW5nZXIge1xcbiAgY29sb3I6ICNkYzM1NDU7XFxuICBib3JkZXItY29sb3I6ICNkYzM1NDU7XFxufVxcblxcbi5idG4tb3V0bGluZS1kYW5nZXI6aG92ZXIge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGMzNTQ1O1xcbiAgYm9yZGVyLWNvbG9yOiAjZGMzNTQ1O1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtZGFuZ2VyOmZvY3VzLCAuYnRuLW91dGxpbmUtZGFuZ2VyLmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDIyMCwgNTMsIDY5LCAwLjUpO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtZGFuZ2VyLmRpc2FibGVkLCAuYnRuLW91dGxpbmUtZGFuZ2VyOmRpc2FibGVkIHtcXG4gIGNvbG9yOiAjZGMzNTQ1O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5idG4tb3V0bGluZS1kYW5nZXI6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlLCAuYnRuLW91dGxpbmUtZGFuZ2VyOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSxcXG4uc2hvdyA+IC5idG4tb3V0bGluZS1kYW5nZXIuZHJvcGRvd24tdG9nZ2xlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RjMzU0NTtcXG4gIGJvcmRlci1jb2xvcjogI2RjMzU0NTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWRhbmdlcjpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmU6Zm9jdXMsIC5idG4tb3V0bGluZS1kYW5nZXI6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlOmZvY3VzLFxcbi5zaG93ID4gLmJ0bi1vdXRsaW5lLWRhbmdlci5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjIwLCA1MywgNjksIDAuNSk7XFxufVxcblxcbi5idG4tb3V0bGluZS1saWdodCB7XFxuICBjb2xvcjogI2Y4ZjlmYTtcXG4gIGJvcmRlci1jb2xvcjogI2Y4ZjlmYTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWxpZ2h0OmhvdmVyIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcXG4gIGJvcmRlci1jb2xvcjogI2Y4ZjlmYTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWxpZ2h0OmZvY3VzLCAuYnRuLW91dGxpbmUtbGlnaHQuZm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjQ4LCAyNDksIDI1MCwgMC41KTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWxpZ2h0LmRpc2FibGVkLCAuYnRuLW91dGxpbmUtbGlnaHQ6ZGlzYWJsZWQge1xcbiAgY29sb3I6ICNmOGY5ZmE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWxpZ2h0Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZSwgLmJ0bi1vdXRsaW5lLWxpZ2h0Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSxcXG4uc2hvdyA+IC5idG4tb3V0bGluZS1saWdodC5kcm9wZG93bi10b2dnbGUge1xcbiAgY29sb3I6ICMyMTI1Mjk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOWZhO1xcbiAgYm9yZGVyLWNvbG9yOiAjZjhmOWZhO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtbGlnaHQ6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlOmZvY3VzLCAuYnRuLW91dGxpbmUtbGlnaHQ6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlOmZvY3VzLFxcbi5zaG93ID4gLmJ0bi1vdXRsaW5lLWxpZ2h0LmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgyNDgsIDI0OSwgMjUwLCAwLjUpO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtZGFyayB7XFxuICBjb2xvcjogIzM0M2E0MDtcXG4gIGJvcmRlci1jb2xvcjogIzM0M2E0MDtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWRhcms6aG92ZXIge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzQzYTQwO1xcbiAgYm9yZGVyLWNvbG9yOiAjMzQzYTQwO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtZGFyazpmb2N1cywgLmJ0bi1vdXRsaW5lLWRhcmsuZm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNTIsIDU4LCA2NCwgMC41KTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWRhcmsuZGlzYWJsZWQsIC5idG4tb3V0bGluZS1kYXJrOmRpc2FibGVkIHtcXG4gIGNvbG9yOiAjMzQzYTQwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5idG4tb3V0bGluZS1kYXJrOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZSwgLmJ0bi1vdXRsaW5lLWRhcms6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlLFxcbi5zaG93ID4gLmJ0bi1vdXRsaW5lLWRhcmsuZHJvcGRvd24tdG9nZ2xlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM0M2E0MDtcXG4gIGJvcmRlci1jb2xvcjogIzM0M2E0MDtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWRhcms6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlOmZvY3VzLCAuYnRuLW91dGxpbmUtZGFyazpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsXFxuLnNob3cgPiAuYnRuLW91dGxpbmUtZGFyay5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNTIsIDU4LCA2NCwgMC41KTtcXG59XFxuXFxuLmJ0bi1saW5rIHtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBjb2xvcjogIzAwN2JmZjtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuXFxuLmJ0bi1saW5rOmhvdmVyIHtcXG4gIGNvbG9yOiAjMDA1NmIzO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxufVxcblxcbi5idG4tbGluazpmb2N1cywgLmJ0bi1saW5rLmZvY3VzIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxuXFxuLmJ0bi1saW5rOmRpc2FibGVkLCAuYnRuLWxpbmsuZGlzYWJsZWQge1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuLmJ0bi1sZywgLmJ0bi1ncm91cC1sZyA+IC5idG4ge1xcbiAgcGFkZGluZzogMC41cmVtIDFyZW07XFxuICBmb250LXNpemU6IDEuMjVyZW07XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgYm9yZGVyLXJhZGl1czogMC4zcmVtO1xcbn1cXG5cXG4uYnRuLXNtLCAuYnRuLWdyb3VwLXNtID4gLmJ0biB7XFxuICBwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbTtcXG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgYm9yZGVyLXJhZGl1czogMC4ycmVtO1xcbn1cXG5cXG4uYnRuLWJsb2NrIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcblxcbi5idG4tYmxvY2sgKyAuYnRuLWJsb2NrIHtcXG4gIG1hcmdpbi10b3A6IDAuNXJlbTtcXG59XFxuXFxuaW5wdXRbdHlwZT1cXFwic3VibWl0XFxcIl0uYnRuLWJsb2NrLFxcbmlucHV0W3R5cGU9XFxcInJlc2V0XFxcIl0uYnRuLWJsb2NrLFxcbmlucHV0W3R5cGU9XFxcImJ1dHRvblxcXCJdLmJ0bi1ibG9jayB7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuXFxuLmZhZGUge1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBsaW5lYXI7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAuZmFkZSB7XFxuICAgIHRyYW5zaXRpb246IG5vbmU7XFxuICB9XFxufVxcblxcbi5mYWRlOm5vdCguc2hvdykge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuXFxuLmNvbGxhcHNlOm5vdCguc2hvdykge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLmNvbGxhcHNpbmcge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgaGVpZ2h0OiAwO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHRyYW5zaXRpb246IGhlaWdodCAwLjM1cyBlYXNlO1xcbn1cXG5cXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xcbiAgLmNvbGxhcHNpbmcge1xcbiAgICB0cmFuc2l0aW9uOiBub25lO1xcbiAgfVxcbn1cXG5cXG4uZHJvcHVwLFxcbi5kcm9wcmlnaHQsXFxuLmRyb3Bkb3duLFxcbi5kcm9wbGVmdCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbi5kcm9wZG93bi10b2dnbGUge1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG59XFxuXFxuLmRyb3Bkb3duLXRvZ2dsZTo6YWZ0ZXIge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luLWxlZnQ6IDAuMjU1ZW07XFxuICB2ZXJ0aWNhbC1hbGlnbjogMC4yNTVlbTtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgYm9yZGVyLXRvcDogMC4zZW0gc29saWQ7XFxuICBib3JkZXItcmlnaHQ6IDAuM2VtIHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWJvdHRvbTogMDtcXG4gIGJvcmRlci1sZWZ0OiAwLjNlbSBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmRyb3Bkb3duLXRvZ2dsZTplbXB0eTo6YWZ0ZXIge1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxufVxcblxcbi5kcm9wZG93bi1tZW51IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMTAwJTtcXG4gIGxlZnQ6IDA7XFxuICB6LWluZGV4OiAxMDAwO1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIGZsb2F0OiBsZWZ0O1xcbiAgbWluLXdpZHRoOiAxMHJlbTtcXG4gIHBhZGRpbmc6IDAuNXJlbSAwO1xcbiAgbWFyZ2luOiAwLjEyNXJlbSAwIDA7XFxuICBmb250LXNpemU6IDFyZW07XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICBsaXN0LXN0eWxlOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLmRyb3Bkb3duLW1lbnUtbGVmdCB7XFxuICByaWdodDogYXV0bztcXG4gIGxlZnQ6IDA7XFxufVxcblxcbi5kcm9wZG93bi1tZW51LXJpZ2h0IHtcXG4gIHJpZ2h0OiAwO1xcbiAgbGVmdDogYXV0bztcXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDU3NnB4KSB7XFxuICAuZHJvcGRvd24tbWVudS1zbS1sZWZ0IHtcXG4gICAgcmlnaHQ6IGF1dG87XFxuICAgIGxlZnQ6IDA7XFxuICB9XFxuICAuZHJvcGRvd24tbWVudS1zbS1yaWdodCB7XFxuICAgIHJpZ2h0OiAwO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gIC5kcm9wZG93bi1tZW51LW1kLWxlZnQge1xcbiAgICByaWdodDogYXV0bztcXG4gICAgbGVmdDogMDtcXG4gIH1cXG4gIC5kcm9wZG93bi1tZW51LW1kLXJpZ2h0IHtcXG4gICAgcmlnaHQ6IDA7XFxuICAgIGxlZnQ6IGF1dG87XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xcbiAgLmRyb3Bkb3duLW1lbnUtbGctbGVmdCB7XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgICBsZWZ0OiAwO1xcbiAgfVxcbiAgLmRyb3Bkb3duLW1lbnUtbGctcmlnaHQge1xcbiAgICByaWdodDogMDtcXG4gICAgbGVmdDogYXV0bztcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xcbiAgLmRyb3Bkb3duLW1lbnUteGwtbGVmdCB7XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgICBsZWZ0OiAwO1xcbiAgfVxcbiAgLmRyb3Bkb3duLW1lbnUteGwtcmlnaHQge1xcbiAgICByaWdodDogMDtcXG4gICAgbGVmdDogYXV0bztcXG4gIH1cXG59XFxuXFxuLmRyb3B1cCAuZHJvcGRvd24tbWVudSB7XFxuICB0b3A6IGF1dG87XFxuICBib3R0b206IDEwMCU7XFxuICBtYXJnaW4tdG9wOiAwO1xcbiAgbWFyZ2luLWJvdHRvbTogMC4xMjVyZW07XFxufVxcblxcbi5kcm9wdXAgLmRyb3Bkb3duLXRvZ2dsZTo6YWZ0ZXIge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luLWxlZnQ6IDAuMjU1ZW07XFxuICB2ZXJ0aWNhbC1hbGlnbjogMC4yNTVlbTtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgYm9yZGVyLXRvcDogMDtcXG4gIGJvcmRlci1yaWdodDogMC4zZW0gc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItYm90dG9tOiAwLjNlbSBzb2xpZDtcXG4gIGJvcmRlci1sZWZ0OiAwLjNlbSBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmRyb3B1cCAuZHJvcGRvd24tdG9nZ2xlOmVtcHR5OjphZnRlciB7XFxuICBtYXJnaW4tbGVmdDogMDtcXG59XFxuXFxuLmRyb3ByaWdodCAuZHJvcGRvd24tbWVudSB7XFxuICB0b3A6IDA7XFxuICByaWdodDogYXV0bztcXG4gIGxlZnQ6IDEwMCU7XFxuICBtYXJnaW4tdG9wOiAwO1xcbiAgbWFyZ2luLWxlZnQ6IDAuMTI1cmVtO1xcbn1cXG5cXG4uZHJvcHJpZ2h0IC5kcm9wZG93bi10b2dnbGU6OmFmdGVyIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG1hcmdpbi1sZWZ0OiAwLjI1NWVtO1xcbiAgdmVydGljYWwtYWxpZ246IDAuMjU1ZW07XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGJvcmRlci10b3A6IDAuM2VtIHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJpZ2h0OiAwO1xcbiAgYm9yZGVyLWJvdHRvbTogMC4zZW0gc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItbGVmdDogMC4zZW0gc29saWQ7XFxufVxcblxcbi5kcm9wcmlnaHQgLmRyb3Bkb3duLXRvZ2dsZTplbXB0eTo6YWZ0ZXIge1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxufVxcblxcbi5kcm9wcmlnaHQgLmRyb3Bkb3duLXRvZ2dsZTo6YWZ0ZXIge1xcbiAgdmVydGljYWwtYWxpZ246IDA7XFxufVxcblxcbi5kcm9wbGVmdCAuZHJvcGRvd24tbWVudSB7XFxuICB0b3A6IDA7XFxuICByaWdodDogMTAwJTtcXG4gIGxlZnQ6IGF1dG87XFxuICBtYXJnaW4tdG9wOiAwO1xcbiAgbWFyZ2luLXJpZ2h0OiAwLjEyNXJlbTtcXG59XFxuXFxuLmRyb3BsZWZ0IC5kcm9wZG93bi10b2dnbGU6OmFmdGVyIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG1hcmdpbi1sZWZ0OiAwLjI1NWVtO1xcbiAgdmVydGljYWwtYWxpZ246IDAuMjU1ZW07XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG59XFxuXFxuLmRyb3BsZWZ0IC5kcm9wZG93bi10b2dnbGU6OmFmdGVyIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi5kcm9wbGVmdCAuZHJvcGRvd24tdG9nZ2xlOjpiZWZvcmUge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luLXJpZ2h0OiAwLjI1NWVtO1xcbiAgdmVydGljYWwtYWxpZ246IDAuMjU1ZW07XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGJvcmRlci10b3A6IDAuM2VtIHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJpZ2h0OiAwLjNlbSBzb2xpZDtcXG4gIGJvcmRlci1ib3R0b206IDAuM2VtIHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uZHJvcGxlZnQgLmRyb3Bkb3duLXRvZ2dsZTplbXB0eTo6YWZ0ZXIge1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxufVxcblxcbi5kcm9wbGVmdCAuZHJvcGRvd24tdG9nZ2xlOjpiZWZvcmUge1xcbiAgdmVydGljYWwtYWxpZ246IDA7XFxufVxcblxcbi5kcm9wZG93bi1tZW51W3gtcGxhY2VtZW50Xj1cXFwidG9wXFxcIl0sIC5kcm9wZG93bi1tZW51W3gtcGxhY2VtZW50Xj1cXFwicmlnaHRcXFwiXSwgLmRyb3Bkb3duLW1lbnVbeC1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSwgLmRyb3Bkb3duLW1lbnVbeC1wbGFjZW1lbnRePVxcXCJsZWZ0XFxcIl0ge1xcbiAgcmlnaHQ6IGF1dG87XFxuICBib3R0b206IGF1dG87XFxufVxcblxcbi5kcm9wZG93bi1kaXZpZGVyIHtcXG4gIGhlaWdodDogMDtcXG4gIG1hcmdpbjogMC41cmVtIDA7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlOWVjZWY7XFxufVxcblxcbi5kcm9wZG93bi1pdGVtIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nOiAwLjI1cmVtIDEuNXJlbTtcXG4gIGNsZWFyOiBib3RoO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgdGV4dC1hbGlnbjogaW5oZXJpdDtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogMDtcXG59XFxuXFxuLmRyb3Bkb3duLWl0ZW06aG92ZXIsIC5kcm9wZG93bi1pdGVtOmZvY3VzIHtcXG4gIGNvbG9yOiAjMTYxODFiO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcXG59XFxuXFxuLmRyb3Bkb3duLWl0ZW0uYWN0aXZlLCAuZHJvcGRvd24taXRlbTphY3RpdmUge1xcbiAgY29sb3I6ICNmZmY7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3YmZmO1xcbn1cXG5cXG4uZHJvcGRvd24taXRlbS5kaXNhYmxlZCwgLmRyb3Bkb3duLWl0ZW06ZGlzYWJsZWQge1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uZHJvcGRvd24tbWVudS5zaG93IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4uZHJvcGRvd24taGVhZGVyIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgcGFkZGluZzogMC41cmVtIDEuNXJlbTtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxuICBmb250LXNpemU6IDAuODc1cmVtO1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG5cXG4uZHJvcGRvd24taXRlbS10ZXh0IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgcGFkZGluZzogMC4yNXJlbSAxLjVyZW07XFxuICBjb2xvcjogIzIxMjUyOTtcXG59XFxuXFxuLmJ0bi1ncm91cCxcXG4uYnRuLWdyb3VwLXZlcnRpY2FsIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG59XFxuXFxuLmJ0bi1ncm91cCA+IC5idG4sXFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgLW1zLWZsZXg6IDEgMSBhdXRvO1xcbiAgZmxleDogMSAxIGF1dG87XFxufVxcblxcbi5idG4tZ3JvdXAgPiAuYnRuOmhvdmVyLFxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOmhvdmVyIHtcXG4gIHotaW5kZXg6IDE7XFxufVxcblxcbi5idG4tZ3JvdXAgPiAuYnRuOmZvY3VzLCAuYnRuLWdyb3VwID4gLmJ0bjphY3RpdmUsIC5idG4tZ3JvdXAgPiAuYnRuLmFjdGl2ZSxcXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bjpmb2N1cyxcXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bjphY3RpdmUsXFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4uYWN0aXZlIHtcXG4gIHotaW5kZXg6IDE7XFxufVxcblxcbi5idG4tdG9vbGJhciB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxufVxcblxcbi5idG4tdG9vbGJhciAuaW5wdXQtZ3JvdXAge1xcbiAgd2lkdGg6IGF1dG87XFxufVxcblxcbi5idG4tZ3JvdXAgPiAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpLFxcbi5idG4tZ3JvdXAgPiAuYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xcbn1cXG5cXG4uYnRuLWdyb3VwID4gLmJ0bjpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKSxcXG4uYnRuLWdyb3VwID4gLmJ0bi1ncm91cDpub3QoOmxhc3QtY2hpbGQpID4gLmJ0biB7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xcbn1cXG5cXG4uYnRuLWdyb3VwID4gLmJ0bjpub3QoOmZpcnN0LWNoaWxkKSxcXG4uYnRuLWdyb3VwID4gLmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKSA+IC5idG4ge1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XFxufVxcblxcbi5kcm9wZG93bi10b2dnbGUtc3BsaXQge1xcbiAgcGFkZGluZy1yaWdodDogMC41NjI1cmVtO1xcbiAgcGFkZGluZy1sZWZ0OiAwLjU2MjVyZW07XFxufVxcblxcbi5kcm9wZG93bi10b2dnbGUtc3BsaXQ6OmFmdGVyLFxcbi5kcm9wdXAgLmRyb3Bkb3duLXRvZ2dsZS1zcGxpdDo6YWZ0ZXIsXFxuLmRyb3ByaWdodCAuZHJvcGRvd24tdG9nZ2xlLXNwbGl0OjphZnRlciB7XFxuICBtYXJnaW4tbGVmdDogMDtcXG59XFxuXFxuLmRyb3BsZWZ0IC5kcm9wZG93bi10b2dnbGUtc3BsaXQ6OmJlZm9yZSB7XFxuICBtYXJnaW4tcmlnaHQ6IDA7XFxufVxcblxcbi5idG4tc20gKyAuZHJvcGRvd24tdG9nZ2xlLXNwbGl0LCAuYnRuLWdyb3VwLXNtID4gLmJ0biArIC5kcm9wZG93bi10b2dnbGUtc3BsaXQge1xcbiAgcGFkZGluZy1yaWdodDogMC4zNzVyZW07XFxuICBwYWRkaW5nLWxlZnQ6IDAuMzc1cmVtO1xcbn1cXG5cXG4uYnRuLWxnICsgLmRyb3Bkb3duLXRvZ2dsZS1zcGxpdCwgLmJ0bi1ncm91cC1sZyA+IC5idG4gKyAuZHJvcGRvd24tdG9nZ2xlLXNwbGl0IHtcXG4gIHBhZGRpbmctcmlnaHQ6IDAuNzVyZW07XFxuICBwYWRkaW5nLWxlZnQ6IDAuNzVyZW07XFxufVxcblxcbi5idG4tZ3JvdXAtdmVydGljYWwge1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0O1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxuICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuXFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4sXFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXAge1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcblxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpLFxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gIG1hcmdpbi10b3A6IC0xcHg7XFxufVxcblxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOm5vdCg6bGFzdC1jaGlsZCk6bm90KC5kcm9wZG93bi10b2dnbGUpLFxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuIHtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcXG59XFxuXFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG46bm90KDpmaXJzdC1jaGlsZCksXFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXA6bm90KDpmaXJzdC1jaGlsZCkgPiAuYnRuIHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG59XFxuXFxuLmJ0bi1ncm91cC10b2dnbGUgPiAuYnRuLFxcbi5idG4tZ3JvdXAtdG9nZ2xlID4gLmJ0bi1ncm91cCA+IC5idG4ge1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG59XFxuXFxuLmJ0bi1ncm91cC10b2dnbGUgPiAuYnRuIGlucHV0W3R5cGU9XFxcInJhZGlvXFxcIl0sXFxuLmJ0bi1ncm91cC10b2dnbGUgPiAuYnRuIGlucHV0W3R5cGU9XFxcImNoZWNrYm94XFxcIl0sXFxuLmJ0bi1ncm91cC10b2dnbGUgPiAuYnRuLWdyb3VwID4gLmJ0biBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdLFxcbi5idG4tZ3JvdXAtdG9nZ2xlID4gLmJ0bi1ncm91cCA+IC5idG4gaW5wdXRbdHlwZT1cXFwiY2hlY2tib3hcXFwiXSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBjbGlwOiByZWN0KDAsIDAsIDAsIDApO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi5pbnB1dC1ncm91cCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgLW1zLWZsZXgtYWxpZ246IHN0cmV0Y2g7XFxuICBhbGlnbi1pdGVtczogc3RyZXRjaDtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sLFxcbi5pbnB1dC1ncm91cCA+IC5mb3JtLWNvbnRyb2wtcGxhaW50ZXh0LFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tc2VsZWN0LFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tZmlsZSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAtbXMtZmxleDogMSAxIGF1dG87XFxuICBmbGV4OiAxIDEgYXV0bztcXG4gIHdpZHRoOiAxJTtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxufVxcblxcbi5pbnB1dC1ncm91cCA+IC5mb3JtLWNvbnRyb2wgKyAuZm9ybS1jb250cm9sLFxcbi5pbnB1dC1ncm91cCA+IC5mb3JtLWNvbnRyb2wgKyAuY3VzdG9tLXNlbGVjdCxcXG4uaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sICsgLmN1c3RvbS1maWxlLFxcbi5pbnB1dC1ncm91cCA+IC5mb3JtLWNvbnRyb2wtcGxhaW50ZXh0ICsgLmZvcm0tY29udHJvbCxcXG4uaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sLXBsYWludGV4dCArIC5jdXN0b20tc2VsZWN0LFxcbi5pbnB1dC1ncm91cCA+IC5mb3JtLWNvbnRyb2wtcGxhaW50ZXh0ICsgLmN1c3RvbS1maWxlLFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tc2VsZWN0ICsgLmZvcm0tY29udHJvbCxcXG4uaW5wdXQtZ3JvdXAgPiAuY3VzdG9tLXNlbGVjdCArIC5jdXN0b20tc2VsZWN0LFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tc2VsZWN0ICsgLmN1c3RvbS1maWxlLFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tZmlsZSArIC5mb3JtLWNvbnRyb2wsXFxuLmlucHV0LWdyb3VwID4gLmN1c3RvbS1maWxlICsgLmN1c3RvbS1zZWxlY3QsXFxuLmlucHV0LWdyb3VwID4gLmN1c3RvbS1maWxlICsgLmN1c3RvbS1maWxlIHtcXG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sOmZvY3VzLFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tc2VsZWN0OmZvY3VzLFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tZmlsZSAuY3VzdG9tLWZpbGUtaW5wdXQ6Zm9jdXMgfiAuY3VzdG9tLWZpbGUtbGFiZWwge1xcbiAgei1pbmRleDogMztcXG59XFxuXFxuLmlucHV0LWdyb3VwID4gLmN1c3RvbS1maWxlIC5jdXN0b20tZmlsZS1pbnB1dDpmb2N1cyB7XFxuICB6LWluZGV4OiA0O1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sOm5vdCg6bGFzdC1jaGlsZCksXFxuLmlucHV0LWdyb3VwID4gLmN1c3RvbS1zZWxlY3Q6bm90KDpsYXN0LWNoaWxkKSB7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sOm5vdCg6Zmlyc3QtY2hpbGQpLFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tc2VsZWN0Om5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAgPiAuY3VzdG9tLWZpbGUge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxufVxcblxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tZmlsZTpub3QoOmxhc3QtY2hpbGQpIC5jdXN0b20tZmlsZS1sYWJlbCxcXG4uaW5wdXQtZ3JvdXAgPiAuY3VzdG9tLWZpbGU6bm90KDpsYXN0LWNoaWxkKSAuY3VzdG9tLWZpbGUtbGFiZWw6OmFmdGVyIHtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XFxufVxcblxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tZmlsZTpub3QoOmZpcnN0LWNoaWxkKSAuY3VzdG9tLWZpbGUtbGFiZWwge1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XFxufVxcblxcbi5pbnB1dC1ncm91cC1wcmVwZW5kLFxcbi5pbnB1dC1ncm91cC1hcHBlbmQge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAtcHJlcGVuZCAuYnRuLFxcbi5pbnB1dC1ncm91cC1hcHBlbmQgLmJ0biB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB6LWluZGV4OiAyO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAtcHJlcGVuZCAuYnRuOmZvY3VzLFxcbi5pbnB1dC1ncm91cC1hcHBlbmQgLmJ0bjpmb2N1cyB7XFxuICB6LWluZGV4OiAzO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAtcHJlcGVuZCAuYnRuICsgLmJ0bixcXG4uaW5wdXQtZ3JvdXAtcHJlcGVuZCAuYnRuICsgLmlucHV0LWdyb3VwLXRleHQsXFxuLmlucHV0LWdyb3VwLXByZXBlbmQgLmlucHV0LWdyb3VwLXRleHQgKyAuaW5wdXQtZ3JvdXAtdGV4dCxcXG4uaW5wdXQtZ3JvdXAtcHJlcGVuZCAuaW5wdXQtZ3JvdXAtdGV4dCArIC5idG4sXFxuLmlucHV0LWdyb3VwLWFwcGVuZCAuYnRuICsgLmJ0bixcXG4uaW5wdXQtZ3JvdXAtYXBwZW5kIC5idG4gKyAuaW5wdXQtZ3JvdXAtdGV4dCxcXG4uaW5wdXQtZ3JvdXAtYXBwZW5kIC5pbnB1dC1ncm91cC10ZXh0ICsgLmlucHV0LWdyb3VwLXRleHQsXFxuLmlucHV0LWdyb3VwLWFwcGVuZCAuaW5wdXQtZ3JvdXAtdGV4dCArIC5idG4ge1xcbiAgbWFyZ2luLWxlZnQ6IC0xcHg7XFxufVxcblxcbi5pbnB1dC1ncm91cC1wcmVwZW5kIHtcXG4gIG1hcmdpbi1yaWdodDogLTFweDtcXG59XFxuXFxuLmlucHV0LWdyb3VwLWFwcGVuZCB7XFxuICBtYXJnaW4tbGVmdDogLTFweDtcXG59XFxuXFxuLmlucHV0LWdyb3VwLXRleHQge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBwYWRkaW5nOiAwLjM3NXJlbSAwLjc1cmVtO1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIGZvbnQtc2l6ZTogMXJlbTtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgY29sb3I6ICM0OTUwNTc7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U5ZWNlZjtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNjZWQ0ZGE7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAtdGV4dCBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdLFxcbi5pbnB1dC1ncm91cC10ZXh0IGlucHV0W3R5cGU9XFxcImNoZWNrYm94XFxcIl0ge1xcbiAgbWFyZ2luLXRvcDogMDtcXG59XFxuXFxuLmlucHV0LWdyb3VwLWxnID4gLmZvcm0tY29udHJvbDpub3QodGV4dGFyZWEpLFxcbi5pbnB1dC1ncm91cC1sZyA+IC5jdXN0b20tc2VsZWN0IHtcXG4gIGhlaWdodDogY2FsYygxLjVlbSArIDFyZW0gKyAycHgpO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAtbGcgPiAuZm9ybS1jb250cm9sLFxcbi5pbnB1dC1ncm91cC1sZyA+IC5jdXN0b20tc2VsZWN0LFxcbi5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1wcmVwZW5kID4gLmlucHV0LWdyb3VwLXRleHQsXFxuLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWFwcGVuZCA+IC5pbnB1dC1ncm91cC10ZXh0LFxcbi5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1wcmVwZW5kID4gLmJ0bixcXG4uaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYXBwZW5kID4gLmJ0biB7XFxuICBwYWRkaW5nOiAwLjVyZW0gMXJlbTtcXG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICBib3JkZXItcmFkaXVzOiAwLjNyZW07XFxufVxcblxcbi5pbnB1dC1ncm91cC1zbSA+IC5mb3JtLWNvbnRyb2w6bm90KHRleHRhcmVhKSxcXG4uaW5wdXQtZ3JvdXAtc20gPiAuY3VzdG9tLXNlbGVjdCB7XFxuICBoZWlnaHQ6IGNhbGMoMS41ZW0gKyAwLjVyZW0gKyAycHgpO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAtc20gPiAuZm9ybS1jb250cm9sLFxcbi5pbnB1dC1ncm91cC1zbSA+IC5jdXN0b20tc2VsZWN0LFxcbi5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1wcmVwZW5kID4gLmlucHV0LWdyb3VwLXRleHQsXFxuLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWFwcGVuZCA+IC5pbnB1dC1ncm91cC10ZXh0LFxcbi5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1wcmVwZW5kID4gLmJ0bixcXG4uaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYXBwZW5kID4gLmJ0biB7XFxuICBwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbTtcXG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgYm9yZGVyLXJhZGl1czogMC4ycmVtO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAtbGcgPiAuY3VzdG9tLXNlbGVjdCxcXG4uaW5wdXQtZ3JvdXAtc20gPiAuY3VzdG9tLXNlbGVjdCB7XFxuICBwYWRkaW5nLXJpZ2h0OiAxLjc1cmVtO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAgPiAuaW5wdXQtZ3JvdXAtcHJlcGVuZCA+IC5idG4sXFxuLmlucHV0LWdyb3VwID4gLmlucHV0LWdyb3VwLXByZXBlbmQgPiAuaW5wdXQtZ3JvdXAtdGV4dCxcXG4uaW5wdXQtZ3JvdXAgPiAuaW5wdXQtZ3JvdXAtYXBwZW5kOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuLFxcbi5pbnB1dC1ncm91cCA+IC5pbnB1dC1ncm91cC1hcHBlbmQ6bm90KDpsYXN0LWNoaWxkKSA+IC5pbnB1dC1ncm91cC10ZXh0LFxcbi5pbnB1dC1ncm91cCA+IC5pbnB1dC1ncm91cC1hcHBlbmQ6bGFzdC1jaGlsZCA+IC5idG46bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSksXFxuLmlucHV0LWdyb3VwID4gLmlucHV0LWdyb3VwLWFwcGVuZDpsYXN0LWNoaWxkID4gLmlucHV0LWdyb3VwLXRleHQ6bm90KDpsYXN0LWNoaWxkKSB7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAgPiAuaW5wdXQtZ3JvdXAtYXBwZW5kID4gLmJ0bixcXG4uaW5wdXQtZ3JvdXAgPiAuaW5wdXQtZ3JvdXAtYXBwZW5kID4gLmlucHV0LWdyb3VwLXRleHQsXFxuLmlucHV0LWdyb3VwID4gLmlucHV0LWdyb3VwLXByZXBlbmQ6bm90KDpmaXJzdC1jaGlsZCkgPiAuYnRuLFxcbi5pbnB1dC1ncm91cCA+IC5pbnB1dC1ncm91cC1wcmVwZW5kOm5vdCg6Zmlyc3QtY2hpbGQpID4gLmlucHV0LWdyb3VwLXRleHQsXFxuLmlucHV0LWdyb3VwID4gLmlucHV0LWdyb3VwLXByZXBlbmQ6Zmlyc3QtY2hpbGQgPiAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpLFxcbi5pbnB1dC1ncm91cCA+IC5pbnB1dC1ncm91cC1wcmVwZW5kOmZpcnN0LWNoaWxkID4gLmlucHV0LWdyb3VwLXRleHQ6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XFxufVxcblxcbi5jdXN0b20tY29udHJvbCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIG1pbi1oZWlnaHQ6IDEuNXJlbTtcXG4gIHBhZGRpbmctbGVmdDogMS41cmVtO1xcbn1cXG5cXG4uY3VzdG9tLWNvbnRyb2wtaW5saW5lIHtcXG4gIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xcbn1cXG5cXG4uY3VzdG9tLWNvbnRyb2wtaW5wdXQge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgei1pbmRleDogLTE7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG5cXG4uY3VzdG9tLWNvbnRyb2wtaW5wdXQ6Y2hlY2tlZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyLWNvbG9yOiAjMDA3YmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjtcXG59XFxuXFxuLmN1c3RvbS1jb250cm9sLWlucHV0OmZvY3VzIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMCwgMTIzLCAyNTUsIDAuMjUpO1xcbn1cXG5cXG4uY3VzdG9tLWNvbnRyb2wtaW5wdXQ6Zm9jdXM6bm90KDpjaGVja2VkKSB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJvcmRlci1jb2xvcjogIzgwYmRmZjtcXG59XFxuXFxuLmN1c3RvbS1jb250cm9sLWlucHV0Om5vdCg6ZGlzYWJsZWQpOmFjdGl2ZSB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IzZDdmZjtcXG4gIGJvcmRlci1jb2xvcjogI2IzZDdmZjtcXG59XFxuXFxuLmN1c3RvbS1jb250cm9sLWlucHV0OmRpc2FibGVkIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsIHtcXG4gIGNvbG9yOiAjNmM3NTdkO1xcbn1cXG5cXG4uY3VzdG9tLWNvbnRyb2wtaW5wdXQ6ZGlzYWJsZWQgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO1xcbn1cXG5cXG4uY3VzdG9tLWNvbnRyb2wtbGFiZWwge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XFxufVxcblxcbi5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMC4yNXJlbTtcXG4gIGxlZnQ6IC0xLjVyZW07XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxcmVtO1xcbiAgaGVpZ2h0OiAxcmVtO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3JkZXI6ICNhZGI1YmQgc29saWQgMXB4O1xcbn1cXG5cXG4uY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmFmdGVyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMC4yNXJlbTtcXG4gIGxlZnQ6IC0xLjVyZW07XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxcmVtO1xcbiAgaGVpZ2h0OiAxcmVtO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgNTAlIC8gNTAlIDUwJTtcXG59XFxuXFxuLmN1c3RvbS1jaGVja2JveCAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSB7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4uY3VzdG9tLWNoZWNrYm94IC5jdXN0b20tY29udHJvbC1pbnB1dDpjaGVja2VkIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjphZnRlciB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgOCA4JyUzZSUzY3BhdGggZmlsbD0nJTIzZmZmJyBkPSdNNi41NjQuNzVsLTMuNTkgMy42MTItMS41MzgtMS41NUwwIDQuMjYgMi45NzQgNy4yNSA4IDIuMTkzeicvJTNlJTNjL3N2ZyUzZVxcXCIpO1xcbn1cXG5cXG4uY3VzdG9tLWNoZWNrYm94IC5jdXN0b20tY29udHJvbC1pbnB1dDppbmRldGVybWluYXRlIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUge1xcbiAgYm9yZGVyLWNvbG9yOiAjMDA3YmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjtcXG59XFxuXFxuLmN1c3RvbS1jaGVja2JveCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6aW5kZXRlcm1pbmF0ZSB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YWZ0ZXIge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDQgNCclM2UlM2NwYXRoIHN0cm9rZT0nJTIzZmZmJyBkPSdNMCAyaDQnLyUzZSUzYy9zdmclM2VcXFwiKTtcXG59XFxuXFxuLmN1c3RvbS1jaGVja2JveCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6ZGlzYWJsZWQ6Y2hlY2tlZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMTIzLCAyNTUsIDAuNSk7XFxufVxcblxcbi5jdXN0b20tY2hlY2tib3ggLmN1c3RvbS1jb250cm9sLWlucHV0OmRpc2FibGVkOmluZGV0ZXJtaW5hdGUgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDEyMywgMjU1LCAwLjUpO1xcbn1cXG5cXG4uY3VzdG9tLXJhZGlvIC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG59XFxuXFxuLmN1c3RvbS1yYWRpbyAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6Y2hlY2tlZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YWZ0ZXIge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nLTQgLTQgOCA4JyUzZSUzY2NpcmNsZSByPSczJyBmaWxsPSclMjNmZmYnLyUzZSUzYy9zdmclM2VcXFwiKTtcXG59XFxuXFxuLmN1c3RvbS1yYWRpbyAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6ZGlzYWJsZWQ6Y2hlY2tlZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMTIzLCAyNTUsIDAuNSk7XFxufVxcblxcbi5jdXN0b20tc3dpdGNoIHtcXG4gIHBhZGRpbmctbGVmdDogMi4yNXJlbTtcXG59XFxuXFxuLmN1c3RvbS1zd2l0Y2ggLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUge1xcbiAgbGVmdDogLTIuMjVyZW07XFxuICB3aWR0aDogMS43NXJlbTtcXG4gIHBvaW50ZXItZXZlbnRzOiBhbGw7XFxuICBib3JkZXItcmFkaXVzOiAwLjVyZW07XFxufVxcblxcbi5jdXN0b20tc3dpdGNoIC5jdXN0b20tY29udHJvbC1sYWJlbDo6YWZ0ZXIge1xcbiAgdG9wOiBjYWxjKDAuMjVyZW0gKyAycHgpO1xcbiAgbGVmdDogY2FsYygtMi4yNXJlbSArIDJweCk7XFxuICB3aWR0aDogY2FsYygxcmVtIC0gNHB4KTtcXG4gIGhlaWdodDogY2FsYygxcmVtIC0gNHB4KTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhZGI1YmQ7XFxuICBib3JkZXItcmFkaXVzOiAwLjVyZW07XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJveC1zaGFkb3cgMC4xNXMgZWFzZS1pbi1vdXQsIC13ZWJraXQtdHJhbnNmb3JtIDAuMTVzIGVhc2UtaW4tb3V0O1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMTVzIGVhc2UtaW4tb3V0LCBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJveC1zaGFkb3cgMC4xNXMgZWFzZS1pbi1vdXQ7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4xNXMgZWFzZS1pbi1vdXQsIGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAwLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAwLjE1cyBlYXNlLWluLW91dCwgLXdlYmtpdC10cmFuc2Zvcm0gMC4xNXMgZWFzZS1pbi1vdXQ7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAuY3VzdG9tLXN3aXRjaCAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmFmdGVyIHtcXG4gICAgdHJhbnNpdGlvbjogbm9uZTtcXG4gIH1cXG59XFxuXFxuLmN1c3RvbS1zd2l0Y2ggLmN1c3RvbS1jb250cm9sLWlucHV0OmNoZWNrZWQgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmFmdGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgwLjc1cmVtKTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwLjc1cmVtKTtcXG59XFxuXFxuLmN1c3RvbS1zd2l0Y2ggLmN1c3RvbS1jb250cm9sLWlucHV0OmRpc2FibGVkOmNoZWNrZWQgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDEyMywgMjU1LCAwLjUpO1xcbn1cXG5cXG4uY3VzdG9tLXNlbGVjdCB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogY2FsYygxLjVlbSArIDAuNzVyZW0gKyAycHgpO1xcbiAgcGFkZGluZzogMC4zNzVyZW0gMS43NXJlbSAwLjM3NXJlbSAwLjc1cmVtO1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICBjb2xvcjogIzQ5NTA1NztcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuICBiYWNrZ3JvdW5kOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNCA1JyUzZSUzY3BhdGggZmlsbD0nJTIzMzQzYTQwJyBkPSdNMiAwTDAgMmg0em0wIDVMMCAzaDR6Jy8lM2UlM2Mvc3ZnJTNlXFxcIikgbm8tcmVwZWF0IHJpZ2h0IDAuNzVyZW0gY2VudGVyLzhweCAxMHB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNjZWQ0ZGE7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbiAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xcbiAgYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuXFxuLmN1c3RvbS1zZWxlY3Q6Zm9jdXMge1xcbiAgYm9yZGVyLWNvbG9yOiAjODBiZGZmO1xcbiAgb3V0bGluZTogMDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDAsIDEyMywgMjU1LCAwLjI1KTtcXG59XFxuXFxuLmN1c3RvbS1zZWxlY3Q6Zm9jdXM6Oi1tcy12YWx1ZSB7XFxuICBjb2xvcjogIzQ5NTA1NztcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxufVxcblxcbi5jdXN0b20tc2VsZWN0W211bHRpcGxlXSwgLmN1c3RvbS1zZWxlY3Rbc2l6ZV06bm90KFtzaXplPVxcXCIxXFxcIl0pIHtcXG4gIGhlaWdodDogYXV0bztcXG4gIHBhZGRpbmctcmlnaHQ6IDAuNzVyZW07XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xcbn1cXG5cXG4uY3VzdG9tLXNlbGVjdDpkaXNhYmxlZCB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlOWVjZWY7XFxufVxcblxcbi5jdXN0b20tc2VsZWN0OjotbXMtZXhwYW5kIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi5jdXN0b20tc2VsZWN0LXNtIHtcXG4gIGhlaWdodDogY2FsYygxLjVlbSArIDAuNXJlbSArIDJweCk7XFxuICBwYWRkaW5nLXRvcDogMC4yNXJlbTtcXG4gIHBhZGRpbmctYm90dG9tOiAwLjI1cmVtO1xcbiAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XFxuICBmb250LXNpemU6IDAuODc1cmVtO1xcbn1cXG5cXG4uY3VzdG9tLXNlbGVjdC1sZyB7XFxuICBoZWlnaHQ6IGNhbGMoMS41ZW0gKyAxcmVtICsgMnB4KTtcXG4gIHBhZGRpbmctdG9wOiAwLjVyZW07XFxuICBwYWRkaW5nLWJvdHRvbTogMC41cmVtO1xcbiAgcGFkZGluZy1sZWZ0OiAxcmVtO1xcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xcbn1cXG5cXG4uY3VzdG9tLWZpbGUge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IGNhbGMoMS41ZW0gKyAwLjc1cmVtICsgMnB4KTtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxufVxcblxcbi5jdXN0b20tZmlsZS1pbnB1dCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB6LWluZGV4OiAyO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IGNhbGMoMS41ZW0gKyAwLjc1cmVtICsgMnB4KTtcXG4gIG1hcmdpbjogMDtcXG4gIG9wYWNpdHk6IDA7XFxufVxcblxcbi5jdXN0b20tZmlsZS1pbnB1dDpmb2N1cyB+IC5jdXN0b20tZmlsZS1sYWJlbCB7XFxuICBib3JkZXItY29sb3I6ICM4MGJkZmY7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgwLCAxMjMsIDI1NSwgMC4yNSk7XFxufVxcblxcbi5jdXN0b20tZmlsZS1pbnB1dDpkaXNhYmxlZCB+IC5jdXN0b20tZmlsZS1sYWJlbCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO1xcbn1cXG5cXG4uY3VzdG9tLWZpbGUtaW5wdXQ6bGFuZyhlbikgfiAuY3VzdG9tLWZpbGUtbGFiZWw6OmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCJCcm93c2VcXFwiO1xcbn1cXG5cXG4uY3VzdG9tLWZpbGUtaW5wdXQgfiAuY3VzdG9tLWZpbGUtbGFiZWxbZGF0YS1icm93c2VdOjphZnRlciB7XFxuICBjb250ZW50OiBhdHRyKGRhdGEtYnJvd3NlKTtcXG59XFxuXFxuLmN1c3RvbS1maWxlLWxhYmVsIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgbGVmdDogMDtcXG4gIHotaW5kZXg6IDE7XFxuICBoZWlnaHQ6IGNhbGMoMS41ZW0gKyAwLjc1cmVtICsgMnB4KTtcXG4gIHBhZGRpbmc6IDAuMzc1cmVtIDAuNzVyZW07XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG4gIGNvbG9yOiAjNDk1MDU3O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNjZWQ0ZGE7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4uY3VzdG9tLWZpbGUtbGFiZWw6OmFmdGVyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgei1pbmRleDogMztcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgaGVpZ2h0OiBjYWxjKDEuNWVtICsgMC43NXJlbSk7XFxuICBwYWRkaW5nOiAwLjM3NXJlbSAwLjc1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG4gIGNvbG9yOiAjNDk1MDU3O1xcbiAgY29udGVudDogXFxcIkJyb3dzZVxcXCI7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO1xcbiAgYm9yZGVyLWxlZnQ6IGluaGVyaXQ7XFxuICBib3JkZXItcmFkaXVzOiAwIDAuMjVyZW0gMC4yNXJlbSAwO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiBjYWxjKDFyZW0gKyAwLjRyZW0pO1xcbiAgcGFkZGluZzogMDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbiAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xcbiAgYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuXFxuLmN1c3RvbS1yYW5nZTpmb2N1cyB7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlOmZvY3VzOjotd2Via2l0LXNsaWRlci10aHVtYiB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggI2ZmZiwgMCAwIDAgMC4ycmVtIHJnYmEoMCwgMTIzLCAyNTUsIDAuMjUpO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlOmZvY3VzOjotbW96LXJhbmdlLXRodW1iIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCAjZmZmLCAwIDAgMCAwLjJyZW0gcmdiYSgwLCAxMjMsIDI1NSwgMC4yNSk7XFxufVxcblxcbi5jdXN0b20tcmFuZ2U6Zm9jdXM6Oi1tcy10aHVtYiB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggI2ZmZiwgMCAwIDAgMC4ycmVtIHJnYmEoMCwgMTIzLCAyNTUsIDAuMjUpO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlOjotbW96LWZvY3VzLW91dGVyIHtcXG4gIGJvcmRlcjogMDtcXG59XFxuXFxuLmN1c3RvbS1yYW5nZTo6LXdlYmtpdC1zbGlkZXItdGh1bWIge1xcbiAgd2lkdGg6IDFyZW07XFxuICBoZWlnaHQ6IDFyZW07XFxuICBtYXJnaW4tdG9wOiAtMC4yNXJlbTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDdiZmY7XFxuICBib3JkZXI6IDA7XFxuICBib3JkZXItcmFkaXVzOiAxcmVtO1xcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjE1cyBlYXNlLWluLW91dCwgYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3gtc2hhZG93IDAuMTVzIGVhc2UtaW4tb3V0O1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbiAgYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuXFxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcXG4gIC5jdXN0b20tcmFuZ2U6Oi13ZWJraXQtc2xpZGVyLXRodW1iIHtcXG4gICAgdHJhbnNpdGlvbjogbm9uZTtcXG4gIH1cXG59XFxuXFxuLmN1c3RvbS1yYW5nZTo6LXdlYmtpdC1zbGlkZXItdGh1bWI6YWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiM2Q3ZmY7XFxufVxcblxcbi5jdXN0b20tcmFuZ2U6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAwLjVyZW07XFxuICBjb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVlMmU2O1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1yYWRpdXM6IDFyZW07XFxufVxcblxcbi5jdXN0b20tcmFuZ2U6Oi1tb3otcmFuZ2UtdGh1bWIge1xcbiAgd2lkdGg6IDFyZW07XFxuICBoZWlnaHQ6IDFyZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3YmZmO1xcbiAgYm9yZGVyOiAwO1xcbiAgYm9yZGVyLXJhZGl1czogMXJlbTtcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAwLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAwLjE1cyBlYXNlLWluLW91dDtcXG4gIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcXG4gIGFwcGVhcmFuY2U6IG5vbmU7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAuY3VzdG9tLXJhbmdlOjotbW96LXJhbmdlLXRodW1iIHtcXG4gICAgdHJhbnNpdGlvbjogbm9uZTtcXG4gIH1cXG59XFxuXFxuLmN1c3RvbS1yYW5nZTo6LW1vei1yYW5nZS10aHVtYjphY3RpdmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IzZDdmZjtcXG59XFxuXFxuLmN1c3RvbS1yYW5nZTo6LW1vei1yYW5nZS10cmFjayB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMC41cmVtO1xcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RlZTJlNjtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmFkaXVzOiAxcmVtO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlOjotbXMtdGh1bWIge1xcbiAgd2lkdGg6IDFyZW07XFxuICBoZWlnaHQ6IDFyZW07XFxuICBtYXJnaW4tdG9wOiAwO1xcbiAgbWFyZ2luLXJpZ2h0OiAwLjJyZW07XFxuICBtYXJnaW4tbGVmdDogMC4ycmVtO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjtcXG4gIGJvcmRlcjogMDtcXG4gIGJvcmRlci1yYWRpdXM6IDFyZW07XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJveC1zaGFkb3cgMC4xNXMgZWFzZS1pbi1vdXQ7XFxuICBhcHBlYXJhbmNlOiBub25lO1xcbn1cXG5cXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xcbiAgLmN1c3RvbS1yYW5nZTo6LW1zLXRodW1iIHtcXG4gICAgdHJhbnNpdGlvbjogbm9uZTtcXG4gIH1cXG59XFxuXFxuLmN1c3RvbS1yYW5nZTo6LW1zLXRodW1iOmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjNkN2ZmO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlOjotbXMtdHJhY2sge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDAuNXJlbTtcXG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci13aWR0aDogMC41cmVtO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlOjotbXMtZmlsbC1sb3dlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVlMmU2O1xcbiAgYm9yZGVyLXJhZGl1czogMXJlbTtcXG59XFxuXFxuLmN1c3RvbS1yYW5nZTo6LW1zLWZpbGwtdXBwZXIge1xcbiAgbWFyZ2luLXJpZ2h0OiAxNXB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RlZTJlNjtcXG4gIGJvcmRlci1yYWRpdXM6IDFyZW07XFxufVxcblxcbi5jdXN0b20tcmFuZ2U6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1iIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhZGI1YmQ7XFxufVxcblxcbi5jdXN0b20tcmFuZ2U6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrIHtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuXFxuLmN1c3RvbS1yYW5nZTpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWRiNWJkO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlOmRpc2FibGVkOjotbW96LXJhbmdlLXRyYWNrIHtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuXFxuLmN1c3RvbS1yYW5nZTpkaXNhYmxlZDo6LW1zLXRodW1iIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhZGI1YmQ7XFxufVxcblxcbi5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlLFxcbi5jdXN0b20tZmlsZS1sYWJlbCxcXG4uY3VzdG9tLXNlbGVjdCB7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJveC1zaGFkb3cgMC4xNXMgZWFzZS1pbi1vdXQ7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSxcXG4gIC5jdXN0b20tZmlsZS1sYWJlbCxcXG4gIC5jdXN0b20tc2VsZWN0IHtcXG4gICAgdHJhbnNpdGlvbjogbm9uZTtcXG4gIH1cXG59XFxuXFxuLm5hdiB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XFxufVxcblxcbi5uYXYtbGluayB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHBhZGRpbmc6IDAuNXJlbSAxcmVtO1xcbn1cXG5cXG4ubmF2LWxpbms6aG92ZXIsIC5uYXYtbGluazpmb2N1cyB7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcblxcbi5uYXYtbGluay5kaXNhYmxlZCB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbn1cXG5cXG4ubmF2LXRhYnMge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZWUyZTY7XFxufVxcblxcbi5uYXYtdGFicyAubmF2LWl0ZW0ge1xcbiAgbWFyZ2luLWJvdHRvbTogLTFweDtcXG59XFxuXFxuLm5hdi10YWJzIC5uYXYtbGluayB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLm5hdi10YWJzIC5uYXYtbGluazpob3ZlciwgLm5hdi10YWJzIC5uYXYtbGluazpmb2N1cyB7XFxuICBib3JkZXItY29sb3I6ICNlOWVjZWYgI2U5ZWNlZiAjZGVlMmU2O1xcbn1cXG5cXG4ubmF2LXRhYnMgLm5hdi1saW5rLmRpc2FibGVkIHtcXG4gIGNvbG9yOiAjNmM3NTdkO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4ubmF2LXRhYnMgLm5hdi1saW5rLmFjdGl2ZSxcXG4ubmF2LXRhYnMgLm5hdi1pdGVtLnNob3cgLm5hdi1saW5rIHtcXG4gIGNvbG9yOiAjNDk1MDU3O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlci1jb2xvcjogI2RlZTJlNiAjZGVlMmU2ICNmZmY7XFxufVxcblxcbi5uYXYtdGFicyAuZHJvcGRvd24tbWVudSB7XFxuICBtYXJnaW4tdG9wOiAtMXB4O1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xcbn1cXG5cXG4ubmF2LXBpbGxzIC5uYXYtbGluayB7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4ubmF2LXBpbGxzIC5uYXYtbGluay5hY3RpdmUsXFxuLm5hdi1waWxscyAuc2hvdyA+IC5uYXYtbGluayB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDdiZmY7XFxufVxcblxcbi5uYXYtZmlsbCAubmF2LWl0ZW0ge1xcbiAgLW1zLWZsZXg6IDEgMSBhdXRvO1xcbiAgZmxleDogMSAxIGF1dG87XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbi5uYXYtanVzdGlmaWVkIC5uYXYtaXRlbSB7XFxuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMDtcXG4gIGZsZXgtYmFzaXM6IDA7XFxuICAtbXMtZmxleC1wb3NpdGl2ZTogMTtcXG4gIGZsZXgtZ3JvdzogMTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuLnRhYi1jb250ZW50ID4gLnRhYi1wYW5lIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi50YWItY29udGVudCA+IC5hY3RpdmUge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi5uYXZiYXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcXG4gIGZsZXgtd3JhcDogd3JhcDtcXG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gIHBhZGRpbmc6IDAuNXJlbSAxcmVtO1xcbn1cXG5cXG4ubmF2YmFyID4gLmNvbnRhaW5lcixcXG4ubmF2YmFyID4gLmNvbnRhaW5lci1mbHVpZCB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbn1cXG5cXG4ubmF2YmFyLWJyYW5kIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHBhZGRpbmctdG9wOiAwLjMxMjVyZW07XFxuICBwYWRkaW5nLWJvdHRvbTogMC4zMTI1cmVtO1xcbiAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG5cXG4ubmF2YmFyLWJyYW5kOmhvdmVyLCAubmF2YmFyLWJyYW5kOmZvY3VzIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuXFxuLm5hdmJhci1uYXYge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XFxufVxcblxcbi5uYXZiYXItbmF2IC5uYXYtbGluayB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwO1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbn1cXG5cXG4ubmF2YmFyLW5hdiAuZHJvcGRvd24tbWVudSB7XFxuICBwb3NpdGlvbjogc3RhdGljO1xcbiAgZmxvYXQ6IG5vbmU7XFxufVxcblxcbi5uYXZiYXItdGV4dCB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBwYWRkaW5nLXRvcDogMC41cmVtO1xcbiAgcGFkZGluZy1ib3R0b206IDAuNXJlbTtcXG59XFxuXFxuLm5hdmJhci1jb2xsYXBzZSB7XFxuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMTAwJTtcXG4gIGZsZXgtYmFzaXM6IDEwMCU7XFxuICAtbXMtZmxleC1wb3NpdGl2ZTogMTtcXG4gIGZsZXgtZ3JvdzogMTtcXG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4ubmF2YmFyLXRvZ2dsZXIge1xcbiAgcGFkZGluZzogMC4yNXJlbSAwLjc1cmVtO1xcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLm5hdmJhci10b2dnbGVyOmhvdmVyLCAubmF2YmFyLXRvZ2dsZXI6Zm9jdXMge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbn1cXG5cXG4ubmF2YmFyLXRvZ2dsZXItaWNvbiB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB3aWR0aDogMS41ZW07XFxuICBoZWlnaHQ6IDEuNWVtO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgYmFja2dyb3VuZDogbm8tcmVwZWF0IGNlbnRlciBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMTAwJTtcXG59XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDU3NS45OHB4KSB7XFxuICAubmF2YmFyLWV4cGFuZC1zbSA+IC5jb250YWluZXIsXFxuICAubmF2YmFyLWV4cGFuZC1zbSA+IC5jb250YWluZXItZmx1aWQge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLm5hdmJhci1leHBhbmQtc20ge1xcbiAgICAtbXMtZmxleC1mbG93OiByb3cgbm93cmFwO1xcbiAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XFxuICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC1zbSAubmF2YmFyLW5hdiB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtc20gLm5hdmJhci1uYXYgLmRyb3Bkb3duLW1lbnUge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC1zbSAubmF2YmFyLW5hdiAubmF2LWxpbmsge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XFxuICAgIHBhZGRpbmctbGVmdDogMC41cmVtO1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtc20gPiAuY29udGFpbmVyLFxcbiAgLm5hdmJhci1leHBhbmQtc20gPiAuY29udGFpbmVyLWZsdWlkIHtcXG4gICAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xcbiAgICBmbGV4LXdyYXA6IG5vd3JhcDtcXG4gIH1cXG4gIC5uYXZiYXItZXhwYW5kLXNtIC5uYXZiYXItY29sbGFwc2Uge1xcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbiAgICBmbGV4LWJhc2lzOiBhdXRvO1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtc20gLm5hdmJhci10b2dnbGVyIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDc2Ny45OHB4KSB7XFxuICAubmF2YmFyLWV4cGFuZC1tZCA+IC5jb250YWluZXIsXFxuICAubmF2YmFyLWV4cGFuZC1tZCA+IC5jb250YWluZXItZmx1aWQge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLm5hdmJhci1leHBhbmQtbWQge1xcbiAgICAtbXMtZmxleC1mbG93OiByb3cgbm93cmFwO1xcbiAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XFxuICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC1tZCAubmF2YmFyLW5hdiB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtbWQgLm5hdmJhci1uYXYgLmRyb3Bkb3duLW1lbnUge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC1tZCAubmF2YmFyLW5hdiAubmF2LWxpbmsge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XFxuICAgIHBhZGRpbmctbGVmdDogMC41cmVtO1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtbWQgPiAuY29udGFpbmVyLFxcbiAgLm5hdmJhci1leHBhbmQtbWQgPiAuY29udGFpbmVyLWZsdWlkIHtcXG4gICAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xcbiAgICBmbGV4LXdyYXA6IG5vd3JhcDtcXG4gIH1cXG4gIC5uYXZiYXItZXhwYW5kLW1kIC5uYXZiYXItY29sbGFwc2Uge1xcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbiAgICBmbGV4LWJhc2lzOiBhdXRvO1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtbWQgLm5hdmJhci10b2dnbGVyIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDk5MS45OHB4KSB7XFxuICAubmF2YmFyLWV4cGFuZC1sZyA+IC5jb250YWluZXIsXFxuICAubmF2YmFyLWV4cGFuZC1sZyA+IC5jb250YWluZXItZmx1aWQge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xcbiAgLm5hdmJhci1leHBhbmQtbGcge1xcbiAgICAtbXMtZmxleC1mbG93OiByb3cgbm93cmFwO1xcbiAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XFxuICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC1sZyAubmF2YmFyLW5hdiB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtbGcgLm5hdmJhci1uYXYgLmRyb3Bkb3duLW1lbnUge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC1sZyAubmF2YmFyLW5hdiAubmF2LWxpbmsge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XFxuICAgIHBhZGRpbmctbGVmdDogMC41cmVtO1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtbGcgPiAuY29udGFpbmVyLFxcbiAgLm5hdmJhci1leHBhbmQtbGcgPiAuY29udGFpbmVyLWZsdWlkIHtcXG4gICAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xcbiAgICBmbGV4LXdyYXA6IG5vd3JhcDtcXG4gIH1cXG4gIC5uYXZiYXItZXhwYW5kLWxnIC5uYXZiYXItY29sbGFwc2Uge1xcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbiAgICBmbGV4LWJhc2lzOiBhdXRvO1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtbGcgLm5hdmJhci10b2dnbGVyIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDExOTkuOThweCkge1xcbiAgLm5hdmJhci1leHBhbmQteGwgPiAuY29udGFpbmVyLFxcbiAgLm5hdmJhci1leHBhbmQteGwgPiAuY29udGFpbmVyLWZsdWlkIHtcXG4gICAgcGFkZGluZy1yaWdodDogMDtcXG4gICAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XFxuICAubmF2YmFyLWV4cGFuZC14bCB7XFxuICAgIC1tcy1mbGV4LWZsb3c6IHJvdyBub3dyYXA7XFxuICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcXG4gICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcXG4gIH1cXG4gIC5uYXZiYXItZXhwYW5kLXhsIC5uYXZiYXItbmF2IHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC14bCAubmF2YmFyLW5hdiAuZHJvcGRvd24tbWVudSB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIH1cXG4gIC5uYXZiYXItZXhwYW5kLXhsIC5uYXZiYXItbmF2IC5uYXYtbGluayB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDAuNXJlbTtcXG4gICAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC14bCA+IC5jb250YWluZXIsXFxuICAubmF2YmFyLWV4cGFuZC14bCA+IC5jb250YWluZXItZmx1aWQge1xcbiAgICAtbXMtZmxleC13cmFwOiBub3dyYXA7XFxuICAgIGZsZXgtd3JhcDogbm93cmFwO1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQteGwgLm5hdmJhci1jb2xsYXBzZSB7XFxuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94ICFpbXBvcnRhbnQ7XFxuICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcXG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XFxuICAgIGZsZXgtYmFzaXM6IGF1dG87XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC14bCAubmF2YmFyLXRvZ2dsZXIge1xcbiAgICBkaXNwbGF5OiBub25lO1xcbiAgfVxcbn1cXG5cXG4ubmF2YmFyLWV4cGFuZCB7XFxuICAtbXMtZmxleC1mbG93OiByb3cgbm93cmFwO1xcbiAgZmxleC1mbG93OiByb3cgbm93cmFwO1xcbiAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxufVxcblxcbi5uYXZiYXItZXhwYW5kID4gLmNvbnRhaW5lcixcXG4ubmF2YmFyLWV4cGFuZCA+IC5jb250YWluZXItZmx1aWQge1xcbiAgcGFkZGluZy1yaWdodDogMDtcXG4gIHBhZGRpbmctbGVmdDogMDtcXG59XFxuXFxuLm5hdmJhci1leHBhbmQgLm5hdmJhci1uYXYge1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbn1cXG5cXG4ubmF2YmFyLWV4cGFuZCAubmF2YmFyLW5hdiAuZHJvcGRvd24tbWVudSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxufVxcblxcbi5uYXZiYXItZXhwYW5kIC5uYXZiYXItbmF2IC5uYXYtbGluayB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XFxuICBwYWRkaW5nLWxlZnQ6IDAuNXJlbTtcXG59XFxuXFxuLm5hdmJhci1leHBhbmQgPiAuY29udGFpbmVyLFxcbi5uYXZiYXItZXhwYW5kID4gLmNvbnRhaW5lci1mbHVpZCB7XFxuICAtbXMtZmxleC13cmFwOiBub3dyYXA7XFxuICBmbGV4LXdyYXA6IG5vd3JhcDtcXG59XFxuXFxuLm5hdmJhci1leHBhbmQgLm5hdmJhci1jb2xsYXBzZSB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XFxuICBmbGV4LWJhc2lzOiBhdXRvO1xcbn1cXG5cXG4ubmF2YmFyLWV4cGFuZCAubmF2YmFyLXRvZ2dsZXIge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLm5hdmJhci1saWdodCAubmF2YmFyLWJyYW5kIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOSk7XFxufVxcblxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci1icmFuZDpob3ZlciwgLm5hdmJhci1saWdodCAubmF2YmFyLWJyYW5kOmZvY3VzIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOSk7XFxufVxcblxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci1uYXYgLm5hdi1saW5rIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XFxufVxcblxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci1uYXYgLm5hdi1saW5rOmhvdmVyLCAubmF2YmFyLWxpZ2h0IC5uYXZiYXItbmF2IC5uYXYtbGluazpmb2N1cyB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjcpO1xcbn1cXG5cXG4ubmF2YmFyLWxpZ2h0IC5uYXZiYXItbmF2IC5uYXYtbGluay5kaXNhYmxlZCB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjMpO1xcbn1cXG5cXG4ubmF2YmFyLWxpZ2h0IC5uYXZiYXItbmF2IC5zaG93ID4gLm5hdi1saW5rLFxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci1uYXYgLmFjdGl2ZSA+IC5uYXYtbGluayxcXG4ubmF2YmFyLWxpZ2h0IC5uYXZiYXItbmF2IC5uYXYtbGluay5zaG93LFxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci1uYXYgLm5hdi1saW5rLmFjdGl2ZSB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjkpO1xcbn1cXG5cXG4ubmF2YmFyLWxpZ2h0IC5uYXZiYXItdG9nZ2xlciB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSk7XFxufVxcblxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci10b2dnbGVyLWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSUzY3BhdGggc3Ryb2tlPSdyZ2JhKDAsIDAsIDAsIDAuNSknIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbWl0ZXJsaW1pdD0nMTAnIGQ9J000IDdoMjJNNCAxNWgyMk00IDIzaDIyJy8lM2UlM2Mvc3ZnJTNlXFxcIik7XFxufVxcblxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci10ZXh0IHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XFxufVxcblxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci10ZXh0IGEge1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC45KTtcXG59XFxuXFxuLm5hdmJhci1saWdodCAubmF2YmFyLXRleHQgYTpob3ZlciwgLm5hdmJhci1saWdodCAubmF2YmFyLXRleHQgYTpmb2N1cyB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjkpO1xcbn1cXG5cXG4ubmF2YmFyLWRhcmsgLm5hdmJhci1icmFuZCB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuXFxuLm5hdmJhci1kYXJrIC5uYXZiYXItYnJhbmQ6aG92ZXIsIC5uYXZiYXItZGFyayAubmF2YmFyLWJyYW5kOmZvY3VzIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG5cXG4ubmF2YmFyLWRhcmsgLm5hdmJhci1uYXYgLm5hdi1saW5rIHtcXG4gIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XFxufVxcblxcbi5uYXZiYXItZGFyayAubmF2YmFyLW5hdiAubmF2LWxpbms6aG92ZXIsIC5uYXZiYXItZGFyayAubmF2YmFyLW5hdiAubmF2LWxpbms6Zm9jdXMge1xcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NSk7XFxufVxcblxcbi5uYXZiYXItZGFyayAubmF2YmFyLW5hdiAubmF2LWxpbmsuZGlzYWJsZWQge1xcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSk7XFxufVxcblxcbi5uYXZiYXItZGFyayAubmF2YmFyLW5hdiAuc2hvdyA+IC5uYXYtbGluayxcXG4ubmF2YmFyLWRhcmsgLm5hdmJhci1uYXYgLmFjdGl2ZSA+IC5uYXYtbGluayxcXG4ubmF2YmFyLWRhcmsgLm5hdmJhci1uYXYgLm5hdi1saW5rLnNob3csXFxuLm5hdmJhci1kYXJrIC5uYXZiYXItbmF2IC5uYXYtbGluay5hY3RpdmUge1xcbiAgY29sb3I6ICNmZmY7XFxufVxcblxcbi5uYXZiYXItZGFyayAubmF2YmFyLXRvZ2dsZXIge1xcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xcbn1cXG5cXG4ubmF2YmFyLWRhcmsgLm5hdmJhci10b2dnbGVyLWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSUzY3BhdGggc3Ryb2tlPSdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSknIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbWl0ZXJsaW1pdD0nMTAnIGQ9J000IDdoMjJNNCAxNWgyMk00IDIzaDIyJy8lM2UlM2Mvc3ZnJTNlXFxcIik7XFxufVxcblxcbi5uYXZiYXItZGFyayAubmF2YmFyLXRleHQge1xcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcXG59XFxuXFxuLm5hdmJhci1kYXJrIC5uYXZiYXItdGV4dCBhIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG5cXG4ubmF2YmFyLWRhcmsgLm5hdmJhci10ZXh0IGE6aG92ZXIsIC5uYXZiYXItZGFyayAubmF2YmFyLXRleHQgYTpmb2N1cyB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuXFxuLmNhcmQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgbWluLXdpZHRoOiAwO1xcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY2xpcDogYm9yZGVyLWJveDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xMjUpO1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLmNhcmQgPiBociB7XFxuICBtYXJnaW4tcmlnaHQ6IDA7XFxuICBtYXJnaW4tbGVmdDogMDtcXG59XFxuXFxuLmNhcmQgPiAubGlzdC1ncm91cDpmaXJzdC1jaGlsZCAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLmNhcmQgPiAubGlzdC1ncm91cDpsYXN0LWNoaWxkIC5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZCB7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxufVxcblxcbi5jYXJkLWJvZHkge1xcbiAgLW1zLWZsZXg6IDEgMSBhdXRvO1xcbiAgZmxleDogMSAxIGF1dG87XFxuICBwYWRkaW5nOiAxLjI1cmVtO1xcbn1cXG5cXG4uY2FyZC10aXRsZSB7XFxuICBtYXJnaW4tYm90dG9tOiAwLjc1cmVtO1xcbn1cXG5cXG4uY2FyZC1zdWJ0aXRsZSB7XFxuICBtYXJnaW4tdG9wOiAtMC4zNzVyZW07XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbn1cXG5cXG4uY2FyZC10ZXh0Omxhc3QtY2hpbGQge1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG59XFxuXFxuLmNhcmQtbGluazpob3ZlciB7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcblxcbi5jYXJkLWxpbmsgKyAuY2FyZC1saW5rIHtcXG4gIG1hcmdpbi1sZWZ0OiAxLjI1cmVtO1xcbn1cXG5cXG4uY2FyZC1oZWFkZXIge1xcbiAgcGFkZGluZzogMC43NXJlbSAxLjI1cmVtO1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wMyk7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEyNSk7XFxufVxcblxcbi5jYXJkLWhlYWRlcjpmaXJzdC1jaGlsZCB7XFxuICBib3JkZXItcmFkaXVzOiBjYWxjKDAuMjVyZW0gLSAxcHgpIGNhbGMoMC4yNXJlbSAtIDFweCkgMCAwO1xcbn1cXG5cXG4uY2FyZC1oZWFkZXIgKyAubGlzdC1ncm91cCAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHtcXG4gIGJvcmRlci10b3A6IDA7XFxufVxcblxcbi5jYXJkLWZvb3RlciB7XFxuICBwYWRkaW5nOiAwLjc1cmVtIDEuMjVyZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDMpO1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xMjUpO1xcbn1cXG5cXG4uY2FyZC1mb290ZXI6bGFzdC1jaGlsZCB7XFxuICBib3JkZXItcmFkaXVzOiAwIDAgY2FsYygwLjI1cmVtIC0gMXB4KSBjYWxjKDAuMjVyZW0gLSAxcHgpO1xcbn1cXG5cXG4uY2FyZC1oZWFkZXItdGFicyB7XFxuICBtYXJnaW4tcmlnaHQ6IC0wLjYyNXJlbTtcXG4gIG1hcmdpbi1ib3R0b206IC0wLjc1cmVtO1xcbiAgbWFyZ2luLWxlZnQ6IC0wLjYyNXJlbTtcXG4gIGJvcmRlci1ib3R0b206IDA7XFxufVxcblxcbi5jYXJkLWhlYWRlci1waWxscyB7XFxuICBtYXJnaW4tcmlnaHQ6IC0wLjYyNXJlbTtcXG4gIG1hcmdpbi1sZWZ0OiAtMC42MjVyZW07XFxufVxcblxcbi5jYXJkLWltZy1vdmVybGF5IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIHBhZGRpbmc6IDEuMjVyZW07XFxufVxcblxcbi5jYXJkLWltZyB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGJvcmRlci1yYWRpdXM6IGNhbGMoMC4yNXJlbSAtIDFweCk7XFxufVxcblxcbi5jYXJkLWltZy10b3Age1xcbiAgd2lkdGg6IDEwMCU7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBjYWxjKDAuMjVyZW0gLSAxcHgpO1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IGNhbGMoMC4yNXJlbSAtIDFweCk7XFxufVxcblxcbi5jYXJkLWltZy1ib3R0b20ge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogY2FsYygwLjI1cmVtIC0gMXB4KTtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IGNhbGMoMC4yNXJlbSAtIDFweCk7XFxufVxcblxcbi5jYXJkLWRlY2sge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbn1cXG5cXG4uY2FyZC1kZWNrIC5jYXJkIHtcXG4gIG1hcmdpbi1ib3R0b206IDE1cHg7XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLmNhcmQtZGVjayB7XFxuICAgIC1tcy1mbGV4LWZsb3c6IHJvdyB3cmFwO1xcbiAgICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0xNXB4O1xcbiAgICBtYXJnaW4tbGVmdDogLTE1cHg7XFxuICB9XFxuICAuY2FyZC1kZWNrIC5jYXJkIHtcXG4gICAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIC1tcy1mbGV4OiAxIDAgMCU7XFxuICAgIGZsZXg6IDEgMCAwJTtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIG1hcmdpbi1yaWdodDogMTVweDtcXG4gICAgbWFyZ2luLWJvdHRvbTogMDtcXG4gICAgbWFyZ2luLWxlZnQ6IDE1cHg7XFxuICB9XFxufVxcblxcbi5jYXJkLWdyb3VwIHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG59XFxuXFxuLmNhcmQtZ3JvdXAgPiAuY2FyZCB7XFxuICBtYXJnaW4tYm90dG9tOiAxNXB4O1xcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIHtcXG4gIC5jYXJkLWdyb3VwIHtcXG4gICAgLW1zLWZsZXgtZmxvdzogcm93IHdyYXA7XFxuICAgIGZsZXgtZmxvdzogcm93IHdyYXA7XFxuICB9XFxuICAuY2FyZC1ncm91cCA+IC5jYXJkIHtcXG4gICAgLW1zLWZsZXg6IDEgMCAwJTtcXG4gICAgZmxleDogMSAwIDAlO1xcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgfVxcbiAgLmNhcmQtZ3JvdXAgPiAuY2FyZCArIC5jYXJkIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDA7XFxuICAgIGJvcmRlci1sZWZ0OiAwO1xcbiAgfVxcbiAgLmNhcmQtZ3JvdXAgPiAuY2FyZDpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XFxuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xcbiAgfVxcbiAgLmNhcmQtZ3JvdXAgPiAuY2FyZDpub3QoOmxhc3QtY2hpbGQpIC5jYXJkLWltZy10b3AsXFxuICAuY2FyZC1ncm91cCA+IC5jYXJkOm5vdCg6bGFzdC1jaGlsZCkgLmNhcmQtaGVhZGVyIHtcXG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XFxuICB9XFxuICAuY2FyZC1ncm91cCA+IC5jYXJkOm5vdCg6bGFzdC1jaGlsZCkgLmNhcmQtaW1nLWJvdHRvbSxcXG4gIC5jYXJkLWdyb3VwID4gLmNhcmQ6bm90KDpsYXN0LWNoaWxkKSAuY2FyZC1mb290ZXIge1xcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcXG4gIH1cXG4gIC5jYXJkLWdyb3VwID4gLmNhcmQ6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xcbiAgfVxcbiAgLmNhcmQtZ3JvdXAgPiAuY2FyZDpub3QoOmZpcnN0LWNoaWxkKSAuY2FyZC1pbWctdG9wLFxcbiAgLmNhcmQtZ3JvdXAgPiAuY2FyZDpub3QoOmZpcnN0LWNoaWxkKSAuY2FyZC1oZWFkZXIge1xcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xcbiAgfVxcbiAgLmNhcmQtZ3JvdXAgPiAuY2FyZDpub3QoOmZpcnN0LWNoaWxkKSAuY2FyZC1pbWctYm90dG9tLFxcbiAgLmNhcmQtZ3JvdXAgPiAuY2FyZDpub3QoOmZpcnN0LWNoaWxkKSAuY2FyZC1mb290ZXIge1xcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xcbiAgfVxcbn1cXG5cXG4uY2FyZC1jb2x1bW5zIC5jYXJkIHtcXG4gIG1hcmdpbi1ib3R0b206IDAuNzVyZW07XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLmNhcmQtY29sdW1ucyB7XFxuICAgIC13ZWJraXQtY29sdW1uLWNvdW50OiAzO1xcbiAgICAtbW96LWNvbHVtbi1jb3VudDogMztcXG4gICAgY29sdW1uLWNvdW50OiAzO1xcbiAgICAtd2Via2l0LWNvbHVtbi1nYXA6IDEuMjVyZW07XFxuICAgIC1tb3otY29sdW1uLWdhcDogMS4yNXJlbTtcXG4gICAgY29sdW1uLWdhcDogMS4yNXJlbTtcXG4gICAgb3JwaGFuczogMTtcXG4gICAgd2lkb3dzOiAxO1xcbiAgfVxcbiAgLmNhcmQtY29sdW1ucyAuY2FyZCB7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgd2lkdGg6IDEwMCU7XFxuICB9XFxufVxcblxcbi5hY2NvcmRpb24gPiAuY2FyZCB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG5cXG4uYWNjb3JkaW9uID4gLmNhcmQ6bm90KDpmaXJzdC1vZi10eXBlKSAuY2FyZC1oZWFkZXI6Zmlyc3QtY2hpbGQge1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG59XFxuXFxuLmFjY29yZGlvbiA+IC5jYXJkOm5vdCg6Zmlyc3Qtb2YtdHlwZSk6bm90KDpsYXN0LW9mLXR5cGUpIHtcXG4gIGJvcmRlci1ib3R0b206IDA7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbn1cXG5cXG4uYWNjb3JkaW9uID4gLmNhcmQ6Zmlyc3Qtb2YtdHlwZSB7XFxuICBib3JkZXItYm90dG9tOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xcbn1cXG5cXG4uYWNjb3JkaW9uID4gLmNhcmQ6bGFzdC1vZi10eXBlIHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG59XFxuXFxuLmFjY29yZGlvbiA+IC5jYXJkIC5jYXJkLWhlYWRlciB7XFxuICBtYXJnaW4tYm90dG9tOiAtMXB4O1xcbn1cXG5cXG4uYnJlYWRjcnVtYiB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgcGFkZGluZzogMC43NXJlbSAxcmVtO1xcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLmJyZWFkY3J1bWItaXRlbSArIC5icmVhZGNydW1iLWl0ZW0ge1xcbiAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XFxufVxcblxcbi5icmVhZGNydW1iLWl0ZW0gKyAuYnJlYWRjcnVtYi1pdGVtOjpiZWZvcmUge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgcGFkZGluZy1yaWdodDogMC41cmVtO1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICBjb250ZW50OiBcXFwiL1xcXCI7XFxufVxcblxcbi5icmVhZGNydW1iLWl0ZW0gKyAuYnJlYWRjcnVtYi1pdGVtOmhvdmVyOjpiZWZvcmUge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxufVxcblxcbi5icmVhZGNydW1iLWl0ZW0gKyAuYnJlYWRjcnVtYi1pdGVtOmhvdmVyOjpiZWZvcmUge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbn1cXG5cXG4uYnJlYWRjcnVtYi1pdGVtLmFjdGl2ZSB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG59XFxuXFxuLnBhZ2luYXRpb24ge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgbGlzdC1zdHlsZTogbm9uZTtcXG4gIGJvcmRlci1yYWRpdXM6IDAuMjVyZW07XFxufVxcblxcbi5wYWdlLWxpbmsge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwYWRkaW5nOiAwLjVyZW0gMC43NXJlbTtcXG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xcbiAgbGluZS1oZWlnaHQ6IDEuMjU7XFxuICBjb2xvcjogIzAwN2JmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZGVlMmU2O1xcbn1cXG5cXG4ucGFnZS1saW5rOmhvdmVyIHtcXG4gIHotaW5kZXg6IDI7XFxuICBjb2xvcjogIzAwNTZiMztcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlOWVjZWY7XFxuICBib3JkZXItY29sb3I6ICNkZWUyZTY7XFxufVxcblxcbi5wYWdlLWxpbms6Zm9jdXMge1xcbiAgei1pbmRleDogMjtcXG4gIG91dGxpbmU6IDA7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgwLCAxMjMsIDI1NSwgMC4yNSk7XFxufVxcblxcbi5wYWdlLWl0ZW06Zmlyc3QtY2hpbGQgLnBhZ2UtbGluayB7XFxuICBtYXJnaW4tbGVmdDogMDtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4ucGFnZS1pdGVtOmxhc3QtY2hpbGQgLnBhZ2UtbGluayB7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4ucGFnZS1pdGVtLmFjdGl2ZSAucGFnZS1saW5rIHtcXG4gIHotaW5kZXg6IDE7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDdiZmY7XFxuICBib3JkZXItY29sb3I6ICMwMDdiZmY7XFxufVxcblxcbi5wYWdlLWl0ZW0uZGlzYWJsZWQgLnBhZ2UtbGluayB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgY3Vyc29yOiBhdXRvO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlci1jb2xvcjogI2RlZTJlNjtcXG59XFxuXFxuLnBhZ2luYXRpb24tbGcgLnBhZ2UtbGluayB7XFxuICBwYWRkaW5nOiAwLjc1cmVtIDEuNXJlbTtcXG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxufVxcblxcbi5wYWdpbmF0aW9uLWxnIC5wYWdlLWl0ZW06Zmlyc3QtY2hpbGQgLnBhZ2UtbGluayB7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwLjNyZW07XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwLjNyZW07XFxufVxcblxcbi5wYWdpbmF0aW9uLWxnIC5wYWdlLWl0ZW06bGFzdC1jaGlsZCAucGFnZS1saW5rIHtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjNyZW07XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4zcmVtO1xcbn1cXG5cXG4ucGFnaW5hdGlvbi1zbSAucGFnZS1saW5rIHtcXG4gIHBhZGRpbmc6IDAuMjVyZW0gMC41cmVtO1xcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxufVxcblxcbi5wYWdpbmF0aW9uLXNtIC5wYWdlLWl0ZW06Zmlyc3QtY2hpbGQgLnBhZ2UtbGluayB7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwLjJyZW07XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwLjJyZW07XFxufVxcblxcbi5wYWdpbmF0aW9uLXNtIC5wYWdlLWl0ZW06bGFzdC1jaGlsZCAucGFnZS1saW5rIHtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjJyZW07XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4ycmVtO1xcbn1cXG5cXG4uYmFkZ2Uge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgcGFkZGluZzogMC4yNWVtIDAuNGVtO1xcbiAgZm9udC1zaXplOiA3NSU7XFxuICBmb250LXdlaWdodDogNzAwO1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG4gIHRyYW5zaXRpb246IGNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJveC1zaGFkb3cgMC4xNXMgZWFzZS1pbi1vdXQ7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAuYmFkZ2Uge1xcbiAgICB0cmFuc2l0aW9uOiBub25lO1xcbiAgfVxcbn1cXG5cXG5hLmJhZGdlOmhvdmVyLCBhLmJhZGdlOmZvY3VzIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuXFxuLmJhZGdlOmVtcHR5IHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi5idG4gLmJhZGdlIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHRvcDogLTFweDtcXG59XFxuXFxuLmJhZGdlLXBpbGwge1xcbiAgcGFkZGluZy1yaWdodDogMC42ZW07XFxuICBwYWRkaW5nLWxlZnQ6IDAuNmVtO1xcbiAgYm9yZGVyLXJhZGl1czogMTByZW07XFxufVxcblxcbi5iYWRnZS1wcmltYXJ5IHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjtcXG59XFxuXFxuYS5iYWRnZS1wcmltYXJ5OmhvdmVyLCBhLmJhZGdlLXByaW1hcnk6Zm9jdXMge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA2MmNjO1xcbn1cXG5cXG5hLmJhZGdlLXByaW1hcnk6Zm9jdXMsIGEuYmFkZ2UtcHJpbWFyeS5mb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMCwgMTIzLCAyNTUsIDAuNSk7XFxufVxcblxcbi5iYWRnZS1zZWNvbmRhcnkge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM3NTdkO1xcbn1cXG5cXG5hLmJhZGdlLXNlY29uZGFyeTpob3ZlciwgYS5iYWRnZS1zZWNvbmRhcnk6Zm9jdXMge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTQ1YjYyO1xcbn1cXG5cXG5hLmJhZGdlLXNlY29uZGFyeTpmb2N1cywgYS5iYWRnZS1zZWNvbmRhcnkuZm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDEwOCwgMTE3LCAxMjUsIDAuNSk7XFxufVxcblxcbi5iYWRnZS1zdWNjZXNzIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI4YTc0NTtcXG59XFxuXFxuYS5iYWRnZS1zdWNjZXNzOmhvdmVyLCBhLmJhZGdlLXN1Y2Nlc3M6Zm9jdXMge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWU3ZTM0O1xcbn1cXG5cXG5hLmJhZGdlLXN1Y2Nlc3M6Zm9jdXMsIGEuYmFkZ2Utc3VjY2Vzcy5mb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNDAsIDE2NywgNjksIDAuNSk7XFxufVxcblxcbi5iYWRnZS1pbmZvIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE3YTJiODtcXG59XFxuXFxuYS5iYWRnZS1pbmZvOmhvdmVyLCBhLmJhZGdlLWluZm86Zm9jdXMge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTE3YThiO1xcbn1cXG5cXG5hLmJhZGdlLWluZm86Zm9jdXMsIGEuYmFkZ2UtaW5mby5mb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjMsIDE2MiwgMTg0LCAwLjUpO1xcbn1cXG5cXG4uYmFkZ2Utd2FybmluZyB7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmMxMDc7XFxufVxcblxcbmEuYmFkZ2Utd2FybmluZzpob3ZlciwgYS5iYWRnZS13YXJuaW5nOmZvY3VzIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QzOWUwMDtcXG59XFxuXFxuYS5iYWRnZS13YXJuaW5nOmZvY3VzLCBhLmJhZGdlLXdhcm5pbmcuZm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDI1NSwgMTkzLCA3LCAwLjUpO1xcbn1cXG5cXG4uYmFkZ2UtZGFuZ2VyIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RjMzU0NTtcXG59XFxuXFxuYS5iYWRnZS1kYW5nZXI6aG92ZXIsIGEuYmFkZ2UtZGFuZ2VyOmZvY3VzIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2JkMjEzMDtcXG59XFxuXFxuYS5iYWRnZS1kYW5nZXI6Zm9jdXMsIGEuYmFkZ2UtZGFuZ2VyLmZvY3VzIHtcXG4gIG91dGxpbmU6IDA7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgyMjAsIDUzLCA2OSwgMC41KTtcXG59XFxuXFxuLmJhZGdlLWxpZ2h0IHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcXG59XFxuXFxuYS5iYWRnZS1saWdodDpob3ZlciwgYS5iYWRnZS1saWdodDpmb2N1cyB7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkYWUwZTU7XFxufVxcblxcbmEuYmFkZ2UtbGlnaHQ6Zm9jdXMsIGEuYmFkZ2UtbGlnaHQuZm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDI0OCwgMjQ5LCAyNTAsIDAuNSk7XFxufVxcblxcbi5iYWRnZS1kYXJrIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM0M2E0MDtcXG59XFxuXFxuYS5iYWRnZS1kYXJrOmhvdmVyLCBhLmJhZGdlLWRhcms6Zm9jdXMge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWQyMTI0O1xcbn1cXG5cXG5hLmJhZGdlLWRhcms6Zm9jdXMsIGEuYmFkZ2UtZGFyay5mb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNTIsIDU4LCA2NCwgMC41KTtcXG59XFxuXFxuLmp1bWJvdHJvbiB7XFxuICBwYWRkaW5nOiAycmVtIDFyZW07XFxuICBtYXJnaW4tYm90dG9tOiAycmVtO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U5ZWNlZjtcXG4gIGJvcmRlci1yYWRpdXM6IDAuM3JlbTtcXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDU3NnB4KSB7XFxuICAuanVtYm90cm9uIHtcXG4gICAgcGFkZGluZzogNHJlbSAycmVtO1xcbiAgfVxcbn1cXG5cXG4uanVtYm90cm9uLWZsdWlkIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDA7XFxuICBwYWRkaW5nLWxlZnQ6IDA7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbn1cXG5cXG4uYWxlcnQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgcGFkZGluZzogMC43NXJlbSAxLjI1cmVtO1xcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLmFsZXJ0LWhlYWRpbmcge1xcbiAgY29sb3I6IGluaGVyaXQ7XFxufVxcblxcbi5hbGVydC1saW5rIHtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxufVxcblxcbi5hbGVydC1kaXNtaXNzaWJsZSB7XFxuICBwYWRkaW5nLXJpZ2h0OiA0cmVtO1xcbn1cXG5cXG4uYWxlcnQtZGlzbWlzc2libGUgLmNsb3NlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgcGFkZGluZzogMC43NXJlbSAxLjI1cmVtO1xcbiAgY29sb3I6IGluaGVyaXQ7XFxufVxcblxcbi5hbGVydC1wcmltYXJ5IHtcXG4gIGNvbG9yOiAjMDA0MDg1O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NjZTVmZjtcXG4gIGJvcmRlci1jb2xvcjogI2I4ZGFmZjtcXG59XFxuXFxuLmFsZXJ0LXByaW1hcnkgaHIge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogIzlmY2RmZjtcXG59XFxuXFxuLmFsZXJ0LXByaW1hcnkgLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICMwMDI3NTI7XFxufVxcblxcbi5hbGVydC1zZWNvbmRhcnkge1xcbiAgY29sb3I6ICMzODNkNDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTJlM2U1O1xcbiAgYm9yZGVyLWNvbG9yOiAjZDZkOGRiO1xcbn1cXG5cXG4uYWxlcnQtc2Vjb25kYXJ5IGhyIHtcXG4gIGJvcmRlci10b3AtY29sb3I6ICNjOGNiY2Y7XFxufVxcblxcbi5hbGVydC1zZWNvbmRhcnkgLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICMyMDIzMjY7XFxufVxcblxcbi5hbGVydC1zdWNjZXNzIHtcXG4gIGNvbG9yOiAjMTU1NzI0O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q0ZWRkYTtcXG4gIGJvcmRlci1jb2xvcjogI2MzZTZjYjtcXG59XFxuXFxuLmFsZXJ0LXN1Y2Nlc3MgaHIge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2IxZGZiYjtcXG59XFxuXFxuLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICMwYjJlMTM7XFxufVxcblxcbi5hbGVydC1pbmZvIHtcXG4gIGNvbG9yOiAjMGM1NDYwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QxZWNmMTtcXG4gIGJvcmRlci1jb2xvcjogI2JlZTVlYjtcXG59XFxuXFxuLmFsZXJ0LWluZm8gaHIge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2FiZGRlNTtcXG59XFxuXFxuLmFsZXJ0LWluZm8gLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICMwNjJjMzM7XFxufVxcblxcbi5hbGVydC13YXJuaW5nIHtcXG4gIGNvbG9yOiAjODU2NDA0O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjNjZDtcXG4gIGJvcmRlci1jb2xvcjogI2ZmZWViYTtcXG59XFxuXFxuLmFsZXJ0LXdhcm5pbmcgaHIge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2ZmZThhMTtcXG59XFxuXFxuLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICM1MzNmMDM7XFxufVxcblxcbi5hbGVydC1kYW5nZXIge1xcbiAgY29sb3I6ICM3MjFjMjQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhkN2RhO1xcbiAgYm9yZGVyLWNvbG9yOiAjZjVjNmNiO1xcbn1cXG5cXG4uYWxlcnQtZGFuZ2VyIGhyIHtcXG4gIGJvcmRlci10b3AtY29sb3I6ICNmMWIwYjc7XFxufVxcblxcbi5hbGVydC1kYW5nZXIgLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICM0OTEyMTc7XFxufVxcblxcbi5hbGVydC1saWdodCB7XFxuICBjb2xvcjogIzgxODE4MjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZWZlZmU7XFxuICBib3JkZXItY29sb3I6ICNmZGZkZmU7XFxufVxcblxcbi5hbGVydC1saWdodCBociB7XFxuICBib3JkZXItdG9wLWNvbG9yOiAjZWNlY2Y2O1xcbn1cXG5cXG4uYWxlcnQtbGlnaHQgLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICM2ODY4Njg7XFxufVxcblxcbi5hbGVydC1kYXJrIHtcXG4gIGNvbG9yOiAjMWIxZTIxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q2ZDhkOTtcXG4gIGJvcmRlci1jb2xvcjogI2M2YzhjYTtcXG59XFxuXFxuLmFsZXJ0LWRhcmsgaHIge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2I5YmJiZTtcXG59XFxuXFxuLmFsZXJ0LWRhcmsgLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICMwNDA1MDU7XFxufVxcblxcbkAtd2Via2l0LWtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlcyB7XFxuICBmcm9tIHtcXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMXJlbSAwO1xcbiAgfVxcbiAgdG8ge1xcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7XFxuICB9XFxufVxcblxcbkBrZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXMge1xcbiAgZnJvbSB7XFxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDFyZW0gMDtcXG4gIH1cXG4gIHRvIHtcXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwO1xcbiAgfVxcbn1cXG5cXG4ucHJvZ3Jlc3Mge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgaGVpZ2h0OiAxcmVtO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGZvbnQtc2l6ZTogMC43NXJlbTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlOWVjZWY7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4ucHJvZ3Jlc3MtYmFyIHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgY29sb3I6ICNmZmY7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjtcXG4gIHRyYW5zaXRpb246IHdpZHRoIDAuNnMgZWFzZTtcXG59XFxuXFxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcXG4gIC5wcm9ncmVzcy1iYXIge1xcbiAgICB0cmFuc2l0aW9uOiBub25lO1xcbiAgfVxcbn1cXG5cXG4ucHJvZ3Jlc3MtYmFyLXN0cmlwZWQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XFxuICBiYWNrZ3JvdW5kLXNpemU6IDFyZW0gMXJlbTtcXG59XFxuXFxuLnByb2dyZXNzLWJhci1hbmltYXRlZCB7XFxuICAtd2Via2l0LWFuaW1hdGlvbjogcHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMXMgbGluZWFyIGluZmluaXRlO1xcbiAgYW5pbWF0aW9uOiBwcm9ncmVzcy1iYXItc3RyaXBlcyAxcyBsaW5lYXIgaW5maW5pdGU7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAucHJvZ3Jlc3MtYmFyLWFuaW1hdGVkIHtcXG4gICAgLXdlYmtpdC1hbmltYXRpb246IG5vbmU7XFxuICAgIGFuaW1hdGlvbjogbm9uZTtcXG4gIH1cXG59XFxuXFxuLm1lZGlhIHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWFsaWduOiBzdGFydDtcXG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbn1cXG5cXG4ubWVkaWEtYm9keSB7XFxuICAtbXMtZmxleDogMTtcXG4gIGZsZXg6IDE7XFxufVxcblxcbi5saXN0LWdyb3VwIHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIHBhZGRpbmctbGVmdDogMDtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgY29sb3I6ICM0OTUwNTc7XFxuICB0ZXh0LWFsaWduOiBpbmhlcml0O1xcbn1cXG5cXG4ubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpob3ZlciwgLmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb246Zm9jdXMge1xcbiAgei1pbmRleDogMTtcXG4gIGNvbG9yOiAjNDk1MDU3O1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb246YWN0aXZlIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U5ZWNlZjtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaXRlbSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHBhZGRpbmc6IDAuNzVyZW0gMS4yNXJlbTtcXG4gIG1hcmdpbi1ib3R0b206IC0xcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEyNSk7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMC4yNXJlbTtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4ubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGQge1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwLjI1cmVtO1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZCwgLmxpc3QtZ3JvdXAtaXRlbTpkaXNhYmxlZCB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUge1xcbiAgei1pbmRleDogMjtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjtcXG4gIGJvcmRlci1jb2xvcjogIzAwN2JmZjtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbCB7XFxuICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxufVxcblxcbi5saXN0LWdyb3VwLWhvcml6b250YWwgLmxpc3QtZ3JvdXAtaXRlbSB7XFxuICBtYXJnaW4tcmlnaHQ6IC0xcHg7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbn1cXG5cXG4ubGlzdC1ncm91cC1ob3Jpem9udGFsIC5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMC4yNXJlbTtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbCAubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGQge1xcbiAgbWFyZ2luLXJpZ2h0OiAwO1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDAuMjVyZW07XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1zbSB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgfVxcbiAgLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1zbSAubGlzdC1ncm91cC1pdGVtIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtMXB4O1xcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgfVxcbiAgLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1zbSAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHtcXG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMC4yNXJlbTtcXG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMC4yNXJlbTtcXG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XFxuICB9XFxuICAubGlzdC1ncm91cC1ob3Jpem9udGFsLXNtIC5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZCB7XFxuICAgIG1hcmdpbi1yaWdodDogMDtcXG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDAuMjVyZW07XFxuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwLjI1cmVtO1xcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gIC5saXN0LWdyb3VwLWhvcml6b250YWwtbWQge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIH1cXG4gIC5saXN0LWdyb3VwLWhvcml6b250YWwtbWQgLmxpc3QtZ3JvdXAtaXRlbSB7XFxuICAgIG1hcmdpbi1yaWdodDogLTFweDtcXG4gICAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIH1cXG4gIC5saXN0LWdyb3VwLWhvcml6b250YWwtbWQgLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZCB7XFxuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xcbiAgfVxcbiAgLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1tZCAubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGQge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XFxuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjI1cmVtO1xcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XFxuICAubGlzdC1ncm91cC1ob3Jpem9udGFsLWxnIHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICB9XFxuICAubGlzdC1ncm91cC1ob3Jpem9udGFsLWxnIC5saXN0LWdyb3VwLWl0ZW0ge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0xcHg7XFxuICAgIG1hcmdpbi1ib3R0b206IDA7XFxuICB9XFxuICAubGlzdC1ncm91cC1ob3Jpem9udGFsLWxnIC5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwLjI1cmVtO1xcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwLjI1cmVtO1xcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG4gIH1cXG4gIC5saXN0LWdyb3VwLWhvcml6b250YWwtbGcgLmxpc3QtZ3JvdXAtaXRlbTpsYXN0LWNoaWxkIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG4gICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDAuMjVyZW07XFxuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC5saXN0LWdyb3VwLWhvcml6b250YWwteGwge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIH1cXG4gIC5saXN0LWdyb3VwLWhvcml6b250YWwteGwgLmxpc3QtZ3JvdXAtaXRlbSB7XFxuICAgIG1hcmdpbi1yaWdodDogLTFweDtcXG4gICAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIH1cXG4gIC5saXN0LWdyb3VwLWhvcml6b250YWwteGwgLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZCB7XFxuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xcbiAgfVxcbiAgLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC14bCAubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGQge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XFxuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjI1cmVtO1xcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcXG4gIH1cXG59XFxuXFxuLmxpc3QtZ3JvdXAtZmx1c2ggLmxpc3QtZ3JvdXAtaXRlbSB7XFxuICBib3JkZXItcmlnaHQ6IDA7XFxuICBib3JkZXItbGVmdDogMDtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxufVxcblxcbi5saXN0LWdyb3VwLWZsdXNoIC5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZCB7XFxuICBtYXJnaW4tYm90dG9tOiAtMXB4O1xcbn1cXG5cXG4ubGlzdC1ncm91cC1mbHVzaDpmaXJzdC1jaGlsZCAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHtcXG4gIGJvcmRlci10b3A6IDA7XFxufVxcblxcbi5saXN0LWdyb3VwLWZsdXNoOmxhc3QtY2hpbGQgLmxpc3QtZ3JvdXAtaXRlbTpsYXN0LWNoaWxkIHtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxuICBib3JkZXItYm90dG9tOiAwO1xcbn1cXG5cXG4ubGlzdC1ncm91cC1pdGVtLXByaW1hcnkge1xcbiAgY29sb3I6ICMwMDQwODU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjhkYWZmO1xcbn1cXG5cXG4ubGlzdC1ncm91cC1pdGVtLXByaW1hcnkubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpob3ZlciwgLmxpc3QtZ3JvdXAtaXRlbS1wcmltYXJ5Lmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb246Zm9jdXMge1xcbiAgY29sb3I6ICMwMDQwODU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWZjZGZmO1xcbn1cXG5cXG4ubGlzdC1ncm91cC1pdGVtLXByaW1hcnkubGlzdC1ncm91cC1pdGVtLWFjdGlvbi5hY3RpdmUge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA0MDg1O1xcbiAgYm9yZGVyLWNvbG9yOiAjMDA0MDg1O1xcbn1cXG5cXG4ubGlzdC1ncm91cC1pdGVtLXNlY29uZGFyeSB7XFxuICBjb2xvcjogIzM4M2Q0MTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkNmQ4ZGI7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tc2Vjb25kYXJ5Lmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb246aG92ZXIsIC5saXN0LWdyb3VwLWl0ZW0tc2Vjb25kYXJ5Lmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb246Zm9jdXMge1xcbiAgY29sb3I6ICMzODNkNDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzhjYmNmO1xcbn1cXG5cXG4ubGlzdC1ncm91cC1pdGVtLXNlY29uZGFyeS5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uLmFjdGl2ZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzODNkNDE7XFxuICBib3JkZXItY29sb3I6ICMzODNkNDE7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2VzcyB7XFxuICBjb2xvcjogIzE1NTcyNDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjM2U2Y2I7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmhvdmVyLCAubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpmb2N1cyB7XFxuICBjb2xvcjogIzE1NTcyNDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiMWRmYmI7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uLmFjdGl2ZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxNTU3MjQ7XFxuICBib3JkZXItY29sb3I6ICMxNTU3MjQ7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0taW5mbyB7XFxuICBjb2xvcjogIzBjNTQ2MDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiZWU1ZWI7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0taW5mby5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmhvdmVyLCAubGlzdC1ncm91cC1pdGVtLWluZm8ubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpmb2N1cyB7XFxuICBjb2xvcjogIzBjNTQ2MDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhYmRkZTU7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0taW5mby5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uLmFjdGl2ZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwYzU0NjA7XFxuICBib3JkZXItY29sb3I6ICMwYzU0NjA7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZyB7XFxuICBjb2xvcjogIzg1NjQwNDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmVlYmE7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZy5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmhvdmVyLCAubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpmb2N1cyB7XFxuICBjb2xvcjogIzg1NjQwNDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmU4YTE7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZy5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uLmFjdGl2ZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4NTY0MDQ7XFxuICBib3JkZXItY29sb3I6ICM4NTY0MDQ7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyIHtcXG4gIGNvbG9yOiAjNzIxYzI0O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1YzZjYjtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpob3ZlciwgLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpmb2N1cyB7XFxuICBjb2xvcjogIzcyMWMyNDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmMWIwYjc7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyLmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb24uYWN0aXZlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzcyMWMyNDtcXG4gIGJvcmRlci1jb2xvcjogIzcyMWMyNDtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaXRlbS1saWdodCB7XFxuICBjb2xvcjogIzgxODE4MjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZGZkZmU7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tbGlnaHQubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpob3ZlciwgLmxpc3QtZ3JvdXAtaXRlbS1saWdodC5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmZvY3VzIHtcXG4gIGNvbG9yOiAjODE4MTgyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNmNjtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaXRlbS1saWdodC5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uLmFjdGl2ZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MTgxODI7XFxuICBib3JkZXItY29sb3I6ICM4MTgxODI7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tZGFyayB7XFxuICBjb2xvcjogIzFiMWUyMTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjNmM4Y2E7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tZGFyay5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmhvdmVyLCAubGlzdC1ncm91cC1pdGVtLWRhcmsubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpmb2N1cyB7XFxuICBjb2xvcjogIzFiMWUyMTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiOWJiYmU7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tZGFyay5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uLmFjdGl2ZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxYjFlMjE7XFxuICBib3JkZXItY29sb3I6ICMxYjFlMjE7XFxufVxcblxcbi5jbG9zZSB7XFxuICBmbG9hdDogcmlnaHQ7XFxuICBmb250LXNpemU6IDEuNXJlbTtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxuICBsaW5lLWhlaWdodDogMTtcXG4gIGNvbG9yOiAjMDAwO1xcbiAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI2ZmZjtcXG4gIG9wYWNpdHk6IC41O1xcbn1cXG5cXG4uY2xvc2U6aG92ZXIge1xcbiAgY29sb3I6ICMwMDA7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcblxcbi5jbG9zZTpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTpob3ZlciwgLmNsb3NlOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmZvY3VzIHtcXG4gIG9wYWNpdHk6IC43NTtcXG59XFxuXFxuYnV0dG9uLmNsb3NlIHtcXG4gIHBhZGRpbmc6IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogMDtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG4gIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcXG4gIGFwcGVhcmFuY2U6IG5vbmU7XFxufVxcblxcbmEuY2xvc2UuZGlzYWJsZWQge1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi50b2FzdCB7XFxuICBtYXgtd2lkdGg6IDM1MHB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODUpO1xcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xKTtcXG4gIGJveC1zaGFkb3c6IDAgMC4yNXJlbSAwLjc1cmVtIHJnYmEoMCwgMCwgMCwgMC4xKTtcXG4gIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpO1xcbiAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpO1xcbiAgb3BhY2l0eTogMDtcXG4gIGJvcmRlci1yYWRpdXM6IDAuMjVyZW07XFxufVxcblxcbi50b2FzdDpub3QoOmxhc3QtY2hpbGQpIHtcXG4gIG1hcmdpbi1ib3R0b206IDAuNzVyZW07XFxufVxcblxcbi50b2FzdC5zaG93aW5nIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi50b2FzdC5zaG93IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLnRvYXN0LmhpZGUge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLnRvYXN0LWhlYWRlciB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIHBhZGRpbmc6IDAuMjVyZW0gMC43NXJlbTtcXG4gIGNvbG9yOiAjNmM3NTdkO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg1KTtcXG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjA1KTtcXG59XFxuXFxuLnRvYXN0LWJvZHkge1xcbiAgcGFkZGluZzogMC43NXJlbTtcXG59XFxuXFxuLm1vZGFsLW9wZW4ge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuXFxuLm1vZGFsLW9wZW4gLm1vZGFsIHtcXG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxufVxcblxcbi5tb2RhbCB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgei1pbmRleDogMTA1MDtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBvdXRsaW5lOiAwO1xcbn1cXG5cXG4ubW9kYWwtZGlhbG9nIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHdpZHRoOiBhdXRvO1xcbiAgbWFyZ2luOiAwLjVyZW07XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuLm1vZGFsLmZhZGUgLm1vZGFsLWRpYWxvZyB7XFxuICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjNzIGVhc2Utb3V0O1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgZWFzZS1vdXQ7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcyBlYXNlLW91dCwgLXdlYmtpdC10cmFuc2Zvcm0gMC4zcyBlYXNlLW91dDtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTUwcHgpO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTUwcHgpO1xcbn1cXG5cXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xcbiAgLm1vZGFsLmZhZGUgLm1vZGFsLWRpYWxvZyB7XFxuICAgIHRyYW5zaXRpb246IG5vbmU7XFxuICB9XFxufVxcblxcbi5tb2RhbC5zaG93IC5tb2RhbC1kaWFsb2cge1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IG5vbmU7XFxuICB0cmFuc2Zvcm06IG5vbmU7XFxufVxcblxcbi5tb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZSB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBtYXgtaGVpZ2h0OiBjYWxjKDEwMCUgLSAxcmVtKTtcXG59XFxuXFxuLm1vZGFsLWRpYWxvZy1zY3JvbGxhYmxlIC5tb2RhbC1jb250ZW50IHtcXG4gIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAxcmVtKTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5tb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZSAubW9kYWwtaGVhZGVyLFxcbi5tb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZSAubW9kYWwtZm9vdGVyIHtcXG4gIC1tcy1mbGV4LW5lZ2F0aXZlOiAwO1xcbiAgZmxleC1zaHJpbms6IDA7XFxufVxcblxcbi5tb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZSAubW9kYWwtYm9keSB7XFxuICBvdmVyZmxvdy15OiBhdXRvO1xcbn1cXG5cXG4ubW9kYWwtZGlhbG9nLWNlbnRlcmVkIHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgbWluLWhlaWdodDogY2FsYygxMDAlIC0gMXJlbSk7XFxufVxcblxcbi5tb2RhbC1kaWFsb2ctY2VudGVyZWQ6OmJlZm9yZSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGhlaWdodDogY2FsYygxMDB2aCAtIDFyZW0pO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxufVxcblxcbi5tb2RhbC1kaWFsb2ctY2VudGVyZWQubW9kYWwtZGlhbG9nLXNjcm9sbGFibGUge1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcblxcbi5tb2RhbC1kaWFsb2ctY2VudGVyZWQubW9kYWwtZGlhbG9nLXNjcm9sbGFibGUgLm1vZGFsLWNvbnRlbnQge1xcbiAgbWF4LWhlaWdodDogbm9uZTtcXG59XFxuXFxuLm1vZGFsLWRpYWxvZy1jZW50ZXJlZC5tb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZTo6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IG5vbmU7XFxufVxcblxcbi5tb2RhbC1jb250ZW50IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgcG9pbnRlci1ldmVudHM6IGF1dG87XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4yKTtcXG4gIGJvcmRlci1yYWRpdXM6IDAuM3JlbTtcXG4gIG91dGxpbmU6IDA7XFxufVxcblxcbi5tb2RhbC1iYWNrZHJvcCB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgei1pbmRleDogMTA0MDtcXG4gIHdpZHRoOiAxMDB2dztcXG4gIGhlaWdodDogMTAwdmg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xcbn1cXG5cXG4ubW9kYWwtYmFja2Ryb3AuZmFkZSB7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG5cXG4ubW9kYWwtYmFja2Ryb3Auc2hvdyB7XFxuICBvcGFjaXR5OiAwLjU7XFxufVxcblxcbi5tb2RhbC1oZWFkZXIge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0O1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxuICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgcGFkZGluZzogMXJlbSAxcmVtO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZWUyZTY7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwLjNyZW07XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC4zcmVtO1xcbn1cXG5cXG4ubW9kYWwtaGVhZGVyIC5jbG9zZSB7XFxuICBwYWRkaW5nOiAxcmVtIDFyZW07XFxuICBtYXJnaW46IC0xcmVtIC0xcmVtIC0xcmVtIGF1dG87XFxufVxcblxcbi5tb2RhbC10aXRsZSB7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG59XFxuXFxuLm1vZGFsLWJvZHkge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgLW1zLWZsZXg6IDEgMSBhdXRvO1xcbiAgZmxleDogMSAxIGF1dG87XFxuICBwYWRkaW5nOiAxcmVtO1xcbn1cXG5cXG4ubW9kYWwtZm9vdGVyIHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgLW1zLWZsZXgtcGFjazogZW5kO1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG4gIHBhZGRpbmc6IDFyZW07XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RlZTJlNjtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwLjNyZW07XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwLjNyZW07XFxufVxcblxcbi5tb2RhbC1mb290ZXIgPiA6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgbWFyZ2luLWxlZnQ6IC4yNXJlbTtcXG59XFxuXFxuLm1vZGFsLWZvb3RlciA+IDpub3QoOmxhc3QtY2hpbGQpIHtcXG4gIG1hcmdpbi1yaWdodDogLjI1cmVtO1xcbn1cXG5cXG4ubW9kYWwtc2Nyb2xsYmFyLW1lYXN1cmUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAtOTk5OXB4O1xcbiAgd2lkdGg6IDUwcHg7XFxuICBoZWlnaHQ6IDUwcHg7XFxuICBvdmVyZmxvdzogc2Nyb2xsO1xcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIHtcXG4gIC5tb2RhbC1kaWFsb2cge1xcbiAgICBtYXgtd2lkdGg6IDUwMHB4O1xcbiAgICBtYXJnaW46IDEuNzVyZW0gYXV0bztcXG4gIH1cXG4gIC5tb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZSB7XFxuICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIDMuNXJlbSk7XFxuICB9XFxuICAubW9kYWwtZGlhbG9nLXNjcm9sbGFibGUgLm1vZGFsLWNvbnRlbnQge1xcbiAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMy41cmVtKTtcXG4gIH1cXG4gIC5tb2RhbC1kaWFsb2ctY2VudGVyZWQge1xcbiAgICBtaW4taGVpZ2h0OiBjYWxjKDEwMCUgLSAzLjVyZW0pO1xcbiAgfVxcbiAgLm1vZGFsLWRpYWxvZy1jZW50ZXJlZDo6YmVmb3JlIHtcXG4gICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMy41cmVtKTtcXG4gIH1cXG4gIC5tb2RhbC1zbSB7XFxuICAgIG1heC13aWR0aDogMzAwcHg7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xcbiAgLm1vZGFsLWxnLFxcbiAgLm1vZGFsLXhsIHtcXG4gICAgbWF4LXdpZHRoOiA4MDBweDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xcbiAgLm1vZGFsLXhsIHtcXG4gICAgbWF4LXdpZHRoOiAxMTQwcHg7XFxuICB9XFxufVxcblxcbi50b29sdGlwIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHotaW5kZXg6IDEwNzA7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFxcXCJTZWdvZSBVSVxcXCIsIFJvYm90bywgXFxcIkhlbHZldGljYSBOZXVlXFxcIiwgQXJpYWwsIFxcXCJOb3RvIFNhbnNcXFwiLCBzYW5zLXNlcmlmLCBcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLCBcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLCBcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIiwgXFxcIk5vdG8gQ29sb3IgRW1vamlcXFwiO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgdGV4dC1hbGlnbjogc3RhcnQ7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICB0ZXh0LXNoYWRvdzogbm9uZTtcXG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xcbiAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcXG4gIHdvcmQtYnJlYWs6IG5vcm1hbDtcXG4gIHdvcmQtc3BhY2luZzogbm9ybWFsO1xcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcXG4gIGxpbmUtYnJlYWs6IGF1dG87XFxuICBmb250LXNpemU6IDAuODc1cmVtO1xcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xcbiAgb3BhY2l0eTogMDtcXG59XFxuXFxuLnRvb2x0aXAuc2hvdyB7XFxuICBvcGFjaXR5OiAwLjk7XFxufVxcblxcbi50b29sdGlwIC5hcnJvdyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAwLjhyZW07XFxuICBoZWlnaHQ6IDAuNHJlbTtcXG59XFxuXFxuLnRvb2x0aXAgLmFycm93OjpiZWZvcmUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcXG59XFxuXFxuLmJzLXRvb2x0aXAtdG9wLCAuYnMtdG9vbHRpcC1hdXRvW3gtcGxhY2VtZW50Xj1cXFwidG9wXFxcIl0ge1xcbiAgcGFkZGluZzogMC40cmVtIDA7XFxufVxcblxcbi5icy10b29sdGlwLXRvcCAuYXJyb3csIC5icy10b29sdGlwLWF1dG9beC1wbGFjZW1lbnRePVxcXCJ0b3BcXFwiXSAuYXJyb3cge1xcbiAgYm90dG9tOiAwO1xcbn1cXG5cXG4uYnMtdG9vbHRpcC10b3AgLmFycm93OjpiZWZvcmUsIC5icy10b29sdGlwLWF1dG9beC1wbGFjZW1lbnRePVxcXCJ0b3BcXFwiXSAuYXJyb3c6OmJlZm9yZSB7XFxuICB0b3A6IDA7XFxuICBib3JkZXItd2lkdGg6IDAuNHJlbSAwLjRyZW0gMDtcXG4gIGJvcmRlci10b3AtY29sb3I6ICMwMDA7XFxufVxcblxcbi5icy10b29sdGlwLXJpZ2h0LCAuYnMtdG9vbHRpcC1hdXRvW3gtcGxhY2VtZW50Xj1cXFwicmlnaHRcXFwiXSB7XFxuICBwYWRkaW5nOiAwIDAuNHJlbTtcXG59XFxuXFxuLmJzLXRvb2x0aXAtcmlnaHQgLmFycm93LCAuYnMtdG9vbHRpcC1hdXRvW3gtcGxhY2VtZW50Xj1cXFwicmlnaHRcXFwiXSAuYXJyb3cge1xcbiAgbGVmdDogMDtcXG4gIHdpZHRoOiAwLjRyZW07XFxuICBoZWlnaHQ6IDAuOHJlbTtcXG59XFxuXFxuLmJzLXRvb2x0aXAtcmlnaHQgLmFycm93OjpiZWZvcmUsIC5icy10b29sdGlwLWF1dG9beC1wbGFjZW1lbnRePVxcXCJyaWdodFxcXCJdIC5hcnJvdzo6YmVmb3JlIHtcXG4gIHJpZ2h0OiAwO1xcbiAgYm9yZGVyLXdpZHRoOiAwLjRyZW0gMC40cmVtIDAuNHJlbSAwO1xcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjMDAwO1xcbn1cXG5cXG4uYnMtdG9vbHRpcC1ib3R0b20sIC5icy10b29sdGlwLWF1dG9beC1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSB7XFxuICBwYWRkaW5nOiAwLjRyZW0gMDtcXG59XFxuXFxuLmJzLXRvb2x0aXAtYm90dG9tIC5hcnJvdywgLmJzLXRvb2x0aXAtYXV0b1t4LXBsYWNlbWVudF49XFxcImJvdHRvbVxcXCJdIC5hcnJvdyB7XFxuICB0b3A6IDA7XFxufVxcblxcbi5icy10b29sdGlwLWJvdHRvbSAuYXJyb3c6OmJlZm9yZSwgLmJzLXRvb2x0aXAtYXV0b1t4LXBsYWNlbWVudF49XFxcImJvdHRvbVxcXCJdIC5hcnJvdzo6YmVmb3JlIHtcXG4gIGJvdHRvbTogMDtcXG4gIGJvcmRlci13aWR0aDogMCAwLjRyZW0gMC40cmVtO1xcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzAwMDtcXG59XFxuXFxuLmJzLXRvb2x0aXAtbGVmdCwgLmJzLXRvb2x0aXAtYXV0b1t4LXBsYWNlbWVudF49XFxcImxlZnRcXFwiXSB7XFxuICBwYWRkaW5nOiAwIDAuNHJlbTtcXG59XFxuXFxuLmJzLXRvb2x0aXAtbGVmdCAuYXJyb3csIC5icy10b29sdGlwLWF1dG9beC1wbGFjZW1lbnRePVxcXCJsZWZ0XFxcIl0gLmFycm93IHtcXG4gIHJpZ2h0OiAwO1xcbiAgd2lkdGg6IDAuNHJlbTtcXG4gIGhlaWdodDogMC44cmVtO1xcbn1cXG5cXG4uYnMtdG9vbHRpcC1sZWZ0IC5hcnJvdzo6YmVmb3JlLCAuYnMtdG9vbHRpcC1hdXRvW3gtcGxhY2VtZW50Xj1cXFwibGVmdFxcXCJdIC5hcnJvdzo6YmVmb3JlIHtcXG4gIGxlZnQ6IDA7XFxuICBib3JkZXItd2lkdGg6IDAuNHJlbSAwIDAuNHJlbSAwLjRyZW07XFxuICBib3JkZXItbGVmdC1jb2xvcjogIzAwMDtcXG59XFxuXFxuLnRvb2x0aXAtaW5uZXIge1xcbiAgbWF4LXdpZHRoOiAyMDBweDtcXG4gIHBhZGRpbmc6IDAuMjVyZW0gMC41cmVtO1xcbiAgY29sb3I6ICNmZjAwMDA7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLnBvcG92ZXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHotaW5kZXg6IDEwNjA7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIG1heC13aWR0aDogMjc2cHg7XFxuICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcXFwiU2Vnb2UgVUlcXFwiLCBSb2JvdG8sIFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsIEFyaWFsLCBcXFwiTm90byBTYW5zXFxcIiwgc2Fucy1zZXJpZiwgXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIiwgXFxcIlNlZ29lIFVJIEVtb2ppXFxcIiwgXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCIsIFxcXCJOb3RvIENvbG9yIEVtb2ppXFxcIjtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG4gIHRleHQtYWxpZ246IHN0YXJ0O1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgdGV4dC1zaGFkb3c6IG5vbmU7XFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XFxuICB3b3JkLWJyZWFrOiBub3JtYWw7XFxuICB3b3JkLXNwYWNpbmc6IG5vcm1hbDtcXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XFxuICBsaW5lLWJyZWFrOiBhdXRvO1xcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcXG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjIpO1xcbiAgYm9yZGVyLXJhZGl1czogMC4zcmVtO1xcbn1cXG5cXG4ucG9wb3ZlciAuYXJyb3cge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMXJlbTtcXG4gIGhlaWdodDogMC41cmVtO1xcbiAgbWFyZ2luOiAwIDAuM3JlbTtcXG59XFxuXFxuLnBvcG92ZXIgLmFycm93OjpiZWZvcmUsIC5wb3BvdmVyIC5hcnJvdzo6YWZ0ZXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItc3R5bGU6IHNvbGlkO1xcbn1cXG5cXG4uYnMtcG9wb3Zlci10b3AsIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJ0b3BcXFwiXSB7XFxuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XFxufVxcblxcbi5icy1wb3BvdmVyLXRvcCA+IC5hcnJvdywgLmJzLXBvcG92ZXItYXV0b1t4LXBsYWNlbWVudF49XFxcInRvcFxcXCJdID4gLmFycm93IHtcXG4gIGJvdHRvbTogY2FsYygoMC41cmVtICsgMXB4KSAqIC0xKTtcXG59XFxuXFxuLmJzLXBvcG92ZXItdG9wID4gLmFycm93OjpiZWZvcmUsIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJ0b3BcXFwiXSA+IC5hcnJvdzo6YmVmb3JlIHtcXG4gIGJvdHRvbTogMDtcXG4gIGJvcmRlci13aWR0aDogMC41cmVtIDAuNXJlbSAwO1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcXG59XFxuXFxuLmJzLXBvcG92ZXItdG9wID4gLmFycm93OjphZnRlciwgLmJzLXBvcG92ZXItYXV0b1t4LXBsYWNlbWVudF49XFxcInRvcFxcXCJdID4gLmFycm93OjphZnRlciB7XFxuICBib3R0b206IDFweDtcXG4gIGJvcmRlci13aWR0aDogMC41cmVtIDAuNXJlbSAwO1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2ZmZjtcXG59XFxuXFxuLmJzLXBvcG92ZXItcmlnaHQsIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJyaWdodFxcXCJdIHtcXG4gIG1hcmdpbi1sZWZ0OiAwLjVyZW07XFxufVxcblxcbi5icy1wb3BvdmVyLXJpZ2h0ID4gLmFycm93LCAuYnMtcG9wb3Zlci1hdXRvW3gtcGxhY2VtZW50Xj1cXFwicmlnaHRcXFwiXSA+IC5hcnJvdyB7XFxuICBsZWZ0OiBjYWxjKCgwLjVyZW0gKyAxcHgpICogLTEpO1xcbiAgd2lkdGg6IDAuNXJlbTtcXG4gIGhlaWdodDogMXJlbTtcXG4gIG1hcmdpbjogMC4zcmVtIDA7XFxufVxcblxcbi5icy1wb3BvdmVyLXJpZ2h0ID4gLmFycm93OjpiZWZvcmUsIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJyaWdodFxcXCJdID4gLmFycm93OjpiZWZvcmUge1xcbiAgbGVmdDogMDtcXG4gIGJvcmRlci13aWR0aDogMC41cmVtIDAuNXJlbSAwLjVyZW0gMDtcXG4gIGJvcmRlci1yaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcXG59XFxuXFxuLmJzLXBvcG92ZXItcmlnaHQgPiAuYXJyb3c6OmFmdGVyLCAuYnMtcG9wb3Zlci1hdXRvW3gtcGxhY2VtZW50Xj1cXFwicmlnaHRcXFwiXSA+IC5hcnJvdzo6YWZ0ZXIge1xcbiAgbGVmdDogMXB4O1xcbiAgYm9yZGVyLXdpZHRoOiAwLjVyZW0gMC41cmVtIDAuNXJlbSAwO1xcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjZmZmO1xcbn1cXG5cXG4uYnMtcG9wb3Zlci1ib3R0b20sIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSB7XFxuICBtYXJnaW4tdG9wOiAwLjVyZW07XFxufVxcblxcbi5icy1wb3BvdmVyLWJvdHRvbSA+IC5hcnJvdywgLmJzLXBvcG92ZXItYXV0b1t4LXBsYWNlbWVudF49XFxcImJvdHRvbVxcXCJdID4gLmFycm93IHtcXG4gIHRvcDogY2FsYygoMC41cmVtICsgMXB4KSAqIC0xKTtcXG59XFxuXFxuLmJzLXBvcG92ZXItYm90dG9tID4gLmFycm93OjpiZWZvcmUsIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSA+IC5hcnJvdzo6YmVmb3JlIHtcXG4gIHRvcDogMDtcXG4gIGJvcmRlci13aWR0aDogMCAwLjVyZW0gMC41cmVtIDAuNXJlbTtcXG4gIGJvcmRlci1ib3R0b20tY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XFxufVxcblxcbi5icy1wb3BvdmVyLWJvdHRvbSA+IC5hcnJvdzo6YWZ0ZXIsIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSA+IC5hcnJvdzo6YWZ0ZXIge1xcbiAgdG9wOiAxcHg7XFxuICBib3JkZXItd2lkdGg6IDAgMC41cmVtIDAuNXJlbSAwLjVyZW07XFxuICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmO1xcbn1cXG5cXG4uYnMtcG9wb3Zlci1ib3R0b20gLnBvcG92ZXItaGVhZGVyOjpiZWZvcmUsIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSAucG9wb3Zlci1oZWFkZXI6OmJlZm9yZSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiA1MCU7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxcmVtO1xcbiAgbWFyZ2luLWxlZnQ6IC0wLjVyZW07XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjdmN2Y3O1xcbn1cXG5cXG4uYnMtcG9wb3Zlci1sZWZ0LCAuYnMtcG9wb3Zlci1hdXRvW3gtcGxhY2VtZW50Xj1cXFwibGVmdFxcXCJdIHtcXG4gIG1hcmdpbi1yaWdodDogMC41cmVtO1xcbn1cXG5cXG4uYnMtcG9wb3Zlci1sZWZ0ID4gLmFycm93LCAuYnMtcG9wb3Zlci1hdXRvW3gtcGxhY2VtZW50Xj1cXFwibGVmdFxcXCJdID4gLmFycm93IHtcXG4gIHJpZ2h0OiBjYWxjKCgwLjVyZW0gKyAxcHgpICogLTEpO1xcbiAgd2lkdGg6IDAuNXJlbTtcXG4gIGhlaWdodDogMXJlbTtcXG4gIG1hcmdpbjogMC4zcmVtIDA7XFxufVxcblxcbi5icy1wb3BvdmVyLWxlZnQgPiAuYXJyb3c6OmJlZm9yZSwgLmJzLXBvcG92ZXItYXV0b1t4LXBsYWNlbWVudF49XFxcImxlZnRcXFwiXSA+IC5hcnJvdzo6YmVmb3JlIHtcXG4gIHJpZ2h0OiAwO1xcbiAgYm9yZGVyLXdpZHRoOiAwLjVyZW0gMCAwLjVyZW0gMC41cmVtO1xcbiAgYm9yZGVyLWxlZnQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XFxufVxcblxcbi5icy1wb3BvdmVyLWxlZnQgPiAuYXJyb3c6OmFmdGVyLCAuYnMtcG9wb3Zlci1hdXRvW3gtcGxhY2VtZW50Xj1cXFwibGVmdFxcXCJdID4gLmFycm93OjphZnRlciB7XFxuICByaWdodDogMXB4O1xcbiAgYm9yZGVyLXdpZHRoOiAwLjVyZW0gMCAwLjVyZW0gMC41cmVtO1xcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICNmZmY7XFxufVxcblxcbi5wb3BvdmVyLWhlYWRlciB7XFxuICBwYWRkaW5nOiAwLjVyZW0gMC43NXJlbTtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxuICBmb250LXNpemU6IDFyZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3O1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlYmViZWI7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBjYWxjKDAuM3JlbSAtIDFweCk7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogY2FsYygwLjNyZW0gLSAxcHgpO1xcbn1cXG5cXG4ucG9wb3Zlci1oZWFkZXI6ZW1wdHkge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLnBvcG92ZXItYm9keSB7XFxuICBwYWRkaW5nOiAwLjVyZW0gMC43NXJlbTtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbn1cXG5cXG4uY2Fyb3VzZWwge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4uY2Fyb3VzZWwucG9pbnRlci1ldmVudCB7XFxuICAtbXMtdG91Y2gtYWN0aW9uOiBwYW4teTtcXG4gIHRvdWNoLWFjdGlvbjogcGFuLXk7XFxufVxcblxcbi5jYXJvdXNlbC1pbm5lciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMTAwJTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5jYXJvdXNlbC1pbm5lcjo6YWZ0ZXIge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBjbGVhcjogYm90aDtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbn1cXG5cXG4uY2Fyb3VzZWwtaXRlbSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgZmxvYXQ6IGxlZnQ7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1hcmdpbi1yaWdodDogLTEwMCU7XFxuICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuNnMgZWFzZS1pbi1vdXQ7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC42cyBlYXNlLWluLW91dDtcXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjZzIGVhc2UtaW4tb3V0LCAtd2Via2l0LXRyYW5zZm9ybSAwLjZzIGVhc2UtaW4tb3V0O1xcbn1cXG5cXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xcbiAgLmNhcm91c2VsLWl0ZW0ge1xcbiAgICB0cmFuc2l0aW9uOiBub25lO1xcbiAgfVxcbn1cXG5cXG4uY2Fyb3VzZWwtaXRlbS5hY3RpdmUsXFxuLmNhcm91c2VsLWl0ZW0tbmV4dCxcXG4uY2Fyb3VzZWwtaXRlbS1wcmV2IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4uY2Fyb3VzZWwtaXRlbS1uZXh0Om5vdCguY2Fyb3VzZWwtaXRlbS1sZWZ0KSxcXG4uYWN0aXZlLmNhcm91c2VsLWl0ZW0tcmlnaHQge1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XFxufVxcblxcbi5jYXJvdXNlbC1pdGVtLXByZXY6bm90KC5jYXJvdXNlbC1pdGVtLXJpZ2h0KSxcXG4uYWN0aXZlLmNhcm91c2VsLWl0ZW0tbGVmdCB7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSk7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xcbn1cXG5cXG4uY2Fyb3VzZWwtZmFkZSAuY2Fyb3VzZWwtaXRlbSB7XFxuICBvcGFjaXR5OiAwO1xcbiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogb3BhY2l0eTtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiBub25lO1xcbiAgdHJhbnNmb3JtOiBub25lO1xcbn1cXG5cXG4uY2Fyb3VzZWwtZmFkZSAuY2Fyb3VzZWwtaXRlbS5hY3RpdmUsXFxuLmNhcm91c2VsLWZhZGUgLmNhcm91c2VsLWl0ZW0tbmV4dC5jYXJvdXNlbC1pdGVtLWxlZnQsXFxuLmNhcm91c2VsLWZhZGUgLmNhcm91c2VsLWl0ZW0tcHJldi5jYXJvdXNlbC1pdGVtLXJpZ2h0IHtcXG4gIHotaW5kZXg6IDE7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG5cXG4uY2Fyb3VzZWwtZmFkZSAuYWN0aXZlLmNhcm91c2VsLWl0ZW0tbGVmdCxcXG4uY2Fyb3VzZWwtZmFkZSAuYWN0aXZlLmNhcm91c2VsLWl0ZW0tcmlnaHQge1xcbiAgei1pbmRleDogMDtcXG4gIG9wYWNpdHk6IDA7XFxuICB0cmFuc2l0aW9uOiAwcyAwLjZzIG9wYWNpdHk7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAuY2Fyb3VzZWwtZmFkZSAuYWN0aXZlLmNhcm91c2VsLWl0ZW0tbGVmdCxcXG4gIC5jYXJvdXNlbC1mYWRlIC5hY3RpdmUuY2Fyb3VzZWwtaXRlbS1yaWdodCB7XFxuICAgIHRyYW5zaXRpb246IG5vbmU7XFxuICB9XFxufVxcblxcbi5jYXJvdXNlbC1jb250cm9sLXByZXYsXFxuLmNhcm91c2VsLWNvbnRyb2wtbmV4dCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBib3R0b206IDA7XFxuICB6LWluZGV4OiAxO1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIHdpZHRoOiAxNSU7XFxuICBjb2xvcjogI2ZmZjtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIG9wYWNpdHk6IDAuNTtcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgZWFzZTtcXG59XFxuXFxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcXG4gIC5jYXJvdXNlbC1jb250cm9sLXByZXYsXFxuICAuY2Fyb3VzZWwtY29udHJvbC1uZXh0IHtcXG4gICAgdHJhbnNpdGlvbjogbm9uZTtcXG4gIH1cXG59XFxuXFxuLmNhcm91c2VsLWNvbnRyb2wtcHJldjpob3ZlciwgLmNhcm91c2VsLWNvbnRyb2wtcHJldjpmb2N1cyxcXG4uY2Fyb3VzZWwtY29udHJvbC1uZXh0OmhvdmVyLFxcbi5jYXJvdXNlbC1jb250cm9sLW5leHQ6Zm9jdXMge1xcbiAgY29sb3I6ICNmZmY7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICBvdXRsaW5lOiAwO1xcbiAgb3BhY2l0eTogMC45O1xcbn1cXG5cXG4uY2Fyb3VzZWwtY29udHJvbC1wcmV2IHtcXG4gIGxlZnQ6IDA7XFxufVxcblxcbi5jYXJvdXNlbC1jb250cm9sLW5leHQge1xcbiAgcmlnaHQ6IDA7XFxufVxcblxcbi5jYXJvdXNlbC1jb250cm9sLXByZXYtaWNvbixcXG4uY2Fyb3VzZWwtY29udHJvbC1uZXh0LWljb24ge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgd2lkdGg6IDIwcHg7XFxuICBoZWlnaHQ6IDIwcHg7XFxuICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgNTAlIC8gMTAwJSAxMDAlO1xcbn1cXG5cXG4uY2Fyb3VzZWwtY29udHJvbC1wcmV2LWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgZmlsbD0nJTIzZmZmJyB2aWV3Qm94PScwIDAgOCA4JyUzZSUzY3BhdGggZD0nTTUuMjUgMGwtNCA0IDQgNCAxLjUtMS41LTIuNS0yLjUgMi41LTIuNS0xLjUtMS41eicvJTNlJTNjL3N2ZyUzZVxcXCIpO1xcbn1cXG5cXG4uY2Fyb3VzZWwtY29udHJvbC1uZXh0LWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgZmlsbD0nJTIzZmZmJyB2aWV3Qm94PScwIDAgOCA4JyUzZSUzY3BhdGggZD0nTTIuNzUgMGwtMS41IDEuNSAyLjUgMi41LTIuNSAyLjUgMS41IDEuNSA0LTQtNC00eicvJTNlJTNjL3N2ZyUzZVxcXCIpO1xcbn1cXG5cXG4uY2Fyb3VzZWwtaW5kaWNhdG9ycyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICB6LWluZGV4OiAxNTtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgbWFyZ2luLXJpZ2h0OiAxNSU7XFxuICBtYXJnaW4tbGVmdDogMTUlO1xcbiAgbGlzdC1zdHlsZTogbm9uZTtcXG59XFxuXFxuLmNhcm91c2VsLWluZGljYXRvcnMgbGkge1xcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XFxuICAtbXMtZmxleDogMCAxIGF1dG87XFxuICBmbGV4OiAwIDEgYXV0bztcXG4gIHdpZHRoOiAzMHB4O1xcbiAgaGVpZ2h0OiAzcHg7XFxuICBtYXJnaW4tcmlnaHQ6IDNweDtcXG4gIG1hcmdpbi1sZWZ0OiAzcHg7XFxuICB0ZXh0LWluZGVudDogLTk5OXB4O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICBib3JkZXItdG9wOiAxMHB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWJvdHRvbTogMTBweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIG9wYWNpdHk6IC41O1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjZzIGVhc2U7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAuY2Fyb3VzZWwtaW5kaWNhdG9ycyBsaSB7XFxuICAgIHRyYW5zaXRpb246IG5vbmU7XFxuICB9XFxufVxcblxcbi5jYXJvdXNlbC1pbmRpY2F0b3JzIC5hY3RpdmUge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLmNhcm91c2VsLWNhcHRpb24ge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDE1JTtcXG4gIGJvdHRvbTogMjBweDtcXG4gIGxlZnQ6IDE1JTtcXG4gIHotaW5kZXg6IDEwO1xcbiAgcGFkZGluZy10b3A6IDIwcHg7XFxuICBwYWRkaW5nLWJvdHRvbTogMjBweDtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG5ALXdlYmtpdC1rZXlmcmFtZXMgc3Bpbm5lci1ib3JkZXIge1xcbiAgdG8ge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICB9XFxufVxcblxcbkBrZXlmcmFtZXMgc3Bpbm5lci1ib3JkZXIge1xcbiAgdG8ge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICB9XFxufVxcblxcbi5zcGlubmVyLWJvcmRlciB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB3aWR0aDogMnJlbTtcXG4gIGhlaWdodDogMnJlbTtcXG4gIHZlcnRpY2FsLWFsaWduOiB0ZXh0LWJvdHRvbTtcXG4gIGJvcmRlcjogMC4yNWVtIHNvbGlkIGN1cnJlbnRDb2xvcjtcXG4gIGJvcmRlci1yaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICAtd2Via2l0LWFuaW1hdGlvbjogc3Bpbm5lci1ib3JkZXIgLjc1cyBsaW5lYXIgaW5maW5pdGU7XFxuICBhbmltYXRpb246IHNwaW5uZXItYm9yZGVyIC43NXMgbGluZWFyIGluZmluaXRlO1xcbn1cXG5cXG4uc3Bpbm5lci1ib3JkZXItc20ge1xcbiAgd2lkdGg6IDFyZW07XFxuICBoZWlnaHQ6IDFyZW07XFxuICBib3JkZXItd2lkdGg6IDAuMmVtO1xcbn1cXG5cXG5ALXdlYmtpdC1rZXlmcmFtZXMgc3Bpbm5lci1ncm93IHtcXG4gIDAlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApO1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDApO1xcbiAgfVxcbiAgNTAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG59XFxuXFxuQGtleWZyYW1lcyBzcGlubmVyLWdyb3cge1xcbiAgMCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMCk7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XFxuICB9XFxuICA1MCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbn1cXG5cXG4uc3Bpbm5lci1ncm93IHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHdpZHRoOiAycmVtO1xcbiAgaGVpZ2h0OiAycmVtO1xcbiAgdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgb3BhY2l0eTogMDtcXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBzcGlubmVyLWdyb3cgLjc1cyBsaW5lYXIgaW5maW5pdGU7XFxuICBhbmltYXRpb246IHNwaW5uZXItZ3JvdyAuNzVzIGxpbmVhciBpbmZpbml0ZTtcXG59XFxuXFxuLnNwaW5uZXItZ3Jvdy1zbSB7XFxuICB3aWR0aDogMXJlbTtcXG4gIGhlaWdodDogMXJlbTtcXG59XFxuXFxuLmFsaWduLWJhc2VsaW5lIHtcXG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWxpZ24tdG9wIHtcXG4gIHZlcnRpY2FsLWFsaWduOiB0b3AgIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLW1pZGRsZSB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbGlnbi1ib3R0b20ge1xcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWxpZ24tdGV4dC1ib3R0b20ge1xcbiAgdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbGlnbi10ZXh0LXRvcCB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3AgIWltcG9ydGFudDtcXG59XFxuXFxuLmJnLXByaW1hcnkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG5hLmJnLXByaW1hcnk6aG92ZXIsIGEuYmctcHJpbWFyeTpmb2N1cyxcXG5idXR0b24uYmctcHJpbWFyeTpob3ZlcixcXG5idXR0b24uYmctcHJpbWFyeTpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA2MmNjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5iZy1zZWNvbmRhcnkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzZjNzU3ZCAhaW1wb3J0YW50O1xcbn1cXG5cXG5hLmJnLXNlY29uZGFyeTpob3ZlciwgYS5iZy1zZWNvbmRhcnk6Zm9jdXMsXFxuYnV0dG9uLmJnLXNlY29uZGFyeTpob3ZlcixcXG5idXR0b24uYmctc2Vjb25kYXJ5OmZvY3VzIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1NDViNjIgIWltcG9ydGFudDtcXG59XFxuXFxuLmJnLXN1Y2Nlc3Mge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI4YTc0NSAhaW1wb3J0YW50O1xcbn1cXG5cXG5hLmJnLXN1Y2Nlc3M6aG92ZXIsIGEuYmctc3VjY2Vzczpmb2N1cyxcXG5idXR0b24uYmctc3VjY2Vzczpob3ZlcixcXG5idXR0b24uYmctc3VjY2Vzczpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWU3ZTM0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5iZy1pbmZvIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxN2EyYjggIWltcG9ydGFudDtcXG59XFxuXFxuYS5iZy1pbmZvOmhvdmVyLCBhLmJnLWluZm86Zm9jdXMsXFxuYnV0dG9uLmJnLWluZm86aG92ZXIsXFxuYnV0dG9uLmJnLWluZm86Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzExN2E4YiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmctd2FybmluZyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZjMTA3ICFpbXBvcnRhbnQ7XFxufVxcblxcbmEuYmctd2FybmluZzpob3ZlciwgYS5iZy13YXJuaW5nOmZvY3VzLFxcbmJ1dHRvbi5iZy13YXJuaW5nOmhvdmVyLFxcbmJ1dHRvbi5iZy13YXJuaW5nOmZvY3VzIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkMzllMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmJnLWRhbmdlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGMzNTQ1ICFpbXBvcnRhbnQ7XFxufVxcblxcbmEuYmctZGFuZ2VyOmhvdmVyLCBhLmJnLWRhbmdlcjpmb2N1cyxcXG5idXR0b24uYmctZGFuZ2VyOmhvdmVyLFxcbmJ1dHRvbi5iZy1kYW5nZXI6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2JkMjEzMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmctbGlnaHQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYSAhaW1wb3J0YW50O1xcbn1cXG5cXG5hLmJnLWxpZ2h0OmhvdmVyLCBhLmJnLWxpZ2h0OmZvY3VzLFxcbmJ1dHRvbi5iZy1saWdodDpob3ZlcixcXG5idXR0b24uYmctbGlnaHQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RhZTBlNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmctZGFyayB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzQzYTQwICFpbXBvcnRhbnQ7XFxufVxcblxcbmEuYmctZGFyazpob3ZlciwgYS5iZy1kYXJrOmZvY3VzLFxcbmJ1dHRvbi5iZy1kYXJrOmhvdmVyLFxcbmJ1dHRvbi5iZy1kYXJrOmZvY3VzIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxZDIxMjQgIWltcG9ydGFudDtcXG59XFxuXFxuLmJnLXdoaXRlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJnLXRyYW5zcGFyZW50IHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ib3JkZXIge1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2RlZTJlNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLXRvcCB7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RlZTJlNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLXJpZ2h0IHtcXG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkZWUyZTYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJvcmRlci1ib3R0b20ge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZWUyZTYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJvcmRlci1sZWZ0IHtcXG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2RlZTJlNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLTAge1xcbiAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ib3JkZXItdG9wLTAge1xcbiAgYm9yZGVyLXRvcDogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLXJpZ2h0LTAge1xcbiAgYm9yZGVyLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ib3JkZXItYm90dG9tLTAge1xcbiAgYm9yZGVyLWJvdHRvbTogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLWxlZnQtMCB7XFxuICBib3JkZXItbGVmdDogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLXByaW1hcnkge1xcbiAgYm9yZGVyLWNvbG9yOiAjMDA3YmZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ib3JkZXItc2Vjb25kYXJ5IHtcXG4gIGJvcmRlci1jb2xvcjogIzZjNzU3ZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLXN1Y2Nlc3Mge1xcbiAgYm9yZGVyLWNvbG9yOiAjMjhhNzQ1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ib3JkZXItaW5mbyB7XFxuICBib3JkZXItY29sb3I6ICMxN2EyYjggIWltcG9ydGFudDtcXG59XFxuXFxuLmJvcmRlci13YXJuaW5nIHtcXG4gIGJvcmRlci1jb2xvcjogI2ZmYzEwNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLWRhbmdlciB7XFxuICBib3JkZXItY29sb3I6ICNkYzM1NDUgIWltcG9ydGFudDtcXG59XFxuXFxuLmJvcmRlci1saWdodCB7XFxuICBib3JkZXItY29sb3I6ICNmOGY5ZmEgIWltcG9ydGFudDtcXG59XFxuXFxuLmJvcmRlci1kYXJrIHtcXG4gIGJvcmRlci1jb2xvcjogIzM0M2E0MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLXdoaXRlIHtcXG4gIGJvcmRlci1jb2xvcjogI2ZmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucm91bmRlZC1zbSB7XFxuICBib3JkZXItcmFkaXVzOiAwLjJyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLnJvdW5kZWQge1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucm91bmRlZC10b3Age1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDAuMjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLnJvdW5kZWQtcmlnaHQge1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yb3VuZGVkLWJvdHRvbSB7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucm91bmRlZC1sZWZ0IHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAuMjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLnJvdW5kZWQtbGcge1xcbiAgYm9yZGVyLXJhZGl1czogMC4zcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yb3VuZGVkLWNpcmNsZSB7XFxuICBib3JkZXItcmFkaXVzOiA1MCUgIWltcG9ydGFudDtcXG59XFxuXFxuLnJvdW5kZWQtcGlsbCB7XFxuICBib3JkZXItcmFkaXVzOiA1MHJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucm91bmRlZC0wIHtcXG4gIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmNsZWFyZml4OjphZnRlciB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGNsZWFyOiBib3RoO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxufVxcblxcbi5kLW5vbmUge1xcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZC1pbmxpbmUge1xcbiAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kLWlubGluZS1ibG9jayB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcXG59XFxuXFxuLmQtYmxvY2sge1xcbiAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcXG59XFxuXFxuLmQtdGFibGUge1xcbiAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudDtcXG59XFxuXFxuLmQtdGFibGUtcm93IHtcXG4gIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZC10YWJsZS1jZWxsIHtcXG4gIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDtcXG59XFxuXFxuLmQtZmxleCB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZC1pbmxpbmUtZmxleCB7XFxuICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3ggIWltcG9ydGFudDtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLmQtc20tbm9uZSB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXNtLWlubGluZSB7XFxuICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtc20taW5saW5lLWJsb2NrIHtcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1zbS1ibG9jayB7XFxuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1zbS10YWJsZSB7XFxuICAgIGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1zbS10YWJsZS1yb3cge1xcbiAgICBkaXNwbGF5OiB0YWJsZS1yb3cgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXNtLXRhYmxlLWNlbGwge1xcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1zbS1mbGV4IHtcXG4gICAgZGlzcGxheTogLW1zLWZsZXhib3ggIWltcG9ydGFudDtcXG4gICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtc20taW5saW5lLWZsZXgge1xcbiAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3ggIWltcG9ydGFudDtcXG4gICAgZGlzcGxheTogaW5saW5lLWZsZXggIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XFxuICAuZC1tZC1ub25lIHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtbWQtaW5saW5lIHtcXG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1tZC1pbmxpbmUtYmxvY2sge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLW1kLWJsb2NrIHtcXG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLW1kLXRhYmxlIHtcXG4gICAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLW1kLXRhYmxlLXJvdyB7XFxuICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtbWQtdGFibGUtY2VsbCB7XFxuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLW1kLWZsZXgge1xcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1tZC1pbmxpbmUtZmxleCB7XFxuICAgIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcXG4gIC5kLWxnLW5vbmUge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1sZy1pbmxpbmUge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLWxnLWlubGluZS1ibG9jayB7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtbGctYmxvY2sge1xcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtbGctdGFibGUge1xcbiAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtbGctdGFibGUtcm93IHtcXG4gICAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1sZy10YWJsZS1jZWxsIHtcXG4gICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtbGctZmxleCB7XFxuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94ICFpbXBvcnRhbnQ7XFxuICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLWxnLWlubGluZS1mbGV4IHtcXG4gICAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94ICFpbXBvcnRhbnQ7XFxuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC5kLXhsLW5vbmUge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC14bC1pbmxpbmUge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXhsLWlubGluZS1ibG9jayB7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQteGwtYmxvY2sge1xcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQteGwtdGFibGUge1xcbiAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQteGwtdGFibGUtcm93IHtcXG4gICAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC14bC10YWJsZS1jZWxsIHtcXG4gICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQteGwtZmxleCB7XFxuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94ICFpbXBvcnRhbnQ7XFxuICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXhsLWlubGluZS1mbGV4IHtcXG4gICAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94ICFpbXBvcnRhbnQ7XFxuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSBwcmludCB7XFxuICAuZC1wcmludC1ub25lIHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtcHJpbnQtaW5saW5lIHtcXG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1wcmludC1pbmxpbmUtYmxvY2sge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXByaW50LWJsb2NrIHtcXG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXByaW50LXRhYmxlIHtcXG4gICAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXByaW50LXRhYmxlLXJvdyB7XFxuICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtcHJpbnQtdGFibGUtY2VsbCB7XFxuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXByaW50LWZsZXgge1xcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1wcmludC1pbmxpbmUtZmxleCB7XFxuICAgIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG4uZW1iZWQtcmVzcG9uc2l2ZSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxMDAlO1xcbiAgcGFkZGluZzogMDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5lbWJlZC1yZXNwb25zaXZlOjpiZWZvcmUge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG59XFxuXFxuLmVtYmVkLXJlc3BvbnNpdmUgLmVtYmVkLXJlc3BvbnNpdmUtaXRlbSxcXG4uZW1iZWQtcmVzcG9uc2l2ZSBpZnJhbWUsXFxuLmVtYmVkLXJlc3BvbnNpdmUgZW1iZWQsXFxuLmVtYmVkLXJlc3BvbnNpdmUgb2JqZWN0LFxcbi5lbWJlZC1yZXNwb25zaXZlIHZpZGVvIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGJvcmRlcjogMDtcXG59XFxuXFxuLmVtYmVkLXJlc3BvbnNpdmUtMjFieTk6OmJlZm9yZSB7XFxuICBwYWRkaW5nLXRvcDogNDIuODU3MTQzJTtcXG59XFxuXFxuLmVtYmVkLXJlc3BvbnNpdmUtMTZieTk6OmJlZm9yZSB7XFxuICBwYWRkaW5nLXRvcDogNTYuMjUlO1xcbn1cXG5cXG4uZW1iZWQtcmVzcG9uc2l2ZS00YnkzOjpiZWZvcmUge1xcbiAgcGFkZGluZy10b3A6IDc1JTtcXG59XFxuXFxuLmVtYmVkLXJlc3BvbnNpdmUtMWJ5MTo6YmVmb3JlIHtcXG4gIHBhZGRpbmctdG9wOiAxMDAlO1xcbn1cXG5cXG4uZmxleC1yb3cge1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3cgIWltcG9ydGFudDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3cgIWltcG9ydGFudDtcXG59XFxuXFxuLmZsZXgtY29sdW1uIHtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7XFxufVxcblxcbi5mbGV4LXJvdy1yZXZlcnNlIHtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2UgIWltcG9ydGFudDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZmxleC1jb2x1bW4tcmV2ZXJzZSB7XFxuICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2UgIWltcG9ydGFudDtcXG59XFxuXFxuLmZsZXgtd3JhcCB7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwICFpbXBvcnRhbnQ7XFxuICBmbGV4LXdyYXA6IHdyYXAgIWltcG9ydGFudDtcXG59XFxuXFxuLmZsZXgtbm93cmFwIHtcXG4gIC1tcy1mbGV4LXdyYXA6IG5vd3JhcCAhaW1wb3J0YW50O1xcbiAgZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDtcXG59XFxuXFxuLmZsZXgtd3JhcC1yZXZlcnNlIHtcXG4gIC1tcy1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgZmxleC13cmFwOiB3cmFwLXJldmVyc2UgIWltcG9ydGFudDtcXG59XFxuXFxuLmZsZXgtZmlsbCB7XFxuICAtbXMtZmxleDogMSAxIGF1dG8gIWltcG9ydGFudDtcXG4gIGZsZXg6IDEgMSBhdXRvICFpbXBvcnRhbnQ7XFxufVxcblxcbi5mbGV4LWdyb3ctMCB7XFxuICAtbXMtZmxleC1wb3NpdGl2ZTogMCAhaW1wb3J0YW50O1xcbiAgZmxleC1ncm93OiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5mbGV4LWdyb3ctMSB7XFxuICAtbXMtZmxleC1wb3NpdGl2ZTogMSAhaW1wb3J0YW50O1xcbiAgZmxleC1ncm93OiAxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5mbGV4LXNocmluay0wIHtcXG4gIC1tcy1mbGV4LW5lZ2F0aXZlOiAwICFpbXBvcnRhbnQ7XFxuICBmbGV4LXNocmluazogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZmxleC1zaHJpbmstMSB7XFxuICAtbXMtZmxleC1uZWdhdGl2ZTogMSAhaW1wb3J0YW50O1xcbiAgZmxleC1zaHJpbms6IDEgIWltcG9ydGFudDtcXG59XFxuXFxuLmp1c3RpZnktY29udGVudC1zdGFydCB7XFxuICAtbXMtZmxleC1wYWNrOiBzdGFydCAhaW1wb3J0YW50O1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5qdXN0aWZ5LWNvbnRlbnQtZW5kIHtcXG4gIC1tcy1mbGV4LXBhY2s6IGVuZCAhaW1wb3J0YW50O1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uanVzdGlmeS1jb250ZW50LWNlbnRlciB7XFxuICAtbXMtZmxleC1wYWNrOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB7XFxuICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5ICFpbXBvcnRhbnQ7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW4gIWltcG9ydGFudDtcXG59XFxuXFxuLmp1c3RpZnktY29udGVudC1hcm91bmQge1xcbiAgLW1zLWZsZXgtcGFjazogZGlzdHJpYnV0ZSAhaW1wb3J0YW50O1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQgIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLWl0ZW1zLXN0YXJ0IHtcXG4gIC1tcy1mbGV4LWFsaWduOiBzdGFydCAhaW1wb3J0YW50O1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLWl0ZW1zLWVuZCB7XFxuICAtbXMtZmxleC1hbGlnbjogZW5kICFpbXBvcnRhbnQ7XFxuICBhbGlnbi1pdGVtczogZmxleC1lbmQgIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLWl0ZW1zLWNlbnRlciB7XFxuICAtbXMtZmxleC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7XFxuICBhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbGlnbi1pdGVtcy1iYXNlbGluZSB7XFxuICAtbXMtZmxleC1hbGlnbjogYmFzZWxpbmUgIWltcG9ydGFudDtcXG4gIGFsaWduLWl0ZW1zOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWxpZ24taXRlbXMtc3RyZXRjaCB7XFxuICAtbXMtZmxleC1hbGlnbjogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2ggIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLWNvbnRlbnQtc3RhcnQge1xcbiAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdGFydCAhaW1wb3J0YW50O1xcbiAgYWxpZ24tY29udGVudDogZmxleC1zdGFydCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWxpZ24tY29udGVudC1lbmQge1xcbiAgLW1zLWZsZXgtbGluZS1wYWNrOiBlbmQgIWltcG9ydGFudDtcXG4gIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbGlnbi1jb250ZW50LWNlbnRlciB7XFxuICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgYWxpZ24tY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbGlnbi1jb250ZW50LWJldHdlZW4ge1xcbiAgLW1zLWZsZXgtbGluZS1wYWNrOiBqdXN0aWZ5ICFpbXBvcnRhbnQ7XFxuICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbGlnbi1jb250ZW50LWFyb3VuZCB7XFxuICAtbXMtZmxleC1saW5lLXBhY2s6IGRpc3RyaWJ1dGUgIWltcG9ydGFudDtcXG4gIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWxpZ24tY29udGVudC1zdHJldGNoIHtcXG4gIC1tcy1mbGV4LWxpbmUtcGFjazogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgYWxpZ24tY29udGVudDogc3RyZXRjaCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWxpZ24tc2VsZi1hdXRvIHtcXG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGF1dG8gIWltcG9ydGFudDtcXG4gIGFsaWduLXNlbGY6IGF1dG8gIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLXNlbGYtc3RhcnQge1xcbiAgLW1zLWZsZXgtaXRlbS1hbGlnbjogc3RhcnQgIWltcG9ydGFudDtcXG4gIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLXNlbGYtZW5kIHtcXG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGVuZCAhaW1wb3J0YW50O1xcbiAgYWxpZ24tc2VsZjogZmxleC1lbmQgIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLXNlbGYtY2VudGVyIHtcXG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgYWxpZ24tc2VsZjogY2VudGVyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbGlnbi1zZWxmLWJhc2VsaW5lIHtcXG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGJhc2VsaW5lICFpbXBvcnRhbnQ7XFxuICBhbGlnbi1zZWxmOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWxpZ24tc2VsZi1zdHJldGNoIHtcXG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gIGFsaWduLXNlbGY6IHN0cmV0Y2ggIWltcG9ydGFudDtcXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDU3NnB4KSB7XFxuICAuZmxleC1zbS1yb3cge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdyAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1zbS1jb2x1bW4ge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbiAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1zbS1yb3ctcmV2ZXJzZSB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2UgIWltcG9ydGFudDtcXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1zbS1jb2x1bW4tcmV2ZXJzZSB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2UgIWltcG9ydGFudDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1zbS13cmFwIHtcXG4gICAgLW1zLWZsZXgtd3JhcDogd3JhcCAhaW1wb3J0YW50O1xcbiAgICBmbGV4LXdyYXA6IHdyYXAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LXNtLW5vd3JhcCB7XFxuICAgIC1tcy1mbGV4LXdyYXA6IG5vd3JhcCAhaW1wb3J0YW50O1xcbiAgICBmbGV4LXdyYXA6IG5vd3JhcCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtc20td3JhcC1yZXZlcnNlIHtcXG4gICAgLW1zLWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtd3JhcDogd3JhcC1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1zbS1maWxsIHtcXG4gICAgLW1zLWZsZXg6IDEgMSBhdXRvICFpbXBvcnRhbnQ7XFxuICAgIGZsZXg6IDEgMSBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1zbS1ncm93LTAge1xcbiAgICAtbXMtZmxleC1wb3NpdGl2ZTogMCAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWdyb3c6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LXNtLWdyb3ctMSB7XFxuICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAxICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZ3JvdzogMSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtc20tc2hyaW5rLTAge1xcbiAgICAtbXMtZmxleC1uZWdhdGl2ZTogMCAhaW1wb3J0YW50O1xcbiAgICBmbGV4LXNocmluazogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtc20tc2hyaW5rLTEge1xcbiAgICAtbXMtZmxleC1uZWdhdGl2ZTogMSAhaW1wb3J0YW50O1xcbiAgICBmbGV4LXNocmluazogMSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmp1c3RpZnktY29udGVudC1zbS1zdGFydCB7XFxuICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0ICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmp1c3RpZnktY29udGVudC1zbS1lbmQge1xcbiAgICAtbXMtZmxleC1wYWNrOiBlbmQgIWltcG9ydGFudDtcXG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmp1c3RpZnktY29udGVudC1zbS1jZW50ZXIge1xcbiAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQtc20tYmV0d2VlbiB7XFxuICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnkgIWltcG9ydGFudDtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuanVzdGlmeS1jb250ZW50LXNtLWFyb3VuZCB7XFxuICAgIC1tcy1mbGV4LXBhY2s6IGRpc3RyaWJ1dGUgIWltcG9ydGFudDtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1pdGVtcy1zbS1zdGFydCB7XFxuICAgIC1tcy1mbGV4LWFsaWduOiBzdGFydCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLXNtLWVuZCB7XFxuICAgIC1tcy1mbGV4LWFsaWduOiBlbmQgIWltcG9ydGFudDtcXG4gICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24taXRlbXMtc20tY2VudGVyIHtcXG4gICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24taXRlbXMtc20tYmFzZWxpbmUge1xcbiAgICAtbXMtZmxleC1hbGlnbjogYmFzZWxpbmUgIWltcG9ydGFudDtcXG4gICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24taXRlbXMtc20tc3RyZXRjaCB7XFxuICAgIC1tcy1mbGV4LWFsaWduOiBzdHJldGNoICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tY29udGVudC1zbS1zdGFydCB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogc3RhcnQgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQtc20tZW5kIHtcXG4gICAgLW1zLWZsZXgtbGluZS1wYWNrOiBlbmQgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tY29udGVudDogZmxleC1lbmQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LXNtLWNlbnRlciB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogY2VudGVyICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQtc20tYmV0d2VlbiB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazoganVzdGlmeSAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tY29udGVudC1zbS1hcm91bmQge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IGRpc3RyaWJ1dGUgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tY29udGVudC1zbS1zdHJldGNoIHtcXG4gICAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdHJldGNoICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1zZWxmLXNtLWF1dG8ge1xcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBhdXRvICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1zZWxmLXNtLXN0YXJ0IHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogc3RhcnQgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tc2VsZjogZmxleC1zdGFydCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYtc20tZW5kIHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogZW5kICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi1zbS1jZW50ZXIge1xcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tc2VsZjogY2VudGVyICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi1zbS1iYXNlbGluZSB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGJhc2VsaW5lICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IGJhc2VsaW5lICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi1zbS1zdHJldGNoIHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBzdHJldGNoICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLmZsZXgtbWQtcm93IHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3cgIWltcG9ydGFudDtcXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdyAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbWQtY29sdW1uIHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4gIWltcG9ydGFudDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbiAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbWQtcm93LXJldmVyc2Uge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbWQtY29sdW1uLXJldmVyc2Uge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbWQtd3JhcCB7XFxuICAgIC1tcy1mbGV4LXdyYXA6IHdyYXAgIWltcG9ydGFudDtcXG4gICAgZmxleC13cmFwOiB3cmFwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1tZC1ub3dyYXAge1xcbiAgICAtbXMtZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDtcXG4gICAgZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LW1kLXdyYXAtcmV2ZXJzZSB7XFxuICAgIC1tcy1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgICBmbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbWQtZmlsbCB7XFxuICAgIC1tcy1mbGV4OiAxIDEgYXV0byAhaW1wb3J0YW50O1xcbiAgICBmbGV4OiAxIDEgYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbWQtZ3Jvdy0wIHtcXG4gICAgLW1zLWZsZXgtcG9zaXRpdmU6IDAgIWltcG9ydGFudDtcXG4gICAgZmxleC1ncm93OiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1tZC1ncm93LTEge1xcbiAgICAtbXMtZmxleC1wb3NpdGl2ZTogMSAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWdyb3c6IDEgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LW1kLXNocmluay0wIHtcXG4gICAgLW1zLWZsZXgtbmVnYXRpdmU6IDAgIWltcG9ydGFudDtcXG4gICAgZmxleC1zaHJpbms6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LW1kLXNocmluay0xIHtcXG4gICAgLW1zLWZsZXgtbmVnYXRpdmU6IDEgIWltcG9ydGFudDtcXG4gICAgZmxleC1zaHJpbms6IDEgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQtbWQtc3RhcnQge1xcbiAgICAtbXMtZmxleC1wYWNrOiBzdGFydCAhaW1wb3J0YW50O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQtbWQtZW5kIHtcXG4gICAgLW1zLWZsZXgtcGFjazogZW5kICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQtbWQtY2VudGVyIHtcXG4gICAgLW1zLWZsZXgtcGFjazogY2VudGVyICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuanVzdGlmeS1jb250ZW50LW1kLWJldHdlZW4ge1xcbiAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5ICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmp1c3RpZnktY29udGVudC1tZC1hcm91bmQge1xcbiAgICAtbXMtZmxleC1wYWNrOiBkaXN0cmlidXRlICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24taXRlbXMtbWQtc3RhcnQge1xcbiAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQgIWltcG9ydGFudDtcXG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1pdGVtcy1tZC1lbmQge1xcbiAgICAtbXMtZmxleC1hbGlnbjogZW5kICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLW1kLWNlbnRlciB7XFxuICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLW1kLWJhc2VsaW5lIHtcXG4gICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLW1kLXN0cmV0Y2gge1xcbiAgICAtbXMtZmxleC1hbGlnbjogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQtbWQtc3RhcnQge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IHN0YXJ0ICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LW1kLWVuZCB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZW5kICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tY29udGVudC1tZC1jZW50ZXIge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LW1kLWJldHdlZW4ge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IGp1c3RpZnkgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQtbWQtYXJvdW5kIHtcXG4gICAgLW1zLWZsZXgtbGluZS1wYWNrOiBkaXN0cmlidXRlICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQtbWQtc3RyZXRjaCB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBzdHJldGNoICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi1tZC1hdXRvIHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogYXV0byAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi1tZC1zdGFydCB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IHN0YXJ0ICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1zZWxmLW1kLWVuZCB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGVuZCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYtbWQtY2VudGVyIHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYtbWQtYmFzZWxpbmUge1xcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYtbWQtc3RyZXRjaCB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gICAgYWxpZ24tc2VsZjogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcXG4gIC5mbGV4LWxnLXJvdyB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93ICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3cgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LWxnLWNvbHVtbiB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LWxnLXJvdy1yZXZlcnNlIHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2UgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LWxnLWNvbHVtbi1yZXZlcnNlIHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2UgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LWxnLXdyYXAge1xcbiAgICAtbXMtZmxleC13cmFwOiB3cmFwICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtd3JhcDogd3JhcCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbGctbm93cmFwIHtcXG4gICAgLW1zLWZsZXgtd3JhcDogbm93cmFwICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtd3JhcDogbm93cmFwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1sZy13cmFwLXJldmVyc2Uge1xcbiAgICAtbXMtZmxleC13cmFwOiB3cmFwLXJldmVyc2UgIWltcG9ydGFudDtcXG4gICAgZmxleC13cmFwOiB3cmFwLXJldmVyc2UgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LWxnLWZpbGwge1xcbiAgICAtbXMtZmxleDogMSAxIGF1dG8gIWltcG9ydGFudDtcXG4gICAgZmxleDogMSAxIGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LWxnLWdyb3ctMCB7XFxuICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAwICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZ3JvdzogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbGctZ3Jvdy0xIHtcXG4gICAgLW1zLWZsZXgtcG9zaXRpdmU6IDEgIWltcG9ydGFudDtcXG4gICAgZmxleC1ncm93OiAxICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1sZy1zaHJpbmstMCB7XFxuICAgIC1tcy1mbGV4LW5lZ2F0aXZlOiAwICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtc2hyaW5rOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1sZy1zaHJpbmstMSB7XFxuICAgIC1tcy1mbGV4LW5lZ2F0aXZlOiAxICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtc2hyaW5rOiAxICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuanVzdGlmeS1jb250ZW50LWxnLXN0YXJ0IHtcXG4gICAgLW1zLWZsZXgtcGFjazogc3RhcnQgIWltcG9ydGFudDtcXG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuanVzdGlmeS1jb250ZW50LWxnLWVuZCB7XFxuICAgIC1tcy1mbGV4LXBhY2s6IGVuZCAhaW1wb3J0YW50O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuanVzdGlmeS1jb250ZW50LWxnLWNlbnRlciB7XFxuICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmp1c3RpZnktY29udGVudC1sZy1iZXR3ZWVuIHtcXG4gICAgLW1zLWZsZXgtcGFjazoganVzdGlmeSAhaW1wb3J0YW50O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW4gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQtbGctYXJvdW5kIHtcXG4gICAgLW1zLWZsZXgtcGFjazogZGlzdHJpYnV0ZSAhaW1wb3J0YW50O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLWxnLXN0YXJ0IHtcXG4gICAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0ICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24taXRlbXMtbGctZW5kIHtcXG4gICAgLW1zLWZsZXgtYWxpZ246IGVuZCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1pdGVtczogZmxleC1lbmQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1pdGVtcy1sZy1jZW50ZXIge1xcbiAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1pdGVtcy1sZy1iYXNlbGluZSB7XFxuICAgIC1tcy1mbGV4LWFsaWduOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1pdGVtcy1sZy1zdHJldGNoIHtcXG4gICAgLW1zLWZsZXgtYWxpZ246IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gICAgYWxpZ24taXRlbXM6IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LWxnLXN0YXJ0IHtcXG4gICAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdGFydCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tY29udGVudC1sZy1lbmQge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IGVuZCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBmbGV4LWVuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQtbGctY2VudGVyIHtcXG4gICAgLW1zLWZsZXgtbGluZS1wYWNrOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tY29udGVudC1sZy1iZXR3ZWVuIHtcXG4gICAgLW1zLWZsZXgtbGluZS1wYWNrOiBqdXN0aWZ5ICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW4gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LWxnLWFyb3VuZCB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZGlzdHJpYnV0ZSAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LWxnLXN0cmV0Y2gge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gICAgYWxpZ24tY29udGVudDogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYtbGctYXV0byB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGF1dG8gIWltcG9ydGFudDtcXG4gICAgYWxpZ24tc2VsZjogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYtbGctc3RhcnQge1xcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBzdGFydCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi1sZy1lbmQge1xcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBlbmQgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tc2VsZjogZmxleC1lbmQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1zZWxmLWxnLWNlbnRlciB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1zZWxmLWxnLWJhc2VsaW5lIHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogYmFzZWxpbmUgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tc2VsZjogYmFzZWxpbmUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1zZWxmLWxnLXN0cmV0Y2gge1xcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBzdHJldGNoICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xcbiAgLmZsZXgteGwtcm93IHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3cgIWltcG9ydGFudDtcXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdyAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgteGwtY29sdW1uIHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4gIWltcG9ydGFudDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbiAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgteGwtcm93LXJldmVyc2Uge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgteGwtY29sdW1uLXJldmVyc2Uge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgteGwtd3JhcCB7XFxuICAgIC1tcy1mbGV4LXdyYXA6IHdyYXAgIWltcG9ydGFudDtcXG4gICAgZmxleC13cmFwOiB3cmFwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC14bC1ub3dyYXAge1xcbiAgICAtbXMtZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDtcXG4gICAgZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LXhsLXdyYXAtcmV2ZXJzZSB7XFxuICAgIC1tcy1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgICBmbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgteGwtZmlsbCB7XFxuICAgIC1tcy1mbGV4OiAxIDEgYXV0byAhaW1wb3J0YW50O1xcbiAgICBmbGV4OiAxIDEgYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgteGwtZ3Jvdy0wIHtcXG4gICAgLW1zLWZsZXgtcG9zaXRpdmU6IDAgIWltcG9ydGFudDtcXG4gICAgZmxleC1ncm93OiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC14bC1ncm93LTEge1xcbiAgICAtbXMtZmxleC1wb3NpdGl2ZTogMSAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWdyb3c6IDEgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LXhsLXNocmluay0wIHtcXG4gICAgLW1zLWZsZXgtbmVnYXRpdmU6IDAgIWltcG9ydGFudDtcXG4gICAgZmxleC1zaHJpbms6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LXhsLXNocmluay0xIHtcXG4gICAgLW1zLWZsZXgtbmVnYXRpdmU6IDEgIWltcG9ydGFudDtcXG4gICAgZmxleC1zaHJpbms6IDEgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQteGwtc3RhcnQge1xcbiAgICAtbXMtZmxleC1wYWNrOiBzdGFydCAhaW1wb3J0YW50O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQteGwtZW5kIHtcXG4gICAgLW1zLWZsZXgtcGFjazogZW5kICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQteGwtY2VudGVyIHtcXG4gICAgLW1zLWZsZXgtcGFjazogY2VudGVyICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuanVzdGlmeS1jb250ZW50LXhsLWJldHdlZW4ge1xcbiAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5ICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmp1c3RpZnktY29udGVudC14bC1hcm91bmQge1xcbiAgICAtbXMtZmxleC1wYWNrOiBkaXN0cmlidXRlICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24taXRlbXMteGwtc3RhcnQge1xcbiAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQgIWltcG9ydGFudDtcXG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1pdGVtcy14bC1lbmQge1xcbiAgICAtbXMtZmxleC1hbGlnbjogZW5kICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLXhsLWNlbnRlciB7XFxuICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLXhsLWJhc2VsaW5lIHtcXG4gICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLXhsLXN0cmV0Y2gge1xcbiAgICAtbXMtZmxleC1hbGlnbjogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQteGwtc3RhcnQge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IHN0YXJ0ICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LXhsLWVuZCB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZW5kICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tY29udGVudC14bC1jZW50ZXIge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LXhsLWJldHdlZW4ge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IGp1c3RpZnkgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQteGwtYXJvdW5kIHtcXG4gICAgLW1zLWZsZXgtbGluZS1wYWNrOiBkaXN0cmlidXRlICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQteGwtc3RyZXRjaCB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBzdHJldGNoICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi14bC1hdXRvIHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogYXV0byAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi14bC1zdGFydCB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IHN0YXJ0ICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1zZWxmLXhsLWVuZCB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGVuZCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYteGwtY2VudGVyIHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYteGwtYmFzZWxpbmUge1xcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYteGwtc3RyZXRjaCB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gICAgYWxpZ24tc2VsZjogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG4uZmxvYXQtbGVmdCB7XFxuICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZmxvYXQtcmlnaHQge1xcbiAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5mbG9hdC1ub25lIHtcXG4gIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLmZsb2F0LXNtLWxlZnQge1xcbiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsb2F0LXNtLXJpZ2h0IHtcXG4gICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxvYXQtc20tbm9uZSB7XFxuICAgIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLmZsb2F0LW1kLWxlZnQge1xcbiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsb2F0LW1kLXJpZ2h0IHtcXG4gICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxvYXQtbWQtbm9uZSB7XFxuICAgIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xcbiAgLmZsb2F0LWxnLWxlZnQge1xcbiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsb2F0LWxnLXJpZ2h0IHtcXG4gICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxvYXQtbGctbm9uZSB7XFxuICAgIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC5mbG9hdC14bC1sZWZ0IHtcXG4gICAgZmxvYXQ6IGxlZnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbG9hdC14bC1yaWdodCB7XFxuICAgIGZsb2F0OiByaWdodCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsb2F0LXhsLW5vbmUge1xcbiAgICBmbG9hdDogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG4ub3ZlcmZsb3ctYXV0byB7XFxuICBvdmVyZmxvdzogYXV0byAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3ZlcmZsb3ctaGlkZGVuIHtcXG4gIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcXG59XFxuXFxuLnBvc2l0aW9uLXN0YXRpYyB7XFxuICBwb3NpdGlvbjogc3RhdGljICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wb3NpdGlvbi1yZWxhdGl2ZSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcXG59XFxuXFxuLnBvc2l0aW9uLWFic29sdXRlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucG9zaXRpb24tZml4ZWQge1xcbiAgcG9zaXRpb246IGZpeGVkICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wb3NpdGlvbi1zdGlja3kge1xcbiAgcG9zaXRpb246IC13ZWJraXQtc3RpY2t5ICFpbXBvcnRhbnQ7XFxuICBwb3NpdGlvbjogc3RpY2t5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5maXhlZC10b3Age1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgdG9wOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBsZWZ0OiAwO1xcbiAgei1pbmRleDogMTAzMDtcXG59XFxuXFxuLmZpeGVkLWJvdHRvbSB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICB6LWluZGV4OiAxMDMwO1xcbn1cXG5cXG5Ac3VwcG9ydHMgKChwb3NpdGlvbjogLXdlYmtpdC1zdGlja3kpIG9yIChwb3NpdGlvbjogc3RpY2t5KSkge1xcbiAgLnN0aWNreS10b3Age1xcbiAgICBwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7XFxuICAgIHBvc2l0aW9uOiBzdGlja3k7XFxuICAgIHRvcDogMDtcXG4gICAgei1pbmRleDogMTAyMDtcXG4gIH1cXG59XFxuXFxuLnNyLW9ubHkge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6IDFweDtcXG4gIGhlaWdodDogMXB4O1xcbiAgcGFkZGluZzogMDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBjbGlwOiByZWN0KDAsIDAsIDAsIDApO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIGJvcmRlcjogMDtcXG59XFxuXFxuLnNyLW9ubHktZm9jdXNhYmxlOmFjdGl2ZSwgLnNyLW9ubHktZm9jdXNhYmxlOmZvY3VzIHtcXG4gIHBvc2l0aW9uOiBzdGF0aWM7XFxuICB3aWR0aDogYXV0bztcXG4gIGhlaWdodDogYXV0bztcXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xcbiAgY2xpcDogYXV0bztcXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XFxufVxcblxcbi5zaGFkb3ctc20ge1xcbiAgYm94LXNoYWRvdzogMCAwLjEyNXJlbSAwLjI1cmVtIHJnYmEoMCwgMCwgMCwgMC4wNzUpICFpbXBvcnRhbnQ7XFxufVxcblxcbi5zaGFkb3cge1xcbiAgYm94LXNoYWRvdzogMCAwLjVyZW0gMXJlbSByZ2JhKDAsIDAsIDAsIDAuMTUpICFpbXBvcnRhbnQ7XFxufVxcblxcbi5zaGFkb3ctbGcge1xcbiAgYm94LXNoYWRvdzogMCAxcmVtIDNyZW0gcmdiYSgwLCAwLCAwLCAwLjE3NSkgIWltcG9ydGFudDtcXG59XFxuXFxuLnNoYWRvdy1ub25lIHtcXG4gIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuXFxuLnctMjUge1xcbiAgd2lkdGg6IDI1JSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udy01MCB7XFxuICB3aWR0aDogNTAlICFpbXBvcnRhbnQ7XFxufVxcblxcbi53LTc1IHtcXG4gIHdpZHRoOiA3NSUgIWltcG9ydGFudDtcXG59XFxuXFxuLnctMTAwIHtcXG4gIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XFxufVxcblxcbi53LWF1dG8ge1xcbiAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDtcXG59XFxuXFxuLmgtMjUge1xcbiAgaGVpZ2h0OiAyNSUgIWltcG9ydGFudDtcXG59XFxuXFxuLmgtNTAge1xcbiAgaGVpZ2h0OiA1MCUgIWltcG9ydGFudDtcXG59XFxuXFxuLmgtNzUge1xcbiAgaGVpZ2h0OiA3NSUgIWltcG9ydGFudDtcXG59XFxuXFxuLmgtMTAwIHtcXG4gIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaC1hdXRvIHtcXG4gIGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubXctMTAwIHtcXG4gIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWgtMTAwIHtcXG4gIG1heC1oZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcXG59XFxuXFxuLm1pbi12dy0xMDAge1xcbiAgbWluLXdpZHRoOiAxMDB2dyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWluLXZoLTEwMCB7XFxuICBtaW4taGVpZ2h0OiAxMDB2aCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udnctMTAwIHtcXG4gIHdpZHRoOiAxMDB2dyAhaW1wb3J0YW50O1xcbn1cXG5cXG4udmgtMTAwIHtcXG4gIGhlaWdodDogMTAwdmggIWltcG9ydGFudDtcXG59XFxuXFxuLnN0cmV0Y2hlZC1saW5rOjphZnRlciB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICB6LWluZGV4OiAxO1xcbiAgcG9pbnRlci1ldmVudHM6IGF1dG87XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7XFxufVxcblxcbi5tLTAge1xcbiAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC0wLFxcbi5teS0wIHtcXG4gIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm1yLTAsXFxuLm14LTAge1xcbiAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tYi0wLFxcbi5teS0wIHtcXG4gIG1hcmdpbi1ib3R0b206IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLTAsXFxuLm14LTAge1xcbiAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm0tMSB7XFxuICBtYXJnaW46IDAuMjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm10LTEsXFxuLm15LTEge1xcbiAgbWFyZ2luLXRvcDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubXItMSxcXG4ubXgtMSB7XFxuICBtYXJnaW4tcmlnaHQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1iLTEsXFxuLm15LTEge1xcbiAgbWFyZ2luLWJvdHRvbTogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWwtMSxcXG4ubXgtMSB7XFxuICBtYXJnaW4tbGVmdDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubS0yIHtcXG4gIG1hcmdpbjogMC41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC0yLFxcbi5teS0yIHtcXG4gIG1hcmdpbi10b3A6IDAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubXItMixcXG4ubXgtMiB7XFxuICBtYXJnaW4tcmlnaHQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWItMixcXG4ubXktMiB7XFxuICBtYXJnaW4tYm90dG9tOiAwLjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLTIsXFxuLm14LTIge1xcbiAgbWFyZ2luLWxlZnQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubS0zIHtcXG4gIG1hcmdpbjogMXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubXQtMyxcXG4ubXktMyB7XFxuICBtYXJnaW4tdG9wOiAxcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tci0zLFxcbi5teC0zIHtcXG4gIG1hcmdpbi1yaWdodDogMXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWItMyxcXG4ubXktMyB7XFxuICBtYXJnaW4tYm90dG9tOiAxcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tbC0zLFxcbi5teC0zIHtcXG4gIG1hcmdpbi1sZWZ0OiAxcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tLTQge1xcbiAgbWFyZ2luOiAxLjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm10LTQsXFxuLm15LTQge1xcbiAgbWFyZ2luLXRvcDogMS41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tci00LFxcbi5teC00IHtcXG4gIG1hcmdpbi1yaWdodDogMS41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tYi00LFxcbi5teS00IHtcXG4gIG1hcmdpbi1ib3R0b206IDEuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWwtNCxcXG4ubXgtNCB7XFxuICBtYXJnaW4tbGVmdDogMS41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tLTUge1xcbiAgbWFyZ2luOiAzcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC01LFxcbi5teS01IHtcXG4gIG1hcmdpbi10b3A6IDNyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1yLTUsXFxuLm14LTUge1xcbiAgbWFyZ2luLXJpZ2h0OiAzcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tYi01LFxcbi5teS01IHtcXG4gIG1hcmdpbi1ib3R0b206IDNyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLTUsXFxuLm14LTUge1xcbiAgbWFyZ2luLWxlZnQ6IDNyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLnAtMCB7XFxuICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdC0wLFxcbi5weS0wIHtcXG4gIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wci0wLFxcbi5weC0wIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnBiLTAsXFxuLnB5LTAge1xcbiAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnBsLTAsXFxuLnB4LTAge1xcbiAgcGFkZGluZy1sZWZ0OiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wLTEge1xcbiAgcGFkZGluZzogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHQtMSxcXG4ucHktMSB7XFxuICBwYWRkaW5nLXRvcDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHItMSxcXG4ucHgtMSB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wYi0xLFxcbi5weS0xIHtcXG4gIHBhZGRpbmctYm90dG9tOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wbC0xLFxcbi5weC0xIHtcXG4gIHBhZGRpbmctbGVmdDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucC0yIHtcXG4gIHBhZGRpbmc6IDAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHQtMixcXG4ucHktMiB7XFxuICBwYWRkaW5nLXRvcDogMC41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wci0yLFxcbi5weC0yIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGItMixcXG4ucHktMiB7XFxuICBwYWRkaW5nLWJvdHRvbTogMC41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wbC0yLFxcbi5weC0yIHtcXG4gIHBhZGRpbmctbGVmdDogMC41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wLTMge1xcbiAgcGFkZGluZzogMXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHQtMyxcXG4ucHktMyB7XFxuICBwYWRkaW5nLXRvcDogMXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHItMyxcXG4ucHgtMyB7XFxuICBwYWRkaW5nLXJpZ2h0OiAxcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wYi0zLFxcbi5weS0zIHtcXG4gIHBhZGRpbmctYm90dG9tOiAxcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wbC0zLFxcbi5weC0zIHtcXG4gIHBhZGRpbmctbGVmdDogMXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucC00IHtcXG4gIHBhZGRpbmc6IDEuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHQtNCxcXG4ucHktNCB7XFxuICBwYWRkaW5nLXRvcDogMS41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wci00LFxcbi5weC00IHtcXG4gIHBhZGRpbmctcmlnaHQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGItNCxcXG4ucHktNCB7XFxuICBwYWRkaW5nLWJvdHRvbTogMS41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wbC00LFxcbi5weC00IHtcXG4gIHBhZGRpbmctbGVmdDogMS41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wLTUge1xcbiAgcGFkZGluZzogM3JlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHQtNSxcXG4ucHktNSB7XFxuICBwYWRkaW5nLXRvcDogM3JlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHItNSxcXG4ucHgtNSB7XFxuICBwYWRkaW5nLXJpZ2h0OiAzcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wYi01LFxcbi5weS01IHtcXG4gIHBhZGRpbmctYm90dG9tOiAzcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wbC01LFxcbi5weC01IHtcXG4gIHBhZGRpbmctbGVmdDogM3JlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubS1uMSB7XFxuICBtYXJnaW46IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC1uMSxcXG4ubXktbjEge1xcbiAgbWFyZ2luLXRvcDogLTAuMjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1yLW4xLFxcbi5teC1uMSB7XFxuICBtYXJnaW4tcmlnaHQ6IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tYi1uMSxcXG4ubXktbjEge1xcbiAgbWFyZ2luLWJvdHRvbTogLTAuMjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLW4xLFxcbi5teC1uMSB7XFxuICBtYXJnaW4tbGVmdDogLTAuMjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm0tbjIge1xcbiAgbWFyZ2luOiAtMC41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC1uMixcXG4ubXktbjIge1xcbiAgbWFyZ2luLXRvcDogLTAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubXItbjIsXFxuLm14LW4yIHtcXG4gIG1hcmdpbi1yaWdodDogLTAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWItbjIsXFxuLm15LW4yIHtcXG4gIG1hcmdpbi1ib3R0b206IC0wLjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLW4yLFxcbi5teC1uMiB7XFxuICBtYXJnaW4tbGVmdDogLTAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubS1uMyB7XFxuICBtYXJnaW46IC0xcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC1uMyxcXG4ubXktbjMge1xcbiAgbWFyZ2luLXRvcDogLTFyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1yLW4zLFxcbi5teC1uMyB7XFxuICBtYXJnaW4tcmlnaHQ6IC0xcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tYi1uMyxcXG4ubXktbjMge1xcbiAgbWFyZ2luLWJvdHRvbTogLTFyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLW4zLFxcbi5teC1uMyB7XFxuICBtYXJnaW4tbGVmdDogLTFyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm0tbjQge1xcbiAgbWFyZ2luOiAtMS41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC1uNCxcXG4ubXktbjQge1xcbiAgbWFyZ2luLXRvcDogLTEuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubXItbjQsXFxuLm14LW40IHtcXG4gIG1hcmdpbi1yaWdodDogLTEuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWItbjQsXFxuLm15LW40IHtcXG4gIG1hcmdpbi1ib3R0b206IC0xLjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLW40LFxcbi5teC1uNCB7XFxuICBtYXJnaW4tbGVmdDogLTEuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubS1uNSB7XFxuICBtYXJnaW46IC0zcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC1uNSxcXG4ubXktbjUge1xcbiAgbWFyZ2luLXRvcDogLTNyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1yLW41LFxcbi5teC1uNSB7XFxuICBtYXJnaW4tcmlnaHQ6IC0zcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tYi1uNSxcXG4ubXktbjUge1xcbiAgbWFyZ2luLWJvdHRvbTogLTNyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLW41LFxcbi5teC1uNSB7XFxuICBtYXJnaW4tbGVmdDogLTNyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm0tYXV0byB7XFxuICBtYXJnaW46IGF1dG8gIWltcG9ydGFudDtcXG59XFxuXFxuLm10LWF1dG8sXFxuLm15LWF1dG8ge1xcbiAgbWFyZ2luLXRvcDogYXV0byAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubXItYXV0byxcXG4ubXgtYXV0byB7XFxuICBtYXJnaW4tcmlnaHQ6IGF1dG8gIWltcG9ydGFudDtcXG59XFxuXFxuLm1iLWF1dG8sXFxuLm15LWF1dG8ge1xcbiAgbWFyZ2luLWJvdHRvbTogYXV0byAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWwtYXV0byxcXG4ubXgtYXV0byB7XFxuICBtYXJnaW4tbGVmdDogYXV0byAhaW1wb3J0YW50O1xcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIHtcXG4gIC5tLXNtLTAge1xcbiAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1zbS0wLFxcbiAgLm15LXNtLTAge1xcbiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItc20tMCxcXG4gIC5teC1zbS0wIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItc20tMCxcXG4gIC5teS1zbS0wIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLXNtLTAsXFxuICAubXgtc20tMCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1zbS0xIHtcXG4gICAgbWFyZ2luOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtc20tMSxcXG4gIC5teS1zbS0xIHtcXG4gICAgbWFyZ2luLXRvcDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXNtLTEsXFxuICAubXgtc20tMSB7XFxuICAgIG1hcmdpbi1yaWdodDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXNtLTEsXFxuICAubXktc20tMSB7XFxuICAgIG1hcmdpbi1ib3R0b206IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1zbS0xLFxcbiAgLm14LXNtLTEge1xcbiAgICBtYXJnaW4tbGVmdDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tc20tMiB7XFxuICAgIG1hcmdpbjogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtc20tMixcXG4gIC5teS1zbS0yIHtcXG4gICAgbWFyZ2luLXRvcDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItc20tMixcXG4gIC5teC1zbS0yIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1zbS0yLFxcbiAgLm15LXNtLTIge1xcbiAgICBtYXJnaW4tYm90dG9tOiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1zbS0yLFxcbiAgLm14LXNtLTIge1xcbiAgICBtYXJnaW4tbGVmdDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1zbS0zIHtcXG4gICAgbWFyZ2luOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtc20tMyxcXG4gIC5teS1zbS0zIHtcXG4gICAgbWFyZ2luLXRvcDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXNtLTMsXFxuICAubXgtc20tMyB7XFxuICAgIG1hcmdpbi1yaWdodDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXNtLTMsXFxuICAubXktc20tMyB7XFxuICAgIG1hcmdpbi1ib3R0b206IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1zbS0zLFxcbiAgLm14LXNtLTMge1xcbiAgICBtYXJnaW4tbGVmdDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tc20tNCB7XFxuICAgIG1hcmdpbjogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtc20tNCxcXG4gIC5teS1zbS00IHtcXG4gICAgbWFyZ2luLXRvcDogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItc20tNCxcXG4gIC5teC1zbS00IHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1zbS00LFxcbiAgLm15LXNtLTQge1xcbiAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1zbS00LFxcbiAgLm14LXNtLTQge1xcbiAgICBtYXJnaW4tbGVmdDogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1zbS01IHtcXG4gICAgbWFyZ2luOiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtc20tNSxcXG4gIC5teS1zbS01IHtcXG4gICAgbWFyZ2luLXRvcDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXNtLTUsXFxuICAubXgtc20tNSB7XFxuICAgIG1hcmdpbi1yaWdodDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXNtLTUsXFxuICAubXktc20tNSB7XFxuICAgIG1hcmdpbi1ib3R0b206IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1zbS01LFxcbiAgLm14LXNtLTUge1xcbiAgICBtYXJnaW4tbGVmdDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnAtc20tMCB7XFxuICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC1zbS0wLFxcbiAgLnB5LXNtLTAge1xcbiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLXNtLTAsXFxuICAucHgtc20tMCB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYi1zbS0wLFxcbiAgLnB5LXNtLTAge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLXNtLTAsXFxuICAucHgtc20tMCB7XFxuICAgIHBhZGRpbmctbGVmdDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnAtc20tMSB7XFxuICAgIHBhZGRpbmc6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC1zbS0xLFxcbiAgLnB5LXNtLTEge1xcbiAgICBwYWRkaW5nLXRvcDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLXNtLTEsXFxuICAucHgtc20tMSB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYi1zbS0xLFxcbiAgLnB5LXNtLTEge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLXNtLTEsXFxuICAucHgtc20tMSB7XFxuICAgIHBhZGRpbmctbGVmdDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnAtc20tMiB7XFxuICAgIHBhZGRpbmc6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnB0LXNtLTIsXFxuICAucHktc20tMiB7XFxuICAgIHBhZGRpbmctdG9wOiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci1zbS0yLFxcbiAgLnB4LXNtLTIge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYi1zbS0yLFxcbiAgLnB5LXNtLTIge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGwtc20tMixcXG4gIC5weC1zbS0yIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLXNtLTMge1xcbiAgICBwYWRkaW5nOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQtc20tMyxcXG4gIC5weS1zbS0zIHtcXG4gICAgcGFkZGluZy10b3A6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci1zbS0zLFxcbiAgLnB4LXNtLTMge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGItc20tMyxcXG4gIC5weS1zbS0zIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC1zbS0zLFxcbiAgLnB4LXNtLTMge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLXNtLTQge1xcbiAgICBwYWRkaW5nOiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC1zbS00LFxcbiAgLnB5LXNtLTQge1xcbiAgICBwYWRkaW5nLXRvcDogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHItc20tNCxcXG4gIC5weC1zbS00IHtcXG4gICAgcGFkZGluZy1yaWdodDogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGItc20tNCxcXG4gIC5weS1zbS00IHtcXG4gICAgcGFkZGluZy1ib3R0b206IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLXNtLTQsXFxuICAucHgtc20tNCB7XFxuICAgIHBhZGRpbmctbGVmdDogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC1zbS01IHtcXG4gICAgcGFkZGluZzogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnB0LXNtLTUsXFxuICAucHktc20tNSB7XFxuICAgIHBhZGRpbmctdG9wOiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHItc20tNSxcXG4gIC5weC1zbS01IHtcXG4gICAgcGFkZGluZy1yaWdodDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLXNtLTUsXFxuICAucHktc20tNSB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGwtc20tNSxcXG4gIC5weC1zbS01IHtcXG4gICAgcGFkZGluZy1sZWZ0OiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1zbS1uMSB7XFxuICAgIG1hcmdpbjogLTAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1zbS1uMSxcXG4gIC5teS1zbS1uMSB7XFxuICAgIG1hcmdpbi10b3A6IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItc20tbjEsXFxuICAubXgtc20tbjEge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItc20tbjEsXFxuICAubXktc20tbjEge1xcbiAgICBtYXJnaW4tYm90dG9tOiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLXNtLW4xLFxcbiAgLm14LXNtLW4xIHtcXG4gICAgbWFyZ2luLWxlZnQ6IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1zbS1uMiB7XFxuICAgIG1hcmdpbjogLTAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXNtLW4yLFxcbiAgLm15LXNtLW4yIHtcXG4gICAgbWFyZ2luLXRvcDogLTAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXNtLW4yLFxcbiAgLm14LXNtLW4yIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItc20tbjIsXFxuICAubXktc20tbjIge1xcbiAgICBtYXJnaW4tYm90dG9tOiAtMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtc20tbjIsXFxuICAubXgtc20tbjIge1xcbiAgICBtYXJnaW4tbGVmdDogLTAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tc20tbjMge1xcbiAgICBtYXJnaW46IC0xcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtc20tbjMsXFxuICAubXktc20tbjMge1xcbiAgICBtYXJnaW4tdG9wOiAtMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXNtLW4zLFxcbiAgLm14LXNtLW4zIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXNtLW4zLFxcbiAgLm15LXNtLW4zIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1zbS1uMyxcXG4gIC5teC1zbS1uMyB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tc20tbjQge1xcbiAgICBtYXJnaW46IC0xLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1zbS1uNCxcXG4gIC5teS1zbS1uNCB7XFxuICAgIG1hcmdpbi10b3A6IC0xLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1zbS1uNCxcXG4gIC5teC1zbS1uNCB7XFxuICAgIG1hcmdpbi1yaWdodDogLTEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXNtLW40LFxcbiAgLm15LXNtLW40IHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLXNtLW40LFxcbiAgLm14LXNtLW40IHtcXG4gICAgbWFyZ2luLWxlZnQ6IC0xLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLXNtLW41IHtcXG4gICAgbWFyZ2luOiAtM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXNtLW41LFxcbiAgLm15LXNtLW41IHtcXG4gICAgbWFyZ2luLXRvcDogLTNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1zbS1uNSxcXG4gIC5teC1zbS1uNSB7XFxuICAgIG1hcmdpbi1yaWdodDogLTNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1zbS1uNSxcXG4gIC5teS1zbS1uNSB7XFxuICAgIG1hcmdpbi1ib3R0b206IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtc20tbjUsXFxuICAubXgtc20tbjUge1xcbiAgICBtYXJnaW4tbGVmdDogLTNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLXNtLWF1dG8ge1xcbiAgICBtYXJnaW46IGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1zbS1hdXRvLFxcbiAgLm15LXNtLWF1dG8ge1xcbiAgICBtYXJnaW4tdG9wOiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItc20tYXV0byxcXG4gIC5teC1zbS1hdXRvIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItc20tYXV0byxcXG4gIC5teS1zbS1hdXRvIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLXNtLWF1dG8sXFxuICAubXgtc20tYXV0byB7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLm0tbWQtMCB7XFxuICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LW1kLTAsXFxuICAubXktbWQtMCB7XFxuICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1tZC0wLFxcbiAgLm14LW1kLTAge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1tZC0wLFxcbiAgLm15LW1kLTAge1xcbiAgICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbWQtMCxcXG4gIC5teC1tZC0wIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLW1kLTEge1xcbiAgICBtYXJnaW46IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1tZC0xLFxcbiAgLm15LW1kLTEge1xcbiAgICBtYXJnaW4tdG9wOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItbWQtMSxcXG4gIC5teC1tZC0xIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbWQtMSxcXG4gIC5teS1tZC0xIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLW1kLTEsXFxuICAubXgtbWQtMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1tZC0yIHtcXG4gICAgbWFyZ2luOiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1tZC0yLFxcbiAgLm15LW1kLTIge1xcbiAgICBtYXJnaW4tdG9wOiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1tZC0yLFxcbiAgLm14LW1kLTIge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLW1kLTIsXFxuICAubXktbWQtMiB7XFxuICAgIG1hcmdpbi1ib3R0b206IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLW1kLTIsXFxuICAubXgtbWQtMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLW1kLTMge1xcbiAgICBtYXJnaW46IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1tZC0zLFxcbiAgLm15LW1kLTMge1xcbiAgICBtYXJnaW4tdG9wOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItbWQtMyxcXG4gIC5teC1tZC0zIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbWQtMyxcXG4gIC5teS1tZC0zIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLW1kLTMsXFxuICAubXgtbWQtMyB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1tZC00IHtcXG4gICAgbWFyZ2luOiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1tZC00LFxcbiAgLm15LW1kLTQge1xcbiAgICBtYXJnaW4tdG9wOiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1tZC00LFxcbiAgLm14LW1kLTQge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLW1kLTQsXFxuICAubXktbWQtNCB7XFxuICAgIG1hcmdpbi1ib3R0b206IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLW1kLTQsXFxuICAubXgtbWQtNCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLW1kLTUge1xcbiAgICBtYXJnaW46IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1tZC01LFxcbiAgLm15LW1kLTUge1xcbiAgICBtYXJnaW4tdG9wOiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItbWQtNSxcXG4gIC5teC1tZC01IHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbWQtNSxcXG4gIC5teS1tZC01IHtcXG4gICAgbWFyZ2luLWJvdHRvbTogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLW1kLTUsXFxuICAubXgtbWQtNSB7XFxuICAgIG1hcmdpbi1sZWZ0OiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC1tZC0wIHtcXG4gICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnB0LW1kLTAsXFxuICAucHktbWQtMCB7XFxuICAgIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHItbWQtMCxcXG4gIC5weC1tZC0wIHtcXG4gICAgcGFkZGluZy1yaWdodDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLW1kLTAsXFxuICAucHktbWQtMCB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGwtbWQtMCxcXG4gIC5weC1tZC0wIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC1tZC0xIHtcXG4gICAgcGFkZGluZzogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnB0LW1kLTEsXFxuICAucHktbWQtMSB7XFxuICAgIHBhZGRpbmctdG9wOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHItbWQtMSxcXG4gIC5weC1tZC0xIHtcXG4gICAgcGFkZGluZy1yaWdodDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLW1kLTEsXFxuICAucHktbWQtMSB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGwtbWQtMSxcXG4gIC5weC1tZC0xIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC1tZC0yIHtcXG4gICAgcGFkZGluZzogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQtbWQtMixcXG4gIC5weS1tZC0yIHtcXG4gICAgcGFkZGluZy10b3A6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLW1kLTIsXFxuICAucHgtbWQtMiB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLW1kLTIsXFxuICAucHktbWQtMiB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC1tZC0yLFxcbiAgLnB4LW1kLTIge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnAtbWQtMyB7XFxuICAgIHBhZGRpbmc6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC1tZC0zLFxcbiAgLnB5LW1kLTMge1xcbiAgICBwYWRkaW5nLXRvcDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLW1kLTMsXFxuICAucHgtbWQtMyB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYi1tZC0zLFxcbiAgLnB5LW1kLTMge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLW1kLTMsXFxuICAucHgtbWQtMyB7XFxuICAgIHBhZGRpbmctbGVmdDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnAtbWQtNCB7XFxuICAgIHBhZGRpbmc6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnB0LW1kLTQsXFxuICAucHktbWQtNCB7XFxuICAgIHBhZGRpbmctdG9wOiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci1tZC00LFxcbiAgLnB4LW1kLTQge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYi1tZC00LFxcbiAgLnB5LW1kLTQge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGwtbWQtNCxcXG4gIC5weC1tZC00IHtcXG4gICAgcGFkZGluZy1sZWZ0OiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLW1kLTUge1xcbiAgICBwYWRkaW5nOiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQtbWQtNSxcXG4gIC5weS1tZC01IHtcXG4gICAgcGFkZGluZy10b3A6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci1tZC01LFxcbiAgLnB4LW1kLTUge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGItbWQtNSxcXG4gIC5weS1tZC01IHtcXG4gICAgcGFkZGluZy1ib3R0b206IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC1tZC01LFxcbiAgLnB4LW1kLTUge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLW1kLW4xIHtcXG4gICAgbWFyZ2luOiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LW1kLW4xLFxcbiAgLm15LW1kLW4xIHtcXG4gICAgbWFyZ2luLXRvcDogLTAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1tZC1uMSxcXG4gIC5teC1tZC1uMSB7XFxuICAgIG1hcmdpbi1yaWdodDogLTAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1tZC1uMSxcXG4gIC5teS1tZC1uMSB7XFxuICAgIG1hcmdpbi1ib3R0b206IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbWQtbjEsXFxuICAubXgtbWQtbjEge1xcbiAgICBtYXJnaW4tbGVmdDogLTAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLW1kLW4yIHtcXG4gICAgbWFyZ2luOiAtMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtbWQtbjIsXFxuICAubXktbWQtbjIge1xcbiAgICBtYXJnaW4tdG9wOiAtMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItbWQtbjIsXFxuICAubXgtbWQtbjIge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1tZC1uMixcXG4gIC5teS1tZC1uMiB7XFxuICAgIG1hcmdpbi1ib3R0b206IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1tZC1uMixcXG4gIC5teC1tZC1uMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1tZC1uMyB7XFxuICAgIG1hcmdpbjogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1tZC1uMyxcXG4gIC5teS1tZC1uMyB7XFxuICAgIG1hcmdpbi10b3A6IC0xcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItbWQtbjMsXFxuICAubXgtbWQtbjMge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0xcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbWQtbjMsXFxuICAubXktbWQtbjMge1xcbiAgICBtYXJnaW4tYm90dG9tOiAtMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLW1kLW4zLFxcbiAgLm14LW1kLW4zIHtcXG4gICAgbWFyZ2luLWxlZnQ6IC0xcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1tZC1uNCB7XFxuICAgIG1hcmdpbjogLTEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LW1kLW40LFxcbiAgLm15LW1kLW40IHtcXG4gICAgbWFyZ2luLXRvcDogLTEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLW1kLW40LFxcbiAgLm14LW1kLW40IHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbWQtbjQsXFxuICAubXktbWQtbjQge1xcbiAgICBtYXJnaW4tYm90dG9tOiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbWQtbjQsXFxuICAubXgtbWQtbjQge1xcbiAgICBtYXJnaW4tbGVmdDogLTEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tbWQtbjUge1xcbiAgICBtYXJnaW46IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtbWQtbjUsXFxuICAubXktbWQtbjUge1xcbiAgICBtYXJnaW4tdG9wOiAtM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLW1kLW41LFxcbiAgLm14LW1kLW41IHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLW1kLW41LFxcbiAgLm15LW1kLW41IHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1tZC1uNSxcXG4gIC5teC1tZC1uNSB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tbWQtYXV0byB7XFxuICAgIG1hcmdpbjogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LW1kLWF1dG8sXFxuICAubXktbWQtYXV0byB7XFxuICAgIG1hcmdpbi10b3A6IGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1tZC1hdXRvLFxcbiAgLm14LW1kLWF1dG8ge1xcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1tZC1hdXRvLFxcbiAgLm15LW1kLWF1dG8ge1xcbiAgICBtYXJnaW4tYm90dG9tOiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbWQtYXV0byxcXG4gIC5teC1tZC1hdXRvIHtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XFxuICAubS1sZy0wIHtcXG4gICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtbGctMCxcXG4gIC5teS1sZy0wIHtcXG4gICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLWxnLTAsXFxuICAubXgtbGctMCB7XFxuICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLWxnLTAsXFxuICAubXktbGctMCB7XFxuICAgIG1hcmdpbi1ib3R0b206IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1sZy0wLFxcbiAgLm14LWxnLTAge1xcbiAgICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tbGctMSB7XFxuICAgIG1hcmdpbjogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LWxnLTEsXFxuICAubXktbGctMSB7XFxuICAgIG1hcmdpbi10b3A6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1sZy0xLFxcbiAgLm14LWxnLTEge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1sZy0xLFxcbiAgLm15LWxnLTEge1xcbiAgICBtYXJnaW4tYm90dG9tOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbGctMSxcXG4gIC5teC1sZy0xIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLWxnLTIge1xcbiAgICBtYXJnaW46IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LWxnLTIsXFxuICAubXktbGctMiB7XFxuICAgIG1hcmdpbi10b3A6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLWxnLTIsXFxuICAubXgtbGctMiB7XFxuICAgIG1hcmdpbi1yaWdodDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbGctMixcXG4gIC5teS1sZy0yIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbGctMixcXG4gIC5teC1sZy0yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tbGctMyB7XFxuICAgIG1hcmdpbjogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LWxnLTMsXFxuICAubXktbGctMyB7XFxuICAgIG1hcmdpbi10b3A6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1sZy0zLFxcbiAgLm14LWxnLTMge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1sZy0zLFxcbiAgLm15LWxnLTMge1xcbiAgICBtYXJnaW4tYm90dG9tOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbGctMyxcXG4gIC5teC1sZy0zIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLWxnLTQge1xcbiAgICBtYXJnaW46IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LWxnLTQsXFxuICAubXktbGctNCB7XFxuICAgIG1hcmdpbi10b3A6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLWxnLTQsXFxuICAubXgtbGctNCB7XFxuICAgIG1hcmdpbi1yaWdodDogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbGctNCxcXG4gIC5teS1sZy00IHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbGctNCxcXG4gIC5teC1sZy00IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tbGctNSB7XFxuICAgIG1hcmdpbjogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LWxnLTUsXFxuICAubXktbGctNSB7XFxuICAgIG1hcmdpbi10b3A6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1sZy01LFxcbiAgLm14LWxnLTUge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1sZy01LFxcbiAgLm15LWxnLTUge1xcbiAgICBtYXJnaW4tYm90dG9tOiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbGctNSxcXG4gIC5teC1sZy01IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLWxnLTAge1xcbiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQtbGctMCxcXG4gIC5weS1sZy0wIHtcXG4gICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci1sZy0wLFxcbiAgLnB4LWxnLTAge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGItbGctMCxcXG4gIC5weS1sZy0wIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC1sZy0wLFxcbiAgLnB4LWxnLTAge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLWxnLTEge1xcbiAgICBwYWRkaW5nOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQtbGctMSxcXG4gIC5weS1sZy0xIHtcXG4gICAgcGFkZGluZy10b3A6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci1sZy0xLFxcbiAgLnB4LWxnLTEge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGItbGctMSxcXG4gIC5weS1sZy0xIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC1sZy0xLFxcbiAgLnB4LWxnLTEge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLWxnLTIge1xcbiAgICBwYWRkaW5nOiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC1sZy0yLFxcbiAgLnB5LWxnLTIge1xcbiAgICBwYWRkaW5nLXRvcDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHItbGctMixcXG4gIC5weC1sZy0yIHtcXG4gICAgcGFkZGluZy1yaWdodDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGItbGctMixcXG4gIC5weS1sZy0yIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLWxnLTIsXFxuICAucHgtbGctMiB7XFxuICAgIHBhZGRpbmctbGVmdDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC1sZy0zIHtcXG4gICAgcGFkZGluZzogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnB0LWxnLTMsXFxuICAucHktbGctMyB7XFxuICAgIHBhZGRpbmctdG9wOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHItbGctMyxcXG4gIC5weC1sZy0zIHtcXG4gICAgcGFkZGluZy1yaWdodDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLWxnLTMsXFxuICAucHktbGctMyB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGwtbGctMyxcXG4gIC5weC1sZy0zIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC1sZy00IHtcXG4gICAgcGFkZGluZzogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQtbGctNCxcXG4gIC5weS1sZy00IHtcXG4gICAgcGFkZGluZy10b3A6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLWxnLTQsXFxuICAucHgtbGctNCB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLWxnLTQsXFxuICAucHktbGctNCB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC1sZy00LFxcbiAgLnB4LWxnLTQge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnAtbGctNSB7XFxuICAgIHBhZGRpbmc6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC1sZy01LFxcbiAgLnB5LWxnLTUge1xcbiAgICBwYWRkaW5nLXRvcDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLWxnLTUsXFxuICAucHgtbGctNSB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYi1sZy01LFxcbiAgLnB5LWxnLTUge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLWxnLTUsXFxuICAucHgtbGctNSB7XFxuICAgIHBhZGRpbmctbGVmdDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tbGctbjEge1xcbiAgICBtYXJnaW46IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtbGctbjEsXFxuICAubXktbGctbjEge1xcbiAgICBtYXJnaW4tdG9wOiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLWxnLW4xLFxcbiAgLm14LWxnLW4xIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLWxnLW4xLFxcbiAgLm15LWxnLW4xIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1sZy1uMSxcXG4gIC5teC1sZy1uMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tbGctbjIge1xcbiAgICBtYXJnaW46IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1sZy1uMixcXG4gIC5teS1sZy1uMiB7XFxuICAgIG1hcmdpbi10b3A6IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1sZy1uMixcXG4gIC5teC1sZy1uMiB7XFxuICAgIG1hcmdpbi1yaWdodDogLTAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLWxnLW4yLFxcbiAgLm15LWxnLW4yIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLWxnLW4yLFxcbiAgLm14LWxnLW4yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLWxnLW4zIHtcXG4gICAgbWFyZ2luOiAtMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LWxnLW4zLFxcbiAgLm15LWxnLW4zIHtcXG4gICAgbWFyZ2luLXRvcDogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1sZy1uMyxcXG4gIC5teC1sZy1uMyB7XFxuICAgIG1hcmdpbi1yaWdodDogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1sZy1uMyxcXG4gIC5teS1sZy1uMyB7XFxuICAgIG1hcmdpbi1ib3R0b206IC0xcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbGctbjMsXFxuICAubXgtbGctbjMge1xcbiAgICBtYXJnaW4tbGVmdDogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLWxnLW40IHtcXG4gICAgbWFyZ2luOiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtbGctbjQsXFxuICAubXktbGctbjQge1xcbiAgICBtYXJnaW4tdG9wOiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItbGctbjQsXFxuICAubXgtbGctbjQge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0xLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1sZy1uNCxcXG4gIC5teS1sZy1uNCB7XFxuICAgIG1hcmdpbi1ib3R0b206IC0xLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1sZy1uNCxcXG4gIC5teC1sZy1uNCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1sZy1uNSB7XFxuICAgIG1hcmdpbjogLTNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1sZy1uNSxcXG4gIC5teS1sZy1uNSB7XFxuICAgIG1hcmdpbi10b3A6IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItbGctbjUsXFxuICAubXgtbGctbjUge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbGctbjUsXFxuICAubXktbGctbjUge1xcbiAgICBtYXJnaW4tYm90dG9tOiAtM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLWxnLW41LFxcbiAgLm14LWxnLW41IHtcXG4gICAgbWFyZ2luLWxlZnQ6IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1sZy1hdXRvIHtcXG4gICAgbWFyZ2luOiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtbGctYXV0byxcXG4gIC5teS1sZy1hdXRvIHtcXG4gICAgbWFyZ2luLXRvcDogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLWxnLWF1dG8sXFxuICAubXgtbGctYXV0byB7XFxuICAgIG1hcmdpbi1yaWdodDogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLWxnLWF1dG8sXFxuICAubXktbGctYXV0byB7XFxuICAgIG1hcmdpbi1ib3R0b206IGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1sZy1hdXRvLFxcbiAgLm14LWxnLWF1dG8ge1xcbiAgICBtYXJnaW4tbGVmdDogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XFxuICAubS14bC0wIHtcXG4gICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQteGwtMCxcXG4gIC5teS14bC0wIHtcXG4gICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXhsLTAsXFxuICAubXgteGwtMCB7XFxuICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXhsLTAsXFxuICAubXkteGwtMCB7XFxuICAgIG1hcmdpbi1ib3R0b206IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC14bC0wLFxcbiAgLm14LXhsLTAge1xcbiAgICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0teGwtMSB7XFxuICAgIG1hcmdpbjogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXhsLTEsXFxuICAubXkteGwtMSB7XFxuICAgIG1hcmdpbi10b3A6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci14bC0xLFxcbiAgLm14LXhsLTEge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi14bC0xLFxcbiAgLm15LXhsLTEge1xcbiAgICBtYXJnaW4tYm90dG9tOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwteGwtMSxcXG4gIC5teC14bC0xIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLXhsLTIge1xcbiAgICBtYXJnaW46IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXhsLTIsXFxuICAubXkteGwtMiB7XFxuICAgIG1hcmdpbi10b3A6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXhsLTIsXFxuICAubXgteGwtMiB7XFxuICAgIG1hcmdpbi1yaWdodDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWIteGwtMixcXG4gIC5teS14bC0yIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwteGwtMixcXG4gIC5teC14bC0yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0teGwtMyB7XFxuICAgIG1hcmdpbjogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXhsLTMsXFxuICAubXkteGwtMyB7XFxuICAgIG1hcmdpbi10b3A6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci14bC0zLFxcbiAgLm14LXhsLTMge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi14bC0zLFxcbiAgLm15LXhsLTMge1xcbiAgICBtYXJnaW4tYm90dG9tOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwteGwtMyxcXG4gIC5teC14bC0zIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLXhsLTQge1xcbiAgICBtYXJnaW46IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXhsLTQsXFxuICAubXkteGwtNCB7XFxuICAgIG1hcmdpbi10b3A6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXhsLTQsXFxuICAubXgteGwtNCB7XFxuICAgIG1hcmdpbi1yaWdodDogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWIteGwtNCxcXG4gIC5teS14bC00IHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwteGwtNCxcXG4gIC5teC14bC00IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0teGwtNSB7XFxuICAgIG1hcmdpbjogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXhsLTUsXFxuICAubXkteGwtNSB7XFxuICAgIG1hcmdpbi10b3A6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci14bC01LFxcbiAgLm14LXhsLTUge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi14bC01LFxcbiAgLm15LXhsLTUge1xcbiAgICBtYXJnaW4tYm90dG9tOiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwteGwtNSxcXG4gIC5teC14bC01IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLXhsLTAge1xcbiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQteGwtMCxcXG4gIC5weS14bC0wIHtcXG4gICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci14bC0wLFxcbiAgLnB4LXhsLTAge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGIteGwtMCxcXG4gIC5weS14bC0wIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC14bC0wLFxcbiAgLnB4LXhsLTAge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLXhsLTEge1xcbiAgICBwYWRkaW5nOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQteGwtMSxcXG4gIC5weS14bC0xIHtcXG4gICAgcGFkZGluZy10b3A6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci14bC0xLFxcbiAgLnB4LXhsLTEge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGIteGwtMSxcXG4gIC5weS14bC0xIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC14bC0xLFxcbiAgLnB4LXhsLTEge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLXhsLTIge1xcbiAgICBwYWRkaW5nOiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC14bC0yLFxcbiAgLnB5LXhsLTIge1xcbiAgICBwYWRkaW5nLXRvcDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHIteGwtMixcXG4gIC5weC14bC0yIHtcXG4gICAgcGFkZGluZy1yaWdodDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGIteGwtMixcXG4gIC5weS14bC0yIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLXhsLTIsXFxuICAucHgteGwtMiB7XFxuICAgIHBhZGRpbmctbGVmdDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC14bC0zIHtcXG4gICAgcGFkZGluZzogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnB0LXhsLTMsXFxuICAucHkteGwtMyB7XFxuICAgIHBhZGRpbmctdG9wOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHIteGwtMyxcXG4gIC5weC14bC0zIHtcXG4gICAgcGFkZGluZy1yaWdodDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLXhsLTMsXFxuICAucHkteGwtMyB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGwteGwtMyxcXG4gIC5weC14bC0zIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC14bC00IHtcXG4gICAgcGFkZGluZzogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQteGwtNCxcXG4gIC5weS14bC00IHtcXG4gICAgcGFkZGluZy10b3A6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLXhsLTQsXFxuICAucHgteGwtNCB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLXhsLTQsXFxuICAucHkteGwtNCB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC14bC00LFxcbiAgLnB4LXhsLTQge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnAteGwtNSB7XFxuICAgIHBhZGRpbmc6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC14bC01LFxcbiAgLnB5LXhsLTUge1xcbiAgICBwYWRkaW5nLXRvcDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLXhsLTUsXFxuICAucHgteGwtNSB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYi14bC01LFxcbiAgLnB5LXhsLTUge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLXhsLTUsXFxuICAucHgteGwtNSB7XFxuICAgIHBhZGRpbmctbGVmdDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0teGwtbjEge1xcbiAgICBtYXJnaW46IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQteGwtbjEsXFxuICAubXkteGwtbjEge1xcbiAgICBtYXJnaW4tdG9wOiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXhsLW4xLFxcbiAgLm14LXhsLW4xIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXhsLW4xLFxcbiAgLm15LXhsLW4xIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC14bC1uMSxcXG4gIC5teC14bC1uMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0teGwtbjIge1xcbiAgICBtYXJnaW46IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC14bC1uMixcXG4gIC5teS14bC1uMiB7XFxuICAgIG1hcmdpbi10b3A6IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci14bC1uMixcXG4gIC5teC14bC1uMiB7XFxuICAgIG1hcmdpbi1yaWdodDogLTAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXhsLW4yLFxcbiAgLm15LXhsLW4yIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLXhsLW4yLFxcbiAgLm14LXhsLW4yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLXhsLW4zIHtcXG4gICAgbWFyZ2luOiAtMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXhsLW4zLFxcbiAgLm15LXhsLW4zIHtcXG4gICAgbWFyZ2luLXRvcDogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci14bC1uMyxcXG4gIC5teC14bC1uMyB7XFxuICAgIG1hcmdpbi1yaWdodDogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi14bC1uMyxcXG4gIC5teS14bC1uMyB7XFxuICAgIG1hcmdpbi1ib3R0b206IC0xcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwteGwtbjMsXFxuICAubXgteGwtbjMge1xcbiAgICBtYXJnaW4tbGVmdDogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLXhsLW40IHtcXG4gICAgbWFyZ2luOiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQteGwtbjQsXFxuICAubXkteGwtbjQge1xcbiAgICBtYXJnaW4tdG9wOiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXIteGwtbjQsXFxuICAubXgteGwtbjQge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0xLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi14bC1uNCxcXG4gIC5teS14bC1uNCB7XFxuICAgIG1hcmdpbi1ib3R0b206IC0xLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC14bC1uNCxcXG4gIC5teC14bC1uNCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS14bC1uNSB7XFxuICAgIG1hcmdpbjogLTNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC14bC1uNSxcXG4gIC5teS14bC1uNSB7XFxuICAgIG1hcmdpbi10b3A6IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXIteGwtbjUsXFxuICAubXgteGwtbjUge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWIteGwtbjUsXFxuICAubXkteGwtbjUge1xcbiAgICBtYXJnaW4tYm90dG9tOiAtM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLXhsLW41LFxcbiAgLm14LXhsLW41IHtcXG4gICAgbWFyZ2luLWxlZnQ6IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS14bC1hdXRvIHtcXG4gICAgbWFyZ2luOiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQteGwtYXV0byxcXG4gIC5teS14bC1hdXRvIHtcXG4gICAgbWFyZ2luLXRvcDogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXhsLWF1dG8sXFxuICAubXgteGwtYXV0byB7XFxuICAgIG1hcmdpbi1yaWdodDogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXhsLWF1dG8sXFxuICAubXkteGwtYXV0byB7XFxuICAgIG1hcmdpbi1ib3R0b206IGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC14bC1hdXRvLFxcbiAgLm14LXhsLWF1dG8ge1xcbiAgICBtYXJnaW4tbGVmdDogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG4udGV4dC1tb25vc3BhY2Uge1xcbiAgZm9udC1mYW1pbHk6IFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXFxcIkxpYmVyYXRpb24gTW9ub1xcXCIsIFxcXCJDb3VyaWVyIE5ld1xcXCIsIG1vbm9zcGFjZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1qdXN0aWZ5IHtcXG4gIHRleHQtYWxpZ246IGp1c3RpZnkgIWltcG9ydGFudDtcXG59XFxuXFxuLnRleHQtd3JhcCB7XFxuICB3aGl0ZS1zcGFjZTogbm9ybWFsICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZXh0LW5vd3JhcCB7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZXh0LXRydW5jYXRlIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxufVxcblxcbi50ZXh0LWxlZnQge1xcbiAgdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1yaWdodCB7XFxuICB0ZXh0LWFsaWduOiByaWdodCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1jZW50ZXIge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLnRleHQtc20tbGVmdCB7XFxuICAgIHRleHQtYWxpZ246IGxlZnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC50ZXh0LXNtLXJpZ2h0IHtcXG4gICAgdGV4dC1hbGlnbjogcmlnaHQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC50ZXh0LXNtLWNlbnRlciB7XFxuICAgIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gIC50ZXh0LW1kLWxlZnQge1xcbiAgICB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAudGV4dC1tZC1yaWdodCB7XFxuICAgIHRleHQtYWxpZ246IHJpZ2h0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAudGV4dC1tZC1jZW50ZXIge1xcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XFxuICAudGV4dC1sZy1sZWZ0IHtcXG4gICAgdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnRleHQtbGctcmlnaHQge1xcbiAgICB0ZXh0LWFsaWduOiByaWdodCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnRleHQtbGctY2VudGVyIHtcXG4gICAgdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC50ZXh0LXhsLWxlZnQge1xcbiAgICB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAudGV4dC14bC1yaWdodCB7XFxuICAgIHRleHQtYWxpZ246IHJpZ2h0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAudGV4dC14bC1jZW50ZXIge1xcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuLnRleHQtbG93ZXJjYXNlIHtcXG4gIHRleHQtdHJhbnNmb3JtOiBsb3dlcmNhc2UgIWltcG9ydGFudDtcXG59XFxuXFxuLnRleHQtdXBwZXJjYXNlIHtcXG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2UgIWltcG9ydGFudDtcXG59XFxuXFxuLnRleHQtY2FwaXRhbGl6ZSB7XFxuICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZm9udC13ZWlnaHQtbGlnaHQge1xcbiAgZm9udC13ZWlnaHQ6IDMwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZm9udC13ZWlnaHQtbGlnaHRlciB7XFxuICBmb250LXdlaWdodDogbGlnaHRlciAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZm9udC13ZWlnaHQtbm9ybWFsIHtcXG4gIGZvbnQtd2VpZ2h0OiA0MDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmZvbnQtd2VpZ2h0LWJvbGQge1xcbiAgZm9udC13ZWlnaHQ6IDcwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZm9udC13ZWlnaHQtYm9sZGVyIHtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkZXIgIWltcG9ydGFudDtcXG59XFxuXFxuLmZvbnQtaXRhbGljIHtcXG4gIGZvbnQtc3R5bGU6IGl0YWxpYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC13aGl0ZSB7XFxuICBjb2xvcjogI2ZmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1wcmltYXJ5IHtcXG4gIGNvbG9yOiAjMDA3YmZmICFpbXBvcnRhbnQ7XFxufVxcblxcbmEudGV4dC1wcmltYXJ5OmhvdmVyLCBhLnRleHQtcHJpbWFyeTpmb2N1cyB7XFxuICBjb2xvcjogIzAwNTZiMyAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1zZWNvbmRhcnkge1xcbiAgY29sb3I6ICM2Yzc1N2QgIWltcG9ydGFudDtcXG59XFxuXFxuYS50ZXh0LXNlY29uZGFyeTpob3ZlciwgYS50ZXh0LXNlY29uZGFyeTpmb2N1cyB7XFxuICBjb2xvcjogIzQ5NGY1NCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1zdWNjZXNzIHtcXG4gIGNvbG9yOiAjMjhhNzQ1ICFpbXBvcnRhbnQ7XFxufVxcblxcbmEudGV4dC1zdWNjZXNzOmhvdmVyLCBhLnRleHQtc3VjY2Vzczpmb2N1cyB7XFxuICBjb2xvcjogIzE5NjkyYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1pbmZvIHtcXG4gIGNvbG9yOiAjMTdhMmI4ICFpbXBvcnRhbnQ7XFxufVxcblxcbmEudGV4dC1pbmZvOmhvdmVyLCBhLnRleHQtaW5mbzpmb2N1cyB7XFxuICBjb2xvcjogIzBmNjY3NCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC13YXJuaW5nIHtcXG4gIGNvbG9yOiAjZmZjMTA3ICFpbXBvcnRhbnQ7XFxufVxcblxcbmEudGV4dC13YXJuaW5nOmhvdmVyLCBhLnRleHQtd2FybmluZzpmb2N1cyB7XFxuICBjb2xvcjogI2JhOGIwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1kYW5nZXIge1xcbiAgY29sb3I6ICNkYzM1NDUgIWltcG9ydGFudDtcXG59XFxuXFxuYS50ZXh0LWRhbmdlcjpob3ZlciwgYS50ZXh0LWRhbmdlcjpmb2N1cyB7XFxuICBjb2xvcjogI2E3MWQyYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1saWdodCB7XFxuICBjb2xvcjogI2Y4ZjlmYSAhaW1wb3J0YW50O1xcbn1cXG5cXG5hLnRleHQtbGlnaHQ6aG92ZXIsIGEudGV4dC1saWdodDpmb2N1cyB7XFxuICBjb2xvcjogI2NiZDNkYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1kYXJrIHtcXG4gIGNvbG9yOiAjMzQzYTQwICFpbXBvcnRhbnQ7XFxufVxcblxcbmEudGV4dC1kYXJrOmhvdmVyLCBhLnRleHQtZGFyazpmb2N1cyB7XFxuICBjb2xvcjogIzEyMTQxNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1ib2R5IHtcXG4gIGNvbG9yOiAjMjEyNTI5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZXh0LW11dGVkIHtcXG4gIGNvbG9yOiAjNmM3NTdkICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZXh0LWJsYWNrLTUwIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSkgIWltcG9ydGFudDtcXG59XFxuXFxuLnRleHQtd2hpdGUtNTAge1xcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1oaWRlIHtcXG4gIGZvbnQ6IDAvMCBhO1xcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgdGV4dC1zaGFkb3c6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogMDtcXG59XFxuXFxuLnRleHQtZGVjb3JhdGlvbi1ub25lIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1icmVhayB7XFxuICB3b3JkLWJyZWFrOiBicmVhay13b3JkICFpbXBvcnRhbnQ7XFxuICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZXh0LXJlc2V0IHtcXG4gIGNvbG9yOiBpbmhlcml0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi52aXNpYmxlIHtcXG4gIHZpc2liaWxpdHk6IHZpc2libGUgIWltcG9ydGFudDtcXG59XFxuXFxuLmludmlzaWJsZSB7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDtcXG59XFxuXFxuQG1lZGlhIHByaW50IHtcXG4gICosXFxuICAqOjpiZWZvcmUsXFxuICAqOjphZnRlciB7XFxuICAgIHRleHQtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XFxuICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG4gIGE6bm90KC5idG4pIHtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICB9XFxuICBhYmJyW3RpdGxlXTo6YWZ0ZXIge1xcbiAgICBjb250ZW50OiBcXFwiIChcXFwiIGF0dHIodGl0bGUpIFxcXCIpXFxcIjtcXG4gIH1cXG4gIHByZSB7XFxuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgcHJlLFxcbiAgYmxvY2txdW90ZSB7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNhZGI1YmQ7XFxuICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDtcXG4gIH1cXG4gIHRoZWFkIHtcXG4gICAgZGlzcGxheTogdGFibGUtaGVhZGVyLWdyb3VwO1xcbiAgfVxcbiAgdHIsXFxuICBpbWcge1xcbiAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7XFxuICB9XFxuICBwLFxcbiAgaDIsXFxuICBoMyB7XFxuICAgIG9ycGhhbnM6IDM7XFxuICAgIHdpZG93czogMztcXG4gIH1cXG4gIGgyLFxcbiAgaDMge1xcbiAgICBwYWdlLWJyZWFrLWFmdGVyOiBhdm9pZDtcXG4gIH1cXG4gIEBwYWdlIHtcXG4gICAgc2l6ZTogYTM7XFxuICB9XFxuICBib2R5IHtcXG4gICAgbWluLXdpZHRoOiA5OTJweCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmNvbnRhaW5lciB7XFxuICAgIG1pbi13aWR0aDogOTkycHggIWltcG9ydGFudDtcXG4gIH1cXG4gIC5uYXZiYXIge1xcbiAgICBkaXNwbGF5OiBub25lO1xcbiAgfVxcbiAgLmJhZGdlIHtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgIzAwMDtcXG4gIH1cXG4gIC50YWJsZSB7XFxuICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2UgIWltcG9ydGFudDtcXG4gIH1cXG4gIC50YWJsZSB0ZCxcXG4gIC50YWJsZSB0aCB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYgIWltcG9ydGFudDtcXG4gIH1cXG4gIC50YWJsZS1ib3JkZXJlZCB0aCxcXG4gIC50YWJsZS1ib3JkZXJlZCB0ZCB7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZWUyZTYgIWltcG9ydGFudDtcXG4gIH1cXG4gIC50YWJsZS1kYXJrIHtcXG4gICAgY29sb3I6IGluaGVyaXQ7XFxuICB9XFxuICAudGFibGUtZGFyayB0aCxcXG4gIC50YWJsZS1kYXJrIHRkLFxcbiAgLnRhYmxlLWRhcmsgdGhlYWQgdGgsXFxuICAudGFibGUtZGFyayB0Ym9keSArIHRib2R5IHtcXG4gICAgYm9yZGVyLWNvbG9yOiAjZGVlMmU2O1xcbiAgfVxcbiAgLnRhYmxlIC50aGVhZC1kYXJrIHRoIHtcXG4gICAgY29sb3I6IGluaGVyaXQ7XFxuICAgIGJvcmRlci1jb2xvcjogI2RlZTJlNjtcXG4gIH1cXG59XCIsIFwiXCJdKTtcblxuIiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIikoZmFsc2UpO1xuLy8gTW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCJib2R5IHtcXG5cXG59XFxuXFxuLnBhZ2Uge1xcbiAgcGFkZGluZy1ib3R0b206IDE1MHB4O1xcbn1cXG5cXG4uc2lkZWJhciB7XFxuICBwYWRkaW5nLXRvcDogMjBweDtcXG4gIG1hcmdpbi10b3A6IDQ4cHg7XFxuICBtaW4taGVpZ2h0OiA4ZW07XFxuICBwYWRkaW5nLWxlZnQ6IDEwcHhcXG59XFxuXFxuW3JvbGU9XFxcIm1haW5cXFwiXSB7XFxuICBwYWRkaW5nLXRvcDogMjBweDtcXG4gIG1hcmdpbi10b3A6IDQ4cHg7XFxufVxcblxcbi5pbmxpbmV7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcXG59XFxuXFxuc3BhbiB7XFxuICBmb250LXNpemU6IDFyZW07XFxufVxcblxcbnNlbGVjdCB7XFxuICBtYXJnaW4tbGVmdDogMTBweDtcXG59XFxuXFxubGFiZWwge1xcbiAgcGFkZGluZy1yaWdodDogMC4yNXJlbTtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG5cXG5zcGFuLmN1c3RvbSB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwLjI1cmVtO1xcbiAgcGFkZGluZy1sZWZ0OiAwLjI1cmVtO1xcbn1cXG5cXG5idXR0b24uY3VzdG9tIHtcXG4gIG1hcmdpbjogMC4yNXJlbTtcXG59XFxuXFxuYS5kaXNhYmxlZCB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuXFxuLm5hdi1pdGVtIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuXFxuLm5hdi1saW5rIHtcXG4gIHBhZGRpbmc6IDAuNXJlbSAwLjI1cmVtIDAuNXJlbSAxcmVtO1xcbn1cXG5cXG4uZHJvcGRvd24tbWVudSBsaTpob3ZlciB7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLm5hbWUge1xcbiAgd2lkdGg6IDhyZW07XFxufVxcblxcbi5mb3JtLWlucHV0IHtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG5cXG4uZm9ybS1pbnB1dC5sYWJlbGVkIHtcXG4gIHdpZHRoOiA2MCU7XFxufVxcblxcbjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbjo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24ge1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG4gIGNvbG9yOiAjMDA3YmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsgXFxuICBib3JkZXItY29sb3I6ICMwMDdiZmY7XFxuICBwYWRkaW5nOiAwLjM3NXJlbSwgMC43NXJlbTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkO1xcbiAgbWFyZ2luOiA1cHggMTBweCA1cHggMHB4ICFpbXBvcnRhbnQ7XFxuICBib3gtc2hhZG93OiA2cHggNnB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgLjIpLCAyLjI1cHggMi4yNXB4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgLjEpLCAzLjc1cHggMy43NXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgLjQpXFxufVxcblxcbmlucHV0W3R5cGU9XFxcImZpbGVcXFwiXTo6LW1zLWJyb3dzZSB7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbiAgY29sb3I6ICMwMDdiZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOyBcXG4gIGJvcmRlci1jb2xvcjogIzAwN2JmZjtcXG4gIHBhZGRpbmc6IDAuMzc1cmVtLCAwLjc1cmVtO1xcbiAgYm9yZGVyOiAxcHggc29saWQ7XFxuICBtYXJnaW46IDVweCAxMHB4IDVweCAwcHggIWltcG9ydGFudDtcXG4gIGJveC1zaGFkb3c6IDZweCA2cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAuMiksIDIuMjVweCAyLjI1cHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAuMSksIDMuNzVweCAzLjc1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAuNClcXG59XFxuXFxuOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbjpob3ZlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDdiZmY7XFxuICBib3JkZXItY29sb3I6ICMwMDdiZmY7XFxufVxcblxcbjo6LW1vei1wbGFjZWhvbGRlciB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG46Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbjo6cGxhY2Vob2xkZXIge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG4uc2lkZWJhci1uYXYge1xcbiAgcGFkZGluZzogOXB4IDA7XFxuICBmb250LXNpemU6IDE0cHg7XFxufVxcblxcbi5nZXQtc3RhcnRlZCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbn1cXG5cXG4ubmF2IHtcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG59XFxuXFxuLnNpZGViYXItc3RpY2t5IHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG59XFxuXFxuLnRvb2xzIHtcXG4gIG1pbi13aWR0aDogMTJlbTsgXFxufVxcblxcbi5ib2R5IHtcXG4gIG1pbi13aWR0aDogNTAwcHggIWltcG9ydGFudDsgXFxufVxcbi5wbG90LXByZXZpZXcge1xcbiAgbWFyZ2luOiAxMHB4O1xcbn1cXG5cXG4ucmVhY3Rpb24tc3VtbWFyeSB7XFxuICBwYWRkaW5nLWxlZnQ6IDE1cHg7XFxuICBwYWRkaW5nLXJpZ2h0OiA1cHg7XFxuICBwYWRkaW5nLWJvdHRvbTogMTBweDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuXFxuLmNvbnRhaW5lci1wYXJ0IHtcXG4gIG1heC13aWR0aDogbm9uZTtcXG59XFxuXFxuLmluZm9ybWF0aW9uLWJ0biB7XFxuICBjb2xvcjogIzAwN2JmZjtcXG4gIGJvcmRlci1jb2xvcjogI2ZmZmZmZjtcXG4gIHBhZGRpbmc6IDAuNXJlbSAxcmVtO1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG59XFxuXFxuLmhlbHAge1xcbiAgZm9udC1zaXplOiAyNXB4O1xcbiAgcGFkZGluZzogMDtcXG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XFxufVxcblxcbi50b29sdGlwLWljb24ge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgcGFkZGluZy1sZWZ0OiAycHg7XFxuICBwYWRkaW5nLXJpZ2h0OiAycHg7XFxuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xcbiAgY29sb3I6ICMwMDdiZmY7XFxufVxcblxcbi50b29sdGlwLWljb24tbGFyZ2Uge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgZm9udC1zaXplOiAyMHB4O1xcbiAgcGFkZGluZy1sZWZ0OiAxMHB4O1xcbiAgcGFkZGluZy1yaWdodDogMTBweDtcXG4gIHZlcnRpY2FsLWFsaWduOiBib3R0b207XFxuICBjb2xvcjogIzAwN2JmZjtcXG59XFxuXFxuLmluZm9ybWF0aW9uLWJ0bjpob3ZlciB7XFxuICBjb2xvcjogIzAwNTZiMztcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWNvbGxhcHNlIHtcXG4gIGNvbG9yOiAjMDAwO1xcbiAgcGFkZGluZzogMHB4IDEwcHg7XFxuICBmb250LXNpemU6IDIwcHg7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgbWFyZ2luLWJvdHRvbTogMC43NXJlbTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWNvbGxhcHNlOmhvdmVyIHtcXG4gIGNvbG9yOiAjMDA3YmZmO1xcbn1cXG5cXG4uYnRuLXByaW1hcnkge1xcbiAgbWFyZ2luOiA1cHggMTBweCA1cHggMHB4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWFjdGlvbi1zdWJkb21haW4ge1xcbiAgcGFkZGluZzogMHB4IDBweCAwcHggMjBweDtcXG4gIGJvcmRlcjogMDtcXG59XFxuXFxuLnJlYWN0aW9uLWRldGFpbHMtc3ViZG9tYWluIHtcXG4gIHBhZGRpbmc6IDBweCAwcHggMHB4IDVweDtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLXRvb2wge1xcbiAgY29sb3I6ICMwMDdiZmY7XFxuICBwYWRkaW5nOiAwLjVyZW0gMXJlbTtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxufVxcblxcbi5idG4tb3V0bGluZS10b29sOmhvdmVyIHtcXG4gIGNvbG9yOiAjMDA1NmIzO1xcbn1cXG5cXG4jY29sbGFwc2UtZGVzY3JpcHRpb24ge1xcbiAgcGFkZGluZzogMHJlbSAycmVtO1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbn1cXG5cXG4ubW9kYWwtY29udGVudC5pbmZvIHtcXG4gIHdpZHRoOiAxNTAlO1xcbn1cXG5cXG4ubW9kYWwtY29udGVudC5kZWZhdWx0LXNwZWNpZXMge1xcbiAgd2lkdGg6IDYwJTtcXG59XFxuXFxuLnNwaW5uZXItYm9yZGVyIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBtYXJnaW46IDE1cHg7XFxuICBsZWZ0OiA0MCU7XFxuICB3aWR0aDogOTBweDtcXG4gIGhlaWdodDogOTBweDtcXG4gIGJvcmRlcjogMTJweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMTI1KTtcXG4gIGJvcmRlci1yaWdodC1jb2xvcjogIzAwN2JmZjtcXG59XFxuXFxuLmVycm9ycyB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5cXG4ubWRsLWVkaXQtYnRuIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuXFxuQGtleWZyYW1lcyBzcGlubmVyLWdyb3cge1xcbiAwJSB7XFxuICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApO1xcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XFxuIH1cXG4gNTAlIHtcXG4gICAgIG9wYWNpdHk6IDE7IFxcbiAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpO1xcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XFxuIH1cXG59XFxuXFxuLnNhdmluZy1zdGF0dXMsIC5zYXZlZC1zdGF0dXMsIC5zYXZlLWVycm9yLXN0YXR1cyB7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgbWFyZ2luOiAxNXB4O1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG59XFxuXFxuLnNhdmluZy1zdGF0dXMge1xcbiAgY29sb3I6ICMxMTdhOGI7XFxufVxcblxcbi5zYXZlZC1zdGF0dXMge1xcbiAgY29sb3I6ICMxZTdlMzQ7XFxufVxcblxcbi5zYXZlLWVycm9yLXN0YXR1cyB7XFxuICBjb2xvcjogI2RjMzU0NTtcXG59XFxuXFxuLnJpZ2h0LWp1c3RpZnkge1xcbiAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XFxuICByaWdodDogNXB4O1xcbiAgbGVmdDogYXV0bztcXG59XFxuXFxuLmRlZmF1bHQtbW9kZSB7XFxuICBtYXJnaW46IDAuNzVyZW07XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGxlZnQ7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGxlZnQ7XFxufVxcblxcbi5jb25jZW50cmF0aW9uLWJ0biwgLnBvcHVsYXRpb24tYnRuLCAuaHlicmlkLWJ0biB7XFxuICBtaW4td2lkdGg6IDI0MHB4O1xcbiAgbWFyZ2luLXJpZ2h0OiAwLjc1cmVtO1xcbn1cXG5cXG5pbnB1dFt0eXBlPVxcXCJjaGVja2JveFxcXCJdIHtcXG4gIHBhZGRpbmc6IDAuNzVyZW07XFxufVxcblxcbnNwYW4uY2hlY2tib3gge1xcbiAgcGFkZGluZy1yaWdodDogMC4yNXJlbTtcXG59XFxuXFxuLmV2ZW50IHtcXG4gIG1hcmdpbi1ib3R0b206IDBweDtcXG59XFxuXFxuLmV2ZW50LXRoIC5ldmVudC10ZCB7XFxuICBwYWRkaW5nLWxlZnQ6IDBweCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udG9vbHRpcC1pbm5lciB7XFxuICBtYXgtd2lkdGg6IDMwMHB4O1xcbiAgcGFkZGluZzogMC4yNXJlbSAwLjVyZW07XFxuICBjb2xvcjogI2ZmZjtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLnZlcnRpY2xlLXNwYWNlIHtcXG4gIHBhZGRpbmctYm90dG9tOiAxMHB4O1xcbn1cXG5cXG4uaG9yaXpvbnRhbC1zcGFjZSB7XFxuICBwYWRkaW5nLWxlZnQ6IDVweDtcXG4gIHBhZGRpbmctcmlnaHQ6IDVweDtcXG59XFxuXFxuLnN3aXRjaGluZyB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xcbiAgaGVpZ2h0OiAyOXB4O1xcbn1cXG5cXG4jaG9tZS13cmFwcGVyIHtcXG4gIG1hcmdpbi10b3A6IDJlbTtcXG4gIG1hcmdpbi1ib3R0b206IDJlbTtcXG59XFxuXFxuLmxvZ28ge1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuLmxvZ28gaW1nIHtcXG4gIHdpZHRoOiA0MGVtO1xcbiAgbWFyZ2luLWxlZnQ6IC04ZW07XFxufVxcblxcbi50cnktc3RvY2hzcy1idG4ge1xcbiAgcGFkZGluZzogMS41cmVtIDEuNXJlbTtcXG4gIGZvbnQtc2l6ZTogMnJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxO1xcbiAgYm9yZGVyLXJhZGl1czogMS41cmVtO1xcbn1cXG5cXG4uaG9tZS1saXN0IHtcXG4gIGxpbmUtaGVpZ2h0OiAyO1xcbn1cXG5cXG4uY2VudGVyZWQge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG4uaG9tZS1wIHtcXG4gIG1hcmdpbi10b3A6IDEuNWVtO1xcbiAgbWFyZ2luLWJvdHRvbTogMS41ZW07XFxuICBmb250LXNpemU6IDIycHg7XFxufVxcblxcbi5iaWctdGlwIHtcXG4gIG1hcmdpbi1sZWZ0OiAuMmVtO1xcbn1cXG5cXG4vKnNoYWRvd2luZyBmb3IgYnV0dG9ucyovXFxuLmJveC1zaGFkb3cge1xcbiAgLypoLW9mZnNldCB2LW9mZnNldCBibHVyIHNwcmVhZCBjb2xvciovXFxuICBib3gtc2hhZG93OiA2cHggNnB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgLjIpLCAyLjI1cHggMi4yNXB4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgLjEpLCAzLjc1cHggMy43NXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgLjQpXFxufVwiLCBcIlwiXSk7XG5cbiIsImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi8uLi9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIikoZmFsc2UpO1xuLy8gTW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCIvKiFcXG4gKiBGb250IEF3ZXNvbWUgRnJlZSA1LjEyLjAgYnkgQGZvbnRhd2Vzb21lIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb21cXG4gKiBMaWNlbnNlIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20vbGljZW5zZS9mcmVlIChJY29uczogQ0MgQlkgNC4wLCBGb250czogU0lMIE9GTCAxLjEsIENvZGU6IE1JVCBMaWNlbnNlKVxcbiAqL1xcbi5zdmctaW5saW5lLS1mYSxzdmc6bm90KDpyb290KS5zdmctaW5saW5lLS1mYXtvdmVyZmxvdzp2aXNpYmxlfS5zdmctaW5saW5lLS1mYXtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6aW5oZXJpdDtoZWlnaHQ6MWVtO3ZlcnRpY2FsLWFsaWduOi0uMTI1ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLWxne3ZlcnRpY2FsLWFsaWduOi0uMjI1ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLXctMXt3aWR0aDouMDYyNWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTJ7d2lkdGg6LjEyNWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTN7d2lkdGg6LjE4NzVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy00e3dpZHRoOi4yNWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTV7d2lkdGg6LjMxMjVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy02e3dpZHRoOi4zNzVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy03e3dpZHRoOi40Mzc1ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLXctOHt3aWR0aDouNWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTl7d2lkdGg6LjU2MjVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy0xMHt3aWR0aDouNjI1ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLXctMTF7d2lkdGg6LjY4NzVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy0xMnt3aWR0aDouNzVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy0xM3t3aWR0aDouODEyNWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTE0e3dpZHRoOi44NzVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy0xNXt3aWR0aDouOTM3NWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTE2e3dpZHRoOjFlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy0xN3t3aWR0aDoxLjA2MjVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy0xOHt3aWR0aDoxLjEyNWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTE5e3dpZHRoOjEuMTg3NWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTIwe3dpZHRoOjEuMjVlbX0uc3ZnLWlubGluZS0tZmEuZmEtcHVsbC1sZWZ0e21hcmdpbi1yaWdodDouM2VtO3dpZHRoOmF1dG99LnN2Zy1pbmxpbmUtLWZhLmZhLXB1bGwtcmlnaHR7bWFyZ2luLWxlZnQ6LjNlbTt3aWR0aDphdXRvfS5zdmctaW5saW5lLS1mYS5mYS1ib3JkZXJ7aGVpZ2h0OjEuNWVtfS5zdmctaW5saW5lLS1mYS5mYS1saXt3aWR0aDoyZW19LnN2Zy1pbmxpbmUtLWZhLmZhLWZ3e3dpZHRoOjEuMjVlbX0uZmEtbGF5ZXJzIHN2Zy5zdmctaW5saW5lLS1mYXtib3R0b206MDtsZWZ0OjA7bWFyZ2luOmF1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0uZmEtbGF5ZXJze2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dmVydGljYWwtYWxpZ246LS4xMjVlbTt3aWR0aDoxZW19LmZhLWxheWVycyBzdmcuc3ZnLWlubGluZS0tZmF7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOmNlbnRlciBjZW50ZXI7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXIgY2VudGVyfS5mYS1sYXllcnMtY291bnRlciwuZmEtbGF5ZXJzLXRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dGV4dC1hbGlnbjpjZW50ZXJ9LmZhLWxheWVycy10ZXh0e2xlZnQ6NTAlO3RvcDo1MCU7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjpjZW50ZXIgY2VudGVyO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyIGNlbnRlcn0uZmEtbGF5ZXJzLWNvdW50ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmYyNTNhO2JvcmRlci1yYWRpdXM6MWVtOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjojZmZmO2hlaWdodDoxLjVlbTtsaW5lLWhlaWdodDoxO21heC13aWR0aDo1ZW07bWluLXdpZHRoOjEuNWVtO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4yNWVtO3JpZ2h0OjA7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt0b3A6MDstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguMjUpO3RyYW5zZm9ybTpzY2FsZSguMjUpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjp0b3AgcmlnaHQ7dHJhbnNmb3JtLW9yaWdpbjp0b3AgcmlnaHR9LmZhLWxheWVycy1ib3R0b20tcmlnaHR7Ym90dG9tOjA7cmlnaHQ6MDt0b3A6YXV0bzstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguMjUpO3RyYW5zZm9ybTpzY2FsZSguMjUpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjpib3R0b20gcmlnaHQ7dHJhbnNmb3JtLW9yaWdpbjpib3R0b20gcmlnaHR9LmZhLWxheWVycy1ib3R0b20tbGVmdHtib3R0b206MDtsZWZ0OjA7cmlnaHQ6YXV0bzt0b3A6YXV0bzstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguMjUpO3RyYW5zZm9ybTpzY2FsZSguMjUpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjpib3R0b20gbGVmdDt0cmFuc2Zvcm0tb3JpZ2luOmJvdHRvbSBsZWZ0fS5mYS1sYXllcnMtdG9wLXJpZ2h0e3JpZ2h0OjA7dG9wOjA7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLjI1KTt0cmFuc2Zvcm06c2NhbGUoLjI1KTstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46dG9wIHJpZ2h0O3RyYW5zZm9ybS1vcmlnaW46dG9wIHJpZ2h0fS5mYS1sYXllcnMtdG9wLWxlZnR7bGVmdDowO3JpZ2h0OmF1dG87dG9wOjA7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLjI1KTt0cmFuc2Zvcm06c2NhbGUoLjI1KTstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46dG9wIGxlZnQ7dHJhbnNmb3JtLW9yaWdpbjp0b3AgbGVmdH0uZmEtbGd7Zm9udC1zaXplOjEuMzMzMzNlbTtsaW5lLWhlaWdodDouNzVlbTt2ZXJ0aWNhbC1hbGlnbjotLjA2NjdlbX0uZmEteHN7Zm9udC1zaXplOi43NWVtfS5mYS1zbXtmb250LXNpemU6Ljg3NWVtfS5mYS0xeHtmb250LXNpemU6MWVtfS5mYS0yeHtmb250LXNpemU6MmVtfS5mYS0zeHtmb250LXNpemU6M2VtfS5mYS00eHtmb250LXNpemU6NGVtfS5mYS01eHtmb250LXNpemU6NWVtfS5mYS02eHtmb250LXNpemU6NmVtfS5mYS03eHtmb250LXNpemU6N2VtfS5mYS04eHtmb250LXNpemU6OGVtfS5mYS05eHtmb250LXNpemU6OWVtfS5mYS0xMHh7Zm9udC1zaXplOjEwZW19LmZhLWZ3e3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjEuMjVlbX0uZmEtdWx7bGlzdC1zdHlsZS10eXBlOm5vbmU7bWFyZ2luLWxlZnQ6Mi41ZW07cGFkZGluZy1sZWZ0OjB9LmZhLXVsPmxpe3Bvc2l0aW9uOnJlbGF0aXZlfS5mYS1saXtsZWZ0Oi0yZW07cG9zaXRpb246YWJzb2x1dGU7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MmVtO2xpbmUtaGVpZ2h0OmluaGVyaXR9LmZhLWJvcmRlcntib3JkZXI6LjA4ZW0gc29saWQgI2VlZTtib3JkZXItcmFkaXVzOi4xZW07cGFkZGluZzouMmVtIC4yNWVtIC4xNWVtfS5mYS1wdWxsLWxlZnR7ZmxvYXQ6bGVmdH0uZmEtcHVsbC1yaWdodHtmbG9hdDpyaWdodH0uZmEuZmEtcHVsbC1sZWZ0LC5mYWIuZmEtcHVsbC1sZWZ0LC5mYWwuZmEtcHVsbC1sZWZ0LC5mYXIuZmEtcHVsbC1sZWZ0LC5mYXMuZmEtcHVsbC1sZWZ0e21hcmdpbi1yaWdodDouM2VtfS5mYS5mYS1wdWxsLXJpZ2h0LC5mYWIuZmEtcHVsbC1yaWdodCwuZmFsLmZhLXB1bGwtcmlnaHQsLmZhci5mYS1wdWxsLXJpZ2h0LC5mYXMuZmEtcHVsbC1yaWdodHttYXJnaW4tbGVmdDouM2VtfS5mYS1zcGluey13ZWJraXQtYW5pbWF0aW9uOmZhLXNwaW4gMnMgbGluZWFyIGluZmluaXRlO2FuaW1hdGlvbjpmYS1zcGluIDJzIGxpbmVhciBpbmZpbml0ZX0uZmEtcHVsc2V7LXdlYmtpdC1hbmltYXRpb246ZmEtc3BpbiAxcyBzdGVwcyg4KSBpbmZpbml0ZTthbmltYXRpb246ZmEtc3BpbiAxcyBzdGVwcyg4KSBpbmZpbml0ZX1ALXdlYmtpdC1rZXlmcmFtZXMgZmEtc3BpbnswJXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMGRlZyk7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX10b3std2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMXR1cm4pO3RyYW5zZm9ybTpyb3RhdGUoMXR1cm4pfX1Aa2V5ZnJhbWVzIGZhLXNwaW57MCV7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDBkZWcpO3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9dG97LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDF0dXJuKTt0cmFuc2Zvcm06cm90YXRlKDF0dXJuKX19LmZhLXJvdGF0ZS05MHstbXMtZmlsdGVyOlxcXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0xKVxcXCI7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDkwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX0uZmEtcm90YXRlLTE4MHstbXMtZmlsdGVyOlxcXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0yKVxcXCI7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDE4MGRlZyk7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfS5mYS1yb3RhdGUtMjcwey1tcy1maWx0ZXI6XFxcInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5CYXNpY0ltYWdlKHJvdGF0aW9uPTMpXFxcIjstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDI3MGRlZyl9LmZhLWZsaXAtaG9yaXpvbnRhbHstbXMtZmlsdGVyOlxcXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0wLCBtaXJyb3I9MSlcXFwiOy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlWCgtMSk7dHJhbnNmb3JtOnNjYWxlWCgtMSl9LmZhLWZsaXAtdmVydGljYWx7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGVZKC0xKTt0cmFuc2Zvcm06c2NhbGVZKC0xKX0uZmEtZmxpcC1ib3RoLC5mYS1mbGlwLWhvcml6b250YWwuZmEtZmxpcC12ZXJ0aWNhbCwuZmEtZmxpcC12ZXJ0aWNhbHstbXMtZmlsdGVyOlxcXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0yLCBtaXJyb3I9MSlcXFwifS5mYS1mbGlwLWJvdGgsLmZhLWZsaXAtaG9yaXpvbnRhbC5mYS1mbGlwLXZlcnRpY2Fsey13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC0xKTt0cmFuc2Zvcm06c2NhbGUoLTEpfTpyb290IC5mYS1mbGlwLWJvdGgsOnJvb3QgLmZhLWZsaXAtaG9yaXpvbnRhbCw6cm9vdCAuZmEtZmxpcC12ZXJ0aWNhbCw6cm9vdCAuZmEtcm90YXRlLTkwLDpyb290IC5mYS1yb3RhdGUtMTgwLDpyb290IC5mYS1yb3RhdGUtMjcwey13ZWJraXQtZmlsdGVyOm5vbmU7ZmlsdGVyOm5vbmV9LmZhLXN0YWNre2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoyZW07cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6Mi41ZW19LmZhLXN0YWNrLTF4LC5mYS1zdGFjay0yeHtib3R0b206MDtsZWZ0OjA7bWFyZ2luOmF1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0uc3ZnLWlubGluZS0tZmEuZmEtc3RhY2stMXh7aGVpZ2h0OjFlbTt3aWR0aDoxLjI1ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLXN0YWNrLTJ4e2hlaWdodDoyZW07d2lkdGg6Mi41ZW19LmZhLWludmVyc2V7Y29sb3I6I2ZmZn0uc3Itb25seXtib3JkZXI6MDtjbGlwOnJlY3QoMCwwLDAsMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweH0uc3Itb25seS1mb2N1c2FibGU6YWN0aXZlLC5zci1vbmx5LWZvY3VzYWJsZTpmb2N1c3tjbGlwOmF1dG87aGVpZ2h0OmF1dG87bWFyZ2luOjA7b3ZlcmZsb3c6dmlzaWJsZTtwb3NpdGlvbjpzdGF0aWM7d2lkdGg6YXV0b30uc3ZnLWlubGluZS0tZmEgLmZhLXByaW1hcnl7ZmlsbDp2YXIoLS1mYS1wcmltYXJ5LWNvbG9yLGN1cnJlbnRDb2xvcik7b3BhY2l0eToxO29wYWNpdHk6dmFyKC0tZmEtcHJpbWFyeS1vcGFjaXR5LDEpfS5zdmctaW5saW5lLS1mYSAuZmEtc2Vjb25kYXJ5e2ZpbGw6dmFyKC0tZmEtc2Vjb25kYXJ5LWNvbG9yLGN1cnJlbnRDb2xvcil9LnN2Zy1pbmxpbmUtLWZhIC5mYS1zZWNvbmRhcnksLnN2Zy1pbmxpbmUtLWZhLmZhLXN3YXAtb3BhY2l0eSAuZmEtcHJpbWFyeXtvcGFjaXR5Oi40O29wYWNpdHk6dmFyKC0tZmEtc2Vjb25kYXJ5LW9wYWNpdHksLjQpfS5zdmctaW5saW5lLS1mYS5mYS1zd2FwLW9wYWNpdHkgLmZhLXNlY29uZGFyeXtvcGFjaXR5OjE7b3BhY2l0eTp2YXIoLS1mYS1wcmltYXJ5LW9wYWNpdHksMSl9LnN2Zy1pbmxpbmUtLWZhIG1hc2sgLmZhLXByaW1hcnksLnN2Zy1pbmxpbmUtLWZhIG1hc2sgLmZhLXNlY29uZGFyeXtmaWxsOiMwMDB9LmZhZC5mYS1pbnZlcnNle2NvbG9yOiNmZmZ9XCIsIFwiXCJdKTtcblxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG4vLyBjc3MgYmFzZSBjb2RlLCBpbmplY3RlZCBieSB0aGUgY3NzLWxvYWRlclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodXNlU291cmNlTWFwKSB7XG4gIHZhciBsaXN0ID0gW107IC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblxuICBsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgY29udGVudCA9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSwgdXNlU291cmNlTWFwKTtcblxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgcmV0dXJuICdAbWVkaWEgJyArIGl0ZW1bMl0gKyAneycgKyBjb250ZW50ICsgJ30nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfSkuam9pbignJyk7XG4gIH07IC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG5cblxuICBsaXN0LmkgPSBmdW5jdGlvbiAobW9kdWxlcywgbWVkaWFRdWVyeSkge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsICcnXV07XG4gICAgfVxuXG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkID0gdGhpc1tpXVswXTtcblxuICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBtb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IG1vZHVsZXNbaV07IC8vIHNraXAgYWxyZWFkeSBpbXBvcnRlZCBtb2R1bGVcbiAgICAgIC8vIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgbm90IDEwMCUgcGVyZmVjdCBmb3Igd2VpcmQgbWVkaWEgcXVlcnkgY29tYmluYXRpb25zXG4gICAgICAvLyB3aGVuIGEgbW9kdWxlIGlzIGltcG9ydGVkIG11bHRpcGxlIHRpbWVzIHdpdGggZGlmZmVyZW50IG1lZGlhIHF1ZXJpZXMuXG4gICAgICAvLyBJIGhvcGUgdGhpcyB3aWxsIG5ldmVyIG9jY3VyIChIZXkgdGhpcyB3YXkgd2UgaGF2ZSBzbWFsbGVyIGJ1bmRsZXMpXG5cbiAgICAgIGlmIChpdGVtWzBdID09IG51bGwgfHwgIWFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgaWYgKG1lZGlhUXVlcnkgJiYgIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWFRdWVyeTtcbiAgICAgICAgfSBlbHNlIGlmIChtZWRpYVF1ZXJ5KSB7XG4gICAgICAgICAgaXRlbVsyXSA9ICcoJyArIGl0ZW1bMl0gKyAnKSBhbmQgKCcgKyBtZWRpYVF1ZXJ5ICsgJyknO1xuICAgICAgICB9XG5cbiAgICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbGlzdDtcbn07XG5cbmZ1bmN0aW9uIGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSwgdXNlU291cmNlTWFwKSB7XG4gIHZhciBjb250ZW50ID0gaXRlbVsxXSB8fCAnJztcbiAgdmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuXG4gIGlmICghY3NzTWFwcGluZykge1xuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgaWYgKHVzZVNvdXJjZU1hcCAmJiB0eXBlb2YgYnRvYSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBzb3VyY2VNYXBwaW5nID0gdG9Db21tZW50KGNzc01hcHBpbmcpO1xuICAgIHZhciBzb3VyY2VVUkxzID0gY3NzTWFwcGluZy5zb3VyY2VzLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICByZXR1cm4gJy8qIyBzb3VyY2VVUkw9JyArIGNzc01hcHBpbmcuc291cmNlUm9vdCArIHNvdXJjZSArICcgKi8nO1xuICAgIH0pO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKCdcXG4nKTtcbn0gLy8gQWRhcHRlZCBmcm9tIGNvbnZlcnQtc291cmNlLW1hcCAoTUlUKVxuXG5cbmZ1bmN0aW9uIHRvQ29tbWVudChzb3VyY2VNYXApIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpO1xuICB2YXIgZGF0YSA9ICdzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCwnICsgYmFzZTY0O1xuICByZXR1cm4gJy8qIyAnICsgZGF0YSArICcgKi8nO1xufSIsIid1c2Ugc3RyaWN0JztcblxudmFyIGtleXMgPSByZXF1aXJlKCdvYmplY3Qta2V5cycpO1xudmFyIGhhc1N5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2woJ2ZvbycpID09PSAnc3ltYm9sJztcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBjb25jYXQgPSBBcnJheS5wcm90b3R5cGUuY29uY2F0O1xudmFyIG9yaWdEZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxudmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiAoZm4pIHtcblx0cmV0dXJuIHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyAmJiB0b1N0ci5jYWxsKGZuKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn07XG5cbnZhciBhcmVQcm9wZXJ0eURlc2NyaXB0b3JzU3VwcG9ydGVkID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgb2JqID0ge307XG5cdHRyeSB7XG5cdFx0b3JpZ0RlZmluZVByb3BlcnR5KG9iaiwgJ3gnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogb2JqIH0pO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycywgbm8tcmVzdHJpY3RlZC1zeW50YXhcblx0XHRmb3IgKHZhciBfIGluIG9iaikgeyAvLyBqc2NzOmlnbm9yZSBkaXNhbGxvd1VudXNlZFZhcmlhYmxlc1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gb2JqLnggPT09IG9iajtcblx0fSBjYXRjaCAoZSkgeyAvKiB0aGlzIGlzIElFIDguICovXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xudmFyIHN1cHBvcnRzRGVzY3JpcHRvcnMgPSBvcmlnRGVmaW5lUHJvcGVydHkgJiYgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCgpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lLCB2YWx1ZSwgcHJlZGljYXRlKSB7XG5cdGlmIChuYW1lIGluIG9iamVjdCAmJiAoIWlzRnVuY3Rpb24ocHJlZGljYXRlKSB8fCAhcHJlZGljYXRlKCkpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmIChzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0b3JpZ0RlZmluZVByb3BlcnR5KG9iamVjdCwgbmFtZSwge1xuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9iamVjdFtuYW1lXSA9IHZhbHVlO1xuXHR9XG59O1xuXG52YXIgZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIChvYmplY3QsIG1hcCkge1xuXHR2YXIgcHJlZGljYXRlcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDoge307XG5cdHZhciBwcm9wcyA9IGtleXMobWFwKTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHRwcm9wcyA9IGNvbmNhdC5jYWxsKHByb3BzLCBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG1hcCkpO1xuXHR9XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpICs9IDEpIHtcblx0XHRkZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BzW2ldLCBtYXBbcHJvcHNbaV1dLCBwcmVkaWNhdGVzW3Byb3BzW2ldXSk7XG5cdH1cbn07XG5cbmRlZmluZVByb3BlcnRpZXMuc3VwcG9ydHNEZXNjcmlwdG9ycyA9ICEhc3VwcG9ydHNEZXNjcmlwdG9ycztcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVQcm9wZXJ0aWVzO1xuIiwiLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbnZhciBjbG9zZXN0ID0gcmVxdWlyZSgnY2xvc2VzdCcpXG4gICwgZXZlbnQgPSByZXF1aXJlKCdjb21wb25lbnQtZXZlbnQnKTtcblxuLyoqXG4gKiBEZWxlZ2F0ZSBldmVudCBgdHlwZWAgdG8gYHNlbGVjdG9yYFxuICogYW5kIGludm9rZSBgZm4oZSlgLiBBIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKiBpcyByZXR1cm5lZCB3aGljaCBtYXkgYmUgcGFzc2VkIHRvIGAudW5iaW5kKClgLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvclxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGNhcHR1cmVcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG4vLyBTb21lIGV2ZW50cyBkb24ndCBidWJibGUsIHNvIHdlIHdhbnQgdG8gYmluZCB0byB0aGUgY2FwdHVyZSBwaGFzZSBpbnN0ZWFkXG4vLyB3aGVuIGRlbGVnYXRpbmcuXG52YXIgZm9yY2VDYXB0dXJlRXZlbnRzID0gWydmb2N1cycsICdibHVyJ107XG5cbmV4cG9ydHMuYmluZCA9IGZ1bmN0aW9uKGVsLCBzZWxlY3RvciwgdHlwZSwgZm4sIGNhcHR1cmUpe1xuICBpZiAoZm9yY2VDYXB0dXJlRXZlbnRzLmluZGV4T2YodHlwZSkgIT09IC0xKSBjYXB0dXJlID0gdHJ1ZTtcblxuICByZXR1cm4gZXZlbnQuYmluZChlbCwgdHlwZSwgZnVuY3Rpb24oZSl7XG4gICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudDtcbiAgICBlLmRlbGVnYXRlVGFyZ2V0ID0gY2xvc2VzdCh0YXJnZXQsIHNlbGVjdG9yLCB0cnVlLCBlbCk7XG4gICAgaWYgKGUuZGVsZWdhdGVUYXJnZXQpIGZuLmNhbGwoZWwsIGUpO1xuICB9LCBjYXB0dXJlKTtcbn07XG5cbi8qKlxuICogVW5iaW5kIGV2ZW50IGB0eXBlYCdzIGNhbGxiYWNrIGBmbmAuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbFxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGNhcHR1cmVcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy51bmJpbmQgPSBmdW5jdGlvbihlbCwgdHlwZSwgZm4sIGNhcHR1cmUpe1xuICBpZiAoZm9yY2VDYXB0dXJlRXZlbnRzLmluZGV4T2YodHlwZSkgIT09IC0xKSBjYXB0dXJlID0gdHJ1ZTtcblxuICBldmVudC51bmJpbmQoZWwsIHR5cGUsIGZuLCBjYXB0dXJlKTtcbn07XG4iLCJcbi8qKlxuICogRXhwb3NlIGBwYXJzZWAuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZTtcblxuLyoqXG4gKiBUZXN0cyBmb3IgYnJvd3NlciBzdXBwb3J0LlxuICovXG5cbnZhciBpbm5lckhUTUxCdWcgPSBmYWxzZTtcbnZhciBidWdUZXN0RGl2O1xuaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgYnVnVGVzdERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAvLyBTZXR1cFxuICBidWdUZXN0RGl2LmlubmVySFRNTCA9ICcgIDxsaW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPVwiL2FcIj5hPC9hPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIi8+JztcbiAgLy8gTWFrZSBzdXJlIHRoYXQgbGluayBlbGVtZW50cyBnZXQgc2VyaWFsaXplZCBjb3JyZWN0bHkgYnkgaW5uZXJIVE1MXG4gIC8vIFRoaXMgcmVxdWlyZXMgYSB3cmFwcGVyIGVsZW1lbnQgaW4gSUVcbiAgaW5uZXJIVE1MQnVnID0gIWJ1Z1Rlc3REaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xpbmsnKS5sZW5ndGg7XG4gIGJ1Z1Rlc3REaXYgPSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogV3JhcCBtYXAgZnJvbSBqcXVlcnkuXG4gKi9cblxudmFyIG1hcCA9IHtcbiAgbGVnZW5kOiBbMSwgJzxmaWVsZHNldD4nLCAnPC9maWVsZHNldD4nXSxcbiAgdHI6IFsyLCAnPHRhYmxlPjx0Ym9keT4nLCAnPC90Ym9keT48L3RhYmxlPiddLFxuICBjb2w6IFsyLCAnPHRhYmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4nLCAnPC9jb2xncm91cD48L3RhYmxlPiddLFxuICAvLyBmb3Igc2NyaXB0L2xpbmsvc3R5bGUgdGFncyB0byB3b3JrIGluIElFNi04LCB5b3UgaGF2ZSB0byB3cmFwXG4gIC8vIGluIGEgZGl2IHdpdGggYSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgaW4gZnJvbnQsIGhhIVxuICBfZGVmYXVsdDogaW5uZXJIVE1MQnVnID8gWzEsICdYPGRpdj4nLCAnPC9kaXY+J10gOiBbMCwgJycsICcnXVxufTtcblxubWFwLnRkID1cbm1hcC50aCA9IFszLCAnPHRhYmxlPjx0Ym9keT48dHI+JywgJzwvdHI+PC90Ym9keT48L3RhYmxlPiddO1xuXG5tYXAub3B0aW9uID1cbm1hcC5vcHRncm91cCA9IFsxLCAnPHNlbGVjdCBtdWx0aXBsZT1cIm11bHRpcGxlXCI+JywgJzwvc2VsZWN0PiddO1xuXG5tYXAudGhlYWQgPVxubWFwLnRib2R5ID1cbm1hcC5jb2xncm91cCA9XG5tYXAuY2FwdGlvbiA9XG5tYXAudGZvb3QgPSBbMSwgJzx0YWJsZT4nLCAnPC90YWJsZT4nXTtcblxubWFwLnBvbHlsaW5lID1cbm1hcC5lbGxpcHNlID1cbm1hcC5wb2x5Z29uID1cbm1hcC5jaXJjbGUgPVxubWFwLnRleHQgPVxubWFwLmxpbmUgPVxubWFwLnBhdGggPVxubWFwLnJlY3QgPVxubWFwLmcgPSBbMSwgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZlcnNpb249XCIxLjFcIj4nLCc8L3N2Zz4nXTtcblxuLyoqXG4gKiBQYXJzZSBgaHRtbGAgYW5kIHJldHVybiBhIERPTSBOb2RlIGluc3RhbmNlLCB3aGljaCBjb3VsZCBiZSBhIFRleHROb2RlLFxuICogSFRNTCBET00gTm9kZSBvZiBzb21lIGtpbmQgKDxkaXY+IGZvciBleGFtcGxlKSwgb3IgYSBEb2N1bWVudEZyYWdtZW50XG4gKiBpbnN0YW5jZSwgZGVwZW5kaW5nIG9uIHRoZSBjb250ZW50cyBvZiB0aGUgYGh0bWxgIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaHRtbCAtIEhUTUwgc3RyaW5nIHRvIFwiZG9taWZ5XCJcbiAqIEBwYXJhbSB7RG9jdW1lbnR9IGRvYyAtIFRoZSBgZG9jdW1lbnRgIGluc3RhbmNlIHRvIGNyZWF0ZSB0aGUgTm9kZSBmb3JcbiAqIEByZXR1cm4ge0RPTU5vZGV9IHRoZSBUZXh0Tm9kZSwgRE9NIE5vZGUsIG9yIERvY3VtZW50RnJhZ21lbnQgaW5zdGFuY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlKGh0bWwsIGRvYykge1xuICBpZiAoJ3N0cmluZycgIT0gdHlwZW9mIGh0bWwpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N0cmluZyBleHBlY3RlZCcpO1xuXG4gIC8vIGRlZmF1bHQgdG8gdGhlIGdsb2JhbCBgZG9jdW1lbnRgIG9iamVjdFxuICBpZiAoIWRvYykgZG9jID0gZG9jdW1lbnQ7XG5cbiAgLy8gdGFnIG5hbWVcbiAgdmFyIG0gPSAvPChbXFx3Ol0rKS8uZXhlYyhodG1sKTtcbiAgaWYgKCFtKSByZXR1cm4gZG9jLmNyZWF0ZVRleHROb2RlKGh0bWwpO1xuXG4gIGh0bWwgPSBodG1sLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTsgLy8gUmVtb3ZlIGxlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZVxuXG4gIHZhciB0YWcgPSBtWzFdO1xuXG4gIC8vIGJvZHkgc3VwcG9ydFxuICBpZiAodGFnID09ICdib2R5Jykge1xuICAgIHZhciBlbCA9IGRvYy5jcmVhdGVFbGVtZW50KCdodG1sJyk7XG4gICAgZWwuaW5uZXJIVE1MID0gaHRtbDtcbiAgICByZXR1cm4gZWwucmVtb3ZlQ2hpbGQoZWwubGFzdENoaWxkKTtcbiAgfVxuXG4gIC8vIHdyYXAgbWFwXG4gIHZhciB3cmFwID0gbWFwW3RhZ10gfHwgbWFwLl9kZWZhdWx0O1xuICB2YXIgZGVwdGggPSB3cmFwWzBdO1xuICB2YXIgcHJlZml4ID0gd3JhcFsxXTtcbiAgdmFyIHN1ZmZpeCA9IHdyYXBbMl07XG4gIHZhciBlbCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgZWwuaW5uZXJIVE1MID0gcHJlZml4ICsgaHRtbCArIHN1ZmZpeDtcbiAgd2hpbGUgKGRlcHRoLS0pIGVsID0gZWwubGFzdENoaWxkO1xuXG4gIC8vIG9uZSBlbGVtZW50XG4gIGlmIChlbC5maXJzdENoaWxkID09IGVsLmxhc3RDaGlsZCkge1xuICAgIHJldHVybiBlbC5yZW1vdmVDaGlsZChlbC5maXJzdENoaWxkKTtcbiAgfVxuXG4gIC8vIHNldmVyYWwgZWxlbWVudHNcbiAgdmFyIGZyYWdtZW50ID0gZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgd2hpbGUgKGVsLmZpcnN0Q2hpbGQpIHtcbiAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChlbC5yZW1vdmVDaGlsZChlbC5maXJzdENoaWxkKSk7XG4gIH1cblxuICByZXR1cm4gZnJhZ21lbnQ7XG59XG4iLCIvKiFcbiAgKiBkb21yZWFkeSAoYykgRHVzdGluIERpYXogMjAxNCAtIExpY2Vuc2UgTUlUXG4gICovXG4hZnVuY3Rpb24gKG5hbWUsIGRlZmluaXRpb24pIHtcblxuICBpZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZpbmVkJykgbW9kdWxlLmV4cG9ydHMgPSBkZWZpbml0aW9uKClcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnKSBkZWZpbmUoZGVmaW5pdGlvbilcbiAgZWxzZSB0aGlzW25hbWVdID0gZGVmaW5pdGlvbigpXG5cbn0oJ2RvbXJlYWR5JywgZnVuY3Rpb24gKCkge1xuXG4gIHZhciBmbnMgPSBbXSwgbGlzdGVuZXJcbiAgICAsIGRvYyA9IGRvY3VtZW50XG4gICAgLCBoYWNrID0gZG9jLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbFxuICAgICwgZG9tQ29udGVudExvYWRlZCA9ICdET01Db250ZW50TG9hZGVkJ1xuICAgICwgbG9hZGVkID0gKGhhY2sgPyAvXmxvYWRlZHxeYy8gOiAvXmxvYWRlZHxeaXxeYy8pLnRlc3QoZG9jLnJlYWR5U3RhdGUpXG5cblxuICBpZiAoIWxvYWRlZClcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoZG9tQ29udGVudExvYWRlZCwgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tQ29udGVudExvYWRlZCwgbGlzdGVuZXIpXG4gICAgbG9hZGVkID0gMVxuICAgIHdoaWxlIChsaXN0ZW5lciA9IGZucy5zaGlmdCgpKSBsaXN0ZW5lcigpXG4gIH0pXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgIGxvYWRlZCA/IHNldFRpbWVvdXQoZm4sIDApIDogZm5zLnB1c2goZm4pXG4gIH1cblxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qIGdsb2JhbHNcblx0U2V0LFxuXHRNYXAsXG5cdFdlYWtTZXQsXG5cdFdlYWtNYXAsXG5cblx0UHJvbWlzZSxcblxuXHRTeW1ib2wsXG5cdFByb3h5LFxuXG5cdEF0b21pY3MsXG5cdFNoYXJlZEFycmF5QnVmZmVyLFxuXG5cdEFycmF5QnVmZmVyLFxuXHREYXRhVmlldyxcblx0VWludDhBcnJheSxcblx0RmxvYXQzMkFycmF5LFxuXHRGbG9hdDY0QXJyYXksXG5cdEludDhBcnJheSxcblx0SW50MTZBcnJheSxcblx0SW50MzJBcnJheSxcblx0VWludDhDbGFtcGVkQXJyYXksXG5cdFVpbnQxNkFycmF5LFxuXHRVaW50MzJBcnJheSxcbiovXG5cbnZhciB1bmRlZmluZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2hhZG93LXJlc3RyaWN0ZWQtbmFtZXNcblxudmFyIFRocm93VHlwZUVycm9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvclxuXHQ/IChmdW5jdGlvbiAoKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJ2NhbGxlZScpLmdldDsgfSgpKVxuXHQ6IGZ1bmN0aW9uICgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyB9O1xuXG52YXIgaGFzU3ltYm9scyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gJ3N5bWJvbCc7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIGdlbmVyYXRvcjsgLy8gPSBmdW5jdGlvbiAqICgpIHt9O1xudmFyIGdlbmVyYXRvckZ1bmN0aW9uID0gZ2VuZXJhdG9yID8gZ2V0UHJvdG8oZ2VuZXJhdG9yKSA6IHVuZGVmaW5lZDtcbnZhciBhc3luY0ZuOyAvLyBhc3luYyBmdW5jdGlvbigpIHt9O1xudmFyIGFzeW5jRnVuY3Rpb24gPSBhc3luY0ZuID8gYXN5bmNGbi5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZDtcbnZhciBhc3luY0dlbjsgLy8gYXN5bmMgZnVuY3Rpb24gKiAoKSB7fTtcbnZhciBhc3luY0dlbkZ1bmN0aW9uID0gYXN5bmNHZW4gPyBnZXRQcm90byhhc3luY0dlbikgOiB1bmRlZmluZWQ7XG52YXIgYXN5bmNHZW5JdGVyYXRvciA9IGFzeW5jR2VuID8gYXN5bmNHZW4oKSA6IHVuZGVmaW5lZDtcblxudmFyIFR5cGVkQXJyYXkgPSB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBnZXRQcm90byhVaW50OEFycmF5KTtcblxudmFyIElOVFJJTlNJQ1MgPSB7XG5cdCckICVBcnJheSUnOiBBcnJheSxcblx0JyQgJUFycmF5QnVmZmVyJSc6IHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBcnJheUJ1ZmZlcixcblx0JyQgJUFycmF5QnVmZmVyUHJvdG90eXBlJSc6IHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBcnJheUJ1ZmZlci5wcm90b3R5cGUsXG5cdCckICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpIDogdW5kZWZpbmVkLFxuXHQnJCAlQXJyYXlQcm90b3R5cGUlJzogQXJyYXkucHJvdG90eXBlLFxuXHQnJCAlQXJyYXlQcm90b19lbnRyaWVzJSc6IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzLFxuXHQnJCAlQXJyYXlQcm90b19mb3JFYWNoJSc6IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLFxuXHQnJCAlQXJyYXlQcm90b19rZXlzJSc6IEFycmF5LnByb3RvdHlwZS5rZXlzLFxuXHQnJCAlQXJyYXlQcm90b192YWx1ZXMlJzogQXJyYXkucHJvdG90eXBlLnZhbHVlcyxcblx0JyQgJUFzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiB1bmRlZmluZWQsXG5cdCckICVBc3luY0Z1bmN0aW9uJSc6IGFzeW5jRnVuY3Rpb24sXG5cdCckICVBc3luY0Z1bmN0aW9uUHJvdG90eXBlJSc6IGFzeW5jRnVuY3Rpb24gPyBhc3luY0Z1bmN0aW9uLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcblx0JyQgJUFzeW5jR2VuZXJhdG9yJSc6IGFzeW5jR2VuID8gZ2V0UHJvdG8oYXN5bmNHZW5JdGVyYXRvcikgOiB1bmRlZmluZWQsXG5cdCckICVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSc6IGFzeW5jR2VuRnVuY3Rpb24sXG5cdCckICVBc3luY0dlbmVyYXRvclByb3RvdHlwZSUnOiBhc3luY0dlbkZ1bmN0aW9uID8gYXN5bmNHZW5GdW5jdGlvbi5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG5cdCckICVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IGFzeW5jR2VuSXRlcmF0b3IgJiYgaGFzU3ltYm9scyAmJiBTeW1ib2wuYXN5bmNJdGVyYXRvciA/IGFzeW5jR2VuSXRlcmF0b3JbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkgOiB1bmRlZmluZWQsXG5cdCckICVBdG9taWNzJSc6IHR5cGVvZiBBdG9taWNzID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEF0b21pY3MsXG5cdCckICVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCckICVCb29sZWFuUHJvdG90eXBlJSc6IEJvb2xlYW4ucHJvdG90eXBlLFxuXHQnJCAlRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJCAlRGF0YVZpZXdQcm90b3R5cGUlJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LnByb3RvdHlwZSxcblx0JyQgJURhdGUlJzogRGF0ZSxcblx0JyQgJURhdGVQcm90b3R5cGUlJzogRGF0ZS5wcm90b3R5cGUsXG5cdCckICVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJCAlZGVjb2RlVVJJQ29tcG9uZW50JSc6IGRlY29kZVVSSUNvbXBvbmVudCxcblx0JyQgJWVuY29kZVVSSSUnOiBlbmNvZGVVUkksXG5cdCckICVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJCAlRXJyb3IlJzogRXJyb3IsXG5cdCckICVFcnJvclByb3RvdHlwZSUnOiBFcnJvci5wcm90b3R5cGUsXG5cdCckICVldmFsJSc6IGV2YWwsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZXZhbFxuXHQnJCAlRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyQgJUV2YWxFcnJvclByb3RvdHlwZSUnOiBFdmFsRXJyb3IucHJvdG90eXBlLFxuXHQnJCAlRmxvYXQzMkFycmF5JSc6IHR5cGVvZiBGbG9hdDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQzMkFycmF5LFxuXHQnJCAlRmxvYXQzMkFycmF5UHJvdG90eXBlJSc6IHR5cGVvZiBGbG9hdDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQzMkFycmF5LnByb3RvdHlwZSxcblx0JyQgJUZsb2F0NjRBcnJheSUnOiB0eXBlb2YgRmxvYXQ2NEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZsb2F0NjRBcnJheSxcblx0JyQgJUZsb2F0NjRBcnJheVByb3RvdHlwZSUnOiB0eXBlb2YgRmxvYXQ2NEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZsb2F0NjRBcnJheS5wcm90b3R5cGUsXG5cdCckICVGdW5jdGlvbiUnOiBGdW5jdGlvbixcblx0JyQgJUZ1bmN0aW9uUHJvdG90eXBlJSc6IEZ1bmN0aW9uLnByb3RvdHlwZSxcblx0JyQgJUdlbmVyYXRvciUnOiBnZW5lcmF0b3IgPyBnZXRQcm90byhnZW5lcmF0b3IoKSkgOiB1bmRlZmluZWQsXG5cdCckICVHZW5lcmF0b3JGdW5jdGlvbiUnOiBnZW5lcmF0b3JGdW5jdGlvbixcblx0JyQgJUdlbmVyYXRvclByb3RvdHlwZSUnOiBnZW5lcmF0b3JGdW5jdGlvbiA/IGdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcblx0JyQgJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyQgJUludDhBcnJheVByb3RvdHlwZSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheS5wcm90b3R5cGUsXG5cdCckICVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCckICVJbnQxNkFycmF5UHJvdG90eXBlJSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheS5wcm90b3R5cGUsXG5cdCckICVJbnQzMkFycmF5JSc6IHR5cGVvZiBJbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDMyQXJyYXksXG5cdCckICVJbnQzMkFycmF5UHJvdG90eXBlJSc6IHR5cGVvZiBJbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDMyQXJyYXkucHJvdG90eXBlLFxuXHQnJCAlaXNGaW5pdGUlJzogaXNGaW5pdGUsXG5cdCckICVpc05hTiUnOiBpc05hTixcblx0JyQgJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyQgJUpTT04lJzogSlNPTixcblx0JyQgJUpTT05QYXJzZSUnOiBKU09OLnBhcnNlLFxuXHQnJCAlTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJCAlTWFwSXRlcmF0b3JQcm90b3R5cGUlJzogdHlwZW9mIE1hcCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWhhc1N5bWJvbHMgPyB1bmRlZmluZWQgOiBnZXRQcm90byhuZXcgTWFwKClbU3ltYm9sLml0ZXJhdG9yXSgpKSxcblx0JyQgJU1hcFByb3RvdHlwZSUnOiB0eXBlb2YgTWFwID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IE1hcC5wcm90b3R5cGUsXG5cdCckICVNYXRoJSc6IE1hdGgsXG5cdCckICVOdW1iZXIlJzogTnVtYmVyLFxuXHQnJCAlTnVtYmVyUHJvdG90eXBlJSc6IE51bWJlci5wcm90b3R5cGUsXG5cdCckICVPYmplY3QlJzogT2JqZWN0LFxuXHQnJCAlT2JqZWN0UHJvdG90eXBlJSc6IE9iamVjdC5wcm90b3R5cGUsXG5cdCckICVPYmpQcm90b190b1N0cmluZyUnOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLFxuXHQnJCAlT2JqUHJvdG9fdmFsdWVPZiUnOiBPYmplY3QucHJvdG90eXBlLnZhbHVlT2YsXG5cdCckICVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCckICVwYXJzZUludCUnOiBwYXJzZUludCxcblx0JyQgJVByb21pc2UlJzogdHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJvbWlzZSxcblx0JyQgJVByb21pc2VQcm90b3R5cGUlJzogdHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJvbWlzZS5wcm90b3R5cGUsXG5cdCckICVQcm9taXNlUHJvdG9fdGhlbiUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLnByb3RvdHlwZS50aGVuLFxuXHQnJCAlUHJvbWlzZV9hbGwlJzogdHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJvbWlzZS5hbGwsXG5cdCckICVQcm9taXNlX3JlamVjdCUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLnJlamVjdCxcblx0JyQgJVByb21pc2VfcmVzb2x2ZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLnJlc29sdmUsXG5cdCckICVQcm94eSUnOiB0eXBlb2YgUHJveHkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJveHksXG5cdCckICVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCckICVSYW5nZUVycm9yUHJvdG90eXBlJSc6IFJhbmdlRXJyb3IucHJvdG90eXBlLFxuXHQnJCAlUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCckICVSZWZlcmVuY2VFcnJvclByb3RvdHlwZSUnOiBSZWZlcmVuY2VFcnJvci5wcm90b3R5cGUsXG5cdCckICVSZWZsZWN0JSc6IHR5cGVvZiBSZWZsZWN0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFJlZmxlY3QsXG5cdCckICVSZWdFeHAlJzogUmVnRXhwLFxuXHQnJCAlUmVnRXhwUHJvdG90eXBlJSc6IFJlZ0V4cC5wcm90b3R5cGUsXG5cdCckICVTZXQlJzogdHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTZXQsXG5cdCckICVTZXRJdGVyYXRvclByb3RvdHlwZSUnOiB0eXBlb2YgU2V0ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzU3ltYm9scyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKG5ldyBTZXQoKVtTeW1ib2wuaXRlcmF0b3JdKCkpLFxuXHQnJCAlU2V0UHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LnByb3RvdHlwZSxcblx0JyQgJVNoYXJlZEFycmF5QnVmZmVyJSc6IHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTaGFyZWRBcnJheUJ1ZmZlcixcblx0JyQgJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTaGFyZWRBcnJheUJ1ZmZlci5wcm90b3R5cGUsXG5cdCckICVTdHJpbmclJzogU3RyaW5nLFxuXHQnJCAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCckICVTdHJpbmdQcm90b3R5cGUlJzogU3RyaW5nLnByb3RvdHlwZSxcblx0JyQgJVN5bWJvbCUnOiBoYXNTeW1ib2xzID8gU3ltYm9sIDogdW5kZWZpbmVkLFxuXHQnJCAlU3ltYm9sUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuXHQnJCAlU3ludGF4RXJyb3IlJzogU3ludGF4RXJyb3IsXG5cdCckICVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBTeW50YXhFcnJvci5wcm90b3R5cGUsXG5cdCckICVUaHJvd1R5cGVFcnJvciUnOiBUaHJvd1R5cGVFcnJvcixcblx0JyQgJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyQgJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogVHlwZWRBcnJheSA/IFR5cGVkQXJyYXkucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuXHQnJCAlVHlwZUVycm9yJSc6IFR5cGVFcnJvcixcblx0JyQgJVR5cGVFcnJvclByb3RvdHlwZSUnOiBUeXBlRXJyb3IucHJvdG90eXBlLFxuXHQnJCAlVWludDhBcnJheSUnOiB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OEFycmF5LFxuXHQnJCAlVWludDhBcnJheVByb3RvdHlwZSUnOiB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OEFycmF5LnByb3RvdHlwZSxcblx0JyQgJVVpbnQ4Q2xhbXBlZEFycmF5JSc6IHR5cGVvZiBVaW50OENsYW1wZWRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OENsYW1wZWRBcnJheSxcblx0JyQgJVVpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlJSc6IHR5cGVvZiBVaW50OENsYW1wZWRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OENsYW1wZWRBcnJheS5wcm90b3R5cGUsXG5cdCckICVVaW50MTZBcnJheSUnOiB0eXBlb2YgVWludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDE2QXJyYXksXG5cdCckICVVaW50MTZBcnJheVByb3RvdHlwZSUnOiB0eXBlb2YgVWludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDE2QXJyYXkucHJvdG90eXBlLFxuXHQnJCAlVWludDMyQXJyYXklJzogdHlwZW9mIFVpbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQzMkFycmF5LFxuXHQnJCAlVWludDMyQXJyYXlQcm90b3R5cGUlJzogdHlwZW9mIFVpbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQzMkFycmF5LnByb3RvdHlwZSxcblx0JyQgJVVSSUVycm9yJSc6IFVSSUVycm9yLFxuXHQnJCAlVVJJRXJyb3JQcm90b3R5cGUlJzogVVJJRXJyb3IucHJvdG90eXBlLFxuXHQnJCAlV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJCAlV2Vha01hcFByb3RvdHlwZSUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLnByb3RvdHlwZSxcblx0JyQgJVdlYWtTZXQlJzogdHlwZW9mIFdlYWtTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1NldCxcblx0JyQgJVdlYWtTZXRQcm90b3R5cGUlJzogdHlwZW9mIFdlYWtTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1NldC5wcm90b3R5cGVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0SW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgdHlwZW9mIGFsbG93TWlzc2luZyAhPT0gJ2Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIGtleSA9ICckICcgKyBuYW1lO1xuXHRpZiAoIShrZXkgaW4gSU5UUklOU0lDUykpIHtcblx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG5cdH1cblxuXHQvLyBpc3RhbmJ1bCBpZ25vcmUgaWYgLy8gaG9wZWZ1bGx5IHRoaXMgaXMgaW1wb3NzaWJsZSB0byB0ZXN0IDotKVxuXHRpZiAodHlwZW9mIElOVFJJTlNJQ1Nba2V5XSA9PT0gJ3VuZGVmaW5lZCcgJiYgIWFsbG93TWlzc2luZykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZXhpc3RzLCBidXQgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGZpbGUgYW4gaXNzdWUhJyk7XG5cdH1cblx0cmV0dXJuIElOVFJJTlNJQ1Nba2V5XTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuL0dldEludHJpbnNpYycpO1xuXG52YXIgJE9iamVjdCA9IEdldEludHJpbnNpYygnJU9iamVjdCUnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYXNzZXJ0UmVjb3JkJyk7XG52YXIgJGlzTmFOID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzRmluaXRlJyk7XG5cbnZhciBzaWduID0gcmVxdWlyZSgnLi9oZWxwZXJzL3NpZ24nKTtcbnZhciBtb2QgPSByZXF1aXJlKCcuL2hlbHBlcnMvbW9kJyk7XG5cbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnaXMtY2FsbGFibGUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJ2VzLXRvLXByaW1pdGl2ZS9lczUnKTtcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG4vLyBodHRwczovL2VzNS5naXRodWIuaW8vI3g5XG52YXIgRVM1ID0ge1xuXHRUb1ByaW1pdGl2ZTogdG9QcmltaXRpdmUsXG5cblx0VG9Cb29sZWFuOiBmdW5jdGlvbiBUb0Jvb2xlYW4odmFsdWUpIHtcblx0XHRyZXR1cm4gISF2YWx1ZTtcblx0fSxcblx0VG9OdW1iZXI6IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdFx0cmV0dXJuICt2YWx1ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbXBsaWNpdC1jb2VyY2lvblxuXHR9LFxuXHRUb0ludGVnZXI6IGZ1bmN0aW9uIFRvSW50ZWdlcih2YWx1ZSkge1xuXHRcdHZhciBudW1iZXIgPSB0aGlzLlRvTnVtYmVyKHZhbHVlKTtcblx0XHRpZiAoJGlzTmFOKG51bWJlcikpIHsgcmV0dXJuIDA7IH1cblx0XHRpZiAobnVtYmVyID09PSAwIHx8ICEkaXNGaW5pdGUobnVtYmVyKSkgeyByZXR1cm4gbnVtYmVyOyB9XG5cdFx0cmV0dXJuIHNpZ24obnVtYmVyKSAqIE1hdGguZmxvb3IoTWF0aC5hYnMobnVtYmVyKSk7XG5cdH0sXG5cdFRvSW50MzI6IGZ1bmN0aW9uIFRvSW50MzIoeCkge1xuXHRcdHJldHVybiB0aGlzLlRvTnVtYmVyKHgpID4+IDA7XG5cdH0sXG5cdFRvVWludDMyOiBmdW5jdGlvbiBUb1VpbnQzMih4KSB7XG5cdFx0cmV0dXJuIHRoaXMuVG9OdW1iZXIoeCkgPj4+IDA7XG5cdH0sXG5cdFRvVWludDE2OiBmdW5jdGlvbiBUb1VpbnQxNih2YWx1ZSkge1xuXHRcdHZhciBudW1iZXIgPSB0aGlzLlRvTnVtYmVyKHZhbHVlKTtcblx0XHRpZiAoJGlzTmFOKG51bWJlcikgfHwgbnVtYmVyID09PSAwIHx8ICEkaXNGaW5pdGUobnVtYmVyKSkgeyByZXR1cm4gMDsgfVxuXHRcdHZhciBwb3NJbnQgPSBzaWduKG51bWJlcikgKiBNYXRoLmZsb29yKE1hdGguYWJzKG51bWJlcikpO1xuXHRcdHJldHVybiBtb2QocG9zSW50LCAweDEwMDAwKTtcblx0fSxcblx0VG9TdHJpbmc6IGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlKSB7XG5cdFx0cmV0dXJuICRTdHJpbmcodmFsdWUpO1xuXHR9LFxuXHRUb09iamVjdDogZnVuY3Rpb24gVG9PYmplY3QodmFsdWUpIHtcblx0XHR0aGlzLkNoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlKTtcblx0XHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG5cdH0sXG5cdENoZWNrT2JqZWN0Q29lcmNpYmxlOiBmdW5jdGlvbiBDaGVja09iamVjdENvZXJjaWJsZSh2YWx1ZSwgb3B0TWVzc2FnZSkge1xuXHRcdC8qIGpzaGludCBlcW51bGw6dHJ1ZSAqL1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihvcHRNZXNzYWdlIHx8ICdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIHZhbHVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXHRJc0NhbGxhYmxlOiBJc0NhbGxhYmxlLFxuXHRTYW1lVmFsdWU6IGZ1bmN0aW9uIFNhbWVWYWx1ZSh4LCB5KSB7XG5cdFx0aWYgKHggPT09IHkpIHsgLy8gMCA9PT0gLTAsIGJ1dCB0aGV5IGFyZSBub3QgaWRlbnRpY2FsLlxuXHRcdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xuXHR9LFxuXG5cdC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOFxuXHRUeXBlOiBmdW5jdGlvbiBUeXBlKHgpIHtcblx0XHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuICdOdWxsJztcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdFx0cmV0dXJuICdVbmRlZmluZWQnO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gJ09iamVjdCc7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRcdHJldHVybiAnTnVtYmVyJztcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRcdHJldHVybiAnQm9vbGVhbic7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdHJldHVybiAnU3RyaW5nJztcblx0XHR9XG5cdH0sXG5cblx0Ly8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdElzUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBJc1Byb3BlcnR5RGVzY3JpcHRvcihEZXNjKSB7XG5cdFx0aWYgKHRoaXMuVHlwZShEZXNjKSAhPT0gJ09iamVjdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dmFyIGFsbG93ZWQgPSB7XG5cdFx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tFbnVtZXJhYmxlXV0nOiB0cnVlLFxuXHRcdFx0J1tbR2V0XV0nOiB0cnVlLFxuXHRcdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdFx0J1tbVmFsdWVdXSc6IHRydWUsXG5cdFx0XHQnW1tXcml0YWJsZV1dJzogdHJ1ZVxuXHRcdH07XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gRGVzYykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cdFx0XHRpZiAoaGFzKERlc2MsIGtleSkgJiYgIWFsbG93ZWRba2V5XSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIGlzRGF0YSA9IGhhcyhEZXNjLCAnW1tWYWx1ZV1dJyk7XG5cdFx0dmFyIElzQWNjZXNzb3IgPSBoYXMoRGVzYywgJ1tbR2V0XV0nKSB8fCBoYXMoRGVzYywgJ1tbU2V0XV0nKTtcblx0XHRpZiAoaXNEYXRhICYmIElzQWNjZXNzb3IpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdQcm9wZXJ0eSBEZXNjcmlwdG9ycyBtYXkgbm90IGJlIGJvdGggYWNjZXNzb3IgYW5kIGRhdGEgZGVzY3JpcHRvcnMnKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Ly8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTguMTAuMVxuXHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRcdGlmICh0eXBlb2YgRGVzYyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRhc3NlcnRSZWNvcmQodGhpcywgJ1Byb3BlcnR5IERlc2NyaXB0b3InLCAnRGVzYycsIERlc2MpO1xuXG5cdFx0aWYgKCFoYXMoRGVzYywgJ1tbR2V0XV0nKSAmJiAhaGFzKERlc2MsICdbW1NldF1dJykpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOC4xMC4yXG5cdElzRGF0YURlc2NyaXB0b3I6IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRcdGlmICh0eXBlb2YgRGVzYyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRhc3NlcnRSZWNvcmQodGhpcywgJ1Byb3BlcnR5IERlc2NyaXB0b3InLCAnRGVzYycsIERlc2MpO1xuXG5cdFx0aWYgKCFoYXMoRGVzYywgJ1tbVmFsdWVdXScpICYmICFoYXMoRGVzYywgJ1tbV3JpdGFibGVdXScpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Ly8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTguMTAuM1xuXHRJc0dlbmVyaWNEZXNjcmlwdG9yOiBmdW5jdGlvbiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIHtcblx0XHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0YXNzZXJ0UmVjb3JkKHRoaXMsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRcdGlmICghdGhpcy5Jc0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSAmJiAhdGhpcy5Jc0RhdGFEZXNjcmlwdG9yKERlc2MpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0Ly8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTguMTAuNFxuXHRGcm9tUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0XHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gRGVzYztcblx0XHR9XG5cblx0XHRhc3NlcnRSZWNvcmQodGhpcywgJ1Byb3BlcnR5IERlc2NyaXB0b3InLCAnRGVzYycsIERlc2MpO1xuXG5cdFx0aWYgKHRoaXMuSXNEYXRhRGVzY3JpcHRvcihEZXNjKSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dmFsdWU6IERlc2NbJ1tbVmFsdWVdXSddLFxuXHRcdFx0XHR3cml0YWJsZTogISFEZXNjWydbW1dyaXRhYmxlXV0nXSxcblx0XHRcdFx0ZW51bWVyYWJsZTogISFEZXNjWydbW0VudW1lcmFibGVdXSddLFxuXHRcdFx0XHRjb25maWd1cmFibGU6ICEhRGVzY1snW1tDb25maWd1cmFibGVdXSddXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSBpZiAodGhpcy5Jc0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Z2V0OiBEZXNjWydbW0dldF1dJ10sXG5cdFx0XHRcdHNldDogRGVzY1snW1tTZXRdXSddLFxuXHRcdFx0XHRlbnVtZXJhYmxlOiAhIURlc2NbJ1tbRW51bWVyYWJsZV1dJ10sXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogISFEZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ11cblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdGcm9tUHJvcGVydHlEZXNjcmlwdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggYSBmdWxseSBwb3B1bGF0ZWQgUHJvcGVydHkgRGVzY3JpcHRvcicpO1xuXHRcdH1cblx0fSxcblxuXHQvLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOC4xMC41XG5cdFRvUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0XHRpZiAodGhpcy5UeXBlKE9iaikgIT09ICdPYmplY3QnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2MgPSB7fTtcblx0XHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdFx0ZGVzY1snW1tFbnVtZXJhYmxlXV0nXSA9IHRoaXMuVG9Cb29sZWFuKE9iai5lbnVtZXJhYmxlKTtcblx0XHR9XG5cdFx0aWYgKGhhcyhPYmosICdjb25maWd1cmFibGUnKSkge1xuXHRcdFx0ZGVzY1snW1tDb25maWd1cmFibGVdXSddID0gdGhpcy5Ub0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdFx0fVxuXHRcdGlmIChoYXMoT2JqLCAndmFsdWUnKSkge1xuXHRcdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdFx0fVxuXHRcdGlmIChoYXMoT2JqLCAnd3JpdGFibGUnKSkge1xuXHRcdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSB0aGlzLlRvQm9vbGVhbihPYmoud3JpdGFibGUpO1xuXHRcdH1cblx0XHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0XHR2YXIgZ2V0dGVyID0gT2JqLmdldDtcblx0XHRcdGlmICh0eXBlb2YgZ2V0dGVyICE9PSAndW5kZWZpbmVkJyAmJiAhdGhpcy5Jc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignZ2V0dGVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuXHRcdFx0fVxuXHRcdFx0ZGVzY1snW1tHZXRdXSddID0gZ2V0dGVyO1xuXHRcdH1cblx0XHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0XHR2YXIgc2V0dGVyID0gT2JqLnNldDtcblx0XHRcdGlmICh0eXBlb2Ygc2V0dGVyICE9PSAndW5kZWZpbmVkJyAmJiAhdGhpcy5Jc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ3NldHRlciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblx0XHRcdH1cblx0XHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0XHR9XG5cblx0XHRpZiAoKGhhcyhkZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhkZXNjLCAnW1tTZXRdXScpKSAmJiAoaGFzKGRlc2MsICdbW1ZhbHVlXV0nKSB8fCBoYXMoZGVzYywgJ1tbV3JpdGFibGVdXScpKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdFx0fVxuXHRcdHJldHVybiBkZXNjO1xuXHR9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEVTNTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJy4uL0dldEludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcbnZhciAkU3ludGF4RXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVTeW50YXhFcnJvciUnKTtcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgcHJlZGljYXRlcyA9IHtcbiAgLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG4gICdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoRVMsIERlc2MpIHtcbiAgICBpZiAoRVMuVHlwZShEZXNjKSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGFsbG93ZWQgPSB7XG4gICAgICAnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG4gICAgICAnW1tFbnVtZXJhYmxlXV0nOiB0cnVlLFxuICAgICAgJ1tbR2V0XV0nOiB0cnVlLFxuICAgICAgJ1tbU2V0XV0nOiB0cnVlLFxuICAgICAgJ1tbVmFsdWVdXSc6IHRydWUsXG4gICAgICAnW1tXcml0YWJsZV1dJzogdHJ1ZVxuICAgIH07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gRGVzYykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICBpZiAoaGFzKERlc2MsIGtleSkgJiYgIWFsbG93ZWRba2V5XSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGlzRGF0YSA9IGhhcyhEZXNjLCAnW1tWYWx1ZV1dJyk7XG4gICAgdmFyIElzQWNjZXNzb3IgPSBoYXMoRGVzYywgJ1tbR2V0XV0nKSB8fCBoYXMoRGVzYywgJ1tbU2V0XV0nKTtcbiAgICBpZiAoaXNEYXRhICYmIElzQWNjZXNzb3IpIHtcbiAgICAgIHRocm93IG5ldyAkVHlwZUVycm9yKCdQcm9wZXJ0eSBEZXNjcmlwdG9ycyBtYXkgbm90IGJlIGJvdGggYWNjZXNzb3IgYW5kIGRhdGEgZGVzY3JpcHRvcnMnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYXNzZXJ0UmVjb3JkKEVTLCByZWNvcmRUeXBlLCBhcmd1bWVudE5hbWUsIHZhbHVlKSB7XG4gIHZhciBwcmVkaWNhdGUgPSBwcmVkaWNhdGVzW3JlY29yZFR5cGVdO1xuICBpZiAodHlwZW9mIHByZWRpY2F0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ3Vua25vd24gcmVjb3JkIHR5cGU6ICcgKyByZWNvcmRUeXBlKTtcbiAgfVxuICBpZiAoIXByZWRpY2F0ZShFUywgdmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuICB9XG4gIGNvbnNvbGUubG9nKHByZWRpY2F0ZShFUywgdmFsdWUpLCB2YWx1ZSk7XG59O1xuIiwidmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiIsIm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtb2QobnVtYmVyLCBtb2R1bG8pIHtcblx0dmFyIHJlbWFpbiA9IG51bWJlciAlIG1vZHVsbztcblx0cmV0dXJuIE1hdGguZmxvb3IocmVtYWluID49IDAgPyByZW1haW4gOiByZW1haW4gKyBtb2R1bG8pO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2lnbihudW1iZXIpIHtcblx0cmV0dXJuIG51bWJlciA+PSAwID8gMSA6IC0xO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG5cbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnaXMtY2FsbGFibGUnKTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOC4xMi44XG52YXIgRVM1aW50ZXJuYWxTbG90cyA9IHtcblx0J1tbRGVmYXVsdFZhbHVlXV0nOiBmdW5jdGlvbiAoTykge1xuXHRcdHZhciBhY3R1YWxIaW50O1xuXHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdFx0YWN0dWFsSGludCA9IGFyZ3VtZW50c1sxXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YWN0dWFsSGludCA9IHRvU3RyLmNhbGwoTykgPT09ICdbb2JqZWN0IERhdGVdJyA/IFN0cmluZyA6IE51bWJlcjtcblx0XHR9XG5cblx0XHRpZiAoYWN0dWFsSGludCA9PT0gU3RyaW5nIHx8IGFjdHVhbEhpbnQgPT09IE51bWJlcikge1xuXHRcdFx0dmFyIG1ldGhvZHMgPSBhY3R1YWxIaW50ID09PSBTdHJpbmcgPyBbJ3RvU3RyaW5nJywgJ3ZhbHVlT2YnXSA6IFsndmFsdWVPZicsICd0b1N0cmluZyddO1xuXHRcdFx0dmFyIHZhbHVlLCBpO1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0aWYgKGlzQ2FsbGFibGUoT1ttZXRob2RzW2ldXSkpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IE9bbWV0aG9kc1tpXV0oKTtcblx0XHRcdFx0XHRpZiAoaXNQcmltaXRpdmUodmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgW1tEZWZhdWx0VmFsdWVdXSBoaW50IHN1cHBsaWVkJyk7XG5cdH1cbn07XG5cbi8vIGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTkuMVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1ByaW1pdGl2ZShpbnB1dCkge1xuXHRpZiAoaXNQcmltaXRpdmUoaW5wdXQpKSB7XG5cdFx0cmV0dXJuIGlucHV0O1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiBFUzVpbnRlcm5hbFNsb3RzWydbW0RlZmF1bHRWYWx1ZV1dJ10oaW5wdXQsIGFyZ3VtZW50c1sxXSk7XG5cdH1cblx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKTtcbn07XG4iLCJcbi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG52YXIgZXZlbnRzID0gcmVxdWlyZSgnY29tcG9uZW50LWV2ZW50Jyk7XG52YXIgZGVsZWdhdGUgPSByZXF1aXJlKCdkZWxlZ2F0ZS1ldmVudHMnKTtcbnZhciBmb3JjZUNhcHR1cmVFdmVudHMgPSBbJ2ZvY3VzJywgJ2JsdXInXTtcblxuLyoqXG4gKiBFeHBvc2UgYEV2ZW50c2AuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBFdmVudHM7XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhbiBgRXZlbnRzYCB3aXRoIHRoZSBnaXZlblxuICogYGVsYCBvYmplY3Qgd2hpY2ggZXZlbnRzIHdpbGwgYmUgYm91bmQgdG8sXG4gKiBhbmQgdGhlIGBvYmpgIHdoaWNoIHdpbGwgcmVjZWl2ZSBtZXRob2QgY2FsbHMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGVsXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIEV2ZW50cyhlbCwgb2JqKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBFdmVudHMpKSByZXR1cm4gbmV3IEV2ZW50cyhlbCwgb2JqKTtcbiAgaWYgKCFlbCkgdGhyb3cgbmV3IEVycm9yKCdlbGVtZW50IHJlcXVpcmVkJyk7XG4gIGlmICghb2JqKSB0aHJvdyBuZXcgRXJyb3IoJ29iamVjdCByZXF1aXJlZCcpO1xuICB0aGlzLmVsID0gZWw7XG4gIHRoaXMub2JqID0gb2JqO1xuICB0aGlzLl9ldmVudHMgPSB7fTtcbn1cblxuLyoqXG4gKiBTdWJzY3JpcHRpb24gaGVscGVyLlxuICovXG5cbkV2ZW50cy5wcm90b3R5cGUuc3ViID0gZnVuY3Rpb24oZXZlbnQsIG1ldGhvZCwgY2Ipe1xuICB0aGlzLl9ldmVudHNbZXZlbnRdID0gdGhpcy5fZXZlbnRzW2V2ZW50XSB8fCB7fTtcbiAgdGhpcy5fZXZlbnRzW2V2ZW50XVttZXRob2RdID0gY2I7XG59O1xuXG4vKipcbiAqIEJpbmQgdG8gYGV2ZW50YCB3aXRoIG9wdGlvbmFsIGBtZXRob2RgIG5hbWUuXG4gKiBXaGVuIGBtZXRob2RgIGlzIHVuZGVmaW5lZCBpdCBiZWNvbWVzIGBldmVudGBcbiAqIHdpdGggdGhlIFwib25cIiBwcmVmaXguXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogIERpcmVjdCBldmVudCBoYW5kbGluZzpcbiAqXG4gKiAgICBldmVudHMuYmluZCgnY2xpY2snKSAvLyBpbXBsaWVzIFwib25jbGlja1wiXG4gKiAgICBldmVudHMuYmluZCgnY2xpY2snLCAncmVtb3ZlJylcbiAqICAgIGV2ZW50cy5iaW5kKCdjbGljaycsICdzb3J0JywgJ2FzYycpXG4gKlxuICogIERlbGVnYXRlZCBldmVudCBoYW5kbGluZzpcbiAqXG4gKiAgICBldmVudHMuYmluZCgnY2xpY2sgbGkgPiBhJylcbiAqICAgIGV2ZW50cy5iaW5kKCdjbGljayBsaSA+IGEnLCAncmVtb3ZlJylcbiAqICAgIGV2ZW50cy5iaW5kKCdjbGljayBhLnNvcnQtYXNjZW5kaW5nJywgJ3NvcnQnLCAnYXNjJylcbiAqICAgIGV2ZW50cy5iaW5kKCdjbGljayBhLnNvcnQtZGVzY2VuZGluZycsICdzb3J0JywgJ2Rlc2MnKVxuICpcbiAqICBNdWx0aXBsZSBldmVudHMgaGFuZGxpbmc6XG4gKlxuICogICAgZXZlbnRzLmJpbmQoe1xuICogICAgICAnY2xpY2sgLnJlbW92ZSc6ICdyZW1vdmUnLFxuICogICAgICAnY2xpY2sgLmFkZCc6ICdhZGQnXG4gKiAgICB9KTtcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xvYmplY3R9IC0gb2JqZWN0IGlzIHVzZWQgZm9yIG11bHRpcGxlIGJpbmRpbmcsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgZm9yIHNpbmdsZSBldmVudCBiaW5kaW5nXG4gKiBAcGFyYW0ge1N0cmluZ3xmdW5jdGlvbn0gW2FyZzJdIC0gbWV0aG9kIHRvIGNhbGwgKG9wdGlvbmFsKVxuICogQHBhcmFtIHsqfSBbYXJnM10gLSBkYXRhIGZvciBzaW5nbGUgZXZlbnQgYmluZGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuRXZlbnRzLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oYXJnMSwgYXJnMil7XG4gIHZhciBiaW5kRXZlbnQgPSBmdW5jdGlvbihldmVudCwgbWV0aG9kKSB7XG4gICAgdmFyIGUgPSBwYXJzZShldmVudCk7XG4gICAgdmFyIGVsID0gdGhpcy5lbDtcbiAgICB2YXIgb2JqID0gdGhpcy5vYmo7XG4gICAgdmFyIG5hbWUgPSBlLm5hbWU7XG4gICAgdmFyIG1ldGhvZCA9IG1ldGhvZCB8fCAnb24nICsgbmFtZTtcbiAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcblxuICAgIC8vIGNhbGxiYWNrXG4gICAgZnVuY3Rpb24gY2IoKXtcbiAgICAgIHZhciBhID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpLmNvbmNhdChhcmdzKTtcblxuICAgICAgaWYgKHR5cGVvZiBtZXRob2QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBtZXRob2QuYXBwbHkob2JqLCBhKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghb2JqW21ldGhvZF0pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWV0aG9kICsgJyBtZXRob2QgaXMgbm90IGRlZmluZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JqW21ldGhvZF0uYXBwbHkob2JqLCBhKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBiaW5kXG4gICAgaWYgKGUuc2VsZWN0b3IpIHtcbiAgICAgIGNiID0gZGVsZWdhdGUuYmluZChlbCwgZS5zZWxlY3RvciwgbmFtZSwgY2IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBldmVudHMuYmluZChlbCwgbmFtZSwgY2IpO1xuICAgIH1cblxuICAgIC8vIHN1YnNjcmlwdGlvbiBmb3IgdW5iaW5kaW5nXG4gICAgdGhpcy5zdWIobmFtZSwgbWV0aG9kLCBjYik7XG5cbiAgICByZXR1cm4gY2I7XG4gIH07XG5cbiAgaWYgKHR5cGVvZiBhcmcxID09ICdzdHJpbmcnKSB7XG4gICAgYmluZEV2ZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH0gZWxzZSB7XG4gICAgZm9yKHZhciBrZXkgaW4gYXJnMSkge1xuICAgICAgaWYgKGFyZzEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBiaW5kRXZlbnQuY2FsbCh0aGlzLCBrZXksIGFyZzFba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIFVuYmluZCBhIHNpbmdsZSBiaW5kaW5nLCBhbGwgYmluZGluZ3MgZm9yIGBldmVudGAsXG4gKiBvciBhbGwgYmluZGluZ3Mgd2l0aGluIHRoZSBtYW5hZ2VyLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICBVbmJpbmQgZGlyZWN0IGhhbmRsZXJzOlxuICpcbiAqICAgICBldmVudHMudW5iaW5kKCdjbGljaycsICdyZW1vdmUnKVxuICogICAgIGV2ZW50cy51bmJpbmQoJ2NsaWNrJylcbiAqICAgICBldmVudHMudW5iaW5kKClcbiAqXG4gKiBVbmJpbmQgZGVsZWdhdGUgaGFuZGxlcnM6XG4gKlxuICogICAgIGV2ZW50cy51bmJpbmQoJ2NsaWNrJywgJ3JlbW92ZScpXG4gKiAgICAgZXZlbnRzLnVuYmluZCgnY2xpY2snKVxuICogICAgIGV2ZW50cy51bmJpbmQoKVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBbZXZlbnRdXG4gKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gW21ldGhvZF1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuRXZlbnRzLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbihldmVudCwgbWV0aG9kKXtcbiAgaWYgKDAgPT0gYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRoaXMudW5iaW5kQWxsKCk7XG4gIGlmICgxID09IGFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB0aGlzLnVuYmluZEFsbE9mKGV2ZW50KTtcblxuICAvLyBubyBiaW5kaW5ncyBmb3IgdGhpcyBldmVudFxuICB2YXIgYmluZGluZ3MgPSB0aGlzLl9ldmVudHNbZXZlbnRdO1xuICB2YXIgY2FwdHVyZSA9IChmb3JjZUNhcHR1cmVFdmVudHMuaW5kZXhPZihldmVudCkgIT09IC0xKTtcbiAgaWYgKCFiaW5kaW5ncykgcmV0dXJuO1xuXG4gIC8vIG5vIGJpbmRpbmdzIGZvciB0aGlzIG1ldGhvZFxuICB2YXIgY2IgPSBiaW5kaW5nc1ttZXRob2RdO1xuICBpZiAoIWNiKSByZXR1cm47XG5cbiAgZXZlbnRzLnVuYmluZCh0aGlzLmVsLCBldmVudCwgY2IsIGNhcHR1cmUpO1xufTtcblxuLyoqXG4gKiBVbmJpbmQgYWxsIGV2ZW50cy5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5FdmVudHMucHJvdG90eXBlLnVuYmluZEFsbCA9IGZ1bmN0aW9uKCl7XG4gIGZvciAodmFyIGV2ZW50IGluIHRoaXMuX2V2ZW50cykge1xuICAgIHRoaXMudW5iaW5kQWxsT2YoZXZlbnQpO1xuICB9XG59O1xuXG4vKipcbiAqIFVuYmluZCBhbGwgZXZlbnRzIGZvciBgZXZlbnRgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuRXZlbnRzLnByb3RvdHlwZS51bmJpbmRBbGxPZiA9IGZ1bmN0aW9uKGV2ZW50KXtcbiAgdmFyIGJpbmRpbmdzID0gdGhpcy5fZXZlbnRzW2V2ZW50XTtcbiAgaWYgKCFiaW5kaW5ncykgcmV0dXJuO1xuXG4gIGZvciAodmFyIG1ldGhvZCBpbiBiaW5kaW5ncykge1xuICAgIHRoaXMudW5iaW5kKGV2ZW50LCBtZXRob2QpO1xuICB9XG59O1xuXG4vKipcbiAqIFBhcnNlIGBldmVudGAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZShldmVudCkge1xuICB2YXIgcGFydHMgPSBldmVudC5zcGxpdCgvICsvKTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBwYXJ0cy5zaGlmdCgpLFxuICAgIHNlbGVjdG9yOiBwYXJ0cy5qb2luKCcgJylcbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgZm9yRWFjaEFycmF5ID0gZnVuY3Rpb24gZm9yRWFjaEFycmF5KGFycmF5LCBpdGVyYXRvciwgcmVjZWl2ZXIpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoYXJyYXksIGkpKSB7XG4gICAgICAgICAgICBpZiAocmVjZWl2ZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKGFycmF5W2ldLCBpLCBhcnJheSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwocmVjZWl2ZXIsIGFycmF5W2ldLCBpLCBhcnJheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG52YXIgZm9yRWFjaFN0cmluZyA9IGZ1bmN0aW9uIGZvckVhY2hTdHJpbmcoc3RyaW5nLCBpdGVyYXRvciwgcmVjZWl2ZXIpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gc3RyaW5nLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIC8vIG5vIHN1Y2ggdGhpbmcgYXMgYSBzcGFyc2Ugc3RyaW5nLlxuICAgICAgICBpZiAocmVjZWl2ZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgaXRlcmF0b3Ioc3RyaW5nLmNoYXJBdChpKSwgaSwgc3RyaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwocmVjZWl2ZXIsIHN0cmluZy5jaGFyQXQoaSksIGksIHN0cmluZyk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG52YXIgZm9yRWFjaE9iamVjdCA9IGZ1bmN0aW9uIGZvckVhY2hPYmplY3Qob2JqZWN0LCBpdGVyYXRvciwgcmVjZWl2ZXIpIHtcbiAgICBmb3IgKHZhciBrIGluIG9iamVjdCkge1xuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGspKSB7XG4gICAgICAgICAgICBpZiAocmVjZWl2ZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrXSwgaywgb2JqZWN0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IuY2FsbChyZWNlaXZlciwgb2JqZWN0W2tdLCBrLCBvYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxudmFyIGZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGxpc3QsIGl0ZXJhdG9yLCB0aGlzQXJnKSB7XG4gICAgaWYgKCFpc0NhbGxhYmxlKGl0ZXJhdG9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpdGVyYXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICB2YXIgcmVjZWl2ZXI7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMykge1xuICAgICAgICByZWNlaXZlciA9IHRoaXNBcmc7XG4gICAgfVxuXG4gICAgaWYgKHRvU3RyLmNhbGwobGlzdCkgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgICAgZm9yRWFjaEFycmF5KGxpc3QsIGl0ZXJhdG9yLCByZWNlaXZlcik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbGlzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZm9yRWFjaFN0cmluZyhsaXN0LCBpdGVyYXRvciwgcmVjZWl2ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvckVhY2hPYmplY3QobGlzdCwgaXRlcmF0b3IsIHJlY2VpdmVyKTtcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZvckVhY2g7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBuby1pbnZhbGlkLXRoaXM6IDEgKi9cblxudmFyIEVSUk9SX01FU1NBR0UgPSAnRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0aWJsZSAnO1xudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jVHlwZSA9ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmluZCh0aGF0KSB7XG4gICAgdmFyIHRhcmdldCA9IHRoaXM7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09ICdmdW5jdGlvbicgfHwgdG9TdHIuY2FsbCh0YXJnZXQpICE9PSBmdW5jVHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUk9SX01FU1NBR0UgKyB0YXJnZXQpO1xuICAgIH1cbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblxuICAgIHZhciBib3VuZDtcbiAgICB2YXIgYmluZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIGJvdW5kKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChPYmplY3QocmVzdWx0KSA9PT0gcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseShcbiAgICAgICAgICAgICAgICB0aGF0LFxuICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGJvdW5kTGVuZ3RoID0gTWF0aC5tYXgoMCwgdGFyZ2V0Lmxlbmd0aCAtIGFyZ3MubGVuZ3RoKTtcbiAgICB2YXIgYm91bmRBcmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3VuZExlbmd0aDsgaSsrKSB7XG4gICAgICAgIGJvdW5kQXJncy5wdXNoKCckJyArIGkpO1xuICAgIH1cblxuICAgIGJvdW5kID0gRnVuY3Rpb24oJ2JpbmRlcicsICdyZXR1cm4gZnVuY3Rpb24gKCcgKyBib3VuZEFyZ3Muam9pbignLCcpICsgJyl7IHJldHVybiBiaW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOyB9JykoYmluZGVyKTtcblxuICAgIGlmICh0YXJnZXQucHJvdG90eXBlKSB7XG4gICAgICAgIHZhciBFbXB0eSA9IGZ1bmN0aW9uIEVtcHR5KCkge307XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7XG4gICAgICAgIGJvdW5kLnByb3RvdHlwZSA9IG5ldyBFbXB0eSgpO1xuICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBib3VuZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiIsInZhciB3aW47XG5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgd2luID0gd2luZG93O1xufSBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgd2luID0gZ2xvYmFsO1xufSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIil7XG4gICAgd2luID0gc2VsZjtcbn0gZWxzZSB7XG4gICAgd2luID0ge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd2luO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBmblRvU3RyID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgY29uc3RydWN0b3JSZWdleCA9IC9eXFxzKmNsYXNzXFxiLztcbnZhciBpc0VTNkNsYXNzRm4gPSBmdW5jdGlvbiBpc0VTNkNsYXNzRnVuY3Rpb24odmFsdWUpIHtcblx0dHJ5IHtcblx0XHR2YXIgZm5TdHIgPSBmblRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBjb25zdHJ1Y3RvclJlZ2V4LnRlc3QoZm5TdHIpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlOyAvLyBub3QgYSBmdW5jdGlvblxuXHR9XG59O1xuXG52YXIgdHJ5RnVuY3Rpb25PYmplY3QgPSBmdW5jdGlvbiB0cnlGdW5jdGlvblRvU3RyKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0aWYgKGlzRVM2Q2xhc3NGbih2YWx1ZSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0Zm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZm5DbGFzcyA9ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG52YXIgZ2VuQ2xhc3MgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLnRvU3RyaW5nVGFnID09PSAnc3ltYm9sJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0NhbGxhYmxlKHZhbHVlKSB7XG5cdGlmICghdmFsdWUpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdGlmIChoYXNUb1N0cmluZ1RhZykgeyByZXR1cm4gdHJ5RnVuY3Rpb25PYmplY3QodmFsdWUpOyB9XG5cdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHR2YXIgc3RyQ2xhc3MgPSB0b1N0ci5jYWxsKHZhbHVlKTtcblx0cmV0dXJuIHN0ckNsYXNzID09PSBmbkNsYXNzIHx8IHN0ckNsYXNzID09PSBnZW5DbGFzcztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGlzRnVuY3Rpb25cblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uIChmbikge1xuICB2YXIgc3RyaW5nID0gdG9TdHJpbmcuY2FsbChmbilcbiAgcmV0dXJuIHN0cmluZyA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJyB8fFxuICAgICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgc3RyaW5nICE9PSAnW29iamVjdCBSZWdFeHBdJykgfHxcbiAgICAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgLy8gSUU4IGFuZCBiZWxvd1xuICAgICAoZm4gPT09IHdpbmRvdy5zZXRUaW1lb3V0IHx8XG4gICAgICBmbiA9PT0gd2luZG93LmFsZXJ0IHx8XG4gICAgICBmbiA9PT0gd2luZG93LmNvbmZpcm0gfHxcbiAgICAgIGZuID09PSB3aW5kb3cucHJvbXB0KSlcbn07XG4iLCIvKiFcbiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjMuNC4xXG4gKiBodHRwczovL2pxdWVyeS5jb20vXG4gKlxuICogSW5jbHVkZXMgU2l6emxlLmpzXG4gKiBodHRwczovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHBzOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogRGF0ZTogMjAxOS0wNS0wMVQyMTowNFpcbiAqL1xuKCBmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdGlmICggdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyBGb3IgQ29tbW9uSlMgYW5kIENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHdoZXJlIGEgcHJvcGVyIGB3aW5kb3dgXG5cdFx0Ly8gaXMgcHJlc2VudCwgZXhlY3V0ZSB0aGUgZmFjdG9yeSBhbmQgZ2V0IGpRdWVyeS5cblx0XHQvLyBGb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IGhhdmUgYSBgd2luZG93YCB3aXRoIGEgYGRvY3VtZW50YFxuXHRcdC8vIChzdWNoIGFzIE5vZGUuanMpLCBleHBvc2UgYSBmYWN0b3J5IGFzIG1vZHVsZS5leHBvcnRzLlxuXHRcdC8vIFRoaXMgYWNjZW50dWF0ZXMgdGhlIG5lZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHJlYWwgYHdpbmRvd2AuXG5cdFx0Ly8gZS5nLiB2YXIgalF1ZXJ5ID0gcmVxdWlyZShcImpxdWVyeVwiKSh3aW5kb3cpO1xuXHRcdC8vIFNlZSB0aWNrZXQgIzE0NTQ5IGZvciBtb3JlIGluZm8uXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgP1xuXHRcdFx0ZmFjdG9yeSggZ2xvYmFsLCB0cnVlICkgOlxuXHRcdFx0ZnVuY3Rpb24oIHcgKSB7XG5cdFx0XHRcdGlmICggIXcuZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCBcImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnRcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWN0b3J5KCB3ICk7XG5cdFx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGZhY3RvcnkoIGdsb2JhbCApO1xuXHR9XG5cbi8vIFBhc3MgdGhpcyBpZiB3aW5kb3cgaXMgbm90IGRlZmluZWQgeWV0XG59ICkoIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiggd2luZG93LCBub0dsb2JhbCApIHtcblxuLy8gRWRnZSA8PSAxMiAtIDEzKywgRmlyZWZveCA8PTE4IC0gNDUrLCBJRSAxMCAtIDExLCBTYWZhcmkgNS4xIC0gOSssIGlPUyA2IC0gOS4xXG4vLyB0aHJvdyBleGNlcHRpb25zIHdoZW4gbm9uLXN0cmljdCBjb2RlIChlLmcuLCBBU1AuTkVUIDQuNSkgYWNjZXNzZXMgc3RyaWN0IG1vZGVcbi8vIGFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyICh0cmFjLTEzMzM1KS4gQnV0IGFzIG9mIGpRdWVyeSAzLjAgKDIwMTYpLCBzdHJpY3QgbW9kZSBzaG91bGQgYmUgY29tbW9uXG4vLyBlbm91Z2ggdGhhdCBhbGwgc3VjaCBhdHRlbXB0cyBhcmUgZ3VhcmRlZCBpbiBhIHRyeSBibG9jay5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgYXJyID0gW107XG5cbnZhciBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcblxudmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuXG52YXIgc2xpY2UgPSBhcnIuc2xpY2U7XG5cbnZhciBjb25jYXQgPSBhcnIuY29uY2F0O1xuXG52YXIgcHVzaCA9IGFyci5wdXNoO1xuXG52YXIgaW5kZXhPZiA9IGFyci5pbmRleE9mO1xuXG52YXIgY2xhc3MydHlwZSA9IHt9O1xuXG52YXIgdG9TdHJpbmcgPSBjbGFzczJ0eXBlLnRvU3RyaW5nO1xuXG52YXIgaGFzT3duID0gY2xhc3MydHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIGZuVG9TdHJpbmcgPSBoYXNPd24udG9TdHJpbmc7XG5cbnZhciBPYmplY3RGdW5jdGlvblN0cmluZyA9IGZuVG9TdHJpbmcuY2FsbCggT2JqZWN0ICk7XG5cbnZhciBzdXBwb3J0ID0ge307XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gaXNGdW5jdGlvbiggb2JqICkge1xuXG4gICAgICAvLyBTdXBwb3J0OiBDaHJvbWUgPD01NywgRmlyZWZveCA8PTUyXG4gICAgICAvLyBJbiBzb21lIGJyb3dzZXJzLCB0eXBlb2YgcmV0dXJucyBcImZ1bmN0aW9uXCIgZm9yIEhUTUwgPG9iamVjdD4gZWxlbWVudHNcbiAgICAgIC8vIChpLmUuLCBgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwib2JqZWN0XCIgKSA9PT0gXCJmdW5jdGlvblwiYCkuXG4gICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGNsYXNzaWZ5ICphbnkqIERPTSBub2RlIGFzIGEgZnVuY3Rpb24uXG4gICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBvYmoubm9kZVR5cGUgIT09IFwibnVtYmVyXCI7XG4gIH07XG5cblxudmFyIGlzV2luZG93ID0gZnVuY3Rpb24gaXNXaW5kb3coIG9iaiApIHtcblx0XHRyZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqID09PSBvYmoud2luZG93O1xuXHR9O1xuXG5cblxuXG5cdHZhciBwcmVzZXJ2ZWRTY3JpcHRBdHRyaWJ1dGVzID0ge1xuXHRcdHR5cGU6IHRydWUsXG5cdFx0c3JjOiB0cnVlLFxuXHRcdG5vbmNlOiB0cnVlLFxuXHRcdG5vTW9kdWxlOiB0cnVlXG5cdH07XG5cblx0ZnVuY3Rpb24gRE9NRXZhbCggY29kZSwgbm9kZSwgZG9jICkge1xuXHRcdGRvYyA9IGRvYyB8fCBkb2N1bWVudDtcblxuXHRcdHZhciBpLCB2YWwsXG5cdFx0XHRzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudCggXCJzY3JpcHRcIiApO1xuXG5cdFx0c2NyaXB0LnRleHQgPSBjb2RlO1xuXHRcdGlmICggbm9kZSApIHtcblx0XHRcdGZvciAoIGkgaW4gcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDY0KywgRWRnZSAxOCtcblx0XHRcdFx0Ly8gU29tZSBicm93c2VycyBkb24ndCBzdXBwb3J0IHRoZSBcIm5vbmNlXCIgcHJvcGVydHkgb24gc2NyaXB0cy5cblx0XHRcdFx0Ly8gT24gdGhlIG90aGVyIGhhbmQsIGp1c3QgdXNpbmcgYGdldEF0dHJpYnV0ZWAgaXMgbm90IGVub3VnaCBhc1xuXHRcdFx0XHQvLyB0aGUgYG5vbmNlYCBhdHRyaWJ1dGUgaXMgcmVzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIHdoZW5ldmVyIGl0XG5cdFx0XHRcdC8vIGJlY29tZXMgYnJvd3NpbmctY29udGV4dCBjb25uZWN0ZWQuXG5cdFx0XHRcdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2h0bWwvaXNzdWVzLzIzNjlcblx0XHRcdFx0Ly8gU2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI25vbmNlLWF0dHJpYnV0ZXNcblx0XHRcdFx0Ly8gVGhlIGBub2RlLmdldEF0dHJpYnV0ZWAgY2hlY2sgd2FzIGFkZGVkIGZvciB0aGUgc2FrZSBvZlxuXHRcdFx0XHQvLyBgalF1ZXJ5Lmdsb2JhbEV2YWxgIHNvIHRoYXQgaXQgY2FuIGZha2UgYSBub25jZS1jb250YWluaW5nIG5vZGVcblx0XHRcdFx0Ly8gdmlhIGFuIG9iamVjdC5cblx0XHRcdFx0dmFsID0gbm9kZVsgaSBdIHx8IG5vZGUuZ2V0QXR0cmlidXRlICYmIG5vZGUuZ2V0QXR0cmlidXRlKCBpICk7XG5cdFx0XHRcdGlmICggdmFsICkge1xuXHRcdFx0XHRcdHNjcmlwdC5zZXRBdHRyaWJ1dGUoIGksIHZhbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGRvYy5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHQgKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTtcblx0fVxuXG5cbmZ1bmN0aW9uIHRvVHlwZSggb2JqICkge1xuXHRpZiAoIG9iaiA9PSBudWxsICkge1xuXHRcdHJldHVybiBvYmogKyBcIlwiO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5IChmdW5jdGlvbmlzaCBSZWdFeHApXG5cdHJldHVybiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiA/XG5cdFx0Y2xhc3MydHlwZVsgdG9TdHJpbmcuY2FsbCggb2JqICkgXSB8fCBcIm9iamVjdFwiIDpcblx0XHR0eXBlb2Ygb2JqO1xufVxuLyogZ2xvYmFsIFN5bWJvbCAqL1xuLy8gRGVmaW5pbmcgdGhpcyBnbG9iYWwgaW4gLmVzbGludHJjLmpzb24gd291bGQgY3JlYXRlIGEgZGFuZ2VyIG9mIHVzaW5nIHRoZSBnbG9iYWxcbi8vIHVuZ3VhcmRlZCBpbiBhbm90aGVyIHBsYWNlLCBpdCBzZWVtcyBzYWZlciB0byBkZWZpbmUgZ2xvYmFsIG9ubHkgZm9yIHRoaXMgbW9kdWxlXG5cblxuXG52YXJcblx0dmVyc2lvbiA9IFwiMy40LjFcIixcblxuXHQvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeVxuXHRqUXVlcnkgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cblx0XHQvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCdcblx0XHQvLyBOZWVkIGluaXQgaWYgalF1ZXJ5IGlzIGNhbGxlZCAoanVzdCBhbGxvdyBlcnJvciB0byBiZSB0aHJvd24gaWYgbm90IGluY2x1ZGVkKVxuXHRcdHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5XG5cdC8vIE1ha2Ugc3VyZSB3ZSB0cmltIEJPTSBhbmQgTkJTUFxuXHRydHJpbSA9IC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZztcblxualF1ZXJ5LmZuID0galF1ZXJ5LnByb3RvdHlwZSA9IHtcblxuXHQvLyBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIGpRdWVyeSBiZWluZyB1c2VkXG5cdGpxdWVyeTogdmVyc2lvbixcblxuXHRjb25zdHJ1Y3RvcjogalF1ZXJ5LFxuXG5cdC8vIFRoZSBkZWZhdWx0IGxlbmd0aCBvZiBhIGpRdWVyeSBvYmplY3QgaXMgMFxuXHRsZW5ndGg6IDAsXG5cblx0dG9BcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTtcblx0fSxcblxuXHQvLyBHZXQgdGhlIE50aCBlbGVtZW50IGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0IE9SXG5cdC8vIEdldCB0aGUgd2hvbGUgbWF0Y2hlZCBlbGVtZW50IHNldCBhcyBhIGNsZWFuIGFycmF5XG5cdGdldDogZnVuY3Rpb24oIG51bSApIHtcblxuXHRcdC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGluIGEgY2xlYW4gYXJyYXlcblx0XHRpZiAoIG51bSA9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4ganVzdCB0aGUgb25lIGVsZW1lbnQgZnJvbSB0aGUgc2V0XG5cdFx0cmV0dXJuIG51bSA8IDAgPyB0aGlzWyBudW0gKyB0aGlzLmxlbmd0aCBdIDogdGhpc1sgbnVtIF07XG5cdH0sXG5cblx0Ly8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBvbnRvIHRoZSBzdGFja1xuXHQvLyAocmV0dXJuaW5nIHRoZSBuZXcgbWF0Y2hlZCBlbGVtZW50IHNldClcblx0cHVzaFN0YWNrOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cblx0XHQvLyBCdWlsZCBhIG5ldyBqUXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldFxuXHRcdHZhciByZXQgPSBqUXVlcnkubWVyZ2UoIHRoaXMuY29uc3RydWN0b3IoKSwgZWxlbXMgKTtcblxuXHRcdC8vIEFkZCB0aGUgb2xkIG9iamVjdCBvbnRvIHRoZSBzdGFjayAoYXMgYSByZWZlcmVuY2UpXG5cdFx0cmV0LnByZXZPYmplY3QgPSB0aGlzO1xuXG5cdFx0Ly8gUmV0dXJuIHRoZSBuZXdseS1mb3JtZWQgZWxlbWVudCBzZXRcblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdC8vIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZXZlcnkgZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBzZXQuXG5cdGVhY2g6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmVhY2goIHRoaXMsIGNhbGxiYWNrICk7XG5cdH0sXG5cblx0bWFwOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWFwKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiBjYWxsYmFjay5jYWxsKCBlbGVtLCBpLCBlbGVtICk7XG5cdFx0fSApICk7XG5cdH0sXG5cblx0c2xpY2U6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggc2xpY2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApICk7XG5cdH0sXG5cblx0Zmlyc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAwICk7XG5cdH0sXG5cblx0bGFzdDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXEoIC0xICk7XG5cdH0sXG5cblx0ZXE6IGZ1bmN0aW9uKCBpICkge1xuXHRcdHZhciBsZW4gPSB0aGlzLmxlbmd0aCxcblx0XHRcdGogPSAraSArICggaSA8IDAgPyBsZW4gOiAwICk7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqID49IDAgJiYgaiA8IGxlbiA/IFsgdGhpc1sgaiBdIF0gOiBbXSApO1xuXHR9LFxuXG5cdGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHJldk9iamVjdCB8fCB0aGlzLmNvbnN0cnVjdG9yKCk7XG5cdH0sXG5cblx0Ly8gRm9yIGludGVybmFsIHVzZSBvbmx5LlxuXHQvLyBCZWhhdmVzIGxpa2UgYW4gQXJyYXkncyBtZXRob2QsIG5vdCBsaWtlIGEgalF1ZXJ5IG1ldGhvZC5cblx0cHVzaDogcHVzaCxcblx0c29ydDogYXJyLnNvcnQsXG5cdHNwbGljZTogYXJyLnNwbGljZVxufTtcblxualF1ZXJ5LmV4dGVuZCA9IGpRdWVyeS5mbi5leHRlbmQgPSBmdW5jdGlvbigpIHtcblx0dmFyIG9wdGlvbnMsIG5hbWUsIHNyYywgY29weSwgY29weUlzQXJyYXksIGNsb25lLFxuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sgMCBdIHx8IHt9LFxuXHRcdGkgPSAxLFxuXHRcdGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cdFx0ZGVlcCA9IGZhbHNlO1xuXG5cdC8vIEhhbmRsZSBhIGRlZXAgY29weSBzaXR1YXRpb25cblx0aWYgKCB0eXBlb2YgdGFyZ2V0ID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRkZWVwID0gdGFyZ2V0O1xuXG5cdFx0Ly8gU2tpcCB0aGUgYm9vbGVhbiBhbmQgdGhlIHRhcmdldFxuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sgaSBdIHx8IHt9O1xuXHRcdGkrKztcblx0fVxuXG5cdC8vIEhhbmRsZSBjYXNlIHdoZW4gdGFyZ2V0IGlzIGEgc3RyaW5nIG9yIHNvbWV0aGluZyAocG9zc2libGUgaW4gZGVlcCBjb3B5KVxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgIT09IFwib2JqZWN0XCIgJiYgIWlzRnVuY3Rpb24oIHRhcmdldCApICkge1xuXHRcdHRhcmdldCA9IHt9O1xuXHR9XG5cblx0Ly8gRXh0ZW5kIGpRdWVyeSBpdHNlbGYgaWYgb25seSBvbmUgYXJndW1lbnQgaXMgcGFzc2VkXG5cdGlmICggaSA9PT0gbGVuZ3RoICkge1xuXHRcdHRhcmdldCA9IHRoaXM7XG5cdFx0aS0tO1xuXHR9XG5cblx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cblx0XHQvLyBPbmx5IGRlYWwgd2l0aCBub24tbnVsbC91bmRlZmluZWQgdmFsdWVzXG5cdFx0aWYgKCAoIG9wdGlvbnMgPSBhcmd1bWVudHNbIGkgXSApICE9IG51bGwgKSB7XG5cblx0XHRcdC8vIEV4dGVuZCB0aGUgYmFzZSBvYmplY3Rcblx0XHRcdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRcdFx0Y29weSA9IG9wdGlvbnNbIG5hbWUgXTtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IE9iamVjdC5wcm90b3R5cGUgcG9sbHV0aW9uXG5cdFx0XHRcdC8vIFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3Bcblx0XHRcdFx0aWYgKCBuYW1lID09PSBcIl9fcHJvdG9fX1wiIHx8IHRhcmdldCA9PT0gY29weSApIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3RzIG9yIGFycmF5c1xuXHRcdFx0XHRpZiAoIGRlZXAgJiYgY29weSAmJiAoIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb3B5ICkgfHxcblx0XHRcdFx0XHQoIGNvcHlJc0FycmF5ID0gQXJyYXkuaXNBcnJheSggY29weSApICkgKSApIHtcblx0XHRcdFx0XHRzcmMgPSB0YXJnZXRbIG5hbWUgXTtcblxuXHRcdFx0XHRcdC8vIEVuc3VyZSBwcm9wZXIgdHlwZSBmb3IgdGhlIHNvdXJjZSB2YWx1ZVxuXHRcdFx0XHRcdGlmICggY29weUlzQXJyYXkgJiYgIUFycmF5LmlzQXJyYXkoIHNyYyApICkge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSBbXTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCAhY29weUlzQXJyYXkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBzcmMgKSApIHtcblx0XHRcdFx0XHRcdGNsb25lID0ge307XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNsb25lID0gc3JjO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb3B5SXNBcnJheSA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0Ly8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtXG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBkZWVwLCBjbG9uZSwgY29weSApO1xuXG5cdFx0XHRcdC8vIERvbid0IGJyaW5nIGluIHVuZGVmaW5lZCB2YWx1ZXNcblx0XHRcdFx0fSBlbHNlIGlmICggY29weSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0gY29weTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbW9kaWZpZWQgb2JqZWN0XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gVW5pcXVlIGZvciBlYWNoIGNvcHkgb2YgalF1ZXJ5IG9uIHRoZSBwYWdlXG5cdGV4cGFuZG86IFwialF1ZXJ5XCIgKyAoIHZlcnNpb24gKyBNYXRoLnJhbmRvbSgpICkucmVwbGFjZSggL1xcRC9nLCBcIlwiICksXG5cblx0Ly8gQXNzdW1lIGpRdWVyeSBpcyByZWFkeSB3aXRob3V0IHRoZSByZWFkeSBtb2R1bGVcblx0aXNSZWFkeTogdHJ1ZSxcblxuXHRlcnJvcjogZnVuY3Rpb24oIG1zZyApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoIG1zZyApO1xuXHR9LFxuXG5cdG5vb3A6IGZ1bmN0aW9uKCkge30sXG5cblx0aXNQbGFpbk9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIgcHJvdG8sIEN0b3I7XG5cblx0XHQvLyBEZXRlY3Qgb2J2aW91cyBuZWdhdGl2ZXNcblx0XHQvLyBVc2UgdG9TdHJpbmcgaW5zdGVhZCBvZiBqUXVlcnkudHlwZSB0byBjYXRjaCBob3N0IG9iamVjdHNcblx0XHRpZiAoICFvYmogfHwgdG9TdHJpbmcuY2FsbCggb2JqICkgIT09IFwiW29iamVjdCBPYmplY3RdXCIgKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cHJvdG8gPSBnZXRQcm90byggb2JqICk7XG5cblx0XHQvLyBPYmplY3RzIHdpdGggbm8gcHJvdG90eXBlIChlLmcuLCBgT2JqZWN0LmNyZWF0ZSggbnVsbCApYCkgYXJlIHBsYWluXG5cdFx0aWYgKCAhcHJvdG8gKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBPYmplY3RzIHdpdGggcHJvdG90eXBlIGFyZSBwbGFpbiBpZmYgdGhleSB3ZXJlIGNvbnN0cnVjdGVkIGJ5IGEgZ2xvYmFsIE9iamVjdCBmdW5jdGlvblxuXHRcdEN0b3IgPSBoYXNPd24uY2FsbCggcHJvdG8sIFwiY29uc3RydWN0b3JcIiApICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuXHRcdHJldHVybiB0eXBlb2YgQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmIGZuVG9TdHJpbmcuY2FsbCggQ3RvciApID09PSBPYmplY3RGdW5jdGlvblN0cmluZztcblx0fSxcblxuXHRpc0VtcHR5T2JqZWN0OiBmdW5jdGlvbiggb2JqICkge1xuXHRcdHZhciBuYW1lO1xuXG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdC8vIEV2YWx1YXRlcyBhIHNjcmlwdCBpbiBhIGdsb2JhbCBjb250ZXh0XG5cdGdsb2JhbEV2YWw6IGZ1bmN0aW9uKCBjb2RlLCBvcHRpb25zICkge1xuXHRcdERPTUV2YWwoIGNvZGUsIHsgbm9uY2U6IG9wdGlvbnMgJiYgb3B0aW9ucy5ub25jZSB9ICk7XG5cdH0sXG5cblx0ZWFjaDogZnVuY3Rpb24oIG9iaiwgY2FsbGJhY2sgKSB7XG5cdFx0dmFyIGxlbmd0aCwgaSA9IDA7XG5cblx0XHRpZiAoIGlzQXJyYXlMaWtlKCBvYmogKSApIHtcblx0XHRcdGxlbmd0aCA9IG9iai5sZW5ndGg7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICggaSBpbiBvYmogKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9iajtcblx0fSxcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHlcblx0dHJpbTogZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0cmV0dXJuIHRleHQgPT0gbnVsbCA/XG5cdFx0XHRcIlwiIDpcblx0XHRcdCggdGV4dCArIFwiXCIgKS5yZXBsYWNlKCBydHJpbSwgXCJcIiApO1xuXHR9LFxuXG5cdC8vIHJlc3VsdHMgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0bWFrZUFycmF5OiBmdW5jdGlvbiggYXJyLCByZXN1bHRzICkge1xuXHRcdHZhciByZXQgPSByZXN1bHRzIHx8IFtdO1xuXG5cdFx0aWYgKCBhcnIgIT0gbnVsbCApIHtcblx0XHRcdGlmICggaXNBcnJheUxpa2UoIE9iamVjdCggYXJyICkgKSApIHtcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCByZXQsXG5cdFx0XHRcdFx0dHlwZW9mIGFyciA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0WyBhcnIgXSA6IGFyclxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHVzaC5jYWxsKCByZXQsIGFyciApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0aW5BcnJheTogZnVuY3Rpb24oIGVsZW0sIGFyciwgaSApIHtcblx0XHRyZXR1cm4gYXJyID09IG51bGwgPyAtMSA6IGluZGV4T2YuY2FsbCggYXJyLCBlbGVtLCBpICk7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0bWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkge1xuXHRcdHZhciBsZW4gPSArc2Vjb25kLmxlbmd0aCxcblx0XHRcdGogPSAwLFxuXHRcdFx0aSA9IGZpcnN0Lmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0Zmlyc3RbIGkrKyBdID0gc2Vjb25kWyBqIF07XG5cdFx0fVxuXG5cdFx0Zmlyc3QubGVuZ3RoID0gaTtcblxuXHRcdHJldHVybiBmaXJzdDtcblx0fSxcblxuXHRncmVwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBpbnZlcnQgKSB7XG5cdFx0dmFyIGNhbGxiYWNrSW52ZXJzZSxcblx0XHRcdG1hdGNoZXMgPSBbXSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoLFxuXHRcdFx0Y2FsbGJhY2tFeHBlY3QgPSAhaW52ZXJ0O1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtc1xuXHRcdC8vIHRoYXQgcGFzcyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uXG5cdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRjYWxsYmFja0ludmVyc2UgPSAhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTtcblx0XHRcdGlmICggY2FsbGJhY2tJbnZlcnNlICE9PSBjYWxsYmFja0V4cGVjdCApIHtcblx0XHRcdFx0bWF0Y2hlcy5wdXNoKCBlbGVtc1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hdGNoZXM7XG5cdH0sXG5cblx0Ly8gYXJnIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkge1xuXHRcdHZhciBsZW5ndGgsIHZhbHVlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRyZXQgPSBbXTtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVpciBuZXcgdmFsdWVzXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggZWxlbXMgKSApIHtcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsXG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gZWxlbXMgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0XHRyZXR1cm4gY29uY2F0LmFwcGx5KCBbXSwgcmV0ICk7XG5cdH0sXG5cblx0Ly8gQSBnbG9iYWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzXG5cdGd1aWQ6IDEsXG5cblx0Ly8galF1ZXJ5LnN1cHBvcnQgaXMgbm90IHVzZWQgaW4gQ29yZSBidXQgb3RoZXIgcHJvamVjdHMgYXR0YWNoIHRoZWlyXG5cdC8vIHByb3BlcnRpZXMgdG8gaXQgc28gaXQgbmVlZHMgdG8gZXhpc3QuXG5cdHN1cHBvcnQ6IHN1cHBvcnRcbn0gKTtcblxuaWYgKCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cdGpRdWVyeS5mblsgU3ltYm9sLml0ZXJhdG9yIF0gPSBhcnJbIFN5bWJvbC5pdGVyYXRvciBdO1xufVxuXG4vLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlwZSBtYXBcbmpRdWVyeS5lYWNoKCBcIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sXCIuc3BsaXQoIFwiIFwiICksXG5mdW5jdGlvbiggaSwgbmFtZSApIHtcblx0Y2xhc3MydHlwZVsgXCJbb2JqZWN0IFwiICsgbmFtZSArIFwiXVwiIF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG59ICk7XG5cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKCBvYmogKSB7XG5cblx0Ly8gU3VwcG9ydDogcmVhbCBpT1MgOC4yIG9ubHkgKG5vdCByZXByb2R1Y2libGUgaW4gc2ltdWxhdG9yKVxuXHQvLyBgaW5gIGNoZWNrIHVzZWQgdG8gcHJldmVudCBKSVQgZXJyb3IgKGdoLTIxNDUpXG5cdC8vIGhhc093biBpc24ndCB1c2VkIGhlcmUgZHVlIHRvIGZhbHNlIG5lZ2F0aXZlc1xuXHQvLyByZWdhcmRpbmcgTm9kZWxpc3QgbGVuZ3RoIGluIElFXG5cdHZhciBsZW5ndGggPSAhIW9iaiAmJiBcImxlbmd0aFwiIGluIG9iaiAmJiBvYmoubGVuZ3RoLFxuXHRcdHR5cGUgPSB0b1R5cGUoIG9iaiApO1xuXG5cdGlmICggaXNGdW5jdGlvbiggb2JqICkgfHwgaXNXaW5kb3coIG9iaiApICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0eXBlID09PSBcImFycmF5XCIgfHwgbGVuZ3RoID09PSAwIHx8XG5cdFx0dHlwZW9mIGxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJiBsZW5ndGggPiAwICYmICggbGVuZ3RoIC0gMSApIGluIG9iajtcbn1cbnZhciBTaXp6bGUgPVxuLyohXG4gKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2luZSB2Mi4zLjRcbiAqIGh0dHBzOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCBKUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cHM6Ly9qcy5mb3VuZGF0aW9uL1xuICpcbiAqIERhdGU6IDIwMTktMDQtMDhcbiAqL1xuKGZ1bmN0aW9uKCB3aW5kb3cgKSB7XG5cbnZhciBpLFxuXHRzdXBwb3J0LFxuXHRFeHByLFxuXHRnZXRUZXh0LFxuXHRpc1hNTCxcblx0dG9rZW5pemUsXG5cdGNvbXBpbGUsXG5cdHNlbGVjdCxcblx0b3V0ZXJtb3N0Q29udGV4dCxcblx0c29ydElucHV0LFxuXHRoYXNEdXBsaWNhdGUsXG5cblx0Ly8gTG9jYWwgZG9jdW1lbnQgdmFyc1xuXHRzZXREb2N1bWVudCxcblx0ZG9jdW1lbnQsXG5cdGRvY0VsZW0sXG5cdGRvY3VtZW50SXNIVE1MLFxuXHRyYnVnZ3lRU0EsXG5cdHJidWdneU1hdGNoZXMsXG5cdG1hdGNoZXMsXG5cdGNvbnRhaW5zLFxuXG5cdC8vIEluc3RhbmNlLXNwZWNpZmljIGRhdGFcblx0ZXhwYW5kbyA9IFwic2l6emxlXCIgKyAxICogbmV3IERhdGUoKSxcblx0cHJlZmVycmVkRG9jID0gd2luZG93LmRvY3VtZW50LFxuXHRkaXJydW5zID0gMCxcblx0ZG9uZSA9IDAsXG5cdGNsYXNzQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHR0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0Y29tcGlsZXJDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRzb3J0T3JkZXIgPSBmdW5jdGlvbiggYSwgYiApIHtcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gMDtcblx0fSxcblxuXHQvLyBJbnN0YW5jZSBtZXRob2RzXG5cdGhhc093biA9ICh7fSkuaGFzT3duUHJvcGVydHksXG5cdGFyciA9IFtdLFxuXHRwb3AgPSBhcnIucG9wLFxuXHRwdXNoX25hdGl2ZSA9IGFyci5wdXNoLFxuXHRwdXNoID0gYXJyLnB1c2gsXG5cdHNsaWNlID0gYXJyLnNsaWNlLFxuXHQvLyBVc2UgYSBzdHJpcHBlZC1kb3duIGluZGV4T2YgYXMgaXQncyBmYXN0ZXIgdGhhbiBuYXRpdmVcblx0Ly8gaHR0cHM6Ly9qc3BlcmYuY29tL3Rob3ItaW5kZXhvZi12cy1mb3IvNVxuXHRpbmRleE9mID0gZnVuY3Rpb24oIGxpc3QsIGVsZW0gKSB7XG5cdFx0dmFyIGkgPSAwLFxuXHRcdFx0bGVuID0gbGlzdC5sZW5ndGg7XG5cdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRpZiAoIGxpc3RbaV0gPT09IGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gLTE7XG5cdH0sXG5cblx0Ym9vbGVhbnMgPSBcImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkXCIsXG5cblx0Ly8gUmVndWxhciBleHByZXNzaW9uc1xuXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc2VsZWN0b3JzLyN3aGl0ZXNwYWNlXG5cdHdoaXRlc3BhY2UgPSBcIltcXFxceDIwXFxcXHRcXFxcclxcXFxuXFxcXGZdXCIsXG5cblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI3ZhbHVlLWRlZi1pZGVudGlmaWVyXG5cdGlkZW50aWZpZXIgPSBcIig/OlxcXFxcXFxcLnxbXFxcXHctXXxbXlxcMC1cXFxceGEwXSkrXCIsXG5cblx0Ly8gQXR0cmlidXRlIHNlbGVjdG9yczogaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNhdHRyaWJ1dGUtc2VsZWN0b3JzXG5cdGF0dHJpYnV0ZXMgPSBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFwiICsgaWRlbnRpZmllciArIFwiKSg/OlwiICsgd2hpdGVzcGFjZSArXG5cdFx0Ly8gT3BlcmF0b3IgKGNhcHR1cmUgMilcblx0XHRcIiooWypeJHwhfl0/PSlcIiArIHdoaXRlc3BhY2UgK1xuXHRcdC8vIFwiQXR0cmlidXRlIHZhbHVlcyBtdXN0IGJlIENTUyBpZGVudGlmaWVycyBbY2FwdHVyZSA1XSBvciBzdHJpbmdzIFtjYXB0dXJlIDMgb3IgY2FwdHVyZSA0XVwiXG5cdFx0XCIqKD86JygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwifChcIiArIGlkZW50aWZpZXIgKyBcIikpfClcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFwiKlxcXFxdXCIsXG5cblx0cHNldWRvcyA9IFwiOihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcXFxcKChcIiArXG5cdFx0Ly8gVG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2VsZWN0b3JzIG5lZWRpbmcgdG9rZW5pemUgaW4gdGhlIHByZUZpbHRlciwgcHJlZmVyIGFyZ3VtZW50czpcblx0XHQvLyAxLiBxdW90ZWQgKGNhcHR1cmUgMzsgY2FwdHVyZSA0IG9yIGNhcHR1cmUgNSlcblx0XHRcIignKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCIpfFwiICtcblx0XHQvLyAyLiBzaW1wbGUgKGNhcHR1cmUgNilcblx0XHRcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpW1xcXFxdXXxcIiArIGF0dHJpYnV0ZXMgKyBcIikqKXxcIiArXG5cdFx0Ly8gMy4gYW55dGhpbmcgZWxzZSAoY2FwdHVyZSAyKVxuXHRcdFwiLipcIiArXG5cdFx0XCIpXFxcXCl8KVwiLFxuXG5cdC8vIExlYWRpbmcgYW5kIG5vbi1lc2NhcGVkIHRyYWlsaW5nIHdoaXRlc3BhY2UsIGNhcHR1cmluZyBzb21lIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgcHJlY2VkaW5nIHRoZSBsYXR0ZXJcblx0cndoaXRlc3BhY2UgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNlICsgXCIrXCIsIFwiZ1wiICksXG5cdHJ0cmltID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIrfCgoPzpefFteXFxcXFxcXFxdKSg/OlxcXFxcXFxcLikqKVwiICsgd2hpdGVzcGFjZSArIFwiKyRcIiwgXCJnXCIgKSxcblxuXHRyY29tbWEgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiosXCIgKyB3aGl0ZXNwYWNlICsgXCIqXCIgKSxcblx0cmNvbWJpbmF0b3JzID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFs+K35dfFwiICsgd2hpdGVzcGFjZSArIFwiKVwiICsgd2hpdGVzcGFjZSArIFwiKlwiICksXG5cdHJkZXNjZW5kID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArIFwifD5cIiApLFxuXG5cdHJwc2V1ZG8gPSBuZXcgUmVnRXhwKCBwc2V1ZG9zICksXG5cdHJpZGVudGlmaWVyID0gbmV3IFJlZ0V4cCggXCJeXCIgKyBpZGVudGlmaWVyICsgXCIkXCIgKSxcblxuXHRtYXRjaEV4cHIgPSB7XG5cdFx0XCJJRFwiOiBuZXcgUmVnRXhwKCBcIl4jKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0XCJDTEFTU1wiOiBuZXcgUmVnRXhwKCBcIl5cXFxcLihcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdFwiVEFHXCI6IG5ldyBSZWdFeHAoIFwiXihcIiArIGlkZW50aWZpZXIgKyBcInxbKl0pXCIgKSxcblx0XHRcIkFUVFJcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBhdHRyaWJ1dGVzICksXG5cdFx0XCJQU0VVRE9cIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBwc2V1ZG9zICksXG5cdFx0XCJDSElMRFwiOiBuZXcgUmVnRXhwKCBcIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcXFwoXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKihldmVufG9kZHwoKFsrLV18KShcXFxcZCopbnwpXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86KFsrLV18KVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcIiooXFxcXGQrKXwpKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfClcIiwgXCJpXCIgKSxcblx0XHRcImJvb2xcIjogbmV3IFJlZ0V4cCggXCJeKD86XCIgKyBib29sZWFucyArIFwiKSRcIiwgXCJpXCIgKSxcblx0XHQvLyBGb3IgdXNlIGluIGxpYnJhcmllcyBpbXBsZW1lbnRpbmcgLmlzKClcblx0XHQvLyBXZSB1c2UgdGhpcyBmb3IgUE9TIG1hdGNoaW5nIGluIGBzZWxlY3RgXG5cdFx0XCJuZWVkc0NvbnRleHRcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXFxcKFwiICtcblx0XHRcdHdoaXRlc3BhY2UgKyBcIiooKD86LVxcXFxkKT9cXFxcZCopXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KSg/PVteLV18JClcIiwgXCJpXCIgKVxuXHR9LFxuXG5cdHJodG1sID0gL0hUTUwkL2ksXG5cdHJpbnB1dHMgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyaGVhZGVyID0gL15oXFxkJC9pLFxuXG5cdHJuYXRpdmUgPSAvXltee10rXFx7XFxzKlxcW25hdGl2ZSBcXHcvLFxuXG5cdC8vIEVhc2lseS1wYXJzZWFibGUvcmV0cmlldmFibGUgSUQgb3IgVEFHIG9yIENMQVNTIHNlbGVjdG9yc1xuXHRycXVpY2tFeHByID0gL14oPzojKFtcXHctXSspfChcXHcrKXxcXC4oW1xcdy1dKykpJC8sXG5cblx0cnNpYmxpbmcgPSAvWyt+XS8sXG5cblx0Ly8gQ1NTIGVzY2FwZXNcblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI2VzY2FwZWQtY2hhcmFjdGVyc1xuXHRydW5lc2NhcGUgPSBuZXcgUmVnRXhwKCBcIlxcXFxcXFxcKFtcXFxcZGEtZl17MSw2fVwiICsgd2hpdGVzcGFjZSArIFwiP3woXCIgKyB3aGl0ZXNwYWNlICsgXCIpfC4pXCIsIFwiaWdcIiApLFxuXHRmdW5lc2NhcGUgPSBmdW5jdGlvbiggXywgZXNjYXBlZCwgZXNjYXBlZFdoaXRlc3BhY2UgKSB7XG5cdFx0dmFyIGhpZ2ggPSBcIjB4XCIgKyBlc2NhcGVkIC0gMHgxMDAwMDtcblx0XHQvLyBOYU4gbWVhbnMgbm9uLWNvZGVwb2ludFxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3g8MjRcblx0XHQvLyBXb3JrYXJvdW5kIGVycm9uZW91cyBudW1lcmljIGludGVycHJldGF0aW9uIG9mICtcIjB4XCJcblx0XHRyZXR1cm4gaGlnaCAhPT0gaGlnaCB8fCBlc2NhcGVkV2hpdGVzcGFjZSA/XG5cdFx0XHRlc2NhcGVkIDpcblx0XHRcdGhpZ2ggPCAwID9cblx0XHRcdFx0Ly8gQk1QIGNvZGVwb2ludFxuXHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoICsgMHgxMDAwMCApIDpcblx0XHRcdFx0Ly8gU3VwcGxlbWVudGFsIFBsYW5lIGNvZGVwb2ludCAoc3Vycm9nYXRlIHBhaXIpXG5cdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggPj4gMTAgfCAweEQ4MDAsIGhpZ2ggJiAweDNGRiB8IDB4REMwMCApO1xuXHR9LFxuXG5cdC8vIENTUyBzdHJpbmcvaWRlbnRpZmllciBzZXJpYWxpemF0aW9uXG5cdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jY29tbW9uLXNlcmlhbGl6aW5nLWlkaW9tc1xuXHRyY3NzZXNjYXBlID0gLyhbXFwwLVxceDFmXFx4N2ZdfF4tP1xcZCl8Xi0kfFteXFwwLVxceDFmXFx4N2YtXFx1RkZGRlxcdy1dL2csXG5cdGZjc3Nlc2NhcGUgPSBmdW5jdGlvbiggY2gsIGFzQ29kZVBvaW50ICkge1xuXHRcdGlmICggYXNDb2RlUG9pbnQgKSB7XG5cblx0XHRcdC8vIFUrMDAwMCBOVUxMIGJlY29tZXMgVStGRkZEIFJFUExBQ0VNRU5UIENIQVJBQ1RFUlxuXHRcdFx0aWYgKCBjaCA9PT0gXCJcXDBcIiApIHtcblx0XHRcdFx0cmV0dXJuIFwiXFx1RkZGRFwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb250cm9sIGNoYXJhY3RlcnMgYW5kIChkZXBlbmRlbnQgdXBvbiBwb3NpdGlvbikgbnVtYmVycyBnZXQgZXNjYXBlZCBhcyBjb2RlIHBvaW50c1xuXHRcdFx0cmV0dXJuIGNoLnNsaWNlKCAwLCAtMSApICsgXCJcXFxcXCIgKyBjaC5jaGFyQ29kZUF0KCBjaC5sZW5ndGggLSAxICkudG9TdHJpbmcoIDE2ICkgKyBcIiBcIjtcblx0XHR9XG5cblx0XHQvLyBPdGhlciBwb3RlbnRpYWxseS1zcGVjaWFsIEFTQ0lJIGNoYXJhY3RlcnMgZ2V0IGJhY2tzbGFzaC1lc2NhcGVkXG5cdFx0cmV0dXJuIFwiXFxcXFwiICsgY2g7XG5cdH0sXG5cblx0Ly8gVXNlZCBmb3IgaWZyYW1lc1xuXHQvLyBTZWUgc2V0RG9jdW1lbnQoKVxuXHQvLyBSZW1vdmluZyB0aGUgZnVuY3Rpb24gd3JhcHBlciBjYXVzZXMgYSBcIlBlcm1pc3Npb24gRGVuaWVkXCJcblx0Ly8gZXJyb3IgaW4gSUVcblx0dW5sb2FkSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuXHRcdHNldERvY3VtZW50KCk7XG5cdH0sXG5cblx0aW5EaXNhYmxlZEZpZWxkc2V0ID0gYWRkQ29tYmluYXRvcihcblx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSB0cnVlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJmaWVsZHNldFwiO1xuXHRcdH0sXG5cdFx0eyBkaXI6IFwicGFyZW50Tm9kZVwiLCBuZXh0OiBcImxlZ2VuZFwiIH1cblx0KTtcblxuLy8gT3B0aW1pemUgZm9yIHB1c2guYXBwbHkoIF8sIE5vZGVMaXN0IClcbnRyeSB7XG5cdHB1c2guYXBwbHkoXG5cdFx0KGFyciA9IHNsaWNlLmNhbGwoIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzICkpLFxuXHRcdHByZWZlcnJlZERvYy5jaGlsZE5vZGVzXG5cdCk7XG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4wXG5cdC8vIERldGVjdCBzaWxlbnRseSBmYWlsaW5nIHB1c2guYXBwbHlcblx0YXJyWyBwcmVmZXJyZWREb2MuY2hpbGROb2Rlcy5sZW5ndGggXS5ub2RlVHlwZTtcbn0gY2F0Y2ggKCBlICkge1xuXHRwdXNoID0geyBhcHBseTogYXJyLmxlbmd0aCA/XG5cblx0XHQvLyBMZXZlcmFnZSBzbGljZSBpZiBwb3NzaWJsZVxuXHRcdGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHtcblx0XHRcdHB1c2hfbmF0aXZlLmFwcGx5KCB0YXJnZXQsIHNsaWNlLmNhbGwoZWxzKSApO1xuXHRcdH0gOlxuXG5cdFx0Ly8gU3VwcG9ydDogSUU8OVxuXHRcdC8vIE90aGVyd2lzZSBhcHBlbmQgZGlyZWN0bHlcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHR2YXIgaiA9IHRhcmdldC5sZW5ndGgsXG5cdFx0XHRcdGkgPSAwO1xuXHRcdFx0Ly8gQ2FuJ3QgdHJ1c3QgTm9kZUxpc3QubGVuZ3RoXG5cdFx0XHR3aGlsZSAoICh0YXJnZXRbaisrXSA9IGVsc1tpKytdKSApIHt9XG5cdFx0XHR0YXJnZXQubGVuZ3RoID0gaiAtIDE7XG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xuXHR2YXIgbSwgaSwgZWxlbSwgbmlkLCBtYXRjaCwgZ3JvdXBzLCBuZXdTZWxlY3Rvcixcblx0XHRuZXdDb250ZXh0ID0gY29udGV4dCAmJiBjb250ZXh0Lm93bmVyRG9jdW1lbnQsXG5cblx0XHQvLyBub2RlVHlwZSBkZWZhdWx0cyB0byA5LCBzaW5jZSBjb250ZXh0IGRlZmF1bHRzIHRvIGRvY3VtZW50XG5cdFx0bm9kZVR5cGUgPSBjb250ZXh0ID8gY29udGV4dC5ub2RlVHlwZSA6IDk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gUmV0dXJuIGVhcmx5IGZyb20gY2FsbHMgd2l0aCBpbnZhbGlkIHNlbGVjdG9yIG9yIGNvbnRleHRcblx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgfHwgIXNlbGVjdG9yIHx8XG5cdFx0bm9kZVR5cGUgIT09IDEgJiYgbm9kZVR5cGUgIT09IDkgJiYgbm9kZVR5cGUgIT09IDExICkge1xuXG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH1cblxuXHQvLyBUcnkgdG8gc2hvcnRjdXQgZmluZCBvcGVyYXRpb25zIChhcyBvcHBvc2VkIHRvIGZpbHRlcnMpIGluIEhUTUwgZG9jdW1lbnRzXG5cdGlmICggIXNlZWQgKSB7XG5cblx0XHRpZiAoICggY29udGV4dCA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogcHJlZmVycmVkRG9jICkgIT09IGRvY3VtZW50ICkge1xuXHRcdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0XHR9XG5cdFx0Y29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7XG5cblx0XHRpZiAoIGRvY3VtZW50SXNIVE1MICkge1xuXG5cdFx0XHQvLyBJZiB0aGUgc2VsZWN0b3IgaXMgc3VmZmljaWVudGx5IHNpbXBsZSwgdHJ5IHVzaW5nIGEgXCJnZXQqQnkqXCIgRE9NIG1ldGhvZFxuXHRcdFx0Ly8gKGV4Y2VwdGluZyBEb2N1bWVudEZyYWdtZW50IGNvbnRleHQsIHdoZXJlIHRoZSBtZXRob2RzIGRvbid0IGV4aXN0KVxuXHRcdFx0aWYgKCBub2RlVHlwZSAhPT0gMTEgJiYgKG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApKSApIHtcblxuXHRcdFx0XHQvLyBJRCBzZWxlY3RvclxuXHRcdFx0XHRpZiAoIChtID0gbWF0Y2hbMV0pICkge1xuXG5cdFx0XHRcdFx0Ly8gRG9jdW1lbnQgY29udGV4dFxuXHRcdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIChlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApKSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdFxuXHRcdFx0XHRcdFx0XHQvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9uc1xuXHRcdFx0XHRcdFx0XHQvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElEXG5cdFx0XHRcdFx0XHRcdGlmICggZWxlbS5pZCA9PT0gbSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBFbGVtZW50IGNvbnRleHRcblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdFxuXHRcdFx0XHRcdFx0Ly8gVE9ETzogaWRlbnRpZnkgdmVyc2lvbnNcblx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcblx0XHRcdFx0XHRcdGlmICggbmV3Q29udGV4dCAmJiAoZWxlbSA9IG5ld0NvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSkgJiZcblx0XHRcdFx0XHRcdFx0Y29udGFpbnMoIGNvbnRleHQsIGVsZW0gKSAmJlxuXHRcdFx0XHRcdFx0XHRlbGVtLmlkID09PSBtICkge1xuXG5cdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVHlwZSBzZWxlY3RvclxuXHRcdFx0XHR9IGVsc2UgaWYgKCBtYXRjaFsyXSApIHtcblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBzZWxlY3RvciApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cblx0XHRcdFx0Ly8gQ2xhc3Mgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggKG0gPSBtYXRjaFszXSkgJiYgc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmXG5cdFx0XHRcdFx0Y29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICkge1xuXG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBtICkgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUYWtlIGFkdmFudGFnZSBvZiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHRpZiAoIHN1cHBvcnQucXNhICYmXG5cdFx0XHRcdCFub25uYXRpdmVTZWxlY3RvckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF0gJiZcblx0XHRcdFx0KCFyYnVnZ3lRU0EgfHwgIXJidWdneVFTQS50ZXN0KCBzZWxlY3RvciApKSAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDggb25seVxuXHRcdFx0XHQvLyBFeGNsdWRlIG9iamVjdCBlbGVtZW50c1xuXHRcdFx0XHQobm9kZVR5cGUgIT09IDEgfHwgY29udGV4dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSBcIm9iamVjdFwiKSApIHtcblxuXHRcdFx0XHRuZXdTZWxlY3RvciA9IHNlbGVjdG9yO1xuXHRcdFx0XHRuZXdDb250ZXh0ID0gY29udGV4dDtcblxuXHRcdFx0XHQvLyBxU0EgY29uc2lkZXJzIGVsZW1lbnRzIG91dHNpZGUgYSBzY29waW5nIHJvb3Qgd2hlbiBldmFsdWF0aW5nIGNoaWxkIG9yXG5cdFx0XHRcdC8vIGRlc2NlbmRhbnQgY29tYmluYXRvcnMsIHdoaWNoIGlzIG5vdCB3aGF0IHdlIHdhbnQuXG5cdFx0XHRcdC8vIEluIHN1Y2ggY2FzZXMsIHdlIHdvcmsgYXJvdW5kIHRoZSBiZWhhdmlvciBieSBwcmVmaXhpbmcgZXZlcnkgc2VsZWN0b3IgaW4gdGhlXG5cdFx0XHRcdC8vIGxpc3Qgd2l0aCBhbiBJRCBzZWxlY3RvciByZWZlcmVuY2luZyB0aGUgc2NvcGUgY29udGV4dC5cblx0XHRcdFx0Ly8gVGhhbmtzIHRvIEFuZHJldyBEdXBvbnQgZm9yIHRoaXMgdGVjaG5pcXVlLlxuXHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSAxICYmIHJkZXNjZW5kLnRlc3QoIHNlbGVjdG9yICkgKSB7XG5cblx0XHRcdFx0XHQvLyBDYXB0dXJlIHRoZSBjb250ZXh0IElELCBzZXR0aW5nIGl0IGZpcnN0IGlmIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdGlmICggKG5pZCA9IGNvbnRleHQuZ2V0QXR0cmlidXRlKCBcImlkXCIgKSkgKSB7XG5cdFx0XHRcdFx0XHRuaWQgPSBuaWQucmVwbGFjZSggcmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb250ZXh0LnNldEF0dHJpYnV0ZSggXCJpZFwiLCAobmlkID0gZXhwYW5kbykgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmVmaXggZXZlcnkgc2VsZWN0b3IgaW4gdGhlIGxpc3Rcblx0XHRcdFx0XHRncm91cHMgPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcblx0XHRcdFx0XHRpID0gZ3JvdXBzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGdyb3Vwc1tpXSA9IFwiI1wiICsgbmlkICsgXCIgXCIgKyB0b1NlbGVjdG9yKCBncm91cHNbaV0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bmV3U2VsZWN0b3IgPSBncm91cHMuam9pbiggXCIsXCIgKTtcblxuXHRcdFx0XHRcdC8vIEV4cGFuZCBjb250ZXh0IGZvciBzaWJsaW5nIHNlbGVjdG9yc1xuXHRcdFx0XHRcdG5ld0NvbnRleHQgPSByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fFxuXHRcdFx0XHRcdFx0Y29udGV4dDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cyxcblx0XHRcdFx0XHRcdG5ld0NvbnRleHQucXVlcnlTZWxlY3RvckFsbCggbmV3U2VsZWN0b3IgKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH0gY2F0Y2ggKCBxc2FFcnJvciApIHtcblx0XHRcdFx0XHRub25uYXRpdmVTZWxlY3RvckNhY2hlKCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRcdGlmICggbmlkID09PSBleHBhbmRvICkge1xuXHRcdFx0XHRcdFx0Y29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFsbCBvdGhlcnNcblx0cmV0dXJuIHNlbGVjdCggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGtleS12YWx1ZSBjYWNoZXMgb2YgbGltaXRlZCBzaXplXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oc3RyaW5nLCBvYmplY3QpfSBSZXR1cm5zIHRoZSBPYmplY3QgZGF0YSBhZnRlciBzdG9yaW5nIGl0IG9uIGl0c2VsZiB3aXRoXG4gKlx0cHJvcGVydHkgbmFtZSB0aGUgKHNwYWNlLXN1ZmZpeGVkKSBzdHJpbmcgYW5kIChpZiB0aGUgY2FjaGUgaXMgbGFyZ2VyIHRoYW4gRXhwci5jYWNoZUxlbmd0aClcbiAqXHRkZWxldGluZyB0aGUgb2xkZXN0IGVudHJ5XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhY2hlKCkge1xuXHR2YXIga2V5cyA9IFtdO1xuXG5cdGZ1bmN0aW9uIGNhY2hlKCBrZXksIHZhbHVlICkge1xuXHRcdC8vIFVzZSAoa2V5ICsgXCIgXCIpIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIG5hdGl2ZSBwcm90b3R5cGUgcHJvcGVydGllcyAoc2VlIElzc3VlICMxNTcpXG5cdFx0aWYgKCBrZXlzLnB1c2goIGtleSArIFwiIFwiICkgPiBFeHByLmNhY2hlTGVuZ3RoICkge1xuXHRcdFx0Ly8gT25seSBrZWVwIHRoZSBtb3N0IHJlY2VudCBlbnRyaWVzXG5cdFx0XHRkZWxldGUgY2FjaGVbIGtleXMuc2hpZnQoKSBdO1xuXHRcdH1cblx0XHRyZXR1cm4gKGNhY2hlWyBrZXkgKyBcIiBcIiBdID0gdmFsdWUpO1xuXHR9XG5cdHJldHVybiBjYWNoZTtcbn1cblxuLyoqXG4gKiBNYXJrIGEgZnVuY3Rpb24gZm9yIHNwZWNpYWwgdXNlIGJ5IFNpenpsZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIG1hcmtcbiAqL1xuZnVuY3Rpb24gbWFya0Z1bmN0aW9uKCBmbiApIHtcblx0Zm5bIGV4cGFuZG8gXSA9IHRydWU7XG5cdHJldHVybiBmbjtcbn1cblxuLyoqXG4gKiBTdXBwb3J0IHRlc3RpbmcgdXNpbmcgYW4gZWxlbWVudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gUGFzc2VkIHRoZSBjcmVhdGVkIGVsZW1lbnQgYW5kIHJldHVybnMgYSBib29sZWFuIHJlc3VsdFxuICovXG5mdW5jdGlvbiBhc3NlcnQoIGZuICkge1xuXHR2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZmllbGRzZXRcIik7XG5cblx0dHJ5IHtcblx0XHRyZXR1cm4gISFmbiggZWwgKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBmaW5hbGx5IHtcblx0XHQvLyBSZW1vdmUgZnJvbSBpdHMgcGFyZW50IGJ5IGRlZmF1bHRcblx0XHRpZiAoIGVsLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbCApO1xuXHRcdH1cblx0XHQvLyByZWxlYXNlIG1lbW9yeSBpbiBJRVxuXHRcdGVsID0gbnVsbDtcblx0fVxufVxuXG4vKipcbiAqIEFkZHMgdGhlIHNhbWUgaGFuZGxlciBmb3IgYWxsIG9mIHRoZSBzcGVjaWZpZWQgYXR0cnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBhdHRycyBQaXBlLXNlcGFyYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgVGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgYXBwbGllZFxuICovXG5mdW5jdGlvbiBhZGRIYW5kbGUoIGF0dHJzLCBoYW5kbGVyICkge1xuXHR2YXIgYXJyID0gYXR0cnMuc3BsaXQoXCJ8XCIpLFxuXHRcdGkgPSBhcnIubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdEV4cHIuYXR0ckhhbmRsZVsgYXJyW2ldIF0gPSBoYW5kbGVyO1xuXHR9XG59XG5cbi8qKlxuICogQ2hlY2tzIGRvY3VtZW50IG9yZGVyIG9mIHR3byBzaWJsaW5nc1xuICogQHBhcmFtIHtFbGVtZW50fSBhXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFJldHVybnMgbGVzcyB0aGFuIDAgaWYgYSBwcmVjZWRlcyBiLCBncmVhdGVyIHRoYW4gMCBpZiBhIGZvbGxvd3MgYlxuICovXG5mdW5jdGlvbiBzaWJsaW5nQ2hlY2soIGEsIGIgKSB7XG5cdHZhciBjdXIgPSBiICYmIGEsXG5cdFx0ZGlmZiA9IGN1ciAmJiBhLm5vZGVUeXBlID09PSAxICYmIGIubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4O1xuXG5cdC8vIFVzZSBJRSBzb3VyY2VJbmRleCBpZiBhdmFpbGFibGUgb24gYm90aCBub2Rlc1xuXHRpZiAoIGRpZmYgKSB7XG5cdFx0cmV0dXJuIGRpZmY7XG5cdH1cblxuXHQvLyBDaGVjayBpZiBiIGZvbGxvd3MgYVxuXHRpZiAoIGN1ciApIHtcblx0XHR3aGlsZSAoIChjdXIgPSBjdXIubmV4dFNpYmxpbmcpICkge1xuXHRcdFx0aWYgKCBjdXIgPT09IGIgKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYSA/IDEgOiAtMTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGlucHV0IHR5cGVzXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVJbnB1dFBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgYnV0dG9uc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQnV0dG9uUHNldWRvKCB0eXBlICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0cmV0dXJuIChuYW1lID09PSBcImlucHV0XCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIikgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgOmVuYWJsZWQvOmRpc2FibGVkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGRpc2FibGVkIHRydWUgZm9yIDpkaXNhYmxlZDsgZmFsc2UgZm9yIDplbmFibGVkXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURpc2FibGVkUHNldWRvKCBkaXNhYmxlZCApIHtcblxuXHQvLyBLbm93biA6ZGlzYWJsZWQgZmFsc2UgcG9zaXRpdmVzOiBmaWVsZHNldFtkaXNhYmxlZF0gPiBsZWdlbmQ6bnRoLW9mLXR5cGUobisyKSA6Y2FuLWRpc2FibGVcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gT25seSBjZXJ0YWluIGVsZW1lbnRzIGNhbiBtYXRjaCA6ZW5hYmxlZCBvciA6ZGlzYWJsZWRcblx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1lbmFibGVkXG5cdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0b3ItZGlzYWJsZWRcblx0XHRpZiAoIFwiZm9ybVwiIGluIGVsZW0gKSB7XG5cblx0XHRcdC8vIENoZWNrIGZvciBpbmhlcml0ZWQgZGlzYWJsZWRuZXNzIG9uIHJlbGV2YW50IG5vbi1kaXNhYmxlZCBlbGVtZW50czpcblx0XHRcdC8vICogbGlzdGVkIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50cyBpbiBhIGRpc2FibGVkIGZpZWxkc2V0XG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY2F0ZWdvcnktbGlzdGVkXG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2VwdC1mZS1kaXNhYmxlZFxuXHRcdFx0Ly8gKiBvcHRpb24gZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtb3B0aW9uLWRpc2FibGVkXG5cdFx0XHQvLyBBbGwgc3VjaCBlbGVtZW50cyBoYXZlIGEgXCJmb3JtXCIgcHJvcGVydHkuXG5cdFx0XHRpZiAoIGVsZW0ucGFyZW50Tm9kZSAmJiBlbGVtLmRpc2FibGVkID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHQvLyBPcHRpb24gZWxlbWVudHMgZGVmZXIgdG8gYSBwYXJlbnQgb3B0Z3JvdXAgaWYgcHJlc2VudFxuXHRcdFx0XHRpZiAoIFwibGFiZWxcIiBpbiBlbGVtICkge1xuXHRcdFx0XHRcdGlmICggXCJsYWJlbFwiIGluIGVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLnBhcmVudE5vZGUuZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDExXG5cdFx0XHRcdC8vIFVzZSB0aGUgaXNEaXNhYmxlZCBzaG9ydGN1dCBwcm9wZXJ0eSB0byBjaGVjayBmb3IgZGlzYWJsZWQgZmllbGRzZXQgYW5jZXN0b3JzXG5cdFx0XHRcdHJldHVybiBlbGVtLmlzRGlzYWJsZWQgPT09IGRpc2FibGVkIHx8XG5cblx0XHRcdFx0XHQvLyBXaGVyZSB0aGVyZSBpcyBubyBpc0Rpc2FibGVkLCBjaGVjayBtYW51YWxseVxuXHRcdFx0XHRcdC8qIGpzaGludCAtVzAxOCAqL1xuXHRcdFx0XHRcdGVsZW0uaXNEaXNhYmxlZCAhPT0gIWRpc2FibGVkICYmXG5cdFx0XHRcdFx0XHRpbkRpc2FibGVkRmllbGRzZXQoIGVsZW0gKSA9PT0gZGlzYWJsZWQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblxuXHRcdC8vIFRyeSB0byB3aW5ub3cgb3V0IGVsZW1lbnRzIHRoYXQgY2FuJ3QgYmUgZGlzYWJsZWQgYmVmb3JlIHRydXN0aW5nIHRoZSBkaXNhYmxlZCBwcm9wZXJ0eS5cblx0XHQvLyBTb21lIHZpY3RpbXMgZ2V0IGNhdWdodCBpbiBvdXIgbmV0IChsYWJlbCwgbGVnZW5kLCBtZW51LCB0cmFjayksIGJ1dCBpdCBzaG91bGRuJ3Rcblx0XHQvLyBldmVuIGV4aXN0IG9uIHRoZW0sIGxldCBhbG9uZSBoYXZlIGEgYm9vbGVhbiB2YWx1ZS5cblx0XHR9IGVsc2UgaWYgKCBcImxhYmVsXCIgaW4gZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHR9XG5cblx0XHQvLyBSZW1haW5pbmcgZWxlbWVudHMgYXJlIG5laXRoZXIgOmVuYWJsZWQgbm9yIDpkaXNhYmxlZFxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIHBvc2l0aW9uYWxzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICovXG5mdW5jdGlvbiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmbiApIHtcblx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggYXJndW1lbnQgKSB7XG5cdFx0YXJndW1lbnQgPSArYXJndW1lbnQ7XG5cdFx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdHZhciBqLFxuXHRcdFx0XHRtYXRjaEluZGV4ZXMgPSBmbiggW10sIHNlZWQubGVuZ3RoLCBhcmd1bWVudCApLFxuXHRcdFx0XHRpID0gbWF0Y2hJbmRleGVzLmxlbmd0aDtcblxuXHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBpbmRleGVzXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCBzZWVkWyAoaiA9IG1hdGNoSW5kZXhlc1tpXSkgXSApIHtcblx0XHRcdFx0XHRzZWVkW2pdID0gIShtYXRjaGVzW2pdID0gc2VlZFtqXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBTaXp6bGUgY29udGV4dFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdD19IGNvbnRleHRcbiAqIEByZXR1cm5zIHtFbGVtZW50fE9iamVjdHxCb29sZWFufSBUaGUgaW5wdXQgbm9kZSBpZiBhY2NlcHRhYmxlLCBvdGhlcndpc2UgYSBmYWxzeSB2YWx1ZVxuICovXG5mdW5jdGlvbiB0ZXN0Q29udGV4dCggY29udGV4dCApIHtcblx0cmV0dXJuIGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29udGV4dDtcbn1cblxuLy8gRXhwb3NlIHN1cHBvcnQgdmFycyBmb3IgY29udmVuaWVuY2VcbnN1cHBvcnQgPSBTaXp6bGUuc3VwcG9ydCA9IHt9O1xuXG4vKipcbiAqIERldGVjdHMgWE1MIG5vZGVzXG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBlbGVtIEFuIGVsZW1lbnQgb3IgYSBkb2N1bWVudFxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWZmIGVsZW0gaXMgYSBub24tSFRNTCBYTUwgbm9kZVxuICovXG5pc1hNTCA9IFNpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHR2YXIgbmFtZXNwYWNlID0gZWxlbS5uYW1lc3BhY2VVUkksXG5cdFx0ZG9jRWxlbSA9IChlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSkuZG9jdW1lbnRFbGVtZW50O1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OFxuXHQvLyBBc3N1bWUgSFRNTCB3aGVuIGRvY3VtZW50RWxlbWVudCBkb2Vzbid0IHlldCBleGlzdCwgc3VjaCBhcyBpbnNpZGUgbG9hZGluZyBpZnJhbWVzXG5cdC8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC80ODMzXG5cdHJldHVybiAhcmh0bWwudGVzdCggbmFtZXNwYWNlIHx8IGRvY0VsZW0gJiYgZG9jRWxlbS5ub2RlTmFtZSB8fCBcIkhUTUxcIiApO1xufTtcblxuLyoqXG4gKiBTZXRzIGRvY3VtZW50LXJlbGF0ZWQgdmFyaWFibGVzIG9uY2UgYmFzZWQgb24gdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IFtkb2NdIEFuIGVsZW1lbnQgb3IgZG9jdW1lbnQgb2JqZWN0IHRvIHVzZSB0byBzZXQgdGhlIGRvY3VtZW50XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKi9cbnNldERvY3VtZW50ID0gU2l6emxlLnNldERvY3VtZW50ID0gZnVuY3Rpb24oIG5vZGUgKSB7XG5cdHZhciBoYXNDb21wYXJlLCBzdWJXaW5kb3csXG5cdFx0ZG9jID0gbm9kZSA/IG5vZGUub3duZXJEb2N1bWVudCB8fCBub2RlIDogcHJlZmVycmVkRG9jO1xuXG5cdC8vIFJldHVybiBlYXJseSBpZiBkb2MgaXMgaW52YWxpZCBvciBhbHJlYWR5IHNlbGVjdGVkXG5cdGlmICggZG9jID09PSBkb2N1bWVudCB8fCBkb2Mubm9kZVR5cGUgIT09IDkgfHwgIWRvYy5kb2N1bWVudEVsZW1lbnQgKSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50O1xuXHR9XG5cblx0Ly8gVXBkYXRlIGdsb2JhbCB2YXJpYWJsZXNcblx0ZG9jdW1lbnQgPSBkb2M7XG5cdGRvY0VsZW0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cdGRvY3VtZW50SXNIVE1MID0gIWlzWE1MKCBkb2N1bWVudCApO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDktMTEsIEVkZ2Vcblx0Ly8gQWNjZXNzaW5nIGlmcmFtZSBkb2N1bWVudHMgYWZ0ZXIgdW5sb2FkIHRocm93cyBcInBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3JzIChqUXVlcnkgIzEzOTM2KVxuXHRpZiAoIHByZWZlcnJlZERvYyAhPT0gZG9jdW1lbnQgJiZcblx0XHQoc3ViV2luZG93ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcpICYmIHN1YldpbmRvdy50b3AgIT09IHN1YldpbmRvdyApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDExLCBFZGdlXG5cdFx0aWYgKCBzdWJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lciApIHtcblx0XHRcdHN1YldpbmRvdy5hZGRFdmVudExpc3RlbmVyKCBcInVubG9hZFwiLCB1bmxvYWRIYW5kbGVyLCBmYWxzZSApO1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDEwIG9ubHlcblx0XHR9IGVsc2UgaWYgKCBzdWJXaW5kb3cuYXR0YWNoRXZlbnQgKSB7XG5cdFx0XHRzdWJXaW5kb3cuYXR0YWNoRXZlbnQoIFwib251bmxvYWRcIiwgdW5sb2FkSGFuZGxlciApO1xuXHRcdH1cblx0fVxuXG5cdC8qIEF0dHJpYnV0ZXNcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIFN1cHBvcnQ6IElFPDhcblx0Ly8gVmVyaWZ5IHRoYXQgZ2V0QXR0cmlidXRlIHJlYWxseSByZXR1cm5zIGF0dHJpYnV0ZXMgYW5kIG5vdCBwcm9wZXJ0aWVzXG5cdC8vIChleGNlcHRpbmcgSUU4IGJvb2xlYW5zKVxuXHRzdXBwb3J0LmF0dHJpYnV0ZXMgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdGVsLmNsYXNzTmFtZSA9IFwiaVwiO1xuXHRcdHJldHVybiAhZWwuZ2V0QXR0cmlidXRlKFwiY2xhc3NOYW1lXCIpO1xuXHR9KTtcblxuXHQvKiBnZXRFbGVtZW50KHMpQnkqXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikgcmV0dXJucyBvbmx5IGVsZW1lbnRzXG5cdHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdGVsLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVDb21tZW50KFwiXCIpICk7XG5cdFx0cmV0dXJuICFlbC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikubGVuZ3RoO1xuXHR9KTtcblxuXHQvLyBTdXBwb3J0OiBJRTw5XG5cdHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IHJuYXRpdmUudGVzdCggZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApO1xuXG5cdC8vIFN1cHBvcnQ6IElFPDEwXG5cdC8vIENoZWNrIGlmIGdldEVsZW1lbnRCeUlkIHJldHVybnMgZWxlbWVudHMgYnkgbmFtZVxuXHQvLyBUaGUgYnJva2VuIGdldEVsZW1lbnRCeUlkIG1ldGhvZHMgZG9uJ3QgcGljayB1cCBwcm9ncmFtbWF0aWNhbGx5LXNldCBuYW1lcyxcblx0Ly8gc28gdXNlIGEgcm91bmRhYm91dCBnZXRFbGVtZW50c0J5TmFtZSB0ZXN0XG5cdHN1cHBvcnQuZ2V0QnlJZCA9IGFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5pZCA9IGV4cGFuZG87XG5cdFx0cmV0dXJuICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSB8fCAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIGV4cGFuZG8gKS5sZW5ndGg7XG5cdH0pO1xuXG5cdC8vIElEIGZpbHRlciBhbmQgZmluZFxuXHRpZiAoIHN1cHBvcnQuZ2V0QnlJZCApIHtcblx0XHRFeHByLmZpbHRlcltcIklEXCJdID0gZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZShcImlkXCIpID09PSBhdHRySWQ7XG5cdFx0XHR9O1xuXHRcdH07XG5cdFx0RXhwci5maW5kW1wiSURcIl0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XG5cdFx0XHRcdHJldHVybiBlbGVtID8gWyBlbGVtIF0gOiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdEV4cHIuZmlsdGVyW1wiSURcIl0gPSAgZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpO1xuXHRcdFx0XHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlID09PSBhdHRySWQ7XG5cdFx0XHR9O1xuXHRcdH07XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA2IC0gNyBvbmx5XG5cdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgaXMgbm90IHJlbGlhYmxlIGFzIGEgZmluZCBzaG9ydGN1dFxuXHRcdEV4cHIuZmluZFtcIklEXCJdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIG5vZGUsIGksIGVsZW1zLFxuXHRcdFx0XHRcdGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXG5cdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdC8vIFZlcmlmeSB0aGUgaWQgYXR0cmlidXRlXG5cdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpO1xuXHRcdFx0XHRcdGlmICggbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZCApIHtcblx0XHRcdFx0XHRcdHJldHVybiBbIGVsZW0gXTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBGYWxsIGJhY2sgb24gZ2V0RWxlbWVudHNCeU5hbWVcblx0XHRcdFx0XHRlbGVtcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeU5hbWUoIGlkICk7XG5cdFx0XHRcdFx0aSA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoZWxlbSA9IGVsZW1zW2krK10pICkge1xuXHRcdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpO1xuXHRcdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gWyBlbGVtIF07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHQvLyBUYWdcblx0RXhwci5maW5kW1wiVEFHXCJdID0gc3VwcG9ydC5nZXRFbGVtZW50c0J5VGFnTmFtZSA/XG5cdFx0ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTtcblxuXHRcdFx0Ly8gRG9jdW1lbnRGcmFnbWVudCBub2RlcyBkb24ndCBoYXZlIGdFQlROXG5cdFx0XHR9IGVsc2UgaWYgKCBzdXBwb3J0LnFzYSApIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnICk7XG5cdFx0XHR9XG5cdFx0fSA6XG5cblx0XHRmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkge1xuXHRcdFx0dmFyIGVsZW0sXG5cdFx0XHRcdHRtcCA9IFtdLFxuXHRcdFx0XHRpID0gMCxcblx0XHRcdFx0Ly8gQnkgaGFwcHkgY29pbmNpZGVuY2UsIGEgKGJyb2tlbikgZ0VCVE4gYXBwZWFycyBvbiBEb2N1bWVudEZyYWdtZW50IG5vZGVzIHRvb1xuXHRcdFx0XHRyZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIEZpbHRlciBvdXQgcG9zc2libGUgY29tbWVudHNcblx0XHRcdGlmICggdGFnID09PSBcIipcIiApIHtcblx0XHRcdFx0d2hpbGUgKCAoZWxlbSA9IHJlc3VsdHNbaSsrXSkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRcdFx0dG1wLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdG1wO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0fTtcblxuXHQvLyBDbGFzc1xuXHRFeHByLmZpbmRbXCJDTEFTU1wiXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiBmdW5jdGlvbiggY2xhc3NOYW1lLCBjb250ZXh0ICkge1xuXHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIGNsYXNzTmFtZSApO1xuXHRcdH1cblx0fTtcblxuXHQvKiBRU0EvbWF0Y2hlc1NlbGVjdG9yXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBRU0EgYW5kIG1hdGNoZXNTZWxlY3RvciBzdXBwb3J0XG5cblx0Ly8gbWF0Y2hlc1NlbGVjdG9yKDphY3RpdmUpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChJRTkvT3BlcmEgMTEuNSlcblx0cmJ1Z2d5TWF0Y2hlcyA9IFtdO1xuXG5cdC8vIHFTYSg6Zm9jdXMpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChDaHJvbWUgMjEpXG5cdC8vIFdlIGFsbG93IHRoaXMgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBJRTgvOSB0aGF0IHRocm93cyBhbiBlcnJvclxuXHQvLyB3aGVuZXZlciBgZG9jdW1lbnQuYWN0aXZlRWxlbWVudGAgaXMgYWNjZXNzZWQgb24gYW4gaWZyYW1lXG5cdC8vIFNvLCB3ZSBhbGxvdyA6Zm9jdXMgdG8gcGFzcyB0aHJvdWdoIFFTQSBhbGwgdGhlIHRpbWUgdG8gYXZvaWQgdGhlIElFIGVycm9yXG5cdC8vIFNlZSBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTMzNzhcblx0cmJ1Z2d5UVNBID0gW107XG5cblx0aWYgKCAoc3VwcG9ydC5xc2EgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKSkgKSB7XG5cdFx0Ly8gQnVpbGQgUVNBIHJlZ2V4XG5cdFx0Ly8gUmVnZXggc3RyYXRlZ3kgYWRvcHRlZCBmcm9tIERpZWdvIFBlcmluaVxuXHRcdGFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHQvLyBTZWxlY3QgaXMgc2V0IHRvIGVtcHR5IHN0cmluZyBvbiBwdXJwb3NlXG5cdFx0XHQvLyBUaGlzIGlzIHRvIHRlc3QgSUUncyB0cmVhdG1lbnQgb2Ygbm90IGV4cGxpY2l0bHlcblx0XHRcdC8vIHNldHRpbmcgYSBib29sZWFuIGNvbnRlbnQgYXR0cmlidXRlLFxuXHRcdFx0Ly8gc2luY2UgaXRzIHByZXNlbmNlIHNob3VsZCBiZSBlbm91Z2hcblx0XHRcdC8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMjM1OVxuXHRcdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5pbm5lckhUTUwgPSBcIjxhIGlkPSdcIiArIGV4cGFuZG8gKyBcIic+PC9hPlwiICtcblx0XHRcdFx0XCI8c2VsZWN0IGlkPSdcIiArIGV4cGFuZG8gKyBcIi1cXHJcXFxcJyBtc2FsbG93Y2FwdHVyZT0nJz5cIiArXG5cdFx0XHRcdFwiPG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD5cIjtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4LCBPcGVyYSAxMS0xMi4xNlxuXHRcdFx0Ly8gTm90aGluZyBzaG91bGQgYmUgc2VsZWN0ZWQgd2hlbiBlbXB0eSBzdHJpbmdzIGZvbGxvdyBePSBvciAkPSBvciAqPVxuXHRcdFx0Ly8gVGhlIHRlc3QgYXR0cmlidXRlIG11c3QgYmUgdW5rbm93biBpbiBPcGVyYSBidXQgXCJzYWZlXCIgZm9yIFdpblJUXG5cdFx0XHQvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2hoNDY1Mzg4LmFzcHgjYXR0cmlidXRlX3NlY3Rpb25cblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbChcIlttc2FsbG93Y2FwdHVyZV49JyddXCIpLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiWypeJF09XCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86Jyd8XFxcIlxcXCIpXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XG5cdFx0XHQvLyBCb29sZWFuIGF0dHJpYnV0ZXMgYW5kIFwidmFsdWVcIiBhcmUgbm90IHRyZWF0ZWQgY29ycmVjdGx5XG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKFwiW3NlbGVjdGVkXVwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86dmFsdWV8XCIgKyBib29sZWFucyArIFwiKVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZTwyOSwgQW5kcm9pZDw0LjQsIFNhZmFyaTw3LjArLCBpT1M8Ny4wKywgUGhhbnRvbUpTPDEuOS44K1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJbaWR+PVwiICsgZXhwYW5kbyArIFwiLV1cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goXCJ+PVwiKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gV2Via2l0L09wZXJhIC0gOmNoZWNrZWQgc2hvdWxkIHJldHVybiBzZWxlY3RlZCBvcHRpb24gZWxlbWVudHNcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbChcIjpjaGVja2VkXCIpLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goXCI6Y2hlY2tlZFwiKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrLCBpT1MgOCtcblx0XHRcdC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY4NTFcblx0XHRcdC8vIEluLXBhZ2UgYHNlbGVjdG9yI2lkIHNpYmxpbmctY29tYmluYXRvciBzZWxlY3RvcmAgZmFpbHNcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiYSNcIiArIGV4cGFuZG8gKyBcIisqXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKFwiLiMuK1srfl1cIik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0ZWwuaW5uZXJIVE1MID0gXCI8YSBocmVmPScnIGRpc2FibGVkPSdkaXNhYmxlZCc+PC9hPlwiICtcblx0XHRcdFx0XCI8c2VsZWN0IGRpc2FibGVkPSdkaXNhYmxlZCc+PG9wdGlvbi8+PC9zZWxlY3Q+XCI7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IFdpbmRvd3MgOCBOYXRpdmUgQXBwc1xuXHRcdFx0Ly8gVGhlIHR5cGUgYW5kIG5hbWUgYXR0cmlidXRlcyBhcmUgcmVzdHJpY3RlZCBkdXJpbmcgLmlubmVySFRNTCBhc3NpZ25tZW50XG5cdFx0XHR2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG5cdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcImhpZGRlblwiICk7XG5cdFx0XHRlbC5hcHBlbmRDaGlsZCggaW5wdXQgKS5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcIkRcIiApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRThcblx0XHRcdC8vIEVuZm9yY2UgY2FzZS1zZW5zaXRpdml0eSBvZiBuYW1lIGF0dHJpYnV0ZVxuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKFwiW25hbWU9ZF1cIikubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJuYW1lXCIgKyB3aGl0ZXNwYWNlICsgXCIqWypeJHwhfl0/PVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZGIDMuNSAtIDplbmFibGVkLzpkaXNhYmxlZCBhbmQgaGlkZGVuIGVsZW1lbnRzIChoaWRkZW4gZWxlbWVudHMgYXJlIHN0aWxsIGVuYWJsZWQpXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKFwiOmVuYWJsZWRcIikubGVuZ3RoICE9PSAyICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6ZW5hYmxlZFwiLCBcIjpkaXNhYmxlZFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOS0xMStcblx0XHRcdC8vIElFJ3MgOmRpc2FibGVkIHNlbGVjdG9yIGRvZXMgbm90IHBpY2sgdXAgdGhlIGNoaWxkcmVuIG9mIGRpc2FibGVkIGZpZWxkc2V0c1xuXHRcdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5kaXNhYmxlZCA9IHRydWU7XG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCI6ZGlzYWJsZWRcIikubGVuZ3RoICE9PSAyICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6ZW5hYmxlZFwiLCBcIjpkaXNhYmxlZFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9wZXJhIDEwLTExIGRvZXMgbm90IHRocm93IG9uIHBvc3QtY29tbWEgaW52YWxpZCBwc2V1ZG9zXG5cdFx0XHRlbC5xdWVyeVNlbGVjdG9yQWxsKFwiKiw6eFwiKTtcblx0XHRcdHJidWdneVFTQS5wdXNoKFwiLC4qOlwiKTtcblx0XHR9KTtcblx0fVxuXG5cdGlmICggKHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yID0gcm5hdGl2ZS50ZXN0KCAobWF0Y2hlcyA9IGRvY0VsZW0ubWF0Y2hlcyB8fFxuXHRcdGRvY0VsZW0ud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5tb3pNYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm9NYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm1zTWF0Y2hlc1NlbGVjdG9yKSApKSApIHtcblxuXHRcdGFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHQvLyBDaGVjayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBtYXRjaGVzU2VsZWN0b3Jcblx0XHRcdC8vIG9uIGEgZGlzY29ubmVjdGVkIG5vZGUgKElFIDkpXG5cdFx0XHRzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoID0gbWF0Y2hlcy5jYWxsKCBlbCwgXCIqXCIgKTtcblxuXHRcdFx0Ly8gVGhpcyBzaG91bGQgZmFpbCB3aXRoIGFuIGV4Y2VwdGlvblxuXHRcdFx0Ly8gR2Vja28gZG9lcyBub3QgZXJyb3IsIHJldHVybnMgZmFsc2UgaW5zdGVhZFxuXHRcdFx0bWF0Y2hlcy5jYWxsKCBlbCwgXCJbcyE9JyddOnhcIiApO1xuXHRcdFx0cmJ1Z2d5TWF0Y2hlcy5wdXNoKCBcIiE9XCIsIHBzZXVkb3MgKTtcblx0XHR9KTtcblx0fVxuXG5cdHJidWdneVFTQSA9IHJidWdneVFTQS5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5UVNBLmpvaW4oXCJ8XCIpICk7XG5cdHJidWdneU1hdGNoZXMgPSByYnVnZ3lNYXRjaGVzLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lNYXRjaGVzLmpvaW4oXCJ8XCIpICk7XG5cblx0LyogQ29udGFpbnNcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXHRoYXNDb21wYXJlID0gcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICk7XG5cblx0Ly8gRWxlbWVudCBjb250YWlucyBhbm90aGVyXG5cdC8vIFB1cnBvc2VmdWxseSBzZWxmLWV4Y2x1c2l2ZVxuXHQvLyBBcyBpbiwgYW4gZWxlbWVudCBkb2VzIG5vdCBjb250YWluIGl0c2VsZlxuXHRjb250YWlucyA9IGhhc0NvbXBhcmUgfHwgcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbnRhaW5zICkgP1xuXHRcdGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdFx0dmFyIGFkb3duID0gYS5ub2RlVHlwZSA9PT0gOSA/IGEuZG9jdW1lbnRFbGVtZW50IDogYSxcblx0XHRcdFx0YnVwID0gYiAmJiBiLnBhcmVudE5vZGU7XG5cdFx0XHRyZXR1cm4gYSA9PT0gYnVwIHx8ICEhKCBidXAgJiYgYnVwLm5vZGVUeXBlID09PSAxICYmIChcblx0XHRcdFx0YWRvd24uY29udGFpbnMgP1xuXHRcdFx0XHRcdGFkb3duLmNvbnRhaW5zKCBidXAgKSA6XG5cdFx0XHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAmJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBidXAgKSAmIDE2XG5cdFx0XHQpKTtcblx0XHR9IDpcblx0XHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHRcdGlmICggYiApIHtcblx0XHRcdFx0d2hpbGUgKCAoYiA9IGIucGFyZW50Tm9kZSkgKSB7XG5cdFx0XHRcdFx0aWYgKCBiID09PSBhICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblxuXHQvKiBTb3J0aW5nXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBEb2N1bWVudCBvcmRlciBzb3J0aW5nXG5cdHNvcnRPcmRlciA9IGhhc0NvbXBhcmUgP1xuXHRmdW5jdGlvbiggYSwgYiApIHtcblxuXHRcdC8vIEZsYWcgZm9yIGR1cGxpY2F0ZSByZW1vdmFsXG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdC8vIFNvcnQgb24gbWV0aG9kIGV4aXN0ZW5jZSBpZiBvbmx5IG9uZSBpbnB1dCBoYXMgY29tcGFyZURvY3VtZW50UG9zaXRpb25cblx0XHR2YXIgY29tcGFyZSA9ICFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIC0gIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb247XG5cdFx0aWYgKCBjb21wYXJlICkge1xuXHRcdFx0cmV0dXJuIGNvbXBhcmU7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsY3VsYXRlIHBvc2l0aW9uIGlmIGJvdGggaW5wdXRzIGJlbG9uZyB0byB0aGUgc2FtZSBkb2N1bWVudFxuXHRcdGNvbXBhcmUgPSAoIGEub3duZXJEb2N1bWVudCB8fCBhICkgPT09ICggYi5vd25lckRvY3VtZW50IHx8IGIgKSA/XG5cdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBiICkgOlxuXG5cdFx0XHQvLyBPdGhlcndpc2Ugd2Uga25vdyB0aGV5IGFyZSBkaXNjb25uZWN0ZWRcblx0XHRcdDE7XG5cblx0XHQvLyBEaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRpZiAoIGNvbXBhcmUgJiAxIHx8XG5cdFx0XHQoIXN1cHBvcnQuc29ydERldGFjaGVkICYmIGIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGEgKSA9PT0gY29tcGFyZSkgKSB7XG5cblx0XHRcdC8vIENob29zZSB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IGlzIHJlbGF0ZWQgdG8gb3VyIHByZWZlcnJlZCBkb2N1bWVudFxuXHRcdFx0aWYgKCBhID09PSBkb2N1bWVudCB8fCBhLm93bmVyRG9jdW1lbnQgPT09IHByZWZlcnJlZERvYyAmJiBjb250YWlucyhwcmVmZXJyZWREb2MsIGEpICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGIgPT09IGRvY3VtZW50IHx8IGIub3duZXJEb2N1bWVudCA9PT0gcHJlZmVycmVkRG9jICYmIGNvbnRhaW5zKHByZWZlcnJlZERvYywgYikgKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWludGFpbiBvcmlnaW5hbCBvcmRlclxuXHRcdFx0cmV0dXJuIHNvcnRJbnB1dCA/XG5cdFx0XHRcdCggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tcGFyZSAmIDQgPyAtMSA6IDE7XG5cdH0gOlxuXHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHQvLyBFeGl0IGVhcmx5IGlmIHRoZSBub2RlcyBhcmUgaWRlbnRpY2FsXG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdHZhciBjdXIsXG5cdFx0XHRpID0gMCxcblx0XHRcdGF1cCA9IGEucGFyZW50Tm9kZSxcblx0XHRcdGJ1cCA9IGIucGFyZW50Tm9kZSxcblx0XHRcdGFwID0gWyBhIF0sXG5cdFx0XHRicCA9IFsgYiBdO1xuXG5cdFx0Ly8gUGFyZW50bGVzcyBub2RlcyBhcmUgZWl0aGVyIGRvY3VtZW50cyBvciBkaXNjb25uZWN0ZWRcblx0XHRpZiAoICFhdXAgfHwgIWJ1cCApIHtcblx0XHRcdHJldHVybiBhID09PSBkb2N1bWVudCA/IC0xIDpcblx0XHRcdFx0YiA9PT0gZG9jdW1lbnQgPyAxIDpcblx0XHRcdFx0YXVwID8gLTEgOlxuXHRcdFx0XHRidXAgPyAxIDpcblx0XHRcdFx0c29ydElucHV0ID9cblx0XHRcdFx0KCBpbmRleE9mKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOlxuXHRcdFx0XHQwO1xuXG5cdFx0Ly8gSWYgdGhlIG5vZGVzIGFyZSBzaWJsaW5ncywgd2UgY2FuIGRvIGEgcXVpY2sgY2hlY2tcblx0XHR9IGVsc2UgaWYgKCBhdXAgPT09IGJ1cCApIHtcblx0XHRcdHJldHVybiBzaWJsaW5nQ2hlY2soIGEsIGIgKTtcblx0XHR9XG5cblx0XHQvLyBPdGhlcndpc2Ugd2UgbmVlZCBmdWxsIGxpc3RzIG9mIHRoZWlyIGFuY2VzdG9ycyBmb3IgY29tcGFyaXNvblxuXHRcdGN1ciA9IGE7XG5cdFx0d2hpbGUgKCAoY3VyID0gY3VyLnBhcmVudE5vZGUpICkge1xuXHRcdFx0YXAudW5zaGlmdCggY3VyICk7XG5cdFx0fVxuXHRcdGN1ciA9IGI7XG5cdFx0d2hpbGUgKCAoY3VyID0gY3VyLnBhcmVudE5vZGUpICkge1xuXHRcdFx0YnAudW5zaGlmdCggY3VyICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2FsayBkb3duIHRoZSB0cmVlIGxvb2tpbmcgZm9yIGEgZGlzY3JlcGFuY3lcblx0XHR3aGlsZSAoIGFwW2ldID09PSBicFtpXSApIHtcblx0XHRcdGkrKztcblx0XHR9XG5cblx0XHRyZXR1cm4gaSA/XG5cdFx0XHQvLyBEbyBhIHNpYmxpbmcgY2hlY2sgaWYgdGhlIG5vZGVzIGhhdmUgYSBjb21tb24gYW5jZXN0b3Jcblx0XHRcdHNpYmxpbmdDaGVjayggYXBbaV0sIGJwW2ldICkgOlxuXG5cdFx0XHQvLyBPdGhlcndpc2Ugbm9kZXMgaW4gb3VyIGRvY3VtZW50IHNvcnQgZmlyc3Rcblx0XHRcdGFwW2ldID09PSBwcmVmZXJyZWREb2MgPyAtMSA6XG5cdFx0XHRicFtpXSA9PT0gcHJlZmVycmVkRG9jID8gMSA6XG5cdFx0XHQwO1xuXHR9O1xuXG5cdHJldHVybiBkb2N1bWVudDtcbn07XG5cblNpenpsZS5tYXRjaGVzID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1lbnRzICkge1xuXHRyZXR1cm4gU2l6emxlKCBleHByLCBudWxsLCBudWxsLCBlbGVtZW50cyApO1xufTtcblxuU2l6emxlLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBlbGVtLCBleHByICkge1xuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0aWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT09IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdH1cblxuXHRpZiAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yICYmIGRvY3VtZW50SXNIVE1MICYmXG5cdFx0IW5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGVbIGV4cHIgKyBcIiBcIiBdICYmXG5cdFx0KCAhcmJ1Z2d5TWF0Y2hlcyB8fCAhcmJ1Z2d5TWF0Y2hlcy50ZXN0KCBleHByICkgKSAmJlxuXHRcdCggIXJidWdneVFTQSAgICAgfHwgIXJidWdneVFTQS50ZXN0KCBleHByICkgKSApIHtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBlbGVtLCBleHByICk7XG5cblx0XHRcdC8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRcdGlmICggcmV0IHx8IHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggfHxcblx0XHRcdFx0XHQvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudFxuXHRcdFx0XHRcdC8vIGZyYWdtZW50IGluIElFIDlcblx0XHRcdFx0XHRlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09IDExICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUoIGV4cHIsIHRydWUgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gU2l6emxlKCBleHByLCBkb2N1bWVudCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5ndGggPiAwO1xufTtcblxuU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oIGNvbnRleHQsIGVsZW0gKSB7XG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHRpZiAoICggY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0fVxuXHRyZXR1cm4gY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKTtcbn07XG5cblNpenpsZS5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHRpZiAoICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0fVxuXG5cdHZhciBmbiA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZS50b0xvd2VyQ2FzZSgpIF0sXG5cdFx0Ly8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKGpRdWVyeSAjMTM4MDcpXG5cdFx0dmFsID0gZm4gJiYgaGFzT3duLmNhbGwoIEV4cHIuYXR0ckhhbmRsZSwgbmFtZS50b0xvd2VyQ2FzZSgpICkgP1xuXHRcdFx0Zm4oIGVsZW0sIG5hbWUsICFkb2N1bWVudElzSFRNTCApIDpcblx0XHRcdHVuZGVmaW5lZDtcblxuXHRyZXR1cm4gdmFsICE9PSB1bmRlZmluZWQgP1xuXHRcdHZhbCA6XG5cdFx0c3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApIDpcblx0XHRcdCh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUobmFtZSkpICYmIHZhbC5zcGVjaWZpZWQgP1xuXHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xufTtcblxuU2l6emxlLmVzY2FwZSA9IGZ1bmN0aW9uKCBzZWwgKSB7XG5cdHJldHVybiAoc2VsICsgXCJcIikucmVwbGFjZSggcmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApO1xufTtcblxuU2l6emxlLmVycm9yID0gZnVuY3Rpb24oIG1zZyApIHtcblx0dGhyb3cgbmV3IEVycm9yKCBcIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246IFwiICsgbXNnICk7XG59O1xuXG4vKipcbiAqIERvY3VtZW50IHNvcnRpbmcgYW5kIHJlbW92aW5nIGR1cGxpY2F0ZXNcbiAqIEBwYXJhbSB7QXJyYXlMaWtlfSByZXN1bHRzXG4gKi9cblNpenpsZS51bmlxdWVTb3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7XG5cdHZhciBlbGVtLFxuXHRcdGR1cGxpY2F0ZXMgPSBbXSxcblx0XHRqID0gMCxcblx0XHRpID0gMDtcblxuXHQvLyBVbmxlc3Mgd2UgKmtub3cqIHdlIGNhbiBkZXRlY3QgZHVwbGljYXRlcywgYXNzdW1lIHRoZWlyIHByZXNlbmNlXG5cdGhhc0R1cGxpY2F0ZSA9ICFzdXBwb3J0LmRldGVjdER1cGxpY2F0ZXM7XG5cdHNvcnRJbnB1dCA9ICFzdXBwb3J0LnNvcnRTdGFibGUgJiYgcmVzdWx0cy5zbGljZSggMCApO1xuXHRyZXN1bHRzLnNvcnQoIHNvcnRPcmRlciApO1xuXG5cdGlmICggaGFzRHVwbGljYXRlICkge1xuXHRcdHdoaWxlICggKGVsZW0gPSByZXN1bHRzW2krK10pICkge1xuXHRcdFx0aWYgKCBlbGVtID09PSByZXN1bHRzWyBpIF0gKSB7XG5cdFx0XHRcdGogPSBkdXBsaWNhdGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRyZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sgaiBdLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNlIG9iamVjdHNcblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL3B1bGwvMjI1XG5cdHNvcnRJbnB1dCA9IG51bGw7XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVzXG4gKiBAcGFyYW0ge0FycmF5fEVsZW1lbnR9IGVsZW1cbiAqL1xuZ2V0VGV4dCA9IFNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHZhciBub2RlLFxuXHRcdHJldCA9IFwiXCIsXG5cdFx0aSA9IDAsXG5cdFx0bm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdGlmICggIW5vZGVUeXBlICkge1xuXHRcdC8vIElmIG5vIG5vZGVUeXBlLCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5XG5cdFx0d2hpbGUgKCAobm9kZSA9IGVsZW1baSsrXSkgKSB7XG5cdFx0XHQvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2Rlc1xuXHRcdFx0cmV0ICs9IGdldFRleHQoIG5vZGUgKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09PSA5IHx8IG5vZGVUeXBlID09PSAxMSApIHtcblx0XHQvLyBVc2UgdGV4dENvbnRlbnQgZm9yIGVsZW1lbnRzXG5cdFx0Ly8gaW5uZXJUZXh0IHVzYWdlIHJlbW92ZWQgZm9yIGNvbnNpc3RlbmN5IG9mIG5ldyBsaW5lcyAoalF1ZXJ5ICMxMTE1Mylcblx0XHRpZiAoIHR5cGVvZiBlbGVtLnRleHRDb250ZW50ID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0udGV4dENvbnRlbnQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFRyYXZlcnNlIGl0cyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdHJldCArPSBnZXRUZXh0KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVmFsdWU7XG5cdH1cblx0Ly8gRG8gbm90IGluY2x1ZGUgY29tbWVudCBvciBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzXG5cblx0cmV0dXJuIHJldDtcbn07XG5cbkV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzID0ge1xuXG5cdC8vIENhbiBiZSBhZGp1c3RlZCBieSB0aGUgdXNlclxuXHRjYWNoZUxlbmd0aDogNTAsXG5cblx0Y3JlYXRlUHNldWRvOiBtYXJrRnVuY3Rpb24sXG5cblx0bWF0Y2g6IG1hdGNoRXhwcixcblxuXHRhdHRySGFuZGxlOiB7fSxcblxuXHRmaW5kOiB7fSxcblxuXHRyZWxhdGl2ZToge1xuXHRcdFwiPlwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCIgXCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiB9LFxuXHRcdFwiK1wiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIn5cIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIgfVxuXHR9LFxuXG5cdHByZUZpbHRlcjoge1xuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaFsxXSA9IG1hdGNoWzFdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdC8vIE1vdmUgdGhlIGdpdmVuIHZhbHVlIHRvIG1hdGNoWzNdIHdoZXRoZXIgcXVvdGVkIG9yIHVucXVvdGVkXG5cdFx0XHRtYXRjaFszXSA9ICggbWF0Y2hbM10gfHwgbWF0Y2hbNF0gfHwgbWF0Y2hbNV0gfHwgXCJcIiApLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdGlmICggbWF0Y2hbMl0gPT09IFwifj1cIiApIHtcblx0XHRcdFx0bWF0Y2hbM10gPSBcIiBcIiArIG1hdGNoWzNdICsgXCIgXCI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgNCApO1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdC8qIG1hdGNoZXMgZnJvbSBtYXRjaEV4cHJbXCJDSElMRFwiXVxuXHRcdFx0XHQxIHR5cGUgKG9ubHl8bnRofC4uLilcblx0XHRcdFx0MiB3aGF0IChjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHQzIGFyZ3VtZW50IChldmVufG9kZHxcXGQqfFxcZCpuKFsrLV1cXGQrKT98Li4uKVxuXHRcdFx0XHQ0IHhuLWNvbXBvbmVudCBvZiB4bit5IGFyZ3VtZW50IChbKy1dP1xcZCpufClcblx0XHRcdFx0NSBzaWduIG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ2IHggb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDcgc2lnbiBvZiB5LWNvbXBvbmVudFxuXHRcdFx0XHQ4IHkgb2YgeS1jb21wb25lbnRcblx0XHRcdCovXG5cdFx0XHRtYXRjaFsxXSA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdGlmICggbWF0Y2hbMV0uc2xpY2UoIDAsIDMgKSA9PT0gXCJudGhcIiApIHtcblx0XHRcdFx0Ly8gbnRoLSogcmVxdWlyZXMgYXJndW1lbnRcblx0XHRcdFx0aWYgKCAhbWF0Y2hbM10gKSB7XG5cdFx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFswXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gbnVtZXJpYyB4IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxEXG5cdFx0XHRcdC8vIHJlbWVtYmVyIHRoYXQgZmFsc2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzFcblx0XHRcdFx0bWF0Y2hbNF0gPSArKCBtYXRjaFs0XSA/IG1hdGNoWzVdICsgKG1hdGNoWzZdIHx8IDEpIDogMiAqICggbWF0Y2hbM10gPT09IFwiZXZlblwiIHx8IG1hdGNoWzNdID09PSBcIm9kZFwiICkgKTtcblx0XHRcdFx0bWF0Y2hbNV0gPSArKCAoIG1hdGNoWzddICsgbWF0Y2hbOF0gKSB8fCBtYXRjaFszXSA9PT0gXCJvZGRcIiApO1xuXG5cdFx0XHQvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWzNdICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaDtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0dmFyIGV4Y2Vzcyxcblx0XHRcdFx0dW5xdW90ZWQgPSAhbWF0Y2hbNl0gJiYgbWF0Y2hbMl07XG5cblx0XHRcdGlmICggbWF0Y2hFeHByW1wiQ0hJTERcIl0udGVzdCggbWF0Y2hbMF0gKSApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFjY2VwdCBxdW90ZWQgYXJndW1lbnRzIGFzLWlzXG5cdFx0XHRpZiAoIG1hdGNoWzNdICkge1xuXHRcdFx0XHRtYXRjaFsyXSA9IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8IFwiXCI7XG5cblx0XHRcdC8vIFN0cmlwIGV4Y2VzcyBjaGFyYWN0ZXJzIGZyb20gdW5xdW90ZWQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCB1bnF1b3RlZCAmJiBycHNldWRvLnRlc3QoIHVucXVvdGVkICkgJiZcblx0XHRcdFx0Ly8gR2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSlcblx0XHRcdFx0KGV4Y2VzcyA9IHRva2VuaXplKCB1bnF1b3RlZCwgdHJ1ZSApKSAmJlxuXHRcdFx0XHQvLyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNsb3NpbmcgcGFyZW50aGVzaXNcblx0XHRcdFx0KGV4Y2VzcyA9IHVucXVvdGVkLmluZGV4T2YoIFwiKVwiLCB1bnF1b3RlZC5sZW5ndGggLSBleGNlc3MgKSAtIHVucXVvdGVkLmxlbmd0aCkgKSB7XG5cblx0XHRcdFx0Ly8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXhcblx0XHRcdFx0bWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHRcdG1hdGNoWzJdID0gdW5xdW90ZWQuc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXR1cm4gb25seSBjYXB0dXJlcyBuZWVkZWQgYnkgdGhlIHBzZXVkbyBmaWx0ZXIgbWV0aG9kICh0eXBlIGFuZCBhcmd1bWVudClcblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgMyApO1xuXHRcdH1cblx0fSxcblxuXHRmaWx0ZXI6IHtcblxuXHRcdFwiVEFHXCI6IGZ1bmN0aW9uKCBub2RlTmFtZVNlbGVjdG9yICkge1xuXHRcdFx0dmFyIG5vZGVOYW1lID0gbm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gXCIqXCIgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7IH0gOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5vZGVOYW1lO1xuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNMQVNTXCI6IGZ1bmN0aW9uKCBjbGFzc05hbWUgKSB7XG5cdFx0XHR2YXIgcGF0dGVybiA9IGNsYXNzQ2FjaGVbIGNsYXNzTmFtZSArIFwiIFwiIF07XG5cblx0XHRcdHJldHVybiBwYXR0ZXJuIHx8XG5cdFx0XHRcdChwYXR0ZXJuID0gbmV3IFJlZ0V4cCggXCIoXnxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIGNsYXNzTmFtZSArIFwiKFwiICsgd2hpdGVzcGFjZSArIFwifCQpXCIgKSkgJiZcblx0XHRcdFx0Y2xhc3NDYWNoZSggY2xhc3NOYW1lLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGF0dGVybi50ZXN0KCB0eXBlb2YgZWxlbS5jbGFzc05hbWUgPT09IFwic3RyaW5nXCIgJiYgZWxlbS5jbGFzc05hbWUgfHwgdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9PSBcInVuZGVmaW5lZFwiICYmIGVsZW0uZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgfHwgXCJcIiApO1xuXHRcdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBuYW1lLCBvcGVyYXRvciwgY2hlY2sgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciByZXN1bHQgPSBTaXp6bGUuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0XHRcdGlmICggcmVzdWx0ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIiE9XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAhb3BlcmF0b3IgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXN1bHQgKz0gXCJcIjtcblxuXHRcdFx0XHRyZXR1cm4gb3BlcmF0b3IgPT09IFwiPVwiID8gcmVzdWx0ID09PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiIT1cIiA/IHJlc3VsdCAhPT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIl49XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA9PT0gMCA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiKj1cIiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID4gLTEgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiQ9XCIgPyBjaGVjayAmJiByZXN1bHQuc2xpY2UoIC1jaGVjay5sZW5ndGggKSA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIn49XCIgPyAoIFwiIFwiICsgcmVzdWx0LnJlcGxhY2UoIHJ3aGl0ZXNwYWNlLCBcIiBcIiApICsgXCIgXCIgKS5pbmRleE9mKCBjaGVjayApID4gLTEgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcInw9XCIgPyByZXN1bHQgPT09IGNoZWNrIHx8IHJlc3VsdC5zbGljZSggMCwgY2hlY2subGVuZ3RoICsgMSApID09PSBjaGVjayArIFwiLVwiIDpcblx0XHRcdFx0XHRmYWxzZTtcblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiQ0hJTERcIjogZnVuY3Rpb24oIHR5cGUsIHdoYXQsIGFyZ3VtZW50LCBmaXJzdCwgbGFzdCApIHtcblx0XHRcdHZhciBzaW1wbGUgPSB0eXBlLnNsaWNlKCAwLCAzICkgIT09IFwibnRoXCIsXG5cdFx0XHRcdGZvcndhcmQgPSB0eXBlLnNsaWNlKCAtNCApICE9PSBcImxhc3RcIixcblx0XHRcdFx0b2ZUeXBlID0gd2hhdCA9PT0gXCJvZi10eXBlXCI7XG5cblx0XHRcdHJldHVybiBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwID9cblxuXHRcdFx0XHQvLyBTaG9ydGN1dCBmb3IgOm50aC0qKG4pXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiAhIWVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdFx0fSA6XG5cblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgY2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLCBub2RlLCBub2RlSW5kZXgsIHN0YXJ0LFxuXHRcdFx0XHRcdFx0ZGlyID0gc2ltcGxlICE9PSBmb3J3YXJkID8gXCJuZXh0U2libGluZ1wiIDogXCJwcmV2aW91c1NpYmxpbmdcIixcblx0XHRcdFx0XHRcdHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZSxcblx0XHRcdFx0XHRcdG5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0XHRcdFx0dXNlQ2FjaGUgPSAheG1sICYmICFvZlR5cGUsXG5cdFx0XHRcdFx0XHRkaWZmID0gZmFsc2U7XG5cblx0XHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gOihmaXJzdHxsYXN0fG9ubHkpLShjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHRcdFx0aWYgKCBzaW1wbGUgKSB7XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggZGlyICkge1xuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKG5vZGUgPSBub2RlWyBkaXIgXSkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG9mVHlwZSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvLyBSZXZlcnNlIGRpcmVjdGlvbiBmb3IgOm9ubHktKiAoaWYgd2UgaGF2ZW4ndCB5ZXQgZG9uZSBzbylcblx0XHRcdFx0XHRcdFx0XHRzdGFydCA9IGRpciA9IHR5cGUgPT09IFwib25seVwiICYmICFzdGFydCAmJiBcIm5leHRTaWJsaW5nXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHN0YXJ0ID0gWyBmb3J3YXJkID8gcGFyZW50LmZpcnN0Q2hpbGQgOiBwYXJlbnQubGFzdENoaWxkIF07XG5cblx0XHRcdFx0XHRcdC8vIG5vbi14bWwgOm50aC1jaGlsZCguLi4pIHN0b3JlcyBjYWNoZSBkYXRhIG9uIGBwYXJlbnRgXG5cdFx0XHRcdFx0XHRpZiAoIGZvcndhcmQgJiYgdXNlQ2FjaGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU2VlayBgZWxlbWAgZnJvbSBhIHByZXZpb3VzbHktY2FjaGVkIGluZGV4XG5cblx0XHRcdFx0XHRcdFx0Ly8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheVxuXHRcdFx0XHRcdFx0XHRub2RlID0gcGFyZW50O1xuXHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHQob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdGNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4ICYmIGNhY2hlWyAyIF07XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBub2RlSW5kZXggJiYgcGFyZW50LmNoaWxkTm9kZXNbIG5vZGVJbmRleCBdO1xuXG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBGYWxsYmFjayB0byBzZWVraW5nIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdChkaWZmID0gbm9kZUluZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gV2hlbiBmb3VuZCwgY2FjaGUgaW5kZXhlcyBvbiBgcGFyZW50YCBhbmQgYnJlYWtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgJiYgKytkaWZmICYmIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBub2RlSW5kZXgsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBVc2UgcHJldmlvdXNseS1jYWNoZWQgZWxlbWVudCBpbmRleCBpZiBhdmFpbGFibGVcblx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0XHQvLyAuLi5pbiBhIGd6aXAtZnJpZW5kbHkgd2F5XG5cdFx0XHRcdFx0XHRcdFx0bm9kZSA9IGVsZW07XG5cdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0Y2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4O1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8geG1sIDpudGgtY2hpbGQoLi4uKVxuXHRcdFx0XHRcdFx0XHQvLyBvciA6bnRoLWxhc3QtY2hpbGQoLi4uKSBvciA6bnRoKC1sYXN0KT8tb2YtdHlwZSguLi4pXG5cdFx0XHRcdFx0XHRcdGlmICggZGlmZiA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gVXNlIHRoZSBzYW1lIGxvb3AgYXMgYWJvdmUgdG8gc2VlayBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoIChub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KGRpZmYgPSBub2RlSW5kZXggPSAwKSB8fCBzdGFydC5wb3AoKSkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmICggKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVUeXBlID09PSAxICkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0KytkaWZmICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIENhY2hlIHRoZSBpbmRleCBvZiBlYWNoIGVuY291bnRlcmVkIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgdGhlIG9mZnNldCwgdGhlbiBjaGVjayBhZ2FpbnN0IGN5Y2xlIHNpemVcblx0XHRcdFx0XHRcdGRpZmYgLT0gbGFzdDtcblx0XHRcdFx0XHRcdHJldHVybiBkaWZmID09PSBmaXJzdCB8fCAoIGRpZmYgJSBmaXJzdCA9PT0gMCAmJiBkaWZmIC8gZmlyc3QgPj0gMCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIHBzZXVkbywgYXJndW1lbnQgKSB7XG5cdFx0XHQvLyBwc2V1ZG8tY2xhc3MgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmVcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXNcblx0XHRcdC8vIFByaW9yaXRpemUgYnkgY2FzZSBzZW5zaXRpdml0eSBpbiBjYXNlIGN1c3RvbSBwc2V1ZG9zIGFyZSBhZGRlZCB3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzXG5cdFx0XHQvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRlcnMgaW5oZXJpdHMgZnJvbSBwc2V1ZG9zXG5cdFx0XHR2YXIgYXJncyxcblx0XHRcdFx0Zm4gPSBFeHByLnBzZXVkb3NbIHBzZXVkbyBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiICsgcHNldWRvICk7XG5cblx0XHRcdC8vIFRoZSB1c2VyIG1heSB1c2UgY3JlYXRlUHNldWRvIHRvIGluZGljYXRlIHRoYXRcblx0XHRcdC8vIGFyZ3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9uXG5cdFx0XHQvLyBqdXN0IGFzIFNpenpsZSBkb2VzXG5cdFx0XHRpZiAoIGZuWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHJldHVybiBmbiggYXJndW1lbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQnV0IG1haW50YWluIHN1cHBvcnQgZm9yIG9sZCBzaWduYXR1cmVzXG5cdFx0XHRpZiAoIGZuLmxlbmd0aCA+IDEgKSB7XG5cdFx0XHRcdGFyZ3MgPSBbIHBzZXVkbywgcHNldWRvLCBcIlwiLCBhcmd1bWVudCBdO1xuXHRcdFx0XHRyZXR1cm4gRXhwci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID9cblx0XHRcdFx0XHRtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHRcdFx0XHR2YXIgaWR4LFxuXHRcdFx0XHRcdFx0XHRtYXRjaGVkID0gZm4oIHNlZWQsIGFyZ3VtZW50ICksXG5cdFx0XHRcdFx0XHRcdGkgPSBtYXRjaGVkLmxlbmd0aDtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZHggPSBpbmRleE9mKCBzZWVkLCBtYXRjaGVkW2ldICk7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGlkeCBdID0gISggbWF0Y2hlc1sgaWR4IF0gPSBtYXRjaGVkW2ldICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSkgOlxuXHRcdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZuO1xuXHRcdH1cblx0fSxcblxuXHRwc2V1ZG9zOiB7XG5cdFx0Ly8gUG90ZW50aWFsbHkgY29tcGxleCBwc2V1ZG9zXG5cdFx0XCJub3RcIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRcdC8vIFRyaW0gdGhlIHNlbGVjdG9yIHBhc3NlZCB0byBjb21waWxlXG5cdFx0XHQvLyB0byBhdm9pZCB0cmVhdGluZyBsZWFkaW5nIGFuZCB0cmFpbGluZ1xuXHRcdFx0Ly8gc3BhY2VzIGFzIGNvbWJpbmF0b3JzXG5cdFx0XHR2YXIgaW5wdXQgPSBbXSxcblx0XHRcdFx0cmVzdWx0cyA9IFtdLFxuXHRcdFx0XHRtYXRjaGVyID0gY29tcGlsZSggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApICk7XG5cblx0XHRcdHJldHVybiBtYXRjaGVyWyBleHBhbmRvIF0gP1xuXHRcdFx0XHRtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMsIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgZWxlbSxcblx0XHRcdFx0XHRcdHVubWF0Y2hlZCA9IG1hdGNoZXIoIHNlZWQsIG51bGwsIHhtbCwgW10gKSxcblx0XHRcdFx0XHRcdGkgPSBzZWVkLmxlbmd0aDtcblxuXHRcdFx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIHVubWF0Y2hlZCBieSBgbWF0Y2hlcmBcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkge1xuXHRcdFx0XHRcdFx0XHRzZWVkW2ldID0gIShtYXRjaGVzW2ldID0gZWxlbSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0aW5wdXRbMF0gPSBlbGVtO1xuXHRcdFx0XHRcdG1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJlc3VsdHMgKTtcblx0XHRcdFx0XHQvLyBEb24ndCBrZWVwIHRoZSBlbGVtZW50IChpc3N1ZSAjMjk5KVxuXHRcdFx0XHRcdGlucHV0WzBdID0gbnVsbDtcblx0XHRcdFx0XHRyZXR1cm4gIXJlc3VsdHMucG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0fSksXG5cblx0XHRcImhhc1wiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gU2l6emxlKCBzZWxlY3RvciwgZWxlbSApLmxlbmd0aCA+IDA7XG5cdFx0XHR9O1xuXHRcdH0pLFxuXG5cdFx0XCJjb250YWluc1wiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gKCBlbGVtLnRleHRDb250ZW50IHx8IGdldFRleHQoIGVsZW0gKSApLmluZGV4T2YoIHRleHQgKSA+IC0xO1xuXHRcdFx0fTtcblx0XHR9KSxcblxuXHRcdC8vIFwiV2hldGhlciBhbiBlbGVtZW50IGlzIHJlcHJlc2VudGVkIGJ5IGEgOmxhbmcoKSBzZWxlY3RvclxuXHRcdC8vIGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlXG5cdFx0Ly8gYmVpbmcgZXF1YWwgdG8gdGhlIGlkZW50aWZpZXIgQyxcblx0XHQvLyBvciBiZWdpbm5pbmcgd2l0aCB0aGUgaWRlbnRpZmllciBDIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IFwiLVwiLlxuXHRcdC8vIFRoZSBtYXRjaGluZyBvZiBDIGFnYWluc3QgdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZSBpcyBwZXJmb3JtZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LlxuXHRcdC8vIFRoZSBpZGVudGlmaWVyIEMgZG9lcyBub3QgaGF2ZSB0byBiZSBhIHZhbGlkIGxhbmd1YWdlIG5hbWUuXCJcblx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2xhbmctcHNldWRvXG5cdFx0XCJsYW5nXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGxhbmcgKSB7XG5cdFx0XHQvLyBsYW5nIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWVyXG5cdFx0XHRpZiAoICFyaWRlbnRpZmllci50ZXN0KGxhbmcgfHwgXCJcIikgKSB7XG5cdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBsYW5nOiBcIiArIGxhbmcgKTtcblx0XHRcdH1cblx0XHRcdGxhbmcgPSBsYW5nLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIGVsZW1MYW5nO1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0aWYgKCAoZWxlbUxhbmcgPSBkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRcdFx0XHRlbGVtLmxhbmcgOlxuXHRcdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoXCJ4bWw6bGFuZ1wiKSB8fCBlbGVtLmdldEF0dHJpYnV0ZShcImxhbmdcIikpICkge1xuXG5cdFx0XHRcdFx0XHRlbGVtTGFuZyA9IGVsZW1MYW5nLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbUxhbmcgPT09IGxhbmcgfHwgZWxlbUxhbmcuaW5kZXhPZiggbGFuZyArIFwiLVwiICkgPT09IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IHdoaWxlICggKGVsZW0gPSBlbGVtLnBhcmVudE5vZGUpICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fTtcblx0XHR9KSxcblxuXHRcdC8vIE1pc2NlbGxhbmVvdXNcblx0XHRcInRhcmdldFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHRcdFx0cmV0dXJuIGhhc2ggJiYgaGFzaC5zbGljZSggMSApID09PSBlbGVtLmlkO1xuXHRcdH0sXG5cblx0XHRcInJvb3RcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jRWxlbTtcblx0XHR9LFxuXG5cdFx0XCJmb2N1c1wiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmICghZG9jdW1lbnQuaGFzRm9jdXMgfHwgZG9jdW1lbnQuaGFzRm9jdXMoKSkgJiYgISEoZWxlbS50eXBlIHx8IGVsZW0uaHJlZiB8fCB+ZWxlbS50YWJJbmRleCk7XG5cdFx0fSxcblxuXHRcdC8vIEJvb2xlYW4gcHJvcGVydGllc1xuXHRcdFwiZW5hYmxlZFwiOiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggZmFsc2UgKSxcblx0XHRcImRpc2FibGVkXCI6IGNyZWF0ZURpc2FibGVkUHNldWRvKCB0cnVlICksXG5cblx0XHRcImNoZWNrZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHQvLyBJbiBDU1MzLCA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIGJvdGggY2hlY2tlZCBhbmQgc2VsZWN0ZWQgZWxlbWVudHNcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXG5cdFx0XHR2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gKG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgISFlbGVtLmNoZWNrZWQpIHx8IChub2RlTmFtZSA9PT0gXCJvcHRpb25cIiAmJiAhIWVsZW0uc2VsZWN0ZWQpO1xuXHRcdH0sXG5cblx0XHRcInNlbGVjdGVkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0Ly8gQWNjZXNzaW5nIHRoaXMgcHJvcGVydHkgbWFrZXMgc2VsZWN0ZWQtYnktZGVmYXVsdFxuXHRcdFx0Ly8gb3B0aW9ucyBpbiBTYWZhcmkgd29yayBwcm9wZXJseVxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gQ29udGVudHNcblx0XHRcImVtcHR5XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNlbXB0eS1wc2V1ZG9cblx0XHRcdC8vIDplbXB0eSBpcyBuZWdhdGVkIGJ5IGVsZW1lbnQgKDEpIG9yIGNvbnRlbnQgbm9kZXMgKHRleHQ6IDM7IGNkYXRhOiA0OyBlbnRpdHkgcmVmOiA1KSxcblx0XHRcdC8vICAgYnV0IG5vdCBieSBvdGhlcnMgKGNvbW1lbnQ6IDg7IHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb246IDc7IGV0Yy4pXG5cdFx0XHQvLyBub2RlVHlwZSA8IDYgd29ya3MgYmVjYXVzZSBhdHRyaWJ1dGVzICgyKSBkbyBub3QgYXBwZWFyIGFzIGNoaWxkcmVuXG5cdFx0XHRmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlIDwgNiApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHRcInBhcmVudFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAhRXhwci5wc2V1ZG9zW1wiZW1wdHlcIl0oIGVsZW0gKTtcblx0XHR9LFxuXG5cdFx0Ly8gRWxlbWVudC9pbnB1dCB0eXBlc1xuXHRcdFwiaGVhZGVyXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJoZWFkZXIudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRcImlucHV0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJpbnB1dHMudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRcImJ1dHRvblwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIG5hbWUgPT09IFwiaW5wdXRcIiAmJiBlbGVtLnR5cGUgPT09IFwiYnV0dG9uXCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIjtcblx0XHR9LFxuXG5cdFx0XCJ0ZXh0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIGF0dHI7XG5cdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCIgJiZcblx0XHRcdFx0ZWxlbS50eXBlID09PSBcInRleHRcIiAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFPDhcblx0XHRcdFx0Ly8gTmV3IEhUTUw1IGF0dHJpYnV0ZSB2YWx1ZXMgKGUuZy4sIFwic2VhcmNoXCIpIGFwcGVhciB3aXRoIGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCJcblx0XHRcdFx0KCAoYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKFwidHlwZVwiKSkgPT0gbnVsbCB8fCBhdHRyLnRvTG93ZXJDYXNlKCkgPT09IFwidGV4dFwiICk7XG5cdFx0fSxcblxuXHRcdC8vIFBvc2l0aW9uLWluLWNvbGxlY3Rpb25cblx0XHRcImZpcnN0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gWyAwIF07XG5cdFx0fSksXG5cblx0XHRcImxhc3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gWyBsZW5ndGggLSAxIF07XG5cdFx0fSksXG5cblx0XHRcImVxXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHJldHVybiBbIGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQgXTtcblx0XHR9KSxcblxuXHRcdFwiZXZlblwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9KSxcblxuXHRcdFwib2RkXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAxO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0pLFxuXG5cdFx0XCJsdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/XG5cdFx0XHRcdGFyZ3VtZW50ICsgbGVuZ3RoIDpcblx0XHRcdFx0YXJndW1lbnQgPiBsZW5ndGggP1xuXHRcdFx0XHRcdGxlbmd0aCA6XG5cdFx0XHRcdFx0YXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7IC0taSA+PSAwOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSksXG5cblx0XHRcImd0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpID0gYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDtcblx0XHRcdGZvciAoIDsgKytpIDwgbGVuZ3RoOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSlcblx0fVxufTtcblxuRXhwci5wc2V1ZG9zW1wibnRoXCJdID0gRXhwci5wc2V1ZG9zW1wiZXFcIl07XG5cbi8vIEFkZCBidXR0b24vaW5wdXQgdHlwZSBwc2V1ZG9zXG5mb3IgKCBpIGluIHsgcmFkaW86IHRydWUsIGNoZWNrYm94OiB0cnVlLCBmaWxlOiB0cnVlLCBwYXNzd29yZDogdHJ1ZSwgaW1hZ2U6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVJbnB1dFBzZXVkbyggaSApO1xufVxuZm9yICggaSBpbiB7IHN1Ym1pdDogdHJ1ZSwgcmVzZXQ6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVCdXR0b25Qc2V1ZG8oIGkgKTtcbn1cblxuLy8gRWFzeSBBUEkgZm9yIGNyZWF0aW5nIG5ldyBzZXRGaWx0ZXJzXG5mdW5jdGlvbiBzZXRGaWx0ZXJzKCkge31cbnNldEZpbHRlcnMucHJvdG90eXBlID0gRXhwci5maWx0ZXJzID0gRXhwci5wc2V1ZG9zO1xuRXhwci5zZXRGaWx0ZXJzID0gbmV3IHNldEZpbHRlcnMoKTtcblxudG9rZW5pemUgPSBTaXp6bGUudG9rZW5pemUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIHBhcnNlT25seSApIHtcblx0dmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsXG5cdFx0c29GYXIsIGdyb3VwcywgcHJlRmlsdGVycyxcblx0XHRjYWNoZWQgPSB0b2tlbkNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCBjYWNoZWQgKSB7XG5cdFx0cmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTtcblx0fVxuXG5cdHNvRmFyID0gc2VsZWN0b3I7XG5cdGdyb3VwcyA9IFtdO1xuXHRwcmVGaWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7XG5cblx0d2hpbGUgKCBzb0ZhciApIHtcblxuXHRcdC8vIENvbW1hIGFuZCBmaXJzdCBydW5cblx0XHRpZiAoICFtYXRjaGVkIHx8IChtYXRjaCA9IHJjb21tYS5leGVjKCBzb0ZhciApKSApIHtcblx0XHRcdGlmICggbWF0Y2ggKSB7XG5cdFx0XHRcdC8vIERvbid0IGNvbnN1bWUgdHJhaWxpbmcgY29tbWFzIGFzIHZhbGlkXG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoWzBdLmxlbmd0aCApIHx8IHNvRmFyO1xuXHRcdFx0fVxuXHRcdFx0Z3JvdXBzLnB1c2goICh0b2tlbnMgPSBbXSkgKTtcblx0XHR9XG5cblx0XHRtYXRjaGVkID0gZmFsc2U7XG5cblx0XHQvLyBDb21iaW5hdG9yc1xuXHRcdGlmICggKG1hdGNoID0gcmNvbWJpbmF0b3JzLmV4ZWMoIHNvRmFyICkpICkge1xuXHRcdFx0bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7XG5cdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXHRcdFx0XHQvLyBDYXN0IGRlc2NlbmRhbnQgY29tYmluYXRvcnMgdG8gc3BhY2Vcblx0XHRcdFx0dHlwZTogbWF0Y2hbMF0ucmVwbGFjZSggcnRyaW0sIFwiIFwiIClcblx0XHRcdH0pO1xuXHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHR9XG5cblx0XHQvLyBGaWx0ZXJzXG5cdFx0Zm9yICggdHlwZSBpbiBFeHByLmZpbHRlciApIHtcblx0XHRcdGlmICggKG1hdGNoID0gbWF0Y2hFeHByWyB0eXBlIF0uZXhlYyggc29GYXIgKSkgJiYgKCFwcmVGaWx0ZXJzWyB0eXBlIF0gfHxcblx0XHRcdFx0KG1hdGNoID0gcHJlRmlsdGVyc1sgdHlwZSBdKCBtYXRjaCApKSkgKSB7XG5cdFx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cdFx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0XHRtYXRjaGVzOiBtYXRjaFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoICFtYXRjaGVkICkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGludmFsaWQgZXhjZXNzXG5cdC8vIGlmIHdlJ3JlIGp1c3QgcGFyc2luZ1xuXHQvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJldHVybiB0b2tlbnNcblx0cmV0dXJuIHBhcnNlT25seSA/XG5cdFx0c29GYXIubGVuZ3RoIDpcblx0XHRzb0ZhciA/XG5cdFx0XHRTaXp6bGUuZXJyb3IoIHNlbGVjdG9yICkgOlxuXHRcdFx0Ly8gQ2FjaGUgdGhlIHRva2Vuc1xuXHRcdFx0dG9rZW5DYWNoZSggc2VsZWN0b3IsIGdyb3VwcyApLnNsaWNlKCAwICk7XG59O1xuXG5mdW5jdGlvbiB0b1NlbGVjdG9yKCB0b2tlbnMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdHNlbGVjdG9yID0gXCJcIjtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0c2VsZWN0b3IgKz0gdG9rZW5zW2ldLnZhbHVlO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rvcjtcbn1cblxuZnVuY3Rpb24gYWRkQ29tYmluYXRvciggbWF0Y2hlciwgY29tYmluYXRvciwgYmFzZSApIHtcblx0dmFyIGRpciA9IGNvbWJpbmF0b3IuZGlyLFxuXHRcdHNraXAgPSBjb21iaW5hdG9yLm5leHQsXG5cdFx0a2V5ID0gc2tpcCB8fCBkaXIsXG5cdFx0Y2hlY2tOb25FbGVtZW50cyA9IGJhc2UgJiYga2V5ID09PSBcInBhcmVudE5vZGVcIixcblx0XHRkb25lTmFtZSA9IGRvbmUrKztcblxuXHRyZXR1cm4gY29tYmluYXRvci5maXJzdCA/XG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdHJldHVybiBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gOlxuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBhbGwgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRzXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciBvbGRDYWNoZSwgdW5pcXVlQ2FjaGUsIG91dGVyQ2FjaGUsXG5cdFx0XHRcdG5ld0NhY2hlID0gWyBkaXJydW5zLCBkb25lTmFtZSBdO1xuXG5cdFx0XHQvLyBXZSBjYW4ndCBzZXQgYXJiaXRyYXJ5IGRhdGEgb24gWE1MIG5vZGVzLCBzbyB0aGV5IGRvbid0IGJlbmVmaXQgZnJvbSBjb21iaW5hdG9yIGNhY2hpbmdcblx0XHRcdGlmICggeG1sICkge1xuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IGVsZW1bIGV4cGFuZG8gXSB8fCAoZWxlbVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdIHx8IChvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdGlmICggc2tpcCAmJiBza2lwID09PSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdGVsZW0gPSBlbGVtWyBkaXIgXSB8fCBlbGVtO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICggKG9sZENhY2hlID0gdW5pcXVlQ2FjaGVbIGtleSBdKSAmJlxuXHRcdFx0XHRcdFx0XHRvbGRDYWNoZVsgMCBdID09PSBkaXJydW5zICYmIG9sZENhY2hlWyAxIF0gPT09IGRvbmVOYW1lICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFzc2lnbiB0byBuZXdDYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdHJldHVybiAobmV3Q2FjaGVbIDIgXSA9IG9sZENhY2hlWyAyIF0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gUmV1c2UgbmV3Y2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsga2V5IF0gPSBuZXdDYWNoZTtcblxuXHRcdFx0XHRcdFx0XHQvLyBBIG1hdGNoIG1lYW5zIHdlJ3JlIGRvbmU7IGEgZmFpbCBtZWFucyB3ZSBoYXZlIHRvIGtlZXAgY2hlY2tpbmdcblx0XHRcdFx0XHRcdFx0aWYgKCAobmV3Q2FjaGVbIDIgXSA9IG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG59XG5cbmZ1bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApIHtcblx0cmV0dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDEgP1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgaSA9IG1hdGNoZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoICFtYXRjaGVyc1tpXSggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IDpcblx0XHRtYXRjaGVyc1swXTtcbn1cblxuZnVuY3Rpb24gbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gY29udGV4dHMubGVuZ3RoO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0c1tpXSwgcmVzdWx0cyApO1xuXHR9XG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRlciwgY29udGV4dCwgeG1sICkge1xuXHR2YXIgZWxlbSxcblx0XHRuZXdVbm1hdGNoZWQgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsZW4gPSB1bm1hdGNoZWQubGVuZ3RoLFxuXHRcdG1hcHBlZCA9IG1hcCAhPSBudWxsO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkge1xuXHRcdFx0aWYgKCAhZmlsdGVyIHx8IGZpbHRlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdG5ld1VubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdGlmICggbWFwcGVkICkge1xuXHRcdFx0XHRcdG1hcC5wdXNoKCBpICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbmV3VW5tYXRjaGVkO1xufVxuXG5mdW5jdGlvbiBzZXRNYXRjaGVyKCBwcmVGaWx0ZXIsIHNlbGVjdG9yLCBtYXRjaGVyLCBwb3N0RmlsdGVyLCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKSB7XG5cdGlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZpbHRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaWx0ZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmlsdGVyICk7XG5cdH1cblx0aWYgKCBwb3N0RmluZGVyICYmICFwb3N0RmluZGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbmRlciA9IHNldE1hdGNoZXIoIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApO1xuXHR9XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIHJlc3VsdHMsIGNvbnRleHQsIHhtbCApIHtcblx0XHR2YXIgdGVtcCwgaSwgZWxlbSxcblx0XHRcdHByZU1hcCA9IFtdLFxuXHRcdFx0cG9zdE1hcCA9IFtdLFxuXHRcdFx0cHJlZXhpc3RpbmcgPSByZXN1bHRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gR2V0IGluaXRpYWwgZWxlbWVudHMgZnJvbSBzZWVkIG9yIGNvbnRleHRcblx0XHRcdGVsZW1zID0gc2VlZCB8fCBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciB8fCBcIipcIiwgY29udGV4dC5ub2RlVHlwZSA/IFsgY29udGV4dCBdIDogY29udGV4dCwgW10gKSxcblxuXHRcdFx0Ly8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uXG5cdFx0XHRtYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID9cblx0XHRcdFx0Y29uZGVuc2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRlbGVtcyxcblxuXHRcdFx0bWF0Y2hlck91dCA9IG1hdGNoZXIgP1xuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlciBvciBwcmVleGlzdGluZyByZXN1bHRzLFxuXHRcdFx0XHRwb3N0RmluZGVyIHx8ICggc2VlZCA/IHByZUZpbHRlciA6IHByZWV4aXN0aW5nIHx8IHBvc3RGaWx0ZXIgKSA/XG5cblx0XHRcdFx0XHQvLyAuLi5pbnRlcm1lZGlhdGUgcHJvY2Vzc2luZyBpcyBuZWNlc3Nhcnlcblx0XHRcdFx0XHRbXSA6XG5cblx0XHRcdFx0XHQvLyAuLi5vdGhlcndpc2UgdXNlIHJlc3VsdHMgZGlyZWN0bHlcblx0XHRcdFx0XHRyZXN1bHRzIDpcblx0XHRcdFx0bWF0Y2hlckluO1xuXG5cdFx0Ly8gRmluZCBwcmltYXJ5IG1hdGNoZXNcblx0XHRpZiAoIG1hdGNoZXIgKSB7XG5cdFx0XHRtYXRjaGVyKCBtYXRjaGVySW4sIG1hdGNoZXJPdXQsIGNvbnRleHQsIHhtbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHBvc3RGaWx0ZXJcblx0XHRpZiAoIHBvc3RGaWx0ZXIgKSB7XG5cdFx0XHR0ZW1wID0gY29uZGVuc2UoIG1hdGNoZXJPdXQsIHBvc3RNYXAgKTtcblx0XHRcdHBvc3RGaWx0ZXIoIHRlbXAsIFtdLCBjb250ZXh0LCB4bWwgKTtcblxuXHRcdFx0Ly8gVW4tbWF0Y2ggZmFpbGluZyBlbGVtZW50cyBieSBtb3ZpbmcgdGhlbSBiYWNrIHRvIG1hdGNoZXJJblxuXHRcdFx0aSA9IHRlbXAubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggKGVsZW0gPSB0ZW1wW2ldKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyT3V0WyBwb3N0TWFwW2ldIF0gPSAhKG1hdGNoZXJJblsgcG9zdE1hcFtpXSBdID0gZWxlbSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgfHwgcHJlRmlsdGVyICkge1xuXHRcdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cdFx0XHRcdFx0Ly8gR2V0IHRoZSBmaW5hbCBtYXRjaGVyT3V0IGJ5IGNvbmRlbnNpbmcgdGhpcyBpbnRlcm1lZGlhdGUgaW50byBwb3N0RmluZGVyIGNvbnRleHRzXG5cdFx0XHRcdFx0dGVtcCA9IFtdO1xuXHRcdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKGVsZW0gPSBtYXRjaGVyT3V0W2ldKSApIHtcblx0XHRcdFx0XHRcdFx0Ly8gUmVzdG9yZSBtYXRjaGVySW4gc2luY2UgZWxlbSBpcyBub3QgeWV0IGEgZmluYWwgbWF0Y2hcblx0XHRcdFx0XHRcdFx0dGVtcC5wdXNoKCAobWF0Y2hlckluW2ldID0gZWxlbSkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgKG1hdGNoZXJPdXQgPSBbXSksIHRlbXAsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTW92ZSBtYXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJvbml6ZWRcblx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRpZiAoIChlbGVtID0gbWF0Y2hlck91dFtpXSkgJiZcblx0XHRcdFx0XHRcdCh0ZW1wID0gcG9zdEZpbmRlciA/IGluZGV4T2YoIHNlZWQsIGVsZW0gKSA6IHByZU1hcFtpXSkgPiAtMSApIHtcblxuXHRcdFx0XHRcdFx0c2VlZFt0ZW1wXSA9ICEocmVzdWx0c1t0ZW1wXSA9IGVsZW0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gQWRkIGVsZW1lbnRzIHRvIHJlc3VsdHMsIHRocm91Z2ggcG9zdEZpbmRlciBpZiBkZWZpbmVkXG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXJPdXQgPSBjb25kZW5zZShcblx0XHRcdFx0bWF0Y2hlck91dCA9PT0gcmVzdWx0cyA/XG5cdFx0XHRcdFx0bWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVyT3V0Lmxlbmd0aCApIDpcblx0XHRcdFx0XHRtYXRjaGVyT3V0XG5cdFx0XHQpO1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXHRcdFx0XHRwb3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zICkge1xuXHR2YXIgY2hlY2tDb250ZXh0LCBtYXRjaGVyLCBqLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0bGVhZGluZ1JlbGF0aXZlID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWzBdLnR5cGUgXSxcblx0XHRpbXBsaWNpdFJlbGF0aXZlID0gbGVhZGluZ1JlbGF0aXZlIHx8IEV4cHIucmVsYXRpdmVbXCIgXCJdLFxuXHRcdGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCxcblxuXHRcdC8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRoYXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpXG5cdFx0bWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0O1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaEFueUNvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBpbmRleE9mKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xO1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaGVycyA9IFsgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciByZXQgPSAoICFsZWFkaW5nUmVsYXRpdmUgJiYgKCB4bWwgfHwgY29udGV4dCAhPT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKFxuXHRcdFx0XHQoY2hlY2tDb250ZXh0ID0gY29udGV4dCkubm9kZVR5cGUgP1xuXHRcdFx0XHRcdG1hdGNoQ29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRcdG1hdGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgKTtcblx0XHRcdC8vIEF2b2lkIGhhbmdpbmcgb250byBlbGVtZW50IChpc3N1ZSAjMjk5KVxuXHRcdFx0Y2hlY2tDb250ZXh0ID0gbnVsbDtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fSBdO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKG1hdGNoZXIgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbaV0udHlwZSBdKSApIHtcblx0XHRcdG1hdGNoZXJzID0gWyBhZGRDb21iaW5hdG9yKGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyKSBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyID0gRXhwci5maWx0ZXJbIHRva2Vuc1tpXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1tpXS5tYXRjaGVzICk7XG5cblx0XHRcdC8vIFJldHVybiBzcGVjaWFsIHVwb24gc2VlaW5nIGEgcG9zaXRpb25hbCBtYXRjaGVyXG5cdFx0XHRpZiAoIG1hdGNoZXJbIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0Ly8gRmluZCB0aGUgbmV4dCByZWxhdGl2ZSBvcGVyYXRvciAoaWYgYW55KSBmb3IgcHJvcGVyIGhhbmRsaW5nXG5cdFx0XHRcdGogPSArK2k7XG5cdFx0XHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0XHRcdGlmICggRXhwci5yZWxhdGl2ZVsgdG9rZW5zW2pdLnR5cGUgXSApIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc2V0TWF0Y2hlcihcblx0XHRcdFx0XHRpID4gMSAmJiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSxcblx0XHRcdFx0XHRpID4gMSAmJiB0b1NlbGVjdG9yKFxuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlIHByZWNlZGluZyB0b2tlbiB3YXMgYSBkZXNjZW5kYW50IGNvbWJpbmF0b3IsIGluc2VydCBhbiBpbXBsaWNpdCBhbnktZWxlbWVudCBgKmBcblx0XHRcdFx0XHRcdHRva2Vucy5zbGljZSggMCwgaSAtIDEgKS5jb25jYXQoeyB2YWx1ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUgPT09IFwiIFwiID8gXCIqXCIgOiBcIlwiIH0pXG5cdFx0XHRcdFx0KS5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICksXG5cdFx0XHRcdFx0bWF0Y2hlcixcblx0XHRcdFx0XHRpIDwgaiAmJiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zLnNsaWNlKCBpLCBqICkgKSxcblx0XHRcdFx0XHRqIDwgbGVuICYmIG1hdGNoZXJGcm9tVG9rZW5zKCAodG9rZW5zID0gdG9rZW5zLnNsaWNlKCBqICkpICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlcnMucHVzaCggbWF0Y2hlciApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkge1xuXHR2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdGJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdHN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9uKCBzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIG91dGVybW9zdCApIHtcblx0XHRcdHZhciBlbGVtLCBqLCBtYXRjaGVyLFxuXHRcdFx0XHRtYXRjaGVkQ291bnQgPSAwLFxuXHRcdFx0XHRpID0gXCIwXCIsXG5cdFx0XHRcdHVubWF0Y2hlZCA9IHNlZWQgJiYgW10sXG5cdFx0XHRcdHNldE1hdGNoZWQgPSBbXSxcblx0XHRcdFx0Y29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsXG5cdFx0XHRcdC8vIFdlIG11c3QgYWx3YXlzIGhhdmUgZWl0aGVyIHNlZWQgZWxlbWVudHMgb3Igb3V0ZXJtb3N0IGNvbnRleHRcblx0XHRcdFx0ZWxlbXMgPSBzZWVkIHx8IGJ5RWxlbWVudCAmJiBFeHByLmZpbmRbXCJUQUdcIl0oIFwiKlwiLCBvdXRlcm1vc3QgKSxcblx0XHRcdFx0Ly8gVXNlIGludGVnZXIgZGlycnVucyBpZmYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNoZXJcblx0XHRcdFx0ZGlycnVuc1VuaXF1ZSA9IChkaXJydW5zICs9IGNvbnRleHRCYWNrdXAgPT0gbnVsbCA/IDEgOiBNYXRoLnJhbmRvbSgpIHx8IDAuMSksXG5cdFx0XHRcdGxlbiA9IGVsZW1zLmxlbmd0aDtcblxuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ID09PSBkb2N1bWVudCB8fCBjb250ZXh0IHx8IG91dGVybW9zdDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHNcblx0XHRcdC8vIFN1cHBvcnQ6IElFPDksIFNhZmFyaVxuXHRcdFx0Ly8gVG9sZXJhdGUgTm9kZUxpc3QgcHJvcGVydGllcyAoSUU6IFwibGVuZ3RoXCI7IFNhZmFyaTogPG51bWJlcj4pIG1hdGNoaW5nIGVsZW1lbnRzIGJ5IGlkXG5cdFx0XHRmb3IgKCA7IGkgIT09IGxlbiAmJiAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggYnlFbGVtZW50ICYmIGVsZW0gKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0aWYgKCAhY29udGV4dCAmJiBlbGVtLm93bmVyRG9jdW1lbnQgIT09IGRvY3VtZW50ICkge1xuXHRcdFx0XHRcdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0XHRcdFx0XHRcdHhtbCA9ICFkb2N1bWVudElzSFRNTDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0d2hpbGUgKCAobWF0Y2hlciA9IGVsZW1lbnRNYXRjaGVyc1tqKytdKSApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCB8fCBkb2N1bWVudCwgeG1sKSApIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFRyYWNrIHVubWF0Y2hlZCBlbGVtZW50cyBmb3Igc2V0IGZpbHRlcnNcblx0XHRcdFx0aWYgKCBieVNldCApIHtcblx0XHRcdFx0XHQvLyBUaGV5IHdpbGwgaGF2ZSBnb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIG1hdGNoZXJzXG5cdFx0XHRcdFx0aWYgKCAoZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0pICkge1xuXHRcdFx0XHRcdFx0bWF0Y2hlZENvdW50LS07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gTGVuZ3RoZW4gdGhlIGFycmF5IGZvciBldmVyeSBlbGVtZW50LCBtYXRjaGVkIG9yIG5vdFxuXHRcdFx0XHRcdGlmICggc2VlZCApIHtcblx0XHRcdFx0XHRcdHVubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIGBpYCBpcyBub3cgdGhlIGNvdW50IG9mIGVsZW1lbnRzIHZpc2l0ZWQgYWJvdmUsIGFuZCBhZGRpbmcgaXQgdG8gYG1hdGNoZWRDb3VudGBcblx0XHRcdC8vIG1ha2VzIHRoZSBsYXR0ZXIgbm9ubmVnYXRpdmUuXG5cdFx0XHRtYXRjaGVkQ291bnQgKz0gaTtcblxuXHRcdFx0Ly8gQXBwbHkgc2V0IGZpbHRlcnMgdG8gdW5tYXRjaGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBOT1RFOiBUaGlzIGNhbiBiZSBza2lwcGVkIGlmIHRoZXJlIGFyZSBubyB1bm1hdGNoZWQgZWxlbWVudHMgKGkuZS4sIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBlcXVhbHMgYGlgKSwgdW5sZXNzIHdlIGRpZG4ndCB2aXNpdCBfYW55XyBlbGVtZW50cyBpbiB0aGUgYWJvdmUgbG9vcCBiZWNhdXNlIHdlIGhhdmVcblx0XHRcdC8vIG5vIGVsZW1lbnQgbWF0Y2hlcnMgYW5kIG5vIHNlZWQuXG5cdFx0XHQvLyBJbmNyZW1lbnRpbmcgYW4gaW5pdGlhbGx5LXN0cmluZyBcIjBcIiBgaWAgYWxsb3dzIGBpYCB0byByZW1haW4gYSBzdHJpbmcgb25seSBpbiB0aGF0XG5cdFx0XHQvLyBjYXNlLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBhIFwiMDBcIiBgbWF0Y2hlZENvdW50YCB0aGF0IGRpZmZlcnMgZnJvbSBgaWAgYnV0IGlzIGFsc29cblx0XHRcdC8vIG51bWVyaWNhbGx5IHplcm8uXG5cdFx0XHRpZiAoIGJ5U2V0ICYmIGkgIT09IG1hdGNoZWRDb3VudCApIHtcblx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdHdoaWxlICggKG1hdGNoZXIgPSBzZXRNYXRjaGVyc1tqKytdKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyKCB1bm1hdGNoZWQsIHNldE1hdGNoZWQsIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0XHRcdC8vIFJlaW50ZWdyYXRlIGVsZW1lbnQgbWF0Y2hlcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIHNvcnRpbmdcblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRDb3VudCA+IDAgKSB7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCAhKHVubWF0Y2hlZFtpXSB8fCBzZXRNYXRjaGVkW2ldKSApIHtcblx0XHRcdFx0XHRcdFx0XHRzZXRNYXRjaGVkW2ldID0gcG9wLmNhbGwoIHJlc3VsdHMgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIERpc2NhcmQgaW5kZXggcGxhY2Vob2xkZXIgdmFsdWVzIHRvIGdldCBvbmx5IGFjdHVhbCBtYXRjaGVzXG5cdFx0XHRcdFx0c2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVkICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBZGQgbWF0Y2hlcyB0byByZXN1bHRzXG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNldE1hdGNoZWQgKTtcblxuXHRcdFx0XHQvLyBTZWVkbGVzcyBzZXQgbWF0Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVsYXRlIHNvcnRpbmdcblx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgJiYgIXNlZWQgJiYgc2V0TWF0Y2hlZC5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0KCBtYXRjaGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7XG5cblx0XHRcdFx0XHRTaXp6bGUudW5pcXVlU29ydCggcmVzdWx0cyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIE92ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBnbG9iYWxzIGJ5IG5lc3RlZCBtYXRjaGVyc1xuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dEJhY2t1cDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVubWF0Y2hlZDtcblx0XHR9O1xuXG5cdHJldHVybiBieVNldCA/XG5cdFx0bWFya0Z1bmN0aW9uKCBzdXBlck1hdGNoZXIgKSA6XG5cdFx0c3VwZXJNYXRjaGVyO1xufVxuXG5jb21waWxlID0gU2l6emxlLmNvbXBpbGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIG1hdGNoIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkge1xuXHR2YXIgaSxcblx0XHRzZXRNYXRjaGVycyA9IFtdLFxuXHRcdGVsZW1lbnRNYXRjaGVycyA9IFtdLFxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoICFjYWNoZWQgKSB7XG5cdFx0Ly8gR2VuZXJhdGUgYSBmdW5jdGlvbiBvZiByZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFjaCBlbGVtZW50XG5cdFx0aWYgKCAhbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaCA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdH1cblx0XHRpID0gbWF0Y2gubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0Y2FjaGVkID0gbWF0Y2hlckZyb21Ub2tlbnMoIG1hdGNoW2ldICk7XG5cdFx0XHRpZiAoIGNhY2hlZFsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRzZXRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWNoZSB0aGUgY29tcGlsZWQgZnVuY3Rpb25cblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlKCBzZWxlY3RvciwgbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkgKTtcblxuXHRcdC8vIFNhdmUgc2VsZWN0b3IgYW5kIHRva2VuaXphdGlvblxuXHRcdGNhY2hlZC5zZWxlY3RvciA9IHNlbGVjdG9yO1xuXHR9XG5cdHJldHVybiBjYWNoZWQ7XG59O1xuXG4vKipcbiAqIEEgbG93LWxldmVsIHNlbGVjdGlvbiBmdW5jdGlvbiB0aGF0IHdvcmtzIHdpdGggU2l6emxlJ3MgY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBzZWxlY3RvciBBIHNlbGVjdG9yIG9yIGEgcHJlLWNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb24gYnVpbHQgd2l0aCBTaXp6bGUuY29tcGlsZVxuICogQHBhcmFtIHtFbGVtZW50fSBjb250ZXh0XG4gKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0c11cbiAqIEBwYXJhbSB7QXJyYXl9IFtzZWVkXSBBIHNldCBvZiBlbGVtZW50cyB0byBtYXRjaCBhZ2FpbnN0XG4gKi9cbnNlbGVjdCA9IFNpenpsZS5zZWxlY3QgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBpLCB0b2tlbnMsIHRva2VuLCB0eXBlLCBmaW5kLFxuXHRcdGNvbXBpbGVkID0gdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgc2VsZWN0b3IsXG5cdFx0bWF0Y2ggPSAhc2VlZCAmJiB0b2tlbml6ZSggKHNlbGVjdG9yID0gY29tcGlsZWQuc2VsZWN0b3IgfHwgc2VsZWN0b3IpICk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gVHJ5IHRvIG1pbmltaXplIG9wZXJhdGlvbnMgaWYgdGhlcmUgaXMgb25seSBvbmUgc2VsZWN0b3IgaW4gdGhlIGxpc3QgYW5kIG5vIHNlZWRcblx0Ly8gKHRoZSBsYXR0ZXIgb2Ygd2hpY2ggZ3VhcmFudGVlcyB1cyBjb250ZXh0KVxuXHRpZiAoIG1hdGNoLmxlbmd0aCA9PT0gMSApIHtcblxuXHRcdC8vIFJlZHVjZSBjb250ZXh0IGlmIHRoZSBsZWFkaW5nIGNvbXBvdW5kIHNlbGVjdG9yIGlzIGFuIElEXG5cdFx0dG9rZW5zID0gbWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCApO1xuXHRcdGlmICggdG9rZW5zLmxlbmd0aCA+IDIgJiYgKHRva2VuID0gdG9rZW5zWzBdKS50eXBlID09PSBcIklEXCIgJiZcblx0XHRcdFx0Y29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBkb2N1bWVudElzSFRNTCAmJiBFeHByLnJlbGF0aXZlWyB0b2tlbnNbMV0udHlwZSBdICkge1xuXG5cdFx0XHRjb250ZXh0ID0gKCBFeHByLmZpbmRbXCJJRFwiXSggdG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKHJ1bmVzY2FwZSwgZnVuZXNjYXBlKSwgY29udGV4dCApIHx8IFtdIClbMF07XG5cdFx0XHRpZiAoICFjb250ZXh0ICkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0Ly8gUHJlY29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBzdGlsbCB2ZXJpZnkgYW5jZXN0cnksIHNvIHN0ZXAgdXAgYSBsZXZlbFxuXHRcdFx0fSBlbHNlIGlmICggY29tcGlsZWQgKSB7XG5cdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoIHRva2Vucy5zaGlmdCgpLnZhbHVlLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZldGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmdcblx0XHRpID0gbWF0Y2hFeHByW1wibmVlZHNDb250ZXh0XCJdLnRlc3QoIHNlbGVjdG9yICkgPyAwIDogdG9rZW5zLmxlbmd0aDtcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdHRva2VuID0gdG9rZW5zW2ldO1xuXG5cdFx0XHQvLyBBYm9ydCBpZiB3ZSBoaXQgYSBjb21iaW5hdG9yXG5cdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbICh0eXBlID0gdG9rZW4udHlwZSkgXSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIChmaW5kID0gRXhwci5maW5kWyB0eXBlIF0pICkge1xuXHRcdFx0XHQvLyBTZWFyY2gsIGV4cGFuZGluZyBjb250ZXh0IGZvciBsZWFkaW5nIHNpYmxpbmcgY29tYmluYXRvcnNcblx0XHRcdFx0aWYgKCAoc2VlZCA9IGZpbmQoXG5cdFx0XHRcdFx0dG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLFxuXHRcdFx0XHRcdHJzaWJsaW5nLnRlc3QoIHRva2Vuc1swXS50eXBlICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcblx0XHRcdFx0KSkgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiBzZWVkIGlzIGVtcHR5IG9yIG5vIHRva2VucyByZW1haW4sIHdlIGNhbiByZXR1cm4gZWFybHlcblx0XHRcdFx0XHR0b2tlbnMuc3BsaWNlKCBpLCAxICk7XG5cdFx0XHRcdFx0c2VsZWN0b3IgPSBzZWVkLmxlbmd0aCAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKTtcblx0XHRcdFx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNlZWQgKTtcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ29tcGlsZSBhbmQgZXhlY3V0ZSBhIGZpbHRlcmluZyBmdW5jdGlvbiBpZiBvbmUgaXMgbm90IHByb3ZpZGVkXG5cdC8vIFByb3ZpZGUgYG1hdGNoYCB0byBhdm9pZCByZXRva2VuaXphdGlvbiBpZiB3ZSBtb2RpZmllZCB0aGUgc2VsZWN0b3IgYWJvdmVcblx0KCBjb21waWxlZCB8fCBjb21waWxlKCBzZWxlY3RvciwgbWF0Y2ggKSApKFxuXHRcdHNlZWQsXG5cdFx0Y29udGV4dCxcblx0XHQhZG9jdW1lbnRJc0hUTUwsXG5cdFx0cmVzdWx0cyxcblx0XHQhY29udGV4dCB8fCByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0XG5cdCk7XG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLy8gT25lLXRpbWUgYXNzaWdubWVudHNcblxuLy8gU29ydCBzdGFiaWxpdHlcbnN1cHBvcnQuc29ydFN0YWJsZSA9IGV4cGFuZG8uc3BsaXQoXCJcIikuc29ydCggc29ydE9yZGVyICkuam9pbihcIlwiKSA9PT0gZXhwYW5kbztcblxuLy8gU3VwcG9ydDogQ2hyb21lIDE0LTM1K1xuLy8gQWx3YXlzIGFzc3VtZSBkdXBsaWNhdGVzIGlmIHRoZXkgYXJlbid0IHBhc3NlZCB0byB0aGUgY29tcGFyaXNvbiBmdW5jdGlvblxuc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzID0gISFoYXNEdXBsaWNhdGU7XG5cbi8vIEluaXRpYWxpemUgYWdhaW5zdCB0aGUgZGVmYXVsdCBkb2N1bWVudFxuc2V0RG9jdW1lbnQoKTtcblxuLy8gU3VwcG9ydDogV2Via2l0PDUzNy4zMiAtIFNhZmFyaSA2LjAuMy9DaHJvbWUgMjUgKGZpeGVkIGluIENocm9tZSAyNylcbi8vIERldGFjaGVkIG5vZGVzIGNvbmZvdW5kaW5nbHkgZm9sbG93ICplYWNoIG90aGVyKlxuc3VwcG9ydC5zb3J0RGV0YWNoZWQgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHQvLyBTaG91bGQgcmV0dXJuIDEsIGJ1dCByZXR1cm5zIDQgKGZvbGxvd2luZylcblx0cmV0dXJuIGVsLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZmllbGRzZXRcIikgKSAmIDE7XG59KTtcblxuLy8gU3VwcG9ydDogSUU8OFxuLy8gUHJldmVudCBhdHRyaWJ1dGUvcHJvcGVydHkgXCJpbnRlcnBvbGF0aW9uXCJcbi8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzY0MjklMjhWUy44NSUyOS5hc3B4XG5pZiAoICFhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRlbC5pbm5lckhUTUwgPSBcIjxhIGhyZWY9JyMnPjwvYT5cIjtcblx0cmV0dXJuIGVsLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSA9PT0gXCIjXCIgO1xufSkgKSB7XG5cdGFkZEhhbmRsZSggXCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoXCIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpID09PSBcInR5cGVcIiA/IDEgOiAyICk7XG5cdFx0fVxuXHR9KTtcbn1cblxuLy8gU3VwcG9ydDogSUU8OVxuLy8gVXNlIGRlZmF1bHRWYWx1ZSBpbiBwbGFjZSBvZiBnZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKVxuaWYgKCAhc3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRlbC5pbm5lckhUTUwgPSBcIjxpbnB1dC8+XCI7XG5cdGVsLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCBcInZhbHVlXCIsIFwiXCIgKTtcblx0cmV0dXJuIGVsLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCBcInZhbHVlXCIgKSA9PT0gXCJcIjtcbn0pICkge1xuXHRhZGRIYW5kbGUoIFwidmFsdWVcIiwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdGlmICggIWlzWE1MICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGVmYXVsdFZhbHVlO1xuXHRcdH1cblx0fSk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBnZXRBdHRyaWJ1dGVOb2RlIHRvIGZldGNoIGJvb2xlYW5zIHdoZW4gZ2V0QXR0cmlidXRlIGxpZXNcbmlmICggIWFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdHJldHVybiBlbC5nZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSA9PSBudWxsO1xufSkgKSB7XG5cdGFkZEhhbmRsZSggYm9vbGVhbnMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgdmFsO1xuXHRcdGlmICggIWlzWE1MICkge1xuXHRcdFx0cmV0dXJuIGVsZW1bIG5hbWUgXSA9PT0gdHJ1ZSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6XG5cdFx0XHRcdFx0KHZhbCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xuXHRcdH1cblx0fSk7XG59XG5cbnJldHVybiBTaXp6bGU7XG5cbn0pKCB3aW5kb3cgKTtcblxuXG5cbmpRdWVyeS5maW5kID0gU2l6emxlO1xualF1ZXJ5LmV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzO1xuXG4vLyBEZXByZWNhdGVkXG5qUXVlcnkuZXhwclsgXCI6XCIgXSA9IGpRdWVyeS5leHByLnBzZXVkb3M7XG5qUXVlcnkudW5pcXVlU29ydCA9IGpRdWVyeS51bmlxdWUgPSBTaXp6bGUudW5pcXVlU29ydDtcbmpRdWVyeS50ZXh0ID0gU2l6emxlLmdldFRleHQ7XG5qUXVlcnkuaXNYTUxEb2MgPSBTaXp6bGUuaXNYTUw7XG5qUXVlcnkuY29udGFpbnMgPSBTaXp6bGUuY29udGFpbnM7XG5qUXVlcnkuZXNjYXBlU2VsZWN0b3IgPSBTaXp6bGUuZXNjYXBlO1xuXG5cblxuXG52YXIgZGlyID0gZnVuY3Rpb24oIGVsZW0sIGRpciwgdW50aWwgKSB7XG5cdHZhciBtYXRjaGVkID0gW10sXG5cdFx0dHJ1bmNhdGUgPSB1bnRpbCAhPT0gdW5kZWZpbmVkO1xuXG5cdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSAmJiBlbGVtLm5vZGVUeXBlICE9PSA5ICkge1xuXHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGlmICggdHJ1bmNhdGUgJiYgalF1ZXJ5KCBlbGVtICkuaXMoIHVudGlsICkgKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgc2libGluZ3MgPSBmdW5jdGlvbiggbiwgZWxlbSApIHtcblx0dmFyIG1hdGNoZWQgPSBbXTtcblxuXHRmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkge1xuXHRcdGlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtICkge1xuXHRcdFx0bWF0Y2hlZC5wdXNoKCBuICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1hdGNoZWQ7XG59O1xuXG5cbnZhciBybmVlZHNDb250ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0O1xuXG5cblxuZnVuY3Rpb24gbm9kZU5hbWUoIGVsZW0sIG5hbWUgKSB7XG5cbiAgcmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbn07XG52YXIgcnNpbmdsZVRhZyA9ICggL148KFthLXpdW15cXC9cXDA+OlxceDIwXFx0XFxyXFxuXFxmXSopW1xceDIwXFx0XFxyXFxuXFxmXSpcXC8/Pig/OjxcXC9cXDE+fCkkL2kgKTtcblxuXG5cbi8vIEltcGxlbWVudCB0aGUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90XG5mdW5jdGlvbiB3aW5ub3coIGVsZW1lbnRzLCBxdWFsaWZpZXIsIG5vdCApIHtcblx0aWYgKCBpc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiAhIXF1YWxpZmllci5jYWxsKCBlbGVtLCBpLCBlbGVtICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBTaW5nbGUgZWxlbWVudFxuXHRpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGVsZW0gPT09IHF1YWxpZmllciApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gQXJyYXlsaWtlIG9mIGVsZW1lbnRzIChqUXVlcnksIGFyZ3VtZW50cywgQXJyYXkpXG5cdGlmICggdHlwZW9mIHF1YWxpZmllciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGluZGV4T2YuY2FsbCggcXVhbGlmaWVyLCBlbGVtICkgPiAtMSApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gRmlsdGVyZWQgZGlyZWN0bHkgZm9yIGJvdGggc2ltcGxlIGFuZCBjb21wbGV4IHNlbGVjdG9yc1xuXHRyZXR1cm4galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBlbGVtZW50cywgbm90ICk7XG59XG5cbmpRdWVyeS5maWx0ZXIgPSBmdW5jdGlvbiggZXhwciwgZWxlbXMsIG5vdCApIHtcblx0dmFyIGVsZW0gPSBlbGVtc1sgMCBdO1xuXG5cdGlmICggbm90ICkge1xuXHRcdGV4cHIgPSBcIjpub3QoXCIgKyBleHByICsgXCIpXCI7XG5cdH1cblxuXHRpZiAoIGVsZW1zLmxlbmd0aCA9PT0gMSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGVsZW0sIGV4cHIgKSA/IFsgZWxlbSBdIDogW107XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlcyggZXhwciwgalF1ZXJ5LmdyZXAoIGVsZW1zLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTtcblx0fSApICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgaSwgcmV0LFxuXHRcdFx0bGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRzZWxmID0gdGhpcztcblxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkoIHNlbGVjdG9yICkuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlzICkgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gKSApO1xuXHRcdH1cblxuXHRcdHJldCA9IHRoaXMucHVzaFN0YWNrKCBbXSApO1xuXG5cdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGpRdWVyeS5maW5kKCBzZWxlY3Rvciwgc2VsZlsgaSBdLCByZXQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbGVuID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCByZXQgKSA6IHJldDtcblx0fSxcblx0ZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCBmYWxzZSApICk7XG5cdH0sXG5cdG5vdDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgdHJ1ZSApICk7XG5cdH0sXG5cdGlzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuICEhd2lubm93KFxuXHRcdFx0dGhpcyxcblxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIHBvc2l0aW9uYWwvcmVsYXRpdmUgc2VsZWN0b3IsIGNoZWNrIG1lbWJlcnNoaXAgaW4gdGhlIHJldHVybmVkIHNldFxuXHRcdFx0Ly8gc28gJChcInA6Zmlyc3RcIikuaXMoXCJwOmxhc3RcIikgd29uJ3QgcmV0dXJuIHRydWUgZm9yIGEgZG9jIHdpdGggdHdvIFwicFwiLlxuXHRcdFx0dHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICYmIHJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSA/XG5cdFx0XHRcdGpRdWVyeSggc2VsZWN0b3IgKSA6XG5cdFx0XHRcdHNlbGVjdG9yIHx8IFtdLFxuXHRcdFx0ZmFsc2Vcblx0XHQpLmxlbmd0aDtcblx0fVxufSApO1xuXG5cbi8vIEluaXRpYWxpemUgYSBqUXVlcnkgb2JqZWN0XG5cblxuLy8gQSBjZW50cmFsIHJlZmVyZW5jZSB0byB0aGUgcm9vdCBqUXVlcnkoZG9jdW1lbnQpXG52YXIgcm9vdGpRdWVyeSxcblxuXHQvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhUTUwgc3RyaW5nc1xuXHQvLyBQcmlvcml0aXplICNpZCBvdmVyIDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAoIzk1MjEpXG5cdC8vIFN0cmljdCBIVE1MIHJlY29nbml0aW9uICgjMTEyOTA6IG11c3Qgc3RhcnQgd2l0aCA8KVxuXHQvLyBTaG9ydGN1dCBzaW1wbGUgI2lkIGNhc2UgZm9yIHNwZWVkXG5cdHJxdWlja0V4cHIgPSAvXig/OlxccyooPFtcXHdcXFddKz4pW14+XSp8IyhbXFx3LV0rKSkkLyxcblxuXHRpbml0ID0galF1ZXJ5LmZuLmluaXQgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJvb3QgKSB7XG5cdFx0dmFyIG1hdGNoLCBlbGVtO1xuXG5cdFx0Ly8gSEFORExFOiAkKFwiXCIpLCAkKG51bGwpLCAkKHVuZGVmaW5lZCksICQoZmFsc2UpXG5cdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHQvLyBNZXRob2QgaW5pdCgpIGFjY2VwdHMgYW4gYWx0ZXJuYXRlIHJvb3RqUXVlcnlcblx0XHQvLyBzbyBtaWdyYXRlIGNhbiBzdXBwb3J0IGpRdWVyeS5zdWIgKGdoLTIxMDEpXG5cdFx0cm9vdCA9IHJvb3QgfHwgcm9vdGpRdWVyeTtcblxuXHRcdC8vIEhhbmRsZSBIVE1MIHN0cmluZ3Ncblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGlmICggc2VsZWN0b3JbIDAgXSA9PT0gXCI8XCIgJiZcblx0XHRcdFx0c2VsZWN0b3JbIHNlbGVjdG9yLmxlbmd0aCAtIDEgXSA9PT0gXCI+XCIgJiZcblx0XHRcdFx0c2VsZWN0b3IubGVuZ3RoID49IDMgKSB7XG5cblx0XHRcdFx0Ly8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0aCA8PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2tcblx0XHRcdFx0bWF0Y2ggPSBbIG51bGwsIHNlbGVjdG9yLCBudWxsIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYXRjaCBodG1sIG9yIG1ha2Ugc3VyZSBubyBjb250ZXh0IGlzIHNwZWNpZmllZCBmb3IgI2lkXG5cdFx0XHRpZiAoIG1hdGNoICYmICggbWF0Y2hbIDEgXSB8fCAhY29udGV4dCApICkge1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJChodG1sKSAtPiAkKGFycmF5KVxuXHRcdFx0XHRpZiAoIG1hdGNoWyAxIF0gKSB7XG5cdFx0XHRcdFx0Y29udGV4dCA9IGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgPyBjb250ZXh0WyAwIF0gOiBjb250ZXh0O1xuXG5cdFx0XHRcdFx0Ly8gT3B0aW9uIHRvIHJ1biBzY3JpcHRzIGlzIHRydWUgZm9yIGJhY2stY29tcGF0XG5cdFx0XHRcdFx0Ly8gSW50ZW50aW9uYWxseSBsZXQgdGhlIGVycm9yIGJlIHRocm93biBpZiBwYXJzZUhUTUwgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMsIGpRdWVyeS5wYXJzZUhUTUwoXG5cdFx0XHRcdFx0XHRtYXRjaFsgMSBdLFxuXHRcdFx0XHRcdFx0Y29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBkb2N1bWVudCxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpICk7XG5cblx0XHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCwgcHJvcHMpXG5cdFx0XHRcdFx0aWYgKCByc2luZ2xlVGFnLnRlc3QoIG1hdGNoWyAxIF0gKSAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29udGV4dCApICkge1xuXHRcdFx0XHRcdFx0Zm9yICggbWF0Y2ggaW4gY29udGV4dCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBQcm9wZXJ0aWVzIG9mIGNvbnRleHQgYXJlIGNhbGxlZCBhcyBtZXRob2RzIGlmIHBvc3NpYmxlXG5cdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggdGhpc1sgbWF0Y2ggXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXNbIG1hdGNoIF0oIGNvbnRleHRbIG1hdGNoIF0gKTtcblxuXHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgb3RoZXJ3aXNlIHNldCBhcyBhdHRyaWJ1dGVzXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hdHRyKCBtYXRjaCwgY29udGV4dFsgbWF0Y2ggXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKCNpZClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWyAyIF0gKTtcblxuXHRcdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSW5qZWN0IHRoZSBlbGVtZW50IGRpcmVjdGx5IGludG8gdGhlIGpRdWVyeSBvYmplY3Rcblx0XHRcdFx0XHRcdHRoaXNbIDAgXSA9IGVsZW07XG5cdFx0XHRcdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCAkKC4uLikpXG5cdFx0XHR9IGVsc2UgaWYgKCAhY29udGV4dCB8fCBjb250ZXh0LmpxdWVyeSApIHtcblx0XHRcdFx0cmV0dXJuICggY29udGV4dCB8fCByb290ICkuZmluZCggc2VsZWN0b3IgKTtcblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsIGNvbnRleHQpXG5cdFx0XHQvLyAod2hpY2ggaXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNvbnRleHQpLmZpbmQoZXhwcilcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdC8vIEhBTkRMRTogJChET01FbGVtZW50KVxuXHRcdH0gZWxzZSBpZiAoIHNlbGVjdG9yLm5vZGVUeXBlICkge1xuXHRcdFx0dGhpc1sgMCBdID0gc2VsZWN0b3I7XG5cdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdC8vIEhBTkRMRTogJChmdW5jdGlvbilcblx0XHQvLyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHlcblx0XHR9IGVsc2UgaWYgKCBpc0Z1bmN0aW9uKCBzZWxlY3RvciApICkge1xuXHRcdFx0cmV0dXJuIHJvb3QucmVhZHkgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHJvb3QucmVhZHkoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIEV4ZWN1dGUgaW1tZWRpYXRlbHkgaWYgcmVhZHkgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0c2VsZWN0b3IoIGpRdWVyeSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWFrZUFycmF5KCBzZWxlY3RvciwgdGhpcyApO1xuXHR9O1xuXG4vLyBHaXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRoZSBqUXVlcnkgcHJvdG90eXBlIGZvciBsYXRlciBpbnN0YW50aWF0aW9uXG5pbml0LnByb3RvdHlwZSA9IGpRdWVyeS5mbjtcblxuLy8gSW5pdGlhbGl6ZSBjZW50cmFsIHJlZmVyZW5jZVxucm9vdGpRdWVyeSA9IGpRdWVyeSggZG9jdW1lbnQgKTtcblxuXG52YXIgcnBhcmVudHNwcmV2ID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sXG5cblx0Ly8gTWV0aG9kcyBndWFyYW50ZWVkIHRvIHByb2R1Y2UgYSB1bmlxdWUgc2V0IHdoZW4gc3RhcnRpbmcgZnJvbSBhIHVuaXF1ZSBzZXRcblx0Z3VhcmFudGVlZFVuaXF1ZSA9IHtcblx0XHRjaGlsZHJlbjogdHJ1ZSxcblx0XHRjb250ZW50czogdHJ1ZSxcblx0XHRuZXh0OiB0cnVlLFxuXHRcdHByZXY6IHRydWVcblx0fTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRoYXM6IGZ1bmN0aW9uKCB0YXJnZXQgKSB7XG5cdFx0dmFyIHRhcmdldHMgPSBqUXVlcnkoIHRhcmdldCwgdGhpcyApLFxuXHRcdFx0bCA9IHRhcmdldHMubGVuZ3RoO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHRoaXMsIHRhcmdldHNbIGkgXSApICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRleHQgKSB7XG5cdFx0dmFyIGN1cixcblx0XHRcdGkgPSAwLFxuXHRcdFx0bCA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0bWF0Y2hlZCA9IFtdLFxuXHRcdFx0dGFyZ2V0cyA9IHR5cGVvZiBzZWxlY3RvcnMgIT09IFwic3RyaW5nXCIgJiYgalF1ZXJ5KCBzZWxlY3RvcnMgKTtcblxuXHRcdC8vIFBvc2l0aW9uYWwgc2VsZWN0b3JzIG5ldmVyIG1hdGNoLCBzaW5jZSB0aGVyZSdzIG5vIF9zZWxlY3Rpb25fIGNvbnRleHRcblx0XHRpZiAoICFybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9ycyApICkge1xuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRmb3IgKCBjdXIgPSB0aGlzWyBpIF07IGN1ciAmJiBjdXIgIT09IGNvbnRleHQ7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkge1xuXG5cdFx0XHRcdFx0Ly8gQWx3YXlzIHNraXAgZG9jdW1lbnQgZnJhZ21lbnRzXG5cdFx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPCAxMSAmJiAoIHRhcmdldHMgP1xuXHRcdFx0XHRcdFx0dGFyZ2V0cy5pbmRleCggY3VyICkgPiAtMSA6XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IHBhc3Mgbm9uLWVsZW1lbnRzIHRvIFNpenpsZVxuXHRcdFx0XHRcdFx0Y3VyLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggY3VyLCBzZWxlY3RvcnMgKSApICkge1xuXG5cdFx0XHRcdFx0XHRtYXRjaGVkLnB1c2goIGN1ciApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkLmxlbmd0aCA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApIDogbWF0Y2hlZCApO1xuXHR9LFxuXG5cdC8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRoaW4gdGhlIHNldFxuXHRpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBObyBhcmd1bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVudFxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCB0aGlzWyAwIF0gJiYgdGhpc1sgMCBdLnBhcmVudE5vZGUgKSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoIDogLTE7XG5cdFx0fVxuXG5cdFx0Ly8gSW5kZXggaW4gc2VsZWN0b3Jcblx0XHRpZiAoIHR5cGVvZiBlbGVtID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggalF1ZXJ5KCBlbGVtICksIHRoaXNbIDAgXSApO1xuXHRcdH1cblxuXHRcdC8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQgZWxlbWVudFxuXHRcdHJldHVybiBpbmRleE9mLmNhbGwoIHRoaXMsXG5cblx0XHRcdC8vIElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdXNlZFxuXHRcdFx0ZWxlbS5qcXVlcnkgPyBlbGVtWyAwIF0gOiBlbGVtXG5cdFx0KTtcblx0fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soXG5cdFx0XHRqUXVlcnkudW5pcXVlU29ydChcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgpLCBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0ICkgKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkQmFjazogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/XG5cdFx0XHR0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKCBzZWxlY3RvciApXG5cdFx0KTtcblx0fVxufSApO1xuXG5mdW5jdGlvbiBzaWJsaW5nKCBjdXIsIGRpciApIHtcblx0d2hpbGUgKCAoIGN1ciA9IGN1clsgZGlyIF0gKSAmJiBjdXIubm9kZVR5cGUgIT09IDEgKSB7fVxuXHRyZXR1cm4gY3VyO1xufVxuXG5qUXVlcnkuZWFjaCgge1xuXHRwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0cmV0dXJuIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDtcblx0fSxcblx0cGFyZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIgKTtcblx0fSxcblx0cGFyZW50c1VudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIsIHVudGlsICk7XG5cdH0sXG5cdG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXZBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRzaWJsaW5nczogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCAoIGVsZW0ucGFyZW50Tm9kZSB8fCB7fSApLmZpcnN0Q2hpbGQsIGVsZW0gKTtcblx0fSxcblx0Y2hpbGRyZW46IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggZWxlbS5maXJzdENoaWxkICk7XG5cdH0sXG5cdGNvbnRlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRpZiAoIHR5cGVvZiBlbGVtLmNvbnRlbnREb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLmNvbnRlbnREb2N1bWVudDtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seSwgaU9TIDcgb25seSwgQW5kcm9pZCBCcm93c2VyIDw9NC4zIG9ubHlcblx0XHQvLyBUcmVhdCB0aGUgdGVtcGxhdGUgZWxlbWVudCBhcyBhIHJlZ3VsYXIgb25lIGluIGJyb3dzZXJzIHRoYXRcblx0XHQvLyBkb24ndCBzdXBwb3J0IGl0LlxuXHRcdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGVtcGxhdGVcIiApICkge1xuXHRcdFx0ZWxlbSA9IGVsZW0uY29udGVudCB8fCBlbGVtO1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9kZXMgKTtcblx0fVxufSwgZnVuY3Rpb24oIG5hbWUsIGZuICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB1bnRpbCwgc2VsZWN0b3IgKSB7XG5cdFx0dmFyIG1hdGNoZWQgPSBqUXVlcnkubWFwKCB0aGlzLCBmbiwgdW50aWwgKTtcblxuXHRcdGlmICggbmFtZS5zbGljZSggLTUgKSAhPT0gXCJVbnRpbFwiICkge1xuXHRcdFx0c2VsZWN0b3IgPSB1bnRpbDtcblx0XHR9XG5cblx0XHRpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdG1hdGNoZWQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgbWF0Y2hlZCApO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5sZW5ndGggPiAxICkge1xuXG5cdFx0XHQvLyBSZW1vdmUgZHVwbGljYXRlc1xuXHRcdFx0aWYgKCAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFtZSBdICkge1xuXHRcdFx0XHRqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXZlcnNlIG9yZGVyIGZvciBwYXJlbnRzKiBhbmQgcHJldi1kZXJpdmF0aXZlc1xuXHRcdFx0aWYgKCBycGFyZW50c3ByZXYudGVzdCggbmFtZSApICkge1xuXHRcdFx0XHRtYXRjaGVkLnJldmVyc2UoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQgKTtcblx0fTtcbn0gKTtcbnZhciBybm90aHRtbHdoaXRlID0gKCAvW15cXHgyMFxcdFxcclxcblxcZl0rL2cgKTtcblxuXG5cbi8vIENvbnZlcnQgU3RyaW5nLWZvcm1hdHRlZCBvcHRpb25zIGludG8gT2JqZWN0LWZvcm1hdHRlZCBvbmVzXG5mdW5jdGlvbiBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkge1xuXHR2YXIgb2JqZWN0ID0ge307XG5cdGpRdWVyeS5lYWNoKCBvcHRpb25zLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10sIGZ1bmN0aW9uKCBfLCBmbGFnICkge1xuXHRcdG9iamVjdFsgZmxhZyBdID0gdHJ1ZTtcblx0fSApO1xuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG4vKlxuICogQ3JlYXRlIGEgY2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6XG4gKlxuICpcdG9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3dcbiAqXHRcdFx0dGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0aW9uIG9iamVjdFxuICpcbiAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxpa2UgYW4gZXZlbnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlXG4gKiBcImZpcmVkXCIgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogUG9zc2libGUgb3B0aW9uczpcbiAqXG4gKlx0b25jZTpcdFx0XHR3aWxsIGVuc3VyZSB0aGUgY2FsbGJhY2sgbGlzdCBjYW4gb25seSBiZSBmaXJlZCBvbmNlIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdG1lbW9yeTpcdFx0XHR3aWxsIGtlZXAgdHJhY2sgb2YgcHJldmlvdXMgdmFsdWVzIGFuZCB3aWxsIGNhbGwgYW55IGNhbGxiYWNrIGFkZGVkXG4gKlx0XHRcdFx0XHRhZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBmaXJlZCByaWdodCBhd2F5IHdpdGggdGhlIGxhdGVzdCBcIm1lbW9yaXplZFwiXG4gKlx0XHRcdFx0XHR2YWx1ZXMgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0dW5pcXVlOlx0XHRcdHdpbGwgZW5zdXJlIGEgY2FsbGJhY2sgY2FuIG9ubHkgYmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KVxuICpcbiAqXHRzdG9wT25GYWxzZTpcdGludGVycnVwdCBjYWxsaW5ncyB3aGVuIGEgY2FsbGJhY2sgcmV0dXJucyBmYWxzZVxuICpcbiAqL1xualF1ZXJ5LkNhbGxiYWNrcyA9IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXG5cdC8vIENvbnZlcnQgb3B0aW9ucyBmcm9tIFN0cmluZy1mb3JtYXR0ZWQgdG8gT2JqZWN0LWZvcm1hdHRlZCBpZiBuZWVkZWRcblx0Ly8gKHdlIGNoZWNrIGluIGNhY2hlIGZpcnN0KVxuXHRvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIgP1xuXHRcdGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSA6XG5cdFx0alF1ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMgKTtcblxuXHR2YXIgLy8gRmxhZyB0byBrbm93IGlmIGxpc3QgaXMgY3VycmVudGx5IGZpcmluZ1xuXHRcdGZpcmluZyxcblxuXHRcdC8vIExhc3QgZmlyZSB2YWx1ZSBmb3Igbm9uLWZvcmdldHRhYmxlIGxpc3RzXG5cdFx0bWVtb3J5LFxuXG5cdFx0Ly8gRmxhZyB0byBrbm93IGlmIGxpc3Qgd2FzIGFscmVhZHkgZmlyZWRcblx0XHRmaXJlZCxcblxuXHRcdC8vIEZsYWcgdG8gcHJldmVudCBmaXJpbmdcblx0XHRsb2NrZWQsXG5cblx0XHQvLyBBY3R1YWwgY2FsbGJhY2sgbGlzdFxuXHRcdGxpc3QgPSBbXSxcblxuXHRcdC8vIFF1ZXVlIG9mIGV4ZWN1dGlvbiBkYXRhIGZvciByZXBlYXRhYmxlIGxpc3RzXG5cdFx0cXVldWUgPSBbXSxcblxuXHRcdC8vIEluZGV4IG9mIGN1cnJlbnRseSBmaXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IGFkZC9yZW1vdmUgYXMgbmVlZGVkKVxuXHRcdGZpcmluZ0luZGV4ID0gLTEsXG5cblx0XHQvLyBGaXJlIGNhbGxiYWNrc1xuXHRcdGZpcmUgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5mb3JjZSBzaW5nbGUtZmlyaW5nXG5cdFx0XHRsb2NrZWQgPSBsb2NrZWQgfHwgb3B0aW9ucy5vbmNlO1xuXG5cdFx0XHQvLyBFeGVjdXRlIGNhbGxiYWNrcyBmb3IgYWxsIHBlbmRpbmcgZXhlY3V0aW9ucyxcblx0XHRcdC8vIHJlc3BlY3RpbmcgZmlyaW5nSW5kZXggb3ZlcnJpZGVzIGFuZCBydW50aW1lIGNoYW5nZXNcblx0XHRcdGZpcmVkID0gZmlyaW5nID0gdHJ1ZTtcblx0XHRcdGZvciAoIDsgcXVldWUubGVuZ3RoOyBmaXJpbmdJbmRleCA9IC0xICkge1xuXHRcdFx0XHRtZW1vcnkgPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0XHR3aGlsZSAoICsrZmlyaW5nSW5kZXggPCBsaXN0Lmxlbmd0aCApIHtcblxuXHRcdFx0XHRcdC8vIFJ1biBjYWxsYmFjayBhbmQgY2hlY2sgZm9yIGVhcmx5IHRlcm1pbmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBsaXN0WyBmaXJpbmdJbmRleCBdLmFwcGx5KCBtZW1vcnlbIDAgXSwgbWVtb3J5WyAxIF0gKSA9PT0gZmFsc2UgJiZcblx0XHRcdFx0XHRcdG9wdGlvbnMuc3RvcE9uRmFsc2UgKSB7XG5cblx0XHRcdFx0XHRcdC8vIEp1bXAgdG8gZW5kIGFuZCBmb3JnZXQgdGhlIGRhdGEgc28gLmFkZCBkb2Vzbid0IHJlLWZpcmVcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGg7XG5cdFx0XHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yZ2V0IHRoZSBkYXRhIGlmIHdlJ3JlIGRvbmUgd2l0aCBpdFxuXHRcdFx0aWYgKCAhb3B0aW9ucy5tZW1vcnkgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRmaXJpbmcgPSBmYWxzZTtcblxuXHRcdFx0Ly8gQ2xlYW4gdXAgaWYgd2UncmUgZG9uZSBmaXJpbmcgZm9yIGdvb2Rcblx0XHRcdGlmICggbG9ja2VkICkge1xuXG5cdFx0XHRcdC8vIEtlZXAgYW4gZW1wdHkgbGlzdCBpZiB3ZSBoYXZlIGRhdGEgZm9yIGZ1dHVyZSBhZGQgY2FsbHNcblx0XHRcdFx0aWYgKCBtZW1vcnkgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgdGhpcyBvYmplY3QgaXMgc3BlbnRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsaXN0ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBBY3R1YWwgQ2FsbGJhY2tzIG9iamVjdFxuXHRcdHNlbGYgPSB7XG5cblx0XHRcdC8vIEFkZCBhIGNhbGxiYWNrIG9yIGEgY29sbGVjdGlvbiBvZiBjYWxsYmFja3MgdG8gdGhlIGxpc3Rcblx0XHRcdGFkZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblxuXHRcdFx0XHRcdC8vIElmIHdlIGhhdmUgbWVtb3J5IGZyb20gYSBwYXN0IHJ1biwgd2Ugc2hvdWxkIGZpcmUgYWZ0ZXIgYWRkaW5nXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGggLSAxO1xuXHRcdFx0XHRcdFx0cXVldWUucHVzaCggbWVtb3J5ICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0KCBmdW5jdGlvbiBhZGQoIGFyZ3MgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggYXJncywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoICFvcHRpb25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGlzdC5wdXNoKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVuZ3RoICYmIHRvVHlwZSggYXJnICkgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBJbnNwZWN0IHJlY3Vyc2l2ZWx5XG5cdFx0XHRcdFx0XHRcdFx0YWRkKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdH0gKSggYXJndW1lbnRzICk7XG5cblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhIGNhbGxiYWNrIGZyb20gdGhlIGxpc3Rcblx0XHRcdHJlbW92ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0dmFyIGluZGV4O1xuXHRcdFx0XHRcdHdoaWxlICggKCBpbmRleCA9IGpRdWVyeS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0bGlzdC5zcGxpY2UoIGluZGV4LCAxICk7XG5cblx0XHRcdFx0XHRcdC8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlc1xuXHRcdFx0XHRcdFx0aWYgKCBpbmRleCA8PSBmaXJpbmdJbmRleCApIHtcblx0XHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXgtLTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDaGVjayBpZiBhIGdpdmVuIGNhbGxiYWNrIGlzIGluIHRoZSBsaXN0LlxuXHRcdFx0Ly8gSWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sIHJldHVybiB3aGV0aGVyIG9yIG5vdCBsaXN0IGhhcyBjYWxsYmFja3MgYXR0YWNoZWQuXG5cdFx0XHRoYXM6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0cmV0dXJuIGZuID9cblx0XHRcdFx0XHRqUXVlcnkuaW5BcnJheSggZm4sIGxpc3QgKSA+IC0xIDpcblx0XHRcdFx0XHRsaXN0Lmxlbmd0aCA+IDA7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBsaXN0XG5cdFx0XHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlIGFuZCAuYWRkXG5cdFx0XHQvLyBBYm9ydCBhbnkgY3VycmVudC9wZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdC8vIENsZWFyIGFsbCBjYWxsYmFja3MgYW5kIHZhbHVlc1xuXHRcdFx0ZGlzYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRkaXNhYmxlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhbGlzdDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmVcblx0XHRcdC8vIEFsc28gZGlzYWJsZSAuYWRkIHVubGVzcyB3ZSBoYXZlIG1lbW9yeSAoc2luY2UgaXQgd291bGQgaGF2ZSBubyBlZmZlY3QpXG5cdFx0XHQvLyBBYm9ydCBhbnkgcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHRsb2NrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0aWYgKCAhbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0bG9ja2VkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhbG9ja2VkO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGNvbnRleHQgYW5kIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZVdpdGg6IGZ1bmN0aW9uKCBjb250ZXh0LCBhcmdzICkge1xuXHRcdFx0XHRpZiAoICFsb2NrZWQgKSB7XG5cdFx0XHRcdFx0YXJncyA9IGFyZ3MgfHwgW107XG5cdFx0XHRcdFx0YXJncyA9IFsgY29udGV4dCwgYXJncy5zbGljZSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3MgXTtcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBhcmdzICk7XG5cdFx0XHRcdFx0aWYgKCAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzXG5cdFx0XHRmaXJlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0c2VsZi5maXJlV2l0aCggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiB0aGUgY2FsbGJhY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbGxlZCBhdCBsZWFzdCBvbmNlXG5cdFx0XHRmaXJlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWZpcmVkO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0cmV0dXJuIHNlbGY7XG59O1xuXG5cbmZ1bmN0aW9uIElkZW50aXR5KCB2ICkge1xuXHRyZXR1cm4gdjtcbn1cbmZ1bmN0aW9uIFRocm93ZXIoIGV4ICkge1xuXHR0aHJvdyBleDtcbn1cblxuZnVuY3Rpb24gYWRvcHRWYWx1ZSggdmFsdWUsIHJlc29sdmUsIHJlamVjdCwgbm9WYWx1ZSApIHtcblx0dmFyIG1ldGhvZDtcblxuXHR0cnkge1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIHByb21pc2UgYXNwZWN0IGZpcnN0IHRvIHByaXZpbGVnZSBzeW5jaHJvbm91cyBiZWhhdmlvclxuXHRcdGlmICggdmFsdWUgJiYgaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS5wcm9taXNlICkgKSApIHtcblx0XHRcdG1ldGhvZC5jYWxsKCB2YWx1ZSApLmRvbmUoIHJlc29sdmUgKS5mYWlsKCByZWplY3QgKTtcblxuXHRcdC8vIE90aGVyIHRoZW5hYmxlc1xuXHRcdH0gZWxzZSBpZiAoIHZhbHVlICYmIGlzRnVuY3Rpb24oICggbWV0aG9kID0gdmFsdWUudGhlbiApICkgKSB7XG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUsIHJlc29sdmUsIHJlamVjdCApO1xuXG5cdFx0Ly8gT3RoZXIgbm9uLXRoZW5hYmxlc1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIENvbnRyb2wgYHJlc29sdmVgIGFyZ3VtZW50cyBieSBsZXR0aW5nIEFycmF5I3NsaWNlIGNhc3QgYm9vbGVhbiBgbm9WYWx1ZWAgdG8gaW50ZWdlcjpcblx0XHRcdC8vICogZmFsc2U6IFsgdmFsdWUgXS5zbGljZSggMCApID0+IHJlc29sdmUoIHZhbHVlIClcblx0XHRcdC8vICogdHJ1ZTogWyB2YWx1ZSBdLnNsaWNlKCAxICkgPT4gcmVzb2x2ZSgpXG5cdFx0XHRyZXNvbHZlLmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXS5zbGljZSggbm9WYWx1ZSApICk7XG5cdFx0fVxuXG5cdC8vIEZvciBQcm9taXNlcy9BKywgY29udmVydCBleGNlcHRpb25zIGludG8gcmVqZWN0aW9uc1xuXHQvLyBTaW5jZSBqUXVlcnkud2hlbiBkb2Vzbid0IHVud3JhcCB0aGVuYWJsZXMsIHdlIGNhbiBza2lwIHRoZSBleHRyYSBjaGVja3MgYXBwZWFyaW5nIGluXG5cdC8vIERlZmVycmVkI3RoZW4gdG8gY29uZGl0aW9uYWxseSBzdXBwcmVzcyByZWplY3Rpb24uXG5cdH0gY2F0Y2ggKCB2YWx1ZSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIG9ubHlcblx0XHQvLyBTdHJpY3QgbW9kZSBmdW5jdGlvbnMgaW52b2tlZCB3aXRob3V0IC5jYWxsLy5hcHBseSBnZXQgZ2xvYmFsLW9iamVjdCBjb250ZXh0XG5cdFx0cmVqZWN0LmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXSApO1xuXHR9XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHREZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7XG5cdFx0dmFyIHR1cGxlcyA9IFtcblxuXHRcdFx0XHQvLyBhY3Rpb24sIGFkZCBsaXN0ZW5lciwgY2FsbGJhY2tzLFxuXHRcdFx0XHQvLyAuLi4gLnRoZW4gaGFuZGxlcnMsIGFyZ3VtZW50IGluZGV4LCBbZmluYWwgc3RhdGVdXG5cdFx0XHRcdFsgXCJub3RpZnlcIiwgXCJwcm9ncmVzc1wiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLCAyIF0sXG5cdFx0XHRcdFsgXCJyZXNvbHZlXCIsIFwiZG9uZVwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgMCwgXCJyZXNvbHZlZFwiIF0sXG5cdFx0XHRcdFsgXCJyZWplY3RcIiwgXCJmYWlsXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCAxLCBcInJlamVjdGVkXCIgXVxuXHRcdFx0XSxcblx0XHRcdHN0YXRlID0gXCJwZW5kaW5nXCIsXG5cdFx0XHRwcm9taXNlID0ge1xuXHRcdFx0XHRzdGF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRhbHdheXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGRlZmVycmVkLmRvbmUoIGFyZ3VtZW50cyApLmZhaWwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImNhdGNoXCI6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJvbWlzZS50aGVuKCBudWxsLCBmbiApO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEtlZXAgcGlwZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0cGlwZTogZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICovICkge1xuXHRcdFx0XHRcdHZhciBmbnMgPSBhcmd1bWVudHM7XG5cblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTWFwIHR1cGxlcyAocHJvZ3Jlc3MsIGRvbmUsIGZhaWwpIHRvIGFyZ3VtZW50cyAoZG9uZSwgZmFpbCwgcHJvZ3Jlc3MpXG5cdFx0XHRcdFx0XHRcdHZhciBmbiA9IGlzRnVuY3Rpb24oIGZuc1sgdHVwbGVbIDQgXSBdICkgJiYgZm5zWyB0dXBsZVsgNCBdIF07XG5cblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQucHJvZ3Jlc3MoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIubm90aWZ5IH0pXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLmRvbmUoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVzb2x2ZSB9KVxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5mYWlsKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlamVjdCB9KVxuXHRcdFx0XHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDEgXSBdKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQgPSBmbiAmJiBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCAmJiBpc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC5wcm9taXNlKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnByb2dyZXNzKCBuZXdEZWZlci5ub3RpZnkgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5mYWlsKCBuZXdEZWZlci5yZWplY3QgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXJbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmbiA/IFsgcmV0dXJuZWQgXSA6IGFyZ3VtZW50c1xuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdGZucyA9IG51bGw7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhlbjogZnVuY3Rpb24oIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBvblByb2dyZXNzICkge1xuXHRcdFx0XHRcdHZhciBtYXhEZXB0aCA9IDA7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gcmVzb2x2ZSggZGVwdGgsIGRlZmVycmVkLCBoYW5kbGVyLCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdGhhdCA9IHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0YXJncyA9IGFyZ3VtZW50cyxcblx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQsIHRoZW47XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4zXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01OVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIGRvdWJsZS1yZXNvbHV0aW9uIGF0dGVtcHRzXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoIDwgbWF4RGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQgPSBoYW5kbGVyLmFwcGx5KCB0aGF0LCBhcmdzICk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjFcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTQ4XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkID09PSBkZWZlcnJlZC5wcm9taXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoIFwiVGhlbmFibGUgc2VsZi1yZXNvbHV0aW9uXCIgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbnMgMi4zLjMuMSwgMy41XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01NFxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNzVcblx0XHRcdFx0XHRcdFx0XHRcdC8vIFJldHJpZXZlIGB0aGVuYCBvbmx5IG9uY2Vcblx0XHRcdFx0XHRcdFx0XHRcdHRoZW4gPSByZXR1cm5lZCAmJlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBjaGVjayBvYmplY3RzIGFuZCBmdW5jdGlvbnMgZm9yIHRoZW5hYmlsaXR5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggdHlwZW9mIHJldHVybmVkID09PSBcIm9iamVjdFwiIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHJldHVybmVkID09PSBcImZ1bmN0aW9uXCIgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC50aGVuO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYSByZXR1cm5lZCB0aGVuYWJsZVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGVuICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3BlY2lhbCBwcm9jZXNzb3JzIChub3RpZnkpIGp1c3Qgd2FpdCBmb3IgcmVzb2x1dGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWwgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gTm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGFsc28gaG9vayBpbnRvIHByb2dyZXNzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgZGlzcmVnYXJkIG9sZGVyIHJlc29sdXRpb24gdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4RGVwdGgrKztcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhbGwgb3RoZXIgcmV0dXJuZWQgdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggaGFuZGxlciAhPT0gSWRlbnRpdHkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyByZXR1cm5lZCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gUHJvY2VzcyB0aGUgdmFsdWUocylcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmYXVsdCBwcm9jZXNzIGlzIHJlc29sdmVcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCBzcGVjaWFsIHx8IGRlZmVycmVkLnJlc29sdmVXaXRoICkoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBub3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgY2F0Y2ggYW5kIHJlamVjdCBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcyA9IHNwZWNpYWwgP1xuXHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rKCBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLnN0YWNrVHJhY2UgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuNC4xXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBJZ25vcmUgcG9zdC1yZXNvbHV0aW9uIGV4Y2VwdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoICsgMSA+PSBtYXhEZXB0aCApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBzdWJzdGl0dXRlIGhhbmRsZXJzIHBhc3Mgb24gY29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGhhbmRsZXIgIT09IFRocm93ZXIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoYXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBbIGUgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggdGhhdCwgYXJncyApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuMVxuXHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01N1xuXHRcdFx0XHRcdFx0XHQvLyBSZS1yZXNvbHZlIHByb21pc2VzIGltbWVkaWF0ZWx5IHRvIGRvZGdlIGZhbHNlIHJlamVjdGlvbiBmcm9tXG5cdFx0XHRcdFx0XHRcdC8vIHN1YnNlcXVlbnQgZXJyb3JzXG5cdFx0XHRcdFx0XHRcdGlmICggZGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcygpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2FsbCBhbiBvcHRpb25hbCBob29rIHRvIHJlY29yZCB0aGUgc3RhY2ssIGluIGNhc2Ugb2YgZXhjZXB0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Ly8gc2luY2UgaXQncyBvdGhlcndpc2UgbG9zdCB3aGVuIGV4ZWN1dGlvbiBnb2VzIGFzeW5jXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5zdGFja1RyYWNlID0galF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggcHJvY2VzcyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcblxuXHRcdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblByb2dyZXNzICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25Qcm9ncmVzcyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eSxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlci5ub3RpZnlXaXRoXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDEgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uRnVsZmlsbGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25GdWxmaWxsZWQgOlxuXHRcdFx0XHRcdFx0XHRcdFx0SWRlbnRpdHlcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAyIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblJlamVjdGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25SZWplY3RlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRUaHJvd2VyXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBHZXQgYSBwcm9taXNlIGZvciB0aGlzIGRlZmVycmVkXG5cdFx0XHRcdC8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3Rcblx0XHRcdFx0cHJvbWlzZTogZnVuY3Rpb24oIG9iaiApIHtcblx0XHRcdFx0XHRyZXR1cm4gb2JqICE9IG51bGwgPyBqUXVlcnkuZXh0ZW5kKCBvYmosIHByb21pc2UgKSA6IHByb21pc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWZlcnJlZCA9IHt9O1xuXG5cdFx0Ly8gQWRkIGxpc3Qtc3BlY2lmaWMgbWV0aG9kc1xuXHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHtcblx0XHRcdHZhciBsaXN0ID0gdHVwbGVbIDIgXSxcblx0XHRcdFx0c3RhdGVTdHJpbmcgPSB0dXBsZVsgNSBdO1xuXG5cdFx0XHQvLyBwcm9taXNlLnByb2dyZXNzID0gbGlzdC5hZGRcblx0XHRcdC8vIHByb21pc2UuZG9uZSA9IGxpc3QuYWRkXG5cdFx0XHQvLyBwcm9taXNlLmZhaWwgPSBsaXN0LmFkZFxuXHRcdFx0cHJvbWlzZVsgdHVwbGVbIDEgXSBdID0gbGlzdC5hZGQ7XG5cblx0XHRcdC8vIEhhbmRsZSBzdGF0ZVxuXHRcdFx0aWYgKCBzdGF0ZVN0cmluZyApIHtcblx0XHRcdFx0bGlzdC5hZGQoXG5cdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIHN0YXRlID0gXCJyZXNvbHZlZFwiIChpLmUuLCBmdWxmaWxsZWQpXG5cdFx0XHRcdFx0XHQvLyBzdGF0ZSA9IFwicmVqZWN0ZWRcIlxuXHRcdFx0XHRcdFx0c3RhdGUgPSBzdGF0ZVN0cmluZztcblx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHR0dXBsZXNbIDMgLSBpIF1bIDIgXS5kaXNhYmxlLFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZGlzYWJsZVxuXHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5kaXNhYmxlXG5cdFx0XHRcdFx0dHVwbGVzWyAzIC0gaSBdWyAzIF0uZGlzYWJsZSxcblxuXHRcdFx0XHRcdC8vIHByb2dyZXNzX2NhbGxiYWNrcy5sb2NrXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDIgXS5sb2NrLFxuXG5cdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMubG9ja1xuXHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAzIF0ubG9ja1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5maXJlXG5cdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0bGlzdC5hZGQoIHR1cGxlWyAzIF0uZmlyZSApO1xuXG5cdFx0XHQvLyBkZWZlcnJlZC5ub3RpZnkgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQubm90aWZ5V2l0aCguLi4pIH1cblx0XHRcdC8vIGRlZmVycmVkLnJlc29sdmUgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVzb2x2ZVdpdGgoLi4uKSB9XG5cdFx0XHQvLyBkZWZlcnJlZC5yZWplY3QgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVqZWN0V2l0aCguLi4pIH1cblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKCB0aGlzID09PSBkZWZlcnJlZCA/IHVuZGVmaW5lZCA6IHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH07XG5cblx0XHRcdC8vIGRlZmVycmVkLm5vdGlmeVdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHQvLyBkZWZlcnJlZC5yZXNvbHZlV2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdC8vIGRlZmVycmVkLnJlamVjdFdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0gPSBsaXN0LmZpcmVXaXRoO1xuXHRcdH0gKTtcblxuXHRcdC8vIE1ha2UgdGhlIGRlZmVycmVkIGEgcHJvbWlzZVxuXHRcdHByb21pc2UucHJvbWlzZSggZGVmZXJyZWQgKTtcblxuXHRcdC8vIENhbGwgZ2l2ZW4gZnVuYyBpZiBhbnlcblx0XHRpZiAoIGZ1bmMgKSB7XG5cdFx0XHRmdW5jLmNhbGwoIGRlZmVycmVkLCBkZWZlcnJlZCApO1xuXHRcdH1cblxuXHRcdC8vIEFsbCBkb25lIVxuXHRcdHJldHVybiBkZWZlcnJlZDtcblx0fSxcblxuXHQvLyBEZWZlcnJlZCBoZWxwZXJcblx0d2hlbjogZnVuY3Rpb24oIHNpbmdsZVZhbHVlICkge1xuXHRcdHZhclxuXG5cdFx0XHQvLyBjb3VudCBvZiB1bmNvbXBsZXRlZCBzdWJvcmRpbmF0ZXNcblx0XHRcdHJlbWFpbmluZyA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cblx0XHRcdC8vIGNvdW50IG9mIHVucHJvY2Vzc2VkIGFyZ3VtZW50c1xuXHRcdFx0aSA9IHJlbWFpbmluZyxcblxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgZnVsZmlsbG1lbnQgZGF0YVxuXHRcdFx0cmVzb2x2ZUNvbnRleHRzID0gQXJyYXkoIGkgKSxcblx0XHRcdHJlc29sdmVWYWx1ZXMgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSxcblxuXHRcdFx0Ly8gdGhlIG1hc3RlciBEZWZlcnJlZFxuXHRcdFx0bWFzdGVyID0galF1ZXJ5LkRlZmVycmVkKCksXG5cblx0XHRcdC8vIHN1Ym9yZGluYXRlIGNhbGxiYWNrIGZhY3Rvcnlcblx0XHRcdHVwZGF0ZUZ1bmMgPSBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXNvbHZlQ29udGV4dHNbIGkgXSA9IHRoaXM7XG5cdFx0XHRcdFx0cmVzb2x2ZVZhbHVlc1sgaSBdID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSA6IHZhbHVlO1xuXHRcdFx0XHRcdGlmICggISggLS1yZW1haW5pbmcgKSApIHtcblx0XHRcdFx0XHRcdG1hc3Rlci5yZXNvbHZlV2l0aCggcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblxuXHRcdC8vIFNpbmdsZS0gYW5kIGVtcHR5IGFyZ3VtZW50cyBhcmUgYWRvcHRlZCBsaWtlIFByb21pc2UucmVzb2x2ZVxuXHRcdGlmICggcmVtYWluaW5nIDw9IDEgKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCBzaW5nbGVWYWx1ZSwgbWFzdGVyLmRvbmUoIHVwZGF0ZUZ1bmMoIGkgKSApLnJlc29sdmUsIG1hc3Rlci5yZWplY3QsXG5cdFx0XHRcdCFyZW1haW5pbmcgKTtcblxuXHRcdFx0Ly8gVXNlIC50aGVuKCkgdG8gdW53cmFwIHNlY29uZGFyeSB0aGVuYWJsZXMgKGNmLiBnaC0zMDAwKVxuXHRcdFx0aWYgKCBtYXN0ZXIuc3RhdGUoKSA9PT0gXCJwZW5kaW5nXCIgfHxcblx0XHRcdFx0aXNGdW5jdGlvbiggcmVzb2x2ZVZhbHVlc1sgaSBdICYmIHJlc29sdmVWYWx1ZXNbIGkgXS50aGVuICkgKSB7XG5cblx0XHRcdFx0cmV0dXJuIG1hc3Rlci50aGVuKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gTXVsdGlwbGUgYXJndW1lbnRzIGFyZSBhZ2dyZWdhdGVkIGxpa2UgUHJvbWlzZS5hbGwgYXJyYXkgZWxlbWVudHNcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHJlc29sdmVWYWx1ZXNbIGkgXSwgdXBkYXRlRnVuYyggaSApLCBtYXN0ZXIucmVqZWN0ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hc3Rlci5wcm9taXNlKCk7XG5cdH1cbn0gKTtcblxuXG4vLyBUaGVzZSB1c3VhbGx5IGluZGljYXRlIGEgcHJvZ3JhbW1lciBtaXN0YWtlIGR1cmluZyBkZXZlbG9wbWVudCxcbi8vIHdhcm4gYWJvdXQgdGhlbSBBU0FQIHJhdGhlciB0aGFuIHN3YWxsb3dpbmcgdGhlbSBieSBkZWZhdWx0LlxudmFyIHJlcnJvck5hbWVzID0gL14oRXZhbHxJbnRlcm5hbHxSYW5nZXxSZWZlcmVuY2V8U3ludGF4fFR5cGV8VVJJKUVycm9yJC87XG5cbmpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rID0gZnVuY3Rpb24oIGVycm9yLCBzdGFjayApIHtcblxuXHQvLyBTdXBwb3J0OiBJRSA4IC0gOSBvbmx5XG5cdC8vIENvbnNvbGUgZXhpc3RzIHdoZW4gZGV2IHRvb2xzIGFyZSBvcGVuLCB3aGljaCBjYW4gaGFwcGVuIGF0IGFueSB0aW1lXG5cdGlmICggd2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUud2FybiAmJiBlcnJvciAmJiByZXJyb3JOYW1lcy50ZXN0KCBlcnJvci5uYW1lICkgKSB7XG5cdFx0d2luZG93LmNvbnNvbGUud2FybiggXCJqUXVlcnkuRGVmZXJyZWQgZXhjZXB0aW9uOiBcIiArIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBzdGFjayApO1xuXHR9XG59O1xuXG5cblxuXG5qUXVlcnkucmVhZHlFeGNlcHRpb24gPSBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHR0aHJvdyBlcnJvcjtcblx0fSApO1xufTtcblxuXG5cblxuLy8gVGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5XG52YXIgcmVhZHlMaXN0ID0galF1ZXJ5LkRlZmVycmVkKCk7XG5cbmpRdWVyeS5mbi5yZWFkeSA9IGZ1bmN0aW9uKCBmbiApIHtcblxuXHRyZWFkeUxpc3Rcblx0XHQudGhlbiggZm4gKVxuXG5cdFx0Ly8gV3JhcCBqUXVlcnkucmVhZHlFeGNlcHRpb24gaW4gYSBmdW5jdGlvbiBzbyB0aGF0IHRoZSBsb29rdXBcblx0XHQvLyBoYXBwZW5zIGF0IHRoZSB0aW1lIG9mIGVycm9yIGhhbmRsaW5nIGluc3RlYWQgb2YgY2FsbGJhY2tcblx0XHQvLyByZWdpc3RyYXRpb24uXG5cdFx0LmNhdGNoKCBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdFx0XHRqUXVlcnkucmVhZHlFeGNlcHRpb24oIGVycm9yICk7XG5cdFx0fSApO1xuXG5cdHJldHVybiB0aGlzO1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIElzIHRoZSBET00gcmVhZHkgdG8gYmUgdXNlZD8gU2V0IHRvIHRydWUgb25jZSBpdCBvY2N1cnMuXG5cdGlzUmVhZHk6IGZhbHNlLFxuXG5cdC8vIEEgY291bnRlciB0byB0cmFjayBob3cgbWFueSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmVcblx0Ly8gdGhlIHJlYWR5IGV2ZW50IGZpcmVzLiBTZWUgIzY3ODFcblx0cmVhZHlXYWl0OiAxLFxuXG5cdC8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHlcblx0cmVhZHk6IGZ1bmN0aW9uKCB3YWl0ICkge1xuXG5cdFx0Ly8gQWJvcnQgaWYgdGhlcmUgYXJlIHBlbmRpbmcgaG9sZHMgb3Igd2UncmUgYWxyZWFkeSByZWFkeVxuXHRcdGlmICggd2FpdCA9PT0gdHJ1ZSA/IC0talF1ZXJ5LnJlYWR5V2FpdCA6IGpRdWVyeS5pc1JlYWR5ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJlbWVtYmVyIHRoYXQgdGhlIERPTSBpcyByZWFkeVxuXHRcdGpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTtcblxuXHRcdC8vIElmIGEgbm9ybWFsIERPTSBSZWFkeSBldmVudCBmaXJlZCwgZGVjcmVtZW50LCBhbmQgd2FpdCBpZiBuZWVkIGJlXG5cdFx0aWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5LnJlYWR5V2FpdCA+IDAgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlcmUgYXJlIGZ1bmN0aW9ucyBib3VuZCwgdG8gZXhlY3V0ZVxuXHRcdHJlYWR5TGlzdC5yZXNvbHZlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5IF0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkucmVhZHkudGhlbiA9IHJlYWR5TGlzdC50aGVuO1xuXG4vLyBUaGUgcmVhZHkgZXZlbnQgaGFuZGxlciBhbmQgc2VsZiBjbGVhbnVwIG1ldGhvZFxuZnVuY3Rpb24gY29tcGxldGVkKCkge1xuXHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG5cdGpRdWVyeS5yZWFkeSgpO1xufVxuXG4vLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZFxuLy8gYWZ0ZXIgdGhlIGJyb3dzZXIgZXZlbnQgaGFzIGFscmVhZHkgb2NjdXJyZWQuXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMCBvbmx5XG4vLyBPbGRlciBJRSBzb21ldGltZXMgc2lnbmFscyBcImludGVyYWN0aXZlXCIgdG9vIHNvb25cbmlmICggZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiIHx8XG5cdCggZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gXCJsb2FkaW5nXCIgJiYgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCApICkge1xuXG5cdC8vIEhhbmRsZSBpdCBhc3luY2hyb25vdXNseSB0byBhbGxvdyBzY3JpcHRzIHRoZSBvcHBvcnR1bml0eSB0byBkZWxheSByZWFkeVxuXHR3aW5kb3cuc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5ICk7XG5cbn0gZWxzZSB7XG5cblx0Ly8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxsYmFja1xuXHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cblx0Ly8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcbn1cblxuXG5cblxuLy8gTXVsdGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2YWx1ZXMgb2YgYSBjb2xsZWN0aW9uXG4vLyBUaGUgdmFsdWUvcyBjYW4gb3B0aW9uYWxseSBiZSBleGVjdXRlZCBpZiBpdCdzIGEgZnVuY3Rpb25cbnZhciBhY2Nlc3MgPSBmdW5jdGlvbiggZWxlbXMsIGZuLCBrZXksIHZhbHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0LCByYXcgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSBlbGVtcy5sZW5ndGgsXG5cdFx0YnVsayA9IGtleSA9PSBudWxsO1xuXG5cdC8vIFNldHMgbWFueSB2YWx1ZXNcblx0aWYgKCB0b1R5cGUoIGtleSApID09PSBcIm9iamVjdFwiICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cdFx0Zm9yICggaSBpbiBrZXkgKSB7XG5cdFx0XHRhY2Nlc3MoIGVsZW1zLCBmbiwgaSwga2V5WyBpIF0sIHRydWUsIGVtcHR5R2V0LCByYXcgKTtcblx0XHR9XG5cblx0Ly8gU2V0cyBvbmUgdmFsdWVcblx0fSBlbHNlIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXG5cdFx0aWYgKCAhaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJhdyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBidWxrICkge1xuXG5cdFx0XHQvLyBCdWxrIG9wZXJhdGlvbnMgcnVuIGFnYWluc3QgdGhlIGVudGlyZSBzZXRcblx0XHRcdGlmICggcmF3ICkge1xuXHRcdFx0XHRmbi5jYWxsKCBlbGVtcywgdmFsdWUgKTtcblx0XHRcdFx0Zm4gPSBudWxsO1xuXG5cdFx0XHQvLyAuLi5leGNlcHQgd2hlbiBleGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRidWxrID0gZm47XG5cdFx0XHRcdGZuID0gZnVuY3Rpb24oIGVsZW0sIGtleSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGJ1bGsuY2FsbCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRmbihcblx0XHRcdFx0XHRlbGVtc1sgaSBdLCBrZXksIHJhdyA/XG5cdFx0XHRcdFx0dmFsdWUgOlxuXHRcdFx0XHRcdHZhbHVlLmNhbGwoIGVsZW1zWyBpIF0sIGksIGZuKCBlbGVtc1sgaSBdLCBrZXkgKSApXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKCBjaGFpbmFibGUgKSB7XG5cdFx0cmV0dXJuIGVsZW1zO1xuXHR9XG5cblx0Ly8gR2V0c1xuXHRpZiAoIGJ1bGsgKSB7XG5cdFx0cmV0dXJuIGZuLmNhbGwoIGVsZW1zICk7XG5cdH1cblxuXHRyZXR1cm4gbGVuID8gZm4oIGVsZW1zWyAwIF0sIGtleSApIDogZW1wdHlHZXQ7XG59O1xuXG5cbi8vIE1hdGNoZXMgZGFzaGVkIHN0cmluZyBmb3IgY2FtZWxpemluZ1xudmFyIHJtc1ByZWZpeCA9IC9eLW1zLS8sXG5cdHJkYXNoQWxwaGEgPSAvLShbYS16XSkvZztcblxuLy8gVXNlZCBieSBjYW1lbENhc2UgYXMgY2FsbGJhY2sgdG8gcmVwbGFjZSgpXG5mdW5jdGlvbiBmY2FtZWxDYXNlKCBhbGwsIGxldHRlciApIHtcblx0cmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpO1xufVxuXG4vLyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhlIGNzcyBhbmQgZGF0YSBtb2R1bGVzXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG4vLyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAoIzk1NzIpXG5mdW5jdGlvbiBjYW1lbENhc2UoIHN0cmluZyApIHtcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsIFwibXMtXCIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7XG59XG52YXIgYWNjZXB0RGF0YSA9IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHQvLyBBY2NlcHRzIG9ubHk6XG5cdC8vICAtIE5vZGVcblx0Ly8gICAgLSBOb2RlLkVMRU1FTlRfTk9ERVxuXHQvLyAgICAtIE5vZGUuRE9DVU1FTlRfTk9ERVxuXHQvLyAgLSBPYmplY3Rcblx0Ly8gICAgLSBBbnlcblx0cmV0dXJuIG93bmVyLm5vZGVUeXBlID09PSAxIHx8IG93bmVyLm5vZGVUeXBlID09PSA5IHx8ICEoICtvd25lci5ub2RlVHlwZSApO1xufTtcblxuXG5cblxuZnVuY3Rpb24gRGF0YSgpIHtcblx0dGhpcy5leHBhbmRvID0galF1ZXJ5LmV4cGFuZG8gKyBEYXRhLnVpZCsrO1xufVxuXG5EYXRhLnVpZCA9IDE7XG5cbkRhdGEucHJvdG90eXBlID0ge1xuXG5cdGNhY2hlOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGVcblx0XHR2YXIgdmFsdWUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHQvLyBJZiBub3QsIGNyZWF0ZSBvbmVcblx0XHRpZiAoICF2YWx1ZSApIHtcblx0XHRcdHZhbHVlID0ge307XG5cblx0XHRcdC8vIFdlIGNhbiBhY2NlcHQgZGF0YSBmb3Igbm9uLWVsZW1lbnQgbm9kZXMgaW4gbW9kZXJuIGJyb3dzZXJzLFxuXHRcdFx0Ly8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSAjODMzNS5cblx0XHRcdC8vIEFsd2F5cyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LlxuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBvd25lciApICkge1xuXG5cdFx0XHRcdC8vIElmIGl0IGlzIGEgbm9kZSB1bmxpa2VseSB0byBiZSBzdHJpbmdpZnktZWQgb3IgbG9vcGVkIG92ZXJcblx0XHRcdFx0Ly8gdXNlIHBsYWluIGFzc2lnbm1lbnRcblx0XHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB2YWx1ZTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2Ugc2VjdXJlIGl0IGluIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHlcblx0XHRcdFx0Ly8gY29uZmlndXJhYmxlIG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUgcHJvcGVydHkgdG8gYmVcblx0XHRcdFx0Ly8gZGVsZXRlZCB3aGVuIGRhdGEgaXMgcmVtb3ZlZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggb3duZXIsIHRoaXMuZXhwYW5kbywge1xuXHRcdFx0XHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXHRzZXQ6IGZ1bmN0aW9uKCBvd25lciwgZGF0YSwgdmFsdWUgKSB7XG5cdFx0dmFyIHByb3AsXG5cdFx0XHRjYWNoZSA9IHRoaXMuY2FjaGUoIG93bmVyICk7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIGtleSwgdmFsdWUgXSBhcmdzXG5cdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBkYXRhICkgXSA9IHZhbHVlO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCB7IHByb3BlcnRpZXMgfSBdIGFyZ3Ncblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb3B5IHRoZSBwcm9wZXJ0aWVzIG9uZS1ieS1vbmUgdG8gdGhlIGNhY2hlIG9iamVjdFxuXHRcdFx0Zm9yICggcHJvcCBpbiBkYXRhICkge1xuXHRcdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBwcm9wICkgXSA9IGRhdGFbIHByb3AgXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNhY2hlO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzLmNhY2hlKCBvd25lciApIDpcblxuXHRcdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdICYmIG93bmVyWyB0aGlzLmV4cGFuZG8gXVsgY2FtZWxDYXNlKCBrZXkgKSBdO1xuXHR9LFxuXHRhY2Nlc3M6IGZ1bmN0aW9uKCBvd25lciwga2V5LCB2YWx1ZSApIHtcblxuXHRcdC8vIEluIGNhc2VzIHdoZXJlIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gTm8ga2V5IHdhcyBzcGVjaWZpZWRcblx0XHQvLyAgIDIuIEEgc3RyaW5nIGtleSB3YXMgc3BlY2lmaWVkLCBidXQgbm8gdmFsdWUgcHJvdmlkZWRcblx0XHQvL1xuXHRcdC8vIFRha2UgdGhlIFwicmVhZFwiIHBhdGggYW5kIGFsbG93IHRoZSBnZXQgbWV0aG9kIHRvIGRldGVybWluZVxuXHRcdC8vIHdoaWNoIHZhbHVlIHRvIHJldHVybiwgcmVzcGVjdGl2ZWx5IGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gVGhlIGVudGlyZSBjYWNoZSBvYmplY3Rcblx0XHQvLyAgIDIuIFRoZSBkYXRhIHN0b3JlZCBhdCB0aGUga2V5XG5cdFx0Ly9cblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdCggKCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIiApICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSApIHtcblxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0KCBvd25lciwga2V5ICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2hlbiB0aGUga2V5IGlzIG5vdCBhIHN0cmluZywgb3IgYm90aCBhIGtleSBhbmQgdmFsdWVcblx0XHQvLyBhcmUgc3BlY2lmaWVkLCBzZXQgb3IgZXh0ZW5kIChleGlzdGluZyBvYmplY3RzKSB3aXRoIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gQW4gb2JqZWN0IG9mIHByb3BlcnRpZXNcblx0XHQvLyAgIDIuIEEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vXG5cdFx0dGhpcy5zZXQoIG93bmVyLCBrZXksIHZhbHVlICk7XG5cblx0XHQvLyBTaW5jZSB0aGUgXCJzZXRcIiBwYXRoIGNhbiBoYXZlIHR3byBwb3NzaWJsZSBlbnRyeSBwb2ludHNcblx0XHQvLyByZXR1cm4gdGhlIGV4cGVjdGVkIGRhdGEgYmFzZWQgb24gd2hpY2ggcGF0aCB3YXMgdGFrZW5bKl1cblx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoga2V5O1xuXHR9LFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHZhciBpLFxuXHRcdFx0Y2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHRpZiAoIGNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGtleXNcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSgga2V5ICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYga2V5IGlzIGFuIGFycmF5IG9mIGtleXMuLi5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHNldCBjYW1lbENhc2Uga2V5cywgc28gcmVtb3ZlIHRoYXQuXG5cdFx0XHRcdGtleSA9IGtleS5tYXAoIGNhbWVsQ2FzZSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0a2V5ID0gY2FtZWxDYXNlKCBrZXkgKTtcblxuXHRcdFx0XHQvLyBJZiBhIGtleSB3aXRoIHRoZSBzcGFjZXMgZXhpc3RzLCB1c2UgaXQuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgY3JlYXRlIGFuIGFycmF5IGJ5IG1hdGNoaW5nIG5vbi13aGl0ZXNwYWNlXG5cdFx0XHRcdGtleSA9IGtleSBpbiBjYWNoZSA/XG5cdFx0XHRcdFx0WyBrZXkgXSA6XG5cdFx0XHRcdFx0KCBrZXkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpID0ga2V5Lmxlbmd0aDtcblxuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5WyBpIF0gXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgdGhlIGV4cGFuZG8gaWYgdGhlcmUncyBubyBtb3JlIGRhdGFcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1XG5cdFx0XHQvLyBXZWJraXQgJiBCbGluayBwZXJmb3JtYW5jZSBzdWZmZXJzIHdoZW4gZGVsZXRpbmcgcHJvcGVydGllc1xuXHRcdFx0Ly8gZnJvbSBET00gbm9kZXMsIHNvIHNldCB0byB1bmRlZmluZWQgaW5zdGVhZFxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzc4NjA3IChidWcgcmVzdHJpY3RlZClcblx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlbGV0ZSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRoYXNEYXRhOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cdFx0dmFyIGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdHJldHVybiBjYWNoZSAhPT0gdW5kZWZpbmVkICYmICFqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKTtcblx0fVxufTtcbnZhciBkYXRhUHJpdiA9IG5ldyBEYXRhKCk7XG5cbnZhciBkYXRhVXNlciA9IG5ldyBEYXRhKCk7XG5cblxuXG4vL1x0SW1wbGVtZW50YXRpb24gU3VtbWFyeVxuLy9cbi8vXHQxLiBFbmZvcmNlIEFQSSBzdXJmYWNlIGFuZCBzZW1hbnRpYyBjb21wYXRpYmlsaXR5IHdpdGggMS45LnggYnJhbmNoXG4vL1x0Mi4gSW1wcm92ZSB0aGUgbW9kdWxlJ3MgbWFpbnRhaW5hYmlsaXR5IGJ5IHJlZHVjaW5nIHRoZSBzdG9yYWdlXG4vL1x0XHRwYXRocyB0byBhIHNpbmdsZSBtZWNoYW5pc20uXG4vL1x0My4gVXNlIHRoZSBzYW1lIHNpbmdsZSBtZWNoYW5pc20gdG8gc3VwcG9ydCBcInByaXZhdGVcIiBhbmQgXCJ1c2VyXCIgZGF0YS5cbi8vXHQ0LiBfTmV2ZXJfIGV4cG9zZSBcInByaXZhdGVcIiBkYXRhIHRvIHVzZXIgY29kZSAoVE9ETzogRHJvcCBfZGF0YSwgX3JlbW92ZURhdGEpXG4vL1x0NS4gQXZvaWQgZXhwb3NpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvbiB1c2VyIG9iamVjdHMgKGVnLiBleHBhbmRvIHByb3BlcnRpZXMpXG4vL1x0Ni4gUHJvdmlkZSBhIGNsZWFyIHBhdGggZm9yIGltcGxlbWVudGF0aW9uIHVwZ3JhZGUgdG8gV2Vha01hcCBpbiAyMDE0XG5cbnZhciByYnJhY2UgPSAvXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC8sXG5cdHJtdWx0aURhc2ggPSAvW0EtWl0vZztcblxuZnVuY3Rpb24gZ2V0RGF0YSggZGF0YSApIHtcblx0aWYgKCBkYXRhID09PSBcInRydWVcIiApIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJmYWxzZVwiICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJudWxsXCIgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBPbmx5IGNvbnZlcnQgdG8gYSBudW1iZXIgaWYgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZ1xuXHRpZiAoIGRhdGEgPT09ICtkYXRhICsgXCJcIiApIHtcblx0XHRyZXR1cm4gK2RhdGE7XG5cdH1cblxuXHRpZiAoIHJicmFjZS50ZXN0KCBkYXRhICkgKSB7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2UoIGRhdGEgKTtcblx0fVxuXG5cdHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICkge1xuXHR2YXIgbmFtZTtcblxuXHQvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbnRlcm5hbGx5LCB0cnkgdG8gZmV0Y2ggYW55XG5cdC8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZVxuXHRpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdG5hbWUgPSBcImRhdGEtXCIgKyBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgXCItJCZcIiApLnRvTG93ZXJDYXNlKCk7XG5cdFx0ZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZGF0YSA9IGdldERhdGEoIGRhdGEgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge31cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyXG5cdFx0XHRkYXRhVXNlci5zZXQoIGVsZW0sIGtleSwgZGF0YSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGF0YTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuaGFzRGF0YSggZWxlbSApIHx8IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKTtcblx0fSxcblxuXHRkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVVzZXIucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH0sXG5cblx0Ly8gVE9ETzogTm93IHRoYXQgYWxsIGNhbGxzIHRvIF9kYXRhIGFuZCBfcmVtb3ZlRGF0YSBoYXZlIGJlZW4gcmVwbGFjZWRcblx0Ly8gd2l0aCBkaXJlY3QgY2FsbHMgdG8gZGF0YVByaXYgbWV0aG9kcywgdGhlc2UgY2FuIGJlIGRlcHJlY2F0ZWQuXG5cdF9kYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0X3JlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGF0YTogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0dmFyIGksIG5hbWUsIGRhdGEsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0YXR0cnMgPSBlbGVtICYmIGVsZW0uYXR0cmlidXRlcztcblxuXHRcdC8vIEdldHMgYWxsIHZhbHVlc1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHRoaXMubGVuZ3RoICkge1xuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtICk7XG5cblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICFkYXRhUHJpdi5nZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIgKSApIHtcblx0XHRcdFx0XHRpID0gYXR0cnMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBUaGUgYXR0cnMgZWxlbWVudHMgY2FuIGJlIG51bGwgKCMxNDg5NClcblx0XHRcdFx0XHRcdGlmICggYXR0cnNbIGkgXSApIHtcblx0XHRcdFx0XHRcdFx0bmFtZSA9IGF0dHJzWyBpIF0ubmFtZTtcblx0XHRcdFx0XHRcdFx0aWYgKCBuYW1lLmluZGV4T2YoIFwiZGF0YS1cIiApID09PSAwICkge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgPSBjYW1lbENhc2UoIG5hbWUuc2xpY2UoIDUgKSApO1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9XG5cblx0XHQvLyBTZXRzIG11bHRpcGxlIHZhbHVlc1xuXHRcdGlmICggdHlwZW9mIGtleSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBkYXRhO1xuXG5cdFx0XHQvLyBUaGUgY2FsbGluZyBqUXVlcnkgb2JqZWN0IChlbGVtZW50IG1hdGNoZXMpIGlzIG5vdCBlbXB0eVxuXHRcdFx0Ly8gKGFuZCB0aGVyZWZvcmUgaGFzIGFuIGVsZW1lbnQgYXBwZWFycyBhdCB0aGlzWyAwIF0pIGFuZCB0aGVcblx0XHRcdC8vIGB2YWx1ZWAgcGFyYW1ldGVyIHdhcyBub3QgdW5kZWZpbmVkLiBBbiBlbXB0eSBqUXVlcnkgb2JqZWN0XG5cdFx0XHQvLyB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBmb3IgZWxlbSA9IHRoaXNbIDAgXSB3aGljaCB3aWxsXG5cdFx0XHQvLyB0aHJvdyBhbiBleGNlcHRpb24gaWYgYW4gYXR0ZW1wdCB0byByZWFkIGEgZGF0YSBjYWNoZSBpcyBtYWRlLlxuXHRcdFx0aWYgKCBlbGVtICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBnZXQgZGF0YSBmcm9tIHRoZSBjYWNoZVxuXHRcdFx0XHQvLyBUaGUga2V5IHdpbGwgYWx3YXlzIGJlIGNhbWVsQ2FzZWQgaW4gRGF0YVxuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIFwiZGlzY292ZXJcIiB0aGUgZGF0YSBpblxuXHRcdFx0XHQvLyBIVE1MNSBjdXN0b20gZGF0YS0qIGF0dHJzXG5cdFx0XHRcdGRhdGEgPSBkYXRhQXR0ciggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2UgdHJpZWQgcmVhbGx5IGhhcmQsIGJ1dCB0aGUgZGF0YSBkb2Vzbid0IGV4aXN0LlxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCB0aGUgZGF0YS4uLlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBXZSBhbHdheXMgc3RvcmUgdGhlIGNhbWVsQ2FzZWQga2V5XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5LCB2YWx1ZSApO1xuXHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSwgbnVsbCwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkYXRhVXNlci5yZW1vdmUoIHRoaXMsIGtleSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBxdWV1ZTtcblxuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHR5cGUgPSAoIHR5cGUgfHwgXCJmeFwiICkgKyBcInF1ZXVlXCI7XG5cdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmdldCggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHQvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwXG5cdFx0XHRpZiAoIGRhdGEgKSB7XG5cdFx0XHRcdGlmICggIXF1ZXVlIHx8IEFycmF5LmlzQXJyYXkoIGRhdGEgKSApIHtcblx0XHRcdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cXVldWUucHVzaCggZGF0YSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcXVldWUgfHwgW107XG5cdFx0fVxuXHR9LFxuXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLFxuXHRcdFx0c3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsXG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCksXG5cdFx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSApLFxuXHRcdFx0bmV4dCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggZWxlbSwgdHlwZSApO1xuXHRcdFx0fTtcblxuXHRcdC8vIElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWxcblx0XHRpZiAoIGZuID09PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdHN0YXJ0TGVuZ3RoLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblxuXHRcdFx0Ly8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZ1xuXHRcdFx0Ly8gYXV0b21hdGljYWxseSBkZXF1ZXVlZFxuXHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgKSB7XG5cdFx0XHRcdHF1ZXVlLnVuc2hpZnQoIFwiaW5wcm9ncmVzc1wiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb25cblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0Zm4uY2FsbCggZWxlbSwgbmV4dCwgaG9va3MgKTtcblx0XHR9XG5cblx0XHRpZiAoICFzdGFydExlbmd0aCAmJiBob29rcyApIHtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gTm90IHB1YmxpYyAtIGdlbmVyYXRlIGEgcXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybiB0aGUgY3VycmVudCBvbmVcblx0X3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHZhciBrZXkgPSB0eXBlICsgXCJxdWV1ZUhvb2tzXCI7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmdldCggZWxlbSwga2V5ICkgfHwgZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBrZXksIHtcblx0XHRcdGVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKS5hZGQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFsgdHlwZSArIFwicXVldWVcIiwga2V5IF0gKTtcblx0XHRcdH0gKVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgc2V0dGVyID0gMjtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRkYXRhID0gdHlwZTtcblx0XHRcdHR5cGUgPSBcImZ4XCI7XG5cdFx0XHRzZXR0ZXItLTtcblx0XHR9XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPCBzZXR0ZXIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWyAwIF0sIHR5cGUgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMgOlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIGEgaG9va3MgZm9yIHRoaXMgcXVldWVcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgJiYgcXVldWVbIDAgXSAhPT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHR9LFxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0fSApO1xuXHR9LFxuXHRjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdH0sXG5cblx0Ly8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZVxuXHQvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdClcblx0cHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iaiApIHtcblx0XHR2YXIgdG1wLFxuXHRcdFx0Y291bnQgPSAxLFxuXHRcdFx0ZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGVsZW1lbnRzID0gdGhpcyxcblx0XHRcdGkgPSB0aGlzLmxlbmd0aCxcblx0XHRcdHJlc29sdmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhKCAtLWNvdW50ICkgKSB7XG5cdFx0XHRcdFx0ZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRvYmogPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0bXAgPSBkYXRhUHJpdi5nZXQoIGVsZW1lbnRzWyBpIF0sIHR5cGUgKyBcInF1ZXVlSG9va3NcIiApO1xuXHRcdFx0aWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkge1xuXHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHR0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJlc29sdmUoKTtcblx0XHRyZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7XG5cdH1cbn0gKTtcbnZhciBwbnVtID0gKCAvWystXT8oPzpcXGQqXFwufClcXGQrKD86W2VFXVsrLV0/XFxkK3wpLyApLnNvdXJjZTtcblxudmFyIHJjc3NOdW0gPSBuZXcgUmVnRXhwKCBcIl4oPzooWystXSk9fCkoXCIgKyBwbnVtICsgXCIpKFthLXolXSopJFwiLCBcImlcIiApO1xuXG5cbnZhciBjc3NFeHBhbmQgPSBbIFwiVG9wXCIsIFwiUmlnaHRcIiwgXCJCb3R0b21cIiwgXCJMZWZ0XCIgXTtcblxudmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuXG5cblx0dmFyIGlzQXR0YWNoZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApO1xuXHRcdH0sXG5cdFx0Y29tcG9zZWQgPSB7IGNvbXBvc2VkOiB0cnVlIH07XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4KywgaU9TIDEwLjAgLSAxMC4yIG9ubHlcblx0Ly8gQ2hlY2sgYXR0YWNobWVudCBhY3Jvc3Mgc2hhZG93IERPTSBib3VuZGFyaWVzIHdoZW4gcG9zc2libGUgKGdoLTM1MDQpXG5cdC8vIFN1cHBvcnQ6IGlPUyAxMC4wLTEwLjIgb25seVxuXHQvLyBFYXJseSBpT1MgMTAgdmVyc2lvbnMgc3VwcG9ydCBgYXR0YWNoU2hhZG93YCBidXQgbm90IGBnZXRSb290Tm9kZWAsXG5cdC8vIGxlYWRpbmcgdG8gZXJyb3JzLiBXZSBuZWVkIHRvIGNoZWNrIGZvciBgZ2V0Um9vdE5vZGVgLlxuXHRpZiAoIGRvY3VtZW50RWxlbWVudC5nZXRSb290Tm9kZSApIHtcblx0XHRpc0F0dGFjaGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKSB8fFxuXHRcdFx0XHRlbGVtLmdldFJvb3ROb2RlKCBjb21wb3NlZCApID09PSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0fTtcblx0fVxudmFyIGlzSGlkZGVuV2l0aGluVHJlZSA9IGZ1bmN0aW9uKCBlbGVtLCBlbCApIHtcblxuXHRcdC8vIGlzSGlkZGVuV2l0aGluVHJlZSBtaWdodCBiZSBjYWxsZWQgZnJvbSBqUXVlcnkjZmlsdGVyIGZ1bmN0aW9uO1xuXHRcdC8vIGluIHRoYXQgY2FzZSwgZWxlbWVudCB3aWxsIGJlIHNlY29uZCBhcmd1bWVudFxuXHRcdGVsZW0gPSBlbCB8fCBlbGVtO1xuXG5cdFx0Ly8gSW5saW5lIHN0eWxlIHRydW1wcyBhbGxcblx0XHRyZXR1cm4gZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIiB8fFxuXHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmXG5cblx0XHRcdC8vIE90aGVyd2lzZSwgY2hlY2sgY29tcHV0ZWQgc3R5bGVcblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MyAtIDQ1XG5cdFx0XHQvLyBEaXNjb25uZWN0ZWQgZWxlbWVudHMgY2FuIGhhdmUgY29tcHV0ZWQgZGlzcGxheTogbm9uZSwgc28gZmlyc3QgY29uZmlybSB0aGF0IGVsZW0gaXNcblx0XHRcdC8vIGluIHRoZSBkb2N1bWVudC5cblx0XHRcdGlzQXR0YWNoZWQoIGVsZW0gKSAmJlxuXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApID09PSBcIm5vbmVcIjtcblx0fTtcblxudmFyIHN3YXAgPSBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgY2FsbGJhY2ssIGFyZ3MgKSB7XG5cdHZhciByZXQsIG5hbWUsXG5cdFx0b2xkID0ge307XG5cblx0Ly8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1ZXMsIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmVzXG5cdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRvbGRbIG5hbWUgXSA9IGVsZW0uc3R5bGVbIG5hbWUgXTtcblx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSBvcHRpb25zWyBuYW1lIF07XG5cdH1cblxuXHRyZXQgPSBjYWxsYmFjay5hcHBseSggZWxlbSwgYXJncyB8fCBbXSApO1xuXG5cdC8vIFJldmVydCB0aGUgb2xkIHZhbHVlc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufTtcblxuXG5cblxuZnVuY3Rpb24gYWRqdXN0Q1NTKCBlbGVtLCBwcm9wLCB2YWx1ZVBhcnRzLCB0d2VlbiApIHtcblx0dmFyIGFkanVzdGVkLCBzY2FsZSxcblx0XHRtYXhJdGVyYXRpb25zID0gMjAsXG5cdFx0Y3VycmVudFZhbHVlID0gdHdlZW4gP1xuXHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5jdXIoKTtcblx0XHRcdH0gOlxuXHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wLCBcIlwiICk7XG5cdFx0XHR9LFxuXHRcdGluaXRpYWwgPSBjdXJyZW50VmFsdWUoKSxcblx0XHR1bml0ID0gdmFsdWVQYXJ0cyAmJiB2YWx1ZVBhcnRzWyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyBcIlwiIDogXCJweFwiICksXG5cblx0XHQvLyBTdGFydGluZyB2YWx1ZSBjb21wdXRhdGlvbiBpcyByZXF1aXJlZCBmb3IgcG90ZW50aWFsIHVuaXQgbWlzbWF0Y2hlc1xuXHRcdGluaXRpYWxJblVuaXQgPSBlbGVtLm5vZGVUeXBlICYmXG5cdFx0XHQoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSB8fCB1bml0ICE9PSBcInB4XCIgJiYgK2luaXRpYWwgKSAmJlxuXHRcdFx0cmNzc051bS5leGVjKCBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wICkgKTtcblxuXHRpZiAoIGluaXRpYWxJblVuaXQgJiYgaW5pdGlhbEluVW5pdFsgMyBdICE9PSB1bml0ICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTU0XG5cdFx0Ly8gSGFsdmUgdGhlIGl0ZXJhdGlvbiB0YXJnZXQgdmFsdWUgdG8gcHJldmVudCBpbnRlcmZlcmVuY2UgZnJvbSBDU1MgdXBwZXIgYm91bmRzIChnaC0yMTQ0KVxuXHRcdGluaXRpYWwgPSBpbml0aWFsIC8gMjtcblxuXHRcdC8vIFRydXN0IHVuaXRzIHJlcG9ydGVkIGJ5IGpRdWVyeS5jc3Ncblx0XHR1bml0ID0gdW5pdCB8fCBpbml0aWFsSW5Vbml0WyAzIF07XG5cblx0XHQvLyBJdGVyYXRpdmVseSBhcHByb3hpbWF0ZSBmcm9tIGEgbm9uemVybyBzdGFydGluZyBwb2ludFxuXHRcdGluaXRpYWxJblVuaXQgPSAraW5pdGlhbCB8fCAxO1xuXG5cdFx0d2hpbGUgKCBtYXhJdGVyYXRpb25zLS0gKSB7XG5cblx0XHRcdC8vIEV2YWx1YXRlIGFuZCB1cGRhdGUgb3VyIGJlc3QgZ3Vlc3MgKGRvdWJsaW5nIGd1ZXNzZXMgdGhhdCB6ZXJvIG91dCkuXG5cdFx0XHQvLyBGaW5pc2ggaWYgdGhlIHNjYWxlIGVxdWFscyBvciBjcm9zc2VzIDEgKG1ha2luZyB0aGUgb2xkKm5ldyBwcm9kdWN0IG5vbi1wb3NpdGl2ZSkuXG5cdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cdFx0XHRpZiAoICggMSAtIHNjYWxlICkgKiAoIDEgLSAoIHNjYWxlID0gY3VycmVudFZhbHVlKCkgLyBpbml0aWFsIHx8IDAuNSApICkgPD0gMCApIHtcblx0XHRcdFx0bWF4SXRlcmF0aW9ucyA9IDA7XG5cdFx0XHR9XG5cdFx0XHRpbml0aWFsSW5Vbml0ID0gaW5pdGlhbEluVW5pdCAvIHNjYWxlO1xuXG5cdFx0fVxuXG5cdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgKiAyO1xuXHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB3ZSB1cGRhdGUgdGhlIHR3ZWVuIHByb3BlcnRpZXMgbGF0ZXIgb25cblx0XHR2YWx1ZVBhcnRzID0gdmFsdWVQYXJ0cyB8fCBbXTtcblx0fVxuXG5cdGlmICggdmFsdWVQYXJ0cyApIHtcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWxJblVuaXQgfHwgK2luaXRpYWwgfHwgMDtcblxuXHRcdC8vIEFwcGx5IHJlbGF0aXZlIG9mZnNldCAoKz0vLT0pIGlmIHNwZWNpZmllZFxuXHRcdGFkanVzdGVkID0gdmFsdWVQYXJ0c1sgMSBdID9cblx0XHRcdGluaXRpYWxJblVuaXQgKyAoIHZhbHVlUGFydHNbIDEgXSArIDEgKSAqIHZhbHVlUGFydHNbIDIgXSA6XG5cdFx0XHQrdmFsdWVQYXJ0c1sgMiBdO1xuXHRcdGlmICggdHdlZW4gKSB7XG5cdFx0XHR0d2Vlbi51bml0ID0gdW5pdDtcblx0XHRcdHR3ZWVuLnN0YXJ0ID0gaW5pdGlhbEluVW5pdDtcblx0XHRcdHR3ZWVuLmVuZCA9IGFkanVzdGVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYWRqdXN0ZWQ7XG59XG5cblxudmFyIGRlZmF1bHREaXNwbGF5TWFwID0ge307XG5cbmZ1bmN0aW9uIGdldERlZmF1bHREaXNwbGF5KCBlbGVtICkge1xuXHR2YXIgdGVtcCxcblx0XHRkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQsXG5cdFx0bm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLFxuXHRcdGRpc3BsYXkgPSBkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXTtcblxuXHRpZiAoIGRpc3BsYXkgKSB7XG5cdFx0cmV0dXJuIGRpc3BsYXk7XG5cdH1cblxuXHR0ZW1wID0gZG9jLmJvZHkuYXBwZW5kQ2hpbGQoIGRvYy5jcmVhdGVFbGVtZW50KCBub2RlTmFtZSApICk7XG5cdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCB0ZW1wLCBcImRpc3BsYXlcIiApO1xuXG5cdHRlbXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggdGVtcCApO1xuXG5cdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0ZGlzcGxheSA9IFwiYmxvY2tcIjtcblx0fVxuXHRkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXSA9IGRpc3BsYXk7XG5cblx0cmV0dXJuIGRpc3BsYXk7XG59XG5cbmZ1bmN0aW9uIHNob3dIaWRlKCBlbGVtZW50cywgc2hvdyApIHtcblx0dmFyIGRpc3BsYXksIGVsZW0sXG5cdFx0dmFsdWVzID0gW10sXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblxuXHQvLyBEZXRlcm1pbmUgbmV3IGRpc3BsYXkgdmFsdWUgZm9yIGVsZW1lbnRzIHRoYXQgbmVlZCB0byBjaGFuZ2Vcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRlbGVtID0gZWxlbWVudHNbIGluZGV4IF07XG5cdFx0aWYgKCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXk7XG5cdFx0aWYgKCBzaG93ICkge1xuXG5cdFx0XHQvLyBTaW5jZSB3ZSBmb3JjZSB2aXNpYmlsaXR5IHVwb24gY2FzY2FkZS1oaWRkZW4gZWxlbWVudHMsIGFuIGltbWVkaWF0ZSAoYW5kIHNsb3cpXG5cdFx0XHQvLyBjaGVjayBpcyByZXF1aXJlZCBpbiB0aGlzIGZpcnN0IGxvb3AgdW5sZXNzIHdlIGhhdmUgYSBub25lbXB0eSBkaXNwbGF5IHZhbHVlIChlaXRoZXJcblx0XHRcdC8vIGlubGluZSBvciBhYm91dC10by1iZS1yZXN0b3JlZClcblx0XHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKSB8fCBudWxsO1xuXHRcdFx0XHRpZiAoICF2YWx1ZXNbIGluZGV4IF0gKSB7XG5cdFx0XHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwiXCIgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICkgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGdldERlZmF1bHREaXNwbGF5KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICggZGlzcGxheSAhPT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IFwibm9uZVwiO1xuXG5cdFx0XHRcdC8vIFJlbWVtYmVyIHdoYXQgd2UncmUgb3ZlcndyaXRpbmdcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCBlbGVtLCBcImRpc3BsYXlcIiwgZGlzcGxheSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFNldCB0aGUgZGlzcGxheSBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcCB0byBhdm9pZCBjb25zdGFudCByZWZsb3dcblx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRpZiAoIHZhbHVlc1sgaW5kZXggXSAhPSBudWxsICkge1xuXHRcdFx0ZWxlbWVudHNbIGluZGV4IF0uc3R5bGUuZGlzcGxheSA9IHZhbHVlc1sgaW5kZXggXTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudHM7XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0c2hvdzogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNob3dIaWRlKCB0aGlzLCB0cnVlICk7XG5cdH0sXG5cdGhpZGU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcyApO1xuXHR9LFxuXHR0b2dnbGU6IGZ1bmN0aW9uKCBzdGF0ZSApIHtcblx0XHRpZiAoIHR5cGVvZiBzdGF0ZSA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGUgPyB0aGlzLnNob3coKSA6IHRoaXMuaGlkZSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBpc0hpZGRlbldpdGhpblRyZWUoIHRoaXMgKSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuc2hvdygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuaGlkZSgpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xudmFyIHJjaGVja2FibGVUeXBlID0gKCAvXig/OmNoZWNrYm94fHJhZGlvKSQvaSApO1xuXG52YXIgcnRhZ05hbWUgPSAoIC88KFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKikvaSApO1xuXG52YXIgcnNjcmlwdFR5cGUgPSAoIC9eJHxebW9kdWxlJHxcXC8oPzpqYXZhfGVjbWEpc2NyaXB0L2kgKTtcblxuXG5cbi8vIFdlIGhhdmUgdG8gY2xvc2UgdGhlc2UgdGFncyB0byBzdXBwb3J0IFhIVE1MICgjMTMyMDApXG52YXIgd3JhcE1hcCA9IHtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRvcHRpb246IFsgMSwgXCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+XCIsIFwiPC9zZWxlY3Q+XCIgXSxcblxuXHQvLyBYSFRNTCBwYXJzZXJzIGRvIG5vdCBtYWdpY2FsbHkgaW5zZXJ0IGVsZW1lbnRzIGluIHRoZVxuXHQvLyBzYW1lIHdheSB0aGF0IHRhZyBzb3VwIHBhcnNlcnMgZG8uIFNvIHdlIGNhbm5vdCBzaG9ydGVuXG5cdC8vIHRoaXMgYnkgb21pdHRpbmcgPHRib2R5PiBvciBvdGhlciByZXF1aXJlZCBlbGVtZW50cy5cblx0dGhlYWQ6IFsgMSwgXCI8dGFibGU+XCIsIFwiPC90YWJsZT5cIiBdLFxuXHRjb2w6IFsgMiwgXCI8dGFibGU+PGNvbGdyb3VwPlwiLCBcIjwvY29sZ3JvdXA+PC90YWJsZT5cIiBdLFxuXHR0cjogWyAyLCBcIjx0YWJsZT48dGJvZHk+XCIsIFwiPC90Ym9keT48L3RhYmxlPlwiIF0sXG5cdHRkOiBbIDMsIFwiPHRhYmxlPjx0Ym9keT48dHI+XCIsIFwiPC90cj48L3Rib2R5PjwvdGFibGU+XCIgXSxcblxuXHRfZGVmYXVsdDogWyAwLCBcIlwiLCBcIlwiIF1cbn07XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG53cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb247XG5cbndyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7XG53cmFwTWFwLnRoID0gd3JhcE1hcC50ZDtcblxuXG5mdW5jdGlvbiBnZXRBbGwoIGNvbnRleHQsIHRhZyApIHtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdC8vIFVzZSB0eXBlb2YgdG8gYXZvaWQgemVyby1hcmd1bWVudCBtZXRob2QgaW52b2NhdGlvbiBvbiBob3N0IG9iamVjdHMgKCMxNTE1MSlcblx0dmFyIHJldDtcblxuXHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyB8fCBcIipcIiApO1xuXG5cdH0gZWxzZSBpZiAoIHR5cGVvZiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0cmV0ID0gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2Uge1xuXHRcdHJldCA9IFtdO1xuXHR9XG5cblx0aWYgKCB0YWcgPT09IHVuZGVmaW5lZCB8fCB0YWcgJiYgbm9kZU5hbWUoIGNvbnRleHQsIHRhZyApICkge1xuXHRcdHJldHVybiBqUXVlcnkubWVyZ2UoIFsgY29udGV4dCBdLCByZXQgKTtcblx0fVxuXG5cdHJldHVybiByZXQ7XG59XG5cblxuLy8gTWFyayBzY3JpcHRzIGFzIGhhdmluZyBhbHJlYWR5IGJlZW4gZXZhbHVhdGVkXG5mdW5jdGlvbiBzZXRHbG9iYWxFdmFsKCBlbGVtcywgcmVmRWxlbWVudHMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsID0gZWxlbXMubGVuZ3RoO1xuXG5cdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRkYXRhUHJpdi5zZXQoXG5cdFx0XHRlbGVtc1sgaSBdLFxuXHRcdFx0XCJnbG9iYWxFdmFsXCIsXG5cdFx0XHQhcmVmRWxlbWVudHMgfHwgZGF0YVByaXYuZ2V0KCByZWZFbGVtZW50c1sgaSBdLCBcImdsb2JhbEV2YWxcIiApXG5cdFx0KTtcblx0fVxufVxuXG5cbnZhciByaHRtbCA9IC88fCYjP1xcdys7LztcblxuZnVuY3Rpb24gYnVpbGRGcmFnbWVudCggZWxlbXMsIGNvbnRleHQsIHNjcmlwdHMsIHNlbGVjdGlvbiwgaWdub3JlZCApIHtcblx0dmFyIGVsZW0sIHRtcCwgdGFnLCB3cmFwLCBhdHRhY2hlZCwgaixcblx0XHRmcmFnbWVudCA9IGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuXHRcdG5vZGVzID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1zWyBpIF07XG5cblx0XHRpZiAoIGVsZW0gfHwgZWxlbSA9PT0gMCApIHtcblxuXHRcdFx0Ly8gQWRkIG5vZGVzIGRpcmVjdGx5XG5cdFx0XHRpZiAoIHRvVHlwZSggZWxlbSApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIGVsZW0ubm9kZVR5cGUgPyBbIGVsZW0gXSA6IGVsZW0gKTtcblxuXHRcdFx0Ly8gQ29udmVydCBub24taHRtbCBpbnRvIGEgdGV4dCBub2RlXG5cdFx0XHR9IGVsc2UgaWYgKCAhcmh0bWwudGVzdCggZWxlbSApICkge1xuXHRcdFx0XHRub2Rlcy5wdXNoKCBjb250ZXh0LmNyZWF0ZVRleHROb2RlKCBlbGVtICkgKTtcblxuXHRcdFx0Ly8gQ29udmVydCBodG1sIGludG8gRE9NIG5vZGVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0bXAgPSB0bXAgfHwgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGNvbnRleHQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICk7XG5cblx0XHRcdFx0Ly8gRGVzZXJpYWxpemUgYSBzdGFuZGFyZCByZXByZXNlbnRhdGlvblxuXHRcdFx0XHR0YWcgPSAoIHJ0YWdOYW1lLmV4ZWMoIGVsZW0gKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0d3JhcCA9IHdyYXBNYXBbIHRhZyBdIHx8IHdyYXBNYXAuX2RlZmF1bHQ7XG5cdFx0XHRcdHRtcC5pbm5lckhUTUwgPSB3cmFwWyAxIF0gKyBqUXVlcnkuaHRtbFByZWZpbHRlciggZWxlbSApICsgd3JhcFsgMiBdO1xuXG5cdFx0XHRcdC8vIERlc2NlbmQgdGhyb3VnaCB3cmFwcGVycyB0byB0aGUgcmlnaHQgY29udGVudFxuXHRcdFx0XHRqID0gd3JhcFsgMCBdO1xuXHRcdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0XHR0bXAgPSB0bXAubGFzdENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBub2RlcywgdG1wLmNoaWxkTm9kZXMgKTtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB0aGUgdG9wLWxldmVsIGNvbnRhaW5lclxuXHRcdFx0XHR0bXAgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0XHRcdC8vIEVuc3VyZSB0aGUgY3JlYXRlZCBub2RlcyBhcmUgb3JwaGFuZWQgKCMxMjM5Milcblx0XHRcdFx0dG1wLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZW1vdmUgd3JhcHBlciBmcm9tIGZyYWdtZW50XG5cdGZyYWdtZW50LnRleHRDb250ZW50ID0gXCJcIjtcblxuXHRpID0gMDtcblx0d2hpbGUgKCAoIGVsZW0gPSBub2Rlc1sgaSsrIF0gKSApIHtcblxuXHRcdC8vIFNraXAgZWxlbWVudHMgYWxyZWFkeSBpbiB0aGUgY29udGV4dCBjb2xsZWN0aW9uICh0cmFjLTQwODcpXG5cdFx0aWYgKCBzZWxlY3Rpb24gJiYgalF1ZXJ5LmluQXJyYXkoIGVsZW0sIHNlbGVjdGlvbiApID4gLTEgKSB7XG5cdFx0XHRpZiAoIGlnbm9yZWQgKSB7XG5cdFx0XHRcdGlnbm9yZWQucHVzaCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0YXR0YWNoZWQgPSBpc0F0dGFjaGVkKCBlbGVtICk7XG5cblx0XHQvLyBBcHBlbmQgdG8gZnJhZ21lbnRcblx0XHR0bXAgPSBnZXRBbGwoIGZyYWdtZW50LmFwcGVuZENoaWxkKCBlbGVtICksIFwic2NyaXB0XCIgKTtcblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRpZiAoIGF0dGFjaGVkICkge1xuXHRcdFx0c2V0R2xvYmFsRXZhbCggdG1wICk7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FwdHVyZSBleGVjdXRhYmxlc1xuXHRcdGlmICggc2NyaXB0cyApIHtcblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0bXBbIGorKyBdICkgKSB7XG5cdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggZWxlbS50eXBlIHx8IFwiXCIgKSApIHtcblx0XHRcdFx0XHRzY3JpcHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmcmFnbWVudDtcbn1cblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0ZGl2ID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApLFxuXHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seVxuXHQvLyBDaGVjayBzdGF0ZSBsb3N0IGlmIHRoZSBuYW1lIGlzIHNldCAoIzExMjE3KVxuXHQvLyBTdXBwb3J0OiBXaW5kb3dzIFdlYiBBcHBzIChXV0EpXG5cdC8vIGBuYW1lYCBhbmQgYHR5cGVgIG11c3QgdXNlIC5zZXRBdHRyaWJ1dGUgZm9yIFdXQSAoIzE0OTAxKVxuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcInJhZGlvXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcImNoZWNrZWRcIiwgXCJjaGVja2VkXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJ0XCIgKTtcblxuXHRkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSBvbmx5XG5cdC8vIE9sZGVyIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGluIGZyYWdtZW50c1xuXHRzdXBwb3J0LmNoZWNrQ2xvbmUgPSBkaXYuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmNoZWNrZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIE1ha2Ugc3VyZSB0ZXh0YXJlYSAoYW5kIGNoZWNrYm94KSBkZWZhdWx0VmFsdWUgaXMgcHJvcGVybHkgY2xvbmVkXG5cdGRpdi5pbm5lckhUTUwgPSBcIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT5cIjtcblx0c3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9ICEhZGl2LmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWU7XG59ICkoKTtcblxuXG52YXJcblx0cmtleUV2ZW50ID0gL15rZXkvLFxuXHRybW91c2VFdmVudCA9IC9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudXxkcmFnfGRyb3ApfGNsaWNrLyxcblx0cnR5cGVuYW1lc3BhY2UgPSAvXihbXi5dKikoPzpcXC4oLispfCkvO1xuXG5mdW5jdGlvbiByZXR1cm5UcnVlKCkge1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmV0dXJuRmFsc2UoKSB7XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLy8gU3VwcG9ydDogSUUgPD05IC0gMTErXG4vLyBmb2N1cygpIGFuZCBibHVyKCkgYXJlIGFzeW5jaHJvbm91cywgZXhjZXB0IHdoZW4gdGhleSBhcmUgbm8tb3AuXG4vLyBTbyBleHBlY3QgZm9jdXMgdG8gYmUgc3luY2hyb25vdXMgd2hlbiB0aGUgZWxlbWVudCBpcyBhbHJlYWR5IGFjdGl2ZSxcbi8vIGFuZCBibHVyIHRvIGJlIHN5bmNocm9ub3VzIHdoZW4gdGhlIGVsZW1lbnQgaXMgbm90IGFscmVhZHkgYWN0aXZlLlxuLy8gKGZvY3VzIGFuZCBibHVyIGFyZSBhbHdheXMgc3luY2hyb25vdXMgaW4gb3RoZXIgc3VwcG9ydGVkIGJyb3dzZXJzLFxuLy8gdGhpcyBqdXN0IGRlZmluZXMgd2hlbiB3ZSBjYW4gY291bnQgb24gaXQpLlxuZnVuY3Rpb24gZXhwZWN0U3luYyggZWxlbSwgdHlwZSApIHtcblx0cmV0dXJuICggZWxlbSA9PT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSApID09PSAoIHR5cGUgPT09IFwiZm9jdXNcIiApO1xufVxuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuLy8gQWNjZXNzaW5nIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgY2FuIHRocm93IHVuZXhwZWN0ZWRseVxuLy8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEzMzkzXG5mdW5jdGlvbiBzYWZlQWN0aXZlRWxlbWVudCgpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblx0fSBjYXRjaCAoIGVyciApIHsgfVxufVxuXG5mdW5jdGlvbiBvbiggZWxlbSwgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgb25lICkge1xuXHR2YXIgb3JpZ0ZuLCB0eXBlO1xuXG5cdC8vIFR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVyc1xuXHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vICggdHlwZXMtT2JqZWN0LCBzZWxlY3RvciwgZGF0YSApXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtT2JqZWN0LCBkYXRhIClcblx0XHRcdGRhdGEgPSBkYXRhIHx8IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRvbiggZWxlbSwgdHlwZSwgc2VsZWN0b3IsIGRhdGEsIHR5cGVzWyB0eXBlIF0sIG9uZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gZWxlbTtcblx0fVxuXG5cdGlmICggZGF0YSA9PSBudWxsICYmIGZuID09IG51bGwgKSB7XG5cblx0XHQvLyAoIHR5cGVzLCBmbiApXG5cdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRkYXRhID0gc2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoIGZuID09IG51bGwgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMsIHNlbGVjdG9yLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vICggdHlwZXMsIGRhdGEsIGZuIClcblx0XHRcdGZuID0gZGF0YTtcblx0XHRcdGRhdGEgPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHR9IGVsc2UgaWYgKCAhZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIG9uZSA9PT0gMSApIHtcblx0XHRvcmlnRm4gPSBmbjtcblx0XHRmbiA9IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0Ly8gQ2FuIHVzZSBhbiBlbXB0eSBzZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5zIHRoZSBpbmZvXG5cdFx0XHRqUXVlcnkoKS5vZmYoIGV2ZW50ICk7XG5cdFx0XHRyZXR1cm4gb3JpZ0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9O1xuXG5cdFx0Ly8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1c2luZyBvcmlnRm5cblx0XHRmbi5ndWlkID0gb3JpZ0ZuLmd1aWQgfHwgKCBvcmlnRm4uZ3VpZCA9IGpRdWVyeS5ndWlkKysgKTtcblx0fVxuXHRyZXR1cm4gZWxlbS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlcywgZm4sIGRhdGEsIHNlbGVjdG9yICk7XG5cdH0gKTtcbn1cblxuLypcbiAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGV2ZW50cyAtLSBub3QgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS5cbiAqIFByb3BzIHRvIERlYW4gRWR3YXJkcycgYWRkRXZlbnQgbGlicmFyeSBmb3IgbWFueSBvZiB0aGUgaWRlYXMuXG4gKi9cbmpRdWVyeS5ldmVudCA9IHtcblxuXHRnbG9iYWw6IHt9LFxuXG5cdGFkZDogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBkYXRhLCBzZWxlY3RvciApIHtcblxuXHRcdHZhciBoYW5kbGVPYmpJbiwgZXZlbnRIYW5kbGUsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdC8vIERvbid0IGF0dGFjaCBldmVudHMgdG8gbm9EYXRhIG9yIHRleHQvY29tbWVudCBub2RlcyAoYnV0IGFsbG93IHBsYWluIG9iamVjdHMpXG5cdFx0aWYgKCAhZWxlbURhdGEgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGVyIGNhbiBwYXNzIGluIGFuIG9iamVjdCBvZiBjdXN0b20gZGF0YSBpbiBsaWV1IG9mIHRoZSBoYW5kbGVyXG5cdFx0aWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7XG5cdFx0XHRoYW5kbGVPYmpJbiA9IGhhbmRsZXI7XG5cdFx0XHRoYW5kbGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjtcblx0XHRcdHNlbGVjdG9yID0gaGFuZGxlT2JqSW4uc2VsZWN0b3I7XG5cdFx0fVxuXG5cdFx0Ly8gRW5zdXJlIHRoYXQgaW52YWxpZCBzZWxlY3RvcnMgdGhyb3cgZXhjZXB0aW9ucyBhdCBhdHRhY2ggdGltZVxuXHRcdC8vIEV2YWx1YXRlIGFnYWluc3QgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgZWxlbSBpcyBhIG5vbi1lbGVtZW50IG5vZGUgKGUuZy4sIGRvY3VtZW50KVxuXHRcdGlmICggc2VsZWN0b3IgKSB7XG5cdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGRvY3VtZW50RWxlbWVudCwgc2VsZWN0b3IgKTtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXJcblx0XHRpZiAoICFoYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRoYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrO1xuXHRcdH1cblxuXHRcdC8vIEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBzdHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmlyc3Rcblx0XHRpZiAoICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0ZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzID0ge307XG5cdFx0fVxuXHRcdGlmICggISggZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgKSApIHtcblx0XHRcdGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlID0gZnVuY3Rpb24oIGUgKSB7XG5cblx0XHRcdFx0Ly8gRGlzY2FyZCB0aGUgc2Vjb25kIGV2ZW50IG9mIGEgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoKSBhbmRcblx0XHRcdFx0Ly8gd2hlbiBhbiBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgYSBwYWdlIGhhcyB1bmxvYWRlZFxuXHRcdFx0XHRyZXR1cm4gdHlwZW9mIGpRdWVyeSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICE9PSBlLnR5cGUgP1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5kaXNwYXRjaC5hcHBseSggZWxlbSwgYXJndW1lbnRzICkgOiB1bmRlZmluZWQ7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2Vcblx0XHR0eXBlcyA9ICggdHlwZXMgfHwgXCJcIiApLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cdFx0dCA9IHR5cGVzLmxlbmd0aDtcblx0XHR3aGlsZSAoIHQtLSApIHtcblx0XHRcdHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTtcblx0XHRcdHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdO1xuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgXCJcIiApLnNwbGl0KCBcIi5cIiApLnNvcnQoKTtcblxuXHRcdFx0Ly8gVGhlcmUgKm11c3QqIGJlIGEgdHlwZSwgbm8gYXR0YWNoaW5nIG5hbWVzcGFjZS1vbmx5IGhhbmRsZXJzXG5cdFx0XHRpZiAoICF0eXBlICkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgZXZlbnQgY2hhbmdlcyBpdHMgdHlwZSwgdXNlIHRoZSBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgY2hhbmdlZCB0eXBlXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gSWYgc2VsZWN0b3IgZGVmaW5lZCwgZGV0ZXJtaW5lIHNwZWNpYWwgZXZlbnQgYXBpIHR5cGUsIG90aGVyd2lzZSBnaXZlbiB0eXBlXG5cdFx0XHR0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7XG5cblx0XHRcdC8vIFVwZGF0ZSBzcGVjaWFsIGJhc2VkIG9uIG5ld2x5IHJlc2V0IHR5cGVcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXG5cdFx0XHQvLyBoYW5kbGVPYmogaXMgcGFzc2VkIHRvIGFsbCBldmVudCBoYW5kbGVyc1xuXHRcdFx0aGFuZGxlT2JqID0galF1ZXJ5LmV4dGVuZCgge1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRvcmlnVHlwZTogb3JpZ1R5cGUsXG5cdFx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRcdGhhbmRsZXI6IGhhbmRsZXIsXG5cdFx0XHRcdGd1aWQ6IGhhbmRsZXIuZ3VpZCxcblx0XHRcdFx0c2VsZWN0b3I6IHNlbGVjdG9yLFxuXHRcdFx0XHRuZWVkc0NvbnRleHQ6IHNlbGVjdG9yICYmIGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApLFxuXHRcdFx0XHRuYW1lc3BhY2U6IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKVxuXHRcdFx0fSwgaGFuZGxlT2JqSW4gKTtcblxuXHRcdFx0Ly8gSW5pdCB0aGUgZXZlbnQgaGFuZGxlciBxdWV1ZSBpZiB3ZSdyZSB0aGUgZmlyc3Rcblx0XHRcdGlmICggISggaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSApICkge1xuXHRcdFx0XHRoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdID0gW107XG5cdFx0XHRcdGhhbmRsZXJzLmRlbGVnYXRlQ291bnQgPSAwO1xuXG5cdFx0XHRcdC8vIE9ubHkgdXNlIGFkZEV2ZW50TGlzdGVuZXIgaWYgdGhlIHNwZWNpYWwgZXZlbnRzIGhhbmRsZXIgcmV0dXJucyBmYWxzZVxuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnNldHVwIHx8XG5cdFx0XHRcdFx0c3BlY2lhbC5zZXR1cC5jYWxsKCBlbGVtLCBkYXRhLCBuYW1lc3BhY2VzLCBldmVudEhhbmRsZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdGlmICggZWxlbS5hZGRFdmVudExpc3RlbmVyICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBldmVudEhhbmRsZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHNwZWNpYWwuYWRkICkge1xuXHRcdFx0XHRzcGVjaWFsLmFkZC5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcblxuXHRcdFx0XHRpZiAoICFoYW5kbGVPYmouaGFuZGxlci5ndWlkICkge1xuXHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyLmd1aWQgPSBoYW5kbGVyLmd1aWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIHRvIHRoZSBlbGVtZW50J3MgaGFuZGxlciBsaXN0LCBkZWxlZ2F0ZXMgaW4gZnJvbnRcblx0XHRcdGlmICggc2VsZWN0b3IgKSB7XG5cdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaGFuZGxlcnMuZGVsZWdhdGVDb3VudCsrLCAwLCBoYW5kbGVPYmogKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBLZWVwIHRyYWNrIG9mIHdoaWNoIGV2ZW50cyBoYXZlIGV2ZXIgYmVlbiB1c2VkLCBmb3IgZXZlbnQgb3B0aW1pemF0aW9uXG5cdFx0XHRqUXVlcnkuZXZlbnQuZ2xvYmFsWyB0eXBlIF0gPSB0cnVlO1xuXHRcdH1cblxuXHR9LFxuXG5cdC8vIERldGFjaCBhbiBldmVudCBvciBzZXQgb2YgZXZlbnRzIGZyb20gYW4gZWxlbWVudFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgc2VsZWN0b3IsIG1hcHBlZFR5cGVzICkge1xuXG5cdFx0dmFyIGosIG9yaWdDb3VudCwgdG1wLFxuXHRcdFx0ZXZlbnRzLCB0LCBoYW5kbGVPYmosXG5cdFx0XHRzcGVjaWFsLCBoYW5kbGVycywgdHlwZSwgbmFtZXNwYWNlcywgb3JpZ1R5cGUsXG5cdFx0XHRlbGVtRGF0YSA9IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKSAmJiBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdGlmICggIWVsZW1EYXRhIHx8ICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIE9uY2UgZm9yIGVhY2ggdHlwZS5uYW1lc3BhY2UgaW4gdHlwZXM7IHR5cGUgbWF5IGJlIG9taXR0ZWRcblx0XHR0eXBlcyA9ICggdHlwZXMgfHwgXCJcIiApLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cdFx0dCA9IHR5cGVzLmxlbmd0aDtcblx0XHR3aGlsZSAoIHQtLSApIHtcblx0XHRcdHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTtcblx0XHRcdHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdO1xuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgXCJcIiApLnNwbGl0KCBcIi5cIiApLnNvcnQoKTtcblxuXHRcdFx0Ly8gVW5iaW5kIGFsbCBldmVudHMgKG9uIHRoaXMgbmFtZXNwYWNlLCBpZiBwcm92aWRlZCkgZm9yIHRoZSBlbGVtZW50XG5cdFx0XHRpZiAoICF0eXBlICkge1xuXHRcdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICsgdHlwZXNbIHQgXSwgaGFuZGxlciwgc2VsZWN0b3IsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0XHR0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7XG5cdFx0XHRoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdIHx8IFtdO1xuXHRcdFx0dG1wID0gdG1wWyAyIF0gJiZcblx0XHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICk7XG5cblx0XHRcdC8vIFJlbW92ZSBtYXRjaGluZyBldmVudHNcblx0XHRcdG9yaWdDb3VudCA9IGogPSBoYW5kbGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGogXTtcblxuXHRcdFx0XHRpZiAoICggbWFwcGVkVHlwZXMgfHwgb3JpZ1R5cGUgPT09IGhhbmRsZU9iai5vcmlnVHlwZSApICYmXG5cdFx0XHRcdFx0KCAhaGFuZGxlciB8fCBoYW5kbGVyLmd1aWQgPT09IGhhbmRsZU9iai5ndWlkICkgJiZcblx0XHRcdFx0XHQoICF0bXAgfHwgdG1wLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApICYmXG5cdFx0XHRcdFx0KCAhc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IGhhbmRsZU9iai5zZWxlY3RvciB8fFxuXHRcdFx0XHRcdFx0c2VsZWN0b3IgPT09IFwiKipcIiAmJiBoYW5kbGVPYmouc2VsZWN0b3IgKSApIHtcblx0XHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGosIDEgKTtcblxuXHRcdFx0XHRcdGlmICggaGFuZGxlT2JqLnNlbGVjdG9yICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudC0tO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIHNwZWNpYWwucmVtb3ZlICkge1xuXHRcdFx0XHRcdFx0c3BlY2lhbC5yZW1vdmUuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlbW92ZSBnZW5lcmljIGV2ZW50IGhhbmRsZXIgaWYgd2UgcmVtb3ZlZCBzb21ldGhpbmcgYW5kIG5vIG1vcmUgaGFuZGxlcnMgZXhpc3Rcblx0XHRcdC8vIChhdm9pZHMgcG90ZW50aWFsIGZvciBlbmRsZXNzIHJlY3Vyc2lvbiBkdXJpbmcgcmVtb3ZhbCBvZiBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzKVxuXHRcdFx0aWYgKCBvcmlnQ291bnQgJiYgIWhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC50ZWFyZG93biB8fFxuXHRcdFx0XHRcdHNwZWNpYWwudGVhcmRvd24uY2FsbCggZWxlbSwgbmFtZXNwYWNlcywgZWxlbURhdGEuaGFuZGxlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBlbGVtRGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRlbGV0ZSBldmVudHNbIHR5cGUgXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgZGF0YSBhbmQgdGhlIGV4cGFuZG8gaWYgaXQncyBubyBsb25nZXIgdXNlZFxuXHRcdGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGV2ZW50cyApICkge1xuXHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBcImhhbmRsZSBldmVudHNcIiApO1xuXHRcdH1cblx0fSxcblxuXHRkaXNwYXRjaDogZnVuY3Rpb24oIG5hdGl2ZUV2ZW50ICkge1xuXG5cdFx0Ly8gTWFrZSBhIHdyaXRhYmxlIGpRdWVyeS5FdmVudCBmcm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0XG5cdFx0dmFyIGV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggbmF0aXZlRXZlbnQgKTtcblxuXHRcdHZhciBpLCBqLCByZXQsIG1hdGNoZWQsIGhhbmRsZU9iaiwgaGFuZGxlclF1ZXVlLFxuXHRcdFx0YXJncyA9IG5ldyBBcnJheSggYXJndW1lbnRzLmxlbmd0aCApLFxuXHRcdFx0aGFuZGxlcnMgPSAoIGRhdGFQcml2LmdldCggdGhpcywgXCJldmVudHNcIiApIHx8IHt9IClbIGV2ZW50LnR5cGUgXSB8fCBbXSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZXZlbnQudHlwZSBdIHx8IHt9O1xuXG5cdFx0Ly8gVXNlIHRoZSBmaXgtZWQgalF1ZXJ5LkV2ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUgZXZlbnRcblx0XHRhcmdzWyAwIF0gPSBldmVudDtcblxuXHRcdGZvciAoIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrICkge1xuXHRcdFx0YXJnc1sgaSBdID0gYXJndW1lbnRzWyBpIF07XG5cdFx0fVxuXG5cdFx0ZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzO1xuXG5cdFx0Ly8gQ2FsbCB0aGUgcHJlRGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlLCBhbmQgbGV0IGl0IGJhaWwgaWYgZGVzaXJlZFxuXHRcdGlmICggc3BlY2lhbC5wcmVEaXNwYXRjaCAmJiBzcGVjaWFsLnByZURpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERldGVybWluZSBoYW5kbGVyc1xuXHRcdGhhbmRsZXJRdWV1ZSA9IGpRdWVyeS5ldmVudC5oYW5kbGVycy5jYWxsKCB0aGlzLCBldmVudCwgaGFuZGxlcnMgKTtcblxuXHRcdC8vIFJ1biBkZWxlZ2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdhdGlvbiBiZW5lYXRoIHVzXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIG1hdGNoZWQgPSBoYW5kbGVyUXVldWVbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRldmVudC5jdXJyZW50VGFyZ2V0ID0gbWF0Y2hlZC5lbGVtO1xuXG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBoYW5kbGVPYmogPSBtYXRjaGVkLmhhbmRsZXJzWyBqKysgXSApICYmXG5cdFx0XHRcdCFldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXG5cdFx0XHRcdC8vIElmIHRoZSBldmVudCBpcyBuYW1lc3BhY2VkLCB0aGVuIGVhY2ggaGFuZGxlciBpcyBvbmx5IGludm9rZWQgaWYgaXQgaXNcblx0XHRcdFx0Ly8gc3BlY2lhbGx5IHVuaXZlcnNhbCBvciBpdHMgbmFtZXNwYWNlcyBhcmUgYSBzdXBlcnNldCBvZiB0aGUgZXZlbnQncy5cblx0XHRcdFx0aWYgKCAhZXZlbnQucm5hbWVzcGFjZSB8fCBoYW5kbGVPYmoubmFtZXNwYWNlID09PSBmYWxzZSB8fFxuXHRcdFx0XHRcdGV2ZW50LnJuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkge1xuXG5cdFx0XHRcdFx0ZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqO1xuXHRcdFx0XHRcdGV2ZW50LmRhdGEgPSBoYW5kbGVPYmouZGF0YTtcblxuXHRcdFx0XHRcdHJldCA9ICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgaGFuZGxlT2JqLm9yaWdUeXBlIF0gfHwge30gKS5oYW5kbGUgfHxcblx0XHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyICkuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApO1xuXG5cdFx0XHRcdFx0aWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdGlmICggKCBldmVudC5yZXN1bHQgPSByZXQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhbGwgdGhlIHBvc3REaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGVcblx0XHRpZiAoIHNwZWNpYWwucG9zdERpc3BhdGNoICkge1xuXHRcdFx0c3BlY2lhbC5wb3N0RGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdGhhbmRsZXJzOiBmdW5jdGlvbiggZXZlbnQsIGhhbmRsZXJzICkge1xuXHRcdHZhciBpLCBoYW5kbGVPYmosIHNlbCwgbWF0Y2hlZEhhbmRsZXJzLCBtYXRjaGVkU2VsZWN0b3JzLFxuXHRcdFx0aGFuZGxlclF1ZXVlID0gW10sXG5cdFx0XHRkZWxlZ2F0ZUNvdW50ID0gaGFuZGxlcnMuZGVsZWdhdGVDb3VudCxcblx0XHRcdGN1ciA9IGV2ZW50LnRhcmdldDtcblxuXHRcdC8vIEZpbmQgZGVsZWdhdGUgaGFuZGxlcnNcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05XG5cdFx0XHQvLyBCbGFjay1ob2xlIFNWRyA8dXNlPiBpbnN0YW5jZSB0cmVlcyAodHJhYy0xMzE4MClcblx0XHRcdGN1ci5ub2RlVHlwZSAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDJcblx0XHRcdC8vIFN1cHByZXNzIHNwZWMtdmlvbGF0aW5nIGNsaWNrcyBpbmRpY2F0aW5nIGEgbm9uLXByaW1hcnkgcG9pbnRlciBidXR0b24gKHRyYWMtMzg2MSlcblx0XHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50LXR5cGUtY2xpY2tcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExIG9ubHlcblx0XHRcdC8vIC4uLmJ1dCBub3QgYXJyb3cga2V5IFwiY2xpY2tzXCIgb2YgcmFkaW8gaW5wdXRzLCB3aGljaCBjYW4gaGF2ZSBgYnV0dG9uYCAtMSAoZ2gtMjM0Mylcblx0XHRcdCEoIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBldmVudC5idXR0b24gPj0gMSApICkge1xuXG5cdFx0XHRmb3IgKCA7IGN1ciAhPT0gdGhpczsgY3VyID0gY3VyLnBhcmVudE5vZGUgfHwgdGhpcyApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjaGVjayBub24tZWxlbWVudHMgKCMxMzIwOClcblx0XHRcdFx0Ly8gRG9uJ3QgcHJvY2VzcyBjbGlja3Mgb24gZGlzYWJsZWQgZWxlbWVudHMgKCM2OTExLCAjODE2NSwgIzExMzgyLCAjMTE3NjQpXG5cdFx0XHRcdGlmICggY3VyLm5vZGVUeXBlID09PSAxICYmICEoIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBjdXIuZGlzYWJsZWQgPT09IHRydWUgKSApIHtcblx0XHRcdFx0XHRtYXRjaGVkSGFuZGxlcnMgPSBbXTtcblx0XHRcdFx0XHRtYXRjaGVkU2VsZWN0b3JzID0ge307XG5cdFx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBkZWxlZ2F0ZUNvdW50OyBpKysgKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaSBdO1xuXG5cdFx0XHRcdFx0XHQvLyBEb24ndCBjb25mbGljdCB3aXRoIE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoIzEzMjAzKVxuXHRcdFx0XHRcdFx0c2VsID0gaGFuZGxlT2JqLnNlbGVjdG9yICsgXCIgXCI7XG5cblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPSBoYW5kbGVPYmoubmVlZHNDb250ZXh0ID9cblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkoIHNlbCwgdGhpcyApLmluZGV4KCBjdXIgKSA+IC0xIDpcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZmluZCggc2VsLCB0aGlzLCBudWxsLCBbIGN1ciBdICkubGVuZ3RoO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZEhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRIYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBtYXRjaGVkSGFuZGxlcnMgfSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFkZCB0aGUgcmVtYWluaW5nIChkaXJlY3RseS1ib3VuZCkgaGFuZGxlcnNcblx0XHRjdXIgPSB0aGlzO1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCA8IGhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNvdW50ICkgfSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBoYW5kbGVyUXVldWU7XG5cdH0sXG5cblx0YWRkUHJvcDogZnVuY3Rpb24oIG5hbWUsIGhvb2sgKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBqUXVlcnkuRXZlbnQucHJvdG90eXBlLCBuYW1lLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXG5cdFx0XHRnZXQ6IGlzRnVuY3Rpb24oIGhvb2sgKSA/XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gaG9vayggdGhpcy5vcmlnaW5hbEV2ZW50ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IDpcblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLm9yaWdpbmFsRXZlbnRbIG5hbWUgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cblx0XHRcdHNldDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIHRoaXMsIG5hbWUsIHtcblx0XHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHR2YWx1ZTogdmFsdWVcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRmaXg6IGZ1bmN0aW9uKCBvcmlnaW5hbEV2ZW50ICkge1xuXHRcdHJldHVybiBvcmlnaW5hbEV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID9cblx0XHRcdG9yaWdpbmFsRXZlbnQgOlxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCggb3JpZ2luYWxFdmVudCApO1xuXHR9LFxuXG5cdHNwZWNpYWw6IHtcblx0XHRsb2FkOiB7XG5cblx0XHRcdC8vIFByZXZlbnQgdHJpZ2dlcmVkIGltYWdlLmxvYWQgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gd2luZG93LmxvYWRcblx0XHRcdG5vQnViYmxlOiB0cnVlXG5cdFx0fSxcblx0XHRjbGljazoge1xuXG5cdFx0XHQvLyBVdGlsaXplIG5hdGl2ZSBldmVudCB0byBlbnN1cmUgY29ycmVjdCBzdGF0ZSBmb3IgY2hlY2thYmxlIGlucHV0c1xuXHRcdFx0c2V0dXA6IGZ1bmN0aW9uKCBkYXRhICkge1xuXG5cdFx0XHRcdC8vIEZvciBtdXR1YWwgY29tcHJlc3NpYmlsaXR5IHdpdGggX2RlZmF1bHQsIHJlcGxhY2UgYHRoaXNgIGFjY2VzcyB3aXRoIGEgbG9jYWwgdmFyLlxuXHRcdFx0XHQvLyBgfHwgZGF0YWAgaXMgZGVhZCBjb2RlIG1lYW50IG9ubHkgdG8gcHJlc2VydmUgdGhlIHZhcmlhYmxlIHRocm91Z2ggbWluaWZpY2F0aW9uLlxuXHRcdFx0XHR2YXIgZWwgPSB0aGlzIHx8IGRhdGE7XG5cblx0XHRcdFx0Ly8gQ2xhaW0gdGhlIGZpcnN0IGhhbmRsZXJcblx0XHRcdFx0aWYgKCByY2hlY2thYmxlVHlwZS50ZXN0KCBlbC50eXBlICkgJiZcblx0XHRcdFx0XHRlbC5jbGljayAmJiBub2RlTmFtZSggZWwsIFwiaW5wdXRcIiApICkge1xuXG5cdFx0XHRcdFx0Ly8gZGF0YVByaXYuc2V0KCBlbCwgXCJjbGlja1wiLCAuLi4gKVxuXHRcdFx0XHRcdGxldmVyYWdlTmF0aXZlKCBlbCwgXCJjbGlja1wiLCByZXR1cm5UcnVlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXR1cm4gZmFsc2UgdG8gYWxsb3cgbm9ybWFsIHByb2Nlc3NpbmcgaW4gdGhlIGNhbGxlclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9LFxuXHRcdFx0dHJpZ2dlcjogZnVuY3Rpb24oIGRhdGEgKSB7XG5cblx0XHRcdFx0Ly8gRm9yIG11dHVhbCBjb21wcmVzc2liaWxpdHkgd2l0aCBfZGVmYXVsdCwgcmVwbGFjZSBgdGhpc2AgYWNjZXNzIHdpdGggYSBsb2NhbCB2YXIuXG5cdFx0XHRcdC8vIGB8fCBkYXRhYCBpcyBkZWFkIGNvZGUgbWVhbnQgb25seSB0byBwcmVzZXJ2ZSB0aGUgdmFyaWFibGUgdGhyb3VnaCBtaW5pZmljYXRpb24uXG5cdFx0XHRcdHZhciBlbCA9IHRoaXMgfHwgZGF0YTtcblxuXHRcdFx0XHQvLyBGb3JjZSBzZXR1cCBiZWZvcmUgdHJpZ2dlcmluZyBhIGNsaWNrXG5cdFx0XHRcdGlmICggcmNoZWNrYWJsZVR5cGUudGVzdCggZWwudHlwZSApICYmXG5cdFx0XHRcdFx0ZWwuY2xpY2sgJiYgbm9kZU5hbWUoIGVsLCBcImlucHV0XCIgKSApIHtcblxuXHRcdFx0XHRcdGxldmVyYWdlTmF0aXZlKCBlbCwgXCJjbGlja1wiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXR1cm4gbm9uLWZhbHNlIHRvIGFsbG93IG5vcm1hbCBldmVudC1wYXRoIHByb3BhZ2F0aW9uXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRm9yIGNyb3NzLWJyb3dzZXIgY29uc2lzdGVuY3ksIHN1cHByZXNzIG5hdGl2ZSAuY2xpY2soKSBvbiBsaW5rc1xuXHRcdFx0Ly8gQWxzbyBwcmV2ZW50IGl0IGlmIHdlJ3JlIGN1cnJlbnRseSBpbnNpZGUgYSBsZXZlcmFnZWQgbmF0aXZlLWV2ZW50IHN0YWNrXG5cdFx0XHRfZGVmYXVsdDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdFx0XHRyZXR1cm4gcmNoZWNrYWJsZVR5cGUudGVzdCggdGFyZ2V0LnR5cGUgKSAmJlxuXHRcdFx0XHRcdHRhcmdldC5jbGljayAmJiBub2RlTmFtZSggdGFyZ2V0LCBcImlucHV0XCIgKSAmJlxuXHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGFyZ2V0LCBcImNsaWNrXCIgKSB8fFxuXHRcdFx0XHRcdG5vZGVOYW1lKCB0YXJnZXQsIFwiYVwiICk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGJlZm9yZXVubG9hZDoge1xuXHRcdFx0cG9zdERpc3BhdGNoOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCAyMCtcblx0XHRcdFx0Ly8gRmlyZWZveCBkb2Vzbid0IGFsZXJ0IGlmIHRoZSByZXR1cm5WYWx1ZSBmaWVsZCBpcyBub3Qgc2V0LlxuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCAhPT0gdW5kZWZpbmVkICYmIGV2ZW50Lm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0ZXZlbnQub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZSA9IGV2ZW50LnJlc3VsdDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuLy8gRW5zdXJlIHRoZSBwcmVzZW5jZSBvZiBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGhhbmRsZXMgbWFudWFsbHktdHJpZ2dlcmVkXG4vLyBzeW50aGV0aWMgZXZlbnRzIGJ5IGludGVycnVwdGluZyBwcm9ncmVzcyB1bnRpbCByZWludm9rZWQgaW4gcmVzcG9uc2UgdG9cbi8vICpuYXRpdmUqIGV2ZW50cyB0aGF0IGl0IGZpcmVzIGRpcmVjdGx5LCBlbnN1cmluZyB0aGF0IHN0YXRlIGNoYW5nZXMgaGF2ZVxuLy8gYWxyZWFkeSBvY2N1cnJlZCBiZWZvcmUgb3RoZXIgbGlzdGVuZXJzIGFyZSBpbnZva2VkLlxuZnVuY3Rpb24gbGV2ZXJhZ2VOYXRpdmUoIGVsLCB0eXBlLCBleHBlY3RTeW5jICkge1xuXG5cdC8vIE1pc3NpbmcgZXhwZWN0U3luYyBpbmRpY2F0ZXMgYSB0cmlnZ2VyIGNhbGwsIHdoaWNoIG11c3QgZm9yY2Ugc2V0dXAgdGhyb3VnaCBqUXVlcnkuZXZlbnQuYWRkXG5cdGlmICggIWV4cGVjdFN5bmMgKSB7XG5cdFx0aWYgKCBkYXRhUHJpdi5nZXQoIGVsLCB0eXBlICkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC5hZGQoIGVsLCB0eXBlLCByZXR1cm5UcnVlICk7XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFJlZ2lzdGVyIHRoZSBjb250cm9sbGVyIGFzIGEgc3BlY2lhbCB1bml2ZXJzYWwgaGFuZGxlciBmb3IgYWxsIGV2ZW50IG5hbWVzcGFjZXNcblx0ZGF0YVByaXYuc2V0KCBlbCwgdHlwZSwgZmFsc2UgKTtcblx0alF1ZXJ5LmV2ZW50LmFkZCggZWwsIHR5cGUsIHtcblx0XHRuYW1lc3BhY2U6IGZhbHNlLFxuXHRcdGhhbmRsZXI6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciBub3RBc3luYywgcmVzdWx0LFxuXHRcdFx0XHRzYXZlZCA9IGRhdGFQcml2LmdldCggdGhpcywgdHlwZSApO1xuXG5cdFx0XHRpZiAoICggZXZlbnQuaXNUcmlnZ2VyICYgMSApICYmIHRoaXNbIHR5cGUgXSApIHtcblxuXHRcdFx0XHQvLyBJbnRlcnJ1cHQgcHJvY2Vzc2luZyBvZiB0aGUgb3V0ZXIgc3ludGhldGljIC50cmlnZ2VyKCllZCBldmVudFxuXHRcdFx0XHQvLyBTYXZlZCBkYXRhIHNob3VsZCBiZSBmYWxzZSBpbiBzdWNoIGNhc2VzLCBidXQgbWlnaHQgYmUgYSBsZWZ0b3ZlciBjYXB0dXJlIG9iamVjdFxuXHRcdFx0XHQvLyBmcm9tIGFuIGFzeW5jIG5hdGl2ZSBoYW5kbGVyIChnaC00MzUwKVxuXHRcdFx0XHRpZiAoICFzYXZlZC5sZW5ndGggKSB7XG5cblx0XHRcdFx0XHQvLyBTdG9yZSBhcmd1bWVudHMgZm9yIHVzZSB3aGVuIGhhbmRsaW5nIHRoZSBpbm5lciBuYXRpdmUgZXZlbnRcblx0XHRcdFx0XHQvLyBUaGVyZSB3aWxsIGFsd2F5cyBiZSBhdCBsZWFzdCBvbmUgYXJndW1lbnQgKGFuIGV2ZW50IG9iamVjdCksIHNvIHRoaXMgYXJyYXlcblx0XHRcdFx0XHQvLyB3aWxsIG5vdCBiZSBjb25mdXNlZCB3aXRoIGEgbGVmdG92ZXIgY2FwdHVyZSBvYmplY3QuXG5cdFx0XHRcdFx0c2F2ZWQgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIHNhdmVkICk7XG5cblx0XHRcdFx0XHQvLyBUcmlnZ2VyIHRoZSBuYXRpdmUgZXZlbnQgYW5kIGNhcHR1cmUgaXRzIHJlc3VsdFxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExK1xuXHRcdFx0XHRcdC8vIGZvY3VzKCkgYW5kIGJsdXIoKSBhcmUgYXN5bmNocm9ub3VzXG5cdFx0XHRcdFx0bm90QXN5bmMgPSBleHBlY3RTeW5jKCB0aGlzLCB0eXBlICk7XG5cdFx0XHRcdFx0dGhpc1sgdHlwZSBdKCk7XG5cdFx0XHRcdFx0cmVzdWx0ID0gZGF0YVByaXYuZ2V0KCB0aGlzLCB0eXBlICk7XG5cdFx0XHRcdFx0aWYgKCBzYXZlZCAhPT0gcmVzdWx0IHx8IG5vdEFzeW5jICkge1xuXHRcdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCBmYWxzZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQgPSB7fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBzYXZlZCAhPT0gcmVzdWx0ICkge1xuXG5cdFx0XHRcdFx0XHQvLyBDYW5jZWwgdGhlIG91dGVyIHN5bnRoZXRpYyBldmVudFxuXHRcdFx0XHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdC52YWx1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgdGhpcyBpcyBhbiBpbm5lciBzeW50aGV0aWMgZXZlbnQgZm9yIGFuIGV2ZW50IHdpdGggYSBidWJibGluZyBzdXJyb2dhdGVcblx0XHRcdFx0Ly8gKGZvY3VzIG9yIGJsdXIpLCBhc3N1bWUgdGhhdCB0aGUgc3Vycm9nYXRlIGFscmVhZHkgcHJvcGFnYXRlZCBmcm9tIHRyaWdnZXJpbmcgdGhlXG5cdFx0XHRcdC8vIG5hdGl2ZSBldmVudCBhbmQgcHJldmVudCB0aGF0IGZyb20gaGFwcGVuaW5nIGFnYWluIGhlcmUuXG5cdFx0XHRcdC8vIFRoaXMgdGVjaG5pY2FsbHkgZ2V0cyB0aGUgb3JkZXJpbmcgd3Jvbmcgdy5yLnQuIHRvIGAudHJpZ2dlcigpYCAoaW4gd2hpY2ggdGhlXG5cdFx0XHRcdC8vIGJ1YmJsaW5nIHN1cnJvZ2F0ZSBwcm9wYWdhdGVzICphZnRlciogdGhlIG5vbi1idWJibGluZyBiYXNlKSwgYnV0IHRoYXQgc2VlbXNcblx0XHRcdFx0Ly8gbGVzcyBiYWQgdGhhbiBkdXBsaWNhdGlvbi5cblx0XHRcdFx0fSBlbHNlIGlmICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9ICkuZGVsZWdhdGVUeXBlICkge1xuXHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHR9XG5cblx0XHRcdC8vIElmIHRoaXMgaXMgYSBuYXRpdmUgZXZlbnQgdHJpZ2dlcmVkIGFib3ZlLCBldmVyeXRoaW5nIGlzIG5vdyBpbiBvcmRlclxuXHRcdFx0Ly8gRmlyZSBhbiBpbm5lciBzeW50aGV0aWMgZXZlbnQgd2l0aCB0aGUgb3JpZ2luYWwgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCBzYXZlZC5sZW5ndGggKSB7XG5cblx0XHRcdFx0Ly8gLi4uYW5kIGNhcHR1cmUgdGhlIHJlc3VsdFxuXHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIHtcblx0XHRcdFx0XHR2YWx1ZTogalF1ZXJ5LmV2ZW50LnRyaWdnZXIoXG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExK1xuXHRcdFx0XHRcdFx0Ly8gRXh0ZW5kIHdpdGggdGhlIHByb3RvdHlwZSB0byByZXNldCB0aGUgYWJvdmUgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcblx0XHRcdFx0XHRcdGpRdWVyeS5leHRlbmQoIHNhdmVkWyAwIF0sIGpRdWVyeS5FdmVudC5wcm90b3R5cGUgKSxcblx0XHRcdFx0XHRcdHNhdmVkLnNsaWNlKCAxICksXG5cdFx0XHRcdFx0XHR0aGlzXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0Ly8gQWJvcnQgaGFuZGxpbmcgb2YgdGhlIG5hdGl2ZSBldmVudFxuXHRcdFx0XHRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gKTtcbn1cblxualF1ZXJ5LnJlbW92ZUV2ZW50ID0gZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRsZSApIHtcblxuXHQvLyBUaGlzIFwiaWZcIiBpcyBuZWVkZWQgZm9yIHBsYWluIG9iamVjdHNcblx0aWYgKCBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0ZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGUgKTtcblx0fVxufTtcblxualF1ZXJ5LkV2ZW50ID0gZnVuY3Rpb24oIHNyYywgcHJvcHMgKSB7XG5cblx0Ly8gQWxsb3cgaW5zdGFudGlhdGlvbiB3aXRob3V0IHRoZSAnbmV3JyBrZXl3b3JkXG5cdGlmICggISggdGhpcyBpbnN0YW5jZW9mIGpRdWVyeS5FdmVudCApICkge1xuXHRcdHJldHVybiBuZXcgalF1ZXJ5LkV2ZW50KCBzcmMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBFdmVudCBvYmplY3Rcblx0aWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7XG5cdFx0dGhpcy5vcmlnaW5hbEV2ZW50ID0gc3JjO1xuXHRcdHRoaXMudHlwZSA9IHNyYy50eXBlO1xuXG5cdFx0Ly8gRXZlbnRzIGJ1YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50ZWRcblx0XHQvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUgY29ycmVjdCB2YWx1ZS5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHNyYy5kZWZhdWx0UHJldmVudGVkIHx8XG5cdFx0XHRcdHNyYy5kZWZhdWx0UHJldmVudGVkID09PSB1bmRlZmluZWQgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9Mi4zIG9ubHlcblx0XHRcdFx0c3JjLnJldHVyblZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRyZXR1cm5UcnVlIDpcblx0XHRcdHJldHVybkZhbHNlO1xuXG5cdFx0Ly8gQ3JlYXRlIHRhcmdldCBwcm9wZXJ0aWVzXG5cdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDw9NiAtIDcgb25seVxuXHRcdC8vIFRhcmdldCBzaG91bGQgbm90IGJlIGEgdGV4dCBub2RlICgjNTA0LCAjMTMxNDMpXG5cdFx0dGhpcy50YXJnZXQgPSAoIHNyYy50YXJnZXQgJiYgc3JjLnRhcmdldC5ub2RlVHlwZSA9PT0gMyApID9cblx0XHRcdHNyYy50YXJnZXQucGFyZW50Tm9kZSA6XG5cdFx0XHRzcmMudGFyZ2V0O1xuXG5cdFx0dGhpcy5jdXJyZW50VGFyZ2V0ID0gc3JjLmN1cnJlbnRUYXJnZXQ7XG5cdFx0dGhpcy5yZWxhdGVkVGFyZ2V0ID0gc3JjLnJlbGF0ZWRUYXJnZXQ7XG5cblx0Ly8gRXZlbnQgdHlwZVxuXHR9IGVsc2Uge1xuXHRcdHRoaXMudHlwZSA9IHNyYztcblx0fVxuXG5cdC8vIFB1dCBleHBsaWNpdGx5IHByb3ZpZGVkIHByb3BlcnRpZXMgb250byB0aGUgZXZlbnQgb2JqZWN0XG5cdGlmICggcHJvcHMgKSB7XG5cdFx0alF1ZXJ5LmV4dGVuZCggdGhpcywgcHJvcHMgKTtcblx0fVxuXG5cdC8vIENyZWF0ZSBhIHRpbWVzdGFtcCBpZiBpbmNvbWluZyBldmVudCBkb2Vzbid0IGhhdmUgb25lXG5cdHRoaXMudGltZVN0YW1wID0gc3JjICYmIHNyYy50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKTtcblxuXHQvLyBNYXJrIGl0IGFzIGZpeGVkXG5cdHRoaXNbIGpRdWVyeS5leHBhbmRvIF0gPSB0cnVlO1xufTtcblxuLy8galF1ZXJ5LkV2ZW50IGlzIGJhc2VkIG9uIERPTTMgRXZlbnRzIGFzIHNwZWNpZmllZCBieSB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBCaW5kaW5nXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAwMzAzMzEvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sXG5qUXVlcnkuRXZlbnQucHJvdG90eXBlID0ge1xuXHRjb25zdHJ1Y3RvcjogalF1ZXJ5LkV2ZW50LFxuXHRpc0RlZmF1bHRQcmV2ZW50ZWQ6IHJldHVybkZhbHNlLFxuXHRpc1Byb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcblx0aXNTaW11bGF0ZWQ6IGZhbHNlLFxuXG5cdHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH0sXG5cdHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdH1cblxuXHRcdHRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdH1cbn07XG5cbi8vIEluY2x1ZGVzIGFsbCBjb21tb24gZXZlbnQgcHJvcHMgaW5jbHVkaW5nIEtleUV2ZW50IGFuZCBNb3VzZUV2ZW50IHNwZWNpZmljIHByb3BzXG5qUXVlcnkuZWFjaCgge1xuXHRhbHRLZXk6IHRydWUsXG5cdGJ1YmJsZXM6IHRydWUsXG5cdGNhbmNlbGFibGU6IHRydWUsXG5cdGNoYW5nZWRUb3VjaGVzOiB0cnVlLFxuXHRjdHJsS2V5OiB0cnVlLFxuXHRkZXRhaWw6IHRydWUsXG5cdGV2ZW50UGhhc2U6IHRydWUsXG5cdG1ldGFLZXk6IHRydWUsXG5cdHBhZ2VYOiB0cnVlLFxuXHRwYWdlWTogdHJ1ZSxcblx0c2hpZnRLZXk6IHRydWUsXG5cdHZpZXc6IHRydWUsXG5cdFwiY2hhclwiOiB0cnVlLFxuXHRjb2RlOiB0cnVlLFxuXHRjaGFyQ29kZTogdHJ1ZSxcblx0a2V5OiB0cnVlLFxuXHRrZXlDb2RlOiB0cnVlLFxuXHRidXR0b246IHRydWUsXG5cdGJ1dHRvbnM6IHRydWUsXG5cdGNsaWVudFg6IHRydWUsXG5cdGNsaWVudFk6IHRydWUsXG5cdG9mZnNldFg6IHRydWUsXG5cdG9mZnNldFk6IHRydWUsXG5cdHBvaW50ZXJJZDogdHJ1ZSxcblx0cG9pbnRlclR5cGU6IHRydWUsXG5cdHNjcmVlblg6IHRydWUsXG5cdHNjcmVlblk6IHRydWUsXG5cdHRhcmdldFRvdWNoZXM6IHRydWUsXG5cdHRvRWxlbWVudDogdHJ1ZSxcblx0dG91Y2hlczogdHJ1ZSxcblxuXHR3aGljaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBidXR0b24gPSBldmVudC5idXR0b247XG5cblx0XHQvLyBBZGQgd2hpY2ggZm9yIGtleSBldmVudHNcblx0XHRpZiAoIGV2ZW50LndoaWNoID09IG51bGwgJiYgcmtleUV2ZW50LnRlc3QoIGV2ZW50LnR5cGUgKSApIHtcblx0XHRcdHJldHVybiBldmVudC5jaGFyQ29kZSAhPSBudWxsID8gZXZlbnQuY2hhckNvZGUgOiBldmVudC5rZXlDb2RlO1xuXHRcdH1cblxuXHRcdC8vIEFkZCB3aGljaCBmb3IgY2xpY2s6IDEgPT09IGxlZnQ7IDIgPT09IG1pZGRsZTsgMyA9PT0gcmlnaHRcblx0XHRpZiAoICFldmVudC53aGljaCAmJiBidXR0b24gIT09IHVuZGVmaW5lZCAmJiBybW91c2VFdmVudC50ZXN0KCBldmVudC50eXBlICkgKSB7XG5cdFx0XHRpZiAoIGJ1dHRvbiAmIDEgKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGJ1dHRvbiAmIDIgKSB7XG5cdFx0XHRcdHJldHVybiAzO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGJ1dHRvbiAmIDQgKSB7XG5cdFx0XHRcdHJldHVybiAyO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQud2hpY2g7XG5cdH1cbn0sIGpRdWVyeS5ldmVudC5hZGRQcm9wICk7XG5cbmpRdWVyeS5lYWNoKCB7IGZvY3VzOiBcImZvY3VzaW5cIiwgYmx1cjogXCJmb2N1c291dFwiIH0sIGZ1bmN0aW9uKCB0eXBlLCBkZWxlZ2F0ZVR5cGUgKSB7XG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gPSB7XG5cblx0XHQvLyBVdGlsaXplIG5hdGl2ZSBldmVudCBpZiBwb3NzaWJsZSBzbyBibHVyL2ZvY3VzIHNlcXVlbmNlIGlzIGNvcnJlY3Rcblx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIENsYWltIHRoZSBmaXJzdCBoYW5kbGVyXG5cdFx0XHQvLyBkYXRhUHJpdi5zZXQoIHRoaXMsIFwiZm9jdXNcIiwgLi4uIClcblx0XHRcdC8vIGRhdGFQcml2LnNldCggdGhpcywgXCJibHVyXCIsIC4uLiApXG5cdFx0XHRsZXZlcmFnZU5hdGl2ZSggdGhpcywgdHlwZSwgZXhwZWN0U3luYyApO1xuXG5cdFx0XHQvLyBSZXR1cm4gZmFsc2UgdG8gYWxsb3cgbm9ybWFsIHByb2Nlc3NpbmcgaW4gdGhlIGNhbGxlclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cdFx0dHJpZ2dlcjogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEZvcmNlIHNldHVwIGJlZm9yZSB0cmlnZ2VyXG5cdFx0XHRsZXZlcmFnZU5hdGl2ZSggdGhpcywgdHlwZSApO1xuXG5cdFx0XHQvLyBSZXR1cm4gbm9uLWZhbHNlIHRvIGFsbG93IG5vcm1hbCBldmVudC1wYXRoIHByb3BhZ2F0aW9uXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0ZGVsZWdhdGVUeXBlOiBkZWxlZ2F0ZVR5cGVcblx0fTtcbn0gKTtcblxuLy8gQ3JlYXRlIG1vdXNlZW50ZXIvbGVhdmUgZXZlbnRzIHVzaW5nIG1vdXNlb3Zlci9vdXQgYW5kIGV2ZW50LXRpbWUgY2hlY2tzXG4vLyBzbyB0aGF0IGV2ZW50IGRlbGVnYXRpb24gd29ya3MgaW4galF1ZXJ5LlxuLy8gRG8gdGhlIHNhbWUgZm9yIHBvaW50ZXJlbnRlci9wb2ludGVybGVhdmUgYW5kIHBvaW50ZXJvdmVyL3BvaW50ZXJvdXRcbi8vXG4vLyBTdXBwb3J0OiBTYWZhcmkgNyBvbmx5XG4vLyBTYWZhcmkgc2VuZHMgbW91c2VlbnRlciB0b28gb2Z0ZW47IHNlZTpcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ3MDI1OFxuLy8gZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYnVnIChpdCBleGlzdGVkIGluIG9sZGVyIENocm9tZSB2ZXJzaW9ucyBhcyB3ZWxsKS5cbmpRdWVyeS5lYWNoKCB7XG5cdG1vdXNlZW50ZXI6IFwibW91c2VvdmVyXCIsXG5cdG1vdXNlbGVhdmU6IFwibW91c2VvdXRcIixcblx0cG9pbnRlcmVudGVyOiBcInBvaW50ZXJvdmVyXCIsXG5cdHBvaW50ZXJsZWF2ZTogXCJwb2ludGVyb3V0XCJcbn0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBvcmlnIF0gPSB7XG5cdFx0ZGVsZWdhdGVUeXBlOiBmaXgsXG5cdFx0YmluZFR5cGU6IGZpeCxcblxuXHRcdGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIHJldCxcblx0XHRcdFx0dGFyZ2V0ID0gdGhpcyxcblx0XHRcdFx0cmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsXG5cdFx0XHRcdGhhbmRsZU9iaiA9IGV2ZW50LmhhbmRsZU9iajtcblxuXHRcdFx0Ly8gRm9yIG1vdXNlZW50ZXIvbGVhdmUgY2FsbCB0aGUgaGFuZGxlciBpZiByZWxhdGVkIGlzIG91dHNpZGUgdGhlIHRhcmdldC5cblx0XHRcdC8vIE5COiBObyByZWxhdGVkVGFyZ2V0IGlmIHRoZSBtb3VzZSBsZWZ0L2VudGVyZWQgdGhlIGJyb3dzZXIgd2luZG93XG5cdFx0XHRpZiAoICFyZWxhdGVkIHx8ICggcmVsYXRlZCAhPT0gdGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRhcmdldCwgcmVsYXRlZCApICkgKSB7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBoYW5kbGVPYmoub3JpZ1R5cGU7XG5cdFx0XHRcdHJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0ZXZlbnQudHlwZSA9IGZpeDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0b246IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHRvbmU6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgMSApO1xuXHR9LFxuXHRvZmY6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGZuICkge1xuXHRcdHZhciBoYW5kbGVPYmosIHR5cGU7XG5cdFx0aWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2ZW50RGVmYXVsdCAmJiB0eXBlcy5oYW5kbGVPYmogKSB7XG5cblx0XHRcdC8vICggZXZlbnQgKSAgZGlzcGF0Y2hlZCBqUXVlcnkuRXZlbnRcblx0XHRcdGhhbmRsZU9iaiA9IHR5cGVzLmhhbmRsZU9iajtcblx0XHRcdGpRdWVyeSggdHlwZXMuZGVsZWdhdGVUYXJnZXQgKS5vZmYoXG5cdFx0XHRcdGhhbmRsZU9iai5uYW1lc3BhY2UgP1xuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSArIFwiLlwiICsgaGFuZGxlT2JqLm5hbWVzcGFjZSA6XG5cdFx0XHRcdFx0aGFuZGxlT2JqLm9yaWdUeXBlLFxuXHRcdFx0XHRoYW5kbGVPYmouc2VsZWN0b3IsXG5cdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggdHlwZW9mIHR5cGVzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLW9iamVjdCBbLCBzZWxlY3Rvcl0gKVxuXHRcdFx0Zm9yICggdHlwZSBpbiB0eXBlcyApIHtcblx0XHRcdFx0dGhpcy5vZmYoIHR5cGUsIHNlbGVjdG9yLCB0eXBlc1sgdHlwZSBdICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKCBzZWxlY3RvciA9PT0gZmFsc2UgfHwgdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMgWywgZm5dIClcblx0XHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsIHR5cGVzLCBmbiwgc2VsZWN0b3IgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG52YXJcblxuXHQvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5cblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNsaW50L2lzc3Vlcy8zMjI5XG5cdHJ4aHRtbFRhZyA9IC88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKilbXj5dKilcXC8+L2dpLFxuXG5cdC8qIGVzbGludC1lbmFibGUgKi9cblxuXHQvLyBTdXBwb3J0OiBJRSA8PTEwIC0gMTEsIEVkZ2UgMTIgLSAxMyBvbmx5XG5cdC8vIEluIElFL0VkZ2UgdXNpbmcgcmVnZXggZ3JvdXBzIGhlcmUgY2F1c2VzIHNldmVyZSBzbG93ZG93bnMuXG5cdC8vIFNlZSBodHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzE3MzY1MTIvXG5cdHJub0lubmVyaHRtbCA9IC88c2NyaXB0fDxzdHlsZXw8bGluay9pLFxuXG5cdC8vIGNoZWNrZWQ9XCJjaGVja2VkXCIgb3IgY2hlY2tlZFxuXHRyY2hlY2tlZCA9IC9jaGVja2VkXFxzKig/OltePV18PVxccyouY2hlY2tlZC4pL2ksXG5cdHJjbGVhblNjcmlwdCA9IC9eXFxzKjwhKD86XFxbQ0RBVEFcXFt8LS0pfCg/OlxcXVxcXXwtLSk+XFxzKiQvZztcblxuLy8gUHJlZmVyIGEgdGJvZHkgb3ZlciBpdHMgcGFyZW50IHRhYmxlIGZvciBjb250YWluaW5nIG5ldyByb3dzXG5mdW5jdGlvbiBtYW5pcHVsYXRpb25UYXJnZXQoIGVsZW0sIGNvbnRlbnQgKSB7XG5cdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGFibGVcIiApICYmXG5cdFx0bm9kZU5hbWUoIGNvbnRlbnQubm9kZVR5cGUgIT09IDExID8gY29udGVudCA6IGNvbnRlbnQuZmlyc3RDaGlsZCwgXCJ0clwiICkgKSB7XG5cblx0XHRyZXR1cm4galF1ZXJ5KCBlbGVtICkuY2hpbGRyZW4oIFwidGJvZHlcIiApWyAwIF0gfHwgZWxlbTtcblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG4vLyBSZXBsYWNlL3Jlc3RvcmUgdGhlIHR5cGUgYXR0cmlidXRlIG9mIHNjcmlwdCBlbGVtZW50cyBmb3Igc2FmZSBET00gbWFuaXB1bGF0aW9uXG5mdW5jdGlvbiBkaXNhYmxlU2NyaXB0KCBlbGVtICkge1xuXHRlbGVtLnR5cGUgPSAoIGVsZW0uZ2V0QXR0cmlidXRlKCBcInR5cGVcIiApICE9PSBudWxsICkgKyBcIi9cIiArIGVsZW0udHlwZTtcblx0cmV0dXJuIGVsZW07XG59XG5mdW5jdGlvbiByZXN0b3JlU2NyaXB0KCBlbGVtICkge1xuXHRpZiAoICggZWxlbS50eXBlIHx8IFwiXCIgKS5zbGljZSggMCwgNSApID09PSBcInRydWUvXCIgKSB7XG5cdFx0ZWxlbS50eXBlID0gZWxlbS50eXBlLnNsaWNlKCA1ICk7XG5cdH0gZWxzZSB7XG5cdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIFwidHlwZVwiICk7XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHtcblx0dmFyIGksIGwsIHR5cGUsIHBkYXRhT2xkLCBwZGF0YUN1ciwgdWRhdGFPbGQsIHVkYXRhQ3VyLCBldmVudHM7XG5cblx0aWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIDEuIENvcHkgcHJpdmF0ZSBkYXRhOiBldmVudHMsIGhhbmRsZXJzLCBldGMuXG5cdGlmICggZGF0YVByaXYuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0cGRhdGFPbGQgPSBkYXRhUHJpdi5hY2Nlc3MoIHNyYyApO1xuXHRcdHBkYXRhQ3VyID0gZGF0YVByaXYuc2V0KCBkZXN0LCBwZGF0YU9sZCApO1xuXHRcdGV2ZW50cyA9IHBkYXRhT2xkLmV2ZW50cztcblxuXHRcdGlmICggZXZlbnRzICkge1xuXHRcdFx0ZGVsZXRlIHBkYXRhQ3VyLmhhbmRsZTtcblx0XHRcdHBkYXRhQ3VyLmV2ZW50cyA9IHt9O1xuXG5cdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBldmVudHNbIHR5cGUgXS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmFkZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gMi4gQ29weSB1c2VyIGRhdGFcblx0aWYgKCBkYXRhVXNlci5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHR1ZGF0YU9sZCA9IGRhdGFVc2VyLmFjY2Vzcyggc3JjICk7XG5cdFx0dWRhdGFDdXIgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgdWRhdGFPbGQgKTtcblxuXHRcdGRhdGFVc2VyLnNldCggZGVzdCwgdWRhdGFDdXIgKTtcblx0fVxufVxuXG4vLyBGaXggSUUgYnVncywgc2VlIHN1cHBvcnQgdGVzdHNcbmZ1bmN0aW9uIGZpeElucHV0KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBub2RlTmFtZSA9IGRlc3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHQvLyBGYWlscyB0byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvbi5cblx0aWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmIHJjaGVja2FibGVUeXBlLnRlc3QoIHNyYy50eXBlICkgKSB7XG5cdFx0ZGVzdC5jaGVja2VkID0gc3JjLmNoZWNrZWQ7XG5cblx0Ly8gRmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQgc3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlvbnNcblx0fSBlbHNlIGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiB8fCBub2RlTmFtZSA9PT0gXCJ0ZXh0YXJlYVwiICkge1xuXHRcdGRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRlZmF1bHRWYWx1ZTtcblx0fVxufVxuXG5mdW5jdGlvbiBkb21NYW5pcCggY29sbGVjdGlvbiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKSB7XG5cblx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRhcmdzID0gY29uY2F0LmFwcGx5KCBbXSwgYXJncyApO1xuXG5cdHZhciBmcmFnbWVudCwgZmlyc3QsIHNjcmlwdHMsIGhhc1NjcmlwdHMsIG5vZGUsIGRvYyxcblx0XHRpID0gMCxcblx0XHRsID0gY29sbGVjdGlvbi5sZW5ndGgsXG5cdFx0aU5vQ2xvbmUgPSBsIC0gMSxcblx0XHR2YWx1ZSA9IGFyZ3NbIDAgXSxcblx0XHR2YWx1ZUlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCB2YWx1ZSApO1xuXG5cdC8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFnbWVudHMgdGhhdCBjb250YWluIGNoZWNrZWQsIGluIFdlYktpdFxuXHRpZiAoIHZhbHVlSXNGdW5jdGlvbiB8fFxuXHRcdFx0KCBsID4gMSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0IXN1cHBvcnQuY2hlY2tDbG9uZSAmJiByY2hlY2tlZC50ZXN0KCB2YWx1ZSApICkgKSB7XG5cdFx0cmV0dXJuIGNvbGxlY3Rpb24uZWFjaCggZnVuY3Rpb24oIGluZGV4ICkge1xuXHRcdFx0dmFyIHNlbGYgPSBjb2xsZWN0aW9uLmVxKCBpbmRleCApO1xuXHRcdFx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gKSB7XG5cdFx0XHRcdGFyZ3NbIDAgXSA9IHZhbHVlLmNhbGwoIHRoaXMsIGluZGV4LCBzZWxmLmh0bWwoKSApO1xuXHRcdFx0fVxuXHRcdFx0ZG9tTWFuaXAoIHNlbGYsIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICk7XG5cdFx0fSApO1xuXHR9XG5cblx0aWYgKCBsICkge1xuXHRcdGZyYWdtZW50ID0gYnVpbGRGcmFnbWVudCggYXJncywgY29sbGVjdGlvblsgMCBdLm93bmVyRG9jdW1lbnQsIGZhbHNlLCBjb2xsZWN0aW9uLCBpZ25vcmVkICk7XG5cdFx0Zmlyc3QgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0aWYgKCBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSApIHtcblx0XHRcdGZyYWdtZW50ID0gZmlyc3Q7XG5cdFx0fVxuXG5cdFx0Ly8gUmVxdWlyZSBlaXRoZXIgbmV3IGNvbnRlbnQgb3IgYW4gaW50ZXJlc3QgaW4gaWdub3JlZCBlbGVtZW50cyB0byBpbnZva2UgdGhlIGNhbGxiYWNrXG5cdFx0aWYgKCBmaXJzdCB8fCBpZ25vcmVkICkge1xuXHRcdFx0c2NyaXB0cyA9IGpRdWVyeS5tYXAoIGdldEFsbCggZnJhZ21lbnQsIFwic2NyaXB0XCIgKSwgZGlzYWJsZVNjcmlwdCApO1xuXHRcdFx0aGFzU2NyaXB0cyA9IHNjcmlwdHMubGVuZ3RoO1xuXG5cdFx0XHQvLyBVc2UgdGhlIG9yaWdpbmFsIGZyYWdtZW50IGZvciB0aGUgbGFzdCBpdGVtXG5cdFx0XHQvLyBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBiZWNhdXNlIGl0IGNhbiBlbmQgdXBcblx0XHRcdC8vIGJlaW5nIGVtcHRpZWQgaW5jb3JyZWN0bHkgaW4gY2VydGFpbiBzaXR1YXRpb25zICgjODA3MCkuXG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdG5vZGUgPSBmcmFnbWVudDtcblxuXHRcdFx0XHRpZiAoIGkgIT09IGlOb0Nsb25lICkge1xuXHRcdFx0XHRcdG5vZGUgPSBqUXVlcnkuY2xvbmUoIG5vZGUsIHRydWUsIHRydWUgKTtcblxuXHRcdFx0XHRcdC8vIEtlZXAgcmVmZXJlbmNlcyB0byBjbG9uZWQgc2NyaXB0cyBmb3IgbGF0ZXIgcmVzdG9yYXRpb25cblx0XHRcdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBzY3JpcHRzLCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhbGxiYWNrLmNhbGwoIGNvbGxlY3Rpb25bIGkgXSwgbm9kZSwgaSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cdFx0XHRcdGRvYyA9IHNjcmlwdHNbIHNjcmlwdHMubGVuZ3RoIC0gMSBdLm93bmVyRG9jdW1lbnQ7XG5cblx0XHRcdFx0Ly8gUmVlbmFibGUgc2NyaXB0c1xuXHRcdFx0XHRqUXVlcnkubWFwKCBzY3JpcHRzLCByZXN0b3JlU2NyaXB0ICk7XG5cblx0XHRcdFx0Ly8gRXZhbHVhdGUgZXhlY3V0YWJsZSBzY3JpcHRzIG9uIGZpcnN0IGRvY3VtZW50IGluc2VydGlvblxuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGhhc1NjcmlwdHM7IGkrKyApIHtcblx0XHRcdFx0XHRub2RlID0gc2NyaXB0c1sgaSBdO1xuXHRcdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggbm9kZS50eXBlIHx8IFwiXCIgKSAmJlxuXHRcdFx0XHRcdFx0IWRhdGFQcml2LmFjY2Vzcyggbm9kZSwgXCJnbG9iYWxFdmFsXCIgKSAmJlxuXHRcdFx0XHRcdFx0alF1ZXJ5LmNvbnRhaW5zKCBkb2MsIG5vZGUgKSApIHtcblxuXHRcdFx0XHRcdFx0aWYgKCBub2RlLnNyYyAmJiAoIG5vZGUudHlwZSB8fCBcIlwiICkudG9Mb3dlckNhc2UoKSAgIT09IFwibW9kdWxlXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gT3B0aW9uYWwgQUpBWCBkZXBlbmRlbmN5LCBidXQgd29uJ3QgcnVuIHNjcmlwdHMgaWYgbm90IHByZXNlbnRcblx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuX2V2YWxVcmwgJiYgIW5vZGUubm9Nb2R1bGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5Ll9ldmFsVXJsKCBub2RlLnNyYywge1xuXHRcdFx0XHRcdFx0XHRcdFx0bm9uY2U6IG5vZGUubm9uY2UgfHwgbm9kZS5nZXRBdHRyaWJ1dGUoIFwibm9uY2VcIiApXG5cdFx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRET01FdmFsKCBub2RlLnRleHRDb250ZW50LnJlcGxhY2UoIHJjbGVhblNjcmlwdCwgXCJcIiApLCBub2RlLCBkb2MgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY29sbGVjdGlvbjtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlKCBlbGVtLCBzZWxlY3Rvciwga2VlcERhdGEgKSB7XG5cdHZhciBub2RlLFxuXHRcdG5vZGVzID0gc2VsZWN0b3IgPyBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgZWxlbSApIDogZWxlbSxcblx0XHRpID0gMDtcblxuXHRmb3IgKCA7ICggbm9kZSA9IG5vZGVzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0aWYgKCAha2VlcERhdGEgJiYgbm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggbm9kZSApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBub2RlLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRpZiAoIGtlZXBEYXRhICYmIGlzQXR0YWNoZWQoIG5vZGUgKSApIHtcblx0XHRcdFx0c2V0R2xvYmFsRXZhbCggZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdH1cblx0XHRcdG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggbm9kZSApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGh0bWxQcmVmaWx0ZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHJldHVybiBodG1sLnJlcGxhY2UoIHJ4aHRtbFRhZywgXCI8JDE+PC8kMj5cIiApO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0dmFyIGksIGwsIHNyY0VsZW1lbnRzLCBkZXN0RWxlbWVudHMsXG5cdFx0XHRjbG9uZSA9IGVsZW0uY2xvbmVOb2RlKCB0cnVlICksXG5cdFx0XHRpblBhZ2UgPSBpc0F0dGFjaGVkKCBlbGVtICk7XG5cblx0XHQvLyBGaXggSUUgY2xvbmluZyBpc3N1ZXNcblx0XHRpZiAoICFzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkICYmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSApICYmXG5cdFx0XHRcdCFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gV2UgZXNjaGV3IFNpenpsZSBoZXJlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zOiBodHRwczovL2pzcGVyZi5jb20vZ2V0YWxsLXZzLXNpenpsZS8yXG5cdFx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7XG5cdFx0XHRzcmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSApO1xuXG5cdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zml4SW5wdXQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZVxuXHRcdGlmICggZGF0YUFuZEV2ZW50cyApIHtcblx0XHRcdGlmICggZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRcdHNyY0VsZW1lbnRzID0gc3JjRWxlbWVudHMgfHwgZ2V0QWxsKCBlbGVtICk7XG5cdFx0XHRcdGRlc3RFbGVtZW50cyA9IGRlc3RFbGVtZW50cyB8fCBnZXRBbGwoIGNsb25lICk7XG5cblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNsb25lQ29weUV2ZW50KCBlbGVtLCBjbG9uZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lLCBcInNjcmlwdFwiICk7XG5cdFx0aWYgKCBkZXN0RWxlbWVudHMubGVuZ3RoID4gMCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIGRlc3RFbGVtZW50cywgIWluUGFnZSAmJiBnZXRBbGwoIGVsZW0sIFwic2NyaXB0XCIgKSApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiB0aGUgY2xvbmVkIHNldFxuXHRcdHJldHVybiBjbG9uZTtcblx0fSxcblxuXHRjbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblx0XHR2YXIgZGF0YSwgZWxlbSwgdHlwZSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbCxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT09IHVuZGVmaW5lZDsgaSsrICkge1xuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cdFx0XHRcdGlmICggKCBkYXRhID0gZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhLmV2ZW50cyApIHtcblx0XHRcdFx0XHRcdGZvciAoIHR5cGUgaW4gZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggc3BlY2lhbFsgdHlwZSBdICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKTtcblxuXHRcdFx0XHRcdFx0XHQvLyBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gKSB7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1K1xuXHRcdFx0XHRcdC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZVxuXHRcdFx0XHRcdGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGRldGFjaDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yLCB0cnVlICk7XG5cdH0sXG5cblx0cmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IgKTtcblx0fSxcblxuXHR0ZXh0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRqUXVlcnkudGV4dCggdGhpcyApIDpcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0dGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0YXBwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xuXHRcdFx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0cHJlcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZSggZWxlbSwgdGFyZ2V0LmZpcnN0Q2hpbGQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YmVmb3JlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRhZnRlcjogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlbGVtLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7ICggZWxlbSA9IHRoaXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblxuXHRcdFx0XHQvLyBSZW1vdmUgYW55IHJlbWFpbmluZyBub2Rlc1xuXHRcdFx0XHRlbGVtLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdGRhdGFBbmRFdmVudHMgPSBkYXRhQW5kRXZlbnRzID09IG51bGwgPyBmYWxzZSA6IGRhdGFBbmRFdmVudHM7XG5cdFx0ZGVlcERhdGFBbmRFdmVudHMgPSBkZWVwRGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRhQW5kRXZlbnRzO1xuXG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY2xvbmUoIHRoaXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdGh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXSB8fCB7fSxcblx0XHRcdFx0aSA9IDAsXG5cdFx0XHRcdGwgPSB0aGlzLmxlbmd0aDtcblxuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmlubmVySFRNTDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2VlIGlmIHdlIGNhbiB0YWtlIGEgc2hvcnRjdXQgYW5kIGp1c3QgdXNlIGlubmVySFRNTFxuXHRcdFx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgIXJub0lubmVyaHRtbC50ZXN0KCB2YWx1ZSApICYmXG5cdFx0XHRcdCF3cmFwTWFwWyAoIHJ0YWdOYW1lLmV4ZWMoIHZhbHVlICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCkgXSApIHtcblxuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5odG1sUHJlZmlsdGVyKCB2YWx1ZSApO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdFx0ZWxlbSA9IHRoaXNbIGkgXSB8fCB7fTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXHRcdFx0XHRcdFx0XHRlbGVtLmlubmVySFRNTCA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW0gPSAwO1xuXG5cdFx0XHRcdC8vIElmIHVzaW5nIGlubmVySFRNTCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGZhbGxiYWNrIG1ldGhvZFxuXHRcdFx0XHR9IGNhdGNoICggZSApIHt9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmFwcGVuZCggdmFsdWUgKTtcblx0XHRcdH1cblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdHJlcGxhY2VXaXRoOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaWdub3JlZCA9IFtdO1xuXG5cdFx0Ly8gTWFrZSB0aGUgY2hhbmdlcywgcmVwbGFjaW5nIGVhY2ggbm9uLWlnbm9yZWQgY29udGV4dCBlbGVtZW50IHdpdGggdGhlIG5ldyBjb250ZW50XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcblxuXHRcdFx0aWYgKCBqUXVlcnkuaW5BcnJheSggdGhpcywgaWdub3JlZCApIDwgMCApIHtcblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCB0aGlzICkgKTtcblx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnJlcGxhY2VDaGlsZCggZWxlbSwgdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBGb3JjZSBjYWxsYmFjayBpbnZvY2F0aW9uXG5cdFx0fSwgaWdub3JlZCApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCB7XG5cdGFwcGVuZFRvOiBcImFwcGVuZFwiLFxuXHRwcmVwZW5kVG86IFwicHJlcGVuZFwiLFxuXHRpbnNlcnRCZWZvcmU6IFwiYmVmb3JlXCIsXG5cdGluc2VydEFmdGVyOiBcImFmdGVyXCIsXG5cdHJlcGxhY2VBbGw6IFwicmVwbGFjZVdpdGhcIlxufSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgZWxlbXMsXG5cdFx0XHRyZXQgPSBbXSxcblx0XHRcdGluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSxcblx0XHRcdGxhc3QgPSBpbnNlcnQubGVuZ3RoIC0gMSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyBpIDw9IGxhc3Q7IGkrKyApIHtcblx0XHRcdGVsZW1zID0gaSA9PT0gbGFzdCA/IHRoaXMgOiB0aGlzLmNsb25lKCB0cnVlICk7XG5cdFx0XHRqUXVlcnkoIGluc2VydFsgaSBdIClbIG9yaWdpbmFsIF0oIGVsZW1zICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0Ly8gLmdldCgpIGJlY2F1c2UgcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0cHVzaC5hcHBseSggcmV0LCBlbGVtcy5nZXQoKSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0ICk7XG5cdH07XG59ICk7XG52YXIgcm51bW5vbnB4ID0gbmV3IFJlZ0V4cCggXCJeKFwiICsgcG51bSArIFwiKSg/IXB4KVthLXolXSskXCIsIFwiaVwiICk7XG5cbnZhciBnZXRTdHlsZXMgPSBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seSwgRmlyZWZveCA8PTMwICgjMTUwOTgsICMxNDE1MClcblx0XHQvLyBJRSB0aHJvd3Mgb24gZWxlbWVudHMgY3JlYXRlZCBpbiBwb3B1cHNcblx0XHQvLyBGRiBtZWFud2hpbGUgdGhyb3dzIG9uIGZyYW1lIGVsZW1lbnRzIHRocm91Z2ggXCJkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlXCJcblx0XHR2YXIgdmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcblxuXHRcdGlmICggIXZpZXcgfHwgIXZpZXcub3BlbmVyICkge1xuXHRcdFx0dmlldyA9IHdpbmRvdztcblx0XHR9XG5cblx0XHRyZXR1cm4gdmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtICk7XG5cdH07XG5cbnZhciByYm94U3R5bGUgPSBuZXcgUmVnRXhwKCBjc3NFeHBhbmQuam9pbiggXCJ8XCIgKSwgXCJpXCIgKTtcblxuXG5cbiggZnVuY3Rpb24oKSB7XG5cblx0Ly8gRXhlY3V0aW5nIGJvdGggcGl4ZWxQb3NpdGlvbiAmIGJveFNpemluZ1JlbGlhYmxlIHRlc3RzIHJlcXVpcmUgb25seSBvbmUgbGF5b3V0XG5cdC8vIHNvIHRoZXkncmUgZXhlY3V0ZWQgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHRoZSBzZWNvbmQgY29tcHV0YXRpb24uXG5cdGZ1bmN0aW9uIGNvbXB1dGVTdHlsZVRlc3RzKCkge1xuXG5cdFx0Ly8gVGhpcyBpcyBhIHNpbmdsZXRvbiwgd2UgbmVlZCB0byBleGVjdXRlIGl0IG9ubHkgb25jZVxuXHRcdGlmICggIWRpdiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb250YWluZXIuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDt3aWR0aDo2MHB4O1wiICtcblx0XHRcdFwibWFyZ2luLXRvcDoxcHg7cGFkZGluZzowO2JvcmRlcjowXCI7XG5cdFx0ZGl2LnN0eWxlLmNzc1RleHQgPVxuXHRcdFx0XCJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpzY3JvbGw7XCIgK1xuXHRcdFx0XCJtYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4O1wiICtcblx0XHRcdFwid2lkdGg6NjAlO3RvcDoxJVwiO1xuXHRcdGRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggY29udGFpbmVyICkuYXBwZW5kQ2hpbGQoIGRpdiApO1xuXG5cdFx0dmFyIGRpdlN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIGRpdiApO1xuXHRcdHBpeGVsUG9zaXRpb25WYWwgPSBkaXZTdHlsZS50b3AgIT09IFwiMSVcIjtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHksIEZpcmVmb3ggPD0zIC0gNDRcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnRWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLm1hcmdpbkxlZnQgKSA9PT0gMTI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBTYWZhcmkgPD05LjEgLSAxMC4xLCBpT1MgPD03LjAgLSA5LjNcblx0XHQvLyBTb21lIHN0eWxlcyBjb21lIGJhY2sgd2l0aCBwZXJjZW50YWdlIHZhbHVlcywgZXZlbiB0aG91Z2ggdGhleSBzaG91bGRuJ3Rcblx0XHRkaXYuc3R5bGUucmlnaHQgPSBcIjYwJVwiO1xuXHRcdHBpeGVsQm94U3R5bGVzVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5yaWdodCApID09PSAzNjtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdFx0Ly8gRGV0ZWN0IG1pc3JlcG9ydGluZyBvZiBjb250ZW50IGRpbWVuc2lvbnMgZm9yIGJveC1zaXppbmc6Ym9yZGVyLWJveCBlbGVtZW50c1xuXHRcdGJveFNpemluZ1JlbGlhYmxlVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS53aWR0aCApID09PSAzNjtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdC8vIERldGVjdCBvdmVyZmxvdzpzY3JvbGwgc2NyZXdpbmVzcyAoZ2gtMzY5OSlcblx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD02NFxuXHRcdC8vIERvbid0IGdldCB0cmlja2VkIHdoZW4gem9vbSBhZmZlY3RzIG9mZnNldFdpZHRoIChnaC00MDI5KVxuXHRcdGRpdi5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblx0XHRzY3JvbGxib3hTaXplVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXYub2Zmc2V0V2lkdGggLyAzICkgPT09IDEyO1xuXG5cdFx0ZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTtcblxuXHRcdC8vIE51bGxpZnkgdGhlIGRpdiBzbyBpdCB3b3VsZG4ndCBiZSBzdG9yZWQgaW4gdGhlIG1lbW9yeSBhbmRcblx0XHQvLyBpdCB3aWxsIGFsc28gYmUgYSBzaWduIHRoYXQgY2hlY2tzIGFscmVhZHkgcGVyZm9ybWVkXG5cdFx0ZGl2ID0gbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIHJvdW5kUGl4ZWxNZWFzdXJlcyggbWVhc3VyZSApIHtcblx0XHRyZXR1cm4gTWF0aC5yb3VuZCggcGFyc2VGbG9hdCggbWVhc3VyZSApICk7XG5cdH1cblxuXHR2YXIgcGl4ZWxQb3NpdGlvblZhbCwgYm94U2l6aW5nUmVsaWFibGVWYWwsIHNjcm9sbGJveFNpemVWYWwsIHBpeGVsQm94U3R5bGVzVmFsLFxuXHRcdHJlbGlhYmxlTWFyZ2luTGVmdFZhbCxcblx0XHRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICksXG5cdFx0ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApO1xuXG5cdC8vIEZpbmlzaCBlYXJseSBpbiBsaW1pdGVkIChub24tYnJvd3NlcikgZW52aXJvbm1lbnRzXG5cdGlmICggIWRpdi5zdHlsZSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdC8vIFN0eWxlIG9mIGNsb25lZCBlbGVtZW50IGFmZmVjdHMgc291cmNlIGVsZW1lbnQgY2xvbmVkICgjODkwOClcblx0ZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJjb250ZW50LWJveFwiO1xuXHRkaXYuY2xvbmVOb2RlKCB0cnVlICkuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcIlwiO1xuXHRzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSA9IGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9PT0gXCJjb250ZW50LWJveFwiO1xuXG5cdGpRdWVyeS5leHRlbmQoIHN1cHBvcnQsIHtcblx0XHRib3hTaXppbmdSZWxpYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIGJveFNpemluZ1JlbGlhYmxlVmFsO1xuXHRcdH0sXG5cdFx0cGl4ZWxCb3hTdHlsZXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbEJveFN0eWxlc1ZhbDtcblx0XHR9LFxuXHRcdHBpeGVsUG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbFBvc2l0aW9uVmFsO1xuXHRcdH0sXG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0OiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcmVsaWFibGVNYXJnaW5MZWZ0VmFsO1xuXHRcdH0sXG5cdFx0c2Nyb2xsYm94U2l6ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHNjcm9sbGJveFNpemVWYWw7XG5cdFx0fVxuXHR9ICk7XG59ICkoKTtcblxuXG5mdW5jdGlvbiBjdXJDU1MoIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkge1xuXHR2YXIgd2lkdGgsIG1pbldpZHRoLCBtYXhXaWR0aCwgcmV0LFxuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA1MStcblx0XHQvLyBSZXRyaWV2aW5nIHN0eWxlIGJlZm9yZSBjb21wdXRlZCBzb21laG93XG5cdFx0Ly8gZml4ZXMgYW4gaXNzdWUgd2l0aCBnZXR0aW5nIHdyb25nIHZhbHVlc1xuXHRcdC8vIG9uIGRldGFjaGVkIGVsZW1lbnRzXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdGNvbXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7XG5cblx0Ly8gZ2V0UHJvcGVydHlWYWx1ZSBpcyBuZWVkZWQgZm9yOlxuXHQvLyAgIC5jc3MoJ2ZpbHRlcicpIChJRSA5IG9ubHksICMxMjUzNylcblx0Ly8gICAuY3NzKCctLWN1c3RvbVByb3BlcnR5KSAoIzMxNDQpXG5cdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0cmV0ID0gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSggbmFtZSApIHx8IGNvbXB1dGVkWyBuYW1lIF07XG5cblx0XHRpZiAoIHJldCA9PT0gXCJcIiAmJiAhaXNBdHRhY2hlZCggZWxlbSApICkge1xuXHRcdFx0cmV0ID0galF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gQSB0cmlidXRlIHRvIHRoZSBcImF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHNcIlxuXHRcdC8vIEFuZHJvaWQgQnJvd3NlciByZXR1cm5zIHBlcmNlbnRhZ2UgZm9yIHNvbWUgdmFsdWVzLFxuXHRcdC8vIGJ1dCB3aWR0aCBzZWVtcyB0byBiZSByZWxpYWJseSBwaXhlbHMuXG5cdFx0Ly8gVGhpcyBpcyBhZ2FpbnN0IHRoZSBDU1NPTSBkcmFmdCBzcGVjOlxuXHRcdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jcmVzb2x2ZWQtdmFsdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5waXhlbEJveFN0eWxlcygpICYmIHJudW1ub25weC50ZXN0KCByZXQgKSAmJiByYm94U3R5bGUudGVzdCggbmFtZSApICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgb3JpZ2luYWwgdmFsdWVzXG5cdFx0XHR3aWR0aCA9IHN0eWxlLndpZHRoO1xuXHRcdFx0bWluV2lkdGggPSBzdHlsZS5taW5XaWR0aDtcblx0XHRcdG1heFdpZHRoID0gc3R5bGUubWF4V2lkdGg7XG5cblx0XHRcdC8vIFB1dCBpbiB0aGUgbmV3IHZhbHVlcyB0byBnZXQgYSBjb21wdXRlZCB2YWx1ZSBvdXRcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gc3R5bGUubWF4V2lkdGggPSBzdHlsZS53aWR0aCA9IHJldDtcblx0XHRcdHJldCA9IGNvbXB1dGVkLndpZHRoO1xuXG5cdFx0XHQvLyBSZXZlcnQgdGhlIGNoYW5nZWQgdmFsdWVzXG5cdFx0XHRzdHlsZS53aWR0aCA9IHdpZHRoO1xuXHRcdFx0c3R5bGUubWluV2lkdGggPSBtaW5XaWR0aDtcblx0XHRcdHN0eWxlLm1heFdpZHRoID0gbWF4V2lkdGg7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJldCAhPT0gdW5kZWZpbmVkID9cblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0XHQvLyBJRSByZXR1cm5zIHpJbmRleCB2YWx1ZSBhcyBhbiBpbnRlZ2VyLlxuXHRcdHJldCArIFwiXCIgOlxuXHRcdHJldDtcbn1cblxuXG5mdW5jdGlvbiBhZGRHZXRIb29rSWYoIGNvbmRpdGlvbkZuLCBob29rRm4gKSB7XG5cblx0Ly8gRGVmaW5lIHRoZSBob29rLCB3ZSdsbCBjaGVjayBvbiB0aGUgZmlyc3QgcnVuIGlmIGl0J3MgcmVhbGx5IG5lZWRlZC5cblx0cmV0dXJuIHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBjb25kaXRpb25GbigpICkge1xuXG5cdFx0XHRcdC8vIEhvb2sgbm90IG5lZWRlZCAob3IgaXQncyBub3QgcG9zc2libGUgdG8gdXNlIGl0IGR1ZVxuXHRcdFx0XHQvLyB0byBtaXNzaW5nIGRlcGVuZGVuY3kpLCByZW1vdmUgaXQuXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLmdldDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBIb29rIG5lZWRlZDsgcmVkZWZpbmUgaXQgc28gdGhhdCB0aGUgc3VwcG9ydCB0ZXN0IGlzIG5vdCBleGVjdXRlZCBhZ2Fpbi5cblx0XHRcdHJldHVybiAoIHRoaXMuZ2V0ID0gaG9va0ZuICkuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH1cblx0fTtcbn1cblxuXG52YXIgY3NzUHJlZml4ZXMgPSBbIFwiV2Via2l0XCIsIFwiTW96XCIsIFwibXNcIiBdLFxuXHRlbXB0eVN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLnN0eWxlLFxuXHR2ZW5kb3JQcm9wcyA9IHt9O1xuXG4vLyBSZXR1cm4gYSB2ZW5kb3ItcHJlZml4ZWQgcHJvcGVydHkgb3IgdW5kZWZpbmVkXG5mdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHtcblxuXHQvLyBDaGVjayBmb3IgdmVuZG9yIHByZWZpeGVkIG5hbWVzXG5cdHZhciBjYXBOYW1lID0gbmFtZVsgMCBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKCAxICksXG5cdFx0aSA9IGNzc1ByZWZpeGVzLmxlbmd0aDtcblxuXHR3aGlsZSAoIGktLSApIHtcblx0XHRuYW1lID0gY3NzUHJlZml4ZXNbIGkgXSArIGNhcE5hbWU7XG5cdFx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0XHRyZXR1cm4gbmFtZTtcblx0XHR9XG5cdH1cbn1cblxuLy8gUmV0dXJuIGEgcG90ZW50aWFsbHktbWFwcGVkIGpRdWVyeS5jc3NQcm9wcyBvciB2ZW5kb3IgcHJlZml4ZWQgcHJvcGVydHlcbmZ1bmN0aW9uIGZpbmFsUHJvcE5hbWUoIG5hbWUgKSB7XG5cdHZhciBmaW5hbCA9IGpRdWVyeS5jc3NQcm9wc1sgbmFtZSBdIHx8IHZlbmRvclByb3BzWyBuYW1lIF07XG5cblx0aWYgKCBmaW5hbCApIHtcblx0XHRyZXR1cm4gZmluYWw7XG5cdH1cblx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cblx0cmV0dXJuIHZlbmRvclByb3BzWyBuYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHx8IG5hbWU7XG59XG5cblxudmFyXG5cblx0Ly8gU3dhcHBhYmxlIGlmIGRpc3BsYXkgaXMgbm9uZSBvciBzdGFydHMgd2l0aCB0YWJsZVxuXHQvLyBleGNlcHQgXCJ0YWJsZVwiLCBcInRhYmxlLWNlbGxcIiwgb3IgXCJ0YWJsZS1jYXB0aW9uXCJcblx0Ly8gU2VlIGhlcmUgZm9yIGRpc3BsYXkgdmFsdWVzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9kaXNwbGF5XG5cdHJkaXNwbGF5c3dhcCA9IC9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxcblx0cmN1c3RvbVByb3AgPSAvXi0tLyxcblx0Y3NzU2hvdyA9IHsgcG9zaXRpb246IFwiYWJzb2x1dGVcIiwgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiwgZGlzcGxheTogXCJibG9ja1wiIH0sXG5cdGNzc05vcm1hbFRyYW5zZm9ybSA9IHtcblx0XHRsZXR0ZXJTcGFjaW5nOiBcIjBcIixcblx0XHRmb250V2VpZ2h0OiBcIjQwMFwiXG5cdH07XG5cbmZ1bmN0aW9uIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgc3VidHJhY3QgKSB7XG5cblx0Ly8gQW55IHJlbGF0aXZlICgrLy0pIHZhbHVlcyBoYXZlIGFscmVhZHkgYmVlblxuXHQvLyBub3JtYWxpemVkIGF0IHRoaXMgcG9pbnRcblx0dmFyIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICk7XG5cdHJldHVybiBtYXRjaGVzID9cblxuXHRcdC8vIEd1YXJkIGFnYWluc3QgdW5kZWZpbmVkIFwic3VidHJhY3RcIiwgZS5nLiwgd2hlbiB1c2VkIGFzIGluIGNzc0hvb2tzXG5cdFx0TWF0aC5tYXgoIDAsIG1hdGNoZXNbIDIgXSAtICggc3VidHJhY3QgfHwgMCApICkgKyAoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSA6XG5cdFx0dmFsdWU7XG59XG5cbmZ1bmN0aW9uIGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBib3gsIGlzQm9yZGVyQm94LCBzdHlsZXMsIGNvbXB1dGVkVmFsICkge1xuXHR2YXIgaSA9IGRpbWVuc2lvbiA9PT0gXCJ3aWR0aFwiID8gMSA6IDAsXG5cdFx0ZXh0cmEgPSAwLFxuXHRcdGRlbHRhID0gMDtcblxuXHQvLyBBZGp1c3RtZW50IG1heSBub3QgYmUgbmVjZXNzYXJ5XG5cdGlmICggYm94ID09PSAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICkgKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgKSB7XG5cblx0XHQvLyBCb3RoIGJveCBtb2RlbHMgZXhjbHVkZSBtYXJnaW5cblx0XHRpZiAoIGJveCA9PT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIGJveCArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgY29udGVudC1ib3gsIHdlJ3JlIHNlZWtpbmcgXCJwYWRkaW5nXCIgb3IgXCJib3JkZXJcIiBvciBcIm1hcmdpblwiXG5cdFx0aWYgKCAhaXNCb3JkZXJCb3ggKSB7XG5cblx0XHRcdC8vIEFkZCBwYWRkaW5nXG5cdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblxuXHRcdFx0Ly8gRm9yIFwiYm9yZGVyXCIgb3IgXCJtYXJnaW5cIiwgYWRkIGJvcmRlclxuXHRcdFx0aWYgKCBib3ggIT09IFwicGFkZGluZ1wiICkge1xuXHRcdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXG5cdFx0XHQvLyBCdXQgc3RpbGwga2VlcCB0cmFjayBvZiBpdCBvdGhlcndpc2Vcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGV4dHJhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgYm9yZGVyLWJveCAoY29udGVudCArIHBhZGRpbmcgKyBib3JkZXIpLCB3ZSdyZSBzZWVraW5nIFwiY29udGVudFwiIG9yXG5cdFx0Ly8gXCJwYWRkaW5nXCIgb3IgXCJtYXJnaW5cIlxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIEZvciBcImNvbnRlbnRcIiwgc3VidHJhY3QgcGFkZGluZ1xuXHRcdFx0aWYgKCBib3ggPT09IFwiY29udGVudFwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yIFwiY29udGVudFwiIG9yIFwicGFkZGluZ1wiLCBzdWJ0cmFjdCBib3JkZXJcblx0XHRcdGlmICggYm94ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFjY291bnQgZm9yIHBvc2l0aXZlIGNvbnRlbnQtYm94IHNjcm9sbCBndXR0ZXIgd2hlbiByZXF1ZXN0ZWQgYnkgcHJvdmlkaW5nIGNvbXB1dGVkVmFsXG5cdGlmICggIWlzQm9yZGVyQm94ICYmIGNvbXB1dGVkVmFsID49IDAgKSB7XG5cblx0XHQvLyBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgYSByb3VuZGVkIHN1bSBvZiBjb250ZW50LCBwYWRkaW5nLCBzY3JvbGwgZ3V0dGVyLCBhbmQgYm9yZGVyXG5cdFx0Ly8gQXNzdW1pbmcgaW50ZWdlciBzY3JvbGwgZ3V0dGVyLCBzdWJ0cmFjdCB0aGUgcmVzdCBhbmQgcm91bmQgZG93blxuXHRcdGRlbHRhICs9IE1hdGgubWF4KCAwLCBNYXRoLmNlaWwoXG5cdFx0XHRlbGVtWyBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApIF0gLVxuXHRcdFx0Y29tcHV0ZWRWYWwgLVxuXHRcdFx0ZGVsdGEgLVxuXHRcdFx0ZXh0cmEgLVxuXHRcdFx0MC41XG5cblx0XHQvLyBJZiBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgdW5rbm93biwgdGhlbiB3ZSBjYW4ndCBkZXRlcm1pbmUgY29udGVudC1ib3ggc2Nyb2xsIGd1dHRlclxuXHRcdC8vIFVzZSBhbiBleHBsaWNpdCB6ZXJvIHRvIGF2b2lkIE5hTiAoZ2gtMzk2NClcblx0XHQpICkgfHwgMDtcblx0fVxuXG5cdHJldHVybiBkZWx0YTtcbn1cblxuZnVuY3Rpb24gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApIHtcblxuXHQvLyBTdGFydCB3aXRoIGNvbXB1dGVkIHN0eWxlXG5cdHZhciBzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblxuXHRcdC8vIFRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3csIG9ubHkgZmV0Y2ggYm94U2l6aW5nIGlmIHdlIG5lZWQgaXQgKGdoLTQzMjIpLlxuXHRcdC8vIEZha2UgY29udGVudC1ib3ggdW50aWwgd2Uga25vdyBpdCdzIG5lZWRlZCB0byBrbm93IHRoZSB0cnVlIHZhbHVlLlxuXHRcdGJveFNpemluZ05lZWRlZCA9ICFzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgfHwgZXh0cmEsXG5cdFx0aXNCb3JkZXJCb3ggPSBib3hTaXppbmdOZWVkZWQgJiZcblx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCIsXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IGlzQm9yZGVyQm94LFxuXG5cdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBkaW1lbnNpb24sIHN0eWxlcyApLFxuXHRcdG9mZnNldFByb3AgPSBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApO1xuXG5cdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NFxuXHQvLyBSZXR1cm4gYSBjb25mb3VuZGluZyBub24tcGl4ZWwgdmFsdWUgb3IgZmVpZ24gaWdub3JhbmNlLCBhcyBhcHByb3ByaWF0ZS5cblx0aWYgKCBybnVtbm9ucHgudGVzdCggdmFsICkgKSB7XG5cdFx0aWYgKCAhZXh0cmEgKSB7XG5cdFx0XHRyZXR1cm4gdmFsO1xuXHRcdH1cblx0XHR2YWwgPSBcImF1dG9cIjtcblx0fVxuXG5cblx0Ly8gRmFsbCBiYWNrIHRvIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCB3aGVuIHZhbHVlIGlzIFwiYXV0b1wiXG5cdC8vIFRoaXMgaGFwcGVucyBmb3IgaW5saW5lIGVsZW1lbnRzIHdpdGggbm8gZXhwbGljaXQgc2V0dGluZyAoZ2gtMzU3MSlcblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSAtIDQuMyBvbmx5XG5cdC8vIEFsc28gdXNlIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBmb3IgbWlzcmVwb3J0ZWQgaW5saW5lIGRpbWVuc2lvbnMgKGdoLTM2MDIpXG5cdC8vIFN1cHBvcnQ6IElFIDktMTEgb25seVxuXHQvLyBBbHNvIHVzZSBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgZm9yIHdoZW4gYm94IHNpemluZyBpcyB1bnJlbGlhYmxlXG5cdC8vIFdlIHVzZSBnZXRDbGllbnRSZWN0cygpIHRvIGNoZWNrIGZvciBoaWRkZW4vZGlzY29ubmVjdGVkLlxuXHQvLyBJbiB0aG9zZSBjYXNlcywgdGhlIGNvbXB1dGVkIHZhbHVlIGNhbiBiZSB0cnVzdGVkIHRvIGJlIGJvcmRlci1ib3hcblx0aWYgKCAoICFzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgJiYgaXNCb3JkZXJCb3ggfHxcblx0XHR2YWwgPT09IFwiYXV0b1wiIHx8XG5cdFx0IXBhcnNlRmxvYXQoIHZhbCApICYmIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiaW5saW5lXCIgKSAmJlxuXHRcdGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7XG5cblx0XHRpc0JvcmRlckJveCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCI7XG5cblx0XHQvLyBXaGVyZSBhdmFpbGFibGUsIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBhcHByb3hpbWF0ZSBib3JkZXIgYm94IGRpbWVuc2lvbnMuXG5cdFx0Ly8gV2hlcmUgbm90IGF2YWlsYWJsZSAoZS5nLiwgU1ZHKSwgYXNzdW1lIHVucmVsaWFibGUgYm94LXNpemluZyBhbmQgaW50ZXJwcmV0IHRoZVxuXHRcdC8vIHJldHJpZXZlZCB2YWx1ZSBhcyBhIGNvbnRlbnQgYm94IGRpbWVuc2lvbi5cblx0XHR2YWx1ZUlzQm9yZGVyQm94ID0gb2Zmc2V0UHJvcCBpbiBlbGVtO1xuXHRcdGlmICggdmFsdWVJc0JvcmRlckJveCApIHtcblx0XHRcdHZhbCA9IGVsZW1bIG9mZnNldFByb3AgXTtcblx0XHR9XG5cdH1cblxuXHQvLyBOb3JtYWxpemUgXCJcIiBhbmQgYXV0b1xuXHR2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwO1xuXG5cdC8vIEFkanVzdCBmb3IgdGhlIGVsZW1lbnQncyBib3ggbW9kZWxcblx0cmV0dXJuICggdmFsICtcblx0XHRib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRlbGVtLFxuXHRcdFx0ZGltZW5zaW9uLFxuXHRcdFx0ZXh0cmEgfHwgKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApLFxuXHRcdFx0dmFsdWVJc0JvcmRlckJveCxcblx0XHRcdHN0eWxlcyxcblxuXHRcdFx0Ly8gUHJvdmlkZSB0aGUgY3VycmVudCBjb21wdXRlZCBzaXplIHRvIHJlcXVlc3Qgc2Nyb2xsIGd1dHRlciBjYWxjdWxhdGlvbiAoZ2gtMzU4OSlcblx0XHRcdHZhbFxuXHRcdClcblx0KSArIFwicHhcIjtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIEFkZCBpbiBzdHlsZSBwcm9wZXJ0eSBob29rcyBmb3Igb3ZlcnJpZGluZyB0aGUgZGVmYXVsdFxuXHQvLyBiZWhhdmlvciBvZiBnZXR0aW5nIGFuZCBzZXR0aW5nIGEgc3R5bGUgcHJvcGVydHlcblx0Y3NzSG9va3M6IHtcblx0XHRvcGFjaXR5OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdFx0XHRcdC8vIFdlIHNob3VsZCBhbHdheXMgZ2V0IGEgbnVtYmVyIGJhY2sgZnJvbSBvcGFjaXR5XG5cdFx0XHRcdFx0dmFyIHJldCA9IGN1ckNTUyggZWxlbSwgXCJvcGFjaXR5XCIgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmV0ID09PSBcIlwiID8gXCIxXCIgOiByZXQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0Ly8gRG9uJ3QgYXV0b21hdGljYWxseSBhZGQgXCJweFwiIHRvIHRoZXNlIHBvc3NpYmx5LXVuaXRsZXNzIHByb3BlcnRpZXNcblx0Y3NzTnVtYmVyOiB7XG5cdFx0XCJhbmltYXRpb25JdGVyYXRpb25Db3VudFwiOiB0cnVlLFxuXHRcdFwiY29sdW1uQ291bnRcIjogdHJ1ZSxcblx0XHRcImZpbGxPcGFjaXR5XCI6IHRydWUsXG5cdFx0XCJmbGV4R3Jvd1wiOiB0cnVlLFxuXHRcdFwiZmxleFNocmlua1wiOiB0cnVlLFxuXHRcdFwiZm9udFdlaWdodFwiOiB0cnVlLFxuXHRcdFwiZ3JpZEFyZWFcIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5cIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5FbmRcIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5TdGFydFwiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd1wiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd0VuZFwiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd1N0YXJ0XCI6IHRydWUsXG5cdFx0XCJsaW5lSGVpZ2h0XCI6IHRydWUsXG5cdFx0XCJvcGFjaXR5XCI6IHRydWUsXG5cdFx0XCJvcmRlclwiOiB0cnVlLFxuXHRcdFwib3JwaGFuc1wiOiB0cnVlLFxuXHRcdFwid2lkb3dzXCI6IHRydWUsXG5cdFx0XCJ6SW5kZXhcIjogdHJ1ZSxcblx0XHRcInpvb21cIjogdHJ1ZVxuXHR9LFxuXG5cdC8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3NlIG5hbWVzIHlvdSB3aXNoIHRvIGZpeCBiZWZvcmVcblx0Ly8gc2V0dGluZyBvciBnZXR0aW5nIHRoZSB2YWx1ZVxuXHRjc3NQcm9wczoge30sXG5cblx0Ly8gR2V0IGFuZCBzZXQgdGhlIHN0eWxlIHByb3BlcnR5IG9uIGEgRE9NIE5vZGVcblx0c3R5bGU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7XG5cblx0XHQvLyBEb24ndCBzZXQgc3R5bGVzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoICFlbGVtIHx8IGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWVcblx0XHR2YXIgcmV0LCB0eXBlLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0gY2FtZWxDYXNlKCBuYW1lICksXG5cdFx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICksXG5cdFx0XHRzdHlsZSA9IGVsZW0uc3R5bGU7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUuIFdlIGRvbid0XG5cdFx0Ly8gd2FudCB0byBxdWVyeSB0aGUgdmFsdWUgaWYgaXQgaXMgYSBDU1MgY3VzdG9tIHByb3BlcnR5XG5cdFx0Ly8gc2luY2UgdGhleSBhcmUgdXNlci1kZWZpbmVkLlxuXHRcdGlmICggIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdG5hbWUgPSBmaW5hbFByb3BOYW1lKCBvcmlnTmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIEdldHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24sIHRoZW4gdW5wcmVmaXhlZCB2ZXJzaW9uXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBDaGVjayBpZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWVcblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR0eXBlID0gdHlwZW9mIHZhbHVlO1xuXG5cdFx0XHQvLyBDb252ZXJ0IFwiKz1cIiBvciBcIi09XCIgdG8gcmVsYXRpdmUgbnVtYmVycyAoIzczNDUpXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwic3RyaW5nXCIgJiYgKCByZXQgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJiByZXRbIDEgXSApIHtcblx0XHRcdFx0dmFsdWUgPSBhZGp1c3RDU1MoIGVsZW0sIG5hbWUsIHJldCApO1xuXG5cdFx0XHRcdC8vIEZpeGVzIGJ1ZyAjOTIzN1xuXHRcdFx0XHR0eXBlID0gXCJudW1iZXJcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgbnVsbCBhbmQgTmFOIHZhbHVlcyBhcmVuJ3Qgc2V0ICgjNzExNilcblx0XHRcdGlmICggdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBudW1iZXIgd2FzIHBhc3NlZCBpbiwgYWRkIHRoZSB1bml0IChleGNlcHQgZm9yIGNlcnRhaW4gQ1NTIHByb3BlcnRpZXMpXG5cdFx0XHQvLyBUaGUgaXNDdXN0b21Qcm9wIGNoZWNrIGNhbiBiZSByZW1vdmVkIGluIGpRdWVyeSA0LjAgd2hlbiB3ZSBvbmx5IGF1dG8tYXBwZW5kXG5cdFx0XHQvLyBcInB4XCIgdG8gYSBmZXcgaGFyZGNvZGVkIHZhbHVlcy5cblx0XHRcdGlmICggdHlwZSA9PT0gXCJudW1iZXJcIiAmJiAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0XHR2YWx1ZSArPSByZXQgJiYgcmV0WyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBvcmlnTmFtZSBdID8gXCJcIiA6IFwicHhcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBiYWNrZ3JvdW5kLSogcHJvcHMgYWZmZWN0IG9yaWdpbmFsIGNsb25lJ3MgdmFsdWVzXG5cdFx0XHRpZiAoICFzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSAmJiB2YWx1ZSA9PT0gXCJcIiAmJiBuYW1lLmluZGV4T2YoIFwiYmFja2dyb3VuZFwiICkgPT09IDAgKSB7XG5cdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSBcImluaGVyaXRcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCwgdXNlIHRoYXQgdmFsdWUsIG90aGVyd2lzZSBqdXN0IHNldCB0aGUgc3BlY2lmaWVkIHZhbHVlXG5cdFx0XHRpZiAoICFob29rcyB8fCAhKCBcInNldFwiIGluIGhvb2tzICkgfHxcblx0XHRcdFx0KCB2YWx1ZSA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGlmICggaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0XHRcdHN0eWxlLnNldFByb3BlcnR5KCBuYW1lLCB2YWx1ZSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIG5vbi1jb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIGZhbHNlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdGhlcndpc2UganVzdCBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIHN0eWxlIG9iamVjdFxuXHRcdFx0cmV0dXJuIHN0eWxlWyBuYW1lIF07XG5cdFx0fVxuXHR9LFxuXG5cdGNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGV4dHJhLCBzdHlsZXMgKSB7XG5cdFx0dmFyIHZhbCwgbnVtLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0gY2FtZWxDYXNlKCBuYW1lICksXG5cdFx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUuIFdlIGRvbid0XG5cdFx0Ly8gd2FudCB0byBtb2RpZnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cblx0XHRpZiAoICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBUcnkgcHJlZml4ZWQgbmFtZSBmb2xsb3dlZCBieSB0aGUgdW5wcmVmaXhlZCBuYW1lXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyApIHtcblx0XHRcdHZhbCA9IGhvb2tzLmdldCggZWxlbSwgdHJ1ZSwgZXh0cmEgKTtcblx0XHR9XG5cblx0XHQvLyBPdGhlcndpc2UsIGlmIGEgd2F5IHRvIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZXhpc3RzLCB1c2UgdGhhdFxuXHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApO1xuXHRcdH1cblxuXHRcdC8vIENvbnZlcnQgXCJub3JtYWxcIiB0byBjb21wdXRlZCB2YWx1ZVxuXHRcdGlmICggdmFsID09PSBcIm5vcm1hbFwiICYmIG5hbWUgaW4gY3NzTm9ybWFsVHJhbnNmb3JtICkge1xuXHRcdFx0dmFsID0gY3NzTm9ybWFsVHJhbnNmb3JtWyBuYW1lIF07XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBudW1lcmljIGlmIGZvcmNlZCBvciBhIHF1YWxpZmllciB3YXMgcHJvdmlkZWQgYW5kIHZhbCBsb29rcyBudW1lcmljXG5cdFx0aWYgKCBleHRyYSA9PT0gXCJcIiB8fCBleHRyYSApIHtcblx0XHRcdG51bSA9IHBhcnNlRmxvYXQoIHZhbCApO1xuXHRcdFx0cmV0dXJuIGV4dHJhID09PSB0cnVlIHx8IGlzRmluaXRlKCBudW0gKSA/IG51bSB8fCAwIDogdmFsO1xuXHRcdH1cblxuXHRcdHJldHVybiB2YWw7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJoZWlnaHRcIiwgXCJ3aWR0aFwiIF0sIGZ1bmN0aW9uKCBpLCBkaW1lbnNpb24gKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgZGltZW5zaW9uIF0gPSB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQsIGV4dHJhICkge1xuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdFx0XHQvLyBDZXJ0YWluIGVsZW1lbnRzIGNhbiBoYXZlIGRpbWVuc2lvbiBpbmZvIGlmIHdlIGludmlzaWJseSBzaG93IHRoZW1cblx0XHRcdFx0Ly8gYnV0IGl0IG11c3QgaGF2ZSBhIGN1cnJlbnQgZGlzcGxheSBzdHlsZSB0aGF0IHdvdWxkIGJlbmVmaXRcblx0XHRcdFx0cmV0dXJuIHJkaXNwbGF5c3dhcC50ZXN0KCBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApICkgJiZcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA4K1xuXHRcdFx0XHRcdC8vIFRhYmxlIGNvbHVtbnMgaW4gU2FmYXJpIGhhdmUgbm9uLXplcm8gb2Zmc2V0V2lkdGggJiB6ZXJvXG5cdFx0XHRcdFx0Ly8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggdW5sZXNzIGRpc3BsYXkgaXMgY2hhbmdlZC5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHRcdFx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlXG5cdFx0XHRcdFx0Ly8gaW4gSUUgdGhyb3dzIGFuIGVycm9yLlxuXHRcdFx0XHRcdCggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggfHwgIWVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKSA/XG5cdFx0XHRcdFx0XHRzd2FwKCBlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKTtcblx0XHRcdFx0XHRcdH0gKSA6XG5cdFx0XHRcdFx0XHRnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBleHRyYSApIHtcblx0XHRcdHZhciBtYXRjaGVzLFxuXHRcdFx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblxuXHRcdFx0XHQvLyBPbmx5IHJlYWQgc3R5bGVzLnBvc2l0aW9uIGlmIHRoZSB0ZXN0IGhhcyBhIGNoYW5jZSB0byBmYWlsXG5cdFx0XHRcdC8vIHRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3cuXG5cdFx0XHRcdHNjcm9sbGJveFNpemVCdWdneSA9ICFzdXBwb3J0LnNjcm9sbGJveFNpemUoKSAmJlxuXHRcdFx0XHRcdHN0eWxlcy5wb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiLFxuXG5cdFx0XHRcdC8vIFRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3csIG9ubHkgZmV0Y2ggYm94U2l6aW5nIGlmIHdlIG5lZWQgaXQgKGdoLTM5OTEpXG5cdFx0XHRcdGJveFNpemluZ05lZWRlZCA9IHNjcm9sbGJveFNpemVCdWdneSB8fCBleHRyYSxcblx0XHRcdFx0aXNCb3JkZXJCb3ggPSBib3hTaXppbmdOZWVkZWQgJiZcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdFx0XHRzdWJ0cmFjdCA9IGV4dHJhID9cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRcdFx0XHRlbGVtLFxuXHRcdFx0XHRcdFx0ZGltZW5zaW9uLFxuXHRcdFx0XHRcdFx0ZXh0cmEsXG5cdFx0XHRcdFx0XHRpc0JvcmRlckJveCxcblx0XHRcdFx0XHRcdHN0eWxlc1xuXHRcdFx0XHRcdCkgOlxuXHRcdFx0XHRcdDA7XG5cblx0XHRcdC8vIEFjY291bnQgZm9yIHVucmVsaWFibGUgYm9yZGVyLWJveCBkaW1lbnNpb25zIGJ5IGNvbXBhcmluZyBvZmZzZXQqIHRvIGNvbXB1dGVkIGFuZFxuXHRcdFx0Ly8gZmFraW5nIGEgY29udGVudC1ib3ggdG8gZ2V0IGJvcmRlciBhbmQgcGFkZGluZyAoZ2gtMzY5OSlcblx0XHRcdGlmICggaXNCb3JkZXJCb3ggJiYgc2Nyb2xsYm94U2l6ZUJ1Z2d5ICkge1xuXHRcdFx0XHRzdWJ0cmFjdCAtPSBNYXRoLmNlaWwoXG5cdFx0XHRcdFx0ZWxlbVsgXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC1cblx0XHRcdFx0XHRwYXJzZUZsb2F0KCBzdHlsZXNbIGRpbWVuc2lvbiBdICkgLVxuXHRcdFx0XHRcdGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBcImJvcmRlclwiLCBmYWxzZSwgc3R5bGVzICkgLVxuXHRcdFx0XHRcdDAuNVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb252ZXJ0IHRvIHBpeGVscyBpZiB2YWx1ZSBhZGp1c3RtZW50IGlzIG5lZWRlZFxuXHRcdFx0aWYgKCBzdWJ0cmFjdCAmJiAoIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJlxuXHRcdFx0XHQoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSAhPT0gXCJweFwiICkge1xuXG5cdFx0XHRcdGVsZW0uc3R5bGVbIGRpbWVuc2lvbiBdID0gdmFsdWU7XG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5LmNzcyggZWxlbSwgZGltZW5zaW9uICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICk7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuY3NzSG9va3MubWFyZ2luTGVmdCA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5yZWxpYWJsZU1hcmdpbkxlZnQsXG5cdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0cmV0dXJuICggcGFyc2VGbG9hdCggY3VyQ1NTKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiApICkgfHxcblx0XHRcdFx0ZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC1cblx0XHRcdFx0XHRzd2FwKCBlbGVtLCB7IG1hcmdpbkxlZnQ6IDAgfSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuXHRcdFx0XHRcdH0gKVxuXHRcdFx0XHQpICsgXCJweFwiO1xuXHRcdH1cblx0fVxuKTtcblxuLy8gVGhlc2UgaG9va3MgYXJlIHVzZWQgYnkgYW5pbWF0ZSB0byBleHBhbmQgcHJvcGVydGllc1xualF1ZXJ5LmVhY2goIHtcblx0bWFyZ2luOiBcIlwiLFxuXHRwYWRkaW5nOiBcIlwiLFxuXHRib3JkZXI6IFwiV2lkdGhcIlxufSwgZnVuY3Rpb24oIHByZWZpeCwgc3VmZml4ICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdID0ge1xuXHRcdGV4cGFuZDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGkgPSAwLFxuXHRcdFx0XHRleHBhbmRlZCA9IHt9LFxuXG5cdFx0XHRcdC8vIEFzc3VtZXMgYSBzaW5nbGUgbnVtYmVyIGlmIG5vdCBhIHN0cmluZ1xuXHRcdFx0XHRwYXJ0cyA9IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlLnNwbGl0KCBcIiBcIiApIDogWyB2YWx1ZSBdO1xuXG5cdFx0XHRmb3IgKCA7IGkgPCA0OyBpKysgKSB7XG5cdFx0XHRcdGV4cGFuZGVkWyBwcmVmaXggKyBjc3NFeHBhbmRbIGkgXSArIHN1ZmZpeCBdID1cblx0XHRcdFx0XHRwYXJ0c1sgaSBdIHx8IHBhcnRzWyBpIC0gMiBdIHx8IHBhcnRzWyAwIF07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBleHBhbmRlZDtcblx0XHR9XG5cdH07XG5cblx0aWYgKCBwcmVmaXggIT09IFwibWFyZ2luXCIgKSB7XG5cdFx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXS5zZXQgPSBzZXRQb3NpdGl2ZU51bWJlcjtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGNzczogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHRcdHZhciBzdHlsZXMsIGxlbixcblx0XHRcdFx0bWFwID0ge30sXG5cdFx0XHRcdGkgPSAwO1xuXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIG5hbWUgKSApIHtcblx0XHRcdFx0c3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICk7XG5cdFx0XHRcdGxlbiA9IG5hbWUubGVuZ3RoO1xuXG5cdFx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRcdG1hcFsgbmFtZVsgaSBdIF0gPSBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lWyBpIF0sIGZhbHNlLCBzdHlsZXMgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBtYXA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lLCB2YWx1ZSApIDpcblx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgbmFtZSApO1xuXHRcdH0sIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9XG59ICk7XG5cblxuZnVuY3Rpb24gVHdlZW4oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICkge1xuXHRyZXR1cm4gbmV3IFR3ZWVuLnByb3RvdHlwZS5pbml0KCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApO1xufVxualF1ZXJ5LlR3ZWVuID0gVHdlZW47XG5cblR3ZWVuLnByb3RvdHlwZSA9IHtcblx0Y29uc3RydWN0b3I6IFR3ZWVuLFxuXHRpbml0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcsIHVuaXQgKSB7XG5cdFx0dGhpcy5lbGVtID0gZWxlbTtcblx0XHR0aGlzLnByb3AgPSBwcm9wO1xuXHRcdHRoaXMuZWFzaW5nID0gZWFzaW5nIHx8IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHQ7XG5cdFx0dGhpcy5vcHRpb25zID0gb3B0aW9ucztcblx0XHR0aGlzLnN0YXJ0ID0gdGhpcy5ub3cgPSB0aGlzLmN1cigpO1xuXHRcdHRoaXMuZW5kID0gZW5kO1xuXHRcdHRoaXMudW5pdCA9IHVuaXQgfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyBcIlwiIDogXCJweFwiICk7XG5cdH0sXG5cdGN1cjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnByb3AgXTtcblxuXHRcdHJldHVybiBob29rcyAmJiBob29rcy5nZXQgP1xuXHRcdFx0aG9va3MuZ2V0KCB0aGlzICkgOlxuXHRcdFx0VHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LmdldCggdGhpcyApO1xuXHR9LFxuXHRydW46IGZ1bmN0aW9uKCBwZXJjZW50ICkge1xuXHRcdHZhciBlYXNlZCxcblx0XHRcdGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnByb3AgXTtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLmR1cmF0aW9uICkge1xuXHRcdFx0dGhpcy5wb3MgPSBlYXNlZCA9IGpRdWVyeS5lYXNpbmdbIHRoaXMuZWFzaW5nIF0oXG5cdFx0XHRcdHBlcmNlbnQsIHRoaXMub3B0aW9ucy5kdXJhdGlvbiAqIHBlcmNlbnQsIDAsIDEsIHRoaXMub3B0aW9ucy5kdXJhdGlvblxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5wb3MgPSBlYXNlZCA9IHBlcmNlbnQ7XG5cdFx0fVxuXHRcdHRoaXMubm93ID0gKCB0aGlzLmVuZCAtIHRoaXMuc3RhcnQgKSAqIGVhc2VkICsgdGhpcy5zdGFydDtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLnN0ZXAgKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKCB0aGlzLmVsZW0sIHRoaXMubm93LCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBob29rcy5zZXQgKSB7XG5cdFx0XHRob29rcy5zZXQoIHRoaXMgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0VHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LnNldCggdGhpcyApO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufTtcblxuVHdlZW4ucHJvdG90eXBlLmluaXQucHJvdG90eXBlID0gVHdlZW4ucHJvdG90eXBlO1xuXG5Ud2Vlbi5wcm9wSG9va3MgPSB7XG5cdF9kZWZhdWx0OiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cdFx0XHR2YXIgcmVzdWx0O1xuXG5cdFx0XHQvLyBVc2UgYSBwcm9wZXJ0eSBvbiB0aGUgZWxlbWVudCBkaXJlY3RseSB3aGVuIGl0IGlzIG5vdCBhIERPTSBlbGVtZW50LFxuXHRcdFx0Ly8gb3Igd2hlbiB0aGVyZSBpcyBubyBtYXRjaGluZyBzdHlsZSBwcm9wZXJ0eSB0aGF0IGV4aXN0cy5cblx0XHRcdGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAhPT0gMSB8fFxuXHRcdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gIT0gbnVsbCAmJiB0d2Vlbi5lbGVtLnN0eWxlWyB0d2Vlbi5wcm9wIF0gPT0gbnVsbCApIHtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUGFzc2luZyBhbiBlbXB0eSBzdHJpbmcgYXMgYSAzcmQgcGFyYW1ldGVyIHRvIC5jc3Mgd2lsbCBhdXRvbWF0aWNhbGx5XG5cdFx0XHQvLyBhdHRlbXB0IGEgcGFyc2VGbG9hdCBhbmQgZmFsbGJhY2sgdG8gYSBzdHJpbmcgaWYgdGhlIHBhcnNlIGZhaWxzLlxuXHRcdFx0Ly8gU2ltcGxlIHZhbHVlcyBzdWNoIGFzIFwiMTBweFwiIGFyZSBwYXJzZWQgdG8gRmxvYXQ7XG5cdFx0XHQvLyBjb21wbGV4IHZhbHVlcyBzdWNoIGFzIFwicm90YXRlKDFyYWQpXCIgYXJlIHJldHVybmVkIGFzLWlzLlxuXHRcdFx0cmVzdWx0ID0galF1ZXJ5LmNzcyggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgXCJcIiApO1xuXG5cdFx0XHQvLyBFbXB0eSBzdHJpbmdzLCBudWxsLCB1bmRlZmluZWQgYW5kIFwiYXV0b1wiIGFyZSBjb252ZXJ0ZWQgdG8gMC5cblx0XHRcdHJldHVybiAhcmVzdWx0IHx8IHJlc3VsdCA9PT0gXCJhdXRvXCIgPyAwIDogcmVzdWx0O1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cblx0XHRcdC8vIFVzZSBzdGVwIGhvb2sgZm9yIGJhY2sgY29tcGF0LlxuXHRcdFx0Ly8gVXNlIGNzc0hvb2sgaWYgaXRzIHRoZXJlLlxuXHRcdFx0Ly8gVXNlIC5zdHlsZSBpZiBhdmFpbGFibGUgYW5kIHVzZSBwbGFpbiBwcm9wZXJ0aWVzIHdoZXJlIGF2YWlsYWJsZS5cblx0XHRcdGlmICggalF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSApIHtcblx0XHRcdFx0alF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSggdHdlZW4gKTtcblx0XHRcdH0gZWxzZSBpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKFxuXHRcdFx0XHRcdGpRdWVyeS5jc3NIb29rc1sgdHdlZW4ucHJvcCBdIHx8XG5cdFx0XHRcdFx0dHdlZW4uZWxlbS5zdHlsZVsgZmluYWxQcm9wTmFtZSggdHdlZW4ucHJvcCApIF0gIT0gbnVsbCApICkge1xuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIHR3ZWVuLm5vdyArIHR3ZWVuLnVuaXQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG4vLyBQYW5pYyBiYXNlZCBhcHByb2FjaCB0byBzZXR0aW5nIHRoaW5ncyBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblR3ZWVuLnByb3BIb29rcy5zY3JvbGxUb3AgPSBUd2Vlbi5wcm9wSG9va3Muc2Nyb2xsTGVmdCA9IHtcblx0c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cdFx0aWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICYmIHR3ZWVuLmVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdztcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5lYXNpbmcgPSB7XG5cdGxpbmVhcjogZnVuY3Rpb24oIHAgKSB7XG5cdFx0cmV0dXJuIHA7XG5cdH0sXG5cdHN3aW5nOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gMC41IC0gTWF0aC5jb3MoIHAgKiBNYXRoLlBJICkgLyAyO1xuXHR9LFxuXHRfZGVmYXVsdDogXCJzd2luZ1wiXG59O1xuXG5qUXVlcnkuZnggPSBUd2Vlbi5wcm90b3R5cGUuaW5pdDtcblxuLy8gQmFjayBjb21wYXQgPDEuOCBleHRlbnNpb24gcG9pbnRcbmpRdWVyeS5meC5zdGVwID0ge307XG5cblxuXG5cbnZhclxuXHRmeE5vdywgaW5Qcm9ncmVzcyxcblx0cmZ4dHlwZXMgPSAvXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sXG5cdHJydW4gPSAvcXVldWVIb29rcyQvO1xuXG5mdW5jdGlvbiBzY2hlZHVsZSgpIHtcblx0aWYgKCBpblByb2dyZXNzICkge1xuXHRcdGlmICggZG9jdW1lbnQuaGlkZGVuID09PSBmYWxzZSAmJiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lICkge1xuXHRcdFx0d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSggc2NoZWR1bGUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0d2luZG93LnNldFRpbWVvdXQoIHNjaGVkdWxlLCBqUXVlcnkuZnguaW50ZXJ2YWwgKTtcblx0XHR9XG5cblx0XHRqUXVlcnkuZngudGljaygpO1xuXHR9XG59XG5cbi8vIEFuaW1hdGlvbnMgY3JlYXRlZCBzeW5jaHJvbm91c2x5IHdpbGwgcnVuIHN5bmNocm9ub3VzbHlcbmZ1bmN0aW9uIGNyZWF0ZUZ4Tm93KCkge1xuXHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0ZnhOb3cgPSB1bmRlZmluZWQ7XG5cdH0gKTtcblx0cmV0dXJuICggZnhOb3cgPSBEYXRlLm5vdygpICk7XG59XG5cbi8vIEdlbmVyYXRlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIGEgc3RhbmRhcmQgYW5pbWF0aW9uXG5mdW5jdGlvbiBnZW5GeCggdHlwZSwgaW5jbHVkZVdpZHRoICkge1xuXHR2YXIgd2hpY2gsXG5cdFx0aSA9IDAsXG5cdFx0YXR0cnMgPSB7IGhlaWdodDogdHlwZSB9O1xuXG5cdC8vIElmIHdlIGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMSB0byBkbyBhbGwgY3NzRXhwYW5kIHZhbHVlcyxcblx0Ly8gb3RoZXJ3aXNlIHN0ZXAgdmFsdWUgaXMgMiB0byBza2lwIG92ZXIgTGVmdCBhbmQgUmlnaHRcblx0aW5jbHVkZVdpZHRoID0gaW5jbHVkZVdpZHRoID8gMSA6IDA7XG5cdGZvciAoIDsgaSA8IDQ7IGkgKz0gMiAtIGluY2x1ZGVXaWR0aCApIHtcblx0XHR3aGljaCA9IGNzc0V4cGFuZFsgaSBdO1xuXHRcdGF0dHJzWyBcIm1hcmdpblwiICsgd2hpY2ggXSA9IGF0dHJzWyBcInBhZGRpbmdcIiArIHdoaWNoIF0gPSB0eXBlO1xuXHR9XG5cblx0aWYgKCBpbmNsdWRlV2lkdGggKSB7XG5cdFx0YXR0cnMub3BhY2l0eSA9IGF0dHJzLndpZHRoID0gdHlwZTtcblx0fVxuXG5cdHJldHVybiBhdHRycztcbn1cblxuZnVuY3Rpb24gY3JlYXRlVHdlZW4oIHZhbHVlLCBwcm9wLCBhbmltYXRpb24gKSB7XG5cdHZhciB0d2Vlbixcblx0XHRjb2xsZWN0aW9uID0gKCBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXSApLmNvbmNhdCggQW5pbWF0aW9uLnR3ZWVuZXJzWyBcIipcIiBdICksXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoO1xuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGlmICggKCB0d2VlbiA9IGNvbGxlY3Rpb25bIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBwcm9wLCB2YWx1ZSApICkgKSB7XG5cblx0XHRcdC8vIFdlJ3JlIGRvbmUgd2l0aCB0aGlzIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRQcmVmaWx0ZXIoIGVsZW0sIHByb3BzLCBvcHRzICkge1xuXHR2YXIgcHJvcCwgdmFsdWUsIHRvZ2dsZSwgaG9va3MsIG9sZGZpcmUsIHByb3BUd2VlbiwgcmVzdG9yZURpc3BsYXksIGRpc3BsYXksXG5cdFx0aXNCb3ggPSBcIndpZHRoXCIgaW4gcHJvcHMgfHwgXCJoZWlnaHRcIiBpbiBwcm9wcyxcblx0XHRhbmltID0gdGhpcyxcblx0XHRvcmlnID0ge30sXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlLFxuXHRcdGhpZGRlbiA9IGVsZW0ubm9kZVR5cGUgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICksXG5cdFx0ZGF0YVNob3cgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZnhzaG93XCIgKTtcblxuXHQvLyBRdWV1ZS1za2lwcGluZyBhbmltYXRpb25zIGhpamFjayB0aGUgZnggaG9va3Ncblx0aWYgKCAhb3B0cy5xdWV1ZSApIHtcblx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgXCJmeFwiICk7XG5cdFx0aWYgKCBob29rcy51bnF1ZXVlZCA9PSBudWxsICkge1xuXHRcdFx0aG9va3MudW5xdWV1ZWQgPSAwO1xuXHRcdFx0b2xkZmlyZSA9IGhvb2tzLmVtcHR5LmZpcmU7XG5cdFx0XHRob29rcy5lbXB0eS5maXJlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggIWhvb2tzLnVucXVldWVkICkge1xuXHRcdFx0XHRcdG9sZGZpcmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aG9va3MudW5xdWV1ZWQrKztcblxuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5zdXJlIHRoZSBjb21wbGV0ZSBoYW5kbGVyIGlzIGNhbGxlZCBiZWZvcmUgdGhpcyBjb21wbGV0ZXNcblx0XHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0aG9va3MudW5xdWV1ZWQtLTtcblx0XHRcdFx0aWYgKCAhalF1ZXJ5LnF1ZXVlKCBlbGVtLCBcImZ4XCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdFx0aG9va3MuZW1wdHkuZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gRGV0ZWN0IHNob3cvaGlkZSBhbmltYXRpb25zXG5cdGZvciAoIHByb3AgaW4gcHJvcHMgKSB7XG5cdFx0dmFsdWUgPSBwcm9wc1sgcHJvcCBdO1xuXHRcdGlmICggcmZ4dHlwZXMudGVzdCggdmFsdWUgKSApIHtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgcHJvcCBdO1xuXHRcdFx0dG9nZ2xlID0gdG9nZ2xlIHx8IHZhbHVlID09PSBcInRvZ2dsZVwiO1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gKCBoaWRkZW4gPyBcImhpZGVcIiA6IFwic2hvd1wiICkgKSB7XG5cblx0XHRcdFx0Ly8gUHJldGVuZCB0byBiZSBoaWRkZW4gaWYgdGhpcyBpcyBhIFwic2hvd1wiIGFuZFxuXHRcdFx0XHQvLyB0aGVyZSBpcyBzdGlsbCBkYXRhIGZyb20gYSBzdG9wcGVkIHNob3cvaGlkZVxuXHRcdFx0XHRpZiAoIHZhbHVlID09PSBcInNob3dcIiAmJiBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0aGlkZGVuID0gdHJ1ZTtcblxuXHRcdFx0XHQvLyBJZ25vcmUgYWxsIG90aGVyIG5vLW9wIHNob3cvaGlkZSBkYXRhXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG9yaWdbIHByb3AgXSA9IGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gfHwgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQmFpbCBvdXQgaWYgdGhpcyBpcyBhIG5vLW9wIGxpa2UgLmhpZGUoKS5oaWRlKClcblx0cHJvcFR3ZWVuID0gIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wcyApO1xuXHRpZiAoICFwcm9wVHdlZW4gJiYgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIG9yaWcgKSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBSZXN0cmljdCBcIm92ZXJmbG93XCIgYW5kIFwiZGlzcGxheVwiIHN0eWxlcyBkdXJpbmcgYm94IGFuaW1hdGlvbnNcblx0aWYgKCBpc0JveCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEsIEVkZ2UgMTIgLSAxNVxuXHRcdC8vIFJlY29yZCBhbGwgMyBvdmVyZmxvdyBhdHRyaWJ1dGVzIGJlY2F1c2UgSUUgZG9lcyBub3QgaW5mZXIgdGhlIHNob3J0aGFuZFxuXHRcdC8vIGZyb20gaWRlbnRpY2FsbHktdmFsdWVkIG92ZXJmbG93WCBhbmQgb3ZlcmZsb3dZIGFuZCBFZGdlIGp1c3QgbWlycm9yc1xuXHRcdC8vIHRoZSBvdmVyZmxvd1ggdmFsdWUgdGhlcmUuXG5cdFx0b3B0cy5vdmVyZmxvdyA9IFsgc3R5bGUub3ZlcmZsb3csIHN0eWxlLm92ZXJmbG93WCwgc3R5bGUub3ZlcmZsb3dZIF07XG5cblx0XHQvLyBJZGVudGlmeSBhIGRpc3BsYXkgdHlwZSwgcHJlZmVycmluZyBvbGQgc2hvdy9oaWRlIGRhdGEgb3ZlciB0aGUgQ1NTIGNhc2NhZGVcblx0XHRyZXN0b3JlRGlzcGxheSA9IGRhdGFTaG93ICYmIGRhdGFTaG93LmRpc3BsYXk7XG5cdFx0aWYgKCByZXN0b3JlRGlzcGxheSA9PSBudWxsICkge1xuXHRcdFx0cmVzdG9yZURpc3BsYXkgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0fVxuXHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ICkge1xuXHRcdFx0XHRkaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEdldCBub25lbXB0eSB2YWx1ZShzKSBieSB0ZW1wb3JhcmlseSBmb3JjaW5nIHZpc2liaWxpdHlcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7XG5cdFx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5IHx8IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQW5pbWF0ZSBpbmxpbmUgZWxlbWVudHMgYXMgaW5saW5lLWJsb2NrXG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcImlubGluZVwiIHx8IGRpc3BsYXkgPT09IFwiaW5saW5lLWJsb2NrXCIgJiYgcmVzdG9yZURpc3BsYXkgIT0gbnVsbCApIHtcblx0XHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJmbG9hdFwiICkgPT09IFwibm9uZVwiICkge1xuXG5cdFx0XHRcdC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGRpc3BsYXkgdmFsdWUgYXQgdGhlIGVuZCBvZiBwdXJlIHNob3cvaGlkZSBhbmltYXRpb25zXG5cdFx0XHRcdGlmICggIXByb3BUd2VlbiApIHtcblx0XHRcdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0c3R5bGUuZGlzcGxheSA9IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRkaXNwbGF5ID0gc3R5bGUuZGlzcGxheTtcblx0XHRcdFx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZGlzcGxheSA9PT0gXCJub25lXCIgPyBcIlwiIDogZGlzcGxheTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0c3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKCBvcHRzLm92ZXJmbG93ICkge1xuXHRcdHN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcblx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cdFx0XHRzdHlsZS5vdmVyZmxvdyA9IG9wdHMub3ZlcmZsb3dbIDAgXTtcblx0XHRcdHN0eWxlLm92ZXJmbG93WCA9IG9wdHMub3ZlcmZsb3dbIDEgXTtcblx0XHRcdHN0eWxlLm92ZXJmbG93WSA9IG9wdHMub3ZlcmZsb3dbIDIgXTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBJbXBsZW1lbnQgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0cHJvcFR3ZWVuID0gZmFsc2U7XG5cdGZvciAoIHByb3AgaW4gb3JpZyApIHtcblxuXHRcdC8vIEdlbmVyYWwgc2hvdy9oaWRlIHNldHVwIGZvciB0aGlzIGVsZW1lbnQgYW5pbWF0aW9uXG5cdFx0aWYgKCAhcHJvcFR3ZWVuICkge1xuXHRcdFx0aWYgKCBkYXRhU2hvdyApIHtcblx0XHRcdFx0aWYgKCBcImhpZGRlblwiIGluIGRhdGFTaG93ICkge1xuXHRcdFx0XHRcdGhpZGRlbiA9IGRhdGFTaG93LmhpZGRlbjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGF0YVNob3cgPSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIFwiZnhzaG93XCIsIHsgZGlzcGxheTogcmVzdG9yZURpc3BsYXkgfSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdG9yZSBoaWRkZW4vdmlzaWJsZSBmb3IgdG9nZ2xlIHNvIGAuc3RvcCgpLnRvZ2dsZSgpYCBcInJldmVyc2VzXCJcblx0XHRcdGlmICggdG9nZ2xlICkge1xuXHRcdFx0XHRkYXRhU2hvdy5oaWRkZW4gPSAhaGlkZGVuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTaG93IGVsZW1lbnRzIGJlZm9yZSBhbmltYXRpbmcgdGhlbVxuXHRcdFx0aWYgKCBoaWRkZW4gKSB7XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSwgdHJ1ZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1bmMgKi9cblxuXHRcdFx0YW5pbS5kb25lKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1sb29wLWZ1bmMgKi9cblxuXHRcdFx0XHQvLyBUaGUgZmluYWwgc3RlcCBvZiBhIFwiaGlkZVwiIGFuaW1hdGlvbiBpcyBhY3R1YWxseSBoaWRpbmcgdGhlIGVsZW1lbnRcblx0XHRcdFx0aWYgKCAhaGlkZGVuICkge1xuXHRcdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgXCJmeHNob3dcIiApO1xuXHRcdFx0XHRmb3IgKCBwcm9wIGluIG9yaWcgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBvcmlnWyBwcm9wIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdC8vIFBlci1wcm9wZXJ0eSBzZXR1cFxuXHRcdHByb3BUd2VlbiA9IGNyZWF0ZVR3ZWVuKCBoaWRkZW4gPyBkYXRhU2hvd1sgcHJvcCBdIDogMCwgcHJvcCwgYW5pbSApO1xuXHRcdGlmICggISggcHJvcCBpbiBkYXRhU2hvdyApICkge1xuXHRcdFx0ZGF0YVNob3dbIHByb3AgXSA9IHByb3BUd2Vlbi5zdGFydDtcblx0XHRcdGlmICggaGlkZGVuICkge1xuXHRcdFx0XHRwcm9wVHdlZW4uZW5kID0gcHJvcFR3ZWVuLnN0YXJ0O1xuXHRcdFx0XHRwcm9wVHdlZW4uc3RhcnQgPSAwO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBwcm9wRmlsdGVyKCBwcm9wcywgc3BlY2lhbEVhc2luZyApIHtcblx0dmFyIGluZGV4LCBuYW1lLCBlYXNpbmcsIHZhbHVlLCBob29rcztcblxuXHQvLyBjYW1lbENhc2UsIHNwZWNpYWxFYXNpbmcgYW5kIGV4cGFuZCBjc3NIb29rIHBhc3Ncblx0Zm9yICggaW5kZXggaW4gcHJvcHMgKSB7XG5cdFx0bmFtZSA9IGNhbWVsQ2FzZSggaW5kZXggKTtcblx0XHRlYXNpbmcgPSBzcGVjaWFsRWFzaW5nWyBuYW1lIF07XG5cdFx0dmFsdWUgPSBwcm9wc1sgaW5kZXggXTtcblx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRlYXNpbmcgPSB2YWx1ZVsgMSBdO1xuXHRcdFx0dmFsdWUgPSBwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyAwIF07XG5cdFx0fVxuXG5cdFx0aWYgKCBpbmRleCAhPT0gbmFtZSApIHtcblx0XHRcdHByb3BzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgaW5kZXggXTtcblx0XHR9XG5cblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdO1xuXHRcdGlmICggaG9va3MgJiYgXCJleHBhbmRcIiBpbiBob29rcyApIHtcblx0XHRcdHZhbHVlID0gaG9va3MuZXhwYW5kKCB2YWx1ZSApO1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBuYW1lIF07XG5cblx0XHRcdC8vIE5vdCBxdWl0ZSAkLmV4dGVuZCwgdGhpcyB3b24ndCBvdmVyd3JpdGUgZXhpc3Rpbmcga2V5cy5cblx0XHRcdC8vIFJldXNpbmcgJ2luZGV4JyBiZWNhdXNlIHdlIGhhdmUgdGhlIGNvcnJlY3QgXCJuYW1lXCJcblx0XHRcdGZvciAoIGluZGV4IGluIHZhbHVlICkge1xuXHRcdFx0XHRpZiAoICEoIGluZGV4IGluIHByb3BzICkgKSB7XG5cdFx0XHRcdFx0cHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgaW5kZXggXTtcblx0XHRcdFx0XHRzcGVjaWFsRWFzaW5nWyBpbmRleCBdID0gZWFzaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNwZWNpYWxFYXNpbmdbIG5hbWUgXSA9IGVhc2luZztcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gQW5pbWF0aW9uKCBlbGVtLCBwcm9wZXJ0aWVzLCBvcHRpb25zICkge1xuXHR2YXIgcmVzdWx0LFxuXHRcdHN0b3BwZWQsXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzLmxlbmd0aCxcblx0XHRkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIERvbid0IG1hdGNoIGVsZW0gaW4gdGhlIDphbmltYXRlZCBzZWxlY3RvclxuXHRcdFx0ZGVsZXRlIHRpY2suZWxlbTtcblx0XHR9ICksXG5cdFx0dGljayA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBzdG9wcGVkICkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHR2YXIgY3VycmVudFRpbWUgPSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLFxuXHRcdFx0XHRyZW1haW5pbmcgPSBNYXRoLm1heCggMCwgYW5pbWF0aW9uLnN0YXJ0VGltZSArIGFuaW1hdGlvbi5kdXJhdGlvbiAtIGN1cnJlbnRUaW1lICksXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCAyLjMgb25seVxuXHRcdFx0XHQvLyBBcmNoYWljIGNyYXNoIGJ1ZyB3b24ndCBhbGxvdyB1cyB0byB1c2UgYDEgLSAoIDAuNSB8fCAwIClgICgjMTI0OTcpXG5cdFx0XHRcdHRlbXAgPSByZW1haW5pbmcgLyBhbmltYXRpb24uZHVyYXRpb24gfHwgMCxcblx0XHRcdFx0cGVyY2VudCA9IDEgLSB0ZW1wLFxuXHRcdFx0XHRpbmRleCA9IDAsXG5cdFx0XHRcdGxlbmd0aCA9IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoO1xuXG5cdFx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggcGVyY2VudCApO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgcGVyY2VudCwgcmVtYWluaW5nIF0gKTtcblxuXHRcdFx0Ly8gSWYgdGhlcmUncyBtb3JlIHRvIGRvLCB5aWVsZFxuXHRcdFx0aWYgKCBwZXJjZW50IDwgMSAmJiBsZW5ndGggKSB7XG5cdFx0XHRcdHJldHVybiByZW1haW5pbmc7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHRoaXMgd2FzIGFuIGVtcHR5IGFuaW1hdGlvbiwgc3ludGhlc2l6ZSBhIGZpbmFsIHByb2dyZXNzIG5vdGlmaWNhdGlvblxuXHRcdFx0aWYgKCAhbGVuZ3RoICkge1xuXHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlc29sdmUgdGhlIGFuaW1hdGlvbiBhbmQgcmVwb3J0IGl0cyBjb25jbHVzaW9uXG5cdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24gXSApO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cdFx0YW5pbWF0aW9uID0gZGVmZXJyZWQucHJvbWlzZSgge1xuXHRcdFx0ZWxlbTogZWxlbSxcblx0XHRcdHByb3BzOiBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcGVydGllcyApLFxuXHRcdFx0b3B0czogalF1ZXJ5LmV4dGVuZCggdHJ1ZSwge1xuXHRcdFx0XHRzcGVjaWFsRWFzaW5nOiB7fSxcblx0XHRcdFx0ZWFzaW5nOiBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0XG5cdFx0XHR9LCBvcHRpb25zICksXG5cdFx0XHRvcmlnaW5hbFByb3BlcnRpZXM6IHByb3BlcnRpZXMsXG5cdFx0XHRvcmlnaW5hbE9wdGlvbnM6IG9wdGlvbnMsXG5cdFx0XHRzdGFydFRpbWU6IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksXG5cdFx0XHRkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbixcblx0XHRcdHR3ZWVuczogW10sXG5cdFx0XHRjcmVhdGVUd2VlbjogZnVuY3Rpb24oIHByb3AsIGVuZCApIHtcblx0XHRcdFx0dmFyIHR3ZWVuID0galF1ZXJ5LlR3ZWVuKCBlbGVtLCBhbmltYXRpb24ub3B0cywgcHJvcCwgZW5kLFxuXHRcdFx0XHRcdFx0YW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFuaW1hdGlvbi5vcHRzLmVhc2luZyApO1xuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zLnB1c2goIHR3ZWVuICk7XG5cdFx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHRcdH0sXG5cdFx0XHRzdG9wOiBmdW5jdGlvbiggZ290b0VuZCApIHtcblx0XHRcdFx0dmFyIGluZGV4ID0gMCxcblxuXHRcdFx0XHRcdC8vIElmIHdlIGFyZSBnb2luZyB0byB0aGUgZW5kLCB3ZSB3YW50IHRvIHJ1biBhbGwgdGhlIHR3ZWVuc1xuXHRcdFx0XHRcdC8vIG90aGVyd2lzZSB3ZSBza2lwIHRoaXMgcGFydFxuXHRcdFx0XHRcdGxlbmd0aCA9IGdvdG9FbmQgPyBhbmltYXRpb24udHdlZW5zLmxlbmd0aCA6IDA7XG5cdFx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0XHRzdG9wcGVkID0gdHJ1ZTtcblx0XHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggMSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVzb2x2ZSB3aGVuIHdlIHBsYXllZCB0aGUgbGFzdCBmcmFtZTsgb3RoZXJ3aXNlLCByZWplY3Rcblx0XHRcdFx0aWYgKCBnb3RvRW5kICkge1xuXHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblx0XHR9ICksXG5cdFx0cHJvcHMgPSBhbmltYXRpb24ucHJvcHM7XG5cblx0cHJvcEZpbHRlciggcHJvcHMsIGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmcgKTtcblxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdHJlc3VsdCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgZWxlbSwgcHJvcHMsIGFuaW1hdGlvbi5vcHRzICk7XG5cdFx0aWYgKCByZXN1bHQgKSB7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHJlc3VsdC5zdG9wICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggYW5pbWF0aW9uLmVsZW0sIGFuaW1hdGlvbi5vcHRzLnF1ZXVlICkuc3RvcCA9XG5cdFx0XHRcdFx0cmVzdWx0LnN0b3AuYmluZCggcmVzdWx0ICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fVxuXG5cdGpRdWVyeS5tYXAoIHByb3BzLCBjcmVhdGVUd2VlbiwgYW5pbWF0aW9uICk7XG5cblx0aWYgKCBpc0Z1bmN0aW9uKCBhbmltYXRpb24ub3B0cy5zdGFydCApICkge1xuXHRcdGFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApO1xuXHR9XG5cblx0Ly8gQXR0YWNoIGNhbGxiYWNrcyBmcm9tIG9wdGlvbnNcblx0YW5pbWF0aW9uXG5cdFx0LnByb2dyZXNzKCBhbmltYXRpb24ub3B0cy5wcm9ncmVzcyApXG5cdFx0LmRvbmUoIGFuaW1hdGlvbi5vcHRzLmRvbmUsIGFuaW1hdGlvbi5vcHRzLmNvbXBsZXRlIClcblx0XHQuZmFpbCggYW5pbWF0aW9uLm9wdHMuZmFpbCApXG5cdFx0LmFsd2F5cyggYW5pbWF0aW9uLm9wdHMuYWx3YXlzICk7XG5cblx0alF1ZXJ5LmZ4LnRpbWVyKFxuXHRcdGpRdWVyeS5leHRlbmQoIHRpY2ssIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRhbmltOiBhbmltYXRpb24sXG5cdFx0XHRxdWV1ZTogYW5pbWF0aW9uLm9wdHMucXVldWVcblx0XHR9IClcblx0KTtcblxuXHRyZXR1cm4gYW5pbWF0aW9uO1xufVxuXG5qUXVlcnkuQW5pbWF0aW9uID0galF1ZXJ5LmV4dGVuZCggQW5pbWF0aW9uLCB7XG5cblx0dHdlZW5lcnM6IHtcblx0XHRcIipcIjogWyBmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgdHdlZW4gPSB0aGlzLmNyZWF0ZVR3ZWVuKCBwcm9wLCB2YWx1ZSApO1xuXHRcdFx0YWRqdXN0Q1NTKCB0d2Vlbi5lbGVtLCBwcm9wLCByY3NzTnVtLmV4ZWMoIHZhbHVlICksIHR3ZWVuICk7XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fSBdXG5cdH0sXG5cblx0dHdlZW5lcjogZnVuY3Rpb24oIHByb3BzLCBjYWxsYmFjayApIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIHByb3BzICkgKSB7XG5cdFx0XHRjYWxsYmFjayA9IHByb3BzO1xuXHRcdFx0cHJvcHMgPSBbIFwiKlwiIF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHByb3BzID0gcHJvcHMubWF0Y2goIHJub3RodG1sd2hpdGUgKTtcblx0XHR9XG5cblx0XHR2YXIgcHJvcCxcblx0XHRcdGluZGV4ID0gMCxcblx0XHRcdGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRwcm9wID0gcHJvcHNbIGluZGV4IF07XG5cdFx0XHRBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSA9IEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0udW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH0sXG5cblx0cHJlZmlsdGVyczogWyBkZWZhdWx0UHJlZmlsdGVyIF0sXG5cblx0cHJlZmlsdGVyOiBmdW5jdGlvbiggY2FsbGJhY2ssIHByZXBlbmQgKSB7XG5cdFx0aWYgKCBwcmVwZW5kICkge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMudW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMucHVzaCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LnNwZWVkID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGZuICkge1xuXHR2YXIgb3B0ID0gc3BlZWQgJiYgdHlwZW9mIHNwZWVkID09PSBcIm9iamVjdFwiID8galF1ZXJ5LmV4dGVuZCgge30sIHNwZWVkICkgOiB7XG5cdFx0Y29tcGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHxcblx0XHRcdGlzRnVuY3Rpb24oIHNwZWVkICkgJiYgc3BlZWQsXG5cdFx0ZHVyYXRpb246IHNwZWVkLFxuXHRcdGVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhaXNGdW5jdGlvbiggZWFzaW5nICkgJiYgZWFzaW5nXG5cdH07XG5cblx0Ly8gR28gdG8gdGhlIGVuZCBzdGF0ZSBpZiBmeCBhcmUgb2ZmXG5cdGlmICggalF1ZXJ5LmZ4Lm9mZiApIHtcblx0XHRvcHQuZHVyYXRpb24gPSAwO1xuXG5cdH0gZWxzZSB7XG5cdFx0aWYgKCB0eXBlb2Ygb3B0LmR1cmF0aW9uICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0aWYgKCBvcHQuZHVyYXRpb24gaW4galF1ZXJ5LmZ4LnNwZWVkcyApIHtcblx0XHRcdFx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkc1sgb3B0LmR1cmF0aW9uIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIG9wdC5xdWV1ZSAtIHRydWUvdW5kZWZpbmVkL251bGwgLT4gXCJmeFwiXG5cdGlmICggb3B0LnF1ZXVlID09IG51bGwgfHwgb3B0LnF1ZXVlID09PSB0cnVlICkge1xuXHRcdG9wdC5xdWV1ZSA9IFwiZnhcIjtcblx0fVxuXG5cdC8vIFF1ZXVlaW5nXG5cdG9wdC5vbGQgPSBvcHQuY29tcGxldGU7XG5cblx0b3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHQub2xkICkgKSB7XG5cdFx0XHRvcHQub2xkLmNhbGwoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdC5xdWV1ZSApIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCBvcHQucXVldWUgKTtcblx0XHR9XG5cdH07XG5cblx0cmV0dXJuIG9wdDtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmFkZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXG5cdFx0Ly8gU2hvdyBhbnkgaGlkZGVuIGVsZW1lbnRzIGFmdGVyIHNldHRpbmcgb3BhY2l0eSB0byAwXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBpc0hpZGRlbldpdGhpblRyZWUgKS5jc3MoIFwib3BhY2l0eVwiLCAwICkuc2hvdygpXG5cblx0XHRcdC8vIEFuaW1hdGUgdG8gdGhlIHZhbHVlIHNwZWNpZmllZFxuXHRcdFx0LmVuZCgpLmFuaW1hdGUoIHsgb3BhY2l0eTogdG8gfSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fSxcblx0YW5pbWF0ZTogZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHZhciBlbXB0eSA9IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wICksXG5cdFx0XHRvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICksXG5cdFx0XHRkb0FuaW1hdGlvbiA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28gcGVyLXByb3BlcnR5IGVhc2luZyB3b24ndCBiZSBsb3N0XG5cdFx0XHRcdHZhciBhbmltID0gQW5pbWF0aW9uKCB0aGlzLCBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcCApLCBvcHRhbGwgKTtcblxuXHRcdFx0XHQvLyBFbXB0eSBhbmltYXRpb25zLCBvciBmaW5pc2hpbmcgcmVzb2x2ZXMgaW1tZWRpYXRlbHlcblx0XHRcdFx0aWYgKCBlbXB0eSB8fCBkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZmluaXNoXCIgKSApIHtcblx0XHRcdFx0XHRhbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGRvQW5pbWF0aW9uLmZpbmlzaCA9IGRvQW5pbWF0aW9uO1xuXG5cdFx0cmV0dXJuIGVtcHR5IHx8IG9wdGFsbC5xdWV1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0dGhpcy5lYWNoKCBkb0FuaW1hdGlvbiApIDpcblx0XHRcdHRoaXMucXVldWUoIG9wdGFsbC5xdWV1ZSwgZG9BbmltYXRpb24gKTtcblx0fSxcblx0c3RvcDogZnVuY3Rpb24oIHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7XG5cdFx0dmFyIHN0b3BRdWV1ZSA9IGZ1bmN0aW9uKCBob29rcyApIHtcblx0XHRcdHZhciBzdG9wID0gaG9va3Muc3RvcDtcblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0c3RvcCggZ290b0VuZCApO1xuXHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Z290b0VuZCA9IGNsZWFyUXVldWU7XG5cdFx0XHRjbGVhclF1ZXVlID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggY2xlYXJRdWV1ZSAmJiB0eXBlICE9PSBmYWxzZSApIHtcblx0XHRcdHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGRlcXVldWUgPSB0cnVlLFxuXHRcdFx0XHRpbmRleCA9IHR5cGUgIT0gbnVsbCAmJiB0eXBlICsgXCJxdWV1ZUhvb2tzXCIsXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKTtcblxuXHRcdFx0aWYgKCBpbmRleCApIHtcblx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCApIHtcblx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yICggaW5kZXggaW4gZGF0YSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICYmIHJydW4udGVzdCggaW5kZXggKSApIHtcblx0XHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmXG5cdFx0XHRcdFx0KCB0eXBlID09IG51bGwgfHwgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkgKSB7XG5cblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCBnb3RvRW5kICk7XG5cdFx0XHRcdFx0ZGVxdWV1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhcnQgdGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0IGZvcmNlZC5cblx0XHRcdC8vIFRpbWVycyBjdXJyZW50bHkgd2lsbCBjYWxsIHRoZWlyIGNvbXBsZXRlIGNhbGxiYWNrcywgd2hpY2hcblx0XHRcdC8vIHdpbGwgZGVxdWV1ZSBidXQgb25seSBpZiB0aGV5IHdlcmUgZ290b0VuZC5cblx0XHRcdGlmICggZGVxdWV1ZSB8fCAhZ290b0VuZCApIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cdGZpbmlzaDogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0aWYgKCB0eXBlICE9PSBmYWxzZSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaW5kZXgsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKSxcblx0XHRcdFx0cXVldWUgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZVwiIF0sXG5cdFx0XHRcdGhvb2tzID0gZGF0YVsgdHlwZSArIFwicXVldWVIb29rc1wiIF0sXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGxlbmd0aCA9IHF1ZXVlID8gcXVldWUubGVuZ3RoIDogMDtcblxuXHRcdFx0Ly8gRW5hYmxlIGZpbmlzaGluZyBmbGFnIG9uIHByaXZhdGUgZGF0YVxuXHRcdFx0ZGF0YS5maW5pc2ggPSB0cnVlO1xuXG5cdFx0XHQvLyBFbXB0eSB0aGUgcXVldWUgZmlyc3Rcblx0XHRcdGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgW10gKTtcblxuXHRcdFx0aWYgKCBob29rcyAmJiBob29rcy5zdG9wICkge1xuXHRcdFx0XHRob29rcy5zdG9wLmNhbGwoIHRoaXMsIHRydWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFjdGl2ZSBhbmltYXRpb25zLCBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiYgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkge1xuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhbmltYXRpb25zIGluIHRoZSBvbGQgcXVldWUgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRpZiAoIHF1ZXVlWyBpbmRleCBdICYmIHF1ZXVlWyBpbmRleCBdLmZpbmlzaCApIHtcblx0XHRcdFx0XHRxdWV1ZVsgaW5kZXggXS5maW5pc2guY2FsbCggdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFR1cm4gb2ZmIGZpbmlzaGluZyBmbGFnXG5cdFx0XHRkZWxldGUgZGF0YS5maW5pc2g7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwidG9nZ2xlXCIsIFwic2hvd1wiLCBcImhpZGVcIiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHtcblx0dmFyIGNzc0ZuID0galF1ZXJ5LmZuWyBuYW1lIF07XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBzcGVlZCA9PSBudWxsIHx8IHR5cGVvZiBzcGVlZCA9PT0gXCJib29sZWFuXCIgP1xuXHRcdFx0Y3NzRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApIDpcblx0XHRcdHRoaXMuYW5pbWF0ZSggZ2VuRngoIG5hbWUsIHRydWUgKSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxuLy8gR2VuZXJhdGUgc2hvcnRjdXRzIGZvciBjdXN0b20gYW5pbWF0aW9uc1xualF1ZXJ5LmVhY2goIHtcblx0c2xpZGVEb3duOiBnZW5GeCggXCJzaG93XCIgKSxcblx0c2xpZGVVcDogZ2VuRngoIFwiaGlkZVwiICksXG5cdHNsaWRlVG9nZ2xlOiBnZW5GeCggXCJ0b2dnbGVcIiApLFxuXHRmYWRlSW46IHsgb3BhY2l0eTogXCJzaG93XCIgfSxcblx0ZmFkZU91dDogeyBvcGFjaXR5OiBcImhpZGVcIiB9LFxuXHRmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6IFwidG9nZ2xlXCIgfVxufSwgZnVuY3Rpb24oIG5hbWUsIHByb3BzICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9wcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LnRpbWVycyA9IFtdO1xualF1ZXJ5LmZ4LnRpY2sgPSBmdW5jdGlvbigpIHtcblx0dmFyIHRpbWVyLFxuXHRcdGkgPSAwLFxuXHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnM7XG5cblx0ZnhOb3cgPSBEYXRlLm5vdygpO1xuXG5cdGZvciAoIDsgaSA8IHRpbWVycy5sZW5ndGg7IGkrKyApIHtcblx0XHR0aW1lciA9IHRpbWVyc1sgaSBdO1xuXG5cdFx0Ly8gUnVuIHRoZSB0aW1lciBhbmQgc2FmZWx5IHJlbW92ZSBpdCB3aGVuIGRvbmUgKGFsbG93aW5nIGZvciBleHRlcm5hbCByZW1vdmFsKVxuXHRcdGlmICggIXRpbWVyKCkgJiYgdGltZXJzWyBpIF0gPT09IHRpbWVyICkge1xuXHRcdFx0dGltZXJzLnNwbGljZSggaS0tLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCAhdGltZXJzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkuZnguc3RvcCgpO1xuXHR9XG5cdGZ4Tm93ID0gdW5kZWZpbmVkO1xufTtcblxualF1ZXJ5LmZ4LnRpbWVyID0gZnVuY3Rpb24oIHRpbWVyICkge1xuXHRqUXVlcnkudGltZXJzLnB1c2goIHRpbWVyICk7XG5cdGpRdWVyeS5meC5zdGFydCgpO1xufTtcblxualF1ZXJ5LmZ4LmludGVydmFsID0gMTM7XG5qUXVlcnkuZnguc3RhcnQgPSBmdW5jdGlvbigpIHtcblx0aWYgKCBpblByb2dyZXNzICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGluUHJvZ3Jlc3MgPSB0cnVlO1xuXHRzY2hlZHVsZSgpO1xufTtcblxualF1ZXJ5LmZ4LnN0b3AgPSBmdW5jdGlvbigpIHtcblx0aW5Qcm9ncmVzcyA9IG51bGw7XG59O1xuXG5qUXVlcnkuZnguc3BlZWRzID0ge1xuXHRzbG93OiA2MDAsXG5cdGZhc3Q6IDIwMCxcblxuXHQvLyBEZWZhdWx0IHNwZWVkXG5cdF9kZWZhdWx0OiA0MDBcbn07XG5cblxuLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBwZXJtaXNzaW9uLlxuLy8gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTAwMzI0MDE0NzQ3L2h0dHA6Ly9ibGluZHNpZ25hbHMuY29tL2luZGV4LnBocC8yMDA5LzA3L2pxdWVyeS1kZWxheS9cbmpRdWVyeS5mbi5kZWxheSA9IGZ1bmN0aW9uKCB0aW1lLCB0eXBlICkge1xuXHR0aW1lID0galF1ZXJ5LmZ4ID8galF1ZXJ5LmZ4LnNwZWVkc1sgdGltZSBdIHx8IHRpbWUgOiB0aW1lO1xuXHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHtcblx0XHR2YXIgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCBuZXh0LCB0aW1lICk7XG5cdFx0aG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdH07XG5cdH0gKTtcbn07XG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICksXG5cdFx0c2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJzZWxlY3RcIiApLFxuXHRcdG9wdCA9IHNlbGVjdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvcHRpb25cIiApICk7XG5cblx0aW5wdXQudHlwZSA9IFwiY2hlY2tib3hcIjtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4zIG9ubHlcblx0Ly8gRGVmYXVsdCB2YWx1ZSBmb3IgYSBjaGVja2JveCBzaG91bGQgYmUgXCJvblwiXG5cdHN1cHBvcnQuY2hlY2tPbiA9IGlucHV0LnZhbHVlICE9PSBcIlwiO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBNdXN0IGFjY2VzcyBzZWxlY3RlZEluZGV4IHRvIG1ha2UgZGVmYXVsdCBvcHRpb25zIHNlbGVjdFxuXHRzdXBwb3J0Lm9wdFNlbGVjdGVkID0gb3B0LnNlbGVjdGVkO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBBbiBpbnB1dCBsb3NlcyBpdHMgdmFsdWUgYWZ0ZXIgYmVjb21pbmcgYSByYWRpb1xuXHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRpbnB1dC52YWx1ZSA9IFwidFwiO1xuXHRpbnB1dC50eXBlID0gXCJyYWRpb1wiO1xuXHRzdXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gXCJ0XCI7XG59ICkoKTtcblxuXG52YXIgYm9vbEhvb2ssXG5cdGF0dHJIYW5kbGUgPSBqUXVlcnkuZXhwci5hdHRySGFuZGxlO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkuYXR0ciwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgYXR0cmlidXRlcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRyaWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgPT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXR0cmlidXRlIGhvb2tzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBsb3dlcmNhc2UgdmVyc2lvblxuXHRcdC8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25lIGlzIGRlZmluZWRcblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblx0XHRcdGhvb2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0KCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnRlc3QoIG5hbWUgKSA/IGJvb2xIb29rIDogdW5kZWZpbmVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gbnVsbCApIHtcblx0XHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyBcIlwiICk7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0Ly8gTm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgcmV0dXJuIG51bGwsIHdlIG5vcm1hbGl6ZSB0byB1bmRlZmluZWRcblx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7XG5cdH0sXG5cblx0YXR0ckhvb2tzOiB7XG5cdFx0dHlwZToge1xuXHRcdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggIXN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gXCJyYWRpb1wiICYmXG5cdFx0XHRcdFx0bm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICkge1xuXHRcdFx0XHRcdHZhciB2YWwgPSBlbGVtLnZhbHVlO1xuXHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgdmFsdWUgKTtcblx0XHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRcdGVsZW0udmFsdWUgPSB2YWw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0dmFyIG5hbWUsXG5cdFx0XHRpID0gMCxcblxuXHRcdFx0Ly8gQXR0cmlidXRlIG5hbWVzIGNhbiBjb250YWluIG5vbi1IVE1MIHdoaXRlc3BhY2UgY2hhcmFjdGVyc1xuXHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjYXR0cmlidXRlcy0yXG5cdFx0XHRhdHRyTmFtZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xuXG5cdFx0aWYgKCBhdHRyTmFtZXMgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdHdoaWxlICggKCBuYW1lID0gYXR0ck5hbWVzWyBpKysgXSApICkge1xuXHRcdFx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIb29rcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzXG5ib29sSG9vayA9IHtcblx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7XG5cdFx0aWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2Vcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lICk7XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lO1xuXHR9XG59O1xuXG5qUXVlcnkuZWFjaCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goIC9cXHcrL2cgKSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cdHZhciBnZXR0ZXIgPSBhdHRySGFuZGxlWyBuYW1lIF0gfHwgalF1ZXJ5LmZpbmQuYXR0cjtcblxuXHRhdHRySGFuZGxlWyBuYW1lIF0gPSBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0dmFyIHJldCwgaGFuZGxlLFxuXHRcdFx0bG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdGlmICggIWlzWE1MICkge1xuXG5cdFx0XHQvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wIGJ5IHRlbXBvcmFyaWx5IHJlbW92aW5nIHRoaXMgZnVuY3Rpb24gZnJvbSB0aGUgZ2V0dGVyXG5cdFx0XHRoYW5kbGUgPSBhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF07XG5cdFx0XHRhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF0gPSByZXQ7XG5cdFx0XHRyZXQgPSBnZXR0ZXIoIGVsZW0sIG5hbWUsIGlzWE1MICkgIT0gbnVsbCA/XG5cdFx0XHRcdGxvd2VyY2FzZU5hbWUgOlxuXHRcdFx0XHRudWxsO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gaGFuZGxlO1xuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xufSApO1xuXG5cblxuXG52YXIgcmZvY3VzYWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJjbGlja2FibGUgPSAvXig/OmF8YXJlYSkkL2k7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5wcm9wLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGRlbGV0ZSB0aGlzWyBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWUgXTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHRwcm9wOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0dmFyIHJldCwgaG9va3MsXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHQvLyBEb24ndCBnZXQvc2V0IHByb3BlcnRpZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXG5cdFx0aWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gRml4IG5hbWUgYW5kIGF0dGFjaCBob29rc1xuXHRcdFx0bmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTtcblx0XHRcdGhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFtZSBdO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAoIGVsZW1bIG5hbWUgXSA9IHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVsZW1bIG5hbWUgXTtcblx0fSxcblxuXHRwcm9wSG9va3M6IHtcblx0XHR0YWJJbmRleDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdFx0XHRcdC8vIGVsZW0udGFiSW5kZXggZG9lc24ndCBhbHdheXMgcmV0dXJuIHRoZVxuXHRcdFx0XHQvLyBjb3JyZWN0IHZhbHVlIHdoZW4gaXQgaGFzbid0IGJlZW4gZXhwbGljaXRseSBzZXRcblx0XHRcdFx0Ly8gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTQxMTE2MjMzMzQ3L2h0dHA6Ly9mbHVpZHByb2plY3Qub3JnL2Jsb2cvMjAwOC8wMS8wOS9nZXR0aW5nLXNldHRpbmctYW5kLXJlbW92aW5nLXRhYmluZGV4LXZhbHVlcy13aXRoLWphdmFzY3JpcHQvXG5cdFx0XHRcdC8vIFVzZSBwcm9wZXIgYXR0cmlidXRlIHJldHJpZXZhbCgjMTIwNzIpXG5cdFx0XHRcdHZhciB0YWJpbmRleCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIFwidGFiaW5kZXhcIiApO1xuXG5cdFx0XHRcdGlmICggdGFiaW5kZXggKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlSW50KCB0YWJpbmRleCwgMTAgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRyZm9jdXNhYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSB8fFxuXHRcdFx0XHRcdHJjbGlja2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmXG5cdFx0XHRcdFx0ZWxlbS5ocmVmXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRwcm9wRml4OiB7XG5cdFx0XCJmb3JcIjogXCJodG1sRm9yXCIsXG5cdFx0XCJjbGFzc1wiOiBcImNsYXNzTmFtZVwiXG5cdH1cbn0gKTtcblxuLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG4vLyBBY2Nlc3NpbmcgdGhlIHNlbGVjdGVkSW5kZXggcHJvcGVydHlcbi8vIGZvcmNlcyB0aGUgYnJvd3NlciB0byByZXNwZWN0IHNldHRpbmcgc2VsZWN0ZWRcbi8vIG9uIHRoZSBvcHRpb25cbi8vIFRoZSBnZXR0ZXIgZW5zdXJlcyBhIGRlZmF1bHQgb3B0aW9uIGlzIHNlbGVjdGVkXG4vLyB3aGVuIGluIGFuIG9wdGdyb3VwXG4vLyBlc2xpbnQgcnVsZSBcIm5vLXVudXNlZC1leHByZXNzaW9uc1wiIGlzIGRpc2FibGVkIGZvciB0aGlzIGNvZGVcbi8vIHNpbmNlIGl0IGNvbnNpZGVycyBzdWNoIGFjY2Vzc2lvbnMgbm9vcFxuaWYgKCAhc3VwcG9ydC5vcHRTZWxlY3RlZCApIHtcblx0alF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiBcIm9mZlwiICovXG5cblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIHBhcmVudCAmJiBwYXJlbnQucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0LyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogXCJvZmZcIiAqL1xuXG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdHBhcmVudC5zZWxlY3RlZEluZGV4O1xuXG5cdFx0XHRcdGlmICggcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxualF1ZXJ5LmVhY2goIFtcblx0XCJ0YWJJbmRleFwiLFxuXHRcInJlYWRPbmx5XCIsXG5cdFwibWF4TGVuZ3RoXCIsXG5cdFwiY2VsbFNwYWNpbmdcIixcblx0XCJjZWxsUGFkZGluZ1wiLFxuXHRcInJvd1NwYW5cIixcblx0XCJjb2xTcGFuXCIsXG5cdFwidXNlTWFwXCIsXG5cdFwiZnJhbWVCb3JkZXJcIixcblx0XCJjb250ZW50RWRpdGFibGVcIlxuXSwgZnVuY3Rpb24oKSB7XG5cdGpRdWVyeS5wcm9wRml4WyB0aGlzLnRvTG93ZXJDYXNlKCkgXSA9IHRoaXM7XG59ICk7XG5cblxuXG5cblx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2UgYWNjb3JkaW5nIHRvIEhUTUwgc3BlY1xuXHQvLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLWFzY2lpLXdoaXRlc3BhY2Vcblx0ZnVuY3Rpb24gc3RyaXBBbmRDb2xsYXBzZSggdmFsdWUgKSB7XG5cdFx0dmFyIHRva2VucyA9IHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cdFx0cmV0dXJuIHRva2Vucy5qb2luKCBcIiBcIiApO1xuXHR9XG5cblxuZnVuY3Rpb24gZ2V0Q2xhc3MoIGVsZW0gKSB7XG5cdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSAmJiBlbGVtLmdldEF0dHJpYnV0ZSggXCJjbGFzc1wiICkgfHwgXCJcIjtcbn1cblxuZnVuY3Rpb24gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICkge1xuXHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXHR9XG5cdHJldHVybiBbXTtcbn1cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRhZGRDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBjbGFzc2VzLCBlbGVtLCBjdXIsIGN1clZhbHVlLCBjbGF6eiwgaiwgZmluYWxWYWx1ZSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmFkZENsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRjbGFzc2VzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGNsYXNzZXMubGVuZ3RoICkge1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCBlbGVtICk7XG5cdFx0XHRcdGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKCBjbGF6eiA9IGNsYXNzZXNbIGorKyBdICkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIgKSA8IDAgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciArPSBjbGF6eiArIFwiIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsXG5cdFx0XHRpID0gMDtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5yZW1vdmVDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB0aGlzLmF0dHIoIFwiY2xhc3NcIiwgXCJcIiApO1xuXHRcdH1cblxuXHRcdGNsYXNzZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggY2xhc3Nlcy5sZW5ndGggKSB7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGN1clZhbHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTtcblxuXHRcdFx0XHQvLyBUaGlzIGV4cHJlc3Npb24gaXMgaGVyZSBmb3IgYmV0dGVyIGNvbXByZXNzaWJpbGl0eSAoc2VlIGFkZENsYXNzKVxuXHRcdFx0XHRjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRqID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgKmFsbCogaW5zdGFuY2VzXG5cdFx0XHRcdFx0XHR3aGlsZSAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgPSBjdXIucmVwbGFjZSggXCIgXCIgKyBjbGF6eiArIFwiIFwiLCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSwgc3RhdGVWYWwgKSB7XG5cdFx0dmFyIHR5cGUgPSB0eXBlb2YgdmFsdWUsXG5cdFx0XHRpc1ZhbGlkVmFsdWUgPSB0eXBlID09PSBcInN0cmluZ1wiIHx8IEFycmF5LmlzQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIHR5cGVvZiBzdGF0ZVZhbCA9PT0gXCJib29sZWFuXCIgJiYgaXNWYWxpZFZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlVmFsID8gdGhpcy5hZGRDbGFzcyggdmFsdWUgKSA6IHRoaXMucmVtb3ZlQ2xhc3MoIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKFxuXHRcdFx0XHRcdHZhbHVlLmNhbGwoIHRoaXMsIGksIGdldENsYXNzKCB0aGlzICksIHN0YXRlVmFsICksXG5cdFx0XHRcdFx0c3RhdGVWYWxcblx0XHRcdFx0KTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBjbGFzc05hbWUsIGksIHNlbGYsIGNsYXNzTmFtZXM7XG5cblx0XHRcdGlmICggaXNWYWxpZFZhbHVlICkge1xuXG5cdFx0XHRcdC8vIFRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzXG5cdFx0XHRcdGkgPSAwO1xuXHRcdFx0XHRzZWxmID0galF1ZXJ5KCB0aGlzICk7XG5cdFx0XHRcdGNsYXNzTmFtZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdFx0XHR3aGlsZSAoICggY2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHRcdC8vIENoZWNrIGVhY2ggY2xhc3NOYW1lIGdpdmVuLCBzcGFjZSBzZXBhcmF0ZWQgbGlzdFxuXHRcdFx0XHRcdGlmICggc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICkgKSB7XG5cdFx0XHRcdFx0XHRzZWxmLnJlbW92ZUNsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2VsZi5hZGRDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdC8vIFRvZ2dsZSB3aG9sZSBjbGFzcyBuYW1lXG5cdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0XHRjbGFzc05hbWUgPSBnZXRDbGFzcyggdGhpcyApO1xuXHRcdFx0XHRpZiAoIGNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGNsYXNzTmFtZSBpZiBzZXRcblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIFwiX19jbGFzc05hbWVfX1wiLCBjbGFzc05hbWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoZSBlbGVtZW50IGhhcyBhIGNsYXNzIG5hbWUgb3IgaWYgd2UncmUgcGFzc2VkIGBmYWxzZWAsXG5cdFx0XHRcdC8vIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBjbGFzc25hbWUgKGlmIHRoZXJlIHdhcyBvbmUsIHRoZSBhYm92ZSBzYXZlZCBpdCkuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBicmluZyBiYWNrIHdoYXRldmVyIHdhcyBwcmV2aW91c2x5IHNhdmVkIChpZiBhbnl0aGluZyksXG5cdFx0XHRcdC8vIGZhbGxpbmcgYmFjayB0byB0aGUgZW1wdHkgc3RyaW5nIGlmIG5vdGhpbmcgd2FzIHN0b3JlZC5cblx0XHRcdFx0aWYgKCB0aGlzLnNldEF0dHJpYnV0ZSApIHtcblx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lIHx8IHZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRcdFx0XHRcIlwiIDpcblx0XHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIgKSB8fCBcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRoYXNDbGFzczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBjbGFzc05hbWUsIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGNsYXNzTmFtZSA9IFwiIFwiICsgc2VsZWN0b3IgKyBcIiBcIjtcblx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0KCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGdldENsYXNzKCBlbGVtICkgKSArIFwiIFwiICkuaW5kZXhPZiggY2xhc3NOYW1lICkgPiAtMSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIHJyZXR1cm4gPSAvXFxyL2c7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0dmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGhvb2tzLCByZXQsIHZhbHVlSXNGdW5jdGlvbixcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF07XG5cblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHxcblx0XHRcdFx0XHRqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHRcdGlmICggaG9va3MgJiZcblx0XHRcdFx0XHRcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIFwidmFsdWVcIiApICkgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0ID0gZWxlbS52YWx1ZTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgbW9zdCBjb21tb24gc3RyaW5nIGNhc2VzXG5cdFx0XHRcdGlmICggdHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0LnJlcGxhY2UoIHJyZXR1cm4sIFwiXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEhhbmRsZSBjYXNlcyB3aGVyZSB2YWx1ZSBpcyBudWxsL3VuZGVmIG9yIG51bWJlclxuXHRcdFx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyBcIlwiIDogcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0dmFyIHZhbDtcblxuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlICE9PSAxICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsdWVJc0Z1bmN0aW9uICkge1xuXHRcdFx0XHR2YWwgPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBqUXVlcnkoIHRoaXMgKS52YWwoKSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFsID0gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzIFwiXCI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmdcblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHZhbCA9IFwiXCI7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdHZhbCArPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0dmFsID0galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKyBcIlwiO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyB0aGlzLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHQvLyBJZiBzZXQgcmV0dXJucyB1bmRlZmluZWQsIGZhbGwgYmFjayB0byBub3JtYWwgc2V0dGluZ1xuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCBcInZhbHVlXCIgKSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHR0aGlzLnZhbHVlID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHZhbEhvb2tzOiB7XG5cdFx0b3B0aW9uOiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHRcdHZhciB2YWwgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInZhbHVlXCIgKTtcblx0XHRcdFx0cmV0dXJuIHZhbCAhPSBudWxsID9cblx0XHRcdFx0XHR2YWwgOlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExIG9ubHlcblx0XHRcdFx0XHQvLyBvcHRpb24udGV4dCB0aHJvd3MgZXhjZXB0aW9ucyAoIzE0Njg2LCAjMTQ4NTgpXG5cdFx0XHRcdFx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2Vcblx0XHRcdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2Utd2hpdGVzcGFjZVxuXHRcdFx0XHRcdHN0cmlwQW5kQ29sbGFwc2UoIGpRdWVyeS50ZXh0KCBlbGVtICkgKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHNlbGVjdDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHZhbHVlLCBvcHRpb24sIGksXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHRpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCxcblx0XHRcdFx0XHRvbmUgPSBlbGVtLnR5cGUgPT09IFwic2VsZWN0LW9uZVwiLFxuXHRcdFx0XHRcdHZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSxcblx0XHRcdFx0XHRtYXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHRpZiAoIGluZGV4IDwgMCApIHtcblx0XHRcdFx0XHRpID0gbWF4O1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aSA9IG9uZSA/IGluZGV4IDogMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnNcblx0XHRcdFx0Zm9yICggOyBpIDwgbWF4OyBpKysgKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHQvLyBJRTgtOSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICgjMjU1MSlcblx0XHRcdFx0XHRpZiAoICggb3B0aW9uLnNlbGVjdGVkIHx8IGkgPT09IGluZGV4ICkgJiZcblxuXHRcdFx0XHRcdFx0XHQvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHRcdFx0XHRcdCFvcHRpb24uZGlzYWJsZWQgJiZcblx0XHRcdFx0XHRcdFx0KCAhb3B0aW9uLnBhcmVudE5vZGUuZGlzYWJsZWQgfHxcblx0XHRcdFx0XHRcdFx0XHQhbm9kZU5hbWUoIG9wdGlvbi5wYXJlbnROb2RlLCBcIm9wdGdyb3VwXCIgKSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7XG5cblx0XHRcdFx0XHRcdC8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzXG5cdFx0XHRcdFx0XHRpZiAoIG9uZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBNdWx0aS1TZWxlY3RzIHJldHVybiBhbiBhcnJheVxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH0sXG5cblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgb3B0aW9uU2V0LCBvcHRpb24sXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHR2YWx1ZXMgPSBqUXVlcnkubWFrZUFycmF5KCB2YWx1ZSApLFxuXHRcdFx0XHRcdGkgPSBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRvcHRpb24gPSBvcHRpb25zWyBpIF07XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXG5cdFx0XHRcdFx0aWYgKCBvcHRpb24uc2VsZWN0ZWQgPVxuXHRcdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGpRdWVyeS52YWxIb29rcy5vcHRpb24uZ2V0KCBvcHRpb24gKSwgdmFsdWVzICkgPiAtMVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0b3B0aW9uU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbmQtYXNzaWduICovXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGb3JjZSBicm93c2VycyB0byBiZWhhdmUgY29uc2lzdGVudGx5IHdoZW4gbm9uLW1hdGNoaW5nIHZhbHVlIGlzIHNldFxuXHRcdFx0XHRpZiAoICFvcHRpb25TZXQgKSB7XG5cdFx0XHRcdFx0ZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gUmFkaW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXJcbmpRdWVyeS5lYWNoKCBbIFwicmFkaW9cIiwgXCJjaGVja2JveFwiIF0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHtcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS5jaGVja2VkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeSggZWxlbSApLnZhbCgpLCB2YWx1ZSApID4gLTEgKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGlmICggIXN1cHBvcnQuY2hlY2tPbiApIHtcblx0XHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXS5nZXQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiICkgPT09IG51bGwgPyBcIm9uXCIgOiBlbGVtLnZhbHVlO1xuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUmV0dXJuIGpRdWVyeSBmb3IgYXR0cmlidXRlcy1vbmx5IGluY2x1c2lvblxuXG5cbnN1cHBvcnQuZm9jdXNpbiA9IFwib25mb2N1c2luXCIgaW4gd2luZG93O1xuXG5cbnZhciByZm9jdXNNb3JwaCA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxcblx0c3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgPSBmdW5jdGlvbiggZSApIHtcblx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9O1xuXG5qUXVlcnkuZXh0ZW5kKCBqUXVlcnkuZXZlbnQsIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9ubHlIYW5kbGVycyApIHtcblxuXHRcdHZhciBpLCBjdXIsIHRtcCwgYnViYmxlVHlwZSwgb250eXBlLCBoYW5kbGUsIHNwZWNpYWwsIGxhc3RFbGVtZW50LFxuXHRcdFx0ZXZlbnRQYXRoID0gWyBlbGVtIHx8IGRvY3VtZW50IF0sXG5cdFx0XHR0eXBlID0gaGFzT3duLmNhbGwoIGV2ZW50LCBcInR5cGVcIiApID8gZXZlbnQudHlwZSA6IGV2ZW50LFxuXHRcdFx0bmFtZXNwYWNlcyA9IGhhc093bi5jYWxsKCBldmVudCwgXCJuYW1lc3BhY2VcIiApID8gZXZlbnQubmFtZXNwYWNlLnNwbGl0KCBcIi5cIiApIDogW107XG5cblx0XHRjdXIgPSBsYXN0RWxlbWVudCA9IHRtcCA9IGVsZW0gPSBlbGVtIHx8IGRvY3VtZW50O1xuXG5cdFx0Ly8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBmb2N1cy9ibHVyIG1vcnBocyB0byBmb2N1c2luL291dDsgZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3dcblx0XHRpZiAoIHJmb2N1c01vcnBoLnRlc3QoIHR5cGUgKyBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlLmluZGV4T2YoIFwiLlwiICkgPiAtMSApIHtcblxuXHRcdFx0Ly8gTmFtZXNwYWNlZCB0cmlnZ2VyOyBjcmVhdGUgYSByZWdleHAgdG8gbWF0Y2ggZXZlbnQgdHlwZSBpbiBoYW5kbGUoKVxuXHRcdFx0bmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoIFwiLlwiICk7XG5cdFx0XHR0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpO1xuXHRcdFx0bmFtZXNwYWNlcy5zb3J0KCk7XG5cdFx0fVxuXHRcdG9udHlwZSA9IHR5cGUuaW5kZXhPZiggXCI6XCIgKSA8IDAgJiYgXCJvblwiICsgdHlwZTtcblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhIGpRdWVyeS5FdmVudCBvYmplY3QsIE9iamVjdCwgb3IganVzdCBhbiBldmVudCB0eXBlIHN0cmluZ1xuXHRcdGV2ZW50ID0gZXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0ZXZlbnQgOlxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCggdHlwZSwgdHlwZW9mIGV2ZW50ID09PSBcIm9iamVjdFwiICYmIGV2ZW50ICk7XG5cblx0XHQvLyBUcmlnZ2VyIGJpdG1hc2s6ICYgMSBmb3IgbmF0aXZlIGhhbmRsZXJzOyAmIDIgZm9yIGpRdWVyeSAoYWx3YXlzIHRydWUpXG5cdFx0ZXZlbnQuaXNUcmlnZ2VyID0gb25seUhhbmRsZXJzID8gMiA6IDM7XG5cdFx0ZXZlbnQubmFtZXNwYWNlID0gbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApO1xuXHRcdGV2ZW50LnJuYW1lc3BhY2UgPSBldmVudC5uYW1lc3BhY2UgP1xuXHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICkgOlxuXHRcdFx0bnVsbDtcblxuXHRcdC8vIENsZWFuIHVwIHRoZSBldmVudCBpbiBjYXNlIGl0IGlzIGJlaW5nIHJldXNlZFxuXHRcdGV2ZW50LnJlc3VsdCA9IHVuZGVmaW5lZDtcblx0XHRpZiAoICFldmVudC50YXJnZXQgKSB7XG5cdFx0XHRldmVudC50YXJnZXQgPSBlbGVtO1xuXHRcdH1cblxuXHRcdC8vIENsb25lIGFueSBpbmNvbWluZyBkYXRhIGFuZCBwcmVwZW5kIHRoZSBldmVudCwgY3JlYXRpbmcgdGhlIGhhbmRsZXIgYXJnIGxpc3Rcblx0XHRkYXRhID0gZGF0YSA9PSBudWxsID9cblx0XHRcdFsgZXZlbnQgXSA6XG5cdFx0XHRqUXVlcnkubWFrZUFycmF5KCBkYXRhLCBbIGV2ZW50IF0gKTtcblxuXHRcdC8vIEFsbG93IHNwZWNpYWwgZXZlbnRzIHRvIGRyYXcgb3V0c2lkZSB0aGUgbGluZXNcblx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgc3BlY2lhbC50cmlnZ2VyICYmIHNwZWNpYWwudHJpZ2dlci5hcHBseSggZWxlbSwgZGF0YSApID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgZXZlbnQgcHJvcGFnYXRpb24gcGF0aCBpbiBhZHZhbmNlLCBwZXIgVzNDIGV2ZW50cyBzcGVjICgjOTk1MSlcblx0XHQvLyBCdWJibGUgdXAgdG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93OyB3YXRjaCBmb3IgYSBnbG9iYWwgb3duZXJEb2N1bWVudCB2YXIgKCM5NzI0KVxuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhc3BlY2lhbC5ub0J1YmJsZSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0YnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7XG5cdFx0XHRpZiAoICFyZm9jdXNNb3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApICkge1xuXHRcdFx0XHRjdXIgPSBjdXIucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGZvciAoIDsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIGN1ciApO1xuXHRcdFx0XHR0bXAgPSBjdXI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKVxuXHRcdFx0aWYgKCB0bXAgPT09ICggZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50ICkgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCB0bXAuZGVmYXVsdFZpZXcgfHwgdG1wLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGV2ZW50UGF0aFsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGxhc3RFbGVtZW50ID0gY3VyO1xuXHRcdFx0ZXZlbnQudHlwZSA9IGkgPiAxID9cblx0XHRcdFx0YnViYmxlVHlwZSA6XG5cdFx0XHRcdHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTtcblxuXHRcdFx0Ly8galF1ZXJ5IGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9ICggZGF0YVByaXYuZ2V0KCBjdXIsIFwiZXZlbnRzXCIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gJiZcblx0XHRcdFx0ZGF0YVByaXYuZ2V0KCBjdXIsIFwiaGFuZGxlXCIgKTtcblx0XHRcdGlmICggaGFuZGxlICkge1xuXHRcdFx0XHRoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBOYXRpdmUgaGFuZGxlclxuXHRcdFx0aGFuZGxlID0gb250eXBlICYmIGN1clsgb250eXBlIF07XG5cdFx0XHRpZiAoIGhhbmRsZSAmJiBoYW5kbGUuYXBwbHkgJiYgYWNjZXB0RGF0YSggY3VyICkgKSB7XG5cdFx0XHRcdGV2ZW50LnJlc3VsdCA9IGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGV2ZW50LnR5cGUgPSB0eXBlO1xuXG5cdFx0Ly8gSWYgbm9ib2R5IHByZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRvIGl0IG5vd1xuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7XG5cblx0XHRcdGlmICggKCAhc3BlY2lhbC5fZGVmYXVsdCB8fFxuXHRcdFx0XHRzcGVjaWFsLl9kZWZhdWx0LmFwcGx5KCBldmVudFBhdGgucG9wKCksIGRhdGEgKSA9PT0gZmFsc2UgKSAmJlxuXHRcdFx0XHRhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cblx0XHRcdFx0Ly8gQ2FsbCBhIG5hdGl2ZSBET00gbWV0aG9kIG9uIHRoZSB0YXJnZXQgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBldmVudC5cblx0XHRcdFx0Ly8gRG9uJ3QgZG8gZGVmYXVsdCBhY3Rpb25zIG9uIHdpbmRvdywgdGhhdCdzIHdoZXJlIGdsb2JhbCB2YXJpYWJsZXMgYmUgKCM2MTcwKVxuXHRcdFx0XHRpZiAoIG9udHlwZSAmJiBpc0Z1bmN0aW9uKCBlbGVtWyB0eXBlIF0gKSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vIERvbid0IHJlLXRyaWdnZXIgYW4gb25GT08gZXZlbnQgd2hlbiB3ZSBjYWxsIGl0cyBGT08oKSBtZXRob2Rcblx0XHRcdFx0XHR0bXAgPSBlbGVtWyBvbnR5cGUgXTtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSBudWxsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFByZXZlbnQgcmUtdHJpZ2dlcmluZyBvZiB0aGUgc2FtZSBldmVudCwgc2luY2Ugd2UgYWxyZWFkeSBidWJibGVkIGl0IGFib3ZlXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHR5cGU7XG5cblx0XHRcdFx0XHRpZiAoIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRcdFx0XHRsYXN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBzdG9wUHJvcGFnYXRpb25DYWxsYmFjayApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW1bIHR5cGUgXSgpO1xuXG5cdFx0XHRcdFx0aWYgKCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0XHRcdFx0bGFzdEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IHRtcDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdC8vIFBpZ2d5YmFjayBvbiBhIGRvbm9yIGV2ZW50IHRvIHNpbXVsYXRlIGEgZGlmZmVyZW50IG9uZVxuXHQvLyBVc2VkIG9ubHkgZm9yIGBmb2N1cyhpbiB8IG91dClgIGV2ZW50c1xuXHRzaW11bGF0ZTogZnVuY3Rpb24oIHR5cGUsIGVsZW0sIGV2ZW50ICkge1xuXHRcdHZhciBlID0galF1ZXJ5LmV4dGVuZChcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoKSxcblx0XHRcdGV2ZW50LFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRpc1NpbXVsYXRlZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxlbSApO1xuXHR9XG5cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdHRyaWdnZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTtcblx0XHR9ICk7XG5cdH0sXG5cdHRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXTtcblx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIGVsZW0sIHRydWUgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxuXG4vLyBTdXBwb3J0OiBGaXJlZm94IDw9NDRcbi8vIEZpcmVmb3ggZG9lc24ndCBoYXZlIGZvY3VzKGluIHwgb3V0KSBldmVudHNcbi8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3Nzg3XG4vL1xuLy8gU3VwcG9ydDogQ2hyb21lIDw9NDggLSA0OSwgU2FmYXJpIDw9OS4wIC0gOS4xXG4vLyBmb2N1cyhpbiB8IG91dCkgZXZlbnRzIGZpcmUgYWZ0ZXIgZm9jdXMgJiBibHVyIGV2ZW50cyxcbi8vIHdoaWNoIGlzIHNwZWMgdmlvbGF0aW9uIC0gaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudHMtZm9jdXNldmVudC1ldmVudC1vcmRlclxuLy8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NDk4NTdcbmlmICggIXN1cHBvcnQuZm9jdXNpbiApIHtcblx0alF1ZXJ5LmVhY2goIHsgZm9jdXM6IFwiZm9jdXNpblwiLCBibHVyOiBcImZvY3Vzb3V0XCIgfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHtcblxuXHRcdC8vIEF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciBvbiB0aGUgZG9jdW1lbnQgd2hpbGUgc29tZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0XG5cdFx0dmFyIGhhbmRsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQuc2ltdWxhdGUoIGZpeCwgZXZlbnQudGFyZ2V0LCBqUXVlcnkuZXZlbnQuZml4KCBldmVudCApICk7XG5cdFx0fTtcblxuXHRcdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBmaXggXSA9IHtcblx0XHRcdHNldHVwOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCApO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5hZGRFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgKCBhdHRhY2hlcyB8fCAwICkgKyAxICk7XG5cdFx0XHR9LFxuXHRcdFx0dGVhcmRvd246IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMsXG5cdFx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4ICkgLSAxO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkb2MsIGZpeCApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgYXR0YWNoZXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH0gKTtcbn1cbnZhciBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcblxudmFyIG5vbmNlID0gRGF0ZS5ub3coKTtcblxudmFyIHJxdWVyeSA9ICggL1xcPy8gKTtcblxuXG5cbi8vIENyb3NzLWJyb3dzZXIgeG1sIHBhcnNpbmdcbmpRdWVyeS5wYXJzZVhNTCA9IGZ1bmN0aW9uKCBkYXRhICkge1xuXHR2YXIgeG1sO1xuXHRpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0Ly8gSUUgdGhyb3dzIG9uIHBhcnNlRnJvbVN0cmluZyB3aXRoIGludmFsaWQgaW5wdXQuXG5cdHRyeSB7XG5cdFx0eG1sID0gKCBuZXcgd2luZG93LkRPTVBhcnNlcigpICkucGFyc2VGcm9tU3RyaW5nKCBkYXRhLCBcInRleHQveG1sXCIgKTtcblx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0eG1sID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKCAheG1sIHx8IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSggXCJwYXJzZXJlcnJvclwiICkubGVuZ3RoICkge1xuXHRcdGpRdWVyeS5lcnJvciggXCJJbnZhbGlkIFhNTDogXCIgKyBkYXRhICk7XG5cdH1cblx0cmV0dXJuIHhtbDtcbn07XG5cblxudmFyXG5cdHJicmFja2V0ID0gL1xcW1xcXSQvLFxuXHRyQ1JMRiA9IC9cXHI/XFxuL2csXG5cdHJzdWJtaXR0ZXJUeXBlcyA9IC9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxcblx0cnN1Ym1pdHRhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO1xuXG5mdW5jdGlvbiBidWlsZFBhcmFtcyggcHJlZml4LCBvYmosIHRyYWRpdGlvbmFsLCBhZGQgKSB7XG5cdHZhciBuYW1lO1xuXG5cdGlmICggQXJyYXkuaXNBcnJheSggb2JqICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS5cblx0XHRqUXVlcnkuZWFjaCggb2JqLCBmdW5jdGlvbiggaSwgdiApIHtcblx0XHRcdGlmICggdHJhZGl0aW9uYWwgfHwgcmJyYWNrZXQudGVzdCggcHJlZml4ICkgKSB7XG5cblx0XHRcdFx0Ly8gVHJlYXQgZWFjaCBhcnJheSBpdGVtIGFzIGEgc2NhbGFyLlxuXHRcdFx0XHRhZGQoIHByZWZpeCwgdiApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEl0ZW0gaXMgbm9uLXNjYWxhciAoYXJyYXkgb3Igb2JqZWN0KSwgZW5jb2RlIGl0cyBudW1lcmljIGluZGV4LlxuXHRcdFx0XHRidWlsZFBhcmFtcyhcblx0XHRcdFx0XHRwcmVmaXggKyBcIltcIiArICggdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPSBudWxsID8gaSA6IFwiXCIgKSArIFwiXVwiLFxuXHRcdFx0XHRcdHYsXG5cdFx0XHRcdFx0dHJhZGl0aW9uYWwsXG5cdFx0XHRcdFx0YWRkXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdH0gZWxzZSBpZiAoICF0cmFkaXRpb25hbCAmJiB0b1R5cGUoIG9iaiApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIG9iamVjdCBpdGVtLlxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCArIFwiW1wiICsgbmFtZSArIFwiXVwiLCBvYmpbIG5hbWUgXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xuXHRcdH1cblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gU2VyaWFsaXplIHNjYWxhciBpdGVtLlxuXHRcdGFkZCggcHJlZml4LCBvYmogKTtcblx0fVxufVxuXG4vLyBTZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cyBvciBhIHNldCBvZlxuLy8ga2V5L3ZhbHVlcyBpbnRvIGEgcXVlcnkgc3RyaW5nXG5qUXVlcnkucGFyYW0gPSBmdW5jdGlvbiggYSwgdHJhZGl0aW9uYWwgKSB7XG5cdHZhciBwcmVmaXgsXG5cdFx0cyA9IFtdLFxuXHRcdGFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlT3JGdW5jdGlvbiApIHtcblxuXHRcdFx0Ly8gSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCB1c2UgaXRzIHJldHVybiB2YWx1ZVxuXHRcdFx0dmFyIHZhbHVlID0gaXNGdW5jdGlvbiggdmFsdWVPckZ1bmN0aW9uICkgP1xuXHRcdFx0XHR2YWx1ZU9yRnVuY3Rpb24oKSA6XG5cdFx0XHRcdHZhbHVlT3JGdW5jdGlvbjtcblxuXHRcdFx0c1sgcy5sZW5ndGggXSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyBcIj1cIiArXG5cdFx0XHRcdGVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSApO1xuXHRcdH07XG5cblx0aWYgKCBhID09IG51bGwgKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHQvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLlxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHNcblx0XHRqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRhZGQoIHRoaXMubmFtZSwgdGhpcy52YWx1ZSApO1xuXHRcdH0gKTtcblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUgXCJvbGRcIiB3YXkgKHRoZSB3YXkgMS4zLjIgb3Igb2xkZXJcblx0XHQvLyBkaWQgaXQpLCBvdGhlcndpc2UgZW5jb2RlIHBhcmFtcyByZWN1cnNpdmVseS5cblx0XHRmb3IgKCBwcmVmaXggaW4gYSApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvblxuXHRyZXR1cm4gcy5qb2luKCBcIiZcIiApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRzZXJpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApO1xuXHR9LFxuXHRzZXJpYWxpemVBcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gQ2FuIGFkZCBwcm9wSG9vayBmb3IgXCJlbGVtZW50c1wiIHRvIGZpbHRlciBvciBhZGQgZm9ybSBlbGVtZW50c1xuXHRcdFx0dmFyIGVsZW1lbnRzID0galF1ZXJ5LnByb3AoIHRoaXMsIFwiZWxlbWVudHNcIiApO1xuXHRcdFx0cmV0dXJuIGVsZW1lbnRzID8galF1ZXJ5Lm1ha2VBcnJheSggZWxlbWVudHMgKSA6IHRoaXM7XG5cdFx0fSApXG5cdFx0LmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcblxuXHRcdFx0Ly8gVXNlIC5pcyggXCI6ZGlzYWJsZWRcIiApIHNvIHRoYXQgZmllbGRzZXRbZGlzYWJsZWRdIHdvcmtzXG5cdFx0XHRyZXR1cm4gdGhpcy5uYW1lICYmICFqUXVlcnkoIHRoaXMgKS5pcyggXCI6ZGlzYWJsZWRcIiApICYmXG5cdFx0XHRcdHJzdWJtaXR0YWJsZS50ZXN0KCB0aGlzLm5vZGVOYW1lICkgJiYgIXJzdWJtaXR0ZXJUeXBlcy50ZXN0KCB0eXBlICkgJiZcblx0XHRcdFx0KCB0aGlzLmNoZWNrZWQgfHwgIXJjaGVja2FibGVUeXBlLnRlc3QoIHR5cGUgKSApO1xuXHRcdH0gKVxuXHRcdC5tYXAoIGZ1bmN0aW9uKCBpLCBlbGVtICkge1xuXHRcdFx0dmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpO1xuXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0cmV0dXJuIGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbCApIHtcblx0XHRcdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0fSApLmdldCgpO1xuXHR9XG59ICk7XG5cblxudmFyXG5cdHIyMCA9IC8lMjAvZyxcblx0cmhhc2ggPSAvIy4qJC8sXG5cdHJhbnRpQ2FjaGUgPSAvKFs/Jl0pXz1bXiZdKi8sXG5cdHJoZWFkZXJzID0gL14oLio/KTpbIFxcdF0qKFteXFxyXFxuXSopJC9tZyxcblxuXHQvLyAjNzY1MywgIzgxMjUsICM4MTUyOiBsb2NhbCBwcm90b2NvbCBkZXRlY3Rpb25cblx0cmxvY2FsUHJvdG9jb2wgPSAvXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxcblx0cm5vQ29udGVudCA9IC9eKD86R0VUfEhFQUQpJC8sXG5cdHJwcm90b2NvbCA9IC9eXFwvXFwvLyxcblxuXHQvKiBQcmVmaWx0ZXJzXG5cdCAqIDEpIFRoZXkgYXJlIHVzZWZ1bCB0byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9yIGFuIGV4YW1wbGUpXG5cdCAqIDIpIFRoZXNlIGFyZSBjYWxsZWQ6XG5cdCAqICAgIC0gQkVGT1JFIGFza2luZyBmb3IgYSB0cmFuc3BvcnRcblx0ICogICAgLSBBRlRFUiBwYXJhbSBzZXJpYWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVlKVxuXHQgKiAzKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDQpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogNSkgZXhlY3V0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gY29udGludWUgZG93biB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHByZWZpbHRlcnMgPSB7fSxcblxuXHQvKiBUcmFuc3BvcnRzIGJpbmRpbmdzXG5cdCAqIDEpIGtleSBpcyB0aGUgZGF0YVR5cGVcblx0ICogMikgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxuXHQgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHRyYW5zcG9ydHMgPSB7fSxcblxuXHQvLyBBdm9pZCBjb21tZW50LXByb2xvZyBjaGFyIHNlcXVlbmNlICgjMTAwOTgpOyBtdXN0IGFwcGVhc2UgbGludCBhbmQgZXZhZGUgY29tcHJlc3Npb25cblx0YWxsVHlwZXMgPSBcIiovXCIuY29uY2F0KCBcIipcIiApLFxuXG5cdC8vIEFuY2hvciB0YWcgZm9yIHBhcnNpbmcgdGhlIGRvY3VtZW50IG9yaWdpblxuXHRvcmlnaW5BbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImFcIiApO1xuXHRvcmlnaW5BbmNob3IuaHJlZiA9IGxvY2F0aW9uLmhyZWY7XG5cbi8vIEJhc2UgXCJjb25zdHJ1Y3RvclwiIGZvciBqUXVlcnkuYWpheFByZWZpbHRlciBhbmQgalF1ZXJ5LmFqYXhUcmFuc3BvcnRcbmZ1bmN0aW9uIGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlICkge1xuXG5cdC8vIGRhdGFUeXBlRXhwcmVzc2lvbiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gXCIqXCJcblx0cmV0dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Npb24gIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRmdW5jID0gZGF0YVR5cGVFeHByZXNzaW9uO1xuXHRcdFx0ZGF0YVR5cGVFeHByZXNzaW9uID0gXCIqXCI7XG5cdFx0fVxuXG5cdFx0dmFyIGRhdGFUeXBlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRkYXRhVHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBmdW5jICkgKSB7XG5cblx0XHRcdC8vIEZvciBlYWNoIGRhdGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4cHJlc3Npb25cblx0XHRcdHdoaWxlICggKCBkYXRhVHlwZSA9IGRhdGFUeXBlc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHQvLyBQcmVwZW5kIGlmIHJlcXVlc3RlZFxuXHRcdFx0XHRpZiAoIGRhdGFUeXBlWyAwIF0gPT09IFwiK1wiICkge1xuXHRcdFx0XHRcdGRhdGFUeXBlID0gZGF0YVR5cGUuc2xpY2UoIDEgKSB8fCBcIipcIjtcblx0XHRcdFx0XHQoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSApLnVuc2hpZnQoIGZ1bmMgKTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYXBwZW5kXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS5wdXNoKCBmdW5jICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbi8vIEJhc2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQgdHJhbnNwb3J0c1xuZnVuY3Rpb24gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApIHtcblxuXHR2YXIgaW5zcGVjdGVkID0ge30sXG5cdFx0c2Vla2luZ1RyYW5zcG9ydCA9ICggc3RydWN0dXJlID09PSB0cmFuc3BvcnRzICk7XG5cblx0ZnVuY3Rpb24gaW5zcGVjdCggZGF0YVR5cGUgKSB7XG5cdFx0dmFyIHNlbGVjdGVkO1xuXHRcdGluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7XG5cdFx0alF1ZXJ5LmVhY2goIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSwgZnVuY3Rpb24oIF8sIHByZWZpbHRlck9yRmFjdG9yeSApIHtcblx0XHRcdHZhciBkYXRhVHlwZU9yVHJhbnNwb3J0ID0gcHJlZmlsdGVyT3JGYWN0b3J5KCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICk7XG5cdFx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZU9yVHJhbnNwb3J0ID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzZWVraW5nVHJhbnNwb3J0ICYmICFpbnNwZWN0ZWRbIGRhdGFUeXBlT3JUcmFuc3BvcnQgXSApIHtcblxuXHRcdFx0XHRvcHRpb25zLmRhdGFUeXBlcy51bnNoaWZ0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdGluc3BlY3QoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmICggc2Vla2luZ1RyYW5zcG9ydCApIHtcblx0XHRcdFx0cmV0dXJuICEoIHNlbGVjdGVkID0gZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHRyZXR1cm4gc2VsZWN0ZWQ7XG5cdH1cblxuXHRyZXR1cm4gaW5zcGVjdCggb3B0aW9ucy5kYXRhVHlwZXNbIDAgXSApIHx8ICFpbnNwZWN0ZWRbIFwiKlwiIF0gJiYgaW5zcGVjdCggXCIqXCIgKTtcbn1cblxuLy8gQSBzcGVjaWFsIGV4dGVuZCBmb3IgYWpheCBvcHRpb25zXG4vLyB0aGF0IHRha2VzIFwiZmxhdFwiIG9wdGlvbnMgKG5vdCB0byBiZSBkZWVwIGV4dGVuZGVkKVxuLy8gRml4ZXMgIzk4ODdcbmZ1bmN0aW9uIGFqYXhFeHRlbmQoIHRhcmdldCwgc3JjICkge1xuXHR2YXIga2V5LCBkZWVwLFxuXHRcdGZsYXRPcHRpb25zID0galF1ZXJ5LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9ucyB8fCB7fTtcblxuXHRmb3IgKCBrZXkgaW4gc3JjICkge1xuXHRcdGlmICggc3JjWyBrZXkgXSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0KCBmbGF0T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQgOiAoIGRlZXAgfHwgKCBkZWVwID0ge30gKSApIClbIGtleSBdID0gc3JjWyBrZXkgXTtcblx0XHR9XG5cdH1cblx0aWYgKCBkZWVwICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRydWUsIHRhcmdldCwgZGVlcCApO1xuXHR9XG5cblx0cmV0dXJuIHRhcmdldDtcbn1cblxuLyogSGFuZGxlcyByZXNwb25zZXMgdG8gYW4gYWpheCByZXF1ZXN0OlxuICogLSBmaW5kcyB0aGUgcmlnaHQgZGF0YVR5cGUgKG1lZGlhdGVzIGJldHdlZW4gY29udGVudC10eXBlIGFuZCBleHBlY3RlZCBkYXRhVHlwZSlcbiAqIC0gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxuICovXG5mdW5jdGlvbiBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICkge1xuXG5cdHZhciBjdCwgdHlwZSwgZmluYWxEYXRhVHlwZSwgZmlyc3REYXRhVHlwZSxcblx0XHRjb250ZW50cyA9IHMuY29udGVudHMsXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXM7XG5cblx0Ly8gUmVtb3ZlIGF1dG8gZGF0YVR5cGUgYW5kIGdldCBjb250ZW50LXR5cGUgaW4gdGhlIHByb2Nlc3Ncblx0d2hpbGUgKCBkYXRhVHlwZXNbIDAgXSA9PT0gXCIqXCIgKSB7XG5cdFx0ZGF0YVR5cGVzLnNoaWZ0KCk7XG5cdFx0aWYgKCBjdCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0Y3QgPSBzLm1pbWVUeXBlIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEga25vd24gY29udGVudC10eXBlXG5cdGlmICggY3QgKSB7XG5cdFx0Zm9yICggdHlwZSBpbiBjb250ZW50cyApIHtcblx0XHRcdGlmICggY29udGVudHNbIHR5cGUgXSAmJiBjb250ZW50c1sgdHlwZSBdLnRlc3QoIGN0ICkgKSB7XG5cdFx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCB0eXBlICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgcmVzcG9uc2UgZm9yIHRoZSBleHBlY3RlZCBkYXRhVHlwZVxuXHRpZiAoIGRhdGFUeXBlc1sgMCBdIGluIHJlc3BvbnNlcyApIHtcblx0XHRmaW5hbERhdGFUeXBlID0gZGF0YVR5cGVzWyAwIF07XG5cdH0gZWxzZSB7XG5cblx0XHQvLyBUcnkgY29udmVydGlibGUgZGF0YVR5cGVzXG5cdFx0Zm9yICggdHlwZSBpbiByZXNwb25zZXMgKSB7XG5cdFx0XHRpZiAoICFkYXRhVHlwZXNbIDAgXSB8fCBzLmNvbnZlcnRlcnNbIHR5cGUgKyBcIiBcIiArIGRhdGFUeXBlc1sgMCBdIF0gKSB7XG5cdFx0XHRcdGZpbmFsRGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmICggIWZpcnN0RGF0YVR5cGUgKSB7XG5cdFx0XHRcdGZpcnN0RGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE9yIGp1c3QgdXNlIGZpcnN0IG9uZVxuXHRcdGZpbmFsRGF0YVR5cGUgPSBmaW5hbERhdGFUeXBlIHx8IGZpcnN0RGF0YVR5cGU7XG5cdH1cblxuXHQvLyBJZiB3ZSBmb3VuZCBhIGRhdGFUeXBlXG5cdC8vIFdlIGFkZCB0aGUgZGF0YVR5cGUgdG8gdGhlIGxpc3QgaWYgbmVlZGVkXG5cdC8vIGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2Vcblx0aWYgKCBmaW5hbERhdGFUeXBlICkge1xuXHRcdGlmICggZmluYWxEYXRhVHlwZSAhPT0gZGF0YVR5cGVzWyAwIF0gKSB7XG5cdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggZmluYWxEYXRhVHlwZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzcG9uc2VzWyBmaW5hbERhdGFUeXBlIF07XG5cdH1cbn1cblxuLyogQ2hhaW4gY29udmVyc2lvbnMgZ2l2ZW4gdGhlIHJlcXVlc3QgYW5kIHRoZSBvcmlnaW5hbCByZXNwb25zZVxuICogQWxzbyBzZXRzIHRoZSByZXNwb25zZVhYWCBmaWVsZHMgb24gdGhlIGpxWEhSIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApIHtcblx0dmFyIGNvbnYyLCBjdXJyZW50LCBjb252LCB0bXAsIHByZXYsXG5cdFx0Y29udmVydGVycyA9IHt9LFxuXG5cdFx0Ly8gV29yayB3aXRoIGEgY29weSBvZiBkYXRhVHlwZXMgaW4gY2FzZSB3ZSBuZWVkIHRvIG1vZGlmeSBpdCBmb3IgY29udmVyc2lvblxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLnNsaWNlKCk7XG5cblx0Ly8gQ3JlYXRlIGNvbnZlcnRlcnMgbWFwIHdpdGggbG93ZXJjYXNlZCBrZXlzXG5cdGlmICggZGF0YVR5cGVzWyAxIF0gKSB7XG5cdFx0Zm9yICggY29udiBpbiBzLmNvbnZlcnRlcnMgKSB7XG5cdFx0XHRjb252ZXJ0ZXJzWyBjb252LnRvTG93ZXJDYXNlKCkgXSA9IHMuY29udmVydGVyc1sgY29udiBdO1xuXHRcdH1cblx0fVxuXG5cdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHQvLyBDb252ZXJ0IHRvIGVhY2ggc2VxdWVudGlhbCBkYXRhVHlwZVxuXHR3aGlsZSAoIGN1cnJlbnQgKSB7XG5cblx0XHRpZiAoIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSApIHtcblx0XHRcdGpxWEhSWyBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gXSA9IHJlc3BvbnNlO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkXG5cdFx0aWYgKCAhcHJldiAmJiBpc1N1Y2Nlc3MgJiYgcy5kYXRhRmlsdGVyICkge1xuXHRcdFx0cmVzcG9uc2UgPSBzLmRhdGFGaWx0ZXIoIHJlc3BvbnNlLCBzLmRhdGFUeXBlICk7XG5cdFx0fVxuXG5cdFx0cHJldiA9IGN1cnJlbnQ7XG5cdFx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xuXG5cdFx0aWYgKCBjdXJyZW50ICkge1xuXG5cdFx0XHQvLyBUaGVyZSdzIG9ubHkgd29yayB0byBkbyBpZiBjdXJyZW50IGRhdGFUeXBlIGlzIG5vbi1hdXRvXG5cdFx0XHRpZiAoIGN1cnJlbnQgPT09IFwiKlwiICkge1xuXG5cdFx0XHRcdGN1cnJlbnQgPSBwcmV2O1xuXG5cdFx0XHQvLyBDb252ZXJ0IHJlc3BvbnNlIGlmIHByZXYgZGF0YVR5cGUgaXMgbm9uLWF1dG8gYW5kIGRpZmZlcnMgZnJvbSBjdXJyZW50XG5cdFx0XHR9IGVsc2UgaWYgKCBwcmV2ICE9PSBcIipcIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdC8vIFNlZWsgYSBkaXJlY3QgY29udmVydGVyXG5cdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyBjdXJyZW50IF0gfHwgY29udmVydGVyc1sgXCIqIFwiICsgY3VycmVudCBdO1xuXG5cdFx0XHRcdC8vIElmIG5vbmUgZm91bmQsIHNlZWsgYSBwYWlyXG5cdFx0XHRcdGlmICggIWNvbnYgKSB7XG5cdFx0XHRcdFx0Zm9yICggY29udjIgaW4gY29udmVydGVycyApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSWYgY29udjIgb3V0cHV0cyBjdXJyZW50XG5cdFx0XHRcdFx0XHR0bXAgPSBjb252Mi5zcGxpdCggXCIgXCIgKTtcblx0XHRcdFx0XHRcdGlmICggdG1wWyAxIF0gPT09IGN1cnJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gSWYgcHJldiBjYW4gYmUgY29udmVydGVkIHRvIGFjY2VwdGVkIGlucHV0XG5cdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyB0bXBbIDAgXSBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyc1sgXCIqIFwiICsgdG1wWyAwIF0gXTtcblx0XHRcdFx0XHRcdFx0aWYgKCBjb252ICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ29uZGVuc2UgZXF1aXZhbGVuY2UgY29udmVydGVyc1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY29udiA9PT0gdHJ1ZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBjb252MiBdO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBpbnNlcnQgdGhlIGludGVybWVkaWF0ZSBkYXRhVHlwZVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGNvbnZlcnRlcnNbIGNvbnYyIF0gIT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50ID0gdG1wWyAwIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdG1wWyAxIF0gKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBcHBseSBjb252ZXJ0ZXIgKGlmIG5vdCBhbiBlcXVpdmFsZW5jZSlcblx0XHRcdFx0aWYgKCBjb252ICE9PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0Ly8gVW5sZXNzIGVycm9ycyBhcmUgYWxsb3dlZCB0byBidWJibGUsIGNhdGNoIGFuZCByZXR1cm4gdGhlbVxuXHRcdFx0XHRcdGlmICggY29udiAmJiBzLnRocm93cyApIHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdGU6IFwicGFyc2VyZXJyb3JcIixcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjogY29udiA/IGUgOiBcIk5vIGNvbnZlcnNpb24gZnJvbSBcIiArIHByZXYgKyBcIiB0byBcIiArIGN1cnJlbnRcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyBzdGF0ZTogXCJzdWNjZXNzXCIsIGRhdGE6IHJlc3BvbnNlIH07XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBDb3VudGVyIGZvciBob2xkaW5nIHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1ZXJpZXNcblx0YWN0aXZlOiAwLFxuXG5cdC8vIExhc3QtTW9kaWZpZWQgaGVhZGVyIGNhY2hlIGZvciBuZXh0IHJlcXVlc3Rcblx0bGFzdE1vZGlmaWVkOiB7fSxcblx0ZXRhZzoge30sXG5cblx0YWpheFNldHRpbmdzOiB7XG5cdFx0dXJsOiBsb2NhdGlvbi5ocmVmLFxuXHRcdHR5cGU6IFwiR0VUXCIsXG5cdFx0aXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggbG9jYXRpb24ucHJvdG9jb2wgKSxcblx0XHRnbG9iYWw6IHRydWUsXG5cdFx0cHJvY2Vzc0RhdGE6IHRydWUsXG5cdFx0YXN5bmM6IHRydWUsXG5cdFx0Y29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsXG5cblx0XHQvKlxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0ZGF0YTogbnVsbCxcblx0XHRkYXRhVHlwZTogbnVsbCxcblx0XHR1c2VybmFtZTogbnVsbCxcblx0XHRwYXNzd29yZDogbnVsbCxcblx0XHRjYWNoZTogbnVsbCxcblx0XHR0aHJvd3M6IGZhbHNlLFxuXHRcdHRyYWRpdGlvbmFsOiBmYWxzZSxcblx0XHRoZWFkZXJzOiB7fSxcblx0XHQqL1xuXG5cdFx0YWNjZXB0czoge1xuXHRcdFx0XCIqXCI6IGFsbFR5cGVzLFxuXHRcdFx0dGV4dDogXCJ0ZXh0L3BsYWluXCIsXG5cdFx0XHRodG1sOiBcInRleHQvaHRtbFwiLFxuXHRcdFx0eG1sOiBcImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWxcIixcblx0XHRcdGpzb246IFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0XCJcblx0XHR9LFxuXG5cdFx0Y29udGVudHM6IHtcblx0XHRcdHhtbDogL1xcYnhtbFxcYi8sXG5cdFx0XHRodG1sOiAvXFxiaHRtbC8sXG5cdFx0XHRqc29uOiAvXFxianNvblxcYi9cblx0XHR9LFxuXG5cdFx0cmVzcG9uc2VGaWVsZHM6IHtcblx0XHRcdHhtbDogXCJyZXNwb25zZVhNTFwiLFxuXHRcdFx0dGV4dDogXCJyZXNwb25zZVRleHRcIixcblx0XHRcdGpzb246IFwicmVzcG9uc2VKU09OXCJcblx0XHR9LFxuXG5cdFx0Ly8gRGF0YSBjb252ZXJ0ZXJzXG5cdFx0Ly8gS2V5cyBzZXBhcmF0ZSBzb3VyY2UgKG9yIGNhdGNoYWxsIFwiKlwiKSBhbmQgZGVzdGluYXRpb24gdHlwZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuXHRcdGNvbnZlcnRlcnM6IHtcblxuXHRcdFx0Ly8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0XG5cdFx0XHRcIiogdGV4dFwiOiBTdHJpbmcsXG5cblx0XHRcdC8vIFRleHQgdG8gaHRtbCAodHJ1ZSA9IG5vIHRyYW5zZm9ybWF0aW9uKVxuXHRcdFx0XCJ0ZXh0IGh0bWxcIjogdHJ1ZSxcblxuXHRcdFx0Ly8gRXZhbHVhdGUgdGV4dCBhcyBhIGpzb24gZXhwcmVzc2lvblxuXHRcdFx0XCJ0ZXh0IGpzb25cIjogSlNPTi5wYXJzZSxcblxuXHRcdFx0Ly8gUGFyc2UgdGV4dCBhcyB4bWxcblx0XHRcdFwidGV4dCB4bWxcIjogalF1ZXJ5LnBhcnNlWE1MXG5cdFx0fSxcblxuXHRcdC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6XG5cdFx0Ly8geW91IGNhbiBhZGQgeW91ciBvd24gY3VzdG9tIG9wdGlvbnMgaGVyZSBpZlxuXHRcdC8vIGFuZCB3aGVuIHlvdSBjcmVhdGUgb25lIHRoYXQgc2hvdWxkbid0IGJlXG5cdFx0Ly8gZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQpXG5cdFx0ZmxhdE9wdGlvbnM6IHtcblx0XHRcdHVybDogdHJ1ZSxcblx0XHRcdGNvbnRleHQ6IHRydWVcblx0XHR9XG5cdH0sXG5cblx0Ly8gQ3JlYXRlcyBhIGZ1bGwgZmxlZGdlZCBzZXR0aW5ncyBvYmplY3QgaW50byB0YXJnZXRcblx0Ly8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRzLlxuXHQvLyBJZiB0YXJnZXQgaXMgb21pdHRlZCwgd3JpdGVzIGludG8gYWpheFNldHRpbmdzLlxuXHRhamF4U2V0dXA6IGZ1bmN0aW9uKCB0YXJnZXQsIHNldHRpbmdzICkge1xuXHRcdHJldHVybiBzZXR0aW5ncyA/XG5cblx0XHRcdC8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2JqZWN0XG5cdFx0XHRhamF4RXh0ZW5kKCBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGluZ3MgKSwgc2V0dGluZ3MgKSA6XG5cblx0XHRcdC8vIEV4dGVuZGluZyBhamF4U2V0dGluZ3Ncblx0XHRcdGFqYXhFeHRlbmQoIGpRdWVyeS5hamF4U2V0dGluZ3MsIHRhcmdldCApO1xuXHR9LFxuXG5cdGFqYXhQcmVmaWx0ZXI6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycyApLFxuXHRhamF4VHJhbnNwb3J0OiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMgKSxcblxuXHQvLyBNYWluIG1ldGhvZFxuXHRhamF4OiBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkge1xuXG5cdFx0Ly8gSWYgdXJsIGlzIGFuIG9iamVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmVcblx0XHRpZiAoIHR5cGVvZiB1cmwgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRvcHRpb25zID0gdXJsO1xuXHRcdFx0dXJsID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0XG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0XHR2YXIgdHJhbnNwb3J0LFxuXG5cdFx0XHQvLyBVUkwgd2l0aG91dCBhbnRpLWNhY2hlIHBhcmFtXG5cdFx0XHRjYWNoZVVSTCxcblxuXHRcdFx0Ly8gUmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nLFxuXHRcdFx0cmVzcG9uc2VIZWFkZXJzLFxuXG5cdFx0XHQvLyB0aW1lb3V0IGhhbmRsZVxuXHRcdFx0dGltZW91dFRpbWVyLFxuXG5cdFx0XHQvLyBVcmwgY2xlYW51cCB2YXJcblx0XHRcdHVybEFuY2hvcixcblxuXHRcdFx0Ly8gUmVxdWVzdCBzdGF0ZSAoYmVjb21lcyBmYWxzZSB1cG9uIHNlbmQgYW5kIHRydWUgdXBvbiBjb21wbGV0aW9uKVxuXHRcdFx0Y29tcGxldGVkLFxuXG5cdFx0XHQvLyBUbyBrbm93IGlmIGdsb2JhbCBldmVudHMgYXJlIHRvIGJlIGRpc3BhdGNoZWRcblx0XHRcdGZpcmVHbG9iYWxzLFxuXG5cdFx0XHQvLyBMb29wIHZhcmlhYmxlXG5cdFx0XHRpLFxuXG5cdFx0XHQvLyB1bmNhY2hlZCBwYXJ0IG9mIHRoZSB1cmxcblx0XHRcdHVuY2FjaGVkLFxuXG5cdFx0XHQvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0XG5cdFx0XHRzID0galF1ZXJ5LmFqYXhTZXR1cCgge30sIG9wdGlvbnMgKSxcblxuXHRcdFx0Ly8gQ2FsbGJhY2tzIGNvbnRleHRcblx0XHRcdGNhbGxiYWNrQ29udGV4dCA9IHMuY29udGV4dCB8fCBzLFxuXG5cdFx0XHQvLyBDb250ZXh0IGZvciBnbG9iYWwgZXZlbnRzIGlzIGNhbGxiYWNrQ29udGV4dCBpZiBpdCBpcyBhIERPTSBub2RlIG9yIGpRdWVyeSBjb2xsZWN0aW9uXG5cdFx0XHRnbG9iYWxFdmVudENvbnRleHQgPSBzLmNvbnRleHQgJiZcblx0XHRcdFx0KCBjYWxsYmFja0NvbnRleHQubm9kZVR5cGUgfHwgY2FsbGJhY2tDb250ZXh0LmpxdWVyeSApID9cblx0XHRcdFx0XHRqUXVlcnkoIGNhbGxiYWNrQ29udGV4dCApIDpcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQsXG5cblx0XHRcdC8vIERlZmVycmVkc1xuXHRcdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQgPSBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdHN0YXR1c0NvZGUgPSBzLnN0YXR1c0NvZGUgfHwge30sXG5cblx0XHRcdC8vIEhlYWRlcnMgKHRoZXkgYXJlIHNlbnQgYWxsIGF0IG9uY2UpXG5cdFx0XHRyZXF1ZXN0SGVhZGVycyA9IHt9LFxuXHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lcyA9IHt9LFxuXG5cdFx0XHQvLyBEZWZhdWx0IGFib3J0IG1lc3NhZ2Vcblx0XHRcdHN0ckFib3J0ID0gXCJjYW5jZWxlZFwiLFxuXG5cdFx0XHQvLyBGYWtlIHhoclxuXHRcdFx0anFYSFIgPSB7XG5cdFx0XHRcdHJlYWR5U3RhdGU6IDAsXG5cblx0XHRcdFx0Ly8gQnVpbGRzIGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRlZFxuXHRcdFx0XHRnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24oIGtleSApIHtcblx0XHRcdFx0XHR2YXIgbWF0Y2g7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICFyZXNwb25zZUhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVycyA9IHt9O1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbWF0Y2ggPSByaGVhZGVycy5leGVjKCByZXNwb25zZUhlYWRlcnNTdHJpbmcgKSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXSA9XG5cdFx0XHRcdFx0XHRcdFx0XHQoIHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXSB8fCBbXSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5jb25jYXQoIG1hdGNoWyAyIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bWF0Y2ggPSByZXNwb25zZUhlYWRlcnNbIGtleS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoID09IG51bGwgPyBudWxsIDogbWF0Y2guam9pbiggXCIsIFwiICk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gUmF3IHN0cmluZ1xuXHRcdFx0XHRnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBjb21wbGV0ZWQgPyByZXNwb25zZUhlYWRlcnNTdHJpbmcgOiBudWxsO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhY2hlcyB0aGUgaGVhZGVyXG5cdFx0XHRcdHNldFJlcXVlc3RIZWFkZXI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0bmFtZSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdID1cblx0XHRcdFx0XHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHwgbmFtZTtcblx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGVzIHJlc3BvbnNlIGNvbnRlbnQtdHlwZSBoZWFkZXJcblx0XHRcdFx0b3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdHMubWltZVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0XHRzdGF0dXNDb2RlOiBmdW5jdGlvbiggbWFwICkge1xuXHRcdFx0XHRcdHZhciBjb2RlO1xuXHRcdFx0XHRcdGlmICggbWFwICkge1xuXHRcdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gRXhlY3V0ZSB0aGUgYXBwcm9wcmlhdGUgY2FsbGJhY2tzXG5cdFx0XHRcdFx0XHRcdGpxWEhSLmFsd2F5cyggbWFwWyBqcVhIUi5zdGF0dXMgXSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBMYXp5LWFkZCB0aGUgbmV3IGNhbGxiYWNrcyBpbiBhIHdheSB0aGF0IHByZXNlcnZlcyBvbGQgb25lc1xuXHRcdFx0XHRcdFx0XHRmb3IgKCBjb2RlIGluIG1hcCApIHtcblx0XHRcdFx0XHRcdFx0XHRzdGF0dXNDb2RlWyBjb2RlIF0gPSBbIHN0YXR1c0NvZGVbIGNvZGUgXSwgbWFwWyBjb2RlIF0gXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYW5jZWwgdGhlIHJlcXVlc3Rcblx0XHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCBzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHZhciBmaW5hbFRleHQgPSBzdGF0dXNUZXh0IHx8IHN0ckFib3J0O1xuXHRcdFx0XHRcdGlmICggdHJhbnNwb3J0ICkge1xuXHRcdFx0XHRcdFx0dHJhbnNwb3J0LmFib3J0KCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZG9uZSggMCwgZmluYWxUZXh0ICk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHQvLyBBdHRhY2ggZGVmZXJyZWRzXG5cdFx0ZGVmZXJyZWQucHJvbWlzZSgganFYSFIgKTtcblxuXHRcdC8vIEFkZCBwcm90b2NvbCBpZiBub3QgcHJvdmlkZWQgKHByZWZpbHRlcnMgbWlnaHQgZXhwZWN0IGl0KVxuXHRcdC8vIEhhbmRsZSBmYWxzeSB1cmwgaW4gdGhlIHNldHRpbmdzIG9iamVjdCAoIzEwMDkzOiBjb25zaXN0ZW5jeSB3aXRoIG9sZCBzaWduYXR1cmUpXG5cdFx0Ly8gV2UgYWxzbyB1c2UgdGhlIHVybCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlXG5cdFx0cy51cmwgPSAoICggdXJsIHx8IHMudXJsIHx8IGxvY2F0aW9uLmhyZWYgKSArIFwiXCIgKVxuXHRcdFx0LnJlcGxhY2UoIHJwcm90b2NvbCwgbG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKTtcblxuXHRcdC8vIEFsaWFzIG1ldGhvZCBvcHRpb24gdG8gdHlwZSBhcyBwZXIgdGlja2V0ICMxMjAwNFxuXHRcdHMudHlwZSA9IG9wdGlvbnMubWV0aG9kIHx8IG9wdGlvbnMudHlwZSB8fCBzLm1ldGhvZCB8fCBzLnR5cGU7XG5cblx0XHQvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0XG5cdFx0cy5kYXRhVHlwZXMgPSAoIHMuZGF0YVR5cGUgfHwgXCIqXCIgKS50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cblx0XHQvLyBBIGNyb3NzLWRvbWFpbiByZXF1ZXN0IGlzIGluIG9yZGVyIHdoZW4gdGhlIG9yaWdpbiBkb2Vzbid0IG1hdGNoIHRoZSBjdXJyZW50IG9yaWdpbi5cblx0XHRpZiAoIHMuY3Jvc3NEb21haW4gPT0gbnVsbCApIHtcblx0XHRcdHVybEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiYVwiICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExLCBFZGdlIDEyIC0gMTVcblx0XHRcdC8vIElFIHRocm93cyBleGNlcHRpb24gb24gYWNjZXNzaW5nIHRoZSBocmVmIHByb3BlcnR5IGlmIHVybCBpcyBtYWxmb3JtZWQsXG5cdFx0XHQvLyBlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbTo4MHgvXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHMudXJsO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExIG9ubHlcblx0XHRcdFx0Ly8gQW5jaG9yJ3MgaG9zdCBwcm9wZXJ0eSBpc24ndCBjb3JyZWN0bHkgc2V0IHdoZW4gcy51cmwgaXMgcmVsYXRpdmVcblx0XHRcdFx0dXJsQW5jaG9yLmhyZWYgPSB1cmxBbmNob3IuaHJlZjtcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IG9yaWdpbkFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIG9yaWdpbkFuY2hvci5ob3N0ICE9PVxuXHRcdFx0XHRcdHVybEFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIHVybEFuY2hvci5ob3N0O1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYW4gZXJyb3IgcGFyc2luZyB0aGUgVVJMLCBhc3N1bWUgaXQgaXMgY3Jvc3NEb21haW4sXG5cdFx0XHRcdC8vIGl0IGNhbiBiZSByZWplY3RlZCBieSB0aGUgdHJhbnNwb3J0IGlmIGl0IGlzIGludmFsaWRcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29udmVydCBkYXRhIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nXG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJiB0eXBlb2Ygcy5kYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cy5kYXRhID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9uYWwgKTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBwcmVmaWx0ZXJzXG5cdFx0aW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XG5cblx0XHQvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhIHByZWZpbHRlciwgc3RvcCB0aGVyZVxuXHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdH1cblxuXHRcdC8vIFdlIGNhbiBmaXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvXG5cdFx0Ly8gRG9uJ3QgZmlyZSBldmVudHMgaWYgalF1ZXJ5LmV2ZW50IGlzIHVuZGVmaW5lZCBpbiBhbiBBTUQtdXNhZ2Ugc2NlbmFyaW8gKCMxNTExOClcblx0XHRmaXJlR2xvYmFscyA9IGpRdWVyeS5ldmVudCAmJiBzLmdsb2JhbDtcblxuXHRcdC8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHNcblx0XHRpZiAoIGZpcmVHbG9iYWxzICYmIGpRdWVyeS5hY3RpdmUrKyA9PT0gMCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdGFydFwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gVXBwZXJjYXNlIHRoZSB0eXBlXG5cdFx0cy50eXBlID0gcy50eXBlLnRvVXBwZXJDYXNlKCk7XG5cblx0XHQvLyBEZXRlcm1pbmUgaWYgcmVxdWVzdCBoYXMgY29udGVudFxuXHRcdHMuaGFzQ29udGVudCA9ICFybm9Db250ZW50LnRlc3QoIHMudHlwZSApO1xuXG5cdFx0Ly8gU2F2ZSB0aGUgVVJMIGluIGNhc2Ugd2UncmUgdG95aW5nIHdpdGggdGhlIElmLU1vZGlmaWVkLVNpbmNlXG5cdFx0Ly8gYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyIGxhdGVyIG9uXG5cdFx0Ly8gUmVtb3ZlIGhhc2ggdG8gc2ltcGxpZnkgdXJsIG1hbmlwdWxhdGlvblxuXHRcdGNhY2hlVVJMID0gcy51cmwucmVwbGFjZSggcmhhc2gsIFwiXCIgKTtcblxuXHRcdC8vIE1vcmUgb3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBubyBjb250ZW50XG5cdFx0aWYgKCAhcy5oYXNDb250ZW50ICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgaGFzaCBzbyB3ZSBjYW4gcHV0IGl0IGJhY2tcblx0XHRcdHVuY2FjaGVkID0gcy51cmwuc2xpY2UoIGNhY2hlVVJMLmxlbmd0aCApO1xuXG5cdFx0XHQvLyBJZiBkYXRhIGlzIGF2YWlsYWJsZSBhbmQgc2hvdWxkIGJlIHByb2Nlc3NlZCwgYXBwZW5kIGRhdGEgdG8gdXJsXG5cdFx0XHRpZiAoIHMuZGF0YSAmJiAoIHMucHJvY2Vzc0RhdGEgfHwgdHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiApICkge1xuXHRcdFx0XHRjYWNoZVVSTCArPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gXCImXCIgOiBcIj9cIiApICsgcy5kYXRhO1xuXG5cdFx0XHRcdC8vICM5NjgyOiByZW1vdmUgZGF0YSBzbyB0aGF0IGl0J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1YWwgcmV0cnlcblx0XHRcdFx0ZGVsZXRlIHMuZGF0YTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIG9yIHVwZGF0ZSBhbnRpLWNhY2hlIHBhcmFtIGlmIG5lZWRlZFxuXHRcdFx0aWYgKCBzLmNhY2hlID09PSBmYWxzZSApIHtcblx0XHRcdFx0Y2FjaGVVUkwgPSBjYWNoZVVSTC5yZXBsYWNlKCByYW50aUNhY2hlLCBcIiQxXCIgKTtcblx0XHRcdFx0dW5jYWNoZWQgPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gXCImXCIgOiBcIj9cIiApICsgXCJfPVwiICsgKCBub25jZSsrICkgKyB1bmNhY2hlZDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUHV0IGhhc2ggYW5kIGFudGktY2FjaGUgb24gdGhlIFVSTCB0aGF0IHdpbGwgYmUgcmVxdWVzdGVkIChnaC0xNzMyKVxuXHRcdFx0cy51cmwgPSBjYWNoZVVSTCArIHVuY2FjaGVkO1xuXG5cdFx0Ly8gQ2hhbmdlICclMjAnIHRvICcrJyBpZiB0aGlzIGlzIGVuY29kZWQgZm9ybSBib2R5IGNvbnRlbnQgKGdoLTI2NTgpXG5cdFx0fSBlbHNlIGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiZcblx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiICkuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICkge1xuXHRcdFx0cy5kYXRhID0gcy5kYXRhLnJlcGxhY2UoIHIyMCwgXCIrXCIgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0aWYgKCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICkge1xuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU1vZGlmaWVkLVNpbmNlXCIsIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKTtcblx0XHRcdH1cblx0XHRcdGlmICggalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTm9uZS1NYXRjaFwiLCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVpbmcgc2VudFxuXHRcdGlmICggcy5kYXRhICYmIHMuaGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8fCBvcHRpb25zLmNvbnRlbnRUeXBlICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJDb250ZW50LVR5cGVcIiwgcy5jb250ZW50VHlwZSApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRoZSBzZXJ2ZXIsIGRlcGVuZGluZyBvbiB0aGUgZGF0YVR5cGVcblx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKFxuXHRcdFx0XCJBY2NlcHRcIixcblx0XHRcdHMuZGF0YVR5cGVzWyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gP1xuXHRcdFx0XHRzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSArXG5cdFx0XHRcdFx0KCBzLmRhdGFUeXBlc1sgMCBdICE9PSBcIipcIiA/IFwiLCBcIiArIGFsbFR5cGVzICsgXCI7IHE9MC4wMVwiIDogXCJcIiApIDpcblx0XHRcdFx0cy5hY2NlcHRzWyBcIipcIiBdXG5cdFx0KTtcblxuXHRcdC8vIENoZWNrIGZvciBoZWFkZXJzIG9wdGlvblxuXHRcdGZvciAoIGkgaW4gcy5oZWFkZXJzICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggaSwgcy5oZWFkZXJzWyBpIF0gKTtcblx0XHR9XG5cblx0XHQvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlwZXMgYW5kIGVhcmx5IGFib3J0XG5cdFx0aWYgKCBzLmJlZm9yZVNlbmQgJiZcblx0XHRcdCggcy5iZWZvcmVTZW5kLmNhbGwoIGNhbGxiYWNrQ29udGV4dCwganFYSFIsIHMgKSA9PT0gZmFsc2UgfHwgY29tcGxldGVkICkgKSB7XG5cblx0XHRcdC8vIEFib3J0IGlmIG5vdCBkb25lIGFscmVhZHkgYW5kIHJldHVyblxuXHRcdFx0cmV0dXJuIGpxWEhSLmFib3J0KCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWJvcnRpbmcgaXMgbm8gbG9uZ2VyIGEgY2FuY2VsbGF0aW9uXG5cdFx0c3RyQWJvcnQgPSBcImFib3J0XCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrcyBvbiBkZWZlcnJlZHNcblx0XHRjb21wbGV0ZURlZmVycmVkLmFkZCggcy5jb21wbGV0ZSApO1xuXHRcdGpxWEhSLmRvbmUoIHMuc3VjY2VzcyApO1xuXHRcdGpxWEhSLmZhaWwoIHMuZXJyb3IgKTtcblxuXHRcdC8vIEdldCB0cmFuc3BvcnRcblx0XHR0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9ydFxuXHRcdGlmICggIXRyYW5zcG9ydCApIHtcblx0XHRcdGRvbmUoIC0xLCBcIk5vIFRyYW5zcG9ydFwiICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSAxO1xuXG5cdFx0XHQvLyBTZW5kIGdsb2JhbCBldmVudFxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheFNlbmRcIiwgWyBqcVhIUiwgcyBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGFqYXhTZW5kLCBzdG9wIHRoZXJlXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaW1lb3V0XG5cdFx0XHRpZiAoIHMuYXN5bmMgJiYgcy50aW1lb3V0ID4gMCApIHtcblx0XHRcdFx0dGltZW91dFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGpxWEhSLmFib3J0KCBcInRpbWVvdXRcIiApO1xuXHRcdFx0XHR9LCBzLnRpbWVvdXQgKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29tcGxldGVkID0gZmFsc2U7XG5cdFx0XHRcdHRyYW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gUmV0aHJvdyBwb3N0LWNvbXBsZXRpb24gZXhjZXB0aW9uc1xuXHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUHJvcGFnYXRlIG90aGVycyBhcyByZXN1bHRzXG5cdFx0XHRcdGRvbmUoIC0xLCBlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBkb25lXG5cdFx0ZnVuY3Rpb24gZG9uZSggc3RhdHVzLCBuYXRpdmVTdGF0dXNUZXh0LCByZXNwb25zZXMsIGhlYWRlcnMgKSB7XG5cdFx0XHR2YXIgaXNTdWNjZXNzLCBzdWNjZXNzLCBlcnJvciwgcmVzcG9uc2UsIG1vZGlmaWVkLFxuXHRcdFx0XHRzdGF0dXNUZXh0ID0gbmF0aXZlU3RhdHVzVGV4dDtcblxuXHRcdFx0Ly8gSWdub3JlIHJlcGVhdCBpbnZvY2F0aW9uc1xuXHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29tcGxldGVkID0gdHJ1ZTtcblxuXHRcdFx0Ly8gQ2xlYXIgdGltZW91dCBpZiBpdCBleGlzdHNcblx0XHRcdGlmICggdGltZW91dFRpbWVyICkge1xuXHRcdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0VGltZXIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRGVyZWZlcmVuY2UgdHJhbnNwb3J0IGZvciBlYXJseSBnYXJiYWdlIGNvbGxlY3Rpb25cblx0XHRcdC8vIChubyBtYXR0ZXIgaG93IGxvbmcgdGhlIGpxWEhSIG9iamVjdCB3aWxsIGJlIHVzZWQpXG5cdFx0XHR0cmFuc3BvcnQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdC8vIENhY2hlIHJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyA9IGhlYWRlcnMgfHwgXCJcIjtcblxuXHRcdFx0Ly8gU2V0IHJlYWR5U3RhdGVcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSBzdGF0dXMgPiAwID8gNCA6IDA7XG5cblx0XHRcdC8vIERldGVybWluZSBpZiBzdWNjZXNzZnVsXG5cdFx0XHRpc1N1Y2Nlc3MgPSBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMgPT09IDMwNDtcblxuXHRcdFx0Ly8gR2V0IHJlc3BvbnNlIGRhdGFcblx0XHRcdGlmICggcmVzcG9uc2VzICkge1xuXHRcdFx0XHRyZXNwb25zZSA9IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCBubyBtYXR0ZXIgd2hhdCAodGhhdCB3YXkgcmVzcG9uc2VYWFggZmllbGRzIGFyZSBhbHdheXMgc2V0KVxuXHRcdFx0cmVzcG9uc2UgPSBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKTtcblxuXHRcdFx0Ly8gSWYgc3VjY2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmdcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXG5cdFx0XHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0XHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiTGFzdC1Nb2RpZmllZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJldGFnXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBpZiBubyBjb250ZW50XG5cdFx0XHRcdGlmICggc3RhdHVzID09PSAyMDQgfHwgcy50eXBlID09PSBcIkhFQURcIiApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub2NvbnRlbnRcIjtcblxuXHRcdFx0XHQvLyBpZiBub3QgbW9kaWZpZWRcblx0XHRcdFx0fSBlbHNlIGlmICggc3RhdHVzID09PSAzMDQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm90bW9kaWZpZWRcIjtcblxuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGRhdGEsIGxldCdzIGNvbnZlcnQgaXRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gcmVzcG9uc2Uuc3RhdGU7XG5cdFx0XHRcdFx0c3VjY2VzcyA9IHJlc3BvbnNlLmRhdGE7XG5cdFx0XHRcdFx0ZXJyb3IgPSByZXNwb25zZS5lcnJvcjtcblx0XHRcdFx0XHRpc1N1Y2Nlc3MgPSAhZXJyb3I7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gRXh0cmFjdCBlcnJvciBmcm9tIHN0YXR1c1RleHQgYW5kIG5vcm1hbGl6ZSBmb3Igbm9uLWFib3J0c1xuXHRcdFx0XHRlcnJvciA9IHN0YXR1c1RleHQ7XG5cdFx0XHRcdGlmICggc3RhdHVzIHx8ICFzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcImVycm9yXCI7XG5cdFx0XHRcdFx0aWYgKCBzdGF0dXMgPCAwICkge1xuXHRcdFx0XHRcdFx0c3RhdHVzID0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IGRhdGEgZm9yIHRoZSBmYWtlIHhociBvYmplY3Rcblx0XHRcdGpxWEhSLnN0YXR1cyA9IHN0YXR1cztcblx0XHRcdGpxWEhSLnN0YXR1c1RleHQgPSAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCApICsgXCJcIjtcblxuXHRcdFx0Ly8gU3VjY2Vzcy9FcnJvclxuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsgc3VjY2Vzcywgc3RhdHVzVGV4dCwganFYSFIgXSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7XG5cdFx0XHRzdGF0dXNDb2RlID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggaXNTdWNjZXNzID8gXCJhamF4U3VjY2Vzc1wiIDogXCJhamF4RXJyb3JcIixcblx0XHRcdFx0XHRbIGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBzdWNjZXNzIDogZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb21wbGV0ZVxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZC5maXJlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0IF0gKTtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheENvbXBsZXRlXCIsIFsganFYSFIsIHMgXSApO1xuXG5cdFx0XHRcdC8vIEhhbmRsZSB0aGUgZ2xvYmFsIEFKQVggY291bnRlclxuXHRcdFx0XHRpZiAoICEoIC0talF1ZXJ5LmFjdGl2ZSApICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdG9wXCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBqcVhIUjtcblx0fSxcblxuXHRnZXRKU09OOiBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgXCJqc29uXCIgKTtcblx0fSxcblxuXHRnZXRTY3JpcHQ6IGZ1bmN0aW9uKCB1cmwsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssIFwic2NyaXB0XCIgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcImdldFwiLCBcInBvc3RcIiBdLCBmdW5jdGlvbiggaSwgbWV0aG9kICkge1xuXHRqUXVlcnlbIG1ldGhvZCBdID0gZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2ssIHR5cGUgKSB7XG5cblx0XHQvLyBTaGlmdCBhcmd1bWVudHMgaWYgZGF0YSBhcmd1bWVudCB3YXMgb21pdHRlZFxuXHRcdGlmICggaXNGdW5jdGlvbiggZGF0YSApICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7XG5cdFx0XHRjYWxsYmFjayA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIFRoZSB1cmwgY2FuIGJlIGFuIG9wdGlvbnMgb2JqZWN0ICh3aGljaCB0aGVuIG11c3QgaGF2ZSAudXJsKVxuXHRcdHJldHVybiBqUXVlcnkuYWpheCggalF1ZXJ5LmV4dGVuZCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cdFx0XHR0eXBlOiBtZXRob2QsXG5cdFx0XHRkYXRhVHlwZTogdHlwZSxcblx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRzdWNjZXNzOiBjYWxsYmFja1xuXHRcdH0sIGpRdWVyeS5pc1BsYWluT2JqZWN0KCB1cmwgKSAmJiB1cmwgKSApO1xuXHR9O1xufSApO1xuXG5cbmpRdWVyeS5fZXZhbFVybCA9IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMgKSB7XG5cdHJldHVybiBqUXVlcnkuYWpheCgge1xuXHRcdHVybDogdXJsLFxuXG5cdFx0Ly8gTWFrZSB0aGlzIGV4cGxpY2l0LCBzaW5jZSB1c2VyIGNhbiBvdmVycmlkZSB0aGlzIHRocm91Z2ggYWpheFNldHVwICgjMTEyNjQpXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRkYXRhVHlwZTogXCJzY3JpcHRcIixcblx0XHRjYWNoZTogdHJ1ZSxcblx0XHRhc3luYzogZmFsc2UsXG5cdFx0Z2xvYmFsOiBmYWxzZSxcblxuXHRcdC8vIE9ubHkgZXZhbHVhdGUgdGhlIHJlc3BvbnNlIGlmIGl0IGlzIHN1Y2Nlc3NmdWwgKGdoLTQxMjYpXG5cdFx0Ly8gZGF0YUZpbHRlciBpcyBub3QgaW52b2tlZCBmb3IgZmFpbHVyZSByZXNwb25zZXMsIHNvIHVzaW5nIGl0IGluc3RlYWRcblx0XHQvLyBvZiB0aGUgZGVmYXVsdCBjb252ZXJ0ZXIgaXMga2x1ZGd5IGJ1dCBpdCB3b3Jrcy5cblx0XHRjb252ZXJ0ZXJzOiB7XG5cdFx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCkge31cblx0XHR9LFxuXHRcdGRhdGFGaWx0ZXI6IGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCByZXNwb25zZSwgb3B0aW9ucyApO1xuXHRcdH1cblx0fSApO1xufTtcblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHdyYXBBbGw6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciB3cmFwO1xuXG5cdFx0aWYgKCB0aGlzWyAwIF0gKSB7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIGh0bWwgKSApIHtcblx0XHRcdFx0aHRtbCA9IGh0bWwuY2FsbCggdGhpc1sgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRoZSBlbGVtZW50cyB0byB3cmFwIHRoZSB0YXJnZXQgYXJvdW5kXG5cdFx0XHR3cmFwID0galF1ZXJ5KCBodG1sLCB0aGlzWyAwIF0ub3duZXJEb2N1bWVudCApLmVxKCAwICkuY2xvbmUoIHRydWUgKTtcblxuXHRcdFx0aWYgKCB0aGlzWyAwIF0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0d3JhcC5pbnNlcnRCZWZvcmUoIHRoaXNbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHR3cmFwLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBlbGVtID0gdGhpcztcblxuXHRcdFx0XHR3aGlsZSAoIGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQgKSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZWxlbTtcblx0XHRcdH0gKS5hcHBlbmQoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR3cmFwSW5uZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBJbm5lciggaHRtbC5jYWxsKCB0aGlzLCBpICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0galF1ZXJ5KCB0aGlzICksXG5cdFx0XHRcdGNvbnRlbnRzID0gc2VsZi5jb250ZW50cygpO1xuXG5cdFx0XHRpZiAoIGNvbnRlbnRzLmxlbmd0aCApIHtcblx0XHRcdFx0Y29udGVudHMud3JhcEFsbCggaHRtbCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWxmLmFwcGVuZCggaHRtbCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHR3cmFwOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHR2YXIgaHRtbElzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCBodG1sICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGh0bWxJc0Z1bmN0aW9uID8gaHRtbC5jYWxsKCB0aGlzLCBpICkgOiBodG1sICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdHVud3JhcDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHRoaXMucGFyZW50KCBzZWxlY3RvciApLm5vdCggXCJib2R5XCIgKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLnJlcGxhY2VXaXRoKCB0aGlzLmNoaWxkTm9kZXMgKTtcblx0XHR9ICk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmhpZGRlbiA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gIWpRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSggZWxlbSApO1xufTtcbmpRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gISEoIGVsZW0ub2Zmc2V0V2lkdGggfHwgZWxlbS5vZmZzZXRIZWlnaHQgfHwgZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApO1xufTtcblxuXG5cblxualF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIgPSBmdW5jdGlvbigpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpO1xuXHR9IGNhdGNoICggZSApIHt9XG59O1xuXG52YXIgeGhyU3VjY2Vzc1N0YXR1cyA9IHtcblxuXHRcdC8vIEZpbGUgcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgY29kZSAwLCBhc3N1bWUgMjAwXG5cdFx0MDogMjAwLFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHQvLyAjMTQ1MDogc29tZXRpbWVzIElFIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDRcblx0XHQxMjIzOiAyMDRcblx0fSxcblx0eGhyU3VwcG9ydGVkID0galF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIoKTtcblxuc3VwcG9ydC5jb3JzID0gISF4aHJTdXBwb3J0ZWQgJiYgKCBcIndpdGhDcmVkZW50aWFsc1wiIGluIHhoclN1cHBvcnRlZCApO1xuc3VwcG9ydC5hamF4ID0geGhyU3VwcG9ydGVkID0gISF4aHJTdXBwb3J0ZWQ7XG5cbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0dmFyIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrO1xuXG5cdC8vIENyb3NzIGRvbWFpbiBvbmx5IGFsbG93ZWQgaWYgc3VwcG9ydGVkIHRocm91Z2ggWE1MSHR0cFJlcXVlc3Rcblx0aWYgKCBzdXBwb3J0LmNvcnMgfHwgeGhyU3VwcG9ydGVkICYmICFvcHRpb25zLmNyb3NzRG9tYWluICkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggaGVhZGVycywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHZhciBpLFxuXHRcdFx0XHRcdHhociA9IG9wdGlvbnMueGhyKCk7XG5cblx0XHRcdFx0eGhyLm9wZW4oXG5cdFx0XHRcdFx0b3B0aW9ucy50eXBlLFxuXHRcdFx0XHRcdG9wdGlvbnMudXJsLFxuXHRcdFx0XHRcdG9wdGlvbnMuYXN5bmMsXG5cdFx0XHRcdFx0b3B0aW9ucy51c2VybmFtZSxcblx0XHRcdFx0XHRvcHRpb25zLnBhc3N3b3JkXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Ly8gQXBwbHkgY3VzdG9tIGZpZWxkcyBpZiBwcm92aWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMueGhyRmllbGRzICkge1xuXHRcdFx0XHRcdGZvciAoIGkgaW4gb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0XHR4aHJbIGkgXSA9IG9wdGlvbnMueGhyRmllbGRzWyBpIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGUgbWltZSB0eXBlIGlmIG5lZWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMubWltZVR5cGUgJiYgeGhyLm92ZXJyaWRlTWltZVR5cGUgKSB7XG5cdFx0XHRcdFx0eGhyLm92ZXJyaWRlTWltZVR5cGUoIG9wdGlvbnMubWltZVR5cGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFgtUmVxdWVzdGVkLVdpdGggaGVhZGVyXG5cdFx0XHRcdC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25zIGZvciBhIHByZWZsaWdodCBhcmVcblx0XHRcdFx0Ly8gYWtpbiB0byBhIGppZ3NhdyBwdXp6bGUsIHdlIHNpbXBseSBuZXZlciBzZXQgaXQgdG8gYmUgc3VyZS5cblx0XHRcdFx0Ly8gKGl0IGNhbiBhbHdheXMgYmUgc2V0IG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMgb3IgZXZlbiB1c2luZyBhamF4U2V0dXApXG5cdFx0XHRcdC8vIEZvciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3ZpZGVkLlxuXHRcdFx0XHRpZiAoICFvcHRpb25zLmNyb3NzRG9tYWluICYmICFoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdICkge1xuXHRcdFx0XHRcdGhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gPSBcIlhNTEh0dHBSZXF1ZXN0XCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTZXQgaGVhZGVyc1xuXHRcdFx0XHRmb3IgKCBpIGluIGhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoIGksIGhlYWRlcnNbIGkgXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRjYWxsYmFjayA9IGVycm9yQ2FsbGJhY2sgPSB4aHIub25sb2FkID1cblx0XHRcdFx0XHRcdFx0XHR4aHIub25lcnJvciA9IHhoci5vbmFib3J0ID0geGhyLm9udGltZW91dCA9XG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiYWJvcnRcIiApIHtcblx0XHRcdFx0XHRcdFx0XHR4aHIuYWJvcnQoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggdHlwZSA9PT0gXCJlcnJvclwiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHQvLyBPbiBhIG1hbnVhbCBuYXRpdmUgYWJvcnQsIElFOSB0aHJvd3Ncblx0XHRcdFx0XHRcdFx0XHQvLyBlcnJvcnMgb24gYW55IHByb3BlcnR5IGFjY2VzcyB0aGF0IGlzIG5vdCByZWFkeVN0YXRlXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlb2YgeGhyLnN0YXR1cyAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCAwLCBcImVycm9yXCIgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRmlsZTogcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgMDsgc2VlICM4NjA1LCAjMTQyMDdcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHRcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyU3VjY2Vzc1N0YXR1c1sgeGhyLnN0YXR1cyBdIHx8IHhoci5zdGF0dXMsXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dCxcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHRcdC8vIElFOSBoYXMgbm8gWEhSMiBidXQgdGhyb3dzIG9uIGJpbmFyeSAodHJhYy0xMTQyNilcblx0XHRcdFx0XHRcdFx0XHRcdC8vIEZvciBYSFIyIG5vbi10ZXh0LCBsZXQgdGhlIGNhbGxlciBoYW5kbGUgaXQgKGdoLTI0OTgpXG5cdFx0XHRcdFx0XHRcdFx0XHQoIHhoci5yZXNwb25zZVR5cGUgfHwgXCJ0ZXh0XCIgKSAhPT0gXCJ0ZXh0XCIgIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgeGhyLnJlc3BvbnNlVGV4dCAhPT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgYmluYXJ5OiB4aHIucmVzcG9uc2UgfSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgdGV4dDogeGhyLnJlc3BvbnNlVGV4dCB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gTGlzdGVuIHRvIGV2ZW50c1xuXHRcdFx0XHR4aHIub25sb2FkID0gY2FsbGJhY2soKTtcblx0XHRcdFx0ZXJyb3JDYWxsYmFjayA9IHhoci5vbmVycm9yID0geGhyLm9udGltZW91dCA9IGNhbGxiYWNrKCBcImVycm9yXCIgKTtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHRcdFx0Ly8gVXNlIG9ucmVhZHlzdGF0ZWNoYW5nZSB0byByZXBsYWNlIG9uYWJvcnRcblx0XHRcdFx0Ly8gdG8gaGFuZGxlIHVuY2F1Z2h0IGFib3J0c1xuXHRcdFx0XHRpZiAoIHhoci5vbmFib3J0ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0eGhyLm9uYWJvcnQgPSBlcnJvckNhbGxiYWNrO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2hlY2sgcmVhZHlTdGF0ZSBiZWZvcmUgdGltZW91dCBhcyBpdCBjaGFuZ2VzXG5cdFx0XHRcdFx0XHRpZiAoIHhoci5yZWFkeVN0YXRlID09PSA0ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFsbG93IG9uZXJyb3IgdG8gYmUgY2FsbGVkIGZpcnN0LFxuXHRcdFx0XHRcdFx0XHQvLyBidXQgdGhhdCB3aWxsIG5vdCBoYW5kbGUgYSBuYXRpdmUgYWJvcnRcblx0XHRcdFx0XHRcdFx0Ly8gQWxzbywgc2F2ZSBlcnJvckNhbGxiYWNrIHRvIGEgdmFyaWFibGVcblx0XHRcdFx0XHRcdFx0Ly8gYXMgeGhyLm9uZXJyb3IgY2Fubm90IGJlIGFjY2Vzc2VkXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIGFib3J0IGNhbGxiYWNrXG5cdFx0XHRcdGNhbGxiYWNrID0gY2FsbGJhY2soIFwiYWJvcnRcIiApO1xuXG5cdFx0XHRcdHRyeSB7XG5cblx0XHRcdFx0XHQvLyBEbyBzZW5kIHRoZSByZXF1ZXN0ICh0aGlzIG1heSByYWlzZSBhbiBleGNlcHRpb24pXG5cdFx0XHRcdFx0eGhyLnNlbmQoIG9wdGlvbnMuaGFzQ29udGVudCAmJiBvcHRpb25zLmRhdGEgfHwgbnVsbCApO1xuXHRcdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRcdC8vICMxNDY4MzogT25seSByZXRocm93IGlmIHRoaXMgaGFzbid0IGJlZW4gbm90aWZpZWQgYXMgYW4gZXJyb3IgeWV0XG5cdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUHJldmVudCBhdXRvLWV4ZWN1dGlvbiBvZiBzY3JpcHRzIHdoZW4gbm8gZXhwbGljaXQgZGF0YVR5cGUgd2FzIHByb3ZpZGVkIChTZWUgZ2gtMjQzMilcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBmdW5jdGlvbiggcyApIHtcblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMuY29udGVudHMuc2NyaXB0ID0gZmFsc2U7XG5cdH1cbn0gKTtcblxuLy8gSW5zdGFsbCBzY3JpcHQgZGF0YVR5cGVcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0YWNjZXB0czoge1xuXHRcdHNjcmlwdDogXCJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIFwiICtcblx0XHRcdFwiYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0XCJcblx0fSxcblx0Y29udGVudHM6IHtcblx0XHRzY3JpcHQ6IC9cXGIoPzpqYXZhfGVjbWEpc2NyaXB0XFxiL1xuXHR9LFxuXHRjb252ZXJ0ZXJzOiB7XG5cdFx0XCJ0ZXh0IHNjcmlwdFwiOiBmdW5jdGlvbiggdGV4dCApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCB0ZXh0ICk7XG5cdFx0XHRyZXR1cm4gdGV4dDtcblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gSGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBjcm9zc0RvbWFpblxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY2FjaGUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRzLmNhY2hlID0gZmFsc2U7XG5cdH1cblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMudHlwZSA9IFwiR0VUXCI7XG5cdH1cbn0gKTtcblxuLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNwb3J0XG5qUXVlcnkuYWpheFRyYW5zcG9ydCggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cblx0Ly8gVGhpcyB0cmFuc3BvcnQgb25seSBkZWFscyB3aXRoIGNyb3NzIGRvbWFpbiBvciBmb3JjZWQtYnktYXR0cnMgcmVxdWVzdHNcblx0aWYgKCBzLmNyb3NzRG9tYWluIHx8IHMuc2NyaXB0QXR0cnMgKSB7XG5cdFx0dmFyIHNjcmlwdCwgY2FsbGJhY2s7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBfLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0c2NyaXB0ID0galF1ZXJ5KCBcIjxzY3JpcHQ+XCIgKVxuXHRcdFx0XHRcdC5hdHRyKCBzLnNjcmlwdEF0dHJzIHx8IHt9IClcblx0XHRcdFx0XHQucHJvcCggeyBjaGFyc2V0OiBzLnNjcmlwdENoYXJzZXQsIHNyYzogcy51cmwgfSApXG5cdFx0XHRcdFx0Lm9uKCBcImxvYWQgZXJyb3JcIiwgY2FsbGJhY2sgPSBmdW5jdGlvbiggZXZ0ICkge1xuXHRcdFx0XHRcdFx0c2NyaXB0LnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBudWxsO1xuXHRcdFx0XHRcdFx0aWYgKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCBldnQudHlwZSA9PT0gXCJlcnJvclwiID8gNDA0IDogMjAwLCBldnQudHlwZSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHQvLyBVc2UgbmF0aXZlIERPTSBtYW5pcHVsYXRpb24gdG8gYXZvaWQgb3VyIGRvbU1hbmlwIEFKQVggdHJpY2tlcnlcblx0XHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0WyAwIF0gKTtcblx0XHRcdH0sXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIG9sZENhbGxiYWNrcyA9IFtdLFxuXHRyanNvbnAgPSAvKD0pXFw/KD89JnwkKXxcXD9cXD8vO1xuXG4vLyBEZWZhdWx0IGpzb25wIHNldHRpbmdzXG5qUXVlcnkuYWpheFNldHVwKCB7XG5cdGpzb25wOiBcImNhbGxiYWNrXCIsXG5cdGpzb25wQ2FsbGJhY2s6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBjYWxsYmFjayA9IG9sZENhbGxiYWNrcy5wb3AoKSB8fCAoIGpRdWVyeS5leHBhbmRvICsgXCJfXCIgKyAoIG5vbmNlKysgKSApO1xuXHRcdHRoaXNbIGNhbGxiYWNrIF0gPSB0cnVlO1xuXHRcdHJldHVybiBjYWxsYmFjaztcblx0fVxufSApO1xuXG4vLyBEZXRlY3QsIG5vcm1hbGl6ZSBvcHRpb25zIGFuZCBpbnN0YWxsIGNhbGxiYWNrcyBmb3IganNvbnAgcmVxdWVzdHNcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcImpzb24ganNvbnBcIiwgZnVuY3Rpb24oIHMsIG9yaWdpbmFsU2V0dGluZ3MsIGpxWEhSICkge1xuXG5cdHZhciBjYWxsYmFja05hbWUsIG92ZXJ3cml0dGVuLCByZXNwb25zZUNvbnRhaW5lcixcblx0XHRqc29uUHJvcCA9IHMuanNvbnAgIT09IGZhbHNlICYmICggcmpzb25wLnRlc3QoIHMudXJsICkgP1xuXHRcdFx0XCJ1cmxcIiA6XG5cdFx0XHR0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiIClcblx0XHRcdFx0XHQuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICYmXG5cdFx0XHRcdHJqc29ucC50ZXN0KCBzLmRhdGEgKSAmJiBcImRhdGFcIlxuXHRcdCk7XG5cblx0Ly8gSGFuZGxlIGlmZiB0aGUgZXhwZWN0ZWQgZGF0YSB0eXBlIGlzIFwianNvbnBcIiBvciB3ZSBoYXZlIGEgcGFyYW1ldGVyIHRvIHNldFxuXHRpZiAoIGpzb25Qcm9wIHx8IHMuZGF0YVR5cGVzWyAwIF0gPT09IFwianNvbnBcIiApIHtcblxuXHRcdC8vIEdldCBjYWxsYmFjayBuYW1lLCByZW1lbWJlcmluZyBwcmVleGlzdGluZyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggaXRcblx0XHRjYWxsYmFja05hbWUgPSBzLmpzb25wQ2FsbGJhY2sgPSBpc0Z1bmN0aW9uKCBzLmpzb25wQ2FsbGJhY2sgKSA/XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2soKSA6XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2s7XG5cblx0XHQvLyBJbnNlcnQgY2FsbGJhY2sgaW50byB1cmwgb3IgZm9ybSBkYXRhXG5cdFx0aWYgKCBqc29uUHJvcCApIHtcblx0XHRcdHNbIGpzb25Qcm9wIF0gPSBzWyBqc29uUHJvcCBdLnJlcGxhY2UoIHJqc29ucCwgXCIkMVwiICsgY2FsbGJhY2tOYW1lICk7XG5cdFx0fSBlbHNlIGlmICggcy5qc29ucCAhPT0gZmFsc2UgKSB7XG5cdFx0XHRzLnVybCArPSAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gXCImXCIgOiBcIj9cIiApICsgcy5qc29ucCArIFwiPVwiICsgY2FsbGJhY2tOYW1lO1xuXHRcdH1cblxuXHRcdC8vIFVzZSBkYXRhIGNvbnZlcnRlciB0byByZXRyaWV2ZSBqc29uIGFmdGVyIHNjcmlwdCBleGVjdXRpb25cblx0XHRzLmNvbnZlcnRlcnNbIFwic2NyaXB0IGpzb25cIiBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoICFyZXNwb25zZUNvbnRhaW5lciApIHtcblx0XHRcdFx0alF1ZXJ5LmVycm9yKCBjYWxsYmFja05hbWUgKyBcIiB3YXMgbm90IGNhbGxlZFwiICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzcG9uc2VDb250YWluZXJbIDAgXTtcblx0XHR9O1xuXG5cdFx0Ly8gRm9yY2UganNvbiBkYXRhVHlwZVxuXHRcdHMuZGF0YVR5cGVzWyAwIF0gPSBcImpzb25cIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tcblx0XHRvdmVyd3JpdHRlbiA9IHdpbmRvd1sgY2FsbGJhY2tOYW1lIF07XG5cdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBhcmd1bWVudHM7XG5cdFx0fTtcblxuXHRcdC8vIENsZWFuLXVwIGZ1bmN0aW9uIChmaXJlcyBhZnRlciBjb252ZXJ0ZXJzKVxuXHRcdGpxWEhSLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIElmIHByZXZpb3VzIHZhbHVlIGRpZG4ndCBleGlzdCAtIHJlbW92ZSBpdFxuXHRcdFx0aWYgKCBvdmVyd3JpdHRlbiA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRqUXVlcnkoIHdpbmRvdyApLnJlbW92ZVByb3AoIGNhbGxiYWNrTmFtZSApO1xuXG5cdFx0XHQvLyBPdGhlcndpc2UgcmVzdG9yZSBwcmVleGlzdGluZyB2YWx1ZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IG92ZXJ3cml0dGVuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTYXZlIGJhY2sgYXMgZnJlZVxuXHRcdFx0aWYgKCBzWyBjYWxsYmFja05hbWUgXSApIHtcblxuXHRcdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCByZS11c2luZyB0aGUgb3B0aW9ucyBkb2Vzbid0IHNjcmV3IHRoaW5ncyBhcm91bmRcblx0XHRcdFx0cy5qc29ucENhbGxiYWNrID0gb3JpZ2luYWxTZXR0aW5ncy5qc29ucENhbGxiYWNrO1xuXG5cdFx0XHRcdC8vIFNhdmUgdGhlIGNhbGxiYWNrIG5hbWUgZm9yIGZ1dHVyZSB1c2Vcblx0XHRcdFx0b2xkQ2FsbGJhY2tzLnB1c2goIGNhbGxiYWNrTmFtZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDYWxsIGlmIGl0IHdhcyBhIGZ1bmN0aW9uIGFuZCB3ZSBoYXZlIGEgcmVzcG9uc2Vcblx0XHRcdGlmICggcmVzcG9uc2VDb250YWluZXIgJiYgaXNGdW5jdGlvbiggb3ZlcndyaXR0ZW4gKSApIHtcblx0XHRcdFx0b3ZlcndyaXR0ZW4oIHJlc3BvbnNlQ29udGFpbmVyWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBvdmVyd3JpdHRlbiA9IHVuZGVmaW5lZDtcblx0XHR9ICk7XG5cblx0XHQvLyBEZWxlZ2F0ZSB0byBzY3JpcHRcblx0XHRyZXR1cm4gXCJzY3JpcHRcIjtcblx0fVxufSApO1xuXG5cblxuXG4vLyBTdXBwb3J0OiBTYWZhcmkgOCBvbmx5XG4vLyBJbiBTYWZhcmkgOCBkb2N1bWVudHMgY3JlYXRlZCB2aWEgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50XG4vLyBjb2xsYXBzZSBzaWJsaW5nIGZvcm1zOiB0aGUgc2Vjb25kIG9uZSBiZWNvbWVzIGEgY2hpbGQgb2YgdGhlIGZpcnN0IG9uZS5cbi8vIEJlY2F1c2Ugb2YgdGhhdCwgdGhpcyBzZWN1cml0eSBtZWFzdXJlIGhhcyB0byBiZSBkaXNhYmxlZCBpbiBTYWZhcmkgOC5cbi8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzczMzdcbnN1cHBvcnQuY3JlYXRlSFRNTERvY3VtZW50ID0gKCBmdW5jdGlvbigpIHtcblx0dmFyIGJvZHkgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKS5ib2R5O1xuXHRib2R5LmlubmVySFRNTCA9IFwiPGZvcm0+PC9mb3JtPjxmb3JtPjwvZm9ybT5cIjtcblx0cmV0dXJuIGJvZHkuY2hpbGROb2Rlcy5sZW5ndGggPT09IDI7XG59ICkoKTtcblxuXG4vLyBBcmd1bWVudCBcImRhdGFcIiBzaG91bGQgYmUgc3RyaW5nIG9mIGh0bWxcbi8vIGNvbnRleHQgKG9wdGlvbmFsKTogSWYgc3BlY2lmaWVkLCB0aGUgZnJhZ21lbnQgd2lsbCBiZSBjcmVhdGVkIGluIHRoaXMgY29udGV4dCxcbi8vIGRlZmF1bHRzIHRvIGRvY3VtZW50XG4vLyBrZWVwU2NyaXB0cyAob3B0aW9uYWwpOiBJZiB0cnVlLCB3aWxsIGluY2x1ZGUgc2NyaXB0cyBwYXNzZWQgaW4gdGhlIGh0bWwgc3RyaW5nXG5qUXVlcnkucGFyc2VIVE1MID0gZnVuY3Rpb24oIGRhdGEsIGNvbnRleHQsIGtlZXBTY3JpcHRzICkge1xuXHRpZiAoIHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRrZWVwU2NyaXB0cyA9IGNvbnRleHQ7XG5cdFx0Y29udGV4dCA9IGZhbHNlO1xuXHR9XG5cblx0dmFyIGJhc2UsIHBhcnNlZCwgc2NyaXB0cztcblxuXHRpZiAoICFjb250ZXh0ICkge1xuXG5cdFx0Ly8gU3RvcCBzY3JpcHRzIG9yIGlubGluZSBldmVudCBoYW5kbGVycyBmcm9tIGJlaW5nIGV4ZWN1dGVkIGltbWVkaWF0ZWx5XG5cdFx0Ly8gYnkgdXNpbmcgZG9jdW1lbnQuaW1wbGVtZW50YXRpb25cblx0XHRpZiAoIHN1cHBvcnQuY3JlYXRlSFRNTERvY3VtZW50ICkge1xuXHRcdFx0Y29udGV4dCA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCggXCJcIiApO1xuXG5cdFx0XHQvLyBTZXQgdGhlIGJhc2UgaHJlZiBmb3IgdGhlIGNyZWF0ZWQgZG9jdW1lbnRcblx0XHRcdC8vIHNvIGFueSBwYXJzZWQgZWxlbWVudHMgd2l0aCBVUkxzXG5cdFx0XHQvLyBhcmUgYmFzZWQgb24gdGhlIGRvY3VtZW50J3MgVVJMIChnaC0yOTY1KVxuXHRcdFx0YmFzZSA9IGNvbnRleHQuY3JlYXRlRWxlbWVudCggXCJiYXNlXCIgKTtcblx0XHRcdGJhc2UuaHJlZiA9IGRvY3VtZW50LmxvY2F0aW9uLmhyZWY7XG5cdFx0XHRjb250ZXh0LmhlYWQuYXBwZW5kQ2hpbGQoIGJhc2UgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGV4dCA9IGRvY3VtZW50O1xuXHRcdH1cblx0fVxuXG5cdHBhcnNlZCA9IHJzaW5nbGVUYWcuZXhlYyggZGF0YSApO1xuXHRzY3JpcHRzID0gIWtlZXBTY3JpcHRzICYmIFtdO1xuXG5cdC8vIFNpbmdsZSB0YWdcblx0aWYgKCBwYXJzZWQgKSB7XG5cdFx0cmV0dXJuIFsgY29udGV4dC5jcmVhdGVFbGVtZW50KCBwYXJzZWRbIDEgXSApIF07XG5cdH1cblxuXHRwYXJzZWQgPSBidWlsZEZyYWdtZW50KCBbIGRhdGEgXSwgY29udGV4dCwgc2NyaXB0cyApO1xuXG5cdGlmICggc2NyaXB0cyAmJiBzY3JpcHRzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkoIHNjcmlwdHMgKS5yZW1vdmUoKTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBwYXJzZWQuY2hpbGROb2RlcyApO1xufTtcblxuXG4vKipcbiAqIExvYWQgYSB1cmwgaW50byBhIHBhZ2VcbiAqL1xualF1ZXJ5LmZuLmxvYWQgPSBmdW5jdGlvbiggdXJsLCBwYXJhbXMsIGNhbGxiYWNrICkge1xuXHR2YXIgc2VsZWN0b3IsIHR5cGUsIHJlc3BvbnNlLFxuXHRcdHNlbGYgPSB0aGlzLFxuXHRcdG9mZiA9IHVybC5pbmRleE9mKCBcIiBcIiApO1xuXG5cdGlmICggb2ZmID4gLTEgKSB7XG5cdFx0c2VsZWN0b3IgPSBzdHJpcEFuZENvbGxhcHNlKCB1cmwuc2xpY2UoIG9mZiApICk7XG5cdFx0dXJsID0gdXJsLnNsaWNlKCAwLCBvZmYgKTtcblx0fVxuXG5cdC8vIElmIGl0J3MgYSBmdW5jdGlvblxuXHRpZiAoIGlzRnVuY3Rpb24oIHBhcmFtcyApICkge1xuXG5cdFx0Ly8gV2UgYXNzdW1lIHRoYXQgaXQncyB0aGUgY2FsbGJhY2tcblx0XHRjYWxsYmFjayA9IHBhcmFtcztcblx0XHRwYXJhbXMgPSB1bmRlZmluZWQ7XG5cblx0Ly8gT3RoZXJ3aXNlLCBidWlsZCBhIHBhcmFtIHN0cmluZ1xuXHR9IGVsc2UgaWYgKCBwYXJhbXMgJiYgdHlwZW9mIHBhcmFtcyA9PT0gXCJvYmplY3RcIiApIHtcblx0XHR0eXBlID0gXCJQT1NUXCI7XG5cdH1cblxuXHQvLyBJZiB3ZSBoYXZlIGVsZW1lbnRzIHRvIG1vZGlmeSwgbWFrZSB0aGUgcmVxdWVzdFxuXHRpZiAoIHNlbGYubGVuZ3RoID4gMCApIHtcblx0XHRqUXVlcnkuYWpheCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cblx0XHRcdC8vIElmIFwidHlwZVwiIHZhcmlhYmxlIGlzIHVuZGVmaW5lZCwgdGhlbiBcIkdFVFwiIG1ldGhvZCB3aWxsIGJlIHVzZWQuXG5cdFx0XHQvLyBNYWtlIHZhbHVlIG9mIHRoaXMgZmllbGQgZXhwbGljaXQgc2luY2Vcblx0XHRcdC8vIHVzZXIgY2FuIG92ZXJyaWRlIGl0IHRocm91Z2ggYWpheFNldHVwIG1ldGhvZFxuXHRcdFx0dHlwZTogdHlwZSB8fCBcIkdFVFwiLFxuXHRcdFx0ZGF0YVR5cGU6IFwiaHRtbFwiLFxuXHRcdFx0ZGF0YTogcGFyYW1zXG5cdFx0fSApLmRvbmUoIGZ1bmN0aW9uKCByZXNwb25zZVRleHQgKSB7XG5cblx0XHRcdC8vIFNhdmUgcmVzcG9uc2UgZm9yIHVzZSBpbiBjb21wbGV0ZSBjYWxsYmFja1xuXHRcdFx0cmVzcG9uc2UgPSBhcmd1bWVudHM7XG5cblx0XHRcdHNlbGYuaHRtbCggc2VsZWN0b3IgP1xuXG5cdFx0XHRcdC8vIElmIGEgc2VsZWN0b3Igd2FzIHNwZWNpZmllZCwgbG9jYXRlIHRoZSByaWdodCBlbGVtZW50cyBpbiBhIGR1bW15IGRpdlxuXHRcdFx0XHQvLyBFeGNsdWRlIHNjcmlwdHMgdG8gYXZvaWQgSUUgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJvcnNcblx0XHRcdFx0alF1ZXJ5KCBcIjxkaXY+XCIgKS5hcHBlbmQoIGpRdWVyeS5wYXJzZUhUTUwoIHJlc3BvbnNlVGV4dCApICkuZmluZCggc2VsZWN0b3IgKSA6XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHVzZSB0aGUgZnVsbCByZXN1bHRcblx0XHRcdFx0cmVzcG9uc2VUZXh0ICk7XG5cblx0XHQvLyBJZiB0aGUgcmVxdWVzdCBzdWNjZWVkcywgdGhpcyBmdW5jdGlvbiBnZXRzIFwiZGF0YVwiLCBcInN0YXR1c1wiLCBcImpxWEhSXCJcblx0XHQvLyBidXQgdGhleSBhcmUgaWdub3JlZCBiZWNhdXNlIHJlc3BvbnNlIHdhcyBzZXQgYWJvdmUuXG5cdFx0Ly8gSWYgaXQgZmFpbHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImpxWEhSXCIsIFwic3RhdHVzXCIsIFwiZXJyb3JcIlxuXHRcdH0gKS5hbHdheXMoIGNhbGxiYWNrICYmIGZ1bmN0aW9uKCBqcVhIUiwgc3RhdHVzICkge1xuXHRcdFx0c2VsZi5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Y2FsbGJhY2suYXBwbHkoIHRoaXMsIHJlc3BvbnNlIHx8IFsganFYSFIucmVzcG9uc2VUZXh0LCBzdGF0dXMsIGpxWEhSIF0gKTtcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn07XG5cblxuXG5cbi8vIEF0dGFjaCBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgY29tbW9uIEFKQVggZXZlbnRzXG5qUXVlcnkuZWFjaCggW1xuXHRcImFqYXhTdGFydFwiLFxuXHRcImFqYXhTdG9wXCIsXG5cdFwiYWpheENvbXBsZXRlXCIsXG5cdFwiYWpheEVycm9yXCIsXG5cdFwiYWpheFN1Y2Nlc3NcIixcblx0XCJhamF4U2VuZFwiXG5dLCBmdW5jdGlvbiggaSwgdHlwZSApIHtcblx0alF1ZXJ5LmZuWyB0eXBlIF0gPSBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGUsIGZuICk7XG5cdH07XG59ICk7XG5cblxuXG5cbmpRdWVyeS5leHByLnBzZXVkb3MuYW5pbWF0ZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuIGpRdWVyeS5ncmVwKCBqUXVlcnkudGltZXJzLCBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW0gPT09IGZuLmVsZW07XG5cdH0gKS5sZW5ndGg7XG59O1xuXG5cblxuXG5qUXVlcnkub2Zmc2V0ID0ge1xuXHRzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkge1xuXHRcdHZhciBjdXJQb3NpdGlvbiwgY3VyTGVmdCwgY3VyQ1NTVG9wLCBjdXJUb3AsIGN1ck9mZnNldCwgY3VyQ1NTTGVmdCwgY2FsY3VsYXRlUG9zaXRpb24sXG5cdFx0XHRwb3NpdGlvbiA9IGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApLFxuXHRcdFx0Y3VyRWxlbSA9IGpRdWVyeSggZWxlbSApLFxuXHRcdFx0cHJvcHMgPSB7fTtcblxuXHRcdC8vIFNldCBwb3NpdGlvbiBmaXJzdCwgaW4tY2FzZSB0b3AvbGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW1cblx0XHRpZiAoIHBvc2l0aW9uID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0ZWxlbS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcblx0XHR9XG5cblx0XHRjdXJPZmZzZXQgPSBjdXJFbGVtLm9mZnNldCgpO1xuXHRcdGN1ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwidG9wXCIgKTtcblx0XHRjdXJDU1NMZWZ0ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJsZWZ0XCIgKTtcblx0XHRjYWxjdWxhdGVQb3NpdGlvbiA9ICggcG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiB8fCBwb3NpdGlvbiA9PT0gXCJmaXhlZFwiICkgJiZcblx0XHRcdCggY3VyQ1NTVG9wICsgY3VyQ1NTTGVmdCApLmluZGV4T2YoIFwiYXV0b1wiICkgPiAtMTtcblxuXHRcdC8vIE5lZWQgdG8gYmUgYWJsZSB0byBjYWxjdWxhdGUgcG9zaXRpb24gaWYgZWl0aGVyXG5cdFx0Ly8gdG9wIG9yIGxlZnQgaXMgYXV0byBhbmQgcG9zaXRpb24gaXMgZWl0aGVyIGFic29sdXRlIG9yIGZpeGVkXG5cdFx0aWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHtcblx0XHRcdGN1clBvc2l0aW9uID0gY3VyRWxlbS5wb3NpdGlvbigpO1xuXHRcdFx0Y3VyVG9wID0gY3VyUG9zaXRpb24udG9wO1xuXHRcdFx0Y3VyTGVmdCA9IGN1clBvc2l0aW9uLmxlZnQ7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyVG9wID0gcGFyc2VGbG9hdCggY3VyQ1NTVG9wICkgfHwgMDtcblx0XHRcdGN1ckxlZnQgPSBwYXJzZUZsb2F0KCBjdXJDU1NMZWZ0ICkgfHwgMDtcblx0XHR9XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIG9wdGlvbnMgKSApIHtcblxuXHRcdFx0Ly8gVXNlIGpRdWVyeS5leHRlbmQgaGVyZSB0byBhbGxvdyBtb2RpZmljYXRpb24gb2YgY29vcmRpbmF0ZXMgYXJndW1lbnQgKGdoLTE4NDgpXG5cdFx0XHRvcHRpb25zID0gb3B0aW9ucy5jYWxsKCBlbGVtLCBpLCBqUXVlcnkuZXh0ZW5kKCB7fSwgY3VyT2Zmc2V0ICkgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdGlvbnMudG9wICE9IG51bGwgKSB7XG5cdFx0XHRwcm9wcy50b3AgPSAoIG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCApICsgY3VyVG9wO1xuXHRcdH1cblx0XHRpZiAoIG9wdGlvbnMubGVmdCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMubGVmdCA9ICggb3B0aW9ucy5sZWZ0IC0gY3VyT2Zmc2V0LmxlZnQgKSArIGN1ckxlZnQ7XG5cdFx0fVxuXG5cdFx0aWYgKCBcInVzaW5nXCIgaW4gb3B0aW9ucyApIHtcblx0XHRcdG9wdGlvbnMudXNpbmcuY2FsbCggZWxlbSwgcHJvcHMgKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJFbGVtLmNzcyggcHJvcHMgKTtcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHQvLyBvZmZzZXQoKSByZWxhdGVzIGFuIGVsZW1lbnQncyBib3JkZXIgYm94IHRvIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b2Zmc2V0OiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHRcdC8vIFByZXNlcnZlIGNoYWluaW5nIGZvciBzZXR0ZXJcblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0dGhpcyA6XG5cdFx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTtcblx0XHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHZhciByZWN0LCB3aW4sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gemVyb3MgZm9yIGRpc2Nvbm5lY3RlZCBhbmQgaGlkZGVuIChkaXNwbGF5OiBub25lKSBlbGVtZW50cyAoZ2gtMjMxMClcblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhXG5cdFx0Ly8gZGlzY29ubmVjdGVkIG5vZGUgaW4gSUUgdGhyb3dzIGFuIGVycm9yXG5cdFx0aWYgKCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB7IHRvcDogMCwgbGVmdDogMCB9O1xuXHRcdH1cblxuXHRcdC8vIEdldCBkb2N1bWVudC1yZWxhdGl2ZSBwb3NpdGlvbiBieSBhZGRpbmcgdmlld3BvcnQgc2Nyb2xsIHRvIHZpZXdwb3J0LXJlbGF0aXZlIGdCQ1Jcblx0XHRyZWN0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHR3aW4gPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogcmVjdC50b3AgKyB3aW4ucGFnZVlPZmZzZXQsXG5cdFx0XHRsZWZ0OiByZWN0LmxlZnQgKyB3aW4ucGFnZVhPZmZzZXRcblx0XHR9O1xuXHR9LFxuXG5cdC8vIHBvc2l0aW9uKCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgbWFyZ2luIGJveCB0byBpdHMgb2Zmc2V0IHBhcmVudCdzIHBhZGRpbmcgYm94XG5cdC8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGJlaGF2aW9yIG9mIENTUyBhYnNvbHV0ZSBwb3NpdGlvbmluZ1xuXHRwb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCAhdGhpc1sgMCBdICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBvZmZzZXRQYXJlbnQsIG9mZnNldCwgZG9jLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdHBhcmVudE9mZnNldCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cblx0XHQvLyBwb3NpdGlvbjpmaXhlZCBlbGVtZW50cyBhcmUgb2Zmc2V0IGZyb20gdGhlIHZpZXdwb3J0LCB3aGljaCBpdHNlbGYgYWx3YXlzIGhhcyB6ZXJvIG9mZnNldFxuXHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICkgPT09IFwiZml4ZWRcIiApIHtcblxuXHRcdFx0Ly8gQXNzdW1lIHBvc2l0aW9uOmZpeGVkIGltcGxpZXMgYXZhaWxhYmlsaXR5IG9mIGdldEJvdW5kaW5nQ2xpZW50UmVjdFxuXHRcdFx0b2Zmc2V0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvZmZzZXQgPSB0aGlzLm9mZnNldCgpO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB0aGUgKnJlYWwqIG9mZnNldCBwYXJlbnQsIHdoaWNoIGNhbiBiZSB0aGUgZG9jdW1lbnQgb3IgaXRzIHJvb3QgZWxlbWVudFxuXHRcdFx0Ly8gd2hlbiBhIHN0YXRpY2FsbHkgcG9zaXRpb25lZCBlbGVtZW50IGlzIGlkZW50aWZpZWRcblx0XHRcdGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudDtcblx0XHRcdG9mZnNldFBhcmVudCA9IGVsZW0ub2Zmc2V0UGFyZW50IHx8IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJlxuXHRcdFx0XHQoIG9mZnNldFBhcmVudCA9PT0gZG9jLmJvZHkgfHwgb2Zmc2V0UGFyZW50ID09PSBkb2MuZG9jdW1lbnRFbGVtZW50ICkgJiZcblx0XHRcdFx0alF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcInBvc2l0aW9uXCIgKSA9PT0gXCJzdGF0aWNcIiApIHtcblxuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGlmICggb2Zmc2V0UGFyZW50ICYmIG9mZnNldFBhcmVudCAhPT0gZWxlbSAmJiBvZmZzZXRQYXJlbnQubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgYm9yZGVycyBpbnRvIGl0cyBvZmZzZXQsIHNpbmNlIHRoZXkgYXJlIG91dHNpZGUgaXRzIGNvbnRlbnQgb3JpZ2luXG5cdFx0XHRcdHBhcmVudE9mZnNldCA9IGpRdWVyeSggb2Zmc2V0UGFyZW50ICkub2Zmc2V0KCk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC50b3AgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlclRvcFdpZHRoXCIsIHRydWUgKTtcblx0XHRcdFx0cGFyZW50T2Zmc2V0LmxlZnQgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlckxlZnRXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU3VidHJhY3QgcGFyZW50IG9mZnNldHMgYW5kIGVsZW1lbnQgbWFyZ2luc1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IG9mZnNldC50b3AgLSBwYXJlbnRPZmZzZXQudG9wIC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5Ub3BcIiwgdHJ1ZSApLFxuXHRcdFx0bGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luTGVmdFwiLCB0cnVlIClcblx0XHR9O1xuXHR9LFxuXG5cdC8vIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGRvY3VtZW50RWxlbWVudCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuXHQvLyAxKSBGb3IgdGhlIGVsZW1lbnQgaW5zaWRlIHRoZSBpZnJhbWUgd2l0aG91dCBvZmZzZXRQYXJlbnQsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuXG5cdC8vICAgIGRvY3VtZW50RWxlbWVudCBvZiB0aGUgcGFyZW50IHdpbmRvd1xuXHQvLyAyKSBGb3IgdGhlIGhpZGRlbiBvciBkZXRhY2hlZCBlbGVtZW50XG5cdC8vIDMpIEZvciBib2R5IG9yIGh0bWwgZWxlbWVudCwgaS5lLiBpbiBjYXNlIG9mIHRoZSBodG1sIG5vZGUgLSBpdCB3aWxsIHJldHVybiBpdHNlbGZcblx0Ly9cblx0Ly8gYnV0IHRob3NlIGV4Y2VwdGlvbnMgd2VyZSBuZXZlciBwcmVzZW50ZWQgYXMgYSByZWFsIGxpZmUgdXNlLWNhc2VzXG5cdC8vIGFuZCBtaWdodCBiZSBjb25zaWRlcmVkIGFzIG1vcmUgcHJlZmVyYWJsZSByZXN1bHRzLlxuXHQvL1xuXHQvLyBUaGlzIGxvZ2ljLCBob3dldmVyLCBpcyBub3QgZ3VhcmFudGVlZCBhbmQgY2FuIGNoYW5nZSBhdCBhbnkgcG9pbnQgaW4gdGhlIGZ1dHVyZVxuXHRvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQ7XG5cblx0XHRcdHdoaWxlICggb2Zmc2V0UGFyZW50ICYmIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnRFbGVtZW50O1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG4vLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IHNjcm9sbExlZnQ6IFwicGFnZVhPZmZzZXRcIiwgc2Nyb2xsVG9wOiBcInBhZ2VZT2Zmc2V0XCIgfSwgZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHtcblx0dmFyIHRvcCA9IFwicGFnZVlPZmZzZXRcIiA9PT0gcHJvcDtcblxuXHRqUXVlcnkuZm5bIG1ldGhvZCBdID0gZnVuY3Rpb24oIHZhbCApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7XG5cblx0XHRcdC8vIENvYWxlc2NlIGRvY3VtZW50cyBhbmQgd2luZG93c1xuXHRcdFx0dmFyIHdpbjtcblx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblx0XHRcdFx0d2luID0gZWxlbTtcblx0XHRcdH0gZWxzZSBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW0uZGVmYXVsdFZpZXc7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiB3aW4gPyB3aW5bIHByb3AgXSA6IGVsZW1bIG1ldGhvZCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHdpbiApIHtcblx0XHRcdFx0d2luLnNjcm9sbFRvKFxuXHRcdFx0XHRcdCF0b3AgPyB2YWwgOiB3aW4ucGFnZVhPZmZzZXQsXG5cdFx0XHRcdFx0dG9wID8gdmFsIDogd2luLnBhZ2VZT2Zmc2V0XG5cdFx0XHRcdCk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1bIG1ldGhvZCBdID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0sIG1ldGhvZCwgdmFsLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH07XG59ICk7XG5cbi8vIFN1cHBvcnQ6IFNhZmFyaSA8PTcgLSA5LjEsIENocm9tZSA8PTM3IC0gNDlcbi8vIEFkZCB0aGUgdG9wL2xlZnQgY3NzSG9va3MgdXNpbmcgalF1ZXJ5LmZuLnBvc2l0aW9uXG4vLyBXZWJraXQgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwODRcbi8vIEJsaW5rIGJ1ZzogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NTg5MzQ3XG4vLyBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgcGVyY2VudCB3aGVuIHNwZWNpZmllZCBmb3IgdG9wL2xlZnQvYm90dG9tL3JpZ2h0O1xuLy8gcmF0aGVyIHRoYW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQgb24gdGhlIG9mZnNldCBtb2R1bGUsIGp1c3QgY2hlY2sgZm9yIGl0IGhlcmVcbmpRdWVyeS5lYWNoKCBbIFwidG9wXCIsIFwibGVmdFwiIF0sIGZ1bmN0aW9uKCBpLCBwcm9wICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIHByb3AgXSA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5waXhlbFBvc2l0aW9uLFxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGNvbXB1dGVkID0gY3VyQ1NTKCBlbGVtLCBwcm9wICk7XG5cblx0XHRcdFx0Ly8gSWYgY3VyQ1NTIHJldHVybnMgcGVyY2VudGFnZSwgZmFsbGJhY2sgdG8gb2Zmc2V0XG5cdFx0XHRcdHJldHVybiBybnVtbm9ucHgudGVzdCggY29tcHV0ZWQgKSA/XG5cdFx0XHRcdFx0alF1ZXJ5KCBlbGVtICkucG9zaXRpb24oKVsgcHJvcCBdICsgXCJweFwiIDpcblx0XHRcdFx0XHRjb21wdXRlZDtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG59ICk7XG5cblxuLy8gQ3JlYXRlIGlubmVySGVpZ2h0LCBpbm5lcldpZHRoLCBoZWlnaHQsIHdpZHRoLCBvdXRlckhlaWdodCBhbmQgb3V0ZXJXaWR0aCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBIZWlnaHQ6IFwiaGVpZ2h0XCIsIFdpZHRoOiBcIndpZHRoXCIgfSwgZnVuY3Rpb24oIG5hbWUsIHR5cGUgKSB7XG5cdGpRdWVyeS5lYWNoKCB7IHBhZGRpbmc6IFwiaW5uZXJcIiArIG5hbWUsIGNvbnRlbnQ6IHR5cGUsIFwiXCI6IFwib3V0ZXJcIiArIG5hbWUgfSxcblx0XHRmdW5jdGlvbiggZGVmYXVsdEV4dHJhLCBmdW5jTmFtZSApIHtcblxuXHRcdC8vIE1hcmdpbiBpcyBvbmx5IGZvciBvdXRlckhlaWdodCwgb3V0ZXJXaWR0aFxuXHRcdGpRdWVyeS5mblsgZnVuY05hbWUgXSA9IGZ1bmN0aW9uKCBtYXJnaW4sIHZhbHVlICkge1xuXHRcdFx0dmFyIGNoYWluYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggJiYgKCBkZWZhdWx0RXh0cmEgfHwgdHlwZW9mIG1hcmdpbiAhPT0gXCJib29sZWFuXCIgKSxcblx0XHRcdFx0ZXh0cmEgPSBkZWZhdWx0RXh0cmEgfHwgKCBtYXJnaW4gPT09IHRydWUgfHwgdmFsdWUgPT09IHRydWUgPyBcIm1hcmdpblwiIDogXCJib3JkZXJcIiApO1xuXG5cdFx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgdHlwZSwgdmFsdWUgKSB7XG5cdFx0XHRcdHZhciBkb2M7XG5cblx0XHRcdFx0aWYgKCBpc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRcdFx0Ly8gJCggd2luZG93ICkub3V0ZXJXaWR0aC9IZWlnaHQgcmV0dXJuIHcvaCBpbmNsdWRpbmcgc2Nyb2xsYmFycyAoZ2gtMTcyOSlcblx0XHRcdFx0XHRyZXR1cm4gZnVuY05hbWUuaW5kZXhPZiggXCJvdXRlclwiICkgPT09IDAgP1xuXHRcdFx0XHRcdFx0ZWxlbVsgXCJpbm5lclwiICsgbmFtZSBdIDpcblx0XHRcdFx0XHRcdGVsZW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyBcImNsaWVudFwiICsgbmFtZSBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gR2V0IGRvY3VtZW50IHdpZHRoIG9yIGhlaWdodFxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0ZG9jID0gZWxlbS5kb2N1bWVudEVsZW1lbnQ7XG5cblx0XHRcdFx0XHQvLyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0gb3Igb2Zmc2V0W1dpZHRoL0hlaWdodF0gb3IgY2xpZW50W1dpZHRoL0hlaWdodF0sXG5cdFx0XHRcdFx0Ly8gd2hpY2hldmVyIGlzIGdyZWF0ZXN0XG5cdFx0XHRcdFx0cmV0dXJuIE1hdGgubWF4KFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcInNjcm9sbFwiICsgbmFtZSBdLCBkb2NbIFwic2Nyb2xsXCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwib2Zmc2V0XCIgKyBuYW1lIF0sIGRvY1sgXCJvZmZzZXRcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGRvY1sgXCJjbGllbnRcIiArIG5hbWUgXVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cblx0XHRcdFx0XHQvLyBHZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50LCByZXF1ZXN0aW5nIGJ1dCBub3QgZm9yY2luZyBwYXJzZUZsb2F0XG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgZXh0cmEgKSA6XG5cblx0XHRcdFx0XHQvLyBTZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50XG5cdFx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCB0eXBlLCB2YWx1ZSwgZXh0cmEgKTtcblx0XHRcdH0sIHR5cGUsIGNoYWluYWJsZSA/IG1hcmdpbiA6IHVuZGVmaW5lZCwgY2hhaW5hYmxlICk7XG5cdFx0fTtcblx0fSApO1xufSApO1xuXG5cbmpRdWVyeS5lYWNoKCAoIFwiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgXCIgK1xuXHRcIm1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIFwiICtcblx0XCJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51XCIgKS5zcGxpdCggXCIgXCIgKSxcblx0ZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cblx0Ly8gSGFuZGxlIGV2ZW50IGJpbmRpbmdcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID9cblx0XHRcdHRoaXMub24oIG5hbWUsIG51bGwsIGRhdGEsIGZuICkgOlxuXHRcdFx0dGhpcy50cmlnZ2VyKCBuYW1lICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0aG92ZXI6IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkge1xuXHRcdHJldHVybiB0aGlzLm1vdXNlZW50ZXIoIGZuT3ZlciApLm1vdXNlbGVhdmUoIGZuT3V0IHx8IGZuT3ZlciApO1xuXHR9XG59ICk7XG5cblxuXG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHRiaW5kOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgbnVsbCwgZGF0YSwgZm4gKTtcblx0fSxcblx0dW5iaW5kOiBmdW5jdGlvbiggdHlwZXMsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9mZiggdHlwZXMsIG51bGwsIGZuICk7XG5cdH0sXG5cblx0ZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGZuICkge1xuXG5cdFx0Ly8gKCBuYW1lc3BhY2UgKSBvciAoIHNlbGVjdG9yLCB0eXBlcyBbLCBmbl0gKVxuXHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID9cblx0XHRcdHRoaXMub2ZmKCBzZWxlY3RvciwgXCIqKlwiICkgOlxuXHRcdFx0dGhpcy5vZmYoIHR5cGVzLCBzZWxlY3RvciB8fCBcIioqXCIsIGZuICk7XG5cdH1cbn0gKTtcblxuLy8gQmluZCBhIGZ1bmN0aW9uIHRvIGEgY29udGV4dCwgb3B0aW9uYWxseSBwYXJ0aWFsbHkgYXBwbHlpbmcgYW55XG4vLyBhcmd1bWVudHMuXG4vLyBqUXVlcnkucHJveHkgaXMgZGVwcmVjYXRlZCB0byBwcm9tb3RlIHN0YW5kYXJkcyAoc3BlY2lmaWNhbGx5IEZ1bmN0aW9uI2JpbmQpXG4vLyBIb3dldmVyLCBpdCBpcyBub3Qgc2xhdGVkIGZvciByZW1vdmFsIGFueSB0aW1lIHNvb25cbmpRdWVyeS5wcm94eSA9IGZ1bmN0aW9uKCBmbiwgY29udGV4dCApIHtcblx0dmFyIHRtcCwgYXJncywgcHJveHk7XG5cblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHR0bXAgPSBmblsgY29udGV4dCBdO1xuXHRcdGNvbnRleHQgPSBmbjtcblx0XHRmbiA9IHRtcDtcblx0fVxuXG5cdC8vIFF1aWNrIGNoZWNrIHRvIGRldGVybWluZSBpZiB0YXJnZXQgaXMgY2FsbGFibGUsIGluIHRoZSBzcGVjXG5cdC8vIHRoaXMgdGhyb3dzIGEgVHlwZUVycm9yLCBidXQgd2Ugd2lsbCBqdXN0IHJldHVybiB1bmRlZmluZWQuXG5cdGlmICggIWlzRnVuY3Rpb24oIGZuICkgKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8vIFNpbXVsYXRlZCBiaW5kXG5cdGFyZ3MgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMsIDIgKTtcblx0cHJveHkgPSBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZm4uYXBwbHkoIGNvbnRleHQgfHwgdGhpcywgYXJncy5jb25jYXQoIHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApICkgKTtcblx0fTtcblxuXHQvLyBTZXQgdGhlIGd1aWQgb2YgdW5pcXVlIGhhbmRsZXIgdG8gdGhlIHNhbWUgb2Ygb3JpZ2luYWwgaGFuZGxlciwgc28gaXQgY2FuIGJlIHJlbW92ZWRcblx0cHJveHkuZ3VpZCA9IGZuLmd1aWQgPSBmbi5ndWlkIHx8IGpRdWVyeS5ndWlkKys7XG5cblx0cmV0dXJuIHByb3h5O1xufTtcblxualF1ZXJ5LmhvbGRSZWFkeSA9IGZ1bmN0aW9uKCBob2xkICkge1xuXHRpZiAoIGhvbGQgKSB7XG5cdFx0alF1ZXJ5LnJlYWR5V2FpdCsrO1xuXHR9IGVsc2Uge1xuXHRcdGpRdWVyeS5yZWFkeSggdHJ1ZSApO1xuXHR9XG59O1xualF1ZXJ5LmlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xualF1ZXJ5LnBhcnNlSlNPTiA9IEpTT04ucGFyc2U7XG5qUXVlcnkubm9kZU5hbWUgPSBub2RlTmFtZTtcbmpRdWVyeS5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcbmpRdWVyeS5pc1dpbmRvdyA9IGlzV2luZG93O1xualF1ZXJ5LmNhbWVsQ2FzZSA9IGNhbWVsQ2FzZTtcbmpRdWVyeS50eXBlID0gdG9UeXBlO1xuXG5qUXVlcnkubm93ID0gRGF0ZS5ub3c7XG5cbmpRdWVyeS5pc051bWVyaWMgPSBmdW5jdGlvbiggb2JqICkge1xuXG5cdC8vIEFzIG9mIGpRdWVyeSAzLjAsIGlzTnVtZXJpYyBpcyBsaW1pdGVkIHRvXG5cdC8vIHN0cmluZ3MgYW5kIG51bWJlcnMgKHByaW1pdGl2ZXMgb3Igb2JqZWN0cylcblx0Ly8gdGhhdCBjYW4gYmUgY29lcmNlZCB0byBmaW5pdGUgbnVtYmVycyAoZ2gtMjY2Milcblx0dmFyIHR5cGUgPSBqUXVlcnkudHlwZSggb2JqICk7XG5cdHJldHVybiAoIHR5cGUgPT09IFwibnVtYmVyXCIgfHwgdHlwZSA9PT0gXCJzdHJpbmdcIiApICYmXG5cblx0XHQvLyBwYXJzZUZsb2F0IE5hTnMgbnVtZXJpYy1jYXN0IGZhbHNlIHBvc2l0aXZlcyAoXCJcIilcblx0XHQvLyAuLi5idXQgbWlzaW50ZXJwcmV0cyBsZWFkaW5nLW51bWJlciBzdHJpbmdzLCBwYXJ0aWN1bGFybHkgaGV4IGxpdGVyYWxzIChcIjB4Li4uXCIpXG5cdFx0Ly8gc3VidHJhY3Rpb24gZm9yY2VzIGluZmluaXRpZXMgdG8gTmFOXG5cdFx0IWlzTmFOKCBvYmogLSBwYXJzZUZsb2F0KCBvYmogKSApO1xufTtcblxuXG5cblxuLy8gUmVnaXN0ZXIgYXMgYSBuYW1lZCBBTUQgbW9kdWxlLCBzaW5jZSBqUXVlcnkgY2FuIGJlIGNvbmNhdGVuYXRlZCB3aXRoIG90aGVyXG4vLyBmaWxlcyB0aGF0IG1heSB1c2UgZGVmaW5lLCBidXQgbm90IHZpYSBhIHByb3BlciBjb25jYXRlbmF0aW9uIHNjcmlwdCB0aGF0XG4vLyB1bmRlcnN0YW5kcyBhbm9ueW1vdXMgQU1EIG1vZHVsZXMuIEEgbmFtZWQgQU1EIGlzIHNhZmVzdCBhbmQgbW9zdCByb2J1c3Rcbi8vIHdheSB0byByZWdpc3Rlci4gTG93ZXJjYXNlIGpxdWVyeSBpcyB1c2VkIGJlY2F1c2UgQU1EIG1vZHVsZSBuYW1lcyBhcmVcbi8vIGRlcml2ZWQgZnJvbSBmaWxlIG5hbWVzLCBhbmQgalF1ZXJ5IGlzIG5vcm1hbGx5IGRlbGl2ZXJlZCBpbiBhIGxvd2VyY2FzZVxuLy8gZmlsZSBuYW1lLiBEbyB0aGlzIGFmdGVyIGNyZWF0aW5nIHRoZSBnbG9iYWwgc28gdGhhdCBpZiBhbiBBTUQgbW9kdWxlIHdhbnRzXG4vLyB0byBjYWxsIG5vQ29uZmxpY3QgdG8gaGlkZSB0aGlzIHZlcnNpb24gb2YgalF1ZXJ5LCBpdCB3aWxsIHdvcmsuXG5cbi8vIE5vdGUgdGhhdCBmb3IgbWF4aW11bSBwb3J0YWJpbGl0eSwgbGlicmFyaWVzIHRoYXQgYXJlIG5vdCBqUXVlcnkgc2hvdWxkXG4vLyBkZWNsYXJlIHRoZW1zZWx2ZXMgYXMgYW5vbnltb3VzIG1vZHVsZXMsIGFuZCBhdm9pZCBzZXR0aW5nIGEgZ2xvYmFsIGlmIGFuXG4vLyBBTUQgbG9hZGVyIGlzIHByZXNlbnQuIGpRdWVyeSBpcyBhIHNwZWNpYWwgY2FzZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2pyYnVya2UvcmVxdWlyZWpzL3dpa2kvVXBkYXRpbmctZXhpc3RpbmctbGlicmFyaWVzI3dpa2ktYW5vblxuXG5pZiAoIHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kICkge1xuXHRkZWZpbmUoIFwianF1ZXJ5XCIsIFtdLCBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4galF1ZXJ5O1xuXHR9ICk7XG59XG5cblxuXG5cbnZhclxuXG5cdC8vIE1hcCBvdmVyIGpRdWVyeSBpbiBjYXNlIG9mIG92ZXJ3cml0ZVxuXHRfalF1ZXJ5ID0gd2luZG93LmpRdWVyeSxcblxuXHQvLyBNYXAgb3ZlciB0aGUgJCBpbiBjYXNlIG9mIG92ZXJ3cml0ZVxuXHRfJCA9IHdpbmRvdy4kO1xuXG5qUXVlcnkubm9Db25mbGljdCA9IGZ1bmN0aW9uKCBkZWVwICkge1xuXHRpZiAoIHdpbmRvdy4kID09PSBqUXVlcnkgKSB7XG5cdFx0d2luZG93LiQgPSBfJDtcblx0fVxuXG5cdGlmICggZGVlcCAmJiB3aW5kb3cualF1ZXJ5ID09PSBqUXVlcnkgKSB7XG5cdFx0d2luZG93LmpRdWVyeSA9IF9qUXVlcnk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5O1xufTtcblxuLy8gRXhwb3NlIGpRdWVyeSBhbmQgJCBpZGVudGlmaWVycywgZXZlbiBpbiBBTURcbi8vICgjNzEwMiNjb21tZW50OjEwLCBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9wdWxsLzU1Nylcbi8vIGFuZCBDb21tb25KUyBmb3IgYnJvd3NlciBlbXVsYXRvcnMgKCMxMzU2NilcbmlmICggIW5vR2xvYmFsICkge1xuXHR3aW5kb3cualF1ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7XG59XG5cblxuXG5cbnJldHVybiBqUXVlcnk7XG59ICk7XG4iLCIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJrYXRleFwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJrYXRleFwiXSA9IGZhY3RvcnkoKTtcbn0pKCh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdGhpcyksIGZ1bmN0aW9uKCkge1xucmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMSk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIChbXG4vKiAwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuXG4vKioqLyB9KSxcbi8qIDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9zcmMva2F0ZXgubGVzc1xudmFyIGthdGV4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvU291cmNlTG9jYXRpb24uanNcbi8qKlxuICogTGV4aW5nIG9yIHBhcnNpbmcgcG9zaXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgZXJyb3IgcmVwb3J0aW5nLlxuICogVGhpcyBvYmplY3QgaXMgaW1tdXRhYmxlLlxuICovXG52YXIgU291cmNlTG9jYXRpb24gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICAvLyBUaGUgKyBwcmVmaXggaW5kaWNhdGVzIHRoYXQgdGhlc2UgZmllbGRzIGFyZW4ndCB3cml0ZWFibGVcbiAgLy8gTGV4ZXIgaG9sZGluZyB0aGUgaW5wdXQgc3RyaW5nLlxuICAvLyBTdGFydCBvZmZzZXQsIHplcm8tYmFzZWQgaW5jbHVzaXZlLlxuICAvLyBFbmQgb2Zmc2V0LCB6ZXJvLWJhc2VkIGV4Y2x1c2l2ZS5cbiAgZnVuY3Rpb24gU291cmNlTG9jYXRpb24obGV4ZXIsIHN0YXJ0LCBlbmQpIHtcbiAgICB0aGlzLmxleGVyID0gdm9pZCAwO1xuICAgIHRoaXMuc3RhcnQgPSB2b2lkIDA7XG4gICAgdGhpcy5lbmQgPSB2b2lkIDA7XG4gICAgdGhpcy5sZXhlciA9IGxleGVyO1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuICAvKipcbiAgICogTWVyZ2VzIHR3byBgU291cmNlTG9jYXRpb25gcyBmcm9tIGxvY2F0aW9uIHByb3ZpZGVycywgZ2l2ZW4gdGhleSBhcmVcbiAgICogcHJvdmlkZWQgaW4gb3JkZXIgb2YgYXBwZWFyYW5jZS5cbiAgICogLSBSZXR1cm5zIHRoZSBmaXJzdCBvbmUncyBsb2NhdGlvbiBpZiBvbmx5IHRoZSBmaXJzdCBpcyBwcm92aWRlZC5cbiAgICogLSBSZXR1cm5zIGEgbWVyZ2VkIHJhbmdlIG9mIHRoZSBmaXJzdCBhbmQgdGhlIGxhc3QgaWYgYm90aCBhcmUgcHJvdmlkZWRcbiAgICogICBhbmQgdGhlaXIgbGV4ZXJzIG1hdGNoLlxuICAgKiAtIE90aGVyd2lzZSwgcmV0dXJucyBudWxsLlxuICAgKi9cblxuXG4gIFNvdXJjZUxvY2F0aW9uLnJhbmdlID0gZnVuY3Rpb24gcmFuZ2UoZmlyc3QsIHNlY29uZCkge1xuICAgIGlmICghc2Vjb25kKSB7XG4gICAgICByZXR1cm4gZmlyc3QgJiYgZmlyc3QubG9jO1xuICAgIH0gZWxzZSBpZiAoIWZpcnN0IHx8ICFmaXJzdC5sb2MgfHwgIXNlY29uZC5sb2MgfHwgZmlyc3QubG9jLmxleGVyICE9PSBzZWNvbmQubG9jLmxleGVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBTb3VyY2VMb2NhdGlvbihmaXJzdC5sb2MubGV4ZXIsIGZpcnN0LmxvYy5zdGFydCwgc2Vjb25kLmxvYy5lbmQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gU291cmNlTG9jYXRpb247XG59KCk7XG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvVG9rZW4uanNcblxuLyoqXG4gKiBJbnRlcmZhY2UgcmVxdWlyZWQgdG8gYnJlYWsgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuIFRva2VuLCBMZXhlciwgYW5kXG4gKiBQYXJzZUVycm9yLlxuICovXG5cbi8qKlxuICogVGhlIHJlc3VsdGluZyB0b2tlbiByZXR1cm5lZCBmcm9tIGBsZXhgLlxuICpcbiAqIEl0IGNvbnNpc3RzIG9mIHRoZSB0b2tlbiB0ZXh0IHBsdXMgc29tZSBwb3NpdGlvbiBpbmZvcm1hdGlvbi5cbiAqIFRoZSBwb3NpdGlvbiBpbmZvcm1hdGlvbiBpcyBlc3NlbnRpYWxseSBhIHJhbmdlIGluIGFuIGlucHV0IHN0cmluZyxcbiAqIGJ1dCBpbnN0ZWFkIG9mIHJlZmVyZW5jaW5nIHRoZSBiYXJlIGlucHV0IHN0cmluZywgd2UgcmVmZXIgdG8gdGhlIGxleGVyLlxuICogVGhhdCB3YXkgaXQgaXMgcG9zc2libGUgdG8gYXR0YWNoIGV4dHJhIG1ldGFkYXRhIHRvIHRoZSBpbnB1dCBzdHJpbmcsXG4gKiBsaWtlIGZvciBleGFtcGxlIGEgZmlsZSBuYW1lIG9yIHNpbWlsYXIuXG4gKlxuICogVGhlIHBvc2l0aW9uIGluZm9ybWF0aW9uIGlzIG9wdGlvbmFsLCBzbyBpdCBpcyBPSyB0byBjb25zdHJ1Y3Qgc3ludGhldGljXG4gKiB0b2tlbnMgaWYgYXBwcm9wcmlhdGUuIE5vdCBwcm92aWRpbmcgYXZhaWxhYmxlIHBvc2l0aW9uIGluZm9ybWF0aW9uIG1heVxuICogbGVhZCB0byBkZWdyYWRlZCBlcnJvciByZXBvcnRpbmcsIHRob3VnaC5cbiAqL1xudmFyIFRva2VuX1Rva2VuID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVG9rZW4odGV4dCwgLy8gdGhlIHRleHQgb2YgdGhpcyB0b2tlblxuICBsb2MpIHtcbiAgICB0aGlzLnRleHQgPSB2b2lkIDA7XG4gICAgdGhpcy5sb2MgPSB2b2lkIDA7XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICB0aGlzLmxvYyA9IGxvYztcbiAgfVxuICAvKipcbiAgICogR2l2ZW4gYSBwYWlyIG9mIHRva2VucyAodGhpcyBhbmQgZW5kVG9rZW4pLCBjb21wdXRlIGEgYFRva2VuYCBlbmNvbXBhc3NpbmdcbiAgICogdGhlIHdob2xlIGlucHV0IHJhbmdlIGVuY2xvc2VkIGJ5IHRoZXNlIHR3by5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gVG9rZW4ucHJvdG90eXBlO1xuXG4gIF9wcm90by5yYW5nZSA9IGZ1bmN0aW9uIHJhbmdlKGVuZFRva2VuLCAvLyBsYXN0IHRva2VuIG9mIHRoZSByYW5nZSwgaW5jbHVzaXZlXG4gIHRleHQpIC8vIHRoZSB0ZXh0IG9mIHRoZSBuZXdseSBjb25zdHJ1Y3RlZCB0b2tlblxuICB7XG4gICAgcmV0dXJuIG5ldyBUb2tlbih0ZXh0LCBTb3VyY2VMb2NhdGlvbi5yYW5nZSh0aGlzLCBlbmRUb2tlbikpO1xuICB9O1xuXG4gIHJldHVybiBUb2tlbjtcbn0oKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1BhcnNlRXJyb3IuanNcblxuXG4vKipcbiAqIFRoaXMgaXMgdGhlIFBhcnNlRXJyb3IgY2xhc3MsIHdoaWNoIGlzIHRoZSBtYWluIGVycm9yIHRocm93biBieSBLYVRlWFxuICogZnVuY3Rpb25zIHdoZW4gc29tZXRoaW5nIGhhcyBnb25lIHdyb25nLiBUaGlzIGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggaW50ZXJuYWxcbiAqIGVycm9ycyBmcm9tIGVycm9ycyBpbiB0aGUgZXhwcmVzc2lvbiB0aGF0IHRoZSB1c2VyIHByb3ZpZGVkLlxuICpcbiAqIElmIHBvc3NpYmxlLCBhIGNhbGxlciBzaG91bGQgcHJvdmlkZSBhIFRva2VuIG9yIFBhcnNlTm9kZSB3aXRoIGluZm9ybWF0aW9uXG4gKiBhYm91dCB3aGVyZSBpbiB0aGUgc291cmNlIHN0cmluZyB0aGUgcHJvYmxlbSBvY2N1cnJlZC5cbiAqL1xudmFyIFBhcnNlRXJyb3IgPSAvLyBFcnJvciBwb3NpdGlvbiBiYXNlZCBvbiBwYXNzZWQtaW4gVG9rZW4gb3IgUGFyc2VOb2RlLlxuZnVuY3Rpb24gUGFyc2VFcnJvcihtZXNzYWdlLCAvLyBUaGUgZXJyb3IgbWVzc2FnZVxudG9rZW4pIC8vIEFuIG9iamVjdCBwcm92aWRpbmcgcG9zaXRpb24gaW5mb3JtYXRpb25cbntcbiAgdGhpcy5wb3NpdGlvbiA9IHZvaWQgMDtcbiAgdmFyIGVycm9yID0gXCJLYVRlWCBwYXJzZSBlcnJvcjogXCIgKyBtZXNzYWdlO1xuICB2YXIgc3RhcnQ7XG4gIHZhciBsb2MgPSB0b2tlbiAmJiB0b2tlbi5sb2M7XG5cbiAgaWYgKGxvYyAmJiBsb2Muc3RhcnQgPD0gbG9jLmVuZCkge1xuICAgIC8vIElmIHdlIGhhdmUgdGhlIGlucHV0IGFuZCBhIHBvc2l0aW9uLCBtYWtlIHRoZSBlcnJvciBhIGJpdCBmYW5jaWVyXG4gICAgLy8gR2V0IHRoZSBpbnB1dFxuICAgIHZhciBpbnB1dCA9IGxvYy5sZXhlci5pbnB1dDsgLy8gUHJlcGVuZCBzb21lIGluZm9ybWF0aW9uXG5cbiAgICBzdGFydCA9IGxvYy5zdGFydDtcbiAgICB2YXIgZW5kID0gbG9jLmVuZDtcblxuICAgIGlmIChzdGFydCA9PT0gaW5wdXQubGVuZ3RoKSB7XG4gICAgICBlcnJvciArPSBcIiBhdCBlbmQgb2YgaW5wdXQ6IFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvciArPSBcIiBhdCBwb3NpdGlvbiBcIiArIChzdGFydCArIDEpICsgXCI6IFwiO1xuICAgIH0gLy8gVW5kZXJsaW5lIHRva2VuIGluIHF1ZXN0aW9uIHVzaW5nIGNvbWJpbmluZyB1bmRlcnNjb3Jlc1xuXG5cbiAgICB2YXIgdW5kZXJsaW5lZCA9IGlucHV0LnNsaWNlKHN0YXJ0LCBlbmQpLnJlcGxhY2UoL1teXS9nLCBcIiQmXFx1MDMzMlwiKTsgLy8gRXh0cmFjdCBzb21lIGNvbnRleHQgZnJvbSB0aGUgaW5wdXQgYW5kIGFkZCBpdCB0byB0aGUgZXJyb3JcblxuICAgIHZhciBsZWZ0O1xuXG4gICAgaWYgKHN0YXJ0ID4gMTUpIHtcbiAgICAgIGxlZnQgPSBcIuKAplwiICsgaW5wdXQuc2xpY2Uoc3RhcnQgLSAxNSwgc3RhcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZWZ0ID0gaW5wdXQuc2xpY2UoMCwgc3RhcnQpO1xuICAgIH1cblxuICAgIHZhciByaWdodDtcblxuICAgIGlmIChlbmQgKyAxNSA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgcmlnaHQgPSBpbnB1dC5zbGljZShlbmQsIGVuZCArIDE1KSArIFwi4oCmXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJpZ2h0ID0gaW5wdXQuc2xpY2UoZW5kKTtcbiAgICB9XG5cbiAgICBlcnJvciArPSBsZWZ0ICsgdW5kZXJsaW5lZCArIHJpZ2h0O1xuICB9IC8vIFNvbWUgaGFja2VyeSB0byBtYWtlIFBhcnNlRXJyb3IgYSBwcm90b3R5cGUgb2YgRXJyb3JcbiAgLy8gU2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzg0NjA3NTNcblxuXG4gIHZhciBzZWxmID0gbmV3IEVycm9yKGVycm9yKTtcbiAgc2VsZi5uYW1lID0gXCJQYXJzZUVycm9yXCI7IC8vICRGbG93Rml4TWVcblxuICBzZWxmLl9fcHJvdG9fXyA9IFBhcnNlRXJyb3IucHJvdG90eXBlOyAvLyAkRmxvd0ZpeE1lXG5cbiAgc2VsZi5wb3NpdGlvbiA9IHN0YXJ0O1xuICByZXR1cm4gc2VsZjtcbn07IC8vICRGbG93Rml4TWUgTW9yZSBoYWNrZXJ5XG5cblxuUGFyc2VFcnJvci5wcm90b3R5cGUuX19wcm90b19fID0gRXJyb3IucHJvdG90eXBlO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX1BhcnNlRXJyb3IgPSAoUGFyc2VFcnJvcik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy91dGlscy5qc1xuLyoqXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgYSBsaXN0IG9mIHV0aWxpdHkgZnVuY3Rpb25zIHdoaWNoIGFyZSB1c2VmdWwgaW4gb3RoZXJcbiAqIGZpbGVzLlxuICovXG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgYW4gZWxlbWVudCBpcyBjb250YWluZWQgaW4gYSBsaXN0XG4gKi9cbnZhciBjb250YWlucyA9IGZ1bmN0aW9uIGNvbnRhaW5zKGxpc3QsIGVsZW0pIHtcbiAgcmV0dXJuIGxpc3QuaW5kZXhPZihlbGVtKSAhPT0gLTE7XG59O1xuLyoqXG4gKiBQcm92aWRlIGEgZGVmYXVsdCB2YWx1ZSBpZiBhIHNldHRpbmcgaXMgdW5kZWZpbmVkXG4gKiBOT1RFOiBDb3VsZG4ndCB1c2UgYFRgIGFzIHRoZSBvdXRwdXQgdHlwZSBkdWUgdG8gZmFjZWJvb2svZmxvdyM1MDIyLlxuICovXG5cblxudmFyIGRlZmx0ID0gZnVuY3Rpb24gZGVmbHQoc2V0dGluZywgZGVmYXVsdElmVW5kZWZpbmVkKSB7XG4gIHJldHVybiBzZXR0aW5nID09PSB1bmRlZmluZWQgPyBkZWZhdWx0SWZVbmRlZmluZWQgOiBzZXR0aW5nO1xufTsgLy8gaHlwaGVuYXRlIGFuZCBlc2NhcGUgYWRhcHRlZCBmcm9tIEZhY2Vib29rJ3MgUmVhY3QgdW5kZXIgQXBhY2hlIDIgbGljZW5zZVxuXG5cbnZhciB1cHBlcmNhc2UgPSAvKFtBLVpdKS9nO1xuXG52YXIgaHlwaGVuYXRlID0gZnVuY3Rpb24gaHlwaGVuYXRlKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UodXBwZXJjYXNlLCBcIi0kMVwiKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIEVTQ0FQRV9MT09LVVAgPSB7XG4gIFwiJlwiOiBcIiZhbXA7XCIsXG4gIFwiPlwiOiBcIiZndDtcIixcbiAgXCI8XCI6IFwiJmx0O1wiLFxuICBcIlxcXCJcIjogXCImcXVvdDtcIixcbiAgXCInXCI6IFwiJiN4Mjc7XCJcbn07XG52YXIgRVNDQVBFX1JFR0VYID0gL1smPjxcIiddL2c7XG4vKipcbiAqIEVzY2FwZXMgdGV4dCB0byBwcmV2ZW50IHNjcmlwdGluZyBhdHRhY2tzLlxuICovXG5cbmZ1bmN0aW9uIHV0aWxzX2VzY2FwZSh0ZXh0KSB7XG4gIHJldHVybiBTdHJpbmcodGV4dCkucmVwbGFjZShFU0NBUEVfUkVHRVgsIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIHJldHVybiBFU0NBUEVfTE9PS1VQW21hdGNoXTtcbiAgfSk7XG59XG4vKipcbiAqIFNvbWV0aW1lcyB3ZSB3YW50IHRvIHB1bGwgb3V0IHRoZSBpbm5lcm1vc3QgZWxlbWVudCBvZiBhIGdyb3VwLiBJbiBtb3N0XG4gKiBjYXNlcywgdGhpcyB3aWxsIGp1c3QgYmUgdGhlIGdyb3VwIGl0c2VsZiwgYnV0IHdoZW4gb3JkZ3JvdXBzIGFuZCBjb2xvcnMgaGF2ZVxuICogYSBzaW5nbGUgZWxlbWVudCwgd2Ugd2FudCB0byBwdWxsIHRoYXQgb3V0LlxuICovXG5cblxudmFyIGdldEJhc2VFbGVtID0gZnVuY3Rpb24gZ2V0QmFzZUVsZW0oZ3JvdXApIHtcbiAgaWYgKGdyb3VwLnR5cGUgPT09IFwib3JkZ3JvdXBcIikge1xuICAgIGlmIChncm91cC5ib2R5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGdldEJhc2VFbGVtKGdyb3VwLmJvZHlbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGdyb3VwLnR5cGUgPT09IFwiY29sb3JcIikge1xuICAgIGlmIChncm91cC5ib2R5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGdldEJhc2VFbGVtKGdyb3VwLmJvZHlbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGdyb3VwLnR5cGUgPT09IFwiZm9udFwiKSB7XG4gICAgcmV0dXJuIGdldEJhc2VFbGVtKGdyb3VwLmJvZHkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBncm91cDtcbiAgfVxufTtcbi8qKlxuICogVGVYYm9vayBhbGdvcml0aG1zIG9mdGVuIHJlZmVyZW5jZSBcImNoYXJhY3RlciBib3hlc1wiLCB3aGljaCBhcmUgc2ltcGx5IGdyb3Vwc1xuICogd2l0aCBhIHNpbmdsZSBjaGFyYWN0ZXIgaW4gdGhlbS4gVG8gZGVjaWRlIGlmIHNvbWV0aGluZyBpcyBhIGNoYXJhY3RlciBib3gsXG4gKiB3ZSBmaW5kIGl0cyBpbm5lcm1vc3QgZ3JvdXAsIGFuZCBzZWUgaWYgaXQgaXMgYSBzaW5nbGUgY2hhcmFjdGVyLlxuICovXG5cblxudmFyIHV0aWxzX2lzQ2hhcmFjdGVyQm94ID0gZnVuY3Rpb24gaXNDaGFyYWN0ZXJCb3goZ3JvdXApIHtcbiAgdmFyIGJhc2VFbGVtID0gZ2V0QmFzZUVsZW0oZ3JvdXApOyAvLyBUaGVzZSBhcmUgYWxsIHRoZXkgdHlwZXMgb2YgZ3JvdXBzIHdoaWNoIGhvbGQgc2luZ2xlIGNoYXJhY3RlcnNcblxuICByZXR1cm4gYmFzZUVsZW0udHlwZSA9PT0gXCJtYXRob3JkXCIgfHwgYmFzZUVsZW0udHlwZSA9PT0gXCJ0ZXh0b3JkXCIgfHwgYmFzZUVsZW0udHlwZSA9PT0gXCJhdG9tXCI7XG59O1xuXG52YXIgYXNzZXJ0ID0gZnVuY3Rpb24gYXNzZXJ0KHZhbHVlKSB7XG4gIGlmICghdmFsdWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIG5vbi1udWxsLCBidXQgZ290ICcgKyBTdHJpbmcodmFsdWUpKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG4vKipcbiAqIFJldHVybiB0aGUgcHJvdG9jb2wgb2YgYSBVUkwsIG9yIFwiX3JlbGF0aXZlXCIgaWYgdGhlIFVSTCBkb2VzIG5vdCBzcGVjaWZ5IGFcbiAqIHByb3RvY29sIChhbmQgdGh1cyBpcyByZWxhdGl2ZSkuXG4gKi9cblxudmFyIHByb3RvY29sRnJvbVVybCA9IGZ1bmN0aW9uIHByb3RvY29sRnJvbVVybCh1cmwpIHtcbiAgdmFyIHByb3RvY29sID0gL15cXHMqKFteXFxcXC8jXSo/KSg/Ojp8JiMwKjU4fCYjeDAqM2EpL2kuZXhlYyh1cmwpO1xuICByZXR1cm4gcHJvdG9jb2wgIT0gbnVsbCA/IHByb3RvY29sWzFdIDogXCJfcmVsYXRpdmVcIjtcbn07XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB1dGlscyA9ICh7XG4gIGNvbnRhaW5zOiBjb250YWlucyxcbiAgZGVmbHQ6IGRlZmx0LFxuICBlc2NhcGU6IHV0aWxzX2VzY2FwZSxcbiAgaHlwaGVuYXRlOiBoeXBoZW5hdGUsXG4gIGdldEJhc2VFbGVtOiBnZXRCYXNlRWxlbSxcbiAgaXNDaGFyYWN0ZXJCb3g6IHV0aWxzX2lzQ2hhcmFjdGVyQm94LFxuICBwcm90b2NvbEZyb21Vcmw6IHByb3RvY29sRnJvbVVybFxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9TZXR0aW5ncy5qc1xuLyogZXNsaW50IG5vLWNvbnNvbGU6MCAqL1xuXG4vKipcbiAqIFRoaXMgaXMgYSBtb2R1bGUgZm9yIHN0b3Jpbmcgc2V0dGluZ3MgcGFzc2VkIGludG8gS2FUZVguIEl0IGNvcnJlY3RseSBoYW5kbGVzXG4gKiBkZWZhdWx0IHNldHRpbmdzLlxuICovXG5cblxuXG5cbi8qKlxuICogVGhlIG1haW4gU2V0dGluZ3Mgb2JqZWN0XG4gKlxuICogVGhlIGN1cnJlbnQgb3B0aW9ucyBzdG9yZWQgYXJlOlxuICogIC0gZGlzcGxheU1vZGU6IFdoZXRoZXIgdGhlIGV4cHJlc3Npb24gc2hvdWxkIGJlIHR5cGVzZXQgYXMgaW5saW5lIG1hdGhcbiAqICAgICAgICAgICAgICAgICAoZmFsc2UsIHRoZSBkZWZhdWx0KSwgbWVhbmluZyB0aGF0IHRoZSBtYXRoIHN0YXJ0cyBpblxuICogICAgICAgICAgICAgICAgIFxcdGV4dHN0eWxlIGFuZCBpcyBwbGFjZWQgaW4gYW4gaW5saW5lLWJsb2NrKTsgb3IgYXMgZGlzcGxheVxuICogICAgICAgICAgICAgICAgIG1hdGggKHRydWUpLCBtZWFuaW5nIHRoYXQgdGhlIG1hdGggc3RhcnRzIGluIFxcZGlzcGxheXN0eWxlXG4gKiAgICAgICAgICAgICAgICAgYW5kIGlzIHBsYWNlZCBpbiBhIGJsb2NrIHdpdGggdmVydGljYWwgbWFyZ2luLlxuICovXG52YXIgU2V0dGluZ3NfU2V0dGluZ3MgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTZXR0aW5ncyhvcHRpb25zKSB7XG4gICAgdGhpcy5kaXNwbGF5TW9kZSA9IHZvaWQgMDtcbiAgICB0aGlzLm91dHB1dCA9IHZvaWQgMDtcbiAgICB0aGlzLmxlcW5vID0gdm9pZCAwO1xuICAgIHRoaXMuZmxlcW4gPSB2b2lkIDA7XG4gICAgdGhpcy50aHJvd09uRXJyb3IgPSB2b2lkIDA7XG4gICAgdGhpcy5lcnJvckNvbG9yID0gdm9pZCAwO1xuICAgIHRoaXMubWFjcm9zID0gdm9pZCAwO1xuICAgIHRoaXMubWluUnVsZVRoaWNrbmVzcyA9IHZvaWQgMDtcbiAgICB0aGlzLmNvbG9ySXNUZXh0Q29sb3IgPSB2b2lkIDA7XG4gICAgdGhpcy5zdHJpY3QgPSB2b2lkIDA7XG4gICAgdGhpcy50cnVzdCA9IHZvaWQgMDtcbiAgICB0aGlzLm1heFNpemUgPSB2b2lkIDA7XG4gICAgdGhpcy5tYXhFeHBhbmQgPSB2b2lkIDA7XG4gICAgLy8gYWxsb3cgbnVsbCBvcHRpb25zXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdGhpcy5kaXNwbGF5TW9kZSA9IHV0aWxzLmRlZmx0KG9wdGlvbnMuZGlzcGxheU1vZGUsIGZhbHNlKTtcbiAgICB0aGlzLm91dHB1dCA9IHV0aWxzLmRlZmx0KG9wdGlvbnMub3V0cHV0LCBcImh0bWxBbmRNYXRobWxcIik7XG4gICAgdGhpcy5sZXFubyA9IHV0aWxzLmRlZmx0KG9wdGlvbnMubGVxbm8sIGZhbHNlKTtcbiAgICB0aGlzLmZsZXFuID0gdXRpbHMuZGVmbHQob3B0aW9ucy5mbGVxbiwgZmFsc2UpO1xuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdXRpbHMuZGVmbHQob3B0aW9ucy50aHJvd09uRXJyb3IsIHRydWUpO1xuICAgIHRoaXMuZXJyb3JDb2xvciA9IHV0aWxzLmRlZmx0KG9wdGlvbnMuZXJyb3JDb2xvciwgXCIjY2MwMDAwXCIpO1xuICAgIHRoaXMubWFjcm9zID0gb3B0aW9ucy5tYWNyb3MgfHwge307XG4gICAgdGhpcy5taW5SdWxlVGhpY2tuZXNzID0gTWF0aC5tYXgoMCwgdXRpbHMuZGVmbHQob3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzLCAwKSk7XG4gICAgdGhpcy5jb2xvcklzVGV4dENvbG9yID0gdXRpbHMuZGVmbHQob3B0aW9ucy5jb2xvcklzVGV4dENvbG9yLCBmYWxzZSk7XG4gICAgdGhpcy5zdHJpY3QgPSB1dGlscy5kZWZsdChvcHRpb25zLnN0cmljdCwgXCJ3YXJuXCIpO1xuICAgIHRoaXMudHJ1c3QgPSB1dGlscy5kZWZsdChvcHRpb25zLnRydXN0LCBmYWxzZSk7XG4gICAgdGhpcy5tYXhTaXplID0gTWF0aC5tYXgoMCwgdXRpbHMuZGVmbHQob3B0aW9ucy5tYXhTaXplLCBJbmZpbml0eSkpO1xuICAgIHRoaXMubWF4RXhwYW5kID0gTWF0aC5tYXgoMCwgdXRpbHMuZGVmbHQob3B0aW9ucy5tYXhFeHBhbmQsIDEwMDApKTtcbiAgfVxuICAvKipcbiAgICogUmVwb3J0IG5vbnN0cmljdCAobm9uLUxhVGVYLWNvbXBhdGlibGUpIGlucHV0LlxuICAgKiBDYW4gc2FmZWx5IG5vdCBiZSBjYWxsZWQgaWYgYHRoaXMuc3RyaWN0YCBpcyBmYWxzZSBpbiBKYXZhU2NyaXB0LlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBTZXR0aW5ncy5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnJlcG9ydE5vbnN0cmljdCA9IGZ1bmN0aW9uIHJlcG9ydE5vbnN0cmljdChlcnJvckNvZGUsIGVycm9yTXNnLCB0b2tlbikge1xuICAgIHZhciBzdHJpY3QgPSB0aGlzLnN0cmljdDtcblxuICAgIGlmICh0eXBlb2Ygc3RyaWN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIC8vIEFsbG93IHJldHVybiB2YWx1ZSBvZiBzdHJpY3QgZnVuY3Rpb24gdG8gYmUgYm9vbGVhbiBvciBzdHJpbmdcbiAgICAgIC8vIChvciBudWxsL3VuZGVmaW5lZCwgbWVhbmluZyBubyBmdXJ0aGVyIHByb2Nlc3NpbmcpLlxuICAgICAgc3RyaWN0ID0gc3RyaWN0KGVycm9yQ29kZSwgZXJyb3JNc2csIHRva2VuKTtcbiAgICB9XG5cbiAgICBpZiAoIXN0cmljdCB8fCBzdHJpY3QgPT09IFwiaWdub3JlXCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKHN0cmljdCA9PT0gdHJ1ZSB8fCBzdHJpY3QgPT09IFwiZXJyb3JcIikge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiTGFUZVgtaW5jb21wYXRpYmxlIGlucHV0IGFuZCBzdHJpY3QgbW9kZSBpcyBzZXQgdG8gJ2Vycm9yJzogXCIgKyAoZXJyb3JNc2cgKyBcIiBbXCIgKyBlcnJvckNvZGUgKyBcIl1cIiksIHRva2VuKTtcbiAgICB9IGVsc2UgaWYgKHN0cmljdCA9PT0gXCJ3YXJuXCIpIHtcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvICd3YXJuJzogXCIgKyAoZXJyb3JNc2cgKyBcIiBbXCIgKyBlcnJvckNvZGUgKyBcIl1cIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB3b24ndCBoYXBwZW4gaW4gdHlwZS1zYWZlIGNvZGVcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvIFwiICsgKFwidW5yZWNvZ25pemVkICdcIiArIHN0cmljdCArIFwiJzogXCIgKyBlcnJvck1zZyArIFwiIFtcIiArIGVycm9yQ29kZSArIFwiXVwiKSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRvIGFwcGx5IHN0cmljdCAoTGFUZVgtYWRoZXJpbmcpIGJlaGF2aW9yIGZvciB1bnVzdWFsXG4gICAqIGlucHV0IChsaWtlIGBcXFxcYCkuICBVbmxpa2UgYG5vbnN0cmljdGAsIHdpbGwgbm90IHRocm93IGFuIGVycm9yO1xuICAgKiBpbnN0ZWFkLCBcImVycm9yXCIgdHJhbnNsYXRlcyB0byBhIHJldHVybiB2YWx1ZSBvZiBgdHJ1ZWAsIHdoaWxlIFwiaWdub3JlXCJcbiAgICogdHJhbnNsYXRlcyB0byBhIHJldHVybiB2YWx1ZSBvZiBgZmFsc2VgLiAgTWF5IHN0aWxsIHByaW50IGEgd2FybmluZzpcbiAgICogXCJ3YXJuXCIgcHJpbnRzIGEgd2FybmluZyBhbmQgcmV0dXJucyBgZmFsc2VgLlxuICAgKiBUaGlzIGlzIGZvciB0aGUgc2Vjb25kIGNhdGVnb3J5IG9mIGBlcnJvckNvZGVgcyBsaXN0ZWQgaW4gdGhlIFJFQURNRS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8udXNlU3RyaWN0QmVoYXZpb3IgPSBmdW5jdGlvbiB1c2VTdHJpY3RCZWhhdmlvcihlcnJvckNvZGUsIGVycm9yTXNnLCB0b2tlbikge1xuICAgIHZhciBzdHJpY3QgPSB0aGlzLnN0cmljdDtcblxuICAgIGlmICh0eXBlb2Ygc3RyaWN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIC8vIEFsbG93IHJldHVybiB2YWx1ZSBvZiBzdHJpY3QgZnVuY3Rpb24gdG8gYmUgYm9vbGVhbiBvciBzdHJpbmdcbiAgICAgIC8vIChvciBudWxsL3VuZGVmaW5lZCwgbWVhbmluZyBubyBmdXJ0aGVyIHByb2Nlc3NpbmcpLlxuICAgICAgLy8gQnV0IGNhdGNoIGFueSBleGNlcHRpb25zIHRocm93biBieSBmdW5jdGlvbiwgdHJlYXRpbmcgdGhlbVxuICAgICAgLy8gbGlrZSBcImVycm9yXCIuXG4gICAgICB0cnkge1xuICAgICAgICBzdHJpY3QgPSBzdHJpY3QoZXJyb3JDb2RlLCBlcnJvck1zZywgdG9rZW4pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc3RyaWN0ID0gXCJlcnJvclwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghc3RyaWN0IHx8IHN0cmljdCA9PT0gXCJpZ25vcmVcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoc3RyaWN0ID09PSB0cnVlIHx8IHN0cmljdCA9PT0gXCJlcnJvclwiKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHN0cmljdCA9PT0gXCJ3YXJuXCIpIHtcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvICd3YXJuJzogXCIgKyAoZXJyb3JNc2cgKyBcIiBbXCIgKyBlcnJvckNvZGUgKyBcIl1cIikpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB3b24ndCBoYXBwZW4gaW4gdHlwZS1zYWZlIGNvZGVcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvIFwiICsgKFwidW5yZWNvZ25pemVkICdcIiArIHN0cmljdCArIFwiJzogXCIgKyBlcnJvck1zZyArIFwiIFtcIiArIGVycm9yQ29kZSArIFwiXVwiKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRvIHRlc3QgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIGlucHV0LCBhbmQgcmV0dXJuXG4gICAqIGB0cnVlYCAodHJ1c3RlZCkgb3IgYGZhbHNlYCAodW50cnVzdGVkKS4gIFRoZSBzb2xlIGFyZ3VtZW50IGBjb250ZXh0YFxuICAgKiBzaG91bGQgYmUgYW4gb2JqZWN0IHdpdGggYGNvbW1hbmRgIGZpZWxkIHNwZWNpZnlpbmcgdGhlIHJlbGV2YW50IExhVGVYXG4gICAqIGNvbW1hbmQgKGFzIGEgc3RyaW5nIHN0YXJ0aW5nIHdpdGggYFxcYCksIGFuZCBhbnkgb3RoZXIgYXJndW1lbnRzLCBldGMuXG4gICAqIElmIGBjb250ZXh0YCBoYXMgYSBgdXJsYCBmaWVsZCwgYSBgcHJvdG9jb2xgIGZpZWxkIHdpbGwgYXV0b21hdGljYWxseVxuICAgKiBnZXQgYWRkZWQgYnkgdGhpcyBmdW5jdGlvbiAoY2hhbmdpbmcgdGhlIHNwZWNpZmllZCBvYmplY3QpLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5pc1RydXN0ZWQgPSBmdW5jdGlvbiBpc1RydXN0ZWQoY29udGV4dCkge1xuICAgIGlmIChjb250ZXh0LnVybCAmJiAhY29udGV4dC5wcm90b2NvbCkge1xuICAgICAgY29udGV4dC5wcm90b2NvbCA9IHV0aWxzLnByb3RvY29sRnJvbVVybChjb250ZXh0LnVybCk7XG4gICAgfVxuXG4gICAgdmFyIHRydXN0ID0gdHlwZW9mIHRoaXMudHJ1c3QgPT09IFwiZnVuY3Rpb25cIiA/IHRoaXMudHJ1c3QoY29udGV4dCkgOiB0aGlzLnRydXN0O1xuICAgIHJldHVybiBCb29sZWFuKHRydXN0KTtcbiAgfTtcblxuICByZXR1cm4gU2V0dGluZ3M7XG59KCk7XG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvU3R5bGUuanNcbi8qKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFuZCBjbGFzc2VzIGZvciB0aGUgdmFyaW91cyBraW5kcyBvZiBzdHlsZXNcbiAqIHVzZWQgaW4gVGVYLiBJdCBwcm92aWRlcyBhIGdlbmVyaWMgYFN0eWxlYCBjbGFzcywgd2hpY2ggaG9sZHMgaW5mb3JtYXRpb25cbiAqIGFib3V0IGEgc3BlY2lmaWMgc3R5bGUuIEl0IHRoZW4gcHJvdmlkZXMgaW5zdGFuY2VzIG9mIGFsbCB0aGUgZGlmZmVyZW50IGtpbmRzXG4gKiBvZiBzdHlsZXMgcG9zc2libGUsIGFuZCBwcm92aWRlcyBmdW5jdGlvbnMgdG8gbW92ZSBiZXR3ZWVuIHRoZW0gYW5kIGdldFxuICogaW5mb3JtYXRpb24gYWJvdXQgdGhlbS5cbiAqL1xuXG4vKipcbiAqIFRoZSBtYWluIHN0eWxlIGNsYXNzLiBDb250YWlucyBhIHVuaXF1ZSBpZCBmb3IgdGhlIHN0eWxlLCBhIHNpemUgKHdoaWNoIGlzXG4gKiB0aGUgc2FtZSBmb3IgY3JhbXBlZCBhbmQgdW5jcmFtcGVkIHZlcnNpb24gb2YgYSBzdHlsZSksIGFuZCBhIGNyYW1wZWQgZmxhZy5cbiAqL1xudmFyIFN0eWxlID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3R5bGUoaWQsIHNpemUsIGNyYW1wZWQpIHtcbiAgICB0aGlzLmlkID0gdm9pZCAwO1xuICAgIHRoaXMuc2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLmNyYW1wZWQgPSB2b2lkIDA7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG4gICAgdGhpcy5jcmFtcGVkID0gY3JhbXBlZDtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBzdHlsZSBvZiBhIHN1cGVyc2NyaXB0IGdpdmVuIGEgYmFzZSBpbiB0aGUgY3VycmVudCBzdHlsZS5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gU3R5bGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5zdXAgPSBmdW5jdGlvbiBzdXAoKSB7XG4gICAgcmV0dXJuIFN0eWxlX3N0eWxlc1tfc3VwW3RoaXMuaWRdXTtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBzdHlsZSBvZiBhIHN1YnNjcmlwdCBnaXZlbiBhIGJhc2UgaW4gdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnN1YiA9IGZ1bmN0aW9uIHN1YigpIHtcbiAgICByZXR1cm4gU3R5bGVfc3R5bGVzW19zdWJbdGhpcy5pZF1dO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0eWxlIG9mIGEgZnJhY3Rpb24gbnVtZXJhdG9yIGdpdmVuIHRoZSBmcmFjdGlvbiBpbiB0aGUgY3VycmVudFxuICAgKiBzdHlsZS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZnJhY051bSA9IGZ1bmN0aW9uIGZyYWNOdW0oKSB7XG4gICAgcmV0dXJuIFN0eWxlX3N0eWxlc1tfZnJhY051bVt0aGlzLmlkXV07XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgc3R5bGUgb2YgYSBmcmFjdGlvbiBkZW5vbWluYXRvciBnaXZlbiB0aGUgZnJhY3Rpb24gaW4gdGhlIGN1cnJlbnRcbiAgICogc3R5bGUuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmZyYWNEZW4gPSBmdW5jdGlvbiBmcmFjRGVuKCkge1xuICAgIHJldHVybiBTdHlsZV9zdHlsZXNbX2ZyYWNEZW5bdGhpcy5pZF1dO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGNyYW1wZWQgdmVyc2lvbiBvZiBhIHN0eWxlIChpbiBwYXJ0aWN1bGFyLCBjcmFtcGluZyBhIGNyYW1wZWQgc3R5bGVcbiAgICogZG9lc24ndCBjaGFuZ2UgdGhlIHN0eWxlKS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uY3JhbXAgPSBmdW5jdGlvbiBjcmFtcCgpIHtcbiAgICByZXR1cm4gU3R5bGVfc3R5bGVzW19jcmFtcFt0aGlzLmlkXV07XG4gIH1cbiAgLyoqXG4gICAqIEdldCBhIHRleHQgb3IgZGlzcGxheSB2ZXJzaW9uIG9mIHRoaXMgc3R5bGUuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnRleHQgPSBmdW5jdGlvbiB0ZXh0KCkge1xuICAgIHJldHVybiBTdHlsZV9zdHlsZXNbX3RleHRbdGhpcy5pZF1dO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGlzIHN0eWxlIGlzIHRpZ2h0bHkgc3BhY2VkIChzY3JpcHRzdHlsZS9zY3JpcHRzY3JpcHRzdHlsZSlcbiAgICovXG4gIDtcblxuICBfcHJvdG8uaXNUaWdodCA9IGZ1bmN0aW9uIGlzVGlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSA+PSAyO1xuICB9O1xuXG4gIHJldHVybiBTdHlsZTtcbn0oKTsgLy8gRXhwb3J0IGFuIGludGVyZmFjZSBmb3IgdHlwZSBjaGVja2luZywgYnV0IGRvbid0IGV4cG9zZSB0aGUgaW1wbGVtZW50YXRpb24uXG4vLyBUaGlzIHdheSwgbm8gbW9yZSBzdHlsZXMgY2FuIGJlIGdlbmVyYXRlZC5cblxuXG4vLyBJRHMgb2YgdGhlIGRpZmZlcmVudCBzdHlsZXNcbnZhciBEID0gMDtcbnZhciBEYyA9IDE7XG52YXIgVCA9IDI7XG52YXIgVGMgPSAzO1xudmFyIFMgPSA0O1xudmFyIFNjID0gNTtcbnZhciBTUyA9IDY7XG52YXIgU1NjID0gNzsgLy8gSW5zdGFuY2VzIG9mIHRoZSBkaWZmZXJlbnQgc3R5bGVzXG5cbnZhciBTdHlsZV9zdHlsZXMgPSBbbmV3IFN0eWxlKEQsIDAsIGZhbHNlKSwgbmV3IFN0eWxlKERjLCAwLCB0cnVlKSwgbmV3IFN0eWxlKFQsIDEsIGZhbHNlKSwgbmV3IFN0eWxlKFRjLCAxLCB0cnVlKSwgbmV3IFN0eWxlKFMsIDIsIGZhbHNlKSwgbmV3IFN0eWxlKFNjLCAyLCB0cnVlKSwgbmV3IFN0eWxlKFNTLCAzLCBmYWxzZSksIG5ldyBTdHlsZShTU2MsIDMsIHRydWUpXTsgLy8gTG9va3VwIHRhYmxlcyBmb3Igc3dpdGNoaW5nIGZyb20gb25lIHN0eWxlIHRvIGFub3RoZXJcblxudmFyIF9zdXAgPSBbUywgU2MsIFMsIFNjLCBTUywgU1NjLCBTUywgU1NjXTtcbnZhciBfc3ViID0gW1NjLCBTYywgU2MsIFNjLCBTU2MsIFNTYywgU1NjLCBTU2NdO1xudmFyIF9mcmFjTnVtID0gW1QsIFRjLCBTLCBTYywgU1MsIFNTYywgU1MsIFNTY107XG52YXIgX2ZyYWNEZW4gPSBbVGMsIFRjLCBTYywgU2MsIFNTYywgU1NjLCBTU2MsIFNTY107XG52YXIgX2NyYW1wID0gW0RjLCBEYywgVGMsIFRjLCBTYywgU2MsIFNTYywgU1NjXTtcbnZhciBfdGV4dCA9IFtELCBEYywgVCwgVGMsIFQsIFRjLCBULCBUY107IC8vIFdlIG9ubHkgZXhwb3J0IHNvbWUgb2YgdGhlIHN0eWxlcy5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX1N0eWxlID0gKHtcbiAgRElTUExBWTogU3R5bGVfc3R5bGVzW0RdLFxuICBURVhUOiBTdHlsZV9zdHlsZXNbVF0sXG4gIFNDUklQVDogU3R5bGVfc3R5bGVzW1NdLFxuICBTQ1JJUFRTQ1JJUFQ6IFN0eWxlX3N0eWxlc1tTU11cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdW5pY29kZVNjcmlwdHMuanNcbi8qXG4gKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgVW5pY29kZSBzY3JpcHRzIGFuZCBzY3JpcHQgZmFtaWxpZXMgdGhhdCB3ZVxuICogc3VwcG9ydC4gVG8gYWRkIG5ldyBzY3JpcHRzIG9yIGZhbWlsaWVzLCBqdXN0IGFkZCBhIG5ldyBlbnRyeSB0byB0aGVcbiAqIHNjcmlwdERhdGEgYXJyYXkgYmVsb3cuIEFkZGluZyBzY3JpcHRzIHRvIHRoZSBzY3JpcHREYXRhIGFycmF5IGFsbG93c1xuICogY2hhcmFjdGVycyBmcm9tIHRoYXQgc2NyaXB0IHRvIGFwcGVhciBpbiBcXHRleHR7fSBlbnZpcm9ubWVudHMuXG4gKi9cblxuLyoqXG4gKiBFYWNoIHNjcmlwdCBvciBzY3JpcHQgZmFtaWx5IGhhcyBhIG5hbWUgYW5kIGFuIGFycmF5IG9mIGJsb2Nrcy5cbiAqIEVhY2ggYmxvY2sgaXMgYW4gYXJyYXkgb2YgdHdvIG51bWJlcnMgd2hpY2ggc3BlY2lmeSB0aGUgc3RhcnQgYW5kXG4gKiBlbmQgcG9pbnRzIChpbmNsdXNpdmUpIG9mIGEgYmxvY2sgb2YgVW5pY29kZSBjb2RlcG9pbnRzLlxuICovXG5cbi8qKlxuICogVW5pY29kZSBibG9jayBkYXRhIGZvciB0aGUgZmFtaWxpZXMgb2Ygc2NyaXB0cyB3ZSBzdXBwb3J0IGluIFxcdGV4dHt9LlxuICogU2NyaXB0cyBvbmx5IG5lZWQgdG8gYXBwZWFyIGhlcmUgaWYgdGhleSBkbyBub3QgaGF2ZSBmb250IG1ldHJpY3MuXG4gKi9cbnZhciBzY3JpcHREYXRhID0gW3tcbiAgLy8gTGF0aW4gY2hhcmFjdGVycyBiZXlvbmQgdGhlIExhdGluLTEgY2hhcmFjdGVycyB3ZSBoYXZlIG1ldHJpY3MgZm9yLlxuICAvLyBOZWVkZWQgZm9yIEN6ZWNoLCBIdW5nYXJpYW4gYW5kIFR1cmtpc2ggdGV4dCwgZm9yIGV4YW1wbGUuXG4gIG5hbWU6ICdsYXRpbicsXG4gIGJsb2NrczogW1sweDAxMDAsIDB4MDI0Zl0sIC8vIExhdGluIEV4dGVuZGVkLUEgYW5kIExhdGluIEV4dGVuZGVkLUJcbiAgWzB4MDMwMCwgMHgwMzZmXV1cbn0sIHtcbiAgLy8gVGhlIEN5cmlsbGljIHNjcmlwdCB1c2VkIGJ5IFJ1c3NpYW4gYW5kIHJlbGF0ZWQgbGFuZ3VhZ2VzLlxuICAvLyBBIEN5cmlsbGljIHN1YnNldCB1c2VkIHRvIGJlIHN1cHBvcnRlZCBhcyBleHBsaWNpdGx5IGRlZmluZWRcbiAgLy8gc3ltYm9scyBpbiBzeW1ib2xzLmpzXG4gIG5hbWU6ICdjeXJpbGxpYycsXG4gIGJsb2NrczogW1sweDA0MDAsIDB4MDRmZl1dXG59LCB7XG4gIC8vIFRoZSBCcmFobWljIHNjcmlwdHMgb2YgU291dGggYW5kIFNvdXRoZWFzdCBBc2lhXG4gIC8vIERldmFuYWdhcmkgKDA5MDDigJMwOTdGKVxuICAvLyBCZW5nYWxpICgwOTgw4oCTMDlGRilcbiAgLy8gR3VybXVraGkgKDBBMDDigJMwQTdGKVxuICAvLyBHdWphcmF0aSAoMEE4MOKAkzBBRkYpXG4gIC8vIE9yaXlhICgwQjAw4oCTMEI3RilcbiAgLy8gVGFtaWwgKDBCODDigJMwQkZGKVxuICAvLyBUZWx1Z3UgKDBDMDDigJMwQzdGKVxuICAvLyBLYW5uYWRhICgwQzgw4oCTMENGRilcbiAgLy8gTWFsYXlhbGFtICgwRDAw4oCTMEQ3RilcbiAgLy8gU2luaGFsYSAoMEQ4MOKAkzBERkYpXG4gIC8vIFRoYWkgKDBFMDDigJMwRTdGKVxuICAvLyBMYW8gKDBFODDigJMwRUZGKVxuICAvLyBUaWJldGFuICgwRjAw4oCTMEZGRilcbiAgLy8gTXlhbm1hciAoMTAwMOKAkzEwOUYpXG4gIG5hbWU6ICdicmFobWljJyxcbiAgYmxvY2tzOiBbWzB4MDkwMCwgMHgxMDlGXV1cbn0sIHtcbiAgbmFtZTogJ2dlb3JnaWFuJyxcbiAgYmxvY2tzOiBbWzB4MTBBMCwgMHgxMGZmXV1cbn0sIHtcbiAgLy8gQ2hpbmVzZSBhbmQgSmFwYW5lc2UuXG4gIC8vIFRoZSBcImtcIiBpbiBjamsgaXMgZm9yIEtvcmVhbiwgYnV0IHdlJ3ZlIHNlcGFyYXRlZCBLb3JlYW4gb3V0XG4gIG5hbWU6IFwiY2prXCIsXG4gIGJsb2NrczogW1sweDMwMDAsIDB4MzBGRl0sIC8vIENKSyBzeW1ib2xzIGFuZCBwdW5jdHVhdGlvbiwgSGlyYWdhbmEsIEthdGFrYW5hXG4gIFsweDRFMDAsIDB4OUZBRl0sIC8vIENKSyBpZGVvZ3JhbXNcbiAgWzB4RkYwMCwgMHhGRjYwXV1cbn0sIHtcbiAgLy8gS29yZWFuXG4gIG5hbWU6ICdoYW5ndWwnLFxuICBibG9ja3M6IFtbMHhBQzAwLCAweEQ3QUZdXVxufV07XG4vKipcbiAqIEdpdmVuIGEgY29kZXBvaW50LCByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHNjcmlwdCBvciBzY3JpcHQgZmFtaWx5XG4gKiBpdCBpcyBmcm9tLCBvciBudWxsIGlmIGl0IGlzIG5vdCBwYXJ0IG9mIGEga25vd24gYmxvY2tcbiAqL1xuXG5mdW5jdGlvbiBzY3JpcHRGcm9tQ29kZXBvaW50KGNvZGVwb2ludCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNjcmlwdERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc2NyaXB0ID0gc2NyaXB0RGF0YVtpXTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBzY3JpcHQuYmxvY2tzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIGJsb2NrID0gc2NyaXB0LmJsb2Nrc1tfaV07XG5cbiAgICAgIGlmIChjb2RlcG9pbnQgPj0gYmxvY2tbMF0gJiYgY29kZXBvaW50IDw9IGJsb2NrWzFdKSB7XG4gICAgICAgIHJldHVybiBzY3JpcHQubmFtZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogQSBmbGF0dGVuZWQgdmVyc2lvbiBvZiBhbGwgdGhlIHN1cHBvcnRlZCBibG9ja3MgaW4gYSBzaW5nbGUgYXJyYXkuXG4gKiBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiB0byBtYWtlIHN1cHBvcnRlZENvZGVwb2ludCgpIGZhc3QuXG4gKi9cblxudmFyIGFsbEJsb2NrcyA9IFtdO1xuc2NyaXB0RGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChzKSB7XG4gIHJldHVybiBzLmJsb2Nrcy5mb3JFYWNoKGZ1bmN0aW9uIChiKSB7XG4gICAgcmV0dXJuIGFsbEJsb2Nrcy5wdXNoLmFwcGx5KGFsbEJsb2NrcywgYik7XG4gIH0pO1xufSk7XG4vKipcbiAqIEdpdmVuIGEgY29kZXBvaW50LCByZXR1cm4gdHJ1ZSBpZiBpdCBmYWxscyB3aXRoaW4gb25lIG9mIHRoZVxuICogc2NyaXB0cyBvciBzY3JpcHQgZmFtaWxpZXMgZGVmaW5lZCBhYm92ZSBhbmQgZmFsc2Ugb3RoZXJ3aXNlLlxuICpcbiAqIE1pY3JvIGJlbmNobWFya3Mgc2hvd3MgdGhhdCB0aGlzIGlzIGZhc3RlciB0aGFuXG4gKiAvW1xcdTMwMDAtXFx1MzBGRlxcdTRFMDAtXFx1OUZBRlxcdUZGMDAtXFx1RkY2MFxcdUFDMDAtXFx1RDdBRlxcdTA5MDAtXFx1MTA5Rl0vLnRlc3QoKVxuICogaW4gRmlyZWZveCwgQ2hyb21lIGFuZCBOb2RlLlxuICovXG5cbmZ1bmN0aW9uIHN1cHBvcnRlZENvZGVwb2ludChjb2RlcG9pbnQpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxCbG9ja3MubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBpZiAoY29kZXBvaW50ID49IGFsbEJsb2Nrc1tpXSAmJiBjb2RlcG9pbnQgPD0gYWxsQmxvY2tzW2kgKyAxXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvc3ZnR2VvbWV0cnkuanNcbi8qKlxuICogVGhpcyBmaWxlIHByb3ZpZGVzIHN1cHBvcnQgdG8gZG9tVHJlZS5qcyBhbmQgZGVsaW1pdGVyLmpzLlxuICogSXQncyBhIHN0b3JlaG91c2Ugb2YgcGF0aCBnZW9tZXRyeSBmb3IgU1ZHIGltYWdlcy5cbiAqL1xuLy8gSW4gYWxsIHBhdGhzIGJlbG93LCB0aGUgdmlld0JveC10by1lbSBzY2FsZSBpcyAxMDAwOjEuXG52YXIgaExpbmVQYWQgPSA4MDsgLy8gcGFkZGluZyBhYm92ZSBhIHNxcnQgdmluaWN1bHVtLiBQcmV2ZW50cyBpbWFnZSBjcm9wcGluZy5cbi8vIFRoZSB2aW5pY3VsdW0gb2YgYSBcXHNxcnQgY2FuIGJlIG1hZGUgdGhpY2tlciBieSBhIEthVGVYIHJlbmRlcmluZyBvcHRpb24uXG4vLyBUaGluayBvZiB2YXJpYWJsZSBleHRyYVZpbmljdWx1bSBhcyB0d28gZGV0b3VycyBpbiB0aGUgU1ZHIHBhdGguXG4vLyBUaGUgZGV0b3VyIGJlZ2lucyBhdCB0aGUgbG93ZXIgbGVmdCBvZiB0aGUgYXJlYSBsYWJlbGVkIGV4dHJhVmluaWN1bHVtIGJlbG93LlxuLy8gVGhlIGRldG91ciBwcm9jZWVkcyBvbmUgZXh0cmFWaW5pY3VsdW0gZGlzdGFuY2UgdXAgYW5kIHNsaWdodGx5IHRvIHRoZSByaWdodCxcbi8vIGRpc3BsYWNpbmcgdGhlIHJhZGl1c2VkIGNvcm5lciBiZXR3ZWVuIHN1cmQgYW5kIHZpbmljdWx1bS4gVGhlIHJhZGl1cyBpc1xuLy8gdHJhdmVyc2VkIGFzIHVzdWFsLCB0aGVuIHRoZSBkZXRvdXIgcmVzdW1lcy4gSXQgZ29lcyByaWdodCwgdG8gdGhlIGVuZCBvZlxuLy8gdGhlIHZlcnkgbG9uZyB2aW5pY3VsdW1uLCB0aGVuIGRvd24gb25lIGV4dHJhVmluaWN1bHVtIGRpc3RhbmNlLFxuLy8gYWZ0ZXIgd2hpY2ggaXQgcmVzdW1lcyByZWd1bGFyIHBhdGggZ2VvbWV0cnkgZm9yIHRoZSByYWRpY2FsLlxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmluaWN1bHVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvXG4gICAgICAgICAv4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4oaQZXh0cmFWaW5pY3VsdW1cbiAgICAgICAgLyDilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojihpAwLjA0ZW0gKDQwIHVuaXQpIHN0ZCB2aW5pY3VsdW0gdGhpY2tuZXNzXG4gICAgICAgLyAvXG4gICAgICAvIC9cbiAgICAgLyAvXFxcbiAgICAvIC8gc3VyZFxuKi9cblxudmFyIHNxcnRNYWluID0gZnVuY3Rpb24gc3FydE1haW4oZXh0cmFWaW5pY3VsdW0sIGhMaW5lUGFkKSB7XG4gIC8vIHNxcnRNYWluIHBhdGggZ2VvbWV0cnkgaXMgZnJvbSBnbHlwaCBVMjIxQSBpbiB0aGUgZm9udCBLYVRlWCBNYWluXG4gIHJldHVybiBcIk05NSxcIiArICg2MjIgKyBleHRyYVZpbmljdWx1bSArIGhMaW5lUGFkKSArIFwiXFxuYy0yLjcsMCwtNy4xNywtMi43LC0xMy41LC04Yy01LjgsLTUuMywtOS41LC0xMCwtOS41LC0xNFxcbmMwLC0yLDAuMywtMy4zLDEsLTRjMS4zLC0yLjcsMjMuODMsLTIwLjcsNjcuNSwtNTRcXG5jNDQuMiwtMzMuMyw2NS44LC01MC4zLDY2LjUsLTUxYzEuMywtMS4zLDMsLTIsNSwtMmM0LjcsMCw4LjcsMy4zLDEyLDEwXFxuczE3MywzNzgsMTczLDM3OGMwLjcsMCwzNS4zLC03MSwxMDQsLTIxM2M2OC43LC0xNDIsMTM3LjUsLTI4NSwyMDYuNSwtNDI5XFxuYzY5LC0xNDQsMTA0LjUsLTIxNy43LDEwNi41LC0yMjFcXG5sXCIgKyBleHRyYVZpbmljdWx1bSAvIDIuMDc1ICsgXCIgLVwiICsgZXh0cmFWaW5pY3VsdW0gKyBcIlxcbmM1LjMsLTkuMywxMiwtMTQsMjAsLTE0XFxuSDQwMDAwMHZcIiArICg0MCArIGV4dHJhVmluaWN1bHVtKSArIFwiSDg0NS4yNzI0XFxucy0yMjUuMjcyLDQ2NywtMjI1LjI3Miw0NjdzLTIzNSw0ODYsLTIzNSw0ODZjLTIuNyw0LjcsLTksNywtMTksN1xcbmMtNiwwLC0xMCwtMSwtMTIsLTNzLTE5NCwtNDIyLC0xOTQsLTQyMnMtNjUsNDcsLTY1LDQ3elxcbk1cIiArICg4MzQgKyBleHRyYVZpbmljdWx1bSkgKyBcIiBcIiArIGhMaW5lUGFkICsgXCJoNDAwMDAwdlwiICsgKDQwICsgZXh0cmFWaW5pY3VsdW0pICsgXCJoLTQwMDAwMHpcIjtcbn07XG5cbnZhciBzcXJ0U2l6ZTEgPSBmdW5jdGlvbiBzcXJ0U2l6ZTEoZXh0cmFWaW5pY3VsdW0sIGhMaW5lUGFkKSB7XG4gIC8vIHNpemUxIGlzIGZyb20gZ2x5cGggVTIyMUEgaW4gdGhlIGZvbnQgS2FUZVhfU2l6ZTEtUmVndWxhclxuICByZXR1cm4gXCJNMjYzLFwiICsgKDYwMSArIGV4dHJhVmluaWN1bHVtICsgaExpbmVQYWQpICsgXCJjMC43LDAsMTgsMzkuNyw1MiwxMTlcXG5jMzQsNzkuMyw2OC4xNjcsMTU4LjcsMTAyLjUsMjM4YzM0LjMsNzkuMyw1MS44LDExOS4zLDUyLjUsMTIwXFxuYzM0MCwtNzA0LjcsNTEwLjcsLTEwNjAuMyw1MTIsLTEwNjdcXG5sXCIgKyBleHRyYVZpbmljdWx1bSAvIDIuMDg0ICsgXCIgLVwiICsgZXh0cmFWaW5pY3VsdW0gKyBcIlxcbmM0LjcsLTcuMywxMSwtMTEsMTksLTExXFxuSDQwMDAwdlwiICsgKDQwICsgZXh0cmFWaW5pY3VsdW0pICsgXCJIMTAxMi4zXFxucy0yNzEuMyw1NjcsLTI3MS4zLDU2N2MtMzguNyw4MC43LC04NCwxNzUsLTEzNiwyODNjLTUyLDEwOCwtODkuMTY3LDE4NS4zLC0xMTEuNSwyMzJcXG5jLTIyLjMsNDYuNywtMzMuOCw3MC4zLC0zNC41LDcxYy00LjcsNC43LC0xMi4zLDcsLTIzLDdzLTEyLC0xLC0xMiwtMVxcbnMtMTA5LC0yNTMsLTEwOSwtMjUzYy03Mi43LC0xNjgsLTEwOS4zLC0yNTIsLTExMCwtMjUyYy0xMC43LDgsLTIyLDE2LjcsLTM0LDI2XFxuYy0yMiwxNy4zLC0zMy4zLDI2LC0zNCwyNnMtMjYsLTI2LC0yNiwtMjZzNzYsLTU5LDc2LC01OXM3NiwtNjAsNzYsLTYwelxcbk1cIiArICgxMDAxICsgZXh0cmFWaW5pY3VsdW0pICsgXCIgXCIgKyBoTGluZVBhZCArIFwiaDQwMDAwMHZcIiArICg0MCArIGV4dHJhVmluaWN1bHVtKSArIFwiaC00MDAwMDB6XCI7XG59O1xuXG52YXIgc3FydFNpemUyID0gZnVuY3Rpb24gc3FydFNpemUyKGV4dHJhVmluaWN1bHVtLCBoTGluZVBhZCkge1xuICAvLyBzaXplMiBpcyBmcm9tIGdseXBoIFUyMjFBIGluIHRoZSBmb250IEthVGVYX1NpemUyLVJlZ3VsYXJcbiAgcmV0dXJuIFwiTTk4MyBcIiArICgxMCArIGV4dHJhVmluaWN1bHVtICsgaExpbmVQYWQpICsgXCJcXG5sXCIgKyBleHRyYVZpbmljdWx1bSAvIDMuMTMgKyBcIiAtXCIgKyBleHRyYVZpbmljdWx1bSArIFwiXFxuYzQsLTYuNywxMCwtMTAsMTgsLTEwIEg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmljdWx1bSkgKyBcIlxcbkgxMDEzLjFzLTgzLjQsMjY4LC0yNjQuMSw4NDBjLTE4MC43LDU3MiwtMjc3LDg3Ni4zLC0yODksOTEzYy00LjcsNC43LC0xMi43LDcsLTI0LDdcXG5zLTEyLDAsLTEyLDBjLTEuMywtMy4zLC0zLjcsLTExLjcsLTcsLTI1Yy0zNS4zLC0xMjUuMywtMTA2LjcsLTM3My4zLC0yMTQsLTc0NFxcbmMtMTAsMTIsLTIxLDI1LC0zMywzOXMtMzIsMzksLTMyLDM5Yy02LC01LjMsLTE1LC0xNCwtMjcsLTI2czI1LC0zMCwyNSwtMzBcXG5jMjYuNywtMzIuNyw1MiwtNjMsNzYsLTkxczUyLC02MCw1MiwtNjBzMjA4LDcyMiwyMDgsNzIyXFxuYzU2LC0xNzUuMywxMjYuMywtMzk3LjMsMjExLC02NjZjODQuNywtMjY4LjcsMTUzLjgsLTQ4OC4yLDIwNy41LC02NTguNVxcbmM1My43LC0xNzAuMyw4NC41LC0yNjYuOCw5Mi41LC0yODkuNXpcXG5NXCIgKyAoMTAwMSArIGV4dHJhVmluaWN1bHVtKSArIFwiIFwiICsgaExpbmVQYWQgKyBcImg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmljdWx1bSkgKyBcImgtNDAwMDAwelwiO1xufTtcblxudmFyIHNxcnRTaXplMyA9IGZ1bmN0aW9uIHNxcnRTaXplMyhleHRyYVZpbmljdWx1bSwgaExpbmVQYWQpIHtcbiAgLy8gc2l6ZTMgaXMgZnJvbSBnbHlwaCBVMjIxQSBpbiB0aGUgZm9udCBLYVRlWF9TaXplMy1SZWd1bGFyXG4gIHJldHVybiBcIk00MjQsXCIgKyAoMjM5OCArIGV4dHJhVmluaWN1bHVtICsgaExpbmVQYWQpICsgXCJcXG5jLTEuMywtMC43LC0zOC41LC0xNzIsLTExMS41LC01MTRjLTczLC0zNDIsLTEwOS44LC01MTMuMywtMTEwLjUsLTUxNFxcbmMwLC0yLC0xMC43LDE0LjMsLTMyLDQ5Yy00LjcsNy4zLC05LjgsMTUuNywtMTUuNSwyNWMtNS43LDkuMywtOS44LDE2LC0xMi41LDIwXFxucy01LDcsLTUsN2MtNCwtMy4zLC04LjMsLTcuNywtMTMsLTEzcy0xMywtMTMsLTEzLC0xM3M3NiwtMTIyLDc2LC0xMjJzNzcsLTEyMSw3NywtMTIxXFxuczIwOSw5NjgsMjA5LDk2OGMwLC0yLDg0LjcsLTM2MS43LDI1NCwtMTA3OWMxNjkuMywtNzE3LjMsMjU0LjcsLTEwNzcuNywyNTYsLTEwODFcXG5sXCIgKyBleHRyYVZpbmljdWx1bSAvIDQuMjIzICsgXCIgLVwiICsgZXh0cmFWaW5pY3VsdW0gKyBcImM0LC02LjcsMTAsLTEwLDE4LC0xMCBINDAwMDAwXFxudlwiICsgKDQwICsgZXh0cmFWaW5pY3VsdW0pICsgXCJIMTAxNC42XFxucy04Ny4zLDM3OC43LC0yNzIuNiwxMTY2Yy0xODUuMyw3ODcuMywtMjc5LjMsMTE4Mi4zLC0yODIsMTE4NVxcbmMtMiw2LC0xMCw5LC0yNCw5XFxuYy04LDAsLTEyLC0wLjcsLTEyLC0yeiBNXCIgKyAoMTAwMSArIGV4dHJhVmluaWN1bHVtKSArIFwiIFwiICsgaExpbmVQYWQgKyBcIlxcbmg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmljdWx1bSkgKyBcImgtNDAwMDAwelwiO1xufTtcblxudmFyIHNxcnRTaXplNCA9IGZ1bmN0aW9uIHNxcnRTaXplNChleHRyYVZpbmljdWx1bSwgaExpbmVQYWQpIHtcbiAgLy8gc2l6ZTQgaXMgZnJvbSBnbHlwaCBVMjIxQSBpbiB0aGUgZm9udCBLYVRlWF9TaXplNC1SZWd1bGFyXG4gIHJldHVybiBcIk00NzMsXCIgKyAoMjcxMyArIGV4dHJhVmluaWN1bHVtICsgaExpbmVQYWQpICsgXCJcXG5jMzM5LjMsLTE3OTkuMyw1MDkuMywtMjcwMCw1MTAsLTI3MDIgbFwiICsgZXh0cmFWaW5pY3VsdW0gLyA1LjI5OCArIFwiIC1cIiArIGV4dHJhVmluaWN1bHVtICsgXCJcXG5jMy4zLC03LjMsOS4zLC0xMSwxOCwtMTEgSDQwMDAwMHZcIiArICg0MCArIGV4dHJhVmluaWN1bHVtKSArIFwiSDEwMTcuN1xcbnMtOTAuNSw0NzgsLTI3Ni4yLDE0NjZjLTE4NS43LDk4OCwtMjc5LjUsMTQ4MywtMjgxLjUsMTQ4NWMtMiw2LC0xMCw5LC0yNCw5XFxuYy04LDAsLTEyLC0wLjcsLTEyLC0yYzAsLTEuMywtNS4zLC0zMiwtMTYsLTkyYy01MC43LC0yOTMuMywtMTE5LjcsLTY5My4zLC0yMDcsLTEyMDBcXG5jMCwtMS4zLC01LjMsOC43LC0xNiwzMGMtMTAuNywyMS4zLC0yMS4zLDQyLjcsLTMyLDY0cy0xNiwzMywtMTYsMzNzLTI2LC0yNiwtMjYsLTI2XFxuczc2LC0xNTMsNzYsLTE1M3M3NywtMTUxLDc3LC0xNTFjMC43LDAuNywzNS43LDIwMiwxMDUsNjA0YzY3LjMsNDAwLjcsMTAyLDYwMi43LDEwNCxcXG42MDZ6TVwiICsgKDEwMDEgKyBleHRyYVZpbmljdWx1bSkgKyBcIiBcIiArIGhMaW5lUGFkICsgXCJoNDAwMDAwdlwiICsgKDQwICsgZXh0cmFWaW5pY3VsdW0pICsgXCJIMTAxNy43elwiO1xufTtcblxudmFyIHNxcnRUYWxsID0gZnVuY3Rpb24gc3FydFRhbGwoZXh0cmFWaW5pY3VsdW0sIGhMaW5lUGFkLCB2aWV3Qm94SGVpZ2h0KSB7XG4gIC8vIHNxcnRUYWxsIGlzIGZyb20gZ2x5cGggVTIzQjcgaW4gdGhlIGZvbnQgS2FUZVhfU2l6ZTQtUmVndWxhclxuICAvLyBPbmUgcGF0aCBlZGdlIGhhcyBhIHZhcmlhYmxlIGxlbmd0aC4gSXQgcnVucyB2ZXJ0aWNhbGx5IGZyb20gdGhlIHZpbmljdWx1bW5cbiAgLy8gdG8gYSBwb2ludCBuZWFyICgxNCB1bml0cykgdGhlIGJvdHRvbSBvZiB0aGUgc3VyZC4gVGhlIHZpbmljdWx1bVxuICAvLyBpcyBub3JtYWxseSA0MCB1bml0cyB0aGljay4gU28gdGhlIGxlbmd0aCBvZiB0aGUgbGluZSBpbiBxdWVzdGlvbiBpczpcbiAgdmFyIHZlcnRTZWdtZW50ID0gdmlld0JveEhlaWdodCAtIDU0IC0gaExpbmVQYWQgLSBleHRyYVZpbmljdWx1bTtcbiAgcmV0dXJuIFwiTTcwMiBcIiArIChleHRyYVZpbmljdWx1bSArIGhMaW5lUGFkKSArIFwiSDQwMDAwMFwiICsgKDQwICsgZXh0cmFWaW5pY3VsdW0pICsgXCJcXG5INzQydlwiICsgdmVydFNlZ21lbnQgKyBcImwtNCA0LTQgNGMtLjY2Ny43IC0yIDEuNS00IDIuNXMtNC4xNjcgMS44MzMtNi41IDIuNS01LjUgMS05LjUgMVxcbmgtMTJsLTI4LTg0Yy0xNi42NjctNTItOTYuNjY3IC0yOTQuMzMzLTI0MC03MjdsLTIxMiAtNjQzIC04NSAxNzBcXG5jLTQtMy4zMzMtOC4zMzMtNy42NjctMTMgLTEzbC0xMy0xM2w3Ny0xNTUgNzctMTU2YzY2IDE5OS4zMzMgMTM5IDQxOS42NjdcXG4yMTkgNjYxIGwyMTggNjYxek03MDIgXCIgKyBoTGluZVBhZCArIFwiSDQwMDAwMHZcIiArICg0MCArIGV4dHJhVmluaWN1bHVtKSArIFwiSDc0MnpcIjtcbn07XG5cbnZhciBzcXJ0UGF0aCA9IGZ1bmN0aW9uIHNxcnRQYXRoKHNpemUsIGV4dHJhVmluaWN1bHVtLCB2aWV3Qm94SGVpZ2h0KSB7XG4gIGV4dHJhVmluaWN1bHVtID0gMTAwMCAqIGV4dHJhVmluaWN1bHVtOyAvLyBDb252ZXJ0IGZyb20gZG9jdW1lbnQgZW1zIHRvIHZpZXdCb3guXG5cbiAgdmFyIHBhdGggPSBcIlwiO1xuXG4gIHN3aXRjaCAoc2l6ZSkge1xuICAgIGNhc2UgXCJzcXJ0TWFpblwiOlxuICAgICAgcGF0aCA9IHNxcnRNYWluKGV4dHJhVmluaWN1bHVtLCBoTGluZVBhZCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJzcXJ0U2l6ZTFcIjpcbiAgICAgIHBhdGggPSBzcXJ0U2l6ZTEoZXh0cmFWaW5pY3VsdW0sIGhMaW5lUGFkKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInNxcnRTaXplMlwiOlxuICAgICAgcGF0aCA9IHNxcnRTaXplMihleHRyYVZpbmljdWx1bSwgaExpbmVQYWQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwic3FydFNpemUzXCI6XG4gICAgICBwYXRoID0gc3FydFNpemUzKGV4dHJhVmluaWN1bHVtLCBoTGluZVBhZCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJzcXJ0U2l6ZTRcIjpcbiAgICAgIHBhdGggPSBzcXJ0U2l6ZTQoZXh0cmFWaW5pY3VsdW0sIGhMaW5lUGFkKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInNxcnRUYWxsXCI6XG4gICAgICBwYXRoID0gc3FydFRhbGwoZXh0cmFWaW5pY3VsdW0sIGhMaW5lUGFkLCB2aWV3Qm94SGVpZ2h0KTtcbiAgfVxuXG4gIHJldHVybiBwYXRoO1xufTtcbnZhciBzdmdHZW9tZXRyeV9wYXRoID0ge1xuICAvLyBUaGUgZG91YmxlbGVmdGFycm93IGdlb21ldHJ5IGlzIGZyb20gZ2x5cGggVSsyMUQwIGluIHRoZSBmb250IEthVGVYIE1haW5cbiAgZG91YmxlbGVmdGFycm93OiBcIk0yNjIgMTU3XFxubDEwLTEwYzM0LTM2IDYyLjctNzcgODYtMTIzIDMuMy04IDUtMTMuMyA1LTE2IDAtNS4zLTYuNy04LTIwLTgtNy4zXFxuIDAtMTIuMi41LTE0LjUgMS41LTIuMyAxLTQuOCA0LjUtNy41IDEwLjUtNDkuMyA5Ny4zLTEyMS43IDE2OS4zLTIxNyAyMTYtMjhcXG4gMTQtNTcuMyAyNS04OCAzMy02LjcgMi0xMSAzLjgtMTMgNS41LTIgMS43LTMgNC4yLTMgNy41czEgNS44IDMgNy41XFxuYzIgMS43IDYuMyAzLjUgMTMgNS41IDY4IDE3LjMgMTI4LjIgNDcuOCAxODAuNSA5MS41IDUyLjMgNDMuNyA5My44IDk2LjIgMTI0LjVcXG4gMTU3LjUgOS4zIDggMTUuMyAxMi4zIDE4IDEzaDZjMTItLjcgMTgtNCAxOC0xMCAwLTItMS43LTctNS0xNS0yMy4zLTQ2LTUyLTg3XFxuLTg2LTEyM2wtMTAtMTBoMzk5NzM4di00MEgyMThjMzI4IDAgMCAwIDAgMGwtMTAtOGMtMjYuNy0yMC02NS43LTQzLTExNy02OSAyLjdcXG4tMiA2LTMuNyAxMC01IDM2LjctMTYgNzIuMy0zNy4zIDEwNy02NGwxMC04aDM5OTc4MnYtNDB6XFxubTggMHY0MGgzOTk3MzB2LTQwem0wIDE5NHY0MGgzOTk3MzB2LTQwelwiLFxuICAvLyBkb3VibGVyaWdodGFycm93IGlzIGZyb20gZ2x5cGggVSsyMUQyIGluIGZvbnQgS2FUZVggTWFpblxuICBkb3VibGVyaWdodGFycm93OiBcIk0zOTk3MzggMzkybFxcbi0xMCAxMGMtMzQgMzYtNjIuNyA3Ny04NiAxMjMtMy4zIDgtNSAxMy4zLTUgMTYgMCA1LjMgNi43IDggMjAgOCA3LjMgMCAxMi4yLS41XFxuIDE0LjUtMS41IDIuMy0xIDQuOC00LjUgNy41LTEwLjUgNDkuMy05Ny4zIDEyMS43LTE2OS4zIDIxNy0yMTYgMjgtMTQgNTcuMy0yNSA4OFxcbi0zMyA2LjctMiAxMS0zLjggMTMtNS41IDItMS43IDMtNC4yIDMtNy41cy0xLTUuOC0zLTcuNWMtMi0xLjctNi4zLTMuNS0xMy01LjUtNjhcXG4tMTcuMy0xMjguMi00Ny44LTE4MC41LTkxLjUtNTIuMy00My43LTkzLjgtOTYuMi0xMjQuNS0xNTcuNS05LjMtOC0xNS4zLTEyLjMtMThcXG4tMTNoLTZjLTEyIC43LTE4IDQtMTggMTAgMCAyIDEuNyA3IDUgMTUgMjMuMyA0NiA1MiA4NyA4NiAxMjNsMTAgMTBIMHY0MGgzOTk3ODJcXG5jLTMyOCAwIDAgMCAwIDBsMTAgOGMyNi43IDIwIDY1LjcgNDMgMTE3IDY5LTIuNyAyLTYgMy43LTEwIDUtMzYuNyAxNi03Mi4zIDM3LjNcXG4tMTA3IDY0bC0xMCA4SDB2NDB6TTAgMTU3djQwaDM5OTczMHYtNDB6bTAgMTk0djQwaDM5OTczMHYtNDB6XCIsXG4gIC8vIGxlZnRhcnJvdyBpcyBmcm9tIGdseXBoIFUrMjE5MCBpbiBmb250IEthVGVYIE1haW5cbiAgbGVmdGFycm93OiBcIk00MDAwMDAgMjQxSDExMGwzLTNjNjguNy01Mi43IDExMy43LTEyMFxcbiAxMzUtMjAyIDQtMTQuNyA2LTIzIDYtMjUgMC03LjMtNy0xMS0yMS0xMS04IDAtMTMuMi44LTE1LjUgMi41LTIuMyAxLjctNC4yIDUuOFxcbi01LjUgMTIuNS0xLjMgNC43LTIuNyAxMC4zLTQgMTctMTIgNDguNy0zNC44IDkyLTY4LjUgMTMwUzY1LjMgMjI4LjMgMTggMjQ3XFxuYy0xMCA0LTE2IDcuNy0xOCAxMSAwIDguNyA2IDE0LjMgMTggMTcgNDcuMyAxOC43IDg3LjggNDcgMTIxLjUgODVTMTk2IDQ0MS4zIDIwOFxcbiA0OTBjLjcgMiAxLjMgNSAyIDlzMS4yIDYuNyAxLjUgOGMuMyAxLjMgMSAzLjMgMiA2czIuMiA0LjUgMy41IDUuNWMxLjMgMSAzLjNcXG4gMS44IDYgMi41czYgMSAxMCAxYzE0IDAgMjEtMy43IDIxLTExIDAtMi0yLTEwLjMtNi0yNS0yMC03OS4zLTY1LTE0Ni43LTEzNS0yMDJcXG4gbC0zLTNoMzk5ODkwek0xMDAgMjQxdjQwaDM5OTkwMHYtNDB6XCIsXG4gIC8vIG92ZXJicmFjZSBpcyBmcm9tIGdseXBocyBVKzIzQTkvMjNBOC8yM0E3IGluIGZvbnQgS2FUZVhfU2l6ZTQtUmVndWxhclxuICBsZWZ0YnJhY2U6IFwiTTYgNTQ4bC02LTZ2LTM1bDYtMTFjNTYtMTA0IDEzNS4zLTE4MS4zIDIzOC0yMzIgNTcuMy0yOC43IDExN1xcbi00NSAxNzktNTBoMzk5NTc3djEyMEg0MDNjLTQzLjMgNy04MSAxNS0xMTMgMjYtMTAwLjcgMzMtMTc5LjcgOTEtMjM3IDE3NC0yLjdcXG4gNS02IDktMTAgMTMtLjcgMS03LjMgMS0yMCAxSDZ6XCIsXG4gIGxlZnRicmFjZXVuZGVyOiBcIk0wIDZsNi02aDE3YzEyLjY4OCAwIDE5LjMxMy4zIDIwIDEgNCA0IDcuMzEzIDguMyAxMCAxM1xcbiAzNS4zMTMgNTEuMyA4MC44MTMgOTMuOCAxMzYuNSAxMjcuNSA1NS42ODggMzMuNyAxMTcuMTg4IDU1LjggMTg0LjUgNjYuNS42ODhcXG4gMCAyIC4zIDQgMSAxOC42ODggMi43IDc2IDQuMyAxNzIgNWgzOTk0NTB2MTIwSDQyOWwtNi0xYy0xMjQuNjg4LTgtMjM1LTYxLjdcXG4tMzMxLTE2MUM2MC42ODcgMTM4LjcgMzIuMzEyIDk5LjMgNyA1NEwwIDQxVjZ6XCIsXG4gIC8vIG92ZXJncm91cCBpcyBmcm9tIHRoZSBNblN5bWJvbCBwYWNrYWdlIChwdWJsaWMgZG9tYWluKVxuICBsZWZ0Z3JvdXA6IFwiTTQwMDAwMCA4MFxcbkg0MzVDNjQgODAgMTY4LjMgMjI5LjQgMjEgMjYwYy01LjkgMS4yLTE4IDAtMTggMC0yIDAtMy0xLTMtM3YtMzhDNzYgNjEgMjU3IDBcXG4gNDM1IDBoMzk5NTY1elwiLFxuICBsZWZ0Z3JvdXB1bmRlcjogXCJNNDAwMDAwIDI2Mlxcbkg0MzVDNjQgMjYyIDE2OC4zIDExMi42IDIxIDgyYy01LjktMS4yLTE4IDAtMTggMC0yIDAtMyAxLTMgM3YzOGM3NiAxNTggMjU3IDIxOVxcbiA0MzUgMjE5aDM5OTU2NXpcIixcbiAgLy8gSGFycG9vbnMgYXJlIGZyb20gZ2x5cGggVSsyMUJEIGluIGZvbnQgS2FUZVggTWFpblxuICBsZWZ0aGFycG9vbjogXCJNMCAyNjdjLjcgNS4zIDMgMTAgNyAxNGgzOTk5OTN2LTQwSDkzYzMuM1xcbi0zLjMgMTAuMi05LjUgMjAuNS0xOC41czE3LjgtMTUuOCAyMi41LTIwLjVjNTAuNy01MiA4OC0xMTAuMyAxMTItMTc1IDQtMTEuMyA1XFxuLTE4LjMgMy0yMS0xLjMtNC03LjMtNi0xOC02LTggMC0xMyAuNy0xNSAycy00LjcgNi43LTggMTZjLTQyIDk4LjctMTA3LjMgMTc0LjdcXG4tMTk2IDIyOC02LjcgNC43LTEwLjcgOC0xMiAxMC0xLjMgMi0yIDUuNy0yIDExem0xMDAtMjZ2NDBoMzk5OTAwdi00MHpcIixcbiAgbGVmdGhhcnBvb25wbHVzOiBcIk0wIDI2N2MuNyA1LjMgMyAxMCA3IDE0aDM5OTk5M3YtNDBIOTNjMy4zLTMuMyAxMC4yLTkuNVxcbiAyMC41LTE4LjVzMTcuOC0xNS44IDIyLjUtMjAuNWM1MC43LTUyIDg4LTExMC4zIDExMi0xNzUgNC0xMS4zIDUtMTguMyAzLTIxLTEuM1xcbi00LTcuMy02LTE4LTYtOCAwLTEzIC43LTE1IDJzLTQuNyA2LjctOCAxNmMtNDIgOTguNy0xMDcuMyAxNzQuNy0xOTYgMjI4LTYuNyA0LjdcXG4tMTAuNyA4LTEyIDEwLTEuMyAyLTIgNS43LTIgMTF6bTEwMC0yNnY0MGgzOTk5MDB2LTQwek0wIDQzNXY0MGg0MDAwMDB2LTQwelxcbm0wIDB2NDBoNDAwMDAwdi00MHpcIixcbiAgbGVmdGhhcnBvb25kb3duOiBcIk03IDI0MWMtNCA0LTYuMzMzIDguNjY3LTcgMTQgMCA1LjMzMy42NjcgOSAyIDExczUuMzMzXFxuIDUuMzMzIDEyIDEwYzkwLjY2NyA1NCAxNTYgMTMwIDE5NiAyMjggMy4zMzMgMTAuNjY3IDYuMzMzIDE2LjMzMyA5IDE3IDIgLjY2NyA1XFxuIDEgOSAxaDVjMTAuNjY3IDAgMTYuNjY3LTIgMTgtNiAyLTIuNjY3IDEtOS42NjctMy0yMS0zMi04Ny4zMzMtODIuNjY3LTE1Ny42NjdcXG4tMTUyLTIxMWwtMy0zaDM5OTkwN3YtNDB6TTkzIDI4MSBINDAwMDAwIHYtNDBMNyAyNDF6XCIsXG4gIGxlZnRoYXJwb29uZG93bnBsdXM6IFwiTTcgNDM1Yy00IDQtNi4zIDguNy03IDE0IDAgNS4zLjcgOSAyIDExczUuMyA1LjMgMTJcXG4gMTBjOTAuNyA1NCAxNTYgMTMwIDE5NiAyMjggMy4zIDEwLjcgNi4zIDE2LjMgOSAxNyAyIC43IDUgMSA5IDFoNWMxMC43IDAgMTYuN1xcbi0yIDE4LTYgMi0yLjcgMS05LjctMy0yMS0zMi04Ny4zLTgyLjctMTU3LjctMTUyLTIxMWwtMy0zaDM5OTkwN3YtNDBIN3ptOTMgMFxcbnY0MGgzOTk5MDB2LTQwek0wIDI0MXY0MGgzOTk5MDB2LTQwem0wIDB2NDBoMzk5OTAwdi00MHpcIixcbiAgLy8gaG9vayBpcyBmcm9tIGdseXBoIFUrMjFBOSBpbiBmb250IEthVGVYIE1haW5cbiAgbGVmdGhvb2s6IFwiTTQwMDAwMCAyODEgSDEwM3MtMzMtMTEuMi02MS0zMy41UzAgMTk3LjMgMCAxNjRzMTQuMi02MS4yIDQyLjVcXG4tODMuNUM3MC44IDU4LjIgMTA0IDQ3IDE0MiA0NyBjMTYuNyAwIDI1IDYuNyAyNSAyMCAwIDEyLTguNyAxOC43LTI2IDIwLTQwIDMuM1xcbi02OC43IDE1LjctODYgMzctMTAgMTItMTUgMjUuMy0xNSA0MCAwIDIyLjcgOS44IDQwLjcgMjkuNSA1NCAxOS43IDEzLjMgNDMuNSAyMVxcbiA3MS41IDIzaDM5OTg1OXpNMTAzIDI4MXYtNDBoMzk5ODk3djQwelwiLFxuICBsZWZ0bGluZXNlZ21lbnQ6IFwiTTQwIDI4MSBWNDI4IEgwIFY5NCBINDAgVjI0MSBINDAwMDAwIHY0MHpcXG5NNDAgMjgxIFY0MjggSDAgVjk0IEg0MCBWMjQxIEg0MDAwMDAgdjQwelwiLFxuICBsZWZ0bWFwc3RvOiBcIk00MCAyODEgVjQ0OEgwVjc0SDQwVjI0MUg0MDAwMDB2NDB6XFxuTTQwIDI4MSBWNDQ4SDBWNzRINDBWMjQxSDQwMDAwMHY0MHpcIixcbiAgLy8gdG9mcm9tIGlzIGZyb20gZ2x5cGggVSsyMUM0IGluIGZvbnQgS2FUZVggQU1TIFJlZ3VsYXJcbiAgbGVmdFRvRnJvbTogXCJNMCAxNDdoNDAwMDAwdjQwSDB6bTAgMjE0YzY4IDQwIDExNS43IDk1LjcgMTQzIDE2N2gyMmMxNS4zIDAgMjNcXG4tLjMgMjMtMSAwLTEuMy01LjMtMTMuNy0xNi0zNy0xOC0zNS4zLTQxLjMtNjktNzAtMTAxbC03LThoMzk5OTA1di00MEg5NWw3LThcXG5jMjguNy0zMiA1Mi02NS43IDcwLTEwMSAxMC43LTIzLjMgMTYtMzUuNyAxNi0zNyAwLS43LTcuNy0xLTIzLTFoLTIyQzExNS43IDI2NS4zXFxuIDY4IDMyMSAwIDM2MXptMC0xNzR2LTQwaDM5OTkwMHY0MHptMTAwIDE1NHY0MGgzOTk5MDB2LTQwelwiLFxuICBsb25nZXF1YWw6IFwiTTAgNTAgaDQwMDAwMCB2NDBIMHogbTAgMTk0aDQwMDAwdjQwSDB6XFxuTTAgNTAgaDQwMDAwMCB2NDBIMHogbTAgMTk0aDQwMDAwdjQwSDB6XCIsXG4gIG1pZGJyYWNlOiBcIk0yMDA0MjggMzM0XFxuYy0xMDAuNy04LjMtMTk1LjMtNDQtMjgwLTEwOC01NS4zLTQyLTEwMS43LTkzLTEzOS0xNTNsLTktMTRjLTIuNyA0LTUuNyA4LjctOSAxNFxcbi01My4zIDg2LjctMTIzLjcgMTUzLTIxMSAxOTktNjYuNyAzNi0xMzcuMyA1Ni4zLTIxMiA2MkgwVjIxNGgxOTk1NjhjMTc4LjMtMTEuN1xcbiAzMTEuNy03OC4zIDQwMy0yMDEgNi04IDkuNy0xMiAxMS0xMiAuNy0uNyA2LjctMSAxOC0xczE3LjMuMyAxOCAxYzEuMyAwIDUgNCAxMVxcbiAxMiA0NC43IDU5LjMgMTAxLjMgMTA2LjMgMTcwIDE0MXMxNDUuMyA1NC4zIDIyOSA2MGgxOTk1NzJ2MTIwelwiLFxuICBtaWRicmFjZXVuZGVyOiBcIk0xOTk1NzIgMjE0XFxuYzEwMC43IDguMyAxOTUuMyA0NCAyODAgMTA4IDU1LjMgNDIgMTAxLjcgOTMgMTM5IDE1M2w5IDE0YzIuNy00IDUuNy04LjcgOS0xNFxcbiA1My4zLTg2LjcgMTIzLjctMTUzIDIxMS0xOTkgNjYuNy0zNiAxMzcuMy01Ni4zIDIxMi02MmgxOTk1Njh2MTIwSDIwMDQzMmMtMTc4LjNcXG4gMTEuNy0zMTEuNyA3OC4zLTQwMyAyMDEtNiA4LTkuNyAxMi0xMSAxMi0uNy43LTYuNyAxLTE4IDFzLTE3LjMtLjMtMTgtMWMtMS4zIDBcXG4tNS00LTExLTEyLTQ0LjctNTkuMy0xMDEuMy0xMDYuMy0xNzAtMTQxcy0xNDUuMy01NC4zLTIyOS02MEgwVjIxNHpcIixcbiAgb2lpbnRTaXplMTogXCJNNTEyLjYgNzEuNmMyNzIuNiAwIDMyMC4zIDEwNi44IDMyMC4zIDE3OC4yIDAgNzAuOC00Ny43IDE3Ny42XFxuLTMyMC4zIDE3Ny42UzE5My4xIDMyMC42IDE5My4xIDI0OS44YzAtNzEuNCA0Ni45LTE3OC4yIDMxOS41LTE3OC4yelxcbm0zNjguMSAxNzguMmMwLTg2LjQtNjAuOS0yMTUuNC0zNjguMS0yMTUuNC0zMDYuNCAwLTM2Ny4zIDEyOS0zNjcuMyAyMTUuNCAwIDg1LjhcXG42MC45IDIxNC44IDM2Ny4zIDIxNC44IDMwNy4yIDAgMzY4LjEtMTI5IDM2OC4xLTIxNC44elwiLFxuICBvaWludFNpemUyOiBcIk03NTcuOCAxMDAuMWMzODQuNyAwIDQ1MS4xIDEzNy42IDQ1MS4xIDIzMCAwIDkxLjMtNjYuNCAyMjguOFxcbi00NTEuMSAyMjguOC0zODYuMyAwLTQ1Mi43LTEzNy41LTQ1Mi43LTIyOC44IDAtOTIuNCA2Ni40LTIzMCA0NTIuNy0yMzB6XFxubTUwMi40IDIzMGMwLTExMS4yLTgyLjQtMjc3LjItNTAyLjQtMjc3LjJzLTUwNCAxNjYtNTA0IDI3Ny4yXFxuYzAgMTEwIDg0IDI3NiA1MDQgMjc2czUwMi40LTE2NiA1MDIuNC0yNzZ6XCIsXG4gIG9paWludFNpemUxOiBcIk02ODEuNCA3MS42YzQwOC45IDAgNDgwLjUgMTA2LjggNDgwLjUgMTc4LjIgMCA3MC44LTcxLjYgMTc3LjZcXG4tNDgwLjUgMTc3LjZTMjAyLjEgMzIwLjYgMjAyLjEgMjQ5LjhjMC03MS40IDcwLjUtMTc4LjIgNDc5LjMtMTc4LjJ6XFxubTUyNS44IDE3OC4yYzAtODYuNC04Ni44LTIxNS40LTUyNS43LTIxNS40LTQzNy45IDAtNTI0LjcgMTI5LTUyNC43IDIxNS40IDBcXG44NS44IDg2LjggMjE0LjggNTI0LjcgMjE0LjggNDM4LjkgMCA1MjUuNy0xMjkgNTI1LjctMjE0Ljh6XCIsXG4gIG9paWludFNpemUyOiBcIk0xMDIxLjIgNTNjNjAzLjYgMCA3MDcuOCAxNjUuOCA3MDcuOCAyNzcuMiAwIDExMC0xMDQuMiAyNzUuOFxcbi03MDcuOCAyNzUuOC02MDYgMC03MTAuMi0xNjUuOC03MTAuMi0yNzUuOEMzMTEgMjE4LjggNDE1LjIgNTMgMTAyMS4yIDUzelxcbm03NzAuNCAyNzcuMWMwLTEzMS4yLTEyNi40LTMyNy42LTc3MC41LTMyNy42UzI0OC40IDE5OC45IDI0OC40IDMzMC4xXFxuYzAgMTMwIDEyOC44IDMyNi40IDc3Mi43IDMyNi40czc3MC41LTE5Ni40IDc3MC41LTMyNi40elwiLFxuICByaWdodGFycm93OiBcIk0wIDI0MXY0MGgzOTk4OTFjLTQ3LjMgMzUuMy04NCA3OC0xMTAgMTI4XFxuLTE2LjcgMzItMjcuNyA2My43LTMzIDk1IDAgMS4zLS4yIDIuNy0uNSA0LS4zIDEuMy0uNSAyLjMtLjUgMyAwIDcuMyA2LjcgMTEgMjBcXG4gMTEgOCAwIDEzLjItLjggMTUuNS0yLjUgMi4zLTEuNyA0LjItNS41IDUuNS0xMS41IDItMTMuMyA1LjctMjcgMTEtNDEgMTQuNy00NC43XFxuIDM5LTg0LjUgNzMtMTE5LjVzNzMuNy02MC4yIDExOS03NS41YzYtMiA5LTUuNyA5LTExcy0zLTktOS0xMWMtNDUuMy0xNS4zLTg1XFxuLTQwLjUtMTE5LTc1LjVzLTU4LjMtNzQuOC03My0xMTkuNWMtNC43LTE0LTguMy0yNy4zLTExLTQwLTEuMy02LjctMy4yLTEwLjgtNS41XFxuLTEyLjUtMi4zLTEuNy03LjUtMi41LTE1LjUtMi41LTE0IDAtMjEgMy43LTIxIDExIDAgMiAyIDEwLjMgNiAyNSAyMC43IDgzLjMgNjdcXG4gMTUxLjcgMTM5IDIwNXptMCAwdjQwaDM5OTkwMHYtNDB6XCIsXG4gIHJpZ2h0YnJhY2U6IFwiTTQwMDAwMCA1NDJsXFxuLTYgNmgtMTdjLTEyLjcgMC0xOS4zLS4zLTIwLTEtNC00LTcuMy04LjMtMTAtMTMtMzUuMy01MS4zLTgwLjgtOTMuOC0xMzYuNS0xMjcuNVxcbnMtMTE3LjItNTUuOC0xODQuNS02Ni41Yy0uNyAwLTItLjMtNC0xLTE4LjctMi43LTc2LTQuMy0xNzItNUgwVjIxNGgzOTk1NzFsNiAxXFxuYzEyNC43IDggMjM1IDYxLjcgMzMxIDE2MSAzMS4zIDMzLjMgNTkuNyA3Mi43IDg1IDExOGw3IDEzdjM1elwiLFxuICByaWdodGJyYWNldW5kZXI6IFwiTTM5OTk5NCAwbDYgNnYzNWwtNiAxMWMtNTYgMTA0LTEzNS4zIDE4MS4zLTIzOCAyMzItNTcuM1xcbiAyOC43LTExNyA0NS0xNzkgNTBILTMwMFYyMTRoMzk5ODk3YzQzLjMtNyA4MS0xNSAxMTMtMjYgMTAwLjctMzMgMTc5LjctOTEgMjM3XFxuLTE3NCAyLjctNSA2LTkgMTAtMTMgLjctMSA3LjMtMSAyMC0xaDE3elwiLFxuICByaWdodGdyb3VwOiBcIk0wIDgwaDM5OTU2NWMzNzEgMCAyNjYuNyAxNDkuNCA0MTQgMTgwIDUuOSAxLjIgMTggMCAxOCAwIDIgMFxcbiAzLTEgMy0zdi0zOGMtNzYtMTU4LTI1Ny0yMTktNDM1LTIxOUgwelwiLFxuICByaWdodGdyb3VwdW5kZXI6IFwiTTAgMjYyaDM5OTU2NWMzNzEgMCAyNjYuNy0xNDkuNCA0MTQtMTgwIDUuOS0xLjIgMTggMCAxOFxcbiAwIDIgMCAzIDEgMyAzdjM4Yy03NiAxNTgtMjU3IDIxOS00MzUgMjE5SDB6XCIsXG4gIHJpZ2h0aGFycG9vbjogXCJNMCAyNDF2NDBoMzk5OTkzYzQuNy00LjcgNy05LjMgNy0xNCAwLTkuM1xcbi0zLjctMTUuMy0xMS0xOC05Mi43LTU2LjctMTU5LTEzMy43LTE5OS0yMzEtMy4zLTkuMy02LTE0LjctOC0xNi0yLTEuMy03LTItMTUtMlxcbi0xMC43IDAtMTYuNyAyLTE4IDYtMiAyLjctMSA5LjcgMyAyMSAxNS4zIDQyIDM2LjcgODEuOCA2NCAxMTkuNSAyNy4zIDM3LjcgNThcXG4gNjkuMiA5MiA5NC41em0wIDB2NDBoMzk5OTAwdi00MHpcIixcbiAgcmlnaHRoYXJwb29ucGx1czogXCJNMCAyNDF2NDBoMzk5OTkzYzQuNy00LjcgNy05LjMgNy0xNCAwLTkuMy0zLjctMTUuMy0xMVxcbi0xOC05Mi43LTU2LjctMTU5LTEzMy43LTE5OS0yMzEtMy4zLTkuMy02LTE0LjctOC0xNi0yLTEuMy03LTItMTUtMi0xMC43IDAtMTYuN1xcbiAyLTE4IDYtMiAyLjctMSA5LjcgMyAyMSAxNS4zIDQyIDM2LjcgODEuOCA2NCAxMTkuNSAyNy4zIDM3LjcgNTggNjkuMiA5MiA5NC41elxcbm0wIDB2NDBoMzk5OTAwdi00MHogbTEwMCAxOTR2NDBoMzk5OTAwdi00MHptMCAwdjQwaDM5OTkwMHYtNDB6XCIsXG4gIHJpZ2h0aGFycG9vbmRvd246IFwiTTM5OTc0NyA1MTFjMCA3LjMgNi43IDExIDIwIDExIDggMCAxMy0uOCAxNS0yLjVzNC43LTYuOFxcbiA4LTE1LjVjNDAtOTQgOTkuMy0xNjYuMyAxNzgtMjE3IDEzLjMtOCAyMC4zLTEyLjMgMjEtMTMgNS4zLTMuMyA4LjUtNS44IDkuNVxcbi03LjUgMS0xLjcgMS41LTUuMiAxLjUtMTAuNXMtMi4zLTEwLjMtNy0xNUgwdjQwaDM5OTkwOGMtMzQgMjUuMy02NC43IDU3LTkyIDk1XFxuLTI3LjMgMzgtNDguNyA3Ny43LTY0IDExOS0zLjMgOC43LTUgMTQtNSAxNnpNMCAyNDF2NDBoMzk5OTAwdi00MHpcIixcbiAgcmlnaHRoYXJwb29uZG93bnBsdXM6IFwiTTM5OTc0NyA3MDVjMCA3LjMgNi43IDExIDIwIDExIDggMCAxMy0uOFxcbiAxNS0yLjVzNC43LTYuOCA4LTE1LjVjNDAtOTQgOTkuMy0xNjYuMyAxNzgtMjE3IDEzLjMtOCAyMC4zLTEyLjMgMjEtMTMgNS4zLTMuM1xcbiA4LjUtNS44IDkuNS03LjUgMS0xLjcgMS41LTUuMiAxLjUtMTAuNXMtMi4zLTEwLjMtNy0xNUgwdjQwaDM5OTkwOGMtMzQgMjUuM1xcbi02NC43IDU3LTkyIDk1LTI3LjMgMzgtNDguNyA3Ny43LTY0IDExOS0zLjMgOC43LTUgMTQtNSAxNnpNMCA0MzV2NDBoMzk5OTAwdi00MHpcXG5tMC0xOTR2NDBoNDAwMDAwdi00MHptMCAwdjQwaDQwMDAwMHYtNDB6XCIsXG4gIHJpZ2h0aG9vazogXCJNMzk5ODU5IDI0MWMtNzY0IDAgMCAwIDAgMCA0MC0zLjMgNjguNy0xNS43IDg2LTM3IDEwLTEyIDE1LTI1LjNcXG4gMTUtNDAgMC0yMi43LTkuOC00MC43LTI5LjUtNTQtMTkuNy0xMy4zLTQzLjUtMjEtNzEuNS0yMy0xNy4zLTEuMy0yNi04LTI2LTIwIDBcXG4tMTMuMyA4LjctMjAgMjYtMjAgMzggMCA3MSAxMS4yIDk5IDMzLjUgMCAwIDcgNS42IDIxIDE2LjcgMTQgMTEuMiAyMSAzMy41IDIxXFxuIDY2LjhzLTE0IDYxLjItNDIgODMuNWMtMjggMjIuMy02MSAzMy41LTk5IDMzLjVMMCAyNDF6IE0wIDI4MXYtNDBoMzk5ODU5djQwelwiLFxuICByaWdodGxpbmVzZWdtZW50OiBcIk0zOTk5NjAgMjQxIFY5NCBoNDAgVjQyOCBoLTQwIFYyODEgSDAgdi00MHpcXG5NMzk5OTYwIDI0MSBWOTQgaDQwIFY0MjggaC00MCBWMjgxIEgwIHYtNDB6XCIsXG4gIHJpZ2h0VG9Gcm9tOiBcIk00MDAwMDAgMTY3Yy03MC43LTQyLTExOC05Ny43LTE0Mi0xNjdoLTIzYy0xNS4zIDAtMjMgLjMtMjNcXG4gMSAwIDEuMyA1LjMgMTMuNyAxNiAzNyAxOCAzNS4zIDQxLjMgNjkgNzAgMTAxbDcgOEgwdjQwaDM5OTkwNWwtNyA4Yy0yOC43IDMyXFxuLTUyIDY1LjctNzAgMTAxLTEwLjcgMjMuMy0xNiAzNS43LTE2IDM3IDAgLjcgNy43IDEgMjMgMWgyM2MyNC02OS4zIDcxLjMtMTI1IDE0Mlxcbi0xNjd6IE0xMDAgMTQ3djQwaDM5OTkwMHYtNDB6TTAgMzQxdjQwaDM5OTkwMHYtNDB6XCIsXG4gIC8vIHR3b2hlYWRsZWZ0YXJyb3cgaXMgZnJvbSBnbHlwaCBVKzIxOUUgaW4gZm9udCBLYVRlWCBBTVMgUmVndWxhclxuICB0d29oZWFkbGVmdGFycm93OiBcIk0wIDE2N2M2OCA0MFxcbiAxMTUuNyA5NS43IDE0MyAxNjdoMjJjMTUuMyAwIDIzLS4zIDIzLTEgMC0xLjMtNS4zLTEzLjctMTYtMzctMTgtMzUuMy00MS4zLTY5XFxuLTcwLTEwMWwtNy04aDEyNWw5IDdjNTAuNyAzOS4zIDg1IDg2IDEwMyAxNDBoNDZjMC00LjctNi4zLTE4LjctMTktNDItMTgtMzUuM1xcbi00MC02Ny4zLTY2LTk2bC05LTloMzk5NzE2di00MEgyODRsOS05YzI2LTI4LjcgNDgtNjAuNyA2Ni05NiAxMi43LTIzLjMzMyAxOVxcbi0zNy4zMzMgMTktNDJoLTQ2Yy0xOCA1NC01Mi4zIDEwMC43LTEwMyAxNDBsLTkgN0g5NWw3LThjMjguNy0zMiA1Mi02NS43IDcwLTEwMVxcbiAxMC43LTIzLjMzMyAxNi0zNS43IDE2LTM3IDAtLjctNy43LTEtMjMtMWgtMjJDMTE1LjcgNzEuMyA2OCAxMjcgMCAxNjd6XCIsXG4gIHR3b2hlYWRyaWdodGFycm93OiBcIk00MDAwMDAgMTY3XFxuYy02OC00MC0xMTUuNy05NS43LTE0My0xNjdoLTIyYy0xNS4zIDAtMjMgLjMtMjMgMSAwIDEuMyA1LjMgMTMuNyAxNiAzNyAxOCAzNS4zXFxuIDQxLjMgNjkgNzAgMTAxbDcgOGgtMTI1bC05LTdjLTUwLjctMzkuMy04NS04Ni0xMDMtMTQwaC00NmMwIDQuNyA2LjMgMTguNyAxOSA0MlxcbiAxOCAzNS4zIDQwIDY3LjMgNjYgOTZsOSA5SDB2NDBoMzk5NzE2bC05IDljLTI2IDI4LjctNDggNjAuNy02NiA5Ni0xMi43IDIzLjMzM1xcbi0xOSAzNy4zMzMtMTkgNDJoNDZjMTgtNTQgNTIuMy0xMDAuNyAxMDMtMTQwbDktN2gxMjVsLTcgOGMtMjguNyAzMi01MiA2NS43LTcwXFxuIDEwMS0xMC43IDIzLjMzMy0xNiAzNS43LTE2IDM3IDAgLjcgNy43IDEgMjMgMWgyMmMyNy4zLTcxLjMgNzUtMTI3IDE0My0xNjd6XCIsXG4gIC8vIHRpbGRlMSBpcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgYSBnbHlwaCBmcm9tIHRoZSBNblN5bWJvbCBwYWNrYWdlXG4gIHRpbGRlMTogXCJNMjAwIDU1LjUzOGMtNzcgMC0xNjggNzMuOTUzLTE3NyA3My45NTMtMyAwLTdcXG4tMi4xNzUtOS01LjQzN0wyIDk3Yy0xLTItMi00LTItNiAwLTQgMi03IDUtOWwyMC0xMkMxMTYgMTIgMTcxIDAgMjA3IDBjODYgMFxcbiAxMTQgNjggMTkxIDY4IDc4IDAgMTY4LTY4IDE3Ny02OCA0IDAgNyAyIDkgNWwxMiAxOWMxIDIuMTc1IDIgNC4zNSAyIDYuNTI1IDBcXG4gNC4zNS0yIDcuNjEzLTUgOS43ODhsLTE5IDEzLjA1Yy05MiA2My4wNzctMTE2LjkzNyA3NS4zMDgtMTgzIDc2LjEyOFxcbi02OC4yNjcuODQ3LTExMy03My45NTItMTkxLTczLjk1MnpcIixcbiAgLy8gZGl0dG8gdGlsZGUyLCB0aWxkZTMsICYgdGlsZGU0XG4gIHRpbGRlMjogXCJNMzQ0IDU1LjI2NmMtMTQyIDAtMzAwLjYzOCA4MS4zMTYtMzExLjUgODYuNDE4XFxuLTguMDEgMy43NjItMjIuNSAxMC45MS0yMy41IDUuNTYyTDEgMTIwYy0xLTItMS0zLTEtNCAwLTUgMy05IDgtMTBsMTguNC05QzE2MC45XFxuIDMxLjkgMjgzIDAgMzU4IDBjMTQ4IDAgMTg4IDEyMiAzMzEgMTIyczMxNC05NyAzMjYtOTdjNCAwIDggMiAxMCA3bDcgMjEuMTE0XFxuYzEgMi4xNCAxIDMuMjEgMSA0LjI4IDAgNS4zNDctMyA5LjYyNi03IDEwLjY5NmwtMjIuMyAxMi42MjJDODUyLjYgMTU4LjM3MiA3NTFcXG4gMTgxLjQ3NiA2NzYgMTgxLjQ3NmMtMTQ5IDAtMTg5LTEyNi4yMS0zMzItMTI2LjIxelwiLFxuICB0aWxkZTM6IFwiTTc4NiA1OUM0NTcgNTkgMzIgMTc1LjI0MiAxMyAxNzUuMjQyYy02IDAtMTAtMy40NTdcXG4tMTEtMTAuMzdMLjE1IDEzOGMtMS03IDMtMTIgMTAtMTNsMTkuMi02LjRDMzc4LjQgNDAuNyA2MzQuMyAwIDgwNC4zIDBjMzM3IDBcXG4gNDExLjggMTU3IDc0Ni44IDE1NyAzMjggMCA3NTQtMTEyIDc3My0xMTIgNSAwIDEwIDMgMTEgOWwxIDE0LjA3NWMxIDguMDY2LS42OTdcXG4gMTYuNTk1LTYuNjk3IDE3LjQ5MmwtMjEuMDUyIDcuMzFjLTM2Ny45IDk4LjE0Ni02MDkuMTUgMTIyLjY5Ni03NzguMTUgMTIyLjY5NlxcbiAtMzM4IDAtNDA5LTE1Ni41NzMtNzQ0LTE1Ni41NzN6XCIsXG4gIHRpbGRlNDogXCJNNzg2IDU4QzQ1NyA1OCAzMiAxNzcuNDg3IDEzIDE3Ny40ODdjLTYgMC0xMC0zLjM0NVxcbi0xMS0xMC4wMzVMLjE1IDE0M2MtMS03IDMtMTIgMTAtMTNsMjItNi43QzM4MS4yIDM1IDYzNy4xNSAwIDgwNy4xNSAwYzMzNyAwIDQwOVxcbiAxNzcgNzQ0IDE3NyAzMjggMCA3NTQtMTI3IDc3My0xMjcgNSAwIDEwIDMgMTEgOWwxIDE0Ljc5NGMxIDcuODA1LTMgMTMuMzgtOVxcbiAxNC40OTVsLTIwLjcgNS41NzRjLTM2Ni44NSA5OS43OS02MDcuMyAxMzkuMzcyLTc3Ni4zIDEzOS4zNzItMzM4IDAtNDA5XFxuIC0xNzUuMjM2LTc0NC0xNzUuMjM2elwiLFxuICAvLyB2ZWMgaXMgZnJvbSBnbHlwaCBVKzIwRDcgaW4gZm9udCBLYVRlWCBNYWluXG4gIHZlYzogXCJNMzc3IDIwYzAtNS4zMzMgMS44MzMtMTAgNS41LTE0UzM5MSAwIDM5NyAwYzQuNjY3IDAgOC42NjcgMS42NjcgMTIgNVxcbjMuMzMzIDIuNjY3IDYuNjY3IDkgMTAgMTkgNi42NjcgMjQuNjY3IDIwLjMzMyA0My42NjcgNDEgNTcgNy4zMzMgNC42NjcgMTFcXG4xMC42NjcgMTEgMTggMCA2LTEgMTAtMyAxMnMtNi42NjcgNS0xNCA5Yy0yOC42NjcgMTQuNjY3LTUzLjY2NyAzNS42NjctNzUgNjNcXG4tMS4zMzMgMS4zMzMtMy4xNjcgMy41LTUuNSA2LjVzLTQgNC44MzMtNSA1LjVjLTEgLjY2Ny0yLjUgMS4zMzMtNC41IDJzLTQuMzMzIDFcXG4tNyAxYy00LjY2NyAwLTkuMTY3LTEuODMzLTEzLjUtNS41UzMzNyAxODQgMzM3IDE3OGMwLTEyLjY2NyAxNS42NjctMzIuMzMzIDQ3LTU5XFxuSDIxM2wtMTcxLTFjLTguNjY3LTYtMTMtMTIuMzMzLTEzLTE5IDAtNC42NjcgNC4zMzMtMTEuMzMzIDEzLTIwaDM1OVxcbmMtMTYtMjUuMzMzLTI0LTQ1LTI0LTU5elwiLFxuICAvLyB3aWRlaGF0MSBpcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgYSBnbHlwaCBmcm9tIHRoZSBNblN5bWJvbCBwYWNrYWdlXG4gIHdpZGVoYXQxOiBcIk01MjkgMGg1bDUxOSAxMTVjNSAxIDkgNSA5IDEwIDAgMS0xIDItMSAzbC00IDIyXFxuYy0xIDUtNSA5LTExIDloLTJMNTMyIDY3IDE5IDE1OWgtMmMtNSAwLTktNC0xMS05bC01LTIyYy0xLTYgMi0xMiA4LTEzelwiLFxuICAvLyBkaXR0byB3aWRlaGF0Miwgd2lkZWhhdDMsICYgd2lkZWhhdDRcbiAgd2lkZWhhdDI6IFwiTTExODEgMGgybDExNzEgMTc2YzYgMCAxMCA1IDEwIDExbC0yIDIzYy0xIDYtNSAxMFxcbi0xMSAxMGgtMUwxMTgyIDY3IDE1IDIyMGgtMWMtNiAwLTEwLTQtMTEtMTBsLTItMjNjLTEtNiA0LTExIDEwLTExelwiLFxuICB3aWRlaGF0MzogXCJNMTE4MSAwaDJsMTE3MSAyMzZjNiAwIDEwIDUgMTAgMTFsLTIgMjNjLTEgNi01IDEwXFxuLTExIDEwaC0xTDExODIgNjcgMTUgMjgwaC0xYy02IDAtMTAtNC0xMS0xMGwtMi0yM2MtMS02IDQtMTEgMTAtMTF6XCIsXG4gIHdpZGVoYXQ0OiBcIk0xMTgxIDBoMmwxMTcxIDI5NmM2IDAgMTAgNSAxMCAxMWwtMiAyM2MtMSA2LTUgMTBcXG4tMTEgMTBoLTFMMTE4MiA2NyAxNSAzNDBoLTFjLTYgMC0xMC00LTExLTEwbC0yLTIzYy0xLTYgNC0xMSAxMC0xMXpcIixcbiAgLy8gd2lkZWNoZWNrIHBhdGhzIGFyZSBhbGwgaW52ZXJ0ZWQgdmVyc2lvbnMgb2Ygd2lkZWhhdFxuICB3aWRlY2hlY2sxOiBcIk01MjksMTU5aDVsNTE5LC0xMTVjNSwtMSw5LC01LDksLTEwYzAsLTEsLTEsLTIsLTEsLTNsLTQsLTIyYy0xLFxcbi01LC01LC05LC0xMSwtOWgtMmwtNTEyLDkybC01MTMsLTkyaC0yYy01LDAsLTksNCwtMTEsOWwtNSwyMmMtMSw2LDIsMTIsOCwxM3pcIixcbiAgd2lkZWNoZWNrMjogXCJNMTE4MSwyMjBoMmwxMTcxLC0xNzZjNiwwLDEwLC01LDEwLC0xMWwtMiwtMjNjLTEsLTYsLTUsLTEwLFxcbi0xMSwtMTBoLTFsLTExNjgsMTUzbC0xMTY3LC0xNTNoLTFjLTYsMCwtMTAsNCwtMTEsMTBsLTIsMjNjLTEsNiw0LDExLDEwLDExelwiLFxuICB3aWRlY2hlY2szOiBcIk0xMTgxLDI4MGgybDExNzEsLTIzNmM2LDAsMTAsLTUsMTAsLTExbC0yLC0yM2MtMSwtNiwtNSwtMTAsXFxuLTExLC0xMGgtMWwtMTE2OCwyMTNsLTExNjcsLTIxM2gtMWMtNiwwLC0xMCw0LC0xMSwxMGwtMiwyM2MtMSw2LDQsMTEsMTAsMTF6XCIsXG4gIHdpZGVjaGVjazQ6IFwiTTExODEsMzQwaDJsMTE3MSwtMjk2YzYsMCwxMCwtNSwxMCwtMTFsLTIsLTIzYy0xLC02LC01LC0xMCxcXG4tMTEsLTEwaC0xbC0xMTY4LDI3M2wtMTE2NywtMjczaC0xYy02LDAsLTEwLDQsLTExLDEwbC0yLDIzYy0xLDYsNCwxMSwxMCwxMXpcIixcbiAgLy8gVGhlIG5leHQgdGVuIHBhdGhzIHN1cHBvcnQgcmVhY3Rpb24gYXJyb3dzIGZyb20gdGhlIG1oY2hlbSBwYWNrYWdlLlxuICAvLyBBcnJvd3MgZm9yIFxcY2V7PC0tPn0gYXJlIG9mZnNldCBmcm9tIHhBeGlzIGJ5IDAuMjJleCwgcGVyIG1oY2hlbSBpbiBMYVRlWFxuICAvLyBiYXJhYm92ZWxlZnRhcnJvdyBpcyBtb3N0bHkgZnJvbSBmcm9tIGdseXBoIFUrMjE5MCBpbiBmb250IEthVGVYIE1haW5cbiAgYmFyYWJvdmVsZWZ0YXJyb3c6IFwiTTQwMDAwMCA2MjBoLTM5OTg5MGwzIC0zYzY4LjcgLTUyLjcgMTEzLjcgLTEyMCAxMzUgLTIwMlxcbmM0IC0xNC43IDYgLTIzIDYgLTI1YzAgLTcuMyAtNyAtMTEgLTIxIC0xMWMtOCAwIC0xMy4yIDAuOCAtMTUuNSAyLjVcXG5jLTIuMyAxLjcgLTQuMiA1LjggLTUuNSAxMi41Yy0xLjMgNC43IC0yLjcgMTAuMyAtNCAxN2MtMTIgNDguNyAtMzQuOCA5MiAtNjguNSAxMzBcXG5zLTc0LjIgNjYuMyAtMTIxLjUgODVjLTEwIDQgLTE2IDcuNyAtMTggMTFjMCA4LjcgNiAxNC4zIDE4IDE3YzQ3LjMgMTguNyA4Ny44IDQ3XFxuMTIxLjUgODVzNTYuNSA4MS4zIDY4LjUgMTMwYzAuNyAyIDEuMyA1IDIgOXMxLjIgNi43IDEuNSA4YzAuMyAxLjMgMSAzLjMgMiA2XFxuczIuMiA0LjUgMy41IDUuNWMxLjMgMSAzLjMgMS44IDYgMi41czYgMSAxMCAxYzE0IDAgMjEgLTMuNyAyMSAtMTFcXG5jMCAtMiAtMiAtMTAuMyAtNiAtMjVjLTIwIC03OS4zIC02NSAtMTQ2LjcgLTEzNSAtMjAybC0zIC0zaDM5OTg5MHpcXG5NMTAwIDYyMHY0MGgzOTk5MDB2LTQweiBNMCAyNDF2NDBoMzk5OTAwdi00MHpNMCAyNDF2NDBoMzk5OTAwdi00MHpcIixcbiAgLy8gcmlnaHRhcnJvd2Fib3ZlYmFyIGlzIG1vc3RseSBmcm9tIGdseXBoIFUrMjE5MiwgS2FUZVggTWFpblxuICByaWdodGFycm93YWJvdmViYXI6IFwiTTAgMjQxdjQwaDM5OTg5MWMtNDcuMyAzNS4zLTg0IDc4LTExMCAxMjgtMTYuNyAzMlxcbi0yNy43IDYzLjctMzMgOTUgMCAxLjMtLjIgMi43LS41IDQtLjMgMS4zLS41IDIuMy0uNSAzIDAgNy4zIDYuNyAxMSAyMCAxMSA4IDBcXG4xMy4yLS44IDE1LjUtMi41IDIuMy0xLjcgNC4yLTUuNSA1LjUtMTEuNSAyLTEzLjMgNS43LTI3IDExLTQxIDE0LjctNDQuNyAzOVxcbi04NC41IDczLTExOS41czczLjctNjAuMiAxMTktNzUuNWM2LTIgOS01LjcgOS0xMXMtMy05LTktMTFjLTQ1LjMtMTUuMy04NS00MC41XFxuLTExOS03NS41cy01OC4zLTc0LjgtNzMtMTE5LjVjLTQuNy0xNC04LjMtMjcuMy0xMS00MC0xLjMtNi43LTMuMi0xMC44LTUuNVxcbi0xMi41LTIuMy0xLjctNy41LTIuNS0xNS41LTIuNS0xNCAwLTIxIDMuNy0yMSAxMSAwIDIgMiAxMC4zIDYgMjUgMjAuNyA4My4zIDY3XFxuMTUxLjcgMTM5IDIwNXptOTYgMzc5aDM5OTg5NHY0MEgwem0wIDBoMzk5OTA0djQwSDB6XCIsXG4gIC8vIFRoZSBzaG9ydCBsZWZ0IGhhcnBvb24gaGFzIDAuNWVtIChpLmUuIDUwMCB1bml0cykga2VybiBvbiB0aGUgbGVmdCBlbmQuXG4gIC8vIFJlZiBmcm9tIG1oY2hlbS5zdHk6IFxccmxhcHtcXHJhaXNlYm94ey0uMjJleH17JFxca2VybjAuNWVtXG4gIGJhcmFib3Zlc2hvcnRsZWZ0aGFycG9vbjogXCJNNTA3LDQzNWMtNCw0LC02LjMsOC43LC03LDE0YzAsNS4zLDAuNyw5LDIsMTFcXG5jMS4zLDIsNS4zLDUuMywxMiwxMGM5MC43LDU0LDE1NiwxMzAsMTk2LDIyOGMzLjMsMTAuNyw2LjMsMTYuMyw5LDE3XFxuYzIsMC43LDUsMSw5LDFjMCwwLDUsMCw1LDBjMTAuNywwLDE2LjcsLTIsMTgsLTZjMiwtMi43LDEsLTkuNywtMywtMjFcXG5jLTMyLC04Ny4zLC04Mi43LC0xNTcuNywtMTUyLC0yMTFjMCwwLC0zLC0zLC0zLC0zbDM5OTM1MSwwbDAsLTQwXFxuYy0zOTg1NzAsMCwtMzk5NDM3LDAsLTM5OTQzNywweiBNNTkzIDQzNSB2NDAgSDM5OTUwMCB2LTQwelxcbk0wIDI4MSB2LTQwIEgzOTk5MDggdjQweiBNMCAyODEgdi00MCBIMzk5OTA4IHY0MHpcIixcbiAgcmlnaHRoYXJwb29uYWJvdmVzaG9ydGJhcjogXCJNMCwyNDEgbDAsNDBjMzk5MTI2LDAsMzk5OTkzLDAsMzk5OTkzLDBcXG5jNC43LC00LjcsNywtOS4zLDcsLTE0YzAsLTkuMywtMy43LC0xNS4zLC0xMSwtMThjLTkyLjcsLTU2LjcsLTE1OSwtMTMzLjcsLTE5OSxcXG4tMjMxYy0zLjMsLTkuMywtNiwtMTQuNywtOCwtMTZjLTIsLTEuMywtNywtMiwtMTUsLTJjLTEwLjcsMCwtMTYuNywyLC0xOCw2XFxuYy0yLDIuNywtMSw5LjcsMywyMWMxNS4zLDQyLDM2LjcsODEuOCw2NCwxMTkuNWMyNy4zLDM3LjcsNTgsNjkuMiw5Miw5NC41elxcbk0wIDI0MSB2NDAgSDM5OTkwOCB2LTQweiBNMCA0NzUgdi00MCBIMzk5NTAwIHY0MHogTTAgNDc1IHYtNDAgSDM5OTUwMCB2NDB6XCIsXG4gIHNob3J0YmFyYWJvdmVsZWZ0aGFycG9vbjogXCJNNyw0MzVjLTQsNCwtNi4zLDguNywtNywxNGMwLDUuMywwLjcsOSwyLDExXFxuYzEuMywyLDUuMyw1LjMsMTIsMTBjOTAuNyw1NCwxNTYsMTMwLDE5NiwyMjhjMy4zLDEwLjcsNi4zLDE2LjMsOSwxN2MyLDAuNyw1LDEsOSxcXG4xYzAsMCw1LDAsNSwwYzEwLjcsMCwxNi43LC0yLDE4LC02YzIsLTIuNywxLC05LjcsLTMsLTIxYy0zMiwtODcuMywtODIuNywtMTU3LjcsXFxuLTE1MiwtMjExYzAsMCwtMywtMywtMywtM2wzOTk5MDcsMGwwLC00MGMtMzk5MTI2LDAsLTM5OTk5MywwLC0zOTk5OTMsMHpcXG5NOTMgNDM1IHY0MCBINDAwMDAwIHYtNDB6IE01MDAgMjQxIHY0MCBINDAwMDAwIHYtNDB6IE01MDAgMjQxIHY0MCBINDAwMDAwIHYtNDB6XCIsXG4gIHNob3J0cmlnaHRoYXJwb29uYWJvdmViYXI6IFwiTTUzLDI0MWwwLDQwYzM5ODU3MCwwLDM5OTQzNywwLDM5OTQzNywwXFxuYzQuNywtNC43LDcsLTkuMyw3LC0xNGMwLC05LjMsLTMuNywtMTUuMywtMTEsLTE4Yy05Mi43LC01Ni43LC0xNTksLTEzMy43LC0xOTksXFxuLTIzMWMtMy4zLC05LjMsLTYsLTE0LjcsLTgsLTE2Yy0yLC0xLjMsLTcsLTIsLTE1LC0yYy0xMC43LDAsLTE2LjcsMiwtMTgsNlxcbmMtMiwyLjcsLTEsOS43LDMsMjFjMTUuMyw0MiwzNi43LDgxLjgsNjQsMTE5LjVjMjcuMywzNy43LDU4LDY5LjIsOTIsOTQuNXpcXG5NNTAwIDI0MSB2NDAgSDM5OTQwOCB2LTQweiBNNTAwIDQzNSB2NDAgSDQwMDAwMCB2LTQwelwiXG59O1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdHJlZS5qc1xuXG5cbi8qKlxuICogVGhpcyBub2RlIHJlcHJlc2VudHMgYSBkb2N1bWVudCBmcmFnbWVudCwgd2hpY2ggY29udGFpbnMgZWxlbWVudHMsIGJ1dCB3aGVuXG4gKiBwbGFjZWQgaW50byB0aGUgRE9NIGRvZXNuJ3QgaGF2ZSBhbnkgcmVwcmVzZW50YXRpb24gaXRzZWxmLiBJdCBvbmx5IGNvbnRhaW5zXG4gKiBjaGlsZHJlbiBhbmQgZG9lc24ndCBoYXZlIGFueSBET00gbm9kZSBwcm9wZXJ0aWVzLlxuICovXG52YXIgdHJlZV9Eb2N1bWVudEZyYWdtZW50ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgLy8gSHRtbERvbU5vZGVcbiAgLy8gTmV2ZXIgdXNlZDsgbmVlZGVkIGZvciBzYXRpc2Z5aW5nIGludGVyZmFjZS5cbiAgZnVuY3Rpb24gRG9jdW1lbnRGcmFnbWVudChjaGlsZHJlbikge1xuICAgIHRoaXMuY2hpbGRyZW4gPSB2b2lkIDA7XG4gICAgdGhpcy5jbGFzc2VzID0gdm9pZCAwO1xuICAgIHRoaXMuaGVpZ2h0ID0gdm9pZCAwO1xuICAgIHRoaXMuZGVwdGggPSB2b2lkIDA7XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLnN0eWxlID0gdm9pZCAwO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICB0aGlzLmNsYXNzZXMgPSBbXTtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG4gICAgdGhpcy5kZXB0aCA9IDA7XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IDA7XG4gICAgdGhpcy5zdHlsZSA9IHt9O1xuICB9XG5cbiAgdmFyIF9wcm90byA9IERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYXNDbGFzcyA9IGZ1bmN0aW9uIGhhc0NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHJldHVybiB1dGlscy5jb250YWlucyh0aGlzLmNsYXNzZXMsIGNsYXNzTmFtZSk7XG4gIH1cbiAgLyoqIENvbnZlcnQgdGhlIGZyYWdtZW50IGludG8gYSBub2RlLiAqL1xuICA7XG5cbiAgX3Byb3RvLnRvTm9kZSA9IGZ1bmN0aW9uIHRvTm9kZSgpIHtcbiAgICB2YXIgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgZnJhZy5hcHBlbmRDaGlsZCh0aGlzLmNoaWxkcmVuW2ldLnRvTm9kZSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnJhZztcbiAgfVxuICAvKiogQ29udmVydCB0aGUgZnJhZ21lbnQgaW50byBIVE1MIG1hcmt1cC4gKi9cbiAgO1xuXG4gIF9wcm90by50b01hcmt1cCA9IGZ1bmN0aW9uIHRvTWFya3VwKCkge1xuICAgIHZhciBtYXJrdXAgPSBcIlwiOyAvLyBTaW1wbHkgY29uY2F0ZW5hdGUgdGhlIG1hcmt1cCBmb3IgdGhlIGNoaWxkcmVuIHRvZ2V0aGVyLlxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBtYXJrdXAgKz0gdGhpcy5jaGlsZHJlbltpXS50b01hcmt1cCgpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrdXA7XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBtYXRoIG5vZGUgaW50byBhIHN0cmluZywgc2ltaWxhciB0byBpbm5lclRleHQuIEFwcGxpZXMgdG9cbiAgICogTWF0aERvbU5vZGUncyBvbmx5LlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by50b1RleHQgPSBmdW5jdGlvbiB0b1RleHQoKSB7XG4gICAgLy8gVG8gYXZvaWQgdGhpcywgd2Ugd291bGQgc3ViY2xhc3MgZG9jdW1lbnRGcmFnbWVudCBzZXBhcmF0ZWx5IGZvclxuICAgIC8vIE1hdGhNTCwgYnV0IHBvbHlmaWxscyBmb3Igc3ViY2xhc3NpbmcgaXMgZXhwZW5zaXZlIHBlciBQUiAxNDY5LlxuICAgIC8vICRGbG93Rml4TWU6IE9ubHkgd29ya3MgZm9yIENoaWxkVHlwZSA9IE1hdGhEb21Ob2RlLlxuICAgIHZhciB0b1RleHQgPSBmdW5jdGlvbiB0b1RleHQoY2hpbGQpIHtcbiAgICAgIHJldHVybiBjaGlsZC50b1RleHQoKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4ubWFwKHRvVGV4dCkuam9pbihcIlwiKTtcbiAgfTtcblxuICByZXR1cm4gRG9jdW1lbnRGcmFnbWVudDtcbn0oKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2RvbVRyZWUuanNcbi8qKlxuICogVGhlc2Ugb2JqZWN0cyBzdG9yZSB0aGUgZGF0YSBhYm91dCB0aGUgRE9NIG5vZGVzIHdlIGNyZWF0ZSwgYXMgd2VsbCBhcyBzb21lXG4gKiBleHRyYSBkYXRhLiBUaGV5IGNhbiB0aGVuIGJlIHRyYW5zZm9ybWVkIGludG8gcmVhbCBET00gbm9kZXMgd2l0aCB0aGVcbiAqIGB0b05vZGVgIGZ1bmN0aW9uIG9yIEhUTUwgbWFya3VwIHVzaW5nIGB0b01hcmt1cGAuIFRoZXkgYXJlIHVzZWZ1bCBmb3IgYm90aFxuICogc3RvcmluZyBleHRyYSBwcm9wZXJ0aWVzIG9uIHRoZSBub2RlcywgYXMgd2VsbCBhcyBwcm92aWRpbmcgYSB3YXkgdG8gZWFzaWx5XG4gKiB3b3JrIHdpdGggdGhlIERPTS5cbiAqXG4gKiBTaW1pbGFyIGZ1bmN0aW9ucyBmb3Igd29ya2luZyB3aXRoIE1hdGhNTCBub2RlcyBleGlzdCBpbiBtYXRoTUxUcmVlLmpzLlxuICpcbiAqIFRPRE86IHJlZmFjdG9yIGBzcGFuYCBhbmQgYGFuY2hvcmAgaW50byBjb21tb24gc3VwZXJjbGFzcyB3aGVuXG4gKiB0YXJnZXQgZW52aXJvbm1lbnRzIHN1cHBvcnQgY2xhc3MgaW5oZXJpdGFuY2VcbiAqL1xuXG5cblxuXG5cbi8qKlxuICogQ3JlYXRlIGFuIEhUTUwgY2xhc3NOYW1lIGJhc2VkIG9uIGEgbGlzdCBvZiBjbGFzc2VzLiBJbiBhZGRpdGlvbiB0byBqb2luaW5nXG4gKiB3aXRoIHNwYWNlcywgd2UgYWxzbyByZW1vdmUgZW1wdHkgY2xhc3Nlcy5cbiAqL1xudmFyIGNyZWF0ZUNsYXNzID0gZnVuY3Rpb24gY3JlYXRlQ2xhc3MoY2xhc3Nlcykge1xuICByZXR1cm4gY2xhc3Nlcy5maWx0ZXIoZnVuY3Rpb24gKGNscykge1xuICAgIHJldHVybiBjbHM7XG4gIH0pLmpvaW4oXCIgXCIpO1xufTtcblxudmFyIGluaXROb2RlID0gZnVuY3Rpb24gaW5pdE5vZGUoY2xhc3Nlcywgb3B0aW9ucywgc3R5bGUpIHtcbiAgdGhpcy5jbGFzc2VzID0gY2xhc3NlcyB8fCBbXTtcbiAgdGhpcy5hdHRyaWJ1dGVzID0ge307XG4gIHRoaXMuaGVpZ2h0ID0gMDtcbiAgdGhpcy5kZXB0aCA9IDA7XG4gIHRoaXMubWF4Rm9udFNpemUgPSAwO1xuICB0aGlzLnN0eWxlID0gc3R5bGUgfHwge307XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5zdHlsZS5pc1RpZ2h0KCkpIHtcbiAgICAgIHRoaXMuY2xhc3Nlcy5wdXNoKFwibXRpZ2h0XCIpO1xuICAgIH1cblxuICAgIHZhciBjb2xvciA9IG9wdGlvbnMuZ2V0Q29sb3IoKTtcblxuICAgIGlmIChjb2xvcikge1xuICAgICAgdGhpcy5zdHlsZS5jb2xvciA9IGNvbG9yO1xuICAgIH1cbiAgfVxufTtcbi8qKlxuICogQ29udmVydCBpbnRvIGFuIEhUTUwgbm9kZVxuICovXG5cblxudmFyIF90b05vZGUgPSBmdW5jdGlvbiB0b05vZGUodGFnTmFtZSkge1xuICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7IC8vIEFwcGx5IHRoZSBjbGFzc1xuXG4gIG5vZGUuY2xhc3NOYW1lID0gY3JlYXRlQ2xhc3ModGhpcy5jbGFzc2VzKTsgLy8gQXBwbHkgaW5saW5lIHN0eWxlc1xuXG4gIGZvciAodmFyIHN0eWxlIGluIHRoaXMuc3R5bGUpIHtcbiAgICBpZiAodGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZSkpIHtcbiAgICAgIC8vICRGbG93Rml4TWUgRmxvdyBkb2Vzbid0IHNlZW0gdG8gdW5kZXJzdGFuZCBzcGFuLnN0eWxlJ3MgdHlwZS5cbiAgICAgIG5vZGUuc3R5bGVbc3R5bGVdID0gdGhpcy5zdHlsZVtzdHlsZV07XG4gICAgfVxuICB9IC8vIEFwcGx5IGF0dHJpYnV0ZXNcblxuXG4gIGZvciAodmFyIGF0dHIgaW4gdGhpcy5hdHRyaWJ1dGVzKSB7XG4gICAgaWYgKHRoaXMuYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShhdHRyKSkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYXR0ciwgdGhpcy5hdHRyaWJ1dGVzW2F0dHJdKTtcbiAgICB9XG4gIH0gLy8gQXBwZW5kIHRoZSBjaGlsZHJlbiwgYWxzbyBhcyBIVE1MIG5vZGVzXG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBub2RlLmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5baV0udG9Ob2RlKCkpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59O1xuLyoqXG4gKiBDb252ZXJ0IGludG8gYW4gSFRNTCBtYXJrdXAgc3RyaW5nXG4gKi9cblxuXG52YXIgX3RvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAodGFnTmFtZSkge1xuICB2YXIgbWFya3VwID0gXCI8XCIgKyB0YWdOYW1lOyAvLyBBZGQgdGhlIGNsYXNzXG5cbiAgaWYgKHRoaXMuY2xhc3Nlcy5sZW5ndGgpIHtcbiAgICBtYXJrdXAgKz0gXCIgY2xhc3M9XFxcIlwiICsgdXRpbHMuZXNjYXBlKGNyZWF0ZUNsYXNzKHRoaXMuY2xhc3NlcykpICsgXCJcXFwiXCI7XG4gIH1cblxuICB2YXIgc3R5bGVzID0gXCJcIjsgLy8gQWRkIHRoZSBzdHlsZXMsIGFmdGVyIGh5cGhlbmF0aW9uXG5cbiAgZm9yICh2YXIgc3R5bGUgaW4gdGhpcy5zdHlsZSkge1xuICAgIGlmICh0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlKSkge1xuICAgICAgc3R5bGVzICs9IHV0aWxzLmh5cGhlbmF0ZShzdHlsZSkgKyBcIjpcIiArIHRoaXMuc3R5bGVbc3R5bGVdICsgXCI7XCI7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0eWxlcykge1xuICAgIG1hcmt1cCArPSBcIiBzdHlsZT1cXFwiXCIgKyB1dGlscy5lc2NhcGUoc3R5bGVzKSArIFwiXFxcIlwiO1xuICB9IC8vIEFkZCB0aGUgYXR0cmlidXRlc1xuXG5cbiAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICBpZiAodGhpcy5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KGF0dHIpKSB7XG4gICAgICBtYXJrdXAgKz0gXCIgXCIgKyBhdHRyICsgXCI9XFxcIlwiICsgdXRpbHMuZXNjYXBlKHRoaXMuYXR0cmlidXRlc1thdHRyXSkgKyBcIlxcXCJcIjtcbiAgICB9XG4gIH1cblxuICBtYXJrdXAgKz0gXCI+XCI7IC8vIEFkZCB0aGUgbWFya3VwIG9mIHRoZSBjaGlsZHJlbiwgYWxzbyBhcyBtYXJrdXBcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBtYXJrdXAgKz0gdGhpcy5jaGlsZHJlbltpXS50b01hcmt1cCgpO1xuICB9XG5cbiAgbWFya3VwICs9IFwiPC9cIiArIHRhZ05hbWUgKyBcIj5cIjtcbiAgcmV0dXJuIG1hcmt1cDtcbn07IC8vIE1ha2luZyB0aGUgdHlwZSBiZWxvdyBleGFjdCB3aXRoIGFsbCBvcHRpb25hbCBmaWVsZHMgZG9lc24ndCB3b3JrIGR1ZSB0b1xuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNDU4MlxuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNTY4OFxuLy8gSG93ZXZlciwgc2luY2UgKmFsbCogZmllbGRzIGFyZSBvcHRpb25hbCwgJFNoYXBlPD4gd29ya3MgYXMgc3VnZ2VzdGVkIGluIDU2ODhcbi8vIGFib3ZlLlxuLy8gVGhpcyB0eXBlIGRvZXMgbm90IGluY2x1ZGUgYWxsIENTUyBwcm9wZXJ0aWVzLiBBZGRpdGlvbmFsIHByb3BlcnRpZXMgc2hvdWxkXG4vLyBiZSBhZGRlZCBhcyBuZWVkZWQuXG5cblxuLyoqXG4gKiBUaGlzIG5vZGUgcmVwcmVzZW50cyBhIHNwYW4gbm9kZSwgd2l0aCBhIGNsYXNzTmFtZSwgYSBsaXN0IG9mIGNoaWxkcmVuLCBhbmRcbiAqIGFuIGlubGluZSBzdHlsZS4gSXQgYWxzbyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBpdHMgaGVpZ2h0LCBkZXB0aCwgYW5kXG4gKiBtYXhGb250U2l6ZS5cbiAqXG4gKiBSZXByZXNlbnRzIHR3byB0eXBlcyB3aXRoIGRpZmZlcmVudCB1c2VzOiBTdmdTcGFuIHRvIHdyYXAgYW4gU1ZHIGFuZCBEb21TcGFuXG4gKiBvdGhlcndpc2UuIFRoaXMgdHlwZXNhZmV0eSBpcyBpbXBvcnRhbnQgd2hlbiBIVE1MIGJ1aWxkZXJzIGFjY2VzcyBhIHNwYW4nc1xuICogY2hpbGRyZW4uXG4gKi9cbnZhciBkb21UcmVlX1NwYW4gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTcGFuKGNsYXNzZXMsIGNoaWxkcmVuLCBvcHRpb25zLCBzdHlsZSkge1xuICAgIHRoaXMuY2hpbGRyZW4gPSB2b2lkIDA7XG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gdm9pZCAwO1xuICAgIHRoaXMuY2xhc3NlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmhlaWdodCA9IHZvaWQgMDtcbiAgICB0aGlzLmRlcHRoID0gdm9pZCAwO1xuICAgIHRoaXMud2lkdGggPSB2b2lkIDA7XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLnN0eWxlID0gdm9pZCAwO1xuICAgIGluaXROb2RlLmNhbGwodGhpcywgY2xhc3Nlcywgb3B0aW9ucywgc3R5bGUpO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbiB8fCBbXTtcbiAgfVxuICAvKipcbiAgICogU2V0cyBhbiBhcmJpdHJhcnkgYXR0cmlidXRlIG9uIHRoZSBzcGFuLiBXYXJuaW5nOiB1c2UgdGhpcyB3aXNlbHkuIE5vdFxuICAgKiBhbGwgYnJvd3NlcnMgc3VwcG9ydCBhdHRyaWJ1dGVzIHRoZSBzYW1lLCBhbmQgaGF2aW5nIHRvbyBtYW55IGN1c3RvbVxuICAgKiBhdHRyaWJ1dGVzIGlzIHByb2JhYmx5IGJhZC5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gU3Bhbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uIHNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gICAgdGhpcy5hdHRyaWJ1dGVzW2F0dHJpYnV0ZV0gPSB2YWx1ZTtcbiAgfTtcblxuICBfcHJvdG8uaGFzQ2xhc3MgPSBmdW5jdGlvbiBoYXNDbGFzcyhjbGFzc05hbWUpIHtcbiAgICByZXR1cm4gdXRpbHMuY29udGFpbnModGhpcy5jbGFzc2VzLCBjbGFzc05hbWUpO1xuICB9O1xuXG4gIF9wcm90by50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgcmV0dXJuIF90b05vZGUuY2FsbCh0aGlzLCBcInNwYW5cIik7XG4gIH07XG5cbiAgX3Byb3RvLnRvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAoKSB7XG4gICAgcmV0dXJuIF90b01hcmt1cC5jYWxsKHRoaXMsIFwic3BhblwiKTtcbiAgfTtcblxuICByZXR1cm4gU3Bhbjtcbn0oKTtcbi8qKlxuICogVGhpcyBub2RlIHJlcHJlc2VudHMgYW4gYW5jaG9yICg8YT4pIGVsZW1lbnQgd2l0aCBhIGh5cGVybGluay4gIFNlZSBgc3BhbmBcbiAqIGZvciBmdXJ0aGVyIGRldGFpbHMuXG4gKi9cblxudmFyIGRvbVRyZWVfQW5jaG9yID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQW5jaG9yKGhyZWYsIGNsYXNzZXMsIGNoaWxkcmVuLCBvcHRpb25zKSB7XG4gICAgdGhpcy5jaGlsZHJlbiA9IHZvaWQgMDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSB2b2lkIDA7XG4gICAgdGhpcy5jbGFzc2VzID0gdm9pZCAwO1xuICAgIHRoaXMuaGVpZ2h0ID0gdm9pZCAwO1xuICAgIHRoaXMuZGVwdGggPSB2b2lkIDA7XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLnN0eWxlID0gdm9pZCAwO1xuICAgIGluaXROb2RlLmNhbGwodGhpcywgY2xhc3Nlcywgb3B0aW9ucyk7XG4gICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuIHx8IFtdO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gIH1cblxuICB2YXIgX3Byb3RvMiA9IEFuY2hvci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvMi5zZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbiBzZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZSkge1xuICAgIHRoaXMuYXR0cmlidXRlc1thdHRyaWJ1dGVdID0gdmFsdWU7XG4gIH07XG5cbiAgX3Byb3RvMi5oYXNDbGFzcyA9IGZ1bmN0aW9uIGhhc0NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHJldHVybiB1dGlscy5jb250YWlucyh0aGlzLmNsYXNzZXMsIGNsYXNzTmFtZSk7XG4gIH07XG5cbiAgX3Byb3RvMi50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgcmV0dXJuIF90b05vZGUuY2FsbCh0aGlzLCBcImFcIik7XG4gIH07XG5cbiAgX3Byb3RvMi50b01hcmt1cCA9IGZ1bmN0aW9uIHRvTWFya3VwKCkge1xuICAgIHJldHVybiBfdG9NYXJrdXAuY2FsbCh0aGlzLCBcImFcIik7XG4gIH07XG5cbiAgcmV0dXJuIEFuY2hvcjtcbn0oKTtcbi8qKlxuICogVGhpcyBub2RlIHJlcHJlc2VudHMgYW4gaW1hZ2UgZW1iZWQgKDxpbWc+KSBlbGVtZW50LlxuICovXG5cbnZhciBkb21UcmVlX0ltZyA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEltZyhzcmMsIGFsdCwgc3R5bGUpIHtcbiAgICB0aGlzLnNyYyA9IHZvaWQgMDtcbiAgICB0aGlzLmFsdCA9IHZvaWQgMDtcbiAgICB0aGlzLmNsYXNzZXMgPSB2b2lkIDA7XG4gICAgdGhpcy5oZWlnaHQgPSB2b2lkIDA7XG4gICAgdGhpcy5kZXB0aCA9IHZvaWQgMDtcbiAgICB0aGlzLm1heEZvbnRTaXplID0gdm9pZCAwO1xuICAgIHRoaXMuc3R5bGUgPSB2b2lkIDA7XG4gICAgdGhpcy5hbHQgPSBhbHQ7XG4gICAgdGhpcy5zcmMgPSBzcmM7XG4gICAgdGhpcy5jbGFzc2VzID0gW1wibW9yZFwiXTtcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG4gIH1cblxuICB2YXIgX3Byb3RvMyA9IEltZy5wcm90b3R5cGU7XG5cbiAgX3Byb3RvMy5oYXNDbGFzcyA9IGZ1bmN0aW9uIGhhc0NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHJldHVybiB1dGlscy5jb250YWlucyh0aGlzLmNsYXNzZXMsIGNsYXNzTmFtZSk7XG4gIH07XG5cbiAgX3Byb3RvMy50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xuICAgIG5vZGUuc3JjID0gdGhpcy5zcmM7XG4gICAgbm9kZS5hbHQgPSB0aGlzLmFsdDtcbiAgICBub2RlLmNsYXNzTmFtZSA9IFwibW9yZFwiOyAvLyBBcHBseSBpbmxpbmUgc3R5bGVzXG5cbiAgICBmb3IgKHZhciBzdHlsZSBpbiB0aGlzLnN0eWxlKSB7XG4gICAgICBpZiAodGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZSkpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICBub2RlLnN0eWxlW3N0eWxlXSA9IHRoaXMuc3R5bGVbc3R5bGVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9O1xuXG4gIF9wcm90bzMudG9NYXJrdXAgPSBmdW5jdGlvbiB0b01hcmt1cCgpIHtcbiAgICB2YXIgbWFya3VwID0gXCI8aW1nICBzcmM9J1wiICsgdGhpcy5zcmMgKyBcIiAnYWx0PSdcIiArIHRoaXMuYWx0ICsgXCInIFwiOyAvLyBBZGQgdGhlIHN0eWxlcywgYWZ0ZXIgaHlwaGVuYXRpb25cblxuICAgIHZhciBzdHlsZXMgPSBcIlwiO1xuXG4gICAgZm9yICh2YXIgc3R5bGUgaW4gdGhpcy5zdHlsZSkge1xuICAgICAgaWYgKHRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkoc3R5bGUpKSB7XG4gICAgICAgIHN0eWxlcyArPSB1dGlscy5oeXBoZW5hdGUoc3R5bGUpICsgXCI6XCIgKyB0aGlzLnN0eWxlW3N0eWxlXSArIFwiO1wiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdHlsZXMpIHtcbiAgICAgIG1hcmt1cCArPSBcIiBzdHlsZT1cXFwiXCIgKyB1dGlscy5lc2NhcGUoc3R5bGVzKSArIFwiXFxcIlwiO1xuICAgIH1cblxuICAgIG1hcmt1cCArPSBcIicvPlwiO1xuICAgIHJldHVybiBtYXJrdXA7XG4gIH07XG5cbiAgcmV0dXJuIEltZztcbn0oKTtcbnZhciBpQ29tYmluYXRpb25zID0ge1xuICAnw64nOiBcIlxcdTAxMzFcXHUwMzAyXCIsXG4gICfDryc6IFwiXFx1MDEzMVxcdTAzMDhcIixcbiAgJ8OtJzogXCJcXHUwMTMxXFx1MDMwMVwiLFxuICAvLyAnxKsnOiAnXFx1MDEzMVxcdTAzMDQnLCAvLyBlbmFibGUgd2hlbiB3ZSBhZGQgRXh0ZW5kZWQgTGF0aW5cbiAgJ8OsJzogXCJcXHUwMTMxXFx1MDMwMFwiXG59O1xuLyoqXG4gKiBBIHN5bWJvbCBub2RlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGEgc2luZ2xlIHN5bWJvbC4gSXQgZWl0aGVyIHJlbmRlcnNcbiAqIHRvIGEgc2luZ2xlIHRleHQgbm9kZSwgb3IgYSBzcGFuIHdpdGggYSBzaW5nbGUgdGV4dCBub2RlIGluIGl0LCBkZXBlbmRpbmcgb25cbiAqIHdoZXRoZXIgaXQgaGFzIENTUyBjbGFzc2VzLCBzdHlsZXMsIG9yIG5lZWRzIGl0YWxpYyBjb3JyZWN0aW9uLlxuICovXG5cbnZhciBkb21UcmVlX1N5bWJvbE5vZGUgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTeW1ib2xOb2RlKHRleHQsIGhlaWdodCwgZGVwdGgsIGl0YWxpYywgc2tldywgd2lkdGgsIGNsYXNzZXMsIHN0eWxlKSB7XG4gICAgdGhpcy50ZXh0ID0gdm9pZCAwO1xuICAgIHRoaXMuaGVpZ2h0ID0gdm9pZCAwO1xuICAgIHRoaXMuZGVwdGggPSB2b2lkIDA7XG4gICAgdGhpcy5pdGFsaWMgPSB2b2lkIDA7XG4gICAgdGhpcy5za2V3ID0gdm9pZCAwO1xuICAgIHRoaXMud2lkdGggPSB2b2lkIDA7XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLmNsYXNzZXMgPSB2b2lkIDA7XG4gICAgdGhpcy5zdHlsZSA9IHZvaWQgMDtcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG4gICAgdGhpcy5kZXB0aCA9IGRlcHRoIHx8IDA7XG4gICAgdGhpcy5pdGFsaWMgPSBpdGFsaWMgfHwgMDtcbiAgICB0aGlzLnNrZXcgPSBza2V3IHx8IDA7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG4gICAgdGhpcy5jbGFzc2VzID0gY2xhc3NlcyB8fCBbXTtcbiAgICB0aGlzLnN0eWxlID0gc3R5bGUgfHwge307XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IDA7IC8vIE1hcmsgdGV4dCBmcm9tIG5vbi1MYXRpbiBzY3JpcHRzIHdpdGggc3BlY2lmaWMgY2xhc3NlcyBzbyB0aGF0IHdlXG4gICAgLy8gY2FuIHNwZWNpZnkgd2hpY2ggZm9udHMgdG8gdXNlLiAgVGhpcyBhbGxvd3MgdXMgdG8gcmVuZGVyIHRoZXNlXG4gICAgLy8gY2hhcmFjdGVycyB3aXRoIGEgc2VyaWYgZm9udCBpbiBzaXR1YXRpb25zIHdoZXJlIHRoZSBicm93c2VyIHdvdWxkXG4gICAgLy8gZWl0aGVyIGRlZmF1bHQgdG8gYSBzYW5zIHNlcmlmIG9yIHJlbmRlciBhIHBsYWNlaG9sZGVyIGNoYXJhY3Rlci5cbiAgICAvLyBXZSB1c2UgQ1NTIGNsYXNzIG5hbWVzIGxpa2UgY2prX2ZhbGxiYWNrLCBoYW5ndWxfZmFsbGJhY2sgYW5kXG4gICAgLy8gYnJhaG1pY19mYWxsYmFjay4gU2VlIC4vdW5pY29kZVNjcmlwdHMuanMgZm9yIHRoZSBzZXQgb2YgcG9zc2libGVcbiAgICAvLyBzY3JpcHQgbmFtZXNcblxuICAgIHZhciBzY3JpcHQgPSBzY3JpcHRGcm9tQ29kZXBvaW50KHRoaXMudGV4dC5jaGFyQ29kZUF0KDApKTtcblxuICAgIGlmIChzY3JpcHQpIHtcbiAgICAgIHRoaXMuY2xhc3Nlcy5wdXNoKHNjcmlwdCArIFwiX2ZhbGxiYWNrXCIpO1xuICAgIH1cblxuICAgIGlmICgvW8Ouw6/DrcOsXS8udGVzdCh0aGlzLnRleHQpKSB7XG4gICAgICAvLyBhZGQgxKsgd2hlbiB3ZSBhZGQgRXh0ZW5kZWQgTGF0aW5cbiAgICAgIHRoaXMudGV4dCA9IGlDb21iaW5hdGlvbnNbdGhpcy50ZXh0XTtcbiAgICB9XG4gIH1cblxuICB2YXIgX3Byb3RvNCA9IFN5bWJvbE5vZGUucHJvdG90eXBlO1xuXG4gIF9wcm90bzQuaGFzQ2xhc3MgPSBmdW5jdGlvbiBoYXNDbGFzcyhjbGFzc05hbWUpIHtcbiAgICByZXR1cm4gdXRpbHMuY29udGFpbnModGhpcy5jbGFzc2VzLCBjbGFzc05hbWUpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdGV4dCBub2RlIG9yIHNwYW4gZnJvbSBhIHN5bWJvbCBub2RlLiBOb3RlIHRoYXQgYSBzcGFuIGlzIG9ubHlcbiAgICogY3JlYXRlZCBpZiBpdCBpcyBuZWVkZWQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvNC50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLnRleHQpO1xuICAgIHZhciBzcGFuID0gbnVsbDtcblxuICAgIGlmICh0aGlzLml0YWxpYyA+IDApIHtcbiAgICAgIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICAgIHNwYW4uc3R5bGUubWFyZ2luUmlnaHQgPSB0aGlzLml0YWxpYyArIFwiZW1cIjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHNwYW4gPSBzcGFuIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgICAgc3Bhbi5jbGFzc05hbWUgPSBjcmVhdGVDbGFzcyh0aGlzLmNsYXNzZXMpO1xuICAgIH1cblxuICAgIGZvciAodmFyIHN0eWxlIGluIHRoaXMuc3R5bGUpIHtcbiAgICAgIGlmICh0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlKSkge1xuICAgICAgICBzcGFuID0gc3BhbiB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTsgLy8gJEZsb3dGaXhNZSBGbG93IGRvZXNuJ3Qgc2VlbSB0byB1bmRlcnN0YW5kIHNwYW4uc3R5bGUncyB0eXBlLlxuXG4gICAgICAgIHNwYW4uc3R5bGVbc3R5bGVdID0gdGhpcy5zdHlsZVtzdHlsZV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNwYW4pIHtcbiAgICAgIHNwYW4uYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICByZXR1cm4gc3BhbjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIG1hcmt1cCBmb3IgYSBzeW1ib2wgbm9kZS5cbiAgICovXG4gIDtcblxuICBfcHJvdG80LnRvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAoKSB7XG4gICAgLy8gVE9ETyhhbHBlcnQpOiBNb3JlIGR1cGxpY2F0aW9uIHRoYW4gSSdkIGxpa2UgZnJvbVxuICAgIC8vIHNwYW4ucHJvdG90eXBlLnRvTWFya3VwIGFuZCBzeW1ib2xOb2RlLnByb3RvdHlwZS50b05vZGUuLi5cbiAgICB2YXIgbmVlZHNTcGFuID0gZmFsc2U7XG4gICAgdmFyIG1hcmt1cCA9IFwiPHNwYW5cIjtcblxuICAgIGlmICh0aGlzLmNsYXNzZXMubGVuZ3RoKSB7XG4gICAgICBuZWVkc1NwYW4gPSB0cnVlO1xuICAgICAgbWFya3VwICs9IFwiIGNsYXNzPVxcXCJcIjtcbiAgICAgIG1hcmt1cCArPSB1dGlscy5lc2NhcGUoY3JlYXRlQ2xhc3ModGhpcy5jbGFzc2VzKSk7XG4gICAgICBtYXJrdXAgKz0gXCJcXFwiXCI7XG4gICAgfVxuXG4gICAgdmFyIHN0eWxlcyA9IFwiXCI7XG5cbiAgICBpZiAodGhpcy5pdGFsaWMgPiAwKSB7XG4gICAgICBzdHlsZXMgKz0gXCJtYXJnaW4tcmlnaHQ6XCIgKyB0aGlzLml0YWxpYyArIFwiZW07XCI7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgc3R5bGUgaW4gdGhpcy5zdHlsZSkge1xuICAgICAgaWYgKHRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkoc3R5bGUpKSB7XG4gICAgICAgIHN0eWxlcyArPSB1dGlscy5oeXBoZW5hdGUoc3R5bGUpICsgXCI6XCIgKyB0aGlzLnN0eWxlW3N0eWxlXSArIFwiO1wiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdHlsZXMpIHtcbiAgICAgIG5lZWRzU3BhbiA9IHRydWU7XG4gICAgICBtYXJrdXAgKz0gXCIgc3R5bGU9XFxcIlwiICsgdXRpbHMuZXNjYXBlKHN0eWxlcykgKyBcIlxcXCJcIjtcbiAgICB9XG5cbiAgICB2YXIgZXNjYXBlZCA9IHV0aWxzLmVzY2FwZSh0aGlzLnRleHQpO1xuXG4gICAgaWYgKG5lZWRzU3Bhbikge1xuICAgICAgbWFya3VwICs9IFwiPlwiO1xuICAgICAgbWFya3VwICs9IGVzY2FwZWQ7XG4gICAgICBtYXJrdXAgKz0gXCI8L3NwYW4+XCI7XG4gICAgICByZXR1cm4gbWFya3VwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZXNjYXBlZDtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFN5bWJvbE5vZGU7XG59KCk7XG4vKipcbiAqIFNWRyBub2RlcyBhcmUgdXNlZCB0byByZW5kZXIgc3RyZXRjaHkgd2lkZSBlbGVtZW50cy5cbiAqL1xuXG52YXIgU3ZnTm9kZSA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFN2Z05vZGUoY2hpbGRyZW4sIGF0dHJpYnV0ZXMpIHtcbiAgICB0aGlzLmNoaWxkcmVuID0gdm9pZCAwO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW4gfHwgW107XG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcbiAgfVxuXG4gIHZhciBfcHJvdG81ID0gU3ZnTm9kZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvNS50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgdmFyIHN2Z05TID0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCBcInN2Z1wiKTsgLy8gQXBwbHkgYXR0cmlidXRlc1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyLCB0aGlzLmF0dHJpYnV0ZXNbYXR0cl0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZS5hcHBlbmRDaGlsZCh0aGlzLmNoaWxkcmVuW2ldLnRvTm9kZSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcblxuICBfcHJvdG81LnRvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAoKSB7XG4gICAgdmFyIG1hcmt1cCA9IFwiPHN2Z1wiOyAvLyBBcHBseSBhdHRyaWJ1dGVzXG5cbiAgICBmb3IgKHZhciBhdHRyIGluIHRoaXMuYXR0cmlidXRlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMsIGF0dHIpKSB7XG4gICAgICAgIG1hcmt1cCArPSBcIiBcIiArIGF0dHIgKyBcIj0nXCIgKyB0aGlzLmF0dHJpYnV0ZXNbYXR0cl0gKyBcIidcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtYXJrdXAgKz0gXCI+XCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1hcmt1cCArPSB0aGlzLmNoaWxkcmVuW2ldLnRvTWFya3VwKCk7XG4gICAgfVxuXG4gICAgbWFya3VwICs9IFwiPC9zdmc+XCI7XG4gICAgcmV0dXJuIG1hcmt1cDtcbiAgfTtcblxuICByZXR1cm4gU3ZnTm9kZTtcbn0oKTtcbnZhciBkb21UcmVlX1BhdGhOb2RlID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUGF0aE5vZGUocGF0aE5hbWUsIGFsdGVybmF0ZSkge1xuICAgIHRoaXMucGF0aE5hbWUgPSB2b2lkIDA7XG4gICAgdGhpcy5hbHRlcm5hdGUgPSB2b2lkIDA7XG4gICAgdGhpcy5wYXRoTmFtZSA9IHBhdGhOYW1lO1xuICAgIHRoaXMuYWx0ZXJuYXRlID0gYWx0ZXJuYXRlOyAvLyBVc2VkIG9ubHkgZm9yIFxcc3FydFxuICB9XG5cbiAgdmFyIF9wcm90bzYgPSBQYXRoTm9kZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvNi50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgdmFyIHN2Z05TID0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCBcInBhdGhcIik7XG5cbiAgICBpZiAodGhpcy5hbHRlcm5hdGUpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZFwiLCB0aGlzLmFsdGVybmF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZFwiLCBzdmdHZW9tZXRyeV9wYXRoW3RoaXMucGF0aE5hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcblxuICBfcHJvdG82LnRvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAoKSB7XG4gICAgaWYgKHRoaXMuYWx0ZXJuYXRlKSB7XG4gICAgICByZXR1cm4gXCI8cGF0aCBkPSdcIiArIHRoaXMuYWx0ZXJuYXRlICsgXCInLz5cIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiPHBhdGggZD0nXCIgKyBzdmdHZW9tZXRyeV9wYXRoW3RoaXMucGF0aE5hbWVdICsgXCInLz5cIjtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFBhdGhOb2RlO1xufSgpO1xudmFyIExpbmVOb2RlID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTGluZU5vZGUoYXR0cmlidXRlcykge1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzIHx8IHt9O1xuICB9XG5cbiAgdmFyIF9wcm90bzcgPSBMaW5lTm9kZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvNy50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgdmFyIHN2Z05TID0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCBcImxpbmVcIik7IC8vIEFwcGx5IGF0dHJpYnV0ZXNcblxuICAgIGZvciAodmFyIGF0dHIgaW4gdGhpcy5hdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcywgYXR0cikpIHtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYXR0ciwgdGhpcy5hdHRyaWJ1dGVzW2F0dHJdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcblxuICBfcHJvdG83LnRvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAoKSB7XG4gICAgdmFyIG1hcmt1cCA9IFwiPGxpbmVcIjtcblxuICAgIGZvciAodmFyIGF0dHIgaW4gdGhpcy5hdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcywgYXR0cikpIHtcbiAgICAgICAgbWFya3VwICs9IFwiIFwiICsgYXR0ciArIFwiPSdcIiArIHRoaXMuYXR0cmlidXRlc1thdHRyXSArIFwiJ1wiO1xuICAgICAgfVxuICAgIH1cblxuICAgIG1hcmt1cCArPSBcIi8+XCI7XG4gICAgcmV0dXJuIG1hcmt1cDtcbiAgfTtcblxuICByZXR1cm4gTGluZU5vZGU7XG59KCk7XG5mdW5jdGlvbiBhc3NlcnRTeW1ib2xEb21Ob2RlKGdyb3VwKSB7XG4gIGlmIChncm91cCBpbnN0YW5jZW9mIGRvbVRyZWVfU3ltYm9sTm9kZSkge1xuICAgIHJldHVybiBncm91cDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBzeW1ib2xOb2RlIGJ1dCBnb3QgXCIgKyBTdHJpbmcoZ3JvdXApICsgXCIuXCIpO1xuICB9XG59XG5mdW5jdGlvbiBhc3NlcnRTcGFuKGdyb3VwKSB7XG4gIGlmIChncm91cCBpbnN0YW5jZW9mIGRvbVRyZWVfU3Bhbikge1xuICAgIHJldHVybiBncm91cDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBzcGFuPEh0bWxEb21Ob2RlPiBidXQgZ290IFwiICsgU3RyaW5nKGdyb3VwKSArIFwiLlwiKTtcbiAgfVxufVxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zdWJtb2R1bGVzL2thdGV4LWZvbnRzL2ZvbnRNZXRyaWNzRGF0YS5qc1xuLy8gVGhpcyBmaWxlIGlzIEdFTkVSQVRFRCBieSBidWlsZE1ldHJpY3Muc2guIERPIE5PVCBNT0RJRlkuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBmb250TWV0cmljc0RhdGEgPSAoe1xuICBcIkFNUy1SZWd1bGFyXCI6IHtcbiAgICBcIjY1XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjY2XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjY3XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjY4XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjY5XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjcwXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjcxXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjczXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjc0XCI6IFswLjE2NjY3LCAwLjY4ODg5LCAwLCAwLCAwLjVdLFxuICAgIFwiNzVcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNzZcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiNzdcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuOTQ0NDVdLFxuICAgIFwiNzhcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiNzlcIjogWzAuMTY2NjcsIDAuNjg4ODksIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODBcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODFcIjogWzAuMTY2NjcsIDAuNjg4ODksIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODJcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODNcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODRcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODVcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODZcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODdcIjogWzAsIDAuNjg4ODksIDAsIDAsIDEuMF0sXG4gICAgXCI4OFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4OVwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5MFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCIxMDdcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiMTY1XCI6IFswLCAwLjY3NSwgMC4wMjUsIDAsIDAuNzVdLFxuICAgIFwiMTc0XCI6IFswLjE1NTU5LCAwLjY5MjI0LCAwLCAwLCAwLjk0NjY2XSxcbiAgICBcIjI0MFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIyOTVcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTQwMjhdLFxuICAgIFwiNzEwXCI6IFswLCAwLjgyNSwgMCwgMCwgMi4zMzMzNF0sXG4gICAgXCI3MzJcIjogWzAsIDAuOSwgMCwgMCwgMi4zMzMzNF0sXG4gICAgXCI3NzBcIjogWzAsIDAuODI1LCAwLCAwLCAyLjMzMzM0XSxcbiAgICBcIjc3MVwiOiBbMCwgMC45LCAwLCAwLCAyLjMzMzM0XSxcbiAgICBcIjk4OVwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDA4XCI6IFswLCAwLjQzMDU2LCAwLjA0MDI4LCAwLCAwLjY2NjY3XSxcbiAgICBcIjgyNDVcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDAuMjc1XSxcbiAgICBcIjg0NjNcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTQwMjhdLFxuICAgIFwiODQ4N1wiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4NDk4XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg1MDJcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODUwM1wiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCI4NTA0XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg1MTNcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiODU5MlwiOiBbLTAuMDM1OTgsIDAuNDY0MDIsIDAsIDAsIDAuNV0sXG4gICAgXCI4NTk0XCI6IFstMC4wMzU5OCwgMC40NjQwMiwgMCwgMCwgMC41XSxcbiAgICBcIjg2MDJcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODYwM1wiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjA2XCI6IFswLjAxMzU0LCAwLjUyMjM5LCAwLCAwLCAxLjBdLFxuICAgIFwiODYwOFwiOiBbMC4wMTM1NCwgMC41MjIzOSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MTBcIjogWzAuMDEzNTQsIDAuNTIyMzksIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiODYxMVwiOiBbMC4wMTM1NCwgMC41MjIzOSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCI4NjE5XCI6IFswLCAwLjU0OTg2LCAwLCAwLCAxLjBdLFxuICAgIFwiODYyMFwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MjFcIjogWy0wLjEzMzEzLCAwLjM3Nzg4LCAwLCAwLCAxLjM4ODg5XSxcbiAgICBcIjg2MjJcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODYyNFwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC41XSxcbiAgICBcIjg2MjVcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNV0sXG4gICAgXCI4NjMwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAxLjBdLFxuICAgIFwiODYzMVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MzRcIjogWzAuMDgxOTgsIDAuNTgxOTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODYzNVwiOiBbMC4wODE5OCwgMC41ODE5OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NjM4XCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjQxNjY3XSxcbiAgICBcIjg2MzlcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuNDE2NjddLFxuICAgIFwiODY0MlwiOiBbMC4xOTQ0NCwgMC42OTIyNCwgMCwgMCwgMC40MTY2N10sXG4gICAgXCI4NjQzXCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjQxNjY3XSxcbiAgICBcIjg2NDRcIjogWzAuMTgwOCwgMC42NzUsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjQ2XCI6IFswLjE4MDgsIDAuNjc1LCAwLCAwLCAxLjBdLFxuICAgIFwiODY0N1wiOiBbMC4xODA4LCAwLjY3NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2NDhcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODY0OVwiOiBbMC4xODA4LCAwLjY3NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTBcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODY1MVwiOiBbMC4wMTM1NCwgMC41MjIzOSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTJcIjogWzAuMDEzNTQsIDAuNTIyMzksIDAsIDAsIDEuMF0sXG4gICAgXCI4NjUzXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTRcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY1NVwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjY2XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY2N1wiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NjlcIjogWy0wLjEzMzEzLCAwLjM3Nzg4LCAwLCAwLCAxLjBdLFxuICAgIFwiODY3MlwiOiBbLTAuMDY0LCAwLjQzNywgMCwgMCwgMS4zMzRdLFxuICAgIFwiODY3NFwiOiBbLTAuMDY0LCAwLjQzNywgMCwgMCwgMS4zMzRdLFxuICAgIFwiODcwNVwiOiBbMCwgMC44MjUsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzA4XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg3MDlcIjogWzAuMDgxNjcsIDAuNTgxNjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODcxN1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC40MjkxN10sXG4gICAgXCI4NzIyXCI6IFstMC4wMzU5OCwgMC40NjQwMiwgMCwgMCwgMC41XSxcbiAgICBcIjg3MjRcIjogWzAuMDgxOTgsIDAuNjkyMjQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODcyNlwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzMzXCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3MzZcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODczN1wiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4NzM4XCI6IFswLjAzNTE3LCAwLjUyMjM5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg3MzlcIjogWzAuMDgxNjcsIDAuNTgxNjcsIDAsIDAsIDAuMjIyMjJdLFxuICAgIFwiODc0MFwiOiBbMC4yNTE0MiwgMC43NDExMSwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4NzQxXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjg3NDJcIjogWzAuMjUxNDIsIDAuNzQxMTEsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzU2XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg3NTdcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODc2NFwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc2NVwiOiBbLTAuMTMzMTMsIDAuMzc3ODgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc2OVwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc3MFwiOiBbLTAuMDM2MjUsIDAuNDYzNzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc3NFwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4Nzc2XCI6IFstMC4wMTY4OCwgMC40ODMxMiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4Nzc4XCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3ODJcIjogWzAuMDYwNjIsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc4M1wiOiBbMC4wNjA2MiwgMC41NDk4NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4Nzg1XCI6IFswLjA4MTk4LCAwLjU4MTk4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3ODZcIjogWzAuMDgxOTgsIDAuNTgxOTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc4N1wiOiBbMC4wODE5OCwgMC41ODE5OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzkwXCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3OTFcIjogWzAuMjI5NTgsIDAuNzI5NTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc5NlwiOiBbMC4wODE5OCwgMC45MTY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODA2XCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MDdcIjogWzAuMjU1ODMsIDAuNzU1ODMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgwOFwiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODA5XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MTJcIjogWzAuMjU1ODMsIDAuNzU1ODMsIDAsIDAsIDAuNV0sXG4gICAgXCI4ODE0XCI6IFswLjIwNTc2LCAwLjcwNTc2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MTVcIjogWzAuMjA1NzYsIDAuNzA1NzYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgxNlwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODE3XCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MThcIjogWzAuMjI5NTgsIDAuNzI5NTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgxOVwiOiBbMC4yMjk1OCwgMC43Mjk1OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODIyXCI6IFswLjE4MDgsIDAuNjc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MjNcIjogWzAuMTgwOCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgyOFwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODI5XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzBcIjogWzAuMjI5NTgsIDAuNzI5NTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgzMVwiOiBbMC4yMjk1OCwgMC43Mjk1OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODMyXCI6IFswLjIwNTc2LCAwLjcwNTc2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzNcIjogWzAuMjA1NzYsIDAuNzA1NzYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg0MFwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODQxXCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NDJcIjogWzAuMTM1OTcsIDAuNjM1OTcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg0M1wiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODQ3XCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NDhcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg1OFwiOiBbMC4wODE5OCwgMC41ODE5OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODU5XCI6IFswLjA4MTk4LCAwLjU4MTk4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NjFcIjogWzAuMDgxOTgsIDAuNTgxOTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2MlwiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2M1wiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2NFwiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2NVwiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg3MlwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4ODczXCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg4NzRcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuODg4ODldLFxuICAgIFwiODg3NlwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4ODc3XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg4NzhcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODg3OVwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4ODgyXCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4ODNcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg4NFwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODg1XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4ODhcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiODg5MFwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI4ODkxXCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg4OTJcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODkwMVwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4OTAzXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MDVcIjogWzAuMDgxNjcsIDAuNTgxNjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkwNlwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTA3XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MDhcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkwOVwiOiBbLTAuMDM1OTgsIDAuNDY0MDIsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkxMFwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC43NjA0Ml0sXG4gICAgXCI4OTExXCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjc2MDQyXSxcbiAgICBcIjg5MTJcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkxM1wiOiBbMC4wMzUxNywgMC41NDk4NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTE0XCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg5MTVcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODkxNlwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4OTE4XCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTE5XCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTIwXCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAxLjMzMzM0XSxcbiAgICBcIjg5MjFcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDEuMzMzMzRdLFxuICAgIFwiODkyMlwiOiBbMC4zODU2OSwgMC44ODU2OSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTIzXCI6IFswLjM4NTY5LCAwLjg4NTY5LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MjZcIjogWzAuMTM2NjcsIDAuNjM2NjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkyN1wiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTI4XCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MjlcIjogWzAuMzAyNzQsIDAuNzkzODMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkzNFwiOiBbMC4yMzIyMiwgMC43NDExMSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTM1XCI6IFswLjIzMjIyLCAwLjc0MTExLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MzZcIjogWzAuMjMyMjIsIDAuNzQxMTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkzN1wiOiBbMC4yMzIyMiwgMC43NDExMSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTM4XCI6IFswLjIwNTc2LCAwLjcwNTc2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MzlcIjogWzAuMjA1NzYsIDAuNzA1NzYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODk0MFwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTQxXCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5OTRcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODk5NVwiOiBbMC4xOTQ0NCwgMC42OTIyNCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5NDE2XCI6IFswLjE1NTU5LCAwLjY5MjI0LCAwLCAwLCAwLjkwMjIyXSxcbiAgICBcIjk0ODRcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNV0sXG4gICAgXCI5NDg4XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjVdLFxuICAgIFwiOTQ5MlwiOiBbMCwgMC4zNzc4OCwgMCwgMCwgMC41XSxcbiAgICBcIjk0OTZcIjogWzAsIDAuMzc3ODgsIDAsIDAsIDAuNV0sXG4gICAgXCI5NTg1XCI6IFswLjE5NDQ0LCAwLjY4ODg5LCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjk1ODZcIjogWzAuMTk0NDQsIDAuNzQxMTEsIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTYzMlwiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTYzM1wiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTY1MFwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5NjUxXCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjk2NTRcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTY2MFwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5NjYxXCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjk2NjRcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTY3NFwiOiBbMC4xMTExMSwgMC42OTIyNCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5NzMzXCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjk0NDQ1XSxcbiAgICBcIjEwMDAzXCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjEwMDE2XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjEwNzMxXCI6IFswLjExMTExLCAwLjY5MjI0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjEwODQ2XCI6IFswLjE5NDQ0LCAwLjc1NTgzLCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjEwODc3XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODc4XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg1XCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg2XCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg3XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg4XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg5XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODkwXCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODkxXCI6IFswLjQ4MjU2LCAwLjk4MjU2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODkyXCI6IFswLjQ4MjU2LCAwLjk4MjU2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTAxXCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTAyXCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTMzXCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM0XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM1XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM2XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM3XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM4XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTQ5XCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTUwXCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTU1XCI6IFswLjI4NDgxLCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTU2XCI6IFswLjI4NDgxLCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzUwXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjIyMjIyXSxcbiAgICBcIjU3MzUxXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjU3MzUyXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzUzXCI6IFswLCAwLjQzMDU2LCAwLjA0MDI4LCAwLCAwLjY2NjY3XSxcbiAgICBcIjU3MzU2XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzU3XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzU4XCI6IFswLjQxOTUxLCAwLjkxOTUxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzU5XCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzYwXCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzYxXCI6IFswLjQxOTUxLCAwLjkxOTUxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzY2XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzY3XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzY4XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzY5XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzcwXCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzcxXCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XVxuICB9LFxuICBcIkNhbGlncmFwaGljLVJlZ3VsYXJcIjoge1xuICAgIFwiNDhcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCI0OVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1MlwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTRcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1NVwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjU2XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTdcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCI2NVwiOiBbMCwgMC42ODMzMywgMCwgMC4xOTQ0NSwgMC43OTg0N10sXG4gICAgXCI2NlwiOiBbMCwgMC42ODMzMywgMC4wMzA0MSwgMC4xMzg4OSwgMC42NTY4MV0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODMzMywgMC4wNTgzNCwgMC4xMzg4OSwgMC41MjY1M10sXG4gICAgXCI2OFwiOiBbMCwgMC42ODMzMywgMC4wMjc3OCwgMC4wODMzNCwgMC43NzEzOV0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODMzMywgMC4wODk0NCwgMC4xMTExMSwgMC41Mjc3OF0sXG4gICAgXCI3MFwiOiBbMCwgMC42ODMzMywgMC4wOTkzMSwgMC4xMTExMSwgMC43MTg3NV0sXG4gICAgXCI3MVwiOiBbMC4wOTcyMiwgMC42ODMzMywgMC4wNTkzLCAwLjExMTExLCAwLjU5NDg3XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4MzMzLCAwLjAwOTY1LCAwLjExMTExLCAwLjg0NDUyXSxcbiAgICBcIjczXCI6IFswLCAwLjY4MzMzLCAwLjA3MzgyLCAwLCAwLjU0NDUyXSxcbiAgICBcIjc0XCI6IFswLjA5NzIyLCAwLjY4MzMzLCAwLjE4NDcyLCAwLjE2NjY3LCAwLjY3Nzc4XSxcbiAgICBcIjc1XCI6IFswLCAwLjY4MzMzLCAwLjAxNDQ1LCAwLjA1NTU2LCAwLjc2MTk1XSxcbiAgICBcIjc2XCI6IFswLCAwLjY4MzMzLCAwLCAwLjEzODg5LCAwLjY4OTcyXSxcbiAgICBcIjc3XCI6IFswLCAwLjY4MzMzLCAwLCAwLjEzODg5LCAxLjIwMDldLFxuICAgIFwiNzhcIjogWzAsIDAuNjgzMzMsIDAuMTQ3MzYsIDAuMDgzMzQsIDAuODIwNDldLFxuICAgIFwiNzlcIjogWzAsIDAuNjgzMzMsIDAuMDI3NzgsIDAuMTExMTEsIDAuNzk2MTFdLFxuICAgIFwiODBcIjogWzAsIDAuNjgzMzMsIDAuMDgyMjIsIDAuMDgzMzQsIDAuNjk1NTZdLFxuICAgIFwiODFcIjogWzAuMDk3MjIsIDAuNjgzMzMsIDAsIDAuMTExMTEsIDAuODE2NjddLFxuICAgIFwiODJcIjogWzAsIDAuNjgzMzMsIDAsIDAuMDgzMzQsIDAuODQ3NV0sXG4gICAgXCI4M1wiOiBbMCwgMC42ODMzMywgMC4wNzUsIDAuMTM4ODksIDAuNjA1NTZdLFxuICAgIFwiODRcIjogWzAsIDAuNjgzMzMsIDAuMjU0MTcsIDAsIDAuNTQ0NjRdLFxuICAgIFwiODVcIjogWzAsIDAuNjgzMzMsIDAuMDk5MzEsIDAuMDgzMzQsIDAuNjI1ODNdLFxuICAgIFwiODZcIjogWzAsIDAuNjgzMzMsIDAuMDgyMjIsIDAsIDAuNjEyNzhdLFxuICAgIFwiODdcIjogWzAsIDAuNjgzMzMsIDAuMDgyMjIsIDAuMDgzMzQsIDAuOTg3NzhdLFxuICAgIFwiODhcIjogWzAsIDAuNjgzMzMsIDAuMTQ2NDMsIDAuMTM4ODksIDAuNzEzM10sXG4gICAgXCI4OVwiOiBbMC4wOTcyMiwgMC42ODMzMywgMC4wODIyMiwgMC4wODMzNCwgMC42NjgzNF0sXG4gICAgXCI5MFwiOiBbMCwgMC42ODMzMywgMC4wNzk0NCwgMC4xMzg4OSwgMC43MjQ3M11cbiAgfSxcbiAgXCJGcmFrdHVyLVJlZ3VsYXJcIjoge1xuICAgIFwiMzNcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjk1NzRdLFxuICAgIFwiMzRcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjE0NzFdLFxuICAgIFwiMzhcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNzM3ODZdLFxuICAgIFwiMzlcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjEyMDFdLFxuICAgIFwiNDBcIjogWzAuMjQ5ODIsIDAuNzQ5NDcsIDAsIDAsIDAuMzg4NjVdLFxuICAgIFwiNDFcIjogWzAuMjQ5ODIsIDAuNzQ5NDcsIDAsIDAsIDAuMzg4NjVdLFxuICAgIFwiNDJcIjogWzAsIDAuNjIxMTksIDAsIDAsIDAuMjc3NjRdLFxuICAgIFwiNDNcIjogWzAuMDgzMTksIDAuNTgyODMsIDAsIDAsIDAuNzU2MjNdLFxuICAgIFwiNDRcIjogWzAsIDAuMTA4MDMsIDAsIDAsIDAuMjc3NjRdLFxuICAgIFwiNDVcIjogWzAuMDgzMTksIDAuNTgyODMsIDAsIDAsIDAuNzU2MjNdLFxuICAgIFwiNDZcIjogWzAsIDAuMTA4MDMsIDAsIDAsIDAuMjc3NjRdLFxuICAgIFwiNDdcIjogWzAuMjQ5ODIsIDAuNzQ5NDcsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNDhcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNDlcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTBcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTFcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTJcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTNcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTRcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTVcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTZcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTdcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNThcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuMjE2MDZdLFxuICAgIFwiNTlcIjogWzAuMTI2MDQsIDAuNDc1MzQsIDAsIDAsIDAuMjE2MDZdLFxuICAgIFwiNjFcIjogWy0wLjEzMDk5LCAwLjM2ODY2LCAwLCAwLCAwLjc1NjIzXSxcbiAgICBcIjYzXCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjM2MjQ1XSxcbiAgICBcIjY1XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjcxNzZdLFxuICAgIFwiNjZcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuODgzOTddLFxuICAgIFwiNjdcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNjEyNTRdLFxuICAgIFwiNjhcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuODMxNThdLFxuICAgIFwiNjlcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNjYyNzhdLFxuICAgIFwiNzBcIjogWzAuMTI2MDQsIDAuNjkxNDEsIDAsIDAsIDAuNjExMTldLFxuICAgIFwiNzFcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNzg1MzldLFxuICAgIFwiNzJcIjogWzAuMDYzMDIsIDAuNjkxNDEsIDAsIDAsIDAuNzIwM10sXG4gICAgXCI3M1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC41NTQ0OF0sXG4gICAgXCI3NFwiOiBbMC4xMjYwNCwgMC42OTE0MSwgMCwgMCwgMC41NTIzMV0sXG4gICAgXCI3NVwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42Njg0NV0sXG4gICAgXCI3NlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42NjYwMl0sXG4gICAgXCI3N1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMS4wNDk1M10sXG4gICAgXCI3OFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MzIxMl0sXG4gICAgXCI3OVwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MjY5OV0sXG4gICAgXCI4MFwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC44Mjc1M10sXG4gICAgXCI4MVwiOiBbMC4wMzc4MSwgMC42OTE0MSwgMCwgMCwgMC44MjY5OV0sXG4gICAgXCI4MlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MjgwN10sXG4gICAgXCI4M1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44Mjg2MV0sXG4gICAgXCI4NFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42Njg5OV0sXG4gICAgXCI4NVwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42NDU3Nl0sXG4gICAgXCI4NlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MzEzMV0sXG4gICAgXCI4N1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMS4wNDYwMl0sXG4gICAgXCI4OFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC43MTkyMl0sXG4gICAgXCI4OVwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC44MzI5M10sXG4gICAgXCI5MFwiOiBbMC4xMjYwNCwgMC42OTE0MSwgMCwgMCwgMC42MDIwMV0sXG4gICAgXCI5MVwiOiBbMC4yNDk4MiwgMC43NDk0NywgMCwgMCwgMC4yNzc2NF0sXG4gICAgXCI5M1wiOiBbMC4yNDk4MiwgMC43NDk0NywgMCwgMCwgMC4yNzc2NF0sXG4gICAgXCI5NFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC40OTk2NV0sXG4gICAgXCI5N1wiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC41MDA0Nl0sXG4gICAgXCI5OFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC41MTMxNV0sXG4gICAgXCI5OVwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC4zODk0Nl0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjIxMTksIDAsIDAsIDAuNDk4NTddLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjQwMDUzXSxcbiAgICBcIjEwMlwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC4zMjYyNl0sXG4gICAgXCIxMDNcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAzN10sXG4gICAgXCIxMDRcIjogWzAuMTg5MDYsIDAuNjkxNDEsIDAsIDAsIDAuNTIxMjZdLFxuICAgIFwiMTA1XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjI3ODk5XSxcbiAgICBcIjEwNlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC4yODA4OF0sXG4gICAgXCIxMDdcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMzg5NDZdLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjI3OTUzXSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC43NjY3Nl0sXG4gICAgXCIxMTBcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTI2NjZdLFxuICAgIFwiMTExXCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjQ4ODg1XSxcbiAgICBcIjExMlwiOiBbMC4xODkwNiwgMC41MjM5NiwgMCwgMCwgMC41MDA0Nl0sXG4gICAgXCIxMTNcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNDg5MTJdLFxuICAgIFwiMTE0XCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjM4OTE5XSxcbiAgICBcIjExNVwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC40NDI2Nl0sXG4gICAgXCIxMTZcIjogWzAsIDAuNjIxMTksIDAsIDAsIDAuMzMzMDFdLFxuICAgIFwiMTE3XCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjUxNzJdLFxuICAgIFwiMTE4XCI6IFswLCAwLjUyMzk2LCAwLCAwLCAwLjUxMThdLFxuICAgIFwiMTE5XCI6IFswLCAwLjUyMzk2LCAwLCAwLCAwLjc3MzUxXSxcbiAgICBcIjEyMFwiOiBbMC4xODkwNiwgMC40NzUzNCwgMCwgMCwgMC4zODg2NV0sXG4gICAgXCIxMjFcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNDk4ODRdLFxuICAgIFwiMTIyXCI6IFswLjE4OTA2LCAwLjQ3NTM0LCAwLCAwLCAwLjM5MDU0XSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjE0NzFdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC4yMTQ3MV0sXG4gICAgXCI1ODExMlwiOiBbMCwgMC42MjExOSwgMCwgMCwgMC40OTc0OV0sXG4gICAgXCI1ODExM1wiOiBbMCwgMC42MjExOSwgMCwgMCwgMC40OTgzXSxcbiAgICBcIjU4MTE0XCI6IFswLjE4OTA2LCAwLjY5MTQxLCAwLCAwLCAwLjMzMzI4XSxcbiAgICBcIjU4MTE1XCI6IFswLjE4OTA2LCAwLjY5MTQxLCAwLCAwLCAwLjMyOTIzXSxcbiAgICBcIjU4MTE2XCI6IFswLjE4OTA2LCAwLjQ3NTM0LCAwLCAwLCAwLjUwMzQzXSxcbiAgICBcIjU4MTE3XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjMzMzAxXSxcbiAgICBcIjU4MTE4XCI6IFswLCAwLjYyMTE5LCAwLCAwLCAwLjMzNDA5XSxcbiAgICBcIjU4MTE5XCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjUwMDczXVxuICB9LFxuICBcIk1haW4tQm9sZFwiOiB7XG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zNV0sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MDI3OF0sXG4gICAgXCIzNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC45NTgzM10sXG4gICAgXCIzNlwiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDAuOTU4MzNdLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjQzXCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjQ0XCI6IFswLjE5NDQ0LCAwLjE1NTU2LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjQ1XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjM4MzMzXSxcbiAgICBcIjQ2XCI6IFswLCAwLjE1NTU2LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjQ3XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI0OFwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNDlcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjUwXCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1MVwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTJcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjUzXCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1NFwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTVcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjU2XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1N1wiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNThcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiNTlcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiNjBcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiNjFcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjYyXCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjYzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU0MzA1XSxcbiAgICBcIjY0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjY1XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg2OTQ0XSxcbiAgICBcIjY2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjgxODA1XSxcbiAgICBcIjY3XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjgzMDU1XSxcbiAgICBcIjY4XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg4MTk0XSxcbiAgICBcIjY5XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjc1NTU1XSxcbiAgICBcIjcwXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjcyMzYxXSxcbiAgICBcIjcxXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjkwNDE2XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjldLFxuICAgIFwiNzNcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNDM2MTFdLFxuICAgIFwiNzRcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNTk0NDRdLFxuICAgIFwiNzVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuOTAxMzhdLFxuICAgIFwiNzZcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNjkxNjZdLFxuICAgIFwiNzdcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDEuMDkxNjZdLFxuICAgIFwiNzhcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuOV0sXG4gICAgXCI3OVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44NjM4OF0sXG4gICAgXCI4MFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC43ODYxMV0sXG4gICAgXCI4MVwiOiBbMC4xOTQ0NCwgMC42ODYxMSwgMCwgMCwgMC44NjM4OF0sXG4gICAgXCI4MlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44NjI1XSxcbiAgICBcIjgzXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjg0XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjhdLFxuICAgIFwiODVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODg0NzJdLFxuICAgIFwiODZcIjogWzAsIDAuNjg2MTEsIDAuMDE1OTcsIDAsIDAuODY5NDRdLFxuICAgIFwiODdcIjogWzAsIDAuNjg2MTEsIDAuMDE1OTcsIDAsIDEuMTg4ODhdLFxuICAgIFwiODhcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODY5NDRdLFxuICAgIFwiODlcIjogWzAsIDAuNjg2MTEsIDAuMDI4NzUsIDAsIDAuODY5NDRdLFxuICAgIFwiOTBcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNzAyNzddLFxuICAgIFwiOTFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiOTJcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI5NVwiOiBbMC4zMSwgMC4xMzQ0NCwgMC4wMzE5NCwgMCwgMC41NzVdLFxuICAgIFwiOTdcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTU5MDJdLFxuICAgIFwiOThcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiOTlcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiMTAwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjEwMVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MjcwOF0sXG4gICAgXCIxMDJcIjogWzAsIDAuNjk0NDQsIDAuMTA5MDMsIDAsIDAuMzUxMzldLFxuICAgIFwiMTAzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAxNTk3LCAwLCAwLjU3NV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiMTA1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4zNTEzOV0sXG4gICAgXCIxMDdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjA2OTRdLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC45NTgzM10sXG4gICAgXCIxMTBcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiMTExXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjYwNjk0XSxcbiAgICBcIjExNFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40NzM2MV0sXG4gICAgXCIxMTVcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNDUzNjFdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYzNDkyLCAwLCAwLCAwLjQ0NzIyXSxcbiAgICBcIjExN1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCIxMThcIjogWzAsIDAuNDQ0NDQsIDAuMDE1OTcsIDAsIDAuNjA2OTRdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQ0NDQ0LCAwLjAxNTk3LCAwLCAwLjgzMDU1XSxcbiAgICBcIjEyMFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC42MDY5NF0sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDE1OTcsIDAsIDAuNjA2OTRdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjEyM1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiMTI0XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjEyNVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiMTI2XCI6IFswLjM1LCAwLjM0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCIxNjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjE3MlwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCIxNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODY5NDRdLFxuICAgIFwiMTc3XCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjE4NFwiOiBbMC4xNzAxNCwgMCwgMCwgMCwgMC41MTExMV0sXG4gICAgXCIxOThcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDEuMDQxNjZdLFxuICAgIFwiMjE1XCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjIxNlwiOiBbMC4wNDg2MSwgMC43MzQ3MiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCIyMjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTk3MjJdLFxuICAgIFwiMjMwXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjgzMDU1XSxcbiAgICBcIjI0N1wiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCIyNDhcIjogWzAuMDk3MjIsIDAuNTQxNjcsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjMwNVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCIzMzhcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDEuMTY5NDRdLFxuICAgIFwiMzM5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjU2N1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC4zNTEzOV0sXG4gICAgXCI3MTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjcxMVwiOiBbMCwgMC42MzE5NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNzEzXCI6IFswLCAwLjU5NjExLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI3MTRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjcxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI3MjlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiNzMwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg2OTQ0XSxcbiAgICBcIjczMlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNzMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNjkxNjZdLFxuICAgIFwiOTE2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjk1ODMzXSxcbiAgICBcIjkyMFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI5MjNcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODA1NTVdLFxuICAgIFwiOTI2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44MzA1NV0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjgzMDU1XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODMwNTVdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40NDQ0NCwgMC4wMzE5NCwgMCwgMC41NzVdLFxuICAgIFwiODIxMlwiOiBbMCwgMC40NDQ0NCwgMC4wMzE5NCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4MjE2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjgyMTdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiODIyMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MDI3OF0sXG4gICAgXCI4MjIxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYwMjc4XSxcbiAgICBcIjgyMjRcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiODIyNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC41MTExMV0sXG4gICAgXCI4MjQyXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjM0NDQ0XSxcbiAgICBcIjg0MDdcIjogWzAsIDAuNzI0NDQsIDAuMTU0ODYsIDAsIDAuNTc1XSxcbiAgICBcIjg0NjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY3NTldLFxuICAgIFwiODQ2NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44MzA1NV0sXG4gICAgXCI4NDY3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjQ3MzYxXSxcbiAgICBcIjg0NzJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNzQwMjddLFxuICAgIFwiODQ3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44MzA1NV0sXG4gICAgXCI4NTAxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc3XSxcbiAgICBcIjg1OTJcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg1OTNcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg1OTRcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg1OTVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg1OTZcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg1OTdcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg1OThcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODU5OVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4NjAwXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg2MDFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODYzNlwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODYzN1wiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY0MFwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY0MVwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY1NlwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY1N1wiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC43MDI3N10sXG4gICAgXCI4NjU4XCI6IFstMC4xMDg4OSwgMC4zOTExMSwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4NjU5XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc3XSxcbiAgICBcIjg2NjBcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg2NjFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNzAyNzddLFxuICAgIFwiODcwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI4NzA2XCI6IFswLCAwLjY5NDQ0LCAwLjA2Mzg5LCAwLCAwLjYyODQ3XSxcbiAgICBcIjg3MDdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiODcwOVwiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiODcxMVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45NTgzM10sXG4gICAgXCI4NzEyXCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg3MTVcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiODcyMlwiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4NzIzXCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg3MjVcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg3MjZcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg3MjdcIjogWy0wLjAyNzc4LCAwLjQ3MjIyLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI4NzI4XCI6IFstMC4wMjYzOSwgMC40NzM2MSwgMCwgMCwgMC41NzVdLFxuICAgIFwiODcyOVwiOiBbLTAuMDI2MzksIDAuNDczNjEsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg3MzBcIjogWzAuMTgsIDAuODIsIDAsIDAsIDAuOTU4MzNdLFxuICAgIFwiODczM1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4NzM0XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg3MzZcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODczOVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI4NzQxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI4NzQzXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg3NDRcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiODc0NVwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCI4NzQ2XCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg3NDdcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMTI3NzgsIDAsIDAuNTY4NzVdLFxuICAgIFwiODc2NFwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODc2OFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI4NzcxXCI6IFswLjAwMjIyLCAwLjUwMjIyLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg3NzZcIjogWzAuMDI0NDQsIDAuNTI0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODc4MVwiOiBbMC4wMDIyMiwgMC41MDIyMiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODAxXCI6IFswLjAwMjIyLCAwLjUwMjIyLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4MDRcIjogWzAuMTk2NjcsIDAuNjk2NjcsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODgwNVwiOiBbMC4xOTY2NywgMC42OTY2NywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODEwXCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg4MTFcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODgyNlwiOiBbMC4wODU1NiwgMC41ODU1NiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODI3XCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4MzRcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODgzNVwiOiBbMC4wODU1NiwgMC41ODU1NiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODM4XCI6IFswLjE5NjY3LCAwLjY5NjY3LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4MzlcIjogWzAuMTk2NjcsIDAuNjk2NjcsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODg0NlwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCI4ODQ5XCI6IFswLjE5NjY3LCAwLjY5NjY3LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4NTBcIjogWzAuMTk2NjcsIDAuNjk2NjcsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODg1MVwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCI4ODUyXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg4NTNcIjogWzAuMTMzMzMsIDAuNjMzMzMsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODg1NFwiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODU1XCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4NTZcIjogWzAuMTMzMzMsIDAuNjMzMzMsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODg1N1wiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODY2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc3XSxcbiAgICBcIjg4NjdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzAyNzddLFxuICAgIFwiODg2OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODY5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg5MDBcIjogWy0wLjAyNjM5LCAwLjQ3MzYxLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI4OTAxXCI6IFstMC4wMjYzOSwgMC40NzM2MSwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI4OTAyXCI6IFstMC4wMjc3OCwgMC40NzIyMiwgMCwgMCwgMC41NzVdLFxuICAgIFwiODk2OFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41MTExMV0sXG4gICAgXCI4OTY5XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjg5NzBcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiODk3MVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41MTExMV0sXG4gICAgXCI4OTk0XCI6IFstMC4xMzg4OSwgMC4zNjExMSwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4OTk1XCI6IFstMC4xMzg4OSwgMC4zNjExMSwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI5NjUxXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjAyMjIyXSxcbiAgICBcIjk2NTdcIjogWy0wLjAyNzc4LCAwLjQ3MjIyLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI5NjYxXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjAyMjIyXSxcbiAgICBcIjk2NjdcIjogWy0wLjAyNzc4LCAwLjQ3MjIyLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI5NzExXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjk4MjRcIjogWzAuMTI5NjMsIDAuNjk0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiOTgyNVwiOiBbMC4xMjk2MywgMC42OTQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI5ODI2XCI6IFswLjEyOTYzLCAwLjY5NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjk4MjdcIjogWzAuMTI5NjMsIDAuNjk0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiOTgzN1wiOiBbMCwgMC43NSwgMCwgMCwgMC40NDcyMl0sXG4gICAgXCI5ODM4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjQ0NzIyXSxcbiAgICBcIjk4MzlcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiMTAyMTZcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiMTAyMTdcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiMTA4MTVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuOV0sXG4gICAgXCIxMDkyN1wiOiBbMC4xOTY2NywgMC42OTY2NywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCIxMDkyOFwiOiBbMC4xOTY2NywgMC42OTY2NywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI1NzM3NlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMF1cbiAgfSxcbiAgXCJNYWluLUJvbGRJdGFsaWNcIjoge1xuICAgIFwiMzNcIjogWzAsIDAuNjk0NDQsIDAuMTE0MTcsIDAsIDAuMzg2MTFdLFxuICAgIFwiMzRcIjogWzAsIDAuNjk0NDQsIDAuMDc5MzksIDAsIDAuNjIwNTVdLFxuICAgIFwiMzVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDY4MzMsIDAsIDAuOTQ0NDRdLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAuMTI4NjEsIDAsIDAuOTQ0NDRdLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAuMDg1MjgsIDAsIDAuODg1NTVdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAuMTI5NDUsIDAsIDAuMzU1NTVdLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAuMTU4MDYsIDAsIDAuNDczMzNdLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAuMDMzMDYsIDAsIDAuNDczMzNdLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAuMTQzMzMsIDAsIDAuNTkxMTFdLFxuICAgIFwiNDNcIjogWzAuMTAzMzMsIDAuNjAzMzMsIDAuMDMzMDYsIDAsIDAuODg1NTVdLFxuICAgIFwiNDRcIjogWzAuMTk0NDQsIDAuMTQ3MjIsIDAsIDAsIDAuMzU1NTVdLFxuICAgIFwiNDVcIjogWzAsIDAuNDQ0NDQsIDAuMDI2MTEsIDAsIDAuNDE0NDRdLFxuICAgIFwiNDZcIjogWzAsIDAuMTQ3MjIsIDAsIDAsIDAuMzU1NTVdLFxuICAgIFwiNDdcIjogWzAuMjUsIDAuNzUsIDAuMTU4MDYsIDAsIDAuNTkxMTFdLFxuICAgIFwiNDhcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNDlcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTBcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTFcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTJcIjogWzAuMTk0NDQsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTNcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTRcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTVcIjogWzAuMTk0NDQsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTZcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTdcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNThcIjogWzAsIDAuNDQ0NDQsIDAuMDY2OTUsIDAsIDAuMzU1NTVdLFxuICAgIFwiNTlcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDY2OTUsIDAsIDAuMzU1NTVdLFxuICAgIFwiNjFcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLjA2ODMzLCAwLCAwLjg4NTU1XSxcbiAgICBcIjYzXCI6IFswLCAwLjY5NDQ0LCAwLjExNDcyLCAwLCAwLjU5MTExXSxcbiAgICBcIjY0XCI6IFswLCAwLjY5NDQ0LCAwLjA5MjA4LCAwLCAwLjg4NTU1XSxcbiAgICBcIjY1XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg2NTU1XSxcbiAgICBcIjY2XCI6IFswLCAwLjY4NjExLCAwLjA5OTIsIDAsIDAuODE2NjZdLFxuICAgIFwiNjdcIjogWzAsIDAuNjg2MTEsIDAuMTQyMDgsIDAsIDAuODI2NjZdLFxuICAgIFwiNjhcIjogWzAsIDAuNjg2MTEsIDAuMDkwNjIsIDAsIDAuODc1NTVdLFxuICAgIFwiNjlcIjogWzAsIDAuNjg2MTEsIDAuMTE0MzEsIDAsIDAuNzU2NjZdLFxuICAgIFwiNzBcIjogWzAsIDAuNjg2MTEsIDAuMTI5MDMsIDAsIDAuNzI3MjJdLFxuICAgIFwiNzFcIjogWzAsIDAuNjg2MTEsIDAuMDczNDcsIDAsIDAuODk1MjddLFxuICAgIFwiNzJcIjogWzAsIDAuNjg2MTEsIDAuMTcyMDgsIDAsIDAuODk2MV0sXG4gICAgXCI3M1wiOiBbMCwgMC42ODYxMSwgMC4xNTY4MSwgMCwgMC40NzE2Nl0sXG4gICAgXCI3NFwiOiBbMCwgMC42ODYxMSwgMC4xNDUsIDAsIDAuNjEwNTVdLFxuICAgIFwiNzVcIjogWzAsIDAuNjg2MTEsIDAuMTQyMDgsIDAsIDAuODk0OTldLFxuICAgIFwiNzZcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNjk3NzddLFxuICAgIFwiNzdcIjogWzAsIDAuNjg2MTEsIDAuMTcyMDgsIDAsIDEuMDcyNzddLFxuICAgIFwiNzhcIjogWzAsIDAuNjg2MTEsIDAuMTcyMDgsIDAsIDAuODk2MV0sXG4gICAgXCI3OVwiOiBbMCwgMC42ODYxMSwgMC4wOTA2MiwgMCwgMC44NTQ5OV0sXG4gICAgXCI4MFwiOiBbMCwgMC42ODYxMSwgMC4wOTkyLCAwLCAwLjc4NzIxXSxcbiAgICBcIjgxXCI6IFswLjE5NDQ0LCAwLjY4NjExLCAwLjA5MDYyLCAwLCAwLjg1NDk5XSxcbiAgICBcIjgyXCI6IFswLCAwLjY4NjExLCAwLjAyNTU5LCAwLCAwLjg1OTQ0XSxcbiAgICBcIjgzXCI6IFswLCAwLjY4NjExLCAwLjExMjY0LCAwLCAwLjY0OTk5XSxcbiAgICBcIjg0XCI6IFswLCAwLjY4NjExLCAwLjEyOTAzLCAwLCAwLjc5NjFdLFxuICAgIFwiODVcIjogWzAsIDAuNjg2MTEsIDAuMTcyMDgsIDAsIDAuODgwODNdLFxuICAgIFwiODZcIjogWzAsIDAuNjg2MTEsIDAuMTg2MjUsIDAsIDAuODY1NTVdLFxuICAgIFwiODdcIjogWzAsIDAuNjg2MTEsIDAuMTg2MjUsIDAsIDEuMTU5OTldLFxuICAgIFwiODhcIjogWzAsIDAuNjg2MTEsIDAuMTU2ODEsIDAsIDAuODY1NTVdLFxuICAgIFwiODlcIjogWzAsIDAuNjg2MTEsIDAuMTk4MDMsIDAsIDAuODY1NTVdLFxuICAgIFwiOTBcIjogWzAsIDAuNjg2MTEsIDAuMTQyMDgsIDAsIDAuNzA4ODhdLFxuICAgIFwiOTFcIjogWzAuMjUsIDAuNzUsIDAuMTg3NSwgMCwgMC4zNTYxMV0sXG4gICAgXCI5M1wiOiBbMC4yNSwgMC43NSwgMC4wOTk3MiwgMCwgMC4zNTYxMV0sXG4gICAgXCI5NFwiOiBbMCwgMC42OTQ0NCwgMC4wNjcwOSwgMCwgMC41OTExMV0sXG4gICAgXCI5NVwiOiBbMC4zMSwgMC4xMzQ0NCwgMC4wOTgxMSwgMCwgMC41OTExMV0sXG4gICAgXCI5N1wiOiBbMCwgMC40NDQ0NCwgMC4wOTQyNiwgMCwgMC41OTExMV0sXG4gICAgXCI5OFwiOiBbMCwgMC42OTQ0NCwgMC4wNzg2MSwgMCwgMC41MzIyMl0sXG4gICAgXCI5OVwiOiBbMCwgMC40NDQ0NCwgMC4wNTIyMiwgMCwgMC41MzIyMl0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjk0NDQsIDAuMTA4NjEsIDAsIDAuNTkxMTFdLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ0NDQ0LCAwLjA4NSwgMCwgMC41MzIyMl0sXG4gICAgXCIxMDJcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMjE3NzgsIDAsIDAuNF0sXG4gICAgXCIxMDNcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMTA1LCAwLCAwLjUzMjIyXSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMC4wOTQyNiwgMCwgMC41OTExMV0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjkzMjYsIDAuMTEzODcsIDAsIDAuMzU1NTVdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY5MzI2LCAwLjE2NzIsIDAsIDAuMzU1NTVdLFxuICAgIFwiMTA3XCI6IFswLCAwLjY5NDQ0LCAwLjExMTExLCAwLCAwLjUzMjIyXSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMC4xMDg2MSwgMCwgMC4yOTY2Nl0sXG4gICAgXCIxMDlcIjogWzAsIDAuNDQ0NDQsIDAuMDk0MjYsIDAsIDAuOTQ0NDRdLFxuICAgIFwiMTEwXCI6IFswLCAwLjQ0NDQ0LCAwLjA5NDI2LCAwLCAwLjY0OTk5XSxcbiAgICBcIjExMVwiOiBbMCwgMC40NDQ0NCwgMC4wNzg2MSwgMCwgMC41OTExMV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDc4NjEsIDAsIDAuNTkxMTFdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjEwNSwgMCwgMC41MzIyMl0sXG4gICAgXCIxMTRcIjogWzAsIDAuNDQ0NDQsIDAuMTExMTEsIDAsIDAuNTAxNjddLFxuICAgIFwiMTE1XCI6IFswLCAwLjQ0NDQ0LCAwLjA4MTY3LCAwLCAwLjQ4Njk0XSxcbiAgICBcIjExNlwiOiBbMCwgMC42MzQ5MiwgMC4wOTYzOSwgMCwgMC4zODVdLFxuICAgIFwiMTE3XCI6IFswLCAwLjQ0NDQ0LCAwLjA5NDI2LCAwLCAwLjYyMDU1XSxcbiAgICBcIjExOFwiOiBbMCwgMC40NDQ0NCwgMC4xMTExMSwgMCwgMC41MzIyMl0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDQ0NDQsIDAuMTExMTEsIDAsIDAuNzY3NzddLFxuICAgIFwiMTIwXCI6IFswLCAwLjQ0NDQ0LCAwLjEyNTgzLCAwLCAwLjU2MDU1XSxcbiAgICBcIjEyMVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4xMDUsIDAsIDAuNTYxNjZdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQ0NDQ0LCAwLjEzODg5LCAwLCAwLjQ5MDU1XSxcbiAgICBcIjEyNlwiOiBbMC4zNSwgMC4zNDQ0NCwgMC4xMTQ3MiwgMCwgMC41OTExMV0sXG4gICAgXCIxNjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODY4NTNdLFxuICAgIFwiMTY4XCI6IFswLCAwLjY5NDQ0LCAwLjExNDczLCAwLCAwLjU5MTExXSxcbiAgICBcIjE3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC45NDg4OF0sXG4gICAgXCIxODRcIjogWzAuMTcwMTQsIDAsIDAsIDAsIDAuNTMyMjJdLFxuICAgIFwiMTk4XCI6IFswLCAwLjY4NjExLCAwLjExNDMxLCAwLCAxLjAyMjc3XSxcbiAgICBcIjIxNlwiOiBbMC4wNDg2MSwgMC43MzQ3MiwgMC4wOTA2MiwgMCwgMC44ODU1NV0sXG4gICAgXCIyMjNcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDk3MzYsIDAsIDAuNjY1XSxcbiAgICBcIjIzMFwiOiBbMCwgMC40NDQ0NCwgMC4wODUsIDAsIDAuODI2NjZdLFxuICAgIFwiMjQ4XCI6IFswLjA5NzIyLCAwLjU0MTY3LCAwLjA5NDU4LCAwLCAwLjU5MTExXSxcbiAgICBcIjMwNVwiOiBbMCwgMC40NDQ0NCwgMC4wOTQyNiwgMCwgMC4zNTU1NV0sXG4gICAgXCIzMzhcIjogWzAsIDAuNjg2MTEsIDAuMTE0MzEsIDAsIDEuMTQwNTRdLFxuICAgIFwiMzM5XCI6IFswLCAwLjQ0NDQ0LCAwLjA4NSwgMCwgMC44MjY2Nl0sXG4gICAgXCI1NjdcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDQ2MTEsIDAsIDAuMzg1XSxcbiAgICBcIjcxMFwiOiBbMCwgMC42OTQ0NCwgMC4wNjcwOSwgMCwgMC41OTExMV0sXG4gICAgXCI3MTFcIjogWzAsIDAuNjMxOTQsIDAuMDgyNzEsIDAsIDAuNTkxMTFdLFxuICAgIFwiNzEzXCI6IFswLCAwLjU5NDQ0LCAwLjEwNDQ0LCAwLCAwLjU5MTExXSxcbiAgICBcIjcxNFwiOiBbMCwgMC42OTQ0NCwgMC4wODUyOCwgMCwgMC41OTExMV0sXG4gICAgXCI3MTVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTkxMTFdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLjEwMzMzLCAwLCAwLjU5MTExXSxcbiAgICBcIjcyOVwiOiBbMCwgMC42OTQ0NCwgMC4xMjk0NSwgMCwgMC4zNTU1NV0sXG4gICAgXCI3MzBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuOTQ4ODhdLFxuICAgIFwiNzMyXCI6IFswLCAwLjY5NDQ0LCAwLjExNDcyLCAwLCAwLjU5MTExXSxcbiAgICBcIjczM1wiOiBbMCwgMC42OTQ0NCwgMC4xMTQ3MiwgMCwgMC41OTExMV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjg2MTEsIDAuMTI5MDMsIDAsIDAuNjk3NzddLFxuICAgIFwiOTE2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjk0NDQ0XSxcbiAgICBcIjkyMFwiOiBbMCwgMC42ODYxMSwgMC4wOTA2MiwgMCwgMC44ODU1NV0sXG4gICAgXCI5MjNcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODA2NjZdLFxuICAgIFwiOTI2XCI6IFswLCAwLjY4NjExLCAwLjE1MDkyLCAwLCAwLjc2Nzc3XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42ODYxMSwgMC4xNzIwOCwgMCwgMC44OTYxXSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODYxMSwgMC4xMTQzMSwgMCwgMC44MjY2Nl0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjg2MTEsIDAuMTA3NzgsIDAsIDAuODg1NTVdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4NjExLCAwLjA1NjMyLCAwLCAwLjgyNjY2XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODYxMSwgMC4xMDc3OCwgMCwgMC44ODU1NV0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjg2MTEsIDAuMDk5MiwgMCwgMC44MjY2Nl0sXG4gICAgXCI4MjExXCI6IFswLCAwLjQ0NDQ0LCAwLjA5ODExLCAwLCAwLjU5MTExXSxcbiAgICBcIjgyMTJcIjogWzAsIDAuNDQ0NDQsIDAuMDk4MTEsIDAsIDEuMTgyMjFdLFxuICAgIFwiODIxNlwiOiBbMCwgMC42OTQ0NCwgMC4xMjk0NSwgMCwgMC4zNTU1NV0sXG4gICAgXCI4MjE3XCI6IFswLCAwLjY5NDQ0LCAwLjEyOTQ1LCAwLCAwLjM1NTU1XSxcbiAgICBcIjgyMjBcIjogWzAsIDAuNjk0NDQsIDAuMTY3NzIsIDAsIDAuNjIwNTVdLFxuICAgIFwiODIyMVwiOiBbMCwgMC42OTQ0NCwgMC4wNzkzOSwgMCwgMC42MjA1NV1cbiAgfSxcbiAgXCJNYWluLUl0YWxpY1wiOiB7XG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMC4xMjQxNywgMCwgMC4zMDY2N10sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMC4wNjk2MSwgMCwgMC41MTQ0NF0sXG4gICAgXCIzNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wNjYxNiwgMCwgMC44MTc3N10sXG4gICAgXCIzN1wiOiBbMC4wNTU1NiwgMC43NSwgMC4xMzYzOSwgMCwgMC44MTc3N10sXG4gICAgXCIzOFwiOiBbMCwgMC42OTQ0NCwgMC4wOTY5NCwgMCwgMC43NjY2Nl0sXG4gICAgXCIzOVwiOiBbMCwgMC42OTQ0NCwgMC4xMjQxNywgMCwgMC4zMDY2N10sXG4gICAgXCI0MFwiOiBbMC4yNSwgMC43NSwgMC4xNjE5NCwgMCwgMC40MDg4OV0sXG4gICAgXCI0MVwiOiBbMC4yNSwgMC43NSwgMC4wMzY5NCwgMCwgMC40MDg4OV0sXG4gICAgXCI0MlwiOiBbMCwgMC43NSwgMC4xNDkxNywgMCwgMC41MTExMV0sXG4gICAgXCI0M1wiOiBbMC4wNTY2NywgMC41NjE2NywgMC4wMzY5NCwgMCwgMC43NjY2Nl0sXG4gICAgXCI0NFwiOiBbMC4xOTQ0NCwgMC4xMDU1NiwgMCwgMCwgMC4zMDY2N10sXG4gICAgXCI0NVwiOiBbMCwgMC40MzA1NiwgMC4wMjgyNiwgMCwgMC4zNTc3OF0sXG4gICAgXCI0NlwiOiBbMCwgMC4xMDU1NiwgMCwgMCwgMC4zMDY2N10sXG4gICAgXCI0N1wiOiBbMC4yNSwgMC43NSwgMC4xNjE5NCwgMCwgMC41MTExMV0sXG4gICAgXCI0OFwiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI0OVwiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1MFwiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1MVwiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1MlwiOiBbMC4xOTQ0NCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1M1wiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1NFwiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1NVwiOiBbMC4xOTQ0NCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1NlwiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1N1wiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1OFwiOiBbMCwgMC40MzA1NiwgMC4wNTgyLCAwLCAwLjMwNjY3XSxcbiAgICBcIjU5XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjA1ODIsIDAsIDAuMzA2NjddLFxuICAgIFwiNjFcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLjA2NjE2LCAwLCAwLjc2NjY2XSxcbiAgICBcIjYzXCI6IFswLCAwLjY5NDQ0LCAwLjEyMjUsIDAsIDAuNTExMTFdLFxuICAgIFwiNjRcIjogWzAsIDAuNjk0NDQsIDAuMDk1OTcsIDAsIDAuNzY2NjZdLFxuICAgIFwiNjVcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzQzMzNdLFxuICAgIFwiNjZcIjogWzAsIDAuNjgzMzMsIDAuMTAyNTcsIDAsIDAuNzAzODldLFxuICAgIFwiNjdcIjogWzAsIDAuNjgzMzMsIDAuMTQ1MjgsIDAsIDAuNzE1NTVdLFxuICAgIFwiNjhcIjogWzAsIDAuNjgzMzMsIDAuMDk0MDMsIDAsIDAuNzU1XSxcbiAgICBcIjY5XCI6IFswLCAwLjY4MzMzLCAwLjEyMDI4LCAwLCAwLjY3ODMzXSxcbiAgICBcIjcwXCI6IFswLCAwLjY4MzMzLCAwLjEzMzA1LCAwLCAwLjY1Mjc3XSxcbiAgICBcIjcxXCI6IFswLCAwLjY4MzMzLCAwLjA4NzIyLCAwLCAwLjc3MzYxXSxcbiAgICBcIjcyXCI6IFswLCAwLjY4MzMzLCAwLjE2Mzg5LCAwLCAwLjc0MzMzXSxcbiAgICBcIjczXCI6IFswLCAwLjY4MzMzLCAwLjE1ODA2LCAwLCAwLjM4NTU1XSxcbiAgICBcIjc0XCI6IFswLCAwLjY4MzMzLCAwLjE0MDI4LCAwLCAwLjUyNV0sXG4gICAgXCI3NVwiOiBbMCwgMC42ODMzMywgMC4xNDUyOCwgMCwgMC43Njg4OF0sXG4gICAgXCI3NlwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42MjcyMl0sXG4gICAgXCI3N1wiOiBbMCwgMC42ODMzMywgMC4xNjM4OSwgMCwgMC44OTY2Nl0sXG4gICAgXCI3OFwiOiBbMCwgMC42ODMzMywgMC4xNjM4OSwgMCwgMC43NDMzM10sXG4gICAgXCI3OVwiOiBbMCwgMC42ODMzMywgMC4wOTQwMywgMCwgMC43NjY2Nl0sXG4gICAgXCI4MFwiOiBbMCwgMC42ODMzMywgMC4xMDI1NywgMCwgMC42NzgzM10sXG4gICAgXCI4MVwiOiBbMC4xOTQ0NCwgMC42ODMzMywgMC4wOTQwMywgMCwgMC43NjY2Nl0sXG4gICAgXCI4MlwiOiBbMCwgMC42ODMzMywgMC4wMzg2OCwgMCwgMC43Mjk0NF0sXG4gICAgXCI4M1wiOiBbMCwgMC42ODMzMywgMC4xMTk3MiwgMCwgMC41NjIyMl0sXG4gICAgXCI4NFwiOiBbMCwgMC42ODMzMywgMC4xMzMwNSwgMCwgMC43MTU1NV0sXG4gICAgXCI4NVwiOiBbMCwgMC42ODMzMywgMC4xNjM4OSwgMCwgMC43NDMzM10sXG4gICAgXCI4NlwiOiBbMCwgMC42ODMzMywgMC4xODM2MSwgMCwgMC43NDMzM10sXG4gICAgXCI4N1wiOiBbMCwgMC42ODMzMywgMC4xODM2MSwgMCwgMC45OTg4OF0sXG4gICAgXCI4OFwiOiBbMCwgMC42ODMzMywgMC4xNTgwNiwgMCwgMC43NDMzM10sXG4gICAgXCI4OVwiOiBbMCwgMC42ODMzMywgMC4xOTM4MywgMCwgMC43NDMzM10sXG4gICAgXCI5MFwiOiBbMCwgMC42ODMzMywgMC4xNDUyOCwgMCwgMC42MTMzM10sXG4gICAgXCI5MVwiOiBbMC4yNSwgMC43NSwgMC4xODc1LCAwLCAwLjMwNjY3XSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLjEwNTI4LCAwLCAwLjMwNjY3XSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLjA2NjQ2LCAwLCAwLjUxMTExXSxcbiAgICBcIjk1XCI6IFswLjMxLCAwLjEyMDU2LCAwLjA5MjA4LCAwLCAwLjUxMTExXSxcbiAgICBcIjk3XCI6IFswLCAwLjQzMDU2LCAwLjA3NjcxLCAwLCAwLjUxMTExXSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLjA2MzEyLCAwLCAwLjQ2XSxcbiAgICBcIjk5XCI6IFswLCAwLjQzMDU2LCAwLjA1NjUzLCAwLCAwLjQ2XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMC4xMDMzMywgMCwgMC41MTExMV0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDMwNTYsIDAuMDc1MTQsIDAsIDAuNDZdLFxuICAgIFwiMTAyXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjIxMTk0LCAwLCAwLjMwNjY3XSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wODg0NywgMCwgMC40Nl0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAuMDc2NzEsIDAsIDAuNTExMTFdLFxuICAgIFwiMTA1XCI6IFswLCAwLjY1NTM2LCAwLjEwMTksIDAsIDAuMzA2NjddLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY1NTM2LCAwLjE0NDY3LCAwLCAwLjMwNjY3XSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMC4xMDc2NCwgMCwgMC40Nl0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjk0NDQsIDAuMTAzMzMsIDAsIDAuMjU1NTVdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQzMDU2LCAwLjA3NjcxLCAwLCAwLjgxNzc3XSxcbiAgICBcIjExMFwiOiBbMCwgMC40MzA1NiwgMC4wNzY3MSwgMCwgMC41NjIyMl0sXG4gICAgXCIxMTFcIjogWzAsIDAuNDMwNTYsIDAuMDYzMTIsIDAsIDAuNTExMTFdLFxuICAgIFwiMTEyXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjA2MzEyLCAwLCAwLjUxMTExXSxcbiAgICBcIjExM1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wODg0NywgMCwgMC40Nl0sXG4gICAgXCIxMTRcIjogWzAsIDAuNDMwNTYsIDAuMTA3NjQsIDAsIDAuNDIxNjZdLFxuICAgIFwiMTE1XCI6IFswLCAwLjQzMDU2LCAwLjA4MjA4LCAwLCAwLjQwODg5XSxcbiAgICBcIjExNlwiOiBbMCwgMC42MTUwOCwgMC4wOTQ4NiwgMCwgMC4zMzIyMl0sXG4gICAgXCIxMTdcIjogWzAsIDAuNDMwNTYsIDAuMDc2NzEsIDAsIDAuNTM2NjZdLFxuICAgIFwiMTE4XCI6IFswLCAwLjQzMDU2LCAwLjEwNzY0LCAwLCAwLjQ2XSxcbiAgICBcIjExOVwiOiBbMCwgMC40MzA1NiwgMC4xMDc2NCwgMCwgMC42NjQ0NF0sXG4gICAgXCIxMjBcIjogWzAsIDAuNDMwNTYsIDAuMTIwNDIsIDAsIDAuNDYzODldLFxuICAgIFwiMTIxXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjA4ODQ3LCAwLCAwLjQ4NTU1XSxcbiAgICBcIjEyMlwiOiBbMCwgMC40MzA1NiwgMC4xMjI5MiwgMCwgMC40MDg4OV0sXG4gICAgXCIxMjZcIjogWzAuMzUsIDAuMzE3ODYsIDAuMTE1ODUsIDAsIDAuNTExMTFdLFxuICAgIFwiMTYzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc2OTA5XSxcbiAgICBcIjE2OFwiOiBbMCwgMC42Njc4NiwgMC4xMDQ3NCwgMCwgMC41MTExMV0sXG4gICAgXCIxNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODMxMjldLFxuICAgIFwiMTg0XCI6IFswLjE3MDE0LCAwLCAwLCAwLCAwLjQ2XSxcbiAgICBcIjE5OFwiOiBbMCwgMC42ODMzMywgMC4xMjAyOCwgMCwgMC44ODI3N10sXG4gICAgXCIyMTZcIjogWzAuMDQ4NjEsIDAuNzMxOTQsIDAuMDk0MDMsIDAsIDAuNzY2NjZdLFxuICAgIFwiMjIzXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjEwNTE0LCAwLCAwLjUzNjY2XSxcbiAgICBcIjIzMFwiOiBbMCwgMC40MzA1NiwgMC4wNzUxNCwgMCwgMC43MTU1NV0sXG4gICAgXCIyNDhcIjogWzAuMDk3MjIsIDAuNTI3NzgsIDAuMDkxOTQsIDAsIDAuNTExMTFdLFxuICAgIFwiMzA1XCI6IFswLCAwLjQzMDU2LCAwLCAwLjAyNzc4LCAwLjMyMjQ2XSxcbiAgICBcIjMzOFwiOiBbMCwgMC42ODMzMywgMC4xMjAyOCwgMCwgMC45ODQ5OV0sXG4gICAgXCIzMzlcIjogWzAsIDAuNDMwNTYsIDAuMDc1MTQsIDAsIDAuNzE1NTVdLFxuICAgIFwiNTY3XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLjA4MzM0LCAwLjM4NDAzXSxcbiAgICBcIjcxMFwiOiBbMCwgMC42OTQ0NCwgMC4wNjY0NiwgMCwgMC41MTExMV0sXG4gICAgXCI3MTFcIjogWzAsIDAuNjI4NDcsIDAuMDgyOTUsIDAsIDAuNTExMTFdLFxuICAgIFwiNzEzXCI6IFswLCAwLjU2MTY3LCAwLjEwMzMzLCAwLCAwLjUxMTExXSxcbiAgICBcIjcxNFwiOiBbMCwgMC42OTQ0NCwgMC4wOTY5NCwgMCwgMC41MTExMV0sXG4gICAgXCI3MTVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLjEwODA2LCAwLCAwLjUxMTExXSxcbiAgICBcIjcyOVwiOiBbMCwgMC42Njc4NiwgMC4xMTc1MiwgMCwgMC4zMDY2N10sXG4gICAgXCI3MzBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODMxMjldLFxuICAgIFwiNzMyXCI6IFswLCAwLjY2Nzg2LCAwLjExNTg1LCAwLCAwLjUxMTExXSxcbiAgICBcIjczM1wiOiBbMCwgMC42OTQ0NCwgMC4xMjI1LCAwLCAwLjUxMTExXSxcbiAgICBcIjkxNVwiOiBbMCwgMC42ODMzMywgMC4xMzMwNSwgMCwgMC42MjcyMl0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuODE3NzddLFxuICAgIFwiOTIwXCI6IFswLCAwLjY4MzMzLCAwLjA5NDAzLCAwLCAwLjc2NjY2XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42OTIyMl0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjgzMzMsIDAuMTUyOTQsIDAsIDAuNjY0NDRdLFxuICAgIFwiOTI4XCI6IFswLCAwLjY4MzMzLCAwLjE2Mzg5LCAwLCAwLjc0MzMzXSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODMzMywgMC4xMjAyOCwgMCwgMC43MTU1NV0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjgzMzMsIDAuMTExMTEsIDAsIDAuNzY2NjZdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4MzMzLCAwLjA1OTg2LCAwLCAwLjcxNTU1XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODMzMywgMC4xMTExMSwgMCwgMC43NjY2Nl0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjgzMzMsIDAuMTAyNTcsIDAsIDAuNzE1NTVdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40MzA1NiwgMC4wOTIwOCwgMCwgMC41MTExMV0sXG4gICAgXCI4MjEyXCI6IFswLCAwLjQzMDU2LCAwLjA5MjA4LCAwLCAxLjAyMjIyXSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAuMTI0MTcsIDAsIDAuMzA2NjddLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMC4xMjQxNywgMCwgMC4zMDY2N10sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLjE2ODUsIDAsIDAuNTE0NDRdLFxuICAgIFwiODIyMVwiOiBbMCwgMC42OTQ0NCwgMC4wNjk2MSwgMCwgMC41MTQ0NF0sXG4gICAgXCI4NDYzXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjU0MDI4XVxuICB9LFxuICBcIk1haW4tUmVndWxhclwiOiB7XG4gICAgXCIzMlwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjM1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjM2XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMzg4ODldLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMzg4ODldLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCI0M1wiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI0NFwiOiBbMC4xOTQ0NCwgMC4xMDU1NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0NVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC4zMzMzM10sXG4gICAgXCI0NlwiOiBbMCwgMC4xMDU1NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0N1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjQ4XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNDlcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1MFwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjUxXCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTJcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1M1wiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjU0XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTVcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1NlwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjU3XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNThcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNTlcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNjBcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjYxXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI2MlwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiNjRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNjVcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzVdLFxuICAgIFwiNjZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzA4MzRdLFxuICAgIFwiNjdcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiNjhcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzYzODldLFxuICAgIFwiNjlcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjgwNTZdLFxuICAgIFwiNzBcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjUyNzhdLFxuICAgIFwiNzFcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzg0NzJdLFxuICAgIFwiNzJcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzVdLFxuICAgIFwiNzNcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuMzYxMTFdLFxuICAgIFwiNzRcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNTEzODldLFxuICAgIFwiNzVcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNzZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjI1XSxcbiAgICBcIjc3XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjkxNjY3XSxcbiAgICBcIjc4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc1XSxcbiAgICBcIjc5XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjgwXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjY4MDU2XSxcbiAgICBcIjgxXCI6IFswLjE5NDQ0LCAwLjY4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjgyXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjczNjExXSxcbiAgICBcIjgzXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg0XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg1XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc1XSxcbiAgICBcIjg2XCI6IFswLCAwLjY4MzMzLCAwLjAxMzg5LCAwLCAwLjc1XSxcbiAgICBcIjg3XCI6IFswLCAwLjY4MzMzLCAwLjAxMzg5LCAwLCAxLjAyNzc4XSxcbiAgICBcIjg4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc1XSxcbiAgICBcIjg5XCI6IFswLCAwLjY4MzMzLCAwLjAyNSwgMCwgMC43NV0sXG4gICAgXCI5MFwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42MTExMV0sXG4gICAgXCI5MVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI5MlwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiOTVcIjogWzAuMzEsIDAuMTIwNTYsIDAuMDI3NzgsIDAsIDAuNV0sXG4gICAgXCI5N1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjk5XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMTAyXCI6IFswLCAwLjY5NDQ0LCAwLjA3Nzc4LCAwLCAwLjMwNTU2XSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wMTM4OSwgMCwgMC41XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjY3ODYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY2Nzg2LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjExMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMTFcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjExNFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC4zOTE2N10sXG4gICAgXCIxMTVcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuMzk0NDVdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYxNTA4LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjExN1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMThcIjogWzAsIDAuNDMwNTYsIDAuMDEzODksIDAsIDAuNTI3NzhdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQzMDU2LCAwLjAxMzg5LCAwLCAwLjcyMjIyXSxcbiAgICBcIjEyMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDEzODksIDAsIDAuNTI3NzhdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEyM1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjEyNFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCIxMjVcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCIxMjZcIjogWzAuMzUsIDAuMzE3ODYsIDAsIDAsIDAuNV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMTY3XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjE2OFwiOiBbMCwgMC42Njc4NiwgMCwgMCwgMC41XSxcbiAgICBcIjE3MlwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCIxNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzVdLFxuICAgIFwiMTc3XCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjE4MlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCIxODRcIjogWzAuMTcwMTQsIDAsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMTk4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjkwMjc4XSxcbiAgICBcIjIxNVwiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIyMTZcIjogWzAuMDQ4NjEsIDAuNzMxOTQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiMjIzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiMjMwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjI0N1wiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIyNDhcIjogWzAuMDk3MjIsIDAuNTI3NzgsIDAsIDAsIDAuNV0sXG4gICAgXCIzMDVcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiMzM4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAxLjAxMzg5XSxcbiAgICBcIjMzOVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NjdcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiNzEwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzExXCI6IFswLCAwLjYyODQ3LCAwLCAwLCAwLjVdLFxuICAgIFwiNzEzXCI6IFswLCAwLjU2Nzc4LCAwLCAwLCAwLjVdLFxuICAgIFwiNzE0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzE1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzI5XCI6IFswLCAwLjY2Nzg2LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjczMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43NV0sXG4gICAgXCI3MzJcIjogWzAsIDAuNjY3ODYsIDAsIDAsIDAuNV0sXG4gICAgXCI3MzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjI1XSxcbiAgICBcIjkxNlwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI5MjBcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTIzXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjY5NDQ1XSxcbiAgICBcIjkyNlwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MjhcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzVdLFxuICAgIFwiOTMxXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjkzM1wiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5MzRcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiOTM2XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjkzN1wiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4MjExXCI6IFswLCAwLjQzMDU2LCAwLjAyNzc4LCAwLCAwLjVdLFxuICAgIFwiODIxMlwiOiBbMCwgMC40MzA1NiwgMC4wMjc3OCwgMCwgMS4wXSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiODIyMVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjgyMjRcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiODIyNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCI4MjMwXCI6IFswLCAwLjEyLCAwLCAwLCAxLjE3Ml0sXG4gICAgXCI4MjQyXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjI3NV0sXG4gICAgXCI4NDA3XCI6IFswLCAwLjcxNDQ0LCAwLjE1MzgyLCAwLCAwLjVdLFxuICAgIFwiODQ2M1wiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC41NDAyOF0sXG4gICAgXCI4NDY1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg0NjdcIjogWzAsIDAuNjk0NDQsIDAsIDAuMTExMTEsIDAuNDE2NjddLFxuICAgIFwiODQ3MlwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4xMTExMSwgMC42MzY0Nl0sXG4gICAgXCI4NDc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg1MDFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODU5MlwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NTkzXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiODU5NFwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NTk1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiODU5NlwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NTk3XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiODU5OFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4wXSxcbiAgICBcIjg1OTlcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjAwXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjBdLFxuICAgIFwiODYwMVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MTRcIjogWzAuMDExLCAwLjUxMSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MTdcIjogWzAuMDExLCAwLjUxMSwgMCwgMCwgMS4xMjZdLFxuICAgIFwiODYxOFwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjEyNl0sXG4gICAgXCI4NjM2XCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2MzdcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY0MFwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjQxXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTJcIjogWzAuMDExLCAwLjY3MSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTZcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY1N1wiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4NjU4XCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTlcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODY2MFwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjYxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg3MDRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODcwNlwiOiBbMCwgMC42OTQ0NCwgMC4wNTU1NiwgMC4wODMzNCwgMC41MzA5XSxcbiAgICBcIjg3MDdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODcwOVwiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjg3MTFcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODcxMlwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODcxNVwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODcyMlwiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzIzXCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3MjVcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzI2XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiODcyN1wiOiBbLTAuMDM0NzIsIDAuNDY1MjgsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzI4XCI6IFstMC4wNTU1NSwgMC40NDQ0NSwgMCwgMCwgMC41XSxcbiAgICBcIjg3MjlcIjogWy0wLjA1NTU1LCAwLjQ0NDQ1LCAwLCAwLCAwLjVdLFxuICAgIFwiODczMFwiOiBbMC4yLCAwLjgsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODczM1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzM0XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAxLjBdLFxuICAgIFwiODczNlwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4NzM5XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjg3NDFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzQzXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg3NDRcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODc0NVwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NzQ2XCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg3NDdcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMTExMTEsIDAsIDAuNDE2NjddLFxuICAgIFwiODc2NFwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc2OFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4NzcxXCI6IFstMC4wMzYyNSwgMC40NjM3NSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzczXCI6IFstMC4wMjIsIDAuNTg5LCAwLCAwLCAxLjBdLFxuICAgIFwiODc3NlwiOiBbLTAuMDE2ODgsIDAuNDgzMTIsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc4MVwiOiBbLTAuMDM2MjUsIDAuNDYzNzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc4NFwiOiBbLTAuMTMzLCAwLjY3LCAwLCAwLCAwLjc3OF0sXG4gICAgXCI4ODAxXCI6IFstMC4wMzYyNSwgMC40NjM3NSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODA0XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MDVcIjogWzAuMTM1OTcsIDAuNjM1OTcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgxMFwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDEuMF0sXG4gICAgXCI4ODExXCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMS4wXSxcbiAgICBcIjg4MjZcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MjdcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzRcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzVcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzhcIjogWzAuMTM1OTcsIDAuNjM1OTcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgzOVwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODQ2XCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg4NDlcIjogWzAuMTM1OTcsIDAuNjM1OTcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg1MFwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODUxXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg4NTJcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODg1M1wiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODU0XCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NTVcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg1NlwiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODU3XCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NjZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODg2N1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4ODY4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NjlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg3MlwiOiBbMC4yNDksIDAuNzUsIDAsIDAsIDAuODY3XSxcbiAgICBcIjg5MDBcIjogWy0wLjA1NTU1LCAwLjQ0NDQ1LCAwLCAwLCAwLjVdLFxuICAgIFwiODkwMVwiOiBbLTAuMDU1NTUsIDAuNDQ0NDUsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODkwMlwiOiBbLTAuMDM0NzIsIDAuNDY1MjgsIDAsIDAsIDAuNV0sXG4gICAgXCI4OTA0XCI6IFswLjAwNSwgMC41MDUsIDAsIDAsIDAuOV0sXG4gICAgXCI4OTQyXCI6IFswLjAzLCAwLjksIDAsIDAsIDAuMjc4XSxcbiAgICBcIjg5NDNcIjogWy0wLjE5LCAwLjMxLCAwLCAwLCAxLjE3Ml0sXG4gICAgXCI4OTQ1XCI6IFstMC4xLCAwLjgyLCAwLCAwLCAxLjI4Ml0sXG4gICAgXCI4OTY4XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjg5NjlcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiODk3MFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCI4OTcxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjg5OTRcIjogWy0wLjE0MjM2LCAwLjM1NzY0LCAwLCAwLCAxLjBdLFxuICAgIFwiODk5NVwiOiBbLTAuMTQyMzYsIDAuMzU3NjQsIDAsIDAsIDEuMF0sXG4gICAgXCI5MTM2XCI6IFswLjI0NCwgMC43NDQsIDAsIDAsIDAuNDEyXSxcbiAgICBcIjkxMzdcIjogWzAuMjQ0LCAwLjc0NCwgMCwgMCwgMC40MTJdLFxuICAgIFwiOTY1MVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5NjU3XCI6IFstMC4wMzQ3MiwgMC40NjUyOCwgMCwgMCwgMC41XSxcbiAgICBcIjk2NjFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTY2N1wiOiBbLTAuMDM0NzIsIDAuNDY1MjgsIDAsIDAsIDAuNV0sXG4gICAgXCI5NzExXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjBdLFxuICAgIFwiOTgyNFwiOiBbMC4xMjk2MywgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5ODI1XCI6IFswLjEyOTYzLCAwLjY5NDQ0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjk4MjZcIjogWzAuMTI5NjMsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTgyN1wiOiBbMC4xMjk2MywgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5ODM3XCI6IFswLCAwLjc1LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjk4MzhcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuMzg4ODldLFxuICAgIFwiOTgzOVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCIxMDIxNlwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCIxMDIxN1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCIxMDIyMlwiOiBbMC4yNDQsIDAuNzQ0LCAwLCAwLCAwLjQxMl0sXG4gICAgXCIxMDIyM1wiOiBbMC4yNDQsIDAuNzQ0LCAwLCAwLCAwLjQxMl0sXG4gICAgXCIxMDIyOVwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjYwOV0sXG4gICAgXCIxMDIzMFwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjYzOF0sXG4gICAgXCIxMDIzMVwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjg1OV0sXG4gICAgXCIxMDIzMlwiOiBbMC4wMjQsIDAuNTI1LCAwLCAwLCAxLjYwOV0sXG4gICAgXCIxMDIzM1wiOiBbMC4wMjQsIDAuNTI1LCAwLCAwLCAxLjYzOF0sXG4gICAgXCIxMDIzNFwiOiBbMC4wMjQsIDAuNTI1LCAwLCAwLCAxLjg1OF0sXG4gICAgXCIxMDIzNlwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjYzOF0sXG4gICAgXCIxMDgxNVwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43NV0sXG4gICAgXCIxMDkyN1wiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkyOFwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM3NlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMF1cbiAgfSxcbiAgXCJNYXRoLUJvbGRJdGFsaWNcIjoge1xuICAgIFwiNjVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODY5NDRdLFxuICAgIFwiNjZcIjogWzAsIDAuNjg2MTEsIDAuMDQ4MzUsIDAsIDAuODY2NF0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODYxMSwgMC4wNjk3OSwgMCwgMC44MTY5NF0sXG4gICAgXCI2OFwiOiBbMCwgMC42ODYxMSwgMC4wMzE5NCwgMCwgMC45MzgxMl0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODYxMSwgMC4wNTQ1MSwgMCwgMC44MTAwN10sXG4gICAgXCI3MFwiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMC42ODg4OV0sXG4gICAgXCI3MVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44ODY3M10sXG4gICAgXCI3MlwiOiBbMCwgMC42ODYxMSwgMC4wODIyOSwgMCwgMC45ODIyOV0sXG4gICAgXCI3M1wiOiBbMCwgMC42ODYxMSwgMC4wNzc3OCwgMCwgMC41MTExMV0sXG4gICAgXCI3NFwiOiBbMCwgMC42ODYxMSwgMC4xMDA2OSwgMCwgMC42MzEyNV0sXG4gICAgXCI3NVwiOiBbMCwgMC42ODYxMSwgMC4wNjk3OSwgMCwgMC45NzExOF0sXG4gICAgXCI3NlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC43NTU1NV0sXG4gICAgXCI3N1wiOiBbMCwgMC42ODYxMSwgMC4xMTQyNCwgMCwgMS4xNDIwMV0sXG4gICAgXCI3OFwiOiBbMCwgMC42ODYxMSwgMC4xMTQyNCwgMCwgMC45NTAzNF0sXG4gICAgXCI3OVwiOiBbMCwgMC42ODYxMSwgMC4wMzE5NCwgMCwgMC44MzY2Nl0sXG4gICAgXCI4MFwiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMC43MjMwOV0sXG4gICAgXCI4MVwiOiBbMC4xOTQ0NCwgMC42ODYxMSwgMCwgMCwgMC44Njg2MV0sXG4gICAgXCI4MlwiOiBbMCwgMC42ODYxMSwgMC4wMDQyMSwgMCwgMC44NzIzNV0sXG4gICAgXCI4M1wiOiBbMCwgMC42ODYxMSwgMC4wNTM4MiwgMCwgMC42OTI3MV0sXG4gICAgXCI4NFwiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMC42MzY2M10sXG4gICAgXCI4NVwiOiBbMCwgMC42ODYxMSwgMC4xMTQyNCwgMCwgMC44MDAyN10sXG4gICAgXCI4NlwiOiBbMCwgMC42ODYxMSwgMC4yNTU1NSwgMCwgMC42Nzc3OF0sXG4gICAgXCI4N1wiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMS4wOTMwNV0sXG4gICAgXCI4OFwiOiBbMCwgMC42ODYxMSwgMC4wNzc3OCwgMCwgMC45NDcyMl0sXG4gICAgXCI4OVwiOiBbMCwgMC42ODYxMSwgMC4yNTU1NSwgMCwgMC42NzQ1OF0sXG4gICAgXCI5MFwiOiBbMCwgMC42ODYxMSwgMC4wNjk3OSwgMCwgMC43NzI1N10sXG4gICAgXCI5N1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC42MzI4N10sXG4gICAgXCI5OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MjA4M10sXG4gICAgXCI5OVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MTM0Ml0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjA5NzJdLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjU1MzYxXSxcbiAgICBcIjEwMlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4xMTA0MiwgMCwgMC41NjgwNl0sXG4gICAgXCIxMDNcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDM3MDQsIDAsIDAuNTQ0OV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY3NTldLFxuICAgIFwiMTA1XCI6IFswLCAwLjY5MzI2LCAwLCAwLCAwLjQwNDhdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY5MzI2LCAwLjA2MjIsIDAsIDAuNDcwODNdLFxuICAgIFwiMTA3XCI6IFswLCAwLjY5NDQ0LCAwLjAxODUyLCAwLCAwLjYwMzddLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLjAwODgsIDAsIDAuMzQ4MTVdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAxLjAzMjRdLFxuICAgIFwiMTEwXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjcxMjk2XSxcbiAgICBcIjExMVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41ODQ3Ml0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNjAwOTJdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAzNzA0LCAwLCAwLjU0MjEzXSxcbiAgICBcIjExNFwiOiBbMCwgMC40NDQ0NCwgMC4wMzE5NCwgMCwgMC41Mjg3XSxcbiAgICBcIjExNVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MzEyNV0sXG4gICAgXCIxMTZcIjogWzAsIDAuNjM0OTIsIDAsIDAsIDAuNDE1MjhdLFxuICAgIFwiMTE3XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjY4MTAyXSxcbiAgICBcIjExOFwiOiBbMCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC41NjY2Nl0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDQ0NDQsIDAuMDI3NzgsIDAsIDAuODMxNDhdLFxuICAgIFwiMTIwXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjY1OTAzXSxcbiAgICBcIjEyMVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC41OTAyOF0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDQ0NDQsIDAuMDQyMTMsIDAsIDAuNTU1MDldLFxuICAgIFwiOTE1XCI6IFswLCAwLjY4NjExLCAwLjE1OTcyLCAwLCAwLjY1Njk0XSxcbiAgICBcIjkxNlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45NTgzM10sXG4gICAgXCI5MjBcIjogWzAsIDAuNjg2MTEsIDAuMDMxOTQsIDAsIDAuODY3MjJdLFxuICAgIFwiOTIzXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjgwNTU1XSxcbiAgICBcIjkyNlwiOiBbMCwgMC42ODYxMSwgMC4wNzQ1OCwgMCwgMC44NDEyNV0sXG4gICAgXCI5MjhcIjogWzAsIDAuNjg2MTEsIDAuMDgyMjksIDAsIDAuOTgyMjldLFxuICAgIFwiOTMxXCI6IFswLCAwLjY4NjExLCAwLjA1NDUxLCAwLCAwLjg4NTA3XSxcbiAgICBcIjkzM1wiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMC42NzA4M10sXG4gICAgXCI5MzRcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiOTM2XCI6IFswLCAwLjY4NjExLCAwLjExNjUzLCAwLCAwLjcxNDAyXSxcbiAgICBcIjkzN1wiOiBbMCwgMC42ODYxMSwgMC4wNDgzNSwgMCwgMC44Nzg5XSxcbiAgICBcIjk0NVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC43NjA2NF0sXG4gICAgXCI5NDZcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDM0MDMsIDAsIDAuNjU5NzJdLFxuICAgIFwiOTQ3XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjA2Mzg5LCAwLCAwLjU5MDAzXSxcbiAgICBcIjk0OFwiOiBbMCwgMC42OTQ0NCwgMC4wMzgxOSwgMCwgMC41MjIyMl0sXG4gICAgXCI5NDlcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTI4ODJdLFxuICAgIFwiOTUwXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA2MjE1LCAwLCAwLjUwODMzXSxcbiAgICBcIjk1MVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC42XSxcbiAgICBcIjk1MlwiOiBbMCwgMC42OTQ0NCwgMC4wMzE5NCwgMCwgMC41NjE4XSxcbiAgICBcIjk1M1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40MTIwNF0sXG4gICAgXCI5NTRcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNjY3NTldLFxuICAgIFwiOTU1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY3MDgzXSxcbiAgICBcIjk1NlwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC43MDc4N10sXG4gICAgXCI5NTdcIjogWzAsIDAuNDQ0NDQsIDAuMDY4OTgsIDAsIDAuNTc2ODVdLFxuICAgIFwiOTU4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjAzMDIxLCAwLCAwLjUwODMzXSxcbiAgICBcIjk1OVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41ODQ3Ml0sXG4gICAgXCI5NjBcIjogWzAsIDAuNDQ0NDQsIDAuMDM3MDQsIDAsIDAuNjgyNDFdLFxuICAgIFwiOTYxXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjYxMThdLFxuICAgIFwiOTYyXCI6IFswLjA5NzIyLCAwLjQ0NDQ0LCAwLjA3OTE3LCAwLCAwLjQyMzYxXSxcbiAgICBcIjk2M1wiOiBbMCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC42ODU4OF0sXG4gICAgXCI5NjRcIjogWzAsIDAuNDQ0NDQsIDAuMTM0NzIsIDAsIDAuNTIwODNdLFxuICAgIFwiOTY1XCI6IFswLCAwLjQ0NDQ0LCAwLjAzNzA0LCAwLCAwLjYzMDU1XSxcbiAgICBcIjk2NlwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC43NDcyMl0sXG4gICAgXCI5NjdcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNzE4MDVdLFxuICAgIFwiOTY4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjAzNzA0LCAwLCAwLjc1ODMzXSxcbiAgICBcIjk2OVwiOiBbMCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC43MTc4Ml0sXG4gICAgXCI5NzdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjkxNTVdLFxuICAgIFwiOTgxXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjcxMjVdLFxuICAgIFwiOTgyXCI6IFswLCAwLjQ0NDQ0LCAwLjAzMTk0LCAwLCAwLjk3NV0sXG4gICAgXCIxMDA5XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjYxMThdLFxuICAgIFwiMTAxM1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40ODMzM11cbiAgfSxcbiAgXCJNYXRoLUl0YWxpY1wiOiB7XG4gICAgXCI2NVwiOiBbMCwgMC42ODMzMywgMCwgMC4xMzg4OSwgMC43NV0sXG4gICAgXCI2NlwiOiBbMCwgMC42ODMzMywgMC4wNTAxNywgMC4wODMzNCwgMC43NTg1MV0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODMzMywgMC4wNzE1MywgMC4wODMzNCwgMC43MTQ3Ml0sXG4gICAgXCI2OFwiOiBbMCwgMC42ODMzMywgMC4wMjc3OCwgMC4wNTU1NiwgMC44Mjc5Ml0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODMzMywgMC4wNTc2NCwgMC4wODMzNCwgMC43MzgyXSxcbiAgICBcIjcwXCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLjA4MzM0LCAwLjY0MzA2XSxcbiAgICBcIjcxXCI6IFswLCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjc4NjI1XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4MzMzLCAwLjA4MTI1LCAwLjA1NTU2LCAwLjgzMTI1XSxcbiAgICBcIjczXCI6IFswLCAwLjY4MzMzLCAwLjA3ODQ3LCAwLjExMTExLCAwLjQzOTU4XSxcbiAgICBcIjc0XCI6IFswLCAwLjY4MzMzLCAwLjA5NjE4LCAwLjE2NjY3LCAwLjU1NDUxXSxcbiAgICBcIjc1XCI6IFswLCAwLjY4MzMzLCAwLjA3MTUzLCAwLjA1NTU2LCAwLjg0OTMxXSxcbiAgICBcIjc2XCI6IFswLCAwLjY4MzMzLCAwLCAwLjAyNzc4LCAwLjY4MDU2XSxcbiAgICBcIjc3XCI6IFswLCAwLjY4MzMzLCAwLjEwOTAzLCAwLjA4MzM0LCAwLjk3MDE0XSxcbiAgICBcIjc4XCI6IFswLCAwLjY4MzMzLCAwLjEwOTAzLCAwLjA4MzM0LCAwLjgwMzQ3XSxcbiAgICBcIjc5XCI6IFswLCAwLjY4MzMzLCAwLjAyNzc4LCAwLjA4MzM0LCAwLjc2Mjc4XSxcbiAgICBcIjgwXCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLjA4MzM0LCAwLjY0MjAxXSxcbiAgICBcIjgxXCI6IFswLjE5NDQ0LCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjc5MDU2XSxcbiAgICBcIjgyXCI6IFswLCAwLjY4MzMzLCAwLjAwNzczLCAwLjA4MzM0LCAwLjc1OTI5XSxcbiAgICBcIjgzXCI6IFswLCAwLjY4MzMzLCAwLjA1NzY0LCAwLjA4MzM0LCAwLjYxMzJdLFxuICAgIFwiODRcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAuMDgzMzQsIDAuNTg0MzhdLFxuICAgIFwiODVcIjogWzAsIDAuNjgzMzMsIDAuMTA5MDMsIDAuMDI3NzgsIDAuNjgyNzhdLFxuICAgIFwiODZcIjogWzAsIDAuNjgzMzMsIDAuMjIyMjIsIDAsIDAuNTgzMzNdLFxuICAgIFwiODdcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAsIDAuOTQ0NDVdLFxuICAgIFwiODhcIjogWzAsIDAuNjgzMzMsIDAuMDc4NDcsIDAuMDgzMzQsIDAuODI4NDddLFxuICAgIFwiODlcIjogWzAsIDAuNjgzMzMsIDAuMjIyMjIsIDAsIDAuNTgwNTZdLFxuICAgIFwiOTBcIjogWzAsIDAuNjgzMzMsIDAuMDcxNTMsIDAuMDgzMzQsIDAuNjgyNjRdLFxuICAgIFwiOTdcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI4NTldLFxuICAgIFwiOThcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNDI5MTddLFxuICAgIFwiOTlcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDMyNzZdLFxuICAgIFwiMTAwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLjE2NjY3LCAwLjUyMDQ5XSxcbiAgICBcIjEwMVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40NjU2M10sXG4gICAgXCIxMDJcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMTA3NjQsIDAuMTY2NjcsIDAuNDg5NTldLFxuICAgIFwiMTAzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjAzNTg4LCAwLjAyNzc4LCAwLjQ3Njk3XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzYxNl0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjU5NTIsIDAsIDAsIDAuMzQ0NTFdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY1OTUyLCAwLjA1NzI0LCAwLCAwLjQxMTgxXSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMC4wMzE0OCwgMCwgMC41MjA2XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMC4wMTk2OCwgMC4wODMzNCwgMC4yOTgzOF0sXG4gICAgXCIxMDlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuODc4MDFdLFxuICAgIFwiMTEwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjYwMDIzXSxcbiAgICBcIjExMVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40ODQ3Ml0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNTAzMTNdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjAzNTg4LCAwLjA4MzM0LCAwLjQ0NjQxXSxcbiAgICBcIjExNFwiOiBbMCwgMC40MzA1NiwgMC4wMjc3OCwgMC4wNTU1NiwgMC40NTExNl0sXG4gICAgXCIxMTVcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDY4NzVdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYxNTA4LCAwLCAwLjA4MzM0LCAwLjM2MTExXSxcbiAgICBcIjExN1wiOiBbMCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC41NzI0Nl0sXG4gICAgXCIxMThcIjogWzAsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDI3NzgsIDAuNDg0NzJdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQzMDU2LCAwLjAyNjkxLCAwLjA4MzM0LCAwLjcxNTkyXSxcbiAgICBcIjEyMFwiOiBbMCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC41NzE1M10sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDU1NTYsIDAuNDkwMjhdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQzMDU2LCAwLjA0Mzk4LCAwLjA1NTU2LCAwLjQ2NTA1XSxcbiAgICBcIjkxNVwiOiBbMCwgMC42ODMzMywgMC4xMzg4OSwgMC4wODMzNCwgMC42MTUyOF0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjgzMzMsIDAsIDAuMTY2NjcsIDAuODMzMzRdLFxuICAgIFwiOTIwXCI6IFswLCAwLjY4MzMzLCAwLjAyNzc4LCAwLjA4MzM0LCAwLjc2Mjc4XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42ODMzMywgMCwgMC4xNjY2NywgMC42OTQ0NV0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjgzMzMsIDAuMDc1NjksIDAuMDgzMzQsIDAuNzQyMzZdLFxuICAgIFwiOTI4XCI6IFswLCAwLjY4MzMzLCAwLjA4MTI1LCAwLjA1NTU2LCAwLjgzMTI1XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODMzMywgMC4wNTc2NCwgMC4wODMzNCwgMC43Nzk4Nl0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAuMDU1NTYsIDAuNTgzMzNdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjY2NjY3XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODMzMywgMC4xMSwgMC4wNTU1NiwgMC42MTIyMl0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjgzMzMsIDAuMDUwMTcsIDAuMDgzMzQsIDAuNzcyNF0sXG4gICAgXCI5NDVcIjogWzAsIDAuNDMwNTYsIDAuMDAzNywgMC4wMjc3OCwgMC42Mzk3XSxcbiAgICBcIjk0NlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wNTI3OCwgMC4wODMzNCwgMC41NjU2M10sXG4gICAgXCI5NDdcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDU1NTYsIDAsIDAuNTE3NzNdLFxuICAgIFwiOTQ4XCI6IFswLCAwLjY5NDQ0LCAwLjAzNzg1LCAwLjA1NTU2LCAwLjQ0NDQ0XSxcbiAgICBcIjk0OVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wODMzNCwgMC40NjYzMl0sXG4gICAgXCI5NTBcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDczNzgsIDAuMDgzMzQsIDAuNDM3NV0sXG4gICAgXCI5NTFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDU1NTYsIDAuNDk2NTNdLFxuICAgIFwiOTUyXCI6IFswLCAwLjY5NDQ0LCAwLjAyNzc4LCAwLjA4MzM0LCAwLjQ2OTQ0XSxcbiAgICBcIjk1M1wiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC4zNTM5NF0sXG4gICAgXCI5NTRcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTc2MTZdLFxuICAgIFwiOTU1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjk1NlwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC42MDI1NV0sXG4gICAgXCI5NTdcIjogWzAsIDAuNDMwNTYsIDAuMDYzNjYsIDAuMDI3NzgsIDAuNDkzOThdLFxuICAgIFwiOTU4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA0NjAxLCAwLjExMTExLCAwLjQzNzVdLFxuICAgIFwiOTU5XCI6IFswLCAwLjQzMDU2LCAwLCAwLjA1NTU2LCAwLjQ4NDcyXSxcbiAgICBcIjk2MFwiOiBbMCwgMC40MzA1NiwgMC4wMzU4OCwgMCwgMC41NzAwM10sXG4gICAgXCI5NjFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNTE3MDJdLFxuICAgIFwiOTYyXCI6IFswLjA5NzIyLCAwLjQzMDU2LCAwLjA3OTg2LCAwLjA4MzM0LCAwLjM2Mjg1XSxcbiAgICBcIjk2M1wiOiBbMCwgMC40MzA1NiwgMC4wMzU4OCwgMCwgMC41NzE0MV0sXG4gICAgXCI5NjRcIjogWzAsIDAuNDMwNTYsIDAuMTEzMiwgMC4wMjc3OCwgMC40MzcxNV0sXG4gICAgXCI5NjVcIjogWzAsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDI3NzgsIDAuNTQwMjhdLFxuICAgIFwiOTY2XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLjA4MzM0LCAwLjY1NDE3XSxcbiAgICBcIjk2N1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC42MjU2OV0sXG4gICAgXCI5NjhcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDM1ODgsIDAuMTExMTEsIDAuNjUxMzldLFxuICAgIFwiOTY5XCI6IFswLCAwLjQzMDU2LCAwLjAzNTg4LCAwLCAwLjYyMjQ1XSxcbiAgICBcIjk3N1wiOiBbMCwgMC42OTQ0NCwgMCwgMC4wODMzNCwgMC41OTE0NF0sXG4gICAgXCI5ODFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAuMDgzMzQsIDAuNTk1ODNdLFxuICAgIFwiOTgyXCI6IFswLCAwLjQzMDU2LCAwLjAyNzc4LCAwLCAwLjgyODEzXSxcbiAgICBcIjEwMDlcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNTE3MDJdLFxuICAgIFwiMTAxM1wiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40MDU5XVxuICB9LFxuICBcIk1hdGgtUmVndWxhclwiOiB7XG4gICAgXCI2NVwiOiBbMCwgMC42ODMzMywgMCwgMC4xMzg4OSwgMC43NV0sXG4gICAgXCI2NlwiOiBbMCwgMC42ODMzMywgMC4wNTAxNywgMC4wODMzNCwgMC43NTg1MV0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODMzMywgMC4wNzE1MywgMC4wODMzNCwgMC43MTQ3Ml0sXG4gICAgXCI2OFwiOiBbMCwgMC42ODMzMywgMC4wMjc3OCwgMC4wNTU1NiwgMC44Mjc5Ml0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODMzMywgMC4wNTc2NCwgMC4wODMzNCwgMC43MzgyXSxcbiAgICBcIjcwXCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLjA4MzM0LCAwLjY0MzA2XSxcbiAgICBcIjcxXCI6IFswLCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjc4NjI1XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4MzMzLCAwLjA4MTI1LCAwLjA1NTU2LCAwLjgzMTI1XSxcbiAgICBcIjczXCI6IFswLCAwLjY4MzMzLCAwLjA3ODQ3LCAwLjExMTExLCAwLjQzOTU4XSxcbiAgICBcIjc0XCI6IFswLCAwLjY4MzMzLCAwLjA5NjE4LCAwLjE2NjY3LCAwLjU1NDUxXSxcbiAgICBcIjc1XCI6IFswLCAwLjY4MzMzLCAwLjA3MTUzLCAwLjA1NTU2LCAwLjg0OTMxXSxcbiAgICBcIjc2XCI6IFswLCAwLjY4MzMzLCAwLCAwLjAyNzc4LCAwLjY4MDU2XSxcbiAgICBcIjc3XCI6IFswLCAwLjY4MzMzLCAwLjEwOTAzLCAwLjA4MzM0LCAwLjk3MDE0XSxcbiAgICBcIjc4XCI6IFswLCAwLjY4MzMzLCAwLjEwOTAzLCAwLjA4MzM0LCAwLjgwMzQ3XSxcbiAgICBcIjc5XCI6IFswLCAwLjY4MzMzLCAwLjAyNzc4LCAwLjA4MzM0LCAwLjc2Mjc4XSxcbiAgICBcIjgwXCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLjA4MzM0LCAwLjY0MjAxXSxcbiAgICBcIjgxXCI6IFswLjE5NDQ0LCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjc5MDU2XSxcbiAgICBcIjgyXCI6IFswLCAwLjY4MzMzLCAwLjAwNzczLCAwLjA4MzM0LCAwLjc1OTI5XSxcbiAgICBcIjgzXCI6IFswLCAwLjY4MzMzLCAwLjA1NzY0LCAwLjA4MzM0LCAwLjYxMzJdLFxuICAgIFwiODRcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAuMDgzMzQsIDAuNTg0MzhdLFxuICAgIFwiODVcIjogWzAsIDAuNjgzMzMsIDAuMTA5MDMsIDAuMDI3NzgsIDAuNjgyNzhdLFxuICAgIFwiODZcIjogWzAsIDAuNjgzMzMsIDAuMjIyMjIsIDAsIDAuNTgzMzNdLFxuICAgIFwiODdcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAsIDAuOTQ0NDVdLFxuICAgIFwiODhcIjogWzAsIDAuNjgzMzMsIDAuMDc4NDcsIDAuMDgzMzQsIDAuODI4NDddLFxuICAgIFwiODlcIjogWzAsIDAuNjgzMzMsIDAuMjIyMjIsIDAsIDAuNTgwNTZdLFxuICAgIFwiOTBcIjogWzAsIDAuNjgzMzMsIDAuMDcxNTMsIDAuMDgzMzQsIDAuNjgyNjRdLFxuICAgIFwiOTdcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI4NTldLFxuICAgIFwiOThcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNDI5MTddLFxuICAgIFwiOTlcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDMyNzZdLFxuICAgIFwiMTAwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLjE2NjY3LCAwLjUyMDQ5XSxcbiAgICBcIjEwMVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40NjU2M10sXG4gICAgXCIxMDJcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMTA3NjQsIDAuMTY2NjcsIDAuNDg5NTldLFxuICAgIFwiMTAzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjAzNTg4LCAwLjAyNzc4LCAwLjQ3Njk3XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzYxNl0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjU5NTIsIDAsIDAsIDAuMzQ0NTFdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY1OTUyLCAwLjA1NzI0LCAwLCAwLjQxMTgxXSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMC4wMzE0OCwgMCwgMC41MjA2XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMC4wMTk2OCwgMC4wODMzNCwgMC4yOTgzOF0sXG4gICAgXCIxMDlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuODc4MDFdLFxuICAgIFwiMTEwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjYwMDIzXSxcbiAgICBcIjExMVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40ODQ3Ml0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNTAzMTNdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjAzNTg4LCAwLjA4MzM0LCAwLjQ0NjQxXSxcbiAgICBcIjExNFwiOiBbMCwgMC40MzA1NiwgMC4wMjc3OCwgMC4wNTU1NiwgMC40NTExNl0sXG4gICAgXCIxMTVcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDY4NzVdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYxNTA4LCAwLCAwLjA4MzM0LCAwLjM2MTExXSxcbiAgICBcIjExN1wiOiBbMCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC41NzI0Nl0sXG4gICAgXCIxMThcIjogWzAsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDI3NzgsIDAuNDg0NzJdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQzMDU2LCAwLjAyNjkxLCAwLjA4MzM0LCAwLjcxNTkyXSxcbiAgICBcIjEyMFwiOiBbMCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC41NzE1M10sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDU1NTYsIDAuNDkwMjhdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQzMDU2LCAwLjA0Mzk4LCAwLjA1NTU2LCAwLjQ2NTA1XSxcbiAgICBcIjkxNVwiOiBbMCwgMC42ODMzMywgMC4xMzg4OSwgMC4wODMzNCwgMC42MTUyOF0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjgzMzMsIDAsIDAuMTY2NjcsIDAuODMzMzRdLFxuICAgIFwiOTIwXCI6IFswLCAwLjY4MzMzLCAwLjAyNzc4LCAwLjA4MzM0LCAwLjc2Mjc4XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42ODMzMywgMCwgMC4xNjY2NywgMC42OTQ0NV0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjgzMzMsIDAuMDc1NjksIDAuMDgzMzQsIDAuNzQyMzZdLFxuICAgIFwiOTI4XCI6IFswLCAwLjY4MzMzLCAwLjA4MTI1LCAwLjA1NTU2LCAwLjgzMTI1XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODMzMywgMC4wNTc2NCwgMC4wODMzNCwgMC43Nzk4Nl0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAuMDU1NTYsIDAuNTgzMzNdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjY2NjY3XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODMzMywgMC4xMSwgMC4wNTU1NiwgMC42MTIyMl0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjgzMzMsIDAuMDUwMTcsIDAuMDgzMzQsIDAuNzcyNF0sXG4gICAgXCI5NDVcIjogWzAsIDAuNDMwNTYsIDAuMDAzNywgMC4wMjc3OCwgMC42Mzk3XSxcbiAgICBcIjk0NlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wNTI3OCwgMC4wODMzNCwgMC41NjU2M10sXG4gICAgXCI5NDdcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDU1NTYsIDAsIDAuNTE3NzNdLFxuICAgIFwiOTQ4XCI6IFswLCAwLjY5NDQ0LCAwLjAzNzg1LCAwLjA1NTU2LCAwLjQ0NDQ0XSxcbiAgICBcIjk0OVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wODMzNCwgMC40NjYzMl0sXG4gICAgXCI5NTBcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDczNzgsIDAuMDgzMzQsIDAuNDM3NV0sXG4gICAgXCI5NTFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDU1NTYsIDAuNDk2NTNdLFxuICAgIFwiOTUyXCI6IFswLCAwLjY5NDQ0LCAwLjAyNzc4LCAwLjA4MzM0LCAwLjQ2OTQ0XSxcbiAgICBcIjk1M1wiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC4zNTM5NF0sXG4gICAgXCI5NTRcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTc2MTZdLFxuICAgIFwiOTU1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjk1NlwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC42MDI1NV0sXG4gICAgXCI5NTdcIjogWzAsIDAuNDMwNTYsIDAuMDYzNjYsIDAuMDI3NzgsIDAuNDkzOThdLFxuICAgIFwiOTU4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA0NjAxLCAwLjExMTExLCAwLjQzNzVdLFxuICAgIFwiOTU5XCI6IFswLCAwLjQzMDU2LCAwLCAwLjA1NTU2LCAwLjQ4NDcyXSxcbiAgICBcIjk2MFwiOiBbMCwgMC40MzA1NiwgMC4wMzU4OCwgMCwgMC41NzAwM10sXG4gICAgXCI5NjFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNTE3MDJdLFxuICAgIFwiOTYyXCI6IFswLjA5NzIyLCAwLjQzMDU2LCAwLjA3OTg2LCAwLjA4MzM0LCAwLjM2Mjg1XSxcbiAgICBcIjk2M1wiOiBbMCwgMC40MzA1NiwgMC4wMzU4OCwgMCwgMC41NzE0MV0sXG4gICAgXCI5NjRcIjogWzAsIDAuNDMwNTYsIDAuMTEzMiwgMC4wMjc3OCwgMC40MzcxNV0sXG4gICAgXCI5NjVcIjogWzAsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDI3NzgsIDAuNTQwMjhdLFxuICAgIFwiOTY2XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLjA4MzM0LCAwLjY1NDE3XSxcbiAgICBcIjk2N1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC42MjU2OV0sXG4gICAgXCI5NjhcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDM1ODgsIDAuMTExMTEsIDAuNjUxMzldLFxuICAgIFwiOTY5XCI6IFswLCAwLjQzMDU2LCAwLjAzNTg4LCAwLCAwLjYyMjQ1XSxcbiAgICBcIjk3N1wiOiBbMCwgMC42OTQ0NCwgMCwgMC4wODMzNCwgMC41OTE0NF0sXG4gICAgXCI5ODFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAuMDgzMzQsIDAuNTk1ODNdLFxuICAgIFwiOTgyXCI6IFswLCAwLjQzMDU2LCAwLjAyNzc4LCAwLCAwLjgyODEzXSxcbiAgICBcIjEwMDlcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNTE3MDJdLFxuICAgIFwiMTAxM1wiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40MDU5XVxuICB9LFxuICBcIlNhbnNTZXJpZi1Cb2xkXCI6IHtcbiAgICBcIjMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjM2NjY3XSxcbiAgICBcIjM0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1ODM0XSxcbiAgICBcIjM1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjkxNjY3XSxcbiAgICBcIjM2XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAwLjU1XSxcbiAgICBcIjM3XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAxLjAyOTEyXSxcbiAgICBcIjM4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjgzMDU2XSxcbiAgICBcIjM5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjQwXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQyNzc4XSxcbiAgICBcIjQxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQyNzc4XSxcbiAgICBcIjQyXCI6IFswLCAwLjc1LCAwLCAwLCAwLjU1XSxcbiAgICBcIjQzXCI6IFswLjExNjY3LCAwLjYxNjY3LCAwLCAwLCAwLjg1NTU2XSxcbiAgICBcIjQ0XCI6IFswLjEwNTU2LCAwLjEzMDU2LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjQ1XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjM2NjY3XSxcbiAgICBcIjQ2XCI6IFswLCAwLjEzMDU2LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjQ3XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjU1XSxcbiAgICBcIjQ4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjQ5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjUwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjUxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjUyXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjUzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjU0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjU1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjU2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjU3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjU4XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjU5XCI6IFswLjEwNTU2LCAwLjQ1ODMzLCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjYxXCI6IFstMC4wOTM3NSwgMC40MDYyNSwgMCwgMCwgMC44NTU1Nl0sXG4gICAgXCI2M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MTk0NV0sXG4gICAgXCI2NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI2NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI2NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI2N1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MDI3OF0sXG4gICAgXCI2OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI2OVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NDE2N10sXG4gICAgXCI3MFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI3MVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI3MlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI3M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zMzA1Nl0sXG4gICAgXCI3NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MTk0NV0sXG4gICAgXCI3NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43NjM4OV0sXG4gICAgXCI3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41ODA1Nl0sXG4gICAgXCI3N1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC45Nzc3OF0sXG4gICAgXCI3OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI3OVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI4MFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MDI3OF0sXG4gICAgXCI4MVwiOiBbMC4xMDU1NiwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI4MlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MDI3OF0sXG4gICAgXCI4M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI4NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43NjM4OV0sXG4gICAgXCI4NlwiOiBbMCwgMC42OTQ0NCwgMC4wMTUyOCwgMCwgMC43MzMzNF0sXG4gICAgXCI4N1wiOiBbMCwgMC42OTQ0NCwgMC4wMTUyOCwgMCwgMS4wMzg4OV0sXG4gICAgXCI4OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI4OVwiOiBbMCwgMC42OTQ0NCwgMC4wMjc1LCAwLCAwLjczMzM0XSxcbiAgICBcIjkwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY3MjIzXSxcbiAgICBcIjkxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjM0MzA2XSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjM0MzA2XSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjk1XCI6IFswLjM1LCAwLjEwODMzLCAwLjAzMDU2LCAwLCAwLjU1XSxcbiAgICBcIjk3XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NjExMV0sXG4gICAgXCI5OVwiOiBbMCwgMC40NTgzMywgMCwgMCwgMC40ODg4OV0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTYxMTFdLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjEwMlwiOiBbMCwgMC42OTQ0NCwgMC4wNzYzOSwgMCwgMC4zMzYxMV0sXG4gICAgXCIxMDNcIjogWzAuMTk0NDQsIDAuNDU4MzMsIDAuMDE1MjgsIDAsIDAuNTVdLFxuICAgIFwiMTA0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU2MTExXSxcbiAgICBcIjEwNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNTU1Nl0sXG4gICAgXCIxMDZcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuMjg2MTFdLFxuICAgIFwiMTA3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjUzMDU2XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNTU1Nl0sXG4gICAgXCIxMDlcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuODY2NjddLFxuICAgIFwiMTEwXCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjU2MTExXSxcbiAgICBcIjExMVwiOiBbMCwgMC40NTgzMywgMCwgMCwgMC41NV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDU4MzMsIDAsIDAsIDAuNTYxMTFdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ1ODMzLCAwLCAwLCAwLjU2MTExXSxcbiAgICBcIjExNFwiOiBbMCwgMC40NTgzMywgMC4wMTUyOCwgMCwgMC4zNzIyMl0sXG4gICAgXCIxMTVcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuNDIxNjddLFxuICAgIFwiMTE2XCI6IFswLCAwLjU4OTI5LCAwLCAwLCAwLjQwNDE3XSxcbiAgICBcIjExN1wiOiBbMCwgMC40NTgzMywgMCwgMCwgMC41NjExMV0sXG4gICAgXCIxMThcIjogWzAsIDAuNDU4MzMsIDAuMDE1MjgsIDAsIDAuNV0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDU4MzMsIDAuMDE1MjgsIDAsIDAuNzQ0NDVdLFxuICAgIFwiMTIwXCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjVdLFxuICAgIFwiMTIxXCI6IFswLjE5NDQ0LCAwLjQ1ODMzLCAwLjAxNTI4LCAwLCAwLjVdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjQ3NjM5XSxcbiAgICBcIjEyNlwiOiBbMC4zNSwgMC4zNDQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCIxNjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiMTc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczMzM0XSxcbiAgICBcIjE4MFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCIxODRcIjogWzAuMTcwMTQsIDAsIDAsIDAsIDAuNDg4ODldLFxuICAgIFwiMzA1XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjI1NTU2XSxcbiAgICBcIjU2N1wiOiBbMC4xOTQ0NCwgMC40NTgzMywgMCwgMCwgMC4yODYxMV0sXG4gICAgXCI3MTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNzExXCI6IFswLCAwLjYzNTQyLCAwLCAwLCAwLjU1XSxcbiAgICBcIjcxM1wiOiBbMCwgMC42Mzc3OCwgMCwgMCwgMC41NV0sXG4gICAgXCI3MjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNzI5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjczMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI3MzJcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNzMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjkxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41ODA1Nl0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuOTE2NjddLFxuICAgIFwiOTIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg1NTU2XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NzIyM10sXG4gICAgXCI5MjZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzMzMzRdLFxuICAgIFwiOTI4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODU1NTZdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44NTU1Nl0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzk0NDVdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40NTgzMywgMC4wMzA1NiwgMCwgMC41NV0sXG4gICAgXCI4MjEyXCI6IFswLCAwLjQ1ODMzLCAwLjAzMDU2LCAwLCAxLjEwMDAxXSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zMDU1Nl0sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1ODM0XSxcbiAgICBcIjgyMjFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTU4MzRdXG4gIH0sXG4gIFwiU2Fuc1NlcmlmLUl0YWxpY1wiOiB7XG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMC4wNTczMywgMCwgMC4zMTk0NV0sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMC4wMDMxNiwgMCwgMC41XSxcbiAgICBcIjM1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA1MDg3LCAwLCAwLjgzMzM0XSxcbiAgICBcIjM2XCI6IFswLjA1NTU2LCAwLjc1LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAuMDMxMjYsIDAsIDAuODMzMzRdLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAuMDMwNTgsIDAsIDAuNzU4MzRdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAuMDc4MTYsIDAsIDAuMjc3NzhdLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAuMTMxNjQsIDAsIDAuMzg4ODldLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAuMDI1MzYsIDAsIDAuMzg4ODldLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAuMTE3NzUsIDAsIDAuNV0sXG4gICAgXCI0M1wiOiBbMC4wODMzMywgMC41ODMzMywgMC4wMjUzNiwgMCwgMC43Nzc3OF0sXG4gICAgXCI0NFwiOiBbMC4xMjUsIDAuMDgzMzMsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNDVcIjogWzAsIDAuNDQ0NDQsIDAuMDE5NDYsIDAsIDAuMzMzMzNdLFxuICAgIFwiNDZcIjogWzAsIDAuMDgzMzMsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNDdcIjogWzAuMjUsIDAuNzUsIDAuMTMxNjQsIDAsIDAuNV0sXG4gICAgXCI0OFwiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjQ5XCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNTBcIjogWzAsIDAuNjU1NTYsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCI1MVwiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjUyXCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNTNcIjogWzAsIDAuNjU1NTYsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCI1NFwiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjU1XCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNTZcIjogWzAsIDAuNjU1NTYsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCI1N1wiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjU4XCI6IFswLCAwLjQ0NDQ0LCAwLjAyNTAyLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjU5XCI6IFswLjEyNSwgMC40NDQ0NCwgMC4wMjUwMiwgMCwgMC4yNzc3OF0sXG4gICAgXCI2MVwiOiBbLTAuMTMsIDAuMzcsIDAuMDUwODcsIDAsIDAuNzc3NzhdLFxuICAgIFwiNjNcIjogWzAsIDAuNjk0NDQsIDAuMTE4MDksIDAsIDAuNDcyMjJdLFxuICAgIFwiNjRcIjogWzAsIDAuNjk0NDQsIDAuMDc1NTUsIDAsIDAuNjY2NjddLFxuICAgIFwiNjVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiNjZcIjogWzAsIDAuNjk0NDQsIDAuMDgyOTMsIDAsIDAuNjY2NjddLFxuICAgIFwiNjdcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNjM4ODldLFxuICAgIFwiNjhcIjogWzAsIDAuNjk0NDQsIDAuMDc1NTUsIDAsIDAuNzIyMjNdLFxuICAgIFwiNjlcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNTk3MjJdLFxuICAgIFwiNzBcIjogWzAsIDAuNjk0NDQsIDAuMTMzNzIsIDAsIDAuNTY5NDVdLFxuICAgIFwiNzFcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNjY2NjddLFxuICAgIFwiNzJcIjogWzAsIDAuNjk0NDQsIDAuMDgwOTQsIDAsIDAuNzA4MzRdLFxuICAgIFwiNzNcIjogWzAsIDAuNjk0NDQsIDAuMTMzNzIsIDAsIDAuMjc3NzhdLFxuICAgIFwiNzRcIjogWzAsIDAuNjk0NDQsIDAuMDgwOTQsIDAsIDAuNDcyMjJdLFxuICAgIFwiNzVcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNjk0NDVdLFxuICAgIFwiNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTQxNjddLFxuICAgIFwiNzdcIjogWzAsIDAuNjk0NDQsIDAuMDgwOTQsIDAsIDAuODc1XSxcbiAgICBcIjc4XCI6IFswLCAwLjY5NDQ0LCAwLjA4MDk0LCAwLCAwLjcwODM0XSxcbiAgICBcIjc5XCI6IFswLCAwLjY5NDQ0LCAwLjA3NTU1LCAwLCAwLjczNjExXSxcbiAgICBcIjgwXCI6IFswLCAwLjY5NDQ0LCAwLjA4MjkzLCAwLCAwLjYzODg5XSxcbiAgICBcIjgxXCI6IFswLjEyNSwgMC42OTQ0NCwgMC4wNzU1NSwgMCwgMC43MzYxMV0sXG4gICAgXCI4MlwiOiBbMCwgMC42OTQ0NCwgMC4wODI5MywgMCwgMC42NDU4NF0sXG4gICAgXCI4M1wiOiBbMCwgMC42OTQ0NCwgMC4wOTIwNSwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NFwiOiBbMCwgMC42OTQ0NCwgMC4xMzM3MiwgMCwgMC42ODA1Nl0sXG4gICAgXCI4NVwiOiBbMCwgMC42OTQ0NCwgMC4wODA5NCwgMCwgMC42ODc1XSxcbiAgICBcIjg2XCI6IFswLCAwLjY5NDQ0LCAwLjE2MTUsIDAsIDAuNjY2NjddLFxuICAgIFwiODdcIjogWzAsIDAuNjk0NDQsIDAuMTYxNSwgMCwgMC45NDQ0NV0sXG4gICAgXCI4OFwiOiBbMCwgMC42OTQ0NCwgMC4xMzM3MiwgMCwgMC42NjY2N10sXG4gICAgXCI4OVwiOiBbMCwgMC42OTQ0NCwgMC4xNzI2MSwgMCwgMC42NjY2N10sXG4gICAgXCI5MFwiOiBbMCwgMC42OTQ0NCwgMC4xMTk4MywgMCwgMC42MTExMV0sXG4gICAgXCI5MVwiOiBbMC4yNSwgMC43NSwgMC4xNTk0MiwgMCwgMC4yODg4OV0sXG4gICAgXCI5M1wiOiBbMC4yNSwgMC43NSwgMC4wODcxOSwgMCwgMC4yODg4OV0sXG4gICAgXCI5NFwiOiBbMCwgMC42OTQ0NCwgMC4wNzk5LCAwLCAwLjVdLFxuICAgIFwiOTVcIjogWzAuMzUsIDAuMDk0NDQsIDAuMDg2MTYsIDAsIDAuNV0sXG4gICAgXCI5N1wiOiBbMCwgMC40NDQ0NCwgMC4wMDk4MSwgMCwgMC40ODA1Nl0sXG4gICAgXCI5OFwiOiBbMCwgMC42OTQ0NCwgMC4wMzA1NywgMCwgMC41MTY2N10sXG4gICAgXCI5OVwiOiBbMCwgMC40NDQ0NCwgMC4wODMzNiwgMCwgMC40NDQ0NV0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjk0NDQsIDAuMDk0ODMsIDAsIDAuNTE2NjddLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ0NDQ0LCAwLjA2Nzc4LCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEwMlwiOiBbMCwgMC42OTQ0NCwgMC4yMTcwNSwgMCwgMC4zMDU1Nl0sXG4gICAgXCIxMDNcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMTA4MzYsIDAsIDAuNV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAuMDE3NzgsIDAsIDAuNTE2NjddLFxuICAgIFwiMTA1XCI6IFswLCAwLjY3OTM3LCAwLjA5NzE4LCAwLCAwLjIzODg5XSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42NzkzNywgMC4wOTE2MiwgMCwgMC4yNjY2N10sXG4gICAgXCIxMDdcIjogWzAsIDAuNjk0NDQsIDAuMDgzMzYsIDAsIDAuNDg4ODldLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLjA5NDgzLCAwLCAwLjIzODg5XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NDQ0NCwgMC4wMTc3OCwgMCwgMC43OTQ0NV0sXG4gICAgXCIxMTBcIjogWzAsIDAuNDQ0NDQsIDAuMDE3NzgsIDAsIDAuNTE2NjddLFxuICAgIFwiMTExXCI6IFswLCAwLjQ0NDQ0LCAwLjA2NjEzLCAwLCAwLjVdLFxuICAgIFwiMTEyXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAzODksIDAsIDAuNTE2NjddLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjA0MTY5LCAwLCAwLjUxNjY3XSxcbiAgICBcIjExNFwiOiBbMCwgMC40NDQ0NCwgMC4xMDgzNiwgMCwgMC4zNDE2N10sXG4gICAgXCIxMTVcIjogWzAsIDAuNDQ0NDQsIDAuMDc3OCwgMCwgMC4zODMzM10sXG4gICAgXCIxMTZcIjogWzAsIDAuNTcxNDMsIDAuMDcyMjUsIDAsIDAuMzYxMTFdLFxuICAgIFwiMTE3XCI6IFswLCAwLjQ0NDQ0LCAwLjA0MTY5LCAwLCAwLjUxNjY3XSxcbiAgICBcIjExOFwiOiBbMCwgMC40NDQ0NCwgMC4xMDgzNiwgMCwgMC40NjExMV0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDQ0NDQsIDAuMTA4MzYsIDAsIDAuNjgzMzRdLFxuICAgIFwiMTIwXCI6IFswLCAwLjQ0NDQ0LCAwLjA5MTY5LCAwLCAwLjQ2MTExXSxcbiAgICBcIjEyMVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4xMDgzNiwgMCwgMC40NjExMV0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDQ0NDQsIDAuMDg3NTIsIDAsIDAuNDM0NzJdLFxuICAgIFwiMTI2XCI6IFswLjM1LCAwLjMyNjU5LCAwLjA4ODI2LCAwLCAwLjVdLFxuICAgIFwiMTY4XCI6IFswLCAwLjY3OTM3LCAwLjA2Mzg1LCAwLCAwLjVdLFxuICAgIFwiMTc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczNzUyXSxcbiAgICBcIjE4NFwiOiBbMC4xNzAxNCwgMCwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCIzMDVcIjogWzAsIDAuNDQ0NDQsIDAuMDQxNjksIDAsIDAuMjM4ODldLFxuICAgIFwiNTY3XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjA0MTY5LCAwLCAwLjI2NjY3XSxcbiAgICBcIjcxMFwiOiBbMCwgMC42OTQ0NCwgMC4wNzk5LCAwLCAwLjVdLFxuICAgIFwiNzExXCI6IFswLCAwLjYzMTk0LCAwLjA4NDMyLCAwLCAwLjVdLFxuICAgIFwiNzEzXCI6IFswLCAwLjYwODg5LCAwLjA4Nzc2LCAwLCAwLjVdLFxuICAgIFwiNzE0XCI6IFswLCAwLjY5NDQ0LCAwLjA5MjA1LCAwLCAwLjVdLFxuICAgIFwiNzE1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLjA5NDgzLCAwLCAwLjVdLFxuICAgIFwiNzI5XCI6IFswLCAwLjY3OTM3LCAwLjA3Nzc0LCAwLCAwLjI3Nzc4XSxcbiAgICBcIjczMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43Mzc1Ml0sXG4gICAgXCI3MzJcIjogWzAsIDAuNjc2NTksIDAuMDg4MjYsIDAsIDAuNV0sXG4gICAgXCI3MzNcIjogWzAsIDAuNjk0NDQsIDAuMDkyMDUsIDAsIDAuNV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjk0NDQsIDAuMTMzNzIsIDAsIDAuNTQxNjddLFxuICAgIFwiOTE2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjkyMFwiOiBbMCwgMC42OTQ0NCwgMC4wNzU1NSwgMCwgMC43Nzc3OF0sXG4gICAgXCI5MjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiOTI2XCI6IFswLCAwLjY5NDQ0LCAwLjEyODE2LCAwLCAwLjY2NjY3XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42OTQ0NCwgMC4wODA5NCwgMCwgMC43MDgzNF0sXG4gICAgXCI5MzFcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNzIyMjJdLFxuICAgIFwiOTMzXCI6IFswLCAwLjY5NDQ0LCAwLjA5MDMxLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjkzNFwiOiBbMCwgMC42OTQ0NCwgMC4wNDYwMywgMCwgMC43MjIyMl0sXG4gICAgXCI5MzZcIjogWzAsIDAuNjk0NDQsIDAuMDkwMzEsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTM3XCI6IFswLCAwLjY5NDQ0LCAwLjA4MjkzLCAwLCAwLjcyMjIyXSxcbiAgICBcIjgyMTFcIjogWzAsIDAuNDQ0NDQsIDAuMDg2MTYsIDAsIDAuNV0sXG4gICAgXCI4MjEyXCI6IFswLCAwLjQ0NDQ0LCAwLjA4NjE2LCAwLCAxLjBdLFxuICAgIFwiODIxNlwiOiBbMCwgMC42OTQ0NCwgMC4wNzgxNiwgMCwgMC4yNzc3OF0sXG4gICAgXCI4MjE3XCI6IFswLCAwLjY5NDQ0LCAwLjA3ODE2LCAwLCAwLjI3Nzc4XSxcbiAgICBcIjgyMjBcIjogWzAsIDAuNjk0NDQsIDAuMTQyMDUsIDAsIDAuNV0sXG4gICAgXCI4MjIxXCI6IFswLCAwLjY5NDQ0LCAwLjAwMzE2LCAwLCAwLjVdXG4gIH0sXG4gIFwiU2Fuc1NlcmlmLVJlZ3VsYXJcIjoge1xuICAgIFwiMzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzE5NDVdLFxuICAgIFwiMzRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCIzNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCIzNlwiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjM3XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjM4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc1ODM0XSxcbiAgICBcIjM5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjQwXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjQxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjQyXCI6IFswLCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiNDNcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNDRcIjogWzAuMTI1LCAwLjA4MzMzLCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjQ1XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjMzMzMzXSxcbiAgICBcIjQ2XCI6IFswLCAwLjA4MzMzLCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjQ3XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiNDhcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI0OVwiOiBbMCwgMC42NTU1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUwXCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTFcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1MlwiOiBbMCwgMC42NTU1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUzXCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTRcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1NVwiOiBbMCwgMC42NTU1NiwgMCwgMCwgMC41XSxcbiAgICBcIjU2XCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTdcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1OFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI1OVwiOiBbMC4xMjUsIDAuNDQ0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNjFcIjogWy0wLjEzLCAwLjM3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjYzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjY0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjY1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjY2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjY3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjY4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcyMjIzXSxcbiAgICBcIjY5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU5NzIyXSxcbiAgICBcIjcwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU2OTQ1XSxcbiAgICBcIjcxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjcyXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwODM0XSxcbiAgICBcIjczXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjc0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjc1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY5NDQ1XSxcbiAgICBcIjc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU0MTY3XSxcbiAgICBcIjc3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg3NV0sXG4gICAgXCI3OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MDgzNF0sXG4gICAgXCI3OVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzYxMV0sXG4gICAgXCI4MFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI4MVwiOiBbMC4xMjUsIDAuNjk0NDQsIDAsIDAsIDAuNzM2MTFdLFxuICAgIFwiODJcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjQ1ODRdLFxuICAgIFwiODNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjgwNTZdLFxuICAgIFwiODVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjg3NV0sXG4gICAgXCI4NlwiOiBbMCwgMC42OTQ0NCwgMC4wMTM4OSwgMCwgMC42NjY2N10sXG4gICAgXCI4N1wiOiBbMCwgMC42OTQ0NCwgMC4wMTM4OSwgMCwgMC45NDQ0NV0sXG4gICAgXCI4OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4OVwiOiBbMCwgMC42OTQ0NCwgMC4wMjUsIDAsIDAuNjY2NjddLFxuICAgIFwiOTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiOTFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMjg4ODldLFxuICAgIFwiOTNcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMjg4ODldLFxuICAgIFwiOTRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI5NVwiOiBbMC4zNSwgMC4wOTQ0NCwgMC4wMjc3OCwgMCwgMC41XSxcbiAgICBcIjk3XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQ4MDU2XSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjUxNjY3XSxcbiAgICBcIjk5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCIxMDFcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMTAyXCI6IFswLCAwLjY5NDQ0LCAwLjA2OTQ0LCAwLCAwLjMwNTU2XSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wMTM4OSwgMCwgMC41XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCIxMDVcIjogWzAsIDAuNjc5MzcsIDAsIDAsIDAuMjM4ODldLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY3OTM3LCAwLCAwLCAwLjI2NjY3XSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC40ODg4OV0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjM4ODldLFxuICAgIFwiMTA5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjExMFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCIxMTFcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNTE2NjddLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjUxNjY3XSxcbiAgICBcIjExNFwiOiBbMCwgMC40NDQ0NCwgMC4wMTM4OSwgMCwgMC4zNDE2N10sXG4gICAgXCIxMTVcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuMzgzMzNdLFxuICAgIFwiMTE2XCI6IFswLCAwLjU3MTQzLCAwLCAwLCAwLjM2MTExXSxcbiAgICBcIjExN1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCIxMThcIjogWzAsIDAuNDQ0NDQsIDAuMDEzODksIDAsIDAuNDYxMTFdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQ0NDQ0LCAwLjAxMzg5LCAwLCAwLjY4MzM0XSxcbiAgICBcIjEyMFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40NjExMV0sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDEzODksIDAsIDAuNDYxMTFdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQzNDcyXSxcbiAgICBcIjEyNlwiOiBbMC4zNSwgMC4zMjY1OSwgMCwgMCwgMC41XSxcbiAgICBcIjE2OFwiOiBbMCwgMC42NzkzNywgMCwgMCwgMC41XSxcbiAgICBcIjE3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCIxODRcIjogWzAuMTcwMTQsIDAsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMzA1XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjIzODg5XSxcbiAgICBcIjU2N1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC4yNjY2N10sXG4gICAgXCI3MTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI3MTFcIjogWzAsIDAuNjMxOTQsIDAsIDAsIDAuNV0sXG4gICAgXCI3MTNcIjogWzAsIDAuNjA4ODksIDAsIDAsIDAuNV0sXG4gICAgXCI3MTRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI3MTVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI3MjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI3MjlcIjogWzAsIDAuNjc5MzcsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNzMwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjczMlwiOiBbMCwgMC42NzY1OSwgMCwgMCwgMC41XSxcbiAgICBcIjczM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjkxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NDE2N10sXG4gICAgXCI5MTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiOTIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTI4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwODM0XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjkzNlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40NDQ0NCwgMC4wMjc3OCwgMCwgMC41XSxcbiAgICBcIjgyMTJcIjogWzAsIDAuNDQ0NDQsIDAuMDI3NzgsIDAsIDEuMF0sXG4gICAgXCI4MjE2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjgyMTdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODIyMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjgyMjFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV1cbiAgfSxcbiAgXCJTY3JpcHQtUmVndWxhclwiOiB7XG4gICAgXCI2NVwiOiBbMCwgMC43LCAwLjIyOTI1LCAwLCAwLjgwMjUzXSxcbiAgICBcIjY2XCI6IFswLCAwLjcsIDAuMDQwODcsIDAsIDAuOTA3NTddLFxuICAgIFwiNjdcIjogWzAsIDAuNywgMC4xNjg5LCAwLCAwLjY2NjE5XSxcbiAgICBcIjY4XCI6IFswLCAwLjcsIDAuMDkzNzEsIDAsIDAuNzc0NDNdLFxuICAgIFwiNjlcIjogWzAsIDAuNywgMC4xODU4MywgMCwgMC41NjE2Ml0sXG4gICAgXCI3MFwiOiBbMCwgMC43LCAwLjEzNjM0LCAwLCAwLjg5NTQ0XSxcbiAgICBcIjcxXCI6IFswLCAwLjcsIDAuMTczMjIsIDAsIDAuNjA5NjFdLFxuICAgIFwiNzJcIjogWzAsIDAuNywgMC4yOTY5NCwgMCwgMC45NjkxOV0sXG4gICAgXCI3M1wiOiBbMCwgMC43LCAwLjE5MTg5LCAwLCAwLjgwOTA3XSxcbiAgICBcIjc0XCI6IFswLjI3Nzc4LCAwLjcsIDAuMTkxODksIDAsIDEuMDUxNTldLFxuICAgIFwiNzVcIjogWzAsIDAuNywgMC4zMTI1OSwgMCwgMC45MTM2NF0sXG4gICAgXCI3NlwiOiBbMCwgMC43LCAwLjE5MTg5LCAwLCAwLjg3MzczXSxcbiAgICBcIjc3XCI6IFswLCAwLjcsIDAuMTU5ODEsIDAsIDEuMDgwMzFdLFxuICAgIFwiNzhcIjogWzAsIDAuNywgMC4zNTI1LCAwLCAwLjkwMTVdLFxuICAgIFwiNzlcIjogWzAsIDAuNywgMC4wODA3OCwgMCwgMC43Mzc4N10sXG4gICAgXCI4MFwiOiBbMCwgMC43LCAwLjA4MDc4LCAwLCAxLjAxMjYyXSxcbiAgICBcIjgxXCI6IFswLCAwLjcsIDAuMDMzMDUsIDAsIDAuODgyODJdLFxuICAgIFwiODJcIjogWzAsIDAuNywgMC4wNjI1OSwgMCwgMC44NV0sXG4gICAgXCI4M1wiOiBbMCwgMC43LCAwLjE5MTg5LCAwLCAwLjg2NzY3XSxcbiAgICBcIjg0XCI6IFswLCAwLjcsIDAuMjkwODcsIDAsIDAuNzQ2OTddLFxuICAgIFwiODVcIjogWzAsIDAuNywgMC4yNTgxNSwgMCwgMC43OTk5Nl0sXG4gICAgXCI4NlwiOiBbMCwgMC43LCAwLjI3NTIzLCAwLCAwLjYyMjA0XSxcbiAgICBcIjg3XCI6IFswLCAwLjcsIDAuMjc1MjMsIDAsIDAuODA1MzJdLFxuICAgIFwiODhcIjogWzAsIDAuNywgMC4yNjAwNiwgMCwgMC45NDQ0NV0sXG4gICAgXCI4OVwiOiBbMCwgMC43LCAwLjI5MzksIDAsIDAuNzA5NjFdLFxuICAgIFwiOTBcIjogWzAsIDAuNywgMC4yNDAzNywgMCwgMC44MjEyXVxuICB9LFxuICBcIlNpemUxLVJlZ3VsYXJcIjoge1xuICAgIFwiNDBcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDU4MzRdLFxuICAgIFwiNDFcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDU4MzRdLFxuICAgIFwiNDdcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNTc3NzhdLFxuICAgIFwiOTFcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDE2NjddLFxuICAgIFwiOTJcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNTc3NzhdLFxuICAgIFwiOTNcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDE2NjddLFxuICAgIFwiMTIzXCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjEyNVwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC41ODMzNF0sXG4gICAgXCI3MTBcIjogWzAsIDAuNzIyMjIsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiNzMyXCI6IFswLCAwLjcyMjIyLCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjc3MFwiOiBbMCwgMC43MjIyMiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI3NzFcIjogWzAsIDAuNzIyMjIsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODIxNFwiOiBbLTAuMDAwOTksIDAuNjAxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg1OTNcIjogWzFlLTA1LCAwLjYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODU5NVwiOiBbMWUtMDUsIDAuNiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NjU3XCI6IFsxZS0wNSwgMC42LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg2NTlcIjogWzFlLTA1LCAwLjYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODcxOVwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMC45NDQ0NV0sXG4gICAgXCI4NzIwXCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjk0NDQ1XSxcbiAgICBcIjg3MjFcIjogWzAuMjUwMDEsIDAuNzUsIDAsIDAsIDEuMDU1NTZdLFxuICAgIFwiODczMFwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg3MzlcIjogWy0wLjAwNTk5LCAwLjYwNiwgMCwgMCwgMC4zMzMzM10sXG4gICAgXCI4NzQxXCI6IFstMC4wMDU5OSwgMC42MDYsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODc0N1wiOiBbMC4zMDYxMiwgMC44MDUsIDAuMTk0NDUsIDAsIDAuNDcyMjJdLFxuICAgIFwiODc0OFwiOiBbMC4zMDYsIDAuODA1LCAwLjE5NDQ1LCAwLCAwLjQ3MjIyXSxcbiAgICBcIjg3NDlcIjogWzAuMzA2LCAwLjgwNSwgMC4xOTQ0NSwgMCwgMC40NzIyMl0sXG4gICAgXCI4NzUwXCI6IFswLjMwNjEyLCAwLjgwNSwgMC4xOTQ0NSwgMCwgMC40NzIyMl0sXG4gICAgXCI4ODk2XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjg4OTdcIjogWzAuMjUwMDEsIDAuNzUsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODg5OFwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI4ODk5XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjg5NjhcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiODk2OVwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC40NzIyMl0sXG4gICAgXCI4OTcwXCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjg5NzFcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiOTE2OFwiOiBbLTAuMDAwOTksIDAuNjAxLCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjEwMjE2XCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjEwMjE3XCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjEwNzUyXCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjEwNzUzXCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjEwNzU0XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjEwNzU2XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjEwNzU4XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjgzMzM0XVxuICB9LFxuICBcIlNpemUyLVJlZ3VsYXJcIjoge1xuICAgIFwiNDBcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNTk3MjJdLFxuICAgIFwiNDFcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNTk3MjJdLFxuICAgIFwiNDdcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuODExMTFdLFxuICAgIFwiOTFcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiOTJcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuODExMTFdLFxuICAgIFwiOTNcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiMTIzXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjEyNVwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI3MTBcIjogWzAsIDAuNzUsIDAsIDAsIDEuMF0sXG4gICAgXCI3MzJcIjogWzAsIDAuNzUsIDAsIDAsIDEuMF0sXG4gICAgXCI3NzBcIjogWzAsIDAuNzUsIDAsIDAsIDEuMF0sXG4gICAgXCI3NzFcIjogWzAsIDAuNzUsIDAsIDAsIDEuMF0sXG4gICAgXCI4NzE5XCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjI3Nzc4XSxcbiAgICBcIjg3MjBcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuMjc3NzhdLFxuICAgIFwiODcyMVwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS40NDQ0NV0sXG4gICAgXCI4NzMwXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAxLjBdLFxuICAgIFwiODc0N1wiOiBbMC44NjIyNSwgMS4zNiwgMC40NDQ0NSwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NzQ4XCI6IFswLjg2MiwgMS4zNiwgMC40NDQ0NSwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NzQ5XCI6IFswLjg2MiwgMS4zNiwgMC40NDQ0NSwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NzUwXCI6IFswLjg2MjI1LCAxLjM2LCAwLjQ0NDQ1LCAwLCAwLjU1NTU2XSxcbiAgICBcIjg4OTZcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiODg5N1wiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCI4ODk4XCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjg4OTlcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiODk2OFwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCI4OTY5XCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjg5NzBcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNTI3NzhdLFxuICAgIFwiODk3MVwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCIxMDIxNlwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC42MTExMV0sXG4gICAgXCIxMDIxN1wiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC42MTExMV0sXG4gICAgXCIxMDc1MlwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS41MTExMl0sXG4gICAgXCIxMDc1M1wiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS41MTExMl0sXG4gICAgXCIxMDc1NFwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS41MTExMl0sXG4gICAgXCIxMDc1NlwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCIxMDc1OFwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS4xMTExMV1cbiAgfSxcbiAgXCJTaXplMy1SZWd1bGFyXCI6IHtcbiAgICBcIjQwXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjczNjExXSxcbiAgICBcIjQxXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjczNjExXSxcbiAgICBcIjQ3XCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAxLjA0NDQ1XSxcbiAgICBcIjkxXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjkyXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAxLjA0NDQ1XSxcbiAgICBcIjkzXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjEyM1wiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMC43NV0sXG4gICAgXCIxMjVcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNzVdLFxuICAgIFwiNzEwXCI6IFswLCAwLjc1LCAwLCAwLCAxLjQ0NDQ1XSxcbiAgICBcIjczMlwiOiBbMCwgMC43NSwgMCwgMCwgMS40NDQ0NV0sXG4gICAgXCI3NzBcIjogWzAsIDAuNzUsIDAsIDAsIDEuNDQ0NDVdLFxuICAgIFwiNzcxXCI6IFswLCAwLjc1LCAwLCAwLCAxLjQ0NDQ1XSxcbiAgICBcIjg3MzBcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDEuMF0sXG4gICAgXCI4OTY4XCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjg5NjlcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiODk3MFwiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMC41ODMzNF0sXG4gICAgXCI4OTcxXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjEwMjE2XCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjc1XSxcbiAgICBcIjEwMjE3XCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjc1XVxuICB9LFxuICBcIlNpemU0LVJlZ3VsYXJcIjoge1xuICAgIFwiNDBcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNzkxNjddLFxuICAgIFwiNDFcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNzkxNjddLFxuICAgIFwiNDdcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDEuMjc3NzhdLFxuICAgIFwiOTFcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiOTJcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDEuMjc3NzhdLFxuICAgIFwiOTNcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiMTIzXCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjgwNTU2XSxcbiAgICBcIjEyNVwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC44MDU1Nl0sXG4gICAgXCI3MTBcIjogWzAsIDAuODI1LCAwLCAwLCAxLjg4ODldLFxuICAgIFwiNzMyXCI6IFswLCAwLjgyNSwgMCwgMCwgMS44ODg5XSxcbiAgICBcIjc3MFwiOiBbMCwgMC44MjUsIDAsIDAsIDEuODg4OV0sXG4gICAgXCI3NzFcIjogWzAsIDAuODI1LCAwLCAwLCAxLjg4ODldLFxuICAgIFwiODczMFwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg5NjhcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiODk2OVwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI4OTcwXCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjg5NzFcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiOTExNVwiOiBbMC42NDUwMiwgMS4xNTUsIDAsIDAsIDAuODc1XSxcbiAgICBcIjkxMTZcIjogWzFlLTA1LCAwLjYsIDAsIDAsIDAuODc1XSxcbiAgICBcIjkxMTdcIjogWzAuNjQ1MDIsIDEuMTU1LCAwLCAwLCAwLjg3NV0sXG4gICAgXCI5MTE4XCI6IFswLjY0NTAyLCAxLjE1NSwgMCwgMCwgMC44NzVdLFxuICAgIFwiOTExOVwiOiBbMWUtMDUsIDAuNiwgMCwgMCwgMC44NzVdLFxuICAgIFwiOTEyMFwiOiBbMC42NDUwMiwgMS4xNTUsIDAsIDAsIDAuODc1XSxcbiAgICBcIjkxMjFcIjogWzAuNjQ1MDIsIDEuMTU1LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjkxMjJcIjogWy0wLjAwMDk5LCAwLjYwMSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MTIzXCI6IFswLjY0NTAyLCAxLjE1NSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MTI0XCI6IFswLjY0NTAyLCAxLjE1NSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MTI1XCI6IFstMC4wMDA5OSwgMC42MDEsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTEyNlwiOiBbMC42NDUwMiwgMS4xNTUsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTEyN1wiOiBbMWUtMDUsIDAuOSwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5MTI4XCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjkxMjlcIjogWzAuOTAwMDEsIDAsIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTEzMFwiOiBbMCwgMC4zLCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjkxMzFcIjogWzFlLTA1LCAwLjksIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTEzMlwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5MTMzXCI6IFswLjkwMDAxLCAwLCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjkxNDNcIjogWzAuODg1MDIsIDAuOTE1LCAwLCAwLCAxLjA1NTU2XSxcbiAgICBcIjEwMjE2XCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjgwNTU2XSxcbiAgICBcIjEwMjE3XCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjgwNTU2XSxcbiAgICBcIjU3MzQ0XCI6IFstMC4wMDQ5OSwgMC42MDUsIDAsIDAsIDEuMDU1NTZdLFxuICAgIFwiNTczNDVcIjogWy0wLjAwNDk5LCAwLjYwNSwgMCwgMCwgMS4wNTU1Nl0sXG4gICAgXCI1NzY4MFwiOiBbMCwgMC4xMiwgMCwgMCwgMC40NV0sXG4gICAgXCI1NzY4MVwiOiBbMCwgMC4xMiwgMCwgMCwgMC40NV0sXG4gICAgXCI1NzY4MlwiOiBbMCwgMC4xMiwgMCwgMCwgMC40NV0sXG4gICAgXCI1NzY4M1wiOiBbMCwgMC4xMiwgMCwgMCwgMC40NV1cbiAgfSxcbiAgXCJUeXBld3JpdGVyLVJlZ3VsYXJcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjMzXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIzNFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMzVcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjM2XCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIzN1wiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiMzhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjM5XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0MFwiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiNDFcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjQyXCI6IFswLCAwLjUyMDgzLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0M1wiOiBbLTAuMDgwNTYsIDAuNTMwNTUsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjQ0XCI6IFswLjEzODg5LCAwLjEyNSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNDVcIjogWy0wLjA4MDU2LCAwLjUzMDU1LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0NlwiOiBbMCwgMC4xMjUsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjQ3XCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0OFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNDlcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjUwXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1MVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNTJcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjUzXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1NFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNTVcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjU2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1N1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNThcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjU5XCI6IFswLjEzODg5LCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2MFwiOiBbLTAuMDU1NTYsIDAuNTU1NTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjYxXCI6IFstMC4xOTU0OSwgMC40MTU2MiwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjJcIjogWy0wLjA1NTU2LCAwLjU1NTU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2M1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjY1XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjY4XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2OVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzBcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjcxXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3MlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzNcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjc0XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3NVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjc3XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3OFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzlcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgwXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4MVwiOiBbMC4xMzg4OSwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiODJcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgzXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4NFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiODVcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjg2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4N1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiODhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjg5XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTFcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkyXCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5M1wiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjk1XCI6IFswLjA5NTE0LCAwLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTdcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjk4XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5OVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTAwXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwMlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTAzXCI6IFswLjIyMjIyLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwNVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTA2XCI6IFswLjIyMjIyLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMDdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTBcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjExMVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTEyXCI6IFswLjIyMjIyLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTNcIjogWzAuMjIyMjIsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjExNFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTE1XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTZcIjogWzAsIDAuNTUzNTgsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjExN1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTE4XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEyMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTIxXCI6IFswLjIyMjIyLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEyM1wiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTI0XCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMjVcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEyNlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTI3XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjE3NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTg0XCI6IFswLjE5NDQ1LCAwLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIzMDVcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjU2N1wiOiBbMC4yMjIyMiwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzExXCI6IFswLCAwLjU2NTk3LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3MTNcIjogWzAsIDAuNTY1NTUsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjcxNFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzE1XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3MjhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjczMFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzcwXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3NzFcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjc3NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTE1XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkyMFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTIzXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTMxXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkzNFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTM2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgyMTdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgyNDJcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkyNTFcIjogWzAuMTExMTEsIDAuMjE5NDQsIDAsIDAsIDAuNTI1XVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2ZvbnRNZXRyaWNzLmpzXG5cblxuLyoqXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgbWV0cmljcyByZWdhcmRpbmcgZm9udHMgYW5kIGluZGl2aWR1YWwgc3ltYm9scy4gVGhlIHNpZ21hXG4gKiBhbmQgeGkgdmFyaWFibGVzLCBhcyB3ZWxsIGFzIHRoZSBtZXRyaWNNYXAgbWFwIGNvbnRhaW4gZGF0YSBleHRyYWN0ZWQgZnJvbVxuICogVGVYLCBUZVggZm9udCBtZXRyaWNzLCBhbmQgdGhlIFRURiBmaWxlcy4gVGhlc2UgZGF0YSBhcmUgdGhlbiBleHBvc2VkIHZpYSB0aGVcbiAqIGBtZXRyaWNzYCB2YXJpYWJsZSBhbmQgdGhlIGdldENoYXJhY3Rlck1ldHJpY3MgZnVuY3Rpb24uXG4gKi9cbi8vIEluIFRlWCwgdGhlcmUgYXJlIGFjdHVhbGx5IHRocmVlIHNldHMgb2YgZGltZW5zaW9ucywgb25lIGZvciBlYWNoIG9mXG4vLyB0ZXh0c3R5bGUgKHNpemUgaW5kZXggNSBhbmQgaGlnaGVyOiA+PTlwdCksIHNjcmlwdHN0eWxlIChzaXplIGluZGV4IDMgYW5kIDQ6XG4vLyA3LThwdCksIGFuZCBzY3JpcHRzY3JpcHRzdHlsZSAoc2l6ZSBpbmRleCAxIGFuZCAyOiA1LTZwdCkuICBUaGVzZSBhcmVcbi8vIHByb3ZpZGVkIGluIHRoZSB0aGUgYXJyYXlzIGJlbG93LCBpbiB0aGF0IG9yZGVyLlxuLy9cbi8vIFRoZSBmb250IG1ldHJpY3MgYXJlIHN0b3JlZCBpbiBmb250cyBjbXN5MTAsIGNtc3k3LCBhbmQgY21zeTUgcmVzcHNlY3RpdmVseS5cbi8vIFRoaXMgd2FzIGRldGVybWluZWQgYnkgcnVubmluZyB0aGUgZm9sbG93aW5nIHNjcmlwdDpcbi8vXG4vLyAgICAgbGF0ZXggLWludGVyYWN0aW9uPW5vbnN0b3Btb2RlIFxcXG4vLyAgICAgJ1xcZG9jdW1lbnRjbGFzc3thcnRpY2xlfVxcdXNlcGFja2FnZXthbXNtYXRofVxcYmVnaW57ZG9jdW1lbnR9JyBcXFxuLy8gICAgICckYSQgXFxleHBhbmRhZnRlclxcc2hvd1xcdGhlXFx0ZXh0Zm9udDInIFxcXG4vLyAgICAgJ1xcZXhwYW5kYWZ0ZXJcXHNob3dcXHRoZVxcc2NyaXB0Zm9udDInIFxcXG4vLyAgICAgJ1xcZXhwYW5kYWZ0ZXJcXHNob3dcXHRoZVxcc2NyaXB0c2NyaXB0Zm9udDInIFxcXG4vLyAgICAgJ1xcc3RvcCdcbi8vXG4vLyBUaGUgbWV0cmljcyB0aGVtc2VsdmVzIHdlcmUgcmV0cmVpdmVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6XG4vL1xuLy8gICAgIHRmdG9wbCBjbXN5MTBcbi8vICAgICB0ZnRvcGwgY21zeTdcbi8vICAgICB0ZnRvcGwgY21zeTVcbi8vXG4vLyBUaGUgb3V0cHV0IG9mIGVhY2ggb2YgdGhlc2UgY29tbWFuZHMgaXMgcXVpdGUgbGVuZ3RoeS4gIFRoZSBvbmx5IHBhcnQgd2Vcbi8vIGNhcmUgYWJvdXQgaXMgdGhlIEZPTlRESU1FTiBzZWN0aW9uLiBFYWNoIHZhbHVlIGlzIG1lYXN1cmVkIGluIEVNcy5cbnZhciBzaWdtYXNBbmRYaXMgPSB7XG4gIHNsYW50OiBbMC4yNTAsIDAuMjUwLCAwLjI1MF0sXG4gIC8vIHNpZ21hMVxuICBzcGFjZTogWzAuMDAwLCAwLjAwMCwgMC4wMDBdLFxuICAvLyBzaWdtYTJcbiAgc3RyZXRjaDogWzAuMDAwLCAwLjAwMCwgMC4wMDBdLFxuICAvLyBzaWdtYTNcbiAgc2hyaW5rOiBbMC4wMDAsIDAuMDAwLCAwLjAwMF0sXG4gIC8vIHNpZ21hNFxuICB4SGVpZ2h0OiBbMC40MzEsIDAuNDMxLCAwLjQzMV0sXG4gIC8vIHNpZ21hNVxuICBxdWFkOiBbMS4wMDAsIDEuMTcxLCAxLjQ3Ml0sXG4gIC8vIHNpZ21hNlxuICBleHRyYVNwYWNlOiBbMC4wMDAsIDAuMDAwLCAwLjAwMF0sXG4gIC8vIHNpZ21hN1xuICBudW0xOiBbMC42NzcsIDAuNzMyLCAwLjkyNV0sXG4gIC8vIHNpZ21hOFxuICBudW0yOiBbMC4zOTQsIDAuMzg0LCAwLjM4N10sXG4gIC8vIHNpZ21hOVxuICBudW0zOiBbMC40NDQsIDAuNDcxLCAwLjUwNF0sXG4gIC8vIHNpZ21hMTBcbiAgZGVub20xOiBbMC42ODYsIDAuNzUyLCAxLjAyNV0sXG4gIC8vIHNpZ21hMTFcbiAgZGVub20yOiBbMC4zNDUsIDAuMzQ0LCAwLjUzMl0sXG4gIC8vIHNpZ21hMTJcbiAgc3VwMTogWzAuNDEzLCAwLjUwMywgMC41MDRdLFxuICAvLyBzaWdtYTEzXG4gIHN1cDI6IFswLjM2MywgMC40MzEsIDAuNDA0XSxcbiAgLy8gc2lnbWExNFxuICBzdXAzOiBbMC4yODksIDAuMjg2LCAwLjI5NF0sXG4gIC8vIHNpZ21hMTVcbiAgc3ViMTogWzAuMTUwLCAwLjE0MywgMC4yMDBdLFxuICAvLyBzaWdtYTE2XG4gIHN1YjI6IFswLjI0NywgMC4yODYsIDAuNDAwXSxcbiAgLy8gc2lnbWExN1xuICBzdXBEcm9wOiBbMC4zODYsIDAuMzUzLCAwLjQ5NF0sXG4gIC8vIHNpZ21hMThcbiAgc3ViRHJvcDogWzAuMDUwLCAwLjA3MSwgMC4xMDBdLFxuICAvLyBzaWdtYTE5XG4gIGRlbGltMTogWzIuMzkwLCAxLjcwMCwgMS45ODBdLFxuICAvLyBzaWdtYTIwXG4gIGRlbGltMjogWzEuMDEwLCAxLjE1NywgMS40MjBdLFxuICAvLyBzaWdtYTIxXG4gIGF4aXNIZWlnaHQ6IFswLjI1MCwgMC4yNTAsIDAuMjUwXSxcbiAgLy8gc2lnbWEyMlxuICAvLyBUaGVzZSBmb250IG1ldHJpY3MgYXJlIGV4dHJhY3RlZCBmcm9tIFRlWCBieSB1c2luZyB0ZnRvcGwgb24gY21leDEwLnRmbTtcbiAgLy8gdGhleSBjb3JyZXNwb25kIHRvIHRoZSBmb250IHBhcmFtZXRlcnMgb2YgdGhlIGV4dGVuc2lvbiBmb250cyAoZmFtaWx5IDMpLlxuICAvLyBTZWUgdGhlIFRlWGJvb2ssIHBhZ2UgNDQxLiBJbiBBTVNUZVgsIHRoZSBleHRlbnNpb24gZm9udHMgc2NhbGU7IHRvXG4gIC8vIG1hdGNoIGNtZXg3LCB3ZSdkIHVzZSBjbWV4Ny50Zm0gdmFsdWVzIGZvciBzY3JpcHQgYW5kIHNjcmlwdHNjcmlwdFxuICAvLyB2YWx1ZXMuXG4gIGRlZmF1bHRSdWxlVGhpY2tuZXNzOiBbMC4wNCwgMC4wNDksIDAuMDQ5XSxcbiAgLy8geGk4OyBjbWV4NzogMC4wNDlcbiAgYmlnT3BTcGFjaW5nMTogWzAuMTExLCAwLjExMSwgMC4xMTFdLFxuICAvLyB4aTlcbiAgYmlnT3BTcGFjaW5nMjogWzAuMTY2LCAwLjE2NiwgMC4xNjZdLFxuICAvLyB4aTEwXG4gIGJpZ09wU3BhY2luZzM6IFswLjIsIDAuMiwgMC4yXSxcbiAgLy8geGkxMVxuICBiaWdPcFNwYWNpbmc0OiBbMC42LCAwLjYxMSwgMC42MTFdLFxuICAvLyB4aTEyOyBjbWV4NzogMC42MTFcbiAgYmlnT3BTcGFjaW5nNTogWzAuMSwgMC4xNDMsIDAuMTQzXSxcbiAgLy8geGkxMzsgY21leDc6IDAuMTQzXG4gIC8vIFRoZSBcXHNxcnQgcnVsZSB3aWR0aCBpcyB0YWtlbiBmcm9tIHRoZSBoZWlnaHQgb2YgdGhlIHN1cmQgY2hhcmFjdGVyLlxuICAvLyBTaW5jZSB3ZSB1c2UgdGhlIHNhbWUgZm9udCBhdCBhbGwgc2l6ZXMsIHRoaXMgdGhpY2tuZXNzIGRvZXNuJ3Qgc2NhbGUuXG4gIHNxcnRSdWxlVGhpY2tuZXNzOiBbMC4wNCwgMC4wNCwgMC4wNF0sXG4gIC8vIFRoaXMgdmFsdWUgZGV0ZXJtaW5lcyBob3cgbGFyZ2UgYSBwdCBpcywgZm9yIG1ldHJpY3Mgd2hpY2ggYXJlIGRlZmluZWRcbiAgLy8gaW4gdGVybXMgb2YgcHRzLlxuICAvLyBUaGlzIHZhbHVlIGlzIGFsc28gdXNlZCBpbiBrYXRleC5sZXNzOyBpZiB5b3UgY2hhbmdlIGl0IG1ha2Ugc3VyZSB0aGVcbiAgLy8gdmFsdWVzIG1hdGNoLlxuICBwdFBlckVtOiBbMTAuMCwgMTAuMCwgMTAuMF0sXG4gIC8vIFRoZSBzcGFjZSBiZXR3ZWVuIGFkamFjZW50IGB8YCBjb2x1bW5zIGluIGFuIGFycmF5IGRlZmluaXRpb24uIEZyb21cbiAgLy8gYFxcc2hvd3RoZVxcZG91YmxlcnVsZXNlcGAgaW4gTGFUZVguIEVxdWFscyAyLjAgLyBwdFBlckVtLlxuICBkb3VibGVSdWxlU2VwOiBbMC4yLCAwLjIsIDAuMl0sXG4gIC8vIFRoZSB3aWR0aCBvZiBzZXBhcmF0b3IgbGluZXMgaW4ge2FycmF5fSBlbnZpcm9ubWVudHMuIEZyb21cbiAgLy8gYFxcc2hvd3RoZVxcYXJyYXlydWxld2lkdGhgIGluIExhVGVYLiBFcXVhbHMgMC40IC8gcHRQZXJFbS5cbiAgYXJyYXlSdWxlV2lkdGg6IFswLjA0LCAwLjA0LCAwLjA0XSxcbiAgLy8gVHdvIHZhbHVlcyBmcm9tIExhVGVYIHNvdXJjZTJlOlxuICBmYm94c2VwOiBbMC4zLCAwLjMsIDAuM10sXG4gIC8vICAgICAgICAzIHB0IC8gcHRQZXJFbVxuICBmYm94cnVsZTogWzAuMDQsIDAuMDQsIDAuMDRdIC8vIDAuNCBwdCAvIHB0UGVyRW1cblxufTsgLy8gVGhpcyBtYXAgY29udGFpbnMgYSBtYXBwaW5nIGZyb20gZm9udCBuYW1lIGFuZCBjaGFyYWN0ZXIgY29kZSB0byBjaGFyYWN0ZXJcbi8vIG1ldHJpY3MsIGluY2x1ZGluZyBoZWlnaHQsIGRlcHRoLCBpdGFsaWMgY29ycmVjdGlvbiwgYW5kIHNrZXcgKGtlcm4gZnJvbSB0aGVcbi8vIGNoYXJhY3RlciB0byB0aGUgY29ycmVzcG9uZGluZyBcXHNrZXdjaGFyKVxuLy8gVGhpcyBtYXAgaXMgZ2VuZXJhdGVkIHZpYSBgbWFrZSBtZXRyaWNzYC4gSXQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIG1hbnVhbGx5LlxuXG4gLy8gVGhlc2UgYXJlIHZlcnkgcm91Z2ggYXBwcm94aW1hdGlvbnMuICBXZSBkZWZhdWx0IHRvIFRpbWVzIE5ldyBSb21hbiB3aGljaFxuLy8gc2hvdWxkIGhhdmUgTGF0aW4tMSBhbmQgQ3lyaWxsaWMgY2hhcmFjdGVycywgYnV0IG1heSBub3QgZGVwZW5kaW5nIG9uIHRoZVxuLy8gb3BlcmF0aW5nIHN5c3RlbS4gIFRoZSBtZXRyaWNzIGRvIG5vdCBhY2NvdW50IGZvciBleHRyYSBoZWlnaHQgZnJvbSB0aGVcbi8vIGFjY2VudHMuICBJbiB0aGUgY2FzZSBvZiBDeXJpbGxpYyBjaGFyYWN0ZXJzIHdoaWNoIGhhdmUgYm90aCBhc2NlbmRlcnMgYW5kXG4vLyBkZXNjZW5kZXJzIHdlIHByZWZlciBhcHByb3hpbWF0aW9ucyB3aXRoIGFzY2VuZGVycywgcHJpbWFyaWx5IHRvIHByZXZlbnRcbi8vIHRoZSBmcmFjdGlvbiBiYXIgb3Igcm9vdCBsaW5lIGZyb20gaW50ZXJzZWN0aW5nIHRoZSBnbHlwaC5cbi8vIFRPRE8oa2V2aW5iKSBhbGxvdyB1bmlvbiBvZiBtdWx0aXBsZSBnbHlwaCBtZXRyaWNzIGZvciBiZXR0ZXIgYWNjdXJhY3kuXG5cbnZhciBleHRyYUNoYXJhY3Rlck1hcCA9IHtcbiAgLy8gTGF0aW4tMVxuICAnw4UnOiAnQScsXG4gICfDhyc6ICdDJyxcbiAgJ8OQJzogJ0QnLFxuICAnw54nOiAnbycsXG4gICfDpSc6ICdhJyxcbiAgJ8OnJzogJ2MnLFxuICAnw7AnOiAnZCcsXG4gICfDvic6ICdvJyxcbiAgLy8gQ3lyaWxsaWNcbiAgJ9CQJzogJ0EnLFxuICAn0JEnOiAnQicsXG4gICfQkic6ICdCJyxcbiAgJ9CTJzogJ0YnLFxuICAn0JQnOiAnQScsXG4gICfQlSc6ICdFJyxcbiAgJ9CWJzogJ0snLFxuICAn0JcnOiAnMycsXG4gICfQmCc6ICdOJyxcbiAgJ9CZJzogJ04nLFxuICAn0JonOiAnSycsXG4gICfQmyc6ICdOJyxcbiAgJ9CcJzogJ00nLFxuICAn0J0nOiAnSCcsXG4gICfQnic6ICdPJyxcbiAgJ9CfJzogJ04nLFxuICAn0KAnOiAnUCcsXG4gICfQoSc6ICdDJyxcbiAgJ9CiJzogJ1QnLFxuICAn0KMnOiAneScsXG4gICfQpCc6ICdPJyxcbiAgJ9ClJzogJ1gnLFxuICAn0KYnOiAnVScsXG4gICfQpyc6ICdoJyxcbiAgJ9CoJzogJ1cnLFxuICAn0KknOiAnVycsXG4gICfQqic6ICdCJyxcbiAgJ9CrJzogJ1gnLFxuICAn0KwnOiAnQicsXG4gICfQrSc6ICczJyxcbiAgJ9CuJzogJ1gnLFxuICAn0K8nOiAnUicsXG4gICfQsCc6ICdhJyxcbiAgJ9CxJzogJ2InLFxuICAn0LInOiAnYScsXG4gICfQsyc6ICdyJyxcbiAgJ9C0JzogJ3knLFxuICAn0LUnOiAnZScsXG4gICfQtic6ICdtJyxcbiAgJ9C3JzogJ2UnLFxuICAn0LgnOiAnbicsXG4gICfQuSc6ICduJyxcbiAgJ9C6JzogJ24nLFxuICAn0LsnOiAnbicsXG4gICfQvCc6ICdtJyxcbiAgJ9C9JzogJ24nLFxuICAn0L4nOiAnbycsXG4gICfQvyc6ICduJyxcbiAgJ9GAJzogJ3AnLFxuICAn0YEnOiAnYycsXG4gICfRgic6ICdvJyxcbiAgJ9GDJzogJ3knLFxuICAn0YQnOiAnYicsXG4gICfRhSc6ICd4JyxcbiAgJ9GGJzogJ24nLFxuICAn0YcnOiAnbicsXG4gICfRiCc6ICd3JyxcbiAgJ9GJJzogJ3cnLFxuICAn0YonOiAnYScsXG4gICfRiyc6ICdtJyxcbiAgJ9GMJzogJ2EnLFxuICAn0Y0nOiAnZScsXG4gICfRjic6ICdtJyxcbiAgJ9GPJzogJ3InXG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gYWRkcyBuZXcgZm9udCBtZXRyaWNzIHRvIGRlZmF1bHQgbWV0cmljTWFwXG4gKiBJdCBjYW4gYWxzbyBvdmVycmlkZSBleGlzdGluZyBtZXRyaWNzXG4gKi9cbmZ1bmN0aW9uIHNldEZvbnRNZXRyaWNzKGZvbnROYW1lLCBtZXRyaWNzKSB7XG4gIGZvbnRNZXRyaWNzRGF0YVtmb250TmFtZV0gPSBtZXRyaWNzO1xufVxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGxvb2tpbmcgdXAgaW5mb3JtYXRpb24gaW4gdGhlXG4gKiBtZXRyaWNNYXAgdGFibGUuIEl0IHRha2VzIGEgY2hhcmFjdGVyIGFzIGEgc3RyaW5nLCBhbmQgYSBmb250LlxuICpcbiAqIE5vdGU6IHRoZSBgd2lkdGhgIHByb3BlcnR5IG1heSBiZSB1bmRlZmluZWQgaWYgZm9udE1ldHJpY3NEYXRhLmpzIHdhc24ndFxuICogYnVpbHQgdXNpbmcgYE1ha2UgZXh0ZW5kZWRfbWV0cmljc2AuXG4gKi9cblxuZnVuY3Rpb24gZ2V0Q2hhcmFjdGVyTWV0cmljcyhjaGFyYWN0ZXIsIGZvbnQsIG1vZGUpIHtcbiAgaWYgKCFmb250TWV0cmljc0RhdGFbZm9udF0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJGb250IG1ldHJpY3Mgbm90IGZvdW5kIGZvciBmb250OiBcIiArIGZvbnQgKyBcIi5cIik7XG4gIH1cblxuICB2YXIgY2ggPSBjaGFyYWN0ZXIuY2hhckNvZGVBdCgwKTtcbiAgdmFyIG1ldHJpY3MgPSBmb250TWV0cmljc0RhdGFbZm9udF1bY2hdO1xuXG4gIGlmICghbWV0cmljcyAmJiBjaGFyYWN0ZXJbMF0gaW4gZXh0cmFDaGFyYWN0ZXJNYXApIHtcbiAgICBjaCA9IGV4dHJhQ2hhcmFjdGVyTWFwW2NoYXJhY3RlclswXV0uY2hhckNvZGVBdCgwKTtcbiAgICBtZXRyaWNzID0gZm9udE1ldHJpY3NEYXRhW2ZvbnRdW2NoXTtcbiAgfVxuXG4gIGlmICghbWV0cmljcyAmJiBtb2RlID09PSAndGV4dCcpIHtcbiAgICAvLyBXZSBkb24ndCB0eXBpY2FsbHkgaGF2ZSBmb250IG1ldHJpY3MgZm9yIEFzaWFuIHNjcmlwdHMuXG4gICAgLy8gQnV0IHNpbmNlIHdlIHN1cHBvcnQgdGhlbSBpbiB0ZXh0IG1vZGUsIHdlIG5lZWQgdG8gcmV0dXJuXG4gICAgLy8gc29tZSBzb3J0IG9mIG1ldHJpY3MuXG4gICAgLy8gU28gaWYgdGhlIGNoYXJhY3RlciBpcyBpbiBhIHNjcmlwdCB3ZSBzdXBwb3J0IGJ1dCB3ZVxuICAgIC8vIGRvbid0IGhhdmUgbWV0cmljcyBmb3IgaXQsIGp1c3QgdXNlIHRoZSBtZXRyaWNzIGZvclxuICAgIC8vIHRoZSBMYXRpbiBjYXBpdGFsIGxldHRlciBNLiBUaGlzIGlzIGNsb3NlIGVub3VnaCBiZWNhdXNlXG4gICAgLy8gd2UgKGN1cnJlbnRseSkgb25seSBjYXJlIGFib3V0IHRoZSBoZWlnaHQgb2YgdGhlIGdscHloXG4gICAgLy8gbm90IGl0cyB3aWR0aC5cbiAgICBpZiAoc3VwcG9ydGVkQ29kZXBvaW50KGNoKSkge1xuICAgICAgbWV0cmljcyA9IGZvbnRNZXRyaWNzRGF0YVtmb250XVs3N107IC8vIDc3IGlzIHRoZSBjaGFyY29kZSBmb3IgJ00nXG4gICAgfVxuICB9XG5cbiAgaWYgKG1ldHJpY3MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGVwdGg6IG1ldHJpY3NbMF0sXG4gICAgICBoZWlnaHQ6IG1ldHJpY3NbMV0sXG4gICAgICBpdGFsaWM6IG1ldHJpY3NbMl0sXG4gICAgICBza2V3OiBtZXRyaWNzWzNdLFxuICAgICAgd2lkdGg6IG1ldHJpY3NbNF1cbiAgICB9O1xuICB9XG59XG52YXIgZm9udE1ldHJpY3NCeVNpemVJbmRleCA9IHt9O1xuLyoqXG4gKiBHZXQgdGhlIGZvbnQgbWV0cmljcyBmb3IgYSBnaXZlbiBzaXplLlxuICovXG5cbmZ1bmN0aW9uIGdldEdsb2JhbE1ldHJpY3Moc2l6ZSkge1xuICB2YXIgc2l6ZUluZGV4O1xuXG4gIGlmIChzaXplID49IDUpIHtcbiAgICBzaXplSW5kZXggPSAwO1xuICB9IGVsc2UgaWYgKHNpemUgPj0gMykge1xuICAgIHNpemVJbmRleCA9IDE7XG4gIH0gZWxzZSB7XG4gICAgc2l6ZUluZGV4ID0gMjtcbiAgfVxuXG4gIGlmICghZm9udE1ldHJpY3NCeVNpemVJbmRleFtzaXplSW5kZXhdKSB7XG4gICAgdmFyIG1ldHJpY3MgPSBmb250TWV0cmljc0J5U2l6ZUluZGV4W3NpemVJbmRleF0gPSB7XG4gICAgICBjc3NFbVBlck11OiBzaWdtYXNBbmRYaXMucXVhZFtzaXplSW5kZXhdIC8gMThcbiAgICB9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIHNpZ21hc0FuZFhpcykge1xuICAgICAgaWYgKHNpZ21hc0FuZFhpcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIG1ldHJpY3Nba2V5XSA9IHNpZ21hc0FuZFhpc1trZXldW3NpemVJbmRleF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZvbnRNZXRyaWNzQnlTaXplSW5kZXhbc2l6ZUluZGV4XTtcbn1cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3N5bWJvbHMuanNcbi8qKlxuICogVGhpcyBmaWxlIGhvbGRzIGEgbGlzdCBvZiBhbGwgbm8tYXJndW1lbnQgZnVuY3Rpb25zIGFuZCBzaW5nbGUtY2hhcmFjdGVyXG4gKiBzeW1ib2xzIChsaWtlICdhJyBvciAnOycpLlxuICpcbiAqIEZvciBlYWNoIG9mIHRoZSBzeW1ib2xzLCB0aGVyZSBhcmUgdGhyZWUgcHJvcGVydGllcyB0aGV5IGNhbiBoYXZlOlxuICogLSBmb250IChyZXF1aXJlZCk6IHRoZSBmb250IHRvIGJlIHVzZWQgZm9yIHRoaXMgc3ltYm9sLiBFaXRoZXIgXCJtYWluXCIgKHRoZVxuICAgICBub3JtYWwgZm9udCksIG9yIFwiYW1zXCIgKHRoZSBhbXMgZm9udHMpLlxuICogLSBncm91cCAocmVxdWlyZWQpOiB0aGUgUGFyc2VOb2RlIGdyb3VwIHR5cGUgdGhlIHN5bWJvbCBzaG91bGQgaGF2ZSAoaS5lLlxuICAgICBcInRleHRvcmRcIiwgXCJtYXRob3JkXCIsIGV0YykuXG4gICAgIFNlZSBodHRwczovL2dpdGh1Yi5jb20vS2FUZVgvS2FUZVgvd2lraS9FeGFtaW5pbmctVGVYI2dyb3VwLXR5cGVzXG4gKiAtIHJlcGxhY2U6IHRoZSBjaGFyYWN0ZXIgdGhhdCB0aGlzIHN5bWJvbCBvciBmdW5jdGlvbiBzaG91bGQgYmVcbiAqICAgcmVwbGFjZWQgd2l0aCAoaS5lLiBcIlxccGhpXCIgaGFzIGEgcmVwbGFjZSB2YWx1ZSBvZiBcIlxcdTAzZDVcIiwgdGhlIHBoaVxuICogICBjaGFyYWN0ZXIgaW4gdGhlIG1haW4gZm9udCkuXG4gKlxuICogVGhlIG91dGVybW9zdCBtYXAgaW4gdGhlIHRhYmxlIGluZGljYXRlcyB3aGF0IG1vZGUgdGhlIHN5bWJvbHMgc2hvdWxkIGJlXG4gKiBhY2NlcHRlZCBpbiAoZS5nLiBcIm1hdGhcIiBvciBcInRleHRcIikuXG4gKi9cbi8vIFNvbWUgb2YgdGhlc2UgaGF2ZSBhIFwiLXRva2VuXCIgc3VmZml4IHNpbmNlIHRoZXNlIGFyZSBhbHNvIHVzZWQgYXMgYFBhcnNlTm9kZWBcbi8vIHR5cGVzIGZvciByYXcgdGV4dCB0b2tlbnMsIGFuZCB3ZSB3YW50IHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIGhpZ2hlci1sZXZlbFxuLy8gYFBhcnNlTm9kZWAgdHlwZXMuIFRoZXNlIGBQYXJzZU5vZGVgcyBhcmUgY29uc3RydWN0ZWQgd2l0aGluIGBQYXJzZXJgIGJ5XG4vLyBsb29raW5nIHVwIHRoZSBgc3ltYm9sc2AgbWFwLlxudmFyIEFUT01TID0ge1xuICBcImJpblwiOiAxLFxuICBcImNsb3NlXCI6IDEsXG4gIFwiaW5uZXJcIjogMSxcbiAgXCJvcGVuXCI6IDEsXG4gIFwicHVuY3RcIjogMSxcbiAgXCJyZWxcIjogMVxufTtcbnZhciBOT05fQVRPTVMgPSB7XG4gIFwiYWNjZW50LXRva2VuXCI6IDEsXG4gIFwibWF0aG9yZFwiOiAxLFxuICBcIm9wLXRva2VuXCI6IDEsXG4gIFwic3BhY2luZ1wiOiAxLFxuICBcInRleHRvcmRcIjogMVxufTtcbnZhciBzeW1ib2xzID0ge1xuICBcIm1hdGhcIjoge30sXG4gIFwidGV4dFwiOiB7fVxufTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19zeW1ib2xzID0gKHN5bWJvbHMpO1xuLyoqIGBhY2NlcHRVbmljb2RlQ2hhciA9IHRydWVgIGlzIG9ubHkgYXBwbGljYWJsZSBpZiBgcmVwbGFjZWAgaXMgc2V0LiAqL1xuXG5mdW5jdGlvbiBkZWZpbmVTeW1ib2wobW9kZSwgZm9udCwgZ3JvdXAsIHJlcGxhY2UsIG5hbWUsIGFjY2VwdFVuaWNvZGVDaGFyKSB7XG4gIHN5bWJvbHNbbW9kZV1bbmFtZV0gPSB7XG4gICAgZm9udDogZm9udCxcbiAgICBncm91cDogZ3JvdXAsXG4gICAgcmVwbGFjZTogcmVwbGFjZVxuICB9O1xuXG4gIGlmIChhY2NlcHRVbmljb2RlQ2hhciAmJiByZXBsYWNlKSB7XG4gICAgc3ltYm9sc1ttb2RlXVtyZXBsYWNlXSA9IHN5bWJvbHNbbW9kZV1bbmFtZV07XG4gIH1cbn0gLy8gU29tZSBhYmJyZXZpYXRpb25zIGZvciBjb21tb25seSB1c2VkIHN0cmluZ3MuXG4vLyBUaGlzIGhlbHBzIG1pbmlmeSB0aGUgY29kZSwgYW5kIGFsc28gc3BvdHRpbmcgdHlwb3MgdXNpbmcganNoaW50LlxuLy8gbW9kZXM6XG5cbnZhciBzeW1ib2xzX21hdGggPSBcIm1hdGhcIjtcbnZhciBzeW1ib2xzX3RleHQgPSBcInRleHRcIjsgLy8gZm9udHM6XG5cbnZhciBtYWluID0gXCJtYWluXCI7XG52YXIgYW1zID0gXCJhbXNcIjsgLy8gZ3JvdXBzOlxuXG52YXIgc3ltYm9sc19hY2NlbnQgPSBcImFjY2VudC10b2tlblwiO1xudmFyIGJpbiA9IFwiYmluXCI7XG52YXIgc3ltYm9sc19jbG9zZSA9IFwiY2xvc2VcIjtcbnZhciBzeW1ib2xzX2lubmVyID0gXCJpbm5lclwiO1xudmFyIG1hdGhvcmQgPSBcIm1hdGhvcmRcIjtcbnZhciBvcCA9IFwib3AtdG9rZW5cIjtcbnZhciBzeW1ib2xzX29wZW4gPSBcIm9wZW5cIjtcbnZhciBwdW5jdCA9IFwicHVuY3RcIjtcbnZhciByZWwgPSBcInJlbFwiO1xudmFyIHN5bWJvbHNfc3BhY2luZyA9IFwic3BhY2luZ1wiO1xudmFyIHN5bWJvbHNfdGV4dG9yZCA9IFwidGV4dG9yZFwiOyAvLyBOb3cgY29tZXMgdGhlIHN5bWJvbCB0YWJsZVxuLy8gUmVsYXRpb24gU3ltYm9sc1xuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjI2MVwiLCBcIlxcXFxlcXVpdlwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjdBXCIsIFwiXFxcXHByZWNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjI3QlwiLCBcIlxcXFxzdWNjXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyM0NcIiwgXCJcXFxcc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyQTVcIiwgXCJcXFxccGVycFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyQUFGXCIsIFwiXFxcXHByZWNlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyQUIwXCIsIFwiXFxcXHN1Y2NlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjQzXCIsIFwiXFxcXHNpbWVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyMjNcIiwgXCJcXFxcbWlkXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNkFcIiwgXCJcXFxcbGxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjI2QlwiLCBcIlxcXFxnZ1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjREXCIsIFwiXFxcXGFzeW1wXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyMjVcIiwgXCJcXFxccGFyYWxsZWxcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjJDOFwiLCBcIlxcXFxib3d0aWVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjMyM1wiLCBcIlxcXFxzbWlsZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjkxXCIsIFwiXFxcXHNxc3Vic2V0ZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjI5MlwiLCBcIlxcXFxzcXN1cHNldGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNTBcIiwgXCJcXFxcZG90ZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjMyMlwiLCBcIlxcXFxmcm93blwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjBCXCIsIFwiXFxcXG5pXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyMURcIiwgXCJcXFxccHJvcHRvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyQTJcIiwgXCJcXFxcdmRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjJBM1wiLCBcIlxcXFxkYXNodlwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjBCXCIsIFwiXFxcXG93bnNcIik7IC8vIFB1bmN0dWF0aW9uXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHB1bmN0LCBcIi5cIiwgXCJcXFxcbGRvdHBcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBwdW5jdCwgXCJcXHUyMkM1XCIsIFwiXFxcXGNkb3RwXCIpOyAvLyBNaXNjIFN5bWJvbHNcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIiNcIiwgXCJcXFxcI1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCIjXCIsIFwiXFxcXCNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiJlwiLCBcIlxcXFwmXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIiZcIiwgXCJcXFxcJlwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTM1XCIsIFwiXFxcXGFsZXBoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyMDBcIiwgXCJcXFxcZm9yYWxsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIxMEZcIiwgXCJcXFxcaGJhclwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjAzXCIsIFwiXFxcXGV4aXN0c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjA3XCIsIFwiXFxcXG5hYmxhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTI2NkRcIiwgXCJcXFxcZmxhdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTEzXCIsIFwiXFxcXGVsbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyNjZFXCIsIFwiXFxcXG5hdHVyYWxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjY2M1wiLCBcIlxcXFxjbHVic3VpdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTE4XCIsIFwiXFxcXHdwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTI2NkZcIiwgXCJcXFxcc2hhcnBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjY2MlwiLCBcIlxcXFxkaWFtb25kc3VpdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTFDXCIsIFwiXFxcXFJlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTI2NjFcIiwgXCJcXFxcaGVhcnRzdWl0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIxMTFcIiwgXCJcXFxcSW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjY2MFwiLCBcIlxcXFxzcGFkZXN1aXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4QTdcIiwgXCJcXFxcU1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHhCNlwiLCBcIlxcXFxQXCIsIHRydWUpOyAvLyBNYXRoIGFuZCBUZXh0XG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDIwXCIsIFwiXFxcXGRhZ1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDIwXCIsIFwiXFxcXGRhZ1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDIwXCIsIFwiXFxcXHRleHRkYWdnZXJcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjAyMVwiLCBcIlxcXFxkZGFnXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMjFcIiwgXCJcXFxcZGRhZ1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDIxXCIsIFwiXFxcXHRleHRkYWdnZXJkYmxcIik7IC8vIExhcmdlIERlbGltaXRlcnNcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19jbG9zZSwgXCJcXHUyM0IxXCIsIFwiXFxcXHJtb3VzdGFjaGVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX29wZW4sIFwiXFx1MjNCMFwiLCBcIlxcXFxsbW91c3RhY2hlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19jbG9zZSwgXCJcXHUyN0VGXCIsIFwiXFxcXHJncm91cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCJcXHUyN0VFXCIsIFwiXFxcXGxncm91cFwiLCB0cnVlKTsgLy8gQmluYXJ5IE9wZXJhdG9yc1xuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxM1wiLCBcIlxcXFxtcFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjk2XCIsIFwiXFxcXG9taW51c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjhFXCIsIFwiXFxcXHVwbHVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOTNcIiwgXCJcXFxcc3FjYXBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxN1wiLCBcIlxcXFxhc3RcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjI5NFwiLCBcIlxcXFxzcWN1cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyNUVGXCIsIFwiXFxcXGJpZ2NpcmNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxOVwiLCBcIlxcXFxidWxsZXRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjAyMVwiLCBcIlxcXFxkZGFnZ2VyXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyNDBcIiwgXCJcXFxcd3JcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MkEzRlwiLCBcIlxcXFxhbWFsZ1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCImXCIsIFwiXFxcXEFuZFwiKTsgLy8gZnJvbSBhbXNtYXRoXG4vLyBBcnJvdyBTeW1ib2xzXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyN0Y1XCIsIFwiXFxcXGxvbmdsZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjFEMFwiLCBcIlxcXFxMZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjdGOFwiLCBcIlxcXFxMb25nbGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTI3RjZcIiwgXCJcXFxcbG9uZ3JpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjFEMlwiLCBcIlxcXFxSaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTI3RjlcIiwgXCJcXFxcTG9uZ3JpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5NFwiLCBcIlxcXFxsZWZ0cmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyN0Y3XCIsIFwiXFxcXGxvbmdsZWZ0cmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMUQ0XCIsIFwiXFxcXExlZnRyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTI3RkFcIiwgXCJcXFxcTG9uZ2xlZnRyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxQTZcIiwgXCJcXFxcbWFwc3RvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTI3RkNcIiwgXCJcXFxcbG9uZ21hcHN0b1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTk3XCIsIFwiXFxcXG5lYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjFBOVwiLCBcIlxcXFxob29rbGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxQUFcIiwgXCJcXFxcaG9va3JpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5OFwiLCBcIlxcXFxzZWFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxQkNcIiwgXCJcXFxcbGVmdGhhcnBvb251cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMUMwXCIsIFwiXFxcXHJpZ2h0aGFycG9vbnVwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTlcIiwgXCJcXFxcc3dhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMUJEXCIsIFwiXFxcXGxlZnRoYXJwb29uZG93blwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMUMxXCIsIFwiXFxcXHJpZ2h0aGFycG9vbmRvd25cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5NlwiLCBcIlxcXFxud2Fycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxQ0NcIiwgXCJcXFxccmlnaHRsZWZ0aGFycG9vbnNcIiwgdHJ1ZSk7IC8vIEFNUyBOZWdhdGVkIEJpbmFyeSBSZWxhdGlvbnNcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI2RVwiLCBcIlxcXFxubGVzc1wiLCB0cnVlKTsgLy8gU3ltYm9sIG5hbWVzIHByZWNlZWRlZCBieSBcIkBcIiBlYWNoIGhhdmUgYSBjb3JyZXNwb25kaW5nIG1hY3JvLlxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHVFMDEwXCIsIFwiXFxcXEBubGVxc2xhbnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHVFMDExXCIsIFwiXFxcXEBubGVxcVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTJBODdcIiwgXCJcXFxcbG5lcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNjhcIiwgXCJcXFxcbG5lcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHVFMDBDXCIsIFwiXFxcXEBsdmVydG5lcXFcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkU2XCIsIFwiXFxcXGxuc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MkE4OVwiLCBcIlxcXFxsbmFwcHJveFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyODBcIiwgXCJcXFxcbnByZWNcIiwgdHJ1ZSk7IC8vIHVuaWNvZGUtbWF0aCBtYXBzIFxcdTIyZTAgdG8gXFxucHJlY2N1cmx5ZXEuIFdlJ2xsIHVzZSB0aGUgQU1TIHN5bm9ueW0uXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyRTBcIiwgXCJcXFxcbnByZWNlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyRThcIiwgXCJcXFxccHJlY25zaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQUI5XCIsIFwiXFxcXHByZWNuYXBwcm94XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0MVwiLCBcIlxcXFxuc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1RTAwNlwiLCBcIlxcXFxAbnNob3J0bWlkXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjIyNFwiLCBcIlxcXFxubWlkXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJBQ1wiLCBcIlxcXFxudmRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkFEXCIsIFwiXFxcXG52RGFzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyRUFcIiwgXCJcXFxcbnRyaWFuZ2xlbGVmdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyRUNcIiwgXCJcXFxcbnRyaWFuZ2xlbGVmdGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI4QVwiLCBcIlxcXFxzdWJzZXRuZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHVFMDFBXCIsIFwiXFxcXEB2YXJzdWJzZXRuZXFcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQUNCXCIsIFwiXFxcXHN1YnNldG5lcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHVFMDE3XCIsIFwiXFxcXEB2YXJzdWJzZXRuZXFxXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI2RlwiLCBcIlxcXFxuZ3RyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1RTAwRlwiLCBcIlxcXFxAbmdlcXNsYW50XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1RTAwRVwiLCBcIlxcXFxAbmdlcXFcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQTg4XCIsIFwiXFxcXGduZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjY5XCIsIFwiXFxcXGduZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1RTAwRFwiLCBcIlxcXFxAZ3ZlcnRuZXFxXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJFN1wiLCBcIlxcXFxnbnNpbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTJBOEFcIiwgXCJcXFxcZ25hcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjgxXCIsIFwiXFxcXG5zdWNjXCIsIHRydWUpOyAvLyB1bmljb2RlLW1hdGggbWFwcyBcXHUyMmUxIHRvIFxcbnN1Y2NjdXJseWVxLiBXZSdsbCB1c2UgdGhlIEFNUyBzeW5vbnltLlxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkUxXCIsIFwiXFxcXG5zdWNjZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkU5XCIsIFwiXFxcXHN1Y2Nuc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MkFCQVwiLCBcIlxcXFxzdWNjbmFwcHJveFwiLCB0cnVlKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgXFx1MjI0NiB0byBcXHNpbW5lcXEuIFdlJ2xsIHVzZSB0aGUgQU1TIHN5bm9ueW0uXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNDZcIiwgXCJcXFxcbmNvbmdcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHVFMDA3XCIsIFwiXFxcXEBuc2hvcnRwYXJhbGxlbFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyMjZcIiwgXCJcXFxcbnBhcmFsbGVsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJBRlwiLCBcIlxcXFxuVkRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkVCXCIsIFwiXFxcXG50cmlhbmdsZXJpZ2h0XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJFRFwiLCBcIlxcXFxudHJpYW5nbGVyaWdodGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1RTAxOFwiLCBcIlxcXFxAbnN1cHNldGVxcVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyOEJcIiwgXCJcXFxcc3Vwc2V0bmVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1RTAxQlwiLCBcIlxcXFxAdmFyc3Vwc2V0bmVxXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MkFDQ1wiLCBcIlxcXFxzdXBzZXRuZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1RTAxOVwiLCBcIlxcXFxAdmFyc3Vwc2V0bmVxcVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyQUVcIiwgXCJcXFxcblZkYXNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MkFCNVwiLCBcIlxcXFxwcmVjbmVxcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTJBQjZcIiwgXCJcXFxcc3VjY25lcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHVFMDE2XCIsIFwiXFxcXEBuc3Vic2V0ZXFxXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJCNFwiLCBcIlxcXFx1bmxoZFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyQjVcIiwgXCJcXFxcdW5yaGRcIik7IC8vIEFNUyBOZWdhdGVkIEFycm93c1xuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMTlBXCIsIFwiXFxcXG5sZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMTlCXCIsIFwiXFxcXG5yaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDRFwiLCBcIlxcXFxuTGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDRlwiLCBcIlxcXFxuUmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQUVcIiwgXCJcXFxcbmxlZnRyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDRVwiLCBcIlxcXFxuTGVmdHJpZ2h0YXJyb3dcIiwgdHJ1ZSk7IC8vIEFNUyBNaXNjXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTI1QjNcIiwgXCJcXFxcdmFydHJpYW5nbGVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTBGXCIsIFwiXFxcXGhzbGFzaFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTI1QkRcIiwgXCJcXFxcdHJpYW5nbGVkb3duXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjVDQVwiLCBcIlxcXFxsb3plbmdlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjRDOFwiLCBcIlxcXFxjaXJjbGVkU1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxceEFFXCIsIFwiXFxcXGNpcmNsZWRSXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4QUVcIiwgXCJcXFxcY2lyY2xlZFJcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjIxXCIsIFwiXFxcXG1lYXN1cmVkYW5nbGVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjA0XCIsIFwiXFxcXG5leGlzdHNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTI3XCIsIFwiXFxcXG1ob1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIxMzJcIiwgXCJcXFxcRmludlwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIxNDFcIiwgXCJcXFxcR2FtZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMzVcIiwgXCJcXFxcYmFja3ByaW1lXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjVCMlwiLCBcIlxcXFxibGFja3RyaWFuZ2xlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjVCQ1wiLCBcIlxcXFxibGFja3RyaWFuZ2xlZG93blwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTI1QTBcIiwgXCJcXFxcYmxhY2tzcXVhcmVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyOUVCXCIsIFwiXFxcXGJsYWNrbG96ZW5nZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTI2MDVcIiwgXCJcXFxcYmlnc3RhclwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyMjJcIiwgXCJcXFxcc3BoZXJpY2FsYW5nbGVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjAxXCIsIFwiXFxcXGNvbXBsZW1lbnRcIiwgdHJ1ZSk7IC8vIHVuaWNvZGUtbWF0aCBtYXBzIFUrRjAgKMOwKSB0byBcXG1hdGhldGguIFdlIG1hcCB0byBBTVMgZnVuY3Rpb24gXFxldGhcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4RjBcIiwgXCJcXFxcZXRoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjU3MVwiLCBcIlxcXFxkaWFndXBcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyNTcyXCIsIFwiXFxcXGRpYWdkb3duXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjVBMVwiLCBcIlxcXFxzcXVhcmVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyNUExXCIsIFwiXFxcXEJveFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTI1Q0FcIiwgXCJcXFxcRGlhbW9uZFwiKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgVStBNSB0byBcXG1hdGh5ZW4uIFdlIG1hcCB0byBBTVMgZnVuY3Rpb24gXFx5ZW5cblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4QTVcIiwgXCJcXFxceWVuXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4QTVcIiwgXCJcXFxceWVuXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjcxM1wiLCBcIlxcXFxjaGVja21hcmtcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyNzEzXCIsIFwiXFxcXGNoZWNrbWFya1wiKTsgLy8gQU1TIEhlYnJld1xuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTM2XCIsIFwiXFxcXGJldGhcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTM4XCIsIFwiXFxcXGRhbGV0aFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIxMzdcIiwgXCJcXFxcZ2ltZWxcIiwgdHJ1ZSk7IC8vIEFNUyBHcmVla1xuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwM0REXCIsIFwiXFxcXGRpZ2FtbWFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwM0YwXCIsIFwiXFxcXHZhcmthcHBhXCIpOyAvLyBBTVMgRGVsaW1pdGVyc1xuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfb3BlbiwgXCJcXHUyNTBDXCIsIFwiXFxcXHVsY29ybmVyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX2Nsb3NlLCBcIlxcdTI1MTBcIiwgXCJcXFxcdXJjb3JuZXJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfb3BlbiwgXCJcXHUyNTE0XCIsIFwiXFxcXGxsY29ybmVyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX2Nsb3NlLCBcIlxcdTI1MThcIiwgXCJcXFxcbHJjb3JuZXJcIiwgdHJ1ZSk7IC8vIEFNUyBCaW5hcnkgUmVsYXRpb25zXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNjZcIiwgXCJcXFxcbGVxcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTJBN0RcIiwgXCJcXFxcbGVxc2xhbnRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQTk1XCIsIFwiXFxcXGVxc2xhbnRsZXNzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3MlwiLCBcIlxcXFxsZXNzc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MkE4NVwiLCBcIlxcXFxsZXNzYXBwcm94XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0QVwiLCBcIlxcXFxhcHByb3hlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyRDZcIiwgXCJcXFxcbGVzc2RvdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyRDhcIiwgXCJcXFxcbGxsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3NlwiLCBcIlxcXFxsZXNzZ3RyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJEQVwiLCBcIlxcXFxsZXNzZXFndHJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQThCXCIsIFwiXFxcXGxlc3NlcXFndHJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjUxXCIsIFwiXFxcXGRvdGVxZG90XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI1M1wiLCBcIlxcXFxyaXNpbmdkb3RzZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjUyXCIsIFwiXFxcXGZhbGxpbmdkb3RzZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjNEXCIsIFwiXFxcXGJhY2tzaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkNEXCIsIFwiXFxcXGJhY2tzaW1lcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTJBQzVcIiwgXCJcXFxcc3Vic2V0ZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJEMFwiLCBcIlxcXFxTdWJzZXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjhGXCIsIFwiXFxcXHNxc3Vic2V0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3Q1wiLCBcIlxcXFxwcmVjY3VybHllcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyREVcIiwgXCJcXFxcY3VybHllcXByZWNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjdFXCIsIFwiXFxcXHByZWNzaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQUI3XCIsIFwiXFxcXHByZWNhcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkIyXCIsIFwiXFxcXHZhcnRyaWFuZ2xlbGVmdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyQjRcIiwgXCJcXFxcdHJpYW5nbGVsZWZ0ZXFcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkE4XCIsIFwiXFxcXHZEYXNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJBQVwiLCBcIlxcXFxWdmRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMzIzXCIsIFwiXFxcXHNtYWxsc21pbGVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMzIyXCIsIFwiXFxcXHNtYWxsZnJvd25cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjRGXCIsIFwiXFxcXGJ1bXBlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNEVcIiwgXCJcXFxcQnVtcGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI2N1wiLCBcIlxcXFxnZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MkE3RVwiLCBcIlxcXFxnZXFzbGFudFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTJBOTZcIiwgXCJcXFxcZXFzbGFudGd0clwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNzNcIiwgXCJcXFxcZ3Ryc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MkE4NlwiLCBcIlxcXFxndHJhcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkQ3XCIsIFwiXFxcXGd0cmRvdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyRDlcIiwgXCJcXFxcZ2dnXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3N1wiLCBcIlxcXFxndHJsZXNzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJEQlwiLCBcIlxcXFxndHJlcWxlc3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQThDXCIsIFwiXFxcXGd0cmVxcWxlc3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjU2XCIsIFwiXFxcXGVxY2lyY1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNTdcIiwgXCJcXFxcY2lyY2VxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI1Q1wiLCBcIlxcXFx0cmlhbmdsZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjNDXCIsIFwiXFxcXHRoaWNrc2ltXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0OFwiLCBcIlxcXFx0aGlja2FwcHJveFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTJBQzZcIiwgXCJcXFxcc3Vwc2V0ZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJEMVwiLCBcIlxcXFxTdXBzZXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjkwXCIsIFwiXFxcXHNxc3Vwc2V0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3RFwiLCBcIlxcXFxzdWNjY3VybHllcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyREZcIiwgXCJcXFxcY3VybHllcXN1Y2NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjdGXCIsIFwiXFxcXHN1Y2NzaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQUI4XCIsIFwiXFxcXHN1Y2NhcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkIzXCIsIFwiXFxcXHZhcnRyaWFuZ2xlcmlnaHRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkI1XCIsIFwiXFxcXHRyaWFuZ2xlcmlnaHRlcVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyQTlcIiwgXCJcXFxcVmRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjIzXCIsIFwiXFxcXHNob3J0bWlkXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjIyNVwiLCBcIlxcXFxzaG9ydHBhcmFsbGVsXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI2Q1wiLCBcIlxcXFxiZXR3ZWVuXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJENFwiLCBcIlxcXFxwaXRjaGZvcmtcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjFEXCIsIFwiXFxcXHZhcnByb3B0b1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTI1QzBcIiwgXCJcXFxcYmxhY2t0cmlhbmdsZWxlZnRcIik7IC8vIHVuaWNvZGUtbWF0aCBzYXlzIHRoYXQgXFx0aGVyZWZvcmUgaXMgYSBtYXRob3JkIGF0b20uXG4vLyBXZSBrZXB0IHRoZSBhbXNzeW1iIGF0b20gdHlwZSwgd2hpY2ggaXMgcmVsLlxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjM0XCIsIFwiXFxcXHRoZXJlZm9yZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyMERcIiwgXCJcXFxcYmFja2Vwc2lsb25cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyNUI2XCIsIFwiXFxcXGJsYWNrdHJpYW5nbGVyaWdodFwiKTsgLy8gdW5pY29kZS1tYXRoIHNheXMgdGhhdCBcXGJlY2F1c2UgaXMgYSBtYXRob3JkIGF0b20uXG4vLyBXZSBrZXB0IHRoZSBhbXNzeW1iIGF0b20gdHlwZSwgd2hpY2ggaXMgcmVsLlxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjM1XCIsIFwiXFxcXGJlY2F1c2VcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkQ4XCIsIFwiXFxcXGxsbGVzc1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyRDlcIiwgXCJcXFxcZ2dndHJcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkIyXCIsIFwiXFxcXGxoZFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyQjNcIiwgXCJcXFxccmhkXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0MlwiLCBcIlxcXFxlcXNpbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMkM4XCIsIFwiXFxcXEpvaW5cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjUxXCIsIFwiXFxcXERvdGVxXCIsIHRydWUpOyAvLyBBTVMgQmluYXJ5IE9wZXJhdG9yc1xuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjE0XCIsIFwiXFxcXGRvdHBsdXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjE2XCIsIFwiXFxcXHNtYWxsc2V0bWludXNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkQyXCIsIFwiXFxcXENhcFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyRDNcIiwgXCJcXFxcQ3VwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBiaW4sIFwiXFx1MkE1RVwiLCBcIlxcXFxkb3VibGViYXJ3ZWRnZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyOUZcIiwgXCJcXFxcYm94bWludXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjlFXCIsIFwiXFxcXGJveHBsdXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkM3XCIsIFwiXFxcXGRpdmlkZW9udGltZXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkM5XCIsIFwiXFxcXGx0aW1lc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyQ0FcIiwgXCJcXFxccnRpbWVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJDQlwiLCBcIlxcXFxsZWZ0dGhyZWV0aW1lc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyQ0NcIiwgXCJcXFxccmlnaHR0aHJlZXRpbWVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJDRlwiLCBcIlxcXFxjdXJseXdlZGdlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJDRVwiLCBcIlxcXFxjdXJseXZlZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyOURcIiwgXCJcXFxcY2lyY2xlZGRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjlCXCIsIFwiXFxcXGNpcmNsZWRhc3RcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkM1XCIsIFwiXFxcXGNlbnRlcmRvdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyQkFcIiwgXCJcXFxcaW50ZXJjYWxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkQyXCIsIFwiXFxcXGRvdWJsZWNhcFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyRDNcIiwgXCJcXFxcZG91YmxlY3VwXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJBMFwiLCBcIlxcXFxib3h0aW1lc1wiLCB0cnVlKTsgLy8gQU1TIEFycm93c1xuLy8gTm90ZTogdW5pY29kZS1tYXRoIG1hcHMgXFx1MjFlMiB0byB0aGVpciBvd24gZnVuY3Rpb24gXFxyaWdodGRhc2hhcnJvdy5cbi8vIFdlJ2xsIG1hcCBpdCB0byBBTVMgZnVuY3Rpb24gXFxkYXNocmlnaHRhcnJvdy4gSXQgcHJvZHVjZXMgdGhlIHNhbWUgYXRvbS5cblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFFMlwiLCBcIlxcXFxkYXNocmlnaHRhcnJvd1wiLCB0cnVlKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgXFx1MjFlMCB0byBcXGxlZnRkYXNoYXJyb3cuIFdlJ2xsIHVzZSB0aGUgQU1TIHN5bm9ueW0uXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxRTBcIiwgXCJcXFxcZGFzaGxlZnRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQzdcIiwgXCJcXFxcbGVmdGxlZnRhcnJvd3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUM2XCIsIFwiXFxcXGxlZnRyaWdodGFycm93c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxREFcIiwgXCJcXFxcTGxlZnRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxOUVcIiwgXCJcXFxcdHdvaGVhZGxlZnRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQTJcIiwgXCJcXFxcbGVmdGFycm93dGFpbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQUJcIiwgXCJcXFxcbG9vcGFycm93bGVmdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQ0JcIiwgXCJcXFxcbGVmdHJpZ2h0aGFycG9vbnNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUI2XCIsIFwiXFxcXGN1cnZlYXJyb3dsZWZ0XCIsIHRydWUpOyAvLyB1bmljb2RlLW1hdGggbWFwcyBcXHUyMWJhIHRvIFxcYWN3b3BlbmNpcmNsZWFycm93LiBXZSdsbCB1c2UgdGhlIEFNUyBzeW5vbnltLlxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUJBXCIsIFwiXFxcXGNpcmNsZWFycm93bGVmdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQjBcIiwgXCJcXFxcTHNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDOFwiLCBcIlxcXFx1cHVwYXJyb3dzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFCRlwiLCBcIlxcXFx1cGhhcnBvb25sZWZ0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDM1wiLCBcIlxcXFxkb3duaGFycG9vbmxlZnRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkI4XCIsIFwiXFxcXG11bHRpbWFwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFBRFwiLCBcIlxcXFxsZWZ0cmlnaHRzcXVpZ2Fycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDOVwiLCBcIlxcXFxyaWdodHJpZ2h0YXJyb3dzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDNFwiLCBcIlxcXFxyaWdodGxlZnRhcnJvd3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUEwXCIsIFwiXFxcXHR3b2hlYWRyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFBM1wiLCBcIlxcXFxyaWdodGFycm93dGFpbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQUNcIiwgXCJcXFxcbG9vcGFycm93cmlnaHRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUI3XCIsIFwiXFxcXGN1cnZlYXJyb3dyaWdodFwiLCB0cnVlKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgXFx1MjFiYiB0byBcXGN3b3BlbmNpcmNsZWFycm93LiBXZSdsbCB1c2UgdGhlIEFNUyBzeW5vbnltLlxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUJCXCIsIFwiXFxcXGNpcmNsZWFycm93cmlnaHRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUIxXCIsIFwiXFxcXFJzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQ0FcIiwgXCJcXFxcZG93bmRvd25hcnJvd3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUJFXCIsIFwiXFxcXHVwaGFycG9vbnJpZ2h0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDMlwiLCBcIlxcXFxkb3duaGFycG9vbnJpZ2h0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFERFwiLCBcIlxcXFxyaWdodHNxdWlnYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUREXCIsIFwiXFxcXGxlYWRzdG9cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMURCXCIsIFwiXFxcXFJyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFCRVwiLCBcIlxcXFxyZXN0cmljdGlvblwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDE4XCIsIFwiYFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCIkXCIsIFwiXFxcXCRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiJFwiLCBcIlxcXFwkXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIiRcIiwgXCJcXFxcdGV4dGRvbGxhclwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCIlXCIsIFwiXFxcXCVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiJVwiLCBcIlxcXFwlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIl9cIiwgXCJcXFxcX1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJfXCIsIFwiXFxcXF9cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiX1wiLCBcIlxcXFx0ZXh0dW5kZXJzY29yZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjIwXCIsIFwiXFxcXGFuZ2xlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyMUVcIiwgXCJcXFxcaW5mdHlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjAzMlwiLCBcIlxcXFxwcmltZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyNUIzXCIsIFwiXFxcXHRyaWFuZ2xlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTAzOTNcIiwgXCJcXFxcR2FtbWFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MDM5NFwiLCBcIlxcXFxEZWx0YVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwMzk4XCIsIFwiXFxcXFRoZXRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTAzOUJcIiwgXCJcXFxcTGFtYmRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTAzOUVcIiwgXCJcXFxcWGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MDNBMFwiLCBcIlxcXFxQaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwM0EzXCIsIFwiXFxcXFNpZ21hXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTAzQTVcIiwgXCJcXFxcVXBzaWxvblwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwM0E2XCIsIFwiXFxcXFBoaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwM0E4XCIsIFwiXFxcXFBzaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwM0E5XCIsIFwiXFxcXE9tZWdhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIkFcIiwgXCJcXHUwMzkxXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIkJcIiwgXCJcXHUwMzkyXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIkVcIiwgXCJcXHUwMzk1XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlpcIiwgXCJcXHUwMzk2XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIkhcIiwgXCJcXHUwMzk3XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIklcIiwgXCJcXHUwMzk5XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIktcIiwgXCJcXHUwMzlBXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIk1cIiwgXCJcXHUwMzlDXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIk5cIiwgXCJcXHUwMzlEXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIk9cIiwgXCJcXHUwMzlGXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlBcIiwgXCJcXHUwM0ExXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlRcIiwgXCJcXHUwM0E0XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlhcIiwgXCJcXHUwM0E3XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxceEFDXCIsIFwiXFxcXG5lZ1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHhBQ1wiLCBcIlxcXFxsbm90XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyQTRcIiwgXCJcXFxcdG9wXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyQTVcIiwgXCJcXFxcYm90XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyMDVcIiwgXCJcXFxcZW1wdHlzZXRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjA1XCIsIFwiXFxcXHZhcm5vdGhpbmdcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQjFcIiwgXCJcXFxcYWxwaGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQjJcIiwgXCJcXFxcYmV0YVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNCM1wiLCBcIlxcXFxnYW1tYVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNCNFwiLCBcIlxcXFxkZWx0YVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNGNVwiLCBcIlxcXFxlcHNpbG9uXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0I2XCIsIFwiXFxcXHpldGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQjdcIiwgXCJcXFxcZXRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0I4XCIsIFwiXFxcXHRoZXRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0I5XCIsIFwiXFxcXGlvdGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQkFcIiwgXCJcXFxca2FwcGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQkJcIiwgXCJcXFxcbGFtYmRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0JDXCIsIFwiXFxcXG11XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0JEXCIsIFwiXFxcXG51XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0JFXCIsIFwiXFxcXHhpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0JGXCIsIFwiXFxcXG9taWNyb25cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQzBcIiwgXCJcXFxccGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQzFcIiwgXCJcXFxccmhvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0MzXCIsIFwiXFxcXHNpZ21hXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0M0XCIsIFwiXFxcXHRhdVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNDNVwiLCBcIlxcXFx1cHNpbG9uXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0Q1XCIsIFwiXFxcXHBoaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNDN1wiLCBcIlxcXFxjaGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQzhcIiwgXCJcXFxccHNpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0M5XCIsIFwiXFxcXG9tZWdhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0I1XCIsIFwiXFxcXHZhcmVwc2lsb25cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzRDFcIiwgXCJcXFxcdmFydGhldGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzRDZcIiwgXCJcXFxcdmFycGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzRjFcIiwgXCJcXFxcdmFycmhvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0MyXCIsIFwiXFxcXHZhcnNpZ21hXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0M2XCIsIFwiXFxcXHZhcnBoaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjE3XCIsIFwiKlwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCIrXCIsIFwiK1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjEyXCIsIFwiLVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMkM1XCIsIFwiXFxcXGNkb3RcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxOFwiLCBcIlxcXFxjaXJjXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxceEY3XCIsIFwiXFxcXGRpdlwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHhCMVwiLCBcIlxcXFxwbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHhEN1wiLCBcIlxcXFx0aW1lc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjI5XCIsIFwiXFxcXGNhcFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjJBXCIsIFwiXFxcXGN1cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjE2XCIsIFwiXFxcXHNldG1pbnVzXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyMjdcIiwgXCJcXFxcbGFuZFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjI4XCIsIFwiXFxcXGxvclwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjI3XCIsIFwiXFxcXHdlZGdlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyMjhcIiwgXCJcXFxcdmVlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyMUFcIiwgXCJcXFxcc3VyZFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCIoXCIsIFwiKFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCJbXCIsIFwiW1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCJcXHUyN0U4XCIsIFwiXFxcXGxhbmdsZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCJcXHUyMjIzXCIsIFwiXFxcXGx2ZXJ0XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19vcGVuLCBcIlxcdTIyMjVcIiwgXCJcXFxcbFZlcnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2Nsb3NlLCBcIilcIiwgXCIpXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19jbG9zZSwgXCJdXCIsIFwiXVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfY2xvc2UsIFwiP1wiLCBcIj9cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2Nsb3NlLCBcIiFcIiwgXCIhXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19jbG9zZSwgXCJcXHUyN0U5XCIsIFwiXFxcXHJhbmdsZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfY2xvc2UsIFwiXFx1MjIyM1wiLCBcIlxcXFxydmVydFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfY2xvc2UsIFwiXFx1MjIyNVwiLCBcIlxcXFxyVmVydFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCI9XCIsIFwiPVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCI8XCIsIFwiPFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCI+XCIsIFwiPlwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCI6XCIsIFwiOlwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjQ4XCIsIFwiXFxcXGFwcHJveFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjQ1XCIsIFwiXFxcXGNvbmdcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjI2NVwiLCBcIlxcXFxnZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjY1XCIsIFwiXFxcXGdlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTkwXCIsIFwiXFxcXGdldHNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiPlwiLCBcIlxcXFxndFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjA4XCIsIFwiXFxcXGluXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdUUwMjBcIiwgXCJcXFxcQG5vdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjgyXCIsIFwiXFxcXHN1YnNldFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjgzXCIsIFwiXFxcXHN1cHNldFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjg2XCIsIFwiXFxcXHN1YnNldGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyODdcIiwgXCJcXFxcc3Vwc2V0ZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjg4XCIsIFwiXFxcXG5zdWJzZXRlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyODlcIiwgXCJcXFxcbnN1cHNldGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyQThcIiwgXCJcXFxcbW9kZWxzXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTBcIiwgXCJcXFxcbGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNjRcIiwgXCJcXFxcbGVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjI2NFwiLCBcIlxcXFxsZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiPFwiLCBcIlxcXFxsdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTkyXCIsIFwiXFxcXHJpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5MlwiLCBcIlxcXFx0b1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNzFcIiwgXCJcXFxcbmdlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNzBcIiwgXCJcXFxcbmxlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfc3BhY2luZywgXCJcXHhBMFwiLCBcIlxcXFwgXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19zcGFjaW5nLCBcIlxceEEwXCIsIFwiflwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfc3BhY2luZywgXCJcXHhBMFwiLCBcIlxcXFxzcGFjZVwiKTsgLy8gUmVmOiBMYVRlWCBTb3VyY2UgMmU6IFxcRGVjbGFyZVJvYnVzdENvbW1hbmR7XFxub2JyZWFrc3BhY2V9eyVcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19zcGFjaW5nLCBcIlxceEEwXCIsIFwiXFxcXG5vYnJlYWtzcGFjZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfc3BhY2luZywgXCJcXHhBMFwiLCBcIlxcXFwgXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19zcGFjaW5nLCBcIlxceEEwXCIsIFwiflwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfc3BhY2luZywgXCJcXHhBMFwiLCBcIlxcXFxzcGFjZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfc3BhY2luZywgXCJcXHhBMFwiLCBcIlxcXFxub2JyZWFrc3BhY2VcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3NwYWNpbmcsIG51bGwsIFwiXFxcXG5vYnJlYWtcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3NwYWNpbmcsIG51bGwsIFwiXFxcXGFsbG93YnJlYWtcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBwdW5jdCwgXCIsXCIsIFwiLFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHB1bmN0LCBcIjtcIiwgXCI7XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJCQ1wiLCBcIlxcXFxiYXJ3ZWRnZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyQkJcIiwgXCJcXFxcdmVlYmFyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOTlcIiwgXCJcXFxcb2RvdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjk1XCIsIFwiXFxcXG9wbHVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOTdcIiwgXCJcXFxcb3RpbWVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyMDJcIiwgXCJcXFxccGFydGlhbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjk4XCIsIFwiXFxcXG9zbGFzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyOUFcIiwgXCJcXFxcY2lyY2xlZGNpcmNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkExXCIsIFwiXFxcXGJveGRvdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyNUIzXCIsIFwiXFxcXGJpZ3RyaWFuZ2xldXBcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjVCRFwiLCBcIlxcXFxiaWd0cmlhbmdsZWRvd25cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjAyMFwiLCBcIlxcXFxkYWdnZXJcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjJDNFwiLCBcIlxcXFxkaWFtb25kXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyQzZcIiwgXCJcXFxcc3RhclwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyNUMzXCIsIFwiXFxcXHRyaWFuZ2xlbGVmdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyNUI5XCIsIFwiXFxcXHRyaWFuZ2xlcmlnaHRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX29wZW4sIFwie1wiLCBcIlxcXFx7XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIntcIiwgXCJcXFxce1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJ7XCIsIFwiXFxcXHRleHRicmFjZWxlZnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2Nsb3NlLCBcIn1cIiwgXCJcXFxcfVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJ9XCIsIFwiXFxcXH1cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwifVwiLCBcIlxcXFx0ZXh0YnJhY2VyaWdodFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCJ7XCIsIFwiXFxcXGxicmFjZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfY2xvc2UsIFwifVwiLCBcIlxcXFxyYnJhY2VcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX29wZW4sIFwiW1wiLCBcIlxcXFxsYnJhY2tcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiW1wiLCBcIlxcXFxsYnJhY2tcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2Nsb3NlLCBcIl1cIiwgXCJcXFxccmJyYWNrXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIl1cIiwgXCJcXFxccmJyYWNrXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19vcGVuLCBcIihcIiwgXCJcXFxcbHBhcmVuXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19jbG9zZSwgXCIpXCIsIFwiXFxcXHJwYXJlblwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCI8XCIsIFwiXFxcXHRleHRsZXNzXCIpOyAvLyBpbiBUMSBmb250ZW5jXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCI+XCIsIFwiXFxcXHRleHRncmVhdGVyXCIpOyAvLyBpbiBUMSBmb250ZW5jXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCJcXHUyMzBBXCIsIFwiXFxcXGxmbG9vclwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfY2xvc2UsIFwiXFx1MjMwQlwiLCBcIlxcXFxyZmxvb3JcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX29wZW4sIFwiXFx1MjMwOFwiLCBcIlxcXFxsY2VpbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfY2xvc2UsIFwiXFx1MjMwOVwiLCBcIlxcXFxyY2VpbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXFxcXCIsIFwiXFxcXGJhY2tzbGFzaFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjIzXCIsIFwifFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjIzXCIsIFwiXFxcXHZlcnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwifFwiLCBcIlxcXFx0ZXh0YmFyXCIpOyAvLyBpbiBUMSBmb250ZW5jXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjI1XCIsIFwiXFxcXHxcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjIyNVwiLCBcIlxcXFxWZXJ0XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyMjVcIiwgXCJcXFxcdGV4dGJhcmRibFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJ+XCIsIFwiXFxcXHRleHRhc2NpaXRpbGRlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcXFxcIiwgXCJcXFxcdGV4dGJhY2tzbGFzaFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJeXCIsIFwiXFxcXHRleHRhc2NpaWNpcmN1bVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTkxXCIsIFwiXFxcXHVwYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjFEMVwiLCBcIlxcXFxVcGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTNcIiwgXCJcXFxcZG93bmFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxRDNcIiwgXCJcXFxcRG93bmFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTVcIiwgXCJcXFxcdXBkb3duYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjFENVwiLCBcIlxcXFxVcGRvd25hcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG9wLCBcIlxcdTIyMTBcIiwgXCJcXFxcY29wcm9kXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgb3AsIFwiXFx1MjJDMVwiLCBcIlxcXFxiaWd2ZWVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyMkMwXCIsIFwiXFxcXGJpZ3dlZGdlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgb3AsIFwiXFx1MkEwNFwiLCBcIlxcXFxiaWd1cGx1c1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG9wLCBcIlxcdTIyQzJcIiwgXCJcXFxcYmlnY2FwXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgb3AsIFwiXFx1MjJDM1wiLCBcIlxcXFxiaWdjdXBcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJCXCIsIFwiXFxcXGludFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG9wLCBcIlxcdTIyMkJcIiwgXCJcXFxcaW50b3BcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJDXCIsIFwiXFxcXGlpbnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJEXCIsIFwiXFxcXGlpaW50XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIwRlwiLCBcIlxcXFxwcm9kXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIxMVwiLCBcIlxcXFxzdW1cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyQTAyXCIsIFwiXFxcXGJpZ290aW1lc1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG9wLCBcIlxcdTJBMDFcIiwgXCJcXFxcYmlnb3BsdXNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyQTAwXCIsIFwiXFxcXGJpZ29kb3RcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJFXCIsIFwiXFxcXG9pbnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJGXCIsIFwiXFxcXG9paW50XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIzMFwiLCBcIlxcXFxvaWlpbnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyQTA2XCIsIFwiXFxcXGJpZ3NxY3VwXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIyQlwiLCBcIlxcXFxzbWFsbGludFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfaW5uZXIsIFwiXFx1MjAyNlwiLCBcIlxcXFx0ZXh0ZWxsaXBzaXNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2lubmVyLCBcIlxcdTIwMjZcIiwgXCJcXFxcbWF0aGVsbGlwc2lzXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19pbm5lciwgXCJcXHUyMDI2XCIsIFwiXFxcXGxkb3RzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19pbm5lciwgXCJcXHUyMDI2XCIsIFwiXFxcXGxkb3RzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19pbm5lciwgXCJcXHUyMkVGXCIsIFwiXFxcXEBjZG90c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfaW5uZXIsIFwiXFx1MjJGMVwiLCBcIlxcXFxkZG90c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMkVFXCIsIFwiXFxcXHZhcnZkb3RzXCIpOyAvLyBcXHZkb3RzIGlzIGEgbWFjcm9cblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiXFx1MDJDQVwiLCBcIlxcXFxhY3V0ZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxcdTAyQ0JcIiwgXCJcXFxcZ3JhdmVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2FjY2VudCwgXCJcXHhBOFwiLCBcIlxcXFxkZG90XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiflwiLCBcIlxcXFx0aWxkZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxcdTAyQzlcIiwgXCJcXFxcYmFyXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiXFx1MDJEOFwiLCBcIlxcXFxicmV2ZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxcdTAyQzdcIiwgXCJcXFxcY2hlY2tcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2FjY2VudCwgXCJeXCIsIFwiXFxcXGhhdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxcdTIwRDdcIiwgXCJcXFxcdmVjXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiXFx1MDJEOVwiLCBcIlxcXFxkb3RcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2FjY2VudCwgXCJcXHUwMkRBXCIsIFwiXFxcXG1hdGhyaW5nXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwMTMxXCIsIFwiXFxcXGltYXRoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwMjM3XCIsIFwiXFxcXGptYXRoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTAxMzFcIiwgXCJcXFxcaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwMjM3XCIsIFwiXFxcXGpcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4REZcIiwgXCJcXFxcc3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4RTZcIiwgXCJcXFxcYWVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4RTZcIiwgXCJcXFxcYWVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MDE1M1wiLCBcIlxcXFxvZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHhGOFwiLCBcIlxcXFxvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxceEM2XCIsIFwiXFxcXEFFXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTAxNTJcIiwgXCJcXFxcT0VcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4RDhcIiwgXCJcXFxcT1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxcdTAyQ0FcIiwgXCJcXFxcJ1wiKTsgLy8gYWN1dGVcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiXFx1MDJDQlwiLCBcIlxcXFxgXCIpOyAvLyBncmF2ZVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX2FjY2VudCwgXCJcXHUwMkM2XCIsIFwiXFxcXF5cIik7IC8vIGNpcmN1bWZsZXhcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiXFx1MDJEQ1wiLCBcIlxcXFx+XCIpOyAvLyB0aWxkZVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX2FjY2VudCwgXCJcXHUwMkM5XCIsIFwiXFxcXD1cIik7IC8vIG1hY3JvblxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX2FjY2VudCwgXCJcXHUwMkQ4XCIsIFwiXFxcXHVcIik7IC8vIGJyZXZlXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxcdTAyRDlcIiwgXCJcXFxcLlwiKTsgLy8gZG90IGFib3ZlXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxcdTAyREFcIiwgXCJcXFxcclwiKTsgLy8gcmluZyBhYm92ZVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX2FjY2VudCwgXCJcXHUwMkM3XCIsIFwiXFxcXHZcIik7IC8vIGNhcm9uXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxceEE4XCIsICdcXFxcXCInKTsgLy8gZGlhcmVzaXNcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiXFx1MDJERFwiLCBcIlxcXFxIXCIpOyAvLyBkb3VibGUgYWN1dGVcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiXFx1MjVFRlwiLCBcIlxcXFx0ZXh0Y2lyY2xlZFwiKTsgLy8gXFxiaWdjaXJjIGdseXBoXG4vLyBUaGVzZSBsaWdhdHVyZXMgYXJlIGRldGVjdGVkIGFuZCBjcmVhdGVkIGluIFBhcnNlci5qcydzIGBmb3JtTGlnYXR1cmVzYC5cblxudmFyIGxpZ2F0dXJlcyA9IHtcbiAgXCItLVwiOiB0cnVlLFxuICBcIi0tLVwiOiB0cnVlLFxuICBcImBgXCI6IHRydWUsXG4gIFwiJydcIjogdHJ1ZVxufTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDEzXCIsIFwiLS1cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjAxM1wiLCBcIlxcXFx0ZXh0ZW5kYXNoXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMTRcIiwgXCItLS1cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjAxNFwiLCBcIlxcXFx0ZXh0ZW1kYXNoXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMThcIiwgXCJgXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMThcIiwgXCJcXFxcdGV4dHF1b3RlbGVmdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDE5XCIsIFwiJ1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDE5XCIsIFwiXFxcXHRleHRxdW90ZXJpZ2h0XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMUNcIiwgXCJgYFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDFDXCIsIFwiXFxcXHRleHRxdW90ZWRibGxlZnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjAxRFwiLCBcIicnXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMURcIiwgXCJcXFxcdGV4dHF1b3RlZGJscmlnaHRcIik7IC8vICBcXGRlZ3JlZSBmcm9tIGdlbnN5bWIgcGFja2FnZVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4QjBcIiwgXCJcXFxcZGVncmVlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxceEIwXCIsIFwiXFxcXGRlZ3JlZVwiKTsgLy8gXFx0ZXh0ZGVncmVlIGZyb20gaW5wdXRlbmMgcGFja2FnZVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4QjBcIiwgXCJcXFxcdGV4dGRlZ3JlZVwiLCB0cnVlKTsgLy8gVE9ETzogSW4gTGFUZVgsIFxccG91bmRzIGNhbiBnZW5lcmF0ZSBhIGRpZmZlcmVudCBjaGFyYWN0ZXIgaW4gdGV4dCBhbmQgbWF0aFxuLy8gbW9kZSwgYnV0IGFtb25nIG91ciBmb250cywgb25seSBNYWluLUl0YWxpYyBkZWZpbmVzIHRoaXMgY2hhcmFjdGVyIFwiMTYzXCIuXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx4QTNcIiwgXCJcXFxccG91bmRzXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHhBM1wiLCBcIlxcXFxtYXRoc3RlcmxpbmdcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBtYXRob3JkLCBcIlxceEEzXCIsIFwiXFxcXHBvdW5kc1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIG1hdGhvcmQsIFwiXFx4QTNcIiwgXCJcXFxcdGV4dHN0ZXJsaW5nXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjcyMFwiLCBcIlxcXFxtYWx0ZXNlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjcyMFwiLCBcIlxcXFxtYWx0ZXNlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19zcGFjaW5nLCBcIlxceEEwXCIsIFwiXFxcXCBcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3NwYWNpbmcsIFwiXFx4QTBcIiwgXCIgXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19zcGFjaW5nLCBcIlxceEEwXCIsIFwiflwiKTsgLy8gVGhlcmUgYXJlIGxvdHMgb2Ygc3ltYm9scyB3aGljaCBhcmUgdGhlIHNhbWUsIHNvIHdlIGFkZCB0aGVtIGluIGFmdGVyd2FyZHMuXG4vLyBBbGwgb2YgdGhlc2UgYXJlIHRleHRvcmRzIGluIG1hdGggbW9kZVxuXG52YXIgbWF0aFRleHRTeW1ib2xzID0gXCIwMTIzNDU2Nzg5L0AuXFxcIlwiO1xuXG5mb3IgKHZhciBzeW1ib2xzX2kgPSAwOyBzeW1ib2xzX2kgPCBtYXRoVGV4dFN5bWJvbHMubGVuZ3RoOyBzeW1ib2xzX2krKykge1xuICB2YXIgc3ltYm9sc19jaCA9IG1hdGhUZXh0U3ltYm9scy5jaGFyQXQoc3ltYm9sc19pKTtcbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBzeW1ib2xzX2NoLCBzeW1ib2xzX2NoKTtcbn0gLy8gQWxsIG9mIHRoZXNlIGFyZSB0ZXh0b3JkcyBpbiB0ZXh0IG1vZGVcblxuXG52YXIgdGV4dFN5bWJvbHMgPSBcIjAxMjM0NTY3ODkhQCooKS09K1tdPD58XFxcIjs6Py8uLFwiO1xuXG5mb3IgKHZhciBzcmNfc3ltYm9sc19pID0gMDsgc3JjX3N5bWJvbHNfaSA8IHRleHRTeW1ib2xzLmxlbmd0aDsgc3JjX3N5bWJvbHNfaSsrKSB7XG4gIHZhciBfY2ggPSB0ZXh0U3ltYm9scy5jaGFyQXQoc3JjX3N5bWJvbHNfaSk7XG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBfY2gsIF9jaCk7XG59IC8vIEFsbCBvZiB0aGVzZSBhcmUgdGV4dG9yZHMgaW4gdGV4dCBtb2RlLCBhbmQgbWF0aG9yZHMgaW4gbWF0aCBtb2RlXG5cblxudmFyIGxldHRlcnMgPSBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjtcblxuZm9yICh2YXIgc3ltYm9sc19pMiA9IDA7IHN5bWJvbHNfaTIgPCBsZXR0ZXJzLmxlbmd0aDsgc3ltYm9sc19pMisrKSB7XG4gIHZhciBfY2gyID0gbGV0dGVycy5jaGFyQXQoc3ltYm9sc19pMik7XG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMiwgX2NoMik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoMiwgX2NoMik7XG59IC8vIEJsYWNrYm9hcmQgYm9sZCBhbmQgc2NyaXB0IGxldHRlcnMgaW4gVW5pY29kZSByYW5nZVxuXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIkNcIiwgXCJcXHUyMTAyXCIpOyAvLyBibGFja2JvYXJkIGJvbGRcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiQ1wiLCBcIlxcdTIxMDJcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJIXCIsIFwiXFx1MjEwRFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIkhcIiwgXCJcXHUyMTBEXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiTlwiLCBcIlxcdTIxMTVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJOXCIsIFwiXFx1MjExNVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlBcIiwgXCJcXHUyMTE5XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiUFwiLCBcIlxcdTIxMTlcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJRXCIsIFwiXFx1MjExQVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlFcIiwgXCJcXHUyMTFBXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiUlwiLCBcIlxcdTIxMURcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJSXCIsIFwiXFx1MjExRFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlpcIiwgXCJcXHUyMTI0XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiWlwiLCBcIlxcdTIxMjRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcImhcIiwgXCJcXHUyMTBFXCIpOyAvLyBpdGFsaWMgaCwgUGxhbmNrIGNvbnN0YW50XG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIG1hdGhvcmQsIFwiaFwiLCBcIlxcdTIxMEVcIik7IC8vIFRoZSBuZXh0IGxvb3AgbG9hZHMgd2lkZSAoc3Vycm9nYXRlIHBhaXIpIGNoYXJhY3RlcnMuXG4vLyBXZSBzdXBwb3J0IHNvbWUgbGV0dGVycyBpbiB0aGUgVW5pY29kZSByYW5nZSBVKzFENDAwIHRvIFUrMUQ3RkYsXG4vLyBNYXRoZW1hdGljYWwgQWxwaGFudW1lcmljIFN5bWJvbHMuXG4vLyBTb21lIGVkaXRvcnMgZG8gbm90IGRlYWwgd2VsbCB3aXRoIHdpZGUgY2hhcmFjdGVycy4gU28gZG9uJ3Qgd3JpdGUgdGhlXG4vLyBzdHJpbmcgaW50byB0aGlzIGZpbGUuIEluc3RlYWQsIGNyZWF0ZSB0aGUgc3RyaW5nIGZyb20gdGhlIHN1cnJvZ2F0ZSBwYWlyLlxuXG52YXIgc3ltYm9sc193aWRlQ2hhciA9IFwiXCI7XG5cbmZvciAodmFyIHN5bWJvbHNfaTMgPSAwOyBzeW1ib2xzX2kzIDwgbGV0dGVycy5sZW5ndGg7IHN5bWJvbHNfaTMrKykge1xuICB2YXIgX2NoMyA9IGxldHRlcnMuY2hhckF0KHN5bWJvbHNfaTMpOyAvLyBUaGUgaGV4IG51bWJlcnMgaW4gdGhlIG5leHQgbGluZSBhcmUgYSBzdXJyb2dhdGUgcGFpci5cbiAgLy8gMHhEODM1IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBmb3IgYWxsIGxldHRlcnMgaW4gdGhlIHJhbmdlIHdlIHN1cHBvcnQuXG4gIC8vIDB4REMwMCBpcyB0aGUgbG93IHN1cnJvZ2F0ZSBmb3IgYm9sZCBBLlxuXG5cbiAgc3ltYm9sc193aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweERDMDAgKyBzeW1ib2xzX2kzKTsgLy8gQS1aIGEteiBib2xkXG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIHN5bWJvbHNfd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhEQzM0ICsgc3ltYm9sc19pMyk7IC8vIEEtWiBhLXogaXRhbGljXG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIHN5bWJvbHNfd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhEQzY4ICsgc3ltYm9sc19pMyk7IC8vIEEtWiBhLXogYm9sZCBpdGFsaWNcblxuICBkZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBfY2gzLCBzeW1ib2xzX3dpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBfY2gzLCBzeW1ib2xzX3dpZGVDaGFyKTtcbiAgc3ltYm9sc193aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweEREMDQgKyBzeW1ib2xzX2kzKTsgLy8gQS1aIGEteiBGcmFjdHVyXG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIHN5bWJvbHNfd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhEREEwICsgc3ltYm9sc19pMyk7IC8vIEEtWiBhLXogc2Fucy1zZXJpZlxuXG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDMsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIF9jaDMsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBzeW1ib2xzX3dpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4RERENCArIHN5bWJvbHNfaTMpOyAvLyBBLVogYS16IHNhbnMgYm9sZFxuXG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDMsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIF9jaDMsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBzeW1ib2xzX3dpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REUwOCArIHN5bWJvbHNfaTMpOyAvLyBBLVogYS16IHNhbnMgaXRhbGljXG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIHN5bWJvbHNfd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERTcwICsgc3ltYm9sc19pMyk7IC8vIEEtWiBhLXogbW9ub3NwYWNlXG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG5cbiAgaWYgKHN5bWJvbHNfaTMgPCAyNikge1xuICAgIC8vIEthVGVYIGZvbnRzIGhhdmUgb25seSBjYXBpdGFsIGxldHRlcnMgZm9yIGJsYWNrYm9hcmQgYm9sZCBhbmQgc2NyaXB0LlxuICAgIC8vIFNlZSBleGNlcHRpb24gZm9yIGsgYmVsb3cuXG4gICAgc3ltYm9sc193aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweEREMzggKyBzeW1ib2xzX2kzKTsgLy8gQS1aIGRvdWJsZSBzdHJ1Y2tcblxuICAgIGRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDMsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICAgIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gICAgc3ltYm9sc193aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweERDOUMgKyBzeW1ib2xzX2kzKTsgLy8gQS1aIHNjcmlwdFxuXG4gICAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gICAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBfY2gzLCBzeW1ib2xzX3dpZGVDaGFyKTtcbiAgfSAvLyBUT0RPOiBBZGQgYm9sZCBzY3JpcHQgd2hlbiBpdCBpcyBzdXBwb3J0ZWQgYnkgYSBLYVRlWCBmb250LlxuXG59IC8vIFwia1wiIGlzIHRoZSBvbmx5IGRvdWJsZSBzdHJ1Y2sgbG93ZXIgY2FzZSBsZXR0ZXIgaW4gdGhlIEthVGVYIGZvbnRzLlxuXG5cbnN5bWJvbHNfd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERDVDKTsgLy8gayBkb3VibGUgc3RydWNrXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIFwia1wiLCBzeW1ib2xzX3dpZGVDaGFyKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJrXCIsIHN5bWJvbHNfd2lkZUNoYXIpOyAvLyBOZXh0LCBzb21lIHdpZGUgY2hhcmFjdGVyIG51bWVyYWxzXG5cbmZvciAodmFyIHN5bWJvbHNfaTQgPSAwOyBzeW1ib2xzX2k0IDwgMTA7IHN5bWJvbHNfaTQrKykge1xuICB2YXIgX2NoNCA9IHN5bWJvbHNfaTQudG9TdHJpbmcoKTtcblxuICBzeW1ib2xzX3dpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REZDRSArIHN5bWJvbHNfaTQpOyAvLyAwLTkgYm9sZFxuXG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDQsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIF9jaDQsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBzeW1ib2xzX3dpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REZFMiArIHN5bWJvbHNfaTQpOyAvLyAwLTkgc2FucyBzZXJpZlxuXG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDQsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIF9jaDQsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBzeW1ib2xzX3dpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REZFQyArIHN5bWJvbHNfaTQpOyAvLyAwLTkgYm9sZCBzYW5zXG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoNCwgc3ltYm9sc193aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoNCwgc3ltYm9sc193aWRlQ2hhcik7XG4gIHN5bWJvbHNfd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERkY2ICsgc3ltYm9sc19pNCk7IC8vIDAtOSBtb25vc3BhY2VcblxuICBkZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBfY2g0LCBzeW1ib2xzX3dpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBfY2g0LCBzeW1ib2xzX3dpZGVDaGFyKTtcbn0gLy8gV2UgYWRkIHRoZXNlIExhdGluLTEgbGV0dGVycyBhcyBzeW1ib2xzIGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSxcbi8vIGJ1dCB0aGV5IGFyZSBub3QgYWN0dWFsbHkgaW4gdGhlIGZvbnQsIG5vciBhcmUgdGhleSBzdXBwb3J0ZWQgYnkgdGhlXG4vLyBVbmljb2RlIGFjY2VudCBtZWNoYW5pc20sIHNvIHRoZXkgZmFsbCBiYWNrIHRvIFRpbWVzIGZvbnQgYW5kIGxvb2sgdWdseS5cbi8vIFRPRE8oZWRlbWFpbmUpOiBGaXggdGhpcy5cblxuXG52YXIgZXh0cmFMYXRpbiA9IFwiw4fDkMOew6fDvlwiO1xuXG5mb3IgKHZhciBfaTUgPSAwOyBfaTUgPCBleHRyYUxhdGluLmxlbmd0aDsgX2k1KyspIHtcbiAgdmFyIF9jaDUgPSBleHRyYUxhdGluLmNoYXJBdChfaTUpO1xuXG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDUsIF9jaDUpO1xuICBkZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIF9jaDUsIF9jaDUpO1xufVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiw7BcIiwgXCLDsFwiKTsgLy8gVW5pY29kZSB2ZXJzaW9ucyBvZiBleGlzdGluZyBjaGFyYWN0ZXJzXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDEzXCIsIFwi4oCTXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMTRcIiwgXCLigJRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjAxOFwiLCBcIuKAmFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDE5XCIsIFwi4oCZXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMUNcIiwgXCLigJxcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjAxRFwiLCBcIuKAnVwiKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3dpZGUtY2hhcmFjdGVyLmpzXG4vKipcbiAqIFRoaXMgZmlsZSBwcm92aWRlcyBzdXBwb3J0IGZvciBVbmljb2RlIHJhbmdlIFUrMUQ0MDAgdG8gVSsxRDdGRixcbiAqIE1hdGhlbWF0aWNhbCBBbHBoYW51bWVyaWMgU3ltYm9scy5cbiAqXG4gKiBGdW5jdGlvbiB3aWRlQ2hhcmFjdGVyRm9udCB0YWtlcyBhIHdpZGUgY2hhcmFjdGVyIGFzIGlucHV0IGFuZCByZXR1cm5zXG4gKiB0aGUgZm9udCBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8gcmVuZGVyIGl0IHByb3Blcmx5LlxuICovXG5cbi8qKlxuICogRGF0YSBiZWxvdyBpcyBmcm9tIGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL2NoYXJ0cy9QREYvVTFENDAwLnBkZlxuICogVGhhdCBkb2N1bWVudCBzb3J0cyBjaGFyYWN0ZXJzIGludG8gZ3JvdXBzIGJ5IGZvbnQgdHlwZSwgc2F5IGJvbGQgb3IgaXRhbGljLlxuICpcbiAqIEluIHRoZSBhcnJheXMgYmVsb3csIGVhY2ggc3ViYXJyYXkgY29uc2lzdHMgdGhyZWUgZWxlbWVudHM6XG4gKiAgICAgICogVGhlIENTUyBjbGFzcyBvZiB0aGF0IGdyb3VwIHdoZW4gaW4gbWF0aCBtb2RlLlxuICogICAgICAqIFRoZSBDU1MgY2xhc3Mgb2YgdGhhdCBncm91cCB3aGVuIGluIHRleHQgbW9kZS5cbiAqICAgICAgKiBUaGUgZm9udCBuYW1lLCBzbyB0aGF0IEthVGVYIGNhbiBnZXQgZm9udCBtZXRyaWNzLlxuICovXG5cbnZhciB3aWRlTGF0aW5MZXR0ZXJEYXRhID0gW1tcIm1hdGhiZlwiLCBcInRleHRiZlwiLCBcIk1haW4tQm9sZFwiXSwgLy8gQS1aIGJvbGQgdXByaWdodFxuW1wibWF0aGJmXCIsIFwidGV4dGJmXCIsIFwiTWFpbi1Cb2xkXCJdLCAvLyBhLXogYm9sZCB1cHJpZ2h0XG5bXCJtYXRoZGVmYXVsdFwiLCBcInRleHRpdFwiLCBcIk1hdGgtSXRhbGljXCJdLCAvLyBBLVogaXRhbGljXG5bXCJtYXRoZGVmYXVsdFwiLCBcInRleHRpdFwiLCBcIk1hdGgtSXRhbGljXCJdLCAvLyBhLXogaXRhbGljXG5bXCJib2xkc3ltYm9sXCIsIFwiYm9sZHN5bWJvbFwiLCBcIk1haW4tQm9sZEl0YWxpY1wiXSwgLy8gQS1aIGJvbGQgaXRhbGljXG5bXCJib2xkc3ltYm9sXCIsIFwiYm9sZHN5bWJvbFwiLCBcIk1haW4tQm9sZEl0YWxpY1wiXSwgLy8gYS16IGJvbGQgaXRhbGljXG4vLyBNYXAgZmFuY3kgQS1aIGxldHRlcnMgdG8gc2NyaXB0LCBub3QgY2FsbGlncmFwaGljLlxuLy8gVGhpcyBhbGlnbnMgd2l0aCB1bmljb2RlLW1hdGggYW5kIG1hdGggZm9udHMgKGV4Y2VwdCBDYW1icmlhIE1hdGgpLlxuW1wibWF0aHNjclwiLCBcInRleHRzY3JcIiwgXCJTY3JpcHQtUmVndWxhclwiXSwgLy8gQS1aIHNjcmlwdFxuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBhLXogc2NyaXB0LiAgTm8gZm9udFxuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBBLVogYm9sZCBzY3JpcHQuIE5vIGZvbnRcbltcIlwiLCBcIlwiLCBcIlwiXSwgLy8gYS16IGJvbGQgc2NyaXB0LiBObyBmb250XG5bXCJtYXRoZnJha1wiLCBcInRleHRmcmFrXCIsIFwiRnJha3R1ci1SZWd1bGFyXCJdLCAvLyBBLVogRnJha3R1clxuW1wibWF0aGZyYWtcIiwgXCJ0ZXh0ZnJha1wiLCBcIkZyYWt0dXItUmVndWxhclwiXSwgLy8gYS16IEZyYWt0dXJcbltcIm1hdGhiYlwiLCBcInRleHRiYlwiLCBcIkFNUy1SZWd1bGFyXCJdLCAvLyBBLVogZG91YmxlLXN0cnVja1xuW1wibWF0aGJiXCIsIFwidGV4dGJiXCIsIFwiQU1TLVJlZ3VsYXJcIl0sIC8vIGsgZG91YmxlLXN0cnVja1xuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBBLVogYm9sZCBGcmFrdHVyIE5vIGZvbnQgbWV0cmljc1xuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBhLXogYm9sZCBGcmFrdHVyLiAgIE5vIGZvbnQuXG5bXCJtYXRoc2ZcIiwgXCJ0ZXh0c2ZcIiwgXCJTYW5zU2VyaWYtUmVndWxhclwiXSwgLy8gQS1aIHNhbnMtc2VyaWZcbltcIm1hdGhzZlwiLCBcInRleHRzZlwiLCBcIlNhbnNTZXJpZi1SZWd1bGFyXCJdLCAvLyBhLXogc2Fucy1zZXJpZlxuW1wibWF0aGJvbGRzZlwiLCBcInRleHRib2xkc2ZcIiwgXCJTYW5zU2VyaWYtQm9sZFwiXSwgLy8gQS1aIGJvbGQgc2Fucy1zZXJpZlxuW1wibWF0aGJvbGRzZlwiLCBcInRleHRib2xkc2ZcIiwgXCJTYW5zU2VyaWYtQm9sZFwiXSwgLy8gYS16IGJvbGQgc2Fucy1zZXJpZlxuW1wibWF0aGl0c2ZcIiwgXCJ0ZXh0aXRzZlwiLCBcIlNhbnNTZXJpZi1JdGFsaWNcIl0sIC8vIEEtWiBpdGFsaWMgc2Fucy1zZXJpZlxuW1wibWF0aGl0c2ZcIiwgXCJ0ZXh0aXRzZlwiLCBcIlNhbnNTZXJpZi1JdGFsaWNcIl0sIC8vIGEteiBpdGFsaWMgc2Fucy1zZXJpZlxuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBBLVogYm9sZCBpdGFsaWMgc2Fucy4gTm8gZm9udFxuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBhLXogYm9sZCBpdGFsaWMgc2Fucy4gTm8gZm9udFxuW1wibWF0aHR0XCIsIFwidGV4dHR0XCIsIFwiVHlwZXdyaXRlci1SZWd1bGFyXCJdLCAvLyBBLVogbW9ub3NwYWNlXG5bXCJtYXRodHRcIiwgXCJ0ZXh0dHRcIiwgXCJUeXBld3JpdGVyLVJlZ3VsYXJcIl1dO1xudmFyIHdpZGVOdW1lcmFsRGF0YSA9IFtbXCJtYXRoYmZcIiwgXCJ0ZXh0YmZcIiwgXCJNYWluLUJvbGRcIl0sIC8vIDAtOSBib2xkXG5bXCJcIiwgXCJcIiwgXCJcIl0sIC8vIDAtOSBkb3VibGUtc3RydWNrLiBObyBLYVRlWCBmb250LlxuW1wibWF0aHNmXCIsIFwidGV4dHNmXCIsIFwiU2Fuc1NlcmlmLVJlZ3VsYXJcIl0sIC8vIDAtOSBzYW5zLXNlcmlmXG5bXCJtYXRoYm9sZHNmXCIsIFwidGV4dGJvbGRzZlwiLCBcIlNhbnNTZXJpZi1Cb2xkXCJdLCAvLyAwLTkgYm9sZCBzYW5zLXNlcmlmXG5bXCJtYXRodHRcIiwgXCJ0ZXh0dHRcIiwgXCJUeXBld3JpdGVyLVJlZ3VsYXJcIl1dO1xudmFyIHdpZGVfY2hhcmFjdGVyX3dpZGVDaGFyYWN0ZXJGb250ID0gZnVuY3Rpb24gd2lkZUNoYXJhY3RlckZvbnQod2lkZUNoYXIsIG1vZGUpIHtcbiAgLy8gSUUgZG9lc24ndCBzdXBwb3J0IGNvZGVQb2ludEF0KCkuIFNvIHdvcmsgd2l0aCB0aGUgc3Vycm9nYXRlIHBhaXIuXG4gIHZhciBIID0gd2lkZUNoYXIuY2hhckNvZGVBdCgwKTsgLy8gaGlnaCBzdXJyb2dhdGVcblxuICB2YXIgTCA9IHdpZGVDaGFyLmNoYXJDb2RlQXQoMSk7IC8vIGxvdyBzdXJyb2dhdGVcblxuICB2YXIgY29kZVBvaW50ID0gKEggLSAweEQ4MDApICogMHg0MDAgKyAoTCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB2YXIgaiA9IG1vZGUgPT09IFwibWF0aFwiID8gMCA6IDE7IC8vIGNvbHVtbiBpbmRleCBmb3IgQ1NTIGNsYXNzLlxuXG4gIGlmICgweDFENDAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPCAweDFENkE0KSB7XG4gICAgLy8gd2lkZUxhdGluTGV0dGVyRGF0YSBjb250YWlucyBleGFjdGx5IDI2IGNoYXJzIG9uIGVhY2ggcm93LlxuICAgIC8vIFNvIHdlIGNhbiBjYWxjdWxhdGUgdGhlIHJlbGV2YW50IHJvdy4gTm8gdHJhdmVyc2UgbmVjZXNzYXJ5LlxuICAgIHZhciBpID0gTWF0aC5mbG9vcigoY29kZVBvaW50IC0gMHgxRDQwMCkgLyAyNik7XG4gICAgcmV0dXJuIFt3aWRlTGF0aW5MZXR0ZXJEYXRhW2ldWzJdLCB3aWRlTGF0aW5MZXR0ZXJEYXRhW2ldW2pdXTtcbiAgfSBlbHNlIGlmICgweDFEN0NFIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxRDdGRikge1xuICAgIC8vIE51bWVyYWxzLCB0ZW4gcGVyIHJvdy5cbiAgICB2YXIgX2kgPSBNYXRoLmZsb29yKChjb2RlUG9pbnQgLSAweDFEN0NFKSAvIDEwKTtcblxuICAgIHJldHVybiBbd2lkZU51bWVyYWxEYXRhW19pXVsyXSwgd2lkZU51bWVyYWxEYXRhW19pXVtqXV07XG4gIH0gZWxzZSBpZiAoY29kZVBvaW50ID09PSAweDFENkE1IHx8IGNvZGVQb2ludCA9PT0gMHgxRDZBNikge1xuICAgIC8vIGRvdGxlc3MgaSBvciBqXG4gICAgcmV0dXJuIFt3aWRlTGF0aW5MZXR0ZXJEYXRhWzBdWzJdLCB3aWRlTGF0aW5MZXR0ZXJEYXRhWzBdW2pdXTtcbiAgfSBlbHNlIGlmICgweDFENkE2IDwgY29kZVBvaW50ICYmIGNvZGVQb2ludCA8IDB4MUQ3Q0UpIHtcbiAgICAvLyBHcmVlayBsZXR0ZXJzLiBOb3Qgc3VwcG9ydGVkLCB5ZXQuXG4gICAgcmV0dXJuIFtcIlwiLCBcIlwiXTtcbiAgfSBlbHNlIHtcbiAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGFueSB3aWRlIGNoYXJhY3RlcnMgb3V0c2lkZSAxRDQwMOKAkzFEN0ZGLlxuICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlVuc3VwcG9ydGVkIGNoYXJhY3RlcjogXCIgKyB3aWRlQ2hhcik7XG4gIH1cbn07XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9PcHRpb25zLmpzXG4vKipcbiAqIFRoaXMgZmlsZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3B0aW9ucyB0aGF0IHRoZSBQYXJzZXIgY2Fycmllc1xuICogYXJvdW5kIHdpdGggaXQgd2hpbGUgcGFyc2luZy4gRGF0YSBpcyBoZWxkIGluIGFuIGBPcHRpb25zYCBvYmplY3QsIGFuZCB3aGVuXG4gKiByZWN1cnNpbmcsIGEgbmV3IGBPcHRpb25zYCBvYmplY3QgY2FuIGJlIGNyZWF0ZWQgd2l0aCB0aGUgYC53aXRoKmAgYW5kXG4gKiBgLnJlc2V0YCBmdW5jdGlvbnMuXG4gKi9cblxudmFyIHNpemVTdHlsZU1hcCA9IFsvLyBFYWNoIGVsZW1lbnQgY29udGFpbnMgW3RleHRzaXplLCBzY3JpcHRzaXplLCBzY3JpcHRzY3JpcHRzaXplXS5cbi8vIFRoZSBzaXplIG1hcHBpbmdzIGFyZSB0YWtlbiBmcm9tIFRlWCB3aXRoIFxcbm9ybWFsc2l6ZT0xMHB0LlxuWzEsIDEsIDFdLCAvLyBzaXplMTogWzUsIDUsIDVdICAgICAgICAgICAgICBcXHRpbnlcblsyLCAxLCAxXSwgLy8gc2l6ZTI6IFs2LCA1LCA1XVxuWzMsIDEsIDFdLCAvLyBzaXplMzogWzcsIDUsIDVdICAgICAgICAgICAgICBcXHNjcmlwdHNpemVcbls0LCAyLCAxXSwgLy8gc2l6ZTQ6IFs4LCA2LCA1XSAgICAgICAgICAgICAgXFxmb290bm90ZXNpemVcbls1LCAyLCAxXSwgLy8gc2l6ZTU6IFs5LCA2LCA1XSAgICAgICAgICAgICAgXFxzbWFsbFxuWzYsIDMsIDFdLCAvLyBzaXplNjogWzEwLCA3LCA1XSAgICAgICAgICAgICBcXG5vcm1hbHNpemVcbls3LCA0LCAyXSwgLy8gc2l6ZTc6IFsxMiwgOCwgNl0gICAgICAgICAgICAgXFxsYXJnZVxuWzgsIDYsIDNdLCAvLyBzaXplODogWzE0LjQsIDEwLCA3XSAgICAgICAgICBcXExhcmdlXG5bOSwgNywgNl0sIC8vIHNpemU5OiBbMTcuMjgsIDEyLCAxMF0gICAgICAgIFxcTEFSR0VcblsxMCwgOCwgN10sIC8vIHNpemUxMDogWzIwLjc0LCAxNC40LCAxMl0gICAgIFxcaHVnZVxuWzExLCAxMCwgOV1dO1xudmFyIHNpemVNdWx0aXBsaWVycyA9IFsvLyBmb250TWV0cmljcy5qczpnZXRHbG9iYWxNZXRyaWNzIGFsc28gdXNlcyBzaXplIGluZGV4ZXMsIHNvIGlmXG4vLyB5b3UgY2hhbmdlIHNpemUgaW5kZXhlcywgY2hhbmdlIHRoYXQgZnVuY3Rpb24uXG4wLjUsIDAuNiwgMC43LCAwLjgsIDAuOSwgMS4wLCAxLjIsIDEuNDQsIDEuNzI4LCAyLjA3NCwgMi40ODhdO1xuXG52YXIgc2l6ZUF0U3R5bGUgPSBmdW5jdGlvbiBzaXplQXRTdHlsZShzaXplLCBzdHlsZSkge1xuICByZXR1cm4gc3R5bGUuc2l6ZSA8IDIgPyBzaXplIDogc2l6ZVN0eWxlTWFwW3NpemUgLSAxXVtzdHlsZS5zaXplIC0gMV07XG59OyAvLyBJbiB0aGVzZSB0eXBlcywgXCJcIiAoZW1wdHkgc3RyaW5nKSBtZWFucyBcIm5vIGNoYW5nZVwiLlxuXG5cbi8qKlxuICogVGhpcyBpcyB0aGUgbWFpbiBvcHRpb25zIGNsYXNzLiBJdCBjb250YWlucyB0aGUgY3VycmVudCBzdHlsZSwgc2l6ZSwgY29sb3IsXG4gKiBhbmQgZm9udC5cbiAqXG4gKiBPcHRpb25zIG9iamVjdHMgc2hvdWxkIG5vdCBiZSBtb2RpZmllZC4gVG8gY3JlYXRlIGEgbmV3IE9wdGlvbnMgd2l0aFxuICogZGlmZmVyZW50IHByb3BlcnRpZXMsIGNhbGwgYSBgLmhhdmluZypgIG1ldGhvZC5cbiAqL1xudmFyIE9wdGlvbnNfT3B0aW9ucyA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIC8vIEEgZm9udCBmYW1pbHkgYXBwbGllcyB0byBhIGdyb3VwIG9mIGZvbnRzIChpLmUuIFNhbnNTZXJpZiksIHdoaWxlIGEgZm9udFxuICAvLyByZXByZXNlbnRzIGEgc3BlY2lmaWMgZm9udCAoaS5lLiBTYW5zU2VyaWYgQm9sZCkuXG4gIC8vIFNlZTogaHR0cHM6Ly90ZXguc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzIyMzUwL2RpZmZlcmVuY2UtYmV0d2Vlbi10ZXh0cm0tYW5kLW1hdGhybVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBzaXplIGluZGV4LlxuICAgKi9cbiAgZnVuY3Rpb24gT3B0aW9ucyhkYXRhKSB7XG4gICAgdGhpcy5zdHlsZSA9IHZvaWQgMDtcbiAgICB0aGlzLmNvbG9yID0gdm9pZCAwO1xuICAgIHRoaXMuc2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLnRleHRTaXplID0gdm9pZCAwO1xuICAgIHRoaXMucGhhbnRvbSA9IHZvaWQgMDtcbiAgICB0aGlzLmZvbnQgPSB2b2lkIDA7XG4gICAgdGhpcy5mb250RmFtaWx5ID0gdm9pZCAwO1xuICAgIHRoaXMuZm9udFdlaWdodCA9IHZvaWQgMDtcbiAgICB0aGlzLmZvbnRTaGFwZSA9IHZvaWQgMDtcbiAgICB0aGlzLnNpemVNdWx0aXBsaWVyID0gdm9pZCAwO1xuICAgIHRoaXMubWF4U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLm1pblJ1bGVUaGlja25lc3MgPSB2b2lkIDA7XG4gICAgdGhpcy5fZm9udE1ldHJpY3MgPSB2b2lkIDA7XG4gICAgdGhpcy5zdHlsZSA9IGRhdGEuc3R5bGU7XG4gICAgdGhpcy5jb2xvciA9IGRhdGEuY29sb3I7XG4gICAgdGhpcy5zaXplID0gZGF0YS5zaXplIHx8IE9wdGlvbnMuQkFTRVNJWkU7XG4gICAgdGhpcy50ZXh0U2l6ZSA9IGRhdGEudGV4dFNpemUgfHwgdGhpcy5zaXplO1xuICAgIHRoaXMucGhhbnRvbSA9ICEhZGF0YS5waGFudG9tO1xuICAgIHRoaXMuZm9udCA9IGRhdGEuZm9udCB8fCBcIlwiO1xuICAgIHRoaXMuZm9udEZhbWlseSA9IGRhdGEuZm9udEZhbWlseSB8fCBcIlwiO1xuICAgIHRoaXMuZm9udFdlaWdodCA9IGRhdGEuZm9udFdlaWdodCB8fCAnJztcbiAgICB0aGlzLmZvbnRTaGFwZSA9IGRhdGEuZm9udFNoYXBlIHx8ICcnO1xuICAgIHRoaXMuc2l6ZU11bHRpcGxpZXIgPSBzaXplTXVsdGlwbGllcnNbdGhpcy5zaXplIC0gMV07XG4gICAgdGhpcy5tYXhTaXplID0gZGF0YS5tYXhTaXplO1xuICAgIHRoaXMubWluUnVsZVRoaWNrbmVzcyA9IGRhdGEubWluUnVsZVRoaWNrbmVzcztcbiAgICB0aGlzLl9mb250TWV0cmljcyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBvcHRpb25zIG9iamVjdCB3aXRoIHRoZSBzYW1lIHByb3BlcnRpZXMgYXMgXCJ0aGlzXCIuICBQcm9wZXJ0aWVzXG4gICAqIGZyb20gXCJleHRlbnNpb25cIiB3aWxsIGJlIGNvcGllZCB0byB0aGUgbmV3IG9wdGlvbnMgb2JqZWN0LlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBPcHRpb25zLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZXh0ZW5kID0gZnVuY3Rpb24gZXh0ZW5kKGV4dGVuc2lvbikge1xuICAgIHZhciBkYXRhID0ge1xuICAgICAgc3R5bGU6IHRoaXMuc3R5bGUsXG4gICAgICBzaXplOiB0aGlzLnNpemUsXG4gICAgICB0ZXh0U2l6ZTogdGhpcy50ZXh0U2l6ZSxcbiAgICAgIGNvbG9yOiB0aGlzLmNvbG9yLFxuICAgICAgcGhhbnRvbTogdGhpcy5waGFudG9tLFxuICAgICAgZm9udDogdGhpcy5mb250LFxuICAgICAgZm9udEZhbWlseTogdGhpcy5mb250RmFtaWx5LFxuICAgICAgZm9udFdlaWdodDogdGhpcy5mb250V2VpZ2h0LFxuICAgICAgZm9udFNoYXBlOiB0aGlzLmZvbnRTaGFwZSxcbiAgICAgIG1heFNpemU6IHRoaXMubWF4U2l6ZSxcbiAgICAgIG1pblJ1bGVUaGlja25lc3M6IHRoaXMubWluUnVsZVRoaWNrbmVzc1xuICAgIH07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gZXh0ZW5zaW9uKSB7XG4gICAgICBpZiAoZXh0ZW5zaW9uLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgZGF0YVtrZXldID0gZXh0ZW5zaW9uW2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBPcHRpb25zKGRhdGEpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gb3B0aW9ucyBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gc3R5bGUuIElmIGB0aGlzLnN0eWxlID09PSBzdHlsZWAsXG4gICAqIHJldHVybnMgYHRoaXNgLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYXZpbmdTdHlsZSA9IGZ1bmN0aW9uIGhhdmluZ1N0eWxlKHN0eWxlKSB7XG4gICAgaWYgKHRoaXMuc3R5bGUgPT09IHN0eWxlKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBzaXplOiBzaXplQXRTdHlsZSh0aGlzLnRleHRTaXplLCBzdHlsZSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJuIGFuIG9wdGlvbnMgb2JqZWN0IHdpdGggYSBjcmFtcGVkIHZlcnNpb24gb2YgdGhlIGN1cnJlbnQgc3R5bGUuIElmXG4gICAqIHRoZSBjdXJyZW50IHN0eWxlIGlzIGNyYW1wZWQsIHJldHVybnMgYHRoaXNgLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYXZpbmdDcmFtcGVkU3R5bGUgPSBmdW5jdGlvbiBoYXZpbmdDcmFtcGVkU3R5bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGF2aW5nU3R5bGUodGhpcy5zdHlsZS5jcmFtcCgpKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIGFuIG9wdGlvbnMgb2JqZWN0IHdpdGggdGhlIGdpdmVuIHNpemUgYW5kIGluIGF0IGxlYXN0IGBcXHRleHRzdHlsZWAuXG4gICAqIFJldHVybnMgYHRoaXNgIGlmIGFwcHJvcHJpYXRlLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYXZpbmdTaXplID0gZnVuY3Rpb24gaGF2aW5nU2l6ZShzaXplKSB7XG4gICAgaWYgKHRoaXMuc2l6ZSA9PT0gc2l6ZSAmJiB0aGlzLnRleHRTaXplID09PSBzaXplKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgICAgc3R5bGU6IHRoaXMuc3R5bGUudGV4dCgpLFxuICAgICAgICBzaXplOiBzaXplLFxuICAgICAgICB0ZXh0U2l6ZTogc2l6ZSxcbiAgICAgICAgc2l6ZU11bHRpcGxpZXI6IHNpemVNdWx0aXBsaWVyc1tzaXplIC0gMV1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogTGlrZSBgdGhpcy5oYXZpbmdTaXplKEJBU0VTSVpFKS5oYXZpbmdTdHlsZShzdHlsZSlgLiBJZiBgc3R5bGVgIGlzIG9taXR0ZWQsXG4gICAqIGNoYW5nZXMgdG8gYXQgbGVhc3QgYFxcdGV4dHN0eWxlYC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGF2aW5nQmFzZVN0eWxlID0gZnVuY3Rpb24gaGF2aW5nQmFzZVN0eWxlKHN0eWxlKSB7XG4gICAgc3R5bGUgPSBzdHlsZSB8fCB0aGlzLnN0eWxlLnRleHQoKTtcbiAgICB2YXIgd2FudFNpemUgPSBzaXplQXRTdHlsZShPcHRpb25zLkJBU0VTSVpFLCBzdHlsZSk7XG5cbiAgICBpZiAodGhpcy5zaXplID09PSB3YW50U2l6ZSAmJiB0aGlzLnRleHRTaXplID09PSBPcHRpb25zLkJBU0VTSVpFICYmIHRoaXMuc3R5bGUgPT09IHN0eWxlKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBzaXplOiB3YW50U2l6ZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIGVmZmVjdCBvZiBzaXppbmcgY2hhbmdlcyBzdWNoIGFzIFxcSHVnZS5cbiAgICogS2VlcCB0aGUgZWZmZWN0IG9mIHRoZSBjdXJyZW50IHN0eWxlLCBzdWNoIGFzIFxcc2NyaXB0c3R5bGUuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhdmluZ0Jhc2VTaXppbmcgPSBmdW5jdGlvbiBoYXZpbmdCYXNlU2l6aW5nKCkge1xuICAgIHZhciBzaXplO1xuXG4gICAgc3dpdGNoICh0aGlzLnN0eWxlLmlkKSB7XG4gICAgICBjYXNlIDQ6XG4gICAgICBjYXNlIDU6XG4gICAgICAgIHNpemUgPSAzOyAvLyBub3JtYWxzaXplIGluIHNjcmlwdHN0eWxlXG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNjpcbiAgICAgIGNhc2UgNzpcbiAgICAgICAgc2l6ZSA9IDE7IC8vIG5vcm1hbHNpemUgaW4gc2NyaXB0c2NyaXB0c3R5bGVcblxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgc2l6ZSA9IDY7XG4gICAgICAvLyBub3JtYWxzaXplIGluIHRleHRzdHlsZSBvciBkaXNwbGF5c3R5bGVcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5leHRlbmQoe1xuICAgICAgc3R5bGU6IHRoaXMuc3R5bGUudGV4dCgpLFxuICAgICAgc2l6ZTogc2l6ZVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgb3B0aW9ucyBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gY29sb3IuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLndpdGhDb2xvciA9IGZ1bmN0aW9uIHdpdGhDb2xvcihjb2xvcikge1xuICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICBjb2xvcjogY29sb3JcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG9wdGlvbnMgb2JqZWN0IHdpdGggXCJwaGFudG9tXCIgc2V0IHRvIHRydWUuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLndpdGhQaGFudG9tID0gZnVuY3Rpb24gd2l0aFBoYW50b20oKSB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgIHBoYW50b206IHRydWVcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBvcHRpb25zIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBtYXRoIGZvbnQgb3Igb2xkIHRleHQgZm9udC5cbiAgICogQHR5cGUge1t0eXBlXX1cbiAgICovXG4gIDtcblxuICBfcHJvdG8ud2l0aEZvbnQgPSBmdW5jdGlvbiB3aXRoRm9udChmb250KSB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgIGZvbnQ6IGZvbnRcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG9wdGlvbnMgb2JqZWN0cyB3aXRoIHRoZSBnaXZlbiBmb250RmFtaWx5LlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by53aXRoVGV4dEZvbnRGYW1pbHkgPSBmdW5jdGlvbiB3aXRoVGV4dEZvbnRGYW1pbHkoZm9udEZhbWlseSkge1xuICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICBmb250RmFtaWx5OiBmb250RmFtaWx5LFxuICAgICAgZm9udDogXCJcIlxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IG9wdGlvbnMgb2JqZWN0IHdpdGggdGhlIGdpdmVuIGZvbnQgd2VpZ2h0XG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLndpdGhUZXh0Rm9udFdlaWdodCA9IGZ1bmN0aW9uIHdpdGhUZXh0Rm9udFdlaWdodChmb250V2VpZ2h0KSB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgIGZvbnRXZWlnaHQ6IGZvbnRXZWlnaHQsXG4gICAgICBmb250OiBcIlwiXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgb3B0aW9ucyBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gZm9udCB3ZWlnaHRcbiAgICovXG4gIDtcblxuICBfcHJvdG8ud2l0aFRleHRGb250U2hhcGUgPSBmdW5jdGlvbiB3aXRoVGV4dEZvbnRTaGFwZShmb250U2hhcGUpIHtcbiAgICByZXR1cm4gdGhpcy5leHRlbmQoe1xuICAgICAgZm9udFNoYXBlOiBmb250U2hhcGUsXG4gICAgICBmb250OiBcIlwiXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgQ1NTIHNpemluZyBjbGFzc2VzIHJlcXVpcmVkIHRvIHN3aXRjaCBmcm9tIGVuY2xvc2luZyBvcHRpb25zXG4gICAqIGBvbGRPcHRpb25zYCB0byBgdGhpc2AuIFJldHVybnMgYW4gYXJyYXkgb2YgY2xhc3Nlcy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uc2l6aW5nQ2xhc3NlcyA9IGZ1bmN0aW9uIHNpemluZ0NsYXNzZXMob2xkT3B0aW9ucykge1xuICAgIGlmIChvbGRPcHRpb25zLnNpemUgIT09IHRoaXMuc2l6ZSkge1xuICAgICAgcmV0dXJuIFtcInNpemluZ1wiLCBcInJlc2V0LXNpemVcIiArIG9sZE9wdGlvbnMuc2l6ZSwgXCJzaXplXCIgKyB0aGlzLnNpemVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIENTUyBzaXppbmcgY2xhc3NlcyByZXF1aXJlZCB0byBzd2l0Y2ggdG8gdGhlIGJhc2Ugc2l6ZS4gTGlrZVxuICAgKiBgdGhpcy5oYXZpbmdTaXplKEJBU0VTSVpFKS5zaXppbmdDbGFzc2VzKHRoaXMpYC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uYmFzZVNpemluZ0NsYXNzZXMgPSBmdW5jdGlvbiBiYXNlU2l6aW5nQ2xhc3NlcygpIHtcbiAgICBpZiAodGhpcy5zaXplICE9PSBPcHRpb25zLkJBU0VTSVpFKSB7XG4gICAgICByZXR1cm4gW1wic2l6aW5nXCIsIFwicmVzZXQtc2l6ZVwiICsgdGhpcy5zaXplLCBcInNpemVcIiArIE9wdGlvbnMuQkFTRVNJWkVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGZvbnQgbWV0cmljcyBmb3IgdGhpcyBzaXplLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5mb250TWV0cmljcyA9IGZ1bmN0aW9uIGZvbnRNZXRyaWNzKCkge1xuICAgIGlmICghdGhpcy5fZm9udE1ldHJpY3MpIHtcbiAgICAgIHRoaXMuX2ZvbnRNZXRyaWNzID0gZ2V0R2xvYmFsTWV0cmljcyh0aGlzLnNpemUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9mb250TWV0cmljcztcbiAgfVxuICAvKipcbiAgICogR2V0cyB0aGUgQ1NTIGNvbG9yIG9mIHRoZSBjdXJyZW50IG9wdGlvbnMgb2JqZWN0XG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmdldENvbG9yID0gZnVuY3Rpb24gZ2V0Q29sb3IoKSB7XG4gICAgaWYgKHRoaXMucGhhbnRvbSkge1xuICAgICAgcmV0dXJuIFwidHJhbnNwYXJlbnRcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuY29sb3I7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBPcHRpb25zO1xufSgpO1xuXG5PcHRpb25zX09wdGlvbnMuQkFTRVNJWkUgPSA2O1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX09wdGlvbnMgPSAoT3B0aW9uc19PcHRpb25zKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3VuaXRzLmpzXG4vKipcbiAqIFRoaXMgZmlsZSBkb2VzIGNvbnZlcnNpb24gYmV0d2VlbiB1bml0cy4gIEluIHBhcnRpY3VsYXIsIGl0IHByb3ZpZGVzXG4gKiBjYWxjdWxhdGVTaXplIHRvIGNvbnZlcnQgb3RoZXIgdW5pdHMgaW50byBlbXMuXG4gKi9cblxuIC8vIFRoaXMgdGFibGUgZ2l2ZXMgdGhlIG51bWJlciBvZiBUZVggcHRzIGluIG9uZSBvZiBlYWNoICphYnNvbHV0ZSogVGVYIHVuaXQuXG4vLyBUaHVzLCBtdWx0aXBseWluZyBhIGxlbmd0aCBieSB0aGlzIG51bWJlciBjb252ZXJ0cyB0aGUgbGVuZ3RoIGZyb20gdW5pdHNcbi8vIGludG8gcHRzLiAgRGl2aWRpbmcgdGhlIHJlc3VsdCBieSBwdFBlckVtIGdpdmVzIHRoZSBudW1iZXIgb2YgZW1zXG4vLyAqYXNzdW1pbmcqIGEgZm9udCBzaXplIG9mIHB0UGVyRW0gKG5vcm1hbCBzaXplLCBub3JtYWwgc3R5bGUpLlxuXG52YXIgcHRQZXJVbml0ID0ge1xuICAvLyBodHRwczovL2VuLndpa2lib29rcy5vcmcvd2lraS9MYVRlWC9MZW5ndGhzIGFuZFxuICAvLyBodHRwczovL3RleC5zdGFja2V4Y2hhbmdlLmNvbS9hLzgyNjNcbiAgXCJwdFwiOiAxLFxuICAvLyBUZVggcG9pbnRcbiAgXCJtbVwiOiA3MjI3IC8gMjU0MCxcbiAgLy8gbWlsbGltZXRlclxuICBcImNtXCI6IDcyMjcgLyAyNTQsXG4gIC8vIGNlbnRpbWV0ZXJcbiAgXCJpblwiOiA3Mi4yNyxcbiAgLy8gaW5jaFxuICBcImJwXCI6IDgwMyAvIDgwMCxcbiAgLy8gYmlnIChQb3N0U2NyaXB0KSBwb2ludHNcbiAgXCJwY1wiOiAxMixcbiAgLy8gcGljYVxuICBcImRkXCI6IDEyMzggLyAxMTU3LFxuICAvLyBkaWRvdFxuICBcImNjXCI6IDE0ODU2IC8gMTE1NyxcbiAgLy8gY2ljZXJvICgxMiBkaWRvdClcbiAgXCJuZFwiOiA2ODUgLyA2NDIsXG4gIC8vIG5ldyBkaWRvdFxuICBcIm5jXCI6IDEzNzAgLyAxMDcsXG4gIC8vIG5ldyBjaWNlcm8gKDEyIG5ldyBkaWRvdClcbiAgXCJzcFwiOiAxIC8gNjU1MzYsXG4gIC8vIHNjYWxlZCBwb2ludCAoVGVYJ3MgaW50ZXJuYWwgc21hbGxlc3QgdW5pdClcbiAgLy8gaHR0cHM6Ly90ZXguc3RhY2tleGNoYW5nZS5jb20vYS80MTM3MVxuICBcInB4XCI6IDgwMyAvIDgwMCAvLyBcXHBkZnB4ZGltZW4gZGVmYXVsdHMgdG8gMSBicCBpbiBwZGZUZVggYW5kIEx1YVRlWFxuXG59OyAvLyBEaWN0aW9uYXJ5IG9mIHJlbGF0aXZlIHVuaXRzLCBmb3IgZmFzdCB2YWxpZGl0eSB0ZXN0aW5nLlxuXG52YXIgcmVsYXRpdmVVbml0ID0ge1xuICBcImV4XCI6IHRydWUsXG4gIFwiZW1cIjogdHJ1ZSxcbiAgXCJtdVwiOiB0cnVlXG59O1xuXG4vKipcbiAqIERldGVybWluZSB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgdW5pdCAoZWl0aGVyIGEgc3RyaW5nIGRlZmluaW5nIHRoZSB1bml0XG4gKiBvciBhIFwic2l6ZVwiIHBhcnNlIG5vZGUgY29udGFpbmluZyBhIHVuaXQgZmllbGQpIGlzIHZhbGlkLlxuICovXG52YXIgdmFsaWRVbml0ID0gZnVuY3Rpb24gdmFsaWRVbml0KHVuaXQpIHtcbiAgaWYgKHR5cGVvZiB1bml0ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgdW5pdCA9IHVuaXQudW5pdDtcbiAgfVxuXG4gIHJldHVybiB1bml0IGluIHB0UGVyVW5pdCB8fCB1bml0IGluIHJlbGF0aXZlVW5pdCB8fCB1bml0ID09PSBcImV4XCI7XG59O1xuLypcbiAqIENvbnZlcnQgYSBcInNpemVcIiBwYXJzZSBub2RlICh3aXRoIG51bWVyaWMgXCJudW1iZXJcIiBhbmQgc3RyaW5nIFwidW5pdFwiIGZpZWxkcyxcbiAqIGFzIHBhcnNlZCBieSBmdW5jdGlvbnMuanMgYXJnVHlwZSBcInNpemVcIikgaW50byBhIENTUyBlbSB2YWx1ZSBmb3IgdGhlXG4gKiBjdXJyZW50IHN0eWxlL3NjYWxlLiAgYG9wdGlvbnNgIGdpdmVzIHRoZSBjdXJyZW50IG9wdGlvbnMuXG4gKi9cblxudmFyIHVuaXRzX2NhbGN1bGF0ZVNpemUgPSBmdW5jdGlvbiBjYWxjdWxhdGVTaXplKHNpemVWYWx1ZSwgb3B0aW9ucykge1xuICB2YXIgc2NhbGU7XG5cbiAgaWYgKHNpemVWYWx1ZS51bml0IGluIHB0UGVyVW5pdCkge1xuICAgIC8vIEFic29sdXRlIHVuaXRzXG4gICAgc2NhbGUgPSBwdFBlclVuaXRbc2l6ZVZhbHVlLnVuaXRdIC8vIENvbnZlcnQgdW5pdCB0byBwdFxuICAgIC8gb3B0aW9ucy5mb250TWV0cmljcygpLnB0UGVyRW0gLy8gQ29udmVydCBwdCB0byBDU1MgZW1cbiAgICAvIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7IC8vIFVuc2NhbGUgdG8gbWFrZSBhYnNvbHV0ZSB1bml0c1xuICB9IGVsc2UgaWYgKHNpemVWYWx1ZS51bml0ID09PSBcIm11XCIpIHtcbiAgICAvLyBgbXVgIHVuaXRzIHNjYWxlIHdpdGggc2NyaXB0c3R5bGUvc2NyaXB0c2NyaXB0c3R5bGUuXG4gICAgc2NhbGUgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuY3NzRW1QZXJNdTtcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlciByZWxhdGl2ZSB1bml0cyBhbHdheXMgcmVmZXIgdG8gdGhlICp0ZXh0c3R5bGUqIGZvbnRcbiAgICAvLyBpbiB0aGUgY3VycmVudCBzaXplLlxuICAgIHZhciB1bml0T3B0aW9ucztcblxuICAgIGlmIChvcHRpb25zLnN0eWxlLmlzVGlnaHQoKSkge1xuICAgICAgLy8gaXNUaWdodCgpIG1lYW5zIGN1cnJlbnQgc3R5bGUgaXMgc2NyaXB0L3NjcmlwdHNjcmlwdC5cbiAgICAgIHVuaXRPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShvcHRpb25zLnN0eWxlLnRleHQoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuaXRPcHRpb25zID0gb3B0aW9ucztcbiAgICB9IC8vIFRPRE86IEluIFRlWCB0aGVzZSB1bml0cyBhcmUgcmVsYXRpdmUgdG8gdGhlIHF1YWQgb2YgdGhlIGN1cnJlbnRcbiAgICAvLyAqdGV4dCogZm9udCwgZS5nLiBjbXIxMC4gS2FUZVggaW5zdGVhZCB1c2VzIHZhbHVlcyBmcm9tIHRoZVxuICAgIC8vIGNvbXBhcmFibHktc2l6ZWQgKkNvbXB1dGVyIE1vZGVybiBzeW1ib2wqIGZvbnQuIEF0IDEwcHQsIHRoZXNlXG4gICAgLy8gbWF0Y2guIEF0IDdwdCBhbmQgNXB0LCB0aGV5IGRpZmZlcjogY21yNz0xLjEzODg5NCwgY21zeTc9MS4xNzA2NDE7XG4gICAgLy8gY21yNT0xLjM2MTEzMywgY21zeTU9MS40NzIyNDEuIENvbnNpZGVyICRcXHNjcmlwdHNpemUgYVxca2VybjFlbWIkLlxuICAgIC8vIFRlWCBcXHNob3dsaXN0cyBzaG93cyBhIGtlcm4gb2YgMS4xMzg4OSAqIGZvbnRzaXplO1xuICAgIC8vIEthVGVYIHNob3dzIGEga2VybiBvZiAxLjE3MSAqIGZvbnRzaXplLlxuXG5cbiAgICBpZiAoc2l6ZVZhbHVlLnVuaXQgPT09IFwiZXhcIikge1xuICAgICAgc2NhbGUgPSB1bml0T3B0aW9ucy5mb250TWV0cmljcygpLnhIZWlnaHQ7XG4gICAgfSBlbHNlIGlmIChzaXplVmFsdWUudW5pdCA9PT0gXCJlbVwiKSB7XG4gICAgICBzY2FsZSA9IHVuaXRPcHRpb25zLmZvbnRNZXRyaWNzKCkucXVhZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCB1bml0OiAnXCIgKyBzaXplVmFsdWUudW5pdCArIFwiJ1wiKTtcbiAgICB9XG5cbiAgICBpZiAodW5pdE9wdGlvbnMgIT09IG9wdGlvbnMpIHtcbiAgICAgIHNjYWxlICo9IHVuaXRPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gTWF0aC5taW4oc2l6ZVZhbHVlLm51bWJlciAqIHNjYWxlLCBvcHRpb25zLm1heFNpemUpO1xufTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2J1aWxkQ29tbW9uLmpzXG4vKiBlc2xpbnQgbm8tY29uc29sZTowICovXG5cbi8qKlxuICogVGhpcyBtb2R1bGUgY29udGFpbnMgZ2VuZXJhbCBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCBmb3IgYnVpbGRpbmdcbiAqIGRpZmZlcmVudCBraW5kcyBvZiBkb21UcmVlIG5vZGVzIGluIGEgY29uc2lzdGVudCBtYW5uZXIuXG4gKi9cblxuXG5cblxuXG5cblxuLy8gVGhlIGZvbGxvd2luZyBoYXZlIHRvIGJlIGxvYWRlZCBmcm9tIE1haW4tSXRhbGljIGZvbnQsIHVzaW5nIGNsYXNzIG1hdGhpdFxudmFyIG1hdGhpdExldHRlcnMgPSBbXCJcXFxcaW1hdGhcIiwgXCLEsVwiLCAvLyBkb3RsZXNzIGlcblwiXFxcXGptYXRoXCIsIFwiyLdcIiwgLy8gZG90bGVzcyBqXG5cIlxcXFxwb3VuZHNcIiwgXCJcXFxcbWF0aHN0ZXJsaW5nXCIsIFwiXFxcXHRleHRzdGVybGluZ1wiLCBcIsKjXCJdO1xuLyoqXG4gKiBMb29rcyB1cCB0aGUgZ2l2ZW4gc3ltYm9sIGluIGZvbnRNZXRyaWNzLCBhZnRlciBhcHBseWluZyBhbnkgc3ltYm9sXG4gKiByZXBsYWNlbWVudHMgZGVmaW5lZCBpbiBzeW1ib2wuanNcbiAqL1xuXG52YXIgYnVpbGRDb21tb25fbG9va3VwU3ltYm9sID0gZnVuY3Rpb24gbG9va3VwU3ltYm9sKHZhbHVlLCAvLyBUT0RPKCM5NjMpOiBVc2UgYSB1bmlvbiB0eXBlIGZvciB0aGlzLlxuZm9udE5hbWUsIG1vZGUpIHtcbiAgLy8gUmVwbGFjZSB0aGUgdmFsdWUgd2l0aCBpdHMgcmVwbGFjZWQgdmFsdWUgZnJvbSBzeW1ib2wuanNcbiAgaWYgKHNyY19zeW1ib2xzW21vZGVdW3ZhbHVlXSAmJiBzcmNfc3ltYm9sc1ttb2RlXVt2YWx1ZV0ucmVwbGFjZSkge1xuICAgIHZhbHVlID0gc3JjX3N5bWJvbHNbbW9kZV1bdmFsdWVdLnJlcGxhY2U7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBtZXRyaWNzOiBnZXRDaGFyYWN0ZXJNZXRyaWNzKHZhbHVlLCBmb250TmFtZSwgbW9kZSlcbiAgfTtcbn07XG4vKipcbiAqIE1ha2VzIGEgc3ltYm9sTm9kZSBhZnRlciB0cmFuc2xhdGlvbiB2aWEgdGhlIGxpc3Qgb2Ygc3ltYm9scyBpbiBzeW1ib2xzLmpzLlxuICogQ29ycmVjdGx5IHB1bGxzIG91dCBtZXRyaWNzIGZvciB0aGUgY2hhcmFjdGVyLCBhbmQgb3B0aW9uYWxseSB0YWtlcyBhIGxpc3Qgb2ZcbiAqIGNsYXNzZXMgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIG5vZGUuXG4gKlxuICogVE9ETzogbWFrZSBhcmd1bWVudCBvcmRlciBjbG9zZXIgdG8gbWFrZVNwYW5cbiAqIFRPRE86IGFkZCBhIHNlcGFyYXRlIGFyZ3VtZW50IGZvciBtYXRoIGNsYXNzIChlLmcuIGBtb3BgLCBgbWJpbmApLCB3aGljaFxuICogc2hvdWxkIGlmIHByZXNlbnQgY29tZSBmaXJzdCBpbiBgY2xhc3Nlc2AuXG4gKiBUT0RPKCM5NTMpOiBNYWtlIGBvcHRpb25zYCBtYW5kYXRvcnkgYW5kIGFsd2F5cyBwYXNzIGl0IGluLlxuICovXG5cblxudmFyIGJ1aWxkQ29tbW9uX21ha2VTeW1ib2wgPSBmdW5jdGlvbiBtYWtlU3ltYm9sKHZhbHVlLCBmb250TmFtZSwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcykge1xuICB2YXIgbG9va3VwID0gYnVpbGRDb21tb25fbG9va3VwU3ltYm9sKHZhbHVlLCBmb250TmFtZSwgbW9kZSk7XG4gIHZhciBtZXRyaWNzID0gbG9va3VwLm1ldHJpY3M7XG4gIHZhbHVlID0gbG9va3VwLnZhbHVlO1xuICB2YXIgc3ltYm9sTm9kZTtcblxuICBpZiAobWV0cmljcykge1xuICAgIHZhciBpdGFsaWMgPSBtZXRyaWNzLml0YWxpYztcblxuICAgIGlmIChtb2RlID09PSBcInRleHRcIiB8fCBvcHRpb25zICYmIG9wdGlvbnMuZm9udCA9PT0gXCJtYXRoaXRcIikge1xuICAgICAgaXRhbGljID0gMDtcbiAgICB9XG5cbiAgICBzeW1ib2xOb2RlID0gbmV3IGRvbVRyZWVfU3ltYm9sTm9kZSh2YWx1ZSwgbWV0cmljcy5oZWlnaHQsIG1ldHJpY3MuZGVwdGgsIGl0YWxpYywgbWV0cmljcy5za2V3LCBtZXRyaWNzLndpZHRoLCBjbGFzc2VzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBUT0RPKGVtaWx5KTogRmlndXJlIG91dCBhIGdvb2Qgd2F5IHRvIG9ubHkgcHJpbnQgdGhpcyBpbiBkZXZlbG9wbWVudFxuICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIk5vIGNoYXJhY3RlciBtZXRyaWNzIFwiICsgKFwiZm9yICdcIiArIHZhbHVlICsgXCInIGluIHN0eWxlICdcIiArIGZvbnROYW1lICsgXCInIGFuZCBtb2RlICdcIiArIG1vZGUgKyBcIidcIikpO1xuICAgIHN5bWJvbE5vZGUgPSBuZXcgZG9tVHJlZV9TeW1ib2xOb2RlKHZhbHVlLCAwLCAwLCAwLCAwLCAwLCBjbGFzc2VzKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgc3ltYm9sTm9kZS5tYXhGb250U2l6ZSA9IG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG5cbiAgICBpZiAob3B0aW9ucy5zdHlsZS5pc1RpZ2h0KCkpIHtcbiAgICAgIHN5bWJvbE5vZGUuY2xhc3Nlcy5wdXNoKFwibXRpZ2h0XCIpO1xuICAgIH1cblxuICAgIHZhciBjb2xvciA9IG9wdGlvbnMuZ2V0Q29sb3IoKTtcblxuICAgIGlmIChjb2xvcikge1xuICAgICAgc3ltYm9sTm9kZS5zdHlsZS5jb2xvciA9IGNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW1ib2xOb2RlO1xufTtcbi8qKlxuICogTWFrZXMgYSBzeW1ib2wgaW4gTWFpbi1SZWd1bGFyIG9yIEFNUy1SZWd1bGFyLlxuICogVXNlZCBmb3IgcmVsLCBiaW4sIG9wZW4sIGNsb3NlLCBpbm5lciwgYW5kIHB1bmN0LlxuICovXG5cblxudmFyIGJ1aWxkQ29tbW9uX21hdGhzeW0gPSBmdW5jdGlvbiBtYXRoc3ltKHZhbHVlLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzKSB7XG4gIGlmIChjbGFzc2VzID09PSB2b2lkIDApIHtcbiAgICBjbGFzc2VzID0gW107XG4gIH1cblxuICAvLyBEZWNpZGUgd2hhdCBmb250IHRvIHJlbmRlciB0aGUgc3ltYm9sIGluIGJ5IGl0cyBlbnRyeSBpbiB0aGUgc3ltYm9sc1xuICAvLyB0YWJsZS5cbiAgLy8gSGF2ZSBhIHNwZWNpYWwgY2FzZSBmb3Igd2hlbiB0aGUgdmFsdWUgPSBcXCBiZWNhdXNlIHRoZSBcXCBpcyB1c2VkIGFzIGFcbiAgLy8gdGV4dG9yZCBpbiB1bnN1cHBvcnRlZCBjb21tYW5kIGVycm9ycyBidXQgY2Fubm90IGJlIHBhcnNlZCBhcyBhIHJlZ3VsYXJcbiAgLy8gdGV4dCBvcmRpbmFsIGFuZCBpcyB0aGVyZWZvcmUgbm90IHByZXNlbnQgYXMgYSBzeW1ib2wgaW4gdGhlIHN5bWJvbHNcbiAgLy8gdGFibGUgZm9yIHRleHQsIGFzIHdlbGwgYXMgYSBzcGVjaWFsIGNhc2UgZm9yIGJvbGRzeW1ib2wgYmVjYXVzZSBpdFxuICAvLyBjYW4gYmUgdXNlZCBmb3IgYm9sZCArIGFuZCAtXG4gIGlmIChvcHRpb25zLmZvbnQgPT09IFwiYm9sZHN5bWJvbFwiICYmIGJ1aWxkQ29tbW9uX2xvb2t1cFN5bWJvbCh2YWx1ZSwgXCJNYWluLUJvbGRcIiwgbW9kZSkubWV0cmljcykge1xuICAgIHJldHVybiBidWlsZENvbW1vbl9tYWtlU3ltYm9sKHZhbHVlLCBcIk1haW4tQm9sZFwiLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzLmNvbmNhdChbXCJtYXRoYmZcIl0pKTtcbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gXCJcXFxcXCIgfHwgc3JjX3N5bWJvbHNbbW9kZV1bdmFsdWVdLmZvbnQgPT09IFwibWFpblwiKSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uX21ha2VTeW1ib2wodmFsdWUsIFwiTWFpbi1SZWd1bGFyXCIsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBidWlsZENvbW1vbl9tYWtlU3ltYm9sKHZhbHVlLCBcIkFNUy1SZWd1bGFyXCIsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KFtcImFtc3JtXCJdKSk7XG4gIH1cbn07XG4vKipcbiAqIERldGVybWluZXMgd2hpY2ggb2YgdGhlIHR3byBmb250IG5hbWVzIChNYWluLUl0YWxpYyBhbmQgTWF0aC1JdGFsaWMpIGFuZFxuICogY29ycmVzcG9uZGluZyBzdHlsZSB0YWdzIChtYWluZGVmYXVsdCBvciBtYXRoaXQpIHRvIHVzZSBmb3IgZGVmYXVsdCBtYXRoIGZvbnQsXG4gKiBkZXBlbmRpbmcgb24gdGhlIHN5bWJvbC5cbiAqL1xuXG5cbnZhciBidWlsZENvbW1vbl9tYXRoZGVmYXVsdCA9IGZ1bmN0aW9uIG1hdGhkZWZhdWx0KHZhbHVlLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzKSB7XG4gIGlmICgvWzAtOV0vLnRlc3QodmFsdWUuY2hhckF0KDApKSB8fCAvLyBnbHlwaHMgZm9yIFxcaW1hdGggYW5kIFxcam1hdGggZG8gbm90IGV4aXN0IGluIE1hdGgtSXRhbGljIHNvIHdlXG4gIC8vIG5lZWQgdG8gdXNlIE1haW4tSXRhbGljIGluc3RlYWRcbiAgdXRpbHMuY29udGFpbnMobWF0aGl0TGV0dGVycywgdmFsdWUpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvbnROYW1lOiBcIk1haW4tSXRhbGljXCIsXG4gICAgICBmb250Q2xhc3M6IFwibWF0aGl0XCJcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICBmb250TmFtZTogXCJNYXRoLUl0YWxpY1wiLFxuICAgICAgZm9udENsYXNzOiBcIm1hdGhkZWZhdWx0XCJcbiAgICB9O1xuICB9XG59O1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoaWNoIG9mIHRoZSBmb250IG5hbWVzIChNYWluLUl0YWxpYywgTWF0aC1JdGFsaWMsIGFuZCBDYWxpZ3JhcGhpYylcbiAqIGFuZCBjb3JyZXNwb25kaW5nIHN0eWxlIHRhZ3MgKG1hdGhpdCwgbWF0aGRlZmF1bHQsIG9yIG1hdGhjYWwpIHRvIHVzZSBmb3IgZm9udFxuICogXCJtYXRobm9ybWFsXCIsIGRlcGVuZGluZyBvbiB0aGUgc3ltYm9sLiAgVXNlIHRoaXMgZnVuY3Rpb24gaW5zdGVhZCBvZiBmb250TWFwIGZvclxuICogZm9udCBcIm1hdGhub3JtYWxcIi5cbiAqL1xuXG5cbnZhciBidWlsZENvbW1vbl9tYXRobm9ybWFsID0gZnVuY3Rpb24gbWF0aG5vcm1hbCh2YWx1ZSwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcykge1xuICBpZiAodXRpbHMuY29udGFpbnMobWF0aGl0TGV0dGVycywgdmFsdWUpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvbnROYW1lOiBcIk1haW4tSXRhbGljXCIsXG4gICAgICBmb250Q2xhc3M6IFwibWF0aGl0XCJcbiAgICB9O1xuICB9IGVsc2UgaWYgKC9bMC05XS8udGVzdCh2YWx1ZS5jaGFyQXQoMCkpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvbnROYW1lOiBcIkNhbGlncmFwaGljLVJlZ3VsYXJcIixcbiAgICAgIGZvbnRDbGFzczogXCJtYXRoY2FsXCJcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICBmb250TmFtZTogXCJNYXRoLUl0YWxpY1wiLFxuICAgICAgZm9udENsYXNzOiBcIm1hdGhkZWZhdWx0XCJcbiAgICB9O1xuICB9XG59O1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoaWNoIG9mIHRoZSB0d28gZm9udCBuYW1lcyAoTWFpbi1Cb2xkIGFuZCBNYXRoLUJvbGRJdGFsaWMpIGFuZFxuICogY29ycmVzcG9uZGluZyBzdHlsZSB0YWdzIChtYXRoYmYgb3IgYm9sZHN5bWJvbCkgdG8gdXNlIGZvciBmb250IFwiYm9sZHN5bWJvbFwiLFxuICogZGVwZW5kaW5nIG9uIHRoZSBzeW1ib2wuICBVc2UgdGhpcyBmdW5jdGlvbiBpbnN0ZWFkIG9mIGZvbnRNYXAgZm9yIGZvbnRcbiAqIFwiYm9sZHN5bWJvbFwiLlxuICovXG5cblxudmFyIGJvbGRzeW1ib2wgPSBmdW5jdGlvbiBib2xkc3ltYm9sKHZhbHVlLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzKSB7XG4gIGlmIChidWlsZENvbW1vbl9sb29rdXBTeW1ib2wodmFsdWUsIFwiTWF0aC1Cb2xkSXRhbGljXCIsIG1vZGUpLm1ldHJpY3MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9udE5hbWU6IFwiTWF0aC1Cb2xkSXRhbGljXCIsXG4gICAgICBmb250Q2xhc3M6IFwiYm9sZHN5bWJvbFwiXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBTb21lIGdseXBocyBkbyBub3QgZXhpc3QgaW4gTWF0aC1Cb2xkSXRhbGljIHNvIHdlIG5lZWQgdG8gdXNlXG4gICAgLy8gTWFpbi1Cb2xkIGluc3RlYWQuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZvbnROYW1lOiBcIk1haW4tQm9sZFwiLFxuICAgICAgZm9udENsYXNzOiBcIm1hdGhiZlwiXG4gICAgfTtcbiAgfVxufTtcbi8qKlxuICogTWFrZXMgZWl0aGVyIGEgbWF0aG9yZCBvciB0ZXh0b3JkIGluIHRoZSBjb3JyZWN0IGZvbnQgYW5kIGNvbG9yLlxuICovXG5cblxudmFyIGJ1aWxkQ29tbW9uX21ha2VPcmQgPSBmdW5jdGlvbiBtYWtlT3JkKGdyb3VwLCBvcHRpb25zLCB0eXBlKSB7XG4gIHZhciBtb2RlID0gZ3JvdXAubW9kZTtcbiAgdmFyIHRleHQgPSBncm91cC50ZXh0O1xuICB2YXIgY2xhc3NlcyA9IFtcIm1vcmRcIl07IC8vIE1hdGggbW9kZSBvciBPbGQgZm9udCAoaS5lLiBcXHJtKVxuXG4gIHZhciBpc0ZvbnQgPSBtb2RlID09PSBcIm1hdGhcIiB8fCBtb2RlID09PSBcInRleHRcIiAmJiBvcHRpb25zLmZvbnQ7XG4gIHZhciBmb250T3JGYW1pbHkgPSBpc0ZvbnQgPyBvcHRpb25zLmZvbnQgOiBvcHRpb25zLmZvbnRGYW1pbHk7XG5cbiAgaWYgKHRleHQuY2hhckNvZGVBdCgwKSA9PT0gMHhEODM1KSB7XG4gICAgLy8gc3Vycm9nYXRlIHBhaXJzIGdldCBzcGVjaWFsIHRyZWF0bWVudFxuICAgIHZhciBfd2lkZUNoYXJhY3RlckZvbnQgPSB3aWRlX2NoYXJhY3Rlcl93aWRlQ2hhcmFjdGVyRm9udCh0ZXh0LCBtb2RlKSxcbiAgICAgICAgd2lkZUZvbnROYW1lID0gX3dpZGVDaGFyYWN0ZXJGb250WzBdLFxuICAgICAgICB3aWRlRm9udENsYXNzID0gX3dpZGVDaGFyYWN0ZXJGb250WzFdO1xuXG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uX21ha2VTeW1ib2wodGV4dCwgd2lkZUZvbnROYW1lLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzLmNvbmNhdCh3aWRlRm9udENsYXNzKSk7XG4gIH0gZWxzZSBpZiAoZm9udE9yRmFtaWx5KSB7XG4gICAgdmFyIGZvbnROYW1lO1xuICAgIHZhciBmb250Q2xhc3NlcztcblxuICAgIGlmIChmb250T3JGYW1pbHkgPT09IFwiYm9sZHN5bWJvbFwiIHx8IGZvbnRPckZhbWlseSA9PT0gXCJtYXRobm9ybWFsXCIpIHtcbiAgICAgIHZhciBmb250RGF0YSA9IGZvbnRPckZhbWlseSA9PT0gXCJib2xkc3ltYm9sXCIgPyBib2xkc3ltYm9sKHRleHQsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMpIDogYnVpbGRDb21tb25fbWF0aG5vcm1hbCh0ZXh0LCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzKTtcbiAgICAgIGZvbnROYW1lID0gZm9udERhdGEuZm9udE5hbWU7XG4gICAgICBmb250Q2xhc3NlcyA9IFtmb250RGF0YS5mb250Q2xhc3NdO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuY29udGFpbnMobWF0aGl0TGV0dGVycywgdGV4dCkpIHtcbiAgICAgIGZvbnROYW1lID0gXCJNYWluLUl0YWxpY1wiO1xuICAgICAgZm9udENsYXNzZXMgPSBbXCJtYXRoaXRcIl07XG4gICAgfSBlbHNlIGlmIChpc0ZvbnQpIHtcbiAgICAgIGZvbnROYW1lID0gZm9udE1hcFtmb250T3JGYW1pbHldLmZvbnROYW1lO1xuICAgICAgZm9udENsYXNzZXMgPSBbZm9udE9yRmFtaWx5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9udE5hbWUgPSByZXRyaWV2ZVRleHRGb250TmFtZShmb250T3JGYW1pbHksIG9wdGlvbnMuZm9udFdlaWdodCwgb3B0aW9ucy5mb250U2hhcGUpO1xuICAgICAgZm9udENsYXNzZXMgPSBbZm9udE9yRmFtaWx5LCBvcHRpb25zLmZvbnRXZWlnaHQsIG9wdGlvbnMuZm9udFNoYXBlXTtcbiAgICB9XG5cbiAgICBpZiAoYnVpbGRDb21tb25fbG9va3VwU3ltYm9sKHRleHQsIGZvbnROYW1lLCBtb2RlKS5tZXRyaWNzKSB7XG4gICAgICByZXR1cm4gYnVpbGRDb21tb25fbWFrZVN5bWJvbCh0ZXh0LCBmb250TmFtZSwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcy5jb25jYXQoZm9udENsYXNzZXMpKTtcbiAgICB9IGVsc2UgaWYgKGxpZ2F0dXJlcy5oYXNPd25Qcm9wZXJ0eSh0ZXh0KSAmJiBmb250TmFtZS5zdWJzdHIoMCwgMTApID09PSBcIlR5cGV3cml0ZXJcIikge1xuICAgICAgLy8gRGVjb25zdHJ1Y3QgbGlnYXR1cmVzIGluIG1vbm9zcGFjZSBmb250cyAoXFx0ZXh0dHQsIFxcdHQpLlxuICAgICAgdmFyIHBhcnRzID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBwYXJ0cy5wdXNoKGJ1aWxkQ29tbW9uX21ha2VTeW1ib2wodGV4dFtpXSwgZm9udE5hbWUsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KGZvbnRDbGFzc2VzKSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYnVpbGRDb21tb25fbWFrZUZyYWdtZW50KHBhcnRzKTtcbiAgICB9XG4gIH0gLy8gTWFrZXMgYSBzeW1ib2wgaW4gdGhlIGRlZmF1bHQgZm9udCBmb3IgbWF0aG9yZHMgYW5kIHRleHRvcmRzLlxuXG5cbiAgaWYgKHR5cGUgPT09IFwibWF0aG9yZFwiKSB7XG4gICAgdmFyIGZvbnRMb29rdXAgPSBidWlsZENvbW1vbl9tYXRoZGVmYXVsdCh0ZXh0LCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb25fbWFrZVN5bWJvbCh0ZXh0LCBmb250TG9va3VwLmZvbnROYW1lLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzLmNvbmNhdChbZm9udExvb2t1cC5mb250Q2xhc3NdKSk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJ0ZXh0b3JkXCIpIHtcbiAgICB2YXIgZm9udCA9IHNyY19zeW1ib2xzW21vZGVdW3RleHRdICYmIHNyY19zeW1ib2xzW21vZGVdW3RleHRdLmZvbnQ7XG5cbiAgICBpZiAoZm9udCA9PT0gXCJhbXNcIikge1xuICAgICAgdmFyIF9mb250TmFtZSA9IHJldHJpZXZlVGV4dEZvbnROYW1lKFwiYW1zcm1cIiwgb3B0aW9ucy5mb250V2VpZ2h0LCBvcHRpb25zLmZvbnRTaGFwZSk7XG5cbiAgICAgIHJldHVybiBidWlsZENvbW1vbl9tYWtlU3ltYm9sKHRleHQsIF9mb250TmFtZSwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcy5jb25jYXQoXCJhbXNybVwiLCBvcHRpb25zLmZvbnRXZWlnaHQsIG9wdGlvbnMuZm9udFNoYXBlKSk7XG4gICAgfSBlbHNlIGlmIChmb250ID09PSBcIm1haW5cIiB8fCAhZm9udCkge1xuICAgICAgdmFyIF9mb250TmFtZTIgPSByZXRyaWV2ZVRleHRGb250TmFtZShcInRleHRybVwiLCBvcHRpb25zLmZvbnRXZWlnaHQsIG9wdGlvbnMuZm9udFNoYXBlKTtcblxuICAgICAgcmV0dXJuIGJ1aWxkQ29tbW9uX21ha2VTeW1ib2wodGV4dCwgX2ZvbnROYW1lMiwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcy5jb25jYXQob3B0aW9ucy5mb250V2VpZ2h0LCBvcHRpb25zLmZvbnRTaGFwZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmb250cyBhZGRlZCBieSBwbHVnaW5zXG4gICAgICB2YXIgX2ZvbnROYW1lMyA9IHJldHJpZXZlVGV4dEZvbnROYW1lKGZvbnQsIG9wdGlvbnMuZm9udFdlaWdodCwgb3B0aW9ucy5mb250U2hhcGUpOyAvLyBXZSBhZGQgZm9udCBuYW1lIGFzIGEgY3NzIGNsYXNzXG5cblxuICAgICAgcmV0dXJuIGJ1aWxkQ29tbW9uX21ha2VTeW1ib2wodGV4dCwgX2ZvbnROYW1lMywgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcy5jb25jYXQoX2ZvbnROYW1lMywgb3B0aW9ucy5mb250V2VpZ2h0LCBvcHRpb25zLmZvbnRTaGFwZSkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmV4cGVjdGVkIHR5cGU6IFwiICsgdHlwZSArIFwiIGluIG1ha2VPcmRcIik7XG4gIH1cbn07XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBzdWJzZXF1ZW50IHN5bWJvbE5vZGVzIGhhdmUgdGhlIHNhbWUgY2xhc3Nlcywgc2tldywgbWF4Rm9udCxcbiAqIGFuZCBzdHlsZXMuXG4gKi9cblxuXG52YXIgYnVpbGRDb21tb25fY2FuQ29tYmluZSA9IGZ1bmN0aW9uIGNhbkNvbWJpbmUocHJldiwgbmV4dCkge1xuICBpZiAoY3JlYXRlQ2xhc3MocHJldi5jbGFzc2VzKSAhPT0gY3JlYXRlQ2xhc3MobmV4dC5jbGFzc2VzKSB8fCBwcmV2LnNrZXcgIT09IG5leHQuc2tldyB8fCBwcmV2Lm1heEZvbnRTaXplICE9PSBuZXh0Lm1heEZvbnRTaXplKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIgc3R5bGUgaW4gcHJldi5zdHlsZSkge1xuICAgIGlmIChwcmV2LnN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlKSAmJiBwcmV2LnN0eWxlW3N0eWxlXSAhPT0gbmV4dC5zdHlsZVtzdHlsZV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBfc3R5bGUgaW4gbmV4dC5zdHlsZSkge1xuICAgIGlmIChuZXh0LnN0eWxlLmhhc093blByb3BlcnR5KF9zdHlsZSkgJiYgcHJldi5zdHlsZVtfc3R5bGVdICE9PSBuZXh0LnN0eWxlW19zdHlsZV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG4vKipcbiAqIENvbWJpbmUgY29uc2VxdWV0aXZlIGRvbVRyZWUuc3ltYm9sTm9kZXMgaW50byBhIHNpbmdsZSBzeW1ib2xOb2RlLlxuICogTm90ZTogdGhpcyBmdW5jdGlvbiBtdXRhdGVzIHRoZSBhcmd1bWVudC5cbiAqL1xuXG5cbnZhciBidWlsZENvbW1vbl90cnlDb21iaW5lQ2hhcnMgPSBmdW5jdGlvbiB0cnlDb21iaW5lQ2hhcnMoY2hhcnMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICB2YXIgcHJldiA9IGNoYXJzW2ldO1xuICAgIHZhciBuZXh0ID0gY2hhcnNbaSArIDFdO1xuXG4gICAgaWYgKHByZXYgaW5zdGFuY2VvZiBkb21UcmVlX1N5bWJvbE5vZGUgJiYgbmV4dCBpbnN0YW5jZW9mIGRvbVRyZWVfU3ltYm9sTm9kZSAmJiBidWlsZENvbW1vbl9jYW5Db21iaW5lKHByZXYsIG5leHQpKSB7XG4gICAgICBwcmV2LnRleHQgKz0gbmV4dC50ZXh0O1xuICAgICAgcHJldi5oZWlnaHQgPSBNYXRoLm1heChwcmV2LmhlaWdodCwgbmV4dC5oZWlnaHQpO1xuICAgICAgcHJldi5kZXB0aCA9IE1hdGgubWF4KHByZXYuZGVwdGgsIG5leHQuZGVwdGgpOyAvLyBVc2UgdGhlIGxhc3QgY2hhcmFjdGVyJ3MgaXRhbGljIGNvcnJlY3Rpb24gc2luY2Ugd2UgdXNlXG4gICAgICAvLyBpdCB0byBhZGQgcGFkZGluZyB0byB0aGUgcmlnaHQgb2YgdGhlIHNwYW4gY3JlYXRlZCBmcm9tXG4gICAgICAvLyB0aGUgY29tYmluZWQgY2hhcmFjdGVycy5cblxuICAgICAgcHJldi5pdGFsaWMgPSBuZXh0Lml0YWxpYztcbiAgICAgIGNoYXJzLnNwbGljZShpICsgMSwgMSk7XG4gICAgICBpLS07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNoYXJzO1xufTtcbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBoZWlnaHQsIGRlcHRoLCBhbmQgbWF4Rm9udFNpemUgb2YgYW4gZWxlbWVudCBiYXNlZCBvbiBpdHNcbiAqIGNoaWxkcmVuLlxuICovXG5cblxudmFyIHNpemVFbGVtZW50RnJvbUNoaWxkcmVuID0gZnVuY3Rpb24gc2l6ZUVsZW1lbnRGcm9tQ2hpbGRyZW4oZWxlbSkge1xuICB2YXIgaGVpZ2h0ID0gMDtcbiAgdmFyIGRlcHRoID0gMDtcbiAgdmFyIG1heEZvbnRTaXplID0gMDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW0uY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2hpbGQgPSBlbGVtLmNoaWxkcmVuW2ldO1xuXG4gICAgaWYgKGNoaWxkLmhlaWdodCA+IGhlaWdodCkge1xuICAgICAgaGVpZ2h0ID0gY2hpbGQuaGVpZ2h0O1xuICAgIH1cblxuICAgIGlmIChjaGlsZC5kZXB0aCA+IGRlcHRoKSB7XG4gICAgICBkZXB0aCA9IGNoaWxkLmRlcHRoO1xuICAgIH1cblxuICAgIGlmIChjaGlsZC5tYXhGb250U2l6ZSA+IG1heEZvbnRTaXplKSB7XG4gICAgICBtYXhGb250U2l6ZSA9IGNoaWxkLm1heEZvbnRTaXplO1xuICAgIH1cbiAgfVxuXG4gIGVsZW0uaGVpZ2h0ID0gaGVpZ2h0O1xuICBlbGVtLmRlcHRoID0gZGVwdGg7XG4gIGVsZW0ubWF4Rm9udFNpemUgPSBtYXhGb250U2l6ZTtcbn07XG4vKipcbiAqIE1ha2VzIGEgc3BhbiB3aXRoIHRoZSBnaXZlbiBsaXN0IG9mIGNsYXNzZXMsIGxpc3Qgb2YgY2hpbGRyZW4sIGFuZCBvcHRpb25zLlxuICpcbiAqIFRPRE8oIzk1Myk6IEVuc3VyZSB0aGF0IGBvcHRpb25zYCBpcyBhbHdheXMgcHJvdmlkZWQgKGN1cnJlbnRseSBzb21lIGNhbGxcbiAqIHNpdGVzIGRvbid0IHBhc3MgaXQpIGFuZCBtYWtlIHRoZSB0eXBlIGJlbG93IG1hbmRhdG9yeS5cbiAqIFRPRE86IGFkZCBhIHNlcGFyYXRlIGFyZ3VtZW50IGZvciBtYXRoIGNsYXNzIChlLmcuIGBtb3BgLCBgbWJpbmApLCB3aGljaFxuICogc2hvdWxkIGlmIHByZXNlbnQgY29tZSBmaXJzdCBpbiBgY2xhc3Nlc2AuXG4gKi9cblxuXG52YXIgYnVpbGRDb21tb25fbWFrZVNwYW4gPSBmdW5jdGlvbiBtYWtlU3BhbihjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucywgc3R5bGUpIHtcbiAgdmFyIHNwYW4gPSBuZXcgZG9tVHJlZV9TcGFuKGNsYXNzZXMsIGNoaWxkcmVuLCBvcHRpb25zLCBzdHlsZSk7XG4gIHNpemVFbGVtZW50RnJvbUNoaWxkcmVuKHNwYW4pO1xuICByZXR1cm4gc3Bhbjtcbn07IC8vIFNWRyBvbmUgaXMgc2ltcGxlciAtLSBkb2Vzbid0IHJlcXVpcmUgaGVpZ2h0LCBkZXB0aCwgbWF4LWZvbnQgc2V0dGluZy5cbi8vIFRoaXMgaXMgYWxzbyBhIHNlcGFyYXRlIG1ldGhvZCBmb3IgdHlwZXNhZmV0eS5cblxuXG52YXIgYnVpbGRDb21tb25fbWFrZVN2Z1NwYW4gPSBmdW5jdGlvbiBtYWtlU3ZnU3BhbihjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucywgc3R5bGUpIHtcbiAgcmV0dXJuIG5ldyBkb21UcmVlX1NwYW4oY2xhc3NlcywgY2hpbGRyZW4sIG9wdGlvbnMsIHN0eWxlKTtcbn07XG5cbnZhciBtYWtlTGluZVNwYW4gPSBmdW5jdGlvbiBtYWtlTGluZVNwYW4oY2xhc3NOYW1lLCBvcHRpb25zLCB0aGlja25lc3MpIHtcbiAgdmFyIGxpbmUgPSBidWlsZENvbW1vbl9tYWtlU3BhbihbY2xhc3NOYW1lXSwgW10sIG9wdGlvbnMpO1xuICBsaW5lLmhlaWdodCA9IE1hdGgubWF4KHRoaWNrbmVzcyB8fCBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3MsIG9wdGlvbnMubWluUnVsZVRoaWNrbmVzcyk7XG4gIGxpbmUuc3R5bGUuYm9yZGVyQm90dG9tV2lkdGggPSBsaW5lLmhlaWdodCArIFwiZW1cIjtcbiAgbGluZS5tYXhGb250U2l6ZSA9IDEuMDtcbiAgcmV0dXJuIGxpbmU7XG59O1xuLyoqXG4gKiBNYWtlcyBhbiBhbmNob3Igd2l0aCB0aGUgZ2l2ZW4gaHJlZiwgbGlzdCBvZiBjbGFzc2VzLCBsaXN0IG9mIGNoaWxkcmVuLFxuICogYW5kIG9wdGlvbnMuXG4gKi9cblxuXG52YXIgYnVpbGRDb21tb25fbWFrZUFuY2hvciA9IGZ1bmN0aW9uIG1ha2VBbmNob3IoaHJlZiwgY2xhc3NlcywgY2hpbGRyZW4sIG9wdGlvbnMpIHtcbiAgdmFyIGFuY2hvciA9IG5ldyBkb21UcmVlX0FuY2hvcihocmVmLCBjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucyk7XG4gIHNpemVFbGVtZW50RnJvbUNoaWxkcmVuKGFuY2hvcik7XG4gIHJldHVybiBhbmNob3I7XG59O1xuLyoqXG4gKiBNYWtlcyBhIGRvY3VtZW50IGZyYWdtZW50IHdpdGggdGhlIGdpdmVuIGxpc3Qgb2YgY2hpbGRyZW4uXG4gKi9cblxuXG52YXIgYnVpbGRDb21tb25fbWFrZUZyYWdtZW50ID0gZnVuY3Rpb24gbWFrZUZyYWdtZW50KGNoaWxkcmVuKSB7XG4gIHZhciBmcmFnbWVudCA9IG5ldyB0cmVlX0RvY3VtZW50RnJhZ21lbnQoY2hpbGRyZW4pO1xuICBzaXplRWxlbWVudEZyb21DaGlsZHJlbihmcmFnbWVudCk7XG4gIHJldHVybiBmcmFnbWVudDtcbn07XG4vKipcbiAqIFdyYXBzIGdyb3VwIGluIGEgc3BhbiBpZiBpdCdzIGEgZG9jdW1lbnQgZnJhZ21lbnQsIGFsbG93aW5nIHRvIGFwcGx5IGNsYXNzZXNcbiAqIGFuZCBzdHlsZXNcbiAqL1xuXG5cbnZhciBidWlsZENvbW1vbl93cmFwRnJhZ21lbnQgPSBmdW5jdGlvbiB3cmFwRnJhZ21lbnQoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgaWYgKGdyb3VwIGluc3RhbmNlb2YgdHJlZV9Eb2N1bWVudEZyYWdtZW50KSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uX21ha2VTcGFuKFtdLCBbZ3JvdXBdLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJldHVybiBncm91cDtcbn07IC8vIFRoZXNlIGFyZSBleGFjdCBvYmplY3QgdHlwZXMgdG8gY2F0Y2ggdHlwb3MgaW4gdGhlIG5hbWVzIG9mIHRoZSBvcHRpb25hbCBmaWVsZHMuXG5cblxuLy8gQ29tcHV0ZXMgdGhlIHVwZGF0ZWQgYGNoaWxkcmVuYCBsaXN0IGFuZCB0aGUgb3ZlcmFsbCBkZXB0aC5cbi8vXG4vLyBUaGlzIGhlbHBlciBmdW5jdGlvbiBmb3IgbWFrZVZMaXN0IG1ha2VzIGl0IGVhc2llciB0byBlbmZvcmNlIHR5cGUgc2FmZXR5IGJ5XG4vLyBhbGxvd2luZyBlYXJseSBleGl0cyAocmV0dXJucykgaW4gdGhlIGxvZ2ljLlxudmFyIGdldFZMaXN0Q2hpbGRyZW5BbmREZXB0aCA9IGZ1bmN0aW9uIGdldFZMaXN0Q2hpbGRyZW5BbmREZXB0aChwYXJhbXMpIHtcbiAgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwiaW5kaXZpZHVhbFNoaWZ0XCIpIHtcbiAgICB2YXIgb2xkQ2hpbGRyZW4gPSBwYXJhbXMuY2hpbGRyZW47XG4gICAgdmFyIGNoaWxkcmVuID0gW29sZENoaWxkcmVuWzBdXTsgLy8gQWRkIGluIGtlcm5zIHRvIHRoZSBsaXN0IG9mIHBhcmFtcy5jaGlsZHJlbiB0byBnZXQgZWFjaCBlbGVtZW50IHRvIGJlXG4gICAgLy8gc2hpZnRlZCB0byB0aGUgY29ycmVjdCBzcGVjaWZpZWQgc2hpZnRcblxuICAgIHZhciBfZGVwdGggPSAtb2xkQ2hpbGRyZW5bMF0uc2hpZnQgLSBvbGRDaGlsZHJlblswXS5lbGVtLmRlcHRoO1xuXG4gICAgdmFyIGN1cnJQb3MgPSBfZGVwdGg7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IG9sZENoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGlmZiA9IC1vbGRDaGlsZHJlbltpXS5zaGlmdCAtIGN1cnJQb3MgLSBvbGRDaGlsZHJlbltpXS5lbGVtLmRlcHRoO1xuICAgICAgdmFyIHNpemUgPSBkaWZmIC0gKG9sZENoaWxkcmVuW2kgLSAxXS5lbGVtLmhlaWdodCArIG9sZENoaWxkcmVuW2kgLSAxXS5lbGVtLmRlcHRoKTtcbiAgICAgIGN1cnJQb3MgPSBjdXJyUG9zICsgZGlmZjtcbiAgICAgIGNoaWxkcmVuLnB1c2goe1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogc2l6ZVxuICAgICAgfSk7XG4gICAgICBjaGlsZHJlbi5wdXNoKG9sZENoaWxkcmVuW2ldKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgICAgZGVwdGg6IF9kZXB0aFxuICAgIH07XG4gIH1cblxuICB2YXIgZGVwdGg7XG5cbiAgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwidG9wXCIpIHtcbiAgICAvLyBXZSBhbHdheXMgc3RhcnQgYXQgdGhlIGJvdHRvbSwgc28gY2FsY3VsYXRlIHRoZSBib3R0b20gYnkgYWRkaW5nIHVwXG4gICAgLy8gYWxsIHRoZSBzaXplc1xuICAgIHZhciBib3R0b20gPSBwYXJhbXMucG9zaXRpb25EYXRhO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHBhcmFtcy5jaGlsZHJlbi5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IHBhcmFtcy5jaGlsZHJlbltfaV07XG4gICAgICBib3R0b20gLT0gY2hpbGQudHlwZSA9PT0gXCJrZXJuXCIgPyBjaGlsZC5zaXplIDogY2hpbGQuZWxlbS5oZWlnaHQgKyBjaGlsZC5lbGVtLmRlcHRoO1xuICAgIH1cblxuICAgIGRlcHRoID0gYm90dG9tO1xuICB9IGVsc2UgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwiYm90dG9tXCIpIHtcbiAgICBkZXB0aCA9IC1wYXJhbXMucG9zaXRpb25EYXRhO1xuICB9IGVsc2Uge1xuICAgIHZhciBmaXJzdENoaWxkID0gcGFyYW1zLmNoaWxkcmVuWzBdO1xuXG4gICAgaWYgKGZpcnN0Q2hpbGQudHlwZSAhPT0gXCJlbGVtXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmlyc3QgY2hpbGQgbXVzdCBoYXZlIHR5cGUgXCJlbGVtXCIuJyk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwic2hpZnRcIikge1xuICAgICAgZGVwdGggPSAtZmlyc3RDaGlsZC5lbGVtLmRlcHRoIC0gcGFyYW1zLnBvc2l0aW9uRGF0YTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwiZmlyc3RCYXNlbGluZVwiKSB7XG4gICAgICBkZXB0aCA9IC1maXJzdENoaWxkLmVsZW0uZGVwdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcG9zaXRpb25UeXBlIFwiICsgcGFyYW1zLnBvc2l0aW9uVHlwZSArIFwiLlwiKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNoaWxkcmVuOiBwYXJhbXMuY2hpbGRyZW4sXG4gICAgZGVwdGg6IGRlcHRoXG4gIH07XG59O1xuLyoqXG4gKiBNYWtlcyBhIHZlcnRpY2FsIGxpc3QgYnkgc3RhY2tpbmcgZWxlbWVudHMgYW5kIGtlcm5zIG9uIHRvcCBvZiBlYWNoIG90aGVyLlxuICogQWxsb3dzIGZvciBtYW55IGRpZmZlcmVudCB3YXlzIG9mIHNwZWNpZnlpbmcgdGhlIHBvc2l0aW9uaW5nIG1ldGhvZC5cbiAqXG4gKiBTZWUgVkxpc3RQYXJhbSBkb2N1bWVudGF0aW9uIGFib3ZlLlxuICovXG5cblxudmFyIGJ1aWxkQ29tbW9uX21ha2VWTGlzdCA9IGZ1bmN0aW9uIG1ha2VWTGlzdChwYXJhbXMsIG9wdGlvbnMpIHtcbiAgdmFyIF9nZXRWTGlzdENoaWxkcmVuQW5kRCA9IGdldFZMaXN0Q2hpbGRyZW5BbmREZXB0aChwYXJhbXMpLFxuICAgICAgY2hpbGRyZW4gPSBfZ2V0Vkxpc3RDaGlsZHJlbkFuZEQuY2hpbGRyZW4sXG4gICAgICBkZXB0aCA9IF9nZXRWTGlzdENoaWxkcmVuQW5kRC5kZXB0aDsgLy8gQ3JlYXRlIGEgc3RydXQgdGhhdCBpcyB0YWxsZXIgdGhhbiBhbnkgbGlzdCBpdGVtLiBUaGUgc3RydXQgaXMgYWRkZWQgdG9cbiAgLy8gZWFjaCBpdGVtLCB3aGVyZSBpdCB3aWxsIGRldGVybWluZSB0aGUgaXRlbSdzIGJhc2VsaW5lLiBTaW5jZSBpdCBoYXNcbiAgLy8gYG92ZXJmbG93OmhpZGRlbmAsIHRoZSBzdHJ1dCdzIHRvcCBlZGdlIHdpbGwgc2l0IG9uIHRoZSBpdGVtJ3MgbGluZSBib3gnc1xuICAvLyB0b3AgZWRnZSBhbmQgdGhlIHN0cnV0J3MgYm90dG9tIGVkZ2Ugd2lsbCBzaXQgb24gdGhlIGl0ZW0ncyBiYXNlbGluZSxcbiAgLy8gd2l0aCBubyBhZGRpdGlvbmFsIGxpbmUtaGVpZ2h0IHNwYWNpbmcuIFRoaXMgYWxsb3dzIHRoZSBpdGVtIGJhc2VsaW5lIHRvXG4gIC8vIGJlIHBvc2l0aW9uZWQgcHJlY2lzZWx5IHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgZm9udCBhc2NlbnQgYW5kXG4gIC8vIGxpbmUtaGVpZ2h0LlxuXG5cbiAgdmFyIHBzdHJ1dFNpemUgPSAwO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTtcblxuICAgIGlmIChjaGlsZC50eXBlID09PSBcImVsZW1cIikge1xuICAgICAgdmFyIGVsZW0gPSBjaGlsZC5lbGVtO1xuICAgICAgcHN0cnV0U2l6ZSA9IE1hdGgubWF4KHBzdHJ1dFNpemUsIGVsZW0ubWF4Rm9udFNpemUsIGVsZW0uaGVpZ2h0KTtcbiAgICB9XG4gIH1cblxuICBwc3RydXRTaXplICs9IDI7XG4gIHZhciBwc3RydXQgPSBidWlsZENvbW1vbl9tYWtlU3BhbihbXCJwc3RydXRcIl0sIFtdKTtcbiAgcHN0cnV0LnN0eWxlLmhlaWdodCA9IHBzdHJ1dFNpemUgKyBcImVtXCI7IC8vIENyZWF0ZSBhIG5ldyBsaXN0IG9mIGFjdHVhbCBjaGlsZHJlbiBhdCB0aGUgY29ycmVjdCBvZmZzZXRzXG5cbiAgdmFyIHJlYWxDaGlsZHJlbiA9IFtdO1xuICB2YXIgbWluUG9zID0gZGVwdGg7XG4gIHZhciBtYXhQb3MgPSBkZXB0aDtcbiAgdmFyIGN1cnJQb3MgPSBkZXB0aDtcblxuICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBjaGlsZHJlbi5sZW5ndGg7IF9pMisrKSB7XG4gICAgdmFyIF9jaGlsZCA9IGNoaWxkcmVuW19pMl07XG5cbiAgICBpZiAoX2NoaWxkLnR5cGUgPT09IFwia2VyblwiKSB7XG4gICAgICBjdXJyUG9zICs9IF9jaGlsZC5zaXplO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX2VsZW0gPSBfY2hpbGQuZWxlbTtcbiAgICAgIHZhciBjbGFzc2VzID0gX2NoaWxkLndyYXBwZXJDbGFzc2VzIHx8IFtdO1xuICAgICAgdmFyIHN0eWxlID0gX2NoaWxkLndyYXBwZXJTdHlsZSB8fCB7fTtcbiAgICAgIHZhciBjaGlsZFdyYXAgPSBidWlsZENvbW1vbl9tYWtlU3BhbihjbGFzc2VzLCBbcHN0cnV0LCBfZWxlbV0sIHVuZGVmaW5lZCwgc3R5bGUpO1xuICAgICAgY2hpbGRXcmFwLnN0eWxlLnRvcCA9IC1wc3RydXRTaXplIC0gY3VyclBvcyAtIF9lbGVtLmRlcHRoICsgXCJlbVwiO1xuXG4gICAgICBpZiAoX2NoaWxkLm1hcmdpbkxlZnQpIHtcbiAgICAgICAgY2hpbGRXcmFwLnN0eWxlLm1hcmdpbkxlZnQgPSBfY2hpbGQubWFyZ2luTGVmdDtcbiAgICAgIH1cblxuICAgICAgaWYgKF9jaGlsZC5tYXJnaW5SaWdodCkge1xuICAgICAgICBjaGlsZFdyYXAuc3R5bGUubWFyZ2luUmlnaHQgPSBfY2hpbGQubWFyZ2luUmlnaHQ7XG4gICAgICB9XG5cbiAgICAgIHJlYWxDaGlsZHJlbi5wdXNoKGNoaWxkV3JhcCk7XG4gICAgICBjdXJyUG9zICs9IF9lbGVtLmhlaWdodCArIF9lbGVtLmRlcHRoO1xuICAgIH1cblxuICAgIG1pblBvcyA9IE1hdGgubWluKG1pblBvcywgY3VyclBvcyk7XG4gICAgbWF4UG9zID0gTWF0aC5tYXgobWF4UG9zLCBjdXJyUG9zKTtcbiAgfSAvLyBUaGUgdmxpc3QgY29udGVudHMgZ28gaW4gYSB0YWJsZS1jZWxsIHdpdGggYHZlcnRpY2FsLWFsaWduOmJvdHRvbWAuXG4gIC8vIFRoaXMgY2VsbCdzIGJvdHRvbSBlZGdlIHdpbGwgZGV0ZXJtaW5lIHRoZSBjb250YWluaW5nIHRhYmxlJ3MgYmFzZWxpbmVcbiAgLy8gd2l0aG91dCBvdmVybHkgZXhwYW5kaW5nIHRoZSBjb250YWluaW5nIGxpbmUtYm94LlxuXG5cbiAgdmFyIHZsaXN0ID0gYnVpbGRDb21tb25fbWFrZVNwYW4oW1widmxpc3RcIl0sIHJlYWxDaGlsZHJlbik7XG4gIHZsaXN0LnN0eWxlLmhlaWdodCA9IG1heFBvcyArIFwiZW1cIjsgLy8gQSBzZWNvbmQgcm93IGlzIHVzZWQgaWYgbmVjZXNzYXJ5IHRvIHJlcHJlc2VudCB0aGUgdmxpc3QncyBkZXB0aC5cblxuICB2YXIgcm93cztcblxuICBpZiAobWluUG9zIDwgMCkge1xuICAgIC8vIFdlIHdpbGwgZGVmaW5lIGRlcHRoIGluIGFuIGVtcHR5IHNwYW4gd2l0aCBkaXNwbGF5OiB0YWJsZS1jZWxsLlxuICAgIC8vIEl0IHNob3VsZCByZW5kZXIgd2l0aCB0aGUgaGVpZ2h0IHRoYXQgd2UgZGVmaW5lLiBCdXQgQ2hyb21lLCBpblxuICAgIC8vIGNvbnRlbnRlZGl0YWJsZSBtb2RlIG9ubHksIHRyZWF0cyB0aGF0IHNwYW4gYXMgaWYgaXQgY29udGFpbnMgc29tZVxuICAgIC8vIHRleHQgY29udGVudC4gQW5kIHRoYXQgbWluLWhlaWdodCBvdmVyLXJpZGVzIG91ciBkZXNpcmVkIGhlaWdodC5cbiAgICAvLyBTbyB3ZSBwdXQgYW5vdGhlciBlbXB0eSBzcGFuIGluc2lkZSB0aGUgZGVwdGggc3RydXQgc3Bhbi5cbiAgICB2YXIgZW1wdHlTcGFuID0gYnVpbGRDb21tb25fbWFrZVNwYW4oW10sIFtdKTtcbiAgICB2YXIgZGVwdGhTdHJ1dCA9IGJ1aWxkQ29tbW9uX21ha2VTcGFuKFtcInZsaXN0XCJdLCBbZW1wdHlTcGFuXSk7XG4gICAgZGVwdGhTdHJ1dC5zdHlsZS5oZWlnaHQgPSAtbWluUG9zICsgXCJlbVwiOyAvLyBTYWZhcmkgd2FudHMgdGhlIGZpcnN0IHJvdyB0byBoYXZlIGlubGluZSBjb250ZW50OyBvdGhlcndpc2UgaXRcbiAgICAvLyBwdXRzIHRoZSBib3R0b20gb2YgdGhlICpzZWNvbmQqIHJvdyBvbiB0aGUgYmFzZWxpbmUuXG5cbiAgICB2YXIgdG9wU3RydXQgPSBidWlsZENvbW1vbl9tYWtlU3BhbihbXCJ2bGlzdC1zXCJdLCBbbmV3IGRvbVRyZWVfU3ltYm9sTm9kZShcIlxcdTIwMEJcIildKTtcbiAgICByb3dzID0gW2J1aWxkQ29tbW9uX21ha2VTcGFuKFtcInZsaXN0LXJcIl0sIFt2bGlzdCwgdG9wU3RydXRdKSwgYnVpbGRDb21tb25fbWFrZVNwYW4oW1widmxpc3QtclwiXSwgW2RlcHRoU3RydXRdKV07XG4gIH0gZWxzZSB7XG4gICAgcm93cyA9IFtidWlsZENvbW1vbl9tYWtlU3BhbihbXCJ2bGlzdC1yXCJdLCBbdmxpc3RdKV07XG4gIH1cblxuICB2YXIgdnRhYmxlID0gYnVpbGRDb21tb25fbWFrZVNwYW4oW1widmxpc3QtdFwiXSwgcm93cyk7XG5cbiAgaWYgKHJvd3MubGVuZ3RoID09PSAyKSB7XG4gICAgdnRhYmxlLmNsYXNzZXMucHVzaChcInZsaXN0LXQyXCIpO1xuICB9XG5cbiAgdnRhYmxlLmhlaWdodCA9IG1heFBvcztcbiAgdnRhYmxlLmRlcHRoID0gLW1pblBvcztcbiAgcmV0dXJuIHZ0YWJsZTtcbn07IC8vIEdsdWUgaXMgYSBjb25jZXB0IGZyb20gVGVYIHdoaWNoIGlzIGEgZmxleGlibGUgc3BhY2UgYmV0d2VlbiBlbGVtZW50cyBpblxuLy8gZWl0aGVyIGEgdmVydGljYWwgb3IgaG9yaXpvbnRhbCBsaXN0LiBJbiBLYVRlWCwgYXQgbGVhc3QgZm9yIG5vdywgaXQnc1xuLy8gc3RhdGljIHNwYWNlIGJldHdlZW4gZWxlbWVudHMgaW4gYSBob3Jpem9udGFsIGxheW91dC5cblxuXG52YXIgYnVpbGRDb21tb25fbWFrZUdsdWUgPSBmdW5jdGlvbiBtYWtlR2x1ZShtZWFzdXJlbWVudCwgb3B0aW9ucykge1xuICAvLyBNYWtlIGFuIGVtcHR5IHNwYW4gZm9yIHRoZSBzcGFjZVxuICB2YXIgcnVsZSA9IGJ1aWxkQ29tbW9uX21ha2VTcGFuKFtcIm1zcGFjZVwiXSwgW10sIG9wdGlvbnMpO1xuICB2YXIgc2l6ZSA9IHVuaXRzX2NhbGN1bGF0ZVNpemUobWVhc3VyZW1lbnQsIG9wdGlvbnMpO1xuICBydWxlLnN0eWxlLm1hcmdpblJpZ2h0ID0gc2l6ZSArIFwiZW1cIjtcbiAgcmV0dXJuIHJ1bGU7XG59OyAvLyBUYWtlcyBmb250IG9wdGlvbnMsIGFuZCByZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBmb250TG9va3VwIG5hbWVcblxuXG52YXIgcmV0cmlldmVUZXh0Rm9udE5hbWUgPSBmdW5jdGlvbiByZXRyaWV2ZVRleHRGb250TmFtZShmb250RmFtaWx5LCBmb250V2VpZ2h0LCBmb250U2hhcGUpIHtcbiAgdmFyIGJhc2VGb250TmFtZSA9IFwiXCI7XG5cbiAgc3dpdGNoIChmb250RmFtaWx5KSB7XG4gICAgY2FzZSBcImFtc3JtXCI6XG4gICAgICBiYXNlRm9udE5hbWUgPSBcIkFNU1wiO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwidGV4dHJtXCI6XG4gICAgICBiYXNlRm9udE5hbWUgPSBcIk1haW5cIjtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInRleHRzZlwiOlxuICAgICAgYmFzZUZvbnROYW1lID0gXCJTYW5zU2VyaWZcIjtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInRleHR0dFwiOlxuICAgICAgYmFzZUZvbnROYW1lID0gXCJUeXBld3JpdGVyXCI7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBiYXNlRm9udE5hbWUgPSBmb250RmFtaWx5O1xuICAgIC8vIHVzZSBmb250cyBhZGRlZCBieSBhIHBsdWdpblxuICB9XG5cbiAgdmFyIGZvbnRTdHlsZXNOYW1lO1xuXG4gIGlmIChmb250V2VpZ2h0ID09PSBcInRleHRiZlwiICYmIGZvbnRTaGFwZSA9PT0gXCJ0ZXh0aXRcIikge1xuICAgIGZvbnRTdHlsZXNOYW1lID0gXCJCb2xkSXRhbGljXCI7XG4gIH0gZWxzZSBpZiAoZm9udFdlaWdodCA9PT0gXCJ0ZXh0YmZcIikge1xuICAgIGZvbnRTdHlsZXNOYW1lID0gXCJCb2xkXCI7XG4gIH0gZWxzZSBpZiAoZm9udFdlaWdodCA9PT0gXCJ0ZXh0aXRcIikge1xuICAgIGZvbnRTdHlsZXNOYW1lID0gXCJJdGFsaWNcIjtcbiAgfSBlbHNlIHtcbiAgICBmb250U3R5bGVzTmFtZSA9IFwiUmVndWxhclwiO1xuICB9XG5cbiAgcmV0dXJuIGJhc2VGb250TmFtZSArIFwiLVwiICsgZm9udFN0eWxlc05hbWU7XG59O1xuLyoqXG4gKiBNYXBzIFRlWCBmb250IGNvbW1hbmRzIHRvIG9iamVjdHMgY29udGFpbmluZzpcbiAqIC0gdmFyaWFudDogc3RyaW5nIHVzZWQgZm9yIFwibWF0aHZhcmlhbnRcIiBhdHRyaWJ1dGUgaW4gYnVpbGRNYXRoTUwuanNcbiAqIC0gZm9udE5hbWU6IHRoZSBcInN0eWxlXCIgcGFyYW1ldGVyIHRvIGZvbnRNZXRyaWNzLmdldENoYXJhY3Rlck1ldHJpY3NcbiAqL1xuLy8gQSBtYXAgYmV0d2VlbiB0ZXggZm9udCBjb21tYW5kcyBhbiBNYXRoTUwgbWF0aHZhcmlhbnQgYXR0cmlidXRlIHZhbHVlc1xuXG5cbnZhciBmb250TWFwID0ge1xuICAvLyBzdHlsZXNcbiAgXCJtYXRoYmZcIjoge1xuICAgIHZhcmlhbnQ6IFwiYm9sZFwiLFxuICAgIGZvbnROYW1lOiBcIk1haW4tQm9sZFwiXG4gIH0sXG4gIFwibWF0aHJtXCI6IHtcbiAgICB2YXJpYW50OiBcIm5vcm1hbFwiLFxuICAgIGZvbnROYW1lOiBcIk1haW4tUmVndWxhclwiXG4gIH0sXG4gIFwidGV4dGl0XCI6IHtcbiAgICB2YXJpYW50OiBcIml0YWxpY1wiLFxuICAgIGZvbnROYW1lOiBcIk1haW4tSXRhbGljXCJcbiAgfSxcbiAgXCJtYXRoaXRcIjoge1xuICAgIHZhcmlhbnQ6IFwiaXRhbGljXCIsXG4gICAgZm9udE5hbWU6IFwiTWFpbi1JdGFsaWNcIlxuICB9LFxuICAvLyBEZWZhdWx0IG1hdGggZm9udCwgXCJtYXRobm9ybWFsXCIgYW5kIFwiYm9sZHN5bWJvbFwiIGFyZSBtaXNzaW5nIGJlY2F1c2UgdGhleVxuICAvLyByZXF1aXJlIHRoZSB1c2Ugb2Ygc2V2ZXJhbCBmb250czogTWFpbi1JdGFsaWMgYW5kIE1hdGgtSXRhbGljIGZvciBkZWZhdWx0XG4gIC8vIG1hdGggZm9udCwgTWFpbi1JdGFsaWMsIE1hdGgtSXRhbGljLCBDYWxpZ3JhcGhpYyBmb3IgXCJtYXRobm9ybWFsXCIsIGFuZFxuICAvLyBNYXRoLUJvbGRJdGFsaWMgYW5kIE1haW4tQm9sZCBmb3IgXCJib2xkc3ltYm9sXCIuICBUaGlzIGlzIGhhbmRsZWQgYnkgYVxuICAvLyBzcGVjaWFsIGNhc2UgaW4gbWFrZU9yZCB3aGljaCBlbmRzIHVwIGNhbGxpbmcgbWF0aGRlZmF1bHQsIG1hdGhub3JtYWwsXG4gIC8vIGFuZCBib2xkc3ltYm9sLlxuICAvLyBmYW1pbGllc1xuICBcIm1hdGhiYlwiOiB7XG4gICAgdmFyaWFudDogXCJkb3VibGUtc3RydWNrXCIsXG4gICAgZm9udE5hbWU6IFwiQU1TLVJlZ3VsYXJcIlxuICB9LFxuICBcIm1hdGhjYWxcIjoge1xuICAgIHZhcmlhbnQ6IFwic2NyaXB0XCIsXG4gICAgZm9udE5hbWU6IFwiQ2FsaWdyYXBoaWMtUmVndWxhclwiXG4gIH0sXG4gIFwibWF0aGZyYWtcIjoge1xuICAgIHZhcmlhbnQ6IFwiZnJha3R1clwiLFxuICAgIGZvbnROYW1lOiBcIkZyYWt0dXItUmVndWxhclwiXG4gIH0sXG4gIFwibWF0aHNjclwiOiB7XG4gICAgdmFyaWFudDogXCJzY3JpcHRcIixcbiAgICBmb250TmFtZTogXCJTY3JpcHQtUmVndWxhclwiXG4gIH0sXG4gIFwibWF0aHNmXCI6IHtcbiAgICB2YXJpYW50OiBcInNhbnMtc2VyaWZcIixcbiAgICBmb250TmFtZTogXCJTYW5zU2VyaWYtUmVndWxhclwiXG4gIH0sXG4gIFwibWF0aHR0XCI6IHtcbiAgICB2YXJpYW50OiBcIm1vbm9zcGFjZVwiLFxuICAgIGZvbnROYW1lOiBcIlR5cGV3cml0ZXItUmVndWxhclwiXG4gIH1cbn07XG52YXIgc3ZnRGF0YSA9IHtcbiAgLy8gICBwYXRoLCB3aWR0aCwgaGVpZ2h0XG4gIHZlYzogW1widmVjXCIsIDAuNDcxLCAwLjcxNF0sXG4gIC8vIHZhbHVlcyBmcm9tIHRoZSBmb250IGdseXBoXG4gIG9paW50U2l6ZTE6IFtcIm9paW50U2l6ZTFcIiwgMC45NTcsIDAuNDk5XSxcbiAgLy8gb3ZhbCB0byBvdmVybGF5IHRoZSBpbnRlZ3JhbmRcbiAgb2lpbnRTaXplMjogW1wib2lpbnRTaXplMlwiLCAxLjQ3MiwgMC42NTldLFxuICBvaWlpbnRTaXplMTogW1wib2lpaW50U2l6ZTFcIiwgMS4zMDQsIDAuNDk5XSxcbiAgb2lpaW50U2l6ZTI6IFtcIm9paWludFNpemUyXCIsIDEuOTgsIDAuNjU5XVxufTtcblxudmFyIGJ1aWxkQ29tbW9uX3N0YXRpY1N2ZyA9IGZ1bmN0aW9uIHN0YXRpY1N2Zyh2YWx1ZSwgb3B0aW9ucykge1xuICAvLyBDcmVhdGUgYSBzcGFuIHdpdGggaW5saW5lIFNWRyBmb3IgdGhlIGVsZW1lbnQuXG4gIHZhciBfc3ZnRGF0YSR2YWx1ZSA9IHN2Z0RhdGFbdmFsdWVdLFxuICAgICAgcGF0aE5hbWUgPSBfc3ZnRGF0YSR2YWx1ZVswXSxcbiAgICAgIHdpZHRoID0gX3N2Z0RhdGEkdmFsdWVbMV0sXG4gICAgICBoZWlnaHQgPSBfc3ZnRGF0YSR2YWx1ZVsyXTtcbiAgdmFyIHBhdGggPSBuZXcgZG9tVHJlZV9QYXRoTm9kZShwYXRoTmFtZSk7XG4gIHZhciBzdmdOb2RlID0gbmV3IFN2Z05vZGUoW3BhdGhdLCB7XG4gICAgXCJ3aWR0aFwiOiB3aWR0aCArIFwiZW1cIixcbiAgICBcImhlaWdodFwiOiBoZWlnaHQgKyBcImVtXCIsXG4gICAgLy8gT3ZlcnJpZGUgQ1NTIHJ1bGUgYC5rYXRleCBzdmcgeyB3aWR0aDogMTAwJSB9YFxuICAgIFwic3R5bGVcIjogXCJ3aWR0aDpcIiArIHdpZHRoICsgXCJlbVwiLFxuICAgIFwidmlld0JveFwiOiBcIjAgMCBcIiArIDEwMDAgKiB3aWR0aCArIFwiIFwiICsgMTAwMCAqIGhlaWdodCxcbiAgICBcInByZXNlcnZlQXNwZWN0UmF0aW9cIjogXCJ4TWluWU1pblwiXG4gIH0pO1xuICB2YXIgc3BhbiA9IGJ1aWxkQ29tbW9uX21ha2VTdmdTcGFuKFtcIm92ZXJsYXlcIl0sIFtzdmdOb2RlXSwgb3B0aW9ucyk7XG4gIHNwYW4uaGVpZ2h0ID0gaGVpZ2h0O1xuICBzcGFuLnN0eWxlLmhlaWdodCA9IGhlaWdodCArIFwiZW1cIjtcbiAgc3Bhbi5zdHlsZS53aWR0aCA9IHdpZHRoICsgXCJlbVwiO1xuICByZXR1cm4gc3Bhbjtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGJ1aWxkQ29tbW9uID0gKHtcbiAgZm9udE1hcDogZm9udE1hcCxcbiAgbWFrZVN5bWJvbDogYnVpbGRDb21tb25fbWFrZVN5bWJvbCxcbiAgbWF0aHN5bTogYnVpbGRDb21tb25fbWF0aHN5bSxcbiAgbWFrZVNwYW46IGJ1aWxkQ29tbW9uX21ha2VTcGFuLFxuICBtYWtlU3ZnU3BhbjogYnVpbGRDb21tb25fbWFrZVN2Z1NwYW4sXG4gIG1ha2VMaW5lU3BhbjogbWFrZUxpbmVTcGFuLFxuICBtYWtlQW5jaG9yOiBidWlsZENvbW1vbl9tYWtlQW5jaG9yLFxuICBtYWtlRnJhZ21lbnQ6IGJ1aWxkQ29tbW9uX21ha2VGcmFnbWVudCxcbiAgd3JhcEZyYWdtZW50OiBidWlsZENvbW1vbl93cmFwRnJhZ21lbnQsXG4gIG1ha2VWTGlzdDogYnVpbGRDb21tb25fbWFrZVZMaXN0LFxuICBtYWtlT3JkOiBidWlsZENvbW1vbl9tYWtlT3JkLFxuICBtYWtlR2x1ZTogYnVpbGRDb21tb25fbWFrZUdsdWUsXG4gIHN0YXRpY1N2ZzogYnVpbGRDb21tb25fc3RhdGljU3ZnLFxuICBzdmdEYXRhOiBzdmdEYXRhLFxuICB0cnlDb21iaW5lQ2hhcnM6IGJ1aWxkQ29tbW9uX3RyeUNvbWJpbmVDaGFyc1xufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9wYXJzZU5vZGUuanNcblxuXG4vKipcbiAqIEFzc2VydHMgdGhhdCB0aGUgbm9kZSBpcyBvZiB0aGUgZ2l2ZW4gdHlwZSBhbmQgcmV0dXJucyBpdCB3aXRoIHN0cmljdGVyXG4gKiB0eXBpbmcuIFRocm93cyBpZiB0aGUgbm9kZSdzIHR5cGUgZG9lcyBub3QgbWF0Y2guXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vZGVUeXBlKG5vZGUsIHR5cGUpIHtcbiAgdmFyIHR5cGVkTm9kZSA9IGNoZWNrTm9kZVR5cGUobm9kZSwgdHlwZSk7XG5cbiAgaWYgKCF0eXBlZE5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBub2RlIG9mIHR5cGUgXCIgKyB0eXBlICsgXCIsIGJ1dCBnb3QgXCIgKyAobm9kZSA/IFwibm9kZSBvZiB0eXBlIFwiICsgbm9kZS50eXBlIDogU3RyaW5nKG5vZGUpKSk7XG4gIH0gLy8gJEZsb3dGaXhNZTogVW5zdXJlIHdoeS5cblxuXG4gIHJldHVybiB0eXBlZE5vZGU7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIG5vZGUgbW9yZSBzdHJpY3RseSB0eXBlZCBpZmYgaXQgaXMgb2YgdGhlIGdpdmVuIHR5cGUuIE90aGVyd2lzZSxcbiAqIHJldHVybnMgbnVsbC5cbiAqL1xuXG5mdW5jdGlvbiBjaGVja05vZGVUeXBlKG5vZGUsIHR5cGUpIHtcbiAgaWYgKG5vZGUgJiYgbm9kZS50eXBlID09PSB0eXBlKSB7XG4gICAgLy8gVGhlIGRlZmluaXRpb24gb2YgUGFyc2VOb2RlPFRZUEU+IGRvZXNuJ3QgY29tbXVuaWNhdGUgdG8gZmxvdyB0aGF0XG4gICAgLy8gYHR5cGU6IFRZUEVgIChhcyB0aGF0J3Mgbm90IGV4cGxpY2l0bHkgbWVudGlvbmVkIGFueXdoZXJlKSwgdGhvdWdoIHRoYXRcbiAgICAvLyBoYXBwZW5zIHRvIGJlIHRydWUgZm9yIGFsbCBvdXIgdmFsdWUgdHlwZXMuXG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIEFzc2VydHMgdGhhdCB0aGUgbm9kZSBpcyBvZiB0aGUgZ2l2ZW4gdHlwZSBhbmQgcmV0dXJucyBpdCB3aXRoIHN0cmljdGVyXG4gKiB0eXBpbmcuIFRocm93cyBpZiB0aGUgbm9kZSdzIHR5cGUgZG9lcyBub3QgbWF0Y2guXG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0QXRvbUZhbWlseShub2RlLCBmYW1pbHkpIHtcbiAgdmFyIHR5cGVkTm9kZSA9IGNoZWNrQXRvbUZhbWlseShub2RlLCBmYW1pbHkpO1xuXG4gIGlmICghdHlwZWROb2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbm9kZSBvZiB0eXBlIFxcXCJhdG9tXFxcIiBhbmQgZmFtaWx5IFxcXCJcIiArIGZhbWlseSArIFwiXFxcIiwgYnV0IGdvdCBcIiArIChub2RlID8gbm9kZS50eXBlID09PSBcImF0b21cIiA/IFwiYXRvbSBvZiBmYW1pbHkgXCIgKyBub2RlLmZhbWlseSA6IFwibm9kZSBvZiB0eXBlIFwiICsgbm9kZS50eXBlIDogU3RyaW5nKG5vZGUpKSk7XG4gIH1cblxuICByZXR1cm4gdHlwZWROb2RlO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBub2RlIG1vcmUgc3RyaWN0bHkgdHlwZWQgaWZmIGl0IGlzIG9mIHRoZSBnaXZlbiB0eXBlLiBPdGhlcndpc2UsXG4gKiByZXR1cm5zIG51bGwuXG4gKi9cblxuZnVuY3Rpb24gY2hlY2tBdG9tRmFtaWx5KG5vZGUsIGZhbWlseSkge1xuICByZXR1cm4gbm9kZSAmJiBub2RlLnR5cGUgPT09IFwiYXRvbVwiICYmIG5vZGUuZmFtaWx5ID09PSBmYW1pbHkgPyBub2RlIDogbnVsbDtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgbm9kZSBtb3JlIHN0cmljdGx5IHR5cGVkIGlmZiBpdCBpcyBvZiB0aGUgZ2l2ZW4gdHlwZS4gT3RoZXJ3aXNlLFxuICogcmV0dXJucyBudWxsLlxuICovXG5cbmZ1bmN0aW9uIGFzc2VydFN5bWJvbE5vZGVUeXBlKG5vZGUpIHtcbiAgdmFyIHR5cGVkTm9kZSA9IGNoZWNrU3ltYm9sTm9kZVR5cGUobm9kZSk7XG5cbiAgaWYgKCF0eXBlZE5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBub2RlIG9mIHN5bWJvbCBncm91cCB0eXBlLCBidXQgZ290IFwiICsgKG5vZGUgPyBcIm5vZGUgb2YgdHlwZSBcIiArIG5vZGUudHlwZSA6IFN0cmluZyhub2RlKSkpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGVkTm9kZTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgbm9kZSBtb3JlIHN0cmljdGx5IHR5cGVkIGlmZiBpdCBpcyBvZiB0aGUgZ2l2ZW4gdHlwZS4gT3RoZXJ3aXNlLFxuICogcmV0dXJucyBudWxsLlxuICovXG5cbmZ1bmN0aW9uIGNoZWNrU3ltYm9sTm9kZVR5cGUobm9kZSkge1xuICBpZiAobm9kZSAmJiAobm9kZS50eXBlID09PSBcImF0b21cIiB8fCBOT05fQVRPTVMuaGFzT3duUHJvcGVydHkobm9kZS50eXBlKSkpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3NwYWNpbmdEYXRhLmpzXG4vKipcbiAqIERlc2NyaWJlcyBzcGFjZXMgYmV0d2VlbiBkaWZmZXJlbnQgY2xhc3NlcyBvZiBhdG9tcy5cbiAqL1xudmFyIHRoaW5zcGFjZSA9IHtcbiAgbnVtYmVyOiAzLFxuICB1bml0OiBcIm11XCJcbn07XG52YXIgbWVkaXVtc3BhY2UgPSB7XG4gIG51bWJlcjogNCxcbiAgdW5pdDogXCJtdVwiXG59O1xudmFyIHRoaWNrc3BhY2UgPSB7XG4gIG51bWJlcjogNSxcbiAgdW5pdDogXCJtdVwiXG59OyAvLyBNYWtpbmcgdGhlIHR5cGUgYmVsb3cgZXhhY3Qgd2l0aCBhbGwgb3B0aW9uYWwgZmllbGRzIGRvZXNuJ3Qgd29yayBkdWUgdG9cbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzQ1ODJcbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzU2ODhcbi8vIEhvd2V2ZXIsIHNpbmNlICphbGwqIGZpZWxkcyBhcmUgb3B0aW9uYWwsICRTaGFwZTw+IHdvcmtzIGFzIHN1Z2dlc3RlZCBpbiA1Njg4XG4vLyBhYm92ZS5cblxuLy8gU3BhY2luZyByZWxhdGlvbnNoaXBzIGZvciBkaXNwbGF5IGFuZCB0ZXh0IHN0eWxlc1xudmFyIHNwYWNpbmdzID0ge1xuICBtb3JkOiB7XG4gICAgbW9wOiB0aGluc3BhY2UsXG4gICAgbWJpbjogbWVkaXVtc3BhY2UsXG4gICAgbXJlbDogdGhpY2tzcGFjZSxcbiAgICBtaW5uZXI6IHRoaW5zcGFjZVxuICB9LFxuICBtb3A6IHtcbiAgICBtb3JkOiB0aGluc3BhY2UsXG4gICAgbW9wOiB0aGluc3BhY2UsXG4gICAgbXJlbDogdGhpY2tzcGFjZSxcbiAgICBtaW5uZXI6IHRoaW5zcGFjZVxuICB9LFxuICBtYmluOiB7XG4gICAgbW9yZDogbWVkaXVtc3BhY2UsXG4gICAgbW9wOiBtZWRpdW1zcGFjZSxcbiAgICBtb3BlbjogbWVkaXVtc3BhY2UsXG4gICAgbWlubmVyOiBtZWRpdW1zcGFjZVxuICB9LFxuICBtcmVsOiB7XG4gICAgbW9yZDogdGhpY2tzcGFjZSxcbiAgICBtb3A6IHRoaWNrc3BhY2UsXG4gICAgbW9wZW46IHRoaWNrc3BhY2UsXG4gICAgbWlubmVyOiB0aGlja3NwYWNlXG4gIH0sXG4gIG1vcGVuOiB7fSxcbiAgbWNsb3NlOiB7XG4gICAgbW9wOiB0aGluc3BhY2UsXG4gICAgbWJpbjogbWVkaXVtc3BhY2UsXG4gICAgbXJlbDogdGhpY2tzcGFjZSxcbiAgICBtaW5uZXI6IHRoaW5zcGFjZVxuICB9LFxuICBtcHVuY3Q6IHtcbiAgICBtb3JkOiB0aGluc3BhY2UsXG4gICAgbW9wOiB0aGluc3BhY2UsXG4gICAgbXJlbDogdGhpY2tzcGFjZSxcbiAgICBtb3BlbjogdGhpbnNwYWNlLFxuICAgIG1jbG9zZTogdGhpbnNwYWNlLFxuICAgIG1wdW5jdDogdGhpbnNwYWNlLFxuICAgIG1pbm5lcjogdGhpbnNwYWNlXG4gIH0sXG4gIG1pbm5lcjoge1xuICAgIG1vcmQ6IHRoaW5zcGFjZSxcbiAgICBtb3A6IHRoaW5zcGFjZSxcbiAgICBtYmluOiBtZWRpdW1zcGFjZSxcbiAgICBtcmVsOiB0aGlja3NwYWNlLFxuICAgIG1vcGVuOiB0aGluc3BhY2UsXG4gICAgbXB1bmN0OiB0aGluc3BhY2UsXG4gICAgbWlubmVyOiB0aGluc3BhY2VcbiAgfVxufTsgLy8gU3BhY2luZyByZWxhdGlvbnNoaXBzIGZvciBzY3JpcHQgYW5kIHNjcmlwdHNjcmlwdCBzdHlsZXNcblxudmFyIHRpZ2h0U3BhY2luZ3MgPSB7XG4gIG1vcmQ6IHtcbiAgICBtb3A6IHRoaW5zcGFjZVxuICB9LFxuICBtb3A6IHtcbiAgICBtb3JkOiB0aGluc3BhY2UsXG4gICAgbW9wOiB0aGluc3BhY2VcbiAgfSxcbiAgbWJpbjoge30sXG4gIG1yZWw6IHt9LFxuICBtb3Blbjoge30sXG4gIG1jbG9zZToge1xuICAgIG1vcDogdGhpbnNwYWNlXG4gIH0sXG4gIG1wdW5jdDoge30sXG4gIG1pbm5lcjoge1xuICAgIG1vcDogdGhpbnNwYWNlXG4gIH1cbn07XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9kZWZpbmVGdW5jdGlvbi5qc1xuXG5cbi8qKlxuICogQWxsIHJlZ2lzdGVyZWQgZnVuY3Rpb25zLlxuICogYGZ1bmN0aW9ucy5qc2AganVzdCBleHBvcnRzIHRoaXMgc2FtZSBkaWN0aW9uYXJ5IGFnYWluIGFuZCBtYWtlcyBpdCBwdWJsaWMuXG4gKiBgUGFyc2VyLmpzYCByZXF1aXJlcyB0aGlzIGRpY3Rpb25hcnkuXG4gKi9cbnZhciBfZnVuY3Rpb25zID0ge307XG4vKipcbiAqIEFsbCBIVE1MIGJ1aWxkZXJzLiBTaG91bGQgYmUgb25seSB1c2VkIGluIHRoZSBgZGVmaW5lKmAgYW5kIHRoZSBgYnVpbGQqTUxgXG4gKiBmdW5jdGlvbnMuXG4gKi9cblxudmFyIF9odG1sR3JvdXBCdWlsZGVycyA9IHt9O1xuLyoqXG4gKiBBbGwgTWF0aE1MIGJ1aWxkZXJzLiBTaG91bGQgYmUgb25seSB1c2VkIGluIHRoZSBgZGVmaW5lKmAgYW5kIHRoZSBgYnVpbGQqTUxgXG4gKiBmdW5jdGlvbnMuXG4gKi9cblxudmFyIF9tYXRobWxHcm91cEJ1aWxkZXJzID0ge307XG5mdW5jdGlvbiBkZWZpbmVGdW5jdGlvbihfcmVmKSB7XG4gIHZhciB0eXBlID0gX3JlZi50eXBlLFxuICAgICAgbmFtZXMgPSBfcmVmLm5hbWVzLFxuICAgICAgcHJvcHMgPSBfcmVmLnByb3BzLFxuICAgICAgaGFuZGxlciA9IF9yZWYuaGFuZGxlcixcbiAgICAgIGh0bWxCdWlsZGVyID0gX3JlZi5odG1sQnVpbGRlcixcbiAgICAgIG1hdGhtbEJ1aWxkZXIgPSBfcmVmLm1hdGhtbEJ1aWxkZXI7XG4gIC8vIFNldCBkZWZhdWx0IHZhbHVlcyBvZiBmdW5jdGlvbnNcbiAgdmFyIGRhdGEgPSB7XG4gICAgdHlwZTogdHlwZSxcbiAgICBudW1BcmdzOiBwcm9wcy5udW1BcmdzLFxuICAgIGFyZ1R5cGVzOiBwcm9wcy5hcmdUeXBlcyxcbiAgICBncmVlZGluZXNzOiBwcm9wcy5ncmVlZGluZXNzID09PSB1bmRlZmluZWQgPyAxIDogcHJvcHMuZ3JlZWRpbmVzcyxcbiAgICBhbGxvd2VkSW5UZXh0OiAhIXByb3BzLmFsbG93ZWRJblRleHQsXG4gICAgYWxsb3dlZEluTWF0aDogcHJvcHMuYWxsb3dlZEluTWF0aCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHByb3BzLmFsbG93ZWRJbk1hdGgsXG4gICAgbnVtT3B0aW9uYWxBcmdzOiBwcm9wcy5udW1PcHRpb25hbEFyZ3MgfHwgMCxcbiAgICBpbmZpeDogISFwcm9wcy5pbmZpeCxcbiAgICBjb25zdW1lTW9kZTogcHJvcHMuY29uc3VtZU1vZGUsXG4gICAgaGFuZGxlcjogaGFuZGxlclxuICB9O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyArK2kpIHtcbiAgICBfZnVuY3Rpb25zW25hbWVzW2ldXSA9IGRhdGE7XG4gIH1cblxuICBpZiAodHlwZSkge1xuICAgIGlmIChodG1sQnVpbGRlcikge1xuICAgICAgX2h0bWxHcm91cEJ1aWxkZXJzW3R5cGVdID0gaHRtbEJ1aWxkZXI7XG4gICAgfVxuXG4gICAgaWYgKG1hdGhtbEJ1aWxkZXIpIHtcbiAgICAgIF9tYXRobWxHcm91cEJ1aWxkZXJzW3R5cGVdID0gbWF0aG1sQnVpbGRlcjtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogVXNlIHRoaXMgdG8gcmVnaXN0ZXIgb25seSB0aGUgSFRNTCBhbmQgTWF0aE1MIGJ1aWxkZXJzIGZvciBhIGZ1bmN0aW9uIChlLmcuXG4gKiBpZiB0aGUgZnVuY3Rpb24ncyBQYXJzZU5vZGUgaXMgZ2VuZXJhdGVkIGluIFBhcnNlci5qcyByYXRoZXIgdGhhbiB2aWEgYVxuICogc3RhbmQtYWxvbmUgaGFuZGxlciBwcm92aWRlZCB0byBgZGVmaW5lRnVuY3Rpb25gKS5cbiAqL1xuXG5mdW5jdGlvbiBkZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKF9yZWYyKSB7XG4gIHZhciB0eXBlID0gX3JlZjIudHlwZSxcbiAgICAgIGh0bWxCdWlsZGVyID0gX3JlZjIuaHRtbEJ1aWxkZXIsXG4gICAgICBtYXRobWxCdWlsZGVyID0gX3JlZjIubWF0aG1sQnVpbGRlcjtcbiAgZGVmaW5lRnVuY3Rpb24oe1xuICAgIHR5cGU6IHR5cGUsXG4gICAgbmFtZXM6IFtdLFxuICAgIHByb3BzOiB7XG4gICAgICBudW1BcmdzOiAwXG4gICAgfSxcbiAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaG91bGQgbmV2ZXIgYmUgY2FsbGVkLicpO1xuICAgIH0sXG4gICAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyLFxuICAgIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXJcbiAgfSk7XG59IC8vIFNpbmNlIHRoZSBjb3JyZXNwb25kaW5nIGJ1aWxkSFRNTC9idWlsZE1hdGhNTCBmdW5jdGlvbiBleHBlY3RzIGFcbi8vIGxpc3Qgb2YgZWxlbWVudHMsIHdlIG5vcm1hbGl6ZSBmb3IgZGlmZmVyZW50IGtpbmRzIG9mIGFyZ3VtZW50c1xuXG52YXIgZGVmaW5lRnVuY3Rpb25fb3JkYXJndW1lbnQgPSBmdW5jdGlvbiBvcmRhcmd1bWVudChhcmcpIHtcbiAgdmFyIG5vZGUgPSBjaGVja05vZGVUeXBlKGFyZywgXCJvcmRncm91cFwiKTtcbiAgcmV0dXJuIG5vZGUgPyBub2RlLmJvZHkgOiBbYXJnXTtcbn07XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9idWlsZEhUTUwuanNcbi8qKlxuICogVGhpcyBmaWxlIGRvZXMgdGhlIG1haW4gd29yayBvZiBidWlsZGluZyBhIGRvbVRyZWUgc3RydWN0dXJlIGZyb20gYSBwYXJzZVxuICogdHJlZS4gVGhlIGVudHJ5IHBvaW50IGlzIHRoZSBgYnVpbGRIVE1MYCBmdW5jdGlvbiwgd2hpY2ggdGFrZXMgYSBwYXJzZSB0cmVlLlxuICogVGhlbiwgdGhlIGJ1aWxkRXhwcmVzc2lvbiwgYnVpbGRHcm91cCwgYW5kIHZhcmlvdXMgZ3JvdXBCdWlsZGVycyBmdW5jdGlvbnNcbiAqIGFyZSBjYWxsZWQsIHRvIHByb2R1Y2UgYSBmaW5hbCBIVE1MIHRyZWUuXG4gKi9cblxuXG5cblxuXG5cblxuXG5cbnZhciBidWlsZEhUTUxfbWFrZVNwYW4gPSBidWlsZENvbW1vbi5tYWtlU3BhbjsgLy8gQmluYXJ5IGF0b21zIChmaXJzdCBjbGFzcyBgbWJpbmApIGNoYW5nZSBpbnRvIG9yZGluYXJ5IGF0b21zIChgbW9yZGApXG4vLyBkZXBlbmRpbmcgb24gdGhlaXIgc3Vycm91bmRpbmdzLiBTZWUgVGVYYm9vayBwZy4gNDQyLTQ0NiwgUnVsZXMgNSBhbmQgNixcbi8vIGFuZCB0aGUgdGV4dCBiZWZvcmUgUnVsZSAxOS5cblxudmFyIGJpbkxlZnRDYW5jZWxsZXIgPSBbXCJsZWZ0bW9zdFwiLCBcIm1iaW5cIiwgXCJtb3BlblwiLCBcIm1yZWxcIiwgXCJtb3BcIiwgXCJtcHVuY3RcIl07XG52YXIgYmluUmlnaHRDYW5jZWxsZXIgPSBbXCJyaWdodG1vc3RcIiwgXCJtcmVsXCIsIFwibWNsb3NlXCIsIFwibXB1bmN0XCJdO1xudmFyIHN0eWxlTWFwID0ge1xuICBcImRpc3BsYXlcIjogc3JjX1N0eWxlLkRJU1BMQVksXG4gIFwidGV4dFwiOiBzcmNfU3R5bGUuVEVYVCxcbiAgXCJzY3JpcHRcIjogc3JjX1N0eWxlLlNDUklQVCxcbiAgXCJzY3JpcHRzY3JpcHRcIjogc3JjX1N0eWxlLlNDUklQVFNDUklQVFxufTtcbnZhciBEb21FbnVtID0ge1xuICBtb3JkOiBcIm1vcmRcIixcbiAgbW9wOiBcIm1vcFwiLFxuICBtYmluOiBcIm1iaW5cIixcbiAgbXJlbDogXCJtcmVsXCIsXG4gIG1vcGVuOiBcIm1vcGVuXCIsXG4gIG1jbG9zZTogXCJtY2xvc2VcIixcbiAgbXB1bmN0OiBcIm1wdW5jdFwiLFxuICBtaW5uZXI6IFwibWlubmVyXCJcbn07XG5cbi8qKlxuICogVGFrZSBhIGxpc3Qgb2Ygbm9kZXMsIGJ1aWxkIHRoZW0gaW4gb3JkZXIsIGFuZCByZXR1cm4gYSBsaXN0IG9mIHRoZSBidWlsdFxuICogbm9kZXMuIGRvY3VtZW50RnJhZ21lbnRzIGFyZSBmbGF0dGVuZWQgaW50byB0aGVpciBjb250ZW50cywgc28gdGhlXG4gKiByZXR1cm5lZCBsaXN0IGNvbnRhaW5zIG5vIGZyYWdtZW50cy4gYGlzUmVhbEdyb3VwYCBpcyB0cnVlIGlmIGBleHByZXNzaW9uYFxuICogaXMgYSByZWFsIGdyb3VwIChubyBhdG9tcyB3aWxsIGJlIGFkZGVkIG9uIGVpdGhlciBzaWRlKSwgYXMgb3Bwb3NlZCB0b1xuICogYSBwYXJ0aWFsIGdyb3VwIChlLmcuIG9uZSBjcmVhdGVkIGJ5IFxcY29sb3IpLiBgc3Vycm91bmRpbmdgIGlzIGFuIGFycmF5XG4gKiBjb25zaXN0aW5nIHR5cGUgb2Ygbm9kZXMgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBsZWZ0IGFuZCByaWdodC5cbiAqL1xudmFyIGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24gPSBmdW5jdGlvbiBidWlsZEV4cHJlc3Npb24oZXhwcmVzc2lvbiwgb3B0aW9ucywgaXNSZWFsR3JvdXAsIHN1cnJvdW5kaW5nKSB7XG4gIGlmIChzdXJyb3VuZGluZyA9PT0gdm9pZCAwKSB7XG4gICAgc3Vycm91bmRpbmcgPSBbbnVsbCwgbnVsbF07XG4gIH1cblxuICAvLyBQYXJzZSBleHByZXNzaW9ucyBpbnRvIGBncm91cHNgLlxuICB2YXIgZ3JvdXBzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9uLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG91dHB1dCA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKGV4cHJlc3Npb25baV0sIG9wdGlvbnMpO1xuXG4gICAgaWYgKG91dHB1dCBpbnN0YW5jZW9mIHRyZWVfRG9jdW1lbnRGcmFnbWVudCkge1xuICAgICAgdmFyIGNoaWxkcmVuID0gb3V0cHV0LmNoaWxkcmVuO1xuICAgICAgZ3JvdXBzLnB1c2guYXBwbHkoZ3JvdXBzLCBjaGlsZHJlbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdyb3Vwcy5wdXNoKG91dHB1dCk7XG4gICAgfVxuICB9IC8vIElmIGBleHByZXNzaW9uYCBpcyBhIHBhcnRpYWwgZ3JvdXAsIGxldCB0aGUgcGFyZW50IGhhbmRsZSBzcGFjaW5nc1xuICAvLyB0byBhdm9pZCBwcm9jZXNzaW5nIGdyb3VwcyBtdWx0aXBsZSB0aW1lcy5cblxuXG4gIGlmICghaXNSZWFsR3JvdXApIHtcbiAgICByZXR1cm4gZ3JvdXBzO1xuICB9XG5cbiAgdmFyIGdsdWVPcHRpb25zID0gb3B0aW9ucztcblxuICBpZiAoZXhwcmVzc2lvbi5sZW5ndGggPT09IDEpIHtcbiAgICB2YXIgbm9kZSA9IGNoZWNrTm9kZVR5cGUoZXhwcmVzc2lvblswXSwgXCJzaXppbmdcIikgfHwgY2hlY2tOb2RlVHlwZShleHByZXNzaW9uWzBdLCBcInN0eWxpbmdcIik7XG5cbiAgICBpZiAoIW5vZGUpIHsvLyBObyBtYXRjaC5cbiAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gXCJzaXppbmdcIikge1xuICAgICAgZ2x1ZU9wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1NpemUobm9kZS5zaXplKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gXCJzdHlsaW5nXCIpIHtcbiAgICAgIGdsdWVPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShzdHlsZU1hcFtub2RlLnN0eWxlXSk7XG4gICAgfVxuICB9IC8vIER1bW15IHNwYW5zIGZvciBkZXRlcm1pbmluZyBzcGFjaW5ncyBiZXR3ZWVuIHN1cnJvdW5kaW5nIGF0b21zLlxuICAvLyBJZiBgZXhwcmVzc2lvbmAgaGFzIG5vIGF0b21zIG9uIHRoZSBsZWZ0IG9yIHJpZ2h0LCBjbGFzcyBcImxlZnRtb3N0XCJcbiAgLy8gb3IgXCJyaWdodG1vc3RcIiwgcmVzcGVjdGl2ZWx5LCBpcyB1c2VkIHRvIGluZGljYXRlIGl0LlxuXG5cbiAgdmFyIGR1bW15UHJldiA9IGJ1aWxkSFRNTF9tYWtlU3Bhbihbc3Vycm91bmRpbmdbMF0gfHwgXCJsZWZ0bW9zdFwiXSwgW10sIG9wdGlvbnMpO1xuICB2YXIgZHVtbXlOZXh0ID0gYnVpbGRIVE1MX21ha2VTcGFuKFtzdXJyb3VuZGluZ1sxXSB8fCBcInJpZ2h0bW9zdFwiXSwgW10sIG9wdGlvbnMpOyAvLyBUT0RPOiBUaGVzZSBjb2RlIGFzc3VtZXMgdGhhdCBhIG5vZGUncyBtYXRoIGNsYXNzIGlzIHRoZSBmaXJzdCBlbGVtZW50XG4gIC8vIG9mIGl0cyBgY2xhc3Nlc2AgYXJyYXkuIEEgbGF0ZXIgY2xlYW51cCBzaG91bGQgZW5zdXJlIHRoaXMsIGZvclxuICAvLyBpbnN0YW5jZSBieSBjaGFuZ2luZyB0aGUgc2lnbmF0dXJlIG9mIGBtYWtlU3BhbmAuXG4gIC8vIEJlZm9yZSBkZXRlcm1pbmluZyB3aGF0IHNwYWNlcyB0byBpbnNlcnQsIHBlcmZvcm0gYmluIGNhbmNlbGxhdGlvbi5cbiAgLy8gQmluYXJ5IG9wZXJhdG9ycyBjaGFuZ2UgdG8gb3JkaW5hcnkgc3ltYm9scyBpbiBzb21lIGNvbnRleHRzLlxuXG4gIHRyYXZlcnNlTm9uU3BhY2VOb2Rlcyhncm91cHMsIGZ1bmN0aW9uIChub2RlLCBwcmV2KSB7XG4gICAgdmFyIHByZXZUeXBlID0gcHJldi5jbGFzc2VzWzBdO1xuICAgIHZhciB0eXBlID0gbm9kZS5jbGFzc2VzWzBdO1xuXG4gICAgaWYgKHByZXZUeXBlID09PSBcIm1iaW5cIiAmJiB1dGlscy5jb250YWlucyhiaW5SaWdodENhbmNlbGxlciwgdHlwZSkpIHtcbiAgICAgIHByZXYuY2xhc3Nlc1swXSA9IFwibW9yZFwiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJtYmluXCIgJiYgdXRpbHMuY29udGFpbnMoYmluTGVmdENhbmNlbGxlciwgcHJldlR5cGUpKSB7XG4gICAgICBub2RlLmNsYXNzZXNbMF0gPSBcIm1vcmRcIjtcbiAgICB9XG4gIH0sIHtcbiAgICBub2RlOiBkdW1teVByZXZcbiAgfSwgZHVtbXlOZXh0KTtcbiAgdHJhdmVyc2VOb25TcGFjZU5vZGVzKGdyb3VwcywgZnVuY3Rpb24gKG5vZGUsIHByZXYpIHtcbiAgICB2YXIgcHJldlR5cGUgPSBnZXRUeXBlT2ZEb21UcmVlKHByZXYpO1xuICAgIHZhciB0eXBlID0gZ2V0VHlwZU9mRG9tVHJlZShub2RlKTsgLy8gJ210aWdodCcgaW5kaWNhdGVzIHRoYXQgdGhlIG5vZGUgaXMgc2NyaXB0IG9yIHNjcmlwdHNjcmlwdCBzdHlsZS5cblxuICAgIHZhciBzcGFjZSA9IHByZXZUeXBlICYmIHR5cGUgPyBub2RlLmhhc0NsYXNzKFwibXRpZ2h0XCIpID8gdGlnaHRTcGFjaW5nc1twcmV2VHlwZV1bdHlwZV0gOiBzcGFjaW5nc1twcmV2VHlwZV1bdHlwZV0gOiBudWxsO1xuXG4gICAgaWYgKHNwYWNlKSB7XG4gICAgICAvLyBJbnNlcnQgZ2x1ZSAoc3BhY2luZykgYWZ0ZXIgdGhlIGBwcmV2YC5cbiAgICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlR2x1ZShzcGFjZSwgZ2x1ZU9wdGlvbnMpO1xuICAgIH1cbiAgfSwge1xuICAgIG5vZGU6IGR1bW15UHJldlxuICB9LCBkdW1teU5leHQpO1xuICByZXR1cm4gZ3JvdXBzO1xufTsgLy8gRGVwdGgtZmlyc3QgdHJhdmVyc2Ugbm9uLXNwYWNlIGBub2Rlc2AsIGNhbGxpbmcgYGNhbGxiYWNrYCB3aXRoIHRoZSBjdXJyZW50IGFuZFxuLy8gcHJldmlvdXMgbm9kZSBhcyBhcmd1bWVudHMsIG9wdGlvbmFsbHkgcmV0dXJuaW5nIGEgbm9kZSB0byBpbnNlcnQgYWZ0ZXIgdGhlXG4vLyBwcmV2aW91cyBub2RlLiBgcHJldmAgaXMgYW4gb2JqZWN0IHdpdGggdGhlIHByZXZpb3VzIG5vZGUgYW5kIGBpbnNlcnRBZnRlcmBcbi8vIGZ1bmN0aW9uIHRvIGluc2VydCBhZnRlciBpdC4gYG5leHRgIGlzIGEgbm9kZSB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHJpZ2h0LlxuLy8gVXNlZCBmb3IgYmluIGNhbmNlbGxhdGlvbiBhbmQgaW5zZXJ0aW5nIHNwYWNpbmdzLlxuXG52YXIgdHJhdmVyc2VOb25TcGFjZU5vZGVzID0gZnVuY3Rpb24gdHJhdmVyc2VOb25TcGFjZU5vZGVzKG5vZGVzLCBjYWxsYmFjaywgcHJldiwgbmV4dCkge1xuICBpZiAobmV4dCkge1xuICAgIC8vIHRlbXBvcmFyaWx5IGFwcGVuZCB0aGUgcmlnaHQgbm9kZSwgaWYgZXhpc3RzXG4gICAgbm9kZXMucHVzaChuZXh0KTtcbiAgfVxuXG4gIHZhciBpID0gMDtcblxuICBmb3IgKDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICB2YXIgcGFydGlhbEdyb3VwID0gYnVpbGRIVE1MX2NoZWNrUGFydGlhbEdyb3VwKG5vZGUpO1xuXG4gICAgaWYgKHBhcnRpYWxHcm91cCkge1xuICAgICAgLy8gUmVjdXJzaXZlIERGU1xuICAgICAgLy8gJEZsb3dGaXhNZTogbWFrZSBub2RlcyBhICRSZWFkT25seUFycmF5IGJ5IHJldHVybmluZyBhIG5ldyBhcnJheVxuICAgICAgdHJhdmVyc2VOb25TcGFjZU5vZGVzKHBhcnRpYWxHcm91cC5jaGlsZHJlbiwgY2FsbGJhY2ssIHByZXYpO1xuICAgICAgY29udGludWU7XG4gICAgfSAvLyBJZ25vcmUgZXhwbGljaXQgc3BhY2VzIChlLmcuLCBcXDssIFxcLCkgd2hlbiBkZXRlcm1pbmluZyB3aGF0IGltcGxpY2l0XG4gICAgLy8gc3BhY2luZyBzaG91bGQgZ28gYmV0d2VlbiBhdG9tcyBvZiBkaWZmZXJlbnQgY2xhc3Nlc1xuXG5cbiAgICBpZiAobm9kZS5jbGFzc2VzWzBdID09PSBcIm1zcGFjZVwiKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0ID0gY2FsbGJhY2sobm9kZSwgcHJldi5ub2RlKTtcblxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIGlmIChwcmV2Lmluc2VydEFmdGVyKSB7XG4gICAgICAgIHByZXYuaW5zZXJ0QWZ0ZXIocmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGluc2VydCBhdCBmcm9udFxuICAgICAgICBub2Rlcy51bnNoaWZ0KHJlc3VsdCk7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcmV2Lm5vZGUgPSBub2RlO1xuXG4gICAgcHJldi5pbnNlcnRBZnRlciA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChuKSB7XG4gICAgICAgIG5vZGVzLnNwbGljZShpbmRleCArIDEsIDAsIG4pO1xuICAgICAgICBpKys7XG4gICAgICB9O1xuICAgIH0oaSk7XG4gIH1cblxuICBpZiAobmV4dCkge1xuICAgIG5vZGVzLnBvcCgpO1xuICB9XG59OyAvLyBDaGVjayBpZiBnaXZlbiBub2RlIGlzIGEgcGFydGlhbCBncm91cCwgaS5lLiwgZG9lcyBub3QgYWZmZWN0IHNwYWNpbmcgYXJvdW5kLlxuXG5cbnZhciBidWlsZEhUTUxfY2hlY2tQYXJ0aWFsR3JvdXAgPSBmdW5jdGlvbiBjaGVja1BhcnRpYWxHcm91cChub2RlKSB7XG4gIGlmIChub2RlIGluc3RhbmNlb2YgdHJlZV9Eb2N1bWVudEZyYWdtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBkb21UcmVlX0FuY2hvcikge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59OyAvLyBSZXR1cm4gdGhlIG91dGVybW9zdCBub2RlIG9mIGEgZG9tVHJlZS5cblxuXG52YXIgZ2V0T3V0ZXJtb3N0Tm9kZSA9IGZ1bmN0aW9uIGdldE91dGVybW9zdE5vZGUobm9kZSwgc2lkZSkge1xuICB2YXIgcGFydGlhbEdyb3VwID0gYnVpbGRIVE1MX2NoZWNrUGFydGlhbEdyb3VwKG5vZGUpO1xuXG4gIGlmIChwYXJ0aWFsR3JvdXApIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBwYXJ0aWFsR3JvdXAuY2hpbGRyZW47XG5cbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBpZiAoc2lkZSA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgIHJldHVybiBnZXRPdXRlcm1vc3ROb2RlKGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdLCBcInJpZ2h0XCIpO1xuICAgICAgfSBlbHNlIGlmIChzaWRlID09PSBcImxlZnRcIikge1xuICAgICAgICByZXR1cm4gZ2V0T3V0ZXJtb3N0Tm9kZShjaGlsZHJlblswXSwgXCJsZWZ0XCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub2RlO1xufTsgLy8gUmV0dXJuIG1hdGggYXRvbSBjbGFzcyAobWNsYXNzKSBvZiBhIGRvbVRyZWUuXG4vLyBJZiBgc2lkZWAgaXMgZ2l2ZW4sIGl0IHdpbGwgZ2V0IHRoZSB0eXBlIG9mIHRoZSBvdXRlcm1vc3Qgbm9kZSBhdCBnaXZlbiBzaWRlLlxuXG5cbnZhciBnZXRUeXBlT2ZEb21UcmVlID0gZnVuY3Rpb24gZ2V0VHlwZU9mRG9tVHJlZShub2RlLCBzaWRlKSB7XG4gIGlmICghbm9kZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHNpZGUpIHtcbiAgICBub2RlID0gZ2V0T3V0ZXJtb3N0Tm9kZShub2RlLCBzaWRlKTtcbiAgfSAvLyBUaGlzIG1ha2VzIGEgbG90IG9mIGFzc3VtcHRpb25zIGFzIHRvIHdoZXJlIHRoZSB0eXBlIG9mIGF0b21cbiAgLy8gYXBwZWFycy4gIFdlIHNob3VsZCBkbyBhIGJldHRlciBqb2Igb2YgZW5mb3JjaW5nIHRoaXMuXG5cblxuICByZXR1cm4gRG9tRW51bVtub2RlLmNsYXNzZXNbMF1dIHx8IG51bGw7XG59O1xudmFyIG1ha2VOdWxsRGVsaW1pdGVyID0gZnVuY3Rpb24gbWFrZU51bGxEZWxpbWl0ZXIob3B0aW9ucywgY2xhc3Nlcykge1xuICB2YXIgbW9yZUNsYXNzZXMgPSBbXCJudWxsZGVsaW1pdGVyXCJdLmNvbmNhdChvcHRpb25zLmJhc2VTaXppbmdDbGFzc2VzKCkpO1xuICByZXR1cm4gYnVpbGRIVE1MX21ha2VTcGFuKGNsYXNzZXMuY29uY2F0KG1vcmVDbGFzc2VzKSk7XG59O1xuLyoqXG4gKiBidWlsZEdyb3VwIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgZ3JvdXAgYW5kIGNhbGxzIHRoZSBjb3JyZWN0IGdyb3VwVHlwZVxuICogZnVuY3Rpb24gZm9yIGl0LiBJdCBhbHNvIGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIG9mIHNpemUgYW5kIHN0eWxlIGNoYW5nZXNcbiAqIGJldHdlZW4gcGFyZW50cyBhbmQgY2hpbGRyZW4uXG4gKi9cblxudmFyIGJ1aWxkSFRNTF9idWlsZEdyb3VwID0gZnVuY3Rpb24gYnVpbGRHcm91cChncm91cCwgb3B0aW9ucywgYmFzZU9wdGlvbnMpIHtcbiAgaWYgKCFncm91cCkge1xuICAgIHJldHVybiBidWlsZEhUTUxfbWFrZVNwYW4oKTtcbiAgfVxuXG4gIGlmIChfaHRtbEdyb3VwQnVpbGRlcnNbZ3JvdXAudHlwZV0pIHtcbiAgICAvLyBDYWxsIHRoZSBncm91cEJ1aWxkZXJzIGZ1bmN0aW9uXG4gICAgdmFyIGdyb3VwTm9kZSA9IF9odG1sR3JvdXBCdWlsZGVyc1tncm91cC50eXBlXShncm91cCwgb3B0aW9ucyk7IC8vIElmIHRoZSBzaXplIGNoYW5nZWQgYmV0d2VlbiB0aGUgcGFyZW50IGFuZCB0aGUgY3VycmVudCBncm91cCwgYWNjb3VudFxuICAgIC8vIGZvciB0aGF0IHNpemUgZGlmZmVyZW5jZS5cblxuICAgIGlmIChiYXNlT3B0aW9ucyAmJiBvcHRpb25zLnNpemUgIT09IGJhc2VPcHRpb25zLnNpemUpIHtcbiAgICAgIGdyb3VwTm9kZSA9IGJ1aWxkSFRNTF9tYWtlU3BhbihvcHRpb25zLnNpemluZ0NsYXNzZXMoYmFzZU9wdGlvbnMpLCBbZ3JvdXBOb2RlXSwgb3B0aW9ucyk7XG4gICAgICB2YXIgbXVsdGlwbGllciA9IG9wdGlvbnMuc2l6ZU11bHRpcGxpZXIgLyBiYXNlT3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgICAgIGdyb3VwTm9kZS5oZWlnaHQgKj0gbXVsdGlwbGllcjtcbiAgICAgIGdyb3VwTm9kZS5kZXB0aCAqPSBtdWx0aXBsaWVyO1xuICAgIH1cblxuICAgIHJldHVybiBncm91cE5vZGU7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiR290IGdyb3VwIG9mIHVua25vd24gdHlwZTogJ1wiICsgZ3JvdXAudHlwZSArIFwiJ1wiKTtcbiAgfVxufTtcbi8qKlxuICogQ29tYmluZSBhbiBhcnJheSBvZiBIVE1MIERPTSBub2RlcyAoZS5nLiwgdGhlIG91dHB1dCBvZiBgYnVpbGRFeHByZXNzaW9uYClcbiAqIGludG8gYW4gdW5icmVha2FibGUgSFRNTCBub2RlIG9mIGNsYXNzIC5iYXNlLCB3aXRoIHByb3BlciBzdHJ1dHMgdG9cbiAqIGd1YXJhbnRlZSBjb3JyZWN0IHZlcnRpY2FsIGV4dGVudC4gIGBidWlsZEhUTUxgIGNhbGxzIHRoaXMgcmVwZWF0ZWRseSB0b1xuICogbWFrZSB1cCB0aGUgZW50aXJlIGV4cHJlc3Npb24gYXMgYSBzZXF1ZW5jZSBvZiB1bmJyZWFrYWJsZSB1bml0cy5cbiAqL1xuXG5mdW5jdGlvbiBidWlsZEhUTUxVbmJyZWFrYWJsZShjaGlsZHJlbiwgb3B0aW9ucykge1xuICAvLyBDb21wdXRlIGhlaWdodCBhbmQgZGVwdGggb2YgdGhpcyBjaHVuay5cbiAgdmFyIGJvZHkgPSBidWlsZEhUTUxfbWFrZVNwYW4oW1wiYmFzZVwiXSwgY2hpbGRyZW4sIG9wdGlvbnMpOyAvLyBBZGQgc3RydXQsIHdoaWNoIGVuc3VyZXMgdGhhdCB0aGUgdG9wIG9mIHRoZSBIVE1MIGVsZW1lbnQgZmFsbHMgYXRcbiAgLy8gdGhlIGhlaWdodCBvZiB0aGUgZXhwcmVzc2lvbiwgYW5kIHRoZSBib3R0b20gb2YgdGhlIEhUTUwgZWxlbWVudFxuICAvLyBmYWxscyBhdCB0aGUgZGVwdGggb2YgdGhlIGV4cHJlc3Npb24uXG4gIC8vIFdlIHVzZWQgdG8gaGF2ZSBzZXBhcmF0ZSB0b3AgYW5kIGJvdHRvbSBzdHJ1dHMsIHdoZXJlIHRoZSBib3R0b20gc3RydXRcbiAgLy8gd291bGQgbGlrZSB0byB1c2UgYHZlcnRpY2FsLWFsaWduOiB0b3BgLCBidXQgaW4gSUUgOSB0aGlzIGxvd2VycyB0aGVcbiAgLy8gYmFzZWxpbmUgb2YgdGhlIGJveCB0byB0aGUgYm90dG9tIG9mIHRoaXMgc3RydXQgKGluc3RlYWQgb2Ygc3RheWluZyBpblxuICAvLyB0aGUgbm9ybWFsIHBsYWNlKSBzbyB3ZSB1c2UgYW4gYWJzb2x1dGUgdmFsdWUgZm9yIHZlcnRpY2FsLWFsaWduIGluc3RlYWQuXG5cbiAgdmFyIHN0cnV0ID0gYnVpbGRIVE1MX21ha2VTcGFuKFtcInN0cnV0XCJdKTtcbiAgc3RydXQuc3R5bGUuaGVpZ2h0ID0gYm9keS5oZWlnaHQgKyBib2R5LmRlcHRoICsgXCJlbVwiO1xuICBzdHJ1dC5zdHlsZS52ZXJ0aWNhbEFsaWduID0gLWJvZHkuZGVwdGggKyBcImVtXCI7XG4gIGJvZHkuY2hpbGRyZW4udW5zaGlmdChzdHJ1dCk7XG4gIHJldHVybiBib2R5O1xufVxuLyoqXG4gKiBUYWtlIGFuIGVudGlyZSBwYXJzZSB0cmVlLCBhbmQgYnVpbGQgaXQgaW50byBhbiBhcHByb3ByaWF0ZSBzZXQgb2YgSFRNTFxuICogbm9kZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBidWlsZEhUTUwodHJlZSwgb3B0aW9ucykge1xuICAvLyBTdHJpcCBvZmYgb3V0ZXIgdGFnIHdyYXBwZXIgZm9yIHByb2Nlc3NpbmcgYmVsb3cuXG4gIHZhciB0YWcgPSBudWxsO1xuXG4gIGlmICh0cmVlLmxlbmd0aCA9PT0gMSAmJiB0cmVlWzBdLnR5cGUgPT09IFwidGFnXCIpIHtcbiAgICB0YWcgPSB0cmVlWzBdLnRhZztcbiAgICB0cmVlID0gdHJlZVswXS5ib2R5O1xuICB9IC8vIEJ1aWxkIHRoZSBleHByZXNzaW9uIGNvbnRhaW5lZCBpbiB0aGUgdHJlZVxuXG5cbiAgdmFyIGV4cHJlc3Npb24gPSBidWlsZEhUTUxfYnVpbGRFeHByZXNzaW9uKHRyZWUsIG9wdGlvbnMsIHRydWUpO1xuICB2YXIgY2hpbGRyZW4gPSBbXTsgLy8gQ3JlYXRlIG9uZSBiYXNlIG5vZGUgZm9yIGVhY2ggY2h1bmsgYmV0d2VlbiBwb3RlbnRpYWwgbGluZSBicmVha3MuXG4gIC8vIFRoZSBUZVhCb29rIFtwLjE3M10gc2F5cyBcIkEgZm9ybXVsYSB3aWxsIGJlIGJyb2tlbiBvbmx5IGFmdGVyIGFcbiAgLy8gcmVsYXRpb24gc3ltYm9sIGxpa2UgJD0kIG9yICQ8JCBvciAkXFxyaWdodGFycm93JCwgb3IgYWZ0ZXIgYSBiaW5hcnlcbiAgLy8gb3BlcmF0aW9uIHN5bWJvbCBsaWtlICQrJCBvciAkLSQgb3IgJFxcdGltZXMkLCB3aGVyZSB0aGUgcmVsYXRpb24gb3JcbiAgLy8gYmluYXJ5IG9wZXJhdGlvbiBpcyBvbiB0aGUgYGBvdXRlciBsZXZlbCcnIG9mIHRoZSBmb3JtdWxhIChpLmUuLCBub3RcbiAgLy8gZW5jbG9zZWQgaW4gey4uLn0gYW5kIG5vdCBwYXJ0IG9mIGFuIFxcb3ZlciBjb25zdHJ1Y3Rpb24pLlwiXG5cbiAgdmFyIHBhcnRzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9uLmxlbmd0aDsgaSsrKSB7XG4gICAgcGFydHMucHVzaChleHByZXNzaW9uW2ldKTtcblxuICAgIGlmIChleHByZXNzaW9uW2ldLmhhc0NsYXNzKFwibWJpblwiKSB8fCBleHByZXNzaW9uW2ldLmhhc0NsYXNzKFwibXJlbFwiKSB8fCBleHByZXNzaW9uW2ldLmhhc0NsYXNzKFwiYWxsb3dicmVha1wiKSkge1xuICAgICAgLy8gUHV0IGFueSBwb3N0LW9wZXJhdG9yIGdsdWUgb24gc2FtZSBsaW5lIGFzIG9wZXJhdG9yLlxuICAgICAgLy8gV2F0Y2ggZm9yIFxcbm9icmVhayBhbG9uZyB0aGUgd2F5LCBhbmQgc3RvcCBhdCBcXG5ld2xpbmUuXG4gICAgICB2YXIgbm9icmVhayA9IGZhbHNlO1xuXG4gICAgICB3aGlsZSAoaSA8IGV4cHJlc3Npb24ubGVuZ3RoIC0gMSAmJiBleHByZXNzaW9uW2kgKyAxXS5oYXNDbGFzcyhcIm1zcGFjZVwiKSAmJiAhZXhwcmVzc2lvbltpICsgMV0uaGFzQ2xhc3MoXCJuZXdsaW5lXCIpKSB7XG4gICAgICAgIGkrKztcbiAgICAgICAgcGFydHMucHVzaChleHByZXNzaW9uW2ldKTtcblxuICAgICAgICBpZiAoZXhwcmVzc2lvbltpXS5oYXNDbGFzcyhcIm5vYnJlYWtcIikpIHtcbiAgICAgICAgICBub2JyZWFrID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBEb24ndCBhbGxvdyBicmVhayBpZiBcXG5vYnJlYWsgYW1vbmcgdGhlIHBvc3Qtb3BlcmF0b3IgZ2x1ZS5cblxuXG4gICAgICBpZiAoIW5vYnJlYWspIHtcbiAgICAgICAgY2hpbGRyZW4ucHVzaChidWlsZEhUTUxVbmJyZWFrYWJsZShwYXJ0cywgb3B0aW9ucykpO1xuICAgICAgICBwYXJ0cyA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbltpXS5oYXNDbGFzcyhcIm5ld2xpbmVcIikpIHtcbiAgICAgIC8vIFdyaXRlIHRoZSBsaW5lIGV4Y2VwdCB0aGUgbmV3bGluZVxuICAgICAgcGFydHMucG9wKCk7XG5cbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNoaWxkcmVuLnB1c2goYnVpbGRIVE1MVW5icmVha2FibGUocGFydHMsIG9wdGlvbnMpKTtcbiAgICAgICAgcGFydHMgPSBbXTtcbiAgICAgIH0gLy8gUHV0IHRoZSBuZXdsaW5lIGF0IHRoZSB0b3AgbGV2ZWxcblxuXG4gICAgICBjaGlsZHJlbi5wdXNoKGV4cHJlc3Npb25baV0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgY2hpbGRyZW4ucHVzaChidWlsZEhUTUxVbmJyZWFrYWJsZShwYXJ0cywgb3B0aW9ucykpO1xuICB9IC8vIE5vdywgaWYgdGhlcmUgd2FzIGEgdGFnLCBidWlsZCBpdCB0b28gYW5kIGFwcGVuZCBpdCBhcyBhIGZpbmFsIGNoaWxkLlxuXG5cbiAgdmFyIHRhZ0NoaWxkO1xuXG4gIGlmICh0YWcpIHtcbiAgICB0YWdDaGlsZCA9IGJ1aWxkSFRNTFVuYnJlYWthYmxlKGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24odGFnLCBvcHRpb25zLCB0cnVlKSk7XG4gICAgdGFnQ2hpbGQuY2xhc3NlcyA9IFtcInRhZ1wiXTtcbiAgICBjaGlsZHJlbi5wdXNoKHRhZ0NoaWxkKTtcbiAgfVxuXG4gIHZhciBodG1sTm9kZSA9IGJ1aWxkSFRNTF9tYWtlU3BhbihbXCJrYXRleC1odG1sXCJdLCBjaGlsZHJlbik7XG4gIGh0bWxOb2RlLnNldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIsIFwidHJ1ZVwiKTsgLy8gQWRqdXN0IHRoZSBzdHJ1dCBvZiB0aGUgdGFnIHRvIGJlIHRoZSBtYXhpbXVtIGhlaWdodCBvZiBhbGwgY2hpbGRyZW5cbiAgLy8gKHRoZSBoZWlnaHQgb2YgdGhlIGVuY2xvc2luZyBodG1sTm9kZSkgZm9yIHByb3BlciB2ZXJ0aWNhbCBhbGlnbm1lbnQuXG5cbiAgaWYgKHRhZ0NoaWxkKSB7XG4gICAgdmFyIHN0cnV0ID0gdGFnQ2hpbGQuY2hpbGRyZW5bMF07XG4gICAgc3RydXQuc3R5bGUuaGVpZ2h0ID0gaHRtbE5vZGUuaGVpZ2h0ICsgaHRtbE5vZGUuZGVwdGggKyBcImVtXCI7XG4gICAgc3RydXQuc3R5bGUudmVydGljYWxBbGlnbiA9IC1odG1sTm9kZS5kZXB0aCArIFwiZW1cIjtcbiAgfVxuXG4gIHJldHVybiBodG1sTm9kZTtcbn1cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL21hdGhNTFRyZWUuanNcbi8qKlxuICogVGhlc2Ugb2JqZWN0cyBzdG9yZSBkYXRhIGFib3V0IE1hdGhNTCBub2Rlcy4gVGhpcyBpcyB0aGUgTWF0aE1MIGVxdWl2YWxlbnRcbiAqIG9mIHRoZSB0eXBlcyBpbiBkb21UcmVlLmpzLiBTaW5jZSBNYXRoTUwgaGFuZGxlcyBpdHMgb3duIHJlbmRlcmluZywgYW5kXG4gKiBzaW5jZSB3ZSdyZSBtYWlubHkgdXNpbmcgTWF0aE1MIHRvIGltcHJvdmUgYWNjZXNzaWJpbGl0eSwgd2UgZG9uJ3QgbWFuYWdlXG4gKiBhbnkgb2YgdGhlIHN0eWxpbmcgc3RhdGUgdGhhdCB0aGUgcGxhaW4gRE9NIG5vZGVzIGRvLlxuICpcbiAqIFRoZSBgdG9Ob2RlYCBhbmQgYHRvTWFya3VwYCBmdW5jdGlvbnMgd29yayBzaW1sYXJseSB0byBob3cgdGhleSBkbyBpblxuICogZG9tVHJlZS5qcywgY3JlYXRpbmcgbmFtZXNwYWNlZCBET00gbm9kZXMgYW5kIEhUTUwgdGV4dCBtYXJrdXAgcmVzcGVjdGl2ZWx5LlxuICovXG5cblxuZnVuY3Rpb24gbmV3RG9jdW1lbnRGcmFnbWVudChjaGlsZHJlbikge1xuICByZXR1cm4gbmV3IHRyZWVfRG9jdW1lbnRGcmFnbWVudChjaGlsZHJlbik7XG59XG4vKipcbiAqIFRoaXMgbm9kZSByZXByZXNlbnRzIGEgZ2VuZXJhbCBwdXJwb3NlIE1hdGhNTCBub2RlIG9mIGFueSB0eXBlLiBUaGVcbiAqIGNvbnN0cnVjdG9yIHJlcXVpcmVzIHRoZSB0eXBlIG9mIG5vZGUgdG8gY3JlYXRlIChmb3IgZXhhbXBsZSwgYFwibW9cImAgb3JcbiAqIGBcIm1zcGFjZVwiYCwgY29ycmVzcG9uZGluZyB0byBgPG1vPmAgYW5kIGA8bXNwYWNlPmAgdGFncykuXG4gKi9cblxudmFyIG1hdGhNTFRyZWVfTWF0aE5vZGUgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBNYXRoTm9kZSh0eXBlLCBjaGlsZHJlbikge1xuICAgIHRoaXMudHlwZSA9IHZvaWQgMDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSB2b2lkIDA7XG4gICAgdGhpcy5jaGlsZHJlbiA9IHZvaWQgMDtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHt9O1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbiB8fCBbXTtcbiAgfVxuICAvKipcbiAgICogU2V0cyBhbiBhdHRyaWJ1dGUgb24gYSBNYXRoTUwgbm9kZS4gTWF0aE1MIGRlcGVuZHMgb24gYXR0cmlidXRlcyB0byBjb252ZXkgYVxuICAgKiBzZW1hbnRpYyBjb250ZW50LCBzbyB0aGlzIGlzIHVzZWQgaGVhdmlseS5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gTWF0aE5vZGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbiBzZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpIHtcbiAgICB0aGlzLmF0dHJpYnV0ZXNbbmFtZV0gPSB2YWx1ZTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBhbiBhdHRyaWJ1dGUgb24gYSBNYXRoTUwgbm9kZS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZ2V0QXR0cmlidXRlID0gZnVuY3Rpb24gZ2V0QXR0cmlidXRlKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW25hbWVdO1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgbWF0aCBub2RlIGludG8gYSBNYXRoTUwtbmFtZXNwYWNlZCBET00gZWxlbWVudC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8udG9Ob2RlID0gZnVuY3Rpb24gdG9Ob2RlKCkge1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiLCB0aGlzLnR5cGUpO1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyLCB0aGlzLmF0dHJpYnV0ZXNbYXR0cl0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZS5hcHBlbmRDaGlsZCh0aGlzLmNoaWxkcmVuW2ldLnRvTm9kZSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIG1hdGggbm9kZSBpbnRvIGFuIEhUTUwgbWFya3VwIHN0cmluZy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8udG9NYXJrdXAgPSBmdW5jdGlvbiB0b01hcmt1cCgpIHtcbiAgICB2YXIgbWFya3VwID0gXCI8XCIgKyB0aGlzLnR5cGU7IC8vIEFkZCB0aGUgYXR0cmlidXRlc1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBtYXJrdXAgKz0gXCIgXCIgKyBhdHRyICsgXCI9XFxcIlwiO1xuICAgICAgICBtYXJrdXAgKz0gdXRpbHMuZXNjYXBlKHRoaXMuYXR0cmlidXRlc1thdHRyXSk7XG4gICAgICAgIG1hcmt1cCArPSBcIlxcXCJcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtYXJrdXAgKz0gXCI+XCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1hcmt1cCArPSB0aGlzLmNoaWxkcmVuW2ldLnRvTWFya3VwKCk7XG4gICAgfVxuXG4gICAgbWFya3VwICs9IFwiPC9cIiArIHRoaXMudHlwZSArIFwiPlwiO1xuICAgIHJldHVybiBtYXJrdXA7XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBtYXRoIG5vZGUgaW50byBhIHN0cmluZywgc2ltaWxhciB0byBpbm5lclRleHQsIGJ1dCBlc2NhcGVkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by50b1RleHQgPSBmdW5jdGlvbiB0b1RleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgcmV0dXJuIGNoaWxkLnRvVGV4dCgpO1xuICAgIH0pLmpvaW4oXCJcIik7XG4gIH07XG5cbiAgcmV0dXJuIE1hdGhOb2RlO1xufSgpO1xuLyoqXG4gKiBUaGlzIG5vZGUgcmVwcmVzZW50cyBhIHBpZWNlIG9mIHRleHQuXG4gKi9cblxudmFyIG1hdGhNTFRyZWVfVGV4dE5vZGUgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBUZXh0Tm9kZSh0ZXh0KSB7XG4gICAgdGhpcy50ZXh0ID0gdm9pZCAwO1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSB0ZXh0IG5vZGUgaW50byBhIERPTSB0ZXh0IG5vZGUuXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90bzIgPSBUZXh0Tm9kZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvMi50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMudGV4dCk7XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSB0ZXh0IG5vZGUgaW50byBlc2NhcGVkIEhUTUwgbWFya3VwXG4gICAqIChyZXByZXNlbnRpbmcgdGhlIHRleHQgaXRzZWxmKS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8yLnRvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAoKSB7XG4gICAgcmV0dXJuIHV0aWxzLmVzY2FwZSh0aGlzLnRvVGV4dCgpKTtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIHRleHQgbm9kZSBpbnRvIGEgc3RyaW5nXG4gICAqIChyZXByZXNlbnRpbmcgdGhlIHRleHQgaXRlc2VsZikuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvMi50b1RleHQgPSBmdW5jdGlvbiB0b1RleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dDtcbiAgfTtcblxuICByZXR1cm4gVGV4dE5vZGU7XG59KCk7XG4vKipcbiAqIFRoaXMgbm9kZSByZXByZXNlbnRzIGEgc3BhY2UsIGJ1dCBtYXkgcmVuZGVyIGFzIDxtc3BhY2UuLi4vPiBvciBhcyB0ZXh0LFxuICogZGVwZW5kaW5nIG9uIHRoZSB3aWR0aC5cbiAqL1xuXG52YXIgU3BhY2VOb2RlID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIFNwYWNlIG5vZGUgd2l0aCB3aWR0aCBnaXZlbiBpbiBDU1MgZW1zLlxuICAgKi9cbiAgZnVuY3Rpb24gU3BhY2VOb2RlKHdpZHRoKSB7XG4gICAgdGhpcy53aWR0aCA9IHZvaWQgMDtcbiAgICB0aGlzLmNoYXJhY3RlciA9IHZvaWQgMDtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7IC8vIFNlZSBodHRwczovL3d3dy53My5vcmcvVFIvMjAwMC9XRC1NYXRoTUwyLTIwMDAwMzI4L2NoYXB0ZXI2Lmh0bWxcbiAgICAvLyBmb3IgYSB0YWJsZSBvZiBzcGFjZS1saWtlIGNoYXJhY3RlcnMuICBXZSB1c2UgVW5pY29kZVxuICAgIC8vIHJlcHJlc2VudGF0aW9ucyBpbnN0ZWFkIG9mICZMb25nTmFtZXM7IGFzIGl0J3Mgbm90IGNsZWFyIGhvdyB0b1xuICAgIC8vIG1ha2UgdGhlIGxhdHRlciB2aWEgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUuXG5cbiAgICBpZiAod2lkdGggPj0gMC4wNTU1NSAmJiB3aWR0aCA8PSAwLjA1NTU2KSB7XG4gICAgICB0aGlzLmNoYXJhY3RlciA9IFwiXFx1MjAwQVwiOyAvLyAmVmVyeVRoaW5TcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IDAuMTY2NiAmJiB3aWR0aCA8PSAwLjE2NjcpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gXCJcXHUyMDA5XCI7IC8vICZUaGluU3BhY2U7XG4gICAgfSBlbHNlIGlmICh3aWR0aCA+PSAwLjIyMjIgJiYgd2lkdGggPD0gMC4yMjIzKSB7XG4gICAgICB0aGlzLmNoYXJhY3RlciA9IFwiXFx1MjAwNVwiOyAvLyAmTWVkaXVtU3BhY2U7XG4gICAgfSBlbHNlIGlmICh3aWR0aCA+PSAwLjI3NzcgJiYgd2lkdGggPD0gMC4yNzc4KSB7XG4gICAgICB0aGlzLmNoYXJhY3RlciA9IFwiXFx1MjAwNVxcdTIwMEFcIjsgLy8gJlRoaWNrU3BhY2U7XG4gICAgfSBlbHNlIGlmICh3aWR0aCA+PSAtMC4wNTU1NiAmJiB3aWR0aCA8PSAtMC4wNTU1NSkge1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBcIlxcdTIwMEFcXHUyMDYzXCI7IC8vICZOZWdhdGl2ZVZlcnlUaGluU3BhY2U7XG4gICAgfSBlbHNlIGlmICh3aWR0aCA+PSAtMC4xNjY3ICYmIHdpZHRoIDw9IC0wLjE2NjYpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gXCJcXHUyMDA5XFx1MjA2M1wiOyAvLyAmTmVnYXRpdmVUaGluU3BhY2U7XG4gICAgfSBlbHNlIGlmICh3aWR0aCA+PSAtMC4yMjIzICYmIHdpZHRoIDw9IC0wLjIyMjIpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gXCJcXHUyMDVGXFx1MjA2M1wiOyAvLyAmTmVnYXRpdmVNZWRpdW1TcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IC0wLjI3NzggJiYgd2lkdGggPD0gLTAuMjc3Nykge1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBcIlxcdTIwMDVcXHUyMDYzXCI7IC8vICZOZWdhdGl2ZVRoaWNrU3BhY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBtYXRoIG5vZGUgaW50byBhIE1hdGhNTC1uYW1lc3BhY2VkIERPTSBlbGVtZW50LlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8zID0gU3BhY2VOb2RlLnByb3RvdHlwZTtcblxuICBfcHJvdG8zLnRvTm9kZSA9IGZ1bmN0aW9uIHRvTm9kZSgpIHtcbiAgICBpZiAodGhpcy5jaGFyYWN0ZXIpIHtcbiAgICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLmNoYXJhY3Rlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiLCBcIm1zcGFjZVwiKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgdGhpcy53aWR0aCArIFwiZW1cIik7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBtYXRoIG5vZGUgaW50byBhbiBIVE1MIG1hcmt1cCBzdHJpbmcuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvMy50b01hcmt1cCA9IGZ1bmN0aW9uIHRvTWFya3VwKCkge1xuICAgIGlmICh0aGlzLmNoYXJhY3Rlcikge1xuICAgICAgcmV0dXJuIFwiPG10ZXh0PlwiICsgdGhpcy5jaGFyYWN0ZXIgKyBcIjwvbXRleHQ+XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIjxtc3BhY2Ugd2lkdGg9XFxcIlwiICsgdGhpcy53aWR0aCArIFwiZW1cXFwiLz5cIjtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBtYXRoIG5vZGUgaW50byBhIHN0cmluZywgc2ltaWxhciB0byBpbm5lclRleHQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvMy50b1RleHQgPSBmdW5jdGlvbiB0b1RleHQoKSB7XG4gICAgaWYgKHRoaXMuY2hhcmFjdGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGFyYWN0ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIiBcIjtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFNwYWNlTm9kZTtcbn0oKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbWF0aE1MVHJlZSA9ICh7XG4gIE1hdGhOb2RlOiBtYXRoTUxUcmVlX01hdGhOb2RlLFxuICBUZXh0Tm9kZTogbWF0aE1MVHJlZV9UZXh0Tm9kZSxcbiAgU3BhY2VOb2RlOiBTcGFjZU5vZGUsXG4gIG5ld0RvY3VtZW50RnJhZ21lbnQ6IG5ld0RvY3VtZW50RnJhZ21lbnRcbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvYnVpbGRNYXRoTUwuanNcbi8qKlxuICogVGhpcyBmaWxlIGNvbnZlcnRzIGEgcGFyc2UgdHJlZSBpbnRvIGEgY29vcmVzcG9uZGluZyBNYXRoTUwgdHJlZS4gVGhlIG1haW5cbiAqIGVudHJ5IHBvaW50IGlzIHRoZSBgYnVpbGRNYXRoTUxgIGZ1bmN0aW9uLCB3aGljaCB0YWtlcyBhIHBhcnNlIHRyZWUgZnJvbSB0aGVcbiAqIHBhcnNlci5cbiAqL1xuXG5cblxuXG5cblxuXG5cblxuLyoqXG4gKiBUYWtlcyBhIHN5bWJvbCBhbmQgY29udmVydHMgaXQgaW50byBhIE1hdGhNTCB0ZXh0IG5vZGUgYWZ0ZXIgcGVyZm9ybWluZ1xuICogb3B0aW9uYWwgcmVwbGFjZW1lbnQgZnJvbSBzeW1ib2xzLmpzLlxuICovXG52YXIgYnVpbGRNYXRoTUxfbWFrZVRleHQgPSBmdW5jdGlvbiBtYWtlVGV4dCh0ZXh0LCBtb2RlLCBvcHRpb25zKSB7XG4gIGlmIChzcmNfc3ltYm9sc1ttb2RlXVt0ZXh0XSAmJiBzcmNfc3ltYm9sc1ttb2RlXVt0ZXh0XS5yZXBsYWNlICYmIHRleHQuY2hhckNvZGVBdCgwKSAhPT0gMHhEODM1ICYmICEobGlnYXR1cmVzLmhhc093blByb3BlcnR5KHRleHQpICYmIG9wdGlvbnMgJiYgKG9wdGlvbnMuZm9udEZhbWlseSAmJiBvcHRpb25zLmZvbnRGYW1pbHkuc3Vic3RyKDQsIDIpID09PSBcInR0XCIgfHwgb3B0aW9ucy5mb250ICYmIG9wdGlvbnMuZm9udC5zdWJzdHIoNCwgMikgPT09IFwidHRcIikpKSB7XG4gICAgdGV4dCA9IHNyY19zeW1ib2xzW21vZGVdW3RleHRdLnJlcGxhY2U7XG4gIH1cblxuICByZXR1cm4gbmV3IG1hdGhNTFRyZWUuVGV4dE5vZGUodGV4dCk7XG59O1xuLyoqXG4gKiBXcmFwIHRoZSBnaXZlbiBhcnJheSBvZiBub2RlcyBpbiBhbiA8bXJvdz4gbm9kZSBpZiBuZWVkZWQsIGkuZS4sXG4gKiB1bmxlc3MgdGhlIGFycmF5IGhhcyBsZW5ndGggMS4gIEFsd2F5cyByZXR1cm5zIGEgc2luZ2xlIG5vZGUuXG4gKi9cblxudmFyIGJ1aWxkTWF0aE1MX21ha2VSb3cgPSBmdW5jdGlvbiBtYWtlUm93KGJvZHkpIHtcbiAgaWYgKGJvZHkubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGJvZHlbMF07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXJvd1wiLCBib2R5KTtcbiAgfVxufTtcbi8qKlxuICogUmV0dXJucyB0aGUgbWF0aCB2YXJpYW50IGFzIGEgc3RyaW5nIG9yIG51bGwgaWYgbm9uZSBpcyByZXF1aXJlZC5cbiAqL1xuXG52YXIgYnVpbGRNYXRoTUxfZ2V0VmFyaWFudCA9IGZ1bmN0aW9uIGdldFZhcmlhbnQoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgLy8gSGFuZGxlIFxcdGV4dC4uLiBmb250IHNwZWNpZmllcnMgYXMgYmVzdCB3ZSBjYW4uXG4gIC8vIE1hdGhNTCBoYXMgYSBsaW1pdGVkIGxpc3Qgb2YgYWxsb3dhYmxlIG1hdGh2YXJpYW50IHNwZWNpZmllcnM7IHNlZVxuICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvTWF0aE1MMy9jaGFwdGVyMy5odG1sI3ByZXNtLmNvbW1hdHRcbiAgaWYgKG9wdGlvbnMuZm9udEZhbWlseSA9PT0gXCJ0ZXh0dHRcIikge1xuICAgIHJldHVybiBcIm1vbm9zcGFjZVwiO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9udEZhbWlseSA9PT0gXCJ0ZXh0c2ZcIikge1xuICAgIGlmIChvcHRpb25zLmZvbnRTaGFwZSA9PT0gXCJ0ZXh0aXRcIiAmJiBvcHRpb25zLmZvbnRXZWlnaHQgPT09IFwidGV4dGJmXCIpIHtcbiAgICAgIHJldHVybiBcInNhbnMtc2VyaWYtYm9sZC1pdGFsaWNcIjtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9udFNoYXBlID09PSBcInRleHRpdFwiKSB7XG4gICAgICByZXR1cm4gXCJzYW5zLXNlcmlmLWl0YWxpY1wiO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5mb250V2VpZ2h0ID09PSBcInRleHRiZlwiKSB7XG4gICAgICByZXR1cm4gXCJib2xkLXNhbnMtc2VyaWZcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwic2Fucy1zZXJpZlwiO1xuICAgIH1cbiAgfSBlbHNlIGlmIChvcHRpb25zLmZvbnRTaGFwZSA9PT0gXCJ0ZXh0aXRcIiAmJiBvcHRpb25zLmZvbnRXZWlnaHQgPT09IFwidGV4dGJmXCIpIHtcbiAgICByZXR1cm4gXCJib2xkLWl0YWxpY1wiO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9udFNoYXBlID09PSBcInRleHRpdFwiKSB7XG4gICAgcmV0dXJuIFwiaXRhbGljXCI7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5mb250V2VpZ2h0ID09PSBcInRleHRiZlwiKSB7XG4gICAgcmV0dXJuIFwiYm9sZFwiO1xuICB9XG5cbiAgdmFyIGZvbnQgPSBvcHRpb25zLmZvbnQ7XG5cbiAgaWYgKCFmb250IHx8IGZvbnQgPT09IFwibWF0aG5vcm1hbFwiKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbW9kZSA9IGdyb3VwLm1vZGU7XG5cbiAgaWYgKGZvbnQgPT09IFwibWF0aGl0XCIpIHtcbiAgICByZXR1cm4gXCJpdGFsaWNcIjtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcImJvbGRzeW1ib2xcIikge1xuICAgIHJldHVybiBcImJvbGQtaXRhbGljXCI7XG4gIH0gZWxzZSBpZiAoZm9udCA9PT0gXCJtYXRoYmZcIikge1xuICAgIHJldHVybiBcImJvbGRcIjtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcIm1hdGhiYlwiKSB7XG4gICAgcmV0dXJuIFwiZG91YmxlLXN0cnVja1wiO1xuICB9IGVsc2UgaWYgKGZvbnQgPT09IFwibWF0aGZyYWtcIikge1xuICAgIHJldHVybiBcImZyYWt0dXJcIjtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcIm1hdGhzY3JcIiB8fCBmb250ID09PSBcIm1hdGhjYWxcIikge1xuICAgIC8vIE1hdGhNTCBtYWtlcyBubyBkaXN0aW5jdGlvbiBiZXR3ZWVuIHNjcmlwdCBhbmQgY2FsaWdyYWhwaWNcbiAgICByZXR1cm4gXCJzY3JpcHRcIjtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcIm1hdGhzZlwiKSB7XG4gICAgcmV0dXJuIFwic2Fucy1zZXJpZlwiO1xuICB9IGVsc2UgaWYgKGZvbnQgPT09IFwibWF0aHR0XCIpIHtcbiAgICByZXR1cm4gXCJtb25vc3BhY2VcIjtcbiAgfVxuXG4gIHZhciB0ZXh0ID0gZ3JvdXAudGV4dDtcblxuICBpZiAodXRpbHMuY29udGFpbnMoW1wiXFxcXGltYXRoXCIsIFwiXFxcXGptYXRoXCJdLCB0ZXh0KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHNyY19zeW1ib2xzW21vZGVdW3RleHRdICYmIHNyY19zeW1ib2xzW21vZGVdW3RleHRdLnJlcGxhY2UpIHtcbiAgICB0ZXh0ID0gc3JjX3N5bWJvbHNbbW9kZV1bdGV4dF0ucmVwbGFjZTtcbiAgfVxuXG4gIHZhciBmb250TmFtZSA9IGJ1aWxkQ29tbW9uLmZvbnRNYXBbZm9udF0uZm9udE5hbWU7XG5cbiAgaWYgKGdldENoYXJhY3Rlck1ldHJpY3ModGV4dCwgZm9udE5hbWUsIG1vZGUpKSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLmZvbnRNYXBbZm9udF0udmFyaWFudDtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcbi8qKlxuICogVGFrZXMgYSBsaXN0IG9mIG5vZGVzLCBidWlsZHMgdGhlbSwgYW5kIHJldHVybnMgYSBsaXN0IG9mIHRoZSBnZW5lcmF0ZWRcbiAqIE1hdGhNTCBub2Rlcy4gIEFsc28gY29tYmluZSBjb25zZWN1dGl2ZSA8bXRleHQ+IG91dHB1dHMgaW50byBhIHNpbmdsZVxuICogPG10ZXh0PiB0YWcuXG4gKi9cblxudmFyIGJ1aWxkTWF0aE1MX2J1aWxkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIGJ1aWxkRXhwcmVzc2lvbihleHByZXNzaW9uLCBvcHRpb25zLCBpc09yZGdyb3VwKSB7XG4gIGlmIChleHByZXNzaW9uLmxlbmd0aCA9PT0gMSkge1xuICAgIHZhciBncm91cCA9IGJ1aWxkTWF0aE1MX2J1aWxkR3JvdXAoZXhwcmVzc2lvblswXSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoaXNPcmRncm91cCAmJiBncm91cCBpbnN0YW5jZW9mIG1hdGhNTFRyZWVfTWF0aE5vZGUgJiYgZ3JvdXAudHlwZSA9PT0gXCJtb1wiKSB7XG4gICAgICAvLyBXaGVuIFRlWCB3cml0ZXJzIHdhbnQgdG8gc3VwcHJlc3Mgc3BhY2luZyBvbiBhbiBvcGVyYXRvcixcbiAgICAgIC8vIHRoZXkgb2Z0ZW4gcHV0IHRoZSBvcGVyYXRvciBieSBpdHNlbGYgaW5zaWRlIGJyYWNlcy5cbiAgICAgIGdyb3VwLnNldEF0dHJpYnV0ZShcImxzcGFjZVwiLCBcIjBlbVwiKTtcbiAgICAgIGdyb3VwLnNldEF0dHJpYnV0ZShcInJzcGFjZVwiLCBcIjBlbVwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gW2dyb3VwXTtcbiAgfVxuXG4gIHZhciBncm91cHMgPSBbXTtcbiAgdmFyIGxhc3RHcm91cDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cHJlc3Npb24ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgX2dyb3VwID0gYnVpbGRNYXRoTUxfYnVpbGRHcm91cChleHByZXNzaW9uW2ldLCBvcHRpb25zKTtcblxuICAgIGlmIChfZ3JvdXAgaW5zdGFuY2VvZiBtYXRoTUxUcmVlX01hdGhOb2RlICYmIGxhc3RHcm91cCBpbnN0YW5jZW9mIG1hdGhNTFRyZWVfTWF0aE5vZGUpIHtcbiAgICAgIC8vIENvbmNhdGVuYXRlIGFkamFjZW50IDxtdGV4dD5zXG4gICAgICBpZiAoX2dyb3VwLnR5cGUgPT09ICdtdGV4dCcgJiYgbGFzdEdyb3VwLnR5cGUgPT09ICdtdGV4dCcgJiYgX2dyb3VwLmdldEF0dHJpYnV0ZSgnbWF0aHZhcmlhbnQnKSA9PT0gbGFzdEdyb3VwLmdldEF0dHJpYnV0ZSgnbWF0aHZhcmlhbnQnKSkge1xuICAgICAgICB2YXIgX2xhc3RHcm91cCRjaGlsZHJlbjtcblxuICAgICAgICAoX2xhc3RHcm91cCRjaGlsZHJlbiA9IGxhc3RHcm91cC5jaGlsZHJlbikucHVzaC5hcHBseShfbGFzdEdyb3VwJGNoaWxkcmVuLCBfZ3JvdXAuY2hpbGRyZW4pO1xuXG4gICAgICAgIGNvbnRpbnVlOyAvLyBDb25jYXRlbmF0ZSBhZGphY2VudCA8bW4+c1xuICAgICAgfSBlbHNlIGlmIChfZ3JvdXAudHlwZSA9PT0gJ21uJyAmJiBsYXN0R3JvdXAudHlwZSA9PT0gJ21uJykge1xuICAgICAgICB2YXIgX2xhc3RHcm91cCRjaGlsZHJlbjI7XG5cbiAgICAgICAgKF9sYXN0R3JvdXAkY2hpbGRyZW4yID0gbGFzdEdyb3VwLmNoaWxkcmVuKS5wdXNoLmFwcGx5KF9sYXN0R3JvdXAkY2hpbGRyZW4yLCBfZ3JvdXAuY2hpbGRyZW4pO1xuXG4gICAgICAgIGNvbnRpbnVlOyAvLyBDb25jYXRlbmF0ZSA8bW4+Li4uPC9tbj4gZm9sbG93ZWQgYnkgPG1pPi48L21pPlxuICAgICAgfSBlbHNlIGlmIChfZ3JvdXAudHlwZSA9PT0gJ21pJyAmJiBfZ3JvdXAuY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmIGxhc3RHcm91cC50eXBlID09PSAnbW4nKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IF9ncm91cC5jaGlsZHJlblswXTtcblxuICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBtYXRoTUxUcmVlX1RleHROb2RlICYmIGNoaWxkLnRleHQgPT09ICcuJykge1xuICAgICAgICAgIHZhciBfbGFzdEdyb3VwJGNoaWxkcmVuMztcblxuICAgICAgICAgIChfbGFzdEdyb3VwJGNoaWxkcmVuMyA9IGxhc3RHcm91cC5jaGlsZHJlbikucHVzaC5hcHBseShfbGFzdEdyb3VwJGNoaWxkcmVuMywgX2dyb3VwLmNoaWxkcmVuKTtcblxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGxhc3RHcm91cC50eXBlID09PSAnbWknICYmIGxhc3RHcm91cC5jaGlsZHJlbi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdmFyIGxhc3RDaGlsZCA9IGxhc3RHcm91cC5jaGlsZHJlblswXTtcblxuICAgICAgICBpZiAobGFzdENoaWxkIGluc3RhbmNlb2YgbWF0aE1MVHJlZV9UZXh0Tm9kZSAmJiBsYXN0Q2hpbGQudGV4dCA9PT0gXCJcXHUwMzM4XCIgJiYgKF9ncm91cC50eXBlID09PSAnbW8nIHx8IF9ncm91cC50eXBlID09PSAnbWknIHx8IF9ncm91cC50eXBlID09PSAnbW4nKSkge1xuICAgICAgICAgIHZhciBfY2hpbGQgPSBfZ3JvdXAuY2hpbGRyZW5bMF07XG5cbiAgICAgICAgICBpZiAoX2NoaWxkIGluc3RhbmNlb2YgbWF0aE1MVHJlZV9UZXh0Tm9kZSAmJiBfY2hpbGQudGV4dC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBPdmVybGF5IHdpdGggY29tYmluaW5nIGNoYXJhY3RlciBsb25nIHNvbGlkdXNcbiAgICAgICAgICAgIF9jaGlsZC50ZXh0ID0gX2NoaWxkLnRleHQuc2xpY2UoMCwgMSkgKyBcIlxcdTAzMzhcIiArIF9jaGlsZC50ZXh0LnNsaWNlKDEpO1xuICAgICAgICAgICAgZ3JvdXBzLnBvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGdyb3Vwcy5wdXNoKF9ncm91cCk7XG4gICAgbGFzdEdyb3VwID0gX2dyb3VwO1xuICB9XG5cbiAgcmV0dXJuIGdyb3Vwcztcbn07XG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gYnVpbGRFeHByZXNzaW9uLCBidXQgd3JhcHMgdGhlIGVsZW1lbnRzIGluIGFuIDxtcm93PlxuICogaWYgdGhlcmUncyBtb3JlIHRoYW4gb25lLiAgUmV0dXJucyBhIHNpbmdsZSBub2RlIGluc3RlYWQgb2YgYW4gYXJyYXkuXG4gKi9cblxudmFyIGJ1aWxkRXhwcmVzc2lvblJvdyA9IGZ1bmN0aW9uIGJ1aWxkRXhwcmVzc2lvblJvdyhleHByZXNzaW9uLCBvcHRpb25zLCBpc09yZGdyb3VwKSB7XG4gIHJldHVybiBidWlsZE1hdGhNTF9tYWtlUm93KGJ1aWxkTWF0aE1MX2J1aWxkRXhwcmVzc2lvbihleHByZXNzaW9uLCBvcHRpb25zLCBpc09yZGdyb3VwKSk7XG59O1xuLyoqXG4gKiBUYWtlcyBhIGdyb3VwIGZyb20gdGhlIHBhcnNlciBhbmQgY2FsbHMgdGhlIGFwcHJvcHJpYXRlIGdyb3VwQnVpbGRlcnMgZnVuY3Rpb25cbiAqIG9uIGl0IHRvIHByb2R1Y2UgYSBNYXRoTUwgbm9kZS5cbiAqL1xuXG52YXIgYnVpbGRNYXRoTUxfYnVpbGRHcm91cCA9IGZ1bmN0aW9uIGJ1aWxkR3JvdXAoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgaWYgKCFncm91cCkge1xuICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1yb3dcIik7XG4gIH1cblxuICBpZiAoX21hdGhtbEdyb3VwQnVpbGRlcnNbZ3JvdXAudHlwZV0pIHtcbiAgICAvLyBDYWxsIHRoZSBncm91cEJ1aWxkZXJzIGZ1bmN0aW9uXG4gICAgdmFyIHJlc3VsdCA9IF9tYXRobWxHcm91cEJ1aWxkZXJzW2dyb3VwLnR5cGVdKGdyb3VwLCBvcHRpb25zKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkdvdCBncm91cCBvZiB1bmtub3duIHR5cGU6ICdcIiArIGdyb3VwLnR5cGUgKyBcIidcIik7XG4gIH1cbn07XG4vKipcbiAqIFRha2VzIGEgZnVsbCBwYXJzZSB0cmVlIGFuZCBzZXR0aW5ncyBhbmQgYnVpbGRzIGEgTWF0aE1MIHJlcHJlc2VudGF0aW9uIG9mXG4gKiBpdC4gSW4gcGFydGljdWxhciwgd2UgcHV0IHRoZSBlbGVtZW50cyBmcm9tIGJ1aWxkaW5nIHRoZSBwYXJzZSB0cmVlIGludG8gYVxuICogPHNlbWFudGljcz4gdGFnIHNvIHdlIGNhbiBhbHNvIGluY2x1ZGUgdGhhdCBUZVggc291cmNlIGFzIGFuIGFubm90YXRpb24uXG4gKlxuICogTm90ZSB0aGF0IHdlIGFjdHVhbGx5IHJldHVybiBhIGRvbVRyZWUgZWxlbWVudCB3aXRoIGEgYDxtYXRoPmAgaW5zaWRlIGl0IHNvXG4gKiB3ZSBjYW4gZG8gYXBwcm9wcmlhdGUgc3R5bGluZy5cbiAqL1xuXG5mdW5jdGlvbiBidWlsZE1hdGhNTCh0cmVlLCB0ZXhFeHByZXNzaW9uLCBvcHRpb25zLCBmb3JNYXRobWxPbmx5KSB7XG4gIHZhciBleHByZXNzaW9uID0gYnVpbGRNYXRoTUxfYnVpbGRFeHByZXNzaW9uKHRyZWUsIG9wdGlvbnMpOyAvLyBXcmFwIHVwIHRoZSBleHByZXNzaW9uIGluIGFuIG1yb3cgc28gaXQgaXMgcHJlc2VudGVkIGluIHRoZSBzZW1hbnRpY3NcbiAgLy8gdGFnIGNvcnJlY3RseSwgdW5sZXNzIGl0J3MgYSBzaW5nbGUgPG1yb3c+IG9yIDxtdGFibGU+LlxuXG4gIHZhciB3cmFwcGVyO1xuXG4gIGlmIChleHByZXNzaW9uLmxlbmd0aCA9PT0gMSAmJiBleHByZXNzaW9uWzBdIGluc3RhbmNlb2YgbWF0aE1MVHJlZV9NYXRoTm9kZSAmJiB1dGlscy5jb250YWlucyhbXCJtcm93XCIsIFwibXRhYmxlXCJdLCBleHByZXNzaW9uWzBdLnR5cGUpKSB7XG4gICAgd3JhcHBlciA9IGV4cHJlc3Npb25bMF07XG4gIH0gZWxzZSB7XG4gICAgd3JhcHBlciA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXJvd1wiLCBleHByZXNzaW9uKTtcbiAgfSAvLyBCdWlsZCBhIFRlWCBhbm5vdGF0aW9uIG9mIHRoZSBzb3VyY2VcblxuXG4gIHZhciBhbm5vdGF0aW9uID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJhbm5vdGF0aW9uXCIsIFtuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZSh0ZXhFeHByZXNzaW9uKV0pO1xuICBhbm5vdGF0aW9uLnNldEF0dHJpYnV0ZShcImVuY29kaW5nXCIsIFwiYXBwbGljYXRpb24veC10ZXhcIik7XG4gIHZhciBzZW1hbnRpY3MgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcInNlbWFudGljc1wiLCBbd3JhcHBlciwgYW5ub3RhdGlvbl0pO1xuICB2YXIgbWF0aCA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibWF0aFwiLCBbc2VtYW50aWNzXSk7XG4gIG1hdGguc2V0QXR0cmlidXRlKFwieG1sbnNcIiwgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCIpOyAvLyBZb3UgY2FuJ3Qgc3R5bGUgPG1hdGg+IG5vZGVzLCBzbyB3ZSB3cmFwIHRoZSBub2RlIGluIGEgc3Bhbi5cbiAgLy8gTk9URTogVGhlIHNwYW4gY2xhc3MgaXMgbm90IHR5cGVkIHRvIGhhdmUgPG1hdGg+IG5vZGVzIGFzIGNoaWxkcmVuLCBhbmRcbiAgLy8gd2UgZG9uJ3Qgd2FudCB0byBtYWtlIHRoZSBjaGlsZHJlbiB0eXBlIG1vcmUgZ2VuZXJpYyBzaW5jZSB0aGUgY2hpbGRyZW5cbiAgLy8gb2Ygc3BhbiBhcmUgZXhwZWN0ZWQgdG8gaGF2ZSBtb3JlIGZpZWxkcyBpbiBgYnVpbGRIdG1sYCBjb250ZXh0cy5cblxuICB2YXIgd3JhcHBlckNsYXNzID0gZm9yTWF0aG1sT25seSA/IFwia2F0ZXhcIiA6IFwia2F0ZXgtbWF0aG1sXCI7IC8vICRGbG93Rml4TWVcblxuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW3dyYXBwZXJDbGFzc10sIFttYXRoXSk7XG59XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9idWlsZFRyZWUuanNcblxuXG5cblxuXG5cblxudmFyIGJ1aWxkVHJlZV9vcHRpb25zRnJvbVNldHRpbmdzID0gZnVuY3Rpb24gb3B0aW9uc0Zyb21TZXR0aW5ncyhzZXR0aW5ncykge1xuICByZXR1cm4gbmV3IHNyY19PcHRpb25zKHtcbiAgICBzdHlsZTogc2V0dGluZ3MuZGlzcGxheU1vZGUgPyBzcmNfU3R5bGUuRElTUExBWSA6IHNyY19TdHlsZS5URVhULFxuICAgIG1heFNpemU6IHNldHRpbmdzLm1heFNpemUsXG4gICAgbWluUnVsZVRoaWNrbmVzczogc2V0dGluZ3MubWluUnVsZVRoaWNrbmVzc1xuICB9KTtcbn07XG5cbnZhciBidWlsZFRyZWVfZGlzcGxheVdyYXAgPSBmdW5jdGlvbiBkaXNwbGF5V3JhcChub2RlLCBzZXR0aW5ncykge1xuICBpZiAoc2V0dGluZ3MuZGlzcGxheU1vZGUpIHtcbiAgICB2YXIgY2xhc3NlcyA9IFtcImthdGV4LWRpc3BsYXlcIl07XG5cbiAgICBpZiAoc2V0dGluZ3MubGVxbm8pIHtcbiAgICAgIGNsYXNzZXMucHVzaChcImxlcW5vXCIpO1xuICAgIH1cblxuICAgIGlmIChzZXR0aW5ncy5mbGVxbikge1xuICAgICAgY2xhc3Nlcy5wdXNoKFwiZmxlcW5cIik7XG4gICAgfVxuXG4gICAgbm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKGNsYXNzZXMsIFtub2RlXSk7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn07XG5cbnZhciBidWlsZFRyZWVfYnVpbGRUcmVlID0gZnVuY3Rpb24gYnVpbGRUcmVlKHRyZWUsIGV4cHJlc3Npb24sIHNldHRpbmdzKSB7XG4gIHZhciBvcHRpb25zID0gYnVpbGRUcmVlX29wdGlvbnNGcm9tU2V0dGluZ3Moc2V0dGluZ3MpO1xuICB2YXIga2F0ZXhOb2RlO1xuXG4gIGlmIChzZXR0aW5ncy5vdXRwdXQgPT09IFwibWF0aG1sXCIpIHtcbiAgICByZXR1cm4gYnVpbGRNYXRoTUwodHJlZSwgZXhwcmVzc2lvbiwgb3B0aW9ucywgdHJ1ZSk7XG4gIH0gZWxzZSBpZiAoc2V0dGluZ3Mub3V0cHV0ID09PSBcImh0bWxcIikge1xuICAgIHZhciBodG1sTm9kZSA9IGJ1aWxkSFRNTCh0cmVlLCBvcHRpb25zKTtcbiAgICBrYXRleE5vZGUgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJrYXRleFwiXSwgW2h0bWxOb2RlXSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG1hdGhNTE5vZGUgPSBidWlsZE1hdGhNTCh0cmVlLCBleHByZXNzaW9uLCBvcHRpb25zLCBmYWxzZSk7XG5cbiAgICB2YXIgX2h0bWxOb2RlID0gYnVpbGRIVE1MKHRyZWUsIG9wdGlvbnMpO1xuXG4gICAga2F0ZXhOb2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wia2F0ZXhcIl0sIFttYXRoTUxOb2RlLCBfaHRtbE5vZGVdKTtcbiAgfVxuXG4gIHJldHVybiBidWlsZFRyZWVfZGlzcGxheVdyYXAoa2F0ZXhOb2RlLCBzZXR0aW5ncyk7XG59O1xudmFyIGJ1aWxkVHJlZV9idWlsZEhUTUxUcmVlID0gZnVuY3Rpb24gYnVpbGRIVE1MVHJlZSh0cmVlLCBleHByZXNzaW9uLCBzZXR0aW5ncykge1xuICB2YXIgb3B0aW9ucyA9IGJ1aWxkVHJlZV9vcHRpb25zRnJvbVNldHRpbmdzKHNldHRpbmdzKTtcbiAgdmFyIGh0bWxOb2RlID0gYnVpbGRIVE1MKHRyZWUsIG9wdGlvbnMpO1xuICB2YXIga2F0ZXhOb2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wia2F0ZXhcIl0sIFtodG1sTm9kZV0pO1xuICByZXR1cm4gYnVpbGRUcmVlX2Rpc3BsYXlXcmFwKGthdGV4Tm9kZSwgc2V0dGluZ3MpO1xufTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19idWlsZFRyZWUgPSAoYnVpbGRUcmVlX2J1aWxkVHJlZSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9zdHJldGNoeS5qc1xuLyoqXG4gKiBUaGlzIGZpbGUgcHJvdmlkZXMgc3VwcG9ydCB0byBidWlsZE1hdGhNTC5qcyBhbmQgYnVpbGRIVE1MLmpzXG4gKiBmb3Igc3RyZXRjaHkgd2lkZSBlbGVtZW50cyByZW5kZXJlZCBmcm9tIFNWRyBmaWxlc1xuICogYW5kIG90aGVyIENTUyB0cmlja2VyeS5cbiAqL1xuXG5cblxuXG52YXIgc3RyZXRjaHlDb2RlUG9pbnQgPSB7XG4gIHdpZGVoYXQ6IFwiXlwiLFxuICB3aWRlY2hlY2s6IFwiy4dcIixcbiAgd2lkZXRpbGRlOiBcIn5cIixcbiAgdXRpbGRlOiBcIn5cIixcbiAgb3ZlcmxlZnRhcnJvdzogXCJcXHUyMTkwXCIsXG4gIHVuZGVybGVmdGFycm93OiBcIlxcdTIxOTBcIixcbiAgeGxlZnRhcnJvdzogXCJcXHUyMTkwXCIsXG4gIG92ZXJyaWdodGFycm93OiBcIlxcdTIxOTJcIixcbiAgdW5kZXJyaWdodGFycm93OiBcIlxcdTIxOTJcIixcbiAgeHJpZ2h0YXJyb3c6IFwiXFx1MjE5MlwiLFxuICB1bmRlcmJyYWNlOiBcIlxcdTIzREZcIixcbiAgb3ZlcmJyYWNlOiBcIlxcdTIzREVcIixcbiAgb3Zlcmdyb3VwOiBcIlxcdTIzRTBcIixcbiAgdW5kZXJncm91cDogXCJcXHUyM0UxXCIsXG4gIG92ZXJsZWZ0cmlnaHRhcnJvdzogXCJcXHUyMTk0XCIsXG4gIHVuZGVybGVmdHJpZ2h0YXJyb3c6IFwiXFx1MjE5NFwiLFxuICB4bGVmdHJpZ2h0YXJyb3c6IFwiXFx1MjE5NFwiLFxuICBPdmVycmlnaHRhcnJvdzogXCJcXHUyMUQyXCIsXG4gIHhSaWdodGFycm93OiBcIlxcdTIxRDJcIixcbiAgb3ZlcmxlZnRoYXJwb29uOiBcIlxcdTIxQkNcIixcbiAgeGxlZnRoYXJwb29udXA6IFwiXFx1MjFCQ1wiLFxuICBvdmVycmlnaHRoYXJwb29uOiBcIlxcdTIxQzBcIixcbiAgeHJpZ2h0aGFycG9vbnVwOiBcIlxcdTIxQzBcIixcbiAgeExlZnRhcnJvdzogXCJcXHUyMUQwXCIsXG4gIHhMZWZ0cmlnaHRhcnJvdzogXCJcXHUyMUQ0XCIsXG4gIHhob29rbGVmdGFycm93OiBcIlxcdTIxQTlcIixcbiAgeGhvb2tyaWdodGFycm93OiBcIlxcdTIxQUFcIixcbiAgeG1hcHN0bzogXCJcXHUyMUE2XCIsXG4gIHhyaWdodGhhcnBvb25kb3duOiBcIlxcdTIxQzFcIixcbiAgeGxlZnRoYXJwb29uZG93bjogXCJcXHUyMUJEXCIsXG4gIHhyaWdodGxlZnRoYXJwb29uczogXCJcXHUyMUNDXCIsXG4gIHhsZWZ0cmlnaHRoYXJwb29uczogXCJcXHUyMUNCXCIsXG4gIHh0d29oZWFkbGVmdGFycm93OiBcIlxcdTIxOUVcIixcbiAgeHR3b2hlYWRyaWdodGFycm93OiBcIlxcdTIxQTBcIixcbiAgeGxvbmdlcXVhbDogXCI9XCIsXG4gIHh0b2Zyb206IFwiXFx1MjFDNFwiLFxuICB4cmlnaHRsZWZ0YXJyb3dzOiBcIlxcdTIxQzRcIixcbiAgeHJpZ2h0ZXF1aWxpYnJpdW06IFwiXFx1MjFDQ1wiLFxuICAvLyBOb3QgYSBwZXJmZWN0IG1hdGNoLlxuICB4bGVmdGVxdWlsaWJyaXVtOiBcIlxcdTIxQ0JcIiAvLyBOb25lIGJldHRlciBhdmFpbGFibGUuXG5cbn07XG5cbnZhciBzdHJldGNoeV9tYXRoTUxub2RlID0gZnVuY3Rpb24gbWF0aE1Mbm9kZShsYWJlbCkge1xuICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKHN0cmV0Y2h5Q29kZVBvaW50W2xhYmVsLnN1YnN0cigxKV0pXSk7XG4gIG5vZGUuc2V0QXR0cmlidXRlKFwic3RyZXRjaHlcIiwgXCJ0cnVlXCIpO1xuICByZXR1cm4gbm9kZTtcbn07IC8vIE1hbnkgb2YgdGhlIEthVGVYIFNWRyBpbWFnZXMgaGF2ZSBiZWVuIGFkYXB0ZWQgZnJvbSBnbHlwaHMgaW4gS2FUZVggZm9udHMuXG4vLyBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCwgRGVzaWduIFNjaWVuY2UsIEluYy4gKDx3d3cubWF0aGpheC5vcmc+KVxuLy8gQ29weXJpZ2h0IChjKSAyMDE0LTIwMTcgS2hhbiBBY2FkZW15ICg8d3d3LmtoYW5hY2FkZW15Lm9yZz4pXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgU0lMIE9wZW4gRm9udCBMaWNlbnNlLCBWZXJzaW9uIDEuMS5cbi8vIFNlZSBcXG5odHRwOi8vc2NyaXB0cy5zaWwub3JnL09GTFxuLy8gVmVyeSBMb25nIFNWR3Ncbi8vICAgIE1hbnkgb2YgdGhlIEthVGVYIHN0cmV0Y2h5IHdpZGUgZWxlbWVudHMgdXNlIGEgbG9uZyBTVkcgaW1hZ2UgYW5kIGFuXG4vLyAgICBvdmVyZmxvdzogaGlkZGVuIHRhY3RpYyB0byBhY2hpZXZlIGEgc3RyZXRjaHkgaW1hZ2Ugd2hpbGUgYXZvaWRpbmdcbi8vICAgIGRpc3RvcnRpb24gb2YgYXJyb3doZWFkcyBvciBicmFjZSBjb3JuZXJzLlxuLy8gICAgVGhlIFNWRyB0eXBpY2FsbHkgY29udGFpbnMgYSB2ZXJ5IGxvbmcgKDQwMCBlbSkgYXJyb3cuXG4vLyAgICBUaGUgU1ZHIGlzIGluIGEgY29udGFpbmVyIHNwYW4gdGhhdCBoYXMgb3ZlcmZsb3c6IGhpZGRlbiwgc28gdGhlIHNwYW5cbi8vICAgIGFjdHMgbGlrZSBhIHdpbmRvdyB0aGF0IGV4cG9zZXMgb25seSBwYXJ0IG9mIHRoZSAgU1ZHLlxuLy8gICAgVGhlIFNWRyBhbHdheXMgaGFzIGEgbG9uZ2VyLCB0aGlubmVyIGFzcGVjdCByYXRpbyB0aGFuIHRoZSBjb250YWluZXIgc3Bhbi5cbi8vICAgIEFmdGVyIHRoZSBTVkcgZmlsbHMgMTAwJSBvZiB0aGUgaGVpZ2h0IG9mIHRoZSBjb250YWluZXIgc3Bhbixcbi8vICAgIHRoZXJlIGlzIGEgbG9uZyBhcnJvdyBzaGFmdCBsZWZ0IG92ZXIuIFRoYXQgbGVmdC1vdmVyIHNoYWZ0IGlzIG5vdCBzaG93bi5cbi8vICAgIEluc3RlYWQsIGl0IGlzIHNsaWNlZCBvZmYgYmVjYXVzZSB0aGUgc3BhbidzIENTUyBoYXMgb3ZlcmZsb3c6IGhpZGRlbi5cbi8vICAgIFRodXMsIHRoZSByZWFkZXIgc2VlcyBhbiBhcnJvdyB0aGF0IG1hdGNoZXMgdGhlIHN1YmplY3QgbWF0dGVyIHdpZHRoXG4vLyAgICB3aXRob3V0IGRpc3RvcnRpb24uXG4vLyAgICBTb21lIGZ1bmN0aW9ucywgc3VjaCBhcyBcXGNhbmNlbCwgbmVlZCB0byB2YXJ5IHRoZWlyIGFzcGVjdCByYXRpby4gVGhlc2Vcbi8vICAgIGZ1bmN0aW9ucyBkbyBub3QgZ2V0IHRoZSBvdmVyZmxvdyBTVkcgdHJlYXRtZW50LlxuLy8gU2Vjb25kIEJydXNoIFN0cm9rZVxuLy8gICAgTG93IHJlc29sdXRpb24gbW9uaXRvcnMgc3RydWdnbGUgdG8gZGlzcGxheSBpbWFnZXMgaW4gZmluZSBkZXRhaWwuXG4vLyAgICBTbyBicm93c2VycyBhcHBseSBhbnRpLWFsaWFzaW5nLiBBIGxvbmcgc3RyYWlnaHQgYXJyb3cgc2hhZnQgdGhlcmVmb3JlXG4vLyAgICB3aWxsIHNvbWV0aW1lcyBhcHBlYXIgYXMgaWYgaXQgaGFzIGEgYmx1cnJlZCBlZGdlLlxuLy8gICAgVG8gbWl0aWdhdGUgdGhpcywgdGhlc2UgU1ZHIGZpbGVzIGNvbnRhaW4gYSBzZWNvbmQgXCJicnVzaC1zdHJva2VcIiBvbiB0aGVcbi8vICAgIGFycm93IHNoYWZ0cy4gVGhhdCBpcywgYSBzZWNvbmQgbG9uZyB0aGluIHJlY3Rhbmd1bGFyIFNWRyBwYXRoIGhhcyBiZWVuXG4vLyAgICB3cml0dGVuIGRpcmVjdGx5IG9uIHRvcCBvZiBlYWNoIGFycm93IHNoYWZ0LiBUaGlzIHJlaW5mb3JjZW1lbnQgY2F1c2VzXG4vLyAgICBzb21lIG9mIHRoZSBzY3JlZW4gcGl4ZWxzIHRvIGRpc3BsYXkgYXMgYmxhY2sgaW5zdGVhZCBvZiB0aGUgYW50aS1hbGlhc2VkXG4vLyAgICBncmF5IHBpeGVsIHRoYXQgYSAgc2luZ2xlIHBhdGggd291bGQgZ2VuZXJhdGUuIFNvIHdlIGdldCBhcnJvdyBzaGFmdHNcbi8vICAgIHdob3NlIGVkZ2VzIGFwcGVhciB0byBiZSBzaGFycGVyLlxuLy8gSW4gdGhlIGthdGV4SW1hZ2VzRGF0YSBvYmplY3QganVzdCBiZWxvdywgdGhlIGRpbWVuc2lvbnMgYWxsXG4vLyBjb3JyZXNwb25kIHRvIHBhdGggZ2VvbWV0cnkgaW5zaWRlIHRoZSByZWxldmFudCBTVkcuXG4vLyBGb3IgZXhhbXBsZSwgXFxvdmVycmlnaHRhcnJvdyB1c2VzIHRoZSBzYW1lIGFycm93aGVhZCBhcyBnbHlwaCBVKzIxOTJcbi8vIGZyb20gdGhlIEthVGVYIE1haW4gZm9udC4gVGhlIHNjYWxpbmcgZmFjdG9yIGlzIDEwMDAuXG4vLyBUaGF0IGlzLCBpbnNpZGUgdGhlIGZvbnQsIHRoYXQgYXJyb3doZWFkIGlzIDUyMiB1bml0cyB0YWxsLCB3aGljaFxuLy8gY29ycmVzcG9uZHMgdG8gMC41MjIgZW0gaW5zaWRlIHRoZSBkb2N1bWVudC5cblxuXG52YXIga2F0ZXhJbWFnZXNEYXRhID0ge1xuICAvLyAgIHBhdGgocyksIG1pbldpZHRoLCBoZWlnaHQsIGFsaWduXG4gIG92ZXJyaWdodGFycm93OiBbW1wicmlnaHRhcnJvd1wiXSwgMC44ODgsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgb3ZlcmxlZnRhcnJvdzogW1tcImxlZnRhcnJvd1wiXSwgMC44ODgsIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgdW5kZXJyaWdodGFycm93OiBbW1wicmlnaHRhcnJvd1wiXSwgMC44ODgsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgdW5kZXJsZWZ0YXJyb3c6IFtbXCJsZWZ0YXJyb3dcIl0sIDAuODg4LCA1MjIsIFwieE1pbllNaW5cIl0sXG4gIHhyaWdodGFycm93OiBbW1wicmlnaHRhcnJvd1wiXSwgMS40NjksIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgeGxlZnRhcnJvdzogW1tcImxlZnRhcnJvd1wiXSwgMS40NjksIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgT3ZlcnJpZ2h0YXJyb3c6IFtbXCJkb3VibGVyaWdodGFycm93XCJdLCAwLjg4OCwgNTYwLCBcInhNYXhZTWluXCJdLFxuICB4UmlnaHRhcnJvdzogW1tcImRvdWJsZXJpZ2h0YXJyb3dcIl0sIDEuNTI2LCA1NjAsIFwieE1heFlNaW5cIl0sXG4gIHhMZWZ0YXJyb3c6IFtbXCJkb3VibGVsZWZ0YXJyb3dcIl0sIDEuNTI2LCA1NjAsIFwieE1pbllNaW5cIl0sXG4gIG92ZXJsZWZ0aGFycG9vbjogW1tcImxlZnRoYXJwb29uXCJdLCAwLjg4OCwgNTIyLCBcInhNaW5ZTWluXCJdLFxuICB4bGVmdGhhcnBvb251cDogW1tcImxlZnRoYXJwb29uXCJdLCAwLjg4OCwgNTIyLCBcInhNaW5ZTWluXCJdLFxuICB4bGVmdGhhcnBvb25kb3duOiBbW1wibGVmdGhhcnBvb25kb3duXCJdLCAwLjg4OCwgNTIyLCBcInhNaW5ZTWluXCJdLFxuICBvdmVycmlnaHRoYXJwb29uOiBbW1wicmlnaHRoYXJwb29uXCJdLCAwLjg4OCwgNTIyLCBcInhNYXhZTWluXCJdLFxuICB4cmlnaHRoYXJwb29udXA6IFtbXCJyaWdodGhhcnBvb25cIl0sIDAuODg4LCA1MjIsIFwieE1heFlNaW5cIl0sXG4gIHhyaWdodGhhcnBvb25kb3duOiBbW1wicmlnaHRoYXJwb29uZG93blwiXSwgMC44ODgsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgeGxvbmdlcXVhbDogW1tcImxvbmdlcXVhbFwiXSwgMC44ODgsIDMzNCwgXCJ4TWluWU1pblwiXSxcbiAgeHR3b2hlYWRsZWZ0YXJyb3c6IFtbXCJ0d29oZWFkbGVmdGFycm93XCJdLCAwLjg4OCwgMzM0LCBcInhNaW5ZTWluXCJdLFxuICB4dHdvaGVhZHJpZ2h0YXJyb3c6IFtbXCJ0d29oZWFkcmlnaHRhcnJvd1wiXSwgMC44ODgsIDMzNCwgXCJ4TWF4WU1pblwiXSxcbiAgb3ZlcmxlZnRyaWdodGFycm93OiBbW1wibGVmdGFycm93XCIsIFwicmlnaHRhcnJvd1wiXSwgMC44ODgsIDUyMl0sXG4gIG92ZXJicmFjZTogW1tcImxlZnRicmFjZVwiLCBcIm1pZGJyYWNlXCIsIFwicmlnaHRicmFjZVwiXSwgMS42LCA1NDhdLFxuICB1bmRlcmJyYWNlOiBbW1wibGVmdGJyYWNldW5kZXJcIiwgXCJtaWRicmFjZXVuZGVyXCIsIFwicmlnaHRicmFjZXVuZGVyXCJdLCAxLjYsIDU0OF0sXG4gIHVuZGVybGVmdHJpZ2h0YXJyb3c6IFtbXCJsZWZ0YXJyb3dcIiwgXCJyaWdodGFycm93XCJdLCAwLjg4OCwgNTIyXSxcbiAgeGxlZnRyaWdodGFycm93OiBbW1wibGVmdGFycm93XCIsIFwicmlnaHRhcnJvd1wiXSwgMS43NSwgNTIyXSxcbiAgeExlZnRyaWdodGFycm93OiBbW1wiZG91YmxlbGVmdGFycm93XCIsIFwiZG91YmxlcmlnaHRhcnJvd1wiXSwgMS43NSwgNTYwXSxcbiAgeHJpZ2h0bGVmdGhhcnBvb25zOiBbW1wibGVmdGhhcnBvb25kb3ducGx1c1wiLCBcInJpZ2h0aGFycG9vbnBsdXNcIl0sIDEuNzUsIDcxNl0sXG4gIHhsZWZ0cmlnaHRoYXJwb29uczogW1tcImxlZnRoYXJwb29ucGx1c1wiLCBcInJpZ2h0aGFycG9vbmRvd25wbHVzXCJdLCAxLjc1LCA3MTZdLFxuICB4aG9va2xlZnRhcnJvdzogW1tcImxlZnRhcnJvd1wiLCBcInJpZ2h0aG9va1wiXSwgMS4wOCwgNTIyXSxcbiAgeGhvb2tyaWdodGFycm93OiBbW1wibGVmdGhvb2tcIiwgXCJyaWdodGFycm93XCJdLCAxLjA4LCA1MjJdLFxuICBvdmVybGluZXNlZ21lbnQ6IFtbXCJsZWZ0bGluZXNlZ21lbnRcIiwgXCJyaWdodGxpbmVzZWdtZW50XCJdLCAwLjg4OCwgNTIyXSxcbiAgdW5kZXJsaW5lc2VnbWVudDogW1tcImxlZnRsaW5lc2VnbWVudFwiLCBcInJpZ2h0bGluZXNlZ21lbnRcIl0sIDAuODg4LCA1MjJdLFxuICBvdmVyZ3JvdXA6IFtbXCJsZWZ0Z3JvdXBcIiwgXCJyaWdodGdyb3VwXCJdLCAwLjg4OCwgMzQyXSxcbiAgdW5kZXJncm91cDogW1tcImxlZnRncm91cHVuZGVyXCIsIFwicmlnaHRncm91cHVuZGVyXCJdLCAwLjg4OCwgMzQyXSxcbiAgeG1hcHN0bzogW1tcImxlZnRtYXBzdG9cIiwgXCJyaWdodGFycm93XCJdLCAxLjUsIDUyMl0sXG4gIHh0b2Zyb206IFtbXCJsZWZ0VG9Gcm9tXCIsIFwicmlnaHRUb0Zyb21cIl0sIDEuNzUsIDUyOF0sXG4gIC8vIFRoZSBuZXh0IHRocmVlIGFycm93cyBhcmUgZnJvbSB0aGUgbWhjaGVtIHBhY2thZ2UuXG4gIC8vIEluIG1oY2hlbS5zdHksIG1pbi1sZW5ndGggaXMgMi4wZW0uIEJ1dCB0aGVzZSBhcnJvd3MgbWlnaHQgYXBwZWFyIGluIHRoZVxuICAvLyBkb2N1bWVudCBhcyBcXHhyaWdodGFycm93IG9yIFxceHJpZ2h0bGVmdGhhcnBvb25zLiBUaG9zZSBoYXZlXG4gIC8vIG1pbi1sZW5ndGggPSAxLjc1ZW0sIHNvIHdlIHNldCBtaW4tbGVuZ3RoIG9uIHRoZXNlIG5leHQgdGhyZWUgdG8gbWF0Y2guXG4gIHhyaWdodGxlZnRhcnJvd3M6IFtbXCJiYXJhYm92ZWxlZnRhcnJvd1wiLCBcInJpZ2h0YXJyb3dhYm92ZWJhclwiXSwgMS43NSwgOTAxXSxcbiAgeHJpZ2h0ZXF1aWxpYnJpdW06IFtbXCJiYXJhYm92ZXNob3J0bGVmdGhhcnBvb25cIiwgXCJyaWdodGhhcnBvb25hYm92ZXNob3J0YmFyXCJdLCAxLjc1LCA3MTZdLFxuICB4bGVmdGVxdWlsaWJyaXVtOiBbW1wic2hvcnRiYXJhYm92ZWxlZnRoYXJwb29uXCIsIFwic2hvcnRyaWdodGhhcnBvb25hYm92ZWJhclwiXSwgMS43NSwgNzE2XVxufTtcblxudmFyIGdyb3VwTGVuZ3RoID0gZnVuY3Rpb24gZ3JvdXBMZW5ndGgoYXJnKSB7XG4gIGlmIChhcmcudHlwZSA9PT0gXCJvcmRncm91cFwiKSB7XG4gICAgcmV0dXJuIGFyZy5ib2R5Lmxlbmd0aDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMTtcbiAgfVxufTtcblxudmFyIHN0cmV0Y2h5X3N2Z1NwYW4gPSBmdW5jdGlvbiBzdmdTcGFuKGdyb3VwLCBvcHRpb25zKSB7XG4gIC8vIENyZWF0ZSBhIHNwYW4gd2l0aCBpbmxpbmUgU1ZHIGZvciB0aGUgZWxlbWVudC5cbiAgZnVuY3Rpb24gYnVpbGRTdmdTcGFuXygpIHtcbiAgICB2YXIgdmlld0JveFdpZHRoID0gNDAwMDAwOyAvLyBkZWZhdWx0XG5cbiAgICB2YXIgbGFiZWwgPSBncm91cC5sYWJlbC5zdWJzdHIoMSk7XG5cbiAgICBpZiAodXRpbHMuY29udGFpbnMoW1wid2lkZWhhdFwiLCBcIndpZGVjaGVja1wiLCBcIndpZGV0aWxkZVwiLCBcInV0aWxkZVwiXSwgbGFiZWwpKSB7XG4gICAgICAvLyBFYWNoIHR5cGUgaW4gdGhlIGBpZmAgc3RhdGVtZW50IGNvcnJlc3BvbmRzIHRvIG9uZSBvZiB0aGUgUGFyc2VOb2RlXG4gICAgICAvLyB0eXBlcyBiZWxvdy4gVGhpcyBuYXJyb3dpbmcgaXMgcmVxdWlyZWQgdG8gYWNjZXNzIGBncnAuYmFzZWAuXG4gICAgICB2YXIgZ3JwID0gZ3JvdXA7IC8vIFRoZXJlIGFyZSBmb3VyIFNWRyBpbWFnZXMgYXZhaWxhYmxlIGZvciBlYWNoIGZ1bmN0aW9uLlxuICAgICAgLy8gQ2hvb3NlIGEgdGFsbGVyIGltYWdlIHdoZW4gdGhlcmUgYXJlIG1vcmUgY2hhcmFjdGVycy5cblxuICAgICAgdmFyIG51bUNoYXJzID0gZ3JvdXBMZW5ndGgoZ3JwLmJhc2UpO1xuICAgICAgdmFyIHZpZXdCb3hIZWlnaHQ7XG4gICAgICB2YXIgcGF0aE5hbWU7XG5cbiAgICAgIHZhciBfaGVpZ2h0O1xuXG4gICAgICBpZiAobnVtQ2hhcnMgPiA1KSB7XG4gICAgICAgIGlmIChsYWJlbCA9PT0gXCJ3aWRlaGF0XCIgfHwgbGFiZWwgPT09IFwid2lkZWNoZWNrXCIpIHtcbiAgICAgICAgICB2aWV3Qm94SGVpZ2h0ID0gNDIwO1xuICAgICAgICAgIHZpZXdCb3hXaWR0aCA9IDIzNjQ7XG4gICAgICAgICAgX2hlaWdodCA9IDAuNDI7XG4gICAgICAgICAgcGF0aE5hbWUgPSBsYWJlbCArIFwiNFwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZpZXdCb3hIZWlnaHQgPSAzMTI7XG4gICAgICAgICAgdmlld0JveFdpZHRoID0gMjM0MDtcbiAgICAgICAgICBfaGVpZ2h0ID0gMC4zNDtcbiAgICAgICAgICBwYXRoTmFtZSA9IFwidGlsZGU0XCI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBpbWdJbmRleCA9IFsxLCAxLCAyLCAyLCAzLCAzXVtudW1DaGFyc107XG5cbiAgICAgICAgaWYgKGxhYmVsID09PSBcIndpZGVoYXRcIiB8fCBsYWJlbCA9PT0gXCJ3aWRlY2hlY2tcIikge1xuICAgICAgICAgIHZpZXdCb3hXaWR0aCA9IFswLCAxMDYyLCAyMzY0LCAyMzY0LCAyMzY0XVtpbWdJbmRleF07XG4gICAgICAgICAgdmlld0JveEhlaWdodCA9IFswLCAyMzksIDMwMCwgMzYwLCA0MjBdW2ltZ0luZGV4XTtcbiAgICAgICAgICBfaGVpZ2h0ID0gWzAsIDAuMjQsIDAuMywgMC4zLCAwLjM2LCAwLjQyXVtpbWdJbmRleF07XG4gICAgICAgICAgcGF0aE5hbWUgPSBsYWJlbCArIGltZ0luZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZpZXdCb3hXaWR0aCA9IFswLCA2MDAsIDEwMzMsIDIzMzksIDIzNDBdW2ltZ0luZGV4XTtcbiAgICAgICAgICB2aWV3Qm94SGVpZ2h0ID0gWzAsIDI2MCwgMjg2LCAzMDYsIDMxMl1baW1nSW5kZXhdO1xuICAgICAgICAgIF9oZWlnaHQgPSBbMCwgMC4yNiwgMC4yODYsIDAuMywgMC4zMDYsIDAuMzRdW2ltZ0luZGV4XTtcbiAgICAgICAgICBwYXRoTmFtZSA9IFwidGlsZGVcIiArIGltZ0luZGV4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBwYXRoID0gbmV3IGRvbVRyZWVfUGF0aE5vZGUocGF0aE5hbWUpO1xuICAgICAgdmFyIHN2Z05vZGUgPSBuZXcgU3ZnTm9kZShbcGF0aF0sIHtcbiAgICAgICAgXCJ3aWR0aFwiOiBcIjEwMCVcIixcbiAgICAgICAgXCJoZWlnaHRcIjogX2hlaWdodCArIFwiZW1cIixcbiAgICAgICAgXCJ2aWV3Qm94XCI6IFwiMCAwIFwiICsgdmlld0JveFdpZHRoICsgXCIgXCIgKyB2aWV3Qm94SGVpZ2h0LFxuICAgICAgICBcInByZXNlcnZlQXNwZWN0UmF0aW9cIjogXCJub25lXCJcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3BhbjogYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW10sIFtzdmdOb2RlXSwgb3B0aW9ucyksXG4gICAgICAgIG1pbldpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IF9oZWlnaHRcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzcGFucyA9IFtdO1xuICAgICAgdmFyIGRhdGEgPSBrYXRleEltYWdlc0RhdGFbbGFiZWxdO1xuICAgICAgdmFyIHBhdGhzID0gZGF0YVswXSxcbiAgICAgICAgICBfbWluV2lkdGggPSBkYXRhWzFdLFxuICAgICAgICAgIF92aWV3Qm94SGVpZ2h0ID0gZGF0YVsyXTtcblxuICAgICAgdmFyIF9oZWlnaHQyID0gX3ZpZXdCb3hIZWlnaHQgLyAxMDAwO1xuXG4gICAgICB2YXIgbnVtU3ZnQ2hpbGRyZW4gPSBwYXRocy5sZW5ndGg7XG4gICAgICB2YXIgd2lkdGhDbGFzc2VzO1xuICAgICAgdmFyIGFsaWducztcblxuICAgICAgaWYgKG51bVN2Z0NoaWxkcmVuID09PSAxKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWU6IEFsbCB0aGVzZSBjYXNlcyBtdXN0IGJlIG9mIHRoZSA0LXR1cGxlIHR5cGUuXG4gICAgICAgIHZhciBhbGlnbjEgPSBkYXRhWzNdO1xuICAgICAgICB3aWR0aENsYXNzZXMgPSBbXCJoaWRlLXRhaWxcIl07XG4gICAgICAgIGFsaWducyA9IFthbGlnbjFdO1xuICAgICAgfSBlbHNlIGlmIChudW1TdmdDaGlsZHJlbiA9PT0gMikge1xuICAgICAgICB3aWR0aENsYXNzZXMgPSBbXCJoYWxmYXJyb3ctbGVmdFwiLCBcImhhbGZhcnJvdy1yaWdodFwiXTtcbiAgICAgICAgYWxpZ25zID0gW1wieE1pbllNaW5cIiwgXCJ4TWF4WU1pblwiXTtcbiAgICAgIH0gZWxzZSBpZiAobnVtU3ZnQ2hpbGRyZW4gPT09IDMpIHtcbiAgICAgICAgd2lkdGhDbGFzc2VzID0gW1wiYnJhY2UtbGVmdFwiLCBcImJyYWNlLWNlbnRlclwiLCBcImJyYWNlLXJpZ2h0XCJdO1xuICAgICAgICBhbGlnbnMgPSBbXCJ4TWluWU1pblwiLCBcInhNaWRZTWluXCIsIFwieE1heFlNaW5cIl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3JyZWN0IGthdGV4SW1hZ2VzRGF0YSBvciB1cGRhdGUgY29kZSBoZXJlIHRvIHN1cHBvcnRcXG4gICAgICAgICAgICAgICAgICAgIFwiICsgbnVtU3ZnQ2hpbGRyZW4gKyBcIiBjaGlsZHJlbi5cIik7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtU3ZnQ2hpbGRyZW47IGkrKykge1xuICAgICAgICB2YXIgX3BhdGggPSBuZXcgZG9tVHJlZV9QYXRoTm9kZShwYXRoc1tpXSk7XG5cbiAgICAgICAgdmFyIF9zdmdOb2RlID0gbmV3IFN2Z05vZGUoW19wYXRoXSwge1xuICAgICAgICAgIFwid2lkdGhcIjogXCI0MDBlbVwiLFxuICAgICAgICAgIFwiaGVpZ2h0XCI6IF9oZWlnaHQyICsgXCJlbVwiLFxuICAgICAgICAgIFwidmlld0JveFwiOiBcIjAgMCBcIiArIHZpZXdCb3hXaWR0aCArIFwiIFwiICsgX3ZpZXdCb3hIZWlnaHQsXG4gICAgICAgICAgXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCI6IGFsaWduc1tpXSArIFwiIHNsaWNlXCJcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIF9zcGFuID0gYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW3dpZHRoQ2xhc3Nlc1tpXV0sIFtfc3ZnTm9kZV0sIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChudW1TdmdDaGlsZHJlbiA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzcGFuOiBfc3BhbixcbiAgICAgICAgICAgIG1pbldpZHRoOiBfbWluV2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IF9oZWlnaHQyXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfc3Bhbi5zdHlsZS5oZWlnaHQgPSBfaGVpZ2h0MiArIFwiZW1cIjtcbiAgICAgICAgICBzcGFucy5wdXNoKF9zcGFuKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzcGFuOiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJzdHJldGNoeVwiXSwgc3BhbnMsIG9wdGlvbnMpLFxuICAgICAgICBtaW5XaWR0aDogX21pbldpZHRoLFxuICAgICAgICBoZWlnaHQ6IF9oZWlnaHQyXG4gICAgICB9O1xuICAgIH1cbiAgfSAvLyBidWlsZFN2Z1NwYW5fKClcblxuXG4gIHZhciBfYnVpbGRTdmdTcGFuXyA9IGJ1aWxkU3ZnU3Bhbl8oKSxcbiAgICAgIHNwYW4gPSBfYnVpbGRTdmdTcGFuXy5zcGFuLFxuICAgICAgbWluV2lkdGggPSBfYnVpbGRTdmdTcGFuXy5taW5XaWR0aCxcbiAgICAgIGhlaWdodCA9IF9idWlsZFN2Z1NwYW5fLmhlaWdodDsgLy8gTm90ZSB0aGF0IHdlIGFyZSByZXR1cm5pbmcgc3Bhbi5kZXB0aCA9IDAuXG4gIC8vIEFueSBhZGp1c3RtZW50cyByZWxhdGl2ZSB0byB0aGUgYmFzZWxpbmUgbXVzdCBiZSBkb25lIGluIGJ1aWxkSFRNTC5cblxuXG4gIHNwYW4uaGVpZ2h0ID0gaGVpZ2h0O1xuICBzcGFuLnN0eWxlLmhlaWdodCA9IGhlaWdodCArIFwiZW1cIjtcblxuICBpZiAobWluV2lkdGggPiAwKSB7XG4gICAgc3Bhbi5zdHlsZS5taW5XaWR0aCA9IG1pbldpZHRoICsgXCJlbVwiO1xuICB9XG5cbiAgcmV0dXJuIHNwYW47XG59O1xuXG52YXIgc3RyZXRjaHlfZW5jbG9zZVNwYW4gPSBmdW5jdGlvbiBlbmNsb3NlU3Bhbihpbm5lciwgbGFiZWwsIHBhZCwgb3B0aW9ucykge1xuICAvLyBSZXR1cm4gYW4gaW1hZ2Ugc3BhbiBmb3IgXFxjYW5jZWwsIFxcYmNhbmNlbCwgXFx4Y2FuY2VsLCBvciBcXGZib3hcbiAgdmFyIGltZztcbiAgdmFyIHRvdGFsSGVpZ2h0ID0gaW5uZXIuaGVpZ2h0ICsgaW5uZXIuZGVwdGggKyAyICogcGFkO1xuXG4gIGlmICgvZmJveHxjb2xvci8udGVzdChsYWJlbCkpIHtcbiAgICBpbWcgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJzdHJldGNoeVwiLCBsYWJlbF0sIFtdLCBvcHRpb25zKTtcblxuICAgIGlmIChsYWJlbCA9PT0gXCJmYm94XCIpIHtcbiAgICAgIHZhciBjb2xvciA9IG9wdGlvbnMuY29sb3IgJiYgb3B0aW9ucy5nZXRDb2xvcigpO1xuXG4gICAgICBpZiAoY29sb3IpIHtcbiAgICAgICAgaW1nLnN0eWxlLmJvcmRlckNvbG9yID0gY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFxcY2FuY2VsLCBcXGJjYW5jZWwsIG9yIFxceGNhbmNlbFxuICAgIC8vIFNpbmNlIFxcY2FuY2VsJ3MgU1ZHIGlzIGlubGluZSBhbmQgaXQgb21pdHMgdGhlIHZpZXdCb3ggYXR0cmlidXRlLFxuICAgIC8vIGl0cyBzdHJva2Utd2lkdGggd2lsbCBub3QgdmFyeSB3aXRoIHNwYW4gYXJlYS5cbiAgICB2YXIgbGluZXMgPSBbXTtcblxuICAgIGlmICgvXltieF1jYW5jZWwkLy50ZXN0KGxhYmVsKSkge1xuICAgICAgbGluZXMucHVzaChuZXcgTGluZU5vZGUoe1xuICAgICAgICBcIngxXCI6IFwiMFwiLFxuICAgICAgICBcInkxXCI6IFwiMFwiLFxuICAgICAgICBcIngyXCI6IFwiMTAwJVwiLFxuICAgICAgICBcInkyXCI6IFwiMTAwJVwiLFxuICAgICAgICBcInN0cm9rZS13aWR0aFwiOiBcIjAuMDQ2ZW1cIlxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlmICgvXng/Y2FuY2VsJC8udGVzdChsYWJlbCkpIHtcbiAgICAgIGxpbmVzLnB1c2gobmV3IExpbmVOb2RlKHtcbiAgICAgICAgXCJ4MVwiOiBcIjBcIixcbiAgICAgICAgXCJ5MVwiOiBcIjEwMCVcIixcbiAgICAgICAgXCJ4MlwiOiBcIjEwMCVcIixcbiAgICAgICAgXCJ5MlwiOiBcIjBcIixcbiAgICAgICAgXCJzdHJva2Utd2lkdGhcIjogXCIwLjA0NmVtXCJcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICB2YXIgc3ZnTm9kZSA9IG5ldyBTdmdOb2RlKGxpbmVzLCB7XG4gICAgICBcIndpZHRoXCI6IFwiMTAwJVwiLFxuICAgICAgXCJoZWlnaHRcIjogdG90YWxIZWlnaHQgKyBcImVtXCJcbiAgICB9KTtcbiAgICBpbWcgPSBidWlsZENvbW1vbi5tYWtlU3ZnU3BhbihbXSwgW3N2Z05vZGVdLCBvcHRpb25zKTtcbiAgfVxuXG4gIGltZy5oZWlnaHQgPSB0b3RhbEhlaWdodDtcbiAgaW1nLnN0eWxlLmhlaWdodCA9IHRvdGFsSGVpZ2h0ICsgXCJlbVwiO1xuICByZXR1cm4gaW1nO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3RyZXRjaHkgPSAoe1xuICBlbmNsb3NlU3Bhbjogc3RyZXRjaHlfZW5jbG9zZVNwYW4sXG4gIG1hdGhNTG5vZGU6IHN0cmV0Y2h5X21hdGhNTG5vZGUsXG4gIHN2Z1NwYW46IHN0cmV0Y2h5X3N2Z1NwYW5cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2FjY2VudC5qc1xuXG5cblxuXG5cblxuXG5cblxuLy8gTk9URTogVW5saWtlIG1vc3QgYGh0bWxCdWlsZGVyYHMsIHRoaXMgb25lIGhhbmRsZXMgbm90IG9ubHkgXCJhY2NlbnRcIiwgYnV0XG52YXIgYWNjZW50X2h0bWxCdWlsZGVyID0gZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JwLCBvcHRpb25zKSB7XG4gIC8vIEFjY2VudHMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgcGcuIDQ0MywgcnVsZSAxMi5cbiAgdmFyIGJhc2U7XG4gIHZhciBncm91cDtcbiAgdmFyIHN1cFN1YiA9IGNoZWNrTm9kZVR5cGUoZ3JwLCBcInN1cHN1YlwiKTtcbiAgdmFyIHN1cFN1Ykdyb3VwO1xuXG4gIGlmIChzdXBTdWIpIHtcbiAgICAvLyBJZiBvdXIgYmFzZSBpcyBhIGNoYXJhY3RlciBib3gsIGFuZCB3ZSBoYXZlIHN1cGVyc2NyaXB0cyBhbmRcbiAgICAvLyBzdWJzY3JpcHRzLCB0aGUgc3Vwc3ViIHdpbGwgZGVmZXIgdG8gdXMuIEluIHBhcnRpY3VsYXIsIHdlIHdhbnRcbiAgICAvLyB0byBhdHRhY2ggdGhlIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cyB0byB0aGUgaW5uZXIgYm9keSAoc29cbiAgICAvLyB0aGF0IHRoZSBwb3NpdGlvbiBvZiB0aGUgc3VwZXJzY3JpcHRzIGFuZCBzdWJzY3JpcHRzIHdvbid0IGJlXG4gICAgLy8gYWZmZWN0ZWQgYnkgdGhlIGhlaWdodCBvZiB0aGUgYWNjZW50KS4gV2UgYWNjb21wbGlzaCB0aGlzIGJ5XG4gICAgLy8gc3RpY2tpbmcgdGhlIGJhc2Ugb2YgdGhlIGFjY2VudCBpbnRvIHRoZSBiYXNlIG9mIHRoZSBzdXBzdWIsIGFuZFxuICAgIC8vIHJlbmRlcmluZyB0aGF0LCB3aGlsZSBrZWVwaW5nIHRyYWNrIG9mIHdoZXJlIHRoZSBhY2NlbnQgaXMuXG4gICAgLy8gVGhlIHJlYWwgYWNjZW50IGdyb3VwIGlzIHRoZSBiYXNlIG9mIHRoZSBzdXBzdWIgZ3JvdXBcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKHN1cFN1Yi5iYXNlLCBcImFjY2VudFwiKTsgLy8gVGhlIGNoYXJhY3RlciBib3ggaXMgdGhlIGJhc2Ugb2YgdGhlIGFjY2VudCBncm91cFxuXG4gICAgYmFzZSA9IGdyb3VwLmJhc2U7IC8vIFN0aWNrIHRoZSBjaGFyYWN0ZXIgYm94IGludG8gdGhlIGJhc2Ugb2YgdGhlIHN1cHN1YiBncm91cFxuXG4gICAgc3VwU3ViLmJhc2UgPSBiYXNlOyAvLyBSZXJlbmRlciB0aGUgc3Vwc3ViIGdyb3VwIHdpdGggaXRzIG5ldyBiYXNlLCBhbmQgc3RvcmUgdGhhdFxuICAgIC8vIHJlc3VsdC5cblxuICAgIHN1cFN1Ykdyb3VwID0gYXNzZXJ0U3BhbihidWlsZEhUTUxfYnVpbGRHcm91cChzdXBTdWIsIG9wdGlvbnMpKTsgLy8gcmVzZXQgb3JpZ2luYWwgYmFzZVxuXG4gICAgc3VwU3ViLmJhc2UgPSBncm91cDtcbiAgfSBlbHNlIHtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKGdycCwgXCJhY2NlbnRcIik7XG4gICAgYmFzZSA9IGdyb3VwLmJhc2U7XG4gIH0gLy8gQnVpbGQgdGhlIGJhc2UgZ3JvdXBcblxuXG4gIHZhciBib2R5ID0gYnVpbGRIVE1MX2J1aWxkR3JvdXAoYmFzZSwgb3B0aW9ucy5oYXZpbmdDcmFtcGVkU3R5bGUoKSk7IC8vIERvZXMgdGhlIGFjY2VudCBuZWVkIHRvIHNoaWZ0IGZvciB0aGUgc2tldyBvZiBhIGNoYXJhY3Rlcj9cblxuICB2YXIgbXVzdFNoaWZ0ID0gZ3JvdXAuaXNTaGlmdHkgJiYgdXRpbHMuaXNDaGFyYWN0ZXJCb3goYmFzZSk7IC8vIENhbGN1bGF0ZSB0aGUgc2tldyBvZiB0aGUgYWNjZW50LiBUaGlzIGlzIGJhc2VkIG9uIHRoZSBsaW5lIFwiSWYgdGhlXG4gIC8vIG51Y2xldXMgaXMgbm90IGEgc2luZ2xlIGNoYXJhY3RlciwgbGV0IHMgPSAwOyBvdGhlcndpc2Ugc2V0IHMgdG8gdGhlXG4gIC8vIGtlcm4gYW1vdW50IGZvciB0aGUgbnVjbGV1cyBmb2xsb3dlZCBieSB0aGUgXFxza2V3Y2hhciBvZiBpdHMgZm9udC5cIlxuICAvLyBOb3RlIHRoYXQgb3VyIHNrZXcgbWV0cmljcyBhcmUganVzdCB0aGUga2VybiBiZXR3ZWVuIGVhY2ggY2hhcmFjdGVyXG4gIC8vIGFuZCB0aGUgc2tld2NoYXIuXG5cbiAgdmFyIHNrZXcgPSAwO1xuXG4gIGlmIChtdXN0U2hpZnQpIHtcbiAgICAvLyBJZiB0aGUgYmFzZSBpcyBhIGNoYXJhY3RlciBib3gsIHRoZW4gd2Ugd2FudCB0aGUgc2tldyBvZiB0aGVcbiAgICAvLyBpbm5lcm1vc3QgY2hhcmFjdGVyLiBUbyBkbyB0aGF0LCB3ZSBmaW5kIHRoZSBpbm5lcm1vc3QgY2hhcmFjdGVyOlxuICAgIHZhciBiYXNlQ2hhciA9IHV0aWxzLmdldEJhc2VFbGVtKGJhc2UpOyAvLyBUaGVuLCB3ZSByZW5kZXIgaXRzIGdyb3VwIHRvIGdldCB0aGUgc3ltYm9sIGluc2lkZSBpdFxuXG4gICAgdmFyIGJhc2VHcm91cCA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKGJhc2VDaGFyLCBvcHRpb25zLmhhdmluZ0NyYW1wZWRTdHlsZSgpKTsgLy8gRmluYWxseSwgd2UgcHVsbCB0aGUgc2tldyBvZmYgb2YgdGhlIHN5bWJvbC5cblxuICAgIHNrZXcgPSBhc3NlcnRTeW1ib2xEb21Ob2RlKGJhc2VHcm91cCkuc2tldzsgLy8gTm90ZSB0aGF0IHdlIG5vdyB0aHJvdyBhd2F5IGJhc2VHcm91cCwgYmVjYXVzZSB0aGUgbGF5ZXJzIHdlXG4gICAgLy8gcmVtb3ZlZCB3aXRoIGdldEJhc2VFbGVtIG1pZ2h0IGNvbnRhaW4gdGhpbmdzIGxpa2UgXFxjb2xvciB3aGljaFxuICAgIC8vIHdlIGNhbid0IGdldCByaWQgb2YuXG4gICAgLy8gVE9ETyhlbWlseSk6IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGdldCB0aGUgc2tld1xuICB9IC8vIGNhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIHNwYWNlIGJldHdlZW4gdGhlIGJvZHkgYW5kIHRoZSBhY2NlbnRcblxuXG4gIHZhciBjbGVhcmFuY2UgPSBNYXRoLm1pbihib2R5LmhlaWdodCwgb3B0aW9ucy5mb250TWV0cmljcygpLnhIZWlnaHQpOyAvLyBCdWlsZCB0aGUgYWNjZW50XG5cbiAgdmFyIGFjY2VudEJvZHk7XG5cbiAgaWYgKCFncm91cC5pc1N0cmV0Y2h5KSB7XG4gICAgdmFyIGFjY2VudDtcbiAgICB2YXIgd2lkdGg7XG5cbiAgICBpZiAoZ3JvdXAubGFiZWwgPT09IFwiXFxcXHZlY1wiKSB7XG4gICAgICAvLyBCZWZvcmUgdmVyc2lvbiAwLjksIFxcdmVjIHVzZWQgdGhlIGNvbWJpbmluZyBmb250IGdseXBoIFUrMjBENy5cbiAgICAgIC8vIEJ1dCBicm93c2VycywgZXNwZWNpYWxseSBTYWZhcmksIGFyZSBub3QgY29uc2lzdGVudCBpbiBob3cgdGhleVxuICAgICAgLy8gcmVuZGVyIGNvbWJpbmluZyBjaGFyYWN0ZXJzIHdoZW4gbm90IHByZWNlZGVkIGJ5IGEgY2hhcmFjdGVyLlxuICAgICAgLy8gU28gbm93IHdlIHVzZSBhbiBTVkcuXG4gICAgICAvLyBJZiBTYWZhcmkgcmVmb3Jtcywgd2Ugc2hvdWxkIGNvbnNpZGVyIHJldmVydGluZyB0byB0aGUgZ2x5cGguXG4gICAgICBhY2NlbnQgPSBidWlsZENvbW1vbi5zdGF0aWNTdmcoXCJ2ZWNcIiwgb3B0aW9ucyk7XG4gICAgICB3aWR0aCA9IGJ1aWxkQ29tbW9uLnN2Z0RhdGEudmVjWzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBhY2NlbnQgPSBidWlsZENvbW1vbi5tYWtlU3ltYm9sKGdyb3VwLmxhYmVsLCBcIk1haW4tUmVndWxhclwiLCBncm91cC5tb2RlLCBvcHRpb25zKTsgLy8gUmVtb3ZlIHRoZSBpdGFsaWMgY29ycmVjdGlvbiBvZiB0aGUgYWNjZW50LCBiZWNhdXNlIGl0IG9ubHkgc2VydmVzIHRvXG4gICAgICAvLyBzaGlmdCB0aGUgYWNjZW50IG92ZXIgdG8gYSBwbGFjZSB3ZSBkb24ndCB3YW50LlxuXG4gICAgICBhY2NlbnQuaXRhbGljID0gMDtcbiAgICAgIHdpZHRoID0gYWNjZW50LndpZHRoO1xuICAgIH1cblxuICAgIGFjY2VudEJvZHkgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJhY2NlbnQtYm9keVwiXSwgW2FjY2VudF0pOyAvLyBcIkZ1bGxcIiBhY2NlbnRzIGV4cGFuZCB0aGUgd2lkdGggb2YgdGhlIHJlc3VsdGluZyBzeW1ib2wgdG8gYmVcbiAgICAvLyBhdCBsZWFzdCB0aGUgd2lkdGggb2YgdGhlIGFjY2VudCwgYW5kIG92ZXJsYXAgZGlyZWN0bHkgb250byB0aGVcbiAgICAvLyBjaGFyYWN0ZXIgd2l0aG91dCBhbnkgdmVydGljYWwgb2Zmc2V0LlxuXG4gICAgdmFyIGFjY2VudEZ1bGwgPSBncm91cC5sYWJlbCA9PT0gXCJcXFxcdGV4dGNpcmNsZWRcIjtcblxuICAgIGlmIChhY2NlbnRGdWxsKSB7XG4gICAgICBhY2NlbnRCb2R5LmNsYXNzZXMucHVzaCgnYWNjZW50LWZ1bGwnKTtcbiAgICAgIGNsZWFyYW5jZSA9IGJvZHkuaGVpZ2h0O1xuICAgIH0gLy8gU2hpZnQgdGhlIGFjY2VudCBvdmVyIGJ5IHRoZSBza2V3LlxuXG5cbiAgICB2YXIgbGVmdCA9IHNrZXc7IC8vIENTUyBkZWZpbmVzIGAua2F0ZXggLmFjY2VudCAuYWNjZW50LWJvZHk6bm90KC5hY2NlbnQtZnVsbCkgeyB3aWR0aDogMCB9YFxuICAgIC8vIHNvIHRoYXQgdGhlIGFjY2VudCBkb2Vzbid0IGNvbnRyaWJ1dGUgdG8gdGhlIGJvdW5kaW5nIGJveC5cbiAgICAvLyBXZSBuZWVkIHRvIHNoaWZ0IHRoZSBjaGFyYWN0ZXIgYnkgaXRzIHdpZHRoIChlZmZlY3RpdmVseSBoYWxmXG4gICAgLy8gaXRzIHdpZHRoKSB0byBjb21wZW5zYXRlLlxuXG4gICAgaWYgKCFhY2NlbnRGdWxsKSB7XG4gICAgICBsZWZ0IC09IHdpZHRoIC8gMjtcbiAgICB9XG5cbiAgICBhY2NlbnRCb2R5LnN0eWxlLmxlZnQgPSBsZWZ0ICsgXCJlbVwiOyAvLyBcXHRleHRjaXJjbGVkIHVzZXMgdGhlIFxcYmlnY2lyYyBnbHlwaCwgc28gaXQgbmVlZHMgc29tZVxuICAgIC8vIHZlcnRpY2FsIGFkanVzdG1lbnQgdG8gbWF0Y2ggTGFUZVguXG5cbiAgICBpZiAoZ3JvdXAubGFiZWwgPT09IFwiXFxcXHRleHRjaXJjbGVkXCIpIHtcbiAgICAgIGFjY2VudEJvZHkuc3R5bGUudG9wID0gXCIuMmVtXCI7XG4gICAgfVxuXG4gICAgYWNjZW50Qm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBib2R5XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiAtY2xlYXJhbmNlXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBhY2NlbnRCb2R5XG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIGFjY2VudEJvZHkgPSBzdHJldGNoeS5zdmdTcGFuKGdyb3VwLCBvcHRpb25zKTtcbiAgICBhY2NlbnRCb2R5ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJmaXJzdEJhc2VsaW5lXCIsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJvZHlcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGFjY2VudEJvZHksXG4gICAgICAgIHdyYXBwZXJDbGFzc2VzOiBbXCJzdmctYWxpZ25cIl0sXG4gICAgICAgIHdyYXBwZXJTdHlsZTogc2tldyA+IDAgPyB7XG4gICAgICAgICAgd2lkdGg6IFwiY2FsYygxMDAlIC0gXCIgKyAyICogc2tldyArIFwiZW0pXCIsXG4gICAgICAgICAgbWFyZ2luTGVmdDogMiAqIHNrZXcgKyBcImVtXCJcbiAgICAgICAgfSA6IHVuZGVmaW5lZFxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfVxuXG4gIHZhciBhY2NlbnRXcmFwID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcImFjY2VudFwiXSwgW2FjY2VudEJvZHldLCBvcHRpb25zKTtcblxuICBpZiAoc3VwU3ViR3JvdXApIHtcbiAgICAvLyBIZXJlLCB3ZSByZXBsYWNlIHRoZSBcImJhc2VcIiBjaGlsZCBvZiB0aGUgc3Vwc3ViIHdpdGggb3VyIG5ld2x5XG4gICAgLy8gZ2VuZXJhdGVkIGFjY2VudC5cbiAgICBzdXBTdWJHcm91cC5jaGlsZHJlblswXSA9IGFjY2VudFdyYXA7IC8vIFNpbmNlIHdlIGRvbid0IHJlcnVuIHRoZSBoZWlnaHQgY2FsY3VsYXRpb24gYWZ0ZXIgcmVwbGFjaW5nIHRoZVxuICAgIC8vIGFjY2VudCwgd2UgbWFudWFsbHkgcmVjYWxjdWxhdGUgaGVpZ2h0LlxuXG4gICAgc3VwU3ViR3JvdXAuaGVpZ2h0ID0gTWF0aC5tYXgoYWNjZW50V3JhcC5oZWlnaHQsIHN1cFN1Ykdyb3VwLmhlaWdodCk7IC8vIEFjY2VudHMgc2hvdWxkIGFsd2F5cyBiZSBvcmRzLCBldmVuIHdoZW4gdGhlaXIgaW5uYXJkcyBhcmUgbm90LlxuXG4gICAgc3VwU3ViR3JvdXAuY2xhc3Nlc1swXSA9IFwibW9yZFwiO1xuICAgIHJldHVybiBzdXBTdWJHcm91cDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYWNjZW50V3JhcDtcbiAgfVxufTtcblxudmFyIGFjY2VudF9tYXRobWxCdWlsZGVyID0gZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICB2YXIgYWNjZW50Tm9kZSA9IGdyb3VwLmlzU3RyZXRjaHkgPyBzdHJldGNoeS5tYXRoTUxub2RlKGdyb3VwLmxhYmVsKSA6IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW2J1aWxkTWF0aE1MX21ha2VUZXh0KGdyb3VwLmxhYmVsLCBncm91cC5tb2RlKV0pO1xuICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW92ZXJcIiwgW2J1aWxkTWF0aE1MX2J1aWxkR3JvdXAoZ3JvdXAuYmFzZSwgb3B0aW9ucyksIGFjY2VudE5vZGVdKTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJhY2NlbnRcIiwgXCJ0cnVlXCIpO1xuICByZXR1cm4gbm9kZTtcbn07XG5cbnZhciBOT05fU1RSRVRDSFlfQUNDRU5UX1JFR0VYID0gbmV3IFJlZ0V4cChbXCJcXFxcYWN1dGVcIiwgXCJcXFxcZ3JhdmVcIiwgXCJcXFxcZGRvdFwiLCBcIlxcXFx0aWxkZVwiLCBcIlxcXFxiYXJcIiwgXCJcXFxcYnJldmVcIiwgXCJcXFxcY2hlY2tcIiwgXCJcXFxcaGF0XCIsIFwiXFxcXHZlY1wiLCBcIlxcXFxkb3RcIiwgXCJcXFxcbWF0aHJpbmdcIl0ubWFwKGZ1bmN0aW9uIChhY2NlbnQpIHtcbiAgcmV0dXJuIFwiXFxcXFwiICsgYWNjZW50O1xufSkuam9pbihcInxcIikpOyAvLyBBY2NlbnRzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJhY2NlbnRcIixcbiAgbmFtZXM6IFtcIlxcXFxhY3V0ZVwiLCBcIlxcXFxncmF2ZVwiLCBcIlxcXFxkZG90XCIsIFwiXFxcXHRpbGRlXCIsIFwiXFxcXGJhclwiLCBcIlxcXFxicmV2ZVwiLCBcIlxcXFxjaGVja1wiLCBcIlxcXFxoYXRcIiwgXCJcXFxcdmVjXCIsIFwiXFxcXGRvdFwiLCBcIlxcXFxtYXRocmluZ1wiLCBcIlxcXFx3aWRlY2hlY2tcIiwgXCJcXFxcd2lkZWhhdFwiLCBcIlxcXFx3aWRldGlsZGVcIiwgXCJcXFxcb3ZlcnJpZ2h0YXJyb3dcIiwgXCJcXFxcb3ZlcmxlZnRhcnJvd1wiLCBcIlxcXFxPdmVycmlnaHRhcnJvd1wiLCBcIlxcXFxvdmVybGVmdHJpZ2h0YXJyb3dcIiwgXCJcXFxcb3Zlcmdyb3VwXCIsIFwiXFxcXG92ZXJsaW5lc2VnbWVudFwiLCBcIlxcXFxvdmVybGVmdGhhcnBvb25cIiwgXCJcXFxcb3ZlcnJpZ2h0aGFycG9vblwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoY29udGV4dCwgYXJncykge1xuICAgIHZhciBiYXNlID0gYXJnc1swXTtcbiAgICB2YXIgaXNTdHJldGNoeSA9ICFOT05fU1RSRVRDSFlfQUNDRU5UX1JFR0VYLnRlc3QoY29udGV4dC5mdW5jTmFtZSk7XG4gICAgdmFyIGlzU2hpZnR5ID0gIWlzU3RyZXRjaHkgfHwgY29udGV4dC5mdW5jTmFtZSA9PT0gXCJcXFxcd2lkZWhhdFwiIHx8IGNvbnRleHQuZnVuY05hbWUgPT09IFwiXFxcXHdpZGV0aWxkZVwiIHx8IGNvbnRleHQuZnVuY05hbWUgPT09IFwiXFxcXHdpZGVjaGVja1wiO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImFjY2VudFwiLFxuICAgICAgbW9kZTogY29udGV4dC5wYXJzZXIubW9kZSxcbiAgICAgIGxhYmVsOiBjb250ZXh0LmZ1bmNOYW1lLFxuICAgICAgaXNTdHJldGNoeTogaXNTdHJldGNoeSxcbiAgICAgIGlzU2hpZnR5OiBpc1NoaWZ0eSxcbiAgICAgIGJhc2U6IGJhc2VcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogYWNjZW50X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhY2NlbnRfbWF0aG1sQnVpbGRlclxufSk7IC8vIFRleHQtbW9kZSBhY2NlbnRzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJhY2NlbnRcIixcbiAgbmFtZXM6IFtcIlxcXFwnXCIsIFwiXFxcXGBcIiwgXCJcXFxcXlwiLCBcIlxcXFx+XCIsIFwiXFxcXD1cIiwgXCJcXFxcdVwiLCBcIlxcXFwuXCIsICdcXFxcXCInLCBcIlxcXFxyXCIsIFwiXFxcXEhcIiwgXCJcXFxcdlwiLCBcIlxcXFx0ZXh0Y2lyY2xlZFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgYWxsb3dlZEluTWF0aDogZmFsc2VcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gICAgdmFyIGJhc2UgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImFjY2VudFwiLFxuICAgICAgbW9kZTogY29udGV4dC5wYXJzZXIubW9kZSxcbiAgICAgIGxhYmVsOiBjb250ZXh0LmZ1bmNOYW1lLFxuICAgICAgaXNTdHJldGNoeTogZmFsc2UsXG4gICAgICBpc1NoaWZ0eTogdHJ1ZSxcbiAgICAgIGJhc2U6IGJhc2VcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogYWNjZW50X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhY2NlbnRfbWF0aG1sQnVpbGRlclxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvYWNjZW50dW5kZXIuanNcbi8vIEhvcml6b250YWwgb3ZlcmxhcCBmdW5jdGlvbnNcblxuXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJhY2NlbnRVbmRlclwiLFxuICBuYW1lczogW1wiXFxcXHVuZGVybGVmdGFycm93XCIsIFwiXFxcXHVuZGVycmlnaHRhcnJvd1wiLCBcIlxcXFx1bmRlcmxlZnRyaWdodGFycm93XCIsIFwiXFxcXHVuZGVyZ3JvdXBcIiwgXCJcXFxcdW5kZXJsaW5lc2VnbWVudFwiLCBcIlxcXFx1dGlsZGVcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZi5wYXJzZXIsXG4gICAgICAgIGZ1bmNOYW1lID0gX3JlZi5mdW5jTmFtZTtcbiAgICB2YXIgYmFzZSA9IGFyZ3NbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiYWNjZW50VW5kZXJcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGFiZWw6IGZ1bmNOYW1lLFxuICAgICAgYmFzZTogYmFzZVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIFRyZWF0IHVuZGVyIGFjY2VudHMgbXVjaCBsaWtlIHVuZGVybGluZXMuXG4gICAgdmFyIGlubmVyR3JvdXAgPSBidWlsZEhUTUxfYnVpbGRHcm91cChncm91cC5iYXNlLCBvcHRpb25zKTtcbiAgICB2YXIgYWNjZW50Qm9keSA9IHN0cmV0Y2h5LnN2Z1NwYW4oZ3JvdXAsIG9wdGlvbnMpO1xuICAgIHZhciBrZXJuID0gZ3JvdXAubGFiZWwgPT09IFwiXFxcXHV0aWxkZVwiID8gMC4xMiA6IDA7IC8vIEdlbmVyYXRlIHRoZSB2bGlzdCwgd2l0aCB0aGUgYXBwcm9wcmlhdGUga2VybnNcblxuICAgIHZhciB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IGFjY2VudEJvZHkuaGVpZ2h0ICsga2VybixcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogYWNjZW50Qm9keSxcbiAgICAgICAgd3JhcHBlckNsYXNzZXM6IFtcInN2Zy1hbGlnblwiXVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZToga2VyblxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogaW5uZXJHcm91cFxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcImFjY2VudHVuZGVyXCJdLCBbdmxpc3RdLCBvcHRpb25zKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBhY2NlbnROb2RlID0gc3RyZXRjaHkubWF0aE1Mbm9kZShncm91cC5sYWJlbCk7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm11bmRlclwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5iYXNlLCBvcHRpb25zKSwgYWNjZW50Tm9kZV0pO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiYWNjZW50dW5kZXJcIiwgXCJ0cnVlXCIpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9hcnJvdy5qc1xuXG5cblxuXG5cblxuXG4vLyBIZWxwZXIgZnVuY3Rpb25cbnZhciBhcnJvd19wYWRkZWROb2RlID0gZnVuY3Rpb24gcGFkZGVkTm9kZShncm91cCkge1xuICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBncm91cCA/IFtncm91cF0gOiBbXSk7XG4gIG5vZGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgXCIrMC42ZW1cIik7XG4gIG5vZGUuc2V0QXR0cmlidXRlKFwibHNwYWNlXCIsIFwiMC4zZW1cIik7XG4gIHJldHVybiBub2RlO1xufTsgLy8gU3RyZXRjaHkgYXJyb3dzIHdpdGggYW4gb3B0aW9uYWwgYXJndW1lbnRcblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwieEFycm93XCIsXG4gIG5hbWVzOiBbXCJcXFxceGxlZnRhcnJvd1wiLCBcIlxcXFx4cmlnaHRhcnJvd1wiLCBcIlxcXFx4TGVmdGFycm93XCIsIFwiXFxcXHhSaWdodGFycm93XCIsIFwiXFxcXHhsZWZ0cmlnaHRhcnJvd1wiLCBcIlxcXFx4TGVmdHJpZ2h0YXJyb3dcIiwgXCJcXFxceGhvb2tsZWZ0YXJyb3dcIiwgXCJcXFxceGhvb2tyaWdodGFycm93XCIsIFwiXFxcXHhtYXBzdG9cIiwgXCJcXFxceHJpZ2h0aGFycG9vbmRvd25cIiwgXCJcXFxceHJpZ2h0aGFycG9vbnVwXCIsIFwiXFxcXHhsZWZ0aGFycG9vbmRvd25cIiwgXCJcXFxceGxlZnRoYXJwb29udXBcIiwgXCJcXFxceHJpZ2h0bGVmdGhhcnBvb25zXCIsIFwiXFxcXHhsZWZ0cmlnaHRoYXJwb29uc1wiLCBcIlxcXFx4bG9uZ2VxdWFsXCIsIFwiXFxcXHh0d29oZWFkcmlnaHRhcnJvd1wiLCBcIlxcXFx4dHdvaGVhZGxlZnRhcnJvd1wiLCBcIlxcXFx4dG9mcm9tXCIsIC8vIFRoZSBuZXh0IDMgZnVuY3Rpb25zIGFyZSBoZXJlIHRvIHN1cHBvcnQgdGhlIG1oY2hlbSBleHRlbnNpb24uXG4gIC8vIERpcmVjdCB1c2Ugb2YgdGhlc2UgZnVuY3Rpb25zIGlzIGRpc2NvdXJhZ2VkIGFuZCBtYXkgYnJlYWsgc29tZWRheS5cbiAgXCJcXFxceHJpZ2h0bGVmdGFycm93c1wiLCBcIlxcXFx4cmlnaHRlcXVpbGlicml1bVwiLCBcIlxcXFx4bGVmdGVxdWlsaWJyaXVtXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgbnVtT3B0aW9uYWxBcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInhBcnJvd1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBib2R5OiBhcmdzWzBdLFxuICAgICAgYmVsb3c6IG9wdEFyZ3NbMF1cbiAgICB9O1xuICB9LFxuICAvLyBGbG93IGlzIHVuYWJsZSB0byBjb3JyZWN0bHkgaW5mZXIgdGhlIHR5cGUgb2YgYGdyb3VwYCwgZXZlbiB0aG91Z2ggaXQnc1xuICAvLyB1bmFtaWJpZ3VvdXNseSBkZXRlcm1pbmVkIGZyb20gdGhlIHBhc3NlZC1pbiBgdHlwZWAgYWJvdmUuXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBzdHlsZSA9IG9wdGlvbnMuc3R5bGU7IC8vIEJ1aWxkIHRoZSBhcmd1bWVudCBncm91cHMgaW4gdGhlIGFwcHJvcHJpYXRlIHN0eWxlLlxuICAgIC8vIFJlZjogYW1zbWF0aC5kdHg6ICAgXFxoYm94eyRcXHNjcmlwdHN0eWxlXFxta2VybiMzbXV7IzZ9XFxta2VybiM0bXUkfSVcbiAgICAvLyBTb21lIGdyb3VwcyBjYW4gcmV0dXJuIGRvY3VtZW50IGZyYWdtZW50cy4gIEhhbmRsZSB0aG9zZSBieSB3cmFwcGluZ1xuICAgIC8vIHRoZW0gaW4gYSBzcGFuLlxuXG4gICAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlLnN1cCgpKTtcbiAgICB2YXIgdXBwZXJHcm91cCA9IGJ1aWxkQ29tbW9uLndyYXBGcmFnbWVudChidWlsZEhUTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBuZXdPcHRpb25zLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgdXBwZXJHcm91cC5jbGFzc2VzLnB1c2goXCJ4LWFycm93LXBhZFwiKTtcbiAgICB2YXIgbG93ZXJHcm91cDtcblxuICAgIGlmIChncm91cC5iZWxvdykge1xuICAgICAgLy8gQnVpbGQgdGhlIGxvd2VyIGdyb3VwXG4gICAgICBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShzdHlsZS5zdWIoKSk7XG4gICAgICBsb3dlckdyb3VwID0gYnVpbGRDb21tb24ud3JhcEZyYWdtZW50KGJ1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJlbG93LCBuZXdPcHRpb25zLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgICBsb3dlckdyb3VwLmNsYXNzZXMucHVzaChcIngtYXJyb3ctcGFkXCIpO1xuICAgIH1cblxuICAgIHZhciBhcnJvd0JvZHkgPSBzdHJldGNoeS5zdmdTcGFuKGdyb3VwLCBvcHRpb25zKTsgLy8gUmUgc2hpZnQ6IE5vdGUgdGhhdCBzdHJldGNoeS5zdmdTcGFuIHJldHVybmVkIGFycm93Qm9keS5kZXB0aCA9IDAuXG4gICAgLy8gVGhlIHBvaW50IHdlIHdhbnQgb24gdGhlIG1hdGggYXhpcyBpcyBhdCAwLjUgKiBhcnJvd0JvZHkuaGVpZ2h0LlxuXG4gICAgdmFyIGFycm93U2hpZnQgPSAtb3B0aW9ucy5mb250TWV0cmljcygpLmF4aXNIZWlnaHQgKyAwLjUgKiBhcnJvd0JvZHkuaGVpZ2h0OyAvLyAyIG11IGtlcm4uIFJlZjogYW1zbWF0aC5kdHg6ICM3XFxpZjAjMlxcZWxzZVxcbWtlcm4jMm11XFxmaVxuXG4gICAgdmFyIHVwcGVyU2hpZnQgPSAtb3B0aW9ucy5mb250TWV0cmljcygpLmF4aXNIZWlnaHQgLSAwLjUgKiBhcnJvd0JvZHkuaGVpZ2h0IC0gMC4xMTE7IC8vIDAuMTExIGVtID0gMiBtdVxuXG4gICAgaWYgKHVwcGVyR3JvdXAuZGVwdGggPiAwLjI1IHx8IGdyb3VwLmxhYmVsID09PSBcIlxcXFx4bGVmdGVxdWlsaWJyaXVtXCIpIHtcbiAgICAgIHVwcGVyU2hpZnQgLT0gdXBwZXJHcm91cC5kZXB0aDsgLy8gc2hpZnQgdXAgaWYgZGVwdGggZW5jcm9hY2hlc1xuICAgIH0gLy8gR2VuZXJhdGUgdGhlIHZsaXN0XG5cblxuICAgIHZhciB2bGlzdDtcblxuICAgIGlmIChsb3dlckdyb3VwKSB7XG4gICAgICB2YXIgbG93ZXJTaGlmdCA9IC1vcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCArIGxvd2VyR3JvdXAuaGVpZ2h0ICsgMC41ICogYXJyb3dCb2R5LmhlaWdodCArIDAuMTExO1xuICAgICAgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IHVwcGVyR3JvdXAsXG4gICAgICAgICAgc2hpZnQ6IHVwcGVyU2hpZnRcbiAgICAgICAgfSwge1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IGFycm93Qm9keSxcbiAgICAgICAgICBzaGlmdDogYXJyb3dTaGlmdFxuICAgICAgICB9LCB7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogbG93ZXJHcm91cCxcbiAgICAgICAgICBzaGlmdDogbG93ZXJTaGlmdFxuICAgICAgICB9XVxuICAgICAgfSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiB1cHBlckdyb3VwLFxuICAgICAgICAgIHNoaWZ0OiB1cHBlclNoaWZ0XG4gICAgICAgIH0sIHtcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBhcnJvd0JvZHksXG4gICAgICAgICAgc2hpZnQ6IGFycm93U2hpZnRcbiAgICAgICAgfV1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH0gLy8gJEZsb3dGaXhNZTogUmVwbGFjZSB0aGlzIHdpdGggcGFzc2luZyBcInN2Zy1hbGlnblwiIGludG8gbWFrZVZMaXN0LlxuXG5cbiAgICB2bGlzdC5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jaGlsZHJlblsxXS5jbGFzc2VzLnB1c2goXCJzdmctYWxpZ25cIik7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1yZWxcIiwgXCJ4LWFycm93XCJdLCBbdmxpc3RdLCBvcHRpb25zKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBhcnJvd05vZGUgPSBzdHJldGNoeS5tYXRoTUxub2RlKGdyb3VwLmxhYmVsKTtcbiAgICB2YXIgbm9kZTtcblxuICAgIGlmIChncm91cC5ib2R5KSB7XG4gICAgICB2YXIgdXBwZXJOb2RlID0gYXJyb3dfcGFkZGVkTm9kZShidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpKTtcblxuICAgICAgaWYgKGdyb3VwLmJlbG93KSB7XG4gICAgICAgIHZhciBsb3dlck5vZGUgPSBhcnJvd19wYWRkZWROb2RlKGJ1aWxkTWF0aE1MX2J1aWxkR3JvdXAoZ3JvdXAuYmVsb3csIG9wdGlvbnMpKTtcbiAgICAgICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXVuZGVyb3ZlclwiLCBbYXJyb3dOb2RlLCBsb3dlck5vZGUsIHVwcGVyTm9kZV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW92ZXJcIiwgW2Fycm93Tm9kZSwgdXBwZXJOb2RlXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChncm91cC5iZWxvdykge1xuICAgICAgdmFyIF9sb3dlck5vZGUgPSBhcnJvd19wYWRkZWROb2RlKGJ1aWxkTWF0aE1MX2J1aWxkR3JvdXAoZ3JvdXAuYmVsb3csIG9wdGlvbnMpKTtcblxuICAgICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXVuZGVyXCIsIFthcnJvd05vZGUsIF9sb3dlck5vZGVdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLlxuICAgICAgLy8gUGFyc2VyLmpzIHRocm93cyBhbiBlcnJvciBpZiB0aGVyZSBpcyBubyBhcmd1bWVudC5cbiAgICAgIG5vZGUgPSBhcnJvd19wYWRkZWROb2RlKCk7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb3ZlclwiLCBbYXJyb3dOb2RlLCBub2RlXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2NoYXIuanNcblxuXG4gLy8gXFxAY2hhciBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiB0aGF0IHRha2VzIGEgZ3JvdXBlZCBkZWNpbWFsIGFyZ3VtZW50IGxpa2Vcbi8vIHsxMjN9IGFuZCBjb252ZXJ0cyBpbnRvIHN5bWJvbCB3aXRoIGNvZGUgMTIzLiAgSXQgaXMgdXNlZCBieSB0aGUgKm1hY3JvKlxuLy8gXFxjaGFyIGRlZmluZWQgaW4gbWFjcm9zLmpzLlxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidGV4dG9yZFwiLFxuICBuYW1lczogW1wiXFxcXEBjaGFyXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZi5wYXJzZXI7XG4gICAgdmFyIGFyZyA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwib3JkZ3JvdXBcIik7XG4gICAgdmFyIGdyb3VwID0gYXJnLmJvZHk7XG4gICAgdmFyIG51bWJlciA9IFwiXCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyb3VwLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbm9kZSA9IGFzc2VydE5vZGVUeXBlKGdyb3VwW2ldLCBcInRleHRvcmRcIik7XG4gICAgICBudW1iZXIgKz0gbm9kZS50ZXh0O1xuICAgIH1cblxuICAgIHZhciBjb2RlID0gcGFyc2VJbnQobnVtYmVyKTtcblxuICAgIGlmIChpc05hTihjb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiXFxcXEBjaGFyIGhhcyBub24tbnVtZXJpYyBhcmd1bWVudCBcIiArIG51bWJlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwidGV4dG9yZFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICB0ZXh0OiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgfTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvY29sb3IuanNcblxuXG5cblxuXG5cblxudmFyIGNvbG9yX2h0bWxCdWlsZGVyID0gZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIGVsZW1lbnRzID0gYnVpbGRIVE1MX2J1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zLndpdGhDb2xvcihncm91cC5jb2xvciksIGZhbHNlKTsgLy8gXFxjb2xvciBpc24ndCBzdXBwb3NlZCB0byBhZmZlY3QgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnRzIGl0IGNvbnRhaW5zLlxuICAvLyBUbyBhY2NvbXBsaXNoIHRoaXMsIHdlIHdyYXAgdGhlIHJlc3VsdHMgaW4gYSBmcmFnbWVudCwgc28gdGhlIGlubmVyXG4gIC8vIGVsZW1lbnRzIHdpbGwgYmUgYWJsZSB0byBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIHRoZWlyIG5laWdoYm9ycy4gRm9yXG4gIC8vIGV4YW1wbGUsIGBcXGNvbG9ye3JlZH17MiArfSAzYCBoYXMgdGhlIHNhbWUgc3BhY2luZyBhcyBgMiArIDNgXG5cbiAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VGcmFnbWVudChlbGVtZW50cyk7XG59O1xuXG52YXIgY29sb3JfbWF0aG1sQnVpbGRlciA9IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIGlubmVyID0gYnVpbGRNYXRoTUxfYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMud2l0aENvbG9yKGdyb3VwLmNvbG9yKSk7XG4gIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3R5bGVcIiwgaW5uZXIpO1xuICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGhjb2xvclwiLCBncm91cC5jb2xvcik7XG4gIHJldHVybiBub2RlO1xufTtcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImNvbG9yXCIsXG4gIG5hbWVzOiBbXCJcXFxcdGV4dGNvbG9yXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZSxcbiAgICBncmVlZGluZXNzOiAzLFxuICAgIGFyZ1R5cGVzOiBbXCJjb2xvclwiLCBcIm9yaWdpbmFsXCJdXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICB2YXIgY29sb3IgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcImNvbG9yLXRva2VuXCIpLmNvbG9yO1xuICAgIHZhciBib2R5ID0gYXJnc1sxXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJjb2xvclwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBjb2xvcjogY29sb3IsXG4gICAgICBib2R5OiBkZWZpbmVGdW5jdGlvbl9vcmRhcmd1bWVudChib2R5KVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBjb2xvcl9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogY29sb3JfbWF0aG1sQnVpbGRlclxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiY29sb3JcIixcbiAgbmFtZXM6IFtcIlxcXFxjb2xvclwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgZ3JlZWRpbmVzczogMyxcbiAgICBhcmdUeXBlczogW1wiY29sb3JcIl1cbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmMiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmMi5wYXJzZXIsXG4gICAgICAgIGJyZWFrT25Ub2tlblRleHQgPSBfcmVmMi5icmVha09uVG9rZW5UZXh0O1xuICAgIHZhciBjb2xvciA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwiY29sb3ItdG9rZW5cIikuY29sb3I7IC8vIFNldCBtYWNybyBcXGN1cnJlbnRAY29sb3IgaW4gY3VycmVudCBuYW1lc3BhY2UgdG8gc3RvcmUgdGhlIGN1cnJlbnRcbiAgICAvLyBjb2xvciwgbWltaWNraW5nIHRoZSBiZWhhdmlvciBvZiBjb2xvci5zdHkuXG4gICAgLy8gVGhpcyBpcyBjdXJyZW50bHkgdXNlZCBqdXN0IHRvIGNvcnJlY3RseSBjb2xvciBhIFxccmlnaHRcbiAgICAvLyB0aGF0IGZvbGxvd3MgYSBcXGNvbG9yIGNvbW1hbmQuXG5cbiAgICBwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5zZXQoXCJcXFxcY3VycmVudEBjb2xvclwiLCBjb2xvcik7IC8vIFBhcnNlIG91dCB0aGUgaW1wbGljaXQgYm9keSB0aGF0IHNob3VsZCBiZSBjb2xvcmVkLlxuXG4gICAgdmFyIGJvZHkgPSBwYXJzZXIucGFyc2VFeHByZXNzaW9uKHRydWUsIGJyZWFrT25Ub2tlblRleHQpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImNvbG9yXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgIGJvZHk6IGJvZHlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogY29sb3JfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGNvbG9yX21hdGhtbEJ1aWxkZXJcbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2NyLmpzXG4vLyBSb3cgYnJlYWtzIHdpdGhpbiB0YWJ1bGFyIGVudmlyb25tZW50cywgYW5kIGxpbmUgYnJlYWtzIGF0IHRvcCBsZXZlbFxuXG5cblxuXG5cbiAvLyBcXFxcIGlzIGEgbWFjcm8gbWFwcGluZyB0byBlaXRoZXIgXFxjciBvciBcXG5ld2xpbmUuICBCZWNhdXNlIHRoZXkgaGF2ZSB0aGVcbi8vIHNhbWUgc2lnbmF0dXJlLCB3ZSBpbXBsZW1lbnQgdGhlbSBhcyBvbmUgbWVnYWZ1bmN0aW9uLCB3aXRoIG5ld1Jvd1xuLy8gaW5kaWNhdGluZyB3aGV0aGVyIHdlJ3JlIGluIHRoZSBcXGNyIGNhc2UsIGFuZCBuZXdMaW5lIGluZGljYXRpbmcgd2hldGhlclxuLy8gdG8gYnJlYWsgdGhlIGxpbmUgaW4gdGhlIFxcbmV3bGluZSBjYXNlLlxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiY3JcIixcbiAgbmFtZXM6IFtcIlxcXFxjclwiLCBcIlxcXFxuZXdsaW5lXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgbnVtT3B0aW9uYWxBcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJzaXplXCJdLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzLCBvcHRBcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWYuZnVuY05hbWU7XG4gICAgdmFyIHNpemUgPSBvcHRBcmdzWzBdO1xuICAgIHZhciBuZXdSb3cgPSBmdW5jTmFtZSA9PT0gXCJcXFxcY3JcIjtcbiAgICB2YXIgbmV3TGluZSA9IGZhbHNlO1xuXG4gICAgaWYgKCFuZXdSb3cpIHtcbiAgICAgIGlmIChwYXJzZXIuc2V0dGluZ3MuZGlzcGxheU1vZGUgJiYgcGFyc2VyLnNldHRpbmdzLnVzZVN0cmljdEJlaGF2aW9yKFwibmV3TGluZUluRGlzcGxheU1vZGVcIiwgXCJJbiBMYVRlWCwgXFxcXFxcXFwgb3IgXFxcXG5ld2xpbmUgXCIgKyBcImRvZXMgbm90aGluZyBpbiBkaXNwbGF5IG1vZGVcIikpIHtcbiAgICAgICAgbmV3TGluZSA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3TGluZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiY3JcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbmV3TGluZTogbmV3TGluZSxcbiAgICAgIG5ld1JvdzogbmV3Um93LFxuICAgICAgc2l6ZTogc2l6ZSAmJiBhc3NlcnROb2RlVHlwZShzaXplLCBcInNpemVcIikudmFsdWVcbiAgICB9O1xuICB9LFxuICAvLyBUaGUgZm9sbG93aW5nIGJ1aWxkZXJzIGFyZSBjYWxsZWQgb25seSBhdCB0aGUgdG9wIGxldmVsLFxuICAvLyBub3Qgd2l0aGluIHRhYnVsYXIvYXJyYXkgZW52aXJvbm1lbnRzLlxuICBodG1sQnVpbGRlcjogZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICBpZiAoZ3JvdXAubmV3Um93KSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJcXFxcY3IgdmFsaWQgb25seSB3aXRoaW4gYSB0YWJ1bGFyL2FycmF5IGVudmlyb25tZW50XCIpO1xuICAgIH1cblxuICAgIHZhciBzcGFuID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibXNwYWNlXCJdLCBbXSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoZ3JvdXAubmV3TGluZSkge1xuICAgICAgc3Bhbi5jbGFzc2VzLnB1c2goXCJuZXdsaW5lXCIpO1xuXG4gICAgICBpZiAoZ3JvdXAuc2l6ZSkge1xuICAgICAgICBzcGFuLnN0eWxlLm1hcmdpblRvcCA9IHVuaXRzX2NhbGN1bGF0ZVNpemUoZ3JvdXAuc2l6ZSwgb3B0aW9ucykgKyBcImVtXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNwYW47XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXNwYWNlXCIpO1xuXG4gICAgaWYgKGdyb3VwLm5ld0xpbmUpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibGluZWJyZWFrXCIsIFwibmV3bGluZVwiKTtcblxuICAgICAgaWYgKGdyb3VwLnNpemUpIHtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgdW5pdHNfY2FsY3VsYXRlU2l6ZShncm91cC5zaXplLCBvcHRpb25zKSArIFwiZW1cIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZGVsaW1pdGVyLmpzXG4vKipcbiAqIFRoaXMgZmlsZSBkZWFscyB3aXRoIGNyZWF0aW5nIGRlbGltaXRlcnMgb2YgdmFyaW91cyBzaXplcy4gVGhlIFRlWGJvb2tcbiAqIGRpc2N1c3NlcyB0aGVzZSByb3V0aW5lcyBvbiBwYWdlIDQ0MS00NDIsIGluIHRoZSBcIkFub3RoZXIgc3Vicm91dGluZSBzZXRzIGJveFxuICogeCB0byBhIHNwZWNpZmllZCB2YXJpYWJsZSBkZWxpbWl0ZXJcIiBwYXJhZ3JhcGguXG4gKlxuICogVGhlcmUgYXJlIHRocmVlIG1haW4gcm91dGluZXMgaGVyZS4gYG1ha2VTbWFsbERlbGltYCBtYWtlcyBhIGRlbGltaXRlciBpbiB0aGVcbiAqIG5vcm1hbCBmb250LCBidXQgaW4gZWl0aGVyIHRleHQsIHNjcmlwdCwgb3Igc2NyaXB0c2NyaXB0IHN0eWxlLlxuICogYG1ha2VMYXJnZURlbGltYCBtYWtlcyBhIGRlbGltaXRlciBpbiB0ZXh0c3R5bGUsIGJ1dCBpbiBvbmUgb2YgdGhlIFNpemUxLFxuICogU2l6ZTIsIFNpemUzLCBvciBTaXplNCBmb250cy4gYG1ha2VTdGFja2VkRGVsaW1gIG1ha2VzIGEgZGVsaW1pdGVyIG91dCBvZlxuICogc21hbGxlciBwaWVjZXMgdGhhdCBhcmUgc3RhY2tlZCBvbiB0b3Agb2Ygb25lIGFub3RoZXIuXG4gKlxuICogVGhlIGZ1bmN0aW9ucyB0YWtlIGEgcGFyYW1ldGVyIGBjZW50ZXJgLCB3aGljaCBkZXRlcm1pbmVzIGlmIHRoZSBkZWxpbWl0ZXJcbiAqIHNob3VsZCBiZSBjZW50ZXJlZCBhcm91bmQgdGhlIGF4aXMuXG4gKlxuICogVGhlbiwgdGhlcmUgYXJlIHRocmVlIGV4cG9zZWQgZnVuY3Rpb25zLiBgc2l6ZWREZWxpbWAgbWFrZXMgYSBkZWxpbWl0ZXIgaW5cbiAqIG9uZSBvZiB0aGUgZ2l2ZW4gc2l6ZXMuIFRoaXMgaXMgdXNlZCBmb3IgdGhpbmdzIGxpa2UgYFxcYmlnbGAuXG4gKiBgY3VzdG9tU2l6ZWREZWxpbWAgbWFrZXMgYSBkZWxpbWl0ZXIgd2l0aCBhIGdpdmVuIHRvdGFsIGhlaWdodCtkZXB0aC4gSXQgaXNcbiAqIGNhbGxlZCBpbiBwbGFjZXMgbGlrZSBgXFxzcXJ0YC4gYGxlZnRSaWdodERlbGltYCBtYWtlcyBhbiBhcHByb3ByaWF0ZVxuICogZGVsaW1pdGVyIHdoaWNoIHN1cnJvdW5kcyBhbiBleHByZXNzaW9uIG9mIGEgZ2l2ZW4gaGVpZ2h0IGFuIGRlcHRoLiBJdCBpc1xuICogdXNlZCBpbiBgXFxsZWZ0YCBhbmQgYFxccmlnaHRgLlxuICovXG5cblxuXG5cblxuXG5cblxuXG4vKipcbiAqIEdldCB0aGUgbWV0cmljcyBmb3IgYSBnaXZlbiBzeW1ib2wgYW5kIGZvbnQsIGFmdGVyIHRyYW5zZm9ybWF0aW9uIChpLmUuXG4gKiBhZnRlciBmb2xsb3dpbmcgcmVwbGFjZW1lbnQgZnJvbSBzeW1ib2xzLmpzKVxuICovXG52YXIgZGVsaW1pdGVyX2dldE1ldHJpY3MgPSBmdW5jdGlvbiBnZXRNZXRyaWNzKHN5bWJvbCwgZm9udCwgbW9kZSkge1xuICB2YXIgcmVwbGFjZSA9IHNyY19zeW1ib2xzLm1hdGhbc3ltYm9sXSAmJiBzcmNfc3ltYm9scy5tYXRoW3N5bWJvbF0ucmVwbGFjZTtcbiAgdmFyIG1ldHJpY3MgPSBnZXRDaGFyYWN0ZXJNZXRyaWNzKHJlcGxhY2UgfHwgc3ltYm9sLCBmb250LCBtb2RlKTtcblxuICBpZiAoIW1ldHJpY3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBzeW1ib2wgXCIgKyBzeW1ib2wgKyBcIiBhbmQgZm9udCBzaXplIFwiICsgZm9udCArIFwiLlwiKTtcbiAgfVxuXG4gIHJldHVybiBtZXRyaWNzO1xufTtcbi8qKlxuICogUHV0cyBhIGRlbGltaXRlciBzcGFuIGluIGEgZ2l2ZW4gc3R5bGUsIGFuZCBhZGRzIGFwcHJvcHJpYXRlIGhlaWdodCwgZGVwdGgsXG4gKiBhbmQgbWF4Rm9udFNpemVzLlxuICovXG5cblxudmFyIGRlbGltaXRlcl9zdHlsZVdyYXAgPSBmdW5jdGlvbiBzdHlsZVdyYXAoZGVsaW0sIHRvU3R5bGUsIG9wdGlvbnMsIGNsYXNzZXMpIHtcbiAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ0Jhc2VTdHlsZSh0b1N0eWxlKTtcbiAgdmFyIHNwYW4gPSBidWlsZENvbW1vbi5tYWtlU3BhbihjbGFzc2VzLmNvbmNhdChuZXdPcHRpb25zLnNpemluZ0NsYXNzZXMob3B0aW9ucykpLCBbZGVsaW1dLCBvcHRpb25zKTtcbiAgdmFyIGRlbGltU2l6ZU11bHRpcGxpZXIgPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgc3Bhbi5oZWlnaHQgKj0gZGVsaW1TaXplTXVsdGlwbGllcjtcbiAgc3Bhbi5kZXB0aCAqPSBkZWxpbVNpemVNdWx0aXBsaWVyO1xuICBzcGFuLm1heEZvbnRTaXplID0gbmV3T3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgcmV0dXJuIHNwYW47XG59O1xuXG52YXIgY2VudGVyU3BhbiA9IGZ1bmN0aW9uIGNlbnRlclNwYW4oc3Bhbiwgb3B0aW9ucywgc3R5bGUpIHtcbiAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ0Jhc2VTdHlsZShzdHlsZSk7XG4gIHZhciBzaGlmdCA9ICgxIC0gb3B0aW9ucy5zaXplTXVsdGlwbGllciAvIG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXIpICogb3B0aW9ucy5mb250TWV0cmljcygpLmF4aXNIZWlnaHQ7XG4gIHNwYW4uY2xhc3Nlcy5wdXNoKFwiZGVsaW1jZW50ZXJcIik7XG4gIHNwYW4uc3R5bGUudG9wID0gc2hpZnQgKyBcImVtXCI7XG4gIHNwYW4uaGVpZ2h0IC09IHNoaWZ0O1xuICBzcGFuLmRlcHRoICs9IHNoaWZ0O1xufTtcbi8qKlxuICogTWFrZXMgYSBzbWFsbCBkZWxpbWl0ZXIuIFRoaXMgaXMgYSBkZWxpbWl0ZXIgdGhhdCBjb21lcyBpbiB0aGUgTWFpbi1SZWd1bGFyXG4gKiBmb250LCBidXQgaXMgcmVzdHlsZWQgdG8gZWl0aGVyIGJlIGluIHRleHRzdHlsZSwgc2NyaXB0c3R5bGUsIG9yXG4gKiBzY3JpcHRzY3JpcHRzdHlsZS5cbiAqL1xuXG5cbnZhciBkZWxpbWl0ZXJfbWFrZVNtYWxsRGVsaW0gPSBmdW5jdGlvbiBtYWtlU21hbGxEZWxpbShkZWxpbSwgc3R5bGUsIGNlbnRlciwgb3B0aW9ucywgbW9kZSwgY2xhc3Nlcykge1xuICB2YXIgdGV4dCA9IGJ1aWxkQ29tbW9uLm1ha2VTeW1ib2woZGVsaW0sIFwiTWFpbi1SZWd1bGFyXCIsIG1vZGUsIG9wdGlvbnMpO1xuICB2YXIgc3BhbiA9IGRlbGltaXRlcl9zdHlsZVdyYXAodGV4dCwgc3R5bGUsIG9wdGlvbnMsIGNsYXNzZXMpO1xuXG4gIGlmIChjZW50ZXIpIHtcbiAgICBjZW50ZXJTcGFuKHNwYW4sIG9wdGlvbnMsIHN0eWxlKTtcbiAgfVxuXG4gIHJldHVybiBzcGFuO1xufTtcbi8qKlxuICogQnVpbGRzIGEgc3ltYm9sIGluIHRoZSBnaXZlbiBmb250IHNpemUgKG5vdGUgc2l6ZSBpcyBhbiBpbnRlZ2VyKVxuICovXG5cblxudmFyIGRlbGltaXRlcl9tYXRocm1TaXplID0gZnVuY3Rpb24gbWF0aHJtU2l6ZSh2YWx1ZSwgc2l6ZSwgbW9kZSwgb3B0aW9ucykge1xuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVN5bWJvbCh2YWx1ZSwgXCJTaXplXCIgKyBzaXplICsgXCItUmVndWxhclwiLCBtb2RlLCBvcHRpb25zKTtcbn07XG4vKipcbiAqIE1ha2VzIGEgbGFyZ2UgZGVsaW1pdGVyLiBUaGlzIGlzIGEgZGVsaW1pdGVyIHRoYXQgY29tZXMgaW4gdGhlIFNpemUxLCBTaXplMixcbiAqIFNpemUzLCBvciBTaXplNCBmb250cy4gSXQgaXMgYWx3YXlzIHJlbmRlcmVkIGluIHRleHRzdHlsZS5cbiAqL1xuXG5cbnZhciBkZWxpbWl0ZXJfbWFrZUxhcmdlRGVsaW0gPSBmdW5jdGlvbiBtYWtlTGFyZ2VEZWxpbShkZWxpbSwgc2l6ZSwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKSB7XG4gIHZhciBpbm5lciA9IGRlbGltaXRlcl9tYXRocm1TaXplKGRlbGltLCBzaXplLCBtb2RlLCBvcHRpb25zKTtcbiAgdmFyIHNwYW4gPSBkZWxpbWl0ZXJfc3R5bGVXcmFwKGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImRlbGltc2l6aW5nXCIsIFwic2l6ZVwiICsgc2l6ZV0sIFtpbm5lcl0sIG9wdGlvbnMpLCBzcmNfU3R5bGUuVEVYVCwgb3B0aW9ucywgY2xhc3Nlcyk7XG5cbiAgaWYgKGNlbnRlcikge1xuICAgIGNlbnRlclNwYW4oc3Bhbiwgb3B0aW9ucywgc3JjX1N0eWxlLlRFWFQpO1xuICB9XG5cbiAgcmV0dXJuIHNwYW47XG59O1xuLyoqXG4gKiBNYWtlIGFuIGlubmVyIHNwYW4gd2l0aCB0aGUgZ2l2ZW4gb2Zmc2V0IGFuZCBpbiB0aGUgZ2l2ZW4gZm9udC4gVGhpcyBpcyB1c2VkXG4gKiBpbiBgbWFrZVN0YWNrZWREZWxpbWAgdG8gbWFrZSB0aGUgc3RhY2tpbmcgcGllY2VzIGZvciB0aGUgZGVsaW1pdGVyLlxuICovXG5cblxudmFyIGRlbGltaXRlcl9tYWtlSW5uZXIgPSBmdW5jdGlvbiBtYWtlSW5uZXIoc3ltYm9sLCBmb250LCBtb2RlKSB7XG4gIHZhciBzaXplQ2xhc3M7IC8vIEFwcGx5IHRoZSBjb3JyZWN0IENTUyBjbGFzcyB0byBjaG9vc2UgdGhlIHJpZ2h0IGZvbnQuXG5cbiAgaWYgKGZvbnQgPT09IFwiU2l6ZTEtUmVndWxhclwiKSB7XG4gICAgc2l6ZUNsYXNzID0gXCJkZWxpbS1zaXplMVwiO1xuICB9IGVsc2VcbiAgICAvKiBpZiAoZm9udCA9PT0gXCJTaXplNC1SZWd1bGFyXCIpICovXG4gICAge1xuICAgICAgc2l6ZUNsYXNzID0gXCJkZWxpbS1zaXplNFwiO1xuICAgIH1cblxuICB2YXIgaW5uZXIgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJkZWxpbXNpemluZ2lubmVyXCIsIHNpemVDbGFzc10sIFtidWlsZENvbW1vbi5tYWtlU3BhbihbXSwgW2J1aWxkQ29tbW9uLm1ha2VTeW1ib2woc3ltYm9sLCBmb250LCBtb2RlKV0pXSk7IC8vIFNpbmNlIHRoaXMgd2lsbCBiZSBwYXNzZWQgaW50byBgbWFrZVZMaXN0YCBpbiB0aGUgZW5kLCB3cmFwIHRoZSBlbGVtZW50XG4gIC8vIGluIHRoZSBhcHByb3ByaWF0ZSB0YWcgdGhhdCBWTGlzdCB1c2VzLlxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJlbGVtXCIsXG4gICAgZWxlbTogaW5uZXJcbiAgfTtcbn07IC8vIEhlbHBlciBmb3IgbWFrZVN0YWNrZWREZWxpbVxuXG5cbnZhciBsYXAgPSB7XG4gIHR5cGU6IFwia2VyblwiLFxuICBzaXplOiAtMC4wMDVcbn07XG4vKipcbiAqIE1ha2UgYSBzdGFja2VkIGRlbGltaXRlciBvdXQgb2YgYSBnaXZlbiBkZWxpbWl0ZXIsIHdpdGggdGhlIHRvdGFsIGhlaWdodCBhdFxuICogbGVhc3QgYGhlaWdodFRvdGFsYC4gVGhpcyByb3V0aW5lIGlzIG1lbnRpb25lZCBvbiBwYWdlIDQ0MiBvZiB0aGUgVGVYYm9vay5cbiAqL1xuXG52YXIgZGVsaW1pdGVyX21ha2VTdGFja2VkRGVsaW0gPSBmdW5jdGlvbiBtYWtlU3RhY2tlZERlbGltKGRlbGltLCBoZWlnaHRUb3RhbCwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKSB7XG4gIC8vIFRoZXJlIGFyZSBmb3VyIHBhcnRzLCB0aGUgdG9wLCBhbiBvcHRpb25hbCBtaWRkbGUsIGEgcmVwZWF0ZWQgcGFydCwgYW5kIGFcbiAgLy8gYm90dG9tLlxuICB2YXIgdG9wO1xuICB2YXIgbWlkZGxlO1xuICB2YXIgcmVwZWF0O1xuICB2YXIgYm90dG9tO1xuICB0b3AgPSByZXBlYXQgPSBib3R0b20gPSBkZWxpbTtcbiAgbWlkZGxlID0gbnVsbDsgLy8gQWxzbyBrZWVwIHRyYWNrIG9mIHdoYXQgZm9udCB0aGUgZGVsaW1pdGVycyBhcmUgaW5cblxuICB2YXIgZm9udCA9IFwiU2l6ZTEtUmVndWxhclwiOyAvLyBXZSBzZXQgdGhlIHBhcnRzIGFuZCBmb250IGJhc2VkIG9uIHRoZSBzeW1ib2wuIE5vdGUgdGhhdCB3ZSB1c2VcbiAgLy8gJ1xcdTIzZDAnIGluc3RlYWQgb2YgJ3wnIGFuZCAnXFx1MjAxNicgaW5zdGVhZCBvZiAnXFxcXHwnIGZvciB0aGVcbiAgLy8gcmVwZWF0cyBvZiB0aGUgYXJyb3dzXG5cbiAgaWYgKGRlbGltID09PSBcIlxcXFx1cGFycm93XCIpIHtcbiAgICByZXBlYXQgPSBib3R0b20gPSBcIlxcdTIzRDBcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxcVXBhcnJvd1wiKSB7XG4gICAgcmVwZWF0ID0gYm90dG9tID0gXCJcXHUyMDE2XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXGRvd25hcnJvd1wiKSB7XG4gICAgdG9wID0gcmVwZWF0ID0gXCJcXHUyM0QwXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXERvd25hcnJvd1wiKSB7XG4gICAgdG9wID0gcmVwZWF0ID0gXCJcXHUyMDE2XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXHVwZG93bmFycm93XCIpIHtcbiAgICB0b3AgPSBcIlxcXFx1cGFycm93XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM0QwXCI7XG4gICAgYm90dG9tID0gXCJcXFxcZG93bmFycm93XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXFVwZG93bmFycm93XCIpIHtcbiAgICB0b3AgPSBcIlxcXFxVcGFycm93XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyMDE2XCI7XG4gICAgYm90dG9tID0gXCJcXFxcRG93bmFycm93XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiW1wiIHx8IGRlbGltID09PSBcIlxcXFxsYnJhY2tcIikge1xuICAgIHRvcCA9IFwiXFx1MjNBMVwiO1xuICAgIHJlcGVhdCA9IFwiXFx1MjNBMlwiO1xuICAgIGJvdHRvbSA9IFwiXFx1MjNBM1wiO1xuICAgIGZvbnQgPSBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJdXCIgfHwgZGVsaW0gPT09IFwiXFxcXHJicmFja1wiKSB7XG4gICAgdG9wID0gXCJcXHUyM0E0XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM0E1XCI7XG4gICAgYm90dG9tID0gXCJcXHUyM0E2XCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxsZmxvb3JcIiB8fCBkZWxpbSA9PT0gXCJcXHUyMzBBXCIpIHtcbiAgICByZXBlYXQgPSB0b3AgPSBcIlxcdTIzQTJcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzQTNcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXGxjZWlsXCIgfHwgZGVsaW0gPT09IFwiXFx1MjMwOFwiKSB7XG4gICAgdG9wID0gXCJcXHUyM0ExXCI7XG4gICAgcmVwZWF0ID0gYm90dG9tID0gXCJcXHUyM0EyXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxyZmxvb3JcIiB8fCBkZWxpbSA9PT0gXCJcXHUyMzBCXCIpIHtcbiAgICByZXBlYXQgPSB0b3AgPSBcIlxcdTIzQTVcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzQTZcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXHJjZWlsXCIgfHwgZGVsaW0gPT09IFwiXFx1MjMwOVwiKSB7XG4gICAgdG9wID0gXCJcXHUyM0E0XCI7XG4gICAgcmVwZWF0ID0gYm90dG9tID0gXCJcXHUyM0E1XCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIihcIiB8fCBkZWxpbSA9PT0gXCJcXFxcbHBhcmVuXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzOUJcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzOUNcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzOURcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiKVwiIHx8IGRlbGltID09PSBcIlxcXFxycGFyZW5cIikge1xuICAgIHRvcCA9IFwiXFx1MjM5RVwiO1xuICAgIHJlcGVhdCA9IFwiXFx1MjM5RlwiO1xuICAgIGJvdHRvbSA9IFwiXFx1MjNBMFwiO1xuICAgIGZvbnQgPSBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxce1wiIHx8IGRlbGltID09PSBcIlxcXFxsYnJhY2VcIikge1xuICAgIHRvcCA9IFwiXFx1MjNBN1wiO1xuICAgIG1pZGRsZSA9IFwiXFx1MjNBOFwiO1xuICAgIGJvdHRvbSA9IFwiXFx1MjNBOVwiO1xuICAgIHJlcGVhdCA9IFwiXFx1MjNBQVwiO1xuICAgIGZvbnQgPSBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxcfVwiIHx8IGRlbGltID09PSBcIlxcXFxyYnJhY2VcIikge1xuICAgIHRvcCA9IFwiXFx1MjNBQlwiO1xuICAgIG1pZGRsZSA9IFwiXFx1MjNBQ1wiO1xuICAgIGJvdHRvbSA9IFwiXFx1MjNBRFwiO1xuICAgIHJlcGVhdCA9IFwiXFx1MjNBQVwiO1xuICAgIGZvbnQgPSBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxcbGdyb3VwXCIgfHwgZGVsaW0gPT09IFwiXFx1MjdFRVwiKSB7XG4gICAgdG9wID0gXCJcXHUyM0E3XCI7XG4gICAgYm90dG9tID0gXCJcXHUyM0E5XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM0FBXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxyZ3JvdXBcIiB8fCBkZWxpbSA9PT0gXCJcXHUyN0VGXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzQUJcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzQURcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzQUFcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXGxtb3VzdGFjaGVcIiB8fCBkZWxpbSA9PT0gXCJcXHUyM0IwXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzQTdcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzQURcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzQUFcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXHJtb3VzdGFjaGVcIiB8fCBkZWxpbSA9PT0gXCJcXHUyM0IxXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzQUJcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzQTlcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzQUFcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gLy8gR2V0IHRoZSBtZXRyaWNzIG9mIHRoZSBmb3VyIHNlY3Rpb25zXG5cblxuICB2YXIgdG9wTWV0cmljcyA9IGRlbGltaXRlcl9nZXRNZXRyaWNzKHRvcCwgZm9udCwgbW9kZSk7XG4gIHZhciB0b3BIZWlnaHRUb3RhbCA9IHRvcE1ldHJpY3MuaGVpZ2h0ICsgdG9wTWV0cmljcy5kZXB0aDtcbiAgdmFyIHJlcGVhdE1ldHJpY3MgPSBkZWxpbWl0ZXJfZ2V0TWV0cmljcyhyZXBlYXQsIGZvbnQsIG1vZGUpO1xuICB2YXIgcmVwZWF0SGVpZ2h0VG90YWwgPSByZXBlYXRNZXRyaWNzLmhlaWdodCArIHJlcGVhdE1ldHJpY3MuZGVwdGg7XG4gIHZhciBib3R0b21NZXRyaWNzID0gZGVsaW1pdGVyX2dldE1ldHJpY3MoYm90dG9tLCBmb250LCBtb2RlKTtcbiAgdmFyIGJvdHRvbUhlaWdodFRvdGFsID0gYm90dG9tTWV0cmljcy5oZWlnaHQgKyBib3R0b21NZXRyaWNzLmRlcHRoO1xuICB2YXIgbWlkZGxlSGVpZ2h0VG90YWwgPSAwO1xuICB2YXIgbWlkZGxlRmFjdG9yID0gMTtcblxuICBpZiAobWlkZGxlICE9PSBudWxsKSB7XG4gICAgdmFyIG1pZGRsZU1ldHJpY3MgPSBkZWxpbWl0ZXJfZ2V0TWV0cmljcyhtaWRkbGUsIGZvbnQsIG1vZGUpO1xuICAgIG1pZGRsZUhlaWdodFRvdGFsID0gbWlkZGxlTWV0cmljcy5oZWlnaHQgKyBtaWRkbGVNZXRyaWNzLmRlcHRoO1xuICAgIG1pZGRsZUZhY3RvciA9IDI7IC8vIHJlcGVhdCBzeW1tZXRyaWNhbGx5IGFib3ZlIGFuZCBiZWxvdyBtaWRkbGVcbiAgfSAvLyBDYWxjdWF0ZSB0aGUgbWluaW1hbCBoZWlnaHQgdGhhdCB0aGUgZGVsaW1pdGVyIGNhbiBoYXZlLlxuICAvLyBJdCBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiB0aGUgdG9wLCBib3R0b20sIGFuZCBvcHRpb25hbCBtaWRkbGUgY29tYmluZWQuXG5cblxuICB2YXIgbWluSGVpZ2h0ID0gdG9wSGVpZ2h0VG90YWwgKyBib3R0b21IZWlnaHRUb3RhbCArIG1pZGRsZUhlaWdodFRvdGFsOyAvLyBDb21wdXRlIHRoZSBudW1iZXIgb2YgY29waWVzIG9mIHRoZSByZXBlYXQgc3ltYm9sIHdlIHdpbGwgbmVlZFxuXG4gIHZhciByZXBlYXRDb3VudCA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCgoaGVpZ2h0VG90YWwgLSBtaW5IZWlnaHQpIC8gKG1pZGRsZUZhY3RvciAqIHJlcGVhdEhlaWdodFRvdGFsKSkpOyAvLyBDb21wdXRlIHRoZSB0b3RhbCBoZWlnaHQgb2YgdGhlIGRlbGltaXRlciBpbmNsdWRpbmcgYWxsIHRoZSBzeW1ib2xzXG5cbiAgdmFyIHJlYWxIZWlnaHRUb3RhbCA9IG1pbkhlaWdodCArIHJlcGVhdENvdW50ICogbWlkZGxlRmFjdG9yICogcmVwZWF0SGVpZ2h0VG90YWw7IC8vIFRoZSBjZW50ZXIgb2YgdGhlIGRlbGltaXRlciBpcyBwbGFjZWQgYXQgdGhlIGNlbnRlciBvZiB0aGUgYXhpcy4gTm90ZVxuICAvLyB0aGF0IGluIHRoaXMgY29udGV4dCwgXCJjZW50ZXJcIiBtZWFucyB0aGF0IHRoZSBkZWxpbWl0ZXIgc2hvdWxkIGJlXG4gIC8vIGNlbnRlcmVkIGFyb3VuZCB0aGUgYXhpcyBpbiB0aGUgY3VycmVudCBzdHlsZSwgd2hpbGUgbm9ybWFsbHkgaXQgaXNcbiAgLy8gY2VudGVyZWQgYXJvdW5kIHRoZSBheGlzIGluIHRleHRzdHlsZS5cblxuICB2YXIgYXhpc0hlaWdodCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O1xuXG4gIGlmIChjZW50ZXIpIHtcbiAgICBheGlzSGVpZ2h0ICo9IG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gIH0gLy8gQ2FsY3VsYXRlIHRoZSBkZXB0aFxuXG5cbiAgdmFyIGRlcHRoID0gcmVhbEhlaWdodFRvdGFsIC8gMiAtIGF4aXNIZWlnaHQ7IC8vIFRoaXMgZnVuY3Rpb24gZGlmZmVycyBmcm9tIHRoZSBUZVggcHJvY2VkdXJlIGluIG9uZSB3YXkuXG4gIC8vIFdlIHNoaWZ0IGVhY2ggcmVwZWF0IGVsZW1lbnQgZG93bndhcmRzIGJ5IDAuMDA1ZW0sIHRvIHByZXZlbnQgYSBnYXBcbiAgLy8gZHVlIHRvIGJyb3dzZXIgZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3IuXG4gIC8vIFRoZW4sIGF0IHRoZSBsYXN0IGVsZW1lbnQtdG8gZWxlbWVudCBqb2ludCwgd2UgYWRkIG9uZSBleHRyYSByZXBlYXRcbiAgLy8gZWxlbWVudCB0byBjb3ZlciB0aGUgZ2FwIGNyZWF0ZWQgYnkgdGhlIHNoaWZ0cy5cbiAgLy8gRmluZCB0aGUgc2hpZnQgbmVlZGVkIHRvIGFsaWduIHRoZSB1cHBlciBlbmQgb2YgdGhlIGV4dHJhIGVsZW1lbnQgYXQgYSBwb2ludFxuICAvLyAwLjAwNWVtIGFib3ZlIHRoZSBsb3dlciBlbmQgb2YgdGhlIHRvcCBlbGVtZW50LlxuXG4gIHZhciBzaGlmdE9mRXh0cmFFbGVtZW50ID0gKHJlcGVhdENvdW50ICsgMSkgKiAwLjAwNSAtIHJlcGVhdEhlaWdodFRvdGFsOyAvLyBOb3csIHdlIHN0YXJ0IGJ1aWxkaW5nIHRoZSBwaWVjZXMgdGhhdCB3aWxsIGdvIGludG8gdGhlIHZsaXN0XG4gIC8vIEtlZXAgYSBsaXN0IG9mIHRoZSBpbm5lciBwaWVjZXNcblxuICB2YXIgaW5uZXJzID0gW107IC8vIEFkZCB0aGUgYm90dG9tIHN5bWJvbFxuXG4gIGlubmVycy5wdXNoKGRlbGltaXRlcl9tYWtlSW5uZXIoYm90dG9tLCBmb250LCBtb2RlKSk7XG5cbiAgaWYgKG1pZGRsZSA9PT0gbnVsbCkge1xuICAgIC8vIEFkZCB0aGF0IG1hbnkgc3ltYm9sc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVwZWF0Q291bnQ7IGkrKykge1xuICAgICAgaW5uZXJzLnB1c2gobGFwKTsgLy8gb3ZlcmxhcFxuXG4gICAgICBpbm5lcnMucHVzaChkZWxpbWl0ZXJfbWFrZUlubmVyKHJlcGVhdCwgZm9udCwgbW9kZSkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBXaGVuIHRoZXJlIGlzIGEgbWlkZGxlIGJpdCwgd2UgbmVlZCB0aGUgbWlkZGxlIHBhcnQgYW5kIHR3byByZXBlYXRlZFxuICAgIC8vIHNlY3Rpb25zXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHJlcGVhdENvdW50OyBfaSsrKSB7XG4gICAgICBpbm5lcnMucHVzaChsYXApO1xuICAgICAgaW5uZXJzLnB1c2goZGVsaW1pdGVyX21ha2VJbm5lcihyZXBlYXQsIGZvbnQsIG1vZGUpKTtcbiAgICB9IC8vIEluc2VydCBvbmUgZXh0cmEgcmVwZWF0IGVsZW1lbnQuXG5cblxuICAgIGlubmVycy5wdXNoKHtcbiAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgc2l6ZTogc2hpZnRPZkV4dHJhRWxlbWVudFxuICAgIH0pO1xuICAgIGlubmVycy5wdXNoKGRlbGltaXRlcl9tYWtlSW5uZXIocmVwZWF0LCBmb250LCBtb2RlKSk7XG4gICAgaW5uZXJzLnB1c2gobGFwKTsgLy8gTm93IGluc2VydCB0aGUgbWlkZGxlIG9mIHRoZSBicmFjZS5cblxuICAgIGlubmVycy5wdXNoKGRlbGltaXRlcl9tYWtlSW5uZXIobWlkZGxlLCBmb250LCBtb2RlKSk7XG5cbiAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCByZXBlYXRDb3VudDsgX2kyKyspIHtcbiAgICAgIGlubmVycy5wdXNoKGxhcCk7XG4gICAgICBpbm5lcnMucHVzaChkZWxpbWl0ZXJfbWFrZUlubmVyKHJlcGVhdCwgZm9udCwgbW9kZSkpO1xuICAgIH1cbiAgfSAvLyBUbyBjb3ZlciB0aGUgZ2FwIGNyZWF0ZSBieSB0aGUgb3ZlcmxhcHMsIGluc2VydCBvbmUgbW9yZSByZXBlYXQgZWxlbWVudCxcbiAgLy8gYXQgYSBwb3NpdGlvbiB0aGF0IGp1dHMgMC4wMDUgYWJvdmUgdGhlIGJvdHRvbSBvZiB0aGUgdG9wIGVsZW1lbnQuXG5cblxuICBpbm5lcnMucHVzaCh7XG4gICAgdHlwZTogXCJrZXJuXCIsXG4gICAgc2l6ZTogc2hpZnRPZkV4dHJhRWxlbWVudFxuICB9KTtcbiAgaW5uZXJzLnB1c2goZGVsaW1pdGVyX21ha2VJbm5lcihyZXBlYXQsIGZvbnQsIG1vZGUpKTtcbiAgaW5uZXJzLnB1c2gobGFwKTsgLy8gQWRkIHRoZSB0b3Agc3ltYm9sXG5cbiAgaW5uZXJzLnB1c2goZGVsaW1pdGVyX21ha2VJbm5lcih0b3AsIGZvbnQsIG1vZGUpKTsgLy8gRmluYWxseSwgYnVpbGQgdGhlIHZsaXN0XG5cbiAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ0Jhc2VTdHlsZShzcmNfU3R5bGUuVEVYVCk7XG4gIHZhciBpbm5lciA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgcG9zaXRpb25UeXBlOiBcImJvdHRvbVwiLFxuICAgIHBvc2l0aW9uRGF0YTogZGVwdGgsXG4gICAgY2hpbGRyZW46IGlubmVyc1xuICB9LCBuZXdPcHRpb25zKTtcbiAgcmV0dXJuIGRlbGltaXRlcl9zdHlsZVdyYXAoYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiZGVsaW1zaXppbmdcIiwgXCJtdWx0XCJdLCBbaW5uZXJdLCBuZXdPcHRpb25zKSwgc3JjX1N0eWxlLlRFWFQsIG9wdGlvbnMsIGNsYXNzZXMpO1xufTsgLy8gQWxsIHN1cmRzIGhhdmUgMC4wOGVtIHBhZGRpbmcgYWJvdmUgdGhlIHZpbmljdWx1bSBpbnNpZGUgdGhlIFNWRy5cbi8vIFRoYXQga2VlcHMgYnJvd3NlciBzcGFuIGhlaWdodCByb3VuZGluZyBlcnJvciBmcm9tIHBpbmNoaW5nIHRoZSBsaW5lLlxuXG5cbnZhciB2YlBhZCA9IDgwOyAvLyBwYWRkaW5nIGFib3ZlIHRoZSBzdXJkLCBtZWFzdXJlZCBpbnNpZGUgdGhlIHZpZXdCb3guXG5cbnZhciBlbVBhZCA9IDAuMDg7IC8vIHBhZGRpbmcsIGluIGVtcywgbWVhc3VyZWQgaW4gdGhlIGRvY3VtZW50LlxuXG52YXIgZGVsaW1pdGVyX3NxcnRTdmcgPSBmdW5jdGlvbiBzcXJ0U3ZnKHNxcnROYW1lLCBoZWlnaHQsIHZpZXdCb3hIZWlnaHQsIGV4dHJhVmluaWN1bHVtLCBvcHRpb25zKSB7XG4gIHZhciBwYXRoID0gc3FydFBhdGgoc3FydE5hbWUsIGV4dHJhVmluaWN1bHVtLCB2aWV3Qm94SGVpZ2h0KTtcbiAgdmFyIHBhdGhOb2RlID0gbmV3IGRvbVRyZWVfUGF0aE5vZGUoc3FydE5hbWUsIHBhdGgpO1xuICB2YXIgc3ZnID0gbmV3IFN2Z05vZGUoW3BhdGhOb2RlXSwge1xuICAgIC8vIE5vdGU6IDEwMDA6MSByYXRpbyBvZiB2aWV3Qm94IHRvIGRvY3VtZW50IGVtIHdpZHRoLlxuICAgIFwid2lkdGhcIjogXCI0MDBlbVwiLFxuICAgIFwiaGVpZ2h0XCI6IGhlaWdodCArIFwiZW1cIixcbiAgICBcInZpZXdCb3hcIjogXCIwIDAgNDAwMDAwIFwiICsgdmlld0JveEhlaWdodCxcbiAgICBcInByZXNlcnZlQXNwZWN0UmF0aW9cIjogXCJ4TWluWU1pbiBzbGljZVwiXG4gIH0pO1xuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW1wiaGlkZS10YWlsXCJdLCBbc3ZnXSwgb3B0aW9ucyk7XG59O1xuLyoqXG4gKiBNYWtlIGEgc3FydCBpbWFnZSBvZiB0aGUgZ2l2ZW4gaGVpZ2h0LFxuICovXG5cblxudmFyIG1ha2VTcXJ0SW1hZ2UgPSBmdW5jdGlvbiBtYWtlU3FydEltYWdlKGhlaWdodCwgb3B0aW9ucykge1xuICAvLyBEZWZpbmUgYSBuZXdPcHRpb25zIHRoYXQgcmVtb3ZlcyB0aGUgZWZmZWN0IG9mIHNpemUgY2hhbmdlcyBzdWNoIGFzIFxcSHVnZS5cbiAgLy8gV2UgZG9uJ3QgcGljayBkaWZmZXJlbnQgYSBoZWlnaHQgc3VyZCBmb3IgXFxIdWdlLiBGb3IgaXQsIHdlIHNjYWxlIHVwLlxuICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nQmFzZVNpemluZygpOyAvLyBQaWNrIHRoZSBkZXNpcmVkIHN1cmQgZ2x5cGggZnJvbSBhIHNlcXVlbmNlIG9mIHN1cmRzLlxuXG4gIHZhciBkZWxpbSA9IHRyYXZlcnNlU2VxdWVuY2UoXCJcXFxcc3VyZFwiLCBoZWlnaHQgKiBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyLCBzdGFja0xhcmdlRGVsaW1pdGVyU2VxdWVuY2UsIG5ld09wdGlvbnMpO1xuICB2YXIgc2l6ZU11bHRpcGxpZXIgPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyOyAvLyBkZWZhdWx0XG4gIC8vIFRoZSBzdGFuZGFyZCBzcXJ0IFNWR3MgZWFjaCBoYXZlIGEgMC4wNGVtIHRoaWNrIHZpbmljdWx1bS5cbiAgLy8gSWYgU2V0dGluZ3MubWluUnVsZVRoaWNrbmVzcyBpcyBsYXJnZXIgdGhhbiB0aGF0LCB3ZSBhZGQgZXh0cmFWaW5pY3VsdW0uXG5cbiAgdmFyIGV4dHJhVmluaWN1bHVtID0gTWF0aC5tYXgoMCwgb3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzIC0gb3B0aW9ucy5mb250TWV0cmljcygpLnNxcnRSdWxlVGhpY2tuZXNzKTsgLy8gQ3JlYXRlIGEgc3BhbiBjb250YWluaW5nIGFuIFNWRyBpbWFnZSBvZiBhIHNxcnQgc3ltYm9sLlxuXG4gIHZhciBzcGFuO1xuICB2YXIgc3BhbkhlaWdodCA9IDA7XG4gIHZhciB0ZXhIZWlnaHQgPSAwO1xuICB2YXIgdmlld0JveEhlaWdodCA9IDA7XG4gIHZhciBhZHZhbmNlV2lkdGg7IC8vIFdlIGNyZWF0ZSB2aWV3Qm94ZXMgd2l0aCA4MCB1bml0cyBvZiBcInBhZGRpbmdcIiBhYm92ZSBlYWNoIHN1cmQuXG4gIC8vIFRoZW4gYnJvd3NlciByb3VuZGluZyBlcnJvciBvbiB0aGUgcGFyZW50IHNwYW4gaGVpZ2h0IHdpbGwgbm90XG4gIC8vIGVuY3JvYWNoIG9uIHRoZSBpbmsgb2YgdGhlIHZpbmljdWx1bS4gQnV0IHRoYXQgcGFkZGluZyBpcyBub3RcbiAgLy8gaW5jbHVkZWQgaW4gdGhlIFRlWC1saWtlIGBoZWlnaHRgIHVzZWQgZm9yIGNhbGN1bGF0aW9uIG9mXG4gIC8vIHZlcnRpY2FsIGFsaWdubWVudC4gU28gdGV4SGVpZ2h0ID0gc3Bhbi5oZWlnaHQgPCBzcGFuLnN0eWxlLmhlaWdodC5cblxuICBpZiAoZGVsaW0udHlwZSA9PT0gXCJzbWFsbFwiKSB7XG4gICAgLy8gR2V0IGFuIFNWRyB0aGF0IGlzIGRlcml2ZWQgZnJvbSBnbHlwaCBVKzIyMUEgaW4gZm9udCBLYVRlWC1NYWluLlxuICAgIC8vIDEwMDAgdW5pdCBub3JtYWwgZ2x5cGggaGVpZ2h0LlxuICAgIHZpZXdCb3hIZWlnaHQgPSAxMDAwICsgMTAwMCAqIGV4dHJhVmluaWN1bHVtICsgdmJQYWQ7XG5cbiAgICBpZiAoaGVpZ2h0IDwgMS4wKSB7XG4gICAgICBzaXplTXVsdGlwbGllciA9IDEuMDsgLy8gbWltaWMgYSBcXHRleHRmb250IHJhZGljYWxcbiAgICB9IGVsc2UgaWYgKGhlaWdodCA8IDEuNCkge1xuICAgICAgc2l6ZU11bHRpcGxpZXIgPSAwLjc7IC8vIG1pbWljIGEgXFxzY3JpcHRmb250IHJhZGljYWxcbiAgICB9XG5cbiAgICBzcGFuSGVpZ2h0ID0gKDEuMCArIGV4dHJhVmluaWN1bHVtICsgZW1QYWQpIC8gc2l6ZU11bHRpcGxpZXI7XG4gICAgdGV4SGVpZ2h0ID0gKDEuMDAgKyBleHRyYVZpbmljdWx1bSkgLyBzaXplTXVsdGlwbGllcjtcbiAgICBzcGFuID0gZGVsaW1pdGVyX3NxcnRTdmcoXCJzcXJ0TWFpblwiLCBzcGFuSGVpZ2h0LCB2aWV3Qm94SGVpZ2h0LCBleHRyYVZpbmljdWx1bSwgb3B0aW9ucyk7XG4gICAgc3Bhbi5zdHlsZS5taW5XaWR0aCA9IFwiMC44NTNlbVwiO1xuICAgIGFkdmFuY2VXaWR0aCA9IDAuODMzIC8gc2l6ZU11bHRpcGxpZXI7IC8vIGZyb20gdGhlIGZvbnQuXG4gIH0gZWxzZSBpZiAoZGVsaW0udHlwZSA9PT0gXCJsYXJnZVwiKSB7XG4gICAgLy8gVGhlc2UgU1ZHcyBjb21lIGZyb20gZm9udHM6IEthVGVYX1NpemUxLCBfU2l6ZTIsIGV0Yy5cbiAgICB2aWV3Qm94SGVpZ2h0ID0gKDEwMDAgKyB2YlBhZCkgKiBzaXplVG9NYXhIZWlnaHRbZGVsaW0uc2l6ZV07XG4gICAgdGV4SGVpZ2h0ID0gKHNpemVUb01heEhlaWdodFtkZWxpbS5zaXplXSArIGV4dHJhVmluaWN1bHVtKSAvIHNpemVNdWx0aXBsaWVyO1xuICAgIHNwYW5IZWlnaHQgPSAoc2l6ZVRvTWF4SGVpZ2h0W2RlbGltLnNpemVdICsgZXh0cmFWaW5pY3VsdW0gKyBlbVBhZCkgLyBzaXplTXVsdGlwbGllcjtcbiAgICBzcGFuID0gZGVsaW1pdGVyX3NxcnRTdmcoXCJzcXJ0U2l6ZVwiICsgZGVsaW0uc2l6ZSwgc3BhbkhlaWdodCwgdmlld0JveEhlaWdodCwgZXh0cmFWaW5pY3VsdW0sIG9wdGlvbnMpO1xuICAgIHNwYW4uc3R5bGUubWluV2lkdGggPSBcIjEuMDJlbVwiO1xuICAgIGFkdmFuY2VXaWR0aCA9IDEuMCAvIHNpemVNdWx0aXBsaWVyOyAvLyAxLjAgZnJvbSB0aGUgZm9udC5cbiAgfSBlbHNlIHtcbiAgICAvLyBUYWxsIHNxcnQuIEluIFRlWCwgdGhpcyB3b3VsZCBiZSBzdGFja2VkIHVzaW5nIG11bHRpcGxlIGdseXBocy5cbiAgICAvLyBXZSdsbCB1c2UgYSBzaW5nbGUgU1ZHIHRvIGFjY29tcGxpc2ggdGhlIHNhbWUgdGhpbmcuXG4gICAgc3BhbkhlaWdodCA9IGhlaWdodCArIGV4dHJhVmluaWN1bHVtICsgZW1QYWQ7XG4gICAgdGV4SGVpZ2h0ID0gaGVpZ2h0ICsgZXh0cmFWaW5pY3VsdW07XG4gICAgdmlld0JveEhlaWdodCA9IE1hdGguZmxvb3IoMTAwMCAqIGhlaWdodCArIGV4dHJhVmluaWN1bHVtKSArIHZiUGFkO1xuICAgIHNwYW4gPSBkZWxpbWl0ZXJfc3FydFN2ZyhcInNxcnRUYWxsXCIsIHNwYW5IZWlnaHQsIHZpZXdCb3hIZWlnaHQsIGV4dHJhVmluaWN1bHVtLCBvcHRpb25zKTtcbiAgICBzcGFuLnN0eWxlLm1pbldpZHRoID0gXCIwLjc0MmVtXCI7XG4gICAgYWR2YW5jZVdpZHRoID0gMS4wNTY7XG4gIH1cblxuICBzcGFuLmhlaWdodCA9IHRleEhlaWdodDtcbiAgc3Bhbi5zdHlsZS5oZWlnaHQgPSBzcGFuSGVpZ2h0ICsgXCJlbVwiO1xuICByZXR1cm4ge1xuICAgIHNwYW46IHNwYW4sXG4gICAgYWR2YW5jZVdpZHRoOiBhZHZhbmNlV2lkdGgsXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhY3R1YWwgbGluZSB3aWR0aC5cbiAgICAvLyBUaGlzIGFjdHVhbGx5IHNob3VsZCBkZXBlbmQgb24gdGhlIGNob3NlbiBmb250IC0tIGUuZy4gXFxib2xkbWF0aFxuICAgIC8vIHNob3VsZCB1c2UgdGhlIHRoaWNrZXIgc3VyZCBzeW1ib2xzIGZyb20gZS5nLiBLYVRlWF9NYWluLUJvbGQsIGFuZFxuICAgIC8vIGhhdmUgdGhpY2tlciBydWxlcy5cbiAgICBydWxlV2lkdGg6IChvcHRpb25zLmZvbnRNZXRyaWNzKCkuc3FydFJ1bGVUaGlja25lc3MgKyBleHRyYVZpbmljdWx1bSkgKiBzaXplTXVsdGlwbGllclxuICB9O1xufTsgLy8gVGhlcmUgYXJlIHRocmVlIGtpbmRzIG9mIGRlbGltaXRlcnMsIGRlbGltaXRlcnMgdGhhdCBzdGFjayB3aGVuIHRoZXkgYmVjb21lXG4vLyB0b28gbGFyZ2VcblxuXG52YXIgc3RhY2tMYXJnZURlbGltaXRlcnMgPSBbXCIoXCIsIFwiXFxcXGxwYXJlblwiLCBcIilcIiwgXCJcXFxccnBhcmVuXCIsIFwiW1wiLCBcIlxcXFxsYnJhY2tcIiwgXCJdXCIsIFwiXFxcXHJicmFja1wiLCBcIlxcXFx7XCIsIFwiXFxcXGxicmFjZVwiLCBcIlxcXFx9XCIsIFwiXFxcXHJicmFjZVwiLCBcIlxcXFxsZmxvb3JcIiwgXCJcXFxccmZsb29yXCIsIFwiXFx1MjMwQVwiLCBcIlxcdTIzMEJcIiwgXCJcXFxcbGNlaWxcIiwgXCJcXFxccmNlaWxcIiwgXCJcXHUyMzA4XCIsIFwiXFx1MjMwOVwiLCBcIlxcXFxzdXJkXCJdOyAvLyBkZWxpbWl0ZXJzIHRoYXQgYWx3YXlzIHN0YWNrXG5cbnZhciBzdGFja0Fsd2F5c0RlbGltaXRlcnMgPSBbXCJcXFxcdXBhcnJvd1wiLCBcIlxcXFxkb3duYXJyb3dcIiwgXCJcXFxcdXBkb3duYXJyb3dcIiwgXCJcXFxcVXBhcnJvd1wiLCBcIlxcXFxEb3duYXJyb3dcIiwgXCJcXFxcVXBkb3duYXJyb3dcIiwgXCJ8XCIsIFwiXFxcXHxcIiwgXCJcXFxcdmVydFwiLCBcIlxcXFxWZXJ0XCIsIFwiXFxcXGx2ZXJ0XCIsIFwiXFxcXHJ2ZXJ0XCIsIFwiXFxcXGxWZXJ0XCIsIFwiXFxcXHJWZXJ0XCIsIFwiXFxcXGxncm91cFwiLCBcIlxcXFxyZ3JvdXBcIiwgXCJcXHUyN0VFXCIsIFwiXFx1MjdFRlwiLCBcIlxcXFxsbW91c3RhY2hlXCIsIFwiXFxcXHJtb3VzdGFjaGVcIiwgXCJcXHUyM0IwXCIsIFwiXFx1MjNCMVwiXTsgLy8gYW5kIGRlbGltaXRlcnMgdGhhdCBuZXZlciBzdGFja1xuXG52YXIgc3RhY2tOZXZlckRlbGltaXRlcnMgPSBbXCI8XCIsIFwiPlwiLCBcIlxcXFxsYW5nbGVcIiwgXCJcXFxccmFuZ2xlXCIsIFwiL1wiLCBcIlxcXFxiYWNrc2xhc2hcIiwgXCJcXFxcbHRcIiwgXCJcXFxcZ3RcIl07IC8vIE1ldHJpY3Mgb2YgdGhlIGRpZmZlcmVudCBzaXplcy4gRm91bmQgYnkgbG9va2luZyBhdCBUZVgncyBvdXRwdXQgb2Zcbi8vICRcXGJpZ2x8IC8vIFxcQmlnbHwgXFxiaWdnbHwgXFxCaWdnbHwgXFxzaG93bGlzdHMkXG4vLyBVc2VkIHRvIGNyZWF0ZSBzdGFja2VkIGRlbGltaXRlcnMgb2YgYXBwcm9wcmlhdGUgc2l6ZXMgaW4gbWFrZVNpemVkRGVsaW0uXG5cbnZhciBzaXplVG9NYXhIZWlnaHQgPSBbMCwgMS4yLCAxLjgsIDIuNCwgMy4wXTtcbi8qKlxuICogVXNlZCB0byBjcmVhdGUgYSBkZWxpbWl0ZXIgb2YgYSBzcGVjaWZpYyBzaXplLCB3aGVyZSBgc2l6ZWAgaXMgMSwgMiwgMywgb3IgNC5cbiAqL1xuXG52YXIgZGVsaW1pdGVyX21ha2VTaXplZERlbGltID0gZnVuY3Rpb24gbWFrZVNpemVkRGVsaW0oZGVsaW0sIHNpemUsIG9wdGlvbnMsIG1vZGUsIGNsYXNzZXMpIHtcbiAgLy8gPCBhbmQgPiB0dXJuIGludG8gXFxsYW5nbGUgYW5kIFxccmFuZ2xlIGluIGRlbGltaXRlcnNcbiAgaWYgKGRlbGltID09PSBcIjxcIiB8fCBkZWxpbSA9PT0gXCJcXFxcbHRcIiB8fCBkZWxpbSA9PT0gXCJcXHUyN0U4XCIpIHtcbiAgICBkZWxpbSA9IFwiXFxcXGxhbmdsZVwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIj5cIiB8fCBkZWxpbSA9PT0gXCJcXFxcZ3RcIiB8fCBkZWxpbSA9PT0gXCJcXHUyN0U5XCIpIHtcbiAgICBkZWxpbSA9IFwiXFxcXHJhbmdsZVwiO1xuICB9IC8vIFNpemVkIGRlbGltaXRlcnMgYXJlIG5ldmVyIGNlbnRlcmVkLlxuXG5cbiAgaWYgKHV0aWxzLmNvbnRhaW5zKHN0YWNrTGFyZ2VEZWxpbWl0ZXJzLCBkZWxpbSkgfHwgdXRpbHMuY29udGFpbnMoc3RhY2tOZXZlckRlbGltaXRlcnMsIGRlbGltKSkge1xuICAgIHJldHVybiBkZWxpbWl0ZXJfbWFrZUxhcmdlRGVsaW0oZGVsaW0sIHNpemUsIGZhbHNlLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbiAgfSBlbHNlIGlmICh1dGlscy5jb250YWlucyhzdGFja0Fsd2F5c0RlbGltaXRlcnMsIGRlbGltKSkge1xuICAgIHJldHVybiBkZWxpbWl0ZXJfbWFrZVN0YWNrZWREZWxpbShkZWxpbSwgc2l6ZVRvTWF4SGVpZ2h0W3NpemVdLCBmYWxzZSwgb3B0aW9ucywgbW9kZSwgY2xhc3Nlcyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSWxsZWdhbCBkZWxpbWl0ZXI6ICdcIiArIGRlbGltICsgXCInXCIpO1xuICB9XG59O1xuLyoqXG4gKiBUaGVyZSBhcmUgdGhyZWUgZGlmZmVyZW50IHNlcXVlbmNlcyBvZiBkZWxpbWl0ZXIgc2l6ZXMgdGhhdCB0aGUgZGVsaW1pdGVyc1xuICogZm9sbG93IGRlcGVuZGluZyBvbiB0aGUga2luZCBvZiBkZWxpbWl0ZXIuIFRoaXMgaXMgdXNlZCB3aGVuIGNyZWF0aW5nIGN1c3RvbVxuICogc2l6ZWQgZGVsaW1pdGVycyB0byBkZWNpZGUgd2hldGhlciB0byBjcmVhdGUgYSBzbWFsbCwgbGFyZ2UsIG9yIHN0YWNrZWRcbiAqIGRlbGltaXRlci5cbiAqXG4gKiBJbiByZWFsIFRlWCwgdGhlc2Ugc2VxdWVuY2VzIGFyZW4ndCBleHBsaWNpdGx5IGRlZmluZWQsIGJ1dCBhcmUgaW5zdGVhZFxuICogZGVmaW5lZCBpbnNpZGUgdGhlIGZvbnQgbWV0cmljcy4gU2luY2UgdGhlcmUgYXJlIG9ubHkgdGhyZWUgc2VxdWVuY2VzIHRoYXRcbiAqIGFyZSBwb3NzaWJsZSBmb3IgdGhlIGRlbGltaXRlcnMgdGhhdCBUZVggZGVmaW5lcywgaXQgaXMgZWFzaWVyIHRvIGp1c3QgZW5jb2RlXG4gKiB0aGVtIGV4cGxpY2l0bHkgaGVyZS5cbiAqL1xuXG5cbi8vIERlbGltaXRlcnMgdGhhdCBuZXZlciBzdGFjayB0cnkgc21hbGwgZGVsaW1pdGVycyBhbmQgbGFyZ2UgZGVsaW1pdGVycyBvbmx5XG52YXIgc3RhY2tOZXZlckRlbGltaXRlclNlcXVlbmNlID0gW3tcbiAgdHlwZTogXCJzbWFsbFwiLFxuICBzdHlsZTogc3JjX1N0eWxlLlNDUklQVFNDUklQVFxufSwge1xuICB0eXBlOiBcInNtYWxsXCIsXG4gIHN0eWxlOiBzcmNfU3R5bGUuU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IHNyY19TdHlsZS5URVhUXG59LCB7XG4gIHR5cGU6IFwibGFyZ2VcIixcbiAgc2l6ZTogMVxufSwge1xuICB0eXBlOiBcImxhcmdlXCIsXG4gIHNpemU6IDJcbn0sIHtcbiAgdHlwZTogXCJsYXJnZVwiLFxuICBzaXplOiAzXG59LCB7XG4gIHR5cGU6IFwibGFyZ2VcIixcbiAgc2l6ZTogNFxufV07IC8vIERlbGltaXRlcnMgdGhhdCBhbHdheXMgc3RhY2sgdHJ5IHRoZSBzbWFsbCBkZWxpbWl0ZXJzIGZpcnN0LCB0aGVuIHN0YWNrXG5cbnZhciBzdGFja0Fsd2F5c0RlbGltaXRlclNlcXVlbmNlID0gW3tcbiAgdHlwZTogXCJzbWFsbFwiLFxuICBzdHlsZTogc3JjX1N0eWxlLlNDUklQVFNDUklQVFxufSwge1xuICB0eXBlOiBcInNtYWxsXCIsXG4gIHN0eWxlOiBzcmNfU3R5bGUuU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IHNyY19TdHlsZS5URVhUXG59LCB7XG4gIHR5cGU6IFwic3RhY2tcIlxufV07IC8vIERlbGltaXRlcnMgdGhhdCBzdGFjayB3aGVuIGxhcmdlIHRyeSB0aGUgc21hbGwgYW5kIHRoZW4gbGFyZ2UgZGVsaW1pdGVycywgYW5kXG4vLyBzdGFjayBhZnRlcndhcmRzXG5cbnZhciBzdGFja0xhcmdlRGVsaW1pdGVyU2VxdWVuY2UgPSBbe1xuICB0eXBlOiBcInNtYWxsXCIsXG4gIHN0eWxlOiBzcmNfU3R5bGUuU0NSSVBUU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IHNyY19TdHlsZS5TQ1JJUFRcbn0sIHtcbiAgdHlwZTogXCJzbWFsbFwiLFxuICBzdHlsZTogc3JjX1N0eWxlLlRFWFRcbn0sIHtcbiAgdHlwZTogXCJsYXJnZVwiLFxuICBzaXplOiAxXG59LCB7XG4gIHR5cGU6IFwibGFyZ2VcIixcbiAgc2l6ZTogMlxufSwge1xuICB0eXBlOiBcImxhcmdlXCIsXG4gIHNpemU6IDNcbn0sIHtcbiAgdHlwZTogXCJsYXJnZVwiLFxuICBzaXplOiA0XG59LCB7XG4gIHR5cGU6IFwic3RhY2tcIlxufV07XG4vKipcbiAqIEdldCB0aGUgZm9udCB1c2VkIGluIGEgZGVsaW1pdGVyIGJhc2VkIG9uIHdoYXQga2luZCBvZiBkZWxpbWl0ZXIgaXQgaXMuXG4gKiBUT0RPKCM5NjMpIFVzZSBtb3JlIHNwZWNpZmljIGZvbnQgZmFtaWx5IHJldHVybiB0eXBlIG9uY2UgdGhhdCBpcyBpbnRyb2R1Y2VkLlxuICovXG5cbnZhciBkZWxpbVR5cGVUb0ZvbnQgPSBmdW5jdGlvbiBkZWxpbVR5cGVUb0ZvbnQodHlwZSkge1xuICBpZiAodHlwZS50eXBlID09PSBcInNtYWxsXCIpIHtcbiAgICByZXR1cm4gXCJNYWluLVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmICh0eXBlLnR5cGUgPT09IFwibGFyZ2VcIikge1xuICAgIHJldHVybiBcIlNpemVcIiArIHR5cGUuc2l6ZSArIFwiLVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmICh0eXBlLnR5cGUgPT09IFwic3RhY2tcIikge1xuICAgIHJldHVybiBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBZGQgc3VwcG9ydCBmb3IgZGVsaW0gdHlwZSAnXCIgKyB0eXBlLnR5cGUgKyBcIicgaGVyZS5cIik7XG4gIH1cbn07XG4vKipcbiAqIFRyYXZlcnNlIGEgc2VxdWVuY2Ugb2YgdHlwZXMgb2YgZGVsaW1pdGVycyB0byBkZWNpZGUgd2hhdCBraW5kIG9mIGRlbGltaXRlclxuICogc2hvdWxkIGJlIHVzZWQgdG8gY3JlYXRlIGEgZGVsaW1pdGVyIG9mIHRoZSBnaXZlbiBoZWlnaHQrZGVwdGguXG4gKi9cblxuXG52YXIgdHJhdmVyc2VTZXF1ZW5jZSA9IGZ1bmN0aW9uIHRyYXZlcnNlU2VxdWVuY2UoZGVsaW0sIGhlaWdodCwgc2VxdWVuY2UsIG9wdGlvbnMpIHtcbiAgLy8gSGVyZSwgd2UgY2hvb3NlIHRoZSBpbmRleCB3ZSBzaG91bGQgc3RhcnQgYXQgaW4gdGhlIHNlcXVlbmNlcy4gSW4gc21hbGxlclxuICAvLyBzaXplcyAod2hpY2ggY29ycmVzcG9uZCB0byBsYXJnZXIgbnVtYmVycyBpbiBzdHlsZS5zaXplKSB3ZSBzdGFydCBlYXJsaWVyXG4gIC8vIGluIHRoZSBzZXF1ZW5jZS4gVGh1cywgc2NyaXB0c2NyaXB0IHN0YXJ0cyBhdCBpbmRleCAzLTM9MCwgc2NyaXB0IHN0YXJ0c1xuICAvLyBhdCBpbmRleCAzLTI9MSwgdGV4dCBzdGFydHMgYXQgMy0xPTIsIGFuZCBkaXNwbGF5IHN0YXJ0cyBhdCBtaW4oMiwzLTApPTJcbiAgdmFyIHN0YXJ0ID0gTWF0aC5taW4oMiwgMyAtIG9wdGlvbnMuc3R5bGUuc2l6ZSk7XG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgc2VxdWVuY2UubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc2VxdWVuY2VbaV0udHlwZSA9PT0gXCJzdGFja1wiKSB7XG4gICAgICAvLyBUaGlzIGlzIGFsd2F5cyB0aGUgbGFzdCBkZWxpbWl0ZXIsIHNvIHdlIGp1c3QgYnJlYWsgdGhlIGxvb3Agbm93LlxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIG1ldHJpY3MgPSBkZWxpbWl0ZXJfZ2V0TWV0cmljcyhkZWxpbSwgZGVsaW1UeXBlVG9Gb250KHNlcXVlbmNlW2ldKSwgXCJtYXRoXCIpO1xuICAgIHZhciBoZWlnaHREZXB0aCA9IG1ldHJpY3MuaGVpZ2h0ICsgbWV0cmljcy5kZXB0aDsgLy8gU21hbGwgZGVsaW1pdGVycyBhcmUgc2NhbGVkIGRvd24gdmVyc2lvbnMgb2YgdGhlIHNhbWUgZm9udCwgc28gd2VcbiAgICAvLyBhY2NvdW50IGZvciB0aGUgc3R5bGUgY2hhbmdlIHNpemUuXG5cbiAgICBpZiAoc2VxdWVuY2VbaV0udHlwZSA9PT0gXCJzbWFsbFwiKSB7XG4gICAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nQmFzZVN0eWxlKHNlcXVlbmNlW2ldLnN0eWxlKTtcbiAgICAgIGhlaWdodERlcHRoICo9IG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgfSAvLyBDaGVjayBpZiB0aGUgZGVsaW1pdGVyIGF0IHRoaXMgc2l6ZSB3b3JrcyBmb3IgdGhlIGdpdmVuIGhlaWdodC5cblxuXG4gICAgaWYgKGhlaWdodERlcHRoID4gaGVpZ2h0KSB7XG4gICAgICByZXR1cm4gc2VxdWVuY2VbaV07XG4gICAgfVxuICB9IC8vIElmIHdlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UsIHJldHVybiB0aGUgbGFzdCBzZXF1ZW5jZSBlbGVtZW50LlxuXG5cbiAgcmV0dXJuIHNlcXVlbmNlW3NlcXVlbmNlLmxlbmd0aCAtIDFdO1xufTtcbi8qKlxuICogTWFrZSBhIGRlbGltaXRlciBvZiBhIGdpdmVuIGhlaWdodCtkZXB0aCwgd2l0aCBvcHRpb25hbCBjZW50ZXJpbmcuIEhlcmUsIHdlXG4gKiB0cmF2ZXJzZSB0aGUgc2VxdWVuY2VzLCBhbmQgY3JlYXRlIGEgZGVsaW1pdGVyIHRoYXQgdGhlIHNlcXVlbmNlIHRlbGxzIHVzIHRvLlxuICovXG5cblxudmFyIGRlbGltaXRlcl9tYWtlQ3VzdG9tU2l6ZWREZWxpbSA9IGZ1bmN0aW9uIG1ha2VDdXN0b21TaXplZERlbGltKGRlbGltLCBoZWlnaHQsIGNlbnRlciwgb3B0aW9ucywgbW9kZSwgY2xhc3Nlcykge1xuICBpZiAoZGVsaW0gPT09IFwiPFwiIHx8IGRlbGltID09PSBcIlxcXFxsdFwiIHx8IGRlbGltID09PSBcIlxcdTI3RThcIikge1xuICAgIGRlbGltID0gXCJcXFxcbGFuZ2xlXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiPlwiIHx8IGRlbGltID09PSBcIlxcXFxndFwiIHx8IGRlbGltID09PSBcIlxcdTI3RTlcIikge1xuICAgIGRlbGltID0gXCJcXFxccmFuZ2xlXCI7XG4gIH0gLy8gRGVjaWRlIHdoYXQgc2VxdWVuY2UgdG8gdXNlXG5cblxuICB2YXIgc2VxdWVuY2U7XG5cbiAgaWYgKHV0aWxzLmNvbnRhaW5zKHN0YWNrTmV2ZXJEZWxpbWl0ZXJzLCBkZWxpbSkpIHtcbiAgICBzZXF1ZW5jZSA9IHN0YWNrTmV2ZXJEZWxpbWl0ZXJTZXF1ZW5jZTtcbiAgfSBlbHNlIGlmICh1dGlscy5jb250YWlucyhzdGFja0xhcmdlRGVsaW1pdGVycywgZGVsaW0pKSB7XG4gICAgc2VxdWVuY2UgPSBzdGFja0xhcmdlRGVsaW1pdGVyU2VxdWVuY2U7XG4gIH0gZWxzZSB7XG4gICAgc2VxdWVuY2UgPSBzdGFja0Fsd2F5c0RlbGltaXRlclNlcXVlbmNlO1xuICB9IC8vIExvb2sgdGhyb3VnaCB0aGUgc2VxdWVuY2VcblxuXG4gIHZhciBkZWxpbVR5cGUgPSB0cmF2ZXJzZVNlcXVlbmNlKGRlbGltLCBoZWlnaHQsIHNlcXVlbmNlLCBvcHRpb25zKTsgLy8gR2V0IHRoZSBkZWxpbWl0ZXIgZnJvbSBmb250IGdseXBocy5cbiAgLy8gRGVwZW5kaW5nIG9uIHRoZSBzZXF1ZW5jZSBlbGVtZW50IHdlIGRlY2lkZWQgb24sIGNhbGwgdGhlXG4gIC8vIGFwcHJvcHJpYXRlIGZ1bmN0aW9uLlxuXG4gIGlmIChkZWxpbVR5cGUudHlwZSA9PT0gXCJzbWFsbFwiKSB7XG4gICAgcmV0dXJuIGRlbGltaXRlcl9tYWtlU21hbGxEZWxpbShkZWxpbSwgZGVsaW1UeXBlLnN0eWxlLCBjZW50ZXIsIG9wdGlvbnMsIG1vZGUsIGNsYXNzZXMpO1xuICB9IGVsc2UgaWYgKGRlbGltVHlwZS50eXBlID09PSBcImxhcmdlXCIpIHtcbiAgICByZXR1cm4gZGVsaW1pdGVyX21ha2VMYXJnZURlbGltKGRlbGltLCBkZWxpbVR5cGUuc2l6ZSwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbiAgfSBlbHNlXG4gICAgLyogaWYgKGRlbGltVHlwZS50eXBlID09PSBcInN0YWNrXCIpICovXG4gICAge1xuICAgICAgcmV0dXJuIGRlbGltaXRlcl9tYWtlU3RhY2tlZERlbGltKGRlbGltLCBoZWlnaHQsIGNlbnRlciwgb3B0aW9ucywgbW9kZSwgY2xhc3Nlcyk7XG4gICAgfVxufTtcbi8qKlxuICogTWFrZSBhIGRlbGltaXRlciBmb3IgdXNlIHdpdGggYFxcbGVmdGAgYW5kIGBcXHJpZ2h0YCwgZ2l2ZW4gYSBoZWlnaHQgYW5kIGRlcHRoXG4gKiBvZiBhbiBleHByZXNzaW9uIHRoYXQgdGhlIGRlbGltaXRlcnMgc3Vycm91bmQuXG4gKi9cblxuXG52YXIgbWFrZUxlZnRSaWdodERlbGltID0gZnVuY3Rpb24gbWFrZUxlZnRSaWdodERlbGltKGRlbGltLCBoZWlnaHQsIGRlcHRoLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKSB7XG4gIC8vIFdlIGFsd2F5cyBjZW50ZXIgXFxsZWZ0L1xccmlnaHQgZGVsaW1pdGVycywgc28gdGhlIGF4aXMgaXMgYWx3YXlzIHNoaWZ0ZWRcbiAgdmFyIGF4aXNIZWlnaHQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCAqIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7IC8vIFRha2VuIGZyb20gVGVYIHNvdXJjZSwgdGV4LndlYiwgZnVuY3Rpb24gbWFrZV9sZWZ0X3JpZ2h0XG5cbiAgdmFyIGRlbGltaXRlckZhY3RvciA9IDkwMTtcbiAgdmFyIGRlbGltaXRlckV4dGVuZCA9IDUuMCAvIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5wdFBlckVtO1xuICB2YXIgbWF4RGlzdEZyb21BeGlzID0gTWF0aC5tYXgoaGVpZ2h0IC0gYXhpc0hlaWdodCwgZGVwdGggKyBheGlzSGVpZ2h0KTtcbiAgdmFyIHRvdGFsSGVpZ2h0ID0gTWF0aC5tYXgoIC8vIEluIHJlYWwgVGVYLCBjYWxjdWxhdGlvbnMgYXJlIGRvbmUgdXNpbmcgaW50ZWdyYWwgdmFsdWVzIHdoaWNoIGFyZVxuICAvLyA2NTUzNiBwZXIgcHQsIG9yIDY1NTM2MCBwZXIgZW0uIFNvLCB0aGUgZGl2aXNpb24gaGVyZSB0cnVuY2F0ZXMgaW5cbiAgLy8gVGVYIGJ1dCBkb2Vzbid0IGhlcmUsIHByb2R1Y2luZyBkaWZmZXJlbnQgcmVzdWx0cy4gSWYgd2Ugd2FudGVkIHRvXG4gIC8vIGV4YWN0bHkgbWF0Y2ggVGVYJ3MgY2FsY3VsYXRpb24sIHdlIGNvdWxkIGRvXG4gIC8vICAgTWF0aC5mbG9vcig2NTUzNjAgKiBtYXhEaXN0RnJvbUF4aXMgLyA1MDApICpcbiAgLy8gICAgZGVsaW1pdGVyRmFjdG9yIC8gNjU1MzYwXG4gIC8vIChUbyBzZWUgdGhlIGRpZmZlcmVuY2UsIGNvbXBhcmVcbiAgLy8gICAgeF57eF57XFxsZWZ0KFxccnVsZXswLjFlbX17MC42OGVtfVxccmlnaHQpfX1cbiAgLy8gaW4gVGVYIGFuZCBLYVRlWClcbiAgbWF4RGlzdEZyb21BeGlzIC8gNTAwICogZGVsaW1pdGVyRmFjdG9yLCAyICogbWF4RGlzdEZyb21BeGlzIC0gZGVsaW1pdGVyRXh0ZW5kKTsgLy8gRmluYWxseSwgd2UgZGVmZXIgdG8gYG1ha2VDdXN0b21TaXplZERlbGltYCB3aXRoIG91ciBjYWxjdWxhdGVkIHRvdGFsXG4gIC8vIGhlaWdodFxuXG4gIHJldHVybiBkZWxpbWl0ZXJfbWFrZUN1c3RvbVNpemVkRGVsaW0oZGVsaW0sIHRvdGFsSGVpZ2h0LCB0cnVlLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGRlbGltaXRlciA9ICh7XG4gIHNxcnRJbWFnZTogbWFrZVNxcnRJbWFnZSxcbiAgc2l6ZWREZWxpbTogZGVsaW1pdGVyX21ha2VTaXplZERlbGltLFxuICBjdXN0b21TaXplZERlbGltOiBkZWxpbWl0ZXJfbWFrZUN1c3RvbVNpemVkRGVsaW0sXG4gIGxlZnRSaWdodERlbGltOiBtYWtlTGVmdFJpZ2h0RGVsaW1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2RlbGltc2l6aW5nLmpzXG5cblxuXG5cblxuXG5cblxuXG4vLyBFeHRyYSBkYXRhIG5lZWRlZCBmb3IgdGhlIGRlbGltaXRlciBoYW5kbGVyIGRvd24gYmVsb3dcbnZhciBkZWxpbWl0ZXJTaXplcyA9IHtcbiAgXCJcXFxcYmlnbFwiOiB7XG4gICAgbWNsYXNzOiBcIm1vcGVuXCIsXG4gICAgc2l6ZTogMVxuICB9LFxuICBcIlxcXFxCaWdsXCI6IHtcbiAgICBtY2xhc3M6IFwibW9wZW5cIixcbiAgICBzaXplOiAyXG4gIH0sXG4gIFwiXFxcXGJpZ2dsXCI6IHtcbiAgICBtY2xhc3M6IFwibW9wZW5cIixcbiAgICBzaXplOiAzXG4gIH0sXG4gIFwiXFxcXEJpZ2dsXCI6IHtcbiAgICBtY2xhc3M6IFwibW9wZW5cIixcbiAgICBzaXplOiA0XG4gIH0sXG4gIFwiXFxcXGJpZ3JcIjoge1xuICAgIG1jbGFzczogXCJtY2xvc2VcIixcbiAgICBzaXplOiAxXG4gIH0sXG4gIFwiXFxcXEJpZ3JcIjoge1xuICAgIG1jbGFzczogXCJtY2xvc2VcIixcbiAgICBzaXplOiAyXG4gIH0sXG4gIFwiXFxcXGJpZ2dyXCI6IHtcbiAgICBtY2xhc3M6IFwibWNsb3NlXCIsXG4gICAgc2l6ZTogM1xuICB9LFxuICBcIlxcXFxCaWdnclwiOiB7XG4gICAgbWNsYXNzOiBcIm1jbG9zZVwiLFxuICAgIHNpemU6IDRcbiAgfSxcbiAgXCJcXFxcYmlnbVwiOiB7XG4gICAgbWNsYXNzOiBcIm1yZWxcIixcbiAgICBzaXplOiAxXG4gIH0sXG4gIFwiXFxcXEJpZ21cIjoge1xuICAgIG1jbGFzczogXCJtcmVsXCIsXG4gICAgc2l6ZTogMlxuICB9LFxuICBcIlxcXFxiaWdnbVwiOiB7XG4gICAgbWNsYXNzOiBcIm1yZWxcIixcbiAgICBzaXplOiAzXG4gIH0sXG4gIFwiXFxcXEJpZ2dtXCI6IHtcbiAgICBtY2xhc3M6IFwibXJlbFwiLFxuICAgIHNpemU6IDRcbiAgfSxcbiAgXCJcXFxcYmlnXCI6IHtcbiAgICBtY2xhc3M6IFwibW9yZFwiLFxuICAgIHNpemU6IDFcbiAgfSxcbiAgXCJcXFxcQmlnXCI6IHtcbiAgICBtY2xhc3M6IFwibW9yZFwiLFxuICAgIHNpemU6IDJcbiAgfSxcbiAgXCJcXFxcYmlnZ1wiOiB7XG4gICAgbWNsYXNzOiBcIm1vcmRcIixcbiAgICBzaXplOiAzXG4gIH0sXG4gIFwiXFxcXEJpZ2dcIjoge1xuICAgIG1jbGFzczogXCJtb3JkXCIsXG4gICAgc2l6ZTogNFxuICB9XG59O1xudmFyIGRlbGltaXRlcnMgPSBbXCIoXCIsIFwiXFxcXGxwYXJlblwiLCBcIilcIiwgXCJcXFxccnBhcmVuXCIsIFwiW1wiLCBcIlxcXFxsYnJhY2tcIiwgXCJdXCIsIFwiXFxcXHJicmFja1wiLCBcIlxcXFx7XCIsIFwiXFxcXGxicmFjZVwiLCBcIlxcXFx9XCIsIFwiXFxcXHJicmFjZVwiLCBcIlxcXFxsZmxvb3JcIiwgXCJcXFxccmZsb29yXCIsIFwiXFx1MjMwQVwiLCBcIlxcdTIzMEJcIiwgXCJcXFxcbGNlaWxcIiwgXCJcXFxccmNlaWxcIiwgXCJcXHUyMzA4XCIsIFwiXFx1MjMwOVwiLCBcIjxcIiwgXCI+XCIsIFwiXFxcXGxhbmdsZVwiLCBcIlxcdTI3RThcIiwgXCJcXFxccmFuZ2xlXCIsIFwiXFx1MjdFOVwiLCBcIlxcXFxsdFwiLCBcIlxcXFxndFwiLCBcIlxcXFxsdmVydFwiLCBcIlxcXFxydmVydFwiLCBcIlxcXFxsVmVydFwiLCBcIlxcXFxyVmVydFwiLCBcIlxcXFxsZ3JvdXBcIiwgXCJcXFxccmdyb3VwXCIsIFwiXFx1MjdFRVwiLCBcIlxcdTI3RUZcIiwgXCJcXFxcbG1vdXN0YWNoZVwiLCBcIlxcXFxybW91c3RhY2hlXCIsIFwiXFx1MjNCMFwiLCBcIlxcdTIzQjFcIiwgXCIvXCIsIFwiXFxcXGJhY2tzbGFzaFwiLCBcInxcIiwgXCJcXFxcdmVydFwiLCBcIlxcXFx8XCIsIFwiXFxcXFZlcnRcIiwgXCJcXFxcdXBhcnJvd1wiLCBcIlxcXFxVcGFycm93XCIsIFwiXFxcXGRvd25hcnJvd1wiLCBcIlxcXFxEb3duYXJyb3dcIiwgXCJcXFxcdXBkb3duYXJyb3dcIiwgXCJcXFxcVXBkb3duYXJyb3dcIiwgXCIuXCJdO1xuXG4vLyBEZWxpbWl0ZXIgZnVuY3Rpb25zXG5mdW5jdGlvbiBjaGVja0RlbGltaXRlcihkZWxpbSwgY29udGV4dCkge1xuICB2YXIgc3ltRGVsaW0gPSBjaGVja1N5bWJvbE5vZGVUeXBlKGRlbGltKTtcblxuICBpZiAoc3ltRGVsaW0gJiYgdXRpbHMuY29udGFpbnMoZGVsaW1pdGVycywgc3ltRGVsaW0udGV4dCkpIHtcbiAgICByZXR1cm4gc3ltRGVsaW07XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCBkZWxpbWl0ZXI6ICdcIiArIChzeW1EZWxpbSA/IHN5bURlbGltLnRleHQgOiBKU09OLnN0cmluZ2lmeShkZWxpbSkpICsgXCInIGFmdGVyICdcIiArIGNvbnRleHQuZnVuY05hbWUgKyBcIidcIiwgZGVsaW0pO1xuICB9XG59XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJkZWxpbXNpemluZ1wiLFxuICBuYW1lczogW1wiXFxcXGJpZ2xcIiwgXCJcXFxcQmlnbFwiLCBcIlxcXFxiaWdnbFwiLCBcIlxcXFxCaWdnbFwiLCBcIlxcXFxiaWdyXCIsIFwiXFxcXEJpZ3JcIiwgXCJcXFxcYmlnZ3JcIiwgXCJcXFxcQmlnZ3JcIiwgXCJcXFxcYmlnbVwiLCBcIlxcXFxCaWdtXCIsIFwiXFxcXGJpZ2dtXCIsIFwiXFxcXEJpZ2dtXCIsIFwiXFxcXGJpZ1wiLCBcIlxcXFxCaWdcIiwgXCJcXFxcYmlnZ1wiLCBcIlxcXFxCaWdnXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gICAgdmFyIGRlbGltID0gY2hlY2tEZWxpbWl0ZXIoYXJnc1swXSwgY29udGV4dCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZGVsaW1zaXppbmdcIixcbiAgICAgIG1vZGU6IGNvbnRleHQucGFyc2VyLm1vZGUsXG4gICAgICBzaXplOiBkZWxpbWl0ZXJTaXplc1tjb250ZXh0LmZ1bmNOYW1lXS5zaXplLFxuICAgICAgbWNsYXNzOiBkZWxpbWl0ZXJTaXplc1tjb250ZXh0LmZ1bmNOYW1lXS5tY2xhc3MsXG4gICAgICBkZWxpbTogZGVsaW0udGV4dFxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIGlmIChncm91cC5kZWxpbSA9PT0gXCIuXCIpIHtcbiAgICAgIC8vIEVtcHR5IGRlbGltaXRlcnMgc3RpbGwgY291bnQgYXMgZWxlbWVudHMsIGV2ZW4gdGhvdWdoIHRoZXkgZG9uJ3RcbiAgICAgIC8vIHNob3cgYW55dGhpbmcuXG4gICAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW2dyb3VwLm1jbGFzc10pO1xuICAgIH0gLy8gVXNlIGRlbGltaXRlci5zaXplZERlbGltIHRvIGdlbmVyYXRlIHRoZSBkZWxpbWl0ZXIuXG5cblxuICAgIHJldHVybiBkZWxpbWl0ZXIuc2l6ZWREZWxpbShncm91cC5kZWxpbSwgZ3JvdXAuc2l6ZSwgb3B0aW9ucywgZ3JvdXAubW9kZSwgW2dyb3VwLm1jbGFzc10pO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gW107XG5cbiAgICBpZiAoZ3JvdXAuZGVsaW0gIT09IFwiLlwiKSB7XG4gICAgICBjaGlsZHJlbi5wdXNoKGJ1aWxkTWF0aE1MX21ha2VUZXh0KGdyb3VwLmRlbGltLCBncm91cC5tb2RlKSk7XG4gICAgfVxuXG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIGNoaWxkcmVuKTtcblxuICAgIGlmIChncm91cC5tY2xhc3MgPT09IFwibW9wZW5cIiB8fCBncm91cC5tY2xhc3MgPT09IFwibWNsb3NlXCIpIHtcbiAgICAgIC8vIE9ubHkgc29tZSBvZiB0aGUgZGVsaW1zaXppbmcgZnVuY3Rpb25zIGFjdCBhcyBmZW5jZXMsIGFuZCB0aGV5XG4gICAgICAvLyByZXR1cm4gXCJtb3BlblwiIG9yIFwibWNsb3NlXCIgbWNsYXNzLlxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJmZW5jZVwiLCBcInRydWVcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEV4cGxpY2l0bHkgZGlzYWJsZSBmZW5jaW5nIGlmIGl0J3Mgbm90IGEgZmVuY2UsIHRvIG92ZXJyaWRlIHRoZVxuICAgICAgLy8gZGVmYXVsdHMuXG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImZlbmNlXCIsIFwiZmFsc2VcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBhc3NlcnRQYXJzZWQoZ3JvdXApIHtcbiAgaWYgKCFncm91cC5ib2R5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQnVnOiBUaGUgbGVmdHJpZ2h0IFBhcnNlTm9kZSB3YXNuJ3QgZnVsbHkgcGFyc2VkLlwiKTtcbiAgfVxufVxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibGVmdHJpZ2h0LXJpZ2h0XCIsXG4gIG5hbWVzOiBbXCJcXFxccmlnaHRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKGNvbnRleHQsIGFyZ3MpIHtcbiAgICAvLyBcXGxlZnQgY2FzZSBiZWxvdyB0cmlnZ2VycyBwYXJzaW5nIG9mIFxccmlnaHQgaW5cbiAgICAvLyAgIGBjb25zdCByaWdodCA9IHBhcnNlci5wYXJzZUZ1bmN0aW9uKCk7YFxuICAgIC8vIHVzZXMgdGhpcyByZXR1cm4gdmFsdWUuXG4gICAgdmFyIGNvbG9yID0gY29udGV4dC5wYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5nZXQoXCJcXFxcY3VycmVudEBjb2xvclwiKTtcblxuICAgIGlmIChjb2xvciAmJiB0eXBlb2YgY29sb3IgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlxcXFxjdXJyZW50QGNvbG9yIHNldCB0byBub24tc3RyaW5nIGluIFxcXFxyaWdodFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJsZWZ0cmlnaHQtcmlnaHRcIixcbiAgICAgIG1vZGU6IGNvbnRleHQucGFyc2VyLm1vZGUsXG4gICAgICBkZWxpbTogY2hlY2tEZWxpbWl0ZXIoYXJnc1swXSwgY29udGV4dCkudGV4dCxcbiAgICAgIGNvbG9yOiBjb2xvciAvLyB1bmRlZmluZWQgaWYgbm90IHNldCB2aWEgXFxjb2xvclxuXG4gICAgfTtcbiAgfVxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibGVmdHJpZ2h0XCIsXG4gIG5hbWVzOiBbXCJcXFxcbGVmdFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoY29udGV4dCwgYXJncykge1xuICAgIHZhciBkZWxpbSA9IGNoZWNrRGVsaW1pdGVyKGFyZ3NbMF0sIGNvbnRleHQpO1xuICAgIHZhciBwYXJzZXIgPSBjb250ZXh0LnBhcnNlcjsgLy8gUGFyc2Ugb3V0IHRoZSBpbXBsaWNpdCBib2R5XG5cbiAgICArK3BhcnNlci5sZWZ0cmlnaHREZXB0aDsgLy8gcGFyc2VFeHByZXNzaW9uIHN0b3BzIGJlZm9yZSAnXFxcXHJpZ2h0J1xuXG4gICAgdmFyIGJvZHkgPSBwYXJzZXIucGFyc2VFeHByZXNzaW9uKGZhbHNlKTtcbiAgICAtLXBhcnNlci5sZWZ0cmlnaHREZXB0aDsgLy8gQ2hlY2sgdGhlIG5leHQgdG9rZW5cblxuICAgIHBhcnNlci5leHBlY3QoXCJcXFxccmlnaHRcIiwgZmFsc2UpO1xuICAgIHZhciByaWdodCA9IGFzc2VydE5vZGVUeXBlKHBhcnNlci5wYXJzZUZ1bmN0aW9uKCksIFwibGVmdHJpZ2h0LXJpZ2h0XCIpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImxlZnRyaWdodFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5OiBib2R5LFxuICAgICAgbGVmdDogZGVsaW0udGV4dCxcbiAgICAgIHJpZ2h0OiByaWdodC5kZWxpbSxcbiAgICAgIHJpZ2h0Q29sb3I6IHJpZ2h0LmNvbG9yXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgYXNzZXJ0UGFyc2VkKGdyb3VwKTsgLy8gQnVpbGQgdGhlIGlubmVyIGV4cHJlc3Npb25cblxuICAgIHZhciBpbm5lciA9IGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucywgdHJ1ZSwgW1wibW9wZW5cIiwgXCJtY2xvc2VcIl0pO1xuICAgIHZhciBpbm5lckhlaWdodCA9IDA7XG4gICAgdmFyIGlubmVyRGVwdGggPSAwO1xuICAgIHZhciBoYWRNaWRkbGUgPSBmYWxzZTsgLy8gQ2FsY3VsYXRlIGl0cyBoZWlnaHQgYW5kIGRlcHRoXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlubmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBQcm9wZXJ0eSBgaXNNaWRkbGVgIG5vdCBkZWZpbmVkIG9uIGBzcGFuYC4gU2VlIGNvbW1lbnQgaW5cbiAgICAgIC8vIFwibWlkZGxlXCIncyBodG1sQnVpbGRlci5cbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIGlmIChpbm5lcltpXS5pc01pZGRsZSkge1xuICAgICAgICBoYWRNaWRkbGUgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5uZXJIZWlnaHQgPSBNYXRoLm1heChpbm5lcltpXS5oZWlnaHQsIGlubmVySGVpZ2h0KTtcbiAgICAgICAgaW5uZXJEZXB0aCA9IE1hdGgubWF4KGlubmVyW2ldLmRlcHRoLCBpbm5lckRlcHRoKTtcbiAgICAgIH1cbiAgICB9IC8vIFRoZSBzaXplIG9mIGRlbGltaXRlcnMgaXMgdGhlIHNhbWUsIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBzdHlsZSB3ZSBhcmVcbiAgICAvLyBpbi4gVGh1cywgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiBkZWxpbWl0ZXIgd2UgbmVlZCBhcm91bmRcbiAgICAvLyBhIGdyb3VwLCB3ZSBzY2FsZSBkb3duIHRoZSBpbm5lciBzaXplIGJhc2VkIG9uIHRoZSBzaXplLlxuXG5cbiAgICBpbm5lckhlaWdodCAqPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICAgIGlubmVyRGVwdGggKj0gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgICB2YXIgbGVmdERlbGltO1xuXG4gICAgaWYgKGdyb3VwLmxlZnQgPT09IFwiLlwiKSB7XG4gICAgICAvLyBFbXB0eSBkZWxpbWl0ZXJzIGluIFxcbGVmdCBhbmQgXFxyaWdodCBtYWtlIG51bGwgZGVsaW1pdGVyIHNwYWNlcy5cbiAgICAgIGxlZnREZWxpbSA9IG1ha2VOdWxsRGVsaW1pdGVyKG9wdGlvbnMsIFtcIm1vcGVuXCJdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlLCB1c2UgbGVmdFJpZ2h0RGVsaW0gdG8gZ2VuZXJhdGUgdGhlIGNvcnJlY3Qgc2l6ZWRcbiAgICAgIC8vIGRlbGltaXRlci5cbiAgICAgIGxlZnREZWxpbSA9IGRlbGltaXRlci5sZWZ0UmlnaHREZWxpbShncm91cC5sZWZ0LCBpbm5lckhlaWdodCwgaW5uZXJEZXB0aCwgb3B0aW9ucywgZ3JvdXAubW9kZSwgW1wibW9wZW5cIl0pO1xuICAgIH0gLy8gQWRkIGl0IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGV4cHJlc3Npb25cblxuXG4gICAgaW5uZXIudW5zaGlmdChsZWZ0RGVsaW0pOyAvLyBIYW5kbGUgbWlkZGxlIGRlbGltaXRlcnNcblxuICAgIGlmIChoYWRNaWRkbGUpIHtcbiAgICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBpbm5lci5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdmFyIG1pZGRsZURlbGltID0gaW5uZXJbX2ldOyAvLyBQcm9wZXJ0eSBgaXNNaWRkbGVgIG5vdCBkZWZpbmVkIG9uIGBzcGFuYC4gU2VlIGNvbW1lbnQgaW5cbiAgICAgICAgLy8gXCJtaWRkbGVcIidzIGh0bWxCdWlsZGVyLlxuICAgICAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgICAgdmFyIGlzTWlkZGxlID0gbWlkZGxlRGVsaW0uaXNNaWRkbGU7XG5cbiAgICAgICAgaWYgKGlzTWlkZGxlKSB7XG4gICAgICAgICAgLy8gQXBwbHkgdGhlIG9wdGlvbnMgdGhhdCB3ZXJlIGFjdGl2ZSB3aGVuIFxcbWlkZGxlIHdhcyBjYWxsZWRcbiAgICAgICAgICBpbm5lcltfaV0gPSBkZWxpbWl0ZXIubGVmdFJpZ2h0RGVsaW0oaXNNaWRkbGUuZGVsaW0sIGlubmVySGVpZ2h0LCBpbm5lckRlcHRoLCBpc01pZGRsZS5vcHRpb25zLCBncm91cC5tb2RlLCBbXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmlnaHREZWxpbTsgLy8gU2FtZSBmb3IgdGhlIHJpZ2h0IGRlbGltaXRlciwgYnV0IHVzaW5nIGNvbG9yIHNwZWNpZmllZCBieSBcXGNvbG9yXG5cbiAgICBpZiAoZ3JvdXAucmlnaHQgPT09IFwiLlwiKSB7XG4gICAgICByaWdodERlbGltID0gbWFrZU51bGxEZWxpbWl0ZXIob3B0aW9ucywgW1wibWNsb3NlXCJdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGNvbG9yT3B0aW9ucyA9IGdyb3VwLnJpZ2h0Q29sb3IgPyBvcHRpb25zLndpdGhDb2xvcihncm91cC5yaWdodENvbG9yKSA6IG9wdGlvbnM7XG4gICAgICByaWdodERlbGltID0gZGVsaW1pdGVyLmxlZnRSaWdodERlbGltKGdyb3VwLnJpZ2h0LCBpbm5lckhlaWdodCwgaW5uZXJEZXB0aCwgY29sb3JPcHRpb25zLCBncm91cC5tb2RlLCBbXCJtY2xvc2VcIl0pO1xuICAgIH0gLy8gQWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGV4cHJlc3Npb24uXG5cblxuICAgIGlubmVyLnB1c2gocmlnaHREZWxpbSk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1pbm5lclwiXSwgaW5uZXIsIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgYXNzZXJ0UGFyc2VkKGdyb3VwKTtcbiAgICB2YXIgaW5uZXIgPSBidWlsZE1hdGhNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoZ3JvdXAubGVmdCAhPT0gXCIuXCIpIHtcbiAgICAgIHZhciBsZWZ0Tm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW2J1aWxkTWF0aE1MX21ha2VUZXh0KGdyb3VwLmxlZnQsIGdyb3VwLm1vZGUpXSk7XG4gICAgICBsZWZ0Tm9kZS5zZXRBdHRyaWJ1dGUoXCJmZW5jZVwiLCBcInRydWVcIik7XG4gICAgICBpbm5lci51bnNoaWZ0KGxlZnROb2RlKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JvdXAucmlnaHQgIT09IFwiLlwiKSB7XG4gICAgICB2YXIgcmlnaHROb2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbYnVpbGRNYXRoTUxfbWFrZVRleHQoZ3JvdXAucmlnaHQsIGdyb3VwLm1vZGUpXSk7XG4gICAgICByaWdodE5vZGUuc2V0QXR0cmlidXRlKFwiZmVuY2VcIiwgXCJ0cnVlXCIpO1xuXG4gICAgICBpZiAoZ3JvdXAucmlnaHRDb2xvcikge1xuICAgICAgICByaWdodE5vZGUuc2V0QXR0cmlidXRlKFwibWF0aGNvbG9yXCIsIGdyb3VwLnJpZ2h0Q29sb3IpO1xuICAgICAgfVxuXG4gICAgICBpbm5lci5wdXNoKHJpZ2h0Tm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1aWxkTWF0aE1MX21ha2VSb3coaW5uZXIpO1xuICB9XG59KTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJtaWRkbGVcIixcbiAgbmFtZXM6IFtcIlxcXFxtaWRkbGVcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKGNvbnRleHQsIGFyZ3MpIHtcbiAgICB2YXIgZGVsaW0gPSBjaGVja0RlbGltaXRlcihhcmdzWzBdLCBjb250ZXh0KTtcblxuICAgIGlmICghY29udGV4dC5wYXJzZXIubGVmdHJpZ2h0RGVwdGgpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlxcXFxtaWRkbGUgd2l0aG91dCBwcmVjZWRpbmcgXFxcXGxlZnRcIiwgZGVsaW0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm1pZGRsZVwiLFxuICAgICAgbW9kZTogY29udGV4dC5wYXJzZXIubW9kZSxcbiAgICAgIGRlbGltOiBkZWxpbS50ZXh0XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG1pZGRsZURlbGltO1xuXG4gICAgaWYgKGdyb3VwLmRlbGltID09PSBcIi5cIikge1xuICAgICAgbWlkZGxlRGVsaW0gPSBtYWtlTnVsbERlbGltaXRlcihvcHRpb25zLCBbXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1pZGRsZURlbGltID0gZGVsaW1pdGVyLnNpemVkRGVsaW0oZ3JvdXAuZGVsaW0sIDEsIG9wdGlvbnMsIGdyb3VwLm1vZGUsIFtdKTtcbiAgICAgIHZhciBpc01pZGRsZSA9IHtcbiAgICAgICAgZGVsaW06IGdyb3VwLmRlbGltLFxuICAgICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgICB9OyAvLyBQcm9wZXJ0eSBgaXNNaWRkbGVgIG5vdCBkZWZpbmVkIG9uIGBzcGFuYC4gSXQgaXMgb25seSB1c2VkIGluXG4gICAgICAvLyB0aGlzIGZpbGUgYWJvdmUuXG4gICAgICAvLyBUT0RPOiBGaXggdGhpcyB2aW9sYXRpb24gb2YgdGhlIGBzcGFuYCB0eXBlIGFuZCBwb3NzaWJseSByZW5hbWVcbiAgICAgIC8vIHRoaW5ncyBzaW5jZSBgaXNNaWRkbGVgIHNvdW5kcyBsaWtlIGEgYm9vbGVhbiwgYnV0IGlzIGEgc3RydWN0LlxuICAgICAgLy8gJEZsb3dGaXhNZVxuXG4gICAgICBtaWRkbGVEZWxpbS5pc01pZGRsZSA9IGlzTWlkZGxlO1xuICAgIH1cblxuICAgIHJldHVybiBtaWRkbGVEZWxpbTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIEEgRmlyZWZveCBcXG1pZGRsZSB3aWxsIHN0cmVjaCBhIGNoYXJhY3RlciB2ZXJ0aWNhbGx5IG9ubHkgaWYgaXRcbiAgICAvLyBpcyBpbiB0aGUgZmVuY2UgcGFydCBvZiB0aGUgb3BlcmF0b3IgZGljdGlvbmFyeSBhdDpcbiAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvTWF0aE1MMy9hcHBlbmRpeGMuaHRtbC5cbiAgICAvLyBTbyB3ZSBuZWVkIHRvIGF2b2lkIFUrMjIyMyBhbmQgdXNlIHBsYWluIFwifFwiIGluc3RlYWQuXG4gICAgdmFyIHRleHROb2RlID0gZ3JvdXAuZGVsaW0gPT09IFwiXFxcXHZlcnRcIiB8fCBncm91cC5kZWxpbSA9PT0gXCJ8XCIgPyBidWlsZE1hdGhNTF9tYWtlVGV4dChcInxcIiwgXCJ0ZXh0XCIpIDogYnVpbGRNYXRoTUxfbWFrZVRleHQoZ3JvdXAuZGVsaW0sIGdyb3VwLm1vZGUpO1xuICAgIHZhciBtaWRkbGVOb2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbdGV4dE5vZGVdKTtcbiAgICBtaWRkbGVOb2RlLnNldEF0dHJpYnV0ZShcImZlbmNlXCIsIFwidHJ1ZVwiKTsgLy8gTWF0aE1MIGdpdmVzIDUvMThlbSBzcGFjaW5nIHRvIGVhY2ggPG1vPiBlbGVtZW50LlxuICAgIC8vIFxcbWlkZGxlIHNob3VsZCBnZXQgZGVsaW1pdGVyIHNwYWNpbmcgaW5zdGVhZC5cblxuICAgIG1pZGRsZU5vZGUuc2V0QXR0cmlidXRlKFwibHNwYWNlXCIsIFwiMC4wNWVtXCIpO1xuICAgIG1pZGRsZU5vZGUuc2V0QXR0cmlidXRlKFwicnNwYWNlXCIsIFwiMC4wNWVtXCIpO1xuICAgIHJldHVybiBtaWRkbGVOb2RlO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9lbmNsb3NlLmpzXG5cblxuXG5cblxuXG5cblxuXG52YXIgZW5jbG9zZV9odG1sQnVpbGRlciA9IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gIC8vIFxcY2FuY2VsLCBcXGJjYW5jZWwsIFxceGNhbmNlbCwgXFxzb3V0LCBcXGZib3gsIFxcY29sb3Jib3gsIFxcZmNvbG9yYm94XG4gIC8vIFNvbWUgZ3JvdXBzIGNhbiByZXR1cm4gZG9jdW1lbnQgZnJhZ21lbnRzLiAgSGFuZGxlIHRob3NlIGJ5IHdyYXBwaW5nXG4gIC8vIHRoZW0gaW4gYSBzcGFuLlxuICB2YXIgaW5uZXIgPSBidWlsZENvbW1vbi53cmFwRnJhZ21lbnQoYnVpbGRIVE1MX2J1aWxkR3JvdXAoZ3JvdXAuYm9keSwgb3B0aW9ucyksIG9wdGlvbnMpO1xuICB2YXIgbGFiZWwgPSBncm91cC5sYWJlbC5zdWJzdHIoMSk7XG4gIHZhciBzY2FsZSA9IG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gIHZhciBpbWc7XG4gIHZhciBpbWdTaGlmdCA9IDA7IC8vIEluIHRoZSBMYVRlWCBjYW5jZWwgcGFja2FnZSwgbGluZSBnZW9tZXRyeSBpcyBzbGlnaHRseSBkaWZmZXJlbnRcbiAgLy8gZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIHN1YmplY3QgaXMgd2lkZXIgdGhhbiBpdCBpcyB0YWxsLCBvciB2aWNlIHZlcnNhLlxuICAvLyBXZSBkb24ndCBrbm93IHRoZSB3aWR0aCBvZiBhIGdyb3VwLCBzbyBhcyBhIHByb3h5LCB3ZSB0ZXN0IGlmXG4gIC8vIHRoZSBzdWJqZWN0IGlzIGEgc2luZ2xlIGNoYXJhY3Rlci4gVGhpcyBjYXB0dXJlcyBtb3N0IG9mIHRoZVxuICAvLyBzdWJqZWN0cyB0aGF0IHNob3VsZCBnZXQgdGhlIFwidGFsbFwiIHRyZWF0bWVudC5cblxuICB2YXIgaXNTaW5nbGVDaGFyID0gdXRpbHMuaXNDaGFyYWN0ZXJCb3goZ3JvdXAuYm9keSk7XG5cbiAgaWYgKGxhYmVsID09PSBcInNvdXRcIikge1xuICAgIGltZyA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcInN0cmV0Y2h5XCIsIFwic291dFwiXSk7XG4gICAgaW1nLmhlaWdodCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcyAvIHNjYWxlO1xuICAgIGltZ1NoaWZ0ID0gLTAuNSAqIG9wdGlvbnMuZm9udE1ldHJpY3MoKS54SGVpZ2h0O1xuICB9IGVsc2Uge1xuICAgIC8vIEFkZCBob3Jpem9udGFsIHBhZGRpbmdcbiAgICBpZiAoL2NhbmNlbC8udGVzdChsYWJlbCkpIHtcbiAgICAgIGlmICghaXNTaW5nbGVDaGFyKSB7XG4gICAgICAgIGlubmVyLmNsYXNzZXMucHVzaChcImNhbmNlbC1wYWRcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlubmVyLmNsYXNzZXMucHVzaChcImJveHBhZFwiKTtcbiAgICB9IC8vIEFkZCB2ZXJ0aWNhbCBwYWRkaW5nXG5cblxuICAgIHZhciB2ZXJ0UGFkID0gMDtcbiAgICB2YXIgcnVsZVRoaWNrbmVzcyA9IDA7IC8vIHJlZjogY2FuY2VsIHBhY2thZ2U6IFxcYWR2YW5jZVxcdG90YWxoZWlnaHQyXFxwQCAlIFwiKzJcIlxuXG4gICAgaWYgKC9ib3gvLnRlc3QobGFiZWwpKSB7XG4gICAgICBydWxlVGhpY2tuZXNzID0gTWF0aC5tYXgob3B0aW9ucy5mb250TWV0cmljcygpLmZib3hydWxlLCAvLyBkZWZhdWx0XG4gICAgICBvcHRpb25zLm1pblJ1bGVUaGlja25lc3MgLy8gVXNlciBvdmVycmlkZS5cbiAgICAgICk7XG4gICAgICB2ZXJ0UGFkID0gb3B0aW9ucy5mb250TWV0cmljcygpLmZib3hzZXAgKyAobGFiZWwgPT09IFwiY29sb3Jib3hcIiA/IDAgOiBydWxlVGhpY2tuZXNzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmVydFBhZCA9IGlzU2luZ2xlQ2hhciA/IDAuMiA6IDA7XG4gICAgfVxuXG4gICAgaW1nID0gc3RyZXRjaHkuZW5jbG9zZVNwYW4oaW5uZXIsIGxhYmVsLCB2ZXJ0UGFkLCBvcHRpb25zKTtcblxuICAgIGlmICgvZmJveHxib3hlZHxmY29sb3Jib3gvLnRlc3QobGFiZWwpKSB7XG4gICAgICBpbWcuc3R5bGUuYm9yZGVyU3R5bGUgPSBcInNvbGlkXCI7XG4gICAgICBpbWcuc3R5bGUuYm9yZGVyV2lkdGggPSBydWxlVGhpY2tuZXNzICsgXCJlbVwiO1xuICAgIH1cblxuICAgIGltZ1NoaWZ0ID0gaW5uZXIuZGVwdGggKyB2ZXJ0UGFkO1xuXG4gICAgaWYgKGdyb3VwLmJhY2tncm91bmRDb2xvcikge1xuICAgICAgaW1nLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGdyb3VwLmJhY2tncm91bmRDb2xvcjtcblxuICAgICAgaWYgKGdyb3VwLmJvcmRlckNvbG9yKSB7XG4gICAgICAgIGltZy5zdHlsZS5ib3JkZXJDb2xvciA9IGdyb3VwLmJvcmRlckNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciB2bGlzdDtcblxuICBpZiAoZ3JvdXAuYmFja2dyb3VuZENvbG9yKSB7XG4gICAgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgY2hpbGRyZW46IFsvLyBQdXQgdGhlIGNvbG9yIGJhY2tncm91bmQgYmVoaW5kIGlubmVyO1xuICAgICAge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogaW1nLFxuICAgICAgICBzaGlmdDogaW1nU2hpZnRcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGlubmVyLFxuICAgICAgICBzaGlmdDogMFxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICBjaGlsZHJlbjogWy8vIFdyaXRlIHRoZSBcXGNhbmNlbCBzdHJva2Ugb24gdG9wIG9mIGlubmVyLlxuICAgICAge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogaW5uZXIsXG4gICAgICAgIHNoaWZ0OiAwXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBpbWcsXG4gICAgICAgIHNoaWZ0OiBpbWdTaGlmdCxcbiAgICAgICAgd3JhcHBlckNsYXNzZXM6IC9jYW5jZWwvLnRlc3QobGFiZWwpID8gW1wic3ZnLWFsaWduXCJdIDogW11cbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH1cblxuICBpZiAoL2NhbmNlbC8udGVzdChsYWJlbCkpIHtcbiAgICAvLyBUaGUgY2FuY2VsIHBhY2thZ2UgZG9jdW1lbnRhdGlvbiBzYXlzIHRoYXQgY2FuY2VsIGxpbmVzIGFkZCB0aGVpciBoZWlnaHRcbiAgICAvLyB0byB0aGUgZXhwcmVzc2lvbiwgYnV0IHRlc3RzIHNob3cgdGhhdCBpc24ndCBob3cgaXQgYWN0dWFsbHkgd29ya3MuXG4gICAgdmxpc3QuaGVpZ2h0ID0gaW5uZXIuaGVpZ2h0O1xuICAgIHZsaXN0LmRlcHRoID0gaW5uZXIuZGVwdGg7XG4gIH1cblxuICBpZiAoL2NhbmNlbC8udGVzdChsYWJlbCkgJiYgIWlzU2luZ2xlQ2hhcikge1xuICAgIC8vIGNhbmNlbCBkb2VzIG5vdCBjcmVhdGUgaG9yaXogc3BhY2UgZm9yIGl0cyBsaW5lIGV4dGVuc2lvbi5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcImNhbmNlbC1sYXBcIl0sIFt2bGlzdF0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCJdLCBbdmxpc3RdLCBvcHRpb25zKTtcbiAgfVxufTtcblxudmFyIGVuY2xvc2VfbWF0aG1sQnVpbGRlciA9IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIGZib3hzZXAgPSAwO1xuICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKGdyb3VwLmxhYmVsLmluZGV4T2YoXCJjb2xvcmJveFwiKSA+IC0xID8gXCJtcGFkZGVkXCIgOiBcIm1lbmNsb3NlXCIsIFtidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpXSk7XG5cbiAgc3dpdGNoIChncm91cC5sYWJlbCkge1xuICAgIGNhc2UgXCJcXFxcY2FuY2VsXCI6XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm5vdGF0aW9uXCIsIFwidXBkaWFnb25hbHN0cmlrZVwiKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIlxcXFxiY2FuY2VsXCI6XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm5vdGF0aW9uXCIsIFwiZG93bmRpYWdvbmFsc3RyaWtlXCIpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiXFxcXHNvdXRcIjpcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibm90YXRpb25cIiwgXCJob3Jpem9udGFsc3RyaWtlXCIpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiXFxcXGZib3hcIjpcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibm90YXRpb25cIiwgXCJib3hcIik7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJcXFxcZmNvbG9yYm94XCI6XG4gICAgY2FzZSBcIlxcXFxjb2xvcmJveFwiOlxuICAgICAgLy8gPG1lbmNsb3NlPiBkb2Vzbid0IGhhdmUgYSBnb29kIG5vdGF0aW9uIG9wdGlvbi4gU28gdXNlIDxtcGFkZGVkPlxuICAgICAgLy8gaW5zdGVhZC4gU2V0IHNvbWUgYXR0cmlidXRlcyB0aGF0IGNvbWUgaW5jbHVkZWQgd2l0aCA8bWVuY2xvc2U+LlxuICAgICAgZmJveHNlcCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5mYm94c2VwICogb3B0aW9ucy5mb250TWV0cmljcygpLnB0UGVyRW07XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFwiK1wiICsgMiAqIGZib3hzZXAgKyBcInB0XCIpO1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgXCIrXCIgKyAyICogZmJveHNlcCArIFwicHRcIik7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImxzcGFjZVwiLCBmYm94c2VwICsgXCJwdFwiKTsgLy9cblxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ2b2Zmc2V0XCIsIGZib3hzZXAgKyBcInB0XCIpO1xuXG4gICAgICBpZiAoZ3JvdXAubGFiZWwgPT09IFwiXFxcXGZjb2xvcmJveFwiKSB7XG4gICAgICAgIHZhciB0aGsgPSBNYXRoLm1heChvcHRpb25zLmZvbnRNZXRyaWNzKCkuZmJveHJ1bGUsIC8vIGRlZmF1bHRcbiAgICAgICAgb3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzIC8vIHVzZXIgb3ZlcnJpZGVcbiAgICAgICAgKTtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcImJvcmRlcjogXCIgKyB0aGsgKyBcImVtIHNvbGlkIFwiICsgU3RyaW5nKGdyb3VwLmJvcmRlckNvbG9yKSk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIlxcXFx4Y2FuY2VsXCI6XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm5vdGF0aW9uXCIsIFwidXBkaWFnb25hbHN0cmlrZSBkb3duZGlhZ29uYWxzdHJpa2VcIik7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGlmIChncm91cC5iYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGhiYWNrZ3JvdW5kXCIsIGdyb3VwLmJhY2tncm91bmRDb2xvcik7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJlbmNsb3NlXCIsXG4gIG5hbWVzOiBbXCJcXFxcY29sb3Jib3hcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMixcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGdyZWVkaW5lc3M6IDMsXG4gICAgYXJnVHlwZXM6IFtcImNvbG9yXCIsIFwidGV4dFwiXVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MsIG9wdEFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZi5wYXJzZXIsXG4gICAgICAgIGZ1bmNOYW1lID0gX3JlZi5mdW5jTmFtZTtcbiAgICB2YXIgY29sb3IgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcImNvbG9yLXRva2VuXCIpLmNvbG9yO1xuICAgIHZhciBib2R5ID0gYXJnc1sxXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJlbmNsb3NlXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGxhYmVsOiBmdW5jTmFtZSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogY29sb3IsXG4gICAgICBib2R5OiBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGVuY2xvc2VfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGVuY2xvc2VfbWF0aG1sQnVpbGRlclxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiZW5jbG9zZVwiLFxuICBuYW1lczogW1wiXFxcXGZjb2xvcmJveFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAzLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgZ3JlZWRpbmVzczogMyxcbiAgICBhcmdUeXBlczogW1wiY29sb3JcIiwgXCJjb2xvclwiLCBcInRleHRcIl1cbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmMiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmMi5wYXJzZXIsXG4gICAgICAgIGZ1bmNOYW1lID0gX3JlZjIuZnVuY05hbWU7XG4gICAgdmFyIGJvcmRlckNvbG9yID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXSwgXCJjb2xvci10b2tlblwiKS5jb2xvcjtcbiAgICB2YXIgYmFja2dyb3VuZENvbG9yID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1sxXSwgXCJjb2xvci10b2tlblwiKS5jb2xvcjtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMl07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZW5jbG9zZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IGJhY2tncm91bmRDb2xvcixcbiAgICAgIGJvcmRlckNvbG9yOiBib3JkZXJDb2xvcixcbiAgICAgIGJvZHk6IGJvZHlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZW5jbG9zZV9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogZW5jbG9zZV9tYXRobWxCdWlsZGVyXG59KTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJlbmNsb3NlXCIsXG4gIG5hbWVzOiBbXCJcXFxcZmJveFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJoYm94XCJdLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmMywgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmMy5wYXJzZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZW5jbG9zZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogXCJcXFxcZmJveFwiLFxuICAgICAgYm9keTogYXJnc1swXVxuICAgIH07XG4gIH1cbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImVuY2xvc2VcIixcbiAgbmFtZXM6IFtcIlxcXFxjYW5jZWxcIiwgXCJcXFxcYmNhbmNlbFwiLCBcIlxcXFx4Y2FuY2VsXCIsIFwiXFxcXHNvdXRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWY0LCBhcmdzLCBvcHRBcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWY0LnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmNC5mdW5jTmFtZTtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZW5jbG9zZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBib2R5OiBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGVuY2xvc2VfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGVuY2xvc2VfbWF0aG1sQnVpbGRlclxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9kZWZpbmVFbnZpcm9ubWVudC5qc1xuXG5cbi8qKlxuICogQWxsIHJlZ2lzdGVyZWQgZW52aXJvbm1lbnRzLlxuICogYGVudmlyb25tZW50cy5qc2AgZXhwb3J0cyB0aGlzIHNhbWUgZGljdGlvbmFyeSBhZ2FpbiBhbmQgbWFrZXMgaXQgcHVibGljLlxuICogYFBhcnNlci5qc2AgcmVxdWlyZXMgdGhpcyBkaWN0aW9uYXJ5IHZpYSBgZW52aXJvbm1lbnRzLmpzYC5cbiAqL1xudmFyIF9lbnZpcm9ubWVudHMgPSB7fTtcbmZ1bmN0aW9uIGRlZmluZUVudmlyb25tZW50KF9yZWYpIHtcbiAgdmFyIHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICBuYW1lcyA9IF9yZWYubmFtZXMsXG4gICAgICBwcm9wcyA9IF9yZWYucHJvcHMsXG4gICAgICBoYW5kbGVyID0gX3JlZi5oYW5kbGVyLFxuICAgICAgaHRtbEJ1aWxkZXIgPSBfcmVmLmh0bWxCdWlsZGVyLFxuICAgICAgbWF0aG1sQnVpbGRlciA9IF9yZWYubWF0aG1sQnVpbGRlcjtcbiAgLy8gU2V0IGRlZmF1bHQgdmFsdWVzIG9mIGVudmlyb25tZW50cy5cbiAgdmFyIGRhdGEgPSB7XG4gICAgdHlwZTogdHlwZSxcbiAgICBudW1BcmdzOiBwcm9wcy5udW1BcmdzIHx8IDAsXG4gICAgZ3JlZWRpbmVzczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiBmYWxzZSxcbiAgICBudW1PcHRpb25hbEFyZ3M6IDAsXG4gICAgaGFuZGxlcjogaGFuZGxlclxuICB9O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBUT0RPOiBUaGUgdmFsdWUgdHlwZSBvZiBfZW52aXJvbm1lbnRzIHNob3VsZCBiZSBhIHR5cGUgdW5pb24gb2YgYWxsXG4gICAgLy8gcG9zc2libGUgYEVudlNwZWM8PmAgcG9zc2liaWxpdGllcyBpbnN0ZWFkIG9mIGBFbnZTcGVjPCo+YCwgd2hpY2ggaXNcbiAgICAvLyBhbiBleGlzdGVudGlhbCB0eXBlLlxuICAgIC8vICRGbG93Rml4TWVcbiAgICBfZW52aXJvbm1lbnRzW25hbWVzW2ldXSA9IGRhdGE7XG4gIH1cblxuICBpZiAoaHRtbEJ1aWxkZXIpIHtcbiAgICBfaHRtbEdyb3VwQnVpbGRlcnNbdHlwZV0gPSBodG1sQnVpbGRlcjtcbiAgfVxuXG4gIGlmIChtYXRobWxCdWlsZGVyKSB7XG4gICAgX21hdGhtbEdyb3VwQnVpbGRlcnNbdHlwZV0gPSBtYXRobWxCdWlsZGVyO1xuICB9XG59XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9lbnZpcm9ubWVudHMvYXJyYXkuanNcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuZnVuY3Rpb24gZ2V0SExpbmVzKHBhcnNlcikge1xuICAvLyBSZXR1cm4gYW4gYXJyYXkuIFRoZSBhcnJheSBsZW5ndGggPSBudW1iZXIgb2YgaGxpbmVzLlxuICAvLyBFYWNoIGVsZW1lbnQgaW4gdGhlIGFycmF5IHRlbGxzIGlmIHRoZSBsaW5lIGlzIGRhc2hlZC5cbiAgdmFyIGhsaW5lSW5mbyA9IFtdO1xuICBwYXJzZXIuY29uc3VtZVNwYWNlcygpO1xuICB2YXIgbnh0ID0gcGFyc2VyLm5leHRUb2tlbi50ZXh0O1xuXG4gIHdoaWxlIChueHQgPT09IFwiXFxcXGhsaW5lXCIgfHwgbnh0ID09PSBcIlxcXFxoZGFzaGxpbmVcIikge1xuICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgaGxpbmVJbmZvLnB1c2gobnh0ID09PSBcIlxcXFxoZGFzaGxpbmVcIik7XG4gICAgcGFyc2VyLmNvbnN1bWVTcGFjZXMoKTtcbiAgICBueHQgPSBwYXJzZXIubmV4dFRva2VuLnRleHQ7XG4gIH1cblxuICByZXR1cm4gaGxpbmVJbmZvO1xufVxuLyoqXG4gKiBQYXJzZSB0aGUgYm9keSBvZiB0aGUgZW52aXJvbm1lbnQsIHdpdGggcm93cyBkZWxpbWl0ZWQgYnkgXFxcXCBhbmRcbiAqIGNvbHVtbnMgZGVsaW1pdGVkIGJ5ICYsIGFuZCBjcmVhdGUgYSBuZXN0ZWQgbGlzdCBpbiByb3ctbWFqb3Igb3JkZXJcbiAqIHdpdGggb25lIGdyb3VwIHBlciBjZWxsLiAgSWYgZ2l2ZW4gYW4gb3B0aW9uYWwgYXJndW1lbnQgc3R5bGVcbiAqIChcInRleHRcIiwgXCJkaXNwbGF5XCIsIGV0Yy4pLCB0aGVuIGVhY2ggY2VsbCBpcyBjYXN0IGludG8gdGhhdCBzdHlsZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHBhcnNlQXJyYXkocGFyc2VyLCBfcmVmLCBzdHlsZSkge1xuICB2YXIgaHNraXBCZWZvcmVBbmRBZnRlciA9IF9yZWYuaHNraXBCZWZvcmVBbmRBZnRlcixcbiAgICAgIGFkZEpvdCA9IF9yZWYuYWRkSm90LFxuICAgICAgY29scyA9IF9yZWYuY29scyxcbiAgICAgIGFycmF5c3RyZXRjaCA9IF9yZWYuYXJyYXlzdHJldGNoLFxuICAgICAgY29sU2VwYXJhdGlvblR5cGUgPSBfcmVmLmNvbFNlcGFyYXRpb25UeXBlO1xuICAvLyBQYXJzZSBib2R5IG9mIGFycmF5IHdpdGggXFxcXCB0ZW1wb3JhcmlseSBtYXBwZWQgdG8gXFxjclxuICBwYXJzZXIuZ3VsbGV0LmJlZ2luR3JvdXAoKTtcbiAgcGFyc2VyLmd1bGxldC5tYWNyb3Muc2V0KFwiXFxcXFxcXFxcIiwgXCJcXFxcY3JcIik7IC8vIEdldCBjdXJyZW50IGFycmF5c3RyZXRjaCBpZiBpdCdzIG5vdCBzZXQgYnkgdGhlIGVudmlyb25tZW50XG5cbiAgaWYgKCFhcnJheXN0cmV0Y2gpIHtcbiAgICB2YXIgc3RyZXRjaCA9IHBhcnNlci5ndWxsZXQuZXhwYW5kTWFjcm9Bc1RleHQoXCJcXFxcYXJyYXlzdHJldGNoXCIpO1xuXG4gICAgaWYgKHN0cmV0Y2ggPT0gbnVsbCkge1xuICAgICAgLy8gRGVmYXVsdCBcXGFycmF5c3RyZXRjaCBmcm9tIGx0dGFiLmR0eFxuICAgICAgYXJyYXlzdHJldGNoID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJyYXlzdHJldGNoID0gcGFyc2VGbG9hdChzdHJldGNoKTtcblxuICAgICAgaWYgKCFhcnJheXN0cmV0Y2ggfHwgYXJyYXlzdHJldGNoIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJJbnZhbGlkIFxcXFxhcnJheXN0cmV0Y2g6IFwiICsgc3RyZXRjaCk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIFN0YXJ0IGdyb3VwIGZvciBmaXJzdCBjZWxsXG5cblxuICBwYXJzZXIuZ3VsbGV0LmJlZ2luR3JvdXAoKTtcbiAgdmFyIHJvdyA9IFtdO1xuICB2YXIgYm9keSA9IFtyb3ddO1xuICB2YXIgcm93R2FwcyA9IFtdO1xuICB2YXIgaExpbmVzQmVmb3JlUm93ID0gW107IC8vIFRlc3QgZm9yIFxcaGxpbmUgYXQgdGhlIHRvcCBvZiB0aGUgYXJyYXkuXG5cbiAgaExpbmVzQmVmb3JlUm93LnB1c2goZ2V0SExpbmVzKHBhcnNlcikpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICAvLyBQYXJzZSBlYWNoIGNlbGwgaW4gaXRzIG93biBncm91cCAobmFtZXNwYWNlKVxuICAgIHZhciBjZWxsID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbihmYWxzZSwgXCJcXFxcY3JcIik7XG4gICAgcGFyc2VyLmd1bGxldC5lbmRHcm91cCgpO1xuICAgIHBhcnNlci5ndWxsZXQuYmVnaW5Hcm91cCgpO1xuICAgIGNlbGwgPSB7XG4gICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IGNlbGxcbiAgICB9O1xuXG4gICAgaWYgKHN0eWxlKSB7XG4gICAgICBjZWxsID0ge1xuICAgICAgICB0eXBlOiBcInN0eWxpbmdcIixcbiAgICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgYm9keTogW2NlbGxdXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJvdy5wdXNoKGNlbGwpO1xuICAgIHZhciBuZXh0ID0gcGFyc2VyLm5leHRUb2tlbi50ZXh0O1xuXG4gICAgaWYgKG5leHQgPT09IFwiJlwiKSB7XG4gICAgICBwYXJzZXIuY29uc3VtZSgpO1xuICAgIH0gZWxzZSBpZiAobmV4dCA9PT0gXCJcXFxcZW5kXCIpIHtcbiAgICAgIC8vIEFycmF5cyB0ZXJtaW5hdGUgbmV3bGluZXMgd2l0aCBgXFxjcmNyYCB3aGljaCBjb25zdW1lcyBhIGBcXGNyYCBpZlxuICAgICAgLy8gdGhlIGxhc3QgbGluZSBpcyBlbXB0eS5cbiAgICAgIC8vIE5PVEU6IEN1cnJlbnRseSwgYGNlbGxgIGlzIHRoZSBsYXN0IGl0ZW0gYWRkZWQgaW50byBgcm93YC5cbiAgICAgIGlmIChyb3cubGVuZ3RoID09PSAxICYmIGNlbGwudHlwZSA9PT0gXCJzdHlsaW5nXCIgJiYgY2VsbC5ib2R5WzBdLmJvZHkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGJvZHkucG9wKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChoTGluZXNCZWZvcmVSb3cubGVuZ3RoIDwgYm9keS5sZW5ndGggKyAxKSB7XG4gICAgICAgIGhMaW5lc0JlZm9yZVJvdy5wdXNoKFtdKTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIGlmIChuZXh0ID09PSBcIlxcXFxjclwiKSB7XG4gICAgICB2YXIgY3IgPSBhc3NlcnROb2RlVHlwZShwYXJzZXIucGFyc2VGdW5jdGlvbigpLCBcImNyXCIpO1xuICAgICAgcm93R2Fwcy5wdXNoKGNyLnNpemUpOyAvLyBjaGVjayBmb3IgXFxobGluZShzKSBmb2xsb3dpbmcgdGhlIHJvdyBzZXBhcmF0b3JcblxuICAgICAgaExpbmVzQmVmb3JlUm93LnB1c2goZ2V0SExpbmVzKHBhcnNlcikpO1xuICAgICAgcm93ID0gW107XG4gICAgICBib2R5LnB1c2gocm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiRXhwZWN0ZWQgJiBvciBcXFxcXFxcXCBvciBcXFxcY3Igb3IgXFxcXGVuZFwiLCBwYXJzZXIubmV4dFRva2VuKTtcbiAgICB9XG4gIH0gLy8gRW5kIGNlbGwgZ3JvdXBcblxuXG4gIHBhcnNlci5ndWxsZXQuZW5kR3JvdXAoKTsgLy8gRW5kIGFycmF5IGdyb3VwIGRlZmluaW5nIFxcXFxcblxuICBwYXJzZXIuZ3VsbGV0LmVuZEdyb3VwKCk7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgIGFkZEpvdDogYWRkSm90LFxuICAgIGFycmF5c3RyZXRjaDogYXJyYXlzdHJldGNoLFxuICAgIGJvZHk6IGJvZHksXG4gICAgY29sczogY29scyxcbiAgICByb3dHYXBzOiByb3dHYXBzLFxuICAgIGhza2lwQmVmb3JlQW5kQWZ0ZXI6IGhza2lwQmVmb3JlQW5kQWZ0ZXIsXG4gICAgaExpbmVzQmVmb3JlUm93OiBoTGluZXNCZWZvcmVSb3csXG4gICAgY29sU2VwYXJhdGlvblR5cGU6IGNvbFNlcGFyYXRpb25UeXBlXG4gIH07XG59IC8vIERlY2lkZXMgb24gYSBzdHlsZSBmb3IgY2VsbHMgaW4gYW4gYXJyYXkgYWNjb3JkaW5nIHRvIHdoZXRoZXIgdGhlIGdpdmVuXG4vLyBlbnZpcm9ubWVudCBuYW1lIHN0YXJ0cyB3aXRoIHRoZSBsZXR0ZXIgJ2QnLlxuXG5cbmZ1bmN0aW9uIGRDZWxsU3R5bGUoZW52TmFtZSkge1xuICBpZiAoZW52TmFtZS5zdWJzdHIoMCwgMSkgPT09IFwiZFwiKSB7XG4gICAgcmV0dXJuIFwiZGlzcGxheVwiO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcInRleHRcIjtcbiAgfVxufVxuXG52YXIgYXJyYXlfaHRtbEJ1aWxkZXIgPSBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICB2YXIgcjtcbiAgdmFyIGM7XG4gIHZhciBuciA9IGdyb3VwLmJvZHkubGVuZ3RoO1xuICB2YXIgaExpbmVzQmVmb3JlUm93ID0gZ3JvdXAuaExpbmVzQmVmb3JlUm93O1xuICB2YXIgbmMgPSAwO1xuICB2YXIgYm9keSA9IG5ldyBBcnJheShucik7XG4gIHZhciBobGluZXMgPSBbXTtcbiAgdmFyIHJ1bGVUaGlja25lc3MgPSBNYXRoLm1heCggLy8gRnJvbSBMYVRlWCBcXHNob3d0aGVcXGFycmF5cnVsZXdpZHRoLiBFcXVhbHMgMC4wNCBlbS5cbiAgb3B0aW9ucy5mb250TWV0cmljcygpLmFycmF5UnVsZVdpZHRoLCBvcHRpb25zLm1pblJ1bGVUaGlja25lc3MgLy8gVXNlciBvdmVycmlkZS5cbiAgKTsgLy8gSG9yaXpvbnRhbCBzcGFjaW5nXG5cbiAgdmFyIHB0ID0gMSAvIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5wdFBlckVtO1xuICB2YXIgYXJyYXljb2xzZXAgPSA1ICogcHQ7IC8vIGRlZmF1bHQgdmFsdWUsIGkuZS4gXFxhcnJheWNvbHNlcCBpbiBhcnRpY2xlLmNsc1xuXG4gIGlmIChncm91cC5jb2xTZXBhcmF0aW9uVHlwZSAmJiBncm91cC5jb2xTZXBhcmF0aW9uVHlwZSA9PT0gXCJzbWFsbFwiKSB7XG4gICAgLy8gV2UncmUgaW4gYSB7c21hbGxtYXRyaXh9LiBEZWZhdWx0IGNvbHVtbiBzcGFjZSBpcyBcXHRoaWNrc3BhY2UsXG4gICAgLy8gaS5lLiA1LzE4ZW0gPSAwLjI3NzhlbSwgcGVyIGFtc21hdGguZHR4IGZvciB7c21hbGxtYXRyaXh9LlxuICAgIC8vIEJ1dCB0aGF0IG5lZWRzIGFkanVzdG1lbnQgYmVjYXVzZSBMYVRlWCBhcHBsaWVzIFxcc2NyaXB0c3R5bGUgdG8gdGhlXG4gICAgLy8gZW50aXJlIGFycmF5LCBpbmNsdWRpbmcgdGhlIGNvbHNwYWNlLCBidXQgdGhpcyBmdW5jdGlvbiBhcHBsaWVzXG4gICAgLy8gXFxzY3JpcHRzdHlsZSBvbmx5IGluc2lkZSBlYWNoIGVsZW1lbnQuXG4gICAgdmFyIGxvY2FsTXVsdGlwbGllciA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoc3JjX1N0eWxlLlNDUklQVCkuc2l6ZU11bHRpcGxpZXI7XG4gICAgYXJyYXljb2xzZXAgPSAwLjI3NzggKiAobG9jYWxNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcik7XG4gIH0gLy8gVmVydGljYWwgc3BhY2luZ1xuXG5cbiAgdmFyIGJhc2VsaW5lc2tpcCA9IDEyICogcHQ7IC8vIHNlZSBzaXplMTAuY2xvXG4gIC8vIERlZmF1bHQgXFxqb3QgZnJvbSBsdG1hdGguZHR4XG4gIC8vIFRPRE8oZWRlbWFpbmUpOiBhbGxvdyBvdmVycmlkaW5nIFxcam90IHZpYSBcXHNldGxlbmd0aCAoIzY4NylcblxuICB2YXIgam90ID0gMyAqIHB0O1xuICB2YXIgYXJyYXlza2lwID0gZ3JvdXAuYXJyYXlzdHJldGNoICogYmFzZWxpbmVza2lwO1xuICB2YXIgYXJzdHJ1dEhlaWdodCA9IDAuNyAqIGFycmF5c2tpcDsgLy8gXFxzdHJ1dGJveCBpbiBsdGZzc3RyYy5kdHggYW5kXG5cbiAgdmFyIGFyc3RydXREZXB0aCA9IDAuMyAqIGFycmF5c2tpcDsgLy8gXFxAYXJzdHJ1dGJveCBpbiBsdHRhYi5kdHhcblxuICB2YXIgdG90YWxIZWlnaHQgPSAwOyAvLyBTZXQgYSBwb3NpdGlvbiBmb3IgXFxobGluZShzKSBhdCB0aGUgdG9wIG9mIHRoZSBhcnJheSwgaWYgYW55LlxuXG4gIGZ1bmN0aW9uIHNldEhMaW5lUG9zKGhsaW5lc0luR2FwKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBobGluZXNJbkdhcC5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgIHRvdGFsSGVpZ2h0ICs9IDAuMjU7XG4gICAgICB9XG5cbiAgICAgIGhsaW5lcy5wdXNoKHtcbiAgICAgICAgcG9zOiB0b3RhbEhlaWdodCxcbiAgICAgICAgaXNEYXNoZWQ6IGhsaW5lc0luR2FwW2ldXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzZXRITGluZVBvcyhoTGluZXNCZWZvcmVSb3dbMF0pO1xuXG4gIGZvciAociA9IDA7IHIgPCBncm91cC5ib2R5Lmxlbmd0aDsgKytyKSB7XG4gICAgdmFyIGlucm93ID0gZ3JvdXAuYm9keVtyXTtcbiAgICB2YXIgaGVpZ2h0ID0gYXJzdHJ1dEhlaWdodDsgLy8gXFxAYXJyYXkgYWRkcyBhbiBcXEBhcnN0cnV0XG5cbiAgICB2YXIgZGVwdGggPSBhcnN0cnV0RGVwdGg7IC8vIHRvIGVhY2ggdG93ICh2aWEgdGhlIHRlbXBsYXRlKVxuXG4gICAgaWYgKG5jIDwgaW5yb3cubGVuZ3RoKSB7XG4gICAgICBuYyA9IGlucm93Lmxlbmd0aDtcbiAgICB9XG5cbiAgICB2YXIgb3V0cm93ID0gbmV3IEFycmF5KGlucm93Lmxlbmd0aCk7XG5cbiAgICBmb3IgKGMgPSAwOyBjIDwgaW5yb3cubGVuZ3RoOyArK2MpIHtcbiAgICAgIHZhciBlbHQgPSBidWlsZEhUTUxfYnVpbGRHcm91cChpbnJvd1tjXSwgb3B0aW9ucyk7XG5cbiAgICAgIGlmIChkZXB0aCA8IGVsdC5kZXB0aCkge1xuICAgICAgICBkZXB0aCA9IGVsdC5kZXB0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKGhlaWdodCA8IGVsdC5oZWlnaHQpIHtcbiAgICAgICAgaGVpZ2h0ID0gZWx0LmhlaWdodDtcbiAgICAgIH1cblxuICAgICAgb3V0cm93W2NdID0gZWx0O1xuICAgIH1cblxuICAgIHZhciByb3dHYXAgPSBncm91cC5yb3dHYXBzW3JdO1xuICAgIHZhciBnYXAgPSAwO1xuXG4gICAgaWYgKHJvd0dhcCkge1xuICAgICAgZ2FwID0gdW5pdHNfY2FsY3VsYXRlU2l6ZShyb3dHYXAsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAoZ2FwID4gMCkge1xuICAgICAgICAvLyBcXEBhcmdhcnJheWNyXG4gICAgICAgIGdhcCArPSBhcnN0cnV0RGVwdGg7XG5cbiAgICAgICAgaWYgKGRlcHRoIDwgZ2FwKSB7XG4gICAgICAgICAgZGVwdGggPSBnYXA7IC8vIFxcQHhhcmdhcnJheWNyXG4gICAgICAgIH1cblxuICAgICAgICBnYXAgPSAwO1xuICAgICAgfVxuICAgIH0gLy8gSW4gQU1TIG11bHRpbGluZSBlbnZpcm9ubWVudHMgc3VjaCBhcyBhbGlnbmVkIGFuZCBnYXRoZXJlZCwgcm93c1xuICAgIC8vIGNvcnJlc3BvbmQgdG8gbGluZXMgdGhhdCBoYXZlIGFkZGl0aW9uYWwgXFxqb3QgYWRkZWQgdG8gdGhlXG4gICAgLy8gXFxiYXNlbGluZXNraXAgdmlhIFxcb3BlbnVwLlxuXG5cbiAgICBpZiAoZ3JvdXAuYWRkSm90KSB7XG4gICAgICBkZXB0aCArPSBqb3Q7XG4gICAgfVxuXG4gICAgb3V0cm93LmhlaWdodCA9IGhlaWdodDtcbiAgICBvdXRyb3cuZGVwdGggPSBkZXB0aDtcbiAgICB0b3RhbEhlaWdodCArPSBoZWlnaHQ7XG4gICAgb3V0cm93LnBvcyA9IHRvdGFsSGVpZ2h0O1xuICAgIHRvdGFsSGVpZ2h0ICs9IGRlcHRoICsgZ2FwOyAvLyBcXEB5YXJnYXJyYXljclxuXG4gICAgYm9keVtyXSA9IG91dHJvdzsgLy8gU2V0IGEgcG9zaXRpb24gZm9yIFxcaGxpbmUocyksIGlmIGFueS5cblxuICAgIHNldEhMaW5lUG9zKGhMaW5lc0JlZm9yZVJvd1tyICsgMV0pO1xuICB9XG5cbiAgdmFyIG9mZnNldCA9IHRvdGFsSGVpZ2h0IC8gMiArIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O1xuICB2YXIgY29sRGVzY3JpcHRpb25zID0gZ3JvdXAuY29scyB8fCBbXTtcbiAgdmFyIGNvbHMgPSBbXTtcbiAgdmFyIGNvbFNlcDtcbiAgdmFyIGNvbERlc2NyTnVtO1xuXG4gIGZvciAoYyA9IDAsIGNvbERlc2NyTnVtID0gMDsgLy8gQ29udGludWUgd2hpbGUgZWl0aGVyIHRoZXJlIGFyZSBtb3JlIGNvbHVtbnMgb3IgbW9yZSBjb2x1bW5cbiAgLy8gZGVzY3JpcHRpb25zLCBzbyB0cmFpbGluZyBzZXBhcmF0b3JzIGRvbid0IGdldCBsb3N0LlxuICBjIDwgbmMgfHwgY29sRGVzY3JOdW0gPCBjb2xEZXNjcmlwdGlvbnMubGVuZ3RoOyArK2MsICsrY29sRGVzY3JOdW0pIHtcbiAgICB2YXIgY29sRGVzY3IgPSBjb2xEZXNjcmlwdGlvbnNbY29sRGVzY3JOdW1dIHx8IHt9O1xuICAgIHZhciBmaXJzdFNlcGFyYXRvciA9IHRydWU7XG5cbiAgICB3aGlsZSAoY29sRGVzY3IudHlwZSA9PT0gXCJzZXBhcmF0b3JcIikge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBzZXBhcmF0b3IgaW4gYSByb3csIGFkZCBhIHNwYWNlXG4gICAgICAvLyBiZXR3ZWVuIHRoZW0uXG4gICAgICBpZiAoIWZpcnN0U2VwYXJhdG9yKSB7XG4gICAgICAgIGNvbFNlcCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImFycmF5Y29sc2VwXCJdLCBbXSk7XG4gICAgICAgIGNvbFNlcC5zdHlsZS53aWR0aCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5kb3VibGVSdWxlU2VwICsgXCJlbVwiO1xuICAgICAgICBjb2xzLnB1c2goY29sU2VwKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbERlc2NyLnNlcGFyYXRvciA9PT0gXCJ8XCIgfHwgY29sRGVzY3Iuc2VwYXJhdG9yID09PSBcIjpcIikge1xuICAgICAgICB2YXIgbGluZVR5cGUgPSBjb2xEZXNjci5zZXBhcmF0b3IgPT09IFwifFwiID8gXCJzb2xpZFwiIDogXCJkYXNoZWRcIjtcbiAgICAgICAgdmFyIHNlcGFyYXRvciA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcInZlcnRpY2FsLXNlcGFyYXRvclwiXSwgW10sIG9wdGlvbnMpO1xuICAgICAgICBzZXBhcmF0b3Iuc3R5bGUuaGVpZ2h0ID0gdG90YWxIZWlnaHQgKyBcImVtXCI7XG4gICAgICAgIHNlcGFyYXRvci5zdHlsZS5ib3JkZXJSaWdodFdpZHRoID0gcnVsZVRoaWNrbmVzcyArIFwiZW1cIjtcbiAgICAgICAgc2VwYXJhdG9yLnN0eWxlLmJvcmRlclJpZ2h0U3R5bGUgPSBsaW5lVHlwZTtcbiAgICAgICAgc2VwYXJhdG9yLnN0eWxlLm1hcmdpbiA9IFwiMCAtXCIgKyBydWxlVGhpY2tuZXNzIC8gMiArIFwiZW1cIjtcbiAgICAgICAgc2VwYXJhdG9yLnN0eWxlLnZlcnRpY2FsQWxpZ24gPSAtKHRvdGFsSGVpZ2h0IC0gb2Zmc2V0KSArIFwiZW1cIjtcbiAgICAgICAgY29scy5wdXNoKHNlcGFyYXRvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJJbnZhbGlkIHNlcGFyYXRvciB0eXBlOiBcIiArIGNvbERlc2NyLnNlcGFyYXRvcik7XG4gICAgICB9XG5cbiAgICAgIGNvbERlc2NyTnVtKys7XG4gICAgICBjb2xEZXNjciA9IGNvbERlc2NyaXB0aW9uc1tjb2xEZXNjck51bV0gfHwge307XG4gICAgICBmaXJzdFNlcGFyYXRvciA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChjID49IG5jKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgc2Vwd2lkdGggPSB2b2lkIDA7XG5cbiAgICBpZiAoYyA+IDAgfHwgZ3JvdXAuaHNraXBCZWZvcmVBbmRBZnRlcikge1xuICAgICAgc2Vwd2lkdGggPSB1dGlscy5kZWZsdChjb2xEZXNjci5wcmVnYXAsIGFycmF5Y29sc2VwKTtcblxuICAgICAgaWYgKHNlcHdpZHRoICE9PSAwKSB7XG4gICAgICAgIGNvbFNlcCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImFycmF5Y29sc2VwXCJdLCBbXSk7XG4gICAgICAgIGNvbFNlcC5zdHlsZS53aWR0aCA9IHNlcHdpZHRoICsgXCJlbVwiO1xuICAgICAgICBjb2xzLnB1c2goY29sU2VwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY29sID0gW107XG5cbiAgICBmb3IgKHIgPSAwOyByIDwgbnI7ICsrcikge1xuICAgICAgdmFyIHJvdyA9IGJvZHlbcl07XG4gICAgICB2YXIgZWxlbSA9IHJvd1tjXTtcblxuICAgICAgaWYgKCFlbGVtKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2hpZnQgPSByb3cucG9zIC0gb2Zmc2V0O1xuICAgICAgZWxlbS5kZXB0aCA9IHJvdy5kZXB0aDtcbiAgICAgIGVsZW0uaGVpZ2h0ID0gcm93LmhlaWdodDtcbiAgICAgIGNvbC5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGVsZW0sXG4gICAgICAgIHNoaWZ0OiBzaGlmdFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29sID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJpbmRpdmlkdWFsU2hpZnRcIixcbiAgICAgIGNoaWxkcmVuOiBjb2xcbiAgICB9LCBvcHRpb25zKTtcbiAgICBjb2wgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJjb2wtYWxpZ24tXCIgKyAoY29sRGVzY3IuYWxpZ24gfHwgXCJjXCIpXSwgW2NvbF0pO1xuICAgIGNvbHMucHVzaChjb2wpO1xuXG4gICAgaWYgKGMgPCBuYyAtIDEgfHwgZ3JvdXAuaHNraXBCZWZvcmVBbmRBZnRlcikge1xuICAgICAgc2Vwd2lkdGggPSB1dGlscy5kZWZsdChjb2xEZXNjci5wb3N0Z2FwLCBhcnJheWNvbHNlcCk7XG5cbiAgICAgIGlmIChzZXB3aWR0aCAhPT0gMCkge1xuICAgICAgICBjb2xTZXAgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJhcnJheWNvbHNlcFwiXSwgW10pO1xuICAgICAgICBjb2xTZXAuc3R5bGUud2lkdGggPSBzZXB3aWR0aCArIFwiZW1cIjtcbiAgICAgICAgY29scy5wdXNoKGNvbFNlcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm10YWJsZVwiXSwgY29scyk7IC8vIEFkZCBcXGhsaW5lKHMpLCBpZiBhbnkuXG5cbiAgaWYgKGhsaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGxpbmUgPSBidWlsZENvbW1vbi5tYWtlTGluZVNwYW4oXCJobGluZVwiLCBvcHRpb25zLCBydWxlVGhpY2tuZXNzKTtcbiAgICB2YXIgZGFzaGVzID0gYnVpbGRDb21tb24ubWFrZUxpbmVTcGFuKFwiaGRhc2hsaW5lXCIsIG9wdGlvbnMsIHJ1bGVUaGlja25lc3MpO1xuICAgIHZhciB2TGlzdEVsZW1zID0gW3tcbiAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgZWxlbTogYm9keSxcbiAgICAgIHNoaWZ0OiAwXG4gICAgfV07XG5cbiAgICB3aGlsZSAoaGxpbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBobGluZSA9IGhsaW5lcy5wb3AoKTtcbiAgICAgIHZhciBsaW5lU2hpZnQgPSBobGluZS5wb3MgLSBvZmZzZXQ7XG5cbiAgICAgIGlmIChobGluZS5pc0Rhc2hlZCkge1xuICAgICAgICB2TGlzdEVsZW1zLnB1c2goe1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IGRhc2hlcyxcbiAgICAgICAgICBzaGlmdDogbGluZVNoaWZ0XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdkxpc3RFbGVtcy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBsaW5lLFxuICAgICAgICAgIHNoaWZ0OiBsaW5lU2hpZnRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICBjaGlsZHJlbjogdkxpc3RFbGVtc1xuICAgIH0sIG9wdGlvbnMpO1xuICB9XG5cbiAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIl0sIFtib2R5XSwgb3B0aW9ucyk7XG59O1xuXG52YXIgYWxpZ25NYXAgPSB7XG4gIGM6IFwiY2VudGVyIFwiLFxuICBsOiBcImxlZnQgXCIsXG4gIHI6IFwicmlnaHQgXCJcbn07XG5cbnZhciBhcnJheV9tYXRobWxCdWlsZGVyID0gZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICB2YXIgdGFibGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10YWJsZVwiLCBncm91cC5ib2R5Lm1hcChmdW5jdGlvbiAocm93KSB7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRyXCIsIHJvdy5tYXAoZnVuY3Rpb24gKGNlbGwpIHtcbiAgICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZFwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChjZWxsLCBvcHRpb25zKV0pO1xuICAgIH0pKTtcbiAgfSkpOyAvLyBTZXQgY29sdW1uIGFsaWdubWVudCwgcm93IHNwYWNpbmcsIGNvbHVtbiBzcGFjaW5nLCBhbmRcbiAgLy8gYXJyYXkgbGluZXMgYnkgc2V0dGluZyBhdHRyaWJ1dGVzIG9uIHRoZSB0YWJsZSBlbGVtZW50LlxuICAvLyBTZXQgdGhlIHJvdyBzcGFjaW5nLiBJbiBNYXRoTUwsIHdlIHNwZWNpZnkgYSBnYXAgZGlzdGFuY2UuXG4gIC8vIFdlIGRvIG5vdCB1c2Ugcm93R2FwW10gYmVjYXVzZSBNYXRoTUwgYXV0b21hdGljYWxseSBpbmNyZWFzZXNcbiAgLy8gY2VsbCBoZWlnaHQgd2l0aCB0aGUgaGVpZ2h0L2RlcHRoIG9mIHRoZSBlbGVtZW50IGNvbnRlbnQuXG4gIC8vIExhVGVYIFxcYXJyYXlzdHJldGNoIG11bHRpcGxpZXMgdGhlIHJvdyBiYXNlbGluZS10by1iYXNlbGluZSBkaXN0YW5jZS5cbiAgLy8gV2Ugc2ltdWxhdGUgdGhpcyBieSBhZGRpbmcgKGFycmF5c3RyZXRjaCAtIDEpZW0gdG8gdGhlIGdhcC4gVGhpc1xuICAvLyBkb2VzIGEgcmVhc29uYWJsZSBqb2Igb2YgYWRqdXN0aW5nIGFycmF5cyBjb250YWluaW5nIDEgZW0gdGFsbCBjb250ZW50LlxuICAvLyBUaGUgMC4xNiBhbmQgMC4wOSB2YWx1ZXMgYXJlIGZvdW5kIGVtcHJpY2FsbHkuIFRoZXkgcHJvZHVjZSBhbiBhcnJheVxuICAvLyBzaW1pbGFyIHRvIExhVGVYIGFuZCBpbiB3aGljaCBjb250ZW50IGRvZXMgbm90IGludGVyZmVyZSB3aXRoIFxcaGluZXMuXG5cbiAgdmFyIGdhcCA9IGdyb3VwLmFycmF5c3RyZXRjaCA9PT0gMC41ID8gMC4xIC8vIHtzbWFsbG1hdHJpeH0sIHtzdWJhcnJheX1cbiAgOiAwLjE2ICsgZ3JvdXAuYXJyYXlzdHJldGNoIC0gMSArIChncm91cC5hZGRKb3QgPyAwLjA5IDogMCk7XG4gIHRhYmxlLnNldEF0dHJpYnV0ZShcInJvd3NwYWNpbmdcIiwgZ2FwICsgXCJlbVwiKTsgLy8gTWF0aE1MIHRhYmxlIGxpbmVzIGdvIG9ubHkgYmV0d2VlbiBjZWxscy5cbiAgLy8gVG8gcGxhY2UgYSBsaW5lIG9uIGFuIGVkZ2Ugd2UnbGwgdXNlIDxtZW5jbG9zZT4sIGlmIG5lY2Vzc2FyeS5cblxuICB2YXIgbWVuY2xvc2UgPSBcIlwiO1xuICB2YXIgYWxpZ24gPSBcIlwiO1xuXG4gIGlmIChncm91cC5jb2xzKSB7XG4gICAgLy8gRmluZCBjb2x1bW4gYWxpZ25tZW50LCBjb2x1bW4gc3BhY2luZywgYW5kICB2ZXJ0aWNhbCBsaW5lcy5cbiAgICB2YXIgY29scyA9IGdyb3VwLmNvbHM7XG4gICAgdmFyIGNvbHVtbkxpbmVzID0gXCJcIjtcbiAgICB2YXIgcHJldlR5cGVXYXNBbGlnbiA9IGZhbHNlO1xuICAgIHZhciBpU3RhcnQgPSAwO1xuICAgIHZhciBpRW5kID0gY29scy5sZW5ndGg7XG5cbiAgICBpZiAoY29sc1swXS50eXBlID09PSBcInNlcGFyYXRvclwiKSB7XG4gICAgICBtZW5jbG9zZSArPSBcInRvcCBcIjtcbiAgICAgIGlTdGFydCA9IDE7XG4gICAgfVxuXG4gICAgaWYgKGNvbHNbY29scy5sZW5ndGggLSAxXS50eXBlID09PSBcInNlcGFyYXRvclwiKSB7XG4gICAgICBtZW5jbG9zZSArPSBcImJvdHRvbSBcIjtcbiAgICAgIGlFbmQgLT0gMTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gaVN0YXJ0OyBpIDwgaUVuZDsgaSsrKSB7XG4gICAgICBpZiAoY29sc1tpXS50eXBlID09PSBcImFsaWduXCIpIHtcbiAgICAgICAgYWxpZ24gKz0gYWxpZ25NYXBbY29sc1tpXS5hbGlnbl07XG5cbiAgICAgICAgaWYgKHByZXZUeXBlV2FzQWxpZ24pIHtcbiAgICAgICAgICBjb2x1bW5MaW5lcyArPSBcIm5vbmUgXCI7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2VHlwZVdhc0FsaWduID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoY29sc1tpXS50eXBlID09PSBcInNlcGFyYXRvclwiKSB7XG4gICAgICAgIC8vIE1hdGhNTCBhY2NlcHRzIG9ubHkgc2luZ2xlIGxpbmVzIGJldHdlZW4gY2VsbHMuXG4gICAgICAgIC8vIFNvIHdlIHJlYWQgb25seSB0aGUgZmlyc3Qgb2YgY29uc2VjdXRpdmUgc2VwYXJhdG9ycy5cbiAgICAgICAgaWYgKHByZXZUeXBlV2FzQWxpZ24pIHtcbiAgICAgICAgICBjb2x1bW5MaW5lcyArPSBjb2xzW2ldLnNlcGFyYXRvciA9PT0gXCJ8XCIgPyBcInNvbGlkIFwiIDogXCJkYXNoZWQgXCI7XG4gICAgICAgICAgcHJldlR5cGVXYXNBbGlnbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGFibGUuc2V0QXR0cmlidXRlKFwiY29sdW1uYWxpZ25cIiwgYWxpZ24udHJpbSgpKTtcblxuICAgIGlmICgvW3NkXS8udGVzdChjb2x1bW5MaW5lcykpIHtcbiAgICAgIHRhYmxlLnNldEF0dHJpYnV0ZShcImNvbHVtbmxpbmVzXCIsIGNvbHVtbkxpbmVzLnRyaW0oKSk7XG4gICAgfVxuICB9IC8vIFNldCBjb2x1bW4gc3BhY2luZy5cblxuXG4gIGlmIChncm91cC5jb2xTZXBhcmF0aW9uVHlwZSA9PT0gXCJhbGlnblwiKSB7XG4gICAgdmFyIF9jb2xzID0gZ3JvdXAuY29scyB8fCBbXTtcblxuICAgIHZhciBzcGFjaW5nID0gXCJcIjtcblxuICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBfY29scy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHNwYWNpbmcgKz0gX2kgJSAyID8gXCIwZW0gXCIgOiBcIjFlbSBcIjtcbiAgICB9XG5cbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIHNwYWNpbmcudHJpbSgpKTtcbiAgfSBlbHNlIGlmIChncm91cC5jb2xTZXBhcmF0aW9uVHlwZSA9PT0gXCJhbGlnbmF0XCIpIHtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIFwiMGVtXCIpO1xuICB9IGVsc2UgaWYgKGdyb3VwLmNvbFNlcGFyYXRpb25UeXBlID09PSBcInNtYWxsXCIpIHtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIFwiMC4yNzc4ZW1cIik7XG4gIH0gZWxzZSB7XG4gICAgdGFibGUuc2V0QXR0cmlidXRlKFwiY29sdW1uc3BhY2luZ1wiLCBcIjFlbVwiKTtcbiAgfSAvLyBBZGRyZXNzIFxcaGxpbmUgYW5kIFxcaGRhc2hsaW5lXG5cblxuICB2YXIgcm93TGluZXMgPSBcIlwiO1xuICB2YXIgaGxpbmVzID0gZ3JvdXAuaExpbmVzQmVmb3JlUm93O1xuICBtZW5jbG9zZSArPSBobGluZXNbMF0ubGVuZ3RoID4gMCA/IFwibGVmdCBcIiA6IFwiXCI7XG4gIG1lbmNsb3NlICs9IGhsaW5lc1tobGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoID4gMCA/IFwicmlnaHQgXCIgOiBcIlwiO1xuXG4gIGZvciAodmFyIF9pMiA9IDE7IF9pMiA8IGhsaW5lcy5sZW5ndGggLSAxOyBfaTIrKykge1xuICAgIHJvd0xpbmVzICs9IGhsaW5lc1tfaTJdLmxlbmd0aCA9PT0gMCA/IFwibm9uZSBcIiAvLyBNYXRoTUwgYWNjZXB0cyBvbmx5IGEgc2luZ2xlIGxpbmUgYmV0d2VlbiByb3dzLiBSZWFkIG9uZSBlbGVtZW50LlxuICAgIDogaGxpbmVzW19pMl1bMF0gPyBcImRhc2hlZCBcIiA6IFwic29saWQgXCI7XG4gIH1cblxuICBpZiAoL1tzZF0vLnRlc3Qocm93TGluZXMpKSB7XG4gICAgdGFibGUuc2V0QXR0cmlidXRlKFwicm93bGluZXNcIiwgcm93TGluZXMudHJpbSgpKTtcbiAgfVxuXG4gIGlmIChtZW5jbG9zZSAhPT0gXCJcIikge1xuICAgIHRhYmxlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtZW5jbG9zZVwiLCBbdGFibGVdKTtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJub3RhdGlvblwiLCBtZW5jbG9zZS50cmltKCkpO1xuICB9XG5cbiAgaWYgKGdyb3VwLmFycmF5c3RyZXRjaCAmJiBncm91cC5hcnJheXN0cmV0Y2ggPCAxKSB7XG4gICAgLy8gQSBzbWFsbCBhcnJheS4gV3JhcCBpbiBzY3JpcHRzdHlsZSBzbyByb3cgZ2FwIGlzIG5vdCB0b28gbGFyZ2UuXG4gICAgdGFibGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1zdHlsZVwiLCBbdGFibGVdKTtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJzY3JpcHRsZXZlbFwiLCBcIjFcIik7XG4gIH1cblxuICByZXR1cm4gdGFibGU7XG59OyAvLyBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgYWxpZ25lZCBhbmQgYWxpZ25lZGF0IGVudmlyb25tZW50cy5cblxuXG52YXIgYXJyYXlfYWxpZ25lZEhhbmRsZXIgPSBmdW5jdGlvbiBhbGlnbmVkSGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gIHZhciBjb2xzID0gW107XG4gIHZhciByZXMgPSBwYXJzZUFycmF5KGNvbnRleHQucGFyc2VyLCB7XG4gICAgY29sczogY29scyxcbiAgICBhZGRKb3Q6IHRydWVcbiAgfSwgXCJkaXNwbGF5XCIpOyAvLyBEZXRlcm1pbmluZyBudW1iZXIgb2YgY29sdW1ucy5cbiAgLy8gMS4gSWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGdpdmVuLCB3ZSB1c2UgaXQgYXMgYSBudW1iZXIgb2YgY29sdW1ucyxcbiAgLy8gICAgYW5kIG1ha2VzIHN1cmUgdGhhdCBlYWNoIHJvdyBkb2Vzbid0IGV4Y2VlZCB0aGF0IG51bWJlci5cbiAgLy8gMi4gT3RoZXJ3aXNlLCBqdXN0IGNvdW50IG51bWJlciBvZiBjb2x1bW5zID0gbWF4aW11bSBudW1iZXJcbiAgLy8gICAgb2YgY2VsbHMgaW4gZWFjaCByb3cgKFwiYWxpZ25lZFwiIG1vZGUgLS0gaXNBbGlnbmVkIHdpbGwgYmUgdHJ1ZSkuXG4gIC8vXG4gIC8vIEF0IHRoZSBzYW1lIHRpbWUsIHByZXBlbmQgZW1wdHkgZ3JvdXAge30gYXQgYmVnaW5uaW5nIG9mIGV2ZXJ5IHNlY29uZFxuICAvLyBjZWxsIGluIGVhY2ggcm93IChzdGFydGluZyB3aXRoIHNlY29uZCBjZWxsKSBzbyB0aGF0IG9wZXJhdG9ycyBiZWNvbWVcbiAgLy8gYmluYXJ5LiAgVGhpcyBiZWhhdmlvciBpcyBpbXBsZW1lbnRlZCBpbiBhbXNtYXRoJ3MgXFxzdGFydEBhbGlnbmVkLlxuXG4gIHZhciBudW1NYXRocztcbiAgdmFyIG51bUNvbHMgPSAwO1xuICB2YXIgZW1wdHlHcm91cCA9IHtcbiAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgbW9kZTogY29udGV4dC5tb2RlLFxuICAgIGJvZHk6IFtdXG4gIH07XG4gIHZhciBvcmRncm91cCA9IGNoZWNrTm9kZVR5cGUoYXJnc1swXSwgXCJvcmRncm91cFwiKTtcblxuICBpZiAob3JkZ3JvdXApIHtcbiAgICB2YXIgYXJnMCA9IFwiXCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZGdyb3VwLmJvZHkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB0ZXh0b3JkID0gYXNzZXJ0Tm9kZVR5cGUob3JkZ3JvdXAuYm9keVtpXSwgXCJ0ZXh0b3JkXCIpO1xuICAgICAgYXJnMCArPSB0ZXh0b3JkLnRleHQ7XG4gICAgfVxuXG4gICAgbnVtTWF0aHMgPSBOdW1iZXIoYXJnMCk7XG4gICAgbnVtQ29scyA9IG51bU1hdGhzICogMjtcbiAgfVxuXG4gIHZhciBpc0FsaWduZWQgPSAhbnVtQ29scztcbiAgcmVzLmJvZHkuZm9yRWFjaChmdW5jdGlvbiAocm93KSB7XG4gICAgZm9yICh2YXIgX2kzID0gMTsgX2kzIDwgcm93Lmxlbmd0aDsgX2kzICs9IDIpIHtcbiAgICAgIC8vIE1vZGlmeSBvcmRncm91cCBub2RlIHdpdGhpbiBzdHlsaW5nIG5vZGVcbiAgICAgIHZhciBzdHlsaW5nID0gYXNzZXJ0Tm9kZVR5cGUocm93W19pM10sIFwic3R5bGluZ1wiKTtcblxuICAgICAgdmFyIF9vcmRncm91cCA9IGFzc2VydE5vZGVUeXBlKHN0eWxpbmcuYm9keVswXSwgXCJvcmRncm91cFwiKTtcblxuICAgICAgX29yZGdyb3VwLmJvZHkudW5zaGlmdChlbXB0eUdyb3VwKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzQWxpZ25lZCkge1xuICAgICAgLy8gQ2FzZSAxXG4gICAgICB2YXIgY3VyTWF0aHMgPSByb3cubGVuZ3RoIC8gMjtcblxuICAgICAgaWYgKG51bU1hdGhzIDwgY3VyTWF0aHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiVG9vIG1hbnkgbWF0aCBpbiBhIHJvdzogXCIgKyAoXCJleHBlY3RlZCBcIiArIG51bU1hdGhzICsgXCIsIGJ1dCBnb3QgXCIgKyBjdXJNYXRocyksIHJvd1swXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChudW1Db2xzIDwgcm93Lmxlbmd0aCkge1xuICAgICAgLy8gQ2FzZSAyXG4gICAgICBudW1Db2xzID0gcm93Lmxlbmd0aDtcbiAgICB9XG4gIH0pOyAvLyBBZGp1c3RpbmcgYWxpZ25tZW50LlxuICAvLyBJbiBhbGlnbmVkIG1vZGUsIHdlIGFkZCBvbmUgXFxxcXVhZCBiZXR3ZWVuIGNvbHVtbnM7XG4gIC8vIG90aGVyd2lzZSB3ZSBhZGQgbm90aGluZy5cblxuICBmb3IgKHZhciBfaTQgPSAwOyBfaTQgPCBudW1Db2xzOyArK19pNCkge1xuICAgIHZhciBhbGlnbiA9IFwiclwiO1xuICAgIHZhciBwcmVnYXAgPSAwO1xuXG4gICAgaWYgKF9pNCAlIDIgPT09IDEpIHtcbiAgICAgIGFsaWduID0gXCJsXCI7XG4gICAgfSBlbHNlIGlmIChfaTQgPiAwICYmIGlzQWxpZ25lZCkge1xuICAgICAgLy8gXCJhbGlnbmVkXCIgbW9kZS5cbiAgICAgIHByZWdhcCA9IDE7IC8vIGFkZCBvbmUgXFxxdWFkXG4gICAgfVxuXG4gICAgY29sc1tfaTRdID0ge1xuICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgYWxpZ246IGFsaWduLFxuICAgICAgcHJlZ2FwOiBwcmVnYXAsXG4gICAgICBwb3N0Z2FwOiAwXG4gICAgfTtcbiAgfVxuXG4gIHJlcy5jb2xTZXBhcmF0aW9uVHlwZSA9IGlzQWxpZ25lZCA/IFwiYWxpZ25cIiA6IFwiYWxpZ25hdFwiO1xuICByZXR1cm4gcmVzO1xufTsgLy8gQXJyYXlzIGFyZSBwYXJ0IG9mIExhVGVYLCBkZWZpbmVkIGluIGx0dGFiLmR0eCBzbyBpdHMgZG9jdW1lbnRhdGlvblxuLy8gaXMgcGFydCBvZiB0aGUgc291cmNlMmUucGRmIGZpbGUgb2YgTGFUZVgyZSBzb3VyY2UgZG9jdW1lbnRhdGlvbi5cbi8vIHtkYXJyYXl9IGlzIGFuIHthcnJheX0gZW52aXJvbm1lbnQgd2hlcmUgY2VsbHMgYXJlIHNldCBpbiBcXGRpc3BsYXlzdHlsZSxcbi8vIGFzIGRlZmluZWQgaW4gbmNjbWF0aC5zdHkuXG5cblxuZGVmaW5lRW52aXJvbm1lbnQoe1xuICB0eXBlOiBcImFycmF5XCIsXG4gIG5hbWVzOiBbXCJhcnJheVwiLCBcImRhcnJheVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoY29udGV4dCwgYXJncykge1xuICAgIC8vIFNpbmNlIG5vIHR5cGVzIGFyZSBzcGVjaWZpZWQgYWJvdmUsIHRoZSB0d28gcG9zc2liaWxpdGllcyBhcmVcbiAgICAvLyAtIFRoZSBhcmd1bWVudCBpcyB3cmFwcGVkIGluIHt9IG9yIFtdLCBpbiB3aGljaCBjYXNlIFBhcnNlcidzXG4gICAgLy8gICBwYXJzZUdyb3VwKCkgcmV0dXJucyBhbiBcIm9yZGdyb3VwXCIgd3JhcHBpbmcgc29tZSBzeW1ib2wgbm9kZS5cbiAgICAvLyAtIFRoZSBhcmd1bWVudCBpcyBhIGJhcmUgc3ltYm9sIG5vZGUuXG4gICAgdmFyIHN5bU5vZGUgPSBjaGVja1N5bWJvbE5vZGVUeXBlKGFyZ3NbMF0pO1xuICAgIHZhciBjb2xhbGlnbiA9IHN5bU5vZGUgPyBbYXJnc1swXV0gOiBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcIm9yZGdyb3VwXCIpLmJvZHk7XG4gICAgdmFyIGNvbHMgPSBjb2xhbGlnbi5tYXAoZnVuY3Rpb24gKG5kZSkge1xuICAgICAgdmFyIG5vZGUgPSBhc3NlcnRTeW1ib2xOb2RlVHlwZShuZGUpO1xuICAgICAgdmFyIGNhID0gbm9kZS50ZXh0O1xuXG4gICAgICBpZiAoXCJsY3JcIi5pbmRleE9mKGNhKSAhPT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiBcImFsaWduXCIsXG4gICAgICAgICAgYWxpZ246IGNhXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGNhID09PSBcInxcIikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IFwic2VwYXJhdG9yXCIsXG4gICAgICAgICAgc2VwYXJhdG9yOiBcInxcIlxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChjYSA9PT0gXCI6XCIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiBcInNlcGFyYXRvclwiLFxuICAgICAgICAgIHNlcGFyYXRvcjogXCI6XCJcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiVW5rbm93biBjb2x1bW4gYWxpZ25tZW50OiBcIiArIGNhLCBuZGUpO1xuICAgIH0pO1xuICAgIHZhciByZXMgPSB7XG4gICAgICBjb2xzOiBjb2xzLFxuICAgICAgaHNraXBCZWZvcmVBbmRBZnRlcjogdHJ1ZSAvLyBcXEBwcmVhbWJsZSBpbiBsdHRhYi5kdHhcblxuICAgIH07XG4gICAgcmV0dXJuIHBhcnNlQXJyYXkoY29udGV4dC5wYXJzZXIsIHJlcywgZENlbGxTdHlsZShjb250ZXh0LmVudk5hbWUpKTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGFycmF5X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhcnJheV9tYXRobWxCdWlsZGVyXG59KTsgLy8gVGhlIG1hdHJpeCBlbnZpcm9ubWVudHMgb2YgYW1zbWF0aCBidWlsZHMgb24gdGhlIGFycmF5IGVudmlyb25tZW50XG4vLyBvZiBMYVRlWCwgd2hpY2ggaXMgZGlzY3Vzc2VkIGFib3ZlLlxuXG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcIm1hdHJpeFwiLCBcInBtYXRyaXhcIiwgXCJibWF0cml4XCIsIFwiQm1hdHJpeFwiLCBcInZtYXRyaXhcIiwgXCJWbWF0cml4XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDBcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihjb250ZXh0KSB7XG4gICAgdmFyIGRlbGltaXRlcnMgPSB7XG4gICAgICBcIm1hdHJpeFwiOiBudWxsLFxuICAgICAgXCJwbWF0cml4XCI6IFtcIihcIiwgXCIpXCJdLFxuICAgICAgXCJibWF0cml4XCI6IFtcIltcIiwgXCJdXCJdLFxuICAgICAgXCJCbWF0cml4XCI6IFtcIlxcXFx7XCIsIFwiXFxcXH1cIl0sXG4gICAgICBcInZtYXRyaXhcIjogW1wifFwiLCBcInxcIl0sXG4gICAgICBcIlZtYXRyaXhcIjogW1wiXFxcXFZlcnRcIiwgXCJcXFxcVmVydFwiXVxuICAgIH1bY29udGV4dC5lbnZOYW1lXTsgLy8gXFxoc2tpcCAtXFxhcnJheWNvbHNlcCBpbiBhbXNtYXRoXG5cbiAgICB2YXIgcGF5bG9hZCA9IHtcbiAgICAgIGhza2lwQmVmb3JlQW5kQWZ0ZXI6IGZhbHNlXG4gICAgfTtcbiAgICB2YXIgcmVzID0gcGFyc2VBcnJheShjb250ZXh0LnBhcnNlciwgcGF5bG9hZCwgZENlbGxTdHlsZShjb250ZXh0LmVudk5hbWUpKTtcbiAgICByZXR1cm4gZGVsaW1pdGVycyA/IHtcbiAgICAgIHR5cGU6IFwibGVmdHJpZ2h0XCIsXG4gICAgICBtb2RlOiBjb250ZXh0Lm1vZGUsXG4gICAgICBib2R5OiBbcmVzXSxcbiAgICAgIGxlZnQ6IGRlbGltaXRlcnNbMF0sXG4gICAgICByaWdodDogZGVsaW1pdGVyc1sxXSxcbiAgICAgIHJpZ2h0Q29sb3I6IHVuZGVmaW5lZCAvLyBcXHJpZ2h0IHVuaW5mbHVlbmNlZCBieSBcXGNvbG9yIGluIGFycmF5XG5cbiAgICB9IDogcmVzO1xuICB9LFxuICBodG1sQnVpbGRlcjogYXJyYXlfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGFycmF5X21hdGhtbEJ1aWxkZXJcbn0pO1xuZGVmaW5lRW52aXJvbm1lbnQoe1xuICB0eXBlOiBcImFycmF5XCIsXG4gIG5hbWVzOiBbXCJzbWFsbG1hdHJpeFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoY29udGV4dCkge1xuICAgIHZhciBwYXlsb2FkID0ge1xuICAgICAgYXJyYXlzdHJldGNoOiAwLjVcbiAgICB9O1xuICAgIHZhciByZXMgPSBwYXJzZUFycmF5KGNvbnRleHQucGFyc2VyLCBwYXlsb2FkLCBcInNjcmlwdFwiKTtcbiAgICByZXMuY29sU2VwYXJhdGlvblR5cGUgPSBcInNtYWxsXCI7XG4gICAgcmV0dXJuIHJlcztcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGFycmF5X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhcnJheV9tYXRobWxCdWlsZGVyXG59KTtcbmRlZmluZUVudmlyb25tZW50KHtcbiAgdHlwZTogXCJhcnJheVwiLFxuICBuYW1lczogW1wic3ViYXJyYXlcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKGNvbnRleHQsIGFyZ3MpIHtcbiAgICAvLyBQYXJzaW5nIG9mIHtzdWJhcnJheX0gaXMgc2ltaWxhciB0byB7YXJyYXl9XG4gICAgdmFyIHN5bU5vZGUgPSBjaGVja1N5bWJvbE5vZGVUeXBlKGFyZ3NbMF0pO1xuICAgIHZhciBjb2xhbGlnbiA9IHN5bU5vZGUgPyBbYXJnc1swXV0gOiBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcIm9yZGdyb3VwXCIpLmJvZHk7XG4gICAgdmFyIGNvbHMgPSBjb2xhbGlnbi5tYXAoZnVuY3Rpb24gKG5kZSkge1xuICAgICAgdmFyIG5vZGUgPSBhc3NlcnRTeW1ib2xOb2RlVHlwZShuZGUpO1xuICAgICAgdmFyIGNhID0gbm9kZS50ZXh0OyAvLyB7c3ViYXJyYXl9IG9ubHkgcmVjb2duaXplcyBcImxcIiAmIFwiY1wiXG5cbiAgICAgIGlmIChcImxjXCIuaW5kZXhPZihjYSkgIT09IC0xKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgICAgIGFsaWduOiBjYVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJVbmtub3duIGNvbHVtbiBhbGlnbm1lbnQ6IFwiICsgY2EsIG5kZSk7XG4gICAgfSk7XG5cbiAgICBpZiAoY29scy5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJ7c3ViYXJyYXl9IGNhbiBjb250YWluIG9ubHkgb25lIGNvbHVtblwiKTtcbiAgICB9XG5cbiAgICB2YXIgcmVzID0ge1xuICAgICAgY29sczogY29scyxcbiAgICAgIGhza2lwQmVmb3JlQW5kQWZ0ZXI6IGZhbHNlLFxuICAgICAgYXJyYXlzdHJldGNoOiAwLjVcbiAgICB9O1xuICAgIHJlcyA9IHBhcnNlQXJyYXkoY29udGV4dC5wYXJzZXIsIHJlcywgXCJzY3JpcHRcIik7XG5cbiAgICBpZiAocmVzLmJvZHlbMF0ubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwie3N1YmFycmF5fSBjYW4gY29udGFpbiBvbmx5IG9uZSBjb2x1bW5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGFycmF5X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhcnJheV9tYXRobWxCdWlsZGVyXG59KTsgLy8gQSBjYXNlcyBlbnZpcm9ubWVudCAoaW4gYW1zbWF0aC5zdHkpIGlzIGFsbW9zdCBlcXVpdmFsZW50IHRvXG4vLyBcXGRlZlxcYXJyYXlzdHJldGNoezEuMn0lXG4vLyBcXGxlZnRcXHtcXGJlZ2lue2FycmF5fXtAe31sQHtcXHF1YWR9bEB7fX0g4oCmIFxcZW5ke2FycmF5fVxccmlnaHQuXG4vLyB7ZGNhc2VzfSBpcyBhIHtjYXNlc30gZW52aXJvbm1lbnQgd2hlcmUgY2VsbHMgYXJlIHNldCBpbiBcXGRpc3BsYXlzdHlsZSxcbi8vIGFzIGRlZmluZWQgaW4gbWF0aHRvb2xzLnN0eS5cblxuZGVmaW5lRW52aXJvbm1lbnQoe1xuICB0eXBlOiBcImFycmF5XCIsXG4gIG5hbWVzOiBbXCJjYXNlc1wiLCBcImRjYXNlc1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoY29udGV4dCkge1xuICAgIHZhciBwYXlsb2FkID0ge1xuICAgICAgYXJyYXlzdHJldGNoOiAxLjIsXG4gICAgICBjb2xzOiBbe1xuICAgICAgICB0eXBlOiBcImFsaWduXCIsXG4gICAgICAgIGFsaWduOiBcImxcIixcbiAgICAgICAgcHJlZ2FwOiAwLFxuICAgICAgICAvLyBUT0RPKGtldmluYikgZ2V0IHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAgICAvLyBGb3Igbm93IHdlIHVzZSB0aGUgbWV0cmljcyBmb3IgVEVYVCBzdHlsZSB3aGljaCBpcyB3aGF0IHdlIHdlcmVcbiAgICAgICAgLy8gZG9pbmcgYmVmb3JlLiAgQmVmb3JlIGF0dGVtcHRpbmcgdG8gZ2V0IHRoZSBjdXJyZW50IHN0eWxlIHdlXG4gICAgICAgIC8vIHNob3VsZCBsb29rIGF0IFRlWCdzIGJlaGF2aW9yIGVzcGVjaWFsbHkgZm9yIFxcb3ZlciBhbmQgbWF0cmljZXMuXG4gICAgICAgIHBvc3RnYXA6IDEuMFxuICAgICAgICAvKiAxZW0gcXVhZCAqL1xuXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiYWxpZ25cIixcbiAgICAgICAgYWxpZ246IFwibFwiLFxuICAgICAgICBwcmVnYXA6IDAsXG4gICAgICAgIHBvc3RnYXA6IDBcbiAgICAgIH1dXG4gICAgfTtcbiAgICB2YXIgcmVzID0gcGFyc2VBcnJheShjb250ZXh0LnBhcnNlciwgcGF5bG9hZCwgZENlbGxTdHlsZShjb250ZXh0LmVudk5hbWUpKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJsZWZ0cmlnaHRcIixcbiAgICAgIG1vZGU6IGNvbnRleHQubW9kZSxcbiAgICAgIGJvZHk6IFtyZXNdLFxuICAgICAgbGVmdDogXCJcXFxce1wiLFxuICAgICAgcmlnaHQ6IFwiLlwiLFxuICAgICAgcmlnaHRDb2xvcjogdW5kZWZpbmVkXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGFycmF5X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhcnJheV9tYXRobWxCdWlsZGVyXG59KTsgLy8gQW4gYWxpZ25lZCBlbnZpcm9ubWVudCBpcyBsaWtlIHRoZSBhbGlnbiogZW52aXJvbm1lbnRcbi8vIGV4Y2VwdCBpdCBvcGVyYXRlcyB3aXRoaW4gbWF0aCBtb2RlLlxuLy8gTm90ZSB0aGF0IHdlIGFzc3VtZSBcXG5vbWFsbGluZXNraXBsaW1pdCB0byBiZSB6ZXJvLFxuLy8gc28gdGhhdCBcXHN0cnV0QCBpcyB0aGUgc2FtZSBhcyBcXHN0cnV0LlxuXG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcImFsaWduZWRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuICBoYW5kbGVyOiBhcnJheV9hbGlnbmVkSGFuZGxlcixcbiAgaHRtbEJ1aWxkZXI6IGFycmF5X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhcnJheV9tYXRobWxCdWlsZGVyXG59KTsgLy8gQSBnYXRoZXJlZCBlbnZpcm9ubWVudCBpcyBsaWtlIGFuIGFycmF5IGVudmlyb25tZW50IHdpdGggb25lIGNlbnRlcmVkXG4vLyBjb2x1bW4sIGJ1dCB3aGVyZSByb3dzIGFyZSBjb25zaWRlcmVkIGxpbmVzIHNvIGdldCBcXGpvdCBsaW5lIHNwYWNpbmdcbi8vIGFuZCBjb250ZW50cyBhcmUgc2V0IGluIFxcZGlzcGxheXN0eWxlLlxuXG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcImdhdGhlcmVkXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDBcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihjb250ZXh0KSB7XG4gICAgdmFyIHJlcyA9IHtcbiAgICAgIGNvbHM6IFt7XG4gICAgICAgIHR5cGU6IFwiYWxpZ25cIixcbiAgICAgICAgYWxpZ246IFwiY1wiXG4gICAgICB9XSxcbiAgICAgIGFkZEpvdDogdHJ1ZVxuICAgIH07XG4gICAgcmV0dXJuIHBhcnNlQXJyYXkoY29udGV4dC5wYXJzZXIsIHJlcywgXCJkaXNwbGF5XCIpO1xuICB9LFxuICBodG1sQnVpbGRlcjogYXJyYXlfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGFycmF5X21hdGhtbEJ1aWxkZXJcbn0pOyAvLyBhbGlnbmF0IGVudmlyb25tZW50IGlzIGxpa2UgYW4gYWxpZ24gZW52aXJvbm1lbnQsIGJ1dCBvbmUgbXVzdCBleHBsaWNpdGx5XG4vLyBzcGVjaWZ5IG1heGltdW0gbnVtYmVyIG9mIGNvbHVtbnMgaW4gZWFjaCByb3csIGFuZCBjYW4gYWRqdXN0IHNwYWNpbmcgYmV0d2VlblxuLy8gZWFjaCBjb2x1bW5zLlxuXG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcImFsaWduZWRhdFwiXSxcbiAgLy8gT25lIGZvciBudW1iZXJlZCBhbmQgZm9yIHVubnVtYmVyZWQ7XG4gIC8vIGJ1dCwgS2FUZVggZG9lc24ndCBzdXBwb3J0cyBtYXRoIG51bWJlcmluZyB5ZXQsXG4gIC8vIHRoZXkgbWFrZSBubyBkaWZmZXJlbmNlIGZvciBub3cuXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiBhcnJheV9hbGlnbmVkSGFuZGxlcixcbiAgaHRtbEJ1aWxkZXI6IGFycmF5X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhcnJheV9tYXRobWxCdWlsZGVyXG59KTsgLy8gQ2F0Y2ggXFxobGluZSBvdXRzaWRlIGFycmF5IGVudmlyb25tZW50XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJ0ZXh0XCIsXG4gIC8vIERvZXNuJ3QgbWF0dGVyIHdoYXQgdGhpcyBpcy5cbiAgbmFtZXM6IFtcIlxcXFxobGluZVwiLCBcIlxcXFxoZGFzaGxpbmVcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGFsbG93ZWRJbk1hdGg6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKGNvbnRleHQuZnVuY05hbWUgKyBcIiB2YWxpZCBvbmx5IHdpdGhpbiBhcnJheSBlbnZpcm9ubWVudFwiKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9lbnZpcm9ubWVudHMuanNcblxudmFyIGVudmlyb25tZW50cyA9IF9lbnZpcm9ubWVudHM7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfZW52aXJvbm1lbnRzID0gKGVudmlyb25tZW50cyk7IC8vIEFsbCBlbnZpcm9ubWVudCBkZWZpbml0aW9ucyBzaG91bGQgYmUgaW1wb3J0ZWQgYmVsb3dcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvZW52aXJvbm1lbnQuanNcblxuXG5cbiAvLyBFbnZpcm9ubWVudCBkZWxpbWl0ZXJzLiBIVE1ML01hdGhNTCByZW5kZXJpbmcgaXMgZGVmaW5lZCBpbiB0aGUgY29ycmVzcG9uZGluZ1xuLy8gZGVmaW5lRW52aXJvbm1lbnQgZGVmaW5pdGlvbnMuXG4vLyAkRmxvd0ZpeE1lLCBcImVudmlyb25tZW50XCIgaGFuZGxlciByZXR1cm5zIGFuIGVudmlyb25tZW50IFBhcnNlTm9kZVxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiZW52aXJvbm1lbnRcIixcbiAgbmFtZXM6IFtcIlxcXFxiZWdpblwiLCBcIlxcXFxlbmRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1widGV4dFwiXVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZi5wYXJzZXIsXG4gICAgICAgIGZ1bmNOYW1lID0gX3JlZi5mdW5jTmFtZTtcbiAgICB2YXIgbmFtZUdyb3VwID0gYXJnc1swXTtcblxuICAgIGlmIChuYW1lR3JvdXAudHlwZSAhPT0gXCJvcmRncm91cFwiKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJJbnZhbGlkIGVudmlyb25tZW50IG5hbWVcIiwgbmFtZUdyb3VwKTtcbiAgICB9XG5cbiAgICB2YXIgZW52TmFtZSA9IFwiXCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVHcm91cC5ib2R5Lmxlbmd0aDsgKytpKSB7XG4gICAgICBlbnZOYW1lICs9IGFzc2VydE5vZGVUeXBlKG5hbWVHcm91cC5ib2R5W2ldLCBcInRleHRvcmRcIikudGV4dDtcbiAgICB9XG5cbiAgICBpZiAoZnVuY05hbWUgPT09IFwiXFxcXGJlZ2luXCIpIHtcbiAgICAgIC8vIGJlZ2luLi4uZW5kIGlzIHNpbWlsYXIgdG8gbGVmdC4uLnJpZ2h0XG4gICAgICBpZiAoIXNyY19lbnZpcm9ubWVudHMuaGFzT3duUHJvcGVydHkoZW52TmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiTm8gc3VjaCBlbnZpcm9ubWVudDogXCIgKyBlbnZOYW1lLCBuYW1lR3JvdXApO1xuICAgICAgfSAvLyBCdWlsZCB0aGUgZW52aXJvbm1lbnQgb2JqZWN0LiBBcmd1bWVudHMgYW5kIG90aGVyIGluZm9ybWF0aW9uIHdpbGxcbiAgICAgIC8vIGJlIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBiZWdpbiBhbmQgZW5kIG1ldGhvZHMgdXNpbmcgcHJvcGVydGllcy5cblxuXG4gICAgICB2YXIgZW52ID0gc3JjX2Vudmlyb25tZW50c1tlbnZOYW1lXTtcblxuICAgICAgdmFyIF9wYXJzZXIkcGFyc2VBcmd1bWVudCA9IHBhcnNlci5wYXJzZUFyZ3VtZW50cyhcIlxcXFxiZWdpbntcIiArIGVudk5hbWUgKyBcIn1cIiwgZW52KSxcbiAgICAgICAgICBfYXJncyA9IF9wYXJzZXIkcGFyc2VBcmd1bWVudC5hcmdzLFxuICAgICAgICAgIG9wdEFyZ3MgPSBfcGFyc2VyJHBhcnNlQXJndW1lbnQub3B0QXJncztcblxuICAgICAgdmFyIGNvbnRleHQgPSB7XG4gICAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgICBlbnZOYW1lOiBlbnZOYW1lLFxuICAgICAgICBwYXJzZXI6IHBhcnNlclxuICAgICAgfTtcbiAgICAgIHZhciByZXN1bHQgPSBlbnYuaGFuZGxlcihjb250ZXh0LCBfYXJncywgb3B0QXJncyk7XG4gICAgICBwYXJzZXIuZXhwZWN0KFwiXFxcXGVuZFwiLCBmYWxzZSk7XG4gICAgICB2YXIgZW5kTmFtZVRva2VuID0gcGFyc2VyLm5leHRUb2tlbjtcbiAgICAgIHZhciBlbmQgPSBhc3NlcnROb2RlVHlwZShwYXJzZXIucGFyc2VGdW5jdGlvbigpLCBcImVudmlyb25tZW50XCIpO1xuXG4gICAgICBpZiAoZW5kLm5hbWUgIT09IGVudk5hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiTWlzbWF0Y2g6IFxcXFxiZWdpbntcIiArIGVudk5hbWUgKyBcIn0gbWF0Y2hlZCBieSBcXFxcZW5ke1wiICsgZW5kLm5hbWUgKyBcIn1cIiwgZW5kTmFtZVRva2VuKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJlbnZpcm9ubWVudFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBuYW1lOiBlbnZOYW1lLFxuICAgICAgbmFtZUdyb3VwOiBuYW1lR3JvdXBcbiAgICB9O1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9tY2xhc3MuanNcblxuXG5cblxuXG5cbnZhciBtY2xhc3NfbWFrZVNwYW4gPSBidWlsZENvbW1vbi5tYWtlU3BhbjtcblxuZnVuY3Rpb24gbWNsYXNzX2h0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gIHZhciBlbGVtZW50cyA9IGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucywgdHJ1ZSk7XG4gIHJldHVybiBtY2xhc3NfbWFrZVNwYW4oW2dyb3VwLm1jbGFzc10sIGVsZW1lbnRzLCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gbWNsYXNzX21hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIG5vZGU7XG4gIHZhciBpbm5lciA9IGJ1aWxkTWF0aE1MX2J1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zKTtcblxuICBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1pbm5lclwiKSB7XG4gICAgcmV0dXJuIG1hdGhNTFRyZWUubmV3RG9jdW1lbnRGcmFnbWVudChpbm5lcik7XG4gIH0gZWxzZSBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1vcmRcIikge1xuICAgIGlmIChncm91cC5pc0NoYXJhY3RlckJveCkge1xuICAgICAgbm9kZSA9IGlubmVyWzBdO1xuICAgICAgbm9kZS50eXBlID0gXCJtaVwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtaVwiLCBpbm5lcik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChncm91cC5pc0NoYXJhY3RlckJveCkge1xuICAgICAgbm9kZSA9IGlubmVyWzBdO1xuICAgICAgbm9kZS50eXBlID0gXCJtb1wiO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBpbm5lcik7XG4gICAgfSAvLyBTZXQgc3BhY2luZyBiYXNlZCBvbiB3aGF0IGlzIHRoZSBtb3N0IGxpa2VseSBhZGphY2VudCBhdG9tIHR5cGUuXG4gICAgLy8gU2VlIFRlWGJvb2sgcDE3MC5cblxuXG4gICAgaWYgKGdyb3VwLm1jbGFzcyA9PT0gXCJtYmluXCIpIHtcbiAgICAgIG5vZGUuYXR0cmlidXRlcy5sc3BhY2UgPSBcIjAuMjJlbVwiOyAvLyBtZWRpdW0gc3BhY2VcblxuICAgICAgbm9kZS5hdHRyaWJ1dGVzLnJzcGFjZSA9IFwiMC4yMmVtXCI7XG4gICAgfSBlbHNlIGlmIChncm91cC5tY2xhc3MgPT09IFwibXB1bmN0XCIpIHtcbiAgICAgIG5vZGUuYXR0cmlidXRlcy5sc3BhY2UgPSBcIjBlbVwiO1xuICAgICAgbm9kZS5hdHRyaWJ1dGVzLnJzcGFjZSA9IFwiMC4xN2VtXCI7IC8vIHRoaW5zcGFjZVxuICAgIH0gZWxzZSBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1vcGVuXCIgfHwgZ3JvdXAubWNsYXNzID09PSBcIm1jbG9zZVwiKSB7XG4gICAgICBub2RlLmF0dHJpYnV0ZXMubHNwYWNlID0gXCIwZW1cIjtcbiAgICAgIG5vZGUuYXR0cmlidXRlcy5yc3BhY2UgPSBcIjBlbVwiO1xuICAgIH0gLy8gTWF0aE1MIDxtbz4gZGVmYXVsdCBzcGFjZSBpcyA1LzE4IGVtLCBzbyA8bXJlbD4gbmVlZHMgbm8gYWN0aW9uLlxuICAgIC8vIFJlZjogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvTWF0aE1ML0VsZW1lbnQvbW9cblxuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59IC8vIE1hdGggY2xhc3MgY29tbWFuZHMgZXhjZXB0IFxcbWF0aG9wXG5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcIm1jbGFzc1wiLFxuICBuYW1lczogW1wiXFxcXG1hdGhvcmRcIiwgXCJcXFxcbWF0aGJpblwiLCBcIlxcXFxtYXRocmVsXCIsIFwiXFxcXG1hdGhvcGVuXCIsIFwiXFxcXG1hdGhjbG9zZVwiLCBcIlxcXFxtYXRocHVuY3RcIiwgXCJcXFxcbWF0aGlubmVyXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWYuZnVuY05hbWU7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm1jbGFzc1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBtY2xhc3M6IFwibVwiICsgZnVuY05hbWUuc3Vic3RyKDUpLFxuICAgICAgLy8gVE9ETyhrZXZpbmIpOiBkb24ndCBwcmVmaXggd2l0aCAnbSdcbiAgICAgIGJvZHk6IGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGJvZHkpLFxuICAgICAgaXNDaGFyYWN0ZXJCb3g6IHV0aWxzLmlzQ2hhcmFjdGVyQm94KGJvZHkpXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IG1jbGFzc19odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogbWNsYXNzX21hdGhtbEJ1aWxkZXJcbn0pO1xudmFyIGJpbnJlbENsYXNzID0gZnVuY3Rpb24gYmlucmVsQ2xhc3MoYXJnKSB7XG4gIC8vIFxcYmlucmVsQCBzcGFjaW5nIHZhcmllcyB3aXRoIChiaW58cmVsfG9yZCkgb2YgdGhlIGF0b20gaW4gdGhlIGFyZ3VtZW50LlxuICAvLyAoYnkgcmVuZGVyaW5nIHNlcGFyYXRlbHkgYW5kIHdpdGgge31zIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZCBtZWFzdXJpbmdcbiAgLy8gdGhlIGNoYW5nZSBpbiBzcGFjaW5nKS4gIFdlJ2xsIGRvIHJvdWdobHkgdGhlIHNhbWUgYnkgZGV0ZWN0aW5nIHRoZVxuICAvLyBhdG9tIHR5cGUgZGlyZWN0bHkuXG4gIHZhciBhdG9tID0gYXJnLnR5cGUgPT09IFwib3JkZ3JvdXBcIiAmJiBhcmcuYm9keS5sZW5ndGggPyBhcmcuYm9keVswXSA6IGFyZztcblxuICBpZiAoYXRvbS50eXBlID09PSBcImF0b21cIiAmJiAoYXRvbS5mYW1pbHkgPT09IFwiYmluXCIgfHwgYXRvbS5mYW1pbHkgPT09IFwicmVsXCIpKSB7XG4gICAgcmV0dXJuIFwibVwiICsgYXRvbS5mYW1pbHk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwibW9yZFwiO1xuICB9XG59OyAvLyBcXEBiaW5yZWx7eH17eX0gcmVuZGVycyBsaWtlIHkgYnV0IGFzIG1iaW4vbXJlbC9tb3JkIGlmIHggaXMgbWJpbi9tcmVsL21vcmQuXG4vLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gXFxiaW5yZWxAe3h9XFxiaW5yZWxAQHt5fSBpbiBBTVNUZVguXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJtY2xhc3NcIixcbiAgbmFtZXM6IFtcIlxcXFxAYmlucmVsXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDJcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmMiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmMi5wYXJzZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwibWNsYXNzXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG1jbGFzczogYmlucmVsQ2xhc3MoYXJnc1swXSksXG4gICAgICBib2R5OiBbYXJnc1sxXV0sXG4gICAgICBpc0NoYXJhY3RlckJveDogdXRpbHMuaXNDaGFyYWN0ZXJCb3goYXJnc1sxXSlcbiAgICB9O1xuICB9XG59KTsgLy8gQnVpbGQgYSByZWxhdGlvbiBvciBzdGFja2VkIG9wIGJ5IHBsYWNpbmcgb25lIHN5bWJvbCBvbiB0b3Agb2YgYW5vdGhlclxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibWNsYXNzXCIsXG4gIG5hbWVzOiBbXCJcXFxcc3RhY2tyZWxcIiwgXCJcXFxcb3ZlcnNldFwiLCBcIlxcXFx1bmRlcnNldFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZjMsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZjMucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWYzLmZ1bmNOYW1lO1xuICAgIHZhciBiYXNlQXJnID0gYXJnc1sxXTtcbiAgICB2YXIgc2hpZnRlZEFyZyA9IGFyZ3NbMF07XG4gICAgdmFyIG1jbGFzcztcblxuICAgIGlmIChmdW5jTmFtZSAhPT0gXCJcXFxcc3RhY2tyZWxcIikge1xuICAgICAgLy8gTGFUZVggYXBwbGllcyBcXGJpbnJlbCBzcGFjaW5nIHRvIFxcb3ZlcnNldCBhbmQgXFx1bmRlcnNldC5cbiAgICAgIG1jbGFzcyA9IGJpbnJlbENsYXNzKGJhc2VBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtY2xhc3MgPSBcIm1yZWxcIjsgLy8gZm9yIFxcc3RhY2tyZWxcbiAgICB9XG5cbiAgICB2YXIgYmFzZU9wID0ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogYmFzZUFyZy5tb2RlLFxuICAgICAgbGltaXRzOiB0cnVlLFxuICAgICAgYWx3YXlzSGFuZGxlU3VwU3ViOiB0cnVlLFxuICAgICAgcGFyZW50SXNTdXBTdWI6IGZhbHNlLFxuICAgICAgc3ltYm9sOiBmYWxzZSxcbiAgICAgIHN1cHByZXNzQmFzZVNoaWZ0OiBmdW5jTmFtZSAhPT0gXCJcXFxcc3RhY2tyZWxcIixcbiAgICAgIGJvZHk6IGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGJhc2VBcmcpXG4gICAgfTtcbiAgICB2YXIgc3Vwc3ViID0ge1xuICAgICAgdHlwZTogXCJzdXBzdWJcIixcbiAgICAgIG1vZGU6IHNoaWZ0ZWRBcmcubW9kZSxcbiAgICAgIGJhc2U6IGJhc2VPcCxcbiAgICAgIHN1cDogZnVuY05hbWUgPT09IFwiXFxcXHVuZGVyc2V0XCIgPyBudWxsIDogc2hpZnRlZEFyZyxcbiAgICAgIHN1YjogZnVuY05hbWUgPT09IFwiXFxcXHVuZGVyc2V0XCIgPyBzaGlmdGVkQXJnIDogbnVsbFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwibWNsYXNzXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG1jbGFzczogbWNsYXNzLFxuICAgICAgYm9keTogW3N1cHN1Yl0sXG4gICAgICBpc0NoYXJhY3RlckJveDogdXRpbHMuaXNDaGFyYWN0ZXJCb3goc3Vwc3ViKVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBtY2xhc3NfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IG1jbGFzc19tYXRobWxCdWlsZGVyXG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9mb250LmpzXG4vLyBUT0RPKGtldmluYik6IGltcGxlbWVudCBcXFxcc2wgYW5kIFxcXFxzY1xuXG5cblxuXG5cblxudmFyIGZvbnRfaHRtbEJ1aWxkZXIgPSBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICB2YXIgZm9udCA9IGdyb3VwLmZvbnQ7XG4gIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy53aXRoRm9udChmb250KTtcbiAgcmV0dXJuIGJ1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG5ld09wdGlvbnMpO1xufTtcblxudmFyIGZvbnRfbWF0aG1sQnVpbGRlciA9IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIGZvbnQgPSBncm91cC5mb250O1xuICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMud2l0aEZvbnQoZm9udCk7XG4gIHJldHVybiBidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG5ld09wdGlvbnMpO1xufTtcblxudmFyIGZvbnRBbGlhc2VzID0ge1xuICBcIlxcXFxCYmJcIjogXCJcXFxcbWF0aGJiXCIsXG4gIFwiXFxcXGJvbGRcIjogXCJcXFxcbWF0aGJmXCIsXG4gIFwiXFxcXGZyYWtcIjogXCJcXFxcbWF0aGZyYWtcIixcbiAgXCJcXFxcYm1cIjogXCJcXFxcYm9sZHN5bWJvbFwiXG59O1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImZvbnRcIixcbiAgbmFtZXM6IFsvLyBzdHlsZXMsIGV4Y2VwdCBcXGJvbGRzeW1ib2wgZGVmaW5lZCBiZWxvd1xuICBcIlxcXFxtYXRocm1cIiwgXCJcXFxcbWF0aGl0XCIsIFwiXFxcXG1hdGhiZlwiLCBcIlxcXFxtYXRobm9ybWFsXCIsIC8vIGZhbWlsaWVzXG4gIFwiXFxcXG1hdGhiYlwiLCBcIlxcXFxtYXRoY2FsXCIsIFwiXFxcXG1hdGhmcmFrXCIsIFwiXFxcXG1hdGhzY3JcIiwgXCJcXFxcbWF0aHNmXCIsIFwiXFxcXG1hdGh0dFwiLCAvLyBhbGlhc2VzLCBleGNlcHQgXFxibSBkZWZpbmVkIGJlbG93XG4gIFwiXFxcXEJiYlwiLCBcIlxcXFxib2xkXCIsIFwiXFxcXGZyYWtcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBncmVlZGluZXNzOiAyXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICB2YXIgZnVuYyA9IGZ1bmNOYW1lO1xuXG4gICAgaWYgKGZ1bmMgaW4gZm9udEFsaWFzZXMpIHtcbiAgICAgIGZ1bmMgPSBmb250QWxpYXNlc1tmdW5jXTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJmb250XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGZvbnQ6IGZ1bmMuc2xpY2UoMSksXG4gICAgICBib2R5OiBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZvbnRfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGZvbnRfbWF0aG1sQnVpbGRlclxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibWNsYXNzXCIsXG4gIG5hbWVzOiBbXCJcXFxcYm9sZHN5bWJvbFwiLCBcIlxcXFxibVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGdyZWVkaW5lc3M6IDJcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmMiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmMi5wYXJzZXI7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHZhciBpc0NoYXJhY3RlckJveCA9IHV0aWxzLmlzQ2hhcmFjdGVyQm94KGJvZHkpOyAvLyBhbXNic3kuc3R5J3MgXFxib2xkc3ltYm9sIHVzZXMgXFxiaW5yZWwgc3BhY2luZyB0byBpbmhlcml0IHRoZVxuICAgIC8vIGFyZ3VtZW50J3MgYmlufHJlbHxvcmQgc3RhdHVzXG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJtY2xhc3NcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbWNsYXNzOiBiaW5yZWxDbGFzcyhib2R5KSxcbiAgICAgIGJvZHk6IFt7XG4gICAgICAgIHR5cGU6IFwiZm9udFwiLFxuICAgICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgICAgZm9udDogXCJib2xkc3ltYm9sXCIsXG4gICAgICAgIGJvZHk6IGJvZHlcbiAgICAgIH1dLFxuICAgICAgaXNDaGFyYWN0ZXJCb3g6IGlzQ2hhcmFjdGVyQm94XG4gICAgfTtcbiAgfVxufSk7IC8vIE9sZCBmb250IGNoYW5naW5nIGZ1bmN0aW9uc1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiZm9udFwiLFxuICBuYW1lczogW1wiXFxcXHJtXCIsIFwiXFxcXHNmXCIsIFwiXFxcXHR0XCIsIFwiXFxcXGJmXCIsIFwiXFxcXGl0XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYzLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYzLnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmMy5mdW5jTmFtZSxcbiAgICAgICAgYnJlYWtPblRva2VuVGV4dCA9IF9yZWYzLmJyZWFrT25Ub2tlblRleHQ7XG4gICAgdmFyIG1vZGUgPSBwYXJzZXIubW9kZTtcbiAgICB2YXIgYm9keSA9IHBhcnNlci5wYXJzZUV4cHJlc3Npb24odHJ1ZSwgYnJlYWtPblRva2VuVGV4dCk7XG4gICAgdmFyIHN0eWxlID0gXCJtYXRoXCIgKyBmdW5jTmFtZS5zbGljZSgxKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJmb250XCIsXG4gICAgICBtb2RlOiBtb2RlLFxuICAgICAgZm9udDogc3R5bGUsXG4gICAgICBib2R5OiB7XG4gICAgICAgIHR5cGU6IFwib3JkZ3JvdXBcIixcbiAgICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICAgIGJvZHk6IGJvZHlcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZm9udF9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogZm9udF9tYXRobWxCdWlsZGVyXG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9nZW5mcmFjLmpzXG5cblxuXG5cblxuXG5cblxuXG5cblxudmFyIGdlbmZyYWNfYWRqdXN0U3R5bGUgPSBmdW5jdGlvbiBhZGp1c3RTdHlsZShzaXplLCBvcmlnaW5hbFN0eWxlKSB7XG4gIC8vIEZpZ3VyZSBvdXQgd2hhdCBzdHlsZSB0aGlzIGZyYWN0aW9uIHNob3VsZCBiZSBpbiBiYXNlZCBvbiB0aGVcbiAgLy8gZnVuY3Rpb24gdXNlZFxuICB2YXIgc3R5bGUgPSBvcmlnaW5hbFN0eWxlO1xuXG4gIGlmIChzaXplID09PSBcImRpc3BsYXlcIikge1xuICAgIC8vIEdldCBkaXNwbGF5IHN0eWxlIGFzIGEgZGVmYXVsdC5cbiAgICAvLyBJZiBpbmNvbWluZyBzdHlsZSBpcyBzdWIvc3VwLCB1c2Ugc3R5bGUudGV4dCgpIHRvIGdldCBjb3JyZWN0IHNpemUuXG4gICAgc3R5bGUgPSBzdHlsZS5pZCA+PSBzcmNfU3R5bGUuU0NSSVBULmlkID8gc3R5bGUudGV4dCgpIDogc3JjX1N0eWxlLkRJU1BMQVk7XG4gIH0gZWxzZSBpZiAoc2l6ZSA9PT0gXCJ0ZXh0XCIgJiYgc3R5bGUuc2l6ZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkuc2l6ZSkge1xuICAgIC8vIFdlJ3JlIGluIGEgXFx0ZnJhYyBidXQgaW5jb21pbmcgc3R5bGUgaXMgZGlzcGxheXN0eWxlLCBzbzpcbiAgICBzdHlsZSA9IHNyY19TdHlsZS5URVhUO1xuICB9IGVsc2UgaWYgKHNpemUgPT09IFwic2NyaXB0XCIpIHtcbiAgICBzdHlsZSA9IHNyY19TdHlsZS5TQ1JJUFQ7XG4gIH0gZWxzZSBpZiAoc2l6ZSA9PT0gXCJzY3JpcHRzY3JpcHRcIikge1xuICAgIHN0eWxlID0gc3JjX1N0eWxlLlNDUklQVFNDUklQVDtcbiAgfVxuXG4gIHJldHVybiBzdHlsZTtcbn07XG5cbnZhciBnZW5mcmFjX2h0bWxCdWlsZGVyID0gZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgLy8gRnJhY3Rpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBUZVhib29rIG9uIHBhZ2VzIDQ0NC00NDUsIHJ1bGVzIDE1KGEtZSkuXG4gIHZhciBzdHlsZSA9IGdlbmZyYWNfYWRqdXN0U3R5bGUoZ3JvdXAuc2l6ZSwgb3B0aW9ucy5zdHlsZSk7XG4gIHZhciBuc3R5bGUgPSBzdHlsZS5mcmFjTnVtKCk7XG4gIHZhciBkc3R5bGUgPSBzdHlsZS5mcmFjRGVuKCk7XG4gIHZhciBuZXdPcHRpb25zO1xuICBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShuc3R5bGUpO1xuICB2YXIgbnVtZXJtID0gYnVpbGRIVE1MX2J1aWxkR3JvdXAoZ3JvdXAubnVtZXIsIG5ld09wdGlvbnMsIG9wdGlvbnMpO1xuXG4gIGlmIChncm91cC5jb250aW51ZWQpIHtcbiAgICAvLyBcXGNmcmFjIGluc2VydHMgYSBcXHN0cnV0IGludG8gdGhlIG51bWVyYXRvci5cbiAgICAvLyBHZXQgXFxzdHJ1dCBkaW1lbnNpb25zIGZyb20gVGVYYm9vayBwYWdlIDM1My5cbiAgICB2YXIgaFN0cnV0ID0gOC41IC8gb3B0aW9ucy5mb250TWV0cmljcygpLnB0UGVyRW07XG4gICAgdmFyIGRTdHJ1dCA9IDMuNSAvIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5wdFBlckVtO1xuICAgIG51bWVybS5oZWlnaHQgPSBudW1lcm0uaGVpZ2h0IDwgaFN0cnV0ID8gaFN0cnV0IDogbnVtZXJtLmhlaWdodDtcbiAgICBudW1lcm0uZGVwdGggPSBudW1lcm0uZGVwdGggPCBkU3RydXQgPyBkU3RydXQgOiBudW1lcm0uZGVwdGg7XG4gIH1cblxuICBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShkc3R5bGUpO1xuICB2YXIgZGVub21tID0gYnVpbGRIVE1MX2J1aWxkR3JvdXAoZ3JvdXAuZGVub20sIG5ld09wdGlvbnMsIG9wdGlvbnMpO1xuICB2YXIgcnVsZTtcbiAgdmFyIHJ1bGVXaWR0aDtcbiAgdmFyIHJ1bGVTcGFjaW5nO1xuXG4gIGlmIChncm91cC5oYXNCYXJMaW5lKSB7XG4gICAgaWYgKGdyb3VwLmJhclNpemUpIHtcbiAgICAgIHJ1bGVXaWR0aCA9IHVuaXRzX2NhbGN1bGF0ZVNpemUoZ3JvdXAuYmFyU2l6ZSwgb3B0aW9ucyk7XG4gICAgICBydWxlID0gYnVpbGRDb21tb24ubWFrZUxpbmVTcGFuKFwiZnJhYy1saW5lXCIsIG9wdGlvbnMsIHJ1bGVXaWR0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJ1bGUgPSBidWlsZENvbW1vbi5tYWtlTGluZVNwYW4oXCJmcmFjLWxpbmVcIiwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcnVsZVdpZHRoID0gcnVsZS5oZWlnaHQ7XG4gICAgcnVsZVNwYWNpbmcgPSBydWxlLmhlaWdodDtcbiAgfSBlbHNlIHtcbiAgICBydWxlID0gbnVsbDtcbiAgICBydWxlV2lkdGggPSAwO1xuICAgIHJ1bGVTcGFjaW5nID0gb3B0aW9ucy5mb250TWV0cmljcygpLmRlZmF1bHRSdWxlVGhpY2tuZXNzO1xuICB9IC8vIFJ1bGUgMTViXG5cblxuICB2YXIgbnVtU2hpZnQ7XG4gIHZhciBjbGVhcmFuY2U7XG4gIHZhciBkZW5vbVNoaWZ0O1xuXG4gIGlmIChzdHlsZS5zaXplID09PSBzcmNfU3R5bGUuRElTUExBWS5zaXplIHx8IGdyb3VwLnNpemUgPT09IFwiZGlzcGxheVwiKSB7XG4gICAgbnVtU2hpZnQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkubnVtMTtcblxuICAgIGlmIChydWxlV2lkdGggPiAwKSB7XG4gICAgICBjbGVhcmFuY2UgPSAzICogcnVsZVNwYWNpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFyYW5jZSA9IDcgKiBydWxlU3BhY2luZztcbiAgICB9XG5cbiAgICBkZW5vbVNoaWZ0ID0gb3B0aW9ucy5mb250TWV0cmljcygpLmRlbm9tMTtcbiAgfSBlbHNlIHtcbiAgICBpZiAocnVsZVdpZHRoID4gMCkge1xuICAgICAgbnVtU2hpZnQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkubnVtMjtcbiAgICAgIGNsZWFyYW5jZSA9IHJ1bGVTcGFjaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBudW1TaGlmdCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5udW0zO1xuICAgICAgY2xlYXJhbmNlID0gMyAqIHJ1bGVTcGFjaW5nO1xuICAgIH1cblxuICAgIGRlbm9tU2hpZnQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVub20yO1xuICB9XG5cbiAgdmFyIGZyYWM7XG5cbiAgaWYgKCFydWxlKSB7XG4gICAgLy8gUnVsZSAxNWNcbiAgICB2YXIgY2FuZGlkYXRlQ2xlYXJhbmNlID0gbnVtU2hpZnQgLSBudW1lcm0uZGVwdGggLSAoZGVub21tLmhlaWdodCAtIGRlbm9tU2hpZnQpO1xuXG4gICAgaWYgKGNhbmRpZGF0ZUNsZWFyYW5jZSA8IGNsZWFyYW5jZSkge1xuICAgICAgbnVtU2hpZnQgKz0gMC41ICogKGNsZWFyYW5jZSAtIGNhbmRpZGF0ZUNsZWFyYW5jZSk7XG4gICAgICBkZW5vbVNoaWZ0ICs9IDAuNSAqIChjbGVhcmFuY2UgLSBjYW5kaWRhdGVDbGVhcmFuY2UpO1xuICAgIH1cblxuICAgIGZyYWMgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBkZW5vbW0sXG4gICAgICAgIHNoaWZ0OiBkZW5vbVNoaWZ0XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBudW1lcm0sXG4gICAgICAgIHNoaWZ0OiAtbnVtU2hpZnRcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gUnVsZSAxNWRcbiAgICB2YXIgYXhpc0hlaWdodCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O1xuXG4gICAgaWYgKG51bVNoaWZ0IC0gbnVtZXJtLmRlcHRoIC0gKGF4aXNIZWlnaHQgKyAwLjUgKiBydWxlV2lkdGgpIDwgY2xlYXJhbmNlKSB7XG4gICAgICBudW1TaGlmdCArPSBjbGVhcmFuY2UgLSAobnVtU2hpZnQgLSBudW1lcm0uZGVwdGggLSAoYXhpc0hlaWdodCArIDAuNSAqIHJ1bGVXaWR0aCkpO1xuICAgIH1cblxuICAgIGlmIChheGlzSGVpZ2h0IC0gMC41ICogcnVsZVdpZHRoIC0gKGRlbm9tbS5oZWlnaHQgLSBkZW5vbVNoaWZ0KSA8IGNsZWFyYW5jZSkge1xuICAgICAgZGVub21TaGlmdCArPSBjbGVhcmFuY2UgLSAoYXhpc0hlaWdodCAtIDAuNSAqIHJ1bGVXaWR0aCAtIChkZW5vbW0uaGVpZ2h0IC0gZGVub21TaGlmdCkpO1xuICAgIH1cblxuICAgIHZhciBtaWRTaGlmdCA9IC0oYXhpc0hlaWdodCAtIDAuNSAqIHJ1bGVXaWR0aCk7XG4gICAgZnJhYyA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGRlbm9tbSxcbiAgICAgICAgc2hpZnQ6IGRlbm9tU2hpZnRcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHJ1bGUsXG4gICAgICAgIHNoaWZ0OiBtaWRTaGlmdFxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogbnVtZXJtLFxuICAgICAgICBzaGlmdDogLW51bVNoaWZ0XG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICB9IC8vIFNpbmNlIHdlIG1hbnVhbGx5IGNoYW5nZSB0aGUgc3R5bGUgc29tZXRpbWVzICh3aXRoIFxcZGZyYWMgb3IgXFx0ZnJhYyksXG4gIC8vIGFjY291bnQgZm9yIHRoZSBwb3NzaWJsZSBzaXplIGNoYW5nZSBoZXJlLlxuXG5cbiAgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoc3R5bGUpO1xuICBmcmFjLmhlaWdodCAqPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgZnJhYy5kZXB0aCAqPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjsgLy8gUnVsZSAxNWVcblxuICB2YXIgZGVsaW1TaXplO1xuXG4gIGlmIChzdHlsZS5zaXplID09PSBzcmNfU3R5bGUuRElTUExBWS5zaXplKSB7XG4gICAgZGVsaW1TaXplID0gb3B0aW9ucy5mb250TWV0cmljcygpLmRlbGltMTtcbiAgfSBlbHNlIHtcbiAgICBkZWxpbVNpemUgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVsaW0yO1xuICB9XG5cbiAgdmFyIGxlZnREZWxpbTtcbiAgdmFyIHJpZ2h0RGVsaW07XG5cbiAgaWYgKGdyb3VwLmxlZnREZWxpbSA9PSBudWxsKSB7XG4gICAgbGVmdERlbGltID0gbWFrZU51bGxEZWxpbWl0ZXIob3B0aW9ucywgW1wibW9wZW5cIl0pO1xuICB9IGVsc2Uge1xuICAgIGxlZnREZWxpbSA9IGRlbGltaXRlci5jdXN0b21TaXplZERlbGltKGdyb3VwLmxlZnREZWxpbSwgZGVsaW1TaXplLCB0cnVlLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlKSwgZ3JvdXAubW9kZSwgW1wibW9wZW5cIl0pO1xuICB9XG5cbiAgaWYgKGdyb3VwLmNvbnRpbnVlZCkge1xuICAgIHJpZ2h0RGVsaW0gPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXSk7IC8vIHplcm8gd2lkdGggZm9yIFxcY2ZyYWNcbiAgfSBlbHNlIGlmIChncm91cC5yaWdodERlbGltID09IG51bGwpIHtcbiAgICByaWdodERlbGltID0gbWFrZU51bGxEZWxpbWl0ZXIob3B0aW9ucywgW1wibWNsb3NlXCJdKTtcbiAgfSBlbHNlIHtcbiAgICByaWdodERlbGltID0gZGVsaW1pdGVyLmN1c3RvbVNpemVkRGVsaW0oZ3JvdXAucmlnaHREZWxpbSwgZGVsaW1TaXplLCB0cnVlLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlKSwgZ3JvdXAubW9kZSwgW1wibWNsb3NlXCJdKTtcbiAgfVxuXG4gIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCJdLmNvbmNhdChuZXdPcHRpb25zLnNpemluZ0NsYXNzZXMob3B0aW9ucykpLCBbbGVmdERlbGltLCBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtZnJhY1wiXSwgW2ZyYWNdKSwgcmlnaHREZWxpbV0sIG9wdGlvbnMpO1xufTtcblxudmFyIGdlbmZyYWNfbWF0aG1sQnVpbGRlciA9IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1mcmFjXCIsIFtidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLm51bWVyLCBvcHRpb25zKSwgYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5kZW5vbSwgb3B0aW9ucyldKTtcblxuICBpZiAoIWdyb3VwLmhhc0JhckxpbmUpIHtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImxpbmV0aGlja25lc3NcIiwgXCIwcHhcIik7XG4gIH0gZWxzZSBpZiAoZ3JvdXAuYmFyU2l6ZSkge1xuICAgIHZhciBydWxlV2lkdGggPSB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLmJhclNpemUsIG9wdGlvbnMpO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibGluZXRoaWNrbmVzc1wiLCBydWxlV2lkdGggKyBcImVtXCIpO1xuICB9XG5cbiAgdmFyIHN0eWxlID0gZ2VuZnJhY19hZGp1c3RTdHlsZShncm91cC5zaXplLCBvcHRpb25zLnN0eWxlKTtcblxuICBpZiAoc3R5bGUuc2l6ZSAhPT0gb3B0aW9ucy5zdHlsZS5zaXplKSB7XG4gICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXN0eWxlXCIsIFtub2RlXSk7XG4gICAgdmFyIGlzRGlzcGxheSA9IHN0eWxlLnNpemUgPT09IHNyY19TdHlsZS5ESVNQTEFZLnNpemUgPyBcInRydWVcIiA6IFwiZmFsc2VcIjtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImRpc3BsYXlzdHlsZVwiLCBpc0Rpc3BsYXkpO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic2NyaXB0bGV2ZWxcIiwgXCIwXCIpO1xuICB9XG5cbiAgaWYgKGdyb3VwLmxlZnREZWxpbSAhPSBudWxsIHx8IGdyb3VwLnJpZ2h0RGVsaW0gIT0gbnVsbCkge1xuICAgIHZhciB3aXRoRGVsaW1zID0gW107XG5cbiAgICBpZiAoZ3JvdXAubGVmdERlbGltICE9IG51bGwpIHtcbiAgICAgIHZhciBsZWZ0T3AgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFtuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZShncm91cC5sZWZ0RGVsaW0ucmVwbGFjZShcIlxcXFxcIiwgXCJcIikpXSk7XG4gICAgICBsZWZ0T3Auc2V0QXR0cmlidXRlKFwiZmVuY2VcIiwgXCJ0cnVlXCIpO1xuICAgICAgd2l0aERlbGltcy5wdXNoKGxlZnRPcCk7XG4gICAgfVxuXG4gICAgd2l0aERlbGltcy5wdXNoKG5vZGUpO1xuXG4gICAgaWYgKGdyb3VwLnJpZ2h0RGVsaW0gIT0gbnVsbCkge1xuICAgICAgdmFyIHJpZ2h0T3AgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFtuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZShncm91cC5yaWdodERlbGltLnJlcGxhY2UoXCJcXFxcXCIsIFwiXCIpKV0pO1xuICAgICAgcmlnaHRPcC5zZXRBdHRyaWJ1dGUoXCJmZW5jZVwiLCBcInRydWVcIik7XG4gICAgICB3aXRoRGVsaW1zLnB1c2gocmlnaHRPcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1aWxkTWF0aE1MX21ha2VSb3cod2l0aERlbGltcyk7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJnZW5mcmFjXCIsXG4gIG5hbWVzOiBbXCJcXFxcY2ZyYWNcIiwgXCJcXFxcZGZyYWNcIiwgXCJcXFxcZnJhY1wiLCBcIlxcXFx0ZnJhY1wiLCBcIlxcXFxkYmlub21cIiwgXCJcXFxcYmlub21cIiwgXCJcXFxcdGJpbm9tXCIsIFwiXFxcXFxcXFxhdG9wZnJhY1wiLCAvLyBjYW7igJl0IGJlIGVudGVyZWQgZGlyZWN0bHlcbiAgXCJcXFxcXFxcXGJyYWNlZnJhY1wiLCBcIlxcXFxcXFxcYnJhY2tmcmFjXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgZ3JlZWRpbmVzczogMlxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZi5wYXJzZXIsXG4gICAgICAgIGZ1bmNOYW1lID0gX3JlZi5mdW5jTmFtZTtcbiAgICB2YXIgbnVtZXIgPSBhcmdzWzBdO1xuICAgIHZhciBkZW5vbSA9IGFyZ3NbMV07XG4gICAgdmFyIGhhc0JhckxpbmU7XG4gICAgdmFyIGxlZnREZWxpbSA9IG51bGw7XG4gICAgdmFyIHJpZ2h0RGVsaW0gPSBudWxsO1xuICAgIHZhciBzaXplID0gXCJhdXRvXCI7XG5cbiAgICBzd2l0Y2ggKGZ1bmNOYW1lKSB7XG4gICAgICBjYXNlIFwiXFxcXGNmcmFjXCI6XG4gICAgICBjYXNlIFwiXFxcXGRmcmFjXCI6XG4gICAgICBjYXNlIFwiXFxcXGZyYWNcIjpcbiAgICAgIGNhc2UgXCJcXFxcdGZyYWNcIjpcbiAgICAgICAgaGFzQmFyTGluZSA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiXFxcXFxcXFxhdG9wZnJhY1wiOlxuICAgICAgICBoYXNCYXJMaW5lID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiXFxcXGRiaW5vbVwiOlxuICAgICAgY2FzZSBcIlxcXFxiaW5vbVwiOlxuICAgICAgY2FzZSBcIlxcXFx0Ymlub21cIjpcbiAgICAgICAgaGFzQmFyTGluZSA9IGZhbHNlO1xuICAgICAgICBsZWZ0RGVsaW0gPSBcIihcIjtcbiAgICAgICAgcmlnaHREZWxpbSA9IFwiKVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxcXFxcYnJhY2VmcmFjXCI6XG4gICAgICAgIGhhc0JhckxpbmUgPSBmYWxzZTtcbiAgICAgICAgbGVmdERlbGltID0gXCJcXFxce1wiO1xuICAgICAgICByaWdodERlbGltID0gXCJcXFxcfVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxcXFxcYnJhY2tmcmFjXCI6XG4gICAgICAgIGhhc0JhckxpbmUgPSBmYWxzZTtcbiAgICAgICAgbGVmdERlbGltID0gXCJbXCI7XG4gICAgICAgIHJpZ2h0RGVsaW0gPSBcIl1cIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVucmVjb2duaXplZCBnZW5mcmFjIGNvbW1hbmRcIik7XG4gICAgfVxuXG4gICAgc3dpdGNoIChmdW5jTmFtZSkge1xuICAgICAgY2FzZSBcIlxcXFxjZnJhY1wiOlxuICAgICAgY2FzZSBcIlxcXFxkZnJhY1wiOlxuICAgICAgY2FzZSBcIlxcXFxkYmlub21cIjpcbiAgICAgICAgc2l6ZSA9IFwiZGlzcGxheVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFx0ZnJhY1wiOlxuICAgICAgY2FzZSBcIlxcXFx0Ymlub21cIjpcbiAgICAgICAgc2l6ZSA9IFwidGV4dFwiO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJnZW5mcmFjXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGNvbnRpbnVlZDogZnVuY05hbWUgPT09IFwiXFxcXGNmcmFjXCIsXG4gICAgICBudW1lcjogbnVtZXIsXG4gICAgICBkZW5vbTogZGVub20sXG4gICAgICBoYXNCYXJMaW5lOiBoYXNCYXJMaW5lLFxuICAgICAgbGVmdERlbGltOiBsZWZ0RGVsaW0sXG4gICAgICByaWdodERlbGltOiByaWdodERlbGltLFxuICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgIGJhclNpemU6IG51bGxcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZ2VuZnJhY19odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogZ2VuZnJhY19tYXRobWxCdWlsZGVyXG59KTsgLy8gSW5maXggZ2VuZXJhbGl6ZWQgZnJhY3Rpb25zIC0tIHRoZXNlIGFyZSBub3QgcmVuZGVyZWQgZGlyZWN0bHksIGJ1dCByZXBsYWNlZFxuLy8gaW1tZWRpYXRlbHkgYnkgb25lIG9mIHRoZSB2YXJpYW50cyBhYm92ZS5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImluZml4XCIsXG4gIG5hbWVzOiBbXCJcXFxcb3ZlclwiLCBcIlxcXFxjaG9vc2VcIiwgXCJcXFxcYXRvcFwiLCBcIlxcXFxicmFjZVwiLCBcIlxcXFxicmFja1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIGluZml4OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZjIpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZjIucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWYyLmZ1bmNOYW1lLFxuICAgICAgICB0b2tlbiA9IF9yZWYyLnRva2VuO1xuICAgIHZhciByZXBsYWNlV2l0aDtcblxuICAgIHN3aXRjaCAoZnVuY05hbWUpIHtcbiAgICAgIGNhc2UgXCJcXFxcb3ZlclwiOlxuICAgICAgICByZXBsYWNlV2l0aCA9IFwiXFxcXGZyYWNcIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcY2hvb3NlXCI6XG4gICAgICAgIHJlcGxhY2VXaXRoID0gXCJcXFxcYmlub21cIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcYXRvcFwiOlxuICAgICAgICByZXBsYWNlV2l0aCA9IFwiXFxcXFxcXFxhdG9wZnJhY1wiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxicmFjZVwiOlxuICAgICAgICByZXBsYWNlV2l0aCA9IFwiXFxcXFxcXFxicmFjZWZyYWNcIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcYnJhY2tcIjpcbiAgICAgICAgcmVwbGFjZVdpdGggPSBcIlxcXFxcXFxcYnJhY2tmcmFjXCI7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgaW5maXggZ2VuZnJhYyBjb21tYW5kXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImluZml4XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIHJlcGxhY2VXaXRoOiByZXBsYWNlV2l0aCxcbiAgICAgIHRva2VuOiB0b2tlblxuICAgIH07XG4gIH1cbn0pO1xudmFyIHN0eWxBcnJheSA9IFtcImRpc3BsYXlcIiwgXCJ0ZXh0XCIsIFwic2NyaXB0XCIsIFwic2NyaXB0c2NyaXB0XCJdO1xuXG52YXIgZGVsaW1Gcm9tVmFsdWUgPSBmdW5jdGlvbiBkZWxpbUZyb21WYWx1ZShkZWxpbVN0cmluZykge1xuICB2YXIgZGVsaW0gPSBudWxsO1xuXG4gIGlmIChkZWxpbVN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgZGVsaW0gPSBkZWxpbVN0cmluZztcbiAgICBkZWxpbSA9IGRlbGltID09PSBcIi5cIiA/IG51bGwgOiBkZWxpbTtcbiAgfVxuXG4gIHJldHVybiBkZWxpbTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJnZW5mcmFjXCIsXG4gIG5hbWVzOiBbXCJcXFxcZ2VuZnJhY1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiA2LFxuICAgIGdyZWVkaW5lc3M6IDYsXG4gICAgYXJnVHlwZXM6IFtcIm1hdGhcIiwgXCJtYXRoXCIsIFwic2l6ZVwiLCBcInRleHRcIiwgXCJtYXRoXCIsIFwibWF0aFwiXVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYzLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYzLnBhcnNlcjtcbiAgICB2YXIgbnVtZXIgPSBhcmdzWzRdO1xuICAgIHZhciBkZW5vbSA9IGFyZ3NbNV07IC8vIExvb2sgaW50byB0aGUgcGFyc2Ugbm9kZXMgdG8gZ2V0IHRoZSBkZXNpcmVkIGRlbGltaXRlcnMuXG5cbiAgICB2YXIgbGVmdE5vZGUgPSBjaGVja05vZGVUeXBlKGFyZ3NbMF0sIFwiYXRvbVwiKTtcblxuICAgIGlmIChsZWZ0Tm9kZSkge1xuICAgICAgbGVmdE5vZGUgPSBhc3NlcnRBdG9tRmFtaWx5KGFyZ3NbMF0sIFwib3BlblwiKTtcbiAgICB9XG5cbiAgICB2YXIgbGVmdERlbGltID0gbGVmdE5vZGUgPyBkZWxpbUZyb21WYWx1ZShsZWZ0Tm9kZS50ZXh0KSA6IG51bGw7XG4gICAgdmFyIHJpZ2h0Tm9kZSA9IGNoZWNrTm9kZVR5cGUoYXJnc1sxXSwgXCJhdG9tXCIpO1xuXG4gICAgaWYgKHJpZ2h0Tm9kZSkge1xuICAgICAgcmlnaHROb2RlID0gYXNzZXJ0QXRvbUZhbWlseShhcmdzWzFdLCBcImNsb3NlXCIpO1xuICAgIH1cblxuICAgIHZhciByaWdodERlbGltID0gcmlnaHROb2RlID8gZGVsaW1Gcm9tVmFsdWUocmlnaHROb2RlLnRleHQpIDogbnVsbDtcbiAgICB2YXIgYmFyTm9kZSA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMl0sIFwic2l6ZVwiKTtcbiAgICB2YXIgaGFzQmFyTGluZTtcbiAgICB2YXIgYmFyU2l6ZSA9IG51bGw7XG5cbiAgICBpZiAoYmFyTm9kZS5pc0JsYW5rKSB7XG4gICAgICAvLyBcXGdlbmZyYWMgYWN0cyBkaWZmZXJlbnRseSB0aGFuIFxcYWJvdmUuXG4gICAgICAvLyBcXGdlbmZyYWMgdHJlYXRzIGFuIGVtcHR5IHNpemUgZ3JvdXAgYXMgYSBzaWduYWwgdG8gdXNlIGFcbiAgICAgIC8vIHN0YW5kYXJkIGJhciBzaXplLiBcXGFib3ZlIHdvdWxkIHNlZSBzaXplID0gMCBhbmQgb21pdCB0aGUgYmFyLlxuICAgICAgaGFzQmFyTGluZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhclNpemUgPSBiYXJOb2RlLnZhbHVlO1xuICAgICAgaGFzQmFyTGluZSA9IGJhclNpemUubnVtYmVyID4gMDtcbiAgICB9IC8vIEZpbmQgb3V0IGlmIHdlIHdhbnQgZGlzcGxheXN0eWxlLCB0ZXh0c3R5bGUsIGV0Yy5cblxuXG4gICAgdmFyIHNpemUgPSBcImF1dG9cIjtcbiAgICB2YXIgc3R5bCA9IGNoZWNrTm9kZVR5cGUoYXJnc1szXSwgXCJvcmRncm91cFwiKTtcblxuICAgIGlmIChzdHlsKSB7XG4gICAgICBpZiAoc3R5bC5ib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIHRleHRPcmQgPSBhc3NlcnROb2RlVHlwZShzdHlsLmJvZHlbMF0sIFwidGV4dG9yZFwiKTtcbiAgICAgICAgc2l6ZSA9IHN0eWxBcnJheVtOdW1iZXIodGV4dE9yZC50ZXh0KV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWwgPSBhc3NlcnROb2RlVHlwZShhcmdzWzNdLCBcInRleHRvcmRcIik7XG4gICAgICBzaXplID0gc3R5bEFycmF5W051bWJlcihzdHlsLnRleHQpXTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJnZW5mcmFjXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG51bWVyOiBudW1lcixcbiAgICAgIGRlbm9tOiBkZW5vbSxcbiAgICAgIGNvbnRpbnVlZDogZmFsc2UsXG4gICAgICBoYXNCYXJMaW5lOiBoYXNCYXJMaW5lLFxuICAgICAgYmFyU2l6ZTogYmFyU2l6ZSxcbiAgICAgIGxlZnREZWxpbTogbGVmdERlbGltLFxuICAgICAgcmlnaHREZWxpbTogcmlnaHREZWxpbSxcbiAgICAgIHNpemU6IHNpemVcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZ2VuZnJhY19odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogZ2VuZnJhY19tYXRobWxCdWlsZGVyXG59KTsgLy8gXFxhYm92ZSBpcyBhbiBpbmZpeCBmcmFjdGlvbiB0aGF0IGFsc28gZGVmaW5lcyBhIGZyYWN0aW9uIGJhciBzaXplLlxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaW5maXhcIixcbiAgbmFtZXM6IFtcIlxcXFxhYm92ZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJzaXplXCJdLFxuICAgIGluZml4OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZjQsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZjQucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWY0LmZ1bmNOYW1lLFxuICAgICAgICB0b2tlbiA9IF9yZWY0LnRva2VuO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImluZml4XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIHJlcGxhY2VXaXRoOiBcIlxcXFxcXFxcYWJvdmVmcmFjXCIsXG4gICAgICBzaXplOiBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcInNpemVcIikudmFsdWUsXG4gICAgICB0b2tlbjogdG9rZW5cbiAgICB9O1xuICB9XG59KTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJnZW5mcmFjXCIsXG4gIG5hbWVzOiBbXCJcXFxcXFxcXGFib3ZlZnJhY1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAzLFxuICAgIGFyZ1R5cGVzOiBbXCJtYXRoXCIsIFwic2l6ZVwiLCBcIm1hdGhcIl1cbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmNSwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmNS5wYXJzZXIsXG4gICAgICAgIGZ1bmNOYW1lID0gX3JlZjUuZnVuY05hbWU7XG4gICAgdmFyIG51bWVyID0gYXJnc1swXTtcbiAgICB2YXIgYmFyU2l6ZSA9IGFzc2VydChhc3NlcnROb2RlVHlwZShhcmdzWzFdLCBcImluZml4XCIpLnNpemUpO1xuICAgIHZhciBkZW5vbSA9IGFyZ3NbMl07XG4gICAgdmFyIGhhc0JhckxpbmUgPSBiYXJTaXplLm51bWJlciA+IDA7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZ2VuZnJhY1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBudW1lcjogbnVtZXIsXG4gICAgICBkZW5vbTogZGVub20sXG4gICAgICBjb250aW51ZWQ6IGZhbHNlLFxuICAgICAgaGFzQmFyTGluZTogaGFzQmFyTGluZSxcbiAgICAgIGJhclNpemU6IGJhclNpemUsXG4gICAgICBsZWZ0RGVsaW06IG51bGwsXG4gICAgICByaWdodERlbGltOiBudWxsLFxuICAgICAgc2l6ZTogXCJhdXRvXCJcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZ2VuZnJhY19odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogZ2VuZnJhY19tYXRobWxCdWlsZGVyXG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9ob3JpekJyYWNlLmpzXG5cblxuXG5cblxuXG5cblxuLy8gTk9URTogVW5saWtlIG1vc3QgYGh0bWxCdWlsZGVyYHMsIHRoaXMgb25lIGhhbmRsZXMgbm90IG9ubHkgXCJob3JpekJyYWNlXCIsIGJ1dFxudmFyIGhvcml6QnJhY2VfaHRtbEJ1aWxkZXIgPSBmdW5jdGlvbiBodG1sQnVpbGRlcihncnAsIG9wdGlvbnMpIHtcbiAgdmFyIHN0eWxlID0gb3B0aW9ucy5zdHlsZTsgLy8gUHVsbCBvdXQgdGhlIGBQYXJzZU5vZGU8XCJob3JpekJyYWNlXCI+YCBpZiBgZ3JwYCBpcyBhIFwic3Vwc3ViXCIgbm9kZS5cblxuICB2YXIgc3VwU3ViR3JvdXA7XG4gIHZhciBncm91cDtcbiAgdmFyIHN1cFN1YiA9IGNoZWNrTm9kZVR5cGUoZ3JwLCBcInN1cHN1YlwiKTtcblxuICBpZiAoc3VwU3ViKSB7XG4gICAgLy8gUmVmOiBMYVRlWCBzb3VyY2UyZTogfX19fVxcbGltaXRzfVxuICAgIC8vIGkuZS4gTGFUZVggdHJlYXRzIHRoZSBicmFjZSBzaW1pbGFyIHRvIGFuIG9wIGFuZCBwYXNzZXMgaXRcbiAgICAvLyB3aXRoIFxcbGltaXRzLCBzbyB3ZSBuZWVkIHRvIGFzc2lnbiBzdXBzdWIgc3R5bGUuXG4gICAgc3VwU3ViR3JvdXAgPSBzdXBTdWIuc3VwID8gYnVpbGRIVE1MX2J1aWxkR3JvdXAoc3VwU3ViLnN1cCwgb3B0aW9ucy5oYXZpbmdTdHlsZShzdHlsZS5zdXAoKSksIG9wdGlvbnMpIDogYnVpbGRIVE1MX2J1aWxkR3JvdXAoc3VwU3ViLnN1Yiwgb3B0aW9ucy5oYXZpbmdTdHlsZShzdHlsZS5zdWIoKSksIG9wdGlvbnMpO1xuICAgIGdyb3VwID0gYXNzZXJ0Tm9kZVR5cGUoc3VwU3ViLmJhc2UsIFwiaG9yaXpCcmFjZVwiKTtcbiAgfSBlbHNlIHtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKGdycCwgXCJob3JpekJyYWNlXCIpO1xuICB9IC8vIEJ1aWxkIHRoZSBiYXNlIGdyb3VwXG5cblxuICB2YXIgYm9keSA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJhc2UsIG9wdGlvbnMuaGF2aW5nQmFzZVN0eWxlKHNyY19TdHlsZS5ESVNQTEFZKSk7IC8vIENyZWF0ZSB0aGUgc3RyZXRjaHkgZWxlbWVudFxuXG4gIHZhciBicmFjZUJvZHkgPSBzdHJldGNoeS5zdmdTcGFuKGdyb3VwLCBvcHRpb25zKTsgLy8gR2VuZXJhdGUgdGhlIHZsaXN0LCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBrZXJucyAgICAgICAg4pSP4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSTXG4gIC8vIFRoaXMgZmlyc3Qgdmxpc3QgY29udGFpbnMgdGhlIGNvbnRlbnQgYW5kIHRoZSBicmFjZTogICBlcXVhdGlvblxuXG4gIHZhciB2bGlzdDtcblxuICBpZiAoZ3JvdXAuaXNPdmVyKSB7XG4gICAgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImZpcnN0QmFzZWxpbmVcIixcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogYm9keVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogMC4xXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBicmFjZUJvZHlcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7IC8vICRGbG93Rml4TWU6IFJlcGxhY2UgdGhpcyB3aXRoIHBhc3NpbmcgXCJzdmctYWxpZ25cIiBpbnRvIG1ha2VWTGlzdC5cblxuICAgIHZsaXN0LmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzFdLmNsYXNzZXMucHVzaChcInN2Zy1hbGlnblwiKTtcbiAgfSBlbHNlIHtcbiAgICB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IGJvZHkuZGVwdGggKyAwLjEgKyBicmFjZUJvZHkuaGVpZ2h0LFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBicmFjZUJvZHlcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IDAuMVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogYm9keVxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTsgLy8gJEZsb3dGaXhNZTogUmVwbGFjZSB0aGlzIHdpdGggcGFzc2luZyBcInN2Zy1hbGlnblwiIGludG8gbWFrZVZMaXN0LlxuXG4gICAgdmxpc3QuY2hpbGRyZW5bMF0uY2hpbGRyZW5bMF0uY2hpbGRyZW5bMF0uY2xhc3Nlcy5wdXNoKFwic3ZnLWFsaWduXCIpO1xuICB9XG5cbiAgaWYgKHN1cFN1Ykdyb3VwKSB7XG4gICAgLy8gVG8gd3JpdGUgdGhlIHN1cHN1Yiwgd3JhcCB0aGUgZmlyc3Qgdmxpc3QgaW4gYW5vdGhlciB2bGlzdDpcbiAgICAvLyBUaGV5IGNhbid0IGFsbCBnbyBpbiB0aGUgc2FtZSB2bGlzdCwgYmVjYXVzZSB0aGUgbm90ZSBtaWdodCBiZVxuICAgIC8vIHdpZGVyIHRoYW4gdGhlIGVxdWF0aW9uLiBXZSB3YW50IHRoZSBlcXVhdGlvbiB0byBjb250cm9sIHRoZVxuICAgIC8vIGJyYWNlIHdpZHRoLlxuICAgIC8vICAgICAgbm90ZSAgICAgICAgICBsb25nIG5vdGUgICAgICAgICAgIGxvbmcgbm90ZVxuICAgIC8vICAg4pSP4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSTICAgb3IgICAg4pSP4pSB4pSB4pSB4pSTICAgICBub3QgICAg4pSP4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSTXG4gICAgLy8gICAgZXF1YXRpb24gICAgICAgICAgIGVxbiAgICAgICAgICAgICAgICAgZXFuXG4gICAgdmFyIHZTcGFuID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBncm91cC5pc092ZXIgPyBcIm1vdmVyXCIgOiBcIm11bmRlclwiXSwgW3ZsaXN0XSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoZ3JvdXAuaXNPdmVyKSB7XG4gICAgICB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJmaXJzdEJhc2VsaW5lXCIsXG4gICAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IHZTcGFuXG4gICAgICAgIH0sIHtcbiAgICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgICBzaXplOiAwLjJcbiAgICAgICAgfSwge1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IHN1cFN1Ykdyb3VwXG4gICAgICAgIH1dXG4gICAgICB9LCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICAgIHBvc2l0aW9uRGF0YTogdlNwYW4uZGVwdGggKyAwLjIgKyBzdXBTdWJHcm91cC5oZWlnaHQgKyBzdXBTdWJHcm91cC5kZXB0aCxcbiAgICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogc3VwU3ViR3JvdXBcbiAgICAgICAgfSwge1xuICAgICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICAgIHNpemU6IDAuMlxuICAgICAgICB9LCB7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogdlNwYW5cbiAgICAgICAgfV1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCIsIGdyb3VwLmlzT3ZlciA/IFwibW92ZXJcIiA6IFwibXVuZGVyXCJdLCBbdmxpc3RdLCBvcHRpb25zKTtcbn07XG5cbnZhciBob3JpekJyYWNlX21hdGhtbEJ1aWxkZXIgPSBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gIHZhciBhY2NlbnROb2RlID0gc3RyZXRjaHkubWF0aE1Mbm9kZShncm91cC5sYWJlbCk7XG4gIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShncm91cC5pc092ZXIgPyBcIm1vdmVyXCIgOiBcIm11bmRlclwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5iYXNlLCBvcHRpb25zKSwgYWNjZW50Tm9kZV0pO1xufTsgLy8gSG9yaXpvbnRhbCBzdHJldGNoeSBicmFjZXNcblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaG9yaXpCcmFjZVwiLFxuICBuYW1lczogW1wiXFxcXG92ZXJicmFjZVwiLCBcIlxcXFx1bmRlcmJyYWNlXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWYuZnVuY05hbWU7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiaG9yaXpCcmFjZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBpc092ZXI6IC9eXFxcXG92ZXIvLnRlc3QoZnVuY05hbWUpLFxuICAgICAgYmFzZTogYXJnc1swXVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBob3JpekJyYWNlX2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBob3JpekJyYWNlX21hdGhtbEJ1aWxkZXJcbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2hyZWYuanNcblxuXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJocmVmXCIsXG4gIG5hbWVzOiBbXCJcXFxcaHJlZlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyLFxuICAgIGFyZ1R5cGVzOiBbXCJ1cmxcIiwgXCJvcmlnaW5hbFwiXSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMV07XG4gICAgdmFyIGhyZWYgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcInVybFwiKS51cmw7XG5cbiAgICBpZiAoIXBhcnNlci5zZXR0aW5ncy5pc1RydXN0ZWQoe1xuICAgICAgY29tbWFuZDogXCJcXFxcaHJlZlwiLFxuICAgICAgdXJsOiBocmVmXG4gICAgfSkpIHtcbiAgICAgIHJldHVybiBwYXJzZXIuZm9ybWF0VW5zdXBwb3J0ZWRDbWQoXCJcXFxcaHJlZlwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJocmVmXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICBib2R5OiBkZWZpbmVGdW5jdGlvbl9vcmRhcmd1bWVudChib2R5KVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBlbGVtZW50cyA9IGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucywgZmFsc2UpO1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlQW5jaG9yKGdyb3VwLmhyZWYsIFtdLCBlbGVtZW50cywgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbWF0aCA9IGJ1aWxkRXhwcmVzc2lvblJvdyhncm91cC5ib2R5LCBvcHRpb25zKTtcblxuICAgIGlmICghKG1hdGggaW5zdGFuY2VvZiBtYXRoTUxUcmVlX01hdGhOb2RlKSkge1xuICAgICAgbWF0aCA9IG5ldyBtYXRoTUxUcmVlX01hdGhOb2RlKFwibXJvd1wiLCBbbWF0aF0pO1xuICAgIH1cblxuICAgIG1hdGguc2V0QXR0cmlidXRlKFwiaHJlZlwiLCBncm91cC5ocmVmKTtcbiAgICByZXR1cm4gbWF0aDtcbiAgfVxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaHJlZlwiLFxuICBuYW1lczogW1wiXFxcXHVybFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJ1cmxcIl0sXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYyLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYyLnBhcnNlcjtcbiAgICB2YXIgaHJlZiA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwidXJsXCIpLnVybDtcblxuICAgIGlmICghcGFyc2VyLnNldHRpbmdzLmlzVHJ1c3RlZCh7XG4gICAgICBjb21tYW5kOiBcIlxcXFx1cmxcIixcbiAgICAgIHVybDogaHJlZlxuICAgIH0pKSB7XG4gICAgICByZXR1cm4gcGFyc2VyLmZvcm1hdFVuc3VwcG9ydGVkQ21kKFwiXFxcXHVybFwiKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhcnMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaHJlZi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGMgPSBocmVmW2ldO1xuXG4gICAgICBpZiAoYyA9PT0gXCJ+XCIpIHtcbiAgICAgICAgYyA9IFwiXFxcXHRleHRhc2NpaXRpbGRlXCI7XG4gICAgICB9XG5cbiAgICAgIGNoYXJzLnB1c2goe1xuICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgbW9kZTogXCJ0ZXh0XCIsXG4gICAgICAgIHRleHQ6IGNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBib2R5ID0ge1xuICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGZvbnQ6IFwiXFxcXHRleHR0dFwiLFxuICAgICAgYm9keTogY2hhcnNcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImhyZWZcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgaHJlZjogaHJlZixcbiAgICAgIGJvZHk6IGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGJvZHkpXG4gICAgfTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvaHRtbG1hdGhtbC5qc1xuXG5cblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaHRtbG1hdGhtbFwiLFxuICBuYW1lczogW1wiXFxcXGh0bWxAbWF0aG1sXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZi5wYXJzZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiaHRtbG1hdGhtbFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBodG1sOiBkZWZpbmVGdW5jdGlvbl9vcmRhcmd1bWVudChhcmdzWzBdKSxcbiAgICAgIG1hdGhtbDogZGVmaW5lRnVuY3Rpb25fb3JkYXJndW1lbnQoYXJnc1sxXSlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBidWlsZEhUTUxfYnVpbGRFeHByZXNzaW9uKGdyb3VwLmh0bWwsIG9wdGlvbnMsIGZhbHNlKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUZyYWdtZW50KGVsZW1lbnRzKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHJldHVybiBidWlsZEV4cHJlc3Npb25Sb3coZ3JvdXAubWF0aG1sLCBvcHRpb25zKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvaW5jbHVkZWdyYXBoaWNzLmpzXG5cblxuXG5cblxuXG5cbnZhciBpbmNsdWRlZ3JhcGhpY3Nfc2l6ZURhdGEgPSBmdW5jdGlvbiBzaXplRGF0YShzdHIpIHtcbiAgaWYgKC9eWy0rXT8gKihcXGQrKFxcLlxcZCopP3xcXC5cXGQrKSQvLnRlc3Qoc3RyKSkge1xuICAgIC8vIHN0ciBpcyBhIG51bWJlciB3aXRoIG5vIHVuaXQgc3BlY2lmaWVkLlxuICAgIC8vIGRlZmF1bHQgdW5pdCBpcyBicCwgcGVyIGdyYXBoaXggcGFja2FnZS5cbiAgICByZXR1cm4ge1xuICAgICAgbnVtYmVyOiArc3RyLFxuICAgICAgdW5pdDogXCJicFwiXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbWF0Y2ggPSAvKFstK10/KSAqKFxcZCsoPzpcXC5cXGQqKT98XFwuXFxkKykgKihbYS16XXsyfSkvLmV4ZWMoc3RyKTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgc2l6ZTogJ1wiICsgc3RyICsgXCInIGluIFxcXFxpbmNsdWRlZ3JhcGhpY3NcIik7XG4gICAgfVxuXG4gICAgdmFyIGRhdGEgPSB7XG4gICAgICBudW1iZXI6ICsobWF0Y2hbMV0gKyBtYXRjaFsyXSksXG4gICAgICAvLyBzaWduICsgbWFnbml0dWRlLCBjYXN0IHRvIG51bWJlclxuICAgICAgdW5pdDogbWF0Y2hbM11cbiAgICB9O1xuXG4gICAgaWYgKCF2YWxpZFVuaXQoZGF0YSkpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgdW5pdDogJ1wiICsgZGF0YS51bml0ICsgXCInIGluIFxcXFxpbmNsdWRlZ3JhcGhpY3MuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG59O1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaW5jbHVkZWdyYXBoaWNzXCIsXG4gIG5hbWVzOiBbXCJcXFxcaW5jbHVkZWdyYXBoaWNzXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgbnVtT3B0aW9uYWxBcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJyYXdcIiwgXCJ1cmxcIl0sXG4gICAgYWxsb3dlZEluVGV4dDogZmFsc2VcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzLCBvcHRBcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyO1xuICAgIHZhciB3aWR0aCA9IHtcbiAgICAgIG51bWJlcjogMCxcbiAgICAgIHVuaXQ6IFwiZW1cIlxuICAgIH07XG4gICAgdmFyIGhlaWdodCA9IHtcbiAgICAgIG51bWJlcjogMC45LFxuICAgICAgdW5pdDogXCJlbVwiXG4gICAgfTsgLy8gc29ydGEgY2hhcmFjdGVyIHNpemVkLlxuXG4gICAgdmFyIHRvdGFsaGVpZ2h0ID0ge1xuICAgICAgbnVtYmVyOiAwLFxuICAgICAgdW5pdDogXCJlbVwiXG4gICAgfTtcbiAgICB2YXIgYWx0ID0gXCJcIjtcblxuICAgIGlmIChvcHRBcmdzWzBdKSB7XG4gICAgICB2YXIgYXR0cmlidXRlU3RyID0gYXNzZXJ0Tm9kZVR5cGUob3B0QXJnc1swXSwgXCJyYXdcIikuc3RyaW5nOyAvLyBQYXJzZXIuanMgZG9lcyBub3QgcGFyc2Uga2V5L3ZhbHVlIHBhaXJzLiBXZSBnZXQgYSBzdHJpbmcuXG5cbiAgICAgIHZhciBhdHRyaWJ1dGVzID0gYXR0cmlidXRlU3RyLnNwbGl0KFwiLFwiKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBrZXlWYWwgPSBhdHRyaWJ1dGVzW2ldLnNwbGl0KFwiPVwiKTtcblxuICAgICAgICBpZiAoa2V5VmFsLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHZhciBzdHIgPSBrZXlWYWxbMV0udHJpbSgpO1xuXG4gICAgICAgICAgc3dpdGNoIChrZXlWYWxbMF0udHJpbSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiYWx0XCI6XG4gICAgICAgICAgICAgIGFsdCA9IHN0cjtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJ3aWR0aFwiOlxuICAgICAgICAgICAgICB3aWR0aCA9IGluY2x1ZGVncmFwaGljc19zaXplRGF0YShzdHIpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcImhlaWdodFwiOlxuICAgICAgICAgICAgICBoZWlnaHQgPSBpbmNsdWRlZ3JhcGhpY3Nfc2l6ZURhdGEoc3RyKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJ0b3RhbGhlaWdodFwiOlxuICAgICAgICAgICAgICB0b3RhbGhlaWdodCA9IGluY2x1ZGVncmFwaGljc19zaXplRGF0YShzdHIpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCBrZXk6ICdcIiArIGtleVZhbFswXSArIFwiJyBpbiBcXFxcaW5jbHVkZWdyYXBoaWNzLlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc3JjID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXSwgXCJ1cmxcIikudXJsO1xuXG4gICAgaWYgKGFsdCA9PT0gXCJcIikge1xuICAgICAgLy8gTm8gYWx0IGdpdmVuLiBVc2UgdGhlIGZpbGUgbmFtZS4gU3RyaXAgYXdheSB0aGUgcGF0aC5cbiAgICAgIGFsdCA9IHNyYztcbiAgICAgIGFsdCA9IGFsdC5yZXBsYWNlKC9eLipbXFxcXC9dLywgJycpO1xuICAgICAgYWx0ID0gYWx0LnN1YnN0cmluZygwLCBhbHQubGFzdEluZGV4T2YoJy4nKSk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZXIuc2V0dGluZ3MuaXNUcnVzdGVkKHtcbiAgICAgIGNvbW1hbmQ6IFwiXFxcXGluY2x1ZGVncmFwaGljc1wiLFxuICAgICAgdXJsOiBzcmNcbiAgICB9KSkge1xuICAgICAgcmV0dXJuIHBhcnNlci5mb3JtYXRVbnN1cHBvcnRlZENtZChcIlxcXFxpbmNsdWRlZ3JhcGhpY3NcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiaW5jbHVkZWdyYXBoaWNzXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGFsdDogYWx0LFxuICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICB0b3RhbGhlaWdodDogdG90YWxoZWlnaHQsXG4gICAgICBzcmM6IHNyY1xuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBoZWlnaHQgPSB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLmhlaWdodCwgb3B0aW9ucyk7XG4gICAgdmFyIGRlcHRoID0gMDtcblxuICAgIGlmIChncm91cC50b3RhbGhlaWdodC5udW1iZXIgPiAwKSB7XG4gICAgICBkZXB0aCA9IHVuaXRzX2NhbGN1bGF0ZVNpemUoZ3JvdXAudG90YWxoZWlnaHQsIG9wdGlvbnMpIC0gaGVpZ2h0O1xuICAgICAgZGVwdGggPSBOdW1iZXIoZGVwdGgudG9GaXhlZCgyKSk7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gMDtcblxuICAgIGlmIChncm91cC53aWR0aC5udW1iZXIgPiAwKSB7XG4gICAgICB3aWR0aCA9IHVuaXRzX2NhbGN1bGF0ZVNpemUoZ3JvdXAud2lkdGgsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHZhciBzdHlsZSA9IHtcbiAgICAgIGhlaWdodDogaGVpZ2h0ICsgZGVwdGggKyBcImVtXCJcbiAgICB9O1xuXG4gICAgaWYgKHdpZHRoID4gMCkge1xuICAgICAgc3R5bGUud2lkdGggPSB3aWR0aCArIFwiZW1cIjtcbiAgICB9XG5cbiAgICBpZiAoZGVwdGggPiAwKSB7XG4gICAgICBzdHlsZS52ZXJ0aWNhbEFsaWduID0gLWRlcHRoICsgXCJlbVwiO1xuICAgIH1cblxuICAgIHZhciBub2RlID0gbmV3IGRvbVRyZWVfSW1nKGdyb3VwLnNyYywgZ3JvdXAuYWx0LCBzdHlsZSk7XG4gICAgbm9kZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgbm9kZS5kZXB0aCA9IGRlcHRoO1xuICAgIHJldHVybiBub2RlO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1nbHlwaFwiLCBbXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJhbHRcIiwgZ3JvdXAuYWx0KTtcbiAgICB2YXIgaGVpZ2h0ID0gdW5pdHNfY2FsY3VsYXRlU2l6ZShncm91cC5oZWlnaHQsIG9wdGlvbnMpO1xuICAgIHZhciBkZXB0aCA9IDA7XG5cbiAgICBpZiAoZ3JvdXAudG90YWxoZWlnaHQubnVtYmVyID4gMCkge1xuICAgICAgZGVwdGggPSB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLnRvdGFsaGVpZ2h0LCBvcHRpb25zKSAtIGhlaWdodDtcbiAgICAgIGRlcHRoID0gZGVwdGgudG9GaXhlZCgyKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwidmFsaWduXCIsIFwiLVwiICsgZGVwdGggKyBcImVtXCIpO1xuICAgIH1cblxuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGhlaWdodCArIGRlcHRoICsgXCJlbVwiKTtcblxuICAgIGlmIChncm91cC53aWR0aC5udW1iZXIgPiAwKSB7XG4gICAgICB2YXIgd2lkdGggPSB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLndpZHRoLCBvcHRpb25zKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgd2lkdGggKyBcImVtXCIpO1xuICAgIH1cblxuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic3JjXCIsIGdyb3VwLnNyYyk7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2tlcm4uanNcbi8vIEhvcml6b250YWwgc3BhY2luZyBjb21tYW5kc1xuXG5cblxuXG4gLy8gVE9ETzogXFxoc2tpcCBhbmQgXFxtc2tpcCBzaG91bGQgc3VwcG9ydCBwbHVzIGFuZCBtaW51cyBpbiBsZW5ndGhzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJrZXJuXCIsXG4gIG5hbWVzOiBbXCJcXFxca2VyblwiLCBcIlxcXFxta2VyblwiLCBcIlxcXFxoc2tpcFwiLCBcIlxcXFxtc2tpcFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJzaXplXCJdLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWYuZnVuY05hbWU7XG4gICAgdmFyIHNpemUgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcInNpemVcIik7XG5cbiAgICBpZiAocGFyc2VyLnNldHRpbmdzLnN0cmljdCkge1xuICAgICAgdmFyIG1hdGhGdW5jdGlvbiA9IGZ1bmNOYW1lWzFdID09PSAnbSc7IC8vIFxcbWtlcm4sIFxcbXNraXBcblxuICAgICAgdmFyIG11VW5pdCA9IHNpemUudmFsdWUudW5pdCA9PT0gJ211JztcblxuICAgICAgaWYgKG1hdGhGdW5jdGlvbikge1xuICAgICAgICBpZiAoIW11VW5pdCkge1xuICAgICAgICAgIHBhcnNlci5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJtYXRoVnNUZXh0VW5pdHNcIiwgXCJMYVRlWCdzIFwiICsgZnVuY05hbWUgKyBcIiBzdXBwb3J0cyBvbmx5IG11IHVuaXRzLCBcIiArIChcIm5vdCBcIiArIHNpemUudmFsdWUudW5pdCArIFwiIHVuaXRzXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZXIubW9kZSAhPT0gXCJtYXRoXCIpIHtcbiAgICAgICAgICBwYXJzZXIuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KFwibWF0aFZzVGV4dFVuaXRzXCIsIFwiTGFUZVgncyBcIiArIGZ1bmNOYW1lICsgXCIgd29ya3Mgb25seSBpbiBtYXRoIG1vZGVcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vICFtYXRoRnVuY3Rpb25cbiAgICAgICAgaWYgKG11VW5pdCkge1xuICAgICAgICAgIHBhcnNlci5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJtYXRoVnNUZXh0VW5pdHNcIiwgXCJMYVRlWCdzIFwiICsgZnVuY05hbWUgKyBcIiBkb2Vzbid0IHN1cHBvcnQgbXUgdW5pdHNcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGRpbWVuc2lvbjogc2l6ZS52YWx1ZVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlR2x1ZShncm91cC5kaW1lbnNpb24sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIGRpbWVuc2lvbiA9IHVuaXRzX2NhbGN1bGF0ZVNpemUoZ3JvdXAuZGltZW5zaW9uLCBvcHRpb25zKTtcbiAgICByZXR1cm4gbmV3IG1hdGhNTFRyZWUuU3BhY2VOb2RlKGRpbWVuc2lvbik7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2xhcC5qc1xuLy8gSG9yaXpvbnRhbCBvdmVybGFwIGZ1bmN0aW9uc1xuXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJsYXBcIixcbiAgbmFtZXM6IFtcIlxcXFxtYXRobGxhcFwiLCBcIlxcXFxtYXRocmxhcFwiLCBcIlxcXFxtYXRoY2xhcFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWYuZnVuY05hbWU7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImxhcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBhbGlnbm1lbnQ6IGZ1bmNOYW1lLnNsaWNlKDUpLFxuICAgICAgYm9keTogYm9keVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIG1hdGhsbGFwLCBtYXRocmxhcCwgbWF0aGNsYXBcbiAgICB2YXIgaW5uZXI7XG5cbiAgICBpZiAoZ3JvdXAuYWxpZ25tZW50ID09PSBcImNsYXBcIikge1xuICAgICAgLy8gcmVmOiBodHRwczovL3d3dy5tYXRoLmxzdS5lZHUvfmFwZXJsaXMvcHVibGljYXRpb25zL21hdGhjbGFwL1xuICAgICAgaW5uZXIgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXSwgW2J1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpXSk7IC8vIHdyYXAsIHNpbmNlIENTUyB3aWxsIGNlbnRlciBhIC5jbGFwID4gLmlubmVyID4gc3BhblxuXG4gICAgICBpbm5lciA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImlubmVyXCJdLCBbaW5uZXJdLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5uZXIgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJpbm5lclwiXSwgW2J1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpXSk7XG4gICAgfVxuXG4gICAgdmFyIGZpeCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImZpeFwiXSwgW10pO1xuICAgIHZhciBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW2dyb3VwLmFsaWdubWVudF0sIFtpbm5lciwgZml4XSwgb3B0aW9ucyk7IC8vIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgY29ycmVjdGx5IHNldCBob3Jpem9udGFsIGFsaWdubWVudCBvZiB0aGVcbiAgICAvLyB0d28gaXRlbXMgaW52b2x2ZWQgaW4gdGhlIGxhcC5cbiAgICAvLyBOZXh0LCB1c2UgYSBzdHJ1dCB0byBzZXQgdGhlIGhlaWdodCBvZiB0aGUgSFRNTCBib3VuZGluZyBib3guXG4gICAgLy8gT3RoZXJ3aXNlLCBhIHRhbGwgYXJndW1lbnQgbWF5IGJlIG1pc3BsYWNlZC5cblxuICAgIHZhciBzdHJ1dCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcInN0cnV0XCJdKTtcbiAgICBzdHJ1dC5zdHlsZS5oZWlnaHQgPSBub2RlLmhlaWdodCArIG5vZGUuZGVwdGggKyBcImVtXCI7XG4gICAgc3RydXQuc3R5bGUudmVydGljYWxBbGlnbiA9IC1ub2RlLmRlcHRoICsgXCJlbVwiO1xuICAgIG5vZGUuY2hpbGRyZW4udW5zaGlmdChzdHJ1dCk7IC8vIE5leHQsIHByZXZlbnQgdmVydGljYWwgbWlzcGxhY2VtZW50IHdoZW4gbmV4dCB0byBzb21ldGhpbmcgdGFsbC5cblxuICAgIG5vZGUgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImZpcnN0QmFzZWxpbmVcIixcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogbm9kZVxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTsgLy8gR2V0IHRoZSBob3Jpem9udGFsIHNwYWNpbmcgY29ycmVjdCByZWxhdGl2ZSB0byBhZGphY2VudCBpdGVtcy5cblxuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCJdLCBbbm9kZV0sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gbWF0aGxsYXAsIG1hdGhybGFwLCBtYXRoY2xhcFxuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcGFkZGVkXCIsIFtidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpXSk7XG5cbiAgICBpZiAoZ3JvdXAuYWxpZ25tZW50ICE9PSBcInJsYXBcIikge1xuICAgICAgdmFyIG9mZnNldCA9IGdyb3VwLmFsaWdubWVudCA9PT0gXCJsbGFwXCIgPyBcIi0xXCIgOiBcIi0wLjVcIjtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibHNwYWNlXCIsIG9mZnNldCArIFwid2lkdGhcIik7XG4gICAgfVxuXG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBcIjBweFwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvbWF0aC5qc1xuXG4gLy8gU3dpdGNoaW5nIGZyb20gdGV4dCBtb2RlIGJhY2sgdG8gbWF0aCBtb2RlXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJzdHlsaW5nXCIsXG4gIG5hbWVzOiBbXCJcXFxcKFwiLCBcIiRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGFsbG93ZWRJbk1hdGg6IGZhbHNlLFxuICAgIGNvbnN1bWVNb2RlOiBcIm1hdGhcIlxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lLFxuICAgICAgICBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICB2YXIgb3V0ZXJNb2RlID0gcGFyc2VyLm1vZGU7XG4gICAgcGFyc2VyLnN3aXRjaE1vZGUoXCJtYXRoXCIpO1xuICAgIHZhciBjbG9zZSA9IGZ1bmNOYW1lID09PSBcIlxcXFwoXCIgPyBcIlxcXFwpXCIgOiBcIiRcIjtcbiAgICB2YXIgYm9keSA9IHBhcnNlci5wYXJzZUV4cHJlc3Npb24oZmFsc2UsIGNsb3NlKTsgLy8gV2UgY2FuJ3QgZXhwYW5kIHRoZSBuZXh0IHN5bWJvbCBhZnRlciB0aGUgY2xvc2luZyAkIHVudGlsIGFmdGVyXG4gICAgLy8gc3dpdGNoaW5nIG1vZGVzIGJhY2suICBTbyBkb24ndCBjb25zdW1lIHdpdGhpbiBleHBlY3QuXG5cbiAgICBwYXJzZXIuZXhwZWN0KGNsb3NlLCBmYWxzZSk7XG4gICAgcGFyc2VyLnN3aXRjaE1vZGUob3V0ZXJNb2RlKTtcbiAgICBwYXJzZXIuY29uc3VtZSgpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInN0eWxpbmdcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgc3R5bGU6IFwidGV4dFwiLFxuICAgICAgYm9keTogYm9keVxuICAgIH07XG4gIH1cbn0pOyAvLyBDaGVjayBmb3IgZXh0cmEgY2xvc2luZyBtYXRoIGRlbGltaXRlcnNcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInRleHRcIixcbiAgLy8gRG9lc24ndCBtYXR0ZXIgd2hhdCB0aGlzIGlzLlxuICBuYW1lczogW1wiXFxcXClcIiwgXCJcXFxcXVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgYWxsb3dlZEluTWF0aDogZmFsc2VcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiTWlzbWF0Y2hlZCBcIiArIGNvbnRleHQuZnVuY05hbWUpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9tYXRoY2hvaWNlLmpzXG5cblxuXG5cblxuXG52YXIgbWF0aGNob2ljZV9jaG9vc2VNYXRoU3R5bGUgPSBmdW5jdGlvbiBjaG9vc2VNYXRoU3R5bGUoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgc3dpdGNoIChvcHRpb25zLnN0eWxlLnNpemUpIHtcbiAgICBjYXNlIHNyY19TdHlsZS5ESVNQTEFZLnNpemU6XG4gICAgICByZXR1cm4gZ3JvdXAuZGlzcGxheTtcblxuICAgIGNhc2Ugc3JjX1N0eWxlLlRFWFQuc2l6ZTpcbiAgICAgIHJldHVybiBncm91cC50ZXh0O1xuXG4gICAgY2FzZSBzcmNfU3R5bGUuU0NSSVBULnNpemU6XG4gICAgICByZXR1cm4gZ3JvdXAuc2NyaXB0O1xuXG4gICAgY2FzZSBzcmNfU3R5bGUuU0NSSVBUU0NSSVBULnNpemU6XG4gICAgICByZXR1cm4gZ3JvdXAuc2NyaXB0c2NyaXB0O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBncm91cC50ZXh0O1xuICB9XG59O1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibWF0aGNob2ljZVwiLFxuICBuYW1lczogW1wiXFxcXG1hdGhjaG9pY2VcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogNFxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZi5wYXJzZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwibWF0aGNob2ljZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBkaXNwbGF5OiBkZWZpbmVGdW5jdGlvbl9vcmRhcmd1bWVudChhcmdzWzBdKSxcbiAgICAgIHRleHQ6IGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGFyZ3NbMV0pLFxuICAgICAgc2NyaXB0OiBkZWZpbmVGdW5jdGlvbl9vcmRhcmd1bWVudChhcmdzWzJdKSxcbiAgICAgIHNjcmlwdHNjcmlwdDogZGVmaW5lRnVuY3Rpb25fb3JkYXJndW1lbnQoYXJnc1szXSlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgYm9keSA9IG1hdGhjaG9pY2VfY2hvb3NlTWF0aFN0eWxlKGdyb3VwLCBvcHRpb25zKTtcbiAgICB2YXIgZWxlbWVudHMgPSBidWlsZEhUTUxfYnVpbGRFeHByZXNzaW9uKGJvZHksIG9wdGlvbnMsIGZhbHNlKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUZyYWdtZW50KGVsZW1lbnRzKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBib2R5ID0gbWF0aGNob2ljZV9jaG9vc2VNYXRoU3R5bGUoZ3JvdXAsIG9wdGlvbnMpO1xuICAgIHJldHVybiBidWlsZEV4cHJlc3Npb25Sb3coYm9keSwgb3B0aW9ucyk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3V0aWxzL2Fzc2VtYmxlU3VwU3ViLmpzXG5cblxuLy8gRm9yIGFuIG9wZXJhdG9yIHdpdGggbGltaXRzLCBhc3NlbWJsZSB0aGUgYmFzZSwgc3VwLCBhbmQgc3ViIGludG8gYSBzcGFuLlxudmFyIGFzc2VtYmxlU3VwU3ViX2Fzc2VtYmxlU3VwU3ViID0gZnVuY3Rpb24gYXNzZW1ibGVTdXBTdWIoYmFzZSwgc3VwR3JvdXAsIHN1Ykdyb3VwLCBvcHRpb25zLCBzdHlsZSwgc2xhbnQsIGJhc2VTaGlmdCkge1xuICAvLyBJRSA4IGNsaXBzIFxcaW50IGlmIGl0IGlzIGluIGEgZGlzcGxheTogaW5saW5lLWJsb2NrLiBXZSB3cmFwIGl0XG4gIC8vIGluIGEgbmV3IHNwYW4gc28gaXQgaXMgYW4gaW5saW5lLCBhbmQgd29ya3MuXG4gIGJhc2UgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXSwgW2Jhc2VdKTtcbiAgdmFyIHN1YjtcbiAgdmFyIHN1cDsgLy8gV2UgbWFudWFsbHkgaGF2ZSB0byBoYW5kbGUgdGhlIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cy4gVGhpcyxcbiAgLy8gYXNpZGUgZnJvbSB0aGUga2VybiBjYWxjdWxhdGlvbnMsIGlzIGNvcGllZCBmcm9tIHN1cHN1Yi5cblxuICBpZiAoc3VwR3JvdXApIHtcbiAgICB2YXIgZWxlbSA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKHN1cEdyb3VwLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlLnN1cCgpKSwgb3B0aW9ucyk7XG4gICAgc3VwID0ge1xuICAgICAgZWxlbTogZWxlbSxcbiAgICAgIGtlcm46IE1hdGgubWF4KG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmcxLCBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nMyAtIGVsZW0uZGVwdGgpXG4gICAgfTtcbiAgfVxuXG4gIGlmIChzdWJHcm91cCkge1xuICAgIHZhciBfZWxlbSA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKHN1Ykdyb3VwLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlLnN1YigpKSwgb3B0aW9ucyk7XG5cbiAgICBzdWIgPSB7XG4gICAgICBlbGVtOiBfZWxlbSxcbiAgICAgIGtlcm46IE1hdGgubWF4KG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmcyLCBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNCAtIF9lbGVtLmhlaWdodClcbiAgICB9O1xuICB9IC8vIEJ1aWxkIHRoZSBmaW5hbCBncm91cCBhcyBhIHZsaXN0IG9mIHRoZSBwb3NzaWJsZSBzdWJzY3JpcHQsIGJhc2UsXG4gIC8vIGFuZCBwb3NzaWJsZSBzdXBlcnNjcmlwdC5cblxuXG4gIHZhciBmaW5hbEdyb3VwO1xuXG4gIGlmIChzdXAgJiYgc3ViKSB7XG4gICAgdmFyIGJvdHRvbSA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1ICsgc3ViLmVsZW0uaGVpZ2h0ICsgc3ViLmVsZW0uZGVwdGggKyBzdWIua2VybiArIGJhc2UuZGVwdGggKyBiYXNlU2hpZnQ7XG4gICAgZmluYWxHcm91cCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IGJvdHRvbSxcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogb3B0aW9ucy5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzVcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHN1Yi5lbGVtLFxuICAgICAgICBtYXJnaW5MZWZ0OiAtc2xhbnQgKyBcImVtXCJcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IHN1Yi5rZXJuXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBiYXNlXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiBzdXAua2VyblxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogc3VwLmVsZW0sXG4gICAgICAgIG1hcmdpbkxlZnQ6IHNsYW50ICsgXCJlbVwiXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNVxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfSBlbHNlIGlmIChzdWIpIHtcbiAgICB2YXIgdG9wID0gYmFzZS5oZWlnaHQgLSBiYXNlU2hpZnQ7IC8vIFNoaWZ0IHRoZSBsaW1pdHMgYnkgdGhlIHNsYW50IG9mIHRoZSBzeW1ib2wuIE5vdGVcbiAgICAvLyB0aGF0IHdlIGFyZSBzdXBwb3NlZCB0byBzaGlmdCB0aGUgbGltaXRzIGJ5IDEvMiBvZiB0aGUgc2xhbnQsXG4gICAgLy8gYnV0IHNpbmNlIHdlIGFyZSBjZW50ZXJpbmcgdGhlIGxpbWl0cyBhZGRpbmcgYSBmdWxsIHNsYW50IG9mXG4gICAgLy8gbWFyZ2luIHdpbGwgc2hpZnQgYnkgMS8yIHRoYXQuXG5cbiAgICBmaW5hbEdyb3VwID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJ0b3BcIixcbiAgICAgIHBvc2l0aW9uRGF0YTogdG9wLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogc3ViLmVsZW0sXG4gICAgICAgIG1hcmdpbkxlZnQ6IC1zbGFudCArIFwiZW1cIlxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogc3ViLmtlcm5cbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJhc2VcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSBpZiAoc3VwKSB7XG4gICAgdmFyIF9ib3R0b20gPSBiYXNlLmRlcHRoICsgYmFzZVNoaWZ0O1xuXG4gICAgZmluYWxHcm91cCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IF9ib3R0b20sXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJhc2VcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IHN1cC5rZXJuXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBzdXAuZWxlbSxcbiAgICAgICAgbWFyZ2luTGVmdDogc2xhbnQgKyBcImVtXCJcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1XG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgY2FzZSBwcm9iYWJseSBzaG91bGRuJ3Qgb2NjdXIgKHRoaXMgd291bGQgbWVhbiB0aGVcbiAgICAvLyBzdXBzdWIgd2FzIHNlbmRpbmcgdXMgYSBncm91cCB3aXRoIG5vIHN1cGVyc2NyaXB0IG9yXG4gICAgLy8gc3Vic2NyaXB0KSBidXQgYmUgc2FmZS5cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuXG4gIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3BcIiwgXCJvcC1saW1pdHNcIl0sIFtmaW5hbEdyb3VwXSwgb3B0aW9ucyk7XG59O1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL29wLmpzXG4vLyBMaW1pdHMsIHN5bWJvbHNcblxuXG5cblxuXG5cblxuXG5cblxuLy8gTW9zdCBvcGVyYXRvcnMgaGF2ZSBhIGxhcmdlIHN1Y2Nlc3NvciBzeW1ib2wsIGJ1dCB0aGVzZSBkb24ndC5cbnZhciBub1N1Y2Nlc3NvciA9IFtcIlxcXFxzbWFsbGludFwiXTsgLy8gTk9URTogVW5saWtlIG1vc3QgYGh0bWxCdWlsZGVyYHMsIHRoaXMgb25lIGhhbmRsZXMgbm90IG9ubHkgXCJvcFwiLCBidXQgYWxzb1xuLy8gXCJzdXBzdWJcIiBzaW5jZSBzb21lIG9mIHRoZW0gKGxpa2UgXFxpbnQpIGNhbiBhZmZlY3Qgc3VwZXIvc3Vic2NyaXB0aW5nLlxuXG52YXIgb3BfaHRtbEJ1aWxkZXIgPSBmdW5jdGlvbiBodG1sQnVpbGRlcihncnAsIG9wdGlvbnMpIHtcbiAgLy8gT3BlcmF0b3JzIGFyZSBoYW5kbGVkIGluIHRoZSBUZVhib29rIHBnLiA0NDMtNDQ0LCBydWxlIDEzKGEpLlxuICB2YXIgc3VwR3JvdXA7XG4gIHZhciBzdWJHcm91cDtcbiAgdmFyIGhhc0xpbWl0cyA9IGZhbHNlO1xuICB2YXIgZ3JvdXA7XG4gIHZhciBzdXBTdWIgPSBjaGVja05vZGVUeXBlKGdycCwgXCJzdXBzdWJcIik7XG5cbiAgaWYgKHN1cFN1Yikge1xuICAgIC8vIElmIHdlIGhhdmUgbGltaXRzLCBzdXBzdWIgd2lsbCBwYXNzIHVzIGl0cyBncm91cCB0byBoYW5kbGUuIFB1bGxcbiAgICAvLyBvdXQgdGhlIHN1cGVyc2NyaXB0IGFuZCBzdWJzY3JpcHQgYW5kIHNldCB0aGUgZ3JvdXAgdG8gdGhlIG9wIGluXG4gICAgLy8gaXRzIGJhc2UuXG4gICAgc3VwR3JvdXAgPSBzdXBTdWIuc3VwO1xuICAgIHN1Ykdyb3VwID0gc3VwU3ViLnN1YjtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKHN1cFN1Yi5iYXNlLCBcIm9wXCIpO1xuICAgIGhhc0xpbWl0cyA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgZ3JvdXAgPSBhc3NlcnROb2RlVHlwZShncnAsIFwib3BcIik7XG4gIH1cblxuICB2YXIgc3R5bGUgPSBvcHRpb25zLnN0eWxlO1xuICB2YXIgbGFyZ2UgPSBmYWxzZTtcblxuICBpZiAoc3R5bGUuc2l6ZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkuc2l6ZSAmJiBncm91cC5zeW1ib2wgJiYgIXV0aWxzLmNvbnRhaW5zKG5vU3VjY2Vzc29yLCBncm91cC5uYW1lKSkge1xuICAgIC8vIE1vc3Qgc3ltYm9sIG9wZXJhdG9ycyBnZXQgbGFyZ2VyIGluIGRpc3BsYXlzdHlsZSAocnVsZSAxMylcbiAgICBsYXJnZSA9IHRydWU7XG4gIH1cblxuICB2YXIgYmFzZTtcblxuICBpZiAoZ3JvdXAuc3ltYm9sKSB7XG4gICAgLy8gSWYgdGhpcyBpcyBhIHN5bWJvbCwgY3JlYXRlIHRoZSBzeW1ib2wuXG4gICAgdmFyIGZvbnROYW1lID0gbGFyZ2UgPyBcIlNpemUyLVJlZ3VsYXJcIiA6IFwiU2l6ZTEtUmVndWxhclwiO1xuICAgIHZhciBzdGFzaCA9IFwiXCI7XG5cbiAgICBpZiAoZ3JvdXAubmFtZSA9PT0gXCJcXFxcb2lpbnRcIiB8fCBncm91cC5uYW1lID09PSBcIlxcXFxvaWlpbnRcIikge1xuICAgICAgLy8gTm8gZm9udCBnbHlwaHMgeWV0LCBzbyB1c2UgYSBnbHlwaCB3L28gdGhlIG92YWwuXG4gICAgICAvLyBUT0RPOiBXaGVuIGZvbnQgZ2x5cGhzIGFyZSBhdmFpbGFibGUsIGRlbGV0ZSB0aGlzIGNvZGUuXG4gICAgICBzdGFzaCA9IGdyb3VwLm5hbWUuc3Vic3RyKDEpOyAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgIGdyb3VwLm5hbWUgPSBzdGFzaCA9PT0gXCJvaWludFwiID8gXCJcXFxcaWludFwiIDogXCJcXFxcaWlpbnRcIjtcbiAgICB9XG5cbiAgICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVN5bWJvbChncm91cC5uYW1lLCBmb250TmFtZSwgXCJtYXRoXCIsIG9wdGlvbnMsIFtcIm1vcFwiLCBcIm9wLXN5bWJvbFwiLCBsYXJnZSA/IFwibGFyZ2Utb3BcIiA6IFwic21hbGwtb3BcIl0pO1xuXG4gICAgaWYgKHN0YXNoLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIFdlJ3JlIGluIFxcb2lpbnQgb3IgXFxvaWlpbnQuIE92ZXJsYXkgdGhlIG92YWwuXG4gICAgICAvLyBUT0RPOiBXaGVuIGZvbnQgZ2x5cGhzIGFyZSBhdmFpbGFibGUsIGRlbGV0ZSB0aGlzIGNvZGUuXG4gICAgICB2YXIgaXRhbGljID0gYmFzZS5pdGFsaWM7XG4gICAgICB2YXIgb3ZhbCA9IGJ1aWxkQ29tbW9uLnN0YXRpY1N2ZyhzdGFzaCArIFwiU2l6ZVwiICsgKGxhcmdlID8gXCIyXCIgOiBcIjFcIiksIG9wdGlvbnMpO1xuICAgICAgYmFzZSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJpbmRpdmlkdWFsU2hpZnRcIixcbiAgICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogYmFzZSxcbiAgICAgICAgICBzaGlmdDogMFxuICAgICAgICB9LCB7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogb3ZhbCxcbiAgICAgICAgICBzaGlmdDogbGFyZ2UgPyAwLjA4IDogMFxuICAgICAgICB9XVxuICAgICAgfSwgb3B0aW9ucyk7IC8vICRGbG93Rml4TWVcblxuICAgICAgZ3JvdXAubmFtZSA9IFwiXFxcXFwiICsgc3Rhc2g7XG4gICAgICBiYXNlLmNsYXNzZXMudW5zaGlmdChcIm1vcFwiKTsgLy8gJEZsb3dGaXhNZVxuXG4gICAgICBiYXNlLml0YWxpYyA9IGl0YWxpYztcbiAgICB9XG4gIH0gZWxzZSBpZiAoZ3JvdXAuYm9keSkge1xuICAgIC8vIElmIHRoaXMgaXMgYSBsaXN0LCBjb21wb3NlIHRoYXQgbGlzdC5cbiAgICB2YXIgaW5uZXIgPSBidWlsZEhUTUxfYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMsIHRydWUpO1xuXG4gICAgaWYgKGlubmVyLmxlbmd0aCA9PT0gMSAmJiBpbm5lclswXSBpbnN0YW5jZW9mIGRvbVRyZWVfU3ltYm9sTm9kZSkge1xuICAgICAgYmFzZSA9IGlubmVyWzBdO1xuICAgICAgYmFzZS5jbGFzc2VzWzBdID0gXCJtb3BcIjsgLy8gcmVwbGFjZSBvbGQgbWNsYXNzXG4gICAgfSBlbHNlIHtcbiAgICAgIGJhc2UgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3BcIl0sIGJ1aWxkQ29tbW9uLnRyeUNvbWJpbmVDaGFycyhpbm5lciksIG9wdGlvbnMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2UsIHRoaXMgaXMgYSB0ZXh0IG9wZXJhdG9yLiBCdWlsZCB0aGUgdGV4dCBmcm9tIHRoZVxuICAgIC8vIG9wZXJhdG9yJ3MgbmFtZS5cbiAgICAvLyBUT0RPKGVtaWx5KTogQWRkIGEgc3BhY2UgaW4gdGhlIG1pZGRsZSBvZiBzb21lIG9mIHRoZXNlXG4gICAgLy8gb3BlcmF0b3JzLCBsaWtlIFxcbGltc3VwXG4gICAgdmFyIG91dHB1dCA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBncm91cC5uYW1lLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvdXRwdXQucHVzaChidWlsZENvbW1vbi5tYXRoc3ltKGdyb3VwLm5hbWVbaV0sIGdyb3VwLm1vZGUsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9wXCJdLCBvdXRwdXQsIG9wdGlvbnMpO1xuICB9IC8vIElmIGNvbnRlbnQgb2Ygb3AgaXMgYSBzaW5nbGUgc3ltYm9sLCBzaGlmdCBpdCB2ZXJ0aWNhbGx5LlxuXG5cbiAgdmFyIGJhc2VTaGlmdCA9IDA7XG4gIHZhciBzbGFudCA9IDA7XG5cbiAgaWYgKChiYXNlIGluc3RhbmNlb2YgZG9tVHJlZV9TeW1ib2xOb2RlIHx8IGdyb3VwLm5hbWUgPT09IFwiXFxcXG9paW50XCIgfHwgZ3JvdXAubmFtZSA9PT0gXCJcXFxcb2lpaW50XCIpICYmICFncm91cC5zdXBwcmVzc0Jhc2VTaGlmdCkge1xuICAgIC8vIFdlIHN1cHByZXNzIHRoZSBzaGlmdCBvZiB0aGUgYmFzZSBvZiBcXG92ZXJzZXQgYW5kIFxcdW5kZXJzZXQuIE90aGVyd2lzZSxcbiAgICAvLyBzaGlmdCB0aGUgc3ltYm9sIHNvIGl0cyBjZW50ZXIgbGllcyBvbiB0aGUgYXhpcyAocnVsZSAxMykuIEl0XG4gICAgLy8gYXBwZWFycyB0aGF0IG91ciBmb250cyBoYXZlIHRoZSBjZW50ZXJzIG9mIHRoZSBzeW1ib2xzIGFscmVhZHlcbiAgICAvLyBhbG1vc3Qgb24gdGhlIGF4aXMsIHNvIHRoZXNlIG51bWJlcnMgYXJlIHZlcnkgc21hbGwuIE5vdGUgd2VcbiAgICAvLyBkb24ndCBhY3R1YWxseSBhcHBseSB0aGlzIGhlcmUsIGJ1dCBpbnN0ZWFkIGl0IGlzIHVzZWQgZWl0aGVyIGluXG4gICAgLy8gdGhlIHZsaXN0IGNyZWF0aW9uIG9yIHNlcGFyYXRlbHkgd2hlbiB0aGVyZSBhcmUgbm8gbGltaXRzLlxuICAgIGJhc2VTaGlmdCA9IChiYXNlLmhlaWdodCAtIGJhc2UuZGVwdGgpIC8gMiAtIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0OyAvLyBUaGUgc2xhbnQgb2YgdGhlIHN5bWJvbCBpcyBqdXN0IGl0cyBpdGFsaWMgY29ycmVjdGlvbi5cbiAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICBzbGFudCA9IGJhc2UuaXRhbGljO1xuICB9XG5cbiAgaWYgKGhhc0xpbWl0cykge1xuICAgIHJldHVybiBhc3NlbWJsZVN1cFN1Yl9hc3NlbWJsZVN1cFN1YihiYXNlLCBzdXBHcm91cCwgc3ViR3JvdXAsIG9wdGlvbnMsIHN0eWxlLCBzbGFudCwgYmFzZVNoaWZ0KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoYmFzZVNoaWZ0KSB7XG4gICAgICBiYXNlLnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICAgICAgYmFzZS5zdHlsZS50b3AgPSBiYXNlU2hpZnQgKyBcImVtXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2U7XG4gIH1cbn07XG5cbnZhciBvcF9tYXRobWxCdWlsZGVyID0gZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICB2YXIgbm9kZTtcblxuICBpZiAoZ3JvdXAuc3ltYm9sKSB7XG4gICAgLy8gVGhpcyBpcyBhIHN5bWJvbC4gSnVzdCBhZGQgdGhlIHN5bWJvbC5cbiAgICBub2RlID0gbmV3IG1hdGhNTFRyZWVfTWF0aE5vZGUoXCJtb1wiLCBbYnVpbGRNYXRoTUxfbWFrZVRleHQoZ3JvdXAubmFtZSwgZ3JvdXAubW9kZSldKTtcblxuICAgIGlmICh1dGlscy5jb250YWlucyhub1N1Y2Nlc3NvciwgZ3JvdXAubmFtZSkpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibGFyZ2VvcFwiLCBcImZhbHNlXCIpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChncm91cC5ib2R5KSB7XG4gICAgLy8gVGhpcyBpcyBhbiBvcGVyYXRvciB3aXRoIGNoaWxkcmVuLiBBZGQgdGhlbS5cbiAgICBub2RlID0gbmV3IG1hdGhNTFRyZWVfTWF0aE5vZGUoXCJtb1wiLCBidWlsZE1hdGhNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucykpO1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgaXMgYSB0ZXh0IG9wZXJhdG9yLiBBZGQgYWxsIG9mIHRoZSBjaGFyYWN0ZXJzIGZyb20gdGhlXG4gICAgLy8gb3BlcmF0b3IncyBuYW1lLlxuICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZV9NYXRoTm9kZShcIm1pXCIsIFtuZXcgbWF0aE1MVHJlZV9UZXh0Tm9kZShncm91cC5uYW1lLnNsaWNlKDEpKV0pOyAvLyBBcHBlbmQgYW4gPG1vPiZBcHBseUZ1bmN0aW9uOzwvbW8+LlxuICAgIC8vIHJlZjogaHR0cHM6Ly93d3cudzMub3JnL1RSL1JFQy1NYXRoTUwvY2hhcDNfMi5odG1sI3NlYzMuMi40XG5cbiAgICB2YXIgb3BlcmF0b3IgPSBuZXcgbWF0aE1MVHJlZV9NYXRoTm9kZShcIm1vXCIsIFtidWlsZE1hdGhNTF9tYWtlVGV4dChcIlxcdTIwNjFcIiwgXCJ0ZXh0XCIpXSk7XG5cbiAgICBpZiAoZ3JvdXAucGFyZW50SXNTdXBTdWIpIHtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZV9NYXRoTm9kZShcIm1vXCIsIFtub2RlLCBvcGVyYXRvcl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3RG9jdW1lbnRGcmFnbWVudChbbm9kZSwgb3BlcmF0b3JdKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn07XG5cbnZhciBzaW5nbGVDaGFyQmlnT3BzID0ge1xuICBcIlxcdTIyMEZcIjogXCJcXFxccHJvZFwiLFxuICBcIlxcdTIyMTBcIjogXCJcXFxcY29wcm9kXCIsXG4gIFwiXFx1MjIxMVwiOiBcIlxcXFxzdW1cIixcbiAgXCJcXHUyMkMwXCI6IFwiXFxcXGJpZ3dlZGdlXCIsXG4gIFwiXFx1MjJDMVwiOiBcIlxcXFxiaWd2ZWVcIixcbiAgXCJcXHUyMkMyXCI6IFwiXFxcXGJpZ2NhcFwiLFxuICBcIlxcdTIyQzNcIjogXCJcXFxcYmlnY3VwXCIsXG4gIFwiXFx1MkEwMFwiOiBcIlxcXFxiaWdvZG90XCIsXG4gIFwiXFx1MkEwMVwiOiBcIlxcXFxiaWdvcGx1c1wiLFxuICBcIlxcdTJBMDJcIjogXCJcXFxcYmlnb3RpbWVzXCIsXG4gIFwiXFx1MkEwNFwiOiBcIlxcXFxiaWd1cGx1c1wiLFxuICBcIlxcdTJBMDZcIjogXCJcXFxcYmlnc3FjdXBcIlxufTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcFwiLFxuICBuYW1lczogW1wiXFxcXGNvcHJvZFwiLCBcIlxcXFxiaWd2ZWVcIiwgXCJcXFxcYmlnd2VkZ2VcIiwgXCJcXFxcYmlndXBsdXNcIiwgXCJcXFxcYmlnY2FwXCIsIFwiXFxcXGJpZ2N1cFwiLCBcIlxcXFxpbnRvcFwiLCBcIlxcXFxwcm9kXCIsIFwiXFxcXHN1bVwiLCBcIlxcXFxiaWdvdGltZXNcIiwgXCJcXFxcYmlnb3BsdXNcIiwgXCJcXFxcYmlnb2RvdFwiLCBcIlxcXFxiaWdzcWN1cFwiLCBcIlxcXFxzbWFsbGludFwiLCBcIlxcdTIyMEZcIiwgXCJcXHUyMjEwXCIsIFwiXFx1MjIxMVwiLCBcIlxcdTIyQzBcIiwgXCJcXHUyMkMxXCIsIFwiXFx1MjJDMlwiLCBcIlxcdTIyQzNcIiwgXCJcXHUyQTAwXCIsIFwiXFx1MkEwMVwiLCBcIlxcdTJBMDJcIiwgXCJcXHUyQTA0XCIsIFwiXFx1MkEwNlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lO1xuICAgIHZhciBmTmFtZSA9IGZ1bmNOYW1lO1xuXG4gICAgaWYgKGZOYW1lLmxlbmd0aCA9PT0gMSkge1xuICAgICAgZk5hbWUgPSBzaW5nbGVDaGFyQmlnT3BzW2ZOYW1lXTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsaW1pdHM6IHRydWUsXG4gICAgICBwYXJlbnRJc1N1cFN1YjogZmFsc2UsXG4gICAgICBzeW1ib2w6IHRydWUsXG4gICAgICBuYW1lOiBmTmFtZVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBvcF9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogb3BfbWF0aG1sQnVpbGRlclxufSk7IC8vIE5vdGU6IGNhbGxpbmcgZGVmaW5lRnVuY3Rpb24gd2l0aCBhIHR5cGUgdGhhdCdzIGFscmVhZHkgYmVlbiBkZWZpbmVkIG9ubHlcbi8vIHdvcmtzIGJlY2F1c2UgdGhlIHNhbWUgaHRtbEJ1aWxkZXIgYW5kIG1hdGhtbEJ1aWxkZXIgYXJlIGJlaW5nIHVzZWQuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcFwiLFxuICBuYW1lczogW1wiXFxcXG1hdGhvcFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZjIsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZjIucGFyc2VyO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsaW1pdHM6IGZhbHNlLFxuICAgICAgcGFyZW50SXNTdXBTdWI6IGZhbHNlLFxuICAgICAgc3ltYm9sOiBmYWxzZSxcbiAgICAgIGJvZHk6IGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGJvZHkpXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IG9wX2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBvcF9tYXRobWxCdWlsZGVyXG59KTsgLy8gVGhlcmUgYXJlIDIgZmxhZ3MgZm9yIG9wZXJhdG9yczsgd2hldGhlciB0aGV5IHByb2R1Y2UgbGltaXRzIGluXG4vLyBkaXNwbGF5c3R5bGUsIGFuZCB3aGV0aGVyIHRoZXkgYXJlIHN5bWJvbHMgYW5kIHNob3VsZCBncm93IGluXG4vLyBkaXNwbGF5c3R5bGUuIFRoZXNlIGZvdXIgZ3JvdXBzIGNvdmVyIHRoZSBmb3VyIHBvc3NpYmxlIGNob2ljZXMuXG5cbnZhciBzaW5nbGVDaGFySW50ZWdyYWxzID0ge1xuICBcIlxcdTIyMkJcIjogXCJcXFxcaW50XCIsXG4gIFwiXFx1MjIyQ1wiOiBcIlxcXFxpaW50XCIsXG4gIFwiXFx1MjIyRFwiOiBcIlxcXFxpaWludFwiLFxuICBcIlxcdTIyMkVcIjogXCJcXFxcb2ludFwiLFxuICBcIlxcdTIyMkZcIjogXCJcXFxcb2lpbnRcIixcbiAgXCJcXHUyMjMwXCI6IFwiXFxcXG9paWludFwiXG59OyAvLyBObyBsaW1pdHMsIG5vdCBzeW1ib2xzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcFwiLFxuICBuYW1lczogW1wiXFxcXGFyY3NpblwiLCBcIlxcXFxhcmNjb3NcIiwgXCJcXFxcYXJjdGFuXCIsIFwiXFxcXGFyY3RnXCIsIFwiXFxcXGFyY2N0Z1wiLCBcIlxcXFxhcmdcIiwgXCJcXFxcY2hcIiwgXCJcXFxcY29zXCIsIFwiXFxcXGNvc2VjXCIsIFwiXFxcXGNvc2hcIiwgXCJcXFxcY290XCIsIFwiXFxcXGNvdGdcIiwgXCJcXFxcY290aFwiLCBcIlxcXFxjc2NcIiwgXCJcXFxcY3RnXCIsIFwiXFxcXGN0aFwiLCBcIlxcXFxkZWdcIiwgXCJcXFxcZGltXCIsIFwiXFxcXGV4cFwiLCBcIlxcXFxob21cIiwgXCJcXFxca2VyXCIsIFwiXFxcXGxnXCIsIFwiXFxcXGxuXCIsIFwiXFxcXGxvZ1wiLCBcIlxcXFxzZWNcIiwgXCJcXFxcc2luXCIsIFwiXFxcXHNpbmhcIiwgXCJcXFxcc2hcIiwgXCJcXFxcdGFuXCIsIFwiXFxcXHRhbmhcIiwgXCJcXFxcdGdcIiwgXCJcXFxcdGhcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYzLnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmMy5mdW5jTmFtZTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsaW1pdHM6IGZhbHNlLFxuICAgICAgcGFyZW50SXNTdXBTdWI6IGZhbHNlLFxuICAgICAgc3ltYm9sOiBmYWxzZSxcbiAgICAgIG5hbWU6IGZ1bmNOYW1lXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IG9wX2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBvcF9tYXRobWxCdWlsZGVyXG59KTsgLy8gTGltaXRzLCBub3Qgc3ltYm9sc1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwib3BcIixcbiAgbmFtZXM6IFtcIlxcXFxkZXRcIiwgXCJcXFxcZ2NkXCIsIFwiXFxcXGluZlwiLCBcIlxcXFxsaW1cIiwgXCJcXFxcbWF4XCIsIFwiXFxcXG1pblwiLCBcIlxcXFxQclwiLCBcIlxcXFxzdXBcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWY0KSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWY0LnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmNC5mdW5jTmFtZTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsaW1pdHM6IHRydWUsXG4gICAgICBwYXJlbnRJc1N1cFN1YjogZmFsc2UsXG4gICAgICBzeW1ib2w6IGZhbHNlLFxuICAgICAgbmFtZTogZnVuY05hbWVcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogb3BfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IG9wX21hdGhtbEJ1aWxkZXJcbn0pOyAvLyBObyBsaW1pdHMsIHN5bWJvbHNcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcIm9wXCIsXG4gIG5hbWVzOiBbXCJcXFxcaW50XCIsIFwiXFxcXGlpbnRcIiwgXCJcXFxcaWlpbnRcIiwgXCJcXFxcb2ludFwiLCBcIlxcXFxvaWludFwiLCBcIlxcXFxvaWlpbnRcIiwgXCJcXHUyMjJCXCIsIFwiXFx1MjIyQ1wiLCBcIlxcdTIyMkRcIiwgXCJcXHUyMjJFXCIsIFwiXFx1MjIyRlwiLCBcIlxcdTIyMzBcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWY1KSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWY1LnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmNS5mdW5jTmFtZTtcbiAgICB2YXIgZk5hbWUgPSBmdW5jTmFtZTtcblxuICAgIGlmIChmTmFtZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGZOYW1lID0gc2luZ2xlQ2hhckludGVncmFsc1tmTmFtZV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwib3BcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGltaXRzOiBmYWxzZSxcbiAgICAgIHBhcmVudElzU3VwU3ViOiBmYWxzZSxcbiAgICAgIHN5bWJvbDogdHJ1ZSxcbiAgICAgIG5hbWU6IGZOYW1lXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IG9wX2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBvcF9tYXRobWxCdWlsZGVyXG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9vcGVyYXRvcm5hbWUuanNcblxuXG5cblxuXG5cblxuXG4vLyBOT1RFOiBVbmxpa2UgbW9zdCBgaHRtbEJ1aWxkZXJgcywgdGhpcyBvbmUgaGFuZGxlcyBub3Qgb25seVxuLy8gXCJvcGVyYXRvcm5hbWVcIiwgYnV0IGFsc28gIFwic3Vwc3ViXCIgc2luY2UgXFxvcGVyYXRvcm5hbWUqIGNhblxudmFyIG9wZXJhdG9ybmFtZV9odG1sQnVpbGRlciA9IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdycCwgb3B0aW9ucykge1xuICAvLyBPcGVyYXRvcnMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgcGcuIDQ0My00NDQsIHJ1bGUgMTMoYSkuXG4gIHZhciBzdXBHcm91cDtcbiAgdmFyIHN1Ykdyb3VwO1xuICB2YXIgaGFzTGltaXRzID0gZmFsc2U7XG4gIHZhciBncm91cDtcbiAgdmFyIHN1cFN1YiA9IGNoZWNrTm9kZVR5cGUoZ3JwLCBcInN1cHN1YlwiKTtcblxuICBpZiAoc3VwU3ViKSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBsaW1pdHMsIHN1cHN1YiB3aWxsIHBhc3MgdXMgaXRzIGdyb3VwIHRvIGhhbmRsZS4gUHVsbFxuICAgIC8vIG91dCB0aGUgc3VwZXJzY3JpcHQgYW5kIHN1YnNjcmlwdCBhbmQgc2V0IHRoZSBncm91cCB0byB0aGUgb3AgaW5cbiAgICAvLyBpdHMgYmFzZS5cbiAgICBzdXBHcm91cCA9IHN1cFN1Yi5zdXA7XG4gICAgc3ViR3JvdXAgPSBzdXBTdWIuc3ViO1xuICAgIGdyb3VwID0gYXNzZXJ0Tm9kZVR5cGUoc3VwU3ViLmJhc2UsIFwib3BlcmF0b3JuYW1lXCIpO1xuICAgIGhhc0xpbWl0cyA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgZ3JvdXAgPSBhc3NlcnROb2RlVHlwZShncnAsIFwib3BlcmF0b3JuYW1lXCIpO1xuICB9XG5cbiAgdmFyIGJhc2U7XG5cbiAgaWYgKGdyb3VwLmJvZHkubGVuZ3RoID4gMCkge1xuICAgIHZhciBib2R5ID0gZ3JvdXAuYm9keS5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lOiBDaGVjayBpZiB0aGUgbm9kZSBoYXMgYSBzdHJpbmcgYHRleHRgIHByb3BlcnR5LlxuICAgICAgdmFyIGNoaWxkVGV4dCA9IGNoaWxkLnRleHQ7XG5cbiAgICAgIGlmICh0eXBlb2YgY2hpbGRUZXh0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgICAgbW9kZTogY2hpbGQubW9kZSxcbiAgICAgICAgICB0ZXh0OiBjaGlsZFRleHRcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cbiAgICB9KTsgLy8gQ29uc29saWRhdGUgZnVuY3Rpb24gbmFtZXMgaW50byBzeW1ib2wgY2hhcmFjdGVycy5cblxuICAgIHZhciBleHByZXNzaW9uID0gYnVpbGRIVE1MX2J1aWxkRXhwcmVzc2lvbihib2R5LCBvcHRpb25zLndpdGhGb250KFwibWF0aHJtXCIpLCB0cnVlKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwcmVzc2lvbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoaWxkID0gZXhwcmVzc2lvbltpXTtcblxuICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgZG9tVHJlZV9TeW1ib2xOb2RlKSB7XG4gICAgICAgIC8vIFBlciBhbXNvcG4gcGFja2FnZSxcbiAgICAgICAgLy8gY2hhbmdlIG1pbnVzIHRvIGh5cGhlbiBhbmQgXFxhc3QgdG8gYXN0ZXJpc2tcbiAgICAgICAgY2hpbGQudGV4dCA9IGNoaWxkLnRleHQucmVwbGFjZSgvXFx1MjIxMi8sIFwiLVwiKS5yZXBsYWNlKC9cXHUyMjE3LywgXCIqXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGJhc2UgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3BcIl0sIGV4cHJlc3Npb24sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIGJhc2UgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3BcIl0sIFtdLCBvcHRpb25zKTtcbiAgfVxuXG4gIGlmIChoYXNMaW1pdHMpIHtcbiAgICByZXR1cm4gYXNzZW1ibGVTdXBTdWJfYXNzZW1ibGVTdXBTdWIoYmFzZSwgc3VwR3JvdXAsIHN1Ykdyb3VwLCBvcHRpb25zLCBvcHRpb25zLnN0eWxlLCAwLCAwKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTtcbiAgfVxufTtcblxudmFyIG9wZXJhdG9ybmFtZV9tYXRobWxCdWlsZGVyID0gZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAvLyBUaGUgc3RlcHMgdGFrZW4gaGVyZSBhcmUgc2ltaWxhciB0byB0aGUgaHRtbCB2ZXJzaW9uLlxuICB2YXIgZXhwcmVzc2lvbiA9IGJ1aWxkTWF0aE1MX2J1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zLndpdGhGb250KFwibWF0aHJtXCIpKTsgLy8gSXMgZXhwcmVzc2lvbiBhIHN0cmluZyBvciBoYXMgaXQgc29tZXRoaW5nIGxpa2UgYSBmcmFjdGlvbj9cblxuICB2YXIgaXNBbGxTdHJpbmcgPSB0cnVlOyAvLyBkZWZhdWx0XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9uLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG5vZGUgPSBleHByZXNzaW9uW2ldO1xuXG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBtYXRoTUxUcmVlLlNwYWNlTm9kZSkgey8vIERvIG5vdGhpbmdcbiAgICB9IGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBtYXRoTUxUcmVlLk1hdGhOb2RlKSB7XG4gICAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgICBjYXNlIFwibWlcIjpcbiAgICAgICAgY2FzZSBcIm1uXCI6XG4gICAgICAgIGNhc2UgXCJtc1wiOlxuICAgICAgICBjYXNlIFwibXNwYWNlXCI6XG4gICAgICAgIGNhc2UgXCJtdGV4dFwiOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyBEbyBub3RoaW5nIHlldC5cblxuICAgICAgICBjYXNlIFwibW9cIjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBub2RlLmNoaWxkcmVuWzBdO1xuXG4gICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgY2hpbGQgaW5zdGFuY2VvZiBtYXRoTUxUcmVlLlRleHROb2RlKSB7XG4gICAgICAgICAgICAgIGNoaWxkLnRleHQgPSBjaGlsZC50ZXh0LnJlcGxhY2UoL1xcdTIyMTIvLCBcIi1cIikucmVwbGFjZSgvXFx1MjIxNy8sIFwiKlwiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlzQWxsU3RyaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlzQWxsU3RyaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzQWxsU3RyaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzQWxsU3RyaW5nKSB7XG4gICAgLy8gV3JpdGUgYSBzaW5nbGUgVGV4dE5vZGUgaW5zdGVhZCBvZiBtdWx0aXBsZSBuZXN0ZWQgdGFncy5cbiAgICB2YXIgd29yZCA9IGV4cHJlc3Npb24ubWFwKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICByZXR1cm4gbm9kZS50b1RleHQoKTtcbiAgICB9KS5qb2luKFwiXCIpO1xuICAgIGV4cHJlc3Npb24gPSBbbmV3IG1hdGhNTFRyZWUuVGV4dE5vZGUod29yZCldO1xuICB9XG5cbiAgdmFyIGlkZW50aWZpZXIgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1pXCIsIGV4cHJlc3Npb24pO1xuICBpZGVudGlmaWVyLnNldEF0dHJpYnV0ZShcIm1hdGh2YXJpYW50XCIsIFwibm9ybWFsXCIpOyAvLyBcXHUyMDYxIGlzIHRoZSBzYW1lIGFzICZBcHBseUZ1bmN0aW9uO1xuICAvLyByZWY6IGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vY2hhcnNldHMvcmVmX2h0bWxfZW50aXRpZXNfYS5hc3BcblxuICB2YXIgb3BlcmF0b3IgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFtidWlsZE1hdGhNTF9tYWtlVGV4dChcIlxcdTIwNjFcIiwgXCJ0ZXh0XCIpXSk7XG5cbiAgaWYgKGdyb3VwLnBhcmVudElzU3VwU3ViKSB7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW2lkZW50aWZpZXIsIG9wZXJhdG9yXSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG1hdGhNTFRyZWUubmV3RG9jdW1lbnRGcmFnbWVudChbaWRlbnRpZmllciwgb3BlcmF0b3JdKTtcbiAgfVxufTsgLy8gXFxvcGVyYXRvcm5hbWVcbi8vIGFtc29wbi5kdHg6IFxcbWF0aG9weyMxXFxrZXJuXFx6QFxcb3BlcmF0b3JAZm9udCMzfVxcbmV3bWNvZGVzQFxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcGVyYXRvcm5hbWVcIixcbiAgbmFtZXM6IFtcIlxcXFxvcGVyYXRvcm5hbWVcIiwgXCJcXFxcb3BlcmF0b3JuYW1lKlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcGVyYXRvcm5hbWVcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keTogZGVmaW5lRnVuY3Rpb25fb3JkYXJndW1lbnQoYm9keSksXG4gICAgICBhbHdheXNIYW5kbGVTdXBTdWI6IGZ1bmNOYW1lID09PSBcIlxcXFxvcGVyYXRvcm5hbWUqXCIsXG4gICAgICBsaW1pdHM6IGZhbHNlLFxuICAgICAgcGFyZW50SXNTdXBTdWI6IGZhbHNlXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IG9wZXJhdG9ybmFtZV9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogb3BlcmF0b3JuYW1lX21hdGhtbEJ1aWxkZXJcbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL29yZGdyb3VwLmpzXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uQnVpbGRlcnMoe1xuICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIGlmIChncm91cC5zZW1pc2ltcGxlKSB7XG4gICAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUZyYWdtZW50KGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucywgZmFsc2UpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiXSwgYnVpbGRIVE1MX2J1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zLCB0cnVlKSwgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYnVpbGRFeHByZXNzaW9uUm93KGdyb3VwLmJvZHksIG9wdGlvbnMsIHRydWUpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9vdmVybGluZS5qc1xuXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvdmVybGluZVwiLFxuICBuYW1lczogW1wiXFxcXG92ZXJsaW5lXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvdmVybGluZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5OiBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gT3ZlcmxpbmVzIGFyZSBoYW5kbGVkIGluIHRoZSBUZVhib29rIHBnIDQ0MywgUnVsZSA5LlxuICAgIC8vIEJ1aWxkIHRoZSBpbm5lciBncm91cCBpbiB0aGUgY3JhbXBlZCBzdHlsZS5cbiAgICB2YXIgaW5uZXJHcm91cCA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMuaGF2aW5nQ3JhbXBlZFN0eWxlKCkpOyAvLyBDcmVhdGUgdGhlIGxpbmUgYWJvdmUgdGhlIGJvZHlcblxuICAgIHZhciBsaW5lID0gYnVpbGRDb21tb24ubWFrZUxpbmVTcGFuKFwib3ZlcmxpbmUtbGluZVwiLCBvcHRpb25zKTsgLy8gR2VuZXJhdGUgdGhlIHZsaXN0LCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBrZXJuc1xuXG4gICAgdmFyIGRlZmF1bHRSdWxlVGhpY2tuZXNzID0gb3B0aW9ucy5mb250TWV0cmljcygpLmRlZmF1bHRSdWxlVGhpY2tuZXNzO1xuICAgIHZhciB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBpbm5lckdyb3VwXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiAzICogZGVmYXVsdFJ1bGVUaGlja25lc3NcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGxpbmVcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IGRlZmF1bHRSdWxlVGhpY2tuZXNzXG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCIsIFwib3ZlcmxpbmVcIl0sIFt2bGlzdF0sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG9wZXJhdG9yID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbbmV3IG1hdGhNTFRyZWUuVGV4dE5vZGUoXCJcXHUyMDNFXCIpXSk7XG4gICAgb3BlcmF0b3Iuc2V0QXR0cmlidXRlKFwic3RyZXRjaHlcIiwgXCJ0cnVlXCIpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb3ZlclwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKSwgb3BlcmF0b3JdKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImFjY2VudFwiLCBcInRydWVcIik7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3BoYW50b20uanNcblxuXG5cblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwicGhhbnRvbVwiLFxuICBuYW1lczogW1wiXFxcXHBoYW50b21cIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwicGhhbnRvbVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5OiBkZWZpbmVGdW5jdGlvbl9vcmRhcmd1bWVudChib2R5KVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBlbGVtZW50cyA9IGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucy53aXRoUGhhbnRvbSgpLCBmYWxzZSk7IC8vIFxccGhhbnRvbSBpc24ndCBzdXBwb3NlZCB0byBhZmZlY3QgdGhlIGVsZW1lbnRzIGl0IGNvbnRhaW5zLlxuICAgIC8vIFNlZSBcImNvbG9yXCIgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlRnJhZ21lbnQoZWxlbWVudHMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIGlubmVyID0gYnVpbGRNYXRoTUxfYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMpO1xuICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1waGFudG9tXCIsIGlubmVyKTtcbiAgfVxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaHBoYW50b21cIixcbiAgbmFtZXM6IFtcIlxcXFxocGhhbnRvbVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmMiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmMi5wYXJzZXI7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImhwaGFudG9tXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IGJvZHlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtdLCBbYnVpbGRIVE1MX2J1aWxkR3JvdXAoZ3JvdXAuYm9keSwgb3B0aW9ucy53aXRoUGhhbnRvbSgpKV0pO1xuICAgIG5vZGUuaGVpZ2h0ID0gMDtcbiAgICBub2RlLmRlcHRoID0gMDtcblxuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbm9kZS5jaGlsZHJlbltpXS5oZWlnaHQgPSAwO1xuICAgICAgICBub2RlLmNoaWxkcmVuW2ldLmRlcHRoID0gMDtcbiAgICAgIH1cbiAgICB9IC8vIFNlZSBzbWFzaCBmb3IgY29tbWVudCByZTogdXNlIG9mIG1ha2VWTGlzdFxuXG5cbiAgICBub2RlID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJmaXJzdEJhc2VsaW5lXCIsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IG5vZGVcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7IC8vIEZvciBzcGFjaW5nLCBUZVggdHJlYXRzIFxcc21hc2ggYXMgYSBtYXRoIGdyb3VwIChzYW1lIHNwYWNpbmcgYXMgb3JkKS5cblxuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCJdLCBbbm9kZV0sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIGlubmVyID0gYnVpbGRNYXRoTUxfYnVpbGRFeHByZXNzaW9uKGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGdyb3VwLmJvZHkpLCBvcHRpb25zKTtcbiAgICB2YXIgcGhhbnRvbSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBoYW50b21cIiwgaW5uZXIpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcGFkZGVkXCIsIFtwaGFudG9tXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgXCIwcHhcIik7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJkZXB0aFwiLCBcIjBweFwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidnBoYW50b21cIixcbiAgbmFtZXM6IFtcIlxcXFx2cGhhbnRvbVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmMywgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmMy5wYXJzZXI7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInZwaGFudG9tXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IGJvZHlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgaW5uZXIgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJpbm5lclwiXSwgW2J1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMud2l0aFBoYW50b20oKSldKTtcbiAgICB2YXIgZml4ID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiZml4XCJdLCBbXSk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJybGFwXCJdLCBbaW5uZXIsIGZpeF0sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIGlubmVyID0gYnVpbGRNYXRoTUxfYnVpbGRFeHByZXNzaW9uKGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGdyb3VwLmJvZHkpLCBvcHRpb25zKTtcbiAgICB2YXIgcGhhbnRvbSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBoYW50b21cIiwgaW5uZXIpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcGFkZGVkXCIsIFtwaGFudG9tXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBcIjBweFwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvcmFpc2Vib3guanNcblxuXG5cblxuXG5cbiAvLyBCb3ggbWFuaXB1bGF0aW9uXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJyYWlzZWJveFwiLFxuICBuYW1lczogW1wiXFxcXHJhaXNlYm94XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYXJnVHlwZXM6IFtcInNpemVcIiwgXCJoYm94XCJdLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyO1xuICAgIHZhciBhbW91bnQgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcInNpemVcIikudmFsdWU7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzFdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInJhaXNlYm94XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGR5OiBhbW91bnQsXG4gICAgICBib2R5OiBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIGJvZHkgPSBidWlsZEhUTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKTtcbiAgICB2YXIgZHkgPSB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLmR5LCBvcHRpb25zKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJzaGlmdFwiLFxuICAgICAgcG9zaXRpb25EYXRhOiAtZHksXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJvZHlcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuICAgIHZhciBkeSA9IGdyb3VwLmR5Lm51bWJlciArIGdyb3VwLmR5LnVuaXQ7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ2b2Zmc2V0XCIsIGR5KTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvcnVsZS5qc1xuXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJydWxlXCIsXG4gIG5hbWVzOiBbXCJcXFxccnVsZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyLFxuICAgIG51bU9wdGlvbmFsQXJnczogMSxcbiAgICBhcmdUeXBlczogW1wic2l6ZVwiLCBcInNpemVcIiwgXCJzaXplXCJdXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICB2YXIgc2hpZnQgPSBvcHRBcmdzWzBdO1xuICAgIHZhciB3aWR0aCA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwic2l6ZVwiKTtcbiAgICB2YXIgaGVpZ2h0ID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1sxXSwgXCJzaXplXCIpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInJ1bGVcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgc2hpZnQ6IHNoaWZ0ICYmIGFzc2VydE5vZGVUeXBlKHNoaWZ0LCBcInNpemVcIikudmFsdWUsXG4gICAgICB3aWR0aDogd2lkdGgudmFsdWUsXG4gICAgICBoZWlnaHQ6IGhlaWdodC52YWx1ZVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIE1ha2UgYW4gZW1wdHkgc3BhbiBmb3IgdGhlIHJ1bGVcbiAgICB2YXIgcnVsZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJydWxlXCJdLCBbXSwgb3B0aW9ucyk7IC8vIENhbGN1bGF0ZSB0aGUgc2hpZnQsIHdpZHRoLCBhbmQgaGVpZ2h0IG9mIHRoZSBydWxlLCBhbmQgYWNjb3VudCBmb3IgdW5pdHNcblxuICAgIHZhciB3aWR0aCA9IHVuaXRzX2NhbGN1bGF0ZVNpemUoZ3JvdXAud2lkdGgsIG9wdGlvbnMpO1xuICAgIHZhciBoZWlnaHQgPSB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLmhlaWdodCwgb3B0aW9ucyk7XG4gICAgdmFyIHNoaWZ0ID0gZ3JvdXAuc2hpZnQgPyB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLnNoaWZ0LCBvcHRpb25zKSA6IDA7IC8vIFN0eWxlIHRoZSBydWxlIHRvIHRoZSByaWdodCBzaXplXG5cbiAgICBydWxlLnN0eWxlLmJvcmRlclJpZ2h0V2lkdGggPSB3aWR0aCArIFwiZW1cIjtcbiAgICBydWxlLnN0eWxlLmJvcmRlclRvcFdpZHRoID0gaGVpZ2h0ICsgXCJlbVwiO1xuICAgIHJ1bGUuc3R5bGUuYm90dG9tID0gc2hpZnQgKyBcImVtXCI7IC8vIFJlY29yZCB0aGUgaGVpZ2h0IGFuZCB3aWR0aFxuXG4gICAgcnVsZS53aWR0aCA9IHdpZHRoO1xuICAgIHJ1bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgc2hpZnQ7XG4gICAgcnVsZS5kZXB0aCA9IC1zaGlmdDsgLy8gRm9udCBzaXplIGlzIHRoZSBudW1iZXIgbGFyZ2UgZW5vdWdoIHRoYXQgdGhlIGJyb3dzZXIgd2lsbFxuICAgIC8vIHJlc2VydmUgYXQgbGVhc3QgYGFic0hlaWdodGAgc3BhY2UgYWJvdmUgdGhlIGJhc2VsaW5lLlxuICAgIC8vIFRoZSAxLjEyNSBmYWN0b3Igd2FzIGVtcGlyaWNhbGx5IGRldGVybWluZWRcblxuICAgIHJ1bGUubWF4Rm9udFNpemUgPSBoZWlnaHQgKiAxLjEyNSAqIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgcmV0dXJuIHJ1bGU7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgd2lkdGggPSB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLndpZHRoLCBvcHRpb25zKTtcbiAgICB2YXIgaGVpZ2h0ID0gdW5pdHNfY2FsY3VsYXRlU2l6ZShncm91cC5oZWlnaHQsIG9wdGlvbnMpO1xuICAgIHZhciBzaGlmdCA9IGdyb3VwLnNoaWZ0ID8gdW5pdHNfY2FsY3VsYXRlU2l6ZShncm91cC5zaGlmdCwgb3B0aW9ucykgOiAwO1xuICAgIHZhciBjb2xvciA9IG9wdGlvbnMuY29sb3IgJiYgb3B0aW9ucy5nZXRDb2xvcigpIHx8IFwiYmxhY2tcIjtcbiAgICB2YXIgcnVsZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXNwYWNlXCIpO1xuICAgIHJ1bGUuc2V0QXR0cmlidXRlKFwibWF0aGJhY2tncm91bmRcIiwgY29sb3IpO1xuICAgIHJ1bGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgd2lkdGggKyBcImVtXCIpO1xuICAgIHJ1bGUuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGhlaWdodCArIFwiZW1cIik7XG4gICAgdmFyIHdyYXBwZXIgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1wYWRkZWRcIiwgW3J1bGVdKTtcblxuICAgIGlmIChzaGlmdCA+PSAwKSB7XG4gICAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBcIitcIiArIHNoaWZ0ICsgXCJlbVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgc2hpZnQgKyBcImVtXCIpO1xuICAgICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoXCJkZXB0aFwiLCBcIitcIiArIC1zaGlmdCArIFwiZW1cIik7XG4gICAgfVxuXG4gICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoXCJ2b2Zmc2V0XCIsIHNoaWZ0ICsgXCJlbVwiKTtcbiAgICByZXR1cm4gd3JhcHBlcjtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvc2l6aW5nLmpzXG5cblxuXG5cblxuZnVuY3Rpb24gc2l6aW5nR3JvdXAodmFsdWUsIG9wdGlvbnMsIGJhc2VPcHRpb25zKSB7XG4gIHZhciBpbm5lciA9IGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24odmFsdWUsIG9wdGlvbnMsIGZhbHNlKTtcbiAgdmFyIG11bHRpcGxpZXIgPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gYmFzZU9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7IC8vIEFkZCBzaXplLXJlc2V0dGluZyBjbGFzc2VzIHRvIHRoZSBpbm5lciBsaXN0IGFuZCBzZXQgbWF4Rm9udFNpemVcbiAgLy8gbWFudWFsbHkuIEhhbmRsZSBuZXN0ZWQgc2l6ZSBjaGFuZ2VzLlxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaW5uZXIubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcG9zID0gaW5uZXJbaV0uY2xhc3Nlcy5pbmRleE9mKFwic2l6aW5nXCIpO1xuXG4gICAgaWYgKHBvcyA8IDApIHtcbiAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGlubmVyW2ldLmNsYXNzZXMsIG9wdGlvbnMuc2l6aW5nQ2xhc3NlcyhiYXNlT3B0aW9ucykpO1xuICAgIH0gZWxzZSBpZiAoaW5uZXJbaV0uY2xhc3Nlc1twb3MgKyAxXSA9PT0gXCJyZXNldC1zaXplXCIgKyBvcHRpb25zLnNpemUpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBuZXN0ZWQgc2l6ZSBjaGFuZ2U6IGUuZy4sIGlubmVyW2ldIGlzIHRoZSBcImJcIiBpblxuICAgICAgLy8gYFxcSHVnZSBhIFxcc21hbGwgYmAuIE92ZXJyaWRlIHRoZSBvbGQgc2l6ZSAodGhlIGByZXNldC1gIGNsYXNzKVxuICAgICAgLy8gYnV0IG5vdCB0aGUgbmV3IHNpemUuXG4gICAgICBpbm5lcltpXS5jbGFzc2VzW3BvcyArIDFdID0gXCJyZXNldC1zaXplXCIgKyBiYXNlT3B0aW9ucy5zaXplO1xuICAgIH1cblxuICAgIGlubmVyW2ldLmhlaWdodCAqPSBtdWx0aXBsaWVyO1xuICAgIGlubmVyW2ldLmRlcHRoICo9IG11bHRpcGxpZXI7XG4gIH1cblxuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUZyYWdtZW50KGlubmVyKTtcbn1cbnZhciBzaXplRnVuY3MgPSBbXCJcXFxcdGlueVwiLCBcIlxcXFxzaXhwdHNpemVcIiwgXCJcXFxcc2NyaXB0c2l6ZVwiLCBcIlxcXFxmb290bm90ZXNpemVcIiwgXCJcXFxcc21hbGxcIiwgXCJcXFxcbm9ybWFsc2l6ZVwiLCBcIlxcXFxsYXJnZVwiLCBcIlxcXFxMYXJnZVwiLCBcIlxcXFxMQVJHRVwiLCBcIlxcXFxodWdlXCIsIFwiXFxcXEh1Z2VcIl07XG52YXIgc2l6aW5nX2h0bWxCdWlsZGVyID0gZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgLy8gSGFuZGxlIHNpemluZyBvcGVyYXRvcnMgbGlrZSBcXEh1Z2UuIFJlYWwgVGVYIGRvZXNuJ3QgYWN0dWFsbHkgYWxsb3dcbiAgLy8gdGhlc2UgZnVuY3Rpb25zIGluc2lkZSBvZiBtYXRoIGV4cHJlc3Npb25zLCBzbyB3ZSBkbyBzb21lIHNwZWNpYWxcbiAgLy8gaGFuZGxpbmcuXG4gIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTaXplKGdyb3VwLnNpemUpO1xuICByZXR1cm4gc2l6aW5nR3JvdXAoZ3JvdXAuYm9keSwgbmV3T3B0aW9ucywgb3B0aW9ucyk7XG59O1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInNpemluZ1wiLFxuICBuYW1lczogc2l6ZUZ1bmNzLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgYnJlYWtPblRva2VuVGV4dCA9IF9yZWYuYnJlYWtPblRva2VuVGV4dCxcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lLFxuICAgICAgICBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICB2YXIgYm9keSA9IHBhcnNlci5wYXJzZUV4cHJlc3Npb24oZmFsc2UsIGJyZWFrT25Ub2tlblRleHQpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInNpemluZ1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICAvLyBGaWd1cmUgb3V0IHdoYXQgc2l6ZSB0byB1c2UgYmFzZWQgb24gdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIGFib3ZlXG4gICAgICBzaXplOiBzaXplRnVuY3MuaW5kZXhPZihmdW5jTmFtZSkgKyAxLFxuICAgICAgYm9keTogYm9keVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBzaXppbmdfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU2l6ZShncm91cC5zaXplKTtcbiAgICB2YXIgaW5uZXIgPSBidWlsZE1hdGhNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgbmV3T3B0aW9ucyk7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1zdHlsZVwiLCBpbm5lcik7IC8vIFRPRE8oZW1pbHkpOiBUaGlzIGRvZXNuJ3QgcHJvZHVjZSB0aGUgY29ycmVjdCBzaXplIGZvciBuZXN0ZWQgc2l6ZVxuICAgIC8vIGNoYW5nZXMsIGJlY2F1c2Ugd2UgZG9uJ3Qga2VlcCBzdGF0ZSBvZiB3aGF0IHN0eWxlIHdlJ3JlIGN1cnJlbnRseVxuICAgIC8vIGluLCBzbyB3ZSBjYW4ndCByZXNldCB0aGUgc2l6ZSB0byBub3JtYWwgYmVmb3JlIGNoYW5naW5nIGl0LiAgTm93XG4gICAgLy8gdGhhdCB3ZSdyZSBwYXNzaW5nIGFuIG9wdGlvbnMgcGFyYW1ldGVyIHdlIHNob3VsZCBiZSBhYmxlIHRvIGZpeFxuICAgIC8vIHRoaXMuXG5cbiAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGhzaXplXCIsIG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXIgKyBcImVtXCIpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9zbWFzaC5qc1xuLy8gc21hc2gsIHdpdGggb3B0aW9uYWwgW3RiXSwgYXMgaW4gQU1TXG5cblxuXG5cblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwic21hc2hcIixcbiAgbmFtZXM6IFtcIlxcXFxzbWFzaFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIG51bU9wdGlvbmFsQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICB2YXIgc21hc2hIZWlnaHQgPSBmYWxzZTtcbiAgICB2YXIgc21hc2hEZXB0aCA9IGZhbHNlO1xuICAgIHZhciB0YkFyZyA9IG9wdEFyZ3NbMF0gJiYgYXNzZXJ0Tm9kZVR5cGUob3B0QXJnc1swXSwgXCJvcmRncm91cFwiKTtcblxuICAgIGlmICh0YkFyZykge1xuICAgICAgLy8gT3B0aW9uYWwgW3RiXSBhcmd1bWVudCBpcyBlbmdhZ2VkLlxuICAgICAgLy8gcmVmOiBhbXNtYXRoOiBcXHJlbmV3Y29tbWFuZHtcXHNtYXNofVsxXVt0Yl17JVxuICAgICAgLy8gICAgICAgICAgICAgICBkZWZcXG1iQHR7XFxodH1cXGRlZlxcbWJAYntcXGRwfVxcZGVmXFxtYkB0YntcXGh0XFx6QFxcekBcXGRwfSVcbiAgICAgIHZhciBsZXR0ZXIgPSBcIlwiO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRiQXJnLmJvZHkubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIG5vZGUgPSB0YkFyZy5ib2R5W2ldOyAvLyAkRmxvd0ZpeE1lOiBOb3QgZXZlcnkgbm9kZSB0eXBlIGhhcyBhIGB0ZXh0YCBwcm9wZXJ0eS5cblxuICAgICAgICBsZXR0ZXIgPSBub2RlLnRleHQ7XG5cbiAgICAgICAgaWYgKGxldHRlciA9PT0gXCJ0XCIpIHtcbiAgICAgICAgICBzbWFzaEhlaWdodCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAobGV0dGVyID09PSBcImJcIikge1xuICAgICAgICAgIHNtYXNoRGVwdGggPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNtYXNoSGVpZ2h0ID0gZmFsc2U7XG4gICAgICAgICAgc21hc2hEZXB0aCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNtYXNoSGVpZ2h0ID0gdHJ1ZTtcbiAgICAgIHNtYXNoRGVwdGggPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzbWFzaFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5OiBib2R5LFxuICAgICAgc21hc2hIZWlnaHQ6IHNtYXNoSGVpZ2h0LFxuICAgICAgc21hc2hEZXB0aDogc21hc2hEZXB0aFxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW10sIFtidWlsZEhUTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuXG4gICAgaWYgKCFncm91cC5zbWFzaEhlaWdodCAmJiAhZ3JvdXAuc21hc2hEZXB0aCkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgaWYgKGdyb3VwLnNtYXNoSGVpZ2h0KSB7XG4gICAgICBub2RlLmhlaWdodCA9IDA7IC8vIEluIG9yZGVyIHRvIGluZmx1ZW5jZSBtYWtlVkxpc3QsIHdlIGhhdmUgdG8gcmVzZXQgdGhlIGNoaWxkcmVuLlxuXG4gICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBub2RlLmNoaWxkcmVuW2ldLmhlaWdodCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JvdXAuc21hc2hEZXB0aCkge1xuICAgICAgbm9kZS5kZXB0aCA9IDA7XG5cbiAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgIG5vZGUuY2hpbGRyZW5bX2ldLmRlcHRoID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gQXQgdGhpcyBwb2ludCwgd2UndmUgcmVzZXQgdGhlIFRlWC1saWtlIGhlaWdodCBhbmQgZGVwdGggdmFsdWVzLlxuICAgIC8vIEJ1dCB0aGUgc3BhbiBzdGlsbCBoYXMgYW4gSFRNTCBsaW5lIGhlaWdodC5cbiAgICAvLyBtYWtlVkxpc3QgYXBwbGllcyBcImRpc3BsYXk6IHRhYmxlLWNlbGxcIiwgd2hpY2ggcHJldmVudHMgdGhlIGJyb3dzZXJcbiAgICAvLyBmcm9tIGFjdGluZyBvbiB0aGF0IGxpbmUgaGVpZ2h0LiBTbyB3ZSdsbCBjYWxsIG1ha2VWTGlzdCBub3cuXG5cblxuICAgIHZhciBzbWFzaGVkTm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBub2RlXG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpOyAvLyBGb3Igc3BhY2luZywgVGVYIHRyZWF0cyBcXGhwaGFudG9tIGFzIGEgbWF0aCBncm91cCAoc2FtZSBzcGFjaW5nIGFzIG9yZCkuXG5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiXSwgW3NtYXNoZWROb2RlXSwgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuXG4gICAgaWYgKGdyb3VwLnNtYXNoSGVpZ2h0KSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBcIjBweFwiKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JvdXAuc21hc2hEZXB0aCkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJkZXB0aFwiLCBcIjBweFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvc3FydC5qc1xuXG5cblxuXG5cblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwic3FydFwiLFxuICBuYW1lczogW1wiXFxcXHNxcnRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBudW1PcHRpb25hbEFyZ3M6IDFcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzLCBvcHRBcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyO1xuICAgIHZhciBpbmRleCA9IG9wdEFyZ3NbMF07XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInNxcnRcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keTogYm9keSxcbiAgICAgIGluZGV4OiBpbmRleFxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIFNxdWFyZSByb290cyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBwZy4gNDQzLCBSdWxlIDExLlxuICAgIC8vIEZpcnN0LCB3ZSBkbyB0aGUgc2FtZSBzdGVwcyBhcyBpbiBvdmVybGluZSB0byBidWlsZCB0aGUgaW5uZXIgZ3JvdXBcbiAgICAvLyBhbmQgbGluZVxuICAgIHZhciBpbm5lciA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMuaGF2aW5nQ3JhbXBlZFN0eWxlKCkpO1xuXG4gICAgaWYgKGlubmVyLmhlaWdodCA9PT0gMCkge1xuICAgICAgLy8gUmVuZGVyIGEgc21hbGwgc3VyZC5cbiAgICAgIGlubmVyLmhlaWdodCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS54SGVpZ2h0O1xuICAgIH0gLy8gU29tZSBncm91cHMgY2FuIHJldHVybiBkb2N1bWVudCBmcmFnbWVudHMuICBIYW5kbGUgdGhvc2UgYnkgd3JhcHBpbmdcbiAgICAvLyB0aGVtIGluIGEgc3Bhbi5cblxuXG4gICAgaW5uZXIgPSBidWlsZENvbW1vbi53cmFwRnJhZ21lbnQoaW5uZXIsIG9wdGlvbnMpOyAvLyBDYWxjdWxhdGUgdGhlIG1pbmltdW0gc2l6ZSBmb3IgdGhlIFxcc3VyZCBkZWxpbWl0ZXJcblxuICAgIHZhciBtZXRyaWNzID0gb3B0aW9ucy5mb250TWV0cmljcygpO1xuICAgIHZhciB0aGV0YSA9IG1ldHJpY3MuZGVmYXVsdFJ1bGVUaGlja25lc3M7XG4gICAgdmFyIHBoaSA9IHRoZXRhO1xuXG4gICAgaWYgKG9wdGlvbnMuc3R5bGUuaWQgPCBzcmNfU3R5bGUuVEVYVC5pZCkge1xuICAgICAgcGhpID0gb3B0aW9ucy5mb250TWV0cmljcygpLnhIZWlnaHQ7XG4gICAgfSAvLyBDYWxjdWxhdGUgdGhlIGNsZWFyYW5jZSBiZXR3ZWVuIHRoZSBib2R5IGFuZCBsaW5lXG5cblxuICAgIHZhciBsaW5lQ2xlYXJhbmNlID0gdGhldGEgKyBwaGkgLyA0O1xuICAgIHZhciBtaW5EZWxpbWl0ZXJIZWlnaHQgPSBpbm5lci5oZWlnaHQgKyBpbm5lci5kZXB0aCArIGxpbmVDbGVhcmFuY2UgKyB0aGV0YTsgLy8gQ3JlYXRlIGEgc3FydCBTVkcgb2YgdGhlIHJlcXVpcmVkIG1pbmltdW0gc2l6ZVxuXG4gICAgdmFyIF9kZWxpbWl0ZXIkc3FydEltYWdlID0gZGVsaW1pdGVyLnNxcnRJbWFnZShtaW5EZWxpbWl0ZXJIZWlnaHQsIG9wdGlvbnMpLFxuICAgICAgICBpbWcgPSBfZGVsaW1pdGVyJHNxcnRJbWFnZS5zcGFuLFxuICAgICAgICBydWxlV2lkdGggPSBfZGVsaW1pdGVyJHNxcnRJbWFnZS5ydWxlV2lkdGgsXG4gICAgICAgIGFkdmFuY2VXaWR0aCA9IF9kZWxpbWl0ZXIkc3FydEltYWdlLmFkdmFuY2VXaWR0aDtcblxuICAgIHZhciBkZWxpbURlcHRoID0gaW1nLmhlaWdodCAtIHJ1bGVXaWR0aDsgLy8gQWRqdXN0IHRoZSBjbGVhcmFuY2UgYmFzZWQgb24gdGhlIGRlbGltaXRlciBzaXplXG5cbiAgICBpZiAoZGVsaW1EZXB0aCA+IGlubmVyLmhlaWdodCArIGlubmVyLmRlcHRoICsgbGluZUNsZWFyYW5jZSkge1xuICAgICAgbGluZUNsZWFyYW5jZSA9IChsaW5lQ2xlYXJhbmNlICsgZGVsaW1EZXB0aCAtIGlubmVyLmhlaWdodCAtIGlubmVyLmRlcHRoKSAvIDI7XG4gICAgfSAvLyBTaGlmdCB0aGUgc3FydCBpbWFnZVxuXG5cbiAgICB2YXIgaW1nU2hpZnQgPSBpbWcuaGVpZ2h0IC0gaW5uZXIuaGVpZ2h0IC0gbGluZUNsZWFyYW5jZSAtIHJ1bGVXaWR0aDtcbiAgICBpbm5lci5zdHlsZS5wYWRkaW5nTGVmdCA9IGFkdmFuY2VXaWR0aCArIFwiZW1cIjsgLy8gT3ZlcmxheSB0aGUgaW1hZ2UgYW5kIHRoZSBhcmd1bWVudC5cblxuICAgIHZhciBib2R5ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJmaXJzdEJhc2VsaW5lXCIsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGlubmVyLFxuICAgICAgICB3cmFwcGVyQ2xhc3NlczogW1wic3ZnLWFsaWduXCJdXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiAtKGlubmVyLmhlaWdodCArIGltZ1NoaWZ0KVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogaW1nXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiBydWxlV2lkdGhcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWdyb3VwLmluZGV4KSB7XG4gICAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcInNxcnRcIl0sIFtib2R5XSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEhhbmRsZSB0aGUgb3B0aW9uYWwgcm9vdCBpbmRleFxuICAgICAgLy8gVGhlIGluZGV4IGlzIGFsd2F5cyBpbiBzY3JpcHRzY3JpcHQgc3R5bGVcbiAgICAgIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShzcmNfU3R5bGUuU0NSSVBUU0NSSVBUKTtcbiAgICAgIHZhciByb290bSA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmluZGV4LCBuZXdPcHRpb25zLCBvcHRpb25zKTsgLy8gVGhlIGFtb3VudCB0aGUgaW5kZXggaXMgc2hpZnRlZCBieS4gVGhpcyBpcyB0YWtlbiBmcm9tIHRoZSBUZVhcbiAgICAgIC8vIHNvdXJjZSwgaW4gdGhlIGRlZmluaXRpb24gb2YgYFxcckBAdGAuXG5cbiAgICAgIHZhciB0b1NoaWZ0ID0gMC42ICogKGJvZHkuaGVpZ2h0IC0gYm9keS5kZXB0aCk7IC8vIEJ1aWxkIGEgVkxpc3Qgd2l0aCB0aGUgc3VwZXJzY3JpcHQgc2hpZnRlZCB1cCBjb3JyZWN0bHlcblxuICAgICAgdmFyIHJvb3RWTGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJzaGlmdFwiLFxuICAgICAgICBwb3NpdGlvbkRhdGE6IC10b1NoaWZ0LFxuICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiByb290bVxuICAgICAgICB9XVxuICAgICAgfSwgb3B0aW9ucyk7IC8vIEFkZCBhIGNsYXNzIHN1cnJvdW5kaW5nIGl0IHNvIHdlIGNhbiBhZGQgb24gdGhlIGFwcHJvcHJpYXRlXG4gICAgICAvLyBrZXJuaW5nXG5cbiAgICAgIHZhciByb290Vkxpc3RXcmFwID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wicm9vdFwiXSwgW3Jvb3RWTGlzdF0pO1xuICAgICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJzcXJ0XCJdLCBbcm9vdFZMaXN0V3JhcCwgYm9keV0sIG9wdGlvbnMpO1xuICAgIH1cbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBib2R5ID0gZ3JvdXAuYm9keSxcbiAgICAgICAgaW5kZXggPSBncm91cC5pbmRleDtcbiAgICByZXR1cm4gaW5kZXggPyBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1yb290XCIsIFtidWlsZE1hdGhNTF9idWlsZEdyb3VwKGJvZHksIG9wdGlvbnMpLCBidWlsZE1hdGhNTF9idWlsZEdyb3VwKGluZGV4LCBvcHRpb25zKV0pIDogbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3FydFwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChib2R5LCBvcHRpb25zKV0pO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9zdHlsaW5nLmpzXG5cblxuXG5cblxudmFyIHN0eWxpbmdfc3R5bGVNYXAgPSB7XG4gIFwiZGlzcGxheVwiOiBzcmNfU3R5bGUuRElTUExBWSxcbiAgXCJ0ZXh0XCI6IHNyY19TdHlsZS5URVhULFxuICBcInNjcmlwdFwiOiBzcmNfU3R5bGUuU0NSSVBULFxuICBcInNjcmlwdHNjcmlwdFwiOiBzcmNfU3R5bGUuU0NSSVBUU0NSSVBUXG59O1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInN0eWxpbmdcIixcbiAgbmFtZXM6IFtcIlxcXFxkaXNwbGF5c3R5bGVcIiwgXCJcXFxcdGV4dHN0eWxlXCIsIFwiXFxcXHNjcmlwdHN0eWxlXCIsIFwiXFxcXHNjcmlwdHNjcmlwdHN0eWxlXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgYnJlYWtPblRva2VuVGV4dCA9IF9yZWYuYnJlYWtPblRva2VuVGV4dCxcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lLFxuICAgICAgICBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICAvLyBwYXJzZSBvdXQgdGhlIGltcGxpY2l0IGJvZHlcbiAgICB2YXIgYm9keSA9IHBhcnNlci5wYXJzZUV4cHJlc3Npb24odHJ1ZSwgYnJlYWtPblRva2VuVGV4dCk7IC8vIFRPRE86IFJlZmFjdG9yIHRvIGF2b2lkIGR1cGxpY2F0aW5nIHN0eWxlTWFwIGluIG11bHRpcGxlIHBsYWNlcyAoZS5nLlxuICAgIC8vIGhlcmUgYW5kIGluIGJ1aWxkSFRNTCBhbmQgZGUtZHVwZSB0aGUgZW51bWVyYXRpb24gb2YgYWxsIHRoZSBzdHlsZXMpLlxuICAgIC8vICRGbG93Rml4TWU6IFRoZSBuYW1lcyBhYm92ZSBleGFjdGx5IG1hdGNoIHRoZSBzdHlsZXMuXG5cbiAgICB2YXIgc3R5bGUgPSBmdW5jTmFtZS5zbGljZSgxLCBmdW5jTmFtZS5sZW5ndGggLSA1KTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzdHlsaW5nXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCBzdHlsZSB0byB1c2UgYnkgcHVsbGluZyBvdXQgdGhlIHN0eWxlIGZyb21cbiAgICAgIC8vIHRoZSBmdW5jdGlvbiBuYW1lXG4gICAgICBzdHlsZTogc3R5bGUsXG4gICAgICBib2R5OiBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gU3R5bGUgY2hhbmdlcyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBvbiBwZy4gNDQyLCBSdWxlIDMuXG4gICAgdmFyIG5ld1N0eWxlID0gc3R5bGluZ19zdHlsZU1hcFtncm91cC5zdHlsZV07XG4gICAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1N0eWxlKG5ld1N0eWxlKS53aXRoRm9udCgnJyk7XG4gICAgcmV0dXJuIHNpemluZ0dyb3VwKGdyb3VwLmJvZHksIG5ld09wdGlvbnMsIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gRmlndXJlIG91dCB3aGF0IHN0eWxlIHdlJ3JlIGNoYW5naW5nIHRvLlxuICAgIHZhciBuZXdTdHlsZSA9IHN0eWxpbmdfc3R5bGVNYXBbZ3JvdXAuc3R5bGVdO1xuICAgIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShuZXdTdHlsZSk7XG4gICAgdmFyIGlubmVyID0gYnVpbGRNYXRoTUxfYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG5ld09wdGlvbnMpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3R5bGVcIiwgaW5uZXIpO1xuICAgIHZhciBzdHlsZUF0dHJpYnV0ZXMgPSB7XG4gICAgICBcImRpc3BsYXlcIjogW1wiMFwiLCBcInRydWVcIl0sXG4gICAgICBcInRleHRcIjogW1wiMFwiLCBcImZhbHNlXCJdLFxuICAgICAgXCJzY3JpcHRcIjogW1wiMVwiLCBcImZhbHNlXCJdLFxuICAgICAgXCJzY3JpcHRzY3JpcHRcIjogW1wiMlwiLCBcImZhbHNlXCJdXG4gICAgfTtcbiAgICB2YXIgYXR0ciA9IHN0eWxlQXR0cmlidXRlc1tncm91cC5zdHlsZV07XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzY3JpcHRsZXZlbFwiLCBhdHRyWzBdKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImRpc3BsYXlzdHlsZVwiLCBhdHRyWzFdKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvc3Vwc3ViLmpzXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyoqXG4gKiBTb21ldGltZXMsIGdyb3VwcyBwZXJmb3JtIHNwZWNpYWwgcnVsZXMgd2hlbiB0aGV5IGhhdmUgc3VwZXJzY3JpcHRzIG9yXG4gKiBzdWJzY3JpcHRzIGF0dGFjaGVkIHRvIHRoZW0uIFRoaXMgZnVuY3Rpb24gbGV0cyB0aGUgYHN1cHN1YmAgZ3JvdXAga25vdyB0aGF0XG4gKiBTb21ldGltZXMsIGdyb3VwcyBwZXJmb3JtIHNwZWNpYWwgcnVsZXMgd2hlbiB0aGV5IGhhdmUgc3VwZXJzY3JpcHRzIG9yXG4gKiBpdHMgaW5uZXIgZWxlbWVudCBzaG91bGQgaGFuZGxlIHRoZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMgaW5zdGVhZCBvZlxuICogaGFuZGxpbmcgdGhlbSBpdHNlbGYuXG4gKi9cbnZhciBzdXBzdWJfaHRtbEJ1aWxkZXJEZWxlZ2F0ZSA9IGZ1bmN0aW9uIGh0bWxCdWlsZGVyRGVsZWdhdGUoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIGJhc2UgPSBncm91cC5iYXNlO1xuXG4gIGlmICghYmFzZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2UgaWYgKGJhc2UudHlwZSA9PT0gXCJvcFwiKSB7XG4gICAgLy8gT3BlcmF0b3JzIGhhbmRsZSBzdXBzdWJzIGRpZmZlcmVudGx5IHdoZW4gdGhleSBoYXZlIGxpbWl0c1xuICAgIC8vIChlLmcuIGBcXGRpc3BsYXlzdHlsZVxcc3VtXzJeM2ApXG4gICAgdmFyIGRlbGVnYXRlID0gYmFzZS5saW1pdHMgJiYgKG9wdGlvbnMuc3R5bGUuc2l6ZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkuc2l6ZSB8fCBiYXNlLmFsd2F5c0hhbmRsZVN1cFN1Yik7XG4gICAgcmV0dXJuIGRlbGVnYXRlID8gb3BfaHRtbEJ1aWxkZXIgOiBudWxsO1xuICB9IGVsc2UgaWYgKGJhc2UudHlwZSA9PT0gXCJvcGVyYXRvcm5hbWVcIikge1xuICAgIHZhciBfZGVsZWdhdGUgPSBiYXNlLmFsd2F5c0hhbmRsZVN1cFN1YiAmJiAob3B0aW9ucy5zdHlsZS5zaXplID09PSBzcmNfU3R5bGUuRElTUExBWS5zaXplIHx8IGJhc2UubGltaXRzKTtcblxuICAgIHJldHVybiBfZGVsZWdhdGUgPyBvcGVyYXRvcm5hbWVfaHRtbEJ1aWxkZXIgOiBudWxsO1xuICB9IGVsc2UgaWYgKGJhc2UudHlwZSA9PT0gXCJhY2NlbnRcIikge1xuICAgIHJldHVybiB1dGlscy5pc0NoYXJhY3RlckJveChiYXNlLmJhc2UpID8gYWNjZW50X2h0bWxCdWlsZGVyIDogbnVsbDtcbiAgfSBlbHNlIGlmIChiYXNlLnR5cGUgPT09IFwiaG9yaXpCcmFjZVwiKSB7XG4gICAgdmFyIGlzU3VwID0gIWdyb3VwLnN1YjtcbiAgICByZXR1cm4gaXNTdXAgPT09IGJhc2UuaXNPdmVyID8gaG9yaXpCcmFjZV9odG1sQnVpbGRlciA6IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07IC8vIFN1cGVyIHNjcmlwdHMgYW5kIHN1YnNjcmlwdHMsIHdob3NlIHByZWNpc2UgcGxhY2VtZW50IGNhbiBkZXBlbmQgb24gb3RoZXJcbi8vIGZ1bmN0aW9ucyB0aGF0IHByZWNlZGUgdGhlbS5cblxuXG5kZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKHtcbiAgdHlwZTogXCJzdXBzdWJcIixcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gU3VwZXJzY3JpcHQgYW5kIHN1YnNjcmlwdHMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgb24gcGFnZVxuICAgIC8vIDQ0NS00NDYsIHJ1bGVzIDE4KGEtZikuXG4gICAgLy8gSGVyZSBpcyB3aGVyZSB3ZSBkZWZlciB0byB0aGUgaW5uZXIgZ3JvdXAgaWYgaXQgc2hvdWxkIGhhbmRsZVxuICAgIC8vIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cyBpdHNlbGYuXG4gICAgdmFyIGJ1aWxkZXJEZWxlZ2F0ZSA9IHN1cHN1Yl9odG1sQnVpbGRlckRlbGVnYXRlKGdyb3VwLCBvcHRpb25zKTtcblxuICAgIGlmIChidWlsZGVyRGVsZWdhdGUpIHtcbiAgICAgIHJldHVybiBidWlsZGVyRGVsZWdhdGUoZ3JvdXAsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZUJhc2UgPSBncm91cC5iYXNlLFxuICAgICAgICB2YWx1ZVN1cCA9IGdyb3VwLnN1cCxcbiAgICAgICAgdmFsdWVTdWIgPSBncm91cC5zdWI7XG4gICAgdmFyIGJhc2UgPSBidWlsZEhUTUxfYnVpbGRHcm91cCh2YWx1ZUJhc2UsIG9wdGlvbnMpO1xuICAgIHZhciBzdXBtO1xuICAgIHZhciBzdWJtO1xuICAgIHZhciBtZXRyaWNzID0gb3B0aW9ucy5mb250TWV0cmljcygpOyAvLyBSdWxlIDE4YVxuXG4gICAgdmFyIHN1cFNoaWZ0ID0gMDtcbiAgICB2YXIgc3ViU2hpZnQgPSAwO1xuICAgIHZhciBpc0NoYXJhY3RlckJveCA9IHZhbHVlQmFzZSAmJiB1dGlscy5pc0NoYXJhY3RlckJveCh2YWx1ZUJhc2UpO1xuXG4gICAgaWYgKHZhbHVlU3VwKSB7XG4gICAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUob3B0aW9ucy5zdHlsZS5zdXAoKSk7XG4gICAgICBzdXBtID0gYnVpbGRIVE1MX2J1aWxkR3JvdXAodmFsdWVTdXAsIG5ld09wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAoIWlzQ2hhcmFjdGVyQm94KSB7XG4gICAgICAgIHN1cFNoaWZ0ID0gYmFzZS5oZWlnaHQgLSBuZXdPcHRpb25zLmZvbnRNZXRyaWNzKCkuc3VwRHJvcCAqIG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXIgLyBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWx1ZVN1Yikge1xuICAgICAgdmFyIF9uZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShvcHRpb25zLnN0eWxlLnN1YigpKTtcblxuICAgICAgc3VibSA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKHZhbHVlU3ViLCBfbmV3T3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgICAgIGlmICghaXNDaGFyYWN0ZXJCb3gpIHtcbiAgICAgICAgc3ViU2hpZnQgPSBiYXNlLmRlcHRoICsgX25ld09wdGlvbnMuZm9udE1ldHJpY3MoKS5zdWJEcm9wICogX25ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXIgLyBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICAgICAgfVxuICAgIH0gLy8gUnVsZSAxOGNcblxuXG4gICAgdmFyIG1pblN1cFNoaWZ0O1xuXG4gICAgaWYgKG9wdGlvbnMuc3R5bGUgPT09IHNyY19TdHlsZS5ESVNQTEFZKSB7XG4gICAgICBtaW5TdXBTaGlmdCA9IG1ldHJpY3Muc3VwMTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuc3R5bGUuY3JhbXBlZCkge1xuICAgICAgbWluU3VwU2hpZnQgPSBtZXRyaWNzLnN1cDM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1pblN1cFNoaWZ0ID0gbWV0cmljcy5zdXAyO1xuICAgIH0gLy8gc2NyaXB0c3BhY2UgaXMgYSBmb250LXNpemUtaW5kZXBlbmRlbnQgc2l6ZSwgc28gc2NhbGUgaXRcbiAgICAvLyBhcHByb3ByaWF0ZWx5IGZvciB1c2UgYXMgdGhlIG1hcmdpblJpZ2h0LlxuXG5cbiAgICB2YXIgbXVsdGlwbGllciA9IG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgdmFyIG1hcmdpblJpZ2h0ID0gMC41IC8gbWV0cmljcy5wdFBlckVtIC8gbXVsdGlwbGllciArIFwiZW1cIjtcbiAgICB2YXIgbWFyZ2luTGVmdCA9IG51bGw7XG5cbiAgICBpZiAoc3VibSkge1xuICAgICAgLy8gU3Vic2NyaXB0cyBzaG91bGRuJ3QgYmUgc2hpZnRlZCBieSB0aGUgYmFzZSdzIGl0YWxpYyBjb3JyZWN0aW9uLlxuICAgICAgLy8gQWNjb3VudCBmb3IgdGhhdCBieSBzaGlmdGluZyB0aGUgc3Vic2NyaXB0IGJhY2sgdGhlIGFwcHJvcHJpYXRlXG4gICAgICAvLyBhbW91bnQuIE5vdGUgd2Ugb25seSBkbyB0aGlzIHdoZW4gdGhlIGJhc2UgaXMgYSBzaW5nbGUgc3ltYm9sLlxuICAgICAgdmFyIGlzT2lpbnQgPSBncm91cC5iYXNlICYmIGdyb3VwLmJhc2UudHlwZSA9PT0gXCJvcFwiICYmIGdyb3VwLmJhc2UubmFtZSAmJiAoZ3JvdXAuYmFzZS5uYW1lID09PSBcIlxcXFxvaWludFwiIHx8IGdyb3VwLmJhc2UubmFtZSA9PT0gXCJcXFxcb2lpaW50XCIpO1xuXG4gICAgICBpZiAoYmFzZSBpbnN0YW5jZW9mIGRvbVRyZWVfU3ltYm9sTm9kZSB8fCBpc09paW50KSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgbWFyZ2luTGVmdCA9IC1iYXNlLml0YWxpYyArIFwiZW1cIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc3Vwc3ViO1xuXG4gICAgaWYgKHN1cG0gJiYgc3VibSkge1xuICAgICAgc3VwU2hpZnQgPSBNYXRoLm1heChzdXBTaGlmdCwgbWluU3VwU2hpZnQsIHN1cG0uZGVwdGggKyAwLjI1ICogbWV0cmljcy54SGVpZ2h0KTtcbiAgICAgIHN1YlNoaWZ0ID0gTWF0aC5tYXgoc3ViU2hpZnQsIG1ldHJpY3Muc3ViMik7XG4gICAgICB2YXIgcnVsZVdpZHRoID0gbWV0cmljcy5kZWZhdWx0UnVsZVRoaWNrbmVzczsgLy8gUnVsZSAxOGVcblxuICAgICAgdmFyIG1heFdpZHRoID0gNCAqIHJ1bGVXaWR0aDtcblxuICAgICAgaWYgKHN1cFNoaWZ0IC0gc3VwbS5kZXB0aCAtIChzdWJtLmhlaWdodCAtIHN1YlNoaWZ0KSA8IG1heFdpZHRoKSB7XG4gICAgICAgIHN1YlNoaWZ0ID0gbWF4V2lkdGggLSAoc3VwU2hpZnQgLSBzdXBtLmRlcHRoKSArIHN1Ym0uaGVpZ2h0O1xuICAgICAgICB2YXIgcHNpID0gMC44ICogbWV0cmljcy54SGVpZ2h0IC0gKHN1cFNoaWZ0IC0gc3VwbS5kZXB0aCk7XG5cbiAgICAgICAgaWYgKHBzaSA+IDApIHtcbiAgICAgICAgICBzdXBTaGlmdCArPSBwc2k7XG4gICAgICAgICAgc3ViU2hpZnQgLT0gcHNpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB2bGlzdEVsZW0gPSBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogc3VibSxcbiAgICAgICAgc2hpZnQ6IHN1YlNoaWZ0LFxuICAgICAgICBtYXJnaW5SaWdodDogbWFyZ2luUmlnaHQsXG4gICAgICAgIG1hcmdpbkxlZnQ6IG1hcmdpbkxlZnRcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHN1cG0sXG4gICAgICAgIHNoaWZ0OiAtc3VwU2hpZnQsXG4gICAgICAgIG1hcmdpblJpZ2h0OiBtYXJnaW5SaWdodFxuICAgICAgfV07XG4gICAgICBzdXBzdWIgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICAgIGNoaWxkcmVuOiB2bGlzdEVsZW1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAoc3VibSkge1xuICAgICAgLy8gUnVsZSAxOGJcbiAgICAgIHN1YlNoaWZ0ID0gTWF0aC5tYXgoc3ViU2hpZnQsIG1ldHJpY3Muc3ViMSwgc3VibS5oZWlnaHQgLSAwLjggKiBtZXRyaWNzLnhIZWlnaHQpO1xuICAgICAgdmFyIF92bGlzdEVsZW0gPSBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogc3VibSxcbiAgICAgICAgbWFyZ2luTGVmdDogbWFyZ2luTGVmdCxcbiAgICAgICAgbWFyZ2luUmlnaHQ6IG1hcmdpblJpZ2h0XG4gICAgICB9XTtcbiAgICAgIHN1cHN1YiA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJzaGlmdFwiLFxuICAgICAgICBwb3NpdGlvbkRhdGE6IHN1YlNoaWZ0LFxuICAgICAgICBjaGlsZHJlbjogX3ZsaXN0RWxlbVxuICAgICAgfSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIGlmIChzdXBtKSB7XG4gICAgICAvLyBSdWxlIDE4YywgZFxuICAgICAgc3VwU2hpZnQgPSBNYXRoLm1heChzdXBTaGlmdCwgbWluU3VwU2hpZnQsIHN1cG0uZGVwdGggKyAwLjI1ICogbWV0cmljcy54SGVpZ2h0KTtcbiAgICAgIHN1cHN1YiA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJzaGlmdFwiLFxuICAgICAgICBwb3NpdGlvbkRhdGE6IC1zdXBTaGlmdCxcbiAgICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogc3VwbSxcbiAgICAgICAgICBtYXJnaW5SaWdodDogbWFyZ2luUmlnaHRcbiAgICAgICAgfV1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzdXBzdWIgbXVzdCBoYXZlIGVpdGhlciBzdXAgb3Igc3ViLlwiKTtcbiAgICB9IC8vIFdyYXAgdGhlIHN1cHN1YiB2bGlzdCBpbiBhIHNwYW4ubXN1cHN1YiB0byByZXNldCB0ZXh0LWFsaWduLlxuXG5cbiAgICB2YXIgbWNsYXNzID0gZ2V0VHlwZU9mRG9tVHJlZShiYXNlLCBcInJpZ2h0XCIpIHx8IFwibW9yZFwiO1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbbWNsYXNzXSwgW2Jhc2UsIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1zdXBzdWJcIl0sIFtzdXBzdWJdKV0sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gSXMgdGhlIGlubmVyIGdyb3VwIGEgcmVsZXZhbnQgaG9yaXpvbmFsIGJyYWNlP1xuICAgIHZhciBpc0JyYWNlID0gZmFsc2U7XG4gICAgdmFyIGlzT3ZlcjtcbiAgICB2YXIgaXNTdXA7XG4gICAgdmFyIGhvcml6QnJhY2UgPSBjaGVja05vZGVUeXBlKGdyb3VwLmJhc2UsIFwiaG9yaXpCcmFjZVwiKTtcblxuICAgIGlmIChob3JpekJyYWNlKSB7XG4gICAgICBpc1N1cCA9ICEhZ3JvdXAuc3VwO1xuXG4gICAgICBpZiAoaXNTdXAgPT09IGhvcml6QnJhY2UuaXNPdmVyKSB7XG4gICAgICAgIGlzQnJhY2UgPSB0cnVlO1xuICAgICAgICBpc092ZXIgPSBob3JpekJyYWNlLmlzT3ZlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JvdXAuYmFzZSAmJiAoZ3JvdXAuYmFzZS50eXBlID09PSBcIm9wXCIgfHwgZ3JvdXAuYmFzZS50eXBlID09PSBcIm9wZXJhdG9ybmFtZVwiKSkge1xuICAgICAgZ3JvdXAuYmFzZS5wYXJlbnRJc1N1cFN1YiA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkcmVuID0gW2J1aWxkTWF0aE1MX2J1aWxkR3JvdXAoZ3JvdXAuYmFzZSwgb3B0aW9ucyldO1xuXG4gICAgaWYgKGdyb3VwLnN1Yikge1xuICAgICAgY2hpbGRyZW4ucHVzaChidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLnN1Yiwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIGlmIChncm91cC5zdXApIHtcbiAgICAgIGNoaWxkcmVuLnB1c2goYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5zdXAsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICB2YXIgbm9kZVR5cGU7XG5cbiAgICBpZiAoaXNCcmFjZSkge1xuICAgICAgbm9kZVR5cGUgPSBpc092ZXIgPyBcIm1vdmVyXCIgOiBcIm11bmRlclwiO1xuICAgIH0gZWxzZSBpZiAoIWdyb3VwLnN1Yikge1xuICAgICAgdmFyIGJhc2UgPSBncm91cC5iYXNlO1xuXG4gICAgICBpZiAoYmFzZSAmJiBiYXNlLnR5cGUgPT09IFwib3BcIiAmJiBiYXNlLmxpbWl0cyAmJiAob3B0aW9ucy5zdHlsZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkgfHwgYmFzZS5hbHdheXNIYW5kbGVTdXBTdWIpKSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtb3ZlclwiO1xuICAgICAgfSBlbHNlIGlmIChiYXNlICYmIGJhc2UudHlwZSA9PT0gXCJvcGVyYXRvcm5hbWVcIiAmJiBiYXNlLmFsd2F5c0hhbmRsZVN1cFN1YiAmJiAoYmFzZS5saW1pdHMgfHwgb3B0aW9ucy5zdHlsZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkpKSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtb3ZlclwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm1zdXBcIjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFncm91cC5zdXApIHtcbiAgICAgIHZhciBfYmFzZSA9IGdyb3VwLmJhc2U7XG5cbiAgICAgIGlmIChfYmFzZSAmJiBfYmFzZS50eXBlID09PSBcIm9wXCIgJiYgX2Jhc2UubGltaXRzICYmIChvcHRpb25zLnN0eWxlID09PSBzcmNfU3R5bGUuRElTUExBWSB8fCBfYmFzZS5hbHdheXNIYW5kbGVTdXBTdWIpKSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtdW5kZXJcIjtcbiAgICAgIH0gZWxzZSBpZiAoX2Jhc2UgJiYgX2Jhc2UudHlwZSA9PT0gXCJvcGVyYXRvcm5hbWVcIiAmJiBfYmFzZS5hbHdheXNIYW5kbGVTdXBTdWIgJiYgKF9iYXNlLmxpbWl0cyB8fCBvcHRpb25zLnN0eWxlID09PSBzcmNfU3R5bGUuRElTUExBWSkpIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm11bmRlclwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm1zdWJcIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9iYXNlMiA9IGdyb3VwLmJhc2U7XG5cbiAgICAgIGlmIChfYmFzZTIgJiYgX2Jhc2UyLnR5cGUgPT09IFwib3BcIiAmJiBfYmFzZTIubGltaXRzICYmIG9wdGlvbnMuc3R5bGUgPT09IHNyY19TdHlsZS5ESVNQTEFZKSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtdW5kZXJvdmVyXCI7XG4gICAgICB9IGVsc2UgaWYgKF9iYXNlMiAmJiBfYmFzZTIudHlwZSA9PT0gXCJvcGVyYXRvcm5hbWVcIiAmJiBfYmFzZTIuYWx3YXlzSGFuZGxlU3VwU3ViICYmIChvcHRpb25zLnN0eWxlID09PSBzcmNfU3R5bGUuRElTUExBWSB8fCBfYmFzZTIubGltaXRzKSkge1xuICAgICAgICBub2RlVHlwZSA9IFwibXVuZGVyb3ZlclwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm1zdWJzdXBcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKG5vZGVUeXBlLCBjaGlsZHJlbik7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3N5bWJvbHNPcC5qc1xuXG5cblxuIC8vIE9wZXJhdG9yIFBhcnNlTm9kZXMgY3JlYXRlZCBpbiBQYXJzZXIuanMgZnJvbSBzeW1ib2wgR3JvdXBzIGluIHNyYy9zeW1ib2xzLmpzLlxuXG5kZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKHtcbiAgdHlwZTogXCJhdG9tXCIsXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYXRoc3ltKGdyb3VwLnRleHQsIGdyb3VwLm1vZGUsIG9wdGlvbnMsIFtcIm1cIiArIGdyb3VwLmZhbWlseV0pO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFtidWlsZE1hdGhNTF9tYWtlVGV4dChncm91cC50ZXh0LCBncm91cC5tb2RlKV0pO1xuXG4gICAgaWYgKGdyb3VwLmZhbWlseSA9PT0gXCJiaW5cIikge1xuICAgICAgdmFyIHZhcmlhbnQgPSBidWlsZE1hdGhNTF9nZXRWYXJpYW50KGdyb3VwLCBvcHRpb25zKTtcblxuICAgICAgaWYgKHZhcmlhbnQgPT09IFwiYm9sZC1pdGFsaWNcIikge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGh2YXJpYW50XCIsIHZhcmlhbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZ3JvdXAuZmFtaWx5ID09PSBcInB1bmN0XCIpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic2VwYXJhdG9yXCIsIFwidHJ1ZVwiKTtcbiAgICB9IGVsc2UgaWYgKGdyb3VwLmZhbWlseSA9PT0gXCJvcGVuXCIgfHwgZ3JvdXAuZmFtaWx5ID09PSBcImNsb3NlXCIpIHtcbiAgICAgIC8vIERlbGltcyBidWlsdCBoZXJlIHNob3VsZCBub3Qgc3RyZXRjaCB2ZXJ0aWNhbGx5LlxuICAgICAgLy8gU2VlIGRlbGltc2l6aW5nLmpzIGZvciBzdHJldGNoeSBkZWxpbXMuXG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcInN0cmV0Y2h5XCIsIFwiZmFsc2VcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3N5bWJvbHNPcmQuanNcblxuXG5cblxuLy8gXCJtYXRob3JkXCIgYW5kIFwidGV4dG9yZFwiIFBhcnNlTm9kZXMgY3JlYXRlZCBpbiBQYXJzZXIuanMgZnJvbSBzeW1ib2wgR3JvdXBzIGluXG52YXIgZGVmYXVsdFZhcmlhbnQgPSB7XG4gIFwibWlcIjogXCJpdGFsaWNcIixcbiAgXCJtblwiOiBcIm5vcm1hbFwiLFxuICBcIm10ZXh0XCI6IFwibm9ybWFsXCJcbn07XG5kZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKHtcbiAgdHlwZTogXCJtYXRob3JkXCIsXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlT3JkKGdyb3VwLCBvcHRpb25zLCBcIm1hdGhvcmRcIik7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibWlcIiwgW2J1aWxkTWF0aE1MX21ha2VUZXh0KGdyb3VwLnRleHQsIGdyb3VwLm1vZGUsIG9wdGlvbnMpXSk7XG4gICAgdmFyIHZhcmlhbnQgPSBidWlsZE1hdGhNTF9nZXRWYXJpYW50KGdyb3VwLCBvcHRpb25zKSB8fCBcIml0YWxpY1wiO1xuXG4gICAgaWYgKHZhcmlhbnQgIT09IGRlZmF1bHRWYXJpYW50W25vZGUudHlwZV0pIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWF0aHZhcmlhbnRcIiwgdmFyaWFudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuZGVmaW5lRnVuY3Rpb25CdWlsZGVycyh7XG4gIHR5cGU6IFwidGV4dG9yZFwiLFxuICBodG1sQnVpbGRlcjogZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZU9yZChncm91cCwgb3B0aW9ucywgXCJ0ZXh0b3JkXCIpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIHRleHQgPSBidWlsZE1hdGhNTF9tYWtlVGV4dChncm91cC50ZXh0LCBncm91cC5tb2RlLCBvcHRpb25zKTtcbiAgICB2YXIgdmFyaWFudCA9IGJ1aWxkTWF0aE1MX2dldFZhcmlhbnQoZ3JvdXAsIG9wdGlvbnMpIHx8IFwibm9ybWFsXCI7XG4gICAgdmFyIG5vZGU7XG5cbiAgICBpZiAoZ3JvdXAubW9kZSA9PT0gJ3RleHQnKSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdGV4dFwiLCBbdGV4dF0pO1xuICAgIH0gZWxzZSBpZiAoL1swLTldLy50ZXN0KGdyb3VwLnRleHQpKSB7XG4gICAgICAvLyBUT0RPKGtldmluYikgbWVyZ2UgYWRqYWNlbnQgPG1uPiBub2Rlc1xuICAgICAgLy8gZG8gaXQgYXMgYSBwb3N0IHByb2Nlc3Npbmcgc3RlcFxuICAgICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW5cIiwgW3RleHRdKTtcbiAgICB9IGVsc2UgaWYgKGdyb3VwLnRleHQgPT09IFwiXFxcXHByaW1lXCIpIHtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFt0ZXh0XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1pXCIsIFt0ZXh0XSk7XG4gICAgfVxuXG4gICAgaWYgKHZhcmlhbnQgIT09IGRlZmF1bHRWYXJpYW50W25vZGUudHlwZV0pIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWF0aHZhcmlhbnRcIiwgdmFyaWFudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3N5bWJvbHNTcGFjaW5nLmpzXG5cblxuXG4gLy8gQSBtYXAgb2YgQ1NTLWJhc2VkIHNwYWNpbmcgZnVuY3Rpb25zIHRvIHRoZWlyIENTUyBjbGFzcy5cblxudmFyIGNzc1NwYWNlID0ge1xuICBcIlxcXFxub2JyZWFrXCI6IFwibm9icmVha1wiLFxuICBcIlxcXFxhbGxvd2JyZWFrXCI6IFwiYWxsb3dicmVha1wiXG59OyAvLyBBIGxvb2t1cCB0YWJsZSB0byBkZXRlcm1pbmUgd2hldGhlciBhIHNwYWNpbmcgZnVuY3Rpb24vc3ltYm9sIHNob3VsZCBiZVxuLy8gdHJlYXRlZCBsaWtlIGEgcmVndWxhciBzcGFjZSBjaGFyYWN0ZXIuICBJZiBhIHN5bWJvbCBvciBjb21tYW5kIGlzIGEga2V5XG4vLyBpbiB0aGlzIHRhYmxlLCB0aGVuIGl0IHNob3VsZCBiZSBhIHJlZ3VsYXIgc3BhY2UgY2hhcmFjdGVyLiAgRnVydGhlcm1vcmUsXG4vLyB0aGUgYXNzb2NpYXRlZCB2YWx1ZSBtYXkgaGF2ZSBhIGBjbGFzc05hbWVgIHNwZWNpZnlpbmcgYW4gZXh0cmEgQ1NTIGNsYXNzXG4vLyB0byBhZGQgdG8gdGhlIGNyZWF0ZWQgYHNwYW5gLlxuXG52YXIgcmVndWxhclNwYWNlID0ge1xuICBcIiBcIjoge30sXG4gIFwiXFxcXCBcIjoge30sXG4gIFwiflwiOiB7XG4gICAgY2xhc3NOYW1lOiBcIm5vYnJlYWtcIlxuICB9LFxuICBcIlxcXFxzcGFjZVwiOiB7fSxcbiAgXCJcXFxcbm9icmVha3NwYWNlXCI6IHtcbiAgICBjbGFzc05hbWU6IFwibm9icmVha1wiXG4gIH1cbn07IC8vIFBhcnNlTm9kZTxcInNwYWNpbmdcIj4gY3JlYXRlZCBpbiBQYXJzZXIuanMgZnJvbSB0aGUgXCJzcGFjaW5nXCIgc3ltYm9sIEdyb3VwcyBpblxuLy8gc3JjL3N5bWJvbHMuanMuXG5cbmRlZmluZUZ1bmN0aW9uQnVpbGRlcnMoe1xuICB0eXBlOiBcInNwYWNpbmdcIixcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgaWYgKHJlZ3VsYXJTcGFjZS5oYXNPd25Qcm9wZXJ0eShncm91cC50ZXh0KSkge1xuICAgICAgdmFyIGNsYXNzTmFtZSA9IHJlZ3VsYXJTcGFjZVtncm91cC50ZXh0XS5jbGFzc05hbWUgfHwgXCJcIjsgLy8gU3BhY2VzIGFyZSBnZW5lcmF0ZWQgYnkgYWRkaW5nIGFuIGFjdHVhbCBzcGFjZS4gRWFjaCBvZiB0aGVzZVxuICAgICAgLy8gdGhpbmdzIGhhcyBhbiBlbnRyeSBpbiB0aGUgc3ltYm9scyB0YWJsZSwgc28gdGhlc2Ugd2lsbCBiZSB0dXJuZWRcbiAgICAgIC8vIGludG8gYXBwcm9wcmlhdGUgb3V0cHV0cy5cblxuICAgICAgaWYgKGdyb3VwLm1vZGUgPT09IFwidGV4dFwiKSB7XG4gICAgICAgIHZhciBvcmQgPSBidWlsZENvbW1vbi5tYWtlT3JkKGdyb3VwLCBvcHRpb25zLCBcInRleHRvcmRcIik7XG4gICAgICAgIG9yZC5jbGFzc2VzLnB1c2goY2xhc3NOYW1lKTtcbiAgICAgICAgcmV0dXJuIG9yZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtc3BhY2VcIiwgY2xhc3NOYW1lXSwgW2J1aWxkQ29tbW9uLm1hdGhzeW0oZ3JvdXAudGV4dCwgZ3JvdXAubW9kZSwgb3B0aW9ucyldLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNzc1NwYWNlLmhhc093blByb3BlcnR5KGdyb3VwLnRleHQpKSB7XG4gICAgICAvLyBTcGFjZXMgYmFzZWQgb24ganVzdCBhIENTUyBjbGFzcy5cbiAgICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtc3BhY2VcIiwgY3NzU3BhY2VbZ3JvdXAudGV4dF1dLCBbXSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlVua25vd24gdHlwZSBvZiBzcGFjZSBcXFwiXCIgKyBncm91cC50ZXh0ICsgXCJcXFwiXCIpO1xuICAgIH1cbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBub2RlO1xuXG4gICAgaWYgKHJlZ3VsYXJTcGFjZS5oYXNPd25Qcm9wZXJ0eShncm91cC50ZXh0KSkge1xuICAgICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRleHRcIiwgW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKFwiXFx4QTBcIildKTtcbiAgICB9IGVsc2UgaWYgKGNzc1NwYWNlLmhhc093blByb3BlcnR5KGdyb3VwLnRleHQpKSB7XG4gICAgICAvLyBDU1MtYmFzZWQgTWF0aE1MIHNwYWNlcyAoXFxub2JyZWFrLCBcXGFsbG93YnJlYWspIGFyZSBpZ25vcmVkXG4gICAgICByZXR1cm4gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3BhY2VcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlVua25vd24gdHlwZSBvZiBzcGFjZSBcXFwiXCIgKyBncm91cC50ZXh0ICsgXCJcXFwiXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy90YWcuanNcblxuXG5cblxudmFyIHRhZ19wYWQgPSBmdW5jdGlvbiBwYWQoKSB7XG4gIHZhciBwYWROb2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdGRcIiwgW10pO1xuICBwYWROb2RlLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFwiNTAlXCIpO1xuICByZXR1cm4gcGFkTm9kZTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uQnVpbGRlcnMoe1xuICB0eXBlOiBcInRhZ1wiLFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIHRhYmxlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdGFibGVcIiwgW25ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRyXCIsIFt0YWdfcGFkKCksIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRkXCIsIFtidWlsZEV4cHJlc3Npb25Sb3coZ3JvdXAuYm9keSwgb3B0aW9ucyldKSwgdGFnX3BhZCgpLCBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZFwiLCBbYnVpbGRFeHByZXNzaW9uUm93KGdyb3VwLnRhZywgb3B0aW9ucyldKV0pXSk7XG4gICAgdGFibGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgXCIxMDAlXCIpO1xuICAgIHJldHVybiB0YWJsZTsgLy8gVE9ETzogTGVmdC1hbGlnbmVkIHRhZ3MuXG4gICAgLy8gQ3VycmVudGx5LCB0aGUgZ3JvdXAgYW5kIG9wdGlvbnMgcGFzc2VkIGhlcmUgZG8gbm90IGNvbnRhaW5cbiAgICAvLyBlbm91Z2ggaW5mbyB0byBzZXQgdGFnIGFsaWdubWVudC4gYGxlcW5vYCBpcyBpbiBTZXR0aW5ncyBidXQgaXQgaXNcbiAgICAvLyBub3QgcGFzc2VkIHRvIE9wdGlvbnMuIE9uIHRoZSBIVE1MIHNpZGUsIGxlcW5vIGlzXG4gICAgLy8gc2V0IGJ5IGEgQ1NTIGNsYXNzIGFwcGxpZWQgaW4gYnVpbGRUcmVlLmpzLiBUaGF0IHdvdWxkIGhhdmUgd29ya2VkXG4gICAgLy8gaW4gTWF0aE1MIGlmIGJyb3dzZXJzIHN1cHBvcnRlZCA8bWxhYmVsZWR0cj4uIFNpbmNlIHRoZXkgZG9uJ3QsIHdlXG4gICAgLy8gbmVlZCB0byByZXdyaXRlIHRoZSB3YXkgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuXG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3RleHQuanNcblxuXG5cbiAvLyBOb24tbWF0aHkgdGV4dCwgcG9zc2libHkgaW4gYSBmb250XG5cbnZhciB0ZXh0Rm9udEZhbWlsaWVzID0ge1xuICBcIlxcXFx0ZXh0XCI6IHVuZGVmaW5lZCxcbiAgXCJcXFxcdGV4dHJtXCI6IFwidGV4dHJtXCIsXG4gIFwiXFxcXHRleHRzZlwiOiBcInRleHRzZlwiLFxuICBcIlxcXFx0ZXh0dHRcIjogXCJ0ZXh0dHRcIixcbiAgXCJcXFxcdGV4dG5vcm1hbFwiOiBcInRleHRybVwiXG59O1xudmFyIHRleHRGb250V2VpZ2h0cyA9IHtcbiAgXCJcXFxcdGV4dGJmXCI6IFwidGV4dGJmXCIsXG4gIFwiXFxcXHRleHRtZFwiOiBcInRleHRtZFwiXG59O1xudmFyIHRleHRGb250U2hhcGVzID0ge1xuICBcIlxcXFx0ZXh0aXRcIjogXCJ0ZXh0aXRcIixcbiAgXCJcXFxcdGV4dHVwXCI6IFwidGV4dHVwXCJcbn07XG5cbnZhciBvcHRpb25zV2l0aEZvbnQgPSBmdW5jdGlvbiBvcHRpb25zV2l0aEZvbnQoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIGZvbnQgPSBncm91cC5mb250OyAvLyBDaGVja3MgaWYgdGhlIGFyZ3VtZW50IGlzIGEgZm9udCBmYW1pbHkgb3IgYSBmb250IHN0eWxlLlxuXG4gIGlmICghZm9udCkge1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9IGVsc2UgaWYgKHRleHRGb250RmFtaWxpZXNbZm9udF0pIHtcbiAgICByZXR1cm4gb3B0aW9ucy53aXRoVGV4dEZvbnRGYW1pbHkodGV4dEZvbnRGYW1pbGllc1tmb250XSk7XG4gIH0gZWxzZSBpZiAodGV4dEZvbnRXZWlnaHRzW2ZvbnRdKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMud2l0aFRleHRGb250V2VpZ2h0KHRleHRGb250V2VpZ2h0c1tmb250XSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG9wdGlvbnMud2l0aFRleHRGb250U2hhcGUodGV4dEZvbnRTaGFwZXNbZm9udF0pO1xuICB9XG59O1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidGV4dFwiLFxuICBuYW1lczogWy8vIEZvbnQgZmFtaWxpZXNcbiAgXCJcXFxcdGV4dFwiLCBcIlxcXFx0ZXh0cm1cIiwgXCJcXFxcdGV4dHNmXCIsIFwiXFxcXHRleHR0dFwiLCBcIlxcXFx0ZXh0bm9ybWFsXCIsIC8vIEZvbnQgd2VpZ2h0c1xuICBcIlxcXFx0ZXh0YmZcIiwgXCJcXFxcdGV4dG1kXCIsIC8vIEZvbnQgU2hhcGVzXG4gIFwiXFxcXHRleHRpdFwiLCBcIlxcXFx0ZXh0dXBcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1widGV4dFwiXSxcbiAgICBncmVlZGluZXNzOiAyLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgY29uc3VtZU1vZGU6IFwidGV4dFwiXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGJvZHkpLFxuICAgICAgZm9udDogZnVuY05hbWVcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnNXaXRoRm9udChncm91cCwgb3B0aW9ucyk7XG4gICAgdmFyIGlubmVyID0gYnVpbGRIVE1MX2J1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBuZXdPcHRpb25zLCB0cnVlKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcInRleHRcIl0sIGJ1aWxkQ29tbW9uLnRyeUNvbWJpbmVDaGFycyhpbm5lciksIG5ld09wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zV2l0aEZvbnQoZ3JvdXAsIG9wdGlvbnMpO1xuICAgIHJldHVybiBidWlsZEV4cHJlc3Npb25Sb3coZ3JvdXAuYm9keSwgbmV3T3B0aW9ucyk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3VuZGVybGluZS5qc1xuXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJ1bmRlcmxpbmVcIixcbiAgbmFtZXM6IFtcIlxcXFx1bmRlcmxpbmVcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ1bmRlcmxpbmVcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keTogYXJnc1swXVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIFVuZGVybGluZXMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgcGcgNDQzLCBSdWxlIDEwLlxuICAgIC8vIEJ1aWxkIHRoZSBpbm5lciBncm91cC5cbiAgICB2YXIgaW5uZXJHcm91cCA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpOyAvLyBDcmVhdGUgdGhlIGxpbmUgdG8gZ28gYmVsb3cgdGhlIGJvZHlcblxuICAgIHZhciBsaW5lID0gYnVpbGRDb21tb24ubWFrZUxpbmVTcGFuKFwidW5kZXJsaW5lLWxpbmVcIiwgb3B0aW9ucyk7IC8vIEdlbmVyYXRlIHRoZSB2bGlzdCwgd2l0aCB0aGUgYXBwcm9wcmlhdGUga2VybnNcblxuICAgIHZhciBkZWZhdWx0UnVsZVRoaWNrbmVzcyA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcztcbiAgICB2YXIgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcInRvcFwiLFxuICAgICAgcG9zaXRpb25EYXRhOiBpbm5lckdyb3VwLmhlaWdodCxcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogZGVmYXVsdFJ1bGVUaGlja25lc3NcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGxpbmVcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IDMgKiBkZWZhdWx0UnVsZVRoaWNrbmVzc1xuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogaW5uZXJHcm91cFxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcInVuZGVybGluZVwiXSwgW3ZsaXN0XSwgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3BlcmF0b3IgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFtuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZShcIlxcdTIwM0VcIildKTtcbiAgICBvcGVyYXRvci5zZXRBdHRyaWJ1dGUoXCJzdHJldGNoeVwiLCBcInRydWVcIik7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm11bmRlclwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKSwgb3BlcmF0b3JdKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImFjY2VudHVuZGVyXCIsIFwidHJ1ZVwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvdmVyYi5qc1xuXG5cblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidmVyYlwiLFxuICBuYW1lczogW1wiXFxcXHZlcmJcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoY29udGV4dCwgYXJncywgb3B0QXJncykge1xuICAgIC8vIFxcdmVyYiBhbmQgXFx2ZXJiKiBhcmUgZGVhbHQgd2l0aCBkaXJlY3RseSBpbiBQYXJzZXIuanMuXG4gICAgLy8gSWYgd2UgZW5kIHVwIGhlcmUsIGl0J3MgYmVjYXVzZSBvZiBhIGZhaWx1cmUgdG8gbWF0Y2ggdGhlIHR3byBkZWxpbWl0ZXJzXG4gICAgLy8gaW4gdGhlIHJlZ2V4IGluIExleGVyLmpzLiAgTGFUZVggcmFpc2VzIHRoZSBmb2xsb3dpbmcgZXJyb3Igd2hlbiBcXHZlcmIgaXNcbiAgICAvLyB0ZXJtaW5hdGVkIGJ5IGVuZCBvZiBsaW5lIChvciBmaWxlKS5cbiAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJcXFxcdmVyYiBlbmRlZCBieSBlbmQgb2YgbGluZSBpbnN0ZWFkIG9mIG1hdGNoaW5nIGRlbGltaXRlclwiKTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIHRleHQgPSBtYWtlVmVyYihncm91cCk7XG4gICAgdmFyIGJvZHkgPSBbXTsgLy8gXFx2ZXJiIGVudGVycyB0ZXh0IG1vZGUgYW5kIHRoZXJlZm9yZSBpcyBzaXplZCBsaWtlIFxcdGV4dHN0eWxlXG5cbiAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUob3B0aW9ucy5zdHlsZS50ZXh0KCkpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgYyA9IHRleHRbaV07XG5cbiAgICAgIGlmIChjID09PSAnficpIHtcbiAgICAgICAgYyA9ICdcXFxcdGV4dGFzY2lpdGlsZGUnO1xuICAgICAgfVxuXG4gICAgICBib2R5LnB1c2goYnVpbGRDb21tb24ubWFrZVN5bWJvbChjLCBcIlR5cGV3cml0ZXItUmVndWxhclwiLCBncm91cC5tb2RlLCBuZXdPcHRpb25zLCBbXCJtb3JkXCIsIFwidGV4dHR0XCJdKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJ0ZXh0XCJdLmNvbmNhdChuZXdPcHRpb25zLnNpemluZ0NsYXNzZXMob3B0aW9ucykpLCBidWlsZENvbW1vbi50cnlDb21iaW5lQ2hhcnMoYm9keSksIG5ld09wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIHRleHQgPSBuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZShtYWtlVmVyYihncm91cCkpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdGV4dFwiLCBbdGV4dF0pO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWF0aHZhcmlhbnRcIiwgXCJtb25vc3BhY2VcIik7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLyoqXG4gKiBDb252ZXJ0cyB2ZXJiIGdyb3VwIGludG8gYm9keSBzdHJpbmcuXG4gKlxuICogXFx2ZXJiKiByZXBsYWNlcyBlYWNoIHNwYWNlIHdpdGggYW4gb3BlbiBib3ggXFx1MjQyM1xuICogXFx2ZXJiIHJlcGxhY2VzIGVhY2ggc3BhY2Ugd2l0aCBhIG5vLWJyZWFrIHNwYWNlIFxceEEwXG4gKi9cblxudmFyIG1ha2VWZXJiID0gZnVuY3Rpb24gbWFrZVZlcmIoZ3JvdXApIHtcbiAgcmV0dXJuIGdyb3VwLmJvZHkucmVwbGFjZSgvIC9nLCBncm91cC5zdGFyID8gXCJcXHUyNDIzXCIgOiAnXFx4QTAnKTtcbn07XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMuanNcbi8qKiBJbmNsdWRlIHRoaXMgdG8gZW5zdXJlIHRoYXQgYWxsIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZC4gKi9cblxudmFyIGZ1bmN0aW9ucyA9IF9mdW5jdGlvbnM7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfZnVuY3Rpb25zID0gKGZ1bmN0aW9ucyk7IC8vIFRPRE8oa2V2aW5iKTogaGF2ZSBmdW5jdGlvbnMgcmV0dXJuIGFuIG9iamVjdCBhbmQgY2FsbCBkZWZpbmVGdW5jdGlvbiB3aXRoXG4vLyB0aGF0IG9iamVjdCBpbiB0aGlzIGZpbGUgaW5zdGVhZCBvZiByZWx5aW5nIG9uIHNpZGUtZWZmZWN0cy5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvTGV4ZXIuanNcbi8qKlxuICogVGhlIExleGVyIGNsYXNzIGhhbmRsZXMgdG9rZW5pemluZyB0aGUgaW5wdXQgaW4gdmFyaW91cyB3YXlzLiBTaW5jZSBvdXJcbiAqIHBhcnNlciBleHBlY3RzIHVzIHRvIGJlIGFibGUgdG8gYmFja3RyYWNrLCB0aGUgbGV4ZXIgYWxsb3dzIGxleGluZyBmcm9tIGFueVxuICogZ2l2ZW4gc3RhcnRpbmcgcG9pbnQuXG4gKlxuICogSXRzIG1haW4gZXhwb3NlZCBmdW5jdGlvbiBpcyB0aGUgYGxleGAgZnVuY3Rpb24sIHdoaWNoIHRha2VzIGEgcG9zaXRpb24gdG9cbiAqIGxleCBmcm9tIGFuZCBhIHR5cGUgb2YgdG9rZW4gdG8gbGV4LiBJdCBkZWZlcnMgdG8gdGhlIGFwcHJvcHJpYXRlIGBfaW5uZXJMZXhgXG4gKiBmdW5jdGlvbi5cbiAqXG4gKiBUaGUgdmFyaW91cyBgX2lubmVyTGV4YCBmdW5jdGlvbnMgcGVyZm9ybSB0aGUgYWN0dWFsIGxleGluZyBvZiBkaWZmZXJlbnRcbiAqIGtpbmRzLlxuICovXG5cblxuXG5cbi8qIFRoZSBmb2xsb3dpbmcgdG9rZW5SZWdleFxuICogLSBtYXRjaGVzIHR5cGljYWwgd2hpdGVzcGFjZSAoYnV0IG5vdCBOQlNQIGV0Yy4pIHVzaW5nIGl0cyBmaXJzdCBncm91cFxuICogLSBkb2VzIG5vdCBtYXRjaCBhbnkgY29udHJvbCBjaGFyYWN0ZXIgXFx4MDAtXFx4MWYgZXhjZXB0IHdoaXRlc3BhY2VcbiAqIC0gZG9lcyBub3QgbWF0Y2ggYSBiYXJlIGJhY2tzbGFzaFxuICogLSBtYXRjaGVzIGFueSBBU0NJSSBjaGFyYWN0ZXIgZXhjZXB0IHRob3NlIGp1c3QgbWVudGlvbmVkXG4gKiAtIGRvZXMgbm90IG1hdGNoIHRoZSBCTVAgcHJpdmF0ZSB1c2UgYXJlYSBcXHVFMDAwLVxcdUY4RkZcbiAqIC0gZG9lcyBub3QgbWF0Y2ggYmFyZSBzdXJyb2dhdGUgY29kZSB1bml0c1xuICogLSBtYXRjaGVzIGFueSBCTVAgY2hhcmFjdGVyIGV4Y2VwdCBmb3IgdGhvc2UganVzdCBkZXNjcmliZWRcbiAqIC0gbWF0Y2hlcyBhbnkgdmFsaWQgVW5pY29kZSBzdXJyb2dhdGUgcGFpclxuICogLSBtYXRjaGVzIGEgYmFja3NsYXNoIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIGxldHRlcnNcbiAqIC0gbWF0Y2hlcyBhIGJhY2tzbGFzaCBmb2xsb3dlZCBieSBhbnkgQk1QIGNoYXJhY3RlciwgaW5jbHVkaW5nIG5ld2xpbmVcbiAqIEp1c3QgYmVjYXVzZSB0aGUgTGV4ZXIgbWF0Y2hlcyBzb21ldGhpbmcgZG9lc24ndCBtZWFuIGl0J3MgdmFsaWQgaW5wdXQ6XG4gKiBJZiB0aGVyZSBpcyBubyBtYXRjaGluZyBmdW5jdGlvbiBvciBzeW1ib2wgZGVmaW5pdGlvbiwgdGhlIFBhcnNlciB3aWxsXG4gKiBzdGlsbCByZWplY3QgdGhlIGlucHV0LlxuICovXG52YXIgc3BhY2VSZWdleFN0cmluZyA9IFwiWyBcXHJcXG5cXHRdXCI7XG52YXIgY29udHJvbFdvcmRSZWdleFN0cmluZyA9IFwiXFxcXFxcXFxbYS16QS1aQF0rXCI7XG52YXIgY29udHJvbFN5bWJvbFJlZ2V4U3RyaW5nID0gXCJcXFxcXFxcXFteXFx1RDgwMC1cXHVERkZGXVwiO1xudmFyIGNvbnRyb2xXb3JkV2hpdGVzcGFjZVJlZ2V4U3RyaW5nID0gXCJcIiArIGNvbnRyb2xXb3JkUmVnZXhTdHJpbmcgKyBzcGFjZVJlZ2V4U3RyaW5nICsgXCIqXCI7XG52YXIgY29udHJvbFdvcmRXaGl0ZXNwYWNlUmVnZXggPSBuZXcgUmVnRXhwKFwiXihcIiArIGNvbnRyb2xXb3JkUmVnZXhTdHJpbmcgKyBcIilcIiArIHNwYWNlUmVnZXhTdHJpbmcgKyBcIiokXCIpO1xudmFyIGNvbWJpbmluZ0RpYWNyaXRpY2FsTWFya1N0cmluZyA9IFwiW1xcdTAzMDAtXFx1MDM2Rl1cIjtcbnZhciBjb21iaW5pbmdEaWFjcml0aWNhbE1hcmtzRW5kUmVnZXggPSBuZXcgUmVnRXhwKGNvbWJpbmluZ0RpYWNyaXRpY2FsTWFya1N0cmluZyArIFwiKyRcIik7XG52YXIgdG9rZW5SZWdleFN0cmluZyA9IFwiKFwiICsgc3BhY2VSZWdleFN0cmluZyArIFwiKyl8XCIgKyAvLyB3aGl0ZXNwYWNlXG5cIihbIS1cXFxcW1xcXFxdLVxcdTIwMjdcXHUyMDJBLVxcdUQ3RkZcXHVGOTAwLVxcdUZGRkZdXCIgKyAoIC8vIHNpbmdsZSBjb2RlcG9pbnRcbmNvbWJpbmluZ0RpYWNyaXRpY2FsTWFya1N0cmluZyArIFwiKlwiKSArIC8vIC4uLnBsdXMgYWNjZW50c1xuXCJ8W1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXVwiICsgKCAvLyBzdXJyb2dhdGUgcGFpclxuY29tYmluaW5nRGlhY3JpdGljYWxNYXJrU3RyaW5nICsgXCIqXCIpICsgLy8gLi4ucGx1cyBhY2NlbnRzXG5cInxcXFxcXFxcXHZlcmJcXFxcKihbXl0pLio/XFxcXDNcIiArIC8vIFxcdmVyYipcblwifFxcXFxcXFxcdmVyYihbXiphLXpBLVpdKS4qP1xcXFw0XCIgKyAvLyBcXHZlcmIgdW5zdGFycmVkXG5cInxcXFxcXFxcXG9wZXJhdG9ybmFtZVxcXFwqXCIgKyAoIC8vIFxcb3BlcmF0b3JuYW1lKlxuXCJ8XCIgKyBjb250cm9sV29yZFdoaXRlc3BhY2VSZWdleFN0cmluZykgKyAoIC8vIFxcbWFjcm9OYW1lICsgc3BhY2VzXG5cInxcIiArIGNvbnRyb2xTeW1ib2xSZWdleFN0cmluZyArIFwiKVwiKTsgLy8gXFxcXCwgXFwnLCBldGMuXG5cbi8qKiBNYWluIExleGVyIGNsYXNzICovXG5cbnZhciBMZXhlcl9MZXhlciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIC8vIGNhdGVnb3J5IGNvZGVzLCBvbmx5IHN1cHBvcnRzIGNvbW1lbnQgY2hhcmFjdGVycyAoMTQpIGZvciBub3dcbiAgZnVuY3Rpb24gTGV4ZXIoaW5wdXQsIHNldHRpbmdzKSB7XG4gICAgdGhpcy5pbnB1dCA9IHZvaWQgMDtcbiAgICB0aGlzLnNldHRpbmdzID0gdm9pZCAwO1xuICAgIHRoaXMudG9rZW5SZWdleCA9IHZvaWQgMDtcbiAgICB0aGlzLmNhdGNvZGVzID0gdm9pZCAwO1xuICAgIC8vIFNlcGFyYXRlIGFjY2VudHMgZnJvbSBjaGFyYWN0ZXJzXG4gICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgICB0aGlzLnRva2VuUmVnZXggPSBuZXcgUmVnRXhwKHRva2VuUmVnZXhTdHJpbmcsICdnJyk7XG4gICAgdGhpcy5jYXRjb2RlcyA9IHtcbiAgICAgIFwiJVwiOiAxNCAvLyBjb21tZW50IGNoYXJhY3RlclxuXG4gICAgfTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBMZXhlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldENhdGNvZGUgPSBmdW5jdGlvbiBzZXRDYXRjb2RlKGNoYXIsIGNvZGUpIHtcbiAgICB0aGlzLmNhdGNvZGVzW2NoYXJdID0gY29kZTtcbiAgfVxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBsZXhlcyBhIHNpbmdsZSB0b2tlbi5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ubGV4ID0gZnVuY3Rpb24gbGV4KCkge1xuICAgIHZhciBpbnB1dCA9IHRoaXMuaW5wdXQ7XG4gICAgdmFyIHBvcyA9IHRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXg7XG5cbiAgICBpZiAocG9zID09PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBuZXcgVG9rZW5fVG9rZW4oXCJFT0ZcIiwgbmV3IFNvdXJjZUxvY2F0aW9uKHRoaXMsIHBvcywgcG9zKSk7XG4gICAgfVxuXG4gICAgdmFyIG1hdGNoID0gdGhpcy50b2tlblJlZ2V4LmV4ZWMoaW5wdXQpO1xuXG4gICAgaWYgKG1hdGNoID09PSBudWxsIHx8IG1hdGNoLmluZGV4ICE9PSBwb3MpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlVuZXhwZWN0ZWQgY2hhcmFjdGVyOiAnXCIgKyBpbnB1dFtwb3NdICsgXCInXCIsIG5ldyBUb2tlbl9Ub2tlbihpbnB1dFtwb3NdLCBuZXcgU291cmNlTG9jYXRpb24odGhpcywgcG9zLCBwb3MgKyAxKSkpO1xuICAgIH1cblxuICAgIHZhciB0ZXh0ID0gbWF0Y2hbMl0gfHwgXCIgXCI7XG5cbiAgICBpZiAodGhpcy5jYXRjb2Rlc1t0ZXh0XSA9PT0gMTQpIHtcbiAgICAgIC8vIGNvbW1lbnQgY2hhcmFjdGVyXG4gICAgICB2YXIgbmxJbmRleCA9IGlucHV0LmluZGV4T2YoJ1xcbicsIHRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXgpO1xuXG4gICAgICBpZiAobmxJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgdGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleCA9IGlucHV0Lmxlbmd0aDsgLy8gRU9GXG5cbiAgICAgICAgdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJjb21tZW50QXRFbmRcIiwgXCIlIGNvbW1lbnQgaGFzIG5vIHRlcm1pbmF0aW5nIG5ld2xpbmU7IExhVGVYIHdvdWxkIFwiICsgXCJmYWlsIGJlY2F1c2Ugb2YgY29tbWVudGluZyB0aGUgZW5kIG9mIG1hdGggbW9kZSAoZS5nLiAkKVwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXggPSBubEluZGV4ICsgMTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMubGV4KCk7XG4gICAgfSAvLyBUcmltIGFueSB0cmFpbGluZyB3aGl0ZXNwYWNlIGZyb20gY29udHJvbCB3b3JkIG1hdGNoXG5cblxuICAgIHZhciBjb250cm9sTWF0Y2ggPSB0ZXh0Lm1hdGNoKGNvbnRyb2xXb3JkV2hpdGVzcGFjZVJlZ2V4KTtcblxuICAgIGlmIChjb250cm9sTWF0Y2gpIHtcbiAgICAgIHRleHQgPSBjb250cm9sTWF0Y2hbMV07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUb2tlbl9Ub2tlbih0ZXh0LCBuZXcgU291cmNlTG9jYXRpb24odGhpcywgcG9zLCB0aGlzLnRva2VuUmVnZXgubGFzdEluZGV4KSk7XG4gIH07XG5cbiAgcmV0dXJuIExleGVyO1xufSgpO1xuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL05hbWVzcGFjZS5qc1xuLyoqXG4gKiBBIGBOYW1lc3BhY2VgIHJlZmVycyB0byBhIHNwYWNlIG9mIG5hbWVhYmxlIHRoaW5ncyBsaWtlIG1hY3JvcyBvciBsZW5ndGhzLFxuICogd2hpY2ggY2FuIGJlIGBzZXRgIGVpdGhlciBnbG9iYWxseSBvciBsb2NhbCB0byBhIG5lc3RlZCBncm91cCwgdXNpbmcgYW5cbiAqIHVuZG8gc3RhY2sgc2ltaWxhciB0byBob3cgVGVYIGltcGxlbWVudHMgdGhpcyBmdW5jdGlvbmFsaXR5LlxuICogUGVyZm9ybWFuY2Utd2lzZSwgYGdldGAgYW5kIGxvY2FsIGBzZXRgIHRha2UgY29uc3RhbnQgdGltZSwgd2hpbGUgZ2xvYmFsXG4gKiBgc2V0YCB0YWtlcyB0aW1lIHByb3BvcnRpb25hbCB0byB0aGUgZGVwdGggb2YgZ3JvdXAgbmVzdGluZy5cbiAqL1xuXG5cbnZhciBOYW1lc3BhY2VfTmFtZXNwYWNlID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIEJvdGggYXJndW1lbnRzIGFyZSBvcHRpb25hbC4gIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhbiBvYmplY3Qgb2ZcbiAgICogYnVpbHQtaW4gbWFwcGluZ3Mgd2hpY2ggbmV2ZXIgY2hhbmdlLiAgVGhlIHNlY29uZCBhcmd1bWVudCBpcyBhbiBvYmplY3RcbiAgICogb2YgaW5pdGlhbCAoZ2xvYmFsLWxldmVsKSBtYXBwaW5ncywgd2hpY2ggd2lsbCBjb25zdGFudGx5IGNoYW5nZVxuICAgKiBhY2NvcmRpbmcgdG8gYW55IGdsb2JhbC90b3AtbGV2ZWwgYHNldGBzIGRvbmUuXG4gICAqL1xuICBmdW5jdGlvbiBOYW1lc3BhY2UoYnVpbHRpbnMsIGdsb2JhbE1hY3Jvcykge1xuICAgIGlmIChidWlsdGlucyA9PT0gdm9pZCAwKSB7XG4gICAgICBidWlsdGlucyA9IHt9O1xuICAgIH1cblxuICAgIGlmIChnbG9iYWxNYWNyb3MgPT09IHZvaWQgMCkge1xuICAgICAgZ2xvYmFsTWFjcm9zID0ge307XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50ID0gdm9pZCAwO1xuICAgIHRoaXMuYnVpbHRpbnMgPSB2b2lkIDA7XG4gICAgdGhpcy51bmRlZlN0YWNrID0gdm9pZCAwO1xuICAgIHRoaXMuY3VycmVudCA9IGdsb2JhbE1hY3JvcztcbiAgICB0aGlzLmJ1aWx0aW5zID0gYnVpbHRpbnM7XG4gICAgdGhpcy51bmRlZlN0YWNrID0gW107XG4gIH1cbiAgLyoqXG4gICAqIFN0YXJ0IGEgbmV3IG5lc3RlZCBncm91cCwgYWZmZWN0aW5nIGZ1dHVyZSBsb2NhbCBgc2V0YHMuXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IE5hbWVzcGFjZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJlZ2luR3JvdXAgPSBmdW5jdGlvbiBiZWdpbkdyb3VwKCkge1xuICAgIHRoaXMudW5kZWZTdGFjay5wdXNoKHt9KTtcbiAgfVxuICAvKipcbiAgICogRW5kIGN1cnJlbnQgbmVzdGVkIGdyb3VwLCByZXN0b3JpbmcgdmFsdWVzIGJlZm9yZSB0aGUgZ3JvdXAgYmVnYW4uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmVuZEdyb3VwID0gZnVuY3Rpb24gZW5kR3JvdXAoKSB7XG4gICAgaWYgKHRoaXMudW5kZWZTdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlVuYmFsYW5jZWQgbmFtZXNwYWNlIGRlc3RydWN0aW9uOiBhdHRlbXB0IFwiICsgXCJ0byBwb3AgZ2xvYmFsIG5hbWVzcGFjZTsgcGxlYXNlIHJlcG9ydCB0aGlzIGFzIGEgYnVnXCIpO1xuICAgIH1cblxuICAgIHZhciB1bmRlZnMgPSB0aGlzLnVuZGVmU3RhY2sucG9wKCk7XG5cbiAgICBmb3IgKHZhciB1bmRlZiBpbiB1bmRlZnMpIHtcbiAgICAgIGlmICh1bmRlZnMuaGFzT3duUHJvcGVydHkodW5kZWYpKSB7XG4gICAgICAgIGlmICh1bmRlZnNbdW5kZWZdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkZWxldGUgdGhpcy5jdXJyZW50W3VuZGVmXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRbdW5kZWZdID0gdW5kZWZzW3VuZGVmXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogRGV0ZWN0IHdoZXRoZXIgYG5hbWVgIGhhcyBhIGRlZmluaXRpb24uICBFcXVpdmFsZW50IHRvXG4gICAqIGBnZXQobmFtZSkgIT0gbnVsbGAuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhcyA9IGZ1bmN0aW9uIGhhcyhuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudC5oYXNPd25Qcm9wZXJ0eShuYW1lKSB8fCB0aGlzLmJ1aWx0aW5zLmhhc093blByb3BlcnR5KG5hbWUpO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgYSBuYW1lLCBvciBgdW5kZWZpbmVkYCBpZiB0aGVyZSBpcyBubyB2YWx1ZS5cbiAgICpcbiAgICogTm90ZTogRG8gbm90IHVzZSBgaWYgKG5hbWVzcGFjZS5nZXQoLi4uKSlgIHRvIGRldGVjdCB3aGV0aGVyIGEgbWFjcm9cbiAgICogaXMgZGVmaW5lZCwgYXMgdGhlIGRlZmluaXRpb24gbWF5IGJlIHRoZSBlbXB0eSBzdHJpbmcgd2hpY2ggZXZhbHVhdGVzXG4gICAqIHRvIGBmYWxzZWAgaW4gSmF2YVNjcmlwdC4gIFVzZSBgaWYgKG5hbWVzcGFjZS5nZXQoLi4uKSAhPSBudWxsKWAgb3JcbiAgICogYGlmIChuYW1lc3BhY2UuaGFzKC4uLikpYC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZ2V0ID0gZnVuY3Rpb24gZ2V0KG5hbWUpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50W25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsdGluc1tuYW1lXTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VycmVudCB2YWx1ZSBvZiBhIG5hbWUsIGFuZCBvcHRpb25hbGx5IHNldCBpdCBnbG9iYWxseSB0b28uXG4gICAqIExvY2FsIHNldCgpIHNldHMgdGhlIGN1cnJlbnQgdmFsdWUgYW5kICh3aGVuIGFwcHJvcHJpYXRlKSBhZGRzIGFuIHVuZG9cbiAgICogb3BlcmF0aW9uIHRvIHRoZSB1bmRvIHN0YWNrLiAgR2xvYmFsIHNldCgpIG1heSBjaGFuZ2UgdGhlIHVuZG9cbiAgICogb3BlcmF0aW9uIGF0IGV2ZXJ5IGxldmVsLCBzbyB0YWtlcyB0aW1lIGxpbmVhciBpbiB0aGVpciBudW1iZXIuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldChuYW1lLCB2YWx1ZSwgZ2xvYmFsKSB7XG4gICAgaWYgKGdsb2JhbCA9PT0gdm9pZCAwKSB7XG4gICAgICBnbG9iYWwgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAvLyBHbG9iYWwgc2V0IGlzIGVxdWl2YWxlbnQgdG8gc2V0dGluZyBpbiBhbGwgZ3JvdXBzLiAgU2ltdWxhdGUgdGhpc1xuICAgICAgLy8gYnkgZGVzdHJveWluZyBhbnkgdW5kb3MgY3VycmVudGx5IHNjaGVkdWxlZCBmb3IgdGhpcyBuYW1lLFxuICAgICAgLy8gYW5kIGFkZGluZyBhbiB1bmRvIHdpdGggdGhlICpuZXcqIHZhbHVlIChpbiBjYXNlIGl0IGxhdGVyIGdldHNcbiAgICAgIC8vIGxvY2FsbHkgcmVzZXQgd2l0aGluIHRoaXMgZW52aXJvbm1lbnQpLlxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnVuZGVmU3RhY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZGVsZXRlIHRoaXMudW5kZWZTdGFja1tpXVtuYW1lXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudW5kZWZTdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMudW5kZWZTdGFja1t0aGlzLnVuZGVmU3RhY2subGVuZ3RoIC0gMV1bbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVW5kbyB0aGlzIHNldCBhdCBlbmQgb2YgdGhpcyBncm91cCAocG9zc2libHkgdG8gYHVuZGVmaW5lZGApLFxuICAgICAgLy8gdW5sZXNzIGFuIHVuZG8gaXMgYWxyZWFkeSBpbiBwbGFjZSwgaW4gd2hpY2ggY2FzZSB0aGF0IG9sZGVyXG4gICAgICAvLyB2YWx1ZSBpcyB0aGUgY29ycmVjdCBvbmUuXG4gICAgICB2YXIgdG9wID0gdGhpcy51bmRlZlN0YWNrW3RoaXMudW5kZWZTdGFjay5sZW5ndGggLSAxXTtcblxuICAgICAgaWYgKHRvcCAmJiAhdG9wLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIHRvcFtuYW1lXSA9IHRoaXMuY3VycmVudFtuYW1lXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRbbmFtZV0gPSB2YWx1ZTtcbiAgfTtcblxuICByZXR1cm4gTmFtZXNwYWNlO1xufSgpO1xuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL21hY3Jvcy5qc1xuLyoqXG4gKiBQcmVkZWZpbmVkIG1hY3JvcyBmb3IgS2FUZVguXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGRlZmluZSBzb21lIGNvbW1hbmRzIGluIHRlcm1zIG9mIG90aGVycy5cbiAqL1xuXG5cblxuXG5cbnZhciBidWlsdGluTWFjcm9zID0ge307XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBtYWNyb3MgPSAoYnVpbHRpbk1hY3Jvcyk7IC8vIFRoaXMgZnVuY3Rpb24gbWlnaHQgb25lIGRheSBhY2NlcHQgYW4gYWRkaXRpb25hbCBhcmd1bWVudCBhbmQgZG8gbW9yZSB0aGluZ3MuXG5cbmZ1bmN0aW9uIGRlZmluZU1hY3JvKG5hbWUsIGJvZHkpIHtcbiAgYnVpbHRpbk1hY3Jvc1tuYW1lXSA9IGJvZHk7XG59IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIG1hY3JvIHRvb2xzXG4vLyBMYVRlWCdzIFxcQGZpcnN0b2Z0d297IzF9eyMyfSBleHBhbmRzIHRvICMxLCBza2lwcGluZyAjMlxuLy8gVGVYIHNvdXJjZTogXFxsb25nXFxkZWZcXEBmaXJzdG9mdHdvIzEjMnsjMX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcQGZpcnN0b2Z0d29cIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgdmFyIGFyZ3MgPSBjb250ZXh0LmNvbnN1bWVBcmdzKDIpO1xuICByZXR1cm4ge1xuICAgIHRva2VuczogYXJnc1swXSxcbiAgICBudW1BcmdzOiAwXG4gIH07XG59KTsgLy8gTGFUZVgncyBcXEBzZWNvbmRvZnR3b3sjMX17IzJ9IGV4cGFuZHMgdG8gIzIsIHNraXBwaW5nICMxXG4vLyBUZVggc291cmNlOiBcXGxvbmdcXGRlZlxcQHNlY29uZG9mdHdvIzEjMnsjMn1cblxuZGVmaW5lTWFjcm8oXCJcXFxcQHNlY29uZG9mdHdvXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciBhcmdzID0gY29udGV4dC5jb25zdW1lQXJncygyKTtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbnM6IGFyZ3NbMV0sXG4gICAgbnVtQXJnczogMFxuICB9O1xufSk7IC8vIExhVGVYJ3MgXFxAaWZuZXh0Y2hhcnsjMX17IzJ9eyMzfSBsb29rcyBhaGVhZCB0byB0aGUgbmV4dCAodW5leHBhbmRlZClcbi8vIHN5bWJvbC4gIElmIGl0IG1hdGNoZXMgIzEsIHRoZW4gdGhlIG1hY3JvIGV4cGFuZHMgdG8gIzI7IG90aGVyd2lzZSwgIzMuXG4vLyBOb3RlLCBob3dldmVyLCB0aGF0IGl0IGRvZXMgbm90IGNvbnN1bWUgdGhlIG5leHQgc3ltYm9sIGluIGVpdGhlciBjYXNlLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxAaWZuZXh0Y2hhclwiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICB2YXIgYXJncyA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMyk7IC8vIHN5bWJvbCwgaWYsIGVsc2VcblxuICB2YXIgbmV4dFRva2VuID0gY29udGV4dC5mdXR1cmUoKTtcblxuICBpZiAoYXJnc1swXS5sZW5ndGggPT09IDEgJiYgYXJnc1swXVswXS50ZXh0ID09PSBuZXh0VG9rZW4udGV4dCkge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbnM6IGFyZ3NbMV0sXG4gICAgICBudW1BcmdzOiAwXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW5zOiBhcmdzWzJdLFxuICAgICAgbnVtQXJnczogMFxuICAgIH07XG4gIH1cbn0pOyAvLyBMYVRlWCdzIFxcQGlmc3RhcnsjMX17IzJ9IGxvb2tzIGFoZWFkIHRvIHRoZSBuZXh0ICh1bmV4cGFuZGVkKSBzeW1ib2wuXG4vLyBJZiBpdCBpcyBgKmAsIHRoZW4gaXQgY29uc3VtZXMgdGhlIHN5bWJvbCwgYW5kIHRoZSBtYWNybyBleHBhbmRzIHRvICMxO1xuLy8gb3RoZXJ3aXNlLCB0aGUgbWFjcm8gZXhwYW5kcyB0byAjMiAod2l0aG91dCBjb25zdW1pbmcgdGhlIHN5bWJvbCkuXG4vLyBUZVggc291cmNlOiBcXGRlZlxcQGlmc3RhciMxe1xcQGlmbmV4dGNoYXIgKntcXEBmaXJzdG9mdHdveyMxfX19XG5cbmRlZmluZU1hY3JvKFwiXFxcXEBpZnN0YXJcIiwgXCJcXFxcQGlmbmV4dGNoYXIgKntcXFxcQGZpcnN0b2Z0d297IzF9fVwiKTsgLy8gTGFUZVgncyBcXFRleHRPck1hdGh7IzF9eyMyfSBleHBhbmRzIHRvICMxIGluIHRleHQgbW9kZSwgIzIgaW4gbWF0aCBtb2RlXG5cbmRlZmluZU1hY3JvKFwiXFxcXFRleHRPck1hdGhcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgdmFyIGFyZ3MgPSBjb250ZXh0LmNvbnN1bWVBcmdzKDIpO1xuXG4gIGlmIChjb250ZXh0Lm1vZGUgPT09ICd0ZXh0Jykge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbnM6IGFyZ3NbMF0sXG4gICAgICBudW1BcmdzOiAwXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW5zOiBhcmdzWzFdLFxuICAgICAgbnVtQXJnczogMFxuICAgIH07XG4gIH1cbn0pOyAvLyBMb29rdXAgdGFibGUgZm9yIHBhcnNpbmcgbnVtYmVycyBpbiBiYXNlIDggdGhyb3VnaCAxNlxuXG52YXIgZGlnaXRUb051bWJlciA9IHtcbiAgXCIwXCI6IDAsXG4gIFwiMVwiOiAxLFxuICBcIjJcIjogMixcbiAgXCIzXCI6IDMsXG4gIFwiNFwiOiA0LFxuICBcIjVcIjogNSxcbiAgXCI2XCI6IDYsXG4gIFwiN1wiOiA3LFxuICBcIjhcIjogOCxcbiAgXCI5XCI6IDksXG4gIFwiYVwiOiAxMCxcbiAgXCJBXCI6IDEwLFxuICBcImJcIjogMTEsXG4gIFwiQlwiOiAxMSxcbiAgXCJjXCI6IDEyLFxuICBcIkNcIjogMTIsXG4gIFwiZFwiOiAxMyxcbiAgXCJEXCI6IDEzLFxuICBcImVcIjogMTQsXG4gIFwiRVwiOiAxNCxcbiAgXCJmXCI6IDE1LFxuICBcIkZcIjogMTVcbn07IC8vIFRlWCBcXGNoYXIgbWFrZXMgYSBsaXRlcmFsIGNoYXJhY3RlciAoY2F0Y29kZSAxMikgdXNpbmcgdGhlIGZvbGxvd2luZyBmb3Jtczpcbi8vIChzZWUgVGhlIFRlWEJvb2ssIHAuIDQzKVxuLy8gICBcXGNoYXIxMjMgIC0tIGRlY2ltYWxcbi8vICAgXFxjaGFyJzEyMyAtLSBvY3RhbFxuLy8gICBcXGNoYXJcIjEyMyAtLSBoZXhcbi8vICAgXFxjaGFyYHggICAtLSBjaGFyYWN0ZXIgdGhhdCBjYW4gYmUgd3JpdHRlbiAoaS5lLiBpc24ndCBhY3RpdmUpXG4vLyAgIFxcY2hhcmBcXHggIC0tIGNoYXJhY3RlciB0aGF0IGNhbm5vdCBiZSB3cml0dGVuIChlLmcuICUpXG4vLyBUaGVzZSBhbGwgcmVmZXIgdG8gY2hhcmFjdGVycyBmcm9tIHRoZSBmb250LCBzbyB3ZSB0dXJuIHRoZW0gaW50byBzcGVjaWFsXG4vLyBjYWxscyB0byBhIGZ1bmN0aW9uIFxcQGNoYXIgZGVhbHQgd2l0aCBpbiB0aGUgUGFyc2VyLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxjaGFyXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciB0b2tlbiA9IGNvbnRleHQucG9wVG9rZW4oKTtcbiAgdmFyIGJhc2U7XG4gIHZhciBudW1iZXIgPSAnJztcblxuICBpZiAodG9rZW4udGV4dCA9PT0gXCInXCIpIHtcbiAgICBiYXNlID0gODtcbiAgICB0b2tlbiA9IGNvbnRleHQucG9wVG9rZW4oKTtcbiAgfSBlbHNlIGlmICh0b2tlbi50ZXh0ID09PSAnXCInKSB7XG4gICAgYmFzZSA9IDE2O1xuICAgIHRva2VuID0gY29udGV4dC5wb3BUb2tlbigpO1xuICB9IGVsc2UgaWYgKHRva2VuLnRleHQgPT09IFwiYFwiKSB7XG4gICAgdG9rZW4gPSBjb250ZXh0LnBvcFRva2VuKCk7XG5cbiAgICBpZiAodG9rZW4udGV4dFswXSA9PT0gXCJcXFxcXCIpIHtcbiAgICAgIG51bWJlciA9IHRva2VuLnRleHQuY2hhckNvZGVBdCgxKTtcbiAgICB9IGVsc2UgaWYgKHRva2VuLnRleHQgPT09IFwiRU9GXCIpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlxcXFxjaGFyYCBtaXNzaW5nIGFyZ3VtZW50XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBudW1iZXIgPSB0b2tlbi50ZXh0LmNoYXJDb2RlQXQoMCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGJhc2UgPSAxMDtcbiAgfVxuXG4gIGlmIChiYXNlKSB7XG4gICAgLy8gUGFyc2UgYSBudW1iZXIgaW4gdGhlIGdpdmVuIGJhc2UsIHN0YXJ0aW5nIHdpdGggZmlyc3QgYHRva2VuYC5cbiAgICBudW1iZXIgPSBkaWdpdFRvTnVtYmVyW3Rva2VuLnRleHRdO1xuXG4gICAgaWYgKG51bWJlciA9PSBudWxsIHx8IG51bWJlciA+PSBiYXNlKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJJbnZhbGlkIGJhc2UtXCIgKyBiYXNlICsgXCIgZGlnaXQgXCIgKyB0b2tlbi50ZXh0KTtcbiAgICB9XG5cbiAgICB2YXIgZGlnaXQ7XG5cbiAgICB3aGlsZSAoKGRpZ2l0ID0gZGlnaXRUb051bWJlcltjb250ZXh0LmZ1dHVyZSgpLnRleHRdKSAhPSBudWxsICYmIGRpZ2l0IDwgYmFzZSkge1xuICAgICAgbnVtYmVyICo9IGJhc2U7XG4gICAgICBudW1iZXIgKz0gZGlnaXQ7XG4gICAgICBjb250ZXh0LnBvcFRva2VuKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFwiXFxcXEBjaGFye1wiICsgbnVtYmVyICsgXCJ9XCI7XG59KTsgLy8gQmFzaWMgc3VwcG9ydCBmb3IgbWFjcm8gZGVmaW5pdGlvbnM6XG4vLyAgICAgXFxkZWZcXG1hY3Jve2V4cGFuc2lvbn1cbi8vICAgICBcXGRlZlxcbWFjcm8jMXtleHBhbnNpb259XG4vLyAgICAgXFxkZWZcXG1hY3JvIzEjMntleHBhbnNpb259XG4vLyAgICAgXFxkZWZcXG1hY3JvIzEjMiMzIzQjNSM2IzcjOCM5e2V4cGFuc2lvbn1cbi8vIEFsc28gdGhlIFxcZ2RlZiBhbmQgXFxnbG9iYWxcXGRlZiBlcXVpdmFsZW50c1xuXG52YXIgbWFjcm9zX2RlZiA9IGZ1bmN0aW9uIGRlZihjb250ZXh0LCBnbG9iYWwpIHtcbiAgdmFyIGFyZyA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMSlbMF07XG5cbiAgaWYgKGFyZy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJcXFxcZ2RlZidzIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBtYWNybyBuYW1lXCIpO1xuICB9XG5cbiAgdmFyIG5hbWUgPSBhcmdbMF0udGV4dDsgLy8gQ291bnQgYXJndW1lbnQgc3BlY2lmaWVycywgYW5kIGNoZWNrIHRoZXkgYXJlIGluIHRoZSBvcmRlciAjMSAjMiAuLi5cblxuICB2YXIgbnVtQXJncyA9IDA7XG4gIGFyZyA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMSlbMF07XG5cbiAgd2hpbGUgKGFyZy5sZW5ndGggPT09IDEgJiYgYXJnWzBdLnRleHQgPT09IFwiI1wiKSB7XG4gICAgYXJnID0gY29udGV4dC5jb25zdW1lQXJncygxKVswXTtcblxuICAgIGlmIChhcmcubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50IG51bWJlciBsZW5ndGggXFxcIlwiICsgYXJnLmxlbmd0aCArIFwiXFxcIlwiKTtcbiAgICB9XG5cbiAgICBpZiAoIS9eWzEtOV0kLy50ZXN0KGFyZ1swXS50ZXh0KSkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCBhcmd1bWVudCBudW1iZXIgXFxcIlwiICsgYXJnWzBdLnRleHQgKyBcIlxcXCJcIik7XG4gICAgfVxuXG4gICAgbnVtQXJncysrO1xuXG4gICAgaWYgKHBhcnNlSW50KGFyZ1swXS50ZXh0KSAhPT0gbnVtQXJncykge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiQXJndW1lbnQgbnVtYmVyIFxcXCJcIiArIGFyZ1swXS50ZXh0ICsgXCJcXFwiIG91dCBvZiBvcmRlclwiKTtcbiAgICB9XG5cbiAgICBhcmcgPSBjb250ZXh0LmNvbnN1bWVBcmdzKDEpWzBdO1xuICB9IC8vIEZpbmFsIGFyZyBpcyB0aGUgZXhwYW5zaW9uIG9mIHRoZSBtYWNyb1xuXG5cbiAgY29udGV4dC5tYWNyb3Muc2V0KG5hbWUsIHtcbiAgICB0b2tlbnM6IGFyZyxcbiAgICBudW1BcmdzOiBudW1BcmdzXG4gIH0sIGdsb2JhbCk7XG4gIHJldHVybiAnJztcbn07XG5cbmRlZmluZU1hY3JvKFwiXFxcXGdkZWZcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgcmV0dXJuIG1hY3Jvc19kZWYoY29udGV4dCwgdHJ1ZSk7XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXGRlZlwiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICByZXR1cm4gbWFjcm9zX2RlZihjb250ZXh0LCBmYWxzZSk7XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXGdsb2JhbFwiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICB2YXIgbmV4dCA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMSlbMF07XG5cbiAgaWYgKG5leHQubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCBjb21tYW5kIGFmdGVyIFxcXFxnbG9iYWxcIik7XG4gIH1cblxuICB2YXIgY29tbWFuZCA9IG5leHRbMF0udGV4dDsgLy8gVE9ETzogU2hvdWxkIGV4cGFuZCBjb21tYW5kXG5cbiAgaWYgKGNvbW1hbmQgPT09IFwiXFxcXGRlZlwiKSB7XG4gICAgLy8gXFxnbG9iYWxcXGRlZiBpcyBlcXVpdmFsZW50IHRvIFxcZ2RlZlxuICAgIHJldHVybiBtYWNyb3NfZGVmKGNvbnRleHQsIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgY29tbWFuZCAnXCIgKyBjb21tYW5kICsgXCInIGFmdGVyIFxcXFxnbG9iYWxcIik7XG4gIH1cbn0pOyAvLyBcXG5ld2NvbW1hbmR7XFxtYWNyb31bYXJnc117ZGVmaW5pdGlvbn1cbi8vIFxccmVuZXdjb21tYW5ke1xcbWFjcm99W2FyZ3Nde2RlZmluaXRpb259XG4vLyBUT0RPOiBPcHRpb25hbCBhcmd1bWVudHM6IFxcbmV3Y29tbWFuZHtcXG1hY3JvfVthcmdzXVtkZWZhdWx0XXtkZWZpbml0aW9ufVxuXG52YXIgbWFjcm9zX25ld2NvbW1hbmQgPSBmdW5jdGlvbiBuZXdjb21tYW5kKGNvbnRleHQsIGV4aXN0c09LLCBub25leGlzdHNPSykge1xuICB2YXIgYXJnID0gY29udGV4dC5jb25zdW1lQXJncygxKVswXTtcblxuICBpZiAoYXJnLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlxcXFxuZXdjb21tYW5kJ3MgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIG1hY3JvIG5hbWVcIik7XG4gIH1cblxuICB2YXIgbmFtZSA9IGFyZ1swXS50ZXh0O1xuICB2YXIgZXhpc3RzID0gY29udGV4dC5pc0RlZmluZWQobmFtZSk7XG5cbiAgaWYgKGV4aXN0cyAmJiAhZXhpc3RzT0spIHtcbiAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJcXFxcbmV3Y29tbWFuZHtcIiArIG5hbWUgKyBcIn0gYXR0ZW1wdGluZyB0byByZWRlZmluZSBcIiArIChuYW1lICsgXCI7IHVzZSBcXFxccmVuZXdjb21tYW5kXCIpKTtcbiAgfVxuXG4gIGlmICghZXhpc3RzICYmICFub25leGlzdHNPSykge1xuICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlxcXFxyZW5ld2NvbW1hbmR7XCIgKyBuYW1lICsgXCJ9IHdoZW4gY29tbWFuZCBcIiArIG5hbWUgKyBcIiBcIiArIFwiZG9lcyBub3QgeWV0IGV4aXN0OyB1c2UgXFxcXG5ld2NvbW1hbmRcIik7XG4gIH1cblxuICB2YXIgbnVtQXJncyA9IDA7XG4gIGFyZyA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMSlbMF07XG5cbiAgaWYgKGFyZy5sZW5ndGggPT09IDEgJiYgYXJnWzBdLnRleHQgPT09IFwiW1wiKSB7XG4gICAgdmFyIGFyZ1RleHQgPSAnJztcbiAgICB2YXIgdG9rZW4gPSBjb250ZXh0LmV4cGFuZE5leHRUb2tlbigpO1xuXG4gICAgd2hpbGUgKHRva2VuLnRleHQgIT09IFwiXVwiICYmIHRva2VuLnRleHQgIT09IFwiRU9GXCIpIHtcbiAgICAgIC8vIFRPRE86IFNob3VsZCBwcm9wZXJseSBleHBhbmQgYXJnLCBlLmcuLCBpZ25vcmUge31zXG4gICAgICBhcmdUZXh0ICs9IHRva2VuLnRleHQ7XG4gICAgICB0b2tlbiA9IGNvbnRleHQuZXhwYW5kTmV4dFRva2VuKCk7XG4gICAgfVxuXG4gICAgaWYgKCFhcmdUZXh0Lm1hdGNoKC9eXFxzKlswLTldK1xccyokLykpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50czogXCIgKyBhcmdUZXh0KTtcbiAgICB9XG5cbiAgICBudW1BcmdzID0gcGFyc2VJbnQoYXJnVGV4dCk7XG4gICAgYXJnID0gY29udGV4dC5jb25zdW1lQXJncygxKVswXTtcbiAgfSAvLyBGaW5hbCBhcmcgaXMgdGhlIGV4cGFuc2lvbiBvZiB0aGUgbWFjcm9cblxuXG4gIGNvbnRleHQubWFjcm9zLnNldChuYW1lLCB7XG4gICAgdG9rZW5zOiBhcmcsXG4gICAgbnVtQXJnczogbnVtQXJnc1xuICB9KTtcbiAgcmV0dXJuICcnO1xufTtcblxuZGVmaW5lTWFjcm8oXCJcXFxcbmV3Y29tbWFuZFwiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICByZXR1cm4gbWFjcm9zX25ld2NvbW1hbmQoY29udGV4dCwgZmFsc2UsIHRydWUpO1xufSk7XG5kZWZpbmVNYWNybyhcIlxcXFxyZW5ld2NvbW1hbmRcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgcmV0dXJuIG1hY3Jvc19uZXdjb21tYW5kKGNvbnRleHQsIHRydWUsIGZhbHNlKTtcbn0pO1xuZGVmaW5lTWFjcm8oXCJcXFxccHJvdmlkZWNvbW1hbmRcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgcmV0dXJuIG1hY3Jvc19uZXdjb21tYW5kKGNvbnRleHQsIHRydWUsIHRydWUpO1xufSk7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEdyb3VwaW5nXG4vLyBcXGxldFxcYmdyb3VwPXsgXFxsZXRcXGVncm91cD19XG5cbmRlZmluZU1hY3JvKFwiXFxcXGJncm91cFwiLCBcIntcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxlZ3JvdXBcIiwgXCJ9XCIpOyAvLyBTeW1ib2xzIGZyb20gbGF0ZXgubHR4OlxuLy8gXFxkZWZcXGxxe2B9XG4vLyBcXGRlZlxccnF7J31cbi8vIFxcZGVmIFxcYWEge1xcciBhfVxuLy8gXFxkZWYgXFxBQSB7XFxyIEF9XG5cbmRlZmluZU1hY3JvKFwiXFxcXGxxXCIsIFwiYFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJxXCIsIFwiJ1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGFhXCIsIFwiXFxcXHIgYVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEFBXCIsIFwiXFxcXHIgQVwiKTsgLy8gQ29weXJpZ2h0IChDKSBhbmQgcmVnaXN0ZXJlZCAoUikgc3ltYm9scy4gVXNlIHJhdyBzeW1ib2wgaW4gTWF0aE1MLlxuLy8gXFxEZWNsYXJlVGV4dENvbW1hbmREZWZhdWx0e1xcdGV4dGNvcHlyaWdodH17XFx0ZXh0Y2lyY2xlZHtjfX1cbi8vIFxcRGVjbGFyZVRleHRDb21tYW5kRGVmYXVsdHtcXHRleHRyZWdpc3RlcmVkfXtcXHRleHRjaXJjbGVkeyVcbi8vICAgICAgXFxjaGVja0BtYXRoZm9udHNcXGZvbnRzaXplXFxzZkBzaXplXFx6QFxcbWF0aEBmb250c2ZhbHNlXFxzZWxlY3Rmb250IFJ9fVxuLy8gXFxEZWNsYXJlUm9idXN0Q29tbWFuZHtcXGNvcHlyaWdodH17JVxuLy8gICAgXFxpZm1tb2Rle1xcbmZzc0B0ZXh0e1xcdGV4dGNvcHlyaWdodH19XFxlbHNlXFx0ZXh0Y29weXJpZ2h0XFxmaX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcdGV4dGNvcHlyaWdodFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcdGV4dGNpcmNsZWR7Y319e1xcXFxjaGFyYMKpfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNvcHlyaWdodFwiLCBcIlxcXFxUZXh0T3JNYXRoe1xcXFx0ZXh0Y29weXJpZ2h0fXtcXFxcdGV4dHtcXFxcdGV4dGNvcHlyaWdodH19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGV4dHJlZ2lzdGVyZWRcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXHRleHRjaXJjbGVke1xcXFxzY3JpcHRzaXplIFJ9fXtcXFxcY2hhcmDCrn1cIik7IC8vIENoYXJhY3RlcnMgb21pdHRlZCBmcm9tIFVuaWNvZGUgcmFuZ2UgMUQ0MDDigJMxRDdGRlxuXG5kZWZpbmVNYWNybyhcIlxcdTIxMkNcIiwgXCJcXFxcbWF0aHNjcntCfVwiKTsgLy8gc2NyaXB0XG5cbmRlZmluZU1hY3JvKFwiXFx1MjEzMFwiLCBcIlxcXFxtYXRoc2Nye0V9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMTMxXCIsIFwiXFxcXG1hdGhzY3J7Rn1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIxMEJcIiwgXCJcXFxcbWF0aHNjcntIfVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjExMFwiLCBcIlxcXFxtYXRoc2Nye0l9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMTEyXCIsIFwiXFxcXG1hdGhzY3J7TH1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIxMzNcIiwgXCJcXFxcbWF0aHNjcntNfVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjExQlwiLCBcIlxcXFxtYXRoc2Nye1J9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMTJEXCIsIFwiXFxcXG1hdGhmcmFre0N9XCIpOyAvLyBGcmFrdHVyXG5cbmRlZmluZU1hY3JvKFwiXFx1MjEwQ1wiLCBcIlxcXFxtYXRoZnJha3tIfVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjEyOFwiLCBcIlxcXFxtYXRoZnJha3tafVwiKTsgLy8gRGVmaW5lIFxcQmJiayB3aXRoIGEgbWFjcm8gdGhhdCB3b3JrcyBpbiBib3RoIEhUTUwgYW5kIE1hdGhNTC5cblxuZGVmaW5lTWFjcm8oXCJcXFxcQmJia1wiLCBcIlxcXFxCYmJ7a31cIik7IC8vIFVuaWNvZGUgbWlkZGxlIGRvdFxuLy8gVGhlIEthVGVYIGZvbnRzIGRvIG5vdCBjb250YWluIFUrMDBCNy4gSW5zdGVhZCwgXFxjZG90cCBkaXNwbGF5c1xuLy8gdGhlIGRvdCBhdCBVKzIyQzUgYW5kIGdpdmVzIGl0IHB1bmN0IHNwYWNpbmcuXG5cbmRlZmluZU1hY3JvKFwiXFx4QjdcIiwgXCJcXFxcY2RvdHBcIik7IC8vIFxcbGxhcCBhbmQgXFxybGFwIHJlbmRlciB0aGVpciBjb250ZW50cyBpbiB0ZXh0IG1vZGVcblxuZGVmaW5lTWFjcm8oXCJcXFxcbGxhcFwiLCBcIlxcXFxtYXRobGxhcHtcXFxcdGV4dHJteyMxfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxybGFwXCIsIFwiXFxcXG1hdGhybGFwe1xcXFx0ZXh0cm17IzF9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNsYXBcIiwgXCJcXFxcbWF0aGNsYXB7XFxcXHRleHRybXsjMX19XCIpOyAvLyBcXG5vdCBpcyBkZWZpbmVkIGJ5IGJhc2UvZm9udG1hdGgubHR4IHZpYVxuLy8gXFxEZWNsYXJlTWF0aFN5bWJvbHtcXG5vdH17XFxtYXRocmVsfXtzeW1ib2xzfXtcIjM2fVxuLy8gSXQncyB0aHVzIHRyZWF0ZWQgbGlrZSBhIFxcbWF0aHJlbCwgYnV0IGRlZmluZWQgYnkgYSBzeW1ib2wgdGhhdCBoYXMgemVyb1xuLy8gd2lkdGggYnV0IGV4dGVuZHMgdG8gdGhlIHJpZ2h0LiAgV2UgdXNlIFxccmxhcCB0byBnZXQgdGhhdCBzcGFjaW5nLlxuLy8gRm9yIE1hdGhNTCB3ZSB3cml0ZSBVKzAzMzggaGVyZS4gYnVpbGRNYXRoTUwuanMgd2lsbCB0aGVuIGRvIHRoZSBvdmVybGF5LlxuXG5kZWZpbmVNYWNybyhcIlxcXFxub3RcIiwgJ1xcXFxodG1sQG1hdGhtbHtcXFxcbWF0aHJlbHtcXFxcbWF0aHJsYXBcXFxcQG5vdH19e1xcXFxjaGFyXCIzMzh9Jyk7IC8vIE5lZ2F0ZWQgc3ltYm9scyBmcm9tIGJhc2UvZm9udG1hdGgubHR4OlxuLy8gXFxkZWZcXG5lcXtcXG5vdD19IFxcbGV0XFxuZT1cXG5lcVxuLy8gXFxEZWNsYXJlUm9idXN0Q29tbWFuZFxuLy8gICBcXG5vdGlue1xcbWF0aHJlbHtcXG1AdGhcXG1hdGhwYWxldHRlXFxjQG5jZWxcXGlufX1cbi8vIFxcZGVmXFxjQG5jZWwjMSMye1xcbUB0aFxcb29hbGlnbnskXFxoZmlsIzFcXG1rZXJuMW11L1xcaGZpbCRcXGNyY3IkIzEjMiR9fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxuZXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXG1hdGhyZWx7XFxcXG5vdD19fXtcXFxcbWF0aHJlbHtcXFxcY2hhcmDiiaB9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5lXCIsIFwiXFxcXG5lcVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjI2MFwiLCBcIlxcXFxuZXFcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxub3RpblwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcbWF0aHJlbHt7XFxcXGlufVxcXFxtYXRobGxhcHsvXFxcXG1za2lwMW11fX19XCIgKyBcIntcXFxcbWF0aHJlbHtcXFxcY2hhcmDiiIl9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjIwOVwiLCBcIlxcXFxub3RpblwiKTsgLy8gVW5pY29kZSBzdGFja2VkIHJlbGF0aW9uc1xuXG5kZWZpbmVNYWNybyhcIlxcdTIyNThcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVsez1cXFxca2VybnstMWVtfVxcXFxyYWlzZWJveHswLjRlbX17JFxcXFxzY3JpcHRzaXplXFxcXGZyb3duJH19XCIgKyBcIn17XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjI1OH19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjU5XCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxzdGFja3JlbHtcXFxcdGlueVxcXFx3ZWRnZX17PX19e1xcXFxtYXRocmVse1xcXFxjaGFyYFxcdTIyNTh9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjI1QVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcc3RhY2tyZWx7XFxcXHRpbnlcXFxcdmVlfXs9fX17XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjI1QX19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjVCXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxzdGFja3JlbHtcXFxcc2NyaXB0c2l6ZVxcXFxzdGFyfXs9fX1cIiArIFwie1xcXFxtYXRocmVse1xcXFxjaGFyYFxcdTIyNUJ9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjI1RFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcc3RhY2tyZWx7XFxcXHRpbnlcXFxcbWF0aHJte2RlZn19ez19fVwiICsgXCJ7XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjI1RH19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjVFXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxzdGFja3JlbHtcXFxcdGlueVxcXFxtYXRocm17bX19ez19fVwiICsgXCJ7XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjI1RX19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjVGXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxzdGFja3JlbHtcXFxcdGlueT99ez19fXtcXFxcbWF0aHJlbHtcXFxcY2hhcmBcXHUyMjVGfX1cIik7IC8vIE1pc2MgVW5pY29kZVxuXG5kZWZpbmVNYWNybyhcIlxcdTI3QzJcIiwgXCJcXFxccGVycFwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjAzQ1wiLCBcIlxcXFxtYXRoY2xvc2V7IVxcXFxta2Vybi0wLjhtdSF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjBDXCIsIFwiXFxcXG5vdG5pXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMzFDXCIsIFwiXFxcXHVsY29ybmVyXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMzFEXCIsIFwiXFxcXHVyY29ybmVyXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMzFFXCIsIFwiXFxcXGxsY29ybmVyXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMzFGXCIsIFwiXFxcXGxyY29ybmVyXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHhBOVwiLCBcIlxcXFxjb3B5cmlnaHRcIik7XG5kZWZpbmVNYWNybyhcIlxceEFFXCIsIFwiXFxcXHRleHRyZWdpc3RlcmVkXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHVGRTBGXCIsIFwiXFxcXHRleHRyZWdpc3RlcmVkXCIpOyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBMYVRlWF8yzrVcbi8vIFxcdmRvdHN7XFx2Ym94e1xcYmFzZWxpbmVza2lwNFxccEAgIFxcbGluZXNraXBsaW1pdFxcekBcbi8vIFxca2VybjZcXHBAXFxoYm94ey59XFxoYm94ey59XFxoYm94ey59fX1cbi8vIFdlJ2xsIGNhbGwgXFx2YXJ2ZG90cywgd2hpY2ggZ2V0cyBhIGdseXBoIGZyb20gc3ltYm9scy5qcy5cbi8vIFRoZSB6ZXJvLXdpZHRoIHJ1bGUgZ2V0cyB1cyBhbiBlcXVpdmFsZW50IHRvIHRoZSB2ZXJ0aWNhbCA2cHQga2Vybi5cblxuZGVmaW5lTWFjcm8oXCJcXFxcdmRvdHNcIiwgXCJcXFxcbWF0aG9yZHtcXFxcdmFydmRvdHNcXFxccnVsZXswcHR9ezE1cHR9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjJFRVwiLCBcIlxcXFx2ZG90c1wiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gYW1zbWF0aC5zdHlcbi8vIGh0dHA6Ly9taXJyb3JzLmNvbmNlcnRwYXNzLmNvbS90ZXgtYXJjaGl2ZS9tYWNyb3MvbGF0ZXgvcmVxdWlyZWQvYW1zbWF0aC9hbXNtYXRoLnBkZlxuLy8gSXRhbGljIEdyZWVrIGNhcGl0YWwgbGV0dGVycy4gIEFNUyBkZWZpbmVzIHRoZXNlIHdpdGggXFxEZWNsYXJlTWF0aFN5bWJvbCxcbi8vIGJ1dCB0aGV5IGFyZSBlcXVpdmFsZW50IHRvIFxcbWF0aGl0e1xcTGV0dGVyfS5cblxuZGVmaW5lTWFjcm8oXCJcXFxcdmFyR2FtbWFcIiwgXCJcXFxcbWF0aGl0e1xcXFxHYW1tYX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJEZWx0YVwiLCBcIlxcXFxtYXRoaXR7XFxcXERlbHRhfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhclRoZXRhXCIsIFwiXFxcXG1hdGhpdHtcXFxcVGhldGF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyTGFtYmRhXCIsIFwiXFxcXG1hdGhpdHtcXFxcTGFtYmRhfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhclhpXCIsIFwiXFxcXG1hdGhpdHtcXFxcWGl9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyUGlcIiwgXCJcXFxcbWF0aGl0e1xcXFxQaX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJTaWdtYVwiLCBcIlxcXFxtYXRoaXR7XFxcXFNpZ21hfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhclVwc2lsb25cIiwgXCJcXFxcbWF0aGl0e1xcXFxVcHNpbG9ufVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhclBoaVwiLCBcIlxcXFxtYXRoaXR7XFxcXFBoaX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJQc2lcIiwgXCJcXFxcbWF0aGl0e1xcXFxQc2l9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyT21lZ2FcIiwgXCJcXFxcbWF0aGl0e1xcXFxPbWVnYX1cIik7IC8vXFxuZXdjb21tYW5ke1xcc3Vic3RhY2t9WzFde1xcc3ViYXJyYXl7Y30jMVxcZW5kc3ViYXJyYXl9XG5cbmRlZmluZU1hY3JvKFwiXFxcXHN1YnN0YWNrXCIsIFwiXFxcXGJlZ2lue3N1YmFycmF5fXtjfSMxXFxcXGVuZHtzdWJhcnJheX1cIik7IC8vIFxccmVuZXdjb21tYW5ke1xcY29sb259e1xcbm9icmVha1xcbXNraXAybXVcXG1hdGhwdW5jdHt9XFxub25zY3JpcHRcbi8vIFxcbWtlcm4tXFx0aGlubXVza2lwezp9XFxtc2tpcDZtdXBsdXMxbXVcXHJlbGF4fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxjb2xvblwiLCBcIlxcXFxub2JyZWFrXFxcXG1za2lwMm11XFxcXG1hdGhwdW5jdHt9XCIgKyBcIlxcXFxtYXRoY2hvaWNle1xcXFxta2Vybi0zbXV9e1xcXFxta2Vybi0zbXV9e317fXs6fVxcXFxtc2tpcDZtdVwiKTsgLy8gXFxuZXdjb21tYW5ke1xcYm94ZWR9WzFde1xcZmJveHtcXG1AdGgkXFxkaXNwbGF5c3R5bGUjMSR9fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxib3hlZFwiLCBcIlxcXFxmYm94eyRcXFxcZGlzcGxheXN0eWxleyMxfSR9XCIpOyAvLyBcXGRlZlxcaWZme1xcRE9UU0JcXDtcXExvbmdsZWZ0cmlnaHRhcnJvd1xcO31cbi8vIFxcZGVmXFxpbXBsaWVze1xcRE9UU0JcXDtcXExvbmdyaWdodGFycm93XFw7fVxuLy8gXFxkZWZcXGltcGxpZWRieXtcXERPVFNCXFw7XFxMb25nbGVmdGFycm93XFw7fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxpZmZcIiwgXCJcXFxcRE9UU0JcXFxcO1xcXFxMb25nbGVmdHJpZ2h0YXJyb3dcXFxcO1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGltcGxpZXNcIiwgXCJcXFxcRE9UU0JcXFxcO1xcXFxMb25ncmlnaHRhcnJvd1xcXFw7XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaW1wbGllZGJ5XCIsIFwiXFxcXERPVFNCXFxcXDtcXFxcTG9uZ2xlZnRhcnJvd1xcXFw7XCIpOyAvLyBBTVNNYXRoJ3MgYXV0b21hdGljIFxcZG90cywgYmFzZWQgb24gXFxtZG90c0BAIG1hY3JvLlxuXG52YXIgZG90c0J5VG9rZW4gPSB7XG4gICcsJzogJ1xcXFxkb3RzYycsXG4gICdcXFxcbm90JzogJ1xcXFxkb3RzYicsXG4gIC8vIFxca2V5YmluQCBjaGVja3MgZm9yIHRoZSBmb2xsb3dpbmc6XG4gICcrJzogJ1xcXFxkb3RzYicsXG4gICc9JzogJ1xcXFxkb3RzYicsXG4gICc8JzogJ1xcXFxkb3RzYicsXG4gICc+JzogJ1xcXFxkb3RzYicsXG4gICctJzogJ1xcXFxkb3RzYicsXG4gICcqJzogJ1xcXFxkb3RzYicsXG4gICc6JzogJ1xcXFxkb3RzYicsXG4gIC8vIFN5bWJvbHMgd2hvc2UgZGVmaW5pdGlvbiBzdGFydHMgd2l0aCBcXERPVFNCOlxuICAnXFxcXERPVFNCJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcY29wcm9kJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcYmlndmVlJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcYmlnd2VkZ2UnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWd1cGx1cyc6ICdcXFxcZG90c2InLFxuICAnXFxcXGJpZ2NhcCc6ICdcXFxcZG90c2InLFxuICAnXFxcXGJpZ2N1cCc6ICdcXFxcZG90c2InLFxuICAnXFxcXHByb2QnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxzdW0nOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWdvdGltZXMnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWdvcGx1cyc6ICdcXFxcZG90c2InLFxuICAnXFxcXGJpZ29kb3QnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWdzcWN1cCc6ICdcXFxcZG90c2InLFxuICAnXFxcXEFuZCc6ICdcXFxcZG90c2InLFxuICAnXFxcXGxvbmdyaWdodGFycm93JzogJ1xcXFxkb3RzYicsXG4gICdcXFxcTG9uZ3JpZ2h0YXJyb3cnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxsb25nbGVmdGFycm93JzogJ1xcXFxkb3RzYicsXG4gICdcXFxcTG9uZ2xlZnRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXGxvbmdsZWZ0cmlnaHRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXExvbmdsZWZ0cmlnaHRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXG1hcHN0byc6ICdcXFxcZG90c2InLFxuICAnXFxcXGxvbmdtYXBzdG8nOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxob29rcmlnaHRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXGRvdGVxJzogJ1xcXFxkb3RzYicsXG4gIC8vIFN5bWJvbHMgd2hvc2UgZGVmaW5pdGlvbiBzdGFydHMgd2l0aCBcXG1hdGhiaW46XG4gICdcXFxcbWF0aGJpbic6ICdcXFxcZG90c2InLFxuICAvLyBTeW1ib2xzIHdob3NlIGRlZmluaXRpb24gc3RhcnRzIHdpdGggXFxtYXRocmVsOlxuICAnXFxcXG1hdGhyZWwnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxyZWxiYXInOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxSZWxiYXInOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFx4cmlnaHRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXHhsZWZ0YXJyb3cnOiAnXFxcXGRvdHNiJyxcbiAgLy8gU3ltYm9scyB3aG9zZSBkZWZpbml0aW9uIHN0YXJ0cyB3aXRoIFxcRE9UU0k6XG4gICdcXFxcRE9UU0knOiAnXFxcXGRvdHNpJyxcbiAgJ1xcXFxpbnQnOiAnXFxcXGRvdHNpJyxcbiAgJ1xcXFxvaW50JzogJ1xcXFxkb3RzaScsXG4gICdcXFxcaWludCc6ICdcXFxcZG90c2knLFxuICAnXFxcXGlpaW50JzogJ1xcXFxkb3RzaScsXG4gICdcXFxcaWlpaW50JzogJ1xcXFxkb3RzaScsXG4gICdcXFxcaWRvdHNpbnQnOiAnXFxcXGRvdHNpJyxcbiAgLy8gU3ltYm9scyB3aG9zZSBkZWZpbml0aW9uIHN0YXJ0cyB3aXRoIFxcRE9UU1g6XG4gICdcXFxcRE9UU1gnOiAnXFxcXGRvdHN4J1xufTtcbmRlZmluZU1hY3JvKFwiXFxcXGRvdHNcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgLy8gVE9ETzogSWYgdXNlZCBpbiB0ZXh0IG1vZGUsIHNob3VsZCBleHBhbmQgdG8gXFx0ZXh0ZWxsaXBzaXMuXG4gIC8vIEhvd2V2ZXIsIGluIEthVGVYLCBcXHRleHRlbGxpcHNpcyBhbmQgXFxsZG90cyBiZWhhdmUgdGhlIHNhbWVcbiAgLy8gKGluIHRleHQgbW9kZSksIGFuZCBpdCdzIHVubGlrZWx5IHdlJ2Qgc2VlIGFueSBvZiB0aGUgbWF0aCBjb21tYW5kc1xuICAvLyB0aGF0IGFmZmVjdCB0aGUgYmVoYXZpb3Igb2YgXFxkb3RzIHdoZW4gaW4gdGV4dCBtb2RlLiAgU28gZmluZSBmb3Igbm93XG4gIC8vICh1bnRpbCB3ZSBzdXBwb3J0IFxcaWZtbW9kZSAuLi4gXFxlbHNlIC4uLiBcXGZpKS5cbiAgdmFyIHRoZWRvdHMgPSAnXFxcXGRvdHNvJztcbiAgdmFyIG5leHQgPSBjb250ZXh0LmV4cGFuZEFmdGVyRnV0dXJlKCkudGV4dDtcblxuICBpZiAobmV4dCBpbiBkb3RzQnlUb2tlbikge1xuICAgIHRoZWRvdHMgPSBkb3RzQnlUb2tlbltuZXh0XTtcbiAgfSBlbHNlIGlmIChuZXh0LnN1YnN0cigwLCA0KSA9PT0gJ1xcXFxub3QnKSB7XG4gICAgdGhlZG90cyA9ICdcXFxcZG90c2InO1xuICB9IGVsc2UgaWYgKG5leHQgaW4gc3JjX3N5bWJvbHMubWF0aCkge1xuICAgIGlmICh1dGlscy5jb250YWlucyhbJ2JpbicsICdyZWwnXSwgc3JjX3N5bWJvbHMubWF0aFtuZXh0XS5ncm91cCkpIHtcbiAgICAgIHRoZWRvdHMgPSAnXFxcXGRvdHNiJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhlZG90cztcbn0pO1xudmFyIHNwYWNlQWZ0ZXJEb3RzID0ge1xuICAvLyBcXHJpZ2h0ZGVsaW1AIGNoZWNrcyBmb3IgdGhlIGZvbGxvd2luZzpcbiAgJyknOiB0cnVlLFxuICAnXSc6IHRydWUsXG4gICdcXFxccmJyYWNrJzogdHJ1ZSxcbiAgJ1xcXFx9JzogdHJ1ZSxcbiAgJ1xcXFxyYnJhY2UnOiB0cnVlLFxuICAnXFxcXHJhbmdsZSc6IHRydWUsXG4gICdcXFxccmNlaWwnOiB0cnVlLFxuICAnXFxcXHJmbG9vcic6IHRydWUsXG4gICdcXFxccmdyb3VwJzogdHJ1ZSxcbiAgJ1xcXFxybW91c3RhY2hlJzogdHJ1ZSxcbiAgJ1xcXFxyaWdodCc6IHRydWUsXG4gICdcXFxcYmlncic6IHRydWUsXG4gICdcXFxcYmlnZ3InOiB0cnVlLFxuICAnXFxcXEJpZ3InOiB0cnVlLFxuICAnXFxcXEJpZ2dyJzogdHJ1ZSxcbiAgLy8gXFxleHRyYUAgYWxzbyB0ZXN0cyBmb3IgdGhlIGZvbGxvd2luZzpcbiAgJyQnOiB0cnVlLFxuICAvLyBcXGV4dHJhcEAgY2hlY2tzIGZvciB0aGUgZm9sbG93aW5nOlxuICAnOyc6IHRydWUsXG4gICcuJzogdHJ1ZSxcbiAgJywnOiB0cnVlXG59O1xuZGVmaW5lTWFjcm8oXCJcXFxcZG90c29cIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgdmFyIG5leHQgPSBjb250ZXh0LmZ1dHVyZSgpLnRleHQ7XG5cbiAgaWYgKG5leHQgaW4gc3BhY2VBZnRlckRvdHMpIHtcbiAgICByZXR1cm4gXCJcXFxcbGRvdHNcXFxcLFwiO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIlxcXFxsZG90c1wiO1xuICB9XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXGRvdHNjXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciBuZXh0ID0gY29udGV4dC5mdXR1cmUoKS50ZXh0OyAvLyBcXGRvdHNjIHVzZXMgXFxleHRyYUAgYnV0IG5vdCBcXGV4dHJhcEAsIGluc3RlYWQgc3BlY2lhbGx5IGNoZWNraW5nIGZvclxuICAvLyAnOycgYW5kICcuJywgYnV0IGRvZXNuJ3QgY2hlY2sgZm9yICcsJy5cblxuICBpZiAobmV4dCBpbiBzcGFjZUFmdGVyRG90cyAmJiBuZXh0ICE9PSAnLCcpIHtcbiAgICByZXR1cm4gXCJcXFxcbGRvdHNcXFxcLFwiO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIlxcXFxsZG90c1wiO1xuICB9XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXGNkb3RzXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciBuZXh0ID0gY29udGV4dC5mdXR1cmUoKS50ZXh0O1xuXG4gIGlmIChuZXh0IGluIHNwYWNlQWZ0ZXJEb3RzKSB7XG4gICAgcmV0dXJuIFwiXFxcXEBjZG90c1xcXFwsXCI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwiXFxcXEBjZG90c1wiO1xuICB9XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXGRvdHNiXCIsIFwiXFxcXGNkb3RzXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZG90c21cIiwgXCJcXFxcY2RvdHNcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxkb3RzaVwiLCBcIlxcXFwhXFxcXGNkb3RzXCIpOyAvLyBhbXNtYXRoIGRvZXNuJ3QgYWN0dWFsbHkgZGVmaW5lIFxcZG90c3gsIGJ1dCBcXGRvdHMgZm9sbG93ZWQgYnkgYSBtYWNyb1xuLy8gc3RhcnRpbmcgd2l0aCBcXERPVFNYIGltcGxpZXMgXFxkb3RzbywgYW5kIHRoZW4gXFxleHRyYUAgZGV0ZWN0cyB0aGlzIGNhc2Vcbi8vIGFuZCBmb3JjZXMgdGhlIGFkZGVkIGBcXCxgLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxkb3RzeFwiLCBcIlxcXFxsZG90c1xcXFwsXCIpOyAvLyBcXGxldFxcRE9UU0lcXHJlbGF4XG4vLyBcXGxldFxcRE9UU0JcXHJlbGF4XG4vLyBcXGxldFxcRE9UU1hcXHJlbGF4XG5cbmRlZmluZU1hY3JvKFwiXFxcXERPVFNJXCIsIFwiXFxcXHJlbGF4XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcRE9UU0JcIiwgXCJcXFxccmVsYXhcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxET1RTWFwiLCBcIlxcXFxyZWxheFwiKTsgLy8gU3BhY2luZywgYmFzZWQgb24gYW1zbWF0aC5zdHkncyBvdmVycmlkZSBvZiBMYVRlWCBkZWZhdWx0c1xuLy8gXFxEZWNsYXJlUm9idXN0Q29tbWFuZHtcXHRtc3BhY2V9WzNdeyVcbi8vICAgXFxpZm1tb2RlXFxtc2tpcCMxIzJcXGVsc2VcXGtlcm4jMSMzXFxmaVxccmVsYXh9XG5cbmRlZmluZU1hY3JvKFwiXFxcXHRtc3BhY2VcIiwgXCJcXFxcVGV4dE9yTWF0aHtcXFxca2VybiMxIzN9e1xcXFxtc2tpcCMxIzJ9XFxcXHJlbGF4XCIpOyAvLyBcXHJlbmV3Y29tbWFuZHtcXCx9e1xcdG1zcGFjZStcXHRoaW5tdXNraXB7LjE2NjdlbX19XG4vLyBUT0RPOiBtYXRoIG1vZGUgc2hvdWxkIHVzZSBcXHRoaW5tdXNraXBcblxuZGVmaW5lTWFjcm8oXCJcXFxcLFwiLCBcIlxcXFx0bXNwYWNlK3szbXV9ey4xNjY3ZW19XCIpOyAvLyBcXGxldFxcdGhpbnNwYWNlXFwsXG5cbmRlZmluZU1hY3JvKFwiXFxcXHRoaW5zcGFjZVwiLCBcIlxcXFwsXCIpOyAvLyBcXGRlZlxcPntcXG1za2lwXFxtZWRtdXNraXB9XG4vLyBcXHJlbmV3Y29tbWFuZHtcXDp9e1xcdG1zcGFjZStcXG1lZG11c2tpcHsuMjIyMmVtfX1cbi8vIFRPRE86IFxcPiBhbmQgbWF0aCBtb2RlIG9mIFxcOiBzaG91bGQgdXNlIFxcbWVkbXVza2lwID0gNG11IHBsdXMgMm11IG1pbnVzIDRtdVxuXG5kZWZpbmVNYWNybyhcIlxcXFw+XCIsIFwiXFxcXG1za2lwezRtdX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFw6XCIsIFwiXFxcXHRtc3BhY2UrezRtdX17LjIyMjJlbX1cIik7IC8vIFxcbGV0XFxtZWRzcGFjZVxcOlxuXG5kZWZpbmVNYWNybyhcIlxcXFxtZWRzcGFjZVwiLCBcIlxcXFw6XCIpOyAvLyBcXHJlbmV3Y29tbWFuZHtcXDt9e1xcdG1zcGFjZStcXHRoaWNrbXVza2lwey4yNzc3ZW19fVxuLy8gVE9ETzogbWF0aCBtb2RlIHNob3VsZCB1c2UgXFx0aGlja211c2tpcCA9IDVtdSBwbHVzIDVtdVxuXG5kZWZpbmVNYWNybyhcIlxcXFw7XCIsIFwiXFxcXHRtc3BhY2UrezVtdX17LjI3NzdlbX1cIik7IC8vIFxcbGV0XFx0aGlja3NwYWNlXFw7XG5cbmRlZmluZU1hY3JvKFwiXFxcXHRoaWNrc3BhY2VcIiwgXCJcXFxcO1wiKTsgLy8gXFxyZW5ld2NvbW1hbmR7XFwhfXtcXHRtc3BhY2UtXFx0aGlubXVza2lwey4xNjY3ZW19fVxuLy8gVE9ETzogbWF0aCBtb2RlIHNob3VsZCB1c2UgXFx0aGlubXVza2lwXG5cbmRlZmluZU1hY3JvKFwiXFxcXCFcIiwgXCJcXFxcdG1zcGFjZS17M211fXsuMTY2N2VtfVwiKTsgLy8gXFxsZXRcXG5lZ3RoaW5zcGFjZVxcIVxuXG5kZWZpbmVNYWNybyhcIlxcXFxuZWd0aGluc3BhY2VcIiwgXCJcXFxcIVwiKTsgLy8gXFxuZXdjb21tYW5ke1xcbmVnbWVkc3BhY2V9e1xcdG1zcGFjZS1cXG1lZG11c2tpcHsuMjIyMmVtfX1cbi8vIFRPRE86IG1hdGggbW9kZSBzaG91bGQgdXNlIFxcbWVkbXVza2lwXG5cbmRlZmluZU1hY3JvKFwiXFxcXG5lZ21lZHNwYWNlXCIsIFwiXFxcXHRtc3BhY2UtezRtdX17LjIyMjJlbX1cIik7IC8vIFxcbmV3Y29tbWFuZHtcXG5lZ3RoaWNrc3BhY2V9e1xcdG1zcGFjZS1cXHRoaWNrbXVza2lwey4yNzc3ZW19fVxuLy8gVE9ETzogbWF0aCBtb2RlIHNob3VsZCB1c2UgXFx0aGlja211c2tpcFxuXG5kZWZpbmVNYWNybyhcIlxcXFxuZWd0aGlja3NwYWNlXCIsIFwiXFxcXHRtc3BhY2UtezVtdX17LjI3N2VtfVwiKTsgLy8gXFxkZWZcXGVuc3BhY2V7XFxrZXJuLjVlbSB9XG5cbmRlZmluZU1hY3JvKFwiXFxcXGVuc3BhY2VcIiwgXCJcXFxca2Vybi41ZW0gXCIpOyAvLyBcXGRlZlxcZW5za2lwe1xcaHNraXAuNWVtXFxyZWxheH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcZW5za2lwXCIsIFwiXFxcXGhza2lwLjVlbVxcXFxyZWxheFwiKTsgLy8gXFxkZWZcXHF1YWR7XFxoc2tpcDFlbVxccmVsYXh9XG5cbmRlZmluZU1hY3JvKFwiXFxcXHF1YWRcIiwgXCJcXFxcaHNraXAxZW1cXFxccmVsYXhcIik7IC8vIFxcZGVmXFxxcXVhZHtcXGhza2lwMmVtXFxyZWxheH1cblxuZGVmaW5lTWFjcm8oXCJcXFxccXF1YWRcIiwgXCJcXFxcaHNraXAyZW1cXFxccmVsYXhcIik7IC8vIFxcdGFnQGluQGRpc3BsYXkgZm9ybSBvZiBcXHRhZ1xuXG5kZWZpbmVNYWNybyhcIlxcXFx0YWdcIiwgXCJcXFxcQGlmc3RhclxcXFx0YWdAbGl0ZXJhbFxcXFx0YWdAcGFyZW5cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx0YWdAcGFyZW5cIiwgXCJcXFxcdGFnQGxpdGVyYWx7KHsjMX0pfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHRhZ0BsaXRlcmFsXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIGlmIChjb250ZXh0Lm1hY3Jvcy5nZXQoXCJcXFxcZGZAdGFnXCIpKSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiTXVsdGlwbGUgXFxcXHRhZ1wiKTtcbiAgfVxuXG4gIHJldHVybiBcIlxcXFxnZGVmXFxcXGRmQHRhZ3tcXFxcdGV4dHsjMX19XCI7XG59KTsgLy8gXFxyZW5ld2NvbW1hbmR7XFxibW9kfXtcXG5vbnNjcmlwdFxcbXNraXAtXFxtZWRtdXNraXBcXG1rZXJuNW11XFxtYXRoYmluXG4vLyAgIHtcXG9wZXJhdG9yQGZvbnQgbW9kfVxccGVuYWx0eTkwMFxuLy8gICBcXG1rZXJuNW11XFxub25zY3JpcHRcXG1za2lwLVxcbWVkbXVza2lwfVxuLy8gXFxuZXdjb21tYW5ke1xccG9kfVsxXXtcXGFsbG93YnJlYWtcbi8vICAgXFxpZkBkaXNwbGF5XFxta2VybjE4bXVcXGVsc2VcXG1rZXJuOG11XFxmaSgjMSl9XG4vLyBcXHJlbmV3Y29tbWFuZHtcXHBtb2R9WzFde1xccG9ke3tcXG9wZXJhdG9yQGZvbnQgbW9kfVxcbWtlcm42bXUjMX19XG4vLyBcXG5ld2NvbW1hbmR7XFxtb2R9WzFde1xcYWxsb3dicmVha1xcaWZAZGlzcGxheVxcbWtlcm4xOG11XG4vLyAgIFxcZWxzZVxcbWtlcm4xMm11XFxmaXtcXG9wZXJhdG9yQGZvbnQgbW9kfVxcLFxcLCMxfVxuLy8gVE9ETzogbWF0aCBtb2RlIHNob3VsZCB1c2UgXFxtZWRtdXNraXAgPSA0bXUgcGx1cyAybXUgbWludXMgNG11XG5cbmRlZmluZU1hY3JvKFwiXFxcXGJtb2RcIiwgXCJcXFxcbWF0aGNob2ljZXtcXFxcbXNraXAxbXV9e1xcXFxtc2tpcDFtdX17XFxcXG1za2lwNW11fXtcXFxcbXNraXA1bXV9XCIgKyBcIlxcXFxtYXRoYmlue1xcXFxybSBtb2R9XCIgKyBcIlxcXFxtYXRoY2hvaWNle1xcXFxtc2tpcDFtdX17XFxcXG1za2lwMW11fXtcXFxcbXNraXA1bXV9e1xcXFxtc2tpcDVtdX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwb2RcIiwgXCJcXFxcYWxsb3dicmVha1wiICsgXCJcXFxcbWF0aGNob2ljZXtcXFxcbWtlcm4xOG11fXtcXFxcbWtlcm44bXV9e1xcXFxta2VybjhtdX17XFxcXG1rZXJuOG11fSgjMSlcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwbW9kXCIsIFwiXFxcXHBvZHt7XFxcXHJtIG1vZH1cXFxcbWtlcm42bXUjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtb2RcIiwgXCJcXFxcYWxsb3dicmVha1wiICsgXCJcXFxcbWF0aGNob2ljZXtcXFxcbWtlcm4xOG11fXtcXFxcbWtlcm4xMm11fXtcXFxcbWtlcm4xMm11fXtcXFxcbWtlcm4xMm11fVwiICsgXCJ7XFxcXHJtIG1vZH1cXFxcLFxcXFwsIzFcIik7IC8vIFxccG1iICAgIC0tICAgQSBzaW11bGF0aW9uIG9mIGJvbGQuXG4vLyBUaGUgdmVyc2lvbiBpbiBhbWJzeS5zdHkgd29ya3MgYnkgdHlwZXNldHRpbmcgdGhyZWUgY29waWVzIG9mIHRoZSBhcmd1bWVudFxuLy8gd2l0aCBzbWFsbCBvZmZzZXRzLiBXZSB1c2UgdHdvIGNvcGllcy4gV2Ugb21pdCB0aGUgdmVydGljYWwgb2Zmc2V0IGJlY2F1c2Vcbi8vIG9mIHJlbmRlcmluZyBwcm9ibGVtcyB0aGF0IG1ha2VWTGlzdCBlbmNvdW50ZXJzIGluIFNhZmFyaS5cblxuZGVmaW5lTWFjcm8oXCJcXFxccG1iXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcQGJpbnJlbHsjMX17XFxcXG1hdGhybGFweyMxfVxcXFxrZXJuMC41cHgjMX19XCIgKyBcIntcXFxcbWF0aGJmeyMxfX1cIik7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIExhVGVYIHNvdXJjZTJlXG4vLyBcXFxcIGRlZmF1bHRzIHRvIFxcbmV3bGluZSwgYnV0IGNoYW5nZXMgdG8gXFxjciB3aXRoaW4gYXJyYXkgZW52aXJvbm1lbnRcblxuZGVmaW5lTWFjcm8oXCJcXFxcXFxcXFwiLCBcIlxcXFxuZXdsaW5lXCIpOyAvLyBcXGRlZlxcVGVYe1RcXGtlcm4tLjE2NjdlbVxcbG93ZXIuNWV4XFxoYm94e0V9XFxrZXJuLS4xMjVlbVhcXEB9XG4vLyBUT0RPOiBEb2Vzbid0IG5vcm1hbGx5IHdvcmsgaW4gbWF0aCBtb2RlIGJlY2F1c2UgXFxAIGZhaWxzLiAgS2FUZVggZG9lc24ndFxuLy8gc3VwcG9ydCBcXEAgeWV0LCBzbyB0aGF0J3Mgb21pdHRlZCwgYW5kIHdlIGFkZCBcXHRleHQgc28gdGhhdCB0aGUgcmVzdWx0XG4vLyBkb2Vzbid0IGxvb2sgZnVubnkgaW4gbWF0aCBtb2RlLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxUZVhcIiwgXCJcXFxcdGV4dHJte1xcXFxodG1sQG1hdGhtbHtcIiArIFwiVFxcXFxrZXJuLS4xNjY3ZW1cXFxccmFpc2Vib3h7LS41ZXh9e0V9XFxcXGtlcm4tLjEyNWVtWFwiICsgXCJ9e1RlWH19XCIpOyAvLyBcXERlY2xhcmVSb2J1c3RDb21tYW5ke1xcTGFUZVh9e0xcXGtlcm4tLjM2ZW0lXG4vLyAgICAgICAgIHtcXHNib3hcXHpAIFQlXG4vLyAgICAgICAgICBcXHZib3ggdG9cXGh0XFx6QHtcXGhib3h7XFxjaGVja0BtYXRoZm9udHNcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcZm9udHNpemVcXHNmQHNpemVcXHpAXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG1hdGhAZm9udHNmYWxzZVxcc2VsZWN0Zm9udFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQX0lXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICBcXHZzc30lXG4vLyAgICAgICAgIH0lXG4vLyAgICAgICAgIFxca2Vybi0uMTVlbSVcbi8vICAgICAgICAgXFxUZVh9XG4vLyBUaGlzIGNvZGUgYWxpZ25zIHRoZSB0b3Agb2YgdGhlIEEgd2l0aCB0aGUgVCAoZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgVGVYJ3Ncbi8vIGJveGVzLCB0aG91Z2ggdmlzdWFsbHkgdGhlIEEgYXBwZWFycyB0byBleHRlbmQgYWJvdmUgc2xpZ2h0bHkpLlxuLy8gV2UgY29tcHV0ZSB0aGUgY29ycmVzcG9uZGluZyBcXHJhaXNlYm94IHdoZW4gQSBpcyByZW5kZXJlZCBpbiBcXG5vcm1hbHNpemVcbi8vIFxcc2NyaXB0c3R5bGUsIHdoaWNoIGhhcyBhIHNjYWxlIGZhY3RvciBvZiAwLjcgKHNlZSBPcHRpb25zLmpzKS5cblxudmFyIGxhdGV4UmFpc2VBID0gZm9udE1ldHJpY3NEYXRhWydNYWluLVJlZ3VsYXInXVtcIlRcIi5jaGFyQ29kZUF0KDApXVsxXSAtIDAuNyAqIGZvbnRNZXRyaWNzRGF0YVsnTWFpbi1SZWd1bGFyJ11bXCJBXCIuY2hhckNvZGVBdCgwKV1bMV0gKyBcImVtXCI7XG5kZWZpbmVNYWNybyhcIlxcXFxMYVRlWFwiLCBcIlxcXFx0ZXh0cm17XFxcXGh0bWxAbWF0aG1se1wiICsgKFwiTFxcXFxrZXJuLS4zNmVtXFxcXHJhaXNlYm94e1wiICsgbGF0ZXhSYWlzZUEgKyBcIn17XFxcXHNjcmlwdHN0eWxlIEF9XCIpICsgXCJcXFxca2Vybi0uMTVlbVxcXFxUZVh9e0xhVGVYfX1cIik7IC8vIE5ldyBLYVRlWCBsb2dvIGJhc2VkIG9uIHR3ZWFraW5nIExhVGVYIGxvZ29cblxuZGVmaW5lTWFjcm8oXCJcXFxcS2FUZVhcIiwgXCJcXFxcdGV4dHJte1xcXFxodG1sQG1hdGhtbHtcIiArIChcIktcXFxca2Vybi0uMTdlbVxcXFxyYWlzZWJveHtcIiArIGxhdGV4UmFpc2VBICsgXCJ9e1xcXFxzY3JpcHRzdHlsZSBBfVwiKSArIFwiXFxcXGtlcm4tLjE1ZW1cXFxcVGVYfXtLYVRlWH19XCIpOyAvLyBcXERlY2xhcmVSb2J1c3RDb21tYW5kXFxoc3BhY2V7XFxAaWZzdGFyXFxAaHNwYWNlclxcQGhzcGFjZX1cbi8vIFxcZGVmXFxAaHNwYWNlIzF7XFxoc2tpcCAgIzFcXHJlbGF4fVxuLy8gXFxkZWZcXEBoc3BhY2VyIzF7XFx2cnVsZSBcXEB3aWR0aFxcekBcXG5vYnJlYWtcbi8vICAgICAgICAgICAgICAgICBcXGhza2lwICMxXFxoc2tpcCBcXHpAc2tpcH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcaHNwYWNlXCIsIFwiXFxcXEBpZnN0YXJcXFxcQGhzcGFjZXJcXFxcQGhzcGFjZVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEBoc3BhY2VcIiwgXCJcXFxcaHNraXAgIzFcXFxccmVsYXhcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxAaHNwYWNlclwiLCBcIlxcXFxydWxlezBwdH17MHB0fVxcXFxoc2tpcCAjMVxcXFxyZWxheFwiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gbWF0aHRvb2xzLnN0eVxuLy9cXHByb3ZpZGVjb21tYW5kXFxvcmRpbmFyeWNvbG9uezp9XG5cbmRlZmluZU1hY3JvKFwiXFxcXG9yZGluYXJ5Y29sb25cIiwgXCI6XCIpOyAvL1xcZGVmXFx2Y2VudGNvbG9ue1xcbWF0aHJlbHtcXG1hdGhvcFxcb3JkaW5hcnljb2xvbn19XG4vL1RPRE8oZWRlbWFpbmUpOiBOb3QgeWV0IGNlbnRlcmVkLiBGaXggdmlhIFxccmFpc2Vib3ggb3IgIzcyNlxuXG5kZWZpbmVNYWNybyhcIlxcXFx2Y2VudGNvbG9uXCIsIFwiXFxcXG1hdGhyZWx7XFxcXG1hdGhvcFxcXFxvcmRpbmFyeWNvbG9ufVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGRibGNvbG9ue1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLS45bXV9XFx2Y2VudGNvbG9ufVxuXG5kZWZpbmVNYWNybyhcIlxcXFxkYmxjb2xvblwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXHZjZW50Y29sb25cXFxcbWF0aHJlbHtcXFxcbWtlcm4tLjltdX1cXFxcdmNlbnRjb2xvbn19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjIyMzd9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGNvbG9uZXFxe1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fT19XG5cbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uZXFxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHtcXFxcdmNlbnRjb2xvblxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX09fX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjI1NH19XCIpOyAvLyDiiZRcbi8vIFxccHJvdmlkZWNvbW1hbmQqXFxDb2xvbmVxcXtcXGRibGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9PX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcQ29sb25lcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFxkYmxjb2xvblxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX09fX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjIzN1xcXFxjaGFyXFxcIjNkfX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxjb2xvbmVxe1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcbWF0aHJlbHstfX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25lcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXHZjZW50Y29sb25cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXG1hdGhyZWx7LX19fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIzYVxcXFxjaGFyXFxcIjIyMTJ9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXENvbG9uZXF7XFxkYmxjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcbWF0aHJlbHstfX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcQ29sb25lcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXGRibGNvbG9uXFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxtYXRocmVsey19fX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjIzN1xcXFxjaGFyXFxcIjIyMTJ9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGVxcWNvbG9uez1cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXHZjZW50Y29sb259XG5cbmRlZmluZU1hY3JvKFwiXFxcXGVxcWNvbG9uXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHs9XFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFx2Y2VudGNvbG9ufX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjI1NX19XCIpOyAvLyDiiZVcbi8vIFxccHJvdmlkZWNvbW1hbmQqXFxFcXFjb2xvbns9XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxkYmxjb2xvbn1cblxuZGVmaW5lTWFjcm8oXCJcXFxcRXFxY29sb25cIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVsez1cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXGRibGNvbG9ufX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiM2RcXFxcY2hhclxcXCIyMjM3fX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxlcWNvbG9ue1xcbWF0aHJlbHstfVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcdmNlbnRjb2xvbn1cblxuZGVmaW5lTWFjcm8oXCJcXFxcZXFjb2xvblwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXG1hdGhyZWx7LX1cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXHZjZW50Y29sb259fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMjM5fX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxFcWNvbG9ue1xcbWF0aHJlbHstfVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcZGJsY29sb259XG5cbmRlZmluZU1hY3JvKFwiXFxcXEVxY29sb25cIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFxtYXRocmVsey19XFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxkYmxjb2xvbn19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjIyMTJcXFxcY2hhclxcXCIyMjM3fX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxjb2xvbmFwcHJveHtcXHZjZW50Y29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXGFwcHJveH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25hcHByb3hcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFx2Y2VudGNvbG9uXFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxhcHByb3h9fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIzYVxcXFxjaGFyXFxcIjIyNDh9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXENvbG9uYXBwcm94e1xcZGJsY29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXGFwcHJveH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcQ29sb25hcHByb3hcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFxkYmxjb2xvblxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcYXBwcm94fX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjIzN1xcXFxjaGFyXFxcIjIyNDh9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGNvbG9uc2lte1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcc2ltfVxuXG5kZWZpbmVNYWNybyhcIlxcXFxjb2xvbnNpbVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXHZjZW50Y29sb25cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXHNpbX19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjNhXFxcXGNoYXJcXFwiMjIzY319XCIpOyAvLyBcXHByb3ZpZGVjb21tYW5kKlxcQ29sb25zaW17XFxkYmxjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcc2ltfVxuXG5kZWZpbmVNYWNybyhcIlxcXFxDb2xvbnNpbVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXGRibGNvbG9uXFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxzaW19fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMjM3XFxcXGNoYXJcXFwiMjIzY319XCIpOyAvLyBTb21lIFVuaWNvZGUgY2hhcmFjdGVycyBhcmUgaW1wbGVtZW50ZWQgd2l0aCBtYWNyb3MgdG8gbWF0aHRvb2xzIGZ1bmN0aW9ucy5cblxuZGVmaW5lTWFjcm8oXCJcXHUyMjM3XCIsIFwiXFxcXGRibGNvbG9uXCIpOyAvLyA6OlxuXG5kZWZpbmVNYWNybyhcIlxcdTIyMzlcIiwgXCJcXFxcZXFjb2xvblwiKTsgLy8gLTpcblxuZGVmaW5lTWFjcm8oXCJcXHUyMjU0XCIsIFwiXFxcXGNvbG9uZXFxXCIpOyAvLyA6PVxuXG5kZWZpbmVNYWNybyhcIlxcdTIyNTVcIiwgXCJcXFxcZXFxY29sb25cIik7IC8vID06XG5cbmRlZmluZU1hY3JvKFwiXFx1MkE3NFwiLCBcIlxcXFxDb2xvbmVxcVwiKTsgLy8gOjo9XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBjb2xvbmVxdWFscy5zdHlcbi8vIEFsdGVybmF0ZSBuYW1lcyBmb3IgbWF0aHRvb2xzJ3MgbWFjcm9zOlxuXG5kZWZpbmVNYWNybyhcIlxcXFxyYXRpb1wiLCBcIlxcXFx2Y2VudGNvbG9uXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25jb2xvblwiLCBcIlxcXFxkYmxjb2xvblwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uZXF1YWxzXCIsIFwiXFxcXGNvbG9uZXFxXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25jb2xvbmVxdWFsc1wiLCBcIlxcXFxDb2xvbmVxcVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGVxdWFsc2NvbG9uXCIsIFwiXFxcXGVxcWNvbG9uXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZXF1YWxzY29sb25jb2xvblwiLCBcIlxcXFxFcXFjb2xvblwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9ubWludXNcIiwgXCJcXFxcY29sb25lcVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uY29sb25taW51c1wiLCBcIlxcXFxDb2xvbmVxXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWludXNjb2xvblwiLCBcIlxcXFxlcWNvbG9uXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWludXNjb2xvbmNvbG9uXCIsIFwiXFxcXEVxY29sb25cIik7IC8vIFxcY29sb25hcHByb3ggbmFtZSBpcyBzYW1lIGluIG1hdGh0b29scyBhbmQgY29sb25lcXVhbHMuXG5cbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uY29sb25hcHByb3hcIiwgXCJcXFxcQ29sb25hcHByb3hcIik7IC8vIFxcY29sb25zaW0gbmFtZSBpcyBzYW1lIGluIG1hdGh0b29scyBhbmQgY29sb25lcXVhbHMuXG5cbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uY29sb25zaW1cIiwgXCJcXFxcQ29sb25zaW1cIik7IC8vIEFkZGl0aW9uYWwgbWFjcm9zLCBpbXBsZW1lbnRlZCBieSBhbmFsb2d5IHdpdGggbWF0aHRvb2xzIGRlZmluaXRpb25zOlxuXG5kZWZpbmVNYWNybyhcIlxcXFxzaW1jb2xvblwiLCBcIlxcXFxtYXRocmVse1xcXFxzaW1cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXHZjZW50Y29sb259XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcc2ltY29sb25jb2xvblwiLCBcIlxcXFxtYXRocmVse1xcXFxzaW1cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXGRibGNvbG9ufVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGFwcHJveGNvbG9uXCIsIFwiXFxcXG1hdGhyZWx7XFxcXGFwcHJveFxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcdmNlbnRjb2xvbn1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxhcHByb3hjb2xvbmNvbG9uXCIsIFwiXFxcXG1hdGhyZWx7XFxcXGFwcHJveFxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcZGJsY29sb259XCIpOyAvLyBQcmVzZW50IGluIG5ld3R4bWF0aCwgcHhmb250cyBhbmQgdHhmb250c1xuXG5kZWZpbmVNYWNybyhcIlxcXFxub3RuaVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcbm90XFxcXG5pfXtcXFxcbWF0aHJlbHtcXFxcY2hhcmBcXHUyMjBDfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsaW1zdXBcIiwgXCJcXFxcRE9UU0JcXFxcb3BlcmF0b3JuYW1lKntsaW1cXFxcLHN1cH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsaW1pbmZcIiwgXCJcXFxcRE9UU0JcXFxcb3BlcmF0b3JuYW1lKntsaW1cXFxcLGluZn1cIik7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIE1hdGhNTCBhbHRlcm5hdGVzIGZvciBLYVRlWCBnbHlwaHMgaW4gdGhlIFVuaWNvZGUgcHJpdmF0ZSBhcmVhXG5cbmRlZmluZU1hY3JvKFwiXFxcXGd2ZXJ0bmVxcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQGd2ZXJ0bmVxcX17XFx1MjI2OX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsdmVydG5lcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBsdmVydG5lcXF9e1xcdTIyNjh9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbmdlcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBuZ2VxcX17XFx1MjI3MX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxuZ2Vxc2xhbnRcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBuZ2Vxc2xhbnR9e1xcdTIyNzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbmxlcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBubGVxcX17XFx1MjI3MH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxubGVxc2xhbnRcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBubGVxc2xhbnR9e1xcdTIyNzB9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbnNob3J0bWlkXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAbnNob3J0bWlkfXviiKR9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbnNob3J0cGFyYWxsZWxcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBuc2hvcnRwYXJhbGxlbH174oimfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5zdWJzZXRlcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBuc3Vic2V0ZXFxfXtcXHUyMjg4fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5zdXBzZXRlcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBuc3Vwc2V0ZXFxfXtcXHUyMjg5fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhcnN1YnNldG5lcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQHZhcnN1YnNldG5lcX174oqKfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhcnN1YnNldG5lcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEB2YXJzdWJzZXRuZXFxfXviq4t9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyc3Vwc2V0bmVxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAdmFyc3Vwc2V0bmVxfXviiot9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyc3Vwc2V0bmVxcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQHZhcnN1cHNldG5lcXF9e+KrjH1cIik7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIHN0bWFyeXJkIGFuZCBzZW1hbnRpY1xuLy8gVGhlIHN0bWFyeXJkIGFuZCBzZW1hbnRpYyBwYWNrYWdlcyByZW5kZXIgdGhlIG5leHQgZm91ciBpdGVtcyBieSBjYWxsaW5nIGFcbi8vIGdseXBoLiBUaG9zZSBnbHlwaHMgZG8gbm90IGV4aXN0IGluIHRoZSBLYVRlWCBmb250cy4gSGVuY2UgdGhlIG1hY3Jvcy5cblxuZGVmaW5lTWFjcm8oXCJcXFxcbGxicmFja2V0XCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aG9wZW57W1xcXFxta2Vybi0zLjJtdVt9fVwiICsgXCJ7XFxcXG1hdGhvcGVue1xcXFxjaGFyYFxcdTI3RTZ9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJyYnJhY2tldFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhjbG9zZXtdXFxcXG1rZXJuLTMuMm11XX19XCIgKyBcIntcXFxcbWF0aGNsb3Nle1xcXFxjaGFyYFxcdTI3RTd9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjdFNlwiLCBcIlxcXFxsbGJyYWNrZXRcIik7IC8vIGJsYWNrYm9hcmQgYm9sZCBbXG5cbmRlZmluZU1hY3JvKFwiXFx1MjdFN1wiLCBcIlxcXFxycmJyYWNrZXRcIik7IC8vIGJsYWNrYm9hcmQgYm9sZCBdXG5cbmRlZmluZU1hY3JvKFwiXFxcXGxCcmFjZVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhvcGVue1xcXFx7XFxcXG1rZXJuLTMuMm11W319XCIgKyBcIntcXFxcbWF0aG9wZW57XFxcXGNoYXJgXFx1Mjk4M319XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcckJyYWNlXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aGNsb3Nle11cXFxcbWtlcm4tMy4ybXVcXFxcfX19XCIgKyBcIntcXFxcbWF0aGNsb3Nle1xcXFxjaGFyYFxcdTI5ODR9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1Mjk4M1wiLCBcIlxcXFxsQnJhY2VcIik7IC8vIGJsYWNrYm9hcmQgYm9sZCB7XG5cbmRlZmluZU1hY3JvKFwiXFx1Mjk4NFwiLCBcIlxcXFxyQnJhY2VcIik7IC8vIGJsYWNrYm9hcmQgYm9sZCB9XG4vLyBUT0RPOiBDcmVhdGUgdmFyaWFibGUgc2l6ZWQgdmVyc2lvbnMgb2YgdGhlIGxhc3QgdHdvIGl0ZW1zLiBJIGJlbGlldmUgdGhhdFxuLy8gd2lsbCByZXF1aXJlIG5ldyBmb250IGdseXBocy5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIHRleHZjLnN0eVxuLy8gVGhlIHRleHZjIHBhY2thZ2UgY29udGFpbnMgbWFjcm9zIGF2YWlsYWJsZSBpbiBtZWRpYXdpa2kgcGFnZXMuXG4vLyBXZSBvbWl0IHRoZSBmdW5jdGlvbnMgZGVwcmVjYXRlZCBhdFxuLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSGVscDpEaXNwbGF5aW5nX2FfZm9ybXVsYSNEZXByZWNhdGVkX3N5bnRheFxuLy8gV2UgYWxzbyBvbWl0IHRleHZjJ3MgXFxPLCB3aGljaCBjb25mbGljdHMgd2l0aCBcXHRleHR7XFxPfVxuXG5kZWZpbmVNYWNybyhcIlxcXFxkYXJyXCIsIFwiXFxcXGRvd25hcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGRBcnJcIiwgXCJcXFxcRG93bmFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcRGFyclwiLCBcIlxcXFxEb3duYXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsYW5nXCIsIFwiXFxcXGxhbmdsZVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJhbmdcIiwgXCJcXFxccmFuZ2xlXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdWFyclwiLCBcIlxcXFx1cGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdUFyclwiLCBcIlxcXFxVcGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcVWFyclwiLCBcIlxcXFxVcGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcTlwiLCBcIlxcXFxtYXRoYmJ7Tn1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxSXCIsIFwiXFxcXG1hdGhiYntSfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXFpcIiwgXCJcXFxcbWF0aGJie1p9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYWxlZlwiLCBcIlxcXFxhbGVwaFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGFsZWZzeW1cIiwgXCJcXFxcYWxlcGhcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxBbHBoYVwiLCBcIlxcXFxtYXRocm17QX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxCZXRhXCIsIFwiXFxcXG1hdGhybXtCfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGJ1bGxcIiwgXCJcXFxcYnVsbGV0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcQ2hpXCIsIFwiXFxcXG1hdGhybXtYfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNsdWJzXCIsIFwiXFxcXGNsdWJzdWl0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY251bXNcIiwgXCJcXFxcbWF0aGJie0N9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcQ29tcGxleFwiLCBcIlxcXFxtYXRoYmJ7Q31cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxEYWdnZXJcIiwgXCJcXFxcZGRhZ2dlclwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGRpYW1vbmRzXCIsIFwiXFxcXGRpYW1vbmRzdWl0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZW1wdHlcIiwgXCJcXFxcZW1wdHlzZXRcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxFcHNpbG9uXCIsIFwiXFxcXG1hdGhybXtFfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEV0YVwiLCBcIlxcXFxtYXRocm17SH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxleGlzdFwiLCBcIlxcXFxleGlzdHNcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxoYXJyXCIsIFwiXFxcXGxlZnRyaWdodGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaEFyclwiLCBcIlxcXFxMZWZ0cmlnaHRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEhhcnJcIiwgXCJcXFxcTGVmdHJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxoZWFydHNcIiwgXCJcXFxcaGVhcnRzdWl0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaW1hZ2VcIiwgXCJcXFxcSW1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxpbmZpblwiLCBcIlxcXFxpbmZ0eVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXElvdGFcIiwgXCJcXFxcbWF0aHJte0l9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaXNpblwiLCBcIlxcXFxpblwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEthcHBhXCIsIFwiXFxcXG1hdGhybXtLfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGxhcnJcIiwgXCJcXFxcbGVmdGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbEFyclwiLCBcIlxcXFxMZWZ0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxMYXJyXCIsIFwiXFxcXExlZnRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGxyYXJyXCIsIFwiXFxcXGxlZnRyaWdodGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbHJBcnJcIiwgXCJcXFxcTGVmdHJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxMcmFyclwiLCBcIlxcXFxMZWZ0cmlnaHRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXE11XCIsIFwiXFxcXG1hdGhybXtNfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5hdG51bXNcIiwgXCJcXFxcbWF0aGJie059XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcTnVcIiwgXCJcXFxcbWF0aHJte059XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcT21pY3JvblwiLCBcIlxcXFxtYXRocm17T31cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwbHVzbW5cIiwgXCJcXFxccG1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyYXJyXCIsIFwiXFxcXHJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyQXJyXCIsIFwiXFxcXFJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxSYXJyXCIsIFwiXFxcXFJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyZWFsXCIsIFwiXFxcXFJlXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVhbHNcIiwgXCJcXFxcbWF0aGJie1J9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcUmVhbHNcIiwgXCJcXFxcbWF0aGJie1J9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcUmhvXCIsIFwiXFxcXG1hdGhybXtQfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHNkb3RcIiwgXCJcXFxcY2RvdFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHNlY3RcIiwgXCJcXFxcU1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHNwYWRlc1wiLCBcIlxcXFxzcGFkZXN1aXRcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxzdWJcIiwgXCJcXFxcc3Vic2V0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcc3ViZVwiLCBcIlxcXFxzdWJzZXRlcVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHN1cGVcIiwgXCJcXFxcc3Vwc2V0ZXFcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxUYXVcIiwgXCJcXFxcbWF0aHJte1R9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGhldGFzeW1cIiwgXCJcXFxcdmFydGhldGFcIik7IC8vIFRPRE86IGRlZmluZU1hY3JvKFwiXFxcXHZhcmNvcHBhXCIsIFwiXFxcXFxcbWJveHtcXFxcY29wcGF9XCIpO1xuXG5kZWZpbmVNYWNybyhcIlxcXFx3ZWllcnBcIiwgXCJcXFxcd3BcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxaZXRhXCIsIFwiXFxcXG1hdGhybXtafVwiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gc3RhdG1hdGguc3R5XG4vLyBodHRwczovL2N0YW4ubWF0aC5pbGxpbm9pcy5lZHUvbWFjcm9zL2xhdGV4L2NvbnRyaWIvc3RhdG1hdGgvc3RhdG1hdGgucGRmXG5cbmRlZmluZU1hY3JvKFwiXFxcXGFyZ21pblwiLCBcIlxcXFxET1RTQlxcXFxvcGVyYXRvcm5hbWUqe2FyZ1xcXFwsbWlufVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGFyZ21heFwiLCBcIlxcXFxET1RTQlxcXFxvcGVyYXRvcm5hbWUqe2FyZ1xcXFwsbWF4fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHBsaW1cIiwgXCJcXFxcRE9UU0JcXFxcbWF0aG9we1xcXFxvcGVyYXRvcm5hbWV7cGxpbX19XFxcXGxpbWl0c1wiKTsgLy8gQ3VzdG9tIEtoYW4gQWNhZGVteSBjb2xvcnMsIHNob3VsZCBiZSBtb3ZlZCB0byBhbiBvcHRpb25hbCBwYWNrYWdlXG5cbmRlZmluZU1hY3JvKFwiXFxcXGJsdWVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjNjQ5NWVkfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxvcmFuZ2VcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZmZhNTAwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwaW5rXCIsIFwiXFxcXHRleHRjb2xvcnsjI2ZmMDBhZn17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVkXCIsIFwiXFxcXHRleHRjb2xvcnsjI2RmMDAzMH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JlZW5cIiwgXCJcXFxcdGV4dGNvbG9yeyMjMjhhZTdifXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5XCIsIFwiXFxcXHRleHRjb2xvcntncmF5fXsjIzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccHVycGxlXCIsIFwiXFxcXHRleHRjb2xvcnsjIzlkMzhiZH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYmx1ZUFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjY2NmYWZmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxibHVlQlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM4MGY2ZmZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGJsdWVDXCIsIFwiXFxcXHRleHRjb2xvcnsjIzYzZDllYX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYmx1ZURcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMTFhY2NkfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxibHVlRVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyMwYzdmOTl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHRlYWxBXCIsIFwiXFxcXHRleHRjb2xvcnsjIzk0ZmZmNX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGVhbEJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMjZlZGQ1fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx0ZWFsQ1wiLCBcIlxcXFx0ZXh0Y29sb3J7IyMwMWQxYzF9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHRlYWxEXCIsIFwiXFxcXHRleHRjb2xvcnsjIzAxYTk5NX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGVhbEVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMjA4MTcwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjYjZmZmIwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjOGFmMjgxfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkNcIiwgXCJcXFxcdGV4dGNvbG9yeyMjNzRjZjcwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkRcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMWZhYjU0fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMGQ5MjNmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxnb2xkQVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmZmQwYTl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdvbGRCXCIsIFwiXFxcXHRleHRjb2xvcnsjI2ZmYmI3MX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ29sZENcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZmY5YzM5fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxnb2xkRFwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNlMDdkMTB9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdvbGRFXCIsIFwiXFxcXHRleHRjb2xvcnsjI2E3NWEwNX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVkQVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmY2E5YTl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJlZEJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZmY4NDgyfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyZWRDXCIsIFwiXFxcXHRleHRjb2xvcnsjI2Y5Njg1ZH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVkRFwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNlODRkMzl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJlZEVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjYmMyNjEyfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtYXJvb25BXCIsIFwiXFxcXHRleHRjb2xvcnsjI2ZmYmRlMH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWFyb29uQlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmZjkyYzZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG1hcm9vbkNcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZWQ1ZmE2fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtYXJvb25EXCIsIFwiXFxcXHRleHRjb2xvcnsjI2NhMzM3Y317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWFyb29uRVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM5ZTAzNGV9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHB1cnBsZUFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZGRkN2ZmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwdXJwbGVCXCIsIFwiXFxcXHRleHRjb2xvcnsjI2M2YjlmY317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccHVycGxlQ1wiLCBcIlxcXFx0ZXh0Y29sb3J7IyNhYTg3ZmZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHB1cnBsZURcIiwgXCJcXFxcdGV4dGNvbG9yeyMjNzg1NGFifXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwdXJwbGVFXCIsIFwiXFxcXHRleHRjb2xvcnsjIzU0M2I3OH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWludEFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZjVmOWU4fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtaW50QlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNlZGYyZGZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG1pbnRDXCIsIFwiXFxcXHRleHRjb2xvcnsjI2UwZTVjY317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheUFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZjZmN2Y3fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5QlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmMGYxZjJ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlDXCIsIFwiXFxcXHRleHRjb2xvcnsjI2UzZTVlNn17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheURcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZDZkOGRhfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5RVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNiYWJlYzJ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlGXCIsIFwiXFxcXHRleHRjb2xvcnsjIzg4OGQ5M317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheUdcIiwgXCJcXFxcdGV4dGNvbG9yeyMjNjI2NTY5fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5SFwiLCBcIlxcXFx0ZXh0Y29sb3J7IyMzYjNlNDB9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlJXCIsIFwiXFxcXHRleHRjb2xvcnsjIzIxMjQyY317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxca2FCbHVlXCIsIFwiXFxcXHRleHRjb2xvcnsjIzMxNDQ1M317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxca2FHcmVlblwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM3MUIzMDd9eyMxfVwiKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL01hY3JvRXhwYW5kZXIuanNcbi8qKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSDigJxndWxsZXTigJ0gd2hlcmUgbWFjcm9zIGFyZSBleHBhbmRlZFxuICogdW50aWwgb25seSBub24tbWFjcm8gdG9rZW5zIHJlbWFpbi5cbiAqL1xuXG5cblxuXG5cblxuXG4vLyBMaXN0IG9mIGNvbW1hbmRzIHRoYXQgYWN0IGxpa2UgbWFjcm9zIGJ1dCBhcmVuJ3QgZGVmaW5lZCBhcyBhIG1hY3JvLFxuLy8gZnVuY3Rpb24sIG9yIHN5bWJvbC4gIFVzZWQgaW4gYGlzRGVmaW5lZGAuXG52YXIgaW1wbGljaXRDb21tYW5kcyA9IHtcbiAgXCJcXFxccmVsYXhcIjogdHJ1ZSxcbiAgLy8gTWFjcm9FeHBhbmRlci5qc1xuICBcIl5cIjogdHJ1ZSxcbiAgLy8gUGFyc2VyLmpzXG4gIFwiX1wiOiB0cnVlLFxuICAvLyBQYXJzZXIuanNcbiAgXCJcXFxcbGltaXRzXCI6IHRydWUsXG4gIC8vIFBhcnNlci5qc1xuICBcIlxcXFxub2xpbWl0c1wiOiB0cnVlIC8vIFBhcnNlci5qc1xuXG59O1xuXG52YXIgTWFjcm9FeHBhbmRlcl9NYWNyb0V4cGFuZGVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTWFjcm9FeHBhbmRlcihpbnB1dCwgc2V0dGluZ3MsIG1vZGUpIHtcbiAgICB0aGlzLnNldHRpbmdzID0gdm9pZCAwO1xuICAgIHRoaXMuZXhwYW5zaW9uQ291bnQgPSB2b2lkIDA7XG4gICAgdGhpcy5sZXhlciA9IHZvaWQgMDtcbiAgICB0aGlzLm1hY3JvcyA9IHZvaWQgMDtcbiAgICB0aGlzLnN0YWNrID0gdm9pZCAwO1xuICAgIHRoaXMubW9kZSA9IHZvaWQgMDtcbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgdGhpcy5leHBhbnNpb25Db3VudCA9IDA7XG4gICAgdGhpcy5mZWVkKGlucHV0KTsgLy8gTWFrZSBuZXcgZ2xvYmFsIG5hbWVzcGFjZVxuXG4gICAgdGhpcy5tYWNyb3MgPSBuZXcgTmFtZXNwYWNlX05hbWVzcGFjZShtYWNyb3MsIHNldHRpbmdzLm1hY3Jvcyk7XG4gICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgICB0aGlzLnN0YWNrID0gW107IC8vIGNvbnRhaW5zIHRva2VucyBpbiBSRVZFUlNFIG9yZGVyXG4gIH1cbiAgLyoqXG4gICAqIEZlZWQgYSBuZXcgaW5wdXQgc3RyaW5nIHRvIHRoZSBzYW1lIE1hY3JvRXhwYW5kZXJcbiAgICogKHdpdGggZXhpc3RpbmcgbWFjcm9zIGV0Yy4pLlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBNYWNyb0V4cGFuZGVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZmVlZCA9IGZ1bmN0aW9uIGZlZWQoaW5wdXQpIHtcbiAgICB0aGlzLmxleGVyID0gbmV3IExleGVyX0xleGVyKGlucHV0LCB0aGlzLnNldHRpbmdzKTtcbiAgfVxuICAvKipcbiAgICogU3dpdGNoZXMgYmV0d2VlbiBcInRleHRcIiBhbmQgXCJtYXRoXCIgbW9kZXMuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnN3aXRjaE1vZGUgPSBmdW5jdGlvbiBzd2l0Y2hNb2RlKG5ld01vZGUpIHtcbiAgICB0aGlzLm1vZGUgPSBuZXdNb2RlO1xuICB9XG4gIC8qKlxuICAgKiBTdGFydCBhIG5ldyBncm91cCBuZXN0aW5nIHdpdGhpbiBhbGwgbmFtZXNwYWNlcy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uYmVnaW5Hcm91cCA9IGZ1bmN0aW9uIGJlZ2luR3JvdXAoKSB7XG4gICAgdGhpcy5tYWNyb3MuYmVnaW5Hcm91cCgpO1xuICB9XG4gIC8qKlxuICAgKiBFbmQgY3VycmVudCBncm91cCBuZXN0aW5nIHdpdGhpbiBhbGwgbmFtZXNwYWNlcy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZW5kR3JvdXAgPSBmdW5jdGlvbiBlbmRHcm91cCgpIHtcbiAgICB0aGlzLm1hY3Jvcy5lbmRHcm91cCgpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0b3Btb3N0IHRva2VuIG9uIHRoZSBzdGFjaywgd2l0aG91dCBleHBhbmRpbmcgaXQuXG4gICAqIFNpbWlsYXIgaW4gYmVoYXZpb3IgdG8gVGVYJ3MgYFxcZnV0dXJlbGV0YC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZnV0dXJlID0gZnVuY3Rpb24gZnV0dXJlKCkge1xuICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5wdXNoVG9rZW4odGhpcy5sZXhlci5sZXgoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTtcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlIGFuZCByZXR1cm4gdGhlIG5leHQgdW5leHBhbmRlZCB0b2tlbi5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ucG9wVG9rZW4gPSBmdW5jdGlvbiBwb3BUb2tlbigpIHtcbiAgICB0aGlzLmZ1dHVyZSgpOyAvLyBlbnN1cmUgbm9uLWVtcHR5IHN0YWNrXG5cbiAgICByZXR1cm4gdGhpcy5zdGFjay5wb3AoKTtcbiAgfVxuICAvKipcbiAgICogQWRkIGEgZ2l2ZW4gdG9rZW4gdG8gdGhlIHRva2VuIHN0YWNrLiAgSW4gcGFydGljdWxhciwgdGhpcyBnZXQgYmUgdXNlZFxuICAgKiB0byBwdXQgYmFjayBhIHRva2VuIHJldHVybmVkIGZyb20gb25lIG9mIHRoZSBvdGhlciBtZXRob2RzLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5wdXNoVG9rZW4gPSBmdW5jdGlvbiBwdXNoVG9rZW4odG9rZW4pIHtcbiAgICB0aGlzLnN0YWNrLnB1c2godG9rZW4pO1xuICB9XG4gIC8qKlxuICAgKiBBcHBlbmQgYW4gYXJyYXkgb2YgdG9rZW5zIHRvIHRoZSB0b2tlbiBzdGFjay5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ucHVzaFRva2VucyA9IGZ1bmN0aW9uIHB1c2hUb2tlbnModG9rZW5zKSB7XG4gICAgdmFyIF90aGlzJHN0YWNrO1xuXG4gICAgKF90aGlzJHN0YWNrID0gdGhpcy5zdGFjaykucHVzaC5hcHBseShfdGhpcyRzdGFjaywgdG9rZW5zKTtcbiAgfVxuICAvKipcbiAgICogQ29uc3VtZSBhbGwgZm9sbG93aW5nIHNwYWNlIHRva2Vucywgd2l0aG91dCBleHBhbnNpb24uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmNvbnN1bWVTcGFjZXMgPSBmdW5jdGlvbiBjb25zdW1lU3BhY2VzKCkge1xuICAgIGZvciAoOzspIHtcbiAgICAgIHZhciB0b2tlbiA9IHRoaXMuZnV0dXJlKCk7XG5cbiAgICAgIGlmICh0b2tlbi50ZXh0ID09PSBcIiBcIikge1xuICAgICAgICB0aGlzLnN0YWNrLnBvcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDb25zdW1lIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGFyZ3VtZW50cyBmcm9tIHRoZSB0b2tlbiBzdHJlYW0sXG4gICAqIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBhcnJheSBvZiBhcmd1bWVudHMuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmNvbnN1bWVBcmdzID0gZnVuY3Rpb24gY29uc3VtZUFyZ3MobnVtQXJncykge1xuICAgIHZhciBhcmdzID0gW107IC8vIG9idGFpbiBhcmd1bWVudHMsIGVpdGhlciBzaW5nbGUgdG9rZW4gb3IgYmFsYW5jZWQge+KApn0gZ3JvdXBcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtQXJnczsgKytpKSB7XG4gICAgICB0aGlzLmNvbnN1bWVTcGFjZXMoKTsgLy8gaWdub3JlIHNwYWNlcyBiZWZvcmUgZWFjaCBhcmd1bWVudFxuXG4gICAgICB2YXIgc3RhcnRPZkFyZyA9IHRoaXMucG9wVG9rZW4oKTtcblxuICAgICAgaWYgKHN0YXJ0T2ZBcmcudGV4dCA9PT0gXCJ7XCIpIHtcbiAgICAgICAgdmFyIGFyZyA9IFtdO1xuICAgICAgICB2YXIgZGVwdGggPSAxO1xuXG4gICAgICAgIHdoaWxlIChkZXB0aCAhPT0gMCkge1xuICAgICAgICAgIHZhciB0b2sgPSB0aGlzLnBvcFRva2VuKCk7XG4gICAgICAgICAgYXJnLnB1c2godG9rKTtcblxuICAgICAgICAgIGlmICh0b2sudGV4dCA9PT0gXCJ7XCIpIHtcbiAgICAgICAgICAgICsrZGVwdGg7XG4gICAgICAgICAgfSBlbHNlIGlmICh0b2sudGV4dCA9PT0gXCJ9XCIpIHtcbiAgICAgICAgICAgIC0tZGVwdGg7XG4gICAgICAgICAgfSBlbHNlIGlmICh0b2sudGV4dCA9PT0gXCJFT0ZcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiRW5kIG9mIGlucHV0IGluIG1hY3JvIGFyZ3VtZW50XCIsIHN0YXJ0T2ZBcmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGFyZy5wb3AoKTsgLy8gcmVtb3ZlIGxhc3QgfVxuXG4gICAgICAgIGFyZy5yZXZlcnNlKCk7IC8vIGxpa2UgYWJvdmUsIHRvIGZpdCBpbiB3aXRoIHN0YWNrIG9yZGVyXG5cbiAgICAgICAgYXJnc1tpXSA9IGFyZztcbiAgICAgIH0gZWxzZSBpZiAoc3RhcnRPZkFyZy50ZXh0ID09PSBcIkVPRlwiKSB7XG4gICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkVuZCBvZiBpbnB1dCBleHBlY3RpbmcgbWFjcm8gYXJndW1lbnRcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcmdzW2ldID0gW3N0YXJ0T2ZBcmddO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhcmdzO1xuICB9XG4gIC8qKlxuICAgKiBFeHBhbmQgdGhlIG5leHQgdG9rZW4gb25seSBvbmNlIGlmIHBvc3NpYmxlLlxuICAgKlxuICAgKiBJZiB0aGUgdG9rZW4gaXMgZXhwYW5kZWQsIHRoZSByZXN1bHRpbmcgdG9rZW5zIHdpbGwgYmUgcHVzaGVkIG9udG9cbiAgICogdGhlIHN0YWNrIGluIHJldmVyc2Ugb3JkZXIgYW5kIHdpbGwgYmUgcmV0dXJuZWQgYXMgYW4gYXJyYXksXG4gICAqIGFsc28gaW4gcmV2ZXJzZSBvcmRlci5cbiAgICpcbiAgICogSWYgbm90LCB0aGUgbmV4dCB0b2tlbiB3aWxsIGJlIHJldHVybmVkIHdpdGhvdXQgcmVtb3ZpbmcgaXRcbiAgICogZnJvbSB0aGUgc3RhY2suICBUaGlzIGNhc2UgY2FuIGJlIGRldGVjdGVkIGJ5IGEgYFRva2VuYCByZXR1cm4gdmFsdWVcbiAgICogaW5zdGVhZCBvZiBhbiBgQXJyYXlgIHJldHVybiB2YWx1ZS5cbiAgICpcbiAgICogSW4gZWl0aGVyIGNhc2UsIHRoZSBuZXh0IHRva2VuIHdpbGwgYmUgb24gdGhlIHRvcCBvZiB0aGUgc3RhY2ssXG4gICAqIG9yIHRoZSBzdGFjayB3aWxsIGJlIGVtcHR5LlxuICAgKlxuICAgKiBVc2VkIHRvIGltcGxlbWVudCBgZXhwYW5kQWZ0ZXJGdXR1cmVgIGFuZCBgZXhwYW5kTmV4dFRva2VuYC5cbiAgICpcbiAgICogQXQgdGhlIG1vbWVudCwgbWFjcm8gZXhwYW5zaW9uIGRvZXNuJ3QgaGFuZGxlIGRlbGltaXRlZCBtYWNyb3MsXG4gICAqIGkuZS4gdGhpbmdzIGxpa2UgdGhvc2UgZGVmaW5lZCBieSBcXGRlZlxcZm9vIzFcXGVuZHvigKZ9LlxuICAgKiBTZWUgdGhlIFRlWCBib29rIHBhZ2UgMjAyZmYuIGZvciBkZXRhaWxzIG9uIGhvdyB0aG9zZSBzaG91bGQgYmVoYXZlLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5leHBhbmRPbmNlID0gZnVuY3Rpb24gZXhwYW5kT25jZSgpIHtcbiAgICB2YXIgdG9wVG9rZW4gPSB0aGlzLnBvcFRva2VuKCk7XG4gICAgdmFyIG5hbWUgPSB0b3BUb2tlbi50ZXh0O1xuXG4gICAgdmFyIGV4cGFuc2lvbiA9IHRoaXMuX2dldEV4cGFuc2lvbihuYW1lKTtcblxuICAgIGlmIChleHBhbnNpb24gPT0gbnVsbCkge1xuICAgICAgLy8gbWFpbmx5IGNoZWNraW5nIGZvciB1bmRlZmluZWQgaGVyZVxuICAgICAgLy8gRnVsbHkgZXhwYW5kZWRcbiAgICAgIHRoaXMucHVzaFRva2VuKHRvcFRva2VuKTtcbiAgICAgIHJldHVybiB0b3BUb2tlbjtcbiAgICB9XG5cbiAgICB0aGlzLmV4cGFuc2lvbkNvdW50Kys7XG5cbiAgICBpZiAodGhpcy5leHBhbnNpb25Db3VudCA+IHRoaXMuc2V0dGluZ3MubWF4RXhwYW5kKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJUb28gbWFueSBleHBhbnNpb25zOiBpbmZpbml0ZSBsb29wIG9yIFwiICsgXCJuZWVkIHRvIGluY3JlYXNlIG1heEV4cGFuZCBzZXR0aW5nXCIpO1xuICAgIH1cblxuICAgIHZhciB0b2tlbnMgPSBleHBhbnNpb24udG9rZW5zO1xuXG4gICAgaWYgKGV4cGFuc2lvbi5udW1BcmdzKSB7XG4gICAgICB2YXIgYXJncyA9IHRoaXMuY29uc3VtZUFyZ3MoZXhwYW5zaW9uLm51bUFyZ3MpOyAvLyBwYXN0ZSBhcmd1bWVudHMgaW4gcGxhY2Ugb2YgdGhlIHBsYWNlaG9sZGVyc1xuXG4gICAgICB0b2tlbnMgPSB0b2tlbnMuc2xpY2UoKTsgLy8gbWFrZSBhIHNoYWxsb3cgY29weVxuXG4gICAgICBmb3IgKHZhciBpID0gdG9rZW5zLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciB0b2sgPSB0b2tlbnNbaV07XG5cbiAgICAgICAgaWYgKHRvay50ZXh0ID09PSBcIiNcIikge1xuICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJJbmNvbXBsZXRlIHBsYWNlaG9sZGVyIGF0IGVuZCBvZiBtYWNybyBib2R5XCIsIHRvayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdG9rID0gdG9rZW5zWy0taV07IC8vIG5leHQgdG9rZW4gb24gc3RhY2tcblxuICAgICAgICAgIGlmICh0b2sudGV4dCA9PT0gXCIjXCIpIHtcbiAgICAgICAgICAgIC8vICMjIOKGkiAjXG4gICAgICAgICAgICB0b2tlbnMuc3BsaWNlKGkgKyAxLCAxKTsgLy8gZHJvcCBmaXJzdCAjXG4gICAgICAgICAgfSBlbHNlIGlmICgvXlsxLTldJC8udGVzdCh0b2sudGV4dCkpIHtcbiAgICAgICAgICAgIHZhciBfdG9rZW5zO1xuXG4gICAgICAgICAgICAvLyByZXBsYWNlIHRoZSBwbGFjZWhvbGRlciB3aXRoIHRoZSBpbmRpY2F0ZWQgYXJndW1lbnRcbiAgICAgICAgICAgIChfdG9rZW5zID0gdG9rZW5zKS5zcGxpY2UuYXBwbHkoX3Rva2VucywgW2ksIDJdLmNvbmNhdChhcmdzWyt0b2sudGV4dCAtIDFdKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIk5vdCBhIHZhbGlkIGFyZ3VtZW50IG51bWJlclwiLCB0b2spO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gQ29uY2F0ZW5hdGUgZXhwYW5zaW9uIG9udG8gdG9wIG9mIHN0YWNrLlxuXG5cbiAgICB0aGlzLnB1c2hUb2tlbnModG9rZW5zKTtcbiAgICByZXR1cm4gdG9rZW5zO1xuICB9XG4gIC8qKlxuICAgKiBFeHBhbmQgdGhlIG5leHQgdG9rZW4gb25seSBvbmNlIChpZiBwb3NzaWJsZSksIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZ1xuICAgKiB0b3AgdG9rZW4gb24gdGhlIHN0YWNrICh3aXRob3V0IHJlbW92aW5nIGFueXRoaW5nIGZyb20gdGhlIHN0YWNrKS5cbiAgICogU2ltaWxhciBpbiBiZWhhdmlvciB0byBUZVgncyBgXFxleHBhbmRhZnRlclxcZnV0dXJlbGV0YC5cbiAgICogRXF1aXZhbGVudCB0byBleHBhbmRPbmNlKCkgZm9sbG93ZWQgYnkgZnV0dXJlKCkuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmV4cGFuZEFmdGVyRnV0dXJlID0gZnVuY3Rpb24gZXhwYW5kQWZ0ZXJGdXR1cmUoKSB7XG4gICAgdGhpcy5leHBhbmRPbmNlKCk7XG4gICAgcmV0dXJuIHRoaXMuZnV0dXJlKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGV4cGFuZCBmaXJzdCB0b2tlbiwgdGhlbiByZXR1cm4gZmlyc3Qgbm9uLWV4cGFuZGFibGUgdG9rZW4uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmV4cGFuZE5leHRUb2tlbiA9IGZ1bmN0aW9uIGV4cGFuZE5leHRUb2tlbigpIHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICB2YXIgZXhwYW5kZWQgPSB0aGlzLmV4cGFuZE9uY2UoKTsgLy8gZXhwYW5kT25jZSByZXR1cm5zIFRva2VuIGlmIGFuZCBvbmx5IGlmIGl0J3MgZnVsbHkgZXhwYW5kZWQuXG5cbiAgICAgIGlmIChleHBhbmRlZCBpbnN0YW5jZW9mIFRva2VuX1Rva2VuKSB7XG4gICAgICAgIC8vIFxccmVsYXggc3RvcHMgdGhlIGV4cGFuc2lvbiwgYnV0IHNob3VsZG4ndCBnZXQgcmV0dXJuZWQgKGFcbiAgICAgICAgLy8gbnVsbCByZXR1cm4gdmFsdWUgY291bGRuJ3QgZ2V0IGltcGxlbWVudGVkIGFzIGEgZnVuY3Rpb24pLlxuICAgICAgICBpZiAoZXhwYW5kZWQudGV4dCA9PT0gXCJcXFxccmVsYXhcIikge1xuICAgICAgICAgIHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3RhY2sucG9wKCk7IC8vID09PSBleHBhbmRlZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBGbG93IHVuYWJsZSB0byBmaWd1cmUgb3V0IHRoYXQgdGhpcyBwYXRod2F5IGlzIGltcG9zc2libGUuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzQ4MDhcblxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5yZWFjaGFibGVcbiAgfVxuICAvKipcbiAgICogRnVsbHkgZXhwYW5kIHRoZSBnaXZlbiBtYWNybyBuYW1lIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBsaXN0IG9mXG4gICAqIHRva2Vucywgb3IgcmV0dXJuIGB1bmRlZmluZWRgIGlmIG5vIHN1Y2ggbWFjcm8gaXMgZGVmaW5lZC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZXhwYW5kTWFjcm8gPSBmdW5jdGlvbiBleHBhbmRNYWNybyhuYW1lKSB7XG4gICAgaWYgKCF0aGlzLm1hY3Jvcy5nZXQobmFtZSkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IFtdO1xuICAgIHZhciBvbGRTdGFja0xlbmd0aCA9IHRoaXMuc3RhY2subGVuZ3RoO1xuICAgIHRoaXMucHVzaFRva2VuKG5ldyBUb2tlbl9Ub2tlbihuYW1lKSk7XG5cbiAgICB3aGlsZSAodGhpcy5zdGFjay5sZW5ndGggPiBvbGRTdGFja0xlbmd0aCkge1xuICAgICAgdmFyIGV4cGFuZGVkID0gdGhpcy5leHBhbmRPbmNlKCk7IC8vIGV4cGFuZE9uY2UgcmV0dXJucyBUb2tlbiBpZiBhbmQgb25seSBpZiBpdCdzIGZ1bGx5IGV4cGFuZGVkLlxuXG4gICAgICBpZiAoZXhwYW5kZWQgaW5zdGFuY2VvZiBUb2tlbl9Ub2tlbikge1xuICAgICAgICBvdXRwdXQucHVzaCh0aGlzLnN0YWNrLnBvcCgpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG4gIC8qKlxuICAgKiBGdWxseSBleHBhbmQgdGhlIGdpdmVuIG1hY3JvIG5hbWUgYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIGEgc3RyaW5nLFxuICAgKiBvciByZXR1cm4gYHVuZGVmaW5lZGAgaWYgbm8gc3VjaCBtYWNybyBpcyBkZWZpbmVkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5leHBhbmRNYWNyb0FzVGV4dCA9IGZ1bmN0aW9uIGV4cGFuZE1hY3JvQXNUZXh0KG5hbWUpIHtcbiAgICB2YXIgdG9rZW5zID0gdGhpcy5leHBhbmRNYWNybyhuYW1lKTtcblxuICAgIGlmICh0b2tlbnMpIHtcbiAgICAgIHJldHVybiB0b2tlbnMubWFwKGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICByZXR1cm4gdG9rZW4udGV4dDtcbiAgICAgIH0pLmpvaW4oXCJcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0b2tlbnM7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBleHBhbmRlZCBtYWNybyBhcyBhIHJldmVyc2VkIGFycmF5IG9mIHRva2VucyBhbmQgYSBtYWNyb1xuICAgKiBhcmd1bWVudCBjb3VudC4gIE9yIHJldHVybnMgYG51bGxgIGlmIG5vIHN1Y2ggbWFjcm8uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLl9nZXRFeHBhbnNpb24gPSBmdW5jdGlvbiBfZ2V0RXhwYW5zaW9uKG5hbWUpIHtcbiAgICB2YXIgZGVmaW5pdGlvbiA9IHRoaXMubWFjcm9zLmdldChuYW1lKTtcblxuICAgIGlmIChkZWZpbml0aW9uID09IG51bGwpIHtcbiAgICAgIC8vIG1haW5seSBjaGVja2luZyBmb3IgdW5kZWZpbmVkIGhlcmVcbiAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgIH1cblxuICAgIHZhciBleHBhbnNpb24gPSB0eXBlb2YgZGVmaW5pdGlvbiA9PT0gXCJmdW5jdGlvblwiID8gZGVmaW5pdGlvbih0aGlzKSA6IGRlZmluaXRpb247XG5cbiAgICBpZiAodHlwZW9mIGV4cGFuc2lvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdmFyIG51bUFyZ3MgPSAwO1xuXG4gICAgICBpZiAoZXhwYW5zaW9uLmluZGV4T2YoXCIjXCIpICE9PSAtMSkge1xuICAgICAgICB2YXIgc3RyaXBwZWQgPSBleHBhbnNpb24ucmVwbGFjZSgvIyMvZywgXCJcIik7XG5cbiAgICAgICAgd2hpbGUgKHN0cmlwcGVkLmluZGV4T2YoXCIjXCIgKyAobnVtQXJncyArIDEpKSAhPT0gLTEpIHtcbiAgICAgICAgICArK251bUFyZ3M7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGJvZHlMZXhlciA9IG5ldyBMZXhlcl9MZXhlcihleHBhbnNpb24sIHRoaXMuc2V0dGluZ3MpO1xuICAgICAgdmFyIHRva2VucyA9IFtdO1xuICAgICAgdmFyIHRvayA9IGJvZHlMZXhlci5sZXgoKTtcblxuICAgICAgd2hpbGUgKHRvay50ZXh0ICE9PSBcIkVPRlwiKSB7XG4gICAgICAgIHRva2Vucy5wdXNoKHRvayk7XG4gICAgICAgIHRvayA9IGJvZHlMZXhlci5sZXgoKTtcbiAgICAgIH1cblxuICAgICAgdG9rZW5zLnJldmVyc2UoKTsgLy8gdG8gZml0IGluIHdpdGggc3RhY2sgdXNpbmcgcHVzaCBhbmQgcG9wXG5cbiAgICAgIHZhciBleHBhbmRlZCA9IHtcbiAgICAgICAgdG9rZW5zOiB0b2tlbnMsXG4gICAgICAgIG51bUFyZ3M6IG51bUFyZ3NcbiAgICAgIH07XG4gICAgICByZXR1cm4gZXhwYW5kZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cGFuc2lvbjtcbiAgfVxuICAvKipcbiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgYSBjb21tYW5kIGlzIGN1cnJlbnRseSBcImRlZmluZWRcIiAoaGFzIHNvbWVcbiAgICogZnVuY3Rpb25hbGl0eSksIG1lYW5pbmcgdGhhdCBpdCdzIGEgbWFjcm8gKGluIHRoZSBjdXJyZW50IGdyb3VwKSxcbiAgICogYSBmdW5jdGlvbiwgYSBzeW1ib2wsIG9yIG9uZSBvZiB0aGUgc3BlY2lhbCBjb21tYW5kcyBsaXN0ZWQgaW5cbiAgICogYGltcGxpY2l0Q29tbWFuZHNgLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5pc0RlZmluZWQgPSBmdW5jdGlvbiBpc0RlZmluZWQobmFtZSkge1xuICAgIHJldHVybiB0aGlzLm1hY3Jvcy5oYXMobmFtZSkgfHwgc3JjX2Z1bmN0aW9ucy5oYXNPd25Qcm9wZXJ0eShuYW1lKSB8fCBzcmNfc3ltYm9scy5tYXRoLmhhc093blByb3BlcnR5KG5hbWUpIHx8IHNyY19zeW1ib2xzLnRleHQuaGFzT3duUHJvcGVydHkobmFtZSkgfHwgaW1wbGljaXRDb21tYW5kcy5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcbiAgfTtcblxuICByZXR1cm4gTWFjcm9FeHBhbmRlcjtcbn0oKTtcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy91bmljb2RlQWNjZW50cy5qc1xuLy8gTWFwcGluZyBvZiBVbmljb2RlIGFjY2VudCBjaGFyYWN0ZXJzIHRvIHRoZWlyIExhVGVYIGVxdWl2YWxlbnQgaW4gdGV4dCBhbmRcbi8vIG1hdGggbW9kZSAod2hlbiB0aGV5IGV4aXN0KS5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHVuaWNvZGVBY2NlbnRzID0gKHtcbiAgXCJcXHUwMzAxXCI6IHtcbiAgICB0ZXh0OiBcIlxcXFwnXCIsXG4gICAgbWF0aDogJ1xcXFxhY3V0ZSdcbiAgfSxcbiAgXCJcXHUwMzAwXCI6IHtcbiAgICB0ZXh0OiAnXFxcXGAnLFxuICAgIG1hdGg6ICdcXFxcZ3JhdmUnXG4gIH0sXG4gIFwiXFx1MDMwOFwiOiB7XG4gICAgdGV4dDogJ1xcXFxcIicsXG4gICAgbWF0aDogJ1xcXFxkZG90J1xuICB9LFxuICBcIlxcdTAzMDNcIjoge1xuICAgIHRleHQ6ICdcXFxcficsXG4gICAgbWF0aDogJ1xcXFx0aWxkZSdcbiAgfSxcbiAgXCJcXHUwMzA0XCI6IHtcbiAgICB0ZXh0OiAnXFxcXD0nLFxuICAgIG1hdGg6ICdcXFxcYmFyJ1xuICB9LFxuICBcIlxcdTAzMDZcIjoge1xuICAgIHRleHQ6IFwiXFxcXHVcIixcbiAgICBtYXRoOiAnXFxcXGJyZXZlJ1xuICB9LFxuICBcIlxcdTAzMENcIjoge1xuICAgIHRleHQ6ICdcXFxcdicsXG4gICAgbWF0aDogJ1xcXFxjaGVjaydcbiAgfSxcbiAgXCJcXHUwMzAyXCI6IHtcbiAgICB0ZXh0OiAnXFxcXF4nLFxuICAgIG1hdGg6ICdcXFxcaGF0J1xuICB9LFxuICBcIlxcdTAzMDdcIjoge1xuICAgIHRleHQ6ICdcXFxcLicsXG4gICAgbWF0aDogJ1xcXFxkb3QnXG4gIH0sXG4gIFwiXFx1MDMwQVwiOiB7XG4gICAgdGV4dDogJ1xcXFxyJyxcbiAgICBtYXRoOiAnXFxcXG1hdGhyaW5nJ1xuICB9LFxuICBcIlxcdTAzMEJcIjoge1xuICAgIHRleHQ6ICdcXFxcSCdcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy91bmljb2RlU3ltYm9scy5qc1xuLy8gVGhpcyBmaWxlIGlzIEdFTkVSQVRFRCBieSB1bmljb2RlTWFrZS5qcy4gRE8gTk9UIE1PRElGWS5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHVuaWNvZGVTeW1ib2xzID0gKHtcbiAgXCJcXHhFMVwiOiBcImFcXHUwMzAxXCIsXG4gIC8vIMOhID0gXFwne2F9XG4gIFwiXFx4RTBcIjogXCJhXFx1MDMwMFwiLFxuICAvLyDDoCA9IFxcYHthfVxuICBcIlxceEU0XCI6IFwiYVxcdTAzMDhcIixcbiAgLy8gw6QgPSBcXFwie2F9XG4gIFwiXFx1MDFERlwiOiBcImFcXHUwMzA4XFx1MDMwNFwiLFxuICAvLyDHnyA9IFxcXCJcXD17YX1cbiAgXCJcXHhFM1wiOiBcImFcXHUwMzAzXCIsXG4gIC8vIMOjID0gXFx+e2F9XG4gIFwiXFx1MDEwMVwiOiBcImFcXHUwMzA0XCIsXG4gIC8vIMSBID0gXFw9e2F9XG4gIFwiXFx1MDEwM1wiOiBcImFcXHUwMzA2XCIsXG4gIC8vIMSDID0gXFx1e2F9XG4gIFwiXFx1MUVBRlwiOiBcImFcXHUwMzA2XFx1MDMwMVwiLFxuICAvLyDhuq8gPSBcXHVcXCd7YX1cbiAgXCJcXHUxRUIxXCI6IFwiYVxcdTAzMDZcXHUwMzAwXCIsXG4gIC8vIOG6sSA9IFxcdVxcYHthfVxuICBcIlxcdTFFQjVcIjogXCJhXFx1MDMwNlxcdTAzMDNcIixcbiAgLy8g4bq1ID0gXFx1XFx+e2F9XG4gIFwiXFx1MDFDRVwiOiBcImFcXHUwMzBDXCIsXG4gIC8vIMeOID0gXFx2e2F9XG4gIFwiXFx4RTJcIjogXCJhXFx1MDMwMlwiLFxuICAvLyDDoiA9IFxcXnthfVxuICBcIlxcdTFFQTVcIjogXCJhXFx1MDMwMlxcdTAzMDFcIixcbiAgLy8g4bqlID0gXFxeXFwne2F9XG4gIFwiXFx1MUVBN1wiOiBcImFcXHUwMzAyXFx1MDMwMFwiLFxuICAvLyDhuqcgPSBcXF5cXGB7YX1cbiAgXCJcXHUxRUFCXCI6IFwiYVxcdTAzMDJcXHUwMzAzXCIsXG4gIC8vIOG6qyA9IFxcXlxcfnthfVxuICBcIlxcdTAyMjdcIjogXCJhXFx1MDMwN1wiLFxuICAvLyDIpyA9IFxcLnthfVxuICBcIlxcdTAxRTFcIjogXCJhXFx1MDMwN1xcdTAzMDRcIixcbiAgLy8gx6EgPSBcXC5cXD17YX1cbiAgXCJcXHhFNVwiOiBcImFcXHUwMzBBXCIsXG4gIC8vIMOlID0gXFxye2F9XG4gIFwiXFx1MDFGQlwiOiBcImFcXHUwMzBBXFx1MDMwMVwiLFxuICAvLyDHuyA9IFxcclxcJ3thfVxuICBcIlxcdTFFMDNcIjogXCJiXFx1MDMwN1wiLFxuICAvLyDhuIMgPSBcXC57Yn1cbiAgXCJcXHUwMTA3XCI6IFwiY1xcdTAzMDFcIixcbiAgLy8gxIcgPSBcXCd7Y31cbiAgXCJcXHUwMTBEXCI6IFwiY1xcdTAzMENcIixcbiAgLy8gxI0gPSBcXHZ7Y31cbiAgXCJcXHUwMTA5XCI6IFwiY1xcdTAzMDJcIixcbiAgLy8gxIkgPSBcXF57Y31cbiAgXCJcXHUwMTBCXCI6IFwiY1xcdTAzMDdcIixcbiAgLy8gxIsgPSBcXC57Y31cbiAgXCJcXHUwMTBGXCI6IFwiZFxcdTAzMENcIixcbiAgLy8gxI8gPSBcXHZ7ZH1cbiAgXCJcXHUxRTBCXCI6IFwiZFxcdTAzMDdcIixcbiAgLy8g4biLID0gXFwue2R9XG4gIFwiXFx4RTlcIjogXCJlXFx1MDMwMVwiLFxuICAvLyDDqSA9IFxcJ3tlfVxuICBcIlxceEU4XCI6IFwiZVxcdTAzMDBcIixcbiAgLy8gw6ggPSBcXGB7ZX1cbiAgXCJcXHhFQlwiOiBcImVcXHUwMzA4XCIsXG4gIC8vIMOrID0gXFxcIntlfVxuICBcIlxcdTFFQkRcIjogXCJlXFx1MDMwM1wiLFxuICAvLyDhur0gPSBcXH57ZX1cbiAgXCJcXHUwMTEzXCI6IFwiZVxcdTAzMDRcIixcbiAgLy8gxJMgPSBcXD17ZX1cbiAgXCJcXHUxRTE3XCI6IFwiZVxcdTAzMDRcXHUwMzAxXCIsXG4gIC8vIOG4lyA9IFxcPVxcJ3tlfVxuICBcIlxcdTFFMTVcIjogXCJlXFx1MDMwNFxcdTAzMDBcIixcbiAgLy8g4biVID0gXFw9XFxge2V9XG4gIFwiXFx1MDExNVwiOiBcImVcXHUwMzA2XCIsXG4gIC8vIMSVID0gXFx1e2V9XG4gIFwiXFx1MDExQlwiOiBcImVcXHUwMzBDXCIsXG4gIC8vIMSbID0gXFx2e2V9XG4gIFwiXFx4RUFcIjogXCJlXFx1MDMwMlwiLFxuICAvLyDDqiA9IFxcXntlfVxuICBcIlxcdTFFQkZcIjogXCJlXFx1MDMwMlxcdTAzMDFcIixcbiAgLy8g4bq/ID0gXFxeXFwne2V9XG4gIFwiXFx1MUVDMVwiOiBcImVcXHUwMzAyXFx1MDMwMFwiLFxuICAvLyDhu4EgPSBcXF5cXGB7ZX1cbiAgXCJcXHUxRUM1XCI6IFwiZVxcdTAzMDJcXHUwMzAzXCIsXG4gIC8vIOG7hSA9IFxcXlxcfntlfVxuICBcIlxcdTAxMTdcIjogXCJlXFx1MDMwN1wiLFxuICAvLyDElyA9IFxcLntlfVxuICBcIlxcdTFFMUZcIjogXCJmXFx1MDMwN1wiLFxuICAvLyDhuJ8gPSBcXC57Zn1cbiAgXCJcXHUwMUY1XCI6IFwiZ1xcdTAzMDFcIixcbiAgLy8gx7UgPSBcXCd7Z31cbiAgXCJcXHUxRTIxXCI6IFwiZ1xcdTAzMDRcIixcbiAgLy8g4bihID0gXFw9e2d9XG4gIFwiXFx1MDExRlwiOiBcImdcXHUwMzA2XCIsXG4gIC8vIMSfID0gXFx1e2d9XG4gIFwiXFx1MDFFN1wiOiBcImdcXHUwMzBDXCIsXG4gIC8vIMenID0gXFx2e2d9XG4gIFwiXFx1MDExRFwiOiBcImdcXHUwMzAyXCIsXG4gIC8vIMSdID0gXFxee2d9XG4gIFwiXFx1MDEyMVwiOiBcImdcXHUwMzA3XCIsXG4gIC8vIMShID0gXFwue2d9XG4gIFwiXFx1MUUyN1wiOiBcImhcXHUwMzA4XCIsXG4gIC8vIOG4pyA9IFxcXCJ7aH1cbiAgXCJcXHUwMjFGXCI6IFwiaFxcdTAzMENcIixcbiAgLy8gyJ8gPSBcXHZ7aH1cbiAgXCJcXHUwMTI1XCI6IFwiaFxcdTAzMDJcIixcbiAgLy8gxKUgPSBcXF57aH1cbiAgXCJcXHUxRTIzXCI6IFwiaFxcdTAzMDdcIixcbiAgLy8g4bijID0gXFwue2h9XG4gIFwiXFx4RURcIjogXCJpXFx1MDMwMVwiLFxuICAvLyDDrSA9IFxcJ3tpfVxuICBcIlxceEVDXCI6IFwiaVxcdTAzMDBcIixcbiAgLy8gw6wgPSBcXGB7aX1cbiAgXCJcXHhFRlwiOiBcImlcXHUwMzA4XCIsXG4gIC8vIMOvID0gXFxcIntpfVxuICBcIlxcdTFFMkZcIjogXCJpXFx1MDMwOFxcdTAzMDFcIixcbiAgLy8g4bivID0gXFxcIlxcJ3tpfVxuICBcIlxcdTAxMjlcIjogXCJpXFx1MDMwM1wiLFxuICAvLyDEqSA9IFxcfntpfVxuICBcIlxcdTAxMkJcIjogXCJpXFx1MDMwNFwiLFxuICAvLyDEqyA9IFxcPXtpfVxuICBcIlxcdTAxMkRcIjogXCJpXFx1MDMwNlwiLFxuICAvLyDErSA9IFxcdXtpfVxuICBcIlxcdTAxRDBcIjogXCJpXFx1MDMwQ1wiLFxuICAvLyDHkCA9IFxcdntpfVxuICBcIlxceEVFXCI6IFwiaVxcdTAzMDJcIixcbiAgLy8gw64gPSBcXF57aX1cbiAgXCJcXHUwMUYwXCI6IFwialxcdTAzMENcIixcbiAgLy8gx7AgPSBcXHZ7an1cbiAgXCJcXHUwMTM1XCI6IFwialxcdTAzMDJcIixcbiAgLy8gxLUgPSBcXF57an1cbiAgXCJcXHUxRTMxXCI6IFwia1xcdTAzMDFcIixcbiAgLy8g4bixID0gXFwne2t9XG4gIFwiXFx1MDFFOVwiOiBcImtcXHUwMzBDXCIsXG4gIC8vIMepID0gXFx2e2t9XG4gIFwiXFx1MDEzQVwiOiBcImxcXHUwMzAxXCIsXG4gIC8vIMS6ID0gXFwne2x9XG4gIFwiXFx1MDEzRVwiOiBcImxcXHUwMzBDXCIsXG4gIC8vIMS+ID0gXFx2e2x9XG4gIFwiXFx1MUUzRlwiOiBcIm1cXHUwMzAxXCIsXG4gIC8vIOG4vyA9IFxcJ3ttfVxuICBcIlxcdTFFNDFcIjogXCJtXFx1MDMwN1wiLFxuICAvLyDhuYEgPSBcXC57bX1cbiAgXCJcXHUwMTQ0XCI6IFwiblxcdTAzMDFcIixcbiAgLy8gxYQgPSBcXCd7bn1cbiAgXCJcXHUwMUY5XCI6IFwiblxcdTAzMDBcIixcbiAgLy8gx7kgPSBcXGB7bn1cbiAgXCJcXHhGMVwiOiBcIm5cXHUwMzAzXCIsXG4gIC8vIMOxID0gXFx+e259XG4gIFwiXFx1MDE0OFwiOiBcIm5cXHUwMzBDXCIsXG4gIC8vIMWIID0gXFx2e259XG4gIFwiXFx1MUU0NVwiOiBcIm5cXHUwMzA3XCIsXG4gIC8vIOG5hSA9IFxcLntufVxuICBcIlxceEYzXCI6IFwib1xcdTAzMDFcIixcbiAgLy8gw7MgPSBcXCd7b31cbiAgXCJcXHhGMlwiOiBcIm9cXHUwMzAwXCIsXG4gIC8vIMOyID0gXFxge299XG4gIFwiXFx4RjZcIjogXCJvXFx1MDMwOFwiLFxuICAvLyDDtiA9IFxcXCJ7b31cbiAgXCJcXHUwMjJCXCI6IFwib1xcdTAzMDhcXHUwMzA0XCIsXG4gIC8vIMirID0gXFxcIlxcPXtvfVxuICBcIlxceEY1XCI6IFwib1xcdTAzMDNcIixcbiAgLy8gw7UgPSBcXH57b31cbiAgXCJcXHUxRTREXCI6IFwib1xcdTAzMDNcXHUwMzAxXCIsXG4gIC8vIOG5jSA9IFxcflxcJ3tvfVxuICBcIlxcdTFFNEZcIjogXCJvXFx1MDMwM1xcdTAzMDhcIixcbiAgLy8g4bmPID0gXFx+XFxcIntvfVxuICBcIlxcdTAyMkRcIjogXCJvXFx1MDMwM1xcdTAzMDRcIixcbiAgLy8gyK0gPSBcXH5cXD17b31cbiAgXCJcXHUwMTREXCI6IFwib1xcdTAzMDRcIixcbiAgLy8gxY0gPSBcXD17b31cbiAgXCJcXHUxRTUzXCI6IFwib1xcdTAzMDRcXHUwMzAxXCIsXG4gIC8vIOG5kyA9IFxcPVxcJ3tvfVxuICBcIlxcdTFFNTFcIjogXCJvXFx1MDMwNFxcdTAzMDBcIixcbiAgLy8g4bmRID0gXFw9XFxge299XG4gIFwiXFx1MDE0RlwiOiBcIm9cXHUwMzA2XCIsXG4gIC8vIMWPID0gXFx1e299XG4gIFwiXFx1MDFEMlwiOiBcIm9cXHUwMzBDXCIsXG4gIC8vIMeSID0gXFx2e299XG4gIFwiXFx4RjRcIjogXCJvXFx1MDMwMlwiLFxuICAvLyDDtCA9IFxcXntvfVxuICBcIlxcdTFFRDFcIjogXCJvXFx1MDMwMlxcdTAzMDFcIixcbiAgLy8g4buRID0gXFxeXFwne299XG4gIFwiXFx1MUVEM1wiOiBcIm9cXHUwMzAyXFx1MDMwMFwiLFxuICAvLyDhu5MgPSBcXF5cXGB7b31cbiAgXCJcXHUxRUQ3XCI6IFwib1xcdTAzMDJcXHUwMzAzXCIsXG4gIC8vIOG7lyA9IFxcXlxcfntvfVxuICBcIlxcdTAyMkZcIjogXCJvXFx1MDMwN1wiLFxuICAvLyDIryA9IFxcLntvfVxuICBcIlxcdTAyMzFcIjogXCJvXFx1MDMwN1xcdTAzMDRcIixcbiAgLy8gyLEgPSBcXC5cXD17b31cbiAgXCJcXHUwMTUxXCI6IFwib1xcdTAzMEJcIixcbiAgLy8gxZEgPSBcXEh7b31cbiAgXCJcXHUxRTU1XCI6IFwicFxcdTAzMDFcIixcbiAgLy8g4bmVID0gXFwne3B9XG4gIFwiXFx1MUU1N1wiOiBcInBcXHUwMzA3XCIsXG4gIC8vIOG5lyA9IFxcLntwfVxuICBcIlxcdTAxNTVcIjogXCJyXFx1MDMwMVwiLFxuICAvLyDFlSA9IFxcJ3tyfVxuICBcIlxcdTAxNTlcIjogXCJyXFx1MDMwQ1wiLFxuICAvLyDFmSA9IFxcdntyfVxuICBcIlxcdTFFNTlcIjogXCJyXFx1MDMwN1wiLFxuICAvLyDhuZkgPSBcXC57cn1cbiAgXCJcXHUwMTVCXCI6IFwic1xcdTAzMDFcIixcbiAgLy8gxZsgPSBcXCd7c31cbiAgXCJcXHUxRTY1XCI6IFwic1xcdTAzMDFcXHUwMzA3XCIsXG4gIC8vIOG5pSA9IFxcJ1xcLntzfVxuICBcIlxcdTAxNjFcIjogXCJzXFx1MDMwQ1wiLFxuICAvLyDFoSA9IFxcdntzfVxuICBcIlxcdTFFNjdcIjogXCJzXFx1MDMwQ1xcdTAzMDdcIixcbiAgLy8g4bmnID0gXFx2XFwue3N9XG4gIFwiXFx1MDE1RFwiOiBcInNcXHUwMzAyXCIsXG4gIC8vIMWdID0gXFxee3N9XG4gIFwiXFx1MUU2MVwiOiBcInNcXHUwMzA3XCIsXG4gIC8vIOG5oSA9IFxcLntzfVxuICBcIlxcdTFFOTdcIjogXCJ0XFx1MDMwOFwiLFxuICAvLyDhupcgPSBcXFwie3R9XG4gIFwiXFx1MDE2NVwiOiBcInRcXHUwMzBDXCIsXG4gIC8vIMWlID0gXFx2e3R9XG4gIFwiXFx1MUU2QlwiOiBcInRcXHUwMzA3XCIsXG4gIC8vIOG5qyA9IFxcLnt0fVxuICBcIlxceEZBXCI6IFwidVxcdTAzMDFcIixcbiAgLy8gw7ogPSBcXCd7dX1cbiAgXCJcXHhGOVwiOiBcInVcXHUwMzAwXCIsXG4gIC8vIMO5ID0gXFxge3V9XG4gIFwiXFx4RkNcIjogXCJ1XFx1MDMwOFwiLFxuICAvLyDDvCA9IFxcXCJ7dX1cbiAgXCJcXHUwMUQ4XCI6IFwidVxcdTAzMDhcXHUwMzAxXCIsXG4gIC8vIMeYID0gXFxcIlxcJ3t1fVxuICBcIlxcdTAxRENcIjogXCJ1XFx1MDMwOFxcdTAzMDBcIixcbiAgLy8gx5wgPSBcXFwiXFxge3V9XG4gIFwiXFx1MDFENlwiOiBcInVcXHUwMzA4XFx1MDMwNFwiLFxuICAvLyDHliA9IFxcXCJcXD17dX1cbiAgXCJcXHUwMURBXCI6IFwidVxcdTAzMDhcXHUwMzBDXCIsXG4gIC8vIMeaID0gXFxcIlxcdnt1fVxuICBcIlxcdTAxNjlcIjogXCJ1XFx1MDMwM1wiLFxuICAvLyDFqSA9IFxcfnt1fVxuICBcIlxcdTFFNzlcIjogXCJ1XFx1MDMwM1xcdTAzMDFcIixcbiAgLy8g4bm5ID0gXFx+XFwne3V9XG4gIFwiXFx1MDE2QlwiOiBcInVcXHUwMzA0XCIsXG4gIC8vIMWrID0gXFw9e3V9XG4gIFwiXFx1MUU3QlwiOiBcInVcXHUwMzA0XFx1MDMwOFwiLFxuICAvLyDhubsgPSBcXD1cXFwie3V9XG4gIFwiXFx1MDE2RFwiOiBcInVcXHUwMzA2XCIsXG4gIC8vIMWtID0gXFx1e3V9XG4gIFwiXFx1MDFENFwiOiBcInVcXHUwMzBDXCIsXG4gIC8vIMeUID0gXFx2e3V9XG4gIFwiXFx4RkJcIjogXCJ1XFx1MDMwMlwiLFxuICAvLyDDuyA9IFxcXnt1fVxuICBcIlxcdTAxNkZcIjogXCJ1XFx1MDMwQVwiLFxuICAvLyDFryA9IFxccnt1fVxuICBcIlxcdTAxNzFcIjogXCJ1XFx1MDMwQlwiLFxuICAvLyDFsSA9IFxcSHt1fVxuICBcIlxcdTFFN0RcIjogXCJ2XFx1MDMwM1wiLFxuICAvLyDhub0gPSBcXH57dn1cbiAgXCJcXHUxRTgzXCI6IFwid1xcdTAzMDFcIixcbiAgLy8g4bqDID0gXFwne3d9XG4gIFwiXFx1MUU4MVwiOiBcIndcXHUwMzAwXCIsXG4gIC8vIOG6gSA9IFxcYHt3fVxuICBcIlxcdTFFODVcIjogXCJ3XFx1MDMwOFwiLFxuICAvLyDhuoUgPSBcXFwie3d9XG4gIFwiXFx1MDE3NVwiOiBcIndcXHUwMzAyXCIsXG4gIC8vIMW1ID0gXFxee3d9XG4gIFwiXFx1MUU4N1wiOiBcIndcXHUwMzA3XCIsXG4gIC8vIOG6hyA9IFxcLnt3fVxuICBcIlxcdTFFOThcIjogXCJ3XFx1MDMwQVwiLFxuICAvLyDhupggPSBcXHJ7d31cbiAgXCJcXHUxRThEXCI6IFwieFxcdTAzMDhcIixcbiAgLy8g4bqNID0gXFxcInt4fVxuICBcIlxcdTFFOEJcIjogXCJ4XFx1MDMwN1wiLFxuICAvLyDhuosgPSBcXC57eH1cbiAgXCJcXHhGRFwiOiBcInlcXHUwMzAxXCIsXG4gIC8vIMO9ID0gXFwne3l9XG4gIFwiXFx1MUVGM1wiOiBcInlcXHUwMzAwXCIsXG4gIC8vIOG7syA9IFxcYHt5fVxuICBcIlxceEZGXCI6IFwieVxcdTAzMDhcIixcbiAgLy8gw78gPSBcXFwie3l9XG4gIFwiXFx1MUVGOVwiOiBcInlcXHUwMzAzXCIsXG4gIC8vIOG7uSA9IFxcfnt5fVxuICBcIlxcdTAyMzNcIjogXCJ5XFx1MDMwNFwiLFxuICAvLyDIsyA9IFxcPXt5fVxuICBcIlxcdTAxNzdcIjogXCJ5XFx1MDMwMlwiLFxuICAvLyDFtyA9IFxcXnt5fVxuICBcIlxcdTFFOEZcIjogXCJ5XFx1MDMwN1wiLFxuICAvLyDhuo8gPSBcXC57eX1cbiAgXCJcXHUxRTk5XCI6IFwieVxcdTAzMEFcIixcbiAgLy8g4bqZID0gXFxye3l9XG4gIFwiXFx1MDE3QVwiOiBcInpcXHUwMzAxXCIsXG4gIC8vIMW6ID0gXFwne3p9XG4gIFwiXFx1MDE3RVwiOiBcInpcXHUwMzBDXCIsXG4gIC8vIMW+ID0gXFx2e3p9XG4gIFwiXFx1MUU5MVwiOiBcInpcXHUwMzAyXCIsXG4gIC8vIOG6kSA9IFxcXnt6fVxuICBcIlxcdTAxN0NcIjogXCJ6XFx1MDMwN1wiLFxuICAvLyDFvCA9IFxcLnt6fVxuICBcIlxceEMxXCI6IFwiQVxcdTAzMDFcIixcbiAgLy8gw4EgPSBcXCd7QX1cbiAgXCJcXHhDMFwiOiBcIkFcXHUwMzAwXCIsXG4gIC8vIMOAID0gXFxge0F9XG4gIFwiXFx4QzRcIjogXCJBXFx1MDMwOFwiLFxuICAvLyDDhCA9IFxcXCJ7QX1cbiAgXCJcXHUwMURFXCI6IFwiQVxcdTAzMDhcXHUwMzA0XCIsXG4gIC8vIMeeID0gXFxcIlxcPXtBfVxuICBcIlxceEMzXCI6IFwiQVxcdTAzMDNcIixcbiAgLy8gw4MgPSBcXH57QX1cbiAgXCJcXHUwMTAwXCI6IFwiQVxcdTAzMDRcIixcbiAgLy8gxIAgPSBcXD17QX1cbiAgXCJcXHUwMTAyXCI6IFwiQVxcdTAzMDZcIixcbiAgLy8gxIIgPSBcXHV7QX1cbiAgXCJcXHUxRUFFXCI6IFwiQVxcdTAzMDZcXHUwMzAxXCIsXG4gIC8vIOG6riA9IFxcdVxcJ3tBfVxuICBcIlxcdTFFQjBcIjogXCJBXFx1MDMwNlxcdTAzMDBcIixcbiAgLy8g4bqwID0gXFx1XFxge0F9XG4gIFwiXFx1MUVCNFwiOiBcIkFcXHUwMzA2XFx1MDMwM1wiLFxuICAvLyDhurQgPSBcXHVcXH57QX1cbiAgXCJcXHUwMUNEXCI6IFwiQVxcdTAzMENcIixcbiAgLy8gx40gPSBcXHZ7QX1cbiAgXCJcXHhDMlwiOiBcIkFcXHUwMzAyXCIsXG4gIC8vIMOCID0gXFxee0F9XG4gIFwiXFx1MUVBNFwiOiBcIkFcXHUwMzAyXFx1MDMwMVwiLFxuICAvLyDhuqQgPSBcXF5cXCd7QX1cbiAgXCJcXHUxRUE2XCI6IFwiQVxcdTAzMDJcXHUwMzAwXCIsXG4gIC8vIOG6piA9IFxcXlxcYHtBfVxuICBcIlxcdTFFQUFcIjogXCJBXFx1MDMwMlxcdTAzMDNcIixcbiAgLy8g4bqqID0gXFxeXFx+e0F9XG4gIFwiXFx1MDIyNlwiOiBcIkFcXHUwMzA3XCIsXG4gIC8vIMimID0gXFwue0F9XG4gIFwiXFx1MDFFMFwiOiBcIkFcXHUwMzA3XFx1MDMwNFwiLFxuICAvLyDHoCA9IFxcLlxcPXtBfVxuICBcIlxceEM1XCI6IFwiQVxcdTAzMEFcIixcbiAgLy8gw4UgPSBcXHJ7QX1cbiAgXCJcXHUwMUZBXCI6IFwiQVxcdTAzMEFcXHUwMzAxXCIsXG4gIC8vIMe6ID0gXFxyXFwne0F9XG4gIFwiXFx1MUUwMlwiOiBcIkJcXHUwMzA3XCIsXG4gIC8vIOG4giA9IFxcLntCfVxuICBcIlxcdTAxMDZcIjogXCJDXFx1MDMwMVwiLFxuICAvLyDEhiA9IFxcJ3tDfVxuICBcIlxcdTAxMENcIjogXCJDXFx1MDMwQ1wiLFxuICAvLyDEjCA9IFxcdntDfVxuICBcIlxcdTAxMDhcIjogXCJDXFx1MDMwMlwiLFxuICAvLyDEiCA9IFxcXntDfVxuICBcIlxcdTAxMEFcIjogXCJDXFx1MDMwN1wiLFxuICAvLyDEiiA9IFxcLntDfVxuICBcIlxcdTAxMEVcIjogXCJEXFx1MDMwQ1wiLFxuICAvLyDEjiA9IFxcdntEfVxuICBcIlxcdTFFMEFcIjogXCJEXFx1MDMwN1wiLFxuICAvLyDhuIogPSBcXC57RH1cbiAgXCJcXHhDOVwiOiBcIkVcXHUwMzAxXCIsXG4gIC8vIMOJID0gXFwne0V9XG4gIFwiXFx4QzhcIjogXCJFXFx1MDMwMFwiLFxuICAvLyDDiCA9IFxcYHtFfVxuICBcIlxceENCXCI6IFwiRVxcdTAzMDhcIixcbiAgLy8gw4sgPSBcXFwie0V9XG4gIFwiXFx1MUVCQ1wiOiBcIkVcXHUwMzAzXCIsXG4gIC8vIOG6vCA9IFxcfntFfVxuICBcIlxcdTAxMTJcIjogXCJFXFx1MDMwNFwiLFxuICAvLyDEkiA9IFxcPXtFfVxuICBcIlxcdTFFMTZcIjogXCJFXFx1MDMwNFxcdTAzMDFcIixcbiAgLy8g4biWID0gXFw9XFwne0V9XG4gIFwiXFx1MUUxNFwiOiBcIkVcXHUwMzA0XFx1MDMwMFwiLFxuICAvLyDhuJQgPSBcXD1cXGB7RX1cbiAgXCJcXHUwMTE0XCI6IFwiRVxcdTAzMDZcIixcbiAgLy8gxJQgPSBcXHV7RX1cbiAgXCJcXHUwMTFBXCI6IFwiRVxcdTAzMENcIixcbiAgLy8gxJogPSBcXHZ7RX1cbiAgXCJcXHhDQVwiOiBcIkVcXHUwMzAyXCIsXG4gIC8vIMOKID0gXFxee0V9XG4gIFwiXFx1MUVCRVwiOiBcIkVcXHUwMzAyXFx1MDMwMVwiLFxuICAvLyDhur4gPSBcXF5cXCd7RX1cbiAgXCJcXHUxRUMwXCI6IFwiRVxcdTAzMDJcXHUwMzAwXCIsXG4gIC8vIOG7gCA9IFxcXlxcYHtFfVxuICBcIlxcdTFFQzRcIjogXCJFXFx1MDMwMlxcdTAzMDNcIixcbiAgLy8g4buEID0gXFxeXFx+e0V9XG4gIFwiXFx1MDExNlwiOiBcIkVcXHUwMzA3XCIsXG4gIC8vIMSWID0gXFwue0V9XG4gIFwiXFx1MUUxRVwiOiBcIkZcXHUwMzA3XCIsXG4gIC8vIOG4niA9IFxcLntGfVxuICBcIlxcdTAxRjRcIjogXCJHXFx1MDMwMVwiLFxuICAvLyDHtCA9IFxcJ3tHfVxuICBcIlxcdTFFMjBcIjogXCJHXFx1MDMwNFwiLFxuICAvLyDhuKAgPSBcXD17R31cbiAgXCJcXHUwMTFFXCI6IFwiR1xcdTAzMDZcIixcbiAgLy8gxJ4gPSBcXHV7R31cbiAgXCJcXHUwMUU2XCI6IFwiR1xcdTAzMENcIixcbiAgLy8gx6YgPSBcXHZ7R31cbiAgXCJcXHUwMTFDXCI6IFwiR1xcdTAzMDJcIixcbiAgLy8gxJwgPSBcXF57R31cbiAgXCJcXHUwMTIwXCI6IFwiR1xcdTAzMDdcIixcbiAgLy8gxKAgPSBcXC57R31cbiAgXCJcXHUxRTI2XCI6IFwiSFxcdTAzMDhcIixcbiAgLy8g4bimID0gXFxcIntIfVxuICBcIlxcdTAyMUVcIjogXCJIXFx1MDMwQ1wiLFxuICAvLyDIniA9IFxcdntIfVxuICBcIlxcdTAxMjRcIjogXCJIXFx1MDMwMlwiLFxuICAvLyDEpCA9IFxcXntIfVxuICBcIlxcdTFFMjJcIjogXCJIXFx1MDMwN1wiLFxuICAvLyDhuKIgPSBcXC57SH1cbiAgXCJcXHhDRFwiOiBcIklcXHUwMzAxXCIsXG4gIC8vIMONID0gXFwne0l9XG4gIFwiXFx4Q0NcIjogXCJJXFx1MDMwMFwiLFxuICAvLyDDjCA9IFxcYHtJfVxuICBcIlxceENGXCI6IFwiSVxcdTAzMDhcIixcbiAgLy8gw48gPSBcXFwie0l9XG4gIFwiXFx1MUUyRVwiOiBcIklcXHUwMzA4XFx1MDMwMVwiLFxuICAvLyDhuK4gPSBcXFwiXFwne0l9XG4gIFwiXFx1MDEyOFwiOiBcIklcXHUwMzAzXCIsXG4gIC8vIMSoID0gXFx+e0l9XG4gIFwiXFx1MDEyQVwiOiBcIklcXHUwMzA0XCIsXG4gIC8vIMSqID0gXFw9e0l9XG4gIFwiXFx1MDEyQ1wiOiBcIklcXHUwMzA2XCIsXG4gIC8vIMSsID0gXFx1e0l9XG4gIFwiXFx1MDFDRlwiOiBcIklcXHUwMzBDXCIsXG4gIC8vIMePID0gXFx2e0l9XG4gIFwiXFx4Q0VcIjogXCJJXFx1MDMwMlwiLFxuICAvLyDDjiA9IFxcXntJfVxuICBcIlxcdTAxMzBcIjogXCJJXFx1MDMwN1wiLFxuICAvLyDEsCA9IFxcLntJfVxuICBcIlxcdTAxMzRcIjogXCJKXFx1MDMwMlwiLFxuICAvLyDEtCA9IFxcXntKfVxuICBcIlxcdTFFMzBcIjogXCJLXFx1MDMwMVwiLFxuICAvLyDhuLAgPSBcXCd7S31cbiAgXCJcXHUwMUU4XCI6IFwiS1xcdTAzMENcIixcbiAgLy8gx6ggPSBcXHZ7S31cbiAgXCJcXHUwMTM5XCI6IFwiTFxcdTAzMDFcIixcbiAgLy8gxLkgPSBcXCd7TH1cbiAgXCJcXHUwMTNEXCI6IFwiTFxcdTAzMENcIixcbiAgLy8gxL0gPSBcXHZ7TH1cbiAgXCJcXHUxRTNFXCI6IFwiTVxcdTAzMDFcIixcbiAgLy8g4bi+ID0gXFwne019XG4gIFwiXFx1MUU0MFwiOiBcIk1cXHUwMzA3XCIsXG4gIC8vIOG5gCA9IFxcLntNfVxuICBcIlxcdTAxNDNcIjogXCJOXFx1MDMwMVwiLFxuICAvLyDFgyA9IFxcJ3tOfVxuICBcIlxcdTAxRjhcIjogXCJOXFx1MDMwMFwiLFxuICAvLyDHuCA9IFxcYHtOfVxuICBcIlxceEQxXCI6IFwiTlxcdTAzMDNcIixcbiAgLy8gw5EgPSBcXH57Tn1cbiAgXCJcXHUwMTQ3XCI6IFwiTlxcdTAzMENcIixcbiAgLy8gxYcgPSBcXHZ7Tn1cbiAgXCJcXHUxRTQ0XCI6IFwiTlxcdTAzMDdcIixcbiAgLy8g4bmEID0gXFwue059XG4gIFwiXFx4RDNcIjogXCJPXFx1MDMwMVwiLFxuICAvLyDDkyA9IFxcJ3tPfVxuICBcIlxceEQyXCI6IFwiT1xcdTAzMDBcIixcbiAgLy8gw5IgPSBcXGB7T31cbiAgXCJcXHhENlwiOiBcIk9cXHUwMzA4XCIsXG4gIC8vIMOWID0gXFxcIntPfVxuICBcIlxcdTAyMkFcIjogXCJPXFx1MDMwOFxcdTAzMDRcIixcbiAgLy8gyKogPSBcXFwiXFw9e099XG4gIFwiXFx4RDVcIjogXCJPXFx1MDMwM1wiLFxuICAvLyDDlSA9IFxcfntPfVxuICBcIlxcdTFFNENcIjogXCJPXFx1MDMwM1xcdTAzMDFcIixcbiAgLy8g4bmMID0gXFx+XFwne099XG4gIFwiXFx1MUU0RVwiOiBcIk9cXHUwMzAzXFx1MDMwOFwiLFxuICAvLyDhuY4gPSBcXH5cXFwie099XG4gIFwiXFx1MDIyQ1wiOiBcIk9cXHUwMzAzXFx1MDMwNFwiLFxuICAvLyDIrCA9IFxcflxcPXtPfVxuICBcIlxcdTAxNENcIjogXCJPXFx1MDMwNFwiLFxuICAvLyDFjCA9IFxcPXtPfVxuICBcIlxcdTFFNTJcIjogXCJPXFx1MDMwNFxcdTAzMDFcIixcbiAgLy8g4bmSID0gXFw9XFwne099XG4gIFwiXFx1MUU1MFwiOiBcIk9cXHUwMzA0XFx1MDMwMFwiLFxuICAvLyDhuZAgPSBcXD1cXGB7T31cbiAgXCJcXHUwMTRFXCI6IFwiT1xcdTAzMDZcIixcbiAgLy8gxY4gPSBcXHV7T31cbiAgXCJcXHUwMUQxXCI6IFwiT1xcdTAzMENcIixcbiAgLy8gx5EgPSBcXHZ7T31cbiAgXCJcXHhENFwiOiBcIk9cXHUwMzAyXCIsXG4gIC8vIMOUID0gXFxee099XG4gIFwiXFx1MUVEMFwiOiBcIk9cXHUwMzAyXFx1MDMwMVwiLFxuICAvLyDhu5AgPSBcXF5cXCd7T31cbiAgXCJcXHUxRUQyXCI6IFwiT1xcdTAzMDJcXHUwMzAwXCIsXG4gIC8vIOG7kiA9IFxcXlxcYHtPfVxuICBcIlxcdTFFRDZcIjogXCJPXFx1MDMwMlxcdTAzMDNcIixcbiAgLy8g4buWID0gXFxeXFx+e099XG4gIFwiXFx1MDIyRVwiOiBcIk9cXHUwMzA3XCIsXG4gIC8vIMiuID0gXFwue099XG4gIFwiXFx1MDIzMFwiOiBcIk9cXHUwMzA3XFx1MDMwNFwiLFxuICAvLyDIsCA9IFxcLlxcPXtPfVxuICBcIlxcdTAxNTBcIjogXCJPXFx1MDMwQlwiLFxuICAvLyDFkCA9IFxcSHtPfVxuICBcIlxcdTFFNTRcIjogXCJQXFx1MDMwMVwiLFxuICAvLyDhuZQgPSBcXCd7UH1cbiAgXCJcXHUxRTU2XCI6IFwiUFxcdTAzMDdcIixcbiAgLy8g4bmWID0gXFwue1B9XG4gIFwiXFx1MDE1NFwiOiBcIlJcXHUwMzAxXCIsXG4gIC8vIMWUID0gXFwne1J9XG4gIFwiXFx1MDE1OFwiOiBcIlJcXHUwMzBDXCIsXG4gIC8vIMWYID0gXFx2e1J9XG4gIFwiXFx1MUU1OFwiOiBcIlJcXHUwMzA3XCIsXG4gIC8vIOG5mCA9IFxcLntSfVxuICBcIlxcdTAxNUFcIjogXCJTXFx1MDMwMVwiLFxuICAvLyDFmiA9IFxcJ3tTfVxuICBcIlxcdTFFNjRcIjogXCJTXFx1MDMwMVxcdTAzMDdcIixcbiAgLy8g4bmkID0gXFwnXFwue1N9XG4gIFwiXFx1MDE2MFwiOiBcIlNcXHUwMzBDXCIsXG4gIC8vIMWgID0gXFx2e1N9XG4gIFwiXFx1MUU2NlwiOiBcIlNcXHUwMzBDXFx1MDMwN1wiLFxuICAvLyDhuaYgPSBcXHZcXC57U31cbiAgXCJcXHUwMTVDXCI6IFwiU1xcdTAzMDJcIixcbiAgLy8gxZwgPSBcXF57U31cbiAgXCJcXHUxRTYwXCI6IFwiU1xcdTAzMDdcIixcbiAgLy8g4bmgID0gXFwue1N9XG4gIFwiXFx1MDE2NFwiOiBcIlRcXHUwMzBDXCIsXG4gIC8vIMWkID0gXFx2e1R9XG4gIFwiXFx1MUU2QVwiOiBcIlRcXHUwMzA3XCIsXG4gIC8vIOG5qiA9IFxcLntUfVxuICBcIlxceERBXCI6IFwiVVxcdTAzMDFcIixcbiAgLy8gw5ogPSBcXCd7VX1cbiAgXCJcXHhEOVwiOiBcIlVcXHUwMzAwXCIsXG4gIC8vIMOZID0gXFxge1V9XG4gIFwiXFx4RENcIjogXCJVXFx1MDMwOFwiLFxuICAvLyDDnCA9IFxcXCJ7VX1cbiAgXCJcXHUwMUQ3XCI6IFwiVVxcdTAzMDhcXHUwMzAxXCIsXG4gIC8vIMeXID0gXFxcIlxcJ3tVfVxuICBcIlxcdTAxREJcIjogXCJVXFx1MDMwOFxcdTAzMDBcIixcbiAgLy8gx5sgPSBcXFwiXFxge1V9XG4gIFwiXFx1MDFENVwiOiBcIlVcXHUwMzA4XFx1MDMwNFwiLFxuICAvLyDHlSA9IFxcXCJcXD17VX1cbiAgXCJcXHUwMUQ5XCI6IFwiVVxcdTAzMDhcXHUwMzBDXCIsXG4gIC8vIMeZID0gXFxcIlxcdntVfVxuICBcIlxcdTAxNjhcIjogXCJVXFx1MDMwM1wiLFxuICAvLyDFqCA9IFxcfntVfVxuICBcIlxcdTFFNzhcIjogXCJVXFx1MDMwM1xcdTAzMDFcIixcbiAgLy8g4bm4ID0gXFx+XFwne1V9XG4gIFwiXFx1MDE2QVwiOiBcIlVcXHUwMzA0XCIsXG4gIC8vIMWqID0gXFw9e1V9XG4gIFwiXFx1MUU3QVwiOiBcIlVcXHUwMzA0XFx1MDMwOFwiLFxuICAvLyDhubogPSBcXD1cXFwie1V9XG4gIFwiXFx1MDE2Q1wiOiBcIlVcXHUwMzA2XCIsXG4gIC8vIMWsID0gXFx1e1V9XG4gIFwiXFx1MDFEM1wiOiBcIlVcXHUwMzBDXCIsXG4gIC8vIMeTID0gXFx2e1V9XG4gIFwiXFx4REJcIjogXCJVXFx1MDMwMlwiLFxuICAvLyDDmyA9IFxcXntVfVxuICBcIlxcdTAxNkVcIjogXCJVXFx1MDMwQVwiLFxuICAvLyDFriA9IFxccntVfVxuICBcIlxcdTAxNzBcIjogXCJVXFx1MDMwQlwiLFxuICAvLyDFsCA9IFxcSHtVfVxuICBcIlxcdTFFN0NcIjogXCJWXFx1MDMwM1wiLFxuICAvLyDhubwgPSBcXH57Vn1cbiAgXCJcXHUxRTgyXCI6IFwiV1xcdTAzMDFcIixcbiAgLy8g4bqCID0gXFwne1d9XG4gIFwiXFx1MUU4MFwiOiBcIldcXHUwMzAwXCIsXG4gIC8vIOG6gCA9IFxcYHtXfVxuICBcIlxcdTFFODRcIjogXCJXXFx1MDMwOFwiLFxuICAvLyDhuoQgPSBcXFwie1d9XG4gIFwiXFx1MDE3NFwiOiBcIldcXHUwMzAyXCIsXG4gIC8vIMW0ID0gXFxee1d9XG4gIFwiXFx1MUU4NlwiOiBcIldcXHUwMzA3XCIsXG4gIC8vIOG6hiA9IFxcLntXfVxuICBcIlxcdTFFOENcIjogXCJYXFx1MDMwOFwiLFxuICAvLyDhuowgPSBcXFwie1h9XG4gIFwiXFx1MUU4QVwiOiBcIlhcXHUwMzA3XCIsXG4gIC8vIOG6iiA9IFxcLntYfVxuICBcIlxceEREXCI6IFwiWVxcdTAzMDFcIixcbiAgLy8gw50gPSBcXCd7WX1cbiAgXCJcXHUxRUYyXCI6IFwiWVxcdTAzMDBcIixcbiAgLy8g4buyID0gXFxge1l9XG4gIFwiXFx1MDE3OFwiOiBcIllcXHUwMzA4XCIsXG4gIC8vIMW4ID0gXFxcIntZfVxuICBcIlxcdTFFRjhcIjogXCJZXFx1MDMwM1wiLFxuICAvLyDhu7ggPSBcXH57WX1cbiAgXCJcXHUwMjMyXCI6IFwiWVxcdTAzMDRcIixcbiAgLy8gyLIgPSBcXD17WX1cbiAgXCJcXHUwMTc2XCI6IFwiWVxcdTAzMDJcIixcbiAgLy8gxbYgPSBcXF57WX1cbiAgXCJcXHUxRThFXCI6IFwiWVxcdTAzMDdcIixcbiAgLy8g4bqOID0gXFwue1l9XG4gIFwiXFx1MDE3OVwiOiBcIlpcXHUwMzAxXCIsXG4gIC8vIMW5ID0gXFwne1p9XG4gIFwiXFx1MDE3RFwiOiBcIlpcXHUwMzBDXCIsXG4gIC8vIMW9ID0gXFx2e1p9XG4gIFwiXFx1MUU5MFwiOiBcIlpcXHUwMzAyXCIsXG4gIC8vIOG6kCA9IFxcXntafVxuICBcIlxcdTAxN0JcIjogXCJaXFx1MDMwN1wiLFxuICAvLyDFuyA9IFxcLntafVxuICBcIlxcdTAzQUNcIjogXCJcXHUwM0IxXFx1MDMwMVwiLFxuICAvLyDOrCA9IFxcJ3vOsX1cbiAgXCJcXHUxRjcwXCI6IFwiXFx1MDNCMVxcdTAzMDBcIixcbiAgLy8g4b2wID0gXFxge86xfVxuICBcIlxcdTFGQjFcIjogXCJcXHUwM0IxXFx1MDMwNFwiLFxuICAvLyDhvrEgPSBcXD17zrF9XG4gIFwiXFx1MUZCMFwiOiBcIlxcdTAzQjFcXHUwMzA2XCIsXG4gIC8vIOG+sCA9IFxcdXvOsX1cbiAgXCJcXHUwM0FEXCI6IFwiXFx1MDNCNVxcdTAzMDFcIixcbiAgLy8gzq0gPSBcXCd7zrV9XG4gIFwiXFx1MUY3MlwiOiBcIlxcdTAzQjVcXHUwMzAwXCIsXG4gIC8vIOG9siA9IFxcYHvOtX1cbiAgXCJcXHUwM0FFXCI6IFwiXFx1MDNCN1xcdTAzMDFcIixcbiAgLy8gzq4gPSBcXCd7zrd9XG4gIFwiXFx1MUY3NFwiOiBcIlxcdTAzQjdcXHUwMzAwXCIsXG4gIC8vIOG9tCA9IFxcYHvOt31cbiAgXCJcXHUwM0FGXCI6IFwiXFx1MDNCOVxcdTAzMDFcIixcbiAgLy8gzq8gPSBcXCd7zrl9XG4gIFwiXFx1MUY3NlwiOiBcIlxcdTAzQjlcXHUwMzAwXCIsXG4gIC8vIOG9tiA9IFxcYHvOuX1cbiAgXCJcXHUwM0NBXCI6IFwiXFx1MDNCOVxcdTAzMDhcIixcbiAgLy8gz4ogPSBcXFwie865fVxuICBcIlxcdTAzOTBcIjogXCJcXHUwM0I5XFx1MDMwOFxcdTAzMDFcIixcbiAgLy8gzpAgPSBcXFwiXFwne865fVxuICBcIlxcdTFGRDJcIjogXCJcXHUwM0I5XFx1MDMwOFxcdTAzMDBcIixcbiAgLy8g4b+SID0gXFxcIlxcYHvOuX1cbiAgXCJcXHUxRkQxXCI6IFwiXFx1MDNCOVxcdTAzMDRcIixcbiAgLy8g4b+RID0gXFw9e865fVxuICBcIlxcdTFGRDBcIjogXCJcXHUwM0I5XFx1MDMwNlwiLFxuICAvLyDhv5AgPSBcXHV7zrl9XG4gIFwiXFx1MDNDQ1wiOiBcIlxcdTAzQkZcXHUwMzAxXCIsXG4gIC8vIM+MID0gXFwne86/fVxuICBcIlxcdTFGNzhcIjogXCJcXHUwM0JGXFx1MDMwMFwiLFxuICAvLyDhvbggPSBcXGB7zr99XG4gIFwiXFx1MDNDRFwiOiBcIlxcdTAzQzVcXHUwMzAxXCIsXG4gIC8vIM+NID0gXFwne8+FfVxuICBcIlxcdTFGN0FcIjogXCJcXHUwM0M1XFx1MDMwMFwiLFxuICAvLyDhvbogPSBcXGB7z4V9XG4gIFwiXFx1MDNDQlwiOiBcIlxcdTAzQzVcXHUwMzA4XCIsXG4gIC8vIM+LID0gXFxcInvPhX1cbiAgXCJcXHUwM0IwXCI6IFwiXFx1MDNDNVxcdTAzMDhcXHUwMzAxXCIsXG4gIC8vIM6wID0gXFxcIlxcJ3vPhX1cbiAgXCJcXHUxRkUyXCI6IFwiXFx1MDNDNVxcdTAzMDhcXHUwMzAwXCIsXG4gIC8vIOG/oiA9IFxcXCJcXGB7z4V9XG4gIFwiXFx1MUZFMVwiOiBcIlxcdTAzQzVcXHUwMzA0XCIsXG4gIC8vIOG/oSA9IFxcPXvPhX1cbiAgXCJcXHUxRkUwXCI6IFwiXFx1MDNDNVxcdTAzMDZcIixcbiAgLy8g4b+gID0gXFx1e8+FfVxuICBcIlxcdTAzQ0VcIjogXCJcXHUwM0M5XFx1MDMwMVwiLFxuICAvLyDPjiA9IFxcJ3vPiX1cbiAgXCJcXHUxRjdDXCI6IFwiXFx1MDNDOVxcdTAzMDBcIixcbiAgLy8g4b28ID0gXFxge8+JfVxuICBcIlxcdTAzOEVcIjogXCJcXHUwM0E1XFx1MDMwMVwiLFxuICAvLyDOjiA9IFxcJ3vOpX1cbiAgXCJcXHUxRkVBXCI6IFwiXFx1MDNBNVxcdTAzMDBcIixcbiAgLy8g4b+qID0gXFxge86lfVxuICBcIlxcdTAzQUJcIjogXCJcXHUwM0E1XFx1MDMwOFwiLFxuICAvLyDOqyA9IFxcXCJ7zqV9XG4gIFwiXFx1MUZFOVwiOiBcIlxcdTAzQTVcXHUwMzA0XCIsXG4gIC8vIOG/qSA9IFxcPXvOpX1cbiAgXCJcXHUxRkU4XCI6IFwiXFx1MDNBNVxcdTAzMDZcIixcbiAgLy8g4b+oID0gXFx1e86lfVxuICBcIlxcdTAzOEZcIjogXCJcXHUwM0E5XFx1MDMwMVwiLFxuICAvLyDOjyA9IFxcJ3vOqX1cbiAgXCJcXHUxRkZBXCI6IFwiXFx1MDNBOVxcdTAzMDBcIiAvLyDhv7ogPSBcXGB7zql9XG5cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvUGFyc2VyLmpzXG4vKiBlc2xpbnQgbm8tY29uc3RhbnQtY29uZGl0aW9uOjAgKi9cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKipcbiAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgcGFyc2VyIHVzZWQgdG8gcGFyc2Ugb3V0IGEgVGVYIGV4cHJlc3Npb24gZnJvbSB0aGVcbiAqIGlucHV0LiBTaW5jZSBUZVggaXNuJ3QgY29udGV4dC1mcmVlLCBzdGFuZGFyZCBwYXJzZXJzIGRvbid0IHdvcmsgcGFydGljdWxhcmx5XG4gKiB3ZWxsLlxuICpcbiAqIFRoZSBzdHJhdGVneSBvZiB0aGlzIHBhcnNlciBpcyBhcyBzdWNoOlxuICpcbiAqIFRoZSBtYWluIGZ1bmN0aW9ucyAodGhlIGAucGFyc2UuLi5gIG9uZXMpIHRha2UgYSBwb3NpdGlvbiBpbiB0aGUgY3VycmVudFxuICogcGFyc2Ugc3RyaW5nIHRvIHBhcnNlIHRva2VucyBmcm9tLiBUaGUgbGV4ZXIgKGZvdW5kIGluIExleGVyLmpzLCBzdG9yZWQgYXRcbiAqIHRoaXMuZ3VsbGV0LmxleGVyKSBhbHNvIHN1cHBvcnRzIHB1bGxpbmcgb3V0IHRva2VucyBhdCBhcmJpdHJhcnkgcGxhY2VzLiBXaGVuXG4gKiBpbmRpdmlkdWFsIHRva2VucyBhcmUgbmVlZGVkIGF0IGEgcG9zaXRpb24sIHRoZSBsZXhlciBpcyBjYWxsZWQgdG8gcHVsbCBvdXQgYVxuICogdG9rZW4sIHdoaWNoIGlzIHRoZW4gdXNlZC5cbiAqXG4gKiBUaGUgcGFyc2VyIGhhcyBhIHByb3BlcnR5IGNhbGxlZCBcIm1vZGVcIiBpbmRpY2F0aW5nIHRoZSBtb2RlIHRoYXRcbiAqIHRoZSBwYXJzZXIgaXMgY3VycmVudGx5IGluLiBDdXJyZW50bHkgaXQgaGFzIHRvIGJlIG9uZSBvZiBcIm1hdGhcIiBvclxuICogXCJ0ZXh0XCIsIHdoaWNoIGRlbm90ZXMgd2hldGhlciB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBpcyBhIG1hdGgteVxuICogb25lIG9yIGEgdGV4dC15IG9uZSAoZS5nLiBpbnNpZGUgXFx0ZXh0KS4gQ3VycmVudGx5LCB0aGlzIHNlcnZlcyB0b1xuICogbGltaXQgdGhlIGZ1bmN0aW9ucyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0ZXh0IG1vZGUuXG4gKlxuICogVGhlIG1haW4gZnVuY3Rpb25zIHRoZW4gcmV0dXJuIGFuIG9iamVjdCB3aGljaCBjb250YWlucyB0aGUgdXNlZnVsIGRhdGEgdGhhdFxuICogd2FzIHBhcnNlZCBhdCBpdHMgZ2l2ZW4gcG9pbnQsIGFuZCBhIG5ldyBwb3NpdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBwYXJzZWRcbiAqIGRhdGEuIFRoZSBtYWluIGZ1bmN0aW9ucyBjYW4gY2FsbCBlYWNoIG90aGVyIGFuZCBjb250aW51ZSB0aGUgcGFyc2luZyBieVxuICogdXNpbmcgdGhlIHJldHVybmVkIHBvc2l0aW9uIGFzIGEgbmV3IHN0YXJ0aW5nIHBvaW50LlxuICpcbiAqIFRoZXJlIGFyZSBhbHNvIGV4dHJhIGAuaGFuZGxlLi4uYCBmdW5jdGlvbnMsIHdoaWNoIHB1bGwgb3V0IHNvbWUgcmV1c2VkXG4gKiBmdW5jdGlvbmFsaXR5IGludG8gc2VsZi1jb250YWluZWQgZnVuY3Rpb25zLlxuICpcbiAqIFRoZSBmdW5jdGlvbnMgcmV0dXJuIFBhcnNlTm9kZXMuXG4gKi9cbnZhciBQYXJzZXJfUGFyc2VyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUGFyc2VyKGlucHV0LCBzZXR0aW5ncykge1xuICAgIHRoaXMubW9kZSA9IHZvaWQgMDtcbiAgICB0aGlzLmd1bGxldCA9IHZvaWQgMDtcbiAgICB0aGlzLnNldHRpbmdzID0gdm9pZCAwO1xuICAgIHRoaXMubGVmdHJpZ2h0RGVwdGggPSB2b2lkIDA7XG4gICAgdGhpcy5uZXh0VG9rZW4gPSB2b2lkIDA7XG4gICAgLy8gU3RhcnQgaW4gbWF0aCBtb2RlXG4gICAgdGhpcy5tb2RlID0gXCJtYXRoXCI7IC8vIENyZWF0ZSBhIG5ldyBtYWNybyBleHBhbmRlciAoZ3VsbGV0KSBhbmQgKGluZGlyZWN0bHkgdmlhIHRoYXQpIGFsc28gYVxuICAgIC8vIG5ldyBsZXhlciAobW91dGgpIGZvciB0aGlzIHBhcnNlciAoc3RvbWFjaCwgaW4gdGhlIGxhbmd1YWdlIG9mIFRlWClcblxuICAgIHRoaXMuZ3VsbGV0ID0gbmV3IE1hY3JvRXhwYW5kZXJfTWFjcm9FeHBhbmRlcihpbnB1dCwgc2V0dGluZ3MsIHRoaXMubW9kZSk7IC8vIFN0b3JlIHRoZSBzZXR0aW5ncyBmb3IgdXNlIGluIHBhcnNpbmdcblxuICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5nczsgLy8gQ291bnQgbGVmdHJpZ2h0IGRlcHRoIChmb3IgXFxtaWRkbGUgZXJyb3JzKVxuXG4gICAgdGhpcy5sZWZ0cmlnaHREZXB0aCA9IDA7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrcyBhIHJlc3VsdCB0byBtYWtlIHN1cmUgaXQgaGFzIHRoZSByaWdodCB0eXBlLCBhbmQgdGhyb3dzIGFuXG4gICAqIGFwcHJvcHJpYXRlIGVycm9yIG90aGVyd2lzZS5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gUGFyc2VyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZXhwZWN0ID0gZnVuY3Rpb24gZXhwZWN0KHRleHQsIGNvbnN1bWUpIHtcbiAgICBpZiAoY29uc3VtZSA9PT0gdm9pZCAwKSB7XG4gICAgICBjb25zdW1lID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5uZXh0VG9rZW4udGV4dCAhPT0gdGV4dCkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiRXhwZWN0ZWQgJ1wiICsgdGV4dCArIFwiJywgZ290ICdcIiArIHRoaXMubmV4dFRva2VuLnRleHQgKyBcIidcIiwgdGhpcy5uZXh0VG9rZW4pO1xuICAgIH1cblxuICAgIGlmIChjb25zdW1lKSB7XG4gICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENvbnNpZGVycyB0aGUgY3VycmVudCBsb29rIGFoZWFkIHRva2VuIGFzIGNvbnN1bWVkLFxuICAgKiBhbmQgZmV0Y2hlcyB0aGUgb25lIGFmdGVyIHRoYXQgYXMgdGhlIG5ldyBsb29rIGFoZWFkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jb25zdW1lID0gZnVuY3Rpb24gY29uc3VtZSgpIHtcbiAgICB0aGlzLm5leHRUb2tlbiA9IHRoaXMuZ3VsbGV0LmV4cGFuZE5leHRUb2tlbigpO1xuICB9XG4gIC8qKlxuICAgKiBTd2l0Y2hlcyBiZXR3ZWVuIFwidGV4dFwiIGFuZCBcIm1hdGhcIiBtb2Rlcy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uc3dpdGNoTW9kZSA9IGZ1bmN0aW9uIHN3aXRjaE1vZGUobmV3TW9kZSkge1xuICAgIHRoaXMubW9kZSA9IG5ld01vZGU7XG4gICAgdGhpcy5ndWxsZXQuc3dpdGNoTW9kZShuZXdNb2RlKTtcbiAgfVxuICAvKipcbiAgICogTWFpbiBwYXJzaW5nIGZ1bmN0aW9uLCB3aGljaCBwYXJzZXMgYW4gZW50aXJlIGlucHV0LlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKCkge1xuICAgIC8vIENyZWF0ZSBhIGdyb3VwIG5hbWVzcGFjZSBmb3IgdGhlIG1hdGggZXhwcmVzc2lvbi5cbiAgICAvLyAoTGFUZVggY3JlYXRlcyBhIG5ldyBncm91cCBmb3IgZXZlcnkgJC4uLiQsICQkLi4uJCQsIFxcWy4uLlxcXS4pXG4gICAgdGhpcy5ndWxsZXQuYmVnaW5Hcm91cCgpOyAvLyBVc2Ugb2xkIFxcY29sb3IgYmVoYXZpb3IgKHNhbWUgYXMgTGFUZVgncyBcXHRleHRjb2xvcikgaWYgcmVxdWVzdGVkLlxuICAgIC8vIFdlIGRvIHRoaXMgd2l0aGluIHRoZSBncm91cCBmb3IgdGhlIG1hdGggZXhwcmVzc2lvbiwgc28gaXQgZG9lc24ndFxuICAgIC8vIHBvbGx1dGUgc2V0dGluZ3MubWFjcm9zLlxuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MuY29sb3JJc1RleHRDb2xvcikge1xuICAgICAgdGhpcy5ndWxsZXQubWFjcm9zLnNldChcIlxcXFxjb2xvclwiLCBcIlxcXFx0ZXh0Y29sb3JcIik7XG4gICAgfSAvLyBUcnkgdG8gcGFyc2UgdGhlIGlucHV0XG5cblxuICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIHZhciBwYXJzZSA9IHRoaXMucGFyc2VFeHByZXNzaW9uKGZhbHNlKTsgLy8gSWYgd2Ugc3VjY2VlZGVkLCBtYWtlIHN1cmUgdGhlcmUncyBhbiBFT0YgYXQgdGhlIGVuZFxuXG4gICAgdGhpcy5leHBlY3QoXCJFT0ZcIiwgZmFsc2UpOyAvLyBFbmQgdGhlIGdyb3VwIG5hbWVzcGFjZSBmb3IgdGhlIGV4cHJlc3Npb25cblxuICAgIHRoaXMuZ3VsbGV0LmVuZEdyb3VwKCk7XG4gICAgcmV0dXJuIHBhcnNlO1xuICB9O1xuXG4gIF9wcm90by5wYXJzZUV4cHJlc3Npb24gPSBmdW5jdGlvbiBwYXJzZUV4cHJlc3Npb24oYnJlYWtPbkluZml4LCBicmVha09uVG9rZW5UZXh0KSB7XG4gICAgdmFyIGJvZHkgPSBbXTsgLy8gS2VlcCBhZGRpbmcgYXRvbXMgdG8gdGhlIGJvZHkgdW50aWwgd2UgY2FuJ3QgcGFyc2UgYW55IG1vcmUgYXRvbXMgKGVpdGhlclxuICAgIC8vIHdlIHJlYWNoZWQgdGhlIGVuZCwgYSB9LCBvciBhIFxccmlnaHQpXG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgLy8gSWdub3JlIHNwYWNlcyBpbiBtYXRoIG1vZGVcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09IFwibWF0aFwiKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZVNwYWNlcygpO1xuICAgICAgfVxuXG4gICAgICB2YXIgbGV4ID0gdGhpcy5uZXh0VG9rZW47XG5cbiAgICAgIGlmIChQYXJzZXIuZW5kT2ZFeHByZXNzaW9uLmluZGV4T2YobGV4LnRleHQpICE9PSAtMSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGJyZWFrT25Ub2tlblRleHQgJiYgbGV4LnRleHQgPT09IGJyZWFrT25Ub2tlblRleHQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChicmVha09uSW5maXggJiYgc3JjX2Z1bmN0aW9uc1tsZXgudGV4dF0gJiYgc3JjX2Z1bmN0aW9uc1tsZXgudGV4dF0uaW5maXgpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHZhciBhdG9tID0gdGhpcy5wYXJzZUF0b20oYnJlYWtPblRva2VuVGV4dCk7XG5cbiAgICAgIGlmICghYXRvbSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgYm9keS5wdXNoKGF0b20pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1vZGUgPT09IFwidGV4dFwiKSB7XG4gICAgICB0aGlzLmZvcm1MaWdhdHVyZXMoYm9keSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlSW5maXhOb2Rlcyhib2R5KTtcbiAgfVxuICAvKipcbiAgICogUmV3cml0ZXMgaW5maXggb3BlcmF0b3JzIHN1Y2ggYXMgXFxvdmVyIHdpdGggY29ycmVzcG9uZGluZyBjb21tYW5kcyBzdWNoXG4gICAqIGFzIFxcZnJhYy5cbiAgICpcbiAgICogVGhlcmUgY2FuIG9ubHkgYmUgb25lIGluZml4IG9wZXJhdG9yIHBlciBncm91cC4gIElmIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZVxuICAgKiB0aGVuIHRoZSBleHByZXNzaW9uIGlzIGFtYmlndW91cy4gIFRoaXMgY2FuIGJlIHJlc29sdmVkIGJ5IGFkZGluZyB7fS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlSW5maXhOb2RlcyA9IGZ1bmN0aW9uIGhhbmRsZUluZml4Tm9kZXMoYm9keSkge1xuICAgIHZhciBvdmVySW5kZXggPSAtMTtcbiAgICB2YXIgZnVuY05hbWU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvZHkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBub2RlID0gY2hlY2tOb2RlVHlwZShib2R5W2ldLCBcImluZml4XCIpO1xuXG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICBpZiAob3ZlckluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIm9ubHkgb25lIGluZml4IG9wZXJhdG9yIHBlciBncm91cFwiLCBub2RlLnRva2VuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG92ZXJJbmRleCA9IGk7XG4gICAgICAgIGZ1bmNOYW1lID0gbm9kZS5yZXBsYWNlV2l0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3ZlckluZGV4ICE9PSAtMSAmJiBmdW5jTmFtZSkge1xuICAgICAgdmFyIG51bWVyTm9kZTtcbiAgICAgIHZhciBkZW5vbU5vZGU7XG4gICAgICB2YXIgbnVtZXJCb2R5ID0gYm9keS5zbGljZSgwLCBvdmVySW5kZXgpO1xuICAgICAgdmFyIGRlbm9tQm9keSA9IGJvZHkuc2xpY2Uob3ZlckluZGV4ICsgMSk7XG5cbiAgICAgIGlmIChudW1lckJvZHkubGVuZ3RoID09PSAxICYmIG51bWVyQm9keVswXS50eXBlID09PSBcIm9yZGdyb3VwXCIpIHtcbiAgICAgICAgbnVtZXJOb2RlID0gbnVtZXJCb2R5WzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbnVtZXJOb2RlID0ge1xuICAgICAgICAgIHR5cGU6IFwib3JkZ3JvdXBcIixcbiAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgYm9keTogbnVtZXJCb2R5XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChkZW5vbUJvZHkubGVuZ3RoID09PSAxICYmIGRlbm9tQm9keVswXS50eXBlID09PSBcIm9yZGdyb3VwXCIpIHtcbiAgICAgICAgZGVub21Ob2RlID0gZGVub21Cb2R5WzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVub21Ob2RlID0ge1xuICAgICAgICAgIHR5cGU6IFwib3JkZ3JvdXBcIixcbiAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgYm9keTogZGVub21Cb2R5XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciBfbm9kZTtcblxuICAgICAgaWYgKGZ1bmNOYW1lID09PSBcIlxcXFxcXFxcYWJvdmVmcmFjXCIpIHtcbiAgICAgICAgX25vZGUgPSB0aGlzLmNhbGxGdW5jdGlvbihmdW5jTmFtZSwgW251bWVyTm9kZSwgYm9keVtvdmVySW5kZXhdLCBkZW5vbU5vZGVdLCBbXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfbm9kZSA9IHRoaXMuY2FsbEZ1bmN0aW9uKGZ1bmNOYW1lLCBbbnVtZXJOb2RlLCBkZW5vbU5vZGVdLCBbXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbX25vZGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYm9keTtcbiAgICB9XG4gIH0gLy8gVGhlIGdyZWVkaW5lc3Mgb2YgYSBzdXBlcnNjcmlwdCBvciBzdWJzY3JpcHRcbiAgO1xuXG4gIC8qKlxuICAgKiBIYW5kbGUgYSBzdWJzY3JpcHQgb3Igc3VwZXJzY3JpcHQgd2l0aCBuaWNlIGVycm9ycy5cbiAgICovXG4gIF9wcm90by5oYW5kbGVTdXBTdWJzY3JpcHQgPSBmdW5jdGlvbiBoYW5kbGVTdXBTdWJzY3JpcHQobmFtZSkge1xuICAgIHZhciBzeW1ib2xUb2tlbiA9IHRoaXMubmV4dFRva2VuO1xuICAgIHZhciBzeW1ib2wgPSBzeW1ib2xUb2tlbi50ZXh0O1xuICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIHRoaXMuY29uc3VtZVNwYWNlcygpOyAvLyBpZ25vcmUgc3BhY2VzIGJlZm9yZSBzdXAvc3Vic2NyaXB0IGFyZ3VtZW50XG5cbiAgICB2YXIgZ3JvdXAgPSB0aGlzLnBhcnNlR3JvdXAobmFtZSwgZmFsc2UsIFBhcnNlci5TVVBTVUJfR1JFRURJTkVTUyk7XG5cbiAgICBpZiAoIWdyb3VwKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJFeHBlY3RlZCBncm91cCBhZnRlciAnXCIgKyBzeW1ib2wgKyBcIidcIiwgc3ltYm9sVG9rZW4pO1xuICAgIH1cblxuICAgIHJldHVybiBncm91cDtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIHRleHR1YWwgaW5wdXQgb2YgYW4gdW5zdXBwb3J0ZWQgY29tbWFuZCBpbnRvIGEgdGV4dCBub2RlXG4gICAqIGNvbnRhaW5lZCB3aXRoaW4gYSBjb2xvciBub2RlIHdob3NlIGNvbG9yIGlzIGRldGVybWluZWQgYnkgZXJyb3JDb2xvclxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5mb3JtYXRVbnN1cHBvcnRlZENtZCA9IGZ1bmN0aW9uIGZvcm1hdFVuc3VwcG9ydGVkQ21kKHRleHQpIHtcbiAgICB2YXIgdGV4dG9yZEFycmF5ID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRleHRvcmRBcnJheS5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICB0ZXh0OiB0ZXh0W2ldXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgdGV4dE5vZGUgPSB7XG4gICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIGJvZHk6IHRleHRvcmRBcnJheVxuICAgIH07XG4gICAgdmFyIGNvbG9yTm9kZSA9IHtcbiAgICAgIHR5cGU6IFwiY29sb3JcIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIGNvbG9yOiB0aGlzLnNldHRpbmdzLmVycm9yQ29sb3IsXG4gICAgICBib2R5OiBbdGV4dE5vZGVdXG4gICAgfTtcbiAgICByZXR1cm4gY29sb3JOb2RlO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgYSBncm91cCB3aXRoIG9wdGlvbmFsIHN1cGVyL3N1YnNjcmlwdHMuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnBhcnNlQXRvbSA9IGZ1bmN0aW9uIHBhcnNlQXRvbShicmVha09uVG9rZW5UZXh0KSB7XG4gICAgLy8gVGhlIGJvZHkgb2YgYW4gYXRvbSBpcyBhbiBpbXBsaWNpdCBncm91cCwgc28gdGhhdCB0aGluZ3MgbGlrZVxuICAgIC8vIFxcbGVmdCh4XFxyaWdodCleMiB3b3JrIGNvcnJlY3RseS5cbiAgICB2YXIgYmFzZSA9IHRoaXMucGFyc2VHcm91cChcImF0b21cIiwgZmFsc2UsIG51bGwsIGJyZWFrT25Ub2tlblRleHQpOyAvLyBJbiB0ZXh0IG1vZGUsIHdlIGRvbid0IGhhdmUgc3VwZXJzY3JpcHRzIG9yIHN1YnNjcmlwdHNcblxuICAgIGlmICh0aGlzLm1vZGUgPT09IFwidGV4dFwiKSB7XG4gICAgICByZXR1cm4gYmFzZTtcbiAgICB9IC8vIE5vdGUgdGhhdCBiYXNlIG1heSBiZSBlbXB0eSAoaS5lLiBudWxsKSBhdCB0aGlzIHBvaW50LlxuXG5cbiAgICB2YXIgc3VwZXJzY3JpcHQ7XG4gICAgdmFyIHN1YnNjcmlwdDtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAvLyBHdWFyYW50ZWVkIGluIG1hdGggbW9kZSwgc28gZWF0IGFueSBzcGFjZXMgZmlyc3QuXG4gICAgICB0aGlzLmNvbnN1bWVTcGFjZXMoKTsgLy8gTGV4IHRoZSBmaXJzdCB0b2tlblxuXG4gICAgICB2YXIgbGV4ID0gdGhpcy5uZXh0VG9rZW47XG5cbiAgICAgIGlmIChsZXgudGV4dCA9PT0gXCJcXFxcbGltaXRzXCIgfHwgbGV4LnRleHQgPT09IFwiXFxcXG5vbGltaXRzXCIpIHtcbiAgICAgICAgLy8gV2UgZ290IGEgbGltaXQgY29udHJvbFxuICAgICAgICB2YXIgb3BOb2RlID0gY2hlY2tOb2RlVHlwZShiYXNlLCBcIm9wXCIpO1xuXG4gICAgICAgIGlmIChvcE5vZGUpIHtcbiAgICAgICAgICB2YXIgbGltaXRzID0gbGV4LnRleHQgPT09IFwiXFxcXGxpbWl0c1wiO1xuICAgICAgICAgIG9wTm9kZS5saW1pdHMgPSBsaW1pdHM7XG4gICAgICAgICAgb3BOb2RlLmFsd2F5c0hhbmRsZVN1cFN1YiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3BOb2RlID0gY2hlY2tOb2RlVHlwZShiYXNlLCBcIm9wZXJhdG9ybmFtZVwiKTtcblxuICAgICAgICAgIGlmIChvcE5vZGUgJiYgb3BOb2RlLmFsd2F5c0hhbmRsZVN1cFN1Yikge1xuICAgICAgICAgICAgdmFyIF9saW1pdHMgPSBsZXgudGV4dCA9PT0gXCJcXFxcbGltaXRzXCI7XG5cbiAgICAgICAgICAgIG9wTm9kZS5saW1pdHMgPSBfbGltaXRzO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJMaW1pdCBjb250cm9scyBtdXN0IGZvbGxvdyBhIG1hdGggb3BlcmF0b3JcIiwgbGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgIH0gZWxzZSBpZiAobGV4LnRleHQgPT09IFwiXlwiKSB7XG4gICAgICAgIC8vIFdlIGdvdCBhIHN1cGVyc2NyaXB0IHN0YXJ0XG4gICAgICAgIGlmIChzdXBlcnNjcmlwdCkge1xuICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkRvdWJsZSBzdXBlcnNjcmlwdFwiLCBsZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXJzY3JpcHQgPSB0aGlzLmhhbmRsZVN1cFN1YnNjcmlwdChcInN1cGVyc2NyaXB0XCIpO1xuICAgICAgfSBlbHNlIGlmIChsZXgudGV4dCA9PT0gXCJfXCIpIHtcbiAgICAgICAgLy8gV2UgZ290IGEgc3Vic2NyaXB0IHN0YXJ0XG4gICAgICAgIGlmIChzdWJzY3JpcHQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJEb3VibGUgc3Vic2NyaXB0XCIsIGxleCk7XG4gICAgICAgIH1cblxuICAgICAgICBzdWJzY3JpcHQgPSB0aGlzLmhhbmRsZVN1cFN1YnNjcmlwdChcInN1YnNjcmlwdFwiKTtcbiAgICAgIH0gZWxzZSBpZiAobGV4LnRleHQgPT09IFwiJ1wiKSB7XG4gICAgICAgIC8vIFdlIGdvdCBhIHByaW1lXG4gICAgICAgIGlmIChzdXBlcnNjcmlwdCkge1xuICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkRvdWJsZSBzdXBlcnNjcmlwdFwiLCBsZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHByaW1lID0ge1xuICAgICAgICAgIHR5cGU6IFwidGV4dG9yZFwiLFxuICAgICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgICB0ZXh0OiBcIlxcXFxwcmltZVwiXG4gICAgICAgIH07IC8vIE1hbnkgcHJpbWVzIGNhbiBiZSBncm91cGVkIHRvZ2V0aGVyLCBzbyB3ZSBoYW5kbGUgdGhpcyBoZXJlXG5cbiAgICAgICAgdmFyIHByaW1lcyA9IFtwcmltZV07XG4gICAgICAgIHRoaXMuY29uc3VtZSgpOyAvLyBLZWVwIGxleGluZyB0b2tlbnMgdW50aWwgd2UgZ2V0IHNvbWV0aGluZyB0aGF0J3Mgbm90IGEgcHJpbWVcblxuICAgICAgICB3aGlsZSAodGhpcy5uZXh0VG9rZW4udGV4dCA9PT0gXCInXCIpIHtcbiAgICAgICAgICAvLyBGb3IgZWFjaCBvbmUsIGFkZCBhbm90aGVyIHByaW1lIHRvIHRoZSBsaXN0XG4gICAgICAgICAgcHJpbWVzLnB1c2gocHJpbWUpO1xuICAgICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICB9IC8vIElmIHRoZXJlJ3MgYSBzdXBlcnNjcmlwdCBmb2xsb3dpbmcgdGhlIHByaW1lcywgY29tYmluZSB0aGF0XG4gICAgICAgIC8vIHN1cGVyc2NyaXB0IGluIHdpdGggdGhlIHByaW1lcy5cblxuXG4gICAgICAgIGlmICh0aGlzLm5leHRUb2tlbi50ZXh0ID09PSBcIl5cIikge1xuICAgICAgICAgIHByaW1lcy5wdXNoKHRoaXMuaGFuZGxlU3VwU3Vic2NyaXB0KFwic3VwZXJzY3JpcHRcIikpO1xuICAgICAgICB9IC8vIFB1dCBldmVyeXRoaW5nIGludG8gYW4gb3JkZ3JvdXAgYXMgdGhlIHN1cGVyc2NyaXB0XG5cblxuICAgICAgICBzdXBlcnNjcmlwdCA9IHtcbiAgICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgICAgIGJvZHk6IHByaW1lc1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgaXQgd2Fzbid0IF4sIF8sIG9yICcsIHN0b3AgcGFyc2luZyBzdXBlci9zdWJzY3JpcHRzXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gLy8gQmFzZSBtdXN0IGJlIHNldCBpZiBzdXBlcnNjcmlwdCBvciBzdWJzY3JpcHQgYXJlIHNldCBwZXIgbG9naWMgYWJvdmUsXG4gICAgLy8gYnV0IG5lZWQgdG8gY2hlY2sgaGVyZSBmb3IgdHlwZSBjaGVjayB0byBwYXNzLlxuXG5cbiAgICBpZiAoc3VwZXJzY3JpcHQgfHwgc3Vic2NyaXB0KSB7XG4gICAgICAvLyBJZiB3ZSBnb3QgZWl0aGVyIGEgc3VwZXJzY3JpcHQgb3Igc3Vic2NyaXB0LCBjcmVhdGUgYSBzdXBzdWJcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwic3Vwc3ViXCIsXG4gICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgYmFzZTogYmFzZSxcbiAgICAgICAgc3VwOiBzdXBlcnNjcmlwdCxcbiAgICAgICAgc3ViOiBzdWJzY3JpcHRcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyd2lzZSByZXR1cm4gdGhlIG9yaWdpbmFsIGJvZHlcbiAgICAgIHJldHVybiBiYXNlO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGFuIGVudGlyZSBmdW5jdGlvbiwgaW5jbHVkaW5nIGl0cyBiYXNlIGFuZCBhbGwgb2YgaXRzIGFyZ3VtZW50cy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ucGFyc2VGdW5jdGlvbiA9IGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb24oYnJlYWtPblRva2VuVGV4dCwgbmFtZSwgLy8gRm9yIGVycm9yIHJlcG9ydGluZy5cbiAgZ3JlZWRpbmVzcykge1xuICAgIHZhciB0b2tlbiA9IHRoaXMubmV4dFRva2VuO1xuICAgIHZhciBmdW5jID0gdG9rZW4udGV4dDtcbiAgICB2YXIgZnVuY0RhdGEgPSBzcmNfZnVuY3Rpb25zW2Z1bmNdO1xuXG4gICAgaWYgKCFmdW5jRGF0YSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGdyZWVkaW5lc3MgIT0gbnVsbCAmJiBmdW5jRGF0YS5ncmVlZGluZXNzIDw9IGdyZWVkaW5lc3MpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkdvdCBmdW5jdGlvbiAnXCIgKyBmdW5jICsgXCInIHdpdGggbm8gYXJndW1lbnRzXCIgKyAobmFtZSA/IFwiIGFzIFwiICsgbmFtZSA6IFwiXCIpLCB0b2tlbik7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09IFwidGV4dFwiICYmICFmdW5jRGF0YS5hbGxvd2VkSW5UZXh0KSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJDYW4ndCB1c2UgZnVuY3Rpb24gJ1wiICsgZnVuYyArIFwiJyBpbiB0ZXh0IG1vZGVcIiwgdG9rZW4pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSBcIm1hdGhcIiAmJiBmdW5jRGF0YS5hbGxvd2VkSW5NYXRoID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiQ2FuJ3QgdXNlIGZ1bmN0aW9uICdcIiArIGZ1bmMgKyBcIicgaW4gbWF0aCBtb2RlXCIsIHRva2VuKTtcbiAgICB9IC8vIGh5cGVycmVmIHBhY2thZ2Ugc2V0cyB0aGUgY2F0Y29kZSBvZiAlIGFzIGFuIGFjdGl2ZSBjaGFyYWN0ZXJcblxuXG4gICAgaWYgKGZ1bmNEYXRhLmFyZ1R5cGVzICYmIGZ1bmNEYXRhLmFyZ1R5cGVzWzBdID09PSBcInVybFwiKSB7XG4gICAgICB0aGlzLmd1bGxldC5sZXhlci5zZXRDYXRjb2RlKFwiJVwiLCAxMyk7XG4gICAgfSAvLyBDb25zdW1lIHRoZSBjb21tYW5kIHRva2VuIGFmdGVyIHBvc3NpYmx5IHN3aXRjaGluZyB0byB0aGVcbiAgICAvLyBtb2RlIHNwZWNpZmllZCBieSB0aGUgZnVuY3Rpb24gKGZvciBpbnN0YW50IG1vZGUgc3dpdGNoaW5nKSxcbiAgICAvLyBhbmQgdGhlbiBpbW1lZGlhdGVseSBzd2l0Y2ggYmFjay5cblxuXG4gICAgaWYgKGZ1bmNEYXRhLmNvbnN1bWVNb2RlKSB7XG4gICAgICB2YXIgb2xkTW9kZSA9IHRoaXMubW9kZTtcbiAgICAgIHRoaXMuc3dpdGNoTW9kZShmdW5jRGF0YS5jb25zdW1lTW9kZSk7XG4gICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgIHRoaXMuc3dpdGNoTW9kZShvbGRNb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgfVxuXG4gICAgdmFyIF90aGlzJHBhcnNlQXJndW1lbnRzID0gdGhpcy5wYXJzZUFyZ3VtZW50cyhmdW5jLCBmdW5jRGF0YSksXG4gICAgICAgIGFyZ3MgPSBfdGhpcyRwYXJzZUFyZ3VtZW50cy5hcmdzLFxuICAgICAgICBvcHRBcmdzID0gX3RoaXMkcGFyc2VBcmd1bWVudHMub3B0QXJncztcblxuICAgIHJldHVybiB0aGlzLmNhbGxGdW5jdGlvbihmdW5jLCBhcmdzLCBvcHRBcmdzLCB0b2tlbiwgYnJlYWtPblRva2VuVGV4dCk7XG4gIH1cbiAgLyoqXG4gICAqIENhbGwgYSBmdW5jdGlvbiBoYW5kbGVyIHdpdGggYSBzdWl0YWJsZSBjb250ZXh0IGFuZCBhcmd1bWVudHMuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmNhbGxGdW5jdGlvbiA9IGZ1bmN0aW9uIGNhbGxGdW5jdGlvbihuYW1lLCBhcmdzLCBvcHRBcmdzLCB0b2tlbiwgYnJlYWtPblRva2VuVGV4dCkge1xuICAgIHZhciBjb250ZXh0ID0ge1xuICAgICAgZnVuY05hbWU6IG5hbWUsXG4gICAgICBwYXJzZXI6IHRoaXMsXG4gICAgICB0b2tlbjogdG9rZW4sXG4gICAgICBicmVha09uVG9rZW5UZXh0OiBicmVha09uVG9rZW5UZXh0XG4gICAgfTtcbiAgICB2YXIgZnVuYyA9IHNyY19mdW5jdGlvbnNbbmFtZV07XG5cbiAgICBpZiAoZnVuYyAmJiBmdW5jLmhhbmRsZXIpIHtcbiAgICAgIHJldHVybiBmdW5jLmhhbmRsZXIoY29udGV4dCwgYXJncywgb3B0QXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIk5vIGZ1bmN0aW9uIGhhbmRsZXIgZm9yIFwiICsgbmFtZSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgdGhlIGFyZ3VtZW50cyBvZiBhIGZ1bmN0aW9uIG9yIGVudmlyb25tZW50XG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnBhcnNlQXJndW1lbnRzID0gZnVuY3Rpb24gcGFyc2VBcmd1bWVudHMoZnVuYywgLy8gU2hvdWxkIGxvb2sgbGlrZSBcIlxcbmFtZVwiIG9yIFwiXFxiZWdpbntuYW1lfVwiLlxuICBmdW5jRGF0YSkge1xuICAgIHZhciB0b3RhbEFyZ3MgPSBmdW5jRGF0YS5udW1BcmdzICsgZnVuY0RhdGEubnVtT3B0aW9uYWxBcmdzO1xuXG4gICAgaWYgKHRvdGFsQXJncyA9PT0gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYXJnczogW10sXG4gICAgICAgIG9wdEFyZ3M6IFtdXG4gICAgICB9O1xuICAgIH1cblxuICAgIHZhciBiYXNlR3JlZWRpbmVzcyA9IGZ1bmNEYXRhLmdyZWVkaW5lc3M7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgb3B0QXJncyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEFyZ3M7IGkrKykge1xuICAgICAgdmFyIGFyZ1R5cGUgPSBmdW5jRGF0YS5hcmdUeXBlcyAmJiBmdW5jRGF0YS5hcmdUeXBlc1tpXTtcbiAgICAgIHZhciBpc09wdGlvbmFsID0gaSA8IGZ1bmNEYXRhLm51bU9wdGlvbmFsQXJnczsgLy8gSWdub3JlIHNwYWNlcyBiZXR3ZWVuIGFyZ3VtZW50cy4gIEFzIHRoZSBUZVhib29rIHNheXM6XG4gICAgICAvLyBcIkFmdGVyIHlvdSBoYXZlIHNhaWQg4oCYXFxkZWZcXHJvdyMxIzJ7Li4ufeKAmSwgeW91IGFyZSBhbGxvd2VkIHRvXG4gICAgICAvLyAgcHV0IHNwYWNlcyBiZXR3ZWVuIHRoZSBhcmd1bWVudHMgKGUuZy4sIOKAmFxccm93IHggbuKAmSksIGJlY2F1c2VcbiAgICAgIC8vICBUZVggZG9lc27igJl0IHVzZSBzaW5nbGUgc3BhY2VzIGFzIHVuZGVsaW1pdGVkIGFyZ3VtZW50cy5cIlxuXG4gICAgICBpZiAoaSA+IDAgJiYgIWlzT3B0aW9uYWwpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lU3BhY2VzKCk7XG4gICAgICB9IC8vIEFsc28gY29uc3VtZSBsZWFkaW5nIHNwYWNlcyBpbiBtYXRoIG1vZGUsIGFzIHBhcnNlU3ltYm9sXG4gICAgICAvLyB3b24ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCB0aGVtLiAgVGhpcyBjYW4gb25seSBoYXBwZW4gd2l0aFxuICAgICAgLy8gbWFjcm9zLCBlLmcuIFxcZnJhY1xcZm9vXFxmb28gd2hlcmUgXFxmb28gZXhwYW5kcyB0byBhIHNwYWNlIHN5bWJvbC5cbiAgICAgIC8vIEluIExhVGVYLCB0aGUgXFxmb28ncyBnZXQgdHJlYXRlZCBhcyAoYmxhbmspIGFyZ3VtZW50cykuXG4gICAgICAvLyBJbiBLYVRlWCwgZm9yIG5vdywgYm90aCBzcGFjZXMgd2lsbCBnZXQgY29uc3VtZWQuXG4gICAgICAvLyBUT0RPKGVkZW1haW5lKVxuXG5cbiAgICAgIGlmIChpID09PSAwICYmICFpc09wdGlvbmFsICYmIHRoaXMubW9kZSA9PT0gXCJtYXRoXCIpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lU3BhY2VzKCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXh0VG9rZW4gPSB0aGlzLm5leHRUb2tlbjtcbiAgICAgIHZhciBhcmcgPSB0aGlzLnBhcnNlR3JvdXBPZlR5cGUoXCJhcmd1bWVudCB0byAnXCIgKyBmdW5jICsgXCInXCIsIGFyZ1R5cGUsIGlzT3B0aW9uYWwsIGJhc2VHcmVlZGluZXNzKTtcblxuICAgICAgaWYgKCFhcmcpIHtcbiAgICAgICAgaWYgKGlzT3B0aW9uYWwpIHtcbiAgICAgICAgICBvcHRBcmdzLnB1c2gobnVsbCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJFeHBlY3RlZCBncm91cCBhZnRlciAnXCIgKyBmdW5jICsgXCInXCIsIG5leHRUb2tlbik7XG4gICAgICB9XG5cbiAgICAgIChpc09wdGlvbmFsID8gb3B0QXJncyA6IGFyZ3MpLnB1c2goYXJnKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYXJnczogYXJncyxcbiAgICAgIG9wdEFyZ3M6IG9wdEFyZ3NcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgYSBncm91cCB3aGVuIHRoZSBtb2RlIGlzIGNoYW5naW5nLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5wYXJzZUdyb3VwT2ZUeXBlID0gZnVuY3Rpb24gcGFyc2VHcm91cE9mVHlwZShuYW1lLCB0eXBlLCBvcHRpb25hbCwgZ3JlZWRpbmVzcykge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcImNvbG9yXCI6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlQ29sb3JHcm91cChvcHRpb25hbCk7XG5cbiAgICAgIGNhc2UgXCJzaXplXCI6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlU2l6ZUdyb3VwKG9wdGlvbmFsKTtcblxuICAgICAgY2FzZSBcInVybFwiOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVVybEdyb3VwKG9wdGlvbmFsKTtcblxuICAgICAgY2FzZSBcIm1hdGhcIjpcbiAgICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlR3JvdXAobmFtZSwgb3B0aW9uYWwsIGdyZWVkaW5lc3MsIHVuZGVmaW5lZCwgdHlwZSk7XG5cbiAgICAgIGNhc2UgXCJoYm94XCI6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBoYm94IGFyZ3VtZW50IHR5cGUgd3JhcHMgdGhlIGFyZ3VtZW50IGluIHRoZSBlcXVpdmFsZW50IG9mXG4gICAgICAgICAgLy8gXFxoYm94LCB3aGljaCBpcyBsaWtlIFxcdGV4dCBidXQgc3dpdGNoaW5nIHRvIFxcdGV4dHN0eWxlIHNpemUuXG4gICAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5wYXJzZUdyb3VwKG5hbWUsIG9wdGlvbmFsLCBncmVlZGluZXNzLCB1bmRlZmluZWQsIFwidGV4dFwiKTtcblxuICAgICAgICAgIGlmICghZ3JvdXApIHtcbiAgICAgICAgICAgIHJldHVybiBncm91cDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc3R5bGVkR3JvdXAgPSB7XG4gICAgICAgICAgICB0eXBlOiBcInN0eWxpbmdcIixcbiAgICAgICAgICAgIG1vZGU6IGdyb3VwLm1vZGUsXG4gICAgICAgICAgICBib2R5OiBbZ3JvdXBdLFxuICAgICAgICAgICAgc3R5bGU6IFwidGV4dFwiIC8vIHNpbXVsYXRlIFxcdGV4dHN0eWxlXG5cbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBzdHlsZWRHcm91cDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFwicmF3XCI6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAob3B0aW9uYWwgJiYgdGhpcy5uZXh0VG9rZW4udGV4dCA9PT0gXCJ7XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMucGFyc2VTdHJpbmdHcm91cChcInJhd1wiLCBvcHRpb25hbCwgdHJ1ZSk7XG5cbiAgICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwicmF3XCIsXG4gICAgICAgICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICBzdHJpbmc6IHRva2VuLnRleHRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkV4cGVjdGVkIHJhdyBncm91cFwiLCB0aGlzLm5leHRUb2tlbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgXCJvcmlnaW5hbFwiOlxuICAgICAgY2FzZSBudWxsOlxuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlR3JvdXAobmFtZSwgb3B0aW9uYWwsIGdyZWVkaW5lc3MpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJVbmtub3duIGdyb3VwIHR5cGUgYXMgXCIgKyBuYW1lLCB0aGlzLm5leHRUb2tlbik7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jb25zdW1lU3BhY2VzID0gZnVuY3Rpb24gY29uc3VtZVNwYWNlcygpIHtcbiAgICB3aGlsZSAodGhpcy5uZXh0VG9rZW4udGV4dCA9PT0gXCIgXCIpIHtcbiAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGEgZ3JvdXAsIGVzc2VudGlhbGx5IHJldHVybmluZyB0aGUgc3RyaW5nIGZvcm1lZCBieSB0aGVcbiAgICogYnJhY2UtZW5jbG9zZWQgdG9rZW5zIHBsdXMgc29tZSBwb3NpdGlvbiBpbmZvcm1hdGlvbi5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ucGFyc2VTdHJpbmdHcm91cCA9IGZ1bmN0aW9uIHBhcnNlU3RyaW5nR3JvdXAobW9kZU5hbWUsIC8vIFVzZWQgdG8gZGVzY3JpYmUgdGhlIG1vZGUgaW4gZXJyb3IgbWVzc2FnZXMuXG4gIG9wdGlvbmFsLCByYXcpIHtcbiAgICB2YXIgZ3JvdXBCZWdpbiA9IG9wdGlvbmFsID8gXCJbXCIgOiBcIntcIjtcbiAgICB2YXIgZ3JvdXBFbmQgPSBvcHRpb25hbCA/IFwiXVwiIDogXCJ9XCI7XG4gICAgdmFyIG5leHRUb2tlbiA9IHRoaXMubmV4dFRva2VuO1xuXG4gICAgaWYgKG5leHRUb2tlbi50ZXh0ICE9PSBncm91cEJlZ2luKSB7XG4gICAgICBpZiAob3B0aW9uYWwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHJhdyAmJiBuZXh0VG9rZW4udGV4dCAhPT0gXCJFT0ZcIiAmJiAvW157fVtcXF1dLy50ZXN0KG5leHRUb2tlbi50ZXh0KSkge1xuICAgICAgICAvLyBhbGxvdyBhIHNpbmdsZSBjaGFyYWN0ZXIgaW4gcmF3IHN0cmluZyBncm91cFxuICAgICAgICB0aGlzLmd1bGxldC5sZXhlci5zZXRDYXRjb2RlKFwiJVwiLCAxNCk7IC8vIHJlc2V0IHRoZSBjYXRjb2RlIG9mICVcblxuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgcmV0dXJuIG5leHRUb2tlbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgb3V0ZXJNb2RlID0gdGhpcy5tb2RlO1xuICAgIHRoaXMubW9kZSA9IFwidGV4dFwiO1xuICAgIHRoaXMuZXhwZWN0KGdyb3VwQmVnaW4pO1xuICAgIHZhciBzdHIgPSBcIlwiO1xuICAgIHZhciBmaXJzdFRva2VuID0gdGhpcy5uZXh0VG9rZW47XG4gICAgdmFyIG5lc3RlZCA9IDA7IC8vIGFsbG93IG5lc3RlZCBicmFjZXMgaW4gcmF3IHN0cmluZyBncm91cFxuXG4gICAgdmFyIGxhc3RUb2tlbiA9IGZpcnN0VG9rZW47XG5cbiAgICB3aGlsZSAocmF3ICYmIG5lc3RlZCA+IDAgfHwgdGhpcy5uZXh0VG9rZW4udGV4dCAhPT0gZ3JvdXBFbmQpIHtcbiAgICAgIHN3aXRjaCAodGhpcy5uZXh0VG9rZW4udGV4dCkge1xuICAgICAgICBjYXNlIFwiRU9GXCI6XG4gICAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgaW4gXCIgKyBtb2RlTmFtZSwgZmlyc3RUb2tlbi5yYW5nZShsYXN0VG9rZW4sIHN0cikpO1xuXG4gICAgICAgIGNhc2UgZ3JvdXBCZWdpbjpcbiAgICAgICAgICBuZXN0ZWQrKztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIGdyb3VwRW5kOlxuICAgICAgICAgIG5lc3RlZC0tO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBsYXN0VG9rZW4gPSB0aGlzLm5leHRUb2tlbjtcbiAgICAgIHN0ciArPSBsYXN0VG9rZW4udGV4dDtcbiAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIH1cblxuICAgIHRoaXMubW9kZSA9IG91dGVyTW9kZTtcbiAgICB0aGlzLmd1bGxldC5sZXhlci5zZXRDYXRjb2RlKFwiJVwiLCAxNCk7IC8vIHJlc2V0IHRoZSBjYXRjb2RlIG9mICVcblxuICAgIHRoaXMuZXhwZWN0KGdyb3VwRW5kKTtcbiAgICByZXR1cm4gZmlyc3RUb2tlbi5yYW5nZShsYXN0VG9rZW4sIHN0cik7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhIHJlZ2V4LWRlbGltaXRlZCBncm91cDogdGhlIGxhcmdlc3Qgc2VxdWVuY2Ugb2YgdG9rZW5zXG4gICAqIHdob3NlIGNvbmNhdGVuYXRlZCBzdHJpbmdzIG1hdGNoIGByZWdleGAuIFJldHVybnMgdGhlIHN0cmluZ1xuICAgKiBmb3JtZWQgYnkgdGhlIHRva2VucyBwbHVzIHNvbWUgcG9zaXRpb24gaW5mb3JtYXRpb24uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnBhcnNlUmVnZXhHcm91cCA9IGZ1bmN0aW9uIHBhcnNlUmVnZXhHcm91cChyZWdleCwgbW9kZU5hbWUpIHtcbiAgICB2YXIgb3V0ZXJNb2RlID0gdGhpcy5tb2RlO1xuICAgIHRoaXMubW9kZSA9IFwidGV4dFwiO1xuICAgIHZhciBmaXJzdFRva2VuID0gdGhpcy5uZXh0VG9rZW47XG4gICAgdmFyIGxhc3RUb2tlbiA9IGZpcnN0VG9rZW47XG4gICAgdmFyIHN0ciA9IFwiXCI7XG5cbiAgICB3aGlsZSAodGhpcy5uZXh0VG9rZW4udGV4dCAhPT0gXCJFT0ZcIiAmJiByZWdleC50ZXN0KHN0ciArIHRoaXMubmV4dFRva2VuLnRleHQpKSB7XG4gICAgICBsYXN0VG9rZW4gPSB0aGlzLm5leHRUb2tlbjtcbiAgICAgIHN0ciArPSBsYXN0VG9rZW4udGV4dDtcbiAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIH1cblxuICAgIGlmIChzdHIgPT09IFwiXCIpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgXCIgKyBtb2RlTmFtZSArIFwiOiAnXCIgKyBmaXJzdFRva2VuLnRleHQgKyBcIidcIiwgZmlyc3RUb2tlbik7XG4gICAgfVxuXG4gICAgdGhpcy5tb2RlID0gb3V0ZXJNb2RlO1xuICAgIHJldHVybiBmaXJzdFRva2VuLnJhbmdlKGxhc3RUb2tlbiwgc3RyKTtcbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGEgY29sb3IgZGVzY3JpcHRpb24uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnBhcnNlQ29sb3JHcm91cCA9IGZ1bmN0aW9uIHBhcnNlQ29sb3JHcm91cChvcHRpb25hbCkge1xuICAgIHZhciByZXMgPSB0aGlzLnBhcnNlU3RyaW5nR3JvdXAoXCJjb2xvclwiLCBvcHRpb25hbCk7XG5cbiAgICBpZiAoIXJlcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIG1hdGNoID0gL14oI1thLWYwLTldezN9fCM/W2EtZjAtOV17Nn18W2Etel0rKSQvaS5leGVjKHJlcy50ZXh0KTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgY29sb3I6ICdcIiArIHJlcy50ZXh0ICsgXCInXCIsIHJlcyk7XG4gICAgfVxuXG4gICAgdmFyIGNvbG9yID0gbWF0Y2hbMF07XG5cbiAgICBpZiAoL15bMC05YS1mXXs2fSQvaS50ZXN0KGNvbG9yKSkge1xuICAgICAgLy8gV2UgYWxsb3cgYSA2LWRpZ2l0IEhUTUwgY29sb3Igc3BlYyB3aXRob3V0IGEgbGVhZGluZyBcIiNcIi5cbiAgICAgIC8vIFRoaXMgZm9sbG93cyB0aGUgeGNvbG9yIHBhY2thZ2UncyBIVE1MIGNvbG9yIG1vZGVsLlxuICAgICAgLy8gUHJlZGVmaW5lZCBjb2xvciBuYW1lcyBhcmUgYWxsIG1pc3NlZCBieSB0aGlzIFJlZ0V4IHBhdHRlcm4uXG4gICAgICBjb2xvciA9IFwiI1wiICsgY29sb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiY29sb3ItdG9rZW5cIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIGNvbG9yOiBjb2xvclxuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhIHNpemUgc3BlY2lmaWNhdGlvbiwgY29uc2lzdGluZyBvZiBtYWduaXR1ZGUgYW5kIHVuaXQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnBhcnNlU2l6ZUdyb3VwID0gZnVuY3Rpb24gcGFyc2VTaXplR3JvdXAob3B0aW9uYWwpIHtcbiAgICB2YXIgcmVzO1xuICAgIHZhciBpc0JsYW5rID0gZmFsc2U7XG5cbiAgICBpZiAoIW9wdGlvbmFsICYmIHRoaXMubmV4dFRva2VuLnRleHQgIT09IFwie1wiKSB7XG4gICAgICByZXMgPSB0aGlzLnBhcnNlUmVnZXhHcm91cCgvXlstK10/ICooPzokfFxcZCt8XFxkK1xcLlxcZCp8XFwuXFxkKikgKlthLXpdezAsMn0gKiQvLCBcInNpemVcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IHRoaXMucGFyc2VTdHJpbmdHcm91cChcInNpemVcIiwgb3B0aW9uYWwpO1xuICAgIH1cblxuICAgIGlmICghcmVzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbmFsICYmIHJlcy50ZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gQmVjYXVzZSB3ZSd2ZSB0ZXN0ZWQgZm9yIHdoYXQgaXMgIW9wdGlvbmFsLCB0aGlzIGJsb2NrIHdvbid0XG4gICAgICAvLyBhZmZlY3QgXFxrZXJuLCBcXGhzcGFjZSwgZXRjLiBJdCB3aWxsIGNhcHR1cmUgdGhlIG1hbmRhdG9yeSBhcmd1bWVudHNcbiAgICAgIC8vIHRvIFxcZ2VuZnJhYyBhbmQgXFxhYm92ZS5cbiAgICAgIHJlcy50ZXh0ID0gXCIwcHRcIjsgLy8gRW5hYmxlIFxcYWJvdmV7fVxuXG4gICAgICBpc0JsYW5rID0gdHJ1ZTsgLy8gVGhpcyBpcyBoZXJlIHNwZWNpZmljYWxseSBmb3IgXFxnZW5mcmFjXG4gICAgfVxuXG4gICAgdmFyIG1hdGNoID0gLyhbLStdPykgKihcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspICooW2Etel17Mn0pLy5leGVjKHJlcy50ZXh0KTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgc2l6ZTogJ1wiICsgcmVzLnRleHQgKyBcIidcIiwgcmVzKTtcbiAgICB9XG5cbiAgICB2YXIgZGF0YSA9IHtcbiAgICAgIG51bWJlcjogKyhtYXRjaFsxXSArIG1hdGNoWzJdKSxcbiAgICAgIC8vIHNpZ24gKyBtYWduaXR1ZGUsIGNhc3QgdG8gbnVtYmVyXG4gICAgICB1bml0OiBtYXRjaFszXVxuICAgIH07XG5cbiAgICBpZiAoIXZhbGlkVW5pdChkYXRhKSkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCB1bml0OiAnXCIgKyBkYXRhLnVuaXQgKyBcIidcIiwgcmVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzaXplXCIsXG4gICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICB2YWx1ZTogZGF0YSxcbiAgICAgIGlzQmxhbms6IGlzQmxhbmtcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgYW4gVVJMLCBjaGVja2luZyBlc2NhcGVkIGxldHRlcnMgYW5kIGFsbG93ZWQgcHJvdG9jb2xzLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5wYXJzZVVybEdyb3VwID0gZnVuY3Rpb24gcGFyc2VVcmxHcm91cChvcHRpb25hbCkge1xuICAgIHZhciByZXMgPSB0aGlzLnBhcnNlU3RyaW5nR3JvdXAoXCJ1cmxcIiwgb3B0aW9uYWwsIHRydWUpOyAvLyBnZXQgcmF3IHN0cmluZ1xuXG4gICAgaWYgKCFyZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gaHlwZXJyZWYgcGFja2FnZSBhbGxvd3MgYmFja3NsYXNoZXMgYWxvbmUgaW4gaHJlZiwgYnV0IGRvZXNuJ3RcbiAgICAvLyBnZW5lcmF0ZSB2YWxpZCBsaW5rcyBpbiBzdWNoIGNhc2VzOyB3ZSBpbnRlcnByZXQgdGhpcyBhc1xuICAgIC8vIFwidW5kZWZpbmVkXCIgYmVoYXZpb3VyLCBhbmQga2VlcCB0aGVtIGFzLWlzLiBTb21lIGJyb3dzZXIgd2lsbFxuICAgIC8vIHJlcGxhY2UgYmFja3NsYXNoZXMgd2l0aCBmb3J3YXJkIHNsYXNoZXMuXG5cblxuICAgIHZhciB1cmwgPSByZXMudGV4dC5yZXBsYWNlKC9cXFxcKFsjJCUmfl9ee31dKS9nLCAnJDEnKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ1cmxcIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIHVybDogdXJsXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogSWYgYG9wdGlvbmFsYCBpcyBmYWxzZSBvciBhYnNlbnQsIHRoaXMgcGFyc2VzIGFuIG9yZGluYXJ5IGdyb3VwLFxuICAgKiB3aGljaCBpcyBlaXRoZXIgYSBzaW5nbGUgbnVjbGV1cyAobGlrZSBcInhcIikgb3IgYW4gZXhwcmVzc2lvblxuICAgKiBpbiBicmFjZXMgKGxpa2UgXCJ7eCt5fVwiKSBvciBhbiBpbXBsaWNpdCBncm91cCwgYSBncm91cCB0aGF0IHN0YXJ0c1xuICAgKiBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiwgYW5kIGVuZHMgcmlnaHQgYmVmb3JlIGEgaGlnaGVyIGV4cGxpY2l0XG4gICAqIGdyb3VwIGVuZHMsIG9yIGF0IEVPRi5cbiAgICogSWYgYG9wdGlvbmFsYCBpcyB0cnVlLCBpdCBwYXJzZXMgZWl0aGVyIGEgYnJhY2tldC1kZWxpbWl0ZWQgZXhwcmVzc2lvblxuICAgKiAobGlrZSBcIlt4K3ldXCIpIG9yIHJldHVybnMgbnVsbCB0byBpbmRpY2F0ZSB0aGUgYWJzZW5jZSBvZiBhXG4gICAqIGJyYWNrZXQtZW5jbG9zZWQgZ3JvdXAuXG4gICAqIElmIGBtb2RlYCBpcyBwcmVzZW50LCBzd2l0Y2hlcyB0byB0aGF0IG1vZGUgd2hpbGUgcGFyc2luZyB0aGUgZ3JvdXAsXG4gICAqIGFuZCBzd2l0Y2hlcyBiYWNrIGFmdGVyLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5wYXJzZUdyb3VwID0gZnVuY3Rpb24gcGFyc2VHcm91cChuYW1lLCAvLyBGb3IgZXJyb3IgcmVwb3J0aW5nLlxuICBvcHRpb25hbCwgZ3JlZWRpbmVzcywgYnJlYWtPblRva2VuVGV4dCwgbW9kZSkge1xuICAgIHZhciBvdXRlck1vZGUgPSB0aGlzLm1vZGU7XG4gICAgdmFyIGZpcnN0VG9rZW4gPSB0aGlzLm5leHRUb2tlbjtcbiAgICB2YXIgdGV4dCA9IGZpcnN0VG9rZW4udGV4dDsgLy8gU3dpdGNoIHRvIHNwZWNpZmllZCBtb2RlXG5cbiAgICBpZiAobW9kZSkge1xuICAgICAgdGhpcy5zd2l0Y2hNb2RlKG1vZGUpO1xuICAgIH1cblxuICAgIHZhciBncm91cEVuZDtcbiAgICB2YXIgcmVzdWx0OyAvLyBUcnkgdG8gcGFyc2UgYW4gb3BlbiBicmFjZSBvciBcXGJlZ2luZ3JvdXBcblxuICAgIGlmIChvcHRpb25hbCA/IHRleHQgPT09IFwiW1wiIDogdGV4dCA9PT0gXCJ7XCIgfHwgdGV4dCA9PT0gXCJcXFxcYmVnaW5ncm91cFwiKSB7XG4gICAgICBncm91cEVuZCA9IFBhcnNlci5lbmRPZkdyb3VwW3RleHRdOyAvLyBTdGFydCBhIG5ldyBncm91cCBuYW1lc3BhY2VcblxuICAgICAgdGhpcy5ndWxsZXQuYmVnaW5Hcm91cCgpOyAvLyBJZiB3ZSBnZXQgYSBicmFjZSwgcGFyc2UgYW4gZXhwcmVzc2lvblxuXG4gICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgIHZhciBleHByZXNzaW9uID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oZmFsc2UsIGdyb3VwRW5kKTtcbiAgICAgIHZhciBsYXN0VG9rZW4gPSB0aGlzLm5leHRUb2tlbjsgLy8gRW5kIGdyb3VwIG5hbWVzcGFjZSBiZWZvcmUgY29uc3VtaW5nIHN5bWJvbCBhZnRlciBjbG9zZSBicmFjZVxuXG4gICAgICB0aGlzLmd1bGxldC5lbmRHcm91cCgpO1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgbG9jOiBTb3VyY2VMb2NhdGlvbi5yYW5nZShmaXJzdFRva2VuLCBsYXN0VG9rZW4pLFxuICAgICAgICBib2R5OiBleHByZXNzaW9uLFxuICAgICAgICAvLyBBIGdyb3VwIGZvcm1lZCBieSBcXGJlZ2luZ3JvdXAuLi5cXGVuZGdyb3VwIGlzIGEgc2VtaS1zaW1wbGUgZ3JvdXBcbiAgICAgICAgLy8gd2hpY2ggZG9lc24ndCBhZmZlY3Qgc3BhY2luZyBpbiBtYXRoIG1vZGUsIGkuZS4sIGlzIHRyYW5zcGFyZW50LlxuICAgICAgICAvLyBodHRwczovL3RleC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMTkzMC93aGVuLXNob3VsZC1vbmUtXG4gICAgICAgIC8vIHVzZS1iZWdpbmdyb3VwLWluc3RlYWQtb2YtYmdyb3VwXG4gICAgICAgIHNlbWlzaW1wbGU6IHRleHQgPT09IFwiXFxcXGJlZ2luZ3JvdXBcIiB8fCB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChvcHRpb25hbCkge1xuICAgICAgLy8gUmV0dXJuIG5vdGhpbmcgZm9yIGFuIG9wdGlvbmFsIGdyb3VwXG4gICAgICByZXN1bHQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiB0aGVyZSBleGlzdHMgYSBmdW5jdGlvbiB3aXRoIHRoaXMgbmFtZSwgcGFyc2UgdGhlIGZ1bmN0aW9uLlxuICAgICAgLy8gT3RoZXJ3aXNlLCBqdXN0IHJldHVybiBhIG51Y2xldXNcbiAgICAgIHJlc3VsdCA9IHRoaXMucGFyc2VGdW5jdGlvbihicmVha09uVG9rZW5UZXh0LCBuYW1lLCBncmVlZGluZXNzKSB8fCB0aGlzLnBhcnNlU3ltYm9sKCk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCAmJiB0ZXh0WzBdID09PSBcIlxcXFxcIiAmJiAhaW1wbGljaXRDb21tYW5kcy5oYXNPd25Qcm9wZXJ0eSh0ZXh0KSkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy50aHJvd09uRXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJVbmRlZmluZWQgY29udHJvbCBzZXF1ZW5jZTogXCIgKyB0ZXh0LCBmaXJzdFRva2VuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdCA9IHRoaXMuZm9ybWF0VW5zdXBwb3J0ZWRDbWQodGV4dCk7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgfVxuICAgIH0gLy8gU3dpdGNoIG1vZGUgYmFja1xuXG5cbiAgICBpZiAobW9kZSkge1xuICAgICAgdGhpcy5zd2l0Y2hNb2RlKG91dGVyTW9kZSk7XG4gICAgfSAvLyBNYWtlIHN1cmUgd2UgZ290IGEgY2xvc2UgYnJhY2VcblxuXG4gICAgaWYgKGdyb3VwRW5kKSB7XG4gICAgICB0aGlzLmV4cGVjdChncm91cEVuZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICAvKipcbiAgICogRm9ybSBsaWdhdHVyZS1saWtlIGNvbWJpbmF0aW9ucyBvZiBjaGFyYWN0ZXJzIGZvciB0ZXh0IG1vZGUuXG4gICAqIFRoaXMgaW5jbHVkZXMgaW5wdXRzIGxpa2UgXCItLVwiLCBcIi0tLVwiLCBcImBgXCIgYW5kIFwiJydcIi5cbiAgICogVGhlIHJlc3VsdCB3aWxsIHNpbXBseSByZXBsYWNlIG11bHRpcGxlIHRleHRvcmQgbm9kZXMgd2l0aCBhIHNpbmdsZVxuICAgKiBjaGFyYWN0ZXIgaW4gZWFjaCB2YWx1ZSBieSBhIHNpbmdsZSB0ZXh0b3JkIG5vZGUgaGF2aW5nIG11bHRpcGxlXG4gICAqIGNoYXJhY3RlcnMgaW4gaXRzIHZhbHVlLiAgVGhlIHJlcHJlc2VudGF0aW9uIGlzIHN0aWxsIEFTQ0lJIHNvdXJjZS5cbiAgICogVGhlIGdyb3VwIHdpbGwgYmUgbW9kaWZpZWQgaW4gcGxhY2UuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmZvcm1MaWdhdHVyZXMgPSBmdW5jdGlvbiBmb3JtTGlnYXR1cmVzKGdyb3VwKSB7XG4gICAgdmFyIG4gPSBncm91cC5sZW5ndGggLSAxO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIHZhciBhID0gZ3JvdXBbaV07IC8vICRGbG93Rml4TWU6IE5vdCBldmVyeSBub2RlIHR5cGUgaGFzIGEgYHRleHRgIHByb3BlcnR5LlxuXG4gICAgICB2YXIgdiA9IGEudGV4dDtcblxuICAgICAgaWYgKHYgPT09IFwiLVwiICYmIGdyb3VwW2kgKyAxXS50ZXh0ID09PSBcIi1cIikge1xuICAgICAgICBpZiAoaSArIDEgPCBuICYmIGdyb3VwW2kgKyAyXS50ZXh0ID09PSBcIi1cIikge1xuICAgICAgICAgIGdyb3VwLnNwbGljZShpLCAzLCB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgbG9jOiBTb3VyY2VMb2NhdGlvbi5yYW5nZShhLCBncm91cFtpICsgMl0pLFxuICAgICAgICAgICAgdGV4dDogXCItLS1cIlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIG4gLT0gMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBncm91cC5zcGxpY2UoaSwgMiwge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgICAgICBtb2RlOiBcInRleHRcIixcbiAgICAgICAgICAgIGxvYzogU291cmNlTG9jYXRpb24ucmFuZ2UoYSwgZ3JvdXBbaSArIDFdKSxcbiAgICAgICAgICAgIHRleHQ6IFwiLS1cIlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIG4gLT0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoKHYgPT09IFwiJ1wiIHx8IHYgPT09IFwiYFwiKSAmJiBncm91cFtpICsgMV0udGV4dCA9PT0gdikge1xuICAgICAgICBncm91cC5zcGxpY2UoaSwgMiwge1xuICAgICAgICAgIHR5cGU6IFwidGV4dG9yZFwiLFxuICAgICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICAgIGxvYzogU291cmNlTG9jYXRpb24ucmFuZ2UoYSwgZ3JvdXBbaSArIDFdKSxcbiAgICAgICAgICB0ZXh0OiB2ICsgdlxuICAgICAgICB9KTtcbiAgICAgICAgbiAtPSAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogUGFyc2UgYSBzaW5nbGUgc3ltYm9sIG91dCBvZiB0aGUgc3RyaW5nLiBIZXJlLCB3ZSBoYW5kbGUgc2luZ2xlIGNoYXJhY3RlclxuICAgKiBzeW1ib2xzIGFuZCBzcGVjaWFsIGZ1bmN0aW9ucyBsaWtlIHZlcmJhdGltXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnBhcnNlU3ltYm9sID0gZnVuY3Rpb24gcGFyc2VTeW1ib2woKSB7XG4gICAgdmFyIG51Y2xldXMgPSB0aGlzLm5leHRUb2tlbjtcbiAgICB2YXIgdGV4dCA9IG51Y2xldXMudGV4dDtcblxuICAgIGlmICgvXlxcXFx2ZXJiW15hLXpBLVpdLy50ZXN0KHRleHQpKSB7XG4gICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgIHZhciBhcmcgPSB0ZXh0LnNsaWNlKDUpO1xuICAgICAgdmFyIHN0YXIgPSBhcmcuY2hhckF0KDApID09PSBcIipcIjtcblxuICAgICAgaWYgKHN0YXIpIHtcbiAgICAgICAgYXJnID0gYXJnLnNsaWNlKDEpO1xuICAgICAgfSAvLyBMZXhlcidzIHRva2VuUmVnZXggaXMgY29uc3RydWN0ZWQgdG8gYWx3YXlzIGhhdmUgbWF0Y2hpbmdcbiAgICAgIC8vIGZpcnN0L2xhc3QgY2hhcmFjdGVycy5cblxuXG4gICAgICBpZiAoYXJnLmxlbmd0aCA8IDIgfHwgYXJnLmNoYXJBdCgwKSAhPT0gYXJnLnNsaWNlKC0xKSkge1xuICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJcXFxcdmVyYiBhc3NlcnRpb24gZmFpbGVkIC0tXFxuICAgICAgICAgICAgICAgICAgICBwbGVhc2UgcmVwb3J0IHdoYXQgaW5wdXQgY2F1c2VkIHRoaXMgYnVnXCIpO1xuICAgICAgfVxuXG4gICAgICBhcmcgPSBhcmcuc2xpY2UoMSwgLTEpOyAvLyByZW1vdmUgZmlyc3QgYW5kIGxhc3QgY2hhclxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcInZlcmJcIixcbiAgICAgICAgbW9kZTogXCJ0ZXh0XCIsXG4gICAgICAgIGJvZHk6IGFyZyxcbiAgICAgICAgc3Rhcjogc3RhclxuICAgICAgfTtcbiAgICB9IC8vIEF0IHRoaXMgcG9pbnQsIHdlIHNob3VsZCBoYXZlIGEgc3ltYm9sLCBwb3NzaWJseSB3aXRoIGFjY2VudHMuXG4gICAgLy8gRmlyc3QgZXhwYW5kIGFueSBhY2NlbnRlZCBiYXNlIHN5bWJvbCBhY2NvcmRpbmcgdG8gdW5pY29kZVN5bWJvbHMuXG5cblxuICAgIGlmICh1bmljb2RlU3ltYm9scy5oYXNPd25Qcm9wZXJ0eSh0ZXh0WzBdKSAmJiAhc3JjX3N5bWJvbHNbdGhpcy5tb2RlXVt0ZXh0WzBdXSkge1xuICAgICAgLy8gVGhpcyBiZWhhdmlvciBpcyBub3Qgc3RyaWN0IChYZVRlWC1jb21wYXRpYmxlKSBpbiBtYXRoIG1vZGUuXG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5zdHJpY3QgJiYgdGhpcy5tb2RlID09PSBcIm1hdGhcIikge1xuICAgICAgICB0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcInVuaWNvZGVUZXh0SW5NYXRoTW9kZVwiLCBcIkFjY2VudGVkIFVuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgXFxcIlwiICsgdGV4dFswXSArIFwiXFxcIiB1c2VkIGluIFwiICsgXCJtYXRoIG1vZGVcIiwgbnVjbGV1cyk7XG4gICAgICB9XG5cbiAgICAgIHRleHQgPSB1bmljb2RlU3ltYm9sc1t0ZXh0WzBdXSArIHRleHQuc3Vic3RyKDEpO1xuICAgIH0gLy8gU3RyaXAgb2ZmIGFueSBjb21iaW5pbmcgY2hhcmFjdGVyc1xuXG5cbiAgICB2YXIgbWF0Y2ggPSBjb21iaW5pbmdEaWFjcml0aWNhbE1hcmtzRW5kUmVnZXguZXhlYyh0ZXh0KTtcblxuICAgIGlmIChtYXRjaCkge1xuICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIG1hdGNoLmluZGV4KTtcblxuICAgICAgaWYgKHRleHQgPT09ICdpJykge1xuICAgICAgICB0ZXh0ID0gXCJcXHUwMTMxXCI7IC8vIGRvdGxlc3MgaSwgaW4gbWF0aCBhbmQgdGV4dCBtb2RlXG4gICAgICB9IGVsc2UgaWYgKHRleHQgPT09ICdqJykge1xuICAgICAgICB0ZXh0ID0gXCJcXHUwMjM3XCI7IC8vIGRvdGxlc3MgaiwgaW4gbWF0aCBhbmQgdGV4dCBtb2RlXG4gICAgICB9XG4gICAgfSAvLyBSZWNvZ25pemUgYmFzZSBzeW1ib2xcblxuXG4gICAgdmFyIHN5bWJvbDtcblxuICAgIGlmIChzcmNfc3ltYm9sc1t0aGlzLm1vZGVdW3RleHRdKSB7XG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5zdHJpY3QgJiYgdGhpcy5tb2RlID09PSAnbWF0aCcgJiYgZXh0cmFMYXRpbi5pbmRleE9mKHRleHQpID49IDApIHtcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJ1bmljb2RlVGV4dEluTWF0aE1vZGVcIiwgXCJMYXRpbi0xL1VuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgXFxcIlwiICsgdGV4dFswXSArIFwiXFxcIiB1c2VkIGluIFwiICsgXCJtYXRoIG1vZGVcIiwgbnVjbGV1cyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBncm91cCA9IHNyY19zeW1ib2xzW3RoaXMubW9kZV1bdGV4dF0uZ3JvdXA7XG4gICAgICB2YXIgbG9jID0gU291cmNlTG9jYXRpb24ucmFuZ2UobnVjbGV1cyk7XG4gICAgICB2YXIgcztcblxuICAgICAgaWYgKEFUT01TLmhhc093blByb3BlcnR5KGdyb3VwKSkge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICAgIHZhciBmYW1pbHkgPSBncm91cDtcbiAgICAgICAgcyA9IHtcbiAgICAgICAgICB0eXBlOiBcImF0b21cIixcbiAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgZmFtaWx5OiBmYW1pbHksXG4gICAgICAgICAgbG9jOiBsb2MsXG4gICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICBzID0ge1xuICAgICAgICAgIHR5cGU6IGdyb3VwLFxuICAgICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgICBsb2M6IGxvYyxcbiAgICAgICAgICB0ZXh0OiB0ZXh0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHN5bWJvbCA9IHM7XG4gICAgfSBlbHNlIGlmICh0ZXh0LmNoYXJDb2RlQXQoMCkgPj0gMHg4MCkge1xuICAgICAgLy8gbm8gc3ltYm9sIGZvciBlLmcuIF5cbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLnN0cmljdCkge1xuICAgICAgICBpZiAoIXN1cHBvcnRlZENvZGVwb2ludCh0ZXh0LmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJ1bmtub3duU3ltYm9sXCIsIFwiVW5yZWNvZ25pemVkIFVuaWNvZGUgY2hhcmFjdGVyIFxcXCJcIiArIHRleHRbMF0gKyBcIlxcXCJcIiArIChcIiAoXCIgKyB0ZXh0LmNoYXJDb2RlQXQoMCkgKyBcIilcIiksIG51Y2xldXMpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gXCJtYXRoXCIpIHtcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcInVuaWNvZGVUZXh0SW5NYXRoTW9kZVwiLCBcIlVuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgXFxcIlwiICsgdGV4dFswXSArIFwiXFxcIiB1c2VkIGluIG1hdGggbW9kZVwiLCBudWNsZXVzKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBBbGwgbm9ubWF0aGVtYXRpY2FsIFVuaWNvZGUgY2hhcmFjdGVycyBhcmUgcmVuZGVyZWQgYXMgaWYgdGhleVxuICAgICAgLy8gYXJlIGluIHRleHQgbW9kZSAod3JhcHBlZCBpbiBcXHRleHQpIGJlY2F1c2UgdGhhdCdzIHdoYXQgaXRcbiAgICAgIC8vIHRha2VzIHRvIHJlbmRlciB0aGVtIGluIExhVGVYLiAgU2V0dGluZyBgbW9kZTogdGhpcy5tb2RlYCBpc1xuICAgICAgLy8gYW5vdGhlciBuYXR1cmFsIGNob2ljZSAodGhlIHVzZXIgcmVxdWVzdGVkIG1hdGggbW9kZSksIGJ1dFxuICAgICAgLy8gdGhpcyBtYWtlcyBpdCBtb3JlIGRpZmZpY3VsdCBmb3IgZ2V0Q2hhcmFjdGVyTWV0cmljcygpIHRvXG4gICAgICAvLyBkaXN0aW5ndWlzaCBVbmljb2RlIGNoYXJhY3RlcnMgd2l0aG91dCBtZXRyaWNzIGFuZCB0aG9zZSBmb3JcbiAgICAgIC8vIHdoaWNoIHdlIHdhbnQgdG8gc2ltdWxhdGUgdGhlIGxldHRlciBNLlxuXG5cbiAgICAgIHN5bWJvbCA9IHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICBsb2M6IFNvdXJjZUxvY2F0aW9uLnJhbmdlKG51Y2xldXMpLFxuICAgICAgICB0ZXh0OiB0ZXh0XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gRU9GLCBeLCBfLCB7LCB9LCBldGMuXG4gICAgfVxuXG4gICAgdGhpcy5jb25zdW1lKCk7IC8vIFRyYW5zZm9ybSBjb21iaW5pbmcgY2hhcmFjdGVycyBpbnRvIGFjY2VudHNcblxuICAgIGlmIChtYXRjaCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRjaFswXS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYWNjZW50ID0gbWF0Y2hbMF1baV07XG5cbiAgICAgICAgaWYgKCF1bmljb2RlQWNjZW50c1thY2NlbnRdKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiVW5rbm93biBhY2NlbnQgJyBcIiArIGFjY2VudCArIFwiJ1wiLCBudWNsZXVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjb21tYW5kID0gdW5pY29kZUFjY2VudHNbYWNjZW50XVt0aGlzLm1vZGVdO1xuXG4gICAgICAgIGlmICghY29tbWFuZCkge1xuICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkFjY2VudCBcIiArIGFjY2VudCArIFwiIHVuc3VwcG9ydGVkIGluIFwiICsgdGhpcy5tb2RlICsgXCIgbW9kZVwiLCBudWNsZXVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN5bWJvbCA9IHtcbiAgICAgICAgICB0eXBlOiBcImFjY2VudFwiLFxuICAgICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgICBsb2M6IFNvdXJjZUxvY2F0aW9uLnJhbmdlKG51Y2xldXMpLFxuICAgICAgICAgIGxhYmVsOiBjb21tYW5kLFxuICAgICAgICAgIGlzU3RyZXRjaHk6IGZhbHNlLFxuICAgICAgICAgIGlzU2hpZnR5OiB0cnVlLFxuICAgICAgICAgIGJhc2U6IHN5bWJvbFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzeW1ib2w7XG4gIH07XG5cbiAgcmV0dXJuIFBhcnNlcjtcbn0oKTtcblxuUGFyc2VyX1BhcnNlci5lbmRPZkV4cHJlc3Npb24gPSBbXCJ9XCIsIFwiXFxcXGVuZGdyb3VwXCIsIFwiXFxcXGVuZFwiLCBcIlxcXFxyaWdodFwiLCBcIiZcIl07XG5QYXJzZXJfUGFyc2VyLmVuZE9mR3JvdXAgPSB7XG4gIFwiW1wiOiBcIl1cIixcbiAgXCJ7XCI6IFwifVwiLFxuICBcIlxcXFxiZWdpbmdyb3VwXCI6IFwiXFxcXGVuZGdyb3VwXCJcbiAgLyoqXG4gICAqIFBhcnNlcyBhbiBcImV4cHJlc3Npb25cIiwgd2hpY2ggaXMgYSBsaXN0IG9mIGF0b21zLlxuICAgKlxuICAgKiBgYnJlYWtPbkluZml4YDogU2hvdWxkIHRoZSBwYXJzaW5nIHN0b3Agd2hlbiB3ZSBoaXQgaW5maXggbm9kZXM/IFRoaXNcbiAgICogICAgICAgICAgICAgICAgIGhhcHBlbnMgd2hlbiBmdW5jdGlvbnMgaGF2ZSBoaWdoZXIgcHJlY2VuZGVuY2UgaGFuIGluZml4XG4gICAqICAgICAgICAgICAgICAgICBub2RlcyBpbiBpbXBsaWNpdCBwYXJzZXMuXG4gICAqXG4gICAqIGBicmVha09uVG9rZW5UZXh0YDogVGhlIHRleHQgb2YgdGhlIHRva2VuIHRoYXQgdGhlIGV4cHJlc3Npb24gc2hvdWxkIGVuZFxuICAgKiAgICAgICAgICAgICAgICAgICAgIHdpdGgsIG9yIGBudWxsYCBpZiBzb21ldGhpbmcgZWxzZSBzaG91bGQgZW5kIHRoZVxuICAgKiAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24uXG4gICAqL1xuXG59O1xuUGFyc2VyX1BhcnNlci5TVVBTVUJfR1JFRURJTkVTUyA9IDE7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3BhcnNlVHJlZS5qc1xuLyoqXG4gKiBQcm92aWRlcyBhIHNpbmdsZSBmdW5jdGlvbiBmb3IgcGFyc2luZyBhbiBleHByZXNzaW9uIHVzaW5nIGEgUGFyc2VyXG4gKiBUT0RPKGVtaWx5KTogUmVtb3ZlIHRoaXNcbiAqL1xuXG5cblxuLyoqXG4gKiBQYXJzZXMgYW4gZXhwcmVzc2lvbiB1c2luZyBhIFBhcnNlciwgdGhlbiByZXR1cm5zIHRoZSBwYXJzZWQgcmVzdWx0LlxuICovXG52YXIgcGFyc2VUcmVlX3BhcnNlVHJlZSA9IGZ1bmN0aW9uIHBhcnNlVHJlZSh0b1BhcnNlLCBzZXR0aW5ncykge1xuICBpZiAoISh0eXBlb2YgdG9QYXJzZSA9PT0gJ3N0cmluZycgfHwgdG9QYXJzZSBpbnN0YW5jZW9mIFN0cmluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdLYVRlWCBjYW4gb25seSBwYXJzZSBzdHJpbmcgdHlwZWQgZXhwcmVzc2lvbicpO1xuICB9XG5cbiAgdmFyIHBhcnNlciA9IG5ldyBQYXJzZXJfUGFyc2VyKHRvUGFyc2UsIHNldHRpbmdzKTsgLy8gQmxhbmsgb3V0IGFueSBcXGRmQHRhZyB0byBhdm9pZCBzcHVyaW91cyBcIkR1cGxpY2F0ZSBcXHRhZ1wiIGVycm9yc1xuXG4gIGRlbGV0ZSBwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5jdXJyZW50W1wiXFxcXGRmQHRhZ1wiXTtcbiAgdmFyIHRyZWUgPSBwYXJzZXIucGFyc2UoKTsgLy8gSWYgdGhlIGlucHV0IHVzZWQgXFx0YWcsIGl0IHdpbGwgc2V0IHRoZSBcXGRmQHRhZyBtYWNybyB0byB0aGUgdGFnLlxuICAvLyBJbiB0aGlzIGNhc2UsIHdlIHNlcGFyYXRlbHkgcGFyc2UgdGhlIHRhZyBhbmQgd3JhcCB0aGUgdHJlZS5cblxuICBpZiAocGFyc2VyLmd1bGxldC5tYWNyb3MuZ2V0KFwiXFxcXGRmQHRhZ1wiKSkge1xuICAgIGlmICghc2V0dGluZ3MuZGlzcGxheU1vZGUpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlxcXFx0YWcgd29ya3Mgb25seSBpbiBkaXNwbGF5IGVxdWF0aW9uc1wiKTtcbiAgICB9XG5cbiAgICBwYXJzZXIuZ3VsbGV0LmZlZWQoXCJcXFxcZGZAdGFnXCIpO1xuICAgIHRyZWUgPSBbe1xuICAgICAgdHlwZTogXCJ0YWdcIixcbiAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgYm9keTogdHJlZSxcbiAgICAgIHRhZzogcGFyc2VyLnBhcnNlKClcbiAgICB9XTtcbiAgfVxuXG4gIHJldHVybiB0cmVlO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3BhcnNlVHJlZSA9IChwYXJzZVRyZWVfcGFyc2VUcmVlKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4va2F0ZXguanNcbi8qIGVzbGludCBuby1jb25zb2xlOjAgKi9cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBLYVRlWC4gSGVyZSwgd2UgZXhwb3NlIGZ1bmN0aW9ucyBmb3JcbiAqIHJlbmRlcmluZyBleHByZXNzaW9ucyBlaXRoZXIgdG8gRE9NIG5vZGVzIG9yIHRvIG1hcmt1cCBzdHJpbmdzLlxuICpcbiAqIFdlIGFsc28gZXhwb3NlIHRoZSBQYXJzZUVycm9yIGNsYXNzIHRvIGNoZWNrIGlmIGVycm9ycyB0aHJvd24gZnJvbSBLYVRlWCBhcmVcbiAqIGVycm9ycyBpbiB0aGUgZXhwcmVzc2lvbiwgb3IgZXJyb3JzIGluIGphdmFzY3JpcHQgaGFuZGxpbmcuXG4gKi9cblxuXG5cblxuXG5cblxuXG5cblxuLyoqXG4gKiBQYXJzZSBhbmQgYnVpbGQgYW4gZXhwcmVzc2lvbiwgYW5kIHBsYWNlIHRoYXQgZXhwcmVzc2lvbiBpbiB0aGUgRE9NIG5vZGVcbiAqIGdpdmVuLlxuICovXG52YXIga2F0ZXhfcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKGV4cHJlc3Npb24sIGJhc2VOb2RlLCBvcHRpb25zKSB7XG4gIGJhc2VOb2RlLnRleHRDb250ZW50ID0gXCJcIjtcbiAgdmFyIG5vZGUgPSBrYXRleF9yZW5kZXJUb0RvbVRyZWUoZXhwcmVzc2lvbiwgb3B0aW9ucykudG9Ob2RlKCk7XG4gIGJhc2VOb2RlLmFwcGVuZENoaWxkKG5vZGUpO1xufTsgLy8gS2FUZVgncyBzdHlsZXMgZG9uJ3Qgd29yayBwcm9wZXJseSBpbiBxdWlya3MgbW9kZS4gUHJpbnQgb3V0IGFuIGVycm9yLCBhbmRcbi8vIGRpc2FibGUgcmVuZGVyaW5nLlxuXG5cbmlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgaWYgKGRvY3VtZW50LmNvbXBhdE1vZGUgIT09IFwiQ1NTMUNvbXBhdFwiKSB7XG4gICAgdHlwZW9mIGNvbnNvbGUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29uc29sZS53YXJuKFwiV2FybmluZzogS2FUZVggZG9lc24ndCB3b3JrIGluIHF1aXJrcyBtb2RlLiBNYWtlIHN1cmUgeW91ciBcIiArIFwid2Vic2l0ZSBoYXMgYSBzdWl0YWJsZSBkb2N0eXBlLlwiKTtcblxuICAgIGthdGV4X3JlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkthVGVYIGRvZXNuJ3Qgd29yayBpbiBxdWlya3MgbW9kZS5cIik7XG4gICAgfTtcbiAgfVxufVxuLyoqXG4gKiBQYXJzZSBhbmQgYnVpbGQgYW4gZXhwcmVzc2lvbiwgYW5kIHJldHVybiB0aGUgbWFya3VwIGZvciB0aGF0LlxuICovXG5cblxudmFyIHJlbmRlclRvU3RyaW5nID0gZnVuY3Rpb24gcmVuZGVyVG9TdHJpbmcoZXhwcmVzc2lvbiwgb3B0aW9ucykge1xuICB2YXIgbWFya3VwID0ga2F0ZXhfcmVuZGVyVG9Eb21UcmVlKGV4cHJlc3Npb24sIG9wdGlvbnMpLnRvTWFya3VwKCk7XG4gIHJldHVybiBtYXJrdXA7XG59O1xuLyoqXG4gKiBQYXJzZSBhbiBleHByZXNzaW9uIGFuZCByZXR1cm4gdGhlIHBhcnNlIHRyZWUuXG4gKi9cblxuXG52YXIga2F0ZXhfZ2VuZXJhdGVQYXJzZVRyZWUgPSBmdW5jdGlvbiBnZW5lcmF0ZVBhcnNlVHJlZShleHByZXNzaW9uLCBvcHRpb25zKSB7XG4gIHZhciBzZXR0aW5ncyA9IG5ldyBTZXR0aW5nc19TZXR0aW5ncyhvcHRpb25zKTtcbiAgcmV0dXJuIHNyY19wYXJzZVRyZWUoZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xufTtcbi8qKlxuICogSWYgdGhlIGdpdmVuIGVycm9yIGlzIGEgS2FUZVggUGFyc2VFcnJvciBhbmQgb3B0aW9ucy50aHJvd09uRXJyb3IgaXMgZmFsc2UsXG4gKiByZW5kZXJzIHRoZSBpbnZhbGlkIExhVGVYIGFzIGEgc3BhbiB3aXRoIGhvdmVyIHRpdGxlIGdpdmluZyB0aGUgS2FUZVhcbiAqIGVycm9yIG1lc3NhZ2UuICBPdGhlcndpc2UsIHNpbXBseSB0aHJvd3MgdGhlIGVycm9yLlxuICovXG5cblxudmFyIGthdGV4X3JlbmRlckVycm9yID0gZnVuY3Rpb24gcmVuZGVyRXJyb3IoZXJyb3IsIGV4cHJlc3Npb24sIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMudGhyb3dPbkVycm9yIHx8ICEoZXJyb3IgaW5zdGFuY2VvZiBzcmNfUGFyc2VFcnJvcikpIHtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIHZhciBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wia2F0ZXgtZXJyb3JcIl0sIFtuZXcgZG9tVHJlZV9TeW1ib2xOb2RlKGV4cHJlc3Npb24pXSk7XG4gIG5vZGUuc2V0QXR0cmlidXRlKFwidGl0bGVcIiwgZXJyb3IudG9TdHJpbmcoKSk7XG4gIG5vZGUuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJjb2xvcjpcIiArIG9wdGlvbnMuZXJyb3JDb2xvcik7XG4gIHJldHVybiBub2RlO1xufTtcbi8qKlxuICogR2VuZXJhdGVzIGFuZCByZXR1cm5zIHRoZSBrYXRleCBidWlsZCB0cmVlLiBUaGlzIGlzIHVzZWQgZm9yIGFkdmFuY2VkXG4gKiB1c2UgY2FzZXMgKGxpa2UgcmVuZGVyaW5nIHRvIGN1c3RvbSBvdXRwdXQpLlxuICovXG5cblxudmFyIGthdGV4X3JlbmRlclRvRG9tVHJlZSA9IGZ1bmN0aW9uIHJlbmRlclRvRG9tVHJlZShleHByZXNzaW9uLCBvcHRpb25zKSB7XG4gIHZhciBzZXR0aW5ncyA9IG5ldyBTZXR0aW5nc19TZXR0aW5ncyhvcHRpb25zKTtcblxuICB0cnkge1xuICAgIHZhciB0cmVlID0gc3JjX3BhcnNlVHJlZShleHByZXNzaW9uLCBzZXR0aW5ncyk7XG4gICAgcmV0dXJuIGJ1aWxkVHJlZV9idWlsZFRyZWUodHJlZSwgZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBrYXRleF9yZW5kZXJFcnJvcihlcnJvciwgZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICB9XG59O1xuLyoqXG4gKiBHZW5lcmF0ZXMgYW5kIHJldHVybnMgdGhlIGthdGV4IGJ1aWxkIHRyZWUsIHdpdGgganVzdCBIVE1MIChubyBNYXRoTUwpLlxuICogVGhpcyBpcyB1c2VkIGZvciBhZHZhbmNlZCB1c2UgY2FzZXMgKGxpa2UgcmVuZGVyaW5nIHRvIGN1c3RvbSBvdXRwdXQpLlxuICovXG5cblxudmFyIGthdGV4X3JlbmRlclRvSFRNTFRyZWUgPSBmdW5jdGlvbiByZW5kZXJUb0hUTUxUcmVlKGV4cHJlc3Npb24sIG9wdGlvbnMpIHtcbiAgdmFyIHNldHRpbmdzID0gbmV3IFNldHRpbmdzX1NldHRpbmdzKG9wdGlvbnMpO1xuXG4gIHRyeSB7XG4gICAgdmFyIHRyZWUgPSBzcmNfcGFyc2VUcmVlKGV4cHJlc3Npb24sIHNldHRpbmdzKTtcbiAgICByZXR1cm4gYnVpbGRUcmVlX2J1aWxkSFRNTFRyZWUodHJlZSwgZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBrYXRleF9yZW5kZXJFcnJvcihlcnJvciwgZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICB9XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBrYXRleF8wID0gKHtcbiAgLyoqXG4gICAqIEN1cnJlbnQgS2FUZVggdmVyc2lvblxuICAgKi9cbiAgdmVyc2lvbjogXCIwLjExLjBcIixcblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgZ2l2ZW4gTGFUZVggaW50byBhbiBIVE1MK01hdGhNTCBjb21iaW5hdGlvbiwgYW5kIGFkZHNcbiAgICogaXQgYXMgYSBjaGlsZCB0byB0aGUgc3BlY2lmaWVkIERPTSBub2RlLlxuICAgKi9cbiAgcmVuZGVyOiBrYXRleF9yZW5kZXIsXG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGdpdmVuIExhVGVYIGludG8gYW4gSFRNTCtNYXRoTUwgY29tYmluYXRpb24gc3RyaW5nLFxuICAgKiBmb3Igc2VuZGluZyB0byB0aGUgY2xpZW50LlxuICAgKi9cbiAgcmVuZGVyVG9TdHJpbmc6IHJlbmRlclRvU3RyaW5nLFxuXG4gIC8qKlxuICAgKiBLYVRlWCBlcnJvciwgdXN1YWxseSBkdXJpbmcgcGFyc2luZy5cbiAgICovXG4gIFBhcnNlRXJyb3I6IHNyY19QYXJzZUVycm9yLFxuXG4gIC8qKlxuICAgKiBQYXJzZXMgdGhlIGdpdmVuIExhVGVYIGludG8gS2FUZVgncyBpbnRlcm5hbCBwYXJzZSB0cmVlIHN0cnVjdHVyZSxcbiAgICogd2l0aG91dCByZW5kZXJpbmcgdG8gSFRNTCBvciBNYXRoTUwuXG4gICAqXG4gICAqIE5PVEU6IFRoaXMgbWV0aG9kIGlzIG5vdCBjdXJyZW50bHkgcmVjb21tZW5kZWQgZm9yIHB1YmxpYyB1c2UuXG4gICAqIFRoZSBpbnRlcm5hbCB0cmVlIHJlcHJlc2VudGF0aW9uIGlzIHVuc3RhYmxlIGFuZCBpcyB2ZXJ5IGxpa2VseVxuICAgKiB0byBjaGFuZ2UuIFVzZSBhdCB5b3VyIG93biByaXNrLlxuICAgKi9cbiAgX19wYXJzZToga2F0ZXhfZ2VuZXJhdGVQYXJzZVRyZWUsXG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGdpdmVuIExhVGVYIGludG8gYW4gSFRNTCtNYXRoTUwgaW50ZXJuYWwgRE9NIHRyZWVcbiAgICogcmVwcmVzZW50YXRpb24sIHdpdGhvdXQgZmxhdHRlbmluZyB0aGF0IHJlcHJlc2VudGF0aW9uIHRvIGEgc3RyaW5nLlxuICAgKlxuICAgKiBOT1RFOiBUaGlzIG1ldGhvZCBpcyBub3QgY3VycmVudGx5IHJlY29tbWVuZGVkIGZvciBwdWJsaWMgdXNlLlxuICAgKiBUaGUgaW50ZXJuYWwgdHJlZSByZXByZXNlbnRhdGlvbiBpcyB1bnN0YWJsZSBhbmQgaXMgdmVyeSBsaWtlbHlcbiAgICogdG8gY2hhbmdlLiBVc2UgYXQgeW91ciBvd24gcmlzay5cbiAgICovXG4gIF9fcmVuZGVyVG9Eb21UcmVlOiBrYXRleF9yZW5kZXJUb0RvbVRyZWUsXG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGdpdmVuIExhVGVYIGludG8gYW4gSFRNTCBpbnRlcm5hbCBET00gdHJlZSByZXByZXNlbnRhdGlvbixcbiAgICogd2l0aG91dCBNYXRoTUwgYW5kIHdpdGhvdXQgZmxhdHRlbmluZyB0aGF0IHJlcHJlc2VudGF0aW9uIHRvIGEgc3RyaW5nLlxuICAgKlxuICAgKiBOT1RFOiBUaGlzIG1ldGhvZCBpcyBub3QgY3VycmVudGx5IHJlY29tbWVuZGVkIGZvciBwdWJsaWMgdXNlLlxuICAgKiBUaGUgaW50ZXJuYWwgdHJlZSByZXByZXNlbnRhdGlvbiBpcyB1bnN0YWJsZSBhbmQgaXMgdmVyeSBsaWtlbHlcbiAgICogdG8gY2hhbmdlLiBVc2UgYXQgeW91ciBvd24gcmlzay5cbiAgICovXG4gIF9fcmVuZGVyVG9IVE1MVHJlZToga2F0ZXhfcmVuZGVyVG9IVE1MVHJlZSxcblxuICAvKipcbiAgICogZXh0ZW5kcyBpbnRlcm5hbCBmb250IG1ldHJpY3Mgb2JqZWN0IHdpdGggYSBuZXcgb2JqZWN0XG4gICAqIGVhY2gga2V5IGluIHRoZSBuZXcgb2JqZWN0IHJlcHJlc2VudHMgYSBmb250IG5hbWVcbiAgKi9cbiAgX19zZXRGb250TWV0cmljczogc2V0Rm9udE1ldHJpY3MsXG5cbiAgLyoqXG4gICAqIGFkZHMgYSBuZXcgc3ltYm9sIHRvIGJ1aWx0aW4gc3ltYm9scyB0YWJsZVxuICAgKi9cbiAgX19kZWZpbmVTeW1ib2w6IGRlZmluZVN5bWJvbCxcblxuICAvKipcbiAgICogYWRkcyBhIG5ldyBtYWNybyB0byBidWlsdGluIG1hY3JvIGxpc3RcbiAgICovXG4gIF9fZGVmaW5lTWFjcm86IGRlZmluZU1hY3JvLFxuXG4gIC8qKlxuICAgKiBFeHBvc2UgdGhlIGRvbSB0cmVlIG5vZGUgdHlwZXMsIHdoaWNoIGNhbiBiZSB1c2VmdWwgZm9yIHR5cGUgY2hlY2tpbmcgbm9kZXMuXG4gICAqXG4gICAqIE5PVEU6IFRoaXMgbWV0aG9kIGlzIG5vdCBjdXJyZW50bHkgcmVjb21tZW5kZWQgZm9yIHB1YmxpYyB1c2UuXG4gICAqIFRoZSBpbnRlcm5hbCB0cmVlIHJlcHJlc2VudGF0aW9uIGlzIHVuc3RhYmxlIGFuZCBpcyB2ZXJ5IGxpa2VseVxuICAgKiB0byBjaGFuZ2UuIFVzZSBhdCB5b3VyIG93biByaXNrLlxuICAgKi9cbiAgX19kb21UcmVlOiB7XG4gICAgU3BhbjogZG9tVHJlZV9TcGFuLFxuICAgIEFuY2hvcjogZG9tVHJlZV9BbmNob3IsXG4gICAgU3ltYm9sTm9kZTogZG9tVHJlZV9TeW1ib2xOb2RlLFxuICAgIFN2Z05vZGU6IFN2Z05vZGUsXG4gICAgUGF0aE5vZGU6IGRvbVRyZWVfUGF0aE5vZGUsXG4gICAgTGluZU5vZGU6IExpbmVOb2RlXG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9rYXRleC53ZWJwYWNrLmpzXG4vKipcbiAqIFRoaXMgaXMgdGhlIHdlYnBhY2sgZW50cnkgcG9pbnQgZm9yIEthVGVYLiBBcyBFQ01BU2NyaXB0LCBmbG93WzFdIGFuZCBqZXN0WzJdXG4gKiBkb2Vzbid0IHN1cHBvcnQgQ1NTIG1vZHVsZXMgbmF0aXZlbHksIGEgc2VwYXJhdGUgZW50cnkgcG9pbnQgaXMgdXNlZCBhbmRcbiAqIGl0IGlzIG5vdCBmbG93dHlwZWQuXG4gKlxuICogWzFdIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2xhbWJkYWhhbmRzL2QxOWUwZGE5NjI4NWI3NDlmMGVmXG4gKiBbMl0gaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vamVzdC9kb2NzL2VuL3dlYnBhY2suaHRtbFxuICovXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIga2F0ZXhfd2VicGFjayA9IF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGthdGV4XzApO1xuXG4vKioqLyB9KVxuLyoqKioqKi8gXSlbXCJkZWZhdWx0XCJdO1xufSk7IiwidmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG4vLyBvdXIgY29uc3RydWN0b3JcbmZ1bmN0aW9uIEtleVRyZWVTdG9yZShvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuICAgIHZhciBERUZBVUxUX1NFUEFSQVRPUiA9ICcuJztcblxuICAgIHRoaXMuc3RvcmFnZSA9IHt9O1xuICAgIHRoaXMuc2VwYXJhdG9yID0gb3B0aW9ucy5zZXBhcmF0b3IgfHwgREVGQVVMVF9TRVBBUkFUT1I7XG59XG5cbi8vIGFkZCBhbiBvYmplY3QgdG8gdGhlIHN0b3JlXG5LZXlUcmVlU3RvcmUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChrZXlwYXRoLCBvYmopIHtcbiAgICB2YXIgYXJyID0gdGhpcy5zdG9yYWdlW2tleXBhdGhdIHx8ICh0aGlzLnN0b3JhZ2Vba2V5cGF0aF0gPSBbXSk7XG4gICAgYXJyLnB1c2gob2JqKTtcbn07XG5cbi8vIHJlbW92ZSBhbiBvYmplY3RcbktleVRyZWVTdG9yZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKG9iaikge1xuICAgIHZhciBwYXRoLCBhcnI7XG4gICAgZm9yIChwYXRoIGluIHRoaXMuc3RvcmFnZSkge1xuICAgICAgICBhcnIgPSB0aGlzLnN0b3JhZ2VbcGF0aF07XG4gICAgICAgIGFyci5zb21lKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICAgICAgaWYgKGl0ZW0gPT09IG9iaikge1xuICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG4vLyBnZXQgYXJyYXkgb2YgYWxsIGFsbCByZWxldmFudCBmdW5jdGlvbnMsIHdpdGhvdXQga2V5c1xuS2V5VHJlZVN0b3JlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5cGF0aCkge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIga2V5O1xuXG4gICAgZm9yIChrZXkgaW4gdGhpcy5zdG9yYWdlKSB7XG4gICAgICAgIGlmICgha2V5cGF0aCB8fCBrZXlwYXRoID09PSBrZXkgfHwga2V5LmluZGV4T2Yoa2V5cGF0aCArIHRoaXMuc2VwYXJhdG9yKSA9PT0gMCkge1xuICAgICAgICAgICAgcmVzID0gcmVzLmNvbmNhdCh0aGlzLnN0b3JhZ2Vba2V5XSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xufTtcblxuLy8gZ2V0IGFsbCByZXN1bHRzIHRoYXQgbWF0Y2gga2V5cGF0aCBidXQgc3RpbGwgZ3JvdXBlZCBieSBrZXlcbktleVRyZWVTdG9yZS5wcm90b3R5cGUuZ2V0R3JvdXBlZCA9IGZ1bmN0aW9uIChrZXlwYXRoKSB7XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIHZhciBrZXk7XG5cbiAgICBmb3IgKGtleSBpbiB0aGlzLnN0b3JhZ2UpIHtcbiAgICAgICAgaWYgKCFrZXlwYXRoIHx8IGtleXBhdGggPT09IGtleSB8fCBrZXkuaW5kZXhPZihrZXlwYXRoICsgdGhpcy5zZXBhcmF0b3IpID09PSAwKSB7XG4gICAgICAgICAgICByZXNba2V5XSA9IHNsaWNlLmNhbGwodGhpcy5zdG9yYWdlW2tleV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbn07XG5cbi8vIGdldCBhbGwgcmVzdWx0cyB0aGF0IG1hdGNoIGtleXBhdGggYnV0IHN0aWxsIGdyb3VwZWQgYnkga2V5XG5LZXlUcmVlU3RvcmUucHJvdG90eXBlLmdldEFsbCA9IGZ1bmN0aW9uIChrZXlwYXRoKSB7XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIHZhciBrZXk7XG5cbiAgICBmb3IgKGtleSBpbiB0aGlzLnN0b3JhZ2UpIHtcbiAgICAgICAgaWYgKGtleXBhdGggPT09IGtleSB8fCBrZXkuaW5kZXhPZihrZXlwYXRoICsgdGhpcy5zZXBhcmF0b3IpID09PSAwKSB7XG4gICAgICAgICAgICByZXNba2V5XSA9IHNsaWNlLmNhbGwodGhpcy5zdG9yYWdlW2tleV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbn07XG5cbi8vIHJ1biBhbGwgbWF0Y2hlcyB3aXRoIG9wdGlvbmFsIGNvbnRleHRcbktleVRyZWVTdG9yZS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKGtleXBhdGgsIGNvbnRleHQpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICB0aGlzLmdldChrZXlwYXRoKS5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgICBmbi5hcHBseShjb250ZXh0IHx8IHRoaXMsIGFyZ3MpO1xuICAgIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBLZXlUcmVlU3RvcmU7XG4iLCJmdW5jdGlvbiBpc0hUTUxFbGVtZW50IChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJlxuICAgICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JykgJiZcbiAgICAob2JqLm5vZGVUeXBlID09PSAxKSAmJlxuICAgICh0eXBlb2Ygb2JqLnN0eWxlID09PSAnb2JqZWN0JykgJiZcbiAgICAodHlwZW9mIG9iai5vd25lckRvY3VtZW50ID09PSAnb2JqZWN0Jylcbn1cblxuZnVuY3Rpb24gaXNBIChvYmopIHtcbiAgcmV0dXJuIGlzSFRNTEVsZW1lbnQob2JqKSAmJiBvYmoudGFnTmFtZSA9PT0gJ0EnXG59XG5cbmZ1bmN0aW9uIGNsb3Nlc3RBIChjaGVja05vZGUpIHtcbiAgZG8ge1xuICAgIGlmIChpc0EoY2hlY2tOb2RlKSkge1xuICAgICAgcmV0dXJuIGNoZWNrTm9kZVxuICAgIH1cbiAgfSB3aGlsZSAoKGNoZWNrTm9kZSA9IGNoZWNrTm9kZS5wYXJlbnROb2RlKSlcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTGVhZGluZ1NsYXNoIChwYXRobmFtZSkge1xuICBpZiAocGF0aG5hbWUuY2hhckF0KDApICE9PSAnLycpIHtcbiAgICBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lXG4gIH1cbiAgcmV0dXJuIHBhdGhuYW1lXG59XG5cbmZ1bmN0aW9uIGlzUmVsYXRpdmVVcmwgKGhyZWYpIHtcbiAgdmFyIHIgPSAvXmh0dHBzPzpcXC9cXC98XlxcL1xcLy9pXG4gIHJldHVybiAhci50ZXN0KGhyZWYpXG59XG5cbmZ1bmN0aW9uIGlzU2Vjb25kYXJ5QnV0dG9uIChldmVudCkge1xuICByZXR1cm4gKHR5cGVvZiBldmVudCA9PT0gJ29iamVjdCcpICYmICgnYnV0dG9uJyBpbiBldmVudCkgJiYgZXZlbnQuYnV0dG9uICE9PSAwXG59XG5cbi8vIFsxXSBodHRwOi8vYmxvZ3MubXNkbi5jb20vYi9pZWludGVybmFscy9hcmNoaXZlLzIwMTEvMDIvMjgvaW50ZXJuZXQtZXhwbG9yZXItd2luZG93LWxvY2F0aW9uLXBhdGhuYW1lLW1pc3Npbmctc2xhc2gtYW5kLWhvc3QtaGFzLXBvcnQuYXNweFxuLy8gWzJdIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9jYXRjaC1saW5rcy9ibG9iLzdhZWUyMTljZGMyYzg0NWM3OGNhYWQ2MDcwODg2YTkzODBiOTBlNGMvaW5kZXguanMjTDEzLUwxN1xuLy8gWzNdIElFMTAgKGFuZCBwb3NzaWJseSBsYXRlcikgcmVwb3J0IHRoYXQgYW5jaG9yLnBvcnQgaXMgdGhlIGRlZmF1bHQgcG9ydFxuLy8gICAgIGJ1dCBkb250IGFwcGVuZCBpdCB0byB0aGUgaG9zdG5hbWUsIHNvIGlmIHRoZSBob3N0IGRvZXNudCBlbmQgd2l0aCB0aGUgcG9ydFxuLy8gICAgIGFwcGVuZCBpdCB0byB0aGUgYW5jaG9yIGhvc3QgYXMgd2VsbFxuXG5mdW5jdGlvbiBpc0xvY2FsIChldmVudCwgYW5jaG9yLCBsb29rRm9ySGFzaCkge1xuICBldmVudCB8fCAoZXZlbnQgPSB7fSlcblxuICAvLyBTa2lwIG1vZGlmaWVyIGV2ZW50c1xuICBpZiAoZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtleSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyBTa2lwIG5vbi1wcmltYXJ5IGNsaWNrc1xuICBpZiAoaXNTZWNvbmRhcnlCdXR0b24oZXZlbnQpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIElmIHdlIGhhdmUgYW4gYW5jaG9yIGJ1dCBpdHMgbm90IGFuIEEgdGFnXG4gIC8vIHRyeSB0byBmaW5kIHRoZSBjbG9zZXN0IG9uZVxuICBpZiAoYW5jaG9yICYmICFpc0EoYW5jaG9yKSkge1xuICAgIGFuY2hvciA9IGNsb3Nlc3RBKGFuY2hvcilcbiAgfVxuXG4gIC8vIE9ubHkgdGVzdCBhbmNob3IgZWxlbWVudHNcbiAgaWYgKCFhbmNob3IgfHwgIWlzQShhbmNob3IpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIERvbnQgdGVzdCBhbmNob3JzIHdpdGggdGFyZ2V0PV9ibGFua1xuICBpZiAoYW5jaG9yLnRhcmdldCA9PT0gJ19ibGFuaycpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gSUU5IGRvZXNuJ3QgcHV0IGEgbGVhZGluZyBzbGFzaCBvbiBhbmNob3IucGF0aG5hbWUgWzFdXG4gIHZhciBhUGF0aG5hbWUgPSBub3JtYWxpemVMZWFkaW5nU2xhc2goYW5jaG9yLnBhdGhuYW1lKVxuICB2YXIgd1BhdGhuYW1lID0gbm9ybWFsaXplTGVhZGluZ1NsYXNoKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSlcbiAgdmFyIGFIb3N0ID0gYW5jaG9yLmhvc3RcbiAgdmFyIGFQb3J0ID0gYW5jaG9yLnBvcnRcbiAgdmFyIHdIb3N0ID0gd2luZG93LmxvY2F0aW9uLmhvc3RcbiAgdmFyIHdQb3J0ID0gd2luZG93LmxvY2F0aW9uLnBvcnRcblxuICAvLyBJbiBzb21lIGNhc2VzLCBJRSB3aWxsIGhhdmUgYSBibGFuayBob3N0IHByb3BlcnR5IHdoZW4gdGhlIGhyZWZcbiAgLy8gaXMgYSByZWxhdGl2ZSBVUkwuIFdlIGNhbiBjaGVjayBmb3IgcmVsYXRpdmVuZXNzIHZpYSB0aGUgYWNob3Inc1xuICAvLyBocmVmIGF0dHJpYnV0ZSBhbmQgdGhlbiBzZXQgdGhlIGFuY2hvcidzIGhvc3QgdG8gdGhlIHdpbmRvdydzIGhvc3QuXG4gIGlmIChhSG9zdCA9PT0gJycgJiZcbiAgICAnYXR0cmlidXRlcycgaW4gYW5jaG9yICYmXG4gICAgJ2hyZWYnIGluIGFuY2hvci5hdHRyaWJ1dGVzICYmXG4gICAgJ3ZhbHVlJyBpbiBhbmNob3IuYXR0cmlidXRlcy5ocmVmICYmXG4gICAgaXNSZWxhdGl2ZVVybChhbmNob3IuYXR0cmlidXRlcy5ocmVmLnZhbHVlKSkge1xuICAgIGFIb3N0ID0gd0hvc3RcbiAgfVxuXG4gIC8vIFNvbWUgYnJvd3NlcnMgKENocm9tZSAzNikgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBmb3IgYW5jaG9yLmhhc2hcbiAgLy8gZXZlbiB3aGVuIGhyZWY9XCIjXCIsIHNvIHdlIGFsc28gY2hlY2sgdGhlIGhyZWZcbiAgdmFyIGFIYXNoID0gYW5jaG9yLmhhc2ggfHwgKGFuY2hvci5ocmVmLmluZGV4T2YoJyMnKSA+IC0xID8gJyMnICsgYW5jaG9yLmhyZWYuc3BsaXQoJyMnKVsxXSA6IG51bGwpXG4gIHZhciBpblBhZ2VIYXNoXG5cbiAgLy8gV2luZG93IGhhcyBubyBwb3J0LCBidXQgYW5jaG9yIGhhcyB0aGUgZGVmYXVsdCBwb3J0XG4gIGlmICghd1BvcnQgJiYgYVBvcnQgJiYgKGFQb3J0ID09PSAnODAnIHx8IGFQb3J0ID09PSAnNDQzJykpIHtcbiAgICAvLyBJRTkgc29tZXRpbWVzIGluY2x1ZGVzIHRoZSBkZWZhdWx0IHBvcnQgKDgwIG9yIDQ0Mykgb24gYW5jaG9yLmhvc3RcbiAgICAvLyBzbyB3ZSBhcHBlbmQgdGhlIGRlZmF1bHQgcG9ydCB0byB0aGUgd2luZG93IGhvc3QgaW4gdGhpcyBjYXNlXG4gICAgLy8gc28gdGhleSB3aWxsIG1hdGNoIGZvciB0aGUgaG9zdCBlcXVhbGl0eSBjaGVjayBbMV1cbiAgICB3SG9zdCArPSAnOicgKyBhUG9ydFxuICAgIGFIb3N0ICs9IGFIb3N0LmluZGV4T2YoYVBvcnQsIGFIb3N0Lmxlbmd0aCAtIGFQb3J0Lmxlbmd0aCkgPT09IC0xID8gJzonICsgYVBvcnQgOiAnJyAvLyBbM11cbiAgfVxuXG4gIC8vIEhvc3RzIGFyZSB0aGUgc2FtZSwgaXRzIGEgbG9jYWwgbGlua1xuICBpZiAoYUhvc3QgPT09IHdIb3N0KSB7XG4gICAgLy8gSWYgZXZlcnl0aGluZyBlbHNlIGlzIHRoZSBzYW1lXG4gICAgLy8gYW5kIGhhc2ggZXhpc3RzLCB0aGVuIGl0IGlzIGFuIGluLXBhZ2UgaGFzaCBbMl1cbiAgICBpblBhZ2VIYXNoID1cbiAgICAgIGFQYXRobmFtZSA9PT0gd1BhdGhuYW1lICYmXG4gICAgICBhbmNob3Iuc2VhcmNoID09PSB3aW5kb3cubG9jYXRpb24uc2VhcmNoICYmXG4gICAgICBhSGFzaFxuXG4gICAgaWYgKGxvb2tGb3JIYXNoID09PSB0cnVlKSB7XG4gICAgICAvLyBJZiB3ZSBhcmUgbG9va2luZyBmb3IgdGhlIGhhc2ggdGhlbiB0aGlzIHdpbGxcbiAgICAgIC8vIG9ubHkgcmV0dXJuIGEgdHJ1dGh5IHZhbHVlIGlmIHRoZSBsaW5rXG4gICAgICAvLyBpcyBhbiAqaW4tcGFnZSogaGFzaCBsaW5rXG4gICAgICByZXR1cm4gaW5QYWdlSGFzaFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiB0aGlzIGlzIGFuIGluIHBhZ2UgaGFzaCBsaW5rXG4gICAgICAvLyB0aGVuIGlnbm9yZSBpdCBiZWNhdXNlIHdlIHdlcmVudCBsb29raW5nIGZvciBoYXNoIGxpbmtzXG4gICAgICByZXR1cm4gaW5QYWdlSGFzaFxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiBhUGF0aG5hbWUgKyAoYW5jaG9yLnNlYXJjaCB8fCAnJykgKyAoYUhhc2ggfHwgJycpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuLy8gVGFrZSB0d28gYXJndW1lbnRzIGFuZCByZXR1cm4gYW4gb3JkZXJlZCBhcnJheSBvZiBbZXZlbnQsIGFuY2hvcl1cbmZ1bmN0aW9uIGdldEV2ZW50QW5kQW5jaG9yIChhcmcxLCBhcmcyKSB7XG4gIHZhciBldiA9IG51bGxcbiAgdmFyIGFuY2hvciA9IG51bGxcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIC8vIFR3byBhcmd1bWVudHMgd2lsbCBjb21lIGluIHRoaXMgb3JkZXJcbiAgICBldiA9IGFyZzFcbiAgICBhbmNob3IgPSBhcmcyXG4gIH0gZWxzZSBpZiAoaXNIVE1MRWxlbWVudChhcmcxKSkge1xuICAgIC8vIElmIG91ciBmaXJzdCBhcmcgaXMgYW4gZWxlbWVudFxuICAgIC8vIHRoZW4gdXNlIHRoYXQgYXMgb3VyIGFuY2hvclxuICAgIGFuY2hvciA9IGFyZzFcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2Ugb3VyIGFyZ3VtZW50IGlzIGFuIGV2ZW50XG4gICAgZXYgPSBhcmcxXG4gIH1cblxuICAgIC8vIElmIHRoZXJlIGlzIG5vIGFuY2hvciwgYnV0IHdlIGhhdmUgYW4gZXZlbnRcbiAgICAvLyB0aGVuIHVzZSBldmVudC50YXJnZXRcbiAgaWYgKCFhbmNob3IgJiYgZXYgJiYgZXYudGFyZ2V0KSB7XG4gICAgYW5jaG9yID0gZXYudGFyZ2V0XG4gIH1cblxuICAgIC8vIFJldHVybiBhbiBhcnJheSBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIHdpdGggRnVuY3Rpb24uYXBwbHlcbiAgcmV0dXJuIFtldiwgYW5jaG9yXVxufVxuXG4vLyBGdW5jdGlvbnMgdG8gYmUgdXNlZCBpbiBleHBvcnRzLiBEZWZpbmVkIGhlcmUgZm9yIGFsaWFzIHB1cnBvc2VzXG5mdW5jdGlvbiBwYXRobmFtZSAoKSB7XG4gIHJldHVybiBpc0xvY2FsLmFwcGx5KG51bGwsIGdldEV2ZW50QW5kQW5jaG9yLmFwcGx5KG51bGwsIGFyZ3VtZW50cykpXG59XG5cbmZ1bmN0aW9uIGhhc2ggKCkge1xuICByZXR1cm4gaXNMb2NhbC5hcHBseShudWxsLCBnZXRFdmVudEFuZEFuY2hvci5hcHBseShudWxsLCBhcmd1bWVudHMpLmNvbmNhdCh0cnVlKSlcbn1cblxuZnVuY3Rpb24gYWN0aXZlICgpIHtcbiAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpXG4gIHZhciBsYXN0ID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdXG4gIHZhciBjaGVja1BhdGggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWVcblxuICBpZiAodHlwZW9mIGxhc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgY2hlY2tQYXRoID0gbGFzdFxuICAgIGFyZ3MgPSBhcmdzLnNsaWNlKDAsIC0xKVxuICB9XG5cbiAgcmV0dXJuIHBhdGhuYW1lLmFwcGx5KG51bGwsIGFyZ3MpID09PSBub3JtYWxpemVMZWFkaW5nU2xhc2goY2hlY2tQYXRoKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNMb2NhbDogaXNMb2NhbCxcbiAgcGF0aG5hbWU6IHBhdGhuYW1lLFxuICBnZXRMb2NhbFBhdGhuYW1lOiBwYXRobmFtZSxcbiAgaGFzaDogaGFzaCxcbiAgZ2V0TG9jYWxIYXNoOiBoYXNoLFxuICBhY3RpdmU6IGFjdGl2ZSxcbiAgaXNBY3RpdmU6IGFjdGl2ZVxufVxuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBEYXRhVmlldyA9IGdldE5hdGl2ZShyb290LCAnRGF0YVZpZXcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBEYXRhVmlldztcbiIsInZhciBoYXNoQ2xlYXIgPSByZXF1aXJlKCcuL19oYXNoQ2xlYXInKSxcbiAgICBoYXNoRGVsZXRlID0gcmVxdWlyZSgnLi9faGFzaERlbGV0ZScpLFxuICAgIGhhc2hHZXQgPSByZXF1aXJlKCcuL19oYXNoR2V0JyksXG4gICAgaGFzaEhhcyA9IHJlcXVpcmUoJy4vX2hhc2hIYXMnKSxcbiAgICBoYXNoU2V0ID0gcmVxdWlyZSgnLi9faGFzaFNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoO1xuIiwidmFyIGJhc2VDcmVhdGUgPSByZXF1aXJlKCcuL19iYXNlQ3JlYXRlJyksXG4gICAgYmFzZUxvZGFzaCA9IHJlcXVpcmUoJy4vX2Jhc2VMb2Rhc2gnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdGhlIG1heGltdW0gbGVuZ3RoIGFuZCBpbmRleCBvZiBhbiBhcnJheS4gKi9cbnZhciBNQVhfQVJSQVlfTEVOR1RIID0gNDI5NDk2NzI5NTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbGF6eSB3cmFwcGVyIG9iamVjdCB3aGljaCB3cmFwcyBgdmFsdWVgIHRvIGVuYWJsZSBsYXp5IGV2YWx1YXRpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcC5cbiAqL1xuZnVuY3Rpb24gTGF6eVdyYXBwZXIodmFsdWUpIHtcbiAgdGhpcy5fX3dyYXBwZWRfXyA9IHZhbHVlO1xuICB0aGlzLl9fYWN0aW9uc19fID0gW107XG4gIHRoaXMuX19kaXJfXyA9IDE7XG4gIHRoaXMuX19maWx0ZXJlZF9fID0gZmFsc2U7XG4gIHRoaXMuX19pdGVyYXRlZXNfXyA9IFtdO1xuICB0aGlzLl9fdGFrZUNvdW50X18gPSBNQVhfQVJSQVlfTEVOR1RIO1xuICB0aGlzLl9fdmlld3NfXyA9IFtdO1xufVxuXG4vLyBFbnN1cmUgYExhenlXcmFwcGVyYCBpcyBhbiBpbnN0YW5jZSBvZiBgYmFzZUxvZGFzaGAuXG5MYXp5V3JhcHBlci5wcm90b3R5cGUgPSBiYXNlQ3JlYXRlKGJhc2VMb2Rhc2gucHJvdG90eXBlKTtcbkxhenlXcmFwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExhenlXcmFwcGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExhenlXcmFwcGVyO1xuIiwidmFyIGxpc3RDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlQ2xlYXInKSxcbiAgICBsaXN0Q2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVEZWxldGUnKSxcbiAgICBsaXN0Q2FjaGVHZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVHZXQnKSxcbiAgICBsaXN0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVIYXMnKSxcbiAgICBsaXN0Q2FjaGVTZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExpc3RDYWNoZTtcbiIsInZhciBiYXNlQ3JlYXRlID0gcmVxdWlyZSgnLi9fYmFzZUNyZWF0ZScpLFxuICAgIGJhc2VMb2Rhc2ggPSByZXF1aXJlKCcuL19iYXNlTG9kYXNoJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgY29uc3RydWN0b3IgZm9yIGNyZWF0aW5nIGBsb2Rhc2hgIHdyYXBwZXIgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoYWluQWxsXSBFbmFibGUgZXhwbGljaXQgbWV0aG9kIGNoYWluIHNlcXVlbmNlcy5cbiAqL1xuZnVuY3Rpb24gTG9kYXNoV3JhcHBlcih2YWx1ZSwgY2hhaW5BbGwpIHtcbiAgdGhpcy5fX3dyYXBwZWRfXyA9IHZhbHVlO1xuICB0aGlzLl9fYWN0aW9uc19fID0gW107XG4gIHRoaXMuX19jaGFpbl9fID0gISFjaGFpbkFsbDtcbiAgdGhpcy5fX2luZGV4X18gPSAwO1xuICB0aGlzLl9fdmFsdWVzX18gPSB1bmRlZmluZWQ7XG59XG5cbkxvZGFzaFdyYXBwZXIucHJvdG90eXBlID0gYmFzZUNyZWF0ZShiYXNlTG9kYXNoLnByb3RvdHlwZSk7XG5Mb2Rhc2hXcmFwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvZGFzaFdyYXBwZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gTG9kYXNoV3JhcHBlcjtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdNYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXA7XG4iLCJ2YXIgbWFwQ2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX21hcENhY2hlQ2xlYXInKSxcbiAgICBtYXBDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX21hcENhY2hlRGVsZXRlJyksXG4gICAgbWFwQ2FjaGVHZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZUdldCcpLFxuICAgIG1hcENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVIYXMnKSxcbiAgICBtYXBDYWNoZVNldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcENhY2hlO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBQcm9taXNlID0gZ2V0TmF0aXZlKHJvb3QsICdQcm9taXNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgU2V0ID0gZ2V0TmF0aXZlKHJvb3QsICdTZXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZXQ7XG4iLCJ2YXIgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpLFxuICAgIHNldENhY2hlQWRkID0gcmVxdWlyZSgnLi9fc2V0Q2FjaGVBZGQnKSxcbiAgICBzZXRDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX3NldENhY2hlSGFzJyk7XG5cbi8qKlxuICpcbiAqIENyZWF0ZXMgYW4gYXJyYXkgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIHVuaXF1ZSB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU2V0Q2FjaGUodmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzID09IG51bGwgPyAwIDogdmFsdWVzLmxlbmd0aDtcblxuICB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHRoaXMuYWRkKHZhbHVlc1tpbmRleF0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTZXRDYWNoZWAuXG5TZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBzZXRDYWNoZUFkZDtcblNldENhY2hlLnByb3RvdHlwZS5oYXMgPSBzZXRDYWNoZUhhcztcblxubW9kdWxlLmV4cG9ydHMgPSBTZXRDYWNoZTtcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBzdGFja0NsZWFyID0gcmVxdWlyZSgnLi9fc3RhY2tDbGVhcicpLFxuICAgIHN0YWNrRGVsZXRlID0gcmVxdWlyZSgnLi9fc3RhY2tEZWxldGUnKSxcbiAgICBzdGFja0dldCA9IHJlcXVpcmUoJy4vX3N0YWNrR2V0JyksXG4gICAgc3RhY2tIYXMgPSByZXF1aXJlKCcuL19zdGFja0hhcycpLFxuICAgIHN0YWNrU2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTdGFja2AuXG5TdGFjay5wcm90b3R5cGUuY2xlYXIgPSBzdGFja0NsZWFyO1xuU3RhY2sucHJvdG90eXBlWydkZWxldGUnXSA9IHN0YWNrRGVsZXRlO1xuU3RhY2sucHJvdG90eXBlLmdldCA9IHN0YWNrR2V0O1xuU3RhY2sucHJvdG90eXBlLmhhcyA9IHN0YWNrSGFzO1xuU3RhY2sucHJvdG90eXBlLnNldCA9IHN0YWNrU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YWNrO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbDtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBVaW50OEFycmF5ID0gcm9vdC5VaW50OEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVpbnQ4QXJyYXk7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFdlYWtNYXAgPSBnZXROYXRpdmUocm9vdCwgJ1dlYWtNYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBXZWFrTWFwO1xuIiwiLyoqXG4gKiBBIGZhc3RlciBhbHRlcm5hdGl2ZSB0byBgRnVuY3Rpb24jYXBwbHlgLCB0aGlzIGZ1bmN0aW9uIGludm9rZXMgYGZ1bmNgXG4gKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cbiAqL1xuZnVuY3Rpb24gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncykge1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFwcGx5O1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZm9yRWFjaGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RWFjaChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkgPT09IGZhbHNlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5RWFjaDtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZpbHRlcmAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheUZpbHRlcihhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXNJbmRleCA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUZpbHRlcjtcbiIsInZhciBiYXNlSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Jhc2VJbmRleE9mJyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluY2x1ZGVzYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIHNwZWNpZnlpbmcgYW4gaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHRhcmdldCBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdGFyZ2V0YCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheUluY2x1ZGVzKGFycmF5LCB2YWx1ZSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiAhIWxlbmd0aCAmJiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIDApID4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlJbmNsdWRlcztcbiIsIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBhcnJheUluY2x1ZGVzYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGEgY29tcGFyYXRvci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyYXRvciBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXNXaXRoKGFycmF5LCB2YWx1ZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIGFycmF5W2luZGV4XSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4iLCJ2YXIgYmFzZVRpbWVzID0gcmVxdWlyZSgnLi9fYmFzZVRpbWVzJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TGlrZUtleXM7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TWFwO1xuIiwiLyoqXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXBwZW5kLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHZhbHVlc1tpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5UHVzaDtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheVNvbWUoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlTb21lO1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBhbiBBU0NJSSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXNjaWlUb0FycmF5KHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnNwbGl0KCcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc2NpaVRvQXJyYXk7XG4iLCJ2YXIgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV07XG4gIGlmICghKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGVxKG9ialZhbHVlLCB2YWx1ZSkpIHx8XG4gICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzaWduVmFsdWU7XG4iLCJ2YXIgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGlmIChlcShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XG4gICAgICByZXR1cm4gbGVuZ3RoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzb2NJbmRleE9mO1xuIiwidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbmAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzXG4gKiBvciBgY3VzdG9taXplcmAgZnVuY3Rpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnbihvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnbjtcbiIsInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ25JbihvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQXNzaWduSW47XG4iLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ25WYWx1ZTtcbiIsInZhciBTdGFjayA9IHJlcXVpcmUoJy4vX1N0YWNrJyksXG4gICAgYXJyYXlFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXlFYWNoJyksXG4gICAgYXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25WYWx1ZScpLFxuICAgIGJhc2VBc3NpZ24gPSByZXF1aXJlKCcuL19iYXNlQXNzaWduJyksXG4gICAgYmFzZUFzc2lnbkluID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnbkluJyksXG4gICAgY2xvbmVCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUJ1ZmZlcicpLFxuICAgIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpLFxuICAgIGNvcHlTeW1ib2xzID0gcmVxdWlyZSgnLi9fY29weVN5bWJvbHMnKSxcbiAgICBjb3B5U3ltYm9sc0luID0gcmVxdWlyZSgnLi9fY29weVN5bWJvbHNJbicpLFxuICAgIGdldEFsbEtleXMgPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzJyksXG4gICAgZ2V0QWxsS2V5c0luID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5c0luJyksXG4gICAgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaW5pdENsb25lQXJyYXkgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVBcnJheScpLFxuICAgIGluaXRDbG9uZUJ5VGFnID0gcmVxdWlyZSgnLi9faW5pdENsb25lQnlUYWcnKSxcbiAgICBpbml0Q2xvbmVPYmplY3QgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVPYmplY3QnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNNYXAgPSByZXF1aXJlKCcuL2lzTWFwJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNTZXQgPSByZXF1aXJlKCcuL2lzU2V0JyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX0RFRVBfRkxBRyA9IDEsXG4gICAgQ0xPTkVfRkxBVF9GTEFHID0gMixcbiAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIHN1cHBvcnRlZCBieSBgXy5jbG9uZWAuICovXG52YXIgY2xvbmVhYmxlVGFncyA9IHt9O1xuY2xvbmVhYmxlVGFnc1thcmdzVGFnXSA9IGNsb25lYWJsZVRhZ3NbYXJyYXlUYWddID1cbmNsb25lYWJsZVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gY2xvbmVhYmxlVGFnc1tkYXRhVmlld1RhZ10gPVxuY2xvbmVhYmxlVGFnc1tib29sVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0ZVRhZ10gPVxuY2xvbmVhYmxlVGFnc1tmbG9hdDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZmxvYXQ2NFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbaW50MTZUYWddID1cbmNsb25lYWJsZVRhZ3NbaW50MzJUYWddID0gY2xvbmVhYmxlVGFnc1ttYXBUYWddID1cbmNsb25lYWJsZVRhZ3NbbnVtYmVyVGFnXSA9IGNsb25lYWJsZVRhZ3Nbb2JqZWN0VGFnXSA9XG5jbG9uZWFibGVUYWdzW3JlZ2V4cFRhZ10gPSBjbG9uZWFibGVUYWdzW3NldFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tzdHJpbmdUYWddID0gY2xvbmVhYmxlVGFnc1tzeW1ib2xUYWddID1cbmNsb25lYWJsZVRhZ3NbdWludDhUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50OENsYW1wZWRUYWddID1cbmNsb25lYWJsZVRhZ3NbdWludDE2VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG5jbG9uZWFibGVUYWdzW2Vycm9yVGFnXSA9IGNsb25lYWJsZVRhZ3NbZnVuY1RhZ10gPVxuY2xvbmVhYmxlVGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNsb25lYCBhbmQgYF8uY2xvbmVEZWVwYCB3aGljaCB0cmFja3NcbiAqIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gRGVlcCBjbG9uZVxuICogIDIgLSBGbGF0dGVuIGluaGVyaXRlZCBwcm9wZXJ0aWVzXG4gKiAgNCAtIENsb25lIHN5bWJvbHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gVGhlIGtleSBvZiBgdmFsdWVgLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBwYXJlbnQgb2JqZWN0IG9mIGB2YWx1ZWAuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIG9iamVjdHMgYW5kIHRoZWlyIGNsb25lIGNvdW50ZXJwYXJ0cy5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBjbG9uZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VDbG9uZSh2YWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCBvYmplY3QsIHN0YWNrKSB7XG4gIHZhciByZXN1bHQsXG4gICAgICBpc0RlZXAgPSBiaXRtYXNrICYgQ0xPTkVfREVFUF9GTEFHLFxuICAgICAgaXNGbGF0ID0gYml0bWFzayAmIENMT05FX0ZMQVRfRkxBRyxcbiAgICAgIGlzRnVsbCA9IGJpdG1hc2sgJiBDTE9ORV9TWU1CT0xTX0ZMQUc7XG5cbiAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICByZXN1bHQgPSBvYmplY3QgPyBjdXN0b21pemVyKHZhbHVlLCBrZXksIG9iamVjdCwgc3RhY2spIDogY3VzdG9taXplcih2YWx1ZSk7XG4gIH1cbiAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKTtcbiAgaWYgKGlzQXJyKSB7XG4gICAgcmVzdWx0ID0gaW5pdENsb25lQXJyYXkodmFsdWUpO1xuICAgIGlmICghaXNEZWVwKSB7XG4gICAgICByZXR1cm4gY29weUFycmF5KHZhbHVlLCByZXN1bHQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKSxcbiAgICAgICAgaXNGdW5jID0gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZztcblxuICAgIGlmIChpc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjbG9uZUJ1ZmZlcih2YWx1ZSwgaXNEZWVwKTtcbiAgICB9XG4gICAgaWYgKHRhZyA9PSBvYmplY3RUYWcgfHwgdGFnID09IGFyZ3NUYWcgfHwgKGlzRnVuYyAmJiAhb2JqZWN0KSkge1xuICAgICAgcmVzdWx0ID0gKGlzRmxhdCB8fCBpc0Z1bmMpID8ge30gOiBpbml0Q2xvbmVPYmplY3QodmFsdWUpO1xuICAgICAgaWYgKCFpc0RlZXApIHtcbiAgICAgICAgcmV0dXJuIGlzRmxhdFxuICAgICAgICAgID8gY29weVN5bWJvbHNJbih2YWx1ZSwgYmFzZUFzc2lnbkluKHJlc3VsdCwgdmFsdWUpKVxuICAgICAgICAgIDogY29weVN5bWJvbHModmFsdWUsIGJhc2VBc3NpZ24ocmVzdWx0LCB2YWx1ZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNsb25lYWJsZVRhZ3NbdGFnXSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0ID8gdmFsdWUgOiB7fTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IGluaXRDbG9uZUJ5VGFnKHZhbHVlLCB0YWcsIGlzRGVlcCk7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIGFuZCByZXR1cm4gaXRzIGNvcnJlc3BvbmRpbmcgY2xvbmUuXG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KHZhbHVlKTtcbiAgaWYgKHN0YWNrZWQpIHtcbiAgICByZXR1cm4gc3RhY2tlZDtcbiAgfVxuICBzdGFjay5zZXQodmFsdWUsIHJlc3VsdCk7XG5cbiAgaWYgKGlzU2V0KHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUpIHtcbiAgICAgIHJlc3VsdC5hZGQoYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdWJWYWx1ZSwgdmFsdWUsIHN0YWNrKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKGlzTWFwKHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkge1xuICAgICAgcmVzdWx0LnNldChrZXksIGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2spKTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICB2YXIga2V5c0Z1bmMgPSBpc0Z1bGxcbiAgICA/IChpc0ZsYXQgPyBnZXRBbGxLZXlzSW4gOiBnZXRBbGxLZXlzKVxuICAgIDogKGlzRmxhdCA/IGtleXNJbiA6IGtleXMpO1xuXG4gIHZhciBwcm9wcyA9IGlzQXJyID8gdW5kZWZpbmVkIDoga2V5c0Z1bmModmFsdWUpO1xuICBhcnJheUVhY2gocHJvcHMgfHwgdmFsdWUsIGZ1bmN0aW9uKHN1YlZhbHVlLCBrZXkpIHtcbiAgICBpZiAocHJvcHMpIHtcbiAgICAgIGtleSA9IHN1YlZhbHVlO1xuICAgICAgc3ViVmFsdWUgPSB2YWx1ZVtrZXldO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBwb3B1bGF0ZSBjbG9uZSAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCBiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgdmFsdWUsIHN0YWNrKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VDbG9uZTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXG4gKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xudmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIG9iamVjdCgpIHt9XG4gIHJldHVybiBmdW5jdGlvbihwcm90bykge1xuICAgIGlmICghaXNPYmplY3QocHJvdG8pKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGlmIChvYmplY3RDcmVhdGUpIHtcbiAgICAgIHJldHVybiBvYmplY3RDcmVhdGUocHJvdG8pO1xuICAgIH1cbiAgICBvYmplY3QucHJvdG90eXBlID0gcHJvdG87XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBvYmplY3Q7XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQ3JlYXRlO1xuIiwidmFyIFNldENhY2hlID0gcmVxdWlyZSgnLi9fU2V0Q2FjaGUnKSxcbiAgICBhcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlcycpLFxuICAgIGFycmF5SW5jbHVkZXNXaXRoID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlc1dpdGgnKSxcbiAgICBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgY2FjaGVIYXMgPSByZXF1aXJlKCcuL19jYWNoZUhhcycpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5kaWZmZXJlbmNlYCB3aXRob3V0IHN1cHBvcnRcbiAqIGZvciBleGNsdWRpbmcgbXVsdGlwbGUgYXJyYXlzIG9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gYmFzZURpZmZlcmVuY2UoYXJyYXksIHZhbHVlcywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXMsXG4gICAgICBpc0NvbW1vbiA9IHRydWUsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBbXSxcbiAgICAgIHZhbHVlc0xlbmd0aCA9IHZhbHVlcy5sZW5ndGg7XG5cbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChpdGVyYXRlZSkge1xuICAgIHZhbHVlcyA9IGFycmF5TWFwKHZhbHVlcywgYmFzZVVuYXJ5KGl0ZXJhdGVlKSk7XG4gIH1cbiAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXNXaXRoO1xuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gIH1cbiAgZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA+PSBMQVJHRV9BUlJBWV9TSVpFKSB7XG4gICAgaW5jbHVkZXMgPSBjYWNoZUhhcztcbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIHZhbHVlcyA9IG5ldyBTZXRDYWNoZSh2YWx1ZXMpO1xuICB9XG4gIG91dGVyOlxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA9PSBudWxsID8gdmFsdWUgOiBpdGVyYXRlZSh2YWx1ZSk7XG5cbiAgICB2YWx1ZSA9IChjb21wYXJhdG9yIHx8IHZhbHVlICE9PSAwKSA/IHZhbHVlIDogMDtcbiAgICBpZiAoaXNDb21tb24gJiYgY29tcHV0ZWQgPT09IGNvbXB1dGVkKSB7XG4gICAgICB2YXIgdmFsdWVzSW5kZXggPSB2YWx1ZXNMZW5ndGg7XG4gICAgICB3aGlsZSAodmFsdWVzSW5kZXgtLSkge1xuICAgICAgICBpZiAodmFsdWVzW3ZhbHVlc0luZGV4XSA9PT0gY29tcHV0ZWQpIHtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmICghaW5jbHVkZXModmFsdWVzLCBjb21wdXRlZCwgY29tcGFyYXRvcikpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRGlmZmVyZW5jZTtcbiIsInZhciBiYXNlRm9yT3duID0gcmVxdWlyZSgnLi9fYmFzZUZvck93bicpLFxuICAgIGNyZWF0ZUJhc2VFYWNoID0gcmVxdWlyZSgnLi9fY3JlYXRlQmFzZUVhY2gnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JFYWNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAqL1xudmFyIGJhc2VFYWNoID0gY3JlYXRlQmFzZUVhY2goYmFzZUZvck93bik7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUVhY2g7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbmRJbmRleGAgYW5kIGBfLmZpbmRMYXN0SW5kZXhgIHdpdGhvdXRcbiAqIHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgsIGZyb21SaWdodCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgaW5kZXggPSBmcm9tSW5kZXggKyAoZnJvbVJpZ2h0ID8gMSA6IC0xKTtcblxuICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRmluZEluZGV4O1xuIiwidmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGlzRmxhdHRlbmFibGUgPSByZXF1aXJlKCcuL19pc0ZsYXR0ZW5hYmxlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmxhdHRlbmAgd2l0aCBzdXBwb3J0IGZvciByZXN0cmljdGluZyBmbGF0dGVuaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBkZXB0aCBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcmVkaWNhdGU9aXNGbGF0dGVuYWJsZV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzU3RyaWN0XSBSZXN0cmljdCB0byB2YWx1ZXMgdGhhdCBwYXNzIGBwcmVkaWNhdGVgIGNoZWNrcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHQ9W11dIFRoZSBpbml0aWFsIHJlc3VsdCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZUZsYXR0ZW4oYXJyYXksIGRlcHRoLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgcHJlZGljYXRlIHx8IChwcmVkaWNhdGUgPSBpc0ZsYXR0ZW5hYmxlKTtcbiAgcmVzdWx0IHx8IChyZXN1bHQgPSBbXSk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKGRlcHRoID4gMCAmJiBwcmVkaWNhdGUodmFsdWUpKSB7XG4gICAgICBpZiAoZGVwdGggPiAxKSB7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGZsYXR0ZW4gYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIGJhc2VGbGF0dGVuKHZhbHVlLCBkZXB0aCAtIDEsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcnJheVB1c2gocmVzdWx0LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaXNTdHJpY3QpIHtcbiAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGbGF0dGVuO1xuIiwidmFyIGNyZWF0ZUJhc2VGb3IgPSByZXF1aXJlKCcuL19jcmVhdGVCYXNlRm9yJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGJhc2VGb3JPd25gIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYG9iamVjdGBcbiAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxuICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG52YXIgYmFzZUZvciA9IGNyZWF0ZUJhc2VGb3IoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRm9yO1xuIiwidmFyIGJhc2VGb3IgPSByZXF1aXJlKCcuL19iYXNlRm9yJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZvck93bmAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGb3JPd24ob2JqZWN0LCBpdGVyYXRlZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3Iob2JqZWN0LCBpdGVyYXRlZSwga2V5cyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZvck93bjtcbiIsInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gMCxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgIG9iamVjdCA9IG9iamVjdFt0b0tleShwYXRoW2luZGV4KytdKV07XG4gIH1cbiAgcmV0dXJuIChpbmRleCAmJiBpbmRleCA9PSBsZW5ndGgpID8gb2JqZWN0IDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXQ7XG4iLCJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRBbGxLZXlzYCBhbmQgYGdldEFsbEtleXNJbmAgd2hpY2ggdXNlc1xuICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XG4gIHZhciByZXN1bHQgPSBrZXlzRnVuYyhvYmplY3QpO1xuICByZXR1cm4gaXNBcnJheShvYmplY3QpID8gcmVzdWx0IDogYXJyYXlQdXNoKHJlc3VsdCwgc3ltYm9sc0Z1bmMob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldEFsbEtleXM7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgZ2V0UmF3VGFnID0gcmVxdWlyZSgnLi9fZ2V0UmF3VGFnJyksXG4gICAgb2JqZWN0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19vYmplY3RUb1N0cmluZycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0VGFnO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5oYXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VIYXMob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VIYXM7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmhhc0luYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGtleSBUaGUga2V5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSGFzSW4ob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGtleSBpbiBPYmplY3Qob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSGFzSW47XG4iLCJ2YXIgYmFzZUZpbmRJbmRleCA9IHJlcXVpcmUoJy4vX2Jhc2VGaW5kSW5kZXgnKSxcbiAgICBiYXNlSXNOYU4gPSByZXF1aXJlKCcuL19iYXNlSXNOYU4nKSxcbiAgICBzdHJpY3RJbmRleE9mID0gcmVxdWlyZSgnLi9fc3RyaWN0SW5kZXhPZicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmluZGV4T2ZgIHdpdGhvdXQgYGZyb21JbmRleGAgYm91bmRzIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlXG4gICAgPyBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KVxuICAgIDogYmFzZUZpbmRJbmRleChhcnJheSwgYmFzZUlzTmFOLCBmcm9tSW5kZXgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJbmRleE9mO1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKSxcbiAgICBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgbGFzdCA9IHJlcXVpcmUoJy4vbGFzdCcpLFxuICAgIHBhcmVudCA9IHJlcXVpcmUoJy4vX3BhcmVudCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pbnZva2VgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaW5kaXZpZHVhbFxuICogbWV0aG9kIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIG1ldGhvZCB0byBpbnZva2UuXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIHRoZSBtZXRob2Qgd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGludm9rZWQgbWV0aG9kLlxuICovXG5mdW5jdGlvbiBiYXNlSW52b2tlKG9iamVjdCwgcGF0aCwgYXJncykge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgb2JqZWN0ID0gcGFyZW50KG9iamVjdCwgcGF0aCk7XG4gIHZhciBmdW5jID0gb2JqZWN0ID09IG51bGwgPyBvYmplY3QgOiBvYmplY3RbdG9LZXkobGFzdChwYXRoKSldO1xuICByZXR1cm4gZnVuYyA9PSBudWxsID8gdW5kZWZpbmVkIDogYXBwbHkoZnVuYywgb2JqZWN0LCBhcmdzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSW52b2tlO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICovXG5mdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYXJnc1RhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNBcmd1bWVudHM7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0RhdGVgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZGF0ZSBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRGF0ZSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBkYXRlVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0RhdGU7XG4iLCJ2YXIgYmFzZUlzRXF1YWxEZWVwID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWxEZWVwJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAqICAyIC0gUGFydGlhbCBjb21wYXJpc29uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzT2JqZWN0TGlrZShvdGhlcikpKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gIH1cbiAgcmV0dXJuIGJhc2VJc0VxdWFsRGVlcCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGJhc2VJc0VxdWFsLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWw7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGVxdWFsQXJyYXlzID0gcmVxdWlyZSgnLi9fZXF1YWxBcnJheXMnKSxcbiAgICBlcXVhbEJ5VGFnID0gcmVxdWlyZSgnLi9fZXF1YWxCeVRhZycpLFxuICAgIGVxdWFsT2JqZWN0cyA9IHJlcXVpcmUoJy4vX2VxdWFsT2JqZWN0cycpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcbiAqIGRlZXAgY29tcGFyaXNvbnMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAqIHJlZmVyZW5jZXMgdG8gYmUgY29tcGFyZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBvYmpJc0FyciA9IGlzQXJyYXkob2JqZWN0KSxcbiAgICAgIG90aElzQXJyID0gaXNBcnJheShvdGhlciksXG4gICAgICBvYmpUYWcgPSBvYmpJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG9iamVjdCksXG4gICAgICBvdGhUYWcgPSBvdGhJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG90aGVyKTtcblxuICBvYmpUYWcgPSBvYmpUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG9ialRhZztcbiAgb3RoVGFnID0gb3RoVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvdGhUYWc7XG5cbiAgdmFyIG9iaklzT2JqID0gb2JqVGFnID09IG9iamVjdFRhZyxcbiAgICAgIG90aElzT2JqID0gb3RoVGFnID09IG9iamVjdFRhZyxcbiAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XG5cbiAgaWYgKGlzU2FtZVRhZyAmJiBpc0J1ZmZlcihvYmplY3QpKSB7XG4gICAgaWYgKCFpc0J1ZmZlcihvdGhlcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgb2JqSXNBcnIgPSB0cnVlO1xuICAgIG9iaklzT2JqID0gZmFsc2U7XG4gIH1cbiAgaWYgKGlzU2FtZVRhZyAmJiAhb2JqSXNPYmopIHtcbiAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgIHJldHVybiAob2JqSXNBcnIgfHwgaXNUeXBlZEFycmF5KG9iamVjdCkpXG4gICAgICA/IGVxdWFsQXJyYXlzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXG4gICAgICA6IGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgb2JqVGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgfVxuICBpZiAoIShiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcpKSB7XG4gICAgdmFyIG9iaklzV3JhcHBlZCA9IG9iaklzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAnX193cmFwcGVkX18nKSxcbiAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XG5cbiAgICBpZiAob2JqSXNXcmFwcGVkIHx8IG90aElzV3JhcHBlZCkge1xuICAgICAgdmFyIG9ialVud3JhcHBlZCA9IG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LFxuICAgICAgICAgIG90aFVud3JhcHBlZCA9IG90aElzV3JhcHBlZCA/IG90aGVyLnZhbHVlKCkgOiBvdGhlcjtcblxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgIHJldHVybiBlcXVhbEZ1bmMob2JqVW53cmFwcGVkLCBvdGhVbndyYXBwZWQsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1NhbWVUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgcmV0dXJuIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNFcXVhbERlZXA7XG4iLCJ2YXIgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWFwYCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNNYXAodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSBtYXBUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTWFwO1xuIiwidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBiYXNlSXNFcXVhbCA9IHJlcXVpcmUoJy4vX2Jhc2VJc0VxdWFsJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hdGNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAqIEBwYXJhbSB7QXJyYXl9IG1hdGNoRGF0YSBUaGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3MgdG8gbWF0Y2guXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBpcyBhIG1hdGNoLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBtYXRjaERhdGEsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGluZGV4ID0gbWF0Y2hEYXRhLmxlbmd0aCxcbiAgICAgIGxlbmd0aCA9IGluZGV4LFxuICAgICAgbm9DdXN0b21pemVyID0gIWN1c3RvbWl6ZXI7XG5cbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuICFsZW5ndGg7XG4gIH1cbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgdmFyIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xuICAgIGlmICgobm9DdXN0b21pemVyICYmIGRhdGFbMl0pXG4gICAgICAgICAgPyBkYXRhWzFdICE9PSBvYmplY3RbZGF0YVswXV1cbiAgICAgICAgICA6ICEoZGF0YVswXSBpbiBvYmplY3QpXG4gICAgICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xuICAgIHZhciBrZXkgPSBkYXRhWzBdLFxuICAgICAgICBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICBzcmNWYWx1ZSA9IGRhdGFbMV07XG5cbiAgICBpZiAobm9DdXN0b21pemVyICYmIGRhdGFbMl0pIHtcbiAgICAgIGlmIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3RhY2sgPSBuZXcgU3RhY2s7XG4gICAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgICB2YXIgcmVzdWx0ID0gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UsIHN0YWNrKTtcbiAgICAgIH1cbiAgICAgIGlmICghKHJlc3VsdCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGJhc2VJc0VxdWFsKHNyY1ZhbHVlLCBvYmpWYWx1ZSwgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgfCBDT01QQVJFX1VOT1JERVJFRF9GTEFHLCBjdXN0b21pemVyLCBzdGFjaylcbiAgICAgICAgICAgIDogcmVzdWx0XG4gICAgICAgICAgKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc01hdGNoO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hTmAgd2l0aG91dCBzdXBwb3J0IGZvciBudW1iZXIgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgTmFOYCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYU4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYU47XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTWFza2VkID0gcmVxdWlyZSgnLi9faXNNYXNrZWQnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTmF0aXZlO1xuIiwidmFyIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzZXRUYWcgPSAnW29iamVjdCBTZXRdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1NldGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzZXQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzU2V0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGdldFRhZyh2YWx1ZSkgPT0gc2V0VGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc1NldDtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNUeXBlZEFycmF5O1xuIiwidmFyIGJhc2VNYXRjaGVzID0gcmVxdWlyZSgnLi9fYmFzZU1hdGNoZXMnKSxcbiAgICBiYXNlTWF0Y2hlc1Byb3BlcnR5ID0gcmVxdWlyZSgnLi9fYmFzZU1hdGNoZXNQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBwcm9wZXJ0eSA9IHJlcXVpcmUoJy4vcHJvcGVydHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pdGVyYXRlZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gW3ZhbHVlPV8uaWRlbnRpdHldIFRoZSB2YWx1ZSB0byBjb252ZXJ0IHRvIGFuIGl0ZXJhdGVlLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBpdGVyYXRlZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUl0ZXJhdGVlKHZhbHVlKSB7XG4gIC8vIERvbid0IHN0b3JlIHRoZSBgdHlwZW9mYCByZXN1bHQgaW4gYSB2YXJpYWJsZSB0byBhdm9pZCBhIEpJVCBidWcgaW4gU2FmYXJpIDkuXG4gIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MDM0IGZvciBtb3JlIGRldGFpbHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBpZGVudGl0eTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGlzQXJyYXkodmFsdWUpXG4gICAgICA/IGJhc2VNYXRjaGVzUHJvcGVydHkodmFsdWVbMF0sIHZhbHVlWzFdKVxuICAgICAgOiBiYXNlTWF0Y2hlcyh2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHByb3BlcnR5KHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXRlcmF0ZWU7XG4iLCJ2YXIgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c2Agd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBrZXkgIT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5cztcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAgbmF0aXZlS2V5c0luID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5c0luJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c0luYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzSW4ob2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzSW4ob2JqZWN0KTtcbiAgfVxuICB2YXIgaXNQcm90byA9IGlzUHJvdG90eXBlKG9iamVjdCksXG4gICAgICByZXN1bHQgPSBbXTtcblxuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgaWYgKCEoa2V5ID09ICdjb25zdHJ1Y3RvcicgJiYgKGlzUHJvdG8gfHwgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXNJbjtcbiIsIi8qKlxuICogVGhlIGZ1bmN0aW9uIHdob3NlIHByb3RvdHlwZSBjaGFpbiBzZXF1ZW5jZSB3cmFwcGVycyBpbmhlcml0IGZyb20uXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYmFzZUxvZGFzaCgpIHtcbiAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTG9kYXNoO1xuIiwidmFyIGJhc2VJc01hdGNoID0gcmVxdWlyZSgnLi9fYmFzZUlzTWF0Y2gnKSxcbiAgICBnZXRNYXRjaERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXRjaERhdGEnKSxcbiAgICBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSA9IHJlcXVpcmUoJy4vX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWF0Y2hlc2Agd2hpY2ggZG9lc24ndCBjbG9uZSBgc291cmNlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VNYXRjaGVzKHNvdXJjZSkge1xuICB2YXIgbWF0Y2hEYXRhID0gZ2V0TWF0Y2hEYXRhKHNvdXJjZSk7XG4gIGlmIChtYXRjaERhdGEubGVuZ3RoID09IDEgJiYgbWF0Y2hEYXRhWzBdWzJdKSB7XG4gICAgcmV0dXJuIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKG1hdGNoRGF0YVswXVswXSwgbWF0Y2hEYXRhWzBdWzFdKTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PT0gc291cmNlIHx8IGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBtYXRjaERhdGEpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNYXRjaGVzO1xuIiwidmFyIGJhc2VJc0VxdWFsID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWwnKSxcbiAgICBnZXQgPSByZXF1aXJlKCcuL2dldCcpLFxuICAgIGhhc0luID0gcmVxdWlyZSgnLi9oYXNJbicpLFxuICAgIGlzS2V5ID0gcmVxdWlyZSgnLi9faXNLZXknKSxcbiAgICBpc1N0cmljdENvbXBhcmFibGUgPSByZXF1aXJlKCcuL19pc1N0cmljdENvbXBhcmFibGUnKSxcbiAgICBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSA9IHJlcXVpcmUoJy4vX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlJyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWF0Y2hlc1Byb3BlcnR5YCB3aGljaCBkb2Vzbid0IGNsb25lIGBzcmNWYWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VNYXRjaGVzUHJvcGVydHkocGF0aCwgc3JjVmFsdWUpIHtcbiAgaWYgKGlzS2V5KHBhdGgpICYmIGlzU3RyaWN0Q29tcGFyYWJsZShzcmNWYWx1ZSkpIHtcbiAgICByZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUodG9LZXkocGF0aCksIHNyY1ZhbHVlKTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgdmFyIG9ialZhbHVlID0gZ2V0KG9iamVjdCwgcGF0aCk7XG4gICAgcmV0dXJuIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIG9ialZhbHVlID09PSBzcmNWYWx1ZSlcbiAgICAgID8gaGFzSW4ob2JqZWN0LCBwYXRoKVxuICAgICAgOiBiYXNlSXNFcXVhbChzcmNWYWx1ZSwgb2JqVmFsdWUsIENPTVBBUkVfUEFSVElBTF9GTEFHIHwgQ09NUEFSRV9VTk9SREVSRURfRkxBRyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZU1hdGNoZXNQcm9wZXJ0eTtcbiIsInZhciBiYXNlUGlja0J5ID0gcmVxdWlyZSgnLi9fYmFzZVBpY2tCeScpLFxuICAgIGhhc0luID0gcmVxdWlyZSgnLi9oYXNJbicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnBpY2tgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaW5kaXZpZHVhbFxuICogcHJvcGVydHkgaWRlbnRpZmllcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRocyBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGJhc2VQaWNrKG9iamVjdCwgcGF0aHMpIHtcbiAgcmV0dXJuIGJhc2VQaWNrQnkob2JqZWN0LCBwYXRocywgZnVuY3Rpb24odmFsdWUsIHBhdGgpIHtcbiAgICByZXR1cm4gaGFzSW4ob2JqZWN0LCBwYXRoKTtcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVBpY2s7XG4iLCJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKSxcbiAgICBiYXNlU2V0ID0gcmVxdWlyZSgnLi9fYmFzZVNldCcpLFxuICAgIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiAgYF8ucGlja0J5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRocyBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgcHJvcGVydHkuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBiYXNlUGlja0J5KG9iamVjdCwgcGF0aHMsIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHBhdGhzLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IHt9O1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHBhdGggPSBwYXRoc1tpbmRleF0sXG4gICAgICAgIHZhbHVlID0gYmFzZUdldChvYmplY3QsIHBhdGgpO1xuXG4gICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgcGF0aCkpIHtcbiAgICAgIGJhc2VTZXQocmVzdWx0LCBjYXN0UGF0aChwYXRoLCBvYmplY3QpLCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVBpY2tCeTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucHJvcGVydHlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVByb3BlcnR5KGtleSkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVByb3BlcnR5O1xuIiwidmFyIGJhc2VHZXQgPSByZXF1aXJlKCcuL19iYXNlR2V0Jyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUHJvcGVydHlgIHdoaWNoIHN1cHBvcnRzIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVByb3BlcnR5RGVlcChwYXRoKSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gYmFzZUdldChvYmplY3QsIHBhdGgpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VQcm9wZXJ0eURlZXA7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5T2ZgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eU9mKG9iamVjdCkge1xuICByZXR1cm4gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVByb3BlcnR5T2Y7XG4iLCJ2YXIgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5JyksXG4gICAgb3ZlclJlc3QgPSByZXF1aXJlKCcuL19vdmVyUmVzdCcpLFxuICAgIHNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fc2V0VG9TdHJpbmcnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXN0YCB3aGljaCBkb2Vzbid0IHZhbGlkYXRlIG9yIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCBpZGVudGl0eSksIGZ1bmMgKyAnJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVJlc3Q7XG4iLCJ2YXIgYXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25WYWx1ZScpLFxuICAgIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zZXRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIHBhdGggY3JlYXRpb24uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdmFsdWUsIGN1c3RvbWl6ZXIpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoLFxuICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMSxcbiAgICAgIG5lc3RlZCA9IG9iamVjdDtcblxuICB3aGlsZSAobmVzdGVkICE9IG51bGwgJiYgKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSB0b0tleShwYXRoW2luZGV4XSksXG4gICAgICAgIG5ld1ZhbHVlID0gdmFsdWU7XG5cbiAgICBpZiAoaW5kZXggIT0gbGFzdEluZGV4KSB7XG4gICAgICB2YXIgb2JqVmFsdWUgPSBuZXN0ZWRba2V5XTtcbiAgICAgIG5ld1ZhbHVlID0gY3VzdG9taXplciA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIGtleSwgbmVzdGVkKSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gaXNPYmplY3Qob2JqVmFsdWUpXG4gICAgICAgICAgPyBvYmpWYWx1ZVxuICAgICAgICAgIDogKGlzSW5kZXgocGF0aFtpbmRleCArIDFdKSA/IFtdIDoge30pO1xuICAgICAgfVxuICAgIH1cbiAgICBhc3NpZ25WYWx1ZShuZXN0ZWQsIGtleSwgbmV3VmFsdWUpO1xuICAgIG5lc3RlZCA9IG5lc3RlZFtrZXldO1xuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldDtcbiIsInZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBtZXRhTWFwID0gcmVxdWlyZSgnLi9fbWV0YU1hcCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXREYXRhYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NvY2lhdGUgbWV0YWRhdGEgd2l0aC5cbiAqIEBwYXJhbSB7Kn0gZGF0YSBUaGUgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldERhdGEgPSAhbWV0YU1hcCA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgZGF0YSkge1xuICBtZXRhTWFwLnNldChmdW5jLCBkYXRhKTtcbiAgcmV0dXJuIGZ1bmM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTZXREYXRhO1xuIiwidmFyIGNvbnN0YW50ID0gcmVxdWlyZSgnLi9jb25zdGFudCcpLFxuICAgIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fZGVmaW5lUHJvcGVydHknKSxcbiAgICBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldFRvU3RyaW5nO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zbGljZWAgd2l0aG91dCBhbiBpdGVyYXRlZSBjYWxsIGd1YXJkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2xpY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IC1zdGFydCA+IGxlbmd0aCA/IDAgOiAobGVuZ3RoICsgc3RhcnQpO1xuICB9XG4gIGVuZCA9IGVuZCA+IGxlbmd0aCA/IGxlbmd0aCA6IGVuZDtcbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuZ3RoO1xuICB9XG4gIGxlbmd0aCA9IHN0YXJ0ID4gZW5kID8gMCA6ICgoZW5kIC0gc3RhcnQpID4+PiAwKTtcbiAgc3RhcnQgPj4+PSAwO1xuXG4gIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBhcnJheVtpbmRleCArIHN0YXJ0XTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTbGljZTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRpbWVzO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXG4gKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRvU3RyaW5nO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmFyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBzdG9yaW5nIG1ldGFkYXRhLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmModmFsdWUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbmFyeTtcbiIsInZhciBTZXRDYWNoZSA9IHJlcXVpcmUoJy4vX1NldENhY2hlJyksXG4gICAgYXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXMnKSxcbiAgICBhcnJheUluY2x1ZGVzV2l0aCA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXNXaXRoJyksXG4gICAgY2FjaGVIYXMgPSByZXF1aXJlKCcuL19jYWNoZUhhcycpLFxuICAgIGNyZWF0ZVNldCA9IHJlcXVpcmUoJy4vX2NyZWF0ZVNldCcpLFxuICAgIHNldFRvQXJyYXkgPSByZXF1aXJlKCcuL19zZXRUb0FycmF5Jyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5pcUJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmlxKGFycmF5LCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlcyxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGlzQ29tbW9uID0gdHJ1ZSxcbiAgICAgIHJlc3VsdCA9IFtdLFxuICAgICAgc2VlbiA9IHJlc3VsdDtcblxuICBpZiAoY29tcGFyYXRvcikge1xuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiAgfVxuICBlbHNlIGlmIChsZW5ndGggPj0gTEFSR0VfQVJSQVlfU0laRSkge1xuICAgIHZhciBzZXQgPSBpdGVyYXRlZSA/IG51bGwgOiBjcmVhdGVTZXQoYXJyYXkpO1xuICAgIGlmIChzZXQpIHtcbiAgICAgIHJldHVybiBzZXRUb0FycmF5KHNldCk7XG4gICAgfVxuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgaW5jbHVkZXMgPSBjYWNoZUhhcztcbiAgICBzZWVuID0gbmV3IFNldENhY2hlO1xuICB9XG4gIGVsc2Uge1xuICAgIHNlZW4gPSBpdGVyYXRlZSA/IFtdIDogcmVzdWx0O1xuICB9XG4gIG91dGVyOlxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlKSA6IHZhbHVlO1xuXG4gICAgdmFsdWUgPSAoY29tcGFyYXRvciB8fCB2YWx1ZSAhPT0gMCkgPyB2YWx1ZSA6IDA7XG4gICAgaWYgKGlzQ29tbW9uICYmIGNvbXB1dGVkID09PSBjb21wdXRlZCkge1xuICAgICAgdmFyIHNlZW5JbmRleCA9IHNlZW4ubGVuZ3RoO1xuICAgICAgd2hpbGUgKHNlZW5JbmRleC0tKSB7XG4gICAgICAgIGlmIChzZWVuW3NlZW5JbmRleF0gPT09IGNvbXB1dGVkKSB7XG4gICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpdGVyYXRlZSkge1xuICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmICghaW5jbHVkZXMoc2VlbiwgY29tcHV0ZWQsIGNvbXBhcmF0b3IpKSB7XG4gICAgICBpZiAoc2VlbiAhPT0gcmVzdWx0KSB7XG4gICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuaXE7XG4iLCJ2YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIGxhc3QgPSByZXF1aXJlKCcuL2xhc3QnKSxcbiAgICBwYXJlbnQgPSByZXF1aXJlKCcuL19wYXJlbnQnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5zZXRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHByb3BlcnR5IHBhdGggdG8gdW5zZXQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IGlzIGRlbGV0ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuc2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgb2JqZWN0ID0gcGFyZW50KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCB8fCBkZWxldGUgb2JqZWN0W3RvS2V5KGxhc3QocGF0aCkpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5zZXQ7XG4iLCJ2YXIgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnZhbHVlc2AgYW5kIGBfLnZhbHVlc0luYCB3aGljaCBjcmVhdGVzIGFuXG4gKiBhcnJheSBvZiBgb2JqZWN0YCBwcm9wZXJ0eSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvcGVydHkgbmFtZXNcbiAqIG9mIGBwcm9wc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBuYW1lcyB0byBnZXQgdmFsdWVzIGZvci5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gYmFzZVZhbHVlcyhvYmplY3QsIHByb3BzKSB7XG4gIHJldHVybiBhcnJheU1hcChwcm9wcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIG9iamVjdFtrZXldO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVmFsdWVzO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICByZXR1cm4gY2FjaGUuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FjaGVIYXM7XG4iLCJ2YXIgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5Jyk7XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBgaWRlbnRpdHlgIGlmIGl0J3Mgbm90IGEgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgY2FzdCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY2FzdEZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJyA/IHZhbHVlIDogaWRlbnRpdHk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FzdEZ1bmN0aW9uO1xuIiwidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0tleSA9IHJlcXVpcmUoJy4vX2lzS2V5JyksXG4gICAgc3RyaW5nVG9QYXRoID0gcmVxdWlyZSgnLi9fc3RyaW5nVG9QYXRoJyksXG4gICAgdG9TdHJpbmcgPSByZXF1aXJlKCcuL3RvU3RyaW5nJyk7XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBhIHBhdGggYXJyYXkgaWYgaXQncyBub3Qgb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICovXG5mdW5jdGlvbiBjYXN0UGF0aCh2YWx1ZSwgb2JqZWN0KSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gaXNLZXkodmFsdWUsIG9iamVjdCkgPyBbdmFsdWVdIDogc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FzdFBhdGg7XG4iLCJ2YXIgVWludDhBcnJheSA9IHJlcXVpcmUoJy4vX1VpbnQ4QXJyYXknKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGFycmF5QnVmZmVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYXJyYXlCdWZmZXIgVGhlIGFycmF5IGJ1ZmZlciB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtBcnJheUJ1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGFycmF5IGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gY2xvbmVBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikge1xuICB2YXIgcmVzdWx0ID0gbmV3IGFycmF5QnVmZmVyLmNvbnN0cnVjdG9yKGFycmF5QnVmZmVyLmJ5dGVMZW5ndGgpO1xuICBuZXcgVWludDhBcnJheShyZXN1bHQpLnNldChuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcikpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lQXJyYXlCdWZmZXI7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQsXG4gICAgYWxsb2NVbnNhZmUgPSBCdWZmZXIgPyBCdWZmZXIuYWxsb2NVbnNhZmUgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mICBgYnVmZmVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQnVmZmVyKGJ1ZmZlciwgaXNEZWVwKSB7XG4gIGlmIChpc0RlZXApIHtcbiAgICByZXR1cm4gYnVmZmVyLnNsaWNlKCk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBhbGxvY1Vuc2FmZSA/IGFsbG9jVW5zYWZlKGxlbmd0aCkgOiBuZXcgYnVmZmVyLmNvbnN0cnVjdG9yKGxlbmd0aCk7XG5cbiAgYnVmZmVyLmNvcHkocmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZUJ1ZmZlcjtcbiIsInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgZGF0YVZpZXdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YVZpZXcgVGhlIGRhdGEgdmlldyB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgZGF0YSB2aWV3LlxuICovXG5mdW5jdGlvbiBjbG9uZURhdGFWaWV3KGRhdGFWaWV3LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIoZGF0YVZpZXcuYnVmZmVyKSA6IGRhdGFWaWV3LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyBkYXRhVmlldy5jb25zdHJ1Y3RvcihidWZmZXIsIGRhdGFWaWV3LmJ5dGVPZmZzZXQsIGRhdGFWaWV3LmJ5dGVMZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lRGF0YVZpZXc7XG4iLCIvKiogVXNlZCB0byBtYXRjaCBgUmVnRXhwYCBmbGFncyBmcm9tIHRoZWlyIGNvZXJjZWQgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUZsYWdzID0gL1xcdyokLztcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHJlZ2V4cGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWdleHAgVGhlIHJlZ2V4cCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCByZWdleHAuXG4gKi9cbmZ1bmN0aW9uIGNsb25lUmVnRXhwKHJlZ2V4cCkge1xuICB2YXIgcmVzdWx0ID0gbmV3IHJlZ2V4cC5jb25zdHJ1Y3RvcihyZWdleHAuc291cmNlLCByZUZsYWdzLmV4ZWMocmVnZXhwKSk7XG4gIHJlc3VsdC5sYXN0SW5kZXggPSByZWdleHAubGFzdEluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lUmVnRXhwO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGBzeW1ib2xgIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHN5bWJvbCBUaGUgc3ltYm9sIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBzeW1ib2wgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBjbG9uZVN5bWJvbChzeW1ib2wpIHtcbiAgcmV0dXJuIHN5bWJvbFZhbHVlT2YgPyBPYmplY3Qoc3ltYm9sVmFsdWVPZi5jYWxsKHN5bWJvbCkpIDoge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVTeW1ib2w7XG4iLCJ2YXIgY2xvbmVBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQXJyYXlCdWZmZXInKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHR5cGVkQXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gdHlwZWRBcnJheSBUaGUgdHlwZWQgYXJyYXkgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHR5cGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBjbG9uZVR5cGVkQXJyYXkodHlwZWRBcnJheSwgaXNEZWVwKSB7XG4gIHZhciBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKHR5cGVkQXJyYXkuYnVmZmVyKSA6IHR5cGVkQXJyYXkuYnVmZmVyO1xuICByZXR1cm4gbmV3IHR5cGVkQXJyYXkuY29uc3RydWN0b3IoYnVmZmVyLCB0eXBlZEFycmF5LmJ5dGVPZmZzZXQsIHR5cGVkQXJyYXkubGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVR5cGVkQXJyYXk7XG4iLCIvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMsXG4gKiBwbGFjZWhvbGRlcnMsIGFuZCBwcm92aWRlZCBhcmd1bWVudHMgaW50byBhIHNpbmdsZSBhcnJheSBvZiBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZC5cbiAqIEBwYXJhbSB7QXJyYXl9IGhvbGRlcnMgVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbXMge2Jvb2xlYW59IFtpc0N1cnJpZWRdIFNwZWNpZnkgY29tcG9zaW5nIGZvciBhIGN1cnJpZWQgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21wb3NlZCBhcmd1bWVudHMuXG4gKi9cbmZ1bmN0aW9uIGNvbXBvc2VBcmdzKGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpIHtcbiAgdmFyIGFyZ3NJbmRleCA9IC0xLFxuICAgICAgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoLFxuICAgICAgaG9sZGVyc0xlbmd0aCA9IGhvbGRlcnMubGVuZ3RoLFxuICAgICAgbGVmdEluZGV4ID0gLTEsXG4gICAgICBsZWZ0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgcmFuZ2VMZW5ndGggPSBuYXRpdmVNYXgoYXJnc0xlbmd0aCAtIGhvbGRlcnNMZW5ndGgsIDApLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVmdExlbmd0aCArIHJhbmdlTGVuZ3RoKSxcbiAgICAgIGlzVW5jdXJyaWVkID0gIWlzQ3VycmllZDtcblxuICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgcmVzdWx0W2xlZnRJbmRleF0gPSBwYXJ0aWFsc1tsZWZ0SW5kZXhdO1xuICB9XG4gIHdoaWxlICgrK2FyZ3NJbmRleCA8IGhvbGRlcnNMZW5ndGgpIHtcbiAgICBpZiAoaXNVbmN1cnJpZWQgfHwgYXJnc0luZGV4IDwgYXJnc0xlbmd0aCkge1xuICAgICAgcmVzdWx0W2hvbGRlcnNbYXJnc0luZGV4XV0gPSBhcmdzW2FyZ3NJbmRleF07XG4gICAgfVxuICB9XG4gIHdoaWxlIChyYW5nZUxlbmd0aC0tKSB7XG4gICAgcmVzdWx0W2xlZnRJbmRleCsrXSA9IGFyZ3NbYXJnc0luZGV4KytdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcG9zZUFyZ3M7XG4iLCIvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBjb21wb3NlQXJnc2AgZXhjZXB0IHRoYXQgdGhlIGFyZ3VtZW50cyBjb21wb3NpdGlvblxuICogaXMgdGFpbG9yZWQgZm9yIGBfLnBhcnRpYWxSaWdodGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gYXBwZW5kIHRvIHRob3NlIHByb3ZpZGVkLlxuICogQHBhcmFtIHtBcnJheX0gaG9sZGVycyBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtcyB7Ym9vbGVhbn0gW2lzQ3VycmllZF0gU3BlY2lmeSBjb21wb3NpbmcgZm9yIGEgY3VycmllZCBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbXBvc2VkIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gY29tcG9zZUFyZ3NSaWdodChhcmdzLCBwYXJ0aWFscywgaG9sZGVycywgaXNDdXJyaWVkKSB7XG4gIHZhciBhcmdzSW5kZXggPSAtMSxcbiAgICAgIGFyZ3NMZW5ndGggPSBhcmdzLmxlbmd0aCxcbiAgICAgIGhvbGRlcnNJbmRleCA9IC0xLFxuICAgICAgaG9sZGVyc0xlbmd0aCA9IGhvbGRlcnMubGVuZ3RoLFxuICAgICAgcmlnaHRJbmRleCA9IC0xLFxuICAgICAgcmlnaHRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsXG4gICAgICByYW5nZUxlbmd0aCA9IG5hdGl2ZU1heChhcmdzTGVuZ3RoIC0gaG9sZGVyc0xlbmd0aCwgMCksXG4gICAgICByZXN1bHQgPSBBcnJheShyYW5nZUxlbmd0aCArIHJpZ2h0TGVuZ3RoKSxcbiAgICAgIGlzVW5jdXJyaWVkID0gIWlzQ3VycmllZDtcblxuICB3aGlsZSAoKythcmdzSW5kZXggPCByYW5nZUxlbmd0aCkge1xuICAgIHJlc3VsdFthcmdzSW5kZXhdID0gYXJnc1thcmdzSW5kZXhdO1xuICB9XG4gIHZhciBvZmZzZXQgPSBhcmdzSW5kZXg7XG4gIHdoaWxlICgrK3JpZ2h0SW5kZXggPCByaWdodExlbmd0aCkge1xuICAgIHJlc3VsdFtvZmZzZXQgKyByaWdodEluZGV4XSA9IHBhcnRpYWxzW3JpZ2h0SW5kZXhdO1xuICB9XG4gIHdoaWxlICgrK2hvbGRlcnNJbmRleCA8IGhvbGRlcnNMZW5ndGgpIHtcbiAgICBpZiAoaXNVbmN1cnJpZWQgfHwgYXJnc0luZGV4IDwgYXJnc0xlbmd0aCkge1xuICAgICAgcmVzdWx0W29mZnNldCArIGhvbGRlcnNbaG9sZGVyc0luZGV4XV0gPSBhcmdzW2FyZ3NJbmRleCsrXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb21wb3NlQXJnc1JpZ2h0O1xuIiwiLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBgc291cmNlYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG5cbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weUFycmF5O1xuIiwidmFyIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKTtcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weU9iamVjdDtcbiIsInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGdldFN5bWJvbHMgPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzJyk7XG5cbi8qKlxuICogQ29waWVzIG93biBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5U3ltYm9scyhzb3VyY2UsIG9iamVjdCkge1xuICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHMoc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5U3ltYm9scztcbiIsInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGdldFN5bWJvbHNJbiA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHNJbicpO1xuXG4vKipcbiAqIENvcGllcyBvd24gYW5kIGluaGVyaXRlZCBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5U3ltYm9sc0luKHNvdXJjZSwgb2JqZWN0KSB7XG4gIHJldHVybiBjb3B5T2JqZWN0KHNvdXJjZSwgZ2V0U3ltYm9sc0luKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVN5bWJvbHNJbjtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcmVKc0RhdGE7XG4iLCIvKipcbiAqIEdldHMgdGhlIG51bWJlciBvZiBgcGxhY2Vob2xkZXJgIG9jY3VycmVuY2VzIGluIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBwbGFjZWhvbGRlciBUaGUgcGxhY2Vob2xkZXIgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHBsYWNlaG9sZGVyIGNvdW50LlxuICovXG5mdW5jdGlvbiBjb3VudEhvbGRlcnMoYXJyYXksIHBsYWNlaG9sZGVyKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSAwO1xuXG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGlmIChhcnJheVtsZW5ndGhdID09PSBwbGFjZWhvbGRlcikge1xuICAgICAgKytyZXN1bHQ7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY291bnRIb2xkZXJzO1xuIiwidmFyIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBpc0l0ZXJhdGVlQ2FsbCA9IHJlcXVpcmUoJy4vX2lzSXRlcmF0ZWVDYWxsJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uYXNzaWduYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gYXNzaWduZXIgVGhlIGZ1bmN0aW9uIHRvIGFzc2lnbiB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhc3NpZ25lciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoYXNzaWduZXIpIHtcbiAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwgc291cmNlcykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBzb3VyY2VzLmxlbmd0aCxcbiAgICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA+IDEgPyBzb3VyY2VzW2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkLFxuICAgICAgICBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xuXG4gICAgY3VzdG9taXplciA9IChhc3NpZ25lci5sZW5ndGggPiAzICYmIHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicpXG4gICAgICA/IChsZW5ndGgtLSwgY3VzdG9taXplcilcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHNvdXJjZXNbMF0sIHNvdXJjZXNbMV0sIGd1YXJkKSkge1xuICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiBjdXN0b21pemVyO1xuICAgICAgbGVuZ3RoID0gMTtcbiAgICB9XG4gICAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzW2luZGV4XTtcbiAgICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgYXNzaWduZXIob2JqZWN0LCBzb3VyY2UsIGluZGV4LCBjdXN0b21pemVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQXNzaWduZXI7XG4iLCJ2YXIgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGBiYXNlRWFjaGAgb3IgYGJhc2VFYWNoUmlnaHRgIGZ1bmN0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlYWNoRnVuYyBUaGUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGEgY29sbGVjdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmFzZUVhY2goZWFjaEZ1bmMsIGZyb21SaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICB9XG4gICAgaWYgKCFpc0FycmF5TGlrZShjb2xsZWN0aW9uKSkge1xuICAgICAgcmV0dXJuIGVhY2hGdW5jKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKTtcbiAgICB9XG4gICAgdmFyIGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IGZyb21SaWdodCA/IGxlbmd0aCA6IC0xLFxuICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChjb2xsZWN0aW9uKTtcblxuICAgIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVbaW5kZXhdLCBpbmRleCwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQmFzZUVhY2g7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBiYXNlIGZ1bmN0aW9uIGZvciBtZXRob2RzIGxpa2UgYF8uZm9ySW5gIGFuZCBgXy5mb3JPd25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VGb3IoZnJvbVJpZ2h0KSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzRnVuYykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChvYmplY3QpLFxuICAgICAgICBwcm9wcyA9IGtleXNGdW5jKG9iamVjdCksXG4gICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgdmFyIGtleSA9IHByb3BzW2Zyb21SaWdodCA/IGxlbmd0aCA6ICsraW5kZXhdO1xuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVCYXNlRm9yO1xuIiwidmFyIGNyZWF0ZUN0b3IgPSByZXF1aXJlKCcuL19jcmVhdGVDdG9yJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBpbnZva2UgaXQgd2l0aCB0aGUgb3B0aW9uYWwgYHRoaXNgXG4gKiBiaW5kaW5nIG9mIGB0aGlzQXJnYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmluZChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnKSB7XG4gIHZhciBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICBDdG9yID0gY3JlYXRlQ3RvcihmdW5jKTtcblxuICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgIHZhciBmbiA9ICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpID8gQ3RvciA6IGZ1bmM7XG4gICAgcmV0dXJuIGZuLmFwcGx5KGlzQmluZCA/IHRoaXNBcmcgOiB0aGlzLCBhcmd1bWVudHMpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUJpbmQ7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwcm9kdWNlcyBhbiBpbnN0YW5jZSBvZiBgQ3RvcmAgcmVnYXJkbGVzcyBvZlxuICogd2hldGhlciBpdCB3YXMgaW52b2tlZCBhcyBwYXJ0IG9mIGEgYG5ld2AgZXhwcmVzc2lvbiBvciBieSBgY2FsbGAgb3IgYGFwcGx5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gQ3RvciBUaGUgY29uc3RydWN0b3IgdG8gd3JhcC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUN0b3IoQ3Rvcikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgLy8gVXNlIGEgYHN3aXRjaGAgc3RhdGVtZW50IHRvIHdvcmsgd2l0aCBjbGFzcyBjb25zdHJ1Y3RvcnMuIFNlZVxuICAgIC8vIGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtZnVuY3Rpb24tb2JqZWN0cy1jYWxsLXRoaXNhcmd1bWVudC1hcmd1bWVudHNsaXN0XG4gICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6IHJldHVybiBuZXcgQ3RvcjtcbiAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0pO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICBjYXNlIDM6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSk7XG4gICAgICBjYXNlIDY6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdKTtcbiAgICAgIGNhc2UgNzogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0sIGFyZ3NbNl0pO1xuICAgIH1cbiAgICB2YXIgdGhpc0JpbmRpbmcgPSBiYXNlQ3JlYXRlKEN0b3IucHJvdG90eXBlKSxcbiAgICAgICAgcmVzdWx0ID0gQ3Rvci5hcHBseSh0aGlzQmluZGluZywgYXJncyk7XG5cbiAgICAvLyBNaW1pYyB0aGUgY29uc3RydWN0b3IncyBgcmV0dXJuYCBiZWhhdmlvci5cbiAgICAvLyBTZWUgaHR0cHM6Ly9lczUuZ2l0aHViLmlvLyN4MTMuMi4yIGZvciBtb3JlIGRldGFpbHMuXG4gICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiB0aGlzQmluZGluZztcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDdG9yO1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKSxcbiAgICBjcmVhdGVDdG9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQ3RvcicpLFxuICAgIGNyZWF0ZUh5YnJpZCA9IHJlcXVpcmUoJy4vX2NyZWF0ZUh5YnJpZCcpLFxuICAgIGNyZWF0ZVJlY3VycnkgPSByZXF1aXJlKCcuL19jcmVhdGVSZWN1cnJ5JyksXG4gICAgZ2V0SG9sZGVyID0gcmVxdWlyZSgnLi9fZ2V0SG9sZGVyJyksXG4gICAgcmVwbGFjZUhvbGRlcnMgPSByZXF1aXJlKCcuL19yZXBsYWNlSG9sZGVycycpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGVuYWJsZSBjdXJyeWluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge251bWJlcn0gYXJpdHkgVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUN1cnJ5KGZ1bmMsIGJpdG1hc2ssIGFyaXR5KSB7XG4gIHZhciBDdG9yID0gY3JlYXRlQ3RvcihmdW5jKTtcblxuICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICBhcmdzID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgaW5kZXggPSBsZW5ndGgsXG4gICAgICAgIHBsYWNlaG9sZGVyID0gZ2V0SG9sZGVyKHdyYXBwZXIpO1xuXG4gICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgIGFyZ3NbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICB9XG4gICAgdmFyIGhvbGRlcnMgPSAobGVuZ3RoIDwgMyAmJiBhcmdzWzBdICE9PSBwbGFjZWhvbGRlciAmJiBhcmdzW2xlbmd0aCAtIDFdICE9PSBwbGFjZWhvbGRlcilcbiAgICAgID8gW11cbiAgICAgIDogcmVwbGFjZUhvbGRlcnMoYXJncywgcGxhY2Vob2xkZXIpO1xuXG4gICAgbGVuZ3RoIC09IGhvbGRlcnMubGVuZ3RoO1xuICAgIGlmIChsZW5ndGggPCBhcml0eSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZVJlY3VycnkoXG4gICAgICAgIGZ1bmMsIGJpdG1hc2ssIGNyZWF0ZUh5YnJpZCwgd3JhcHBlci5wbGFjZWhvbGRlciwgdW5kZWZpbmVkLFxuICAgICAgICBhcmdzLCBob2xkZXJzLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYXJpdHkgLSBsZW5ndGgpO1xuICAgIH1cbiAgICB2YXIgZm4gPSAodGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSA/IEN0b3IgOiBmdW5jO1xuICAgIHJldHVybiBhcHBseShmbiwgdGhpcywgYXJncyk7XG4gIH1cbiAgcmV0dXJuIHdyYXBwZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQ3Vycnk7XG4iLCJ2YXIgYmFzZUl0ZXJhdGVlID0gcmVxdWlyZSgnLi9fYmFzZUl0ZXJhdGVlJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgXy5maW5kYCBvciBgXy5maW5kTGFzdGAgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZpbmRJbmRleEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGNvbGxlY3Rpb24gaW5kZXguXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmaW5kIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVGaW5kKGZpbmRJbmRleEZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZnJvbUluZGV4KSB7XG4gICAgdmFyIGl0ZXJhYmxlID0gT2JqZWN0KGNvbGxlY3Rpb24pO1xuICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgIHZhciBpdGVyYXRlZSA9IGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpO1xuICAgICAgY29sbGVjdGlvbiA9IGtleXMoY29sbGVjdGlvbik7XG4gICAgICBwcmVkaWNhdGUgPSBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpOyB9O1xuICAgIH1cbiAgICB2YXIgaW5kZXggPSBmaW5kSW5kZXhGdW5jKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZnJvbUluZGV4KTtcbiAgICByZXR1cm4gaW5kZXggPiAtMSA/IGl0ZXJhYmxlW2l0ZXJhdGVlID8gY29sbGVjdGlvbltpbmRleF0gOiBpbmRleF0gOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlRmluZDtcbiIsInZhciBjb21wb3NlQXJncyA9IHJlcXVpcmUoJy4vX2NvbXBvc2VBcmdzJyksXG4gICAgY29tcG9zZUFyZ3NSaWdodCA9IHJlcXVpcmUoJy4vX2NvbXBvc2VBcmdzUmlnaHQnKSxcbiAgICBjb3VudEhvbGRlcnMgPSByZXF1aXJlKCcuL19jb3VudEhvbGRlcnMnKSxcbiAgICBjcmVhdGVDdG9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQ3RvcicpLFxuICAgIGNyZWF0ZVJlY3VycnkgPSByZXF1aXJlKCcuL19jcmVhdGVSZWN1cnJ5JyksXG4gICAgZ2V0SG9sZGVyID0gcmVxdWlyZSgnLi9fZ2V0SG9sZGVyJyksXG4gICAgcmVvcmRlciA9IHJlcXVpcmUoJy4vX3Jlb3JkZXInKSxcbiAgICByZXBsYWNlSG9sZGVycyA9IHJlcXVpcmUoJy4vX3JlcGxhY2VIb2xkZXJzJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcgPSAxNixcbiAgICBXUkFQX0FSWV9GTEFHID0gMTI4LFxuICAgIFdSQVBfRkxJUF9GTEFHID0gNTEyO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBpbnZva2UgaXQgd2l0aCBvcHRpb25hbCBgdGhpc2BcbiAqIGJpbmRpbmcgb2YgYHRoaXNBcmdgLCBwYXJ0aWFsIGFwcGxpY2F0aW9uLCBhbmQgY3VycnlpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb258c3RyaW5nfSBmdW5jIFRoZSBmdW5jdGlvbiBvciBtZXRob2QgbmFtZSB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0b1xuICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc10gVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc1JpZ2h0XSBUaGUgYXJndW1lbnRzIHRvIGFwcGVuZCB0byB0aG9zZSBwcm92aWRlZFxuICogIHRvIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc1JpZ2h0XSBUaGUgYHBhcnRpYWxzUmlnaHRgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJnUG9zXSBUaGUgYXJndW1lbnQgcG9zaXRpb25zIG9mIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyeV0gVGhlIGFyaXR5IGNhcCBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5XSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSHlicmlkKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBwYXJ0aWFsc1JpZ2h0LCBob2xkZXJzUmlnaHQsIGFyZ1BvcywgYXJ5LCBhcml0eSkge1xuICB2YXIgaXNBcnkgPSBiaXRtYXNrICYgV1JBUF9BUllfRkxBRyxcbiAgICAgIGlzQmluZCA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRyxcbiAgICAgIGlzQmluZEtleSA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfS0VZX0ZMQUcsXG4gICAgICBpc0N1cnJpZWQgPSBiaXRtYXNrICYgKFdSQVBfQ1VSUllfRkxBRyB8IFdSQVBfQ1VSUllfUklHSFRfRkxBRyksXG4gICAgICBpc0ZsaXAgPSBiaXRtYXNrICYgV1JBUF9GTElQX0ZMQUcsXG4gICAgICBDdG9yID0gaXNCaW5kS2V5ID8gdW5kZWZpbmVkIDogY3JlYXRlQ3RvcihmdW5jKTtcblxuICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICBhcmdzID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgaW5kZXggPSBsZW5ndGg7XG5cbiAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgIH1cbiAgICBpZiAoaXNDdXJyaWVkKSB7XG4gICAgICB2YXIgcGxhY2Vob2xkZXIgPSBnZXRIb2xkZXIod3JhcHBlciksXG4gICAgICAgICAgaG9sZGVyc0NvdW50ID0gY291bnRIb2xkZXJzKGFyZ3MsIHBsYWNlaG9sZGVyKTtcbiAgICB9XG4gICAgaWYgKHBhcnRpYWxzKSB7XG4gICAgICBhcmdzID0gY29tcG9zZUFyZ3MoYXJncywgcGFydGlhbHMsIGhvbGRlcnMsIGlzQ3VycmllZCk7XG4gICAgfVxuICAgIGlmIChwYXJ0aWFsc1JpZ2h0KSB7XG4gICAgICBhcmdzID0gY29tcG9zZUFyZ3NSaWdodChhcmdzLCBwYXJ0aWFsc1JpZ2h0LCBob2xkZXJzUmlnaHQsIGlzQ3VycmllZCk7XG4gICAgfVxuICAgIGxlbmd0aCAtPSBob2xkZXJzQ291bnQ7XG4gICAgaWYgKGlzQ3VycmllZCAmJiBsZW5ndGggPCBhcml0eSkge1xuICAgICAgdmFyIG5ld0hvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhhcmdzLCBwbGFjZWhvbGRlcik7XG4gICAgICByZXR1cm4gY3JlYXRlUmVjdXJyeShcbiAgICAgICAgZnVuYywgYml0bWFzaywgY3JlYXRlSHlicmlkLCB3cmFwcGVyLnBsYWNlaG9sZGVyLCB0aGlzQXJnLFxuICAgICAgICBhcmdzLCBuZXdIb2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkgLSBsZW5ndGhcbiAgICAgICk7XG4gICAgfVxuICAgIHZhciB0aGlzQmluZGluZyA9IGlzQmluZCA/IHRoaXNBcmcgOiB0aGlzLFxuICAgICAgICBmbiA9IGlzQmluZEtleSA/IHRoaXNCaW5kaW5nW2Z1bmNdIDogZnVuYztcblxuICAgIGxlbmd0aCA9IGFyZ3MubGVuZ3RoO1xuICAgIGlmIChhcmdQb3MpIHtcbiAgICAgIGFyZ3MgPSByZW9yZGVyKGFyZ3MsIGFyZ1Bvcyk7XG4gICAgfSBlbHNlIGlmIChpc0ZsaXAgJiYgbGVuZ3RoID4gMSkge1xuICAgICAgYXJncy5yZXZlcnNlKCk7XG4gICAgfVxuICAgIGlmIChpc0FyeSAmJiBhcnkgPCBsZW5ndGgpIHtcbiAgICAgIGFyZ3MubGVuZ3RoID0gYXJ5O1xuICAgIH1cbiAgICBpZiAodGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSB7XG4gICAgICBmbiA9IEN0b3IgfHwgY3JlYXRlQ3Rvcihmbik7XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQmluZGluZywgYXJncyk7XG4gIH1cbiAgcmV0dXJuIHdyYXBwZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlSHlicmlkO1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKSxcbiAgICBjcmVhdGVDdG9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQ3RvcicpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gaW52b2tlIGl0IHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nXG4gKiBvZiBgdGhpc0FyZ2AgYW5kIGBwYXJ0aWFsc2AgcHJlcGVuZGVkIHRvIHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBwYXJ0aWFscyBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAqICB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUGFydGlhbChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscykge1xuICB2YXIgaXNCaW5kID0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHLFxuICAgICAgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgYXJnc0luZGV4ID0gLTEsXG4gICAgICAgIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICBsZWZ0SW5kZXggPSAtMSxcbiAgICAgICAgbGVmdExlbmd0aCA9IHBhcnRpYWxzLmxlbmd0aCxcbiAgICAgICAgYXJncyA9IEFycmF5KGxlZnRMZW5ndGggKyBhcmdzTGVuZ3RoKSxcbiAgICAgICAgZm4gPSAodGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSA/IEN0b3IgOiBmdW5jO1xuXG4gICAgd2hpbGUgKCsrbGVmdEluZGV4IDwgbGVmdExlbmd0aCkge1xuICAgICAgYXJnc1tsZWZ0SW5kZXhdID0gcGFydGlhbHNbbGVmdEluZGV4XTtcbiAgICB9XG4gICAgd2hpbGUgKGFyZ3NMZW5ndGgtLSkge1xuICAgICAgYXJnc1tsZWZ0SW5kZXgrK10gPSBhcmd1bWVudHNbKythcmdzSW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gYXBwbHkoZm4sIGlzQmluZCA/IHRoaXNBcmcgOiB0aGlzLCBhcmdzKTtcbiAgfVxuICByZXR1cm4gd3JhcHBlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVQYXJ0aWFsO1xuIiwidmFyIGlzTGF6aWFibGUgPSByZXF1aXJlKCcuL19pc0xhemlhYmxlJyksXG4gICAgc2V0RGF0YSA9IHJlcXVpcmUoJy4vX3NldERhdGEnKSxcbiAgICBzZXRXcmFwVG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRXcmFwVG9TdHJpbmcnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9CT1VORF9GTEFHID0gNCxcbiAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzIsXG4gICAgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgPSA2NDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gY29udGludWUgY3VycnlpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gd3JhcEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgYGZ1bmNgIHdyYXBwZXIuXG4gKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB2YWx1ZS5cbiAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0b1xuICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc10gVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcmdQb3NdIFRoZSBhcmd1bWVudCBwb3NpdGlvbnMgb2YgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVSZWN1cnJ5KGZ1bmMsIGJpdG1hc2ssIHdyYXBGdW5jLCBwbGFjZWhvbGRlciwgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIGFyZ1BvcywgYXJ5LCBhcml0eSkge1xuICB2YXIgaXNDdXJyeSA9IGJpdG1hc2sgJiBXUkFQX0NVUlJZX0ZMQUcsXG4gICAgICBuZXdIb2xkZXJzID0gaXNDdXJyeSA/IGhvbGRlcnMgOiB1bmRlZmluZWQsXG4gICAgICBuZXdIb2xkZXJzUmlnaHQgPSBpc0N1cnJ5ID8gdW5kZWZpbmVkIDogaG9sZGVycyxcbiAgICAgIG5ld1BhcnRpYWxzID0gaXNDdXJyeSA/IHBhcnRpYWxzIDogdW5kZWZpbmVkLFxuICAgICAgbmV3UGFydGlhbHNSaWdodCA9IGlzQ3VycnkgPyB1bmRlZmluZWQgOiBwYXJ0aWFscztcblxuICBiaXRtYXNrIHw9IChpc0N1cnJ5ID8gV1JBUF9QQVJUSUFMX0ZMQUcgOiBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyk7XG4gIGJpdG1hc2sgJj0gfihpc0N1cnJ5ID8gV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgOiBXUkFQX1BBUlRJQUxfRkxBRyk7XG5cbiAgaWYgKCEoYml0bWFzayAmIFdSQVBfQ1VSUllfQk9VTkRfRkxBRykpIHtcbiAgICBiaXRtYXNrICY9IH4oV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX0JJTkRfS0VZX0ZMQUcpO1xuICB9XG4gIHZhciBuZXdEYXRhID0gW1xuICAgIGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIG5ld1BhcnRpYWxzLCBuZXdIb2xkZXJzLCBuZXdQYXJ0aWFsc1JpZ2h0LFxuICAgIG5ld0hvbGRlcnNSaWdodCwgYXJnUG9zLCBhcnksIGFyaXR5XG4gIF07XG5cbiAgdmFyIHJlc3VsdCA9IHdyYXBGdW5jLmFwcGx5KHVuZGVmaW5lZCwgbmV3RGF0YSk7XG4gIGlmIChpc0xhemlhYmxlKGZ1bmMpKSB7XG4gICAgc2V0RGF0YShyZXN1bHQsIG5ld0RhdGEpO1xuICB9XG4gIHJlc3VsdC5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xuICByZXR1cm4gc2V0V3JhcFRvU3RyaW5nKHJlc3VsdCwgZnVuYywgYml0bWFzayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlUmVjdXJyeTtcbiIsInZhciBTZXQgPSByZXF1aXJlKCcuL19TZXQnKSxcbiAgICBub29wID0gcmVxdWlyZSgnLi9ub29wJyksXG4gICAgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4vX3NldFRvQXJyYXknKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2V0IG9iamVjdCBvZiBgdmFsdWVzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYWRkIHRvIHRoZSBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgc2V0LlxuICovXG52YXIgY3JlYXRlU2V0ID0gIShTZXQgJiYgKDEgLyBzZXRUb0FycmF5KG5ldyBTZXQoWywtMF0pKVsxXSkgPT0gSU5GSU5JVFkpID8gbm9vcCA6IGZ1bmN0aW9uKHZhbHVlcykge1xuICByZXR1cm4gbmV3IFNldCh2YWx1ZXMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVTZXQ7XG4iLCJ2YXIgYmFzZVNldERhdGEgPSByZXF1aXJlKCcuL19iYXNlU2V0RGF0YScpLFxuICAgIGNyZWF0ZUJpbmQgPSByZXF1aXJlKCcuL19jcmVhdGVCaW5kJyksXG4gICAgY3JlYXRlQ3VycnkgPSByZXF1aXJlKCcuL19jcmVhdGVDdXJyeScpLFxuICAgIGNyZWF0ZUh5YnJpZCA9IHJlcXVpcmUoJy4vX2NyZWF0ZUh5YnJpZCcpLFxuICAgIGNyZWF0ZVBhcnRpYWwgPSByZXF1aXJlKCcuL19jcmVhdGVQYXJ0aWFsJyksXG4gICAgZ2V0RGF0YSA9IHJlcXVpcmUoJy4vX2dldERhdGEnKSxcbiAgICBtZXJnZURhdGEgPSByZXF1aXJlKCcuL19tZXJnZURhdGEnKSxcbiAgICBzZXREYXRhID0gcmVxdWlyZSgnLi9fc2V0RGF0YScpLFxuICAgIHNldFdyYXBUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFdyYXBUb1N0cmluZycpLFxuICAgIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vdG9JbnRlZ2VyJyk7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfQ1VSUllfRkxBRyA9IDgsXG4gICAgV1JBUF9DVVJSWV9SSUdIVF9GTEFHID0gMTYsXG4gICAgV1JBUF9QQVJUSUFMX0ZMQUcgPSAzMixcbiAgICBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyA9IDY0O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgZWl0aGVyIGN1cnJpZXMgb3IgaW52b2tlcyBgZnVuY2Agd2l0aCBvcHRpb25hbFxuICogYHRoaXNgIGJpbmRpbmcgYW5kIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbnxzdHJpbmd9IGZ1bmMgVGhlIGZ1bmN0aW9uIG9yIG1ldGhvZCBuYW1lIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAgIDEgLSBgXy5iaW5kYFxuICogICAgMiAtIGBfLmJpbmRLZXlgXG4gKiAgICA0IC0gYF8uY3VycnlgIG9yIGBfLmN1cnJ5UmlnaHRgIG9mIGEgYm91bmQgZnVuY3Rpb25cbiAqICAgIDggLSBgXy5jdXJyeWBcbiAqICAgMTYgLSBgXy5jdXJyeVJpZ2h0YFxuICogICAzMiAtIGBfLnBhcnRpYWxgXG4gKiAgIDY0IC0gYF8ucGFydGlhbFJpZ2h0YFxuICogIDEyOCAtIGBfLnJlYXJnYFxuICogIDI1NiAtIGBfLmFyeWBcbiAqICA1MTIgLSBgXy5mbGlwYFxuICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzXSBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVdyYXAoZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIGFyZ1BvcywgYXJ5LCBhcml0eSkge1xuICB2YXIgaXNCaW5kS2V5ID0gYml0bWFzayAmIFdSQVBfQklORF9LRVlfRkxBRztcbiAgaWYgKCFpc0JpbmRLZXkgJiYgdHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB2YXIgbGVuZ3RoID0gcGFydGlhbHMgPyBwYXJ0aWFscy5sZW5ndGggOiAwO1xuICBpZiAoIWxlbmd0aCkge1xuICAgIGJpdG1hc2sgJj0gfihXUkFQX1BBUlRJQUxfRkxBRyB8IFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHKTtcbiAgICBwYXJ0aWFscyA9IGhvbGRlcnMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgYXJ5ID0gYXJ5ID09PSB1bmRlZmluZWQgPyBhcnkgOiBuYXRpdmVNYXgodG9JbnRlZ2VyKGFyeSksIDApO1xuICBhcml0eSA9IGFyaXR5ID09PSB1bmRlZmluZWQgPyBhcml0eSA6IHRvSW50ZWdlcihhcml0eSk7XG4gIGxlbmd0aCAtPSBob2xkZXJzID8gaG9sZGVycy5sZW5ndGggOiAwO1xuXG4gIGlmIChiaXRtYXNrICYgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcpIHtcbiAgICB2YXIgcGFydGlhbHNSaWdodCA9IHBhcnRpYWxzLFxuICAgICAgICBob2xkZXJzUmlnaHQgPSBob2xkZXJzO1xuXG4gICAgcGFydGlhbHMgPSBob2xkZXJzID0gdW5kZWZpbmVkO1xuICB9XG4gIHZhciBkYXRhID0gaXNCaW5kS2V5ID8gdW5kZWZpbmVkIDogZ2V0RGF0YShmdW5jKTtcblxuICB2YXIgbmV3RGF0YSA9IFtcbiAgICBmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LFxuICAgIGFyZ1BvcywgYXJ5LCBhcml0eVxuICBdO1xuXG4gIGlmIChkYXRhKSB7XG4gICAgbWVyZ2VEYXRhKG5ld0RhdGEsIGRhdGEpO1xuICB9XG4gIGZ1bmMgPSBuZXdEYXRhWzBdO1xuICBiaXRtYXNrID0gbmV3RGF0YVsxXTtcbiAgdGhpc0FyZyA9IG5ld0RhdGFbMl07XG4gIHBhcnRpYWxzID0gbmV3RGF0YVszXTtcbiAgaG9sZGVycyA9IG5ld0RhdGFbNF07XG4gIGFyaXR5ID0gbmV3RGF0YVs5XSA9IG5ld0RhdGFbOV0gPT09IHVuZGVmaW5lZFxuICAgID8gKGlzQmluZEtleSA/IDAgOiBmdW5jLmxlbmd0aClcbiAgICA6IG5hdGl2ZU1heChuZXdEYXRhWzldIC0gbGVuZ3RoLCAwKTtcblxuICBpZiAoIWFyaXR5ICYmIGJpdG1hc2sgJiAoV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9DVVJSWV9SSUdIVF9GTEFHKSkge1xuICAgIGJpdG1hc2sgJj0gfihXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpO1xuICB9XG4gIGlmICghYml0bWFzayB8fCBiaXRtYXNrID09IFdSQVBfQklORF9GTEFHKSB7XG4gICAgdmFyIHJlc3VsdCA9IGNyZWF0ZUJpbmQoZnVuYywgYml0bWFzaywgdGhpc0FyZyk7XG4gIH0gZWxzZSBpZiAoYml0bWFzayA9PSBXUkFQX0NVUlJZX0ZMQUcgfHwgYml0bWFzayA9PSBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpIHtcbiAgICByZXN1bHQgPSBjcmVhdGVDdXJyeShmdW5jLCBiaXRtYXNrLCBhcml0eSk7XG4gIH0gZWxzZSBpZiAoKGJpdG1hc2sgPT0gV1JBUF9QQVJUSUFMX0ZMQUcgfHwgYml0bWFzayA9PSAoV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX1BBUlRJQUxfRkxBRykpICYmICFob2xkZXJzLmxlbmd0aCkge1xuICAgIHJlc3VsdCA9IGNyZWF0ZVBhcnRpYWwoZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IGNyZWF0ZUh5YnJpZC5hcHBseSh1bmRlZmluZWQsIG5ld0RhdGEpO1xuICB9XG4gIHZhciBzZXR0ZXIgPSBkYXRhID8gYmFzZVNldERhdGEgOiBzZXREYXRhO1xuICByZXR1cm4gc2V0V3JhcFRvU3RyaW5nKHNldHRlcihyZXN1bHQsIG5ld0RhdGEpLCBmdW5jLCBiaXRtYXNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVXcmFwO1xuIiwidmFyIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuL2lzUGxhaW5PYmplY3QnKTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLm9taXRgIHRvIGN1c3RvbWl6ZSBpdHMgYF8uY2xvbmVEZWVwYCB1c2UgdG8gb25seSBjbG9uZSBwbGFpblxuICogb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB1bmNsb25lZCB2YWx1ZSBvciBgdW5kZWZpbmVkYCB0byBkZWZlciBjbG9uaW5nIHRvIGBfLmNsb25lRGVlcGAuXG4gKi9cbmZ1bmN0aW9uIGN1c3RvbU9taXRDbG9uZSh2YWx1ZSkge1xuICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyB1bmRlZmluZWQgOiB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjdXN0b21PbWl0Q2xvbmU7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICB2YXIgZnVuYyA9IGdldE5hdGl2ZShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xuICAgIGZ1bmMoe30sICcnLCB7fSk7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZVByb3BlcnR5O1xuIiwidmFyIFNldENhY2hlID0gcmVxdWlyZSgnLi9fU2V0Q2FjaGUnKSxcbiAgICBhcnJheVNvbWUgPSByZXF1aXJlKCcuL19hcnJheVNvbWUnKSxcbiAgICBjYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2NhY2hlSGFzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGFycmF5cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtBcnJheX0gb3RoZXIgVGhlIG90aGVyIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBhcnJheWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQXJyYXlzKGFycmF5LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgYXJyTGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoZXIubGVuZ3RoO1xuXG4gIGlmIChhcnJMZW5ndGggIT0gb3RoTGVuZ3RoICYmICEoaXNQYXJ0aWFsICYmIG90aExlbmd0aCA+IGFyckxlbmd0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChhcnJheSk7XG4gIGlmIChzdGFja2VkICYmIHN0YWNrLmdldChvdGhlcikpIHtcbiAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgfVxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IHRydWUsXG4gICAgICBzZWVuID0gKGJpdG1hc2sgJiBDT01QQVJFX1VOT1JERVJFRF9GTEFHKSA/IG5ldyBTZXRDYWNoZSA6IHVuZGVmaW5lZDtcblxuICBzdGFjay5zZXQoYXJyYXksIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBhcnJheSk7XG5cbiAgLy8gSWdub3JlIG5vbi1pbmRleCBwcm9wZXJ0aWVzLlxuICB3aGlsZSAoKytpbmRleCA8IGFyckxlbmd0aCkge1xuICAgIHZhciBhcnJWYWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltpbmRleF07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgYXJyVmFsdWUsIGluZGV4LCBvdGhlciwgYXJyYXksIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIoYXJyVmFsdWUsIG90aFZhbHVlLCBpbmRleCwgYXJyYXksIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIGlmIChjb21wYXJlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY29tcGFyZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmIChzZWVuKSB7XG4gICAgICBpZiAoIWFycmF5U29tZShvdGhlciwgZnVuY3Rpb24ob3RoVmFsdWUsIG90aEluZGV4KSB7XG4gICAgICAgICAgICBpZiAoIWNhY2hlSGFzKHNlZW4sIG90aEluZGV4KSAmJlxuICAgICAgICAgICAgICAgIChhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKSkge1xuICAgICAgICAgICAgICByZXR1cm4gc2Vlbi5wdXNoKG90aEluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSkge1xuICAgICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghKFxuICAgICAgICAgIGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fFxuICAgICAgICAgICAgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShhcnJheSk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxBcnJheXM7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgVWludDhBcnJheSA9IHJlcXVpcmUoJy4vX1VpbnQ4QXJyYXknKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgbWFwVG9BcnJheSA9IHJlcXVpcmUoJy4vX21hcFRvQXJyYXknKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFZhbHVlT2YgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnZhbHVlT2YgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBjb21wYXJpbmcgb2JqZWN0cyBvZlxuICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNvbXBhcmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0cyB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAob2JqZWN0LmJ5dGVPZmZzZXQgIT0gb3RoZXIuYnl0ZU9mZnNldCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgb2JqZWN0ID0gb2JqZWN0LmJ1ZmZlcjtcbiAgICAgIG90aGVyID0gb3RoZXIuYnVmZmVyO1xuXG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBVaW50OEFycmF5KG9iamVjdCksIG5ldyBVaW50OEFycmF5KG90aGVyKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cbiAgICAgIC8vIEludmFsaWQgZGF0ZXMgYXJlIGNvZXJjZWQgdG8gYE5hTmAuXG4gICAgICByZXR1cm4gZXEoK29iamVjdCwgK290aGVyKTtcblxuICAgIGNhc2UgZXJyb3JUYWc6XG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWUgPT0gb3RoZXIubmFtZSAmJiBvYmplY3QubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICAvLyBDb2VyY2UgcmVnZXhlcyB0byBzdHJpbmdzIGFuZCB0cmVhdCBzdHJpbmdzLCBwcmltaXRpdmVzIGFuZCBvYmplY3RzLFxuICAgICAgLy8gYXMgZXF1YWwuIFNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiBvYmplY3QgPT0gKG90aGVyICsgJycpO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICB2YXIgY29udmVydCA9IG1hcFRvQXJyYXk7XG5cbiAgICBjYXNlIHNldFRhZzpcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XG4gICAgICBjb252ZXJ0IHx8IChjb252ZXJ0ID0gc2V0VG9BcnJheSk7XG5cbiAgICAgIGlmIChvYmplY3Quc2l6ZSAhPSBvdGhlci5zaXplICYmICFpc1BhcnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgICAgIGlmIChzdGFja2VkKSB7XG4gICAgICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xuICAgICAgfVxuICAgICAgYml0bWFzayB8PSBDT01QQVJFX1VOT1JERVJFRF9GTEFHO1xuXG4gICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgICAgIHZhciByZXN1bHQgPSBlcXVhbEFycmF5cyhjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgICAgIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgaWYgKHN5bWJvbFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQnlUYWc7XG4iLCJ2YXIgZ2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3Igb2JqZWN0cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgb2JqUHJvcHMgPSBnZXRBbGxLZXlzKG9iamVjdCksXG4gICAgICBvYmpMZW5ndGggPSBvYmpQcm9wcy5sZW5ndGgsXG4gICAgICBvdGhQcm9wcyA9IGdldEFsbEtleXMob3RoZXIpLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoUHJvcHMubGVuZ3RoO1xuXG4gIGlmIChvYmpMZW5ndGggIT0gb3RoTGVuZ3RoICYmICFpc1BhcnRpYWwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGluZGV4ID0gb2JqTGVuZ3RoO1xuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIHZhciBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgaWYgKCEoaXNQYXJ0aWFsID8ga2V5IGluIG90aGVyIDogaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwga2V5KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICBpZiAoc3RhY2tlZCAmJiBzdGFjay5nZXQob3RoZXIpKSB7XG4gICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IHRydWU7XG4gIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBvYmplY3QpO1xuXG4gIHZhciBza2lwQ3RvciA9IGlzUGFydGlhbDtcbiAgd2hpbGUgKCsraW5kZXggPCBvYmpMZW5ndGgpIHtcbiAgICBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJba2V5XTtcblxuICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBvYmpWYWx1ZSwga2V5LCBvdGhlciwgb2JqZWN0LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSwga2V5LCBvYmplY3QsIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmICghKGNvbXBhcmVkID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IChvYmpWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKG9ialZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKVxuICAgICAgICAgIDogY29tcGFyZWRcbiAgICAgICAgKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2tpcEN0b3IgfHwgKHNraXBDdG9yID0ga2V5ID09ICdjb25zdHJ1Y3RvcicpO1xuICB9XG4gIGlmIChyZXN1bHQgJiYgIXNraXBDdG9yKSB7XG4gICAgdmFyIG9iakN0b3IgPSBvYmplY3QuY29uc3RydWN0b3IsXG4gICAgICAgIG90aEN0b3IgPSBvdGhlci5jb25zdHJ1Y3RvcjtcblxuICAgIC8vIE5vbiBgT2JqZWN0YCBvYmplY3QgaW5zdGFuY2VzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWFsLlxuICAgIGlmIChvYmpDdG9yICE9IG90aEN0b3IgJiZcbiAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmXG4gICAgICAgICEodHlwZW9mIG9iakN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvYmpDdG9yIGluc3RhbmNlb2Ygb2JqQ3RvciAmJlxuICAgICAgICAgIHR5cGVvZiBvdGhDdG9yID09ICdmdW5jdGlvbicgJiYgb3RoQ3RvciBpbnN0YW5jZW9mIG90aEN0b3IpKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxPYmplY3RzO1xuIiwidmFyIGJhc2VQcm9wZXJ0eU9mID0gcmVxdWlyZSgnLi9fYmFzZVByb3BlcnR5T2YnKTtcblxuLyoqIFVzZWQgdG8gbWFwIGNoYXJhY3RlcnMgdG8gSFRNTCBlbnRpdGllcy4gKi9cbnZhciBodG1sRXNjYXBlcyA9IHtcbiAgJyYnOiAnJmFtcDsnLFxuICAnPCc6ICcmbHQ7JyxcbiAgJz4nOiAnJmd0OycsXG4gICdcIic6ICcmcXVvdDsnLFxuICBcIidcIjogJyYjMzk7J1xufTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLmVzY2FwZWAgdG8gY29udmVydCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaHIgVGhlIG1hdGNoZWQgY2hhcmFjdGVyIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgY2hhcmFjdGVyLlxuICovXG52YXIgZXNjYXBlSHRtbENoYXIgPSBiYXNlUHJvcGVydHlPZihodG1sRXNjYXBlcyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZXNjYXBlSHRtbENoYXI7XG4iLCJ2YXIgZmxhdHRlbiA9IHJlcXVpcmUoJy4vZmxhdHRlbicpLFxuICAgIG92ZXJSZXN0ID0gcmVxdWlyZSgnLi9fb3ZlclJlc3QnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggZmxhdHRlbnMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gZmxhdFJlc3QoZnVuYykge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgdW5kZWZpbmVkLCBmbGF0dGVuKSwgZnVuYyArICcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0UmVzdDtcbiIsIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbm1vZHVsZS5leHBvcnRzID0gZnJlZUdsb2JhbDtcbiIsInZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5cywgZ2V0U3ltYm9scyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsS2V5cztcbiIsInZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9sc0luID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9sc0luJyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBnZXRBbGxLZXlzSW4ob2JqZWN0KSB7XG4gIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNJbiwgZ2V0U3ltYm9sc0luKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRBbGxLZXlzSW47XG4iLCJ2YXIgbWV0YU1hcCA9IHJlcXVpcmUoJy4vX21ldGFNYXAnKSxcbiAgICBub29wID0gcmVxdWlyZSgnLi9ub29wJyk7XG5cbi8qKlxuICogR2V0cyBtZXRhZGF0YSBmb3IgYGZ1bmNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtZXRhZGF0YSBmb3IgYGZ1bmNgLlxuICovXG52YXIgZ2V0RGF0YSA9ICFtZXRhTWFwID8gbm9vcCA6IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgcmV0dXJuIG1ldGFNYXAuZ2V0KGZ1bmMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXREYXRhO1xuIiwidmFyIHJlYWxOYW1lcyA9IHJlcXVpcmUoJy4vX3JlYWxOYW1lcycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIG5hbWUgb2YgYGZ1bmNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNOYW1lKGZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IChmdW5jLm5hbWUgKyAnJyksXG4gICAgICBhcnJheSA9IHJlYWxOYW1lc1tyZXN1bHRdLFxuICAgICAgbGVuZ3RoID0gaGFzT3duUHJvcGVydHkuY2FsbChyZWFsTmFtZXMsIHJlc3VsdCkgPyBhcnJheS5sZW5ndGggOiAwO1xuXG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIHZhciBkYXRhID0gYXJyYXlbbGVuZ3RoXSxcbiAgICAgICAgb3RoZXJGdW5jID0gZGF0YS5mdW5jO1xuICAgIGlmIChvdGhlckZ1bmMgPT0gbnVsbCB8fCBvdGhlckZ1bmMgPT0gZnVuYykge1xuICAgICAgcmV0dXJuIGRhdGEubmFtZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRGdW5jTmFtZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgYXJndW1lbnQgcGxhY2Vob2xkZXIgdmFsdWUgZm9yIGBmdW5jYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwbGFjZWhvbGRlciB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0SG9sZGVyKGZ1bmMpIHtcbiAgdmFyIG9iamVjdCA9IGZ1bmM7XG4gIHJldHVybiBvYmplY3QucGxhY2Vob2xkZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0SG9sZGVyO1xuIiwidmFyIGlzS2V5YWJsZSA9IHJlcXVpcmUoJy4vX2lzS2V5YWJsZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWFwRGF0YTtcbiIsInZhciBpc1N0cmljdENvbXBhcmFibGUgPSByZXF1aXJlKCcuL19pc1N0cmljdENvbXBhcmFibGUnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3Mgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbWF0Y2ggZGF0YSBvZiBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gZ2V0TWF0Y2hEYXRhKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0ga2V5cyhvYmplY3QpLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICB2YXIga2V5ID0gcmVzdWx0W2xlbmd0aF0sXG4gICAgICAgIHZhbHVlID0gb2JqZWN0W2tleV07XG5cbiAgICByZXN1bHRbbGVuZ3RoXSA9IFtrZXksIHZhbHVlLCBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpXTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE1hdGNoRGF0YTtcbiIsInZhciBiYXNlSXNOYXRpdmUgPSByZXF1aXJlKCcuL19iYXNlSXNOYXRpdmUnKSxcbiAgICBnZXRWYWx1ZSA9IHJlcXVpcmUoJy4vX2dldFZhbHVlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TmF0aXZlO1xuIiwidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFByb3RvdHlwZTtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFJhd1RhZztcbiIsInZhciBhcnJheUZpbHRlciA9IHJlcXVpcmUoJy4vX2FycmF5RmlsdGVyJyksXG4gICAgc3R1YkFycmF5ID0gcmVxdWlyZSgnLi9zdHViQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAqL1xudmFyIGdldFN5bWJvbHMgPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gIHJldHVybiBhcnJheUZpbHRlcihuYXRpdmVHZXRTeW1ib2xzKG9iamVjdCksIGZ1bmN0aW9uKHN5bWJvbCkge1xuICAgIHJldHVybiBwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgc3ltYm9sKTtcbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFN5bWJvbHM7XG4iLCJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBzdHViQXJyYXkgPSByZXF1aXJlKCcuL3N0dWJBcnJheScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzSW4gPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHdoaWxlIChvYmplY3QpIHtcbiAgICBhcnJheVB1c2gocmVzdWx0LCBnZXRTeW1ib2xzKG9iamVjdCkpO1xuICAgIG9iamVjdCA9IGdldFByb3RvdHlwZShvYmplY3QpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFN5bWJvbHNJbjtcbiIsInZhciBEYXRhVmlldyA9IHJlcXVpcmUoJy4vX0RhdGFWaWV3JyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgUHJvbWlzZSA9IHJlcXVpcmUoJy4vX1Byb21pc2UnKSxcbiAgICBTZXQgPSByZXF1aXJlKCcuL19TZXQnKSxcbiAgICBXZWFrTWFwID0gcmVxdWlyZSgnLi9fV2Vha01hcCcpLFxuICAgIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcHJvbWlzZVRhZyA9ICdbb2JqZWN0IFByb21pc2VdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWFwcywgc2V0cywgYW5kIHdlYWttYXBzLiAqL1xudmFyIGRhdGFWaWV3Q3RvclN0cmluZyA9IHRvU291cmNlKERhdGFWaWV3KSxcbiAgICBtYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoTWFwKSxcbiAgICBwcm9taXNlQ3RvclN0cmluZyA9IHRvU291cmNlKFByb21pc2UpLFxuICAgIHNldEN0b3JTdHJpbmcgPSB0b1NvdXJjZShTZXQpLFxuICAgIHdlYWtNYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoV2Vha01hcCk7XG5cbi8qKlxuICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbnZhciBnZXRUYWcgPSBiYXNlR2V0VGFnO1xuXG4vLyBGYWxsYmFjayBmb3IgZGF0YSB2aWV3cywgbWFwcywgc2V0cywgYW5kIHdlYWsgbWFwcyBpbiBJRSAxMSBhbmQgcHJvbWlzZXMgaW4gTm9kZS5qcyA8IDYuXG5pZiAoKERhdGFWaWV3ICYmIGdldFRhZyhuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcpIHx8XG4gICAgKE1hcCAmJiBnZXRUYWcobmV3IE1hcCkgIT0gbWFwVGFnKSB8fFxuICAgIChQcm9taXNlICYmIGdldFRhZyhQcm9taXNlLnJlc29sdmUoKSkgIT0gcHJvbWlzZVRhZykgfHxcbiAgICAoU2V0ICYmIGdldFRhZyhuZXcgU2V0KSAhPSBzZXRUYWcpIHx8XG4gICAgKFdlYWtNYXAgJiYgZ2V0VGFnKG5ldyBXZWFrTWFwKSAhPSB3ZWFrTWFwVGFnKSkge1xuICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhciByZXN1bHQgPSBiYXNlR2V0VGFnKHZhbHVlKSxcbiAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgY3RvclN0cmluZyA9IEN0b3IgPyB0b1NvdXJjZShDdG9yKSA6ICcnO1xuXG4gICAgaWYgKGN0b3JTdHJpbmcpIHtcbiAgICAgIHN3aXRjaCAoY3RvclN0cmluZykge1xuICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xuICAgICAgICBjYXNlIG1hcEN0b3JTdHJpbmc6IHJldHVybiBtYXBUYWc7XG4gICAgICAgIGNhc2UgcHJvbWlzZUN0b3JTdHJpbmc6IHJldHVybiBwcm9taXNlVGFnO1xuICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XG4gICAgICAgIGNhc2Ugd2Vha01hcEN0b3JTdHJpbmc6IHJldHVybiB3ZWFrTWFwVGFnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFRhZztcbiIsIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFZhbHVlO1xuIiwiLyoqIFVzZWQgdG8gbWF0Y2ggd3JhcCBkZXRhaWwgY29tbWVudHMuICovXG52YXIgcmVXcmFwRGV0YWlscyA9IC9cXHtcXG5cXC9cXCogXFxbd3JhcHBlZCB3aXRoICguKylcXF0gXFwqLyxcbiAgICByZVNwbGl0RGV0YWlscyA9IC8sPyAmIC87XG5cbi8qKlxuICogRXh0cmFjdHMgd3JhcHBlciBkZXRhaWxzIGZyb20gdGhlIGBzb3VyY2VgIGJvZHkgY29tbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBUaGUgc291cmNlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHdyYXBwZXIgZGV0YWlscy5cbiAqL1xuZnVuY3Rpb24gZ2V0V3JhcERldGFpbHMoc291cmNlKSB7XG4gIHZhciBtYXRjaCA9IHNvdXJjZS5tYXRjaChyZVdyYXBEZXRhaWxzKTtcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0uc3BsaXQocmVTcGxpdERldGFpbHMpIDogW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0V3JhcERldGFpbHM7XG4iLCJ2YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHBhdGhgIGV4aXN0cyBvbiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYXNGdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjayBwcm9wZXJ0aWVzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzUGF0aChvYmplY3QsIHBhdGgsIGhhc0Z1bmMpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHRvS2V5KHBhdGhbaW5kZXhdKTtcbiAgICBpZiAoIShyZXN1bHQgPSBvYmplY3QgIT0gbnVsbCAmJiBoYXNGdW5jKG9iamVjdCwga2V5KSkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBvYmplY3QgPSBvYmplY3Rba2V5XTtcbiAgfVxuICBpZiAocmVzdWx0IHx8ICsraW5kZXggIT0gbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBsZW5ndGggPSBvYmplY3QgPT0gbnVsbCA/IDAgOiBvYmplY3QubGVuZ3RoO1xuICByZXR1cm4gISFsZW5ndGggJiYgaXNMZW5ndGgobGVuZ3RoKSAmJiBpc0luZGV4KGtleSwgbGVuZ3RoKSAmJlxuICAgIChpc0FycmF5KG9iamVjdCkgfHwgaXNBcmd1bWVudHMob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzUGF0aDtcbiIsIi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjaGFyYWN0ZXIgY2xhc3Nlcy4gKi9cbnZhciByc0FzdHJhbFJhbmdlID0gJ1xcXFx1ZDgwMC1cXFxcdWRmZmYnLFxuICAgIHJzQ29tYm9NYXJrc1JhbmdlID0gJ1xcXFx1MDMwMC1cXFxcdTAzNmYnLFxuICAgIHJlQ29tYm9IYWxmTWFya3NSYW5nZSA9ICdcXFxcdWZlMjAtXFxcXHVmZTJmJyxcbiAgICByc0NvbWJvU3ltYm9sc1JhbmdlID0gJ1xcXFx1MjBkMC1cXFxcdTIwZmYnLFxuICAgIHJzQ29tYm9SYW5nZSA9IHJzQ29tYm9NYXJrc1JhbmdlICsgcmVDb21ib0hhbGZNYXJrc1JhbmdlICsgcnNDb21ib1N5bWJvbHNSYW5nZSxcbiAgICByc1ZhclJhbmdlID0gJ1xcXFx1ZmUwZVxcXFx1ZmUwZic7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjYXB0dXJlIGdyb3Vwcy4gKi9cbnZhciByc1pXSiA9ICdcXFxcdTIwMGQnO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgc3RyaW5ncyB3aXRoIFt6ZXJvLXdpZHRoIGpvaW5lcnMgb3IgY29kZSBwb2ludHMgZnJvbSB0aGUgYXN0cmFsIHBsYW5lc10oaHR0cDovL2Vldi5lZS9ibG9nLzIwMTUvMDkvMTIvZGFyay1jb3JuZXJzLW9mLXVuaWNvZGUvKS4gKi9cbnZhciByZUhhc1VuaWNvZGUgPSBSZWdFeHAoJ1snICsgcnNaV0ogKyByc0FzdHJhbFJhbmdlICArIHJzQ29tYm9SYW5nZSArIHJzVmFyUmFuZ2UgKyAnXScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgc3RyaW5nYCBjb250YWlucyBVbmljb2RlIHN5bWJvbHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGEgc3ltYm9sIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc1VuaWNvZGUoc3RyaW5nKSB7XG4gIHJldHVybiByZUhhc1VuaWNvZGUudGVzdChzdHJpbmcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc1VuaWNvZGU7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKi9cbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gdGhpcy5oYXMoa2V5KSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaERlbGV0ZTtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hHZXQ7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgaGFzaCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoSGFzO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoU2V0O1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBhcnJheSBjbG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lQXJyYXkoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IG5ldyBhcnJheS5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIC8vIEFkZCBwcm9wZXJ0aWVzIGFzc2lnbmVkIGJ5IGBSZWdFeHAjZXhlY2AuXG4gIGlmIChsZW5ndGggJiYgdHlwZW9mIGFycmF5WzBdID09ICdzdHJpbmcnICYmIGhhc093blByb3BlcnR5LmNhbGwoYXJyYXksICdpbmRleCcpKSB7XG4gICAgcmVzdWx0LmluZGV4ID0gYXJyYXkuaW5kZXg7XG4gICAgcmVzdWx0LmlucHV0ID0gYXJyYXkuaW5wdXQ7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVBcnJheTtcbiIsInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpLFxuICAgIGNsb25lRGF0YVZpZXcgPSByZXF1aXJlKCcuL19jbG9uZURhdGFWaWV3JyksXG4gICAgY2xvbmVSZWdFeHAgPSByZXF1aXJlKCcuL19jbG9uZVJlZ0V4cCcpLFxuICAgIGNsb25lU3ltYm9sID0gcmVxdWlyZSgnLi9fY2xvbmVTeW1ib2wnKSxcbiAgICBjbG9uZVR5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19jbG9uZVR5cGVkQXJyYXknKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lIGJhc2VkIG9uIGl0cyBgdG9TdHJpbmdUYWdgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY2xvbmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE1hcGAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgYFNldGAsIG9yIGBTdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZUJ5VGFnKG9iamVjdCwgdGFnLCBpc0RlZXApIHtcbiAgdmFyIEN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIHJldHVybiBjbG9uZUFycmF5QnVmZmVyKG9iamVjdCk7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yKCtvYmplY3QpO1xuXG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIHJldHVybiBjbG9uZURhdGFWaWV3KG9iamVjdCwgaXNEZWVwKTtcblxuICAgIGNhc2UgZmxvYXQzMlRhZzogY2FzZSBmbG9hdDY0VGFnOlxuICAgIGNhc2UgaW50OFRhZzogY2FzZSBpbnQxNlRhZzogY2FzZSBpbnQzMlRhZzpcbiAgICBjYXNlIHVpbnQ4VGFnOiBjYXNlIHVpbnQ4Q2xhbXBlZFRhZzogY2FzZSB1aW50MTZUYWc6IGNhc2UgdWludDMyVGFnOlxuICAgICAgcmV0dXJuIGNsb25lVHlwZWRBcnJheShvYmplY3QsIGlzRGVlcCk7XG5cbiAgICBjYXNlIG1hcFRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcjtcblxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yKG9iamVjdCk7XG5cbiAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICAgIHJldHVybiBjbG9uZVJlZ0V4cChvYmplY3QpO1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3I7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIHJldHVybiBjbG9uZVN5bWJvbChvYmplY3QpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5pdENsb25lQnlUYWc7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xuICByZXR1cm4gKHR5cGVvZiBvYmplY3QuY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNQcm90b3R5cGUob2JqZWN0KSlcbiAgICA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpXG4gICAgOiB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVPYmplY3Q7XG4iLCIvKiogVXNlZCB0byBtYXRjaCB3cmFwIGRldGFpbCBjb21tZW50cy4gKi9cbnZhciByZVdyYXBDb21tZW50ID0gL1xceyg/OlxcblxcL1xcKiBcXFt3cmFwcGVkIHdpdGggLitcXF0gXFwqXFwvKT9cXG4/LztcblxuLyoqXG4gKiBJbnNlcnRzIHdyYXBwZXIgYGRldGFpbHNgIGluIGEgY29tbWVudCBhdCB0aGUgdG9wIG9mIHRoZSBgc291cmNlYCBib2R5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIFRoZSBzb3VyY2UgdG8gbW9kaWZ5LlxuICogQHJldHVybnMge0FycmF5fSBkZXRhaWxzIFRoZSBkZXRhaWxzIHRvIGluc2VydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIG1vZGlmaWVkIHNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gaW5zZXJ0V3JhcERldGFpbHMoc291cmNlLCBkZXRhaWxzKSB7XG4gIHZhciBsZW5ndGggPSBkZXRhaWxzLmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBsZW5ndGggLSAxO1xuICBkZXRhaWxzW2xhc3RJbmRleF0gPSAobGVuZ3RoID4gMSA/ICcmICcgOiAnJykgKyBkZXRhaWxzW2xhc3RJbmRleF07XG4gIGRldGFpbHMgPSBkZXRhaWxzLmpvaW4obGVuZ3RoID4gMiA/ICcsICcgOiAnICcpO1xuICByZXR1cm4gc291cmNlLnJlcGxhY2UocmVXcmFwQ29tbWVudCwgJ3tcXG4vKiBbd3JhcHBlZCB3aXRoICcgKyBkZXRhaWxzICsgJ10gKi9cXG4nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRXcmFwRGV0YWlscztcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwcmVhZGFibGVTeW1ib2wgPSBTeW1ib2wgPyBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgZmxhdHRlbmFibGUgYGFyZ3VtZW50c2Agb2JqZWN0IG9yIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZsYXR0ZW5hYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzRmxhdHRlbmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIGlzQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSB8fFxuICAgICEhKHNwcmVhZGFibGVTeW1ib2wgJiYgdmFsdWUgJiYgdmFsdWVbc3ByZWFkYWJsZVN5bWJvbF0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRmxhdHRlbmFibGU7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xudmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJbmRleDtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgKSB7XG4gICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJdGVyYXRlZUNhbGw7XG4iLCJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxcbiAgICByZUlzUGxhaW5Qcm9wID0gL15cXHcqJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lIGFuZCBub3QgYSBwcm9wZXJ0eSBwYXRoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXkodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGlmICh0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicgfHxcbiAgICAgIHZhbHVlID09IG51bGwgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIHJlSXNQbGFpblByb3AudGVzdCh2YWx1ZSkgfHwgIXJlSXNEZWVwUHJvcC50ZXN0KHZhbHVlKSB8fFxuICAgIChvYmplY3QgIT0gbnVsbCAmJiB2YWx1ZSBpbiBPYmplY3Qob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXk7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXlhYmxlO1xuIiwidmFyIExhenlXcmFwcGVyID0gcmVxdWlyZSgnLi9fTGF6eVdyYXBwZXInKSxcbiAgICBnZXREYXRhID0gcmVxdWlyZSgnLi9fZ2V0RGF0YScpLFxuICAgIGdldEZ1bmNOYW1lID0gcmVxdWlyZSgnLi9fZ2V0RnVuY05hbWUnKSxcbiAgICBsb2Rhc2ggPSByZXF1aXJlKCcuL3dyYXBwZXJMb2Rhc2gnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBhIGxhenkgY291bnRlcnBhcnQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBoYXMgYSBsYXp5IGNvdW50ZXJwYXJ0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNMYXppYWJsZShmdW5jKSB7XG4gIHZhciBmdW5jTmFtZSA9IGdldEZ1bmNOYW1lKGZ1bmMpLFxuICAgICAgb3RoZXIgPSBsb2Rhc2hbZnVuY05hbWVdO1xuXG4gIGlmICh0eXBlb2Ygb3RoZXIgIT0gJ2Z1bmN0aW9uJyB8fCAhKGZ1bmNOYW1lIGluIExhenlXcmFwcGVyLnByb3RvdHlwZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGZ1bmMgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIGRhdGEgPSBnZXREYXRhKG90aGVyKTtcbiAgcmV0dXJuICEhZGF0YSAmJiBmdW5jID09PSBkYXRhWzBdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTGF6aWFibGU7XG4iLCJ2YXIgY29yZUpzRGF0YSA9IHJlcXVpcmUoJy4vX2NvcmVKc0RhdGEnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc01hc2tlZDtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb3RvdHlwZTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcbiAqICBlcXVhbGl0eSBjb21wYXJpc29ucywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSAmJiAhaXNPYmplY3QodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyaWN0Q29tcGFyYWJsZTtcbiIsIi8qKlxuICogQ29udmVydHMgYGl0ZXJhdG9yYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGl0ZXJhdG9yIFRoZSBpdGVyYXRvciB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGl0ZXJhdG9yVG9BcnJheShpdGVyYXRvcikge1xuICB2YXIgZGF0YSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICghKGRhdGEgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICByZXN1bHQucHVzaChkYXRhLnZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGl0ZXJhdG9yVG9BcnJheTtcbiIsIi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVDbGVhcjtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgLS10aGlzLnNpemU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZURlbGV0ZTtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVHZXQ7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUhhcztcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICArK3RoaXMuc2l6ZTtcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZVNldDtcbiIsInZhciBIYXNoID0gcmVxdWlyZSgnLi9fSGFzaCcpLFxuICAgIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVDbGVhcjtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZURlbGV0ZTtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVHZXQ7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUhhcztcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVTZXQ7XG4iLCIvKipcbiAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gKi9cbmZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobWFwLnNpemUpO1xuXG4gIG1hcC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSBba2V5LCB2YWx1ZV07XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFRvQXJyYXk7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgbWF0Y2hlc1Byb3BlcnR5YCBmb3Igc291cmNlIHZhbHVlcyBzdWl0YWJsZVxuICogZm9yIHN0cmljdCBlcXVhbGl0eSBjb21wYXJpc29ucywgaS5lLiBgPT09YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKGtleSwgc3JjVmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0W2tleV0gPT09IHNyY1ZhbHVlICYmXG4gICAgICAoc3JjVmFsdWUgIT09IHVuZGVmaW5lZCB8fCAoa2V5IGluIE9iamVjdChvYmplY3QpKSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWF0Y2hlc1N0cmljdENvbXBhcmFibGU7XG4iLCJ2YXIgbWVtb2l6ZSA9IHJlcXVpcmUoJy4vbWVtb2l6ZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgbWF4aW11bSBtZW1vaXplIGNhY2hlIHNpemUuICovXG52YXIgTUFYX01FTU9JWkVfU0laRSA9IDUwMDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XG4gIHZhciByZXN1bHQgPSBtZW1vaXplKGZ1bmMsIGZ1bmN0aW9uKGtleSkge1xuICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XG4gICAgICBjYWNoZS5jbGVhcigpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9KTtcblxuICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZUNhcHBlZDtcbiIsInZhciBjb21wb3NlQXJncyA9IHJlcXVpcmUoJy4vX2NvbXBvc2VBcmdzJyksXG4gICAgY29tcG9zZUFyZ3NSaWdodCA9IHJlcXVpcmUoJy4vX2NvbXBvc2VBcmdzUmlnaHQnKSxcbiAgICByZXBsYWNlSG9sZGVycyA9IHJlcXVpcmUoJy4vX3JlcGxhY2VIb2xkZXJzJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBpbnRlcm5hbCBhcmd1bWVudCBwbGFjZWhvbGRlci4gKi9cbnZhciBQTEFDRUhPTERFUiA9ICdfX2xvZGFzaF9wbGFjZWhvbGRlcl9fJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9CT1VORF9GTEFHID0gNCxcbiAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgIFdSQVBfQVJZX0ZMQUcgPSAxMjgsXG4gICAgV1JBUF9SRUFSR19GTEFHID0gMjU2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWluID0gTWF0aC5taW47XG5cbi8qKlxuICogTWVyZ2VzIHRoZSBmdW5jdGlvbiBtZXRhZGF0YSBvZiBgc291cmNlYCBpbnRvIGBkYXRhYC5cbiAqXG4gKiBNZXJnaW5nIG1ldGFkYXRhIHJlZHVjZXMgdGhlIG51bWJlciBvZiB3cmFwcGVycyB1c2VkIHRvIGludm9rZSBhIGZ1bmN0aW9uLlxuICogVGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIG1ldGhvZHMgbGlrZSBgXy5iaW5kYCwgYF8uY3VycnlgLCBhbmQgYF8ucGFydGlhbGBcbiAqIG1heSBiZSBhcHBsaWVkIHJlZ2FyZGxlc3Mgb2YgZXhlY3V0aW9uIG9yZGVyLiBNZXRob2RzIGxpa2UgYF8uYXJ5YCBhbmRcbiAqIGBfLnJlYXJnYCBtb2RpZnkgZnVuY3Rpb24gYXJndW1lbnRzLCBtYWtpbmcgdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlXG4gKiBleGVjdXRlZCBpbXBvcnRhbnQsIHByZXZlbnRpbmcgdGhlIG1lcmdpbmcgb2YgbWV0YWRhdGEuIEhvd2V2ZXIsIHdlIG1ha2VcbiAqIGFuIGV4Y2VwdGlvbiBmb3IgYSBzYWZlIGNvbWJpbmVkIGNhc2Ugd2hlcmUgY3VycmllZCBmdW5jdGlvbnMgaGF2ZSBgXy5hcnlgXG4gKiBhbmQgb3IgYF8ucmVhcmdgIGFwcGxpZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgVGhlIGRlc3RpbmF0aW9uIG1ldGFkYXRhLlxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBzb3VyY2UgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGRhdGFgLlxuICovXG5mdW5jdGlvbiBtZXJnZURhdGEoZGF0YSwgc291cmNlKSB7XG4gIHZhciBiaXRtYXNrID0gZGF0YVsxXSxcbiAgICAgIHNyY0JpdG1hc2sgPSBzb3VyY2VbMV0sXG4gICAgICBuZXdCaXRtYXNrID0gYml0bWFzayB8IHNyY0JpdG1hc2ssXG4gICAgICBpc0NvbW1vbiA9IG5ld0JpdG1hc2sgPCAoV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX0JJTkRfS0VZX0ZMQUcgfCBXUkFQX0FSWV9GTEFHKTtcblxuICB2YXIgaXNDb21ibyA9XG4gICAgKChzcmNCaXRtYXNrID09IFdSQVBfQVJZX0ZMQUcpICYmIChiaXRtYXNrID09IFdSQVBfQ1VSUllfRkxBRykpIHx8XG4gICAgKChzcmNCaXRtYXNrID09IFdSQVBfQVJZX0ZMQUcpICYmIChiaXRtYXNrID09IFdSQVBfUkVBUkdfRkxBRykgJiYgKGRhdGFbN10ubGVuZ3RoIDw9IHNvdXJjZVs4XSkpIHx8XG4gICAgKChzcmNCaXRtYXNrID09IChXUkFQX0FSWV9GTEFHIHwgV1JBUF9SRUFSR19GTEFHKSkgJiYgKHNvdXJjZVs3XS5sZW5ndGggPD0gc291cmNlWzhdKSAmJiAoYml0bWFzayA9PSBXUkFQX0NVUlJZX0ZMQUcpKTtcblxuICAvLyBFeGl0IGVhcmx5IGlmIG1ldGFkYXRhIGNhbid0IGJlIG1lcmdlZC5cbiAgaWYgKCEoaXNDb21tb24gfHwgaXNDb21ibykpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGB0aGlzQXJnYCBpZiBhdmFpbGFibGUuXG4gIGlmIChzcmNCaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcpIHtcbiAgICBkYXRhWzJdID0gc291cmNlWzJdO1xuICAgIC8vIFNldCB3aGVuIGN1cnJ5aW5nIGEgYm91bmQgZnVuY3Rpb24uXG4gICAgbmV3Qml0bWFzayB8PSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcgPyAwIDogV1JBUF9DVVJSWV9CT1VORF9GTEFHO1xuICB9XG4gIC8vIENvbXBvc2UgcGFydGlhbCBhcmd1bWVudHMuXG4gIHZhciB2YWx1ZSA9IHNvdXJjZVszXTtcbiAgaWYgKHZhbHVlKSB7XG4gICAgdmFyIHBhcnRpYWxzID0gZGF0YVszXTtcbiAgICBkYXRhWzNdID0gcGFydGlhbHMgPyBjb21wb3NlQXJncyhwYXJ0aWFscywgdmFsdWUsIHNvdXJjZVs0XSkgOiB2YWx1ZTtcbiAgICBkYXRhWzRdID0gcGFydGlhbHMgPyByZXBsYWNlSG9sZGVycyhkYXRhWzNdLCBQTEFDRUhPTERFUikgOiBzb3VyY2VbNF07XG4gIH1cbiAgLy8gQ29tcG9zZSBwYXJ0aWFsIHJpZ2h0IGFyZ3VtZW50cy5cbiAgdmFsdWUgPSBzb3VyY2VbNV07XG4gIGlmICh2YWx1ZSkge1xuICAgIHBhcnRpYWxzID0gZGF0YVs1XTtcbiAgICBkYXRhWzVdID0gcGFydGlhbHMgPyBjb21wb3NlQXJnc1JpZ2h0KHBhcnRpYWxzLCB2YWx1ZSwgc291cmNlWzZdKSA6IHZhbHVlO1xuICAgIGRhdGFbNl0gPSBwYXJ0aWFscyA/IHJlcGxhY2VIb2xkZXJzKGRhdGFbNV0sIFBMQUNFSE9MREVSKSA6IHNvdXJjZVs2XTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGBhcmdQb3NgIGlmIGF2YWlsYWJsZS5cbiAgdmFsdWUgPSBzb3VyY2VbN107XG4gIGlmICh2YWx1ZSkge1xuICAgIGRhdGFbN10gPSB2YWx1ZTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGBhcnlgIGlmIGl0J3Mgc21hbGxlci5cbiAgaWYgKHNyY0JpdG1hc2sgJiBXUkFQX0FSWV9GTEFHKSB7XG4gICAgZGF0YVs4XSA9IGRhdGFbOF0gPT0gbnVsbCA/IHNvdXJjZVs4XSA6IG5hdGl2ZU1pbihkYXRhWzhdLCBzb3VyY2VbOF0pO1xuICB9XG4gIC8vIFVzZSBzb3VyY2UgYGFyaXR5YCBpZiBvbmUgaXMgbm90IHByb3ZpZGVkLlxuICBpZiAoZGF0YVs5XSA9PSBudWxsKSB7XG4gICAgZGF0YVs5XSA9IHNvdXJjZVs5XTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGBmdW5jYCBhbmQgbWVyZ2UgYml0bWFza3MuXG4gIGRhdGFbMF0gPSBzb3VyY2VbMF07XG4gIGRhdGFbMV0gPSBuZXdCaXRtYXNrO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlRGF0YTtcbiIsInZhciBXZWFrTWFwID0gcmVxdWlyZSgnLi9fV2Vha01hcCcpO1xuXG4vKiogVXNlZCB0byBzdG9yZSBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBtZXRhTWFwID0gV2Vha01hcCAmJiBuZXcgV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBtZXRhTWFwO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgbmF0aXZlQ3JlYXRlID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2NyZWF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUNyZWF0ZTtcbiIsInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlS2V5cyA9IG92ZXJBcmcoT2JqZWN0LmtleXMsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5cztcbiIsIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBleGNlcHQgdGhhdCBpdCBpbmNsdWRlcyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUtleXNJbjtcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGVVdGlsO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0VG9TdHJpbmc7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgfVxuICAgIGluZGV4ID0gLTE7XG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgIH1cbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcbiAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyUmVzdDtcbiIsInZhciBiYXNlR2V0ID0gcmVxdWlyZSgnLi9fYmFzZUdldCcpLFxuICAgIGJhc2VTbGljZSA9IHJlcXVpcmUoJy4vX2Jhc2VTbGljZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIHBhcmVudCB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhdGggVGhlIHBhdGggdG8gZ2V0IHRoZSBwYXJlbnQgdmFsdWUgb2YuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcGFyZW50IHZhbHVlLlxuICovXG5mdW5jdGlvbiBwYXJlbnQob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBwYXRoLmxlbmd0aCA8IDIgPyBvYmplY3QgOiBiYXNlR2V0KG9iamVjdCwgYmFzZVNsaWNlKHBhdGgsIDAsIC0xKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiLyoqIFVzZWQgdG8gbG9va3VwIHVubWluaWZpZWQgZnVuY3Rpb24gbmFtZXMuICovXG52YXIgcmVhbE5hbWVzID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gcmVhbE5hbWVzO1xuIiwidmFyIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBSZW9yZGVyIGBhcnJheWAgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgaW5kZXhlcyB3aGVyZSB0aGUgZWxlbWVudCBhdFxuICogdGhlIGZpcnN0IGluZGV4IGlzIGFzc2lnbmVkIGFzIHRoZSBmaXJzdCBlbGVtZW50LCB0aGUgZWxlbWVudCBhdFxuICogdGhlIHNlY29uZCBpbmRleCBpcyBhc3NpZ25lZCBhcyB0aGUgc2Vjb25kIGVsZW1lbnQsIGFuZCBzbyBvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHJlb3JkZXIuXG4gKiBAcGFyYW0ge0FycmF5fSBpbmRleGVzIFRoZSBhcnJhbmdlZCBhcnJheSBpbmRleGVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIHJlb3JkZXIoYXJyYXksIGluZGV4ZXMpIHtcbiAgdmFyIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGxlbmd0aCA9IG5hdGl2ZU1pbihpbmRleGVzLmxlbmd0aCwgYXJyTGVuZ3RoKSxcbiAgICAgIG9sZEFycmF5ID0gY29weUFycmF5KGFycmF5KTtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICB2YXIgaW5kZXggPSBpbmRleGVzW2xlbmd0aF07XG4gICAgYXJyYXlbbGVuZ3RoXSA9IGlzSW5kZXgoaW5kZXgsIGFyckxlbmd0aCkgPyBvbGRBcnJheVtpbmRleF0gOiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlb3JkZXI7XG4iLCIvKiogVXNlZCBhcyB0aGUgaW50ZXJuYWwgYXJndW1lbnQgcGxhY2Vob2xkZXIuICovXG52YXIgUExBQ0VIT0xERVIgPSAnX19sb2Rhc2hfcGxhY2Vob2xkZXJfXyc7XG5cbi8qKlxuICogUmVwbGFjZXMgYWxsIGBwbGFjZWhvbGRlcmAgZWxlbWVudHMgaW4gYGFycmF5YCB3aXRoIGFuIGludGVybmFsIHBsYWNlaG9sZGVyXG4gKiBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiB0aGVpciBpbmRleGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHsqfSBwbGFjZWhvbGRlciBUaGUgcGxhY2Vob2xkZXIgdG8gcmVwbGFjZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2VIb2xkZXJzKGFycmF5LCBwbGFjZWhvbGRlcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmICh2YWx1ZSA9PT0gcGxhY2Vob2xkZXIgfHwgdmFsdWUgPT09IFBMQUNFSE9MREVSKSB7XG4gICAgICBhcnJheVtpbmRleF0gPSBQTEFDRUhPTERFUjtcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcGxhY2VIb2xkZXJzO1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxubW9kdWxlLmV4cG9ydHMgPSByb290O1xuIiwiLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIEFkZHMgYHZhbHVlYCB0byB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGFkZFxuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAYWxpYXMgcHVzaFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2FjaGUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVBZGQodmFsdWUpIHtcbiAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVBZGQ7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVIYXM7XG4iLCJ2YXIgYmFzZVNldERhdGEgPSByZXF1aXJlKCcuL19iYXNlU2V0RGF0YScpLFxuICAgIHNob3J0T3V0ID0gcmVxdWlyZSgnLi9fc2hvcnRPdXQnKTtcblxuLyoqXG4gKiBTZXRzIG1ldGFkYXRhIGZvciBgZnVuY2AuXG4gKlxuICogKipOb3RlOioqIElmIHRoaXMgZnVuY3Rpb24gYmVjb21lcyBob3QsIGkuZS4gaXMgaW52b2tlZCBhIGxvdCBpbiBhIHNob3J0XG4gKiBwZXJpb2Qgb2YgdGltZSwgaXQgd2lsbCB0cmlwIGl0cyBicmVha2VyIGFuZCB0cmFuc2l0aW9uIHRvIGFuIGlkZW50aXR5XG4gKiBmdW5jdGlvbiB0byBhdm9pZCBnYXJiYWdlIGNvbGxlY3Rpb24gcGF1c2VzIGluIFY4LiBTZWVcbiAqIFtWOCBpc3N1ZSAyMDcwXShodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0yMDcwKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXNzb2NpYXRlIG1ldGFkYXRhIHdpdGguXG4gKiBAcGFyYW0geyp9IGRhdGEgVGhlIG1ldGFkYXRhLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldERhdGEgPSBzaG9ydE91dChiYXNlU2V0RGF0YSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0RGF0YTtcbiIsIi8qKlxuICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9BcnJheTtcbiIsInZhciBiYXNlU2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlU2V0VG9TdHJpbmcnKSxcbiAgICBzaG9ydE91dCA9IHJlcXVpcmUoJy4vX3Nob3J0T3V0Jyk7XG5cbi8qKlxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBzZXRUb1N0cmluZyA9IHNob3J0T3V0KGJhc2VTZXRUb1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9TdHJpbmc7XG4iLCJ2YXIgZ2V0V3JhcERldGFpbHMgPSByZXF1aXJlKCcuL19nZXRXcmFwRGV0YWlscycpLFxuICAgIGluc2VydFdyYXBEZXRhaWxzID0gcmVxdWlyZSgnLi9faW5zZXJ0V3JhcERldGFpbHMnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyksXG4gICAgdXBkYXRlV3JhcERldGFpbHMgPSByZXF1aXJlKCcuL191cGRhdGVXcmFwRGV0YWlscycpO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGB3cmFwcGVyYCB0byBtaW1pYyB0aGUgc291cmNlIG9mIGByZWZlcmVuY2VgXG4gKiB3aXRoIHdyYXBwZXIgZGV0YWlscyBpbiBhIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgc291cmNlIGJvZHkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHdyYXBwZXIgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlZmVyZW5jZSBUaGUgcmVmZXJlbmNlIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgd3JhcHBlcmAuXG4gKi9cbmZ1bmN0aW9uIHNldFdyYXBUb1N0cmluZyh3cmFwcGVyLCByZWZlcmVuY2UsIGJpdG1hc2spIHtcbiAgdmFyIHNvdXJjZSA9IChyZWZlcmVuY2UgKyAnJyk7XG4gIHJldHVybiBzZXRUb1N0cmluZyh3cmFwcGVyLCBpbnNlcnRXcmFwRGV0YWlscyhzb3VyY2UsIHVwZGF0ZVdyYXBEZXRhaWxzKGdldFdyYXBEZXRhaWxzKHNvdXJjZSksIGJpdG1hc2spKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0V3JhcFRvU3RyaW5nO1xuIiwiLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xudmFyIEhPVF9DT1VOVCA9IDgwMCxcbiAgICBIT1RfU1BBTiA9IDE2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAqIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgdmFyIGNvdW50ID0gMCxcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3J0T3V0O1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIFN0YWNrXG4gKi9cbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrQ2xlYXI7XG4iLCIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgcmVzdWx0ID0gZGF0YVsnZGVsZXRlJ10oa2V5KTtcblxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tEZWxldGU7XG4iLCIvKipcbiAqIEdldHMgdGhlIHN0YWNrIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzdGFja0dldChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tHZXQ7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBhIHN0YWNrIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrSGFzO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBzdGFjayBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTGlzdENhY2hlKSB7XG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcbiAgICBpZiAoIU1hcCB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XG4gICAgICBwYWlycy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlycyk7XG4gIH1cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tTZXQ7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5pbmRleE9mYCB3aGljaCBwZXJmb3JtcyBzdHJpY3QgZXF1YWxpdHlcbiAqIGNvbXBhcmlzb25zIG9mIHZhbHVlcywgaS5lLiBgPT09YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gIHZhciBpbmRleCA9IGZyb21JbmRleCAtIDEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoYXJyYXlbaW5kZXhdID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaWN0SW5kZXhPZjtcbiIsInZhciBhc2NpaVRvQXJyYXkgPSByZXF1aXJlKCcuL19hc2NpaVRvQXJyYXknKSxcbiAgICBoYXNVbmljb2RlID0gcmVxdWlyZSgnLi9faGFzVW5pY29kZScpLFxuICAgIHVuaWNvZGVUb0FycmF5ID0gcmVxdWlyZSgnLi9fdW5pY29kZVRvQXJyYXknKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gc3RyaW5nVG9BcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIGhhc1VuaWNvZGUoc3RyaW5nKVxuICAgID8gdW5pY29kZVRvQXJyYXkoc3RyaW5nKVxuICAgIDogYXNjaWlUb0FycmF5KHN0cmluZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nVG9BcnJheTtcbiIsInZhciBtZW1vaXplQ2FwcGVkID0gcmVxdWlyZSgnLi9fbWVtb2l6ZUNhcHBlZCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVQcm9wTmFtZSA9IC9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IG1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XG4gICAgcmVzdWx0LnB1c2goJycpO1xuICB9XG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcbiAgICByZXN1bHQucHVzaChxdW90ZSA/IHN1YlN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nVG9QYXRoO1xuIiwidmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcga2V5IGlmIGl0J3Mgbm90IGEgc3RyaW5nIG9yIHN5bWJvbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtzdHJpbmd8c3ltYm9sfSBSZXR1cm5zIHRoZSBrZXkuXG4gKi9cbmZ1bmN0aW9uIHRvS2V5KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0tleTtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1NvdXJjZTtcbiIsIi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjaGFyYWN0ZXIgY2xhc3Nlcy4gKi9cbnZhciByc0FzdHJhbFJhbmdlID0gJ1xcXFx1ZDgwMC1cXFxcdWRmZmYnLFxuICAgIHJzQ29tYm9NYXJrc1JhbmdlID0gJ1xcXFx1MDMwMC1cXFxcdTAzNmYnLFxuICAgIHJlQ29tYm9IYWxmTWFya3NSYW5nZSA9ICdcXFxcdWZlMjAtXFxcXHVmZTJmJyxcbiAgICByc0NvbWJvU3ltYm9sc1JhbmdlID0gJ1xcXFx1MjBkMC1cXFxcdTIwZmYnLFxuICAgIHJzQ29tYm9SYW5nZSA9IHJzQ29tYm9NYXJrc1JhbmdlICsgcmVDb21ib0hhbGZNYXJrc1JhbmdlICsgcnNDb21ib1N5bWJvbHNSYW5nZSxcbiAgICByc1ZhclJhbmdlID0gJ1xcXFx1ZmUwZVxcXFx1ZmUwZic7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjYXB0dXJlIGdyb3Vwcy4gKi9cbnZhciByc0FzdHJhbCA9ICdbJyArIHJzQXN0cmFsUmFuZ2UgKyAnXScsXG4gICAgcnNDb21ibyA9ICdbJyArIHJzQ29tYm9SYW5nZSArICddJyxcbiAgICByc0ZpdHogPSAnXFxcXHVkODNjW1xcXFx1ZGZmYi1cXFxcdWRmZmZdJyxcbiAgICByc01vZGlmaWVyID0gJyg/OicgKyByc0NvbWJvICsgJ3wnICsgcnNGaXR6ICsgJyknLFxuICAgIHJzTm9uQXN0cmFsID0gJ1teJyArIHJzQXN0cmFsUmFuZ2UgKyAnXScsXG4gICAgcnNSZWdpb25hbCA9ICcoPzpcXFxcdWQ4M2NbXFxcXHVkZGU2LVxcXFx1ZGRmZl0pezJ9JyxcbiAgICByc1N1cnJQYWlyID0gJ1tcXFxcdWQ4MDAtXFxcXHVkYmZmXVtcXFxcdWRjMDAtXFxcXHVkZmZmXScsXG4gICAgcnNaV0ogPSAnXFxcXHUyMDBkJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIHJlZ2V4ZXMuICovXG52YXIgcmVPcHRNb2QgPSByc01vZGlmaWVyICsgJz8nLFxuICAgIHJzT3B0VmFyID0gJ1snICsgcnNWYXJSYW5nZSArICddPycsXG4gICAgcnNPcHRKb2luID0gJyg/OicgKyByc1pXSiArICcoPzonICsgW3JzTm9uQXN0cmFsLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyXS5qb2luKCd8JykgKyAnKScgKyByc09wdFZhciArIHJlT3B0TW9kICsgJykqJyxcbiAgICByc1NlcSA9IHJzT3B0VmFyICsgcmVPcHRNb2QgKyByc09wdEpvaW4sXG4gICAgcnNTeW1ib2wgPSAnKD86JyArIFtyc05vbkFzdHJhbCArIHJzQ29tYm8gKyAnPycsIHJzQ29tYm8sIHJzUmVnaW9uYWwsIHJzU3VyclBhaXIsIHJzQXN0cmFsXS5qb2luKCd8JykgKyAnKSc7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIFtzdHJpbmcgc3ltYm9sc10oaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtdW5pY29kZSkuICovXG52YXIgcmVVbmljb2RlID0gUmVnRXhwKHJzRml0eiArICcoPz0nICsgcnNGaXR6ICsgJyl8JyArIHJzU3ltYm9sICsgcnNTZXEsICdnJyk7XG5cbi8qKlxuICogQ29udmVydHMgYSBVbmljb2RlIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiB1bmljb2RlVG9BcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5tYXRjaChyZVVuaWNvZGUpIHx8IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHVuaWNvZGVUb0FycmF5O1xuIiwidmFyIGFycmF5RWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5RWFjaCcpLFxuICAgIGFycmF5SW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfQ1VSUllfRkxBRyA9IDgsXG4gICAgV1JBUF9DVVJSWV9SSUdIVF9GTEFHID0gMTYsXG4gICAgV1JBUF9QQVJUSUFMX0ZMQUcgPSAzMixcbiAgICBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyA9IDY0LFxuICAgIFdSQVBfQVJZX0ZMQUcgPSAxMjgsXG4gICAgV1JBUF9SRUFSR19GTEFHID0gMjU2LFxuICAgIFdSQVBfRkxJUF9GTEFHID0gNTEyO1xuXG4vKiogVXNlZCB0byBhc3NvY2lhdGUgd3JhcCBtZXRob2RzIHdpdGggdGhlaXIgYml0IGZsYWdzLiAqL1xudmFyIHdyYXBGbGFncyA9IFtcbiAgWydhcnknLCBXUkFQX0FSWV9GTEFHXSxcbiAgWydiaW5kJywgV1JBUF9CSU5EX0ZMQUddLFxuICBbJ2JpbmRLZXknLCBXUkFQX0JJTkRfS0VZX0ZMQUddLFxuICBbJ2N1cnJ5JywgV1JBUF9DVVJSWV9GTEFHXSxcbiAgWydjdXJyeVJpZ2h0JywgV1JBUF9DVVJSWV9SSUdIVF9GTEFHXSxcbiAgWydmbGlwJywgV1JBUF9GTElQX0ZMQUddLFxuICBbJ3BhcnRpYWwnLCBXUkFQX1BBUlRJQUxfRkxBR10sXG4gIFsncGFydGlhbFJpZ2h0JywgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUddLFxuICBbJ3JlYXJnJywgV1JBUF9SRUFSR19GTEFHXVxuXTtcblxuLyoqXG4gKiBVcGRhdGVzIHdyYXBwZXIgYGRldGFpbHNgIGJhc2VkIG9uIGBiaXRtYXNrYCBmbGFncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybnMge0FycmF5fSBkZXRhaWxzIFRoZSBkZXRhaWxzIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGRldGFpbHNgLlxuICovXG5mdW5jdGlvbiB1cGRhdGVXcmFwRGV0YWlscyhkZXRhaWxzLCBiaXRtYXNrKSB7XG4gIGFycmF5RWFjaCh3cmFwRmxhZ3MsIGZ1bmN0aW9uKHBhaXIpIHtcbiAgICB2YXIgdmFsdWUgPSAnXy4nICsgcGFpclswXTtcbiAgICBpZiAoKGJpdG1hc2sgJiBwYWlyWzFdKSAmJiAhYXJyYXlJbmNsdWRlcyhkZXRhaWxzLCB2YWx1ZSkpIHtcbiAgICAgIGRldGFpbHMucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRldGFpbHMuc29ydCgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHVwZGF0ZVdyYXBEZXRhaWxzO1xuIiwidmFyIExhenlXcmFwcGVyID0gcmVxdWlyZSgnLi9fTGF6eVdyYXBwZXInKSxcbiAgICBMb2Rhc2hXcmFwcGVyID0gcmVxdWlyZSgnLi9fTG9kYXNoV3JhcHBlcicpLFxuICAgIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgd3JhcHBlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSB3cmFwcGVyIFRoZSB3cmFwcGVyIHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHdyYXBwZXIuXG4gKi9cbmZ1bmN0aW9uIHdyYXBwZXJDbG9uZSh3cmFwcGVyKSB7XG4gIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpIHtcbiAgICByZXR1cm4gd3JhcHBlci5jbG9uZSgpO1xuICB9XG4gIHZhciByZXN1bHQgPSBuZXcgTG9kYXNoV3JhcHBlcih3cmFwcGVyLl9fd3JhcHBlZF9fLCB3cmFwcGVyLl9fY2hhaW5fXyk7XG4gIHJlc3VsdC5fX2FjdGlvbnNfXyA9IGNvcHlBcnJheSh3cmFwcGVyLl9fYWN0aW9uc19fKTtcbiAgcmVzdWx0Ll9faW5kZXhfXyAgPSB3cmFwcGVyLl9faW5kZXhfXztcbiAgcmVzdWx0Ll9fdmFsdWVzX18gPSB3cmFwcGVyLl9fdmFsdWVzX187XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd3JhcHBlckNsb25lO1xuIiwidmFyIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGNyZWF0ZUFzc2lnbmVyID0gcmVxdWlyZSgnLi9fY3JlYXRlQXNzaWduZXInKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2Ygc291cmNlIG9iamVjdHMgdG8gdGhlXG4gKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC5cbiAqIFN1YnNlcXVlbnQgc291cmNlcyBvdmVyd3JpdGUgcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgc291cmNlcy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YCBhbmQgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BPYmplY3QuYXNzaWduYF0oaHR0cHM6Ly9tZG4uaW8vT2JqZWN0L2Fzc2lnbikuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEwLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBzZWUgXy5hc3NpZ25JblxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogZnVuY3Rpb24gQmFyKCkge1xuICogICB0aGlzLmMgPSAzO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYiA9IDI7XG4gKiBCYXIucHJvdG90eXBlLmQgPSA0O1xuICpcbiAqIF8uYXNzaWduKHsgJ2EnOiAwIH0sIG5ldyBGb28sIG5ldyBCYXIpO1xuICogLy8gPT4geyAnYSc6IDEsICdjJzogMyB9XG4gKi9cbnZhciBhc3NpZ24gPSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSkge1xuICBpZiAoaXNQcm90b3R5cGUoc291cmNlKSB8fCBpc0FycmF5TGlrZShzb3VyY2UpKSB7XG4gICAgY29weU9iamVjdChzb3VyY2UsIGtleXMoc291cmNlKSwgb2JqZWN0KTtcbiAgICByZXR1cm47XG4gIH1cbiAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICB9XG4gIH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnbjtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL3RvSW50ZWdlcicpO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgLCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBhbmQgYXJndW1lbnRzXG4gKiBvZiB0aGUgY3JlYXRlZCBmdW5jdGlvbiwgd2hpbGUgaXQncyBjYWxsZWQgbGVzcyB0aGFuIGBuYCB0aW1lcy4gU3Vic2VxdWVudFxuICogY2FsbHMgdG8gdGhlIGNyZWF0ZWQgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgIGludm9jYXRpb24uXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGNhbGxzIGF0IHdoaWNoIGBmdW5jYCBpcyBubyBsb25nZXIgaW52b2tlZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmVzdHJpY3RlZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIF8uYmVmb3JlKDUsIGFkZENvbnRhY3RUb0xpc3QpKTtcbiAqIC8vID0+IEFsbG93cyBhZGRpbmcgdXAgdG8gNCBjb250YWN0cyB0byB0aGUgbGlzdC5cbiAqL1xuZnVuY3Rpb24gYmVmb3JlKG4sIGZ1bmMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgbiA9IHRvSW50ZWdlcihuKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGlmICgtLW4gPiAwKSB7XG4gICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIGlmIChuIDw9IDEpIHtcbiAgICAgIGZ1bmMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmVmb3JlO1xuIiwidmFyIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBjcmVhdGVXcmFwID0gcmVxdWlyZSgnLi9fY3JlYXRlV3JhcCcpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlcGxhY2VIb2xkZXJzID0gcmVxdWlyZSgnLi9fcmVwbGFjZUhvbGRlcnMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzI7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgXG4gKiBhbmQgYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAqXG4gKiBUaGUgYF8uYmluZC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljIGJ1aWxkcyxcbiAqIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIG5hdGl2ZSBgRnVuY3Rpb24jYmluZGAsIHRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiXG4gKiBwcm9wZXJ0eSBvZiBib3VuZCBmdW5jdGlvbnMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBiaW5kLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0gey4uLip9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJvdW5kIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBncmVldChncmVldGluZywgcHVuY3R1YXRpb24pIHtcbiAqICAgcmV0dXJuIGdyZWV0aW5nICsgJyAnICsgdGhpcy51c2VyICsgcHVuY3R1YXRpb247XG4gKiB9XG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ3VzZXInOiAnZnJlZCcgfTtcbiAqXG4gKiB2YXIgYm91bmQgPSBfLmJpbmQoZ3JlZXQsIG9iamVjdCwgJ2hpJyk7XG4gKiBib3VuZCgnIScpO1xuICogLy8gPT4gJ2hpIGZyZWQhJ1xuICpcbiAqIC8vIEJvdW5kIHdpdGggcGxhY2Vob2xkZXJzLlxuICogdmFyIGJvdW5kID0gXy5iaW5kKGdyZWV0LCBvYmplY3QsIF8sICchJyk7XG4gKiBib3VuZCgnaGknKTtcbiAqIC8vID0+ICdoaSBmcmVkISdcbiAqL1xudmFyIGJpbmQgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCB0aGlzQXJnLCBwYXJ0aWFscykge1xuICB2YXIgYml0bWFzayA9IFdSQVBfQklORF9GTEFHO1xuICBpZiAocGFydGlhbHMubGVuZ3RoKSB7XG4gICAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgZ2V0SG9sZGVyKGJpbmQpKTtcbiAgICBiaXRtYXNrIHw9IFdSQVBfUEFSVElBTF9GTEFHO1xuICB9XG4gIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzKTtcbn0pO1xuXG4vLyBBc3NpZ24gZGVmYXVsdCBwbGFjZWhvbGRlcnMuXG5iaW5kLnBsYWNlaG9sZGVyID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gYmluZDtcbiIsInZhciBiYXNlQ2xvbmUgPSByZXF1aXJlKCcuL19iYXNlQ2xvbmUnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzaGFsbG93IGNsb25lIG9mIGB2YWx1ZWAuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb24gdGhlXG4gKiBbc3RydWN0dXJlZCBjbG9uZSBhbGdvcml0aG1dKGh0dHBzOi8vbWRuLmlvL1N0cnVjdHVyZWRfY2xvbmVfYWxnb3JpdGhtKVxuICogYW5kIHN1cHBvcnRzIGNsb25pbmcgYXJyYXlzLCBhcnJheSBidWZmZXJzLCBib29sZWFucywgZGF0ZSBvYmplY3RzLCBtYXBzLFxuICogbnVtYmVycywgYE9iamVjdGAgb2JqZWN0cywgcmVnZXhlcywgc2V0cywgc3RyaW5ncywgc3ltYm9scywgYW5kIHR5cGVkXG4gKiBhcnJheXMuIFRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9mIGBhcmd1bWVudHNgIG9iamVjdHMgYXJlIGNsb25lZFxuICogYXMgcGxhaW4gb2JqZWN0cy4gQW4gZW1wdHkgb2JqZWN0IGlzIHJldHVybmVkIGZvciB1bmNsb25lYWJsZSB2YWx1ZXMgc3VjaFxuICogYXMgZXJyb3Igb2JqZWN0cywgZnVuY3Rpb25zLCBET00gbm9kZXMsIGFuZCBXZWFrTWFwcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgY2xvbmVkIHZhbHVlLlxuICogQHNlZSBfLmNsb25lRGVlcFxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFt7ICdhJzogMSB9LCB7ICdiJzogMiB9XTtcbiAqXG4gKiB2YXIgc2hhbGxvdyA9IF8uY2xvbmUob2JqZWN0cyk7XG4gKiBjb25zb2xlLmxvZyhzaGFsbG93WzBdID09PSBvYmplY3RzWzBdKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gY2xvbmUodmFsdWUpIHtcbiAgcmV0dXJuIGJhc2VDbG9uZSh2YWx1ZSwgQ0xPTkVfU1lNQk9MU19GTEFHKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZTtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnN0YW50O1xuIiwidmFyIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBpc0l0ZXJhdGVlQ2FsbCA9IHJlcXVpcmUoJy4vX2lzSXRlcmF0ZWVDYWxsJyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBc3NpZ25zIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2Ygc291cmNlXG4gKiBvYmplY3RzIHRvIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QgZm9yIGFsbCBkZXN0aW5hdGlvbiBwcm9wZXJ0aWVzIHRoYXRcbiAqIHJlc29sdmUgdG8gYHVuZGVmaW5lZGAuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC5cbiAqIE9uY2UgYSBwcm9wZXJ0eSBpcyBzZXQsIGFkZGl0aW9uYWwgdmFsdWVzIG9mIHRoZSBzYW1lIHByb3BlcnR5IGFyZSBpZ25vcmVkLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBzZWUgXy5kZWZhdWx0c0RlZXBcbiAqIEBleGFtcGxlXG4gKlxuICogXy5kZWZhdWx0cyh7ICdhJzogMSB9LCB7ICdiJzogMiB9LCB7ICdhJzogMyB9KTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICovXG52YXIgZGVmYXVsdHMgPSBiYXNlUmVzdChmdW5jdGlvbihvYmplY3QsIHNvdXJjZXMpIHtcbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gLTE7XG4gIHZhciBsZW5ndGggPSBzb3VyY2VzLmxlbmd0aDtcbiAgdmFyIGd1YXJkID0gbGVuZ3RoID4gMiA/IHNvdXJjZXNbMl0gOiB1bmRlZmluZWQ7XG5cbiAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHNvdXJjZXNbMF0sIHNvdXJjZXNbMV0sIGd1YXJkKSkge1xuICAgIGxlbmd0aCA9IDE7XG4gIH1cblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzW2luZGV4XTtcbiAgICB2YXIgcHJvcHMgPSBrZXlzSW4oc291cmNlKTtcbiAgICB2YXIgcHJvcHNJbmRleCA9IC0xO1xuICAgIHZhciBwcm9wc0xlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICAgIHdoaWxlICgrK3Byb3BzSW5kZXggPCBwcm9wc0xlbmd0aCkge1xuICAgICAgdmFyIGtleSA9IHByb3BzW3Byb3BzSW5kZXhdO1xuICAgICAgdmFyIHZhbHVlID0gb2JqZWN0W2tleV07XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgKGVxKHZhbHVlLCBvYmplY3RQcm90b1trZXldKSAmJiAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSB7XG4gICAgICAgIG9iamVjdFtrZXldID0gc291cmNlW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iamVjdDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRzO1xuIiwidmFyIGJhc2VEaWZmZXJlbmNlID0gcmVxdWlyZSgnLi9fYmFzZURpZmZlcmVuY2UnKSxcbiAgICBiYXNlRmxhdHRlbiA9IHJlcXVpcmUoJy4vX2Jhc2VGbGF0dGVuJyksXG4gICAgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGlzQXJyYXlMaWtlT2JqZWN0ID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZU9iamVjdCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgYGFycmF5YCB2YWx1ZXMgbm90IGluY2x1ZGVkIGluIHRoZSBvdGhlciBnaXZlbiBhcnJheXNcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIFRoZSBvcmRlciBhbmQgcmVmZXJlbmNlcyBvZiByZXN1bHQgdmFsdWVzIGFyZVxuICogZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuXG4gKlxuICogKipOb3RlOioqIFVubGlrZSBgXy5wdWxsQWxsYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsuLi5BcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICogQHNlZSBfLndpdGhvdXQsIF8ueG9yXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGlmZmVyZW5jZShbMiwgMV0sIFsyLCAzXSk7XG4gKiAvLyA9PiBbMV1cbiAqL1xudmFyIGRpZmZlcmVuY2UgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheSwgdmFsdWVzKSB7XG4gIHJldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSlcbiAgICA/IGJhc2VEaWZmZXJlbmNlKGFycmF5LCBiYXNlRmxhdHRlbih2YWx1ZXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSlcbiAgICA6IFtdO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGlmZmVyZW5jZTtcbiIsIi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxO1xuIiwidmFyIGVzY2FwZUh0bWxDaGFyID0gcmVxdWlyZSgnLi9fZXNjYXBlSHRtbENoYXInKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggSFRNTCBlbnRpdGllcyBhbmQgSFRNTCBjaGFyYWN0ZXJzLiAqL1xudmFyIHJlVW5lc2NhcGVkSHRtbCA9IC9bJjw+XCInXS9nLFxuICAgIHJlSGFzVW5lc2NhcGVkSHRtbCA9IFJlZ0V4cChyZVVuZXNjYXBlZEh0bWwuc291cmNlKTtcblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgY2hhcmFjdGVycyBcIiZcIiwgXCI8XCIsIFwiPlwiLCAnXCInLCBhbmQgXCInXCIgaW4gYHN0cmluZ2AgdG8gdGhlaXJcbiAqIGNvcnJlc3BvbmRpbmcgSFRNTCBlbnRpdGllcy5cbiAqXG4gKiAqKk5vdGU6KiogTm8gb3RoZXIgY2hhcmFjdGVycyBhcmUgZXNjYXBlZC4gVG8gZXNjYXBlIGFkZGl0aW9uYWxcbiAqIGNoYXJhY3RlcnMgdXNlIGEgdGhpcmQtcGFydHkgbGlicmFyeSBsaWtlIFtfaGVfXShodHRwczovL210aHMuYmUvaGUpLlxuICpcbiAqIFRob3VnaCB0aGUgXCI+XCIgY2hhcmFjdGVyIGlzIGVzY2FwZWQgZm9yIHN5bW1ldHJ5LCBjaGFyYWN0ZXJzIGxpa2VcbiAqIFwiPlwiIGFuZCBcIi9cIiBkb24ndCBuZWVkIGVzY2FwaW5nIGluIEhUTUwgYW5kIGhhdmUgbm8gc3BlY2lhbCBtZWFuaW5nXG4gKiB1bmxlc3MgdGhleSdyZSBwYXJ0IG9mIGEgdGFnIG9yIHVucXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZS4gU2VlXG4gKiBbTWF0aGlhcyBCeW5lbnMncyBhcnRpY2xlXShodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvYW1iaWd1b3VzLWFtcGVyc2FuZHMpXG4gKiAodW5kZXIgXCJzZW1pLXJlbGF0ZWQgZnVuIGZhY3RcIikgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBXaGVuIHdvcmtpbmcgd2l0aCBIVE1MIHlvdSBzaG91bGQgYWx3YXlzXG4gKiBbcXVvdGUgYXR0cmlidXRlIHZhbHVlc10oaHR0cDovL3dvbmtvLmNvbS9wb3N0L2h0bWwtZXNjYXBpbmcpIHRvIHJlZHVjZVxuICogWFNTIHZlY3RvcnMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gZXNjYXBlLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZXNjYXBlKCdmcmVkLCBiYXJuZXksICYgcGViYmxlcycpO1xuICogLy8gPT4gJ2ZyZWQsIGJhcm5leSwgJmFtcDsgcGViYmxlcydcbiAqL1xuZnVuY3Rpb24gZXNjYXBlKHN0cmluZykge1xuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICByZXR1cm4gKHN0cmluZyAmJiByZUhhc1VuZXNjYXBlZEh0bWwudGVzdChzdHJpbmcpKVxuICAgID8gc3RyaW5nLnJlcGxhY2UocmVVbmVzY2FwZWRIdG1sLCBlc2NhcGVIdG1sQ2hhcilcbiAgICA6IHN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlc2NhcGU7XG4iLCJ2YXIgY3JlYXRlRmluZCA9IHJlcXVpcmUoJy4vX2NyZWF0ZUZpbmQnKSxcbiAgICBmaW5kSW5kZXggPSByZXF1aXJlKCcuL2ZpbmRJbmRleCcpO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gLCByZXR1cm5pbmcgdGhlIGZpcnN0IGVsZW1lbnRcbiAqIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hdGNoZWQgZWxlbWVudCwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHVzZXJzID0gW1xuICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IHRydWUgfVxuICogXTtcbiAqXG4gKiBfLmZpbmQodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWdlIDwgNDA7IH0pO1xuICogLy8gPT4gb2JqZWN0IGZvciAnYmFybmV5J1xuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmQodXNlcnMsIHsgJ2FnZSc6IDEsICdhY3RpdmUnOiB0cnVlIH0pO1xuICogLy8gPT4gb2JqZWN0IGZvciAncGViYmxlcydcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmQodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IG9iamVjdCBmb3IgJ2ZyZWQnXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmQodXNlcnMsICdhY3RpdmUnKTtcbiAqIC8vID0+IG9iamVjdCBmb3IgJ2Jhcm5leSdcbiAqL1xudmFyIGZpbmQgPSBjcmVhdGVGaW5kKGZpbmRJbmRleCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmluZDtcbiIsInZhciBiYXNlRmluZEluZGV4ID0gcmVxdWlyZSgnLi9fYmFzZUZpbmRJbmRleCcpLFxuICAgIGJhc2VJdGVyYXRlZSA9IHJlcXVpcmUoJy4vX2Jhc2VJdGVyYXRlZScpLFxuICAgIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vdG9JbnRlZ2VyJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZpbmRgIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdFxuICogZWxlbWVudCBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgaW5zdGVhZCBvZiB0aGUgZWxlbWVudCBpdHNlbGYuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAxLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmb3VuZCBlbGVtZW50LCBlbHNlIGAtMWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogdHJ1ZSB9XG4gKiBdO1xuICpcbiAqIF8uZmluZEluZGV4KHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLnVzZXIgPT0gJ2Jhcm5leSc7IH0pO1xuICogLy8gPT4gMFxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmRJbmRleCh1c2VycywgeyAndXNlcic6ICdmcmVkJywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICogLy8gPT4gMVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmluZEluZGV4KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gKiAvLyA9PiAwXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmRJbmRleCh1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gMlxuICovXG5mdW5jdGlvbiBmaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSwgZnJvbUluZGV4KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgdmFyIGluZGV4ID0gZnJvbUluZGV4ID09IG51bGwgPyAwIDogdG9JbnRlZ2VyKGZyb21JbmRleCk7XG4gIGlmIChpbmRleCA8IDApIHtcbiAgICBpbmRleCA9IG5hdGl2ZU1heChsZW5ndGggKyBpbmRleCwgMCk7XG4gIH1cbiAgcmV0dXJuIGJhc2VGaW5kSW5kZXgoYXJyYXksIGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCBpbmRleCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmluZEluZGV4O1xuIiwidmFyIGJhc2VGbGF0dGVuID0gcmVxdWlyZSgnLi9fYmFzZUZsYXR0ZW4nKTtcblxuLyoqXG4gKiBGbGF0dGVucyBgYXJyYXlgIGEgc2luZ2xlIGxldmVsIGRlZXAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5mbGF0dGVuKFsxLCBbMiwgWzMsIFs0XV0sIDVdXSk7XG4gKiAvLyA9PiBbMSwgMiwgWzMsIFs0XV0sIDVdXG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYmFzZUZsYXR0ZW4oYXJyYXksIDEpIDogW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdHRlbjtcbiIsInZhciBhcnJheUVhY2ggPSByZXF1aXJlKCcuL19hcnJheUVhY2gnKSxcbiAgICBiYXNlRWFjaCA9IHJlcXVpcmUoJy4vX2Jhc2VFYWNoJyksXG4gICAgY2FzdEZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fY2FzdEZ1bmN0aW9uJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gIGFuZCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggZWxlbWVudC5cbiAqIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gKiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gKlxuICogKipOb3RlOioqIEFzIHdpdGggb3RoZXIgXCJDb2xsZWN0aW9uc1wiIG1ldGhvZHMsIG9iamVjdHMgd2l0aCBhIFwibGVuZ3RoXCJcbiAqIHByb3BlcnR5IGFyZSBpdGVyYXRlZCBsaWtlIGFycmF5cy4gVG8gYXZvaWQgdGhpcyBiZWhhdmlvciB1c2UgYF8uZm9ySW5gXG4gKiBvciBgXy5mb3JPd25gIGZvciBvYmplY3QgaXRlcmF0aW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBhbGlhcyBlYWNoXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAqIEBzZWUgXy5mb3JFYWNoUmlnaHRcbiAqIEBleGFtcGxlXG4gKlxuICogXy5mb3JFYWNoKFsxLCAyXSwgZnVuY3Rpb24odmFsdWUpIHtcbiAqICAgY29uc29sZS5sb2codmFsdWUpO1xuICogfSk7XG4gKiAvLyA9PiBMb2dzIGAxYCB0aGVuIGAyYC5cbiAqXG4gKiBfLmZvckVhY2goeyAnYSc6IDEsICdiJzogMiB9LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gKiB9KTtcbiAqIC8vID0+IExvZ3MgJ2EnIHRoZW4gJ2InIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICovXG5mdW5jdGlvbiBmb3JFYWNoKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RWFjaCA6IGJhc2VFYWNoO1xuICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBjYXN0RnVuY3Rpb24oaXRlcmF0ZWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmb3JFYWNoO1xuIiwidmFyIGJhc2VGb3JPd24gPSByZXF1aXJlKCcuL19iYXNlRm9yT3duJyksXG4gICAgY2FzdEZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fY2FzdEZ1bmN0aW9uJyk7XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBhbiBvYmplY3QgYW5kXG4gKiBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggcHJvcGVydHkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAqIGFyZ3VtZW50czogKHZhbHVlLCBrZXksIG9iamVjdCkuIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb25cbiAqIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjMuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBzZWUgXy5mb3JPd25SaWdodFxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmZvck93bihuZXcgRm9vLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gKiB9KTtcbiAqIC8vID0+IExvZ3MgJ2EnIHRoZW4gJ2InIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICovXG5mdW5jdGlvbiBmb3JPd24ob2JqZWN0LCBpdGVyYXRlZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3JPd24ob2JqZWN0LCBjYXN0RnVuY3Rpb24oaXRlcmF0ZWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmb3JPd247XG4iLCJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIHRoZSByZXNvbHZlZCB2YWx1ZSBpc1xuICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjcuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGZvciBgdW5kZWZpbmVkYCByZXNvbHZlZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gKlxuICogXy5nZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsICdhLmIuYycsICdkZWZhdWx0Jyk7XG4gKiAvLyA9PiAnZGVmYXVsdCdcbiAqL1xuZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldDtcbiIsInZhciBiYXNlSGFzID0gcmVxdWlyZSgnLi9fYmFzZUhhcycpLFxuICAgIGhhc1BhdGggPSByZXF1aXJlKCcuL19oYXNQYXRoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBwcm9wZXJ0eSBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogeyAnYic6IDIgfSB9O1xuICogdmFyIG90aGVyID0gXy5jcmVhdGUoeyAnYSc6IF8uY3JlYXRlKHsgJ2InOiAyIH0pIH0pO1xuICpcbiAqIF8uaGFzKG9iamVjdCwgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhcyhvYmplY3QsICdhLmInKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhcyhvYmplY3QsIFsnYScsICdiJ10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzKG90aGVyLCAnYScpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaGFzKG9iamVjdCwgcGF0aCkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYgaGFzUGF0aChvYmplY3QsIHBhdGgsIGJhc2VIYXMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhcztcbiIsInZhciBiYXNlSGFzSW4gPSByZXF1aXJlKCcuL19iYXNlSGFzSW4nKSxcbiAgICBoYXNQYXRoID0gcmVxdWlyZSgnLi9faGFzUGF0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgcGF0aGAgaXMgYSBkaXJlY3Qgb3IgaW5oZXJpdGVkIHByb3BlcnR5IG9mIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IF8uY3JlYXRlKHsgJ2EnOiBfLmNyZWF0ZSh7ICdiJzogMiB9KSB9KTtcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EuYicpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2InKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGhhc0luKG9iamVjdCwgcGF0aCkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYgaGFzUGF0aChvYmplY3QsIHBhdGgsIGJhc2VIYXNJbik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzSW47XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuIiwidmFyIGJhc2VJbmRleE9mID0gcmVxdWlyZSgnLi9fYmFzZUluZGV4T2YnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc1N0cmluZyA9IHJlcXVpcmUoJy4vaXNTdHJpbmcnKSxcbiAgICB0b0ludGVnZXIgPSByZXF1aXJlKCcuL3RvSW50ZWdlcicpLFxuICAgIHZhbHVlcyA9IHJlcXVpcmUoJy4vdmFsdWVzJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiBgY29sbGVjdGlvbmAuIElmIGBjb2xsZWN0aW9uYCBpcyBhIHN0cmluZywgaXQnc1xuICogY2hlY2tlZCBmb3IgYSBzdWJzdHJpbmcgb2YgYHZhbHVlYCwgb3RoZXJ3aXNlXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogaXMgdXNlZCBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIElmIGBmcm9tSW5kZXhgIGlzIG5lZ2F0aXZlLCBpdCdzIHVzZWQgYXNcbiAqIHRoZSBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIGBjb2xsZWN0aW9uYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ucmVkdWNlYC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaW5jbHVkZXMoWzEsIDIsIDNdLCAxKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmluY2x1ZGVzKFsxLCAyLCAzXSwgMSwgMik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaW5jbHVkZXMoeyAnYSc6IDEsICdiJzogMiB9LCAxKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmluY2x1ZGVzKCdhYmNkJywgJ2JjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGluY2x1ZGVzKGNvbGxlY3Rpb24sIHZhbHVlLCBmcm9tSW5kZXgsIGd1YXJkKSB7XG4gIGNvbGxlY3Rpb24gPSBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSA/IGNvbGxlY3Rpb24gOiB2YWx1ZXMoY29sbGVjdGlvbik7XG4gIGZyb21JbmRleCA9IChmcm9tSW5kZXggJiYgIWd1YXJkKSA/IHRvSW50ZWdlcihmcm9tSW5kZXgpIDogMDtcblxuICB2YXIgbGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7XG4gIGlmIChmcm9tSW5kZXggPCAwKSB7XG4gICAgZnJvbUluZGV4ID0gbmF0aXZlTWF4KGxlbmd0aCArIGZyb21JbmRleCwgMCk7XG4gIH1cbiAgcmV0dXJuIGlzU3RyaW5nKGNvbGxlY3Rpb24pXG4gICAgPyAoZnJvbUluZGV4IDw9IGxlbmd0aCAmJiBjb2xsZWN0aW9uLmluZGV4T2YodmFsdWUsIGZyb21JbmRleCkgPiAtMSlcbiAgICA6ICghIWxlbmd0aCAmJiBiYXNlSW5kZXhPZihjb2xsZWN0aW9uLCB2YWx1ZSwgZnJvbUluZGV4KSA+IC0xKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbmNsdWRlcztcbiIsInZhciBhcHBseSA9IHJlcXVpcmUoJy4vX2FwcGx5JyksXG4gICAgYmFzZUVhY2ggPSByZXF1aXJlKCcuL19iYXNlRWFjaCcpLFxuICAgIGJhc2VJbnZva2UgPSByZXF1aXJlKCcuL19iYXNlSW52b2tlJyksXG4gICAgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIEludm9rZXMgdGhlIG1ldGhvZCBhdCBgcGF0aGAgb2YgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYCwgcmV0dXJuaW5nXG4gKiBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiBlYWNoIGludm9rZWQgbWV0aG9kLiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHNcbiAqIGFyZSBwcm92aWRlZCB0byBlYWNoIGludm9rZWQgbWV0aG9kLiBJZiBgcGF0aGAgaXMgYSBmdW5jdGlvbiwgaXQncyBpbnZva2VkXG4gKiBmb3IsIGFuZCBgdGhpc2AgYm91bmQgdG8sIGVhY2ggZWxlbWVudCBpbiBgY29sbGVjdGlvbmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb258c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBtZXRob2QgdG8gaW52b2tlIG9yXG4gKiAgdGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGVhY2ggbWV0aG9kIHdpdGguXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaW52b2tlTWFwKFtbNSwgMSwgN10sIFszLCAyLCAxXV0sICdzb3J0Jyk7XG4gKiAvLyA9PiBbWzEsIDUsIDddLCBbMSwgMiwgM11dXG4gKlxuICogXy5pbnZva2VNYXAoWzEyMywgNDU2XSwgU3RyaW5nLnByb3RvdHlwZS5zcGxpdCwgJycpO1xuICogLy8gPT4gW1snMScsICcyJywgJzMnXSwgWyc0JywgJzUnLCAnNiddXVxuICovXG52YXIgaW52b2tlTWFwID0gYmFzZVJlc3QoZnVuY3Rpb24oY29sbGVjdGlvbiwgcGF0aCwgYXJncykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGlzRnVuYyA9IHR5cGVvZiBwYXRoID09ICdmdW5jdGlvbicsXG4gICAgICByZXN1bHQgPSBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSA/IEFycmF5KGNvbGxlY3Rpb24ubGVuZ3RoKSA6IFtdO1xuXG4gIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gaXNGdW5jID8gYXBwbHkocGF0aCwgdmFsdWUsIGFyZ3MpIDogYmFzZUludm9rZSh2YWx1ZSwgcGF0aCwgYXJncyk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gaW52b2tlTWFwO1xuIiwidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheTtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlO1xuIiwidmFyIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc0FycmF5TGlrZWAgZXhjZXB0IHRoYXQgaXQgYWxzbyBjaGVja3MgaWYgYHZhbHVlYFxuICogaXMgYW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LWxpa2Ugb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZU9iamVjdDtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpLFxuICAgIHN0dWJGYWxzZSA9IHJlcXVpcmUoJy4vc3R1YkZhbHNlJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0J1ZmZlcjtcbiIsInZhciBiYXNlSXNEYXRlID0gcmVxdWlyZSgnLi9fYmFzZUlzRGF0ZScpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNEYXRlID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNEYXRlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRGF0ZWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZGF0ZSBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0RhdGUobmV3IERhdGUpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNEYXRlKCdNb24gQXByaWwgMjMgMjAxMicpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzRGF0ZSA9IG5vZGVJc0RhdGUgPyBiYXNlVW5hcnkobm9kZUlzRGF0ZSkgOiBiYXNlSXNEYXRlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRGF0ZTtcbiIsInZhciBiYXNlS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzJyksXG4gICAgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gZW1wdHkgb2JqZWN0LCBjb2xsZWN0aW9uLCBtYXAsIG9yIHNldC5cbiAqXG4gKiBPYmplY3RzIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBubyBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWRcbiAqIHByb3BlcnRpZXMuXG4gKlxuICogQXJyYXktbGlrZSB2YWx1ZXMgc3VjaCBhcyBgYXJndW1lbnRzYCBvYmplY3RzLCBhcnJheXMsIGJ1ZmZlcnMsIHN0cmluZ3MsIG9yXG4gKiBqUXVlcnktbGlrZSBjb2xsZWN0aW9ucyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgYSBgbGVuZ3RoYCBvZiBgMGAuXG4gKiBTaW1pbGFybHksIG1hcHMgYW5kIHNldHMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIGEgYHNpemVgIG9mIGAwYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBlbXB0eSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRW1wdHkobnVsbCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0VtcHR5KHRydWUpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbXB0eSgxKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRW1wdHkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0VtcHR5KHsgJ2EnOiAxIH0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiZcbiAgICAgIChpc0FycmF5KHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlLnNwbGljZSA9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIGlzQnVmZmVyKHZhbHVlKSB8fCBpc1R5cGVkQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSkpIHtcbiAgICByZXR1cm4gIXZhbHVlLmxlbmd0aDtcbiAgfVxuICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKTtcbiAgaWYgKHRhZyA9PSBtYXBUYWcgfHwgdGFnID09IHNldFRhZykge1xuICAgIHJldHVybiAhdmFsdWUuc2l6ZTtcbiAgfVxuICBpZiAoaXNQcm90b3R5cGUodmFsdWUpKSB7XG4gICAgcmV0dXJuICFiYXNlS2V5cyh2YWx1ZSkubGVuZ3RoO1xuICB9XG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRW1wdHk7XG4iLCJ2YXIgYmFzZUlzRXF1YWwgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbCcpO1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmVcbiAqIGVxdWl2YWxlbnQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIHN1cHBvcnRzIGNvbXBhcmluZyBhcnJheXMsIGFycmF5IGJ1ZmZlcnMsIGJvb2xlYW5zLFxuICogZGF0ZSBvYmplY3RzLCBlcnJvciBvYmplY3RzLCBtYXBzLCBudW1iZXJzLCBgT2JqZWN0YCBvYmplY3RzLCByZWdleGVzLFxuICogc2V0cywgc3RyaW5ncywgc3ltYm9scywgYW5kIHR5cGVkIGFycmF5cy4gYE9iamVjdGAgb2JqZWN0cyBhcmUgY29tcGFyZWRcbiAqIGJ5IHRoZWlyIG93biwgbm90IGluaGVyaXRlZCwgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLiBGdW5jdGlvbnMgYW5kIERPTVxuICogbm9kZXMgYXJlIGNvbXBhcmVkIGJ5IHN0cmljdCBlcXVhbGl0eSwgaS5lLiBgPT09YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5pc0VxdWFsKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIG9iamVjdCA9PT0gb3RoZXI7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0VxdWFsKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0VxdWFsO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGdW5jdGlvbjtcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xlbmd0aDtcbiIsInZhciBiYXNlSXNNYXAgPSByZXF1aXJlKCcuL19iYXNlSXNNYXAnKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzTWFwID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNNYXA7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBNYXBgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTWFwKG5ldyBNYXApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNNYXAobmV3IFdlYWtNYXApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzTWFwID0gbm9kZUlzTWFwID8gYmFzZVVuYXJ5KG5vZGVJc01hcCkgOiBiYXNlSXNNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNNYXA7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0TGlrZTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGdldFByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2dldFByb3RvdHlwZScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cbnZhciBvYmplY3RDdG9yU3RyaW5nID0gZnVuY1RvU3RyaW5nLmNhbGwoT2JqZWN0KTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgdGhhdCBpcywgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlXG4gKiBgT2JqZWN0YCBjb25zdHJ1Y3RvciBvciBvbmUgd2l0aCBhIGBbW1Byb3RvdHlwZV1dYCBvZiBgbnVsbGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjguMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogfVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChuZXcgRm9vKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdCh7ICd4JzogMCwgJ3knOiAwIH0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgfHwgYmFzZUdldFRhZyh2YWx1ZSkgIT0gb2JqZWN0VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwcm90byA9IGdldFByb3RvdHlwZSh2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmXG4gICAgZnVuY1RvU3RyaW5nLmNhbGwoQ3RvcikgPT0gb2JqZWN0Q3RvclN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1BsYWluT2JqZWN0O1xuIiwidmFyIGJhc2VJc1NldCA9IHJlcXVpcmUoJy4vX2Jhc2VJc1NldCcpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNTZXQgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1NldDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFNldGAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTZXQobmV3IFNldCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1NldChuZXcgV2Vha1NldCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNTZXQgPSBub2RlSXNTZXQgPyBiYXNlVW5hcnkobm9kZUlzU2V0KSA6IGJhc2VJc1NldDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1NldDtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTdHJpbmdgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzdHJpbmcsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N0cmluZygnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N0cmluZygxKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHxcbiAgICAoIWlzQXJyYXkodmFsdWUpICYmIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3RyaW5nVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N0cmluZztcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N5bWJvbDtcbiIsInZhciBiYXNlSXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fYmFzZUlzVHlwZWRBcnJheScpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNUeXBlZEFycmF5O1xuIiwidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXMgPSByZXF1aXJlKCcuL19iYXNlS2V5cycpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5cyhuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLmtleXMoJ2hpJyk7XG4gKiAvLyA9PiBbJzAnLCAnMSddXG4gKi9cbmZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzO1xuIiwidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXNJbiA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzSW4nKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c0luO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5sYXN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAzXG4gKi9cbmZ1bmN0aW9uIGxhc3QoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYXJyYXlbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGFzdDtcbiIsInZhciBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyk7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgbWVtb2l6ZXMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuIElmIGByZXNvbHZlcmAgaXNcbiAqIHByb3ZpZGVkLCBpdCBkZXRlcm1pbmVzIHRoZSBjYWNoZSBrZXkgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGVcbiAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudFxuICogcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uIGlzIHVzZWQgYXMgdGhlIG1hcCBjYWNoZSBrZXkuIFRoZSBgZnVuY2BcbiAqIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlIG1lbW9pemVkIGZ1bmN0aW9uLlxuICpcbiAqICoqTm90ZToqKiBUaGUgY2FjaGUgaXMgZXhwb3NlZCBhcyB0aGUgYGNhY2hlYCBwcm9wZXJ0eSBvbiB0aGUgbWVtb2l6ZWRcbiAqIGZ1bmN0aW9uLiBJdHMgY3JlYXRpb24gbWF5IGJlIGN1c3RvbWl6ZWQgYnkgcmVwbGFjaW5nIHRoZSBgXy5tZW1vaXplLkNhY2hlYFxuICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5zdGFuY2VzIGltcGxlbWVudCB0aGVcbiAqIFtgTWFwYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcHJvcGVydGllcy1vZi10aGUtbWFwLXByb3RvdHlwZS1vYmplY3QpXG4gKiBtZXRob2QgaW50ZXJmYWNlIG9mIGBjbGVhcmAsIGBkZWxldGVgLCBgZ2V0YCwgYGhhc2AsIGFuZCBgc2V0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0gVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiB9O1xuICogdmFyIG90aGVyID0geyAnYyc6IDMsICdkJzogNCB9O1xuICpcbiAqIHZhciB2YWx1ZXMgPSBfLm1lbW9pemUoXy52YWx1ZXMpO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiB2YWx1ZXMob3RoZXIpO1xuICogLy8gPT4gWzMsIDRdXG4gKlxuICogb2JqZWN0LmEgPSAyO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiAvLyBNb2RpZnkgdGhlIHJlc3VsdCBjYWNoZS5cbiAqIHZhbHVlcy5jYWNoZS5zZXQob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWydhJywgJ2InXVxuICpcbiAqIC8vIFJlcGxhY2UgYF8ubWVtb2l6ZS5DYWNoZWAuXG4gKiBfLm1lbW9pemUuQ2FjaGUgPSBXZWFrTWFwO1xuICovXG5mdW5jdGlvbiBtZW1vaXplKGZ1bmMsIHJlc29sdmVyKSB7XG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAhPSBudWxsICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXG4gICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XG5cbiAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpIHx8IGNhY2hlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IE1hcENhY2hlKTtcbiAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG4vLyBFeHBvc2UgYE1hcENhY2hlYC5cbm1lbW9pemUuQ2FjaGUgPSBNYXBDYWNoZTtcblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGB1bmRlZmluZWRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi4zLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5ub29wKTtcbiAqIC8vID0+IFt1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAqL1xuZnVuY3Rpb24gbm9vcCgpIHtcbiAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBub29wO1xuIiwidmFyIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBiYXNlQ2xvbmUgPSByZXF1aXJlKCcuL19iYXNlQ2xvbmUnKSxcbiAgICBiYXNlVW5zZXQgPSByZXF1aXJlKCcuL19iYXNlVW5zZXQnKSxcbiAgICBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBjdXN0b21PbWl0Q2xvbmUgPSByZXF1aXJlKCcuL19jdXN0b21PbWl0Q2xvbmUnKSxcbiAgICBmbGF0UmVzdCA9IHJlcXVpcmUoJy4vX2ZsYXRSZXN0JyksXG4gICAgZ2V0QWxsS2V5c0luID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5c0luJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG52YXIgQ0xPTkVfREVFUF9GTEFHID0gMSxcbiAgICBDTE9ORV9GTEFUX0ZMQUcgPSAyLFxuICAgIENMT05FX1NZTUJPTFNfRkxBRyA9IDQ7XG5cbi8qKlxuICogVGhlIG9wcG9zaXRlIG9mIGBfLnBpY2tgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGVcbiAqIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgcGF0aHMgb2YgYG9iamVjdGAgdGhhdCBhcmUgbm90IG9taXR0ZWQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGNvbnNpZGVyYWJseSBzbG93ZXIgdGhhbiBgXy5waWNrYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gb21pdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAnMicsICdjJzogMyB9O1xuICpcbiAqIF8ub21pdChvYmplY3QsIFsnYScsICdjJ10pO1xuICogLy8gPT4geyAnYic6ICcyJyB9XG4gKi9cbnZhciBvbWl0ID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBwYXRocykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgdmFyIGlzRGVlcCA9IGZhbHNlO1xuICBwYXRocyA9IGFycmF5TWFwKHBhdGhzLCBmdW5jdGlvbihwYXRoKSB7XG4gICAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG4gICAgaXNEZWVwIHx8IChpc0RlZXAgPSBwYXRoLmxlbmd0aCA+IDEpO1xuICAgIHJldHVybiBwYXRoO1xuICB9KTtcbiAgY29weU9iamVjdChvYmplY3QsIGdldEFsbEtleXNJbihvYmplY3QpLCByZXN1bHQpO1xuICBpZiAoaXNEZWVwKSB7XG4gICAgcmVzdWx0ID0gYmFzZUNsb25lKHJlc3VsdCwgQ0xPTkVfREVFUF9GTEFHIHwgQ0xPTkVfRkxBVF9GTEFHIHwgQ0xPTkVfU1lNQk9MU19GTEFHLCBjdXN0b21PbWl0Q2xvbmUpO1xuICB9XG4gIHZhciBsZW5ndGggPSBwYXRocy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGJhc2VVbnNldChyZXN1bHQsIHBhdGhzW2xlbmd0aF0pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBvbWl0O1xuIiwidmFyIGJlZm9yZSA9IHJlcXVpcmUoJy4vYmVmb3JlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaXMgcmVzdHJpY3RlZCB0byBpbnZva2luZyBgZnVuY2Agb25jZS4gUmVwZWF0IGNhbGxzXG4gKiB0byB0aGUgZnVuY3Rpb24gcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgaW52b2NhdGlvbi4gVGhlIGBmdW5jYCBpc1xuICogaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBhbmQgYXJndW1lbnRzIG9mIHRoZSBjcmVhdGVkIGZ1bmN0aW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyByZXN0cmljdGVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgaW5pdGlhbGl6ZSA9IF8ub25jZShjcmVhdGVBcHBsaWNhdGlvbik7XG4gKiBpbml0aWFsaXplKCk7XG4gKiBpbml0aWFsaXplKCk7XG4gKiAvLyA9PiBgY3JlYXRlQXBwbGljYXRpb25gIGlzIGludm9rZWQgb25jZVxuICovXG5mdW5jdGlvbiBvbmNlKGZ1bmMpIHtcbiAgcmV0dXJuIGJlZm9yZSgyLCBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvbmNlO1xuIiwidmFyIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBjcmVhdGVXcmFwID0gcmVxdWlyZSgnLi9fY3JlYXRlV3JhcCcpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlcGxhY2VIb2xkZXJzID0gcmVxdWlyZSgnLi9fcmVwbGFjZUhvbGRlcnMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9QQVJUSUFMX0ZMQUcgPSAzMjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGBwYXJ0aWFsc2AgcHJlcGVuZGVkIHRvIHRoZVxuICogYXJndW1lbnRzIGl0IHJlY2VpdmVzLiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmJpbmRgIGV4Y2VwdCBpdCBkb2VzICoqbm90KipcbiAqIGFsdGVyIHRoZSBgdGhpc2AgYmluZGluZy5cbiAqXG4gKiBUaGUgYF8ucGFydGlhbC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljXG4gKiBidWlsZHMsIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgcGFydGlhbGx5XG4gKiBhcHBsaWVkIGZ1bmN0aW9ucy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMi4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHBhcnRpYWxseSBhcHBseSBhcmd1bWVudHMgdG8uXG4gKiBAcGFyYW0gey4uLip9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhcnRpYWxseSBhcHBsaWVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBncmVldChncmVldGluZywgbmFtZSkge1xuICogICByZXR1cm4gZ3JlZXRpbmcgKyAnICcgKyBuYW1lO1xuICogfVxuICpcbiAqIHZhciBzYXlIZWxsb1RvID0gXy5wYXJ0aWFsKGdyZWV0LCAnaGVsbG8nKTtcbiAqIHNheUhlbGxvVG8oJ2ZyZWQnKTtcbiAqIC8vID0+ICdoZWxsbyBmcmVkJ1xuICpcbiAqIC8vIFBhcnRpYWxseSBhcHBsaWVkIHdpdGggcGxhY2Vob2xkZXJzLlxuICogdmFyIGdyZWV0RnJlZCA9IF8ucGFydGlhbChncmVldCwgXywgJ2ZyZWQnKTtcbiAqIGdyZWV0RnJlZCgnaGknKTtcbiAqIC8vID0+ICdoaSBmcmVkJ1xuICovXG52YXIgcGFydGlhbCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIHBhcnRpYWxzKSB7XG4gIHZhciBob2xkZXJzID0gcmVwbGFjZUhvbGRlcnMocGFydGlhbHMsIGdldEhvbGRlcihwYXJ0aWFsKSk7XG4gIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfUEFSVElBTF9GTEFHLCB1bmRlZmluZWQsIHBhcnRpYWxzLCBob2xkZXJzKTtcbn0pO1xuXG4vLyBBc3NpZ24gZGVmYXVsdCBwbGFjZWhvbGRlcnMuXG5wYXJ0aWFsLnBsYWNlaG9sZGVyID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gcGFydGlhbDtcbiIsInZhciBiYXNlUGljayA9IHJlcXVpcmUoJy4vX2Jhc2VQaWNrJyksXG4gICAgZmxhdFJlc3QgPSByZXF1aXJlKCcuL19mbGF0UmVzdCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZSBwaWNrZWQgYG9iamVjdGAgcHJvcGVydGllcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAnMicsICdjJzogMyB9O1xuICpcbiAqIF8ucGljayhvYmplY3QsIFsnYScsICdjJ10pO1xuICogLy8gPT4geyAnYSc6IDEsICdjJzogMyB9XG4gKi9cbnZhciBwaWNrID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBwYXRocykge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB7fSA6IGJhc2VQaWNrKG9iamVjdCwgcGF0aHMpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGljaztcbiIsInZhciBiYXNlUHJvcGVydHkgPSByZXF1aXJlKCcuL19iYXNlUHJvcGVydHknKSxcbiAgICBiYXNlUHJvcGVydHlEZWVwID0gcmVxdWlyZSgnLi9fYmFzZVByb3BlcnR5RGVlcCcpLFxuICAgIGlzS2V5ID0gcmVxdWlyZSgnLi9faXNLZXknKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGEgZ2l2ZW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW1xuICogICB7ICdhJzogeyAnYic6IDIgfSB9LFxuICogICB7ICdhJzogeyAnYic6IDEgfSB9XG4gKiBdO1xuICpcbiAqIF8ubWFwKG9iamVjdHMsIF8ucHJvcGVydHkoJ2EuYicpKTtcbiAqIC8vID0+IFsyLCAxXVxuICpcbiAqIF8ubWFwKF8uc29ydEJ5KG9iamVjdHMsIF8ucHJvcGVydHkoWydhJywgJ2InXSkpLCAnYS5iJyk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqL1xuZnVuY3Rpb24gcHJvcGVydHkocGF0aCkge1xuICByZXR1cm4gaXNLZXkocGF0aCkgPyBiYXNlUHJvcGVydHkodG9LZXkocGF0aCkpIDogYmFzZVByb3BlcnR5RGVlcChwYXRoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwcm9wZXJ0eTtcbiIsInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmdldGAgZXhjZXB0IHRoYXQgaWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzIGFcbiAqIGZ1bmN0aW9uIGl0J3MgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBpdHMgcGFyZW50IG9iamVjdCBhbmRcbiAqIGl0cyByZXN1bHQgaXMgcmV0dXJuZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHJlc29sdmUuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYzEnOiAzLCAnYzInOiBfLmNvbnN0YW50KDQpIH0gfV0gfTtcbiAqXG4gKiBfLnJlc3VsdChvYmplY3QsICdhWzBdLmIuYzEnKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLnJlc3VsdChvYmplY3QsICdhWzBdLmIuYzInKTtcbiAqIC8vID0+IDRcbiAqXG4gKiBfLnJlc3VsdChvYmplY3QsICdhWzBdLmIuYzMnLCAnZGVmYXVsdCcpO1xuICogLy8gPT4gJ2RlZmF1bHQnXG4gKlxuICogXy5yZXN1bHQob2JqZWN0LCAnYVswXS5iLmMzJywgXy5jb25zdGFudCgnZGVmYXVsdCcpKTtcbiAqIC8vID0+ICdkZWZhdWx0J1xuICovXG5mdW5jdGlvbiByZXN1bHQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICAvLyBFbnN1cmUgdGhlIGxvb3AgaXMgZW50ZXJlZCB3aGVuIHBhdGggaXMgZW1wdHkuXG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gMTtcbiAgICBvYmplY3QgPSB1bmRlZmluZWQ7XG4gIH1cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFt0b0tleShwYXRoW2luZGV4XSldO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbmRleCA9IGxlbmd0aDtcbiAgICAgIHZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgICBvYmplY3QgPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHZhbHVlLmNhbGwob2JqZWN0KSA6IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVzdWx0O1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheXMgPSBfLnRpbWVzKDIsIF8uc3R1YkFycmF5KTtcbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXMpO1xuICogLy8gPT4gW1tdLCBbXV1cbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXNbMF0gPT09IGFycmF5c1sxXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBzdHViQXJyYXkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViQXJyYXk7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkZhbHNlO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzU3RyaW5nID0gcmVxdWlyZSgnLi9pc1N0cmluZycpLFxuICAgIGl0ZXJhdG9yVG9BcnJheSA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9yVG9BcnJheScpLFxuICAgIG1hcFRvQXJyYXkgPSByZXF1aXJlKCcuL19tYXBUb0FycmF5JyksXG4gICAgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4vX3NldFRvQXJyYXknKSxcbiAgICBzdHJpbmdUb0FycmF5ID0gcmVxdWlyZSgnLi9fc3RyaW5nVG9BcnJheScpLFxuICAgIHZhbHVlcyA9IHJlcXVpcmUoJy4vdmFsdWVzJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltSXRlcmF0b3IgPSBTeW1ib2wgPyBTeW1ib2wuaXRlcmF0b3IgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvQXJyYXkoeyAnYSc6IDEsICdiJzogMiB9KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIF8udG9BcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ11cbiAqXG4gKiBfLnRvQXJyYXkoMSk7XG4gKiAvLyA9PiBbXVxuICpcbiAqIF8udG9BcnJheShudWxsKTtcbiAqIC8vID0+IFtdXG4gKi9cbmZ1bmN0aW9uIHRvQXJyYXkodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBpZiAoaXNBcnJheUxpa2UodmFsdWUpKSB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlKSA/IHN0cmluZ1RvQXJyYXkodmFsdWUpIDogY29weUFycmF5KHZhbHVlKTtcbiAgfVxuICBpZiAoc3ltSXRlcmF0b3IgJiYgdmFsdWVbc3ltSXRlcmF0b3JdKSB7XG4gICAgcmV0dXJuIGl0ZXJhdG9yVG9BcnJheSh2YWx1ZVtzeW1JdGVyYXRvcl0oKSk7XG4gIH1cbiAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSksXG4gICAgICBmdW5jID0gdGFnID09IG1hcFRhZyA/IG1hcFRvQXJyYXkgOiAodGFnID09IHNldFRhZyA/IHNldFRvQXJyYXkgOiB2YWx1ZXMpO1xuXG4gIHJldHVybiBmdW5jKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0FycmF5O1xuIiwidmFyIHRvTnVtYmVyID0gcmVxdWlyZSgnLi90b051bWJlcicpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwLFxuICAgIE1BWF9JTlRFR0VSID0gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIGZpbml0ZSBudW1iZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEyLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b0Zpbml0ZSgzLjIpO1xuICogLy8gPT4gMy4yXG4gKlxuICogXy50b0Zpbml0ZShOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDVlLTMyNFxuICpcbiAqIF8udG9GaW5pdGUoSW5maW5pdHkpO1xuICogLy8gPT4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhcbiAqXG4gKiBfLnRvRmluaXRlKCczLjInKTtcbiAqIC8vID0+IDMuMlxuICovXG5mdW5jdGlvbiB0b0Zpbml0ZSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiAwO1xuICB9XG4gIHZhbHVlID0gdG9OdW1iZXIodmFsdWUpO1xuICBpZiAodmFsdWUgPT09IElORklOSVRZIHx8IHZhbHVlID09PSAtSU5GSU5JVFkpIHtcbiAgICB2YXIgc2lnbiA9ICh2YWx1ZSA8IDAgPyAtMSA6IDEpO1xuICAgIHJldHVybiBzaWduICogTUFYX0lOVEVHRVI7XG4gIH1cbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/IHZhbHVlIDogMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0Zpbml0ZTtcbiIsInZhciB0b0Zpbml0ZSA9IHJlcXVpcmUoJy4vdG9GaW5pdGUnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGFuIGludGVnZXIuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9JbnRlZ2VyYF0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvaW50ZWdlcikuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgaW50ZWdlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b0ludGVnZXIoMy4yKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLnRvSW50ZWdlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDBcbiAqXG4gKiBfLnRvSW50ZWdlcihJbmZpbml0eSk7XG4gKiAvLyA9PiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFxuICpcbiAqIF8udG9JbnRlZ2VyKCczLjInKTtcbiAqIC8vID0+IDNcbiAqL1xuZnVuY3Rpb24gdG9JbnRlZ2VyKHZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSB0b0Zpbml0ZSh2YWx1ZSksXG4gICAgICByZW1haW5kZXIgPSByZXN1bHQgJSAxO1xuXG4gIHJldHVybiByZXN1bHQgPT09IHJlc3VsdCA/IChyZW1haW5kZXIgPyByZXN1bHQgLSByZW1haW5kZXIgOiByZXN1bHQpIDogMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0ludGVnZXI7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE5BTiA9IDAgLyAwO1xuXG4vKiogVXNlZCB0byBtYXRjaCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLiAqL1xudmFyIHJlVHJpbSA9IC9eXFxzK3xcXHMrJC9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmFkIHNpZ25lZCBoZXhhZGVjaW1hbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCYWRIZXggPSAvXlstK10weFswLTlhLWZdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGJpbmFyeSBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCaW5hcnkgPSAvXjBiWzAxXSskL2k7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvY3RhbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNPY3RhbCA9IC9eMG9bMC03XSskL2k7XG5cbi8qKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB3aXRob3V0IGEgZGVwZW5kZW5jeSBvbiBgcm9vdGAuICovXG52YXIgZnJlZVBhcnNlSW50ID0gcGFyc2VJbnQ7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIG51bWJlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b051bWJlcigzLjIpO1xuICogLy8gPT4gMy4yXG4gKlxuICogXy50b051bWJlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDVlLTMyNFxuICpcbiAqIF8udG9OdW1iZXIoSW5maW5pdHkpO1xuICogLy8gPT4gSW5maW5pdHlcbiAqXG4gKiBfLnRvTnVtYmVyKCczLjInKTtcbiAqIC8vID0+IDMuMlxuICovXG5mdW5jdGlvbiB0b051bWJlcih2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gTkFOO1xuICB9XG4gIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICB2YXIgb3RoZXIgPSB0eXBlb2YgdmFsdWUudmFsdWVPZiA9PSAnZnVuY3Rpb24nID8gdmFsdWUudmFsdWVPZigpIDogdmFsdWU7XG4gICAgdmFsdWUgPSBpc09iamVjdChvdGhlcikgPyAob3RoZXIgKyAnJykgOiBvdGhlcjtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiArdmFsdWU7XG4gIH1cbiAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHJlVHJpbSwgJycpO1xuICB2YXIgaXNCaW5hcnkgPSByZUlzQmluYXJ5LnRlc3QodmFsdWUpO1xuICByZXR1cm4gKGlzQmluYXJ5IHx8IHJlSXNPY3RhbC50ZXN0KHZhbHVlKSlcbiAgICA/IGZyZWVQYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgaXNCaW5hcnkgPyAyIDogOClcbiAgICA6IChyZUlzQmFkSGV4LnRlc3QodmFsdWUpID8gTkFOIDogK3ZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b051bWJlcjtcbiIsInZhciBiYXNlVG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlVG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU3RyaW5nO1xuIiwidmFyIGJhc2VGbGF0dGVuID0gcmVxdWlyZSgnLi9fYmFzZUZsYXR0ZW4nKSxcbiAgICBiYXNlUmVzdCA9IHJlcXVpcmUoJy4vX2Jhc2VSZXN0JyksXG4gICAgYmFzZVVuaXEgPSByZXF1aXJlKCcuL19iYXNlVW5pcScpLFxuICAgIGlzQXJyYXlMaWtlT2JqZWN0ID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZU9iamVjdCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcywgaW4gb3JkZXIsIGZyb20gYWxsIGdpdmVuIGFycmF5cyB1c2luZ1xuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbWJpbmVkIHZhbHVlcy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy51bmlvbihbMl0sIFsxLCAyXSk7XG4gKiAvLyA9PiBbMiwgMV1cbiAqL1xudmFyIHVuaW9uID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gIHJldHVybiBiYXNlVW5pcShiYXNlRmxhdHRlbihhcnJheXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmlvbjtcbiIsInZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqIFVzZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIElEcy4gKi9cbnZhciBpZENvdW50ZXIgPSAwO1xuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHVuaXF1ZSBJRC4gSWYgYHByZWZpeGAgaXMgZ2l2ZW4sIHRoZSBJRCBpcyBhcHBlbmRlZCB0byBpdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtzdHJpbmd9IFtwcmVmaXg9JyddIFRoZSB2YWx1ZSB0byBwcmVmaXggdGhlIElEIHdpdGguXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB1bmlxdWUgSUQuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udW5pcXVlSWQoJ2NvbnRhY3RfJyk7XG4gKiAvLyA9PiAnY29udGFjdF8xMDQnXG4gKlxuICogXy51bmlxdWVJZCgpO1xuICogLy8gPT4gJzEwNSdcbiAqL1xuZnVuY3Rpb24gdW5pcXVlSWQocHJlZml4KSB7XG4gIHZhciBpZCA9ICsraWRDb3VudGVyO1xuICByZXR1cm4gdG9TdHJpbmcocHJlZml4KSArIGlkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHVuaXF1ZUlkO1xuIiwidmFyIGJhc2VWYWx1ZXMgPSByZXF1aXJlKCcuL19iYXNlVmFsdWVzJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8udmFsdWVzKG5ldyBGb28pO1xuICogLy8gPT4gWzEsIDJdIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKlxuICogXy52YWx1ZXMoJ2hpJyk7XG4gKiAvLyA9PiBbJ2gnLCAnaSddXG4gKi9cbmZ1bmN0aW9uIHZhbHVlcyhvYmplY3QpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gW10gOiBiYXNlVmFsdWVzKG9iamVjdCwga2V5cyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2YWx1ZXM7XG4iLCJ2YXIgTGF6eVdyYXBwZXIgPSByZXF1aXJlKCcuL19MYXp5V3JhcHBlcicpLFxuICAgIExvZGFzaFdyYXBwZXIgPSByZXF1aXJlKCcuL19Mb2Rhc2hXcmFwcGVyJyksXG4gICAgYmFzZUxvZGFzaCA9IHJlcXVpcmUoJy4vX2Jhc2VMb2Rhc2gnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKSxcbiAgICB3cmFwcGVyQ2xvbmUgPSByZXF1aXJlKCcuL193cmFwcGVyQ2xvbmUnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgYGxvZGFzaGAgb2JqZWN0IHdoaWNoIHdyYXBzIGB2YWx1ZWAgdG8gZW5hYmxlIGltcGxpY2l0IG1ldGhvZFxuICogY2hhaW4gc2VxdWVuY2VzLiBNZXRob2RzIHRoYXQgb3BlcmF0ZSBvbiBhbmQgcmV0dXJuIGFycmF5cywgY29sbGVjdGlvbnMsXG4gKiBhbmQgZnVuY3Rpb25zIGNhbiBiZSBjaGFpbmVkIHRvZ2V0aGVyLiBNZXRob2RzIHRoYXQgcmV0cmlldmUgYSBzaW5nbGUgdmFsdWVcbiAqIG9yIG1heSByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IGVuZCB0aGUgY2hhaW4gc2VxdWVuY2VcbiAqIGFuZCByZXR1cm4gdGhlIHVud3JhcHBlZCB2YWx1ZS4gT3RoZXJ3aXNlLCB0aGUgdmFsdWUgbXVzdCBiZSB1bndyYXBwZWRcbiAqIHdpdGggYF8jdmFsdWVgLlxuICpcbiAqIEV4cGxpY2l0IGNoYWluIHNlcXVlbmNlcywgd2hpY2ggbXVzdCBiZSB1bndyYXBwZWQgd2l0aCBgXyN2YWx1ZWAsIG1heSBiZVxuICogZW5hYmxlZCB1c2luZyBgXy5jaGFpbmAuXG4gKlxuICogVGhlIGV4ZWN1dGlvbiBvZiBjaGFpbmVkIG1ldGhvZHMgaXMgbGF6eSwgdGhhdCBpcywgaXQncyBkZWZlcnJlZCB1bnRpbFxuICogYF8jdmFsdWVgIGlzIGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBjYWxsZWQuXG4gKlxuICogTGF6eSBldmFsdWF0aW9uIGFsbG93cyBzZXZlcmFsIG1ldGhvZHMgdG8gc3VwcG9ydCBzaG9ydGN1dCBmdXNpb24uXG4gKiBTaG9ydGN1dCBmdXNpb24gaXMgYW4gb3B0aW1pemF0aW9uIHRvIG1lcmdlIGl0ZXJhdGVlIGNhbGxzOyB0aGlzIGF2b2lkc1xuICogdGhlIGNyZWF0aW9uIG9mIGludGVybWVkaWF0ZSBhcnJheXMgYW5kIGNhbiBncmVhdGx5IHJlZHVjZSB0aGUgbnVtYmVyIG9mXG4gKiBpdGVyYXRlZSBleGVjdXRpb25zLiBTZWN0aW9ucyBvZiBhIGNoYWluIHNlcXVlbmNlIHF1YWxpZnkgZm9yIHNob3J0Y3V0XG4gKiBmdXNpb24gaWYgdGhlIHNlY3Rpb24gaXMgYXBwbGllZCB0byBhbiBhcnJheSBhbmQgaXRlcmF0ZWVzIGFjY2VwdCBvbmx5XG4gKiBvbmUgYXJndW1lbnQuIFRoZSBoZXVyaXN0aWMgZm9yIHdoZXRoZXIgYSBzZWN0aW9uIHF1YWxpZmllcyBmb3Igc2hvcnRjdXRcbiAqIGZ1c2lvbiBpcyBzdWJqZWN0IHRvIGNoYW5nZS5cbiAqXG4gKiBDaGFpbmluZyBpcyBzdXBwb3J0ZWQgaW4gY3VzdG9tIGJ1aWxkcyBhcyBsb25nIGFzIHRoZSBgXyN2YWx1ZWAgbWV0aG9kIGlzXG4gKiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluY2x1ZGVkIGluIHRoZSBidWlsZC5cbiAqXG4gKiBJbiBhZGRpdGlvbiB0byBsb2Rhc2ggbWV0aG9kcywgd3JhcHBlcnMgaGF2ZSBgQXJyYXlgIGFuZCBgU3RyaW5nYCBtZXRob2RzLlxuICpcbiAqIFRoZSB3cmFwcGVyIGBBcnJheWAgbWV0aG9kcyBhcmU6XG4gKiBgY29uY2F0YCwgYGpvaW5gLCBgcG9wYCwgYHB1c2hgLCBgc2hpZnRgLCBgc29ydGAsIGBzcGxpY2VgLCBhbmQgYHVuc2hpZnRgXG4gKlxuICogVGhlIHdyYXBwZXIgYFN0cmluZ2AgbWV0aG9kcyBhcmU6XG4gKiBgcmVwbGFjZWAgYW5kIGBzcGxpdGBcbiAqXG4gKiBUaGUgd3JhcHBlciBtZXRob2RzIHRoYXQgc3VwcG9ydCBzaG9ydGN1dCBmdXNpb24gYXJlOlxuICogYGF0YCwgYGNvbXBhY3RgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLCBgZHJvcFdoaWxlYCwgYGZpbHRlcmAsIGBmaW5kYCxcbiAqIGBmaW5kTGFzdGAsIGBoZWFkYCwgYGluaXRpYWxgLCBgbGFzdGAsIGBtYXBgLCBgcmVqZWN0YCwgYHJldmVyc2VgLCBgc2xpY2VgLFxuICogYHRhaWxgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLCBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYW5kIGB0b0FycmF5YFxuICpcbiAqIFRoZSBjaGFpbmFibGUgd3JhcHBlciBtZXRob2RzIGFyZTpcbiAqIGBhZnRlcmAsIGBhcnlgLCBgYXNzaWduYCwgYGFzc2lnbkluYCwgYGFzc2lnbkluV2l0aGAsIGBhc3NpZ25XaXRoYCwgYGF0YCxcbiAqIGBiZWZvcmVgLCBgYmluZGAsIGBiaW5kQWxsYCwgYGJpbmRLZXlgLCBgY2FzdEFycmF5YCwgYGNoYWluYCwgYGNodW5rYCxcbiAqIGBjb21taXRgLCBgY29tcGFjdGAsIGBjb25jYXRgLCBgY29uZm9ybXNgLCBgY29uc3RhbnRgLCBgY291bnRCeWAsIGBjcmVhdGVgLFxuICogYGN1cnJ5YCwgYGRlYm91bmNlYCwgYGRlZmF1bHRzYCwgYGRlZmF1bHRzRGVlcGAsIGBkZWZlcmAsIGBkZWxheWAsXG4gKiBgZGlmZmVyZW5jZWAsIGBkaWZmZXJlbmNlQnlgLCBgZGlmZmVyZW5jZVdpdGhgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLFxuICogYGRyb3BSaWdodFdoaWxlYCwgYGRyb3BXaGlsZWAsIGBleHRlbmRgLCBgZXh0ZW5kV2l0aGAsIGBmaWxsYCwgYGZpbHRlcmAsXG4gKiBgZmxhdE1hcGAsIGBmbGF0TWFwRGVlcGAsIGBmbGF0TWFwRGVwdGhgLCBgZmxhdHRlbmAsIGBmbGF0dGVuRGVlcGAsXG4gKiBgZmxhdHRlbkRlcHRoYCwgYGZsaXBgLCBgZmxvd2AsIGBmbG93UmlnaHRgLCBgZnJvbVBhaXJzYCwgYGZ1bmN0aW9uc2AsXG4gKiBgZnVuY3Rpb25zSW5gLCBgZ3JvdXBCeWAsIGBpbml0aWFsYCwgYGludGVyc2VjdGlvbmAsIGBpbnRlcnNlY3Rpb25CeWAsXG4gKiBgaW50ZXJzZWN0aW9uV2l0aGAsIGBpbnZlcnRgLCBgaW52ZXJ0QnlgLCBgaW52b2tlTWFwYCwgYGl0ZXJhdGVlYCwgYGtleUJ5YCxcbiAqIGBrZXlzYCwgYGtleXNJbmAsIGBtYXBgLCBgbWFwS2V5c2AsIGBtYXBWYWx1ZXNgLCBgbWF0Y2hlc2AsIGBtYXRjaGVzUHJvcGVydHlgLFxuICogYG1lbW9pemVgLCBgbWVyZ2VgLCBgbWVyZ2VXaXRoYCwgYG1ldGhvZGAsIGBtZXRob2RPZmAsIGBtaXhpbmAsIGBuZWdhdGVgLFxuICogYG50aEFyZ2AsIGBvbWl0YCwgYG9taXRCeWAsIGBvbmNlYCwgYG9yZGVyQnlgLCBgb3ZlcmAsIGBvdmVyQXJnc2AsXG4gKiBgb3ZlckV2ZXJ5YCwgYG92ZXJTb21lYCwgYHBhcnRpYWxgLCBgcGFydGlhbFJpZ2h0YCwgYHBhcnRpdGlvbmAsIGBwaWNrYCxcbiAqIGBwaWNrQnlgLCBgcGxhbnRgLCBgcHJvcGVydHlgLCBgcHJvcGVydHlPZmAsIGBwdWxsYCwgYHB1bGxBbGxgLCBgcHVsbEFsbEJ5YCxcbiAqIGBwdWxsQWxsV2l0aGAsIGBwdWxsQXRgLCBgcHVzaGAsIGByYW5nZWAsIGByYW5nZVJpZ2h0YCwgYHJlYXJnYCwgYHJlamVjdGAsXG4gKiBgcmVtb3ZlYCwgYHJlc3RgLCBgcmV2ZXJzZWAsIGBzYW1wbGVTaXplYCwgYHNldGAsIGBzZXRXaXRoYCwgYHNodWZmbGVgLFxuICogYHNsaWNlYCwgYHNvcnRgLCBgc29ydEJ5YCwgYHNwbGljZWAsIGBzcHJlYWRgLCBgdGFpbGAsIGB0YWtlYCwgYHRha2VSaWdodGAsXG4gKiBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYHRhcGAsIGB0aHJvdHRsZWAsIGB0aHJ1YCwgYHRvQXJyYXlgLFxuICogYHRvUGFpcnNgLCBgdG9QYWlyc0luYCwgYHRvUGF0aGAsIGB0b1BsYWluT2JqZWN0YCwgYHRyYW5zZm9ybWAsIGB1bmFyeWAsXG4gKiBgdW5pb25gLCBgdW5pb25CeWAsIGB1bmlvbldpdGhgLCBgdW5pcWAsIGB1bmlxQnlgLCBgdW5pcVdpdGhgLCBgdW5zZXRgLFxuICogYHVuc2hpZnRgLCBgdW56aXBgLCBgdW56aXBXaXRoYCwgYHVwZGF0ZWAsIGB1cGRhdGVXaXRoYCwgYHZhbHVlc2AsXG4gKiBgdmFsdWVzSW5gLCBgd2l0aG91dGAsIGB3cmFwYCwgYHhvcmAsIGB4b3JCeWAsIGB4b3JXaXRoYCwgYHppcGAsXG4gKiBgemlwT2JqZWN0YCwgYHppcE9iamVjdERlZXBgLCBhbmQgYHppcFdpdGhgXG4gKlxuICogVGhlIHdyYXBwZXIgbWV0aG9kcyB0aGF0IGFyZSAqKm5vdCoqIGNoYWluYWJsZSBieSBkZWZhdWx0IGFyZTpcbiAqIGBhZGRgLCBgYXR0ZW1wdGAsIGBjYW1lbENhc2VgLCBgY2FwaXRhbGl6ZWAsIGBjZWlsYCwgYGNsYW1wYCwgYGNsb25lYCxcbiAqIGBjbG9uZURlZXBgLCBgY2xvbmVEZWVwV2l0aGAsIGBjbG9uZVdpdGhgLCBgY29uZm9ybXNUb2AsIGBkZWJ1cnJgLFxuICogYGRlZmF1bHRUb2AsIGBkaXZpZGVgLCBgZWFjaGAsIGBlYWNoUmlnaHRgLCBgZW5kc1dpdGhgLCBgZXFgLCBgZXNjYXBlYCxcbiAqIGBlc2NhcGVSZWdFeHBgLCBgZXZlcnlgLCBgZmluZGAsIGBmaW5kSW5kZXhgLCBgZmluZEtleWAsIGBmaW5kTGFzdGAsXG4gKiBgZmluZExhc3RJbmRleGAsIGBmaW5kTGFzdEtleWAsIGBmaXJzdGAsIGBmbG9vcmAsIGBmb3JFYWNoYCwgYGZvckVhY2hSaWdodGAsXG4gKiBgZm9ySW5gLCBgZm9ySW5SaWdodGAsIGBmb3JPd25gLCBgZm9yT3duUmlnaHRgLCBgZ2V0YCwgYGd0YCwgYGd0ZWAsIGBoYXNgLFxuICogYGhhc0luYCwgYGhlYWRgLCBgaWRlbnRpdHlgLCBgaW5jbHVkZXNgLCBgaW5kZXhPZmAsIGBpblJhbmdlYCwgYGludm9rZWAsXG4gKiBgaXNBcmd1bWVudHNgLCBgaXNBcnJheWAsIGBpc0FycmF5QnVmZmVyYCwgYGlzQXJyYXlMaWtlYCwgYGlzQXJyYXlMaWtlT2JqZWN0YCxcbiAqIGBpc0Jvb2xlYW5gLCBgaXNCdWZmZXJgLCBgaXNEYXRlYCwgYGlzRWxlbWVudGAsIGBpc0VtcHR5YCwgYGlzRXF1YWxgLFxuICogYGlzRXF1YWxXaXRoYCwgYGlzRXJyb3JgLCBgaXNGaW5pdGVgLCBgaXNGdW5jdGlvbmAsIGBpc0ludGVnZXJgLCBgaXNMZW5ndGhgLFxuICogYGlzTWFwYCwgYGlzTWF0Y2hgLCBgaXNNYXRjaFdpdGhgLCBgaXNOYU5gLCBgaXNOYXRpdmVgLCBgaXNOaWxgLCBgaXNOdWxsYCxcbiAqIGBpc051bWJlcmAsIGBpc09iamVjdGAsIGBpc09iamVjdExpa2VgLCBgaXNQbGFpbk9iamVjdGAsIGBpc1JlZ0V4cGAsXG4gKiBgaXNTYWZlSW50ZWdlcmAsIGBpc1NldGAsIGBpc1N0cmluZ2AsIGBpc1VuZGVmaW5lZGAsIGBpc1R5cGVkQXJyYXlgLFxuICogYGlzV2Vha01hcGAsIGBpc1dlYWtTZXRgLCBgam9pbmAsIGBrZWJhYkNhc2VgLCBgbGFzdGAsIGBsYXN0SW5kZXhPZmAsXG4gKiBgbG93ZXJDYXNlYCwgYGxvd2VyRmlyc3RgLCBgbHRgLCBgbHRlYCwgYG1heGAsIGBtYXhCeWAsIGBtZWFuYCwgYG1lYW5CeWAsXG4gKiBgbWluYCwgYG1pbkJ5YCwgYG11bHRpcGx5YCwgYG5vQ29uZmxpY3RgLCBgbm9vcGAsIGBub3dgLCBgbnRoYCwgYHBhZGAsXG4gKiBgcGFkRW5kYCwgYHBhZFN0YXJ0YCwgYHBhcnNlSW50YCwgYHBvcGAsIGByYW5kb21gLCBgcmVkdWNlYCwgYHJlZHVjZVJpZ2h0YCxcbiAqIGByZXBlYXRgLCBgcmVzdWx0YCwgYHJvdW5kYCwgYHJ1bkluQ29udGV4dGAsIGBzYW1wbGVgLCBgc2hpZnRgLCBgc2l6ZWAsXG4gKiBgc25ha2VDYXNlYCwgYHNvbWVgLCBgc29ydGVkSW5kZXhgLCBgc29ydGVkSW5kZXhCeWAsIGBzb3J0ZWRMYXN0SW5kZXhgLFxuICogYHNvcnRlZExhc3RJbmRleEJ5YCwgYHN0YXJ0Q2FzZWAsIGBzdGFydHNXaXRoYCwgYHN0dWJBcnJheWAsIGBzdHViRmFsc2VgLFxuICogYHN0dWJPYmplY3RgLCBgc3R1YlN0cmluZ2AsIGBzdHViVHJ1ZWAsIGBzdWJ0cmFjdGAsIGBzdW1gLCBgc3VtQnlgLFxuICogYHRlbXBsYXRlYCwgYHRpbWVzYCwgYHRvRmluaXRlYCwgYHRvSW50ZWdlcmAsIGB0b0pTT05gLCBgdG9MZW5ndGhgLFxuICogYHRvTG93ZXJgLCBgdG9OdW1iZXJgLCBgdG9TYWZlSW50ZWdlcmAsIGB0b1N0cmluZ2AsIGB0b1VwcGVyYCwgYHRyaW1gLFxuICogYHRyaW1FbmRgLCBgdHJpbVN0YXJ0YCwgYHRydW5jYXRlYCwgYHVuZXNjYXBlYCwgYHVuaXF1ZUlkYCwgYHVwcGVyQ2FzZWAsXG4gKiBgdXBwZXJGaXJzdGAsIGB2YWx1ZWAsIGFuZCBgd29yZHNgXG4gKlxuICogQG5hbWUgX1xuICogQGNvbnN0cnVjdG9yXG4gKiBAY2F0ZWdvcnkgU2VxXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwIGluIGEgYGxvZGFzaGAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAqICAgcmV0dXJuIG4gKiBuO1xuICogfVxuICpcbiAqIHZhciB3cmFwcGVkID0gXyhbMSwgMiwgM10pO1xuICpcbiAqIC8vIFJldHVybnMgYW4gdW53cmFwcGVkIHZhbHVlLlxuICogd3JhcHBlZC5yZWR1Y2UoXy5hZGQpO1xuICogLy8gPT4gNlxuICpcbiAqIC8vIFJldHVybnMgYSB3cmFwcGVkIHZhbHVlLlxuICogdmFyIHNxdWFyZXMgPSB3cmFwcGVkLm1hcChzcXVhcmUpO1xuICpcbiAqIF8uaXNBcnJheShzcXVhcmVzKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KHNxdWFyZXMudmFsdWUoKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGxvZGFzaCh2YWx1ZSkge1xuICBpZiAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNBcnJheSh2YWx1ZSkgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIExvZGFzaFdyYXBwZXIpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdfX3dyYXBwZWRfXycpKSB7XG4gICAgICByZXR1cm4gd3JhcHBlckNsb25lKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHZhbHVlKTtcbn1cblxuLy8gRW5zdXJlIHdyYXBwZXJzIGFyZSBpbnN0YW5jZXMgb2YgYGJhc2VMb2Rhc2hgLlxubG9kYXNoLnByb3RvdHlwZSA9IGJhc2VMb2Rhc2gucHJvdG90eXBlO1xubG9kYXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGxvZGFzaDtcblxubW9kdWxlLmV4cG9ydHMgPSBsb2Rhc2g7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBwcm90byA9IHR5cGVvZiBFbGVtZW50ICE9PSAndW5kZWZpbmVkJyA/IEVsZW1lbnQucHJvdG90eXBlIDoge307XG52YXIgdmVuZG9yID0gcHJvdG8ubWF0Y2hlc1xuICB8fCBwcm90by5tYXRjaGVzU2VsZWN0b3JcbiAgfHwgcHJvdG8ud2Via2l0TWF0Y2hlc1NlbGVjdG9yXG4gIHx8IHByb3RvLm1vek1hdGNoZXNTZWxlY3RvclxuICB8fCBwcm90by5tc01hdGNoZXNTZWxlY3RvclxuICB8fCBwcm90by5vTWF0Y2hlc1NlbGVjdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1hdGNoO1xuXG4vKipcbiAqIE1hdGNoIGBlbGAgdG8gYHNlbGVjdG9yYC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3JcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIG1hdGNoKGVsLCBzZWxlY3Rvcikge1xuICBpZiAoIWVsIHx8IGVsLm5vZGVUeXBlICE9PSAxKSByZXR1cm4gZmFsc2U7XG4gIGlmICh2ZW5kb3IpIHJldHVybiB2ZW5kb3IuY2FsbChlbCwgc2VsZWN0b3IpO1xuICB2YXIgbm9kZXMgPSBlbC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG5vZGVzW2ldID09IGVsKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4iLCIvKipcbiAqIG1lZGlhLXR5cGVcbiAqIEBhdXRob3IgTG92ZWxsIEZ1bGxlclxuICpcbiAqIFRoaXMgY29kZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIHRoZSB0ZXJtcyBvZlxuICogd2hpY2ggbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMC5odG1sXG4gKi9cblxudmFyIE1lZGlhVHlwZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnR5cGUgPSBudWxsO1xuICB0aGlzLl9zZXRTdWJ0eXBlQW5kU3VmZml4KG51bGwpO1xuICB0aGlzLnBhcmFtZXRlcnMgPSB7fTtcbn07XG5cbk1lZGlhVHlwZS5wcm90b3R5cGUuaXNWYWxpZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy50eXBlICE9PSBudWxsICYmIHRoaXMuc3VidHlwZSAhPT0gbnVsbCAmJiB0aGlzLnN1YnR5cGUgIT09IFwiZXhhbXBsZVwiO1xufTtcblxuTWVkaWFUeXBlLnByb3RvdHlwZS5fc2V0U3VidHlwZUFuZFN1ZmZpeCA9IGZ1bmN0aW9uKHN1YnR5cGUpIHtcbiAgdGhpcy5zdWJ0eXBlID0gc3VidHlwZTtcbiAgdGhpcy5zdWJ0eXBlRmFjZXRzID0gW107XG4gIHRoaXMuc3VmZml4ID0gbnVsbDtcbiAgaWYgKHN1YnR5cGUpIHtcbiAgICBpZiAoc3VidHlwZS5pbmRleE9mKFwiK1wiKSA+IC0xICYmIHN1YnR5cGUuc3Vic3RyKC0xKSAhPT0gXCIrXCIpIHtcbiAgICAgIHZhciBmaXhlcyA9IHN1YnR5cGUuc3BsaXQoXCIrXCIsIDIpO1xuICAgICAgdGhpcy5zdWJ0eXBlID0gZml4ZXNbMF07XG4gICAgICB0aGlzLnN1YnR5cGVGYWNldHMgPSBmaXhlc1swXS5zcGxpdChcIi5cIik7XG4gICAgICB0aGlzLnN1ZmZpeCA9IGZpeGVzWzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN1YnR5cGVGYWNldHMgPSBzdWJ0eXBlLnNwbGl0KFwiLlwiKTtcbiAgICB9XG4gIH1cbn07XG5cbk1lZGlhVHlwZS5wcm90b3R5cGUuaGFzU3VmZml4ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAhIXRoaXMuc3VmZml4O1xufTtcblxuTWVkaWFUeXBlLnByb3RvdHlwZS5fZmlyc3RTdWJ0eXBlRmFjZXRFcXVhbHMgPSBmdW5jdGlvbihzdHIpIHtcbiAgcmV0dXJuIHRoaXMuc3VidHlwZUZhY2V0cy5sZW5ndGggPiAwICYmIHRoaXMuc3VidHlwZUZhY2V0c1swXSA9PT0gc3RyO1xufTtcblxuTWVkaWFUeXBlLnByb3RvdHlwZS5pc1ZlbmRvciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fZmlyc3RTdWJ0eXBlRmFjZXRFcXVhbHMoXCJ2bmRcIik7XG59O1xuXG5NZWRpYVR5cGUucHJvdG90eXBlLmlzUGVyc29uYWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX2ZpcnN0U3VidHlwZUZhY2V0RXF1YWxzKFwicHJzXCIpO1xufTtcblxuTWVkaWFUeXBlLnByb3RvdHlwZS5pc0V4cGVyaW1lbnRhbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fZmlyc3RTdWJ0eXBlRmFjZXRFcXVhbHMoXCJ4XCIpIHx8IHRoaXMuc3VidHlwZS5zdWJzdHJpbmcoMCwgMikudG9Mb3dlckNhc2UoKSA9PT0gXCJ4LVwiO1xufTtcblxuTWVkaWFUeXBlLnByb3RvdHlwZS5hc1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgc3RyID0gXCJcIjtcbiAgaWYgKHRoaXMuaXNWYWxpZCgpKSB7XG4gICAgc3RyID0gc3RyICsgdGhpcy50eXBlICsgXCIvXCIgKyB0aGlzLnN1YnR5cGU7XG4gICAgaWYgKHRoaXMuaGFzU3VmZml4KCkpIHtcbiAgICAgIHN0ciA9IHN0ciArIFwiK1wiICsgdGhpcy5zdWZmaXg7XG4gICAgfVxuICAgIHZhciBwYXJhbWV0ZXJLZXlzID0gT2JqZWN0LmtleXModGhpcy5wYXJhbWV0ZXJzKTtcbiAgICBpZiAocGFyYW1ldGVyS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgcGFyYW1ldGVycyA9IFtdO1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgcGFyYW1ldGVyS2V5cy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGEubG9jYWxlQ29tcGFyZShiKTtcbiAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICBwYXJhbWV0ZXJzLnB1c2goZWxlbWVudCArIFwiPVwiICsgd3JhcFF1b3Rlcyh0aGF0LnBhcmFtZXRlcnNbZWxlbWVudF0pKTtcbiAgICAgIH0pO1xuICAgICAgc3RyID0gc3RyICsgXCI7XCIgKyBwYXJhbWV0ZXJzLmpvaW4oXCI7XCIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyO1xufTtcblxudmFyIHdyYXBRdW90ZXMgPSBmdW5jdGlvbihzdHIpIHtcbiAgcmV0dXJuIChzdHIuaW5kZXhPZihcIjtcIikgPiAtMSkgPyAnXCInICsgc3RyICsgJ1wiJyA6IHN0cjtcbn07XG5cbnZhciB1bndyYXBRdW90ZXMgPSBmdW5jdGlvbihzdHIpIHtcbiAgcmV0dXJuIChzdHIuc3Vic3RyKDAsIDEpID09PSAnXCInICYmIHN0ci5zdWJzdHIoLTEpID09PSAnXCInKSA/IHN0ci5zdWJzdHIoMSwgc3RyLmxlbmd0aCAtIDIpIDogc3RyO1xufTtcblxudmFyIG1lZGlhVHlwZU1hdGNoZXIgPSAvXihhcHBsaWNhdGlvbnxhdWRpb3xpbWFnZXxtZXNzYWdlfG1vZGVsfG11bHRpcGFydHx0ZXh0fHZpZGVvfFxcKilcXC8oW2EtekEtWjAtOSEjJCVeJlxcKl9cXC1cXCt7fVxcfCcuYH5dezEsMTI3fSkoOy4qKT8kLztcblxudmFyIHBhcmFtZXRlclNwbGl0dGVyID0gLzsoPz0oPzpbXlxcXCJdKlxcXCJbXlxcXCJdKlxcXCIpKig/IVteXFxcIl0qXFxcIikpLztcblxuZXhwb3J0cy5mcm9tU3RyaW5nID0gZnVuY3Rpb24oc3RyKSB7XG4gIHZhciBtZWRpYVR5cGUgPSBuZXcgTWVkaWFUeXBlKCk7XG4gIGlmIChzdHIpIHtcbiAgICB2YXIgbWF0Y2ggPSBzdHIubWF0Y2gobWVkaWFUeXBlTWF0Y2hlcik7XG4gICAgaWYgKG1hdGNoICYmICEobWF0Y2hbMV0gPT09ICcqJyAmJiBtYXRjaFsyXSAhPT0gJyonKSkgeyBcbiAgICAgIG1lZGlhVHlwZS50eXBlID0gbWF0Y2hbMV07XG4gICAgICBtZWRpYVR5cGUuX3NldFN1YnR5cGVBbmRTdWZmaXgobWF0Y2hbMl0pO1xuICAgICAgaWYgKG1hdGNoWzNdKSB7XG4gICAgICAgIG1hdGNoWzNdLnN1YnN0cigxKS5zcGxpdChwYXJhbWV0ZXJTcGxpdHRlcikuZm9yRWFjaChmdW5jdGlvbihwYXJhbWV0ZXIpIHtcbiAgICAgICAgICB2YXIga2V5QW5kVmFsdWUgPSBwYXJhbWV0ZXIuc3BsaXQoJz0nLCAyKTtcbiAgICAgICAgICBpZiAoa2V5QW5kVmFsdWUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBtZWRpYVR5cGUucGFyYW1ldGVyc1trZXlBbmRWYWx1ZVswXS50b0xvd2VyQ2FzZSgpLnRyaW0oKV0gPSB1bndyYXBRdW90ZXMoa2V5QW5kVmFsdWVbMV0udHJpbSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbWVkaWFUeXBlO1xufTtcbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgaXNBcmdzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpO1xuXG52YXIgb3JpZ0tleXMgPSBPYmplY3Qua2V5cztcbnZhciBrZXlzU2hpbSA9IG9yaWdLZXlzID8gZnVuY3Rpb24ga2V5cyhvKSB7IHJldHVybiBvcmlnS2V5cyhvKTsgfSA6IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxudmFyIG9yaWdpbmFsS2V5cyA9IE9iamVjdC5rZXlzO1xuXG5rZXlzU2hpbS5zaGltID0gZnVuY3Rpb24gc2hpbU9iamVjdEtleXMoKSB7XG5cdGlmIChPYmplY3Qua2V5cykge1xuXHRcdHZhciBrZXlzV29ya3NXaXRoQXJndW1lbnRzID0gKGZ1bmN0aW9uICgpIHtcblx0XHRcdC8vIFNhZmFyaSA1LjAgYnVnXG5cdFx0XHR2YXIgYXJncyA9IE9iamVjdC5rZXlzKGFyZ3VtZW50cyk7XG5cdFx0XHRyZXR1cm4gYXJncyAmJiBhcmdzLmxlbmd0aCA9PT0gYXJndW1lbnRzLmxlbmd0aDtcblx0XHR9KDEsIDIpKTtcblx0XHRpZiAoIWtleXNXb3Jrc1dpdGhBcmd1bWVudHMpIHtcblx0XHRcdE9iamVjdC5rZXlzID0gZnVuY3Rpb24ga2V5cyhvYmplY3QpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBmdW5jLW5hbWUtbWF0Y2hpbmdcblx0XHRcdFx0aWYgKGlzQXJncyhvYmplY3QpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9yaWdpbmFsS2V5cyhzbGljZS5jYWxsKG9iamVjdCkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMob2JqZWN0KTtcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdE9iamVjdC5rZXlzID0ga2V5c1NoaW07XG5cdH1cblx0cmV0dXJuIE9iamVjdC5rZXlzIHx8IGtleXNTaGltO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzU2hpbTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0FyZ3VtZW50cyh2YWx1ZSkge1xuXHR2YXIgc3RyID0gdG9TdHIuY2FsbCh2YWx1ZSk7XG5cdHZhciBpc0FyZ3MgPSBzdHIgPT09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXHRpZiAoIWlzQXJncykge1xuXHRcdGlzQXJncyA9IHN0ciAhPT0gJ1tvYmplY3QgQXJyYXldJyAmJlxuXHRcdFx0dmFsdWUgIT09IG51bGwgJiZcblx0XHRcdHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcblx0XHRcdHR5cGVvZiB2YWx1ZS5sZW5ndGggPT09ICdudW1iZXInICYmXG5cdFx0XHR2YWx1ZS5sZW5ndGggPj0gMCAmJlxuXHRcdFx0dG9TdHIuY2FsbCh2YWx1ZS5jYWxsZWUpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHR9XG5cdHJldHVybiBpc0FyZ3M7XG59O1xuIiwidmFyIHRyaW0gPSByZXF1aXJlKCdzdHJpbmcucHJvdG90eXBlLnRyaW0nKVxuICAsIGZvckVhY2ggPSByZXF1aXJlKCdmb3ItZWFjaCcpXG4gICwgaXNBcnJheSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGVhZGVycykge1xuICBpZiAoIWhlYWRlcnMpXG4gICAgcmV0dXJuIHt9XG5cbiAgdmFyIHJlc3VsdCA9IHt9XG5cbiAgZm9yRWFjaChcbiAgICAgIHRyaW0oaGVhZGVycykuc3BsaXQoJ1xcbicpXG4gICAgLCBmdW5jdGlvbiAocm93KSB7XG4gICAgICAgIHZhciBpbmRleCA9IHJvdy5pbmRleE9mKCc6JylcbiAgICAgICAgICAsIGtleSA9IHRyaW0ocm93LnNsaWNlKDAsIGluZGV4KSkudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICwgdmFsdWUgPSB0cmltKHJvdy5zbGljZShpbmRleCArIDEpKVxuXG4gICAgICAgIGlmICh0eXBlb2YocmVzdWx0W2tleV0pID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWVcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KHJlc3VsdFtrZXldKSkge1xuICAgICAgICAgIHJlc3VsdFtrZXldLnB1c2godmFsdWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBbIHJlc3VsdFtrZXldLCB2YWx1ZSBdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgKVxuXG4gIHJldHVybiByZXN1bHRcbn1cbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLyoqIVxuICogQGZpbGVPdmVydmlldyBLaWNrYXNzIGxpYnJhcnkgdG8gY3JlYXRlIGFuZCBwbGFjZSBwb3BwZXJzIG5lYXIgdGhlaXIgcmVmZXJlbmNlIGVsZW1lbnRzLlxuICogQHZlcnNpb24gMS4xNS4wXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE2IEZlZGVyaWNvIFppdm9sbyBhbmQgY29udHJpYnV0b3JzXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xudmFyIGlzQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbnZhciBsb25nZXJUaW1lb3V0QnJvd3NlcnMgPSBbJ0VkZ2UnLCAnVHJpZGVudCcsICdGaXJlZm94J107XG52YXIgdGltZW91dER1cmF0aW9uID0gMDtcbmZvciAodmFyIGkgPSAwOyBpIDwgbG9uZ2VyVGltZW91dEJyb3dzZXJzLmxlbmd0aDsgaSArPSAxKSB7XG4gIGlmIChpc0Jyb3dzZXIgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKGxvbmdlclRpbWVvdXRCcm93c2Vyc1tpXSkgPj0gMCkge1xuICAgIHRpbWVvdXREdXJhdGlvbiA9IDE7XG4gICAgYnJlYWs7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWljcm90YXNrRGVib3VuY2UoZm4pIHtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmIChjYWxsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2FsbGVkID0gdHJ1ZTtcbiAgICB3aW5kb3cuUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsZWQgPSBmYWxzZTtcbiAgICAgIGZuKCk7XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRhc2tEZWJvdW5jZShmbikge1xuICB2YXIgc2NoZWR1bGVkID0gZmFsc2U7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFzY2hlZHVsZWQpIHtcbiAgICAgIHNjaGVkdWxlZCA9IHRydWU7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2NoZWR1bGVkID0gZmFsc2U7XG4gICAgICAgIGZuKCk7XG4gICAgICB9LCB0aW1lb3V0RHVyYXRpb24pO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIHN1cHBvcnRzTWljcm9UYXNrcyA9IGlzQnJvd3NlciAmJiB3aW5kb3cuUHJvbWlzZTtcblxuLyoqXG4qIENyZWF0ZSBhIGRlYm91bmNlZCB2ZXJzaW9uIG9mIGEgbWV0aG9kLCB0aGF0J3MgYXN5bmNocm9ub3VzbHkgZGVmZXJyZWRcbiogYnV0IGNhbGxlZCBpbiB0aGUgbWluaW11bSB0aW1lIHBvc3NpYmxlLlxuKlxuKiBAbWV0aG9kXG4qIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiogQGFyZ3VtZW50IHtGdW5jdGlvbn0gZm5cbiogQHJldHVybnMge0Z1bmN0aW9ufVxuKi9cbnZhciBkZWJvdW5jZSA9IHN1cHBvcnRzTWljcm9UYXNrcyA/IG1pY3JvdGFza0RlYm91bmNlIDogdGFza0RlYm91bmNlO1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBnaXZlbiB2YXJpYWJsZSBpcyBhIGZ1bmN0aW9uXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0FueX0gZnVuY3Rpb25Ub0NoZWNrIC0gdmFyaWFibGUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtCb29sZWFufSBhbnN3ZXIgdG86IGlzIGEgZnVuY3Rpb24/XG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oZnVuY3Rpb25Ub0NoZWNrKSB7XG4gIHZhciBnZXRUeXBlID0ge307XG4gIHJldHVybiBmdW5jdGlvblRvQ2hlY2sgJiYgZ2V0VHlwZS50b1N0cmluZy5jYWxsKGZ1bmN0aW9uVG9DaGVjaykgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5cbi8qKlxuICogR2V0IENTUyBjb21wdXRlZCBwcm9wZXJ0eSBvZiB0aGUgZ2l2ZW4gZWxlbWVudFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFZW1lbnR9IGVsZW1lbnRcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBwcm9wZXJ0eVxuICovXG5mdW5jdGlvbiBnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkoZWxlbWVudCwgcHJvcGVydHkpIHtcbiAgaWYgKGVsZW1lbnQubm9kZVR5cGUgIT09IDEpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgLy8gTk9URTogMSBET00gYWNjZXNzIGhlcmVcbiAgdmFyIHdpbmRvdyA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcbiAgdmFyIGNzcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIG51bGwpO1xuICByZXR1cm4gcHJvcGVydHkgPyBjc3NbcHJvcGVydHldIDogY3NzO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBhcmVudE5vZGUgb3IgdGhlIGhvc3Qgb2YgdGhlIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0VsZW1lbnR9IHBhcmVudFxuICovXG5mdW5jdGlvbiBnZXRQYXJlbnROb2RlKGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQubm9kZU5hbWUgPT09ICdIVE1MJykge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG4gIHJldHVybiBlbGVtZW50LnBhcmVudE5vZGUgfHwgZWxlbWVudC5ob3N0O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHNjcm9sbGluZyBwYXJlbnQgb2YgdGhlIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0VsZW1lbnR9IHNjcm9sbCBwYXJlbnRcbiAqL1xuZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KGVsZW1lbnQpIHtcbiAgLy8gUmV0dXJuIGJvZHksIGBnZXRTY3JvbGxgIHdpbGwgdGFrZSBjYXJlIHRvIGdldCB0aGUgY29ycmVjdCBgc2Nyb2xsVG9wYCBmcm9tIGl0XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiBkb2N1bWVudC5ib2R5O1xuICB9XG5cbiAgc3dpdGNoIChlbGVtZW50Lm5vZGVOYW1lKSB7XG4gICAgY2FzZSAnSFRNTCc6XG4gICAgY2FzZSAnQk9EWSc6XG4gICAgICByZXR1cm4gZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHk7XG4gICAgY2FzZSAnI2RvY3VtZW50JzpcbiAgICAgIHJldHVybiBlbGVtZW50LmJvZHk7XG4gIH1cblxuICAvLyBGaXJlZm94IHdhbnQgdXMgdG8gY2hlY2sgYC14YCBhbmQgYC15YCB2YXJpYXRpb25zIGFzIHdlbGxcblxuICB2YXIgX2dldFN0eWxlQ29tcHV0ZWRQcm9wID0gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGVsZW1lbnQpLFxuICAgICAgb3ZlcmZsb3cgPSBfZ2V0U3R5bGVDb21wdXRlZFByb3Aub3ZlcmZsb3csXG4gICAgICBvdmVyZmxvd1ggPSBfZ2V0U3R5bGVDb21wdXRlZFByb3Aub3ZlcmZsb3dYLFxuICAgICAgb3ZlcmZsb3dZID0gX2dldFN0eWxlQ29tcHV0ZWRQcm9wLm92ZXJmbG93WTtcblxuICBpZiAoLyhhdXRvfHNjcm9sbHxvdmVybGF5KS8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCkpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiBnZXRTY3JvbGxQYXJlbnQoZ2V0UGFyZW50Tm9kZShlbGVtZW50KSk7XG59XG5cbnZhciBpc0lFMTEgPSBpc0Jyb3dzZXIgJiYgISEod2luZG93Lk1TSW5wdXRNZXRob2RDb250ZXh0ICYmIGRvY3VtZW50LmRvY3VtZW50TW9kZSk7XG52YXIgaXNJRTEwID0gaXNCcm93c2VyICYmIC9NU0lFIDEwLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGJyb3dzZXIgaXMgSW50ZXJuZXQgRXhwbG9yZXJcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7TnVtYmVyfSB2ZXJzaW9uIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gaXNJRVxuICovXG5mdW5jdGlvbiBpc0lFKHZlcnNpb24pIHtcbiAgaWYgKHZlcnNpb24gPT09IDExKSB7XG4gICAgcmV0dXJuIGlzSUUxMTtcbiAgfVxuICBpZiAodmVyc2lvbiA9PT0gMTApIHtcbiAgICByZXR1cm4gaXNJRTEwO1xuICB9XG4gIHJldHVybiBpc0lFMTEgfHwgaXNJRTEwO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG9mZnNldCBwYXJlbnQgb2YgdGhlIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0VsZW1lbnR9IG9mZnNldCBwYXJlbnRcbiAqL1xuZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfVxuXG4gIHZhciBub09mZnNldFBhcmVudCA9IGlzSUUoMTApID8gZG9jdW1lbnQuYm9keSA6IG51bGw7XG5cbiAgLy8gTk9URTogMSBET00gYWNjZXNzIGhlcmVcbiAgdmFyIG9mZnNldFBhcmVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50IHx8IG51bGw7XG4gIC8vIFNraXAgaGlkZGVuIGVsZW1lbnRzIHdoaWNoIGRvbid0IGhhdmUgYW4gb2Zmc2V0UGFyZW50XG4gIHdoaWxlIChvZmZzZXRQYXJlbnQgPT09IG5vT2Zmc2V0UGFyZW50ICYmIGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKSB7XG4gICAgb2Zmc2V0UGFyZW50ID0gKGVsZW1lbnQgPSBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZykub2Zmc2V0UGFyZW50O1xuICB9XG5cbiAgdmFyIG5vZGVOYW1lID0gb2Zmc2V0UGFyZW50ICYmIG9mZnNldFBhcmVudC5ub2RlTmFtZTtcblxuICBpZiAoIW5vZGVOYW1lIHx8IG5vZGVOYW1lID09PSAnQk9EWScgfHwgbm9kZU5hbWUgPT09ICdIVE1MJykge1xuICAgIHJldHVybiBlbGVtZW50ID8gZWxlbWVudC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfVxuXG4gIC8vIC5vZmZzZXRQYXJlbnQgd2lsbCByZXR1cm4gdGhlIGNsb3Nlc3QgVEgsIFREIG9yIFRBQkxFIGluIGNhc2VcbiAgLy8gbm8gb2Zmc2V0UGFyZW50IGlzIHByZXNlbnQsIEkgaGF0ZSB0aGlzIGpvYi4uLlxuICBpZiAoWydUSCcsICdURCcsICdUQUJMRSddLmluZGV4T2Yob2Zmc2V0UGFyZW50Lm5vZGVOYW1lKSAhPT0gLTEgJiYgZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KG9mZnNldFBhcmVudCwgJ3Bvc2l0aW9uJykgPT09ICdzdGF0aWMnKSB7XG4gICAgcmV0dXJuIGdldE9mZnNldFBhcmVudChvZmZzZXRQYXJlbnQpO1xuICB9XG5cbiAgcmV0dXJuIG9mZnNldFBhcmVudDtcbn1cblxuZnVuY3Rpb24gaXNPZmZzZXRDb250YWluZXIoZWxlbWVudCkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lO1xuXG4gIGlmIChub2RlTmFtZSA9PT0gJ0JPRFknKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBub2RlTmFtZSA9PT0gJ0hUTUwnIHx8IGdldE9mZnNldFBhcmVudChlbGVtZW50LmZpcnN0RWxlbWVudENoaWxkKSA9PT0gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgcm9vdCBub2RlIChkb2N1bWVudCwgc2hhZG93RE9NIHJvb3QpIG9mIHRoZSBnaXZlbiBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IG5vZGVcbiAqIEByZXR1cm5zIHtFbGVtZW50fSByb290IG5vZGVcbiAqL1xuZnVuY3Rpb24gZ2V0Um9vdChub2RlKSB7XG4gIGlmIChub2RlLnBhcmVudE5vZGUgIT09IG51bGwpIHtcbiAgICByZXR1cm4gZ2V0Um9vdChub2RlLnBhcmVudE5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIG9mZnNldCBwYXJlbnQgY29tbW9uIHRvIHRoZSB0d28gcHJvdmlkZWQgbm9kZXNcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudDFcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudDJcbiAqIEByZXR1cm5zIHtFbGVtZW50fSBjb21tb24gb2Zmc2V0IHBhcmVudFxuICovXG5mdW5jdGlvbiBmaW5kQ29tbW9uT2Zmc2V0UGFyZW50KGVsZW1lbnQxLCBlbGVtZW50Mikge1xuICAvLyBUaGlzIGNoZWNrIGlzIG5lZWRlZCB0byBhdm9pZCBlcnJvcnMgaW4gY2FzZSBvbmUgb2YgdGhlIGVsZW1lbnRzIGlzbid0IGRlZmluZWQgZm9yIGFueSByZWFzb25cbiAgaWYgKCFlbGVtZW50MSB8fCAhZWxlbWVudDEubm9kZVR5cGUgfHwgIWVsZW1lbnQyIHx8ICFlbGVtZW50Mi5ub2RlVHlwZSkge1xuICAgIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIH1cblxuICAvLyBIZXJlIHdlIG1ha2Ugc3VyZSB0byBnaXZlIGFzIFwic3RhcnRcIiB0aGUgZWxlbWVudCB0aGF0IGNvbWVzIGZpcnN0IGluIHRoZSBET01cbiAgdmFyIG9yZGVyID0gZWxlbWVudDEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZWxlbWVudDIpICYgTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkc7XG4gIHZhciBzdGFydCA9IG9yZGVyID8gZWxlbWVudDEgOiBlbGVtZW50MjtcbiAgdmFyIGVuZCA9IG9yZGVyID8gZWxlbWVudDIgOiBlbGVtZW50MTtcblxuICAvLyBHZXQgY29tbW9uIGFuY2VzdG9yIGNvbnRhaW5lclxuICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICByYW5nZS5zZXRTdGFydChzdGFydCwgMCk7XG4gIHJhbmdlLnNldEVuZChlbmQsIDApO1xuICB2YXIgY29tbW9uQW5jZXN0b3JDb250YWluZXIgPSByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtcblxuICAvLyBCb3RoIG5vZGVzIGFyZSBpbnNpZGUgI2RvY3VtZW50XG5cbiAgaWYgKGVsZW1lbnQxICE9PSBjb21tb25BbmNlc3RvckNvbnRhaW5lciAmJiBlbGVtZW50MiAhPT0gY29tbW9uQW5jZXN0b3JDb250YWluZXIgfHwgc3RhcnQuY29udGFpbnMoZW5kKSkge1xuICAgIGlmIChpc09mZnNldENvbnRhaW5lcihjb21tb25BbmNlc3RvckNvbnRhaW5lcikpIHtcbiAgICAgIHJldHVybiBjb21tb25BbmNlc3RvckNvbnRhaW5lcjtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0T2Zmc2V0UGFyZW50KGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKTtcbiAgfVxuXG4gIC8vIG9uZSBvZiB0aGUgbm9kZXMgaXMgaW5zaWRlIHNoYWRvd0RPTSwgZmluZCB3aGljaCBvbmVcbiAgdmFyIGVsZW1lbnQxcm9vdCA9IGdldFJvb3QoZWxlbWVudDEpO1xuICBpZiAoZWxlbWVudDFyb290Lmhvc3QpIHtcbiAgICByZXR1cm4gZmluZENvbW1vbk9mZnNldFBhcmVudChlbGVtZW50MXJvb3QuaG9zdCwgZWxlbWVudDIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmaW5kQ29tbW9uT2Zmc2V0UGFyZW50KGVsZW1lbnQxLCBnZXRSb290KGVsZW1lbnQyKS5ob3N0KTtcbiAgfVxufVxuXG4vKipcbiAqIEdldHMgdGhlIHNjcm9sbCB2YWx1ZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudCBpbiB0aGUgZ2l2ZW4gc2lkZSAodG9wIGFuZCBsZWZ0KVxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50XG4gKiBAYXJndW1lbnQge1N0cmluZ30gc2lkZSBgdG9wYCBvciBgbGVmdGBcbiAqIEByZXR1cm5zIHtudW1iZXJ9IGFtb3VudCBvZiBzY3JvbGxlZCBwaXhlbHNcbiAqL1xuZnVuY3Rpb24gZ2V0U2Nyb2xsKGVsZW1lbnQpIHtcbiAgdmFyIHNpZGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICd0b3AnO1xuXG4gIHZhciB1cHBlclNpZGUgPSBzaWRlID09PSAndG9wJyA/ICdzY3JvbGxUb3AnIDogJ3Njcm9sbExlZnQnO1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lO1xuXG4gIGlmIChub2RlTmFtZSA9PT0gJ0JPRFknIHx8IG5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICB2YXIgaHRtbCA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgdmFyIHNjcm9sbGluZ0VsZW1lbnQgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCB8fCBodG1sO1xuICAgIHJldHVybiBzY3JvbGxpbmdFbGVtZW50W3VwcGVyU2lkZV07XG4gIH1cblxuICByZXR1cm4gZWxlbWVudFt1cHBlclNpZGVdO1xufVxuXG4vKlxuICogU3VtIG9yIHN1YnRyYWN0IHRoZSBlbGVtZW50IHNjcm9sbCB2YWx1ZXMgKGxlZnQgYW5kIHRvcCkgZnJvbSBhIGdpdmVuIHJlY3Qgb2JqZWN0XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge09iamVjdH0gcmVjdCAtIFJlY3Qgb2JqZWN0IHlvdSB3YW50IHRvIGNoYW5nZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIFRoZSBlbGVtZW50IGZyb20gdGhlIGZ1bmN0aW9uIHJlYWRzIHRoZSBzY3JvbGwgdmFsdWVzXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHN1YnRyYWN0IC0gc2V0IHRvIHRydWUgaWYgeW91IHdhbnQgdG8gc3VidHJhY3QgdGhlIHNjcm9sbCB2YWx1ZXNcbiAqIEByZXR1cm4ge09iamVjdH0gcmVjdCAtIFRoZSBtb2RpZmllciByZWN0IG9iamVjdFxuICovXG5mdW5jdGlvbiBpbmNsdWRlU2Nyb2xsKHJlY3QsIGVsZW1lbnQpIHtcbiAgdmFyIHN1YnRyYWN0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcblxuICB2YXIgc2Nyb2xsVG9wID0gZ2V0U2Nyb2xsKGVsZW1lbnQsICd0b3AnKTtcbiAgdmFyIHNjcm9sbExlZnQgPSBnZXRTY3JvbGwoZWxlbWVudCwgJ2xlZnQnKTtcbiAgdmFyIG1vZGlmaWVyID0gc3VidHJhY3QgPyAtMSA6IDE7XG4gIHJlY3QudG9wICs9IHNjcm9sbFRvcCAqIG1vZGlmaWVyO1xuICByZWN0LmJvdHRvbSArPSBzY3JvbGxUb3AgKiBtb2RpZmllcjtcbiAgcmVjdC5sZWZ0ICs9IHNjcm9sbExlZnQgKiBtb2RpZmllcjtcbiAgcmVjdC5yaWdodCArPSBzY3JvbGxMZWZ0ICogbW9kaWZpZXI7XG4gIHJldHVybiByZWN0O1xufVxuXG4vKlxuICogSGVscGVyIHRvIGRldGVjdCBib3JkZXJzIG9mIGEgZ2l2ZW4gZWxlbWVudFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHtDU1NTdHlsZURlY2xhcmF0aW9ufSBzdHlsZXNcbiAqIFJlc3VsdCBvZiBgZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5YCBvbiB0aGUgZ2l2ZW4gZWxlbWVudFxuICogQHBhcmFtIHtTdHJpbmd9IGF4aXMgLSBgeGAgb3IgYHlgXG4gKiBAcmV0dXJuIHtudW1iZXJ9IGJvcmRlcnMgLSBUaGUgYm9yZGVycyBzaXplIG9mIHRoZSBnaXZlbiBheGlzXG4gKi9cblxuZnVuY3Rpb24gZ2V0Qm9yZGVyc1NpemUoc3R5bGVzLCBheGlzKSB7XG4gIHZhciBzaWRlQSA9IGF4aXMgPT09ICd4JyA/ICdMZWZ0JyA6ICdUb3AnO1xuICB2YXIgc2lkZUIgPSBzaWRlQSA9PT0gJ0xlZnQnID8gJ1JpZ2h0JyA6ICdCb3R0b20nO1xuXG4gIHJldHVybiBwYXJzZUZsb2F0KHN0eWxlc1snYm9yZGVyJyArIHNpZGVBICsgJ1dpZHRoJ10sIDEwKSArIHBhcnNlRmxvYXQoc3R5bGVzWydib3JkZXInICsgc2lkZUIgKyAnV2lkdGgnXSwgMTApO1xufVxuXG5mdW5jdGlvbiBnZXRTaXplKGF4aXMsIGJvZHksIGh0bWwsIGNvbXB1dGVkU3R5bGUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KGJvZHlbJ29mZnNldCcgKyBheGlzXSwgYm9keVsnc2Nyb2xsJyArIGF4aXNdLCBodG1sWydjbGllbnQnICsgYXhpc10sIGh0bWxbJ29mZnNldCcgKyBheGlzXSwgaHRtbFsnc2Nyb2xsJyArIGF4aXNdLCBpc0lFKDEwKSA/IHBhcnNlSW50KGh0bWxbJ29mZnNldCcgKyBheGlzXSkgKyBwYXJzZUludChjb21wdXRlZFN0eWxlWydtYXJnaW4nICsgKGF4aXMgPT09ICdIZWlnaHQnID8gJ1RvcCcgOiAnTGVmdCcpXSkgKyBwYXJzZUludChjb21wdXRlZFN0eWxlWydtYXJnaW4nICsgKGF4aXMgPT09ICdIZWlnaHQnID8gJ0JvdHRvbScgOiAnUmlnaHQnKV0pIDogMCk7XG59XG5cbmZ1bmN0aW9uIGdldFdpbmRvd1NpemVzKGRvY3VtZW50KSB7XG4gIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgdmFyIGh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIHZhciBjb21wdXRlZFN0eWxlID0gaXNJRSgxMCkgJiYgZ2V0Q29tcHV0ZWRTdHlsZShodG1sKTtcblxuICByZXR1cm4ge1xuICAgIGhlaWdodDogZ2V0U2l6ZSgnSGVpZ2h0JywgYm9keSwgaHRtbCwgY29tcHV0ZWRTdHlsZSksXG4gICAgd2lkdGg6IGdldFNpemUoJ1dpZHRoJywgYm9keSwgaHRtbCwgY29tcHV0ZWRTdHlsZSlcbiAgfTtcbn1cblxudmFyIGNsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn07XG5cbnZhciBjcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfTtcbn0oKTtcblxuXG5cblxuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59O1xuXG4vKipcbiAqIEdpdmVuIGVsZW1lbnQgb2Zmc2V0cywgZ2VuZXJhdGUgYW4gb3V0cHV0IHNpbWlsYXIgdG8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge09iamVjdH0gb2Zmc2V0c1xuICogQHJldHVybnMge09iamVjdH0gQ2xpZW50UmVjdCBsaWtlIG91dHB1dFxuICovXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0KG9mZnNldHMpIHtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvZmZzZXRzLCB7XG4gICAgcmlnaHQ6IG9mZnNldHMubGVmdCArIG9mZnNldHMud2lkdGgsXG4gICAgYm90dG9tOiBvZmZzZXRzLnRvcCArIG9mZnNldHMuaGVpZ2h0XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBib3VuZGluZyBjbGllbnQgcmVjdCBvZiBnaXZlbiBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHtPYmplY3R9IGNsaWVudCByZWN0XG4gKi9cbmZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50KSB7XG4gIHZhciByZWN0ID0ge307XG5cbiAgLy8gSUUxMCAxMCBGSVg6IFBsZWFzZSwgZG9uJ3QgYXNrLCB0aGUgZWxlbWVudCBpc24ndFxuICAvLyBjb25zaWRlcmVkIGluIERPTSBpbiBzb21lIGNpcmN1bXN0YW5jZXMuLi5cbiAgLy8gVGhpcyBpc24ndCByZXByb2R1Y2libGUgaW4gSUUxMCBjb21wYXRpYmlsaXR5IG1vZGUgb2YgSUUxMVxuICB0cnkge1xuICAgIGlmIChpc0lFKDEwKSkge1xuICAgICAgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB2YXIgc2Nyb2xsVG9wID0gZ2V0U2Nyb2xsKGVsZW1lbnQsICd0b3AnKTtcbiAgICAgIHZhciBzY3JvbGxMZWZ0ID0gZ2V0U2Nyb2xsKGVsZW1lbnQsICdsZWZ0Jyk7XG4gICAgICByZWN0LnRvcCArPSBzY3JvbGxUb3A7XG4gICAgICByZWN0LmxlZnQgKz0gc2Nyb2xsTGVmdDtcbiAgICAgIHJlY3QuYm90dG9tICs9IHNjcm9sbFRvcDtcbiAgICAgIHJlY3QucmlnaHQgKz0gc2Nyb2xsTGVmdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSB7XG4gICAgbGVmdDogcmVjdC5sZWZ0LFxuICAgIHRvcDogcmVjdC50b3AsXG4gICAgd2lkdGg6IHJlY3QucmlnaHQgLSByZWN0LmxlZnQsXG4gICAgaGVpZ2h0OiByZWN0LmJvdHRvbSAtIHJlY3QudG9wXG4gIH07XG5cbiAgLy8gc3VidHJhY3Qgc2Nyb2xsYmFyIHNpemUgZnJvbSBzaXplc1xuICB2YXIgc2l6ZXMgPSBlbGVtZW50Lm5vZGVOYW1lID09PSAnSFRNTCcgPyBnZXRXaW5kb3dTaXplcyhlbGVtZW50Lm93bmVyRG9jdW1lbnQpIDoge307XG4gIHZhciB3aWR0aCA9IHNpemVzLndpZHRoIHx8IGVsZW1lbnQuY2xpZW50V2lkdGggfHwgcmVzdWx0LnJpZ2h0IC0gcmVzdWx0LmxlZnQ7XG4gIHZhciBoZWlnaHQgPSBzaXplcy5oZWlnaHQgfHwgZWxlbWVudC5jbGllbnRIZWlnaHQgfHwgcmVzdWx0LmJvdHRvbSAtIHJlc3VsdC50b3A7XG5cbiAgdmFyIGhvcml6U2Nyb2xsYmFyID0gZWxlbWVudC5vZmZzZXRXaWR0aCAtIHdpZHRoO1xuICB2YXIgdmVydFNjcm9sbGJhciA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gaGVpZ2h0O1xuXG4gIC8vIGlmIGFuIGh5cG90aGV0aWNhbCBzY3JvbGxiYXIgaXMgZGV0ZWN0ZWQsIHdlIG11c3QgYmUgc3VyZSBpdCdzIG5vdCBhIGBib3JkZXJgXG4gIC8vIHdlIG1ha2UgdGhpcyBjaGVjayBjb25kaXRpb25hbCBmb3IgcGVyZm9ybWFuY2UgcmVhc29uc1xuICBpZiAoaG9yaXpTY3JvbGxiYXIgfHwgdmVydFNjcm9sbGJhcikge1xuICAgIHZhciBzdHlsZXMgPSBnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkoZWxlbWVudCk7XG4gICAgaG9yaXpTY3JvbGxiYXIgLT0gZ2V0Qm9yZGVyc1NpemUoc3R5bGVzLCAneCcpO1xuICAgIHZlcnRTY3JvbGxiYXIgLT0gZ2V0Qm9yZGVyc1NpemUoc3R5bGVzLCAneScpO1xuXG4gICAgcmVzdWx0LndpZHRoIC09IGhvcml6U2Nyb2xsYmFyO1xuICAgIHJlc3VsdC5oZWlnaHQgLT0gdmVydFNjcm9sbGJhcjtcbiAgfVxuXG4gIHJldHVybiBnZXRDbGllbnRSZWN0KHJlc3VsdCk7XG59XG5cbmZ1bmN0aW9uIGdldE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJiaXRyYXJ5Tm9kZShjaGlsZHJlbiwgcGFyZW50KSB7XG4gIHZhciBmaXhlZFBvc2l0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcblxuICB2YXIgaXNJRTEwID0gaXNJRSgxMCk7XG4gIHZhciBpc0hUTUwgPSBwYXJlbnQubm9kZU5hbWUgPT09ICdIVE1MJztcbiAgdmFyIGNoaWxkcmVuUmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChjaGlsZHJlbik7XG4gIHZhciBwYXJlbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHBhcmVudCk7XG4gIHZhciBzY3JvbGxQYXJlbnQgPSBnZXRTY3JvbGxQYXJlbnQoY2hpbGRyZW4pO1xuXG4gIHZhciBzdHlsZXMgPSBnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkocGFyZW50KTtcbiAgdmFyIGJvcmRlclRvcFdpZHRoID0gcGFyc2VGbG9hdChzdHlsZXMuYm9yZGVyVG9wV2lkdGgsIDEwKTtcbiAgdmFyIGJvcmRlckxlZnRXaWR0aCA9IHBhcnNlRmxvYXQoc3R5bGVzLmJvcmRlckxlZnRXaWR0aCwgMTApO1xuXG4gIC8vIEluIGNhc2VzIHdoZXJlIHRoZSBwYXJlbnQgaXMgZml4ZWQsIHdlIG11c3QgaWdub3JlIG5lZ2F0aXZlIHNjcm9sbCBpbiBvZmZzZXQgY2FsY1xuICBpZiAoZml4ZWRQb3NpdGlvbiAmJiBpc0hUTUwpIHtcbiAgICBwYXJlbnRSZWN0LnRvcCA9IE1hdGgubWF4KHBhcmVudFJlY3QudG9wLCAwKTtcbiAgICBwYXJlbnRSZWN0LmxlZnQgPSBNYXRoLm1heChwYXJlbnRSZWN0LmxlZnQsIDApO1xuICB9XG4gIHZhciBvZmZzZXRzID0gZ2V0Q2xpZW50UmVjdCh7XG4gICAgdG9wOiBjaGlsZHJlblJlY3QudG9wIC0gcGFyZW50UmVjdC50b3AgLSBib3JkZXJUb3BXaWR0aCxcbiAgICBsZWZ0OiBjaGlsZHJlblJlY3QubGVmdCAtIHBhcmVudFJlY3QubGVmdCAtIGJvcmRlckxlZnRXaWR0aCxcbiAgICB3aWR0aDogY2hpbGRyZW5SZWN0LndpZHRoLFxuICAgIGhlaWdodDogY2hpbGRyZW5SZWN0LmhlaWdodFxuICB9KTtcbiAgb2Zmc2V0cy5tYXJnaW5Ub3AgPSAwO1xuICBvZmZzZXRzLm1hcmdpbkxlZnQgPSAwO1xuXG4gIC8vIFN1YnRyYWN0IG1hcmdpbnMgb2YgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgaXQncyBiZWluZyB1c2VkIGFzIHBhcmVudFxuICAvLyB3ZSBkbyB0aGlzIG9ubHkgb24gSFRNTCBiZWNhdXNlIGl0J3MgdGhlIG9ubHkgZWxlbWVudCB0aGF0IGJlaGF2ZXNcbiAgLy8gZGlmZmVyZW50bHkgd2hlbiBtYXJnaW5zIGFyZSBhcHBsaWVkIHRvIGl0LiBUaGUgbWFyZ2lucyBhcmUgaW5jbHVkZWQgaW5cbiAgLy8gdGhlIGJveCBvZiB0aGUgZG9jdW1lbnRFbGVtZW50LCBpbiB0aGUgb3RoZXIgY2FzZXMgbm90LlxuICBpZiAoIWlzSUUxMCAmJiBpc0hUTUwpIHtcbiAgICB2YXIgbWFyZ2luVG9wID0gcGFyc2VGbG9hdChzdHlsZXMubWFyZ2luVG9wLCAxMCk7XG4gICAgdmFyIG1hcmdpbkxlZnQgPSBwYXJzZUZsb2F0KHN0eWxlcy5tYXJnaW5MZWZ0LCAxMCk7XG5cbiAgICBvZmZzZXRzLnRvcCAtPSBib3JkZXJUb3BXaWR0aCAtIG1hcmdpblRvcDtcbiAgICBvZmZzZXRzLmJvdHRvbSAtPSBib3JkZXJUb3BXaWR0aCAtIG1hcmdpblRvcDtcbiAgICBvZmZzZXRzLmxlZnQgLT0gYm9yZGVyTGVmdFdpZHRoIC0gbWFyZ2luTGVmdDtcbiAgICBvZmZzZXRzLnJpZ2h0IC09IGJvcmRlckxlZnRXaWR0aCAtIG1hcmdpbkxlZnQ7XG5cbiAgICAvLyBBdHRhY2ggbWFyZ2luVG9wIGFuZCBtYXJnaW5MZWZ0IGJlY2F1c2UgaW4gc29tZSBjaXJjdW1zdGFuY2VzIHdlIG1heSBuZWVkIHRoZW1cbiAgICBvZmZzZXRzLm1hcmdpblRvcCA9IG1hcmdpblRvcDtcbiAgICBvZmZzZXRzLm1hcmdpbkxlZnQgPSBtYXJnaW5MZWZ0O1xuICB9XG5cbiAgaWYgKGlzSUUxMCAmJiAhZml4ZWRQb3NpdGlvbiA/IHBhcmVudC5jb250YWlucyhzY3JvbGxQYXJlbnQpIDogcGFyZW50ID09PSBzY3JvbGxQYXJlbnQgJiYgc2Nyb2xsUGFyZW50Lm5vZGVOYW1lICE9PSAnQk9EWScpIHtcbiAgICBvZmZzZXRzID0gaW5jbHVkZVNjcm9sbChvZmZzZXRzLCBwYXJlbnQpO1xuICB9XG5cbiAgcmV0dXJuIG9mZnNldHM7XG59XG5cbmZ1bmN0aW9uIGdldFZpZXdwb3J0T2Zmc2V0UmVjdFJlbGF0aXZlVG9BcnRiaXRyYXJ5Tm9kZShlbGVtZW50KSB7XG4gIHZhciBleGNsdWRlU2Nyb2xsID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcblxuICB2YXIgaHRtbCA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIHZhciByZWxhdGl2ZU9mZnNldCA9IGdldE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJiaXRyYXJ5Tm9kZShlbGVtZW50LCBodG1sKTtcbiAgdmFyIHdpZHRoID0gTWF0aC5tYXgoaHRtbC5jbGllbnRXaWR0aCwgd2luZG93LmlubmVyV2lkdGggfHwgMCk7XG4gIHZhciBoZWlnaHQgPSBNYXRoLm1heChodG1sLmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IDApO1xuXG4gIHZhciBzY3JvbGxUb3AgPSAhZXhjbHVkZVNjcm9sbCA/IGdldFNjcm9sbChodG1sKSA6IDA7XG4gIHZhciBzY3JvbGxMZWZ0ID0gIWV4Y2x1ZGVTY3JvbGwgPyBnZXRTY3JvbGwoaHRtbCwgJ2xlZnQnKSA6IDA7XG5cbiAgdmFyIG9mZnNldCA9IHtcbiAgICB0b3A6IHNjcm9sbFRvcCAtIHJlbGF0aXZlT2Zmc2V0LnRvcCArIHJlbGF0aXZlT2Zmc2V0Lm1hcmdpblRvcCxcbiAgICBsZWZ0OiBzY3JvbGxMZWZ0IC0gcmVsYXRpdmVPZmZzZXQubGVmdCArIHJlbGF0aXZlT2Zmc2V0Lm1hcmdpbkxlZnQsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG5cbiAgcmV0dXJuIGdldENsaWVudFJlY3Qob2Zmc2V0KTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBmaXhlZCBvciBpcyBpbnNpZGUgYSBmaXhlZCBwYXJlbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQGFyZ3VtZW50IHtFbGVtZW50fSBjdXN0b21Db250YWluZXJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBhbnN3ZXIgdG8gXCJpc0ZpeGVkP1wiXG4gKi9cbmZ1bmN0aW9uIGlzRml4ZWQoZWxlbWVudCkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lO1xuICBpZiAobm9kZU5hbWUgPT09ICdCT0RZJyB8fCBub2RlTmFtZSA9PT0gJ0hUTUwnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIGlmICghcGFyZW50Tm9kZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gaXNGaXhlZChwYXJlbnROb2RlKTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgZmlyc3QgcGFyZW50IG9mIGFuIGVsZW1lbnQgdGhhdCBoYXMgYSB0cmFuc2Zvcm1lZCBwcm9wZXJ0eSBkZWZpbmVkXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtFbGVtZW50fSBmaXJzdCB0cmFuc2Zvcm1lZCBwYXJlbnQgb3IgZG9jdW1lbnRFbGVtZW50XG4gKi9cblxuZnVuY3Rpb24gZ2V0Rml4ZWRQb3NpdGlvbk9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIC8vIFRoaXMgY2hlY2sgaXMgbmVlZGVkIHRvIGF2b2lkIGVycm9ycyBpbiBjYXNlIG9uZSBvZiB0aGUgZWxlbWVudHMgaXNuJ3QgZGVmaW5lZCBmb3IgYW55IHJlYXNvblxuICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQucGFyZW50RWxlbWVudCB8fCBpc0lFKCkpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB9XG4gIHZhciBlbCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgd2hpbGUgKGVsICYmIGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShlbCwgJ3RyYW5zZm9ybScpID09PSAnbm9uZScpIHtcbiAgICBlbCA9IGVsLnBhcmVudEVsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIGVsIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbn1cblxuLyoqXG4gKiBDb21wdXRlZCB0aGUgYm91bmRhcmllcyBsaW1pdHMgYW5kIHJldHVybiB0aGVtXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwb3BwZXJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJlZmVyZW5jZVxuICogQHBhcmFtIHtudW1iZXJ9IHBhZGRpbmdcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGJvdW5kYXJpZXNFbGVtZW50IC0gRWxlbWVudCB1c2VkIHRvIGRlZmluZSB0aGUgYm91bmRhcmllc1xuICogQHBhcmFtIHtCb29sZWFufSBmaXhlZFBvc2l0aW9uIC0gSXMgaW4gZml4ZWQgcG9zaXRpb24gbW9kZVxuICogQHJldHVybnMge09iamVjdH0gQ29vcmRpbmF0ZXMgb2YgdGhlIGJvdW5kYXJpZXNcbiAqL1xuZnVuY3Rpb24gZ2V0Qm91bmRhcmllcyhwb3BwZXIsIHJlZmVyZW5jZSwgcGFkZGluZywgYm91bmRhcmllc0VsZW1lbnQpIHtcbiAgdmFyIGZpeGVkUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IGZhbHNlO1xuXG4gIC8vIE5PVEU6IDEgRE9NIGFjY2VzcyBoZXJlXG5cbiAgdmFyIGJvdW5kYXJpZXMgPSB7IHRvcDogMCwgbGVmdDogMCB9O1xuICB2YXIgb2Zmc2V0UGFyZW50ID0gZml4ZWRQb3NpdGlvbiA/IGdldEZpeGVkUG9zaXRpb25PZmZzZXRQYXJlbnQocG9wcGVyKSA6IGZpbmRDb21tb25PZmZzZXRQYXJlbnQocG9wcGVyLCByZWZlcmVuY2UpO1xuXG4gIC8vIEhhbmRsZSB2aWV3cG9ydCBjYXNlXG4gIGlmIChib3VuZGFyaWVzRWxlbWVudCA9PT0gJ3ZpZXdwb3J0Jykge1xuICAgIGJvdW5kYXJpZXMgPSBnZXRWaWV3cG9ydE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJ0Yml0cmFyeU5vZGUob2Zmc2V0UGFyZW50LCBmaXhlZFBvc2l0aW9uKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBIYW5kbGUgb3RoZXIgY2FzZXMgYmFzZWQgb24gRE9NIGVsZW1lbnQgdXNlZCBhcyBib3VuZGFyaWVzXG4gICAgdmFyIGJvdW5kYXJpZXNOb2RlID0gdm9pZCAwO1xuICAgIGlmIChib3VuZGFyaWVzRWxlbWVudCA9PT0gJ3Njcm9sbFBhcmVudCcpIHtcbiAgICAgIGJvdW5kYXJpZXNOb2RlID0gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUocmVmZXJlbmNlKSk7XG4gICAgICBpZiAoYm91bmRhcmllc05vZGUubm9kZU5hbWUgPT09ICdCT0RZJykge1xuICAgICAgICBib3VuZGFyaWVzTm9kZSA9IHBvcHBlci5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGJvdW5kYXJpZXNFbGVtZW50ID09PSAnd2luZG93Jykge1xuICAgICAgYm91bmRhcmllc05vZGUgPSBwb3BwZXIub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvdW5kYXJpZXNOb2RlID0gYm91bmRhcmllc0VsZW1lbnQ7XG4gICAgfVxuXG4gICAgdmFyIG9mZnNldHMgPSBnZXRPZmZzZXRSZWN0UmVsYXRpdmVUb0FyYml0cmFyeU5vZGUoYm91bmRhcmllc05vZGUsIG9mZnNldFBhcmVudCwgZml4ZWRQb3NpdGlvbik7XG5cbiAgICAvLyBJbiBjYXNlIG9mIEhUTUwsIHdlIG5lZWQgYSBkaWZmZXJlbnQgY29tcHV0YXRpb25cbiAgICBpZiAoYm91bmRhcmllc05vZGUubm9kZU5hbWUgPT09ICdIVE1MJyAmJiAhaXNGaXhlZChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICB2YXIgX2dldFdpbmRvd1NpemVzID0gZ2V0V2luZG93U2l6ZXMocG9wcGVyLm93bmVyRG9jdW1lbnQpLFxuICAgICAgICAgIGhlaWdodCA9IF9nZXRXaW5kb3dTaXplcy5oZWlnaHQsXG4gICAgICAgICAgd2lkdGggPSBfZ2V0V2luZG93U2l6ZXMud2lkdGg7XG5cbiAgICAgIGJvdW5kYXJpZXMudG9wICs9IG9mZnNldHMudG9wIC0gb2Zmc2V0cy5tYXJnaW5Ub3A7XG4gICAgICBib3VuZGFyaWVzLmJvdHRvbSA9IGhlaWdodCArIG9mZnNldHMudG9wO1xuICAgICAgYm91bmRhcmllcy5sZWZ0ICs9IG9mZnNldHMubGVmdCAtIG9mZnNldHMubWFyZ2luTGVmdDtcbiAgICAgIGJvdW5kYXJpZXMucmlnaHQgPSB3aWR0aCArIG9mZnNldHMubGVmdDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZm9yIGFsbCB0aGUgb3RoZXIgRE9NIGVsZW1lbnRzLCB0aGlzIG9uZSBpcyBnb29kXG4gICAgICBib3VuZGFyaWVzID0gb2Zmc2V0cztcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgcGFkZGluZ3NcbiAgcGFkZGluZyA9IHBhZGRpbmcgfHwgMDtcbiAgdmFyIGlzUGFkZGluZ051bWJlciA9IHR5cGVvZiBwYWRkaW5nID09PSAnbnVtYmVyJztcbiAgYm91bmRhcmllcy5sZWZ0ICs9IGlzUGFkZGluZ051bWJlciA/IHBhZGRpbmcgOiBwYWRkaW5nLmxlZnQgfHwgMDtcbiAgYm91bmRhcmllcy50b3AgKz0gaXNQYWRkaW5nTnVtYmVyID8gcGFkZGluZyA6IHBhZGRpbmcudG9wIHx8IDA7XG4gIGJvdW5kYXJpZXMucmlnaHQgLT0gaXNQYWRkaW5nTnVtYmVyID8gcGFkZGluZyA6IHBhZGRpbmcucmlnaHQgfHwgMDtcbiAgYm91bmRhcmllcy5ib3R0b20gLT0gaXNQYWRkaW5nTnVtYmVyID8gcGFkZGluZyA6IHBhZGRpbmcuYm90dG9tIHx8IDA7XG5cbiAgcmV0dXJuIGJvdW5kYXJpZXM7XG59XG5cbmZ1bmN0aW9uIGdldEFyZWEoX3JlZikge1xuICB2YXIgd2lkdGggPSBfcmVmLndpZHRoLFxuICAgICAgaGVpZ2h0ID0gX3JlZi5oZWlnaHQ7XG5cbiAgcmV0dXJuIHdpZHRoICogaGVpZ2h0O1xufVxuXG4vKipcbiAqIFV0aWxpdHkgdXNlZCB0byB0cmFuc2Zvcm0gdGhlIGBhdXRvYCBwbGFjZW1lbnQgdG8gdGhlIHBsYWNlbWVudCB3aXRoIG1vcmVcbiAqIGF2YWlsYWJsZSBzcGFjZS5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSB1cGRhdGUgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVBdXRvUGxhY2VtZW50KHBsYWNlbWVudCwgcmVmUmVjdCwgcG9wcGVyLCByZWZlcmVuY2UsIGJvdW5kYXJpZXNFbGVtZW50KSB7XG4gIHZhciBwYWRkaW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgJiYgYXJndW1lbnRzWzVdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNV0gOiAwO1xuXG4gIGlmIChwbGFjZW1lbnQuaW5kZXhPZignYXV0bycpID09PSAtMSkge1xuICAgIHJldHVybiBwbGFjZW1lbnQ7XG4gIH1cblxuICB2YXIgYm91bmRhcmllcyA9IGdldEJvdW5kYXJpZXMocG9wcGVyLCByZWZlcmVuY2UsIHBhZGRpbmcsIGJvdW5kYXJpZXNFbGVtZW50KTtcblxuICB2YXIgcmVjdHMgPSB7XG4gICAgdG9wOiB7XG4gICAgICB3aWR0aDogYm91bmRhcmllcy53aWR0aCxcbiAgICAgIGhlaWdodDogcmVmUmVjdC50b3AgLSBib3VuZGFyaWVzLnRvcFxuICAgIH0sXG4gICAgcmlnaHQ6IHtcbiAgICAgIHdpZHRoOiBib3VuZGFyaWVzLnJpZ2h0IC0gcmVmUmVjdC5yaWdodCxcbiAgICAgIGhlaWdodDogYm91bmRhcmllcy5oZWlnaHRcbiAgICB9LFxuICAgIGJvdHRvbToge1xuICAgICAgd2lkdGg6IGJvdW5kYXJpZXMud2lkdGgsXG4gICAgICBoZWlnaHQ6IGJvdW5kYXJpZXMuYm90dG9tIC0gcmVmUmVjdC5ib3R0b21cbiAgICB9LFxuICAgIGxlZnQ6IHtcbiAgICAgIHdpZHRoOiByZWZSZWN0LmxlZnQgLSBib3VuZGFyaWVzLmxlZnQsXG4gICAgICBoZWlnaHQ6IGJvdW5kYXJpZXMuaGVpZ2h0XG4gICAgfVxuICB9O1xuXG4gIHZhciBzb3J0ZWRBcmVhcyA9IE9iamVjdC5rZXlzKHJlY3RzKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgICBrZXk6IGtleVxuICAgIH0sIHJlY3RzW2tleV0sIHtcbiAgICAgIGFyZWE6IGdldEFyZWEocmVjdHNba2V5XSlcbiAgICB9KTtcbiAgfSkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBiLmFyZWEgLSBhLmFyZWE7XG4gIH0pO1xuXG4gIHZhciBmaWx0ZXJlZEFyZWFzID0gc29ydGVkQXJlYXMuZmlsdGVyKGZ1bmN0aW9uIChfcmVmMikge1xuICAgIHZhciB3aWR0aCA9IF9yZWYyLndpZHRoLFxuICAgICAgICBoZWlnaHQgPSBfcmVmMi5oZWlnaHQ7XG4gICAgcmV0dXJuIHdpZHRoID49IHBvcHBlci5jbGllbnRXaWR0aCAmJiBoZWlnaHQgPj0gcG9wcGVyLmNsaWVudEhlaWdodDtcbiAgfSk7XG5cbiAgdmFyIGNvbXB1dGVkUGxhY2VtZW50ID0gZmlsdGVyZWRBcmVhcy5sZW5ndGggPiAwID8gZmlsdGVyZWRBcmVhc1swXS5rZXkgOiBzb3J0ZWRBcmVhc1swXS5rZXk7XG5cbiAgdmFyIHZhcmlhdGlvbiA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzFdO1xuXG4gIHJldHVybiBjb21wdXRlZFBsYWNlbWVudCArICh2YXJpYXRpb24gPyAnLScgKyB2YXJpYXRpb24gOiAnJyk7XG59XG5cbi8qKlxuICogR2V0IG9mZnNldHMgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7RWxlbWVudH0gcG9wcGVyIC0gdGhlIHBvcHBlciBlbGVtZW50XG4gKiBAcGFyYW0ge0VsZW1lbnR9IHJlZmVyZW5jZSAtIHRoZSByZWZlcmVuY2UgZWxlbWVudCAodGhlIHBvcHBlciB3aWxsIGJlIHJlbGF0aXZlIHRvIHRoaXMpXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGZpeGVkUG9zaXRpb24gLSBpcyBpbiBmaXhlZCBwb3NpdGlvbiBtb2RlXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgb2Zmc2V0cyB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlclxuICovXG5mdW5jdGlvbiBnZXRSZWZlcmVuY2VPZmZzZXRzKHN0YXRlLCBwb3BwZXIsIHJlZmVyZW5jZSkge1xuICB2YXIgZml4ZWRQb3NpdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogbnVsbDtcblxuICB2YXIgY29tbW9uT2Zmc2V0UGFyZW50ID0gZml4ZWRQb3NpdGlvbiA/IGdldEZpeGVkUG9zaXRpb25PZmZzZXRQYXJlbnQocG9wcGVyKSA6IGZpbmRDb21tb25PZmZzZXRQYXJlbnQocG9wcGVyLCByZWZlcmVuY2UpO1xuICByZXR1cm4gZ2V0T2Zmc2V0UmVjdFJlbGF0aXZlVG9BcmJpdHJhcnlOb2RlKHJlZmVyZW5jZSwgY29tbW9uT2Zmc2V0UGFyZW50LCBmaXhlZFBvc2l0aW9uKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG91dGVyIHNpemVzIG9mIHRoZSBnaXZlbiBlbGVtZW50IChvZmZzZXQgc2l6ZSArIG1hcmdpbnMpXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtPYmplY3R9IG9iamVjdCBjb250YWluaW5nIHdpZHRoIGFuZCBoZWlnaHQgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBnZXRPdXRlclNpemVzKGVsZW1lbnQpIHtcbiAgdmFyIHdpbmRvdyA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcbiAgdmFyIHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICB2YXIgeCA9IHBhcnNlRmxvYXQoc3R5bGVzLm1hcmdpblRvcCB8fCAwKSArIHBhcnNlRmxvYXQoc3R5bGVzLm1hcmdpbkJvdHRvbSB8fCAwKTtcbiAgdmFyIHkgPSBwYXJzZUZsb2F0KHN0eWxlcy5tYXJnaW5MZWZ0IHx8IDApICsgcGFyc2VGbG9hdChzdHlsZXMubWFyZ2luUmlnaHQgfHwgMCk7XG4gIHZhciByZXN1bHQgPSB7XG4gICAgd2lkdGg6IGVsZW1lbnQub2Zmc2V0V2lkdGggKyB5LFxuICAgIGhlaWdodDogZWxlbWVudC5vZmZzZXRIZWlnaHQgKyB4XG4gIH07XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogR2V0IHRoZSBvcHBvc2l0ZSBwbGFjZW1lbnQgb2YgdGhlIGdpdmVuIG9uZVxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtTdHJpbmd9IHBsYWNlbWVudFxuICogQHJldHVybnMge1N0cmluZ30gZmxpcHBlZCBwbGFjZW1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHZhciBoYXNoID0geyBsZWZ0OiAncmlnaHQnLCByaWdodDogJ2xlZnQnLCBib3R0b206ICd0b3AnLCB0b3A6ICdib3R0b20nIH07XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBvZmZzZXRzIHRvIHRoZSBwb3BwZXJcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwb3NpdGlvbiAtIENTUyBwb3NpdGlvbiB0aGUgUG9wcGVyIHdpbGwgZ2V0IGFwcGxpZWRcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBvcHBlciAtIHRoZSBwb3BwZXIgZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IHJlZmVyZW5jZU9mZnNldHMgLSB0aGUgcmVmZXJlbmNlIG9mZnNldHMgKHRoZSBwb3BwZXIgd2lsbCBiZSByZWxhdGl2ZSB0byB0aGlzKVxuICogQHBhcmFtIHtTdHJpbmd9IHBsYWNlbWVudCAtIG9uZSBvZiB0aGUgdmFsaWQgcGxhY2VtZW50IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IHBvcHBlck9mZnNldHMgLSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgb2Zmc2V0cyB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlclxuICovXG5mdW5jdGlvbiBnZXRQb3BwZXJPZmZzZXRzKHBvcHBlciwgcmVmZXJlbmNlT2Zmc2V0cywgcGxhY2VtZW50KSB7XG4gIHBsYWNlbWVudCA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuXG4gIC8vIEdldCBwb3BwZXIgbm9kZSBzaXplc1xuICB2YXIgcG9wcGVyUmVjdCA9IGdldE91dGVyU2l6ZXMocG9wcGVyKTtcblxuICAvLyBBZGQgcG9zaXRpb24sIHdpZHRoIGFuZCBoZWlnaHQgdG8gb3VyIG9mZnNldHMgb2JqZWN0XG4gIHZhciBwb3BwZXJPZmZzZXRzID0ge1xuICAgIHdpZHRoOiBwb3BwZXJSZWN0LndpZHRoLFxuICAgIGhlaWdodDogcG9wcGVyUmVjdC5oZWlnaHRcbiAgfTtcblxuICAvLyBkZXBlbmRpbmcgYnkgdGhlIHBvcHBlciBwbGFjZW1lbnQgd2UgaGF2ZSB0byBjb21wdXRlIGl0cyBvZmZzZXRzIHNsaWdodGx5IGRpZmZlcmVudGx5XG4gIHZhciBpc0hvcml6ID0gWydyaWdodCcsICdsZWZ0J10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMTtcbiAgdmFyIG1haW5TaWRlID0gaXNIb3JpeiA/ICd0b3AnIDogJ2xlZnQnO1xuICB2YXIgc2Vjb25kYXJ5U2lkZSA9IGlzSG9yaXogPyAnbGVmdCcgOiAndG9wJztcbiAgdmFyIG1lYXN1cmVtZW50ID0gaXNIb3JpeiA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgdmFyIHNlY29uZGFyeU1lYXN1cmVtZW50ID0gIWlzSG9yaXogPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgcG9wcGVyT2Zmc2V0c1ttYWluU2lkZV0gPSByZWZlcmVuY2VPZmZzZXRzW21haW5TaWRlXSArIHJlZmVyZW5jZU9mZnNldHNbbWVhc3VyZW1lbnRdIC8gMiAtIHBvcHBlclJlY3RbbWVhc3VyZW1lbnRdIC8gMjtcbiAgaWYgKHBsYWNlbWVudCA9PT0gc2Vjb25kYXJ5U2lkZSkge1xuICAgIHBvcHBlck9mZnNldHNbc2Vjb25kYXJ5U2lkZV0gPSByZWZlcmVuY2VPZmZzZXRzW3NlY29uZGFyeVNpZGVdIC0gcG9wcGVyUmVjdFtzZWNvbmRhcnlNZWFzdXJlbWVudF07XG4gIH0gZWxzZSB7XG4gICAgcG9wcGVyT2Zmc2V0c1tzZWNvbmRhcnlTaWRlXSA9IHJlZmVyZW5jZU9mZnNldHNbZ2V0T3Bwb3NpdGVQbGFjZW1lbnQoc2Vjb25kYXJ5U2lkZSldO1xuICB9XG5cbiAgcmV0dXJuIHBvcHBlck9mZnNldHM7XG59XG5cbi8qKlxuICogTWltaWNzIHRoZSBgZmluZGAgbWV0aG9kIG9mIEFycmF5XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0FycmF5fSBhcnJcbiAqIEBhcmd1bWVudCBwcm9wXG4gKiBAYXJndW1lbnQgdmFsdWVcbiAqIEByZXR1cm5zIGluZGV4IG9yIC0xXG4gKi9cbmZ1bmN0aW9uIGZpbmQoYXJyLCBjaGVjaykge1xuICAvLyB1c2UgbmF0aXZlIGZpbmQgaWYgc3VwcG9ydGVkXG4gIGlmIChBcnJheS5wcm90b3R5cGUuZmluZCkge1xuICAgIHJldHVybiBhcnIuZmluZChjaGVjayk7XG4gIH1cblxuICAvLyB1c2UgYGZpbHRlcmAgdG8gb2J0YWluIHRoZSBzYW1lIGJlaGF2aW9yIG9mIGBmaW5kYFxuICByZXR1cm4gYXJyLmZpbHRlcihjaGVjaylbMF07XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hpbmcgb2JqZWN0XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0FycmF5fSBhcnJcbiAqIEBhcmd1bWVudCBwcm9wXG4gKiBAYXJndW1lbnQgdmFsdWVcbiAqIEByZXR1cm5zIGluZGV4IG9yIC0xXG4gKi9cbmZ1bmN0aW9uIGZpbmRJbmRleChhcnIsIHByb3AsIHZhbHVlKSB7XG4gIC8vIHVzZSBuYXRpdmUgZmluZEluZGV4IGlmIHN1cHBvcnRlZFxuICBpZiAoQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleCkge1xuICAgIHJldHVybiBhcnIuZmluZEluZGV4KGZ1bmN0aW9uIChjdXIpIHtcbiAgICAgIHJldHVybiBjdXJbcHJvcF0gPT09IHZhbHVlO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gdXNlIGBmaW5kYCArIGBpbmRleE9mYCBpZiBgZmluZEluZGV4YCBpc24ndCBzdXBwb3J0ZWRcbiAgdmFyIG1hdGNoID0gZmluZChhcnIsIGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqW3Byb3BdID09PSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiBhcnIuaW5kZXhPZihtYXRjaCk7XG59XG5cbi8qKlxuICogTG9vcCB0cm91Z2ggdGhlIGxpc3Qgb2YgbW9kaWZpZXJzIGFuZCBydW4gdGhlbSBpbiBvcmRlcixcbiAqIGVhY2ggb2YgdGhlbSB3aWxsIHRoZW4gZWRpdCB0aGUgZGF0YSBvYmplY3QuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge2RhdGFPYmplY3R9IGRhdGFcbiAqIEBwYXJhbSB7QXJyYXl9IG1vZGlmaWVyc1xuICogQHBhcmFtIHtTdHJpbmd9IGVuZHMgLSBPcHRpb25hbCBtb2RpZmllciBuYW1lIHVzZWQgYXMgc3RvcHBlclxuICogQHJldHVybnMge2RhdGFPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHJ1bk1vZGlmaWVycyhtb2RpZmllcnMsIGRhdGEsIGVuZHMpIHtcbiAgdmFyIG1vZGlmaWVyc1RvUnVuID0gZW5kcyA9PT0gdW5kZWZpbmVkID8gbW9kaWZpZXJzIDogbW9kaWZpZXJzLnNsaWNlKDAsIGZpbmRJbmRleChtb2RpZmllcnMsICduYW1lJywgZW5kcykpO1xuXG4gIG1vZGlmaWVyc1RvUnVuLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgaWYgKG1vZGlmaWVyWydmdW5jdGlvbiddKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGRvdC1ub3RhdGlvblxuICAgICAgY29uc29sZS53YXJuKCdgbW9kaWZpZXIuZnVuY3Rpb25gIGlzIGRlcHJlY2F0ZWQsIHVzZSBgbW9kaWZpZXIuZm5gIScpO1xuICAgIH1cbiAgICB2YXIgZm4gPSBtb2RpZmllclsnZnVuY3Rpb24nXSB8fCBtb2RpZmllci5mbjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICBpZiAobW9kaWZpZXIuZW5hYmxlZCAmJiBpc0Z1bmN0aW9uKGZuKSkge1xuICAgICAgLy8gQWRkIHByb3BlcnRpZXMgdG8gb2Zmc2V0cyB0byBtYWtlIHRoZW0gYSBjb21wbGV0ZSBjbGllbnRSZWN0IG9iamVjdFxuICAgICAgLy8gd2UgZG8gdGhpcyBiZWZvcmUgZWFjaCBtb2RpZmllciB0byBtYWtlIHN1cmUgdGhlIHByZXZpb3VzIG9uZSBkb2Vzbid0XG4gICAgICAvLyBtZXNzIHdpdGggdGhlc2UgdmFsdWVzXG4gICAgICBkYXRhLm9mZnNldHMucG9wcGVyID0gZ2V0Q2xpZW50UmVjdChkYXRhLm9mZnNldHMucG9wcGVyKTtcbiAgICAgIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UgPSBnZXRDbGllbnRSZWN0KGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UpO1xuXG4gICAgICBkYXRhID0gZm4oZGF0YSwgbW9kaWZpZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcHBlciwgY29tcHV0aW5nIHRoZSBuZXcgb2Zmc2V0cyBhbmQgYXBwbHlpbmdcbiAqIHRoZSBuZXcgc3R5bGUuPGJyIC8+XG4gKiBQcmVmZXIgYHNjaGVkdWxlVXBkYXRlYCBvdmVyIGB1cGRhdGVgIGJlY2F1c2Ugb2YgcGVyZm9ybWFuY2UgcmVhc29ucy5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXJcbiAqL1xuZnVuY3Rpb24gdXBkYXRlKCkge1xuICAvLyBpZiBwb3BwZXIgaXMgZGVzdHJveWVkLCBkb24ndCBwZXJmb3JtIGFueSBmdXJ0aGVyIHVwZGF0ZVxuICBpZiAodGhpcy5zdGF0ZS5pc0Rlc3Ryb3llZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBkYXRhID0ge1xuICAgIGluc3RhbmNlOiB0aGlzLFxuICAgIHN0eWxlczoge30sXG4gICAgYXJyb3dTdHlsZXM6IHt9LFxuICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgIGZsaXBwZWQ6IGZhbHNlLFxuICAgIG9mZnNldHM6IHt9XG4gIH07XG5cbiAgLy8gY29tcHV0ZSByZWZlcmVuY2UgZWxlbWVudCBvZmZzZXRzXG4gIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UgPSBnZXRSZWZlcmVuY2VPZmZzZXRzKHRoaXMuc3RhdGUsIHRoaXMucG9wcGVyLCB0aGlzLnJlZmVyZW5jZSwgdGhpcy5vcHRpb25zLnBvc2l0aW9uRml4ZWQpO1xuXG4gIC8vIGNvbXB1dGUgYXV0byBwbGFjZW1lbnQsIHN0b3JlIHBsYWNlbWVudCBpbnNpZGUgdGhlIGRhdGEgb2JqZWN0LFxuICAvLyBtb2RpZmllcnMgd2lsbCBiZSBhYmxlIHRvIGVkaXQgYHBsYWNlbWVudGAgaWYgbmVlZGVkXG4gIC8vIGFuZCByZWZlciB0byBvcmlnaW5hbFBsYWNlbWVudCB0byBrbm93IHRoZSBvcmlnaW5hbCB2YWx1ZVxuICBkYXRhLnBsYWNlbWVudCA9IGNvbXB1dGVBdXRvUGxhY2VtZW50KHRoaXMub3B0aW9ucy5wbGFjZW1lbnQsIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UsIHRoaXMucG9wcGVyLCB0aGlzLnJlZmVyZW5jZSwgdGhpcy5vcHRpb25zLm1vZGlmaWVycy5mbGlwLmJvdW5kYXJpZXNFbGVtZW50LCB0aGlzLm9wdGlvbnMubW9kaWZpZXJzLmZsaXAucGFkZGluZyk7XG5cbiAgLy8gc3RvcmUgdGhlIGNvbXB1dGVkIHBsYWNlbWVudCBpbnNpZGUgYG9yaWdpbmFsUGxhY2VtZW50YFxuICBkYXRhLm9yaWdpbmFsUGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQ7XG5cbiAgZGF0YS5wb3NpdGlvbkZpeGVkID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uRml4ZWQ7XG5cbiAgLy8gY29tcHV0ZSB0aGUgcG9wcGVyIG9mZnNldHNcbiAgZGF0YS5vZmZzZXRzLnBvcHBlciA9IGdldFBvcHBlck9mZnNldHModGhpcy5wb3BwZXIsIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UsIGRhdGEucGxhY2VtZW50KTtcblxuICBkYXRhLm9mZnNldHMucG9wcGVyLnBvc2l0aW9uID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uRml4ZWQgPyAnZml4ZWQnIDogJ2Fic29sdXRlJztcblxuICAvLyBydW4gdGhlIG1vZGlmaWVyc1xuICBkYXRhID0gcnVuTW9kaWZpZXJzKHRoaXMubW9kaWZpZXJzLCBkYXRhKTtcblxuICAvLyB0aGUgZmlyc3QgYHVwZGF0ZWAgd2lsbCBjYWxsIGBvbkNyZWF0ZWAgY2FsbGJhY2tcbiAgLy8gdGhlIG90aGVyIG9uZXMgd2lsbCBjYWxsIGBvblVwZGF0ZWAgY2FsbGJhY2tcbiAgaWYgKCF0aGlzLnN0YXRlLmlzQ3JlYXRlZCkge1xuICAgIHRoaXMuc3RhdGUuaXNDcmVhdGVkID0gdHJ1ZTtcbiAgICB0aGlzLm9wdGlvbnMub25DcmVhdGUoZGF0YSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5vcHRpb25zLm9uVXBkYXRlKGRhdGEpO1xuICB9XG59XG5cbi8qKlxuICogSGVscGVyIHVzZWQgdG8ga25vdyBpZiB0aGUgZ2l2ZW4gbW9kaWZpZXIgaXMgZW5hYmxlZC5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBpc01vZGlmaWVyRW5hYmxlZChtb2RpZmllcnMsIG1vZGlmaWVyTmFtZSkge1xuICByZXR1cm4gbW9kaWZpZXJzLnNvbWUoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgICAgZW5hYmxlZCA9IF9yZWYuZW5hYmxlZDtcbiAgICByZXR1cm4gZW5hYmxlZCAmJiBuYW1lID09PSBtb2RpZmllck5hbWU7XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcHJlZml4ZWQgc3VwcG9ydGVkIHByb3BlcnR5IG5hbWVcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBwcm9wZXJ0eSAoY2FtZWxDYXNlKVxuICogQHJldHVybnMge1N0cmluZ30gcHJlZml4ZWQgcHJvcGVydHkgKGNhbWVsQ2FzZSBvciBQYXNjYWxDYXNlLCBkZXBlbmRpbmcgb24gdGhlIHZlbmRvciBwcmVmaXgpXG4gKi9cbmZ1bmN0aW9uIGdldFN1cHBvcnRlZFByb3BlcnR5TmFtZShwcm9wZXJ0eSkge1xuICB2YXIgcHJlZml4ZXMgPSBbZmFsc2UsICdtcycsICdXZWJraXQnLCAnTW96JywgJ08nXTtcbiAgdmFyIHVwcGVyUHJvcCA9IHByb3BlcnR5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcHJvcGVydHkuc2xpY2UoMSk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmVmaXhlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwcmVmaXggPSBwcmVmaXhlc1tpXTtcbiAgICB2YXIgdG9DaGVjayA9IHByZWZpeCA/ICcnICsgcHJlZml4ICsgdXBwZXJQcm9wIDogcHJvcGVydHk7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudC5ib2R5LnN0eWxlW3RvQ2hlY2tdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRvQ2hlY2s7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBwb3BwZXIuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyXG4gKi9cbmZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gIHRoaXMuc3RhdGUuaXNEZXN0cm95ZWQgPSB0cnVlO1xuXG4gIC8vIHRvdWNoIERPTSBvbmx5IGlmIGBhcHBseVN0eWxlYCBtb2RpZmllciBpcyBlbmFibGVkXG4gIGlmIChpc01vZGlmaWVyRW5hYmxlZCh0aGlzLm1vZGlmaWVycywgJ2FwcGx5U3R5bGUnKSkge1xuICAgIHRoaXMucG9wcGVyLnJlbW92ZUF0dHJpYnV0ZSgneC1wbGFjZW1lbnQnKTtcbiAgICB0aGlzLnBvcHBlci5zdHlsZS5wb3NpdGlvbiA9ICcnO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlLnRvcCA9ICcnO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlLmxlZnQgPSAnJztcbiAgICB0aGlzLnBvcHBlci5zdHlsZS5yaWdodCA9ICcnO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlLmJvdHRvbSA9ICcnO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlLndpbGxDaGFuZ2UgPSAnJztcbiAgICB0aGlzLnBvcHBlci5zdHlsZVtnZXRTdXBwb3J0ZWRQcm9wZXJ0eU5hbWUoJ3RyYW5zZm9ybScpXSA9ICcnO1xuICB9XG5cbiAgdGhpcy5kaXNhYmxlRXZlbnRMaXN0ZW5lcnMoKTtcblxuICAvLyByZW1vdmUgdGhlIHBvcHBlciBpZiB1c2VyIGV4cGxpY2l0eSBhc2tlZCBmb3IgdGhlIGRlbGV0aW9uIG9uIGRlc3Ryb3lcbiAgLy8gZG8gbm90IHVzZSBgcmVtb3ZlYCBiZWNhdXNlIElFMTEgZG9lc24ndCBzdXBwb3J0IGl0XG4gIGlmICh0aGlzLm9wdGlvbnMucmVtb3ZlT25EZXN0cm95KSB7XG4gICAgdGhpcy5wb3BwZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnBvcHBlcik7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogR2V0IHRoZSB3aW5kb3cgYXNzb2NpYXRlZCB3aXRoIHRoZSBlbGVtZW50XG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtXaW5kb3d9XG4gKi9cbmZ1bmN0aW9uIGdldFdpbmRvdyhlbGVtZW50KSB7XG4gIHZhciBvd25lckRvY3VtZW50ID0gZWxlbWVudC5vd25lckRvY3VtZW50O1xuICByZXR1cm4gb3duZXJEb2N1bWVudCA/IG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgOiB3aW5kb3c7XG59XG5cbmZ1bmN0aW9uIGF0dGFjaFRvU2Nyb2xsUGFyZW50cyhzY3JvbGxQYXJlbnQsIGV2ZW50LCBjYWxsYmFjaywgc2Nyb2xsUGFyZW50cykge1xuICB2YXIgaXNCb2R5ID0gc2Nyb2xsUGFyZW50Lm5vZGVOYW1lID09PSAnQk9EWSc7XG4gIHZhciB0YXJnZXQgPSBpc0JvZHkgPyBzY3JvbGxQYXJlbnQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyA6IHNjcm9sbFBhcmVudDtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGNhbGxiYWNrLCB7IHBhc3NpdmU6IHRydWUgfSk7XG5cbiAgaWYgKCFpc0JvZHkpIHtcbiAgICBhdHRhY2hUb1Njcm9sbFBhcmVudHMoZ2V0U2Nyb2xsUGFyZW50KHRhcmdldC5wYXJlbnROb2RlKSwgZXZlbnQsIGNhbGxiYWNrLCBzY3JvbGxQYXJlbnRzKTtcbiAgfVxuICBzY3JvbGxQYXJlbnRzLnB1c2godGFyZ2V0KTtcbn1cblxuLyoqXG4gKiBTZXR1cCBuZWVkZWQgZXZlbnQgbGlzdGVuZXJzIHVzZWQgdG8gdXBkYXRlIHRoZSBwb3BwZXIgcG9zaXRpb25cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNldHVwRXZlbnRMaXN0ZW5lcnMocmVmZXJlbmNlLCBvcHRpb25zLCBzdGF0ZSwgdXBkYXRlQm91bmQpIHtcbiAgLy8gUmVzaXplIGV2ZW50IGxpc3RlbmVyIG9uIHdpbmRvd1xuICBzdGF0ZS51cGRhdGVCb3VuZCA9IHVwZGF0ZUJvdW5kO1xuICBnZXRXaW5kb3cocmVmZXJlbmNlKS5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBzdGF0ZS51cGRhdGVCb3VuZCwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuXG4gIC8vIFNjcm9sbCBldmVudCBsaXN0ZW5lciBvbiBzY3JvbGwgcGFyZW50c1xuICB2YXIgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbFBhcmVudChyZWZlcmVuY2UpO1xuICBhdHRhY2hUb1Njcm9sbFBhcmVudHMoc2Nyb2xsRWxlbWVudCwgJ3Njcm9sbCcsIHN0YXRlLnVwZGF0ZUJvdW5kLCBzdGF0ZS5zY3JvbGxQYXJlbnRzKTtcbiAgc3RhdGUuc2Nyb2xsRWxlbWVudCA9IHNjcm9sbEVsZW1lbnQ7XG4gIHN0YXRlLmV2ZW50c0VuYWJsZWQgPSB0cnVlO1xuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBJdCB3aWxsIGFkZCByZXNpemUvc2Nyb2xsIGV2ZW50cyBhbmQgc3RhcnQgcmVjYWxjdWxhdGluZ1xuICogcG9zaXRpb24gb2YgdGhlIHBvcHBlciBlbGVtZW50IHdoZW4gdGhleSBhcmUgdHJpZ2dlcmVkLlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG5mdW5jdGlvbiBlbmFibGVFdmVudExpc3RlbmVycygpIHtcbiAgaWYgKCF0aGlzLnN0YXRlLmV2ZW50c0VuYWJsZWQpIHtcbiAgICB0aGlzLnN0YXRlID0gc2V0dXBFdmVudExpc3RlbmVycyh0aGlzLnJlZmVyZW5jZSwgdGhpcy5vcHRpb25zLCB0aGlzLnN0YXRlLCB0aGlzLnNjaGVkdWxlVXBkYXRlKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMgdXNlZCB0byB1cGRhdGUgdGhlIHBvcHBlciBwb3NpdGlvblxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcnMocmVmZXJlbmNlLCBzdGF0ZSkge1xuICAvLyBSZW1vdmUgcmVzaXplIGV2ZW50IGxpc3RlbmVyIG9uIHdpbmRvd1xuICBnZXRXaW5kb3cocmVmZXJlbmNlKS5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBzdGF0ZS51cGRhdGVCb3VuZCk7XG5cbiAgLy8gUmVtb3ZlIHNjcm9sbCBldmVudCBsaXN0ZW5lciBvbiBzY3JvbGwgcGFyZW50c1xuICBzdGF0ZS5zY3JvbGxQYXJlbnRzLmZvckVhY2goZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzdGF0ZS51cGRhdGVCb3VuZCk7XG4gIH0pO1xuXG4gIC8vIFJlc2V0IHN0YXRlXG4gIHN0YXRlLnVwZGF0ZUJvdW5kID0gbnVsbDtcbiAgc3RhdGUuc2Nyb2xsUGFyZW50cyA9IFtdO1xuICBzdGF0ZS5zY3JvbGxFbGVtZW50ID0gbnVsbDtcbiAgc3RhdGUuZXZlbnRzRW5hYmxlZCA9IGZhbHNlO1xuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogSXQgd2lsbCByZW1vdmUgcmVzaXplL3Njcm9sbCBldmVudHMgYW5kIHdvbid0IHJlY2FsY3VsYXRlIHBvcHBlciBwb3NpdGlvblxuICogd2hlbiB0aGV5IGFyZSB0cmlnZ2VyZWQuIEl0IGFsc28gd29uJ3QgdHJpZ2dlciBgb25VcGRhdGVgIGNhbGxiYWNrIGFueW1vcmUsXG4gKiB1bmxlc3MgeW91IGNhbGwgYHVwZGF0ZWAgbWV0aG9kIG1hbnVhbGx5LlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG5mdW5jdGlvbiBkaXNhYmxlRXZlbnRMaXN0ZW5lcnMoKSB7XG4gIGlmICh0aGlzLnN0YXRlLmV2ZW50c0VuYWJsZWQpIHtcbiAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnNjaGVkdWxlVXBkYXRlKTtcbiAgICB0aGlzLnN0YXRlID0gcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy5yZWZlcmVuY2UsIHRoaXMuc3RhdGUpO1xuICB9XG59XG5cbi8qKlxuICogVGVsbHMgaWYgYSBnaXZlbiBpbnB1dCBpcyBhIG51bWJlclxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHsqfSBpbnB1dCB0byBjaGVja1xuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNOdW1lcmljKG4pIHtcbiAgcmV0dXJuIG4gIT09ICcnICYmICFpc05hTihwYXJzZUZsb2F0KG4pKSAmJiBpc0Zpbml0ZShuKTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIHN0eWxlIHRvIHRoZSBnaXZlbiBwb3BwZXJcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gYXBwbHkgdGhlIHN0eWxlIHRvXG4gKiBAYXJndW1lbnQge09iamVjdH0gc3R5bGVzXG4gKiBPYmplY3Qgd2l0aCBhIGxpc3Qgb2YgcHJvcGVydGllcyBhbmQgdmFsdWVzIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgZWxlbWVudFxuICovXG5mdW5jdGlvbiBzZXRTdHlsZXMoZWxlbWVudCwgc3R5bGVzKSB7XG4gIE9iamVjdC5rZXlzKHN0eWxlcykuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgIHZhciB1bml0ID0gJyc7XG4gICAgLy8gYWRkIHVuaXQgaWYgdGhlIHZhbHVlIGlzIG51bWVyaWMgYW5kIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nXG4gICAgaWYgKFsnd2lkdGgnLCAnaGVpZ2h0JywgJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddLmluZGV4T2YocHJvcCkgIT09IC0xICYmIGlzTnVtZXJpYyhzdHlsZXNbcHJvcF0pKSB7XG4gICAgICB1bml0ID0gJ3B4JztcbiAgICB9XG4gICAgZWxlbWVudC5zdHlsZVtwcm9wXSA9IHN0eWxlc1twcm9wXSArIHVuaXQ7XG4gIH0pO1xufVxuXG4vKipcbiAqIFNldCB0aGUgYXR0cmlidXRlcyB0byB0aGUgZ2l2ZW4gcG9wcGVyXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGFwcGx5IHRoZSBhdHRyaWJ1dGVzIHRvXG4gKiBAYXJndW1lbnQge09iamVjdH0gc3R5bGVzXG4gKiBPYmplY3Qgd2l0aCBhIGxpc3Qgb2YgcHJvcGVydGllcyBhbmQgdmFsdWVzIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgZWxlbWVudFxuICovXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIGF0dHJpYnV0ZXMpIHtcbiAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgIHZhciB2YWx1ZSA9IGF0dHJpYnV0ZXNbcHJvcF07XG4gICAgaWYgKHZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUocHJvcCwgYXR0cmlidXRlc1twcm9wXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHByb3ApO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgYHVwZGF0ZWAgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YS5zdHlsZXMgLSBMaXN0IG9mIHN0eWxlIHByb3BlcnRpZXMgLSB2YWx1ZXMgdG8gYXBwbHkgdG8gcG9wcGVyIGVsZW1lbnRcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhLmF0dHJpYnV0ZXMgLSBMaXN0IG9mIGF0dHJpYnV0ZSBwcm9wZXJ0aWVzIC0gdmFsdWVzIHRvIGFwcGx5IHRvIHBvcHBlciBlbGVtZW50XG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgc2FtZSBkYXRhIG9iamVjdFxuICovXG5mdW5jdGlvbiBhcHBseVN0eWxlKGRhdGEpIHtcbiAgLy8gYW55IHByb3BlcnR5IHByZXNlbnQgaW4gYGRhdGEuc3R5bGVzYCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlcixcbiAgLy8gaW4gdGhpcyB3YXkgd2UgY2FuIG1ha2UgdGhlIDNyZCBwYXJ0eSBtb2RpZmllcnMgYWRkIGN1c3RvbSBzdHlsZXMgdG8gaXRcbiAgLy8gQmUgYXdhcmUsIG1vZGlmaWVycyBjb3VsZCBvdmVycmlkZSB0aGUgcHJvcGVydGllcyBkZWZpbmVkIGluIHRoZSBwcmV2aW91c1xuICAvLyBsaW5lcyBvZiB0aGlzIG1vZGlmaWVyIVxuICBzZXRTdHlsZXMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEuc3R5bGVzKTtcblxuICAvLyBhbnkgcHJvcGVydHkgcHJlc2VudCBpbiBgZGF0YS5hdHRyaWJ1dGVzYCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlcixcbiAgLy8gdGhleSB3aWxsIGJlIHNldCBhcyBIVE1MIGF0dHJpYnV0ZXMgb2YgdGhlIGVsZW1lbnRcbiAgc2V0QXR0cmlidXRlcyhkYXRhLmluc3RhbmNlLnBvcHBlciwgZGF0YS5hdHRyaWJ1dGVzKTtcblxuICAvLyBpZiBhcnJvd0VsZW1lbnQgaXMgZGVmaW5lZCBhbmQgYXJyb3dTdHlsZXMgaGFzIHNvbWUgcHJvcGVydGllc1xuICBpZiAoZGF0YS5hcnJvd0VsZW1lbnQgJiYgT2JqZWN0LmtleXMoZGF0YS5hcnJvd1N0eWxlcykubGVuZ3RoKSB7XG4gICAgc2V0U3R5bGVzKGRhdGEuYXJyb3dFbGVtZW50LCBkYXRhLmFycm93U3R5bGVzKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIFNldCB0aGUgeC1wbGFjZW1lbnQgYXR0cmlidXRlIGJlZm9yZSBldmVyeXRoaW5nIGVsc2UgYmVjYXVzZSBpdCBjb3VsZCBiZSB1c2VkXG4gKiB0byBhZGQgbWFyZ2lucyB0byB0aGUgcG9wcGVyIG1hcmdpbnMgbmVlZHMgdG8gYmUgY2FsY3VsYXRlZCB0byBnZXQgdGhlXG4gKiBjb3JyZWN0IHBvcHBlciBvZmZzZXRzLlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5tb2RpZmllcnNcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgZWxlbWVudCB1c2VkIHRvIHBvc2l0aW9uIHRoZSBwb3BwZXJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBvcHBlciAtIFRoZSBIVE1MIGVsZW1lbnQgdXNlZCBhcyBwb3BwZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUG9wcGVyLmpzIG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gYXBwbHlTdHlsZU9uTG9hZChyZWZlcmVuY2UsIHBvcHBlciwgb3B0aW9ucywgbW9kaWZpZXJPcHRpb25zLCBzdGF0ZSkge1xuICAvLyBjb21wdXRlIHJlZmVyZW5jZSBlbGVtZW50IG9mZnNldHNcbiAgdmFyIHJlZmVyZW5jZU9mZnNldHMgPSBnZXRSZWZlcmVuY2VPZmZzZXRzKHN0YXRlLCBwb3BwZXIsIHJlZmVyZW5jZSwgb3B0aW9ucy5wb3NpdGlvbkZpeGVkKTtcblxuICAvLyBjb21wdXRlIGF1dG8gcGxhY2VtZW50LCBzdG9yZSBwbGFjZW1lbnQgaW5zaWRlIHRoZSBkYXRhIG9iamVjdCxcbiAgLy8gbW9kaWZpZXJzIHdpbGwgYmUgYWJsZSB0byBlZGl0IGBwbGFjZW1lbnRgIGlmIG5lZWRlZFxuICAvLyBhbmQgcmVmZXIgdG8gb3JpZ2luYWxQbGFjZW1lbnQgdG8ga25vdyB0aGUgb3JpZ2luYWwgdmFsdWVcbiAgdmFyIHBsYWNlbWVudCA9IGNvbXB1dGVBdXRvUGxhY2VtZW50KG9wdGlvbnMucGxhY2VtZW50LCByZWZlcmVuY2VPZmZzZXRzLCBwb3BwZXIsIHJlZmVyZW5jZSwgb3B0aW9ucy5tb2RpZmllcnMuZmxpcC5ib3VuZGFyaWVzRWxlbWVudCwgb3B0aW9ucy5tb2RpZmllcnMuZmxpcC5wYWRkaW5nKTtcblxuICBwb3BwZXIuc2V0QXR0cmlidXRlKCd4LXBsYWNlbWVudCcsIHBsYWNlbWVudCk7XG5cbiAgLy8gQXBwbHkgYHBvc2l0aW9uYCB0byBwb3BwZXIgYmVmb3JlIGFueXRoaW5nIGVsc2UgYmVjYXVzZVxuICAvLyB3aXRob3V0IHRoZSBwb3NpdGlvbiBhcHBsaWVkIHdlIGNhbid0IGd1YXJhbnRlZSBjb3JyZWN0IGNvbXB1dGF0aW9uc1xuICBzZXRTdHlsZXMocG9wcGVyLCB7IHBvc2l0aW9uOiBvcHRpb25zLnBvc2l0aW9uRml4ZWQgPyAnZml4ZWQnIDogJ2Fic29sdXRlJyB9KTtcblxuICByZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAqIEBhcmd1bWVudCB7Qm9vbGVhbn0gc2hvdWxkUm91bmQgLSBJZiB0aGUgb2Zmc2V0cyBzaG91bGQgYmUgcm91bmRlZCBhdCBhbGxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBwb3BwZXIncyBwb3NpdGlvbiBvZmZzZXRzIHJvdW5kZWRcbiAqXG4gKiBUaGUgdGFsZSBvZiBwaXhlbC1wZXJmZWN0IHBvc2l0aW9uaW5nLiBJdCdzIHN0aWxsIG5vdCAxMDAlIHBlcmZlY3QsIGJ1dCBhc1xuICogZ29vZCBhcyBpdCBjYW4gYmUgd2l0aGluIHJlYXNvbi5cbiAqIERpc2N1c3Npb24gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL0ZlelZyYXN0YS9wb3BwZXIuanMvcHVsbC83MTVcbiAqXG4gKiBMb3cgRFBJIHNjcmVlbnMgY2F1c2UgYSBwb3BwZXIgdG8gYmUgYmx1cnJ5IGlmIG5vdCB1c2luZyBmdWxsIHBpeGVscyAoU2FmYXJpXG4gKiBhcyB3ZWxsIG9uIEhpZ2ggRFBJIHNjcmVlbnMpLlxuICpcbiAqIEZpcmVmb3ggcHJlZmVycyBubyByb3VuZGluZyBmb3IgcG9zaXRpb25pbmcgYW5kIGRvZXMgbm90IGhhdmUgYmx1cnJpbmVzcyBvblxuICogaGlnaCBEUEkgc2NyZWVucy5cbiAqXG4gKiBPbmx5IGhvcml6b250YWwgcGxhY2VtZW50IGFuZCBsZWZ0L3JpZ2h0IHZhbHVlcyBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuXG4gKi9cbmZ1bmN0aW9uIGdldFJvdW5kZWRPZmZzZXRzKGRhdGEsIHNob3VsZFJvdW5kKSB7XG4gIHZhciBfZGF0YSRvZmZzZXRzID0gZGF0YS5vZmZzZXRzLFxuICAgICAgcG9wcGVyID0gX2RhdGEkb2Zmc2V0cy5wb3BwZXIsXG4gICAgICByZWZlcmVuY2UgPSBfZGF0YSRvZmZzZXRzLnJlZmVyZW5jZTtcbiAgdmFyIHJvdW5kID0gTWF0aC5yb3VuZCxcbiAgICAgIGZsb29yID0gTWF0aC5mbG9vcjtcblxuICB2YXIgbm9Sb3VuZCA9IGZ1bmN0aW9uIG5vUm91bmQodikge1xuICAgIHJldHVybiB2O1xuICB9O1xuXG4gIHZhciByZWZlcmVuY2VXaWR0aCA9IHJvdW5kKHJlZmVyZW5jZS53aWR0aCk7XG4gIHZhciBwb3BwZXJXaWR0aCA9IHJvdW5kKHBvcHBlci53aWR0aCk7XG5cbiAgdmFyIGlzVmVydGljYWwgPSBbJ2xlZnQnLCAncmlnaHQnXS5pbmRleE9mKGRhdGEucGxhY2VtZW50KSAhPT0gLTE7XG4gIHZhciBpc1ZhcmlhdGlvbiA9IGRhdGEucGxhY2VtZW50LmluZGV4T2YoJy0nKSAhPT0gLTE7XG4gIHZhciBzYW1lV2lkdGhQYXJpdHkgPSByZWZlcmVuY2VXaWR0aCAlIDIgPT09IHBvcHBlcldpZHRoICUgMjtcbiAgdmFyIGJvdGhPZGRXaWR0aCA9IHJlZmVyZW5jZVdpZHRoICUgMiA9PT0gMSAmJiBwb3BwZXJXaWR0aCAlIDIgPT09IDE7XG5cbiAgdmFyIGhvcml6b250YWxUb0ludGVnZXIgPSAhc2hvdWxkUm91bmQgPyBub1JvdW5kIDogaXNWZXJ0aWNhbCB8fCBpc1ZhcmlhdGlvbiB8fCBzYW1lV2lkdGhQYXJpdHkgPyByb3VuZCA6IGZsb29yO1xuICB2YXIgdmVydGljYWxUb0ludGVnZXIgPSAhc2hvdWxkUm91bmQgPyBub1JvdW5kIDogcm91bmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBsZWZ0OiBob3Jpem9udGFsVG9JbnRlZ2VyKGJvdGhPZGRXaWR0aCAmJiAhaXNWYXJpYXRpb24gJiYgc2hvdWxkUm91bmQgPyBwb3BwZXIubGVmdCAtIDEgOiBwb3BwZXIubGVmdCksXG4gICAgdG9wOiB2ZXJ0aWNhbFRvSW50ZWdlcihwb3BwZXIudG9wKSxcbiAgICBib3R0b206IHZlcnRpY2FsVG9JbnRlZ2VyKHBvcHBlci5ib3R0b20pLFxuICAgIHJpZ2h0OiBob3Jpem9udGFsVG9JbnRlZ2VyKHBvcHBlci5yaWdodClcbiAgfTtcbn1cblxudmFyIGlzRmlyZWZveCA9IGlzQnJvd3NlciAmJiAvRmlyZWZveC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgYHVwZGF0ZWAgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVTdHlsZShkYXRhLCBvcHRpb25zKSB7XG4gIHZhciB4ID0gb3B0aW9ucy54LFxuICAgICAgeSA9IG9wdGlvbnMueTtcbiAgdmFyIHBvcHBlciA9IGRhdGEub2Zmc2V0cy5wb3BwZXI7XG5cbiAgLy8gUmVtb3ZlIHRoaXMgbGVnYWN5IHN1cHBvcnQgaW4gUG9wcGVyLmpzIHYyXG5cbiAgdmFyIGxlZ2FjeUdwdUFjY2VsZXJhdGlvbk9wdGlvbiA9IGZpbmQoZGF0YS5pbnN0YW5jZS5tb2RpZmllcnMsIGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIHJldHVybiBtb2RpZmllci5uYW1lID09PSAnYXBwbHlTdHlsZSc7XG4gIH0pLmdwdUFjY2VsZXJhdGlvbjtcbiAgaWYgKGxlZ2FjeUdwdUFjY2VsZXJhdGlvbk9wdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc29sZS53YXJuKCdXQVJOSU5HOiBgZ3B1QWNjZWxlcmF0aW9uYCBvcHRpb24gbW92ZWQgdG8gYGNvbXB1dGVTdHlsZWAgbW9kaWZpZXIgYW5kIHdpbGwgbm90IGJlIHN1cHBvcnRlZCBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgUG9wcGVyLmpzIScpO1xuICB9XG4gIHZhciBncHVBY2NlbGVyYXRpb24gPSBsZWdhY3lHcHVBY2NlbGVyYXRpb25PcHRpb24gIT09IHVuZGVmaW5lZCA/IGxlZ2FjeUdwdUFjY2VsZXJhdGlvbk9wdGlvbiA6IG9wdGlvbnMuZ3B1QWNjZWxlcmF0aW9uO1xuXG4gIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQoZGF0YS5pbnN0YW5jZS5wb3BwZXIpO1xuICB2YXIgb2Zmc2V0UGFyZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQpO1xuXG4gIC8vIFN0eWxlc1xuICB2YXIgc3R5bGVzID0ge1xuICAgIHBvc2l0aW9uOiBwb3BwZXIucG9zaXRpb25cbiAgfTtcblxuICB2YXIgb2Zmc2V0cyA9IGdldFJvdW5kZWRPZmZzZXRzKGRhdGEsIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDwgMiB8fCAhaXNGaXJlZm94KTtcblxuICB2YXIgc2lkZUEgPSB4ID09PSAnYm90dG9tJyA/ICd0b3AnIDogJ2JvdHRvbSc7XG4gIHZhciBzaWRlQiA9IHkgPT09ICdyaWdodCcgPyAnbGVmdCcgOiAncmlnaHQnO1xuXG4gIC8vIGlmIGdwdUFjY2VsZXJhdGlvbiBpcyBzZXQgdG8gYHRydWVgIGFuZCB0cmFuc2Zvcm0gaXMgc3VwcG9ydGVkLFxuICAvLyAgd2UgdXNlIGB0cmFuc2xhdGUzZGAgdG8gYXBwbHkgdGhlIHBvc2l0aW9uIHRvIHRoZSBwb3BwZXIgd2VcbiAgLy8gYXV0b21hdGljYWxseSB1c2UgdGhlIHN1cHBvcnRlZCBwcmVmaXhlZCB2ZXJzaW9uIGlmIG5lZWRlZFxuICB2YXIgcHJlZml4ZWRQcm9wZXJ0eSA9IGdldFN1cHBvcnRlZFByb3BlcnR5TmFtZSgndHJhbnNmb3JtJyk7XG5cbiAgLy8gbm93LCBsZXQncyBtYWtlIGEgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHRoaXMgY29kZSBjbG9zZWx5ICh3dGY/KVxuICAvLyBJZiB0aGUgY29udGVudCBvZiB0aGUgcG9wcGVyIGdyb3dzIG9uY2UgaXQncyBiZWVuIHBvc2l0aW9uZWQsIGl0XG4gIC8vIG1heSBoYXBwZW4gdGhhdCB0aGUgcG9wcGVyIGdldHMgbWlzcGxhY2VkIGJlY2F1c2Ugb2YgdGhlIG5ldyBjb250ZW50XG4gIC8vIG92ZXJmbG93aW5nIGl0cyByZWZlcmVuY2UgZWxlbWVudFxuICAvLyBUbyBhdm9pZCB0aGlzIHByb2JsZW0sIHdlIHByb3ZpZGUgdHdvIG9wdGlvbnMgKHggYW5kIHkpLCB3aGljaCBhbGxvd1xuICAvLyB0aGUgY29uc3VtZXIgdG8gZGVmaW5lIHRoZSBvZmZzZXQgb3JpZ2luLlxuICAvLyBJZiB3ZSBwb3NpdGlvbiBhIHBvcHBlciBvbiB0b3Agb2YgYSByZWZlcmVuY2UgZWxlbWVudCwgd2UgY2FuIHNldFxuICAvLyBgeGAgdG8gYHRvcGAgdG8gbWFrZSB0aGUgcG9wcGVyIGdyb3cgdG93YXJkcyBpdHMgdG9wIGluc3RlYWQgb2ZcbiAgLy8gaXRzIGJvdHRvbS5cbiAgdmFyIGxlZnQgPSB2b2lkIDAsXG4gICAgICB0b3AgPSB2b2lkIDA7XG4gIGlmIChzaWRlQSA9PT0gJ2JvdHRvbScpIHtcbiAgICAvLyB3aGVuIG9mZnNldFBhcmVudCBpcyA8aHRtbD4gdGhlIHBvc2l0aW9uaW5nIGlzIHJlbGF0aXZlIHRvIHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbiAoZXhjbHVkaW5nIHRoZSBzY3JvbGxiYXIpXG4gICAgLy8gYW5kIG5vdCB0aGUgYm90dG9tIG9mIHRoZSBodG1sIGVsZW1lbnRcbiAgICBpZiAob2Zmc2V0UGFyZW50Lm5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICAgIHRvcCA9IC1vZmZzZXRQYXJlbnQuY2xpZW50SGVpZ2h0ICsgb2Zmc2V0cy5ib3R0b207XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvcCA9IC1vZmZzZXRQYXJlbnRSZWN0LmhlaWdodCArIG9mZnNldHMuYm90dG9tO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0b3AgPSBvZmZzZXRzLnRvcDtcbiAgfVxuICBpZiAoc2lkZUIgPT09ICdyaWdodCcpIHtcbiAgICBpZiAob2Zmc2V0UGFyZW50Lm5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICAgIGxlZnQgPSAtb2Zmc2V0UGFyZW50LmNsaWVudFdpZHRoICsgb2Zmc2V0cy5yaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGVmdCA9IC1vZmZzZXRQYXJlbnRSZWN0LndpZHRoICsgb2Zmc2V0cy5yaWdodDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGVmdCA9IG9mZnNldHMubGVmdDtcbiAgfVxuICBpZiAoZ3B1QWNjZWxlcmF0aW9uICYmIHByZWZpeGVkUHJvcGVydHkpIHtcbiAgICBzdHlsZXNbcHJlZml4ZWRQcm9wZXJ0eV0gPSAndHJhbnNsYXRlM2QoJyArIGxlZnQgKyAncHgsICcgKyB0b3AgKyAncHgsIDApJztcbiAgICBzdHlsZXNbc2lkZUFdID0gMDtcbiAgICBzdHlsZXNbc2lkZUJdID0gMDtcbiAgICBzdHlsZXMud2lsbENoYW5nZSA9ICd0cmFuc2Zvcm0nO1xuICB9IGVsc2Uge1xuICAgIC8vIG90aHdlcmlzZSwgd2UgdXNlIHRoZSBzdGFuZGFyZCBgdG9wYCwgYGxlZnRgLCBgYm90dG9tYCBhbmQgYHJpZ2h0YCBwcm9wZXJ0aWVzXG4gICAgdmFyIGludmVydFRvcCA9IHNpZGVBID09PSAnYm90dG9tJyA/IC0xIDogMTtcbiAgICB2YXIgaW52ZXJ0TGVmdCA9IHNpZGVCID09PSAncmlnaHQnID8gLTEgOiAxO1xuICAgIHN0eWxlc1tzaWRlQV0gPSB0b3AgKiBpbnZlcnRUb3A7XG4gICAgc3R5bGVzW3NpZGVCXSA9IGxlZnQgKiBpbnZlcnRMZWZ0O1xuICAgIHN0eWxlcy53aWxsQ2hhbmdlID0gc2lkZUEgKyAnLCAnICsgc2lkZUI7XG4gIH1cblxuICAvLyBBdHRyaWJ1dGVzXG4gIHZhciBhdHRyaWJ1dGVzID0ge1xuICAgICd4LXBsYWNlbWVudCc6IGRhdGEucGxhY2VtZW50XG4gIH07XG5cbiAgLy8gVXBkYXRlIGBkYXRhYCBhdHRyaWJ1dGVzLCBzdHlsZXMgYW5kIGFycm93U3R5bGVzXG4gIGRhdGEuYXR0cmlidXRlcyA9IF9leHRlbmRzKHt9LCBhdHRyaWJ1dGVzLCBkYXRhLmF0dHJpYnV0ZXMpO1xuICBkYXRhLnN0eWxlcyA9IF9leHRlbmRzKHt9LCBzdHlsZXMsIGRhdGEuc3R5bGVzKTtcbiAgZGF0YS5hcnJvd1N0eWxlcyA9IF9leHRlbmRzKHt9LCBkYXRhLm9mZnNldHMuYXJyb3csIGRhdGEuYXJyb3dTdHlsZXMpO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEhlbHBlciB1c2VkIHRvIGtub3cgaWYgdGhlIGdpdmVuIG1vZGlmaWVyIGRlcGVuZHMgZnJvbSBhbm90aGVyIG9uZS48YnIgLz5cbiAqIEl0IGNoZWNrcyBpZiB0aGUgbmVlZGVkIG1vZGlmaWVyIGlzIGxpc3RlZCBhbmQgZW5hYmxlZC5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7QXJyYXl9IG1vZGlmaWVycyAtIGxpc3Qgb2YgbW9kaWZpZXJzXG4gKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdGluZ05hbWUgLSBuYW1lIG9mIHJlcXVlc3RpbmcgbW9kaWZpZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0ZWROYW1lIC0gbmFtZSBvZiByZXF1ZXN0ZWQgbW9kaWZpZXJcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBpc01vZGlmaWVyUmVxdWlyZWQobW9kaWZpZXJzLCByZXF1ZXN0aW5nTmFtZSwgcmVxdWVzdGVkTmFtZSkge1xuICB2YXIgcmVxdWVzdGluZyA9IGZpbmQobW9kaWZpZXJzLCBmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBuYW1lID0gX3JlZi5uYW1lO1xuICAgIHJldHVybiBuYW1lID09PSByZXF1ZXN0aW5nTmFtZTtcbiAgfSk7XG5cbiAgdmFyIGlzUmVxdWlyZWQgPSAhIXJlcXVlc3RpbmcgJiYgbW9kaWZpZXJzLnNvbWUoZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgcmV0dXJuIG1vZGlmaWVyLm5hbWUgPT09IHJlcXVlc3RlZE5hbWUgJiYgbW9kaWZpZXIuZW5hYmxlZCAmJiBtb2RpZmllci5vcmRlciA8IHJlcXVlc3Rpbmcub3JkZXI7XG4gIH0pO1xuXG4gIGlmICghaXNSZXF1aXJlZCkge1xuICAgIHZhciBfcmVxdWVzdGluZyA9ICdgJyArIHJlcXVlc3RpbmdOYW1lICsgJ2AnO1xuICAgIHZhciByZXF1ZXN0ZWQgPSAnYCcgKyByZXF1ZXN0ZWROYW1lICsgJ2AnO1xuICAgIGNvbnNvbGUud2FybihyZXF1ZXN0ZWQgKyAnIG1vZGlmaWVyIGlzIHJlcXVpcmVkIGJ5ICcgKyBfcmVxdWVzdGluZyArICcgbW9kaWZpZXIgaW4gb3JkZXIgdG8gd29yaywgYmUgc3VyZSB0byBpbmNsdWRlIGl0IGJlZm9yZSAnICsgX3JlcXVlc3RpbmcgKyAnIScpO1xuICB9XG4gIHJldHVybiBpc1JlcXVpcmVkO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHVwZGF0ZSBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gYXJyb3coZGF0YSwgb3B0aW9ucykge1xuICB2YXIgX2RhdGEkb2Zmc2V0cyRhcnJvdztcblxuICAvLyBhcnJvdyBkZXBlbmRzIG9uIGtlZXBUb2dldGhlciBpbiBvcmRlciB0byB3b3JrXG4gIGlmICghaXNNb2RpZmllclJlcXVpcmVkKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCAnYXJyb3cnLCAna2VlcFRvZ2V0aGVyJykpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHZhciBhcnJvd0VsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQ7XG5cbiAgLy8gaWYgYXJyb3dFbGVtZW50IGlzIGEgc3RyaW5nLCBzdXBwb3NlIGl0J3MgYSBDU1Mgc2VsZWN0b3JcbiAgaWYgKHR5cGVvZiBhcnJvd0VsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgYXJyb3dFbGVtZW50ID0gZGF0YS5pbnN0YW5jZS5wb3BwZXIucXVlcnlTZWxlY3RvcihhcnJvd0VsZW1lbnQpO1xuXG4gICAgLy8gaWYgYXJyb3dFbGVtZW50IGlzIG5vdCBmb3VuZCwgZG9uJ3QgcnVuIHRoZSBtb2RpZmllclxuICAgIGlmICghYXJyb3dFbGVtZW50KSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgdGhlIGFycm93RWxlbWVudCBpc24ndCBhIHF1ZXJ5IHNlbGVjdG9yIHdlIG11c3QgY2hlY2sgdGhhdCB0aGVcbiAgICAvLyBwcm92aWRlZCBET00gbm9kZSBpcyBjaGlsZCBvZiBpdHMgcG9wcGVyIG5vZGVcbiAgICBpZiAoIWRhdGEuaW5zdGFuY2UucG9wcGVyLmNvbnRhaW5zKGFycm93RWxlbWVudCkpIHtcbiAgICAgIGNvbnNvbGUud2FybignV0FSTklORzogYGFycm93LmVsZW1lbnRgIG11c3QgYmUgY2hpbGQgb2YgaXRzIHBvcHBlciBlbGVtZW50IScpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICB9XG5cbiAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gIHZhciBfZGF0YSRvZmZzZXRzID0gZGF0YS5vZmZzZXRzLFxuICAgICAgcG9wcGVyID0gX2RhdGEkb2Zmc2V0cy5wb3BwZXIsXG4gICAgICByZWZlcmVuY2UgPSBfZGF0YSRvZmZzZXRzLnJlZmVyZW5jZTtcblxuICB2YXIgaXNWZXJ0aWNhbCA9IFsnbGVmdCcsICdyaWdodCddLmluZGV4T2YocGxhY2VtZW50KSAhPT0gLTE7XG5cbiAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gIHZhciBzaWRlQ2FwaXRhbGl6ZWQgPSBpc1ZlcnRpY2FsID8gJ1RvcCcgOiAnTGVmdCc7XG4gIHZhciBzaWRlID0gc2lkZUNhcGl0YWxpemVkLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBhbHRTaWRlID0gaXNWZXJ0aWNhbCA/ICdsZWZ0JyA6ICd0b3AnO1xuICB2YXIgb3BTaWRlID0gaXNWZXJ0aWNhbCA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgdmFyIGFycm93RWxlbWVudFNpemUgPSBnZXRPdXRlclNpemVzKGFycm93RWxlbWVudClbbGVuXTtcblxuICAvL1xuICAvLyBleHRlbmRzIGtlZXBUb2dldGhlciBiZWhhdmlvciBtYWtpbmcgc3VyZSB0aGUgcG9wcGVyIGFuZCBpdHNcbiAgLy8gcmVmZXJlbmNlIGhhdmUgZW5vdWdoIHBpeGVscyBpbiBjb25qdW5jdGlvblxuICAvL1xuXG4gIC8vIHRvcC9sZWZ0IHNpZGVcbiAgaWYgKHJlZmVyZW5jZVtvcFNpZGVdIC0gYXJyb3dFbGVtZW50U2l6ZSA8IHBvcHBlcltzaWRlXSkge1xuICAgIGRhdGEub2Zmc2V0cy5wb3BwZXJbc2lkZV0gLT0gcG9wcGVyW3NpZGVdIC0gKHJlZmVyZW5jZVtvcFNpZGVdIC0gYXJyb3dFbGVtZW50U2l6ZSk7XG4gIH1cbiAgLy8gYm90dG9tL3JpZ2h0IHNpZGVcbiAgaWYgKHJlZmVyZW5jZVtzaWRlXSArIGFycm93RWxlbWVudFNpemUgPiBwb3BwZXJbb3BTaWRlXSkge1xuICAgIGRhdGEub2Zmc2V0cy5wb3BwZXJbc2lkZV0gKz0gcmVmZXJlbmNlW3NpZGVdICsgYXJyb3dFbGVtZW50U2l6ZSAtIHBvcHBlcltvcFNpZGVdO1xuICB9XG4gIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSBnZXRDbGllbnRSZWN0KGRhdGEub2Zmc2V0cy5wb3BwZXIpO1xuXG4gIC8vIGNvbXB1dGUgY2VudGVyIG9mIHRoZSBwb3BwZXJcbiAgdmFyIGNlbnRlciA9IHJlZmVyZW5jZVtzaWRlXSArIHJlZmVyZW5jZVtsZW5dIC8gMiAtIGFycm93RWxlbWVudFNpemUgLyAyO1xuXG4gIC8vIENvbXB1dGUgdGhlIHNpZGVWYWx1ZSB1c2luZyB0aGUgdXBkYXRlZCBwb3BwZXIgb2Zmc2V0c1xuICAvLyB0YWtlIHBvcHBlciBtYXJnaW4gaW4gYWNjb3VudCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdGhpcyBpbmZvIGF2YWlsYWJsZVxuICB2YXIgY3NzID0gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGRhdGEuaW5zdGFuY2UucG9wcGVyKTtcbiAgdmFyIHBvcHBlck1hcmdpblNpZGUgPSBwYXJzZUZsb2F0KGNzc1snbWFyZ2luJyArIHNpZGVDYXBpdGFsaXplZF0sIDEwKTtcbiAgdmFyIHBvcHBlckJvcmRlclNpZGUgPSBwYXJzZUZsb2F0KGNzc1snYm9yZGVyJyArIHNpZGVDYXBpdGFsaXplZCArICdXaWR0aCddLCAxMCk7XG4gIHZhciBzaWRlVmFsdWUgPSBjZW50ZXIgLSBkYXRhLm9mZnNldHMucG9wcGVyW3NpZGVdIC0gcG9wcGVyTWFyZ2luU2lkZSAtIHBvcHBlckJvcmRlclNpZGU7XG5cbiAgLy8gcHJldmVudCBhcnJvd0VsZW1lbnQgZnJvbSBiZWluZyBwbGFjZWQgbm90IGNvbnRpZ3VvdXNseSB0byBpdHMgcG9wcGVyXG4gIHNpZGVWYWx1ZSA9IE1hdGgubWF4KE1hdGgubWluKHBvcHBlcltsZW5dIC0gYXJyb3dFbGVtZW50U2l6ZSwgc2lkZVZhbHVlKSwgMCk7XG5cbiAgZGF0YS5hcnJvd0VsZW1lbnQgPSBhcnJvd0VsZW1lbnQ7XG4gIGRhdGEub2Zmc2V0cy5hcnJvdyA9IChfZGF0YSRvZmZzZXRzJGFycm93ID0ge30sIGRlZmluZVByb3BlcnR5KF9kYXRhJG9mZnNldHMkYXJyb3csIHNpZGUsIE1hdGgucm91bmQoc2lkZVZhbHVlKSksIGRlZmluZVByb3BlcnR5KF9kYXRhJG9mZnNldHMkYXJyb3csIGFsdFNpZGUsICcnKSwgX2RhdGEkb2Zmc2V0cyRhcnJvdyk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogR2V0IHRoZSBvcHBvc2l0ZSBwbGFjZW1lbnQgdmFyaWF0aW9uIG9mIHRoZSBnaXZlbiBvbmVcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBwbGFjZW1lbnQgdmFyaWF0aW9uXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBmbGlwcGVkIHBsYWNlbWVudCB2YXJpYXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVWYXJpYXRpb24odmFyaWF0aW9uKSB7XG4gIGlmICh2YXJpYXRpb24gPT09ICdlbmQnKSB7XG4gICAgcmV0dXJuICdzdGFydCc7XG4gIH0gZWxzZSBpZiAodmFyaWF0aW9uID09PSAnc3RhcnQnKSB7XG4gICAgcmV0dXJuICdlbmQnO1xuICB9XG4gIHJldHVybiB2YXJpYXRpb247XG59XG5cbi8qKlxuICogTGlzdCBvZiBhY2NlcHRlZCBwbGFjZW1lbnRzIHRvIHVzZSBhcyB2YWx1ZXMgb2YgdGhlIGBwbGFjZW1lbnRgIG9wdGlvbi48YnIgLz5cbiAqIFZhbGlkIHBsYWNlbWVudHMgYXJlOlxuICogLSBgYXV0b2BcbiAqIC0gYHRvcGBcbiAqIC0gYHJpZ2h0YFxuICogLSBgYm90dG9tYFxuICogLSBgbGVmdGBcbiAqXG4gKiBFYWNoIHBsYWNlbWVudCBjYW4gaGF2ZSBhIHZhcmlhdGlvbiBmcm9tIHRoaXMgbGlzdDpcbiAqIC0gYC1zdGFydGBcbiAqIC0gYC1lbmRgXG4gKlxuICogVmFyaWF0aW9ucyBhcmUgaW50ZXJwcmV0ZWQgZWFzaWx5IGlmIHlvdSB0aGluayBvZiB0aGVtIGFzIHRoZSBsZWZ0IHRvIHJpZ2h0XG4gKiB3cml0dGVuIGxhbmd1YWdlcy4gSG9yaXpvbnRhbGx5IChgdG9wYCBhbmQgYGJvdHRvbWApLCBgc3RhcnRgIGlzIGxlZnQgYW5kIGBlbmRgXG4gKiBpcyByaWdodC48YnIgLz5cbiAqIFZlcnRpY2FsbHkgKGBsZWZ0YCBhbmQgYHJpZ2h0YCksIGBzdGFydGAgaXMgdG9wIGFuZCBgZW5kYCBpcyBib3R0b20uXG4gKlxuICogU29tZSB2YWxpZCBleGFtcGxlcyBhcmU6XG4gKiAtIGB0b3AtZW5kYCAob24gdG9wIG9mIHJlZmVyZW5jZSwgcmlnaHQgYWxpZ25lZClcbiAqIC0gYHJpZ2h0LXN0YXJ0YCAob24gcmlnaHQgb2YgcmVmZXJlbmNlLCB0b3AgYWxpZ25lZClcbiAqIC0gYGJvdHRvbWAgKG9uIGJvdHRvbSwgY2VudGVyZWQpXG4gKiAtIGBhdXRvLWVuZGAgKG9uIHRoZSBzaWRlIHdpdGggbW9yZSBzcGFjZSBhdmFpbGFibGUsIGFsaWdubWVudCBkZXBlbmRzIGJ5IHBsYWNlbWVudClcbiAqXG4gKiBAc3RhdGljXG4gKiBAdHlwZSB7QXJyYXl9XG4gKiBAZW51bSB7U3RyaW5nfVxuICogQHJlYWRvbmx5XG4gKiBAbWV0aG9kIHBsYWNlbWVudHNcbiAqIEBtZW1iZXJvZiBQb3BwZXJcbiAqL1xudmFyIHBsYWNlbWVudHMgPSBbJ2F1dG8tc3RhcnQnLCAnYXV0bycsICdhdXRvLWVuZCcsICd0b3Atc3RhcnQnLCAndG9wJywgJ3RvcC1lbmQnLCAncmlnaHQtc3RhcnQnLCAncmlnaHQnLCAncmlnaHQtZW5kJywgJ2JvdHRvbS1lbmQnLCAnYm90dG9tJywgJ2JvdHRvbS1zdGFydCcsICdsZWZ0LWVuZCcsICdsZWZ0JywgJ2xlZnQtc3RhcnQnXTtcblxuLy8gR2V0IHJpZCBvZiBgYXV0b2AgYGF1dG8tc3RhcnRgIGFuZCBgYXV0by1lbmRgXG52YXIgdmFsaWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cy5zbGljZSgzKTtcblxuLyoqXG4gKiBHaXZlbiBhbiBpbml0aWFsIHBsYWNlbWVudCwgcmV0dXJucyBhbGwgdGhlIHN1YnNlcXVlbnQgcGxhY2VtZW50c1xuICogY2xvY2t3aXNlIChvciBjb3VudGVyLWNsb2Nrd2lzZSkuXG4gKlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtTdHJpbmd9IHBsYWNlbWVudCAtIEEgdmFsaWQgcGxhY2VtZW50IChpdCBhY2NlcHRzIHZhcmlhdGlvbnMpXG4gKiBAYXJndW1lbnQge0Jvb2xlYW59IGNvdW50ZXIgLSBTZXQgdG8gdHJ1ZSB0byB3YWxrIHRoZSBwbGFjZW1lbnRzIGNvdW50ZXJjbG9ja3dpc2VcbiAqIEByZXR1cm5zIHtBcnJheX0gcGxhY2VtZW50cyBpbmNsdWRpbmcgdGhlaXIgdmFyaWF0aW9uc1xuICovXG5mdW5jdGlvbiBjbG9ja3dpc2UocGxhY2VtZW50KSB7XG4gIHZhciBjb3VudGVyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcblxuICB2YXIgaW5kZXggPSB2YWxpZFBsYWNlbWVudHMuaW5kZXhPZihwbGFjZW1lbnQpO1xuICB2YXIgYXJyID0gdmFsaWRQbGFjZW1lbnRzLnNsaWNlKGluZGV4ICsgMSkuY29uY2F0KHZhbGlkUGxhY2VtZW50cy5zbGljZSgwLCBpbmRleCkpO1xuICByZXR1cm4gY291bnRlciA/IGFyci5yZXZlcnNlKCkgOiBhcnI7XG59XG5cbnZhciBCRUhBVklPUlMgPSB7XG4gIEZMSVA6ICdmbGlwJyxcbiAgQ0xPQ0tXSVNFOiAnY2xvY2t3aXNlJyxcbiAgQ09VTlRFUkNMT0NLV0lTRTogJ2NvdW50ZXJjbG9ja3dpc2UnXG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHVwZGF0ZSBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gZmxpcChkYXRhLCBvcHRpb25zKSB7XG4gIC8vIGlmIGBpbm5lcmAgbW9kaWZpZXIgaXMgZW5hYmxlZCwgd2UgY2FuJ3QgdXNlIHRoZSBgZmxpcGAgbW9kaWZpZXJcbiAgaWYgKGlzTW9kaWZpZXJFbmFibGVkKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCAnaW5uZXInKSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgaWYgKGRhdGEuZmxpcHBlZCAmJiBkYXRhLnBsYWNlbWVudCA9PT0gZGF0YS5vcmlnaW5hbFBsYWNlbWVudCkge1xuICAgIC8vIHNlZW1zIGxpa2UgZmxpcCBpcyB0cnlpbmcgdG8gbG9vcCwgcHJvYmFibHkgdGhlcmUncyBub3QgZW5vdWdoIHNwYWNlIG9uIGFueSBvZiB0aGUgZmxpcHBhYmxlIHNpZGVzXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICB2YXIgYm91bmRhcmllcyA9IGdldEJvdW5kYXJpZXMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEuaW5zdGFuY2UucmVmZXJlbmNlLCBvcHRpb25zLnBhZGRpbmcsIG9wdGlvbnMuYm91bmRhcmllc0VsZW1lbnQsIGRhdGEucG9zaXRpb25GaXhlZCk7XG5cbiAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gIHZhciBwbGFjZW1lbnRPcHBvc2l0ZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHZhciB2YXJpYXRpb24gPSBkYXRhLnBsYWNlbWVudC5zcGxpdCgnLScpWzFdIHx8ICcnO1xuXG4gIHZhciBmbGlwT3JkZXIgPSBbXTtcblxuICBzd2l0Y2ggKG9wdGlvbnMuYmVoYXZpb3IpIHtcbiAgICBjYXNlIEJFSEFWSU9SUy5GTElQOlxuICAgICAgZmxpcE9yZGVyID0gW3BsYWNlbWVudCwgcGxhY2VtZW50T3Bwb3NpdGVdO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBCRUhBVklPUlMuQ0xPQ0tXSVNFOlxuICAgICAgZmxpcE9yZGVyID0gY2xvY2t3aXNlKHBsYWNlbWVudCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIEJFSEFWSU9SUy5DT1VOVEVSQ0xPQ0tXSVNFOlxuICAgICAgZmxpcE9yZGVyID0gY2xvY2t3aXNlKHBsYWNlbWVudCwgdHJ1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgZmxpcE9yZGVyID0gb3B0aW9ucy5iZWhhdmlvcjtcbiAgfVxuXG4gIGZsaXBPcmRlci5mb3JFYWNoKGZ1bmN0aW9uIChzdGVwLCBpbmRleCkge1xuICAgIGlmIChwbGFjZW1lbnQgIT09IHN0ZXAgfHwgZmxpcE9yZGVyLmxlbmd0aCA9PT0gaW5kZXggKyAxKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICAgIHBsYWNlbWVudE9wcG9zaXRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcblxuICAgIHZhciBwb3BwZXJPZmZzZXRzID0gZGF0YS5vZmZzZXRzLnBvcHBlcjtcbiAgICB2YXIgcmVmT2Zmc2V0cyA9IGRhdGEub2Zmc2V0cy5yZWZlcmVuY2U7XG5cbiAgICAvLyB1c2luZyBmbG9vciBiZWNhdXNlIHRoZSByZWZlcmVuY2Ugb2Zmc2V0cyBtYXkgY29udGFpbiBkZWNpbWFscyB3ZSBhcmUgbm90IGdvaW5nIHRvIGNvbnNpZGVyIGhlcmVcbiAgICB2YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuICAgIHZhciBvdmVybGFwc1JlZiA9IHBsYWNlbWVudCA9PT0gJ2xlZnQnICYmIGZsb29yKHBvcHBlck9mZnNldHMucmlnaHQpID4gZmxvb3IocmVmT2Zmc2V0cy5sZWZ0KSB8fCBwbGFjZW1lbnQgPT09ICdyaWdodCcgJiYgZmxvb3IocG9wcGVyT2Zmc2V0cy5sZWZ0KSA8IGZsb29yKHJlZk9mZnNldHMucmlnaHQpIHx8IHBsYWNlbWVudCA9PT0gJ3RvcCcgJiYgZmxvb3IocG9wcGVyT2Zmc2V0cy5ib3R0b20pID4gZmxvb3IocmVmT2Zmc2V0cy50b3ApIHx8IHBsYWNlbWVudCA9PT0gJ2JvdHRvbScgJiYgZmxvb3IocG9wcGVyT2Zmc2V0cy50b3ApIDwgZmxvb3IocmVmT2Zmc2V0cy5ib3R0b20pO1xuXG4gICAgdmFyIG92ZXJmbG93c0xlZnQgPSBmbG9vcihwb3BwZXJPZmZzZXRzLmxlZnQpIDwgZmxvb3IoYm91bmRhcmllcy5sZWZ0KTtcbiAgICB2YXIgb3ZlcmZsb3dzUmlnaHQgPSBmbG9vcihwb3BwZXJPZmZzZXRzLnJpZ2h0KSA+IGZsb29yKGJvdW5kYXJpZXMucmlnaHQpO1xuICAgIHZhciBvdmVyZmxvd3NUb3AgPSBmbG9vcihwb3BwZXJPZmZzZXRzLnRvcCkgPCBmbG9vcihib3VuZGFyaWVzLnRvcCk7XG4gICAgdmFyIG92ZXJmbG93c0JvdHRvbSA9IGZsb29yKHBvcHBlck9mZnNldHMuYm90dG9tKSA+IGZsb29yKGJvdW5kYXJpZXMuYm90dG9tKTtcblxuICAgIHZhciBvdmVyZmxvd3NCb3VuZGFyaWVzID0gcGxhY2VtZW50ID09PSAnbGVmdCcgJiYgb3ZlcmZsb3dzTGVmdCB8fCBwbGFjZW1lbnQgPT09ICdyaWdodCcgJiYgb3ZlcmZsb3dzUmlnaHQgfHwgcGxhY2VtZW50ID09PSAndG9wJyAmJiBvdmVyZmxvd3NUb3AgfHwgcGxhY2VtZW50ID09PSAnYm90dG9tJyAmJiBvdmVyZmxvd3NCb3R0b207XG5cbiAgICAvLyBmbGlwIHRoZSB2YXJpYXRpb24gaWYgcmVxdWlyZWRcbiAgICB2YXIgaXNWZXJ0aWNhbCA9IFsndG9wJywgJ2JvdHRvbSddLmluZGV4T2YocGxhY2VtZW50KSAhPT0gLTE7XG5cbiAgICAvLyBmbGlwcyB2YXJpYXRpb24gaWYgcmVmZXJlbmNlIGVsZW1lbnQgb3ZlcmZsb3dzIGJvdW5kYXJpZXNcbiAgICB2YXIgZmxpcHBlZFZhcmlhdGlvbkJ5UmVmID0gISFvcHRpb25zLmZsaXBWYXJpYXRpb25zICYmIChpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ3N0YXJ0JyAmJiBvdmVyZmxvd3NMZWZ0IHx8IGlzVmVydGljYWwgJiYgdmFyaWF0aW9uID09PSAnZW5kJyAmJiBvdmVyZmxvd3NSaWdodCB8fCAhaXNWZXJ0aWNhbCAmJiB2YXJpYXRpb24gPT09ICdzdGFydCcgJiYgb3ZlcmZsb3dzVG9wIHx8ICFpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ2VuZCcgJiYgb3ZlcmZsb3dzQm90dG9tKTtcblxuICAgIC8vIGZsaXBzIHZhcmlhdGlvbiBpZiBwb3BwZXIgY29udGVudCBvdmVyZmxvd3MgYm91bmRhcmllc1xuICAgIHZhciBmbGlwcGVkVmFyaWF0aW9uQnlDb250ZW50ID0gISFvcHRpb25zLmZsaXBWYXJpYXRpb25zQnlDb250ZW50ICYmIChpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ3N0YXJ0JyAmJiBvdmVyZmxvd3NSaWdodCB8fCBpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ2VuZCcgJiYgb3ZlcmZsb3dzTGVmdCB8fCAhaXNWZXJ0aWNhbCAmJiB2YXJpYXRpb24gPT09ICdzdGFydCcgJiYgb3ZlcmZsb3dzQm90dG9tIHx8ICFpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ2VuZCcgJiYgb3ZlcmZsb3dzVG9wKTtcblxuICAgIHZhciBmbGlwcGVkVmFyaWF0aW9uID0gZmxpcHBlZFZhcmlhdGlvbkJ5UmVmIHx8IGZsaXBwZWRWYXJpYXRpb25CeUNvbnRlbnQ7XG5cbiAgICBpZiAob3ZlcmxhcHNSZWYgfHwgb3ZlcmZsb3dzQm91bmRhcmllcyB8fCBmbGlwcGVkVmFyaWF0aW9uKSB7XG4gICAgICAvLyB0aGlzIGJvb2xlYW4gdG8gZGV0ZWN0IGFueSBmbGlwIGxvb3BcbiAgICAgIGRhdGEuZmxpcHBlZCA9IHRydWU7XG5cbiAgICAgIGlmIChvdmVybGFwc1JlZiB8fCBvdmVyZmxvd3NCb3VuZGFyaWVzKSB7XG4gICAgICAgIHBsYWNlbWVudCA9IGZsaXBPcmRlcltpbmRleCArIDFdO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmxpcHBlZFZhcmlhdGlvbikge1xuICAgICAgICB2YXJpYXRpb24gPSBnZXRPcHBvc2l0ZVZhcmlhdGlvbih2YXJpYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBkYXRhLnBsYWNlbWVudCA9IHBsYWNlbWVudCArICh2YXJpYXRpb24gPyAnLScgKyB2YXJpYXRpb24gOiAnJyk7XG5cbiAgICAgIC8vIHRoaXMgb2JqZWN0IGNvbnRhaW5zIGBwb3NpdGlvbmAsIHdlIHdhbnQgdG8gcHJlc2VydmUgaXQgYWxvbmcgd2l0aFxuICAgICAgLy8gYW55IGFkZGl0aW9uYWwgcHJvcGVydHkgd2UgbWF5IGFkZCBpbiB0aGUgZnV0dXJlXG4gICAgICBkYXRhLm9mZnNldHMucG9wcGVyID0gX2V4dGVuZHMoe30sIGRhdGEub2Zmc2V0cy5wb3BwZXIsIGdldFBvcHBlck9mZnNldHMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UsIGRhdGEucGxhY2VtZW50KSk7XG5cbiAgICAgIGRhdGEgPSBydW5Nb2RpZmllcnMoZGF0YS5pbnN0YW5jZS5tb2RpZmllcnMsIGRhdGEsICdmbGlwJyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgdXBkYXRlIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBrZWVwVG9nZXRoZXIoZGF0YSkge1xuICB2YXIgX2RhdGEkb2Zmc2V0cyA9IGRhdGEub2Zmc2V0cyxcbiAgICAgIHBvcHBlciA9IF9kYXRhJG9mZnNldHMucG9wcGVyLFxuICAgICAgcmVmZXJlbmNlID0gX2RhdGEkb2Zmc2V0cy5yZWZlcmVuY2U7XG5cbiAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gIHZhciBmbG9vciA9IE1hdGguZmxvb3I7XG4gIHZhciBpc1ZlcnRpY2FsID0gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMTtcbiAgdmFyIHNpZGUgPSBpc1ZlcnRpY2FsID8gJ3JpZ2h0JyA6ICdib3R0b20nO1xuICB2YXIgb3BTaWRlID0gaXNWZXJ0aWNhbCA/ICdsZWZ0JyA6ICd0b3AnO1xuICB2YXIgbWVhc3VyZW1lbnQgPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuXG4gIGlmIChwb3BwZXJbc2lkZV0gPCBmbG9vcihyZWZlcmVuY2Vbb3BTaWRlXSkpIHtcbiAgICBkYXRhLm9mZnNldHMucG9wcGVyW29wU2lkZV0gPSBmbG9vcihyZWZlcmVuY2Vbb3BTaWRlXSkgLSBwb3BwZXJbbWVhc3VyZW1lbnRdO1xuICB9XG4gIGlmIChwb3BwZXJbb3BTaWRlXSA+IGZsb29yKHJlZmVyZW5jZVtzaWRlXSkpIHtcbiAgICBkYXRhLm9mZnNldHMucG9wcGVyW29wU2lkZV0gPSBmbG9vcihyZWZlcmVuY2Vbc2lkZV0pO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgY29udGFpbmluZyB2YWx1ZSArIHVuaXQgaW50byBhIHB4IHZhbHVlIG51bWJlclxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2Yge21vZGlmaWVyc35vZmZzZXR9XG4gKiBAcHJpdmF0ZVxuICogQGFyZ3VtZW50IHtTdHJpbmd9IHN0ciAtIFZhbHVlICsgdW5pdCBzdHJpbmdcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBtZWFzdXJlbWVudCAtIGBoZWlnaHRgIG9yIGB3aWR0aGBcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBwb3BwZXJPZmZzZXRzXG4gKiBAYXJndW1lbnQge09iamVjdH0gcmVmZXJlbmNlT2Zmc2V0c1xuICogQHJldHVybnMge051bWJlcnxTdHJpbmd9XG4gKiBWYWx1ZSBpbiBwaXhlbHMsIG9yIG9yaWdpbmFsIHN0cmluZyBpZiBubyB2YWx1ZXMgd2VyZSBleHRyYWN0ZWRcbiAqL1xuZnVuY3Rpb24gdG9WYWx1ZShzdHIsIG1lYXN1cmVtZW50LCBwb3BwZXJPZmZzZXRzLCByZWZlcmVuY2VPZmZzZXRzKSB7XG4gIC8vIHNlcGFyYXRlIHZhbHVlIGZyb20gdW5pdFxuICB2YXIgc3BsaXQgPSBzdHIubWF0Y2goLygoPzpcXC18XFwrKT9cXGQqXFwuP1xcZCopKC4qKS8pO1xuICB2YXIgdmFsdWUgPSArc3BsaXRbMV07XG4gIHZhciB1bml0ID0gc3BsaXRbMl07XG5cbiAgLy8gSWYgaXQncyBub3QgYSBudW1iZXIgaXQncyBhbiBvcGVyYXRvciwgSSBndWVzc1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIGlmICh1bml0LmluZGV4T2YoJyUnKSA9PT0gMCkge1xuICAgIHZhciBlbGVtZW50ID0gdm9pZCAwO1xuICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgY2FzZSAnJXAnOlxuICAgICAgICBlbGVtZW50ID0gcG9wcGVyT2Zmc2V0cztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICclJzpcbiAgICAgIGNhc2UgJyVyJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGVsZW1lbnQgPSByZWZlcmVuY2VPZmZzZXRzO1xuICAgIH1cblxuICAgIHZhciByZWN0ID0gZ2V0Q2xpZW50UmVjdChlbGVtZW50KTtcbiAgICByZXR1cm4gcmVjdFttZWFzdXJlbWVudF0gLyAxMDAgKiB2YWx1ZTtcbiAgfSBlbHNlIGlmICh1bml0ID09PSAndmgnIHx8IHVuaXQgPT09ICd2dycpIHtcbiAgICAvLyBpZiBpcyBhIHZoIG9yIHZ3LCB3ZSBjYWxjdWxhdGUgdGhlIHNpemUgYmFzZWQgb24gdGhlIHZpZXdwb3J0XG4gICAgdmFyIHNpemUgPSB2b2lkIDA7XG4gICAgaWYgKHVuaXQgPT09ICd2aCcpIHtcbiAgICAgIHNpemUgPSBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNpemUgPSBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApO1xuICAgIH1cbiAgICByZXR1cm4gc2l6ZSAvIDEwMCAqIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIC8vIGlmIGlzIGFuIGV4cGxpY2l0IHBpeGVsIHVuaXQsIHdlIGdldCByaWQgb2YgdGhlIHVuaXQgYW5kIGtlZXAgdGhlIHZhbHVlXG4gICAgLy8gaWYgaXMgYW4gaW1wbGljaXQgdW5pdCwgaXQncyBweCwgYW5kIHdlIHJldHVybiBqdXN0IHRoZSB2YWx1ZVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlIGFuIGBvZmZzZXRgIHN0cmluZyB0byBleHRyYXBvbGF0ZSBgeGAgYW5kIGB5YCBudW1lcmljIG9mZnNldHMuXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiB7bW9kaWZpZXJzfm9mZnNldH1cbiAqIEBwcml2YXRlXG4gKiBAYXJndW1lbnQge1N0cmluZ30gb2Zmc2V0XG4gKiBAYXJndW1lbnQge09iamVjdH0gcG9wcGVyT2Zmc2V0c1xuICogQGFyZ3VtZW50IHtPYmplY3R9IHJlZmVyZW5jZU9mZnNldHNcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBiYXNlUGxhY2VtZW50XG4gKiBAcmV0dXJucyB7QXJyYXl9IGEgdHdvIGNlbGxzIGFycmF5IHdpdGggeCBhbmQgeSBvZmZzZXRzIGluIG51bWJlcnNcbiAqL1xuZnVuY3Rpb24gcGFyc2VPZmZzZXQob2Zmc2V0LCBwb3BwZXJPZmZzZXRzLCByZWZlcmVuY2VPZmZzZXRzLCBiYXNlUGxhY2VtZW50KSB7XG4gIHZhciBvZmZzZXRzID0gWzAsIDBdO1xuXG4gIC8vIFVzZSBoZWlnaHQgaWYgcGxhY2VtZW50IGlzIGxlZnQgb3IgcmlnaHQgYW5kIGluZGV4IGlzIDAgb3RoZXJ3aXNlIHVzZSB3aWR0aFxuICAvLyBpbiB0aGlzIHdheSB0aGUgZmlyc3Qgb2Zmc2V0IHdpbGwgdXNlIGFuIGF4aXMgYW5kIHRoZSBzZWNvbmQgb25lXG4gIC8vIHdpbGwgdXNlIHRoZSBvdGhlciBvbmVcbiAgdmFyIHVzZUhlaWdodCA9IFsncmlnaHQnLCAnbGVmdCddLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgIT09IC0xO1xuXG4gIC8vIFNwbGl0IHRoZSBvZmZzZXQgc3RyaW5nIHRvIG9idGFpbiBhIGxpc3Qgb2YgdmFsdWVzIGFuZCBvcGVyYW5kc1xuICAvLyBUaGUgcmVnZXggYWRkcmVzc2VzIHZhbHVlcyB3aXRoIHRoZSBwbHVzIG9yIG1pbnVzIHNpZ24gaW4gZnJvbnQgKCsxMCwgLTIwLCBldGMpXG4gIHZhciBmcmFnbWVudHMgPSBvZmZzZXQuc3BsaXQoLyhcXCt8XFwtKS8pLm1hcChmdW5jdGlvbiAoZnJhZykge1xuICAgIHJldHVybiBmcmFnLnRyaW0oKTtcbiAgfSk7XG5cbiAgLy8gRGV0ZWN0IGlmIHRoZSBvZmZzZXQgc3RyaW5nIGNvbnRhaW5zIGEgcGFpciBvZiB2YWx1ZXMgb3IgYSBzaW5nbGUgb25lXG4gIC8vIHRoZXkgY291bGQgYmUgc2VwYXJhdGVkIGJ5IGNvbW1hIG9yIHNwYWNlXG4gIHZhciBkaXZpZGVyID0gZnJhZ21lbnRzLmluZGV4T2YoZmluZChmcmFnbWVudHMsIGZ1bmN0aW9uIChmcmFnKSB7XG4gICAgcmV0dXJuIGZyYWcuc2VhcmNoKC8sfFxccy8pICE9PSAtMTtcbiAgfSkpO1xuXG4gIGlmIChmcmFnbWVudHNbZGl2aWRlcl0gJiYgZnJhZ21lbnRzW2RpdmlkZXJdLmluZGV4T2YoJywnKSA9PT0gLTEpIHtcbiAgICBjb25zb2xlLndhcm4oJ09mZnNldHMgc2VwYXJhdGVkIGJ5IHdoaXRlIHNwYWNlKHMpIGFyZSBkZXByZWNhdGVkLCB1c2UgYSBjb21tYSAoLCkgaW5zdGVhZC4nKTtcbiAgfVxuXG4gIC8vIElmIGRpdmlkZXIgaXMgZm91bmQsIHdlIGRpdmlkZSB0aGUgbGlzdCBvZiB2YWx1ZXMgYW5kIG9wZXJhbmRzIHRvIGRpdmlkZVxuICAvLyB0aGVtIGJ5IG9mc2V0IFggYW5kIFkuXG4gIHZhciBzcGxpdFJlZ2V4ID0gL1xccyosXFxzKnxcXHMrLztcbiAgdmFyIG9wcyA9IGRpdmlkZXIgIT09IC0xID8gW2ZyYWdtZW50cy5zbGljZSgwLCBkaXZpZGVyKS5jb25jYXQoW2ZyYWdtZW50c1tkaXZpZGVyXS5zcGxpdChzcGxpdFJlZ2V4KVswXV0pLCBbZnJhZ21lbnRzW2RpdmlkZXJdLnNwbGl0KHNwbGl0UmVnZXgpWzFdXS5jb25jYXQoZnJhZ21lbnRzLnNsaWNlKGRpdmlkZXIgKyAxKSldIDogW2ZyYWdtZW50c107XG5cbiAgLy8gQ29udmVydCB0aGUgdmFsdWVzIHdpdGggdW5pdHMgdG8gYWJzb2x1dGUgcGl4ZWxzIHRvIGFsbG93IG91ciBjb21wdXRhdGlvbnNcbiAgb3BzID0gb3BzLm1hcChmdW5jdGlvbiAob3AsIGluZGV4KSB7XG4gICAgLy8gTW9zdCBvZiB0aGUgdW5pdHMgcmVseSBvbiB0aGUgb3JpZW50YXRpb24gb2YgdGhlIHBvcHBlclxuICAgIHZhciBtZWFzdXJlbWVudCA9IChpbmRleCA9PT0gMSA/ICF1c2VIZWlnaHQgOiB1c2VIZWlnaHQpID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgIHZhciBtZXJnZVdpdGhQcmV2aW91cyA9IGZhbHNlO1xuICAgIHJldHVybiBvcFxuICAgIC8vIFRoaXMgYWdncmVnYXRlcyBhbnkgYCtgIG9yIGAtYCBzaWduIHRoYXQgYXJlbid0IGNvbnNpZGVyZWQgb3BlcmF0b3JzXG4gICAgLy8gZS5nLjogMTAgKyArNSA9PiBbMTAsICssICs1XVxuICAgIC5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIGlmIChhW2EubGVuZ3RoIC0gMV0gPT09ICcnICYmIFsnKycsICctJ10uaW5kZXhPZihiKSAhPT0gLTEpIHtcbiAgICAgICAgYVthLmxlbmd0aCAtIDFdID0gYjtcbiAgICAgICAgbWVyZ2VXaXRoUHJldmlvdXMgPSB0cnVlO1xuICAgICAgICByZXR1cm4gYTtcbiAgICAgIH0gZWxzZSBpZiAobWVyZ2VXaXRoUHJldmlvdXMpIHtcbiAgICAgICAgYVthLmxlbmd0aCAtIDFdICs9IGI7XG4gICAgICAgIG1lcmdlV2l0aFByZXZpb3VzID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGEuY29uY2F0KGIpO1xuICAgICAgfVxuICAgIH0sIFtdKVxuICAgIC8vIEhlcmUgd2UgY29udmVydCB0aGUgc3RyaW5nIHZhbHVlcyBpbnRvIG51bWJlciB2YWx1ZXMgKGluIHB4KVxuICAgIC5tYXAoZnVuY3Rpb24gKHN0cikge1xuICAgICAgcmV0dXJuIHRvVmFsdWUoc3RyLCBtZWFzdXJlbWVudCwgcG9wcGVyT2Zmc2V0cywgcmVmZXJlbmNlT2Zmc2V0cyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIExvb3AgdHJvdWdoIHRoZSBvZmZzZXRzIGFycmF5cyBhbmQgZXhlY3V0ZSB0aGUgb3BlcmF0aW9uc1xuICBvcHMuZm9yRWFjaChmdW5jdGlvbiAob3AsIGluZGV4KSB7XG4gICAgb3AuZm9yRWFjaChmdW5jdGlvbiAoZnJhZywgaW5kZXgyKSB7XG4gICAgICBpZiAoaXNOdW1lcmljKGZyYWcpKSB7XG4gICAgICAgIG9mZnNldHNbaW5kZXhdICs9IGZyYWcgKiAob3BbaW5kZXgyIC0gMV0gPT09ICctJyA/IC0xIDogMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gb2Zmc2V0cztcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBNb2RpZmllcnNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSB1cGRhdGUgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAYXJndW1lbnQge051bWJlcnxTdHJpbmd9IG9wdGlvbnMub2Zmc2V0PTBcbiAqIFRoZSBvZmZzZXQgdmFsdWUgYXMgZGVzY3JpYmVkIGluIHRoZSBtb2RpZmllciBkZXNjcmlwdGlvblxuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBvZmZzZXQoZGF0YSwgX3JlZikge1xuICB2YXIgb2Zmc2V0ID0gX3JlZi5vZmZzZXQ7XG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudCxcbiAgICAgIF9kYXRhJG9mZnNldHMgPSBkYXRhLm9mZnNldHMsXG4gICAgICBwb3BwZXIgPSBfZGF0YSRvZmZzZXRzLnBvcHBlcixcbiAgICAgIHJlZmVyZW5jZSA9IF9kYXRhJG9mZnNldHMucmVmZXJlbmNlO1xuXG4gIHZhciBiYXNlUGxhY2VtZW50ID0gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG5cbiAgdmFyIG9mZnNldHMgPSB2b2lkIDA7XG4gIGlmIChpc051bWVyaWMoK29mZnNldCkpIHtcbiAgICBvZmZzZXRzID0gWytvZmZzZXQsIDBdO1xuICB9IGVsc2Uge1xuICAgIG9mZnNldHMgPSBwYXJzZU9mZnNldChvZmZzZXQsIHBvcHBlciwgcmVmZXJlbmNlLCBiYXNlUGxhY2VtZW50KTtcbiAgfVxuXG4gIGlmIChiYXNlUGxhY2VtZW50ID09PSAnbGVmdCcpIHtcbiAgICBwb3BwZXIudG9wICs9IG9mZnNldHNbMF07XG4gICAgcG9wcGVyLmxlZnQgLT0gb2Zmc2V0c1sxXTtcbiAgfSBlbHNlIGlmIChiYXNlUGxhY2VtZW50ID09PSAncmlnaHQnKSB7XG4gICAgcG9wcGVyLnRvcCArPSBvZmZzZXRzWzBdO1xuICAgIHBvcHBlci5sZWZ0ICs9IG9mZnNldHNbMV07XG4gIH0gZWxzZSBpZiAoYmFzZVBsYWNlbWVudCA9PT0gJ3RvcCcpIHtcbiAgICBwb3BwZXIubGVmdCArPSBvZmZzZXRzWzBdO1xuICAgIHBvcHBlci50b3AgLT0gb2Zmc2V0c1sxXTtcbiAgfSBlbHNlIGlmIChiYXNlUGxhY2VtZW50ID09PSAnYm90dG9tJykge1xuICAgIHBvcHBlci5sZWZ0ICs9IG9mZnNldHNbMF07XG4gICAgcG9wcGVyLnRvcCArPSBvZmZzZXRzWzFdO1xuICB9XG5cbiAgZGF0YS5wb3BwZXIgPSBwb3BwZXI7XG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IGB1cGRhdGVgIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBwcmV2ZW50T3ZlcmZsb3coZGF0YSwgb3B0aW9ucykge1xuICB2YXIgYm91bmRhcmllc0VsZW1lbnQgPSBvcHRpb25zLmJvdW5kYXJpZXNFbGVtZW50IHx8IGdldE9mZnNldFBhcmVudChkYXRhLmluc3RhbmNlLnBvcHBlcik7XG5cbiAgLy8gSWYgb2Zmc2V0UGFyZW50IGlzIHRoZSByZWZlcmVuY2UgZWxlbWVudCwgd2UgcmVhbGx5IHdhbnQgdG9cbiAgLy8gZ28gb25lIHN0ZXAgdXAgYW5kIHVzZSB0aGUgbmV4dCBvZmZzZXRQYXJlbnQgYXMgcmVmZXJlbmNlIHRvXG4gIC8vIGF2b2lkIHRvIG1ha2UgdGhpcyBtb2RpZmllciBjb21wbGV0ZWx5IHVzZWxlc3MgYW5kIGxvb2sgbGlrZSBicm9rZW5cbiAgaWYgKGRhdGEuaW5zdGFuY2UucmVmZXJlbmNlID09PSBib3VuZGFyaWVzRWxlbWVudCkge1xuICAgIGJvdW5kYXJpZXNFbGVtZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGJvdW5kYXJpZXNFbGVtZW50KTtcbiAgfVxuXG4gIC8vIE5PVEU6IERPTSBhY2Nlc3MgaGVyZVxuICAvLyByZXNldHMgdGhlIHBvcHBlcidzIHBvc2l0aW9uIHNvIHRoYXQgdGhlIGRvY3VtZW50IHNpemUgY2FuIGJlIGNhbGN1bGF0ZWQgZXhjbHVkaW5nXG4gIC8vIHRoZSBzaXplIG9mIHRoZSBwb3BwZXIgZWxlbWVudCBpdHNlbGZcbiAgdmFyIHRyYW5zZm9ybVByb3AgPSBnZXRTdXBwb3J0ZWRQcm9wZXJ0eU5hbWUoJ3RyYW5zZm9ybScpO1xuICB2YXIgcG9wcGVyU3R5bGVzID0gZGF0YS5pbnN0YW5jZS5wb3BwZXIuc3R5bGU7IC8vIGFzc2lnbm1lbnQgdG8gaGVscCBtaW5pZmljYXRpb25cbiAgdmFyIHRvcCA9IHBvcHBlclN0eWxlcy50b3AsXG4gICAgICBsZWZ0ID0gcG9wcGVyU3R5bGVzLmxlZnQsXG4gICAgICB0cmFuc2Zvcm0gPSBwb3BwZXJTdHlsZXNbdHJhbnNmb3JtUHJvcF07XG5cbiAgcG9wcGVyU3R5bGVzLnRvcCA9ICcnO1xuICBwb3BwZXJTdHlsZXMubGVmdCA9ICcnO1xuICBwb3BwZXJTdHlsZXNbdHJhbnNmb3JtUHJvcF0gPSAnJztcblxuICB2YXIgYm91bmRhcmllcyA9IGdldEJvdW5kYXJpZXMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEuaW5zdGFuY2UucmVmZXJlbmNlLCBvcHRpb25zLnBhZGRpbmcsIGJvdW5kYXJpZXNFbGVtZW50LCBkYXRhLnBvc2l0aW9uRml4ZWQpO1xuXG4gIC8vIE5PVEU6IERPTSBhY2Nlc3MgaGVyZVxuICAvLyByZXN0b3JlcyB0aGUgb3JpZ2luYWwgc3R5bGUgcHJvcGVydGllcyBhZnRlciB0aGUgb2Zmc2V0cyBoYXZlIGJlZW4gY29tcHV0ZWRcbiAgcG9wcGVyU3R5bGVzLnRvcCA9IHRvcDtcbiAgcG9wcGVyU3R5bGVzLmxlZnQgPSBsZWZ0O1xuICBwb3BwZXJTdHlsZXNbdHJhbnNmb3JtUHJvcF0gPSB0cmFuc2Zvcm07XG5cbiAgb3B0aW9ucy5ib3VuZGFyaWVzID0gYm91bmRhcmllcztcblxuICB2YXIgb3JkZXIgPSBvcHRpb25zLnByaW9yaXR5O1xuICB2YXIgcG9wcGVyID0gZGF0YS5vZmZzZXRzLnBvcHBlcjtcblxuICB2YXIgY2hlY2sgPSB7XG4gICAgcHJpbWFyeTogZnVuY3Rpb24gcHJpbWFyeShwbGFjZW1lbnQpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHBvcHBlcltwbGFjZW1lbnRdO1xuICAgICAgaWYgKHBvcHBlcltwbGFjZW1lbnRdIDwgYm91bmRhcmllc1twbGFjZW1lbnRdICYmICFvcHRpb25zLmVzY2FwZVdpdGhSZWZlcmVuY2UpIHtcbiAgICAgICAgdmFsdWUgPSBNYXRoLm1heChwb3BwZXJbcGxhY2VtZW50XSwgYm91bmRhcmllc1twbGFjZW1lbnRdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eSh7fSwgcGxhY2VtZW50LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZWNvbmRhcnk6IGZ1bmN0aW9uIHNlY29uZGFyeShwbGFjZW1lbnQpIHtcbiAgICAgIHZhciBtYWluU2lkZSA9IHBsYWNlbWVudCA9PT0gJ3JpZ2h0JyA/ICdsZWZ0JyA6ICd0b3AnO1xuICAgICAgdmFyIHZhbHVlID0gcG9wcGVyW21haW5TaWRlXTtcbiAgICAgIGlmIChwb3BwZXJbcGxhY2VtZW50XSA+IGJvdW5kYXJpZXNbcGxhY2VtZW50XSAmJiAhb3B0aW9ucy5lc2NhcGVXaXRoUmVmZXJlbmNlKSB7XG4gICAgICAgIHZhbHVlID0gTWF0aC5taW4ocG9wcGVyW21haW5TaWRlXSwgYm91bmRhcmllc1twbGFjZW1lbnRdIC0gKHBsYWNlbWVudCA9PT0gJ3JpZ2h0JyA/IHBvcHBlci53aWR0aCA6IHBvcHBlci5oZWlnaHQpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eSh7fSwgbWFpblNpZGUsIHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgb3JkZXIuZm9yRWFjaChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgdmFyIHNpZGUgPSBbJ2xlZnQnLCAndG9wJ10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMSA/ICdwcmltYXJ5JyA6ICdzZWNvbmRhcnknO1xuICAgIHBvcHBlciA9IF9leHRlbmRzKHt9LCBwb3BwZXIsIGNoZWNrW3NpZGVdKHBsYWNlbWVudCkpO1xuICB9KTtcblxuICBkYXRhLm9mZnNldHMucG9wcGVyID0gcG9wcGVyO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IGB1cGRhdGVgIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBzaGlmdChkYXRhKSB7XG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbiAgdmFyIHNoaWZ0dmFyaWF0aW9uID0gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG5cbiAgLy8gaWYgc2hpZnQgc2hpZnR2YXJpYXRpb24gaXMgc3BlY2lmaWVkLCBydW4gdGhlIG1vZGlmaWVyXG4gIGlmIChzaGlmdHZhcmlhdGlvbikge1xuICAgIHZhciBfZGF0YSRvZmZzZXRzID0gZGF0YS5vZmZzZXRzLFxuICAgICAgICByZWZlcmVuY2UgPSBfZGF0YSRvZmZzZXRzLnJlZmVyZW5jZSxcbiAgICAgICAgcG9wcGVyID0gX2RhdGEkb2Zmc2V0cy5wb3BwZXI7XG5cbiAgICB2YXIgaXNWZXJ0aWNhbCA9IFsnYm90dG9tJywgJ3RvcCddLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgIT09IC0xO1xuICAgIHZhciBzaWRlID0gaXNWZXJ0aWNhbCA/ICdsZWZ0JyA6ICd0b3AnO1xuICAgIHZhciBtZWFzdXJlbWVudCA9IGlzVmVydGljYWwgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG5cbiAgICB2YXIgc2hpZnRPZmZzZXRzID0ge1xuICAgICAgc3RhcnQ6IGRlZmluZVByb3BlcnR5KHt9LCBzaWRlLCByZWZlcmVuY2Vbc2lkZV0pLFxuICAgICAgZW5kOiBkZWZpbmVQcm9wZXJ0eSh7fSwgc2lkZSwgcmVmZXJlbmNlW3NpZGVdICsgcmVmZXJlbmNlW21lYXN1cmVtZW50XSAtIHBvcHBlclttZWFzdXJlbWVudF0pXG4gICAgfTtcblxuICAgIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSBfZXh0ZW5kcyh7fSwgcG9wcGVyLCBzaGlmdE9mZnNldHNbc2hpZnR2YXJpYXRpb25dKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHVwZGF0ZSBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gaGlkZShkYXRhKSB7XG4gIGlmICghaXNNb2RpZmllclJlcXVpcmVkKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCAnaGlkZScsICdwcmV2ZW50T3ZlcmZsb3cnKSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgdmFyIHJlZlJlY3QgPSBkYXRhLm9mZnNldHMucmVmZXJlbmNlO1xuICB2YXIgYm91bmQgPSBmaW5kKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCBmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICByZXR1cm4gbW9kaWZpZXIubmFtZSA9PT0gJ3ByZXZlbnRPdmVyZmxvdyc7XG4gIH0pLmJvdW5kYXJpZXM7XG5cbiAgaWYgKHJlZlJlY3QuYm90dG9tIDwgYm91bmQudG9wIHx8IHJlZlJlY3QubGVmdCA+IGJvdW5kLnJpZ2h0IHx8IHJlZlJlY3QudG9wID4gYm91bmQuYm90dG9tIHx8IHJlZlJlY3QucmlnaHQgPCBib3VuZC5sZWZ0KSB7XG4gICAgLy8gQXZvaWQgdW5uZWNlc3NhcnkgRE9NIGFjY2VzcyBpZiB2aXNpYmlsaXR5IGhhc24ndCBjaGFuZ2VkXG4gICAgaWYgKGRhdGEuaGlkZSA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgZGF0YS5oaWRlID0gdHJ1ZTtcbiAgICBkYXRhLmF0dHJpYnV0ZXNbJ3gtb3V0LW9mLWJvdW5kYXJpZXMnXSA9ICcnO1xuICB9IGVsc2Uge1xuICAgIC8vIEF2b2lkIHVubmVjZXNzYXJ5IERPTSBhY2Nlc3MgaWYgdmlzaWJpbGl0eSBoYXNuJ3QgY2hhbmdlZFxuICAgIGlmIChkYXRhLmhpZGUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBkYXRhLmhpZGUgPSBmYWxzZTtcbiAgICBkYXRhLmF0dHJpYnV0ZXNbJ3gtb3V0LW9mLWJvdW5kYXJpZXMnXSA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgYHVwZGF0ZWAgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cbmZ1bmN0aW9uIGlubmVyKGRhdGEpIHtcbiAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICB2YXIgX2RhdGEkb2Zmc2V0cyA9IGRhdGEub2Zmc2V0cyxcbiAgICAgIHBvcHBlciA9IF9kYXRhJG9mZnNldHMucG9wcGVyLFxuICAgICAgcmVmZXJlbmNlID0gX2RhdGEkb2Zmc2V0cy5yZWZlcmVuY2U7XG5cbiAgdmFyIGlzSG9yaXogPSBbJ2xlZnQnLCAncmlnaHQnXS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMTtcblxuICB2YXIgc3VidHJhY3RMZW5ndGggPSBbJ3RvcCcsICdsZWZ0J10uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA9PT0gLTE7XG5cbiAgcG9wcGVyW2lzSG9yaXogPyAnbGVmdCcgOiAndG9wJ10gPSByZWZlcmVuY2VbYmFzZVBsYWNlbWVudF0gLSAoc3VidHJhY3RMZW5ndGggPyBwb3BwZXJbaXNIb3JpeiA/ICd3aWR0aCcgOiAnaGVpZ2h0J10gOiAwKTtcblxuICBkYXRhLnBsYWNlbWVudCA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSBnZXRDbGllbnRSZWN0KHBvcHBlcik7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogTW9kaWZpZXIgZnVuY3Rpb24sIGVhY2ggbW9kaWZpZXIgY2FuIGhhdmUgYSBmdW5jdGlvbiBvZiB0aGlzIHR5cGUgYXNzaWduZWRcbiAqIHRvIGl0cyBgZm5gIHByb3BlcnR5LjxiciAvPlxuICogVGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggdXBkYXRlLCB0aGlzIG1lYW5zIHRoYXQgeW91IG11c3RcbiAqIG1ha2Ugc3VyZSB0aGV5IGFyZSBwZXJmb3JtYW50IGVub3VnaCB0byBhdm9pZCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy5cbiAqXG4gKiBAZnVuY3Rpb24gTW9kaWZpZXJGblxuICogQGFyZ3VtZW50IHtkYXRhT2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtkYXRhT2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cblxuLyoqXG4gKiBNb2RpZmllcnMgYXJlIHBsdWdpbnMgdXNlZCB0byBhbHRlciB0aGUgYmVoYXZpb3Igb2YgeW91ciBwb3BwZXJzLjxiciAvPlxuICogUG9wcGVyLmpzIHVzZXMgYSBzZXQgb2YgOSBtb2RpZmllcnMgdG8gcHJvdmlkZSBhbGwgdGhlIGJhc2ljIGZ1bmN0aW9uYWxpdGllc1xuICogbmVlZGVkIGJ5IHRoZSBsaWJyYXJ5LlxuICpcbiAqIFVzdWFsbHkgeW91IGRvbid0IHdhbnQgdG8gb3ZlcnJpZGUgdGhlIGBvcmRlcmAsIGBmbmAgYW5kIGBvbkxvYWRgIHByb3BzLlxuICogQWxsIHRoZSBvdGhlciBwcm9wZXJ0aWVzIGFyZSBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIGJlIHR3ZWFrZWQuXG4gKiBAbmFtZXNwYWNlIG1vZGlmaWVyc1xuICovXG52YXIgbW9kaWZpZXJzID0ge1xuICAvKipcbiAgICogTW9kaWZpZXIgdXNlZCB0byBzaGlmdCB0aGUgcG9wcGVyIG9uIHRoZSBzdGFydCBvciBlbmQgb2YgaXRzIHJlZmVyZW5jZVxuICAgKiBlbGVtZW50LjxiciAvPlxuICAgKiBJdCB3aWxsIHJlYWQgdGhlIHZhcmlhdGlvbiBvZiB0aGUgYHBsYWNlbWVudGAgcHJvcGVydHkuPGJyIC8+XG4gICAqIEl0IGNhbiBiZSBvbmUgZWl0aGVyIGAtZW5kYCBvciBgLXN0YXJ0YC5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIHNoaWZ0OiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTEwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogMTAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogc2hpZnRcbiAgfSxcblxuICAvKipcbiAgICogVGhlIGBvZmZzZXRgIG1vZGlmaWVyIGNhbiBzaGlmdCB5b3VyIHBvcHBlciBvbiBib3RoIGl0cyBheGlzLlxuICAgKlxuICAgKiBJdCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgdW5pdHM6XG4gICAqIC0gYHB4YCBvciB1bml0LWxlc3MsIGludGVycHJldGVkIGFzIHBpeGVsc1xuICAgKiAtIGAlYCBvciBgJXJgLCBwZXJjZW50YWdlIHJlbGF0aXZlIHRvIHRoZSBsZW5ndGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50XG4gICAqIC0gYCVwYCwgcGVyY2VudGFnZSByZWxhdGl2ZSB0byB0aGUgbGVuZ3RoIG9mIHRoZSBwb3BwZXIgZWxlbWVudFxuICAgKiAtIGB2d2AsIENTUyB2aWV3cG9ydCB3aWR0aCB1bml0XG4gICAqIC0gYHZoYCwgQ1NTIHZpZXdwb3J0IGhlaWdodCB1bml0XG4gICAqXG4gICAqIEZvciBsZW5ndGggaXMgaW50ZW5kZWQgdGhlIG1haW4gYXhpcyByZWxhdGl2ZSB0byB0aGUgcGxhY2VtZW50IG9mIHRoZSBwb3BwZXIuPGJyIC8+XG4gICAqIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgcGxhY2VtZW50IGlzIGB0b3BgIG9yIGBib3R0b21gLCB0aGUgbGVuZ3RoIHdpbGwgYmUgdGhlXG4gICAqIGB3aWR0aGAuIEluIGNhc2Ugb2YgYGxlZnRgIG9yIGByaWdodGAsIGl0IHdpbGwgYmUgdGhlIGBoZWlnaHRgLlxuICAgKlxuICAgKiBZb3UgY2FuIHByb3ZpZGUgYSBzaW5nbGUgdmFsdWUgKGFzIGBOdW1iZXJgIG9yIGBTdHJpbmdgKSwgb3IgYSBwYWlyIG9mIHZhbHVlc1xuICAgKiBhcyBgU3RyaW5nYCBkaXZpZGVkIGJ5IGEgY29tbWEgb3Igb25lIChvciBtb3JlKSB3aGl0ZSBzcGFjZXMuPGJyIC8+XG4gICAqIFRoZSBsYXR0ZXIgaXMgYSBkZXByZWNhdGVkIG1ldGhvZCBiZWNhdXNlIGl0IGxlYWRzIHRvIGNvbmZ1c2lvbiBhbmQgd2lsbCBiZVxuICAgKiByZW1vdmVkIGluIHYyLjxiciAvPlxuICAgKiBBZGRpdGlvbmFsbHksIGl0IGFjY2VwdHMgYWRkaXRpb25zIGFuZCBzdWJ0cmFjdGlvbnMgYmV0d2VlbiBkaWZmZXJlbnQgdW5pdHMuXG4gICAqIE5vdGUgdGhhdCBtdWx0aXBsaWNhdGlvbnMgYW5kIGRpdmlzaW9ucyBhcmVuJ3Qgc3VwcG9ydGVkLlxuICAgKlxuICAgKiBWYWxpZCBleGFtcGxlcyBhcmU6XG4gICAqIGBgYFxuICAgKiAxMFxuICAgKiAnMTAlJ1xuICAgKiAnMTAsIDEwJ1xuICAgKiAnMTAlLCAxMCdcbiAgICogJzEwICsgMTAlJ1xuICAgKiAnMTAgLSA1dmggKyAzJSdcbiAgICogJy0xMHB4ICsgNXZoLCA1cHggLSA2JSdcbiAgICogYGBgXG4gICAqID4gKipOQioqOiBJZiB5b3UgZGVzaXJlIHRvIGFwcGx5IG9mZnNldHMgdG8geW91ciBwb3BwZXJzIGluIGEgd2F5IHRoYXQgbWF5IG1ha2UgdGhlbSBvdmVybGFwXG4gICAqID4gd2l0aCB0aGVpciByZWZlcmVuY2UgZWxlbWVudCwgdW5mb3J0dW5hdGVseSwgeW91IHdpbGwgaGF2ZSB0byBkaXNhYmxlIHRoZSBgZmxpcGAgbW9kaWZpZXIuXG4gICAqID4gWW91IGNhbiByZWFkIG1vcmUgb24gdGhpcyBhdCB0aGlzIFtpc3N1ZV0oaHR0cHM6Ly9naXRodWIuY29tL0ZlelZyYXN0YS9wb3BwZXIuanMvaXNzdWVzLzM3MykuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBvZmZzZXQ6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9MjAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiAyMDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBvZmZzZXQsXG4gICAgLyoqIEBwcm9wIHtOdW1iZXJ8U3RyaW5nfSBvZmZzZXQ9MFxuICAgICAqIFRoZSBvZmZzZXQgdmFsdWUgYXMgZGVzY3JpYmVkIGluIHRoZSBtb2RpZmllciBkZXNjcmlwdGlvblxuICAgICAqL1xuICAgIG9mZnNldDogMFxuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIHByZXZlbnQgdGhlIHBvcHBlciBmcm9tIGJlaW5nIHBvc2l0aW9uZWQgb3V0c2lkZSB0aGUgYm91bmRhcnkuXG4gICAqXG4gICAqIEEgc2NlbmFyaW8gZXhpc3RzIHdoZXJlIHRoZSByZWZlcmVuY2UgaXRzZWxmIGlzIG5vdCB3aXRoaW4gdGhlIGJvdW5kYXJpZXMuPGJyIC8+XG4gICAqIFdlIGNhbiBzYXkgaXQgaGFzIFwiZXNjYXBlZCB0aGUgYm91bmRhcmllc1wiIOKAlCBvciBqdXN0IFwiZXNjYXBlZFwiLjxiciAvPlxuICAgKiBJbiB0aGlzIGNhc2Ugd2UgbmVlZCB0byBkZWNpZGUgd2hldGhlciB0aGUgcG9wcGVyIHNob3VsZCBlaXRoZXI6XG4gICAqXG4gICAqIC0gZGV0YWNoIGZyb20gdGhlIHJlZmVyZW5jZSBhbmQgcmVtYWluIFwidHJhcHBlZFwiIGluIHRoZSBib3VuZGFyaWVzLCBvclxuICAgKiAtIGlmIGl0IHNob3VsZCBpZ25vcmUgdGhlIGJvdW5kYXJ5IGFuZCBcImVzY2FwZSB3aXRoIGl0cyByZWZlcmVuY2VcIlxuICAgKlxuICAgKiBXaGVuIGBlc2NhcGVXaXRoUmVmZXJlbmNlYCBpcyBzZXQgdG9gdHJ1ZWAgYW5kIHJlZmVyZW5jZSBpcyBjb21wbGV0ZWx5XG4gICAqIG91dHNpZGUgaXRzIGJvdW5kYXJpZXMsIHRoZSBwb3BwZXIgd2lsbCBvdmVyZmxvdyAob3IgY29tcGxldGVseSBsZWF2ZSlcbiAgICogdGhlIGJvdW5kYXJpZXMgaW4gb3JkZXIgdG8gcmVtYWluIGF0dGFjaGVkIHRvIHRoZSBlZGdlIG9mIHRoZSByZWZlcmVuY2UuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBwcmV2ZW50T3ZlcmZsb3c6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9MzAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiAzMDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBwcmV2ZW50T3ZlcmZsb3csXG4gICAgLyoqXG4gICAgICogQHByb3Age0FycmF5fSBbcHJpb3JpdHk9WydsZWZ0JywncmlnaHQnLCd0b3AnLCdib3R0b20nXV1cbiAgICAgKiBQb3BwZXIgd2lsbCB0cnkgdG8gcHJldmVudCBvdmVyZmxvdyBmb2xsb3dpbmcgdGhlc2UgcHJpb3JpdGllcyBieSBkZWZhdWx0LFxuICAgICAqIHRoZW4sIGl0IGNvdWxkIG92ZXJmbG93IG9uIHRoZSBsZWZ0IGFuZCBvbiB0b3Agb2YgdGhlIGBib3VuZGFyaWVzRWxlbWVudGBcbiAgICAgKi9cbiAgICBwcmlvcml0eTogWydsZWZ0JywgJ3JpZ2h0JywgJ3RvcCcsICdib3R0b20nXSxcbiAgICAvKipcbiAgICAgKiBAcHJvcCB7bnVtYmVyfSBwYWRkaW5nPTVcbiAgICAgKiBBbW91bnQgb2YgcGl4ZWwgdXNlZCB0byBkZWZpbmUgYSBtaW5pbXVtIGRpc3RhbmNlIGJldHdlZW4gdGhlIGJvdW5kYXJpZXNcbiAgICAgKiBhbmQgdGhlIHBvcHBlci4gVGhpcyBtYWtlcyBzdXJlIHRoZSBwb3BwZXIgYWx3YXlzIGhhcyBhIGxpdHRsZSBwYWRkaW5nXG4gICAgICogYmV0d2VlbiB0aGUgZWRnZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuICAgIHBhZGRpbmc6IDUsXG4gICAgLyoqXG4gICAgICogQHByb3Age1N0cmluZ3xIVE1MRWxlbWVudH0gYm91bmRhcmllc0VsZW1lbnQ9J3Njcm9sbFBhcmVudCdcbiAgICAgKiBCb3VuZGFyaWVzIHVzZWQgYnkgdGhlIG1vZGlmaWVyLiBDYW4gYmUgYHNjcm9sbFBhcmVudGAsIGB3aW5kb3dgLFxuICAgICAqIGB2aWV3cG9ydGAgb3IgYW55IERPTSBlbGVtZW50LlxuICAgICAqL1xuICAgIGJvdW5kYXJpZXNFbGVtZW50OiAnc2Nyb2xsUGFyZW50J1xuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIG1ha2Ugc3VyZSB0aGUgcmVmZXJlbmNlIGFuZCBpdHMgcG9wcGVyIHN0YXkgbmVhciBlYWNoIG90aGVyXG4gICAqIHdpdGhvdXQgbGVhdmluZyBhbnkgZ2FwIGJldHdlZW4gdGhlIHR3by4gRXNwZWNpYWxseSB1c2VmdWwgd2hlbiB0aGUgYXJyb3cgaXNcbiAgICogZW5hYmxlZCBhbmQgeW91IHdhbnQgdG8gZW5zdXJlIHRoYXQgaXQgcG9pbnRzIHRvIGl0cyByZWZlcmVuY2UgZWxlbWVudC5cbiAgICogSXQgY2FyZXMgb25seSBhYm91dCB0aGUgZmlyc3QgYXhpcy4gWW91IGNhbiBzdGlsbCBoYXZlIHBvcHBlcnMgd2l0aCBtYXJnaW5cbiAgICogYmV0d2VlbiB0aGUgcG9wcGVyIGFuZCBpdHMgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBrZWVwVG9nZXRoZXI6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9NDAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA0MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBrZWVwVG9nZXRoZXJcbiAgfSxcblxuICAvKipcbiAgICogVGhpcyBtb2RpZmllciBpcyB1c2VkIHRvIG1vdmUgdGhlIGBhcnJvd0VsZW1lbnRgIG9mIHRoZSBwb3BwZXIgdG8gbWFrZVxuICAgKiBzdXJlIGl0IGlzIHBvc2l0aW9uZWQgYmV0d2VlbiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQgYW5kIGl0cyBwb3BwZXIgZWxlbWVudC5cbiAgICogSXQgd2lsbCByZWFkIHRoZSBvdXRlciBzaXplIG9mIHRoZSBgYXJyb3dFbGVtZW50YCBub2RlIHRvIGRldGVjdCBob3cgbWFueVxuICAgKiBwaXhlbHMgb2YgY29uanVuY3Rpb24gYXJlIG5lZWRlZC5cbiAgICpcbiAgICogSXQgaGFzIG5vIGVmZmVjdCBpZiBubyBgYXJyb3dFbGVtZW50YCBpcyBwcm92aWRlZC5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGFycm93OiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTUwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogNTAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogYXJyb3csXG4gICAgLyoqIEBwcm9wIHtTdHJpbmd8SFRNTEVsZW1lbnR9IGVsZW1lbnQ9J1t4LWFycm93XScgLSBTZWxlY3RvciBvciBub2RlIHVzZWQgYXMgYXJyb3cgKi9cbiAgICBlbGVtZW50OiAnW3gtYXJyb3ddJ1xuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIGZsaXAgdGhlIHBvcHBlcidzIHBsYWNlbWVudCB3aGVuIGl0IHN0YXJ0cyB0byBvdmVybGFwIGl0c1xuICAgKiByZWZlcmVuY2UgZWxlbWVudC5cbiAgICpcbiAgICogUmVxdWlyZXMgdGhlIGBwcmV2ZW50T3ZlcmZsb3dgIG1vZGlmaWVyIGJlZm9yZSBpdCBpbiBvcmRlciB0byB3b3JrLlxuICAgKlxuICAgKiAqKk5PVEU6KiogdGhpcyBtb2RpZmllciB3aWxsIGludGVycnVwdCB0aGUgY3VycmVudCB1cGRhdGUgY3ljbGUgYW5kIHdpbGxcbiAgICogcmVzdGFydCBpdCBpZiBpdCBkZXRlY3RzIHRoZSBuZWVkIHRvIGZsaXAgdGhlIHBsYWNlbWVudC5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGZsaXA6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9NjAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA2MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBmbGlwLFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtTdHJpbmd8QXJyYXl9IGJlaGF2aW9yPSdmbGlwJ1xuICAgICAqIFRoZSBiZWhhdmlvciB1c2VkIHRvIGNoYW5nZSB0aGUgcG9wcGVyJ3MgcGxhY2VtZW50LiBJdCBjYW4gYmUgb25lIG9mXG4gICAgICogYGZsaXBgLCBgY2xvY2t3aXNlYCwgYGNvdW50ZXJjbG9ja3dpc2VgIG9yIGFuIGFycmF5IHdpdGggYSBsaXN0IG9mIHZhbGlkXG4gICAgICogcGxhY2VtZW50cyAod2l0aCBvcHRpb25hbCB2YXJpYXRpb25zKVxuICAgICAqL1xuICAgIGJlaGF2aW9yOiAnZmxpcCcsXG4gICAgLyoqXG4gICAgICogQHByb3Age251bWJlcn0gcGFkZGluZz01XG4gICAgICogVGhlIHBvcHBlciB3aWxsIGZsaXAgaWYgaXQgaGl0cyB0aGUgZWRnZXMgb2YgdGhlIGBib3VuZGFyaWVzRWxlbWVudGBcbiAgICAgKi9cbiAgICBwYWRkaW5nOiA1LFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtTdHJpbmd8SFRNTEVsZW1lbnR9IGJvdW5kYXJpZXNFbGVtZW50PSd2aWV3cG9ydCdcbiAgICAgKiBUaGUgZWxlbWVudCB3aGljaCB3aWxsIGRlZmluZSB0aGUgYm91bmRhcmllcyBvZiB0aGUgcG9wcGVyIHBvc2l0aW9uLlxuICAgICAqIFRoZSBwb3BwZXIgd2lsbCBuZXZlciBiZSBwbGFjZWQgb3V0c2lkZSBvZiB0aGUgZGVmaW5lZCBib3VuZGFyaWVzXG4gICAgICogKGV4Y2VwdCBpZiBga2VlcFRvZ2V0aGVyYCBpcyBlbmFibGVkKVxuICAgICAqL1xuICAgIGJvdW5kYXJpZXNFbGVtZW50OiAndmlld3BvcnQnLFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtCb29sZWFufSBmbGlwVmFyaWF0aW9ucz1mYWxzZVxuICAgICAqIFRoZSBwb3BwZXIgd2lsbCBzd2l0Y2ggcGxhY2VtZW50IHZhcmlhdGlvbiBiZXR3ZWVuIGAtc3RhcnRgIGFuZCBgLWVuZGAgd2hlblxuICAgICAqIHRoZSByZWZlcmVuY2UgZWxlbWVudCBvdmVybGFwcyBpdHMgYm91bmRhcmllcy5cbiAgICAgKlxuICAgICAqIFRoZSBvcmlnaW5hbCBwbGFjZW1lbnQgc2hvdWxkIGhhdmUgYSBzZXQgdmFyaWF0aW9uLlxuICAgICAqL1xuICAgIGZsaXBWYXJpYXRpb25zOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAcHJvcCB7Qm9vbGVhbn0gZmxpcFZhcmlhdGlvbnNCeUNvbnRlbnQ9ZmFsc2VcbiAgICAgKiBUaGUgcG9wcGVyIHdpbGwgc3dpdGNoIHBsYWNlbWVudCB2YXJpYXRpb24gYmV0d2VlbiBgLXN0YXJ0YCBhbmQgYC1lbmRgIHdoZW5cbiAgICAgKiB0aGUgcG9wcGVyIGVsZW1lbnQgb3ZlcmxhcHMgaXRzIHJlZmVyZW5jZSBib3VuZGFyaWVzLlxuICAgICAqXG4gICAgICogVGhlIG9yaWdpbmFsIHBsYWNlbWVudCBzaG91bGQgaGF2ZSBhIHNldCB2YXJpYXRpb24uXG4gICAgICovXG4gICAgZmxpcFZhcmlhdGlvbnNCeUNvbnRlbnQ6IGZhbHNlXG4gIH0sXG5cbiAgLyoqXG4gICAqIE1vZGlmaWVyIHVzZWQgdG8gbWFrZSB0aGUgcG9wcGVyIGZsb3cgdG93YXJkIHRoZSBpbm5lciBvZiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAqIEJ5IGRlZmF1bHQsIHdoZW4gdGhpcyBtb2RpZmllciBpcyBkaXNhYmxlZCwgdGhlIHBvcHBlciB3aWxsIGJlIHBsYWNlZCBvdXRzaWRlXG4gICAqIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGlubmVyOiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTcwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogNzAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD1mYWxzZSAtIFdoZXRoZXIgdGhlIG1vZGlmaWVyIGlzIGVuYWJsZWQgb3Igbm90ICovXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBpbm5lclxuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIGhpZGUgdGhlIHBvcHBlciB3aGVuIGl0cyByZWZlcmVuY2UgZWxlbWVudCBpcyBvdXRzaWRlIG9mIHRoZVxuICAgKiBwb3BwZXIgYm91bmRhcmllcy4gSXQgd2lsbCBzZXQgYSBgeC1vdXQtb2YtYm91bmRhcmllc2AgYXR0cmlidXRlIHdoaWNoIGNhblxuICAgKiBiZSB1c2VkIHRvIGhpZGUgd2l0aCBhIENTUyBzZWxlY3RvciB0aGUgcG9wcGVyIHdoZW4gaXRzIHJlZmVyZW5jZSBpc1xuICAgKiBvdXQgb2YgYm91bmRhcmllcy5cbiAgICpcbiAgICogUmVxdWlyZXMgdGhlIGBwcmV2ZW50T3ZlcmZsb3dgIG1vZGlmaWVyIGJlZm9yZSBpdCBpbiBvcmRlciB0byB3b3JrLlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgaGlkZToge1xuICAgIC8qKiBAcHJvcCB7bnVtYmVyfSBvcmRlcj04MDAgLSBJbmRleCB1c2VkIHRvIGRlZmluZSB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uICovXG4gICAgb3JkZXI6IDgwMCxcbiAgICAvKiogQHByb3Age0Jvb2xlYW59IGVuYWJsZWQ9dHJ1ZSAtIFdoZXRoZXIgdGhlIG1vZGlmaWVyIGlzIGVuYWJsZWQgb3Igbm90ICovXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAvKiogQHByb3Age01vZGlmaWVyRm59ICovXG4gICAgZm46IGhpZGVcbiAgfSxcblxuICAvKipcbiAgICogQ29tcHV0ZXMgdGhlIHN0eWxlIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBwb3BwZXIgZWxlbWVudCB0byBnZXRzXG4gICAqIHByb3Blcmx5IHBvc2l0aW9uZWQuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGlzIG1vZGlmaWVyIHdpbGwgbm90IHRvdWNoIHRoZSBET00sIGl0IGp1c3QgcHJlcGFyZXMgdGhlIHN0eWxlc1xuICAgKiBzbyB0aGF0IGBhcHBseVN0eWxlYCBtb2RpZmllciBjYW4gYXBwbHkgaXQuIFRoaXMgc2VwYXJhdGlvbiBpcyB1c2VmdWxcbiAgICogaW4gY2FzZSB5b3UgbmVlZCB0byByZXBsYWNlIGBhcHBseVN0eWxlYCB3aXRoIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uLlxuICAgKlxuICAgKiBUaGlzIG1vZGlmaWVyIGhhcyBgODUwYCBhcyBgb3JkZXJgIHZhbHVlIHRvIG1haW50YWluIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICogd2l0aCBwcmV2aW91cyB2ZXJzaW9ucyBvZiBQb3BwZXIuanMuIEV4cGVjdCB0aGUgbW9kaWZpZXJzIG9yZGVyaW5nIG1ldGhvZFxuICAgKiB0byBjaGFuZ2UgaW4gZnV0dXJlIG1ham9yIHZlcnNpb25zIG9mIHRoZSBsaWJyYXJ5LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgY29tcHV0ZVN0eWxlOiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTg1MCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogODUwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogY29tcHV0ZVN0eWxlLFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtCb29sZWFufSBncHVBY2NlbGVyYXRpb249dHJ1ZVxuICAgICAqIElmIHRydWUsIGl0IHVzZXMgdGhlIENTUyAzRCB0cmFuc2Zvcm1hdGlvbiB0byBwb3NpdGlvbiB0aGUgcG9wcGVyLlxuICAgICAqIE90aGVyd2lzZSwgaXQgd2lsbCB1c2UgdGhlIGB0b3BgIGFuZCBgbGVmdGAgcHJvcGVydGllc1xuICAgICAqL1xuICAgIGdwdUFjY2VsZXJhdGlvbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAcHJvcCB7c3RyaW5nfSBbeD0nYm90dG9tJ11cbiAgICAgKiBXaGVyZSB0byBhbmNob3IgdGhlIFggYXhpcyAoYGJvdHRvbWAgb3IgYHRvcGApLiBBS0EgWCBvZmZzZXQgb3JpZ2luLlxuICAgICAqIENoYW5nZSB0aGlzIGlmIHlvdXIgcG9wcGVyIHNob3VsZCBncm93IGluIGEgZGlyZWN0aW9uIGRpZmZlcmVudCBmcm9tIGBib3R0b21gXG4gICAgICovXG4gICAgeDogJ2JvdHRvbScsXG4gICAgLyoqXG4gICAgICogQHByb3Age3N0cmluZ30gW3g9J2xlZnQnXVxuICAgICAqIFdoZXJlIHRvIGFuY2hvciB0aGUgWSBheGlzIChgbGVmdGAgb3IgYHJpZ2h0YCkuIEFLQSBZIG9mZnNldCBvcmlnaW4uXG4gICAgICogQ2hhbmdlIHRoaXMgaWYgeW91ciBwb3BwZXIgc2hvdWxkIGdyb3cgaW4gYSBkaXJlY3Rpb24gZGlmZmVyZW50IGZyb20gYHJpZ2h0YFxuICAgICAqL1xuICAgIHk6ICdyaWdodCdcbiAgfSxcblxuICAvKipcbiAgICogQXBwbGllcyB0aGUgY29tcHV0ZWQgc3R5bGVzIHRvIHRoZSBwb3BwZXIgZWxlbWVudC5cbiAgICpcbiAgICogQWxsIHRoZSBET00gbWFuaXB1bGF0aW9ucyBhcmUgbGltaXRlZCB0byB0aGlzIG1vZGlmaWVyLiBUaGlzIGlzIHVzZWZ1bCBpbiBjYXNlXG4gICAqIHlvdSB3YW50IHRvIGludGVncmF0ZSBQb3BwZXIuanMgaW5zaWRlIGEgZnJhbWV3b3JrIG9yIHZpZXcgbGlicmFyeSBhbmQgeW91XG4gICAqIHdhbnQgdG8gZGVsZWdhdGUgYWxsIHRoZSBET00gbWFuaXB1bGF0aW9ucyB0byBpdC5cbiAgICpcbiAgICogTm90ZSB0aGF0IGlmIHlvdSBkaXNhYmxlIHRoaXMgbW9kaWZpZXIsIHlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcG9wcGVyIGVsZW1lbnRcbiAgICogaGFzIGl0cyBwb3NpdGlvbiBzZXQgdG8gYGFic29sdXRlYCBiZWZvcmUgUG9wcGVyLmpzIGNhbiBkbyBpdHMgd29yayFcbiAgICpcbiAgICogSnVzdCBkaXNhYmxlIHRoaXMgbW9kaWZpZXIgYW5kIGRlZmluZSB5b3VyIG93biB0byBhY2hpZXZlIHRoZSBkZXNpcmVkIGVmZmVjdC5cbiAgICpcbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGFwcGx5U3R5bGU6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9OTAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA5MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBhcHBseVN0eWxlLFxuICAgIC8qKiBAcHJvcCB7RnVuY3Rpb259ICovXG4gICAgb25Mb2FkOiBhcHBseVN0eWxlT25Mb2FkLFxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMS4xMC4wLCB0aGUgcHJvcGVydHkgbW92ZWQgdG8gYGNvbXB1dGVTdHlsZWAgbW9kaWZpZXJcbiAgICAgKiBAcHJvcCB7Qm9vbGVhbn0gZ3B1QWNjZWxlcmF0aW9uPXRydWVcbiAgICAgKiBJZiB0cnVlLCBpdCB1c2VzIHRoZSBDU1MgM0QgdHJhbnNmb3JtYXRpb24gdG8gcG9zaXRpb24gdGhlIHBvcHBlci5cbiAgICAgKiBPdGhlcndpc2UsIGl0IHdpbGwgdXNlIHRoZSBgdG9wYCBhbmQgYGxlZnRgIHByb3BlcnRpZXNcbiAgICAgKi9cbiAgICBncHVBY2NlbGVyYXRpb246IHVuZGVmaW5lZFxuICB9XG59O1xuXG4vKipcbiAqIFRoZSBgZGF0YU9iamVjdGAgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIGJ5IFBvcHBlci5qcy5cbiAqIFRoaXMgb2JqZWN0IGlzIHBhc3NlZCB0byBtb2RpZmllcnMgYW5kIHRvIHRoZSBgb25DcmVhdGVgIGFuZCBgb25VcGRhdGVgIGNhbGxiYWNrcy5cbiAqIEBuYW1lIGRhdGFPYmplY3RcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkYXRhLmluc3RhbmNlIFRoZSBQb3BwZXIuanMgaW5zdGFuY2VcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBkYXRhLnBsYWNlbWVudCBQbGFjZW1lbnQgYXBwbGllZCB0byBwb3BwZXJcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBkYXRhLm9yaWdpbmFsUGxhY2VtZW50IFBsYWNlbWVudCBvcmlnaW5hbGx5IGRlZmluZWQgb24gaW5pdFxuICogQHByb3BlcnR5IHtCb29sZWFufSBkYXRhLmZsaXBwZWQgVHJ1ZSBpZiBwb3BwZXIgaGFzIGJlZW4gZmxpcHBlZCBieSBmbGlwIG1vZGlmaWVyXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGRhdGEuaGlkZSBUcnVlIGlmIHRoZSByZWZlcmVuY2UgZWxlbWVudCBpcyBvdXQgb2YgYm91bmRhcmllcywgdXNlZnVsIHRvIGtub3cgd2hlbiB0byBoaWRlIHRoZSBwb3BwZXJcbiAqIEBwcm9wZXJ0eSB7SFRNTEVsZW1lbnR9IGRhdGEuYXJyb3dFbGVtZW50IE5vZGUgdXNlZCBhcyBhcnJvdyBieSBhcnJvdyBtb2RpZmllclxuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEuc3R5bGVzIEFueSBDU1MgcHJvcGVydHkgZGVmaW5lZCBoZXJlIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyLiBJdCBleHBlY3RzIHRoZSBKYXZhU2NyaXB0IG5vbWVuY2xhdHVyZSAoZWcuIGBtYXJnaW5Cb3R0b21gKVxuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEuYXJyb3dTdHlsZXMgQW55IENTUyBwcm9wZXJ0eSBkZWZpbmVkIGhlcmUgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBwb3BwZXIgYXJyb3cuIEl0IGV4cGVjdHMgdGhlIEphdmFTY3JpcHQgbm9tZW5jbGF0dXJlIChlZy4gYG1hcmdpbkJvdHRvbWApXG4gKiBAcHJvcGVydHkge09iamVjdH0gZGF0YS5ib3VuZGFyaWVzIE9mZnNldHMgb2YgdGhlIHBvcHBlciBib3VuZGFyaWVzXG4gKiBAcHJvcGVydHkge09iamVjdH0gZGF0YS5vZmZzZXRzIFRoZSBtZWFzdXJlbWVudHMgb2YgcG9wcGVyLCByZWZlcmVuY2UgYW5kIGFycm93IGVsZW1lbnRzXG4gKiBAcHJvcGVydHkge09iamVjdH0gZGF0YS5vZmZzZXRzLnBvcHBlciBgdG9wYCwgYGxlZnRgLCBgd2lkdGhgLCBgaGVpZ2h0YCB2YWx1ZXNcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkYXRhLm9mZnNldHMucmVmZXJlbmNlIGB0b3BgLCBgbGVmdGAsIGB3aWR0aGAsIGBoZWlnaHRgIHZhbHVlc1xuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEub2Zmc2V0cy5hcnJvd10gYHRvcGAgYW5kIGBsZWZ0YCBvZmZzZXRzLCBvbmx5IG9uZSBvZiB0aGVtIHdpbGwgYmUgZGlmZmVyZW50IGZyb20gMFxuICovXG5cbi8qKlxuICogRGVmYXVsdCBvcHRpb25zIHByb3ZpZGVkIHRvIFBvcHBlci5qcyBjb25zdHJ1Y3Rvci48YnIgLz5cbiAqIFRoZXNlIGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSBgb3B0aW9uc2AgYXJndW1lbnQgb2YgUG9wcGVyLmpzLjxiciAvPlxuICogVG8gb3ZlcnJpZGUgYW4gb3B0aW9uLCBzaW1wbHkgcGFzcyBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZVxuICogc3RydWN0dXJlIG9mIHRoZSBgb3B0aW9uc2Agb2JqZWN0LCBhcyB0aGUgM3JkIGFyZ3VtZW50LiBGb3IgZXhhbXBsZTpcbiAqIGBgYFxuICogbmV3IFBvcHBlcihyZWYsIHBvcCwge1xuICogICBtb2RpZmllcnM6IHtcbiAqICAgICBwcmV2ZW50T3ZlcmZsb3c6IHsgZW5hYmxlZDogZmFsc2UgfVxuICogICB9XG4gKiB9KVxuICogYGBgXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHN0YXRpY1xuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG52YXIgRGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBQb3BwZXIncyBwbGFjZW1lbnQuXG4gICAqIEBwcm9wIHtQb3BwZXIucGxhY2VtZW50c30gcGxhY2VtZW50PSdib3R0b20nXG4gICAqL1xuICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuXG4gIC8qKlxuICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIHlvdSB3YW50IHBvcHBlciB0byBwb3NpdGlvbiBpdCBzZWxmIGluICdmaXhlZCcgbW9kZVxuICAgKiBAcHJvcCB7Qm9vbGVhbn0gcG9zaXRpb25GaXhlZD1mYWxzZVxuICAgKi9cbiAgcG9zaXRpb25GaXhlZDogZmFsc2UsXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgZXZlbnRzIChyZXNpemUsIHNjcm9sbCkgYXJlIGluaXRpYWxseSBlbmFibGVkLlxuICAgKiBAcHJvcCB7Qm9vbGVhbn0gZXZlbnRzRW5hYmxlZD10cnVlXG4gICAqL1xuICBldmVudHNFbmFibGVkOiB0cnVlLFxuXG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0byBhdXRvbWF0aWNhbGx5IHJlbW92ZSB0aGUgcG9wcGVyIHdoZW5cbiAgICogeW91IGNhbGwgdGhlIGBkZXN0cm95YCBtZXRob2QuXG4gICAqIEBwcm9wIHtCb29sZWFufSByZW1vdmVPbkRlc3Ryb3k9ZmFsc2VcbiAgICovXG4gIHJlbW92ZU9uRGVzdHJveTogZmFsc2UsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGNhbGxlZCB3aGVuIHRoZSBwb3BwZXIgaXMgY3JlYXRlZC48YnIgLz5cbiAgICogQnkgZGVmYXVsdCwgaXQgaXMgc2V0IHRvIG5vLW9wLjxiciAvPlxuICAgKiBBY2Nlc3MgUG9wcGVyLmpzIGluc3RhbmNlIHdpdGggYGRhdGEuaW5zdGFuY2VgLlxuICAgKiBAcHJvcCB7b25DcmVhdGV9XG4gICAqL1xuICBvbkNyZWF0ZTogZnVuY3Rpb24gb25DcmVhdGUoKSB7fSxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgY2FsbGVkIHdoZW4gdGhlIHBvcHBlciBpcyB1cGRhdGVkLiBUaGlzIGNhbGxiYWNrIGlzIG5vdCBjYWxsZWRcbiAgICogb24gdGhlIGluaXRpYWxpemF0aW9uL2NyZWF0aW9uIG9mIHRoZSBwb3BwZXIsIGJ1dCBvbmx5IG9uIHN1YnNlcXVlbnRcbiAgICogdXBkYXRlcy48YnIgLz5cbiAgICogQnkgZGVmYXVsdCwgaXQgaXMgc2V0IHRvIG5vLW9wLjxiciAvPlxuICAgKiBBY2Nlc3MgUG9wcGVyLmpzIGluc3RhbmNlIHdpdGggYGRhdGEuaW5zdGFuY2VgLlxuICAgKiBAcHJvcCB7b25VcGRhdGV9XG4gICAqL1xuICBvblVwZGF0ZTogZnVuY3Rpb24gb25VcGRhdGUoKSB7fSxcblxuICAvKipcbiAgICogTGlzdCBvZiBtb2RpZmllcnMgdXNlZCB0byBtb2RpZnkgdGhlIG9mZnNldHMgYmVmb3JlIHRoZXkgYXJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlci5cbiAgICogVGhleSBwcm92aWRlIG1vc3Qgb2YgdGhlIGZ1bmN0aW9uYWxpdGllcyBvZiBQb3BwZXIuanMuXG4gICAqIEBwcm9wIHttb2RpZmllcnN9XG4gICAqL1xuICBtb2RpZmllcnM6IG1vZGlmaWVyc1xufTtcblxuLyoqXG4gKiBAY2FsbGJhY2sgb25DcmVhdGVcbiAqIEBwYXJhbSB7ZGF0YU9iamVjdH0gZGF0YVxuICovXG5cbi8qKlxuICogQGNhbGxiYWNrIG9uVXBkYXRlXG4gKiBAcGFyYW0ge2RhdGFPYmplY3R9IGRhdGFcbiAqL1xuXG4vLyBVdGlsc1xuLy8gTWV0aG9kc1xudmFyIFBvcHBlciA9IGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgUG9wcGVyLmpzIGluc3RhbmNlLlxuICAgKiBAY2xhc3MgUG9wcGVyXG4gICAqIEBwYXJhbSB7RWxlbWVudHxyZWZlcmVuY2VPYmplY3R9IHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgZWxlbWVudCB1c2VkIHRvIHBvc2l0aW9uIHRoZSBwb3BwZXJcbiAgICogQHBhcmFtIHtFbGVtZW50fSBwb3BwZXIgLSBUaGUgSFRNTCAvIFhNTCBlbGVtZW50IHVzZWQgYXMgdGhlIHBvcHBlclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFlvdXIgY3VzdG9tIG9wdGlvbnMgdG8gb3ZlcnJpZGUgdGhlIG9uZXMgZGVmaW5lZCBpbiBbRGVmYXVsdHNdKCNkZWZhdWx0cylcbiAgICogQHJldHVybiB7T2JqZWN0fSBpbnN0YW5jZSAtIFRoZSBnZW5lcmF0ZWQgUG9wcGVyLmpzIGluc3RhbmNlXG4gICAqL1xuICBmdW5jdGlvbiBQb3BwZXIocmVmZXJlbmNlLCBwb3BwZXIpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIFBvcHBlcik7XG5cbiAgICB0aGlzLnNjaGVkdWxlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy51cGRhdGUpO1xuICAgIH07XG5cbiAgICAvLyBtYWtlIHVwZGF0ZSgpIGRlYm91bmNlZCwgc28gdGhhdCBpdCBvbmx5IHJ1bnMgYXQgbW9zdCBvbmNlLXBlci10aWNrXG4gICAgdGhpcy51cGRhdGUgPSBkZWJvdW5jZSh0aGlzLnVwZGF0ZS5iaW5kKHRoaXMpKTtcblxuICAgIC8vIHdpdGgge30gd2UgY3JlYXRlIGEgbmV3IG9iamVjdCB3aXRoIHRoZSBvcHRpb25zIGluc2lkZSBpdFxuICAgIHRoaXMub3B0aW9ucyA9IF9leHRlbmRzKHt9LCBQb3BwZXIuRGVmYXVsdHMsIG9wdGlvbnMpO1xuXG4gICAgLy8gaW5pdCBzdGF0ZVxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBpc0Rlc3Ryb3llZDogZmFsc2UsXG4gICAgICBpc0NyZWF0ZWQ6IGZhbHNlLFxuICAgICAgc2Nyb2xsUGFyZW50czogW11cbiAgICB9O1xuXG4gICAgLy8gZ2V0IHJlZmVyZW5jZSBhbmQgcG9wcGVyIGVsZW1lbnRzIChhbGxvdyBqUXVlcnkgd3JhcHBlcnMpXG4gICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2UgJiYgcmVmZXJlbmNlLmpxdWVyeSA/IHJlZmVyZW5jZVswXSA6IHJlZmVyZW5jZTtcbiAgICB0aGlzLnBvcHBlciA9IHBvcHBlciAmJiBwb3BwZXIuanF1ZXJ5ID8gcG9wcGVyWzBdIDogcG9wcGVyO1xuXG4gICAgLy8gRGVlcCBtZXJnZSBtb2RpZmllcnMgb3B0aW9uc1xuICAgIHRoaXMub3B0aW9ucy5tb2RpZmllcnMgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhfZXh0ZW5kcyh7fSwgUG9wcGVyLkRlZmF1bHRzLm1vZGlmaWVycywgb3B0aW9ucy5tb2RpZmllcnMpKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICBfdGhpcy5vcHRpb25zLm1vZGlmaWVyc1tuYW1lXSA9IF9leHRlbmRzKHt9LCBQb3BwZXIuRGVmYXVsdHMubW9kaWZpZXJzW25hbWVdIHx8IHt9LCBvcHRpb25zLm1vZGlmaWVycyA/IG9wdGlvbnMubW9kaWZpZXJzW25hbWVdIDoge30pO1xuICAgIH0pO1xuXG4gICAgLy8gUmVmYWN0b3JpbmcgbW9kaWZpZXJzJyBsaXN0IChPYmplY3QgPT4gQXJyYXkpXG4gICAgdGhpcy5tb2RpZmllcnMgPSBPYmplY3Qua2V5cyh0aGlzLm9wdGlvbnMubW9kaWZpZXJzKS5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgICAgIG5hbWU6IG5hbWVcbiAgICAgIH0sIF90aGlzLm9wdGlvbnMubW9kaWZpZXJzW25hbWVdKTtcbiAgICB9KVxuICAgIC8vIHNvcnQgdGhlIG1vZGlmaWVycyBieSBvcmRlclxuICAgIC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYS5vcmRlciAtIGIub3JkZXI7XG4gICAgfSk7XG5cbiAgICAvLyBtb2RpZmllcnMgaGF2ZSB0aGUgYWJpbGl0eSB0byBleGVjdXRlIGFyYml0cmFyeSBjb2RlIHdoZW4gUG9wcGVyLmpzIGdldCBpbml0ZWRcbiAgICAvLyBzdWNoIGNvZGUgaXMgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgb2YgaXRzIG1vZGlmaWVyXG4gICAgLy8gdGhleSBjb3VsZCBhZGQgbmV3IHByb3BlcnRpZXMgdG8gdGhlaXIgb3B0aW9ucyBjb25maWd1cmF0aW9uXG4gICAgLy8gQkUgQVdBUkU6IGRvbid0IGFkZCBvcHRpb25zIHRvIGBvcHRpb25zLm1vZGlmaWVycy5uYW1lYCBidXQgdG8gYG1vZGlmaWVyT3B0aW9uc2AhXG4gICAgdGhpcy5tb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXJPcHRpb25zKSB7XG4gICAgICBpZiAobW9kaWZpZXJPcHRpb25zLmVuYWJsZWQgJiYgaXNGdW5jdGlvbihtb2RpZmllck9wdGlvbnMub25Mb2FkKSkge1xuICAgICAgICBtb2RpZmllck9wdGlvbnMub25Mb2FkKF90aGlzLnJlZmVyZW5jZSwgX3RoaXMucG9wcGVyLCBfdGhpcy5vcHRpb25zLCBtb2RpZmllck9wdGlvbnMsIF90aGlzLnN0YXRlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGZpcmUgdGhlIGZpcnN0IHVwZGF0ZSB0byBwb3NpdGlvbiB0aGUgcG9wcGVyIGluIHRoZSByaWdodCBwbGFjZVxuICAgIHRoaXMudXBkYXRlKCk7XG5cbiAgICB2YXIgZXZlbnRzRW5hYmxlZCA9IHRoaXMub3B0aW9ucy5ldmVudHNFbmFibGVkO1xuICAgIGlmIChldmVudHNFbmFibGVkKSB7XG4gICAgICAvLyBzZXR1cCBldmVudCBsaXN0ZW5lcnMsIHRoZXkgd2lsbCB0YWtlIGNhcmUgb2YgdXBkYXRlIHRoZSBwb3NpdGlvbiBpbiBzcGVjaWZpYyBzaXR1YXRpb25zXG4gICAgICB0aGlzLmVuYWJsZUV2ZW50TGlzdGVuZXJzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZS5ldmVudHNFbmFibGVkID0gZXZlbnRzRW5hYmxlZDtcbiAgfVxuXG4gIC8vIFdlIGNhbid0IHVzZSBjbGFzcyBwcm9wZXJ0aWVzIGJlY2F1c2UgdGhleSBkb24ndCBnZXQgbGlzdGVkIGluIHRoZVxuICAvLyBjbGFzcyBwcm90b3R5cGUgYW5kIGJyZWFrIHN0dWZmIGxpa2UgU2lub24gc3R1YnNcblxuXG4gIGNyZWF0ZUNsYXNzKFBvcHBlciwgW3tcbiAgICBrZXk6ICd1cGRhdGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGUkJDEoKSB7XG4gICAgICByZXR1cm4gdXBkYXRlLmNhbGwodGhpcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZGVzdHJveScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRlc3Ryb3kkJDEoKSB7XG4gICAgICByZXR1cm4gZGVzdHJveS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2VuYWJsZUV2ZW50TGlzdGVuZXJzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZW5hYmxlRXZlbnRMaXN0ZW5lcnMkJDEoKSB7XG4gICAgICByZXR1cm4gZW5hYmxlRXZlbnRMaXN0ZW5lcnMuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdkaXNhYmxlRXZlbnRMaXN0ZW5lcnMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBkaXNhYmxlRXZlbnRMaXN0ZW5lcnMkJDEoKSB7XG4gICAgICByZXR1cm4gZGlzYWJsZUV2ZW50TGlzdGVuZXJzLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2NoZWR1bGVzIGFuIHVwZGF0ZS4gSXQgd2lsbCBydW4gb24gdGhlIG5leHQgVUkgdXBkYXRlIGF2YWlsYWJsZS5cbiAgICAgKiBAbWV0aG9kIHNjaGVkdWxlVXBkYXRlXG4gICAgICogQG1lbWJlcm9mIFBvcHBlclxuICAgICAqL1xuXG5cbiAgICAvKipcbiAgICAgKiBDb2xsZWN0aW9uIG9mIHV0aWxpdGllcyB1c2VmdWwgd2hlbiB3cml0aW5nIGN1c3RvbSBtb2RpZmllcnMuXG4gICAgICogU3RhcnRpbmcgZnJvbSB2ZXJzaW9uIDEuNywgdGhpcyBtZXRob2QgaXMgYXZhaWxhYmxlIG9ubHkgaWYgeW91XG4gICAgICogaW5jbHVkZSBgcG9wcGVyLXV0aWxzLmpzYCBiZWZvcmUgYHBvcHBlci5qc2AuXG4gICAgICpcbiAgICAgKiAqKkRFUFJFQ0FUSU9OKio6IFRoaXMgd2F5IHRvIGFjY2VzcyBQb3BwZXJVdGlscyBpcyBkZXByZWNhdGVkXG4gICAgICogYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB2MiEgVXNlIHRoZSBQb3BwZXJVdGlscyBtb2R1bGUgZGlyZWN0bHkgaW5zdGVhZC5cbiAgICAgKiBEdWUgdG8gdGhlIGhpZ2ggaW5zdGFiaWxpdHkgb2YgdGhlIG1ldGhvZHMgY29udGFpbmVkIGluIFV0aWxzLCB3ZSBjYW4ndFxuICAgICAqIGd1YXJhbnRlZSB0aGVtIHRvIGZvbGxvdyBzZW12ZXIuIFVzZSB0aGVtIGF0IHlvdXIgb3duIHJpc2shXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDEuOFxuICAgICAqIEBtZW1iZXIgVXRpbHNcbiAgICAgKiBAbWVtYmVyb2YgUG9wcGVyXG4gICAgICovXG5cbiAgfV0pO1xuICByZXR1cm4gUG9wcGVyO1xufSgpO1xuXG4vKipcbiAqIFRoZSBgcmVmZXJlbmNlT2JqZWN0YCBpcyBhbiBvYmplY3QgdGhhdCBwcm92aWRlcyBhbiBpbnRlcmZhY2UgY29tcGF0aWJsZSB3aXRoIFBvcHBlci5qc1xuICogYW5kIGxldHMgeW91IHVzZSBpdCBhcyByZXBsYWNlbWVudCBvZiBhIHJlYWwgRE9NIG5vZGUuPGJyIC8+XG4gKiBZb3UgY2FuIHVzZSB0aGlzIG1ldGhvZCB0byBwb3NpdGlvbiBhIHBvcHBlciByZWxhdGl2ZWx5IHRvIGEgc2V0IG9mIGNvb3JkaW5hdGVzXG4gKiBpbiBjYXNlIHlvdSBkb24ndCBoYXZlIGEgRE9NIG5vZGUgdG8gdXNlIGFzIHJlZmVyZW5jZS5cbiAqXG4gKiBgYGBcbiAqIG5ldyBQb3BwZXIocmVmZXJlbmNlT2JqZWN0LCBwb3BwZXJOb2RlKTtcbiAqIGBgYFxuICpcbiAqIE5COiBUaGlzIGZlYXR1cmUgaXNuJ3Qgc3VwcG9ydGVkIGluIEludGVybmV0IEV4cGxvcmVyIDEwLlxuICogQG5hbWUgcmVmZXJlbmNlT2JqZWN0XG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBkYXRhLmdldEJvdW5kaW5nQ2xpZW50UmVjdFxuICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBzZXQgb2YgY29vcmRpbmF0ZXMgY29tcGF0aWJsZSB3aXRoIHRoZSBuYXRpdmUgYGdldEJvdW5kaW5nQ2xpZW50UmVjdGAgbWV0aG9kLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGRhdGEuY2xpZW50V2lkdGhcbiAqIEFuIEVTNiBnZXR0ZXIgdGhhdCB3aWxsIHJldHVybiB0aGUgd2lkdGggb2YgdGhlIHZpcnR1YWwgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gZGF0YS5jbGllbnRIZWlnaHRcbiAqIEFuIEVTNiBnZXR0ZXIgdGhhdCB3aWxsIHJldHVybiB0aGUgaGVpZ2h0IG9mIHRoZSB2aXJ0dWFsIHJlZmVyZW5jZSBlbGVtZW50LlxuICovXG5cblxuUG9wcGVyLlV0aWxzID0gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsKS5Qb3BwZXJVdGlscztcblBvcHBlci5wbGFjZW1lbnRzID0gcGxhY2VtZW50cztcblBvcHBlci5EZWZhdWx0cyA9IERlZmF1bHRzO1xuXG5leHBvcnQgZGVmYXVsdCBQb3BwZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wb3BwZXIuanMubWFwXG4iLCJ2YXIgcHVnID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvcHVnLXJ1bnRpbWUvaW5kZXguanNcIik7XG5cbmZ1bmN0aW9uIHRlbXBsYXRlKGxvY2Fscykge3ZhciBwdWdfaHRtbCA9IFwiXCIsIHB1Z19taXhpbnMgPSB7fSwgcHVnX2ludGVycDtwdWdfaHRtbCA9IHB1Z19odG1sICsgXCJcXHUwMDNDYm9keVxcdTAwM0VcXHUwMDNDbmF2IGNsYXNzPVxcXCJuYXZiYXIgbmF2YmFyLWV4cGFuZC1sZyBwLTEgbmF2YmFyLWxpZ2h0IGJnLWxpZ2h0IGZpeGVkLXRvcFxcXCJcXHUwMDNFXFx1MDAzQ2EgY2xhc3M9XFxcIm5hdmJhci1icmFuZFxcXCIgaHJlZj1cXFwiXFx1MDAyRmh1YlxcdTAwMkZzcGF3blxcXCJcXHUwMDNFXFx1MDAzQ2ltZyBzdHlsZT1cXFwiaGVpZ2h0OiAzOHB4O21hcmdpbi1sZWZ0OiAtMS4yZW07XFxcIiBzcmM9XFxcInN0YXRpY1xcdTAwMkZzdG9jaHNzLWxvZ28ucG5nXFxcIlxcdTAwM0VcXHUwMDNDXFx1MDAyRmFcXHUwMDNFXFx1MDAzQ2RpdiBjbGFzcz1cXFwiY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlIGp1c3RpZnktY29udGVudC1lbmRcXFwiIGlkPVxcXCJuYXZiYXJcXFwiXFx1MDAzRVxcdTAwM0N1bCBjbGFzcz1cXFwibmF2YmFyLW5hdiBmbG9hdC1yaWdodFxcXCJcXHUwMDNFXFx1MDAzQ2xpIGNsYXNzPVxcXCJuYXYtaXRlbVxcXCJcXHUwMDNFXFx1MDAzQ2EgY2xhc3M9XFxcIm5hdi1saW5rXFxcIiBocmVmPVxcXCJodHRwOlxcdTAwMkZcXHUwMDJGd3d3LnN0b2Noc3Mub3JnXFxcIiB0YXJnZXQ9XFxcIl9ibGFua1xcXCJcXHUwMDNFQWJvdXRcXHUwMDNDXFx1MDAyRmFcXHUwMDNFXFx1MDAzQ1xcdTAwMkZsaVxcdTAwM0VcXHUwMDNDbGkgY2xhc3M9XFxcIm5hdi1pdGVtXFxcIlxcdTAwM0VcXHUwMDNDYSBjbGFzcz1cXFwibmF2LWxpbmtcXFwiIGhyZWY9XFxcImh0dHA6XFx1MDAyRlxcdTAwMkZ3d3cuc3RvY2hzcy5vcmdcXHUwMDJGP3BhZ2VfaWQ9NDc2XFxcIiB0YXJnZXQ9XFxcIl9ibGFua1xcXCJcXHUwMDNFRG9jdW1lbnRhdGlvblxcdTAwM0NcXHUwMDJGYVxcdTAwM0VcXHUwMDNDXFx1MDAyRmxpXFx1MDAzRVxcdTAwM0NsaSBjbGFzcz1cXFwibmF2LWl0ZW1cXFwiXFx1MDAzRVxcdTAwM0NhIGNsYXNzPVxcXCJuYXYtbGlua1xcXCIgaHJlZj1cXFwibWFpbHRvOnN0b2Noc3MtdXNlcnNAZ29vZ2xlZ3JvdXBzLmNvbVxcXCJcXHUwMDNFQ29udGFjdFxcdTAwM0NcXHUwMDJGYVxcdTAwM0VcXHUwMDNDXFx1MDAyRmxpXFx1MDAzRVxcdTAwM0NsaSBjbGFzcz1cXFwibmF2LWl0ZW1cXFwiXFx1MDAzRVxcdTAwM0NhIGNsYXNzPVxcXCJuYXYtbGlua1xcXCIgaHJlZj1cXFwiaHR0cHM6XFx1MDAyRlxcdTAwMkZnaXRodWIuY29tXFx1MDAyRlN0b2NoU1NcXHUwMDJGc3RvY2hzc1xcdTAwMkZpc3N1ZXNcXHUwMDJGbmV3XFxcIiB0YXJnZXQ9XFxcIl9ibGFua1xcXCJcXHUwMDNFUmVwb3J0IElzc3VlXFx1MDAzQ1xcdTAwMkZhXFx1MDAzRVxcdTAwM0NcXHUwMDJGbGlcXHUwMDNFXFx1MDAzQ2xpIGNsYXNzPVxcXCJuYXYtaXRlbVxcXCJcXHUwMDNFXFx1MDAzQ2EgY2xhc3M9XFxcIm5hdi1saW5rXFxcIiBocmVmPVxcXCJcXHUwMDJGbG9nb3V0XFxcIlxcdTAwM0VTaWduIE91dFxcdTAwM0NcXHUwMDJGYVxcdTAwM0VcXHUwMDNDXFx1MDAyRmxpXFx1MDAzRVxcdTAwM0NcXHUwMDJGdWxcXHUwMDNFXFx1MDAzQ1xcdTAwMkZkaXZcXHUwMDNFXFx1MDAzQ1xcdTAwMkZuYXZcXHUwMDNFXFx1MDAzQ2RpdiBjbGFzcz1cXFwiY29udGFpbmVyLWZsdWlkXFxcIlxcdTAwM0VcXHUwMDNDZGl2IGNsYXNzPVxcXCJyb3cgZmxleC1ub3dyYXBcXFwiXFx1MDAzRVxcdTAwM0NkaXYgY2xhc3M9XFxcImNvbC1tZC0yXFxcIlxcdTAwM0VcXHUwMDNDbmF2IGNsYXNzPVxcXCJzaWRlYmFyIGQtbWQtYmxvY2tcXFwiXFx1MDAzRVxcdTAwM0NkaXYgY2xhc3M9XFxcInNpZGViYXItc3RpY2t5IHRvb2xzXFxcIlxcdTAwM0VcXHUwMDNDdWwgY2xhc3M9XFxcIm5hdiBmbGV4LWNvbHVtblxcXCJcXHUwMDNFXFx1MDAzQ2xpIGNsYXNzPVxcXCJuYXYtaXRlbVxcXCJcXHUwMDNFXFx1MDAzQ2g1IGNsYXNzPVxcXCJpY29uLWZsYXNrXFxcIlxcdTAwM0VUb29sc1xcdTAwM0NcXHUwMDJGaDVcXHUwMDNFXFx1MDAzQ1xcdTAwMkZsaVxcdTAwM0VcXHUwMDNDbGkgY2xhc3M9XFxcIm5hdi1pdGVtXFxcIlxcdTAwM0VcXHUwMDNDYSBjbGFzcz1cXFwibmF2LWxpbmtcXFwiIGhyZWY9XFxcInN0b2Noc3NcXHUwMDJGbW9kZWxzXFxcIiB0aXRsZT1cXFwiRXhwbG9yZSB5b3VyIFN0b2NoU1MgbW9kZWxzXFxcIlxcdTAwM0VCcm93c2VyXFx1MDAzQ1xcdTAwMkZhXFx1MDAzRVxcdTAwM0NcXHUwMDJGbGlcXHUwMDNFXFx1MDAzQ2xpIGNsYXNzPVxcXCJuYXYtaXRlbVxcXCJcXHUwMDNFXFx1MDAzQ2EgY2xhc3M9XFxcIm5hdi1saW5rXFxcIiB0YXJnZXQ9XFxcIl9ibGFua1xcXCIgaHJlZj1cXFwidHJlZVxcXCIgdGl0bGU9XFxcIkJyb3dzZSB5b3VyIGZpbGVzIGluIGEgSnVweXRlciBpbnRlcmZhY2VcXFwiXFx1MDAzRUp1cHl0ZXJcXHUwMDNDXFx1MDAyRmFcXHUwMDNFXFx1MDAzQ1xcdTAwMkZsaVxcdTAwM0VcXHUwMDNDIS0tbGkubmF2LWl0ZW06IGEubmF2LWxpbmsoZGF0YS1ob29rPVxcXCJnZW5lcmFsLWhlbHAtbGlua1xcXCIsIHRhcmdldD1cXFwiX2JsYW5rXFxcIiwgaHJlZj1cXFwiI1xcXCIsIHRpdGxlPVxcXCJIZWxwXFxcIilcXHUwMDJGXFx1MDAyRiB8IEhlbHBcXG4tLVxcdTAwM0VcXHUwMDNDXFx1MDAyRnVsXFx1MDAzRVxcdTAwM0NcXHUwMDJGZGl2XFx1MDAzRVxcdTAwM0NcXHUwMDJGbmF2XFx1MDAzRVxcdTAwM0NcXHUwMDJGZGl2XFx1MDAzRVxcdTAwM0NtYWluIGNsYXNzPVxcXCJjb2wtbWQtMTAgYm9keVxcXCIgcm9sZT1cXFwibWFpblxcXCJcXHUwMDNFXFx1MDAzQ2RpdiBjbGFzcz1cXFwiY29udGFpbmVyLWZsdWlkXFxcIiBkYXRhLWhvb2s9XFxcInBhZ2UtY29udGFpbmVyXFxcIlxcdTAwM0VcXHUwMDNDXFx1MDAyRmRpdlxcdTAwM0VcXHUwMDNDXFx1MDAyRm1haW5cXHUwMDNFXFx1MDAzQ1xcdTAwMkZkaXZcXHUwMDNFXFx1MDAzQ1xcdTAwMkZkaXZcXHUwMDNFXFx1MDAzQ1xcdTAwMkZib2R5XFx1MDAzRVwiOztyZXR1cm4gcHVnX2h0bWw7fTtcbm1vZHVsZS5leHBvcnRzID0gdGVtcGxhdGU7IiwidmFyIHB1ZyA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3B1Zy1ydW50aW1lL2luZGV4LmpzXCIpO1xuXG5mdW5jdGlvbiB0ZW1wbGF0ZShsb2NhbHMpIHt2YXIgcHVnX2h0bWwgPSBcIlwiLCBwdWdfbWl4aW5zID0ge30sIHB1Z19pbnRlcnA7cHVnX2h0bWwgPSBwdWdfaHRtbCArIFwiXFx1MDAzQ2hlYWRcXHUwMDNFXFx1MDAzQ21ldGEgY2hhcnNldD1cXFwidXRmLThcXFwiXFx1MDAzRVxcdTAwM0N0aXRsZVxcdTAwM0VTdG9jaFNTOiBTdG9jaGFzdGljIFNpbWxhdGlvbiBTZXJ2aWNlXFx1MDAzQ1xcdTAwMkZ0aXRsZVxcdTAwM0VcXHUwMDNDbWV0YSBuYW1lPVxcXCJ2aWV3cG9ydFxcXCIgY29udGVudD1cXFwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMFxcXCJcXHUwMDNFXFx1MDAzQ21ldGEgbmFtZT1cXFwiZGVzY3JpcHRpb25cXFwiIGNvbnRlbnQ9XFxcIlxcXCJcXHUwMDNFXFx1MDAzQ21ldGEgbmFtZT1cXFwiYXV0aG9yXFxcIiBjb250ZW50PVxcXCJcXFwiXFx1MDAzRVxcdTAwM0NcXHUwMDJGaGVhZFxcdTAwM0VcIjs7cmV0dXJuIHB1Z19odG1sO307XG5tb2R1bGUuZXhwb3J0cyA9IHRlbXBsYXRlOyIsIid1c2Ugc3RyaWN0JztcblxudmFyIHB1Z19oYXNfb3duX3Byb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBNZXJnZSB0d28gYXR0cmlidXRlIG9iamVjdHMgZ2l2aW5nIHByZWNlZGVuY2VcbiAqIHRvIHZhbHVlcyBpbiBvYmplY3QgYGJgLiBDbGFzc2VzIGFyZSBzcGVjaWFsLWNhc2VkXG4gKiBhbGxvd2luZyBmb3IgYXJyYXlzIGFuZCBtZXJnaW5nL2pvaW5pbmcgYXBwcm9wcmlhdGVseVxuICogcmVzdWx0aW5nIGluIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhXG4gKiBAcGFyYW0ge09iamVjdH0gYlxuICogQHJldHVybiB7T2JqZWN0fSBhXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLm1lcmdlID0gcHVnX21lcmdlO1xuZnVuY3Rpb24gcHVnX21lcmdlKGEsIGIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICB2YXIgYXR0cnMgPSBhWzBdO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgYXR0cnMgPSBwdWdfbWVyZ2UoYXR0cnMsIGFbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gYXR0cnM7XG4gIH1cblxuICBmb3IgKHZhciBrZXkgaW4gYikge1xuICAgIGlmIChrZXkgPT09ICdjbGFzcycpIHtcbiAgICAgIHZhciB2YWxBID0gYVtrZXldIHx8IFtdO1xuICAgICAgYVtrZXldID0gKEFycmF5LmlzQXJyYXkodmFsQSkgPyB2YWxBIDogW3ZhbEFdKS5jb25jYXQoYltrZXldIHx8IFtdKTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3N0eWxlJykge1xuICAgICAgdmFyIHZhbEEgPSBwdWdfc3R5bGUoYVtrZXldKTtcbiAgICAgIHZhbEEgPSB2YWxBICYmIHZhbEFbdmFsQS5sZW5ndGggLSAxXSAhPT0gJzsnID8gdmFsQSArICc7JyA6IHZhbEE7XG4gICAgICB2YXIgdmFsQiA9IHB1Z19zdHlsZShiW2tleV0pO1xuICAgICAgdmFsQiA9IHZhbEIgJiYgdmFsQlt2YWxCLmxlbmd0aCAtIDFdICE9PSAnOycgPyB2YWxCICsgJzsnIDogdmFsQjtcbiAgICAgIGFba2V5XSA9IHZhbEEgKyB2YWxCO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSBiW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGE7XG59O1xuXG4vKipcbiAqIFByb2Nlc3MgYXJyYXksIG9iamVjdCwgb3Igc3RyaW5nIGFzIGEgc3RyaW5nIG9mIGNsYXNzZXMgZGVsaW1pdGVkIGJ5IGEgc3BhY2UuXG4gKlxuICogSWYgYHZhbGAgaXMgYW4gYXJyYXksIGFsbCBtZW1iZXJzIG9mIGl0IGFuZCBpdHMgc3ViYXJyYXlzIGFyZSBjb3VudGVkIGFzXG4gKiBjbGFzc2VzLiBJZiBgZXNjYXBpbmdgIGlzIGFuIGFycmF5LCB0aGVuIHdoZXRoZXIgb3Igbm90IHRoZSBpdGVtIGluIGB2YWxgIGlzXG4gKiBlc2NhcGVkIGRlcGVuZHMgb24gdGhlIGNvcnJlc3BvbmRpbmcgaXRlbSBpbiBgZXNjYXBpbmdgLiBJZiBgZXNjYXBpbmdgIGlzXG4gKiBub3QgYW4gYXJyYXksIG5vIGVzY2FwaW5nIGlzIGRvbmUuXG4gKlxuICogSWYgYHZhbGAgaXMgYW4gb2JqZWN0LCBhbGwgdGhlIGtleXMgd2hvc2UgdmFsdWUgaXMgdHJ1dGh5IGFyZSBjb3VudGVkIGFzXG4gKiBjbGFzc2VzLiBObyBlc2NhcGluZyBpcyBkb25lLlxuICpcbiAqIElmIGB2YWxgIGlzIGEgc3RyaW5nLCBpdCBpcyBjb3VudGVkIGFzIGEgY2xhc3MuIE5vIGVzY2FwaW5nIGlzIGRvbmUuXG4gKlxuICogQHBhcmFtIHsoQXJyYXkuPHN0cmluZz58T2JqZWN0LjxzdHJpbmcsIGJvb2xlYW4+fHN0cmluZyl9IHZhbFxuICogQHBhcmFtIHs/QXJyYXkuPHN0cmluZz59IGVzY2FwaW5nXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmV4cG9ydHMuY2xhc3NlcyA9IHB1Z19jbGFzc2VzO1xuZnVuY3Rpb24gcHVnX2NsYXNzZXNfYXJyYXkodmFsLCBlc2NhcGluZykge1xuICB2YXIgY2xhc3NTdHJpbmcgPSAnJywgY2xhc3NOYW1lLCBwYWRkaW5nID0gJycsIGVzY2FwZUVuYWJsZWQgPSBBcnJheS5pc0FycmF5KGVzY2FwaW5nKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICBjbGFzc05hbWUgPSBwdWdfY2xhc3Nlcyh2YWxbaV0pO1xuICAgIGlmICghY2xhc3NOYW1lKSBjb250aW51ZTtcbiAgICBlc2NhcGVFbmFibGVkICYmIGVzY2FwaW5nW2ldICYmIChjbGFzc05hbWUgPSBwdWdfZXNjYXBlKGNsYXNzTmFtZSkpO1xuICAgIGNsYXNzU3RyaW5nID0gY2xhc3NTdHJpbmcgKyBwYWRkaW5nICsgY2xhc3NOYW1lO1xuICAgIHBhZGRpbmcgPSAnICc7XG4gIH1cbiAgcmV0dXJuIGNsYXNzU3RyaW5nO1xufVxuZnVuY3Rpb24gcHVnX2NsYXNzZXNfb2JqZWN0KHZhbCkge1xuICB2YXIgY2xhc3NTdHJpbmcgPSAnJywgcGFkZGluZyA9ICcnO1xuICBmb3IgKHZhciBrZXkgaW4gdmFsKSB7XG4gICAgaWYgKGtleSAmJiB2YWxba2V5XSAmJiBwdWdfaGFzX293bl9wcm9wZXJ0eS5jYWxsKHZhbCwga2V5KSkge1xuICAgICAgY2xhc3NTdHJpbmcgPSBjbGFzc1N0cmluZyArIHBhZGRpbmcgKyBrZXk7XG4gICAgICBwYWRkaW5nID0gJyAnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2xhc3NTdHJpbmc7XG59XG5mdW5jdGlvbiBwdWdfY2xhc3Nlcyh2YWwsIGVzY2FwaW5nKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICByZXR1cm4gcHVnX2NsYXNzZXNfYXJyYXkodmFsLCBlc2NhcGluZyk7XG4gIH0gZWxzZSBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHB1Z19jbGFzc2VzX29iamVjdCh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWwgfHwgJyc7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0IG9iamVjdCBvciBzdHJpbmcgdG8gYSBzdHJpbmcgb2YgQ1NTIHN0eWxlcyBkZWxpbWl0ZWQgYnkgYSBzZW1pY29sb24uXG4gKlxuICogQHBhcmFtIHsoT2JqZWN0LjxzdHJpbmcsIHN0cmluZz58c3RyaW5nKX0gdmFsXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cblxuZXhwb3J0cy5zdHlsZSA9IHB1Z19zdHlsZTtcbmZ1bmN0aW9uIHB1Z19zdHlsZSh2YWwpIHtcbiAgaWYgKCF2YWwpIHJldHVybiAnJztcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgdmFyIG91dCA9ICcnO1xuICAgIGZvciAodmFyIHN0eWxlIGluIHZhbCkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChwdWdfaGFzX293bl9wcm9wZXJ0eS5jYWxsKHZhbCwgc3R5bGUpKSB7XG4gICAgICAgIG91dCA9IG91dCArIHN0eWxlICsgJzonICsgdmFsW3N0eWxlXSArICc7JztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsICsgJyc7XG4gIH1cbn07XG5cbi8qKlxuICogUmVuZGVyIHRoZSBnaXZlbiBhdHRyaWJ1dGUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGtleVxuICogQHBhcmFtIHtTdHJpbmd9IHZhbFxuICogQHBhcmFtIHtCb29sZWFufSBlc2NhcGVkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHRlcnNlXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmV4cG9ydHMuYXR0ciA9IHB1Z19hdHRyO1xuZnVuY3Rpb24gcHVnX2F0dHIoa2V5LCB2YWwsIGVzY2FwZWQsIHRlcnNlKSB7XG4gIGlmICh2YWwgPT09IGZhbHNlIHx8IHZhbCA9PSBudWxsIHx8ICF2YWwgJiYgKGtleSA9PT0gJ2NsYXNzJyB8fCBrZXkgPT09ICdzdHlsZScpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGlmICh2YWwgPT09IHRydWUpIHtcbiAgICByZXR1cm4gJyAnICsgKHRlcnNlID8ga2V5IDoga2V5ICsgJz1cIicgKyBrZXkgKyAnXCInKTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbC50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YWwgPSB2YWwudG9KU09OKCk7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWwgIT09ICdzdHJpbmcnKSB7XG4gICAgdmFsID0gSlNPTi5zdHJpbmdpZnkodmFsKTtcbiAgICBpZiAoIWVzY2FwZWQgJiYgdmFsLmluZGV4T2YoJ1wiJykgIT09IC0xKSB7XG4gICAgICByZXR1cm4gJyAnICsga2V5ICsgJz1cXCcnICsgdmFsLnJlcGxhY2UoLycvZywgJyYjMzk7JykgKyAnXFwnJztcbiAgICB9XG4gIH1cbiAgaWYgKGVzY2FwZWQpIHZhbCA9IHB1Z19lc2NhcGUodmFsKTtcbiAgcmV0dXJuICcgJyArIGtleSArICc9XCInICsgdmFsICsgJ1wiJztcbn07XG5cbi8qKlxuICogUmVuZGVyIHRoZSBnaXZlbiBhdHRyaWJ1dGVzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge09iamVjdH0gdGVyc2Ugd2hldGhlciB0byB1c2UgSFRNTDUgdGVyc2UgYm9vbGVhbiBhdHRyaWJ1dGVzXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmV4cG9ydHMuYXR0cnMgPSBwdWdfYXR0cnM7XG5mdW5jdGlvbiBwdWdfYXR0cnMob2JqLCB0ZXJzZSl7XG4gIHZhciBhdHRycyA9ICcnO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBpZiAocHVnX2hhc19vd25fcHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgIHZhciB2YWwgPSBvYmpba2V5XTtcblxuICAgICAgaWYgKCdjbGFzcycgPT09IGtleSkge1xuICAgICAgICB2YWwgPSBwdWdfY2xhc3Nlcyh2YWwpO1xuICAgICAgICBhdHRycyA9IHB1Z19hdHRyKGtleSwgdmFsLCBmYWxzZSwgdGVyc2UpICsgYXR0cnM7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCdzdHlsZScgPT09IGtleSkge1xuICAgICAgICB2YWwgPSBwdWdfc3R5bGUodmFsKTtcbiAgICAgIH1cbiAgICAgIGF0dHJzICs9IHB1Z19hdHRyKGtleSwgdmFsLCBmYWxzZSwgdGVyc2UpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhdHRycztcbn07XG5cbi8qKlxuICogRXNjYXBlIHRoZSBnaXZlbiBzdHJpbmcgb2YgYGh0bWxgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBodG1sXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG52YXIgcHVnX21hdGNoX2h0bWwgPSAvW1wiJjw+XS87XG5leHBvcnRzLmVzY2FwZSA9IHB1Z19lc2NhcGU7XG5mdW5jdGlvbiBwdWdfZXNjYXBlKF9odG1sKXtcbiAgdmFyIGh0bWwgPSAnJyArIF9odG1sO1xuICB2YXIgcmVnZXhSZXN1bHQgPSBwdWdfbWF0Y2hfaHRtbC5leGVjKGh0bWwpO1xuICBpZiAoIXJlZ2V4UmVzdWx0KSByZXR1cm4gX2h0bWw7XG5cbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgaSwgbGFzdEluZGV4LCBlc2NhcGU7XG4gIGZvciAoaSA9IHJlZ2V4UmVzdWx0LmluZGV4LCBsYXN0SW5kZXggPSAwOyBpIDwgaHRtbC5sZW5ndGg7IGkrKykge1xuICAgIHN3aXRjaCAoaHRtbC5jaGFyQ29kZUF0KGkpKSB7XG4gICAgICBjYXNlIDM0OiBlc2NhcGUgPSAnJnF1b3Q7JzsgYnJlYWs7XG4gICAgICBjYXNlIDM4OiBlc2NhcGUgPSAnJmFtcDsnOyBicmVhaztcbiAgICAgIGNhc2UgNjA6IGVzY2FwZSA9ICcmbHQ7JzsgYnJlYWs7XG4gICAgICBjYXNlIDYyOiBlc2NhcGUgPSAnJmd0Oyc7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogY29udGludWU7XG4gICAgfVxuICAgIGlmIChsYXN0SW5kZXggIT09IGkpIHJlc3VsdCArPSBodG1sLnN1YnN0cmluZyhsYXN0SW5kZXgsIGkpO1xuICAgIGxhc3RJbmRleCA9IGkgKyAxO1xuICAgIHJlc3VsdCArPSBlc2NhcGU7XG4gIH1cbiAgaWYgKGxhc3RJbmRleCAhPT0gaSkgcmV0dXJuIHJlc3VsdCArIGh0bWwuc3Vic3RyaW5nKGxhc3RJbmRleCwgaSk7XG4gIGVsc2UgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogUmUtdGhyb3cgdGhlIGdpdmVuIGBlcnJgIGluIGNvbnRleHQgdG8gdGhlXG4gKiB0aGUgcHVnIGluIGBmaWxlbmFtZWAgYXQgdGhlIGdpdmVuIGBsaW5lbm9gLlxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IGVyclxuICogQHBhcmFtIHtTdHJpbmd9IGZpbGVuYW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gbGluZW5vXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIG9yaWdpbmFsIHNvdXJjZVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5yZXRocm93ID0gcHVnX3JldGhyb3c7XG5mdW5jdGlvbiBwdWdfcmV0aHJvdyhlcnIsIGZpbGVuYW1lLCBsaW5lbm8sIHN0cil7XG4gIGlmICghKGVyciBpbnN0YW5jZW9mIEVycm9yKSkgdGhyb3cgZXJyO1xuICBpZiAoKHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgfHwgIWZpbGVuYW1lKSAmJiAhc3RyKSB7XG4gICAgZXJyLm1lc3NhZ2UgKz0gJyBvbiBsaW5lICcgKyBsaW5lbm87XG4gICAgdGhyb3cgZXJyO1xuICB9XG4gIHRyeSB7XG4gICAgc3RyID0gc3RyIHx8IHJlcXVpcmUoJ2ZzJykucmVhZEZpbGVTeW5jKGZpbGVuYW1lLCAndXRmOCcpXG4gIH0gY2F0Y2ggKGV4KSB7XG4gICAgcHVnX3JldGhyb3coZXJyLCBudWxsLCBsaW5lbm8pXG4gIH1cbiAgdmFyIGNvbnRleHQgPSAzXG4gICAgLCBsaW5lcyA9IHN0ci5zcGxpdCgnXFxuJylcbiAgICAsIHN0YXJ0ID0gTWF0aC5tYXgobGluZW5vIC0gY29udGV4dCwgMClcbiAgICAsIGVuZCA9IE1hdGgubWluKGxpbmVzLmxlbmd0aCwgbGluZW5vICsgY29udGV4dCk7XG5cbiAgLy8gRXJyb3IgY29udGV4dFxuICB2YXIgY29udGV4dCA9IGxpbmVzLnNsaWNlKHN0YXJ0LCBlbmQpLm1hcChmdW5jdGlvbihsaW5lLCBpKXtcbiAgICB2YXIgY3VyciA9IGkgKyBzdGFydCArIDE7XG4gICAgcmV0dXJuIChjdXJyID09IGxpbmVubyA/ICcgID4gJyA6ICcgICAgJylcbiAgICAgICsgY3VyclxuICAgICAgKyAnfCAnXG4gICAgICArIGxpbmU7XG4gIH0pLmpvaW4oJ1xcbicpO1xuXG4gIC8vIEFsdGVyIGV4Y2VwdGlvbiBtZXNzYWdlXG4gIGVyci5wYXRoID0gZmlsZW5hbWU7XG4gIGVyci5tZXNzYWdlID0gKGZpbGVuYW1lIHx8ICdQdWcnKSArICc6JyArIGxpbmVub1xuICAgICsgJ1xcbicgKyBjb250ZXh0ICsgJ1xcblxcbicgKyBlcnIubWVzc2FnZTtcbiAgdGhyb3cgZXJyO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG52YXIgcGVyY2VudFR3ZW50aWVzID0gLyUyMC9nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAnZGVmYXVsdCc6ICdSRkMzOTg2JyxcbiAgICBmb3JtYXR0ZXJzOiB7XG4gICAgICAgIFJGQzE3Mzg6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2UuY2FsbCh2YWx1ZSwgcGVyY2VudFR3ZW50aWVzLCAnKycpO1xuICAgICAgICB9LFxuICAgICAgICBSRkMzOTg2OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgUkZDMTczODogJ1JGQzE3MzgnLFxuICAgIFJGQzM5ODY6ICdSRkMzOTg2J1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vc3RyaW5naWZ5Jyk7XG52YXIgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJyk7XG52YXIgZm9ybWF0cyA9IHJlcXVpcmUoJy4vZm9ybWF0cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBmb3JtYXRzOiBmb3JtYXRzLFxuICAgIHBhcnNlOiBwYXJzZSxcbiAgICBzdHJpbmdpZnk6IHN0cmluZ2lmeVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIGRlZmF1bHRzID0ge1xuICAgIGFsbG93RG90czogZmFsc2UsXG4gICAgYWxsb3dQcm90b3R5cGVzOiBmYWxzZSxcbiAgICBhcnJheUxpbWl0OiAyMCxcbiAgICBjaGFyc2V0OiAndXRmLTgnLFxuICAgIGNoYXJzZXRTZW50aW5lbDogZmFsc2UsXG4gICAgY29tbWE6IGZhbHNlLFxuICAgIGRlY29kZXI6IHV0aWxzLmRlY29kZSxcbiAgICBkZWxpbWl0ZXI6ICcmJyxcbiAgICBkZXB0aDogNSxcbiAgICBpZ25vcmVRdWVyeVByZWZpeDogZmFsc2UsXG4gICAgaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzOiBmYWxzZSxcbiAgICBwYXJhbWV0ZXJMaW1pdDogMTAwMCxcbiAgICBwYXJzZUFycmF5czogdHJ1ZSxcbiAgICBwbGFpbk9iamVjdHM6IGZhbHNlLFxuICAgIHN0cmljdE51bGxIYW5kbGluZzogZmFsc2Vcbn07XG5cbnZhciBpbnRlcnByZXROdW1lcmljRW50aXRpZXMgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8mIyhcXGQrKTsvZywgZnVuY3Rpb24gKCQwLCBudW1iZXJTdHIpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQobnVtYmVyU3RyLCAxMCkpO1xuICAgIH0pO1xufTtcblxuLy8gVGhpcyBpcyB3aGF0IGJyb3dzZXJzIHdpbGwgc3VibWl0IHdoZW4gdGhlIOKckyBjaGFyYWN0ZXIgb2NjdXJzIGluIGFuXG4vLyBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgYm9keSBhbmQgdGhlIGVuY29kaW5nIG9mIHRoZSBwYWdlIGNvbnRhaW5pbmdcbi8vIHRoZSBmb3JtIGlzIGlzby04ODU5LTEsIG9yIHdoZW4gdGhlIHN1Ym1pdHRlZCBmb3JtIGhhcyBhbiBhY2NlcHQtY2hhcnNldFxuLy8gYXR0cmlidXRlIG9mIGlzby04ODU5LTEuIFByZXN1bWFibHkgYWxzbyB3aXRoIG90aGVyIGNoYXJzZXRzIHRoYXQgZG8gbm90IGNvbnRhaW5cbi8vIHRoZSDinJMgY2hhcmFjdGVyLCBzdWNoIGFzIHVzLWFzY2lpLlxudmFyIGlzb1NlbnRpbmVsID0gJ3V0Zjg9JTI2JTIzMTAwMDMlM0InOyAvLyBlbmNvZGVVUklDb21wb25lbnQoJyYjMTAwMDM7JylcblxuLy8gVGhlc2UgYXJlIHRoZSBwZXJjZW50LWVuY29kZWQgdXRmLTggb2N0ZXRzIHJlcHJlc2VudGluZyBhIGNoZWNrbWFyaywgaW5kaWNhdGluZyB0aGF0IHRoZSByZXF1ZXN0IGFjdHVhbGx5IGlzIHV0Zi04IGVuY29kZWQuXG52YXIgY2hhcnNldFNlbnRpbmVsID0gJ3V0Zjg9JUUyJTlDJTkzJzsgLy8gZW5jb2RlVVJJQ29tcG9uZW50KCfinJMnKVxuXG52YXIgcGFyc2VWYWx1ZXMgPSBmdW5jdGlvbiBwYXJzZVF1ZXJ5U3RyaW5nVmFsdWVzKHN0ciwgb3B0aW9ucykge1xuICAgIHZhciBvYmogPSB7fTtcbiAgICB2YXIgY2xlYW5TdHIgPSBvcHRpb25zLmlnbm9yZVF1ZXJ5UHJlZml4ID8gc3RyLnJlcGxhY2UoL15cXD8vLCAnJykgOiBzdHI7XG4gICAgdmFyIGxpbWl0ID0gb3B0aW9ucy5wYXJhbWV0ZXJMaW1pdCA9PT0gSW5maW5pdHkgPyB1bmRlZmluZWQgOiBvcHRpb25zLnBhcmFtZXRlckxpbWl0O1xuICAgIHZhciBwYXJ0cyA9IGNsZWFuU3RyLnNwbGl0KG9wdGlvbnMuZGVsaW1pdGVyLCBsaW1pdCk7XG4gICAgdmFyIHNraXBJbmRleCA9IC0xOyAvLyBLZWVwIHRyYWNrIG9mIHdoZXJlIHRoZSB1dGY4IHNlbnRpbmVsIHdhcyBmb3VuZFxuICAgIHZhciBpO1xuXG4gICAgdmFyIGNoYXJzZXQgPSBvcHRpb25zLmNoYXJzZXQ7XG4gICAgaWYgKG9wdGlvbnMuY2hhcnNldFNlbnRpbmVsKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKHBhcnRzW2ldLmluZGV4T2YoJ3V0Zjg9JykgPT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAocGFydHNbaV0gPT09IGNoYXJzZXRTZW50aW5lbCkge1xuICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gJ3V0Zi04JztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcnRzW2ldID09PSBpc29TZW50aW5lbCkge1xuICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gJ2lzby04ODU5LTEnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBza2lwSW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIGkgPSBwYXJ0cy5sZW5ndGg7IC8vIFRoZSBlc2xpbnQgc2V0dGluZ3MgZG8gbm90IGFsbG93IGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChpID09PSBza2lwSW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwYXJ0ID0gcGFydHNbaV07XG5cbiAgICAgICAgdmFyIGJyYWNrZXRFcXVhbHNQb3MgPSBwYXJ0LmluZGV4T2YoJ109Jyk7XG4gICAgICAgIHZhciBwb3MgPSBicmFja2V0RXF1YWxzUG9zID09PSAtMSA/IHBhcnQuaW5kZXhPZignPScpIDogYnJhY2tldEVxdWFsc1BvcyArIDE7XG5cbiAgICAgICAgdmFyIGtleSwgdmFsO1xuICAgICAgICBpZiAocG9zID09PSAtMSkge1xuICAgICAgICAgICAga2V5ID0gb3B0aW9ucy5kZWNvZGVyKHBhcnQsIGRlZmF1bHRzLmRlY29kZXIsIGNoYXJzZXQpO1xuICAgICAgICAgICAgdmFsID0gb3B0aW9ucy5zdHJpY3ROdWxsSGFuZGxpbmcgPyBudWxsIDogJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXkgPSBvcHRpb25zLmRlY29kZXIocGFydC5zbGljZSgwLCBwb3MpLCBkZWZhdWx0cy5kZWNvZGVyLCBjaGFyc2V0KTtcbiAgICAgICAgICAgIHZhbCA9IG9wdGlvbnMuZGVjb2RlcihwYXJ0LnNsaWNlKHBvcyArIDEpLCBkZWZhdWx0cy5kZWNvZGVyLCBjaGFyc2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWwgJiYgb3B0aW9ucy5pbnRlcnByZXROdW1lcmljRW50aXRpZXMgJiYgY2hhcnNldCA9PT0gJ2lzby04ODU5LTEnKSB7XG4gICAgICAgICAgICB2YWwgPSBpbnRlcnByZXROdW1lcmljRW50aXRpZXModmFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWwgJiYgb3B0aW9ucy5jb21tYSAmJiB2YWwuaW5kZXhPZignLCcpID4gLTEpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5zcGxpdCgnLCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhcy5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgICAgb2JqW2tleV0gPSB1dGlscy5jb21iaW5lKG9ialtrZXldLCB2YWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JqW2tleV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xufTtcblxudmFyIHBhcnNlT2JqZWN0ID0gZnVuY3Rpb24gKGNoYWluLCB2YWwsIG9wdGlvbnMpIHtcbiAgICB2YXIgbGVhZiA9IHZhbDtcblxuICAgIGZvciAodmFyIGkgPSBjaGFpbi5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgb2JqO1xuICAgICAgICB2YXIgcm9vdCA9IGNoYWluW2ldO1xuXG4gICAgICAgIGlmIChyb290ID09PSAnW10nICYmIG9wdGlvbnMucGFyc2VBcnJheXMpIHtcbiAgICAgICAgICAgIG9iaiA9IFtdLmNvbmNhdChsZWFmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9iaiA9IG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuICAgICAgICAgICAgdmFyIGNsZWFuUm9vdCA9IHJvb3QuY2hhckF0KDApID09PSAnWycgJiYgcm9vdC5jaGFyQXQocm9vdC5sZW5ndGggLSAxKSA9PT0gJ10nID8gcm9vdC5zbGljZSgxLCAtMSkgOiByb290O1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gcGFyc2VJbnQoY2xlYW5Sb290LCAxMCk7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMucGFyc2VBcnJheXMgJiYgY2xlYW5Sb290ID09PSAnJykge1xuICAgICAgICAgICAgICAgIG9iaiA9IHsgMDogbGVhZiB9O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAhaXNOYU4oaW5kZXgpXG4gICAgICAgICAgICAgICAgJiYgcm9vdCAhPT0gY2xlYW5Sb290XG4gICAgICAgICAgICAgICAgJiYgU3RyaW5nKGluZGV4KSA9PT0gY2xlYW5Sb290XG4gICAgICAgICAgICAgICAgJiYgaW5kZXggPj0gMFxuICAgICAgICAgICAgICAgICYmIChvcHRpb25zLnBhcnNlQXJyYXlzICYmIGluZGV4IDw9IG9wdGlvbnMuYXJyYXlMaW1pdClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG9iaiA9IFtdO1xuICAgICAgICAgICAgICAgIG9ialtpbmRleF0gPSBsZWFmO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvYmpbY2xlYW5Sb290XSA9IGxlYWY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZWFmID0gb2JqO1xuICAgIH1cblxuICAgIHJldHVybiBsZWFmO1xufTtcblxudmFyIHBhcnNlS2V5cyA9IGZ1bmN0aW9uIHBhcnNlUXVlcnlTdHJpbmdLZXlzKGdpdmVuS2V5LCB2YWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWdpdmVuS2V5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUcmFuc2Zvcm0gZG90IG5vdGF0aW9uIHRvIGJyYWNrZXQgbm90YXRpb25cbiAgICB2YXIga2V5ID0gb3B0aW9ucy5hbGxvd0RvdHMgPyBnaXZlbktleS5yZXBsYWNlKC9cXC4oW14uW10rKS9nLCAnWyQxXScpIDogZ2l2ZW5LZXk7XG5cbiAgICAvLyBUaGUgcmVnZXggY2h1bmtzXG5cbiAgICB2YXIgYnJhY2tldHMgPSAvKFxcW1teW1xcXV0qXSkvO1xuICAgIHZhciBjaGlsZCA9IC8oXFxbW15bXFxdXSpdKS9nO1xuXG4gICAgLy8gR2V0IHRoZSBwYXJlbnRcblxuICAgIHZhciBzZWdtZW50ID0gYnJhY2tldHMuZXhlYyhrZXkpO1xuICAgIHZhciBwYXJlbnQgPSBzZWdtZW50ID8ga2V5LnNsaWNlKDAsIHNlZ21lbnQuaW5kZXgpIDoga2V5O1xuXG4gICAgLy8gU3Rhc2ggdGhlIHBhcmVudCBpZiBpdCBleGlzdHNcblxuICAgIHZhciBrZXlzID0gW107XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgICAvLyBJZiB3ZSBhcmVuJ3QgdXNpbmcgcGxhaW4gb2JqZWN0cywgb3B0aW9uYWxseSBwcmVmaXgga2V5cyB0aGF0IHdvdWxkIG92ZXJ3cml0ZSBvYmplY3QgcHJvdG90eXBlIHByb3BlcnRpZXNcbiAgICAgICAgaWYgKCFvcHRpb25zLnBsYWluT2JqZWN0cyAmJiBoYXMuY2FsbChPYmplY3QucHJvdG90eXBlLCBwYXJlbnQpKSB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuYWxsb3dQcm90b3R5cGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAga2V5cy5wdXNoKHBhcmVudCk7XG4gICAgfVxuXG4gICAgLy8gTG9vcCB0aHJvdWdoIGNoaWxkcmVuIGFwcGVuZGluZyB0byB0aGUgYXJyYXkgdW50aWwgd2UgaGl0IGRlcHRoXG5cbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKChzZWdtZW50ID0gY2hpbGQuZXhlYyhrZXkpKSAhPT0gbnVsbCAmJiBpIDwgb3B0aW9ucy5kZXB0aCkge1xuICAgICAgICBpICs9IDE7XG4gICAgICAgIGlmICghb3B0aW9ucy5wbGFpbk9iamVjdHMgJiYgaGFzLmNhbGwoT2JqZWN0LnByb3RvdHlwZSwgc2VnbWVudFsxXS5zbGljZSgxLCAtMSkpKSB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuYWxsb3dQcm90b3R5cGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGtleXMucHVzaChzZWdtZW50WzFdKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSdzIGEgcmVtYWluZGVyLCBqdXN0IGFkZCB3aGF0ZXZlciBpcyBsZWZ0XG5cbiAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICBrZXlzLnB1c2goJ1snICsga2V5LnNsaWNlKHNlZ21lbnQuaW5kZXgpICsgJ10nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VPYmplY3Qoa2V5cywgdmFsLCBvcHRpb25zKTtcbn07XG5cbnZhciBub3JtYWxpemVQYXJzZU9wdGlvbnMgPSBmdW5jdGlvbiBub3JtYWxpemVQYXJzZU9wdGlvbnMob3B0cykge1xuICAgIGlmICghb3B0cykge1xuICAgICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuZGVjb2RlciAhPT0gbnVsbCAmJiBvcHRzLmRlY29kZXIgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0cy5kZWNvZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0RlY29kZXIgaGFzIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRzLmNoYXJzZXQgIT09ICd1bmRlZmluZWQnICYmIG9wdHMuY2hhcnNldCAhPT0gJ3V0Zi04JyAmJiBvcHRzLmNoYXJzZXQgIT09ICdpc28tODg1OS0xJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBjaGFyc2V0IG9wdGlvbiBtdXN0IGJlIGVpdGhlciB1dGYtOCwgaXNvLTg4NTktMSwgb3IgdW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIHZhciBjaGFyc2V0ID0gdHlwZW9mIG9wdHMuY2hhcnNldCA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0cy5jaGFyc2V0IDogb3B0cy5jaGFyc2V0O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWxsb3dEb3RzOiB0eXBlb2Ygb3B0cy5hbGxvd0RvdHMgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdHMuYWxsb3dEb3RzIDogISFvcHRzLmFsbG93RG90cyxcbiAgICAgICAgYWxsb3dQcm90b3R5cGVzOiB0eXBlb2Ygb3B0cy5hbGxvd1Byb3RvdHlwZXMgPT09ICdib29sZWFuJyA/IG9wdHMuYWxsb3dQcm90b3R5cGVzIDogZGVmYXVsdHMuYWxsb3dQcm90b3R5cGVzLFxuICAgICAgICBhcnJheUxpbWl0OiB0eXBlb2Ygb3B0cy5hcnJheUxpbWl0ID09PSAnbnVtYmVyJyA/IG9wdHMuYXJyYXlMaW1pdCA6IGRlZmF1bHRzLmFycmF5TGltaXQsXG4gICAgICAgIGNoYXJzZXQ6IGNoYXJzZXQsXG4gICAgICAgIGNoYXJzZXRTZW50aW5lbDogdHlwZW9mIG9wdHMuY2hhcnNldFNlbnRpbmVsID09PSAnYm9vbGVhbicgPyBvcHRzLmNoYXJzZXRTZW50aW5lbCA6IGRlZmF1bHRzLmNoYXJzZXRTZW50aW5lbCxcbiAgICAgICAgY29tbWE6IHR5cGVvZiBvcHRzLmNvbW1hID09PSAnYm9vbGVhbicgPyBvcHRzLmNvbW1hIDogZGVmYXVsdHMuY29tbWEsXG4gICAgICAgIGRlY29kZXI6IHR5cGVvZiBvcHRzLmRlY29kZXIgPT09ICdmdW5jdGlvbicgPyBvcHRzLmRlY29kZXIgOiBkZWZhdWx0cy5kZWNvZGVyLFxuICAgICAgICBkZWxpbWl0ZXI6IHR5cGVvZiBvcHRzLmRlbGltaXRlciA9PT0gJ3N0cmluZycgfHwgdXRpbHMuaXNSZWdFeHAob3B0cy5kZWxpbWl0ZXIpID8gb3B0cy5kZWxpbWl0ZXIgOiBkZWZhdWx0cy5kZWxpbWl0ZXIsXG4gICAgICAgIGRlcHRoOiB0eXBlb2Ygb3B0cy5kZXB0aCA9PT0gJ251bWJlcicgPyBvcHRzLmRlcHRoIDogZGVmYXVsdHMuZGVwdGgsXG4gICAgICAgIGlnbm9yZVF1ZXJ5UHJlZml4OiBvcHRzLmlnbm9yZVF1ZXJ5UHJlZml4ID09PSB0cnVlLFxuICAgICAgICBpbnRlcnByZXROdW1lcmljRW50aXRpZXM6IHR5cGVvZiBvcHRzLmludGVycHJldE51bWVyaWNFbnRpdGllcyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5pbnRlcnByZXROdW1lcmljRW50aXRpZXMgOiBkZWZhdWx0cy5pbnRlcnByZXROdW1lcmljRW50aXRpZXMsXG4gICAgICAgIHBhcmFtZXRlckxpbWl0OiB0eXBlb2Ygb3B0cy5wYXJhbWV0ZXJMaW1pdCA9PT0gJ251bWJlcicgPyBvcHRzLnBhcmFtZXRlckxpbWl0IDogZGVmYXVsdHMucGFyYW1ldGVyTGltaXQsXG4gICAgICAgIHBhcnNlQXJyYXlzOiBvcHRzLnBhcnNlQXJyYXlzICE9PSBmYWxzZSxcbiAgICAgICAgcGxhaW5PYmplY3RzOiB0eXBlb2Ygb3B0cy5wbGFpbk9iamVjdHMgPT09ICdib29sZWFuJyA/IG9wdHMucGxhaW5PYmplY3RzIDogZGVmYXVsdHMucGxhaW5PYmplY3RzLFxuICAgICAgICBzdHJpY3ROdWxsSGFuZGxpbmc6IHR5cGVvZiBvcHRzLnN0cmljdE51bGxIYW5kbGluZyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5zdHJpY3ROdWxsSGFuZGxpbmcgOiBkZWZhdWx0cy5zdHJpY3ROdWxsSGFuZGxpbmdcbiAgICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RyLCBvcHRzKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBub3JtYWxpemVQYXJzZU9wdGlvbnMob3B0cyk7XG5cbiAgICBpZiAoc3RyID09PSAnJyB8fCBzdHIgPT09IG51bGwgfHwgdHlwZW9mIHN0ciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuICAgIH1cblxuICAgIHZhciB0ZW1wT2JqID0gdHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgPyBwYXJzZVZhbHVlcyhzdHIsIG9wdGlvbnMpIDogc3RyO1xuICAgIHZhciBvYmogPSBvcHRpb25zLnBsYWluT2JqZWN0cyA/IE9iamVjdC5jcmVhdGUobnVsbCkgOiB7fTtcblxuICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUga2V5cyBhbmQgc2V0dXAgdGhlIG5ldyBvYmplY3RcblxuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModGVtcE9iaik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICB2YXIgbmV3T2JqID0gcGFyc2VLZXlzKGtleSwgdGVtcE9ialtrZXldLCBvcHRpb25zKTtcbiAgICAgICAgb2JqID0gdXRpbHMubWVyZ2Uob2JqLCBuZXdPYmosIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiB1dGlscy5jb21wYWN0KG9iaik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgZm9ybWF0cyA9IHJlcXVpcmUoJy4vZm9ybWF0cycpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBhcnJheVByZWZpeEdlbmVyYXRvcnMgPSB7XG4gICAgYnJhY2tldHM6IGZ1bmN0aW9uIGJyYWNrZXRzKHByZWZpeCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZ1bmMtbmFtZS1tYXRjaGluZ1xuICAgICAgICByZXR1cm4gcHJlZml4ICsgJ1tdJztcbiAgICB9LFxuICAgIGNvbW1hOiAnY29tbWEnLFxuICAgIGluZGljZXM6IGZ1bmN0aW9uIGluZGljZXMocHJlZml4LCBrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBmdW5jLW5hbWUtbWF0Y2hpbmdcbiAgICAgICAgcmV0dXJuIHByZWZpeCArICdbJyArIGtleSArICddJztcbiAgICB9LFxuICAgIHJlcGVhdDogZnVuY3Rpb24gcmVwZWF0KHByZWZpeCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZ1bmMtbmFtZS1tYXRjaGluZ1xuICAgICAgICByZXR1cm4gcHJlZml4O1xuICAgIH1cbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbnZhciBwdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2g7XG52YXIgcHVzaFRvQXJyYXkgPSBmdW5jdGlvbiAoYXJyLCB2YWx1ZU9yQXJyYXkpIHtcbiAgICBwdXNoLmFwcGx5KGFyciwgaXNBcnJheSh2YWx1ZU9yQXJyYXkpID8gdmFsdWVPckFycmF5IDogW3ZhbHVlT3JBcnJheV0pO1xufTtcblxudmFyIHRvSVNPID0gRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc7XG5cbnZhciBkZWZhdWx0cyA9IHtcbiAgICBhZGRRdWVyeVByZWZpeDogZmFsc2UsXG4gICAgYWxsb3dEb3RzOiBmYWxzZSxcbiAgICBjaGFyc2V0OiAndXRmLTgnLFxuICAgIGNoYXJzZXRTZW50aW5lbDogZmFsc2UsXG4gICAgZGVsaW1pdGVyOiAnJicsXG4gICAgZW5jb2RlOiB0cnVlLFxuICAgIGVuY29kZXI6IHV0aWxzLmVuY29kZSxcbiAgICBlbmNvZGVWYWx1ZXNPbmx5OiBmYWxzZSxcbiAgICBmb3JtYXR0ZXI6IGZvcm1hdHMuZm9ybWF0dGVyc1tmb3JtYXRzWydkZWZhdWx0J11dLFxuICAgIC8vIGRlcHJlY2F0ZWRcbiAgICBpbmRpY2VzOiBmYWxzZSxcbiAgICBzZXJpYWxpemVEYXRlOiBmdW5jdGlvbiBzZXJpYWxpemVEYXRlKGRhdGUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBmdW5jLW5hbWUtbWF0Y2hpbmdcbiAgICAgICAgcmV0dXJuIHRvSVNPLmNhbGwoZGF0ZSk7XG4gICAgfSxcbiAgICBza2lwTnVsbHM6IGZhbHNlLFxuICAgIHN0cmljdE51bGxIYW5kbGluZzogZmFsc2Vcbn07XG5cbnZhciBzdHJpbmdpZnkgPSBmdW5jdGlvbiBzdHJpbmdpZnkoIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG4gICAgb2JqZWN0LFxuICAgIHByZWZpeCxcbiAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgIHN0cmljdE51bGxIYW5kbGluZyxcbiAgICBza2lwTnVsbHMsXG4gICAgZW5jb2RlcixcbiAgICBmaWx0ZXIsXG4gICAgc29ydCxcbiAgICBhbGxvd0RvdHMsXG4gICAgc2VyaWFsaXplRGF0ZSxcbiAgICBmb3JtYXR0ZXIsXG4gICAgZW5jb2RlVmFsdWVzT25seSxcbiAgICBjaGFyc2V0XG4pIHtcbiAgICB2YXIgb2JqID0gb2JqZWN0O1xuICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG9iaiA9IGZpbHRlcihwcmVmaXgsIG9iaik7XG4gICAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIG9iaiA9IHNlcmlhbGl6ZURhdGUob2JqKTtcbiAgICB9IGVsc2UgaWYgKGdlbmVyYXRlQXJyYXlQcmVmaXggPT09ICdjb21tYScgJiYgaXNBcnJheShvYmopKSB7XG4gICAgICAgIG9iaiA9IG9iai5qb2luKCcsJyk7XG4gICAgfVxuXG4gICAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgICAgICBpZiAoc3RyaWN0TnVsbEhhbmRsaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gZW5jb2RlciAmJiAhZW5jb2RlVmFsdWVzT25seSA/IGVuY29kZXIocHJlZml4LCBkZWZhdWx0cy5lbmNvZGVyLCBjaGFyc2V0KSA6IHByZWZpeDtcbiAgICAgICAgfVxuXG4gICAgICAgIG9iaiA9ICcnO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJyB8fCB0eXBlb2Ygb2JqID09PSAnbnVtYmVyJyB8fCB0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicgfHwgdXRpbHMuaXNCdWZmZXIob2JqKSkge1xuICAgICAgICBpZiAoZW5jb2Rlcikge1xuICAgICAgICAgICAgdmFyIGtleVZhbHVlID0gZW5jb2RlVmFsdWVzT25seSA/IHByZWZpeCA6IGVuY29kZXIocHJlZml4LCBkZWZhdWx0cy5lbmNvZGVyLCBjaGFyc2V0KTtcbiAgICAgICAgICAgIHJldHVybiBbZm9ybWF0dGVyKGtleVZhbHVlKSArICc9JyArIGZvcm1hdHRlcihlbmNvZGVyKG9iaiwgZGVmYXVsdHMuZW5jb2RlciwgY2hhcnNldCkpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2Zvcm1hdHRlcihwcmVmaXgpICsgJz0nICsgZm9ybWF0dGVyKFN0cmluZyhvYmopKV07XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfVxuXG4gICAgdmFyIG9iaktleXM7XG4gICAgaWYgKGlzQXJyYXkoZmlsdGVyKSkge1xuICAgICAgICBvYmpLZXlzID0gZmlsdGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICAgICAgb2JqS2V5cyA9IHNvcnQgPyBrZXlzLnNvcnQoc29ydCkgOiBrZXlzO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqS2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIga2V5ID0gb2JqS2V5c1tpXTtcblxuICAgICAgICBpZiAoc2tpcE51bGxzICYmIG9ialtrZXldID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgIHB1c2hUb0FycmF5KHZhbHVlcywgc3RyaW5naWZ5KFxuICAgICAgICAgICAgICAgIG9ialtrZXldLFxuICAgICAgICAgICAgICAgIHR5cGVvZiBnZW5lcmF0ZUFycmF5UHJlZml4ID09PSAnZnVuY3Rpb24nID8gZ2VuZXJhdGVBcnJheVByZWZpeChwcmVmaXgsIGtleSkgOiBwcmVmaXgsXG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVBcnJheVByZWZpeCxcbiAgICAgICAgICAgICAgICBzdHJpY3ROdWxsSGFuZGxpbmcsXG4gICAgICAgICAgICAgICAgc2tpcE51bGxzLFxuICAgICAgICAgICAgICAgIGVuY29kZXIsXG4gICAgICAgICAgICAgICAgZmlsdGVyLFxuICAgICAgICAgICAgICAgIHNvcnQsXG4gICAgICAgICAgICAgICAgYWxsb3dEb3RzLFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZURhdGUsXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyLFxuICAgICAgICAgICAgICAgIGVuY29kZVZhbHVlc09ubHksXG4gICAgICAgICAgICAgICAgY2hhcnNldFxuICAgICAgICAgICAgKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwdXNoVG9BcnJheSh2YWx1ZXMsIHN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICBvYmpba2V5XSxcbiAgICAgICAgICAgICAgICBwcmVmaXggKyAoYWxsb3dEb3RzID8gJy4nICsga2V5IDogJ1snICsga2V5ICsgJ10nKSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgICAgICAgICAgICAgIHN0cmljdE51bGxIYW5kbGluZyxcbiAgICAgICAgICAgICAgICBza2lwTnVsbHMsXG4gICAgICAgICAgICAgICAgZW5jb2RlcixcbiAgICAgICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICAgICAgc29ydCxcbiAgICAgICAgICAgICAgICBhbGxvd0RvdHMsXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgZW5jb2RlVmFsdWVzT25seSxcbiAgICAgICAgICAgICAgICBjaGFyc2V0XG4gICAgICAgICAgICApKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZXM7XG59O1xuXG52YXIgbm9ybWFsaXplU3RyaW5naWZ5T3B0aW9ucyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZVN0cmluZ2lmeU9wdGlvbnMob3B0cykge1xuICAgIGlmICghb3B0cykge1xuICAgICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuZW5jb2RlciAhPT0gbnVsbCAmJiBvcHRzLmVuY29kZXIgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0cy5lbmNvZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0VuY29kZXIgaGFzIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgdmFyIGNoYXJzZXQgPSBvcHRzLmNoYXJzZXQgfHwgZGVmYXVsdHMuY2hhcnNldDtcbiAgICBpZiAodHlwZW9mIG9wdHMuY2hhcnNldCAhPT0gJ3VuZGVmaW5lZCcgJiYgb3B0cy5jaGFyc2V0ICE9PSAndXRmLTgnICYmIG9wdHMuY2hhcnNldCAhPT0gJ2lzby04ODU5LTEnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBjaGFyc2V0IG9wdGlvbiBtdXN0IGJlIGVpdGhlciB1dGYtOCwgaXNvLTg4NTktMSwgb3IgdW5kZWZpbmVkJyk7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdCA9IGZvcm1hdHNbJ2RlZmF1bHQnXTtcbiAgICBpZiAodHlwZW9mIG9wdHMuZm9ybWF0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpZiAoIWhhcy5jYWxsKGZvcm1hdHMuZm9ybWF0dGVycywgb3B0cy5mb3JtYXQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGZvcm1hdCBvcHRpb24gcHJvdmlkZWQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgZm9ybWF0ID0gb3B0cy5mb3JtYXQ7XG4gICAgfVxuICAgIHZhciBmb3JtYXR0ZXIgPSBmb3JtYXRzLmZvcm1hdHRlcnNbZm9ybWF0XTtcblxuICAgIHZhciBmaWx0ZXIgPSBkZWZhdWx0cy5maWx0ZXI7XG4gICAgaWYgKHR5cGVvZiBvcHRzLmZpbHRlciA9PT0gJ2Z1bmN0aW9uJyB8fCBpc0FycmF5KG9wdHMuZmlsdGVyKSkge1xuICAgICAgICBmaWx0ZXIgPSBvcHRzLmZpbHRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBhZGRRdWVyeVByZWZpeDogdHlwZW9mIG9wdHMuYWRkUXVlcnlQcmVmaXggPT09ICdib29sZWFuJyA/IG9wdHMuYWRkUXVlcnlQcmVmaXggOiBkZWZhdWx0cy5hZGRRdWVyeVByZWZpeCxcbiAgICAgICAgYWxsb3dEb3RzOiB0eXBlb2Ygb3B0cy5hbGxvd0RvdHMgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdHMuYWxsb3dEb3RzIDogISFvcHRzLmFsbG93RG90cyxcbiAgICAgICAgY2hhcnNldDogY2hhcnNldCxcbiAgICAgICAgY2hhcnNldFNlbnRpbmVsOiB0eXBlb2Ygb3B0cy5jaGFyc2V0U2VudGluZWwgPT09ICdib29sZWFuJyA/IG9wdHMuY2hhcnNldFNlbnRpbmVsIDogZGVmYXVsdHMuY2hhcnNldFNlbnRpbmVsLFxuICAgICAgICBkZWxpbWl0ZXI6IHR5cGVvZiBvcHRzLmRlbGltaXRlciA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0cy5kZWxpbWl0ZXIgOiBvcHRzLmRlbGltaXRlcixcbiAgICAgICAgZW5jb2RlOiB0eXBlb2Ygb3B0cy5lbmNvZGUgPT09ICdib29sZWFuJyA/IG9wdHMuZW5jb2RlIDogZGVmYXVsdHMuZW5jb2RlLFxuICAgICAgICBlbmNvZGVyOiB0eXBlb2Ygb3B0cy5lbmNvZGVyID09PSAnZnVuY3Rpb24nID8gb3B0cy5lbmNvZGVyIDogZGVmYXVsdHMuZW5jb2RlcixcbiAgICAgICAgZW5jb2RlVmFsdWVzT25seTogdHlwZW9mIG9wdHMuZW5jb2RlVmFsdWVzT25seSA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5lbmNvZGVWYWx1ZXNPbmx5IDogZGVmYXVsdHMuZW5jb2RlVmFsdWVzT25seSxcbiAgICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICAgIGZvcm1hdHRlcjogZm9ybWF0dGVyLFxuICAgICAgICBzZXJpYWxpemVEYXRlOiB0eXBlb2Ygb3B0cy5zZXJpYWxpemVEYXRlID09PSAnZnVuY3Rpb24nID8gb3B0cy5zZXJpYWxpemVEYXRlIDogZGVmYXVsdHMuc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgc2tpcE51bGxzOiB0eXBlb2Ygb3B0cy5za2lwTnVsbHMgPT09ICdib29sZWFuJyA/IG9wdHMuc2tpcE51bGxzIDogZGVmYXVsdHMuc2tpcE51bGxzLFxuICAgICAgICBzb3J0OiB0eXBlb2Ygb3B0cy5zb3J0ID09PSAnZnVuY3Rpb24nID8gb3B0cy5zb3J0IDogbnVsbCxcbiAgICAgICAgc3RyaWN0TnVsbEhhbmRsaW5nOiB0eXBlb2Ygb3B0cy5zdHJpY3ROdWxsSGFuZGxpbmcgPT09ICdib29sZWFuJyA/IG9wdHMuc3RyaWN0TnVsbEhhbmRsaW5nIDogZGVmYXVsdHMuc3RyaWN0TnVsbEhhbmRsaW5nXG4gICAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgb3B0cykge1xuICAgIHZhciBvYmogPSBvYmplY3Q7XG4gICAgdmFyIG9wdGlvbnMgPSBub3JtYWxpemVTdHJpbmdpZnlPcHRpb25zKG9wdHMpO1xuXG4gICAgdmFyIG9iaktleXM7XG4gICAgdmFyIGZpbHRlcjtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5maWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgICAgIG9iaiA9IGZpbHRlcignJywgb2JqKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob3B0aW9ucy5maWx0ZXIpKSB7XG4gICAgICAgIGZpbHRlciA9IG9wdGlvbnMuZmlsdGVyO1xuICAgICAgICBvYmpLZXlzID0gZmlsdGVyO1xuICAgIH1cblxuICAgIHZhciBrZXlzID0gW107XG5cbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICB2YXIgYXJyYXlGb3JtYXQ7XG4gICAgaWYgKG9wdHMgJiYgb3B0cy5hcnJheUZvcm1hdCBpbiBhcnJheVByZWZpeEdlbmVyYXRvcnMpIHtcbiAgICAgICAgYXJyYXlGb3JtYXQgPSBvcHRzLmFycmF5Rm9ybWF0O1xuICAgIH0gZWxzZSBpZiAob3B0cyAmJiAnaW5kaWNlcycgaW4gb3B0cykge1xuICAgICAgICBhcnJheUZvcm1hdCA9IG9wdHMuaW5kaWNlcyA/ICdpbmRpY2VzJyA6ICdyZXBlYXQnO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5Rm9ybWF0ID0gJ2luZGljZXMnO1xuICAgIH1cblxuICAgIHZhciBnZW5lcmF0ZUFycmF5UHJlZml4ID0gYXJyYXlQcmVmaXhHZW5lcmF0b3JzW2FycmF5Rm9ybWF0XTtcblxuICAgIGlmICghb2JqS2V5cykge1xuICAgICAgICBvYmpLZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zb3J0KSB7XG4gICAgICAgIG9iaktleXMuc29ydChvcHRpb25zLnNvcnQpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqS2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIga2V5ID0gb2JqS2V5c1tpXTtcblxuICAgICAgICBpZiAob3B0aW9ucy5za2lwTnVsbHMgJiYgb2JqW2tleV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHB1c2hUb0FycmF5KGtleXMsIHN0cmluZ2lmeShcbiAgICAgICAgICAgIG9ialtrZXldLFxuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgZ2VuZXJhdGVBcnJheVByZWZpeCxcbiAgICAgICAgICAgIG9wdGlvbnMuc3RyaWN0TnVsbEhhbmRsaW5nLFxuICAgICAgICAgICAgb3B0aW9ucy5za2lwTnVsbHMsXG4gICAgICAgICAgICBvcHRpb25zLmVuY29kZSA/IG9wdGlvbnMuZW5jb2RlciA6IG51bGwsXG4gICAgICAgICAgICBvcHRpb25zLmZpbHRlcixcbiAgICAgICAgICAgIG9wdGlvbnMuc29ydCxcbiAgICAgICAgICAgIG9wdGlvbnMuYWxsb3dEb3RzLFxuICAgICAgICAgICAgb3B0aW9ucy5zZXJpYWxpemVEYXRlLFxuICAgICAgICAgICAgb3B0aW9ucy5mb3JtYXR0ZXIsXG4gICAgICAgICAgICBvcHRpb25zLmVuY29kZVZhbHVlc09ubHksXG4gICAgICAgICAgICBvcHRpb25zLmNoYXJzZXRcbiAgICAgICAgKSk7XG4gICAgfVxuXG4gICAgdmFyIGpvaW5lZCA9IGtleXMuam9pbihvcHRpb25zLmRlbGltaXRlcik7XG4gICAgdmFyIHByZWZpeCA9IG9wdGlvbnMuYWRkUXVlcnlQcmVmaXggPT09IHRydWUgPyAnPycgOiAnJztcblxuICAgIGlmIChvcHRpb25zLmNoYXJzZXRTZW50aW5lbCkge1xuICAgICAgICBpZiAob3B0aW9ucy5jaGFyc2V0ID09PSAnaXNvLTg4NTktMScpIHtcbiAgICAgICAgICAgIC8vIGVuY29kZVVSSUNvbXBvbmVudCgnJiMxMDAwMzsnKSwgdGhlIFwibnVtZXJpYyBlbnRpdHlcIiByZXByZXNlbnRhdGlvbiBvZiBhIGNoZWNrbWFya1xuICAgICAgICAgICAgcHJlZml4ICs9ICd1dGY4PSUyNiUyMzEwMDAzJTNCJic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBlbmNvZGVVUklDb21wb25lbnQoJ+KckycpXG4gICAgICAgICAgICBwcmVmaXggKz0gJ3V0Zjg9JUUyJTlDJTkzJic7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gam9pbmVkLmxlbmd0aCA+IDAgPyBwcmVmaXggKyBqb2luZWQgOiAnJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG52YXIgaGV4VGFibGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgICAgICAgYXJyYXkucHVzaCgnJScgKyAoKGkgPCAxNiA/ICcwJyA6ICcnKSArIGkudG9TdHJpbmcoMTYpKS50b1VwcGVyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG59KCkpO1xuXG52YXIgY29tcGFjdFF1ZXVlID0gZnVuY3Rpb24gY29tcGFjdFF1ZXVlKHF1ZXVlKSB7XG4gICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdmFyIGl0ZW0gPSBxdWV1ZS5wb3AoKTtcbiAgICAgICAgdmFyIG9iaiA9IGl0ZW0ub2JqW2l0ZW0ucHJvcF07XG5cbiAgICAgICAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgICAgICAgICAgdmFyIGNvbXBhY3RlZCA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG9iai5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqW2pdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wYWN0ZWQucHVzaChvYmpbal0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXRlbS5vYmpbaXRlbS5wcm9wXSA9IGNvbXBhY3RlZDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbnZhciBhcnJheVRvT2JqZWN0ID0gZnVuY3Rpb24gYXJyYXlUb09iamVjdChzb3VyY2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqID0gb3B0aW9ucyAmJiBvcHRpb25zLnBsYWluT2JqZWN0cyA/IE9iamVjdC5jcmVhdGUobnVsbCkgOiB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAodHlwZW9mIHNvdXJjZVtpXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIG9ialtpXSA9IHNvdXJjZVtpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG59O1xuXG52YXIgbWVyZ2UgPSBmdW5jdGlvbiBtZXJnZSh0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucykge1xuICAgIGlmICghc291cmNlKSB7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHRhcmdldCkpIHtcbiAgICAgICAgICAgIHRhcmdldC5wdXNoKHNvdXJjZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ICYmIHR5cGVvZiB0YXJnZXQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAoKG9wdGlvbnMgJiYgKG9wdGlvbnMucGxhaW5PYmplY3RzIHx8IG9wdGlvbnMuYWxsb3dQcm90b3R5cGVzKSkgfHwgIWhhcy5jYWxsKE9iamVjdC5wcm90b3R5cGUsIHNvdXJjZSkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbc291cmNlXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW3RhcmdldCwgc291cmNlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXQgfHwgdHlwZW9mIHRhcmdldCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIFt0YXJnZXRdLmNvbmNhdChzb3VyY2UpO1xuICAgIH1cblxuICAgIHZhciBtZXJnZVRhcmdldCA9IHRhcmdldDtcbiAgICBpZiAoaXNBcnJheSh0YXJnZXQpICYmICFpc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgbWVyZ2VUYXJnZXQgPSBhcnJheVRvT2JqZWN0KHRhcmdldCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKGlzQXJyYXkodGFyZ2V0KSAmJiBpc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgc291cmNlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGkpIHtcbiAgICAgICAgICAgIGlmIChoYXMuY2FsbCh0YXJnZXQsIGkpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRhcmdldEl0ZW0gPSB0YXJnZXRbaV07XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldEl0ZW0gJiYgdHlwZW9mIHRhcmdldEl0ZW0gPT09ICdvYmplY3QnICYmIGl0ZW0gJiYgdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtpXSA9IG1lcmdlKHRhcmdldEl0ZW0sIGl0ZW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W2ldID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHNvdXJjZSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBzb3VyY2Vba2V5XTtcblxuICAgICAgICBpZiAoaGFzLmNhbGwoYWNjLCBrZXkpKSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IG1lcmdlKGFjY1trZXldLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbWVyZ2VUYXJnZXQpO1xufTtcblxudmFyIGFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnblNpbmdsZVNvdXJjZSh0YXJnZXQsIHNvdXJjZSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhzb3VyY2UpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBrZXkpIHtcbiAgICAgICAgYWNjW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB0YXJnZXQpO1xufTtcblxudmFyIGRlY29kZSA9IGZ1bmN0aW9uIChzdHIsIGRlY29kZXIsIGNoYXJzZXQpIHtcbiAgICB2YXIgc3RyV2l0aG91dFBsdXMgPSBzdHIucmVwbGFjZSgvXFwrL2csICcgJyk7XG4gICAgaWYgKGNoYXJzZXQgPT09ICdpc28tODg1OS0xJykge1xuICAgICAgICAvLyB1bmVzY2FwZSBuZXZlciB0aHJvd3MsIG5vIHRyeS4uLmNhdGNoIG5lZWRlZDpcbiAgICAgICAgcmV0dXJuIHN0cldpdGhvdXRQbHVzLnJlcGxhY2UoLyVbMC05YS1mXXsyfS9naSwgdW5lc2NhcGUpO1xuICAgIH1cbiAgICAvLyB1dGYtOFxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoc3RyV2l0aG91dFBsdXMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHN0cldpdGhvdXRQbHVzO1xuICAgIH1cbn07XG5cbnZhciBlbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoc3RyLCBkZWZhdWx0RW5jb2RlciwgY2hhcnNldCkge1xuICAgIC8vIFRoaXMgY29kZSB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5IEJyaWFuIFdoaXRlIChtc2NkZXgpIGZvciB0aGUgaW8uanMgY29yZSBxdWVyeXN0cmluZyBsaWJyYXJ5LlxuICAgIC8vIEl0IGhhcyBiZWVuIGFkYXB0ZWQgaGVyZSBmb3Igc3RyaWN0ZXIgYWRoZXJlbmNlIHRvIFJGQyAzOTg2XG4gICAgaWYgKHN0ci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG5cbiAgICB2YXIgc3RyaW5nID0gdHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgPyBzdHIgOiBTdHJpbmcoc3RyKTtcblxuICAgIGlmIChjaGFyc2V0ID09PSAnaXNvLTg4NTktMScpIHtcbiAgICAgICAgcmV0dXJuIGVzY2FwZShzdHJpbmcpLnJlcGxhY2UoLyV1WzAtOWEtZl17NH0vZ2ksIGZ1bmN0aW9uICgkMCkge1xuICAgICAgICAgICAgcmV0dXJuICclMjYlMjMnICsgcGFyc2VJbnQoJDAuc2xpY2UoMiksIDE2KSArICclM0InO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgb3V0ID0gJyc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGMgPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjID09PSAweDJEIC8vIC1cbiAgICAgICAgICAgIHx8IGMgPT09IDB4MkUgLy8gLlxuICAgICAgICAgICAgfHwgYyA9PT0gMHg1RiAvLyBfXG4gICAgICAgICAgICB8fCBjID09PSAweDdFIC8vIH5cbiAgICAgICAgICAgIHx8IChjID49IDB4MzAgJiYgYyA8PSAweDM5KSAvLyAwLTlcbiAgICAgICAgICAgIHx8IChjID49IDB4NDEgJiYgYyA8PSAweDVBKSAvLyBhLXpcbiAgICAgICAgICAgIHx8IChjID49IDB4NjEgJiYgYyA8PSAweDdBKSAvLyBBLVpcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBvdXQgKz0gc3RyaW5nLmNoYXJBdChpKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgPCAweDgwKSB7XG4gICAgICAgICAgICBvdXQgPSBvdXQgKyBoZXhUYWJsZVtjXTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgPCAweDgwMCkge1xuICAgICAgICAgICAgb3V0ID0gb3V0ICsgKGhleFRhYmxlWzB4QzAgfCAoYyA+PiA2KV0gKyBoZXhUYWJsZVsweDgwIHwgKGMgJiAweDNGKV0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYyA8IDB4RDgwMCB8fCBjID49IDB4RTAwMCkge1xuICAgICAgICAgICAgb3V0ID0gb3V0ICsgKGhleFRhYmxlWzB4RTAgfCAoYyA+PiAxMildICsgaGV4VGFibGVbMHg4MCB8ICgoYyA+PiA2KSAmIDB4M0YpXSArIGhleFRhYmxlWzB4ODAgfCAoYyAmIDB4M0YpXSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGkgKz0gMTtcbiAgICAgICAgYyA9IDB4MTAwMDAgKyAoKChjICYgMHgzRkYpIDw8IDEwKSB8IChzdHJpbmcuY2hhckNvZGVBdChpKSAmIDB4M0ZGKSk7XG4gICAgICAgIG91dCArPSBoZXhUYWJsZVsweEYwIHwgKGMgPj4gMTgpXVxuICAgICAgICAgICAgKyBoZXhUYWJsZVsweDgwIHwgKChjID4+IDEyKSAmIDB4M0YpXVxuICAgICAgICAgICAgKyBoZXhUYWJsZVsweDgwIHwgKChjID4+IDYpICYgMHgzRildXG4gICAgICAgICAgICArIGhleFRhYmxlWzB4ODAgfCAoYyAmIDB4M0YpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxudmFyIGNvbXBhY3QgPSBmdW5jdGlvbiBjb21wYWN0KHZhbHVlKSB7XG4gICAgdmFyIHF1ZXVlID0gW3sgb2JqOiB7IG86IHZhbHVlIH0sIHByb3A6ICdvJyB9XTtcbiAgICB2YXIgcmVmcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgaXRlbSA9IHF1ZXVlW2ldO1xuICAgICAgICB2YXIgb2JqID0gaXRlbS5vYmpbaXRlbS5wcm9wXTtcblxuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwga2V5cy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbal07XG4gICAgICAgICAgICB2YXIgdmFsID0gb2JqW2tleV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsICE9PSBudWxsICYmIHJlZnMuaW5kZXhPZih2YWwpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHF1ZXVlLnB1c2goeyBvYmo6IG9iaiwgcHJvcDoga2V5IH0pO1xuICAgICAgICAgICAgICAgIHJlZnMucHVzaCh2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29tcGFjdFF1ZXVlKHF1ZXVlKTtcblxuICAgIHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBpc1JlZ0V4cCA9IGZ1bmN0aW9uIGlzUmVnRXhwKG9iaikge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59O1xuXG52YXIgaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlcihvYmopIHtcbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICEhKG9iai5jb25zdHJ1Y3RvciAmJiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iaikpO1xufTtcblxudmFyIGNvbWJpbmUgPSBmdW5jdGlvbiBjb21iaW5lKGEsIGIpIHtcbiAgICByZXR1cm4gW10uY29uY2F0KGEsIGIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYXJyYXlUb09iamVjdDogYXJyYXlUb09iamVjdCxcbiAgICBhc3NpZ246IGFzc2lnbixcbiAgICBjb21iaW5lOiBjb21iaW5lLFxuICAgIGNvbXBhY3Q6IGNvbXBhY3QsXG4gICAgZGVjb2RlOiBkZWNvZGUsXG4gICAgZW5jb2RlOiBlbmNvZGUsXG4gICAgaXNCdWZmZXI6IGlzQnVmZmVyLFxuICAgIGlzUmVnRXhwOiBpc1JlZ0V4cCxcbiAgICBtZXJnZTogbWVyZ2Vcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xudmFyIEVTID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvZXM1Jyk7XG52YXIgcmVwbGFjZSA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpO1xuXG52YXIgbGVmdFdoaXRlc3BhY2UgPSAvXltcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkZdKy87XG52YXIgcmlnaHRXaGl0ZXNwYWNlID0gL1tcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkZdKyQvO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRyaW0oKSB7XG5cdHZhciBTID0gRVMuVG9TdHJpbmcoRVMuQ2hlY2tPYmplY3RDb2VyY2libGUodGhpcykpO1xuXHRyZXR1cm4gcmVwbGFjZShyZXBsYWNlKFMsIGxlZnRXaGl0ZXNwYWNlLCAnJyksIHJpZ2h0V2hpdGVzcGFjZSwgJycpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCdmdW5jdGlvbi1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kVHJpbSA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBnZXRQb2x5ZmlsbCgpKTtcblxuZGVmaW5lKGJvdW5kVHJpbSwge1xuXHRnZXRQb2x5ZmlsbDogZ2V0UG9seWZpbGwsXG5cdGltcGxlbWVudGF0aW9uOiBpbXBsZW1lbnRhdGlvbixcblx0c2hpbTogc2hpbVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gYm91bmRUcmltO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciB6ZXJvV2lkdGhTcGFjZSA9ICdcXHUyMDBiJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKFN0cmluZy5wcm90b3R5cGUudHJpbSAmJiB6ZXJvV2lkdGhTcGFjZS50cmltKCkgPT09IHplcm9XaWR0aFNwYWNlKSB7XG5cdFx0cmV0dXJuIFN0cmluZy5wcm90b3R5cGUudHJpbTtcblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaGltU3RyaW5nVHJpbSgpIHtcblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0ZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIHsgdHJpbTogcG9seWZpbGwgfSwgeyB0cmltOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTdHJpbmcucHJvdG90eXBlLnRyaW0gIT09IHBvbHlmaWxsOyB9IH0pO1xuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIiwiLypcblx0TUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcblx0QXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cblxudmFyIHN0eWxlc0luRG9tID0ge307XG5cbnZhclx0bWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuXHR2YXIgbWVtbztcblxuXHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdGlmICh0eXBlb2YgbWVtbyA9PT0gXCJ1bmRlZmluZWRcIikgbWVtbyA9IGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0cmV0dXJuIG1lbW87XG5cdH07XG59O1xuXG52YXIgaXNPbGRJRSA9IG1lbW9pemUoZnVuY3Rpb24gKCkge1xuXHQvLyBUZXN0IGZvciBJRSA8PSA5IGFzIHByb3Bvc2VkIGJ5IEJyb3dzZXJoYWNrc1xuXHQvLyBAc2VlIGh0dHA6Ly9icm93c2VyaGFja3MuY29tLyNoYWNrLWU3MWQ4NjkyZjY1MzM0MTczZmVlNzE1YzIyMmNiODA1XG5cdC8vIFRlc3RzIGZvciBleGlzdGVuY2Ugb2Ygc3RhbmRhcmQgZ2xvYmFscyBpcyB0byBhbGxvdyBzdHlsZS1sb2FkZXJcblx0Ly8gdG8gb3BlcmF0ZSBjb3JyZWN0bHkgaW50byBub24tc3RhbmRhcmQgZW52aXJvbm1lbnRzXG5cdC8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2stY29udHJpYi9zdHlsZS1sb2FkZXIvaXNzdWVzLzE3N1xuXHRyZXR1cm4gd2luZG93ICYmIGRvY3VtZW50ICYmIGRvY3VtZW50LmFsbCAmJiAhd2luZG93LmF0b2I7XG59KTtcblxudmFyIGdldFRhcmdldCA9IGZ1bmN0aW9uICh0YXJnZXQsIHBhcmVudCkge1xuICBpZiAocGFyZW50KXtcbiAgICByZXR1cm4gcGFyZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTtcbiAgfVxuICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXQpO1xufTtcblxudmFyIGdldEVsZW1lbnQgPSAoZnVuY3Rpb24gKGZuKSB7XG5cdHZhciBtZW1vID0ge307XG5cblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldCwgcGFyZW50KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgcGFzc2luZyBmdW5jdGlvbiBpbiBvcHRpb25zLCB0aGVuIHVzZSBpdCBmb3IgcmVzb2x2ZSBcImhlYWRcIiBlbGVtZW50LlxuICAgICAgICAgICAgICAgIC8vIFVzZWZ1bCBmb3IgU2hhZG93IFJvb3Qgc3R5bGUgaS5lXG4gICAgICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgICAgIC8vICAgaW5zZXJ0SW50bzogZnVuY3Rpb24gKCkgeyByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNmb29cIikuc2hhZG93Um9vdCB9XG4gICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVtb1t0YXJnZXRdID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR2YXIgc3R5bGVUYXJnZXQgPSBnZXRUYXJnZXQuY2FsbCh0aGlzLCB0YXJnZXQsIHBhcmVudCk7XG5cdFx0XHQvLyBTcGVjaWFsIGNhc2UgdG8gcmV0dXJuIGhlYWQgb2YgaWZyYW1lIGluc3RlYWQgb2YgaWZyYW1lIGl0c2VsZlxuXHRcdFx0aWYgKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCAmJiBzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG5cdFx0XHRcdFx0Ly8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcblx0XHRcdFx0XHRzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuXHRcdFx0XHR9IGNhdGNoKGUpIHtcblx0XHRcdFx0XHRzdHlsZVRhcmdldCA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuXHRcdH1cblx0XHRyZXR1cm4gbWVtb1t0YXJnZXRdXG5cdH07XG59KSgpO1xuXG52YXIgc2luZ2xldG9uID0gbnVsbDtcbnZhclx0c2luZ2xldG9uQ291bnRlciA9IDA7XG52YXJcdHN0eWxlc0luc2VydGVkQXRUb3AgPSBbXTtcblxudmFyXHRmaXhVcmxzID0gcmVxdWlyZShcIi4vdXJsc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihsaXN0LCBvcHRpb25zKSB7XG5cdGlmICh0eXBlb2YgREVCVUcgIT09IFwidW5kZWZpbmVkXCIgJiYgREVCVUcpIHtcblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgc3R5bGUtbG9hZGVyIGNhbm5vdCBiZSB1c2VkIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnRcIik7XG5cdH1cblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRvcHRpb25zLmF0dHJzID0gdHlwZW9mIG9wdGlvbnMuYXR0cnMgPT09IFwib2JqZWN0XCIgPyBvcHRpb25zLmF0dHJzIDoge307XG5cblx0Ly8gRm9yY2Ugc2luZ2xlLXRhZyBzb2x1dGlvbiBvbiBJRTYtOSwgd2hpY2ggaGFzIGEgaGFyZCBsaW1pdCBvbiB0aGUgIyBvZiA8c3R5bGU+XG5cdC8vIHRhZ3MgaXQgd2lsbCBhbGxvdyBvbiBhIHBhZ2Vcblx0aWYgKCFvcHRpb25zLnNpbmdsZXRvbiAmJiB0eXBlb2Ygb3B0aW9ucy5zaW5nbGV0b24gIT09IFwiYm9vbGVhblwiKSBvcHRpb25zLnNpbmdsZXRvbiA9IGlzT2xkSUUoKTtcblxuXHQvLyBCeSBkZWZhdWx0LCBhZGQgPHN0eWxlPiB0YWdzIHRvIHRoZSA8aGVhZD4gZWxlbWVudFxuICAgICAgICBpZiAoIW9wdGlvbnMuaW5zZXJ0SW50bykgb3B0aW9ucy5pbnNlcnRJbnRvID0gXCJoZWFkXCI7XG5cblx0Ly8gQnkgZGVmYXVsdCwgYWRkIDxzdHlsZT4gdGFncyB0byB0aGUgYm90dG9tIG9mIHRoZSB0YXJnZXRcblx0aWYgKCFvcHRpb25zLmluc2VydEF0KSBvcHRpb25zLmluc2VydEF0ID0gXCJib3R0b21cIjtcblxuXHR2YXIgc3R5bGVzID0gbGlzdFRvU3R5bGVzKGxpc3QsIG9wdGlvbnMpO1xuXG5cdGFkZFN0eWxlc1RvRG9tKHN0eWxlcywgb3B0aW9ucyk7XG5cblx0cmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZSAobmV3TGlzdCkge1xuXHRcdHZhciBtYXlSZW1vdmUgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaXRlbSA9IHN0eWxlc1tpXTtcblx0XHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuXG5cdFx0XHRkb21TdHlsZS5yZWZzLS07XG5cdFx0XHRtYXlSZW1vdmUucHVzaChkb21TdHlsZSk7XG5cdFx0fVxuXG5cdFx0aWYobmV3TGlzdCkge1xuXHRcdFx0dmFyIG5ld1N0eWxlcyA9IGxpc3RUb1N0eWxlcyhuZXdMaXN0LCBvcHRpb25zKTtcblx0XHRcdGFkZFN0eWxlc1RvRG9tKG5ld1N0eWxlcywgb3B0aW9ucyk7XG5cdFx0fVxuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtYXlSZW1vdmUubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBkb21TdHlsZSA9IG1heVJlbW92ZVtpXTtcblxuXHRcdFx0aWYoZG9tU3R5bGUucmVmcyA9PT0gMCkge1xuXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSBkb21TdHlsZS5wYXJ0c1tqXSgpO1xuXG5cdFx0XHRcdGRlbGV0ZSBzdHlsZXNJbkRvbVtkb21TdHlsZS5pZF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufTtcblxuZnVuY3Rpb24gYWRkU3R5bGVzVG9Eb20gKHN0eWxlcywgb3B0aW9ucykge1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBpdGVtID0gc3R5bGVzW2ldO1xuXHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuXG5cdFx0aWYoZG9tU3R5bGUpIHtcblx0XHRcdGRvbVN0eWxlLnJlZnMrKztcblxuXHRcdFx0Zm9yKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGRvbVN0eWxlLnBhcnRzW2pdKGl0ZW0ucGFydHNbal0pO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IoOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRkb21TdHlsZS5wYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0sIG9wdGlvbnMpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIHBhcnRzID0gW107XG5cblx0XHRcdGZvcih2YXIgaiA9IDA7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdHBhcnRzLnB1c2goYWRkU3R5bGUoaXRlbS5wYXJ0c1tqXSwgb3B0aW9ucykpO1xuXHRcdFx0fVxuXG5cdFx0XHRzdHlsZXNJbkRvbVtpdGVtLmlkXSA9IHtpZDogaXRlbS5pZCwgcmVmczogMSwgcGFydHM6IHBhcnRzfTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gbGlzdFRvU3R5bGVzIChsaXN0LCBvcHRpb25zKSB7XG5cdHZhciBzdHlsZXMgPSBbXTtcblx0dmFyIG5ld1N0eWxlcyA9IHt9O1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBpdGVtID0gbGlzdFtpXTtcblx0XHR2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcblx0XHR2YXIgY3NzID0gaXRlbVsxXTtcblx0XHR2YXIgbWVkaWEgPSBpdGVtWzJdO1xuXHRcdHZhciBzb3VyY2VNYXAgPSBpdGVtWzNdO1xuXHRcdHZhciBwYXJ0ID0ge2NzczogY3NzLCBtZWRpYTogbWVkaWEsIHNvdXJjZU1hcDogc291cmNlTWFwfTtcblxuXHRcdGlmKCFuZXdTdHlsZXNbaWRdKSBzdHlsZXMucHVzaChuZXdTdHlsZXNbaWRdID0ge2lkOiBpZCwgcGFydHM6IFtwYXJ0XX0pO1xuXHRcdGVsc2UgbmV3U3R5bGVzW2lkXS5wYXJ0cy5wdXNoKHBhcnQpO1xuXHR9XG5cblx0cmV0dXJuIHN0eWxlcztcbn1cblxuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50IChvcHRpb25zLCBzdHlsZSkge1xuXHR2YXIgdGFyZ2V0ID0gZ2V0RWxlbWVudChvcHRpb25zLmluc2VydEludG8pXG5cblx0aWYgKCF0YXJnZXQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydEludG8nIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcblx0fVxuXG5cdHZhciBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcCA9IHN0eWxlc0luc2VydGVkQXRUb3Bbc3R5bGVzSW5zZXJ0ZWRBdFRvcC5sZW5ndGggLSAxXTtcblxuXHRpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJ0b3BcIikge1xuXHRcdGlmICghbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3ApIHtcblx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIHRhcmdldC5maXJzdENoaWxkKTtcblx0XHR9IGVsc2UgaWYgKGxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wLm5leHRTaWJsaW5nKSB7XG5cdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcC5uZXh0U2libGluZyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdFx0fVxuXHRcdHN0eWxlc0luc2VydGVkQXRUb3AucHVzaChzdHlsZSk7XG5cdH0gZWxzZSBpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJib3R0b21cIikge1xuXHRcdHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwib2JqZWN0XCIgJiYgb3B0aW9ucy5pbnNlcnRBdC5iZWZvcmUpIHtcblx0XHR2YXIgbmV4dFNpYmxpbmcgPSBnZXRFbGVtZW50KG9wdGlvbnMuaW5zZXJ0QXQuYmVmb3JlLCB0YXJnZXQpO1xuXHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIG5leHRTaWJsaW5nKTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJbU3R5bGUgTG9hZGVyXVxcblxcbiBJbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgJ2luc2VydEF0JyAoJ29wdGlvbnMuaW5zZXJ0QXQnKSBmb3VuZC5cXG4gTXVzdCBiZSAndG9wJywgJ2JvdHRvbScsIG9yIE9iamVjdC5cXG4gKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrLWNvbnRyaWIvc3R5bGUtbG9hZGVyI2luc2VydGF0KVxcblwiKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQgKHN0eWxlKSB7XG5cdGlmIChzdHlsZS5wYXJlbnROb2RlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cdHN0eWxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGUpO1xuXG5cdHZhciBpZHggPSBzdHlsZXNJbnNlcnRlZEF0VG9wLmluZGV4T2Yoc3R5bGUpO1xuXHRpZihpZHggPj0gMCkge1xuXHRcdHN0eWxlc0luc2VydGVkQXRUb3Auc3BsaWNlKGlkeCwgMSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50IChvcHRpb25zKSB7XG5cdHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcblxuXHRpZihvcHRpb25zLmF0dHJzLnR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdG9wdGlvbnMuYXR0cnMudHlwZSA9IFwidGV4dC9jc3NcIjtcblx0fVxuXG5cdGlmKG9wdGlvbnMuYXR0cnMubm9uY2UgPT09IHVuZGVmaW5lZCkge1xuXHRcdHZhciBub25jZSA9IGdldE5vbmNlKCk7XG5cdFx0aWYgKG5vbmNlKSB7XG5cdFx0XHRvcHRpb25zLmF0dHJzLm5vbmNlID0gbm9uY2U7XG5cdFx0fVxuXHR9XG5cblx0YWRkQXR0cnMoc3R5bGUsIG9wdGlvbnMuYXR0cnMpO1xuXHRpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucywgc3R5bGUpO1xuXG5cdHJldHVybiBzdHlsZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTGlua0VsZW1lbnQgKG9wdGlvbnMpIHtcblx0dmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcblxuXHRpZihvcHRpb25zLmF0dHJzLnR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdG9wdGlvbnMuYXR0cnMudHlwZSA9IFwidGV4dC9jc3NcIjtcblx0fVxuXHRvcHRpb25zLmF0dHJzLnJlbCA9IFwic3R5bGVzaGVldFwiO1xuXG5cdGFkZEF0dHJzKGxpbmssIG9wdGlvbnMuYXR0cnMpO1xuXHRpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucywgbGluayk7XG5cblx0cmV0dXJuIGxpbms7XG59XG5cbmZ1bmN0aW9uIGFkZEF0dHJzIChlbCwgYXR0cnMpIHtcblx0T2JqZWN0LmtleXMoYXR0cnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXHRcdGVsLnNldEF0dHJpYnV0ZShrZXksIGF0dHJzW2tleV0pO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0Tm9uY2UoKSB7XG5cdGlmICh0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRyZXR1cm4gX193ZWJwYWNrX25vbmNlX187XG59XG5cbmZ1bmN0aW9uIGFkZFN0eWxlIChvYmosIG9wdGlvbnMpIHtcblx0dmFyIHN0eWxlLCB1cGRhdGUsIHJlbW92ZSwgcmVzdWx0O1xuXG5cdC8vIElmIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHdhcyBkZWZpbmVkLCBydW4gaXQgb24gdGhlIGNzc1xuXHRpZiAob3B0aW9ucy50cmFuc2Zvcm0gJiYgb2JqLmNzcykge1xuXHQgICAgcmVzdWx0ID0gdHlwZW9mIG9wdGlvbnMudHJhbnNmb3JtID09PSAnZnVuY3Rpb24nXG5cdFx0ID8gb3B0aW9ucy50cmFuc2Zvcm0ob2JqLmNzcykgXG5cdFx0IDogb3B0aW9ucy50cmFuc2Zvcm0uZGVmYXVsdChvYmouY3NzKTtcblxuXHQgICAgaWYgKHJlc3VsdCkge1xuXHQgICAgXHQvLyBJZiB0cmFuc2Zvcm0gcmV0dXJucyBhIHZhbHVlLCB1c2UgdGhhdCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBjc3MuXG5cdCAgICBcdC8vIFRoaXMgYWxsb3dzIHJ1bm5pbmcgcnVudGltZSB0cmFuc2Zvcm1hdGlvbnMgb24gdGhlIGNzcy5cblx0ICAgIFx0b2JqLmNzcyA9IHJlc3VsdDtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdC8vIElmIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gcmV0dXJucyBhIGZhbHN5IHZhbHVlLCBkb24ndCBhZGQgdGhpcyBjc3MuXG5cdCAgICBcdC8vIFRoaXMgYWxsb3dzIGNvbmRpdGlvbmFsIGxvYWRpbmcgb2YgY3NzXG5cdCAgICBcdHJldHVybiBmdW5jdGlvbigpIHtcblx0ICAgIFx0XHQvLyBub29wXG5cdCAgICBcdH07XG5cdCAgICB9XG5cdH1cblxuXHRpZiAob3B0aW9ucy5zaW5nbGV0b24pIHtcblx0XHR2YXIgc3R5bGVJbmRleCA9IHNpbmdsZXRvbkNvdW50ZXIrKztcblxuXHRcdHN0eWxlID0gc2luZ2xldG9uIHx8IChzaW5nbGV0b24gPSBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykpO1xuXG5cdFx0dXBkYXRlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCBmYWxzZSk7XG5cdFx0cmVtb3ZlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCB0cnVlKTtcblxuXHR9IGVsc2UgaWYgKFxuXHRcdG9iai5zb3VyY2VNYXAgJiZcblx0XHR0eXBlb2YgVVJMID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgVVJMLmNyZWF0ZU9iamVjdFVSTCA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIFVSTC5yZXZva2VPYmplY3RVUkwgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBCbG9iID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiXG5cdCkge1xuXHRcdHN0eWxlID0gY3JlYXRlTGlua0VsZW1lbnQob3B0aW9ucyk7XG5cdFx0dXBkYXRlID0gdXBkYXRlTGluay5iaW5kKG51bGwsIHN0eWxlLCBvcHRpb25zKTtcblx0XHRyZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuXG5cdFx0XHRpZihzdHlsZS5ocmVmKSBVUkwucmV2b2tlT2JqZWN0VVJMKHN0eWxlLmhyZWYpO1xuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0c3R5bGUgPSBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG5cdFx0dXBkYXRlID0gYXBwbHlUb1RhZy5iaW5kKG51bGwsIHN0eWxlKTtcblx0XHRyZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuXHRcdH07XG5cdH1cblxuXHR1cGRhdGUob2JqKTtcblxuXHRyZXR1cm4gZnVuY3Rpb24gdXBkYXRlU3R5bGUgKG5ld09iaikge1xuXHRcdGlmIChuZXdPYmopIHtcblx0XHRcdGlmIChcblx0XHRcdFx0bmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJlxuXHRcdFx0XHRuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJlxuXHRcdFx0XHRuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR1cGRhdGUob2JqID0gbmV3T2JqKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVtb3ZlKCk7XG5cdFx0fVxuXHR9O1xufVxuXG52YXIgcmVwbGFjZVRleHQgPSAoZnVuY3Rpb24gKCkge1xuXHR2YXIgdGV4dFN0b3JlID0gW107XG5cblx0cmV0dXJuIGZ1bmN0aW9uIChpbmRleCwgcmVwbGFjZW1lbnQpIHtcblx0XHR0ZXh0U3RvcmVbaW5kZXhdID0gcmVwbGFjZW1lbnQ7XG5cblx0XHRyZXR1cm4gdGV4dFN0b3JlLmZpbHRlcihCb29sZWFuKS5qb2luKCdcXG4nKTtcblx0fTtcbn0pKCk7XG5cbmZ1bmN0aW9uIGFwcGx5VG9TaW5nbGV0b25UYWcgKHN0eWxlLCBpbmRleCwgcmVtb3ZlLCBvYmopIHtcblx0dmFyIGNzcyA9IHJlbW92ZSA/IFwiXCIgOiBvYmouY3NzO1xuXG5cdGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG5cdFx0c3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gcmVwbGFjZVRleHQoaW5kZXgsIGNzcyk7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIGNzc05vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpO1xuXHRcdHZhciBjaGlsZE5vZGVzID0gc3R5bGUuY2hpbGROb2RlcztcblxuXHRcdGlmIChjaGlsZE5vZGVzW2luZGV4XSkgc3R5bGUucmVtb3ZlQ2hpbGQoY2hpbGROb2Rlc1tpbmRleF0pO1xuXG5cdFx0aWYgKGNoaWxkTm9kZXMubGVuZ3RoKSB7XG5cdFx0XHRzdHlsZS5pbnNlcnRCZWZvcmUoY3NzTm9kZSwgY2hpbGROb2Rlc1tpbmRleF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdHlsZS5hcHBlbmRDaGlsZChjc3NOb2RlKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gYXBwbHlUb1RhZyAoc3R5bGUsIG9iaikge1xuXHR2YXIgY3NzID0gb2JqLmNzcztcblx0dmFyIG1lZGlhID0gb2JqLm1lZGlhO1xuXG5cdGlmKG1lZGlhKSB7XG5cdFx0c3R5bGUuc2V0QXR0cmlidXRlKFwibWVkaWFcIiwgbWVkaWEpXG5cdH1cblxuXHRpZihzdHlsZS5zdHlsZVNoZWV0KSB7XG5cdFx0c3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuXHR9IGVsc2Uge1xuXHRcdHdoaWxlKHN0eWxlLmZpcnN0Q2hpbGQpIHtcblx0XHRcdHN0eWxlLnJlbW92ZUNoaWxkKHN0eWxlLmZpcnN0Q2hpbGQpO1xuXHRcdH1cblxuXHRcdHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxpbmsgKGxpbmssIG9wdGlvbnMsIG9iaikge1xuXHR2YXIgY3NzID0gb2JqLmNzcztcblx0dmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG5cblx0Lypcblx0XHRJZiBjb252ZXJ0VG9BYnNvbHV0ZVVybHMgaXNuJ3QgZGVmaW5lZCwgYnV0IHNvdXJjZW1hcHMgYXJlIGVuYWJsZWRcblx0XHRhbmQgdGhlcmUgaXMgbm8gcHVibGljUGF0aCBkZWZpbmVkIHRoZW4gbGV0cyB0dXJuIGNvbnZlcnRUb0Fic29sdXRlVXJsc1xuXHRcdG9uIGJ5IGRlZmF1bHQuICBPdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgY29udmVydFRvQWJzb2x1dGVVcmxzIG9wdGlvblxuXHRcdGRpcmVjdGx5XG5cdCovXG5cdHZhciBhdXRvRml4VXJscyA9IG9wdGlvbnMuY29udmVydFRvQWJzb2x1dGVVcmxzID09PSB1bmRlZmluZWQgJiYgc291cmNlTWFwO1xuXG5cdGlmIChvcHRpb25zLmNvbnZlcnRUb0Fic29sdXRlVXJscyB8fCBhdXRvRml4VXJscykge1xuXHRcdGNzcyA9IGZpeFVybHMoY3NzKTtcblx0fVxuXG5cdGlmIChzb3VyY2VNYXApIHtcblx0XHQvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNjYwMzg3NVxuXHRcdGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIgKyBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpICsgXCIgKi9cIjtcblx0fVxuXG5cdHZhciBibG9iID0gbmV3IEJsb2IoW2Nzc10sIHsgdHlwZTogXCJ0ZXh0L2Nzc1wiIH0pO1xuXG5cdHZhciBvbGRTcmMgPSBsaW5rLmhyZWY7XG5cblx0bGluay5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblxuXHRpZihvbGRTcmMpIFVSTC5yZXZva2VPYmplY3RVUkwob2xkU3JjKTtcbn1cbiIsIlxuLyoqXG4gKiBXaGVuIHNvdXJjZSBtYXBzIGFyZSBlbmFibGVkLCBgc3R5bGUtbG9hZGVyYCB1c2VzIGEgbGluayBlbGVtZW50IHdpdGggYSBkYXRhLXVyaSB0b1xuICogZW1iZWQgdGhlIGNzcyBvbiB0aGUgcGFnZS4gVGhpcyBicmVha3MgYWxsIHJlbGF0aXZlIHVybHMgYmVjYXVzZSBub3cgdGhleSBhcmUgcmVsYXRpdmUgdG8gYVxuICogYnVuZGxlIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQgcGFnZS5cbiAqXG4gKiBPbmUgc29sdXRpb24gaXMgdG8gb25seSB1c2UgZnVsbCB1cmxzLCBidXQgdGhhdCBtYXkgYmUgaW1wb3NzaWJsZS5cbiAqXG4gKiBJbnN0ZWFkLCB0aGlzIGZ1bmN0aW9uIFwiZml4ZXNcIiB0aGUgcmVsYXRpdmUgdXJscyB0byBiZSBhYnNvbHV0ZSBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgcGFnZSBsb2NhdGlvbi5cbiAqXG4gKiBBIHJ1ZGltZW50YXJ5IHRlc3Qgc3VpdGUgaXMgbG9jYXRlZCBhdCBgdGVzdC9maXhVcmxzLmpzYCBhbmQgY2FuIGJlIHJ1biB2aWEgdGhlIGBucG0gdGVzdGAgY29tbWFuZC5cbiAqXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzKSB7XG4gIC8vIGdldCBjdXJyZW50IGxvY2F0aW9uXG4gIHZhciBsb2NhdGlvbiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LmxvY2F0aW9uO1xuXG4gIGlmICghbG9jYXRpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJmaXhVcmxzIHJlcXVpcmVzIHdpbmRvdy5sb2NhdGlvblwiKTtcbiAgfVxuXG5cdC8vIGJsYW5rIG9yIG51bGw/XG5cdGlmICghY3NzIHx8IHR5cGVvZiBjc3MgIT09IFwic3RyaW5nXCIpIHtcblx0ICByZXR1cm4gY3NzO1xuICB9XG5cbiAgdmFyIGJhc2VVcmwgPSBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIGxvY2F0aW9uLmhvc3Q7XG4gIHZhciBjdXJyZW50RGlyID0gYmFzZVVybCArIGxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1xcL1teXFwvXSokLywgXCIvXCIpO1xuXG5cdC8vIGNvbnZlcnQgZWFjaCB1cmwoLi4uKVxuXHQvKlxuXHRUaGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBqdXN0IGEgd2F5IHRvIHJlY3Vyc2l2ZWx5IG1hdGNoIGJyYWNrZXRzIHdpdGhpblxuXHRhIHN0cmluZy5cblxuXHQgL3VybFxccypcXCggID0gTWF0Y2ggb24gdGhlIHdvcmQgXCJ1cmxcIiB3aXRoIGFueSB3aGl0ZXNwYWNlIGFmdGVyIGl0IGFuZCB0aGVuIGEgcGFyZW5zXG5cdCAgICggID0gU3RhcnQgYSBjYXB0dXJpbmcgZ3JvdXBcblx0ICAgICAoPzogID0gU3RhcnQgYSBub24tY2FwdHVyaW5nIGdyb3VwXG5cdCAgICAgICAgIFteKShdICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICB8ICA9IE9SXG5cdCAgICAgICAgIFxcKCAgPSBNYXRjaCBhIHN0YXJ0IHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAoPzogID0gU3RhcnQgYW5vdGhlciBub24tY2FwdHVyaW5nIGdyb3Vwc1xuXHQgICAgICAgICAgICAgICAgIFteKShdKyAgPSBNYXRjaCBhbnl0aGluZyB0aGF0IGlzbid0IGEgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICAgICB8ICA9IE9SXG5cdCAgICAgICAgICAgICAgICAgXFwoICA9IE1hdGNoIGEgc3RhcnQgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICAgICAgICAgW14pKF0qICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgIFxcKSAgPSBNYXRjaCBhIGVuZCBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgKSAgPSBFbmQgR3JvdXBcbiAgICAgICAgICAgICAgKlxcKSA9IE1hdGNoIGFueXRoaW5nIGFuZCB0aGVuIGEgY2xvc2UgcGFyZW5zXG4gICAgICAgICAgKSAgPSBDbG9zZSBub24tY2FwdHVyaW5nIGdyb3VwXG4gICAgICAgICAgKiAgPSBNYXRjaCBhbnl0aGluZ1xuICAgICAgICkgID0gQ2xvc2UgY2FwdHVyaW5nIGdyb3VwXG5cdCBcXCkgID0gTWF0Y2ggYSBjbG9zZSBwYXJlbnNcblxuXHQgL2dpICA9IEdldCBhbGwgbWF0Y2hlcywgbm90IHRoZSBmaXJzdC4gIEJlIGNhc2UgaW5zZW5zaXRpdmUuXG5cdCAqL1xuXHR2YXIgZml4ZWRDc3MgPSBjc3MucmVwbGFjZSgvdXJsXFxzKlxcKCgoPzpbXikoXXxcXCgoPzpbXikoXSt8XFwoW14pKF0qXFwpKSpcXCkpKilcXCkvZ2ksIGZ1bmN0aW9uKGZ1bGxNYXRjaCwgb3JpZ1VybCkge1xuXHRcdC8vIHN0cmlwIHF1b3RlcyAoaWYgdGhleSBleGlzdClcblx0XHR2YXIgdW5xdW90ZWRPcmlnVXJsID0gb3JpZ1VybFxuXHRcdFx0LnRyaW0oKVxuXHRcdFx0LnJlcGxhY2UoL15cIiguKilcIiQvLCBmdW5jdGlvbihvLCAkMSl7IHJldHVybiAkMTsgfSlcblx0XHRcdC5yZXBsYWNlKC9eJyguKiknJC8sIGZ1bmN0aW9uKG8sICQxKXsgcmV0dXJuICQxOyB9KTtcblxuXHRcdC8vIGFscmVhZHkgYSBmdWxsIHVybD8gbm8gY2hhbmdlXG5cdFx0aWYgKC9eKCN8ZGF0YTp8aHR0cDpcXC9cXC98aHR0cHM6XFwvXFwvfGZpbGU6XFwvXFwvXFwvfFxccyokKS9pLnRlc3QodW5xdW90ZWRPcmlnVXJsKSkge1xuXHRcdCAgcmV0dXJuIGZ1bGxNYXRjaDtcblx0XHR9XG5cblx0XHQvLyBjb252ZXJ0IHRoZSB1cmwgdG8gYSBmdWxsIHVybFxuXHRcdHZhciBuZXdVcmw7XG5cblx0XHRpZiAodW5xdW90ZWRPcmlnVXJsLmluZGV4T2YoXCIvL1wiKSA9PT0gMCkge1xuXHRcdCAgXHQvL1RPRE86IHNob3VsZCB3ZSBhZGQgcHJvdG9jb2w/XG5cdFx0XHRuZXdVcmwgPSB1bnF1b3RlZE9yaWdVcmw7XG5cdFx0fSBlbHNlIGlmICh1bnF1b3RlZE9yaWdVcmwuaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdC8vIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBiYXNlIHVybFxuXHRcdFx0bmV3VXJsID0gYmFzZVVybCArIHVucXVvdGVkT3JpZ1VybDsgLy8gYWxyZWFkeSBzdGFydHMgd2l0aCAnLydcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gcGF0aCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gY3VycmVudCBkaXJlY3Rvcnlcblx0XHRcdG5ld1VybCA9IGN1cnJlbnREaXIgKyB1bnF1b3RlZE9yaWdVcmwucmVwbGFjZSgvXlxcLlxcLy8sIFwiXCIpOyAvLyBTdHJpcCBsZWFkaW5nICcuLydcblx0XHR9XG5cblx0XHQvLyBzZW5kIGJhY2sgdGhlIGZpeGVkIHVybCguLi4pXG5cdFx0cmV0dXJuIFwidXJsKFwiICsgSlNPTi5zdHJpbmdpZnkobmV3VXJsKSArIFwiKVwiO1xuXHR9KTtcblxuXHQvLyBzZW5kIGJhY2sgdGhlIGZpeGVkIGNzc1xuXHRyZXR1cm4gZml4ZWRDc3M7XG59O1xuIiwiLy8gICAgIFVuZGVyc2NvcmUuanMgMS45LjFcbi8vICAgICBodHRwOi8vdW5kZXJzY29yZWpzLm9yZ1xuLy8gICAgIChjKSAyMDA5LTIwMTggSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbi8vICAgICBVbmRlcnNjb3JlIG1heSBiZSBmcmVlbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuXG4oZnVuY3Rpb24oKSB7XG5cbiAgLy8gQmFzZWxpbmUgc2V0dXBcbiAgLy8gLS0tLS0tLS0tLS0tLS1cblxuICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgLy8gb24gdGhlIHNlcnZlciwgb3IgYHRoaXNgIGluIHNvbWUgdmlydHVhbCBtYWNoaW5lcy4gV2UgdXNlIGBzZWxmYFxuICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICB2YXIgcm9vdCA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmIHx8XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbC5nbG9iYWwgPT09IGdsb2JhbCAmJiBnbG9iYWwgfHxcbiAgICAgICAgICAgIHRoaXMgfHxcbiAgICAgICAgICAgIHt9O1xuXG4gIC8vIFNhdmUgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBgX2AgdmFyaWFibGUuXG4gIHZhciBwcmV2aW91c1VuZGVyc2NvcmUgPSByb290Ll87XG5cbiAgLy8gU2F2ZSBieXRlcyBpbiB0aGUgbWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBlZCkgdmVyc2lvbjpcbiAgdmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsIE9ialByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIFN5bWJvbFByb3RvID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wucHJvdG90eXBlIDogbnVsbDtcblxuICAvLyBDcmVhdGUgcXVpY2sgcmVmZXJlbmNlIHZhcmlhYmxlcyBmb3Igc3BlZWQgYWNjZXNzIHRvIGNvcmUgcHJvdG90eXBlcy5cbiAgdmFyIHB1c2ggPSBBcnJheVByb3RvLnB1c2gsXG4gICAgICBzbGljZSA9IEFycmF5UHJvdG8uc2xpY2UsXG4gICAgICB0b1N0cmluZyA9IE9ialByb3RvLnRvU3RyaW5nLFxuICAgICAgaGFzT3duUHJvcGVydHkgPSBPYmpQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuICAvLyBBbGwgKipFQ01BU2NyaXB0IDUqKiBuYXRpdmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2UgaG9wZSB0byB1c2VcbiAgLy8gYXJlIGRlY2xhcmVkIGhlcmUuXG4gIHZhciBuYXRpdmVJc0FycmF5ID0gQXJyYXkuaXNBcnJheSxcbiAgICAgIG5hdGl2ZUtleXMgPSBPYmplY3Qua2V5cyxcbiAgICAgIG5hdGl2ZUNyZWF0ZSA9IE9iamVjdC5jcmVhdGU7XG5cbiAgLy8gTmFrZWQgZnVuY3Rpb24gcmVmZXJlbmNlIGZvciBzdXJyb2dhdGUtcHJvdG90eXBlLXN3YXBwaW5nLlxuICB2YXIgQ3RvciA9IGZ1bmN0aW9uKCl7fTtcblxuICAvLyBDcmVhdGUgYSBzYWZlIHJlZmVyZW5jZSB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QgZm9yIHVzZSBiZWxvdy5cbiAgdmFyIF8gPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgXykgcmV0dXJuIG9iajtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgXykpIHJldHVybiBuZXcgXyhvYmopO1xuICAgIHRoaXMuX3dyYXBwZWQgPSBvYmo7XG4gIH07XG5cbiAgLy8gRXhwb3J0IHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3IgKipOb2RlLmpzKiosIHdpdGhcbiAgLy8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZm9yIHRoZWlyIG9sZCBtb2R1bGUgQVBJLiBJZiB3ZSdyZSBpblxuICAvLyB0aGUgYnJvd3NlciwgYWRkIGBfYCBhcyBhIGdsb2JhbCBvYmplY3QuXG4gIC8vIChgbm9kZVR5cGVgIGlzIGNoZWNrZWQgdG8gZW5zdXJlIHRoYXQgYG1vZHVsZWBcbiAgLy8gYW5kIGBleHBvcnRzYCBhcmUgbm90IEhUTUwgZWxlbWVudHMuKVxuICBpZiAodHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVmaW5lZCcgJiYgIWV4cG9ydHMubm9kZVR5cGUpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZpbmVkJyAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBfO1xuICAgIH1cbiAgICBleHBvcnRzLl8gPSBfO1xuICB9IGVsc2Uge1xuICAgIHJvb3QuXyA9IF87XG4gIH1cblxuICAvLyBDdXJyZW50IHZlcnNpb24uXG4gIF8uVkVSU0lPTiA9ICcxLjkuMSc7XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGVmZmljaWVudCAoZm9yIGN1cnJlbnQgZW5naW5lcykgdmVyc2lvblxuICAvLyBvZiB0aGUgcGFzc2VkLWluIGNhbGxiYWNrLCB0byBiZSByZXBlYXRlZGx5IGFwcGxpZWQgaW4gb3RoZXIgVW5kZXJzY29yZVxuICAvLyBmdW5jdGlvbnMuXG4gIHZhciBvcHRpbWl6ZUNiID0gZnVuY3Rpb24oZnVuYywgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgICBpZiAoY29udGV4dCA9PT0gdm9pZCAwKSByZXR1cm4gZnVuYztcbiAgICBzd2l0Y2ggKGFyZ0NvdW50ID09IG51bGwgPyAzIDogYXJnQ291bnQpIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUpO1xuICAgICAgfTtcbiAgICAgIC8vIFRoZSAyLWFyZ3VtZW50IGNhc2UgaXMgb21pdHRlZCBiZWNhdXNlIHdl4oCZcmUgbm90IHVzaW5nIGl0LlxuICAgICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH07XG4gICAgICBjYXNlIDQ6IHJldHVybiBmdW5jdGlvbihhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH07XG5cbiAgdmFyIGJ1aWx0aW5JdGVyYXRlZTtcblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBjYWxsYmFja3MgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBlYWNoXG4gIC8vIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uLCByZXR1cm5pbmcgdGhlIGRlc2lyZWQgcmVzdWx0IOKAlCBlaXRoZXIgYGlkZW50aXR5YCxcbiAgLy8gYW4gYXJiaXRyYXJ5IGNhbGxiYWNrLCBhIHByb3BlcnR5IG1hdGNoZXIsIG9yIGEgcHJvcGVydHkgYWNjZXNzb3IuXG4gIHZhciBjYiA9IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICAgIGlmIChfLml0ZXJhdGVlICE9PSBidWlsdGluSXRlcmF0ZWUpIHJldHVybiBfLml0ZXJhdGVlKHZhbHVlLCBjb250ZXh0KTtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIF8uaWRlbnRpdHk7XG4gICAgaWYgKF8uaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybiBvcHRpbWl6ZUNiKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCk7XG4gICAgaWYgKF8uaXNPYmplY3QodmFsdWUpICYmICFfLmlzQXJyYXkodmFsdWUpKSByZXR1cm4gXy5tYXRjaGVyKHZhbHVlKTtcbiAgICByZXR1cm4gXy5wcm9wZXJ0eSh2YWx1ZSk7XG4gIH07XG5cbiAgLy8gRXh0ZXJuYWwgd3JhcHBlciBmb3Igb3VyIGNhbGxiYWNrIGdlbmVyYXRvci4gVXNlcnMgbWF5IGN1c3RvbWl6ZVxuICAvLyBgXy5pdGVyYXRlZWAgaWYgdGhleSB3YW50IGFkZGl0aW9uYWwgcHJlZGljYXRlL2l0ZXJhdGVlIHNob3J0aGFuZCBzdHlsZXMuXG4gIC8vIFRoaXMgYWJzdHJhY3Rpb24gaGlkZXMgdGhlIGludGVybmFsLW9ubHkgYXJnQ291bnQgYXJndW1lbnQuXG4gIF8uaXRlcmF0ZWUgPSBidWlsdGluSXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBjYih2YWx1ZSwgY29udGV4dCwgSW5maW5pdHkpO1xuICB9O1xuXG4gIC8vIFNvbWUgZnVuY3Rpb25zIHRha2UgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLCBvciBhIGZldyBleHBlY3RlZFxuICAvLyBhcmd1bWVudHMgYXQgdGhlIGJlZ2lubmluZyBhbmQgdGhlbiBhIHZhcmlhYmxlIG51bWJlciBvZiB2YWx1ZXMgdG8gb3BlcmF0ZVxuICAvLyBvbi4gVGhpcyBoZWxwZXIgYWNjdW11bGF0ZXMgYWxsIHJlbWFpbmluZyBhcmd1bWVudHMgcGFzdCB0aGUgZnVuY3Rpb27igJlzXG4gIC8vIGFyZ3VtZW50IGxlbmd0aCAob3IgYW4gZXhwbGljaXQgYHN0YXJ0SW5kZXhgKSwgaW50byBhbiBhcnJheSB0aGF0IGJlY29tZXNcbiAgLy8gdGhlIGxhc3QgYXJndW1lbnQuIFNpbWlsYXIgdG8gRVM24oCZcyBcInJlc3QgcGFyYW1ldGVyXCIuXG4gIHZhciByZXN0QXJndW1lbnRzID0gZnVuY3Rpb24oZnVuYywgc3RhcnRJbmRleCkge1xuICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoYXJndW1lbnRzLmxlbmd0aCAtIHN0YXJ0SW5kZXgsIDApLFxuICAgICAgICAgIHJlc3QgPSBBcnJheShsZW5ndGgpLFxuICAgICAgICAgIGluZGV4ID0gMDtcbiAgICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIGFyZ3VtZW50c1swXSwgcmVzdCk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXSwgcmVzdCk7XG4gICAgICB9XG4gICAgICB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgfVxuICAgICAgYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIG5ldyBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIGFub3RoZXIuXG4gIHZhciBiYXNlQ3JlYXRlID0gZnVuY3Rpb24ocHJvdG90eXBlKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KHByb3RvdHlwZSkpIHJldHVybiB7fTtcbiAgICBpZiAobmF0aXZlQ3JlYXRlKSByZXR1cm4gbmF0aXZlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgQ3Rvci5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBDdG9yO1xuICAgIEN0b3IucHJvdG90eXBlID0gbnVsbDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciBzaGFsbG93UHJvcGVydHkgPSBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpba2V5XTtcbiAgICB9O1xuICB9O1xuXG4gIHZhciBoYXMgPSBmdW5jdGlvbihvYmosIHBhdGgpIHtcbiAgICByZXR1cm4gb2JqICE9IG51bGwgJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHBhdGgpO1xuICB9XG5cbiAgdmFyIGRlZXBHZXQgPSBmdW5jdGlvbihvYmosIHBhdGgpIHtcbiAgICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgICAgb2JqID0gb2JqW3BhdGhbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gbGVuZ3RoID8gb2JqIDogdm9pZCAwO1xuICB9O1xuXG4gIC8vIEhlbHBlciBmb3IgY29sbGVjdGlvbiBtZXRob2RzIHRvIGRldGVybWluZSB3aGV0aGVyIGEgY29sbGVjdGlvblxuICAvLyBzaG91bGQgYmUgaXRlcmF0ZWQgYXMgYW4gYXJyYXkgb3IgYXMgYW4gb2JqZWN0LlxuICAvLyBSZWxhdGVkOiBodHRwOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy10b2xlbmd0aFxuICAvLyBBdm9pZHMgYSB2ZXJ5IG5hc3R5IGlPUyA4IEpJVCBidWcgb24gQVJNLTY0LiAjMjA5NFxuICB2YXIgTUFYX0FSUkFZX0lOREVYID0gTWF0aC5wb3coMiwgNTMpIC0gMTtcbiAgdmFyIGdldExlbmd0aCA9IHNoYWxsb3dQcm9wZXJ0eSgnbGVuZ3RoJyk7XG4gIHZhciBpc0FycmF5TGlrZSA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24pIHtcbiAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKGNvbGxlY3Rpb24pO1xuICAgIHJldHVybiB0eXBlb2YgbGVuZ3RoID09ICdudW1iZXInICYmIGxlbmd0aCA+PSAwICYmIGxlbmd0aCA8PSBNQVhfQVJSQVlfSU5ERVg7XG4gIH07XG5cbiAgLy8gQ29sbGVjdGlvbiBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBUaGUgY29ybmVyc3RvbmUsIGFuIGBlYWNoYCBpbXBsZW1lbnRhdGlvbiwgYWthIGBmb3JFYWNoYC5cbiAgLy8gSGFuZGxlcyByYXcgb2JqZWN0cyBpbiBhZGRpdGlvbiB0byBhcnJheS1saWtlcy4gVHJlYXRzIGFsbFxuICAvLyBzcGFyc2UgYXJyYXktbGlrZXMgYXMgaWYgdGhleSB3ZXJlIGRlbnNlLlxuICBfLmVhY2ggPSBfLmZvckVhY2ggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIgaSwgbGVuZ3RoO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSB7XG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaXRlcmF0ZWUob2JqW2ldLCBpLCBvYmopO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVyYXRlZShvYmpba2V5c1tpXV0sIGtleXNbaV0sIG9iaik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQuXG4gIF8ubWFwID0gXy5jb2xsZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAgICByZXN1bHRzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgcmVzdWx0c1tpbmRleF0gPSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIHJlZHVjaW5nIGZ1bmN0aW9uIGl0ZXJhdGluZyBsZWZ0IG9yIHJpZ2h0LlxuICB2YXIgY3JlYXRlUmVkdWNlID0gZnVuY3Rpb24oZGlyKSB7XG4gICAgLy8gV3JhcCBjb2RlIHRoYXQgcmVhc3NpZ25zIGFyZ3VtZW50IHZhcmlhYmxlcyBpbiBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRoYW5cbiAgICAvLyB0aGUgb25lIHRoYXQgYWNjZXNzZXMgYGFyZ3VtZW50cy5sZW5ndGhgIHRvIGF2b2lkIGEgcGVyZiBoaXQuICgjMTk5MSlcbiAgICB2YXIgcmVkdWNlciA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGluaXRpYWwpIHtcbiAgICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICAgICAgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4gICAgICBpZiAoIWluaXRpYWwpIHtcbiAgICAgICAgbWVtbyA9IG9ialtrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGRpcjtcbiAgICAgIH1cbiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgICAgbWVtbyA9IGl0ZXJhdGVlKG1lbW8sIG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgbWVtbywgY29udGV4dCkge1xuICAgICAgdmFyIGluaXRpYWwgPSBhcmd1bWVudHMubGVuZ3RoID49IDM7XG4gICAgICByZXR1cm4gcmVkdWNlcihvYmosIG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDQpLCBtZW1vLCBpbml0aWFsKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vICoqUmVkdWNlKiogYnVpbGRzIHVwIGEgc2luZ2xlIHJlc3VsdCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFrYSBgaW5qZWN0YCxcbiAgLy8gb3IgYGZvbGRsYC5cbiAgXy5yZWR1Y2UgPSBfLmZvbGRsID0gXy5pbmplY3QgPSBjcmVhdGVSZWR1Y2UoMSk7XG5cbiAgLy8gVGhlIHJpZ2h0LWFzc29jaWF0aXZlIHZlcnNpb24gb2YgcmVkdWNlLCBhbHNvIGtub3duIGFzIGBmb2xkcmAuXG4gIF8ucmVkdWNlUmlnaHQgPSBfLmZvbGRyID0gY3JlYXRlUmVkdWNlKC0xKTtcblxuICAvLyBSZXR1cm4gdGhlIGZpcnN0IHZhbHVlIHdoaWNoIHBhc3NlcyBhIHRydXRoIHRlc3QuIEFsaWFzZWQgYXMgYGRldGVjdGAuXG4gIF8uZmluZCA9IF8uZGV0ZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIga2V5RmluZGVyID0gaXNBcnJheUxpa2Uob2JqKSA/IF8uZmluZEluZGV4IDogXy5maW5kS2V5O1xuICAgIHZhciBrZXkgPSBrZXlGaW5kZXIob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIGlmIChrZXkgIT09IHZvaWQgMCAmJiBrZXkgIT09IC0xKSByZXR1cm4gb2JqW2tleV07XG4gIH07XG5cbiAgLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBwYXNzIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNlZCBhcyBgc2VsZWN0YC5cbiAgXy5maWx0ZXIgPSBfLnNlbGVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGxpc3QpKSByZXN1bHRzLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBhIHRydXRoIHRlc3QgZmFpbHMuXG4gIF8ucmVqZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIob2JqLCBfLm5lZ2F0ZShjYihwcmVkaWNhdGUpKSwgY29udGV4dCk7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgYWxsIG9mIHRoZSBlbGVtZW50cyBtYXRjaCBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYGFsbGAuXG4gIF8uZXZlcnkgPSBfLmFsbCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKCFwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIERldGVybWluZSBpZiBhdCBsZWFzdCBvbmUgZWxlbWVudCBpbiB0aGUgb2JqZWN0IG1hdGNoZXMgYSB0cnV0aCB0ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBhbnlgLlxuICBfLnNvbWUgPSBfLmFueSA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBhcnJheSBvciBvYmplY3QgY29udGFpbnMgYSBnaXZlbiBpdGVtICh1c2luZyBgPT09YCkuXG4gIC8vIEFsaWFzZWQgYXMgYGluY2x1ZGVzYCBhbmQgYGluY2x1ZGVgLlxuICBfLmNvbnRhaW5zID0gXy5pbmNsdWRlcyA9IF8uaW5jbHVkZSA9IGZ1bmN0aW9uKG9iaiwgaXRlbSwgZnJvbUluZGV4LCBndWFyZCkge1xuICAgIGlmICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gXy52YWx1ZXMob2JqKTtcbiAgICBpZiAodHlwZW9mIGZyb21JbmRleCAhPSAnbnVtYmVyJyB8fCBndWFyZCkgZnJvbUluZGV4ID0gMDtcbiAgICByZXR1cm4gXy5pbmRleE9mKG9iaiwgaXRlbSwgZnJvbUluZGV4KSA+PSAwO1xuICB9O1xuXG4gIC8vIEludm9rZSBhIG1ldGhvZCAod2l0aCBhcmd1bWVudHMpIG9uIGV2ZXJ5IGl0ZW0gaW4gYSBjb2xsZWN0aW9uLlxuICBfLmludm9rZSA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24ob2JqLCBwYXRoLCBhcmdzKSB7XG4gICAgdmFyIGNvbnRleHRQYXRoLCBmdW5jO1xuICAgIGlmIChfLmlzRnVuY3Rpb24ocGF0aCkpIHtcbiAgICAgIGZ1bmMgPSBwYXRoO1xuICAgIH0gZWxzZSBpZiAoXy5pc0FycmF5KHBhdGgpKSB7XG4gICAgICBjb250ZXh0UGF0aCA9IHBhdGguc2xpY2UoMCwgLTEpO1xuICAgICAgcGF0aCA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcbiAgICB9XG4gICAgcmV0dXJuIF8ubWFwKG9iaiwgZnVuY3Rpb24oY29udGV4dCkge1xuICAgICAgdmFyIG1ldGhvZCA9IGZ1bmM7XG4gICAgICBpZiAoIW1ldGhvZCkge1xuICAgICAgICBpZiAoY29udGV4dFBhdGggJiYgY29udGV4dFBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgY29udGV4dCA9IGRlZXBHZXQoY29udGV4dCwgY29udGV4dFBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZXh0ID09IG51bGwpIHJldHVybiB2b2lkIDA7XG4gICAgICAgIG1ldGhvZCA9IGNvbnRleHRbcGF0aF07XG4gICAgICB9XG4gICAgICByZXR1cm4gbWV0aG9kID09IG51bGwgPyBtZXRob2QgOiBtZXRob2QuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYG1hcGA6IGZldGNoaW5nIGEgcHJvcGVydHkuXG4gIF8ucGx1Y2sgPSBmdW5jdGlvbihvYmosIGtleSkge1xuICAgIHJldHVybiBfLm1hcChvYmosIF8ucHJvcGVydHkoa2V5KSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgZmlsdGVyYDogc2VsZWN0aW5nIG9ubHkgb2JqZWN0c1xuICAvLyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLndoZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykge1xuICAgIHJldHVybiBfLmZpbHRlcihvYmosIF8ubWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbmRgOiBnZXR0aW5nIHRoZSBmaXJzdCBvYmplY3RcbiAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5maW5kV2hlcmUgPSBmdW5jdGlvbihvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIF8uZmluZChvYmosIF8ubWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWF4aW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5tYXggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IC1JbmZpbml0eSwgbGFzdENvbXB1dGVkID0gLUluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwgfHwgdHlwZW9mIGl0ZXJhdGVlID09ICdudW1iZXInICYmIHR5cGVvZiBvYmpbMF0gIT0gJ29iamVjdCcgJiYgb2JqICE9IG51bGwpIHtcbiAgICAgIG9iaiA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgPiByZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHYsIGluZGV4LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodiwgaW5kZXgsIGxpc3QpO1xuICAgICAgICBpZiAoY29tcHV0ZWQgPiBsYXN0Q29tcHV0ZWQgfHwgY29tcHV0ZWQgPT09IC1JbmZpbml0eSAmJiByZXN1bHQgPT09IC1JbmZpbml0eSkge1xuICAgICAgICAgIHJlc3VsdCA9IHY7XG4gICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWluaW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5taW4gPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IEluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSBJbmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICAgIGlmIChpdGVyYXRlZSA9PSBudWxsIHx8IHR5cGVvZiBpdGVyYXRlZSA9PSAnbnVtYmVyJyAmJiB0eXBlb2Ygb2JqWzBdICE9ICdvYmplY3QnICYmIG9iaiAhPSBudWxsKSB7XG4gICAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlIDwgcmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2LCBpbmRleCwgbGlzdCkge1xuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHYsIGluZGV4LCBsaXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVkIDwgbGFzdENvbXB1dGVkIHx8IGNvbXB1dGVkID09PSBJbmZpbml0eSAmJiByZXN1bHQgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdjtcbiAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gU2h1ZmZsZSBhIGNvbGxlY3Rpb24uXG4gIF8uc2h1ZmZsZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBfLnNhbXBsZShvYmosIEluZmluaXR5KTtcbiAgfTtcblxuICAvLyBTYW1wbGUgKipuKiogcmFuZG9tIHZhbHVlcyBmcm9tIGEgY29sbGVjdGlvbiB1c2luZyB0aGUgbW9kZXJuIHZlcnNpb24gb2YgdGhlXG4gIC8vIFtGaXNoZXItWWF0ZXMgc2h1ZmZsZV0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXLigJNZYXRlc19zaHVmZmxlKS5cbiAgLy8gSWYgKipuKiogaXMgbm90IHNwZWNpZmllZCwgcmV0dXJucyBhIHNpbmdsZSByYW5kb20gZWxlbWVudC5cbiAgLy8gVGhlIGludGVybmFsIGBndWFyZGAgYXJndW1lbnQgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgbWFwYC5cbiAgXy5zYW1wbGUgPSBmdW5jdGlvbihvYmosIG4sIGd1YXJkKSB7XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkge1xuICAgICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSBfLnZhbHVlcyhvYmopO1xuICAgICAgcmV0dXJuIG9ialtfLnJhbmRvbShvYmoubGVuZ3RoIC0gMSldO1xuICAgIH1cbiAgICB2YXIgc2FtcGxlID0gaXNBcnJheUxpa2Uob2JqKSA/IF8uY2xvbmUob2JqKSA6IF8udmFsdWVzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChzYW1wbGUpO1xuICAgIG4gPSBNYXRoLm1heChNYXRoLm1pbihuLCBsZW5ndGgpLCAwKTtcbiAgICB2YXIgbGFzdCA9IGxlbmd0aCAtIDE7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG47IGluZGV4KyspIHtcbiAgICAgIHZhciByYW5kID0gXy5yYW5kb20oaW5kZXgsIGxhc3QpO1xuICAgICAgdmFyIHRlbXAgPSBzYW1wbGVbaW5kZXhdO1xuICAgICAgc2FtcGxlW2luZGV4XSA9IHNhbXBsZVtyYW5kXTtcbiAgICAgIHNhbXBsZVtyYW5kXSA9IHRlbXA7XG4gICAgfVxuICAgIHJldHVybiBzYW1wbGUuc2xpY2UoMCwgbik7XG4gIH07XG5cbiAgLy8gU29ydCB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uIHByb2R1Y2VkIGJ5IGFuIGl0ZXJhdGVlLlxuICBfLnNvcnRCeSA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHJldHVybiBfLnBsdWNrKF8ubWFwKG9iaiwgZnVuY3Rpb24odmFsdWUsIGtleSwgbGlzdCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBpbmRleDogaW5kZXgrKyxcbiAgICAgICAgY3JpdGVyaWE6IGl0ZXJhdGVlKHZhbHVlLCBrZXksIGxpc3QpXG4gICAgICB9O1xuICAgIH0pLnNvcnQoZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYTtcbiAgICAgIHZhciBiID0gcmlnaHQuY3JpdGVyaWE7XG4gICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICBpZiAoYSA+IGIgfHwgYSA9PT0gdm9pZCAwKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgPCBiIHx8IGIgPT09IHZvaWQgMCkgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxlZnQuaW5kZXggLSByaWdodC5pbmRleDtcbiAgICB9KSwgJ3ZhbHVlJyk7XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBmb3IgYWdncmVnYXRlIFwiZ3JvdXAgYnlcIiBvcGVyYXRpb25zLlxuICB2YXIgZ3JvdXAgPSBmdW5jdGlvbihiZWhhdmlvciwgcGFydGl0aW9uKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICAgIHZhciByZXN1bHQgPSBwYXJ0aXRpb24gPyBbW10sIFtdXSA6IHt9O1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGtleSA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgb2JqKTtcbiAgICAgICAgYmVoYXZpb3IocmVzdWx0LCB2YWx1ZSwga2V5KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEdyb3VwcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLiBQYXNzIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGVcbiAgLy8gdG8gZ3JvdXAgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjcml0ZXJpb24uXG4gIF8uZ3JvdXBCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChoYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XS5wdXNoKHZhbHVlKTsgZWxzZSByZXN1bHRba2V5XSA9IFt2YWx1ZV07XG4gIH0pO1xuXG4gIC8vIEluZGV4ZXMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiwgc2ltaWxhciB0byBgZ3JvdXBCeWAsIGJ1dCBmb3JcbiAgLy8gd2hlbiB5b3Uga25vdyB0aGF0IHlvdXIgaW5kZXggdmFsdWVzIHdpbGwgYmUgdW5pcXVlLlxuICBfLmluZGV4QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICB9KTtcblxuICAvLyBDb3VudHMgaW5zdGFuY2VzIG9mIGFuIG9iamVjdCB0aGF0IGdyb3VwIGJ5IGEgY2VydGFpbiBjcml0ZXJpb24uIFBhc3NcbiAgLy8gZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZSB0byBjb3VudCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gIC8vIGNyaXRlcmlvbi5cbiAgXy5jb3VudEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgaWYgKGhhcyhyZXN1bHQsIGtleSkpIHJlc3VsdFtrZXldKys7IGVsc2UgcmVzdWx0W2tleV0gPSAxO1xuICB9KTtcblxuICB2YXIgcmVTdHJTeW1ib2wgPSAvW15cXHVkODAwLVxcdWRmZmZdfFtcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl18W1xcdWQ4MDAtXFx1ZGZmZl0vZztcbiAgLy8gU2FmZWx5IGNyZWF0ZSBhIHJlYWwsIGxpdmUgYXJyYXkgZnJvbSBhbnl0aGluZyBpdGVyYWJsZS5cbiAgXy50b0FycmF5ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFvYmopIHJldHVybiBbXTtcbiAgICBpZiAoXy5pc0FycmF5KG9iaikpIHJldHVybiBzbGljZS5jYWxsKG9iaik7XG4gICAgaWYgKF8uaXNTdHJpbmcob2JqKSkge1xuICAgICAgLy8gS2VlcCBzdXJyb2dhdGUgcGFpciBjaGFyYWN0ZXJzIHRvZ2V0aGVyXG4gICAgICByZXR1cm4gb2JqLm1hdGNoKHJlU3RyU3ltYm9sKTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHJldHVybiBfLm1hcChvYmosIF8uaWRlbnRpdHkpO1xuICAgIHJldHVybiBfLnZhbHVlcyhvYmopO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFuIG9iamVjdC5cbiAgXy5zaXplID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gMDtcbiAgICByZXR1cm4gaXNBcnJheUxpa2Uob2JqKSA/IG9iai5sZW5ndGggOiBfLmtleXMob2JqKS5sZW5ndGg7XG4gIH07XG5cbiAgLy8gU3BsaXQgYSBjb2xsZWN0aW9uIGludG8gdHdvIGFycmF5czogb25lIHdob3NlIGVsZW1lbnRzIGFsbCBzYXRpc2Z5IHRoZSBnaXZlblxuICAvLyBwcmVkaWNhdGUsIGFuZCBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIGRvIG5vdCBzYXRpc2Z5IHRoZSBwcmVkaWNhdGUuXG4gIF8ucGFydGl0aW9uID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwgcGFzcykge1xuICAgIHJlc3VsdFtwYXNzID8gMCA6IDFdLnB1c2godmFsdWUpO1xuICB9LCB0cnVlKTtcblxuICAvLyBBcnJheSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gR2V0IHRoZSBmaXJzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuIEFsaWFzZWQgYXMgYGhlYWRgIGFuZCBgdGFrZWAuIFRoZSAqKmd1YXJkKiogY2hlY2tcbiAgLy8gYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgXy5tYXBgLlxuICBfLmZpcnN0ID0gXy5oZWFkID0gXy50YWtlID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgaWYgKGFycmF5ID09IG51bGwgfHwgYXJyYXkubGVuZ3RoIDwgMSkgcmV0dXJuIG4gPT0gbnVsbCA/IHZvaWQgMCA6IFtdO1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVswXTtcbiAgICByZXR1cm4gXy5pbml0aWFsKGFycmF5LCBhcnJheS5sZW5ndGggLSBuKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBsYXN0IGVudHJ5IG9mIHRoZSBhcnJheS4gRXNwZWNpYWxseSB1c2VmdWwgb25cbiAgLy8gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gYWxsIHRoZSB2YWx1ZXMgaW5cbiAgLy8gdGhlIGFycmF5LCBleGNsdWRpbmcgdGhlIGxhc3QgTi5cbiAgXy5pbml0aWFsID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIDAsIE1hdGgubWF4KDAsIGFycmF5Lmxlbmd0aCAtIChuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbikpKTtcbiAgfTtcblxuICAvLyBHZXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgbGFzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuXG4gIF8ubGFzdCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsIHx8IGFycmF5Lmxlbmd0aCA8IDEpIHJldHVybiBuID09IG51bGwgPyB2b2lkIDAgOiBbXTtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIF8ucmVzdChhcnJheSwgTWF0aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gbikpO1xuICB9O1xuXG4gIC8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBhcnJheS4gQWxpYXNlZCBhcyBgdGFpbGAgYW5kIGBkcm9wYC5cbiAgLy8gRXNwZWNpYWxseSB1c2VmdWwgb24gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgYW4gKipuKiogd2lsbCByZXR1cm5cbiAgLy8gdGhlIHJlc3QgTiB2YWx1ZXMgaW4gdGhlIGFycmF5LlxuICBfLnJlc3QgPSBfLnRhaWwgPSBfLmRyb3AgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgbiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pO1xuICB9O1xuXG4gIC8vIFRyaW0gb3V0IGFsbCBmYWxzeSB2YWx1ZXMgZnJvbSBhbiBhcnJheS5cbiAgXy5jb21wYWN0ID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIoYXJyYXksIEJvb2xlYW4pO1xuICB9O1xuXG4gIC8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIGEgcmVjdXJzaXZlIGBmbGF0dGVuYCBmdW5jdGlvbi5cbiAgdmFyIGZsYXR0ZW4gPSBmdW5jdGlvbihpbnB1dCwgc2hhbGxvdywgc3RyaWN0LCBvdXRwdXQpIHtcbiAgICBvdXRwdXQgPSBvdXRwdXQgfHwgW107XG4gICAgdmFyIGlkeCA9IG91dHB1dC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChpbnB1dCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gaW5wdXRbaV07XG4gICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYmIChfLmlzQXJyYXkodmFsdWUpIHx8IF8uaXNBcmd1bWVudHModmFsdWUpKSkge1xuICAgICAgICAvLyBGbGF0dGVuIGN1cnJlbnQgbGV2ZWwgb2YgYXJyYXkgb3IgYXJndW1lbnRzIG9iamVjdC5cbiAgICAgICAgaWYgKHNoYWxsb3cpIHtcbiAgICAgICAgICB2YXIgaiA9IDAsIGxlbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoaiA8IGxlbikgb3V0cHV0W2lkeCsrXSA9IHZhbHVlW2orK107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmxhdHRlbih2YWx1ZSwgc2hhbGxvdywgc3RyaWN0LCBvdXRwdXQpO1xuICAgICAgICAgIGlkeCA9IG91dHB1dC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCkge1xuICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG5cbiAgLy8gRmxhdHRlbiBvdXQgYW4gYXJyYXksIGVpdGhlciByZWN1cnNpdmVseSAoYnkgZGVmYXVsdCksIG9yIGp1c3Qgb25lIGxldmVsLlxuICBfLmZsYXR0ZW4gPSBmdW5jdGlvbihhcnJheSwgc2hhbGxvdykge1xuICAgIHJldHVybiBmbGF0dGVuKGFycmF5LCBzaGFsbG93LCBmYWxzZSk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgdmVyc2lvbiBvZiB0aGUgYXJyYXkgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBzcGVjaWZpZWQgdmFsdWUocykuXG4gIF8ud2l0aG91dCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oYXJyYXksIG90aGVyQXJyYXlzKSB7XG4gICAgcmV0dXJuIF8uZGlmZmVyZW5jZShhcnJheSwgb3RoZXJBcnJheXMpO1xuICB9KTtcblxuICAvLyBQcm9kdWNlIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiB0aGUgYXJyYXkuIElmIHRoZSBhcnJheSBoYXMgYWxyZWFkeVxuICAvLyBiZWVuIHNvcnRlZCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiB1c2luZyBhIGZhc3RlciBhbGdvcml0aG0uXG4gIC8vIFRoZSBmYXN0ZXIgYWxnb3JpdGhtIHdpbGwgbm90IHdvcmsgd2l0aCBhbiBpdGVyYXRlZSBpZiB0aGUgaXRlcmF0ZWVcbiAgLy8gaXMgbm90IGEgb25lLXRvLW9uZSBmdW5jdGlvbiwgc28gcHJvdmlkaW5nIGFuIGl0ZXJhdGVlIHdpbGwgZGlzYWJsZVxuICAvLyB0aGUgZmFzdGVyIGFsZ29yaXRobS5cbiAgLy8gQWxpYXNlZCBhcyBgdW5pcXVlYC5cbiAgXy51bmlxID0gXy51bmlxdWUgPSBmdW5jdGlvbihhcnJheSwgaXNTb3J0ZWQsIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaWYgKCFfLmlzQm9vbGVhbihpc1NvcnRlZCkpIHtcbiAgICAgIGNvbnRleHQgPSBpdGVyYXRlZTtcbiAgICAgIGl0ZXJhdGVlID0gaXNTb3J0ZWQ7XG4gICAgICBpc1NvcnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaXRlcmF0ZWUgIT0gbnVsbCkgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBzZWVuID0gW107XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaV0sXG4gICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlLCBpLCBhcnJheSkgOiB2YWx1ZTtcbiAgICAgIGlmIChpc1NvcnRlZCAmJiAhaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKCFpIHx8IHNlZW4gIT09IGNvbXB1dGVkKSByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIHNlZW4gPSBjb21wdXRlZDtcbiAgICAgIH0gZWxzZSBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKHNlZW4sIGNvbXB1dGVkKSkge1xuICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFfLmNvbnRhaW5zKHJlc3VsdCwgdmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgdGhlIHVuaW9uOiBlYWNoIGRpc3RpbmN0IGVsZW1lbnQgZnJvbSBhbGwgb2ZcbiAgLy8gdGhlIHBhc3NlZC1pbiBhcnJheXMuXG4gIF8udW5pb24gPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGFycmF5cykge1xuICAgIHJldHVybiBfLnVuaXEoZmxhdHRlbihhcnJheXMsIHRydWUsIHRydWUpKTtcbiAgfSk7XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGl0ZW0gc2hhcmVkIGJldHdlZW4gYWxsIHRoZVxuICAvLyBwYXNzZWQtaW4gYXJyYXlzLlxuICBfLmludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGFycmF5W2ldO1xuICAgICAgaWYgKF8uY29udGFpbnMocmVzdWx0LCBpdGVtKSkgY29udGludWU7XG4gICAgICB2YXIgajtcbiAgICAgIGZvciAoaiA9IDE7IGogPCBhcmdzTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKGFyZ3VtZW50c1tqXSwgaXRlbSkpIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGogPT09IGFyZ3NMZW5ndGgpIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFRha2UgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBvbmUgYXJyYXkgYW5kIGEgbnVtYmVyIG9mIG90aGVyIGFycmF5cy5cbiAgLy8gT25seSB0aGUgZWxlbWVudHMgcHJlc2VudCBpbiBqdXN0IHRoZSBmaXJzdCBhcnJheSB3aWxsIHJlbWFpbi5cbiAgXy5kaWZmZXJlbmNlID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihhcnJheSwgcmVzdCkge1xuICAgIHJlc3QgPSBmbGF0dGVuKHJlc3QsIHRydWUsIHRydWUpO1xuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgZnVuY3Rpb24odmFsdWUpe1xuICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKHJlc3QsIHZhbHVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gQ29tcGxlbWVudCBvZiBfLnppcC4gVW56aXAgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgYW5kIGdyb3Vwc1xuICAvLyBlYWNoIGFycmF5J3MgZWxlbWVudHMgb24gc2hhcmVkIGluZGljZXMuXG4gIF8udW56aXAgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHZhciBsZW5ndGggPSBhcnJheSAmJiBfLm1heChhcnJheSwgZ2V0TGVuZ3RoKS5sZW5ndGggfHwgMDtcbiAgICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHJlc3VsdFtpbmRleF0gPSBfLnBsdWNrKGFycmF5LCBpbmRleCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gWmlwIHRvZ2V0aGVyIG11bHRpcGxlIGxpc3RzIGludG8gYSBzaW5nbGUgYXJyYXkgLS0gZWxlbWVudHMgdGhhdCBzaGFyZVxuICAvLyBhbiBpbmRleCBnbyB0b2dldGhlci5cbiAgXy56aXAgPSByZXN0QXJndW1lbnRzKF8udW56aXApO1xuXG4gIC8vIENvbnZlcnRzIGxpc3RzIGludG8gb2JqZWN0cy4gUGFzcyBlaXRoZXIgYSBzaW5nbGUgYXJyYXkgb2YgYFtrZXksIHZhbHVlXWBcbiAgLy8gcGFpcnMsIG9yIHR3byBwYXJhbGxlbCBhcnJheXMgb2YgdGhlIHNhbWUgbGVuZ3RoIC0tIG9uZSBvZiBrZXlzLCBhbmQgb25lIG9mXG4gIC8vIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy4gUGFzc2luZyBieSBwYWlycyBpcyB0aGUgcmV2ZXJzZSBvZiBfLnBhaXJzLlxuICBfLm9iamVjdCA9IGZ1bmN0aW9uKGxpc3QsIHZhbHVlcykge1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGxpc3QpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1dID0gdmFsdWVzW2ldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1bMF1dID0gbGlzdFtpXVsxXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBHZW5lcmF0b3IgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBmaW5kSW5kZXggYW5kIGZpbmRMYXN0SW5kZXggZnVuY3Rpb25zLlxuICB2YXIgY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIgPSBmdW5jdGlvbihkaXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgICAgdmFyIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkgcmV0dXJuIGluZGV4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3QgaW5kZXggb24gYW4gYXJyYXktbGlrZSB0aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0LlxuICBfLmZpbmRJbmRleCA9IGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKDEpO1xuICBfLmZpbmRMYXN0SW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigtMSk7XG5cbiAgLy8gVXNlIGEgY29tcGFyYXRvciBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IHRoZSBzbWFsbGVzdCBpbmRleCBhdCB3aGljaFxuICAvLyBhbiBvYmplY3Qgc2hvdWxkIGJlIGluc2VydGVkIHNvIGFzIHRvIG1haW50YWluIG9yZGVyLiBVc2VzIGJpbmFyeSBzZWFyY2guXG4gIF8uc29ydGVkSW5kZXggPSBmdW5jdGlvbihhcnJheSwgb2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpO1xuICAgIHZhciB2YWx1ZSA9IGl0ZXJhdGVlKG9iaik7XG4gICAgdmFyIGxvdyA9IDAsIGhpZ2ggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgICB2YXIgbWlkID0gTWF0aC5mbG9vcigobG93ICsgaGlnaCkgLyAyKTtcbiAgICAgIGlmIChpdGVyYXRlZShhcnJheVttaWRdKSA8IHZhbHVlKSBsb3cgPSBtaWQgKyAxOyBlbHNlIGhpZ2ggPSBtaWQ7XG4gICAgfVxuICAgIHJldHVybiBsb3c7XG4gIH07XG5cbiAgLy8gR2VuZXJhdG9yIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgaW5kZXhPZiBhbmQgbGFzdEluZGV4T2YgZnVuY3Rpb25zLlxuICB2YXIgY3JlYXRlSW5kZXhGaW5kZXIgPSBmdW5jdGlvbihkaXIsIHByZWRpY2F0ZUZpbmQsIHNvcnRlZEluZGV4KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBpZHgpIHtcbiAgICAgIHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICAgIGlmICh0eXBlb2YgaWR4ID09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChkaXIgPiAwKSB7XG4gICAgICAgICAgaSA9IGlkeCA+PSAwID8gaWR4IDogTWF0aC5tYXgoaWR4ICsgbGVuZ3RoLCBpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZW5ndGggPSBpZHggPj0gMCA/IE1hdGgubWluKGlkeCArIDEsIGxlbmd0aCkgOiBpZHggKyBsZW5ndGggKyAxO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNvcnRlZEluZGV4ICYmIGlkeCAmJiBsZW5ndGgpIHtcbiAgICAgICAgaWR4ID0gc29ydGVkSW5kZXgoYXJyYXksIGl0ZW0pO1xuICAgICAgICByZXR1cm4gYXJyYXlbaWR4XSA9PT0gaXRlbSA/IGlkeCA6IC0xO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW0gIT09IGl0ZW0pIHtcbiAgICAgICAgaWR4ID0gcHJlZGljYXRlRmluZChzbGljZS5jYWxsKGFycmF5LCBpLCBsZW5ndGgpLCBfLmlzTmFOKTtcbiAgICAgICAgcmV0dXJuIGlkeCA+PSAwID8gaWR4ICsgaSA6IC0xO1xuICAgICAgfVxuICAgICAgZm9yIChpZHggPSBkaXIgPiAwID8gaSA6IGxlbmd0aCAtIDE7IGlkeCA+PSAwICYmIGlkeCA8IGxlbmd0aDsgaWR4ICs9IGRpcikge1xuICAgICAgICBpZiAoYXJyYXlbaWR4XSA9PT0gaXRlbSkgcmV0dXJuIGlkeDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYW4gaXRlbSBpbiBhbiBhcnJheSxcbiAgLy8gb3IgLTEgaWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1ZGVkIGluIHRoZSBhcnJheS5cbiAgLy8gSWYgdGhlIGFycmF5IGlzIGxhcmdlIGFuZCBhbHJlYWR5IGluIHNvcnQgb3JkZXIsIHBhc3MgYHRydWVgXG4gIC8vIGZvciAqKmlzU29ydGVkKiogdG8gdXNlIGJpbmFyeSBzZWFyY2guXG4gIF8uaW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKDEsIF8uZmluZEluZGV4LCBfLnNvcnRlZEluZGV4KTtcbiAgXy5sYXN0SW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKC0xLCBfLmZpbmRMYXN0SW5kZXgpO1xuXG4gIC8vIEdlbmVyYXRlIGFuIGludGVnZXIgQXJyYXkgY29udGFpbmluZyBhbiBhcml0aG1ldGljIHByb2dyZXNzaW9uLiBBIHBvcnQgb2ZcbiAgLy8gdGhlIG5hdGl2ZSBQeXRob24gYHJhbmdlKClgIGZ1bmN0aW9uLiBTZWVcbiAgLy8gW3RoZSBQeXRob24gZG9jdW1lbnRhdGlvbl0oaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3JhbmdlKS5cbiAgXy5yYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gICAgaWYgKHN0b3AgPT0gbnVsbCkge1xuICAgICAgc3RvcCA9IHN0YXJ0IHx8IDA7XG4gICAgICBzdGFydCA9IDA7XG4gICAgfVxuICAgIGlmICghc3RlcCkge1xuICAgICAgc3RlcCA9IHN0b3AgPCBzdGFydCA/IC0xIDogMTtcbiAgICB9XG5cbiAgICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCksIDApO1xuICAgIHZhciByYW5nZSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBsZW5ndGg7IGlkeCsrLCBzdGFydCArPSBzdGVwKSB7XG4gICAgICByYW5nZVtpZHhdID0gc3RhcnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhbmdlO1xuICB9O1xuXG4gIC8vIENodW5rIGEgc2luZ2xlIGFycmF5IGludG8gbXVsdGlwbGUgYXJyYXlzLCBlYWNoIGNvbnRhaW5pbmcgYGNvdW50YCBvciBmZXdlclxuICAvLyBpdGVtcy5cbiAgXy5jaHVuayA9IGZ1bmN0aW9uKGFycmF5LCBjb3VudCkge1xuICAgIGlmIChjb3VudCA9PSBudWxsIHx8IGNvdW50IDwgMSkgcmV0dXJuIFtdO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgaSA9IDAsIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgICAgcmVzdWx0LnB1c2goc2xpY2UuY2FsbChhcnJheSwgaSwgaSArPSBjb3VudCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIEZ1bmN0aW9uIChhaGVtKSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGV4ZWN1dGUgYSBmdW5jdGlvbiBhcyBhIGNvbnN0cnVjdG9yXG4gIC8vIG9yIGEgbm9ybWFsIGZ1bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgdmFyIGV4ZWN1dGVCb3VuZCA9IGZ1bmN0aW9uKHNvdXJjZUZ1bmMsIGJvdW5kRnVuYywgY29udGV4dCwgY2FsbGluZ0NvbnRleHQsIGFyZ3MpIHtcbiAgICBpZiAoIShjYWxsaW5nQ29udGV4dCBpbnN0YW5jZW9mIGJvdW5kRnVuYykpIHJldHVybiBzb3VyY2VGdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgIHZhciBzZWxmID0gYmFzZUNyZWF0ZShzb3VyY2VGdW5jLnByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IHNvdXJjZUZ1bmMuYXBwbHkoc2VsZiwgYXJncyk7XG4gICAgaWYgKF8uaXNPYmplY3QocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICByZXR1cm4gc2VsZjtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSBmdW5jdGlvbiBib3VuZCB0byBhIGdpdmVuIG9iamVjdCAoYXNzaWduaW5nIGB0aGlzYCwgYW5kIGFyZ3VtZW50cyxcbiAgLy8gb3B0aW9uYWxseSkuIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBGdW5jdGlvbi5iaW5kYCBpZlxuICAvLyBhdmFpbGFibGUuXG4gIF8uYmluZCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oZnVuYywgY29udGV4dCwgYXJncykge1xuICAgIGlmICghXy5pc0Z1bmN0aW9uKGZ1bmMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdCaW5kIG11c3QgYmUgY2FsbGVkIG9uIGEgZnVuY3Rpb24nKTtcbiAgICB2YXIgYm91bmQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGNhbGxBcmdzKSB7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCBjb250ZXh0LCB0aGlzLCBhcmdzLmNvbmNhdChjYWxsQXJncykpO1xuICAgIH0pO1xuICAgIHJldHVybiBib3VuZDtcbiAgfSk7XG5cbiAgLy8gUGFydGlhbGx5IGFwcGx5IGEgZnVuY3Rpb24gYnkgY3JlYXRpbmcgYSB2ZXJzaW9uIHRoYXQgaGFzIGhhZCBzb21lIG9mIGl0c1xuICAvLyBhcmd1bWVudHMgcHJlLWZpbGxlZCwgd2l0aG91dCBjaGFuZ2luZyBpdHMgZHluYW1pYyBgdGhpc2AgY29udGV4dC4gXyBhY3RzXG4gIC8vIGFzIGEgcGxhY2Vob2xkZXIgYnkgZGVmYXVsdCwgYWxsb3dpbmcgYW55IGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyB0byBiZVxuICAvLyBwcmUtZmlsbGVkLiBTZXQgYF8ucGFydGlhbC5wbGFjZWhvbGRlcmAgZm9yIGEgY3VzdG9tIHBsYWNlaG9sZGVyIGFyZ3VtZW50LlxuICBfLnBhcnRpYWwgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGZ1bmMsIGJvdW5kQXJncykge1xuICAgIHZhciBwbGFjZWhvbGRlciA9IF8ucGFydGlhbC5wbGFjZWhvbGRlcjtcbiAgICB2YXIgYm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBwb3NpdGlvbiA9IDAsIGxlbmd0aCA9IGJvdW5kQXJncy5sZW5ndGg7XG4gICAgICB2YXIgYXJncyA9IEFycmF5KGxlbmd0aCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFyZ3NbaV0gPSBib3VuZEFyZ3NbaV0gPT09IHBsYWNlaG9sZGVyID8gYXJndW1lbnRzW3Bvc2l0aW9uKytdIDogYm91bmRBcmdzW2ldO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgYXJndW1lbnRzLmxlbmd0aCkgYXJncy5wdXNoKGFyZ3VtZW50c1twb3NpdGlvbisrXSk7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCB0aGlzLCB0aGlzLCBhcmdzKTtcbiAgICB9O1xuICAgIHJldHVybiBib3VuZDtcbiAgfSk7XG5cbiAgXy5wYXJ0aWFsLnBsYWNlaG9sZGVyID0gXztcblxuICAvLyBCaW5kIGEgbnVtYmVyIG9mIGFuIG9iamVjdCdzIG1ldGhvZHMgdG8gdGhhdCBvYmplY3QuIFJlbWFpbmluZyBhcmd1bWVudHNcbiAgLy8gYXJlIHRoZSBtZXRob2QgbmFtZXMgdG8gYmUgYm91bmQuIFVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhhdCBhbGwgY2FsbGJhY2tzXG4gIC8vIGRlZmluZWQgb24gYW4gb2JqZWN0IGJlbG9uZyB0byBpdC5cbiAgXy5iaW5kQWxsID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihvYmosIGtleXMpIHtcbiAgICBrZXlzID0gZmxhdHRlbihrZXlzLCBmYWxzZSwgZmFsc2UpO1xuICAgIHZhciBpbmRleCA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChpbmRleCA8IDEpIHRocm93IG5ldyBFcnJvcignYmluZEFsbCBtdXN0IGJlIHBhc3NlZCBmdW5jdGlvbiBuYW1lcycpO1xuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpbmRleF07XG4gICAgICBvYmpba2V5XSA9IF8uYmluZChvYmpba2V5XSwgb2JqKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIE1lbW9pemUgYW4gZXhwZW5zaXZlIGZ1bmN0aW9uIGJ5IHN0b3JpbmcgaXRzIHJlc3VsdHMuXG4gIF8ubWVtb2l6ZSA9IGZ1bmN0aW9uKGZ1bmMsIGhhc2hlcikge1xuICAgIHZhciBtZW1vaXplID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgICB2YXIgY2FjaGUgPSBtZW1vaXplLmNhY2hlO1xuICAgICAgdmFyIGFkZHJlc3MgPSAnJyArIChoYXNoZXIgPyBoYXNoZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGtleSk7XG4gICAgICBpZiAoIWhhcyhjYWNoZSwgYWRkcmVzcykpIGNhY2hlW2FkZHJlc3NdID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgcmV0dXJuIGNhY2hlW2FkZHJlc3NdO1xuICAgIH07XG4gICAgbWVtb2l6ZS5jYWNoZSA9IHt9O1xuICAgIHJldHVybiBtZW1vaXplO1xuICB9O1xuXG4gIC8vIERlbGF5cyBhIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgYW5kIHRoZW4gY2FsbHNcbiAgLy8gaXQgd2l0aCB0aGUgYXJndW1lbnRzIHN1cHBsaWVkLlxuICBfLmRlbGF5ID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihmdW5jLCB3YWl0LCBhcmdzKSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9LCB3YWl0KTtcbiAgfSk7XG5cbiAgLy8gRGVmZXJzIGEgZnVuY3Rpb24sIHNjaGVkdWxpbmcgaXQgdG8gcnVuIGFmdGVyIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzXG4gIC8vIGNsZWFyZWQuXG4gIF8uZGVmZXIgPSBfLnBhcnRpYWwoXy5kZWxheSwgXywgMSk7XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCB3aGVuIGludm9rZWQsIHdpbGwgb25seSBiZSB0cmlnZ2VyZWQgYXQgbW9zdCBvbmNlXG4gIC8vIGR1cmluZyBhIGdpdmVuIHdpbmRvdyBvZiB0aW1lLiBOb3JtYWxseSwgdGhlIHRocm90dGxlZCBmdW5jdGlvbiB3aWxsIHJ1blxuICAvLyBhcyBtdWNoIGFzIGl0IGNhbiwgd2l0aG91dCBldmVyIGdvaW5nIG1vcmUgdGhhbiBvbmNlIHBlciBgd2FpdGAgZHVyYXRpb247XG4gIC8vIGJ1dCBpZiB5b3UnZCBsaWtlIHRvIGRpc2FibGUgdGhlIGV4ZWN1dGlvbiBvbiB0aGUgbGVhZGluZyBlZGdlLCBwYXNzXG4gIC8vIGB7bGVhZGluZzogZmFsc2V9YC4gVG8gZGlzYWJsZSBleGVjdXRpb24gb24gdGhlIHRyYWlsaW5nIGVkZ2UsIGRpdHRvLlxuICBfLnRocm90dGxlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICAgIHZhciB0aW1lb3V0LCBjb250ZXh0LCBhcmdzLCByZXN1bHQ7XG4gICAgdmFyIHByZXZpb3VzID0gMDtcbiAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcblxuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcHJldmlvdXMgPSBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlID8gMCA6IF8ubm93KCk7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICB9O1xuXG4gICAgdmFyIHRocm90dGxlZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG5vdyA9IF8ubm93KCk7XG4gICAgICBpZiAoIXByZXZpb3VzICYmIG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UpIHByZXZpb3VzID0gbm93O1xuICAgICAgdmFyIHJlbWFpbmluZyA9IHdhaXQgLSAobm93IC0gcHJldmlvdXMpO1xuICAgICAgY29udGV4dCA9IHRoaXM7XG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQpIHtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXMgPSBub3c7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxzZSkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgcmVtYWluaW5nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHRocm90dGxlZC5jYW5jZWwgPSBmdW5jdGlvbigpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIHByZXZpb3VzID0gMDtcbiAgICAgIHRpbWVvdXQgPSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgfTtcblxuICAgIHJldHVybiB0aHJvdHRsZWQ7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCBhcyBsb25nIGFzIGl0IGNvbnRpbnVlcyB0byBiZSBpbnZva2VkLCB3aWxsIG5vdFxuICAvLyBiZSB0cmlnZ2VyZWQuIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciBpdCBzdG9wcyBiZWluZyBjYWxsZWQgZm9yXG4gIC8vIE4gbWlsbGlzZWNvbmRzLiBJZiBgaW1tZWRpYXRlYCBpcyBwYXNzZWQsIHRyaWdnZXIgdGhlIGZ1bmN0aW9uIG9uIHRoZVxuICAvLyBsZWFkaW5nIGVkZ2UsIGluc3RlYWQgb2YgdGhlIHRyYWlsaW5nLlxuICBfLmRlYm91bmNlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XG4gICAgdmFyIHRpbWVvdXQsIHJlc3VsdDtcblxuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKGNvbnRleHQsIGFyZ3MpIHtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgaWYgKGFyZ3MpIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfTtcblxuICAgIHZhciBkZWJvdW5jZWQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgIGlmICh0aW1lb3V0KSBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBpZiAoaW1tZWRpYXRlKSB7XG4gICAgICAgIHZhciBjYWxsTm93ID0gIXRpbWVvdXQ7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgICAgICAgaWYgKGNhbGxOb3cpIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aW1lb3V0ID0gXy5kZWxheShsYXRlciwgd2FpdCwgdGhpcywgYXJncyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG5cbiAgICBkZWJvdW5jZWQuY2FuY2VsID0gZnVuY3Rpb24oKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGRlYm91bmNlZDtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBmdW5jdGlvbiBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIHNlY29uZCxcbiAgLy8gYWxsb3dpbmcgeW91IHRvIGFkanVzdCBhcmd1bWVudHMsIHJ1biBjb2RlIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZFxuICAvLyBjb25kaXRpb25hbGx5IGV4ZWN1dGUgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxuICBfLndyYXAgPSBmdW5jdGlvbihmdW5jLCB3cmFwcGVyKSB7XG4gICAgcmV0dXJuIF8ucGFydGlhbCh3cmFwcGVyLCBmdW5jKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgbmVnYXRlZCB2ZXJzaW9uIG9mIHRoZSBwYXNzZWQtaW4gcHJlZGljYXRlLlxuICBfLm5lZ2F0ZSA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBpcyB0aGUgY29tcG9zaXRpb24gb2YgYSBsaXN0IG9mIGZ1bmN0aW9ucywgZWFjaFxuICAvLyBjb25zdW1pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCBmb2xsb3dzLlxuICBfLmNvbXBvc2UgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2YXIgc3RhcnQgPSBhcmdzLmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGkgPSBzdGFydDtcbiAgICAgIHZhciByZXN1bHQgPSBhcmdzW3N0YXJ0XS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgd2hpbGUgKGktLSkgcmVzdWx0ID0gYXJnc1tpXS5jYWxsKHRoaXMsIHJlc3VsdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIG9uIGFuZCBhZnRlciB0aGUgTnRoIGNhbGwuXG4gIF8uYWZ0ZXIgPSBmdW5jdGlvbih0aW1lcywgZnVuYykge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgtLXRpbWVzIDwgMSkge1xuICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIHVwIHRvIChidXQgbm90IGluY2x1ZGluZykgdGhlIE50aCBjYWxsLlxuICBfLmJlZm9yZSA9IGZ1bmN0aW9uKHRpbWVzLCBmdW5jKSB7XG4gICAgdmFyIG1lbW87XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKC0tdGltZXMgPiAwKSB7XG4gICAgICAgIG1lbW8gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgICBpZiAodGltZXMgPD0gMSkgZnVuYyA9IG51bGw7XG4gICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgYXQgbW9zdCBvbmUgdGltZSwgbm8gbWF0dGVyIGhvd1xuICAvLyBvZnRlbiB5b3UgY2FsbCBpdC4gVXNlZnVsIGZvciBsYXp5IGluaXRpYWxpemF0aW9uLlxuICBfLm9uY2UgPSBfLnBhcnRpYWwoXy5iZWZvcmUsIDIpO1xuXG4gIF8ucmVzdEFyZ3VtZW50cyA9IHJlc3RBcmd1bWVudHM7XG5cbiAgLy8gT2JqZWN0IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gS2V5cyBpbiBJRSA8IDkgdGhhdCB3b24ndCBiZSBpdGVyYXRlZCBieSBgZm9yIGtleSBpbiAuLi5gIGFuZCB0aHVzIG1pc3NlZC5cbiAgdmFyIGhhc0VudW1CdWcgPSAhe3RvU3RyaW5nOiBudWxsfS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgndG9TdHJpbmcnKTtcbiAgdmFyIG5vbkVudW1lcmFibGVQcm9wcyA9IFsndmFsdWVPZicsICdpc1Byb3RvdHlwZU9mJywgJ3RvU3RyaW5nJyxcbiAgICAncHJvcGVydHlJc0VudW1lcmFibGUnLCAnaGFzT3duUHJvcGVydHknLCAndG9Mb2NhbGVTdHJpbmcnXTtcblxuICB2YXIgY29sbGVjdE5vbkVudW1Qcm9wcyA9IGZ1bmN0aW9uKG9iaiwga2V5cykge1xuICAgIHZhciBub25FbnVtSWR4ID0gbm9uRW51bWVyYWJsZVByb3BzLmxlbmd0aDtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBvYmouY29uc3RydWN0b3I7XG4gICAgdmFyIHByb3RvID0gXy5pc0Z1bmN0aW9uKGNvbnN0cnVjdG9yKSAmJiBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgfHwgT2JqUHJvdG87XG5cbiAgICAvLyBDb25zdHJ1Y3RvciBpcyBhIHNwZWNpYWwgY2FzZS5cbiAgICB2YXIgcHJvcCA9ICdjb25zdHJ1Y3Rvcic7XG4gICAgaWYgKGhhcyhvYmosIHByb3ApICYmICFfLmNvbnRhaW5zKGtleXMsIHByb3ApKSBrZXlzLnB1c2gocHJvcCk7XG5cbiAgICB3aGlsZSAobm9uRW51bUlkeC0tKSB7XG4gICAgICBwcm9wID0gbm9uRW51bWVyYWJsZVByb3BzW25vbkVudW1JZHhdO1xuICAgICAgaWYgKHByb3AgaW4gb2JqICYmIG9ialtwcm9wXSAhPT0gcHJvdG9bcHJvcF0gJiYgIV8uY29udGFpbnMoa2V5cywgcHJvcCkpIHtcbiAgICAgICAga2V5cy5wdXNoKHByb3ApO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3Mgb3duIHByb3BlcnRpZXMuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBPYmplY3Qua2V5c2AuXG4gIF8ua2V5cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gW107XG4gICAgaWYgKG5hdGl2ZUtleXMpIHJldHVybiBuYXRpdmVLZXlzKG9iaik7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBpZiAoaGFzKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gICAgLy8gQWhlbSwgSUUgPCA5LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgYWxsIHRoZSBwcm9wZXJ0eSBuYW1lcyBvZiBhbiBvYmplY3QuXG4gIF8uYWxsS2V5cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gW107XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBrZXlzLnB1c2goa2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5cztcbiAgfTtcblxuICAvLyBSZXRyaWV2ZSB0aGUgdmFsdWVzIG9mIGFuIG9iamVjdCdzIHByb3BlcnRpZXMuXG4gIF8udmFsdWVzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIHZhbHVlcyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWVzW2ldID0gb2JqW2tleXNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9O1xuXG4gIC8vIFJldHVybnMgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxlbWVudCBvZiB0aGUgb2JqZWN0LlxuICAvLyBJbiBjb250cmFzdCB0byBfLm1hcCBpdCByZXR1cm5zIGFuIG9iamVjdC5cbiAgXy5tYXBPYmplY3QgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0ga2V5cy5sZW5ndGgsXG4gICAgICAgIHJlc3VsdHMgPSB7fTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgcmVzdWx0c1tjdXJyZW50S2V5XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gQ29udmVydCBhbiBvYmplY3QgaW50byBhIGxpc3Qgb2YgYFtrZXksIHZhbHVlXWAgcGFpcnMuXG4gIC8vIFRoZSBvcHBvc2l0ZSBvZiBfLm9iamVjdC5cbiAgXy5wYWlycyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBwYWlycyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcGFpcnNbaV0gPSBba2V5c1tpXSwgb2JqW2tleXNbaV1dXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhaXJzO1xuICB9O1xuXG4gIC8vIEludmVydCB0aGUga2V5cyBhbmQgdmFsdWVzIG9mIGFuIG9iamVjdC4gVGhlIHZhbHVlcyBtdXN0IGJlIHNlcmlhbGl6YWJsZS5cbiAgXy5pbnZlcnQgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W29ialtrZXlzW2ldXV0gPSBrZXlzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHNvcnRlZCBsaXN0IG9mIHRoZSBmdW5jdGlvbiBuYW1lcyBhdmFpbGFibGUgb24gdGhlIG9iamVjdC5cbiAgLy8gQWxpYXNlZCBhcyBgbWV0aG9kc2AuXG4gIF8uZnVuY3Rpb25zID0gXy5tZXRob2RzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIG5hbWVzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihvYmpba2V5XSkpIG5hbWVzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWVzLnNvcnQoKTtcbiAgfTtcblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYXNzaWduZXIgZnVuY3Rpb25zLlxuICB2YXIgY3JlYXRlQXNzaWduZXIgPSBmdW5jdGlvbihrZXlzRnVuYywgZGVmYXVsdHMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIGlmIChkZWZhdWx0cykgb2JqID0gT2JqZWN0KG9iaik7XG4gICAgICBpZiAobGVuZ3RoIDwgMiB8fCBvYmogPT0gbnVsbCkgcmV0dXJuIG9iajtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF0sXG4gICAgICAgICAgICBrZXlzID0ga2V5c0Z1bmMoc291cmNlKSxcbiAgICAgICAgICAgIGwgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAoIWRlZmF1bHRzIHx8IG9ialtrZXldID09PSB2b2lkIDApIG9ialtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfTtcbiAgfTtcblxuICAvLyBFeHRlbmQgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIHByb3BlcnRpZXMgaW4gcGFzc2VkLWluIG9iamVjdChzKS5cbiAgXy5leHRlbmQgPSBjcmVhdGVBc3NpZ25lcihfLmFsbEtleXMpO1xuXG4gIC8vIEFzc2lnbnMgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIG93biBwcm9wZXJ0aWVzIGluIHRoZSBwYXNzZWQtaW4gb2JqZWN0KHMpLlxuICAvLyAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnbilcbiAgXy5leHRlbmRPd24gPSBfLmFzc2lnbiA9IGNyZWF0ZUFzc2lnbmVyKF8ua2V5cyk7XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3Qga2V5IG9uIGFuIG9iamVjdCB0aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0LlxuICBfLmZpbmRLZXkgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKSwga2V5O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpba2V5XSwga2V5LCBvYmopKSByZXR1cm4ga2V5O1xuICAgIH1cbiAgfTtcblxuICAvLyBJbnRlcm5hbCBwaWNrIGhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgYG9iamAgaGFzIGtleSBga2V5YC5cbiAgdmFyIGtleUluT2JqID0gZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqKSB7XG4gICAgcmV0dXJuIGtleSBpbiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IG9ubHkgY29udGFpbmluZyB0aGUgd2hpdGVsaXN0ZWQgcHJvcGVydGllcy5cbiAgXy5waWNrID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihvYmosIGtleXMpIHtcbiAgICB2YXIgcmVzdWx0ID0ge30sIGl0ZXJhdGVlID0ga2V5c1swXTtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiByZXN1bHQ7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihpdGVyYXRlZSkpIHtcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwga2V5c1sxXSk7XG4gICAgICBrZXlzID0gXy5hbGxLZXlzKG9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVlID0ga2V5SW5PYmo7XG4gICAgICBrZXlzID0gZmxhdHRlbihrZXlzLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgb2JqID0gT2JqZWN0KG9iaik7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgaWYgKGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9iaikpIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuXG4gIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCB3aXRob3V0IHRoZSBibGFja2xpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLm9taXQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwga2V5cykge1xuICAgIHZhciBpdGVyYXRlZSA9IGtleXNbMF0sIGNvbnRleHQ7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihpdGVyYXRlZSkpIHtcbiAgICAgIGl0ZXJhdGVlID0gXy5uZWdhdGUoaXRlcmF0ZWUpO1xuICAgICAgaWYgKGtleXMubGVuZ3RoID4gMSkgY29udGV4dCA9IGtleXNbMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleXMgPSBfLm1hcChmbGF0dGVuKGtleXMsIGZhbHNlLCBmYWxzZSksIFN0cmluZyk7XG4gICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKGtleXMsIGtleSk7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gXy5waWNrKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpO1xuICB9KTtcblxuICAvLyBGaWxsIGluIGEgZ2l2ZW4gb2JqZWN0IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzLlxuICBfLmRlZmF1bHRzID0gY3JlYXRlQXNzaWduZXIoXy5hbGxLZXlzLCB0cnVlKTtcblxuICAvLyBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIGdpdmVuIHByb3RvdHlwZSBvYmplY3QuXG4gIC8vIElmIGFkZGl0aW9uYWwgcHJvcGVydGllcyBhcmUgcHJvdmlkZWQgdGhlbiB0aGV5IHdpbGwgYmUgYWRkZWQgdG8gdGhlXG4gIC8vIGNyZWF0ZWQgb2JqZWN0LlxuICBfLmNyZWF0ZSA9IGZ1bmN0aW9uKHByb3RvdHlwZSwgcHJvcHMpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUNyZWF0ZShwcm90b3R5cGUpO1xuICAgIGlmIChwcm9wcykgXy5leHRlbmRPd24ocmVzdWx0LCBwcm9wcyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSAoc2hhbGxvdy1jbG9uZWQpIGR1cGxpY2F0ZSBvZiBhbiBvYmplY3QuXG4gIF8uY2xvbmUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajtcbiAgICByZXR1cm4gXy5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF8uZXh0ZW5kKHt9LCBvYmopO1xuICB9O1xuXG4gIC8vIEludm9rZXMgaW50ZXJjZXB0b3Igd2l0aCB0aGUgb2JqLCBhbmQgdGhlbiByZXR1cm5zIG9iai5cbiAgLy8gVGhlIHByaW1hcnkgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBcInRhcCBpbnRvXCIgYSBtZXRob2QgY2hhaW4sIGluXG4gIC8vIG9yZGVyIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBpbnRlcm1lZGlhdGUgcmVzdWx0cyB3aXRoaW4gdGhlIGNoYWluLlxuICBfLnRhcCA9IGZ1bmN0aW9uKG9iaiwgaW50ZXJjZXB0b3IpIHtcbiAgICBpbnRlcmNlcHRvcihvYmopO1xuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2YgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8uaXNNYXRjaCA9IGZ1bmN0aW9uKG9iamVjdCwgYXR0cnMpIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhhdHRycyksIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuICFsZW5ndGg7XG4gICAgdmFyIG9iaiA9IE9iamVjdChvYmplY3QpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKGF0dHJzW2tleV0gIT09IG9ialtrZXldIHx8ICEoa2V5IGluIG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cblxuICAvLyBJbnRlcm5hbCByZWN1cnNpdmUgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgYGlzRXF1YWxgLlxuICB2YXIgZXEsIGRlZXBFcTtcbiAgZXEgPSBmdW5jdGlvbihhLCBiLCBhU3RhY2ssIGJTdGFjaykge1xuICAgIC8vIElkZW50aWNhbCBvYmplY3RzIGFyZSBlcXVhbC4gYDAgPT09IC0wYCwgYnV0IHRoZXkgYXJlbid0IGlkZW50aWNhbC5cbiAgICAvLyBTZWUgdGhlIFtIYXJtb255IGBlZ2FsYCBwcm9wb3NhbF0oaHR0cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTplZ2FsKS5cbiAgICBpZiAoYSA9PT0gYikgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT09IDEgLyBiO1xuICAgIC8vIGBudWxsYCBvciBgdW5kZWZpbmVkYCBvbmx5IGVxdWFsIHRvIGl0c2VsZiAoc3RyaWN0IGNvbXBhcmlzb24pLlxuICAgIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2ZS5cbiAgICBpZiAoYSAhPT0gYSkgcmV0dXJuIGIgIT09IGI7XG4gICAgLy8gRXhoYXVzdCBwcmltaXRpdmUgY2hlY2tzXG4gICAgdmFyIHR5cGUgPSB0eXBlb2YgYTtcbiAgICBpZiAodHlwZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBkZWVwRXEoYSwgYiwgYVN0YWNrLCBiU3RhY2spO1xuICB9O1xuXG4gIC8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBgaXNFcXVhbGAuXG4gIGRlZXBFcSA9IGZ1bmN0aW9uKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7XG4gICAgLy8gVW53cmFwIGFueSB3cmFwcGVkIG9iamVjdHMuXG4gICAgaWYgKGEgaW5zdGFuY2VvZiBfKSBhID0gYS5fd3JhcHBlZDtcbiAgICBpZiAoYiBpbnN0YW5jZW9mIF8pIGIgPSBiLl93cmFwcGVkO1xuICAgIC8vIENvbXBhcmUgYFtbQ2xhc3NdXWAgbmFtZXMuXG4gICAgdmFyIGNsYXNzTmFtZSA9IHRvU3RyaW5nLmNhbGwoYSk7XG4gICAgaWYgKGNsYXNzTmFtZSAhPT0gdG9TdHJpbmcuY2FsbChiKSkgcmV0dXJuIGZhbHNlO1xuICAgIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4gICAgICAvLyBTdHJpbmdzLCBudW1iZXJzLCByZWd1bGFyIGV4cHJlc3Npb25zLCBkYXRlcywgYW5kIGJvb2xlYW5zIGFyZSBjb21wYXJlZCBieSB2YWx1ZS5cbiAgICAgIGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XG4gICAgICAvLyBSZWdFeHBzIGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MgZm9yIGNvbXBhcmlzb24gKE5vdGU6ICcnICsgL2EvaSA9PT0gJy9hL2knKVxuICAgICAgY2FzZSAnW29iamVjdCBTdHJpbmddJzpcbiAgICAgICAgLy8gUHJpbWl0aXZlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBvYmplY3Qgd3JhcHBlcnMgYXJlIGVxdWl2YWxlbnQ7IHRodXMsIGBcIjVcImAgaXNcbiAgICAgICAgLy8gZXF1aXZhbGVudCB0byBgbmV3IFN0cmluZyhcIjVcIilgLlxuICAgICAgICByZXR1cm4gJycgKyBhID09PSAnJyArIGI7XG4gICAgICBjYXNlICdbb2JqZWN0IE51bWJlcl0nOlxuICAgICAgICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICAgICAgICAvLyBPYmplY3QoTmFOKSBpcyBlcXVpdmFsZW50IHRvIE5hTi5cbiAgICAgICAgaWYgKCthICE9PSArYSkgcmV0dXJuICtiICE9PSArYjtcbiAgICAgICAgLy8gQW4gYGVnYWxgIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkIGZvciBvdGhlciBudW1lcmljIHZhbHVlcy5cbiAgICAgICAgcmV0dXJuICthID09PSAwID8gMSAvICthID09PSAxIC8gYiA6ICthID09PSArYjtcbiAgICAgIGNhc2UgJ1tvYmplY3QgRGF0ZV0nOlxuICAgICAgY2FzZSAnW29iamVjdCBCb29sZWFuXSc6XG4gICAgICAgIC8vIENvZXJjZSBkYXRlcyBhbmQgYm9vbGVhbnMgdG8gbnVtZXJpYyBwcmltaXRpdmUgdmFsdWVzLiBEYXRlcyBhcmUgY29tcGFyZWQgYnkgdGhlaXJcbiAgICAgICAgLy8gbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zLiBOb3RlIHRoYXQgaW52YWxpZCBkYXRlcyB3aXRoIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9uc1xuICAgICAgICAvLyBvZiBgTmFOYCBhcmUgbm90IGVxdWl2YWxlbnQuXG4gICAgICAgIHJldHVybiArYSA9PT0gK2I7XG4gICAgICBjYXNlICdbb2JqZWN0IFN5bWJvbF0nOlxuICAgICAgICByZXR1cm4gU3ltYm9sUHJvdG8udmFsdWVPZi5jYWxsKGEpID09PSBTeW1ib2xQcm90by52YWx1ZU9mLmNhbGwoYik7XG4gICAgfVxuXG4gICAgdmFyIGFyZUFycmF5cyA9IGNsYXNzTmFtZSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICBpZiAoIWFyZUFycmF5cykge1xuICAgICAgaWYgKHR5cGVvZiBhICE9ICdvYmplY3QnIHx8IHR5cGVvZiBiICE9ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIE9iamVjdHMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1aXZhbGVudCwgYnV0IGBPYmplY3RgcyBvciBgQXJyYXlgc1xuICAgICAgLy8gZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFyZS5cbiAgICAgIHZhciBhQ3RvciA9IGEuY29uc3RydWN0b3IsIGJDdG9yID0gYi5jb25zdHJ1Y3RvcjtcbiAgICAgIGlmIChhQ3RvciAhPT0gYkN0b3IgJiYgIShfLmlzRnVuY3Rpb24oYUN0b3IpICYmIGFDdG9yIGluc3RhbmNlb2YgYUN0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmlzRnVuY3Rpb24oYkN0b3IpICYmIGJDdG9yIGluc3RhbmNlb2YgYkN0b3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICYmICgnY29uc3RydWN0b3InIGluIGEgJiYgJ2NvbnN0cnVjdG9yJyBpbiBiKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFzc3VtZSBlcXVhbGl0eSBmb3IgY3ljbGljIHN0cnVjdHVyZXMuIFRoZSBhbGdvcml0aG0gZm9yIGRldGVjdGluZyBjeWNsaWNcbiAgICAvLyBzdHJ1Y3R1cmVzIGlzIGFkYXB0ZWQgZnJvbSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLCBhYnN0cmFjdCBvcGVyYXRpb24gYEpPYC5cblxuICAgIC8vIEluaXRpYWxpemluZyBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAvLyBJdCdzIGRvbmUgaGVyZSBzaW5jZSB3ZSBvbmx5IG5lZWQgdGhlbSBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzIGNvbXBhcmlzb24uXG4gICAgYVN0YWNrID0gYVN0YWNrIHx8IFtdO1xuICAgIGJTdGFjayA9IGJTdGFjayB8fCBbXTtcbiAgICB2YXIgbGVuZ3RoID0gYVN0YWNrLmxlbmd0aDtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIC8vIExpbmVhciBzZWFyY2guIFBlcmZvcm1hbmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZlxuICAgICAgLy8gdW5pcXVlIG5lc3RlZCBzdHJ1Y3R1cmVzLlxuICAgICAgaWYgKGFTdGFja1tsZW5ndGhdID09PSBhKSByZXR1cm4gYlN0YWNrW2xlbmd0aF0gPT09IGI7XG4gICAgfVxuXG4gICAgLy8gQWRkIHRoZSBmaXJzdCBvYmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIGFTdGFjay5wdXNoKGEpO1xuICAgIGJTdGFjay5wdXNoKGIpO1xuXG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgaWYgKGFyZUFycmF5cykge1xuICAgICAgLy8gQ29tcGFyZSBhcnJheSBsZW5ndGhzIHRvIGRldGVybWluZSBpZiBhIGRlZXAgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkuXG4gICAgICBsZW5ndGggPSBhLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgdGhlIGNvbnRlbnRzLCBpZ25vcmluZyBub24tbnVtZXJpYyBwcm9wZXJ0aWVzLlxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIGlmICghZXEoYVtsZW5ndGhdLCBiW2xlbmd0aF0sIGFTdGFjaywgYlN0YWNrKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgb2JqZWN0cy5cbiAgICAgIHZhciBrZXlzID0gXy5rZXlzKGEpLCBrZXk7XG4gICAgICBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICAgIC8vIEVuc3VyZSB0aGF0IGJvdGggb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIG51bWJlciBvZiBwcm9wZXJ0aWVzIGJlZm9yZSBjb21wYXJpbmcgZGVlcCBlcXVhbGl0eS5cbiAgICAgIGlmIChfLmtleXMoYikubGVuZ3RoICE9PSBsZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICAvLyBEZWVwIGNvbXBhcmUgZWFjaCBtZW1iZXJcbiAgICAgICAga2V5ID0ga2V5c1tsZW5ndGhdO1xuICAgICAgICBpZiAoIShoYXMoYiwga2V5KSAmJiBlcShhW2tleV0sIGJba2V5XSwgYVN0YWNrLCBiU3RhY2spKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBSZW1vdmUgdGhlIGZpcnN0IG9iamVjdCBmcm9tIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3RhY2sucG9wKCk7XG4gICAgYlN0YWNrLnBvcCgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIFBlcmZvcm0gYSBkZWVwIGNvbXBhcmlzb24gdG8gY2hlY2sgaWYgdHdvIG9iamVjdHMgYXJlIGVxdWFsLlxuICBfLmlzRXF1YWwgPSBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGVxKGEsIGIpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gYXJyYXksIHN0cmluZywgb3Igb2JqZWN0IGVtcHR5P1xuICAvLyBBbiBcImVtcHR5XCIgb2JqZWN0IGhhcyBubyBlbnVtZXJhYmxlIG93bi1wcm9wZXJ0aWVzLlxuICBfLmlzRW1wdHkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopICYmIChfLmlzQXJyYXkob2JqKSB8fCBfLmlzU3RyaW5nKG9iaikgfHwgXy5pc0FyZ3VtZW50cyhvYmopKSkgcmV0dXJuIG9iai5sZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIF8ua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgRE9NIGVsZW1lbnQ/XG4gIF8uaXNFbGVtZW50ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgPT09IDEpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYW4gYXJyYXk/XG4gIC8vIERlbGVnYXRlcyB0byBFQ01BNSdzIG5hdGl2ZSBBcnJheS5pc0FycmF5XG4gIF8uaXNBcnJheSA9IG5hdGl2ZUlzQXJyYXkgfHwgZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIGFuIG9iamVjdD9cbiAgXy5pc09iamVjdCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgfTtcblxuICAvLyBBZGQgc29tZSBpc1R5cGUgbWV0aG9kczogaXNBcmd1bWVudHMsIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBpc051bWJlciwgaXNEYXRlLCBpc1JlZ0V4cCwgaXNFcnJvciwgaXNNYXAsIGlzV2Vha01hcCwgaXNTZXQsIGlzV2Vha1NldC5cbiAgXy5lYWNoKFsnQXJndW1lbnRzJywgJ0Z1bmN0aW9uJywgJ1N0cmluZycsICdOdW1iZXInLCAnRGF0ZScsICdSZWdFeHAnLCAnRXJyb3InLCAnU3ltYm9sJywgJ01hcCcsICdXZWFrTWFwJywgJ1NldCcsICdXZWFrU2V0J10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBfWydpcycgKyBuYW1lXSA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgJyArIG5hbWUgKyAnXSc7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRGVmaW5lIGEgZmFsbGJhY2sgdmVyc2lvbiBvZiB0aGUgbWV0aG9kIGluIGJyb3dzZXJzIChhaGVtLCBJRSA8IDkpLCB3aGVyZVxuICAvLyB0aGVyZSBpc24ndCBhbnkgaW5zcGVjdGFibGUgXCJBcmd1bWVudHNcIiB0eXBlLlxuICBpZiAoIV8uaXNBcmd1bWVudHMoYXJndW1lbnRzKSkge1xuICAgIF8uaXNBcmd1bWVudHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBoYXMob2JqLCAnY2FsbGVlJyk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIE9wdGltaXplIGBpc0Z1bmN0aW9uYCBpZiBhcHByb3ByaWF0ZS4gV29yayBhcm91bmQgc29tZSB0eXBlb2YgYnVncyBpbiBvbGQgdjgsXG4gIC8vIElFIDExICgjMTYyMSksIFNhZmFyaSA4ICgjMTkyOSksIGFuZCBQaGFudG9tSlMgKCMyMjM2KS5cbiAgdmFyIG5vZGVsaXN0ID0gcm9vdC5kb2N1bWVudCAmJiByb290LmRvY3VtZW50LmNoaWxkTm9kZXM7XG4gIGlmICh0eXBlb2YgLy4vICE9ICdmdW5jdGlvbicgJiYgdHlwZW9mIEludDhBcnJheSAhPSAnb2JqZWN0JyAmJiB0eXBlb2Ygbm9kZWxpc3QgIT0gJ2Z1bmN0aW9uJykge1xuICAgIF8uaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT0gJ2Z1bmN0aW9uJyB8fCBmYWxzZTtcbiAgICB9O1xuICB9XG5cbiAgLy8gSXMgYSBnaXZlbiBvYmplY3QgYSBmaW5pdGUgbnVtYmVyP1xuICBfLmlzRmluaXRlID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuICFfLmlzU3ltYm9sKG9iaikgJiYgaXNGaW5pdGUob2JqKSAmJiAhaXNOYU4ocGFyc2VGbG9hdChvYmopKTtcbiAgfTtcblxuICAvLyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYE5hTmA/XG4gIF8uaXNOYU4gPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gXy5pc051bWJlcihvYmopICYmIGlzTmFOKG9iaik7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIGJvb2xlYW4/XG4gIF8uaXNCb29sZWFuID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdHJ1ZSB8fCBvYmogPT09IGZhbHNlIHx8IHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQm9vbGVhbl0nO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgZXF1YWwgdG8gbnVsbD9cbiAgXy5pc051bGwgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSBudWxsO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgdW5kZWZpbmVkP1xuICBfLmlzVW5kZWZpbmVkID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdm9pZCAwO1xuICB9O1xuXG4gIC8vIFNob3J0Y3V0IGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gcHJvcGVydHkgZGlyZWN0bHlcbiAgLy8gb24gaXRzZWxmIChpbiBvdGhlciB3b3Jkcywgbm90IG9uIGEgcHJvdG90eXBlKS5cbiAgXy5oYXMgPSBmdW5jdGlvbihvYmosIHBhdGgpIHtcbiAgICBpZiAoIV8uaXNBcnJheShwYXRoKSkge1xuICAgICAgcmV0dXJuIGhhcyhvYmosIHBhdGgpO1xuICAgIH1cbiAgICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHBhdGhbaV07XG4gICAgICBpZiAob2JqID09IG51bGwgfHwgIWhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIG9iaiA9IG9ialtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gISFsZW5ndGg7XG4gIH07XG5cbiAgLy8gVXRpbGl0eSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBSdW4gVW5kZXJzY29yZS5qcyBpbiAqbm9Db25mbGljdCogbW9kZSwgcmV0dXJuaW5nIHRoZSBgX2AgdmFyaWFibGUgdG8gaXRzXG4gIC8vIHByZXZpb3VzIG93bmVyLiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdC5cbiAgXy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgcm9vdC5fID0gcHJldmlvdXNVbmRlcnNjb3JlO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIEtlZXAgdGhlIGlkZW50aXR5IGZ1bmN0aW9uIGFyb3VuZCBmb3IgZGVmYXVsdCBpdGVyYXRlZXMuXG4gIF8uaWRlbnRpdHkgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcblxuICAvLyBQcmVkaWNhdGUtZ2VuZXJhdGluZyBmdW5jdGlvbnMuIE9mdGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuXG4gIF8uY29uc3RhbnQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICB9O1xuXG4gIF8ubm9vcCA9IGZ1bmN0aW9uKCl7fTtcblxuICAvLyBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBwYXNzZWQgYW4gb2JqZWN0LCB3aWxsIHRyYXZlcnNlIHRoYXQgb2JqZWN04oCZc1xuICAvLyBwcm9wZXJ0aWVzIGRvd24gdGhlIGdpdmVuIGBwYXRoYCwgc3BlY2lmaWVkIGFzIGFuIGFycmF5IG9mIGtleXMgb3IgaW5kZXhlcy5cbiAgXy5wcm9wZXJ0eSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICBpZiAoIV8uaXNBcnJheShwYXRoKSkge1xuICAgICAgcmV0dXJuIHNoYWxsb3dQcm9wZXJ0eShwYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIGRlZXBHZXQob2JqLCBwYXRoKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEdlbmVyYXRlcyBhIGZ1bmN0aW9uIGZvciBhIGdpdmVuIG9iamVjdCB0aGF0IHJldHVybnMgYSBnaXZlbiBwcm9wZXJ0eS5cbiAgXy5wcm9wZXJ0eU9mID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKXt9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24ocGF0aCkge1xuICAgICAgcmV0dXJuICFfLmlzQXJyYXkocGF0aCkgPyBvYmpbcGF0aF0gOiBkZWVwR2V0KG9iaiwgcGF0aCk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgcHJlZGljYXRlIGZvciBjaGVja2luZyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2ZcbiAgLy8gYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8ubWF0Y2hlciA9IF8ubWF0Y2hlcyA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gICAgYXR0cnMgPSBfLmV4dGVuZE93bih7fSwgYXR0cnMpO1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBfLmlzTWF0Y2gob2JqLCBhdHRycyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSdW4gYSBmdW5jdGlvbiAqKm4qKiB0aW1lcy5cbiAgXy50aW1lcyA9IGZ1bmN0aW9uKG4sIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIGFjY3VtID0gQXJyYXkoTWF0aC5tYXgoMCwgbikpO1xuICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgMSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIGFjY3VtW2ldID0gaXRlcmF0ZWUoaSk7XG4gICAgcmV0dXJuIGFjY3VtO1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXggKGluY2x1c2l2ZSkuXG4gIF8ucmFuZG9tID0gZnVuY3Rpb24obWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID09IG51bGwpIHtcbiAgICAgIG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuICAgIHJldHVybiBtaW4gKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpO1xuICB9O1xuXG4gIC8vIEEgKHBvc3NpYmx5IGZhc3Rlcikgd2F5IHRvIGdldCB0aGUgY3VycmVudCB0aW1lc3RhbXAgYXMgYW4gaW50ZWdlci5cbiAgXy5ub3cgPSBEYXRlLm5vdyB8fCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH07XG5cbiAgLy8gTGlzdCBvZiBIVE1MIGVudGl0aWVzIGZvciBlc2NhcGluZy5cbiAgdmFyIGVzY2FwZU1hcCA9IHtcbiAgICAnJic6ICcmYW1wOycsXG4gICAgJzwnOiAnJmx0OycsXG4gICAgJz4nOiAnJmd0OycsXG4gICAgJ1wiJzogJyZxdW90OycsXG4gICAgXCInXCI6ICcmI3gyNzsnLFxuICAgICdgJzogJyYjeDYwOydcbiAgfTtcbiAgdmFyIHVuZXNjYXBlTWFwID0gXy5pbnZlcnQoZXNjYXBlTWFwKTtcblxuICAvLyBGdW5jdGlvbnMgZm9yIGVzY2FwaW5nIGFuZCB1bmVzY2FwaW5nIHN0cmluZ3MgdG8vZnJvbSBIVE1MIGludGVycG9sYXRpb24uXG4gIHZhciBjcmVhdGVFc2NhcGVyID0gZnVuY3Rpb24obWFwKSB7XG4gICAgdmFyIGVzY2FwZXIgPSBmdW5jdGlvbihtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hcFttYXRjaF07XG4gICAgfTtcbiAgICAvLyBSZWdleGVzIGZvciBpZGVudGlmeWluZyBhIGtleSB0aGF0IG5lZWRzIHRvIGJlIGVzY2FwZWQuXG4gICAgdmFyIHNvdXJjZSA9ICcoPzonICsgXy5rZXlzKG1hcCkuam9pbignfCcpICsgJyknO1xuICAgIHZhciB0ZXN0UmVnZXhwID0gUmVnRXhwKHNvdXJjZSk7XG4gICAgdmFyIHJlcGxhY2VSZWdleHAgPSBSZWdFeHAoc291cmNlLCAnZycpO1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHN0cmluZyA9PSBudWxsID8gJycgOiAnJyArIHN0cmluZztcbiAgICAgIHJldHVybiB0ZXN0UmVnZXhwLnRlc3Qoc3RyaW5nKSA/IHN0cmluZy5yZXBsYWNlKHJlcGxhY2VSZWdleHAsIGVzY2FwZXIpIDogc3RyaW5nO1xuICAgIH07XG4gIH07XG4gIF8uZXNjYXBlID0gY3JlYXRlRXNjYXBlcihlc2NhcGVNYXApO1xuICBfLnVuZXNjYXBlID0gY3JlYXRlRXNjYXBlcih1bmVzY2FwZU1hcCk7XG5cbiAgLy8gVHJhdmVyc2VzIHRoZSBjaGlsZHJlbiBvZiBgb2JqYCBhbG9uZyBgcGF0aGAuIElmIGEgY2hpbGQgaXMgYSBmdW5jdGlvbiwgaXRcbiAgLy8gaXMgaW52b2tlZCB3aXRoIGl0cyBwYXJlbnQgYXMgY29udGV4dC4gUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpbmFsXG4gIC8vIGNoaWxkLCBvciBgZmFsbGJhY2tgIGlmIGFueSBjaGlsZCBpcyB1bmRlZmluZWQuXG4gIF8ucmVzdWx0ID0gZnVuY3Rpb24ob2JqLCBwYXRoLCBmYWxsYmFjaykge1xuICAgIGlmICghXy5pc0FycmF5KHBhdGgpKSBwYXRoID0gW3BhdGhdO1xuICAgIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDtcbiAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgcmV0dXJuIF8uaXNGdW5jdGlvbihmYWxsYmFjaykgPyBmYWxsYmFjay5jYWxsKG9iaikgOiBmYWxsYmFjaztcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3AgPSBvYmogPT0gbnVsbCA/IHZvaWQgMCA6IG9ialtwYXRoW2ldXTtcbiAgICAgIGlmIChwcm9wID09PSB2b2lkIDApIHtcbiAgICAgICAgcHJvcCA9IGZhbGxiYWNrO1xuICAgICAgICBpID0gbGVuZ3RoOyAvLyBFbnN1cmUgd2UgZG9uJ3QgY29udGludWUgaXRlcmF0aW5nLlxuICAgICAgfVxuICAgICAgb2JqID0gXy5pc0Z1bmN0aW9uKHByb3ApID8gcHJvcC5jYWxsKG9iaikgOiBwcm9wO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGludGVnZXIgaWQgKHVuaXF1ZSB3aXRoaW4gdGhlIGVudGlyZSBjbGllbnQgc2Vzc2lvbikuXG4gIC8vIFVzZWZ1bCBmb3IgdGVtcG9yYXJ5IERPTSBpZHMuXG4gIHZhciBpZENvdW50ZXIgPSAwO1xuICBfLnVuaXF1ZUlkID0gZnVuY3Rpb24ocHJlZml4KSB7XG4gICAgdmFyIGlkID0gKytpZENvdW50ZXIgKyAnJztcbiAgICByZXR1cm4gcHJlZml4ID8gcHJlZml4ICsgaWQgOiBpZDtcbiAgfTtcblxuICAvLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRlbGltaXRlcnMsIGNoYW5nZSB0aGVcbiAgLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICBfLnRlbXBsYXRlU2V0dGluZ3MgPSB7XG4gICAgZXZhbHVhdGU6IC88JShbXFxzXFxTXSs/KSU+L2csXG4gICAgaW50ZXJwb2xhdGU6IC88JT0oW1xcc1xcU10rPyklPi9nLFxuICAgIGVzY2FwZTogLzwlLShbXFxzXFxTXSs/KSU+L2dcbiAgfTtcblxuICAvLyBXaGVuIGN1c3RvbWl6aW5nIGB0ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuXG4gIC8vIGludGVycG9sYXRpb24sIGV2YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25lIHRoYXQgaXNcbiAgLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2guXG4gIHZhciBub01hdGNoID0gLyguKV4vO1xuXG4gIC8vIENlcnRhaW4gY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28gdGhhdCB0aGV5IGNhbiBiZSBwdXQgaW50byBhXG4gIC8vIHN0cmluZyBsaXRlcmFsLlxuICB2YXIgZXNjYXBlcyA9IHtcbiAgICBcIidcIjogXCInXCIsXG4gICAgJ1xcXFwnOiAnXFxcXCcsXG4gICAgJ1xccic6ICdyJyxcbiAgICAnXFxuJzogJ24nLFxuICAgICdcXHUyMDI4JzogJ3UyMDI4JyxcbiAgICAnXFx1MjAyOSc6ICd1MjAyOSdcbiAgfTtcblxuICB2YXIgZXNjYXBlUmVnRXhwID0gL1xcXFx8J3xcXHJ8XFxufFxcdTIwMjh8XFx1MjAyOS9nO1xuXG4gIHZhciBlc2NhcGVDaGFyID0gZnVuY3Rpb24obWF0Y2gpIHtcbiAgICByZXR1cm4gJ1xcXFwnICsgZXNjYXBlc1ttYXRjaF07XG4gIH07XG5cbiAgLy8gSmF2YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi5cbiAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLFxuICAvLyBhbmQgY29ycmVjdGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS5cbiAgLy8gTkI6IGBvbGRTZXR0aW5nc2Agb25seSBleGlzdHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICBfLnRlbXBsYXRlID0gZnVuY3Rpb24odGV4dCwgc2V0dGluZ3MsIG9sZFNldHRpbmdzKSB7XG4gICAgaWYgKCFzZXR0aW5ncyAmJiBvbGRTZXR0aW5ncykgc2V0dGluZ3MgPSBvbGRTZXR0aW5ncztcbiAgICBzZXR0aW5ncyA9IF8uZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfLnRlbXBsYXRlU2V0dGluZ3MpO1xuXG4gICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uXG4gICAgdmFyIG1hdGNoZXIgPSBSZWdFeHAoW1xuICAgICAgKHNldHRpbmdzLmVzY2FwZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmV2YWx1YXRlIHx8IG5vTWF0Y2gpLnNvdXJjZVxuICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTtcblxuICAgIC8vIENvbXBpbGUgdGhlIHRlbXBsYXRlIHNvdXJjZSwgZXNjYXBpbmcgc3RyaW5nIGxpdGVyYWxzIGFwcHJvcHJpYXRlbHkuXG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgc291cmNlID0gXCJfX3ArPSdcIjtcbiAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHtcbiAgICAgIHNvdXJjZSArPSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UoZXNjYXBlUmVnRXhwLCBlc2NhcGVDaGFyKTtcbiAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4gICAgICBpZiAoZXNjYXBlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgZXNjYXBlICsgXCIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcXG4nXCI7XG4gICAgICB9IGVsc2UgaWYgKGludGVycG9sYXRlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgaW50ZXJwb2xhdGUgKyBcIikpPT1udWxsPycnOl9fdCkrXFxuJ1wiO1xuICAgICAgfSBlbHNlIGlmIChldmFsdWF0ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInO1xcblwiICsgZXZhbHVhdGUgKyBcIlxcbl9fcCs9J1wiO1xuICAgICAgfVxuXG4gICAgICAvLyBBZG9iZSBWTXMgbmVlZCB0aGUgbWF0Y2ggcmV0dXJuZWQgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBvZmZzZXQuXG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfSk7XG4gICAgc291cmNlICs9IFwiJztcXG5cIjtcblxuICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuXG4gICAgaWYgKCFzZXR0aW5ncy52YXJpYWJsZSkgc291cmNlID0gJ3dpdGgob2JqfHx7fSl7XFxuJyArIHNvdXJjZSArICd9XFxuJztcblxuICAgIHNvdXJjZSA9IFwidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLFwiICtcbiAgICAgIFwicHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcXG5cIiArXG4gICAgICBzb3VyY2UgKyAncmV0dXJuIF9fcDtcXG4nO1xuXG4gICAgdmFyIHJlbmRlcjtcbiAgICB0cnkge1xuICAgICAgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBfKTtcbiAgICB9O1xuXG4gICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLlxuICAgIHZhciBhcmd1bWVudCA9IHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonO1xuICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsgYXJndW1lbnQgKyAnKXtcXG4nICsgc291cmNlICsgJ30nO1xuXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9O1xuXG4gIC8vIEFkZCBhIFwiY2hhaW5cIiBmdW5jdGlvbi4gU3RhcnQgY2hhaW5pbmcgYSB3cmFwcGVkIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLmNoYWluID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGluc3RhbmNlID0gXyhvYmopO1xuICAgIGluc3RhbmNlLl9jaGFpbiA9IHRydWU7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xuXG4gIC8vIE9PUFxuICAvLyAtLS0tLS0tLS0tLS0tLS1cbiAgLy8gSWYgVW5kZXJzY29yZSBpcyBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgaXQgcmV0dXJucyBhIHdyYXBwZWQgb2JqZWN0IHRoYXRcbiAgLy8gY2FuIGJlIHVzZWQgT08tc3R5bGUuIFRoaXMgd3JhcHBlciBob2xkcyBhbHRlcmVkIHZlcnNpb25zIG9mIGFsbCB0aGVcbiAgLy8gdW5kZXJzY29yZSBmdW5jdGlvbnMuIFdyYXBwZWQgb2JqZWN0cyBtYXkgYmUgY2hhaW5lZC5cblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29udGludWUgY2hhaW5pbmcgaW50ZXJtZWRpYXRlIHJlc3VsdHMuXG4gIHZhciBjaGFpblJlc3VsdCA9IGZ1bmN0aW9uKGluc3RhbmNlLCBvYmopIHtcbiAgICByZXR1cm4gaW5zdGFuY2UuX2NoYWluID8gXyhvYmopLmNoYWluKCkgOiBvYmo7XG4gIH07XG5cbiAgLy8gQWRkIHlvdXIgb3duIGN1c3RvbSBmdW5jdGlvbnMgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLm1peGluID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgXy5lYWNoKF8uZnVuY3Rpb25zKG9iaiksIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHZhciBmdW5jID0gX1tuYW1lXSA9IG9ialtuYW1lXTtcbiAgICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gW3RoaXMuX3dyYXBwZWRdO1xuICAgICAgICBwdXNoLmFwcGx5KGFyZ3MsIGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBmdW5jLmFwcGx5KF8sIGFyZ3MpKTtcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIF87XG4gIH07XG5cbiAgLy8gQWRkIGFsbCBvZiB0aGUgVW5kZXJzY29yZSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIgb2JqZWN0LlxuICBfLm1peGluKF8pO1xuXG4gIC8vIEFkZCBhbGwgbXV0YXRvciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIF8uZWFjaChbJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvYmogPSB0aGlzLl93cmFwcGVkO1xuICAgICAgbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRzKTtcbiAgICAgIGlmICgobmFtZSA9PT0gJ3NoaWZ0JyB8fCBuYW1lID09PSAnc3BsaWNlJykgJiYgb2JqLmxlbmd0aCA9PT0gMCkgZGVsZXRlIG9ialswXTtcbiAgICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBvYmopO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIEFkZCBhbGwgYWNjZXNzb3IgQXJyYXkgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLlxuICBfLmVhY2goWydjb25jYXQnLCAnam9pbicsICdzbGljZSddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBtZXRob2QuYXBwbHkodGhpcy5fd3JhcHBlZCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRXh0cmFjdHMgdGhlIHJlc3VsdCBmcm9tIGEgd3JhcHBlZCBhbmQgY2hhaW5lZCBvYmplY3QuXG4gIF8ucHJvdG90eXBlLnZhbHVlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyYXBwZWQ7XG4gIH07XG5cbiAgLy8gUHJvdmlkZSB1bndyYXBwaW5nIHByb3h5IGZvciBzb21lIG1ldGhvZHMgdXNlZCBpbiBlbmdpbmUgb3BlcmF0aW9uc1xuICAvLyBzdWNoIGFzIGFyaXRobWV0aWMgYW5kIEpTT04gc3RyaW5naWZpY2F0aW9uLlxuICBfLnByb3RvdHlwZS52YWx1ZU9mID0gXy5wcm90b3R5cGUudG9KU09OID0gXy5wcm90b3R5cGUudmFsdWU7XG5cbiAgXy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuX3dyYXBwZWQpO1xuICB9O1xuXG4gIC8vIEFNRCByZWdpc3RyYXRpb24gaGFwcGVucyBhdCB0aGUgZW5kIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQU1EIGxvYWRlcnNcbiAgLy8gdGhhdCBtYXkgbm90IGVuZm9yY2UgbmV4dC10dXJuIHNlbWFudGljcyBvbiBtb2R1bGVzLiBFdmVuIHRob3VnaCBnZW5lcmFsXG4gIC8vIHByYWN0aWNlIGZvciBBTUQgcmVnaXN0cmF0aW9uIGlzIHRvIGJlIGFub255bW91cywgdW5kZXJzY29yZSByZWdpc3RlcnNcbiAgLy8gYXMgYSBuYW1lZCBtb2R1bGUgYmVjYXVzZSwgbGlrZSBqUXVlcnksIGl0IGlzIGEgYmFzZSBsaWJyYXJ5IHRoYXQgaXNcbiAgLy8gcG9wdWxhciBlbm91Z2ggdG8gYmUgYnVuZGxlZCBpbiBhIHRoaXJkIHBhcnR5IGxpYiwgYnV0IG5vdCBiZSBwYXJ0IG9mXG4gIC8vIGFuIEFNRCBsb2FkIHJlcXVlc3QuIFRob3NlIGNhc2VzIGNvdWxkIGdlbmVyYXRlIGFuIGVycm9yIHdoZW4gYW5cbiAgLy8gYW5vbnltb3VzIGRlZmluZSgpIGlzIGNhbGxlZCBvdXRzaWRlIG9mIGEgbG9hZGVyIHJlcXVlc3QuXG4gIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZSgndW5kZXJzY29yZScsIFtdLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBfO1xuICAgIH0pO1xuICB9XG59KCkpO1xuIiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihtb2R1bGUpIHtcblx0aWYgKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XG5cdFx0bW9kdWxlLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKCkge307XG5cdFx0bW9kdWxlLnBhdGhzID0gW107XG5cdFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XG5cdFx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwibG9hZGVkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmw7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJpZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xuXHR9XG5cdHJldHVybiBtb2R1bGU7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgd2luZG93ID0gcmVxdWlyZShcImdsb2JhbC93aW5kb3dcIilcbnZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZShcImlzLWZ1bmN0aW9uXCIpXG52YXIgcGFyc2VIZWFkZXJzID0gcmVxdWlyZShcInBhcnNlLWhlYWRlcnNcIilcbnZhciB4dGVuZCA9IHJlcXVpcmUoXCJ4dGVuZFwiKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVhIUlxuLy8gQWxsb3cgdXNlIG9mIGRlZmF1bHQgaW1wb3J0IHN5bnRheCBpbiBUeXBlU2NyaXB0XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gY3JlYXRlWEhSO1xuY3JlYXRlWEhSLlhNTEh0dHBSZXF1ZXN0ID0gd2luZG93LlhNTEh0dHBSZXF1ZXN0IHx8IG5vb3BcbmNyZWF0ZVhIUi5YRG9tYWluUmVxdWVzdCA9IFwid2l0aENyZWRlbnRpYWxzXCIgaW4gKG5ldyBjcmVhdGVYSFIuWE1MSHR0cFJlcXVlc3QoKSkgPyBjcmVhdGVYSFIuWE1MSHR0cFJlcXVlc3QgOiB3aW5kb3cuWERvbWFpblJlcXVlc3RcblxuZm9yRWFjaEFycmF5KFtcImdldFwiLCBcInB1dFwiLCBcInBvc3RcIiwgXCJwYXRjaFwiLCBcImhlYWRcIiwgXCJkZWxldGVcIl0sIGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgIGNyZWF0ZVhIUlttZXRob2QgPT09IFwiZGVsZXRlXCIgPyBcImRlbFwiIDogbWV0aG9kXSA9IGZ1bmN0aW9uKHVyaSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRQYXJhbXModXJpLCBvcHRpb25zLCBjYWxsYmFjaylcbiAgICAgICAgb3B0aW9ucy5tZXRob2QgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuICAgICAgICByZXR1cm4gX2NyZWF0ZVhIUihvcHRpb25zKVxuICAgIH1cbn0pXG5cbmZ1bmN0aW9uIGZvckVhY2hBcnJheShhcnJheSwgaXRlcmF0b3IpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGFycmF5W2ldKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNFbXB0eShvYmope1xuICAgIGZvcih2YXIgaSBpbiBvYmope1xuICAgICAgICBpZihvYmouaGFzT3duUHJvcGVydHkoaSkpIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBpbml0UGFyYW1zKHVyaSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICB2YXIgcGFyYW1zID0gdXJpXG5cbiAgICBpZiAoaXNGdW5jdGlvbihvcHRpb25zKSkge1xuICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnNcbiAgICAgICAgaWYgKHR5cGVvZiB1cmkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IHt1cmk6dXJpfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW1zID0geHRlbmQob3B0aW9ucywge3VyaTogdXJpfSlcbiAgICB9XG5cbiAgICBwYXJhbXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHJldHVybiBwYXJhbXNcbn1cblxuZnVuY3Rpb24gY3JlYXRlWEhSKHVyaSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICBvcHRpb25zID0gaW5pdFBhcmFtcyh1cmksIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAgIHJldHVybiBfY3JlYXRlWEhSKG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVYSFIob3B0aW9ucykge1xuICAgIGlmKHR5cGVvZiBvcHRpb25zLmNhbGxiYWNrID09PSBcInVuZGVmaW5lZFwiKXtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2FsbGJhY2sgYXJndW1lbnQgbWlzc2luZ1wiKVxuICAgIH1cblxuICAgIHZhciBjYWxsZWQgPSBmYWxzZVxuICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uIGNiT25jZShlcnIsIHJlc3BvbnNlLCBib2R5KXtcbiAgICAgICAgaWYoIWNhbGxlZCl7XG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlXG4gICAgICAgICAgICBvcHRpb25zLmNhbGxiYWNrKGVyciwgcmVzcG9uc2UsIGJvZHkpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkeXN0YXRlY2hhbmdlKCkge1xuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQobG9hZEZ1bmMsIDApXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRCb2R5KCkge1xuICAgICAgICAvLyBDaHJvbWUgd2l0aCByZXF1ZXN0VHlwZT1ibG9iIHRocm93cyBlcnJvcnMgYXJyb3VuZCB3aGVuIGV2ZW4gdGVzdGluZyBhY2Nlc3MgdG8gcmVzcG9uc2VUZXh0XG4gICAgICAgIHZhciBib2R5ID0gdW5kZWZpbmVkXG5cbiAgICAgICAgaWYgKHhoci5yZXNwb25zZSkge1xuICAgICAgICAgICAgYm9keSA9IHhoci5yZXNwb25zZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYm9keSA9IHhoci5yZXNwb25zZVRleHQgfHwgZ2V0WG1sKHhocilcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0pzb24pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYm9keSA9IEpTT04ucGFyc2UoYm9keSlcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYm9keVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVycm9yRnVuYyhldnQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRUaW1lcilcbiAgICAgICAgaWYoIShldnQgaW5zdGFuY2VvZiBFcnJvcikpe1xuICAgICAgICAgICAgZXZ0ID0gbmV3IEVycm9yKFwiXCIgKyAoZXZ0IHx8IFwiVW5rbm93biBYTUxIdHRwUmVxdWVzdCBFcnJvclwiKSApXG4gICAgICAgIH1cbiAgICAgICAgZXZ0LnN0YXR1c0NvZGUgPSAwXG4gICAgICAgIHJldHVybiBjYWxsYmFjayhldnQsIGZhaWx1cmVSZXNwb25zZSlcbiAgICB9XG5cbiAgICAvLyB3aWxsIGxvYWQgdGhlIGRhdGEgJiBwcm9jZXNzIHRoZSByZXNwb25zZSBpbiBhIHNwZWNpYWwgcmVzcG9uc2Ugb2JqZWN0XG4gICAgZnVuY3Rpb24gbG9hZEZ1bmMoKSB7XG4gICAgICAgIGlmIChhYm9ydGVkKSByZXR1cm5cbiAgICAgICAgdmFyIHN0YXR1c1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dFRpbWVyKVxuICAgICAgICBpZihvcHRpb25zLnVzZVhEUiAmJiB4aHIuc3RhdHVzPT09dW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvL0lFOCBDT1JTIEdFVCBzdWNjZXNzZnVsIHJlc3BvbnNlIGRvZXNuJ3QgaGF2ZSBhIHN0YXR1cyBmaWVsZCwgYnV0IGJvZHkgaXMgZmluZVxuICAgICAgICAgICAgc3RhdHVzID0gMjAwXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0dXMgPSAoeGhyLnN0YXR1cyA9PT0gMTIyMyA/IDIwNCA6IHhoci5zdGF0dXMpXG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlc3BvbnNlID0gZmFpbHVyZVJlc3BvbnNlXG4gICAgICAgIHZhciBlcnIgPSBudWxsXG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gMCl7XG4gICAgICAgICAgICByZXNwb25zZSA9IHtcbiAgICAgICAgICAgICAgICBib2R5OiBnZXRCb2R5KCksXG4gICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogc3RhdHVzLFxuICAgICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgICAgICAgIHVybDogdXJpLFxuICAgICAgICAgICAgICAgIHJhd1JlcXVlc3Q6IHhoclxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycyl7IC8vcmVtZW1iZXIgeGhyIGNhbiBpbiBmYWN0IGJlIFhEUiBmb3IgQ09SUyBpbiBJRVxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBwYXJzZUhlYWRlcnMoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyID0gbmV3IEVycm9yKFwiSW50ZXJuYWwgWE1MSHR0cFJlcXVlc3QgRXJyb3JcIilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyLCByZXNwb25zZSwgcmVzcG9uc2UuYm9keSlcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gb3B0aW9ucy54aHIgfHwgbnVsbFxuXG4gICAgaWYgKCF4aHIpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuY29ycyB8fCBvcHRpb25zLnVzZVhEUikge1xuICAgICAgICAgICAgeGhyID0gbmV3IGNyZWF0ZVhIUi5YRG9tYWluUmVxdWVzdCgpXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgeGhyID0gbmV3IGNyZWF0ZVhIUi5YTUxIdHRwUmVxdWVzdCgpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5XG4gICAgdmFyIGFib3J0ZWRcbiAgICB2YXIgdXJpID0geGhyLnVybCA9IG9wdGlvbnMudXJpIHx8IG9wdGlvbnMudXJsXG4gICAgdmFyIG1ldGhvZCA9IHhoci5tZXRob2QgPSBvcHRpb25zLm1ldGhvZCB8fCBcIkdFVFwiXG4gICAgdmFyIGJvZHkgPSBvcHRpb25zLmJvZHkgfHwgb3B0aW9ucy5kYXRhXG4gICAgdmFyIGhlYWRlcnMgPSB4aHIuaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyB8fCB7fVxuICAgIHZhciBzeW5jID0gISFvcHRpb25zLnN5bmNcbiAgICB2YXIgaXNKc29uID0gZmFsc2VcbiAgICB2YXIgdGltZW91dFRpbWVyXG4gICAgdmFyIGZhaWx1cmVSZXNwb25zZSA9IHtcbiAgICAgICAgYm9keTogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgc3RhdHVzQ29kZTogMCxcbiAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgIHVybDogdXJpLFxuICAgICAgICByYXdSZXF1ZXN0OiB4aHJcbiAgICB9XG5cbiAgICBpZiAoXCJqc29uXCIgaW4gb3B0aW9ucyAmJiBvcHRpb25zLmpzb24gIT09IGZhbHNlKSB7XG4gICAgICAgIGlzSnNvbiA9IHRydWVcbiAgICAgICAgaGVhZGVyc1tcImFjY2VwdFwiXSB8fCBoZWFkZXJzW1wiQWNjZXB0XCJdIHx8IChoZWFkZXJzW1wiQWNjZXB0XCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCIpIC8vRG9uJ3Qgb3ZlcnJpZGUgZXhpc3RpbmcgYWNjZXB0IGhlYWRlciBkZWNsYXJlZCBieSB1c2VyXG4gICAgICAgIGlmIChtZXRob2QgIT09IFwiR0VUXCIgJiYgbWV0aG9kICE9PSBcIkhFQURcIikge1xuICAgICAgICAgICAgaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSB8fCBoZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdIHx8IChoZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCIpIC8vRG9uJ3Qgb3ZlcnJpZGUgZXhpc3RpbmcgYWNjZXB0IGhlYWRlciBkZWNsYXJlZCBieSB1c2VyXG4gICAgICAgICAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5qc29uID09PSB0cnVlID8gYm9keSA6IG9wdGlvbnMuanNvbilcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSByZWFkeXN0YXRlY2hhbmdlXG4gICAgeGhyLm9ubG9hZCA9IGxvYWRGdW5jXG4gICAgeGhyLm9uZXJyb3IgPSBlcnJvckZ1bmNcbiAgICAvLyBJRTkgbXVzdCBoYXZlIG9ucHJvZ3Jlc3MgYmUgc2V0IHRvIGEgdW5pcXVlIGZ1bmN0aW9uLlxuICAgIHhoci5vbnByb2dyZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBJRSBtdXN0IGRpZVxuICAgIH1cbiAgICB4aHIub25hYm9ydCA9IGZ1bmN0aW9uKCl7XG4gICAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICB4aHIub250aW1lb3V0ID0gZXJyb3JGdW5jXG4gICAgeGhyLm9wZW4obWV0aG9kLCB1cmksICFzeW5jLCBvcHRpb25zLnVzZXJuYW1lLCBvcHRpb25zLnBhc3N3b3JkKVxuICAgIC8vaGFzIHRvIGJlIGFmdGVyIG9wZW5cbiAgICBpZighc3luYykge1xuICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gISFvcHRpb25zLndpdGhDcmVkZW50aWFsc1xuICAgIH1cbiAgICAvLyBDYW5ub3Qgc2V0IHRpbWVvdXQgd2l0aCBzeW5jIHJlcXVlc3RcbiAgICAvLyBub3Qgc2V0dGluZyB0aW1lb3V0IG9uIHRoZSB4aHIgb2JqZWN0LCBiZWNhdXNlIG9mIG9sZCB3ZWJraXRzIGV0Yy4gbm90IGhhbmRsaW5nIHRoYXQgY29ycmVjdGx5XG4gICAgLy8gYm90aCBucG0ncyByZXF1ZXN0IGFuZCBqcXVlcnkgMS54IHVzZSB0aGlzIGtpbmQgb2YgdGltZW91dCwgc28gdGhpcyBpcyBiZWluZyBjb25zaXN0ZW50XG4gICAgaWYgKCFzeW5jICYmIG9wdGlvbnMudGltZW91dCA+IDAgKSB7XG4gICAgICAgIHRpbWVvdXRUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGlmIChhYm9ydGVkKSByZXR1cm5cbiAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlLy9JRTkgbWF5IHN0aWxsIGNhbGwgcmVhZHlzdGF0ZWNoYW5nZVxuICAgICAgICAgICAgeGhyLmFib3J0KFwidGltZW91dFwiKVxuICAgICAgICAgICAgdmFyIGUgPSBuZXcgRXJyb3IoXCJYTUxIdHRwUmVxdWVzdCB0aW1lb3V0XCIpXG4gICAgICAgICAgICBlLmNvZGUgPSBcIkVUSU1FRE9VVFwiXG4gICAgICAgICAgICBlcnJvckZ1bmMoZSlcbiAgICAgICAgfSwgb3B0aW9ucy50aW1lb3V0IClcbiAgICB9XG5cbiAgICBpZiAoeGhyLnNldFJlcXVlc3RIZWFkZXIpIHtcbiAgICAgICAgZm9yKGtleSBpbiBoZWFkZXJzKXtcbiAgICAgICAgICAgIGlmKGhlYWRlcnMuaGFzT3duUHJvcGVydHkoa2V5KSl7XG4gICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoa2V5LCBoZWFkZXJzW2tleV0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaGVhZGVycyAmJiAhaXNFbXB0eShvcHRpb25zLmhlYWRlcnMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkhlYWRlcnMgY2Fubm90IGJlIHNldCBvbiBhbiBYRG9tYWluUmVxdWVzdCBvYmplY3RcIilcbiAgICB9XG5cbiAgICBpZiAoXCJyZXNwb25zZVR5cGVcIiBpbiBvcHRpb25zKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBvcHRpb25zLnJlc3BvbnNlVHlwZVxuICAgIH1cblxuICAgIGlmIChcImJlZm9yZVNlbmRcIiBpbiBvcHRpb25zICYmXG4gICAgICAgIHR5cGVvZiBvcHRpb25zLmJlZm9yZVNlbmQgPT09IFwiZnVuY3Rpb25cIlxuICAgICkge1xuICAgICAgICBvcHRpb25zLmJlZm9yZVNlbmQoeGhyKVxuICAgIH1cblxuICAgIC8vIE1pY3Jvc29mdCBFZGdlIGJyb3dzZXIgc2VuZHMgXCJ1bmRlZmluZWRcIiB3aGVuIHNlbmQgaXMgY2FsbGVkIHdpdGggdW5kZWZpbmVkIHZhbHVlLlxuICAgIC8vIFhNTEh0dHBSZXF1ZXN0IHNwZWMgc2F5cyB0byBwYXNzIG51bGwgYXMgYm9keSB0byBpbmRpY2F0ZSBubyBib2R5XG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9uYXVndHVyL3hoci9pc3N1ZXMvMTAwLlxuICAgIHhoci5zZW5kKGJvZHkgfHwgbnVsbClcblxuICAgIHJldHVybiB4aHJcblxuXG59XG5cbmZ1bmN0aW9uIGdldFhtbCh4aHIpIHtcbiAgICAvLyB4aHIucmVzcG9uc2VYTUwgd2lsbCB0aHJvdyBFeGNlcHRpb24gXCJJbnZhbGlkU3RhdGVFcnJvclwiIG9yIFwiRE9NRXhjZXB0aW9uXCJcbiAgICAvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1hNTEh0dHBSZXF1ZXN0L3Jlc3BvbnNlWE1MLlxuICAgIHRyeSB7XG4gICAgICAgIGlmICh4aHIucmVzcG9uc2VUeXBlID09PSBcImRvY3VtZW50XCIpIHtcbiAgICAgICAgICAgIHJldHVybiB4aHIucmVzcG9uc2VYTUxcbiAgICAgICAgfVxuICAgICAgICB2YXIgZmlyZWZveEJ1Z1Rha2VuRWZmZWN0ID0geGhyLnJlc3BvbnNlWE1MICYmIHhoci5yZXNwb25zZVhNTC5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWUgPT09IFwicGFyc2VyZXJyb3JcIlxuICAgICAgICBpZiAoeGhyLnJlc3BvbnNlVHlwZSA9PT0gXCJcIiAmJiAhZmlyZWZveEJ1Z1Rha2VuRWZmZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4geGhyLnJlc3BvbnNlWE1MXG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7fVxuXG4gICAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gbm9vcCgpIHt9XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGV4dGVuZFxuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5mdW5jdGlvbiBleHRlbmQoKSB7XG4gICAgdmFyIHRhcmdldCA9IHt9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldXG5cbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldFxufVxuIiwiLyogKGlnbm9yZWQpICovIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvYXBwLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9saWIvcGxvdGx5LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RhbHMuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9ldmVudC1hc3NpZ25tZW50LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvZXZlbnQtYXNzaWdubWVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9ldmVudC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbW9kZWxzL2V2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbW9kZWxzL2Z1bmN0aW9uLWRlZmluaXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9mdW5jdGlvbi1kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbW9kZWxzL2luaXRpYWwtY29uZGl0aW9uLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvaW5pdGlhbC1jb25kaXRpb25zLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvbWVzaC1zZXR0aW5ncy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbW9kZWxzL21vZGVsLXNldHRpbmdzLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvbW9kZWwuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9wYXJhbWV0ZXItc3dlZXAtc2V0dGluZ3MuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9wYXJhbWV0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9wYXJhbWV0ZXJzLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvcmVhY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9yZWFjdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9ydWxlLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvcnVsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9zaW11bGF0aW9uLXNldHRpbmdzLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvc3BlY2llLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9tb2RlbHMvc3BlY2llcy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbW9kZWxzL3N0b2ljaC1zcGVjaWUuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L21vZGVscy9zdG9pY2gtc3BlY2llcy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbW9kZWxzL3N1YmRvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvbW9kZWxzL3N1YmRvbWFpbnMuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3BhZ2UtaGVscC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvcGFnZXMvYmFzZS5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvcGFnZXMvcGFnZS5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc3R5bGVzL2Jvb3RzdHJhcC5jc3M/MmM5OSIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc3R5bGVzL3N0eWxlcy5jc3M/OGU4OCIsIndlYnBhY2s6Ly8vLi9jbGllbnQvdGVtcGxhdGVzL3BhZ2VzL2hvbWUucHVnIiwid2VicGFjazovLy8uL2NsaWVudC90b29sdGlwcy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvdmlld3MvaW5wdXQuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3ZpZXdzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3ZpZXdzL3Rlc3RzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtZnJlZS9jc3Mvc3ZnLXdpdGgtanMubWluLmNzcz82NWJiIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hbXBlcnNhbmQtYXBwL2FtcGVyc2FuZC1hcHAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FtcGVyc2FuZC1jbGFzcy1leHRlbmQvYW1wZXJzYW5kLWNsYXNzLWV4dGVuZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLWNvbGxlY3Rpb24tdmlldy9hbXBlcnNhbmQtY29sbGVjdGlvbi12aWV3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hbXBlcnNhbmQtY29sbGVjdGlvbi9hbXBlcnNhbmQtY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLWRvbS1iaW5kaW5ncy9hbXBlcnNhbmQtZG9tLWJpbmRpbmdzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hbXBlcnNhbmQtZG9tL2FtcGVyc2FuZC1kb20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FtcGVyc2FuZC1ldmVudHMvYW1wZXJzYW5kLWV2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLWV2ZW50cy9saWJzL3V0aWxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hbXBlcnNhbmQtaW5wdXQtdmlldy9hbXBlcnNhbmQtaW5wdXQtdmlldy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLW1vZGVsL2FtcGVyc2FuZC1tb2RlbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLXNlbGVjdC12aWV3L2FtcGVyc2FuZC1zZWxlY3Qtdmlldy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLXN0YXRlL2FtcGVyc2FuZC1zdGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLXN5bmMvYW1wZXJzYW5kLXN5bmMtYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLXN5bmMvY29yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW1wZXJzYW5kLXZpZXctc3dpdGNoZXIvYW1wZXJzYW5kLXZpZXctc3dpdGNoZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FtcGVyc2FuZC12aWV3L2FtcGVyc2FuZC12aWV3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hcnJheS1uZXh0L2FycmF5LW5leHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9kaXN0L2pzL2Jvb3RzdHJhcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xvc2VzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xvc2VzdC9ub2RlX21vZHVsZXMvbWF0Y2hlcy1zZWxlY3Rvci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29tcG9uZW50LWV2ZW50L2luZGV4LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9zdHlsZXMvYm9vdHN0cmFwLmNzcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc3R5bGVzL3N0eWxlcy5jc3MiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1mcmVlL2Nzcy9zdmctd2l0aC1qcy5taW4uY3NzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RlZmluZS1wcm9wZXJ0aWVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kZWxlZ2F0ZS1ldmVudHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RvbWlmeS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZG9tcmVhZHkvcmVhZHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvZXM1LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL2Fzc2VydFJlY29yZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc05hTi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9tb2QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtdG8tcHJpbWl0aXZlL2VzNS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtdG8tcHJpbWl0aXZlL2hlbHBlcnMvaXNQcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2V2ZW50cy1taXhpbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZm9yLWVhY2gvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW1wbGVtZW50YXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2dsb2JhbC93aW5kb3cuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2lzLWNhbGxhYmxlL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pcy1mdW5jdGlvbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvanF1ZXJ5L2Rpc3QvanF1ZXJ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9rYXRleC9kaXN0L2thdGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9rZXktdHJlZS1zdG9yZS9rZXktdHJlZS1zdG9yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9jYWwtbGlua3MvbG9jYWwtbGlua3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fRGF0YVZpZXcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fSGFzaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MYXp5V3JhcHBlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MaXN0Q2FjaGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTG9kYXNoV3JhcHBlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwQ2FjaGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fUHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0Q2FjaGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3RhY2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1VpbnQ4QXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fV2Vha01hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlGaWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlJbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUluY2x1ZGVzV2l0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUxpa2VLZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5UHVzaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVNvbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNjaWlUb0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc2lnblZhbHVlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc29jSW5kZXhPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25Jbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduVmFsdWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUNsb25lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZURpZmZlcmVuY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZpbmRJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRmxhdHRlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRm9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGb3JPd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0QWxsS2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VIYXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUhhc0luLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJbmRleE9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJbnZva2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzQXJndW1lbnRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0RhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzRXF1YWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzRXF1YWxEZWVwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc01hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNNYXRjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYU4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1NldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJdGVyYXRlZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VMb2Rhc2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1hdGNoZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1hdGNoZXNQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUGljay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUGlja0J5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUHJvcGVydHlEZWVwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VQcm9wZXJ0eU9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VSZXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldERhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTbGljZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVGltZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5pcS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5zZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYWNoZUhhcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYXN0RnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FzdFBhdGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVBcnJheUJ1ZmZlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUJ1ZmZlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZURhdGFWaWV3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lUmVnRXhwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lU3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lVHlwZWRBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb21wb3NlQXJncy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb21wb3NlQXJnc1JpZ2h0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcHlBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5T2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcHlTeW1ib2xzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcHlTeW1ib2xzSW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29yZUpzRGF0YS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3VudEhvbGRlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQXNzaWduZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQmFzZUVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQmFzZUZvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQ3VycnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlRmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVIeWJyaWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlUGFydGlhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVSZWN1cnJ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZVNldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVXcmFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2N1c3RvbU9taXRDbG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbEFycmF5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbEJ5VGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2VxdWFsT2JqZWN0cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lc2NhcGVIdG1sQ2hhci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mbGF0UmVzdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0QWxsS2V5c0luLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldERhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0RnVuY05hbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0SG9sZGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hcERhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWF0Y2hEYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE5hdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRQcm90b3R5cGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0U3ltYm9sc0luLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFRhZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRWYWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRXcmFwRGV0YWlscy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNQYXRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc1VuaWNvZGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaENsZWFyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hEZWxldGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEdldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoSGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hTZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lQnlUYWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2luc2VydFdyYXBEZXRhaWxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzRmxhdHRlbmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0l0ZXJhdGVlQ2FsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNMYXppYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc01hc2tlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1Byb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1N0cmljdENvbXBhcmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXRlcmF0b3JUb0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUNsZWFyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlRGVsZXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlR2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlSGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlU2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWVtb2l6ZUNhcHBlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tZXJnZURhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWV0YU1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVDcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlS2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzSW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbm9kZVV0aWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb2JqZWN0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyUmVzdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19wYXJlbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcmVhbE5hbWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jlb3JkZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcmVwbGFjZUhvbGRlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcm9vdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUFkZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUhhcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXREYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0V3JhcFRvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Nob3J0T3V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrQ2xlYXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tEZWxldGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tHZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tIYXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tTZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RyaWN0SW5kZXhPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdHJpbmdUb0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1RvUGF0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b1NvdXJjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL191bmljb2RlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL191cGRhdGVXcmFwRGV0YWlscy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL193cmFwcGVyQ2xvbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9iZWZvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvY2xvbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9jb25zdGFudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2RlZmF1bHRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZGlmZmVyZW5jZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VxLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXNjYXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2ZpbmRJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2ZsYXR0ZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9mb3JFYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZm9yT3duLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZ2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaGFzSW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2luY2x1ZGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaW52b2tlTWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZU9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQnVmZmVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNEYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNFbXB0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRXF1YWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc01hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNQbGFpbk9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzVHlwZWRBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzSW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9sYXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbWVtb2l6ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL25vb3AuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9vbWl0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvb25jZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL3BhcnRpYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9waWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9yZXN1bHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViRmFsc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9GaW5pdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b0ludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b051bWJlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdW5pb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC91bmlxdWVJZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL3ZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL3dyYXBwZXJMb2Rhc2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21hdGNoZXMtc2VsZWN0b3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21lZGlhLXR5cGUvbGliL21lZGlhVHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbm9kZS1saWJzLWJyb3dzZXIvbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL29iamVjdC1rZXlzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGFyc2UtaGVhZGVycy9wYXJzZS1oZWFkZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3BvcHBlci5qcy9kaXN0L2VzbS9wb3BwZXIuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3RlbXBsYXRlcy9ib2R5LnB1ZyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvdGVtcGxhdGVzL2hlYWQucHVnIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wdWctcnVudGltZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcXMvbGliL2Zvcm1hdHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3FzL2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcXMvbGliL3BhcnNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9xcy9saWIvc3RyaW5naWZ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9xcy9saWIvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUudHJpbS9pbXBsZW1lbnRhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS50cmltL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zdHJpbmcucHJvdG90eXBlLnRyaW0vcG9seWZpbGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUudHJpbS9zaGltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi91cmxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL3VuZGVyc2NvcmUuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vbW9kdWxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy94aHIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3h0ZW5kL2ltbXV0YWJsZS5qcyIsIndlYnBhY2s6Ly8vZnMgKGlnbm9yZWQpIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0EsV0FBVyxtQkFBTyxDQUFDLHFEQUFNOztBQUV6QjtBQUNB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QixFQUFFLDZCQUE2QixFQUFFLDRCQUE0QixFQUFFLDZCQUE2QixFQUFFLDBCQUEwQixXQUFXLHNCQUFzQixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDZCQUE2QixFQUFFLDRCQUE0QixFQUFFLDZCQUE2QixFQUFFLDBCQUEwQixXQUFXLHVCQUF1QixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixFQUFFLDZCQUE2QixFQUFFLDBCQUEwQixZQUFZLHNCQUFzQixFQUFFLHNCQUFzQixTQUFTLHVCQUF1QixFQUFFLDRCQUE0QixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLHdCQUF3QixXQUFXLHNCQUFzQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLHNCQUFzQixZQUFZLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLHNCQUFzQixhQUFhLHdCQUF3QixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLHdCQUF3QixjQUFjLG9CQUFvQixFQUFFLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixVQUFVLHNCQUFzQixFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixhQUFhLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixVQUFVLDRCQUE0QixFQUFFLDRCQUE0QixZQUFZLHNCQUFzQixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLHlCQUF5QixZQUFZLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixVQUFVLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDRCQUE0QixFQUFFLDBCQUEwQixXQUFXLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLHlCQUF5QixTQUFTLHdCQUF3QixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLHdCQUF3QixTQUFTLHdCQUF3QixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixFQUFFLHdCQUF3QixtQkFBbUIsd0JBQXdCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUsd0JBQXdCLEVBQUUseUJBQXlCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUsd0JBQXdCLGVBQWUsdUJBQXVCLEVBQUUseUJBQXlCLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsMEJBQTBCLFNBQVMsdUJBQXVCLEVBQUUseUJBQXlCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsMkJBQTJCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsMEJBQTBCLGdCQUFnQix1QkFBdUIsRUFBRSx5QkFBeUIsRUFBRSx5QkFBeUIsRUFBRSwwQkFBMEIsRUFBRSx5QkFBeUIsRUFBRSwwQkFBMEIsRUFBRSw0QkFBNEIsRUFBRSw0QkFBNEIsRUFBRSwwQkFBMEIsWUFBWSx1QkFBdUIsRUFBRSx5QkFBeUIsRUFBRSwyQkFBMkIsRUFBRSwyQkFBMkIsRUFBRSwyQkFBMkIsRUFBRSw0QkFBNEIsRUFBRSw0QkFBNEIsRUFBRSw0QkFBNEIsRUFBRSwwQkFBMEIsdUJBQXVCLHVCQUF1QixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixFQUFFLDBCQUEwQixzQkFBc0Isc0JBQXNCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsMEJBQTBCLFdBQVcscUJBQXFCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLFFBQVEsdUJBQXVCLEVBQUUseUJBQXlCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUseUJBQXlCLFVBQVUseUJBQXlCLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLGFBQWEsd0JBQXdCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsMEJBQTBCLGdCQUFnQixzQkFBc0IsRUFBRSwwQkFBMEIsRUFBRSwwQkFBMEIsRUFBRSwyQkFBMkIsRUFBRSwwQkFBMEIsRUFBRSw0QkFBNEIsRUFBRSwyQkFBMkIsRUFBRSwyQkFBMkIsRUFBRSx5QkFBeUIsY0FBYyx1QkFBdUIsRUFBRSx5QkFBeUIsRUFBRSx5QkFBeUIsRUFBRSwwQkFBMEIsRUFBRSwwQkFBMEIsRUFBRSwyQkFBMkIsRUFBRSwyQkFBMkIsRUFBRSw0QkFBNEIsRUFBRSwwQkFBMEIsb0JBQW9CLHVCQUF1QixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixFQUFFLDBCQUEwQixxQkFBcUIsdUJBQXVCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsNEJBQTRCLEVBQUUsMEJBQTBCLGNBQWMsb0JBQW9CLEVBQUUsd0JBQXdCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVBQUUsNEJBQTRCLEVBQUUsMEJBQTBCLEdBQUcsR0FBRyx1QkFBdUIsYUFBYSxvQ0FBb0MsY0FBYyx3Q0FBd0MsY0FBYyxvQkFBb0IsSUFBSSx5REFBeUQsU0FBUyxjQUFjLDhCQUE4QixzQkFBc0Isd0JBQXdCLFFBQVEsRUFBRSxnRUFBZ0UsdUJBQXVCLHdFQUF3RSxPQUFPLEtBQUssa0VBQWtFLFlBQVkseUZBQXlGLG1IQUFtSCxvQkFBb0IsNkJBQTZCLHNFQUFzRSwwQkFBMEIsb0NBQW9DLG9FQUFvRSxPQUFPLFFBQVEsYUFBYSxLQUFLLDhCQUE4QixZQUFZLElBQUksS0FBSyxVQUFVLDJHQUEyRyxrSEFBa0gsVUFBVSxFQUFFLDRCQUE0Qix1QkFBdUIsYUFBYSw0QkFBNEIsZUFBZSxVQUFVLGdDQUFnQyxVQUFVLFVBQVUsMEJBQTBCLHNCQUFzQixTQUFTLG1FQUFtRSxlQUFlLG1DQUFtQyxtQ0FBbUMsZUFBZSw0QkFBNEIsbUdBQW1HLGtCQUFrQix1RkFBdUYseUJBQXlCLEVBQUUsd0ZBQXdGLHVCQUF1Qix3QkFBd0IsbUNBQW1DLGNBQWMsVUFBVSxnQkFBZ0Isd0JBQXdCLDZEQUE2RCxtQ0FBbUMsOEJBQThCLGtDQUFrQyxvREFBb0QsbUVBQW1FLGdLQUFnSyw0REFBNEQsSUFBSSw0QkFBNEIsV0FBVyxlQUFlLGdCQUFnQixZQUFZLEdBQUcsdUJBQXVCLGFBQWEsZ0RBQWdELHdCQUF3QiwwQkFBMEIsRUFBRSwwQ0FBMEMsdUJBQXVCLGFBQWEsMERBQTBELHNCQUFzQixlQUFlLGtCQUFrQixxQkFBcUIsa0JBQWtCLGtCQUFrQixxQkFBcUIscUJBQXFCLGVBQWUsRUFBRSxtREFBbUQsdUJBQXVCLGFBQWEsc0JBQXNCLG9CQUFvQixXQUFXLGtEQUFrRCwwQ0FBMEMsR0FBRyx1QkFBdUIsYUFBYSxzQkFBc0Isc0JBQXNCLGlCQUFpQixvQ0FBb0MsSUFBSSxLQUFLLFdBQVcsZUFBZSxVQUFVLG1DQUFtQyxFQUFFLDhCQUE4Qix1QkFBdUIsYUFBYSx3QkFBd0IsSUFBSSxlQUFlLFNBQVMsV0FBVyx3QkFBd0Isb0JBQW9CLHNDQUFzQyxXQUFXLGlCQUFpQix1QkFBdUIsSUFBSSxrQ0FBa0MsU0FBUyxnQkFBZ0IscUJBQXFCLGtDQUFrQyxJQUFJLHVCQUF1QixXQUFXLEtBQUssV0FBVyxpQkFBaUIsS0FBSyxLQUFLLFlBQVksSUFBSSxvQkFBb0IsUUFBUSxTQUFTLFFBQVEsc0RBQXNELEVBQUUsK0NBQStDLHVCQUF1QixXQUFXLGtsTUFBa2xNLEdBQUcsdUJBQXVCLGtHQUFrRyxHQUFHLHVCQUF1QixtSkFBbUosR0FBRyx1QkFBdUIsd0NBQXdDLEdBQUcsdUJBQXVCLHFHQUFxRyxHQUFHLHVCQUF1QixhQUFhLFdBQVcsK0NBQStDLEVBQUUsZ0NBQWdDLHVCQUF1QixhQUFhLGtDQUFrQyxXQUFXLG1CQUFtQixrRUFBa0UsRUFBRSw2QkFBNkIsdUJBQXVCLGFBQWEsOE5BQThOLFlBQVksaUJBQWlCLGNBQWMseUVBQXlFLG9CQUFvQiwyREFBMkQsa0NBQWtDLFVBQVUsYUFBYSxrSEFBa0gsY0FBYyxZQUFZLEVBQUUsc0ZBQXNGLE9BQU8sU0FBUyw2RUFBNkUsc0JBQXNCLFNBQVMsZUFBZSw0SkFBNEosdURBQXVELHlEQUF5RCxXQUFXLGlCQUFpQixpQkFBaUIsZUFBZSwrQ0FBK0MsY0FBYyxvQkFBb0IsNkJBQTZCLEVBQUUseU1BQXlNLHVCQUF1QixhQUFhLCtOQUErTix3QkFBd0IsSUFBSSxxRUFBcUUsb0JBQW9CLGdCQUFnQiwwREFBMEQsU0FBUyxjQUFjLFlBQVksS0FBSyxXQUFXLGNBQWMsU0FBUyxzQkFBc0IsV0FBVyxpZUFBaWUsa0RBQWtELDJLQUEySyxtSEFBbUgsd0JBQXdCLGNBQWMsU0FBUyxrV0FBa1csRUFBRSwyTEFBMkwsdUJBQXVCLHdDQUF3QyxHQUFHLHVCQUF1QiwrRUFBK0UsR0FBRyx1QkFBdUIsYUFBYSxnQ0FBZ0MsMERBQTBELGFBQWEsMkJBQTJCLHFCQUFxQixLQUFLLHFDQUFxQyxTQUFTLHVCQUF1Qiw0Q0FBNEMsdURBQXVELGFBQWEsMkJBQTJCLHFCQUFxQixLQUFLLHFDQUFxQyxTQUFTLDJCQUEyQixHQUFHLHVCQUF1QixhQUFhLDBCQUEwQixhQUFhLDBQQUEwUCxzQkFBc0IsWUFBWSx3Q0FBd0Msc0JBQXNCLGFBQWEsWUFBWSxXQUFXLEtBQUssV0FBVyxvREFBb0QsZ1BBQWdQLG9IQUFvSCxzRUFBc0UscUJBQXFCLHNJQUFzSSxtSEFBbUgscUhBQXFILHFCQUFxQixvSUFBb0ksbUhBQW1ILG1IQUFtSCxLQUFLLHVGQUF1RiwwQ0FBMEMsOEJBQThCLDRCQUE0QixnRkFBZ0YsMEZBQTBGLDRGQUE0Riw0RkFBNEYseUdBQXlHLEVBQUUscUJBQXFCLHVCQUF1QixhQUFhLGdCQUFnQixrQkFBa0IsaUZBQWlGLFFBQVEsSUFBSSxrQ0FBa0MsUUFBUSxJQUFJLFlBQVksSUFBSSxzSUFBc0ksaURBQWlELEtBQUssaUNBQWlDLGNBQWMsVUFBVSxhQUFhLGtCQUFrQixJQUFJLEtBQUssbUJBQW1CLElBQUksMkNBQTJDLDhGQUE4RixHQUFHLG9CQUFvQixrQkFBa0IsK0JBQStCLGdCQUFnQixLQUFLLGdCQUFnQixrQkFBa0IsMkRBQTJELHNCQUFzQiwrQ0FBK0MsaUNBQWlDLHNCQUFzQixvQkFBb0Isa2ZBQWtmLEtBQUssNkJBQTZCLG1DQUFtQyxpRUFBaUUsa0pBQWtKLHNDQUFzQyxNQUFNLHdEQUF3RCxNQUFNLG1DQUFtQyxNQUFNLHFDQUFxQyxzREFBc0Qsd0JBQXdCLDZIQUE2SCxxQkFBcUIsOEJBQThCLDZCQUE2QixRQUFRLHFCQUFxQixLQUFLLHFNQUFxTSxpQkFBaUIsY0FBYyxzREFBc0QsVUFBVSxxQ0FBcUMsUUFBUSxJQUFJLDBDQUEwQyxRQUFRLHFCQUFxQixLQUFLLGtEQUFrRCxJQUFJLHlEQUF5RCxRQUFRLG1DQUFtQyx5REFBeUQsUUFBUSxzQkFBc0Isa0JBQWtCLDJFQUEyRSxtQkFBbUIsUUFBUSxJQUFJLGFBQWEsNkNBQTZDLFFBQVEsc0JBQXNCLEtBQUssMkJBQTJCLFFBQVEsa0JBQWtCLDhIQUE4SCx5RUFBeUUsbUZBQW1GLDZEQUE2RCxxQkFBcUIsd0JBQXdCLDBDQUEwQyxrQ0FBa0MsMEJBQTBCLElBQUksRUFBRSxZQUFZLFdBQVcsa0NBQWtDLElBQUksU0FBUyxJQUFJLDZCQUE2QixzRkFBc0YsSUFBSSw2Q0FBNkMsUUFBUSxJQUFJLDJDQUEyQyxTQUFTLEVBQUUsdUNBQXVDLHdGQUF3RixLQUFLLGdEQUFnRCx5REFBeUQsUUFBUSxJQUFJLEtBQUssMkJBQTJCLElBQUksNkNBQTZDLDhDQUE4Qyx5QkFBeUIsSUFBSSxhQUFhLEdBQUcsb0JBQW9CLDRLQUE0Syw2RUFBNkUsdUNBQXVDLFdBQVcsS0FBSyw0QkFBNEIsZ0dBQWdHLHlCQUF5QixjQUFjLHNEQUFzRCxpQkFBaUIsMEJBQTBCLEVBQUUsU0FBUyx1QkFBdUIsYUFBYSx3QkFBd0Isc0JBQXNCLG9DQUFvQyxvQ0FBb0MseURBQXlELGFBQWEscUxBQXFMLHFCQUFxQixLQUFLLHFCQUFxQixvaEJBQW9oQiwrT0FBK08sbUJBQW1CLEdBQUcsa0hBQWtILFFBQVEsc0JBQXNCLHFDQUFxQyxvSUFBb0ksZ0RBQWdELGdDQUFnQyxpSkFBaUosRUFBRSxtQkFBbUIsdUJBQXVCLDhCQUE4QixFQUFFLHFCQUFxQix1QkFBdUIsYUFBYSxtU0FBbVMsa0JBQWtCLHlCQUF5QiwrREFBK0Qsb0lBQW9JLEdBQUcsdUJBQXVCLHNCQUFzQixxRUFBcUUsZ0JBQWdCLEdBQUcsRUFBRSwrSkFBK0osdUJBQXVCLGFBQWEsNElBQTRJLHlCQUF5QixjQUFjLHlKQUF5SiwrQ0FBK0MsZUFBZSxxQkFBcUIsWUFBWSxtTUFBbU0sd0NBQXdDLGdCQUFnQixFQUFFLG9JQUFvSSx1QkFBdUIsTUFBTSxtQkFBbUIsYUFBYSxnQkFBZ0IsK0JBQStCLGNBQWMsTUFBTSwwQ0FBMEMsaUJBQWlCLEdBQUcsdUJBQXVCLHlDQUF5QyxJQUFJLEVBQUUsY0FBYyxzQkFBc0IsU0FBUyx5QkFBeUIseUNBQXlDLElBQUksRUFBRSxjQUFjLHNCQUFzQixXQUFXLDhCQUE4QixnQkFBZ0IsWUFBWSxjQUFjLHVCQUF1QixnQkFBZ0Isb0NBQW9DLGdCQUFnQixNQUFNLCtDQUErQyxVQUFVLE1BQU0sc0RBQXNELHNCQUFzQixnQkFBZ0IsYUFBYSx3QkFBd0IsZ0JBQWdCLDBCQUEwQixZQUFZLEtBQUssTUFBTSxtQ0FBbUMsTUFBTSx5Q0FBeUMsVUFBVSxNQUFNLDBDQUEwQyxNQUFNLGdEQUFnRCxZQUFZLHdDQUF3QyxjQUFjLGtCQUFrQixVQUFVLGNBQWMsU0FBUyxrQkFBa0Isd0RBQXdELCtEQUErRCxNQUFNLFlBQVksU0FBUyxtREFBbUQsa0JBQWtCLGlGQUFpRixnR0FBZ0csa0JBQWtCLHlGQUF5RixrREFBa0QsY0FBYyxnREFBZ0Qsa0JBQWtCLDhCQUE4QixxQ0FBcUMsK0JBQStCLCtDQUErQyxxQ0FBcUMsZ0JBQWdCLHdCQUF3QixZQUFZLEtBQUssTUFBTSxpQ0FBaUMsTUFBTSw0QkFBNEIsVUFBVSxNQUFNLHdDQUF3QyxNQUFNLG1DQUFtQyxTQUFTLGNBQWMsMEJBQTBCLHFDQUFxQyxNQUFNLG9DQUFvQyxNQUFNLGNBQWMsU0FBUyxjQUFjLGdCQUFnQiw2RkFBNkYsbURBQW1ELHlCQUF5QixJQUFJLG1CQUFtQixJQUFJLHVCQUF1QixTQUFTLDRCQUE0QiwrQkFBK0IsaURBQWlELGdCQUFnQixjQUFjLGtDQUFrQyxRQUFRLElBQUkscUJBQXFCLG9DQUFvQyx5REFBeUQsbUJBQW1CLFFBQVEsZUFBZSxLQUFLLFNBQVMsYUFBYSx1QkFBdUIsUUFBUSxLQUFLLGdEQUFnRCxRQUFRLElBQUksZ0RBQWdELFNBQVMsMkJBQTJCLDREQUE0RCxzQkFBc0Isc0VBQXNFLDBCQUEwQiwwRkFBMEYsR0FBRyw2Q0FBNkMsOEZBQThGLGtDQUFrQywyREFBMkQsMENBQTBDLHdCQUF3QixZQUFZLEtBQUssTUFBTSxpQ0FBaUMsTUFBTSw0QkFBNEIsVUFBVSxNQUFNLHdDQUF3QyxNQUFNLG1DQUFtQyxTQUFTLHNCQUFzQiw4QkFBOEIsZ0JBQWdCLE1BQU0sMkJBQTJCLFVBQVUsTUFBTSxrQ0FBa0MsZ0JBQWdCLHdCQUF3QiwyQkFBMkIsZ0JBQWdCLE1BQU0sNkJBQTZCLFVBQVUsTUFBTSxvQ0FBb0MsdUJBQXVCLHFCQUFxQixrQ0FBa0MsTUFBTSxnQkFBZ0IsbUJBQW1CLE9BQU8sdUJBQXVCLE9BQU8sYUFBYSxTQUFTLCtCQUErQixlQUFlLHFEQUFxRCxJQUFJLG9CQUFvQixTQUFTLHlCQUF5QixrQ0FBa0MsSUFBSSxjQUFjLFNBQVMsNkNBQTZDLGVBQWUsdUJBQXVCLG1CQUFtQixNQUFNLHdDQUF3Qyw0QkFBNEIsMkJBQTJCLG9EQUFvRCxFQUFFLHVEQUF1RCxTQUFTLHFCQUFxQiwwQkFBMEIsZ0JBQWdCLE1BQU0sbUJBQW1CLFVBQVUsTUFBTSwwQkFBMEIsU0FBUyx5QkFBeUIsaUJBQWlCLHNDQUFzQyxrRUFBa0UsOEVBQThFLE1BQU0sY0FBYyw0RUFBNEUsTUFBTSxjQUFjLHdCQUF3Qiw0RUFBNEUsb0JBQW9CLHVDQUF1QyxTQUFTLEVBQUUsMERBQTBELEVBQUUsR0FBRyx1QkFBdUIsTUFBTSxtQkFBbUIsYUFBYSxjQUFjLGdCQUFnQixZQUFZLHVDQUF1QyxXQUFXLEVBQUUsMEJBQTBCLHNCQUFzQixnQkFBZ0IsTUFBTSxlQUFlLFVBQVUsTUFBTSx3QkFBd0IsdUNBQXVDLFNBQVMseUJBQXlCLDhCQUE4QixvQkFBb0IsaUJBQWlCLG1CQUFtQixtQkFBbUIsMEJBQTBCLG9CQUFvQixZQUFZLGlDQUFpQyxrQkFBa0IsNkNBQTZDLGlCQUFpQixTQUFTLGlEQUFpRCxTQUFTLG1CQUFtQixTQUFTLDhDQUE4QyxTQUFTLG9CQUFvQixTQUFTLHNDQUFzQyw2QkFBNkIsRUFBRSxTQUFTLGlCQUFpQixRQUFRLGtDQUFrQyxTQUFTLGtCQUFrQix5Q0FBeUMsU0FBUyxrQkFBa0IsMkRBQTJELGFBQWEsU0FBUyxrQkFBa0IsT0FBTyxhQUFhLFdBQVcsa0JBQWtCLFdBQVcsY0FBYyxrQkFBa0IsZ0JBQWdCLFlBQVkscUNBQXFDLFNBQVMsRUFBRSxXQUFXLG9CQUFvQixnQkFBZ0IsTUFBTSxhQUFhLFVBQVUsTUFBTSxvQkFBb0IsU0FBUyx5QkFBeUIsd0NBQXdDLGdDQUFnQyxvRkFBb0Ysa0JBQWtCLG9CQUFvQixvQkFBb0Isd0RBQXdELG1EQUFtRCxNQUFNLGtEQUFrRCw0QkFBNEIsa0JBQWtCLElBQUksVUFBVSxtQkFBbUIsa0JBQWtCLGlCQUFpQixrQkFBa0IscUJBQXFCLHVCQUF1Qix5QkFBeUIsZUFBZSxxRUFBcUUsUUFBUSxvQkFBb0IsRUFBRSxnQ0FBZ0Msc0JBQXNCLElBQUksZUFBZSxpQkFBaUIsbUJBQW1CLHNCQUFzQix5QkFBeUIsd0JBQXdCLGFBQWEsb0JBQW9CLGVBQWUsb0NBQW9DLFNBQVMseUJBQXlCLFNBQVMsc0JBQXNCLFNBQVMsNEJBQTRCLFNBQVMsdUJBQXVCLFNBQVMsdUJBQXVCLGlCQUFpQixFQUFFLFNBQVMsdUNBQXVDLFNBQVMsRUFBRSwwREFBMEQsRUFBRSxHQUFHLHVCQUF1QixNQUFNLG1CQUFtQixhQUFhLGtCQUFrQiwwQ0FBMEMsZ0JBQWdCLGlDQUFpQyx5QkFBeUIsU0FBUyxjQUFjLGdKQUFnSixFQUFFLG1CQUFtQixFQUFFLDBQQUEwUCx3b0ZBQXdvRixjQUFjLE1BQU0sc2dCQUFzZ0IsY0FBYyx5Q0FBeUMsb0JBQW9CLHdDQUF3QyxjQUFjLCtFQUErRSxvQkFBb0IsMERBQTBELG9CQUFvQiw4Q0FBOEMsY0FBYyxnRkFBZ0Ysb0JBQW9CLHNFQUFzRSxvQkFBb0Isd0NBQXdDLHNEQUFzRCw0Q0FBNEMsMkJBQTJCLHNHQUFzRywySEFBMkgsNkJBQTZCLG9CQUFvQiw4Q0FBOEMsa0JBQWtCLGtFQUFrRSxPQUFPLHVCQUF1QixnQ0FBZ0MsZ0JBQWdCLHdCQUF3QixxQkFBcUIsc0JBQXNCLGFBQWEscUJBQXFCLHNGQUFzRixvQkFBb0Isa0ZBQWtGLGdCQUFnQixZQUFZLHdCQUF3QixnSEFBZ0gsZ0JBQWdCLHdDQUF3QyxxQkFBcUIsbUJBQW1CLHNQQUFzUCxjQUFjLHFCQUFxQixrRkFBa0Ysb0JBQW9CLDhFQUE4RSxnQkFBZ0IsdUdBQXVHLHVGQUF1Rix3QkFBd0IscUdBQXFHLEdBQUcsb0ZBQW9GLGNBQWMsc0RBQXNELG1CQUFtQiw4Q0FBOEMsWUFBWSw0REFBNEQseUJBQXlCLDZFQUE2RSw4SkFBOEosb0JBQW9CLDBEQUEwRCxvQkFBb0IsOENBQThDLGNBQWMsaUNBQWlDLGNBQWMseUJBQXlCLGNBQWMsOERBQThELGNBQWMsNERBQTRELGNBQWMsc0RBQXNELCtFQUErRSw0QkFBNEIsbUVBQW1FLG9CQUFvQiwwREFBMEQsb0JBQW9CLDhDQUE4QyxXQUFXLHFCQUFxQixpRUFBaUUsb0JBQW9CLGlFQUFpRSxnQkFBZ0Isb0ZBQW9GLHVLQUF1SyxjQUFjLHFCQUFxQixpRUFBaUUsb0JBQW9CLGlFQUFpRSxnQkFBZ0Isc0JBQXNCLEdBQUcsNEVBQTRFLHFCQUFxQix3Q0FBd0Msd0RBQXdELHlCQUF5QixpSkFBaUoseUNBQXlDLDhCQUE4QixxQkFBcUIsOENBQThDLGFBQWEscUJBQXFCLG1GQUFtRixvQkFBb0IsK0VBQStFLGdCQUFnQiw0R0FBNEcsb0ZBQW9GLHFFQUFxRSwwREFBMEQsc0JBQXNCLGdDQUFnQyxzREFBc0QsU0FBUyxFQUFFLDBEQUEwRCxFQUFFLEdBQUcsdUJBQXVCLE1BQU0sbUJBQW1CLGFBQWEsT0FBTyxvQkFBb0IsYUFBYSxzQ0FBc0MsSUFBSSxLQUFLLG9FQUFvRSxRQUFRLGdCQUFnQixjQUFjLFNBQVMsZ0JBQWdCLHlCQUF5QixJQUFJLHdDQUF3QyxrQkFBa0IsdUJBQXVCLElBQUksc0JBQXNCLDJDQUEyQyxNQUFNLHdCQUF3QixlQUFlLElBQUkseUJBQXlCLCtCQUErQixxRUFBcUUsMEJBQTBCLHFHQUFxRyxPQUFPLGVBQWUsbUJBQW1CLDBCQUEwQix5RUFBeUUsS0FBSyxNQUFNLDBDQUEwQyxvREFBb0QsWUFBWSxLQUFLLE1BQU0sbURBQW1ELGlCQUFpQixRQUFRLFVBQVUsaUNBQWlDLGdCQUFnQixvQkFBb0IsMkRBQTJELElBQUksd0JBQXdCLGlFQUFpRSwrQkFBK0IsSUFBSSwwQkFBMEIsdUJBQXVCLGlFQUFpRSxtQ0FBbUMsSUFBSSwyQkFBMkIsb0RBQW9ELFNBQVMsRUFBRSwwREFBMEQsRUFBRSxHQUFHLHVCQUF1QixRQUFRLDZCQUE2QixhQUFhLGtCQUFrQixrQkFBa0IsVUFBVSxjQUFjLGdDQUFnQyxjQUFjLGdCQUFnQixjQUFjLGdCQUFnQixjQUFjLGVBQWUsZ0JBQWdCLGVBQWUscUNBQXFDLFNBQVMsY0FBYyxXQUFXLGNBQWMsV0FBVyxvQ0FBb0MsNEJBQTRCLE1BQU0sYUFBYSwyQkFBMkIsUUFBUSxJQUFJLHlCQUF5Qix3QkFBd0IsSUFBSSx5QkFBeUIsOERBQThELElBQUksaUJBQWlCLG1DQUFtQyxpQkFBaUIsbUNBQW1DLEdBQUcsNEJBQTRCLGdCQUFnQixhQUFhLHFDQUFxQyxJQUFJLDhDQUE4QyxJQUFJLCtEQUErRCxzQkFBc0IseUJBQXlCLHdDQUF3QyxvQkFBb0Isd0NBQXdDLHlKQUF5SixjQUFjLHFDQUFxQyxnQkFBZ0IsSUFBSSxtQ0FBbUMsYUFBYSxNQUFNLG1CQUFtQix1QkFBdUIsSUFBSSxpQ0FBaUMseUVBQXlFLFFBQVEsMEJBQTBCLG1DQUFtQyx3QkFBd0IsbUNBQW1DLHNCQUFzQixpRUFBaUUsR0FBRyx5QkFBeUIsZ0NBQWdDLHVEQUF1RCxhQUFhLGNBQWMsdUJBQXVCLElBQUksOEJBQThCLElBQUkseUxBQXlMLGFBQWEsTUFBTSwyQ0FBMkMsdUJBQXVCLElBQUksbU5BQW1OLHVCQUF1QixJQUFJLHdFQUF3RSx1Q0FBdUMsYUFBYSw0QkFBNEIsSUFBSSxzQkFBc0IsYUFBYSw0QkFBNEIsSUFBSSxzQkFBc0IsZ0RBQWdELFFBQVEscUJBQXFCLHNDQUFzQyxrQkFBa0Isa0NBQWtDLDBCQUEwQixtQ0FBbUMsd0JBQXdCLGlFQUFpRSx3QkFBd0IsaUVBQWlFLEdBQUcsNEJBQTRCLHFDQUFxQyxjQUFjLG1EQUFtRCxZQUFZLElBQUksc0JBQXNCLGFBQWEsTUFBTSxtQkFBbUIsdUJBQXVCLElBQUksaUNBQWlDLGNBQWMsc0JBQXNCLGFBQWEsWUFBWSxJQUFJLHlFQUF5RSxnQkFBZ0IsS0FBSyw4QkFBOEIsR0FBRyxtQkFBbUIsZ0JBQWdCLFVBQVUsb0JBQW9CLHFCQUFxQix3Q0FBd0Msd0lBQXdJLHNCQUFzQiw0RkFBNEYsR0FBRyx3REFBd0QsaUJBQWlCLGdDQUFnQyxRQUFRLHdCQUF3QixpRUFBaUUsMkJBQTJCLCtDQUErQywyQkFBMkIsK0NBQStDLHFCQUFxQiwrQ0FBK0MsR0FBRywrQkFBK0Isa0JBQWtCLGNBQWMsdUJBQXVCLElBQUksS0FBSyxnRkFBZ0YscUJBQXFCLGFBQWEsTUFBTSxpQkFBaUIsc0NBQXNDLElBQUksdURBQXVELDZGQUE2RixRQUFRLHdCQUF3QixpRUFBaUUsc0JBQXNCLGlFQUFpRSxpQkFBaUIsbUNBQW1DLGlCQUFpQixtQ0FBbUMsR0FBRywrQkFBK0Isa0dBQWtHLGFBQWEscURBQXFELGFBQWEsbUJBQW1CLGtDQUFrQyxLQUFLLE1BQU0sSUFBSSwrRkFBK0YsYUFBYSx5QkFBeUIsSUFBSSxLQUFLLDRDQUE0QywyQkFBMkIsb0NBQW9DLDJDQUEyQyxjQUFjLHVDQUF1Qyw4QkFBOEIsMEJBQTBCLHNCQUFzQixpQkFBaUIsa0JBQWtCLG1CQUFtQixnREFBZ0QsbUJBQW1CLG1DQUFtQyxzQkFBc0IsbUNBQW1DLHdCQUF3QixvQ0FBb0MseUJBQXlCLG1DQUFtQywyQkFBMkIsc0NBQXNDLHFCQUFxQix5RUFBeUUsc0JBQXNCLDZCQUE2QiwyQkFBMkIsSUFBSSxvREFBb0QsU0FBUyxrQkFBa0Isa0RBQWtELHNCQUFzQixrQkFBa0IsY0FBYyx5QkFBeUIsSUFBSSxtQ0FBbUMsYUFBYSxNQUFNLGlCQUFpQixzQ0FBc0MsSUFBSSxrREFBa0QseUVBQXlFLFFBQVEsd0JBQXdCLGlFQUFpRSxpQkFBaUIsaUVBQWlFLEdBQUcsc0JBQXNCLGtCQUFrQixjQUFjLHlCQUF5QixJQUFJLG1DQUFtQyxhQUFhLE1BQU0saUJBQWlCLHNDQUFzQyxJQUFJLGtEQUFrRCx5RUFBeUUsUUFBUSx3QkFBd0IsaUVBQWlFLGlCQUFpQixpRUFBaUUsR0FBRyx1Q0FBdUMsU0FBUyxFQUFFLGtJQUFrSSxzQkFBc0IsRUFBRSx1RUFBdUUsdUJBQXVCLE1BQU0sbUJBQW1CLGFBQWEsZ0JBQWdCLCtCQUErQixnQkFBZ0IsYUFBYSxnQkFBZ0IsdUJBQXVCLGNBQWMsbUNBQW1DLFVBQVUsT0FBTyxlQUFlLFNBQVMsVUFBVSxnQkFBZ0IsNkRBQTZELG1CQUFtQixVQUFVLDZGQUE2RixLQUFLLHFFQUFxRSx1QkFBdUIsY0FBYyxrQkFBa0IsY0FBYyxtQkFBbUIsY0FBYyxRQUFRLEdBQUcsV0FBVyxrQ0FBa0MsY0FBYyxzREFBc0QseUJBQXlCLCtCQUErQix5QkFBeUIsa0JBQWtCLHlCQUF5QixHQUFHLHVCQUF1QixVQUFVLHlDQUF5QyxJQUFJLGlCQUFpQixnQkFBZ0IsWUFBWSx1QkFBdUIsZ0NBQWdDLFVBQVUsOENBQThDLElBQUksaUJBQWlCLEtBQUssVUFBVSxNQUFNLFlBQVksd0JBQXdCLHlCQUF5QixVQUFVLHVDQUF1QyxLQUFLLGlCQUFpQixZQUFZLGlCQUFpQixrQ0FBa0MsbURBQW1ELE9BQU8sZUFBZSxVQUFVLEVBQUUsa0JBQWtCLG1DQUFtQywrQkFBK0IsRUFBRSxrQkFBa0IsK0JBQStCLGtCQUFrQiwyQ0FBMkMsd0JBQXdCLE1BQU0seUJBQXlCLFNBQVMsWUFBWSxNQUFNLHNCQUFzQixtQkFBbUIsTUFBTSw0QkFBNEIsU0FBUyxzQkFBc0IscUJBQXFCLFdBQVcsV0FBVyxTQUFTLHdCQUF3QixTQUFTLDZCQUE2QixVQUFVLElBQUksbUJBQW1CLFNBQVMsbUNBQW1DLHNCQUFzQixJQUFJLGtCQUFrQixnQkFBZ0IsMEJBQTBCLGVBQWUseUJBQXlCLEVBQUUsSUFBSSxpQkFBaUIsK0JBQStCLDRCQUE0QixjQUFjLGlDQUFpQyx1QkFBdUIsRUFBRSwrQ0FBK0MsU0FBUyx5QkFBeUIsSUFBSSwwQ0FBMEMsU0FBUyxnQkFBZ0IsUUFBUSxvQkFBb0IsUUFBUSxXQUFXLGdEQUFnRCxRQUFRLGFBQWEsY0FBYyxXQUFXLHdHQUF3RyxnQkFBZ0IsZ0JBQWdCLGtDQUFrQyx3QkFBd0IsZ0JBQWdCLHVDQUF1Qyx3QkFBd0IsZ0JBQWdCLFlBQVksV0FBVywyQkFBMkIsU0FBUyxjQUFjLGlCQUFpQixjQUFjLDBCQUEwQiwyQkFBMkIsZ0NBQWdDLE1BQU0sZ0JBQWdCLCtFQUErRSxPQUFPLDZDQUE2QyxrQkFBa0IsOFNBQThTLE9BQU8seUJBQXlCLGtCQUFrQiwwQ0FBMEMsa09BQWtPLGdCQUFnQix1Q0FBdUMsd0JBQXdCLGNBQWMsMkVBQTJFLGVBQWUsY0FBYywyQ0FBMkMsY0FBYywwQkFBMEIsMEJBQTBCLHdDQUF3Qyx1REFBdUQsMkdBQTJHLFVBQVUsSUFBSSxLQUFLLG1FQUFtRSxHQUFHLFNBQVMsZUFBZSw4QkFBOEIsV0FBVyxrQkFBa0IsS0FBSyxlQUFlLDhCQUE4QixXQUFXLHVCQUF1QixrQkFBa0IsdURBQXVELGVBQWUsdUJBQXVCLFNBQVMsZ0JBQWdCLGVBQWUsYUFBYSxlQUFlLElBQUksNkJBQTZCLFdBQVcsY0FBYyx3Q0FBd0MsU0FBUyxhQUFhLFNBQVMsY0FBYyxrQkFBa0IsVUFBVSxjQUFjLDBCQUEwQixjQUFjLG1CQUFtQix3Q0FBd0MsZ0JBQWdCLG1CQUFtQixpQkFBaUIsaUNBQWlDLGFBQWEsSUFBSSxjQUFjLG9CQUFvQixJQUFJLGNBQWMsVUFBVSxjQUFjLG1CQUFtQixlQUFlLHlDQUF5QyxjQUFjLHdGQUF3RixzQkFBc0IsZ0VBQWdFLE1BQU0sK0NBQStDLGFBQWEsU0FBUyxNQUFNLGNBQWMsWUFBWSxjQUFjLGtCQUFrQixnQkFBZ0IsK0JBQStCLGNBQWMsaUJBQWlCLGtCQUFrQixjQUFjLGlCQUFpQiwyQkFBMkIsa0JBQWtCLGtCQUFrQixtQ0FBbUMsa0JBQWtCLG1DQUFtQyxnQkFBZ0IsOEhBQThILHNCQUFzQixnRUFBZ0UsTUFBTSwrQ0FBK0MsdUNBQXVDLHlCQUF5Qix3QkFBd0IsNkVBQTZFLElBQUksRUFBRSxZQUFZLEdBQUcsZUFBZSxlQUFlLGdFQUFnRSxJQUFJLEtBQUssMEVBQTBFLEtBQUssTUFBTSxJQUFJLFVBQVUsdUNBQXVDLGtFQUFrRSxTQUFTLG9CQUFvQixzQkFBc0IsZUFBZSwyQkFBMkIsdUJBQXVCLEdBQUcsSUFBSSxvQkFBb0Isc0JBQXNCLDRFQUE0RSxNQUFNLEVBQUUsK0NBQStDLElBQUksd0JBQXdCLDhFQUE4RSw0Q0FBNEMsMkJBQTJCLHVCQUF1QixHQUFHLElBQUkscUJBQXFCLHFCQUFxQixjQUFjLFVBQVUsd0JBQXdCLGlCQUFpQixtQkFBbUIsOEJBQThCLG9CQUFvQix1QkFBdUIsbUNBQW1DLEVBQUUsa0JBQWtCLFVBQVUsYUFBYSxRQUFRLFNBQVMsa0JBQWtCLFVBQVUsYUFBYSxpQkFBaUIsU0FBUyxrQ0FBa0MsaUNBQWlDLGdDQUFnQyxhQUFhLDhDQUE4QyxFQUFFLGdDQUFnQyxrQ0FBa0Msb0JBQW9CLDhEQUE4RCx3QkFBd0IsOERBQThELEdBQUcsaUNBQWlDLHVCQUF1QixjQUFjLDhMQUE4TCw0QkFBNEIsc0RBQXNELE1BQU0sb0JBQW9CLGtEQUFrRCx1QkFBdUIsNkRBQTZELEdBQUcsNEJBQTRCLGNBQWMsd0NBQXdDLHFCQUFxQixjQUFjLGlCQUFpQiw4REFBOEQsbUJBQW1CLDJEQUEyRCxvQ0FBb0MsbUVBQW1FLDRCQUE0QiwyQkFBMkIsb0NBQW9DLG9CQUFvQixrREFBa0QsdUJBQXVCLG1DQUFtQyxHQUFHLHVCQUF1QixZQUFZLGNBQWMsaURBQWlELFFBQVEsSUFBSSxxRkFBcUYsUUFBUSxJQUFJLDhDQUE4Qyw4Q0FBOEMsMENBQTBDLHdEQUF3RCxLQUFLLHVDQUF1QyxJQUFJLGlDQUFpQyx1Q0FBdUMsNkJBQTZCLDJEQUEyRCxTQUFTLHdCQUF3QixxQ0FBcUMsd0JBQXdCLHFDQUFxQyxHQUFHLG1CQUFtQix1QkFBdUIsY0FBYyxrQkFBa0IscUNBQXFDLFVBQVUsOERBQThELEtBQUsscURBQXFELDhDQUE4QyxJQUFJLG9FQUFvRSxLQUFLLGdCQUFnQix5QkFBeUIscURBQXFELEVBQUUsOERBQThELHlCQUF5Qiw0QkFBNEIsRUFBRSxTQUFTLGNBQWMseURBQXlELE1BQU0sYUFBYSwwQ0FBMEMsT0FBTyxzQ0FBc0MsSUFBSSxpQ0FBaUMsdUNBQXVDLDZCQUE2QiwyQkFBMkIsTUFBTSxxRUFBcUUsbUJBQW1CLDJHQUEyRywwREFBMEQsU0FBUyx1QkFBdUIsY0FBYyxxQ0FBcUMsY0FBYyxxQkFBcUIsZ0NBQWdDLGtDQUFrQyxvQkFBb0IsOERBQThELHdCQUF3Qiw4REFBOEQsR0FBRyxzQkFBc0IsK0NBQStDLGNBQWMsNEVBQTRFLGNBQWMscURBQXFELGlNQUFpTSwyQkFBMkIsb0NBQW9DLG9CQUFvQixrREFBa0Qsb0JBQW9CLHFDQUFxQyx1QkFBdUIsMkVBQTJFLDRCQUE0Qiw2REFBNkQsNEJBQTRCLHVHQUF1RywwQkFBMEIsNkRBQTZELDRCQUE0Qiw2REFBNkQsNkJBQTZCLDZEQUE2RCwyQkFBMkIsNkRBQTZELEdBQUcscUNBQXFDLGlEQUFpRCxlQUFlLElBQUkseUJBQXlCLDJCQUEyQixXQUFXLFdBQVcseUNBQXlDLG1DQUFtQyxJQUFJLEVBQUUsY0FBYyxpQkFBaUIsNEJBQTRCLG1CQUFtQixZQUFZLGtCQUFrQixrQ0FBa0MsS0FBSyxrQkFBa0IsbUNBQW1DLHNCQUFzQix5RUFBeUUsMkJBQTJCLGlGQUFpRixTQUFTLEVBQUUsMERBQTBELEVBQUUsR0FBRyx1QkFBdUIsUUFBUSx1QkFBdUIsYUFBYSxzQkFBc0IsZ0JBQWdCLDhEQUE4RCxjQUFjLGlCQUFpQixtQkFBbUIsc0dBQXNHLDZCQUE2QixjQUFjLGVBQWUsbUJBQW1CLHVGQUF1Riw2QkFBNkIsY0FBYyxrQkFBa0IsVUFBVSxnQkFBZ0IsbUJBQW1CLGNBQWMsZ0JBQWdCLFVBQVUsc0VBQXNFLGNBQWMsaUNBQWlDLDJCQUEyQiwyREFBMkQsMEJBQTBCLHlCQUF5QixnQkFBZ0IsVUFBVSxnQ0FBZ0Msb0JBQW9CLFdBQVcsZ0JBQWdCLDBGQUEwRixtQkFBbUIsdURBQXVELG1CQUFtQixJQUFJLGNBQWMsbUJBQW1CLGdFQUFnRSxRQUFRLElBQUksc0RBQXNELG9EQUFvRCx5Q0FBeUMsa0JBQWtCLGdCQUFnQiw4RUFBOEUsUUFBUSxJQUFJLHNCQUFzQixLQUFLLElBQUksY0FBYyxtQkFBbUIsUUFBUSxJQUFJLGlCQUFpQixVQUFVLGdCQUFnQixlQUFlLDJCQUEyQiwyQkFBMkIsZ0JBQWdCLDJCQUEyQixjQUFjLGdCQUFnQixVQUFVLE1BQU0sNENBQTRDLHFDQUFxQyx1Q0FBdUMsbUJBQW1CLHdCQUF3QixVQUFVLCtFQUErRSxnQkFBZ0IscURBQXFELGdCQUFnQiw2QkFBNkIsc0hBQXNILGFBQWEsaUJBQWlCLG9GQUFvRixtQkFBbUIsZ0JBQWdCLHFCQUFxQixrQkFBa0IsVUFBVSw0QkFBNEIsY0FBYyxJQUFJLHlCQUF5QixrQkFBa0IsRUFBRSxnQkFBZ0IsaUJBQWlCLHVPQUF1Tyw2QkFBNkIsOERBQThELHdCQUF3QixVQUFVLGdKQUFnSiwyRkFBMkYsb0JBQW9CLGNBQWMsK0JBQStCLHFCQUFxQixjQUFjLDJDQUEyQyxpQkFBaUIseUNBQXlDLFFBQVEsZUFBZSxFQUFFLGVBQWUsRUFBRSx5Q0FBeUMsNEVBQTRFLGdEQUFnRCwyQ0FBMkMsaUNBQWlDLDBDQUEwQyxjQUFjLDBDQUEwQywrQkFBK0IsNENBQTRDLGlCQUFpQiw4Q0FBOEMsUUFBUSxlQUFlLEVBQUUsZUFBZSxFQUFFLHFEQUFxRCwrREFBK0QsMEJBQTBCLE1BQU0sc0JBQXNCLG9CQUFvQixvQkFBb0IsNlJBQTZSLHNDQUFzQyxpTUFBaU0sNENBQTRDLGNBQWMsOEJBQThCLGNBQWMscUJBQXFCLDBGQUEwRixtQkFBbUIsd0RBQXdELGtCQUFrQixjQUFjLHFCQUFxQiwwRkFBMEYsbUJBQW1CLHdEQUF3RCxrQkFBa0IsY0FBYyxxQkFBcUIsZ0JBQWdCLHNHQUFzRyxtQkFBbUIsbUVBQW1FLHdCQUF3QixJQUFJLGtCQUFrQiwySUFBMkksZUFBZSxtQkFBbUIscURBQXFELGdDQUFnQyxlQUFlLG1CQUFtQixXQUFXLGdDQUFnQyw4RUFBOEUsMkJBQTJCLDBCQUEwQiwrR0FBK0csd0VBQXdFLHVDQUF1Qyx1Q0FBdUMsS0FBSyxxSUFBcUksd0JBQXdCLGtGQUFrRiw4QkFBOEIsS0FBSyxrQ0FBa0MsMEJBQTBCLG1KQUFtSiwwRkFBMEYsbUJBQW1CLHVEQUF1RCwySEFBMkgscURBQXFELElBQUksb0JBQW9CLG1CQUFtQixpREFBaUQsa0JBQWtCLDBCQUEwQiwyQkFBMkIsSUFBSSxvQkFBb0IsU0FBUyx1Q0FBdUMsU0FBUyxFQUFFLDZFQUE2RSxPQUFPLEVBQUUsZUFBZSx1QkFBdUIsTUFBTSxtQkFBbUIsYUFBYSw2QkFBNkIsYUFBYSxtREFBbUQsYUFBYSxhQUFhLHlCQUF5QixtQ0FBbUMsOERBQThELHNCQUFzQixtRUFBbUUsc0JBQXNCLDRDQUE0QyxvQ0FBb0MsNERBQTRELHFDQUFxQyw0RUFBNEUsMkJBQTJCLHlCQUF5Qiw0REFBNEQsOENBQThDLDZEQUE2RCw2Q0FBNkMsNkhBQTZILHdJQUF3SSwrQ0FBK0MsTUFBTSwyQkFBMkIsVUFBVSx1RUFBdUUsOENBQThDLHFXQUFxVyx3QkFBd0IseUZBQXlGLHFCQUFxQixlQUFlLGdEQUFnRCxTQUFTLEVBQUUsMERBQTBELEVBQUUsR0FBRyx1QkFBdUIsTUFBTSxtQkFBbUIsYUFBYSxvQkFBb0IsK0JBQStCLG1DQUFtQyxPQUFPLGlDQUFpQyx5QkFBeUIsS0FBSyxTQUFTLCtGQUErRix5R0FBeUcsR0FBRyxpR0FBaUcsc0NBQXNDLHVCQUF1QiwwQkFBMEIscURBQXFELGNBQWMsWUFBWSxjQUFjLFlBQVksa0JBQWtCLHFEQUFxRCw2QkFBNkIsd0JBQXdCLGtGQUFrRixjQUFjLFdBQVcsWUFBWSxLQUFLLFNBQVMsV0FBVyxhQUFhLFNBQVMsOEJBQThCLGtCQUFrQixrRkFBa0YsZUFBZSxtQ0FBbUMsUUFBUSxxQ0FBcUMsRUFBRSxVQUFVLGFBQWEsSUFBSSx1Q0FBdUMseUNBQXlDLG9CQUFvQixTQUFTLG1CQUFtQixvREFBb0QsZ0NBQWdDLHNCQUFzQiwrRUFBK0UsUUFBUSxJQUFJLHFJQUFxSSw2RkFBNkYsSUFBSSwyQkFBMkIsWUFBWSx1QkFBdUIsd0NBQXdDLGdEQUFnRCx3REFBd0QsS0FBSyxxQ0FBcUMsMkJBQTJCLG1DQUFtQyxVQUFVLDBCQUEwQixpQ0FBaUMsTUFBTSxVQUFVLDBCQUEwQixpQ0FBaUMsTUFBTSxVQUFVLDBCQUEwQixpQ0FBaUMsTUFBTSxVQUFVLDBCQUEwQixpQ0FBaUMsOENBQThDLHdEQUF3RCxtQkFBbUIsU0FBUyw4QkFBOEIsZ0JBQWdCLGVBQWUsZ0JBQWdCLElBQUksc0JBQXNCLGdKQUFnSix3QkFBd0IsZ0ZBQWdGLDZFQUE2RSxVQUFVLGdGQUFnRix3QkFBd0IsOEtBQThLLEtBQUssNEVBQTRFLFFBQVEscUJBQXFCLGtDQUFrQyxTQUFTLHNCQUFzQiw4RUFBOEUscUZBQXFGLGtCQUFrQixrQkFBa0IsRUFBRSwwRkFBMEYsbUJBQW1CLDBDQUEwQyxLQUFLLFdBQVcsZ0NBQWdDLGlOQUFpTix5QkFBeUIsdUJBQXVCLElBQUksc0JBQXNCLFlBQVksbUJBQW1CLGtCQUFrQixtQkFBbUIsUUFBUSw4QkFBOEIsZ0JBQWdCLElBQUksZ0JBQWdCLElBQUkscUJBQXFCLGtDQUFrQyw0REFBNEQsVUFBVSx3REFBd0Qsd0JBQXdCLDRJQUE0SSxZQUFZLDBCQUEwQixnQkFBZ0IsOEVBQThFLFVBQVUsRUFBRSxhQUFhLGFBQWEsc0RBQXNELDRJQUE0SSxVQUFVLEtBQUssVUFBVSwrQkFBK0IsWUFBWSxpQkFBaUIsaURBQWlELGlCQUFpQixpREFBaUQsb0RBQW9ELFNBQVMsRUFBRSwwREFBMEQsRUFBRSxHQUFHLHVCQUF1QixRQUFRLDZCQUE2QixhQUFhLGNBQWMsc0JBQXNCLGdCQUFnQix3Q0FBd0MsY0FBYyxrQkFBa0IsVUFBVSw2Q0FBNkMsOEVBQThFLGdCQUFnQixhQUFhLHFHQUFxRyxnQkFBZ0IsNkNBQTZDLGdCQUFnQiw2Q0FBNkMsZ0JBQWdCLDhHQUE4RyxjQUFjLGVBQWUsY0FBYyxvQkFBb0IsY0FBYyxtQkFBbUIsY0FBYyxtQkFBbUIsY0FBYyxlQUFlLGNBQWMsZUFBZSxjQUFjLGVBQWUsZ0JBQWdCLGVBQWUscUNBQXFDLFNBQVMsZ0JBQWdCLFlBQVksbUJBQW1CLGdCQUFnQixZQUFZLDRCQUE0Qix5UUFBeVEsc0ZBQXNGLEdBQUcsOEJBQThCLDBLQUEwSyxFQUFFLGNBQWMsOERBQThELHNCQUFzQixnQkFBZ0IsUUFBUSxrQ0FBa0MsNEJBQTRCLEVBQUUsUUFBUSx5Q0FBeUMsNEJBQTRCLE1BQU0sY0FBYywrQkFBK0Isc0JBQXNCLG1CQUFtQixFQUFFLCtCQUErQiw2QkFBNkIsbUJBQW1CLGNBQWMsa0JBQWtCLHlDQUF5QyxZQUFZLDhEQUE4RCxLQUFLLFlBQVksSUFBSSwwRkFBMEYsMERBQTBELFVBQVUsK0NBQStDLElBQUksb0JBQW9CLGdDQUFnQyxtQkFBbUIsRUFBRSw0QkFBNEIsa0NBQWtDLEVBQUUsK0JBQStCLGdDQUFnQyxvQ0FBb0MsbUNBQW1DLG1DQUFtQyxlQUFlLDJ0Q0FBMnRDLEtBQUssd0VBQXdFLGlEQUFpRCxFQUFFLGlEQUFpRCxRQUFRLHdCQUF3Qiw2SkFBNkosaURBQWlELGlEQUFpRCwrRUFBK0UsK0pBQStKLDZyQkFBNnJCLCtjQUErYyxpQ0FBaUMsU0FBUyw4MkVBQTgyRSxTQUFTLElBQUksS0FBSyw0Q0FBNEMsbURBQW1ELHFCQUFxQix5QkFBeUIsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLHVFQUF1RSxnQkFBZ0IsaUJBQWlCLGdCQUFnQixpQkFBaUIsZ0JBQWdCLGlCQUFpQixnQkFBZ0IsaUJBQWlCLGNBQWMsdUNBQXVDLGNBQWMsK0JBQStCLGdCQUFnQiw4QkFBOEIsK0JBQStCLGdCQUFnQiw4QkFBOEIsK0JBQStCLG9CQUFvQiw0QkFBNEIsbURBQW1ELHdEQUF3RCxRQUFRLEtBQUssb0NBQW9DLGdCQUFnQiwwSkFBMEoseUdBQXlHLHVEQUF1RCx3RUFBd0UscUVBQXFFLHlFQUF5RSxxRUFBcUUsSUFBSSxHQUFHLEVBQUUsZ0JBQWdCLDBFQUEwRSxvQkFBb0Isd0ZBQXdGLFlBQVksb0NBQW9DLFlBQVksS0FBSyxvQkFBb0IsNEJBQTRCLG9EQUFvRCxpQ0FBaUMsNkJBQTZCLGFBQWEsMEJBQTBCLDZCQUE2QixxREFBcUQsNEJBQTRCLG9DQUFvQyxhQUFhLGNBQWMsc0RBQXNELCtlQUErZSxFQUFFLFdBQVcsc0JBQXNCLDRCQUE0QiwwQkFBMEIsaUNBQWlDLGtCQUFrQixJQUFJLGtCQUFrQix1QkFBdUIsRUFBRSxFQUFFLGtCQUFrQiw0QkFBNEIsaUNBQWlDLDZCQUE2QixhQUFhLDBCQUEwQiw2QkFBNkIscURBQXFELDRCQUE0QixvQ0FBb0MsYUFBYSxjQUFjLHNEQUFzRCwrZUFBK2UsRUFBRSxXQUFXLHNCQUFzQiw0QkFBNEIsMEJBQTBCLGlDQUFpQyxrQkFBa0IsSUFBSSxrQkFBa0IsdUJBQXVCLEVBQUUsRUFBRSxnQkFBZ0Isa0JBQWtCLGNBQWMsK0JBQStCLGdCQUFnQixvQ0FBb0MsNEJBQTRCLDZEQUE2RCxhQUFhLE9BQU8sNkRBQTZELGFBQWEsOEJBQThCLDRDQUE0QyxFQUFFLHVCQUF1Qiw4QkFBOEIsVUFBVSwwQkFBMEIsOExBQThMLEVBQUUsb0JBQW9CLFFBQVEsYUFBYSxpQkFBaUIsaUJBQWlCLEtBQUssbURBQW1ELG1FQUFtRSxXQUFXLHFCQUFxQix5QkFBeUIsRUFBRSxTQUFTLFFBQVEsV0FBVyxLQUFLLHdCQUF3QixhQUFhLDJCQUEyQiw0QkFBNEIsS0FBSyxNQUFNLE9BQU8sa0JBQWtCLGtCQUFrQiw0QkFBNEIsc0NBQXNDLDJFQUEyRSxFQUFFLGlDQUFpQyw4RUFBOEUsRUFBRSxvQkFBb0IsNEJBQTRCLG1IQUFtSCxxRUFBcUUsb0NBQW9DLHFFQUFxRSxFQUFFLEVBQUUsZ0JBQWdCLFVBQVUsdUJBQXVCLFNBQVMsbUNBQW1DLDRDQUE0QyxxREFBcUQsRUFBRSxFQUFFLHVCQUF1QixTQUFTLG1DQUFtQyw2Q0FBNkMscURBQXFELEVBQUUsRUFBRSw0QkFBNEIsc0NBQXNDLEVBQUUsMkJBQTJCLCtCQUErQixnQkFBZ0IseURBQXlELGdCQUFnQixFQUFFLGFBQWEsTUFBTSxVQUFVLHNCQUFzQix1QkFBdUIsVUFBVSxNQUFNLDBCQUEwQixzQ0FBc0MsRUFBRSxpQ0FBaUMsa0JBQWtCLEVBQUUsa0JBQWtCLGdEQUFnRCxnQkFBZ0IsRUFBRSxtQ0FBbUMsZ0lBQWdJLEdBQUcsK0VBQStFLG9CQUFvQixnQ0FBZ0MsZ0JBQWdCLGdFQUFnRSxvRkFBb0Ysd0NBQXdDLElBQUksTUFBTSxpQ0FBaUMsa0JBQWtCLHdCQUF3QixlQUFlLHdCQUF3Qiw0WEFBNFgsRUFBRSxFQUFFLFNBQVMsZ0JBQWdCLElBQUksb0JBQW9CLGdCQUFnQixlQUFlLHNCQUFzQiw0QkFBNEIsc0JBQXNCLE1BQU0sMEVBQTBFLHlEQUF5RCwyREFBMkQsS0FBSyx1RkFBdUYsaUJBQWlCLEVBQUUsRUFBRSxhQUFhLHNCQUFzQix5QkFBeUIsa0JBQWtCLElBQUksb0RBQW9ELDJDQUEyQyxLQUFLLG9EQUFvRCxHQUFHLGFBQWEsWUFBWSxJQUFJLG1EQUFtRCx1QkFBdUIsa0NBQWtDLHlCQUF5QixvRUFBb0UsY0FBYywwQkFBMEIsWUFBWSx3QkFBd0IsWUFBWSxvQkFBb0Isc0JBQXNCLG9CQUFvQiw0QkFBNEIsd0JBQXdCLGtEQUFrRCxHQUFHLHFCQUFxQixjQUFjLDRCQUE0Qiw0Q0FBNEMsOEJBQThCLDBCQUEwQixrQ0FBa0MsdUVBQXVFLG9DQUFvQyx1RUFBdUUsRUFBRSxFQUFFLDRCQUE0Qiw0REFBNEQseUJBQXlCLDREQUE0RCx5QkFBeUIsbUNBQW1DLDJCQUEyQixtQ0FBbUMscUJBQXFCLDREQUE0RCxxQkFBcUIsNERBQTRELG9CQUFvQiw0REFBNEQsc0JBQXNCLHNGQUFzRiwwQkFBMEIsbUNBQW1DLCtCQUErQixtQ0FBbUMsZ0NBQWdDLG1DQUFtQyx5QkFBeUIsa0NBQWtDLHNCQUFzQiwrQ0FBK0Msc0pBQXNKLG9DQUFvQyxHQUFHLDRCQUE0QixvRkFBb0YsMEJBQTBCLGVBQWUsNkJBQTZCLG9CQUFvQix5REFBeUQsU0FBUyxFQUFFLHNKQUFzSixzQkFBc0IsRUFBRSwyRkFBMkYsdUJBQXVCLFFBQVEsdUJBQXVCLGFBQWEsY0FBYyxrQkFBa0IsVUFBVSxrSEFBa0gsY0FBYyxvQ0FBb0MsY0FBYyxxQkFBcUIsY0FBYyxxQkFBcUIsY0FBYyxvQkFBb0IsY0FBYyxrQkFBa0IsY0FBYyxxQkFBcUIsMEJBQTBCLHNQQUFzUCxtQ0FBbUMscURBQXFELGNBQWMsZ0JBQWdCLGNBQWMsZ0JBQWdCLGNBQWMsWUFBWSxjQUFjLFlBQVksYUFBYSxzQ0FBc0MsY0FBYywwQkFBMEIsbUNBQW1DLEtBQUssa0dBQWtHLDhCQUE4Qix1QkFBdUIsNkRBQTZELGlCQUFpQiw2REFBNkQsdUJBQXVCLDhEQUE4RCxxQkFBcUIsb0RBQW9ELHVCQUF1Qix3REFBd0QsR0FBRyxhQUFhLG9EQUFvRCxjQUFjLDREQUE0RCxtQ0FBbUMsS0FBSyxLQUFLLHFFQUFxRSxLQUFLLG9DQUFvQyxLQUFLLHVCQUF1Qix3QkFBd0IsOEVBQThFLDhCQUE4QixhQUFhLDBDQUEwQyx1QkFBdUIsb0VBQW9FLGtCQUFrQiw2REFBNkQsa0JBQWtCLDBFQUEwRSxpQkFBaUIsb0VBQW9FLGtCQUFrQiw2REFBNkQsa0JBQWtCLDBFQUEwRSw4QkFBOEIscUJBQXFCLHFCQUFxQixxQkFBcUIscUJBQXFCLHFCQUFxQix1QkFBdUIsOERBQThELHFCQUFxQixvREFBb0QsdUJBQXVCLHdEQUF3RCxHQUFHLGdCQUFnQiwrQkFBK0IsY0FBYyxTQUFTLGFBQWEscUJBQXFCLGFBQWEsb0JBQW9CLGVBQWUsc0JBQXNCLGNBQWMsb0JBQW9CLGlHQUFpRyxxQkFBcUIsOEJBQThCLG9GQUFvRixNQUFNLHFCQUFxQixxQ0FBcUMsV0FBVyxjQUFjLGNBQWMsY0FBYyxjQUFjLG1CQUFtQixvQkFBb0IsY0FBYyxjQUFjLDBFQUEwRSwyQ0FBMkMsR0FBRyxhQUFhLHVCQUF1QixhQUFhLHlFQUF5RSwwTUFBME0sY0FBYywyQ0FBMkMsY0FBYyw4Q0FBOEMsY0FBYyw4Q0FBOEMsY0FBYyxxQ0FBcUMsMkNBQTJDLEdBQUcsZ0JBQWdCLG9EQUFvRCxhQUFhLHFCQUFxQix3QkFBd0Isb0JBQW9CLHNCQUFzQixzQkFBc0Isd0JBQXdCLG9CQUFvQixzQkFBc0IscUJBQXFCLGtEQUFrRCw0QkFBNEIsY0FBYyxnQkFBZ0IsY0FBYyxnQkFBZ0IsY0FBYywyQkFBMkIsYUFBYSw4REFBOEQsMklBQTJJLDRCQUE0QixrQ0FBa0Msc0JBQXNCLGtDQUFrQyxpQkFBaUIsNkRBQTZELGlCQUFpQiw2REFBNkQsdUJBQXVCLCtDQUErQyxHQUFHLHNCQUFzQixtREFBbUQsc0JBQXNCLG1EQUFtRCxzQkFBc0IsZ0RBQWdELG1FQUFtRSxPQUFPLG1CQUFtQixxQkFBcUIsZ0NBQWdDLElBQUksbUJBQW1CLHVCQUF1QixtTkFBbU4sMkJBQTJCLG1CQUFtQiwyQkFBMkIseUVBQXlFLDZFQUE2RSxtQkFBbUIsaURBQWlELDZCQUE2QixZQUFZLElBQUksS0FBSyx3Q0FBd0MsNkNBQTZDLGVBQWUsSUFBSSxtQkFBbUIsMEJBQTBCLGlCQUFpQixvQkFBb0IsbUJBQW1CLDBCQUEwQixrRUFBa0UsK0RBQStELG1CQUFtQix5REFBeUQsNk9BQTZPLHNCQUFzQixlQUFlLG1CQUFtQiwwSUFBMEksZUFBZSxnQkFBZ0IsZUFBZSxnQkFBZ0IsZUFBZSxnQkFBZ0IsaUJBQWlCLG1DQUFtQyxjQUFjLHFCQUFxQixhQUFhLG9CQUFvQixlQUFlLHNCQUFzQixzREFBc0Qsb0JBQW9CLG9CQUFvQixrQ0FBa0MsK0NBQStDLGlHQUFpRyxxQkFBcUIsOEJBQThCLG9GQUFvRixNQUFNLHFCQUFxQixNQUFNLDJGQUEyRixxQkFBcUIsMkRBQTJELGVBQWUsNkNBQTZDLDRHQUE0RyxvQkFBb0Isb0JBQW9CLHlFQUF5RSxNQUFNLDZLQUE2SyxNQUFNLGtHQUFrRyxxQkFBcUIsOEJBQThCLDJDQUEyQyxNQUFNLDJDQUEyQyxNQUFNLHFIQUFxSCxNQUFNLHFCQUFxQiwyREFBMkQsZUFBZSxxQkFBcUIsYUFBYSxvQkFBb0IsZUFBZSxzQkFBc0Isc0RBQXNELG9CQUFvQixpR0FBaUcscUJBQXFCLDhCQUE4QixxQkFBcUIsTUFBTSxxQkFBcUIsTUFBTSxxQkFBcUIsNERBQTRELCtEQUErRCxNQUFNLHFCQUFxQixxQkFBcUIsMkRBQTJELGVBQWUscUJBQXFCLDhDQUE4QyxvQkFBb0IscUNBQXFDLHNEQUFzRCxPQUFPLHdHQUF3RywyQ0FBMkMscUJBQXFCLG9DQUFvQyxxQkFBcUIsY0FBYyxtQ0FBbUMsMEJBQTBCLGFBQWEsR0FBRyxNQUFNLG1CQUFtQixrSUFBa0ksaUJBQWlCLGdDQUFnQyxjQUFjLHFCQUFxQixhQUFhLG9CQUFvQixlQUFlLHNCQUFzQix3RUFBd0Usb0JBQW9CLG9CQUFvQiwrQ0FBK0MsTUFBTSxrQ0FBa0MsaUdBQWlHLHFCQUFxQiw4QkFBOEIsb0ZBQW9GLE1BQU0sMkNBQTJDLE1BQU0scUJBQXFCLHFCQUFxQixnR0FBZ0cscUJBQXFCLGNBQWMsbUJBQW1CLDZCQUE2QixhQUFhLEdBQUcsSUFBSSxpQkFBaUIsZ0NBQWdDLGNBQWMsNkNBQTZDLDhIQUE4SCxvQkFBb0Isb0JBQW9CLHlFQUF5RSxNQUFNLHlFQUF5RSxNQUFNLGtHQUFrRyxxQkFBcUIsOEJBQThCLDJDQUEyQyxNQUFNLGlFQUFpRSxNQUFNLDJDQUEyQyxNQUFNLHFCQUFxQixnR0FBZ0cscUJBQXFCLGNBQWMsbUJBQW1CLDZCQUE2QixhQUFhLEdBQUcsSUFBSSxpQkFBaUIsZ0NBQWdDLGNBQWMscUJBQXFCLGFBQWEsb0JBQW9CLGVBQWUsc0JBQXNCLHdFQUF3RSxvQkFBb0IsaUdBQWlHLHFCQUFxQiw4QkFBOEIscUJBQXFCLE1BQU0scUJBQXFCLE1BQU0sZ0hBQWdILE1BQU0scUJBQXFCLHFCQUFxQixnR0FBZ0cscUJBQXFCLGNBQWMsbUJBQW1CLDZCQUE2QixhQUFhLEdBQUcsSUFBSSxtQkFBbUIsb0NBQW9DLGVBQWUsaUZBQWlGLG9GQUFvRixlQUFlLGlGQUFpRiw0RUFBNEUsOENBQThDLGlCQUFpQiw4QkFBOEIsY0FBYyxxQkFBcUIsYUFBYSxvQkFBb0IsZUFBZSxzQkFBc0IsbUpBQW1KLG9CQUFvQixvQkFBb0IsK0NBQStDLE1BQU0scUNBQXFDLGlHQUFpRyxxQkFBcUIsMEJBQTBCLDhCQUE4QixrRUFBa0Usb0JBQW9CLG9GQUFvRixNQUFNLHFCQUFxQixNQUFNLHFCQUFxQixxQkFBcUIsb01BQW9NLHFCQUFxQixjQUFjLGlDQUFpQywyQkFBMkIsYUFBYSxHQUFHLEtBQUssaUJBQWlCLDhCQUE4QixjQUFjLDZDQUE2Qyx5TUFBeU0sb0JBQW9CLG9CQUFvQix5RUFBeUUsTUFBTSx5RUFBeUUsTUFBTSxrR0FBa0cscUJBQXFCLDBCQUEwQiw4QkFBOEIsa0VBQWtFLG9CQUFvQiwyQ0FBMkMsTUFBTSxpRUFBaUUsTUFBTSwyQ0FBMkMsTUFBTSxxQkFBcUIsb01BQW9NLHFCQUFxQixjQUFjLGlDQUFpQywyQkFBMkIsYUFBYSxHQUFHLEtBQUssaUJBQWlCLDhCQUE4QixjQUFjLHFCQUFxQixhQUFhLG9CQUFvQixlQUFlLHNCQUFzQixtSkFBbUosb0JBQW9CLGlHQUFpRyxxQkFBcUIsMEJBQTBCLDhCQUE4QixrRUFBa0Usb0JBQW9CLHFCQUFxQixNQUFNLHFCQUFxQixNQUFNLGdIQUFnSCxNQUFNLHFCQUFxQixxQkFBcUIsb01BQW9NLHFCQUFxQixjQUFjLGlDQUFpQywyQkFBMkIsYUFBYSxHQUFHLEtBQUssZUFBZSxnQkFBZ0IsZUFBZSxnQkFBZ0IsbUJBQW1CLG9HQUFvRyx3RUFBd0UsaUJBQWlCLGtCQUFrQixtQ0FBbUMsbUJBQW1CLDhDQUE4QyxrREFBa0QsZUFBZSxnQkFBZ0IsZUFBZSx3QkFBd0IsZUFBZSxnQkFBZ0IsZUFBZSxnQkFBZ0IsZUFBZSxrRUFBa0UsdUNBQXVDLE1BQU0sdUNBQXVDLCtDQUErQyxJQUFJLHlDQUF5QywrQkFBK0IsS0FBSyw0QkFBNEIsK0JBQStCLE1BQU0seUJBQXlCLFlBQVksaUJBQWlCLDBCQUEwQixpQkFBaUIseURBQXlELElBQUksMEJBQTBCLElBQUksb0RBQW9ELGVBQWUsa0NBQWtDLE9BQU8sUUFBUSxTQUFTLGlCQUFpQixZQUFZLGVBQWUsZ0JBQWdCLGdDQUFnQyxpQkFBaUIsRUFBRSxlQUFlLHFDQUFxQyxNQUFNLDJCQUEyQixTQUFTLGVBQWUsZ0JBQWdCLGdDQUFnQyxpQkFBaUIsRUFBRSxlQUFlLDhCQUE4QixNQUFNLHNCQUFzQixTQUFTLGNBQWMsNkNBQTZDLGNBQWMsb0JBQW9CLHVDQUF1QyxxQkFBcUIsMkZBQTJGLGVBQWUscUJBQXFCLGFBQWEsb0JBQW9CLGVBQWUsc0JBQXNCLCtEQUErRCxvQkFBb0Isb0JBQW9CLCtDQUErQyxNQUFNLDJDQUEyQyxpR0FBaUcscUJBQXFCLFVBQVUseUNBQXlDLG9CQUFvQixvRkFBb0YsTUFBTSxxQkFBcUIsTUFBTSx3REFBd0QsTUFBTSx5Q0FBeUMsdUVBQXVFLGdFQUFnRSxrQ0FBa0MsZUFBZSxxQkFBcUIsMEJBQTBCLHNCQUFzQiwwQkFBMEIsc0JBQXNCLDBCQUEwQixxQ0FBcUMsMENBQTBDLGVBQWUscUJBQXFCLGFBQWEsb0JBQW9CLGVBQWUsc0JBQXNCLHNCQUFzQixvQkFBb0IsbUNBQW1DLHlIQUF5SCxxQ0FBcUMsSUFBSSwrRUFBK0UsNEdBQTRHLHFCQUFxQixtQ0FBbUMsZUFBZSxxQkFBcUIsYUFBYSxvQkFBb0IsZUFBZSxzQkFBc0Isa0NBQWtDLG9CQUFvQixpTkFBaU4scUJBQXFCLDhCQUE4QixvRkFBb0YsTUFBTSxxQkFBcUIsZ0ZBQWdGLEtBQUssb0NBQW9DLDJEQUEyRCxxQkFBcUIsa0JBQWtCLDZDQUE2QyxhQUFhLHVJQUF1SSxtSkFBbUosS0FBSywwSkFBMEosUUFBUSxnQ0FBZ0Msa0dBQWtHLHdDQUF3QyxRQUFRLDBDQUEwQyxxQ0FBcUMsc0NBQXNDLHNEQUFzRCxvQkFBb0IsNEpBQTRKLDJDQUEyQyxpc0JBQWlzQixtQkFBbUIsNENBQTRDLDZCQUE2QiwwSEFBMEgsc0JBQXNCLDJCQUEyQiw2REFBNkQsMkJBQTJCLDZEQUE2RCw0QkFBNEIsNkRBQTZELHlCQUF5QiwwRUFBMEUsMEJBQTBCLDZEQUE2RCx3QkFBd0IsNkRBQTZELHdCQUF3Qiw2REFBNkQsdUJBQXVCLCtDQUErQyxHQUFHLG9DQUFvQyx3Q0FBd0MsY0FBYyw0TUFBNE0sUUFBUSxJQUFJLHlDQUF5QyxpQ0FBaUMsb0JBQW9CLGdDQUFnQyxvQkFBb0Isc0JBQXNCLElBQUksOENBQThDLDhEQUE4RCxTQUFTLDJCQUEyQiw2REFBNkQsMEJBQTBCLHlDQUF5QyxvQkFBb0IseUNBQXlDLDBCQUEwQiw2REFBNkQsd0JBQXdCLDZEQUE2RCx3QkFBd0IsNkRBQTZELEdBQUcseUdBQXlHLFlBQVksMkJBQTJCLFlBQVkseUJBQXlCLFdBQVcsd0RBQXdELHFCQUFxQiwwQkFBMEIsYUFBYSxNQUFNLHlHQUF5RywwQkFBMEIsNERBQTRELG9CQUFvQiw2REFBNkQsdUJBQXVCLCtDQUErQyxHQUFHLG1LQUFtSyxpQkFBaUIsOEJBQThCLGlCQUFpQiwwQkFBMEIsaUJBQWlCLDhMQUE4TCxpQkFBaUIsOENBQThDLGlCQUFpQiw4QkFBOEIsaUJBQWlCLDRCQUE0QixpQkFBaUIseUJBQXlCLG9CQUFvQiw4QkFBOEIsbUJBQW1CLCtCQUErQixtQkFBbUIsb0JBQW9CLDJCQUEyQixjQUFjLHVFQUF1RSxRQUFRLElBQUksS0FBSyx5Q0FBeUMsSUFBSSwwQ0FBMEMsUUFBUSxlQUFlLElBQUksb0JBQW9CLGdCQUFnQiwwQkFBMEIsb0VBQW9FLHFCQUFxQiw2REFBNkQscUJBQXFCLCtFQUErRSxzQkFBc0IsNkNBQTZDLEdBQUcsbUNBQW1DLG1CQUFtQixnQ0FBZ0MsSUFBSSxLQUFLLFVBQVUsSUFBSSxxQkFBcUIsYUFBYSxJQUFJLGtCQUFrQixTQUFTLHNDQUFzQywyREFBMkQsSUFBSSxrQkFBa0IsSUFBSSxtRkFBbUYsNERBQTRELG1CQUFtQixtQ0FBbUMsSUFBSSxLQUFLLGdCQUFnQixJQUFJLHFCQUFxQixzQkFBc0IsU0FBUyxtQ0FBbUMsNkNBQTZDLHNCQUFzQixJQUFJLEtBQUssb0JBQW9CLElBQUksS0FBSywwREFBMEQsSUFBSSxLQUFLLGNBQWMsK0JBQStCLFlBQVksbUNBQW1DLGdDQUFnQyx1RkFBdUYsdUJBQXVCLG1DQUFtQyx5REFBeUQsUUFBUSxJQUFJLHVEQUF1RCw2QkFBNkIscURBQXFELHVCQUF1Qix1Q0FBdUMsU0FBUyxFQUFFLDRFQUE0RSxPQUFPLEVBQUUsY0FBYyx1QkFBdUIsTUFBTSxtQkFBbUIsYUFBYSxxTkFBcU4sa0JBQWtCLGFBQWEsNkJBQTZCLGFBQWEsSUFBSSxhQUFhLHNDQUFzQyxrQkFBa0IsWUFBWSwwQkFBMEIsYUFBYSxRQUFRLGNBQWMsRUFBRSxrREFBa0QsSUFBSSxhQUFhLHNCQUFzQixJQUFJLElBQUksUUFBUSxlQUFlLGtCQUFrQixLQUFLLEVBQUUsMkZBQTJGLFNBQVMsUUFBUSxhQUFhLG9CQUFvQixnQkFBZ0IsY0FBYywrSUFBK0kseUJBQXlCLHNDQUFzQywwRUFBMEUscUhBQXFILGlCQUFpQixtREFBbUQsMkRBQTJELFlBQVksNENBQTRDLGdCQUFnQixRQUFRLDRCQUE0QixnQkFBZ0IsbUZBQW1GLDhCQUE4QixTQUFTLHVDQUF1QyxTQUFTLEVBQUUsMERBQTBELEVBQUUsR0FBRyx1QkFBdUIsWUFBWSxPQUFPLGlCQUFpQiwwQkFBMEIsaUJBQWlCLGlCQUFpQixjQUFjLDJEQUEyRCxjQUFjLHVGQUF1RixTQUFTLDRDQUE0QyxTQUFTLGNBQWMsa0NBQWtDLElBQUksV0FBVyxVQUFVLGtDQUFrQyxnQkFBZ0IsUUFBUSx5REFBeUQsU0FBUyxzSEFBc0gsNkJBQTZCLG9CQUFvQixrQ0FBa0Msc0JBQXNCLCtCQUErQix1QkFBdUIsZ0JBQWdCLCtCQUErQixjQUFjLHVCQUF1QixjQUFjLGdCQUFnQixjQUFjLE9BQU8sdUJBQXVCLCtEQUErRCxJQUFJLEVBQUUsY0FBYyxzQkFBc0IsU0FBUyx5QkFBeUIsK0RBQStELElBQUksRUFBRSxjQUFjLHNCQUFzQixXQUFXLHlDQUF5QywrQkFBK0IscUJBQXFCLHdCQUF3Qix5QkFBeUIsS0FBSyxNQUFNLDBCQUEwQixJQUFJLE1BQU0sS0FBSyxNQUFNLDRCQUE0QixLQUFLLEtBQUssTUFBTSxzQ0FBc0MsSUFBSSxNQUFNLEtBQUssTUFBTSx3Q0FBd0MsU0FBUyxxQkFBcUIsd0JBQXdCLHlCQUF5QixLQUFLLE1BQU0sMEJBQTBCLElBQUksTUFBTSxLQUFLLE1BQU0sNEJBQTRCLEtBQUssS0FBSyxNQUFNLHNDQUFzQyxJQUFJLE1BQU0sS0FBSyxNQUFNLHdDQUF3QyxTQUFTLHdCQUF3QiwwQkFBMEIseUJBQXlCLEtBQUssTUFBTSwwQkFBMEIsTUFBTSxNQUFNLEtBQUssTUFBTSx5Q0FBeUMsS0FBSyxLQUFLLE1BQU0sc0NBQXNDLE1BQU0sTUFBTSxLQUFLLE1BQU0scURBQXFELFlBQVkscUJBQXFCLDBCQUEwQiw2QkFBNkIsTUFBTSxvQkFBb0IsVUFBVSxNQUFNLGdDQUFnQyxTQUFTLHNCQUFzQiw4QkFBOEIsNkJBQTZCLE1BQU0sdUJBQXVCLFVBQVUsTUFBTSxtQ0FBbUMsZ0JBQWdCLDBCQUEwQix1REFBdUQsd0JBQXdCLHdCQUF3QiwyQkFBMkIsNkJBQTZCLE1BQU0seUJBQXlCLFVBQVUsTUFBTSxxQ0FBcUMsNENBQTRDLDBCQUEwQixvQ0FBb0MsNkJBQTZCLE1BQU0sMkNBQTJDLFVBQVUsTUFBTSx1REFBdUQsc0JBQXNCLHdCQUF3Qix1Q0FBdUMseUJBQXlCLFdBQVcsY0FBYyxnQkFBZ0IsMEVBQTBFLG9DQUFvQyxpQkFBaUIsSUFBSSwyQkFBMkIsZ0RBQWdELGtCQUFrQixFQUFFLHVEQUF1RCxTQUFTLHlCQUF5QixrQ0FBa0MsSUFBSSxjQUFjLFNBQVMscUJBQXFCLHFEQUFxRCxJQUFJLG1CQUFtQixTQUFTLHlCQUF5QiwwQkFBMEIseUNBQXlDLE1BQU0sb0NBQW9DLE1BQU0sY0FBYyxTQUFTLGtCQUFrQiw4QkFBOEIsb0JBQW9CLFNBQVMseUJBQXlCLFNBQVMsc0JBQXNCLFNBQVMsNEJBQTRCLFNBQVMsdUJBQXVCLFNBQVMsdUJBQXVCLGlCQUFpQixFQUFFLFNBQVMscUJBQXFCLGtDQUFrQyxNQUFNLGdCQUFnQixtQkFBbUIsT0FBTyx1QkFBdUIsT0FBTyxhQUFhLFVBQVUsZUFBZSxnQkFBZ0Isb0RBQW9ELHlCQUF5QixFQUFFLGFBQWEsMkJBQTJCLHdCQUF3QiwwR0FBMEcseUJBQXlCLFFBQVEsS0FBSyxNQUFNLE9BQU8sU0FBUyxZQUFZLDJCQUEyQixjQUFjLGFBQWEsVUFBVSxjQUFjLGFBQWEsU0FBUyxxQkFBcUIsWUFBWSwwQ0FBMEMsV0FBVyxFQUFFLDBCQUEwQixzQkFBc0IsNkJBQTZCLE1BQU0sZUFBZSxVQUFVLE1BQU0sNkJBQTZCLGtDQUFrQyxVQUFVLHlCQUF5QixjQUFjLGtDQUFrQyxjQUFjLGtDQUFrQyxjQUFjLHFCQUFxQixjQUFjLDBDQUEwQyxhQUFhLFNBQVMsaUNBQWlDLFNBQVMsYUFBYSxRQUFRLHdCQUF3QixTQUFTLGFBQWEsNkJBQTZCLFNBQVMsYUFBYSwyQkFBMkIsY0FBYyxTQUFTLGtCQUFrQixrQkFBa0IsMkJBQTJCLGtCQUFrQixnQkFBZ0IsbUJBQW1CLHVDQUF1Qyx1QkFBdUIsSUFBSSxLQUFLLGFBQWEsb0JBQW9CLEtBQUssc0JBQXNCLG9CQUFvQixtQkFBbUIsc0JBQXNCLG1DQUFtQyxTQUFTLHNDQUFzQyxTQUFTLG9CQUFvQixTQUFTLDRCQUE0Qix5QkFBeUIsRUFBRSxTQUFTLG9DQUFvQyxpREFBaUQsb0JBQW9CLFlBQVksV0FBVyxrQkFBa0Isa0RBQWtELGlEQUFpRCxNQUFNLCtDQUErQyxnQ0FBZ0Msa0JBQWtCLE9BQU8saUJBQWlCLGNBQWMsaUJBQWlCLDJCQUEyQixnQkFBZ0IsdUJBQXVCLHVCQUF1Qix3QkFBd0Isa0JBQWtCLCtCQUErQixRQUFRLG9CQUFvQixFQUFFLHlCQUF5QixzQkFBc0IsSUFBSSxpQkFBaUIsbUJBQW1CLG1CQUFtQix3QkFBd0IseUJBQXlCLDBCQUEwQixhQUFhLHNCQUFzQixhQUFhLEdBQUcsbUJBQW1CLFlBQVksNEJBQTRCLElBQUksZ0JBQWdCLFNBQVMsTUFBTSxzQkFBc0IsNkJBQTZCLHNEQUFzRCx1Q0FBdUMsZUFBZSx3QkFBd0IsaUNBQWlDLE1BQU0sK0JBQStCLFVBQVUsMENBQTBDLGNBQWMsY0FBYyxjQUFjLGlCQUFpQixhQUFhLDhCQUE4QixNQUFNLHNDQUFzQyxTQUFTLDBCQUEwQixpQkFBaUIsa0lBQWtJLEtBQUssTUFBTSxHQUFHLGFBQWEseUJBQXlCLGFBQWEsb0JBQW9CLGdCQUFnQixLQUFLLFNBQVMsY0FBYyx1Q0FBdUMsTUFBTSxzQkFBc0IsMEJBQTBCLG1CQUFtQixJQUFJLDRCQUE0QiwwQ0FBMEMsUUFBUSxZQUFZLEdBQUcsc0JBQXNCLHdDQUF3QyxNQUFNLHNCQUFzQixTQUFTLDhCQUE4QiwwQkFBMEIsbUdBQW1HLHlCQUF5QixvRUFBb0UsYUFBYSxvQ0FBb0MsNEJBQTRCLGtDQUFrQyxFQUFFLFFBQVEseUJBQXlCLGNBQWMsZUFBZSwwQkFBMEIsY0FBYyxnQkFBZ0Isb0JBQW9CLDBCQUEwQixpQkFBaUIsNkJBQTZCLGlCQUFpQiwyQ0FBMkMsdUJBQXVCLG1CQUFtQixRQUFRLDRDQUE0Qyw0QkFBNEIsMkRBQTJELG9DQUFvQywrQkFBK0IsY0FBYyx3Q0FBd0Msa0JBQWtCLGNBQWMsd0NBQXdDLGtCQUFrQixxQkFBcUIsaUJBQWlCLE9BQU8sMkJBQTJCLE1BQU0sRUFBRSxpREFBaUQsd0JBQXdCLE1BQU0sdUdBQXVHLFlBQVkseUJBQXlCLGFBQWEsT0FBTywyQkFBMkIsTUFBTSxtQ0FBbUMsTUFBTSxrRUFBa0UsYUFBYSx3Q0FBd0MsZ0tBQWdLLGdCQUFnQixvREFBb0Qsd0NBQXdDLFlBQVksd0JBQXdCLHlDQUF5Qyw4QkFBOEIsdUZBQXVGLFlBQVksOEJBQThCLHVEQUF1RCxvQkFBb0IsdUNBQXVDLFlBQVksd0JBQXdCLGNBQWMsb0NBQW9DLGVBQWUsOERBQThELGVBQWUsbUNBQW1DLGlCQUFpQiwrQkFBK0Isc0NBQXNDLHVDQUF1QyxNQUFNLGNBQWMsWUFBWSxhQUFhLE1BQU0sZUFBZSxlQUFlLFlBQVkscUJBQXFCLCtDQUErQyxrQ0FBa0MsNkdBQTZHLG1CQUFtQiwwQkFBMEIsNkJBQTZCLGlDQUFpQyw4QkFBOEIsbUVBQW1FLFlBQVksK0JBQStCLGlCQUFpQiwwQkFBMEIsZUFBZSxpQ0FBaUMsOEJBQThCLGlDQUFpQyxZQUFZLFdBQVcsZUFBZSxrRUFBa0UsMkRBQTJELFlBQVksNkNBQTZDLDRGQUE0RixjQUFjLHNCQUFzQix1QkFBdUIsZUFBZSxPQUFPLFlBQVksZUFBZSxrQkFBa0Isa0JBQWtCLGlCQUFpQix1QkFBdUIsSUFBSSxvQ0FBb0MsSUFBSSx1QkFBdUIsU0FBUyxlQUFlLGlCQUFpQixNQUFNLDZCQUE2Qix5QkFBeUIsK0VBQStFLG1CQUFtQixJQUFJLHNCQUFzQix1QkFBdUIsdUJBQXVCLGtCQUFrQixvRkFBb0YsZ0NBQWdDLFlBQVkseUJBQXlCLHlCQUF5Qix1QkFBdUIsdUJBQXVCLDBDQUEwQyxrQkFBa0IsS0FBSyxNQUFNLCtCQUErQixtQ0FBbUMsTUFBTSwrQkFBK0IsU0FBUyxpQ0FBaUMsWUFBWSwwQkFBMEIseUJBQXlCLHVCQUF1QixRQUFRLHVCQUF1QiwrQ0FBK0MsWUFBWSxRQUFRLGtCQUFrQix5REFBeUQsS0FBSyw0QkFBNEIsMEJBQTBCLHVCQUF1Qiw0Q0FBNEMsaUNBQWlDLFlBQVksMEJBQTBCLG9CQUFvQixrRUFBa0UsOEJBQThCLDhCQUE4QixvQkFBb0Isb0JBQW9CLFlBQVksbUJBQW1CLDBCQUEwQixvQkFBb0Isa0VBQWtFLDhCQUE4Qiw0QkFBNEIsb0JBQW9CLGtCQUFrQixZQUFZLGlCQUFpQix3QkFBd0Isc0JBQXNCLHNDQUFzQyxpREFBaUQsRUFBRSx3QkFBd0IsNkNBQTZDLGdGQUFnRixFQUFFLHFCQUFxQixxQkFBcUIsc0JBQXNCLDJCQUEyQixzQkFBc0Isc0NBQXNDLE1BQU0sNkJBQTZCLFNBQVMsZ0JBQWdCLDZGQUE2RixNQUFNLDZCQUE2QixTQUFTLE1BQU0sc0VBQXNFLFNBQVMsTUFBTSxzRkFBc0YsU0FBUyxNQUFNLHVDQUF1QyxLQUFLLFNBQVMsTUFBTSxrREFBa0QsS0FBSyxJQUFJLGtCQUFrQixLQUFLLElBQUksY0FBYyw2RkFBNkYsNkJBQTZCLDZCQUE2QixNQUFNLGdEQUFnRCxVQUFVLE1BQU0sZ0JBQWdCLDBCQUEwQixTQUFTLG1CQUFtQixTQUFTLEdBQUcscUJBQXFCLDhFQUE4RSxzQkFBc0IsZUFBZSxnQ0FBZ0MsMEJBQTBCLElBQUksS0FBSyxpREFBaUQsdUJBQXVCLElBQUksa0RBQWtELFlBQVksb0JBQW9CLDJCQUEyQixNQUFNLHlDQUF5QyxPQUFPLHNFQUFzRSxZQUFZLG9CQUFvQixjQUFjLHdCQUF3QixxQkFBcUIsNENBQTRDLHVCQUF1QiwyQkFBMkIsTUFBTSxpQkFBaUIsb0JBQW9CLG9CQUFvQiwrQkFBK0IseUJBQXlCLEVBQUUsb0JBQW9CLG1CQUFtQixpQ0FBaUMsb0JBQW9CLG1CQUFtQixtQkFBbUIsMEJBQTBCLElBQUkscUNBQXFDLElBQUksS0FBSyxXQUFXLGNBQWMsWUFBWSxtQkFBbUIsUUFBUSwwQkFBMEIsSUFBSSxLQUFLLFVBQVUsbUJBQW1CLHFDQUFxQyxzQkFBc0IsZ0JBQWdCLGFBQWEsY0FBYyxzREFBc0Qsb0NBQW9DLHdCQUF3Qiw0REFBNEQsa0JBQWtCLG9EQUFvRCxtQ0FBbUMsY0FBYyxzREFBc0QsMkpBQTJKLDBDQUEwQyxNQUFNLEVBQUUsNERBQTRELHdCQUF3QixNQUFNLGtHQUFrRyxZQUFZLHlCQUF5QixVQUFVLHFEQUFxRCwrQkFBK0Isa0NBQWtDLGlCQUFpQixFQUFFLFNBQVMsMEJBQTBCLHNCQUFzQixNQUFNLGtHQUFrRyx5QkFBeUIsTUFBTSxvR0FBb0csc0JBQXNCLHVCQUF1QixRQUFRLHVCQUF1QiwrQ0FBK0MsWUFBWSw0Q0FBNEMsS0FBSyw2QkFBNkIsY0FBYyw2Q0FBNkMsRUFBRSxpQkFBaUIsbUJBQW1CLGNBQWMsNkJBQTZCLElBQUksZ0JBQWdCLFFBQVEsWUFBWSxpQkFBaUIsY0FBYyxtQkFBbUIsc0JBQXNCLGtFQUFrRSwwQkFBMEIsMEJBQTBCLEVBQUUsWUFBWSxlQUFlLHdIQUF3SCxzRUFBc0UseUJBQXlCLGFBQWEsbUJBQW1CLGlDQUFpQyxpQkFBaUIsY0FBYyxrQkFBa0IsUUFBUSx1QkFBdUIsb0JBQW9CLGtCQUFrQixvRUFBb0UsaUJBQWlCLDBDQUEwQywyQkFBMkIscUJBQXFCLHlCQUF5QixTQUFTLFdBQVcseUJBQXlCLCtDQUErQyxrRUFBa0Usb0NBQW9DLDJCQUEyQiw0SEFBNEgsZ0NBQWdDLGtFQUFrRSxjQUFjLDRDQUE0Qyx3QkFBd0IsNkVBQTZFLElBQUksOENBQThDLDRCQUE0QiwrSEFBK0gsYUFBYSxvREFBb0Qsc0JBQXNCLGtCQUFrQiwrS0FBK0ssaUJBQWlCLGFBQWEsc0NBQXNDLDhDQUE4QyxFQUFFLG9CQUFvQixrQkFBa0Isb0NBQW9DLGVBQWUsRUFBRSxtQkFBbUIsMkRBQTJELGlCQUFpQixHQUFHLDRCQUE0QixrQ0FBa0Msb0JBQW9CLHlCQUF5QixrRUFBa0UsY0FBYyxtQ0FBbUMsTUFBTSw2RUFBNkUsZUFBZSxzQkFBc0IsbUJBQW1CLHNEQUFzRCxlQUFlLGtDQUFrQyxlQUFlLG9DQUFvQyxlQUFlLDhCQUE4QixlQUFlLDBCQUEwQixrQkFBa0IsZ0NBQWdDLHdFQUF3RSx5Q0FBeUMsd0NBQXdDLEtBQUsscUlBQXFJLHlCQUF5QixvRkFBb0YsOEJBQThCLEtBQUssb0NBQW9DLDBCQUEwQiw0QkFBNEIseUJBQXlCLFlBQVksMklBQTJJLGNBQWMseURBQXlELGNBQWMsc0NBQXNDLGNBQWMsb0NBQW9DLGdCQUFnQixjQUFjLGtDQUFrQyxrQ0FBa0Msb0JBQW9CLGFBQWEsa0JBQWtCLDZGQUE2RixhQUFhLHNDQUFzQyxrQkFBa0IsdURBQXVELGtCQUFrQixpQkFBaUIsY0FBYyxRQUFRLGlCQUFpQixFQUFFLGNBQWMsT0FBTywwQ0FBMEMsRUFBRSxjQUFjLFNBQVMsZUFBZSxVQUFVLGFBQWEsb0VBQW9FLHlCQUF5QixrQkFBa0Isa0NBQWtDLDBCQUEwQixnQkFBZ0IsYUFBYSxxQ0FBcUMsK0dBQStHLGFBQWEsbUJBQW1CLG1DQUFtQywwQ0FBMEMsSUFBSSxhQUFhLHFCQUFxQixzQ0FBc0MsZ0RBQWdELElBQUksNEJBQTRCLHVCQUF1QixpQkFBaUIsWUFBWSxXQUFXLGdFQUFnRSxJQUFJLG9CQUFvQixPQUFPLG1DQUFtQyxXQUFXLGFBQWEsMkJBQTJCLFdBQVcsdUJBQXVCLElBQUksd0NBQXdDLFdBQVcsUUFBUSxNQUFNLDBEQUEwRCx1RUFBdUUsbUJBQW1CLGFBQWEsMkJBQTJCLGdEQUFnRCxJQUFJLDhCQUE4QiwrQkFBK0IscURBQXFELDhCQUE4QixhQUFhLDJCQUEyQix1RkFBdUYsWUFBWSxrREFBa0QsYUFBYSw2Q0FBNkMsK0RBQStELDRDQUE0QyxnREFBZ0QsNENBQTRDLDBCQUEwQiw4QkFBOEIsc0JBQXNCLDZDQUE2QyxrQkFBa0IsK0JBQStCLDREQUE0RCxtQkFBbUIsWUFBWSxNQUFNLCtCQUErQixpSUFBaUksbUJBQW1CLG9CQUFvQixrQkFBa0IsMEJBQTBCLE9BQU8sbUNBQW1DLEtBQUssNkJBQTZCLEtBQUssb0NBQW9DLEVBQUUseUJBQXlCLDRCQUE0QixzQkFBc0Isa0JBQWtCLHFCQUFxQiw0QkFBNEIsbUJBQW1CLGtCQUFrQiwyQkFBMkIseURBQXlELHNCQUFzQixpREFBaUQsb0JBQW9CLGlEQUFpRCx3QkFBd0IsbUNBQW1DLGlCQUFpQiwyQ0FBMkMsWUFBWSxNQUFNLGlCQUFpQiwyQ0FBMkMsWUFBWSxNQUFNLHFCQUFxQixxQkFBcUIsZUFBZSxtQkFBbUIsb0pBQW9KLDRDQUE0QyxxQkFBcUIsVUFBVSwyQkFBMkIsbUJBQW1CLFFBQVEsY0FBYyxrQ0FBa0MsdUZBQXVGLEtBQUssaUpBQWlKLG1CQUFtQixzTUFBc00sd0JBQXdCLDBFQUEwRSx1QkFBdUIsMEVBQTBFLG1CQUFtQixnQ0FBZ0MsVUFBVSwyQkFBMkIsbUJBQW1CLGlGQUFpRixtQkFBbUIsNkxBQTZMLHdCQUF3Qiw0RUFBNEUsdUJBQXVCLDBFQUEwRSxtQkFBbUIsc0NBQXNDLFVBQVUsMkRBQTJELG1CQUFtQixxQ0FBcUMsa0tBQWtLLG1CQUFtQiw2RUFBNkUsZUFBZSw0Q0FBNEMsZUFBZSxpREFBaUQsZUFBZSx3RUFBd0UsbUJBQW1CLHVKQUF1SixlQUFlLG9DQUFvQyxlQUFlLGdCQUFnQix3QkFBd0IsNEVBQTRFLHVCQUF1QiwwRUFBMEUsbUJBQW1CLGdDQUFnQyxVQUFVLDJCQUEyQixlQUFlLHdFQUF3RSxtQkFBbUIsc0JBQXNCLCtFQUErRSwrRUFBK0UsK0NBQStDLDRPQUE0TyxtQkFBbUIsMkVBQTJFLGlJQUFpSSxtQkFBbUIsbUhBQW1ILCtFQUErRSxlQUFlLDREQUE0RCxlQUFlLG9CQUFvQixzREFBc0Qsd0JBQXdCLG9DQUFvQyxvQ0FBb0MsdUlBQXVJLHVCQUF1Qiw4RUFBOEUsbUJBQW1CLGdDQUFnQyx3QkFBd0IsNENBQTRDLGNBQWMsdW9GQUF1b0YsRUFBRSxlQUFlLHdDQUF3QyxVQUFVLGVBQWUsdUJBQXVCLDZFQUE2RSxxQkFBcUIsUUFBUSwwREFBMEQsNkJBQTZCLGFBQWEsaUJBQWlCLG1CQUFtQixxQkFBcUIsK0NBQStDLDZCQUE2QixJQUFJLGNBQWMsU0FBUyw4QkFBOEIsaUJBQWlCLHVCQUF1QiwwS0FBMEssb0JBQW9CLDBCQUEwQixjQUFjLFVBQVUsSUFBSSxxQkFBcUIsUUFBUSxXQUFXLHdCQUF3Qix3RkFBd0Ysd0JBQXdCLGtEQUFrRCw0QkFBNEIsa0NBQWtDLHdCQUF3QixhQUFhLG9DQUFvQyxnQkFBZ0IsaURBQWlELHlCQUF5QixtTEFBbUwscUlBQXFJLFVBQVUsa0RBQWtELG9CQUFvQixtQkFBbUIsZ0RBQWdELGtDQUFrQyxrQkFBa0IsR0FBRyxLQUFLLHlCQUF5QixnQkFBZ0IsK0NBQStDLGlEQUFpRCxrQkFBa0IsaUNBQWlDLCtCQUErQix5QkFBeUIseURBQXlELEdBQUcsY0FBYywrQkFBK0IsY0FBYyxtQkFBbUIsa0NBQWtDLGNBQWMsd0JBQXdCLGNBQWMsaURBQWlELDZCQUE2QixNQUFNLG1DQUFtQyxxQkFBcUIsZ0NBQWdDLHNCQUFzQixzQ0FBc0MsY0FBYyxHQUFHLGtCQUFrQixpQkFBaUIsR0FBRyxFQUFFLDJCQUEyQixZQUFZLEtBQUsseUJBQXlCLGFBQWEsaUJBQWlCLG1CQUFtQixRQUFRLHlCQUF5QixZQUFZLE1BQU0sMEJBQTBCLGdDQUFnQyxJQUFJLDRIQUE0SCxLQUFLLElBQUksRUFBRSxVQUFVLG1DQUFtQyxvREFBb0QsdUJBQXVCLHNCQUFzQixrQkFBa0IsS0FBSyxZQUFZLEVBQUUsYUFBYSxhQUFhLGlCQUFpQixpQ0FBaUMsU0FBUyxzQkFBc0IsOENBQThDLGlCQUFpQiw2QkFBNkIsMENBQTBDLDhDQUE4Qyx5QkFBeUIsZUFBZSxVQUFVLGNBQWMsMEJBQTBCLDJCQUEyQixHQUFHLDJFQUEyRSxzRUFBc0Usa0JBQWtCLG1CQUFtQix1QkFBdUIsK0JBQStCLE9BQU8sa0JBQWtCLG1FQUFtRSxjQUFjLG9CQUFvQiw4RUFBOEUsY0FBYywwQkFBMEIsRUFBRSxzQ0FBc0MsU0FBUyxjQUFjLHFCQUFxQixFQUFFLG1EQUFtRCxjQUFjLGlCQUFpQixnREFBZ0QsbUJBQW1CLHlCQUF5QiwwQkFBMEIsVUFBVSx1QkFBdUIsMkRBQTJELGlHQUFpRyw0QkFBNEIsT0FBTyxzQkFBc0IsV0FBVyxhQUFhLFdBQVcsV0FBVyxFQUFFLDZCQUE2QixRQUFRLGlLQUFpSyxlQUFlLDJFQUEyRSxjQUFjLHFCQUFxQixlQUFlLDhCQUE4QixlQUFlLHFCQUFxQixlQUFlLHNCQUFzQixlQUFlLG9DQUFvQyxpQkFBaUIsd0JBQXdCLGlCQUFpQiwwQkFBMEIsaUJBQWlCLG9CQUFvQixpQkFBaUIsa0ZBQWtGLEVBQUUsZUFBZSxZQUFZLGdCQUFnQixTQUFTLGNBQWMsZ0ZBQWdGLGNBQWMsbUJBQW1CLDJCQUEyQixtQkFBbUIsMEJBQTBCLHdCQUF3QiwrQkFBK0IscUJBQXFCLDRCQUE0Qiw0QkFBNEIsbUNBQW1DLHVCQUF1Qiw4QkFBOEIscUJBQXFCLDRCQUE0Qix1QkFBdUIsOEJBQThCLG9CQUFvQix3QkFBd0IsOEJBQThCLFNBQVMsb0JBQW9CLHdCQUF3QixvQkFBb0Isc0NBQXNDLG1CQUFtQixxQ0FBcUMsd0JBQXdCLDBDQUEwQyxxQkFBcUIsdUNBQXVDLDRCQUE0Qiw4Q0FBOEMsdUJBQXVCLHlDQUF5QyxxQkFBcUIsdUNBQXVDLHVCQUF1Qix5Q0FBeUMsb0JBQW9CLHFDQUFxQyxzQkFBc0IsbUJBQW1CLGNBQWMsb0JBQW9CLG1CQUFtQixjQUFjLCtCQUErQixnQkFBZ0IsMkJBQTJCLGtCQUFrQixnQkFBZ0IsWUFBWSxJQUFJLHFDQUFxQyxVQUFVLElBQUksNkJBQTZCLFNBQVMsa0RBQWtELGtCQUFrQixtRkFBbUYsSUFBSSxNQUFNLGFBQWEsc0JBQXNCLFFBQVEsU0FBUyxHQUFHLGVBQWUscUJBQXFCLElBQUksTUFBTSxhQUFhLHNCQUFzQixRQUFRLFVBQVUsdUJBQXVCLG9DQUFvQyxlQUFlLGlDQUFpQyxhQUFhLHVCQUF1Qiw4RUFBOEUsb0JBQW9CLGlFQUFpRSxlQUFlLHlCQUF5QixhQUFhLHFCQUFxQiw2RUFBNkUsaUJBQWlCLGlGQUFpRixnR0FBZ0csTUFBTSwyQkFBMkIsNERBQTRELGVBQWUsdUNBQXVDLGFBQWEsMEJBQTBCLHVEQUF1RCxFQUFFLHVFQUF1RSwwQkFBMEIsZ0RBQWdELDRHQUE0RyxRQUFRLG1CQUFtQixzQkFBc0IsbUJBQW1CLDBDQUEwQyw0Q0FBNEMsZUFBZSw2REFBNkQsZUFBZSxnQ0FBZ0MsTUFBTSw2QkFBNkIsU0FBUyxtQkFBbUIsZUFBZSw4QkFBOEIsc0NBQXNDLG1CQUFtQixlQUFlLDBCQUEwQixzQ0FBc0MsbUJBQW1CLGVBQWUsMEJBQTBCLHNDQUFzQyxtQkFBbUIsZUFBZSw4QkFBOEIsc0NBQXNDLG1CQUFtQixlQUFlLGdDQUFnQywwREFBMEQsbUJBQW1CLGVBQWUsRUFBRSwwQ0FBMEMsbUJBQW1CLGVBQWUsOEJBQThCLHVDQUF1QyxtQkFBbUIsZUFBZSw4QkFBOEIsc0NBQXNDLG1CQUFtQixlQUFlLDhCQUE4QixzQ0FBc0MsbUJBQW1CLGVBQWUsOEJBQThCLHNDQUFzQyxtQkFBbUIsZUFBZSw4QkFBOEIsc0NBQXNDLG1CQUFtQixlQUFlLDhCQUE4QixzQ0FBc0MsbUJBQW1CLGVBQWUsOEJBQThCLHNDQUFzQyxlQUFlLGdFQUFnRSxpQ0FBaUMsbUJBQW1CLGVBQWUsOEJBQThCLDBCQUEwQixlQUFlLHdCQUF3QixNQUFNLHVCQUF1QixtQkFBbUIsbUJBQW1CLFNBQVMsVUFBVSxnQkFBZ0IscUJBQXFCLE9BQU8seUJBQXlCLDZFQUE2RSx1Q0FBdUMscUZBQXFGLHVCQUF1QiwyQkFBMkIsR0FBRyxtQkFBbUIsNEhBQTRILHdFQUF3RSxtQkFBbUIsTUFBTSwwQkFBMEIsTUFBTSwwQkFBMEIsTUFBTSxpRUFBaUUsYUFBYSxpQkFBaUIsTUFBTSxtQkFBbUIsMEpBQTBKLFdBQVcsbUJBQW1CLFFBQVEsbUJBQW1CLGdEQUFnRCxRQUFRLDBCQUEwQiwwQkFBMEIsVUFBVSxzQ0FBc0MsUUFBUSw4QkFBOEIscURBQXFELDZDQUE2QyxvQkFBb0Isb0ZBQW9GLHNKQUFzSiwyQkFBMkIsaUdBQWlHLGNBQWMsZUFBZSxjQUFjLDRCQUE0QixNQUFNLDRKQUE0Six1Q0FBdUMsMkJBQTJCLE9BQU8sdUNBQXVDLG9DQUFvQyw2QkFBNkIsd0NBQXdDLHdSQUF3Uix1QkFBdUIsU0FBUyxHQUFHLG9CQUFvQix3Q0FBd0MsSUFBSSxFQUFFLGlCQUFpQiwrQkFBK0IsNEVBQTRFLHNDQUFzQyxTQUFTLGtCQUFrQixXQUFXLGNBQWMsSUFBSSxpQkFBaUIsa0JBQWtCLFFBQVEsU0FBUywyQkFBMkIsSUFBSSxNQUFNLGlCQUFpQixjQUFjLFFBQVEsU0FBUyx5QkFBeUIsd0JBQXdCLDhFQUE4RSx3QkFBd0IseUJBQXlCLEVBQUUsT0FBTyxjQUFjLHFCQUFxQixlQUFlLHFCQUFxQixlQUFlLHVCQUF1QixlQUFlLHVCQUF1Qix3QkFBd0IsMkJBQTJCLGlCQUFpQiwyQkFBMkIsaUJBQWlCLDRCQUE0QixpQkFBaUIsbUNBQW1DLGlCQUFpQixpQ0FBaUMsaUJBQWlCLG1DQUFtQyxpQkFBaUIsOEJBQThCLGlCQUFpQiw4QkFBOEIsZUFBZSw4QkFBOEIsaUJBQWlCLDhCQUE4QixpQkFBaUIsa0NBQWtDLGVBQWUsa0JBQWtCLGlCQUFpQixrQ0FBa0MsK0JBQStCLG1DQUFtQyxpQkFBaUIsbUNBQW1DLHFCQUFxQixXQUFXLElBQUksa0JBQWtCLGNBQWMseUJBQXlCLDBEQUEwRCxtQkFBbUIsY0FBYyx5QkFBeUIsMERBQTBELG1CQUFtQixjQUFjLHlCQUF5QiwwREFBMEQsbUJBQW1CLGNBQWMseUJBQXlCLDBEQUEwRCxtQkFBbUIsK0JBQStCLDJEQUEyRCwyQ0FBMkMsNEJBQTRCLHVDQUF1QywrQkFBK0IsbUJBQW1CLCtCQUErQix3QkFBd0IsU0FBUyxNQUFNLGlCQUFpQix3ZEFBd2QsRUFBRSxlQUFlLGlDQUFpQyxlQUFlLHdCQUF3QixxRUFBcUUsa0JBQWtCLGdCQUFnQixvQkFBb0IsZ0JBQWdCLGNBQWMsbUJBQW1CLDBCQUEwQixjQUFjLGlCQUFpQiw4Q0FBOEMsMkJBQTJCLHNEQUFzRCxRQUFRLHNCQUFzQixpQkFBaUIsaUNBQWlDLHFDQUFxQyxNQUFNLHNCQUFzQixLQUFLLHFCQUFxQixXQUFXLHFCQUFxQix3Q0FBd0MsMEJBQTBCLHdDQUF3QyxNQUFNLGdDQUFnQywwQkFBMEIsc0JBQXNCLCtCQUErQix3Q0FBd0MsTUFBTSxjQUFjLHVCQUF1QixvQkFBb0IsNEJBQTRCLHdDQUF3QyxNQUFNLFlBQVksa0NBQWtDLHVDQUF1QyxNQUFNLGNBQWMsbUJBQW1CLHdCQUF3QixrQkFBa0IsTUFBTSxnQ0FBZ0MsWUFBWSxpQkFBaUIsb0JBQW9CLHFCQUFxQixNQUFNLGNBQWMsZUFBZSx1QkFBdUIsbUNBQW1DLHNEQUFzRCxrQkFBa0IsU0FBUyx1REFBdUQsMkJBQTJCLHVCQUF1QixXQUFXLHNEQUFzRCxjQUFjLGNBQWMsZ0JBQWdCLGNBQWMsMEdBQTBHLG9DQUFvQyx1QkFBdUIsa0VBQWtFLHVCQUF1QixRQUFRLGVBQWUsZ0NBQWdDLGdEQUFnRCxpQkFBaUIscUNBQXFDLGlCQUFpQixvRUFBb0UsaUJBQWlCLGlDQUFpQyxpQkFBaUIsNkJBQTZCLGVBQWUsK0NBQStDLHdCQUF3QixlQUFlLHVDQUF1QyxpQkFBaUIsd0NBQXdDLHdCQUF3Qiw2QkFBNkIsc0RBQXNELDBEQUEwRCx1QkFBdUIseUhBQXlILGdCQUFnQiwwQ0FBMEMsZ0JBQWdCLHNCQUFzQixNQUFNLHFDQUFxQyxjQUFjLDRDQUE0Qyx5Q0FBeUMsNENBQTRDLE1BQU0sc0JBQXNCLDJCQUEyQiwySEFBMkgsWUFBWSxRQUFRLGFBQWEsVUFBVSxhQUFhLCtCQUErQixnQkFBZ0IsTUFBTSxVQUFVLCtCQUErQixhQUFhLHFCQUFxQixhQUFhLGVBQWUsYUFBYSwrREFBK0QsZ0JBQWdCLHVCQUF1QixnQkFBZ0IsaUJBQWlCLGdCQUFnQixrREFBa0QsbUJBQW1CLHFEQUFxRCxVQUFVLHVCQUF1QixJQUFJLDRIQUE0SCw2Q0FBNkMsS0FBSyx1REFBdUQsc0VBQXNFLDhCQUE4QixzREFBc0QsaUNBQWlDLCtIQUErSCxRQUFRLGtFQUFrRSxnQkFBZ0IsdUJBQXVCLGtCQUFrQixpQkFBaUIsTUFBTSxzQkFBc0IsNENBQTRDLG1CQUFtQiw0Q0FBNEMsY0FBYyxVQUFVLGdCQUFnQixNQUFNLG1KQUFtSixnRUFBZ0UsdUJBQXVCLE1BQU0sc0JBQXNCLG9FQUFvRSxjQUFjLFlBQVksY0FBYyxjQUFjLGdCQUFnQixNQUFNLHlLQUF5Syx3RkFBd0YsdUJBQXVCLHlCQUF5QixzQkFBc0Isd0RBQXdELHVCQUF1QixrQ0FBa0MsaUJBQWlCLGdCQUFnQiw2QkFBNkIsbURBQW1ELDZDQUE2QyxJQUFJLGNBQWMsU0FBUyx1QkFBdUIsY0FBYyx5QkFBeUIseUJBQXlCLG9CQUFvQixZQUFZLGNBQWMsWUFBWSxJQUFJLDhCQUE4QixZQUFZLEtBQUssZ0RBQWdELGtHQUFrRyxrQ0FBa0MsMkJBQTJCLElBQUksZ0JBQWdCLG9CQUFvQixFQUFFLGlCQUFpQixJQUFJLHVCQUF1QixvQkFBb0IsR0FBRyxxQkFBcUIsd0JBQXdCLElBQUksOEJBQThCLHNCQUFzQixNQUFNLEtBQUssOEJBQThCLEtBQUssOEJBQThCLHVCQUF1QixNQUFNLGlCQUFpQixZQUFZLGNBQWMsZUFBZSxlQUFlLHVCQUF1QixNQUFNLHNCQUFzQixrQkFBa0IscUJBQXFCLGlFQUFpRSxxQkFBcUIscUJBQXFCLHNDQUFzQyxzREFBc0QsOENBQThDLHVCQUF1QixpREFBaUQsb0JBQW9CLHlEQUF5RCxXQUFXLHVCQUF1QixJQUFJLEtBQUssc0JBQXNCLDBFQUEwRSxFQUFFLGFBQWEsaUdBQWlHLG9GQUFvRixzQkFBc0IsTUFBTSxjQUFjLE1BQU0sNkJBQTZCLDZDQUE2QyxjQUFjLGlCQUFpQixnQ0FBZ0MsTUFBTSxrS0FBa0ssbUJBQW1CLDZFQUE2RSxnQkFBZ0IsYUFBYSwrQkFBK0IsZ0JBQWdCLGFBQWEsbUJBQW1CLGFBQWEsd0JBQXdCLGFBQWEsc0JBQXNCLDJCQUEyQixnQkFBZ0IsY0FBYyxhQUFhLG1CQUFtQixhQUFhLG1CQUFtQixhQUFhLCtCQUErQiwwQ0FBMEMsc0NBQXNDLFdBQVcsNEJBQTRCLDZDQUE2QyxNQUFNLDJCQUEyQixhQUFhLHNFQUFzRSxVQUFVLGVBQWUsa0JBQWtCLGNBQWMsV0FBVyxPQUFPLHFCQUFxQixhQUFhLHFCQUFxQixjQUFjLDZCQUE2QixRQUFRLHFCQUFxQixtQkFBbUIsZ0RBQWdELGlCQUFpQiwwRUFBMEUseUJBQXlCLHdCQUF3QixPQUFPLHFCQUFxQixrQkFBa0IscUJBQXFCLDBCQUEwQiw2TEFBNkwsd0JBQXdCLDRIQUE0SCx3RkFBd0Ysb0JBQW9CLG9CQUFvQixrQkFBa0IsYUFBYSxtQkFBbUIsTUFBTSxxSkFBcUoseUJBQXlCLHVCQUF1QixnREFBZ0Qsd0JBQXdCLGNBQWMscUJBQXFCLG1CQUFtQixzREFBc0Qsb0JBQW9CLGFBQWEsY0FBYyxXQUFXLGFBQWEsY0FBYyxXQUFXLG9CQUFvQixhQUFhLGNBQWMsV0FBVyxhQUFhLGNBQWMsV0FBVyxvQkFBb0IsYUFBYSxjQUFjLFdBQVcsYUFBYSxjQUFjLFdBQVcsb0JBQW9CLGFBQWEsY0FBYyxXQUFXLGFBQWEsY0FBYyxXQUFXLGtCQUFrQixnQkFBZ0IsYUFBYSxnQkFBZ0IsU0FBUyxXQUFXLHFCQUFxQixtQkFBbUIsc0RBQXNELDZCQUE2QiwwQkFBMEIsa0JBQWtCLG9CQUFvQixnREFBZ0QseUJBQXlCLHlCQUF5QixtQkFBbUIsdUJBQXVCLGlCQUFpQixrQkFBa0Isa0NBQWtDLElBQUksMkNBQTJDLElBQUksMEVBQTBFLGFBQWEsMEJBQTBCLHdIQUF3SCxvQkFBb0IsWUFBWSxxREFBcUQsa0NBQWtDLHlCQUF5Qix3QkFBd0IsZ0JBQWdCLDhCQUE4QixnQkFBZ0IscUJBQXFCLGdCQUFnQix1RUFBdUUsdUVBQXVFLDBCQUEwQixLQUFLLE9BQU8sR0FBRyxRQUFRLElBQUksVUFBVSw2SEFBNkgsWUFBWSxVQUFVLGdCQUFnQiw4RUFBOEUsZ0JBQWdCLGtCQUFrQixnQkFBZ0Isc0JBQXNCLDRFQUE0RSxlQUFlLGdDQUFnQywrQkFBK0IsMkVBQTJFLEdBQUcsaUJBQWlCLHFFQUFxRSxnQkFBZ0IscUNBQXFDLHlDQUF5Qyw4QkFBOEIsVUFBVSxzREFBc0QsR0FBRyw0QkFBNEIsbUJBQW1CLG1CQUFtQiwyQ0FBMkMsb0JBQW9CLHFIQUFxSCxtQ0FBbUMsa0NBQWtDLGNBQWMsaUNBQWlDLG1HQUFtRyw0QkFBNEIsMkxBQTJMLG9CQUFvQixVQUFVLGNBQWMsa0JBQWtCLDZDQUE2Qyw0QkFBNEIsZ0VBQWdFLDZGQUE2RixzQkFBc0IsOENBQThDLE9BQU8sb0JBQW9CLHVDQUF1QyxtQkFBbUIsaUNBQWlDLHNCQUFzQiwwQ0FBMEMsb0JBQW9CLG9DQUFvQyx5QkFBeUIsbURBQW1ELHVCQUF1QiwrQ0FBK0MseUJBQXlCLHVGQUF1RixxQkFBcUIsb0dBQW9HLHlCQUF5QiwwQ0FBMEMsZ0NBQWdDLHlVQUF5VSxnQkFBZ0IsMEJBQTBCLHNEQUFzRCxxQkFBcUIsdUJBQXVCLGlEQUFpRCxjQUFjLFlBQVksZ0JBQWdCLG9CQUFvQix1QkFBdUIsdUJBQXVCLHVCQUF1QixRQUFRLFFBQVEsb0JBQW9CLGFBQWEsYUFBYSxhQUFhLGFBQWEsb0RBQW9ELGNBQWMsc0JBQXNCLDZCQUE2QixVQUFVLG1DQUFtQyxZQUFZLHVCQUF1QixzQkFBc0IseUJBQXlCLGlCQUFpQixtQkFBbUIsYUFBYSxpQkFBaUIsaUJBQWlCLGdCQUFnQixzQkFBc0IsZ0JBQWdCLDhCQUE4QixnQkFBZ0Isb0JBQW9CLGFBQWEsVUFBVSxhQUFhLFlBQVksU0FBUyxlQUFlLDJFQUEyRSxXQUFXLHlEQUF5RCxnQkFBZ0IsdUJBQXVCLDRDQUE0QyxpQkFBaUIsaUJBQWlCLGNBQWMsUUFBUSxnQkFBZ0IscUNBQXFDLDhDQUE4Qyx1QkFBdUIsd0JBQXdCLGNBQWMsWUFBWSxjQUFjLFlBQVksZ0JBQWdCLHFDQUFxQyx3RkFBd0YsdUJBQXVCLDJCQUEyQix1QkFBdUIsUUFBUSxlQUFlLGFBQWEsNkJBQTZCLFVBQVUsbUNBQW1DLFlBQVksdUJBQXVCLHNCQUFzQix5QkFBeUIsYUFBYSxXQUFXLGdCQUFnQixrQ0FBa0MsZ0JBQWdCLHdCQUF3QixnQkFBZ0IsY0FBYyxhQUFhLFVBQVUsYUFBYSxjQUFjLFNBQVMsZUFBZSxnQ0FBZ0MsY0FBYyxxQkFBcUIsK0JBQStCLHNEQUFzRCwrQkFBK0IsdUJBQXVCLCtCQUErQixnQkFBZ0IsNEJBQTRCLGFBQWEsOEJBQThCLGdCQUFnQix5QkFBeUIsdUVBQXVFLGFBQWEsc0JBQXNCLGFBQWEsMEJBQTBCLGdCQUFnQix1Q0FBdUMsYUFBYSwrQ0FBK0MsU0FBUyxhQUFhLDBCQUEwQiw0QkFBNEIsRUFBRSxLQUFLLHdDQUF3QywwQkFBMEIsZUFBZSxnS0FBZ0ssb0lBQW9JLCtCQUErQix5REFBeUQsR0FBRyxlQUFlLGNBQWMsaUJBQWlCLE9BQU8sMEJBQTBCLFdBQVcsc0JBQXNCLGNBQWMsb0JBQW9CLFlBQVkseUJBQXlCLGlCQUFpQix1QkFBdUIsaUJBQWlCLGVBQWUscUJBQXFCLFNBQVMsSUFBSSxlQUFlLG1DQUFtQyxtQ0FBbUMsK0RBQStELGNBQWMsK0NBQStDLGNBQWMsNkRBQTZELGFBQWEsb0JBQW9CLGFBQWEsaUNBQWlDLGFBQWEsZ0NBQWdDLDRCQUE0Qix1REFBdUQseUJBQXlCLHdEQUF3RCxrQ0FBa0Msd0JBQXdCLGNBQWMsT0FBTyxxQkFBcUIsV0FBVyxxQkFBcUIsOERBQThELDZNQUE2TSxtQkFBbUIsTUFBTSx5TEFBeUwsK0NBQStDLG9CQUFvQixzQkFBc0Isa0JBQWtCLHFCQUFxQixpQ0FBaUMsZ0JBQWdCLGlDQUFpQyxrQkFBa0IseURBQXlELGtCQUFrQix5Q0FBeUMsY0FBYyxnREFBZ0QsV0FBVyxvQ0FBb0MsK0JBQStCLGtDQUFrQyxtQkFBbUIsdUJBQXVCLDRHQUE0RyxxQkFBcUIsMkJBQTJCLGdCQUFnQixtQkFBbUIsc0RBQXNELG1CQUFtQiwwQkFBMEIsOEVBQThFLHFCQUFxQixxQ0FBcUMseUJBQXlCLG9EQUFvRCxzQkFBc0Isc0VBQXNFLHNCQUFzQixzR0FBc0csc0NBQXNDLDJEQUEyRCxlQUFlLDBCQUEwQixtQkFBbUIsRUFBRSxpQkFBaUIsWUFBWSxpQkFBaUIsaUNBQWlDLG1CQUFtQixzREFBc0QsZUFBZSxxQkFBcUIsdUNBQXVDLGVBQWUsWUFBWSx5QkFBeUIsaUJBQWlCLDREQUE0RCxnQkFBZ0IsMEVBQTBFLGdEQUFnRCw4QkFBOEIsMEVBQTBFLGdEQUFnRCxHQUFHLGlCQUFpQixnQ0FBZ0MseUJBQXlCLFVBQVUsMkVBQTJFLGNBQWMsWUFBWSxpRUFBaUUsaUJBQWlCLFlBQVksY0FBYyxnQkFBZ0IsZ0RBQWdELG1CQUFtQixrQ0FBa0MsbUJBQW1CLHlCQUF5QixZQUFZLEdBQUcsbUJBQW1CLGtDQUFrQyxtQkFBbUIseUJBQXlCLFlBQVksR0FBRyxlQUFlLGdCQUFnQixlQUFlLGdCQUFnQixzQkFBc0Isb0JBQW9CLGNBQWMsNEhBQTRILGFBQWEsZ0JBQWdCLDBCQUEwQixxQ0FBcUMsd0JBQXdCLHVIQUF1SCxzQkFBc0Isa0VBQWtFLDBCQUEwQixtRUFBbUUsc0JBQXNCLGNBQWMsZ0JBQWdCLFdBQVcsUUFBUSx1QkFBdUIsc0dBQXNHLDJCQUEyQiw4RUFBOEUsK0NBQStDLDZCQUE2QixPQUFPLG1CQUFtQixnQkFBZ0IseUJBQXlCLFdBQVcsZUFBZSxvQkFBb0IsdUJBQXVCLG1CQUFtQixxQkFBcUIsc0JBQXNCLHdCQUF3QixvQkFBb0Isc0JBQXNCLHlCQUF5QiwyQkFBMkIsdUJBQXVCLDBCQUEwQixrRkFBa0YsY0FBYyw4Q0FBOEMsY0FBYywrQ0FBK0MsMkVBQTJFLHNEQUFzRCxHQUFHLHNDQUFzQyxvQkFBb0IsYUFBYSwyRkFBMkYsc0JBQXNCLG9CQUFvQixvQ0FBb0MsR0FBRyxnQ0FBZ0MsNEJBQTRCLGtDQUFrQyxxQkFBcUIsbURBQW1ELHlCQUF5QixtREFBbUQsYUFBYSw4QkFBOEIsK0hBQStILGtFQUFrRSw0QkFBNEIsc0RBQXNELGFBQWEsT0FBTyx3Q0FBd0MsYUFBYSxpSkFBaUosaUJBQWlCLGtFQUFrRSxpQkFBaUIsVUFBVSwwQkFBMEIsMkJBQTJCLE9BQU8saUNBQWlDLEVBQUUsc0JBQXNCLE9BQU8seUdBQXlHLHNCQUFzQix3RUFBd0UsMkJBQTJCLHlJQUF5SSwyQkFBMkIseUlBQXlJLG9CQUFvQixrRUFBa0UseUJBQXlCLGtEQUFrRCx5QkFBeUIsa0RBQWtELHlCQUF5QixxRkFBcUYscUZBQXFGLDJCQUEyQixrQkFBa0IsYUFBYSxPQUFPLHVGQUF1Riw2QkFBNkIsNkVBQTZFLHNCQUFzQixnRUFBZ0Usc0JBQXNCLGdFQUFnRSx3QkFBd0IsNEJBQTRCLEdBQUcsaUNBQWlDLHNQQUFzUCx1RUFBdUUsK0RBQStELFlBQVksa0JBQWtCLGVBQWUsa0NBQWtDLDBCQUEwQixtQ0FBbUMsUUFBUSxzQ0FBc0MsVUFBVSxnQkFBZ0IsaUVBQWlFLHFGQUFxRix1QkFBdUIsa0RBQWtELHVCQUF1Qix1QkFBdUIsd0NBQXdDLGlCQUFpQixnQkFBZ0IseUNBQXlDLHNDQUFzQyw4QkFBOEIsNERBQTRELGdEQUFnRCxHQUFHLHNCQUFzQiwwQkFBMEIsYUFBYSx3QkFBd0IsRUFBRSxxQ0FBcUMsY0FBYyxTQUFTLHNCQUFzQixtQkFBbUIsd0JBQXdCLElBQUksaUJBQWlCLGdDQUFnQywwQkFBMEIsd0ZBQXdGLGdCQUFnQixnQkFBZ0IsNENBQTRDLHlCQUF5QiwwQ0FBMEMsOEJBQThCLHFDQUFxQyw0REFBNEQsR0FBRyxpQkFBaUIsb0VBQW9FLHFCQUFxQixnQkFBZ0IsVUFBVSwwQ0FBMEMsOEJBQThCLFVBQVUscURBQXFELEdBQUcsdUNBQXVDLGNBQWMsMENBQTBDLGNBQWMsNENBQTRDLGNBQWMsU0FBUyxzQkFBc0IsV0FBVyxZQUFZLGlCQUFpQix1Q0FBdUMsZUFBZSxxREFBcUQsMEJBQTBCLDJCQUEyQixzQ0FBc0Msd0JBQXdCLDJCQUEyQixzQ0FBc0MsMEJBQTBCLDJCQUEyQixVQUFVLGNBQWMsbUJBQW1CLHNDQUFzQyxpQkFBaUIsU0FBUyxvQkFBb0IsMkJBQTJCLGNBQWMsaUNBQWlDLHNDQUFzQyw0QkFBNEIsY0FBYyxTQUFTLHFCQUFxQixTQUFTLFlBQVksK0JBQStCLGNBQWMsU0FBUyxzQkFBc0IsZUFBZSxhQUFhLHNCQUFzQixFQUFFLGlCQUFpQix3Q0FBd0MsZUFBZSxZQUFZLGVBQWUsWUFBWSxlQUFlLG1DQUFtQyxJQUFJLEtBQUssS0FBSyxxQ0FBcUMsS0FBSyxTQUFTLG9CQUFvQixpQkFBaUIsNEJBQTRCLGdDQUFnQyxjQUFjLGlDQUFpQyx1Q0FBdUMsc0NBQXNDLG1DQUFtQyw0QkFBNEIsNENBQTRDLHNCQUFzQix3RUFBd0UsYUFBYSxrQkFBa0IseUJBQXlCLGNBQWMsZ0NBQWdDLGNBQWMsdUJBQXVCLDJDQUEyQyxRQUFRLElBQUksMERBQTBELG1CQUFtQixJQUFJLCtCQUErQix1RUFBdUUsaUJBQWlCLEtBQUssMEJBQTBCLFNBQVMsYUFBYSwwQkFBMEIsU0FBUyx1QkFBdUIsa0NBQWtDLGlCQUFpQixrQ0FBa0MsR0FBRyw0QkFBNEIsa0JBQWtCLG1DQUFtQyxtQkFBbUIsc0RBQXNELHFCQUFxQixrR0FBa0csb0JBQW9CLGVBQWUsMkJBQTJCLDhCQUE4QixtQkFBbUIsNkNBQTZDLE1BQU0sc0NBQXNDLFdBQVcseUJBQXlCLCtDQUErQyw2Q0FBNkMsTUFBTSx1RUFBdUUsZ0JBQWdCLHFCQUFxQixvRUFBb0UsTUFBTSxFQUFFLGdFQUFnRSxNQUFNLDhGQUE4RixvQkFBb0IsVUFBVSwrQkFBK0IsY0FBYyw4Q0FBOEMsZUFBZSx1QkFBdUIsa0JBQWtCLGVBQWUsb0NBQW9DLGVBQWUsK0JBQStCLFFBQVEsbUJBQW1CLE1BQU0sWUFBWSxrREFBa0QsOEJBQThCLG1CQUFtQixZQUFZLGtEQUFrRCwyQkFBMkIsZ0JBQWdCLGlCQUFpQixRQUFRLElBQUksK0NBQStDLDREQUE0RCxlQUFlLG1DQUFtQyxFQUFFLDJCQUEyQixLQUFLLHdCQUF3QiwwQ0FBMEMsTUFBTSxTQUFTLElBQUksTUFBTSxNQUFNLFlBQVksd0JBQXdCLG1HQUFtRyxNQUFNLFlBQVksdUdBQXVHLGlDQUFpQyx5RUFBeUUsK0JBQStCLGlCQUFpQiwrQkFBK0IsZUFBZSxVQUFVLGlCQUFpQiwrQkFBK0IsZUFBZSwwQkFBMEIsc0VBQXNFLGlCQUFpQixVQUFVLG9CQUFvQixhQUFhLHVCQUF1QixlQUFlLDBCQUEwQixpQkFBaUIsdUJBQXVCLGNBQWMsdURBQXVELGVBQWUsZ0JBQWdCLFNBQVMsK0JBQStCLFVBQVUsOERBQThELGNBQWMsNkVBQTZFLG9FQUFvRSxzQkFBc0IsRUFBRSxrQ0FBa0MsU0FBUyxNQUFNLE1BQU0sTUFBTSxLQUFLLFNBQVMsSUFBSSxNQUFNLE1BQU0sNEJBQTRCLGVBQWUsZUFBZSwrREFBK0QsaUJBQWlCLFVBQVUsY0FBYyw4R0FBOEcsVUFBVSxvQkFBb0IsUUFBUSxNQUFNLGlCQUFpQixRQUFRLFNBQVMsR0FBRyxTQUFTLEtBQUssTUFBTSxnQkFBZ0IsUUFBUSxTQUFTLEdBQUcsVUFBVSxnREFBZ0QsTUFBTSxpQkFBaUIsUUFBUSxlQUFlLEdBQUcsZUFBZSxLQUFLLE1BQU0sZ0JBQWdCLFFBQVEsZUFBZSxHQUFHLGVBQWUsYUFBYSxNQUFNLGlCQUFpQixRQUFRLGFBQWEsR0FBRyxhQUFhLEtBQUssTUFBTSxnQkFBZ0IsUUFBUSxhQUFhLEdBQUcsYUFBYSxzQkFBc0IsaUJBQWlCLHFDQUFxQyxxQkFBcUIsa0JBQWtCLHNIQUFzSCxxQkFBcUIsaURBQWlELG1CQUFtQixnQkFBZ0IsaUlBQWlJLGNBQWMsWUFBWSxlQUFlLDZCQUE2QixpQkFBaUIsb0JBQW9CLHFFQUFxRSxpQkFBaUIsb0JBQW9CLHFFQUFxRSxlQUFlLEtBQUssSUFBSSxPQUFPLFNBQVMsaUJBQWlCLDZCQUE2QixzREFBc0QsZ0hBQWdILEtBQUssWUFBWSxVQUFVLGdCQUFnQixnRUFBZ0UsSUFBSSw0RkFBNEYsZ0JBQWdCLG9GQUFvRixJQUFJLHVEQUF1RCxJQUFJLHlJQUF5SSxvQkFBb0Isb0JBQW9CLG9CQUFvQixvQkFBb0Isb0JBQW9CLG9CQUFvQixvQkFBb0IsNkVBQTZFLFlBQVksS0FBSyxPQUFPLG1CQUFtQiwwQkFBMEIsaUJBQWlCLHdCQUF3QixnQ0FBZ0Msa0NBQWtDLElBQUkscUNBQXFDLDJCQUEyQixlQUFlLGlCQUFpQix1REFBdUQsZ0JBQWdCLHdEQUF3RCxlQUFlLHFCQUFxQixVQUFVLE1BQU0sMkNBQTJDLFVBQVUsSUFBSSxPQUFPLE1BQU0sV0FBVyxJQUFJLHVGQUF1RixrQ0FBa0MsT0FBTyxxTkFBcU4sWUFBWSxvQkFBb0IsK0NBQStDLDRCQUE0Qiw4TEFBOEwsS0FBSyxHQUFHLG9CQUFvQixZQUFZLHVFQUF1RSx3RkFBd0YsT0FBTyw0RUFBNEUsd0ZBQXdGLE1BQU0saUJBQWlCLFlBQVksY0FBYyw0QkFBNEIsMkJBQTJCLGlCQUFpQixjQUFjLGtFQUFrRSw4Q0FBOEMsdUJBQXVCLGlDQUFpQyxnQkFBZ0IsZ0JBQWdCLDBFQUEwRSxJQUFJLGNBQWMsMkJBQTJCLE9BQU8sMkRBQTJELEVBQUUsMkJBQTJCLHlDQUF5QyxnQkFBZ0Isa0JBQWtCLE9BQU8saUNBQWlDLEVBQUUseUJBQXlCLFNBQVMsNENBQTRDLDRGQUE0RixNQUFNLHlJQUF5SSxJQUFJLGlCQUFpQix3Q0FBd0MsaUJBQWlCLHdDQUF3QywwQkFBMEIseURBQXlELG9CQUFvQix1RUFBdUUsSUFBSSwrQkFBK0IsZUFBZSxXQUFXLGVBQWUsV0FBVyxpQkFBaUIsc0JBQXNCLDhDQUE4QyxtQkFBbUIsNkVBQTZFLGlCQUFpQixVQUFVLE1BQU0sK0NBQStDLCtCQUErQixtQkFBbUIsd0JBQXdCLFVBQVUsaUJBQWlCLDZCQUE2QixvQkFBb0IsaUJBQWlCLHVEQUF1RCxnQkFBZ0IsK0JBQStCLHNIQUFzSCxjQUFjLGtCQUFrQiw4RkFBOEYsZUFBZSxhQUFhLFNBQVMseUJBQXlCLGNBQWMsSUFBSSx5QkFBeUIsa0JBQWtCLEVBQUUsNEJBQTRCLHFDQUFxQyxxQ0FBcUMsZ0JBQWdCLG1FQUFtRSxjQUFjLHNDQUFzQywyQkFBMkIsc0RBQXNELElBQUksK0ZBQStGLGFBQWEsSUFBSSxLQUFLLDZCQUE2QixnRUFBZ0UsZ0JBQWdCLDRCQUE0QixtQ0FBbUMsZ0JBQWdCLG1EQUFtRCxLQUFLLGNBQWMsMkRBQTJELDJCQUEyQix3QkFBd0IsNEJBQTRCLGlEQUFpRCwyREFBMkQsMERBQTBELGtDQUFrQyxpQkFBaUIsZ0JBQWdCLE9BQU8sMERBQTBELG1DQUFtQyx1QkFBdUIseUJBQXlCLGtCQUFrQixvQ0FBb0MsaUdBQWlHLGNBQWMsb0JBQW9CLCtCQUErQixZQUFZLDZCQUE2QiwwQkFBMEIsY0FBYyxnQ0FBZ0MsUUFBUSxxQkFBcUIsNkJBQTZCLCtEQUErRCxJQUFJLDRCQUE0QixvQkFBb0IsTUFBTSxvQkFBb0IsTUFBTSxvQkFBb0IsTUFBTSxzQkFBc0IsY0FBYyxzQkFBc0IsZUFBZSxLQUFLLE1BQU0sNkJBQTZCLElBQUksc0JBQXNCLHNCQUFzQix1QkFBdUIsa0NBQWtDLGlCQUFpQixrQ0FBa0Msc0JBQXNCLDBIQUEwSCxvQkFBb0IsZ0dBQWdHLEdBQUcsMEZBQTBGLGtGQUFrRixpQkFBaUIsbUNBQW1DLHFDQUFxQyxFQUFFLFNBQVMsaUJBQWlCLG9FQUFvRSxRQUFRLElBQUksMEJBQTBCLEtBQUssSUFBSSxjQUFjLEtBQUssSUFBSSxjQUFjLG1CQUFtQixRQUFRLElBQUksaUJBQWlCLFVBQVUsZ0RBQWdELGVBQWUseUpBQXlKLHdCQUF3QixrQkFBa0IsU0FBUyxXQUFXLDJCQUEyQixtQkFBbUIsc0JBQXNCLGlCQUFpQixVQUFVLGtCQUFrQixVQUFVLGdCQUFnQixVQUFVLGdCQUFnQixVQUFVLG1CQUFtQixVQUFVLHVCQUF1QixNQUFNLDRCQUE0QixtREFBbUQsbUJBQW1CLG1EQUFtRCxrQkFBa0IsZUFBZSxtQkFBbUIsd0JBQXdCLG1CQUFtQixXQUFXLFlBQVksNkNBQTZDLGtCQUFrQixFQUFFLGVBQWUsbUJBQW1CLGlCQUFpQixlQUFlLG1CQUFtQixtQ0FBbUMsZUFBZSxXQUFXLGVBQWUsYUFBYSxlQUFlLGlCQUFpQixpQkFBaUIsZ0JBQWdCLGdDQUFnQyxlQUFlLHdCQUF3QixlQUFlLDRCQUE0QixlQUFlLDBCQUEwQixlQUFlLHlJQUF5SSxpQkFBaUIsd0JBQXdCLDBCQUEwQixlQUFlLHdHQUF3RyxnTUFBZ00saUJBQWlCLDJCQUEyQixlQUFlLHlCQUF5Qiw4QkFBOEIsbUJBQW1CLHNFQUFzRSx5RkFBeUYsMkJBQTJCLGdDQUFnQyxzQkFBc0IsOENBQThDLGlDQUFpQyw4REFBOEQsbUJBQW1CLGlDQUFpQyxnQ0FBZ0Msc0JBQXNCLDhDQUE4QyxpQ0FBaUMsOERBQThELG1CQUFtQixpQ0FBaUMsZ0NBQWdDLHNCQUFzQiw4Q0FBOEMsbUJBQW1CLGlDQUFpQywrQ0FBK0MsNkNBQTZDLCtCQUErQixZQUFZLDhCQUE4Qix3Q0FBd0MsNkJBQTZCLEtBQUssa0NBQWtDLHVHQUF1RyxRQUFRLHlCQUF5QixlQUFlLCtCQUErQixpQkFBaUIsY0FBYywyREFBMkQsNkJBQTZCLDZDQUE2QyxRQUFRLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLDZDQUE2QyxnREFBZ0QsZ0RBQWdELCtDQUErQyxvQ0FBb0MsMENBQTBDLGNBQWMsOENBQThDLGtDQUFrQyxzQ0FBc0MsNkJBQTZCLCtDQUErQyxRQUFRLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLHNEQUFzRCwyQ0FBMkMsMEJBQTBCLE1BQU0sc0JBQXNCLG1CQUFtQixpQkFBaUIsb0NBQW9DLGVBQWUsaUJBQWlCLG9DQUFvQyx3Q0FBd0MsZUFBZSw4Q0FBOEMsa0JBQWtCLCtDQUErQyxLQUFLLE1BQU0seUJBQXlCLFNBQVMsWUFBWSxNQUFNLHNCQUFzQixtQkFBbUIsTUFBTSw0QkFBNEIsU0FBUyxlQUFlLHdCQUF3QixRQUFRLDBCQUEwQixtQkFBbUIsZUFBZSxXQUFXLGVBQWUsWUFBWSxlQUFlLDZCQUE2QixlQUFlLFlBQVkscUNBQXFDLDRCQUE0QixtQkFBbUIsNkJBQTZCLE1BQU0sa0JBQWtCLFVBQVUsMkJBQTJCLHNCQUFzQixLQUFLLGFBQWEsa0JBQWtCLHdCQUF3Qix1QkFBdUIsTUFBTSxFQUFFLGFBQWEsTUFBTSxZQUFZLGtDQUFrQyw0QkFBNEIsb0JBQW9CLDZCQUE2QixxQkFBcUIsMEJBQTBCLEVBQUUsd0JBQXdCLE1BQU0sRUFBRSxhQUFhLE1BQU0sRUFBRSw0Q0FBNEMsWUFBWSxvREFBb0QsTUFBTSwyQ0FBMkMsTUFBTSxTQUFTLE1BQU0sV0FBVyxNQUFNLEVBQUUsOEJBQThCLDRDQUE0QyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxPQUFPLGFBQWEscUJBQXFCLDhFQUE4RSxFQUFFLDRCQUE0Qix5REFBeUQsdUJBQXVCLDJDQUEyQywwQkFBMEIsMkNBQTJDLDZCQUE2Qix5Q0FBeUMsMEJBQTBCLHlDQUF5QyxxQkFBcUIsZ0JBQWdCLHFCQUFxQixnQkFBZ0IsR0FBRywyQkFBMkIsb0JBQW9CLDJGQUEyRixjQUFjLHlCQUF5QixnQkFBZ0IsMENBQTBDLFlBQVksUUFBUSxpQkFBaUIsb0JBQW9CLFNBQVMsb0JBQW9CLGtCQUFrQixxQkFBcUIsaUJBQWlCLGNBQWMseUNBQXlDLHlCQUF5QixzQ0FBc0MscUJBQXFCLEtBQUssNENBQTRDLFFBQVEsSUFBSSw2TUFBNk0sNENBQTRDLE1BQU0sc0NBQXNDLDRCQUE0QixZQUFZLFdBQVcsK0NBQStDLE1BQU0saUZBQWlGLFlBQVksa0VBQWtFLHlCQUF5Qix3REFBd0QsZ0JBQWdCLGdCQUFnQixnQ0FBZ0MsTUFBTSwrQkFBK0IsU0FBUyxNQUFNLHdGQUF3RixRQUFRLG9CQUFvQixFQUFFLHFCQUFxQixrQ0FBa0MscUJBQXFCLGtDQUFrQyxvQkFBb0Isa0NBQWtDLDRCQUE0QiwwREFBMEQsc0RBQXNELDBEQUEwRCx3QkFBd0IsbUNBQW1DLHNCQUFzQiwwREFBMEQsOEJBQThCLCtDQUErQyx1QkFBdUIsbUNBQW1DLHFCQUFxQiwrQ0FBK0MscUJBQXFCLHdFQUF3RSxxQkFBcUIsa0JBQWtCLHVCQUF1QixxQkFBcUIsb0JBQW9CLDhDQUE4QyxRQUFRLElBQUksZ0NBQWdDLFFBQVEsSUFBSSxrSkFBa0osUUFBUSxJQUFJLGlIQUFpSCxxQ0FBcUMsSUFBSSw4QkFBOEIsYUFBYSxJQUFJLFdBQVcscUNBQXFDLElBQUksOEJBQThCLGFBQWEsSUFBSSxXQUFXLHFDQUFxQyxJQUFJLDhCQUE4QixhQUFhLElBQUksV0FBVyxnQkFBZ0IsT0FBTyx1QkFBdUIsSUFBSSxZQUFZLFFBQVEsSUFBSSxLQUFLLFdBQVcsbUVBQW1FLGlDQUFpQyxNQUFNLCtCQUErQix1QkFBdUIsa0JBQWtCLHFCQUFxQixtQkFBbUIsbUJBQW1CLGtCQUFrQixtQkFBbUIsb0lBQW9JLDhEQUE4RCxxQkFBcUIsc0JBQXNCLGlCQUFpQixzRUFBc0UsaUJBQWlCLGNBQWMsa0JBQWtCLGtEQUFrRCxPQUFPLGNBQWMsaUJBQWlCLG1CQUFtQixrQkFBa0IsNERBQTRELE1BQU0sY0FBYyxLQUFLLGtCQUFrQixNQUFNLGVBQWUsa0JBQWtCLGVBQWUsZUFBZSxpQkFBaUIsdUJBQXVCLGVBQWUsaUNBQWlDLHVDQUF1QyxPQUFPLG1CQUFtQixFQUFFLEdBQUcsOEJBQThCLG1CQUFtQixjQUFjLGlCQUFpQixjQUFjLGtCQUFrQixxREFBcUQsY0FBYyxPQUFPLDZDQUE2Qyw0QkFBNEIsNERBQTRELHdCQUF3QixRQUFRLGlFQUFpRSxJQUFJLDBCQUEwQixrQ0FBa0Msd0JBQXdCLGtDQUFrQyxxQkFBcUIsa0NBQWtDLHVCQUF1Qiw0QkFBNEIsd0JBQXdCLG1CQUFtQixNQUFNLCtFQUErRSxLQUFLLEdBQUcsK0JBQStCLG1DQUFtQyxnQkFBZ0IsdUJBQXVCLDJCQUEyQixpQkFBaUIsc0RBQXNELGVBQWUsMEJBQTBCLE1BQU0saUNBQWlDLGdDQUFnQyxxQkFBcUIsa0NBQWtDLE1BQU0sdUJBQXVCLFdBQVcsVUFBVSwwQkFBMEIsa0NBQWtDLFNBQVMseUJBQXlCLCtCQUErQixjQUFjLHVDQUF1QyxxQkFBcUIsbVBBQW1QLDRDQUE0QyxpQkFBaUIsZUFBZSxvQkFBb0Isd0JBQXdCLE1BQU0sa0VBQWtFLElBQUksMkJBQTJCLGtDQUFrQyxvQkFBb0Isa0NBQWtDLDBCQUEwQixrQ0FBa0Msd0JBQXdCLGtDQUFrQyx3QkFBd0Isa0NBQWtDLElBQUksVUFBVSxlQUFlLFdBQVcsZUFBZSxXQUFXLG1CQUFtQixhQUFhLDBCQUEwQixpQ0FBaUMsZ0JBQWdCLDBCQUEwQiwwQkFBMEIscUJBQXFCLHNCQUFzQiwyQkFBMkIsb0NBQW9DLEVBQUUsa0JBQWtCLGtDQUFrQywwQ0FBMEMsUUFBUSxJQUFJLGdEQUFnRCxJQUFJLGlEQUFpRCxTQUFTLDRCQUE0QixrQ0FBa0MscUJBQXFCLHFFQUFxRSxzQkFBc0IscUVBQXFFLGlCQUFpQixrQ0FBa0MsaUJBQWlCLGtDQUFrQyxtQkFBbUIsa0NBQWtDLElBQUksY0FBYyx5QkFBeUIsMkVBQTJFLGlCQUFpQixvQkFBb0IsUUFBUSxJQUFJLHVEQUF1RCw2QkFBNkIscUJBQXFCLG1DQUFtQyxZQUFZLFlBQVksdUJBQXVCLGlEQUFpRCxRQUFRLElBQUksS0FBSyxZQUFZLElBQUksa0JBQWtCLHFCQUFxQixRQUFRLElBQUksb0JBQW9CLFNBQVMsb0JBQW9CLHdEQUF3RCxtQkFBbUIsSUFBSSxLQUFLLFlBQVksSUFBSSxrQkFBa0IsZ0NBQWdDLElBQUksS0FBSywwQ0FBMEMsSUFBSSxtQ0FBbUMsZ0JBQWdCLDZCQUE2QixRQUFRLElBQUksWUFBWSxTQUFTLG9CQUFvQiw4Q0FBOEMsUUFBUSxJQUFJLEtBQUssWUFBWSxJQUFJLGtCQUFrQixhQUFhLElBQUksa0JBQWtCLGFBQWEsSUFBSSxpQkFBaUIsUUFBUSxJQUFJLFdBQVcsU0FBUyxTQUFTLEVBQUUsZUFBZSx5QkFBeUIsZUFBZSxnQ0FBZ0MsTUFBTSxRQUFRLFNBQVMsZUFBZSx1Q0FBdUMsSUFBSSw2QkFBNkIsU0FBUyxlQUFlLHNCQUFzQixpQkFBaUIsY0FBYyxpQkFBaUIsc0RBQXNELGlCQUFpQix1Q0FBdUMsT0FBTyxZQUFZLFNBQVMsZUFBZSwwQkFBMEIsaUJBQWlCLHVCQUF1QixpQkFBaUIsbUJBQW1CLDREQUE0RCxpQkFBaUIsOEJBQThCLGlCQUFpQixrQ0FBa0MsdUJBQXVCLGVBQWUsaUNBQWlDLDhDQUE4QywySkFBMkosSUFBSSxLQUFLLGVBQWUsZ0JBQWdCLG1CQUFtQixNQUFNLCtCQUErQixJQUFJLE1BQU0sMkJBQTJCLDJCQUEyQixvQkFBb0Isa0VBQWtFLDRCQUE0QixRQUFRLElBQUksc0VBQXNFLG9CQUFvQixjQUFjLHlGQUF5RixlQUFlLDRCQUE0QixlQUFlLHdDQUF3QyxtQkFBbUIsa0NBQWtDLGNBQWMseUdBQXlHLGdDQUFnQyx1QkFBdUIsaUJBQWlCLDhCQUE4QixlQUFlLGlCQUFpQix5QkFBeUIsZUFBZSxtQkFBbUIsOEJBQThCLG1CQUFtQixrQkFBa0IsbUNBQW1DLG1CQUFtQixtQ0FBbUMsZUFBZSxPQUFPLDZCQUE2QixpQkFBaUIsNERBQTRELDRDQUE0QyxtQkFBbUIsZUFBZSwyQkFBMkIsdUJBQXVCLGVBQWUsbURBQW1ELHFCQUFxQixrQ0FBa0MsbUJBQW1CLGdCQUFnQixpQkFBaUIscUNBQXFDLHVFQUF1RSxlQUFlLFVBQVUsa0JBQWtCLHlCQUF5QixrQkFBa0IseUJBQXlCLElBQUksOEJBQThCLDRCQUE0QixnQkFBZ0Isa0hBQWtILE1BQU0sd0NBQXdDLGdCQUFnQixNQUFNLHlFQUF5RSxTQUFTLDJCQUEyQixrQ0FBa0MscUJBQXFCLHNDQUFzQyxvQkFBb0IsMERBQTBELGVBQWUsWUFBWSx5QkFBeUIsb0NBQW9DLEdBQUcsMEJBQTBCLGtEQUFrRCxnQkFBZ0Isa0dBQWtHLFVBQVUsOEJBQThCLGdCQUFnQixjQUFjLDBDQUEwQyxpQkFBaUIsT0FBTyw0QkFBNEIsT0FBTyxFQUFFLDJCQUEyQixpQkFBaUIsYUFBYSxhQUFhLE9BQU8sNkJBQTZCLE1BQU0sZUFBZSw4Q0FBOEMsMEJBQTBCLGtDQUFrQyxzQkFBc0IsbUVBQW1FLHVCQUF1QixtQ0FBbUMsU0FBUywwQkFBMEIsc0VBQXNFLGdCQUFnQiw0Q0FBNEMsU0FBUyxvQkFBb0IsT0FBTyxLQUFLLGtCQUFrQix1Q0FBdUMsSUFBSSxvQkFBb0IsbUdBQW1HLE9BQU8scUJBQXFCLElBQUksNkNBQTZDLEtBQUssZ0JBQWdCLGlCQUFpQixxREFBcUQsRUFBRSwrREFBK0QsaUJBQWlCLDRCQUE0QixFQUFFLFNBQVMsY0FBYyx5REFBeUQsYUFBYSxhQUFhLHNDQUFzQyxLQUFLLE9BQU8sc0NBQXNDLElBQUksaUNBQWlDLHVDQUF1Qyw2QkFBNkIsMkJBQTJCLE1BQU0scUVBQXFFLHFCQUFxQiwrR0FBK0csNERBQTRELFNBQVMsdUJBQXVCLGNBQWMscUNBQXFDLGNBQWMsMkJBQTJCLGdDQUFnQyxrQ0FBa0Msb0JBQW9CLDBEQUEwRCx3QkFBd0IsMERBQTBELFNBQVMsNkJBQTZCLG9FQUFvRSxnQkFBZ0Isb0NBQW9DLGlCQUFpQixpQkFBaUIsNkJBQTZCLDhCQUE4QixhQUFhLGFBQWEsb0JBQW9CLDZCQUE2QixXQUFXLEVBQUUsbUNBQW1DLEVBQUUsb0JBQW9CLGlCQUFpQiw2QkFBNkIsb0JBQW9CLG1CQUFtQixtQ0FBbUMsa0NBQWtDLDBCQUEwQixzQ0FBc0MsYUFBYSxvREFBb0QsSUFBSSxnQ0FBZ0Msa0NBQWtDLG9CQUFvQixtREFBbUQsd0JBQXdCLG1EQUFtRCxTQUFTLDZCQUE2QixzR0FBc0csZ0JBQWdCLDRCQUE0QixNQUFNLHNEQUFzRCxjQUFjLGlCQUFpQixnQkFBZ0Isb0lBQW9JLG9DQUFvQyxlQUFlLDhKQUE4Six3REFBd0QsY0FBYyxpQkFBaUIsZ0JBQWdCLDhCQUE4QixvQ0FBb0MsVUFBVSx3RkFBd0YsY0FBYyxnQkFBZ0IsNkNBQTZDLE1BQU0sd0NBQXdDLG1EQUFtRCxvQkFBb0Isb0RBQW9ELFlBQVksMEJBQTBCLE1BQU0sd0VBQXdFLHVDQUF1QyxLQUFLLDBCQUEwQixNQUFNLHdFQUF3RSx3Q0FBd0MsY0FBYyxxQkFBcUIsMEhBQTBILDBCQUEwQixrQ0FBa0MsdUJBQXVCLDhCQUE4QixjQUFjLGVBQWUsTUFBTSw2REFBNkQsMEJBQTBCLDBEQUEwRCxrQ0FBa0MscUJBQXFCLDREQUE0RCxzQkFBc0IseUNBQXlDLHFCQUFxQixrQ0FBa0Msb0JBQW9CLHFDQUFxQyxTQUFTLFdBQVcscUJBQXFCLHVCQUF1Qix3Q0FBd0MsVUFBVSxHQUFHLGtEQUFrRCxlQUFlLDBDQUEwQyxzQkFBc0IseUNBQXlDLGtCQUFrQixzQkFBc0IsbUJBQW1CLDRCQUE0QixrQkFBa0IsY0FBYyx1QkFBdUIsa0JBQWtCLGdCQUFnQixJQUFJLHFCQUFxQixXQUFXLFlBQVksUUFBUSxnQkFBZ0IscUJBQXFCLGtEQUFrRCw2REFBNkQsT0FBTywrQ0FBK0MsbUJBQW1CLDBCQUEwQixzQkFBc0IsaUJBQWlCLGdFQUFnRSxpQkFBaUIsbURBQW1ELGlCQUFpQixnQkFBZ0IsbUZBQW1GLGdIQUFnSCxpQkFBaUIsZ0NBQWdDLG1CQUFtQixjQUFjLE1BQU0saUJBQWlCLHlCQUF5QixnREFBZ0Qsc0ZBQXNGLCtCQUErQiw4QkFBOEIsZUFBZSxtRkFBbUYsdUJBQXVCLHlCQUF5QixtQkFBbUIsMEJBQTBCLDJCQUEyQixRQUFRLGFBQWEsb0RBQW9ELG9DQUFvQyxjQUFjLFlBQVkscUJBQXFCLGFBQWEscUJBQXFCLGlEQUFpRCxvQkFBb0IscUNBQXFDLHlCQUF5QixtQ0FBbUMsb0JBQW9CLHFDQUFxQywwQkFBMEIscUNBQXFDLG9CQUFvQixnQkFBZ0IsMkJBQTJCLGtCQUFrQixtQkFBbUIsb0JBQW9CLGtCQUFrQixtQkFBbUIsV0FBVyxxQkFBcUIsUUFBUSxxQkFBcUIsZUFBZSw2Q0FBNkMsdUJBQXVCLDJCQUEyQixjQUFjLDREQUE0RCxjQUFjLHVDQUF1QyxjQUFjLGVBQWUscUJBQXFCLHVCQUF1QixxQkFBcUIsNEVBQTRFLG1CQUFtQix1REFBdUQsa0JBQWtCLDZCQUE2QixpQ0FBaUMsbUJBQW1CLDhFQUE4RSxrQkFBa0IsTUFBTSxLQUFLLElBQUksZ0JBQWdCLElBQUksbUJBQW1CLGFBQWEsc0JBQXNCLE1BQU0sZUFBZSxJQUFJLG1CQUFtQixRQUFRLE9BQU8sS0FBSyxlQUFlLFNBQVMsS0FBSyxlQUFlLFVBQVUsMkJBQTJCLCtCQUErQiw4REFBOEQsdUNBQXVDLG1CQUFtQiw0QkFBNEIsdUNBQXVDLGtCQUFrQiwwQkFBMEIsZUFBZSwrQ0FBK0MsMkJBQTJCLGtCQUFrQixxQkFBcUIsa0JBQWtCLHdCQUF3QixlQUFlLG1CQUFtQiwwQ0FBMEMsdUJBQXVCLHlCQUF5QixzQkFBc0IsY0FBYyxlQUFlLHFCQUFxQix1QkFBdUIscUJBQXFCLGtFQUFrRSxvQkFBb0IsZ0JBQWdCLDJCQUEyQixrQkFBa0IsbUJBQW1CLDBCQUEwQix1QkFBdUIsc0VBQXNFLGtCQUFrQix3QkFBd0IsZUFBZSwyQkFBMkIseUJBQXlCLGtDQUFrQyw0QkFBNEIsdUJBQXVCLFVBQVUsY0FBYywwRUFBMEUsZ0JBQWdCLHlDQUF5QyxhQUFhLEVBQUUscUJBQXFCLDhCQUE4QixhQUFhLDBCQUEwQixNQUFNLG1DQUFtQyw0QkFBNEIsb0JBQW9CLG9DQUFvQyxzQkFBc0IsT0FBTyw0QkFBNEIsMEJBQTBCLGtFQUFrRSw2QkFBNkIsNEJBQTRCLElBQUksaUNBQWlDLDBCQUEwQixrRkFBa0Ysa0VBQWtFLGlDQUFpQyxJQUFJLDZCQUE2QixvREFBb0QsMkRBQTJELGdEQUFnRCwyQkFBMkIsSUFBSSxrQ0FBa0Msb0RBQW9ELHVFQUF1RSwyRkFBMkYsZ0NBQWdDLElBQUksdUJBQXVCLFVBQVUseUJBQXlCLG1CQUFtQixrQkFBa0IsZUFBZSxtQkFBbUIsS0FBSyxpQkFBaUIsRUFBRSwrQkFBK0IsbUNBQW1DLCtCQUErQixtQ0FBbUMsZ0NBQWdDLG1DQUFtQyxnQ0FBZ0Msb0NBQW9DLG1wQkFBbXBCLGNBQWMsU0FBUyw0QkFBNEIsdUJBQXVCLE1BQU0sYUFBYSxtQkFBbUIsU0FBUyxNQUFNLDBCQUEwQixTQUFTLGNBQWMsd0NBQXdDLHFCQUFxQiw4REFBOEQsb0JBQW9CLHFDQUFxQyx1QkFBdUIsVUFBVSwyQkFBMkIsb0ZBQW9GLGtCQUFrQixlQUFlLFdBQVcsUUFBUSw2QkFBNkIseUJBQXlCLFFBQVEsY0FBYyxzREFBc0QsYUFBYSx1Q0FBdUMscUJBQXFCLDhEQUE4RCxvQkFBb0IscUNBQXFDLDJCQUEyQiw4Q0FBOEMsa0JBQWtCLGlCQUFpQixXQUFXLFlBQVksOEJBQThCLHVCQUF1QixjQUFjLGdDQUFnQyxxQkFBcUIsbUNBQW1DLG9CQUFvQixtQ0FBbUMsMkJBQTJCLHFDQUFxQyxrQkFBa0IsZUFBZSxTQUFTLGFBQWEsNkJBQTZCLHFCQUFxQixjQUFjLFNBQVMsV0FBVyw2QkFBNkIsMENBQTBDLG9CQUFvQixnQkFBZ0IsMkJBQTJCLGtCQUFrQixrQkFBa0IsYUFBYSxTQUFTLFFBQVEsU0FBUyxzQkFBc0IsdUNBQXVDLGFBQWEsc0tBQXNLLDhEQUE4RCx5Q0FBeUMsbUtBQW1LLHdFQUF3RSxnQ0FBZ0MseUJBQXlCLGNBQWMsMENBQTBDLFdBQVcsTUFBTSx3RUFBd0UsZ0NBQWdDLDJCQUEyQixjQUFjLDBDQUEwQyxXQUFXLHNFQUFzRSxZQUFZLFlBQVksU0FBUyxnTkFBZ04sb0RBQW9ELFlBQVksa0VBQWtFLDhNQUE4TSx5QkFBeUIsWUFBWSxvRUFBb0UsOE1BQThNLHlCQUF5Qiw2SkFBNkosOEJBQThCLGdCQUFnQiwyRUFBMkUsaUNBQWlDLHNDQUFzQywyQkFBMkIsc0NBQXNDLDRCQUE0QixzQ0FBc0MseUJBQXlCLCtDQUErQywwQkFBMEIsc0NBQXNDLHdCQUF3QixzQ0FBc0Msd0JBQXdCLHNDQUFzQyx1QkFBdUIseUhBQXlILG9DQUFvQyxJQUFJLGNBQWMsZUFBZSxxQkFBcUIsZUFBZSxxQkFBcUIsZUFBZSxvQkFBb0IsZUFBZSxrQkFBa0IsZUFBZSxxQkFBcUIscUJBQXFCLDRCQUE0Qix1QkFBdUIscVNBQXFTLDREQUE0RCxlQUFlLHFDQUFxQyxjQUFjLGdEQUFnRCxhQUFhLHNCQUFzQixLQUFLLE1BQU0sMEZBQTBGLDhDQUE4Qyx1QkFBdUIsa0NBQWtDLGlCQUFpQixrQ0FBa0MsdUJBQXVCLGtDQUFrQywyQkFBMkIsK0VBQStFLHVCQUF1QixrQ0FBa0MsR0FBRyxzQkFBc0IsY0FBYyxjQUFjLDhDQUE4Qyw0Q0FBNEMsS0FBSyxNQUFNLDJDQUEyQyxzQkFBc0Isa0JBQWtCLG9FQUFvRSwyQkFBMkIsdUNBQXVDLEtBQUssTUFBTSxrQ0FBa0Msa0NBQWtDLEtBQUssTUFBTSxnRUFBZ0Usa0JBQWtCLDRCQUE0Qix3Q0FBd0MsS0FBSyxNQUFNLG9DQUFvQyw4QkFBOEIsS0FBSyxNQUFNLGtFQUFrRSxrQkFBa0Isc0JBQXNCLGlCQUFpQixrRUFBa0UsT0FBTyxrRUFBa0UsYUFBYSx3QkFBd0IsMkNBQTJDLCtCQUErQix1REFBdUQsaUNBQWlDLHlGQUF5RixzQkFBc0IsOENBQThDLCtCQUErQix1REFBdUQsS0FBSyxNQUFNLGlDQUFpQyxnQkFBZ0Isc0JBQXNCLEtBQUssTUFBTSx1SEFBdUgsS0FBSyxLQUFLLE9BQU8sNEZBQTRGLFNBQVMsTUFBTSxFQUFFLGVBQWUsb0NBQW9DLGVBQWUsdUJBQXVCLGVBQWUsZ0RBQWdELE1BQU0sa0NBQWtDLGtCQUFrQixlQUFlLGdEQUFnRCxNQUFNLGtDQUFrQyxrQkFBa0IsaUJBQWlCLHFFQUFxRSwyREFBMkQsNEZBQTRGLHVHQUF1RyxZQUFZLFdBQVcsMkVBQTJFLE1BQU0sV0FBVyw2REFBNkQsU0FBUyxpQkFBaUIsc0RBQXNELE1BQU0sc0RBQXNELFNBQVMsZUFBZSwyQkFBMkIsbUhBQW1ILG1CQUFtQixPQUFPLGdFQUFnRSx3Q0FBd0MsaUJBQWlCLCtDQUErQyx5QkFBeUIsb0NBQW9DLEVBQUUseURBQXlELG1CQUFtQixzRkFBc0YsaUJBQWlCLDhCQUE4QixlQUFlLDhCQUE4QixNQUFNLCtEQUErRCxTQUFTLGVBQWUsd0RBQXdELGNBQWMsNEVBQTRFLFNBQVMsMEJBQTBCLFNBQVMsT0FBTyxhQUFhLGdEQUFnRCxLQUFLLE1BQU0sbUpBQW1KLDhDQUE4Qyx1QkFBdUIsb0NBQW9DLGtCQUFrQixrQ0FBa0Msa0JBQWtCLGtDQUFrQyxpQkFBaUIsb0NBQW9DLGtCQUFrQixrQ0FBa0Msa0JBQWtCLGtDQUFrQyx1QkFBdUIsa0NBQWtDLDJCQUEyQixpSEFBaUgsdUJBQXVCLGtDQUFrQyxHQUFHLGVBQWUsZ0JBQWdCLGVBQWUsZ0JBQWdCLGNBQWMsVUFBVSxjQUFjLGVBQWUsZUFBZSxzQkFBc0IsdUVBQXVFLDZCQUE2QixhQUFhLHdEQUF3RCxtREFBbUQsYUFBYSw4QkFBOEIsYUFBYSxnTEFBZ0wsd0JBQXdCLDZCQUE2QixnQkFBZ0Isd0NBQXdDLCtKQUErSixvQkFBb0IsMEVBQTBFLE9BQU8saUZBQWlGLGtCQUFrQix5Q0FBeUMsb0JBQW9CLGlCQUFpQiw0QkFBNEIsc0NBQXNDLHNCQUFzQixzQ0FBc0Msc0JBQXNCLHNDQUFzQywwQkFBMEIsc0NBQXNDLHdCQUF3QixzQ0FBc0MsR0FBRywyQkFBMkIsbUJBQW1CLGdCQUFnQiw4REFBOEQsVUFBVSxFQUFFLFVBQVUsSUFBSSxxREFBcUQsNEJBQTRCLHNDQUFzQyxzQkFBc0Isc0NBQXNDLDBCQUEwQixrQ0FBa0MsR0FBRyxrQ0FBa0MsMkNBQTJDLGdDQUFnQyxzQ0FBc0Msa0JBQWtCLCtDQUErQyxxQ0FBcUMsU0FBUyxHQUFHLHlCQUF5QixjQUFjLGdCQUFnQix1REFBdUQsMEJBQTBCLHNDQUFzQyxvQkFBb0Isc0NBQXNDLElBQUksY0FBYyw0QkFBNEIsdUJBQXVCLHlHQUF5RyxxQkFBcUIsaUNBQWlDLDRDQUE0QyxvQkFBb0IscUJBQXFCLDhEQUE4RCw2QkFBNkIsK0JBQStCLDZDQUE2QywyQkFBMkIsK0JBQStCLDZDQUE2QyxFQUFFLDRCQUE0Qix1Q0FBdUMseUJBQXlCLDJDQUEyQyw2Q0FBNkMsb0JBQW9CLE1BQU0sRUFBRSxhQUFhLGtDQUFrQyxNQUFNLG1DQUFtQyxpQkFBaUIseUJBQXlCLHdDQUF3QyxnQkFBZ0IsZUFBZSxrQkFBa0IsVUFBVSw4S0FBOEssbUJBQW1CLHNDQUFzQyxxQkFBcUIscUJBQXFCLHlCQUF5QixpREFBaUQsaURBQWlELHFCQUFxQix1QkFBdUIsR0FBRyxlQUFlLGtDQUFrQyxvQkFBb0IsZUFBZSx1REFBdUQsdUJBQXVCLDZCQUE2QixpQkFBaUIsU0FBUyxjQUFjLHNCQUFzQixzSUFBc0ksV0FBVyxtREFBbUQsb0JBQW9CLDBDQUEwQyxnR0FBZ0csc0NBQXNDLHdCQUF3QixjQUFjLGdDQUFnQyxJQUFJLGtCQUFrQiw2RkFBNkYsOEJBQThCLGNBQWMsOEJBQThCLE1BQU0sY0FBYyxpRkFBaUYsbUJBQW1CLHlGQUF5Rix3RUFBd0UsaURBQWlELDBDQUEwQyxPQUFPLDJCQUEyQixNQUFNLEVBQUUsYUFBYSxrQ0FBa0MsTUFBTSw2SEFBNkgsaUJBQWlCLDBCQUEwQiw4Q0FBOEMsT0FBTywyQkFBMkIsTUFBTSxtQ0FBbUMsTUFBTSxZQUFZLGtEQUFrRCx3QkFBd0IsTUFBTSxtQ0FBbUMsaUJBQWlCLHVCQUF1QixhQUFhLGdDQUFnQywwQkFBMEIsSUFBSSxLQUFLLGFBQWEsbUNBQW1DLElBQUksa0RBQWtELG9DQUFvQyx3QkFBd0IsK0JBQStCLHFGQUFxRix3QkFBd0IsYUFBYSx1QkFBdUIsRUFBRSx1QkFBdUIsdUJBQXVCLDZCQUE2QixZQUFZLDZDQUE2QyxhQUFhLHdCQUF3QixhQUFhLHdDQUF3QywrQ0FBK0MsbUNBQW1DLDZDQUE2QyxvQ0FBb0MsMENBQTBDLEVBQUUsRUFBRSxhQUFhLG1DQUFtQyw2QkFBNkIsb0NBQW9DLDBCQUEwQixFQUFFLEVBQUUsRUFBRSw0QkFBNEIsc0JBQXNCLGtEQUFrRCw0REFBNEQsc0JBQXNCLDJDQUEyQyxlQUFlLDRDQUE0QyxzQkFBc0IsMkJBQTJCLEVBQUUsMEJBQTBCLHVCQUF1QixRQUFRLHVCQUF1Qiw0Q0FBNEMsWUFBWSxLQUFLLGFBQWEsNkJBQTZCLHdDQUF3QyxtQ0FBbUMsZ0VBQWdFLHFDQUFxQyxpQ0FBaUMsRUFBRSxFQUFFLEVBQUUsK0JBQStCLHNFQUFzRSwrRUFBK0Usc0JBQXNCLGtDQUFrQyxFQUFFLHFCQUFxQiw0QkFBNEIsc0JBQXNCLHFCQUFxQiw2Q0FBNkMsTUFBTSwwREFBMEQsRUFBRSxxQkFBcUIsK0JBQStCLDBIQUEwSCxlQUFlLEdBQUcsc0JBQXNCLCtCQUErQiwrRkFBK0Ysd0NBQXdDLG1CQUFtQixnQkFBZ0IsR0FBRyx5QkFBeUIsK0JBQStCLGtHQUFrRyxzREFBc0QsOEJBQThCLG1CQUFtQixHQUFHLHVCQUF1QiwrQkFBK0IsdUJBQXVCLGNBQWMsSUFBSSw2QkFBNkIsb0NBQW9DLEVBQUUsUUFBUSxXQUFXLHlCQUF5QixjQUFjLG1FQUFtRSxFQUFFLFlBQVksMEJBQTBCLHVFQUF1RSxJQUFJLEtBQUssYUFBYSxtQ0FBbUMsSUFBSSwwQkFBMEIsK0VBQStFLFlBQVksaUJBQWlCLHVCQUF1Qix3REFBd0QsY0FBYyxrQkFBa0IsMGZBQTBmLGtDQUFrQyxnSkFBZ0osK1lBQStZLDBCQUEwQixnQkFBZ0IsZUFBZSxtQ0FBbUMsNEJBQTRCLEVBQUUsMkJBQTJCLGtDQUFrQyxzQkFBc0IsZ0RBQWdELG9CQUFvQiw2Q0FBNkMsMEJBQTBCLGtDQUFrQywwQkFBMEIsa0NBQWtDLHdCQUF3Qix1QkFBdUIsc0NBQXNDLDZCQUE2QixtQ0FBbUMsNkJBQTZCLG1DQUFtQywyQkFBMkIsbUNBQW1DLDRCQUE0QiwyQkFBMkIsSUFBSSxvQkFBb0IsK0JBQStCLG1CQUFtQiwrQkFBK0IsV0FBVyw4Q0FBOEMsRUFBRSxtQkFBbUIsK0JBQStCLFdBQVcsOENBQThDLEVBQUUsdUJBQXVCLCtGQUErRixjQUFjLGtCQUFrQixnTUFBZ00sbU5BQW1OLHVDQUF1QyxpRUFBaUUsa0JBQWtCLDZCQUE2QixhQUFhLHNDQUFzQyw4QkFBOEIsdUJBQXVCLDhCQUE4Qix5R0FBeUcsMENBQTBDLDRIQUE0SCxFQUFFLGNBQWMsb0RBQW9ELDZEQUE2RCxFQUFFLGNBQWMsa0dBQWtHLGNBQWMsbUdBQW1HLGFBQWEsa09BQWtPLGlFQUFpRSw4QkFBOEIsMkRBQTJELEVBQUUsb01BQW9NLFdBQVcsb0NBQW9DLGdEQUFnRCxtQ0FBbUMsYUFBYSxzQkFBc0IscU1BQXFNLG9DQUFvQyxHQUFHLGtCQUFrQix5REFBeUQsa01BQWtNLGFBQWEsd1NBQXdTLGdCQUFnQixFQUFFLGtJQUFrSSxrQkFBa0IsTUFBTSwyQkFBMkIsa0JBQWtCLDhCQUE4QixnQkFBZ0IscUJBQXFCLDhFQUE4RSwyQkFBMkIsa0JBQWtCLEVBQUUsaUNBQWlDLDRCQUE0Qiw0QkFBNEIseUJBQXlCLDJCQUEyQixHQUFHLDhCQUE4QixlQUFlLDJCQUEyQixLQUFLLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLEtBQUssMkJBQTJCLEtBQUssZ0JBQWdCLEdBQUcsRUFBRSxpQkFBaUIsaURBQWlELGlCQUFpQixpREFBaUQscUJBQXFCLGdHQUFnRyxzQkFBc0IsY0FBYyxvZkFBb2Ysb0JBQW9CLCtDQUErQyxvQkFBb0IsdUNBQXVDLHFCQUFxQixRQUFRLDRIQUE0SCx1SUFBdUksZUFBZSx1QkFBdUIsbUJBQW1CLGNBQWMsWUFBWSxnQkFBZ0IscUNBQXFDLGlEQUFpRCxpQkFBaUIsc0RBQXNELDRCQUE0Qix1QkFBdUIsc0JBQXNCLDJEQUEyRCxzQkFBc0Isc0VBQXNFLGNBQWMsK0NBQStDLDZDQUE2QyxrQkFBa0IsS0FBSyxnQkFBZ0IsV0FBVyxTQUFTLGtCQUFrQixLQUFLLGVBQWUsWUFBWSxVQUFVLEtBQUssdUJBQXVCLDZFQUE2RSxRQUFRLElBQUksNERBQTRELHlCQUF5QixTQUFTLG1CQUFtQix3QkFBd0IsU0FBUyxlQUFlLG1CQUFtQixvR0FBb0csa0JBQWtCLHVCQUF1QixrREFBa0QscUNBQXFDLGVBQWUseUNBQXlDLGFBQWEsc0JBQXNCLHlGQUF5RixxQ0FBcUMsZUFBZSx5Q0FBeUMsYUFBYSxzQkFBc0IsdUZBQXVGLCtCQUErQiw2Q0FBNkMsZUFBZSwwQ0FBMEMsYUFBYSxvQkFBb0IsZ0ZBQWdGLGlDQUFpQyxlQUFlLDJCQUEyQixhQUFhLG9CQUFvQiw0REFBNEQsOFhBQThYLDJCQUEyQixxQkFBcUIsc0JBQXNCLHVCQUF1QixzQkFBc0IsdUJBQXVCLG9CQUFvQix1QkFBdUIsa0NBQWtDLHVCQUF1QixzQkFBc0Isb0JBQW9CLG9CQUFvQixrQkFBa0Isc0JBQXNCLDhDQUE4QyxpQkFBaUIsb0NBQW9DLG1DQUFtQywwQkFBMEIsc0JBQXNCLGtDQUFrQyw4QkFBOEIscUJBQXFCLHlCQUF5Qix1QkFBdUIseUJBQXlCLHVCQUF1Qix1QkFBdUIsdUJBQXVCLHdDQUF3Qyx1QkFBdUIseUJBQXlCLG9CQUFvQix1QkFBdUIsY0FBYyxlQUFlLGtDQUFrQyxlQUFlLHNCQUFzQix1RUFBdUUsNENBQTRDLGtDQUFrQyx1QkFBdUIsc0JBQXNCLHVCQUF1QixxQ0FBcUMsc0JBQXNCLDhCQUE4QixzQkFBc0IscUJBQXFCLHNEQUFzRCxHQUFHLEdBQUcsdUJBQXVCLHFCQUFxQixZQUFZLG1CQUFtQixrREFBa0QsR0FBRyx1QkFBdUIsYUFBYSwrQ0FBK0MsZ0JBQWdCLDBCQUEwQixnQkFBZ0IsMkNBQTJDLElBQUksS0FBSyxnQkFBZ0IsY0FBYyxTQUFTLHdCQUF3QixlQUFlLGtCQUFrQixrQkFBa0IsZ0JBQWdCLGdDQUFnQyw4QkFBOEIsMEJBQTBCLGVBQWUsRUFBRSxxQkFBcUIsaUJBQWlCLEVBQUUsNkJBQTZCLElBQUksS0FBSyxvQkFBb0IsbUJBQW1CLHVDQUF1QyxTQUFTLFFBQVEsK0JBQStCLElBQUksS0FBSyx3Q0FBd0MsSUFBSSxLQUFLLFdBQVcsY0FBYyx1Q0FBdUMsa0JBQWtCLG1GQUFtRixLQUFLLFdBQVcsOEJBQThCLFlBQVksS0FBSyxLQUFLLGdCQUFnQiwwQkFBMEIsWUFBWSxJQUFJLEtBQUssV0FBVyxrQ0FBa0MsY0FBYyx5QkFBeUIsZ0JBQWdCLEtBQUssS0FBSyxjQUFjLHdCQUF3QixPQUFPLFNBQVMsdUJBQXVCLFlBQVksS0FBSyxLQUFLLGNBQWMsZ0JBQWdCLE9BQU8sU0FBUyxFQUFFLG1CQUFtQixXQUFXLEtBQUssa0JBQWtCLGlCQUFpQixVQUFVLEVBQUUsdUNBQXVDLHVCQUF1QixhQUFhLFlBQVksaUZBQWlGLGdCQUFnQixtQ0FBbUMsVUFBVSxZQUFZLGlNQUFpTSxZQUFZLFdBQVcsS0FBSywwRkFBMEYsc0JBQXNCLGNBQWMsWUFBWSxTQUFTLGNBQWMsb0JBQW9CLFFBQVEsNENBQTRDLE9BQU8sS0FBSywrQkFBK0IsVUFBVSxTQUFTLDBCQUEwQixHQUFHLHVCQUF1QixhQUFhLFNBQVMscUNBQXFDLHNEQUFzRCxrQ0FBa0Msc0JBQXNCLDBCQUEwQiw4QkFBOEIsMEJBQTBCLDBCQUEwQixtQkFBbUIsMEJBQTBCLG9CQUFvQiwyQkFBMkIsc0JBQXNCLDBCQUEwQiw4QkFBOEIsMEJBQTBCLDBCQUEwQixtQkFBbUIsMEJBQTBCLG9CQUFvQixVQUFVLE9BQU8sZUFBZSxzQkFBc0IsMkVBQTJFLDhCQUE4Qiw0RUFBNEUsMEJBQTBCLG9EQUFvRCwwQkFBMEIscURBQXFELDJCQUEyQiw0QkFBNEIsZ0NBQWdDLHFDQUFxQyxnQ0FBZ0Msb0RBQW9ELHNDQUFzQyxvQ0FBb0MscUNBQXFDLGdDQUFnQyxFQUFFLFVBQVUsdUJBQXVCLHFEQUFxRCw4QkFBOEIsd0JBQXdCLDBDQUEwQyx3QkFBd0IsbUJBQW1CLGlCQUFpQixFQUFFLDJDQUEyQyx1QkFBdUIsc0JBQXNCLFVBQVUsNEJBQTRCLDhCQUE4Qiw4QkFBOEIsOEJBQThCLGdDQUFnQyxnQ0FBZ0Msa0NBQWtDLGtDQUFrQyx5QkFBeUIsK0NBQStDLEdBQUcsdUJBQXVCLGFBQWEsd0JBQXdCLDhDQUE4Qyx5Q0FBeUMsUUFBUSx1QkFBdUIsSUFBSSxXQUFXLFNBQVMsUUFBUSxNQUFNLG1FQUFtRSxhQUFhLGlCQUFpQixxQkFBcUIsMEJBQTBCLElBQUksV0FBVyxhQUFhLElBQUksb0JBQW9CLFNBQVMsUUFBUSxVQUFVLEdBQUcsdUJBQXVCLGFBQWEsa0JBQWtCLE9BQU8seUVBQXlFLGVBQWUsMkJBQTJCLG1CQUFtQixtQkFBbUIsSUFBSSwrRkFBK0Ysa0JBQWtCLFdBQVcsNEJBQTRCLFNBQVMsMEJBQTBCLGtCQUFrQixZQUFZLElBQUksaUVBQWlFLGtDQUFrQyx3QkFBd0Isc0JBQXNCLFFBQVEsNEJBQTRCLElBQUksMEJBQTBCLGVBQWUsS0FBSywwQkFBMEIseUNBQXlDLGdCQUFnQixlQUFlLFNBQVMsVUFBVSxHQUFHLGlFQUFpRSxLQUFLLG9DQUFvQyxNQUFNLGdCQUFnQixTQUFTLDBCQUEwQixNQUFNLHlCQUF5QixRQUFRLEdBQUcsMEVBQTBFLGFBQWEsNENBQTRDLHdCQUF3QixHQUFHLDBCQUEwQixFQUFFLEVBQUUsb0JBQW9CLHFCQUFxQixLQUFLLFFBQVEsWUFBWSxvR0FBb0csSUFBSSxrQkFBa0IsV0FBVyxJQUFJLFVBQVUsZ0JBQWdCLGdCQUFnQix5R0FBeUcsbUJBQW1CLDRFQUE0RSxRQUFRLGNBQWMsMEJBQTBCLHdCQUF3QixzQkFBc0IsV0FBVyxFQUFFLHNFQUFzRSxTQUFTLFNBQVMsb0JBQW9CLDBCQUEwQix3QkFBd0Isa09BQWtPLHFCQUFxQixFQUFFLDhGQUE4Rix3R0FBd0csVUFBVSxLQUFLLFVBQVUsRUFBRSw4RkFBOEYsVUFBVSxLQUFLLFVBQVUsRUFBRSw4RkFBOEYsVUFBVSxTQUFTLGtCQUFrQixRQUFRLEdBQUcsMkJBQTJCLG9IQUFvSCxhQUFhLFNBQVMsd0JBQXdCLFFBQVEsR0FBRyxzQkFBc0IsV0FBVyxFQUFFLHNCQUFzQixhQUFhLHNFQUFzRSxTQUFTLFNBQVMsYUFBYSxnQkFBZ0IsZUFBZSxnQkFBZ0IsbUJBQW1CLDZCQUE2QixHQUFHLHdDQUF3QyxnREFBZ0QsY0FBYyxjQUFjLG9CQUFvQiw4QkFBOEIseUJBQXlCLFNBQVMsYUFBYSxrQkFBa0IsdUJBQXVCLDRCQUE0QixTQUFTLEtBQUssTUFBTSwwSUFBMEksU0FBUyxPQUFPLGFBQWEsYUFBYSxzQkFBc0IscU5BQXFOLGNBQWMsWUFBWSxHQUFHLHdCQUF3QixhQUFhLFNBQVMsNEJBQTRCLHlGQUF5RixnQkFBZ0Isc0RBQXNELFFBQVEsR0FBRyxrRkFBa0YsU0FBUyxhQUFhLFNBQVMscUNBQXFDLHlDQUF5QyxHQUFHLGdHQUFnRyxhQUFhLFNBQVMsTUFBTSxrQkFBa0IsOENBQThDLGdCQUFnQiw0QkFBNEIsb0JBQW9CLHlGQUF5RixnQkFBZ0IsZ0dBQWdHLGdCQUFnQixnRUFBZ0UsaUZBQWlGLG9CQUFvQixtQkFBbUIsK0VBQStFLGNBQWMsd0dBQXdHLGtCQUFrQixxSEFBcUgsb0JBQW9CLHNCQUFzQixJQUFJLHdDQUF3QyxTQUFTLDhEQUE4RCw2REFBNkQsNEJBQTRCLElBQUksS0FBSyx1Q0FBdUMsd0JBQXdCLFFBQVEsUUFBUSxXQUFXLE1BQU0sbUNBQW1DLHFFQUFxRSx3Q0FBd0MsdUJBQXVCLDRCQUE0QixrQ0FBa0MsU0FBUyxXQUFXLEtBQUssWUFBWSxjQUFjLGdCQUFnQixJQUFJLGdDQUFnQyx3Q0FBd0MsVUFBVSxHQUFHLHVCQUF1QixhQUFhLHdCQUF3QixlQUFlLHVCQUF1QixJQUFJLFlBQVksSUFBSSxLQUFLLFdBQVcsd0JBQXdCLFVBQVUsS0FBSywyQkFBMkIsSUFBSSxZQUFZLFlBQVksSUFBSSxLQUFLLFdBQVcsc0NBQXNDLFlBQVksSUFBSSx5QkFBeUIsV0FBVyxFQUFFLFVBQVUsZ0JBQWdCLEVBQUUsU0FBUyx1QkFBdUIseUNBQXlDLHNCQUFzQix5QkFBeUIsTUFBTSxjQUFjLGFBQWEsMEJBQTBCLGNBQWMsaURBQWlELG9CQUFvQixtRUFBbUUsMEJBQTBCLEVBQUUsSUFBSSxhQUFhLGNBQWMsS0FBSyxVQUFVLFdBQVcsUUFBUSxpQkFBaUIsaUJBQWlCLGdCQUFnQiw2QkFBNkIsVUFBVSxjQUFjLGFBQWEsWUFBWSxXQUFXLGdEQUFnRCxZQUFZLEVBQUUsSUFBSSwrQ0FBK0Msa0JBQWtCLFlBQVksV0FBVyxnQkFBZ0IsY0FBYywrQkFBK0IsV0FBVyxZQUFZLDBDQUEwQyxnREFBZ0Qsd0JBQXdCLEVBQUUsR0FBRyxJQUFJLG1CQUFtQixJQUFJLEVBQUUsV0FBVyxnQ0FBZ0MsWUFBWSxXQUFXLGdCQUFnQixjQUFjLEtBQUssY0FBYyxpQkFBaUIsVUFBVSxTQUFTLFVBQVUsRUFBRSxvQ0FBb0MsdUJBQXVCLGFBQWEsb0NBQW9DLHFCQUFxQiw4QkFBOEIsRUFBRSwrQkFBK0IsdUJBQXVCLGFBQWEseURBQXlELEVBQUUsb0NBQW9DLHVCQUF1QixhQUFhLHFCQUFxQixxQkFBcUIsb0ZBQW9GLEdBQUcsdUJBQXVCLGFBQWEsa1RBQWtULHFEQUFxRCx5QkFBeUIsc0JBQXNCLHNEQUFzRCxnRUFBZ0UsS0FBSyxPQUFPLGlGQUFpRixTQUFTLGdDQUFnQyxJQUFJLGNBQWMsVUFBVSxLQUFLLCtCQUErQiwrQ0FBK0MsUUFBUSxnRkFBZ0YsSUFBSSxjQUFjLG9DQUFvQyxJQUFJLDRIQUE0SCxJQUFJLG9EQUFvRCxJQUFJLDhEQUE4RCx1Q0FBdUMsRUFBRSxnUEFBZ1AsdUJBQXVCLGFBQWEsb0RBQW9ELGlCQUFpQixJQUFJLHNCQUFzQixzQkFBc0IsR0FBRyx1QkFBdUIsYUFBYSxzREFBc0Qsc0JBQXNCLDJDQUEyQyxFQUFFLGFBQWEsdUJBQXVCLGFBQWEsdUJBQXVCLEdBQUcsdUJBQXVCLGFBQWEsd0RBQXdELEVBQUUsb0NBQW9DLHVCQUF1QixhQUFhLHFCQUFxQixnQkFBZ0Isc0RBQXNELEdBQUcsdUJBQXVCLGFBQWEsc0JBQXNCLCtDQUErQyxHQUFHLHVCQUF1QixhQUFhLGdEQUFnRCxzQkFBc0IsaUVBQWlFLEVBQUUsbUJBQW1CLHVCQUF1QixhQUFhLG1DQUFtQyxzQkFBc0Isa0JBQWtCLEVBQUUsbUJBQW1CLHVCQUF1QixhQUFhLDJKQUEySix3QkFBd0IscUJBQXFCLG9DQUFvQyw2SUFBNkksNENBQTRDLElBQUksRUFBRSwyQ0FBMkMsdUJBQXVCLGFBQWEsNERBQTRELEVBQUUsb0NBQW9DLHVCQUF1QixhQUFhLHFCQUFxQixzQkFBc0Isa0NBQWtDLFVBQVUsRUFBRSxVQUFVLEVBQUUsWUFBWSxzQ0FBc0MsR0FBRyx1QkFBdUIsYUFBYSxvREFBb0Qsd0JBQXdCLGtDQUFrQyxpQ0FBaUMsSUFBSSxVQUFVLFNBQVMsVUFBVSxLQUFLLElBQUksbUNBQW1DLHNCQUFzQixVQUFVLEVBQUUsbUNBQW1DLHVCQUF1QixhQUFhLDhEQUE4RCxzQkFBc0IseURBQXlELHNCQUFzQixTQUFTLHlCQUF5QixnQ0FBZ0MsWUFBWSxFQUFFLHVEQUF1RCx1QkFBdUIsYUFBYSw0QkFBNEIsMEdBQTBHLEtBQUssSUFBSSx1REFBdUQsa0VBQWtFLHdCQUF3Qix3REFBd0QsdUVBQXVFLGtEQUFrRCxnQkFBZ0IseUJBQXlCLElBQUksRUFBRSxzRUFBc0UsdUJBQXVCLGFBQWEscUNBQXFDLEVBQUUsaUJBQWlCLHVCQUF1QixhQUFhLHNCQUFzQiw0QkFBNEIsR0FBRyx1QkFBdUIsYUFBYSx5QkFBeUIsdUJBQXVCLHNCQUFzQiw4QkFBOEIsRUFBRSxpQkFBaUIsdUJBQXVCLGFBQWEsOEJBQThCLHNCQUFzQix3QkFBd0IsRUFBRSx1QkFBdUIsdUJBQXVCLGFBQWEsMERBQTBELEVBQUUsb0NBQW9DLHVCQUF1QixhQUFhLHFCQUFxQixJQUFJLG1DQUFtQyxTQUFTLFdBQVcsR0FBRyx1QkFBdUIsYUFBYSxxQ0FBcUMsc0JBQXNCLDRCQUE0QixFQUFFLGtCQUFrQix1QkFBdUIsYUFBYSx3RUFBd0Usd0JBQXdCLFFBQVEsZ0JBQWdCLGtDQUFrQyx5QkFBeUIsS0FBSyxFQUFFLHdDQUF3Qyx1QkFBdUIsYUFBYSxnRUFBZ0Usc0JBQXNCLGNBQWMsb0NBQW9DLG9CQUFvQixNQUFNLHFCQUFxQixjQUFjLEtBQUssRUFBRSxpQkFBaUIsdUJBQXVCLGFBQWEsb0VBQW9FLEVBQUUsb0NBQW9DLHVCQUF1QixhQUFhLGlEQUFpRCxxQkFBcUIsOENBQThDLGlEQUFpRCxHQUFHLHVCQUF1QixhQUFhLGtIQUFrSCx3REFBd0QsZ0JBQWdCLGdDQUFnQywyREFBMkQseUJBQXlCLGdDQUFnQyxpRUFBaUUsTUFBTSxJQUFJLG9CQUFvQixVQUFVLHVDQUF1QyxlQUFlLG1EQUFtRCxRQUFRLE9BQU8sNkNBQTZDLFFBQVEsRUFBRSxnREFBZ0QsMEJBQTBCLGtCQUFrQiw0QkFBNEIsbUJBQW1CLE1BQU0sNEpBQTRKLGtDQUFrQyx3REFBd0QsdUJBQXVCLEVBQUUsd0RBQXdELHVCQUF1QixhQUFhLHNCQUFzQixvRUFBb0UsVUFBVSxHQUFHLHVCQUF1QixhQUFhLHVCQUF1QixzQkFBc0Isb0RBQW9ELFVBQVUsRUFBRSxrQkFBa0IsdUJBQXVCLGFBQWEsc0JBQXNCLHNCQUFzQiw2REFBNkQsVUFBVSxFQUFFLGlCQUFpQix1QkFBdUIsYUFBYSx3RUFBd0UsRUFBRSxvQ0FBb0MsdUJBQXVCLGFBQWEsbUJBQW1CLHFCQUFxQix1RkFBdUYsR0FBRyx1QkFBdUIsYUFBYSwrQkFBK0Isc0JBQXNCLHVDQUF1QyxHQUFHLHVCQUF1QixhQUFhLDZDQUE2QyxzQkFBc0IsMkZBQTJGLEdBQUcsdUJBQXVCLGFBQWEsd0NBQXdDLHFCQUFxQixNQUFNLEdBQUcsNEJBQTRCLFlBQVksVUFBVSxHQUFHLHVCQUF1QixhQUFhLDJJQUEySSwwQkFBMEIsMEVBQTBFLHNIQUFzSCxpRkFBaUYsdUJBQXVCLGtHQUFrRyxFQUFFLHVEQUF1RCxFQUFFLHNHQUFzRyx1QkFBdUIsYUFBYSw0TEFBNEwsd0JBQXdCLG1DQUFtQyxpRUFBaUUsS0FBSyw0Q0FBNEMsUUFBUSxFQUFFLGtDQUFrQyxXQUFXLHdCQUF3QiwwRkFBMEYsS0FBSywwQkFBMEIseUJBQXlCLEdBQUcsRUFBRSxtSEFBbUgsdUJBQXVCLGFBQWEsMkpBQTJKLHNCQUFzQiw4RUFBOEUsRUFBRSx3SUFBd0ksdUJBQXVCLGFBQWEsdU9BQXVPLDBCQUEwQiwwRUFBMEUsUUFBUSxpRUFBaUUsb0dBQW9HLGlEQUFpRCxtQkFBbUIsTUFBTSw2SkFBNkosb0JBQW9CLHdDQUF3Qyw4QkFBOEIsbUJBQW1CLHFCQUFxQixFQUFFLGdDQUFnQyx5QkFBeUIsd0JBQXdCLHVCQUF1Qix1TkFBdU4sd0JBQXdCLHFEQUFxRCxFQUFFLElBQUkscUJBQXFCLGdHQUFnRyw2QkFBNkIsNkRBQTZELDBCQUEwQixNQUFNLDhKQUE4Siw0QkFBNEIsU0FBUyx3QkFBd0IsMERBQTBELEVBQUUsMENBQTBDLFlBQVksR0FBRyxFQUFFLHNLQUFzSyx1QkFBdUIsYUFBYSxtSkFBbUosc0JBQXNCLHFFQUFxRSxFQUFFLGtIQUFrSCx1QkFBdUIsYUFBYSwwR0FBMEcsd0JBQXdCLDBFQUEwRSwrREFBK0QsaUZBQWlGLG1CQUFtQixvR0FBb0cseUJBQXlCLHlCQUF5QiwySEFBMkgsRUFBRSx3REFBd0QsRUFBRSxzRUFBc0UsdUJBQXVCLGFBQWEseUJBQXlCLHNCQUFzQixtREFBbUQsVUFBVSxFQUFFLG9CQUFvQix1QkFBdUIsZUFBZSxlQUFlLHlFQUF5RSxpQkFBaUIsYUFBYSxjQUFjLDJCQUEyQiw4Q0FBOEMsMkRBQTJELHVDQUF1QywwQ0FBMEMsc0RBQXNELDBIQUEwSCxpSUFBaUksYUFBYSxpQkFBaUIsa0JBQWtCLGVBQWUscUJBQXFCLGFBQWEsWUFBWSxJQUFJLE1BQU0sMkNBQTJDLElBQUkscUJBQXFCLGdCQUFnQixpREFBaUQsb0JBQW9CLGlCQUFpQixnQ0FBZ0MsMEJBQTBCLGdCQUFnQixjQUFjLHdEQUF3RCxrQkFBa0IsZ0JBQWdCLGVBQWUscUJBQXFCLDhEQUE4RCxpQkFBaUIsZUFBZSxlQUFlLDJEQUEyRCw4QkFBOEIsZ0RBQWdELElBQUksaUJBQWlCLGdEQUFnRCxNQUFNLFNBQVMsWUFBWSxPQUFPLCtDQUErQyxjQUFjLDZCQUE2QixjQUFjLElBQUksY0FBYyxTQUFTLG9CQUFvQixrQkFBa0IsOEVBQThFLCtFQUErRSxjQUFjLGFBQWEsY0FBYyxFQUFFLGdFQUFnRSxjQUFjLDZCQUE2QixJQUFJLGNBQWMsU0FBUyxVQUFVLGlCQUFpQiw4QkFBOEIsYUFBYSxpQkFBaUIsV0FBVyxxQkFBcUIsSUFBSSxlQUFlLGdCQUFnQixNQUFNLDhJQUE4SSxjQUFjLHVDQUF1QyxnQkFBZ0IseUVBQXlFLGdCQUFnQiw4Q0FBOEMsb0JBQW9CLGdDQUFnQyxpRUFBaUUsY0FBYyxnQ0FBZ0MsaUJBQWlCLDBDQUEwQyxXQUFXLHVDQUF1Qyx5QkFBeUIsYUFBYSxnQkFBZ0IsWUFBWSxvQkFBb0IsK0NBQStDLE1BQU0sb0JBQW9CLElBQUksWUFBWSxTQUFTLG9CQUFvQixxSUFBcUksY0FBYyxnRUFBZ0UsUUFBUSxjQUFjLDREQUE0RCxnQkFBZ0IsNllBQTZZLGNBQWMsMEdBQTBHLDBHQUEwRyxtQ0FBbUMsSUFBSSxjQUFjLE9BQU8sYUFBYSxPQUFPLEVBQUUsU0FBUyxRQUFRLG9CQUFvQiw2SUFBNkksSUFBSSxhQUFhLGFBQWEsNkJBQTZCLHdDQUF3QyxTQUFTLDRCQUE0QixTQUFTLDRGQUE0RixnQkFBZ0IsTUFBTSxXQUFXLElBQUksOENBQThDLFVBQVUsMENBQTBDLFlBQVkseUNBQXlDLHdDQUF3QyxxQkFBcUIsNEJBQTRCLHNDQUFzQyw0Q0FBNEMsVUFBVSxXQUFXLDZEQUE2RCxpRUFBaUUsZUFBZSxlQUFlLGlDQUFpQywwQ0FBMEMsWUFBWSxLQUFLLGdDQUFnQyx3Q0FBd0MsbUJBQW1CLHdHQUF3Ryx5Q0FBeUMsV0FBVyx1QkFBdUIsMkJBQTJCLGFBQWEsMkJBQTJCLEVBQUUsbUJBQW1CLDZCQUE2QixvQkFBb0IsV0FBVyxnQ0FBZ0MsdUJBQXVCLElBQUksOEJBQThCLHNCQUFzQiwyREFBMkQsRUFBRSxrQ0FBa0Msa0JBQWtCLGdCQUFnQiw2QkFBNkIsSUFBSSx3QkFBd0IsSUFBSSx3QkFBd0IsdUNBQXVDLDBCQUEwQixnQ0FBZ0MsRUFBRSw4SEFBOEgsRUFBRSxFQUFFLGFBQWEsdUJBQXVCLGFBQWEseURBQXlELEVBQUUsd0NBQXdDLHVCQUF1QixhQUFhLE9BQU8scUJBQXFCLHFCQUFxQixNQUFNLHNDQUFzQyx3QkFBd0IsSUFBSSxVQUFVLFNBQVMsU0FBUyxxR0FBcUcsR0FBRyx1QkFBdUIsYUFBYSxzQkFBc0IsNEhBQTRILEdBQUcsdUJBQXVCLGFBQWEsNklBQTZJLDhCQUE4QixTQUFTLElBQUksaUJBQWlCLFdBQVcsK0JBQStCLGdCQUFnQixhQUFhLEtBQUsseURBQXlELDhCQUE4QixLQUFLLEVBQUUsY0FBYyx3RUFBd0UsWUFBWSwyQkFBMkIsTUFBTSx3RUFBd0UsK0RBQStELDRDQUE0QyxHQUFHLE1BQU0sa0JBQWtCLG1DQUFtQyx1QkFBdUIsTUFBTSxxQ0FBcUMsMGdCQUEwZ0IsaUJBQWlCLDBDQUEwQyxxQkFBcUIsRUFBRSxpQkFBaUIsc0JBQXNCLDZDQUE2Qyx1QkFBdUIsZUFBZSxFQUFFLDhDQUE4QyxjQUFjLHdDQUF3Qyw4S0FBOEssRUFBRSw4QkFBOEIsdUJBQXVCLGFBQWEsdUJBQXVCLHNCQUFzQixtREFBbUQsVUFBVSxFQUFFLGtCQUFrQix1QkFBdUIsYUFBYSwwREFBMEQsRUFBRSx3Q0FBd0MsdUJBQXVCLGFBQWEscUJBQXFCLFFBQVEsdUNBQXVDLElBQUksb0JBQW9CLFdBQVcsV0FBVyxZQUFZLFNBQVMsU0FBUywwRUFBMEUsd0ZBQXdGLEdBQUcsdUJBQXVCLGFBQWEsdUdBQXVHLEdBQUcsdUJBQXVCLGFBQWEsK1dBQStXLHVCQUF1QixxQkFBcUIsMEVBQTBFLGtKQUFrSixzQkFBc0IsT0FBTyxrRUFBa0UsaUJBQWlCLHdDQUF3QyxxQkFBcUIsK0VBQStFLG9CQUFvQixvRUFBb0Usb0JBQW9CLHlDQUF5QyxzQkFBc0Isa0RBQWtELHdCQUF3Qix5QkFBeUIsRUFBRSxvQ0FBb0MsRUFBRSxnUEFBZ1AsdUJBQXVCLGFBQWEsMEJBQTBCLGtCQUFrQixpVEFBaVQsR0FBRyx1QkFBdUIsYUFBYSwyQkFBMkIsc0JBQXNCLGVBQWUsaUJBQWlCLFFBQVEsNkJBQTZCLDhCQUE4QixjQUFjLEVBQUUsc0JBQXNCLHVCQUF1QixhQUFhLDBCQUEwQix5QkFBeUIsK0JBQStCLDhCQUE4QixXQUFXLG9CQUFvQiw4QkFBOEIsOEJBQThCLGtCQUFrQixxQkFBcUIsSUFBSSx1RkFBdUYsc0JBQXNCLHFEQUFxRCxrQkFBa0IsaUNBQWlDLGtCQUFrQiwwRkFBMEYsWUFBWSxpQkFBaUIsaURBQWlELG9KQUFvSixrQkFBa0IsY0FBYywyQkFBMkIsSUFBSSxXQUFXLFNBQVMsb0JBQW9CLDJCQUEyQixnSEFBZ0gscUJBQXFCLHlIQUF5SCx5QkFBeUIsSUFBSSxrQkFBa0IsZ0JBQWdCLGFBQWEsZUFBZSxRQUFRLElBQUkseUJBQXlCLEtBQUssWUFBWSwwR0FBMEcsUUFBUSxJQUFJLGdHQUFnRyxhQUFhLElBQUksY0FBYywwQkFBMEIsa0JBQWtCLFFBQVEsSUFBSSwyQkFBMkIsU0FBUyxzQkFBc0IsMkdBQTJHLDRDQUE0QyxJQUFJLGtCQUFrQixLQUFLLFlBQVksMEdBQTBHLFFBQVEsSUFBSSxnR0FBZ0csYUFBYSxJQUFJLFdBQVcsS0FBSyxnQ0FBZ0MsUUFBUSxJQUFJLGFBQWEsU0FBUyxvQkFBb0IsaUJBQWlCLHFCQUFxQixxQkFBcUIsdURBQXVELEtBQUssdUJBQXVCLFNBQVMsb0JBQW9CLG9DQUFvQyxtQ0FBbUMseUZBQXlGLHFCQUFxQixZQUFZLElBQUksZ0JBQWdCLElBQUksNkJBQTZCLG1CQUFtQixRQUFRLElBQUkscURBQXFELG9CQUFvQixvQ0FBb0MsbUNBQW1DLDhHQUE4RyxtQkFBbUIsWUFBWSxJQUFJLEtBQUssb0NBQW9DLGlDQUFpQyxtQkFBbUIscUJBQXFCLDhDQUE4QywrREFBK0QsbUJBQW1CLFlBQVksSUFBSSxxREFBcUQsb0JBQW9CLG9DQUFvQyxvQ0FBb0MsOEdBQThHLG1CQUFtQixZQUFZLElBQUksS0FBSyxtQkFBbUIsZ0RBQWdELG9CQUFvQixtQkFBbUIsV0FBVyxtR0FBbUcsbUJBQW1CLGNBQWMsS0FBSyxzREFBc0QsRUFBRSw4Q0FBOEMsdUJBQXVCLGlCQUFpQiwwQkFBMEIsa0VBQWtFLGlFQUFpRSx1Q0FBdUMscURBQXFELGlCQUFpQiwwR0FBMEcsWUFBWSxXQUFXLFlBQVksSUFBSSxzQ0FBc0MseUNBQXlDLEtBQUssc0JBQXNCLDRFQUE0RSxJQUFJLGtDQUFrQyxxREFBcUQsVUFBVSxFQUFFLFVBQVUsdUJBQXVCLGFBQWEseUNBQXlDLHNCQUFzQixjQUFjLGlNQUFpTSxnQ0FBZ0MscUJBQXFCLCtEQUErRCx3QkFBd0IsUUFBUSxrQ0FBa0MsS0FBSywyQkFBMkIsdUNBQXVDLHlCQUF5Qiw2SEFBNkgsOEJBQThCLFdBQVcsbUVBQW1FLFVBQVUsRUFBRSx5QkFBeUIsdUJBQXVCLGFBQWEsZ0JBQWdCLFFBQVEsdURBQXVELDJEQUEyRCw4Q0FBOEMsdUlBQXVJLHVEQUF1RCxpREFBaUQsME9BQTBPLG9CQUFvQixpQ0FBaUMsT0FBTyxPQUFPLGtGQUFrRixpQ0FBaUMsaUVBQWlFLGlDQUFpQyxpR0FBaUcsdUNBQXVDLDhGQUE4RixpQ0FBaUMsb0dBQW9HLGlDQUFpQyw2RkFBNkYsaUNBQWlDLDhwQkFBOHBCLHNFQUFzRSxpQ0FBaUMsZ0JBQWdCLHVCQUF1QixrQ0FBa0MsZ0JBQWdCLFNBQVMsbUVBQW1FLFNBQVMsY0FBYyxnQ0FBZ0MsV0FBVyxnREFBZ0QsY0FBYyx5Q0FBeUMsSUFBSSxnREFBZ0QsaUVBQWlFLEdBQUcsdUJBQXVCLGFBQWEsc0JBQXNCLHlCQUF5QixZQUFZLHdCQUF3Qiw2RUFBNkUsY0FBYyw2REFBNkQsZ0JBQWdCLHNEQUFzRCxjQUFjLCtEQUErRCxnQkFBZ0IsNEJBQTRCLGtCQUFrQixnQkFBZ0IsMEJBQTBCLGdDQUFnQyxlQUFlLFNBQVMsa0NBQWtDLFVBQVUsS0FBSyxvQ0FBb0MsZUFBZSxTQUFTLGtDQUFrQyxVQUFVLEtBQUssb0NBQW9DLGVBQWUscUNBQXFDLHlCQUF5Qiw4Q0FBOEMsRUFBRSxFQUFFLGlCQUFpQiwwQ0FBMEMsaUNBQWlDLHFCQUFxQixLQUFLLEtBQUssT0FBTyxpSUFBaUksaUJBQWlCLElBQUksS0FBSyxhQUFhLE9BQU8sb0NBQW9DLGFBQWEsNkJBQTZCLCtCQUErQiwwSEFBMEgsTUFBTSwwQ0FBMEMsS0FBSywrQkFBK0IsdUpBQXVKLE1BQU0sMENBQTBDLHFCQUFxQiw4QkFBOEIsMEhBQTBILE1BQU0seUNBQXlDLEtBQUssTUFBTSw4QkFBOEIsTUFBTSx3SkFBd0osTUFBTSwwQ0FBMEMsbUNBQW1DLDJCQUEyQixzQ0FBc0MsOEJBQThCLE1BQU0sb0NBQW9DLDBEQUEwRCxjQUFjLGtDQUFrQyxrQkFBa0IsTUFBTSx3Q0FBd0MsK0JBQStCLG1DQUFtQyw4QkFBOEIsdUNBQXVDLDZCQUE2QixnQ0FBZ0MsU0FBUywwQ0FBMEMsc0NBQXNDLDBDQUEwQyxpQ0FBaUMsa0NBQWtDLGVBQWUseUJBQXlCLEVBQUUsb0JBQW9CLHNCQUFzQixpQ0FBaUMsZUFBZSx5QkFBeUIsRUFBRSxxQkFBcUIsc0JBQXNCLG1CQUFtQiw2QkFBNkIsMEJBQTBCLEVBQUUscUJBQXFCLG9CQUFvQixTQUFTLFNBQVMsaUJBQWlCLDJCQUEyQix1QkFBdUIsMkJBQTJCLFVBQVUsc0JBQXNCLGtCQUFrQiw2Q0FBNkMsRUFBRSxFQUFFLGlCQUFpQixtREFBbUQsZ0NBQWdDLGtCQUFrQiw2Q0FBNkMsRUFBRSxFQUFFLGlCQUFpQixpREFBaUQsZ0NBQWdDLGtCQUFrQiw2Q0FBNkMsRUFBRSxFQUFFLGlCQUFpQixrREFBa0QsZ0NBQWdDLGtCQUFrQiw2Q0FBNkMsRUFBRSxFQUFFLGlCQUFpQixrREFBa0QsZ0NBQWdDLG9CQUFvQix5Q0FBeUMsRUFBRSxFQUFFLGlCQUFpQix3Q0FBd0Msc0JBQXNCLHNCQUFzQixzQkFBc0IsbUJBQW1CLHlCQUF5QixtQkFBbUIsb0NBQW9DLEVBQUUsRUFBRSxpQkFBaUIsd0JBQXdCLHdCQUF3QixrQkFBa0IsZ0JBQWdCLDhGQUE4RixnQkFBZ0Isc0JBQXNCLGlDQUFpQyxlQUFlLDZCQUE2QixrQ0FBa0MsZUFBZSxtRUFBbUUsZUFBZSxxQkFBcUIsNENBQTRDLHFCQUFxQixrQkFBa0IsaUNBQWlDLDBDQUEwQyxvRUFBb0UscUJBQXFCLEtBQUssS0FBSyw0SUFBNEksb0NBQW9DLGVBQWUsYUFBYSxRQUFRLHFCQUFxQixhQUFhLG9HQUFvRyxpQkFBaUIsS0FBSyxxRUFBcUUsaUJBQWlCLGlDQUFpQyxvQkFBb0IsMkRBQTJELFFBQVEsV0FBVyxrQkFBa0Isc0NBQXNDLG9CQUFvQixvREFBb0QsUUFBUSxhQUFhLGtCQUFrQixzQ0FBc0Msc0RBQXNELFFBQVEsV0FBVyxrQkFBa0Isb0JBQW9CLG1CQUFtQiw2QkFBNkIsS0FBSyxLQUFLLHdDQUF3Qyx3QkFBd0IsZ1BBQWdQLHNQQUFzUCxpQkFBaUIsdURBQXVELGVBQWUsU0FBUyx5S0FBeUssS0FBSywyT0FBMk8sMFBBQTBQLGlCQUFpQixzREFBc0QsY0FBYyxTQUFTLE1BQU0sNktBQTZLLHVFQUF1RSxnQ0FBZ0MsZUFBZSxxRUFBcUUsZUFBZSxtQ0FBbUMsZUFBZSx1RUFBdUUsZUFBZSxtQ0FBbUMsZUFBZSxzQkFBc0IsaUJBQWlCLHFCQUFxQixvQkFBb0Isa0RBQWtELHFCQUFxQixLQUFLLGdFQUFnRSxTQUFTLGVBQWUsb0JBQW9CLGtCQUFrQixpQkFBaUIsb0JBQW9CLHlCQUF5QixFQUFFLG9CQUFvQixpQkFBaUIsb0NBQW9DLDBCQUEwQixvQ0FBb0MsZUFBZSxrQkFBa0IseUJBQXlCLGdDQUFnQyxxQkFBcUIsSUFBSSxtQ0FBbUMsVUFBVSx1QkFBdUIsa0JBQWtCLDREQUE0RCwwQ0FBMEMsOERBQThELHFCQUFxQixLQUFLLGdKQUFnSixzQ0FBc0MsbUJBQW1CLGtCQUFrQixpQkFBaUIsb0JBQW9CLHVCQUF1QixFQUFFLHFCQUFxQixpQkFBaUIsbUNBQW1DLDBCQUEwQixvQ0FBb0MsZUFBZSxrQkFBa0IseUJBQXlCLCtCQUErQixxQkFBcUIsSUFBSSxvQ0FBb0MsVUFBVSxFQUFFLEdBQUcsdUJBQXVCLDRmQUE0ZixjQUFjLDRCQUE0Qiw0QkFBNEIsSUFBSSxrQkFBa0IsYUFBYSwwRUFBMEUsd0JBQXdCLG9EQUFvRCwrQkFBK0IsS0FBSyxtQkFBbUIsSUFBSSxrQkFBa0IsYUFBYSw0REFBNEQsaUJBQWlCLEdBQUcsdUJBQXVCLHdCQUF3QixzRUFBc0UsVUFBVSxxREFBcUQsaURBQWlELDRDQUE0QywrQ0FBK0MsVUFBVSxJQUFJLFVBQVUsa0RBQWtELFlBQVksV0FBVyx1Q0FBdUMsU0FBUyxPQUFPLGdCQUFnQixHQUFHLHVCQUF1QixhQUFhLHdCQUF3QixlQUFlLHNCQUFzQiwyS0FBMkssZ0JBQWdCLHVDQUF1QyxjQUFjLHVZQUF1WSwrQkFBK0IsKzRCQUErNEIsa0JBQWtCLGFBQWEsc0dBQXNHLHFCQUFxQixrQkFBa0IsV0FBVyx1QkFBdUIsMEhBQTBILFlBQVksSUFBSSw0QkFBNEIsU0FBUyxRQUFRLCtHQUErRyxxQkFBcUIsNENBQTRDLGdEQUFnRCxnQkFBZ0IsWUFBWSx1Q0FBdUMsSUFBSSxnQkFBZ0IsSUFBSSxrRUFBa0UsZ0JBQWdCLGlDQUFpQyxRQUFRLElBQUksMEJBQTBCLGdEQUFnRCw2S0FBNkssUUFBUSxJQUFJLDRCQUE0QixlQUFlLEVBQUUsd0NBQXdDLCtGQUErRixrQkFBa0IsbXNCQUFtc0IsMEJBQTBCLHNCQUFzQixxRkFBcUYsSUFBSSxjQUFjLG9CQUFvQiw2RkFBNkYsaUJBQWlCLHVDQUF1QyxzQkFBc0IsU0FBUyw0QkFBNEIsU0FBUyxpQ0FBaUMsa0NBQWtDLG1CQUFtQixPQUFPLG9QQUFvUCxJQUFJLHlFQUF5RSxRQUFRLFFBQVEsSUFBSSw4QkFBOEIsVUFBVSxVQUFVLFFBQVEsSUFBSSw4Q0FBOEMsbUZBQW1GLFFBQVEsSUFBSSxLQUFLLGNBQWMsaUNBQWlDLFlBQVksSUFBSSxLQUFLLGdDQUFnQyxnSEFBZ0gsUUFBUSxJQUFJLEtBQUssNEJBQTRCLHFMQUFxTCxRQUFRLElBQUksS0FBSyxvUUFBb1EsMEVBQTBFLFFBQVEsSUFBSSxLQUFLLGVBQWUsMEJBQTBCLDBRQUEwUSw0REFBNEQsUUFBUSxjQUFjLGlCQUFpQixrQkFBa0Isb0RBQW9ELGlIQUFpSCxRQUFRLElBQUksS0FBSyxtRUFBbUUsUUFBUSxJQUFJLHFGQUFxRixjQUFjLDhCQUE4Qiw0TEFBNEwsUUFBUSxJQUFJLHdDQUF3QyxxRkFBcUYsd0JBQXdCLDBIQUEwSCxRQUFRLElBQUkseUNBQXlDLDBIQUEwSCxvQkFBb0Isc0JBQXNCLDJJQUEySSxFQUFFLDRHQUE0Ryx1QkFBdUIsYUFBYSxzQkFBc0IsMEJBQTBCLElBQUkseURBQXlELEtBQUssTUFBTSw0Q0FBNEMsYUFBYSxLQUFLLE1BQU0sT0FBTyxhQUFhLEtBQUssdURBQXVELFFBQVEsUUFBUSx3RkFBd0YsZ0RBQWdELEVBQUUsaURBQWlELFlBQVksdUZBQXVGLHVEQUF1RCxvQkFBb0IsaURBQWlELGtCQUFrQiw2QkFBNkIsaUJBQWlCLElBQUksY0FBYyxNQUFNLGNBQWMsOEZBQThGLHVEQUF1RCx5R0FBeUcsc0JBQXNCLGdFQUFnRSxFQUFFLDZDQUE2Qyx1QkFBdUIsYUFBYSw4QkFBOEIsa0JBQWtCLGdCQUFnQixJQUFJLEtBQUssYUFBYSxZQUFZLElBQUksS0FBSyxhQUFhLFlBQVksSUFBSSxtQ0FBbUMsaUJBQWlCLElBQUksS0FBSyxzQkFBc0IsSUFBSSxzQkFBc0IsdURBQXVELFFBQVEsSUFBSSxZQUFZLElBQUksS0FBSywwQ0FBMEMsSUFBSSxLQUFLLG1EQUFtRCxtQ0FBbUMsMkJBQTJCLEtBQUssWUFBWSxJQUFJLEtBQUssNEZBQTRGLFVBQVUsaUJBQWlCLHVCQUF1QixJQUFJLG1EQUFtRCxpQkFBaUIsSUFBSSxLQUFLLGFBQWEsaUJBQWlCLFdBQVcsV0FBVyxxQkFBcUIsaUJBQWlCLElBQUksS0FBSyxhQUFhLHdCQUF3QixXQUFXLFdBQVcscUJBQXFCLFFBQVEsdURBQXVELFVBQVUsMkRBQTJELG9CQUFvQixJQUFJLHFCQUFxQixVQUFVLHFLQUFxSyxrQkFBa0IsWUFBWSxJQUFJLEtBQUssYUFBYSxZQUFZLElBQUkseUJBQXlCLFlBQVksWUFBWSxJQUFJLGdDQUFnQyxHQUFHLG1GQUFtRixjQUFjLFlBQVksV0FBVyxnREFBZ0QsdUNBQXVDLFFBQVEsYUFBYSxLQUFLLDRFQUE0RSxxQkFBcUIsU0FBUywyQkFBMkIsb0JBQW9CLEVBQUUscUZBQXFGLHVCQUF1QixhQUFhLDBCQUEwQixpREFBaUQsK0NBQStDLFlBQVksSUFBSSxLQUFLLDJCQUEyQixjQUFjLEtBQUssaUJBQWlCLCtDQUErQyxtQkFBbUIsZ0JBQWdCLDJCQUEyQixjQUFjLEtBQUssaUJBQWlCLCtDQUErQyxtQkFBbUIsZ0JBQWdCLHVDQUF1QywrQ0FBK0MsVUFBVSxnRUFBZ0UseUdBQXlHLGNBQWMsMEJBQTBCLGdCQUFnQix1Q0FBdUMsNEJBQTRCLDJIQUEySCxrQkFBa0IsdUJBQXVCLGtPQUFrTyxxQkFBcUIsa0JBQWtCLG9DQUFvQyxXQUFXLHVGQUF1RixlQUFlLDRSQUE0UixxQ0FBcUMsc0JBQXNCLFdBQVcscUtBQXFLLFdBQVcsZ0hBQWdILGtDQUFrQyxzQkFBc0IsV0FBVyxzREFBc0QsYUFBYSw0Q0FBNEMsV0FBVyx3Q0FBd0MsV0FBVyw4S0FBOEssa0NBQWtDLFdBQVcsdUZBQXVGLGFBQWEsNENBQTRDLFdBQVcsMElBQTBJLHNCQUFzQixvRUFBb0UsRUFBRSw2Q0FBNkMsdUJBQXVCLGFBQWEsZ0VBQWdFLCtDQUErQyx5Q0FBeUMsd0RBQXdELDBCQUEwQiwyQkFBMkIsMEJBQTBCLHVEQUF1RCxzQ0FBc0MsR0FBRyxpQkFBaUIsd0NBQXdDLHdDQUF3Qyw4Q0FBOEMsd0NBQXdDLCtEQUErRCxtRkFBbUYsNkVBQTZFLEdBQUcsa0NBQWtDLDBDQUEwQyxlQUFlLHlCQUF5QixHQUFHLElBQUksbUJBQW1CLHNCQUFzQiw0QkFBNEIsSUFBSSxnQ0FBZ0MsK0NBQStDLHlDQUF5QyxnREFBZ0QseUNBQXlDLDBCQUEwQiwwQkFBMEIsdURBQXVELHNDQUFzQyxHQUFHLDRDQUE0Qyx3QkFBd0Isd0JBQXdCLHlGQUF5RixHQUFHLDhCQUE4QixnQ0FBZ0MsaUNBQWlDLHlDQUF5QyxnREFBZ0Qsb0NBQW9DLDRDQUE0Qyw4QkFBOEIsc0JBQXNCLEdBQUcsbUNBQW1DLCtEQUErRCxHQUFHLGlDQUFpQyxnQ0FBZ0MsNEVBQTRFLEdBQUcsNkRBQTZELGlSQUFpUiwyT0FBMk8sR0FBRyxxQ0FBcUMsK0NBQStDLEdBQUcsbURBQW1ELGdDQUFnQyxrQ0FBa0MsOEJBQThCLDJCQUEyQixHQUFHLHlEQUF5RCwyakJBQTJqQiwyREFBMkQscUhBQXFILGlCQUFpQiw4REFBOEQscURBQXFELHlCQUF5QixvRUFBb0Usb0JBQW9CLGVBQWUsd0JBQXdCLHVIQUF1SCwwRUFBMEUsdURBQXVELHFEQUFxRCxvSUFBb0ksdURBQXVELEtBQUssMkVBQTJFLGtHQUFrRyxtRUFBbUUsMkVBQTJFLHVGQUF1RixzREFBc0QsR0FBRyxnQ0FBZ0MsMENBQTBDLGVBQWUseUJBQXlCLEdBQUcsSUFBSSxtQkFBbUIsc0JBQXNCLDRCQUE0QixJQUFJLGdDQUFnQywrQ0FBK0Msd0JBQXdCLHlDQUF5QyxzQkFBc0IseUJBQXlCLDhCQUE4QixpQkFBaUIsa0RBQWtELDBDQUEwQyx5Q0FBeUMsZ0RBQWdELGdEQUFnRCx1RUFBdUUscUVBQXFFLEtBQUssT0FBTyxrQ0FBa0MsS0FBSyxxQ0FBcUMsR0FBRyxnQ0FBZ0MsOENBQThDLDhCQUE4QixpQkFBaUIsNElBQTRJLEdBQUcsSUFBSSxpQkFBaUIsc0JBQXNCLDRCQUE0QixFQUFFLDBCQUEwQixJQUFJLEVBQUUsNEJBQTRCLHVCQUF1QixhQUFhLGFBQWEsZ0NBQWdDLG1CQUFtQixnQkFBZ0IsVUFBVSxpQ0FBaUMscUJBQXFCLDhCQUE4QixxR0FBcUcsc0JBQXNCLGtCQUFrQixvQkFBb0Isc0hBQXNILDBCQUEwQix5QkFBeUIsbUNBQW1DLDJCQUEyQixvSkFBb0oscUJBQXFCLGtCQUFrQiw4QkFBOEIsU0FBUyx3QkFBd0IsV0FBVyxhQUFhLEVBQUUsV0FBVyx5QkFBeUIsSUFBSSxjQUFjLFNBQVMsZ0VBQWdFLHdCQUF3QixJQUFJLHVGQUF1RixHQUFHLDREQUE0RCxJQUFJLHVCQUF1QixLQUFLLEtBQUssY0FBYywwQkFBMEIsbURBQW1ELGdFQUFnRSxLQUFLLElBQUksS0FBSyx5R0FBeUcsWUFBWSxjQUFjLHdGQUF3Rix5QkFBeUIsOEZBQThGLHVDQUF1Qyw0U0FBNFMsdUNBQXVDLCtTQUErUyxzQkFBc0IsZ0VBQWdFLDJCQUEyQixFQUFFLCtFQUErRSx1QkFBdUIsYUFBYSxnQkFBZ0IsZ0NBQWdDLHVCQUF1QixnREFBZ0QsOEJBQThCLGdCQUFnQix3REFBd0QsV0FBVyxxQkFBcUIsZUFBZSxXQUFXLFNBQVMsZUFBZSxTQUFTLHVCQUF1QixpQkFBaUIsSUFBSSxLQUFLLG1DQUFtQyxnQkFBZ0IsWUFBWSx3QkFBd0IsRUFBRSxhQUFhLGdCQUFnQixZQUFZLHdCQUF3QixFQUFFLFVBQVUsU0FBUyx1QkFBdUIsWUFBWSxJQUFJLEtBQUssc0NBQXNDLFlBQVksY0FBYyxLQUFLLHdCQUF3Qix1SUFBdUksVUFBVSxHQUFHLHVCQUF1QixhQUFhLDhCQUE4QixvR0FBb0csa0JBQWtCLGdCQUFnQixJQUFJLHdEQUF3RCxnQkFBZ0IsT0FBTyxZQUFZLElBQUksS0FBSyw0QkFBNEIsY0FBYyxJQUFJLEtBQUssU0FBUyxnQkFBZ0IsYUFBYSxZQUFZLElBQUksS0FBSyxlQUFlLFlBQVksSUFBSSx1Q0FBdUMsb0JBQW9CLE1BQU0sS0FBSywyQkFBMkIscUJBQXFCLFlBQVksV0FBVyxzQ0FBc0MsSUFBSSxvSkFBb0osVUFBVSx1T0FBdU8sa0JBQWtCLDZDQUE2Qyw0QkFBNEIsc0JBQXNCLFlBQVksSUFBSSxLQUFLLG9CQUFvQixJQUFJLG1CQUFtQixvRkFBb0Ysd0RBQXdELDRCQUE0QixTQUFTLDhFQUE4RSxFQUFFLGdKQUFnSix1QkFBdUIsYUFBYSw0SUFBNEksc0JBQXNCLCtEQUErRCxrQkFBa0Isd0JBQXdCLG1DQUFtQyxvQ0FBb0MsbUZBQW1GLGdDQUFnQyxnQkFBZ0IsOENBQThDLElBQUksY0FBYyxTQUFTLGtCQUFrQiwwQ0FBMEMscUJBQXFCLG1DQUFtQyxzQkFBc0Isa0NBQWtDLHdCQUF3QiwyRkFBMkYsY0FBYyxzSkFBc0osOEJBQThCLHlCQUF5QixLQUFLLEtBQUsscUJBQXFCLFFBQVEsU0FBUyw0TkFBNE4sS0FBSyx3Q0FBd0MsOEdBQThHLDBCQUEwQixNQUFNLHlLQUF5SyxrSEFBa0gsS0FBSyxrRkFBa0YsaUZBQWlGLDZFQUE2RSw2QkFBNkIsaU5BQWlOLHFMQUFxTCwwQ0FBMEMsc0JBQXNCLEVBQUUsb0RBQW9ELHVCQUF1QixhQUFhLG1DQUFtQyxZQUFZLFdBQVcsMEJBQTBCLFNBQVMsNkNBQTZDLHFCQUFxQixxQkFBcUIseUhBQXlILHdJQUF3SSxvR0FBb0csb0ZBQW9GLDZJQUE2SSwwSEFBMEgsd0JBQXdCLE1BQU0sc0NBQXNDLHNDQUFzQyxXQUFXLGdCQUFnQixXQUFXLGdCQUFnQixXQUFXLDZCQUE2QixTQUFTLGFBQWEsZ0NBQWdDLGdLQUFnSyxrRUFBa0UsZ0ZBQWdGLFdBQVcsS0FBSyxhQUFhLHVQQUF1UCx3QkFBd0IsZ0NBQWdDLFVBQVUsOENBQThDLHNCQUFzQixpQkFBaUIsb0NBQW9DLHlCQUF5QiwyREFBMkQsSUFBSSxZQUFZLFdBQVcsbUVBQW1FLElBQUksS0FBSyxvWkFBb1oseUJBQXlCLDBDQUEwQyxTQUFTLDhDQUE4QyxFQUFFLG1DQUFtQyx1QkFBdUIsYUFBYSxnVEFBZ1QsNERBQTRELDJpQ0FBMmlDLGtCQUFrQixjQUFjLGlEQUFpRCxvR0FBb0csc0JBQXNCLHVCQUF1Qiw0QkFBNEIsc0JBQXNCLHlDQUF5QyxjQUFjLHlCQUF5QiwwQkFBMEIsdUlBQXVJLElBQUksdUJBQXVCLElBQUksS0FBSyxXQUFXLHVCQUF1QixxRkFBcUYsSUFBSSx5QkFBeUIsZ0ZBQWdGLHlCQUF5QixzQkFBc0IsUUFBUSxjQUFjLDIyQkFBMjJCLGFBQWEscUNBQXFDLDZCQUE2QixNQUFNLEtBQUssbUJBQW1CLElBQUksa0JBQWtCLGtCQUFrQixnQ0FBZ0MsNkNBQTZDLHdDQUF3QyxZQUFZLCtFQUErRSw4QkFBOEIsOEpBQThKLGlGQUFpRiwwSUFBMEksc0dBQXNHLGlCQUFpQixXQUFXLEtBQUssV0FBVyxnQ0FBZ0Msa0JBQWtCLFdBQVcsS0FBSyxPQUFPLGdDQUFnQyxhQUFhLFdBQVcsS0FBSyxVQUFVLGdDQUFnQyxxQ0FBcUMsMkJBQTJCLElBQUksV0FBVyxlQUFlLFFBQVEsSUFBSSx1QkFBdUIsV0FBVyxpQkFBaUIsU0FBUywyQkFBMkIsc0NBQXNDLElBQUksaUJBQWlCLFNBQVMsS0FBSyxvQ0FBb0MsNkNBQTZDLFFBQVEsV0FBVyx1QkFBdUIsSUFBSSwwSUFBMEksZ0JBQWdCLFVBQVUsV0FBVyxLQUFLLFdBQVcsaUJBQWlCLDJCQUEyQixJQUFJLCtDQUErQyx1UEFBdVAsTUFBTSxlQUFlLElBQUksS0FBSyxZQUFZLFlBQVksSUFBSSwrQ0FBK0MsUUFBUSxJQUFJLEtBQUssWUFBWSxvTkFBb04sS0FBSyxNQUFNLGVBQWUsSUFBSSx3QkFBd0IsSUFBSSwrQ0FBK0MsUUFBUSxJQUFJLEtBQUssTUFBTSxjQUFjLDRCQUE0QixpQkFBaUIseVBBQXlQLE1BQU0sdWdCQUF1Z0Isc0NBQXNDLFFBQVEsb0dBQW9HLElBQUksb0dBQW9HLE9BQU8sMlhBQTJYLHFGQUFxRixvQkFBb0IsK0NBQStDLFFBQVEsSUFBSSxtQ0FBbUMsWUFBWSxRQUFRLElBQUksc0NBQXNDLFFBQVEsSUFBSSxLQUFLLHNCQUFzQixJQUFJLHNDQUFzQyx1QkFBdUIseUJBQXlCLHFCQUFxQiwwSEFBMEgsd0JBQXdCLFFBQVEsb0dBQW9HLElBQUksb0dBQW9HLHlKQUF5SixPQUFPLGlKQUFpSixtQkFBbUIsb1NBQW9TLG9CQUFvQixrQkFBa0Isa0NBQWtDLG1HQUFtRyxPQUFPLHVEQUF1RCxzQkFBc0IseW1CQUF5bUIseUJBQXlCLG1DQUFtQywrQkFBK0IsaURBQWlELGtJQUFrSSwrREFBK0QsMkVBQTJFLHNEQUFzRCw2QkFBNkIsRUFBRSxtREFBbUQsRUFBRSw2QkFBNkIsRUFBRSw2QkFBNkIsRUFBRSw2QkFBNkIsRUFBRSw2QkFBNkIsdUNBQXVDLDZCQUE2QixFQUFFLG1EQUFtRCxFQUFFLDZCQUE2QixFQUFFLDZCQUE2Qiw4Q0FBOEMsNkJBQTZCLEVBQUUsbURBQW1ELEVBQUUsNkJBQTZCLEVBQUUsNkJBQTZCLEVBQUUsNkJBQTZCLHNFQUFzRSw2QkFBNkIsSUFBSSxzQkFBc0IsRUFBRSx3TkFBd04sdUJBQXVCLCtDQUErQywwQkFBMEIseURBQXlELHdWQUF3Viw2Q0FBNkMsS0FBSyxPQUFPLDZDQUE2QyxLQUFLLEdBQUcsKzdCQUErN0IscUNBQXFDLHVHQUF1RywrQ0FBK0MsK0NBQStDLDZCQUE2Qix1REFBdUQsNENBQTRDLEtBQUssb0pBQW9KLHlFQUF5RSw4Q0FBOEMscUJBQXFCLHNDQUFzQyxvQ0FBb0MsK0NBQStDLDZDQUE2Qyx5QkFBeUIsNkJBQTZCLCtCQUErQixnQ0FBZ0MsNkJBQTZCLGtEQUFrRCxLQUFLLGdDQUFnQywyQ0FBMkMsS0FBSyxjQUFjLEdBQUcsMEJBQTBCLGlDQUFpQyxvQkFBb0IsNEJBQTRCLDBCQUEwQiw2QkFBNkIsOEZBQThGLHVEQUF1RCxvSUFBb0ksdUJBQXVCLG9CQUFvQixpQkFBaUIsbUdBQW1HLG1IQUFtSCx5RUFBeUUsb0ZBQW9GLCtDQUErQyw0REFBNEQsMERBQTBELGdFQUFnRSw0REFBNEQsMkNBQTJDLCtDQUErQywrQkFBK0Isd0NBQXdDLG9DQUFvQywwQkFBMEIsR0FBRyxxRkFBcUYsNkVBQTZFLGlDQUFpQyxvQ0FBb0Msb0RBQW9ELDZDQUE2Qyx5RUFBeUUsK0NBQStDLEdBQUcsNklBQTZJLGdFQUFnRSwrREFBK0QsZ0ZBQWdGLHdFQUF3RSx1REFBdUQsd0RBQXdELDZDQUE2Qyw2Q0FBNkMsb0NBQW9DLGdGQUFnRiw0REFBNEQseUZBQXlGLEdBQUcsZ0RBQWdELDREQUE0RCxHQUFHLDZDQUE2QywrRUFBK0UsR0FBRyw2Q0FBNkMsdUhBQXVILEdBQUcsNkNBQTZDLDJDQUEyQyxHQUFHLCtCQUErQixpSkFBaUosNEJBQTRCLG9JQUFvSSx1QkFBdUIsb0JBQW9CLGlCQUFpQixzRUFBc0UsaUNBQWlDLHlDQUF5Qyx1Q0FBdUMsMEJBQTBCLGFBQWEsS0FBSyw2RkFBNkYseUVBQXlFLDZEQUE2RCxpSEFBaUgsd0NBQXdDLEdBQUcsa0NBQWtDLDBCQUEwQix5REFBeUQsd1ZBQXdWLDZDQUE2QyxLQUFLLE9BQU8sNkNBQTZDLEtBQUssR0FBRywrN0JBQSs3QixxQ0FBcUMsdUdBQXVHLCtDQUErQywrQ0FBK0MsNkJBQTZCLHVEQUF1RCw0Q0FBNEMsS0FBSyxvSkFBb0oseUVBQXlFLDhDQUE4QyxxQkFBcUIsc0NBQXNDLG9DQUFvQywrQ0FBK0MsNkNBQTZDLHlCQUF5Qiw2QkFBNkIsK0JBQStCLGdDQUFnQyw2QkFBNkIsa0RBQWtELEtBQUssZ0NBQWdDLDJDQUEyQyxLQUFLLGNBQWMsR0FBRywwQkFBMEIsMEJBQTBCLG9CQUFvQix5Q0FBeUMsOEJBQThCLDBCQUEwQiwyQkFBMkIsNEJBQTRCLG9CQUFvQixpQkFBaUIsZ0JBQWdCLG1IQUFtSCx5RUFBeUUsbURBQW1ELHFCQUFxQiwrQkFBK0IsR0FBRyxrQ0FBa0MsbUVBQW1FLDREQUE0RCxHQUFHLDZDQUE2QywrRUFBK0UsR0FBRyw2Q0FBNkMsdUhBQXVILEdBQUcsNkNBQTZDLDJDQUEyQyxHQUFHLGdDQUFnQyx1QkFBdUIsNEJBQTRCLG9CQUFvQixpQkFBaUIsc0VBQXNFLDRDQUE0QyxHQUFHLElBQUksY0FBYyxpQ0FBaUMsNEJBQTRCLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsc0JBQXNCLEVBQUUsMEJBQTBCLEVBQUUsZUFBZSxpQ0FBaUMsNEJBQTRCLEVBQUUsc0JBQXNCLEVBQUUsMEJBQTBCLEdBQUcsRUFBRSxZQUFZLHVCQUF1QixXQUFXLHl2TkFBeXZOLEdBQUcsdUJBQXVCLHlCQUF5QixzQkFBc0IsYUFBYSxFQUFFLG9CQUFvQix1QkFBdUIsYUFBYSxzQkFBc0IsMEJBQTBCLGdEQUFnRCxFQUFFLGlEQUFpRCxFQUFFLGlEQUFpRCxVQUFVLDhGQUE4RixxQkFBcUIsc0JBQXNCLDhGQUE4RixvQkFBb0IsK1JBQStSLGtCQUFrQixnQkFBZ0IsWUFBWSxJQUFJLGtFQUFrRSxzQkFBc0IscUJBQXFCLDRCQUE0QixxQkFBcUIsc0NBQXNDLHFDQUFxQyxtQkFBbUIsc0RBQXNELHVFQUF1RSwrSEFBK0gsZ0JBQWdCLFlBQVksSUFBSSw2SkFBNkosbUJBQW1CLGlCQUFpQiwyQkFBMkIsSUFBSSxLQUFLLGlCQUFpQixLQUFLLGlCQUFpQixLQUFLLE1BQU0sY0FBYyx1QkFBdUIsT0FBTyxTQUFTLEdBQUcsb0JBQW9CLG1CQUFtQixXQUFXLEtBQUssV0FBVywwREFBMEQsZ0JBQWdCLHFCQUFxQixxQkFBcUIseVZBQXlWLGdFQUFnRSwwQ0FBMEMsd0JBQXdCLG9FQUFvRSxZQUFZLElBQUksS0FBSyxxQkFBcUIsY0FBYyxJQUFJLEtBQUssbUJBQW1CLElBQUksK0NBQStDLGtCQUFrQix3TEFBd0wsTUFBTSxrS0FBa0ssbUtBQW1LLHVDQUF1Qyx1QkFBdUIsc0JBQXNCLGdFQUFnRSxFQUFFLG1EQUFtRCx1QkFBdUIsYUFBYSxnRUFBZ0UsdURBQXVELHVCQUF1Qix1Q0FBdUMsd0JBQXdCLHlCQUF5Qiw0QkFBNEIsaUJBQWlCLHNEQUFzRCwwRkFBMEYsNERBQTRELGdDQUFnQyxtQ0FBbUMsR0FBRyxnQ0FBZ0MsbUVBQW1FLDREQUE0RCxHQUFHLDZDQUE2QywrRUFBK0UsR0FBRyw2Q0FBNkMsdUhBQXVILEdBQUcsNkNBQTZDLDJDQUEyQyxHQUFHLCtCQUErQix3QkFBd0IsNEJBQTRCLHlCQUF5QixpQkFBaUIsc0hBQXNILHlDQUF5QyxHQUFHLElBQUksc0JBQXNCLHNCQUFzQiw0QkFBNEIsRUFBRSx5QkFBeUIsRUFBRSwwQkFBMEIsSUFBSSxFQUFFLDRCQUE0Qix1QkFBdUIsYUFBYSx3QkFBd0IsNEJBQTRCLDJKQUEySiwyQ0FBMkMscUJBQXFCLG9EQUFvRCxpQkFBaUIsWUFBWSxLQUFLLEtBQUssMkJBQTJCLElBQUksK0JBQStCLFlBQVksSUFBSSxnQkFBZ0IsUUFBUSxNQUFNLDBDQUEwQyx5RUFBeUUsOENBQThDLGtGQUFrRixRQUFRLG9CQUFvQixHQUFHLHNHQUFzRyxRQUFRLDhFQUE4RSwySEFBMkgsNERBQTRELGlCQUFpQixrRkFBa0YsVUFBVSx3Q0FBd0MsU0FBUywyQkFBMkIsU0FBUywrQkFBK0IsK0JBQStCLG1CQUFtQixjQUFjLDBIQUEwSCxnQkFBZ0IsK0dBQStHLGNBQWMsVUFBVSwwREFBMEQsb0VBQW9FLG9FQUFvRSw0RUFBNEUsOEVBQThFLHdCQUF3QixrQkFBa0IsbUJBQW1CLDZJQUE2SSxzQkFBc0IsNkJBQTZCLHNKQUFzSiw0QkFBNEIsdUZBQXVGLFlBQVksSUFBSSx1QkFBdUIsOEdBQThHLHVCQUF1QiwyQkFBMkIsR0FBRyxlQUFlLG1CQUFtQixpQkFBaUIsa0JBQWtCLElBQUksZUFBZSxtQkFBbUIsaUJBQWlCLG9CQUFvQixrQ0FBa0MseUpBQXlKLG1DQUFtQyxZQUFZLElBQUksdURBQXVELG1IQUFtSCw0Q0FBNEMsd1dBQXdXLDhDQUE4QywrQkFBK0Isc05BQXNOLGlCQUFpQix5Q0FBeUMsOEVBQThFLE9BQU8sT0FBTyxrQkFBa0Isa0JBQWtCLHNFQUFzRSxxQ0FBcUMscURBQXFELHNGQUFzRiw0QkFBNEIsbUJBQW1CLGlCQUFpQiw4QkFBOEIsa2pCQUFrakIsOENBQThDLDhEQUE4RCwyQkFBMkIsT0FBTyxlQUFlLCtDQUErQyxpQkFBaUIseUdBQXlHLHNCQUFzQix5QkFBeUIsZUFBZSxRQUFRLGVBQWUsd0NBQXdDLGlCQUFpQixxQ0FBcUMsZUFBZSxTQUFTLGVBQWUsd0NBQXdDLGlCQUFpQix1Q0FBdUMsZ0JBQWdCLG9CQUFvQixxQkFBcUIsY0FBYyw0RkFBNEYsc0JBQXNCLHFCQUFxQixtQkFBbUIsY0FBYyxnTEFBZ0wsWUFBWSxvQkFBb0IsK0NBQStDLDZFQUE2RSxFQUFFLG1CQUFtQix1QkFBdUIseUdBQXlHLDBCQUEwQixhQUFhLDBFQUEwRSwwREFBMEQsdUZBQXVGLEtBQUssV0FBVyxLQUFLLFdBQVcscUJBQXFCLGdDQUFnQyw4REFBOEQsUUFBUSwrQkFBK0IsV0FBVywrQkFBK0IsV0FBVyxxQkFBcUIsYUFBYSwyRUFBMkUsT0FBTywrQkFBK0IsRUFBRSx3RkFBd0YsdUJBQXVCLGFBQWEsd0JBQXdCLDRIQUE0SCxxQ0FBcUMsZ0lBQWdJLDBCQUEwQix3TkFBd04sZ0RBQWdELHlDQUF5QywrREFBK0QsWUFBWSx1RUFBdUUsNkVBQTZFLGlCQUFpQixxQ0FBcUMsbUJBQW1CLHlNQUF5TSx3QkFBd0Isc0NBQXNDLG1CQUFtQixtRUFBbUUsWUFBWSx1RUFBdUUsb0VBQW9FLFlBQVksSUFBSSxvQkFBb0IsMkJBQTJCLGlCQUFpQixvREFBb0QsbUJBQW1CLDZPQUE2TywwQkFBMEIsb0RBQW9ELDJCQUEyQixvQ0FBb0MsT0FBTywyRUFBMkUsc0JBQXNCLGNBQWMsZ0ZBQWdGLDBCQUEwQiw2S0FBNkssaUJBQWlCLGlDQUFpQyxtQkFBbUIscUdBQXFHLE1BQU0sNENBQTRDLE1BQU0sNENBQTRDLFdBQVcsTUFBTSwyREFBMkQsbUNBQW1DLDREQUE0RCxLQUFLLG1EQUFtRCw0RUFBNEUsa0lBQWtJLHFKQUFxSixzQkFBc0IsMkxBQTJMLEVBQUUsc0hBQXNILHVCQUF1QixhQUFhLG1CQUFtQixXQUFXLGtDQUFrQyw0Q0FBNEMsZUFBZSxrRUFBa0UsR0FBRyx5Q0FBeUMsK0NBQStDLHVCQUF1Qix3QkFBd0IsdUJBQXVCLDZCQUE2QiwyQkFBMkIsaUJBQWlCLG9GQUFvRixzQkFBc0IscURBQXFELEdBQUcsK0NBQStDLDJDQUEyQyx1QkFBdUIsdUJBQXVCLDBCQUEwQixpQkFBaUIsK0JBQStCLGtDQUFrQyw4QkFBOEIsa0NBQWtDLHdDQUF3QyxrQ0FBa0Msd0NBQXdDLGtDQUFrQyx3Q0FBd0MsNkJBQTZCLEdBQUcsNkNBQTZDLCtDQUErQyx3QkFBd0Isd0JBQXdCLHVCQUF1Qiw2QkFBNkIsd0JBQXdCLHVCQUF1QixpQkFBaUIscUJBQXFCLHNCQUFzQixzRkFBc0YscURBQXFELEdBQUcsT0FBTyxFQUFFLFlBQVksdUJBQXVCLHdDQUF3QyxFQUFFLFFBQVEsdUJBQXVCLGdFQUFnRSw2REFBNkQsdUNBQXVDLHVCQUF1Qiw2QkFBNkIsMkJBQTJCLHVDQUF1QywyQkFBMkIsNkJBQTZCLCtCQUErQiwwQkFBMEIsb0RBQW9ELEdBQUcsaUJBQWlCLHdDQUF3Qyw0Q0FBNEMsNENBQTRDLDBDQUEwQyxzR0FBc0csc0hBQXNILCtFQUErRSwrQkFBK0IsK0JBQStCLHNCQUFzQixHQUFHLGtDQUFrQyxtRUFBbUUsNERBQTRELEdBQUcsNkNBQTZDLCtFQUErRSxHQUFHLDZDQUE2Qyx1SEFBdUgsR0FBRyw2Q0FBNkMsMkNBQTJDLEdBQUcsb0NBQW9DLGdDQUFnQyw4QkFBOEIsNEJBQTRCLGtDQUFrQyxpQ0FBaUMsNEJBQTRCLGlCQUFpQix1SEFBdUgsdUZBQXVGLDBCQUEwQixjQUFjLEtBQUssdUNBQXVDLEdBQUcsa0NBQWtDLGdKQUFnSiw0QkFBNEIsb0RBQW9ELHNDQUFzQyxLQUFLLHlCQUF5QixrREFBa0QsS0FBSywwQkFBMEIsa0RBQWtELEtBQUssbUNBQW1DLHlFQUF5RSw0Q0FBNEMscURBQXFELHNCQUFzQiw4QkFBOEIsd0JBQXdCLGdDQUFnQywyREFBMkQsOEJBQThCLHdCQUF3QixpQ0FBaUMsMERBQTBELGdEQUFnRCxHQUFHLGdEQUFnRCw0REFBNEQsR0FBRyw2Q0FBNkMsK0VBQStFLEdBQUcsNkNBQTZDLHVIQUF1SCxHQUFHLDZDQUE2QywyQ0FBMkMsR0FBRyx5QkFBeUIsNkJBQTZCLCtCQUErQiwrQkFBK0IseUJBQXlCLGlCQUFpQix5RUFBeUUscUZBQXFGLEdBQUcsUUFBUSw0QkFBNEIsRUFBRSxnQ0FBZ0MsRUFBRSw4QkFBOEIsRUFBRSw4QkFBOEIsRUFBRSx5QkFBeUIsRUFBRSwyQkFBMkIsdUJBQXVCLGdDQUFnQyx3QkFBd0IsRUFBRSw0QkFBNEIsdUJBQXVCLGFBQWEsc0JBQXNCLHVDQUF1Qyx3S0FBd0ssV0FBVyx3S0FBd0ssdUJBQXVCLG1DQUFtQyxFQUFFLG9DQUFvQyxFQUFFLG9DQUFvQyxFQUFFLG9DQUFvQyxFQUFFLG9DQUFvQyxzQ0FBc0MsT0FBTyxrQkFBa0IsYUFBYSxnQkFBZ0IseUJBQXlCLHNCQUFzQix3TkFBd04sZ0JBQWdCLGdCQUFnQixJQUFJLEtBQUssZ0JBQWdCLE9BQU8sb0JBQW9CLGNBQWMsK0NBQStDLElBQUksd0VBQXdFLFNBQVMsb0JBQW9CLG9FQUFvRSx3QkFBd0IscVVBQXFVLGtCQUFrQiwyQkFBMkIscUJBQXFCLHVCQUF1QixxQkFBcUIseUNBQXlDLGNBQWMsc0NBQXNDLHFCQUFxQix1Q0FBdUMscUJBQXFCLG1TQUFtUyxnRUFBZ0Usd0JBQXdCLHFCQUFxQiwyQ0FBMkMscUJBQXFCLGdNQUFnTSxnRUFBZ0Usc0JBQXNCLFFBQVEsY0FBYyxzQkFBc0IsMklBQTJJLHdGQUF3RixNQUFNLHlEQUF5RCxVQUFVLFdBQVcsS0FBSywwQkFBMEIsb0NBQW9DLElBQUksS0FBSywrREFBK0QsbUJBQW1CLFlBQVksS0FBSywyQkFBMkIsVUFBVSxXQUFXLHdFQUF3RSwyVUFBMlUsUUFBUSxnQkFBZ0IsUUFBUSxJQUFJLGtFQUFrRSxVQUFVLHdPQUF3TywrSUFBK0ksdUJBQXVCLHFCQUFxQixXQUFXLHFCQUFxQixtQ0FBbUMsUUFBUSxNQUFNLEtBQUssUUFBUSxJQUFJLG1CQUFtQiw4REFBOEQsMkJBQTJCLHNCQUFzQiwrREFBK0Qsb0JBQW9CLGtCQUFrQixrQ0FBa0MscUVBQXFFLG1CQUFtQixpSUFBaUksK0pBQStKLElBQUksdUJBQXVCLGdEQUFnRCxvQ0FBb0MsRUFBRSxpSUFBaUksdUJBQXVCLHdDQUF3QyxFQUFFLFFBQVEsdUJBQXVCLHdCQUF3QiwwQ0FBMEMsK0RBQStELEdBQUcsdUJBQXVCLHdCQUF3QixnSEFBZ0gsNkpBQTZKLEdBQUcsdUJBQXVCLHNCQUFzQiwyQkFBMkIsc0xBQXNMLEdBQUcsdUJBQXVCLHFCQUFxQiwyQkFBMkIsZ0lBQWdJLEdBQUcsdUJBQXVCLHNCQUFzQiwwSEFBMEgsK0hBQStILEdBQUcsdUJBQXVCLHdCQUF3Qix3R0FBd0csd0pBQXdKLEdBQUcsdUJBQXVCLDBCQUEwQix3R0FBd0csdUtBQXVLLEdBQUcsdUJBQXVCLHNCQUFzQixnSUFBZ0ksR0FBRyx1QkFBdUIsd0JBQXdCLDRRQUE0USxrQkFBa0Isc1dBQXNXLEdBQUcsdUJBQXVCLHNCQUFzQiw0QkFBNEIsdUZBQXVGLDBFQUEwRSx3SkFBd0osNEZBQTRGLHVLQUF1SyxFQUFFLGlCQUFpQix1QkFBdUIsMEJBQTBCLHNKQUFzSiwwYkFBMGIsR0FBRyx1QkFBdUIsa0NBQWtDLGtDQUFrQywwSkFBMEosR0FBRyx1QkFBdUIsOEJBQThCLGdDQUFnQywrSUFBK0ksR0FBRyx1QkFBdUIsNEJBQTRCLGtHQUFrRyxnQ0FBZ0Msd2ZBQXdmLFVBQVUsR0FBRyx1QkFBdUIsMEJBQTBCLDBGQUEwRixpR0FBaUcsb0hBQW9ILEdBQUcsdUJBQXVCLDBCQUEwQiwwRkFBMEYsaUdBQWlHLG9IQUFvSCxHQUFHLHVCQUF1QiwwQkFBMEIsd0ZBQXdGLHFHQUFxRyxrSEFBa0gsR0FBRyx1QkFBdUIsMEJBQTBCLHlCQUF5Qiw4TUFBOE0sR0FBRyx1QkFBdUIsMEJBQTBCLGlEQUFpRCw0WkFBNFosVUFBVSxHQUFHLHVCQUF1Qix3QkFBd0IsVUFBVSwrQ0FBK0MsNkdBQTZHLGlMQUFpTCxVQUFVLEdBQUcsdUJBQXVCLGFBQWEsd0JBQXdCLGlCQUFpQixhQUFhLG1CQUFtQixNQUFNLGNBQWMsTUFBTSxjQUFjLE1BQU0sZUFBZSxNQUFNLGlFQUFpRSxVQUFVLHNFQUFzRSxFQUFFLCtEQUErRCx1QkFBdUIsYUFBYSw2RUFBNkUsZ0JBQWdCLHdCQUF3QixJQUFJLGdCQUFnQixJQUFJLHdCQUF3QixTQUFTLHNCQUFzQixnREFBZ0QsSUFBSSxlQUFlLDBDQUEwQyxnQ0FBZ0MsdUNBQXVDLGtDQUFrQyxXQUFXLHlCQUF5QixzQkFBc0IsV0FBVyxLQUFLLGdCQUFnQixJQUFJLGdDQUFnQyxlQUFlLHdCQUF3QixpQkFBaUIsb0JBQW9CLElBQUksNERBQTRELHNFQUFzRSxpQkFBaUIsWUFBWSxvQ0FBb0MsU0FBUyxjQUFjLElBQUksS0FBSyx1Q0FBdUMsUUFBUSxrQ0FBa0MsdUJBQXVCLHNCQUFzQixXQUFXLDhCQUE4QixJQUFJLGlCQUFpQixTQUFTLFVBQVUsRUFBRSxvRUFBb0UsdUJBQXVCLCtDQUErQyx1REFBdUQsdUJBQXVCLG9CQUFvQiw4RkFBOEYsdURBQXVELDJHQUEyRyx1QkFBdUIsb0JBQW9CLDBCQUEwQixvREFBb0QsR0FBRyxpQkFBaUIseUNBQXlDLDRGQUE0RiwrQ0FBK0MsNERBQTRELDBEQUEwRCxrRUFBa0UsK0JBQStCLGdDQUFnQywwQkFBMEIsR0FBRyxxRkFBcUYsNkVBQTZFLGlDQUFpQyxvQ0FBb0Msb0RBQW9ELDZDQUE2Qyx5RUFBeUUsK0NBQStDLEdBQUcsNklBQTZJLGdFQUFnRSwrREFBK0QsZ0ZBQWdGLHdFQUF3RSx1REFBdUQsd0RBQXdELDZDQUE2Qyw2Q0FBNkMsb0NBQW9DLGdGQUFnRiw0REFBNEQseUZBQXlGLEdBQUcseUlBQXlJLDREQUE0RCxHQUFHLDZDQUE2QywrRUFBK0UsR0FBRyw2Q0FBNkMsdUhBQXVILEdBQUcsNkNBQTZDLDJDQUEyQyxHQUFHLCtCQUErQiwwSEFBMEgsNEJBQTRCLDJHQUEyRyx1QkFBdUIsb0JBQW9CLGlCQUFpQiwrRkFBK0YsbUNBQW1DLHlDQUF5Qyx1Q0FBdUMsMEJBQTBCLGFBQWEsS0FBSyw2RkFBNkYsOERBQThELG1HQUFtRyw0RUFBNEUsaUhBQWlILDBDQUEwQyxHQUFHLGtDQUFrQywrQ0FBK0MsdUJBQXVCLG9CQUFvQix5Q0FBeUMseUJBQXlCLHNCQUFzQixvQkFBb0IsaUJBQWlCLGtFQUFrRSxvQkFBb0IsdUJBQXVCLGlCQUFpQixHQUFHLGdDQUFnQyxtRUFBbUUsNERBQTRELEdBQUcsNkNBQTZDLCtFQUErRSxHQUFHLDZDQUE2Qyx1SEFBdUgsR0FBRyw2Q0FBNkMsMkNBQTJDLEdBQUcsK0JBQStCLDRCQUE0Qix3QkFBd0IseUJBQXlCLHNCQUFzQixvQkFBb0IsaUJBQWlCLGtFQUFrRSxrRUFBa0UsR0FBRyxnQ0FBZ0MsbUVBQW1FLDREQUE0RCxHQUFHLDZDQUE2QywrRUFBK0UsR0FBRyw2Q0FBNkMsdUhBQXVILEdBQUcsNkNBQTZDLDJDQUEyQyxHQUFHLDRCQUE0Qix1QkFBdUIsb0JBQW9CLDRCQUE0Qix5Q0FBeUMsNkJBQTZCLHlCQUF5QixvQkFBb0IsaUJBQWlCLDZEQUE2RCwrQ0FBK0MsS0FBSyxPQUFPLG9FQUFvRSxLQUFLLDZCQUE2QixvQkFBb0IsY0FBYyxHQUFHLGdDQUFnQyxpREFBaUQsd0JBQXdCLHlCQUF5QixvQkFBb0IsaUJBQWlCLG9EQUFvRCxvQ0FBb0MsY0FBYyxLQUFLLGdFQUFnRSxHQUFHLGdDQUFnQywrQ0FBK0Msb0JBQW9CLHlDQUF5Qyw0QkFBNEIsb0JBQW9CLGlCQUFpQixrRUFBa0UscUJBQXFCLDJCQUEyQixHQUFHLGdDQUFnQyxtRUFBbUUsNERBQTRELEdBQUcsNkNBQTZDLCtFQUErRSxHQUFHLDZDQUE2Qyx1SEFBdUgsR0FBRyw2Q0FBNkMsMkNBQTJDLEdBQUcsZ0NBQWdDLHVCQUF1Qiw0QkFBNEIsb0JBQW9CLGlCQUFpQixzRUFBc0UsNENBQTRDLEdBQUcsZ0NBQWdDLG1FQUFtRSw0REFBNEQsR0FBRyw2Q0FBNkMsK0VBQStFLEdBQUcsNkNBQTZDLHVIQUF1SCxHQUFHLDZDQUE2QywyQ0FBMkMsR0FBRyw2QkFBNkIsNEJBQTRCLHFCQUFxQix5Q0FBeUMsNkJBQTZCLDRCQUE0QixvQkFBb0IsaUJBQWlCLDZEQUE2RCwrQ0FBK0MsS0FBSyxPQUFPLHFFQUFxRSwrQkFBK0IsS0FBSyxzQkFBc0IsNEJBQTRCLEdBQUcsZ0NBQWdDLCtDQUErQyx5Q0FBeUMsaUJBQWlCLGtFQUFrRSxHQUFHLGdDQUFnQyxpREFBaUQsaUJBQWlCLDJDQUEyQyxHQUFHLE1BQU0sY0FBYyxpQ0FBaUMsNEJBQTRCLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxpQ0FBaUMsNEJBQTRCLEVBQUUseUJBQXlCLEVBQUUsc0JBQXNCLEVBQUUsZ0JBQWdCLGlDQUFpQyw0QkFBNEIsRUFBRSx5QkFBeUIsRUFBRSxzQkFBc0IsRUFBRSw4QkFBOEIsRUFBRSxlQUFlLGlDQUFpQyw0QkFBNEIsRUFBRSxzQkFBc0IsRUFBRSxvQkFBb0IsaUNBQWlDLDRCQUE0QixFQUFFLDhCQUE4QixFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixpQ0FBaUMsNEJBQTRCLEdBQUcsRUFBRSxZQUFZLHVCQUF1QixhQUFhLG9aQUFvWixrRUFBa0UsbWxDQUFtbEMsa0JBQWtCLGdCQUFnQixlQUFlLHNCQUFzQixZQUFZLFdBQVcsS0FBSyx1QkFBdUIsOEJBQThCLG1CQUFtQixzQ0FBc0Msa0NBQWtDLFNBQVMsY0FBYywrQkFBK0IscUlBQXFJLGNBQWMsK0JBQStCLHFFQUFxRSxjQUFjLCtCQUErQix1R0FBdUcsY0FBYywrQkFBK0IsMENBQTBDLHNCQUFzQixxQkFBcUIsNEJBQTRCLHFCQUFxQix5Q0FBeUMsY0FBYyx5QkFBeUIsMEJBQTBCLHVJQUF1SSxJQUFJLHVCQUF1QixJQUFJLEtBQUssV0FBVyx1QkFBdUIscUZBQXFGLElBQUkseUJBQXlCLGdGQUFnRix5QkFBeUIsc0JBQXNCLFFBQVEsY0FBYyx1MEJBQXUwQixhQUFhLHFDQUFxQyw2QkFBNkIsTUFBTSxLQUFLLG1CQUFtQixJQUFJLGtCQUFrQixtQ0FBbUMsZ0NBQWdDLCtEQUErRCw0QkFBNEIsU0FBUywwRUFBMEUsOEJBQThCLDhKQUE4SixpRkFBaUYsMElBQTBJLHNHQUFzRyxpQkFBaUIsV0FBVyxLQUFLLFdBQVcsZ0NBQWdDLGtCQUFrQixXQUFXLEtBQUssT0FBTyxnQ0FBZ0MsYUFBYSxXQUFXLEtBQUssVUFBVSxnQ0FBZ0MscUNBQXFDLDJCQUEyQixJQUFJLFdBQVcsZUFBZSxRQUFRLElBQUksdUJBQXVCLFdBQVcsaUJBQWlCLFNBQVMsMkJBQTJCLHNDQUFzQyxJQUFJLGlCQUFpQixTQUFTLEtBQUssb0NBQW9DLDZDQUE2QyxRQUFRLFdBQVcsdUJBQXVCLElBQUksMElBQTBJLGdCQUFnQixVQUFVLFdBQVcsS0FBSyxXQUFXLGlCQUFpQiwyQkFBMkIsSUFBSSwrQ0FBK0Msb1pBQW9aLE1BQU0sZUFBZSxJQUFJLEtBQUssWUFBWSxZQUFZLElBQUksK0NBQStDLFFBQVEsSUFBSSxLQUFLLFlBQVksc1hBQXNYLEtBQUssTUFBTSxlQUFlLElBQUksd0JBQXdCLElBQUksK0NBQStDLFFBQVEsSUFBSSxLQUFLLFlBQVksY0FBYywyWkFBMlosTUFBTSx3ZUFBd2Usc0NBQXNDLFFBQVEsb0dBQW9HLElBQUksb0dBQW9HLE9BQU8scVJBQXFSLHFGQUFxRixvQkFBb0IsK0NBQStDLFFBQVEsSUFBSSxtQ0FBbUMsY0FBYyxRQUFRLElBQUksc0NBQXNDLFFBQVEsSUFBSSxLQUFLLHNCQUFzQixJQUFJLHNDQUFzQyx1QkFBdUIsa0tBQWtLLDZNQUE2TSxtSkFBbUoseU1BQXlNLHdCQUF3QixRQUFRLG9HQUFvRyxJQUFJLG9HQUFvRyx5SkFBeUosU0FBUyxpRUFBaUUsK2NBQStjLG9CQUFvQixrQkFBa0Isa0NBQWtDLGdIQUFnSCxXQUFXLGlCQUFpQixnSEFBZ0gsa0JBQWtCLGVBQWUsUUFBUSxXQUFXLGlDQUFpQyxPQUFPLGdHQUFnRyxzQkFBc0IsMnJCQUEyckIseUJBQXlCLG9PQUFvTyxrQkFBa0IsK0JBQStCLGtJQUFrSSxrQkFBa0IsK0JBQStCLG1HQUFtRyxvRkFBb0YsMkVBQTJFLCtDQUErQyw2QkFBNkIsRUFBRSxtREFBbUQsRUFBRSw2QkFBNkIsRUFBRSw2QkFBNkIsRUFBRSw2QkFBNkIsdUNBQXVDLDZCQUE2QixFQUFFLG1EQUFtRCxFQUFFLDZCQUE2QixFQUFFLDZCQUE2Qiw4Q0FBOEMsNkJBQTZCLEVBQUUsbURBQW1ELEVBQUUsNkJBQTZCLEVBQUUsNkJBQTZCLEVBQUUsNkJBQTZCLDRFQUE0RSw2QkFBNkIsSUFBSSxzQkFBc0IsRUFBRSxzUEFBc1AsdUJBQXVCLGFBQWEsc0JBQXNCLGdFQUFnRSxxQkFBcUIsdURBQXVELGtCQUFrQixxQ0FBcUMsc0JBQXNCLGtCQUFrQixrQkFBa0IseUdBQXlHLGdEQUFnRCxxQ0FBcUMsa0hBQWtILHVCQUF1QiwwQ0FBMEMsRUFBRSxnREFBZ0QsdUJBQXVCLGFBQWEsc0JBQXNCLDRFQUE0RSx1QkFBdUIsbUZBQW1GLG9CQUFvQiwwRUFBMEUsZ0JBQWdCLFdBQVcsNEJBQTRCLDJDQUEyQyxtTEFBbUwsSUFBSSxLQUFLLHVEQUF1RCwwQkFBMEIsaUdBQWlHLFFBQVEsUUFBUSxJQUFJLEtBQUsseUdBQXlHLG9CQUFvQiw2Q0FBNkMsNkJBQTZCLG9EQUFvRCxrQkFBa0IsOExBQThMLElBQUksS0FBSyx1REFBdUQsMEJBQTBCLDJGQUEyRixpQkFBaUIsNEJBQTRCLHVYQUF1WCxpcEJBQWlwQiwrREFBK0QsMkhBQTJILElBQUksOENBQThDLFdBQVcsS0FBSyx1QkFBdUIsVUFBVSxZQUFZLElBQUkscUNBQXFDLGdDQUFnQyx1QkFBdUIsb0VBQW9FLEVBQUUsMkVBQTJFLHVCQUF1QixhQUFhLHNCQUFzQixxRUFBcUUscUJBQXFCLHVEQUF1RCxrQkFBa0IscUNBQXFDLHNCQUFzQixrQkFBa0Isa0JBQWtCLHlHQUF5RyxtREFBbUQscUNBQXFDLHNKQUFzSix1QkFBdUIsMENBQTBDLEVBQUUsZ0RBQWdELHVCQUF1QixhQUFhLDhDQUE4Qyx3Q0FBd0MsZUFBZSxzREFBc0QsR0FBRyxNQUFNLFdBQVcscUNBQXFDLDRDQUE0QywyQkFBMkIsMEJBQTBCLHNCQUFzQix1QkFBdUIsMkJBQTJCLEdBQUcseUJBQXlCLDBFQUEwRSxHQUFHLGlCQUFpQiw4Q0FBOEMsdURBQXVELDZFQUE2RSxHQUFHLCtFQUErRSx5RUFBeUUsc0JBQXNCLGlCQUFpQix5Q0FBeUMsMENBQTBDLDZFQUE2RSx3SUFBd0ksK0NBQStDLEdBQUcsc0RBQXNELGdEQUFnRCxnREFBZ0QsMEJBQTBCLGlCQUFpQixnRUFBZ0Usd0ZBQXdGLGtDQUFrQyxHQUFHLHFEQUFxRCw0Q0FBNEMsMkJBQTJCLHNCQUFzQix5QkFBeUIsMEVBQTBFLEdBQUcsaUJBQWlCLHlEQUF5RCxHQUFHLDJDQUEyQyxnREFBZ0QseUVBQXlFLGlCQUFpQixnRUFBZ0UsMEVBQTBFLEdBQUcsT0FBTyxFQUFFLFlBQVksdUJBQXVCLGFBQWEsc0JBQXNCLCtDQUErQyxxQkFBcUIscUdBQXFHLGtCQUFrQiw2SEFBNkgsOEJBQThCLGlEQUFpRCw0VEFBNFQsc0RBQXNELDBCQUEwQixvc0JBQW9zQix5QkFBeUIsb0JBQW9CLGtCQUFrQixnSEFBZ0gsb0JBQW9CLFlBQVksSUFBSSx5Q0FBeUMsNEpBQTRKLDhDQUE4QyxvRkFBb0YsU0FBUyxZQUFZLElBQUksS0FBSywyRkFBMkYsa0NBQWtDLDZMQUE2TCx1QkFBdUIsd0NBQXdDLFFBQVEsSUFBSSxLQUFLLCtDQUErQyxRQUFRLFdBQVcsS0FBSyxpREFBaUQsaUJBQWlCLHFEQUFxRCxXQUFXLDZCQUE2QixXQUFXLDhDQUE4Qyx5Q0FBeUMscUNBQXFDLFFBQVEsSUFBSSxLQUFLLCtFQUErRSxtQkFBbUIsNEJBQTRCLFdBQVcsZ0NBQWdDLDhEQUE4RCw0RkFBNEYsV0FBVyxnQ0FBZ0MsMkVBQTJFLHNCQUFzQiwwQ0FBMEMsRUFBRSw0RkFBNEYsdUJBQXVCLHdDQUF3QyxFQUFFLFFBQVEsdUJBQXVCLGFBQWEsc0JBQXNCLDRFQUE0RSxxRUFBcUUsbUdBQW1HLGdCQUFnQiwrekNBQSt6QyxrQkFBa0IsY0FBYyx3QkFBd0IsV0FBVyxzQkFBc0IsU0FBUyxnQkFBZ0IsZUFBZSxzQkFBc0IsNkJBQTZCLDhCQUE4QixjQUFjLDZCQUE2QixrQ0FBa0MsbUJBQW1CLGtJQUFrSSx1TEFBdUwsZ1FBQWdRLHlDQUF5Qyx1QkFBdUIsZ0dBQWdHLG1GQUFtRiwyQkFBMkIsc0ZBQXNGLG9FQUFvRSxlQUFlLFNBQVMsWUFBWSxJQUFJLGlDQUFpQyw0Q0FBNEMsK0VBQStFLFFBQVEsV0FBVyxnQkFBZ0Isc0hBQXNILDBFQUEwRSxpU0FBaVMsSUFBSSxtQkFBbUIsZ0NBQWdDLG9CQUFvQixRQUFRLFdBQVcsZ0JBQWdCLDhEQUE4RCx1QkFBdUIsaUJBQWlCLHNCQUFzQixRQUFRLGlDQUFpQywrQkFBK0IsV0FBVyx1QkFBdUIsU0FBUyxzQkFBc0IsaUJBQWlCLGtLQUFrSyxrQkFBa0Isb0ZBQW9GLFdBQVcsS0FBSyx1QkFBdUIsY0FBYyxhQUFhLDRCQUE0Qix1Q0FBdUMsd0hBQXdILDBCQUEwQixtQkFBbUIsZ0hBQWdILDBCQUEwQixxQ0FBcUMsd0dBQXdHLDBCQUEwQixnR0FBZ0csc0JBQXNCLFFBQVEsY0FBYyxnQ0FBZ0Msc0JBQXNCLHVIQUF1SCxlQUFlLGtOQUFrTiw2Q0FBNkMsNGtEQUE0a0QsMENBQTBDLDZCQUE2QixZQUFZLElBQUksS0FBSyxvQkFBb0IsNkZBQTZGLGtCQUFrQixpQkFBaUIsb0JBQW9CLDhNQUE4TSx5Q0FBeUMsc0JBQXNCLCtFQUErRSxnQ0FBZ0MsS0FBSyw4QkFBOEIsc0JBQXNCLDZCQUE2QixLQUFLLCtCQUErQixvQ0FBb0MseUJBQXlCLGtFQUFrRSw0QkFBNEIsMkJBQTJCLFdBQVcsaUJBQWlCLDhCQUE4QixPQUFPLDBCQUEwQiwyRUFBMkUsNkJBQTZCLDRCQUE0QixXQUFXLGlCQUFpQixxQ0FBcUMsUUFBUSxFQUFFLDBGQUEwRix1QkFBdUIsYUFBYSx3QkFBd0IsMkJBQTJCLGdCQUFnQiwwRUFBMEUsZ0NBQWdDLGdDQUFnQyxTQUFTLG9HQUFvRyw4RUFBOEUsdVNBQXVTLCtCQUErQixtREFBbUQsb0NBQW9DLEtBQUssK0JBQStCLDRDQUE0QyxrRkFBa0Ysd0JBQXdCLDBCQUEwQix3QkFBd0IsMEJBQTBCLHFCQUFxQix1QkFBdUIsMkJBQTJCLCtCQUErQixrQ0FBa0MsUUFBUSxlQUFlLHdCQUF3QixpQkFBaUIsaURBQWlELGVBQWUsT0FBTyxlQUFlLG1CQUFtQixpQkFBaUIsOEVBQThFLGlDQUFpQyxVQUFVLGlGQUFpRixtQkFBbUIsZUFBZSxTQUFTLGVBQWUsd0JBQXdCLGlCQUFpQixtREFBbUQsZUFBZSxNQUFNLGVBQWUscUJBQXFCLGlCQUFpQiwyQ0FBMkMsZUFBZSxLQUFLLGVBQWUsb0JBQW9CLGlCQUFpQixvREFBb0QsZUFBZSxXQUFXLGVBQWUsU0FBUyxpQkFBaUIsb0NBQW9DLGVBQWUsaUJBQWlCLGVBQWUsOEJBQThCLGlCQUFpQixnQ0FBZ0MsZ0JBQWdCLCtDQUErQyw2QkFBNkIsdUNBQXVDLG1DQUFtQyxtQ0FBbUMsb0JBQW9CLHVCQUF1QixXQUFXLCtOQUErTiw4TkFBOE4sMERBQTBELCtCQUErQiwrQ0FBK0MsbUVBQW1FLCtCQUErQix5RUFBeUUsT0FBTyxXQUFXLDZDQUE2QywrQkFBK0IsOENBQThDLE9BQU8sV0FBVyw0Q0FBNEMsc0RBQXNELE9BQU8sV0FBVyxvQ0FBb0MseUNBQXlDLHdDQUF3Qyx3RkFBd0YsbUJBQW1CLDJEQUEyRCxpQ0FBaUMsS0FBSyw2QkFBNkIsK0hBQStILEVBQUUsb0hBQW9ILHVCQUF1QixrRUFBa0UsNkNBQTZDLGtCQUFrQixlQUFlLGtCQUFrQix1Q0FBdUMsR0FBRyxrQ0FBa0MscURBQXFELGtCQUFrQixpQkFBaUIsMERBQTBELDZDQUE2QyxHQUFHLElBQUksc0JBQXNCLHNCQUFzQiw0QkFBNEIsSUFBSSxFQUFFLDRCQUE0Qix1QkFBdUIsYUFBYSxnUkFBZ1IsVUFBVSxFQUFFLGFBQWEsc0pBQXNKLGNBQWMscURBQXFELFFBQVEsa0NBQWtDLHdCQUF3QixRQUFRLDZCQUE2Qix3QkFBd0Isb0JBQW9CLGNBQWMsNkJBQTZCLFdBQVcsd0JBQXdCLFFBQVEsc0JBQXNCLGVBQWUseURBQXlELGtCQUFrQixpQkFBaUIsa0NBQWtDLFdBQVcsb0JBQW9CLFdBQVcsSUFBSSxzRUFBc0UsU0FBUyxZQUFZLFNBQVMsaUJBQWlCLDJEQUEyRCxHQUFHLDZDQUE2Qyx1R0FBdUcsZUFBZSw2SEFBNkgsc0xBQXNMLGFBQWEsVUFBVSxvQkFBb0Isa0JBQWtCLDJFQUEyRSx5Q0FBeUMsaUZBQWlGLCtrQkFBK2tCLDhFQUE4RSxhQUFhLDhCQUE4QiwyQkFBMkIsbUdBQW1HLGdFQUFnRSw4QkFBOEIscUJBQXFCLGNBQWMsaUdBQWlHLGtCQUFrQixhQUFhLGtDQUFrQyxJQUFJLFdBQVcsY0FBYyxJQUFJLEtBQUsseUJBQXlCLE1BQU0sWUFBWSxJQUFJLG1CQUFtQixxQ0FBcUMsV0FBVyxhQUFhLGlEQUFpRCxhQUFhLEtBQUssZ0JBQWdCLDJCQUEyQixhQUFhLDBCQUEwQiw0SEFBNEgseURBQXlELG9CQUFvQixZQUFZLG1CQUFtQiwwREFBMEQsc0JBQXNCLGdCQUFnQixtQkFBbUIsNENBQTRDLHNCQUFzQiw4SkFBOEosd0JBQXdCLFlBQVksV0FBVyxtQkFBbUIsWUFBWSxZQUFZLFdBQVcsbUJBQW1CLHVDQUF1QyxtQ0FBbUMsbURBQW1ELG9CQUFvQix5REFBeUQsNEVBQTRFLG9DQUFvQyxnQkFBZ0IscUNBQXFDLDBHQUEwRyxTQUFTLHlDQUF5QyxLQUFLLDZDQUE2QyxZQUFZLElBQUksS0FBSywwQ0FBMEMsTUFBTSxrQ0FBa0MsWUFBWSxJQUFJLEtBQUssV0FBVyxhQUFhLGdCQUFnQixvS0FBb0ssME9BQTBPLEVBQUUsMENBQTBDLHFFQUFxRSxhQUFhLFNBQVMsSUFBSSxzQkFBc0IseUZBQXlGLDZCQUE2Qix1Q0FBdUMsWUFBWSxJQUFJLEtBQUssV0FBVyxzRUFBc0UsZUFBZSwrQkFBK0IsSUFBSSxzREFBc0QsZUFBZSw0QkFBNEIsSUFBSSxLQUFLLDRCQUE0QixLQUFLLCtCQUErQixzQkFBc0Isd0JBQXdCLDBCQUEwQixpQkFBaUIsSUFBSSw4RUFBOEUsa0JBQWtCLE1BQU0sc0JBQXNCLElBQUksaUNBQWlDLHNCQUFzQix1QkFBdUIsWUFBWSxTQUFTLEVBQUUsbURBQW1ELGlMQUFpTCxZQUFZLEtBQUssV0FBVyxRQUFRLGdCQUFnQixJQUFJLGtDQUFrQyxZQUFZLElBQUkscUhBQXFILFlBQVksSUFBSSxLQUFLLFdBQVcsZ0RBQWdELDhHQUE4RyxjQUFjLG1GQUFtRixrQ0FBa0MsSUFBSSxLQUFLLFdBQVcsb0JBQW9CLFlBQVksSUFBSSxpQkFBaUIsV0FBVywyQ0FBMkMsU0FBUyxvSEFBb0gsbUJBQW1CLGlOQUFpTixTQUFTLGlHQUFpRyxZQUFZLElBQUksS0FBSyxXQUFXLGtIQUFrSCxNQUFNLDhKQUE4SixZQUFZLElBQUksS0FBSyxXQUFXLG9DQUFvQywwTkFBME4sWUFBWSxJQUFJLEtBQUssV0FBVyx5REFBeUQsb0xBQW9MLEtBQUssWUFBWSxJQUFJLG9CQUFvQiw2Q0FBNkMsMERBQTBELHVCQUF1Qix1QkFBdUIsR0FBRyxpQkFBaUIsRUFBRSw2UEFBNlAsdUJBQXVCLG1CQUFtQiwwQ0FBMEMsK0NBQStDLHdCQUF3QiwwQkFBMEIsMkJBQTJCLCtCQUErQiw0QkFBNEIsMkJBQTJCLCtCQUErQiwyQ0FBMkMsaUNBQWlDLDZCQUE2QixHQUFHLGlCQUFpQixpREFBaUQsd0RBQXdELDhNQUE4TSwyQkFBMkIsMkdBQTJHLEtBQUssR0FBRyxnREFBZ0QsdURBQXVELCtCQUErQiwyQkFBMkIsaUJBQWlCLGlCQUFpQixtQkFBbUIsMkJBQTJCLHlEQUF5RCw2QkFBNkIsT0FBTyxPQUFPLCtEQUErRCxPQUFPLEtBQUssT0FBTyxvREFBb0Qsd0JBQXdCLGdCQUFnQixPQUFPLHdFQUF3RSxvRUFBb0UsS0FBSyxHQUFHLCtDQUErQywrQ0FBK0Msd0JBQXdCLHdCQUF3QiwwQkFBMEIsMEJBQTBCLHdCQUF3QixpQkFBaUIsaURBQWlELHdEQUF3RCw2QkFBNkIsb0NBQW9DLGdDQUFnQyx3Q0FBd0Msa0NBQWtDLHdDQUF3QyxrQ0FBa0Msd0NBQXdDLGtCQUFrQixHQUFHLGlEQUFpRCwyQ0FBMkMsaUJBQWlCLHdEQUF3RCxzQkFBc0IsY0FBYyxLQUFLLGtDQUFrQyxHQUFHLE1BQU0sRUFBRSxZQUFZLHVCQUF1QixhQUFhLGlGQUFpRixzQkFBc0Isd1FBQXdRLHdCQUF3QixvSEFBb0gscUNBQXFDLHNCQUFzQixxQkFBcUIsbUlBQW1JLHNCQUFzQixNQUFNLGdCQUFnQixxQkFBcUIsT0FBTyxnTkFBZ04sNk1BQTZNLG1DQUFtQyxJQUFJLFdBQVcsa0lBQWtJLDhEQUE4RCxvRkFBb0YsZ0NBQWdDLDRDQUE0Qyx5QkFBeUIsUUFBUSxJQUFJLEtBQUssd0JBQXdCLHdDQUF3QyxTQUFTLG1KQUFtSix1ZkFBdWYseURBQXlELG9MQUFvTCx1RUFBdUUsd0NBQXdDLDJCQUEyQix3QkFBd0IsT0FBTyxvREFBb0QsRUFBRSx5RUFBeUUsdUJBQXVCLDRCQUE0QixzRUFBc0Usa0RBQWtELDRGQUE0Riw4REFBOEQsR0FBRyx1QkFBdUIsYUFBYSxzQkFBc0IsaUNBQWlDLEdBQUcsdUJBQXVCLGFBQWEsMEJBQTBCLDBCQUEwQixXQUFXLGFBQWEsRUFBRSxzQkFBc0IsT0FBTyx5RkFBeUYsZ0VBQWdFLGNBQWMsVUFBVSxlQUFlLGlCQUFpQixhQUFhLFFBQVEscUJBQXFCLFlBQVksd0JBQXdCLHlCQUF5QixRQUFRLHFCQUFxQixZQUFZLHdCQUF3Qix5QkFBeUIsbURBQW1ELFFBQVEsSUFBSSxLQUFLLHFCQUFxQixRQUFRLElBQUksa0VBQWtFLHFCQUFxQixTQUFTLEVBQUUscUJBQXFCLHVCQUF1QixnRUFBZ0UsbUVBQW1FLDREQUE0RCxHQUFHLDZDQUE2QywrRUFBK0UsR0FBRyw2Q0FBNkMsdUhBQXVILEdBQUcsNkNBQTZDLDJDQUEyQyxHQUFHLDRCQUE0Qix1QkFBdUIsdUJBQXVCLG9CQUFvQiw2QkFBNkIsK0JBQStCLHVDQUF1Qyw2QkFBNkIsNkJBQTZCLHNCQUFzQiw4QkFBOEIsaUJBQWlCLDZEQUE2RCxvQ0FBb0MsS0FBSyxPQUFPLHdCQUF3Qiw4Q0FBOEMsK0JBQStCLE9BQU8sdURBQXVELCtDQUErQyxtREFBbUQsOEZBQThGLG1DQUFtQywwQkFBMEIsa0JBQWtCLGdDQUFnQyxLQUFLLEdBQUcsZ0NBQWdDLG1FQUFtRSw0REFBNEQsR0FBRyw2Q0FBNkMsK0VBQStFLEdBQUcsNkNBQTZDLHVIQUF1SCxHQUFHLDZDQUE2QywyQ0FBMkMsR0FBRyw0QkFBNEIsdUJBQXVCLHVCQUF1QixvQkFBb0IseUNBQXlDLDBCQUEwQiw2QkFBNkIsMkNBQTJDLDJCQUEyQiw2QkFBNkIsc0JBQXNCLDhCQUE4QixpQkFBaUIsNkRBQTZELG9DQUFvQyxLQUFLLE9BQU8sK0JBQStCLHFEQUFxRCxnQ0FBZ0MsT0FBTyx5REFBeUQsK0NBQStDLG9EQUFvRCxxQ0FBcUMsa0dBQWtHLDBCQUEwQixrQkFBa0IsZ0NBQWdDLEtBQUssR0FBRyxnQ0FBZ0MsbUVBQW1FLDREQUE0RCxHQUFHLDZDQUE2QywrRUFBK0UsR0FBRyw2Q0FBNkMsdUhBQXVILEdBQUcsNkNBQTZDLDJDQUEyQyxHQUFHLDRCQUE0Qix1QkFBdUIsdUJBQXVCLG9CQUFvQixpQ0FBaUMsMkJBQTJCLHVCQUF1Qix1Q0FBdUMsMEJBQTBCLDZCQUE2QixrQ0FBa0MsNkJBQTZCLHNCQUFzQiw4QkFBOEIsaUJBQWlCLDZEQUE2RCxvQ0FBb0MsS0FBSyxPQUFPLHdDQUF3Qyw4Q0FBOEMsaUNBQWlDLE9BQU8sMEVBQTBFLHNIQUFzSCw0RUFBNEUsbUNBQW1DLDBCQUEwQixrQkFBa0Isb0NBQW9DLEtBQUssR0FBRyxrQ0FBa0MsbUVBQW1FLDREQUE0RCxHQUFHLDZDQUE2QywrRUFBK0UsR0FBRyw2Q0FBNkMsdUhBQXVILEdBQUcsNkNBQTZDLDJDQUEyQyxHQUFHLG1DQUFtQyx3QkFBd0IsNkJBQTZCLHNCQUFzQiw4QkFBOEIsaUJBQWlCLGtJQUFrSSx5Q0FBeUMsR0FBRyxrQ0FBa0MsbUVBQW1FLDREQUE0RCxHQUFHLDZDQUE2QywrRUFBK0UsR0FBRyw2Q0FBNkMsdUhBQXVILEdBQUcsNkNBQTZDLDJDQUEyQyxHQUFHLG1DQUFtQywwQkFBMEIsd0JBQXdCLDhCQUE4QixpQkFBaUIsa0ZBQWtGLGlEQUFpRCxHQUFHLFFBQVEsNEJBQTRCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUsc0JBQXNCLEtBQUssaUNBQWlDLElBQUksaUNBQWlDLElBQUksaUNBQWlDLElBQUksaUNBQWlDLElBQUksaUNBQWlDLElBQUksa0NBQWtDLGdCQUFnQiw0QkFBNEIscUZBQXFGLGdDQUFnQyxjQUFjLDJCQUEyQixjQUFjLDZCQUE2QixjQUFjLHFDQUFxQyxjQUFjLCtCQUErQixjQUFjLGlDQUFpQyxlQUFlLEVBQUUsNEJBQTRCLHVCQUF1QixhQUFhLHFOQUFxTixnQkFBZ0IsZ0NBQWdDLG1KQUFtSixvQkFBb0IsNEJBQTRCLGdCQUFnQixpREFBaUQsY0FBYyx1QkFBdUIsb0NBQW9DLDh0QkFBOHRCLHNCQUFzQiw2TEFBNkwsNkJBQTZCLEVBQUUsNkJBQTZCLEVBQUUsNkJBQTZCLEVBQUUsbURBQW1ELG9DQUFvQyxzQkFBc0Isa0JBQWtCLHdDQUF3QyxjQUFjLDRCQUE0QiwwQkFBMEIsWUFBWSxJQUFJLDBEQUEwRCxTQUFTLHVCQUF1QiwyQkFBMkIsWUFBWSxJQUFJLDJEQUEyRCxVQUFVLGtHQUFrRyxjQUFjLDBCQUEwQixnQkFBZ0IsOENBQThDLG9CQUFvQiw4Q0FBOEMsb0JBQW9CLGtIQUFrSCxnQkFBZ0IsSUFBSSxnQkFBZ0IsSUFBSSxpREFBaUQsU0FBUyxlQUFlLCtSQUErUixZQUFZLElBQUksYUFBYSx3REFBd0QsZ0JBQWdCLEtBQUssV0FBVyxRQUFRLElBQUksYUFBYSxtRUFBbUUsc0NBQXNDLGNBQWMsd0NBQXdDLGtDQUFrQyxRQUFRLG9CQUFvQixRQUFRLFFBQVEsb0NBQW9DLFlBQVksUUFBUSxJQUFJLG9EQUFvRCwwU0FBMFMsdUNBQXVDLDBCQUEwQixXQUFXLDZEQUE2RCxTQUFTLGlCQUFpQixvZEFBb2Qsb0JBQW9CLE1BQU0sbURBQW1ELFNBQVMsd0JBQXdCLGVBQWUsT0FBTyw0Q0FBNEMsbUJBQW1CLDhGQUE4RiwrQkFBK0IsOEZBQThGLHdCQUF3Qix1R0FBdUcsb0JBQW9CLGtCQUFrQixrQ0FBa0Msa0RBQWtELHVDQUF1QywwQ0FBMEMsVUFBVSxZQUFZLElBQUksMkNBQTJDLFNBQVMseUJBQXlCLE1BQU0sNkNBQTZDLHVDQUF1QyxnQ0FBZ0Msc0JBQXNCLDBCQUEwQiwwTUFBME0sS0FBSyxrQkFBa0IseUJBQXlCLGdHQUFnRyxLQUFLLHNCQUFzQiwwQkFBMEIsaURBQWlELGdGQUFnRixLQUFLLG9CQUFvQiw0QkFBNEIsWUFBWSxJQUFJLHlHQUF5Ryw2R0FBNkcsNkRBQTZELDhCQUE4QixLQUFLLFVBQVUsUUFBUSxXQUFXLDhCQUE4Qiw2R0FBNkcsYUFBYSxXQUFXLFVBQVUsSUFBSSxLQUFLLG1CQUFtQixJQUFJLCtDQUErQyw2REFBNkQseUNBQXlDLDZGQUE2RixRQUFRLG9IQUFvSCxVQUFVLElBQUksS0FBSyxLQUFLLGVBQWUsSUFBSSxLQUFLLDJDQUEyQyxrREFBa0QseURBQXlELGtCQUFrQiwwQkFBMEIsaURBQWlELFFBQVEsSUFBSSxjQUFjLE9BQU8sc0JBQXNCLFFBQVEsSUFBSSxjQUFjLDRDQUE0Qyw2QkFBNkIsaUJBQWlCLDBCQUEwQixNQUFNLGlEQUFpRCxRQUFRLElBQUksY0FBYyxPQUFPLHNCQUFzQixRQUFRLElBQUksY0FBYyw0Q0FBNEMsNkJBQTZCLGlCQUFpQixTQUFTLDBFQUEwRSxRQUFRLGdEQUFnRCxnQ0FBZ0MsZUFBZSxJQUFJLHNEQUFzRCxZQUFZLElBQUksOENBQThDLElBQUksOENBQThDLDBHQUEwRyxRQUFRLFdBQVcsdUJBQXVCLElBQUksS0FBSyxZQUFZLElBQUksa0JBQWtCLFFBQVEsSUFBSSxrQkFBa0IsT0FBTyxlQUFlLHVFQUF1RSxnQ0FBZ0MsV0FBVyxtQkFBbUIsSUFBSSxLQUFLLFFBQVEsSUFBSSxrQkFBa0IsUUFBUSxJQUFJLGtCQUFrQixPQUFPLFdBQVcseUVBQXlFLG9QQUFvUCxzQkFBc0Isa1BBQWtQLEVBQUUscUtBQXFLLHVCQUF1QixhQUFhLG1CQUFtQix3Q0FBd0MsNkNBQTZDLGtDQUFrQyxpQkFBaUIsNERBQTRELEdBQUcsZ0RBQWdELDBDQUEwQyxpQkFBaUIseUJBQXlCLEdBQUcsTUFBTSxFQUFFLFlBQVksdUJBQXVCLGFBQWEsMkRBQTJELGtCQUFrQiwyT0FBMk8sd0JBQXdCLG9GQUFvRixzQ0FBc0Msa0JBQWtCLGtCQUFrQixpQkFBaUIsc1hBQXNYLDRGQUE0RixTQUFTLDRCQUE0QixtSkFBbUosVUFBVSx1SEFBdUgsc0JBQXNCLE9BQU8sNFNBQTRTLHNCQUFzQixpRkFBaUYsRUFBRSxvREFBb0QsdUJBQXVCLGFBQWEsd0JBQXdCLDBDQUEwQyxxQkFBcUIsOEdBQThHLGVBQWUsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsdUJBQXVCLGlDQUFpQyxPQUFPLHFEQUFxRCxtRkFBbUYsT0FBTyxPQUFPLDJGQUEyRix5S0FBeUssZ0lBQWdJLFNBQVMsb0RBQW9ELEVBQUUsb0RBQW9ELEVBQUUsb0RBQW9ELEVBQUUsb0RBQW9ELEVBQUUsb0RBQW9ELEVBQUUsb0RBQW9ELEVBQUUsb0RBQW9ELHVIQUF1SCxPQUFPLE9BQU8sbURBQW1ELG1GQUFtRix3Q0FBd0MsRUFBRSxzQkFBc0Isd0RBQXdELGtCQUFrQiwwREFBMEQsV0FBVyw4QkFBOEIsOEdBQThHLGtCQUFrQixpQ0FBaUMsZUFBZSw0Q0FBNEMsaUJBQWlCLFlBQVksaUJBQWlCLDRDQUE0Qyw2QkFBNkIsb0JBQW9CLGtEQUFrRCxRQUFRLGFBQWEsV0FBVyxxQkFBcUIsY0FBYyxXQUFXLDBGQUEwRixrQkFBa0IsY0FBYyxpSkFBaUoseUJBQXlCLHdCQUF3Qiw2QkFBNkIsb0NBQW9DLGdKQUFnSiwwQkFBMEIsa0hBQWtILHVJQUF1SSxzQkFBc0IsbUhBQW1ILEVBQUUsd0ZBQXdGLHVCQUF1QixhQUFhLGlLQUFpSyxjQUFjLGtLQUFrSyxrQkFBa0IsZ0JBQWdCLDBCQUEwQixrQkFBa0IsTUFBTSw2QkFBNkIsb0dBQW9HLGVBQWUsSUFBSSx1Q0FBdUMsb0JBQW9CLElBQUksd0NBQXdDLDJEQUEyRCxzQkFBc0Isc0NBQXNDLElBQUksd0NBQXdDLDRNQUE0TSw0QkFBNEIsNkJBQTZCLFFBQVEsb0RBQW9ELDRCQUE0QixpRkFBaUYsaUJBQWlCLDhGQUE4Rix3QkFBd0IsMkhBQTJILDZCQUE2QiwwQ0FBMEMsK0RBQStELHNCQUFzQixxQkFBcUIsUUFBUSxXQUFXLEtBQUssV0FBVyw2QkFBNkIsOERBQThELElBQUksZ05BQWdOLFFBQVEsb0NBQW9DLEVBQUUsYUFBYSw2Q0FBNkMsNkVBQTZFLFFBQVEsUUFBUSxXQUFXLGVBQWUsS0FBSyxnQkFBZ0IsTUFBTSxPQUFPLDBCQUEwQixhQUFhLDJDQUEyQyxZQUFZLFdBQVcsbURBQW1ELHlCQUF5Qiw4QkFBOEIsd0VBQXdFLCtCQUErQixlQUFlLDRCQUE0QixFQUFFLHVKQUF1Six1QkFBdUIsa0JBQWtCLG9KQUFvSix1RkFBdUYsR0FBRyx1QkFBdUIsYUFBYSw0QkFBNEIsWUFBWSxnQkFBZ0IsSUFBSSxLQUFLLDJDQUEyQyxVQUFVLHFEQUFxRCxNQUFNLGdDQUFnQyxrQ0FBa0Msd0VBQXdFLG9CQUFvQixLQUFLLHNGQUFzRixrQ0FBa0Msd0VBQXdFLG1CQUFtQixVQUFVLHFCQUFxQix3QkFBd0IsK0ZBQStGLGtCQUFrQiwwQkFBMEIsOEJBQThCLElBQUksZ0NBQWdDLCtCQUErQiw2Q0FBNkMsS0FBSyxvQ0FBb0MsR0FBRyxrREFBa0QsMkJBQTJCLGdCQUFnQixzREFBc0QsZ0JBQWdCLFNBQVMsZUFBZSxFQUFFLDBCQUEwQiwwQ0FBMEMsSUFBSSxrQ0FBa0Msb0NBQW9DLGdCQUFnQixnQ0FBZ0MsSUFBSSx1QkFBdUIsYUFBYSxJQUFJLHNCQUFzQixTQUFTLGdCQUFnQiwyQkFBMkIsSUFBSSxpQkFBaUIsU0FBUyxlQUFlLDhCQUE4QixtQ0FBbUMsWUFBWSxJQUFJLEtBQUssY0FBYyxzRUFBc0UsOENBQThDLDJCQUEyQixnQkFBZ0IsWUFBWSxJQUFJLEtBQUssY0FBYyxzRUFBc0UsS0FBSyxZQUFZLElBQUksa0JBQWtCLGVBQWUsU0FBUyxnQkFBZ0IsU0FBUyxlQUFlLEVBQUUsNEJBQTRCLDhDQUE4QywrRkFBK0YseUJBQXlCLDZEQUE2RCxxQ0FBcUMsZUFBZSxvQ0FBb0MsaUJBQWlCLDRHQUE0RyxFQUFFLEVBQUUsZ0JBQWdCLHVCQUF1QixhQUFhLHNDQUFzQyxjQUFjLDJDQUEyQyxTQUFTLE1BQU0sZ0JBQWdCLDJCQUEyQixJQUFJLFdBQVcsU0FBUyw0QkFBNEIsa0JBQWtCLFVBQVUsdUdBQXVHLDREQUE0RCwrQkFBK0Isa0NBQWtDLHVDQUF1QyxrQ0FBa0MscUZBQXFGLGlFQUFpRSw2REFBNkQsa0NBQWtDLGdEQUFnRCxvQkFBb0IscUVBQXFFLDZEQUE2RCwyRUFBMkUsY0FBYyxnREFBZ0QscUJBQXFCLG9DQUFvQyxTQUFTLGdCQUFnQixlQUFlLGlHQUFpRyxTQUFTLFdBQVcsV0FBVyxLQUFLLHlCQUF5QiwrQkFBK0IsbUJBQW1CLEdBQUcsa0RBQWtELGNBQWMsa0JBQWtCLHVCQUF1QixXQUFXLDJCQUEyQixnREFBZ0QsRUFBRSxxQ0FBcUMsb0VBQW9FLHVEQUF1RCxrREFBa0QsbUJBQW1CLFVBQVUsb0JBQW9CLGlFQUFpRSwrQkFBK0IsK0JBQStCLGtDQUFrQyxnREFBZ0QsdUNBQXVDLHVDQUF1QyxrQ0FBa0MscUZBQXFGLGdCQUFnQiw4REFBOEQsWUFBWSxNQUFNLGNBQWMsTUFBTSxxQkFBcUIsc0JBQXNCLFlBQVksV0FBVyxnQkFBZ0Isc0JBQXNCLGVBQWUsU0FBUyxjQUFjLE9BQU8scURBQXFELEVBQUUsZ0NBQWdDLHVCQUF1QixhQUFhLHdCQUF3QixZQUFZLEtBQUssV0FBVywrQ0FBK0MsV0FBVyxLQUFLLHNCQUFzQixlQUFlLGlDQUFpQyxZQUFZLFdBQVcsS0FBSyxxQkFBcUIsaUVBQWlFLDhCQUE4Qix3Q0FBd0MsbUNBQW1DLFVBQVUsR0FBRyx1QkFBdUIsYUFBYSx5QkFBeUIsOERBQThELElBQUksS0FBSyw4QkFBOEIsTUFBTSxrQkFBa0Isd0JBQXdCLFNBQVMsWUFBWSw0Q0FBNEMsRUFBRSxhQUFhLG1CQUFtQixHQUFHLFNBQVMsNEJBQTRCLGdFQUFnRSxJQUFJLEtBQUssNkJBQTZCLFdBQVcsNkJBQTZCLEVBQUUsVUFBVSxPQUFPLDJTQUEyUyxRQUFRLGdCQUFnQixPQUFPLHFCQUFxQixLQUFLLFlBQVksV0FBVyxLQUFLLFdBQVcsY0FBYyxhQUFhLEdBQUcsdUJBQXVCLGFBQWEseUJBQXlCLG9DQUFvQywrQkFBK0IsaUNBQWlDLHNIQUFzSCwwQkFBMEIsMEZBQTBGLGNBQWMsMEJBQTBCLEdBQUcsbUJBQW1CLCtCQUErQixvQkFBb0IsMkRBQTJELElBQUksS0FBSyx1QkFBdUIsNkNBQTZDLDBGQUEwRixrQkFBa0IsY0FBYyxlQUFlLG9DQUFvQyxtQ0FBbUMsNkRBQTZELHNDQUFzQyxLQUFLLHNCQUFzQix3QkFBd0IscUZBQXFGLDRCQUE0QixJQUFJLGVBQWUsU0FBUyxpR0FBaUcsOEJBQThCLFNBQVMsUUFBUSxrQ0FBa0MsU0FBUyxnQ0FBZ0MsdUVBQXVFLHdFQUF3RSx3QkFBd0Isd0NBQXdDLFlBQVksV0FBVyxzQ0FBc0MsNkRBQTZELDZCQUE2QiwyQ0FBMkMsU0FBUywwRUFBMEUsRUFBRSxrRUFBa0UsdUJBQXVCLGFBQWEsY0FBYyxzSUFBc0ksd0JBQXdCLGVBQWUsc0NBQXNDLGtCQUFrQixxQkFBcUIsT0FBTyx1S0FBdUssaUJBQWlCLHdFQUF3RSxtQkFBbUIsdUdBQXVHLDREQUE0RCwwRkFBMEYsNkpBQTZKLHNCQUFzQiwrQkFBK0IsR0FBRyx1QkFBdUIsYUFBYSxrRUFBa0Usc0RBQXNELHlCQUF5Qix5Q0FBeUMsOEJBQThCLHlCQUF5QiwyQkFBMkIsMEJBQTBCLDJCQUEyQixpQkFBaUIsK0hBQStILDJFQUEyRSx3RUFBd0UsbURBQW1ELHVFQUF1RSx3R0FBd0csb0ZBQW9GLEdBQUcsb0NBQW9DLDhDQUE4QyxpQkFBaUIsNkJBQTZCLEdBQUcsSUFBSSxzQkFBc0Isc0JBQXNCLDRCQUE0QixFQUFFLHlCQUF5QixFQUFFLDJCQUEyQixJQUFJLEVBQUUsNEJBQTRCLHVCQUF1QixhQUFhLDBEQUEwRCx3QkFBd0IsU0FBUyx3QkFBd0Isc0JBQXNCLHlKQUF5Siw2SUFBNkkscUJBQXFCLGdEQUFnRCxFQUFFLGlEQUFpRCxFQUFFLGlEQUFpRCxVQUFVLDhGQUE4RixxQkFBcUIsc0JBQXNCLHdDQUF3QyxvQkFBb0IsMFFBQTBRLDhDQUE4QywyQkFBMkIsU0FBUyxnQ0FBZ0Msb0JBQW9CLHVDQUF1QyxrQkFBa0IsaURBQWlELDRDQUE0QyxvQkFBb0IsSUFBSSw4R0FBOEcsb05BQW9OLFFBQVEsSUFBSSwwSkFBMEosV0FBVyxzQkFBc0IsOFBBQThQLHNCQUFzQixnRUFBZ0UsRUFBRSxtREFBbUQsdUJBQXVCLCtDQUErQywwQkFBMEIseURBQXlELHdWQUF3Viw2Q0FBNkMsS0FBSyxPQUFPLDZDQUE2QyxLQUFLLEdBQUcsZ2VBQWdlLDZCQUE2QiwyREFBMkQsc0NBQXNDLG9DQUFvQywwQ0FBMEMsd0NBQXdDLG9CQUFvQiw2QkFBNkIsZ0JBQWdCLEdBQUcsMEJBQTBCLGlDQUFpQyxvQkFBb0IsNEJBQTRCLDBCQUEwQiw4RkFBOEYsdURBQXVELG9JQUFvSSx1QkFBdUIsb0JBQW9CLGlCQUFpQixtR0FBbUcsaUhBQWlILHlFQUF5RSxvRkFBb0YsK0NBQStDLDREQUE0RCwwREFBMEQsZ0VBQWdFLDREQUE0RCwyQ0FBMkMsK0NBQStDLCtCQUErQix3Q0FBd0Msb0NBQW9DLDBCQUEwQixHQUFHLHFGQUFxRiw2RUFBNkUsaUNBQWlDLG9DQUFvQyxvREFBb0QsNkNBQTZDLHlFQUF5RSwrQ0FBK0MsR0FBRyw2SUFBNkksZ0VBQWdFLCtEQUErRCxnRkFBZ0Ysd0VBQXdFLHVEQUF1RCx3REFBd0QsNkNBQTZDLDZDQUE2QyxvQ0FBb0MsZ0ZBQWdGLDREQUE0RCx5RkFBeUYsR0FBRyxnREFBZ0QsNERBQTRELEdBQUcsNkNBQTZDLCtFQUErRSxHQUFHLDZDQUE2Qyx1SEFBdUgsR0FBRyw2Q0FBNkMsMkNBQTJDLEdBQUcsK0JBQStCLGlKQUFpSiw0QkFBNEIsb0lBQW9JLHVCQUF1QixvQkFBb0IsaUJBQWlCLHNFQUFzRSxpQ0FBaUMseUNBQXlDLHVDQUF1QywwQkFBMEIsYUFBYSxLQUFLLDZGQUE2Rix5RUFBeUUsNkRBQTZELGlIQUFpSCx3Q0FBd0MsR0FBRyxrQ0FBa0MsMEJBQTBCLHlEQUF5RCx3VkFBd1YsNkNBQTZDLEtBQUssT0FBTyw2Q0FBNkMsS0FBSyxHQUFHLGdlQUFnZSw2QkFBNkIsMkRBQTJELHNDQUFzQyxvQ0FBb0MsMENBQTBDLHdDQUF3QyxvQkFBb0IsNkJBQTZCLGdCQUFnQixHQUFHLDBCQUEwQiwwQkFBMEIsb0JBQW9CLHlDQUF5QywwQkFBMEIsNEJBQTRCLG9CQUFvQixpQkFBaUIsZ0JBQWdCLGlIQUFpSCx5RUFBeUUscURBQXFELHFCQUFxQiwrQkFBK0IsR0FBRyxrQ0FBa0MsbUVBQW1FLDREQUE0RCxHQUFHLDZDQUE2QywrRUFBK0UsR0FBRyw2Q0FBNkMsdUhBQXVILEdBQUcsNkNBQTZDLDJDQUEyQyxHQUFHLGdDQUFnQyx1QkFBdUIsNEJBQTRCLG9CQUFvQixpQkFBaUIsc0VBQXNFLDRDQUE0QyxHQUFHLElBQUksY0FBYyxpQ0FBaUMsNEJBQTRCLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsc0JBQXNCLEVBQUUsMEJBQTBCLEVBQUUsZUFBZSxpQ0FBaUMsNEJBQTRCLEVBQUUsc0JBQXNCLEVBQUUsMEJBQTBCLEdBQUcsRUFBRSxZQUFZLHVCQUF1QixhQUFhLGdUQUFnVCw0REFBNEQsb2dDQUFvZ0Msa0JBQWtCLGNBQWMsaURBQWlELG9HQUFvRyxzQkFBc0IsdUJBQXVCLDRCQUE0QixzQkFBc0IseUNBQXlDLGNBQWMseUJBQXlCLDBCQUEwQix1SUFBdUksSUFBSSx1QkFBdUIsSUFBSSxLQUFLLFdBQVcsdUJBQXVCLHFGQUFxRixJQUFJLHlCQUF5QixnRkFBZ0YseUJBQXlCLHNCQUFzQixRQUFRLGNBQWMseXNCQUF5c0IsYUFBYSxxQ0FBcUMsNkJBQTZCLE1BQU0sS0FBSyxtQkFBbUIsSUFBSSxrQkFBa0Isa0JBQWtCLGdDQUFnQyw2Q0FBNkMsd0NBQXdDLFlBQVksbURBQW1ELCtFQUErRSw2Q0FBNkMsOEpBQThKLGlGQUFpRiwwSUFBMEksc0dBQXNHLGlCQUFpQixXQUFXLEtBQUssV0FBVyxnQ0FBZ0Msa0JBQWtCLFdBQVcsS0FBSyxPQUFPLGdDQUFnQyxhQUFhLFdBQVcsS0FBSyxVQUFVLGdDQUFnQyxxQ0FBcUMsMkJBQTJCLElBQUksV0FBVyxlQUFlLFFBQVEsSUFBSSx1QkFBdUIsV0FBVyxpQkFBaUIsU0FBUywyQkFBMkIsc0NBQXNDLElBQUksaUJBQWlCLFNBQVMsS0FBSyxvQ0FBb0MsNkNBQTZDLFFBQVEsV0FBVyx1QkFBdUIsSUFBSSwwSUFBMEksZ0JBQWdCLFVBQVUsV0FBVyxLQUFLLFdBQVcsaUJBQWlCLDJCQUEyQixJQUFJLCtDQUErQyx1UEFBdVAsTUFBTSxlQUFlLElBQUksS0FBSyxZQUFZLFlBQVksSUFBSSwrQ0FBK0MsUUFBUSxJQUFJLEtBQUssWUFBWSxvTkFBb04sS0FBSyxNQUFNLGVBQWUsSUFBSSx3QkFBd0IsSUFBSSwrQ0FBK0MsUUFBUSxJQUFJLEtBQUssTUFBTSxjQUFjLDRCQUE0QixpQkFBaUIsOFBBQThQLE1BQU0sdWdCQUF1Z0Isc0NBQXNDLFFBQVEsb0dBQW9HLElBQUksb0dBQW9HLE9BQU8sbVVBQW1VLHFGQUFxRixvQkFBb0IsK0NBQStDLFFBQVEsSUFBSSxtQ0FBbUMsWUFBWSxRQUFRLElBQUksc0NBQXNDLFFBQVEsSUFBSSxLQUFLLHNCQUFzQixJQUFJLHNDQUFzQyx1QkFBdUIseUJBQXlCLHFCQUFxQiwwSEFBMEgsd0JBQXdCLFFBQVEsb0dBQW9HLElBQUksb0dBQW9HLHlKQUF5SixPQUFPLHlGQUF5RixtQkFBbUIsb1NBQW9TLG9CQUFvQixrQkFBa0Isa0NBQWtDLG1HQUFtRyxPQUFPLDRJQUE0SSxzQkFBc0IseW1CQUF5bUIseUJBQXlCLG1DQUFtQywrQkFBK0IsaURBQWlELGtJQUFrSSwrREFBK0QsMkVBQTJFLHNEQUFzRCw2QkFBNkIsRUFBRSxtREFBbUQsRUFBRSw2QkFBNkIsRUFBRSw2QkFBNkIsRUFBRSw2QkFBNkIsRUFBRSw2QkFBNkIsdUNBQXVDLDZCQUE2QixFQUFFLG1EQUFtRCxFQUFFLDZCQUE2QixFQUFFLDZCQUE2Qiw4Q0FBOEMsNkJBQTZCLEVBQUUsbURBQW1ELEVBQUUsNkJBQTZCLEVBQUUsNkJBQTZCLEVBQUUsNkJBQTZCLHNFQUFzRSw2QkFBNkIsSUFBSSxzQkFBc0IsRUFBRSx3TkFBd04sdUJBQXVCLGFBQWEsc0RBQXNELGdCQUFnQixXQUFXLGtDQUFrQyxXQUFXLEtBQUsscUJBQXFCLFdBQVcsd0JBQXdCLHlCQUF5QixvREFBb0QsOENBQThDLFdBQVcsNEVBQTRFLFdBQVcsS0FBSyxzRkFBc0YsWUFBWSxJQUFJLDRCQUE0QixzQkFBc0IsSUFBSSxLQUFLLGNBQWMsNEpBQTRKLFFBQVEsZ0NBQWdDLE9BQU8saURBQWlELFVBQVUsc0JBQXNCLFFBQVEsV0FBVyxLQUFLLHNCQUFzQiw0RUFBNEUsUUFBUSxpQkFBaUIsS0FBSyxzQkFBc0IsVUFBVSxZQUFZLFdBQVcsb0JBQW9CLE9BQU8sNERBQTRELGlCQUFpQix3QkFBd0IsbUJBQW1CLDBCQUEwQixzREFBc0QsMEJBQTBCLHNEQUFzRCwwQkFBMEIsc0VBQXNFLGVBQWUseURBQXlELGlCQUFpQixZQUFZLFdBQVcsS0FBSyxXQUFXLGtCQUFrQixrQkFBa0IsU0FBUyw2Q0FBNkMscUJBQXFCLHFCQUFxQix5SEFBeUgsaU1BQWlNLG9HQUFvRyxvRkFBb0YsNklBQTZJLHlIQUF5SCxlQUFlLFVBQVUscUJBQXFCLFdBQVcsRUFBRSxZQUFZLFdBQVcsS0FBSyw0QkFBNEIsV0FBVyxVQUFVLHdCQUF3QixrRkFBa0YsbUhBQW1ILHFGQUFxRix5QkFBeUIsMENBQTBDLDRDQUE0QyxXQUFXLDRCQUE0QiwyQkFBMkIsS0FBSyxLQUFLLEtBQUssV0FBVyxLQUFLLGdDQUFnQyw4RUFBOEUsMkNBQTJDLHVCQUF1QixLQUFLLFlBQVksV0FBVyxLQUFLLGlCQUFpQixlQUFlLHNDQUFzQyxVQUFVLGdDQUFnQyxtRUFBbUUsb0NBQW9DLEVBQUUsWUFBWSw0QkFBNEIsRUFBRSxJQUFJLHNDQUFzQyxlQUFlLHNHQUFzRyx3QkFBd0IsdUJBQXVCLDJEQUEyRCxLQUFLLFFBQVEsV0FBVyxLQUFLLFdBQVcsaUNBQWlDLDBCQUEwQiw2REFBNkQsOENBQThDLEVBQUUsaURBQWlELHVCQUF1QixnRUFBZ0UseUNBQXlDLG1CQUFtQix3QkFBd0IsOEJBQThCLHFEQUFxRCwwQ0FBMEMsNkJBQTZCLDhCQUE4QiwrQkFBK0IsK0JBQStCLDJEQUEyRCxzQkFBc0IsaUJBQWlCLDRDQUE0QyxxREFBcUQsNERBQTRELDBEQUEwRCwrQkFBK0IsZUFBZSxnQkFBZ0IsNEJBQTRCLHVEQUF1RCxxRkFBcUYsK0NBQStDLDBEQUEwRCx3REFBd0Qsb0VBQW9FLEdBQUcsa0NBQWtDLDZFQUE2RSxpQ0FBaUMsb0NBQW9DLG9EQUFvRCw2Q0FBNkMseUVBQXlFLCtDQUErQyxHQUFHLHVIQUF1SCwwR0FBMEcsR0FBRyxnREFBZ0QsNERBQTRELEdBQUcsNkNBQTZDLCtFQUErRSxHQUFHLDZDQUE2Qyx1SEFBdUgsR0FBRyw2Q0FBNkMsMkNBQTJDLEdBQUcsd0NBQXdDLDRCQUE0Qiw0QkFBNEIsNkJBQTZCLDZCQUE2QiwyRUFBMkUsNEJBQTRCLDhCQUE4QiwrQkFBK0IsMkRBQTJELHNCQUFzQixpQkFBaUIsb0dBQW9HLHdDQUF3QyxxQ0FBcUMsdUNBQXVDLDBCQUEwQixhQUFhLEtBQUsscUVBQXFFLHlFQUF5RSwwTUFBME0sbUhBQW1ILHdFQUF3RSxHQUFHLGtDQUFrQyx5Q0FBeUMsb0JBQW9CLDhCQUE4QiwyQkFBMkIsdUNBQXVDLGdDQUFnQyw2QkFBNkIsOEJBQThCLCtCQUErQiwrQkFBK0IsMkRBQTJELHNCQUFzQixpQkFBaUIsNERBQTRELG9EQUFvRCw0REFBNEQsNERBQTRELDhCQUE4QixpQ0FBaUMsK0JBQStCLGdCQUFnQiw0QkFBNEIsdURBQXVELHdFQUF3RSxrQ0FBa0Msa0NBQWtDLEdBQUcsa0NBQWtDLG1FQUFtRSw0REFBNEQsR0FBRyw2Q0FBNkMsK0VBQStFLEdBQUcsNkNBQTZDLHVIQUF1SCxHQUFHLDZDQUE2QywyQ0FBMkMsR0FBRyx1QkFBdUIsNkJBQTZCLHVCQUF1Qiw4QkFBOEIsK0JBQStCLCtCQUErQiw2QkFBNkIsOEJBQThCLHlCQUF5Qiw0QkFBNEIsNEJBQTRCLDJEQUEyRCxHQUFHLGlCQUFpQixvR0FBb0csd0RBQXdELHNEQUFzRCxnRUFBZ0UsR0FBRyxNQUFNLDJCQUEyQixxQkFBcUIsc0JBQXNCLEVBQUUscUJBQXFCLEVBQUUsMEJBQTBCLEdBQUcsNkZBQTZGLGdDQUFnQyxxQkFBcUIsc0JBQXNCLEVBQUUscUJBQXFCLEVBQUUsMEJBQTBCLEdBQUcsNkZBQTZGLG1DQUFtQyxxQkFBcUIsc0JBQXNCLEVBQUUsc0JBQXNCLEdBQUcsOERBQThELHVDQUF1QyxxQkFBcUIsc0JBQXNCLEVBQUUsc0JBQXNCLEdBQUcsK0RBQStELEVBQUUsNEJBQTRCLHVCQUF1Qix3Q0FBd0MsRUFBRSxRQUFRLHVCQUF1QixhQUFhLHNCQUFzQixzREFBc0Qsa0NBQWtDLEVBQUUsbUNBQW1DLEVBQUUsbUNBQW1DLGtCQUFrQixtQ0FBbUMsRUFBRSxvQ0FBb0Msa0JBQWtCLDZCQUE2QixxQ0FBcUMsMENBQTBDLHdFQUF3RSxtQkFBbUIseUJBQXlCLG1EQUFtRCw2aEJBQTZoQixzQkFBc0IsMEVBQTBFLFlBQVksWUFBWSxJQUFJLEtBQUsscUJBQXFCLGtDQUFrQyxHQUFHLFVBQVUsMENBQTBDLG8vQ0FBby9DLGtCQUFrQiwyQkFBMkIsc0JBQXNCLHVCQUF1Qiw0QkFBNEIsWUFBWSxJQUFJLDBFQUEwRSxTQUFTLHlDQUF5QyxlQUFlLGlCQUFpQiw4SUFBOEksZ0JBQWdCLGlGQUFpRixRQUFRLElBQUkscUNBQXFDLElBQUksZ0NBQWdDLFFBQVEsSUFBSSxLQUFLLHVCQUF1QixRQUFRLEtBQUssV0FBVyxRQUFRLElBQUksYUFBYSwyREFBMkQsc0JBQXNCLFFBQVEsSUFBSSxZQUFZLElBQUksK0JBQStCLHlCQUF5Qix5Q0FBeUMsT0FBTyxrWEFBa1gsbUNBQW1DLGdCQUFnQixRQUFRLGNBQWMsOENBQThDLFFBQVEsbVdBQW1XLFlBQVksSUFBSSxrQ0FBa0MsSUFBSSw0REFBNEQsNE5BQTROLFFBQVEsdURBQXVELElBQUksbUNBQW1DLFlBQVksUUFBUSxJQUFJLHNDQUFzQyxRQUFRLElBQUksS0FBSyxjQUFjLFFBQVEsSUFBSSxzQ0FBc0MsdUJBQXVCLGdCQUFnQixzQ0FBc0Msd0pBQXdKLElBQUksNExBQTRMLG1CQUFtQixzQkFBc0IsMEJBQTBCLDBFQUEwRSx1QkFBdUIsaUJBQWlCLElBQUksMEZBQTBGLCtCQUErQix5WUFBeVksUUFBUSxJQUFJLG9GQUFvRixJQUFJLGtDQUFrQyw4RUFBOEUsWUFBWSwrQkFBK0IseVlBQXlZLCtDQUErQyxJQUFJLGtYQUFrWCxJQUFJLHdLQUF3SyxZQUFZLG1CQUFtQix5QkFBeUIsK0JBQStCLDBCQUEwQixPQUFPLHNQQUFzUCxnQkFBZ0IsbUVBQW1FLGNBQWMsd0ZBQXdGLGNBQWMscUJBQXFCLG9EQUFvRCxXQUFXLHVDQUF1Qyx1QkFBdUIsUUFBUSxjQUFjLHVCQUF1QixRQUFRLGdPQUFnTyxZQUFZLElBQUksa0NBQWtDLElBQUksNERBQTRELGdCQUFnQixrQkFBa0IsMkhBQTJILElBQUksa0xBQWtMLG1CQUFtQixrQkFBa0IsOEJBQThCLHNCQUFzQix1QkFBdUIsaUJBQWlCLElBQUksMEZBQTBGLCtCQUErQixpSkFBaUosUUFBUSxJQUFJLG9GQUFvRixJQUFJLGtDQUFrQyw4RUFBOEUsWUFBWSwrQkFBK0IsaUpBQWlKLFlBQVksb0JBQW9CLGtCQUFrQixrQ0FBa0MsZ0xBQWdMLFVBQVUsaUJBQWlCLGlCQUFpQixZQUFZLElBQUksMEJBQTBCLElBQUksMENBQTBDLElBQUksb0NBQW9DLHFDQUFxQyxJQUFJLDZGQUE2Riw2Q0FBNkMsa0VBQWtFLDZDQUE2QyxrRkFBa0YsSUFBSSxrRUFBa0UsU0FBUywwQkFBMEIsd0NBQXdDLG9XQUFvVyxzQkFBc0IsT0FBTyw0YkFBNGIsb0JBQW9CLDZZQUE2WSxnREFBZ0QsNExBQTRMLG9DQUFvQywrT0FBK08seUJBQXlCLElBQUksb01BQW9NLGFBQWEsZUFBZSw4RkFBOEYsUUFBUSxJQUFJLEtBQUssV0FBVyxRQUFRLElBQUksb0ZBQW9GLGlDQUFpQyxpQkFBaUIsY0FBYyxnRkFBZ0YsUUFBUSxJQUFJLEtBQUssV0FBVywrR0FBK0csa0JBQWtCLHlFQUF5RSxLQUFLLFFBQVEsSUFBSSxLQUFLLFlBQVksaUVBQWlFLDBCQUEwQixZQUFZLE9BQU8sZ0NBQWdDLHNFQUFzRSxPQUFPLGdDQUFnQyxvQ0FBb0Msd0VBQXdFLFFBQVEsSUFBSSwrQkFBK0Isc0RBQXNELFFBQVEsU0FBUyxZQUFZLFNBQVMsS0FBSyxpS0FBaUssd0pBQXdKLGVBQWUsb0hBQW9ILFFBQVEsU0FBUyxjQUFjLFNBQVMsS0FBSyxZQUFZLElBQUksZ0JBQWdCLElBQUksZ0JBQWdCLElBQUksS0FBSyxzQ0FBc0MscUNBQXFDLFFBQVEsSUFBSSxLQUFLLHdGQUF3Riw4SEFBOEgsK0RBQStELHFZQUFxWSw2RUFBNkUsSUFBSSwwQkFBMEIsMFBBQTBQLGlCQUFpQixnQkFBZ0Isc0RBQXNELElBQUksaURBQWlELFdBQVcsRUFBRSxRQUFRLElBQUksWUFBWSxlQUFlLG1DQUFtQyxVQUFVLElBQUksS0FBSyxnREFBZ0QsS0FBSyxNQUFNLFFBQVEsZUFBZSw0Q0FBNEMsS0FBSyxTQUFTLHNCQUFzQixNQUFNLDJCQUEyQixtQkFBbUIsS0FBSyxNQUFNLHFEQUFxRCxRQUFRLFlBQVksS0FBSyxnQ0FBZ0MsMkJBQTJCLFVBQVUsa0JBQWtCLEtBQUssbUJBQW1CLFFBQVEsSUFBSSxLQUFLLDZHQUE2RyxlQUFlLEtBQUssTUFBTSxTQUFTLG1CQUFtQixRQUFRLElBQUksS0FBSyxpQkFBaUIsNENBQTRDLElBQUksS0FBSyxpQkFBaUIsbU1BQW1NLE1BQU0sUUFBUSxhQUFhLGVBQWUsT0FBTyxRQUFRLGFBQWEsS0FBSyxjQUFjLEtBQUssV0FBVyw2Q0FBNkMsV0FBVyx1REFBdUQsZ0NBQWdDLFFBQVEsWUFBWSxnQkFBZ0IsK0NBQStDLGlEQUFpRCxZQUFZLG1DQUFtQyxrQkFBa0IsZ0NBQWdDLElBQUkseUJBQXlCLGNBQWMsc0JBQXNCLHVSQUF1UixZQUFZLElBQUkscUNBQXFDLHlCQUF5QixRQUFRLCtHQUErRyxRQUFRLElBQUksd0ZBQXdGLHNEQUFzRCxJQUFJLCtCQUErQiwrSkFBK0osMkRBQTJELElBQUksOEJBQThCLDBCQUEwQiwrR0FBK0csa0NBQWtDLFdBQVcsdUJBQXVCLElBQUksS0FBSyxvUEFBb1AsdUJBQXVCLFVBQVUsTUFBTSwyQkFBMkIsaURBQWlELHVEQUF1RCwrREFBK0QsRUFBRSwwUkFBMFIsdUJBQXVCLGFBQWEsd1dBQXdXLGtCQUFrQiwrREFBK0Qsb0lBQW9JLGtCQUFrQixhQUFhLCtEQUErRCxxQkFBcUIsT0FBTyw0R0FBNEcsV0FBVyxvQ0FBb0MsNEJBQTRCLG9DQUFvQyw0QkFBNEIsdU1BQXVNLDJDQUEyQyxpREFBaUQsR0FBRyxvQ0FBb0MscUJBQXFCLE9BQU8sZ0NBQWdDLCtGQUErRixVQUFVLFVBQVUsUUFBUSxVQUFVLDJEQUEyRCxZQUFZLDhDQUE4QyxRQUFRLDhDQUE4Qyx1REFBdUQsV0FBVyx3QkFBd0IscUNBQXFDLHdCQUF3QixrQ0FBa0MscUJBQXFCLHVCQUF1Qix3QkFBd0Isb0JBQW9CLGtCQUFrQixrQkFBa0IsZ09BQWdPLG9GQUFvRixnREFBZ0QsZ0NBQWdDLDhEQUE4RCw4QkFBOEIsMkJBQTJCLDJFQUEyRSx1Q0FBdUMsZ0NBQWdDLCtCQUErQixzQkFBc0Isa0dBQWtHLGlKQUFpSiwyREFBMkQscUNBQXFDLDhEQUE4RCxvRUFBb0UseURBQXlELG9DQUFvQyw2Q0FBNkMsOENBQThDLG1DQUFtQyxxQ0FBcUMsU0FBUyxzQ0FBc0MsZ0NBQWdDLGtEQUFrRCwrQkFBK0IsOEJBQThCLCtCQUErQix1Q0FBdUMsZ0NBQWdDLHVDQUF1QyxxRUFBcUUsU0FBUyx3QkFBd0IsZ0VBQWdFLHlEQUF5RCxvR0FBb0csbUhBQW1ILDBIQUEwSCxvQ0FBb0MsOEJBQThCLG1DQUFtQywyQ0FBMkMsMENBQTBDLDZDQUE2QywyQkFBMkIsNkJBQTZCLDZCQUE2QiwrSEFBK0gsaUNBQWlDLFNBQVMsRUFBRSxFQUFFLE9BQU8sd0JBQXdCLGdDQUFnQyxXQUFXLHlCQUF5QixRQUFRLGtCQUFrQixjQUFjLHlvQkFBeW9CLGdGQUFnRixxQkFBcUIscVRBQXFULDRFQUE0RSwwcEJBQTBwQixnQkFBZ0IseUVBQXlFLDBCQUEwQixhQUFhLFNBQVMsa0NBQWtDLCtCQUErQixtQkFBbUIsK0dBQStHLHlDQUF5QywySEFBMkgsc0NBQXNDLGlJQUFpSSxnR0FBZ0csV0FBVyxjQUFjLDJEQUEyRCxFQUFFLHVCQUF1QiwwQ0FBMEMsbUJBQW1CLDhHQUE4RyxFQUFFLHFEQUFxRCxnQkFBZ0Isa0NBQWtDLHdIQUF3SCwyQkFBMkIsOEJBQThCLDREQUE0RCwwQ0FBMEMsV0FBVyxnQkFBZ0IsU0FBUyxvQkFBb0IsK0NBQStDLHFEQUFxRCxZQUFZLGdCQUFnQixxSEFBcUgsMEJBQTBCLDJFQUEyRSxxQ0FBcUMsaUNBQWlDLDZCQUE2QixnQkFBZ0IsS0FBSyx1QkFBdUIsb0tBQW9LLFNBQVMscUNBQXFDLHdCQUF3QixRQUFRLEtBQUssRUFBRSxzQ0FBc0Msc0VBQXNFLHFCQUFxQixLQUFLLGtCQUFrQixpQkFBaUIsSUFBSSxvREFBb0QsaUJBQWlCLElBQUksb0RBQW9ELGtDQUFrQyxvQkFBb0Isa0NBQWtDLG9CQUFvQixpQkFBaUIsbUVBQW1FLHFCQUFxQixjQUFjLDhEQUE4RCxrQkFBa0IsZ0JBQWdCLHFCQUFxQixLQUFLLGtGQUFrRixJQUFJLEtBQUssNENBQTRDLHNDQUFzQyw2Q0FBNkMsY0FBYyxxQkFBcUIsZUFBZSxXQUFXLHdCQUF3QixJQUFJLGtEQUFrRCwrQ0FBK0MsbUNBQW1DLG1CQUFtQixtQ0FBbUMsMEVBQTBFLDBJQUEwSSx3REFBd0QsUUFBUSw0RUFBNEUsRUFBRSxFQUFFLEVBQUUsa0ZBQWtGLDRFQUE0RSwrQkFBK0IsVUFBVSwrQkFBK0IsbURBQW1ELFNBQVMsdU5BQXVOLHlDQUF5QywyRkFBMkYsK0ZBQStGLE1BQU0sbUVBQW1FLHFCQUFxQixtQkFBbUIsOERBQThELElBQUksa0NBQWtDLEtBQUsscUJBQXFCLHFCQUFxQixZQUFZLElBQUksd0NBQXdDLGFBQWEsbUNBQW1DLCtOQUErTix5TUFBeU0sb0JBQW9CLFlBQVksb0JBQW9CLGdCQUFnQixpaEJBQWloQiw2QkFBNkIsaVFBQWlRLGdCQUFnQixpQ0FBaUMsOENBQThDLDZCQUE2QixxV0FBcVcsU0FBUyw4QkFBOEIsYUFBYSxFQUFFLDBUQUEwVCx1QkFBdUIsYUFBYSw2REFBNkQsc0JBQXNCLG9HQUFvRyxlQUFlLDJQQUEyUCxJQUFJLDBIQUEwSCxrSUFBa0ksa0NBQWtDLGtDQUFrQyxrQ0FBa0MsV0FBVywrREFBK0QsOEVBQThFLGtEQUFrRCxxRUFBcUUsd0ZBQXdGLGdDQUFnQyxvSUFBb0ksWUFBWSxpR0FBaUcsS0FBSywyRUFBMkUsc0JBQXNCLHFDQUFxQyx5QkFBeUIsS0FBSyw0RUFBNEUsVUFBVSwyRUFBMkUsYUFBYSxtRkFBbUYsS0FBSyx5QkFBeUIsZ0JBQWdCLGlCQUFpQix5RkFBeUYsV0FBVyw4REFBOEQsZ0NBQWdDLE1BQU0sOEVBQThFLHlCQUF5QixjQUFjLDZRQUE2USxvQkFBb0IsaUJBQWlCLGtCQUFrQixnREFBZ0QsNEVBQTRFLG1IQUFtSCx3QkFBd0IseU5BQXlOLHVDQUF1Qyw0QkFBNEIsZUFBZSxnQkFBZ0IsaUJBQWlCLGtCQUFrQixFQUFFLGVBQWUsZ0JBQWdCLGlCQUFpQixrQkFBa0Isc0JBQXNCLHNDQUFzQyw0QkFBNEIsZUFBZSxtQkFBbUIsaUJBQWlCLGtCQUFrQixFQUFFLGVBQWUsbUJBQW1CLGlCQUFpQixtQkFBbUIsdUJBQXVCLGtCQUFrQixnQkFBZ0Isa0ZBQWtGLGNBQWMsd0JBQXdCLCtSQUErUixzQkFBc0IseUNBQXlDLDZFQUE2RSw2SUFBNkksV0FBVyx3RUFBd0UsMkJBQTJCLFdBQVcsZUFBZSx1QkFBdUIsaUJBQWlCLFlBQVksY0FBYyw0S0FBNEssK0VBQStFLFlBQVksZUFBZSx1QkFBdUIsaUJBQWlCLFlBQVksY0FBYyw0S0FBNEssK0VBQStFLGFBQWEsZUFBZSwwQkFBMEIsaUJBQWlCLHlCQUF5Qiw4REFBOEQsNkRBQTZELDZGQUE2RiwyQkFBMkIsUUFBUSxlQUFlLG1CQUFtQixpQkFBaUIsb0ZBQW9GLHlGQUF5RixRQUFRLGVBQWUsbUJBQW1CLGlCQUFpQixvRkFBb0YseUZBQXlGLE9BQU8sZUFBZSx3QkFBd0IsaUJBQWlCLHlIQUF5SCxZQUFZLElBQUksK0VBQStFLGtDQUFrQyxjQUFjLDRJQUE0SSxRQUFRLGVBQWUseUJBQXlCLGlCQUFpQixxQkFBcUIsdUVBQXVFLGlCQUFpQiw4Q0FBOEMsUUFBUSxlQUFlLHNCQUFzQixpQkFBaUIsc0NBQXNDLFNBQVMsZUFBZSxzQkFBc0IsaUJBQWlCLHlDQUF5QyxxQkFBcUIsY0FBYyx3SkFBd0osc0JBQXNCLG1DQUFtQyw2QkFBNkIsdURBQXVELHNEQUFzRCxJQUFJLGlFQUFpRSwrQkFBK0IsY0FBYyw0RUFBNEUsbUJBQW1CLE1BQU0sb0xBQW9MLEtBQUssdUZBQXVGLHNLQUFzSywyQkFBMkIsZ0NBQWdDLDZGQUE2RixvQ0FBb0Msb0lBQW9JLGlHQUFpRyxLQUFLLDJFQUEyRSxzQkFBc0IscUNBQXFDLHlCQUF5QixLQUFLLDRFQUE0RSxTQUFTLEtBQUssa0VBQWtFLG9GQUFvRiw4QkFBOEIsYUFBYSwwVUFBMFUsS0FBSyxNQUFNLGtEQUFrRCxnQ0FBZ0Msc09BQXNPLG9EQUFvRCxFQUFFLG9EQUFvRCx1QkFBdUIsYUFBYSx5QkFBeUIsY0FBYyx5TkFBeU4sS0FBSywwQ0FBMEMsaUZBQWlGLGNBQWMsaUVBQWlFLHNCQUFzQixNQUFNLDZCQUE2QixZQUFZLE1BQU0sU0FBUyxZQUFZLGlIQUFpSCxZQUFZLGFBQWEseUVBQXlFLEtBQUssS0FBSyxNQUFNLHlPQUF5Tyx3RUFBd0UsNERBQTRELGlDQUFpQywwQ0FBMEMsMERBQTBELGNBQWMsbUtBQW1LLG9PQUFvTyxhQUFhLDBDQUEwQyxTQUFTLElBQUksdURBQXVELFNBQVMsd0RBQXdELGFBQWEsRUFBRSxvQkFBb0IsdUJBQXVCLGFBQWEsMEJBQTBCLHFEQUFxRCw2Q0FBNkMsTUFBTSxvRUFBb0UsWUFBWSxXQUFXLEtBQUssV0FBVyxhQUFhLDBGQUEwRix5RUFBeUUsS0FBSyw0Q0FBNEMsOENBQThDLG1EQUFtRCx3REFBd0QsS0FBSyxvRUFBb0Usd0NBQXdDLCtCQUErQixLQUFLLElBQUksa0NBQWtDLCtDQUErQyxJQUFJLG1DQUFtQyxHQUFHLHVCQUF1QixhQUFhLHdCQUF3QixjQUFjLHdGQUF3Riw0QkFBNEIsMkNBQTJDLG9DQUFvQyxpRkFBaUYsaUNBQWlDLGdDQUFnQyxrQ0FBa0MsT0FBTyxjQUFjLDRFQUE0RSx1QkFBdUIsaUJBQWlCLEVBQUUsbUJBQW1CLHVCQUF1QixhQUFhLHdCQUF3Qix3QkFBd0IscUVBQXFFLGtCQUFrQiw4R0FBOEcsNkJBQTZCLHVCQUF1Qiw4Q0FBOEMsTUFBTSxxREFBcUQsTUFBTSw0REFBNEQsTUFBTSxvRUFBb0UsNkJBQTZCLDBDQUEwQyxZQUFZLHVCQUF1QixtQ0FBbUMsK0JBQStCLG1DQUFtQyxnQ0FBZ0MsNENBQTRDLG9DQUFvQyxpRkFBaUYsV0FBVyxLQUFLLFdBQVcsZ0lBQWdJLG1FQUFtRSxrQ0FBa0MsT0FBTyxjQUFjLCtFQUErRSx5QkFBeUIsNENBQTRDLEVBQUUsbUJBQW1CLHVCQUF1QixhQUFhLDREQUE0RCxjQUFjLDhKQUE4Siw0QkFBNEIsK0VBQStFLHlDQUF5QyxFQUFFLHNEQUFzRCx1QkFBdUIsMEJBQTBCLHVEQUF1RCxHQUFHLHVCQUF1Qix3QkFBd0IsNENBQTRDLGNBQWMsYUFBYSwyQkFBMkIsd0RBQXdELEVBQUUsaURBQWlELHVCQUF1Qix3QkFBd0IseUVBQXlFLEdBQUcsdUJBQXVCLHNCQUFzQiwwQkFBMEIsd0NBQXdDLEdBQUcsdUJBQXVCLHdCQUF3Qix3Q0FBd0MsR0FBRyx1QkFBdUIscUJBQXFCLDBCQUEwQiwrQkFBK0IsR0FBRyx1QkFBdUIsMEJBQTBCLDhDQUE4QyxpREFBaUQsR0FBRyx1QkFBdUIsMEJBQTBCLEVBQUUsaUJBQWlCLHVCQUF1Qix3QkFBd0Isd0NBQXdDLCtCQUErQixHQUFHLHVCQUF1Qix3QkFBd0IsRUFBRSxlQUFlLHVCQUF1QiwwQkFBMEIsdURBQXVELEdBQUcsdUJBQXVCLHdCQUF3QixzQ0FBc0MsR0FBRyx1QkFBdUIsZUFBZSxHQUFHLHVCQUF1Qix3QkFBd0IsOENBQThDLHlLQUF5SyxxQkFBcUIsRUFBRSxnQkFBZ0IsdUJBQXVCLHdCQUF3Qiw4Q0FBOEMsR0FBRyx1QkFBdUIsd0JBQXdCLDRFQUE0RSxHQUFHLHVCQUF1QixnQ0FBZ0MsUUFBUSxTQUFTLFNBQVMsc0NBQXNDLFFBQVEsSUFBSSxrRkFBa0YsVUFBVSxzQkFBc0IsRUFBRSxlQUFlLHVCQUF1QiwwQkFBMEIsMEJBQTBCLCtCQUErQixHQUFHLHVCQUF1QixXQUFXLHMrQkFBcytCLEVBQUUsNnJCQUE2ckIsdUJBQXVCLHdCQUF3Qiw4Q0FBOEMsR0FBRyx1QkFBdUIsd0JBQXdCLEVBQUUsZUFBZSx1QkFBdUIsc0JBQXNCLHlCQUF5QiwrQkFBK0IsR0FBRyx1QkFBdUIsNEJBQTRCLHlCQUF5QixnRUFBZ0UsR0FBRyx1QkFBdUIsMEJBQTBCLHFGQUFxRixHQUFHLHVCQUF1QiwwQkFBMEIscUZBQXFGLEdBQUcsdUJBQXVCLDBCQUEwQixFQUFFLGlCQUFpQix1QkFBdUIsMEJBQTBCLHVEQUF1RCxHQUFHLHVCQUF1Qix3QkFBd0IsMkNBQTJDLEdBQUcsdUJBQXVCLHdCQUF3Qix1Q0FBdUMsNERBQTRELFVBQVUsR0FBRyx1QkFBdUIsd0JBQXdCLE9BQU8sdUVBQXVFLHlEQUF5RCxHQUFHLHVCQUF1Qiw0QkFBNEIsZ0VBQWdFLGtEQUFrRCxHQUFHLHVCQUF1Qiw0QkFBNEIsZ0VBQWdFLGtEQUFrRCxHQUFHLHVCQUF1Qiw0QkFBNEIsZ0VBQWdFLGtEQUFrRCxHQUFHLHVCQUF1Qix3QkFBd0IsNEVBQTRFLEdBQUcsdUJBQXVCLDBCQUEwQiw4Q0FBOEMsR0FBRyx1QkFBdUIsNEJBQTRCLDZEQUE2RCxHQUFHLHVCQUF1Qiw0QkFBNEIsK0JBQStCLEdBQUcsdUJBQXVCLGlDQUFpQyxFQUFFLHdCQUF3Qix1QkFBdUIsK0JBQStCLEVBQUUsc0JBQXNCLHVCQUF1Qix3QkFBd0Isd0NBQXdDLG9CQUFvQixHQUFHLHVCQUF1QixzQkFBc0IseUJBQXlCLG9CQUFvQixHQUFHLHVCQUF1QiwwQkFBMEIsRUFBRSxpQkFBaUIsdUJBQXVCLDBCQUEwQix1REFBdUQsR0FBRyx1QkFBdUIsMEJBQTBCLHlCQUF5Qix3RkFBd0YsR0FBRyx1QkFBdUIsMEJBQTBCLHVEQUF1RCw4SEFBOEgsR0FBRyx1QkFBdUIsMEJBQTBCLDhHQUE4RyxrRkFBa0YsR0FBRyx1QkFBdUIsMEJBQTBCLHNFQUFzRSxHQUFHLHVCQUF1QixzQkFBc0IsMEJBQTBCLGtEQUFrRCxHQUFHLHVCQUF1Qix3QkFBd0Isa0RBQWtELEdBQUcsdUJBQXVCLHFCQUFxQiwwQkFBMEIsc0NBQXNDLEdBQUcsdUJBQXVCLHdCQUF3QixvREFBb0QsbUNBQW1DLEdBQUcsdUJBQXVCLDBCQUEwQixzRUFBc0UsR0FBRyx1QkFBdUIsd0JBQXdCLGdEQUFnRCxHQUFHLHVCQUF1Qiw0QkFBNEIsMEJBQTBCLHNDQUFzQyxHQUFHLHVCQUF1QixXQUFXLHNrQkFBc2tCLEVBQUUsbVpBQW1aLHVCQUF1Qix3QkFBd0IsMERBQTBELEdBQUcsdUJBQXVCLHNCQUFzQixnQ0FBZ0MsbUNBQW1DLEdBQUcsdUJBQXVCLDRCQUE0QixnQ0FBZ0Msa0ZBQWtGLEdBQUcsdUJBQXVCLDBCQUEwQiw4R0FBOEcsR0FBRyx1QkFBdUIsMEJBQTBCLDhHQUE4RyxHQUFHLHVCQUF1QiwwQkFBMEIsc0VBQXNFLEdBQUcsdUJBQXVCLHdCQUF3QixzREFBc0QsR0FBRyx1QkFBdUIsd0JBQXdCLGtEQUFrRCw0REFBNEQsVUFBVSxHQUFHLHVCQUF1QixzQ0FBc0Msd0JBQXdCLDZHQUE2RyxFQUFFLGdDQUFnQyx1QkFBdUIsMEJBQTBCLDBEQUEwRCxHQUFHLHVCQUF1Qiw0QkFBNEIsOEVBQThFLEdBQUcsdUJBQXVCLDhCQUE4QixzQ0FBc0MsR0FBRyx1QkFBdUIsd0JBQXdCLG9EQUFvRCx3QkFBd0IsR0FBRyx1QkFBdUIsc0JBQXNCLGdDQUFnQyx3QkFBd0IsR0FBRyx1QkFBdUIsMEJBQTBCLHNFQUFzRSxHQUFHLHVCQUF1QiwwQkFBMEIsZ0NBQWdDLG9KQUFvSixHQUFHLHVCQUF1QiwwQkFBMEIsOEdBQThHLDRGQUE0RixHQUFHLHVCQUF1Qiw0QkFBNEIseUNBQXlDLHFEQUFxRCxHQUFHLHVCQUF1QiwyQ0FBMkMsc0JBQXNCLHNDQUFzQyxXQUFXLEtBQUssV0FBVyw0QkFBNEIsNERBQTRELFlBQVksa0JBQWtCLDRCQUE0QixFQUFFLG9DQUFvQyx1QkFBdUIsc0JBQXNCLG1FQUFtRSxtQkFBbUIscUJBQXFCLG1CQUFtQixpQ0FBaUMsTUFBTSxvQkFBb0IsS0FBSyxXQUFXLEVBQUUsY0FBYyxhQUFhLE1BQU0sb0JBQW9CLE1BQU0sYUFBYSxNQUFNLGFBQWEsTUFBTSxhQUFhLE1BQU0sYUFBYSxNQUFNLGFBQWEsTUFBTSxhQUFhLE1BQU0sYUFBYSxzQkFBc0IsaUJBQWlCLE1BQU0sYUFBYSwyQkFBMkIsa0RBQWtELHdCQUF3Qix3QkFBd0IsSUFBSSxjQUFjLGtCQUFrQiw0Q0FBNEMsRUFBRSxhQUFhLDhNQUE4TSxhQUFhLGlFQUFpRSxhQUFhLDZFQUE2RSxhQUFhLDZFQUE2RSxhQUFhLHNDQUFzQyxpQ0FBaUMsaUNBQWlDLHNCQUFzQixLQUFLLEtBQUssRUFBRSxhQUFhLEtBQUsseUJBQXlCLGlCQUFpQixLQUFLLEVBQUUsb0JBQW9CLDRCQUE0QiwyQkFBMkIsS0FBSyxLQUFLLEVBQUUsYUFBYSx5QkFBeUIsY0FBYyxpQkFBaUIsRUFBRSw4REFBOEQsMkJBQTJCLHdCQUF3QixzREFBc0QsYUFBYSx1RUFBdUUsYUFBYSxpTUFBaU0sYUFBYSw2S0FBNkssYUFBYSx1QkFBdUIsaUJBQWlCLG1FQUFtRSwyQkFBMkIsc1VBQXNVLEVBQUUsc0hBQXNILHVCQUF1QixzQkFBc0IsK0JBQStCLGlDQUFpQyxvL0JBQW8vQixFQUFFLGlCQUFpQix1QkFBdUIsODlFQUE4OUUsR0FBRyx1QkFBdUIsc0JBQXNCLDBuQ0FBMG5DLEVBQUUsaUJBQWlCLHVCQUF1Qix1eUJBQXV5QixHQUFHLHVCQUF1Qiw0TUFBNE0sSUFBSSxJQUFJLEdBQUcsR0FBRyx1QkFBdUIsbUJBQW1CLHdCQUF3QixnQkFBZ0IsNkNBQTZDLEVBQUUsY0FBYyx1QkFBdUIsc0JBQXNCLDRCQUE0Qiw4Q0FBOEMsYUFBYSwwQkFBMEIsZ0NBQWdDLEdBQUcsdUJBQXVCLGFBQWEsYUFBYSx3QkFBd0IsdUZBQXVGLGdIQUFnSCxFQUFFLEVBQUUsaUJBQWlCLHVCQUF1QixhQUFhLHNCQUFzQix3QkFBd0IsU0FBUyxJQUFJLDhCQUE4QixZQUFZLGVBQWUsTUFBTSxFQUFFLGlGQUFpRixTQUFTLEtBQUssU0FBUyxHQUFHLEVBQUUsaUJBQWlCLHVCQUF1QiwyQkFBMkIscUVBQXFFLG1DQUFtQyxJQUFJLDBCQUEwQiw4QkFBOEIsSUFBSSwwQkFBMEIsZUFBZSxLQUFLLG1DQUFtQyxzQkFBc0IsaUNBQWlDLCtCQUErQiw0SEFBNEgsbVJBQW1SLEtBQUssK0JBQStCLGtCQUFrQixJQUFJLCtCQUErQixpQkFBaUIsR0FBRyx1QkFBdUIsYUFBYSx3QkFBd0IsZUFBZSwwREFBMEQsa0JBQWtCLDBEQUEwRCx5Q0FBeUMsMERBQTBELDZCQUE2QixLQUFLLFdBQVcscUJBQXFCLHVFQUF1RSxLQUFLLEtBQUssd0JBQXdCLEtBQUsscUJBQXFCLFdBQVcsaUJBQWlCLGlDQUFpQyxjQUFjLFNBQVMsWUFBWSxLQUFLLGdEQUFnRCxLQUFLLEtBQUssV0FBVyxjQUFjLGlCQUFpQixLQUFLLDRDQUE0QyxtQ0FBbUMsSUFBSSxxQkFBcUIscUJBQXFCLHFFQUFxRSxrQkFBa0Isb0VBQW9FLGtCQUFrQix5Q0FBeUMsZ0JBQWdCLGdDQUFnQyw0QkFBNEIsdUJBQXVCLHFEQUFxRCx1QkFBdUIsc0RBQXNELFNBQVMsa0JBQWtCLHFGQUFxRixrQkFBa0IsNEJBQTRCLFlBQVksS0FBSyxtQ0FBbUMsV0FBVyx1QkFBdUIsOEJBQThCLHFCQUFxQixtQkFBbUIsS0FBSyw0Q0FBNEMsVUFBVSxnQkFBZ0IsK0NBQStDLHFCQUFxQixtQkFBbUIsa0JBQWtCLHlDQUF5QyxpRkFBaUYscUJBQXFCLFdBQVcsRUFBRSxxQkFBcUIseUJBQXlCLEtBQUssS0FBSyxXQUFXLHFDQUFxQyx5QkFBeUIsS0FBSyxLQUFLLFdBQVcsZ0JBQWdCLG9CQUFvQixnQkFBZ0Isb0NBQW9DLFlBQVksc0JBQXNCLDhKQUE4SixPQUFPLFlBQVksRUFBRSxzQ0FBc0MsS0FBSyxpQkFBaUIsZ0JBQWdCLFFBQVEsS0FBSyxLQUFLLFdBQVcsd0JBQXdCLFdBQVcsT0FBTyxvQkFBb0IsZUFBZSxJQUFJLFdBQVcsNkNBQTZDLE9BQU8sU0FBUywwQkFBMEIsa0hBQWtILDZFQUE2RSxhQUFhLFdBQVcsRUFBRSx1REFBdUQsc0JBQXNCLEtBQUssY0FBYyxXQUFXLG9DQUFvQyxpQkFBaUIsdUJBQXVCLGdCQUFnQixLQUFLLHFDQUFxQyxvQkFBb0IseURBQXlELFNBQVMsaUJBQWlCLHlEQUF5RCxVQUFVLG1CQUFtQixXQUFXLDZDQUE2QyxRQUFRLEtBQUssS0FBSyxXQUFXLGtCQUFrQixpQ0FBaUMsS0FBSyxLQUFLLFdBQVcsdUJBQXVCLDBCQUEwQixVQUFVLFFBQVEsYUFBYSxNQUFNLHdDQUF3Qyw2RUFBNkUsd0JBQXdCLG9CQUFvQixVQUFVLHFCQUFxQixNQUFNLDBDQUEwQyxLQUFLLEtBQUssb0JBQW9CLGdCQUFnQixxQkFBcUIsMEVBQTBFLHVCQUF1Qiw4REFBOEQsSUFBSSxLQUFLLFdBQVcsZUFBZSxnREFBZ0QsS0FBSyw4QkFBOEIsY0FBYyxXQUFXLGlCQUFpQixXQUFXLFVBQVUsRUFBRSxrREFBa0QsdUJBQXVCLGFBQWEsd0NBQXdDLHNCQUFzQix5SEFBeUgsc0JBQXNCLHVDQUF1QyxvQkFBb0Isa0JBQWtCLGdCQUFnQixnSEFBZ0gsZ0JBQWdCLFdBQVcsZ0hBQWdILGdCQUFnQixzQkFBc0IsaUJBQWlCLGdCQUFnQixxQ0FBcUMsc0NBQXNDLGtCQUFrQixZQUFZLHVCQUF1QixLQUFLLGNBQWMsZUFBZSxrQkFBa0IscUJBQXFCLGlCQUFpQixLQUFLLGNBQWMsZUFBZSxnQkFBZ0IsWUFBWSxXQUFXLEtBQUssY0FBYyxlQUFlLGdCQUFnQixXQUFXLGdCQUFnQixnQkFBZ0Isb0JBQW9CLGdCQUFnQixnQkFBZ0Isb0JBQW9CLGNBQWMsNEJBQTRCLGlCQUFpQixXQUFXLDRCQUE0QixVQUFVLG9DQUFvQyxRQUFRLFdBQVcsS0FBSyxXQUFXLDRDQUE0QyxvQkFBb0Isa0RBQWtELGNBQWMsWUFBWSx3QkFBd0IsK0dBQStHLHNCQUFzQix3Q0FBd0Msc0hBQXNILGlIQUFpSCxLQUFLLDZEQUE2RCw4REFBOEQsc0JBQXNCLGlDQUFpQyxnTEFBZ0wsaUxBQWlMLG9EQUFvRCx1REFBdUQsMEJBQTBCLDJCQUEyQixRQUFRLGVBQWUsK0JBQStCLEtBQUssNkJBQTZCLG1EQUFtRCwwR0FBMEcsb0RBQW9ELFNBQVMsZ0NBQWdDLHVEQUF1RCwrQkFBK0IsMENBQTBDLGlDQUFpQyx5REFBeUQscUVBQXFFLFNBQVMsNEJBQTRCLGVBQWUscURBQXFELDhCQUE4QixlQUFlLE1BQU0sdURBQXVELCtCQUErQiw0QkFBNEIsaUNBQWlDLE1BQU0sc0VBQXNFLHdFQUF3RSxrR0FBa0csa0JBQWtCLHFCQUFxQixzRUFBc0Usc0JBQXNCLGNBQWMsMEJBQTBCLHFDQUFxQyxTQUFTLDRCQUE0Qiw4Q0FBOEMsaUNBQWlDLHlEQUF5RCxrQ0FBa0MsZUFBZSxvQ0FBb0MsdUNBQXVDLGVBQWUsNkNBQTZDLEVBQUUsRUFBRSwwQkFBMEIsdUJBQXVCLGFBQWEsd0JBQXdCLHlCQUF5QixZQUFZLFdBQVcsY0FBYyxVQUFVLEdBQUcsdUJBQXVCLGFBQWEsc0JBQXNCLDJCQUEyQixJQUFJLFdBQVcsVUFBVSxHQUFHLHVCQUF1QixhQUFhLEdBQUcsdUJBQXVCLGNBQWMsNEZBQTRGLHNCQUFzQixtQ0FBbUMsb0ZBQW9GLHFCQUFxQixHQUFHLHVCQUF1QixhQUFhLG9IQUFvSCxHQUFHLHVCQUF1QixhQUFhLGlDQUFpQyx5cUJBQXlxQixjQUFjLFFBQVEsRUFBRSxXQUFXLHlNQUF5TSxHQUFHLHVCQUF1QixhQUFhLHNCQUFzQixlQUFlLGlEQUFpRCxHQUFHLHVCQUF1QixhQUFhLGdDQUFnQyxzQkFBc0IsTUFBTSx1R0FBdUcsSUFBSSxHQUFHLHVCQUF1QixhQUFhLHNCQUFzQix5QkFBeUIsSUFBSSxzTEFBc0wsVUFBVSxHQUFHLHVCQUF1QixhQUFhLHNCQUFzQiw2SEFBNkgsR0FBRyx1QkFBdUIsMEJBQTBCLG9CQUFvQixHQUFHLHVCQUF1QixhQUFhLGVBQWUsdUVBQXVFLGlCQUFpQixhQUFhLFVBQVUsZ0JBQWdCLFdBQVcsNEJBQTRCLHNCQUFzQixzQkFBc0IsT0FBTyxpRUFBaUUsdUJBQXVCLEdBQUcsU0FBUyxTQUFTLHVCQUF1QixpR0FBaUcsY0FBYyxzRkFBc0YsZ0JBQWdCLFlBQVksV0FBVyxzQkFBc0IsUUFBUSxvQkFBb0Isd0tBQXdLLHFDQUFxQyx3Q0FBd0Msc0NBQXNDLHdDQUF3QyxnREFBZ0Qsd0NBQXdDLHVDQUF1QyxjQUFjLGlDQUFpQyxJQUFJLEtBQUssbURBQW1ELHFDQUFxQywwQkFBMEIsT0FBTyx3QkFBd0Isb0JBQW9CLEtBQUssSUFBSSxFQUFFLG1EQUFtRCx5QkFBeUIsU0FBUyxpQ0FBaUMsaURBQWlELHNCQUFzQixzQ0FBc0MsNkJBQTZCLDZDQUE2QyxnQ0FBZ0MsK0JBQStCLDZCQUE2Qiw0QkFBNEIsaUNBQWlDLDhCQUE4QixtREFBbUQsOEJBQThCLHlFQUF5RSxRQUFRLGdCQUFnQixrQkFBa0Isb0JBQW9CLHFCQUFxQixtQkFBbUIsbUJBQW1CLGFBQWEsaUJBQWlCLDRCQUE0QixpQkFBaUIsNEJBQTRCLGlCQUFpQiw0QkFBNEIseUJBQXlCLG9DQUFvQyx3QkFBd0IsbUNBQW1DLGtCQUFrQiw2QkFBNkIsaUJBQWlCLDRCQUE0QixvQkFBb0IsK0JBQStCLDRCQUE0Qix1Q0FBdUMscUJBQXFCLGdDQUFnQyxpQkFBaUIsNEJBQTRCLGlCQUFpQiw0QkFBNEIsa0JBQWtCLDZCQUE2QixnQkFBZ0IsOENBQThDLG9CQUFvQixrQ0FBa0Msa0JBQWtCLGtDQUFrQyxxQkFBcUIsOEJBQThCLGVBQWUsa0JBQWtCLGlDQUFpQyxxQkFBcUIseUNBQXlDLHVCQUF1QixrQ0FBa0MsNEJBQTRCLHVEQUF1RCxzQkFBc0Isd0RBQXdELDhCQUE4QixrQkFBa0Isb0NBQW9DLGtCQUFrQixvQ0FBb0MsbUJBQW1CLGdDQUFnQyxrQkFBa0IsZ0NBQWdDLDBCQUEwQixvQ0FBb0MseUJBQXlCLG9DQUFvQyxrQkFBa0Isa0NBQWtDLGtCQUFrQixhQUFhLG9DQUFvQyxxQkFBcUIsd0VBQXdFLDhCQUE4Qiw2QkFBNkIsd0dBQXdHLDhCQUE4QixtQkFBbUIsaUVBQWlFLHVCQUF1Qiw2REFBNkQsc0JBQXNCLGtCQUFrQixpQ0FBaUMsY0FBYyxrQ0FBa0MsT0FBTyxxQkFBcUIsZ0JBQWdCLFdBQVcsTUFBTSxXQUFXLHlCQUF5QixTQUFTLFFBQVEsZ0JBQWdCLHNCQUFzQiwwQkFBMEIsRUFBRSxnQkFBZ0IsMENBQTBDLGtCQUFrQixTQUFTLDZDQUE2QyxTQUFTLGtCQUFrQixTQUFTLHFEQUFxRCxTQUFTLGNBQWMsZ0VBQWdFLFNBQVMsY0FBYyw2REFBNkQsa0JBQWtCLDhDQUE4QyxjQUFjLG1EQUFtRCxJQUFJLDJDQUEyQyxTQUFTLE9BQU8sNklBQTZJLG1EQUFtRCxrQkFBa0Isa0JBQWtCLHVGQUF1Riw4SEFBOEgsbUVBQW1FLEdBQUcsUUFBUSxjQUFjLDhCQUE4QixpRkFBaUYscURBQXFELG9CQUFvQixXQUFXLHlEQUF5RCwyQkFBMkIscUJBQXFCLGlCQUFpQixxR0FBcUcsZ0RBQWdELGdHQUFnRyx3Q0FBd0MsYUFBYSxrQkFBa0IsMkJBQTJCLGtCQUFrQixZQUFZLHNCQUFzQiwwQkFBMEIsb0JBQW9CLGlCQUFpQix3QkFBd0IsZUFBZSxnQkFBZ0IsaUJBQWlCLHlCQUF5QixRQUFRLEtBQUssZ0dBQWdHLG1CQUFtQiw2QkFBNkIsMENBQTBDLDZCQUE2QiwrQkFBK0IsaUVBQWlFLGdDQUFnQyx3REFBd0Qsb0NBQW9DLDhCQUE4QiwrQ0FBK0MsR0FBRyxhQUFhLG9CQUFvQixjQUFjLGdGQUFnRixXQUFXLHVCQUF1QixxR0FBcUcsV0FBVyxNQUFNLFdBQVcsNkNBQTZDLDBCQUEwQixpSEFBaUgseUlBQXlJLFlBQVksaUNBQWlDLG9OQUFvTiw0Q0FBNEMsNkRBQTZELE9BQU8sa0JBQWtCLFNBQVMsbUNBQW1DLE9BQU8sY0FBYyxXQUFXLFNBQVMsU0FBUyw0QkFBNEIsT0FBTyxjQUFjLFVBQVUsbURBQW1ELFFBQVEsd0NBQXdDLFFBQVEsYUFBYSxVQUFVLDJCQUEyQixTQUFTLGNBQWMsU0FBUyxjQUFjLGFBQWEsa0JBQWtCLFNBQVMsd0NBQXdDLFVBQVUsS0FBSyxlQUFlLDRIQUE0SCxNQUFNLGdDQUFnQyxXQUFXLE1BQU0sY0FBYyxRQUFRLDRCQUE0QixTQUFTLHlFQUF5RSxVQUFVLHdCQUF3QixVQUFVLHlCQUF5QixjQUFjLGNBQWMsTUFBTSxVQUFVLGdCQUFnQixNQUFNLGdDQUFnQyxXQUFXLE1BQU0sY0FBYyxRQUFRLDRCQUE0QixTQUFTLHlFQUF5RSxVQUFVLHdCQUF3QixVQUFVLHlCQUF5QixXQUFXLHlDQUF5QyxTQUFTLG9CQUFvQixNQUFNLFFBQVEsZUFBZSxjQUFjLGNBQWMsTUFBTSxVQUFVLG9CQUFvQixNQUFNLGdDQUFnQyxpQkFBaUIsTUFBTSxjQUFjLFFBQVEsNEJBQTRCLFNBQVMseUVBQXlFLFVBQVUsd0JBQXdCLFVBQVUseUJBQXlCLFdBQVcseUNBQXlDLGNBQWMsY0FBYyxXQUFXLG9CQUFvQixZQUFZLFdBQVcsa0JBQWtCLE1BQU0sVUFBVSxpQkFBaUIsTUFBTSxnQ0FBZ0MsWUFBWSxPQUFPLFNBQVMsVUFBVSx5QkFBeUIsU0FBUyxnREFBZ0QsWUFBWSwyQkFBMkIsVUFBVSwwQkFBMEIsZ0JBQWdCLG1DQUFtQyxpQkFBaUIsY0FBYyxjQUFjLDJCQUEyQixlQUFlLE1BQU0sZ0NBQWdDLFVBQVUsT0FBTyx3Q0FBd0MsY0FBYyx5Q0FBeUMsdUNBQXVDLGVBQWUsTUFBTSxnQ0FBZ0MsVUFBVSxNQUFNLDBCQUEwQixjQUFjLHlDQUF5Qyx1Q0FBdUMsUUFBUSxJQUFJLDBCQUEwQixPQUFPLG9CQUFvQixPQUFPLFFBQVEsVUFBVSxVQUFVLFdBQVcsb0JBQW9CLFVBQVUsYUFBYSxlQUFlLGFBQWEsV0FBVyxTQUFTLFNBQVMsY0FBYyxpQkFBaUIsY0FBYyxVQUFVLG1DQUFtQyxVQUFVLG1DQUFtQyxTQUFTLGNBQWMsU0FBUyxjQUFjLFFBQVEsY0FBYyx5TEFBeUwsWUFBWSxvQkFBb0IsVUFBVSxTQUFTLG9CQUFvQixjQUFjLFlBQVksb0JBQW9CLFVBQVUsU0FBUyxvQkFBb0IsZ0JBQWdCLFlBQVksb0JBQW9CLFVBQVUsU0FBUyxvQkFBb0IsaUJBQWlCLFlBQVksb0JBQW9CLFVBQVUsU0FBUyxvQkFBb0IsY0FBYyxZQUFZLHFFQUFxRSxPQUFPLFNBQVMsV0FBVyxnQkFBZ0IsY0FBYyw0RkFBNEYsUUFBUSxTQUFTLFVBQVUsaUJBQWlCLHFCQUFxQiw4RUFBOEUsb0JBQW9CLEVBQUUscUJBQXFCLGlGQUFpRixvQkFBb0IsRUFBRSxhQUFhLG9CQUFvQixVQUFVLFNBQVMsb0JBQW9CLGdCQUFnQixvQkFBb0IscUVBQXFFLFFBQVEsU0FBUyxpQkFBaUIsbUJBQW1CLHlHQUF5RywwQkFBMEIsRUFBRSx1QkFBdUIsMkVBQTJFLHVCQUF1QixtR0FBbUcsMEJBQTBCLG1HQUFtRyxrQkFBa0IsZ0hBQWdILDRCQUE0QixxRUFBcUUsTUFBTSxZQUFZLFNBQVMsd0NBQXdDLGNBQWMscUtBQXFLLGtCQUFrQixxRUFBcUUsT0FBTyxTQUFTLFVBQVUsU0FBUyxxREFBcUQsMEJBQTBCLHNKQUFzSiwwQ0FBMEMsRUFBRSxlQUFlLGdHQUFnRyxnQkFBZ0IsNklBQTZJLGlCQUFpQixvSEFBb0gsc0JBQXNCLG1HQUFtRyxnQ0FBZ0MsRUFBRSwwQkFBMEIsRUFBRSxnQkFBZ0IsNklBQTZJLGdCQUFnQiw0RkFBNEYsU0FBUyxRQUFRLFNBQVMsT0FBTyxVQUFVLGNBQWMsZUFBZSxpQkFBaUIsbUJBQW1CLDBDQUEwQyx5QkFBeUIscUVBQXFFLE1BQU0sWUFBWSxTQUFTLHdDQUF3Qyx5QkFBeUIscUVBQXFFLE1BQU0sWUFBWSxTQUFTLHdDQUF3Qyw0QkFBNEIscUVBQXFFLE1BQU0sWUFBWSxTQUFTLHdDQUF3QyxlQUFlLDJHQUEyRyxjQUFjLHFMQUFxTCxjQUFjLDRJQUE0SSxtQkFBbUIseUlBQXlJLHFCQUFxQix5R0FBeUcsd0JBQXdCLDhIQUE4SCxpQkFBaUIsNEZBQTRGLE9BQU8sVUFBVSxVQUFVLDBDQUEwQyxnQkFBZ0IsNEZBQTRGLFNBQVMsUUFBUSxTQUFTLE9BQU8sVUFBVSxjQUFjLGVBQWUsaUJBQWlCLG1CQUFtQiwwQ0FBMEMsbUJBQW1CLDRHQUE0RywwQkFBMEIsRUFBRSxnQkFBZ0IsNklBQTZJLGlCQUFpQixvSEFBb0gsc0JBQXNCLG1HQUFtRyxnQ0FBZ0MsRUFBRSwwQkFBMEIsRUFBRSxtQkFBbUIsNEZBQTRGLE9BQU8sYUFBYSxjQUFjLHdDQUF3QyxnQkFBZ0IseUpBQXlKLHVCQUF1QixtR0FBbUcsMEJBQTBCLG1HQUFtRyxrQkFBa0IsZ0hBQWdILGFBQWEsb0JBQW9CLFVBQVUsU0FBUyxvQkFBb0IsZ0JBQWdCLFlBQVksb0JBQW9CLFVBQVUsU0FBUyxvQkFBb0IsbUJBQW1CLFlBQVksb0JBQW9CLFVBQVUsU0FBUyxvQkFBb0IsU0FBUyx1QkFBdUIsa0JBQWtCLG9CQUFvQixPQUFPLFFBQVEsT0FBTyxRQUFRLE9BQU8sUUFBUSxNQUFNLFNBQVMsT0FBTyxPQUFPLFFBQVEsT0FBTyxZQUFZLGdCQUFnQixvQkFBb0IsUUFBUSxjQUFjLGFBQWEsZ0JBQWdCLG9FQUFvRSxhQUFhLGlDQUFpQyxrQkFBa0Isb0JBQW9CLEtBQUsseUJBQXlCLE1BQU0seUJBQXlCLFVBQVUsY0FBYyxRQUFRLGNBQWMsS0FBSyxlQUFlLE9BQU8saUJBQWlCLFFBQVEsaUJBQWlCLFdBQVcsaUJBQWlCLE9BQU8sOEJBQThCLGNBQWMsOEJBQThCLE1BQU0sYUFBYSxLQUFLLGFBQWEsSUFBSSxhQUFhLFNBQVMsY0FBYyxTQUFTLGNBQWMsU0FBUyxjQUFjLFVBQVUsY0FBYyxTQUFTLGNBQWMsV0FBVyxjQUFjLGNBQWMsY0FBYyxjQUFjLGNBQWMsZUFBZSxjQUFjLFlBQVksY0FBYyxhQUFhLGNBQWMsTUFBTSxjQUFjLE9BQU8sY0FBYyxNQUFNLGVBQWUsTUFBTSxlQUFlLFNBQVMsZUFBZSxhQUFhLHFCQUFxQixrQkFBa0IscUJBQXFCLEtBQUsscUJBQXFCLE9BQU8sYUFBYSxvQkFBb0IsZ0JBQWdCLGtCQUFrQixnQkFBZ0IsTUFBTSxhQUFhLE1BQU0sYUFBYSxNQUFNLGFBQWEsTUFBTSxhQUFhLE1BQU0sYUFBYSxNQUFNLGFBQWEsT0FBTyxhQUFhLFFBQVEsYUFBYSxLQUFLLGFBQWEsT0FBTyxhQUFhLE1BQU0sYUFBYSxNQUFNLGFBQWEsTUFBTSxhQUFhLE9BQU8sYUFBYSxPQUFPLGFBQWEsT0FBTyxhQUFhLE1BQU0sYUFBYSxNQUFNLGFBQWEsUUFBUSxhQUFhLE1BQU0sYUFBYSxPQUFPLGFBQWEsUUFBUSxhQUFhLE9BQU8saUJBQWlCLE9BQU8saUJBQWlCLE1BQU0saUJBQWlCLE1BQU0saUJBQWlCLE9BQU8saUJBQWlCLE9BQU8saUJBQWlCLE1BQU0saUJBQWlCLE1BQU0saUJBQWlCLE1BQU0saUJBQWlCLHdCQUF3QixlQUFlLFNBQVMsZUFBZSxXQUFXLGVBQWUsU0FBUyxlQUFlLG9CQUFvQixpQkFBaUIsUUFBUSxRQUFRLHVDQUF1QyxNQUFNLGFBQWEsdUZBQXVGLFdBQVcsMklBQTJJLFFBQVEsK0dBQStHLFlBQVksOEhBQThILHdLQUF3SyxrQkFBa0IsMkVBQTJFLGlCQUFpQiw0SEFBNEgsZUFBZSwwSEFBMEgsbUJBQW1CLEVBQUUsdUJBQXVCLHdHQUF3RyxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsMkhBQTJILDBCQUEwQixxRUFBcUUsTUFBTSxhQUFhLDJDQUEyQyxpQkFBaUIsOEVBQThFLGFBQWEsZ0JBQWdCLDRIQUE0SCxlQUFlLDBIQUEwSCxtQkFBbUIsRUFBRSxtQkFBbUIsMkhBQTJILDBCQUEwQixxRUFBcUUsTUFBTSxhQUFhLDJDQUEyQyxlQUFlLGlJQUFpSSxtQkFBbUIsaUlBQWlJLGdCQUFnQix1SEFBdUgsY0FBYyxpSUFBaUksbUJBQW1CLG9JQUFvSSxtQkFBbUIsRUFBRSxpQkFBaUIsNkVBQTZFLGtCQUFrQix3R0FBd0cscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsc0JBQXNCLGdCQUFnQixHQUFHLGVBQWUsaUJBQWlCLGlJQUFpSSxpQkFBaUIsK0dBQStHLGdCQUFnQix3R0FBd0csbUJBQW1CLDRIQUE0SCxxQkFBcUIsMkhBQTJILDRCQUE0QixxRUFBcUUsTUFBTSxhQUFhLDZDQUE2Qyx1QkFBdUIscUVBQXFFLE1BQU0sYUFBYSxlQUFlLDJCQUEyQixxRUFBcUUsTUFBTSxhQUFhLG9CQUFvQix3QkFBd0IsaUlBQWlJLHdCQUF3QiwrR0FBK0csMEJBQTBCLDZIQUE2SCxnQkFBZ0Isa0JBQWtCLGtJQUFrSSxtQkFBbUIsa0hBQWtILHNCQUFzQixrSEFBa0gsa0JBQWtCLGtPQUFrTyxvQkFBb0IsNkhBQTZILGVBQWUsZ0JBQWdCLG9KQUFvSixlQUFlLHVJQUF1SSxvQkFBb0IsZ0pBQWdKLG9CQUFvQix5SkFBeUosbUJBQW1CLHlKQUF5SixtQkFBbUIsbUpBQW1KLDBCQUEwQixxRUFBcUUsTUFBTSxhQUFhLHdEQUF3RCxpQkFBaUIsb0pBQW9KLGVBQWUsdUlBQXVJLG9CQUFvQixnSkFBZ0osb0JBQW9CLHlKQUF5SixtQkFBbUIseUpBQXlKLG1CQUFtQixtSkFBbUosMEJBQTBCLHFFQUFxRSxNQUFNLGFBQWEseURBQXlELGVBQWUsa0JBQWtCLHFHQUFxRyxzQkFBc0IsNEdBQTRHLDBCQUEwQixxR0FBcUcsMEJBQTBCLHFHQUFxRyxzQkFBc0Isc0dBQXNHLG9CQUFvQixzR0FBc0cseUJBQXlCLG1IQUFtSCxrQkFBa0Isb0NBQW9DLHlHQUF5RyxrQ0FBa0MscUVBQXFFLE1BQU0sYUFBYSxvQkFBb0IsMkJBQTJCLHNHQUFzRywyQkFBMkIsd0ZBQXdGLDhCQUE4Qix3RkFBd0YsMkJBQTJCLHlGQUF5RixtQkFBbUIsb0JBQW9CLG1HQUFtRyx5QkFBeUIsRUFBRSx1QkFBdUIsNkVBQTZFLHVCQUF1QixzR0FBc0csYUFBYSxVQUFVLHlEQUF5RCxRQUFRLHdEQUF3RCwwQkFBMEIsWUFBWSxvQkFBb0IsVUFBVSxTQUFTLG9CQUFvQixXQUFXLFlBQVksa0JBQWtCLFFBQVEsbUNBQW1DLE9BQU8sa0NBQWtDLFdBQVcsOEJBQThCLE9BQU8sb0JBQW9CLFdBQVcsZUFBZSxZQUFZLGdCQUFnQix1QkFBdUIsYUFBYSxvQkFBb0IsTUFBTSxPQUFPLFFBQVEsZUFBZSxVQUFVLHNCQUFzQix5QkFBeUIsMEJBQTBCLDRIQUE0SCx5QkFBeUIsMEhBQTBILDZCQUE2QixFQUFFLDZCQUE2QiwySEFBMkgsb0NBQW9DLHFFQUFxRSxNQUFNLGFBQWEscURBQXFELDJCQUEyQiw2RUFBNkUsMEJBQTBCLGlJQUFpSSx3QkFBd0Isc0tBQXNLLHFCQUFxQixpR0FBaUcsY0FBYyxzQkFBc0IsbUVBQW1FLGNBQWMsa0NBQWtDLE9BQU8scUJBQXFCLGdCQUFnQixXQUFXLE1BQU0sV0FBVyx5QkFBeUIsU0FBUyxjQUFjLG9GQUFvRixjQUFjLHNDQUFzQyxrQkFBa0IsZ0JBQWdCLHlDQUF5QyxnR0FBZ0csd0JBQXdCLGtEQUFrRCxnQkFBZ0IsV0FBVyxNQUFNLHlCQUF5QixxQkFBcUIsK0JBQStCLHFCQUFxQiw2QkFBNkIsNENBQTRDLHlDQUF5QywwQ0FBMEMsNkJBQTZCLDZEQUE2RCxPQUFPLFlBQVksSUFBSSxjQUFjLElBQUksY0FBYyxJQUFJLGVBQWUsSUFBSSxhQUFhLElBQUksY0FBYyxJQUFJLGFBQWEsSUFBSSxpQkFBaUIsZ0JBQWdCLE9BQU8sNkJBQTZCLGNBQWMscUJBQXFCLG9CQUFvQixvR0FBb0csY0FBYyx5QkFBeUIsZ0JBQWdCLGdDQUFnQyxxQkFBcUIsOEZBQThGLEtBQUssK0JBQStCLG9DQUFvQyxXQUFXLCtCQUErQixzREFBc0Qsc0JBQXNCLE9BQU8saW9IQUFpb0gsY0FBYyx3Q0FBd0MsY0FBYyxxQkFBcUIsY0FBYyxrRUFBa0UsY0FBYyxnRUFBZ0Usa0JBQWtCLGdGQUFnRixJQUFJLDRCQUE0Qix5Q0FBeUMsOEJBQThCLG9QQUFvUCxzQ0FBc0MsMkJBQTJCLDJEQUEyRCxVQUFVLHVDQUF1QyxhQUFhLCtEQUErRCx1Q0FBdUMsYUFBYSxzQ0FBc0MsNkZBQTZGLGtFQUFrRSxxQkFBcUIsYUFBYSxXQUFXLHFDQUFxQyx1REFBdUQscUJBQXFCLE1BQU0sNEJBQTRCLHVCQUF1QixXQUFXLHFFQUFxRSxrQ0FBa0MsaURBQWlELDBFQUEwRSxpQ0FBaUMsd0NBQXdDLG1EQUFtRCxrRkFBa0YsdUJBQXVCLGtJQUFrSSw0Q0FBNEMsR0FBRyxtQ0FBbUMsa0NBQWtDLHdDQUF3QywrRUFBK0UsdUJBQXVCLDBFQUEwRSxxQkFBcUIsb1dBQW9XLGVBQWUscUJBQXFCLCtCQUErQixnQ0FBZ0MsK0JBQStCLDRCQUE0Qiw0QkFBNEIscUJBQXFCLDZCQUE2QixXQUFXLE1BQU0sZUFBZSxNQUFNLGtCQUFrQixJQUFJLE1BQU0sSUFBSSxpQkFBaUIsU0FBUyx1QkFBdUIseURBQXlELFdBQVcsdUdBQXVHLHFFQUFxRSxrQkFBa0IsK0VBQStFLGtCQUFrQixXQUFXLCtEQUErRCxtQ0FBbUMsMkhBQTJILG9DQUFvQyw2RUFBNkUseUNBQXlDLGVBQWUsbUNBQW1DLFNBQVMsdUxBQXVMLHFCQUFxQiwwQkFBMEIsdUJBQXVCLDBIQUEwSCxrQkFBa0IscUJBQXFCLCtCQUErQixnQ0FBZ0MsK0JBQStCLDRCQUE0Qiw0QkFBNEIscUJBQXFCLGdCQUFnQixXQUFXLDBCQUEwQixTQUFTLHVCQUF1QixvQ0FBb0MsU0FBUyxTQUFTLHVDQUF1QyxvQ0FBb0Msd0dBQXdHLGtDQUFrQyxrQkFBa0Isb0NBQW9DLHlDQUF5QyxtQkFBbUIsbUNBQW1DLDRKQUE0SixtQkFBbUIsc0RBQXNELCtCQUErQixxQkFBcUIsUUFBUSxxQ0FBcUMsa0JBQWtCLHlCQUF5Qix1QkFBdUIsZ0VBQWdFLGdDQUFnQyxXQUFXLEtBQUssd0JBQXdCLGtCQUFrQixVQUFVLG1CQUFtQixtQ0FBbUMsWUFBWSxtQkFBbUIsS0FBSywrQkFBK0IsZ0NBQWdDLHlIQUF5SCxZQUFZLG9DQUFvQyxxQkFBcUIseUNBQXlDLHNEQUFzRCwyQkFBMkIsR0FBRyxNQUFNLG1DQUFtQyx3REFBd0QscUJBQXFCLElBQUksUUFBUSw0QkFBNEIsa0JBQWtCLDBCQUEwQix1QkFBdUIsK0dBQStHLFFBQVEsZUFBZSxXQUFXLCtIQUErSCxRQUFRLFNBQVMsZUFBZSxnSkFBZ0osT0FBTyxtREFBbUQsMEJBQTBCLG1DQUFtQyw2QkFBNkIscUhBQXFILFNBQVMsb0NBQW9DLGNBQWMseUNBQXlDLG9DQUFvQyxtQ0FBbUMscUNBQXFDLDZEQUE2RCxlQUFlLGtCQUFrQiw4QkFBOEIseUNBQXlDLFFBQVEsMkJBQTJCLGtCQUFrQix5QkFBeUIsdUJBQXVCLGdFQUFnRSxnQ0FBZ0MsV0FBVyxLQUFLLHdCQUF3QixrQkFBa0IsVUFBVSxtQkFBbUIsbUNBQW1DLDZCQUE2Qiw0QkFBNEIsV0FBVyxxREFBcUQsc0JBQXNCLGNBQWMsMk9BQTJPLG1HQUFtRywrQkFBK0IsV0FBVyxxQ0FBcUMsZ0JBQWdCLHNCQUFzQixtRUFBbUUsb0NBQW9DLHFCQUFxQix5Q0FBeUMsc0RBQXNELDJCQUEyQixHQUFHLE1BQU0sbUNBQW1DLDZCQUE2QixrQ0FBa0Msc0JBQXNCLEtBQUssZ0VBQWdFLDBCQUEwQiwyQkFBMkIsOERBQThELHNDQUFzQyxvR0FBb0csb0NBQW9DLGlEQUFpRCxxQ0FBcUMsK0JBQStCLHNEQUFzRCx5QkFBeUIsc0RBQXNELGVBQWUsb0JBQW9CLDhDQUE4Qyw4Q0FBOEMsMkVBQTJFLG9DQUFvQyxTQUFTLCtCQUErQixrQkFBa0IsSUFBSSxpQkFBaUIsa0RBQWtELFNBQVMsK0JBQStCLG9CQUFvQixJQUFJLGtDQUFrQyxtQ0FBbUMsb0NBQW9DLHFCQUFxQix5Q0FBeUMsZUFBZSxtQ0FBbUMsbURBQW1ELHFCQUFxQixHQUFHLHdCQUF3QiwrQkFBK0IsNkdBQTZHLDJHQUEyRyxXQUFXLCtDQUErQyxXQUFXLFdBQVcsS0FBSyxvQkFBb0IsaUJBQWlCLGNBQWMsaUNBQWlDLDhCQUE4QixrQkFBa0IsVUFBVSx1QkFBdUIsV0FBVyxNQUFNLHlCQUF5Qiw4SkFBOEosS0FBSyxZQUFZLFdBQVcsS0FBSywwQ0FBMEMscUNBQXFDLCtDQUErQyx1REFBdUQsS0FBSyxxQ0FBcUMsTUFBTSxnRkFBZ0Ysa0NBQWtDLGlCQUFpQixhQUFhLHdFQUF3RSxZQUFZLDJCQUEyQix5Q0FBeUMscUJBQXFCLHFEQUFxRCx1QkFBdUIsd0hBQXdILFdBQVcseUtBQXlLLG1DQUFtQyx3Q0FBd0Msb0NBQW9DLHlDQUF5QyxlQUFlLG1DQUFtQyx5QkFBeUIsMkJBQTJCLG1IQUFtSCxnQkFBZ0IsMkRBQTJELGlCQUFpQixpQ0FBaUMsS0FBSyxFQUFFLGdFQUFnRSxhQUFhLEtBQUssaURBQWlELE9BQU8sdUJBQXVCLHVDQUF1Qyx3QkFBd0Isb0RBQW9ELG1DQUFtQyw4R0FBOEcsc0lBQXNJLFdBQVcsMktBQTJLLHVCQUF1QixNQUFNLHNCQUFzQixrQkFBa0Isc0JBQXNCLGlDQUFpQyw4S0FBOEssK0RBQStELDJEQUEyRCw4Q0FBOEMsOENBQThDLHFDQUFxQywrQ0FBK0MsOENBQThDLDRCQUE0Qiw2REFBNkQsK0JBQStCLCtCQUErQix1RkFBdUYsS0FBSyxhQUFhLElBQUksK0JBQStCLFNBQVMsbUNBQW1DLFNBQVMsMEdBQTBHLG1KQUFtSixJQUFJLDhFQUE4RSxxQ0FBcUMsMkZBQTJGLHFEQUFxRCxnQ0FBZ0Msa0NBQWtDLE9BQU8scUJBQXFCLG9DQUFvQyxnQkFBZ0IsV0FBVyw2QkFBNkIseUNBQXlDLGFBQWEsMkJBQTJCLHVCQUF1Qix3REFBd0QsZ0JBQWdCLFdBQVcsTUFBTSx5QkFBeUIsMkNBQTJDLG1CQUFtQixtQkFBbUIsdUJBQXVCLHdCQUF3QixrR0FBa0csNkVBQTZFLG1DQUFtQyxnQkFBZ0Isa0ZBQWtGLFlBQVksV0FBVyxNQUFNLGdDQUFnQyxrTEFBa0wsK0pBQStKLHFCQUFxQixrQkFBa0IsMEJBQTBCLHFCQUFxQixtQ0FBbUMsaUNBQWlDLHdDQUF3Qyw2QkFBNkIsbUNBQW1DLGVBQWUsMkRBQTJELG9DQUFvQyxjQUFjLDJCQUEyQixXQUFXLGFBQWEseUNBQXlDLHlEQUF5RCwyQkFBMkIsR0FBRyxNQUFNLG1DQUFtQyw4Q0FBOEMscUJBQXFCLG9FQUFvRSxVQUFVLHNCQUFzQixnQ0FBZ0MsdUVBQXVFLHVCQUF1QiwyQkFBMkIsb0JBQW9CLEdBQUcsdUJBQXVCLDZFQUE2RSxnQkFBZ0IsV0FBVyxNQUFNLHlCQUF5QiwyQ0FBMkMscUJBQXFCLGdCQUFnQiw2REFBNkQseUNBQXlDLFFBQVEsNkNBQTZDLHdDQUF3QyxpQ0FBaUMsc0JBQXNCLGdEQUFnRCxTQUFTLHdCQUF3QiwrQkFBK0Isa0dBQWtHLHNCQUFzQixlQUFlLDhCQUE4QixXQUFXLCtGQUErRixHQUFHLDJCQUEyQixLQUFLLHdGQUF3RixpQkFBaUIsb0NBQW9DLG1DQUFtQyw4R0FBOEcsR0FBRyxxQ0FBcUMsa0dBQWtHLDZFQUE2RSxtQ0FBbUMsZ0JBQWdCLGtFQUFrRSxZQUFZLFdBQVcsTUFBTSxnQ0FBZ0MseUxBQXlMLHNLQUFzSyxxQkFBcUIsa0JBQWtCLDBCQUEwQiw4S0FBOEssbUNBQW1DLGlDQUFpQyx3Q0FBd0MsNkJBQTZCLG1DQUFtQyxlQUFlLHVDQUF1Qyx5SEFBeUgsK0NBQStDLG9DQUFvQyxjQUFjLDJCQUEyQixXQUFXLGFBQWEseUNBQXlDLHlEQUF5RCwyQkFBMkIsR0FBRyxNQUFNLG1DQUFtQyxvUkFBb1IscUJBQXFCLHVEQUF1RCxVQUFVLHFCQUFxQix5QkFBeUIsdUJBQXVCLG1FQUFtRSw0QkFBNEIsMkJBQTJCLDhCQUE4QixXQUFXLE1BQU0sNENBQTRDLHVCQUF1QixFQUFFLGtCQUFrQixzQkFBc0IsNEJBQTRCLG1CQUFtQixFQUFFLHVCQUF1QixtQ0FBbUMsK0JBQStCLHdDQUF3QyxNQUFNLFNBQVMsb0NBQW9DLHFCQUFxQix5Q0FBeUMsc0RBQXNELDJCQUEyQixHQUFHLE1BQU0sbUNBQW1DLG1CQUFtQixrQ0FBa0Msc0JBQXNCLEtBQUsscUJBQXFCLDJEQUEyRCxrQ0FBa0MsK0JBQStCLG9DQUFvQyw0QkFBNEIsV0FBVyxnQkFBZ0IsZUFBZSx3QkFBd0IsbUdBQW1HLGlCQUFpQixhQUFhLE1BQU0sV0FBVywyRkFBMkYsZ0hBQWdILDBCQUEwQixrQkFBa0IsY0FBYyxpREFBaUQsMEJBQTBCLHlDQUF5QyxxQ0FBcUMsbUNBQW1DLHNDQUFzQyxXQUFXLE1BQU0seUJBQXlCLHdCQUF3QiwwQ0FBMEMsdUJBQXVCLHVDQUF1Qyx1QkFBdUIsNEZBQTRGLCtEQUErRCxzQkFBc0IsYUFBYSw4QkFBOEIsbUNBQW1DLHNEQUFzRCw2REFBNkQsb0ZBQW9GLDhGQUE4RixZQUFZLG9DQUFvQyw0QkFBNEIseUNBQXlDLGVBQWUsbUNBQW1DLDREQUE0RCw2QkFBNkIsd0ZBQXdGLHVCQUF1QixnR0FBZ0cseUVBQXlFLFFBQVEsa0VBQWtFLFlBQVksVUFBVSxhQUFhLE1BQU0sb0JBQW9CLDBCQUEwQixrQkFBa0Isc0VBQXNFLGdCQUFnQixXQUFXLE1BQU0sV0FBVyxzR0FBc0csd0pBQXdKLHlHQUF5RyxNQUFNLHVDQUF1QyxhQUFhLHlFQUF5RSxzQkFBc0IscUJBQXFCLGtCQUFrQixzQkFBc0Isd0JBQXdCLGtCQUFrQiwwQ0FBMEMsa0NBQWtDLG1DQUFtQyw2QkFBNkIsZ0VBQWdFLG9DQUFvQyx3REFBd0QseUNBQXlDLHlEQUF5RCwyQkFBMkIsNENBQTRDLE1BQU0sbUNBQW1DLDJEQUEyRCxzQ0FBc0MsV0FBVyxNQUFNLDJCQUEyQiw2RUFBNkUsc0JBQXNCLCtDQUErQyxTQUFTLFdBQVcsTUFBTSx5QkFBeUIsK0VBQStFLDZDQUE2Qyx1QkFBdUIsOENBQThDLGVBQWUsZ0ZBQWdGLGlCQUFpQixrQkFBa0Isa0JBQWtCLGtEQUFrRCw2QkFBNkIsaUZBQWlGLHdCQUF3QixrQkFBa0Isd0JBQXdCLGtCQUFrQix5S0FBeUssNklBQTZJLFdBQVcsaUJBQWlCLHFIQUFxSCxzQ0FBc0Msb0JBQW9CLGtDQUFrQyxpSkFBaUosY0FBYyxtQ0FBbUMsd0RBQXdELHdDQUF3QyxjQUFjLGtDQUFrQyxVQUFVLGtDQUFrQyxzQkFBc0IsSUFBSSxHQUFHLEdBQUcsdUJBQXVCLGdHQUFnRyx3RUFBd0UsTUFBTSxrRUFBa0UsaUJBQWlCLGFBQWEsTUFBTSx3QkFBd0Isa0JBQWtCLDRCQUE0QixrQkFBa0IsMEJBQTBCLDBDQUEwQyw0QkFBNEIsbUNBQW1DLDRCQUE0QixXQUFXLE1BQU0seUJBQXlCLHNDQUFzQyxrQ0FBa0Msb0NBQW9DLDRCQUE0QixXQUFXLE1BQU0seUJBQXlCLFVBQVUsa0JBQWtCLHlDQUF5QywwREFBMEQsbUNBQW1DLDRDQUE0QyxNQUFNLG1DQUFtQyxlQUFlLGtDQUFrQyxzQkFBc0IsS0FBSyxpREFBaUQsMEJBQTBCLHVCQUF1QiwyRkFBMkYsc0JBQXNCLG9MQUFvTCxtQ0FBbUMsNkJBQTZCLHNDQUFzQyxvQ0FBb0MsOEZBQThGLG9DQUFvQyxjQUFjLHlDQUF5QyxlQUFlLG1DQUFtQyxpQkFBaUIsa0NBQWtDLHNCQUFzQixLQUFLLFFBQVEseU1BQXlNLGlCQUFpQixnQ0FBZ0MsZ0RBQWdELHNDQUFzQyxxQkFBcUIseUNBQXlDLGlCQUFpQixjQUFjLGlCQUFpQixXQUFXLHlCQUF5QixpQkFBaUIsa0JBQWtCLG1DQUFtQyxpQkFBaUIsa0JBQWtCLG1DQUFtQyxpQkFBaUIsa0JBQWtCLG9DQUFvQyxpQkFBaUIsa0JBQWtCLG9DQUFvQyxlQUFlLE9BQU8sUUFBUSxlQUFlLE9BQU8sMEJBQTBCLGVBQWUsT0FBTyx3QkFBd0IsZ0JBQWdCLFFBQVEsYUFBYSxtQkFBbUIsV0FBVyw0QkFBNEIsOEJBQThCLCtCQUErQixtQ0FBbUMscUNBQXFDLHNIQUFzSCxvQ0FBb0MsV0FBVyw4QkFBOEIsc0NBQXNDLGtDQUFrQyxnREFBZ0QscUNBQXFDLDJDQUEyQyx1QkFBdUIsa0JBQWtCLHVDQUF1QyxHQUFHLE1BQU0scUNBQXFDLDJDQUEyQyx1QkFBdUIsa0JBQWtCLHVDQUF1QyxHQUFHLDhCQUE4QixzQkFBc0Isb0NBQW9DLHdCQUF3Qix1QkFBdUIsY0FBYyx5QkFBeUIsc0JBQXNCLHNDQUFzQyxtQ0FBbUMsb0NBQW9DLGlDQUFpQyw2QkFBNkIsb0JBQW9CLFdBQVcseUJBQXlCLFNBQVMsNkJBQTZCLG9CQUFvQixXQUFXLHlCQUF5QixTQUFTLE9BQU8sdUNBQXVDLGtCQUFrQixtQ0FBbUMscUJBQXFCLHdCQUF3QixHQUFHLDRCQUE0QixrQkFBa0IsbUNBQW1DLDZCQUE2QixrQkFBa0IsbUNBQW1DLHVCQUF1QixnQkFBZ0Isc0JBQXNCLGVBQWUscUJBQXFCLGNBQWMsNkJBQTZCLGtCQUFrQiw2Q0FBNkMsNEJBQTRCLFdBQVcsZ0NBQWdDLDZCQUE2QixXQUFXLGlDQUFpQywwQkFBMEIsV0FBVywrQkFBK0IsNEJBQTRCLFdBQVcsZ0NBQWdDLDJCQUEyQixXQUFXLCtCQUErQiwyQkFBMkIsV0FBVywrQkFBK0IsMkJBQTJCLFdBQVcsK0JBQStCLDRCQUE0QixXQUFXLGdDQUFnQyw0QkFBNEIsV0FBVyxnQ0FBZ0MsNEJBQTRCLFdBQVcsZ0NBQWdDLDZCQUE2Qiw2Q0FBNkMscUJBQXFCLEdBQUcsNkJBQTZCLDZDQUE2QyxxQkFBcUIsR0FBRywyQkFBMkIsV0FBVywrQkFBK0IsNkJBQTZCLHVCQUF1Qix5Q0FBeUMsNkJBQTZCLFdBQVcsaUNBQWlDLDRCQUE0QixXQUFXLGdDQUFnQyxxQ0FBcUMsa0JBQWtCLHlDQUF5QyxzQ0FBc0MsV0FBVyx3QkFBd0Isd0NBQXdDLFdBQVcsa0NBQWtDLG9DQUFvQyxzREFBc0QsK0JBQStCLHFDQUFxQyw4QkFBOEIsK0JBQStCLG9DQUFvQyxzREFBc0QsK0JBQStCLHFDQUFxQyw4QkFBOEIsK0JBQStCLHFDQUFxQyxzREFBc0QsZ0NBQWdDLHNDQUFzQyw4QkFBOEIsZ0NBQWdDLHFDQUFxQyxzREFBc0QsZ0NBQWdDLHNDQUFzQyw4QkFBOEIsZ0NBQWdDLG9DQUFvQyxvQ0FBb0Msb0NBQW9DLHFCQUFxQiwyQ0FBMkMsK0NBQStDLHlDQUF5QyxxQ0FBcUMsOENBQThDLFdBQVcsc0RBQXNELDhDQUE4QyxrQkFBa0IseUJBQXlCLEtBQUssS0FBSyxFQUFFLGFBQWEscUJBQXFCLG1CQUFtQixTQUFTLHFEQUFxRCxPQUFPLCtEQUErRCxrQkFBa0IsK0RBQStELEdBQUcsTUFBTSwrREFBK0Qsa0JBQWtCLCtEQUErRCxHQUFHLE9BQU8sK0RBQStELGtCQUFrQixnRUFBZ0UsR0FBRyxPQUFPLCtEQUErRCxrQkFBa0IsZ0VBQWdFLEdBQUcsTUFBTSx1Q0FBdUMsa0JBQWtCLG9DQUFvQyx1QkFBdUIsZ0JBQWdCLFdBQVcsbUNBQW1DLFNBQVMsR0FBRyxNQUFNLHVDQUF1QyxrQkFBa0Isb0NBQW9DLHVCQUF1QixnQkFBZ0IsV0FBVyxrQ0FBa0MsU0FBUyxHQUFHLDBCQUEwQix3QkFBd0IsNkNBQTZDLG9EQUFvRCwyQkFBMkIsOEJBQThCLHNDQUFzQyxnQ0FBZ0Msc0NBQXNDLGdDQUFnQyx5QkFBeUIscUJBQXFCLFdBQVcseUNBQXlDLHlDQUF5QyxFQUFFLEVBQUUsbUdBQW1HLGVBQWUsb0NBQW9DLGVBQWUsNEJBQTRCLGVBQWUsOERBQThELGVBQWUsNERBQTRELGVBQWUseUhBQXlILE9BQU8scUZBQXFGLGVBQWUscUVBQXFFLDBLQUEwSyxRQUFRLGtEQUFrRCxPQUFPLDhFQUE4RSxLQUFLLG9CQUFvQixtREFBbUQsT0FBTyxrREFBa0QscUJBQXFCLG1CQUFtQixXQUFXLG9EQUFvRCxFQUFFLDZCQUE2QixPQUFPLGtCQUFrQixVQUFVLHFEQUFxRCwwRUFBMEUsbUJBQW1CLGNBQWMsRUFBRSxlQUFlLGtKQUFrSixlQUFlLHNEQUFzRCxlQUFlLFNBQVMsbUJBQW1CLHFEQUFxRCx1QkFBdUIsd0RBQXdELG1CQUFtQixtREFBbUQscUJBQXFCLDhCQUE4Qix5Q0FBeUMsNkNBQTZDLG9CQUFvQixxQkFBcUIsbUJBQW1CLCtCQUErQixtREFBbUQscUJBQXFCLDhCQUE4Qix5Q0FBeUMsNkNBQTZDLHdDQUF3QyxnQkFBZ0IsNkRBQTZELHVGQUF1Rix1Q0FBdUMsdUJBQXVCLGdCQUFnQiw4REFBOEQscUNBQXFDLG9CQUFvQixnQ0FBZ0MsSUFBSSxtQkFBbUIsOERBQThELDJDQUEyQyxVQUFVLG1CQUFtQix3SEFBd0gsaUJBQWlCLGlDQUFpQyxLQUFLLEVBQUUsc0VBQXNFLHVCQUF1Qix1QkFBdUIscUJBQXFCLE1BQU0seUNBQXlDLG1NQUFtTSxlQUFlLHNFQUFzRSxpQkFBaUIsK0JBQStCLE9BQU8sNENBQTRDLGlFQUFpRSxrQkFBa0Isc0NBQXNDLHdEQUF3RCwrSUFBK0kscUNBQXFDLDhGQUE4RixJQUFJLGdEQUFnRCxxQ0FBcUMsd0lBQXdJLHlCQUF5QiwyREFBMkQsU0FBUyxTQUFTLHVKQUF1SixxQkFBcUIscUNBQXFDLHdEQUF3RCwrREFBK0QscUNBQXFDLDRDQUE0Qyx1QkFBdUIsd0hBQXdILGlCQUFpQix5Q0FBeUMsaUNBQWlDLDJGQUEyRixxQkFBcUIsdUZBQXVGLG9CQUFvQixXQUFXLGlDQUFpQyw2Q0FBNkMsV0FBVyxNQUFNLFdBQVcsZ0JBQWdCLDRGQUE0RixpREFBaUQsV0FBVywyUEFBMlAsS0FBSyxJQUFJLDBXQUEwVyx3REFBd0QsK0RBQStELHFDQUFxQywyQ0FBMkMsa0RBQWtELHdGQUF3RixxQkFBcUIsZ0VBQWdFLHlLQUF5SyxjQUFjLDZDQUE2Qyw0QkFBNEIsc0xBQXNMLDBCQUEwQiw0QkFBNEIsMkJBQTJCLDJCQUEyQixzQkFBc0IsV0FBVyxNQUFNLFdBQVcsYUFBYSx1QkFBdUIsS0FBSyxtRUFBbUUsS0FBSyxNQUFNLFlBQVksVUFBVSxpQkFBaUIsS0FBSyw2QkFBNkIsc0JBQXNCLGtFQUFrRSwrQ0FBK0MscUJBQXFCLFdBQVcsTUFBTSxXQUFXLDhCQUE4QixPQUFPLHlFQUF5RSxjQUFjLDhCQUE4QixZQUFZLHlCQUF5QixhQUFhLFdBQVcsb0JBQW9CLHNCQUFzQixVQUFVLHdGQUF3RixpREFBaUQsYUFBYSxTQUFTLG1DQUFtQyxZQUFZLHVCQUF1QixhQUFhLHFCQUFxQixFQUFFLHFDQUFxQyxzREFBc0QseURBQXlELHlDQUF5QyxpQkFBaUIsNEJBQTRCLFVBQVUsY0FBYyw4REFBOEQsNEJBQTRCLGNBQWMsZUFBZSxRQUFRLDZEQUE2RCxvQ0FBb0MsV0FBVyxlQUFlLHVDQUF1QyxnQ0FBZ0Msc0NBQXNDLGtFQUFrRSxnQkFBZ0IsOENBQThDLGVBQWUsa0JBQWtCLHdCQUF3QixLQUFLLFlBQVksaURBQWlELFNBQVMsS0FBSyxjQUFjLGtGQUFrRixLQUFLLGlJQUFpSSxTQUFTLGVBQWUsMEZBQTBGLHdFQUF3RSxvSEFBb0gsZ0pBQWdKLE9BQU8sY0FBYywwRUFBMEUsaUJBQWlCLFdBQVcsa0JBQWtCLGdGQUFnRixHQUFHLFNBQVMsZUFBZSw0Q0FBNEMsbVBBQW1QLGVBQWUsOENBQThDLDZKQUE2SixvSEFBb0gsa0JBQWtCLG1HQUFtRyxtQkFBbUIsc0JBQXNCLG9HQUFvRywrRkFBK0YscUJBQXFCLFdBQVcsd0VBQXdFLElBQUksRUFBRSwrc0JBQStzQixjQUFjLDJCQUEyQix3RUFBd0Usd0ZBQXdGLE1BQU0sZ0ZBQWdGLDBFQUEwRSw0RUFBNEUsa0dBQWtHLCtDQUErQyxpQkFBaUIsa0NBQWtDLFFBQVEsOERBQThELGlCQUFpQixHQUFHLG1CQUFtQixtQ0FBbUMscUNBQXFDLEtBQUssb0JBQW9CLHVFQUF1RSxHQUFHLGdCQUFnQiwwREFBMEQsTUFBTSw4RkFBOEYsU0FBUyw2SEFBNkgsb0NBQW9DLHFDQUFxQyx1SkFBdUosNlVBQTZVLGVBQWUsdUVBQXVFLGlEQUFpRCwrQ0FBK0Msb1JBQW9SLGVBQWUseUNBQXlDLDZTQUE2UyxlQUFlLDRDQUE0QyxhQUFhLDJEQUEyRCxrREFBa0Qsb0hBQW9ILDZDQUE2QyxXQUFXLE1BQU0sV0FBVyx3Q0FBd0MsU0FBUyxrQkFBa0IsMkJBQTJCLDhDQUE4QywwQkFBMEIsT0FBTyw0REFBNEQsUUFBUSxpRkFBaUYsZUFBZSx3QkFBd0IsVUFBVSxpQkFBaUIsZUFBZSw4REFBOEQsNEJBQTRCLGNBQWMscUJBQXFCLDhCQUE4QixpQkFBaUIsc0JBQXNCLGVBQWUsZUFBZSxhQUFhLCtZQUErWSxtQkFBbUIsVUFBVSx1Q0FBdUMsbUNBQW1DLGlDQUFpQyxpQkFBaUIseUJBQXlCLFVBQVUsbURBQW1ELCtDQUErQyxpREFBaUQsNkJBQTZCLG9GQUFvRixlQUFlLFVBQVUscUJBQXFCLGtDQUFrQyxnQ0FBZ0MsZUFBZSxjQUFjLGVBQWUsNkJBQTZCLElBQUksc0NBQXNDLGlCQUFpQixpQkFBaUIsc0JBQXNCLHdFQUF3RSx5QkFBeUIsNkVBQTZFLHNCQUFzQix1RkFBdUYsWUFBWSxzSUFBc0ksK0dBQStHLG9IQUFvSCxZQUFZLFdBQVcsZ0RBQWdELHlGQUF5RixpSUFBaUksTUFBTSwyQ0FBMkMsV0FBVyxrQkFBa0IsK0RBQStELEdBQUcsTUFBTSxxTUFBcU0sU0FBUyxJQUFJLGlCQUFpQixtRkFBbUYsZUFBZSxtQ0FBbUMsMERBQTBELHlEQUF5RCxFQUFFLDBCQUEwQixvREFBb0QsOERBQThELElBQUksSUFBSSwwSEFBMEgsMkRBQTJELE1BQU0sU0FBUyxpUkFBaVIsNkZBQTZGLEdBQUcsZUFBZSxxQkFBcUIsZUFBZSxzQkFBc0IsZUFBZSxtREFBbUQsdUVBQXVFLDZCQUE2Qiw4QkFBOEIsZUFBZSxLQUFLLGtCQUFrQiwyR0FBMkcsb0ZBQW9GLHFFQUFxRSwrQkFBK0IsbUJBQW1CLDJJQUEySSxzQ0FBc0Msb0RBQW9ELDhxQkFBOHFCLDZEQUE2RCxzQkFBc0IsNkZBQTZGLGVBQWUsU0FBUyxpQkFBaUIsV0FBVyxnSEFBZ0gsRUFBRSw4QkFBOEIsV0FBVyw2RkFBNkYsZ0JBQWdCLGFBQWEsWUFBWSxPQUFPLEVBQUUsbUJBQW1CLFdBQVcsNkZBQTZGLGdCQUFnQixhQUFhLFlBQVksT0FBTyxJQUFJLEdBQUcsZUFBZSw4Q0FBOEMsbURBQW1ELHFCQUFxQixVQUFVLDZEQUE2RCxrRkFBa0Ysb0tBQW9LLFNBQVMseUJBQXlCLDZEQUE2RCxFQUFFLHVCQUF1QiwyREFBMkQsRUFBRSx1QkFBdUIsMkRBQTJELEVBQUUsd0pBQXdKLG1CQUFtQixzQ0FBc0Msa0VBQWtFLHFCQUFxQixHQUFHLGVBQWUsNkRBQTZELHVCQUF1QixtRkFBbUYsZ0JBQWdCLG1DQUFtQyw4Q0FBOEMsNERBQTRELHFCQUFxQixvREFBb0Qsd0RBQXdELFNBQVMsZUFBZSw4QkFBOEIsa0VBQWtFLFFBQVEsZUFBZSxTQUFTLDhCQUE4Qiw4QkFBOEIsb0VBQW9FLDZCQUE2Qiw4QkFBOEIsMEhBQTBILDRGQUE0RixlQUFlLDBDQUEwQyxxR0FBcUcsSUFBSSw2QkFBNkIsR0FBRyxlQUFlLDhCQUE4QixvQ0FBb0MsVUFBVSxvREFBb0QsVUFBVSw0QkFBNEIsTUFBTSxvREFBb0QsTUFBTSxjQUFjLGlCQUFpQixPQUFPLFNBQVMsc0JBQXNCLDhFQUE4RSx5QkFBeUIsV0FBVywrQkFBK0Isc0RBQXNELFVBQVUsZUFBZSxzQ0FBc0MscUJBQXFCLEVBQUUsZUFBZSxrQkFBa0Isb0NBQW9DLG1IQUFtSCwrREFBK0QsaUJBQWlCLFNBQVMsK0JBQStCLFdBQVcsTUFBTSxXQUFXLHlDQUF5QyxTQUFTLGVBQWUsbUJBQW1CLG9CQUFvQiw2QkFBNkIsbUJBQW1CLHVDQUF1QyxrQ0FBa0MsWUFBWSxnQkFBZ0IsS0FBSywwQkFBMEIsbUNBQW1DLHdDQUF3QyxxRkFBcUYsS0FBSyxhQUFhLFlBQVksZ0JBQWdCLGVBQWUsNEJBQTRCLGdFQUFnRSxZQUFZLHlCQUF5Qix3Q0FBd0MseUpBQXlKLHlDQUF5QyxtRUFBbUUsZ0RBQWdELHNCQUFzQixzQ0FBc0MsMEJBQTBCLHVFQUF1RSxTQUFTLHFEQUFxRCxJQUFJLGlEQUFpRCxvQkFBb0Isa0RBQWtELFdBQVcsS0FBSyxXQUFXLGtCQUFrQixVQUFVLDRFQUE0RSxtREFBbUQsb0lBQW9JLEtBQUssZ0JBQWdCLEtBQUssS0FBSyxpQkFBaUIsc0NBQXNDLDhDQUE4Qyw0RUFBNEUsdUNBQXVDLDRDQUE0Qyx3REFBd0Qsb0JBQW9CLDRCQUE0Qiw4REFBOEQsK0NBQStDLGdCQUFnQixXQUFXLEtBQUssV0FBVyxpQ0FBaUMsdUlBQXVJLDRCQUE0QixtQkFBbUIsaUJBQWlCLCtDQUErQyxxQkFBcUIsU0FBUywrQ0FBK0MsNkRBQTZELHdCQUF3QixzQkFBc0IsNEJBQTRCLGlCQUFpQix3R0FBd0csb0JBQW9CLCtGQUErRixtQkFBbUIsMkRBQTJELGlCQUFpQix5TEFBeUwsa0RBQWtELDBCQUEwQixRQUFRLDZCQUE2QixxREFBcUQscUJBQXFCLHFCQUFxQixXQUFXLE1BQU0sV0FBVyxnQkFBZ0IsU0FBUyx1QkFBdUIsMENBQTBDLHNFQUFzRSxTQUFTLDhDQUE4QyxLQUFLLG9FQUFvRSxXQUFXLDJDQUEyQywwQ0FBMEMsT0FBTyxxQkFBcUIsNERBQTRELGVBQWUsMlBBQTJQLDZDQUE2QyxhQUFhLEVBQUUsdUJBQXVCLGdDQUFnQyxxRUFBcUUsa0JBQWtCLGlFQUFpRSxxREFBcUQsMERBQTBELFdBQVcsTUFBTSxXQUFXLCtDQUErQyxTQUFTLDhEQUE4RCxrQkFBa0IsZUFBZSxrQ0FBa0Msb0JBQW9CLGlWQUFpVixRQUFRLGlDQUFpQyxzQkFBc0Isb0JBQW9CLHdCQUF3QixpQ0FBaUMsd0JBQXdCLGlDQUFpQyx3QkFBd0IsMkJBQTJCLHdCQUF3QixxREFBcUQsd0JBQXdCLG1CQUFtQix3QkFBd0IsOERBQThELHdCQUF3QixtQ0FBbUMsd0JBQXdCLGtDQUFrQyx3QkFBd0IsNEJBQTRCLHdCQUF3Qix1Q0FBdUMsd0JBQXdCLGdDQUFnQyx3QkFBd0IsNkNBQTZDLHdCQUF3QixzQ0FBc0Msd0JBQXdCLGdDQUFnQyx3QkFBd0IscUNBQXFDLHdCQUF3QixnREFBZ0QsMEJBQTBCLHVDQUF1QywwQkFBMEIsK0JBQStCLDBCQUEwQixrREFBa0QsMEJBQTBCLDJDQUEyQywwQkFBMEIsc0JBQXNCLDBCQUEwQixzQkFBc0IsMEJBQTBCLHNCQUFzQiwwQkFBMEIseUNBQXlDLDBCQUEwQixvQkFBb0IsMEJBQTBCLGlDQUFpQywwQkFBMEIsMkJBQTJCLDBCQUEwQiw0Q0FBNEMsMEJBQTBCLCtDQUErQywwQkFBMEIsaUNBQWlDLDBCQUEwQixrREFBa0QsMEJBQTBCLHVDQUF1QywwQkFBMEIsc0NBQXNDLDBCQUEwQiw0QkFBNEIsMEJBQTBCLDJCQUEyQiwwQkFBMEIsc0NBQXNDLDBCQUEwQixnQ0FBZ0MsMEJBQTBCLHNDQUFzQywwQkFBMEIsZ0NBQWdDLDBCQUEwQiw0Q0FBNEMsMEJBQTBCLDJDQUEyQywwQkFBMEIsOEJBQThCLDBCQUEwQix1Q0FBdUMsMEJBQTBCLG1DQUFtQywwQkFBMEIsMkNBQTJDLDBCQUEwQiw2Q0FBNkMsNEJBQTRCLGVBQWUsZ0JBQWdCLFdBQVcsd0NBQXdDLFNBQVMsZUFBZSwwSkFBMEosZUFBZSwydUNBQTJ1QyxlQUFlLDJCQUEyQixxakNBQXFqQyxLQUFLLGlCQUFpQiw2SkFBNkosd0NBQXdDLDBFQUEwRSx3Q0FBd0Msa0JBQWtCLHNNQUFzTSxHQUFHLDJDQUEyQyxxQkFBcUIsZ0JBQWdCLFdBQVcsMkNBQTJDLFNBQVMsa0JBQWtCLDJDQUEyQyw4R0FBOEcscUJBQXFCLHVHQUF1RyxxQ0FBcUMsMEVBQTBFLDJDQUEyQywrQ0FBK0MsbUJBQW1CLDZDQUE2Qyx3Q0FBd0MsNkNBQTZDLHNDQUFzQyx3Q0FBd0MsOENBQThDLEtBQUssbUJBQW1CLHNGQUFzRixrQ0FBa0Msc0NBQXNDLHFDQUFxQywrSkFBK0osd0NBQXdDLHFDQUFxQywwQ0FBMEMsMkhBQTJILG1DQUFtQyxZQUFZLGlDQUFpQyxXQUFXLE1BQU0sOEJBQThCLHFCQUFxQiw0QkFBNEIsbUNBQW1DLFNBQVMseUNBQXlDLG1FQUFtRSxXQUFXLE1BQU0sV0FBVywwREFBMEQsU0FBUyx3Q0FBd0MsbUVBQW1FLFdBQVcsTUFBTSxXQUFXLDhDQUE4QyxVQUFVLDJCQUEyQiwwSkFBMEosMENBQTBDLDZEQUE2RCxNQUFNLHVDQUF1QyxzREFBc0QsNkNBQTZDLDJDQUEyQyxxRUFBcUUsaUJBQWlCLGlCQUFpQixnQkFBZ0IsZ0NBQWdDLElBQUksVUFBVSxtQkFBbUIscUZBQXFGLDBDQUEwQyxtRUFBbUUsV0FBVyxNQUFNLFdBQVcsaURBQWlELFNBQVMsdUNBQXVDLHdDQUF3QyxXQUFXLE1BQU0sV0FBVyxrQ0FBa0MsVUFBVSxtQkFBbUIsd0VBQXdFLGtDQUFrQyxnQ0FBZ0MscUNBQXFDLHNFQUFzRSxtQ0FBbUMsWUFBWSxpQ0FBaUMsV0FBVyxNQUFNLDhCQUE4QixxQkFBcUIsU0FBUywyQ0FBMkMsbUVBQW1FLFdBQVcsTUFBTSxXQUFXLGlEQUFpRCxVQUFVLHVCQUF1Qiw2Q0FBNkMsbUNBQW1DLG1DQUFtQyxxQ0FBcUMsc0RBQXNELG1DQUFtQywwREFBMEQsbUJBQW1CLGlGQUFpRiw2QkFBNkIsd0JBQXdCLG1CQUFtQixzQkFBc0IsNENBQTRDLGdDQUFnQywwQ0FBMEMsa0NBQWtDLHFCQUFxQixtQkFBbUIsc0JBQXNCLDRDQUE0QyxnRkFBZ0YsK0NBQStDLGdDQUFnQywwQ0FBMEMsaUVBQWlFLHNFQUFzRSw2QkFBNkIsWUFBWSxrQ0FBa0Msc0JBQXNCLHVEQUF1RCxjQUFjLHVDQUF1QyxtREFBbUQsbUJBQW1CLHNCQUFzQiw0Q0FBNEMscUJBQXFCLG1DQUFtQywrQkFBK0IsZ0NBQWdDLDJMQUEyTCwyQ0FBMkMsdURBQXVELHdDQUF3Qyw4Q0FBOEMsRUFBRSxnREFBZ0Qsc0NBQXNDLFVBQVUsbUJBQW1CLHNCQUFzQiw0Q0FBNEMsaUNBQWlDLHFDQUFxQyxVQUFVLG1CQUFtQiw0REFBNEQsNENBQTRDLDJDQUEyQyx1Q0FBdUMsSUFBSSxvSEFBb0gsMEhBQTBILElBQUksaUhBQWlILG1CQUFtQixnQkFBZ0IsOFJBQThSLFNBQVMsNElBQTRJLFlBQVksRUFBRSw0REFBNEQsWUFBWSxFQUFFLG9FQUFvRSx3SUFBd0ksMkVBQTJFLCtDQUErQyxZQUFZLHFDQUFxQyxxQ0FBcUMsOEZBQThGLDBDQUEwQywwSUFBMEksOENBQThDLFlBQVksb0NBQW9DLHFDQUFxQywrSUFBK0ksa0NBQWtDLG9HQUFvRywyQ0FBMkMsNEZBQTRGLHNDQUFzQyxnREFBZ0QscUNBQXFDLDJJQUEySSxrQ0FBa0MsT0FBTyw2U0FBNlMsc0RBQXNELCtDQUErQywrRkFBK0YsRUFBRSwyQ0FBMkMsZ0RBQWdELGlFQUFpRSxxQkFBcUIsR0FBRyx5Q0FBeUMsU0FBUyxnQ0FBZ0MsR0FBRyxRQUFRLDZIQUE2SCxrQkFBa0IsbUhBQW1ILGVBQWUsdURBQXVELGlCQUFpQixrQkFBa0IsWUFBWSxPQUFPLDBCQUEwQixxRkFBcUYsK0JBQStCLCtDQUErQyx3Q0FBd0MsaUJBQWlCLHdCQUF3QiwyQkFBMkIsZ0VBQWdFLDJDQUEyQyw0QkFBNEIsb0NBQW9DLCtIQUErSCwrQkFBK0IsMEpBQTBKLCtCQUErQixjQUFjLGlDQUFpQyw4QkFBOEIsa0NBQWtDLG9CQUFvQiwrSEFBK0gsaUJBQWlCLDJDQUEyQyx1Q0FBdUMsNEZBQTRGLG1CQUFtQixhQUFhLHdCQUF3QixtSUFBbUksd0ZBQXdGLHVDQUF1QyxrQkFBa0IsaUJBQWlCLFVBQVUsNkNBQTZDLEdBQUcsS0FBSyw2REFBNkQsbUJBQW1CLGFBQWEsd0JBQXdCLG1JQUFtSSx3RkFBd0YsMkNBQTJDLGtCQUFrQixpQkFBaUIsVUFBVSxpRkFBaUYsR0FBRyxLQUFLLDZEQUE2RCxtQkFBbUIsYUFBYSx3QkFBd0IsbUlBQW1JLHdGQUF3RiwrQ0FBK0Msa0JBQWtCLGlCQUFpQixVQUFVLHFIQUFxSCxHQUFHLEtBQUssaUVBQWlFLG1CQUFtQixhQUFhLHdCQUF3QixtSUFBbUksd0ZBQXdGLG1EQUFtRCxrQkFBa0IsaUJBQWlCLGlCQUFpQiwySkFBMkosR0FBRyxLQUFLLGtFQUFrRSxtQkFBbUIsYUFBYSx3QkFBd0IsbUlBQW1JLHNJQUFzSSxtREFBbUQsa0JBQWtCLGlCQUFpQixVQUFVLDZKQUE2SixHQUFHLEtBQUssa0VBQWtFLG1CQUFtQixhQUFhLHdCQUF3QixtSUFBbUksNEZBQTRGLHlDQUF5QyxrQkFBa0IsaUJBQWlCLFVBQVUscUVBQXFFLEdBQUcsS0FBSywrREFBK0QsbUJBQW1CLGFBQWEsd0JBQXdCLG1JQUFtSSwwRkFBMEYscUNBQXFDLGtCQUFrQixpQkFBaUIsVUFBVSw0QkFBNEIsR0FBRyxLQUFLLDhEQUE4RCxtQkFBbUIsYUFBYSx3QkFBd0IsbUlBQW1JLG9MQUFvTCx5REFBeUQsa0JBQWtCLGlCQUFpQixpQkFBaUIsb05BQW9OLEdBQUcsS0FBSyx1RUFBdUUsbUJBQW1CLGFBQWEsd0JBQXdCLG1JQUFtSSx3RkFBd0YsK0NBQStDLGtCQUFrQixpQkFBaUIsVUFBVSxxSEFBcUgsR0FBRyxLQUFLLG1FQUFtRSxtQkFBbUIsYUFBYSx3QkFBd0IsbUlBQW1JLDRDQUE0Qyx1Q0FBdUMsa0JBQWtCLGlCQUFpQixVQUFVLDZDQUE2QyxHQUFHLEtBQUssOERBQThELG1CQUFtQixhQUFhLHdCQUF3QixtSUFBbUksb09BQW9PLCtEQUErRCxrQkFBa0IsaUJBQWlCLHlCQUF5QixzUkFBc1IsR0FBRyxLQUFLLDZFQUE2RSxtQkFBbUIsYUFBYSx3QkFBd0IsbUlBQW1JLDRGQUE0RixxQ0FBcUMsa0JBQWtCLGlCQUFpQixVQUFVLDZCQUE2QixHQUFHLEtBQUssNkRBQTZELG1CQUFtQixhQUFhLHdCQUF3QixtSUFBbUksd0ZBQXdGLHlDQUF5QyxrQkFBa0IsaUJBQWlCLFVBQVUsK0RBQStELEdBQUcsS0FBSyw2REFBNkQsbUJBQW1CLGFBQWEsd0JBQXdCLG1JQUFtSSx3SUFBd0kseUNBQXlDLGtCQUFrQixpQkFBaUIsZ0JBQWdCLGtFQUFrRSxHQUFHLEtBQUssaUVBQWlFLG1CQUFtQixhQUFhLHdCQUF3QixtSUFBbUksMEZBQTBGLHlDQUF5QyxrQkFBa0IsaUJBQWlCLFVBQVUsa0VBQWtFLEdBQUcsS0FBSyw4REFBOEQsbUJBQW1CLGFBQWEsd0JBQXdCLG1JQUFtSSwwRkFBMEYsdUNBQXVDLGtCQUFrQixpQkFBaUIsVUFBVSwrQ0FBK0MsR0FBRyxLQUFLLDhEQUE4RCxtQkFBbUIsYUFBYSx3QkFBd0IsbUlBQW1JLDRGQUE0Rix1Q0FBdUMsa0JBQWtCLGlCQUFpQixVQUFVLGlEQUFpRCxHQUFHLEtBQUssNkRBQTZELG1CQUFtQixhQUFhLHdCQUF3QixtSUFBbUksNEZBQTRGLDJDQUEyQyxrQkFBa0IsaUJBQWlCLFVBQVUseUZBQXlGLEdBQUcsS0FBSywrREFBK0QsbUJBQW1CLGFBQWEsd0JBQXdCLHVGQUF1RixPQUFPLGNBQWMsZ0JBQWdCLGVBQWUsZ0JBQWdCLEtBQUssZ0JBQWdCLEtBQUssZ0JBQWdCLEtBQUssZ0JBQWdCLEtBQUssZ0JBQWdCLGVBQWUsZ0JBQWdCLG1CQUFtQixnQkFBZ0IsY0FBYyxnQkFBZ0IsU0FBUyxnQkFBZ0IsMkJBQTJCLGdCQUFnQixjQUFjLGtCQUFrQixxQ0FBcUMsNkNBQTZDLGdDQUFnQyx3Q0FBd0MsK0JBQStCLDZDQUE2QyxnQ0FBZ0Msd0NBQXdDLHFCQUFxQiw2Q0FBNkMsc0JBQXNCLHdDQUF3QyxxQkFBcUIsNkNBQTZDLHNCQUFzQix3Q0FBd0MscUJBQXFCLDZDQUE2QyxzQkFBc0Isd0NBQXdDLHFCQUFxQiw2Q0FBNkMsc0JBQXNCLHdDQUF3QywrQkFBK0IsOENBQThDLGdDQUFnQyx5Q0FBeUMsbUNBQW1DLDhDQUE4QyxvQ0FBb0MseUNBQXlDLDhCQUE4Qiw4Q0FBOEMsK0JBQStCLHlDQUF5Qyx5QkFBeUIsOENBQThDLDBCQUEwQix5Q0FBeUMsMkNBQTJDLDhDQUE4Qyw0Q0FBNEMseUNBQXlDLDhCQUE4QixrREFBa0QsMENBQTBDLEtBQUsscUJBQXFCLG1CQUFtQixhQUFhLHdCQUF3QiwwSEFBMEgsc0JBQXNCLEdBQUcsS0FBSywyQkFBMkIsbUJBQW1CLGFBQWEsd0JBQXdCLHVGQUF1RixPQUFPLFNBQVMsZ0JBQWdCLFVBQVUsZ0JBQWdCLGtCQUFrQixnQkFBZ0IsWUFBWSxnQkFBZ0IsbUJBQW1CLGdCQUFnQixpQkFBaUIsZ0JBQWdCLGFBQWEsZ0JBQWdCLFVBQVUsZ0JBQWdCLFlBQVksZ0JBQWdCLFlBQVksZ0JBQWdCLGNBQWMsZ0JBQWdCLGNBQWMsZ0JBQWdCLGNBQWMsZ0JBQWdCLFNBQVMsa0JBQWtCLGdDQUFnQyw2Q0FBNkMsMkJBQTJCLHdDQUF3QywwQkFBMEIsNkNBQTZDLDJCQUEyQix3Q0FBd0Msa0NBQWtDLDhDQUE4QyxtQ0FBbUMseUNBQXlDLDRCQUE0Qiw4Q0FBOEMsNkJBQTZCLHlDQUF5QyxtQ0FBbUMsOENBQThDLG9DQUFvQyx5Q0FBeUMsaUNBQWlDLDhDQUE4QyxrQ0FBa0MseUNBQXlDLDZCQUE2Qiw4Q0FBOEMsOEJBQThCLHlDQUF5QywwQkFBMEIsK0NBQStDLDJCQUEyQiwwQ0FBMEMsNEJBQTRCLCtDQUErQyw2QkFBNkIsMENBQTBDLDRCQUE0QiwrQ0FBK0MsNkJBQTZCLDBDQUEwQyw4QkFBOEIsK0NBQStDLCtCQUErQiwwQ0FBMEMsOEJBQThCLCtDQUErQywrQkFBK0IsMENBQTBDLDhCQUE4Qiw4Q0FBOEMsK0JBQStCLHlDQUF5Qyx5QkFBeUIsOENBQThDLDBCQUEwQix5Q0FBeUMsMENBQTBDLEtBQUsscUJBQXFCLG1CQUFtQixhQUFhLHdCQUF3QiwwSEFBMEgsc0JBQXNCLEdBQUcsS0FBSywyQkFBMkIsbUJBQW1CLGFBQWEsd0JBQXdCLHVGQUF1RixPQUFPLFNBQVMsa0JBQWtCLGdDQUFnQywrQ0FBK0MsMkJBQTJCLDBDQUEwQywwQ0FBMEMsS0FBSyxvQkFBb0IsbUJBQW1CLGFBQWEsd0JBQXdCLGlJQUFpSSwyQkFBMkIsNkJBQTZCLHNCQUFzQixHQUFHLEtBQUssMEJBQTBCLG1CQUFtQixhQUFhLHdCQUF3Qix1RkFBdUYsT0FBTyxHQUFHLGdCQUFnQixJQUFJLGdCQUFnQiw2QkFBNkIsa0JBQWtCLDBCQUEwQiw2Q0FBNkMscUJBQXFCLHdDQUF3QyxvQkFBb0IsNkNBQTZDLHFCQUFxQix3Q0FBd0MsNkNBQTZDLDZDQUE2Qyw4Q0FBOEMsd0NBQXdDLDBDQUEwQyxLQUFLLG9CQUFvQixtQkFBbUIsYUFBYSx3QkFBd0IsMkhBQTJILHlCQUF5Qiw4QkFBOEIseUJBQXlCLHVEQUF1RCx5QkFBeUIsNkJBQTZCLHNCQUFzQixHQUFHLEtBQUssK0JBQStCLG1CQUFtQixhQUFhLHdCQUF3Qix1RkFBdUYsT0FBTyxjQUFjLGdCQUFnQixtQkFBbUIsZ0JBQWdCLGNBQWMsa0JBQWtCLHFDQUFxQyw4Q0FBOEMsZ0NBQWdDLHlDQUF5QyxtQ0FBbUMsOENBQThDLG9DQUFvQyx5Q0FBeUMsOEJBQThCLDhDQUE4QywrQkFBK0IseUNBQXlDLDBDQUEwQyxLQUFLLG9CQUFvQixtQkFBbUIsYUFBYSx3QkFBd0IsMEhBQTBILHNCQUFzQixHQUFHLEtBQUssMkJBQTJCLFlBQVksdUNBQXVDLDRCQUE0QixvQ0FBb0MsNENBQTRDLDRDQUE0QyxpTEFBaUwsZ0ZBQWdGLDBCQUEwQiw2QkFBNkIscUJBQXFCLGlDQUFpQyw0QkFBNEIsV0FBVyxNQUFNLFdBQVcseUNBQXlDLG9FQUFvRSxxQkFBcUIsOERBQThELGVBQWUsZ0RBQWdELHVCQUF1QixzREFBc0QsV0FBVyxnQ0FBZ0MsMkNBQTJDLDZDQUE2QyxpQ0FBaUMsa0NBQWtDLDRDQUE0QyxzQ0FBc0MsdUhBQXVILHVCQUF1QiwyREFBMkQsVUFBVSx3QkFBd0IsNkJBQTZCLCtEQUErRCwrQkFBK0IsZ0NBQWdDLFNBQVMsK0NBQStDLHVDQUF1QyxhQUFhLDRDQUE0QywyQ0FBMkMsSUFBSSw2QkFBNkIsS0FBSyxZQUFZLElBQUkscUJBQXFCLHFEQUFxRCxpQ0FBaUMsdUhBQXVILGlDQUFpQyx5REFBeUQsd0NBQXdDLG1EQUFtRCwyQkFBMkIsNkZBQTZGLFVBQVUsd0JBQXdCLDZCQUE2QiwrREFBK0QsK0JBQStCLGdDQUFnQyxTQUFTLCtDQUErQyx1Q0FBdUMsYUFBYSxzR0FBc0csbURBQW1ELElBQUksdUNBQXVDLEtBQUssWUFBWSxJQUFJLHVCQUF1Qix1REFBdUQsaUNBQWlDLHVIQUF1SCxpQ0FBaUMseURBQXlELDhDQUE4QyxpS0FBaUssMENBQTBDLGtGQUFrRixrQkFBa0IsZUFBZSxvQ0FBb0MsaUNBQWlDLGtCQUFrQixzQ0FBc0MscUJBQXFCLG1FQUFtRSwrRUFBK0UsZ05BQWdOLHNDQUFzQyxnREFBZ0Qsa0VBQWtFLGlDQUFpQyxTQUFTLG9FQUFvRSxTQUFTLDRDQUE0QyxzRUFBc0UsK0NBQStDLHFCQUFxQixpQ0FBaUMsb0RBQW9ELFNBQVMsMkJBQTJCLHNCQUFzQixxRkFBcUYsZ0JBQWdCLGlDQUFpQyxxREFBcUQseUJBQXlCLDBCQUEwQixTQUFTLGdDQUFnQyxnQkFBZ0IsV0FBVyxNQUFNLFdBQVcsK0dBQStHLGlCQUFpQixPQUFPLHdUQUF3VCwyQ0FBMkMsK0NBQStDLCtGQUErRiw4QkFBOEIscUNBQXFDLGlDQUFpQyxnRkFBZ0YsaUNBQWlDLGdGQUFnRiwwSEFBMEgsa0JBQWtCLG1DQUFtQyxvQkFBb0IsMkNBQTJDLEVBQUUsZUFBZSw2Q0FBNkMsV0FBVyx1QkFBdUIsV0FBVyxLQUFLLFdBQVcsd0tBQXdLLFNBQVMsdUJBQXVCLHVDQUF1QyxtQkFBbUIsK0dBQStHLFlBQVksc0pBQXNKLG1CQUFtQixZQUFZLFdBQVcsS0FBSyxXQUFXLG9CQUFvQixzQkFBc0IsU0FBUyxpQkFBaUIsc0RBQXNELFlBQVksV0FBVyx1QkFBdUIsV0FBVywyQkFBMkIsWUFBWSxXQUFXLEtBQUssbUJBQW1CLFdBQVcsMkJBQTJCLFlBQVksV0FBVywyQkFBMkIsU0FBUyxtQkFBbUIsWUFBWSxXQUFXLHVCQUF1QixXQUFXLEtBQUssV0FBVywyQkFBMkIsV0FBVywyQkFBMkIsc0JBQXNCLFNBQVMsbUJBQW1CLGVBQWUsb0JBQW9CLFlBQVksV0FBVyw2QkFBNkIsWUFBWSxXQUFXLDZCQUE2QixTQUFTLGlCQUFpQix1Q0FBdUMsWUFBWSxhQUFhLGdDQUFnQyxhQUFhLG9DQUFvQyxTQUFTLHFCQUFxQixnREFBZ0QsbUJBQW1CLFVBQVUseUNBQXlDLFlBQVksV0FBVyxvQ0FBb0MsU0FBUyxtQkFBbUIsbUJBQW1CLDZCQUE2QixrREFBa0QsOEVBQThFLGlCQUFpQix1QkFBdUIsV0FBVyxvQ0FBb0MsV0FBVyxvRkFBb0YsU0FBUyxpQkFBaUIsOEJBQThCLFdBQVcsT0FBTyxrQkFBa0IsZ0VBQWdFLFNBQVMsbUJBQW1CLDJCQUEyQiw4RkFBOEYsZUFBZSxzQ0FBc0MsdUJBQXVCLHlCQUF5QixtQkFBbUIsOEJBQThCLGlCQUFpQixXQUFXLEtBQUssd0JBQXdCLFdBQVcsaUNBQWlDLFVBQVUsU0FBUyxvQ0FBb0MsZ0JBQWdCLFdBQVcsTUFBTSxzREFBc0QsdURBQXVELFlBQVksaUVBQWlFLGlDQUFpQyx5Q0FBeUMsaUNBQWlDLG1LQUFtSyxpQ0FBaUMscUpBQXFKLHVDQUF1QyxnQkFBZ0IsV0FBVyx3QkFBd0IsV0FBVyxNQUFNLHVCQUF1Qiw4QkFBOEIsOEZBQThGLHNRQUFzUSxnRkFBZ0YsdUJBQXVCLGdCQUFnQixFQUFFLFFBQVEsY0FBYyxrc0JBQWtzQixFQUFFLG9CQUFvQixNQUFNLGlFQUFpRSwwQkFBMEIsNEJBQTRCLElBQUksTUFBTSw4QkFBOEIseUJBQXlCLHdGQUF3RixPQUFPLDhCQUE4QixnQ0FBZ0Msb0pBQW9KLE9BQU8sa0JBQWtCLDBCQUEwQixxQ0FBcUMsd0JBQXdCLDREQUE0RCwrREFBK0QsdUJBQXVCLDhDQUE4Qyw4Q0FBOEMsT0FBTyxrQkFBa0IsMEJBQTBCLHdFQUF3RSw0QkFBNEIsZ0NBQWdDLDBFQUEwRSxPQUFPLGtCQUFrQiwyQkFBMkIsK0hBQStILHNCQUFzQiwrSEFBK0gsMkJBQTJCLGlEQUFpRCxxYUFBcWEsdUJBQXVCLHlCQUF5Qiw2TUFBNk0sMEJBQTBCLHNKQUFzSix5YkFBeWIsaUNBQWlDLGdDQUFnQyw4SUFBOEkseUJBQXlCLDBGQUEwRixvTkFBb04seUJBQXlCLHdGQUF3RixzTkFBc04sc0JBQXNCLDRRQUE0USw4V0FBOFcsK0JBQStCLGtDQUFrQywySkFBMkosRUFBRSxtRUFBbUUsY0FBYyxrQkFBa0IsbUlBQW1JLGlCQUFpQixxQ0FBcUMsUUFBUSwwR0FBMEcsNERBQTRELGdSQUFnUix5QkFBeUIseUJBQXlCLGlCQUFpQixFQUFFLEVBQUUsMEJBQTBCLFdBQVcsd0JBQXdCLFdBQVcsTUFBTSxzRUFBc0UsbVNBQW1TLFNBQVMsR0FBRyxLQUFLLG1CQUFtQiwyQ0FBMkMsaUVBQWlFLG1CQUFtQixhQUFhLHdCQUF3QixnR0FBZ0csS0FBSyxxQkFBcUIseUJBQXlCLE1BQU0sa0VBQWtFLDZCQUE2Qix1Q0FBdUMsbUJBQW1CLHlCQUF5Qiw4QkFBOEIsV0FBVyxFQUFFLGlCQUFpQixJQUFJLFFBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxzREFBc0Qsd0NBQXdDLHlCQUF5QixzQ0FBc0MseUpBQXlKLDhKQUE4Siw4QkFBOEIsV0FBVyxvRUFBb0UsWUFBWSxrQkFBa0IsU0FBUyx1QkFBdUIsZ0JBQWdCLEVBQUUscUJBQXFCLGdCQUFnQixnQ0FBZ0MsYUFBYSwrQkFBK0IsZUFBZSxvQ0FBb0MsNEJBQTRCLDZCQUE2QixpQkFBaUIscUJBQXFCLGdCQUFnQixnQ0FBZ0MsYUFBYSwrQkFBK0IsZUFBZSxvQ0FBb0MsNEJBQTRCLDZCQUE2QixnQkFBZ0Isd0NBQXdDLFFBQVEsY0FBYyw2U0FBNlMsR0FBRyxpQkFBaUIsbUNBQW1DLFNBQVMsTUFBTSxVQUFVLFdBQVcsb0JBQW9CLHdIQUF3SCxlQUFlLG1CQUFtQixJQUFJLG1CQUFtQixjQUFjLDBDQUEwQyxtSUFBbUksaUJBQWlCLDhDQUE4QywyRkFBMkYseUNBQXlDLDBFQUEwRSxpRUFBaUUsK0JBQStCLGtFQUFrRSxvQ0FBb0MsU0FBUywrQ0FBK0MsU0FBUyx5Q0FBeUMsdUVBQXVFLEdBQUcsU0FBUyxjQUFjLHNmQUFzZixFQUFFLGdCQUFnQixjQUFjLGtCQUFrQixzSUFBc0ksOEVBQThFLEdBQUcsYUFBYSx1Q0FBdUMseUJBQXlCLG1CQUFtQixPQUFPLDBFQUEwRSxlQUFlLDJCQUEyQixlQUFlLG1CQUFtQixJQUFJLHlGQUF5RixtQkFBbUIsV0FBVyw4QkFBOEIsU0FBUywwQkFBMEIsa0JBQWtCLFlBQVksSUFBSSxpRUFBaUUsa0NBQWtDLHlCQUF5Qix1QkFBdUIsUUFBUSw2QkFBNkIsSUFBSSwyQkFBMkIsZUFBZSxLQUFLLDJCQUEyQiwyQ0FBMkMsaUJBQWlCLGVBQWUsU0FBUyxVQUFVLEdBQUcsbUVBQW1FLEtBQUsscUNBQXFDLE1BQU0sZ0JBQWdCLFNBQVMsMkJBQTJCLE1BQU0seUJBQXlCLFFBQVEsR0FBRywyRUFBMkUsYUFBYSw0Q0FBNEMsd0JBQXdCLEdBQUcsMEJBQTBCLEVBQUUsRUFBRSxvQkFBb0IscUJBQXFCLEtBQUssUUFBUSxZQUFZLG9HQUFvRyxJQUFJLGtCQUFrQixXQUFXLElBQUksVUFBVSxnQkFBZ0IsZ0JBQWdCLDRHQUE0RyxtQkFBbUIsaUZBQWlGLFFBQVEsZUFBZSwwQkFBMEIseUJBQXlCLHNCQUFzQixXQUFXLEVBQUUsd0VBQXdFLFNBQVMsU0FBUyxxQkFBcUIsMEJBQTBCLHlCQUF5QixvT0FBb08scUJBQXFCLEVBQUUsZ0dBQWdHLDBHQUEwRyxVQUFVLEtBQUssVUFBVSxFQUFFLGdHQUFnRyxVQUFVLEtBQUssVUFBVSxFQUFFLGdHQUFnRyxVQUFVLFNBQVMsbUJBQW1CLFFBQVEsR0FBRywyQkFBMkIsMEhBQTBILGFBQWEsU0FBUyx5QkFBeUIsUUFBUSxHQUFHLHNCQUFzQixXQUFXLEVBQUUsdUJBQXVCLGNBQWMsMEVBQTBFLFNBQVMsU0FBUyxhQUFhLGlCQUFpQixlQUFlLGlCQUFpQixtQkFBbUIsNkJBQTZCLEdBQUcsd0NBQXdDLGdEQUFnRCxjQUFjLGNBQWMsb0JBQW9CLDhCQUE4Qix5QkFBeUIsU0FBUyxhQUFhLGtCQUFrQix1QkFBdUIsNEJBQTRCLGFBQWEsTUFBTSw0SUFBNEksU0FBUyxPQUFPLGNBQWMsY0FBYyx1QkFBdUIscU5BQXFOLGVBQWUsWUFBWSxHQUFHLHdCQUF3QixhQUFhLFNBQVMsNkJBQTZCLHlGQUF5RixpQkFBaUIsc0RBQXNELFFBQVEsR0FBRyxtRkFBbUYsU0FBUyxhQUFhLFNBQVMsdUNBQXVDLHlDQUF5QyxHQUFHLGdHQUFnRyxhQUFhLFNBQVMsTUFBTSxtQkFBbUIsOENBQThDLGlCQUFpQiw0QkFBNEIscUJBQXFCLGlHQUFpRyxpQkFBaUIscUdBQXFHLGlCQUFpQixrRUFBa0UsaUZBQWlGLHFCQUFxQixvQkFBb0IsK0VBQStFLGVBQWUsd0dBQXdHLG1CQUFtQixxSEFBcUgscUJBQXFCLHNCQUFzQixJQUFJLHdDQUF3QyxTQUFTLCtCQUErQiw4REFBOEQsNEJBQTRCLElBQUksS0FBSyx1Q0FBdUMseUJBQXlCLFFBQVEsUUFBUSxXQUFXLE1BQU0sbUNBQW1DLHFFQUFxRSx3Q0FBd0Msd0JBQXdCLDRCQUE0QixrQ0FBa0MsU0FBUyxXQUFXLEtBQUssWUFBWSxjQUFjLGdCQUFnQixJQUFJLGdDQUFnQyx3Q0FBd0MsU0FBUyxlQUFlLGdCQUFnQix1QkFBdUIsdUJBQXVCLEtBQUssSUFBSSxFQUFFLFlBQVksa0dBQWtHLGlGQUFpRixtQkFBbUIscUNBQXFDLElBQUksRUFBRSxzQkFBc0IsWUFBWSxLQUFLLEtBQUssWUFBWSxLQUFLLGlFQUFpRSwrQkFBK0IsbUJBQW1CLFdBQVcsaUJBQWlCLGlCQUFpQixzQkFBc0IsaUJBQWlCLGVBQWUsa0JBQWtCLHFCQUFxQixJQUFJLEtBQUssY0FBYyxnR0FBZ0csZ0NBQWdDLFdBQVcseUVBQXlFLFNBQVMsaUJBQWlCLHFCQUFxQixjQUFjLG1CQUFtQiwrR0FBK0csWUFBWSxvTUFBb00sb0NBQW9DLGdCQUFnQixXQUFXLE1BQU0sc0RBQXNELHVEQUF1RCxZQUFZLGlFQUFpRSxpQ0FBaUMseUNBQXlDLGlDQUFpQywyTkFBMk4saUNBQWlDLDBNQUEwTSx1Q0FBdUMsd0JBQXdCLFdBQVcsTUFBTSwyQkFBMkIsV0FBVyxvQkFBb0Isb0hBQW9ILFdBQVcsTUFBTSxXQUFXLGlCQUFpQiw2QkFBNkIsdUdBQXVHLDZIQUE2SCxZQUFZLFdBQVcsNEhBQTRILHNEQUFzRCxzQkFBc0IsV0FBVywyREFBMkQsZ0RBQWdELGdGQUFnRixxQkFBcUIsZ0JBQWdCLEVBQUUsUUFBUSxjQUFjLDhZQUE4WSxFQUFFLGdCQUFnQixjQUFjLGtCQUFrQixrSUFBa0ksd0RBQXdELCtDQUErQywrSEFBK0gsc0NBQXNDLGlCQUFpQixvQ0FBb0MsNENBQTRDLDBEQUEwRCxzR0FBc0csR0FBRyxhQUFhLHVDQUF1QyxFQUFFLDZDQUE2QywrQkFBK0IsNkJBQTZCLG9FQUFvRSxtQkFBbUIsK0dBQStHLFlBQVksc0pBQXNKLGlCQUFpQiw4REFBOEQsZUFBZSwyQkFBMkIsYUFBYSx1QkFBdUIsY0FBYyx1QkFBdUIsYUFBYSx1QkFBdUIsY0FBYyxFQUFFLG9DQUFvQyxnQkFBZ0IsV0FBVyxNQUFNLHNEQUFzRCx1REFBdUQsWUFBWSxpRUFBaUUsaUNBQWlDLHlDQUF5QyxpQ0FBaUMsbUtBQW1LLGlDQUFpQyxxSkFBcUosdUNBQXVDLHdCQUF3QixXQUFXLE1BQU0sMkJBQTJCLFdBQVcsb0JBQW9CLHlGQUF5RixXQUFXLE1BQU0sV0FBVyx3Q0FBd0MsV0FBVyxLQUFLLFdBQVcsU0FBUyxhQUFhLGFBQWEsd0hBQXdILDJDQUEyQywwTkFBME4scUJBQXFCLDBIQUEwSCx3SEFBd0gsMkNBQTJDLFdBQVcsTUFBTSxXQUFXLGlCQUFpQiw2QkFBNkIsWUFBWSxXQUFXLEtBQUssV0FBVyx1RUFBdUUsc0JBQXNCLFdBQVcsMkRBQTJELGdEQUFnRCxnRkFBZ0YsOEJBQThCLGdCQUFnQixFQUFFLFFBQVEsY0FBYyw2bEJBQTZsQixFQUFFLGdCQUFnQixjQUFjLGtCQUFrQixtSUFBbUksaUJBQWlCLG9DQUFvQyxzREFBc0QsMERBQTBELDBIQUEwSCx5Q0FBeUMsOEVBQThFLCtCQUErQiwyRUFBMkUsR0FBRyxhQUFhLDhDQUE4QyxFQUFFLHdDQUF3QyxtQkFBbUIsdUJBQXVCLGtCQUFrQiw2R0FBNkcsbUJBQW1CLDRDQUE0QywrQkFBK0IsUUFBUSxFQUFFLDBEQUEwRCxtQkFBbUIsMkRBQTJELGVBQWUscUNBQXFDLElBQUksMkNBQTJDLFNBQVMseUZBQXlGLGdCQUFnQixxQkFBcUIsc0RBQXNELFFBQVEsRUFBRSxTQUFTLHFCQUFxQixhQUFhLHdHQUF3RyxLQUFLLCtDQUErQyx5QkFBeUIsc0JBQXNCLDhCQUE4QixnQkFBZ0IscUJBQXFCLHlFQUF5RSxRQUFRLEVBQUUsU0FBUyxxQkFBcUIsYUFBYSxzR0FBc0csb0RBQW9ELGdCQUFnQix3Q0FBd0MsZ0hBQWdILGNBQWMsWUFBWSxXQUFXLEtBQUssK0JBQStCLDRFQUE0RSxrQkFBa0IsZ0JBQWdCLFFBQVEsV0FBVyxpQkFBaUIsT0FBTyxNQUFNLGVBQWUsV0FBVyxZQUFZLE1BQU0seUJBQXlCLGVBQWUsa0JBQWtCLHFCQUFxQixJQUFJLEtBQUssZUFBZSwwRUFBMEUsc0JBQXNCLFFBQVEsV0FBVyxZQUFZLGNBQWMsZUFBZSxnQ0FBZ0MsT0FBTyx5QkFBeUIscUJBQXFCLDZCQUE2QixxQ0FBcUMsVUFBVSxpQkFBaUIsbUxBQW1MLG1CQUFtQiw2TEFBNkwsc0NBQXNDLFFBQVEsRUFBRSx3QkFBd0IsNkpBQTZKLFNBQVMsS0FBSyxtQkFBbUIsVUFBVSxxQ0FBcUMseUJBQXlCLGlDQUFpQyxnRkFBZ0YsZ0NBQWdDLDJDQUEyQyxnRUFBZ0UsUUFBUSx5QkFBeUIsOEJBQThCLElBQUkseUNBQXlDLDhGQUE4RiwyQkFBMkIsNEhBQTRILG1CQUFtQiwrR0FBK0csWUFBWSxzSkFBc0osaUJBQWlCLHFEQUFxRCxvQ0FBb0MsZ0JBQWdCLFdBQVcsTUFBTSxzREFBc0QsdURBQXVELFlBQVksaUVBQWlFLGlDQUFpQyx5Q0FBeUMsaUNBQWlDLG1LQUFtSyxpQ0FBaUMscUpBQXFKLHVDQUF1QyxxSkFBcUosV0FBVyxNQUFNLFdBQVcsMkJBQTJCLDRDQUE0QyxXQUFXLG9IQUFvSCx1RkFBdUYsRUFBRSw0Q0FBNEMsNEJBQTRCLEtBQUssWUFBWSwyQkFBMkIsS0FBSyxpQkFBaUIsZ0NBQWdDLG9CQUFvQixNQUFNLGlDQUFpQyxTQUFTLCtCQUErQixzSEFBc0gsZ0JBQWdCLG9FQUFvRSxvRUFBb0UsWUFBWSxJQUFJLHVEQUF1RCx3REFBd0Qsc0JBQXNCLDRCQUE0QixtREFBbUQsV0FBVyxnQkFBZ0IsVUFBVSwwQ0FBMEMsMEZBQTBGLHVCQUF1QixxUEFBcVAseUJBQXlCLDhCQUE4QixLQUFLLCtEQUErRCxxQkFBcUIsaUhBQWlILHNDQUFzQyw0Q0FBNEMsaUdBQWlHLGlEQUFpRCxJQUFJLDBGQUEwRixnREFBZ0QsY0FBYyxLQUFLLDBGQUEwRix5REFBeUQsaWhCQUFpaEIsYUFBYSxnQkFBZ0IsVUFBVSwwQ0FBMEMsMEZBQTBGLEtBQUssaUZBQWlGLHlEQUF5RCxpREFBaUQsb2ZBQW9mLHNEQUFzRCxpQkFBaUIsK0NBQStDLGtMQUFrTCxxQkFBcUIsZ0JBQWdCLEVBQUUsZUFBZSxzTkFBc04sTUFBTSxjQUFjLDRrQkFBNGtCLFlBQVksb0JBQW9CLGFBQWEsd0JBQXdCLHlJQUF5SSxvQ0FBb0Msd0ZBQXdGLDhDQUE4QyxzQ0FBc0MsYUFBYSxJQUFJLHdCQUF3Qix3Q0FBd0MsR0FBRyx1REFBdUQscUJBQXFCLG1CQUFtQixjQUFjLGtCQUFrQiwySUFBMkksMEZBQTBGLHdDQUF3QywwRUFBMEUsNkRBQTZELHFDQUFxQyx1SkFBdUosc0NBQXNDLGlCQUFpQixxQ0FBcUMsNkZBQTZGLDREQUE0RCwwREFBMEQsMk9BQTJPLDJCQUEyQiw4QkFBOEIsV0FBVyxLQUFLLHdCQUF3QixXQUFXLEtBQUssa0pBQWtKLHdDQUF3QyxVQUFVLFNBQVMsbUJBQW1CLEdBQUcsS0FBSyxpQkFBaUIsbUJBQW1CLFlBQVksOENBQThDLEVBQUUseUNBQXlDLFdBQVcsbURBQW1ELGNBQWMsaURBQWlELFVBQVUsMENBQTBDLGVBQWUsaUNBQWlDLEVBQUUsaUNBQWlDLEVBQUUsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsa0NBQWtDLEVBQUUsc0NBQXNDLEVBQUUsaUNBQWlDLEVBQUUsMkJBQTJCLEVBQUUsNkNBQTZDLFFBQVEsdUNBQXVDLEVBQUUsOENBQThDLEVBQUUsMkNBQTJDLGNBQWMsdUNBQXVDLEVBQUUsOENBQThDLEVBQUUsMkNBQTJDLEtBQUssbUJBQW1CLGlEQUFpRCwrSUFBK0ksS0FBSyw0QkFBNEIsRUFBRSw0QkFBNEIsRUFBRSxxQ0FBcUMsRUFBRSwrQkFBK0IsRUFBRSxzQ0FBc0MsRUFBRSxvQ0FBb0MsRUFBRSxnQ0FBZ0MsRUFBRSw2QkFBNkIsRUFBRSwrQkFBK0IsRUFBRSwrQkFBK0IsRUFBRSxrQ0FBa0MsRUFBRSxrQ0FBa0MsRUFBRSxnQ0FBZ0MsRUFBRSwyQkFBMkIsUUFBUSw4QkFBOEIsUUFBUSxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBRSwrQ0FBK0MsR0FBRyxRQUFRLHNMQUFzTCwySkFBMkosMEJBQTBCLHM4QkFBczhCLGdCQUFnQixvQkFBb0IsMkRBQTJELDJIQUEySCxvREFBb0QsR0FBRyxJQUFJLGlCQUFpQixtQkFBbUIsOEJBQThCLDREQUE0RCw0QkFBNEIsdUJBQXVCLDBCQUEwQixvQkFBb0IsS0FBSyw0QkFBNEIscUJBQXFCLEtBQUsseUJBQXlCLE9BQU8sbUJBQW1CLDRCQUE0QiwyREFBMkQsRUFBRSxnRkFBZ0YsNERBQTRELHdCQUF3QixnQkFBZ0IsdUNBQXVDLHlEQUF5RCxFQUFFLDZCQUE2QiwyRUFBMkUsbUJBQW1CLG9HQUFvRyxtQkFBbUIsME1BQTBNLGtDQUFrQywrWEFBK1gsaUNBQWlDLGlPQUFpTyx3QkFBd0IsdUJBQXVCLGtJQUFrSSxnQ0FBZ0MsME9BQTBPLGlDQUFpQyxxSkFBcUosMkJBQTJCLG1CQUFtQiwwSkFBMEosWUFBWSwyRkFBMkYsZ0RBQWdELDhGQUE4Riw0QkFBNEIsK0lBQStJLHFDQUFxQyxxRUFBcUUsc0JBQXNCLHdFQUF3RSxzQkFBc0IscUpBQXFKLHFDQUFxQywrUUFBK1EsMEJBQTBCLCtFQUErRSxXQUFXLE1BQU0sc0RBQXNELDBCQUEwQixhQUFhLDREQUE0RCxhQUFhLDJEQUEyRCxPQUFPLGlHQUFpRyxvSEFBb0gsNEZBQTRGLFdBQVcsbUNBQW1DLHNCQUFzQiw4QkFBOEIsK0RBQStELFFBQVEsS0FBSyxVQUFVLGNBQWMsaUJBQWlCLGtCQUFrQixXQUFXLGtHQUFrRyxrQkFBa0IsV0FBVyxvR0FBb0csa0JBQWtCLG9DQUFvQyx5QkFBeUIsWUFBWSxXQUFXLEtBQUssaUNBQWlDLE1BQU0seUJBQXlCLGdDQUFnQyxzQ0FBc0Msc0VBQXNFLDhEQUE4RCxVQUFVLDRCQUE0QixrQkFBa0IsRUFBRSxrQkFBa0IsaUNBQWlDLHVDQUF1QyxpQ0FBaUMsNklBQTZJLGlDQUFpQyxtR0FBbUcsaURBQWlELGtDQUFrQyx1QkFBdUIsNERBQTRELGVBQWUsV0FBVyxVQUFVLCtDQUErQyxzQ0FBc0MsdUJBQXVCLEtBQUssVUFBVSwrQ0FBK0MsNkJBQTZCLFlBQVksV0FBVyxLQUFLLFdBQVcsd0VBQXdFLE9BQU8sMkRBQTJELHVEQUF1RCwyTUFBMk0sV0FBVyxNQUFNLG1GQUFtRixpVEFBaVQscU1BQXFNLDJEQUEyRCx5RkFBeUYsa0VBQWtFLG9JQUFvSSw0UEFBNFAsbUJBQW1CLHVFQUF1RSxLQUFLLG1CQUFtQiw4R0FBOEcsdURBQXVELG1DQUFtQyxXQUFXLE1BQU0sV0FBVyx3QkFBd0IsZ0VBQWdFLHlCQUF5QixpRUFBaUUsWUFBWSxJQUFJLEtBQUssNkRBQTZELCtCQUErQixnQkFBZ0IsS0FBSyw2RUFBNkUsc0dBQXNHLDREQUE0RCxZQUFZLEtBQUssSUFBSSxLQUFLLGVBQWUsaUJBQWlCLFdBQVcsd0ZBQXdGLG1DQUFtQyxNQUFNLDRKQUE0SixZQUFZLElBQUksS0FBSyxlQUFlLGlCQUFpQixXQUFXLHdGQUF3RixtQ0FBbUMsT0FBTyxTQUFTLHFDQUFxQyx5Q0FBeUMscUNBQXFDLHlDQUF5Qyw2Q0FBNkMsaURBQWlELGdEQUFnRCxvREFBb0QsdUNBQXVDLFdBQVcsNklBQTZJLGlCQUFpQiw4QkFBOEIsY0FBYyxnQ0FBZ0MscUJBQXFCLGtEQUFrRCxpR0FBaUcscUZBQXFGLGdCQUFnQixXQUFXLE1BQU0sa0NBQWtDLHdDQUF3Qyx3Q0FBd0MsV0FBVyw4R0FBOEcsSUFBSSx5RkFBeUYsc0NBQXNDLGdCQUFnQix5QkFBeUIscUZBQXFGLDZKQUE2Six1QkFBdUIseUZBQXlGLGlEQUFpRCxlQUFlLG9vRUFBb29FLE1BQU0sY0FBYyx3ekJBQXd6QixZQUFZLGdCQUFnQixjQUFjLGtCQUFrQixrSUFBa0ksaXVCQUFpdUIsb0RBQW9ELDRFQUE0RSxtRUFBbUUsS0FBSyxJQUFJLGlCQUFpQiw4QkFBOEIsR0FBRyxzQ0FBc0MsaUJBQWlCLG9DQUFvQyxTQUFTLCtDQUErQyxTQUFTLEdBQUcsU0FBUyxjQUFjLDhNQUE4TSxFQUFFLGdCQUFnQixjQUFjLGtCQUFrQixnR0FBZ0csU0FBUyxjQUFjLDRjQUE0YyxFQUFFLEtBQUssaUhBQWlILGNBQWMsa0JBQWtCLGdHQUFnRyxLQUFLLG9CQUFvQixxQkFBcUIsa0JBQWtCLE9BQU8sd0dBQXdHLGFBQWEsY0FBYyxrQkFBa0IsOENBQThDLHNDQUFzQyx1QkFBdUIseUJBQXlCLFdBQVcsa0VBQWtFLHFDQUFxQywwREFBMEQsdUJBQXVCLHFDQUFxQyx1QkFBdUIsOEJBQThCLEtBQUssMkNBQTJDLHlDQUF5Qyx3REFBd0Qsb0JBQW9CLFFBQVEsdUJBQXVCLEtBQUssK0VBQStFLGlHQUFpRyxRQUFRLHNCQUFzQiw2Q0FBNkMsMkNBQTJDLHdFQUF3RSxrVkFBa1YsNENBQTRDLG1DQUFtQyxvRUFBb0UsMENBQTBDLG1DQUFtQyxvQ0FBb0MsK0JBQStCLDBCQUEwQixvQkFBb0Isc0JBQXNCLEtBQUssc0JBQXNCLGdDQUFnQyxrQkFBa0IsZ0NBQWdDLG9CQUFvQiw2QkFBNkIsb0JBQW9CLFVBQVUsa0NBQWtDLGtCQUFrQiwrQkFBK0IsdUhBQXVILDhCQUE4Qiw4Q0FBOEMsYUFBYSxjQUFjLGtDQUFrQyxrQkFBa0IsWUFBWSxzQkFBc0IsOEJBQThCLFNBQVMsbUNBQW1DLHFDQUFxQyxhQUFhLDBEQUEwRCw0RkFBNEYsMEJBQTBCLGdDQUFnQyx1Q0FBdUMsR0FBRyxHQUFHLG1CQUFtQixtQkFBbUIsb0NBQW9DLEtBQUssSUFBSSxnQkFBZ0IsS0FBSyxnQkFBZ0IsY0FBYyxrQkFBa0IscUJBQXFCLGdEQUFnRCxzQkFBc0Isb0ZBQW9GLCtCQUErQixvRkFBb0YsMENBQTBDLG1CQUFtQixjQUFjLGlCQUFpQixNQUFNLGVBQWUsY0FBYyxFQUFFLGdCQUFnQix1REFBdUQsVUFBVSxxQkFBcUIsb0JBQW9CLFFBQVEsRUFBRSxnQkFBZ0IsMEJBQTBCLHFCQUFxQixxQkFBcUIsaUNBQWlDLDJDQUEyQywyQkFBMkIscUVBQXFFLG1DQUFtQyxJQUFJLDBCQUEwQiw4QkFBOEIsSUFBSSwwQkFBMEIsZUFBZSxLQUFLLG1DQUFtQyxzQkFBc0IsaUNBQWlDLDBCQUEwQiw0SEFBNEgsbVJBQW1SLEtBQUssK0JBQStCLGtCQUFrQixJQUFJLCtCQUErQixnQkFBZ0IsT0FBTyxlQUFlLDZIQUE2SCxlQUFlLHNEQUFzRCxtQkFBbUIseURBQXlELG1CQUFtQixpRkFBaUYsYUFBYSxrQkFBa0IsS0FBSyx3QkFBd0IsaUJBQWlCLFlBQVksV0FBVyx3QkFBd0IsaUJBQWlCLFlBQVksV0FBVyx5QkFBeUIsaUJBQWlCLFlBQVksV0FBVyx1QkFBdUIsaUJBQWlCLFlBQVksV0FBVyx3QkFBd0IsaUJBQWlCLFlBQVksV0FBVyx5QkFBeUIsaUJBQWlCLFlBQVksV0FBVyx5QkFBeUIsaUJBQWlCLFlBQVksV0FBVywwQkFBMEIsaUJBQWlCLFlBQVksV0FBVyx5QkFBeUIsaUJBQWlCLFlBQVksV0FBVywwQkFBMEIsaUJBQWlCLGtEQUFrRCxtQkFBbUIsZ0RBQWdELGlCQUFpQiwrQ0FBK0MsK0RBQStELG1CQUFtQixjQUFjLDRCQUE0QixxQkFBcUIsV0FBVyxFQUFFLDBDQUEwQyxxREFBcUQsU0FBUywyQkFBMkIsdURBQXVELHdCQUF3Qiw0QkFBNEIscUJBQXFCLHlCQUF5Qiw0QkFBNEIscUJBQXFCLHdCQUF3QiwrREFBK0QscUJBQXFCLHlCQUF5QiwrREFBK0QscUJBQXFCLHNCQUFzQixvQ0FBb0MscUJBQXFCLHVCQUF1QixvQ0FBb0MscUJBQXFCLHdCQUF3QixtQkFBbUIsOEtBQThLLGdCQUFnQixvREFBb0QscURBQXFELHNEQUFzRCxzREFBc0Qsc0RBQXNELG9EQUFvRCwwREFBMEQsd0NBQXdDLHlCQUF5QiwyQkFBMkIsd0JBQXdCLHdCQUF3QiwyQkFBMkIsd0JBQXdCLGtDQUFrQyx1QkFBdUIsbURBQW1ELGlCQUFpQixJQUFJLEVBQUUsb0RBQW9ELGVBQWUscWVBQXFlLFNBQVMsc0JBQXNCLG9CQUFvQixzQkFBc0IsaUVBQWlFLG9CQUFvQixnQ0FBZ0MsZUFBZSxZQUFZLFdBQVcsNEJBQTRCLFNBQVMsK0JBQStCLGVBQWUsWUFBWSxXQUFXLDRCQUE0QixTQUFTLCtCQUErQixlQUFlLFlBQVksV0FBVyw0QkFBNEIsU0FBUyw2QkFBNkIsZUFBZSxZQUFZLFdBQVcsMEJBQTBCLFNBQVMsOEJBQThCLGVBQWUsWUFBWSxXQUFXLDJCQUEyQixTQUFTLCtCQUErQixlQUFlLFlBQVksV0FBVyw0QkFBNEIsU0FBUyxnQ0FBZ0MsZUFBZSxZQUFZLFdBQVcsNkJBQTZCLFNBQVMsK0JBQStCLGVBQWUsWUFBWSxXQUFXLDRCQUE0QixTQUFTLGdDQUFnQyxlQUFlLFlBQVksV0FBVyw2QkFBNkIsU0FBUyxrQkFBa0IsVUFBVSxzQkFBc0IseUJBQXlCLEVBQUUseURBQXlELG1DQUFtQyxLQUFLLDREQUE0RCxhQUFhLHdCQUF3Qix5QkFBeUIscUJBQXFCLDBCQUEwQixhQUFhLE1BQU0sb0JBQW9CLHdCQUF3QiwwQ0FBMEMsbUJBQW1CLHdFQUF3RSwwQkFBMEIsb0RBQW9ELDJCQUEyQixvREFBb0QsMEJBQTBCLDRHQUE0RywyQkFBMkIsNEdBQTRHLHlCQUF5Qix1Q0FBdUMsUUFBUSxnT0FBZ08sOEJBQThCLG1KQUFtSixzQkFBc0IsZUFBZSx5T0FBeU8sTUFBTSxpT0FBaU8sMEJBQTBCLGlDQUFpQywwQkFBMEIsNkJBQTZCLHlCQUF5QixnREFBZ0QsZUFBZSx5QkFBeUIsZ0JBQWdCLFdBQVcsS0FBSyx1Q0FBdUMsT0FBTywrREFBK0QsU0FBUyxZQUFZLHFDQUFxQyxTQUFTLG1DQUFtQyxrREFBa0QsNklBQTZJLFNBQVMsc0JBQXNCLGlCQUFpQixrRUFBa0Usd0JBQXdCLDREQUE0RCx5QkFBeUIsNERBQTRELHdCQUF3QixlQUFlLG9DQUFvQyxZQUFZLElBQUksOEJBQThCLCtCQUErQixXQUFXLGVBQWUsVUFBVSxpQkFBaUIsa0VBQWtFLDhCQUE4QixvREFBb0QsaUNBQWlDLDBCQUEwQixrQ0FBa0MsMEJBQTBCLGtDQUFrQywwQkFBMEIsZ0NBQWdDLDBCQUEwQixpQ0FBaUMsMEJBQTBCLGtDQUFrQywwQkFBMEIsbUNBQW1DLDBCQUEwQixrQ0FBa0MsMEJBQTBCLG1DQUFtQywwQkFBMEIsK0JBQStCLDZDQUE2QyxpQ0FBaUMsaURBQWlELGtDQUFrQyxrREFBa0QsaUNBQWlDLGlEQUFpRCxrQ0FBa0Msa0RBQWtELGdDQUFnQywrQ0FBK0MsaUNBQWlDLGdEQUFnRCxnQ0FBZ0MsOENBQThDLCtCQUErQiwrQ0FBK0MsZ0NBQWdDLGdEQUFnRCxpQ0FBaUMsc0NBQXNDLFNBQVMsbUJBQW1CLDJCQUEyQixtQkFBbUIsVUFBVSx5QkFBeUIsc0VBQXNFLFFBQVEsb0JBQW9CLDJCQUEyQixhQUFhLHlDQUF5QyxHQUFHLG1CQUFtQiw2TUFBNk0sNkJBQTZCLDBEQUEwRCxnR0FBZ0csb0NBQW9DLDhDQUE4Qyx5QkFBeUIsU0FBUyx5QkFBeUIsc0VBQXNFLElBQUksa0NBQWtDLDZCQUE2QiwrQ0FBK0Msb0JBQW9CLFNBQVMsc0JBQXNCLG1GQUFtRixLQUFLLDRIQUE0SCwyRkFBMkYsb0RBQW9ELHdCQUF3Qix5RUFBeUUsc0NBQXNDLGdDQUFnQyw0REFBNEQseUJBQXlCLGFBQWEsa0JBQWtCLHNFQUFzRSx1Q0FBdUMsa0JBQWtCLDBDQUEwQyx3REFBd0QsK0JBQStCLGNBQWMsK1BBQStQLHlFQUF5RSxTQUFTLEVBQUUsSUFBSSxzQkFBc0IsaURBQWlELGdDQUFnQyxnREFBZ0QsZ0NBQWdDLDZEQUE2RCxtQkFBbUIsSUFBSSxvQ0FBb0MsU0FBUyx1QkFBdUIsNkNBQTZDLE9BQU8sK0RBQStELEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsa0VBQWtFLFFBQVEsZUFBZSxlQUFlLE1BQU0scUJBQXFCLHdEQUF3RCx3QkFBd0Isb0ZBQW9GLHFCQUFxQixxQkFBcUIsV0FBVywwQkFBMEIsZ0NBQWdDLGdHQUFnRyxtQ0FBbUMseUJBQXlCLCtKQUErSixvQ0FBb0MscUNBQXFDLG1JQUFtSSxtQ0FBbUMsdUhBQXVILG1FQUFtRSx3SEFBd0gscUNBQXFDLHVOQUF1TixpQ0FBaUMscUZBQXFGLG1DQUFtQyxxRkFBcUYseUNBQXlDLHFEQUFxRCxxQ0FBcUMsd0NBQXdDLGtDQUFrQyxrRUFBa0Usc0NBQXNDLHVGQUF1RixvREFBb0QsbUJBQW1CLEVBQUUsdUJBQXVCLG1FQUFtRSw0SUFBNEksaUNBQWlDLGtDQUFrQyxnQ0FBZ0MsdUNBQXVDLGlDQUFpQyx5SkFBeUosa0RBQWtELGdCQUFnQix1QkFBdUIsMEVBQTBFLHlDQUF5Qyx1RUFBdUUsb0lBQW9JLG9EQUFvRCxrQ0FBa0MsWUFBWSxRQUFRLGtIQUFrSCxtSkFBbUosNENBQTRDLGlDQUFpQywrQ0FBK0MsMkJBQTJCLDBDQUEwQyxXQUFXLDBEQUEwRCxRQUFRLFFBQVEsZ0JBQWdCLFFBQVEsS0FBSyxvQkFBb0IsNkNBQTZDLG1DQUFtQyxlQUFlLG1GQUFtRix5Q0FBeUMsNkNBQTZDLDJCQUEyQixtRUFBbUUsd0RBQXdELFVBQVUsYUFBYSxNQUFNLGFBQWEsVUFBVSxhQUFhLE1BQU0sYUFBYSxrS0FBa0ssSUFBSSxnQkFBZ0IsSUFBSSw4QkFBOEIsa0JBQWtCLG1CQUFtQix1QkFBdUIseUJBQXlCLFlBQVksV0FBVyxLQUFLLFdBQVcsc0RBQXNELGdDQUFnQywrQkFBK0IsaUNBQWlDLGdDQUFnQyx5QkFBeUIsMkhBQTJILEtBQUssVUFBVSxrQkFBa0IsMkJBQTJCLDZMQUE2TCw2QkFBNkIsaUJBQWlCLGdDQUFnQyxPQUFPLHdCQUF3Qiw0RUFBNEUsU0FBUywwQ0FBMEMsdUJBQXVCLDRJQUE0SSxpQkFBaUIsV0FBVyx3Q0FBd0Msb0NBQW9DLDBDQUEwQyxZQUFZLFdBQVcsS0FBSyx5Q0FBeUMsV0FBVyxLQUFLLFdBQVcsZ0dBQWdHLDZFQUE2RSxzQ0FBc0MsMk1BQTJNLGtDQUFrQyxXQUFXLG9CQUFvQixzQkFBc0IsMkdBQTJHLFdBQVcsdUJBQXVCLFdBQVcsS0FBSyxXQUFXLHdFQUF3RSx1Q0FBdUMsV0FBVyxjQUFjLGVBQWUsV0FBVyxVQUFVLElBQUksd0NBQXdDLG1HQUFtRyxrRkFBa0YsR0FBRyxLQUFLLFdBQVcsU0FBUyxTQUFTLDREQUE0RCw2QkFBNkIscUJBQXFCLFlBQVksV0FBVyxtQ0FBbUMsU0FBUyxPQUFPLG9FQUFvRSxvREFBb0QsV0FBVyxLQUFLLFdBQVcseUJBQXlCLFdBQVcsb0JBQW9CLHFDQUFxQyxzQkFBc0IsV0FBVyxnQ0FBZ0MseUJBQXlCLE1BQU0seURBQXlELFNBQVMsb0JBQW9CLHdCQUF3QixXQUFXLE1BQU0sV0FBVyx3Q0FBd0MsU0FBUyxtQ0FBbUMsa0NBQWtDLFdBQVcsd0JBQXdCLFdBQVcsMEJBQTBCLFNBQVMsdUJBQXVCLHdDQUF3QyxFQUFFLFFBQVEseUNBQXlDLEtBQUssbUNBQW1DLE9BQU8scUJBQXFCLHNCQUFzQixxQ0FBcUMsaUJBQWlCLFFBQVEsZ0ZBQWdGLHlCQUF5QixxQ0FBcUMsV0FBVyxNQUFNLHVDQUF1QyxnQkFBZ0IsT0FBTyxvQ0FBb0MscUJBQXFCLGVBQWUsZUFBZSxtQ0FBbUMsZ0JBQWdCLFdBQVcsS0FBSyx5QkFBeUIsNEJBQTRCLG9DQUFvQyxrQkFBa0IsV0FBVyxLQUFLLDZCQUE2QixpdUJBQWl1QixxQkFBcUIsNENBQTRDLDBCQUEwQixlQUFlLGNBQWMsVUFBVSxtREFBbUQsTUFBTSxnREFBZ0QsVUFBVSxzREFBc0QsTUFBTSw2Q0FBNkMsT0FBTyxtQ0FBbUMsdUJBQXVCLE1BQU0sb0JBQW9CLG9EQUFvRCxLQUFLLGVBQWUseVFBQXlRLFdBQVcsNEVBQTRFLDJCQUEyQixxQkFBcUIsNENBQTRDLE1BQU0sSUFBSSx5QkFBeUIsU0FBUyxZQUFZLFVBQVUsaVBBQWlQLFlBQVksMEJBQTBCLHlCQUF5QixVQUFVLFdBQVcsZ0RBQWdELG9CQUFvQixvQ0FBb0MsOENBQThDLGlCQUFpQixFQUFFLCtHQUErRyxzR0FBc0csRUFBRSw4R0FBOEcsbUNBQW1DLDJDQUEyQywrQkFBK0IsNENBQTRDLHdCQUF3QixrQkFBa0IsK0JBQStCLEVBQUUsRUFBRSwwRkFBMEYseUJBQXlCLDRDQUE0Qyx5RUFBeUUsbVBBQW1QLFdBQVcscUNBQXFDLFlBQVksS0FBSyxXQUFXLEtBQUssV0FBVyxvQkFBb0IsU0FBUyx3QkFBd0IsNEJBQTRCLGlCQUFpQiw4SEFBOEgsc0NBQXNDLFdBQVcsc0dBQXNHLGdGQUFnRiwwQ0FBMEMsc0VBQXNFLCtDQUErQyx5QkFBeUIsV0FBVyxZQUFZLFdBQVcsS0FBSyw0Q0FBNEMsME1BQTBNLFNBQVMsd0RBQXdELHFCQUFxQixtREFBbUQsWUFBWSxXQUFXLDhCQUE4QixTQUFTLDJDQUEyQywrQkFBK0IsMERBQTBELHlDQUF5QyxTQUFTLGFBQWEsaUNBQWlDLFNBQVMsc0RBQXNELGlCQUFpQixFQUFFLHFDQUFxQyxpQkFBaUIsRUFBRSx5REFBeUQsV0FBVyxtQ0FBbUMsZ0JBQWdCLGdDQUFnQyw0Q0FBNEMsU0FBUyw4TEFBOEwsU0FBUyxpQ0FBaUMsU0FBUyxtS0FBbUssUUFBUSwrSEFBK0gsdUNBQXVDLHNDQUFzQyw2QkFBNkIsb0NBQW9DLGtCQUFrQiw4QkFBOEIsb0hBQW9ILE9BQU8sc0NBQXNDLG9DQUFvQyxPQUFPLGdGQUFnRixtT0FBbU8sWUFBWSxXQUFXLDJCQUEyQixZQUFZLFdBQVcsMkJBQTJCLGdCQUFnQixvRkFBb0YseUJBQXlCLHNGQUFzRixhQUFhLG1DQUFtQyxpQ0FBaUMsc0lBQXNJLDJFQUEyRSwwQkFBMEIsZ0NBQWdDLGtDQUFrQyxtQ0FBbUMsR0FBRyxzQkFBc0IsU0FBUyw0QkFBNEIsU0FBUywrRkFBK0YsZUFBZSxnQ0FBZ0MsaUJBQWlCLFdBQVcsS0FBSyx3REFBd0QsNEVBQTRFLFNBQVMsS0FBSyxZQUFZLGtGQUFrRiwrQkFBK0IsbUNBQW1DLG1GQUFtRixXQUFXLE1BQU0sV0FBVyx3QkFBd0IsdUJBQXVCLFdBQVcsS0FBSyw2QkFBNkIsc0NBQXNDLDRCQUE0QixtQkFBbUIsNEJBQTRCLDJCQUEyQixpQkFBaUIsVUFBVSx1Q0FBdUMsU0FBUyxVQUFVLGtEQUFrRCx5QkFBeUIsb0NBQW9DLFdBQVcsd0JBQXdCLHVCQUF1QixpQkFBaUIsMkRBQTJELHNDQUFzQyx5QkFBeUIsV0FBVyxNQUFNLFdBQVcsNkJBQTZCLHFEQUFxRCwyQ0FBMkMsNkJBQTZCLG1JQUFtSSxPQUFPLHdEQUF3RCxrRUFBa0UsZ0JBQWdCLFdBQVcseUNBQXlDLFNBQVMsd0tBQXdLLGtCQUFrQixjQUFjLGVBQWUsK0VBQStFLHFCQUFxQixzQkFBc0IsV0FBVyxvQkFBb0IsYUFBYSxvQ0FBb0MsTUFBTSxXQUFXLCtDQUErQyxXQUFXLEVBQUUsY0FBYyxnQ0FBZ0MsV0FBVyx1QkFBdUIsU0FBUyxrQkFBa0Isb0JBQW9CLHNCQUFzQiwrQkFBK0IsOEJBQThCLE9BQU8sRUFBRSxrQkFBa0IsdUJBQXVCLHlCQUF5QixpQkFBaUIsTUFBTSxFQUFFLDZCQUE2QixlQUFlLGdDQUFnQywwREFBMEQsd0JBQXdCLE9BQU8sa0JBQWtCLHlCQUF5QixnQkFBZ0IsaUJBQWlCLFNBQVMsOEJBQThCLG9IQUFvSCw0REFBNEQsc0JBQXNCLGFBQWEseUJBQXlCLDJCQUEyQixhQUFhLEtBQUssbURBQW1ELFFBQVEsRUFBRSwrREFBK0QseUNBQXlDLGdDQUFnQyx3Q0FBd0MsS0FBSyxxREFBcUQsK0NBQStDLGdDQUFnQyxxQkFBcUIsZ0JBQWdCLG1CQUFtQixrQ0FBa0MsdUJBQXVCLFdBQVcsTUFBTSxXQUFXLHdCQUF3QixzQ0FBc0Msd0NBQXdDLGdCQUFnQixXQUFXLE1BQU0sV0FBVyw4Q0FBOEMseUJBQXlCLDBCQUEwQixZQUFZLEtBQUssV0FBVyxLQUFLLHFCQUFxQiw0QkFBNEIsU0FBUyw0QkFBNEIsU0FBUywrQkFBK0IsV0FBVyxNQUFNLDJCQUEyQix1QkFBdUIsU0FBUywwQkFBMEIsMkNBQTJDLDhCQUE4QixFQUFFLGdEQUFnRCw0QkFBNEIsaUJBQWlCLGlEQUFpRCw2QkFBNkIsWUFBWSxvRkFBb0YsOEJBQThCLHNDQUFzQywwREFBMEQsa0NBQWtDLGdCQUFnQixxRkFBcUYsOENBQThDLDJCQUEyQixtRUFBbUUsZ0hBQWdILEdBQUcsVUFBVSxjQUFjLElBQUksTUFBTSx1QkFBdUIsV0FBVyxpQ0FBaUMsTUFBTSxLQUFLLGdCQUFnQixxQ0FBcUMsS0FBSyxNQUFNLEVBQUUsK0JBQStCLG9CQUFvQixnR0FBZ0csd0RBQXdELFlBQVksZ0JBQWdCLDBDQUEwQyw2R0FBNkcsS0FBSyxrQkFBa0IsZ0JBQWdCLHNCQUFzQixrQkFBa0IscUNBQXFDLDZDQUE2QyxXQUFXLEtBQUssV0FBVyxvRkFBb0Ysc0RBQXNELHFDQUFxQyxZQUFZLElBQUksaUJBQWlCLElBQUksZ0NBQWdDLHNCQUFzQixnREFBZ0QsSUFBSSxPQUFPLG9DQUFvQyxxQ0FBcUMsMEJBQTBCLGVBQWUsU0FBUyxFQUFFLGNBQWMsMFFBQTBRLGlGQUFpRixnQkFBZ0IsbUJBQW1CLG9CQUFvQiwwREFBMEQsdUJBQXVCLFdBQVcsd0NBQXdDLElBQUksT0FBTyxrQkFBa0IsNEdBQTRHLDRCQUE0Qiw2Q0FBNkMsd0JBQXdCLHNDQUFzQyx3QkFBd0IsK0NBQStDLHNCQUFzQix1RUFBdUUsOENBQThDLCtDQUErQyxpSUFBaUksOENBQThDLCtDQUErQyxpSUFBaUksOE5BQThOLG9LQUFvSyxXQUFXLE1BQU0sZ0VBQWdFLFdBQVcsS0FBSyxVQUFVLE1BQU0sdURBQXVELFlBQVksb09BQW9PLGdMQUFnTCxhQUFhLFdBQVcsZ0JBQWdCLDJWQUEyVixrQ0FBa0MscUNBQXFDLHdCQUF3Qiw4RkFBOEYsa0JBQWtCLCtmQUErZiw2SEFBNkgsMkZBQTJGLHdQQUF3UCxnR0FBZ0csTUFBTSw0QkFBNEIsbUlBQW1JLHVDQUF1Qyx3ZUFBd2Usb0lBQW9JLGlHQUFpRywwREFBMEQsTUFBTSw2Q0FBNkMsd0RBQXdELFFBQVEsMEVBQTBFLEVBQUUseUJBQXlCLHlEQUF5RCw0QkFBNEIsMlBBQTJQLGdHQUFnRywyS0FBMkssMlRBQTJULHVHQUF1Ryx3RUFBd0UsaUJBQWlCLFdBQVcsZ0NBQWdDLGFBQWEsS0FBSyxvQkFBb0IsNHJCQUE0ckIsU0FBUyx5Q0FBeUMsV0FBVyw2RkFBNkYsV0FBVyxNQUFNLDBCQUEwQiwyQkFBMkIsb0VBQW9FLFdBQVcsTUFBTSxxQkFBcUIsb0NBQW9DLHVEQUF1RCxXQUFXLE1BQU0sV0FBVyx1Q0FBdUMsa0RBQWtELFdBQVcsd0JBQXdCLFdBQVcsTUFBTSxXQUFXLG9DQUFvQyxvQ0FBb0MsNEJBQTRCLHdIQUF3SCxZQUFZLGdDQUFnQyxXQUFXLEtBQUssd0JBQXdCLE1BQU0sYUFBYSxNQUFNLHFRQUFxUSxrQkFBa0IsZ0VBQWdFLG9IQUFvSCxNQUFNLDZDQUE2Qyx3REFBd0QsUUFBUSxrRUFBa0UsSUFBSSxTQUFTLHNDQUFzQyxxVEFBcVQsb0JBQW9CLG9CQUFvQixXQUFXLDRCQUE0QixLQUFLLCtCQUErQixhQUFhLHVCQUF1QixhQUFhLGlCQUFpQix3REFBd0QsZ0JBQWdCLG9CQUFvQixtQkFBbUIsMkdBQTJHLGlCQUFpQixvQkFBb0IsaUJBQWlCLDBDQUEwQyxJQUFJLEVBQUUsb0JBQW9CLG1CQUFtQixXQUFXLE9BQU8sbUJBQW1CLDJEQUEyRCxJQUFJLEVBQUUsNEJBQTRCLDREQUE0RCxXQUFXLFFBQVEsYUFBYSxrQkFBa0Isd0JBQXdCLGlCQUFpQixNQUFNLHdCQUF3QixjQUFjLEVBQUUsZ0JBQWdCLHFCQUFxQixnQkFBZ0IsWUFBWSwrQ0FBK0Msb0RBQW9ELFVBQVUscUJBQXFCLGdDQUFnQyxRQUFRLEVBQUUsZ0JBQWdCLGlCQUFpQiw0QkFBNEIscUJBQXFCLHFCQUFxQixpQ0FBaUMsMkJBQTJCLGtCQUFrQixtWUFBbVksZ0JBQWdCLHNDQUFzQyxXQUFXLHlCQUF5QixvQ0FBb0MsV0FBVyxpRkFBaUYscUZBQXFGLG9CQUFvQixjQUFjLElBQUksa0NBQWtDLHNCQUFzQixtQ0FBbUMsZ0JBQWdCLGtCQUFrQixNQUFNLDRKQUE0SiwrQkFBK0IsV0FBVyxLQUFLLG1CQUFtQixRQUFRLHFDQUFxQyxFQUFFLG1CQUFtQixXQUFXLE1BQU0sa0JBQWtCLG9JQUFvSSw4SkFBOEoseURBQXlELFlBQVksTUFBTSxrREFBa0Qsa0NBQWtDLEVBQUUsMENBQTBDLHNCQUFzQixlQUFlLHVCQUF1QixPQUFPLHNDQUFzQyxhQUFhLGlCQUFpQixTQUFTLHFDQUFxQyxnQkFBZ0IsV0FBVyw0R0FBNEcsMkJBQTJCLHVDQUF1QyxtQkFBbUIseUdBQXlHLEdBQUcsNkJBQTZCLFFBQVEsZUFBZSx1QkFBdUIsTUFBTSxlQUFlLGtCQUFrQix1RkFBdUYsZ0JBQWdCLCtDQUErQyxrQkFBa0IsOEhBQThILEVBQUUsRUFBRSxrQkFBa0IsZUFBZSxzQkFBc0IsdUVBQXVFLGlCQUFpQixtQ0FBbUMsbUJBQW1CLDhCQUE4QixFQUFFLCtCQUErQiw0Q0FBNEMseUNBQXlDLHFCQUFxQixpRkFBaUYsU0FBUywrQ0FBK0MsdUJBQXVCLG9EQUFvRCxrRkFBa0YscUJBQXFCLGlCQUFpQix1QkFBdUIsU0FBUyx1QkFBdUIsZUFBZSxFQUFFLHNDQUFzQyxpQ0FBaUMsWUFBWSxXQUFXLDBDQUEwQyxvQkFBb0IsdUJBQXVCLGtGQUFrRiwrR0FBK0cscUNBQXFDLDJCQUEyQixvREFBb0Qsc0NBQXNDLDBCQUEwQiwwQkFBMEIsaUJBQWlCLGVBQWUsaUJBQWlCLG1DQUFtQywrQ0FBK0Msc0dBQXNHLDRCQUE0QixvQ0FBb0MsMEJBQTBCLHNCQUFzQixPQUFPLHFFQUFxRSxjQUFjLFFBQVEsa0JBQWtCLHFCQUFxQixZQUFZLFdBQVcseUJBQXlCLFNBQVMsY0FBYywrQkFBK0IsUUFBUSxRQUFRLElBQUksZ0lBQWdJLHdCQUF3QixTQUFTLGNBQWMscUJBQXFCLE9BQU8sdUJBQXVCLFVBQVUsZUFBZSxzQ0FBc0MsMkJBQTJCLHVCQUF1QiwyQkFBMkIsU0FBUyw2RUFBNkUsaUNBQWlDLHNCQUFzQiwwQkFBMEIsVUFBVSxTQUFTLGdCQUFnQixtQkFBbUIsZUFBZSxnQkFBZ0IscUJBQXFCLFlBQVksV0FBVyxvQkFBb0IsU0FBUyxnQkFBZ0IsbUJBQW1CLG9CQUFvQixzQkFBc0IsdUVBQXVFLHFJQUFxSSxvQ0FBb0MsMkJBQTJCLDBDQUEwQyxXQUFXLE1BQU0sV0FBVyxxQ0FBcUMsU0FBUywwQ0FBMEMsV0FBVyxNQUFNLHdCQUF3QixXQUFXLE1BQU0sV0FBVyxtQ0FBbUMsVUFBVSxTQUFTLHVDQUF1QywyQkFBMkIsa0JBQWtCLGFBQWEsdUJBQXVCLDhGQUE4RixnQ0FBZ0MsaUNBQWlDLDhDQUE4QyxnQkFBZ0Isa0JBQWtCLHNDQUFzQyxnQkFBZ0IsMEpBQTBKLGdDQUFnQyxtREFBbUQscUNBQXFDLHVCQUF1QixpQkFBaUIsWUFBWSxXQUFXLEtBQUssd0JBQXdCLFdBQVcsOENBQThDLHNCQUFzQixxQkFBcUIsNkJBQTZCLG1DQUFtQyxzREFBc0QsV0FBVyx1QkFBdUIsV0FBVyxLQUFLLFdBQVcsd0VBQXdFLGdCQUFnQiw2Q0FBNkMsZ0JBQWdCLGNBQWMsOEJBQThCLHFCQUFxQixzREFBc0QsaUJBQWlCLGdCQUFnQixNQUFNLDBHQUEwRyxPQUFPLDZCQUE2QixnQkFBZ0IsUUFBUSxXQUFXLGlEQUFpRCxhQUFhLFFBQVEsV0FBVywrQkFBK0IsZUFBZSxRQUFRLFdBQVcsNkJBQTZCLGdCQUFnQixnQkFBZ0IsbUhBQW1ILGdCQUFnQixnRUFBZ0UsMkJBQTJCLFdBQVcsNkRBQTZELGlDQUFpQyxpRUFBaUUscUJBQXFCLDhEQUE4RCxnQkFBZ0IsbUJBQW1CLGNBQWMsa0JBQWtCLGdCQUFnQiwyREFBMkQsSUFBSSxLQUFLLGVBQWUsMENBQTBDLHdDQUF3QyxJQUFJLEtBQUssc0NBQXNDLDBCQUEwQixrREFBa0QsOEJBQThCLGdCQUFnQixlQUFlLGdMQUFnTCxtREFBbUQsUUFBUSxTQUFTLG1HQUFtRyxVQUFVLFNBQVMsRUFBRSxvQkFBb0IsOEJBQThCLGNBQWMsMEJBQTBCLHlCQUF5QixLQUFLLElBQUksRUFBRSxZQUFZLGtHQUFrRyxtRkFBbUYsdUJBQXVCLHNDQUFzQyxJQUFJLEVBQUUsdUJBQXVCLFdBQVcsS0FBSyxLQUFLLFdBQVcsS0FBSyxrRUFBa0Usd0RBQXdELG9CQUFvQiwwQ0FBMEMsbUJBQW1CLFdBQVcsaUJBQWlCLHFCQUFxQixnQkFBZ0IsZUFBZSwyQkFBMkIsMEJBQTBCLHVCQUF1QixvSEFBb0gsWUFBWSxXQUFXLHNFQUFzRSw0REFBNEQsZUFBZSxZQUFZLGVBQWUsWUFBWSxjQUFjLHdCQUF3QiwrQkFBK0Isb0NBQW9DLFNBQVMsRUFBRSxrQ0FBa0Msc0JBQXNCLEtBQUssNkRBQTZELEtBQUssMEJBQTBCLHlEQUF5RCxjQUFjLDJHQUEyRyxTQUFTLDZDQUE2Qyx3QkFBd0IsNkJBQTZCLHNDQUFzQyxTQUFTLEVBQUUsa0NBQWtDLHNCQUFzQixLQUFLLDZDQUE2QyxLQUFLLDhDQUE4Qyw2QkFBNkIsY0FBYyxtSEFBbUgsU0FBUyw2Q0FBNkMsZUFBZSw0RkFBNEYsdUJBQXVCLE9BQU8sNERBQTRELGlCQUFpQiw2QkFBNkIsT0FBTyxpREFBaUQsZUFBZSxPQUFPLDBDQUEwQyx3SEFBd0gsVUFBVSxlQUFlLG1GQUFtRixlQUFlLGdCQUFnQixtRUFBbUUsRUFBRSxlQUFlLGdCQUFnQixlQUFlLHFFQUFxRSxxQkFBcUIsaUJBQWlCLHlCQUF5QixTQUFTLGVBQWUsV0FBVyxlQUFlLFdBQVcseUJBQXlCLGdCQUFnQixpQkFBaUIsa0NBQWtDLG1DQUFtQywwQkFBMEIscUJBQXFCLE9BQU8sMkVBQTJFLG1CQUFtQiwwQkFBMEIsMkRBQTJELHlEQUF5RCxXQUFXLGVBQWUsbUNBQW1DLFdBQVcsZ0JBQWdCLGNBQWMsa0JBQWtCLE1BQU0saUJBQWlCLFlBQVksV0FBVyw2SEFBNkgsbUJBQW1CLGVBQWUsd0dBQXdHLHVCQUF1QixxQ0FBcUMsV0FBVyxlQUFlLHNDQUFzQyx1REFBdUQsV0FBVyxrRkFBa0Ysa0JBQWtCLG1DQUFtQyxLQUFLLHVCQUF1Qiw2QkFBNkIsUUFBUSwrQkFBK0IsVUFBVSxrRUFBa0UsSUFBSSxPQUFPLDZEQUE2RCxRQUFRLFdBQVcsS0FBSyxTQUFTLDJCQUEyQixtQ0FBbUMsaUJBQWlCLDRDQUE0QyxxQkFBcUIsb0JBQW9CLFdBQVcsS0FBSyxnQ0FBZ0MseUdBQXlHLGlCQUFpQiwyQkFBMkIsb0RBQW9ELElBQUksTUFBTSw4QkFBOEIsZUFBZSxvREFBb0QsNkRBQTZELHFCQUFxQixZQUFZLFdBQVcsS0FBSyxTQUFTLDBCQUEwQixlQUFlLGdCQUFnQixlQUFlLHFFQUFxRSxxQkFBcUIsNkJBQTZCLGlDQUFpQyx3QkFBd0IsaUJBQWlCLFdBQVcsS0FBSyw2RUFBNkUsd0JBQXdCLHFCQUFxQixTQUFTLCtDQUErQyx3REFBd0QsK0NBQStDLHVDQUF1Qyx1Q0FBdUMsV0FBVyxLQUFLLFNBQVMsd0NBQXdDLGFBQWEsb0NBQW9DLFFBQVEsV0FBVyxtQ0FBbUMsU0FBUyx1TUFBdU0sdUJBQXVCLHVCQUF1QixZQUFZLFdBQVcsTUFBTSxhQUFhLDBEQUEwRCwyQkFBMkIsZ0RBQWdELGFBQWEsTUFBTSw0RUFBNEUsMFJBQTBSLGlCQUFpQiwwSkFBMEosZUFBZSxTQUFTLG1EQUFtRCx5QkFBeUIsWUFBWSxXQUFXLDBCQUEwQixxQkFBcUIsOEJBQThCLHlCQUF5QixrQkFBa0IsK0NBQStDLHlCQUF5QixrQkFBa0IsK0NBQStDLGlCQUFpQixpQkFBaUIsV0FBVyxLQUFLLHNCQUFzQixzRUFBc0UsOENBQThDLEtBQUssWUFBWSxvQkFBb0IsZ0NBQWdDLHdDQUF3QyxvQkFBb0IsS0FBSyxpQkFBaUIsdUJBQXVCLG1DQUFtQyxVQUFVLDRCQUE0QixTQUFTLGlCQUFpQixTQUFTLDhEQUE4RCxZQUFZLFdBQVcsa0NBQWtDLFNBQVMsaUJBQWlCLDBCQUEwQiwrQkFBK0IsUUFBUSxvQkFBb0IsS0FBSywwQ0FBMEMsK0JBQStCLFdBQVcsOENBQThDLGFBQWEsV0FBVyxLQUFLLFNBQVMsUUFBUSxjQUFjLDJDQUEyQyxvQkFBb0IsMEJBQTBCLHlCQUF5QixvREFBb0QsdUJBQXVCLDJEQUEyRCwwSEFBMEgsS0FBSyxXQUFXLEtBQUssK0JBQStCLG9EQUFvRCxvRkFBb0YsU0FBUyxxQkFBcUIsK0JBQStCLDZDQUE2QyxXQUFXLGlFQUFpRSwyQ0FBMkMscURBQXFELFdBQVcsdUNBQXVDLHVDQUF1QyxXQUFXLEtBQUssV0FBVyxRQUFRLFdBQVcsNEJBQTRCLGFBQWEsbUJBQW1CLG9DQUFvQyxpQkFBaUIsdUJBQXVCLGtFQUFrRSxPQUFPLHdHQUF3Ryw2Q0FBNkMseUJBQXlCLFVBQVUsK0NBQStDLEtBQUssaUJBQWlCLFdBQVcsc0ZBQXNGLGlCQUFpQixpQ0FBaUMsSUFBSSx3Q0FBd0MsOEJBQThCLE1BQU0sTUFBTSxvQkFBb0IscURBQXFELGlCQUFpQixpQkFBaUIsb0NBQW9DLHlCQUF5QixTQUFTLHVDQUF1Qyx1SEFBdUgsb0JBQW9CLFNBQVMsNENBQTRDLG9CQUFvQiwwQkFBMEIsdUNBQXVDLFdBQVcsSUFBSSxTQUFTLE1BQU0sYUFBYSx3TEFBd0wsZ0NBQWdDLGlGQUFpRixtR0FBbUcsd1BBQXdQLG1CQUFtQix5QkFBeUIsaUJBQWlCLHlCQUF5QiwyQ0FBMkMsOENBQThDLDBCQUEwQiwrQkFBK0Isb0ZBQW9GLDhCQUE4QixFQUFFLGNBQWMsU0FBUyw0RkFBNEYsU0FBUyxpQkFBaUIsVUFBVSxrQkFBa0IsdUJBQXVCLDhCQUE4QixvQ0FBb0MsaUNBQWlDLGdCQUFnQixzQkFBc0IsK0JBQStCLHdCQUF3QixLQUFLLGtCQUFrQix3SkFBd0osNkhBQTZILDJCQUEyQixpR0FBaUcsV0FBVyxLQUFLLHFCQUFxQiw0Q0FBNEMsU0FBUywyQkFBMkIsMklBQTJJLFdBQVcsS0FBSyxtQ0FBbUMsNERBQTRELFNBQVMsNkJBQTZCLGVBQWUsU0FBUyx5Q0FBeUMseUJBQXlCLDRIQUE0SCxhQUFhLGdQQUFnUCx1Q0FBdUMsS0FBSyx1QkFBdUIsRUFBRSw0QkFBNEIsMEJBQTBCLDZCQUE2QixTQUFTLHFDQUFxQyxvQ0FBb0MsV0FBVyxLQUFLLHNCQUFzQix3SUFBd0ksU0FBUyx3Q0FBd0MsWUFBWSxXQUFXLEtBQUssY0FBYyxpQkFBaUIsNEpBQTRKLEdBQUcsd0JBQXdCLHlFQUF5RSx3QkFBd0IsMkVBQTJFLFdBQVcsS0FBSyxXQUFXLGlCQUFpQixTQUFTLG9GQUFvRixzRUFBc0UsWUFBWSxXQUFXLEtBQUsscUJBQXFCLGFBQWEscUJBQXFCLHlGQUF5RiwwREFBMEQsU0FBUywyQkFBMkIsOEVBQThFLDBCQUEwQix1QkFBdUIsc0dBQXNHLGdEQUFnRCw2Q0FBNkMsU0FBUyxFQUFFLHdDQUF3Qyx1Q0FBdUMsMEZBQTBGLFlBQVksTUFBTSw0SkFBNEosWUFBWSxnREFBZ0QsaUJBQWlCLGlDQUFpQyxhQUFhLHFEQUFxRCxtRUFBbUUsK0JBQStCLDhCQUE4QiwyREFBMkQsdVpBQXVaLHNDQUFzQyx3Q0FBd0MseUJBQXlCLGlDQUFpQyw0Q0FBNEMscURBQXFELHNCQUFzQixRQUFRLGlFQUFpRSxzT0FBc08sbUJBQW1CLGtCQUFrQiw0Q0FBNEMsaUlBQWlJLG1EQUFtRCxhQUFhLGtLQUFrSyxrQ0FBa0MsV0FBVyx1REFBdUQsMERBQTBELGlHQUFpRyxxQkFBcUIsdUZBQXVGLGlCQUFpQix3QkFBd0IsbUVBQW1FLGtEQUFrRCxzREFBc0QsK0hBQStILE1BQU0sa0JBQWtCLE9BQU8sSUFBSSxzQ0FBc0MsaUJBQWlCLHNFQUFzRSxTQUFTLFlBQVksWUFBWSxTQUFTLCtDQUErQyx1QkFBdUIsdUJBQXVCLDJEQUEyRCxVQUFVLEdBQUcsaUNBQWlDLHlIQUF5SCxzQ0FBc0MsMEJBQTBCLHdFQUF3RSx1Q0FBdUMsb0NBQW9DLEtBQUssNEZBQTRGLElBQUksa0NBQWtDLFNBQVMsbUVBQW1FLHdDQUF3QyxtREFBbUQsYUFBYSxNQUFNLEdBQUcsbUJBQW1CLFdBQVcsbUVBQW1FLHlCQUF5QixvQkFBb0Isc0JBQXNCLHlCQUF5Qiw4Q0FBOEMsaUdBQWlHLHlCQUF5Qiw2Q0FBNkMsOEVBQThFLGdIQUFnSCw4Q0FBOEMscUNBQXFDLDJDQUEyQyx3REFBd0QsdUNBQXVDLHNEQUFzRCwwQ0FBMEMsa0RBQWtELHlDQUF5Qyx3REFBd0Qsd0NBQXdDLHVEQUF1RCx5Q0FBeUMsd0RBQXdELDBDQUEwQyxrREFBa0QsMkNBQTJDLGtHQUFrRyw4Q0FBOEMsZ0dBQWdHLCtDQUErQyxJQUFJLG1DQUFtQyxTQUFTLGlCQUFpQixnREFBZ0QsSUFBSSw0SUFBNEksU0FBUyxpQkFBaUIsd0NBQXdDLDJCQUEyQiwyQ0FBMkMsOENBQThDLFdBQVcsbURBQW1ELHdEQUF3RCxnQ0FBZ0MsT0FBTyxxQkFBcUIsd0JBQXdCLG1GQUFtRixtQ0FBbUMsK0NBQStDLDZEQUE2RCwrRkFBK0YscUhBQXFILGtCQUFrQix5Q0FBeUMsY0FBYywyckJBQTJyQixrRUFBa0UseUJBQXlCLHVCQUF1QiwyQkFBMkIsSUFBSSxxQkFBcUIsU0FBUyxLQUFLLGlEQUFpRCw4Q0FBOEMsd0NBQXdDLGlGQUFpRixrVEFBa1QsVUFBVSxxQ0FBcUMsa0VBQWtFLDhCQUE4QixTQUFTLDBCQUEwQiwyQ0FBMkMsOFpBQThaLHdCQUF3QixZQUFZLHlCQUF5QixZQUFZLDBCQUEwQixzRUFBc0UsNERBQTRELGtIQUFrSCx1RkFBdUYsa0NBQWtDLGtCQUFrQix1QkFBdUIsOENBQThDLG9CQUFvQixrQkFBa0Isd0JBQXdCLDZEQUE2RCxPQUFPLHVCQUF1QiwwQ0FBMEMsZ0RBQWdELHdCQUF3QixnREFBZ0Qsb0VBQW9FLGNBQWMsa0JBQWtCLFlBQVksV0FBVyw0QkFBNEIsWUFBWSw0RUFBNEUseUJBQXlCLDJCQUEyQix5QkFBeUIsZ0JBQWdCLHlDQUF5Qyw2QkFBNkIsY0FBYyxTQUFTLElBQUksOEJBQThCLFlBQVksZUFBZSxNQUFNLEVBQUUsaUZBQWlGLFNBQVMsS0FBSyxxQ0FBcUMsaUJBQWlCLCtFQUErRSx5Q0FBeUMsaUJBQWlCLHNGQUFzRixrQkFBa0Isb0ZBQW9GLDJCQUEyQix5RUFBeUUsNENBQTRDLElBQUksMEJBQTBCLGdDQUFnQyw2R0FBNkcsMEJBQTBCLDhGQUE4RixXQUFXLDZGQUE2RixTQUFTLDJCQUEyQiwySUFBMkksc0JBQXNCLDJDQUEyQyxPQUFPLDJFQUEyRSxpRUFBaUUsZ0JBQWdCLG1CQUFtQiw2SEFBNkgsa0dBQWtHLHVIQUF1SCw2Q0FBNkMsY0FBYyxnQ0FBZ0Msb0JBQW9CLGtCQUFrQixXQUFXLHdFQUF3RSxxQkFBcUIsV0FBVyxvRkFBb0YsNkNBQTZDLHNCQUFzQixtRkFBbUYsbURBQW1ELFlBQVksV0FBVyxzRkFBc0YsZ0JBQWdCLDRDQUE0QyxjQUFjLGlCQUFpQixvREFBb0QsT0FBTyw0RUFBNEUsY0FBYyxnREFBZ0QsNkNBQTZDLHNJQUFzSSxpRkFBaUYsaUNBQWlDLGdHQUFnRyx3ckJBQXdyQixrQ0FBa0Msc0JBQXNCLHlYQUF5WCx5Q0FBeUMseUVBQXlFLGdDQUFnQywrREFBK0QsaUJBQWlCLGNBQWMseUVBQXlFLGNBQWMsa0JBQWtCLGtDQUFrQyxtQkFBbUIsaUJBQWlCLGdDQUFnQyxtQkFBbUIsbUNBQW1DLHVDQUF1Qyw4QkFBOEIsV0FBVyxNQUFNLGdDQUFnQyxrQkFBa0Isb0JBQW9CLGtDQUFrQyxzQkFBc0Isb0NBQW9DLGlCQUFpQixxQ0FBcUMsc0JBQXNCLHVCQUF1Qix5REFBeUQscUNBQXFDLFNBQVMsb0NBQW9DLFdBQVcsTUFBTSxXQUFXLHVCQUF1QiwyREFBMkQsaUJBQWlCLEVBQUUsbUNBQW1DLFlBQVksU0FBUyxXQUFXLE1BQU0sNEJBQTRCLFVBQVUsc0RBQXNELEVBQUUsVUFBVSxxQ0FBcUMsT0FBTyxnREFBZ0Qsb0NBQW9DLHVCQUF1Qix1QkFBdUIsdUJBQXVCLGtCQUFrQixxRUFBcUUsa0JBQWtCLDRDQUE0QyxvRUFBb0Usc0JBQXNCLFFBQVEsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLHdCQUF3QixVQUFVLEVBQUUsVUFBVSxFQUFFLGlCQUFpQix3QkFBd0IsUUFBUSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsd0JBQXdCLFVBQVUsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLHdCQUF3QixRQUFRLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixnQkFBZ0IsK0JBQStCLHlCQUF5QixpQkFBaUIsR0FBRyw4QkFBOEIsV0FBVyw0TEFBNEwsZUFBZSx3QkFBd0IsK0lBQStJLDRDQUE0Qyw2ZkFBNmYsMEJBQTBCLFlBQVksSUFBSSxLQUFLLFlBQVksSUFBSSxrQkFBa0IscUJBQXFCLElBQUksa0JBQWtCLFFBQVEsSUFBSSxLQUFLLFFBQVEsSUFBSSxrQkFBa0IscUJBQXFCLElBQUksOEJBQThCLHNCQUFzQix1QkFBdUIsZ0JBQWdCLElBQUksS0FBSyxzREFBc0QsUUFBUSxtREFBbUQsMEJBQTBCLFlBQVksSUFBSSxLQUFLLEtBQUssU0FBUyxLQUFLLGdDQUFnQyw2QkFBNkIseUZBQXlGLDBHQUEwRyxzQkFBc0IsS0FBSyx3QkFBd0IsOEhBQThILDRJQUE0SSxzQkFBc0IsS0FBSywwQ0FBMEMsK0VBQStFLFVBQVUsb0JBQW9CLHlFQUF5RSwrQkFBK0IsV0FBVyxxQ0FBcUMsZ0JBQWdCLGtDQUFrQyxXQUFXLE1BQU0sV0FBVyxRQUFRLGFBQWEsRUFBRSwyQkFBMkIsb0NBQW9DLG9CQUFvQixTQUFTLGFBQWEsRUFBRSxrQkFBa0IsNkNBQTZDLHFCQUFxQixFQUFFLEtBQUssd0JBQXdCLDREQUE0RCxLQUFLLG9CQUFvQixtRkFBbUYsdUNBQXVDLGdCQUFnQixXQUFXLG1CQUFtQixxQkFBcUIsd0JBQXdCLGtCQUFrQiw4QkFBOEIsRUFBRSxHQUFHLGFBQWEscUJBQXFCLEVBQUUsZUFBZSxVQUFVLFdBQVcsWUFBWSxTQUFTLFdBQVcsTUFBTSxzQ0FBc0MsZUFBZSxVQUFVLG1EQUFtRCxXQUFXLEVBQUUsc0NBQXNDLG9DQUFvQyxzRkFBc0YsZ0JBQWdCLE9BQU8sWUFBWSx3SEFBd0gsT0FBTyw4QkFBOEIsbUJBQW1CLDBDQUEwQywrQ0FBK0Msc0NBQXNDLHNDQUFzQyxrQkFBa0IsV0FBVyx3Q0FBd0MsY0FBYyxVQUFVLGVBQWUsTUFBTSxrQ0FBa0MsaUNBQWlDLFVBQVUsV0FBVyxZQUFZLDJCQUEyQixXQUFXLE1BQU0sV0FBVyxVQUFVLFdBQVcsRUFBRSxhQUFhLGlCQUFpQiwrQ0FBK0MsMkNBQTJDLHdEQUF3RCx5Q0FBeUMsT0FBTyxvRUFBb0Usd0JBQXdCLHVNQUF1TSxnQkFBZ0IsY0FBYyxxSUFBcUksOEhBQThILHdDQUF3QyxrQ0FBa0Msc0RBQXNELFdBQVcsdUlBQXVJLDJDQUEyQyw2RUFBNkUsc0NBQXNDLDJDQUEyQyxxQ0FBcUMsd0RBQXdELHFDQUFxQyxvRUFBb0UsZUFBZSxvQkFBb0IsdUJBQXVCLElBQUksR0FBRyw0QkFBNEIsc0lBQXNJLGtDQUFrQyw0QkFBNEIsa0ZBQWtGLG1DQUFtQyxvQkFBb0IsK0VBQStFLGdCQUFnQixXQUFXLFlBQVksa0RBQWtELEtBQUssa0ZBQWtGLGFBQWEsS0FBSyxLQUFLLE1BQU0sOENBQThDLDBFQUEwRSxNQUFNLG9CQUFvQixNQUFNLG9CQUFvQixxQkFBcUIsNEJBQTRCLGtCQUFrQixxREFBcUQsT0FBTyxrRUFBa0UsdUNBQXVDLDhCQUE4QixXQUFXLGlrQkFBaWtCLHNCQUFzQiwwRUFBMEUsK0NBQStDLFdBQVcsS0FBSyxzQ0FBc0MseUNBQXlDLGtCQUFrQixvQkFBb0IsaUJBQWlCLE1BQU0sbUZBQW1GLGlHQUFpRyxZQUFZLGVBQWUsd0VBQXdFLGlCQUFpQixFQUFFLHNDQUFzQyxpQkFBaUIsc0NBQXNDLGNBQWMsSUFBSSxvQ0FBb0Msa0lBQWtJLCtCQUErQixnQ0FBZ0MsV0FBVyxrREFBa0QscUJBQXFCLG9CQUFvQiwrRUFBK0UsbUlBQW1JLDRCQUE0QixpREFBaUQsZ0NBQWdDLDBCQUEwQixpQ0FBaUMsMkNBQTJDLGtDQUFrQyx3REFBd0Qsd0VBQXdFLHVCQUF1QiwyQkFBMkIsMEZBQTBGLDZGQUE2RiwwRkFBMEYsdUJBQXVCLG1DQUFtQyxvQkFBb0IsOEpBQThKLHFDQUFxQyxvRUFBb0Usc0NBQXNDLG9FQUFvRSxnQ0FBZ0MsOEJBQThCLDBCQUEwQixLQUFLLDZIQUE2SCxzQ0FBc0MsNkxBQTZMLGtDQUFrQywwRUFBMEUscUNBQXFDLGdCQUFnQixxQ0FBcUMsZ0JBQWdCLHFDQUFxQyw2Q0FBNkMscUNBQXFDLDZDQUE2QyxnQ0FBZ0Msb0JBQW9CLGlDQUFpQyxvQkFBb0IsZ0NBQWdDLG9CQUFvQixpQ0FBaUMsb0JBQW9CLGdDQUFnQyw4Q0FBOEMsaUNBQWlDLHVFQUF1RSxnQ0FBZ0MsNEJBQTRCLHVCQUF1QixxQ0FBcUMsc0JBQXNCLG9GQUFvRix1Q0FBdUMsc0lBQXNJLGtDQUFrQyxnTkFBZ04sb0NBQW9DLGdDQUFnQyxrQ0FBa0MsZ0NBQWdDLGdGQUFnRixvREFBb0Qsa0JBQWtCLG9CQUFvQiwrUEFBK1AsY0FBYywrSUFBK0kseUJBQXlCLDBIQUEwSCxXQUFXLHFDQUFxQyxrQkFBa0IsNERBQTRELHdJQUF3SSw0Q0FBNEMsOEJBQThCLDJDQUEyQyxJQUFJLEVBQUUsaUNBQWlDLDhEQUE4RCwrQkFBK0IsdUJBQXVCLGtDQUFrQyxrQkFBa0IsZ0JBQWdCLG9DQUFvQyxvRUFBb0UsNFFBQTRRLGdCQUFnQiw0UUFBNFEsb1FBQW9RLG1DQUFtQyxrQ0FBa0Msd0NBQXdDLG9CQUFvQixvQ0FBb0Msd0RBQXdELHdDQUF3QyxvQkFBb0Isc0NBQXNDLFNBQVMsR0FBRywwQkFBMEIsb0JBQW9CLG1OQUFtTix5REFBeUQsMEhBQTBILFdBQVcscUNBQXFDLGtCQUFrQiw0REFBNEQsd0lBQXdJLDRDQUE0Qyw4QkFBOEIsMkNBQTJDLElBQUksRUFBRSwrQkFBK0IsdUJBQXVCLGtDQUFrQyxrQkFBa0IsZ0JBQWdCLGlDQUFpQyw4REFBOEQsb0NBQW9DLHNGQUFzRixxRkFBcUYseURBQXlELGlDQUFpQyxXQUFXLHNGQUFzRixtQ0FBbUMsOEVBQThFLGFBQWEsK0JBQStCLGFBQWEscVBBQXFQLEVBQUUscUNBQXFDLG9EQUFvRCxzQ0FBc0MsMkRBQTJELHNDQUFzQyxTQUFTLEdBQUcsMEJBQTBCLG9CQUFvQixxRkFBcUYsdUNBQXVDLCtIQUErSCxPQUFPLGtIQUFrSCxvQ0FBb0MsK0VBQStFLHFGQUFxRix5REFBeUQsaUNBQWlDLFdBQVcseUZBQXlGLDJCQUEyQiwrRUFBK0UsZ0dBQWdHLDZGQUE2RixlQUFlLG9FQUFvRSw4Q0FBOEMsMkhBQTJILGlFQUFpRSxjQUFjLDJEQUEyRCxjQUFjLHFFQUFxRSxjQUFjLG9FQUFvRSxjQUFjLDZEQUE2RCxjQUFjLHdFQUF3RSxjQUFjLG9FQUFvRSxjQUFjLDZEQUE2RCxjQUFjLElBQUksb0NBQW9DLDBNQUEwTSx5QkFBeUIsb0JBQW9CLEdBQUcsa0JBQWtCLG9CQUFvQixtUEFBbVAsd0pBQXdKLGdDQUFnQyw2QkFBNkIsdURBQXVELG9LQUFvSyxzQkFBc0IscUpBQXFKLGtCQUFrQiwwSEFBMEgsV0FBVyxxQ0FBcUMsa0JBQWtCLHNDQUFzQyxpQ0FBaUMsS0FBSyxPQUFPLDZDQUE2QyxrS0FBa0ssRUFBRSwrQkFBK0IsdUJBQXVCLGlDQUFpQyxXQUFXLHlEQUF5RCxrQkFBa0Isc0NBQXNDLHdDQUF3QyxPQUFPLDRDQUE0QyxpS0FBaUssT0FBTywyQ0FBMkMsNEJBQTRCLGtDQUFrQywwVEFBMFQseU5BQXlOLGdCQUFnQixvQ0FBb0MsNERBQTRELDRNQUE0TSxrREFBa0Qsa0hBQWtILGdCQUFnQixtQ0FBbUMsYUFBYSxvQ0FBb0Msd0RBQXdELHdDQUF3QyxrQkFBa0IsaUNBQWlDLHNEQUFzRCw4QkFBOEIscUJBQXFCLGtDQUFrQyxrQkFBa0IsZ0JBQWdCLCtCQUErQixFQUFFLHNDQUFzQyxTQUFTLEdBQUcsK0JBQStCLHVDQUF1QyxFQUFFLCtDQUErQyxnQkFBZ0Isa01BQWtNLDJDQUEyQyxlQUFlLDZEQUE2RCxlQUFlLG1EQUFtRCwwTUFBME0saUpBQWlKLCtDQUErQyw4Q0FBOEMscVZBQXFWLEtBQUssNEJBQTRCLFlBQVksSUFBSSxrQ0FBa0Msd0JBQXdCLGdCQUFnQixXQUFXLGdDQUFnQyxnR0FBZ0csZ0JBQWdCLFdBQVcsTUFBTSxXQUFXLDBDQUEwQyxtSUFBbUksZ0NBQWdDLDRGQUE0RixtQkFBbUIsb0JBQW9CLHdKQUF3Six5Q0FBeUMsMEhBQTBILFdBQVcscUNBQXFDLGtCQUFrQixnSEFBZ0gsZ0ZBQWdGLEVBQUUsdUNBQXVDLCtFQUErRSw0Q0FBNEMsSUFBSSwrQkFBK0IsdUJBQXVCLHdDQUF3QyxtQkFBbUIsbUNBQW1DLDhEQUE4RCwrQ0FBK0MsZ0pBQWdKLHdCQUF3Qix1QkFBdUIsMEdBQTBHLEVBQUUscVlBQXFZLDJDQUEyQyxRQUFRLGdDQUFnQyxtREFBbUQsc0NBQXNDLDZQQUE2UCxvQkFBb0IsZ0VBQWdFLG9DQUFvQyxxR0FBcUcsc0NBQXNDLGtDQUFrQyxPQUFPLGdFQUFnRSxzQ0FBc0MsU0FBUyxHQUFHLDJCQUEyQixvQkFBb0Isd0VBQXdFLDBIQUEwSCwwQkFBMEIsYUFBYSxxQkFBcUIsV0FBVyxNQUFNLFdBQVcsa0VBQWtFLG1DQUFtQywwR0FBMEcsa0JBQWtCLDRDQUE0QyxFQUFFLGlDQUFpQyxrQkFBa0IsK0JBQStCLHlHQUF5RyxnQ0FBZ0MsbUVBQW1FLHNDQUFzQyxtWUFBbVksb0JBQW9CLGdFQUFnRSxrQ0FBa0MsT0FBTywwREFBMEQsc0NBQXNDLHNDQUFzQyxHQUFHLG9CQUFvQixvQkFBb0IsMkhBQTJILDBEQUEwRCx5QkFBeUIsRUFBRSwrMEJBQSswQiwwSEFBMEgsa1hBQWtYLHNDQUFzQyx1QkFBdUIsaUJBQWlCLHdCQUF3QixrQ0FBa0MsbUJBQW1CLCtCQUErQiw4REFBOEQsaUNBQWlDLGFBQWEsZ0NBQWdDLFNBQVMsa05BQWtOLHNDQUFzQyxvYUFBb2Esb0JBQW9CLGdFQUFnRSxrQ0FBa0MsT0FBTyw0Q0FBNEMsc0NBQXNDLHFCQUFxQiw4Q0FBOEMscURBQXFELFdBQVcsTUFBTSxXQUFXLDJCQUEyQixTQUFTLEdBQUcsU0FBUyx1RUFBdUUsc0JBQXNCLDhCQUE4QiwrRUFBK0UsdUVBQXVFLHVCQUF1QiwrQ0FBK0MsV0FBVyxxQkFBcUIsV0FBVyxNQUFNLFdBQVcsUUFBUSx1S0FBdUssRUFBRSxtQkFBbUIsWUFBWSxLQUFLLFNBQVMsV0FBVyxNQUFNLDhEQUE4RCw2Q0FBNkMseUJBQXlCLFdBQVcsTUFBTSxXQUFXLDZEQUE2RCxTQUFTLElBQUksaUJBQWlCLDBCQUEwQiw0R0FBNEcscUJBQXFCLCtFQUErRSwrRkFBK0YsOENBQThDLHVCQUF1QixzRUFBc0Usc0NBQXNDLDhFQUE4RSw2Q0FBNkMsa0VBQWtFLDhUQUE4VCxTQUFTLGVBQWUsZ0JBQWdCLFdBQVcsTUFBTSx3Q0FBd0MscUJBQXFCLGtCQUFrQixpQkFBaUIsV0FBVyxnQkFBZ0IsV0FBVyxtQkFBbUIsU0FBUyxpREFBaUQsc0JBQXNCLCtDQUErQywrQ0FBK0Msc0JBQXNCLDZGQUE2RixxSEFBcUgsb0RBQW9ELDBDQUEwQyxvREFBb0QsZUFBZSxvS0FBb0ssdUNBQXVDLCtEQUErRCxvQ0FBb0MsMEJBQTBCLGlDQUFpQywyQkFBMkIsc0JBQXNCLHdDQUF3QyxXQUFXLHlOQUF5Tiw0REFBNEQsbUdBQW1HLGlIQUFpSCxPQUFPLGdEQUFnRCxpRUFBaUUsOEZBQThGLDRDQUE0Qyw4RUFBOEUsS0FBSyxXQUFXLEtBQUssbUJBQW1CLG1EQUFtRCxzQ0FBc0Msc0JBQXNCLG1DQUFtQyxtUEFBbVAsb0NBQW9DLDhFQUE4RSxLQUFLLElBQUkseURBQXlELG1FQUFtRSw2QkFBNkIsV0FBVyxLQUFLLHFJQUFxSSw0SEFBNEgscUJBQXFCLDJGQUEyRix5R0FBeUcsaUNBQWlDLDhFQUE4RSx3Q0FBd0MsMEJBQTBCLG1CQUFtQiwwQ0FBMEMsZ0VBQWdFLG9FQUFvRSx3QkFBd0Isc0JBQXNCLDhCQUE4Qix3Q0FBd0MsS0FBSyw0QkFBNEIsNkNBQTZDLFVBQVUsZ0ZBQWdGLDBDQUEwQyw2S0FBNksscUJBQXFCLHlDQUF5Qyw4QkFBOEIsa0RBQWtELFdBQVcsTUFBTSxXQUFXLDBEQUEwRCxtQkFBbUIsb0JBQW9CLGtDQUFrQyw2QkFBNkIseUNBQXlDLE9BQU8sd0JBQXdCLGdEQUFnRCxjQUFjLHlFQUF5RSw2Q0FBNkMsb0JBQW9CLFlBQVksOEJBQThCLG9DQUFvQyx1Q0FBdUMsaUVBQWlFLDZDQUE2QywyQkFBMkIsMElBQTBJLDhCQUE4Qiw0REFBNEQsbUNBQW1DLDRCQUE0QiwrRUFBK0UsdUxBQXVMLHFDQUFxQyxlQUFlLDJCQUEyQixFQUFFLDZDQUE2QyxvQkFBb0IsYUFBYSx1QkFBdUIsZUFBZSxXQUFXLHdQQUF3UCxrQ0FBa0MsNkVBQTZFLDhCQUE4QixnREFBZ0QscUNBQXFDLHNCQUFzQixxRkFBcUYsaUNBQWlDLHNCQUFzQiwrREFBK0QsUUFBUSwwSEFBMEgsc0JBQXNCLHlHQUF5RyxXQUFXLGtNQUFrTSw2QkFBNkIsK0NBQStDLHFDQUFxQyxzQkFBc0IsNERBQTRELDZDQUE2QyxZQUFZLHlCQUF5QixLQUFLLGdEQUFnRCwwQ0FBMEMsc0RBQXNELFlBQVkseUJBQXlCLEtBQUssZ0RBQWdELGdIQUFnSCxpQ0FBaUMsc0JBQXNCLCtEQUErRCxtQkFBbUIscURBQXFELDRCQUE0QixvQkFBb0IsOEJBQThCLG1CQUFtQiwwR0FBMEcsbUJBQW1CLCtCQUErQiw0QkFBNEIsb0JBQW9CLDhCQUE4QixrRUFBa0UsbUJBQW1CLCtCQUErQiw0QkFBNEIsb0JBQW9CLDhCQUE4QixvRUFBb0UsbUJBQW1CLDJDQUEyQyw0QkFBNEIsb0JBQW9CLDhCQUE4QixtQkFBbUIscUhBQXFILG1CQUFtQixnQ0FBZ0MsNEJBQTRCLG9CQUFvQiw4QkFBOEIsaUVBQWlFLG1CQUFtQixpQ0FBaUMsNEJBQTRCLG9CQUFvQiw4QkFBOEIsbUVBQW1FLG1CQUFtQiw2QkFBNkIsa0NBQWtDLDRCQUE0QixvQkFBb0IsOEJBQThCLG1CQUFtQixvSEFBb0gsbUJBQW1CLGVBQWUsc0JBQXNCLHFDQUFxQyw0QkFBNEIsb0JBQW9CLDhCQUE4QixtQkFBbUIsbUdBQW1HLG1CQUFtQixnQ0FBZ0MsNEJBQTRCLG9CQUFvQiw4QkFBOEIscUJBQXFCLHNCQUFzQixzRUFBc0UsbUJBQW1CLG1DQUFtQyw0QkFBNEIsb0JBQW9CLDhCQUE4QixtQkFBbUIsa0ZBQWtGLG1CQUFtQixnQ0FBZ0MsNEJBQTRCLG9CQUFvQiw4QkFBOEIscUJBQXFCLHNCQUFzQixrRUFBa0UsbUJBQW1CLHVDQUF1Qyw0QkFBNEIsb0JBQW9CLDhCQUE4QixpRUFBaUUsbUJBQW1CLGdDQUFnQyw0QkFBNEIsb0JBQW9CLDhCQUE4QixxQkFBcUIsc0JBQXNCLHdEQUF3RCxtQkFBbUIsZUFBZSxzQkFBc0IsNkJBQTZCLDRCQUE0QixvQkFBb0IsOEJBQThCLG1CQUFtQixpRkFBaUYsbUJBQW1CLHFEQUFxRCw0QkFBNEIsb0JBQW9CLDhCQUE4QixtQkFBbUIsMEdBQTBHLG1CQUFtQixrQ0FBa0MsNEJBQTRCLG9CQUFvQiw4QkFBOEIsa0VBQWtFLG1CQUFtQiwrQkFBK0IsNEJBQTRCLG9CQUFvQiw4QkFBOEIseURBQXlELGlFQUFpRSxtQkFBbUIsMkNBQTJDLDRCQUE0QixvQkFBb0IsOEJBQThCLHFFQUFxRSxtQkFBbUIsZUFBZSxzQkFBc0IsK0RBQStELDRCQUE0QixvQkFBb0IsOEJBQThCLG1CQUFtQixvSEFBb0gsbUJBQW1CLGtDQUFrQyw0QkFBNEIsb0JBQW9CLDhCQUE4QixxQkFBcUIsc0JBQXNCLG9EQUFvRCxtQkFBbUIsa0NBQWtDLDRCQUE0QixvQkFBb0IsOEJBQThCLHFCQUFxQixzQkFBc0Isc0RBQXNELG1CQUFtQixrQ0FBa0MsNEJBQTRCLG9CQUFvQiw4QkFBOEIscUJBQXFCLHNCQUFzQiwrQ0FBK0MsbUJBQW1CLGtDQUFrQyw0QkFBNEIsb0JBQW9CLDhCQUE4QixxQkFBcUIsc0JBQXNCLGdEQUFnRCxtQkFBbUIsa0NBQWtDLDRCQUE0QixvQkFBb0IsOEJBQThCLHNCQUFzQix1REFBdUQsbUJBQW1CLGtDQUFrQyw0QkFBNEIsb0JBQW9CLDhCQUE4QiwrSEFBK0gsbUJBQW1CLCtCQUErQiw0QkFBNEIsb0JBQW9CLDhCQUE4QixxQkFBcUIsc0JBQXNCLHFEQUFxRCxtQkFBbUIsZ0NBQWdDLDRCQUE0QixvQkFBb0IsOEJBQThCLHFCQUFxQixzQkFBc0IsbUVBQW1FLHFCQUFxQixnREFBZ0QsNEJBQTRCLHFCQUFxQixtQkFBbUIsZ0JBQWdCLCtCQUErQiwwSEFBMEgsaUNBQWlDLHNCQUFzQix1SkFBdUosaUNBQWlDLGNBQWMsR0FBRyxvQkFBb0IsYUFBYSx3QkFBd0IsMEhBQTBILHFCQUFxQixzQkFBc0IsMklBQTJJLEdBQUcsd0JBQXdCLDBDQUEwQyxvREFBb0QsbUVBQW1FLGdDQUFnQyxtREFBbUQsc0JBQXNCLGlDQUFpQyxrRUFBa0UsdUJBQXVCLHNDQUFzQyx5RUFBeUUsNkJBQTZCLDZFQUE2RSxvQkFBb0IsZ0JBQWdCLHFCQUFxQix1QkFBdUIsb0RBQW9ELHVOQUF1TixtQkFBbUIsdTlDQUF1OUMsNkNBQTZDLHdCQUF3QixpREFBaUQsMEJBQTBCLGlEQUFpRCx1Q0FBdUMsa0hBQWtILDhDQUE4Qyx3QkFBd0IsZ0NBQWdDLHNDQUFzQyxpTEFBaUwsdUNBQXVDLG1LQUFtSyx5Q0FBeUMsa0tBQWtLLDRDQUE0Qyw0QkFBNEIsdUNBQXVDLG1MQUFtTCxtQkFBbUIsa0JBQWtCLFdBQVcsb0VBQW9FLDZNQUE2TSw2QkFBNkIsb0JBQW9CLDRDQUE0QyxrRUFBa0UscUJBQXFCLHdHQUF3Ryw0SEFBNEgscUhBQXFILGtDQUFrQyw4REFBOEQsK0JBQStCLGdDQUFnQyxnQ0FBZ0MsMEJBQTBCLHFCQUFxQixvREFBb0QsU0FBUyxrQ0FBa0Msb0JBQW9CLDhCQUE4QixnQkFBZ0IsK0JBQStCLGlCQUFpQixpQ0FBaUMsNEdBQTRHLHFDQUFxQyxrQ0FBa0MscUNBQXFDLHdFQUF3RSxFQUFFLG9DQUFvQyxzRUFBc0UsRUFBRSxrQ0FBa0MsZ0NBQWdDLGlDQUFpQywrRkFBK0YsK0JBQStCLFdBQVcsK0RBQStELGdNQUFnTSxxREFBcUQsRUFBRSx5Q0FBeUMsa0RBQWtELDZDQUE2QyxrQ0FBa0MsRUFBRSw4Q0FBOEMseUNBQXlDLHdFQUF3RSwrQkFBK0IsOENBQThDLGtGQUFrRix1Q0FBdUMscUJBQXFCLDBGQUEwRiwyQ0FBMkMsd0ZBQXdGLE9BQU8sZ0NBQWdDLHdNQUF3TSx3Q0FBd0MsdURBQXVELHNDQUFzQyxzQ0FBc0MsV0FBVyxLQUFLLFdBQVcsOENBQThDLDBCQUEwQixlQUFlLGdCQUFnQiwyQkFBMkIsOElBQThJLG1PQUFtTyxpQ0FBaUMsK0JBQStCLHFDQUFxQyxzQkFBc0IsaUNBQWlDLDREQUE0RCxpREFBaUQsU0FBUywwQkFBMEIscUJBQXFCLHVGQUF1RixxREFBcUQsaUlBQWlJLHdDQUF3QyxFQUFFLGdEQUFnRCxZQUFZLGdFQUFnRSxTQUFTLDhDQUE4QywwQkFBMEIsS0FBSyxLQUFLLG9CQUFvQixhQUFhLHFDQUFxQyxrQ0FBa0Msd0RBQXdELHlDQUF5QyxrTUFBa00sMEJBQTBCLHdDQUF3Qyx1RUFBdUUsc0JBQXNCLFNBQVMsMEJBQTBCLHFCQUFxQiw4REFBOEQsNkZBQTZGLDBCQUEwQixxQkFBcUIsZ0NBQWdDLGdDQUFnQyxXQUFXLHVEQUF1RCxNQUFNLDRGQUE0Rix1R0FBdUcsOEZBQThGLHNCQUFzQiwyS0FBMkssZ0RBQWdELDRCQUE0QixTQUFTLHVOQUF1TixzREFBc0QsV0FBVyxLQUFLLGdDQUFnQyx3REFBd0QsdUNBQXVDLGdDQUFnQyx5QkFBeUIseUNBQXlDLHFCQUFxQiw4Q0FBOEMsV0FBVyx5QkFBeUIsZ0RBQWdELFlBQVksS0FBSyw4R0FBOEcsV0FBVyxLQUFLLG1DQUFtQywwQkFBMEIsS0FBSyw4QkFBOEIsU0FBUyw2QkFBNkIsNERBQTRELCtCQUErQixLQUFLLGdDQUFnQywrQ0FBK0MsV0FBVyxxQkFBcUIsS0FBSyxPQUFPLGdDQUFnQyxLQUFLLEtBQUssb0JBQW9CLGtCQUFrQixvSEFBb0gsU0FBUyxrQ0FBa0MseUJBQXlCLGNBQWMsZ0ZBQWdGLGlCQUFpQixpTkFBaU4sd0NBQXdDLFdBQVcsK0NBQStDLFdBQVcsMEVBQTBFLDJCQUEyQiwwQ0FBMEMsK0NBQStDLEtBQUsscUNBQXFDLHFCQUFxQiwyT0FBMk8sbUNBQW1DLDJGQUEyRixvQkFBb0IsbUNBQW1DLHVFQUF1RSxXQUFXLEtBQUssV0FBVyxzRkFBc0YsWUFBWSxXQUFXLEtBQUssc01BQXNNLHlFQUF5RSxpQkFBaUIsV0FBVyx1QkFBdUIsUUFBUSwwQ0FBMEMsR0FBRyxTQUFTLDhDQUE4Qyx5REFBeUQsMEJBQTBCLFVBQVUsV0FBVyxNQUFNLFdBQVcsNERBQTRELFNBQVMsc0NBQXNDLHlDQUF5QyxtREFBbUQscUJBQXFCLDJEQUEyRCxTQUFTLEdBQUcsWUFBWSxpQkFBaUIsOEJBQThCLGtJQUFrSSxlQUFlLDZDQUE2QyxjQUFjLDBDQUEwQywwQ0FBMEMscUJBQXFCLGdCQUFnQixpQkFBaUIsU0FBUyxzQ0FBc0Msd0NBQXdDLG9CQUFvQixJQUFJLGVBQWUsWUFBWSxrQ0FBa0MsV0FBVyxvQkFBb0IsWUFBWSxXQUFXLDhDQUE4QyxTQUFTLGlDQUFpQyxrQkFBa0IscUJBQXFCLG9CQUFvQixzQkFBc0IsMkJBQTJCLDhDQUE4QyxrQ0FBa0MsNkZBQTZGLGNBQWMsc0JBQXNCLFFBQVEsNmZBQTZmLG1CQUFtQixRQUFRLG1DQUFtQyxFQUFFLG1CQUFtQixRQUFRLGlDQUFpQyxVQUFVLHFCQUFxQixvQkFBb0IsbUJBQW1CLE1BQU0sNkZBQTZGLDZGQUE2RixTQUFTLHlCQUF5QixNQUFNLGdCQUFnQixRQUFRLHdEQUF3RCw0QkFBNEIsR0FBRyx3RkFBd0YsNEJBQTRCLEdBQUcsZUFBZSxZQUFZLGlCQUFpQixtQkFBbUIsdUJBQXVCLDZDQUE2Qyw4REFBOEQsWUFBWSxrQ0FBa0MsMEJBQTBCLHlMQUF5TCxtQ0FBbUMsa0RBQWtELHlDQUF5QyxrS0FBa0ssNkNBQTZDLGtLQUFrSyxtREFBbUQseUJBQXlCLHNEQUFzRCw0QkFBNEIseUNBQXlDLHNEQUFzRCxTQUFTLDhDQUE4QyxjQUFjLFlBQVksc0JBQXNCLFlBQVksMEdBQTBHLEVBQUUsWUFBWSx5QkFBeUIsS0FBSyxvRUFBb0UsUUFBUSxtREFBbUQsR0FBRyxLQUFLLE9BQU8sb0JBQW9CLE1BQU0sYUFBYSwrQ0FBK0Msc0JBQXNCLDZDQUE2Qyw0QkFBNEIsc0RBQXNELFlBQVksa0JBQWtCLGlCQUFpQixXQUFXLE1BQU0sYUFBYSwyRUFBMkUsc0NBQXNDLCtCQUErQix3Q0FBd0MsK0JBQStCLDRDQUE0QyxtQ0FBbUMsaURBQWlELG9DQUFvQywwQ0FBMEMsV0FBVyxNQUFNLFdBQVcsY0FBYyxZQUFZLFVBQVUsK0NBQStDLGtDQUFrQyxRQUFRLDBEQUEwRCxJQUFJLDBCQUEwQiwyQ0FBMkMsV0FBVyxNQUFNLFdBQVcsaUJBQWlCLGVBQWUsVUFBVSwyREFBMkQsa0NBQWtDLDZCQUE2QixRQUFRLG1EQUFtRCxLQUFLLHVEQUF1RCwrQ0FBK0MsMENBQTBDLFdBQVcsTUFBTSxXQUFXLGNBQWMsWUFBWSxVQUFVLGtHQUFrRywwQkFBMEIsMkNBQTJDLFdBQVcsTUFBTSxXQUFXLGlCQUFpQixlQUFlLFVBQVUsb0ZBQW9GLG1EQUFtRCx3SUFBd0ksS0FBSyxnQkFBZ0IsS0FBSyxLQUFLLDBCQUEwQixzQ0FBc0MsK0NBQStDLHlFQUF5RSwrQ0FBK0MseUVBQXlFLG9EQUFvRCxzQkFBc0IsbUJBQW1CLDREQUE0RCxrQ0FBa0Msa0JBQWtCLGtDQUFrQyxrQkFBa0IsdUJBQXVCLGdCQUFnQixxQkFBcUIsMkJBQTJCLHVCQUF1Qiw0Q0FBNEMsaU1BQWlNLHVCQUF1Qiw0Q0FBNEMsc01BQXNNLGlCQUFpQixvQkFBb0IsVUFBVSxXQUFXLE9BQU8saUVBQWlFLGlCQUFpQiw0QkFBNEIsNENBQTRDLDZCQUE2QixvT0FBb08sVUFBVSxrSUFBa0ksV0FBVyxLQUFLLGVBQWUsMEVBQTBFLEtBQUssS0FBSyxnQ0FBZ0Msd0NBQXdDLDZKQUE2SixxREFBcUQsMElBQTBJLHdCQUF3QixnR0FBZ0cscUNBQXFDLHVMQUF1TCxrQkFBa0IsOENBQThDLFVBQVUsZUFBZSxNQUFNLHFCQUFxQiw0RUFBNEUsZUFBZSwrQ0FBK0MsaUJBQWlCLE1BQU0seUNBQXlDLGlEQUFpRCxrQkFBa0Isc0hBQXNILGFBQWEsa0JBQWtCLDJEQUEyRCxVQUFVLDhCQUE4QixjQUFjLFlBQVksOEJBQThCLE1BQU0sbUVBQW1FLGVBQWUsS0FBSyxVQUFVLG1MQUFtTCxjQUFjLHdIQUF3SCxhQUFhLGtCQUFrQixNQUFNLGdCQUFnQixXQUFXLE1BQU0sV0FBVywwQ0FBMEMsU0FBUyx1QkFBdUIscURBQXFELGlDQUFpQyx1Q0FBdUMsK0JBQStCLHVDQUF1QywwREFBMEQsT0FBTyxFQUFFLDhCQUE4QiwwQkFBMEIscURBQXFELCtDQUErQyxLQUFLLFVBQVUsZ0VBQWdFLGlCQUFpQiw2Q0FBNkMsNkNBQTZDLDREQUE0RCxnR0FBZ0csT0FBTywyRUFBMkUsaUJBQWlCLFlBQVksSUFBSSxLQUFLLGVBQWUscUNBQXFDLG1CQUFtQixrQkFBa0Isb0ZBQW9GLGtCQUFrQix1QkFBdUIsa1NBQWtTLG1CQUFtQixhQUFhLG1CQUFtQix1RUFBdUUsaURBQWlELDZLQUE2SyxzQ0FBc0Msb0JBQW9CLEVBQUUsbURBQW1ELDBEQUEwRCwrREFBK0QsMERBQTBELHdFQUF3RSwrS0FBK0ssd0RBQXdELG1MQUFtTCxZQUFZLFdBQVcsTUFBTSxzQ0FBc0MsNEJBQTRCLEtBQUsscUNBQXFDLGVBQWUsNENBQTRDLGdDQUFnQyxhQUFhLGNBQWMsV0FBVyxXQUFXLFVBQVUseUhBQXlILGFBQWEseUJBQXlCLE9BQU8sT0FBTyw0QkFBNEIsK0NBQStDLHdGQUF3RiwrQ0FBK0MsV0FBVyxNQUFNLDhDQUE4QyxrRkFBa0YsWUFBWSxLQUFLLHdFQUF3RSxXQUFXLE1BQU0sbUJBQW1CLDREQUE0RCwwQ0FBMEMsb0hBQW9ILG1MQUFtTCxTQUFTLG1EQUFtRCxPQUFPLG1DQUFtQyw2REFBNkQsdURBQXVELDBDQUEwQyxrQ0FBa0MsS0FBSyxXQUFXLDBDQUEwQyw0Q0FBNEMsZ0JBQWdCLGtCQUFrQix1RkFBdUYsMkNBQTJDLGdCQUFnQixzSEFBc0gsNERBQTRELGdCQUFnQixrQkFBa0IsOEtBQThLLDRDQUE0QywrRUFBK0UsZ0RBQWdELHlGQUF5RixpQ0FBaUMsdUNBQXVDLDJCQUEyQiw2RUFBNkUsaUNBQWlDLG1EQUFtRCx1QkFBdUIsd0NBQXdDLGtCQUFrQixzRkFBc0Ysa0JBQWtCLDhEQUE4RCxtQkFBbUIsNEdBQTRHLDhDQUE4Qyw0Q0FBNEMsK0JBQStCLCtiQUErYixtRUFBbUUscUdBQXFHLHFHQUFxRywyREFBMkQsa09BQWtPLFdBQVcsTUFBTSxXQUFXLHNCQUFzQiwwRkFBMEYsK1hBQStYLG9DQUFvQyxNQUFNLGdIQUFnSCw2T0FBNk8sa3FCQUFrcUIsa0JBQWtCLG1DQUFtQyxrQkFBa0IsMEdBQTBHLDhCQUE4QixnQ0FBZ0Msb0xBQW9MLGdCQUFnQixXQUFXLHVCQUF1Qix3QkFBd0IsdUVBQXVFLDZJQUE2SSxpREFBaUQsWUFBWSxTQUFTLFdBQVcsTUFBTSw0QkFBNEIsb0dBQW9HLG9EQUFvRCxzUEFBc1AsdUlBQXVJLDJCQUEyQixLQUFLLDhFQUE4RSxtRUFBbUUsK0VBQStFLE1BQU0sNkVBQTZFLElBQUksNkNBQTZDLHdDQUF3QyxXQUFXLE1BQU0sV0FBVywwREFBMEQsTUFBTSx5QkFBeUIsc0JBQXNCLDZDQUE2Qyx5REFBeUQsa0pBQWtKLHdCQUF3QixNQUFNLDBMQUEwTCxvQkFBb0IsNkNBQTZDLFdBQVcsTUFBTSxvQkFBb0IsNkRBQTZELGtyQkFBa3JCLDJDQUEyQyxxRUFBcUUseUNBQXlDLG9FQUFvRSxzQ0FBc0MseUVBQXlFLGtDQUFrQyxlQUFlLCtIQUErSCxlQUFlLHFDQUFxQyw2Q0FBNkMsK0NBQStDLDRDQUE0QyxrQkFBa0Isb0RBQW9ELG1EQUFtRCxLQUFLLGdDQUFnQyxFQUFFLGdDQUFnQywwRkFBMEYsMkJBQTJCLHVJQUF1SSwrQkFBK0Isa0JBQWtCLGdEQUFnRCxzQ0FBc0MsZ0JBQWdCLG1DQUFtQywrQkFBK0IsRUFBRSxpRkFBaUYsNkVBQTZFLGtKQUFrSiwwQkFBMEIsMkJBQTJCLGNBQWMsbUNBQW1DLGtEQUFrRCw0Q0FBNEMsNENBQTRDLHlCQUF5QixnQkFBZ0IsV0FBVyxNQUFNLG1CQUFtQix5R0FBeUcsK0RBQStELElBQUksZ0RBQWdELDBFQUEwRSxPQUFPLGlHQUFpRywwQ0FBMEMsNEdBQTRHLFdBQVcsTUFBTSxXQUFXLG1CQUFtQix5Q0FBeUMsc0RBQXNELFdBQVcsTUFBTSxXQUFXLDhFQUE4RSxnREFBZ0QsV0FBVyxrQkFBa0IsdUJBQXVCLGlDQUFpQyw2QkFBNkIsa0JBQWtCLGVBQWUseUJBQXlCLGFBQWEsd0NBQXdDLG1DQUFtQyxvQ0FBb0MsMkJBQTJCLGdCQUFnQixXQUFXLDhEQUE4RCxrQkFBa0IsV0FBVyx3Q0FBd0Msb0VBQW9FLHFGQUFxRixnRkFBZ0YsZ0NBQWdDLFdBQVcsd0JBQXdCLDhFQUE4RSxFQUFFLDJDQUEyQywyQkFBMkIsc0JBQXNCLDJDQUEyQyxXQUFXLDREQUE0RCxLQUFLLG1DQUFtQyx5Q0FBeUMsZ0NBQWdDLFdBQVcsTUFBTSxXQUFXLGdFQUFnRSw0RUFBNEUsdUZBQXVGLHFEQUFxRCxnRkFBZ0YsV0FBVyxNQUFNLFdBQVcsZ0RBQWdELDZDQUE2QyxTQUFTLDJCQUEyQixzQkFBc0Isa0dBQWtHLFVBQVUsa0JBQWtCLG9CQUFvQix3RkFBd0Ysc0NBQXNDLDhCQUE4QiwrQ0FBK0MsY0FBYyxvQkFBb0IsZ0JBQWdCLFdBQVcsTUFBTSw0QkFBNEIsMEtBQTBLLHlDQUF5Qyw0Q0FBNEMsU0FBUyxtQ0FBbUMsUUFBUSx1REFBdUQscUJBQXFCLHdEQUF3RCxxQ0FBcUMsR0FBRywyUUFBMlEsZ0JBQWdCLFdBQVcsaUJBQWlCLHlQQUF5UCxvQ0FBb0Msd0VBQXdFLFdBQVcsd0VBQXdFLG9JQUFvSSw2QkFBNkIseURBQXlELGlDQUFpQyxNQUFNLG9CQUFvQiwrQ0FBK0MsbUJBQW1CLHdDQUF3QyxFQUFFLGdJQUFnSSxXQUFXLGlCQUFpQix1Q0FBdUMsaUJBQWlCLEdBQUcsb0RBQW9ELGdCQUFnQixrQkFBa0IsV0FBVyx5Q0FBeUMsa0JBQWtCLHlEQUF5RCwwQkFBMEIsOENBQThDLEVBQUUsb0NBQW9DLFdBQVcsaUJBQWlCLHVDQUF1QyxpQkFBaUIsc0JBQXNCLDJCQUEyQixFQUFFLGlDQUFpQyxXQUFXLHFDQUFxQyxxRkFBcUYsWUFBWSxFQUFFLHlCQUF5QiwwQ0FBMEMsYUFBYSxVQUFVLGNBQWMsNkJBQTZCLGdCQUFnQixzRkFBc0YsaUJBQWlCLEVBQUUsc0JBQXNCLFFBQVEsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLFFBQVEsMkJBQTJCLFdBQVcsb0VBQW9FLGlCQUFpQix1RUFBdUUsaUJBQWlCLEVBQUUsbURBQW1ELGlDQUFpQyx5REFBeUQsd0RBQXdELGlCQUFpQixHQUFHLHFFQUFxRSxpQ0FBaUMsOEJBQThCLFlBQVksa0JBQWtCLGdCQUFnQixXQUFXLE1BQU0sV0FBVyx3Q0FBd0MsT0FBTyxTQUFTLG9CQUFvQixnSkFBZ0osaUJBQWlCLHlDQUF5Qyx3Q0FBd0Msa0NBQWtDLE1BQU0sb0JBQW9CLE1BQU0sb0JBQW9CLHNOQUFzTiwrQkFBK0IsMEJBQTBCLHFEQUFxRCwwRUFBMEUscUNBQXFDLDBDQUEwQyxXQUFXLHlCQUF5QixnQ0FBZ0MsRUFBRSx1Q0FBdUMsbURBQW1ELGdGQUFnRixzRUFBc0UsU0FBUyxxQ0FBcUMsOERBQThELGdDQUFnQyxpQkFBaUIsa0JBQWtCLDBFQUEwRSxzRkFBc0YsOEJBQThCLHFFQUFxRSwwRUFBMEUsbUZBQW1GLGlCQUFpQixHQUFHLDREQUE0RCwwQkFBMEIsV0FBVyxNQUFNLDZCQUE2QixzRkFBc0YseUNBQXlDLCtDQUErQywwQ0FBMEMsNkNBQTZDLEVBQUUsc0NBQXNDLHVDQUF1Qyx1QkFBdUIsd0JBQXdCLDRCQUE0QixrQ0FBa0MsV0FBVyw0REFBNEQsbUNBQW1DLG9CQUFvQixjQUFjLDZCQUE2QixFQUFFLFNBQVMsSUFBSSw4Q0FBOEMsNkJBQTZCLEVBQUUseUNBQXlDLHFDQUFxQyx1Q0FBdUMsaUNBQWlDLDZDQUE2Qyx1Q0FBdUMseUNBQXlDLG1DQUFtQywyQ0FBMkMscUNBQXFDLDJDQUEyQyxxQ0FBcUMsbURBQW1ELDZDQUE2Qyx5Q0FBeUMsbUNBQW1DLEVBQUUsUUFBUSxNQUFNLG1CQUFtQixNQUFNLGdCQUFnQixRQUFRLHVEQUF1RCwrSUFBK0ksbURBQW1ELDBCQUEwQiwwQkFBMEIsU0FBUyx1Q0FBdUMsb0JBQW9CLG1DQUFtQyxZQUFZLGdDQUFnQyxRQUFRLGtFQUFrRSxrQkFBa0Isb0NBQW9DLFlBQVksV0FBVyw0Q0FBNEMsZ0NBQWdDLDhCQUE4QixZQUFZLFdBQVcseUVBQXlFLGdDQUFnQyx1RUFBdUUsa0NBQWtDLG9DQUFvQyxRQUFRLFdBQVcsd0tBQXdLLHVKQUF1Six1Q0FBdUMsZ0ZBQWdGLDBEQUEwRCwyTkFBMk4sNENBQTRDLEdBQUcsd1BBQXdQLDRDQUE0QyxHQUFHLGFBQWEsZ0NBQWdDLGtDQUFrQywrQkFBK0IsRUFBRSxlQUFlLFNBQVMsb0RBQW9ELDZCQUE2QixFQUFFLFNBQVMsd0NBQXdDLHlCQUF5QixFQUFFLHlCQUF5QiwyQkFBMkIseUJBQXlCLEVBQUUsa0VBQWtFLGlCQUFpQixrQkFBa0IsNkJBQTZCLDBEQUEwRCx1QkFBdUIsb0NBQW9DLDZHQUE2Ryw4REFBOEQsaUJBQWlCLEdBQUcsa0NBQWtDLHFDQUFxQyxxQ0FBcUMsc0dBQXNHLCtEQUErRCxpQkFBaUIsR0FBRyx1Q0FBdUMsV0FBVywrR0FBK0csa0pBQWtKLHNJQUFzSSx3RUFBd0UsdURBQXVELGdEQUFnRCxPQUFPLDJEQUEyRCxzQ0FBc0Msc0NBQXNDLHdHQUF3RywyS0FBMkssMkJBQTJCLHNGQUFzRix1REFBdUQsNkZBQTZGLGdEQUFnRCxpRkFBaUYsbUNBQW1DLDhEQUE4RCxzQ0FBc0Msb0JBQW9CLFdBQVcsK0dBQStHLDBGQUEwRixTQUFTLHdEQUF3RCxjQUFjLEtBQUssc0JBQXNCLGdEQUFnRCxPQUFPLE1BQU0sRUFBRSxrREFBa0QseUdBQXlHLEtBQUssNEdBQTRHLDZCQUE2QixtS0FBbUssdUJBQXVCLHFDQUFxQyx5REFBeUQsVUFBVSw2QkFBNkIsd0JBQXdCLGtEQUFrRCw4SkFBOEosd0hBQXdILHFDQUFxQyxvQkFBb0Isc0JBQXNCLE1BQU0seUJBQXlCLDZCQUE2QixvTEFBb0wsMEhBQTBILGtDQUFrQyx1QkFBdUIsK0NBQStDLG9CQUFvQix1QkFBdUIsZ09BQWdPLHFDQUFxQyxvQkFBb0IsdUJBQXVCLE1BQU0sNE1BQTRNLDJIQUEySCxtQ0FBbUMsd0NBQXdDLCtDQUErQyxvQkFBb0IsdUJBQXVCLDhNQUE4TSw2Q0FBNkMsNkNBQTZDLDhDQUE4QyxvQkFBb0IsdUJBQXVCLE1BQU0sMkNBQTJDLDZEQUE2RCwwSkFBMEoseUhBQXlILDRDQUE0Qyw0Q0FBNEMsc0NBQXNDLGlCQUFpQixxQkFBcUIsOENBQThDLGtDQUFrQyxXQUFXLHVCQUF1QixnWUFBZ1kscUJBQXFCLHFDQUFxQyxnQ0FBZ0MsRUFBRSxhQUFhLGtCQUFrQixFQUFFLHNDQUFzQyx1S0FBdUssa0RBQWtELG9DQUFvQyxLQUFLLHFDQUFxQyxXQUFXLE1BQU0sY0FBYyxxQkFBcUIsV0FBVyxNQUFNLFdBQVcsV0FBVyxTQUFTLG1EQUFtRCw0RkFBNEYsU0FBUyxnQkFBZ0Isb0hBQW9ILHVCQUF1QixXQUFXLE1BQU0sNkJBQTZCLGtKQUFrSixnQkFBZ0IsU0FBUyxvSEFBb0gsa0RBQWtELFlBQVksbUVBQW1FLFdBQVcsTUFBTSxXQUFXLGFBQWEsV0FBVyxxQkFBcUIsNkhBQTZILGdCQUFnQiwyQkFBMkIscUJBQXFCLHlCQUF5QixNQUFNLGdDQUFnQyxtQ0FBbUMscUNBQXFDLEVBQUUsZ0JBQWdCLFdBQVcsTUFBTSxXQUFXLG9CQUFvQixTQUFTLFdBQVcsU0FBUyxTQUFTLDZIQUE2SCwrQ0FBK0MsMEZBQTBGLDJCQUEyQix1QkFBdUIsK0NBQStDLHdCQUF3QixXQUFXLEtBQUssV0FBVyxLQUFLLG9DQUFvQywyQ0FBMkMsU0FBUyxTQUFTLDJDQUEyQyxrTEFBa0wsNkJBQTZCLGtCQUFrQixpQ0FBaUMsNkJBQTZCLGtDQUFrQyxvQkFBb0IsaUNBQWlDLDRDQUE0QyxLQUFLLE1BQU0sTUFBTSxPQUFPLGlDQUFpQyxxQkFBcUIsOEJBQThCLHdEQUF3RCwyQ0FBMkMsc0VBQXNFLDJEQUEyRCxNQUFNLGdDQUFnQyw4SEFBOEgseUJBQXlCLHNDQUFzQyxrQ0FBa0MsdUNBQXVDLDREQUE0RCx3Q0FBd0MsOERBQThELGdEQUFnRCxxREFBcUQsOENBQThDLHNCQUFzQixtQkFBbUIsV0FBVyxNQUFNLDZCQUE2QixzQkFBc0IsaUJBQWlCLGtDQUFrQyxpREFBaUQsd0JBQXdCLHFCQUFxQix1RkFBdUYsRUFBRSxxRUFBcUUsUUFBUSx5REFBeUQsOEJBQThCLDRmQUE0ZixXQUFXLE1BQU0sNkJBQTZCLHNFQUFzRSxnRkFBZ0YsdUNBQXVDLHVDQUF1Qyx1Q0FBdUMsd0NBQXdDLEdBQUcsWUFBWSw2QkFBNkIsYUFBYSxnQ0FBZ0MsUUFBUSxrRUFBa0Usd0JBQXdCLHVDQUF1QyxPQUFPLFNBQVMsc0RBQXNELG1OQUFtTixxYUFBcWEsNENBQTRDLG9DQUFvQyxpREFBaUQsR0FBRyxvREFBb0QsOENBQThDLHNFQUFzRSxHQUFHLHdSQUF3Uix5SEFBeUgsR0FBRyxrSUFBa0ksb0RBQW9ELEdBQUcsa0lBQWtJLDJFQUEyRSwyRUFBMkUsd0NBQXdDLEdBQUcsaXZCQUFpdkIscUlBQXFJLGtFQUFrRSxHQUFHLElBQUksYUFBYSxxQ0FBcUMsMEJBQTBCLGlCQUFpQix5Q0FBeUMsNERBQTRELFdBQVcsdUNBQXVDLDBCQUEwQixpQkFBaUIsaURBQWlELEdBQUcsSUFBSSxvQkFBb0IsNENBQTRDLDhCQUE4Qiw4QkFBOEIsOEJBQThCLHlCQUF5QixzQkFBc0IsMEJBQTBCLDhCQUE4Qix5QkFBeUIsdUJBQXVCLGlCQUFpQiwwQ0FBMEMseUZBQXlGLDRDQUE0Qyw4Q0FBOEMsNEZBQTRGLDZDQUE2Qyw4REFBOEQsNERBQTRELFdBQVcsd0NBQXdDLGdDQUFnQyxnQ0FBZ0MsbUNBQW1DLG1DQUFtQywwQkFBMEIsMEJBQTBCLHVDQUF1Qyx5QkFBeUIseUJBQXlCLHVCQUF1QixpQkFBaUIsaURBQWlELHlJQUF5SSx1SUFBdUksR0FBRyxJQUFJLFNBQVMsb1dBQW9XLGlCQUFpQix1WkFBdVosNkNBQTZDLDRDQUE0Qyx5REFBeUQsa0ZBQWtGLDJLQUEySyxnR0FBZ0csNERBQTRELFdBQVcsd0NBQXdDLGdDQUFnQyxnQ0FBZ0MsK0JBQStCLGtEQUFrRCx5QkFBeUIsd1ZBQXdWLHFCQUFxQix5ZkFBeWYsK0lBQStJLDZCQUE2QiwrQ0FBK0MsaUNBQWlDLHFGQUFxRixXQUFXLE9BQU8sc1VBQXNVLDBJQUEwSSxXQUFXLGlFQUFpRSxPQUFPLE9BQU8sNkRBQTZELG1DQUFtQyxrSEFBa0gsV0FBVyxPQUFPLG9HQUFvRyxXQUFXLE9BQU8sOFRBQThULDJEQUEyRCxHQUFHLElBQUksZUFBZSw2QkFBNkIsK0JBQStCLEdBQUcsdUNBQXVDLDBCQUEwQixpQkFBaUIsaURBQWlELEdBQUcsSUFBSSxVQUFVLDZGQUE2Rix5QkFBeUIsNEdBQTRHLHVMQUF1TCw2REFBNkQsZ0RBQWdELDREQUE0RCxXQUFXLGtJQUFrSSxnQ0FBZ0MsMEJBQTBCLDRCQUE0Qix5QkFBeUIsMkJBQTJCLGtGQUFrRixzTEFBc0wsZ0hBQWdILG9QQUFvUCxneUJBQWd5QixxRkFBcUYsNEpBQTRKLDJKQUEySixxQ0FBcUMsR0FBRyxJQUFJLGlCQUFpQiwwQ0FBMEMsaUNBQWlDLDBCQUEwQixxQkFBcUIsaUJBQWlCLDRDQUE0Qyx5REFBeUQsdUNBQXVDLDREQUE0RCxXQUFXLHdDQUF3Qyx1QkFBdUIsdUJBQXVCLHFCQUFxQixpQkFBaUIsMkRBQTJELDBCQUEwQiw4QkFBOEIsR0FBRyxJQUFJLGVBQWUseUNBQXlDLDBCQUEwQixpQkFBaUIsMEJBQTBCLDRGQUE0RiwyRUFBMkUsMERBQTBELE9BQU8sOEJBQThCLHdFQUF3RSxPQUFPLEdBQUcscUNBQXFDLDhCQUE4QiwyQkFBMkIsMEJBQTBCLDBCQUEwQiwrQkFBK0IsNENBQTRDLDJCQUEyQiwwQkFBMEIsaUJBQWlCLGdFQUFnRSwrREFBK0Qsc09BQXNPLHVEQUF1RCxrR0FBa0csOEJBQThCLDZCQUE2QixHQUFHLElBQUksa0JBQWtCLGlEQUFpRCwyQkFBMkIsMEJBQTBCLHlCQUF5Qix5QkFBeUIsK0JBQStCLGlCQUFpQix3QkFBd0IsMEZBQTBGLDJFQUEyRSxtREFBbUQsT0FBTyw4QkFBOEIsaUVBQWlFLE9BQU8sNkRBQTZELHNFQUFzRSw0RUFBNEUscURBQXFELDhEQUE4RCwwRUFBMEUseUNBQXlDLEdBQUcsdUNBQXVDLDhCQUE4QiwyQkFBMkIsMEJBQTBCLDBCQUEwQiwrQkFBK0IsNENBQTRDLDJCQUEyQiwwQkFBMEIseUJBQXlCLDJCQUEyQiwrQkFBK0IsaUJBQWlCLGdFQUFnRSwrREFBK0Qsd09BQXdPLHVEQUF1RCx5Q0FBeUMsaUxBQWlMLDhCQUE4Qiw2QkFBNkIsa0NBQWtDLHlKQUF5SixvR0FBb0csR0FBRyxJQUFJLFFBQVEsMkNBQTJDLGlCQUFpQiw2QkFBNkIsR0FBRyx1Q0FBdUMsMEJBQTBCLGlCQUFpQixpREFBaUQsR0FBRyxJQUFJLE9BQU8sbUhBQW1ILDJJQUEySSw0REFBNEQsV0FBVyx1Q0FBdUMsMEJBQTBCLHVHQUF1Ryx1SkFBdUosR0FBRyxJQUFJLGNBQWMsaUlBQWlJLGlCQUFpQixpS0FBaUsscURBQXFELHVEQUF1RCw0REFBNEQsV0FBVyx1Q0FBdUMsMEJBQTBCLHVCQUF1Qix1QkFBdUIsK0dBQStHLCtKQUErSixxRUFBcUUsR0FBRyxJQUFJLHFCQUFxQiw0Q0FBNEMsOEJBQThCLDhCQUE4Qiw4QkFBOEIseUJBQXlCLHNCQUFzQiw4QkFBOEIseUJBQXlCLHVCQUF1QixxQkFBcUIsOERBQThELCtGQUErRix5RkFBeUYsNENBQTRDLDhDQUE4Qyw0RkFBNEYsNkNBQTZDLGdIQUFnSCxxREFBcUQsc0VBQXNFLDREQUE0RCxXQUFXLHdDQUF3Qyx1QkFBdUIsZ0NBQWdDLGdDQUFnQyxtQ0FBbUMsbUNBQW1DLDBCQUEwQiwwQkFBMEIsdUNBQXVDLHlCQUF5Qix5QkFBeUIsdUJBQXVCLHFCQUFxQiw4REFBOEQsc0dBQXNHLHlJQUF5SSx1SUFBdUksdUVBQXVFLEdBQUcsSUFBSSxjQUFjLDRDQUE0Qyw4QkFBOEIsOEJBQThCLDhCQUE4Qix5QkFBeUIsc0JBQXNCLDhCQUE4Qix5QkFBeUIsdUJBQXVCLDhEQUE4RCwrRkFBK0YseUZBQXlGLDRDQUE0Qyw4Q0FBOEMsNEZBQTRGLDZDQUE2Qyw0REFBNEQsNERBQTRELFdBQVcsd0NBQXdDLGdDQUFnQyxnQ0FBZ0MsbUNBQW1DLG1DQUFtQywwQkFBMEIsMEJBQTBCLHVDQUF1Qyx5QkFBeUIseUJBQXlCLHVCQUF1Qiw4REFBOEQsc0dBQXNHLHlJQUF5SSx1SUFBdUksR0FBRyxJQUFJLGdCQUFnQixxQ0FBcUMsNElBQTRJLGtMQUFrTCw0REFBNEQsV0FBVyx3Q0FBd0MsNEJBQTRCLCtCQUErQixzQ0FBc0MseUJBQXlCLDZCQUE2Qix5QkFBeUIsZ0pBQWdKLHlMQUF5TCw4QkFBOEIsZ0NBQWdDLHFDQUFxQyx5RUFBeUUscUpBQXFKLDJDQUEyQywrSEFBK0gsNEJBQTRCLG1MQUFtTCx1U0FBdVMsaUZBQWlGLG1IQUFtSCxPQUFPLDJXQUEyVywyR0FBMkcsMkdBQTJHLEdBQUcsSUFBSSx1QkFBdUIsNENBQTRDLDhCQUE4Qiw4QkFBOEIsOEJBQThCLHlCQUF5QixzQkFBc0IsOEJBQThCLHlCQUF5Qix1QkFBdUIsMEJBQTBCLHFHQUFxRyw4SUFBOEkseUZBQXlGLDRDQUE0Qyw4Q0FBOEMsNEZBQTRGLDZDQUE2QyxxREFBcUQsK0NBQStDLDREQUE0RCxXQUFXLHdDQUF3QyxnQ0FBZ0MsZ0NBQWdDLG1DQUFtQyxtQ0FBbUMsMEJBQTBCLDBCQUEwQix1Q0FBdUMsZ0NBQWdDLDhCQUE4QiwrQkFBK0Isc0NBQXNDLHlCQUF5Qiw2QkFBNkIseUJBQXlCLHVCQUF1QiwwQkFBMEIsOEJBQThCLHFHQUFxRyx3SUFBd0kseUNBQXlDLDhCQUE4QixnQ0FBZ0MscUNBQXFDLHdDQUF3QyxtREFBbUQsa0tBQWtLLHlKQUF5SixxSUFBcUksOENBQThDLDZFQUE2RSxtR0FBbUcsOEJBQThCLG1IQUFtSCxPQUFPLHNIQUFzSCxHQUFHLElBQUksbUJBQW1CLDBDQUEwQywwQkFBMEIscUJBQXFCLGlCQUFpQiwyREFBMkQsNERBQTRELFdBQVcsd0NBQXdDLHVCQUF1Qix1QkFBdUIscUJBQXFCLGlCQUFpQiwyREFBMkQsMEJBQTBCLDhCQUE4QixHQUFHLElBQUksbUJBQW1CLG9EQUFvRCxzQ0FBc0MscUJBQXFCLDJCQUEyQix1QkFBdUIsMEJBQTBCLGdEQUFnRCxzR0FBc0csc0VBQXNFLEdBQUcsaUJBQWlCLHVDQUF1QyxrWUFBa1ksK0RBQStELHVFQUF1RSwrREFBK0QseUNBQXlDLDhEQUE4RCx1RUFBdUUsOERBQThELHNFQUFzRSx3MUJBQXcxQiw2TEFBNkwsc0lBQXNJLDREQUE0RCxXQUFXLHdDQUF3Qyx5QkFBeUIsK0JBQStCLHVCQUF1QixpQkFBaUIsaURBQWlELG9EQUFvRCxHQUFHLElBQUksWUFBWSwwQ0FBMEMscUJBQXFCLDRCQUE0Qix1QkFBdUIsd0JBQXdCLDJCQUEyQix3QkFBd0IsaURBQWlELDZDQUE2Qyw4Q0FBOEMsOFJBQThSLGlJQUFpSSx3R0FBd0csb0NBQW9DLDBXQUEwVyw4WUFBOFksZ0NBQWdDLHlIQUF5SCw0UEFBNFAscVVBQXFVLHVFQUF1RSxpSEFBaUgsd0VBQXdFLDREQUE0RCxXQUFXLHdDQUF3Qyx5QkFBeUIsK0JBQStCLHVCQUF1QixpQkFBaUIsaURBQWlELHFDQUFxQyxHQUFHLElBQUksT0FBTyxvS0FBb0ssd0JBQXdCLDhCQUE4QixpQkFBaUIsNFFBQTRRLHNQQUFzUCxpR0FBaUcsaURBQWlELDREQUE0RCxXQUFXLDZpQkFBNmlCLHdCQUF3QiwwQkFBMEIsZ0NBQWdDLG9DQUFvQywwQkFBMEIsd0JBQXdCLDhCQUE4QixrQ0FBa0Msb1JBQW9SLDRWQUE0VixtREFBbUQsc0VBQXNFLG1DQUFtQywrSkFBK0osd0JBQXdCLG1MQUFtTCxvQ0FBb0MsNkJBQTZCLHVFQUF1RSx3RkFBd0YsaUtBQWlLLGdXQUFnVyxxQ0FBcUMsdUZBQXVGLDJFQUEyRSwyRkFBMkYsa0pBQWtKLGtIQUFrSCwyRkFBMkYsdUNBQXVDLEdBQUcsSUFBSSxlQUFlLGlJQUFpSSwwQkFBMEIsd0JBQXdCLDhCQUE4QixxQ0FBcUMsaUJBQWlCLDJOQUEyTixzUEFBc1AsaUdBQWlHLDZOQUE2TixpREFBaUQsNERBQTRELFdBQVcseXBCQUF5cEIsd0JBQXdCLDBCQUEwQixnQ0FBZ0Msb0NBQW9DLDBCQUEwQix3QkFBd0IsOEJBQThCLHFDQUFxQywyT0FBMk8sMlNBQTJTLG1EQUFtRCw2RkFBNkYsbUNBQW1DLCtKQUErSix3QkFBd0IsbUxBQW1MLG9DQUFvQyw2QkFBNkIsdUVBQXVFLHdGQUF3RixpS0FBaUssZ1dBQWdXLHFDQUFxQyx1RkFBdUYsMkVBQTJFLDJGQUEyRixrSkFBa0osa0hBQWtILDJGQUEyRix1Q0FBdUMsR0FBRyxJQUFJLGNBQWMsOENBQThDLGdDQUFnQyw4QkFBOEIsOEJBQThCLDhCQUE4Qiw4QkFBOEIseUJBQXlCLHVCQUF1Qiw4QkFBOEIsMEJBQTBCLHdCQUF3Qiw0QkFBNEIsOEJBQThCLHNHQUFzRywyTkFBMk4sc1BBQXNQLGlHQUFpRywrREFBK0QsNkRBQTZELCtnQkFBK2dCLHFIQUFxSCwrRkFBK0YsK0ZBQStGLHVGQUF1RiwrQ0FBK0MsNERBQTRELFdBQVcseXVCQUF5dUIsd0JBQXdCLDBCQUEwQixnQ0FBZ0Msb0NBQW9DLDBCQUEwQix3QkFBd0IsNEJBQTRCLDhCQUE4QiwyT0FBMk8sMlNBQTJTLG1EQUFtRCwwRkFBMEYsbUNBQW1DLCtKQUErSix3QkFBd0IsbUxBQW1MLG9DQUFvQyw2QkFBNkIsdUVBQXVFLHdGQUF3RixpS0FBaUssZ1dBQWdXLHFDQUFxQyx1RkFBdUYsMkVBQTJFLDJGQUEyRixrSkFBa0osa0hBQWtILDJGQUEyRixrQ0FBa0MscUNBQXFDLEdBQUcsSUFBSSxVQUFVLDRDQUE0QywyQkFBMkIsc0JBQXNCLDBCQUEwQix3QkFBd0IsdUJBQXVCLHVCQUF1Qiw4QkFBOEIseU9BQXlPLHNYQUFzWCxzUEFBc1AsaUdBQWlHLHdEQUF3RCxzREFBc0QsdURBQXVELGlHQUFpRyxpREFBaUQsNERBQTRELFdBQVcseXVCQUF5dUIsd0JBQXdCLDBCQUEwQixnQ0FBZ0MsZ0NBQWdDLDBCQUEwQixnQ0FBZ0MsMEJBQTBCLG9DQUFvQywwQkFBMEIsd0JBQXdCLHVCQUF1Qix1QkFBdUIsOEJBQThCLGtVQUFrVSxrWkFBa1osbURBQW1ELDBGQUEwRixtQ0FBbUMsK0pBQStKLHdCQUF3QixtTEFBbUwsb0NBQW9DLDZCQUE2Qix1RUFBdUUsd0ZBQXdGLGdLQUFnSyxnV0FBZ1cscUNBQXFDLHVGQUF1RiwyRUFBMkUsMkZBQTJGLGtKQUFrSixrSEFBa0gsMkZBQTJGLGlIQUFpSCwrR0FBK0csdUNBQXVDLEdBQUcsSUFBSSxTQUFTLHVDQUF1QywwQkFBMEIsNkJBQTZCLDZCQUE2QixzQkFBc0Isc0JBQXNCLG1DQUFtQyxrQ0FBa0Msc0NBQXNDLGtDQUFrQyw4QkFBOEIsaUJBQWlCLG9IQUFvSCxnREFBZ0QsMkJBQTJCLDZDQUE2QyxPQUFPLDJCQUEyQiw2Q0FBNkMsT0FBTyxpREFBaUQsMkJBQTJCLDJCQUEyQixzSkFBc0osK0VBQStFLG1EQUFtRCxxRUFBcUUsd0dBQXdHLHFGQUFxRixnRkFBZ0YsNERBQTRELFdBQVcsd0NBQXdDLDJCQUEyQiwrQkFBK0IsK0JBQStCLHlCQUF5QiwrQkFBK0Isd0JBQXdCLHNCQUFzQixpQkFBaUIsaURBQWlELDhlQUE4ZSx1REFBdUQsR0FBRyxJQUFJLGFBQWEsNENBQTRDLG9FQUFvRSwrQkFBK0IsaUJBQWlCLHVHQUF1Ryx5REFBeUQsNERBQTRELFdBQVcscURBQXFELGdDQUFnQyx3QkFBd0IsaUNBQWlDLGlDQUFpQyx5Q0FBeUMsMENBQTBDLCtCQUErQix5R0FBeUcsc0dBQXNHLDhCQUE4QiwrQkFBK0IscUNBQXFDLDhCQUE4Qix1RUFBdUUsb0NBQW9DLGlDQUFpQywyQkFBMkIsZ0NBQWdDLDJCQUEyQix1QkFBdUIsK0JBQStCLGlCQUFpQix3RkFBd0Ysc0NBQXNDLCtCQUErQiw4QkFBOEIsd0RBQXdELG1CQUFtQixvRUFBb0UsNERBQTRELE9BQU8sbUVBQW1FLGtDQUFrQyxPQUFPLG1FQUFtRSx3QkFBd0IsT0FBTyxPQUFPLHdCQUF3QixPQUFPLDJEQUEyRCwrREFBK0Qsb09BQW9PLCtMQUErTCxrQ0FBa0MseURBQXlELDBDQUEwQyw0QkFBNEIsOEhBQThILDBEQUEwRCxvRUFBb0UsNEVBQTRFLE9BQU8scUVBQXFFLG1FQUFtRSxxRkFBcUYsdUZBQXVGLDZJQUE2SSxrQ0FBa0MseURBQXlELGlGQUFpRix5RUFBeUUsR0FBRyxJQUFJLFlBQVksMEdBQTBHLGtRQUFrUSxvQ0FBb0MseUJBQXlCLHlCQUF5Qix1QkFBdUIsaUJBQWlCLHdTQUF3UyxvQ0FBb0MsNkJBQTZCLHNDQUFzQyx5REFBeUQscUNBQXFDLG1FQUFtRSwrQ0FBK0Msc0JBQXNCLDZCQUE2Qix5RkFBeUYseURBQXlELE9BQU8sc0RBQXNELHFEQUFxRCxxRkFBcUYsZ0VBQWdFLDREQUE0RCxXQUFXLHFEQUFxRCxnQ0FBZ0Msd0JBQXdCLGlDQUFpQyxpQ0FBaUMsaUZBQWlGLFVBQVUseUhBQXlILFVBQVUsK0xBQStMLDBDQUEwQywrQkFBK0IseUdBQXlHLGtUQUFrVCxvQ0FBb0MsaUNBQWlDLDJCQUEyQixnQ0FBZ0MsOEJBQThCLCtCQUErQixxQ0FBcUMsa0RBQWtELDhCQUE4QiwyQkFBMkIseUJBQXlCLHVCQUF1QixpQkFBaUIsK1NBQStTLHNDQUFzQywrQkFBK0IsOEJBQThCLHdEQUF3RCxpQkFBaUIsc0VBQXNFLDREQUE0RCxPQUFPLG1FQUFtRSxrQ0FBa0MsT0FBTyxtRUFBbUUsd0JBQXdCLE9BQU8sT0FBTyx3QkFBd0IsT0FBTywyREFBMkQsK0RBQStELG9xQkFBb3FCLG1MQUFtTCxrQ0FBa0MseURBQXlELDBDQUEwQyw0QkFBNEIsNFZBQTRWLDBEQUEwRCxvRUFBb0UsNEVBQTRFLE9BQU8scUVBQXFFLG1FQUFtRSxxRkFBcUYsdUZBQXVGLDZJQUE2SSx3Q0FBd0MscUNBQXFDLHlEQUF5RCxpRkFBaUYsMEZBQTBGLHFDQUFxQyxtRUFBbUUsR0FBRyxLQUFLLHNFQUFzRSxpQkFBaUIsaUVBQWlFLHNGQUFzRixxQ0FBcUMsMkVBQTJFLFlBQVksK0RBQStELGdDQUFnQyxzRkFBc0YsZ0NBQWdDLDRCQUE0QixxQ0FBcUMsNkZBQTZGLHlDQUF5QyxzRkFBc0YsZ0NBQWdDLHFDQUFxQyx5R0FBeUcseUNBQXlDLFlBQVksR0FBRyx3QkFBd0IsK0JBQStCLFdBQVcsK0JBQStCLHNGQUFzRixzQ0FBc0MsR0FBRyx3S0FBd0ssc0VBQXNFLHNDQUFzQyxzRUFBc0UscUNBQXFDLFdBQVcsbURBQW1ELHlIQUF5SCxrQkFBa0IsWUFBWSxxQkFBcUIsS0FBSyx3Q0FBd0Msc0VBQXNFLG9FQUFvRSxJQUFJLEtBQUsseUNBQXlDLHVFQUF1RSx1QkFBdUIsWUFBWSxXQUFXLEtBQUssV0FBVyxnQ0FBZ0MsK0JBQStCLDBCQUEwQiw4QkFBOEIsV0FBVyw4QkFBOEIsUUFBUSwrSEFBK0gscUJBQXFCLHVCQUF1Qix3RkFBd0YscUdBQXFHLFlBQVksV0FBVyxLQUFLLDJDQUEyQyxNQUFNLHlDQUF5QyxNQUFNLG9LQUFvSyxtRkFBbUYsaVdBQWlXLDhDQUE4Qyx3QkFBd0IsbURBQW1ELFdBQVcsTUFBTSwrQkFBK0IsRUFBRSx1S0FBdUssb0VBQW9FLGlDQUFpQyw4SEFBOEgsb0VBQW9FLGdCQUFnQixXQUFXLE1BQU0sMkNBQTJDLE1BQU0sc0JBQXNCLCtCQUErQiwwRkFBMEYsdUZBQXVGLHNCQUFzQiwwTUFBME0sS0FBSyxzRkFBc0Ysc0tBQXNLLG1GQUFtRix1R0FBdUcscVZBQXFWLDJCQUEyQixpQ0FBaUMsNklBQTZJLHNIQUFzSCw0TEFBNEwsK0VBQStFLDROQUE0TiwrQkFBK0IscUNBQXFDLE1BQU0sNkhBQTZILGlJQUFpSSxZQUFZLHFCQUFxQixnS0FBZ0ssK0JBQStCLDZGQUE2RixTQUFTLHFDQUFxQyxNQUFNLGdJQUFnSSw4Q0FBOEMsZ05BQWdOLFdBQVcsdUZBQXVGLGdMQUFnTCx5REFBeUQseUNBQXlDLCtHQUErRyxnakJBQWdqQiw2R0FBNkcseUlBQXlJLGdDQUFnQyx3QkFBd0Isc0JBQXNCLHVIQUF1SCwyRUFBMkUscUJBQXFCLGVBQWUsMEVBQTBFLGFBQWEsb0JBQW9CLDZGQUE2RixzTkFBc04seURBQXlELG9WQUFvVixvQkFBb0IsbUJBQW1CLDhFQUE4RSwySkFBMkoscUhBQXFILHVCQUF1QiwyREFBMkQsV0FBVyxNQUFNLDJDQUEyQyxrRkFBa0YsMkJBQTJCLHVEQUF1RCxvSUFBb0ksMkJBQTJCLGlLQUFpSyw0SkFBNEosNkJBQTZCLGdDQUFnQyxnR0FBZ0csc0JBQXNCLG9HQUFvRyxzQkFBc0Isa0tBQWtLLG1FQUFtRSwyQkFBMkIsd0xBQXdMLGtEQUFrRCxzQkFBc0IsS0FBSyxrQkFBa0Isb0dBQW9HLCtMQUErTCxnR0FBZ0csdUdBQXVHLGdDQUFnQyw4SkFBOEosaUZBQWlGLG1CQUFtQiwrQkFBK0IsTUFBTSw0RkFBNEYsaUJBQWlCLG9FQUFvRSxxS0FBcUssUUFBUSxvQkFBb0IsbUVBQW1FLG9GQUFvRixhQUFhLHlNQUF5TSw0Q0FBNEMsaURBQWlELCtDQUErQyxvREFBb0QsNENBQTRDLHlMQUF5TCxLQUFLLDJCQUEyQiw2RUFBNkUsbUJBQW1CLHVCQUF1Qix1QkFBdUIsMENBQTBDLG9KQUFvSixtQkFBbUIsWUFBWSxlQUFlLG9DQUFvQyxvQ0FBb0MsZUFBZSwrQ0FBK0MsZ0NBQWdDLFlBQVksT0FBTyxlQUFlLDJCQUEyQixTQUFTLG1HQUFtRywrREFBK0Qsc0JBQXNCLDBGQUEwRix1Q0FBdUMsc05BQXNOLDJCQUEyQix1R0FBdUcsdUJBQXVCLDBDQUEwQyxRQUFRLGtHQUFrRywwQ0FBMEMsZ0lBQWdJLDBFQUEwRSxrQkFBa0IsRUFBRSxpQkFBaUIsT0FBTyxpQkFBaUIsbUJBQW1CLHVCQUF1QixzQ0FBc0MsMENBQTBDLGtSQUFrUiw0QkFBNEIsT0FBTyx5QkFBeUIsbUJBQW1CLElBQUksbUJBQW1CLDZCQUE2QixJQUFJLG9HQUFvRyxRQUFRLEVBQUUsVUFBVSxTQUFTLDJDQUEyQyxXQUFXLGdDQUFnQyx5Q0FBeUMsK0RBQStELGlJQUFpSSxXQUFXLEtBQUssV0FBVyxxSEFBcUgsc0hBQXNILFFBQVEsdThEQUF1OEQsbzNJQUFvM0kseU5BQXlOLHFVQUFxVSxLQUFLLHlCQUF5QixpQ0FBaUMsZ0JBQWdCLHFsQkFBcWxCLDhCQUE4QixXQUFXLDBCQUEwQixpQ0FBaUMsZ0hBQWdILGtFQUFrRSx1QkFBdUIsK0hBQStILGlCQUFpQixXQUFXLEtBQUssMkNBQTJDLE1BQU0sNkZBQTZGLG1EQUFtRCxzQkFBc0IscU9BQXFPLDJDQUEyQywrQkFBK0IsNENBQTRDLHFIQUFxSCxxT0FBcU8sMkJBQTJCLHFFQUFxRSx1QkFBdUIsb0dBQW9HLFdBQVcsMkVBQTJFLG1CQUFtQiw4RkFBOEYsS0FBSyx3QkFBd0IsaVdBQWlXLFdBQVcseVVBQXlVLFdBQVcsaUJBQWlCLDhCQUE4Qiw4RUFBOEUsaUJBQWlCLFdBQVcsS0FBSyxXQUFXLDhCQUE4QixvQ0FBb0MsTUFBTSxpSEFBaUgsd0RBQXdELE9BQU8sbVFBQW1RLHVDQUF1QyxvR0FBb0csc0NBQXNDLE1BQU0sb0hBQW9ILHlCQUF5QixtSEFBbUgsc0VBQXNFLDZHQUE2RyxzQkFBc0IseVBBQXlQLE9BQU8sd0JBQXdCLGdGQUFnRixnQkFBZ0IsaUdBQWlHLDhKQUE4SixXQUFXLE1BQU0sMkNBQTJDLE1BQU0sb0lBQW9JLHNDQUFzQyxzQkFBc0IsdURBQXVELHdCQUF3Qiw4REFBOEQsd0JBQXdCLGdCQUFnQiwyQ0FBMkMsMkhBQTJILGlVQUFpVSxvQ0FBb0MsNEVBQTRFLGVBQWUseUNBQXlDLGlFQUFpRSxlQUFlLHdDQUF3QyxTQUFTLDBIQUEwSCx1R0FBdUcsUUFBUSxvQ0FBb0MsOEJBQThCLCtIQUErSCxNQUFNLHFCQUFxQixXQUFXLE1BQU0sMkNBQTJDLDZCQUE2QixnREFBZ0Qsc0JBQXNCLE1BQU0sMERBQTBELG1TQUFtUyxrQkFBa0IsNk9BQTZPLE1BQU0sNkJBQTZCLDZEQUE2RCx3Q0FBd0MsK0hBQStILGdCQUFnQixXQUFXLE1BQU0sMEJBQTBCLHNHQUFzRyx3Q0FBd0MsMEJBQTBCLG9FQUFvRSxvRUFBb0Usd2RBQXdkLGVBQWUsZ0NBQWdDLGlFQUFpRSxtSkFBbUosNkNBQTZDLFdBQVcsTUFBTSxXQUFXLDBIQUEwSCx3RUFBd0UseUdBQXlHLCtCQUErQiw4Q0FBOEMsb2xCQUFvbEIscUJBQXFCLHFFQUFxRSw2SUFBNkksS0FBSywyQkFBMkIsOEVBQThFLDRCQUE0QiwwRUFBMEUsVUFBVSxpSUFBaUkscUJBQXFCLE1BQU0sK0pBQStKLGtCQUFrQixxR0FBcUcscUlBQXFJLG9DQUFvQywrQkFBK0IsV0FBVyxFQUFFLFdBQVcsTUFBTSxXQUFXLE9BQU8sb0JBQW9CLCtKQUErSix1QkFBdUIsWUFBWSxXQUFXLGtCQUFrQixrQkFBa0IsNkRBQTZELHVOQUF1TixpQkFBaUIsZ0JBQWdCLFFBQVEsUUFBUSxPQUFPLCtFQUErRSx1QkFBdUIsaUVBQWlFLCtFQUErRSxRQUFRLFFBQVEsc0RBQXNELElBQUksS0FBSyw4RkFBOEYsaUNBQWlDLHlCQUF5QixvQ0FBb0MsbUhBQW1ILGtDQUFrQyxzQkFBc0IsdUtBQXVLLFdBQVcsTUFBTSxXQUFXLCtCQUErQix3RUFBd0UsK0JBQStCLG9DQUFvQyxzT0FBc08scUJBQXFCLCtNQUErTSw4QkFBOEIsaVFBQWlRLHFCQUFxQiwwSkFBMEosc0NBQXNDLDBCQUEwQixpRkFBaUYscUJBQXFCLDhCQUE4QixzQkFBc0IsZ0hBQWdILHNDQUFzQyxrSUFBa0ksbURBQW1ELDBCQUEwQix3REFBd0QsUUFBUSw2QkFBNkIsZ0JBQWdCLFdBQVcsTUFBTSxrREFBa0QseUJBQXlCLHFCQUFxQixpQ0FBaUMsc0NBQXNDLHVMQUF1TCxpREFBaUQsc0JBQXNCLGVBQWUsc0JBQXNCLDZEQUE2RCxnREFBZ0Qsc0JBQXNCLHlLQUF5SyxtREFBbUQsNEZBQTRGLGlEQUFpRCxtQ0FBbUMsV0FBVyxrTkFBa04sOEJBQThCLDZCQUE2Qiw2RUFBNkUsdUVBQXVFLGdCQUFnQixXQUFXLGVBQWUsK0JBQStCLDBFQUEwRSxNQUFNLFdBQVcsS0FBSyxRQUFRLHVCQUF1QixvR0FBb0csMkNBQTJDLG9CQUFvQixjQUFjLG9CQUFvQiw0QkFBNEIsV0FBVywyQkFBMkIsWUFBWSxXQUFXLEtBQUssNEJBQTRCLGlNQUFpTSwyREFBMkQsZ0ZBQWdGLHVKQUF1SixXQUFXLG1EQUFtRCxxQkFBcUIscUJBQXFCLHlDQUF5QyxrTUFBa00sOEJBQThCLFdBQVcsMENBQTBDLDJCQUEyQixxQkFBcUIseUNBQXlDLDhNQUE4TSxvQ0FBb0MsdUVBQXVFLCtDQUErQyx5REFBeUQsbUJBQW1CLG1HQUFtRyw0Q0FBNEMsdUdBQXVHLHFEQUFxRCx5QkFBeUIsZ0ZBQWdGLE1BQU0sZ0NBQWdDLGdDQUFnQyw2R0FBNkcsaUNBQWlDLDBDQUEwQyxvQ0FBb0MsOENBQThDLHlDQUF5Qyw0QkFBNEIsa0NBQWtDLGlEQUFpRCwwQkFBMEIseUVBQXlFLDZHQUE2Ryx1Q0FBdUMscUVBQXFFLDhDQUE4QyxzRkFBc0YsbVNBQW1TLGdDQUFnQyxLQUFLLFNBQVMsZ0JBQWdCLFVBQVUsZ0JBQWdCLG9CQUFvQixnQkFBZ0IsWUFBWSxnQkFBZ0IsY0FBYyxnQkFBZ0IsT0FBTyxnQkFBZ0IsVUFBVSxnQkFBZ0IsUUFBUSxnQkFBZ0IsTUFBTSxnQkFBZ0IsT0FBTyxnQkFBZ0IsU0FBUyxnQkFBZ0IsYUFBYSxnQkFBZ0IsSUFBSSxnQkFBZ0IsSUFBSSxnQkFBZ0IsUUFBUSxrQkFBa0IsOEJBQThCLGtFQUFrRSxxUEFBcVAsMkJBQTJCLHFCQUFxQiw0QkFBNEIscUVBQXFFLDJCQUEyQixxQkFBcUIsNEJBQTRCLHFFQUFxRSxxQ0FBcUMsK0JBQStCLHNDQUFzQywyREFBMkQsNkJBQTZCLGdDQUFnQywrQkFBK0IseUJBQXlCLHdCQUF3QiwrQ0FBK0MsMkJBQTJCLDhCQUE4Qiw0QkFBNEIsc0NBQXNDLHNLQUFzSyx5QkFBeUIsK0JBQStCLDBCQUEwQixrQ0FBa0MsMEVBQTBFLHVCQUF1Qiw2QkFBNkIsd0JBQXdCLGlIQUFpSCx3QkFBd0Isa0JBQWtCLHlCQUF5QixzREFBc0QscUxBQXFMLDBCQUEwQixvQkFBb0IsMkJBQTJCLGdJQUFnSSw0Q0FBNEMsOEZBQThGLHlEQUF5RCx3TEFBd0wsdUNBQXVDLEtBQUssOENBQThDLFNBQVMsd0NBQXdDLG9DQUFvQyw0Q0FBNEMsK0NBQStDLHVGQUF1Rix5QkFBeUIsbUJBQW1CLGdCQUFnQixrQkFBa0IsWUFBWSxzQkFBc0IsSUFBSSxrR0FBa0csd0ZBQXdGLFlBQVksRUFBRSxtU0FBbVMsK0NBQStDLEVBQUUsbUNBQW1DLGtHQUFrRyw4QkFBOEIsd0JBQXdCLG9DQUFvQyxxQkFBcUIsb0NBQW9DLDRCQUE0QixrQ0FBa0MsMERBQTBELG9DQUFvQyw0Q0FBNEMscUJBQXFCLGtDQUFrQyxxQkFBcUIsa0NBQWtDLHlCQUF5QixzQ0FBc0MsK0JBQStCLGlDQUFpQywrQkFBK0IsdUZBQXVGLCtCQUErQixnQ0FBZ0MsK0JBQStCLCtCQUErQix5REFBeUQsK0NBQStDLDJFQUEyRSxrSUFBa0ksd0NBQXdDLHdEQUF3RCx3Q0FBd0Msd0RBQXdELDZDQUE2Qyx1SEFBdUgsNkNBQTZDLDBCQUEwQiwrRUFBK0UsNENBQTRDLDhCQUE4QixvQ0FBb0MsNEZBQTRGLDhGQUE4RiwwR0FBMEcsMENBQTBDLDZFQUE2RSxtRkFBbUYsK0NBQStDLG1CQUFtQixpRUFBaUUsb0JBQW9CLHdIQUF3SCw2S0FBNkssb0NBQW9DLDhEQUE4RCxzQkFBc0IsbUVBQW1FLGtCQUFrQixvQkFBb0IsMERBQTBELGtCQUFrQixvQkFBb0IsMERBQTBELDBCQUEwQix1S0FBdUssa0JBQWtCLHFCQUFxQiw4QkFBOEIsa0JBQWtCLHFCQUFxQiw4QkFBOEIseUpBQXlKLHVDQUF1QyxnQkFBZ0IsaUVBQWlFLDBOQUEwTixzTkFBc04sMkZBQTJGLDBDQUEwQywrSkFBK0oscVVBQXFVLGlEQUFpRCxpQ0FBaUMsNkNBQTZDLHFDQUFxQyxzSEFBc0gsNkVBQTZFLDBDQUEwQyxrQkFBa0IsWUFBWSxxSUFBcUksc0NBQXNDLFlBQVkscUJBQXFCLEdBQUcsK0JBQStCLGdJQUFnSSxnQ0FBZ0MsMEtBQTBLLHdDQUF3QyxxUEFBcVAsa0hBQWtILHVDQUF1Qyx5REFBeUQsdUNBQXVDLG9FQUFvRSxNQUFNLGdEQUFnRCwyQkFBMkIsOERBQThELG1CQUFtQixvQkFBb0IsaUJBQWlCLEVBQUUsNERBQTRELHdCQUF3QixpQ0FBaUMsNkNBQTZDLHVGQUF1RixPQUFPLGtCQUFrQixrQkFBa0IsNkNBQTZDLDBCQUEwQixtQ0FBbUMsOEJBQThCLDBDQUEwQyx5QkFBeUIsa0JBQWtCLCtEQUErRCxzQkFBc0IsK0JBQStCLDhCQUE4Qix3Q0FBd0MsZUFBZSxvREFBb0QsNEJBQTRCLHVGQUF1RixPQUFPLGtCQUFrQixrQkFBa0IsNkNBQTZDLDBCQUEwQixtQ0FBbUMsOEJBQThCLDBDQUEwQyx5QkFBeUIsa0JBQWtCLGVBQWUsZ0JBQWdCLDRCQUE0Qix1RkFBdUYsT0FBTyxrQkFBa0Isa0JBQWtCLDZDQUE2QywwQkFBMEIsbUNBQW1DLDhCQUE4QiwwQ0FBMEMseUJBQXlCLDBJQUEwSSxrQ0FBa0Msc0JBQXNCLGtDQUFrQyxxQkFBcUIsaUNBQWlDLCtFQUErRSxpQ0FBaUMscUNBQXFDLGtDQUFrQyxxQkFBcUIseUhBQXlILDRkQUE0ZCxxQ0FBcUMsZ0ZBQWdGLGlDQUFpQyxnQkFBZ0Isd0lBQXdJLGdCQUFnQiwyQ0FBMkMsZ0JBQWdCLDBEQUEwRCw2QkFBNkIsNk9BQTZPLHdDQUF3QyxXQUFXLHVDQUF1QywwQkFBMEIsb0JBQW9CLHNIQUFzSCw4QkFBOEIsOEVBQThFLCtLQUErSyxTQUFTLHlCQUF5QiwyRUFBMkUsK0lBQStJLGtDQUFrQyx3RkFBd0YsbUNBQW1DLHNDQUFzQyxtQ0FBbUMsaUVBQWlFLG1DQUFtQyxnQ0FBZ0Msc0NBQXNDLGdDQUFnQyx3QkFBd0IsUUFBUSwyQ0FBMkMsYUFBYSxtQkFBbUIsdUlBQXVJLHNCQUFzQix1QkFBdUIsa0NBQWtDLElBQUksbUJBQW1CLHlJQUF5SSxrQ0FBa0Msc0JBQXNCLGtDQUFrQyxxQkFBcUIsZ0NBQWdDLHFDQUFxQyxpQ0FBaUMscUNBQXFDLHNDQUFzQyw4VEFBOFQsdUNBQXVDLDhDQUE4QyxnS0FBZ0ssb0ZBQW9GLHNIQUFzSCxxQ0FBcUMsaUJBQWlCLHNIQUFzSCxnSEFBZ0gsVUFBVSxpQ0FBaUMsZ0NBQWdDLElBQUkscUNBQXFDLG9FQUFvRSxpQ0FBaUMseVZBQXlWLHVDQUF1QyxxQ0FBcUMsZ0JBQWdCLElBQUksNENBQTRDLHFRQUFxUSxrQ0FBa0MsK0JBQStCLGtDQUFrQyw2QkFBNkIsZ0NBQWdDLDBDQUEwQyxpQ0FBaUMsd0NBQXdDLGlMQUFpTCxNQUFNLG9EQUFvRCxNQUFNLGdDQUFnQyxzQ0FBc0MsNEJBQTRCLDJCQUEyQixpRkFBaUYsS0FBSywwQ0FBMEMsb0JBQW9CLG1GQUFtRixXQUFXLGtTQUFrUyx1Q0FBdUMsOFNBQThTLHNDQUFzQyxtQkFBbUIsMEJBQTBCLE1BQU0sbUpBQW1KLHlRQUF5USxxQ0FBcUMsNERBQTRELCtHQUErRyxNQUFNLG9EQUFvRCxrQ0FBa0Msb0JBQW9CLHNMQUFzTCxNQUFNLG9EQUFvRCxpQ0FBaUMsc0VBQXNFLFdBQVcsc0lBQXNJLHFDQUFxQyxvSUFBb0ksMENBQTBDLFdBQVcsMERBQTBELDhEQUE4RCx5Q0FBeUMsZUFBZSxFQUFFLGdCQUFnQiw0RUFBNEUsa0JBQWtCLEtBQUssa0hBQWtILGlCQUFpQiwwQkFBMEIsZUFBZSxZQUFZLDhHQUE4Ryx3Q0FBd0MsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLHVDQUF1Qyx1Q0FBdUMsZ0JBQWdCLEdBQUcsR0FBRyw2Q0FBNkMsa0NBQWtDLDBCQUEwQixZQUFZLHlDQUF5QyxvSkFBb0osa0NBQWtDLCtCQUErQixrQ0FBa0MsNkJBQTZCLGdDQUFnQyw0RkFBNEYsaUNBQWlDLDZGQUE2Riw0SEFBNEgsTUFBTSxvREFBb0QsTUFBTSxnQ0FBZ0Msc0NBQXNDLDRIQUE0SCxXQUFXLG9GQUFvRix1Q0FBdUMsK0dBQStHLHNCQUFzQixzRkFBc0YsaUNBQWlDLDJKQUEySixrQ0FBa0MsMlVBQTJVLHNDQUFzQyxtQkFBbUIsMEJBQTBCLE1BQU0sMEJBQTBCLCtLQUErSyxxQ0FBcUMsNENBQTRDLDRHQUE0RyxNQUFNLG9EQUFvRCxzQ0FBc0Msb0JBQW9CLDBGQUEwRixNQUFNLG9EQUFvRCxrQ0FBa0Msb0JBQW9CLCtIQUErSCxNQUFNLG9EQUFvRCxpQ0FBaUMsbUVBQW1FLHNCQUFzQiwySUFBMkksV0FBVywySEFBMkgscUNBQXFDLHFKQUFxSix1Q0FBdUMsd0RBQXdELG9CQUFvQiwyQ0FBMkMsS0FBSyw4REFBOEQseURBQXlELEtBQUssNkJBQTZCLG9DQUFvQywyQkFBMkIsbUJBQW1CLHdDQUF3QyxFQUFFLGdCQUFnQixJQUFJLHVDQUF1Qyx1Q0FBdUMsZ0JBQWdCLEdBQUcsR0FBRyw2Q0FBNkMsa0NBQWtDLDBCQUEwQixZQUFZLG1CQUFtQiw0RUFBNEUsZUFBZSxlQUFlLGtDQUFrQyxzQkFBc0IsZ0NBQWdDLDZGQUE2RixpQ0FBaUMsNkZBQTZGLHFDQUFxQyxzQ0FBc0Msd0JBQXdCLGtCQUFrQix1Q0FBdUMsTUFBTSxnQ0FBZ0MsTUFBTSxrREFBa0QsTUFBTSxnREFBZ0QsTUFBTSxpREFBaUQsTUFBTSxpREFBaUQsTUFBTSxlQUFlLGlDQUFpQyxxTEFBcUwsWUFBWSxnQkFBZ0IsSUFBSSxtQkFBbUIsMERBQTBELGtDQUFrQyxzQkFBc0Isa0NBQWtDLHFCQUFxQixnQ0FBZ0MscUNBQXFDLGlDQUFpQyxxQ0FBcUMsdUNBQXVDLFdBQVcsb0pBQW9KLGVBQWUsUUFBUSxxQ0FBcUMsbUVBQW1FLGdDQUFnQyw4SEFBOEgsZ0JBQWdCLElBQUksb0NBQW9DLDBEQUEwRCwwQ0FBMEMsa0dBQWtHLGtDQUFrQyxzQkFBc0IsaUNBQWlDLHNJQUFzSSxpQ0FBaUMsNkZBQTZGLHlDQUF5QywwQkFBMEIsd0NBQXdDLDBCQUEwQixrQ0FBa0MsMkNBQTJDLDRFQUE0RSxvSUFBb0ksV0FBVyxpRUFBaUUsNkNBQTZDLHVGQUF1RixPQUFPLDBJQUEwSSxrQ0FBa0MseUJBQXlCLCtEQUErRCx5QkFBeUIsd0JBQXdCLDBKQUEwSixnQkFBZ0IsMkNBQTJDLGdCQUFnQixxQkFBcUIsNEhBQTRILHVDQUF1QyxtQkFBbUIsMEJBQTBCLE1BQU0sMEJBQTBCLDBFQUEwRSwrSEFBK0gsOElBQThJLG1DQUFtQyxzQ0FBc0MsbUNBQW1DLGlFQUFpRSxpQ0FBaUMsbUVBQW1FLFdBQVcsbUVBQW1FLDZDQUE2QywrTEFBK0wsb0NBQW9DLGdCQUFnQiw4QkFBOEIsZ0NBQWdDLDhCQUE4QixFQUFFLGdCQUFnQixFQUFFLEtBQUssMEhBQTBILGlCQUFpQixjQUFjLGtDQUFrQywyQ0FBMkMscUJBQXFCLGtHQUFrRyxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixJQUFJLDZDQUE2QyxrQ0FBa0MsMEJBQTBCLFlBQVksUUFBUSxvR0FBb0csZ0JBQWdCLGdCQUFnQix3SUFBd0ksK0hBQStILDZCQUE2QixxQ0FBcUMsb0JBQW9CLFNBQVMsSUFBSSxtQ0FBbUMsb0ZBQW9GLFNBQVMsT0FBTyxtQ0FBbUMsNkJBQTZCLFNBQVMsT0FBTyxnQ0FBZ0MsMkJBQTJCLG1DQUFtQyxvQkFBb0IsT0FBTyxTQUFTLG9DQUFvQyw2QkFBNkIsT0FBTyxPQUFPLGtDQUFrQyw4Q0FBOEMsbUNBQW1DLDhDQUE4QyxtQ0FBbUMsOEJBQThCLHNDQUFzQyxvQkFBb0IsVUFBVSxTQUFTLHNDQUFzQyw2QkFBNkIsVUFBVSxPQUFPLHNDQUFzQyxpQ0FBaUMsYUFBYSxZQUFZLHVDQUF1QywrRUFBK0UsaUNBQWlDLDRCQUE0QixvQ0FBb0Msb0JBQW9CLFFBQVEsU0FBUyx1Q0FBdUMsZ0NBQWdDLFNBQVMsOEJBQThCLDZDQUE2QyxjQUFjLGdCQUFnQixXQUFXLCtCQUErQiwyREFBMkQsc0JBQXNCLGdLQUFnSyxlQUFlLG9LQUFvSyw2Q0FBNkMscU1BQXFNLDZRQUE2USxrQ0FBa0MsWUFBWSxvQ0FBb0MsbW9CQUFtb0Isa0NBQWtDLFdBQVcsOEJBQThCLHdDQUF3Qyw2QkFBNkIsbVJBQW1SLHlCQUF5QixnRUFBZ0UsMk5BQTJOLG9KQUFvSixLQUFLLDJIQUEySCx1REFBdUQscUJBQXFCLFlBQVksMkRBQTJELHVCQUF1QixtQ0FBbUMsU0FBUyx3Q0FBd0MsNk5BQTZOLHlDQUF5QyxzTEFBc0wsb0NBQW9DLHNEQUFzRCxpT0FBaU8saUNBQWlDLFdBQVcsd0JBQXdCLGdEQUFnRCxJQUFJLG1VQUFtVSx5QkFBeUIsZ0dBQWdHLGtCQUFrQixnRkFBZ0YsbUJBQW1CLFVBQVUsY0FBYyxpREFBaUQsb0NBQW9DLGNBQWMsbUNBQW1DLGNBQWMsbUNBQW1DLHlCQUF5QixxQkFBcUIsZUFBZSw2Q0FBNkMsTUFBTSxjQUFjLG1DQUFtQyw4Q0FBOEMsZUFBZSx5Q0FBeUMsU0FBUyxlQUFlLHdCQUF3Qix5Q0FBeUMsS0FBSyxrREFBa0QsbUJBQW1CLHlLQUF5SyxtQkFBbUIsd0dBQXdHLCtDQUErQyw0RUFBNEUsWUFBWSx1QkFBdUIsU0FBUyxpQ0FBaUMsMEJBQTBCLDZCQUE2QixzSUFBc0ksc0JBQXNCLG9DQUFvQyxZQUFZLG1DQUFtQyxvTUFBb00sNkNBQTZDLHVFQUF1RSxxSUFBcUksNkNBQTZDLHFCQUFxQixvQkFBb0IscUVBQXFFLDBDQUEwQyxxQkFBcUIscUNBQXFDLHlCQUF5QixnQ0FBZ0MsR0FBRywyQkFBMkIsaUJBQWlCLHFGQUFxRiwyQ0FBMkMscUJBQXFCLGdDQUFnQyx5Q0FBeUMsdVhBQXVYLGtDQUFrQyxrTEFBa0wseUNBQXlDLHFCQUFxQiwyRUFBMkUsUUFBUSxrQ0FBa0MsRUFBRSw0QkFBNEIsRUFBRSx3Q0FBd0MsRUFBRSxNQUFNLCtCQUErQiwrREFBK0QsTUFBTSxvR0FBb0csc0NBQXNDLHNGQUFzRiw2Q0FBNkMsb0JBQW9CLFNBQVMsK0JBQStCLGlDQUFpQywwQ0FBMEMsbUNBQW1DLGdCQUFnQix1QkFBdUIsaUVBQWlFLHFCQUFxQix5QkFBeUIsNEJBQTRCLGNBQWMsV0FBVyxtQ0FBbUMsU0FBUywwTEFBMEwsd0NBQXdDLHdKQUF3SixrQkFBa0IsaUNBQWlDLCtCQUErQiw0REFBNEQseUNBQXlDLHdQQUF3UCxrQ0FBa0MsdUVBQXVFLDRDQUE0QyxvQkFBb0Isc0NBQXNDLHNHQUFzRyx1Q0FBdUMsb0JBQW9CLG1DQUFtQyx3REFBd0QsV0FBVyxrQkFBa0Isc0VBQXNFLDZCQUE2QixpQkFBaUIseUJBQXlCLDZCQUE2QixJQUFJLGlDQUFpQywyRUFBMkUsV0FBVyxNQUFNLFdBQVcseUNBQXlDLDZCQUE2Qix5Q0FBeUMsZUFBZSxnQkFBZ0IsV0FBVyxNQUFNLFdBQVcsb0RBQW9ELDJDQUEyQywrQkFBK0IsMkRBQTJELCtEQUErRCwyWUFBMlksZ0JBQWdCLGNBQWMsdUJBQXVCLDhHQUE4RyxzREFBc0QsOGNBQThjLHlCQUF5QiwwQ0FBMEMsZ0JBQWdCLE9BQU8sYUFBYSxPQUFPLE9BQU8sK0JBQStCLHFEQUFxRCxnRUFBZ0Usa0JBQWtCLEtBQUssOEdBQThHLDRCQUE0QixtZEFBbWQseUNBQXlDLDJFQUEyRSw0Q0FBNEMsK0JBQStCLCtDQUErQyxLQUFLLDhCQUE4QixnUUFBZ1EsNkNBQTZDLDhCQUE4QixtRkFBbUYsK0NBQStDLG9EQUFvRCxnQ0FBZ0MsU0FBUyxnQkFBZ0Isd0NBQXdDLCtDQUErQyxnQ0FBZ0MsU0FBUyxnQkFBZ0IsdUNBQXVDLGdEQUFnRCwrQkFBK0IsZ01BQWdNLEVBQUUsV0FBVywrQ0FBK0MsZ0NBQWdDLEVBQUUsV0FBVyw4Q0FBOEMsK0JBQStCLGlEQUFpRCxrQ0FBa0MsMkNBQTJDLDRCQUE0Qiw4Q0FBOEMsNkJBQTZCLDhEQUE4RCxpREFBaUQsOEJBQThCLG1FQUFtRSwyQ0FBMkMsMEJBQTBCLHNEQUFzRCxFQUFFLFdBQVcsRUFBRSxzR0FBc0csNERBQTRELGdEQUFnRCxvREFBb0QsdUhBQXVILDhEQUE4RCwwRUFBMEUsdUZBQXVGLE9BQU8sb0JBQW9CLGdCQUFnQixxQkFBcUIsZ0JBQWdCLHdCQUF3QixnQkFBZ0IsVUFBVSxnQkFBZ0IsV0FBVyxrQkFBa0IsNENBQTRDLHlGQUF5RixnREFBZ0Qsb0ZBQW9GLHVDQUF1Qyw2QkFBNkIsZ0NBQWdDLGdEQUFnRCxrTkFBa04sa0NBQWtDLDBKQUEwSiwwTkFBME4scUNBQXFDLDRQQUE0UCxzQ0FBc0MsTUFBTSxtQkFBbUIsaUpBQWlKLHlGQUF5RixZQUFZLG9DQUFvQyx1SUFBdUksZ0ZBQWdGLG1DQUFtQyw4QkFBOEIsb0NBQW9DLGtJQUFrSSxvRUFBb0UsNkNBQTZDLHdDQUF3Qyw4Q0FBOEMsOERBQThELG1DQUFtQyw4QkFBOEIsaUNBQWlDLGtEQUFrRCxtQ0FBbUMsNERBQTRELGlDQUFpQyxxR0FBcUcsa0NBQWtDLGlEQUFpRCxtQ0FBbUMsa0RBQWtELGdDQUFnQyxhQUFhLG1EQUFtRCxpQkFBaUIsc0NBQXNDLFNBQVMsT0FBTyw4QkFBOEIsc0JBQXNCLHFEQUFxRCxXQUFXLEtBQUssdURBQXVELFdBQVcsU0FBUyxxQkFBcUIsUUFBUSxxQ0FBcUMsU0FBUyxPQUFPLDhCQUE4QixzQkFBc0IsZ0RBQWdELFdBQVcsa0VBQWtFLHNCQUFzQixtREFBbUQsT0FBTyxrQ0FBa0Msa0JBQWtCLHFEQUFxRCxXQUFXLEtBQUssdURBQXVELEtBQUssR0FBRyxrRUFBa0Usb0lBQW9JLFlBQVksaUNBQWlDLG9EQUFvRCxtR0FBbUcsV0FBVyxLQUFLLFdBQVcsZ0NBQWdDLG9EQUFvRCwyQkFBMkIsWUFBWSxpREFBaUQsTUFBTSxpS0FBaUssK0RBQStELDhGQUE4Riw0Q0FBNEMsYUFBYSw2TEFBNkwsS0FBSyw0REFBNEQsaUZBQWlGLE9BQU8sNkNBQTZDLHNDQUFzQyxHQUFHLCtDQUErQywyQ0FBMkMsb0NBQW9DLHlGQUF5RixxREFBcUQsU0FBUyw2R0FBNkcsMkdBQTJHLG9DQUFvQyxpQkFBaUIsaUdBQWlHLGlDQUFpQyw0Q0FBNEMsc0NBQXNDLHdGQUF3RixxQ0FBcUMsdURBQXVELHdDQUF3Qyw2Q0FBNkMsZ0NBQWdDLDZFQUE2RSx1Q0FBdUMsMENBQTBDLGdCQUFnQixrQkFBa0IsZ0JBQWdCLFdBQVcscURBQXFELFNBQVMsMkNBQTJDLHVDQUF1QyxzQ0FBc0Msd0RBQXdELG1DQUFtQywrQkFBK0Isc0NBQXNDLGlCQUFpQixFQUFFLG1CQUFtQixrQkFBa0IsWUFBWSx1Q0FBdUMsc0RBQXNELHVCQUF1QixzQkFBc0IsaUJBQWlCLHVCQUF1QixFQUFFLEtBQUsseVJBQXlSLGtDQUFrQyx1QkFBdUIsc0JBQXNCLGlCQUFpQixnQ0FBZ0MsR0FBRyxrQ0FBa0MsMkdBQTJHLHFDQUFxQywwQkFBMEIscUNBQXFDLDZEQUE2RCxvQ0FBb0Msc0RBQXNELHFDQUFxQyx1REFBdUQscUNBQXFDLHVEQUF1RCxrQ0FBa0MsOEJBQThCLHFDQUFxQyx1REFBdUQsK0NBQStDLGlFQUFpRSxtQ0FBbUMsK0JBQStCLDhDQUE4QyxnRUFBZ0UsNENBQTRDLHdDQUF3QywrQ0FBK0MsaUVBQWlFLDZDQUE2Qyx5Q0FBeUMsa0NBQWtDLG9EQUFvRCxpQ0FBaUMsNkJBQTZCLHFDQUFxQyx1QkFBdUIsMkNBQTJDLDZCQUE2QixrQ0FBa0Msb0JBQW9CLDZDQUE2QyxZQUFZLHVHQUF1Ryx3Q0FBd0Msc0JBQXNCLDBJQUEwSSwwRUFBMEUsb1lBQW9ZLGtDQUFrQyw4QkFBOEIsd0dBQXdHLDBFQUEwRSwwQ0FBMEMsRUFBRSx5Q0FBeUMsb0NBQW9DLGdIQUFnSCxzQ0FBc0MsZ0JBQWdCLGtIQUFrSCxpSEFBaUgsNkdBQTZHLHNDQUFzQyw4SEFBOEgsZ0JBQWdCLEdBQUcsMENBQTBDLGdHQUFnRyxnQkFBZ0IsR0FBRywrQkFBK0IsbUZBQW1GLGlDQUFpQywwRkFBMEYsNkNBQTZDLG1EQUFtRCw0Q0FBNEMsZ0NBQWdDLGdDQUFnQyw0QkFBNEIsU0FBUyxpQ0FBaUMsb0JBQW9CLG9DQUFvQyxtQ0FBbUMsMEJBQTBCLCtHQUErRywwQkFBMEIsMEZBQTBGLHlRQUF5USxpTEFBaUwseVJBQXlSLCtCQUErQix3UkFBd1IsaUVBQWlFLHdMQUF3TCxrQ0FBa0MsV0FBVyw4REFBOEQsNEJBQTRCLEdBQUcsd0NBQXdDLGVBQWUsd0NBQXdDLGtEQUFrRCxxQ0FBcUMsaUNBQWlDLHNDQUFzQywwRUFBMEUscUNBQXFDLGlDQUFpQyxzQ0FBc0MsaUhBQWlILHdDQUF3QyxvQ0FBb0MseUNBQXlDLGdGQUFnRiwwQkFBMEIsc0JBQXNCLDJCQUEyQiwrQkFBK0IsMkJBQTJCLHVCQUF1Qiw0QkFBNEIsZ0NBQWdDLGlDQUFpQywrRUFBK0Usd0NBQXdDLG1EQUFtRCwwQ0FBMEMsS0FBSyxlQUFlLDBDQUEwQyxRQUFRLDJCQUEyQixnQkFBZ0IsV0FBVyx3QkFBd0Isc0lBQXNJLDBCQUEwQixnSUFBZ0ksdUJBQXVCLDJHQUEyRyx3QkFBd0IsMktBQTJLLDJCQUEyQixvRkFBb0YsbUJBQW1CLDJCQUEyQixzRkFBc0YsMkVBQTJFLEtBQUssaUNBQWlDLEVBQUUseUJBQXlCLHFEQUFxRCx5Q0FBeUMsU0FBUyw0Q0FBNEMsK0RBQStELHFDQUFxQyxnQ0FBZ0MsaUpBQWlKLG9DQUFvQywwQ0FBMEMsa0NBQWtDLHFLQUFxSyw0Q0FBNEMsMkNBQTJDLHVGQUF1RixRQUFRLHFSQUFxUixtQkFBbUIsa0JBQWtCLHFEQUFxRCxrQ0FBa0MsbUJBQW1CLHNGQUFzRixVQUFVLHlOQUF5TixLQUFLLHFEQUFxRCxxREFBcUQsMEhBQTBILG1EQUFtRCxtS0FBbUssbURBQW1ELDZDQUE2QyxtREFBbUQsa0dBQWtHLGdCQUFnQiwwQkFBMEIsRUFBRSwwQkFBMEIsRUFBRSx5QkFBeUIsRUFBRSx5QkFBeUIsRUFBRSx5QkFBeUIsRUFBRSx5QkFBeUIsRUFBRSx5QkFBeUIsRUFBRSx5QkFBeUIsRUFBRSxXQUFXLE1BQU0sZ0VBQWdFLHVNQUF1TSxtREFBbUQsMENBQTBDLHNEQUFzRCw4UUFBOFEsbURBQW1ELGdGQUFnRixzREFBc0QsbW9CQUFtb0IsbURBQW1ELGlHQUFpRyxtREFBbUQseURBQXlELHdEQUF3RCwyTEFBMkwsd0RBQXdELCtXQUErVyxpRUFBaUUsK0JBQStCLHFNQUFxTSxnQ0FBZ0MscU5BQXFOLG1DQUFtQyxvQkFBb0Isb0NBQW9DLHFIQUFxSCxvQ0FBb0MscUJBQXFCLG1DQUFtQywyREFBMkQsNEJBQTRCLG9DQUFvQyxzQ0FBc0Msa0tBQWtLLGNBQWMsZ0VBQWdFLFlBQVksc0NBQXNDLDZDQUE2Qyx3REFBd0Qsa0NBQWtDLG1CQUFtQixxQ0FBcUMsa0JBQWtCLDhEQUE4RCxrQ0FBa0MsOFdBQThXLG1DQUFtQyxvQkFBb0Isb0NBQW9DLGdFQUFnRSxXQUFXLGlCQUFpQiwrQ0FBK0MsbUJBQW1CLFdBQVcsMENBQTBDLGdCQUFnQixjQUFjLHFDQUFxQyxzR0FBc0csNEhBQTRILE1BQU0seU1BQXlNLG1CQUFtQixtQkFBbUIsNEJBQTRCLCtEQUErRCxpQ0FBaUMseVBBQXlQLG9DQUFvQyxxRkFBcUYsd1RBQXdULE1BQU0sNlNBQTZTLGlVQUFpVSx1Q0FBdUMsc0VBQXNFLGlFQUFpRSxtQkFBbUIsRUFBRSx1Q0FBdUMsc0lBQXNJLGtDQUFrQywrZkFBK2YsOEJBQThCLDBNQUEwTSxNQUFNLDhRQUE4USxNQUFNLHlSQUF5Uiw2S0FBNkssZ0NBQWdDLHNFQUFzRSxrQ0FBa0MsV0FBVyxvRUFBb0UsMEJBQTBCLHNxQkFBc3FCLHdRQUF3USxHQUFHLGdDQUFnQywwRkFBMEYsbUNBQW1DLHlCQUF5Qiw2RkFBNkYsTUFBTSx5aEJBQXloQixNQUFNLG1QQUFtUCx5QkFBeUIsa0tBQWtLLE1BQU0sd0ZBQXdGLE1BQU0sc0tBQXNLLE1BQU0sMkZBQTJGLE1BQU0sOEtBQThLLHdYQUF3WCxpS0FBaUssU0FBUyxvQ0FBb0Msa1NBQWtTLEdBQUcsZ0JBQWdCLDJCQUEyQixnQkFBZ0Isd0JBQXdCLDhDQUE4QyxtQkFBbUIsK1BBQStQLDJCQUEyQixlQUFlLDBDQUEwQyw4REFBOEQscUJBQXFCLCtHQUErRyx3RUFBd0UsMkNBQTJDLG9CQUFvQixpQ0FBaUMsMkNBQTJDLGdDQUFnQyx5S0FBeUssa0NBQWtDLDhFQUE4RSxrQ0FBa0MsZ0VBQWdFLGtCQUFrQixtZEFBbWQsK0JBQStCLHdTQUF3UyxrQ0FBa0MseUhBQXlILGlEQUFpRCw0S0FBNEssa0NBQWtDLHVIQUF1SCx1TkFBdU4sdUNBQXVDLHdCQUF3QixxQ0FBcUMsNFhBQTRYLDRDQUE0QyxvcEJBQW9wQixRQUFRLCtCQUErQixnQkFBZ0IsY0FBYyxvR0FBb0csNEhBQTRILDRLQUE0SywrQkFBK0Isa0JBQWtCLCtCQUErQixrUUFBa1Esa0NBQWtDLG9CQUFvQixtQ0FBbUMsb0VBQW9FLGlDQUFpQyxnRUFBZ0UsaUNBQWlDLCtGQUErRixrQkFBa0IsZUFBZSxrQkFBa0IsNkJBQTZCLHVDQUF1Qyw4RUFBOEUsdUNBQXVDLHdWQUF3VixrRUFBa0UsZ0NBQWdDLDJDQUEyQyw0U0FBNFMsc0ZBQXNGLE1BQU0sdUJBQXVCLDhDQUE4QyxPQUFPLHFSQUFxUiwrQ0FBK0MsNkJBQTZCLE9BQU8sb0dBQW9HLE9BQU8scWJBQXFiLCtCQUErQixzQkFBc0IsT0FBTyxtRUFBbUUsd0xBQXdMLDBCQUEwQix1R0FBdUcsc0NBQXNDLGNBQWMsR0FBRyxnQkFBZ0IsMlZBQTJWLHNCQUFzQixvQkFBb0IsaUJBQWlCLGVBQWUsVUFBVSxJQUFJLEVBQUUsZ0hBQWdILEVBQUUsR0FBRyx1QkFBdUIsYUFBYSxzQkFBc0Isb0NBQW9DLElBQUksZ0JBQWdCLFVBQVUsdUJBQXVCLGtCQUFrQiwyQkFBMkIsSUFBSSwrQ0FBK0MsU0FBUyxnQkFBZ0Isa0NBQWtDLHNCQUFzQixLQUFLLGVBQWUsa0NBQWtDLFlBQVksS0FBSyxrREFBa0QsZ0JBQWdCLFVBQVUsV0FBVyxLQUFLLGdCQUFnQixRQUFRLFdBQVcsS0FBSyx1QkFBdUIsd0JBQXdCLFVBQVUsVUFBVSxFQUFFLGtCQUFrQix1QkFBdUIsK0lBQStJLDBHQUEwRywrREFBK0Qsc0JBQXNCLHlEQUF5RCxnQ0FBZ0MsbUdBQW1HLHFFQUFxRSx3RUFBd0Usd0JBQXdCLGdEQUFnRCx5TEFBeUwsNkJBQTZCLHNDQUFzQyxzSEFBc0gseVdBQXlXLElBQUksaURBQWlELHlVQUF5VSxFQUFFLHFOQUFxTix1QkFBdUIsd0JBQXdCLFlBQVksa0JBQWtCLGtCQUFrQixLQUFLLGdCQUFnQixVQUFVLEdBQUcsdUJBQXVCLG1JQUFtSSxhQUFhLE9BQU8sOEVBQThFLGNBQWMsdUJBQXVCLDRCQUE0QiwrQkFBK0IsOEhBQThILDRRQUE0USxFQUFFLHdHQUF3Ryx1QkFBdUIsT0FBTyxnTkFBZ04sMkJBQTJCLGdDQUFnQyxzUUFBc1EsRUFBRSxxSkFBcUosdUJBQXVCLGFBQWEsaUNBQWlDLCtCQUErQixHQUFHLHVCQUF1QixhQUFhLDBQQUEwUCxjQUFjLHdSQUF3UixzQkFBc0IscUJBQXFCLDhDQUE4QyxrQkFBa0IsMkJBQTJCLG1EQUFtRCxXQUFXLHVCQUF1QixxQ0FBcUMsS0FBSyxnQkFBZ0IsS0FBSyxrREFBa0QsUUFBUSxLQUFLLGdCQUFnQixzQkFBc0IsUUFBUSxLQUFLLGlDQUFpQyxxQkFBcUIsS0FBSyxjQUFjLHlCQUF5QixzQkFBc0IscUNBQXFDLDJCQUEyQixPQUFPLCtCQUErQix1Q0FBdUMsNkRBQTZELFFBQVEsSUFBSSwwQkFBMEIsb0JBQW9CLHNCQUFzQiw2Q0FBNkMsS0FBSyxtQkFBbUIsb0JBQW9CLHFCQUFxQiwyQkFBMkIsOERBQThELG9CQUFvQix1Q0FBdUMsNEJBQTRCLHNIQUFzSCxnQkFBZ0IsSUFBSSw2QkFBNkIsa0RBQWtELDRCQUE0QixxQkFBcUIsMkJBQTJCLGdGQUFnRixjQUFjLHdCQUF3Qiw0REFBNEQsMkJBQTJCLGtDQUFrQywrQkFBK0IsbURBQW1ELDBCQUEwQiw2QkFBNkIsMkJBQTJCLHNCQUFzQixtQkFBbUIsWUFBWSxLQUFLLGlDQUFpQyw2QkFBNkIseUJBQXlCLG1DQUFtQyxtQkFBbUIsY0FBYyxpQ0FBaUMsbUJBQW1CLG9DQUFvQyxFQUFFLGlPQUFpTyx1QkFBdUIsYUFBYSxzQkFBc0IsZUFBZSxRQUFRLDJCQUEyQixJQUFJLFdBQVcseURBQXlELDJCQUEyQixJQUFJLFdBQVcscUJBQXFCLHNCQUFzQiwwQkFBMEIsRUFBRSx3Q0FBd0MsSUFBSSxLQUFLLGlDQUFpQyxpQ0FBaUMsY0FBYyx5QkFBeUIsaUNBQWlDLGNBQWMsVUFBVSw0REFBNEQsSUFBSSxnQkFBZ0IscUJBQXFCLElBQUksZ0JBQWdCLFVBQVUsaUNBQWlDLEVBQUUseUJBQXlCLHVCQUF1QixhQUFhLHdCQUF3QixrQkFBa0IsbUJBQW1CLG1DQUFtQyxNQUFNLGNBQWMsU0FBUyw4UEFBOFAsZ0JBQWdCLHNCQUFzQixnR0FBZ0csY0FBYyxPQUFPLGFBQWEsMEdBQTBHLGNBQWMsb0JBQW9CLGNBQWMsK0JBQStCLGNBQWMsb0JBQW9CLGNBQWMscUJBQXFCLGFBQWEsaWhCQUFpaEIsSUFBSSxPQUFPLFdBQVcsa0NBQWtDLFNBQVMsZUFBZSxTQUFTLGlCQUFpQixva0JBQW9rQixlQUFlLFVBQVUsZUFBZSxTQUFTLGVBQWUsSUFBSSxlQUFlLFNBQVMsZUFBZSxJQUFJLGVBQWUsU0FBUyxlQUFlLE9BQU8sZUFBZSxTQUFTLGdCQUFnQixLQUFLLHVCQUF1QixFQUFFLGtCQUFrQix1QkFBdUIsT0FBTyxjQUFjLDBCQUEwQiwrREFBK0Qsa0hBQWtILE1BQU0scUNBQXFDLEdBQUcsdUJBQXVCLGFBQWEsY0FBYyxzQ0FBc0Msc0JBQXNCLHVCQUF1QixrQ0FBa0MsZ0JBQWdCLDRCQUE0QixrQkFBa0IscUJBQXFCLHNCQUFzQixNQUFNLDZCQUE2QixrQkFBa0IscUJBQXFCLFNBQVMsNkJBQTZCLHVCQUF1QixrQ0FBa0MsbUNBQW1DLHdCQUF3QixTQUFTLGlCQUFpQix1QkFBdUIsa0NBQWtDLG1DQUFtQyx1QkFBdUIsVUFBVSxHQUFHLHVCQUF1QixhQUFhLGlCQUFpQiwwQkFBMEIsMkNBQTJDLDhCQUE4QixzQkFBc0IsZ0VBQWdFLFVBQVUsV0FBVyxNQUFNLDRCQUE0Qiw2Q0FBNkMsd0NBQXdDLEVBQUUsWUFBWSx1QkFBdUIsYUFBYSwyQkFBMkIsY0FBYyxZQUFZLGNBQWMsWUFBWSxnQkFBZ0Isa0JBQWtCLGNBQWMsWUFBWSxnQkFBZ0Isa0JBQWtCLGNBQWMsWUFBWSxjQUFjLFlBQVksY0FBYyxZQUFZLGdCQUFnQixrQkFBa0IsY0FBYyxZQUFZLGdCQUFnQixrQkFBa0IsY0FBYyxZQUFZLGNBQWMsWUFBWSxjQUFjLFlBQVksY0FBYyxZQUFZLHNCQUFzQixjQUFjLCtDQUErQyxnREFBZ0QsY0FBYywwQ0FBMEMsMEJBQTBCLGdEQUFnRCwyQkFBMkIsdUNBQXVDLHdFQUF3RSxvRUFBb0UsNkRBQTZELDJDQUEyQyxJQUFJLG9DQUFvQyw2QkFBNkIsMEJBQTBCLGdGQUFnRiwwREFBMEQsSUFBSSxpQkFBaUIsWUFBWSxJQUFJLGlCQUFpQixZQUFZLElBQUksNENBQTRDLFlBQVksSUFBSSxLQUFLLHdEQUF3RCxZQUFZLElBQUksK0NBQStDLFlBQVksSUFBSSxLQUFLLHFDQUFxQyxZQUFZLE9BQU8sS0FBSyxpQkFBaUIsSUFBSSwrQkFBK0IsMERBQTBELFlBQVksSUFBSSxnQkFBZ0IsSUFBSSxLQUFLLGtCQUFrQixnRkFBZ0YsWUFBWSxJQUFJLHNCQUFzQixlQUFlLHNCQUFzQixLQUFLLG9CQUFvQiw0R0FBNEcsWUFBWSxPQUFPLEtBQUssc0JBQXNCLElBQUksOEVBQThFLFNBQVMsbUNBQW1DLGVBQWUsNkVBQTZFLGdCQUFnQiw4QkFBOEIsd0JBQXdCLGtCQUFrQixHQUFHLGNBQWMsWUFBWSxJQUFJLGlDQUFpQyxHQUFHLFNBQVMsR0FBRyxhQUFhLFlBQVksT0FBTyx3QkFBd0Isa0JBQWtCLGVBQWUsR0FBRyx5Q0FBeUMsK0JBQStCLFlBQVksSUFBSSxnREFBZ0Qsc0NBQXNDLEdBQUcsaUJBQWlCLElBQUksbUJBQW1CLFlBQVksSUFBSSxpQkFBaUIsK0NBQStDLEdBQUcsWUFBWSxPQUFPLHdDQUF3QyxHQUFHLGlCQUFpQixPQUFPLG9DQUFvQyw2QkFBNkIsR0FBRyxpQkFBaUIsSUFBSSxpQkFBaUIsWUFBWSxJQUFJLEtBQUssZUFBZSxZQUFZLE9BQU8sMkRBQTJELGlEQUFpRCxrQkFBa0IsWUFBWSxPQUFPLGlCQUFpQixZQUFZLElBQUksaUJBQWlCLDZCQUE2Qiw4QkFBOEIsR0FBRyw4QkFBOEIsSUFBSSx1QkFBdUIsaUNBQWlDLElBQUkscUNBQXFDLGFBQWEsWUFBWSxJQUFJLG9EQUFvRCw0QkFBNEIsWUFBWSxJQUFJLGlCQUFpQiwwQkFBMEIsc0JBQXNCLEdBQUcsU0FBUyxTQUFTLEdBQUcsSUFBSSxhQUFhLGNBQWMsS0FBSyxXQUFXLGlCQUFpQixJQUFJLGlFQUFpRSxZQUFZLElBQUksaUJBQWlCLHdDQUF3QyxHQUFHLFlBQVksSUFBSSxTQUFTLFlBQVksSUFBSSxpQ0FBaUMsR0FBRyxJQUFJLDBCQUEwQixjQUFjLEdBQUcsaUJBQWlCLFlBQVksSUFBSSxpQ0FBaUMsR0FBRyx1QkFBdUIsUUFBUSxPQUFPLFNBQVMsc0NBQXNDLFNBQVMsUUFBUSxLQUFLLFNBQVMsR0FBRyxrQ0FBa0Msa0JBQWtCLEdBQUcscUJBQXFCLGdDQUFnQyxvQkFBb0IsZUFBZSx3QkFBd0IsOEdBQThHLGlDQUFpQyx3Q0FBd0Msa0JBQWtCLGdCQUFnQixJQUFJLHlCQUF5QixVQUFVLEVBQUUsc0JBQXNCLHVCQUF1QixhQUFhLDhCQUE4QixxQ0FBcUMsUUFBUSxtQ0FBbUMsT0FBTyxPQUFPLDhEQUE4RCxTQUFTLG1EQUFtRCxFQUFFLG1EQUFtRCxFQUFFLG1EQUFtRCwyQkFBMkIsT0FBTyxRQUFRLG1DQUFtQyx3Q0FBd0MsRUFBRSx3QkFBd0IsaUJBQWlCLEVBQUUsd0JBQXdCLHVCQUF1QixhQUFhLDBCQUEwQixxQkFBcUIsMkZBQTJGLG1EQUFtRCxnSEFBZ0gsK0dBQStHLFlBQVksY0FBYyxtRkFBbUYsdUJBQXVCLG9DQUFvQyxtQkFBbUIsZUFBZSxtQkFBbUIsOENBQThDLHdCQUF3QixHQUFHLGNBQWMsd0NBQXdDLElBQUksNEhBQTRILDJDQUEyQyw2QkFBNkIsZUFBZSxZQUFZLElBQUksb0VBQW9FLFVBQVUscUNBQXFDLFlBQVksSUFBSSx1RkFBdUYsVUFBVSxHQUFHLFlBQVksV0FBVyxLQUFLLDBEQUEwRCxhQUFhLHdDQUF3QywrREFBK0QsOEVBQThFLEtBQUssK0JBQStCLDBCQUEwQixxRUFBcUUsS0FBSyxjQUFjLEdBQUcsTUFBTSx5REFBeUQsdUJBQXVCLEdBQUcsTUFBTSx1Q0FBdUMsOEZBQThGLDhFQUE4RSxLQUFLLCtCQUErQiwwQkFBMEIscUVBQXFFLEtBQUssY0FBYyxHQUFHLE1BQU0seUVBQXlFLGVBQWUsR0FBRyxZQUFZLE9BQU8sS0FBSyxpQkFBaUIsSUFBSSx3QkFBd0IsWUFBWSxjQUFjLEtBQUssd0JBQXdCLFdBQVcseUJBQXlCLE1BQU0scUJBQXFCLGtCQUFrQixzQ0FBc0MsS0FBSyxrQ0FBa0MsbUJBQW1CLCtDQUErQyxnQkFBZ0IsVUFBVSx5Q0FBeUMsS0FBSyxJQUFJLHlDQUF5QyxNQUFNLGtEQUFrRCxPQUFPLHVDQUF1QyxFQUFFLHdDQUF3QyxFQUFFLHlDQUF5Qyx1REFBdUQsa0JBQWtCLE9BQU8sa0NBQWtDLE9BQU8sdUNBQXVDLHdDQUF3QyxpQkFBaUIsRUFBRSxjQUFjLHNCQUFzQixpQkFBaUIsSUFBSSxnREFBZ0QsR0FBRywyQkFBMkIsUUFBUSxJQUFJLEtBQUssb0NBQW9DLFdBQVcsZ0JBQWdCLHlCQUF5QixpQkFBaUIseUJBQXlCLGtDQUFrQyxlQUFlLDBCQUEwQix1Q0FBdUMsT0FBTyxtRkFBbUYsMkJBQTJCLHlCQUF5QixHQUFHLEVBQUUsNkJBQTZCLHVCQUF1QixhQUFhLGdEQUFnRCwwQkFBMEIsNEJBQTRCLDJCQUEyQixZQUFZLElBQUksS0FBSyxrQkFBa0IsWUFBWSxJQUFJLDRCQUE0Qix1QkFBdUIsUUFBUSxJQUFJLHlCQUF5QixVQUFVLFFBQVEsSUFBSSxZQUFZLFNBQVMsS0FBSyxFQUFFLDBDQUEwQyx1QkFBdUIsYUFBYSxnQkFBZ0Isd0VBQXdFLGdEQUFnRCxrQkFBa0Isc0xBQXNMLG9GQUFvRixvQkFBb0Isb1hBQW9YLGtKQUFrSiw0QkFBNEIsdUJBQXVCLGdCQUFnQixxQkFBcUIsdUJBQXVCLHlCQUF5QiwyQkFBMkIsdUZBQXVGLFFBQVEsSUFBSSxxSEFBcUgsY0FBYyxVQUFVLE9BQU8sS0FBSyx1QkFBdUIsSUFBSSxlQUFlLG9CQUFvQixnQ0FBZ0MsS0FBSyxvQkFBb0IsOEJBQThCLGVBQWUsU0FBUywwQkFBMEIsOENBQThDLEdBQUcsdUJBQXVCLGFBQWEsNkJBQTZCLDBDQUEwQyxjQUFjLGVBQWUsWUFBWSxnQkFBZ0IsS0FBSyxnQkFBZ0IsaUJBQWlCLG9EQUFvRCxFQUFFLG9DQUFvQyxtRUFBbUUsY0FBYyxpQkFBaUIsZ0JBQWdCLGtCQUFrQixzRkFBc0YsbUJBQW1CLFVBQVUseUJBQXlCLFVBQVUsMkVBQTJFLEVBQUUsS0FBSyxPQUFPLHlHQUF5RyxZQUFZLGdCQUFnQixXQUFXLFFBQVEscUNBQXFDLG9DQUFvQyxZQUFZLGVBQWUsNkJBQTZCLCtCQUErQiwyQkFBMkIsY0FBYyxzQ0FBc0Msb0NBQW9DLGdCQUFnQixnQkFBZ0IsOEJBQThCLCtCQUErQiw0QkFBNEIsR0FBRyxHQUFHLE9BQU8sdUNBQXVDLFlBQVksZ0JBQWdCLFdBQVcsUUFBUSw2QkFBNkIsK0JBQStCLFlBQVksZUFBZSxxQkFBcUIsMkJBQTJCLG1DQUFtQyxHQUFHLEdBQUcsT0FBTyxxRUFBcUUsWUFBWSxnQkFBZ0IsV0FBVyxRQUFRLHFDQUFxQyxvQ0FBb0MsWUFBWSxjQUFjLHNDQUFzQyxvQ0FBb0MsZ0JBQWdCLGVBQWUsNkJBQTZCLGdDQUFnQyxtQ0FBbUMsZ0JBQWdCLDhCQUE4QixnQ0FBZ0Msb0NBQW9DLEdBQUcsR0FBRywrRkFBK0YsWUFBWSxZQUFZLFdBQVcsS0FBSyxXQUFXLFFBQVEsNEJBQTRCLGtEQUFrRCxPQUFPLHNEQUFzRCxZQUFZLGVBQWUsb0JBQW9CLGtEQUFrRCxPQUFPLGtEQUFrRCxtQ0FBbUMsR0FBRyxHQUFHLGtDQUFrQyxZQUFZLFlBQVksV0FBVyxLQUFLLFdBQVcsUUFBUSxvQ0FBb0Msa0RBQWtELE9BQU8sNERBQTRELFlBQVksY0FBYyxxQ0FBcUMsa0RBQWtELE9BQU8sNERBQTRELGdCQUFnQixlQUFlLDRCQUE0QixrREFBa0QsT0FBTyx3REFBd0QsbUNBQW1DLGdCQUFnQiw2QkFBNkIsa0RBQWtELE9BQU8sd0RBQXdELG9DQUFvQyxHQUFHLEdBQUcsc0JBQXNCLFlBQVksWUFBWSxXQUFXLEtBQUssV0FBVyxhQUFhLG9DQUFvQyxrREFBa0QsT0FBTyw0REFBNEQsaUJBQWlCLGdCQUFnQixxQ0FBcUMsa0RBQWtELE9BQU8sNERBQTRELGtCQUFrQixpQkFBaUIsNEJBQTRCLGtEQUFrRCxPQUFPLHdEQUF3RCxxQ0FBcUMsa0JBQWtCLDZCQUE2QixrREFBa0QsT0FBTyx3REFBd0Qsc0NBQXNDLEdBQUcsWUFBWSwyQkFBMkIsT0FBTyxxQ0FBcUMsY0FBYyxZQUFZLDJCQUEyQixPQUFPLHFEQUFxRCxnQkFBZ0IsV0FBVywyQkFBMkIsT0FBTyxxQ0FBcUMsZUFBZSxhQUFhLDJCQUEyQixPQUFPLG9EQUFvRCxnQkFBZ0IsV0FBVyxvQkFBb0IseURBQXlELE9BQU8sT0FBTyxxQ0FBcUMsb0RBQW9ELE9BQU8sOERBQThELGdCQUFnQixZQUFZLG9CQUFvQix5REFBeUQsT0FBTyxPQUFPLHFDQUFxQyxvREFBb0QsT0FBTyw4REFBOEQsaUJBQWlCLG9CQUFvQixvQkFBb0IseURBQXlELE9BQU8sT0FBTyxxQ0FBcUMsc0RBQXNELE9BQU8sOERBQThELHlCQUF5QixhQUFhLG9CQUFvQix5REFBeUQsT0FBTyxPQUFPLHFDQUFxQyxzREFBc0QsT0FBTyx5RUFBeUUsa0JBQWtCLGVBQWUsb0JBQW9CLHlEQUF5RCxPQUFPLE9BQU8scUNBQXFDLHNCQUFzQixVQUFVLGtCQUFrQixTQUFTLG1DQUFtQyxPQUFPLDhEQUE4RCxvQkFBb0IsYUFBYSxvQkFBb0IseURBQXlELE9BQU8sT0FBTyxxQ0FBcUMsMkRBQTJELE9BQU8sOERBQThELGtCQUFrQixXQUFXLG9CQUFvQixpRUFBaUUsT0FBTywrREFBK0QsbURBQW1ELG1DQUFtQyxPQUFPLCtEQUErRCxXQUFXLG9CQUFvQixnRUFBZ0UsT0FBTywrREFBK0QsbURBQW1ELG1DQUFtQyxPQUFPLCtEQUErRCxjQUFjLG9DQUFvQyxPQUFPLGdCQUFnQixnQ0FBZ0MsU0FBUyxtREFBbUQsRUFBRSxtREFBbUQsRUFBRSxtREFBbUQsNENBQTRDLE9BQU8sT0FBTywyQkFBMkIsdUJBQXVCLHNCQUFzQixtQ0FBbUMsZUFBZSxtREFBbUQsU0FBUyxtREFBbUQsRUFBRSxtREFBbUQseURBQXlELE9BQU8sT0FBTyxjQUFjLDRDQUE0QyxjQUFjLG9DQUFvQyxPQUFPLGlCQUFpQixnQ0FBZ0MsU0FBUyxtREFBbUQsRUFBRSxtREFBbUQsRUFBRSxtREFBbUQsNENBQTRDLE9BQU8sT0FBTywyQkFBMkIsdUJBQXVCLHNCQUFzQixtQ0FBbUMsZUFBZSxtREFBbUQsU0FBUyxtREFBbUQsRUFBRSxtREFBbUQseURBQXlELE9BQU8sT0FBTyxjQUFjLDRDQUE0QyxjQUFjLG9CQUFvQixzREFBc0QsT0FBTyxpREFBaUQsbUJBQW1CLGNBQWMsNkJBQTZCLDBCQUEwQixtQkFBbUIsZUFBZSw4QkFBOEIsMEJBQTBCLG9CQUFvQixjQUFjLG1DQUFtQyxPQUFPLHFDQUFxQyxFQUFFLHFDQUFxQyxrQkFBa0IsYUFBYSwyQkFBMkIsT0FBTyxvREFBb0QsbUJBQW1CLEVBQUUsRUFBRSxxQkFBcUIsdUJBQXVCLGFBQWEseUNBQXlDLHdCQUF3QixxQkFBcUIsaUJBQWlCLHFDQUFxQyxvRUFBb0UsRUFBRSxpQ0FBaUMsdUJBQXVCLCtCQUErQixxQ0FBcUMsUUFBUSxtQ0FBbUMsT0FBTyxPQUFPLGlFQUFpRSxxQ0FBcUMsZ0JBQWdCLDBEQUEwRCwyRUFBMkUsU0FBUyxtREFBbUQsRUFBRSxtREFBbUQsRUFBRSxtREFBbUQsc0RBQXNELE9BQU8sUUFBUSxtQ0FBbUMsaUNBQWlDLEVBQUUsRUFBRSxxQkFBcUIsdUJBQXVCLGFBQWEsZ0NBQWdDLGNBQWMsVUFBVSw4Q0FBOEMsaURBQWlELGlEQUFpRCwyQ0FBMkMsOENBQThDLDhDQUE4QyxnREFBZ0Qsa0RBQWtELHFCQUFxQixjQUFjLGlCQUFpQixJQUFJLGtCQUFrQixRQUFRLElBQUksa0JBQWtCLFFBQVEsSUFBSSxrQkFBa0IsUUFBUSxJQUFJLGtCQUFrQixRQUFRLElBQUksa0JBQWtCLFNBQVMsd0JBQXdCLHVFQUF1RSxpREFBaUQsYUFBYSw4RkFBOEYsV0FBVyxzRUFBc0UsK0JBQStCLFFBQVEsV0FBVyx5RUFBeUUsY0FBYyxRQUFRLFdBQVcsS0FBSyxhQUFhLDBQQUEwUCwyQkFBMkIsdURBQXVELHVCQUF1QixrQ0FBa0MsS0FBSyw4QkFBOEIsc0JBQXNCLFlBQVksNkVBQTZFLHlLQUF5SyxlQUFlLGlCQUFpQixXQUFXLGdDQUFnQyx1SEFBdUgsdUJBQXVCLGNBQWMsMEVBQTBFLGdCQUFnQixtRkFBbUYsNENBQTRDLDBDQUEwQyxTQUFTLEtBQUssT0FBTyxpQ0FBaUMsbUJBQW1CLHdCQUF3QixLQUFLLHdDQUF3QyxjQUFjLFVBQVUsYUFBYSw2Q0FBNkMsV0FBVyx1Q0FBdUMsR0FBRyxtQ0FBbUMsK0JBQStCLFdBQVcsZ0RBQWdELGNBQWMsVUFBVSxhQUFhLHVEQUF1RCxVQUFVLFVBQVUsVUFBVSwwQkFBMEIsS0FBSyxxQ0FBcUMsR0FBRyxzQkFBc0IsNEJBQTRCLEtBQUssd0NBQXdDLGNBQWMsVUFBVSxhQUFhLG9DQUFvQyxXQUFXLHdDQUF3Qyx1QkFBdUIsR0FBRyx1QkFBdUIscUJBQXFCLHNCQUFzQixLQUFLLHdDQUF3QyxjQUFjLFVBQVUsYUFBYSw0Q0FBNEMsV0FBVyxLQUFLLE1BQU0sbUNBQW1DLElBQUksa0ZBQWtGLHNDQUFzQyx1QkFBdUIsZ0JBQWdCLG1EQUFtRCxrR0FBa0csd0JBQXdCLHVJQUF1SSx5Q0FBeUMsYUFBYSxxV0FBcVcsZUFBZSxpQkFBaUIsV0FBVyxnQ0FBZ0MsUUFBUSxJQUFJLHNCQUFzQix3T0FBd08sK0JBQStCLGNBQWMscUNBQXFDLGNBQWMsMEVBQTBFLGdCQUFnQixtRkFBbUYsa0JBQWtCLHdDQUF3QyxpQkFBaUIsV0FBVyw2Q0FBNkMscUVBQXFFLEtBQUssd0NBQXdDLGNBQWMsVUFBVSxhQUFhLHNCQUFzQixXQUFXLHVEQUF1RCwyQ0FBMkMsV0FBVyxLQUFLLE1BQU0sZ0ZBQWdGLEtBQUssb0JBQW9CLHdDQUF3QyxLQUFLLFlBQVksV0FBVyw2Q0FBNkMsMkJBQTJCLGtEQUFrRCxXQUFXLDBCQUEwQixjQUFjLFVBQVUsYUFBYSxzQkFBc0IsV0FBVyx1REFBdUQsMkJBQTJCLEtBQUssaUdBQWlHLEdBQUcsYUFBYSxxREFBcUQsZ0JBQWdCLHNCQUFzQixlQUFlLGlCQUFpQiwrREFBK0QsV0FBVyxZQUFZLFdBQVcsWUFBWSxnQkFBZ0IsWUFBWSxhQUFhLDBDQUEwQyxXQUFXLFlBQVksV0FBVyxhQUFhLGdCQUFnQixtRUFBbUUsa0JBQWtCLGVBQWUsaUJBQWlCLHNFQUFzRSxZQUFZLGFBQWEsaURBQWlELGdCQUFnQix1TkFBdU4sa0JBQWtCLDZVQUE2VSxnQkFBZ0Isc0JBQXNCLGtCQUFrQixrSkFBa0osZ0JBQWdCLGtDQUFrQywyRUFBMkUsS0FBSyxnRUFBZ0UsYUFBYSxrQkFBa0IsNENBQTRDLGtFQUFrRSxlQUFlLHdCQUF3Qiw2Q0FBNkMsTUFBTSxhQUFhLHN2QkFBc3ZCLHNCQUFzQixTQUFTLEtBQUssd0NBQXdDLFNBQVMsc0JBQXNCLHdCQUF3QiwwQkFBMEIsNkJBQTZCLEtBQUssdUJBQXVCLDBDQUEwQyw4QkFBOEIsZ0JBQWdCLGtEQUFrRCxLQUFLLDJDQUEyQyxZQUFZLFlBQVksWUFBWSxZQUFZLEtBQUssc0JBQXNCLFNBQVMsS0FBSyxvREFBb0Qsd0JBQXdCLDBCQUEwQiw2QkFBNkIsS0FBSyxvREFBb0QsdUJBQXVCLDBDQUEwQyx5QkFBeUIsTUFBTSwrQkFBK0IsS0FBSywwQ0FBMEMsa0NBQWtDLEtBQUssMkJBQTJCLDRCQUE0QixZQUFZLFlBQVksWUFBWSxZQUFZLFlBQVksNEhBQTRILGlDQUFpQyx5Q0FBeUMsa0VBQWtFLFNBQVMsS0FBSyxzREFBc0Qsd0JBQXdCLDBCQUEwQiw2QkFBNkIsS0FBSyxzREFBc0QsdUJBQXVCLDRDQUE0Qyx5QkFBeUIsTUFBTSwrQkFBK0IsS0FBSywwQ0FBMEMsa0NBQWtDLEtBQUssMkJBQTJCLDRCQUE0QixZQUFZLFlBQVksWUFBWSxZQUFZLFlBQVksa0NBQWtDLGdKQUFnSixRQUFRLGVBQWUsRUFBRSxzQkFBc0IsdUJBQXVCLGFBQWEsc0NBQXNDLHNCQUFzQixpREFBaUQsa0NBQWtDLEVBQUUsNEJBQTRCLHVCQUF1QixhQUFhLGdFQUFnRSx1REFBdUQsT0FBTyx1Q0FBdUMsU0FBUyxtREFBbUQsRUFBRSxtREFBbUQsRUFBRSxtREFBbUQsRUFBRSxtREFBbUQsRUFBRSxtREFBbUQsd0NBQXdDLE9BQU8sT0FBTyx1R0FBdUcsU0FBUyxtREFBbUQsRUFBRSxtREFBbUQsRUFBRSxtREFBbUQsRUFBRSxtREFBbUQsRUFBRSxtREFBbUQsd0NBQXdDLE9BQU8sUUFBUSxtQ0FBbUMseUNBQXlDLDRCQUE0Qix1REFBdUQsT0FBTyxnQkFBZ0IsZ0RBQWdELE9BQU8sT0FBTyw2R0FBNkcsU0FBUyxtREFBbUQsRUFBRSxtREFBbUQsRUFBRSxtREFBbUQsRUFBRSxtREFBbUQsRUFBRSxtREFBbUQsd0NBQXdDLE9BQU8sUUFBUSxtQ0FBbUMseUNBQXlDLDRCQUE0Qix1REFBdUQsT0FBTyxrQkFBa0IsZ0RBQWdELE9BQU8sT0FBTyxpSUFBaUksU0FBUyxvREFBb0QsRUFBRSxvREFBb0QsRUFBRSxvREFBb0QsRUFBRSxvREFBb0QsRUFBRSxvREFBb0Qsd0NBQXdDLE9BQU8sUUFBUSxtQ0FBbUMseUNBQXlDLDRCQUE0Qix1REFBdUQsT0FBTyxvQkFBb0IsZ0RBQWdELE9BQU8sT0FBTyxnSkFBZ0osU0FBUyxvREFBb0QsRUFBRSxvREFBb0QsRUFBRSxvREFBb0QsRUFBRSxvREFBb0QsRUFBRSxvREFBb0Qsd0NBQXdDLE9BQU8sUUFBUSxtQ0FBbUMseUNBQXlDLEVBQUUsMEJBQTBCLHVCQUF1QixxQkFBcUIsTUFBTSxxQkFBcUIsTUFBTSxxQkFBcUIsTUFBTSwrQ0FBK0MsVUFBVSxFQUFFLHlEQUF5RCx1QkFBdUIsMEVBQTBFLGdCQUFnQixpQkFBaUIsYUFBYSwwQ0FBMEMsUUFBUSxXQUFXLDRCQUE0QixVQUFVLDBCQUEwQixRQUFRLFdBQVcsaUJBQWlCLFNBQVMsZ0JBQWdCLGdDQUFnQyxzQkFBc0Isb0JBQW9CLFdBQVcseUJBQXlCLGNBQWMsMEJBQTBCLG9CQUFvQix1QkFBdUIsV0FBVyxhQUFhLG1CQUFtQix3Q0FBd0Msd0RBQXdELDhCQUE4QixpQ0FBaUMsc0JBQXNCLGFBQWEsbUNBQW1DLHFCQUFxQixFQUFFLHlCQUF5QixVQUFVLHdCQUF3QixjQUFjLGlCQUFpQiwwQkFBMEIsb0JBQW9CLHVCQUF1QixvQkFBb0Isa0JBQWtCLGFBQWEsd0NBQXdDLG9FQUFvRSx5Q0FBeUMsaUNBQWlDLGlDQUFpQyw2Q0FBNkMsc0VBQXNFLGdDQUFnQywwRUFBMEUseUNBQXlDLHNCQUFzQixFQUFFLCtDQUErQyxtQkFBbUIsK0JBQStCLFlBQVkscUNBQXFDLCtCQUErQixnQ0FBZ0MsWUFBWSxnQ0FBZ0MsWUFBWSxZQUFZLHdDQUF3Qyx5RUFBeUUsc0hBQXNILDBCQUEwQiwyQkFBMkIsMEJBQTBCLGVBQWUsa0ZBQWtGLDJDQUEyQyx5RkFBeUYsMkdBQTJHLFVBQVUsVUFBVSxnQkFBZ0IsZUFBZSxnQkFBZ0IsS0FBSyxpQkFBaUIsZUFBZSxnQkFBZ0IsZUFBZSxnQkFBZ0IsS0FBSyxrQkFBa0IsbUJBQW1CLDZEQUE2RCwyQ0FBMkMscUNBQXFDLHlEQUF5RCx5Q0FBeUMsbUNBQW1DLDBEQUEwRCxhQUFhLHVEQUF1RCwrQ0FBK0MsbUZBQW1GLGtDQUFrQywyQkFBMkIsMkJBQTJCLEdBQUcsd0JBQXdCLGlDQUFpQyxzQkFBc0Isa0NBQWtDLEVBQUUsb0RBQW9ELHFEQUFxRCxZQUFZLElBQUksb0RBQW9ELFdBQVcsWUFBWSxVQUFVLEdBQUcsdURBQXVELFlBQVksa0NBQWtDLFlBQVksaUJBQWlCLDJEQUEyRCx3QkFBd0IsaUNBQWlDLGtDQUFrQyxrQ0FBa0MsaURBQWlELFFBQVEsSUFBSSx5Q0FBeUMsV0FBVyxRQUFRLHFCQUFxQix1QkFBdUIsS0FBSyxzQkFBc0IsVUFBVSxHQUFHLHVEQUF1RCxZQUFZLGtDQUFrQyxZQUFZLGlCQUFpQixHQUFHLGtDQUFrQyxRQUFRLElBQUksc0NBQXNDLHdEQUF3RCxzQkFBc0IsOENBQThDLFNBQVMsbUNBQW1DLHdFQUF3RSxpREFBaUQsOEJBQThCLFFBQVEsSUFBSSxvREFBb0Qsa0NBQWtDLEtBQUssMEJBQTBCLDJCQUEyQixHQUFHLDhDQUE4Qyw2QkFBNkIscUVBQXFFLDBDQUEwQyxxQkFBcUIsa0NBQWtDLHNCQUFzQixzQkFBc0IsMERBQTBELE9BQU8sNkhBQTZILDRCQUE0Qix1Q0FBdUMsdURBQXVELGVBQWUsZUFBZSxlQUFlLGtCQUFrQixLQUFLLG1CQUFtQiwwQkFBMEIsSUFBSSwrQkFBK0Isc0JBQXNCLHVCQUF1QiwrQ0FBK0MsNENBQTRDLDRDQUE0QyxzQ0FBc0Msd0NBQXdDLHdDQUF3Qyx3Q0FBd0MsMENBQTBDLDBDQUEwQyx1REFBdUQsMENBQTBDLFdBQVcsY0FBYyx5QkFBeUIsMkJBQTJCLEVBQUUsaUNBQWlDLHVCQUF1QixhQUFhLG9EQUFvRCx3QkFBd0IsaUNBQWlDLGtCQUFrQix5QkFBeUIsd0JBQXdCLHFEQUFxRCxvQkFBb0IsRUFBRSxrQkFBa0IsdUJBQXVCLHVCQUF1QixvQkFBb0Isd0JBQXdCLHdCQUF3Qix3REFBd0QsZ0NBQWdDLGlDQUFpQyxLQUFLLGdCQUFnQixZQUFZLHNFQUFzRSw4QkFBOEIsbUZBQW1GLGNBQWMsNkdBQTZHLHlGQUF5RixvQkFBb0IsZ0JBQWdCLG9CQUFvQixxRUFBcUUsZ0lBQWdJLGNBQWMsbUJBQW1CLFlBQVksV0FBVyxFQUFFLHVCQUF1QixzQkFBc0IsU0FBUyxrQkFBa0IsT0FBTyw2REFBNkQsY0FBYyxpQkFBaUIsc0JBQXNCLG9FQUFvRSxJQUFJLEtBQUssa0JBQWtCLFVBQVUsc0JBQXNCLE1BQU0seUhBQXlILE1BQU0sb0JBQW9CLGdFQUFnRSxNQUFNLDBFQUEwRSxNQUFNLG1EQUFtRCxNQUFNLDJCQUEyQixNQUFNLHdCQUF3QixNQUFNLHdCQUF3QixNQUFNLHFCQUFxQixxR0FBcUcsVUFBVSxHQUFHLHVCQUF1QixnQ0FBZ0MsMERBQTBELElBQUksaUJBQWlCLFFBQVEsV0FBVyxrREFBa0QsV0FBVyxLQUFLLDRCQUE0Qix1RUFBdUUsSUFBSSw0REFBNEQsVUFBVSw4QkFBOEIsUUFBUSxJQUFJLEtBQUssd0JBQXdCLGdDQUFnQyxRQUFRLElBQUksS0FBSyxPQUFPLFFBQVEsUUFBUSxJQUFJLGlCQUFpQixnQ0FBZ0MsSUFBSSxZQUFZLGFBQWEsSUFBSSxXQUFXLFNBQVMsK0JBQStCLDBEQUEwRCxJQUFJLEtBQUssa0NBQWtDLElBQUksaUJBQWlCLGtDQUFrQyxRQUFRLElBQUksOENBQThDLHVCQUF1QixRQUFRLElBQUksS0FBSyx3QkFBd0Isc0NBQXNDLHVCQUF1QixRQUFRLElBQUksWUFBWSxPQUFPLFVBQVUsR0FBRyx1QkFBdUIsYUFBYSw2R0FBNkcscUJBQXFCLElBQUksMkJBQTJCLHdCQUF3Qiw2REFBNkQsWUFBWSxLQUFLLEtBQUssb0NBQW9DLGdFQUFnRSxZQUFZLG9CQUFvQixTQUFTLDJEQUEyRCxPQUFPLHVEQUF1RCxjQUFjLFNBQVMsVUFBVSwrQkFBK0IsMEJBQTBCLHdGQUF3RixpQkFBaUIsUUFBUSxtQkFBbUIsS0FBSyw2REFBNkQsTUFBTSxPQUFPLFlBQVksV0FBVyx1Q0FBdUMsVUFBVSxHQUFHLHVCQUF1QixhQUFhLHdDQUF3QyxZQUFZLFFBQVEscUJBQXFCLDBEQUEwRCxLQUFLLDJDQUEyQyw4TEFBOEwsVUFBVSxHQUFHLHVCQUF1QixhQUFhLHNCQUFzQixjQUFjLHdEQUF3RCxtREFBbUQsNkJBQTZCLGdHQUFnRyxVQUFVLDBIQUEwSCxrQkFBa0IsNERBQTRELG9CQUFvQiwwRUFBMEUsZ0JBQWdCLDZDQUE2Qyx1RUFBdUUsa0JBQWtCLHFUQUFxVCxrQkFBa0IsbUJBQW1CLCtFQUErRSw0QkFBNEIsaUVBQWlFLDRCQUE0QixPQUFPLDBCQUEwQixPQUFPLGtHQUFrRyxrRkFBa0YsWUFBWSxJQUFJLEtBQUssZ0JBQWdCLElBQUkscUJBQXFCLFlBQVksMkJBQTJCLHFCQUFxQiwwQkFBMEIsTUFBTSxZQUFZLEtBQUssY0FBYyxTQUFTLFNBQVMsb0JBQW9CLDhEQUE4RCxxQkFBcUIsaUVBQWlFLHlCQUF5QiwwQ0FBMEMsMERBQTBELGVBQWUsaUVBQWlFLGVBQWUsNEZBQTRGLGVBQWUsa0NBQWtDLDBCQUEwQix1Q0FBdUMsb0RBQW9ELDRCQUE0QixtQ0FBbUMsaVBBQWlQLDJDQUEyQyxnSUFBZ0ksTUFBTSxZQUFZLDJCQUEyQixxR0FBcUcsaUJBQWlCLHdFQUF3RSw0QkFBNEIseUZBQXlGLDBCQUEwQixXQUFXLDRCQUE0QixtR0FBbUcsZ0JBQWdCLElBQUksNkJBQTZCLG1GQUFtRiwrQkFBK0IsbUNBQW1DLDJCQUEyQiw0QkFBNEIsbUdBQW1HLDBCQUEwQixPQUFPLFlBQVkscUJBQXFCLGtDQUFrQyxxQkFBcUIsdUNBQXVDLG1FQUFtRSw2Q0FBNkMsNkJBQTZCLG9DQUFvQyxtQ0FBbUMsbUhBQW1ILGlDQUFpQyx5QkFBeUIsaUdBQWlHLHFCQUFxQix3Q0FBd0MsdUxBQXVMLHdCQUF3Qiw4QkFBOEIscUNBQXFDLGlCQUFpQiw0Q0FBNEMsaUJBQWlCLG9GQUFvRixFQUFFLGlIQUFpSCx1QkFBdUIsYUFBYSx5QkFBeUIsMEJBQTBCLGdEQUFnRCxFQUFFLG9CQUFvQix1QkFBdUIsYUFBYSxnQkFBZ0IsZ0NBQWdDLFVBQVUsd0NBQXdDLFdBQVcsU0FBUyxFQUFFLHVFQUF1RSwwQ0FBMEMsc0JBQXNCLDhFQUE4RSxrQkFBa0Isa0RBQWtELHFCQUFxQix3QkFBd0IsY0FBYyxLQUFLLHlHQUF5RyxPQUFPLG9DQUFvQyw2QkFBNkIsbUVBQW1FLElBQUksRUFBRSxFQUFFLG9DQUFvQyw2QkFBNkIsbUJBQW1CLFlBQVksRUFBRSw2REFBNkQsK0VBQStFLG1CQUFtQixTQUFTLGdCQUFnQixjQUFjLGtDQUFrQyxlQUFlLDRDQUE0QyxLQUFLLEVBQUUsb0RBQW9ELHFCQUFxQixTQUFTLGdDQUFnQyxnREFBZ0QsS0FBSyxnQkFBZ0IseURBQXlELGFBQWEsZ0JBQWdCLHNDQUFzQyxvQ0FBb0MsR0FBRyx1QkFBdUIsYUFBYSx5QkFBeUIsc0JBQXNCLE1BQU0sa0NBQWtDLCtFQUErRSxnREFBZ0QsK0JBQStCLGVBQWUsK0JBQStCLEVBQUUscURBQXFELFlBQVksd0lBQXdJLEtBQUssdUJBQXVCLGlKQUFpSixVQUFVLEVBQUUsb0JBQW9CLHVCQUF1QixzQkFBc0IsU0FBUyxtQ0FBbUMsc0JBQXNCLGtCQUFrQixpQkFBaUIsMEJBQTBCLG9GQUFvRixFQUFFLGdEQUFnRCx3REFBd0Qsc0NBQXNDLEtBQUssT0FBTyx3Q0FBd0Msc0NBQXNDLDBDQUEwQyxHQUFHLHVCQUF1Qix3QkFBd0IsMEJBQTBCLHVCQUF1QiwwREFBMEQsR0FBRyx1QkFBdUIsYUFBYSxZQUFZLGdCQUFnQiwwRkFBMEYseUJBQXlCLGlFQUFpRSxrQkFBa0IsNEJBQTRCLE1BQU0sMkJBQTJCLDJEQUEyRCxvQkFBb0IscUNBQXFDLDZCQUE2Qix5QkFBeUIsYUFBYSwyQkFBMkIsRUFBRSxhQUFhLHVCQUF1QixhQUFhLHNCQUFzQixlQUFlLFFBQVEsZ0JBQWdCLElBQUksZ0JBQWdCLElBQUksc0JBQXNCLDZCQUE2QixTQUFTLCtCQUErQixJQUFJLFdBQVcsZ0JBQWdCLElBQUksY0FBYyxRQUFRLE9BQU8sZUFBZSxNQUFNLFFBQVEsZ0NBQWdDLFlBQVksWUFBWSx5QkFBeUIsZ0NBQWdDLEVBQUUsc0JBQXNCLHVCQUF1QixhQUFhLHFEQUFxRCxtQkFBbUIsZUFBZSxVQUFVLHVCQUF1QixtQkFBbUIsc0RBQXNELGVBQWUsSUFBSSxjQUFjLFVBQVUsSUFBSSw4REFBOEQseUNBQXlDLDBCQUEwQixVQUFVLG9CQUFvQiwrQkFBK0Isb0VBQW9FLGNBQWMsaUNBQWlDLElBQUksbUJBQW1CLFVBQVUsSUFBSSw0REFBNEQsVUFBVSxFQUFFLCtDQUErQyx1QkFBdUIsYUFBYSwwQkFBMEIsYUFBYSxrREFBa0QsU0FBUyxRQUFRLFdBQVcsZUFBZSxJQUFJLHdCQUF3QixTQUFTLFlBQVksV0FBVyw0QkFBNEIsV0FBVyxLQUFLLFdBQVcsd0JBQXdCLDJCQUEyQixXQUFXLGVBQWUsT0FBTyw4Q0FBOEMsa0NBQWtDLFVBQVUsU0FBUyxjQUFjLDBFQUEwRSxHQUFHLHVCQUF1QixhQUFhLHdCQUF3QixrRUFBa0UsSUFBSSwwQkFBMEIsWUFBWSxJQUFJLEtBQUssV0FBVyxzQ0FBc0MsaUJBQWlCLElBQUksbURBQW1ELGdCQUFnQixpQkFBaUIseUJBQXlCLGtCQUFrQixrQkFBa0IsSUFBSSx5QkFBeUIsaUJBQWlCLE1BQU0sU0FBUyxZQUFZLElBQUksMEJBQTBCLFdBQVcsS0FBSyw2Q0FBNkMsbUJBQW1CLHlCQUF5QixnQkFBZ0IsdUJBQXVCLE9BQU8sa0JBQWtCLEVBQUUsS0FBSyxNQUFNLG1DQUFtQywyQ0FBMkMsMkNBQTJDLGtDQUFrQyxtQkFBbUIsU0FBUyxnQkFBZ0IsNEJBQTRCLFlBQVksSUFBSSxnQkFBZ0IsSUFBSSxLQUFLLGFBQWEsaUJBQWlCLEVBQUUsZUFBZSxhQUFhLHFEQUFxRCxzQkFBc0IsVUFBVSx5QkFBeUIsRUFBRSxvQkFBb0IsdUJBQXVCLGFBQWEsd0JBQXdCLDZFQUE2RSxXQUFXLEtBQUssa0JBQWtCLCtCQUErQixLQUFLLFdBQVcsRUFBRSxjQUFjLFFBQVEsbUJBQW1CLFdBQVcsS0FBSyxXQUFXLHNCQUFzQix1Q0FBdUMsV0FBVyxhQUFhLGVBQWUsb0JBQW9CLGFBQWEsaUJBQWlCLFdBQVcsS0FBSyxXQUFXLDRDQUE0QyxhQUFhLG1DQUFtQyxFQUFFLDhCQUE4Qix1QkFBdUIsYUFBYSx3QkFBd0IsYUFBYSxPQUFPLHlEQUF5RCxJQUFJLDRGQUE0RixhQUFhLGtDQUFrQyw2QkFBNkIsSUFBSSxLQUFLLDRGQUE0Rix3QkFBd0IsdUJBQXVCLDRDQUE0QyxJQUFJLEtBQUssT0FBTywwQ0FBMEMsWUFBWSxlQUFlLGNBQWMsSUFBSSxxQkFBcUIsOEJBQThCLElBQUksS0FBSyxpQkFBaUIsVUFBVSxtQkFBbUIsWUFBWSxZQUFZLGFBQWEscUJBQXFCLGlCQUFpQixFQUFFLFlBQVksSUFBSSxxQ0FBcUMsSUFBSSxtQkFBbUIsc0JBQXNCLDJCQUEyQixJQUFJLFlBQVksU0FBUyxRQUFRLElBQUksb0NBQW9DLFlBQVksZUFBZSxJQUFJLGtDQUFrQyxJQUFJLEtBQUssMERBQTBELFdBQVcsV0FBVyx1Q0FBdUMsWUFBWSxjQUFjLHVCQUF1QixJQUFJLHlCQUF5QixTQUFTLDJCQUEyQixJQUFJLGlEQUFpRCxTQUFTLEtBQUssV0FBVyxFQUFFLHFCQUFxQixrQkFBa0IsV0FBVyxFQUFFLHdCQUF3QixVQUFVLFdBQVcsTUFBTSxZQUFZLElBQUksS0FBSyxXQUFXLDJDQUEyQyxXQUFXLCtCQUErQixpQkFBaUIsVUFBVSw0SkFBNEosZ0JBQWdCLDJCQUEyQixJQUFJLFdBQVcsVUFBVSxFQUFFLCtJQUErSSx1QkFBdUIsYUFBYSxzQkFBc0IsRUFBRSxhQUFhLHVCQUF1Qix3Q0FBd0MsRUFBRSxRQUFRLHVCQUF1QixhQUFhLDhMQUE4TCxnQkFBZ0IsdUZBQXVGLElBQUksOERBQThELFNBQVMsd0JBQXdCLFFBQVEsMEJBQTBCLDZKQUE2SixFQUFFLDZDQUE2Qyx3Q0FBd0MsOEJBQThCLDZIQUE2SCxZQUFZLElBQUksV0FBVyx3QkFBd0IseUJBQXlCLHlCQUF5QixzQkFBc0Isc0JBQXNCLHNCQUFzQixlQUFlLElBQUksUUFBUSxZQUFZLFdBQVcsdURBQXVELFNBQVMsYUFBYSxVQUFVLG9EQUFvRCxXQUFXLGdCQUFnQix3QkFBd0IsdUJBQXVCLElBQUksS0FBSywrQkFBK0Isb0RBQW9ELE1BQU0sMEVBQTBFLFNBQVMsY0FBYyxnQkFBZ0IsV0FBVyxLQUFLLFdBQVcsb0JBQW9CLDRCQUE0QixJQUFJLGdCQUFnQixvQkFBb0IsZUFBZSwwQkFBMEIsOEJBQThCLEtBQUssSUFBSSxtQkFBbUIscUJBQXFCLGNBQWMseURBQXlELFNBQVMsaUlBQWlJLEVBQUUsVUFBVSxnQkFBZ0IscU9BQXFPLGNBQWMsTUFBTSxpS0FBaUssMkRBQTJELGlCQUFpQixJQUFJLEtBQUssZ0ZBQWdGLGVBQWUsU0FBUyxZQUFZLFNBQVMsK0JBQStCLHVCQUF1QixnQkFBZ0IsdUNBQXVDLFdBQVcseUJBQXlCLFlBQVksSUFBSSxLQUFLLCtCQUErQixrQ0FBa0MsdUVBQXVFLG1CQUFtQixTQUFTLHdDQUF3QyxTQUFTLHFCQUFxQix3RkFBd0YsZ0JBQWdCLEdBQUcsa0JBQWtCLCtCQUErQixJQUFJLCtEQUErRCxXQUFXLEVBQUUseUtBQXlLLHVCQUF1QixzQkFBc0IsaUNBQWlDLElBQUksd0NBQXdDLElBQUksT0FBTyxrQkFBa0Isd0NBQXdDLDBEQUEwRCx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixtQkFBbUIsbUJBQW1CLGdCQUFnQixXQUFXLE9BQU8sZ0NBQWdDLFNBQVMsWUFBWSxFQUFFLEVBQUUsNkJBQTZCLG1DQUFtQyxLQUFLLG1CQUFtQixlQUFlLHFCQUFxQixLQUFLLG1CQUFtQixlQUFlLFVBQVUsd0JBQXdCLG9DQUFvQyxtQkFBbUIsNEJBQTRCLFVBQVUsK0dBQStHLGFBQWEsU0FBUyxjQUFjLFlBQVksS0FBSyxXQUFXLEtBQUsseUVBQXlFLDZCQUE2QixRQUFRLGtCQUFrQixRQUFRLFdBQVcsS0FBSyxjQUFjLGFBQWEsbUJBQW1CLHFCQUFxQixXQUFXLGdDQUFnQyxJQUFJLGNBQWMsVUFBVSxFQUFFLG1HQUFtRyx1QkFBdUIsc0tBQXNLLGtCQUFrQix3REFBd0Qsb0JBQW9CLEdBQUcscUJBQXFCLGlEQUFpRCxxQkFBcUIsb0JBQW9CLHNCQUFzQixnQkFBZ0IsdUNBQXVDLHNEQUFzRCx1QkFBdUIsT0FBTyxxSEFBcUgseUJBQXlCLE9BQU8sa0VBQWtFLDZCQUE2QixPQUFPLHNFQUFzRSw4QkFBOEIsT0FBTyx3RUFBd0UsaUNBQWlDLE9BQU8sMkVBQTJFLHVCQUF1QixPQUFPLGlFQUFpRSxxQkFBcUIsT0FBTywrQ0FBK0MsZ0NBQWdDLHdCQUF3Qiw4QkFBOEIsNEJBQTRCLHFCQUFxQiw0QkFBNEIseUJBQXlCLGdDQUFnQywwQkFBMEIsaUNBQWlDLDZCQUE2QixvQ0FBb0MsbUJBQW1CLDJCQUEyQiwwREFBMEQsRUFBRSwrSUFBK0ksdUJBQXVCLHFCQUFxQixlQUFlLGdCQUFnQixvQkFBb0IsbURBQW1ELElBQUksVUFBVSw2QkFBNkIsV0FBVyxpQ0FBaUMsa0JBQWtCLGNBQWMsRUFBRSwyQkFBMkIsb0JBQW9CLFdBQVcsWUFBWSxXQUFXLEVBQUUsMEJBQTBCLG9CQUFvQixNQUFNLEVBQUUsMkJBQTJCLHVCQUF1QixNQUFNLEVBQUUsMEJBQTBCLG9CQUFvQixnQkFBZ0IsRUFBRSwyQkFBMkIsb0JBQW9CLE1BQU0sRUFBRSw0QkFBNEIsd0JBQXdCLHNCQUFzQixFQUFFLG9CQUFvQixtQkFBbUIsTUFBTSxFQUFFLHdCQUF3QixtQkFBbUIsc0JBQXNCLEVBQUUsa0JBQWtCLDhCQUE4QixJQUFJLEdBQUcsaUJBQWlCLGlFQUFpRSxNQUFNLEVBQUUsa0JBQWtCLGtCQUFrQixzQkFBc0IscUJBQXFCLE9BQU8sRUFBRSx3QkFBd0Isd0JBQXdCLE1BQU0sRUFBRSwrQkFBK0IsMkJBQTJCLGFBQWEsRUFBRSwrQkFBK0IsMkJBQTJCLGFBQWEsRUFBRSx3QkFBd0Isc0JBQXNCLFlBQVksRUFBRSx3QkFBd0Isd0JBQXdCLFFBQVEsRUFBRSx3QkFBd0Isd0JBQXdCLFFBQVEsRUFBRSw0QkFBNEIsMkJBQTJCLGFBQWEsRUFBRSw0QkFBNEIsMkJBQTJCLGFBQWEsRUFBRSw0QkFBNEIsc0JBQXNCLGtCQUFrQixFQUFFLDBCQUEwQixzQkFBc0IsUUFBUSxFQUFFLHlCQUF5Qix1QkFBdUIsa0JBQWtCLEVBQUUsaUJBQWlCLG9CQUFvQixHQUFHLHVCQUF1QixzQkFBc0IsOEJBQThCLE9BQU8sb0JBQW9CLGtDQUFrQyxvQ0FBb0MsdUNBQXVDLHFDQUFxQyw4QkFBOEIsOERBQThELDZCQUE2QiwyQkFBMkIsNkJBQTZCLDJCQUEyQiw2QkFBNkIsMEJBQTBCLDhDQUE4Qyw2QkFBNkIsNkVBQTZFLGlDQUFpQyxvREFBb0QsMkJBQTJCLGtDQUFrQyw4REFBOEQsMEJBQTBCLDJEQUEyRCwwQ0FBMEMsbUdBQW1HLGlDQUFpQyxxRUFBcUUsV0FBVyxLQUFLLHdCQUF3QixzREFBc0QsV0FBVyxVQUFVLEdBQUcsdUJBQXVCLE9BQU8sd0JBQXdCLGNBQWMsa0NBQWtDLHVCQUF1QixFQUFFLGNBQWMsNEJBQTRCLG1CQUFtQix3QkFBd0IsRUFBRSxzQkFBc0IsV0FBVywrQ0FBK0MsU0FBUyx5REFBeUQsNEJBQTRCLHNCQUFzQix1QkFBdUIsTUFBTSx1QkFBdUIsc0RBQXNELG9CQUFvQiwrRUFBK0UsNkJBQTZCLGdCQUFnQiwwRUFBMEUsY0FBYyxPQUFPLHNCQUFzQiwyQkFBMkIsY0FBYyxnQkFBZ0IsWUFBWSxvQkFBb0IsS0FBSyxvREFBb0QsV0FBVyxRQUFRLG9CQUFvQixLQUFLLE1BQU0sK0VBQStFLG1CQUFtQixZQUFZLG1CQUFtQixLQUFLLG1CQUFtQixtQkFBbUIsZ0JBQWdCLDJEQUEyRCxXQUFXLEtBQUssd0JBQXdCLGlDQUFpQyx3REFBd0QsU0FBUyxjQUFjLHVCQUF1QixVQUFVLFlBQVksb0JBQW9CLDZCQUE2QixjQUFjLFlBQVksb0JBQW9CLHFCQUFxQixzQkFBc0IsUUFBUSxvQkFBb0IscUJBQXFCLG9CQUFvQiw4QkFBOEIsY0FBYyxnQ0FBZ0MsRUFBRSxxQ0FBcUMsWUFBWSxHQUFHLHVCQUF1Qix5QkFBeUIsMEJBQTBCLGtCQUFrQixPQUFPLDRDQUE0QywwQ0FBMEMsaUJBQWlCLGlCQUFpQixnQkFBZ0IsNkJBQTZCLDZCQUE2QiwyQkFBMkIseUZBQXlGLCtDQUErQyxFQUFFLGdCQUFnQixvQkFBb0IsY0FBYyw2REFBNkQsRUFBRSxvQkFBb0IsTUFBTSx1QkFBdUIsY0FBYyx3REFBd0QsRUFBRSxvQkFBb0IsVUFBVSxnQkFBZ0IsMkJBQTJCLHFCQUFxQixvRkFBb0YscUJBQXFCLGdCQUFnQixpQkFBaUIsY0FBYyxvQ0FBb0MsZ0JBQWdCLGdNQUFnTSxFQUFFLGdCQUFnQix3REFBd0QsNEJBQTRCLGdDQUFnQyxXQUFXLHNDQUFzQyxpREFBaUQsNENBQTRDLGlCQUFpQiw0REFBNEQsOEJBQThCLGlDQUFpQyx1S0FBdUssU0FBUyxhQUFhLGFBQWEsRUFBRSxrQkFBa0IsaUNBQWlDLGlDQUFpQyxpRUFBaUUsYUFBYSxNQUFNLGFBQWEsY0FBYyxrQkFBa0IsNkNBQTZDLGNBQWMsMk1BQTJNLG9CQUFvQixtQkFBbUIsU0FBUywwU0FBMFMsZ0JBQWdCLDJFQUEyRSxLQUFLLEdBQUcsS0FBSyxlQUFlLG9FQUFvRSxtREFBbUQsaUhBQWlILG1CQUFtQiwrQ0FBK0MsY0FBYyxxQkFBcUIscUJBQXFCLFVBQVUsc0JBQXNCLGtDQUFrQyxXQUFXLEtBQUssV0FBVywyQkFBMkIsK0JBQStCLDRDQUE0QyxzQkFBc0IsZ0JBQWdCLE9BQU8sdUJBQXVCLGdCQUFnQixFQUFFLDRCQUE0Qiw2QkFBNkIseUJBQXlCLHdCQUF3Qix5QkFBeUIsWUFBWSxFQUFFLG9CQUFvQix1QkFBdUIsV0FBVyxrQkFBa0IsT0FBTyxNQUFNLGtCQUFrQixvQkFBb0IsNEJBQTRCLG9CQUFvQiwwQkFBMEIsb0JBQW9CLG1CQUFtQiw0QkFBNEIsK0JBQStCLFNBQVMsRUFBRSxtRUFBbUUsYUFBYSw4QkFBOEIsNEJBQTRCLCtCQUErQixnQkFBZ0IsY0FBYyxPQUFPLG9EQUFvRCw2REFBNkQsU0FBUyxrQkFBa0IsbURBQW1ELHdFQUF3RSxLQUFLLEdBQUcsdUJBQXVCLDBCQUEwQixjQUFjLDZCQUE2QixzQkFBc0IsbUZBQW1GLG1EQUFtRCxLQUFLLG1CQUFtQixXQUFXLHVDQUF1QyxJQUFJLHVDQUF1QyxTQUFTLFdBQVcsS0FBSyx5Q0FBeUMsb0NBQW9DLG9CQUFvQiwyQkFBMkIsb0JBQW9CLDJCQUEyQixvQkFBb0IsNENBQTRDLHVEQUF1RCxVQUFVLHlCQUF5QixzSkFBc0osMFpBQTBaLHdCQUF3Qix1QkFBdUIsOEJBQThCLHVIQUF1SCxrQkFBa0IsNkVBQTZFLGNBQWMsb0NBQW9DLGdCQUFnQixnRUFBZ0Usc0xBQXNMLEtBQUssR0FBRyx1QkFBdUIsa0JBQWtCLFNBQVMsNkJBQTZCLDBIQUEwSCxrQkFBa0Isc0RBQXNELDhCQUE4QixnQkFBZ0IsRUFBRSxxQkFBcUIsT0FBTyxvQkFBb0IsZ0RBQWdELHlCQUF5QixnREFBZ0QsMEJBQTBCLGdEQUFnRCw2QkFBNkIsZ0RBQWdELG1CQUFtQixrREFBa0QsWUFBWSxHQUFHLHVCQUF1QixhQUFhLHNFQUFzRSw4QkFBOEIsNEdBQTRHLFlBQVksV0FBVyxpREFBaUQsNEJBQTRCLFFBQVEsV0FBVyxLQUFLLHlCQUF5QiwwQ0FBMEMsc0RBQXNELCtIQUErSCxvRUFBb0UsS0FBSyxVQUFVLDhDQUE4Qyx1Y0FBdWMsWUFBWSxRQUFRLFdBQVcsOEJBQThCLGdCQUFnQixHQUFHLHVCQUF1Qix1QkFBdUIsYUFBYSxtREFBbUQsYUFBYSxxREFBcUQsY0FBYyx5Q0FBeUMsK0RBQStELElBQUksY0FBYyxTQUFTLElBQUksd0JBQXdCLFNBQVMsMEJBQTBCLFlBQVksSUFBSSw2Q0FBNkMsU0FBUyxJQUFJLElBQUksaURBQWlELFNBQVMsS0FBSyxHQUFHLHFCQUFxQixhQUFhLHVEQUF1RCxhQUFhLE9BQU8sV0FBVyxLQUFLLG1CQUFtQixFQUFFLEVBQUUsYUFBYSxNQUFNLGVBQWUsZ0JBQWdCLHdCQUF3QiwyQ0FBMkMsbUVBQW1FLElBQUksS0FBSyxTQUFTLElBQUksc0JBQXNCLFNBQVMsd0JBQXdCLEtBQUssZ0JBQWdCLHdCQUF3QixjQUFjLHVCQUF1QixvQ0FBb0Msa0NBQWtDLG1CQUFtQix3QkFBd0IseUNBQXlDLDRCQUE0QixnQ0FBZ0Msd0NBQXdDLHFDQUFxQyxnS0FBZ0ssU0FBUyx1QkFBdUIsb0RBQW9ELGtCQUFrQixVQUFVLHFCQUFxQixrREFBa0Qsb0JBQW9CLFVBQVUsR0FBRyx1QkFBdUIsNkJBQTZCLEVBQUUsb0JBQW9CLHVCQUF1QixhQUFhLHNLQUFzSyxlQUFlLDBFQUEwRSxXQUFXLGlCQUFpQixjQUFjLGlCQUFpQixxQ0FBcUMsNEJBQTRCLGlCQUFpQixXQUFXLFlBQVksV0FBVywyQkFBMkIsaUJBQWlCLFNBQVMsc0JBQXNCLFFBQVEsS0FBSyxnQkFBZ0IsZUFBZSxtQ0FBbUMsSUFBSSxlQUFlLFlBQVksV0FBVywwQ0FBMEMsc0JBQXNCLG1CQUFtQiw2QkFBNkIscUJBQXFCLGdDQUFnQyw2REFBNkQsZ0hBQWdILEVBQUUsRUFBRSxzQkFBc0IsdUJBQXVCLGFBQWEsdUJBQXVCLHdCQUF3QixzQ0FBc0MsSUFBSSxzQkFBc0IsVUFBVSxFQUFFLGlCQUFpQix1QkFBdUIsYUFBYSxzQkFBc0Isa0NBQWtDLFdBQVcsaUJBQWlCLFVBQVUsbUJBQW1CLEVBQUUsYUFBYSx1QkFBdUIsYUFBYSxzQ0FBc0Msd0JBQXdCLDZDQUE2QyxJQUFJLG1CQUFtQixVQUFVLEVBQUUsOEJBQThCLHVCQUF1QixhQUFhLHVCQUF1Qix3QkFBd0Isc0NBQXNDLElBQUksc0JBQXNCLFVBQVUsRUFBRSxpQkFBaUIsdUJBQXVCLGFBQWEsNkVBQTZFLHNCQUFzQixVQUFVLDJCQUEyQixJQUFJLEtBQUssa0JBQWtCLFVBQVUsUUFBUSxhQUFhLHlCQUF5QixLQUFLLFVBQVUsVUFBVSxxQkFBcUIsRUFBRSxzRUFBc0UsdUJBQXVCLGFBQWEsaUxBQWlMLHdCQUF3Qiw4QkFBOEIsZ0JBQWdCLDBCQUEwQix3SUFBd0ksMkJBQTJCLDJIQUEySCxNQUFNLG1CQUFtQixvREFBb0QsY0FBYyxvREFBb0QsY0FBYyxvREFBb0QsY0FBYyxvREFBb0QsY0FBYyxtQ0FBbUMsWUFBWSxrQ0FBa0MsK0NBQStDLDJCQUEyQiwyQkFBMkIsd0RBQXdELDhCQUE4Qix1Q0FBdUMsZ0VBQWdFLCtCQUErQixxQkFBcUIsaUNBQWlDLHdGQUF3RixtR0FBbUcseUNBQXlDLGdOQUFnTiwyQ0FBMkMsa0RBQWtELE9BQU8sMENBQTBDLCtCQUErQiw4QkFBOEIscUJBQXFCLGlDQUFpQyxrQ0FBa0MsT0FBTyxrQkFBa0IsMlBBQTJQLG9FQUFvRSxhQUFhLE9BQU8sOEJBQThCLGtCQUFrQixXQUFXLFdBQVcsOEJBQThCLGtCQUFrQixXQUFXLGdCQUFnQiw4QkFBOEIsa0JBQWtCLFdBQVcsUUFBUSw4QkFBOEIsbUJBQW1CLFdBQVcsWUFBWSw0QkFBNEIsYUFBYSw0QkFBNEIsWUFBWSw4QkFBOEIsOEJBQThCLG9DQUFvQyxzQkFBc0IsT0FBTywrRkFBK0YsUUFBUSxVQUFVLFVBQVUsaUNBQWlDLGlGQUFpRixPQUFPLCtEQUErRCxJQUFJLGNBQWMseUJBQXlCLGNBQWMsa0NBQWtDLG1FQUFtRSx5REFBeUQsRUFBRSxjQUFjLDRNQUE0TSxjQUFjLE1BQU0sMkNBQTJDLFlBQVksNkJBQTZCLFlBQVksa0NBQWtDLFdBQVcsa0NBQWtDLFFBQVEsNEJBQTRCLFlBQVksU0FBUyxrUUFBa1EsY0FBYywyRUFBMkUsT0FBTyxlQUFlLHNCQUFzQixZQUFZLHFCQUFxQixZQUFZLHVDQUF1Qyw0QkFBNEIseUJBQXlCLGdHQUFnRyxFQUFFLG9CQUFvQixjQUFjLGtFQUFrRSxRQUFRLFdBQVcsWUFBWSxJQUFJLFdBQVcsK0NBQStDLGtDQUFrQyxJQUFJLEtBQUssc0JBQXNCLGFBQWEsU0FBUyx1QkFBdUIsZUFBZSwwSUFBMEksc0JBQXNCLE1BQU0sMkJBQTJCLCtDQUErQyxPQUFPLGlDQUFpQyxrSEFBa0gsZ0VBQWdFLElBQUksUUFBUSxRQUFRLCtCQUErQix1QkFBdUIsMEVBQTBFLHdCQUF3QixNQUFNLDREQUE0RCw2Q0FBNkMsOEJBQThCLGFBQWEsOERBQThELGdqQkFBZ2pCLEVBQUUsNklBQTZJLHVCQUF1QixhQUFhLHdQQUF3UCxnQkFBZ0IsMENBQTBDLGlDQUFpQywrS0FBK0ssa0pBQWtKLHFKQUFxSixrQkFBa0IsbURBQW1ELEtBQUssZ0ZBQWdGLHdCQUF3QiwyQkFBMkIsK1ZBQStWLG1FQUFtRSx1QkFBdUIsUUFBUSxvQ0FBb0Msc0JBQXNCLE9BQU8sK0ZBQStGLFFBQVEscUJBQXFCLGtCQUFrQixVQUFVLFVBQVUsVUFBVSxpQ0FBaUMsNkJBQTZCLFFBQVEsK0JBQStCLCtFQUErRSx1QkFBdUIsbUNBQW1DLDhEQUE4RCxpREFBaUQsd0JBQXdCLDJCQUEyQix1QkFBdUIsdUhBQXVILDJMQUEyTCxHQUFHLGlCQUFpQixtQ0FBbUMseUNBQXlDLGdFQUFnRSxvREFBb0QsOENBQThDLHFRQUFxUSx5REFBeUQsK0JBQStCLEdBQUcscUNBQXFDLHFEQUFxRCwrREFBK0QsMkJBQTJCLHVCQUF1QixpQkFBaUIscUJBQXFCLDJFQUEyRSx1REFBdUQsK0JBQStCLDZDQUE2QyxHQUFHLGtCQUFrQixTQUFTLHFDQUFxQyxVQUFVLHFDQUFxQyxTQUFTLDREQUE0RCxTQUFTLDZEQUE2RCxjQUFjLGlFQUFpRSxjQUFjLGtFQUFrRSxRQUFRLDJEQUEyRCxLQUFLLElBQUksT0FBTyxNQUFNLHNCQUFzQixnQ0FBZ0MsMkVBQTJFLGdDQUFnQyxtQ0FBbUMsa0NBQWtDLGlEQUFpRCx3QkFBd0Isc0NBQXNDLDJCQUEyQixzQ0FBc0MsdUJBQXVCLG9DQUFvQyxpREFBaUQsMENBQTBDLDhCQUE4QixxUUFBcVEsc0JBQXNCLGlEQUFpRCw0QkFBNEIsR0FBRyw0QkFBNEIsbUVBQW1FLEdBQUcsaUJBQWlCLHdGQUF3Rix5QkFBeUIscUVBQXFFLHFFQUFxRSxvREFBb0QsOENBQThDLHFDQUFxQyxpQ0FBaUMsaUVBQWlFLDJGQUEyRiwrRUFBK0UsNkVBQTZFLHlDQUF5QyxvQ0FBb0MsdUNBQXVDLDBEQUEwRCx3REFBd0Qsd0RBQXdELDREQUE0RCwwREFBMEQsMERBQTBELHFFQUFxRSxpRUFBaUUsd0pBQXdKLHNEQUFzRCx1REFBdUQsc0NBQXNDLEtBQUssdURBQXVELG9DQUFvQyxLQUFLLDJCQUEyQiw0Q0FBNEMsOEJBQThCLGdDQUFnQyxLQUFLLDRCQUE0QixnSEFBZ0gsMkRBQTJELHVEQUF1RCxpREFBaUQsNERBQTRELG9EQUFvRCw4REFBOEQseURBQXlELGlDQUFpQyxxREFBcUQsNkJBQTZCLDJEQUEyRCx1REFBdUQseURBQXlELHVEQUF1RCxzTUFBc00seUtBQXlLLDhPQUE4Tyw2TEFBNkwsd0JBQXdCLHdHQUF3RyxzRUFBc0UscUZBQXFGLHFGQUFxRixLQUFLLGdHQUFnRyx5RUFBeUUsb0VBQW9FLEtBQUssd0JBQXdCLHNHQUFzRyxvRUFBb0UscUZBQXFGLHFGQUFxRixLQUFLLGtHQUFrRywyRUFBMkUsc0VBQXNFLEtBQUssa0VBQWtFLGdFQUFnRSxrRUFBa0UsZ0VBQWdFLHVNQUF1TSwrRUFBK0UsMkVBQTJFLDBEQUEwRCxpRUFBaUUsNkRBQTZELHFEQUFxRCxtQ0FBbUMsc0ZBQXNGLDJDQUEyQyx5RkFBeUYscUZBQXFGLHFDQUFxQyw0Q0FBNEMsT0FBTyxtQ0FBbUMsa0ZBQWtGLHlDQUF5QyxvRkFBb0YsaUZBQWlGLG1DQUFtQyx3Q0FBd0MsT0FBTyxLQUFLLDBEQUEwRCxtQ0FBbUMsb0hBQW9ILDJDQUEyQyx5RkFBeUYscUZBQXFGLHFDQUFxQyw0Q0FBNEMsT0FBTyxtQ0FBbUMsOEdBQThHLHlDQUF5QyxvRkFBb0YsaUZBQWlGLG1DQUFtQyx3Q0FBd0MsT0FBTyxLQUFLLEdBQUcscUNBQXFDLHFEQUFxRCx3RUFBd0UsMkJBQTJCLHVCQUF1QixzQ0FBc0Msb0NBQW9DLGlEQUFpRCw4Q0FBOEMsc0JBQXNCLGlEQUFpRCw0QkFBNEIsR0FBRyxpQkFBaUIsNkNBQTZDLGtDQUFrQyw2Q0FBNkMsbUNBQW1DLGtGQUFrRixnQ0FBZ0Msa0JBQWtCLGlCQUFpQixTQUFTLG9EQUFvRCxPQUFPLG1DQUFtQyw0RUFBNEUsOEJBQThCLGtCQUFrQixpQkFBaUIsU0FBUyxrREFBa0QsT0FBTyxLQUFLLG1EQUFtRCxtQ0FBbUMsa0ZBQWtGLCtCQUErQiw4REFBOEQsc0NBQXNDLG9CQUFvQixtQkFBbUIsV0FBVyxrRUFBa0UsU0FBUyxPQUFPLG1DQUFtQyw0RUFBNEUsNkJBQTZCLDREQUE0RCxzQ0FBc0Msb0JBQW9CLG1CQUFtQixXQUFXLGtFQUFrRSxTQUFTLE9BQU8sS0FBSywyRUFBMkUsdURBQXVELCtCQUErQiw2Q0FBNkMsR0FBRyxrQkFBa0IsU0FBUyxxQ0FBcUMsVUFBVSxxQ0FBcUMsU0FBUyx5REFBeUQsU0FBUyx5REFBeUQsWUFBWSw0REFBNEQsU0FBUyw0REFBNEQsU0FBUyw2REFBNkQsWUFBWSwrREFBK0QsS0FBSyxTQUFTLElBQUksT0FBTyxRQUFRLDRDQUE0QyxtQkFBbUIseUNBQXlDLDhEQUE4RCx1QkFBdUIsNERBQTRELCtCQUErQix3QkFBd0Isd0JBQXdCLDJCQUEyQixpQ0FBaUMsaUJBQWlCLHNEQUFzRCx5S0FBeUsseURBQXlELCtCQUErQiwyQkFBMkIsR0FBRyxxQ0FBcUMsOENBQThDLGlCQUFpQiw2QkFBNkIsR0FBRyxnQkFBZ0IscVBBQXFQLG9FQUFvRSxhQUFhLFVBQVUsa0RBQWtELGdCQUFnQix3REFBd0Qsc0JBQXNCLFVBQVUseURBQXlELGtCQUFrQixhQUFhLCtJQUErSSwrQkFBK0Isa0NBQWtDLElBQUksbUJBQW1CLGlEQUFpRCw2QkFBNkIsdUNBQXVDLElBQUksbUJBQW1CLHFEQUFxRCxNQUFNLG1EQUFtRCx5WEFBeVgsT0FBTyxnQ0FBZ0MsV0FBVyxNQUFNLDJDQUEyQyxZQUFZLDZCQUE2QiwwQkFBMEIsMkJBQTJCLGtCQUFrQiwyQkFBMkIsOEJBQThCLFlBQVksU0FBUyxpakJBQWlqQixxQkFBcUIsK0hBQStILGlGQUFpRix3QkFBd0IsaURBQWlELDJCQUEyQixpREFBaUQsZ0NBQWdDLGlEQUFpRCxFQUFFLE9BQU8sOGxCQUE4bEIsUUFBUSxpQ0FBaUMsb0NBQW9DLDhEQUE4RCxZQUFZLElBQUksOEJBQThCLGlFQUFpRSxzQkFBc0IsV0FBVyxpQkFBaUIsdUJBQXVCLElBQUksS0FBSyx3QkFBd0Isd0ZBQXdGLHlDQUF5QyxJQUFJLGtDQUFrQyxjQUFjLDBCQUEwQixTQUFTLDhCQUE4QiwrWUFBK1ksd0ZBQXdGLHVGQUF1Rix3SUFBd0ksYUFBYSxVQUFVLHdGQUF3RixLQUFLLElBQUksWUFBWSxrQkFBa0IsbUJBQW1CLCtCQUErQixzQkFBc0IsSUFBSSxnQkFBZ0Isa0JBQWtCLEtBQUssd0NBQXdDLElBQUksYUFBYSxRQUFRLDhCQUE4QixvRUFBb0UsTUFBTSxZQUFZLHdCQUF3QixxQkFBcUIsNEJBQTRCLDRDQUE0QyxZQUFZLElBQUksS0FBSyx1QkFBdUIsY0FBYywyQkFBMkIsa0NBQWtDLE9BQU8sb0JBQW9CLGVBQWUsb0NBQW9DLEdBQUcsc0JBQXNCLCtCQUErQixtQkFBbUIscUJBQXFCLEtBQUssa0JBQWtCLGdGQUFnRiw0QkFBNEIsaUJBQWlCLHFCQUFxQiw0Q0FBNEMsMkJBQTJCLGdDQUFnQyx1Q0FBdUMsMkVBQTJFLDZCQUE2QixFQUFFLDJNQUEyTSx1QkFBdUIsYUFBYSxnQkFBZ0IsbUJBQW1CLDZCQUE2QixtQkFBbUIsNEJBQTRCLElBQUksaUNBQWlDLDJEQUEyRCxPQUFPLFNBQVMsU0FBUyxRQUFRLElBQUksOEJBQThCLFFBQVEsY0FBYyxTQUFTLGtCQUFrQiw0RUFBNEUsR0FBRyxjQUFjLG1CQUFtQixxQkFBcUIsa0NBQWtDLFdBQVcsY0FBYyxVQUFVLGlCQUFpQiwrR0FBK0csZ0JBQWdCLHVFQUF1RSxHQUFHLHVQQUF1UCxnQkFBZ0IsV0FBVywwQ0FBMEMsOEJBQThCLHNEQUFzRCw0QkFBNEIsa0NBQWtDLGdJQUFnSSxVQUFVLHNGQUFzRiw0REFBNEQsaUJBQWlCLE9BQU8sVUFBVSx1RUFBdUUsdUNBQXVDLHNMQUFzTCxhQUFhLGdCQUFnQixpQkFBaUIsMkNBQTJDLGlCQUFpQixpQkFBaUIsMkNBQTJDLHNCQUFzQixnQkFBZ0IsZUFBZSxFQUFFLGdEQUFnRCxzQkFBc0IsZ0JBQWdCLGVBQWUsRUFBRSxnREFBZ0Qsb0JBQW9CLHNCQUFzQixzQ0FBc0MsRUFBRSw2Q0FBNkMsMEJBQTBCLDRCQUE0QixzQ0FBc0MsRUFBRSxtREFBbUQsdUJBQXVCLHVCQUF1Qix5REFBeUQsRUFBRSxtRUFBbUUsNkJBQTZCLDZCQUE2QiwyRUFBMkUsRUFBRSxxRkFBcUYsd0JBQXdCLHlCQUF5QixhQUFhLDRCQUE0QixlQUFlLFFBQVEsZ0NBQWdDLCtGQUErRixVQUFVLGlDQUFpQyxzQ0FBc0MsVUFBVSxRQUFRLFVBQVUsOEZBQThGLE9BQU8sSUFBSSxpQ0FBaUMsK0RBQStELGdFQUFnRSw2QkFBNkIsb0NBQW9DLHdDQUF3QywyQ0FBMkMsR0FBRyxpQkFBaUIsdUVBQXVFLHlEQUF5RCxxR0FBcUcsZ0VBQWdFLDJFQUEyRSxLQUFLLFVBQVUsMEdBQTBHLHdGQUF3RixxQ0FBcUMsZ0NBQWdDLDhDQUE4Qyx5QkFBeUIsNkJBQTZCLEtBQUssS0FBSyx1Q0FBdUMsNERBQTRELG1DQUFtQyx3Q0FBd0MsMkJBQTJCLDJFQUEyRSwyQkFBMkIsNEJBQTRCLCtCQUErQiwrQkFBK0IsNENBQTRDLGlHQUFpRyx5Q0FBeUMsNEJBQTRCLG1KQUFtSixHQUFHLGlCQUFpQiwrQkFBK0IsaUNBQWlDLDhDQUE4QyxxQ0FBcUMsK0NBQStDLHlDQUF5QyxtREFBbUQsNENBQTRDLHNDQUFzQyxzTUFBc00sOENBQThDLHdCQUF3QixrQ0FBa0Msa0NBQWtDLDBGQUEwRix5RkFBeUYsR0FBRyx5QkFBeUIsVUFBVSxJQUFJLGlDQUFpQywrREFBK0QsMEJBQTBCLDRDQUE0Qyx5REFBeUQsWUFBWSx1REFBdUQsbUNBQW1DLEdBQUcsaUJBQWlCLGlEQUFpRCxvREFBb0QsaUNBQWlDLGNBQWMsS0FBSyw0REFBNEQsNENBQTRDLGlGQUFpRix3REFBd0QsK0JBQStCLHlCQUF5QixHQUFHLHVDQUF1Qyw0REFBNEQsbUNBQW1DLHdDQUF3QywyQkFBMkIsOERBQThELDJCQUEyQiw0QkFBNEIsMkJBQTJCLCtCQUErQiw0Q0FBNEMsNENBQTRDLHlDQUF5Qyw0QkFBNEIsbUpBQW1KLEdBQUcsaUJBQWlCLDREQUE0RCxpQ0FBaUMsOENBQThDLHFDQUFxQywrQ0FBK0MseUNBQXlDLG1EQUFtRCxzREFBc0Qsc01BQXNNLDhDQUE4QyxvRUFBb0Usc0JBQXNCLGtHQUFrRyxrQ0FBa0MsR0FBRyxrSUFBa0ksWUFBWSxnTEFBZ0wsK0JBQStCLDRFQUE0RSw2QkFBNkIscURBQXFELElBQUksc0JBQXNCLGtCQUFrQixtSUFBbUksV0FBVywwQkFBMEIsNkJBQTZCLGNBQWMsRUFBRSxZQUFZLG9DQUFvQyx5QkFBeUIsa0VBQWtFLG1FQUFtRSxpQkFBaUIsc0JBQXNCLDhIQUE4SCw4QkFBOEIsa0RBQWtELGlGQUFpRixVQUFVLG9CQUFvQixJQUFJLHdGQUF3RixRQUFRLElBQUksOERBQThELEdBQUcsc0JBQXNCLHFEQUFxRCxFQUFFLE1BQU0sNENBQTRDLFdBQVcsS0FBSyxXQUFXLGNBQWMsYUFBYSxtQkFBbUIsSUFBSSxFQUFFLDhCQUE4QixXQUFXLElBQUksNEVBQTRFLEdBQUcsU0FBUywrQkFBK0IscURBQXFELElBQUksc0JBQXNCLGFBQWEsNENBQTRDLHVGQUF1RixrQ0FBa0MsV0FBVyx1QkFBdUIsWUFBWSxlQUFlLHlCQUF5QixTQUFTLDRCQUE0QixZQUFZLGlCQUFpQiw4bUJBQThtQixvR0FBb0csMkdBQTJHLG1EQUFtRCx1QkFBdUIsb0RBQW9ELHdCQUF3QixvREFBb0QsMkJBQTJCLG9EQUFvRCxnQ0FBZ0Msb0RBQW9ELEVBQUUsT0FBTyx5SkFBeUosWUFBWSxXQUFXLDJCQUEyQix5REFBeUQsMEJBQTBCLCtEQUErRCx3Q0FBd0MsOERBQThELDJCQUEyQixvRUFBb0Usd0JBQXdCLG9DQUFvQywyQkFBMkIsNEVBQTRFLHVDQUF1Qyx3REFBd0QsVUFBVSxrRkFBa0YscUJBQXFCLHdEQUF3RCxVQUFVLGtGQUFrRixpREFBaUQsaUJBQWlCLDhEQUE4RCxpSUFBaUksU0FBUyxrQ0FBa0MsT0FBTyw2REFBNkQsa0RBQWtELFVBQVUsZ0NBQWdDLEtBQUssZ0NBQWdDLEtBQUssbURBQW1ELEtBQUssRUFBRSx1QkFBdUIsbUJBQW1CLHlCQUF5QixpQ0FBaUMsdUNBQXVDLDhDQUE4QyxJQUFJLEtBQUssd0JBQXdCLCtDQUErQyxZQUFZLFdBQVcsYUFBYSxPQUFPLHVDQUF1Qyw4Q0FBOEMsS0FBSyxxQkFBcUIsU0FBUyx1QkFBdUIsZUFBZSwySkFBMkosc0JBQXNCLDJEQUEyRCxNQUFNLCtFQUErRSxrQ0FBa0MsSUFBSSxnR0FBZ0csR0FBRyx1QkFBdUIsRUFBRSxNQUFNLDhEQUE4RCxvQkFBb0IsdUJBQXVCLHNCQUFzQixZQUFZLElBQUksS0FBSyxXQUFXLG9FQUFvRSxXQUFXLHdFQUF3RSw0QkFBNEIsd0JBQXdCLFlBQVksSUFBSSxzSEFBc0gsR0FBRyx1REFBdUQsRUFBRSxTQUFTLEdBQUcsbUNBQW1DLG9GQUFvRixpQkFBaUIsK0RBQStELEtBQUssMkJBQTJCLHVCQUF1QixJQUFJLGtCQUFrQixzQ0FBc0MsOENBQThDLHFEQUFxRCxLQUFLLHFDQUFxQyxzREFBc0QsMEJBQTBCLFNBQVMsMEJBQTBCLFNBQVMsZ0NBQWdDLFdBQVcsNEJBQTRCLGlCQUFpQixXQUFXLCtCQUErQixJQUFJLFlBQVksV0FBVyxLQUFLLFdBQVcsZUFBZSxjQUFjLGVBQWUsZUFBZSxtRUFBbUUsVUFBVSwyR0FBMkcsdUNBQXVDLHdCQUF3Qix1RUFBdUUsNENBQTRDLE1BQU0sb0JBQW9CLHNDQUFzQywrQ0FBK0MsT0FBTyxnQ0FBZ0MsdUNBQXVDLDJJQUEySSxpQ0FBaUMsK0RBQStELDZGQUE2RixpQ0FBaUMsUUFBUSx5QkFBeUIsd0JBQXdCLG9DQUFvQyxZQUFZLDhLQUE4SyxLQUFLLEVBQUUsZ09BQWdPLHVCQUF1QixhQUFhLDhJQUE4SSxnQkFBZ0IsMENBQTBDLDZCQUE2QiwrREFBK0Qsa0JBQWtCLCtDQUErQyxrQkFBa0IsMEJBQTBCLDJOQUEyTixjQUFjLHNDQUFzQyw0Q0FBNEMsV0FBVyx5Q0FBeUMsMENBQTBDLHlDQUF5QyxJQUFJLG1CQUFtQiw4SkFBOEosbUNBQW1DLDJDQUEyQyxXQUFXLFNBQVMsK0JBQStCLGtDQUFrQyxJQUFJLG1CQUFtQixhQUFhLFlBQVksV0FBVyw0QkFBNEIsd0NBQXdDLHFCQUFxQixxQkFBcUIsS0FBSyxxREFBcUQsV0FBVyw4QkFBOEIsa0NBQWtDLCtDQUErQyxzQ0FBc0MsZ0JBQWdCLDRDQUE0QyxrQkFBa0IsYUFBYSxzMUJBQXMxQixxQ0FBcUMsc0JBQXNCLGlEQUFpRCxzTUFBc00sRUFBRSwyWUFBMlksaUZBQWlGLFlBQVksWUFBWSwrQkFBK0IsZ0dBQWdHLFNBQVMsbUxBQW1MLDJHQUEyRyxZQUFZLFlBQVksSUFBSSxnQkFBZ0IsSUFBSSxrRUFBa0Usc0RBQXNELEVBQUUscUNBQXFDLEdBQUcsMENBQTBDLElBQUksMkNBQTJDLGNBQWMsR0FBRyxtQ0FBbUMsSUFBSSxvQ0FBb0MseURBQXlELG1DQUFtQyxhQUFhLGtEQUFrRCx5REFBeUQsOEVBQThFLGdSQUFnUixZQUFZLDZCQUE2QixrQ0FBa0MsSUFBSSxtQkFBbUIsYUFBYSxpQkFBaUIsV0FBVyw4QkFBOEIsa0RBQWtELGdDQUFnQyxxQkFBcUIsc0RBQXNELHNCQUFzQixTQUFTLEVBQUUsaUNBQWlDLHlCQUF5QixZQUFZLGdDQUFnQyx1Q0FBdUMsK0NBQStDLGlFQUFpRSxFQUFFLCtIQUErSCx1QkFBdUIsUUFBUSxvQkFBb0IsZ0JBQWdCLG9DQUFvQyxjQUFjLHdCQUF3Qix5QkFBeUIseUNBQXlDLDBIQUEwSCxnSkFBZ0osMkZBQTJGLGFBQWEsV0FBVyx3QkFBd0IsU0FBUyxtQkFBbUIsY0FBYyxxQ0FBcUMsY0FBYyxxREFBcUQsY0FBYyxvQkFBb0IsS0FBSyx5RkFBeUYsZ0JBQWdCLDJtQkFBMm1CLE9BQU8sdUJBQXVCLGFBQWEsNkNBQTZDLHVIQUF1SCwyQkFBMkIsRUFBRSx1Q0FBdUMsa0JBQWtCLHlDQUF5Qyw4RUFBOEUsbUJBQW1CLCtDQUErQyw4QkFBOEIsMERBQTBELG9DQUFvQyx5QkFBeUIsZ0JBQWdCLGNBQWMsSUFBSSx5QkFBeUIsU0FBUyxhQUFhLG9FQUFvRSxNQUFNLFVBQVUsd0dBQXdHLDBHQUEwRyxnQkFBZ0IsdUJBQXVCLElBQUksY0FBYyxTQUFTLGNBQWMsUUFBUSxrR0FBa0csYUFBYSxjQUFjLEdBQUcsYUFBYSxhQUFhLGVBQWUsSUFBSSxRQUFRLElBQUksMERBQTBELGNBQWMsOEJBQThCLHFCQUFxQixTQUFTLEVBQUUsT0FBTyx1Q0FBdUMsV0FBVyxVQUFVLG9DQUFvQyxNQUFNLHFDQUFxQyxNQUFNLHVDQUF1QyxNQUFNLHdDQUF3QyxNQUFNLHVDQUF1QyxNQUFNLHdDQUF3QyxNQUFNLHlDQUF5QyxNQUFNLG9CQUFvQixzQ0FBc0Msc0JBQXNCLGNBQWMsY0FBYyxnTEFBZ0wsd0JBQXdCLFlBQVksSUFBSSx1QkFBdUIsSUFBSSx1QkFBdUIsSUFBSSxnQkFBZ0IsY0FBYyw4Q0FBOEMsZ0JBQWdCLFlBQVksV0FBVyxjQUFjLDBCQUEwQixnQkFBZ0IsSUFBSSxnQkFBZ0IsSUFBSSx3QkFBd0Isb0JBQW9CLGNBQWMsMEtBQTBLLE9BQU8sRUFBRSxrQkFBa0IsbURBQW1ELHdCQUF3QiwrQkFBK0Isc0RBQXNELFFBQVEsY0FBYyxXQUFXLFlBQVkseUVBQXlFLHVRQUF1USxtSEFBbUgsY0FBYyxVQUFVLDRDQUE0QyxzTkFBc04sY0FBYyxnQkFBZ0IsWUFBWSxpQkFBaUIsS0FBSyxpQkFBaUIsNERBQTRELHNEQUFzRCxhQUFhLDRCQUE0QixvQ0FBb0MsZ0NBQWdDLFNBQVMsU0FBUyxtREFBbUQsUUFBUSwwQ0FBMEMsbUJBQW1CLElBQUksR0FBRyx5QkFBeUIsY0FBYywrQkFBK0IsdVhBQXVYLGdCQUFnQixlQUFlLGtGQUFrRixpQkFBaUIsNkNBQTZDLDBCQUEwQix3Q0FBd0Msb0NBQW9DLGlEQUFpRCx5R0FBeUcsY0FBYyxVQUFVLDZCQUE2QixxTkFBcU4sU0FBUyxtREFBbUQsS0FBSyxHQUFHLDRCQUE0QixjQUFjLHNEQUFzRCwyQkFBMkIsVUFBVSxrQkFBa0IsNkJBQTZCLHVCQUF1QixnREFBZ0Qsb0JBQW9CLHlCQUF5QixvSEFBb0gsRUFBRSxnQkFBZ0Isb0JBQW9CLGNBQWMscUZBQXFGLDBCQUEwQixzQkFBc0IsUUFBUSxvR0FBb0csZ0hBQWdILFdBQVcsdUJBQXVCLDJCQUEyQixNQUFNLDJCQUEyQixNQUFNLDJCQUEyQixpQkFBaUIsaUxBQWlMLGNBQWMsa0VBQWtFLFFBQVEsUUFBUSx3QkFBd0Isc0VBQXNFLG9CQUFvQixTQUFTLE9BQU8scUJBQXFCLGNBQWMseUVBQXlFLEtBQUsscUNBQXFDLG9SQUFvUixnREFBZ0QsU0FBUyxpREFBaUQsMkZBQTJGLHdCQUF3QixzQkFBc0IsS0FBSyxHQUFHLDBCQUEwQixjQUFjLGlGQUFpRiwyQkFBMkIsVUFBVSx5QkFBeUIsc0VBQXNFLGtCQUFrQixrQkFBa0IsY0FBYyx5Q0FBeUMsV0FBVyw4QkFBOEIsOEJBQThCLCtCQUErQixLQUFLLFdBQVcsd0RBQXdELGlFQUFpRSxTQUFTLGNBQWMsOEJBQThCLGNBQWMsdUJBQXVCLGNBQWMsK0RBQStELGNBQWMsbURBQW1ELGNBQWMseUNBQXlDLGNBQWMsZUFBZSxXQUFXLDRDQUE0QyxnQkFBZ0Isb0RBQW9ELHdCQUF3Qiw4REFBOEQsUUFBUSxLQUFLLGVBQWUsU0FBUyxhQUFhLDBCQUEwQixhQUFhLDRMQUE0TCxnQkFBZ0Isd1FBQXdRLGdCQUFnQiwwQkFBMEIsZ09BQWdPLDJDQUEyQyxzZUFBc2UsY0FBYyw2SUFBNkksYUFBYSw4R0FBOEcsZ0JBQWdCLFdBQVcsNEdBQTRHLHlDQUF5QywyRUFBMkUsV0FBVyxxSEFBcUgsY0FBYyx1REFBdUQsa0ZBQWtGLE1BQU0sdUJBQXVCLDZCQUE2QixjQUFjLDBGQUEwRixVQUFVLHVCQUF1QiwrTUFBK00sZ0VBQWdFLElBQUksZ0JBQWdCLElBQUksZ0JBQWdCLElBQUksNEJBQTRCLE9BQU8scUlBQXFJLDZFQUE2RSwyRkFBMkYsdUZBQXVGLGNBQWMsc0hBQXNILFdBQVcsWUFBWSx1S0FBdUssc0VBQXNFLHNCQUFzQixxRkFBcUYsd01BQXdNLGFBQWEsdUJBQXVCLGNBQWMscURBQXFELGFBQWEsMEZBQTBGLGtCQUFrQixzQkFBc0IsMEVBQTBFLGdCQUFnQixXQUFXLGtEQUFrRCw4REFBOEQsV0FBVyw4RUFBOEUsK0NBQStDLGlCQUFpQixnQkFBZ0IsdUJBQXVCLGlCQUFpQixLQUFLLGlIQUFpSCwwUEFBMFAsYUFBYSxzQkFBc0IsVUFBVSxzQkFBc0IsS0FBSyxxQkFBcUIsU0FBUyxjQUFjLHVCQUF1QixXQUFXLDRCQUE0QixXQUFXLGFBQWEsMEhBQTBILGdCQUFnQixrSUFBa0ksd0JBQXdCLGVBQWUsYUFBYSxvRUFBb0UsNERBQTRELHNGQUFzRiw2QkFBNkIsd0RBQXdELE1BQU0sc0NBQXNDLE1BQU0sa0NBQWtDLG1DQUFtQyxnQkFBZ0Isb1JBQW9SLGNBQWMsd01BQXdNLE9BQU8sRUFBRSxjQUFjLHlEQUF5RCxhQUFhLFlBQVksNkRBQTZELGNBQWMsb0NBQW9DLDhLQUE4SyxPQUFPLHVEQUF1RCxJQUFJLHNDQUFzQyxJQUFJLHlCQUF5QixNQUFNLGdJQUFnSSxPQUFPLHFCQUFxQixJQUFJLG9EQUFvRCxJQUFJLDZHQUE2RyxNQUFNLGdMQUFnTCxpQ0FBaUMsT0FBTyw4Q0FBOEMseUNBQXlDLDJGQUEyRix1Q0FBdUMsb0ZBQW9GLHlDQUF5QyxzR0FBc0cseURBQXlELHdEQUF3RCxtQ0FBbUMsV0FBVywwQkFBMEIsRUFBRSxxQkFBcUIsbUJBQW1CLFVBQVUsbUNBQW1DLFdBQVcsRUFBRSxVQUFVLG1DQUFtQyxXQUFXLEVBQUUsVUFBVSxtQ0FBbUMsV0FBVyxFQUFFLFVBQVUsbUNBQW1DLFdBQVcsRUFBRSxVQUFVLG1DQUFtQyxXQUFXLEVBQUUsOEJBQThCLFdBQVcsZ0lBQWdJLEdBQUcsd0JBQXdCLGtEQUFrRCxZQUFZLEVBQUUsc0JBQXNCLGdCQUFnQixrQkFBa0IsZ0JBQWdCLFFBQVEsWUFBWSxLQUFLLEtBQUssWUFBWSxNQUFNLDBCQUEwQixVQUFVLGVBQWUsTUFBTSx1SUFBdUksU0FBUyxtQkFBbUIsaUJBQWlCLG1CQUFtQiw2QkFBNkIsK0NBQStDLFFBQVEsMkNBQTJDLG9CQUFvQixJQUFJLEdBQUcsdUJBQXVCLGdCQUFnQixnQkFBZ0IsVUFBVSxVQUFVLDhkQUE4ZCxrQkFBa0IsdUVBQXVFLGVBQWUsVUFBVSw2SUFBNkksd0JBQXdCLG1CQUFtQixzQ0FBc0MsMkNBQTJDLG9DQUFvQyxhQUFhLEtBQUssa0JBQWtCLGdCQUFnQix3R0FBd0csNEVBQTRFLHdGQUF3RixXQUFXLEdBQUcsa0NBQWtDLHdCQUF3QixrQkFBa0Isa0JBQWtCLElBQUksYUFBYSwwQkFBMEIsdUZBQXVGLG9EQUFvRCxJQUFJLDJCQUEyQixhQUFhLElBQUksY0FBYyxzQkFBc0IsSUFBSSxnQkFBZ0IsMEpBQTBKLElBQUksb0JBQW9CLGlQQUFpUCxJQUFJLFlBQVksU0FBUyxtQkFBbUIseUJBQXlCLGVBQWUscURBQXFELGVBQWUsVUFBVSxnSkFBZ0osc0JBQXNCLHFCQUFxQiwyQ0FBMkMsWUFBWSxJQUFJLGdCQUFnQixhQUFhLHNFQUFzRSwwRkFBMEYsMEZBQTBGLFdBQVcsR0FBRyxrQkFBa0IsWUFBWSxLQUFLLGlFQUFpRSxnREFBZ0Qsd0JBQXdCLFlBQVksb0JBQW9CLFlBQVksS0FBSyxLQUFLLFlBQVksd0NBQXdDLDBCQUEwQiw4REFBOEQsWUFBWSxLQUFLLDBJQUEwSSxpQkFBaUIsSUFBSSxtR0FBbUcsc0JBQXNCLElBQUksd0JBQXdCLGtCQUFrQixpREFBaUQsVUFBVSw4RUFBOEUsY0FBYyxrR0FBa0csa0JBQWtCLHVGQUF1RixnQkFBZ0Isd0tBQXdLLGNBQWMsNkJBQTZCLHlLQUF5SyxzQkFBc0IseUJBQXlCLGlDQUFpQyx5REFBeUQsMEJBQTBCLGlEQUFpRCxjQUFjLHNDQUFzQyxrQkFBa0IscUdBQXFHLGFBQWEsa01BQWtNLGNBQWMsc0dBQXNHLGNBQWMsMEZBQTBGLGNBQWMsTUFBTSx1Q0FBdUMseUJBQXlCLFFBQVEsV0FBVyxvQkFBb0IsZUFBZSx3QkFBd0Isc0RBQXNELDhXQUE4VyxnQkFBZ0IsZ0JBQWdCLHdCQUF3QixPQUFPLDBEQUEwRCwyMkJBQTIyQixnQ0FBZ0MsK0JBQStCLG1CQUFtQix3QkFBd0IsSUFBSSxzQkFBc0Isa05BQWtOLFdBQVcsb0hBQW9ILG9QQUFvUCxZQUFZLHdDQUF3QyxxQkFBcUIsMkNBQTJDLHNDQUFzQyxpQ0FBaUMsV0FBVyxnQkFBZ0Isd0lBQXdJLDJEQUEyRCxVQUFVLGlCQUFpQixVQUFVLGNBQWMsS0FBSyxFQUFFLE9BQU8sd0NBQXdDLDJDQUEyQyxvSUFBb0ksZ0JBQWdCLHdHQUF3RyxhQUFhLFlBQVksMkJBQTJCLCtGQUErRixpQ0FBaUMsY0FBYyxTQUFTLFdBQVcsWUFBWSxTQUFTLGtCQUFrQixnZUFBZ2UsV0FBVyxjQUFjLFdBQVcsdUJBQXVCLHlCQUF5QixLQUFLLElBQUkseUJBQXlCLGdDQUFnQyxXQUFXLG9DQUFvQyx3QkFBd0IsUUFBUSxJQUFJLEtBQUssUUFBUSxXQUFXLDhCQUE4Qix5R0FBeUcsWUFBWSx5QkFBeUIsRUFBRSxlQUFlLGlCQUFpQiwyQkFBMkIsVUFBVSx3QkFBd0IsY0FBYyxRQUFRLFdBQVcsbUJBQW1CLFFBQVEsSUFBSSxtQkFBbUIsNEJBQTRCLGdEQUFnRCxzQkFBc0IsWUFBWSxHQUFHLEVBQUUsa0JBQWtCLGdCQUFnQixvQkFBb0IsMkRBQTJELHlDQUF5QyxHQUFHLEVBQUUsYUFBYSwrSUFBK0ksb0JBQW9CLG9CQUFvQixrREFBa0QsZ0JBQWdCLFlBQVksV0FBVyw0REFBNEQsVUFBVSxrQkFBa0IsOEJBQThCLG1DQUFtQyw4Q0FBOEMsU0FBUyxnQkFBZ0Isc0hBQXNILGtDQUFrQyxFQUFFLGdCQUFnQixRQUFRLHdDQUF3QyxrQ0FBa0MseURBQXlELHFDQUFxQyxxQ0FBcUMsaUJBQWlCLFFBQVEsSUFBSSx5REFBeUQsU0FBUyxLQUFLLHNDQUFzQyxrREFBa0Qsc0VBQXNFLCtGQUErRixJQUFJLGdHQUFnRyxRQUFRLEtBQUssS0FBSyxVQUFVLG9EQUFvRCxRQUFRLDZCQUE2QixtREFBbUQsSUFBSSxvQ0FBb0MsUUFBUSw2QkFBNkIsdURBQXVELElBQUksR0FBRyxpQkFBaUIsNkJBQTZCLG9CQUFvQixxQkFBcUIsdUJBQXVCLDJCQUEyQixpQkFBaUIsaUJBQWlCLHlCQUF5QixXQUFXLGFBQWEsRUFBRSxXQUFXLGlFQUFpRSxvQkFBb0IsSUFBSSxNQUFNLFlBQVksV0FBVyxZQUFZLDJCQUEyQiwwQkFBMEIsY0FBYyxNQUFNLHNFQUFzRSw4REFBOEQsd1FBQXdRLG1CQUFtQix3Q0FBd0MsTUFBTSxpQkFBaUIsMEJBQTBCLFlBQVksT0FBTyxJQUFJLFVBQVUsY0FBYyxxQ0FBcUMsY0FBYyxxQkFBcUIsYUFBYSxhQUFhLGNBQWMsb0JBQW9CLDZCQUE2QixFQUFFLGVBQWUsY0FBYywwRkFBMEYsTUFBTSxxQkFBcUIsZ0NBQWdDLGFBQWEsRUFBRSxhQUFhLGdCQUFnQix1QkFBdUIsR0FBRywwQ0FBMEMsb0JBQW9CLHdCQUF3QixFQUFFLG9EQUFvRCxxQkFBcUIsR0FBRyxxQkFBcUIsZ0JBQWdCLEVBQUUsNkJBQTZCLE9BQU8sMEJBQTBCLFlBQVksV0FBVyw0QkFBNEIsdUNBQXVDLDRCQUE0QixhQUFhLG1CQUFtQixtQkFBbUIsU0FBUyxPQUFPLFlBQVksSUFBSSxRQUFRLHVCQUF1QixpQkFBaUIsMEJBQTBCLGtDQUFrQyxRQUFRLEtBQUssRUFBRSx5QkFBeUIseURBQXlELFlBQVksZ0JBQWdCLG9DQUFvQyxpQkFBaUIsb0NBQW9DLHFCQUFxQixVQUFVLG1CQUFtQixNQUFNLGlCQUFpQixRQUFRLE9BQU8sRUFBRSxvQkFBb0IscUJBQXFCLGFBQWEsR0FBRyxtQ0FBbUMsdUNBQXVDLFdBQVcsR0FBRyxxQkFBcUIsS0FBSyxlQUFlLEtBQUssZUFBZSxLQUFLLEtBQUssd0RBQXdELGNBQWMsb0NBQW9DLGNBQWMsNEJBQTRCLGtEQUFrRCxFQUFFLG9CQUFvQiw4REFBOEQsY0FBYyxnREFBZ0QsY0FBYyx5QkFBeUIsZ0JBQWdCLGFBQWEsdUlBQXVJLDBDQUEwQyxjQUFjLDBCQUEwQixrQkFBa0IsV0FBVyxtQ0FBbUMsa0JBQWtCLFdBQVcsb0ZBQW9GLGFBQWEsOEJBQThCLHdCQUF3Qix3QkFBd0IsWUFBWSxvQ0FBb0Msb0JBQW9CLEVBQUUsZUFBZSxnQkFBZ0Isb0NBQW9DLDZFQUE2RSxFQUFFLHFCQUFxQixvQ0FBb0Msa0NBQWtDLHlCQUF5QixlQUFlLGtEQUFrRCw0RUFBNEUsb0NBQW9DLHNDQUFzQyxtQ0FBbUMsNkNBQTZDLGtCQUFrQixTQUFTLGlDQUFpQywrQkFBK0IsaUJBQWlCLHlDQUF5QyxHQUFHLGdCQUFnQiwyQkFBMkIsc0JBQXNCLG9CQUFvQixnREFBZ0QsMkJBQTJCLHNJQUFzSSxtQkFBbUIsZUFBZSwwS0FBMEssRUFBRSxzQkFBc0Isb0JBQW9CLHlCQUF5QiwrQ0FBK0Msb0NBQW9DLHlMQUF5TCxFQUFFLFlBQVksY0FBYyxjQUFjLFdBQVcsaUJBQWlCLHNCQUFzQixTQUFTLFVBQVUsV0FBVyxXQUFXLHlCQUF5QixvQkFBb0IsNENBQTRDLEVBQUUsWUFBWSwwREFBMEQsNERBQTRELGlCQUFpQixnSEFBZ0gsMEJBQTBCLG9IQUFvSCxHQUFHLG1DQUFtQyxnQkFBZ0IsZ0JBQWdCLFdBQVcsYUFBYSx1QkFBdUIseUJBQXlCLEVBQUUsV0FBVyxXQUFXLHlCQUF5QixvQkFBb0IseUJBQXlCLEVBQUUsNEJBQTRCLHNCQUFzQixPQUFPLHdDQUF3QyxtQkFBbUIsaUJBQWlCLDZEQUE2RCxzQkFBc0IsTUFBTSxnQkFBZ0Isb0JBQW9CLHVCQUF1QixFQUFFLG1CQUFtQixtQkFBbUIsaUJBQWlCLHlCQUF5Qiw2RUFBNkUsb0VBQW9FLHFDQUFxQyxHQUFHLGlFQUFpRSxpQkFBaUIsRUFBRSxZQUFZLG9CQUFvQixPQUFPLGdDQUFnQyxvQkFBb0Isa0JBQWtCLHVCQUF1QixhQUFhLEVBQUUsb0JBQW9CLGtCQUFrQix5QkFBeUIsNENBQTRDLDBCQUEwQixFQUFFLHNDQUFzQyxxQ0FBcUMsZUFBZSxTQUFTLHVEQUF1RCxpQkFBaUIscUNBQXFDLE9BQU8sb0JBQW9CLGdCQUFnQixnQkFBZ0Isb0JBQW9CLFNBQVMsRUFBRSxnQkFBZ0IsY0FBYyx5QkFBeUIscUJBQXFCLEVBQUUsdUVBQXVFLGdEQUFnRCxrQkFBa0Isc0NBQXNDLGVBQWUsU0FBUywyRkFBMkYsaUJBQWlCLDJGQUEyRixPQUFPLHlDQUF5QyxnQkFBZ0IsZ0NBQWdDLDBDQUEwQyw2QkFBNkIseUVBQXlFLHVEQUF1RCx3QkFBd0IsaUJBQWlCLDRFQUE0RSx3QkFBd0IsRUFBRSxLQUFLLDhJQUE4SSx5SUFBeUkscUJBQXFCLG9CQUFvQixzQkFBc0IsT0FBTyxhQUFhLDBDQUEwQyxVQUFVLGdGQUFnRixFQUFFLHFDQUFxQyxXQUFXLHVCQUF1QixjQUFjLHVCQUF1QixHQUFHLDhEQUE4RCxtQkFBbUIsU0FBUyw2Q0FBNkMsb0JBQW9CLEVBQUUsd0JBQXdCLDJCQUEyQixvQkFBb0IsMENBQTBDLGtCQUFrQixJQUFJLEtBQUssNkJBQTZCLGFBQWEsa0JBQWtCLElBQUksNkJBQTZCLGtCQUFrQiwwQ0FBMEMsNEJBQTRCLDhCQUE4QixZQUFZLGdCQUFnQixJQUFJLEtBQUssdUJBQXVCLGtFQUFrRSxFQUFFLGNBQWMsS0FBSywyQkFBMkIsaURBQWlELElBQUksS0FBSyxvQ0FBb0MsSUFBSSw0REFBNEQsb0NBQW9DLHVEQUF1RCw4QkFBOEIsMkJBQTJCLElBQUksS0FBSyxFQUFFLElBQUksc0JBQXNCLDZCQUE2QixjQUFjLFdBQVcsV0FBVyxLQUFLLHdCQUF3Qiw0SUFBNEksMkJBQTJCLHVEQUF1RCxRQUFRLHlFQUF5RSxFQUFFLFdBQVcsV0FBVywyQkFBMkIsMkVBQTJFLGlMQUFpTCwrR0FBK0csOERBQThELHVCQUF1Qiw2RUFBNkUsT0FBTywyQkFBMkIsb0JBQW9CLFFBQVEsdURBQXVELHVDQUF1Qyx3RUFBd0UsRUFBRSxPQUFPLHlDQUF5Qyw2QkFBNkIsZ0NBQWdDLDhCQUE4QixnQkFBZ0IsV0FBVyxjQUFjLGtCQUFrQixTQUFTLEVBQUUsZ0JBQWdCLFdBQVcsdUJBQXVCLDRCQUE0QixHQUFHLFdBQVcsVUFBVSx1TkFBdU4sU0FBUyxpQkFBaUIsU0FBUyxFQUFFLHNDQUFzQyxhQUFhLGlCQUFpQixpREFBaUQsRUFBRSx1Q0FBdUMsU0FBUyxpQkFBaUIsZ0RBQWdELEVBQUUsc0NBQXNDLGdKQUFnSixpQkFBaUIsZ0JBQWdCLDBEQUEwRCx5QkFBeUIsaUdBQWlHLHFFQUFxRSxFQUFFLDBDQUEwQyxxRkFBcUYsaUJBQWlCLHFEQUFxRCx3RUFBd0UsK0JBQStCLHlCQUF5QixjQUFjLEVBQUUsdUNBQXVDLHVCQUF1QixZQUFZLEVBQUUsaUJBQWlCLHVCQUF1Qiw4QkFBOEIsRUFBRSxFQUFFLHdDQUF3QyxXQUFXLGlCQUFpQixxQkFBcUIsRUFBRSx3Q0FBd0Msd0RBQXdELGlCQUFpQixnSkFBZ0osRUFBRSxnRUFBZ0Usa0dBQWtHLGlCQUFpQixjQUFjLDBEQUEwRCw2QkFBNkIsdUVBQXVFLEVBQUUsZ0RBQWdELDZCQUE2QixpQkFBaUIsbURBQW1ELEVBQUUscUNBQXFDLFFBQVEsZ0RBQWdELGlCQUFpQiw0Q0FBNEMsRUFBRSxxQ0FBcUMsU0FBUyxpQkFBaUIsU0FBUyxFQUFFLHFDQUFxQyxhQUFhLGlCQUFpQixvQ0FBb0MsRUFBRSxxQ0FBcUMseUJBQXlCLFVBQVUsRUFBRSxpQkFBaUIsdUJBQXVCLHVCQUF1QixFQUFFLEVBQUUsMkNBQTJDLHlDQUF5QyxpQkFBaUIsMkVBQTJFLEdBQUcsSUFBSSx3QkFBd0IsaUVBQWlFLHNFQUFzRSxzQkFBc0IsaUJBQWlCLDhCQUE4QixrQkFBa0IsbUJBQW1CLFNBQVMsWUFBWSx1QkFBdUIsZ0JBQWdCLG9CQUFvQixxQkFBcUIsRUFBRSxTQUFTLDZCQUE2QixnQ0FBZ0MsMENBQTBDLGFBQWEsMERBQTBELFNBQVMsRUFBRSw4QkFBOEIsa0JBQWtCLG1EQUFtRCxpQkFBaUIsNkRBQTZELDBCQUEwQixHQUFHLDRCQUE0QiwrQ0FBK0MsWUFBWSxPQUFPLEdBQUcsaUJBQWlCLHFDQUFxQyxXQUFXLHVCQUF1QixxQkFBcUIsRUFBRSxJQUFJLDRDQUE0QyxnQ0FBZ0MsMENBQTBDLFdBQVcscUJBQXFCLDZEQUE2RCxFQUFFLHFDQUFxQyxXQUFXLHVCQUF1QixxQkFBcUIsRUFBRSxJQUFJLE1BQU0sa0JBQWtCLG1DQUFtQyxtQ0FBbUMsaURBQWlELEdBQUcsT0FBTyxvQkFBb0Isd0NBQXdDLGlEQUFpRCxnREFBZ0QsK0RBQStELGdCQUFnQixtREFBbUQsbUVBQW1FLE9BQU8sS0FBSyxzQ0FBc0Msb0NBQW9DLE9BQU8sZ0JBQWdCLFVBQVUsR0FBRyxrQkFBa0IscUZBQXFGLHVCQUF1QixRQUFRLG9DQUFvQyxjQUFjLGlDQUFpQywwQkFBMEIsRUFBRSw2QkFBNkIsMkJBQTJCLHdDQUF3QyxzQkFBc0Isc0JBQXNCLFNBQVMsS0FBSyxJQUFJLG9HQUFvRywrQkFBK0IsbUJBQW1CLDBCQUEwQixrQkFBa0IsR0FBRyxxREFBcUQsUUFBUSxvQkFBb0IsOENBQThDLHNDQUFzQyxXQUFXLGFBQWEsb0JBQW9CLFVBQVUsWUFBWSx1Q0FBdUMsc0NBQXNDLDJCQUEyQixzQkFBc0IsR0FBRyxjQUFjLFdBQVcsdUJBQXVCLHNCQUFzQixzQkFBc0IsU0FBUyxLQUFLLEdBQUcsNEJBQTRCLGtCQUFrQixJQUFJLEVBQUUsZ0JBQWdCLHVFQUF1RSxzQkFBc0IsYUFBYSx1RUFBdUUsY0FBYyxzQkFBc0IseUNBQXlDLGlCQUFpQixvREFBb0QsMkJBQTJCLElBQUksY0FBYyw2QkFBNkIsd0VBQXdFLG9CQUFvQixJQUFJLGNBQWMsMEJBQTBCLG9CQUFvQiw0QkFBNEIsR0FBRyxtREFBbUQsZ0JBQWdCLG9FQUFvRSxtQkFBbUIsMkJBQTJCLDRCQUE0QixNQUFNLG9DQUFvQyxNQUFNLEdBQUcsc0JBQXNCLGtCQUFrQixhQUFhLHFCQUFxQixzQ0FBc0MsR0FBRyxlQUFlLGtHQUFrRywwQkFBMEIsZ0JBQWdCLHlDQUF5QyxzRUFBc0UsaUJBQWlCLGlCQUFpQixvQkFBb0IsMEJBQTBCLEVBQUUsYUFBYSxnREFBZ0QscURBQXFELHFCQUFxQixJQUFJLGFBQWEsb0JBQW9CLHNDQUFzQyxJQUFJLDBCQUEwQiwwQkFBMEIsZ0JBQWdCLGtDQUFrQyx1QkFBdUIsMEJBQTBCLEVBQUUsYUFBYSxHQUFHLGtFQUFrRSxVQUFVLCtFQUErRSwwQ0FBMEMsV0FBVyxLQUFLLFdBQVcsSUFBSSxlQUFlLHNCQUFzQixpQ0FBaUMsTUFBTSxnQkFBZ0IsZ0JBQWdCLEtBQUssaUJBQWlCLHVCQUF1QixJQUFJLHdDQUF3QyxvQkFBb0IsRUFBRSx3QkFBd0IsVUFBVSwwQ0FBMEMsMENBQTBDLDBDQUEwQyxrQkFBa0IsaUJBQWlCLEVBQUUsc0JBQXNCLGdDQUFnQyxXQUFXLEtBQUssNEVBQTRFLE1BQU0sa0JBQWtCLFNBQVMsZ0hBQWdILHVCQUF1QixHQUFHLCtMQUErTCxHQUFHLEtBQUssVUFBVSxpQkFBaUIsTUFBTSxrQkFBa0IsTUFBTSxrQkFBa0IsTUFBTSxrQkFBa0IsTUFBTSw0QkFBNEIsTUFBTSw2QkFBNkIsTUFBTSw2QkFBNkIsTUFBTSxrQkFBa0IsTUFBTSxrQkFBa0IsbUVBQW1FLEdBQUcsU0FBUyxnQkFBZ0IsS0FBSyxtQkFBbUIsb0NBQW9DLCtEQUErRCxxQkFBcUIsSUFBSSxnRUFBZ0UscUJBQXFCLElBQUksVUFBVSxpRkFBaUYsdUJBQXVCLEdBQUcsU0FBUyw0QkFBNEIsTUFBTSxpQ0FBaUMsTUFBTSxpQ0FBaUMsTUFBTSxpQ0FBaUMsTUFBTSxpQkFBaUIsTUFBTSxzQkFBc0IsTUFBTSxzQkFBc0IsTUFBTSxzQkFBc0IsTUFBTSx5QkFBeUIsTUFBTSx5QkFBeUIsTUFBTSx5QkFBeUIsa0RBQWtELHdCQUF3Qiw4Q0FBOEMsd0ZBQXdGLGdDQUFnQyxhQUFhLDJCQUEyQixtQkFBbUIsS0FBSyxLQUFLLElBQUksb0JBQW9CLGNBQWMsV0FBVyw4RkFBOEYsYUFBYSxhQUFhLHdFQUF3RSxHQUFHLGFBQWEsOENBQThDLEdBQUcsc0JBQXNCLFdBQVcsS0FBSyxXQUFXLFFBQVEsYUFBYSxhQUFhLHdEQUF3RCxHQUFHLGFBQWEsOEJBQThCLEdBQUcsc0JBQXNCLFdBQVcsS0FBSyxXQUFXLFFBQVEseURBQXlELHFCQUFxQixtS0FBbUssS0FBSywrQ0FBK0Msa0JBQWtCLHVHQUF1RyxHQUFHLHVCQUF1QixnQkFBZ0Isa0JBQWtCLFlBQVksR0FBRyxxQ0FBcUMsNENBQTRDLGlFQUFpRSxXQUFXLGlCQUFpQixXQUFXLFlBQVksc0JBQXNCLG1JQUFtSSxvQkFBb0IsdUNBQXVDLFNBQVMsZ0NBQWdDLFNBQVMsYUFBYSxvQkFBb0IsYUFBYSxTQUFTLCtFQUErRSxvQkFBb0IsY0FBYyxrQ0FBa0MsY0FBYyxZQUFZLE9BQU8sdUNBQXVDLDZCQUE2Qiw0QkFBNEIsdUJBQXVCLGVBQWUsU0FBUyxzQkFBc0IsTUFBTSwyUUFBMlEsa0hBQWtILGNBQWMsd0NBQXdDLG9CQUFvQixZQUFZLGlDQUFpQyxJQUFJLGdCQUFnQixjQUFjLGtCQUFrQix1Q0FBdUMsd0JBQXdCLGVBQWUsMkJBQTJCLHNHQUFzRyw2QkFBNkIsNkJBQTZCLDZCQUE2Qix3QkFBd0IsMkZBQTJGLGdCQUFnQix3Q0FBd0MsOENBQThDLDREQUE0RCxnREFBZ0QscURBQXFELHVDQUF1QyxvQkFBb0IsRUFBRSx1RUFBdUUseUJBQXlCLGlEQUFpRCxHQUFHLGtCQUFrQixrQkFBa0Isa0JBQWtCLDhCQUE4Qiw2QkFBNkIsV0FBVyxxQ0FBcUMsVUFBVSxLQUFLLGlFQUFpRSxHQUFHLHNCQUFzQixXQUFXLHdIQUF3SCxLQUFLLGdDQUFnQyxrQkFBa0IsTUFBTSwwQkFBMEIsTUFBTSxtREFBbUQsTUFBTSxxQkFBcUIsSUFBSSxJQUFJLHdDQUF3Qyw0REFBNEQsc0JBQXNCLFdBQVcsbURBQW1ELElBQUksR0FBRyxzQkFBc0Isa0JBQWtCLG1EQUFtRCw4Q0FBOEMsMERBQTBELDJCQUEyQixNQUFNLFlBQVksT0FBTyxpaENBQWloQyxRQUFRLGdLQUFnSyxLQUFLLHdHQUF3RyxzRUFBc0UsaUNBQWlDLGVBQWUsRUFBRSxHQUFHLFNBQVMsT0FBTyxvQ0FBb0MsMkRBQTJELFVBQVUsNkNBQTZDLGtCQUFrQiwwQ0FBMEMsWUFBWSxrQkFBa0IsS0FBSywwREFBMEQsMENBQTBDLGdEQUFnRCxrR0FBa0csNENBQTRDLDREQUE0RCxrQkFBa0IsK0RBQStELEdBQUcsMkNBQTJDLHlDQUF5QyxhQUFhLG9CQUFvQixLQUFLLHFCQUFxQixrQkFBa0IsbUNBQW1DLE1BQU0sR0FBRyxzQ0FBc0Msb0NBQW9DLGtHQUFrRyxtQkFBbUIsS0FBSyxrQkFBa0IsK0JBQStCLEVBQUUsb0NBQW9DLGtDQUFrQyxnQkFBZ0IsTUFBTSw4Q0FBOEMsa0JBQWtCLHdCQUF3QixNQUFNLFNBQVMsY0FBYywrQkFBK0IsVUFBVSxtRUFBbUUsU0FBUyx5QkFBeUIsU0FBUyw2QkFBNkIsdUJBQXVCLG9GQUFvRixtQ0FBbUMsNkNBQTZDLDhDQUE4QyxLQUFLLHNCQUFzQix5Q0FBeUMsbUNBQW1DLDhDQUE4QyxvQkFBb0IsV0FBVyxvQkFBb0IsSUFBSSwrREFBK0QsR0FBRywyQkFBMkIsY0FBYyxrQ0FBa0Msd0JBQXdCLHFCQUFxQixjQUFjLDJDQUEyQywwQkFBMEIsNkJBQTZCLFNBQVMsOEtBQThLLFlBQVksNkpBQTZKLGtFQUFrRSw4Q0FBOEMsS0FBSyxzQkFBc0IsMkNBQTJDLHNDQUFzQyw4Q0FBOEMsb0JBQW9CLFdBQVcsdUJBQXVCLElBQUksK0RBQStELEdBQUcsb0JBQW9CLGdCQUFnQixZQUFZLFdBQVcseUJBQXlCLFNBQVMsb0JBQW9CLDZCQUE2QixXQUFXLG9CQUFvQixTQUFTLFFBQVEsdUNBQXVDLHdCQUF3Qix1QkFBdUIseURBQXlELHFCQUFxQix3Q0FBd0MsWUFBWSxJQUFJLDBEQUEwRCxnQ0FBZ0MsYUFBYSx3QkFBd0IsNERBQTRELCtCQUErQixjQUFjLCtEQUErRCx5QkFBeUIsWUFBWSxnQkFBZ0IsT0FBTyxXQUFXLG9CQUFvQixRQUFRLDREQUE0RCxZQUFZLHdFQUF3RSw0QkFBNEIsTUFBTSx5RkFBeUYsNEJBQTRCLGlKQUFpSixLQUFLLHlEQUF5RCwwQkFBMEIsMEhBQTBILDZXQUE2VywrT0FBK08sYUFBYSx5c0JBQXlzQixlQUFlLG1QQUFtUCxlQUFlLHNDQUFzQyxZQUFZLEVBQUUsSUFBSSxrQkFBa0IsYUFBYSxTQUFTLHdCQUF3QixTQUFTLDJCQUEyQixRQUFRLHdCQUF3QixXQUFXLFlBQVksU0FBUyx1Q0FBdUMsYUFBYSxzQkFBc0IsSUFBSSxjQUFjLE1BQU0sK0JBQStCLElBQUksdUJBQXVCLElBQUksZ0JBQWdCLE1BQU0sK0JBQStCLE1BQU0sK0JBQStCLGtCQUFrQixXQUFXLFlBQVksV0FBVyxrQkFBa0Isc0JBQXNCLGlCQUFpQixJQUFJLDJCQUEyQixhQUFhLElBQUksMkJBQTJCLFlBQVksVUFBVSxJQUFJLDJSQUEyUixJQUFJLDJGQUEyRixJQUFJLHdDQUF3Qyw4QkFBOEIsNkVBQTZFLFFBQVEsd0hBQXdILGdIQUFnSCw0RkFBNEYsc0xBQXNMLHdEQUF3RCxVQUFVLDBNQUEwTSxVQUFVLHlIQUF5SCwyQkFBMkIsY0FBYyxtSEFBbUgsT0FBTyxFQUFFLGNBQWMscUJBQXFCLDZIQUE2SCxPQUFPLDBGQUEwRiwwSUFBMEksU0FBUyxtQ0FBbUMsVUFBVSxFQUFFLGFBQWEscUNBQXFDLDRCQUE0QixtREFBbUQsUUFBUSwwQ0FBMEMsbUJBQW1CLElBQUksR0FBRyxxQkFBcUIsZ0JBQWdCLG9CQUFvQix3ZkFBd2Ysb0NBQW9DLHFFQUFxRSxtQkFBbUIsd05BQXdOLGdHQUFnRyxXQUFXLEdBQUcsa0JBQWtCLGdCQUFnQixvQkFBb0IseUJBQXlCLHNJQUFzSSxtQ0FBbUMsT0FBTyxzQkFBc0IsVUFBVSxrQ0FBa0MsNktBQTZLLHNVQUFzVSxLQUFLLHVLQUF1SyxLQUFLLDBIQUEwSCxLQUFLLGlCQUFpQiwrQkFBK0IsRUFBRSxtQkFBbUIsYUFBYSxxQ0FBcUMsS0FBSyxnQkFBZ0IscUJBQXFCLEtBQUssS0FBSyxXQUFXLGVBQWUseUJBQXlCLGFBQWEsOEJBQThCLGFBQWEsd0JBQXdCLGNBQWMsNkNBQTZDLElBQUksRUFBRSxjQUFjLGdKQUFnSixJQUFJLEVBQUUsY0FBYyxjQUFjLFFBQVEsTUFBTSwwQ0FBMEMsV0FBVyx3Q0FBd0MsR0FBRyxvQkFBb0IscUJBQXFCLG9CQUFvQixzQkFBc0Isa0JBQWtCLGNBQWMsV0FBVyxXQUFXLCtDQUErQyxnQkFBZ0IsR0FBRyxVQUFVLElBQUksNFBBQTRQLEtBQUssR0FBRyw2QkFBNkIsNkRBQTZELHVCQUF1QixNQUFNLHFEQUFxRCxzREFBc0QsSUFBSSwwQkFBMEIsS0FBSywrQ0FBK0MsUUFBUSxXQUFXLDBCQUEwQiw0QkFBNEIsc0NBQXNDLEtBQUssV0FBVyxjQUFjLFNBQVMsV0FBVyxLQUFLLDJDQUEyQyw0Q0FBNEMsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLFFBQVEsZUFBZSxjQUFjLDZLQUE2SyxjQUFjLHNCQUFzQixrQkFBa0IsYUFBYSxrQkFBa0IsYUFBYSxrREFBa0QsYUFBYSxpQ0FBaUMsd01BQXdNLGFBQWEsd0NBQXdDLGFBQWEsb0NBQW9DLGFBQWEsa0JBQWtCLHlCQUF5QixzQ0FBc0Msa0JBQWtCLG9CQUFvQixjQUFjLE1BQU0sa0JBQWtCLElBQUkseUJBQXlCLFVBQVUsVUFBVSxZQUFZLEtBQUssc0JBQXNCLEtBQUssc0JBQXNCLGlLQUFpSyx3Q0FBd0MsZ0NBQWdDLG1DQUFtQyxtRUFBbUUsSUFBSSxNQUFNLGtCQUFrQixpQkFBaUIsT0FBTyxLQUFLLFFBQVEsT0FBTyxlQUFlLFdBQVcsd0NBQXdDLGlCQUFpQixjQUFjLE1BQU0sZ0lBQWdJLGdDQUFnQyxhQUFhLHNFQUFzRSxrQkFBa0IscUJBQXFCLGtFQUFrRSwyQ0FBMkMsa0NBQWtDLE9BQU8sdUJBQXVCLDJEQUEyRCxxRkFBcUYscUJBQXFCLDhDQUE4QyxvQ0FBb0MsUUFBUSxxQkFBcUIsdUVBQXVFLGFBQWEsVUFBVSxXQUFXLEtBQUssV0FBVyxzSkFBc0oscUJBQXFCLFdBQVcsS0FBSywrQkFBK0IsK0lBQStJLFlBQVksaUNBQWlDLGdCQUFnQixrQkFBa0Isa0JBQWtCLFlBQVksV0FBVyxvREFBb0Qsc0JBQXNCLG9CQUFvQix3QkFBd0IsOERBQThELHlKQUF5SixpQ0FBaUMscUNBQXFDLElBQUksZUFBZSxPQUFPLGlCQUFpQixVQUFVLG1FQUFtRSxlQUFlLCtEQUErRCxNQUFNLHlEQUF5RCw0RkFBNEYsaUdBQWlHLG1CQUFtQixnREFBZ0QsRUFBRSxrQkFBa0Isa0JBQWtCLDhGQUE4RixJQUFJLFVBQVUsbUNBQW1DLE9BQU8sYUFBYSxZQUFZLDhGQUE4RixxQkFBcUIsK0JBQStCLHNCQUFzQixzQkFBc0Isb0pBQW9KLE1BQU0sVUFBVSx3QkFBd0IsZUFBZSxNQUFNLGtCQUFrQixNQUFNLGtCQUFrQixrQkFBa0Isa0JBQWtCLFlBQVksV0FBVyxpQkFBaUIsMkJBQTJCLFNBQVMsbUNBQW1DLGdEQUFnRCwyQkFBMkIsK01BQStNLElBQUksRUFBRSxrQ0FBa0Msa0JBQWtCLGVBQWUsc0JBQXNCLDBFQUEwRSxHQUFHLHVCQUF1QixhQUFhLFdBQVcsd0JBQXdCLCtEQUErRCxrQkFBa0Isb0JBQW9CLGlCQUFpQix5Q0FBeUMseUNBQXlDLEtBQUssZ0JBQWdCLHdCQUF3Qiw2QkFBNkIsR0FBRyx1QkFBdUIsYUFBYSxzREFBc0QseUJBQXlCLHNCQUFzQixpQkFBaUIsZ0hBQWdILEVBQUUsR0FBRyx1QkFBdUIsYUFBYSxzQkFBc0IsNkNBQTZDLEtBQUssS0FBSyxpQ0FBaUMsa0JBQWtCLGdCQUFnQixJQUFJLEtBQUssaUNBQWlDLGNBQWMsOEJBQThCLEdBQUcsdUJBQXVCLGFBQWEsd0ZBQXdGLGdCQUFnQixvQ0FBb0MsV0FBVyxtREFBbUQsV0FBVyw0QkFBNEIsU0FBUyxjQUFjLHFHQUFxRyxpQkFBaUIsV0FBVywyRUFBMkUscUJBQXFCLDRCQUE0QiwwREFBMEQsa0JBQWtCLDhEQUE4RCxJQUFJLE1BQU0sY0FBYyx5RkFBeUYsZ0NBQWdDLDJCQUEyQixJQUFJLEtBQUssa0JBQWtCLFlBQVksSUFBSSx5Q0FBeUMsU0FBUyxTQUFTLGdEQUFnRCxrQkFBa0IsVUFBVSxhQUFhLGdCQUFnQixFQUFFLFlBQVksS0FBSyxXQUFXLHFCQUFxQiwrQ0FBK0MsaUJBQWlCLE9BQU8sSUFBSSwwREFBMEQsR0FBRyxTQUFTLHdCQUF3QiwwQ0FBMEMsZUFBZSw0REFBNEQsK0JBQStCLGtEQUFrRCxXQUFXLHNCQUFzQixHQUFHLEVBQUUsNEVBQTRFLHVCQUF1QixhQUFhLHlDQUF5Qyx3QkFBd0IsMkJBQTJCLFdBQVcsd0JBQXdCLFVBQVUsRUFBRSxtQ0FBbUMsdUJBQXVCLGFBQWEsd0ZBQXdGLGdCQUFnQixvQ0FBb0MsV0FBVyxtREFBbUQsV0FBVyw0QkFBNEIsU0FBUyxjQUFjLDRCQUE0QiwwREFBMEQsa0JBQWtCLDhEQUE4RCxnQkFBZ0Isc0JBQXNCLHNCQUFzQixtQkFBbUIsb0RBQW9ELHFDQUFxQyxjQUFjLGNBQWMseUZBQXlGLGlCQUFpQixXQUFXLCtFQUErRSxTQUFTLE1BQU0sZ0JBQWdCLGlCQUFpQixNQUFNLDJEQUEyRCxZQUFZLGNBQWMsZ0NBQWdDLDJCQUEyQixJQUFJLEtBQUssa0JBQWtCLFlBQVksSUFBSSwyQ0FBMkMsU0FBUyxRQUFRLElBQUksZ0NBQWdDLFFBQVEsSUFBSSxpRUFBaUUsMkNBQTJDLFFBQVEsSUFBSSxrQkFBa0IscUNBQXFDLEdBQUcsUUFBUSxJQUFJLEtBQUssOEJBQThCLEdBQUcsWUFBWSxJQUFJLDREQUE0RCxHQUFHLCtDQUErQyxzQkFBc0IsMEVBQTBFLGtCQUFrQixTQUFTLFlBQVksU0FBUyxZQUFZLFNBQVMsRUFBRSxZQUFZLEtBQUssWUFBWSxxQkFBcUIsNEJBQTRCLEtBQUssZ0NBQWdDLDRDQUE0Qyx5QkFBeUIsdUJBQXVCLEdBQUcsUUFBUSxLQUFLLDhEQUE4RCxHQUFHLFNBQVMsa0NBQWtDLFlBQVksbUJBQW1CLEtBQUssbUJBQW1CLGdCQUFnQix5Q0FBeUMsK0JBQStCLDBDQUEwQyxrQkFBa0Isd0RBQXdELGlCQUFpQixLQUFLLHNCQUFzQixHQUFHLEVBQUUsNEVBQTRFLHVCQUF1QixhQUFhLGtDQUFrQyxjQUFjLDREQUE0RCxlQUFlLElBQUksS0FBSyxnQkFBZ0IsWUFBWSxJQUFJLEtBQUssNkJBQTZCLFlBQVksSUFBSSwwRUFBMEUsWUFBWSxjQUFjLGdCQUFnQixZQUFZLHFDQUFxQyxxQkFBcUIsa0JBQWtCLFVBQVUsZUFBZSx5QkFBeUIsRUFBRSxZQUFZLEtBQUssV0FBVyxxQkFBcUIsbURBQW1ELGlCQUFpQixPQUFPLElBQUksd0RBQXdELEdBQUcsU0FBUyxzQkFBc0Isb0NBQW9DLGNBQWMsNERBQTRELCtCQUErQixrREFBa0QsSUFBSSxzQkFBc0IsR0FBRyxFQUFFLHlCQUF5Qix1QkFBdUIsYUFBYSx3RkFBd0YsZ0JBQWdCLG9DQUFvQyxXQUFXLG1EQUFtRCxXQUFXLDRCQUE0QixTQUFTLGNBQWMsNEJBQTRCLDBEQUEwRCxrQkFBa0IsOERBQThELGNBQWMsdUdBQXVHLGlCQUFpQixXQUFXLDhFQUE4RSxTQUFTLE1BQU0sY0FBYyxnQ0FBZ0MsMkJBQTJCLElBQUksS0FBSyxrQkFBa0IsWUFBWSxJQUFJLDJDQUEyQyxTQUFTLGFBQWEsSUFBSSwrRUFBK0UsNkVBQTZFLCtCQUErQix1QkFBdUIscUJBQXFCLDJEQUEyRCxnQ0FBZ0MsU0FBUyxZQUFZLFNBQVMsZUFBZSxpQkFBaUIsaUJBQWlCLGdFQUFnRSxRQUFRLGlCQUFpQixNQUFNLEtBQUssbUJBQW1CLGlCQUFpQixTQUFTLCtCQUErQiw4QkFBOEIsbUJBQW1CLDBUQUEwVCw4QkFBOEIsRUFBRSxZQUFZLEtBQUssWUFBWSxxQkFBcUIsNEJBQTRCLEtBQUssZ0NBQWdDLDhDQUE4Qyx5QkFBeUIsdUJBQXVCLEdBQUcsUUFBUSxLQUFLLDhEQUE4RCxHQUFHLFNBQVMsa0NBQWtDLFlBQVksbUJBQW1CLEtBQUssbUJBQW1CLGdCQUFnQiwyQ0FBMkMsK0JBQStCLDBDQUEwQyxrQkFBa0Isd0RBQXdELGlCQUFpQixLQUFLLHNCQUFzQixHQUFHLEVBQUUsNEVBQTRFLHVCQUF1QixhQUFhLDBDQUEwQyx3QkFBd0IsaUNBQWlDLGlDQUFpQyx3Q0FBd0MsVUFBVSxpQ0FBaUMsV0FBVyxxQkFBcUIsaUJBQWlCLFdBQVcscUJBQXFCLFVBQVUsRUFBRSxvQ0FBb0MsdUJBQXVCLGFBQWEsc0NBQXNDLHdCQUF3QixlQUFlLFVBQVUsZ0JBQWdCLHFCQUFxQiw2Q0FBNkMsZ0NBQWdDLFlBQVksSUFBSSxLQUFLLFlBQVksV0FBVyxnQ0FBZ0Msb0NBQW9DLHFCQUFxQixvQkFBb0Isa0JBQWtCLHFCQUFxQixFQUFFLGdDQUFnQyx1QkFBdUIsYUFBYSw0QkFBNEIsMEJBQTBCLCtCQUErQiwwQkFBMEIsK0JBQStCLHVEQUF1RCxZQUFZLElBQUksS0FBSyxnR0FBZ0cscUJBQXFCLFNBQVMsVUFBVSxVQUFVLGlDQUFpQyxFQUFFLHlCQUF5Qix1QkFBdUIsYUFBYSx3QkFBd0IsOEJBQThCLHFDQUFxQyxnQ0FBZ0MsaUJBQWlCLFVBQVUsYUFBYSw2RUFBNkUscUVBQXFFLGdGQUFnRixrQ0FBa0MsS0FBSyxTQUFTLDBJQUEwSSxLQUFLLElBQUksNEZBQTRGLEtBQUssSUFBSSw2RkFBNkYsY0FBYyxjQUFjLGNBQWMscUJBQXFCLEdBQUcsdUJBQXVCLGFBQWEsd0JBQXdCLDhCQUE4QixxQ0FBcUMsZ0NBQWdDLGlCQUFpQixVQUFVLFlBQVksNEVBQTRFLG9FQUFvRSwrRUFBK0Usa0NBQWtDLEtBQUssU0FBUyx5SUFBeUksS0FBSyxJQUFJLDRGQUE0RixLQUFLLElBQUksNEZBQTRGLGNBQWMsY0FBYyxjQUFjLHFCQUFxQixHQUFHLHVCQUF1QixhQUFhLHNCQUFzQix1QkFBdUIsR0FBRyx1QkFBdUIsYUFBYSxzQkFBc0IsZ0JBQWdCLDJEQUEyRCxFQUFFLG9EQUFvRCx1QkFBdUIsYUFBYSw0QkFBNEIsNkNBQTZDLDJCQUEyQixJQUFJLGdDQUFnQyxXQUFXLEtBQUssNEJBQTRCLHdDQUF3QyxvQkFBb0IsMENBQTBDLElBQUksa0JBQWtCLFNBQVMsdUJBQXVCLGlFQUFpRSxJQUFJLGtDQUFrQyxJQUFJLGdCQUFnQixJQUFJLEtBQUssa0JBQWtCLDhDQUE4QyxrQkFBa0IsZ0JBQWdCLElBQUksaUVBQWlFLHNCQUFzQiwwQkFBMEIsMERBQTBELElBQUksS0FBSyx3QkFBd0IsZ0JBQWdCLGtCQUFrQix3Q0FBd0MsNkJBQTZCLDJCQUEyQiwrQ0FBK0MsT0FBTyxnQkFBZ0IsSUFBSSxLQUFLLGFBQWEsVUFBVSxlQUFlLE1BQU0scUJBQXFCLFVBQVUsV0FBVyxLQUFLLE1BQU0sbUJBQW1CLFNBQVMsa0RBQWtELG1EQUFtRCxJQUFJLDJCQUEyQixTQUFTLHlDQUF5QywwREFBMEQsc0NBQXNDLG1GQUFtRixFQUFFLHlFQUF5RSx1QkFBdUIsYUFBYSxzQkFBc0IsV0FBVyx1QkFBdUIseUJBQXlCLFVBQVUsWUFBWSxLQUFLLDRCQUE0QixXQUFXLDhCQUE4Qiw0QkFBNEIsK0RBQStELGNBQWMsNkJBQTZCLGFBQWEsU0FBUyxXQUFXLElBQUksS0FBSyxNQUFNLElBQUksWUFBWSxLQUFLLHNDQUFzQyx1QkFBdUIsZUFBZSxJQUFJLEtBQUssc0JBQXNCLEdBQUcsY0FBYyxtQkFBbUIsa0JBQWtCLFlBQVksV0FBVyxLQUFLLFdBQVcsNkJBQTZCLFlBQVksV0FBVyxLQUFLLFdBQVcsMERBQTBELFlBQVksVUFBVSxJQUFJLGNBQWMsSUFBSSxLQUFLLDZDQUE2QyxHQUFHLGlCQUFpQixJQUFJLG1DQUFtQyw4QkFBOEIsNEJBQTRCLFNBQVMsVUFBVSxHQUFHLHFCQUFxQixXQUFXLGdEQUFnRCxHQUFHLFVBQVUsR0FBRyxnQkFBZ0IsV0FBVyw2REFBNkQsS0FBSyxVQUFVLDhEQUE4RCxFQUFFLG1EQUFtRCx1QkFBdUIsYUFBYSx5Q0FBeUMsZ0JBQWdCLDhDQUE4QyxjQUFjLFVBQVUsZ0JBQWdCLHdCQUF3QixnRUFBZ0UsbUNBQW1DLDhCQUE4QixvQ0FBb0MsdURBQXVELHlCQUF5QixTQUFTLGlCQUFpQixTQUFTLFlBQVksSUFBSSw0QkFBNEIsVUFBVSxnQkFBZ0Isb0JBQW9CLGdCQUFnQixNQUFNLHNDQUFzQyxJQUFJLHFCQUFxQixVQUFVLFFBQVEsSUFBSSw4QkFBOEIsU0FBUyxtQkFBbUIsY0FBYyx5QkFBeUIsMkJBQTJCLElBQUksS0FBSyxXQUFXLGdCQUFnQixVQUFVLElBQUksU0FBUyxVQUFVLG9CQUFvQixnQkFBZ0IsOEJBQThCLEtBQUssRUFBRSx5QkFBeUIsdUNBQXVDLFNBQVMsZ0JBQWdCLDZDQUE2QyxJQUFJLFlBQVksOEJBQThCLElBQUkseUNBQXlDLElBQUksS0FBSyx1QkFBdUIsZ0JBQWdCLElBQUksMEJBQTBCLGFBQWEsZUFBZSw2Q0FBNkMsR0FBRyxTQUFTLGdCQUFnQixnQkFBZ0IsOEJBQThCLFdBQVcsdUJBQXVCLGNBQWMsd0JBQXdCLGlDQUFpQyxXQUFXLDBCQUEwQixVQUFVLFlBQVksd0JBQXdCLHNDQUFzQyxJQUFJLHVCQUF1QixXQUFXLDZCQUE2Qix1Q0FBdUMsSUFBSSxrQ0FBa0MsSUFBSSxnQkFBZ0IsV0FBVywwQkFBMEIsNkNBQTZDLElBQUksdUJBQXVCLFNBQVMsMkZBQTJGLDRCQUE0QiwyQkFBMkIsSUFBSSxZQUFZLElBQUksbUJBQW1CLElBQUksa0NBQWtDLElBQUksb0JBQW9CLFNBQVMsdUJBQXVCLDRCQUE0QixJQUFJLDJDQUEyQyxJQUFJLEtBQUssaUJBQWlCLElBQUksMEJBQTBCLFVBQVUsWUFBWSxxQ0FBcUMsNEJBQTRCLElBQUksa0NBQWtDLElBQUksS0FBSyx3Q0FBd0MsSUFBSSx5QkFBeUIsVUFBVSxZQUFZLHFDQUFxQyx1QkFBdUIsdUJBQXVCLFdBQVcsdUJBQXVCLFdBQVcsa0JBQWtCLFdBQVcsc0JBQXNCLG1CQUFtQixRQUFRLFdBQVcsWUFBWSxRQUFRLFdBQVcsS0FBSyxzQkFBc0IsMkVBQTJFLFNBQVMsa0JBQWtCLDZDQUE2QyxXQUFXLHVCQUF1QixXQUFXLGdDQUFnQyxXQUFXLDBCQUEwQixtQkFBbUIsUUFBUSxXQUFXLFlBQVksUUFBUSxXQUFXLEtBQUssNkJBQTZCLDJFQUEyRSxTQUFTLEtBQUssRUFBRSxrQ0FBa0MsdUJBQXVCLHVDQUF1QyxFQUFFLE9BQU8sdUJBQXVCLHdDQUF3QyxFQUFFLDJDQUEyQyx1QkFBdUIsYUFBYSxjQUFjLGdEQUFnRCxZQUFZLElBQUksb0NBQW9DLDBDQUEwQyx5QkFBeUIsZ0NBQWdDLHdCQUF3QiwrQ0FBK0MsOEJBQThCLHFCQUFxQixTQUFTLEVBQUUsV0FBVyxjQUFjLFNBQVMsZ0NBQWdDLGtDQUFrQyxVQUFVLDRDQUE0Qyx3Q0FBd0MsR0FBRyx1QkFBdUIsYUFBYSwwQkFBMEIsOEZBQThGLElBQUksa0NBQWtDLFlBQVksSUFBSSxLQUFLLFdBQVcseURBQXlELGtCQUFrQixrREFBa0QsY0FBYyxtQkFBbUIsNEJBQTRCLDZIQUE2SCxnQkFBZ0Isa0JBQWtCLDRCQUE0QixjQUFjLGVBQWUsY0FBYywyQkFBMkIsY0FBYyxnQkFBZ0IsRUFBRSw4QkFBOEIsUUFBUSxXQUFXLGVBQWUsUUFBUSxXQUFXLFdBQVcsa0JBQWtCLFlBQVksY0FBYyxlQUFlLElBQUksRUFBRSxXQUFXLFNBQVMsV0FBVyxRQUFRLFdBQVcsVUFBVSxVQUFVLGFBQWEsUUFBUSxXQUFXLDRCQUE0QixTQUFTLGdCQUFnQixXQUFXLDBEQUEwRCxjQUFjLFVBQVUsUUFBUSxrQkFBa0IsaUZBQWlGLGdDQUFnQyxJQUFJLEtBQUssZ0JBQWdCLHdDQUF3QywwQkFBMEIsS0FBSyxTQUFTLE1BQU0sRUFBRSxVQUFVLHFCQUFxQixLQUFLLGlCQUFpQixJQUFJLCtDQUErQyxTQUFTLGdCQUFnQixtQkFBbUIsWUFBWSxHQUFHLFdBQVcsMkJBQTJCLG9DQUFvQyxXQUFXLGFBQWEsWUFBWSxNQUFNLGNBQWMsU0FBUyxTQUFTLDZCQUE2Qiw0QkFBNEIsc0JBQXNCLGtCQUFrQixzQkFBc0IsNEJBQTRCLHNCQUFzQix3REFBd0QsRUFBRSxrREFBa0QsdUJBQXVCLGFBQWEsd0JBQXdCLFlBQVksaUNBQWlDLEtBQUssb0NBQW9DLGNBQWMsaUNBQWlDLEtBQUssb0NBQW9DLGNBQWMsMEJBQTBCLFFBQVEsaUJBQWlCLGFBQWEsaUJBQWlCLG1CQUFtQiw4QkFBOEIsaUJBQWlCLGFBQWEsaUJBQWlCLG1CQUFtQixrQkFBa0IsOEJBQThCLGdCQUFnQixZQUFZLGlDQUFpQyxLQUFLLHVCQUF1QixvSEFBb0gsMkJBQTJCLGNBQWMsZ0RBQWdELGVBQWUsK0JBQStCLEVBQUUseUJBQXlCLHVCQUF1QixhQUFhLHNCQUFzQiw0Q0FBNEMsSUFBSSxLQUFLLDZCQUE2QiwyREFBMkQscUJBQXFCLGNBQWMsdUhBQXVILEVBQUUsa0NBQWtDLElBQUksRUFBRSxzQkFBc0IsSUFBSSxFQUFFLFdBQVcsaUJBQWlCLGlWQUFpVixtQ0FBbUMscUJBQXFCLHVIQUF1SCxrQkFBa0Isa0RBQWtELGdCQUFnQixhQUFhLGdCQUFnQixlQUFlLEVBQUUsRUFBRSxnQkFBZ0IsZ0RBQWdELGVBQWUsZ0JBQWdCLDRDQUE0QyxLQUFLLDJCQUEyQixTQUFTLEtBQUssMkJBQTJCLE1BQU0sMkJBQTJCLFVBQVUsU0FBUyxvQkFBb0IsaURBQWlELG9CQUFvQixtREFBbUQsK0JBQStCLGtDQUFrQyxnQkFBZ0IsY0FBYyw4QkFBOEIsOENBQThDLFdBQVcscUJBQXFCLDJCQUEyQiw2REFBNkQseUJBQXlCLGVBQWUscUJBQXFCLGVBQWUsV0FBVyxlQUFlLDJCQUEyQixLQUFLLDhCQUE4QixzQ0FBc0MseUJBQXlCLDZCQUE2QixRQUFRLGlCQUFpQiw4QkFBOEIseUNBQXlDLGVBQWUsK0JBQStCLFVBQVUsRUFBRSw4R0FBOEcsdUJBQXVCLGFBQWEsZ0RBQWdELGdCQUFnQixnQ0FBZ0MscUJBQXFCLG9CQUFvQixlQUFlLG1CQUFtQiw0Q0FBNEMsSUFBSSx1QkFBdUIsU0FBUyx3QkFBd0Isa0VBQWtFLFdBQVcsU0FBUyxrQkFBa0IsdUJBQXVCLGlCQUFpQiw0QkFBNEIsc0ZBQXNGLE9BQU8sdUJBQXVCLGtDQUFrQyw2REFBNkQsV0FBVyxTQUFTLGtCQUFrQixxRUFBcUUsU0FBUyxrQ0FBa0MsNkRBQTZELFdBQVcsU0FBUyxrQkFBa0IscUVBQXFFLFVBQVUsRUFBRSwwQ0FBMEMsdUJBQXVCLFlBQVksYUFBYSxPQUFPLDZLQUE2SyxFQUFFLDhNQUE4TSxjQUFjLHFCQUFxQiwwQ0FBMEMsUUFBUSxJQUFJLHFDQUFxQywrQkFBK0IsZ0NBQWdDLGdCQUFnQixLQUFLLHFIQUFxSCxlQUFlLHVDQUF1QyxzTkFBc04sK0NBQStDLHFDQUFxQyxNQUFNLDhDQUE4QyxNQUFNLGlDQUFpQyxNQUFNLDZEQUE2RCxNQUFNLDZGQUE2RixNQUFNLHVFQUF1RSxNQUFNLCtFQUErRSxNQUFNLDJDQUEyQyxNQUFNLCtEQUErRCxNQUFNLGlFQUFpRSxNQUFNLGlIQUFpSCxNQUFNLDZCQUE2QixNQUFNLGlFQUFpRSxNQUFNLDRDQUE0QyxNQUFNLDBEQUEwRCx3UUFBd1EsU0FBUyxhQUFhLG9CQUFvQixtQkFBbUIsS0FBSyxFQUFFLEVBQUUsMENBQTBDLGdEQUFnRCxLQUFLLDhGQUE4RixTQUFTLEtBQUsscUJBQXFCLGtHQUFrRyxpQkFBaUIsa0NBQWtDLGlEQUFpRCxLQUFLLDJHQUEyRyxhQUFhLE9BQU8sVUFBVSxzR0FBc0csUUFBUSxnSEFBZ0gsRUFBRSwyQkFBMkIsY0FBYyxlQUFlLGdCQUFnQix1Q0FBdUMsMEJBQTBCLG1IQUFtSCxHQUFHLEdBQUcsdUJBQXVCLGFBQWEsdUJBQXVCLDBCQUEwQiw0REFBNEQsbUVBQW1FLDhDQUE4QyxTQUFTLE1BQU0scUVBQXFFLHFJQUFxSSw4QkFBOEIsR0FBRyxpQkFBaUIsMEJBQTBCLGtCQUFrQixhQUFhLGlCQUFpQixXQUFXLEtBQUssb0JBQW9CLHlFQUF5RSxJQUFJLFFBQVEsV0FBVyxrQ0FBa0MsUUFBUSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsdUJBQXVCLGFBQWEsc0JBQXNCLGlIQUFpSCxJQUFJLGtEQUFrRCxvQkFBb0IsY0FBYyxnQkFBZ0IsNkJBQTZCLFdBQVcsRUFBRSxnQkFBZ0IsV0FBVyxrQkFBa0IsZUFBZSxXQUFXLEtBQUssV0FBVyxXQUFXLDZDQUE2QyxNQUFNLDREQUE0RCxPQUFPLEtBQUssZ0JBQWdCLG1DQUFtQyxLQUFLLEtBQUssV0FBVyxzRUFBc0UsV0FBVyxPQUFPLFVBQVUsMkJBQTJCLFdBQVcsZ0JBQWdCLGNBQWMsbUJBQW1CLFVBQVUsVUFBVSxZQUFZLElBQUksaUJBQWlCLFlBQVksV0FBVyxLQUFLLFdBQVcsaUJBQWlCLHFCQUFxQixXQUFXLFdBQVcsWUFBWSxXQUFXLGdDQUFnQyxRQUFRLE9BQU8sK0JBQStCLEdBQUcsdUJBQXVCLGFBQWEsd0JBQXdCLHlCQUF5Qix1QkFBdUIsd0NBQXdDLDhEQUE4RCxJQUFJLHlCQUF5QixPQUFPLHFCQUFxQixNQUFNLGdEQUFnRCx5QkFBeUIsZ0NBQWdDLHFDQUFxQyxnQ0FBZ0Msb0ZBQW9GLG1CQUFtQiwwQ0FBMEMsc0JBQXNCLElBQUksZ0NBQWdDLFlBQVksT0FBTyxnQ0FBZ0MsWUFBWSxPQUFPLGdDQUFnQyxxRkFBcUYsR0FBRyxpQkFBaUIsT0FBTyw4QkFBOEIsa0NBQWtDLGlDQUFpQyxPQUFPLEdBQUcsY0FBYyxrQ0FBa0MsOEJBQThCLEdBQUcsWUFBWSxZQUFZLEtBQUssNEJBQTRCLHNCQUFzQixHQUFHLHdCQUF3QixrREFBa0QsTUFBTSxzQ0FBc0MsVUFBVSxhQUFhLDBCQUEwQiw0RUFBNEUsSUFBSSxrQ0FBa0MsWUFBWSxPQUFPLGdCQUFnQixJQUFJLEtBQUssYUFBYSxpQ0FBaUMsUUFBUSw0SUFBNEksWUFBWSxJQUFJLHFDQUFxQyxpQkFBaUIsSUFBSSw0Q0FBNEMsS0FBSyxTQUFTLDZDQUE2QyxzQ0FBc0MseUVBQXlFLCtCQUErQixTQUFTLEdBQUcsVUFBVSwwQkFBMEIsR0FBRyxpQkFBaUIsU0FBUyxrQkFBa0IscUZBQXFGLEdBQUcsYUFBYSxlQUFlLDJCQUEyQiw0QkFBNEIsWUFBWSxNQUFNLFlBQVksS0FBSywyQkFBMkIsZ0JBQWdCLHlDQUF5QyxZQUFZLE1BQU0sY0FBYyxFQUFFLDRCQUE0QixzQkFBc0IsaUNBQWlDLFFBQVEsOEJBQThCLGNBQWMsR0FBRyxZQUFZLFdBQVcsMEJBQTBCLGdEQUFnRCxtQkFBbUIsZUFBZSxzRkFBc0YsU0FBUyxFQUFFLCtFQUErRSx1QkFBdUIsYUFBYSxzQ0FBc0MsU0FBUyxFQUFFLGlCQUFpQixxQkFBcUIsNkJBQTZCLHFEQUFxRCw0QkFBNEIsSUFBSSxpQ0FBaUMsMkRBQTJELE9BQU8sU0FBUyxTQUFTLFFBQVEsSUFBSSx5QkFBeUIsUUFBUSxjQUFjLFNBQVMsTUFBTSw2RUFBNkUseUNBQXlDLGdCQUFnQixPQUFPLG1DQUFtQyxpQkFBaUIsZ0ZBQWdGLFFBQVEsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLHFCQUFxQix5RUFBeUUsK0NBQStDLHNCQUFzQix1SkFBdUoseUJBQXlCLHlGQUF5Rix5QkFBeUIsNEJBQTRCLDhEQUE4RCx1Q0FBdUMsd0NBQXdDLGtGQUFrRixzQkFBc0IsNkpBQTZKLHVEQUF1RCxtRkFBbUYsMEJBQTBCLCtCQUErQixLQUFLLFlBQVksSUFBSSx3QkFBd0IseUJBQXlCLDhGQUE4RixPQUFPLGlDQUFpQyxFQUFFLHFCQUFxQixHQUFHLHVCQUF1QixhQUFhLHlHQUF5RyxzQkFBc0IsZ0VBQWdFLGtFQUFrRSwySEFBMkgsNkNBQTZDLElBQUksZ0NBQWdDLFdBQVcsaUhBQWlILFVBQVUsRUFBRSw0RkFBNEYsdUJBQXVCLGFBQWEsc0JBQXNCLG9FQUFvRSxJQUFJLEtBQUssa0JBQWtCLFVBQVUsc0JBQXNCLE1BQU0saUJBQWlCLDhGQUE4RixFQUFFLHNCQUFzQixjQUFjLFdBQVcsdUVBQXVFLE1BQU0sb0JBQW9CLGdFQUFnRSxNQUFNLDBFQUEwRSxNQUFNLG1EQUFtRCxNQUFNLDJCQUEyQixNQUFNLHdCQUF3QixNQUFNLHdCQUF3QixNQUFNLHFCQUFxQixxR0FBcUcsVUFBVSxtQ0FBbUMsb0JBQW9CLHdCQUF3Qix3QkFBd0IseURBQXlELEVBQUUsOEJBQThCLHVCQUF1QixhQUFhLHFLQUFxSyx3QkFBd0IsaUVBQWlFLFFBQVEsRUFBRSxRQUFRLGdHQUFnRyw2SEFBNkgscUpBQXFKLGtEQUFrRCxvQkFBb0Isd0RBQXdELCtEQUErRCxvQ0FBb0MsOEJBQThCLDhCQUE4QixvQ0FBb0MsSUFBSSxvQkFBb0IseUJBQXlCLEtBQUssV0FBVyw4QkFBOEIsd0NBQXdDLHNFQUFzRSxHQUFHLEVBQUUsaUdBQWlHLHVCQUF1QixhQUFhLGFBQWEsNEJBQTRCLFlBQVksV0FBVyxZQUFZLEtBQUssbUNBQW1DLEVBQUUsV0FBVyx1REFBdUQsMkVBQTJFLFdBQVcsdUJBQXVCLElBQUksS0FBSyxjQUFjLCtDQUErQyxPQUFPLGdCQUFnQixNQUFNLHVGQUF1RixpRUFBaUUsR0FBRyxLQUFLLCtEQUErRCxXQUFXLG1FQUFtRSw4Q0FBOEMsV0FBVyxLQUFLLHdCQUF3QixXQUFXLGlDQUFpQyxrQkFBa0IsUUFBUSxnQkFBZ0IsVUFBVSxnREFBZ0Qsc0JBQXNCLGtCQUFrQiwyQkFBMkIsRUFBRSxrQ0FBa0MsdUJBQXVCLGFBQWEsK0RBQStELGdCQUFnQixVQUFVLGdDQUFnQywwQ0FBMEMsa0JBQWtCLE9BQU8sWUFBWSxvQ0FBb0MsbUNBQW1DLDhDQUE4QyxXQUFXLG9CQUFvQixnQ0FBZ0MsK0JBQStCLDBCQUEwQixzQkFBc0IsMkJBQTJCLDZCQUE2QiwwQkFBMEIsc0JBQXNCLDJCQUEyQiw2QkFBNkIsMEJBQTBCLHNCQUFzQiwyQkFBMkIsNkJBQTZCLDJCQUEyQixnRUFBZ0UsMkJBQTJCLHFEQUFxRCwyQkFBMkIsZ0dBQWdHLDJCQUEyQiw2RUFBNkUsU0FBUyxLQUFLLGtFQUFrRSw2Q0FBNkMsK0dBQStHLG1DQUFtQyxtRUFBbUUsT0FBTyxzRUFBc0UscUZBQXFGLFVBQVUsa0JBQWtCLGtGQUFrRixrREFBa0QsS0FBSyxtQ0FBbUMseUNBQXlDLE9BQU8seUJBQXlCLHdEQUF3RCxVQUFVLGVBQWUsbUZBQW1GLElBQUksc1NBQXNTLGtCQUFrQixpQ0FBaUMsd0NBQXdDLGNBQWMsS0FBSyxVQUFVLG1DQUFtQywyQkFBMkIsTUFBTSxtQkFBbUIsTUFBTSxtQkFBbUIsS0FBSyxPQUFPLGFBQWEsa0JBQWtCLGlDQUFpQyx3Q0FBd0MsMEJBQTBCLEtBQUssVUFBVSwyQkFBMkIsTUFBTSxtQkFBbUIsTUFBTSxtQkFBbUIsS0FBSyxPQUFPLGFBQWEsb0JBQW9CLHVFQUF1RSxpS0FBaUssb0JBQW9CLHdGQUF3RixnQkFBZ0IsZ0JBQWdCLG1CQUFtQixrQ0FBa0MsZ0JBQWdCLGdCQUFnQixtQkFBbUIsa0NBQWtDLGNBQWMsNEJBQTRCLGdCQUFnQixnQkFBZ0IsbUJBQW1CLGtDQUFrQyxnQkFBZ0IsZ0JBQWdCLG1CQUFtQixrSEFBa0gsZ0JBQWdCLGdCQUFnQixtQkFBbUIsa0NBQWtDLGdCQUFnQixpQ0FBaUMsNEJBQTRCLGNBQWMsbUJBQW1CLDhCQUE4QixjQUFjLHlCQUF5QixlQUFlLDBCQUEwQixLQUFLLDBCQUEwQixHQUFHLGNBQWMseUJBQXlCLGVBQWUseUJBQXlCLEtBQUssMEJBQTBCLEtBQUssMEJBQTBCLEdBQUcsY0FBYyx5QkFBeUIsZUFBZSx5QkFBeUIsS0FBSywwQkFBMEIsR0FBRyxrQkFBa0IsZUFBZSxvQ0FBb0MsK0JBQStCLElBQUksOEJBQThCLFNBQVMsZ0JBQWdCLE9BQU8sb0RBQW9ELElBQUksV0FBVyxZQUFZLGFBQWEsU0FBUyxhQUFhLGtCQUFrQixnQ0FBZ0Msb0JBQW9CLHFCQUFxQixvQkFBb0IsZ0JBQWdCLDZCQUE2QiwyQkFBMkIsc0JBQXNCLG9CQUFvQixxQkFBcUIsZUFBZSwwQkFBMEIsbUJBQW1CLG9DQUFvQyx5QkFBeUIseUJBQXlCLGlNQUFpTSxzQkFBc0IseURBQXlELGtCQUFrQixpQ0FBaUMsT0FBTyxpQ0FBaUMsd0JBQXdCLHdFQUF3RSwrRkFBK0Ysa0JBQWtCLGlDQUFpQyxPQUFPLGlDQUFpQyx3QkFBd0Isd0VBQXdFLCtGQUErRixtQkFBbUIsb0NBQW9DLHlCQUF5Qix3QkFBd0Isb0JBQW9CLDJCQUEyQiwrRUFBK0Usd01BQXdNLGtCQUFrQixvQ0FBb0MsMEJBQTBCLHlCQUF5QixrQkFBa0IsT0FBTyxrREFBa0Qsd0JBQXdCLGlKQUFpSiw0QkFBNEIsT0FBTywrRkFBK0Ysa0NBQWtDLHlOQUF5TixtQkFBbUIsc0ZBQXNGLHNCQUFzQiw4RkFBOEYsTUFBTSxXQUFXLDZCQUE2QiwrRkFBK0Ysc0JBQXNCLFVBQVUsa0JBQWtCLGlDQUFpQyxtZkFBbWYsa0JBQWtCLDBCQUEwQixrQ0FBa0Msb0RBQW9ELHVFQUF1RSxvQkFBb0IsNENBQTRDLHFCQUFxQiw0Q0FBNEMsbUJBQW1CLDRDQUE0Qyx1QkFBdUIsNENBQTRDLHFCQUFxQiw0Q0FBNEMsc0JBQXNCLDRDQUE0QyxpQkFBaUIsNENBQTRDLGlDQUFpQyxxREFBcUQsc0JBQXNCLDJDQUEyQyx1QkFBdUIsMkNBQTJDLDBCQUEwQiwyQ0FBMkMsNEJBQTRCLDJDQUEyQyxrQkFBa0IsMkNBQTJDLG1CQUFtQiw0Q0FBNEMsMkJBQTJCLHVCQUF1QixTQUFTLGdFQUFnRSxJQUFJLGNBQWMsd0JBQXdCLHdEQUF3RCxxQkFBcUIsb0JBQW9CLGtCQUFrQixFQUFFLHVCQUF1QixnQkFBZ0IsMENBQTBDLFVBQVUsd0VBQXdFLEVBQUUsNkJBQTZCLGtCQUFrQixvR0FBb0csOEJBQThCLDZCQUE2QiwyQkFBMkIsUUFBUSxVQUFVLHdCQUF3Qiw2RkFBNkYsc0NBQXNDLE9BQU8sZ0JBQWdCLG1CQUFtQixzQ0FBc0MsTUFBTSxxQkFBcUIsTUFBTSxzQkFBc0IsU0FBUyxnQ0FBZ0MsdUJBQXVCLFVBQVUsMkNBQTJDLFlBQVksV0FBVyxpREFBaUQseUJBQXlCLGVBQWUsMEVBQTBFLGVBQWUsbXVGQUFtdUYsMEJBQTBCLFNBQVMsZ0RBQWdELFNBQVMsSUFBSSxjQUFjLHFEQUFxRCxnQkFBZ0IsYUFBYSxnRUFBZ0UsaUJBQWlCLGtCQUFrQiw2Q0FBNkMsSUFBSSxpR0FBaUcsY0FBYyxtQkFBbUIsY0FBYyxzQkFBc0IsY0FBYyw4QkFBOEIsY0FBYyw2QkFBNkIsY0FBYywrQ0FBK0MsY0FBYyxnQkFBZ0Isb01BQW9NLG1NQUFtTSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsMEJBQTBCLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSwwQkFBMEIsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSwwQkFBMEIsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsY0FBYywyQkFBMkIsZ0VBQWdFLE9BQU8sR0FBRyx1QkFBdUIsYUFBYSw4RkFBOEYsYUFBYSw4QkFBOEIsSUFBSSxtQkFBbUIsU0FBUyxrQkFBa0IsMEJBQTBCLGNBQWMsYUFBYSxzQ0FBc0MsMEJBQTBCLGtCQUFrQixvQkFBb0IsR0FBRyx1QkFBdUIsYUFBYSxzQkFBc0IsWUFBWSxTQUFTLGdCQUFnQixpREFBaUQsc0JBQXNCLGdCQUFnQiwwR0FBMEcsa0NBQWtDLHVDQUF1QyxvQ0FBb0MsOENBQThDLDJCQUEyQiwwQkFBMEIsTUFBTSxpQ0FBaUMsOENBQThDLHNDQUFzQyx1Q0FBdUMscUVBQXFFLHFFQUFxRSxrQkFBa0IsdUJBQXVCLHVCQUF1QixxQkFBcUIsb0JBQW9CLFVBQVUsRUFBRSxpQkFBaUIsdUJBQXVCLE1BQU0sbUJBQW1CLGFBQWEsa0JBQWtCLFNBQVMsZUFBZSxrQ0FBa0Msc0VBQXNFLHFCQUFxQiwyREFBMkQsZUFBZSxhQUFhLGNBQWMsNkZBQTZGLGNBQWMsZUFBZSxpREFBaUQsTUFBTSw2QkFBNkIsTUFBTSwyQ0FBMkMsT0FBTyxrREFBa0Qsb0NBQW9DLHdCQUF3QixNQUFNLHVHQUF1Ryw0QkFBNEIsbUJBQW1CLFNBQVMsaUJBQWlCLDJCQUEyQixNQUFNLDRCQUE0QixnQkFBZ0IsMkNBQTJDLHVCQUF1Qix5QkFBeUIsdUNBQXVDLFVBQVUsNENBQTRDLEVBQUUsb0RBQW9ELGdCQUFnQixvQkFBb0IsZ0JBQWdCLGtCQUFrQixxQ0FBcUMsSUFBSSw4QkFBOEIsWUFBWSxjQUFjLG9CQUFvQixjQUFjLDRCQUE0QixJQUFJLGNBQWMsMENBQTBDLGNBQWMsZUFBZSxXQUFXLHNCQUFzQixTQUFTLGNBQWMsZ0JBQWdCLHFCQUFxQixlQUFlLFVBQVUsZ0NBQWdDLHVDQUF1QywrQkFBK0IsTUFBTSx3Q0FBd0MsTUFBTSw2QkFBNkIsTUFBTSxzQ0FBc0MsTUFBTSwwQkFBMEIsTUFBTSxtQ0FBbUMsTUFBTSxvQkFBb0IsT0FBTyxzQkFBc0IsSUFBSSxvQkFBb0IsUUFBUSxLQUFLLEtBQUssV0FBVyxnQkFBZ0IsZ0JBQWdCLFdBQVcsb0VBQW9FLGNBQWMsYUFBYSwrQkFBK0IseUJBQXlCLHlEQUF5RCx3QkFBd0Isc0JBQXNCLGdDQUFnQywyQ0FBMkMsc0JBQXNCLG1CQUFtQix1QkFBdUIsa0JBQWtCLHVEQUF1RCxrQkFBa0IsMEJBQTBCLG9DQUFvQywyQkFBMkIsbUVBQW1FLGdCQUFnQiwwQkFBMEIsb0NBQW9DLDJCQUEyQixxQ0FBcUMsc0NBQXNDLHlCQUF5QixLQUFLLGtCQUFrQixVQUFVLHdDQUF3QyxnQkFBZ0IsY0FBYyxlQUFlLHdCQUF3QixRQUFRLEVBQUUsY0FBYyxhQUFhLGNBQWMsYUFBYSxxQkFBcUIsbUJBQW1CLGlEQUFpRCxNQUFNLDJCQUEyQixNQUFNLDhDQUE4QyxNQUFNLHNDQUFzQyxrQ0FBa0MsZUFBZSxhQUFhLDBDQUEwQyxJQUFJLFFBQVEsMENBQTBDLElBQUksV0FBVyxPQUFPLG9DQUFvQyxnQkFBZ0IsUUFBUSxXQUFXLGNBQWMsc0JBQXNCLHNCQUFzQixtQ0FBbUMsRUFBRSxZQUFZLGNBQWMsbUJBQW1CLHVDQUF1QyxNQUFNLG1DQUFtQyxtQkFBbUIsTUFBTSx3QkFBd0Isa0JBQWtCLCtCQUErQixlQUFlLGlEQUFpRCxNQUFNLHdCQUF3QixNQUFNLHNDQUFzQyx3QkFBd0IsU0FBUyxlQUFlLG9CQUFvQixVQUFVLGlDQUFpQyxzQkFBc0IsZ0NBQWdDLHVCQUF1QixFQUFFLEVBQUUsR0FBRyx3QkFBd0IsV0FBVyxHQUFHLDJDQUEyQyxXQUFXLHlCQUF5QixzQkFBc0Isc0JBQXNCLGdDQUFnQyxFQUFFLEVBQUUsb0RBQW9ELElBQUksaURBQWlELFNBQVMsR0FBRyxvQkFBb0IsdUJBQXVCLElBQUksRUFBRSxjQUFjLGlCQUFpQixVQUFVLGlDQUFpQyxxQ0FBcUMsK0RBQStELGNBQWMsRUFBRSxRQUFRLG9CQUFvQixvQ0FBb0Msa0NBQWtDLG9DQUFvQyx1Q0FBdUMsUUFBUSxvQkFBb0IsU0FBUyxFQUFFLGdCQUFnQixzQkFBc0IsWUFBWSxXQUFXLHFCQUFxQixFQUFFLGdCQUFnQixzQkFBc0IsT0FBTyxFQUFFLE9BQU8sb0VBQW9FLHNCQUFzQixPQUFPLElBQUksdUNBQXVDLCtEQUErRCxPQUFPLG1DQUFtQyxrQ0FBa0MsSUFBSSxrQkFBa0IsSUFBSSxLQUFLLG9CQUFvQixnRkFBZ0YsU0FBUywwQkFBMEIsZ0VBQWdFLG9EQUFvRCxtRUFBbUUsY0FBYyx3REFBd0QsY0FBYyxlQUFlLGlEQUFpRCxNQUFNLDZCQUE2QixNQUFNLDJDQUEyQyxvQ0FBb0Msb0dBQW9HLElBQUksZ0hBQWdILHlDQUF5Qyw0QkFBNEIsb0JBQW9CLDRCQUE0QixHQUFHLHlDQUF5QyxrQ0FBa0Msc0VBQXNFLHFCQUFxQixXQUFXLHNEQUFzRCxvQ0FBb0MsdUNBQXVDLFNBQVMsRUFBRSxzRUFBc0UsRUFBRSxHQUFHLHVCQUF1QixhQUFhLHNCQUFzQixnQkFBZ0IscUJBQXFCLHdDQUF3QyxJQUFJLEtBQUssc0NBQXNDLFdBQVcseUJBQXlCLGtDQUFrQyxVQUFVLG1FQUFtRSxFQUFFLDBEQUEwRCx1QkFBdUIsYUFBYSxzQkFBc0IsY0FBYyx3RkFBd0YsaUdBQWlHLDhDQUE4QyxrRUFBa0UsMEJBQTBCLDhCQUE4Qiw2REFBNkQsd0lBQXdJLGtCQUFrQiw0REFBNEQsY0FBYyxrQ0FBa0MsY0FBYyxpRUFBaUUscURBQXFELG9CQUFvQixJQUFJLDhCQUE4QixRQUFRLElBQUksbUJBQW1CLGdCQUFnQiw0QkFBNEIsK2JBQStiLFlBQVksS0FBSyw4QkFBOEIscUJBQXFCLGtCQUFrQixrQ0FBa0MsbUhBQW1ILGlDQUFpQyw0QkFBNEIsaUdBQWlHLDRCQUE0QixtR0FBbUcsMkRBQTJELElBQUksOEJBQThCLHVCQUF1QixRQUFRLElBQUksd0NBQXdDLG1CQUFtQixRQUFRLElBQUksWUFBWSwwQkFBMEIsZ0JBQWdCLGdQQUFnUCxRQUFRLElBQUksS0FBSywyQkFBMkIsb0RBQW9ELHdGQUF3RixvQ0FBb0MsUUFBUSxJQUFJLHlCQUF5QixRQUFRLElBQUksS0FBSyxJQUFJLFlBQVksSUFBSSxxQkFBcUIsV0FBVyxRQUFRLDJCQUEyQixxQkFBcUIsMEJBQTBCLE1BQU0sWUFBWSxLQUFLLGNBQWMsU0FBUyxVQUFVLGNBQWMsMkJBQTJCLDZCQUE2QixxQkFBcUIsMEJBQTBCLCtCQUErQix5RUFBeUUsSUFBSSw0Q0FBNEMsV0FBVyxRQUFRLElBQUksOEJBQThCLGdFQUFnRSx5QkFBeUIsMENBQTBDLDZGQUE2RixlQUFlLDhHQUE4RywwQkFBMEIsdUNBQXVDLG9EQUFvRCwrQkFBK0IsbUNBQW1DLCtCQUErQixRQUFRLDhDQUE4QyxjQUFjLGdEQUFnRCw2QkFBNkIsTUFBTSxnRUFBZ0UscUVBQXFFLEtBQUssZUFBZSxlQUFlLGlJQUFpSSxzSEFBc0gscURBQXFELDZDQUE2QyxLQUFLLG9FQUFvRSxvQ0FBb0MsNENBQTRDLGdEQUFnRCxPQUFPLDZFQUE2RSxzQ0FBc0Msb0JBQW9CLCtHQUErRyxvQkFBb0IsOEZBQThGLHFCQUFxQixtR0FBbUcsNkJBQTZCLG9DQUFvQyw0QkFBNEIsb0VBQW9FLHlEQUF5RCxjQUFjLGVBQWUsbURBQW1ELGNBQWMsZUFBZSxzRkFBc0Ysd0RBQXdELDZIQUE2SCw4TEFBOEwsYUFBYSx3RUFBd0UsMEdBQTBHLEVBQUUsOEhBQThILHVCQUF1QixhQUFhLDBCQUEwQiw0RUFBNEUsNEJBQTRCLGFBQWEsMEJBQTBCLEdBQUcsdUJBQXVCLGFBQWEsMEJBQTBCLGdDQUFnQyw4QkFBOEIsZUFBZSxHQUFHLHVCQUF1QixlQUFlLGFBQWEsa0NBQWtDLDJDQUEyQyxtTEFBbUwsRUFBRSxrRUFBa0UsOERBQThELHdCQUF3QixjQUFjLE1BQU0seUNBQXlDLGNBQWMsY0FBYyxnQkFBZ0IsdUJBQXVCLDZDQUE2QyxjQUFjLGdDQUFnQyxjQUFjLG1DQUFtQyxjQUFjLG1DQUFtQyxjQUFjLCtCQUErQixjQUFjLGtDQUFrQyxjQUFjLGtDQUFrQyxjQUFjLG9DQUFvQyxjQUFjLG9DQUFvQyxjQUFjLDhDQUE4QyxjQUFjLDhCQUE4QixjQUFjLGdCQUFnQix1QkFBdUIsbUNBQW1DLG1CQUFtQiw2Q0FBNkMsS0FBSyxzRkFBc0YsMkNBQTJDLGNBQWMsNktBQTZLLFlBQVksOENBQThDLDRCQUE0Qix3QkFBd0IsNkNBQTZDLFVBQVUsd0JBQXdCLHlCQUF5Qix5QkFBeUIsdUJBQXVCLHdCQUF3Qix3QkFBd0Isc0NBQXNDLHVDQUF1QyxnQ0FBZ0MseUJBQXlCLHNDQUFzQyxvQkFBb0IsWUFBWSw0UUFBNFEsWUFBWSxLQUFLLHdOQUF3TixnSEFBZ0gscUJBQXFCLEVBQUUsbUNBQW1DLHVCQUF1QixhQUFhLGNBQWMsZ0RBQWdELFlBQVksSUFBSSxvQ0FBb0MsWUFBWSxrQkFBa0Isa0NBQWtDLGVBQWUsMEJBQTBCLHVCQUF1Qix3QkFBd0IsK0NBQStDLG9CQUFvQix5QkFBeUIsU0FBUyxRQUFRLEtBQUssU0FBUyxFQUFFLFdBQVcsV0FBVyxTQUFTLHNCQUFzQixrQ0FBa0MsVUFBVSw0Q0FBNEMsd0NBQXdDLEdBQUcsdUJBQXVCLGFBQWEsMEJBQTBCLG9EQUFvRCx5Q0FBeUMsSUFBSSx3QkFBd0IsVUFBVSxJQUFJLFNBQVMsU0FBUyxvQkFBb0IsZ0NBQWdDLHlDQUF5QyxJQUFJLDZCQUE2QixVQUFVLElBQUksU0FBUyxTQUFTLG9CQUFvQixNQUFNLEdBQUcsdUJBQXVCLGVBQWUsc0JBQXNCLCtHQUErRyxHQUFHLHVCQUF1QixhQUFhLDBCQUEwQixpREFBaUQsdUJBQXVCLElBQUksS0FBSyxXQUFXLDZFQUE2RSxNQUFNLG9CQUFvQixLQUFLLHNCQUFzQixpRUFBaUUsUUFBUSxVQUFVLEdBQUcsdUJBQXVCLGFBQWEsd0JBQXdCLG1DQUFtQyxFQUFFLHdDQUF3QyxxQ0FBcUMsbUhBQW1ILEVBQUUsa0JBQWtCLHVCQUF1Qiw0QkFBNEIsbUJBQW1CLGlFQUFpRSxtY0FBbWMsd0ZBQXdGLFNBQVMsc0dBQXNHLDZGQUE2RixjQUFjLFFBQVEsV0FBVyxXQUFXLGtJQUFrSSxjQUFjLFFBQVEsV0FBVyx3Q0FBd0MsaUZBQWlGLGdHQUFnRyxhQUFhLGFBQWEsV0FBVyw2QkFBNkIsNEJBQTRCLGFBQWEsMkJBQTJCLGdCQUFnQixnQkFBZ0Isc0JBQXNCLHNGQUFzRiw2RkFBNkYsd0JBQXdCLHNGQUFzRiw2RkFBNkYsaUJBQWlCLHdDQUF3Qyw0RkFBNEYsbUJBQW1CLHdDQUF3QywwREFBMEQsU0FBUyxRQUFRLElBQUksS0FBSyxnQkFBZ0IsMkJBQTJCLFdBQVcsS0FBSyx3Q0FBd0Msb0RBQW9ELGdCQUFnQiwwQkFBMEIsV0FBVyxnQkFBZ0IsNEVBQTRFLG1CQUFtQiwyQkFBMkIsdU1BQXVNLG9CQUFvQixxRkFBcUYsa0VBQWtFLEVBQUUsWUFBWSxNQUFNLCtEQUErRCxxQkFBcUIseUJBQXlCLHFGQUFxRix1Q0FBdUMsZUFBZSxTQUFTLGdCQUFnQixlQUFlLHFDQUFxQyxxQ0FBcUMsb0JBQW9CLCtCQUErQixxR0FBcUcsSUFBSSx1QkFBdUIsSUFBSSwwREFBMEQsUUFBUSxVQUFVLCtCQUErQixNQUFNLDhCQUE4QixNQUFNLCtCQUErQixNQUFNLDJFQUEyRSxRQUFRLFVBQVUsZ0NBQWdDLE1BQU0sK0JBQStCLE1BQU0sMENBQTBDLE1BQU0scUJBQXFCLE1BQU0sK0VBQStFLFVBQVUsbUlBQW1JLDhCQUE4QixFQUFFLG9EQUFvRCw2Q0FBNkMsMkNBQTJDLFdBQVcsS0FBSyx5Q0FBeUMsV0FBVyxLQUFLLHlDQUF5QyxXQUFXLHlCQUF5QixzQkFBc0IsT0FBTyxTQUFTLCtDQUErQyxhQUFhLG9DQUFvQyxjQUFjLEVBQUUscUJBQXFCLGtCQUFrQixJQUFJLG1CQUFtQixVQUFVLElBQUksbUJBQW1CLFVBQVUsb0ZBQW9GLHNCQUFzQixFQUFFLHdCQUF3QixFQUFFLG9IQUFvSCx1QkFBdUIsWUFBWSxhQUFhLCtDQUErQywwREFBMEQsU0FBUywrQkFBK0IsY0FBYyx1RUFBdUUsS0FBSyw4QkFBOEIsRUFBRSwwREFBMEQsTUFBTSxnQ0FBZ0MsNkhBQTZILHlJQUF5SSw4Q0FBOEMsNkVBQTZFLDBCQUEwQixpQkFBaUIsbUNBQW1DLGtCQUFrQix1QkFBdUIsK0JBQStCLDhCQUE4Qiw2QkFBNkIsa0JBQWtCLHVCQUF1QixFQUFFLFlBQVksb0JBQW9CLG1CQUFtQixrQkFBa0Isa0JBQWtCLEVBQUUsa0JBQWtCLGlCQUFpQixrQkFBa0Isa0JBQWtCLEVBQUUsK0JBQStCLDhCQUE4QixrQkFBa0Isa0JBQWtCLEVBQUUsR0FBRywwQkFBMEIsdUJBQXVCLG9CQUFvQixrQ0FBa0MsUUFBUSxzQkFBc0IsYUFBYSxrREFBa0QsRUFBRSxTQUFTLG9CQUFvQixXQUFXLGdDQUFnQyxFQUFFLFNBQVMsc0JBQXNCLGFBQWEsMkVBQTJFLEVBQUUsWUFBWSxvQkFBb0IsZUFBZSwySEFBMkgsR0FBRyxHQUFHLDRDQUE0QyxLQUFLLG9CQUFvQix3QkFBd0IsNkJBQTZCLE1BQU0sa0JBQWtCLHNCQUFzQiw2QkFBNkIsTUFBTSxvQkFBb0Isd0JBQXdCLDZCQUE2QixTQUFTLGtCQUFrQix5QkFBeUIsOEJBQThCLGtDQUFrQyxhQUFhLHVCQUF1Qiw0QkFBNEIseUJBQXlCLDJEQUEyRCxlQUFlLFNBQVMsV0FBVyxTQUFTLDJCQUEyQixnQkFBZ0IsWUFBWSw0QkFBNEIsUUFBUSxzQkFBc0Isb0RBQW9ELEVBQUUsU0FBUyxvQkFBb0Isa0NBQWtDLEVBQUUsU0FBUyxXQUFXLFlBQVksb0JBQW9CLG9CQUFvQiw0QkFBNEIsRUFBRSx1QkFBdUIsb0JBQW9CLCtEQUErRCxLQUFLLEdBQUcsRUFBRSx3SUFBd0ksd0RBQXdELEVBQUUsMkRBQTJELGNBQWMsa0RBQWtELGNBQWMsK0RBQStELGNBQWMsMERBQTBELFdBQVcseUJBQXlCLFNBQVMsR0FBRyxPQUFPLElBQUksY0FBYyxrREFBa0QsSUFBSSxTQUFTLFNBQVMsY0FBYyx5Q0FBeUMsYUFBYSx3SkFBd0osR0FBRyxHQUFHLHVCQUF1Qiw2QkFBNkIscUJBQXFCLFNBQVMsbUJBQW1CLDRHQUE0RyxtQkFBbUIsb0NBQW9DLEVBQUUsd0JBQXdCLHVCQUF1Qix3QkFBd0IsT0FBTyxXQUFXLGFBQWEsMENBQTBDLGtCQUFrQix1Q0FBdUMsYUFBYSxLQUFLLEdBQUcsdUJBQXVCLDZCQUE2QixxQkFBcUIsVUFBVSxPQUFPLGtCQUFrQixXQUFXLDJDQUEyQyxtQkFBbUIseUJBQXlCLGlCQUFpQixxQkFBcUIsb0JBQW9CLDRCQUE0QixFQUFFLHdCQUF3Qix1QkFBdUIsOEJBQThCLHNCQUFzQixxQkFBcUIsRUFBRSx5QkFBeUIsdUJBQXVCLHVEQUF1RCxjQUFjLGlFQUFpRSw4Q0FBOEMsa0dBQWtHLElBQUksOERBQThELHVCQUF1QixpQkFBaUIsaUJBQWlCLHNFQUFzRSx5RUFBeUUsd0JBQXdCLHVCQUF1QixpQkFBaUIsaUJBQWlCLHdRQUF3USxzREFBc0QsNkJBQTZCLHVCQUF1QixpQkFBaUIsaUJBQWlCLGdNQUFnTSxzREFBc0QsMEJBQTBCLHdCQUF3QixvQkFBb0Isc1BBQXNQLEtBQUssb0JBQW9CLG1CQUFtQixnQ0FBZ0MsdVBBQXVQLDZCQUE2Qiw4RUFBOEUsR0FBRyxtQkFBbUIsU0FBUyw4QkFBOEIsK0JBQStCLDZEQUE2RCxHQUFHLG1CQUFtQiw0QkFBNEIsOEJBQThCLGlDQUFpQywrQkFBK0IsMERBQTBELEdBQUcsbUJBQW1CLHVCQUF1Qiw4QkFBOEIsNkNBQTZDLGtDQUFrQyxpQ0FBaUMsK0JBQStCLGlCQUFpQixzQkFBc0Isb0NBQW9DLDRCQUE0QiwyRkFBMkYsbURBQW1ELGdDQUFnQyx5QkFBeUIsMEJBQTBCLDhCQUE4QiwyQkFBMkIseURBQXlELGdCQUFnQix5REFBeUQsR0FBRyxtQkFBbUIsdUJBQXVCLHlCQUF5QixtQ0FBbUMsc0JBQXNCLGdEQUFnRCxxREFBcUQsb0ZBQW9GLFVBQVUsa0NBQWtDLEtBQUssMkNBQTJDLDREQUE0RCxzQ0FBc0MsMERBQTBELHdDQUF3Qyx3REFBd0QsNENBQTRDLEtBQUssc0NBQXNDLFVBQVUsK0JBQStCLGtFQUFrRSxZQUFZLElBQUksS0FBSyxzQkFBc0IsS0FBSyxnRUFBZ0UseUVBQXlFLFVBQVUsb0NBQW9DLG9CQUFvQixzQ0FBc0MsUUFBUSxrQ0FBa0MsS0FBSywyQ0FBMkMsNERBQTRELHNDQUFzQywwREFBMEQsc0NBQXNDLHdEQUF3RCxHQUFHLHFCQUFxQixTQUFTLGtEQUFrRCw2Q0FBNkMsZ0ZBQWdGLDBCQUEwQix1QkFBdUIsUUFBUSxLQUFLLEtBQUssc0JBQXNCLGFBQWEsS0FBSyxZQUFZLDZHQUE2RyxtQkFBbUIsaUZBQWlGLG9DQUFvQyx3QkFBd0IsaUdBQWlHLDJCQUEyQixxQkFBcUIsK0lBQStJLFlBQVkscUhBQXFILGtCQUFrQixVQUFVLEVBQUUsaVBBQWlQLHNCQUFzQix1NEZBQXU0RixFQUFFLGtDQUFrQyx1QkFBdUIsd0NBQXdDLGNBQWMsaUVBQWlFLDhDQUE4QyxzSkFBc0osSUFBSSx1Z0JBQXVnQixzQkFBc0Isc0VBQXNFLGtEQUFrRCwwQkFBMEIsNkdBQTZHLDRCQUE0QiwwQkFBMEIsbUVBQW1FLDJCQUEyQiwyREFBMkQsb0ZBQW9GLHlCQUF5QixtQ0FBbUMsc0JBQXNCLGdEQUFnRCw0RkFBNEYsb0JBQW9CLHFGQUFxRix3REFBd0Qsd0NBQXdDLDRCQUE0Qix1QkFBdUIsRUFBRSxrQ0FBa0MsdUJBQXVCLHdDQUF3QyxjQUFjLGlFQUFpRSw4Q0FBOEMsMEpBQTBKLElBQUksMGdCQUEwZ0Isc0JBQXNCLDBFQUEwRSwwQkFBMEIsMEVBQTBFLHdCQUF3QiwyRUFBMkUsNEJBQTRCLDBCQUEwQixtRUFBbUUsMkJBQTJCLDJEQUEyRCxzQ0FBc0MsdUJBQXVCLFNBQVMsMkJBQTJCLDREQUE0RCx5QkFBeUIsNEJBQTRCLGtCQUFrQiwyQkFBMkIsZ0RBQWdELE9BQU8sK0NBQStDLHNCQUFzQixnREFBZ0QsZ0hBQWdILG9CQUFvQiw4Q0FBOEMsMEJBQTBCLDBCQUEwQix3Q0FBd0MscUNBQXFDLEVBQUUsT0FBTyw0QkFBNEIsd0JBQXdCLEVBQUUsa0NBQWtDLHVCQUF1Qix3Q0FBd0MsY0FBYyxpRUFBaUUsOENBQThDLHlKQUF5SixJQUFJLDZlQUE2ZSxzQkFBc0Isc0VBQXNFLGtEQUFrRCwwQkFBMEIsNkdBQTZHLDRCQUE0QiwwQkFBMEIsbUVBQW1FLDJCQUEyQiwyREFBMkQsb0ZBQW9GLHlCQUF5QixtQ0FBbUMsc0JBQXNCLGdEQUFnRCw0RkFBNEYsb0JBQW9CLHFGQUFxRix3REFBd0Qsd0NBQXdDLDRCQUE0QiwwQkFBMEIsRUFBRSxrQ0FBa0MsdUJBQXVCLHdDQUF3QyxjQUFjLGlFQUFpRSxnQkFBZ0IsMkJBQTJCLDhDQUE4QyxzSkFBc0osSUFBSSwyZ0JBQTJnQixzQkFBc0Isc0VBQXNFLGdDQUFnQyx1QkFBdUIsaUNBQWlDLDBCQUEwQiwrR0FBK0csNEJBQTRCLDBCQUEwQixtRUFBbUUsd0JBQXdCLDZIQUE2SCwyQkFBMkIsOE5BQThOLHlCQUF5QixpQ0FBaUMsMkJBQTJCLGdEQUFnRCxPQUFPLG1IQUFtSCxzQkFBc0IsZ0RBQWdELGlDQUFpQyxvRUFBb0UsUUFBUSxZQUFZLHdCQUF3Qiw2QkFBNkIsUUFBUSxJQUFJLDZCQUE2QixhQUFhLElBQUksNkJBQTZCLFNBQVMscUJBQXFCLDRFQUE0RSw2QkFBNkIscUJBQXFCLDBDQUEwQywrQ0FBK0Msb0JBQW9CLG1CQUFtQix3REFBd0QsK0JBQStCLEtBQUssaUNBQWlDLHVDQUF1QyxLQUFLLDJCQUEyQiw0QkFBNEIsdUJBQXVCLEVBQUUsa0NBQWtDLHVCQUF1Qix3Q0FBd0MsY0FBYyxpRUFBaUUsOENBQThDLHFKQUFxSixJQUFJLGdtQkFBZ21CLHNCQUFzQiwyRkFBMkYsNEJBQTRCLDBCQUEwQixtRUFBbUUsd0JBQXdCLGdDQUFnQywyQkFBMkIsMkRBQTJELG9GQUFvRix5QkFBeUIsaUNBQWlDLHNCQUFzQixnREFBZ0QsOEhBQThILG9CQUFvQixtQkFBbUIsb0RBQW9ELGFBQWEsb0ZBQW9GLDRCQUE0Qix3QkFBd0IsRUFBRSxrQ0FBa0MsdUJBQXVCLHdDQUF3QyxjQUFjLGlFQUFpRSw4Q0FBOEMsb0pBQW9KLElBQUksNGVBQTRlLHNCQUFzQixzRUFBc0UsOENBQThDLDRCQUE0QiwwQkFBMEIseUVBQXlFLDJCQUEyQiwyREFBMkQsbUZBQW1GLHlCQUF5QixtQ0FBbUMsc0JBQXNCLGdEQUFnRCxrSUFBa0ksb0JBQW9CLGtNQUFrTSxzQ0FBc0MsdUJBQXVCLEVBQUUsa0NBQWtDLHVCQUF1Qix3Q0FBd0MsY0FBYyxpRUFBaUUsZ0JBQWdCLDJCQUEyQixnQkFBZ0Isa0JBQWtCLDhDQUE4QywrRkFBK0YsSUFBSSxvM0JBQW8zQixzQkFBc0IsMEVBQTBFLHdCQUF3Qix5RUFBeUUsd0JBQXdCLDJEQUEyRCxxQkFBcUIsdURBQXVELGdCQUFnQixXQUFXLEtBQUssd0JBQXdCLHNEQUFzRCxTQUFTLFNBQVMsMEJBQTBCLDBFQUEwRSw0QkFBNEIsbURBQW1ELHdCQUF3QiwyRUFBMkUsMkJBQTJCLCtEQUErRCx1QkFBdUIsU0FBUywyQkFBMkIsdURBQXVELHlCQUF5QixvREFBb0QsMkJBQTJCLDhGQUE4RixPQUFPLDZKQUE2SixxQkFBcUIscUNBQXFDLG1DQUFtQyx3QkFBd0IsNkNBQTZDLHNCQUFzQixnREFBZ0Qsc0RBQXNELG9CQUFvQixnQ0FBZ0Msd0JBQXdCLG9CQUFvQiw4QkFBOEIsNEJBQTRCLHNCQUFzQixFQUFFLGtDQUFrQyx1QkFBdUIsd0NBQXdDLGNBQWMsaUVBQWlFLCtCQUErQiw4QkFBOEIsZUFBZSx3SkFBd0osSUFBSSxzZkFBc2Ysc0JBQXNCLHlHQUF5RyxrREFBa0QsNEJBQTRCLDBCQUEwQix5RUFBeUUsMkJBQTJCLDJEQUEyRCxvRkFBb0YseUJBQXlCLG1DQUFtQyxzQkFBc0IsaURBQWlELG9CQUFvQixzQkFBc0IsWUFBWSw4QkFBOEIsNkJBQTZCLG9CQUFvQixtQkFBbUIsK0NBQStDLHNCQUFzQixLQUFLLGtEQUFrRCx3QkFBd0IsOEJBQThCLDRCQUE0QiwyQkFBMkIsRUFBRSxrQ0FBa0MsdUJBQXVCLHdDQUF3QyxjQUFjLGlFQUFpRSw4Q0FBOEMsb0tBQW9LLElBQUkseWdCQUF5Z0Isc0JBQXNCLDZDQUE2Qyw0QkFBNEIsMEJBQTBCLG1FQUFtRSx3QkFBd0IscUpBQXFKLDRCQUE0QixNQUFNLHVDQUF1QyxTQUFTLDJCQUEyQixxTUFBcU0seUJBQXlCLGlDQUFpQyxzQkFBc0IsZ0RBQWdELGlDQUFpQywrQkFBK0IsbUNBQW1DLCtEQUErRCxxQkFBcUIsTUFBTSx5REFBeUQsa0xBQWtMLG9CQUFvQiwrREFBK0QsbUNBQW1DLG9GQUFvRixJQUFJLHNEQUFzRCw0Q0FBNEMsMkJBQTJCLHdDQUF3QyxpQ0FBaUMsY0FBYyxjQUFjLE1BQU0sdUZBQXVGLHVCQUF1QiwyNExBQTI0TCx1QkFBdUIsRUFBRSxrQ0FBa0MsdUJBQXVCLHdDQUF3QyxjQUFjLGlFQUFpRSxnQkFBZ0IsMkJBQTJCLDhDQUE4QyxxSkFBcUosSUFBSSx3ZkFBd2Ysc0JBQXNCLHNFQUFzRSxrRUFBa0UsNEJBQTRCLDBCQUEwQix5RUFBeUUsMkJBQTJCLDJEQUEyRCxvRkFBb0YseUJBQXlCLGlDQUFpQyxzQkFBc0IsZ0RBQWdELGlDQUFpQyx1Q0FBdUMscUhBQXFILG9CQUFvQiw0RkFBNEYsZ0JBQWdCLG1DQUFtQywrQ0FBK0MsbUJBQW1CLGFBQWEsK0ZBQStGLDRCQUE0Qiw2Q0FBNkMsRUFBRSxrQ0FBa0MsdUJBQXVCLHVEQUF1RCxjQUFjLGlFQUFpRSw4Q0FBOEMscUtBQXFLLElBQUksK2VBQStlLHNCQUFzQixzRUFBc0UsMEJBQTBCLHFCQUFxQiw0QkFBNEIsc0VBQXNFLDBCQUEwQix5Q0FBeUMsMkJBQTJCLDJEQUEyRCxtRkFBbUYseUJBQXlCLG1DQUFtQyxzQkFBc0IsZ0RBQWdELDBCQUEwQixtQ0FBbUMsb0JBQW9CLDRDQUE0Qyx5Q0FBeUMsc0JBQXNCLDREQUE0RCxzQkFBc0IsMkRBQTJELHVCQUF1QixFQUFFLGtDQUFrQyx1QkFBdUIsdURBQXVELGNBQWMsaUVBQWlFLDhDQUE4QyxrS0FBa0ssSUFBSSwyZUFBMmUsc0JBQXNCLHNFQUFzRSwwQkFBMEIscUJBQXFCLDRCQUE0QixzRUFBc0UsMEJBQTBCLHlDQUF5QywyQkFBMkIsMkRBQTJELG1GQUFtRix5QkFBeUIsbUNBQW1DLHNCQUFzQixnREFBZ0QsMEJBQTBCLG1DQUFtQyxvQkFBb0IsNENBQTRDLHlDQUF5QyxzQkFBc0IsMERBQTBELHNCQUFzQiw2REFBNkQscUJBQXFCLEVBQUUsa0NBQWtDLHVCQUF1Qix3Q0FBd0MsY0FBYyxpRUFBaUUsOENBQThDLGtGQUFrRixJQUFJLDZrQkFBNmtCLHNCQUFzQixzRUFBc0UsdUNBQXVDLDRCQUE0QiwwQkFBMEIsbUVBQW1FLHdCQUF3QixnQkFBZ0IsTUFBTSw2QkFBNkIsU0FBUywyQkFBMkIsc0ZBQXNGLFdBQVcsS0FBSyw2QkFBNkIsSUFBSSxVQUFVLHlCQUF5QixpQ0FBaUMsc0JBQXNCLGtGQUFrRixnQ0FBZ0Msb0JBQW9CLDRCQUE0QixzQkFBc0IsUUFBUSxpRUFBaUUsMkJBQTJCLHlCQUF5Qiw2REFBNkQseURBQXlELDZCQUE2QiwrREFBK0QsK0NBQStDLEdBQUcsbUJBQW1CLFVBQVUsMEJBQTBCLDhnZkFBOGdmLEVBQUUsa0NBQWtDLHVCQUF1Qix5QkFBeUIsYUFBYSxrREFBa0QsMkJBQTJCLEVBQUUsa0NBQWtDLEVBQUUsOEJBQThCLEVBQUUsOEJBQThCLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxFQUFFLFFBQVEsc0RBQXNELG9CQUFvQixvQkFBb0IsaU9BQWlPLEdBQUcsNkJBQTZCLGdCQUFnQixnREFBZ0QsYUFBYSwyQkFBMkIsY0FBYyw2REFBNkQsZUFBZSx1QkFBdUIseUNBQXlDLCtCQUErQiw0S0FBNEssR0FBRyxLQUFLLFNBQVMsNkJBQTZCLGlIQUFpSCw4QkFBOEIsbUJBQW1CLDBDQUEwQyxZQUFZLEdBQUcsdUNBQXVDLG1CQUFtQixpQkFBaUIsSUFBSSxFQUFFLFdBQVcsZ0RBQWdELDJEQUEyRCxpQkFBaUIsd0JBQXdCLGtEQUFrRCxrQkFBa0IsdURBQXVELG1CQUFtQix3REFBd0QsaUJBQWlCLHNEQUFzRCxzQkFBc0IsMkdBQTJHLEdBQUcsNkJBQTZCLG1EQUFtRCxxQkFBcUIscUNBQXFDLGtCQUFrQixrQ0FBa0MsdUJBQXVCLHVDQUF1Qyx3QkFBd0Isd0NBQXdDLHVCQUF1Qix1Q0FBdUMsdUJBQXVCLHVDQUF1QyxzQkFBc0Isc0NBQXNDLHdCQUF3Qix3Q0FBd0Msc0JBQXNCLHNDQUFzQyxvQkFBb0Isb0NBQW9DLHNCQUFzQixzQ0FBc0MsbUJBQW1CLG9DQUFvQyxtQkFBbUIsb0NBQW9DLHVCQUF1QixpSUFBaUksR0FBRyx3Q0FBd0MsR0FBRywwQkFBMEIseUhBQXlILHdCQUF3QixxQkFBcUIsc0JBQXNCLGlCQUFpQixpQ0FBaUMsb0JBQW9CLGdDQUFnQyxxQkFBcUIscUNBQXFDLHdCQUF3QixvQ0FBb0MscUJBQXFCLG1HQUFtRyxpQkFBaUIseUNBQXlDLHdLQUF3SyxrQkFBa0IsaUNBQWlDLG1CQUFtQiw2SkFBNkosd0JBQXdCLHlHQUF5RyxrREFBa0QsMEJBQTBCLDZHQUE2RywyQkFBMkIsK0ZBQStGLDBGQUEwRiwrQkFBK0IsNkVBQTZFLGtHQUFrRyx3QkFBd0IseUdBQXlHLGdDQUFnQywyQkFBMkIsbUZBQW1GLHlHQUF5Ryx1QkFBdUIsU0FBUywyQkFBMkIsbUZBQW1GLHFEQUFxRCwyQkFBMkIsdUZBQXVGLHFCQUFxQixtSkFBbUosc0JBQXNCLDJDQUEyQyx3RUFBd0UsMERBQTBELElBQUksNkRBQTZELFVBQVUsK05BQStOLEtBQUssYUFBYSwwQkFBMEIsNEJBQTRCLGlCQUFpQiw4QkFBOEIsb0VBQW9FLHNDQUFzQywrQkFBK0IsU0FBUywrQkFBK0IsK0JBQStCLHdFQUF3RSxPQUFPLHdIQUF3SCxlQUFlLGtDQUFrQyw4QkFBOEIscUJBQXFCLG1HQUFtRyxtRUFBbUUsNEVBQTRFLHlCQUF5QixzQkFBc0IsOEJBQThCLE1BQU0sb0NBQW9DLDRHQUE0RywrQkFBK0IsMEJBQTBCLG1GQUFtRixvREFBb0Qsd0JBQXdCLHNEQUFzRCw2QkFBNkIsV0FBVyxpSkFBaUosR0FBRyw4QkFBOEIsR0FBRywyQkFBMkIsU0FBUyxJQUFJLDBGQUEwRixHQUFHLG1CQUFtQiwwQkFBMEIsK0JBQStCLFNBQVMsZ0NBQWdDLG1DQUFtQyx1SkFBdUosSUFBSSxnZkFBZ2Ysc0JBQXNCLHlHQUF5RywrREFBK0QsNEJBQTRCLDBCQUEwQix5RUFBeUUsMkJBQTJCLCtGQUErRixtRkFBbUYseUJBQXlCLG1DQUFtQyxzQkFBc0IsbUZBQW1GLDJEQUEyRCw4Q0FBOEMsd0VBQXdFLG9CQUFvQixvUEFBb1AscUNBQXFDLDBCQUEwQiw0SEFBNEgseUhBQXlILHdCQUF3QixpRUFBaUUsRUFBRSxzQkFBc0IsbURBQW1ELEVBQUUsb0JBQW9CLHVCQUF1Qix1Q0FBdUMseUJBQXlCLDZJQUE2SSxFQUFFLDJDQUEyQyxFQUFFLHVEQUF1RCxFQUFFLGdEQUFnRCxxREFBcUQseUJBQXlCLDhFQUE4RSw4QkFBOEIseVpBQXlaLGtEQUFrRCx3RkFBd0YsMkJBQTJCLDBCQUEwQix1UUFBdVEsWUFBWSxnQ0FBZ0MsS0FBSyxxQ0FBcUMsc0JBQXNCLFdBQVcsZUFBZSxXQUFXLFNBQVMsU0FBUyxzQkFBc0Isb0VBQW9FLGlCQUFpQiwySEFBMkgsbUNBQW1DLGdDQUFnQyxlQUFlLFdBQVcsdURBQXVELHlCQUF5QiwrQkFBK0IsTUFBTSwwREFBMEQsTUFBTSxrQ0FBa0MsTUFBTSxtQ0FBbUMsTUFBTSxnQkFBZ0IsTUFBTSx1QkFBdUIsTUFBTSxtRUFBbUUsTUFBTSxtQ0FBbUMsTUFBTSxvQkFBb0IsTUFBTSx3REFBd0QsTUFBTSwwREFBMEQsTUFBTSwyQkFBMkIsTUFBTSx1QkFBdUIsU0FBUywyQkFBMkIsa0ZBQWtGLDZEQUE2RCwyQkFBMkIsY0FBYyx3Q0FBd0MsOERBQThELCtTQUErUyxZQUFZLGdDQUFnQyxLQUFLLHFDQUFxQyxpQkFBaUIsc0ZBQXNGLFFBQVEsNkJBQTZCLHVGQUF1RixHQUFHLEtBQUssd0NBQXdDLHFCQUFxQix5QkFBeUIsT0FBTywrQkFBK0IscUJBQXFCLGNBQWMscUJBQXFCLHlCQUF5QixXQUFXLHFHQUFxRyw2RUFBNkUsR0FBRyxLQUFLLGNBQWMseUJBQXlCLCtEQUErRCxxQkFBcUIsa0JBQWtCLGNBQWMsc0hBQXNILEdBQUcsS0FBSyxJQUFJLFNBQVMsV0FBVyw0Q0FBNEMseUJBQXlCLGlCQUFpQixNQUFNLG1CQUFtQixNQUFNLGlCQUFpQixNQUFNLGVBQWUsTUFBTSxjQUFjLE1BQU0sY0FBYyxNQUFNLGdCQUFnQiwyQkFBMkIsTUFBTSxtQkFBbUIsTUFBTSxvREFBb0QsTUFBTSxtREFBbUQsTUFBTSxxREFBcUQsTUFBTSxtQkFBbUIsTUFBTSx3QkFBd0IsTUFBTSxZQUFZLGlGQUFpRixtS0FBbUssUUFBUSxnQ0FBZ0MsSUFBSSxpQ0FBaUMsK0NBQStDLG1DQUFtQyx1RUFBdUUsV0FBVyx1RUFBdUUsSUFBSSwwQkFBMEIsVUFBVSx1SEFBdUgsRUFBRSxnREFBZ0QsU0FBUyx3RkFBd0YsRUFBRSxFQUFFLGlDQUFpQyx1QkFBdUIsK0JBQStCLGVBQWUsbUJBQW1CLGlDQUFpQyxRQUFRLG1DQUFtQyxPQUFPLFFBQVEsbUNBQW1DLE9BQU8sT0FBTyx1TEFBdUwsMklBQTJJLFNBQVMsU0FBUyxtREFBbUQsRUFBRSxtREFBbUQsRUFBRSxtREFBbUQsRUFBRSxtREFBbUQsRUFBRSxtREFBbUQsd0RBQXdELDBCQUEwQixFQUFFLEVBQUUscUJBQXFCLHVCQUF1QixhQUFhLHdCQUF3QixTQUFTLDRDQUE0Qyx5QkFBeUIsRUFBRSxvQkFBb0IsdUJBQXVCLGFBQWEsWUFBWSxrQkFBa0IsRUFBRSxvQ0FBb0MsRUFBRSx5Q0FBeUMsRUFBRSw2REFBNkQsRUFBRSwyRUFBMkUsRUFBRSxtRUFBbUUsRUFBRSxnRUFBZ0UsRUFBRSwyQ0FBMkMsRUFBRSxHQUFHLHVCQUF1QixhQUFhLHNKQUFzSiwwQkFBMEIsU0FBUyxvREFBb0QsT0FBTywyQ0FBMkMsWUFBWSxpREFBaUQsU0FBUyxvREFBb0QsU0FBUywyREFBMkQsU0FBUywyREFBMkQsVUFBVSx5REFBeUQsUUFBUSx5RkFBeUYsU0FBUyx5RkFBeUYsVUFBVSwwREFBMEQsY0FBYywwREFBMEQsWUFBWSx3REFBd0QsY0FBYyx3REFBd0QsWUFBWSxvREFBb0QsYUFBYSxxQ0FBcUMsWUFBWSxpRUFBaUUsaUJBQWlCLGlFQUFpRSxZQUFZLHlGQUF5RixZQUFZLHlEQUF5RCxpQkFBaUIseURBQXlELGFBQWEsa0RBQWtELFdBQVcsd0RBQXdELGdCQUFnQix3REFBd0QsS0FBSyx3Q0FBd0MsS0FBSyx3Q0FBd0MsUUFBUSwwRkFBMEYsUUFBUSwwRkFBMEYsT0FBTyw2RUFBNkUsSUFBSSx3Q0FBd0MsVUFBVSxtR0FBbUcsU0FBUyxrREFBa0QsT0FBTyw2RUFBNkUsSUFBSSx3Q0FBd0MsVUFBVSxtR0FBbUcsU0FBUyxrREFBa0QsY0FBYyw4RUFBOEUsU0FBUyxtQ0FBbUMsU0FBUyxtQ0FBbUMsWUFBWSxzQ0FBc0MsYUFBYSxTQUFTLHFDQUFxQyxjQUFjLHFDQUFxQyxTQUFTLHFCQUFxQix1QkFBdUIsZ0JBQWdCLHVDQUF1Qyw4QkFBOEIsS0FBSyxtQ0FBbUMsRUFBRSxFQUFFLCtIQUErSCx1QkFBdUIsYUFBYSwwRUFBMEUsY0FBYyxvQkFBb0IsbURBQW1ELG9EQUFvRCxjQUFjLHFCQUFxQixFQUFFLGdCQUFnQiwwSEFBMEgsU0FBUyw4R0FBOEcsVUFBVSxtQ0FBbUMsdUJBQXVCLGlDQUFpQywrQ0FBK0MsRUFBRSxHQUFHLGlEQUFpRCx3REFBd0QsbURBQW1ELEVBQUUsaUJBQWlCLHNCQUFzQixvQkFBb0IsNEZBQTRGLEVBQUUsOERBQThELHVCQUF1QixhQUFhLDJGQUEyRixnQkFBZ0IsOEVBQThFLFFBQVEsV0FBVywrQkFBK0IsUUFBUSxJQUFJLDRIQUE0SCxzQ0FBc0MsTUFBTSx5Q0FBeUMsT0FBTywwQkFBMEIsZ0JBQWdCLHVDQUF1QyxXQUFXLDZCQUE2QixhQUFhLDZDQUE2Qyx1QkFBdUIsMERBQTBELDZCQUE2QiwrQkFBK0IsUUFBUSxXQUFXLG9HQUFvRyxRQUFRLFdBQVcsb0dBQW9HLDJCQUEyQixNQUFNLEVBQUUsd0VBQXdFLHVCQUF1QixhQUFhLHFDQUFxQyw0QkFBNEIsYUFBYSxxREFBcUQsZUFBZSx3Q0FBd0MsMElBQTBJLHlCQUF5Qiw2T0FBNk8sd0NBQXdDLE1BQU0sMElBQTBJLGtDQUFrQyw0REFBNEQsRUFBRSx3QkFBd0IsRUFBRSwrQkFBK0IsdUJBQXVCLGFBQWEsd0RBQXdELDRCQUE0QixRQUFRLGtFQUFrRSxzRUFBc0UsV0FBVyw2RkFBNkYsY0FBYyxrQkFBa0IsMERBQTBELEVBQUUsa0RBQWtELHVCQUF1QixhQUFhLGdKQUFnSixrQkFBa0IsZ0JBQWdCLDJCQUEyQixzQ0FBc0MsU0FBUyxXQUFXLGlEQUFpRCxjQUFjLEtBQUssSUFBSSxLQUFLLDZDQUE2QywyREFBMkQscUNBQXFDLDJDQUEyQyxxQ0FBcUMsMEJBQTBCLDhCQUE4QiwyQkFBMkIsaUVBQWlFLGdDQUFnQyw0R0FBNEcsd0JBQXdCLE9BQU8sd0NBQXdDLEdBQUcsRUFBRSx1SUFBdUksdUJBQXVCLGFBQWEseVRBQXlULGdCQUFnQixzQ0FBc0MsaURBQWlELGdEQUFnRCx3QkFBd0IsaUVBQWlFLDBFQUEwRSxxRUFBcUUsOERBQThELDZCQUE2Qiw2QkFBNkIsT0FBTyxJQUFJLE1BQU0sK1ZBQStWLGVBQWUsT0FBTyw0REFBNEQsc0RBQXNELEVBQUUseUNBQXlDLHVGQUF1RixhQUFhLCtLQUErSyxFQUFFLG1FQUFtRSxFQUFFLDJCQUEyQixvQ0FBb0MsRUFBRSxpT0FBaU8saUdBQWlHLCtDQUErQyxZQUFZLGtFQUFrRSx3Q0FBd0MsZ0JBQWdCLGdDQUFnQyxxSkFBcUosWUFBWSxpQ0FBaUMsY0FBYyw4QkFBOEIsZUFBZSx5QkFBeUIsb0JBQW9CLDZCQUE2QixhQUFhLHVCQUF1QixzRUFBc0UsZ0ZBQWdGLFNBQVMsaUJBQWlCLCtCQUErQiw0S0FBNEssZ0JBQWdCLDJEQUEyRCxzREFBc0QsSUFBSSw2QkFBNkIsV0FBVyxLQUFLLDBEQUEwRCxRQUFRLGdLQUFnSyxPQUFPLDJCQUEyQix5R0FBeUcsMkVBQTJFLGdCQUFnQixVQUFVLGdCQUFnQiwwSEFBMEgsbUNBQW1DLG1FQUFtRSxzRUFBc0UsK0RBQStELHdCQUF3QixnQ0FBZ0MsbUhBQW1ILG9CQUFvQixjQUFjLDBJQUEwSSxnQkFBZ0IsZ0NBQWdDLEtBQUssaUNBQWlDLDJEQUEyRCw0SkFBNEosb0RBQW9ELEVBQUUsd0JBQXdCLDRDQUE0QyxtUkFBbVIsMkJBQTJCLG9FQUFvRSxNQUFNLHNCQUFzQix1REFBdUQsaUJBQWlCLEVBQUUsdUVBQXVFLHFCQUFxQiw2SUFBNkksMkRBQTJELFlBQVksZUFBZSxpREFBaUQsNENBQTRDLGdIQUFnSCwwRUFBMEUsNkZBQTZGLFFBQVEsd0NBQXdDLHdCQUF3QixrR0FBa0csc0JBQXNCLCtCQUErQiw0UEFBNFAsc0NBQXNDLEVBQUUsbUJBQW1CLDZCQUE2QixvREFBb0QsNEJBQTRCLEtBQUssa0NBQWtDLHdDQUF3Qyx1QkFBdUIsc0JBQXNCLGdCQUFnQixpSkFBaUosS0FBSyxZQUFZLFFBQVEsMkJBQTJCLEtBQUssc0RBQXNELG1DQUFtQywyQkFBMkIsS0FBSyxzREFBc0QsbUNBQW1DLDJFQUEyRSxRQUFRLHNDQUFzQyxTQUFTLG1CQUFtQixrQ0FBa0Msb0RBQW9ELDRCQUE0QixFQUFFLGlCQUFpQixXQUFXLGlCQUFpQixvQkFBb0IsK0NBQStDLFlBQVksdUJBQXVCLHFDQUFxQyw2QkFBNkIsc0JBQXNCLEVBQUUsMFJBQTBSLHVCQUF1QixhQUFhLG1EQUFtRCwwQkFBMEIsd1BBQXdQLHdCQUF3QixHQUFHLGdDQUFnQyxJQUFJLGlDQUFpQyx3QkFBd0IsOEVBQThFLE1BQU0sK0JBQStCLG9DQUFvQyxzQkFBc0IsY0FBYyxFQUFFLE1BQU0sK0JBQStCLG9DQUFvQyxzQkFBc0IsY0FBYyxHQUFHLDZCQUE2Qiw4QkFBOEIseUJBQXlCLHFEQUFxRCxtRkFBbUYsdURBQXVELDhIQUE4SCxhQUFhLHdDQUF3QyxvQkFBb0IsdUVBQXVFLHdIQUF3SCxTQUFTLDBDQUEwQyxHQUFHLDZCQUE2QixFQUFFLDBDQUEwQyx1QkFBdUIsYUFBYSxpQ0FBaUMsV0FBVywwV0FBMFcsRUFBRSw0SkFBNEosdUJBQXVCLGFBQWEscUlBQXFJLDRCQUE0QixxQkFBcUIsY0FBYyxJQUFJLGNBQWMsSUFBSSxjQUFjLEtBQUssaUJBQWlCLEtBQUssaUJBQWlCLG1tQkFBbW1CLHNCQUFzQixFQUFFLG1HQUFtRyx1QkFBdUIsYUFBYSx1REFBdUQsZ0JBQWdCLHVEQUF1RCx3REFBd0QsUUFBUSw2RkFBNkYseURBQXlELFNBQVMsaUdBQWlHLDBEQUEwRCxzQkFBc0IsNENBQTRDLFdBQVcsY0FBYyxpRUFBaUUsRUFBRSxpREFBaUQsdUJBQXVCLGFBQWEsNkpBQTZKLG9CQUFvQixnQkFBZ0IsMkJBQTJCLGNBQWMsa0JBQWtCLGdCQUFnQiw0REFBNEQsaVJBQWlSLDBCQUEwQixPQUFPLGdFQUFnRSxHQUFHLEVBQUUsb0pBQW9KLHVCQUF1QixhQUFhLHVGQUF1RixzQkFBc0IsOERBQThELFdBQVcsS0FBSyx3QkFBd0IsSUFBSSxLQUFLLDhDQUE4QyxhQUFhLEtBQUssT0FBTyxtT0FBbU8sRUFBRSx5REFBeUQsdUJBQXVCLGFBQWEsMkNBQTJDLFdBQVcsb0RBQW9ELFVBQVUsT0FBTyxnQ0FBZ0MsaUdBQWlHLDhCQUE4QixhQUFhLDJDQUEyQyxXQUFXLEtBQUssV0FBVyxpSEFBaUgsMENBQTBDLEVBQUUsc0dBQXNHLHVCQUF1QixhQUFhLCtxQkFBK3FCLEVBQUUscXJCQUFxckIsdUJBQXVCLGFBQWEsbUdBQW1HLHNGQUFzRixxQkFBcUIsU0FBUyxrQ0FBa0MsV0FBVyxHQUFHLGVBQWUsSUFBSSxjQUFjLElBQUksY0FBYyxJQUFJLGdCQUFnQixJQUFJLGVBQWUsSUFBSSxlQUFlLElBQUksZUFBZSxJQUFJLGNBQWMsSUFBSSxnQkFBZ0IsSUFBSSxnQkFBZ0IsSUFBSSxvQkFBb0IsWUFBWSxzQ0FBc0MsSUFBSSxrQ0FBa0MsU0FBUyxjQUFjLFdBQVcsaUNBQWlDLGNBQWMsc0JBQXNCLElBQUksY0FBYyxFQUFFLGNBQWMsZ0VBQWdFLE9BQU8sb0JBQW9CLGtCQUFrQixJQUFJLG9CQUFvQixtQkFBbUIsSUFBSSxvQkFBb0IsZ1BBQWdQLFdBQVcsZ0RBQWdELFFBQVEseUpBQXlKLFNBQVMsK0hBQStILFdBQVcsT0FBTyxXQUFXLFFBQVEsV0FBVyxRQUFRLE9BQU8sV0FBVyxRQUFRLFdBQVcsUUFBUSxZQUFZLFFBQVEsWUFBWSxhQUFhLGFBQWEsUUFBUSw4VkFBOFYsMkVBQTJFLFlBQVksV0FBVyxzQ0FBc0MsbUJBQW1CLHlUQUF5VCxpQkFBaUIseVRBQXlULFlBQVksMGhCQUEwaEIsc0NBQXNDLGlFQUFpRSwwQkFBMEIsMkxBQTJMLFdBQVcsRUFBRSxrRUFBa0UsdUJBQXVCLGFBQWEsMk5BQTJOLEdBQUcsdUJBQXVCLGFBQWEsMERBQTBELHFCQUFxQixzQkFBc0Isa0NBQWtDLHdCQUF3QixnQ0FBZ0MsY0FBYyxxQ0FBcUMsZUFBZSxrQ0FBa0Msd0NBQXdDLGVBQWUseUVBQXlFLDZCQUE2QixZQUFZLFdBQVcsS0FBSyx5QkFBeUIseUNBQXlDLDBCQUEwQix5QkFBeUIsK0VBQStFLDhDQUE4QyxzQkFBc0IsZ0JBQWdCLDJFQUEyRSxtQkFBbUIsdUJBQXVCLHVCQUF1QiwyQkFBMkIsNEJBQTRCLG1CQUFtQixtRkFBbUYseUJBQXlCLG1CQUFtQixxQ0FBcUMsbUNBQW1DLGtFQUFrRSxJQUFJLG1FQUFtRSwwQkFBMEIsNEJBQTRCLFdBQVcsd0dBQXdHLHdCQUF3QixXQUFXLFNBQVMsa0RBQWtELEVBQUUsc0JBQXNCLFdBQVcsU0FBUyw4Q0FBOEMsRUFBRSxxQkFBcUIsMEJBQTBCLDZCQUE2QixRQUFRLFdBQVcsOEVBQThFLFdBQVcsaUJBQWlCLGVBQWUsdUVBQXVFLFdBQVcsOENBQThDLDBCQUEwQixXQUFXLG9EQUFvRCxXQUFXLGtCQUFrQix5Q0FBeUMsRUFBRSx1REFBdUQsdUJBQXVCLGFBQWEsc0tBQXNLLGFBQWEsZUFBZSxnRUFBZ0UsWUFBWSwrQkFBK0IsVUFBVSxrRUFBa0UsTUFBTSw4QkFBOEIsSUFBSSx3Q0FBd0MsVUFBVSxrRUFBa0UsT0FBTywrQkFBK0IsSUFBSSxzQ0FBc0MsVUFBVSxvRUFBb0UsT0FBTywrQkFBK0Isd0ZBQXdGLDhCQUE4QixVQUFVLHFDQUFxQyxtSEFBbUgsVUFBVSxRQUFRLDZHQUE2RywyU0FBMlMsTUFBTSxpQkFBaUIsVUFBVSxRQUFRLGlFQUFpRSxjQUFjLE9BQU8saUJBQWlCLGVBQWUsYUFBYSxrRUFBa0UsMEJBQTBCLEVBQUUsdUlBQXVJLHVCQUF1QixhQUFhLHlEQUF5RCwwQkFBMEIsc0NBQXNDLDhCQUE4Qix5QkFBeUIsWUFBWSxXQUFXLEtBQUssZ0NBQWdDLHNFQUFzRSxxRUFBcUUseUZBQXlGLEVBQUUseUNBQXlDLHVCQUF1QixhQUFhLFdBQVcsSUFBSSwyT0FBMk8sR0FBRyx1QkFBdUIsYUFBYSwrTkFBK04sMEJBQTBCLG9EQUFvRCxnQkFBZ0IsMkJBQTJCLHlCQUF5QixvRUFBb0UsbUJBQW1CLHFQQUFxUCxPQUFPLDJCQUEyQixtSUFBbUksRUFBRSxxTkFBcU4sdUJBQXVCLGFBQWEsc2lCQUFzaUIsd0JBQXdCLFNBQVMseUJBQXlCLGFBQWEsOEJBQThCLG9GQUFvRixxS0FBcUssb0JBQW9CLHlEQUF5RCxtQkFBbUIsZ0dBQWdHLFFBQVEsK0NBQStDLHdCQUF3Qix3QkFBd0IsNEhBQTRILG1EQUFtRCw4QkFBOEIseUJBQXlCLHlCQUF5QixxQ0FBcUMsd0RBQXdELDJDQUEyQyxvUEFBb1Asa0JBQWtCLDJCQUEyQixrQkFBa0Isc0RBQXNELDhqQkFBOGpCLEtBQUssd0JBQXdCLEtBQUssb0VBQW9FLHVPQUF1Tyw2Q0FBNkMsd0ZBQXdGLFNBQVMsdURBQXVELG9HQUFvRyxZQUFZLG9DQUFvQyxxREFBcUQseUNBQXlDLHFCQUFxQix1VEFBdVQsRUFBRSxFQUFFLDBFQUEwRSwwSUFBMEksZ0RBQWdELGdEQUFnRCxtR0FBbUcsWUFBWSxpQ0FBaUMsRUFBRSw2REFBNkQsZ0RBQWdELCtJQUErSSw0S0FBNEssNERBQTRELEtBQUsscUJBQXFCLHFCQUFxQixjQUFjLHNEQUFzRCxpS0FBaUssNkRBQTZELHVGQUF1Rix1REFBdUQsV0FBVyxFQUFFLHFCQUFxQixtR0FBbUcsa0RBQWtELDJCQUEyQix3RUFBd0UsRUFBRSxxRUFBcUUsS0FBSyw0QkFBNEIsbUNBQW1DLEVBQUUsMkZBQTJGLDBGQUEwRix1SUFBdUksMkVBQTJFLHdIQUF3SCx5QkFBeUIsMkZBQTJGLHFCQUFxQix3REFBd0QsRUFBRSxZQUFZLGdEQUFnRCwrSkFBK0osdUJBQXVCLE9BQU8sa0hBQWtILGFBQWEsK0JBQStCLFlBQVksdUJBQXVCLEdBQUcsR0FBRywrQkFBK0IsaURBQWlELDhEQUE4RCx5REFBeUQsK0dBQStHLHNEQUFzRCx5QkFBeUIsK0ZBQStGLDZEQUE2RCw2QkFBNkIsbUNBQW1DLGdHQUFnRyx1Q0FBdUMsMENBQTBDLEVBQUUsUUFBUSxrQkFBa0Isa0JBQWtCLHNEQUFzRCxRQUFRLCtCQUErQiw2RkFBNkYsa0NBQWtDLHNEQUFzRCxLQUFLLFVBQVUsOERBQThELG9CQUFvQixLQUFLLHFGQUFxRix5Q0FBeUMsOEJBQThCLHNCQUFzQiwwSEFBMEgsNkNBQTZDLFFBQVEsbUJBQW1CLG1DQUFtQyxTQUFTLGdFQUFnRSxFQUFFLFVBQVUsaUJBQWlCLDZCQUE2QixpQkFBaUIsT0FBTyxpSUFBaUksdUNBQXVDLHNFQUFzRSxHQUFHLHdDQUF3QyxhQUFhLDBCQUEwQixxQkFBcUIsS0FBSyxxQkFBcUIsdUJBQXVCLGNBQWMsbURBQW1ELDBCQUEwQixnQ0FBZ0MsZ0NBQWdDLFdBQVcsOEJBQThCLHdGQUF3RixpQkFBaUIsb0ZBQW9GLHdCQUF3QixtREFBbUQsU0FBUyxjQUFjLEVBQUUsb2RBQW9kLHVCQUF1QixhQUFhLHFCQUFxQixzQkFBc0Isb0NBQW9DLEVBQUUsZ0JBQWdCLHVCQUF1QixhQUFhLDhCQUE4QixlQUFlLGNBQWMsZ0JBQWdCLHdCQUF3QixRQUFRLGdCQUFnQixpUUFBaVEsb0RBQW9ELGdCQUFnQixNQUFNLHVFQUF1RSxFQUFFLGlCQUFpQixTQUFTLFFBQVEsU0FBUyw2QkFBNkIsK0NBQStDLGtDQUFrQyx5REFBeUQsT0FBTyw2REFBNkQsT0FBTyw2REFBNkQsT0FBTywwREFBMEQsZUFBZSwwREFBMEQsbUJBQW1CLG1CQUFtQiwwRUFBMEUsbUJBQW1CLGlCQUFpQiwwQ0FBMEMsa0JBQWtCLHlDQUF5QyxLQUFLLEVBQUUsa0JBQWtCLHVCQUF1QixhQUFhLHFCQUFxQiwwQkFBMEIsNEtBQTRLLG1XQUFtVyxFQUFFLGdCQUFnQix1QkFBdUIsYUFBYSxvREFBb0Qsc0JBQXNCLGdCQUFnQixlQUFlLHFCQUFxQixnQkFBZ0IsMERBQTBELE1BQU0sdUNBQXVDLDJGQUEyRixZQUFZLFdBQVcsS0FBSyxnQ0FBZ0MscUNBQXFDLFdBQVcsY0FBYyxZQUFZLHlCQUF5Qiw4Q0FBOEMsb0JBQW9CLHVDQUF1QyxJQUFJLEVBQUUsZ0NBQWdDLHVCQUF1QixhQUFhLCtIQUErSCxnQkFBZ0IsNEJBQTRCLHdDQUF3QyxHQUFHLDhCQUE4QixnRUFBZ0UsT0FBTywyQkFBMkIsMEVBQTBFLHNDQUFzQyx1TEFBdUwsRUFBRSw4R0FBOEcsdUJBQXVCLGFBQWEsK0dBQStHLGNBQWMsNENBQTRDLEtBQUssU0FBUyxXQUFXLG1CQUFtQixTQUFTLGNBQWMsT0FBTyw2QkFBNkIsMEJBQTBCLFdBQVcsNEJBQTRCLHVDQUF1QyxrQkFBa0Isd0NBQXdDLFdBQVcsZ0JBQWdCLEtBQUssTUFBTSxxSEFBcUgsNEJBQTRCLHlJQUF5SSxJQUFJLEtBQUssV0FBVyw0QkFBNEIsT0FBTyxrQkFBa0IsOENBQThDLFFBQVEsMkRBQTJELElBQUksS0FBSyxzQkFBc0IsdUJBQXVCLHlGQUF5Riw4QkFBOEIsZUFBZSxlQUFlLGdEQUFnRCxhQUFhLG1EQUFtRCxxQ0FBcUMsU0FBUyxLQUFLLEVBQUUseUZBQXlGLHVCQUF1QixhQUFhLHFDQUFxQyxXQUFXLHNjQUFzYyxFQUFFLCtKQUErSix1QkFBdUIsYUFBYSwyQkFBMkIsV0FBVyw0QkFBNEIsaURBQWlELGtCQUFrQixrREFBa0QsWUFBWSxtREFBbUQsRUFBRSxlQUFlLHVCQUF1QixhQUFhLG9GQUFvRix3QkFBd0Isb0RBQW9ELGdCQUFnQiwyQkFBMkIscURBQXFELEVBQUUsNkVBQTZFLHVCQUF1QixhQUFhLHlCQUF5Qiw2eEdBQTZ4RyxVQUFVLGNBQWMsUUFBUSwwQ0FBMEMsa0NBQWtDLDhDQUE4QyxZQUFZLFdBQVcsS0FBSyxXQUFXLHNEQUFzRCxRQUFRLFNBQVMsV0FBVywwQ0FBMEMsd0JBQXdCLGFBQWEsSUFBSSxzQkFBc0IsU0FBUyxLQUFLLGlFQUFpRSxxQkFBcUIsNkJBQTZCLEVBQUUsZUFBZSx1QkFBdUIsYUFBYSw4QkFBOEIsd0NBQXdDLDhHQUE4RyxHQUFHLHVCQUF1QixhQUFhLGtJQUFrSSw0QkFBNEIsMEtBQTBLLEVBQUUsZ0JBQWdCLHVCQUF1QixhQUFhLGtNQUFrTSwrQ0FBK0MscUJBQXFCLGFBQWEsb0NBQW9DLHdCQUF3QixjQUFjLHNJQUFzSSxjQUFjLCtEQUErRCwwREFBMEQsNkRBQTZELGdOQUFnTixXQUFXLG9CQUFvQixpQ0FBaUMsd0RBQXdELGNBQWMsNkJBQTZCLFdBQVcsMm9CQUEyb0IsY0FBYyxtQkFBbUIscUVBQXFFLDZFQUE2RSxvQkFBb0IsZ0JBQWdCLGNBQWMsMFNBQTBTLCtHQUErRyxzQ0FBc0MsTUFBTSxJQUFJLDRCQUE0QixTQUFTLFdBQVcsc01BQXNNLG1CQUFtQiw2QkFBNkIsb0JBQW9CLGVBQWUsRUFBRSx3TUFBd00sdUJBQXVCLGFBQWEsMkhBQTJILDBCQUEwQix5RUFBeUUscUJBQXFCLG1DQUFtQyxRQUFRLGtQQUFrUCxpQkFBaUIsSUFBSSxFQUFFLG9HQUFvRyx1QkFBdUIsYUFBYSxRQUFRLGlIQUFpSCxHQUFHLHVCQUF1QixhQUFhLDhZQUE4WSx5QkFBeUIscUlBQXFJLCtCQUErQiwwQkFBMEIsMkJBQTJCLG1DQUFtQywrQkFBK0IsOENBQThDLG9DQUFvQyw4QkFBOEIsdUlBQXVJLG1DQUFtQyxtQkFBbUIscUJBQXFCLDBCQUEwQixFQUFFLCtDQUErQyw2RUFBNkUsd0NBQXdDLDBCQUEwQix3QkFBd0IsbUJBQW1CLG1JQUFtSSxnQ0FBZ0Msa0RBQWtELEVBQUUsR0FBRyw4QkFBOEIsZ0VBQWdFLHVDQUF1Qyx1QkFBdUIsc0JBQXNCLFdBQVcsVUFBVSxpQ0FBaUMseUNBQXlDLG9DQUFvQyx3Q0FBd0Msc0JBQXNCLFdBQVcsVUFBVSxpQ0FBaUMsOERBQThELEVBQUUsNEJBQTRCLG9DQUFvQywyQ0FBMkMsRUFBRSwyQkFBMkIsUUFBUSxvQkFBb0IscU9BQXFPLCtCQUErQixpREFBaUQsV0FBVyxZQUFZLG9CQUFvQiw4QkFBOEIsMkNBQTJDLHFCQUFxQixnREFBZ0QsR0FBRyx5QkFBeUIsc0RBQXNELGlCQUFpQixrQkFBa0Isb0RBQW9ELFdBQVcsNFJBQTRSLEVBQUUsMkRBQTJELGdCQUFnQixZQUFZLHlDQUF5QywyQkFBMkIsdUJBQXVCLFFBQVEsbUpBQW1KLHFEQUFxRCxPQUFPLG9CQUFvQixJQUFJLG9CQUFvQix1QkFBdUIsUUFBUSxzQkFBc0IsaUJBQWlCLGtDQUFrQyxhQUFhLDhCQUE4QixxQkFBcUIsMENBQTBDLFdBQVcsOEJBQThCLG1CQUFtQiw0Q0FBNEMsaUNBQWlDLDZDQUE2QyxJQUFJLG1GQUFtRixnSEFBZ0gsZ0JBQWdCLDJEQUEyRCxxQkFBcUIsd0NBQXdDLGtDQUFrQyw4REFBOEQsY0FBYyxxQkFBcUIsc0VBQXNFLEVBQUUsRUFBRSw2Q0FBNkMsNkJBQTZCLHdHQUF3Ryw4QkFBOEIsYUFBYSw2QkFBNkIsbUJBQW1CLDJDQUEyQyxHQUFHLHdDQUF3Qyx3QkFBd0Isd0dBQXdHLE1BQU0sZ0hBQWdILHdDQUF3QyxtQ0FBbUMsZUFBZSwyREFBMkQsS0FBSyxZQUFZLFFBQVEsa0RBQWtELCtRQUErUSxrQ0FBa0MsdUNBQXVDLEVBQUUsS0FBSywrQkFBK0IseUJBQXlCLDRFQUE0RSxZQUFZLGlCQUFpQixZQUFZLHlEQUF5RCxpQkFBaUIsa0JBQWtCLGlDQUFpQyxRQUFRLFlBQVksaUpBQWlKLG9CQUFvQixxRUFBcUUseUNBQXlDLFFBQVEsaUJBQWlCLG1CQUFtQixlQUFlLGVBQWUsZUFBZSwrREFBK0QsbUVBQW1FLG1DQUFtQyxnQ0FBZ0MsRUFBRSxrQ0FBa0MsdUNBQXVDLGVBQWUsNEJBQTRCLEVBQUUseURBQXlELHFFQUFxRSxpQkFBaUIsa0NBQWtDLElBQUksd0NBQXdDLFFBQVEsaUJBQWlCLG1CQUFtQixpQkFBaUIsaUJBQWlCLGlCQUFpQiwrQkFBK0IseUNBQXlDLGNBQWMsa0RBQWtELEdBQUcsb0NBQW9DLCtCQUErQixtREFBbUQsTUFBTSwwQ0FBMEMsMENBQTBDLDBDQUEwQywrQkFBK0IseUNBQXlDLDhDQUE4Qyw0Q0FBNEMsK0JBQStCLDZCQUE2QixXQUFXLGNBQWMsR0FBRywrQkFBK0Isc0NBQXNDLE1BQU0sNkJBQTZCLDZFQUE2RSxZQUFZLEdBQUcsbUJBQW1CLE9BQU8seUNBQXlDLG9CQUFvQixrUUFBa1EscUVBQXFFLGdCQUFnQiw0QkFBNEIscUJBQXFCLGlDQUFpQyxhQUFhLE1BQU0scUJBQXFCLG9DQUFvQyx3QkFBd0IsbUJBQW1CLHdEQUF3RCxhQUFhLG9FQUFvRSwrRkFBK0YsZ0JBQWdCLEdBQUcsbUNBQW1DLCtCQUErQixvQ0FBb0MsbUJBQW1CLGdGQUFnRixtQ0FBbUMsSUFBSSxTQUFTLG9CQUFvQixnS0FBZ0ssZ0hBQWdILDJCQUEyQixvQ0FBb0Msc0JBQXNCLFFBQVEsYUFBYSxvQ0FBb0MsZ0NBQWdDLGFBQWEsNENBQTRDLGlEQUFpRCw4QkFBOEIsd0NBQXdDLHNEQUFzRCxRQUFRLElBQUksb0NBQW9DLHNDQUFzQyxLQUFLLDBDQUEwQyxnREFBZ0QsT0FBTyxpQkFBaUIsOENBQThDLGtCQUFrQiw4Q0FBOEMsbUJBQW1CLDJFQUEyRSxtQkFBbUIsNEVBQTRFLGlCQUFpQiwrQ0FBK0Msb0JBQW9CLGNBQWMsbUJBQW1CLDREQUE0RCxXQUFXLHNCQUFzQixVQUFVLHlCQUF5QiwrRUFBK0UsMEJBQTBCLGdHQUFnRyxFQUFFLDZEQUE2RCxpQ0FBaUMsOEJBQThCLEVBQUUsRUFBRSx1QkFBdUIsa0JBQWtCLFFBQVEsY0FBYyx5Q0FBeUMsdUdBQXVHLGdCQUFnQixrQkFBa0IsaUJBQWlCLDZEQUE2RCx1QkFBdUIsVUFBVSxrQkFBa0IsNENBQTRDLElBQUksaUNBQWlDLHNCQUFzQixXQUFXLHNGQUFzRixPQUFPLHFCQUFxQiw2REFBNkQsaUVBQWlFLEtBQUsseUhBQXlILDJFQUEyRSxvQkFBb0IsT0FBTyw2R0FBNkcsZ0NBQWdDLGlEQUFpRCxJQUFJLDhCQUE4QiwyQkFBMkIsNEJBQTRCLDJJQUEySSxzQkFBc0IsYUFBYSxPQUFPLHVCQUF1QixnQ0FBZ0MsMEZBQTBGLHNEQUFzRCw4RUFBOEUsd0JBQXdCLGtJQUFrSSxzQkFBc0IsYUFBYSxPQUFPLHVCQUF1Qiw0QkFBNEIsMEZBQTBGLGtEQUFrRCwyRUFBMkUsZ0JBQWdCLHFDQUFxQyxvQkFBb0IsNENBQTRDLGtCQUFrQix5REFBeUQsaURBQWlELElBQUksK0JBQStCLHFDQUFxQyxxQkFBcUIsMENBQTBDLGFBQWEsbUdBQW1HLDJJQUEySSxHQUFHLEVBQUUsdVdBQXVXLHVCQUF1QixhQUFhLGNBQWMsV0FBVyxRQUFRLGtCQUFrQixtQkFBbUIsd0VBQXdFLFNBQVMsa0JBQWtCLG1CQUFtQiwyQ0FBMkMsVUFBVSxrQkFBa0IsdUJBQXVCLDZDQUE2QyxRQUFRLGtCQUFrQix5Q0FBeUMsK0ZBQStGLElBQUksa0JBQWtCLCtGQUErRix5Q0FBeUMsZ0JBQWdCLGtCQUFrQixrQ0FBa0MsK0RBQStELGtCQUFrQixrQkFBa0Isa0NBQWtDLCtEQUErRCxrQkFBa0Isa0JBQWtCLGtDQUFrQywrREFBK0QsbUJBQW1CLGtCQUFrQixrQ0FBa0MsK0RBQStELGdCQUFnQixrQkFBa0IseUNBQXlDLHFDQUFxQyxnQkFBZ0IsbUJBQW1CLHlDQUF5QyxxQ0FBcUMsZ0JBQWdCLG1CQUFtQix5Q0FBeUMscUNBQXFDLGdCQUFnQixtQkFBbUIseUNBQXlDLHFDQUFxQyxXQUFXLG1CQUFtQixpRkFBaUYsK0VBQStFLFVBQVUsbUJBQW1CLGtFQUFrRSxtRUFBbUUsV0FBVyxtQkFBbUIsa0VBQWtFLG1FQUFtRSxVQUFVLG1CQUFtQiw0Q0FBNEMseUZBQXlGLE9BQU8sbUJBQW1CLHlLQUF5SyxtSUFBbUksV0FBVyxtQkFBbUIsNkRBQTZELHlJQUF5SSxxQkFBcUIsbUJBQW1CLGtIQUFrSCwwREFBMEQsdUJBQXVCLG1CQUFtQixrSEFBa0gsMkRBQTJELGdCQUFnQixtQkFBbUIsaUVBQWlFLDJFQUEyRSxpQkFBaUIsbUJBQW1CLG1FQUFtRSw2REFBNkQsaUJBQWlCLG1CQUFtQix5Q0FBeUMsNkNBQTZDLGlCQUFpQixtQkFBbUIseUNBQXlDLDZDQUE2QyxZQUFZLG1CQUFtQixtQkFBbUIsaURBQWlELFVBQVUsU0FBUyxtQkFBbUIsbUJBQW1CLGlEQUFpRCxVQUFVLGlCQUFpQixtQkFBbUIsbUJBQW1CLHFHQUFxRyxzQkFBc0IsYUFBYSxtQkFBbUIsK0NBQStDLDJIQUEySCxzQkFBc0IsaUJBQWlCLG1CQUFtQixtQkFBbUIsd0VBQXdFLHNCQUFzQixhQUFhLG1CQUFtQixtQkFBbUIsOEZBQThGLHNCQUFzQixrQkFBa0IsbUJBQW1CLHVCQUF1Qix1RUFBdUUsc0JBQXNCLGNBQWMsbUJBQW1CLDBDQUEwQyw2RkFBNkYsc0JBQXNCLGVBQWUsbUJBQW1CLHVCQUF1QixvQ0FBb0MsZ0NBQWdDLFdBQVcsbUJBQW1CLG1CQUFtQiwwREFBMEQsZ0NBQWdDLFdBQVcsbUJBQW1CLDBDQUEwQyx3RkFBd0YsZ0NBQWdDLE9BQU8sbUJBQW1CLG9DQUFvQywwRUFBMEUsdUJBQXVCLFNBQVMsbUJBQW1CLDREQUE0RCx1REFBdUQsZ0NBQWdDLFdBQVcsbUJBQW1CLDREQUE0RCx3REFBd0QsZ0NBQWdDLFdBQVcsbUJBQW1CLDREQUE0RCx1REFBdUQsZ0NBQWdDLFlBQVksbUJBQW1CLDREQUE0RCx3REFBd0QsZ0NBQWdDLFlBQVksbUJBQW1CLHVCQUF1QixxQkFBcUIsZ0NBQWdDLFlBQVksbUJBQW1CLHVCQUF1QixxQkFBcUIsZ0NBQWdDLFlBQVksbUJBQW1CLG1CQUFtQixnQ0FBZ0MsZ0NBQWdDLFlBQVksbUJBQW1CLG1CQUFtQixnQ0FBZ0Msa0NBQWtDLEVBQUUsT0FBTyx1QkFBdUIsYUFBYSxXQUFXLFNBQVMsa0NBQWtDLE9BQU8saUZBQWlGLFlBQVksa0NBQWtDLFFBQVEscUNBQXFDLGFBQWEscUNBQXFDLFFBQVEsK0NBQStDLGFBQWEsK0NBQStDLFdBQVcsZ0RBQWdELGdCQUFnQixnREFBZ0QsY0FBYyxrQ0FBa0MsY0FBYyxtQ0FBbUMsUUFBUSxpQ0FBaUMsWUFBWSwrQ0FBK0MsUUFBUSx1Q0FBdUMsOEJBQThCLFNBQVMscUNBQXFDLEdBQUcsdUJBQXVCLGFBQWEsMEhBQTBILG9CQUFvQix1QkFBdUIsTUFBTSxxREFBcUQsbUJBQW1CLFdBQVcsS0FBSyxpQkFBaUIsa0JBQWtCLDBCQUEwQixXQUFXLGdCQUFnQixhQUFhLHFCQUFxQix3Q0FBd0MsY0FBYyxnRUFBZ0UscUJBQXFCLEVBQUUsVUFBVSxHQUFHLHFEQUFxRCxzQkFBc0IseUJBQXlCLFdBQVcsS0FBSyx3QkFBd0IsK0NBQStDLHNEQUFzRCw2QkFBNkIsRUFBRSxpSEFBaUgsdUJBQXVCLGFBQWEsZ0JBQWdCLGdDQUFnQyx5QkFBeUIsMkJBQTJCLG1CQUFtQix3QkFBd0IsOEJBQThCLFFBQVEsc0JBQXNCLDJCQUEyQixlQUFlLGtCQUFrQiwwQkFBMEIsWUFBWSxhQUFhLHVCQUF1QixxQkFBcUIsb0JBQW9CLGlEQUFpRCx1Q0FBdUMsNENBQTRDLFdBQVcsWUFBWSxhQUFhLG9CQUFvQixHQUFHLHVCQUF1QixhQUFhLHlIQUF5SCw0QkFBNEIsdURBQXVELGdCQUFnQiwyQkFBMkIsMEVBQTBFLGtEQUFrRCwwTkFBME4sZ0NBQWdDLHVDQUF1Qyx1REFBdUQsb0ZBQW9GLEVBQUUsZ0hBQWdILHVCQUF1QixhQUFhLHlGQUF5Rix1QkFBdUIsMkJBQTJCLEtBQUssdUZBQXVGLE9BQU8sdUJBQXVCLDJCQUEyQiwyQkFBMkIsS0FBSywrSEFBK0gsZ0RBQWdELFFBQVEsMkZBQTJGLHFKQUFxSixjQUFjLHVFQUF1RSxjQUFjLHlFQUF5RSxFQUFFLGtKQUFrSix1QkFBdUIsYUFBYSwyRkFBMkYsNEJBQTRCLDBDQUEwQyxtQkFBbUIsa0NBQWtDLGlCQUFpQixzQkFBc0IsWUFBWSxFQUFFLCtDQUErQyw2QkFBNkIsdURBQXVELCtCQUErQixtSEFBbUgsbURBQW1ELGdJQUFnSSx1Q0FBdUMsT0FBTywyQkFBMkIsNEZBQTRGLDRGQUE0RixTQUFTLFFBQVEsY0FBYyxnQ0FBZ0Msd0NBQXdDLGNBQWMscVBBQXFQLGdCQUFnQiw4QkFBOEIsd0NBQXdDLGdDQUFnQyxxUEFBcVAsaUJBQWlCLEdBQUcsR0FBRyxFQUFFLGtGQUFrRix1QkFBdUIsYUFBYSw4QkFBOEIsc0JBQXNCLG1CQUFtQixnQ0FBZ0MsZ0JBQWdCLGtCQUFrQix1TUFBdU0sR0FBRyxFQUFFLHNCQUFzQix1QkFBdUIsYUFBYSxnSEFBZ0gsV0FBVyxZQUFZLFlBQVksWUFBWSxXQUFXLGtCQUFrQixnQkFBZ0IsV0FBVyxVQUFVLDJCQUEyQixZQUFZLFVBQVUsV0FBVyxpQkFBaUIsZUFBZSxXQUFXLG9CQUFvQixFQUFFLG1GQUFtRix1QkFBdUIsYUFBYSwyQ0FBMkMsb0JBQW9CLGlEQUFpRCxzQkFBc0IsaUNBQWlDLGNBQWMsbUJBQW1CLDBCQUEwQixZQUFZLEVBQUUsa0JBQWtCLEtBQUssWUFBWSxXQUFXLEtBQUssd0JBQXdCLHdCQUF3Qix5Q0FBeUMsdVVBQXVVLEVBQUUscUNBQXFDLHVCQUF1QixhQUFhLCtDQUErQywwQkFBMEIsb0VBQW9FLGFBQWEsdUJBQXVCLDRCQUE0QixFQUFFLHVJQUF1SSxFQUFFLG1DQUFtQyx1QkFBdUIsYUFBYSxXQUFXLDJIQUEySCxHQUFHLHVCQUF1QixhQUFhLHNFQUFzRSw0QkFBNEIscUJBQXFCLGVBQWUsdURBQXVELDJCQUEyQixLQUFLLEVBQUUsK0RBQStELHVCQUF1QixhQUFhLHFCQUFxQix5QkFBeUIseUNBQXlDLG1DQUFtQyxxQkFBcUIsd0NBQXdDLFdBQVcsZ0JBQWdCLFdBQVcsMENBQTBDLFNBQVMsc0NBQXNDLHNCQUFzQixrQ0FBa0MsV0FBVyxXQUFXLFNBQVMscUJBQXFCLGtDQUFrQyxXQUFXLHFCQUFxQixTQUFTLHlDQUF5QyxxREFBcUQsOEJBQThCLHFFQUFxRSxpQkFBaUIsV0FBVyxLQUFLLGNBQWMsd0NBQXdDLFNBQVMseUJBQXlCLDBCQUEwQiw0QkFBNEIsbUJBQW1CLGtCQUFrQiwyQkFBMkIsaUNBQWlDLDJDQUEyQyw0REFBNEQscUJBQXFCLDBCQUEwQixnREFBZ0Qsb0JBQW9CLG1RQUFtUSx5Q0FBeUMsb0JBQW9CLGlCQUFpQixXQUFXLEtBQUssa0JBQWtCLGtCQUFrQix1Q0FBdUMsdUJBQXVCLCtDQUErQyxvQkFBb0IsaUJBQWlCLFdBQVcsS0FBSyxrQkFBa0Isa0JBQWtCLGdFQUFnRSxXQUFXLG1CQUFtQixVQUFVLE9BQU8sc0dBQXNHLGNBQWMsZUFBZSxnQkFBZ0IsNEZBQTRGLEVBQUUsZ0JBQWdCLHVCQUF1QixhQUFhLCtaQUErWiwwQkFBMEIscUZBQXFGLG1CQUFtQixZQUFZLHlGQUF5RixNQUFNLGlDQUFpQyxZQUFZLEVBQUUsY0FBYywwREFBMEQsSUFBSSxLQUFLLGtCQUFrQiwwRUFBMEUsS0FBSyxvQkFBb0IsMkJBQTJCLCtCQUErQixxQkFBcUIsdUhBQXVILGlJQUFpSSxnQ0FBZ0MsTUFBTSxzQ0FBc0MsV0FBVywrSEFBK0gsS0FBSyxRQUFRLG9CQUFvQix5SEFBeUgsdUJBQXVCLDBFQUEwRSxLQUFLLDBEQUEwRCx3Q0FBd0Msa0hBQWtILHVOQUF1TixXQUFXLFFBQVEsV0FBVyxvSUFBb0ksdUVBQXVFLHlSQUF5UixnSUFBZ0ksWUFBWSx5SUFBeUksbUJBQW1CLDhDQUE4QyxvREFBb0Qsc0JBQXNCLGFBQWEsbURBQW1ELGtEQUFrRCx1RkFBdUYsd0JBQXdCLDREQUE0RCxpQ0FBaUMsMEJBQTBCLGtCQUFrQixnQ0FBZ0MsdUJBQXVCLEVBQUUsY0FBYyxhQUFhLGdIQUFnSCw2QkFBNkIsdUJBQXVCLEVBQUUsY0FBYyxhQUFhLG1IQUFtSCxpQkFBaUIsMkJBQTJCLFdBQVcsaURBQWlELFNBQVMsZUFBZSxVQUFVLG9OQUFvTixNQUFNLFFBQVEsd0VBQXdFLHVCQUF1QixpREFBaUQsNkNBQTZDLDRCQUE0Qix1QkFBdUIsY0FBYyxvQkFBb0IsNEJBQTRCLHVCQUF1QixjQUFjLG9CQUFvQixpQkFBaUIseUJBQXlCLHNFQUFzRSxrQkFBa0IscUJBQXFCLDZCQUE2QixFQUFFLDBCQUEwQixRQUFRLFdBQVcsS0FBSyxrREFBa0QsMEJBQTBCLFVBQVUsNkdBQTZHLDhCQUE4QixnQkFBZ0Isc0lBQXNJLHFKQUFxSixjQUFjLG1CQUFtQixvREFBb0QsY0FBYywyQkFBMkIsZ0VBQWdFLGlCQUFpQixLQUFLLGVBQWUsS0FBSyxhQUFhLFdBQVcsaUJBQWlCLEtBQUssZUFBZSxLQUFLLE1BQU0sUUFBUSxRQUFRLFdBQVcseUNBQXlDLGlCQUFpQixjQUFjLDBDQUEwQyxRQUFRLG9CQUFvQixzRUFBc0UsS0FBSyxlQUFlLGlCQUFpQixjQUFjLHNEQUFzRCx5QkFBeUIsNkNBQTZDLG9DQUFvQyx1SEFBdUgsRUFBRSx1QkFBdUIsb0VBQW9FLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixhQUFhLEVBQUUsMkNBQTJDLGtGQUFrRixpQkFBaUIsS0FBSyxlQUFlLHVEQUF1RCxLQUFLLGVBQWUsOEJBQThCLEtBQUssZUFBZSxLQUFLLFNBQVMsYUFBYSxpQkFBaUIsS0FBSyxLQUFLLFdBQVcsaUJBQWlCLEtBQUssS0FBSyxxQkFBcUIsNEJBQTRCLHlEQUF5RCxrRUFBa0Usc0NBQXNDLGtDQUFrQywrQ0FBK0MscUJBQXFCLEtBQUssS0FBSyw2QkFBNkIsMElBQTBJLFNBQVMsZ0JBQWdCLDZCQUE2QixrQkFBa0IsRUFBRSx1QkFBdUIsNERBQTRELEVBQUUsVUFBVSxFQUFFLDJCQUEyQixPQUFPLHVWQUF1VixxQkFBcUIsS0FBSyxVQUFVLEtBQUssVUFBVSxtSEFBbUgsNEVBQTRFLGlHQUFpRyxpQkFBaUIsb0NBQW9DLDZCQUE2QiwwQkFBMEIsd0JBQXdCLE9BQU8sdVZBQXVWLHFCQUFxQixLQUFLLFVBQVUsS0FBSyxVQUFVLG9IQUFvSCw2RUFBNkUsaUdBQWlHLHVCQUF1Qiw0QkFBNEIsaUJBQWlCLHFCQUFxQixrQkFBa0IseUVBQXlFLG1CQUFtQixZQUFZLHlCQUF5QixrQ0FBa0Msa0JBQWtCLHVIQUF1SCxpUkFBaVIsTUFBTSxhQUFhLFFBQVEsV0FBVywrRUFBK0Usc0NBQXNDLDZDQUE2QyxLQUFLLE9BQU8sVUFBVSwrQ0FBK0MsaUZBQWlGLDhEQUE4RCxTQUFTLHFCQUFxQixFQUFFLDJDQUEyQyx1QkFBdUIsNEVBQTRFLFNBQVMsZ0JBQWdCLG1KQUFtSix1Q0FBdUMsWUFBWSxnR0FBZ0csNEJBQTRCLHVOQUF1TixLQUFLLDJIQUEySCw4QkFBOEIsME5BQTBOLHVCQUF1QiwwREFBMEQsRUFBRSxFQUFFLG9EQUFvRCw4RUFBOEUsRUFBRSxxRUFBcUUscUJBQXFCLHVMQUF1TCx1Q0FBdUMsNE1BQTRNLG1HQUFtRyxZQUFZLHdoQkFBd2hCLG9HQUFvRyx3Q0FBd0MsWUFBWSwyQkFBMkIsOEJBQThCLEdBQUcsc01BQXNNLGFBQWEsK0hBQStILHVDQUF1Qyw2QkFBNkIsMENBQTBDLHdCQUF3QixnQkFBZ0IsRUFBRSxpS0FBaUssaVFBQWlRLG9HQUFvRyxLQUFLLGtCQUFrQix3QkFBd0IseUJBQXlCLDJCQUEyQixxSUFBcUksSUFBSSxnQkFBZ0IsbUJBQW1CLHFCQUFxQiwyQkFBMkIsMkRBQTJELHdCQUF3QixpREFBaUQsbVJBQW1SLG1EQUFtRCxpVkFBaVYsRUFBRSxnQkFBZ0IsMkJBQTJCLHlCQUF5QixjQUFjLHNCQUFzQixxQ0FBcUMsMEJBQTBCLGdDQUFnQyxTQUFTLGVBQWUsaUNBQWlDLGtCQUFrQixhQUFhLGVBQWUsaThCQUFpOEIscURBQXFELDJJQUEySSxtREFBbUQscURBQXFELDJJQUEySSxxQ0FBcUMsZ1FBQWdRLGdCQUFnQixpRkFBaUYsNENBQTRDLGdEQUFnRCxNQUFNLHVCQUF1Qix5R0FBeUcsdUtBQXVLLG1NQUFtTSw0RkFBNEYsb0ZBQW9GLGdEQUFnRCxpSEFBaUgsNkNBQTZDLDBCQUEwQixNQUFNLHVCQUF1Qix5R0FBeUcsdUtBQXVLLG1NQUFtTSw0RkFBNEYsb0ZBQW9GLGdEQUFnRCxpSEFBaUgsMkNBQTJDLDRCQUE0QixnQkFBZ0IsK0ZBQStGLGdCQUFnQiwwQkFBMEIsa0RBQWtELEdBQUcsRUFBRSw4UkFBOFIsdUJBQXVCLGFBQWEscUJBQXFCLDRCQUE0QiwrQkFBK0IscUtBQXFLLEVBQUUsZ0JBQWdCLHVCQUF1QixhQUFhLHdCQUF3QixRQUFRLFFBQVEsNkJBQTZCLGlCQUFpQixlQUFlLGlCQUFpQixXQUFXLHNCQUFzQiwwSUFBMEksT0FBTyxzREFBc0Qsd0NBQXdDLEdBQUcsdUJBQXVCLGFBQWEsZ0hBQWdILFdBQVcsb0VBQW9FLFNBQVMsNFhBQTRYLHlDQUF5QywrQkFBK0IsZ0RBQWdELDBCQUEwQixZQUFZLEVBQUUsa0JBQWtCLElBQUksRUFBRSx5R0FBeUcsdUNBQXVDLHVFQUF1RSxxQkFBcUIsRUFBRSw0T0FBNE8sdUJBQXVCLGFBQWEsMkRBQTJELGdCQUFnQixFQUFFLGlFQUFpRSxXQUFXLHlGQUF5RixXQUFXLGtIQUFrSCxZQUFZLHNFQUFzRSxnQkFBZ0IsaURBQWlELGdCQUFnQixpREFBaUQsYUFBYSxTQUFTLGdDQUFnQyxjQUFjLGdDQUFnQyxlQUFlLGdGQUFnRixhQUFhLGlEQUFpRCxpQkFBaUIsa0JBQWtCLDZFQUE2RSxFQUFFLG9EQUFvRCx1QkFBdUIsYUFBYSxnREFBZ0QsMEJBQTBCLGdCQUFnQiwyQkFBMkIsdUJBQXVCLGdJQUFnSSxpQ0FBaUMsS0FBSyxXQUFXLEtBQUssdUNBQXVDLHVCQUF1QixxREFBcUQsU0FBUyxrR0FBa0csbUVBQW1FLHVFQUF1RSxFQUFFLDBDQUEwQyx1QkFBdUIsYUFBYSw2RUFBNkUsd0JBQXdCLG9CQUFvQiwyQkFBMkIsR0FBRyxFQUFFLHNFQUFzRSx1QkFBdUIsYUFBYSwrS0FBK0ssTUFBTSx3Q0FBd0MsV0FBVyxtR0FBbUcsVUFBVSx3Q0FBd0MsV0FBVyx1REFBdUQsb0VBQW9FLGlCQUFpQixRQUFRLDBDQUEwQyxnRUFBZ0UsaUJBQWlCLFFBQVEsMENBQTBDLGdFQUFnRSxpQkFBaUIsVUFBVSxxRkFBcUYsT0FBTyw2Q0FBNkMsT0FBTyw2Q0FBNkMsV0FBVywwQ0FBMEMsR0FBRyxTQUFTLHlHQUF5RyxRQUFRLHVHQUF1RyxrQkFBa0Isa0JBQWtCLGlEQUFpRCxRQUFRLEVBQUUsNENBQTRDLHdCQUF3QixvQ0FBb0MsY0FBYyw2REFBNkQsSUFBSSxLQUFLLFlBQVkscUJBQXFCLFNBQVMsc0JBQXNCLHFCQUFxQixnQkFBZ0IseURBQXlELDRCQUE0QixJQUFJLGNBQWMsb0JBQW9CLElBQUksaUJBQWlCLFNBQVMsV0FBVywyQ0FBMkMsUUFBUSxRQUFRLCtDQUErQyxnQkFBZ0IsMkJBQTJCLGlCQUFpQix5SUFBeUksaUZBQWlGLDhEQUE4RCxVQUFVLGtFQUFrRSw4REFBOEQscUZBQXFGLHFDQUFxQyxtQkFBbUIsZ0JBQWdCLDRCQUE0QiwrQkFBK0IsYUFBYSxrQkFBa0IsOEJBQThCLG9HQUFvRyxNQUFNLHFCQUFxQiwwQkFBMEIsUUFBUSxRQUFRLElBQUksS0FBSyxtQ0FBbUMsUUFBUSxJQUFJLG9GQUFvRiwwR0FBMEcsdUJBQXVCLEtBQUssOEJBQThCLDBEQUEwRCxtQkFBbUIsZ0NBQWdDLGdCQUFnQixzQ0FBc0MsMEJBQTBCLGlCQUFpQiw0REFBNEQsV0FBVyxRQUFRLE1BQU0sMERBQTBELGdCQUFnQixPQUFPLGFBQWEsTUFBTSxvREFBb0QsT0FBTyxPQUFPLDZEQUE2RCxXQUFXLFFBQVEsTUFBTSx3REFBd0Qsa0JBQWtCLE9BQU8sYUFBYSxNQUFNLG9EQUFvRCxPQUFPLFdBQVcsRUFBRSx3SUFBd0ksdUJBQXVCLGFBQWEsOEZBQThGLHFCQUFxQixTQUFTLCtDQUErQyxTQUFTLHNDQUFzQyxRQUFRLGdGQUFnRixRQUFRLDZDQUE2QyxRQUFRLDZDQUE2QyxTQUFTLDZGQUE2RixVQUFVLHlEQUF5RCxJQUFJLDBDQUEwQyxJQUFJLDBDQUEwQyxVQUFVLHVGQUF1RixVQUFVLHNGQUFzRixPQUFPLCtGQUErRixPQUFPLCtGQUErRixzQkFBc0IsRUFBRSxFQUFFLHlFQUF5RSx1QkFBdUIsYUFBYSx3REFBd0QsNEJBQTRCLFFBQVEsa0VBQWtFLGlFQUFpRSxXQUFXLHFEQUFxRCx1Q0FBdUMsTUFBTSxlQUFlLHlCQUF5QiwyQ0FBMkMsK0RBQStELCtEQUErRCxFQUFFLGtEQUFrRCx1QkFBdUIsYUFBYSx1SEFBdUgsa0JBQWtCLGdCQUFnQiwyQkFBMkIsa0JBQWtCLDhCQUE4QixvRkFBb0YsV0FBVyxjQUFjLGlCQUFpQixJQUFJLEtBQUssMENBQTBDLDJEQUEyRCw4QkFBOEIsU0FBUyx3QkFBd0IsT0FBTyxtQ0FBbUMsR0FBRyxFQUFFLCtHQUErRyx1QkFBdUIsYUFBYSwwR0FBMEcsc0JBQXNCLGlDQUFpQyxNQUFNLFFBQVEsa0JBQWtCLEtBQUssa0JBQWtCLHVFQUF1RSxnQkFBZ0Isa0JBQWtCLE9BQU8sVUFBVSxTQUFTLDJEQUEyRCwwQ0FBMEMsT0FBTyxHQUFHLE1BQU0sdUJBQXVCLFNBQVMseUJBQXlCLFFBQVEseUJBQXlCLElBQUksS0FBSyx1QkFBdUIsU0FBUyx5QkFBeUIsU0FBUywyQkFBMkIsY0FBYyxxQkFBcUIsdUNBQXVDLHNCQUFzQiw4QkFBOEIsZ0JBQWdCLGFBQWEsZUFBZSxxRkFBcUYsdUNBQXVDLCtFQUErRSwrQkFBK0IsMkJBQTJCLGdDQUFnQyxhQUFhLHFCQUFxQixjQUFjLDJXQUEyVyxpQkFBaUIsdUJBQXVCLE1BQU0sdUJBQXVCLFFBQVEsaUVBQWlFLEVBQUUsZ0NBQWdDLHlDQUF5QyxvR0FBb0csMkdBQTJHLGdDQUFnQyxxQkFBcUIsZ0NBQWdDLEVBQUUsNEJBQTRCLFFBQVEsV0FBVyxLQUFLLE9BQU8sa0JBQWtCLGlCQUFpQixxREFBcUQsK0RBQStELGdDQUFnQyxLQUFLLEVBQUUsZ0dBQWdHLHVCQUF1QixhQUFhLFdBQVcsMk9BQTJPLEVBQUUsdUhBQXVILHVCQUF1QixhQUFhLGtFQUFrRSxXQUFXLFNBQVMsa0NBQWtDLGNBQWMscURBQXFELGNBQWMsZ0RBQWdELFNBQVMsa0JBQWtCLGVBQWUsaUVBQWlFLGFBQWEsb0ZBQW9GLGdCQUFnQixpREFBaUQsYUFBYSxnRkFBZ0YsSUFBSSwwREFBMEQsVUFBVSwyRkFBMkYsSUFBSSx1REFBdUQsVUFBVSwyRkFBMkYsYUFBYSw4QkFBOEIsU0FBUyxzRkFBc0Ysb0JBQW9CLEVBQUUsNERBQTRELHVCQUF1QixhQUFhLFdBQVcsa0dBQWtHLEdBQUcsdUJBQXVCLGFBQWEseUpBQXlKLDBCQUEwQiw4QkFBOEIseUJBQXlCLFdBQVcsS0FBSyxXQUFXLHFPQUFxTyxhQUFhLDhGQUE4RixhQUFhLGlDQUFpQywwQ0FBMEMseUJBQXlCLGlDQUFpQyx3Q0FBd0Msc0lBQXNJLGNBQWMsZ0hBQWdILG9LQUFvSyxnQkFBZ0IsNkJBQTZCLEVBQUUsK0lBQStJLHVCQUF1QixhQUFhLGdhQUFnYSxzQkFBc0IsOEJBQThCLHVNQUF1TSw0S0FBNEssU0FBUyxJQUFJLGVBQWUseUlBQXlJLGtCQUFrQixtSUFBbUksK0JBQStCLFlBQVksR0FBRyw0Q0FBNEMsY0FBYyxpQ0FBaUMsZUFBZSxxQkFBcUIsOENBQThDLHlGQUF5RixNQUFNLGdCQUFnQiw2Q0FBNkMsS0FBSywwREFBMEQsNEJBQTRCLHFCQUFxQixrQ0FBa0MsbURBQW1ELE1BQU0sRUFBRSxvS0FBb0ssWUFBWSxnQ0FBZ0MsMEJBQTBCLDRCQUE0QixNQUFNLGdDQUFnQyxnSUFBZ0ksOENBQThDLGNBQWMsbUNBQW1DLE9BQU8sZ0JBQWdCLG9CQUFvQixvQ0FBb0MsNkJBQTZCLElBQUksV0FBVyxTQUFTLGdCQUFnQiwrREFBK0Qsc0ZBQXNGLEVBQUUsNEJBQTRCLHNGQUFzRiw0QkFBNEIsNkJBQTZCLDJCQUEyQix1RkFBdUYsRUFBRSxrQkFBa0Isb0VBQW9FLGtFQUFrRSx5Q0FBeUMscUJBQXFCLGdDQUFnQyxvRkFBb0YsK0ZBQStGLFdBQVcsNkJBQTZCLFFBQVEsV0FBVyxLQUFLLCtCQUErQixrQkFBa0Isd0RBQXdELHFCQUFxQixJQUFJLHVEQUF1RCxXQUFXLDBCQUEwQixRQUFRLFdBQVcsS0FBSywyRUFBMkUsVUFBVSxvREFBb0QscUJBQXFCLCtCQUErQixvQkFBb0IsK0NBQStDLG1CQUFtQixrQkFBa0Isc0NBQXNDLEVBQUUsRUFBRSxzQkFBc0IsbUJBQW1CLDZCQUE2Qiw4QkFBOEIsS0FBSyx3QkFBd0IsbUJBQW1CLCtDQUErQyxFQUFFLHNCQUFzQixtQkFBbUIsK0JBQStCLHFJQUFxSSw2REFBNkQsNERBQTRELG1FQUFtRSxtQkFBbUIsb0RBQW9ELHFEQUFxRCxFQUFFLGNBQWMsb0NBQW9DLCtEQUErRCxZQUFZLDBGQUEwRiw4RUFBOEUsRUFBRSxzQkFBc0Isc0NBQXNDLDZCQUE2QixtREFBbUQsb0VBQW9FLDhJQUE4SSxnQkFBZ0IsV0FBVyxnQkFBZ0IsY0FBYyxLQUFLLCtEQUErRCw2QkFBNkIsZ0VBQWdFLG9DQUFvQywyREFBMkQsaUJBQWlCLDZDQUE2Qyx1Q0FBdUMsRUFBRSwrRkFBK0YsMEZBQTBGLFFBQVEsNEJBQTRCLHlCQUF5QixvQ0FBb0MsK0RBQStELCtDQUErQyw2RkFBNkYsaUJBQWlCLHdGQUF3RixrQkFBa0IsMkJBQTJCLDRCQUE0Qix5QkFBeUIsK0NBQStDLG1CQUFtQix5QkFBeUIsaUNBQWlDLG9DQUFvQywrREFBK0QseUJBQXlCLG1EQUFtRCxFQUFFLFNBQVMsOENBQThDLDJJQUEySSxxQkFBcUIscUVBQXFFLDhCQUE4QixpTEFBaUwsaUZBQWlGLCtDQUErQyxpRkFBaUYsNkRBQTZELEtBQUssaUlBQWlJLFFBQVEsc0hBQXNILHlCQUF5QixzSEFBc0gsdURBQXVELCtGQUErRixFQUFFLGtEQUFrRCxrQ0FBa0MsdUJBQXVCLDBCQUEwQixzRUFBc0UsRUFBRSxVQUFVLGtCQUFrQixpSkFBaUosa0JBQWtCLEVBQUUsc0VBQXNFLHdDQUF3Qyx3QkFBd0IsWUFBWSxzQkFBc0IsZ0JBQWdCLGdHQUFnRyxtQkFBbUIsaURBQWlELDBCQUEwQixFQUFFLHVCQUF1QiwyREFBMkQsbUNBQW1DLG9GQUFvRixFQUFFLDBCQUEwQixHQUFHLE9BQU8sRUFBRSwrVUFBK1UsdUJBQXVCLGFBQWEsMkNBQTJDLHdCQUF3QixZQUFZLGVBQWUsS0FBSyxnQkFBZ0IsdUZBQXVGLEtBQUssY0FBYywwQkFBMEIsUUFBUSxXQUFXLEtBQUssNENBQTRDLG1FQUFtRSxNQUFNLFdBQVcsS0FBSyxpQkFBaUIsZUFBZSx1REFBdUQsY0FBYyxZQUFZLHNCQUFzQixtQkFBbUIsNENBQTRDLElBQUksaURBQWlELEtBQUsseUJBQXlCLElBQUksaURBQWlELElBQUksNkJBQTZCLEVBQUUscUNBQXFDLHVCQUF1QixhQUFhLGdEQUFnRCwwQkFBMEIsNkJBQTZCLDhJQUE4SSxnQkFBZ0IsaUpBQWlKLDZCQUE2QixvRkFBb0YsNkJBQTZCLHNJQUFzSSxLQUFLLHlCQUF5QixhQUFhLFdBQVcsbURBQW1ELFVBQVUsTUFBTSxrQkFBa0Isc0JBQXNCLE1BQU0sWUFBWSxNQUFNLHNCQUFzQixhQUFhLFdBQVcsdURBQXVELFlBQVksZUFBZSxhQUFhLFFBQVEsV0FBVyw2R0FBNkcsS0FBSyxNQUFNLFFBQVEsV0FBVyxtRkFBbUYsNEJBQTRCLE1BQU0sK0VBQStFLFFBQVEsV0FBVyxlQUFlLDJDQUEyQyxRQUFRLFdBQVcsc0NBQXNDLHlCQUF5QixXQUFXLG1CQUFtQixXQUFXLDZDQUE2Qyw2QkFBNkIsa0JBQWtCLDBCQUEwQiwyRUFBMkUsZ0JBQWdCLG1CQUFtQixnQ0FBZ0MsaUJBQWlCLE9BQU8seURBQXlELHVGQUF1RixzQkFBc0IsNEZBQTRGLEtBQUssd0JBQXdCLDBCQUEwQixFQUFFLHFDQUFxQyx1QkFBdUIsYUFBYSx3QkFBd0IsaURBQWlELDBCQUEwQiwwQkFBMEIsMEJBQTBCLG1EQUFtRCxHQUFHLHVCQUF1QixhQUFhLFdBQVcsa0pBQWtKLEVBQUUsK0RBQStELHVCQUF1QixhQUFhLCtOQUErTix3QkFBd0IsdURBQXVELG9CQUFvQixNQUFNLFdBQVcsS0FBSyw0QkFBNEIsVUFBVSx5QkFBeUIsbUJBQW1CLHNEQUFzRCxzQ0FBc0MsK0NBQStDLHVCQUF1QixPQUFPLGdCQUFnQixpQkFBaUIseUNBQXlDLDhCQUE4Qix3S0FBd0ssK0NBQStDLHlJQUF5SSxtQkFBbUIsc0JBQXNCLHlNQUF5TSx3RkFBd0YsNkpBQTZKLDZEQUE2RCxvR0FBb0csRUFBRSxtQkFBbUIsK0JBQStCLGFBQWEsdUdBQXVHLG9KQUFvSixrREFBa0Qsd0ZBQXdGLEVBQUUsbUJBQW1CLHlJQUF5SSxtSkFBbUosNENBQTRDLG9GQUFvRixFQUFFLG1CQUFtQixzSUFBc0ksOElBQThJLG1CQUFtQixvREFBb0QsUUFBUSxNQUFNLFVBQVUsbUJBQW1CLFFBQVEsRUFBRSxVQUFVLG1CQUFtQixxR0FBcUcsTUFBTSxpQkFBaUIsdUlBQXVJLGtLQUFrSyxtSUFBbUksYUFBYSwwQkFBMEIsNERBQTRELFFBQVEsMkJBQTJCLGlCQUFpQixNQUFNLFNBQVMsb0JBQW9CLFFBQVEsR0FBRyxtRUFBbUUsMElBQTBJLGFBQWEsMEJBQTBCLGtGQUFrRixFQUFFLG1CQUFtQiwwRUFBMEUsb0JBQW9CLHVFQUF1RSw4QkFBOEIsc0JBQXNCLHNCQUFzQixTQUFTLGNBQWMsWUFBWSxZQUFZLFFBQVEsTUFBTSxNQUFNLCtLQUErSyx5Q0FBeUMsdUNBQXVDLHVCQUF1QixZQUFZLGlDQUFpQyx1S0FBdUssNEZBQTRGLGdLQUFnSyw4Q0FBOEMsa0tBQWtLLG1CQUFtQiwySUFBMkksMkVBQTJFLHFEQUFxRCwwR0FBMEcsNkVBQTZFLG9GQUFvRixFQUFFLG1CQUFtQixrSUFBa0kseUVBQXlFLDRDQUE0QywwR0FBMEcsNkVBQTZFLGtGQUFrRixFQUFFLEdBQUcsRUFBRSxtTEFBbUwsdUJBQXVCLGFBQWEsOEpBQThKLGdCQUFnQiw2R0FBNkcsNEJBQTRCLGVBQWUsMENBQTBDLFFBQVEsV0FBVyx5RUFBeUUscUJBQXFCLGlEQUFpRCxLQUFLLDhCQUE4Qiw0Q0FBNEMsZ0hBQWdILEtBQUssNEVBQTRFLDBEQUEwRCw0QkFBNEIsS0FBSyxzQ0FBc0MsbUNBQW1DLFFBQVEsV0FBVyw2Q0FBNkMsNkJBQTZCLHVEQUF1RCxPQUFPLDJCQUEyQixnQkFBZ0IsNEhBQTRILG9CQUFvQixXQUFXLHVCQUF1Qix5QkFBeUIsd0NBQXdDLGdCQUFnQiwyRkFBMkYsS0FBSyxXQUFXLEtBQUssdUNBQXVDLCtMQUErTCwyQkFBMkIsZ0JBQWdCLDBHQUEwRyxNQUFNLDZCQUE2QixLQUFLLFlBQVksV0FBVyxLQUFLLG1DQUFtQyx5QkFBeUIsWUFBWSxJQUFJLEtBQUssbUNBQW1DLDhCQUE4QixpQkFBaUIsU0FBUyxnQkFBZ0IsK0hBQStILFdBQVcsS0FBSyxrQkFBa0IsZUFBZSw2Q0FBNkMsaURBQWlELDZCQUE2QixjQUFjLG9CQUFvQix1RUFBdUUsY0FBYyxXQUFXLHVDQUF1QyxnQkFBZ0IsNkNBQTZDLEtBQUssV0FBVyxvRUFBb0UsV0FBVyxLQUFLLFdBQVcsZ0JBQWdCLDJCQUEyQixXQUFXLGlDQUFpQywwQ0FBMEMsZ0JBQWdCLCtEQUErRCxpQ0FBaUMseUNBQXlDLHdCQUF3Qix3UEFBd1Asb0JBQW9CLCtDQUErQyxxREFBcUQsbUJBQW1CLGdGQUFnRixHQUFHLG9CQUFvQix5Q0FBeUMsbUNBQW1DLCtCQUErQixzQkFBc0IsV0FBVyxnQ0FBZ0MsbUJBQW1CLG1EQUFtRCxVQUFVLCtCQUErQixrQkFBa0IsOENBQThDLGFBQWEsa0NBQWtDLHlCQUF5Qix1REFBdUQsWUFBWSxpQ0FBaUMsMkJBQTJCLGtEQUFrRCxhQUFhLGtDQUFrQyxzQkFBc0IsK0NBQStDLGNBQWMsbUNBQW1DLHVCQUF1QixpREFBaUQsZ0JBQWdCLHFDQUFxQyx3QkFBd0IsaURBQWlELGlCQUFpQixzQ0FBc0MseUJBQXlCLDZDQUE2QywwQkFBMEIsK0NBQStDLHlDQUF5QywwRUFBMEUsMEJBQTBCLCtDQUErQyxvQ0FBb0Msa0NBQWtDLHNDQUFzQyw2Q0FBNkMsV0FBVyxnQ0FBZ0MsbUJBQW1CLHlEQUF5RCxVQUFVLCtCQUErQixrQkFBa0Isb0RBQW9ELGtCQUFrQix1Q0FBdUMsK0JBQStCLCtEQUErRCxrQkFBa0IsdUNBQXVDLGlDQUFpQyxnRUFBZ0UseUJBQXlCLDhDQUE4QyxzQ0FBc0MseUNBQXlDLDBCQUEwQiwrQ0FBK0Msd0NBQXdDLDJDQUEyQyxtQkFBbUIsd0NBQXdDLGdEQUFnRCwyRkFBMkYsYUFBYSw0QkFBNEIsY0FBYyxtQ0FBbUMsc0JBQXNCLCtDQUErQyxlQUFlLG9DQUFvQyx1QkFBdUIsaURBQWlELGFBQWEsa0NBQWtDLG9CQUFvQixnREFBZ0Qsb0JBQW9CLHlDQUF5QyxnREFBZ0QsK0VBQStFLHFCQUFxQiwwQ0FBMEMsZ0RBQWdELCtFQUErRSxvQkFBb0IseUNBQXlDLGdEQUFnRCwwRUFBMEUsb0JBQW9CLDBDQUEwQyx5QkFBeUIsK0JBQStCLFdBQVcseUNBQXlDLEtBQUsscUJBQXFCLEtBQUssa0NBQWtDLG1IQUFtSCx1QkFBdUIsZ0JBQWdCLHFDQUFxQyxnREFBZ0QsMkZBQTJGLGFBQWEsNkNBQTZDLGVBQWUsb0NBQW9DLDBCQUEwQixpQ0FBaUMsc0JBQXNCLDBKQUEwSixxQkFBcUIsMENBQTBDLGlDQUFpQyw0RUFBNEUsb0JBQW9CLHNFQUFzRSxrQkFBa0Isb0RBQW9ELEtBQUssV0FBVyw4RkFBOEYsU0FBUyxJQUFJLDRCQUE0QixvQkFBb0IseUNBQXlDLHlCQUF5Qiw0Q0FBNEMsZ0JBQWdCLEVBQUUsOEhBQThILHVCQUF1QixhQUFhLHVCQUF1QixFQUFFLGVBQWUsdUJBQXVCLGFBQWEsdUlBQXVJLHNCQUFzQiw4Q0FBOEMsa0NBQWtDLDhJQUE4SSx3SUFBd0kseUJBQXlCLHlDQUF5QyxZQUFZLFdBQVcsdUJBQXVCLFdBQVcsS0FBSyxXQUFXLHVCQUF1Qiw2R0FBNkcsY0FBYyxTQUFTLHdEQUF3RCxvTkFBb04sa0JBQWtCLGNBQWMsY0FBYyxXQUFXLGlDQUFpQyxTQUFTLFNBQVMsY0FBYyxhQUFhLGlCQUFpQixXQUFXLEtBQUssV0FBVyxnQ0FBZ0MsV0FBVyxrQkFBa0IsNkJBQTZCLEtBQUssd0JBQXdCLDJZQUEyWSw0RUFBNEUsZ0dBQWdHLDZIQUE2SCxhQUFhLGlCQUFpQixlQUFlLEtBQUssV0FBVyxrTEFBa0wsU0FBUyxtQ0FBbUMsOENBQThDLCtDQUErQyxXQUFXLGlCQUFpQixlQUFlLFNBQVMsTUFBTSx1R0FBdUcseUNBQXlDLEVBQUUsK0hBQStILHVCQUF1QixhQUFhLG9HQUFvRyxjQUFjLGtKQUFrSixrQkFBa0IsdUJBQXVCLGlCQUFpQiwrRUFBK0UsZ1BBQWdQLGlGQUFpRix3V0FBd1csa0ZBQWtGLCtHQUErRyxxQkFBcUIsb0xBQW9MLDBCQUEwQiw2QkFBNkIsV0FBVyw0RkFBNEYsc0JBQXNCLHNCQUFzQixhQUFhLHFFQUFxRSxrRkFBa0YsdUJBQXVCLHdCQUF3QiwwQ0FBMEMsMkJBQTJCLEVBQUUsMEJBQTBCLG9DQUFvQyxxQ0FBcUMsNEJBQTRCLHlDQUF5QywwREFBMEQsY0FBYywrSkFBK0osWUFBWSw4TEFBOEwsdUNBQXVDLDZEQUE2RCx3RkFBd0YsYUFBYSw0SUFBNEksMEJBQTBCLHVGQUF1RixXQUFXLHVIQUF1SCx5Q0FBeUMsaUxBQWlMLG9FQUFvRSxzRUFBc0Usa0NBQWtDLCtFQUErRSx3Q0FBd0MsMEhBQTBILHFEQUFxRCxLQUFLLDZDQUE2QywyQkFBMkIsRUFBRSwwQkFBMEIsbUJBQW1CLGVBQWUsZ0NBQWdDLFlBQVksV0FBVyxLQUFLLHNDQUFzQyxZQUFZLGNBQWMsNENBQTRDLFNBQVMsc0JBQXNCLHVEQUF1RCx1UEFBdVAsK0JBQStCLEtBQUssd0JBQXdCLG1EQUFtRCxnQkFBZ0Isc0JBQXNCLDhGQUE4Rix5QkFBeUIsNkJBQTZCLHFEQUFxRCxFQUFFLHFIQUFxSCxFQUFFLHdFQUF3RSx1QkFBdUIsYUFBYSxtSUFBbUksU0FBUywwQ0FBMEMsT0FBTywrR0FBK0csV0FBVyxrRkFBa0YsUUFBUSw4Q0FBOEMsUUFBUSxpQ0FBaUMsaUJBQWlCLEVBQUUsV0FBVyxTQUFTLGtDQUFrQyxjQUFjLDhDQUE4QyxVQUFVLHlGQUF5RixJQUFJLDhDQUE4QyxVQUFVLDJGQUEyRixTQUFTLGdCQUFnQixXQUFXLGlEQUFpRCxjQUFjLGdDQUFnQyxjQUFjLG1EQUFtRCxjQUFjLDhDQUE4QyxrQkFBa0IsRUFBRSwrRkFBK0YsdUJBQXVCLGFBQWEsV0FBVyxtRUFBbUUsR0FBRyx1QkFBdUIsYUFBYSw0SkFBNEosb0JBQW9CLGlCQUFpQixnQkFBZ0IsbUNBQW1DLGlCQUFpQixnQkFBZ0IscUhBQXFILDhCQUE4Qix5QkFBeUIscUNBQXFDLGdCQUFnQiwyQkFBMkIsc0JBQXNCLCtDQUErQyxhQUFhLHNCQUFzQiwrQkFBK0IsMkJBQTJCLFVBQVUsV0FBVyxLQUFLLHFCQUFxQix3QkFBd0IsNkJBQTZCLFFBQVEsMkdBQTJHLG1CQUFtQiw4RkFBOEYsRUFBRSxrSkFBa0osdUJBQXVCLGFBQWEsOFNBQThTLGNBQWMsYUFBYSxrQkFBa0IsMERBQTBELHVDQUF1QyxFQUFFLFFBQVEsZ0JBQWdCLDJEQUEyRCx5REFBeUQsZ0RBQWdELG9CQUFvQixvREFBb0QsOERBQThELHlDQUF5Qyw4Q0FBOEMsT0FBTyxVQUFVLG9EQUFvRCx5Q0FBeUMsdUJBQXVCLEVBQUUsc0JBQXNCLDRFQUE0RSxvQ0FBb0MsV0FBVyxLQUFLLFdBQVcsb0RBQW9ELFNBQVMsT0FBTyw2RUFBNkUsd0NBQXdDLHFCQUFxQixzR0FBc0csZ0ZBQWdGLDhCQUE4Qiw0QkFBNEIseUNBQXlDLHFCQUFxQixrREFBa0QsOERBQThELHVDQUF1Qyw4QkFBOEIsOEJBQThCLDZCQUE2Qiw4QkFBOEIsRUFBRSxzQkFBc0IsNEJBQTRCLGtCQUFrQixvR0FBb0csZ0JBQWdCLG9CQUFvQixxTEFBcUwseURBQXlELHlCQUF5QiwrQ0FBK0MsRUFBRSxtRUFBbUUscUNBQXFDLHlDQUF5QyxZQUFZLHVDQUF1Qyx5Q0FBeUMsa0dBQWtHLGdEQUFnRCwrQ0FBK0Msa0JBQWtCLEdBQUcsRUFBRSxvUEFBb1AsdUJBQXVCLGFBQWEsY0FBYyx3QkFBd0IsbUJBQW1CLHVDQUF1QyxLQUFLLG9CQUFvQiwyREFBMkQsbUJBQW1CLG9EQUFvRCxNQUFNLDhDQUE4QyxnQ0FBZ0MsV0FBVyxZQUFZLE1BQU0sNENBQTRDLFVBQVUsRUFBRSxPQUFPLHVCQUF1QixhQUFhLFdBQVcsb0RBQW9ELFVBQVUsT0FBTyxrQ0FBa0MscUZBQXFGLEVBQUUsaURBQWlELHVCQUF1QixhQUFhLCtCQUErQixXQUFXLFNBQVMsa0RBQWtELGNBQWMsbURBQW1ELGNBQWMsK0NBQStDLFlBQVksd0RBQXdELHFDQUFxQyxRQUFRLDZCQUE2Qiw0Q0FBNEMsaUJBQWlCLEVBQUUsNENBQTRDLGlCQUFpQixnQ0FBZ0MsY0FBYyxZQUFZLHNEQUFzRCxVQUFVLDBDQUEwQyxrQkFBa0IsRUFBRSwwQkFBMEIsdUJBQXVCLGFBQWEsc0hBQXNILHNCQUFzQiwwQkFBMEIsV0FBVyxLQUFLLHVCQUF1QixtRkFBbUYsRUFBRSw2RkFBNkYsdUJBQXVCLGFBQWEsV0FBVyw4M0JBQTgzQixHQUFHLHVCQUF1QixhQUFhLCtJQUErSSwwQkFBMEIsa0JBQWtCLGdEQUFnRCxpREFBaUQsRUFBRSwwREFBMEQsaUJBQWlCLGdJQUFnSSxrQkFBa0IsOENBQThDLGlEQUFpRCxrQkFBa0IseUNBQXlDLGlDQUFpQyxXQUFXLEtBQUssV0FBVyxVQUFVLCtCQUErQixhQUFhLHFHQUFxRyxZQUFZLGdCQUFnQiwyQkFBMkIsZ0JBQWdCLDZCQUE2QixFQUFFLHNJQUFzSSx1QkFBdUIsYUFBYSx3UUFBd1Esb0JBQW9CLHdEQUF3RCxRQUFRLHVDQUF1QyxFQUFFLHVHQUF1RyxRQUFRLDRIQUE0SCxFQUFFLG9CQUFvQixvQkFBb0IsK0RBQStELHVCQUF1QixRQUFRLEVBQUUsdUJBQXVCLGdDQUFnQyxFQUFFLG9CQUFvQiw2RkFBNkYsK0NBQStDLGtDQUFrQyxrRkFBa0Ysd0VBQXdFLGdCQUFnQixPQUFPLG1FQUFtRSx5Q0FBeUMsaUJBQWlCLHNCQUFzQixhQUFhLHlHQUF5RyxxQkFBcUIsNkNBQTZDLHNEQUFzRCxPQUFPLGlEQUFpRCx1RUFBdUUsaUJBQWlCLFdBQVcsS0FBSyx3QkFBd0IsK0JBQStCLFNBQVMsT0FBTyxFQUFFLHNCQUFzQix3REFBd0QsUUFBUSx1Q0FBdUMsRUFBRSwyR0FBMkcsUUFBUSxtQ0FBbUMsRUFBRSwySUFBMkksUUFBUSxtQ0FBbUMsRUFBRSx1SEFBdUgsUUFBUSxtQ0FBbUMsRUFBRSw4RkFBOEYsb0JBQW9CLCtFQUErRSxRQUFRLDJEQUEyRCxFQUFFLFFBQVEscUNBQXFDLEVBQUUsb0JBQW9CLG1HQUFtRyxtSkFBbUosSUFBSSwwREFBMEQsNERBQTRELFVBQVUsbUVBQW1FLFVBQVUsa0NBQWtDLE9BQU8sMkVBQTJFLDJEQUEyRCxVQUFVLHNGQUFzRixVQUFVLDRCQUE0QixzQkFBc0IsaURBQWlELFdBQVcsS0FBSyxtQkFBbUIsMkJBQTJCLDJFQUEyRSxlQUFlLEVBQUUsMEJBQTBCLGdCQUFnQiwwQ0FBMEMsaUlBQWlJLG1GQUFtRixZQUFZLGdFQUFnRSw0SUFBNEksa0NBQWtDLG1FQUFtRSx5QkFBeUIsdUZBQXVGLDZDQUE2QyxrREFBa0QscUJBQXFCLHNCQUFzQixtQkFBbUIsdUJBQXVCLG9DQUFvQyw4Q0FBOEMseUJBQXlCLHlCQUF5QiwwR0FBMEcsdUpBQXVKLDRCQUE0QixtSUFBbUksY0FBYyx5QkFBeUIsVUFBVSxpQ0FBaUMsTUFBTSxnQ0FBZ0MsTUFBTSxnQ0FBZ0MsTUFBTSxnQ0FBZ0MsUUFBUSxRQUFRLFFBQVEsK0RBQStELGNBQWMsK0NBQStDLG9EQUFvRCx3Q0FBd0MsZ0RBQWdELEVBQUUsVUFBVSw0RUFBNEUscUNBQXFDLG1DQUFtQyxtQkFBbUIsRUFBRSxFQUFFLGdDQUFnQyxzQkFBc0IsY0FBYyxpQ0FBaUMsY0FBYyxrQ0FBa0MsY0FBYyxvQ0FBb0MsOENBQThDLDZOQUE2TixnRkFBZ0YsaVJBQWlSLG9EQUFvRCw0SkFBNEoseURBQXlELGlGQUFpRixzR0FBc0csRUFBRSxJQUFJLEVBQUUsc1BBQXNQLHVCQUF1QixhQUFhLHNFQUFzRSxjQUFjLGNBQWMsb0JBQW9CLHFDQUFxQyxjQUFjLGNBQWMseUJBQXlCLCtCQUErQixXQUFXLEtBQUssV0FBVyxTQUFTLFVBQVUsV0FBVyxtR0FBbUcscUJBQXFCLGdDQUFnQywwQ0FBMEMsV0FBVyxLQUFLLDhCQUE4QiwwQkFBMEIsZUFBZSxrREFBa0Qsd0JBQXdCLDJGQUEyRixFQUFFLHVEQUF1RCx1QkFBdUIsYUFBYSxzRkFBc0YsV0FBVyxrREFBa0QsVUFBVSxPQUFPLDJCQUEyQixJQUFJLFFBQVEsSUFBSSxtTUFBbU0sRUFBRSxtSUFBbUksdUJBQXVCLGFBQWEsV0FBVyw0QkFBNEIsa0ZBQWtGLFFBQVEsNkJBQTZCLDhCQUE4QixFQUFFLDhCQUE4QixrQkFBa0Isa0JBQWtCLEdBQUcsdUJBQXVCLGFBQWEseU1BQXlNLHFCQUFxQixTQUFTLG9EQUFvRCxPQUFPLHNGQUFzRixRQUFRLGdGQUFnRixVQUFVLFVBQVUsYUFBYSx1RkFBdUYsVUFBVSx3Q0FBd0MsS0FBSyx3Q0FBd0MsS0FBSyx3Q0FBd0MsVUFBVSxVQUFVLGFBQWEsdUZBQXVGLFVBQVUsd0NBQXdDLEtBQUssd0NBQXdDLEtBQUssd0NBQXdDLE9BQU8sMkNBQTJDLFVBQVUseURBQXlELE9BQU8sVUFBVSxVQUFVLHFCQUFxQixZQUFZLFVBQVUsMEJBQTBCLFdBQVcsSUFBSSxxQkFBcUIsNEJBQTRCLFlBQVksMERBQTBELHNCQUFzQixFQUFFLEVBQUUsNkpBQTZKLHVCQUF1QixhQUFhLDJGQUEyRixjQUFjLHVEQUF1RCxjQUFjLHVEQUF1RCx3QkFBd0IsY0FBYyxnQkFBZ0IseUpBQXlKLE9BQU8sdUNBQXVDLE9BQU8sUUFBUSxzQkFBc0IsZ0VBQWdFLGdDQUFnQyxNQUFNLGdEQUFnRCw2Q0FBNkMsV0FBVyxnSUFBZ0ksMEJBQTBCLHNCQUFzQixnREFBZ0QsNENBQTRDLFdBQVcsS0FBSyxlQUFlLGlCQUFpQixtQkFBbUIsa0ZBQWtGLG9HQUFvRyxxQkFBcUIsa0ZBQWtGLHVHQUF1RyxFQUFFLG1GQUFtRix1QkFBdUIsYUFBYSxXQUFXLG1FQUFtRSxHQUFHLGFBQWEsSUFBSSxhQUFhLElBQUksYUFBYSxLQUFLLElBQUksa0JBQWtCLElBQUksdUJBQXVCLElBQUksYUFBYSxJQUFJLGtCQUFrQixNQUFNLFdBQVcsR0FBRyxhQUFhLElBQUksYUFBYSxLQUFLLElBQUksYUFBYSxJQUFJLGtCQUFrQixJQUFJLHVCQUF1QixJQUFJLGFBQWEsSUFBSSxrQkFBa0IsTUFBTSxZQUFZLHNDQUFzQyxHQUFHLHVCQUF1QixhQUFhLHdJQUF3SSxrQkFBa0IsZ0JBQWdCLDJCQUEyQixpQkFBaUIsc0ZBQXNGLDJGQUEyRixJQUFJLEtBQUssK0NBQStDLGNBQWMsbUNBQW1DLHNKQUFzSixrQ0FBa0MsdUtBQXVLLGdCQUFnQixXQUFXLHFFQUFxRSw2REFBNkQsd0JBQXdCLE9BQU8sbUNBQW1DLEdBQUcsRUFBRSwrSEFBK0gsdUJBQXVCLGFBQWEsb1BBQW9QLGdCQUFnQiwrRUFBK0Usa0NBQWtDLG1GQUFtRiw2RUFBNkUsS0FBSywwQ0FBMEMsdUNBQXVDLHVDQUF1QyxjQUFjLE9BQU8sOENBQThDLHVMQUF1TCw2REFBNkQsK1VBQStVLHFFQUFxRSw4Q0FBOEMsb0RBQW9ELEVBQUUsT0FBTyxtQkFBbUIsaUJBQWlCLGdDQUFnQyxrR0FBa0csOERBQThELGdHQUFnRyx1Q0FBdUMsUUFBUSx5Q0FBeUMsb0JBQW9CLG9CQUFvQiwrRkFBK0Ysb0RBQW9ELGdFQUFnRSw0QkFBNEIsaUVBQWlFLGlDQUFpQyxpQ0FBaUMscURBQXFELGdDQUFnQyxtQkFBbUIsNkRBQTZELG9CQUFvQixPQUFPLGNBQWMsdUpBQXVKLEtBQUsseUtBQXlLLDBCQUEwQixnQkFBZ0Isb0JBQW9CLGtCQUFrQixTQUFTLFNBQVMsK0NBQStDLGlCQUFpQix5RkFBeUYsaUJBQWlCLG9FQUFvRSx5SkFBeUosMEJBQTBCLGdCQUFnQixNQUFNLGtCQUFrQixTQUFTLFNBQVMsK0NBQStDLGlCQUFpQix5RkFBeUYsaUJBQWlCLG9FQUFvRSxXQUFXLGtDQUFrQyxzQkFBc0IsNENBQTRDLHFDQUFxQyxzQkFBc0IsNkNBQTZDLEtBQUssb0dBQW9HLHNLQUFzSywwQkFBMEIsZ0JBQWdCLG1CQUFtQiw2REFBNkQsK0JBQStCLGlFQUFpRSwyQkFBMkIsd0tBQXdLLHFHQUFxRyxrRUFBa0UsY0FBYyxXQUFXLDhDQUE4QyxjQUFjLEtBQUssOENBQThDLGVBQWUsR0FBRyxjQUFjLG9DQUFvQyxpQ0FBaUMsYUFBYSxrQkFBa0IsMkNBQTJDLHFEQUFxRCxnQkFBZ0IsbUdBQW1HLGdEQUFnRCxnQ0FBZ0MsZ0JBQWdCLGlCQUFpQiw4Q0FBOEMsZ0NBQWdDLGdCQUFnQixxQkFBcUIsbUhBQW1ILGlFQUFpRSx5Q0FBeUMsbUhBQW1ILHlHQUF5RyxFQUFFLDJGQUEyRixFQUFFLFFBQVEsMEJBQTBCLG1CQUFtQixrQkFBa0IseUJBQXlCLDBCQUEwQixtQkFBbUIsa0JBQWtCLHlCQUF5Qiw0Q0FBNEMsc0RBQXNELGtGQUFrRix3REFBd0Qsa0JBQWtCLHlDQUF5Qyx1RUFBdUUsbURBQW1ELGlEQUFpRCxFQUFFLEVBQUUsV0FBVyxpQkFBaUIsb0JBQW9CLG1IQUFtSCw2QkFBNkIsZ0NBQWdDLFlBQVksa0JBQWtCLGdDQUFnQyxZQUFZLEVBQUUsME5BQTBOLHVCQUF1QixhQUFhLHdDQUF3QyxtQ0FBbUMsdUNBQXVDLFVBQVUsb0NBQW9DLHVDQUF1QyxVQUFVLDBCQUEwQixtQkFBbUIsK0NBQStDLDBCQUEwQixtQkFBbUIsOEJBQThCLG1DQUFtQyxTQUFTLGdEQUFnRCwyQkFBMkIsZUFBZSxtQ0FBbUMsNkNBQTZDLElBQUksa0NBQWtDLDRCQUE0QixNQUFNLGdDQUFnQyxjQUFjLGdDQUFnQyxzQ0FBc0MscUJBQXFCLHFCQUFxQixhQUFhLGtCQUFrQixTQUFTLGtDQUFrQyw0QkFBNEIsTUFBTSxnQ0FBZ0MsY0FBYyw4QkFBOEIscUJBQXFCLHFCQUFxQixhQUFhLG1CQUFtQixTQUFTLHNEQUFzRCwwQ0FBMEMsaUJBQWlCLEVBQUUsa0NBQWtDLHVCQUF1QixhQUFhLGtCQUFrQixXQUFXLHdQQUF3UCxFQUFFLHVIQUF1SCx1QkFBdUIsYUFBYSxzUkFBc1IsU0FBUywwQkFBMEIsU0FBUyw0RkFBNEYsT0FBTywyQ0FBMkMsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsUUFBUSxpQkFBaUIsUUFBUSxpQkFBaUIsVUFBVSwyQkFBMkIsRUFBRSx3QkFBd0IsU0FBUywwQkFBMEIsU0FBUyw4QkFBOEIsa0JBQWtCLGtFQUFrRSxNQUFNLDhCQUE4QixJQUFJLHFDQUFxQyxVQUFVLHFCQUFxQixJQUFJLEVBQUUsR0FBRyxTQUFTLFdBQVcseUVBQXlFLElBQUkscUNBQXFDLFVBQVUsd0VBQXdFLGFBQWEsVUFBVSxnQ0FBZ0MsU0FBUyw0RUFBNEUsZUFBZSxTQUFTLDBCQUEwQixVQUFVLGtFQUFrRSxTQUFTLHlCQUF5QixTQUFTLGlCQUFpQixTQUFTLGlCQUFpQixVQUFVLEVBQUUsVUFBVSxpQkFBaUIseUNBQXlDLFVBQVUsbUNBQW1DLGNBQWMsdUNBQXVDLGNBQWMsOENBQThDLFVBQVUseUNBQXlDLFlBQVksaUNBQWlDLFlBQVksOEJBQThCLGVBQWUsK0NBQStDLDJCQUEyQixFQUFFLHNOQUFzTix1QkFBdUIsYUFBYSxXQUFXLG1nQ0FBbWdDLEdBQUcsdUJBQXVCLGFBQWEsdUhBQXVILGtCQUFrQixnQkFBZ0IsMkJBQTJCLGlCQUFpQixrQ0FBa0MsVUFBVSxXQUFXLHNCQUFzQixrQ0FBa0MsZUFBZSx5Q0FBeUMsbUJBQW1CLGtpQkFBa2lCLGdCQUFnQixnQkFBZ0IsMkJBQTJCLHVFQUF1RSxzQkFBc0Isa0NBQWtDLDJCQUEyQix3QkFBd0IsT0FBTyw0QkFBNEIsR0FBRyxFQUFFLGdHQUFnRyx1QkFBdUIsYUFBYSx1UUFBdVEsY0FBYyxtQ0FBbUMsY0FBYyxnQkFBZ0IsZ0JBQWdCLHVFQUF1RSxvREFBb0QsWUFBWSxtQkFBbUIsd0JBQXdCLE9BQU8sV0FBVyxNQUFNLGdCQUFnQiw4Q0FBOEMsYUFBYSxpQkFBaUIsb0RBQW9ELDBCQUEwQixvTUFBb00sNEVBQTRFLHlMQUF5TCwyQkFBMkIsbUJBQW1CLG9EQUFvRCxpQkFBaUIsa0JBQWtCLDZNQUE2TSxrRkFBa0Ysc0dBQXNHLGFBQWEsNEdBQTRHLFlBQVksb05BQW9OLE9BQU8sdUNBQXVDLDRKQUE0SixrQkFBa0IsMkJBQTJCLGtCQUFrQiwrQkFBK0Isb0ZBQW9GLE1BQU0sK0NBQStDLE1BQU0sdUNBQXVDLHVEQUF1RCx1Q0FBdUMsK0JBQStCLEVBQUUsbURBQW1ELDJCQUEyQixLQUFLLHVEQUF1RCwwQkFBMEIsT0FBTyxRQUFRLDJIQUEySCwrRUFBK0UsZ0NBQWdDLGtCQUFrQixvREFBb0QsOENBQThDLFFBQVEsc0VBQXNFLCtGQUErRixrQkFBa0IsdURBQXVELHVDQUF1QyxzQ0FBc0MsRUFBRSwwQ0FBMEMsaUNBQWlDLE9BQU8saUVBQWlFLGdCQUFnQiw2R0FBNkcseUZBQXlGLHFCQUFxQiw2SEFBNkgsRUFBRSxzQkFBc0IsaUVBQWlFLDhCQUE4Qix3QkFBd0IsZUFBZSx3REFBd0Qsd0JBQXdCLHdEQUF3RCwrREFBK0QsZ0lBQWdJLG1DQUFtQywwREFBMEQseUJBQXlCLHVHQUF1RyxJQUFJLGtCQUFrQiw2QkFBNkIsYUFBYSxtQkFBbUIsNEJBQTRCLFVBQVUsNkJBQTZCLFNBQVMsRUFBRSxvQ0FBb0Msa0ZBQWtGLHlCQUF5Qix5REFBeUQsK0JBQStCLGNBQWMsNEJBQTRCLFVBQVUsK0dBQStHLGdDQUFnQyxFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsMkVBQTJFLCtFQUErRSxzREFBc0QsdUJBQXVCLDBDQUEwQyxRQUFRLGtDQUFrQyxpSkFBaUosRUFBRSxrQkFBa0Isb0RBQW9ELGVBQWUsNkNBQTZDLElBQUksTUFBTSw4QkFBOEIsd0JBQXdCLFFBQVEsc01BQXNNLGdCQUFnQixjQUFjLGdHQUFnRyxnQkFBZ0IsY0FBYyxxSEFBcUgsa0JBQWtCLHlFQUF5RSw4Q0FBOEMsRUFBRSxRQUFRLCtGQUErRix5RkFBeUYsZ0JBQWdCLDJGQUEyRixRQUFRLDBGQUEwRix5TEFBeUwsc0JBQXNCLG9DQUFvQyw2QkFBNkIsV0FBVyxLQUFLLFdBQVcsK0JBQStCLFNBQVMsa0ZBQWtGLGNBQWMsaUdBQWlHLCtHQUErRyx3REFBd0QseUJBQXlCLG1EQUFtRCw2RUFBNkUsWUFBWSxXQUFXLEtBQUssV0FBVyxPQUFPLG1CQUFtQixxQkFBcUIsYUFBYSxjQUFjLGdCQUFnQiwyQkFBMkIsSUFBSSxvQ0FBb0MseUNBQXlDLEVBQUUsNERBQTRELGtCQUFrQiwwREFBMEQsa0JBQWtCLHNCQUFzQixnREFBZ0Qsa0VBQWtFLGNBQWMsdUVBQXVFLHFCQUFxQixJQUFJLEVBQUUsbU1BQW1NLHVCQUF1QixhQUFhLHVCQUF1QixXQUFXLDZIQUE2SCxFQUFFLG1FQUFtRSx1QkFBdUIsYUFBYSwwTUFBME0sV0FBVyxxQkFBcUIsaUZBQWlGLHdJQUF3SSwrQkFBK0IsK0dBQStHLDBCQUEwQiwwRUFBMEUsK0JBQStCLFlBQVksR0FBRyxXQUFXLCtDQUErQyx5Q0FBeUMsb0ZBQW9GLGNBQWMsdUJBQXVCLGNBQWMsTUFBTSxrSkFBa0osOEdBQThHLDBEQUEwRCxjQUFjLG9DQUFvQyw4QkFBOEIseUJBQXlCLFdBQVcsb0RBQW9ELDZGQUE2RiwyQ0FBMkMsNEVBQTRFLFdBQVcsS0FBSyx1Q0FBdUMsc0VBQXNFLG1CQUFtQiw2REFBNkQsa0JBQWtCLGFBQWEsT0FBTyxnREFBZ0QsU0FBUyx5Q0FBeUMsNEZBQTRGLDRFQUE0RSxtQ0FBbUMsNEVBQTRFLDBCQUEwQixLQUFLLHdCQUF3QixzRUFBc0UseUJBQXlCLGlEQUFpRCx5QkFBeUIsK0NBQStDLEdBQUcseUNBQXlDLHFCQUFxQixFQUFFLDJMQUEyTCx1QkFBdUIsYUFBYSxxUEFBcVAsU0FBUyxrQkFBa0IsU0FBUyw0RkFBNEYsT0FBTywyQ0FBMkMsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsUUFBUSx5QkFBeUIsVUFBVSwyQkFBMkIsRUFBRSw0QkFBNEIsd0VBQXdFLGtCQUFrQixPQUFPLG1FQUFtRSxZQUFZLHFFQUFxRSxTQUFTLGdDQUFnQyxhQUFhLDBCQUEwQixjQUFjLHdDQUF3QyxVQUFVLDBFQUEwRSxJQUFJLHFDQUFxQyxVQUFVLHdFQUF3RSxVQUFVLHFCQUFxQixJQUFJLFdBQVcsV0FBVyxnQkFBZ0IsY0FBYyxrQ0FBa0MsY0FBYyxvREFBb0QsMkJBQTJCLEVBQUUsdUxBQXVMLHVCQUF1QixhQUFhLFdBQVcsc2dCQUFzZ0IsV0FBVywrTEFBK0wseURBQXlELEdBQUcsdUJBQXVCLGFBQWEseUhBQXlILGtCQUFrQixnQkFBZ0IsMkJBQTJCLG1CQUFtQixvQ0FBb0MsZ1JBQWdSLGdCQUFnQixnQkFBZ0IsMkJBQTJCLHVHQUF1Ryx3QkFBd0IsT0FBTyw0QkFBNEIsR0FBRyxFQUFFLGdHQUFnRyx1QkFBdUIsYUFBYSw4UEFBOFAsY0FBYyxnQkFBZ0IsZ0JBQWdCLDhDQUE4Qyw0QkFBNEIsbUxBQW1MLHNCQUFzQix5REFBeUQsZ0NBQWdDLDREQUE0RCwwQ0FBMEMsSUFBSSwyQ0FBMkMseUZBQXlGLGdIQUFnSCxRQUFRLGdGQUFnRiwwQkFBMEIsa0RBQWtELDhCQUE4QixVQUFVLDZCQUE2QixZQUFZLDhCQUE4QixzQkFBc0Isc0NBQXNDLGtCQUFrQix1Q0FBdUMsdU1BQXVNLG9JQUFvSSxnRUFBZ0UsaVJBQWlSLE9BQU8sNEVBQTRFLElBQUkseUNBQXlDLHFCQUFxQixxQkFBcUIsb0RBQW9ELDZIQUE2SCxnQ0FBZ0MsR0FBRyw4QkFBOEIsVUFBVSw2QkFBNkIsd0JBQXdCLEVBQUUseUxBQXlMLG9FQUFvRSxpQkFBaUIsSUFBSSxnQ0FBZ0MsaUJBQWlCLElBQUksK0JBQStCLG9GQUFvRixvRUFBb0UsMEJBQTBCLDBCQUEwQixpRUFBaUUsb0JBQW9CLEVBQUUsaUVBQWlFLG9CQUFvQixFQUFFLEtBQUssb0JBQW9CLDBCQUEwQixnQkFBZ0Isd0RBQXdELFFBQVEsK0NBQStDLEVBQUUsK0ZBQStGLG9CQUFvQiw4REFBOEQsdUNBQXVDLHFDQUFxQyxFQUFFLGlDQUFpQywwQkFBMEIsT0FBTywyREFBMkQsZ0JBQWdCLGVBQWUscUJBQXFCLHFCQUFxQixzRkFBc0YsRUFBRSxjQUFjLGdFQUFnRSxnQkFBZ0IsNkRBQTZELGdCQUFnQixlQUFlLHNHQUFzRyx1RkFBdUYsNERBQTRELDhDQUE4QyxxQkFBcUIscUJBQXFCLGdCQUFnQiwwTEFBMEwsaVhBQWlYLHlQQUF5UCx5RkFBeUYsc0NBQXNDLGFBQWEsb0ZBQW9GLFlBQVksbU9BQW1PLGtCQUFrQixrQkFBa0IsY0FBYyxpQkFBaUIsY0FBYyxnQkFBZ0IsY0FBYyxtQkFBbUIsUUFBUSxFQUFFLGNBQWMsbUNBQW1DLG9CQUFvQixRQUFRLGdIQUFnSCw4QkFBOEIscUZBQXFGLFFBQVEseURBQXlELEVBQUUsNkNBQTZDLGlIQUFpSCxnQkFBZ0IsdUZBQXVGLHNCQUFzQixpREFBaUQsY0FBYyxxQkFBcUIsZ0ZBQWdGLDZHQUE2Ryw4REFBOEQseUJBQXlCLHlEQUF5RCx5REFBeUQsMEVBQTBFLGdDQUFnQyxNQUFNLFdBQVcsS0FBSyxXQUFXLE9BQU8sMENBQTBDLGtHQUFrRyxlQUFlLDhCQUE4QixrREFBa0Qsa0RBQWtELDJDQUEyQyw2RUFBNkUsSUFBSSxFQUFFLHFOQUFxTix1QkFBdUIsd0NBQXdDLEVBQUUsMkVBQTJFLHVCQUF1QixhQUFhLFlBQVksaUVBQWlFLGtCQUFrQix3VkFBd1YsbUNBQW1DLEVBQUUsNkdBQTZHLCtDQUErQyxnQkFBZ0IsMkpBQTJKLGdPQUFnTyxpQkFBaUIscUVBQXFFLGVBQWUsMkVBQTJFLDRJQUE0SSx1REFBdUQsMEhBQTBILHFFQUFxRSxlQUFlLHlFQUF5RSwwSUFBMEksdURBQXVELDBIQUEwSCw0R0FBNEcsMEhBQTBILG1HQUFtRyw0REFBNEQseUJBQXlCLGtCQUFrQixpQkFBaUIsd0dBQXdHLGtEQUFrRCxxQ0FBcUMsd0NBQXdDLGlHQUFpRyxrREFBa0QsMkVBQTJFLHdDQUF3Qyw0RUFBNEUsdUJBQXVCLGdDQUFnQyx1Q0FBdUMsaUJBQWlCLGtXQUFrVyxtQ0FBbUMsd0NBQXdDLDZFQUE2RSxvQ0FBb0Msd0NBQXdDLHFGQUFxRixtQ0FBbUMsd0NBQXdDLGNBQWMsa0RBQWtELHFFQUFxRSxjQUFjLGtEQUFrRCxxRUFBcUUsdUJBQXVCLHdDQUF3QyxnRUFBZ0UsNE5BQTROLHNFQUFzRSxhQUFhLFVBQVUsNERBQTRELGNBQWMsVUFBVSw4REFBOEQsRUFBRSx1REFBdUQsdUJBQXVCLGFBQWEsV0FBVyxTQUFTLGtEQUFrRCxVQUFVLGtEQUFrRCxVQUFVLGtEQUFrRCw0REFBNEQsc0RBQXNELEdBQUcsdUJBQXVCLGFBQWEsV0FBVyx1SkFBdUosS0FBSyx5QkFBeUIsNEhBQTRILEdBQUcsdUJBQXVCLGFBQWEsV0FBVyxpSUFBaUksR0FBRyx1QkFBdUIsYUFBYSxXQUFXLDZJQUE2SSxHQUFHLHVCQUF1QixhQUFhLFdBQVcsNEVBQTRFLEdBQUcsdUJBQXVCLGFBQWEsV0FBVywwTUFBME0sR0FBRyx1QkFBdUIsYUFBYSw4SEFBOEgsbUNBQW1DLEdBQUcsdUJBQXVCLGFBQWEsbUdBQW1HLHlGQUF5RixXQUFXLEtBQUssV0FBVyxrQ0FBa0Msc0NBQXNDLEVBQUUsMG1CQUEwbUIsRUFBRSx1b0JBQXVvQix1QkFBdUIsYUFBYSxxQkFBcUIsZ0VBQWdFLHNDQUFzQyx1RUFBdUUsc0NBQXNDLDhCQUE4QixHQUFHLHVCQUF1QixhQUFhLDJCQUEyQix1REFBdUQsOEJBQThCLGlFQUFpRSw2QkFBNkIsd0RBQXdELDJCQUEyQixzREFBc0QsOEJBQThCLGlFQUFpRSw4QkFBOEIsMERBQTBELEdBQUcsdUJBQXVCLGFBQWEscURBQXFELGNBQWMsbUNBQW1DLGdCQUFnQixnQkFBZ0IsZ0JBQWdCLGlCQUFpQixRQUFRLHdFQUF3RSxtQkFBbUIsOEJBQThCLDBCQUEwQixjQUFjLHlCQUF5QixnQkFBZ0Isd0NBQXdDLGdFQUFnRSw2QkFBNkIsa0JBQWtCLHVDQUF1QyxnT0FBZ08sV0FBVyxvQkFBb0IsZUFBZSxxQkFBcUIsZUFBZSxzQ0FBc0Msd0JBQXdCLHlFQUF5RSx1RUFBdUUsUUFBUSw2QkFBNkIsMkJBQTJCLGdDQUFnQywyQkFBMkIsbUNBQW1DLDBCQUEwQixFQUFFLFlBQVksdUJBQXVCLGFBQWEsdUZBQXVGLGtCQUFrQixVQUFVLDRDQUE0QyxVQUFVLGNBQWMsc0NBQXNDLGNBQWMsa0JBQWtCLGtCQUFrQixTQUFTLFlBQVksZ0JBQWdCLFdBQVcsdUJBQXVCLFNBQVMsZ0JBQWdCLFNBQVMsaUVBQWlFLGVBQWUsNkJBQTZCLGlDQUFpQyxxQkFBcUIsa0NBQWtDLFFBQVEsbUJBQW1CLDJIQUEySCxlQUFlLHNCQUFzQixnQ0FBZ0MsTUFBTSw0QkFBNEIsV0FBVyxrQ0FBa0MsU0FBUyx1QkFBdUIsV0FBVyxjQUFjLFFBQVEsV0FBVyxLQUFLLGVBQWUsV0FBVyxnQkFBZ0IsS0FBSyxTQUFTLDRCQUE0Qix1QkFBdUIsNEJBQTRCLDBCQUEwQixHQUFHLHVCQUF1QixhQUFhLHFHQUFxRyxzQkFBc0IsZ0VBQWdFLEVBQUUsa0RBQWtELHVCQUF1QixhQUFhLHNCQUFzQixvQkFBb0IsOERBQThELHNCQUFzQixrQkFBa0IsRUFBRSxHQUFHLEdBQUcsdUJBQXVCLGFBQWEsc0JBQXNCLDhIQUE4SCxHQUFHLHVCQUF1QixhQUFhLG1RQUFtUSxnQkFBZ0IsaUNBQWlDLDRCQUE0QixxREFBcUQsUUFBUSxRQUFRLGdCQUFnQixNQUFNLHVDQUF1QyxpQkFBaUIsWUFBWSwrQkFBK0Isb0NBQW9DLGFBQWEsaUNBQWlDLGtFQUFrRSxnQ0FBZ0MsdUJBQXVCLHVCQUF1QixXQUFXLEtBQUssbUJBQW1CLGtEQUFrRCx1REFBdUQsMEJBQTBCLFVBQVUsVUFBVSwrQkFBK0Isa0NBQWtDLFNBQVMsaUNBQWlDLDRFQUE0RSxVQUFVLGlDQUFpQyxpRkFBaUYsU0FBUyxpQ0FBaUMsdUJBQXVCLHlCQUF5QiwyQ0FBMkMsc0NBQXNDLFFBQVEsK0JBQStCLGtDQUFrQyxZQUFZLCtCQUErQixnREFBZ0Qsc0JBQXNCLHFCQUFxQixhQUFhLCtCQUErQixtQkFBbUIsUUFBUSwrQkFBK0IseURBQXlELFlBQVksaUNBQWlDLG9CQUFvQixnREFBZ0QsZ0NBQWdDLGFBQWEsa0RBQWtELFdBQVcsaUNBQWlDLHlEQUF5RCwyQkFBMkIsV0FBVyxFQUFFLFdBQVcsMERBQTBELHFDQUFxQyxjQUFjLGVBQWUsTUFBTSwrQkFBK0IsOEJBQThCLGFBQWEsaUNBQWlDLGtCQUFrQixTQUFTLGdCQUFnQixNQUFNLG1GQUFtRixvRkFBb0YscUJBQXFCLG1IQUFtSCxxQ0FBcUMsSUFBSSxzRkFBc0YsSUFBSSwyRUFBMkUsYUFBYSxJQUFJLGlEQUFpRCxTQUFTLGNBQWMsZ0NBQWdDLDhCQUE4QixvREFBb0QsK0NBQStDLFlBQVksV0FBVyxVQUFVLDJFQUEyRSxZQUFZLGNBQWMsd0NBQXdDLG1DQUFtQyxXQUFXLDhCQUE4Qiw2REFBNkQsZ0dBQWdHLGdEQUFnRCxXQUFXLGNBQWMsZ0VBQWdFLCtCQUErQiw2Q0FBNkMsa0JBQWtCLDhCQUE4QixTQUFTLGNBQWMsNkZBQTZGLG1DQUFtQyw2REFBNkQsc0JBQXNCLHVEQUF1RCw0Q0FBNEMscUNBQXFDLDhDQUE4QyxhQUFhLDJCQUEyQiwySEFBMkgsY0FBYyxFQUFFLG9NQUFvTSx1QkFBdUIsYUFBYSw2ZkFBNmYsY0FBYyw4RUFBOEUsZ0JBQWdCLDBDQUEwQywwQkFBMEIsd0pBQXdKLHlCQUF5Qix5RkFBeUYsd0JBQXdCLGlFQUFpRSw2QkFBNkIsa0JBQWtCLHVKQUF1SixNQUFNLFVBQVUscUJBQXFCLG1DQUFtQyxtREFBbUQsWUFBWSx5QkFBeUIsMkNBQTJDLG9EQUFvRCxlQUFlLGdHQUFnRyxNQUFNLHlCQUF5QixNQUFNLFlBQVksSUFBSSxvREFBb0QsTUFBTSxpQ0FBaUMsd0RBQXdELGdDQUFnQyxTQUFTLFNBQVMsc0NBQXNDLHNEQUFzRCxzQ0FBc0Msc0ZBQXNGLG1IQUFtSCwrQkFBK0IsdUJBQXVCLHNCQUFzQix1RUFBdUUsWUFBWSxRQUFRLFlBQVksY0FBYyxTQUFTLDhCQUE4Qiw4Q0FBOEMsU0FBUyxpRUFBaUUsU0FBUyw2Q0FBNkMsSUFBSSxtRkFBbUYsU0FBUyw4QkFBOEIsMEJBQTBCLFlBQVksb0JBQW9CLFVBQVUsWUFBWSxTQUFTLDZGQUE2RixzSkFBc0osb0JBQW9CLGdDQUFnQyw4QkFBOEIsK0RBQStELDhHQUE4Ryw2QkFBNkIsa0JBQWtCLG1EQUFtRCw4RkFBOEYsb0RBQW9ELG1FQUFtRSxVQUFVLGVBQWUsb0JBQW9CLDBCQUEwQixrQ0FBa0MsOERBQThELEVBQUUsa0NBQWtDLFlBQVkseURBQXlELFNBQVMsZ0JBQWdCLGVBQWUscUNBQXFDLG1DQUFtQyxvQ0FBb0MsMEJBQTBCLEtBQUssZ0NBQWdDLHVFQUF1RSxZQUFZLFlBQVksMERBQTBELDBEQUEwRCxTQUFTLG1DQUFtQyx5QkFBeUIsbUJBQW1CLFVBQVUsaUNBQWlDLFVBQVUsYUFBYSwyQkFBMkIsc0ZBQXNGLDhEQUE4RCxTQUFTLDJDQUEyQyxvQkFBb0IsNENBQTRDLGdDQUFnQyxzRkFBc0YsV0FBVyxvQkFBb0IsbUJBQW1CLHdEQUF3RCxVQUFVLHNFQUFzRSxTQUFTLFFBQVEsaUJBQWlCLE9BQU8sK0NBQStDLEVBQUUsdUdBQXVHLHVCQUF1QixhQUFhLGtDQUFrQyxpQkFBaUIsK0JBQStCLG9CQUFvQixnV0FBZ1csMkVBQTJFLEdBQUcsZ0NBQWdDLFFBQVEsOERBQThELFlBQVksZUFBZSxxQkFBcUIsZUFBZSxjQUFjLHNIQUFzSCxpQ0FBaUMsYUFBYSxZQUFZLGdDQUFnQyxtQkFBbUIsd1FBQXdRLFlBQVksRUFBRSxVQUFVLHVCQUF1QixhQUFhLGdEQUFnRCxvQkFBb0Isa0NBQWtDLHVDQUF1QyxpQkFBaUIsUUFBUSxRQUFRLFdBQVcsS0FBSyxnREFBZ0QscUJBQXFCLFNBQVMsa0JBQWtCLHFCQUFxQixZQUFZLElBQUksK0dBQStHLDJEQUEyRCxTQUFTLHdCQUF3Qiw2QkFBNkIseUJBQXlCLDZCQUE2Qiw0QkFBNEIsNkJBQTZCLGlDQUFpQyw4QkFBOEIsRUFBRSwyQkFBMkIsdUJBQXVCLGFBQWEsc0JBQXNCLFlBQVksY0FBYyxXQUFXLEtBQUssV0FBVyw0QkFBNEIsVUFBVSxHQUFHLHVCQUF1QixhQUFhLGNBQWMscUJBQXFCLGNBQWMsOEJBQThCLHNCQUFzQiw2RkFBNkYsV0FBVyxLQUFLLFdBQVcsZ0JBQWdCLFVBQVUsR0FBRyx1QkFBdUIsYUFBYSwyREFBMkQsdUVBQXVFLFlBQVksV0FBVyxLQUFLLDhCQUE4QiwyQ0FBMkMsdURBQXVELG9DQUFvQyxtQ0FBbUMsb0JBQW9CLGtCQUFrQixNQUFNLE1BQU0sWUFBWSxXQUFXLEtBQUssV0FBVyxxQkFBcUIsd0dBQXdHLFVBQVUsRUFBRSxpQ0FBaUMsdUJBQXVCLGFBQWEseUNBQXlDLG9DQUFvQywrQ0FBK0MsV0FBVyxLQUFLLGtCQUFrQixvREFBb0QsK0JBQStCLHdCQUF3QixxQkFBcUIsbUNBQW1DLEVBQUUsc0NBQXNDLDJCQUEyQix1QkFBdUIsOEJBQThCLGtDQUFrQyxXQUFXLGdCQUFnQixPQUFPLG1DQUFtQyx3QkFBd0IsT0FBTyw4QkFBOEIsRUFBRSw2QkFBNkIsdUJBQXVCLGFBQWEsMkJBQTJCLDRCQUE0QixrREFBa0QscUJBQXFCLGdDQUFnQyxnQ0FBZ0MsaUJBQWlCLHNCQUFzQixjQUFjLHNCQUFzQixRQUFRLGdCQUFnQixlQUFlLGNBQWMsYUFBYSxrRUFBa0UsK0JBQStCLGdJQUFnSSxvQkFBb0IscUNBQXFDLHNCQUFzQiwyQkFBMkIsdUlBQXVJLGlEQUFpRCxnQkFBZ0IsaUNBQWlDLE9BQU8scUNBQXFDLDJFQUEyRSxjQUFjLDRCQUE0Qix1QkFBdUIsNERBQTRELDBCQUEwQixlQUFlLEVBQUUsRUFBRSxxQkFBcUIsT0FBTyxXQUFXLEVBQUUsRUFBRSxxQkFBcUIsT0FBTyxPQUFPLCtGQUErRixxQ0FBcUMsd0JBQXdCLGlKQUFpSixJQUFJLEVBQUUscUVBQXFFLGtCQUFrQixVQUFVLEVBQUUsWUFBWSx1QkFBdUIsYUFBYSxzQkFBc0IsTUFBTSx1QkFBdUIsK0dBQStHLFNBQVMsd0VBQXdFLFVBQVUsR0FBRyx1QkFBdUIsYUFBYSxtTUFBbU0sZ0JBQWdCLFFBQVEsaUJBQWlCLGNBQWMsaUJBQWlCLFdBQVcsb0JBQW9CLGNBQWMsZ0JBQWdCLFdBQVcsNEJBQTRCLDJDQUEyQyxrRUFBa0UsWUFBWSx1QkFBdUIsa0NBQWtDLHFCQUFxQiwrQkFBK0Isb0JBQW9CLElBQUksa0NBQWtDLGlCQUFpQixTQUFTLCtCQUErQixpR0FBaUcsNkJBQTZCLE9BQU8sNkJBQTZCLElBQUksRUFBRSw0SUFBNEksdUJBQXVCLGFBQWEsc0JBQXNCLGNBQWMsVUFBVSxXQUFXLG1CQUFtQixhQUFhLDhDQUE4QyxjQUFjLEVBQUUsaUJBQWlCLHVCQUF1QixhQUFhLHNCQUFzQixVQUFVLEdBQUcsdUJBQXVCLGFBQWEsd0dBQXdHLHNPQUFzTyxtQkFBbUIsNE1BQTRNLGlCQUFpQixnQ0FBZ0Msb0JBQW9CLHdOQUF3TixtQkFBbUIsd1ZBQXdWLG9CQUFvQixzS0FBc0ssbUJBQW1CLDRIQUE0SCxvQkFBb0IsMFFBQTBRLG9CQUFvQixvUkFBb1IsMEJBQTBCLGdNQUFnTSx3QkFBd0Isc09BQXNPLG9CQUFvQiw4SEFBOEgscUJBQXFCLDBDQUEwQyxtQkFBbUIseUJBQXlCLHNCQUFzQixjQUFjLFNBQVMsa0NBQWtDLFdBQVcsZUFBZSxTQUFTLGtaQUFrWix1REFBdUQseUJBQXlCLGdEQUFnRCxzRUFBc0UsMkJBQTJCLElBQUksV0FBVyxTQUFTLCtCQUErQixzQkFBc0IsWUFBWSxXQUFXLEtBQUssbUdBQW1HLHlCQUF5QiwwQkFBMEIsNEJBQTRCLGdDQUFnQyxrQ0FBa0MsNkJBQTZCLCtEQUErRCxpQ0FBaUMseUZBQXlGLCtCQUErQixzQ0FBc0MsSUFBSSxxQkFBcUIsU0FBUywrQkFBK0IsK0NBQStDLG1EQUFtRCxRQUFRLFFBQVEsK0NBQStDLHNCQUFzQixRQUFRLGdCQUFnQixnREFBZ0QsaUVBQWlFLG9CQUFvQiwyR0FBMkcsK0JBQStCLFFBQVEsZUFBZSxPQUFPLHFDQUFxQywwQ0FBMEMsb0JBQW9CLHdCQUF3QixtQ0FBbUMsbUVBQW1FLFFBQVEsSUFBSSw2Q0FBNkMsUUFBUSxJQUFJLEtBQUssWUFBWSxJQUFJLDZHQUE2RyxPQUFPLFNBQVMsK0JBQStCLE1BQU0sYUFBYSw0QkFBNEIsS0FBSyxTQUFTLHFGQUFxRixlQUFlLGtDQUFrQyxrREFBa0QsNkJBQTZCLE1BQU0sZ0JBQWdCLFFBQVEsV0FBVyw0QkFBNEIsaUJBQWlCLFdBQVcscUJBQXFCLDhCQUE4QixzRUFBc0UsSUFBSSxpQkFBaUIsK0JBQStCLHdEQUF3RCxXQUFXLG9CQUFvQixnQ0FBZ0MsZ0JBQWdCLGtDQUFrQyw0R0FBNEcsbUNBQW1DLHNCQUFzQixrQ0FBa0MsaUNBQWlDLCtCQUErQiw4Q0FBOEMsWUFBWSxZQUFZLFdBQVcsS0FBSyxXQUFXLGlCQUFpQiwwQkFBMEIsZ0RBQWdELG9DQUFvQywwQ0FBMEMsTUFBTSx3QkFBd0IsV0FBVyxLQUFLLFdBQVcsaUJBQWlCLFdBQVcseUJBQXlCLFNBQVMsU0FBUyxnQ0FBZ0MsZUFBZSwwQkFBMEIsa0NBQWtDLDRCQUE0Qiw0QkFBNEIsMkJBQTJCLFNBQVMseUJBQXlCLEVBQUUsMkJBQTJCLFFBQVEsV0FBVyxpTUFBaU0seUJBQXlCLFdBQVcsMkVBQTJFLFNBQVMseUJBQXlCLDZDQUE2Qyw2QkFBNkIsWUFBWSxXQUFXLHFDQUFxQyxTQUFTLHlCQUF5QixrQkFBa0IsNkVBQTZFLDZCQUE2QixzQkFBc0Isb0JBQW9CLDhCQUE4QixvQ0FBb0MsdUNBQXVDLHdEQUF3RCxzSUFBc0ksY0FBYyw4QkFBOEIsTUFBTSw4REFBOEQsc0NBQXNDLHdEQUF3RCxzQkFBc0IsbUJBQW1CLHNEQUFzRCw2QkFBNkIsdUNBQXVDLGtDQUFrQywrQkFBK0IscUJBQXFCLGtCQUFrQix5Q0FBeUMsc0NBQXNDLHdCQUF3QixxQkFBcUIsK0JBQStCLHNCQUFzQixnQ0FBZ0MsK0JBQStCLEtBQUssV0FBVyxLQUFLLG1EQUFtRCx3REFBd0QsdUNBQXVDLFNBQVMsVUFBVSwrREFBK0QsZ0NBQWdDLGtCQUFrQixzSkFBc0osa0tBQWtLLHFJQUFxSSxTQUFTLCtCQUErQiwyR0FBMkcsa0NBQWtDLGdCQUFnQixFQUFFLDRFQUE0RSx1Q0FBdUMsVUFBVSw0QkFBNEIsV0FBVyw0QkFBNEIsUUFBUSxTQUFTLEtBQUssR0FBRyxjQUFjLCtCQUErQixTQUFTLHVEQUF1RCw0RUFBNEUsR0FBRyxlQUFlLHNDQUFzQyxxQkFBcUIseURBQXlELFVBQVUsUUFBUSxXQUFXLEtBQUssK0JBQStCLE9BQU8sTUFBTSwrRUFBK0UsNlJBQTZSLFNBQVMsR0FBRyw0QkFBNEIsb0RBQW9ELElBQUksS0FBSyw0RUFBNEUsNkNBQTZDLG9CQUFvQixxQkFBcUIsWUFBWSxVQUFVLDhCQUE4QixNQUFNLDJCQUEyQixRQUFRLHVGQUF1RixFQUFFLDBuQkFBMG5CLHVCQUF1QixhQUFhLHNCQUFzQixpTkFBaU4sR0FBRyx1QkFBdUIsYUFBYSx1Q0FBdUMsNEJBQTRCLFVBQVUseUJBQXlCLFNBQVMsNkNBQTZDLFNBQVMsYUFBYSxXQUFXLGlCQUFpQixtQkFBbUIsa0JBQWtCLG1CQUFtQixPQUFPLG9CQUFvQixjQUFjLFdBQVcsZUFBZSxnQkFBZ0IsdUJBQXVCLDZDQUE2QyxvQkFBb0IscUVBQXFFLGlCQUFpQixNQUFNLFdBQVcsb0RBQW9ELHNCQUFzQixXQUFXLGlFQUFpRSxvQkFBb0IsV0FBVyx1QkFBdUIsV0FBVyw0REFBNEQsTUFBTSxRQUFRLFdBQVcsZ0JBQWdCLFFBQVEsV0FBVyxpQkFBaUIsMEJBQTBCLGtDQUFrQyxTQUFTLDRCQUE0QixnQkFBZ0Isc0JBQXNCLFdBQVcsOElBQThJLFdBQVcsVUFBVSxFQUFFLHdCQUF3Qix1QkFBdUIsYUFBYSx1QkFBdUIsd0JBQXdCLGdDQUFnQyxJQUFJLEtBQUssaUNBQWlDLElBQUksS0FBSyxlQUFlLGFBQWEsTUFBTSxXQUFXLGNBQWMsbUJBQW1CLHNCQUFzQixlQUFlLElBQUksVUFBVSxFQUFFLGtCQUFrQix1QkFBdUIsYUFBYSw2REFBNkQsZ0JBQWdCLGtCQUFrQiwrQkFBK0IsVUFBVSxZQUFZLFdBQVcsUUFBUSxRQUFRLFNBQVMsbUJBQW1CLGlCQUFpQixnQkFBZ0IsdUJBQXVCLG1CQUFtQix5QkFBeUIsaUNBQWlDLG1CQUFtQixnQkFBZ0Isd0JBQXdCLG1CQUFtQix5QkFBeUIsaUNBQWlDLG9CQUFvQixnQkFBZ0IseUJBQXlCLG1CQUFtQix5QkFBeUIscUJBQXFCLEVBQUUsOEJBQThCLHVCQUF1QixhQUFhLDBCQUEwQixnRUFBZ0Usc0JBQXNCLEVBQUUsNEVBQTRFLEdBQUcsdUJBQXVCLGFBQWEsNEJBQTRCLDJCQUEyQixJQUFJLHNCQUFzQixTQUFTLCtCQUErQix1QkFBdUIsUUFBUSxJQUFJLDhCQUE4QixtQkFBbUIsUUFBUSxJQUFJLDhCQUE4QixJQUFJLG9CQUFvQixTQUFTLHFCQUFxQix5REFBeUQsbUJBQW1CLHNDQUFzQyxJQUFJLHVCQUF1QixxQkFBcUIsMkJBQTJCLDhCQUE4QixXQUFXLHVCQUF1QixpQkFBaUIsSUFBSSxpQkFBaUIsU0FBUyxtQ0FBbUMsZ0NBQWdDLDhCQUE4QixvQkFBb0IseUVBQXlFLG9DQUFvQyw2RkFBNkYsZ0NBQWdDLGtCQUFrQixnQkFBZ0IsdUJBQXVCLDRDQUE0QywwQ0FBMEMsaUNBQWlDLDRCQUE0QixtQkFBbUIsaURBQWlELEdBQUcsdUJBQXVCLGFBQWEsV0FBVyxrQkFBa0IsVUFBVSxpQkFBaUIsdUJBQXVCLCtDQUErQyxHQUFHLHVCQUF1QixhQUFhLDZEQUE2RCx3QkFBd0Isb0JBQW9CLHFGQUFxRixpQ0FBaUMsV0FBVyxFQUFFLDJEQUEyRCxrQkFBa0IsS0FBSyxvQ0FBb0MsY0FBYyxtREFBbUQsV0FBVyxtQ0FBbUMsSUFBSSx5Q0FBeUMsT0FBTyxlQUFlLHFCQUFxQixpQkFBaUIsdUJBQXVCLFNBQVMsaUNBQWlDLGtCQUFrQixrQkFBa0IsUUFBUSxhQUFhLEtBQUssa0JBQWtCLGtCQUFrQixXQUFXLG9EQUFvRCxnQkFBZ0Isb0NBQW9DLDZDQUE2Qyw4REFBOEQsNkJBQTZCLHFCQUFxQixnQkFBZ0IseUNBQXlDLGtCQUFrQixtQkFBbUIsb0NBQW9DLFFBQVEsYUFBYSxLQUFLLG9GQUFvRixXQUFXLGtDQUFrQyxPQUFPLDBCQUEwQix3RUFBd0UsdUJBQXVCLE1BQU0sNkVBQTZFLGlDQUFpQyxTQUFTLGdCQUFnQixnQkFBZ0IsUUFBUSx5Q0FBeUMsb0JBQW9CLDhEQUE4RCxRQUFRLFdBQVcseUdBQXlHLFNBQVMsb0JBQW9CLGtCQUFrQixjQUFjLDhCQUE4QixVQUFVLEVBQUUsbUNBQW1DLHVCQUF1QixhQUFhLHVCQUF1QixHQUFHLHVCQUF1QixhQUFhLHlDQUF5Qyx3QkFBd0Isc0JBQXNCLFVBQVUsVUFBVSw2QkFBNkIsK0RBQStELGtMQUFrTCxxQkFBcUIsNkRBQTZELHlCQUF5Qix1QkFBdUIsRUFBRSxxREFBcUQsV0FBVyxrREFBa0QsOEVBQThFLEVBQUUsY0FBYywwREFBMEQsbUJBQW1CLDhDQUE4QyxJQUFJLEVBQUUsNEJBQTRCLHVCQUF1QixhQUFhLDRDQUE0Qyx3QkFBd0IsZ0JBQWdCLE1BQU0sT0FBTywrQ0FBK0MsV0FBVyxLQUFLLFdBQVcsOERBQThELDBCQUEwQixPQUFPLCtDQUErQyxFQUFFLGtCQUFrQix1QkFBdUIsYUFBYSw0RUFBNEUscUJBQXFCLDhDQUE4QyxxQkFBcUIsV0FBVyw0RkFBNEYsV0FBVyw4R0FBOEcsc0JBQXNCLGtHQUFrRyxzQkFBc0IsR0FBRyxnQkFBZ0IsUUFBUSxXQUFXLHVDQUF1QyxLQUFLLE1BQU0sT0FBTywyREFBMkQsa0JBQWtCLG1EQUFtRCxlQUFlLGtCQUFrQiw2Q0FBNkMsaURBQWlELFFBQVEsSUFBSSwwSEFBMEgsS0FBSyx3REFBd0QsaUJBQWlCLGNBQWMseUJBQXlCLHdDQUF3QywwRkFBMEYsVUFBVSxJQUFJLG9GQUFvRixVQUFVLHVCQUF1QixxQkFBcUIsY0FBYyxVQUFVLG1CQUFtQixjQUFjLGNBQWMsV0FBVyx3RkFBd0YsdUJBQXVCLE9BQU8sMkJBQTJCLEVBQUUsNENBQTRDLHVCQUF1QixhQUFhLGFBQWEsMkNBQTJDLHdCQUF3Qix5QkFBeUIsb0NBQW9DLDRDQUE0QyxJQUFJLFVBQVUsd0JBQXdCLDJDQUEyQyw2RUFBNkUsRUFBRSxTQUFTLEtBQUssd0RBQXdELDZDQUE2QyxvQkFBb0IsRUFBRSxNQUFNLFFBQVEsZ0NBQWdDLEtBQUssZ0hBQWdILEVBQUUsRUFBRSxtQ0FBbUMsdUJBQXVCLGFBQWEsd0JBQXdCLHdCQUF3QiwyQkFBMkIsV0FBVywyREFBMkQsVUFBVSw0Q0FBNEMsVUFBVSxHQUFHLHVCQUF1QixhQUFhLDREQUE0RCxPQUFPLHdCQUF3QixRQUFRLDBCQUEwQiw2QkFBNkIsOEhBQThILE1BQU0saUJBQWlCLE9BQU8sa0JBQWtCLDRUQUE0VCwyQkFBMkIsMEJBQTBCLDZCQUE2QixzREFBc0QsMEJBQTBCLDBCQUEwQiw2QkFBNkIsc0RBQXNELGtCQUFrQixRQUFRLHVEQUF1RCxpRkFBaUYsNkZBQTZGLHNCQUFzQiwrQ0FBK0MseUNBQXlDLGtCQUFrQixRQUFRLHVEQUF1RCx3R0FBd0cseUVBQXlFLHNCQUFzQiwrQ0FBK0MsK0RBQStELHlCQUF5Qiw4QkFBOEIsbUJBQW1CLFdBQVcsaUdBQWlHLE1BQU0sU0FBUyxzQkFBc0IsYUFBYSxFQUFFLDJDQUEyQyx1QkFBdUIsYUFBYSw0QkFBNEIseUNBQXlDLHNIQUFzSCxHQUFHLHVCQUF1QixhQUFhLHFEQUFxRCx3QkFBd0IsS0FBSyxFQUFFLEVBQUUsaUJBQWlCLFlBQVksS0FBSywrREFBK0QsS0FBSywyQkFBMkIsYUFBYSx5Q0FBeUMsR0FBRyx1QkFBdUIsYUFBYSxnRUFBZ0UsMEJBQTBCLGdCQUFnQixrQkFBa0IscURBQXFELG1CQUFtQixPQUFPLDZCQUE2Qix3Q0FBd0MsMENBQTBDLElBQUksZ0RBQWdELCtEQUErRCxFQUFFLHNDQUFzQyx1QkFBdUIsYUFBYSw2REFBNkQsZ0JBQWdCLFdBQVcsZ0JBQWdCLFlBQVksZ0JBQWdCLFdBQVcsZ0JBQWdCLFlBQVksMEJBQTBCLGdHQUFnRyx1REFBdUQsc0RBQXNELGFBQWEseUNBQXlDLGdEQUFnRCwyQkFBMkIsV0FBVywyQkFBMkIsV0FBVyw0QkFBNEIsZ0JBQWdCLG9CQUFvQixnRUFBZ0UsSUFBSSw4REFBOEQsT0FBTyxrQkFBa0IsMkJBQTJCLHdFQUF3RSxhQUFhLGdDQUFnQyxZQUFZLHNCQUFzQixvQkFBb0IsV0FBVyxLQUFLLHFCQUFxQiw0Q0FBNEMsdUJBQXVCLGdDQUFnQyxPQUFPLG9CQUFvQixXQUFXLEtBQUssY0FBYyxlQUFlLFVBQVUsRUFBRSxzREFBc0QsdUJBQXVCLGFBQWEsd0JBQXdCLHFEQUFxRCwwQ0FBMEMsZ0NBQWdDLEdBQUcsdUJBQXVCLGFBQWEsOENBQThDLHNCQUFzQixpREFBaUQscUJBQXFCLGlEQUFpRCxvQ0FBb0MsaVFBQWlRLGtDQUFrQyxxV0FBcVcscUNBQXFDLEtBQUssRUFBRSwwQkFBMEIsdUJBQXVCLGFBQWEsNkRBQTZELDRCQUE0QixRQUFRLHdEQUF3RCx1QkFBdUIsSUFBSSw2QkFBNkIsSUFBSSxRQUFRLElBQUkseUNBQXlDLFNBQVMsbUJBQW1CLDZCQUE2QixXQUFXLE1BQU0sc0JBQXNCLCtDQUErQyxXQUFXLFFBQVEsd0JBQXdCLDRGQUE0Riw0QkFBNEIscUVBQXFFLHlCQUF5QixRQUFRLHlCQUF5QixvQ0FBb0Msd0JBQXdCLDRDQUE0QyxtQ0FBbUMscUNBQXFDLFVBQVUsaURBQWlELEVBQUUsbUNBQW1DLHVCQUF1QixhQUFhLDJCQUEyQixzQkFBc0IseUJBQXlCLEVBQUUsc0JBQXNCLHVCQUF1QixhQUFhLDRHQUE0RyxnQkFBZ0IsMkNBQTJDLHNDQUFzQyxrQ0FBa0MsZ0hBQWdILGVBQWUsMkRBQTJELHFIQUFxSCxxQ0FBcUMsc0RBQXNELDBCQUEwQiw4Q0FBOEMsWUFBWSxpQkFBaUIsWUFBWSw2QkFBNkIsMkJBQTJCLHlKQUF5Siw2QkFBNkIscUNBQXFDLHFCQUFxQixFQUFFLFlBQVksOEZBQThGLFlBQVksaUNBQWlDLEtBQUssOENBQThDLEtBQUssU0FBUyx3Q0FBd0MsU0FBUyw0QkFBNEIsOEVBQThFLFlBQVkscURBQXFELGtIQUFrSCxLQUFLLHFEQUFxRCxnQ0FBZ0MsMERBQTBELFlBQVksNkVBQTZFLEVBQUUsd0JBQXdCLHFFQUFxRSx5QkFBeUIscUNBQXFDLGlEQUFpRCw2REFBNkQsRUFBRSxzSEFBc0gsNERBQTRELFNBQVMsMkNBQTJDLEVBQUUsbUNBQW1DLG9CQUFvQixnQkFBZ0IsRUFBRSxxREFBcUQsd0JBQXdCLHlEQUF5RCxvQkFBb0Isb0ZBQW9GLFVBQVUsOEJBQThCLHNCQUFzQixzQkFBc0IsOENBQThDLFFBQVEsVUFBVSx5QkFBeUIsc0JBQXNCLEVBQUUsU0FBUyxhQUFhLHVIQUF1SCxtQkFBbUIscUJBQXFCLGFBQWEsSUFBSSw4Q0FBOEMsa0JBQWtCLHlCQUF5Qix1QkFBdUIsUUFBUSxPQUFPLE9BQU8seUJBQXlCLFdBQVcsWUFBWSxjQUFjLG9CQUFvQixZQUFZLE1BQU0sa0NBQWtDLE9BQU8saUdBQWlHLDJFQUEyRSxhQUFhLElBQUksZUFBZSwyQkFBMkIsd0NBQXdDLHlCQUF5Qix3QkFBd0IsOENBQThDLCtFQUErRSxzQkFBc0IseUNBQXlDLGdCQUFnQiwwQ0FBMEMsY0FBYyxpQkFBaUIsY0FBYywwSEFBMEgsc0RBQXNELHVCQUF1QixPQUFPLEdBQUcseUJBQXlCLFdBQVcsS0FBSyx1REFBdUQsZ0JBQWdCLDZCQUE2QixrQkFBa0IsS0FBSyxjQUFjLE9BQU8sVUFBVSx5Q0FBeUMsdUNBQXVDLEtBQUssYUFBYSxNQUFNLGtDQUFrQyxnSEFBZ0gsTUFBTSxTQUFTLCtFQUErRSxjQUFjLE1BQU0sY0FBYyxNQUFNLElBQUksT0FBTyxvSUFBb0ksa0JBQWtCLElBQUkseUJBQXlCLElBQUksMkJBQTJCLDRLQUE0SyxZQUFZLGlLQUFpSyxnQkFBZ0Isa0JBQWtCLG1DQUFtQyxlQUFlLFdBQVcsWUFBWSwwQkFBMEIsMkJBQTJCLHdIQUF3SCxXQUFXLEtBQUssZ0RBQWdELHdDQUF3QyxLQUFLLGVBQWUsd0JBQXdCLGFBQWEsVUFBVSwyRkFBMkYsTUFBTSxNQUFNLG1CQUFtQixPQUFPLG9GQUFvRixpQ0FBaUMsR0FBRyxjQUFjLGlDQUFpQyxxQ0FBcUMsb0JBQW9CLDJCQUEyQixpQkFBaUIsMEJBQTBCLG1EQUFtRCwrRUFBK0UsRUFBRSxrQkFBa0IsNkhBQTZILGlDQUFpQyx5QkFBeUIseUJBQXlCLG1DQUFtQyxZQUFZLGFBQWEsMEJBQTBCLHVCQUF1Qix5QkFBeUIsa0NBQWtDLFlBQVksY0FBYyxZQUFZLHlEQUF5RCxzREFBc0QsUUFBUSw0Q0FBNEMsMkNBQTJDLGdDQUFnQyx5QkFBeUIscUJBQXFCLGdCQUFnQix3RUFBd0UsMEJBQTBCLHdEQUF3RCxRQUFRLEVBQUUsRUFBRSw4QkFBOEIscUVBQXFFLFlBQVksZ0NBQWdDLHNDQUFzQyxhQUFhLFlBQVksb0hBQW9ILDJDQUEyQyxnREFBZ0QseVFBQXlRLFFBQVEsbUJBQW1CLDhDQUE4Qyw4Q0FBOEMsVUFBVSxFQUFFLHFDQUFxQywrR0FBK0csVUFBVSxFQUFFLHVCQUF1Qix3R0FBd0csd0JBQXdCLFdBQVcseURBQXlELCtCQUErQixtREFBbUQsRUFBRSx3QkFBd0IsMkNBQTJDLFVBQVUsd0JBQXdCLFVBQVUsdUJBQXVCLFNBQVMsNEhBQTRILDBCQUEwQixnQ0FBZ0MsVUFBVSxZQUFZLFVBQVUsRUFBRSx3QkFBd0IsK0dBQStHLFVBQVUsRUFBRSxjQUFjLHdDQUF3Qyx3QkFBd0IsNEJBQTRCLDRDQUE0QywyREFBMkQsRUFBRSxxRkFBcUYsdUJBQXVCLGFBQWEsU0FBUyxjQUFjLHdEQUF3RCwyQkFBMkIsd0JBQXdCLE9BQU8sMENBQTBDLFFBQVEsaUJBQWlCLGFBQWEseURBQXlELGdEQUFnRCxpQkFBaUIsSUFBSSxvQkFBb0IsV0FBVywwQ0FBMEMsZUFBZSxvQkFBb0IsMEJBQTBCLG9CQUFvQixxQkFBcUIseUJBQXlCLGdDQUFnQyxHQUFHLHVCQUF1QixhQUFhLDBCQUEwQix3QkFBd0Isb0NBQW9DLDhDQUE4Qyw4REFBOEQsRUFBRSxxQkFBcUIsdUJBQXVCLGFBQWEsa0JBQWtCLGtGQUFrRiw4QkFBOEIsMkVBQTJFLGlDQUFpQyxtQkFBbUIscUNBQXFDLHVDQUF1Qyx3QkFBd0IsRUFBRSxtREFBbUQsdUJBQXVCLGFBQWEsV0FBVyw2Q0FBNkMsb0VBQW9FLFNBQVMsa0JBQWtCLEdBQUcsdUJBQXVCLGFBQWEsV0FBVywwQ0FBMEMscUVBQXFFLFNBQVMsOGhCQUE4aEIsR0FBRyx1QkFBdUIsYUFBYSx1QkFBdUIsc0JBQXNCLG1GQUFtRixXQUFXLHVDQUF1QyxPQUFPLE1BQU0sc0NBQXNDLHlCQUF5QiwyREFBMkQsNkNBQTZDLEVBQUUsK0JBQStCLEVBQUUsa0JBQWtCLHVCQUF1QixhQUFhLHNEQUFzRCwyR0FBMkcsSUFBSSxpSUFBaUksbUZBQW1GLGNBQWMsWUFBWSxLQUFLLFdBQVcsZUFBZSxTQUFTLGtCQUFrQixVQUFVLElBQUksZ0JBQWdCLFdBQVcsd0JBQXdCLHdDQUF3QyxvQkFBb0IsY0FBYyxVQUFVLElBQUksd0NBQXdDLGtDQUFrQyxZQUFZLGlCQUFpQiwyQ0FBMkMsU0FBUyxxREFBcUQsV0FBVyx3Q0FBd0MsWUFBWSx3QkFBd0IsWUFBWSxzQkFBc0IsaUJBQWlCLDRDQUE0QyxXQUFXLGVBQWUsZ0JBQWdCLEVBQUUsYUFBYSx1QkFBdUIsYUFBYSxnTkFBZ04sZ0JBQWdCLHlCQUF5Qiw4QkFBOEIsY0FBYyxnQkFBZ0IsaUNBQWlDLDRCQUE0QiwrQkFBK0Isa0VBQWtFLGFBQWEsdUdBQXVHLGNBQWMsZ0NBQWdDLGFBQWEsNkZBQTZGLG9CQUFvQixrQkFBa0Isa0JBQWtCLHNCQUFzQixzQkFBc0Isb0NBQW9DLFFBQVEsK0JBQStCLEtBQUssNEJBQTRCLGNBQWMsMEJBQTBCLDhLQUE4SyxnQkFBZ0IsbUVBQW1FLGdDQUFnQywwSEFBMEgsMkJBQTJCLFFBQVEsUUFBUSwwS0FBMEssdUNBQXVDLDJDQUEyQyw2Q0FBNkMsMENBQTBDLDZCQUE2QixRQUFRLFdBQVcsS0FBSyxXQUFXLGlCQUFpQixXQUFXLDJkQUEyZCxzQkFBc0IsbUJBQW1CLHNCQUFzQixXQUFXLGlDQUFpQyxzQkFBc0IsOEJBQThCLHNDQUFzQyx3Q0FBd0MsUUFBUSxJQUFJLHlCQUF5QixVQUFVLEtBQUsscUJBQXFCLFNBQVMscUJBQXFCLEtBQUssYUFBYSx5QkFBeUIsa0NBQWtDLDBEQUEwRCxRQUFRLElBQUksS0FBSyx1QkFBdUIsNEpBQTRKLGdEQUFnRCxRQUFRLElBQUksS0FBSyxrQkFBa0IsOENBQThDLGVBQWUsd1JBQXdSLHlCQUF5QixZQUFZLFdBQVcsS0FBSyxhQUFhLDBIQUEwSCw2RUFBNkUsK0ZBQStGLGtuQkFBa25CLHdCQUF3QiwyQ0FBMkMsd0RBQXdELHFCQUFxQixrQkFBa0Isc0NBQXNDLHFIQUFxSCxvREFBb0Qsb0JBQW9CLFFBQVEsV0FBVyxLQUFLLHVCQUF1QixtTEFBbUwsNENBQTRDLDRCQUE0QixxQ0FBcUMsaURBQWlELG1CQUFtQixpQkFBaUIsY0FBYyxrQ0FBa0MsZ0NBQWdDLG1CQUFtQixRQUFRLFdBQVcsS0FBSyxXQUFXLHFDQUFxQyxrSkFBa0osTUFBTSxnRkFBZ0YsZ0NBQWdDLFlBQVksWUFBWSxXQUFXLG1CQUFtQiwwQkFBMEIsS0FBSyxrWUFBa1ksMEJBQTBCLE1BQU0sZ01BQWdNLG1GQUFtRiwrR0FBK0csaUNBQWlDLDZCQUE2QixRQUFRLFdBQVcsK0NBQStDLHlCQUF5QixvQ0FBb0Msa0JBQWtCLGdFQUFnRSxTQUFTLEVBQUUscUJBQXFCLGlCQUFpQixXQUFXLG9IQUFvSCxTQUFTLFNBQVMseUNBQXlDLGlEQUFpRCxnQkFBZ0IsK0JBQStCLHdDQUF3QyxpRkFBaUYsdUNBQXVDLGNBQWMsa0JBQWtCLDRCQUE0QiwwQkFBMEIsZUFBZSxFQUFFLEVBQUUsbUJBQW1CLE9BQU8sVUFBVSxvQkFBb0IsaUNBQWlDLFlBQVksV0FBVyxpQ0FBaUMsSUFBSSxLQUFLLGtCQUFrQixzQkFBc0IsZ0NBQWdDLDRCQUE0QiwwQkFBMEIsVUFBVSxnQkFBZ0Isd0VBQXdFLEVBQUUsNEpBQTRKLHVCQUF1QixhQUFhLHNCQUFzQix1bUJBQXVtQiwwQkFBMEIsb0VBQW9FLEVBQUUsbUdBQW1HLHVCQUF1QixhQUFhLDZIQUE2SCxtREFBbUQsNkJBQTZCLHNCQUFzQiw2QkFBNkIsK0JBQStCLGlEQUFpRCxpTUFBaU0sVUFBVSx3RkFBd0YsZ0JBQWdCLG9CQUFvQixLQUFLLGdGQUFnRixTQUFTLDJCQUEyQiwrR0FBK0csUUFBUSxXQUFXLDRHQUE0RyxrSkFBa0osb0NBQW9DLHFFQUFxRSxhQUFhLFdBQVcsK0NBQStDLGlCQUFpQixLQUFLLHlDQUF5QywrQ0FBK0MsaUJBQWlCLE1BQU0sY0FBYyxLQUFLLG9DQUFvQywyQkFBMkIsY0FBYyxRQUFRLElBQUksY0FBYyxRQUFRLFdBQVcsY0FBYyxVQUFVLFVBQVUsRUFBRSx3SUFBd0ksdUJBQXVCLGFBQWEseXFCQUF5cUIsY0FBYyxvQkFBb0IsdUZBQXVGLGdCQUFnQixJQUFJLDJDQUEyQyxTQUFTLFlBQVksZ0JBQWdCLDBCQUEwQixnQkFBZ0IsZ0JBQWdCLDBCQUEwQixJQUFJLHVCQUF1QixtRkFBbUYsdUJBQXVCLE1BQU0seUJBQXlCLFdBQVcsd0dBQXdHLGlGQUFpRixpQkFBaUIsMERBQTBELFdBQVcsb0JBQW9CLDBDQUEwQyxXQUFXLGdEQUFnRCxnQ0FBZ0MsdUNBQXVDLDJWQUEyVixzQ0FBc0Msb0RBQW9ELDRCQUE0QixtQkFBbUIsUUFBUSxXQUFXLGNBQWMsMENBQTBDLGdCQUFnQixtQkFBbUIsUUFBUSxXQUFXLHFDQUFxQyxTQUFTLGtCQUFrQixRQUFRLFFBQVEsV0FBVyxLQUFLLHFGQUFxRiwrRkFBK0YseUpBQXlKLGtCQUFrQix1RUFBdUUsbUZBQW1GLGdRQUFnUSxzQkFBc0IsbUJBQW1CLHlCQUF5QixzRUFBc0UsNEVBQTRFLDRGQUE0RixpQ0FBaUMsNElBQTRJLGdPQUFnTyxVQUFVLDRCQUE0Qix3Q0FBd0MsNEVBQTRFLFdBQVcsS0FBSywySUFBMkksaUdBQWlHLDhHQUE4RyxtQ0FBbUMsNENBQTRDLEVBQUUsU0FBUyxjQUFjLEtBQUssS0FBSyxXQUFXLEtBQUssMkRBQTJELHNKQUFzSixPQUFPLHNCQUFzQixnQkFBZ0IsMkNBQTJDLG9DQUFvQyxvQkFBb0IsMENBQTBDLFNBQVMsNkJBQTZCLEtBQUssNkVBQTZFLGlCQUFpQixzQkFBc0Isc0NBQXNDLHFEQUFxRCxxRUFBcUUsRUFBRSxTQUFTLG1SQUFtUix5QkFBeUIsMERBQTBELDhDQUE4QyxFQUFFLGNBQWMseUJBQXlCLGdCQUFnQix5QkFBeUIscUJBQXFCLHlCQUF5Qiw4QkFBOEIsR0FBRyxHQUFHLG9CQUFvQixnSUFBZ0ksSUFBSSwrQkFBK0IsZ0RBQWdELDZCQUE2QiwwQkFBMEIsa0JBQWtCLE1BQU0sc0NBQXNDLGdDQUFnQyxrQkFBa0Isa0dBQWtHLElBQUksS0FBSywyQkFBMkIsTUFBTSxhQUFhLHlCQUF5QixFQUFFLGNBQWMsbUJBQW1CLDZCQUE2QixjQUFjLDhCQUE4QixjQUFjLDBCQUEwQixjQUFjLFlBQVksV0FBVyxzQ0FBc0Msa0JBQWtCLDBDQUEwQyxTQUFTLEVBQUUscUNBQXFDLE1BQU0saUVBQWlFLEtBQUssV0FBVyxtREFBbUQsZ0ZBQWdGLGNBQWMsbUJBQW1CLGdCQUFnQixjQUFjLHFCQUFxQiw4QkFBOEIsZ0JBQWdCLDhGQUE4Rix1QkFBdUIsMkpBQTJKLGlCQUFpQixXQUFXLEtBQUssNkhBQTZILGtHQUFrRyx1SUFBdUkscUZBQXFGLHVDQUF1QyxnQkFBZ0IscVdBQXFXLEtBQUssbURBQW1ELHdCQUF3QixnQkFBZ0Isc0RBQXNELEtBQUssZ0JBQWdCLDJDQUEyQyxhQUFhLDRFQUE0RSxzQkFBc0IsU0FBUyx3QkFBd0IseUNBQXlDLDJDQUEyQyxZQUFZLGlCQUFpQiwyQ0FBMkMsb09BQW9PLHdGQUF3RiwrQkFBK0IsdURBQXVELDJDQUEyQyxhQUFhLFdBQVcsS0FBSyxlQUFlLCtEQUErRCxzQ0FBc0MscUdBQXFHLDJDQUEyQyw2RUFBNkUsY0FBYyx3RkFBd0YsUUFBUSxXQUFXLGthQUFrYSxnQkFBZ0IsdUJBQXVCLGtCQUFrQix3R0FBd0csU0FBUyw2QkFBNkIsS0FBSyw0RUFBNEUsaUJBQWlCLElBQUksc0NBQXNDLHVCQUF1Qiw0QkFBNEIsMkJBQTJCLDJXQUEyVyx5QkFBeUIsMkRBQTJELCtDQUErQyxFQUFFLGtCQUFrQixvQkFBb0IsdUJBQXVCLCtDQUErQyw4QkFBOEIsd0NBQXdDLHFIQUFxSCxzQkFBc0IsZ0ZBQWdGLFNBQVMsZ0JBQWdCLG9CQUFvQixjQUFjLGdCQUFnQix1QkFBdUIsc0VBQXNFLHFCQUFxQixtQkFBbUIsWUFBWSxFQUFFLGFBQWEsMkJBQTJCLCtEQUErRCx5QkFBeUIsTUFBTSxvREFBb0QsUUFBUSwwQ0FBMEMsZ0ZBQWdGLGlJQUFpSSx1R0FBdUcsZ0RBQWdELG1KQUFtSiwwQ0FBMEMseUdBQXlHLHlEQUF5RCwyRUFBMkUsOENBQThDLDBHQUEwRyxnQkFBZ0IsaUNBQWlDLGdFQUFnRSxrREFBa0QsNEJBQTRCLHNDQUFzQyw4RUFBOEUsaUJBQWlCLGlCQUFpQiwrQkFBK0IseUNBQXlDLCtCQUErQix5Q0FBeUMsd0JBQXdCLHFCQUFxQixpQkFBaUIsVUFBVSxvQ0FBb0MsNkRBQTZELG1DQUFtQyw2REFBNkQsR0FBRyxpQkFBaUIsMEJBQTBCLEtBQUssd0JBQXdCLGFBQWEsUUFBUSxPQUFPLFNBQVMsb0NBQW9DLHlCQUF5QixvQ0FBb0MscUJBQXFCLEdBQUcsVUFBVSwrRkFBK0YsUUFBUSxtSEFBbUgsZ0VBQWdFLG1CQUFtQixZQUFZLG9CQUFvQiwwQ0FBMEMsdUZBQXVGLFlBQVksbUZBQW1GLGtDQUFrQyxhQUFhLHVCQUF1Qiw0RUFBNEUsV0FBVyxLQUFLLDZDQUE2QyxzREFBc0QsK0NBQStDLGFBQWEsbUlBQW1JLHFDQUFxQyw2QkFBNkIsY0FBYyxpQ0FBaUMsV0FBVyw4Q0FBOEMsMEZBQTBGLHNDQUFzQyxFQUFFLG9DQUFvQyxFQUFFLG1DQUFtQyxjQUFjLGFBQWEsZ0VBQWdFLHVEQUF1RCxTQUFTLDRFQUE0RSxnQkFBZ0IsMERBQTBELGlDQUFpQywwR0FBMEcsMEZBQTBGLDZFQUE2RSw0RUFBNEUsWUFBWSxpTEFBaUwsY0FBYywwRUFBMEUsRUFBRSxxQkFBcUIsb0lBQW9JLElBQUksOENBQThDLCtCQUErQixtR0FBbUcseUJBQXlCLDBEQUEwRCxjQUFjLEVBQUUsNkJBQTZCLHlCQUF5QixzQkFBc0IsK0ZBQStGLCtGQUErRixpQ0FBaUMsRUFBRSw2QkFBNkIsMkNBQTJDLGtDQUFrQyw2QkFBNkIsb0NBQW9DLGlEQUFpRCxRQUFRLDZCQUE2QixvQ0FBb0Msd0JBQXdCLHVHQUF1RyxvQkFBb0IsaUJBQWlCLDhEQUE4RCxLQUFLLDhCQUE4Qix1REFBdUQsZ0VBQWdFLFlBQVksNkNBQTZDLGdEQUFnRCxxQ0FBcUMsaURBQWlELFFBQVEsOEJBQThCLG9DQUFvQyx3QkFBd0IsdUdBQXVHLG9CQUFvQixpQkFBaUIsdURBQXVELEtBQUssaUJBQWlCLDhEQUE4RCw4REFBOEQsWUFBWSw2Q0FBNkMsK0NBQStDLCtCQUErQixtQkFBbUIsa0RBQWtELG9CQUFvQixRQUFRLHVFQUF1RSxvRUFBb0Usa0NBQWtDLFdBQVcsb0lBQW9JLG1MQUFtTCxzREFBc0Qsc0JBQXNCLElBQUkscUJBQXFCLFdBQVcsc0JBQXNCLFFBQVEsV0FBVyx3QkFBd0IsaUVBQWlFLDBCQUEwQixJQUFJLFNBQVMsU0FBUyx1REFBdUQscUZBQXFGLGdDQUFnQyxtQkFBbUIsaURBQWlELDZGQUE2Riw4RkFBOEYsV0FBVywwQ0FBMEMsa0JBQWtCLDBCQUEwQixnQ0FBZ0MsNkRBQTZELHdFQUF3RSxXQUFXLHdCQUF3QiwrRUFBK0UsZ0JBQWdCLHlDQUF5QyxRQUFRLFdBQVcsWUFBWSxpQ0FBaUMsRUFBRSx5QkFBeUIsNkJBQTZCLE1BQU0sV0FBVywwQ0FBMEMsU0FBUyxrQkFBa0IsMEJBQTBCLG1EQUFtRCxnQkFBZ0IsMEJBQTBCLGNBQWMsd0hBQXdILGdCQUFnQix1SEFBdUgsU0FBUyw4QkFBOEIsV0FBVyxvQ0FBb0MsUUFBUSxXQUFXLEtBQUssbUdBQW1HLHFCQUFxQixlQUFlLDBCQUEwQixNQUFNLGdCQUFnQiwwQ0FBMEMsT0FBTyxFQUFFLHFDQUFxQyxhQUFhLGdEQUFnRCxXQUFXLGNBQWMsaUNBQWlDLGdCQUFnQixnQkFBZ0IsOEZBQThGLDJDQUEyQyxpQ0FBaUMsS0FBSyxvSEFBb0gsZUFBZSxpQ0FBaUMsc0NBQXNDLG9HQUFvRyw0Q0FBNEMsbUJBQW1CLG9DQUFvQyxVQUFVLGdDQUFnQyw2RUFBNkUsd0RBQXdELG9CQUFvQixxQ0FBcUMsbUJBQW1CLHlEQUF5RCxrREFBa0QsZUFBZSx3RUFBd0UsV0FBVyw2RUFBNkUsS0FBSyxnQ0FBZ0MsK05BQStOLDBCQUEwQix5UkFBeVIsNkNBQTZDLGdDQUFnQyxvQkFBb0IsNkJBQTZCLE9BQU8scUpBQXFKLGdDQUFnQyxPQUFPLHNCQUFzQiwwQkFBMEIsaUJBQWlCLCtKQUErSixFQUFFLGVBQWUsa0JBQWtCLHVCQUF1QiwyU0FBMlMsWUFBWSw2REFBNkQsbUNBQW1DLG1CQUFtQixZQUFZLEtBQUssYUFBYSx3RkFBd0Ysb0ZBQW9GLHVEQUF1RCxjQUFjLHlDQUF5QyxpRkFBaUYsb0JBQW9CLHdHQUF3Ryx5QkFBeUIsMkJBQTJCLDhFQUE4RSxxREFBcUQsc0NBQXNDLGVBQWUsZ0ZBQWdGLFNBQVMsaUNBQWlDLHdCQUF3QixnREFBZ0QscUJBQXFCLEVBQUUsaVpBQWlaLHNHQUFzRyx5QkFBeUIsMkRBQTJELCtCQUErQixvQ0FBb0MsSUFBSSxFQUFFLGNBQWMsbUJBQW1CLDZCQUE2Qiw4QkFBOEIsdUNBQXVDLG9FQUFvRSxTQUFTLGlEQUFpRCxFQUFFLHNEQUFzRCxFQUFFLHlEQUF5RCxFQUFFLHNEQUFzRCxFQUFFLDhCQUE4QixFQUFFLHlDQUF5QyxFQUFFLHVEQUF1RCxFQUFFLG9FQUFvRSxFQUFFLDZDQUE2QyxFQUFFLG9EQUFvRCxFQUFFLDhDQUE4QyxFQUFFLG9EQUFvRCxFQUFFLDRDQUE0QyxPQUFPLG9EQUFvRCxFQUFFLHVEQUF1RCxFQUFFLDhDQUE4QyxFQUFFLDhCQUE4QixFQUFFLGtCQUFrQixFQUFFLDJCQUEyQixFQUFFLGlDQUFpQyxFQUFFLCtDQUErQyxFQUFFLGlCQUFpQixZQUFZLFdBQVcsS0FBSyxnQ0FBZ0MsWUFBWSx3QkFBd0IsaUJBQWlCLG1CQUFtQix1QkFBdUIsbUJBQW1CLFlBQVksV0FBVyx1RUFBdUUsb0JBQW9CLGlCQUFpQixZQUFZLFdBQVcsd0NBQXdDLFNBQVMsbUJBQW1CLFlBQVksV0FBVyw2QkFBNkIsMkJBQTJCLGlCQUFpQiw0Q0FBNEMsc0dBQXNHLHFCQUFxQiw4RUFBOEUsYUFBYSxpQkFBaUIsZ1JBQWdSLGNBQWMsMENBQTBDLFlBQVksZ0NBQWdDLGdDQUFnQyxpRUFBaUUsNkNBQTZDLGlCQUFpQix3Q0FBd0MsMEpBQTBKLCtEQUErRCxTQUFTLGdDQUFnQyxvQ0FBb0MsaUNBQWlDLDRCQUE0QixjQUFjLG1CQUFtQixnRUFBZ0UsVUFBVSw2QkFBNkIsSUFBSSxTQUFTLEtBQUssUUFBUSxJQUFJLDJDQUEyQyx1QkFBdUIsS0FBSyxhQUFhLElBQUksY0FBYyx1S0FBdUsscUVBQXFFLG1FQUFtRSxLQUFLLGVBQWUsa0NBQWtDLHFYQUFxWCx1WkFBdVosU0FBUyxvQ0FBb0Msc0NBQXNDLHNCQUFzQix3WUFBd1kscURBQXFELDhoQkFBOGhCLHdEQUF3RCwwZkFBMGYsMEJBQTBCLFFBQVEscURBQXFELHlCQUF5Qix1QkFBdUIsUUFBUSwwQ0FBMEMsU0FBUyxNQUFNLHFCQUFxQixhQUFhLDJDQUEyQyxNQUFNLGlDQUFpQyxrQkFBa0Isb0RBQW9ELG1CQUFtQixLQUFLLGlEQUFpRCxnQ0FBZ0MsWUFBWSxXQUFXLG9CQUFvQiwyREFBMkQsNEJBQTRCLGVBQWUsK0NBQStDLDJDQUEyQywwQ0FBMEMsWUFBWSxlQUFlLGdJQUFnSSx1R0FBdUcsVUFBVSx5Q0FBeUMsNkVBQTZFLFlBQVksV0FBVyxLQUFLLFdBQVcsU0FBUyxtQkFBbUIsdUJBQXVCLHFCQUFxQixnQkFBZ0Isb0JBQW9CLFlBQVksT0FBTyxjQUFjLFFBQVEsWUFBWSxNQUFNLHdDQUF3QyxRQUFRLFlBQVksTUFBTSxPQUFPLGVBQWUsK0tBQStLLHVCQUF1QixVQUFVLDREQUE0RCxjQUFjLDBDQUEwQyxrQkFBa0IsRUFBRSxpR0FBaUcsc0JBQXNCLFdBQVcsbUJBQW1CLDBDQUEwQyx5QkFBeUIsaUNBQWlDLHVDQUF1Qyx3Q0FBd0MsaUZBQWlGLFNBQVMsd0RBQXdELDBCQUEwQixpQkFBaUIsdUJBQXVCLHlCQUF5QixXQUFXLCtCQUErQixPQUFPLHlCQUF5QixnQ0FBZ0MseURBQXlELE1BQU0sUUFBUSxXQUFXLGFBQWEsNEVBQTRFLHNDQUFzQyxvQ0FBb0Msb0ZBQW9GLFNBQVMsY0FBYyxvR0FBb0csU0FBUywyQkFBMkIsNkNBQTZDLHdCQUF3Qix1R0FBdUcsc0NBQXNDLEVBQUUsc0ZBQXNGLEtBQUssdUJBQXVCLGtCQUFrQixhQUFhLHdDQUF3QywwQkFBMEIsV0FBVyxjQUFjLEtBQUsscUNBQXFDLDREQUE0RCxPQUFPLDBSQUEwUixrRkFBa0YsMEJBQTBCLHlCQUF5Qiw4QkFBOEIsZ0JBQWdCLElBQUksRUFBRSwyQkFBMkIscU9BQXFPLHdCQUF3QixrQ0FBa0MsNERBQTRELGNBQWMsZ0RBQWdELGNBQWMsZ0RBQWdELGdCQUFnQixRQUFRLGtCQUFrQiwwQkFBMEIscUZBQXFGLGFBQWEsMEVBQTBFLDRDQUE0QyxNQUFNLG9DQUFvQywyTkFBMk4sNkJBQTZCLGtDQUFrQyxnQ0FBZ0MsK0NBQStDLEVBQUUsaUdBQWlHLGFBQWEsNEdBQTRHLGlCQUFpQiw4RkFBOEYsSUFBSSxZQUFZLGNBQWMseUdBQXlHLHNDQUFzQyxzQ0FBc0Msb0NBQW9DLEtBQUssRUFBRSw4REFBOEQsbUJBQW1CLGdFQUFnRSwwQ0FBMEMsWUFBWSxFQUFFLEVBQUUsa0JBQWtCLFdBQVcsS0FBSyxXQUFXLGdFQUFnRSw2QkFBNkIsT0FBTyxFQUFFLCtCQUErQixvQ0FBb0MsS0FBSyxFQUFFLFFBQVEsV0FBVywwSUFBMEksc0RBQXNELDZCQUE2QixLQUFLLHFCQUFxQixFQUFFLDBCQUEwQiwrQkFBK0IsMENBQTBDLHdDQUF3QyxrQ0FBa0MscUJBQXFCLFNBQVMsUUFBUSxXQUFXLDZDQUE2QyxJQUFJLE1BQU0sc0JBQXNCLFNBQVMsUUFBUSxXQUFXLGtEQUFrRCxLQUFLLHVCQUF1QixpQkFBaUIsWUFBWSxXQUFXLEtBQUssTUFBTSw2REFBNkQsa0JBQWtCLDJDQUEyQyxPQUFPLHFEQUFxRCw0RUFBNEUsa0VBQWtFLG9DQUFvQyxFQUFFLDZCQUE2Qix1REFBdUQsbU5BQW1OLHVFQUF1RSw2R0FBNkcsb0NBQW9DLGlCQUFpQixLQUFLLDhCQUE4QixpQ0FBaUMsZ0NBQWdDLDJkQUEyZCxPQUFPLFNBQVMsK0VBQStFLEVBQUUscUJBQXFCLDhDQUE4QyxFQUFFLHlCQUF5QixpQkFBaUIsS0FBSyxLQUFLLG1LQUFtSyxnREFBZ0QsRUFBRSxjQUFjLFFBQVEscUJBQXFCLGdCQUFnQixLQUFLLFFBQVEsK0JBQStCLGFBQWEsa0NBQWtDLEVBQUUsa0RBQWtELDhCQUE4QixhQUFhLHNCQUFzQixNQUFNLHNEQUFzRCwrQ0FBK0MsOEJBQThCLCtGQUErRiw4Q0FBOEMsbUJBQW1CLFdBQVcsY0FBYyx1Q0FBdUMsS0FBSyxtQkFBbUIsc0JBQXNCLGFBQWEsaUNBQWlDLEVBQUUsc0RBQXNELCtDQUErQyxxQkFBcUIsMENBQTBDLG1CQUFtQix3QkFBd0IscUZBQXFGLEVBQUUsNGpCQUE0akIsdUJBQXVCLGFBQWEsT0FBTyxZQUFZLDBCQUEwQixrQkFBa0Isd0NBQXdDLFdBQVcsMEJBQTBCLFFBQVEsb0JBQW9CLDBCQUEwQixpQkFBaUIsMEJBQTBCLGlCQUFpQiwwQkFBMEIsZ0JBQWdCLDBCQUEwQixtQkFBbUIsMEJBQTBCLG9CQUFvQiwwQkFBMEIsaUJBQWlCLDBCQUEwQixhQUFhLDBCQUEwQixnQkFBZ0IsMEJBQTBCLFlBQVksMkJBQTJCLGNBQWMsMEJBQTBCLGFBQWEsMEJBQTBCLFlBQVksMEJBQTBCLGVBQWUscUNBQXFDLGFBQWEsbUdBQW1HLGNBQWMsMkZBQTJGLHNCQUFzQiwwQkFBMEIsMEJBQTBCLDBCQUEwQixXQUFXLDBCQUEwQixXQUFXLDBCQUEwQixXQUFXLDhDQUE4QyxXQUFXLDBCQUEwQixjQUFjLHNCQUFzQixpQkFBaUIseURBQXlELGtCQUFrQiwwQkFBMEIseUJBQXlCLHNCQUFzQixzQkFBc0Isc0JBQXNCLGlCQUFpQixzQkFBc0IsdUJBQXVCLHNCQUFzQixjQUFjLDBCQUEwQixZQUFZLDBCQUEwQixtQkFBbUIsb0NBQW9DLGdCQUFnQixpQ0FBaUMsY0FBYyx3REFBd0Qsb0JBQW9CLDJCQUEyQixVQUFVLHlCQUF5QixjQUFjLCtCQUErQixtQkFBbUIsc0JBQXNCLFNBQVMsOEJBQThCLFVBQVUsdUJBQXVCLE1BQU0saUJBQWlCLGdCQUFnQixXQUFXLHFDQUFxQyxjQUFjLGlCQUFpQixpQ0FBaUMsR0FBRyx1QkFBdUIsYUFBYSxnY0FBZ2Msa0JBQWtCLGVBQWUscUNBQXFDLDRCQUE0QixLQUFLLFdBQVcsS0FBSyxjQUFjLGVBQWUsNEJBQTRCLHVCQUF1Qix1QkFBdUIsa0NBQWtDLGFBQWEsa0JBQWtCLGNBQWMscUJBQXFCLHdCQUF3QixxQkFBcUIsNkJBQTZCLFdBQVcsa0JBQWtCLFVBQVUsWUFBWSxVQUFVLFNBQVMsY0FBYywrQkFBK0IsY0FBYyxtQkFBbUIsMEJBQTBCLHFFQUFxRSxpQ0FBaUMsK0JBQStCLGlDQUFpQywwQkFBMEIsRUFBRSxnQkFBZ0IsMEJBQTBCLGFBQWEsV0FBVyxhQUFhLGtCQUFrQixTQUFTLG9DQUFvQyxFQUFFLGdCQUFnQixlQUFlLGtDQUFrQyx3Q0FBd0MsY0FBYyxlQUFlLG1EQUFtRCxJQUFJLE1BQU0sa0JBQWtCLGtDQUFrQyxxQkFBcUIsaUJBQWlCLGtCQUFrQiw0QkFBNEIsbUJBQW1CLEtBQUssMkdBQTJHLFNBQVMsOENBQThDLGlCQUFpQixRQUFRLGVBQWUsYUFBYSxLQUFLLDhDQUE4QyxPQUFPLFVBQVUsT0FBTyxVQUFVLGVBQWUsOEJBQThCLGdGQUFnRixvREFBb0Qsc0VBQXNFLGlFQUFpRSx3Q0FBd0MsdUNBQXVDLFNBQVMsT0FBTyxlQUFlLGtCQUFrQix1QkFBdUIsU0FBUyxnREFBZ0QsU0FBUyxJQUFJLEVBQUUsV0FBVyw2REFBNkQsaUJBQWlCLG9DQUFvQyxlQUFlLDZEQUE2RCw4QkFBOEIsK0dBQStHLGlDQUFpQyxFQUFFLEdBQUcsaUJBQWlCLElBQUksR0FBRyxNQUFNLHlHQUF5RyxnQ0FBZ0MsaUJBQWlCLDRCQUE0QixhQUFhLHNIQUFzSCxnQkFBZ0IscUJBQXFCLEtBQUssdUNBQXVDLFNBQVMsdUJBQXVCLFlBQVksa0RBQWtELGtCQUFrQiwwQkFBMEIseUNBQXlDLDhCQUE4QixpQkFBaUIsK0RBQStELHdEQUF3RCxPQUFPLHVCQUF1QiwyQkFBMkIseUJBQXlCLElBQUksNENBQTRDLDJCQUEyQixXQUFXLDJDQUEyQyxXQUFXLHNCQUFzQixxQkFBcUIsNkVBQTZFLEVBQUUsMkJBQTJCLDZCQUE2QixtQ0FBbUMsdUJBQXVCLG9CQUFvQixxTUFBcU0sY0FBYyxhQUFhLHdEQUF3RCxjQUFjLGdDQUFnQyxXQUFXLG9EQUFvRCx3Q0FBd0MsU0FBUyx1RkFBdUYsbUJBQW1CLGlCQUFpQixXQUFXLEtBQUssdUJBQXVCLHdEQUF3RCxTQUFTLG1DQUFtQyxtQkFBbUIscUJBQXFCLG9DQUFvQyxtQkFBbUIseUNBQXlDLFdBQVcsK0JBQStCLHlDQUF5QywyQkFBMkIsK0JBQStCLEtBQUssZ0JBQWdCLDRDQUE0Qyx1QkFBdUIsZ0NBQWdDLHVCQUF1QixxQ0FBcUMsWUFBWSxnQkFBZ0Isb0NBQW9DLHVCQUF1QixpQ0FBaUMsTUFBTSxNQUFNLFFBQVEsV0FBVyxLQUFLLDRDQUE0QyxzREFBc0QsK0NBQStDLGdDQUFnQyx5QkFBeUIsY0FBYyxpQkFBaUIsYUFBYSxXQUFXLHFEQUFxRCwyR0FBMkcsc0JBQXNCLG1EQUFtRCx1QkFBdUIsZUFBZSxFQUFFLDZSQUE2Uix1QkFBdUIsYUFBYSxxRUFBcUUsTUFBTSxtQ0FBbUMsY0FBYyw2QkFBNkIsY0FBYyxpQkFBaUIseUdBQXlHLE1BQU0saUNBQWlDLGdDQUFnQyxzREFBc0QsOEJBQThCLGFBQWEsdURBQXVELE9BQU8scUJBQXFCLE9BQU8sb0JBQW9CLDJCQUEyQixXQUFXLE9BQU8sb0JBQW9CLHdCQUF3QixXQUFXLGdDQUFnQyx1Q0FBdUMsMENBQTBDLGFBQWEsa0NBQWtDLHlDQUF5QyxtQ0FBbUMsU0FBUyxPQUFPLG9CQUFvQixPQUFPLHFCQUFxQixhQUFhLGdDQUFnQyxZQUFZLFdBQVcsS0FBSyxXQUFXLDRDQUE0QyxzQ0FBc0MseUJBQXlCLGlCQUFpQixXQUFXLEtBQUssb0JBQW9CLGdCQUFnQixPQUFPLDJCQUEyQixzQkFBc0IsNEJBQTRCLFdBQVcsbURBQW1ELCtFQUErRSxvQkFBb0IsU0FBUyxvQkFBb0IsYUFBYSxJQUFJLFlBQVksWUFBWSxnQkFBZ0IsK0NBQStDLGFBQWEsUUFBUSxhQUFhLFlBQVkseUJBQXlCLE9BQU8sdURBQXVELFVBQVUsVUFBVSxrREFBa0QsRUFBRSx1Q0FBdUMsdUJBQXVCLGFBQWEsNFpBQTRaLGtCQUFrQixZQUFZLFdBQVcsS0FBSyx3QkFBd0IsOERBQThELFNBQVMsY0FBYyxrRUFBa0Usc0JBQXNCLG9OQUFvTiw4TUFBOE0sa0JBQWtCLGNBQWMsOExBQThMLFFBQVEsV0FBVyxLQUFLLDJCQUEyQixtQkFBbUIsNklBQTZJLHFIQUFxSCw4RUFBOEUsS0FBSyxvREFBb0QsYUFBYSxvREFBb0QsbURBQW1ELHlFQUF5RSxvRUFBb0UsbUZBQW1GLDhCQUE4QixNQUFNLFdBQVcsNEtBQTRLLDZDQUE2QyxrQ0FBa0MsaUdBQWlHLHdDQUF3QyxFQUFFLGtDQUFrQyxpQ0FBaUMsc0lBQXNJLGNBQWMsd0JBQXdCLGNBQWMsd0NBQXdDLGNBQWMsd0JBQXdCLGVBQWUsd0NBQXdDLG1CQUFtQiw0Q0FBNEMsZ0RBQWdELDZCQUE2QixpREFBaUQsbUJBQW1CLGtDQUFrQyxjQUFjLGljQUFpYyxjQUFjLDhiQUE4Yix1RUFBdUUsZ0JBQWdCLDJGQUEyRixrQkFBa0IsZ0NBQWdDLG9EQUFvRCxvQkFBb0IsZUFBZSxtQkFBbUIsb0ZBQW9GLG9CQUFvQix5QkFBeUIsWUFBWSxXQUFXLEtBQUssV0FBVyxvREFBb0QsU0FBUywyQkFBMkIsMkNBQTJDLDZCQUE2QixrQ0FBa0Msa0JBQWtCLGdEQUFnRCxTQUFTLGtCQUFrQixzQkFBc0IsOEVBQThFLFNBQVMsSUFBSSxtQkFBbUIsZ0ZBQWdGLGdCQUFnQiw0QkFBNEIsb0NBQW9DLGVBQWUsaUNBQWlDLDhDQUE4QyxzQkFBc0IsNEJBQTRCLDBEQUEwRCw2QkFBNkIsZUFBZSxxQ0FBcUMsd0RBQXdELDRCQUE0QixFQUFFLDRCQUE0Qix3QkFBd0IsUUFBUSxXQUFXLEtBQUsscUJBQXFCLGNBQWMsZ0JBQWdCLHNCQUFzQixVQUFVLGtCQUFrQixXQUFXLFdBQVcsRUFBRSxhQUFhLFFBQVEsV0FBVyxLQUFLLFdBQVcsY0FBYywyQkFBMkIsaUZBQWlGLDJCQUEyQixZQUFZLG9CQUFvQixLQUFLLHVCQUF1QixXQUFXLE1BQU0sdUJBQXVCLGdDQUFnQyxtSUFBbUksRUFBRSx5REFBeUQsZ0JBQWdCLDZCQUE2Qiw0QkFBNEIsZUFBZSw2Q0FBNkMsd0JBQXdCLHNFQUFzRSwrQkFBK0IsMEtBQTBLLHlCQUF5QixvQkFBb0IsWUFBWSxZQUFZLDRCQUE0QixLQUFLLHFDQUFxQyxRQUFRLDZCQUE2Qix3QkFBd0IsK0NBQStDLFdBQVcsS0FBSyxvQ0FBb0MsZ0JBQWdCLHdCQUF3QixtQ0FBbUMsUUFBUSxXQUFXLEtBQUssb0JBQW9CLDhFQUE4RSxLQUFLLHlCQUF5QixRQUFRLFdBQVcsaUJBQWlCLHNLQUFzSyxnQ0FBZ0Msb0JBQW9CLG1CQUFtQixnQ0FBZ0MsbURBQW1ELFdBQVcsS0FBSyxXQUFXLDBLQUEwSyxRQUFRLFdBQVcsK0NBQStDLFFBQVEsV0FBVyxrREFBa0QseUNBQXlDLHlFQUF5RSxXQUFXLHlCQUF5QixLQUFLLGNBQWMsV0FBVyxLQUFLLG9CQUFvQixZQUFZLGtEQUFrRCxzSkFBc0osdUZBQXVGLHlCQUF5Qiw4TkFBOE4saUNBQWlDLGtMQUFrTCxFQUFFLDBVQUEwVSx1QkFBdUIsYUFBYSxpS0FBaUssZ0JBQWdCLGlCQUFpQixJQUFJLGdDQUFnQyxrQkFBa0IscUJBQXFCLDRDQUE0Qyx3QkFBd0IsWUFBWSxJQUFJLFFBQVEsV0FBVyxLQUFLLG9DQUFvQyxVQUFVLHVCQUF1QixRQUFRLFdBQVcsMkJBQTJCLFFBQVEsV0FBVyxrQ0FBa0MsUUFBUSxXQUFXLEtBQUssa0JBQWtCLHNEQUFzRCxXQUFXLG9DQUFvQyxjQUFjLCtCQUErQixzQkFBc0IsY0FBYyxnQkFBZ0Isd0NBQXdDLE9BQU8sV0FBVyx5QkFBeUIsK0hBQStILGtFQUFrRSxLQUFLLFdBQVcsS0FBSyxXQUFXLFNBQVMsYUFBYSxtREFBbUQsWUFBWSw2Q0FBNkMsb0JBQW9CLDRCQUE0QixzREFBc0QsS0FBSywrQkFBK0Isa0JBQWtCLGdEQUFnRCxjQUFjLFlBQVksV0FBVyx3QkFBd0IsY0FBYyxNQUFNLGVBQWUsNkNBQTZDLE1BQU0saURBQWlELE1BQU0sMktBQTJLLE1BQU0sNldBQTZXLE1BQU0saUxBQWlMLGlCQUFpQiwyQkFBMkIsd0RBQXdELFdBQVcsRUFBRSw0QkFBNEIsc0JBQXNCLGdDQUFnQyxvRkFBb0YsT0FBTyxPQUFPLFlBQVksc0JBQXNCLFNBQVMsb0JBQW9CLGdEQUFnRCxXQUFXLGVBQWUsbUJBQW1CLHVCQUF1Qiw4QkFBOEIsNkJBQTZCLGlEQUFpRCxXQUFXLHdDQUF3QyxpQkFBaUIsU0FBUywyQkFBMkIsb0JBQW9CLGFBQWEsU0FBUyw0Q0FBNEMsMENBQTBDLElBQUksbUJBQW1CLFFBQVEsSUFBSSwwQkFBMEIsUUFBUSwyREFBMkQsU0FBUyxrQ0FBa0MscUJBQXFCLEVBQUUsdUNBQXVDLGlCQUFpQix1QkFBdUIsRUFBRSw2QkFBNkIsbURBQW1ELHVDQUF1QywwQkFBMEIsOENBQThDLGtCQUFrQixRQUFRLFdBQVcsbURBQW1ELFFBQVEsV0FBVyxjQUFjLFdBQVcsK0JBQStCLHVEQUF1RCxlQUFlLHVCQUF1QixxQkFBcUIsR0FBRyxzQkFBc0IsY0FBYyxRQUFRLGNBQWMsS0FBSyxXQUFXLEtBQUssV0FBVyx3REFBd0Qsb0RBQW9ELEVBQUUsWUFBWSw0QkFBNEIsWUFBWSxzREFBc0QsZUFBZSxzREFBc0QsR0FBRyxhQUFhLFlBQVksRUFBRSxtQkFBbUIscUNBQXFDLHNCQUFzQixzRUFBc0UsMERBQTBELDBDQUEwQyxFQUFFLGdCQUFnQiwrQkFBK0IsRUFBRSwwSEFBMEgsdUJBQXVCLGFBQWEsNklBQTZJLFFBQVEsbUVBQW1FLFFBQVEsdUJBQXVCLFNBQVMsdUJBQXVCLFFBQVEsOEJBQThCLGdCQUFnQixzQkFBc0IsZ0JBQWdCLDJCQUEyQixxQkFBcUIsU0FBUyx3QkFBd0IsWUFBWSxjQUFjLHVDQUF1QyxVQUFVLGdEQUFnRCxlQUFlLEtBQUssaUVBQWlFLDJDQUEyQyx5SEFBeUgsK0VBQStFLFNBQVMsZ0JBQWdCLDJCQUEyQixvSUFBb0ksZ0ZBQWdGLHFCQUFxQixJQUFJLHlIQUF5SCxxQkFBcUIsSUFBSSwrQ0FBK0MsdUJBQXVCLGFBQWEsK0JBQStCLHdDQUF3QyxFQUFFLGFBQWEsaUNBQWlDLDREQUE0RCwrR0FBK0csdUNBQXVDLG9CQUFvQiw0REFBNEQsbUJBQW1CLEVBQUUsaUNBQWlDLHlEQUF5RCxjQUFjLDJCQUEyQixLQUFLLG9CQUFvQixLQUFLLEVBQUUsR0FBRyxFQUFFLGdJQUFnSSx1QkFBdUIsYUFBYSx1SkFBdUosd0JBQXdCLFFBQVEsNkJBQTZCLFdBQVcsS0FBSyxXQUFXLHFCQUFxQixnQkFBZ0IsVUFBVSxrREFBa0QsaUNBQWlDLGtCQUFrQixRQUFRLHVDQUF1QyxpQkFBaUIsNERBQTRELDRDQUE0Qyx3REFBd0QsSUFBSSxnQkFBZ0IsdUVBQXVFLGtCQUFrQixRQUFRLGdDQUFnQyxtSkFBbUosMkNBQTJDLGFBQWEsSUFBSSxzSUFBc0ksMkJBQTJCLG9DQUFvQyxRQUFRLFdBQVcsS0FBSyxxQkFBcUIsMkNBQTJDLFVBQVUsa0JBQWtCLGdGQUFnRixRQUFRLFdBQVcsMEdBQTBHLHVQQUF1UCw4QkFBOEIsU0FBUyx3QkFBd0IsMEJBQTBCLHdCQUF3QixLQUFLLDhHQUE4RyxxQkFBcUIsS0FBSyx1RUFBdUUscUNBQXFDLElBQUksS0FBSyx3QkFBd0IsU0FBUyw2Q0FBNkMsUUFBUSxnQ0FBZ0MsdUVBQXVFLGtDQUFrQyxNQUFNLCtEQUErRCxZQUFZLFdBQVcsS0FBSyxtQ0FBbUMsWUFBWSxvREFBb0QsUUFBUSxzREFBc0Qsc0JBQXNCLCtCQUErQiwyQkFBMkIsdUNBQXVDLHdDQUF3QyxXQUFXLEtBQUssbURBQW1ELDhFQUE4RSxTQUFTLHlDQUF5QyxPQUFPLHFCQUFxQixzS0FBc0sscUJBQXFCLDZGQUE2RixzQkFBc0Isa0RBQWtELHdCQUF3Qiw2QkFBNkIsMkNBQTJDLDJCQUEyQiw4RkFBOEYseUJBQXlCLDBFQUEwRSx1QkFBdUIsdUVBQXVFLGNBQWMsb0RBQW9ELHNCQUFzQixRQUFRLDBDQUEwQyxrQkFBa0IsMEJBQTBCLGlCQUFpQixXQUFXLEtBQUssV0FBVyxrRkFBa0YsU0FBUyxvQkFBb0IsaUJBQWlCLGdEQUFnRCxnQkFBZ0IsaUNBQWlDLGdEQUFnRCxnQkFBZ0Isc0NBQXNDLGlDQUFpQyxjQUFjLGlCQUFpQixPQUFPLGdDQUFnQyxFQUFFLDBFQUEwRSx1QkFBdUIsYUFBYSxXQUFXLE1BQU0sNEVBQTRFLFlBQVksaUVBQWlFLGNBQWMsMEJBQTBCLFFBQVEsVUFBVSxnQ0FBZ0MsU0FBUywyQkFBMkIsYUFBYSxVQUFVLGdEQUFnRCxTQUFTLDRkQUE0ZCxXQUFXLG1HQUFtRyxHQUFHLHVCQUF1QixhQUFhLG1EQUFtRCwwQkFBMEIsK0hBQStILFFBQVEsV0FBVyxLQUFLLFdBQVcsaURBQWlELHVFQUF1RSx1QkFBdUIsUUFBUSxXQUFXLG9EQUFvRCxTQUFTLFlBQVksNkJBQTZCLGtDQUFrQyxRQUFRLElBQUksbUNBQW1DLFVBQVUsRUFBRSw2Q0FBNkMsdUJBQXVCLGFBQWEsdUNBQXVDLFdBQVcsTUFBTSw4RkFBOEYsVUFBVSx5RUFBeUUsYUFBYSwyQ0FBMkMsY0FBYywwQ0FBMEMsVUFBVSxxREFBcUQsT0FBTyxrQ0FBa0MsTUFBTSx5Q0FBeUMsTUFBTSw2Q0FBNkMsYUFBYSxxQ0FBcUMsaUJBQWlCLDhCQUE4QixZQUFZLHdIQUF3SCxpQ0FBaUMsT0FBTyxzREFBc0QsWUFBWSx3REFBd0QsaUJBQWlCLGFBQWEsNkNBQTZDLGFBQWEsZ0NBQWdDLEVBQUUsa0NBQWtDLHVCQUF1QixhQUFhLFdBQVcsT0FBTyw0REFBNEQsUUFBUSw4REFBOEQsR0FBRyx1QkFBdUIsYUFBYSwwR0FBMEcsZ0JBQWdCLDZDQUE2QyxnRUFBZ0UsMEJBQTBCLFFBQVEsa0JBQWtCLDJCQUEyQixRQUFRLGtCQUFrQiwyQkFBMkIsU0FBUyxZQUFZLGlDQUFpQyxZQUFZLGdEQUFnRCx3RkFBd0YsUUFBUSxXQUFXLG1CQUFtQixXQUFXLG1GQUFtRixnQkFBZ0IsSUFBSSxnQkFBZ0IsU0FBUyxVQUFVLGdCQUFnQixzQkFBc0IsS0FBSyxxQ0FBcUMsd0JBQXdCLDZCQUE2QixrQkFBa0IsNkNBQTZDLHNCQUFzQixZQUFZLGdCQUFnQixZQUFZLDJCQUEyQixZQUFZLGdCQUFnQixZQUFZLCtEQUErRCxtREFBbUQsY0FBYyxtQkFBbUIsK0hBQStILCtCQUErQixnQkFBZ0IsMERBQTBELGdCQUFnQixRQUFRLFdBQVcsS0FBSyxnQ0FBZ0MsS0FBSyxzQkFBc0IsUUFBUSxlQUFlLGdDQUFnQyxvQkFBb0IsRUFBRSxRQUFRLGVBQWUsZ0NBQWdDLG9CQUFvQixJQUFJLHdHQUF3RyxhQUFhLG9CQUFvQixhQUFhLG9CQUFvQixhQUFhLHNCQUFzQix5Q0FBeUMsY0FBYyxLQUFLLFdBQVcsMkNBQTJDLEtBQUssTUFBTSw0REFBNEQsTUFBTSxlQUFlLFFBQVEsK0JBQStCLEdBQUcsY0FBYywyQkFBMkIsZ0JBQWdCLFlBQVksZ0JBQWdCLFlBQVksV0FBVyxxREFBcUQsNkJBQTZCLGtFQUFrRSxvQkFBb0IsK0tBQStLLG9CQUFvQixxQkFBcUIsNkJBQTZCLHVGQUF1RixLQUFLLDhCQUE4QixRQUFRLEVBQUUsbUJBQW1CLDhIQUE4SCxjQUFjLDRDQUE0QyxvQ0FBb0MsK0JBQStCLGtCQUFrQixVQUFVLHFKQUFxSixPQUFPLDBCQUEwQixJQUFJLDJDQUEyQyxhQUFhLElBQUksNENBQTRDLFlBQVksT0FBTyxxQkFBcUIsY0FBYyxnS0FBZ0ssb0JBQW9CLFFBQVEsSUFBSSxTQUFTLFVBQVUsS0FBSyxTQUFTLE9BQU8sb0JBQW9CLG1CQUFtQixFQUFFLDBGQUEwRix1QkFBdUIsYUFBYSxnZ0JBQWdnQixnQ0FBZ0MsNkNBQTZDLG9KQUFvSix1QkFBdUIsOEZBQThGLDhFQUE4RSxxQ0FBcUMsc0RBQXNELG1CQUFtQix3Q0FBd0MsUUFBUSxzREFBc0QsS0FBSyx1QkFBdUIsc0NBQXNDLFVBQVUsaUNBQWlDLDZFQUE2RSxrQ0FBa0Msa0JBQWtCLG9CQUFvQixvQkFBb0Isd0NBQXdDLEtBQUssV0FBVyx3Q0FBd0MsV0FBVyxLQUFLLFdBQVcsb0NBQW9DLG9IQUFvSCw2Q0FBNkMsc0NBQXNDLHFCQUFxQixNQUFNLHlCQUF5QixpREFBaUQsV0FBVyxnQkFBZ0IsNkJBQTZCLFVBQVUsb0JBQW9CLFlBQVksWUFBWSxFQUFFLGNBQWMsY0FBYyxTQUFTLGNBQWMsaUJBQWlCLHVDQUF1QyxzQkFBc0IsNkJBQTZCLGtCQUFrQixxQ0FBcUMsOEJBQThCLG9WQUFvVixrQ0FBa0MsbUNBQW1DLFdBQVcsS0FBSywrR0FBK0csb0VBQW9FLFNBQVMsc0NBQXNDLDBDQUEwQyxXQUFXLEtBQUssK0VBQStFLHFGQUFxRixpREFBaUQsaUNBQWlDLGdFQUFnRSx3REFBd0QscUVBQXFFLHVDQUF1QywwQkFBMEIsRUFBRSwwREFBMEQsbUZBQW1GLEtBQUssTUFBTSxlQUFlLEtBQUssZ0lBQWdJLG1FQUFtRSxpQkFBaUIsZ0VBQWdFLCtDQUErQyxvQkFBb0IsY0FBYyxrQ0FBa0MsWUFBWSxXQUFXLG1FQUFtRSxpQkFBaUIsbUZBQW1GLHNDQUFzQyxnQkFBZ0IsY0FBYyxTQUFTLHVDQUF1Qyx5REFBeUQsNEJBQTRCLG1CQUFtQiwwQkFBMEIsc0lBQXNJLDJCQUEyQixpQkFBaUIsU0FBUyxtQkFBbUIsS0FBSywrQkFBK0IsT0FBTywwREFBMEQseUJBQXlCLGlDQUFpQyxrQ0FBa0MsaUJBQWlCLDBXQUEwVyxpR0FBaUcseUJBQXlCLGVBQWUsaUNBQWlDLDJDQUEyQyxxS0FBcUsseUJBQXlCLDRDQUE0QywwSEFBMEgsWUFBWSxXQUFXLEtBQUssY0FBYyw0RUFBNEUsbUNBQW1DLFNBQVMsSUFBSSx1QkFBdUIsZ0VBQWdFLDBCQUEwQixTQUFTLHlHQUF5RyxzREFBc0Qsb0NBQW9DLHdEQUF3RCxxR0FBcUcsa0NBQWtDLFdBQVcsNEJBQTRCLDRCQUE0QixrS0FBa0ssa0JBQWtCLDBCQUEwQixjQUFjLGNBQWMseUlBQXlJLGlFQUFpRSxrSEFBa0gsOENBQThDLDJDQUEyQywyQ0FBMkMsS0FBSyx5Q0FBeUMsZ0VBQWdFLGlDQUFpQyxpQ0FBaUMsbUZBQW1GLHNGQUFzRixvR0FBb0csdUJBQXVCLGtCQUFrQixxQkFBcUIsT0FBTywwRUFBMEUsMEJBQTBCLE1BQU0sY0FBYyxxREFBcUQsb0JBQW9CLGdDQUFnQyxVQUFVLCtOQUErTix3QkFBd0IsVUFBVSxpQ0FBaUMsNkJBQTZCLCtCQUErQixrQ0FBa0MsK0VBQStFLDRCQUE0QiwyS0FBMkssbUVBQW1FLGNBQWMsOENBQThDLG1DQUFtQyxhQUFhLHFCQUFxQiwwQ0FBMEMsMENBQTBDLHVEQUF1RCxZQUFZLHlEQUF5RCxtRUFBbUUscUNBQXFDLHlCQUF5QixpSUFBaUksU0FBUyxxQkFBcUIsbUdBQW1HLHdDQUF3QyxZQUFZLHNCQUFzQixLQUFLLEVBQUUsMkZBQTJGLHNHQUFzRyxpREFBaUQsa0VBQWtFLFlBQVksK0NBQStDLG1FQUFtRSxxQ0FBcUMsNEJBQTRCLHlGQUF5RixpQ0FBaUMsMkRBQTJELFFBQVEsdURBQXVELEtBQUssNkRBQTZELGNBQWMsdUJBQXVCLHNCQUFzQixPQUFPLDJCQUEyQixJQUFJLHVCQUF1Qix1RUFBdUUsZ0NBQWdDLDBEQUEwRCxjQUFjLDRCQUE0QixLQUFLLHdGQUF3RiwwQ0FBMEMsbUZBQW1GLGdIQUFnSCxTQUFTLHdDQUF3QyxxRUFBcUUsb0JBQW9CLDJCQUEyQiw2Q0FBNkMsMENBQTBDLHFEQUFxRCwwUEFBMFAsS0FBSyxnREFBZ0QsbUVBQW1FLG1CQUFtQiwrQkFBK0IsOElBQThJLHlDQUF5QyxxQ0FBcUMsbUJBQW1CLGlCQUFpQiwwQ0FBMEMsNkdBQTZHLHdDQUF3QyxrQ0FBa0Msa0RBQWtELEtBQUssY0FBYyxvQkFBb0IsS0FBSyxrQkFBa0IsZ0JBQWdCLDJCQUEyQixrQkFBa0IsUUFBUSxLQUFLLHdCQUF3QixPQUFPLFNBQVMscUNBQXFDLHlCQUF5QixPQUFPLHdDQUF3QyxJQUFJLDRDQUE0QyxLQUFLLFlBQVksK0pBQStKLGdDQUFnQyxnRkFBZ0Ysb0JBQW9CLGtMQUFrTCxrQkFBa0IsZUFBZSxrQ0FBa0MscUNBQXFDLFNBQVMsa0NBQWtDLHlFQUF5RSxzRUFBc0UsMEJBQTBCLG9EQUFvRCxjQUFjLHdCQUF3QixjQUFjLG1CQUFtQixvQkFBb0IsaUhBQWlILE1BQU0sT0FBTyx1SUFBdUksc0ZBQXNGLCtDQUErQywwQkFBMEIsa0RBQWtELEtBQUssbUVBQW1FLGFBQWEsaURBQWlELFlBQVksSUFBSSxXQUFXLEtBQUssbUNBQW1DLDRDQUE0QyxtQ0FBbUMsMExBQTBMLGVBQWUsZ0JBQWdCLCtGQUErRix3Q0FBd0Msc0RBQXNELDRDQUE0QyxHQUFHLFFBQVEsSUFBSSxjQUFjLG9FQUFvRSxnQkFBZ0IsdURBQXVELDZEQUE2RCw4Q0FBOEMsY0FBYywwQ0FBMEMsdUZBQXVGLGdCQUFnQixlQUFlLDBCQUEwQixjQUFjLGlEQUFpRCxvQ0FBb0MsY0FBYywyQkFBMkIsY0FBYyw0QkFBNEIsZ0JBQWdCLFlBQVksV0FBVyx1Q0FBdUMsbUJBQW1CLDZCQUE2QixRQUFRLFdBQVcsZ0NBQWdDLFFBQVEsV0FBVyxnQ0FBZ0Msb0hBQW9ILFFBQVEsV0FBVyxLQUFLLDhDQUE4QywrREFBK0QsUUFBUSxjQUFjLEtBQUssY0FBYywyRUFBMkUsUUFBUSxjQUFjLEtBQUssY0FBYyxpRkFBaUYsNkdBQTZHLFFBQVEsbUNBQW1DLEtBQUssbUNBQW1DLHFGQUFxRix1QkFBdUIsK0VBQStFLG1GQUFtRixXQUFXLGlDQUFpQyxRQUFRLFdBQVcsaUNBQWlDLGVBQWUsNEJBQTRCLDRCQUE0QixvQkFBb0IsY0FBYyx1REFBdUQsZ0JBQWdCLGdCQUFnQix1QkFBdUIsaUNBQWlDLHNEQUFzRCwrRUFBK0UsOEJBQThCLGdCQUFnQiw4REFBOEQscUJBQXFCLGdFQUFnRSxnQ0FBZ0MsMkJBQTJCLDJHQUEyRyxTQUFTLDRGQUE0RixJQUFJLE1BQU0sTUFBTSxrQkFBa0IsMkJBQTJCLGtFQUFrRSxJQUFJLE9BQU8sOEJBQThCLDZCQUE2QixpR0FBaUcsNEJBQTRCLHNEQUFzRCwyQ0FBMkMsSUFBSSxzQ0FBc0MsNkVBQTZFLFdBQVcsS0FBSyxXQUFXLHFCQUFxQixTQUFTLDZCQUE2QixvQkFBb0IsMkJBQTJCLFdBQVcsaUNBQWlDLElBQUksa0NBQWtDLDRDQUE0QyxRQUFRLFdBQVcsZ0JBQWdCLFdBQVcsTUFBTSxXQUFXLG1CQUFtQixXQUFXLFVBQVUsY0FBYyxFQUFFLHlEQUF5RCx1QkFBdUIsRUFBRSwwRUFBMEUsb0NBQW9DLHNEQUFzRCxvQ0FBb0MsNkVBQTZFLEVBQUUsR0FBRyx3QkFBd0Isb0JBQW9CLCtEQUErRCw2Q0FBNkMsd2dCQUF3Z0IsRUFBRSxxQ0FBcUMsdUNBQXVDLGtCQUFrQixNQUFNLDBDQUEwQyw4REFBOEQsR0FBRywyQkFBMkIsVUFBVSxPQUFPLGNBQWMsaU9BQWlPLFFBQVEsV0FBVyxrQkFBa0IsY0FBYyxnQkFBZ0Isa0JBQWtCLDJCQUEyQiw2QkFBNkIsb0JBQW9CLDJCQUEyQixnQkFBZ0IsZ0NBQWdDLElBQUksSUFBSSxJQUFJLGFBQWEsUUFBUSxXQUFXLGNBQWMsWUFBWSxTQUFTLE1BQU0sMkNBQTJDLGdEQUFnRCxvQ0FBb0MsNkJBQTZCLGdCQUFnQixnQ0FBZ0MsSUFBSSxJQUFJLElBQUksNkJBQTZCLFFBQVEsV0FBVyxLQUFLLFdBQVcsOEJBQThCLFlBQVksU0FBUyxNQUFNLDJCQUEyQixTQUFTLFFBQVEsV0FBVyxLQUFLLE9BQU8sa0RBQWtELFVBQVUsT0FBTywwRUFBMEUsZ0JBQWdCLHNFQUFzRSxzQkFBc0IscURBQXFELElBQUksNkJBQTZCLFlBQVkscUNBQXFDLHVKQUF1SixTQUFTLFFBQVEsV0FBVyxnQkFBZ0IsY0FBYyxtQkFBbUIsU0FBUyxpQkFBaUIsZ0NBQWdDLG9DQUFvQyxFQUFFLFFBQVEsV0FBVyxLQUFLLHFCQUFxQix3RkFBd0YsaUJBQWlCLCtDQUErQyxFQUFFLFNBQVMscUJBQXFCLHlCQUF5QixzREFBc0QsRUFBRSw0QkFBNEIsV0FBVyxTQUFTLHFDQUFxQyxrQkFBa0IsMkZBQTJGLG1CQUFtQixpQkFBaUIsS0FBSyxXQUFXLEtBQUssV0FBVyxpREFBaUQsZ0RBQWdELFNBQVMsMEdBQTBHLEVBQUUsb0JBQW9CLDBEQUEwRCx3RUFBd0UsbU9BQW1PLE1BQU0sc0RBQXNELEVBQUUsRUFBRSwwREFBMEQseUJBQXlCLHFCQUFxQixtRUFBbUUsZ0JBQWdCLDZHQUE2RyxLQUFLLGdCQUFnQixxRkFBcUYsZUFBZSwyQkFBMkIsaUZBQWlGLHdFQUF3RSxlQUFlLDBCQUEwQixpRkFBaUYsRUFBRSxNQUFNLHdDQUF3QyxXQUFXLEtBQUssOENBQThDLHNDQUFzQyx3SEFBd0gsWUFBWSwyQkFBMkIsMEhBQTBILEdBQUcseUJBQXlCLGtDQUFrQyxZQUFZLHFDQUFxQyxNQUFNLHdDQUF3QyxNQUFNLHNDQUFzQyxNQUFNLHFDQUFxQyw2SkFBNkosb0NBQW9DLG1CQUFtQix1QkFBdUIsbUJBQW1CLDZCQUE2QixxQ0FBcUMsbUJBQW1CLHNCQUFzQixvQkFBb0IsdUJBQXVCLHdFQUF3RSxxQkFBcUIsZ0VBQWdFLDZDQUE2QyxLQUFLLHlDQUF5QyxxQkFBcUIsK05BQStOLHNCQUFzQixFQUFFLDZCQUE2QixrQ0FBa0MsTUFBTSx3QkFBd0IsbUNBQW1DLDBDQUEwQyxrQ0FBa0MsMkJBQTJCLDJHQUEyRyxnQ0FBZ0MsRUFBRSxNQUFNLG1CQUFtQixpQkFBaUIsbURBQW1ELDRCQUE0Qix5QkFBeUIsa0JBQWtCLG9DQUFvQywwREFBMEQsU0FBUyxLQUFLLDJCQUEyQixrQ0FBa0MsMEJBQTBCLHdDQUF3QyxhQUFhLHlDQUF5QyxrQ0FBa0MseUJBQXlCLDJDQUEyQywwREFBMEQsZ0NBQWdDLDhFQUE4RSw2Q0FBNkMsbUJBQW1CLGtEQUFrRCwyREFBMkQsZUFBZSxrREFBa0Qsa0dBQWtHLGNBQWMsbUJBQW1CLDJCQUEyQiwwQkFBMEIseURBQXlELDRCQUE0Qiw2Q0FBNkMsbUdBQW1HLGlDQUFpQyxtQkFBbUIsMkJBQTJCLDBCQUEwQixzRUFBc0UsNEJBQTRCLG9EQUFvRCxJQUFJLDZCQUE2QixRQUFRLDRFQUE0RSw0T0FBNE8sNEJBQTRCLFFBQVEsNENBQTRDLHdCQUF3QiwwRUFBMEUsV0FBVyxLQUFLLGFBQWEsaUNBQWlDLGdEQUFnRCxLQUFLLDZDQUE2QywyUkFBMlIsZ0NBQWdDLE9BQU8sbUdBQW1HLGFBQWEsTUFBTSxzSEFBc0gsNkNBQTZDLDJCQUEyQixFQUFFLG1LQUFtSyw4QkFBOEIsUUFBUSxrSEFBa0gsb0VBQW9FLGdCQUFnQixtQkFBbUIsZ1BBQWdQLG1FQUFtRSw0QkFBNEIsRUFBRSxLQUFLLDhCQUE4QixpQkFBaUIsSUFBSSxtREFBbUQsRUFBRSxnR0FBZ0csMENBQTBDLG1MQUFtTCxPQUFPLFVBQVUsNkRBQTZELHFFQUFxRSxnREFBZ0QsZ0NBQWdDLGdDQUFnQyxZQUFZLE9BQU8sV0FBVyxnRkFBZ0YsSUFBSSxlQUFlLHNCQUFzQix5QkFBeUIsOENBQThDLFFBQVEsK0VBQStFLEVBQUUsMERBQTBELHdGQUF3RixRQUFRLGFBQWEscUNBQXFDLFVBQVUsT0FBTyxLQUFLLFFBQVEsb0NBQW9DLFdBQVcsS0FBSyx1QkFBdUIsMEVBQTBFLEtBQUssUUFBUSxVQUFVLHNEQUFzRCxHQUFHLHdDQUF3QyxzQ0FBc0MsaUNBQWlDLG9IQUFvSCxrQkFBa0IsYUFBYSxrSUFBa0ksY0FBYyxzQ0FBc0Msa0RBQWtELGNBQWMsMENBQTBDLDZEQUE2RCwyQkFBMkIsa0RBQWtELCtCQUErQixvREFBb0QsMEJBQTBCLFdBQVcsS0FBSyxXQUFXLG1DQUFtQyx5QkFBeUIsNkRBQTZELFdBQVcsS0FBSyxXQUFXLHdDQUF3QyxnRUFBZ0UsWUFBWSxhQUFhLHdEQUF3RCxTQUFTLE9BQU8sMEJBQTBCLDRCQUE0QixnQkFBZ0IsRUFBRSwrQkFBK0IsOEJBQThCLFdBQVcsS0FBSyxXQUFXLHVIQUF1SCxzQkFBc0Isd0JBQXdCLGFBQWEsUUFBUSxXQUFXLEtBQUssNkRBQTZELFNBQVMsUUFBUSxXQUFXLDhEQUE4RCxhQUFhLGdCQUFnQixzQkFBc0IsV0FBVyxvQ0FBb0Msc0JBQXNCLGFBQWEsWUFBWSxHQUFHLFNBQVMsVUFBVSxXQUFXLHlCQUF5QixFQUFFLDZZQUE2WSx1QkFBdUIsYUFBYSxtRkFBbUYsMEJBQTBCLGVBQWUsZ0hBQWdILG1EQUFtRCxLQUFLLFdBQVcsTUFBTSxtQ0FBbUMsc0RBQXNELGFBQWEseUJBQXlCLG1EQUFtRCxLQUFLLFdBQVcsTUFBTSxtQ0FBbUMsd0ZBQXdGLGFBQWEsMkJBQTJCLGVBQWUsWUFBWSxXQUFXLHdCQUF3QixTQUFTLGlCQUFpQixPQUFPLEVBQUUscUVBQXFFLHVCQUF1QixhQUFhLDhPQUE4Tyw4QkFBOEIsMkJBQTJCLG1CQUFtQix3Q0FBd0MsMEZBQTBGLHVMQUF1TCw4Q0FBOEMsc0VBQXNFLG9EQUFvRCw4Q0FBOEMsK0RBQStELG1FQUFtRSxpQ0FBaUMsa0dBQWtHLDhEQUE4RCxVQUFVLEVBQUUsaU9BQWlPLHVCQUF1QixhQUFhLDZDQUE2QyxzQkFBc0IsaURBQWlELGtCQUFrQiw0Q0FBNEMsdUJBQXVCLCtCQUErQixrQkFBa0IscUNBQXFDLHlCQUF5QixvREFBb0Qsb0NBQW9DLHFDQUFxQyx3QkFBd0Isb0JBQW9CLGVBQWUsNkNBQTZDLFFBQVEsV0FBVyxLQUFLLFdBQVcsdUNBQXVDLE9BQU8sMkJBQTJCLFFBQVEsV0FBVyxLQUFLLGNBQWMsdURBQXVELFNBQVMseUJBQXlCLG9CQUFvQixlQUFlLGtCQUFrQiw2Q0FBNkMsNkJBQTZCLG9CQUFvQiw2RkFBNkYsZ0NBQWdDLDJCQUEyQix3QkFBd0IsY0FBYyw0Q0FBNEMscUNBQXFDLFNBQVMsd0JBQXdCLGdDQUFnQywwREFBMEQsOEJBQThCLGlDQUFpQyxXQUFXLEtBQUssdUJBQXVCLFVBQVUsRUFBRSx1Q0FBdUMsdUJBQXVCLGFBQWEsNEJBQTRCLHdCQUF3Qix1REFBdUQsZUFBZSw2QkFBNkIsZ0xBQWdMLDZDQUE2Qyx1QkFBdUIsa0JBQWtCLGdCQUFnQixLQUFLLGdCQUFnQiwrQkFBK0IsUUFBUSxXQUFXLEtBQUssY0FBYyxRQUFRLFdBQVcsS0FBSyxXQUFXLG1CQUFtQixzQkFBc0IsOEhBQThILEdBQUcsdUJBQXVCLGFBQWEsbUZBQW1GLHNCQUFzQixzREFBc0QsZUFBZSxnRkFBZ0YsdUNBQXVDLGdDQUFnQyw0R0FBNEcsMkJBQTJCLDJGQUEyRixFQUFFLHFFQUFxRSx1QkFBdUIsYUFBYSxtQ0FBbUMsV0FBVyxTQUFTLGtCQUFrQixpaEJBQWloQixnREFBZ0QsRUFBRSxzQkFBc0IsdUJBQXVCLGFBQWEseU5BQXlOLHNCQUFzQiw4Q0FBOEMsUUFBUSxXQUFXLDJEQUEyRCxnQkFBZ0Isc0NBQXNDLGVBQWUsUUFBUSxXQUFXLGdCQUFnQixnQkFBZ0IsUUFBUSxXQUFXLHlCQUF5QixPQUFPLDRCQUE0QixPQUFPLCtCQUErQixzQkFBc0IsY0FBYyxlQUFlLDRDQUE0QyxxQkFBcUIsUUFBUSxXQUFXLDJCQUEyQixXQUFXLFFBQVEsV0FBVyx1QkFBdUIsMEJBQTBCLGlCQUFpQixXQUFXLGVBQWUsT0FBTyxnQkFBZ0IsaUVBQWlFLGtFQUFrRSwrQ0FBK0MscUdBQXFHLFFBQVEsUUFBUSx3Q0FBd0MsaUJBQWlCLGlCQUFpQix3SEFBd0gsd0ZBQXdGLFNBQVMsK0RBQStELDRGQUE0RixhQUFhLGdEQUFnRCxpT0FBaU8sc0JBQXNCLDZDQUE2QyxtUUFBbVEsdUJBQXVCLGdFQUFnRSxRQUFRLFdBQVcsS0FBSyxnREFBZ0QsS0FBSyxNQUFNLFFBQVEsV0FBVywrVkFBK1YsdUJBQXVCLFdBQVcsd0ZBQXdGLEtBQUssdUpBQXVKLGVBQWUsMENBQTBDLFNBQVMseUVBQXlFLG1IQUFtSCxPQUFPLGtEQUFrRCxRQUFRLFdBQVcseUNBQXlDLFFBQVEsV0FBVyx5Q0FBeUMsNEVBQTRFLFNBQVMsdUJBQXVCLG1CQUFtQiwrREFBK0QsV0FBVyxnQkFBZ0IsS0FBSyxNQUFNLDZGQUE2RixFQUFFLHNJQUFzSSx1QkFBdUIsYUFBYSwybUJBQTJtQixvQkFBb0IsaURBQWlELDRCQUE0QixvQ0FBb0MsNEJBQTRCLEVBQUUsNEJBQTRCLDBCQUEwQixzQkFBc0IsNkNBQTZDLGdCQUFnQixZQUFZLFdBQVcsaUNBQWlDLFNBQVMsc0JBQXNCLFlBQVksV0FBVyxLQUFLLFdBQVcsa0JBQWtCLDRCQUE0Qix5R0FBeUcsZ0JBQWdCLGtCQUFrQixpQkFBaUIsZ0JBQWdCLFlBQVksV0FBVyxLQUFLLFdBQVcseUVBQXlFLGNBQWMsMkRBQTJELHNCQUFzQix1REFBdUQsaUVBQWlFLDhEQUE4RCxrQkFBa0IsK0RBQStELGtFQUFrRSxnRUFBZ0Usd0JBQXdCLCtFQUErRSxvQkFBb0IsK0lBQStJLGNBQWMsa0dBQWtHLGNBQWMsaUdBQWlHLGNBQWMsZ0NBQWdDLGNBQWMsZ0RBQWdELG1QQUFtUCxvQkFBb0IseUJBQXlCLEtBQUssS0FBSyxXQUFXLEtBQUssV0FBVyxvQkFBb0IsZ0RBQWdELHdCQUF3QixtRUFBbUUsMEJBQTBCLEVBQUUsUUFBUSxNQUFNLFlBQVksYUFBYSxxQkFBcUIsUUFBUSxNQUFNLFlBQVksYUFBYSxxQkFBcUIsT0FBTyw0RUFBNEUsZ0JBQWdCLE1BQU0sOENBQThDLHFGQUFxRixXQUFXLEVBQUUsZ0ZBQWdGLGNBQWMsU0FBUyw0QkFBNEIsU0FBUyxXQUFXLHNDQUFzQyx5SEFBeUgsY0FBYyw0RUFBNEUsZ0JBQWdCLHlDQUF5QyxXQUFXLEtBQUssaUJBQWlCLFdBQVcsaUJBQWlCLFdBQVcsdVBBQXVQLG9CQUFvQiwyREFBMkQsS0FBSyx1QkFBdUIsMEZBQTBGLGdFQUFnRSx1RUFBdUUsc0NBQXNDLDRCQUE0QixjQUFjLDhCQUE4QixpQkFBaUIsOEJBQThCLDhCQUE4QixrQ0FBa0Msa0NBQWtDLDBHQUEwRyxlQUFlLDZDQUE2QyxXQUFXLG1JQUFtSSxVQUFVLE1BQU0sMEJBQTBCLFdBQVcsc0RBQXNELHVNQUF1TSxXQUFXLGtKQUFrSiw4REFBOEQsMEZBQTBGLG1CQUFtQiw2RUFBNkUsOENBQThDLGtQQUFrUCwwQkFBMEIsdUJBQXVCLHNKQUFzSixrSkFBa0osd0JBQXdCLGVBQWUseUNBQXlDLEdBQUcsaUJBQWlCLHlDQUF5QyxvR0FBb0csYUFBYSwrQ0FBK0MsbU9BQW1PLDZDQUE2QyxRQUFRLGdFQUFnRSwrREFBK0QsU0FBUyxxR0FBcUcsaUdBQWlHLGtGQUFrRixpR0FBaUcsdUNBQXVDLG1GQUFtRixjQUFjLFFBQVEscUNBQXFDLHlKQUF5SiwwQkFBMEIsMkNBQTJDLDZSQUE2UixpQ0FBaUMsMkJBQTJCLDRCQUE0QixzS0FBc0ssbUZBQW1GLGtCQUFrQiwyRkFBMkYsWUFBWSwyRkFBMkYsaUJBQWlCLGtDQUFrQywwSUFBMEksb0NBQW9DLGdEQUFnRCxjQUFjLHNHQUFzRyxrQ0FBa0MsNEJBQTRCLE1BQU0sdUJBQXVCLFFBQVEsV0FBVyw2Q0FBNkMsY0FBYyx1QkFBdUIsUUFBUSxXQUFXLDZDQUE2QyxlQUFlLHVDQUF1QyxrQkFBa0Isc0JBQXNCLFdBQVcsS0FBSyxXQUFXLGtCQUFrQixrREFBa0QsZUFBZSxvQ0FBb0MsbURBQW1ELGlCQUFpQixtQ0FBbUMsUUFBUSw0Q0FBNEMsUUFBUSxXQUFXLFdBQVcsS0FBSyxtRUFBbUUsTUFBTSxjQUFjLHdFQUF3RSxjQUFjLFdBQVcsY0FBYyxRQUFRLFdBQVcsc0NBQXNDLCtFQUErRSxLQUFLLFdBQVcsS0FBSyxvQkFBb0IsZUFBZSxhQUFhLHdFQUF3RSx3QkFBd0IsY0FBYywyREFBMkQseURBQXlELEtBQUssZUFBZSwrREFBK0QsbURBQW1ELFdBQVcsK0NBQStDLDhEQUE4RCxpQkFBaUIsNEJBQTRCLEVBQUUsNkJBQTZCLHNDQUFzQyxRQUFRLFdBQVcsS0FBSyw4QkFBOEIsd0VBQXdFLGtKQUFrSixtQkFBbUIsMEtBQTBLLG1CQUFtQixpQ0FBaUMsa0JBQWtCLG9DQUFvQyx1VUFBdVUsbUJBQW1CLDBHQUEwRyxpQkFBaUIsaURBQWlELG1CQUFtQix5REFBeUQsOENBQThDLHNFQUFzRSx3RkFBd0Ysc0JBQXNCLGdCQUFnQixpREFBaUQsbUxBQW1MLE9BQU8sa0JBQWtCLFdBQVcsZ0JBQWdCLHdDQUF3QyxPQUFPLGtCQUFrQixXQUFXLGdCQUFnQiw0Q0FBNEMscUNBQXFDLGtCQUFrQix3QkFBd0IsdURBQXVELGtCQUFrQixrQkFBa0Isc0RBQXNELDBCQUEwQix3QkFBd0IsSUFBSSxLQUFLLGtMQUFrTCxFQUFFLDBjQUEwYyx1QkFBdUIsYUFBYSxvS0FBb0ssK0JBQStCLG9CQUFvQixpRUFBaUUsOENBQThDLHdCQUF3QixxQkFBcUIsNERBQTRELGtDQUFrQyxtRkFBbUYsaUNBQWlDLHNCQUFzQixzQ0FBc0MsZ0JBQWdCLCtEQUErRCwwQkFBMEIsa0NBQWtDLGdEQUFnRCx5RUFBeUUsMEJBQTBCLCtEQUErRCwrT0FBK08sbUNBQW1DLHVCQUF1QiwwQkFBMEIsNktBQTZLLHVCQUF1QiwwQkFBMEIsaUxBQWlMLEVBQUUsMkJBQTJCLDBCQUEwQiwrREFBK0QsdUJBQXVCLCtDQUErQywyQkFBMkIsd0NBQXdDLGdCQUFnQix3QkFBd0IsNERBQTRELGtCQUFrQixFQUFFLGdJQUFnSSx1QkFBdUIsYUFBYSwyQ0FBMkMsc0JBQXNCLHFCQUFxQixXQUFXLGlLQUFpSyxXQUFXLEtBQUssV0FBVyx1QkFBdUIsa0RBQWtELFNBQVMsc0NBQXNDLFNBQVMsd0dBQXdHLEVBQUUscUNBQXFDLHVCQUF1QixhQUFhLHdPQUF3TyxrQkFBa0Isd0NBQXdDLFdBQVcsRUFBRSxzQkFBc0IsK0VBQStFLFdBQVcsS0FBSyw4Q0FBOEMsVUFBVSxzQ0FBc0MseUNBQXlDLG1EQUFtRCw4QkFBOEIscUJBQXFCLGVBQWUsRUFBRSxzREFBc0QsbUJBQW1CLEVBQUUsa0RBQWtELG1CQUFtQixzRUFBc0UsbUNBQW1DLDZIQUE2SCxxUEFBcVAsd0RBQXdELG1GQUFtRixnQkFBZ0IsK0lBQStJLGVBQWUscURBQXFELHFmQUFxZixvS0FBb0ssS0FBSywrQkFBK0IsZ3ZCQUFndkIsNkdBQTZHLFlBQVksc0hBQXNILGdCQUFnQixNQUFNLFNBQVMsZ0NBQWdDLFdBQVcsdUNBQXVDLGtEQUFrRCxXQUFXLEtBQUssV0FBVywrQ0FBK0MsZ0JBQWdCLHdGQUF3Riw2U0FBNlMscUZBQXFGLE1BQU0sUUFBUSxXQUFXLEtBQUssc0JBQXNCLHdCQUF3QixRQUFRLFdBQVcsc0NBQXNDLGdHQUFnRyxRQUFRLFdBQVcsc0NBQXNDLGdHQUFnRyxjQUFjLDBCQUEwQix1SEFBdUgsMkVBQTJFLDBCQUEwQiwyREFBMkQsYUFBYSxrQ0FBa0MsV0FBVyxjQUFjLFFBQVEsV0FBVyxLQUFLLHdDQUF3QyxXQUFXLEtBQUssd0JBQXdCLHdNQUF3TSxlQUFlLDJCQUEyQix3QkFBd0IsZUFBZSxtQkFBbUIscUdBQXFHLGtEQUFrRCx3REFBd0QscUJBQXFCLGlCQUFpQixjQUFjLEVBQUUsUUFBUSxXQUFXLEtBQUssV0FBVyxtRUFBbUUsZ0VBQWdFLDZIQUE2SCw0QkFBNEIscUJBQXFCLEtBQUsscUJBQXFCLFVBQVUsaUNBQWlDLGlEQUFpRCw2QkFBNkIsa0NBQWtDLDZFQUE2RSxRQUFRLElBQUksS0FBSyx5Q0FBeUMsNERBQTRELHFIQUFxSCxRQUFRLFdBQVcseURBQXlELGlDQUFpQyxRQUFRLElBQUksS0FBSyx5Q0FBeUMsNERBQTRELFFBQVEsb0JBQW9CLDZCQUE2QixPQUFPLFNBQVMsNkRBQTZELCtDQUErQyxzQkFBc0Isa0RBQWtELHlCQUF5QixtRUFBbUUsRUFBRSw2QkFBNkIsMkJBQTJCLHFCQUFxQix3RUFBd0UsdUJBQXVCLHNCQUFzQixvRUFBb0Usa0NBQWtDLDRCQUE0QixrR0FBa0csRUFBRSxFQUFFLDJDQUEyQyxFQUFFLDBTQUEwUyx1QkFBdUIsYUFBYSxnT0FBZ08sV0FBVyxTQUFTLGtDQUFrQyxRQUFRLG9EQUFvRCxRQUFRLE1BQU0sa0NBQWtDLFNBQVMsaUJBQWlCLG1CQUFtQixPQUFPLDZIQUE2SCxZQUFZLHdGQUF3RixxQ0FBcUMsWUFBWSw0RkFBNEYsUUFBUSw2QkFBNkIsK0NBQStDLGdCQUFnQixTQUFTLEVBQUUsK0NBQStDLGdCQUFnQixTQUFTLG1DQUFtQyxhQUFhLFNBQVMsYUFBYSwwQ0FBMEMsY0FBYyw0RkFBNEYsYUFBYSw4Q0FBOEMsWUFBWSw0RUFBNEUsa0JBQWtCLDhGQUE4RixVQUFVLDRGQUE0RixXQUFXLHFGQUFxRiwyQkFBMkIsU0FBUyxnREFBZ0QsUUFBUSw2Q0FBNkMsbUJBQW1CLFFBQVEsNkNBQTZDLG1CQUFtQixXQUFXLHNDQUFzQyxXQUFXLHNDQUFzQyxRQUFRLHFFQUFxRSxVQUFVLG1GQUFtRixTQUFTLGtHQUFrRyxVQUFVLCtDQUErQyxZQUFZLCtDQUErQyxZQUFZLG9EQUFvRCxpQkFBaUIsMkNBQTJDLGFBQWEsMkNBQTJDLGFBQWEsNkNBQTZDLGFBQWEsMENBQTBDLGlCQUFpQix3Q0FBd0MsZUFBZSxJQUFJLDRCQUE0QixhQUFhLG9GQUFvRixZQUFZLDBFQUEwRSxhQUFhLGlCQUFpQixhQUFhLDZDQUE2QyxhQUFhLDBDQUEwQyxpQkFBaUIsc0ZBQXNGLGFBQWEsMENBQTBDLGlCQUFpQixzRkFBc0YsZUFBZSxzRkFBc0YsaUJBQWlCLHdGQUF3RixvQkFBb0IsMkNBQTJDLGFBQWEsMENBQTBDLHFDQUFxQyxTQUFTLDJDQUEyQyxhQUFhLDZCQUE2QiwrQkFBK0IsRUFBRSwrQkFBK0IsbUJBQW1CLFFBQVEsMENBQTBDLGtCQUFrQixlQUFlLHlDQUF5QyxXQUFXLHVEQUF1RCxZQUFZLDBEQUEwRCxZQUFZLDJEQUEyRCxXQUFXLG1DQUFtQyxZQUFZLGtEQUFrRCxZQUFZLCtDQUErQyxXQUFXLG1DQUFtQyxnQkFBZ0Isb0RBQW9ELGdCQUFnQix5Q0FBeUMsZUFBZSwyQ0FBMkMsZUFBZSxvREFBb0QsZUFBZSx5Q0FBeUMsU0FBUyxtR0FBbUcsT0FBTyw0RUFBNEUsYUFBYSxtR0FBbUcsUUFBUSxnR0FBZ0csU0FBUyw2QkFBNkIsNkNBQTZDLEVBQUUsNkNBQTZDLDZCQUE2QixXQUFXLG9EQUFvRCxnQkFBZ0Isc0hBQXNILGdCQUFnQixxQ0FBcUMsYUFBYSw4QkFBOEIsOEJBQThCLFVBQVUsbUNBQW1DLFFBQVEsa0NBQWtDLGNBQWMsaUJBQWlCLElBQUksRUFBRSx1TEFBdUwsdUJBQXVCLGFBQWEsd1dBQXdXLGtCQUFrQiwwQ0FBMEMsMEJBQTBCLFlBQVksS0FBSyxLQUFLLEtBQUssTUFBTSxRQUFRLFdBQVcsS0FBSyxXQUFXLGtDQUFrQyxRQUFRLCtCQUErQix3QkFBd0IsaUJBQWlCLHlCQUF5QiwrQkFBK0Isd0JBQXdCLGlCQUFpQix5QkFBeUIsc0xBQXNMLHlHQUF5Ryx1REFBdUQsMkNBQTJDLGdCQUFnQiwyQkFBMkIsZ0JBQWdCLDRCQUE0QixjQUFjLGtCQUFrQixPQUFPLGtCQUFrQixtQkFBbUIsZ0JBQWdCLCtCQUErQixXQUFXLEtBQUssV0FBVyxnQkFBZ0IsMkJBQTJCLFNBQVMsUUFBUSxXQUFXLEtBQUssb0RBQW9ELHdDQUF3QyxlQUFlLGtDQUFrQyx3QkFBd0IsOEdBQThHLDZCQUE2QixxS0FBcUssUUFBUSxNQUFNLHFEQUFxRCwrRkFBK0YsbUpBQW1KLHdEQUF3RCxhQUFhLGdGQUFnRixRQUFRLFdBQVcsMkZBQTJGLFFBQVEsV0FBVyxLQUFLLHFCQUFxQixzQkFBc0IsaURBQWlELDJEQUEyRCxRQUFRLFdBQVcsb0RBQW9ELFFBQVEsWUFBWSxLQUFLLGdDQUFnQywrREFBK0Qsc0NBQXNDLHFDQUFxQyxNQUFNLHdGQUF3RixrQ0FBa0MsWUFBWSxLQUFLLGFBQWEseUdBQXlHLDZGQUE2RixFQUFFLHFRQUFxUSx1QkFBdUIsYUFBYSxrR0FBa0csNEJBQTRCLGNBQWMsWUFBWSxnQkFBZ0IsdUNBQXVDLHdDQUF3Qyw0RUFBNEUsOEVBQThFLDhGQUE4RixnREFBZ0Qsc0ZBQXNGLEVBQUUsdUVBQXVFLHVCQUF1QixhQUFhLDJDQUEyQyw0QkFBNEIsNEVBQTRFLHdQQUF3UCxRQUFRLHVEQUF1RCwwQ0FBMEMsTUFBTSw4RUFBOEUsU0FBUyxTQUFTLDhCQUE4QixZQUFZLG9EQUFvRCxvQkFBb0Isb0JBQW9CLGdFQUFnRSxxQkFBcUIsRUFBRSxxQ0FBcUMsdUJBQXVCLGFBQWEsNkNBQTZDLDBCQUEwQiwrQ0FBK0MsaUVBQWlFLGtFQUFrRSxFQUFFLGdDQUFnQyx1QkFBdUIsYUFBYSxtWUFBbVksY0FBYyxhQUFhLDBCQUEwQix3RkFBd0YsZUFBZSxpREFBaUQsS0FBSyxTQUFTLG9CQUFvQix5QkFBeUIsUUFBUSxXQUFXLHdFQUF3RSwyQkFBMkIsOEZBQThGLE1BQU0sT0FBTywyQ0FBMkMsaUJBQWlCLHlDQUF5QyxlQUFlLFFBQVEsV0FBVywwRkFBMEYsa0hBQWtILFFBQVEsd0JBQXdCLDhEQUE4RCxTQUFTLFNBQVMsa0JBQWtCLGNBQWMsUUFBUSxXQUFXLGdEQUFnRCxzQ0FBc0MsMkNBQTJDLGFBQWEsZUFBZSxzQkFBc0IsV0FBVyx3Q0FBd0MsOENBQThDLEtBQUssd0RBQXdELE9BQU8sdUNBQXVDLG9FQUFvRSxXQUFXLHdFQUF3RSxXQUFXLGlCQUFpQixTQUFTLFNBQVMsU0FBUywwRkFBMEYsY0FBYywwQ0FBMEMsY0FBYyxPQUFPLDhEQUE4RCw4Q0FBOEMsMkRBQTJELDhDQUE4QyxjQUFjLHVFQUF1RSxXQUFXLCtCQUErQixLQUFLLHFCQUFxQix1SEFBdUgsT0FBTyw4REFBOEQsaUJBQWlCLFdBQVcsbURBQW1ELFNBQVMsMEJBQTBCLGtCQUFrQixnSEFBZ0gsa05BQWtOLGNBQWMsaUJBQWlCLGNBQWMsNkZBQTZGLG9CQUFvQixxQ0FBcUMsUUFBUSxvQkFBb0IsMktBQTJLLCtCQUErQixvREFBb0QsMkJBQTJCLCtCQUErQixVQUFVLEtBQUssb0NBQW9DLG9DQUFvQyxpREFBaUQsc0NBQXNDLFNBQVMsb0JBQW9CLE9BQU8saUNBQWlDLGdCQUFnQixhQUFhLFFBQVEsV0FBVyxLQUFLLFdBQVcsNkJBQTZCLHVEQUF1RCxjQUFjLG9GQUFvRix5REFBeUQsa0JBQWtCLFlBQVksUUFBUSxXQUFXLEtBQUssMEVBQTBFLDRFQUE0RSxNQUFNLG1CQUFtQixRQUFRLFdBQVcsc0hBQXNILFFBQVEsV0FBVyxLQUFLLGlDQUFpQyw4TkFBOE4sYUFBYSxXQUFXLGtJQUFrSSxTQUFTLFFBQVEsV0FBVyxLQUFLLHVEQUF1RCwyQ0FBMkMsVUFBVSxlQUFlLGdCQUFnQix1REFBdUQsV0FBVyxxQkFBcUIsU0FBUyxjQUFjLHdCQUF3QixhQUFhLDJDQUEyQyxXQUFXLCtCQUErQix1UUFBdVEsOENBQThDLDJEQUEyRCxrREFBa0QsaUVBQWlFLDhEQUE4RCxnRUFBZ0Usd0RBQXdELDBIQUEwSCxjQUFjLGdDQUFnQyxtQkFBbUIsb0JBQW9CLGdCQUFnQixXQUFXLCtEQUErRCxpQkFBaUIsUUFBUSxXQUFXLEtBQUssNkJBQTZCLHdEQUF3RCxpQkFBaUIsdUJBQXVCLFFBQVEsV0FBVyxLQUFLLFdBQVcsK0JBQStCLHdCQUF3Qiw0REFBNEQsb0NBQW9DLGlCQUFpQix3QkFBd0IscXBCQUFxcEIsK0NBQStDLDJEQUEyRCx1QkFBdUIsc0JBQXNCLEVBQUUsd0JBQXdCLG1CQUFtQixzQkFBc0IsRUFBRSx3QkFBd0IsVUFBVSxrSUFBa0ksTUFBTSxLQUFLLFdBQVcsUUFBUSxXQUFXLG9GQUFvRixXQUFXLGlCQUFpQixTQUFTLFNBQVMsU0FBUywyQ0FBMkMsRUFBRSx5QkFBeUIsa0JBQWtCLHFDQUFxQyxxQkFBcUIsbUJBQW1CLFdBQVcsd0NBQXdDLDJDQUEyQyxnSEFBZ0gsYUFBYSxpQkFBaUIscUJBQXFCLHFDQUFxQyx5TUFBeU0sa0JBQWtCLGdDQUFnQyxFQUFFLG9TQUFvUyx1QkFBdUIsYUFBYSx3UEFBd1AsY0FBYyxzQkFBc0IsY0FBYyxlQUFlLHdCQUF3QixRQUFRLCtCQUErQixnQkFBZ0Isb0NBQW9DLHlDQUF5Qyw4QkFBOEIsaUNBQWlDLFNBQVMsa0JBQWtCLHlCQUF5QixVQUFVLGtCQUFrQixLQUFLLHlEQUF5RCxzQkFBc0IsU0FBUyxrQkFBa0IsNEJBQTRCLGNBQWMsb0NBQW9DLGNBQWMsU0FBUyxrREFBa0QsMERBQTBELHNCQUFzQiw2QkFBNkIsK0JBQStCLFNBQVMsY0FBYywrQ0FBK0MsY0FBYyxXQUFXLG1DQUFtQyxjQUFjLHFDQUFxQyxjQUFjLG9CQUFvQixxR0FBcUcsaUJBQWlCLG9DQUFvQyxlQUFlLGdJQUFnSSxtQkFBbUIsdUVBQXVFLGlCQUFpQix5QkFBeUIsZUFBZSxpRUFBaUUseUJBQXlCLG1CQUFtQixlQUFlLG1CQUFtQixtQkFBbUIsK0lBQStJLHVCQUF1Qiw2QkFBNkIsbUJBQW1CLHdCQUF3QixtQ0FBbUMsK0ZBQStGLFdBQVcscUNBQXFDLHlDQUF5Qyx1QkFBdUIsbUJBQW1CLGVBQWUsNENBQTRDLHdDQUF3Qyx1RkFBdUYsV0FBVyxxQ0FBcUMsOERBQThELHVCQUF1QixtQkFBbUIsZUFBZSw0Q0FBNEMsMkRBQTJELGtDQUFrQywrQ0FBK0MsaURBQWlELFdBQVcsS0FBSyxXQUFXLGlDQUFpQyxzQkFBc0IsNkJBQTZCLFlBQVksT0FBTyxRQUFRLFFBQVEsV0FBVyxLQUFLLGNBQWMsV0FBVywwQ0FBMEMsNEJBQTRCLElBQUksS0FBSyx3QkFBd0Isd0dBQXdHLHlCQUF5QixnQ0FBZ0MsY0FBYyxjQUFjLHVCQUF1QixNQUFNLFdBQVcsWUFBWSwyQkFBMkIsNENBQTRDLHdCQUF3QiwwQkFBMEIsNENBQTRDLHlCQUF5Qiw0QkFBNEIsUUFBUSxpQkFBaUIsc0NBQXNDLDJOQUEyTixJQUFJLHdCQUF3QixtQ0FBbUMsT0FBTyxNQUFNLDhCQUE4Qix5REFBeUQsb0NBQW9DLE9BQU8sS0FBSyxhQUFhLGVBQWUsT0FBTyxNQUFNLHNCQUFzQixpREFBaUQsc0NBQXNDLGlCQUFpQixrQ0FBa0Msd0JBQXdCLGNBQWMsaUJBQWlCLG1CQUFtQixjQUFjLGVBQWUsa0JBQWtCLHdDQUF3QyxnQkFBZ0IsMENBQTBDLDRWQUE0Viw4QkFBOEIsbURBQW1ELFdBQVcsdUZBQXVGLHlCQUF5QixxQ0FBcUMsNENBQTRDLDJCQUEyQixJQUFJLEtBQUssb0NBQW9DLGNBQWMsU0FBUyxNQUFNLHVCQUF1QixJQUFJLHlCQUF5QixLQUFLLG9FQUFvRSxTQUFTLFlBQVksOENBQThDLElBQUksZUFBZSxTQUFTLDRCQUE0QixzRUFBc0UsaUNBQWlDLGlFQUFpRSxpQ0FBaUMsd0JBQXdCLGlCQUFpQixxQ0FBcUMsc0JBQXNCLGdCQUFnQixpQkFBaUIsV0FBVyxLQUFLLFdBQVcsU0FBUyxLQUFLLGtCQUFrQixnQkFBZ0Isc0JBQXNCLGtCQUFrQixtQ0FBbUMsT0FBTyw4Q0FBOEMsT0FBTyxPQUFPLFNBQVMsb0NBQW9DLDhCQUE4QixnQ0FBZ0Msa0JBQWtCLCtNQUErTSxFQUFFLCtHQUErRyx1QkFBdUIsYUFBYSxtRkFBbUYsZ0JBQWdCLGdCQUFnQiwyQ0FBMkMsMkNBQTJDLDhCQUE4QixrQkFBa0IsNEVBQTRFLHFCQUFxQixFQUFFLHVCQUF1QixzQkFBc0IsK0JBQStCLElBQUksdUhBQXVILGdCQUFnQiwyQ0FBMkMsOEJBQThCLG9DQUFvQyxpQ0FBaUMsMENBQTBDLG1DQUFtQyxvRUFBb0UscUZBQXFGLEVBQUUsNEVBQTRFLHVCQUF1QixhQUFhLGdEQUFnRCw0QkFBNEIsdUdBQXVHLHlHQUF5RyxFQUFFLDBDQUEwQyx1QkFBdUIsYUFBYSx5QkFBeUIsNEJBQTRCLE1BQU0sMElBQTBJLDBCQUEwQixzQkFBc0IsaUNBQWlDLHdDQUF3Qyw2QkFBNkIseURBQXlELEVBQUUsb0JBQW9CLHVCQUF1QixhQUFhLGtGQUFrRiw0QkFBNEIsb0JBQW9CLGlCQUFpQixZQUFZLFdBQVcsdUJBQXVCLDZEQUE2RCx3REFBd0QsWUFBWSxLQUFLLFdBQVcsS0FBSyxXQUFXLG9IQUFvSCw4Q0FBOEMsWUFBWSxXQUFXLHFCQUFxQixFQUFFLEdBQUcsMkRBQTJELGFBQWEsa0RBQWtELFdBQVcsY0FBYywyQkFBMkIsWUFBWSxLQUFLLFdBQVcsS0FBSyxXQUFXLG9IQUFvSCw4Q0FBOEMsWUFBWSxXQUFXLHFCQUFxQixFQUFFLHVFQUF1RSxvQkFBb0IsY0FBYyx3QkFBd0IseUpBQXlKLCtDQUErQyxpSkFBaUosZ0JBQWdCLDhHQUE4RyxNQUFNLDRCQUE0Qix5SEFBeUgsbUJBQW1CLE1BQU0sNEJBQTRCLHlIQUF5SCxtQkFBbUIsZUFBZSxhQUFhLGlCQUFpQixhQUFhLHNDQUFzQyxvSEFBb0gsNE1BQTRNLHVCQUF1QixFQUFFLHdFQUF3RSx1QkFBdUIsYUFBYSx5REFBeUQsY0FBYyxPQUFPLFlBQVkscUJBQXFCLGdCQUFnQixtREFBbUQsZ0JBQWdCLHNEQUFzRCw0QkFBNEIsZ0NBQWdDLHlCQUF5Qix1QkFBdUIsMEJBQTBCLCtCQUErQixzQkFBc0IsWUFBWSxXQUFXLEtBQUssV0FBVyxzREFBc0QsY0FBYyx5QkFBeUIsbUJBQW1CLDBDQUEwQyxRQUFRLGFBQWEsOEJBQThCLFlBQVksa0RBQWtELCtCQUErQiwyREFBMkQsV0FBVyxnQkFBZ0IsUUFBUSxXQUFXLEtBQUssV0FBVyw0SUFBNEksZ0JBQWdCLDBCQUEwQiw2QkFBNkIsUUFBUSxXQUFXLEtBQUssV0FBVywwQ0FBMEMsdUJBQXVCLFFBQVEsb0NBQW9DLHdEQUF3RCxFQUFFLDJDQUEyQyx1QkFBdUIsYUFBYSxxQ0FBcUMsa0JBQWtCLGVBQWUsZ0VBQWdFLEtBQUssOEJBQThCLGdCQUFnQixvRUFBb0UsNkRBQTZELG1CQUFtQixnQkFBZ0IscUJBQXFCLGdDQUFnQyxLQUFLLGdDQUFnQyxJQUFJLDJCQUEyQixRQUFRLDZCQUE2QixFQUFFLFNBQVMsZ0JBQWdCLGlCQUFpQiw0QkFBNEIsMkJBQTJCLEtBQUssZ0NBQWdDLHNCQUFzQixnREFBZ0QsTUFBTSxxQkFBcUIsdUNBQXVDLGlDQUFpQyxZQUFZLElBQUksa0JBQWtCLHlCQUF5Qix1Q0FBdUMsMEJBQTBCLHNCQUFzQixRQUFRLEtBQUssWUFBWSxXQUFXLFdBQVcscUNBQXFDLFFBQVEsb0NBQW9DLEVBQUUsU0FBUyxvQkFBb0IsbUNBQW1DLFdBQVcsZUFBZSx1QkFBdUIsMENBQTBDLEVBQUUsMENBQTBDLFFBQVEsTUFBTSxrRUFBa0UsbUJBQW1CLHVEQUF1RCwwQkFBMEIsY0FBYywwRkFBMEYsTUFBTSxrQ0FBa0MsTUFBTSxxQkFBcUIsc0ZBQXNGLG1GQUFtRix3Q0FBd0MsOEhBQThILFdBQVcsZ0NBQWdDLG9CQUFvQixZQUFZLFdBQVcsNkNBQTZDLHVGQUF1Rix1QkFBdUIsNEJBQTRCLEtBQUsscUJBQXFCLEtBQUssNkJBQTZCLCtDQUErQyxtQkFBbUIsUUFBUSxJQUFJLEtBQUssaUNBQWlDLHdDQUF3Qyx5Q0FBeUMseUJBQXlCLE1BQU0sbUNBQW1DLDRCQUE0Qiw0QkFBNEIscUNBQXFDLGdCQUFnQixZQUFZLGtCQUFrQiwwQ0FBMEMsaUNBQWlDLHFEQUFxRCxxQkFBcUIscUJBQXFCLHlCQUF5QixPQUFPLFlBQVksU0FBUyxxQ0FBcUMsdUNBQXVDLG1DQUFtQyx5QkFBeUIsWUFBWSxXQUFXLGlCQUFpQix5Q0FBeUMsd0VBQXdFLEVBQUUsNkNBQTZDLE1BQU0sbUNBQW1DLHVCQUF1QixNQUFNLHdCQUF3QixNQUFNLG9EQUFvRCxNQUFNLDhCQUE4QixnR0FBZ0csNERBQTRELEtBQUssTUFBTSxNQUFNLGFBQWEsVUFBVSxFQUFFLCtCQUErQix1QkFBdUIsYUFBYSxvQ0FBb0MsMkJBQTJCLFFBQVEsT0FBTyxzQ0FBc0MsbUJBQW1CLGlEQUFpRCxFQUFFLGlEQUFpRCxhQUFhLHlEQUF5RCxNQUFNLEtBQUssUUFBUSxLQUFLLHNCQUFzQixFQUFFLDZCQUE2QixtREFBbUQsV0FBVyxtREFBbUQsSUFBSSw4QkFBOEIsNkNBQTZDLE1BQU0seUJBQXlCLG1FQUFtRSxzQkFBc0IsNkRBQTZELGlDQUFpQyxFQUFFLG9CQUFvQix1QkFBdUIsYUFBYSxzQkFBc0IsbUNBQW1DLGtCQUFrQixPQUFPLFFBQVEsaURBQWlELE9BQU8sa0NBQWtDLFFBQVEsMkJBQTJCLGFBQWEsZ0ZBQWdGLEdBQUcsdUJBQXVCLGFBQWEsV0FBVyx1Q0FBdUMsaUJBQWlCLE9BQU8saUJBQWlCLFNBQVMsY0FBYyxZQUFZLGlCQUFpQixPQUFPLGNBQWMsU0FBUyxnQkFBZ0IsR0FBRyx1QkFBdUIsYUFBYSxhQUFhLHdtQkFBd21CLGtEQUFrRCwrSkFBK0osZ0JBQWdCLGtEQUFrRCxrQkFBa0IsT0FBTyw0RkFBNEYsTUFBTSxtRUFBbUUsU0FBUywrR0FBK0csT0FBTyxtRkFBbUYsU0FBUyxtRkFBbUYsa0JBQWtCLHVIQUF1SCxrQkFBa0Isc0ZBQXNGLG1HQUFtRyx3RUFBd0UsY0FBYyxjQUFjLGVBQWUsdUJBQXVCLGVBQWUscURBQXFELG9UQUFvVCxtSUFBbUksR0FBRyx1QkFBdUIsYUFBYSwwWUFBMFksY0FBYywyU0FBMlMsZUFBZSxrQkFBa0Isa0JBQWtCLG1CQUFtQiw0RUFBNEUsc0JBQXNCLGtCQUFrQixzQkFBc0IsZ0JBQWdCLHdCQUF3QiwrQ0FBK0Msb0pBQW9KLHNFQUFzRSxzRkFBc0YsNEJBQTRCLDREQUE0RCxpQ0FBaUMsdUJBQXVCLDBQQUEwUCxLQUFLLEVBQUUsRUFBRSx3QkFBd0IsaUJBQWlCLGdDQUFnQyxzQkFBc0IsWUFBWSxXQUFXLDBDQUEwQyxzQkFBc0IsTUFBTSxtS0FBbUssb0RBQW9ELGlJQUFpSSxzREFBc0QsNkRBQTZELGtDQUFrQyx3REFBd0QsZUFBZSwrQkFBK0IsMEpBQTBKLGNBQWMsS0FBSyxXQUFXLEtBQUssV0FBVyxrQ0FBa0MsZ0NBQWdDLHdCQUF3QixNQUFNLGlCQUFpQixxREFBcUQsU0FBUyxzQkFBc0Isa0NBQWtDLHlCQUF5Qiw2QkFBNkIsMkJBQTJCLHVFQUF1RSxvREFBb0QsbUpBQW1KLDBEQUEwRCxzREFBc0QsU0FBUyxJQUFJLDBGQUEwRix3SEFBd0gsb0RBQW9ELG1CQUFtQixjQUFjLE9BQU8sc0hBQXNILGtCQUFrQixpQkFBaUIsMkVBQTJFLDZHQUE2Ryx1SkFBdUosS0FBSyxXQUFXLDZCQUE2QixrRkFBa0YsMkRBQTJELG1HQUFtRyx1Q0FBdUMsa0RBQWtELGtDQUFrQyxpREFBaUQsY0FBYyxtQ0FBbUMsY0FBYyxnQ0FBZ0MsY0FBYyxnQ0FBZ0MsNkVBQTZFLG1EQUFtRCxtREFBbUQsMEJBQTBCLGdEQUFnRCxpREFBaUQsaUJBQWlCLG1CQUFtQiwwQkFBMEIsdVdBQXVXLCtCQUErQix1Q0FBdUMscUdBQXFHLDRDQUE0QyxpRUFBaUUsWUFBWSxvRUFBb0UsWUFBWSxFQUFFLE9BQU8sa0VBQWtFLGtCQUFrQixxQkFBcUIsbUNBQW1DLHNDQUFzQyxJQUFJLHNDQUFzQyxXQUFXLHNCQUFzQixPQUFPLHNDQUFzQyxnTEFBZ0wsRUFBRSw0QkFBNEIsNEZBQTRGLGdMQUFnTCwwQkFBMEIsOERBQThELGdCQUFnQixNQUFNLDZCQUE2QixXQUFXLGdEQUFnRCxpQ0FBaUMsaUJBQWlCLDBCQUEwQixFQUFFLE9BQU8sdUNBQXVDLHFEQUFxRCxrRUFBa0UsNERBQTRELG9GQUFvRix5QkFBeUIsa0NBQWtDLDZEQUE2RCwrSEFBK0gsYUFBYSx3Q0FBd0MseUNBQXlDLDREQUE0RCx1QkFBdUIsWUFBWSx3QkFBd0IsWUFBWSx5QkFBeUIsNkJBQTZCLGtDQUFrQywwQkFBMEIsdUlBQXVJLEVBQUUsY0FBYyx5RUFBeUUsNEJBQTRCLDZEQUE2RCw0TUFBNE0sc0JBQXNCLGlFQUFpRSxVQUFVLHdCQUF3Qix3QkFBd0IsVUFBVSx3QkFBd0Isd0JBQXdCLGFBQWEsb0RBQW9ELDRCQUE0QiwrQkFBK0Isa0JBQWtCLGlDQUFpQyw4QkFBOEIsaUVBQWlFLGdDQUFnQywyRkFBMkYsbUJBQW1CLGtHQUFrRyxxQkFBcUIsc0NBQXNDLGNBQWMsa0JBQWtCLDZDQUE2QyxjQUFjLGlEQUFpRCxzREFBc0QsK0RBQStELG9CQUFvQixFQUFFLG1GQUFtRixFQUFFLDhVQUE4VSx1QkFBdUIsYUFBYSxrSEFBa0gsTUFBTSwyQ0FBMkMsWUFBWSxpS0FBaUssa0RBQWtELDBEQUEwRCxZQUFZLEVBQUUsWUFBWSxXQUFXLEtBQUssc0NBQXNDLFNBQVMsaUhBQWlILDRDQUE0QyxzQkFBc0IsNkNBQTZDLFdBQVcsS0FBSyxjQUFjLDBCQUEwQix5QkFBeUIsaUNBQWlDLFdBQVcsS0FBSywyQkFBMkIsdURBQXVELEVBQUUseUdBQXlHLHVCQUF1QixhQUFhLDRJQUE0SSxPQUFPLDZCQUE2QixpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLDBCQUEwQixRQUFRLHdCQUF3QixRQUFRLGlCQUFpQixZQUFZLGlDQUFpQyxZQUFZLGdDQUFnQyxjQUFjLFVBQVUsV0FBVyxHQUFHLGNBQWMsOERBQThELFFBQVEsc0VBQXNFLGFBQWEsTUFBTSxxREFBcUQsV0FBVyxLQUFLLGlCQUFpQixNQUFNLGlCQUFpQixPQUFPLGtCQUFrQixZQUFZLDZCQUE2QixpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLCtCQUErQixTQUFTLEtBQUssaUJBQWlCLE1BQU0sa0JBQWtCLGlCQUFpQixrQkFBa0IsaUJBQWlCLG1DQUFtQyxpQkFBaUIsOEJBQThCLFdBQVcsMEJBQTBCLFlBQVksaUNBQWlDLFlBQVksMEJBQTBCLGFBQWEsa0NBQWtDLFlBQVksMEJBQTBCLFlBQVksa0NBQWtDLGFBQWEsMEJBQTBCLGFBQWEsa0NBQWtDLGFBQWEsOEJBQThCLGdCQUFnQixrQkFBa0IsZUFBZSxtQ0FBbUMsZUFBZSw4QkFBOEIsZUFBZSxrQkFBa0IsZUFBZSxtQ0FBbUMsZUFBZSw4QkFBOEIsWUFBWSxrQkFBa0IsYUFBYSxtQ0FBbUMsYUFBYSw4QkFBOEIsVUFBVSxrQ0FBa0MscUJBQXFCLGtDQUFrQywrQkFBK0IsRUFBRSwwR0FBMEcsdUJBQXVCLGFBQWEsMkZBQTJGLGtCQUFrQiw0SEFBNEgscUJBQXFCLG1FQUFtRSxnQ0FBZ0MsWUFBWSxXQUFXLEtBQUssMEJBQTBCLG9CQUFvQixLQUFLLCtGQUErRixZQUFZLHNHQUFzRyxzREFBc0QsbUJBQW1CLG9CQUFvQixPQUFPLDZCQUE2QiwyTUFBMk0sd0lBQXdJLHVYQUF1WCwwQkFBMEIsU0FBUyx1REFBdUQsR0FBRyxFQUFFLHNFQUFzRSx1QkFBdUIsYUFBYSxzQkFBc0IsZ0JBQWdCLE9BQU8seUVBQXlFLGdCQUFnQixrQkFBa0Isd0NBQXdDLHVFQUF1RSxjQUFjLEdBQUcseUNBQXlDLGdCQUFnQix1Q0FBdUMsNEJBQTRCLGVBQWUsMkNBQTJDLHNEQUFzRCxPQUFPLDBDQUEwQyxPQUFPLDZEQUE2RCxjQUFjLElBQUksY0FBYyxvQkFBb0IsY0FBYyxtQkFBbUIsMkJBQTJCLDhCQUE4QixFQUFFLGdDQUFnQyxNQUFNLGVBQWUsSUFBSSxnQ0FBZ0MsY0FBYyxvQkFBb0IsMkJBQTJCLG1CQUFtQiwyQkFBMkIsbUNBQW1DLEVBQUUscUNBQXFDLE1BQU0sZUFBZSxJQUFJLCtDQUErQyxjQUFjLG9CQUFvQixlQUFlLE1BQU0sR0FBRyxxQkFBcUIsYUFBYSxnQkFBZ0IsZ0NBQWdDLHlCQUF5QixjQUFjLDZCQUE2QixhQUFhLDJCQUEyQixvREFBb0QsTUFBTSx3Q0FBd0MsWUFBWSwwQkFBMEIsd0JBQXdCLFdBQVcsbUJBQW1CLGlCQUFpQixnREFBZ0QsSUFBSSxPQUFPLDhDQUE4Qyx1Q0FBdUMsU0FBUyw2QkFBNkIsZUFBZSw0QkFBNEIsa0NBQWtDLEVBQUUsZ0NBQWdDLE9BQU8sSUFBSSx1RkFBdUYsY0FBYyxnRUFBZ0UsY0FBYyxrQ0FBa0MsY0FBYyxpQ0FBaUMsaURBQWlELGdCQUFnQix3QkFBd0IsS0FBSyxrQkFBa0Isb0JBQW9CLEtBQUssa0JBQWtCLHlDQUF5QyxnRkFBZ0YsNEJBQTRCLHlEQUF5RCxnQkFBZ0IsZ0RBQWdELGtCQUFrQixLQUFLLHdCQUF3Qiw4REFBOEQsa0NBQWtDLCtDQUErQyxJQUFJLEtBQUssV0FBVyxpREFBaUQsdUNBQXVDLHVEQUF1RCxFQUFFLHFDQUFxQyxnQkFBZ0IsMENBQTBDLE1BQU0sRUFBRSx1Q0FBdUMsWUFBWSxJQUFJLGdDQUFnQyxJQUFJLG1CQUFtQixnQkFBZ0Isb0RBQW9ELDRCQUE0QixpREFBaUQsdUNBQXVDLHdCQUF3QixzQ0FBc0MsSUFBSSxLQUFLLDhGQUE4Rix3REFBd0Qsd0JBQXdCLEtBQUssS0FBSyw4RkFBOEYsd0RBQXdELE9BQU8seUNBQXlDLE1BQU0sR0FBRyxxQkFBcUIsNkNBQTZDLHlCQUF5QixrR0FBa0csRUFBRSxzQkFBc0IseUJBQXlCLHNHQUFzRyx3Q0FBd0MsRUFBRSx1QkFBdUIseUJBQXlCLGtHQUFrRyxFQUFFLEVBQUUsR0FBRyx3QkFBd0IsbURBQW1ELDREQUE0RCwyQkFBMkIsWUFBWSxRQUFRLG1DQUFtQyxnQkFBZ0IsNENBQTRDLG9CQUFvQixnQkFBZ0IsZUFBZSxpQkFBaUIsOEJBQThCLHNCQUFzQixpQkFBaUIsR0FBRyxnQkFBZ0IsbURBQW1ELGdCQUFnQix5Q0FBeUMsZ0JBQWdCLDRDQUE0QyxjQUFjLG1CQUFtQiwyQkFBMkIsR0FBRyx1Q0FBdUMsNEJBQTRCLFlBQVksdUJBQXVCLGVBQWUsc0NBQXNDLDBCQUEwQixzQkFBc0IsaUNBQWlDLGtDQUFrQyxHQUFHLCtCQUErQix1Q0FBdUMsK0JBQStCLFlBQVksK0JBQStCLCtDQUErQywwQkFBMEIsWUFBWSxhQUFhLHNCQUFzQixXQUFXLGdCQUFnQiwyQ0FBMkMsOEJBQThCLGFBQWEsbURBQW1ELEdBQUcsNEJBQTRCLGdCQUFnQixnQkFBZ0IseUhBQXlILDRCQUE0QixZQUFZLCtCQUErQixlQUFlLEdBQUcsZ0JBQWdCLDRIQUE0SCw0QkFBNEIsNEVBQTRFLGdDQUFnQyxZQUFZLFFBQVEsc1FBQXNRLGdCQUFnQiw0SUFBNEksaUZBQWlGLGdCQUFnQix3QkFBd0IsZ0JBQWdCLDhEQUE4RCx3Q0FBd0MsZ0JBQWdCLGFBQWEsZ0NBQWdDLHNCQUFzQixhQUFhLHlCQUF5QiwwRUFBMEUsR0FBRyxxSEFBcUgsZ0JBQWdCLG9CQUFvQixXQUFXLEdBQUcsdUpBQXVKLDRCQUE0QixPQUFPLGNBQWMsbURBQW1ELDRDQUE0Qyw0QkFBNEIsWUFBWSwrQkFBK0Isd0JBQXdCLDhCQUE4QixZQUFZLCtCQUErQix1QkFBdUIsaUJBQWlCLEdBQUcsdVFBQXVRLFlBQVksZ0NBQWdDLFVBQVUsNkNBQTZDLGFBQWEsMEJBQTBCLFlBQVksK0JBQStCLGlCQUFpQixHQUFHLCtUQUErVCxVQUFVLDZDQUE2QyxZQUFZLDJCQUEyQixZQUFZLFNBQVMsR0FBRyx1QkFBdUIsYUFBYSxvRkFBb0YsaUJBQWlCLElBQUksZUFBZSxnQkFBZ0IsbUVBQW1FLGtCQUFrQixxRUFBcUUsTUFBTSxnQkFBZ0IsbUZBQW1GLDRCQUE0QixrRUFBa0UsNEVBQTRFLGdCQUFnQixhQUFhLGNBQWMsd0JBQXdCLDBDQUEwQyxtQ0FBbUMsd0JBQXdCLHVCQUF1QiwrREFBK0QsMEJBQTBCLGlDQUFpQyxJQUFJLGdCQUFnQixtQ0FBbUMsY0FBYyxtQkFBbUIsY0FBYyxxQ0FBcUMsNkVBQTZFLG1DQUFtQyxnRkFBZ0YsdUJBQXVCLCtCQUErQixXQUFXLGVBQWUsV0FBVyxvREFBb0QsOERBQThELHlKQUF5SiwwQkFBMEIsb0NBQW9DLElBQUksZ0JBQWdCLFNBQVMseUJBQXlCLHdCQUF3QixnQ0FBZ0MsS0FBSyxNQUFNLHNCQUFzQiwrQkFBK0IsMEJBQTBCLG1CQUFtQixNQUFNLElBQUksa0VBQWtFLFFBQVEsWUFBWSxHQUFHLDRDQUE0QyxjQUFjLGlCQUFpQixzRUFBc0UsbUNBQW1DLHdCQUF3Qiw2UEFBNlAsb0NBQW9DLHdDQUF3QyxpQ0FBaUMsV0FBVyx5QkFBeUIsNkJBQTZCLGlCQUFpQixvQkFBb0Isb0VBQW9FLDBGQUEwRiw4Q0FBOEMsb0JBQW9CLHNNQUFzTSw0SkFBNEosa0JBQWtCLGlDQUFpQywyRkFBMkYsaUZBQWlGLG1JQUFtSSxrQ0FBa0MsUUFBUSx1RUFBdUUsZ0JBQWdCLHNCQUFzQixZQUFZLEVBQUUsaUNBQWlDLGlCQUFpQixFQUFFLDBCQUEwQixNQUFNLDZFQUE2RSxlQUFlLFdBQVcsOEJBQThCLFdBQVcscUJBQXFCLGdCQUFnQixrQkFBa0Isc0RBQXNELG9DQUFvQyxnREFBZ0QsSUFBSSxvQkFBb0Isc0JBQXNCLDBCQUEwQixjQUFjLDBCQUEwQixrQkFBa0IsMEVBQTBFLCtDQUErQyxnQkFBZ0IsMkJBQTJCLElBQUksaUJBQWlCLFNBQVMsd0JBQXdCLG1CQUFtQiw2Q0FBNkMsRUFBRSw0Q0FBNEMsdUJBQXVCLGFBQWEsb0VBQW9FLHFDQUFxQyw0QkFBNEIsZUFBZSwwQkFBMEIsV0FBVyxLQUFLLFdBQVcsNkJBQTZCLFNBQVMsbUNBQW1DLGdCQUFnQix5RkFBeUYsWUFBWSxXQUFXLEtBQUssd0JBQXdCLHlEQUF5RCxZQUFZLGtDQUFrQyxtQ0FBbUMsNENBQTRDLGVBQWUsaUJBQWlCLHNCQUFzQixZQUFZLFdBQVcsbUdBQW1HLFVBQVUsRUFBRSw4Q0FBOEMsdUJBQXVCLGFBQWEsNkhBQTZILGdCQUFnQiw0TkFBNE4sc0JBQXNCLCtDQUErQyxhQUFhLDBDQUEwQyxrQkFBa0Isc0hBQXNILGtCQUFrQixvQ0FBb0MseUdBQXlHLDRFQUE0RSxpQkFBaUIsc0VBQXNFLHNOQUFzTixrRUFBa0UsZUFBZSx1RkFBdUYsV0FBVyxxQkFBcUIseUJBQXlCLE1BQU0sU0FBUyx1RUFBdUUsS0FBSyx3REFBd0QsOEJBQThCLHFnQkFBcWdCLCtTQUErUyxNQUFNLGdkQUFnZCw4QkFBOEIsMEVBQTBFLCtCQUErQixpREFBaUQsT0FBTyxXQUFXLDZDQUE2QyxtQkFBbUIsK0JBQStCLGtDQUFrQyxPQUFPLFdBQVcsNENBQTRDLGtEQUFrRCxPQUFPLFdBQVcsb0NBQW9DLDBCQUEwQiw4SkFBOEosNkxBQTZMLFFBQVEsRUFBRSxvSEFBb0gsdUJBQXVCLGFBQWEsMkRBQTJELGNBQWMsa3NDQUFrc0Msc0NBQXNDLG9CQUFvQiwwQkFBMEIsbUVBQW1FLElBQUksS0FBSyx5QkFBeUIsc0dBQXNHLEtBQUssZ1JBQWdSLDJVQUEyVSwydkJBQTJ2Qiw2QkFBNkIsK0NBQStDLHFEQUFxRCxrQ0FBa0MsYUFBYSw2REFBNkQsa0NBQWtDLGFBQWEsMkRBQTJELDZCQUE2QiwyQ0FBMkMsb0pBQW9KLDBCQUEwQiwwQ0FBMEMsaUNBQWlDLHFCQUFxQixnQkFBZ0IsOEJBQThCLHVCQUF1QixpQkFBaUIsRUFBRSxxREFBcUQsdUJBQXVCLGFBQWEsdVFBQXVRLHVMQUF1TCxtREFBbUQsNkZBQTZGLG9EQUFvRCxxQ0FBcUMsNkRBQTZELFdBQVcsS0FBSyxzREFBc0Qsc0JBQXNCLHlJQUF5SSxtREFBbUQsMkJBQTJCLG1DQUFtQyxXQUFXLEtBQUsseUJBQXlCLGtGQUFrRiw4QkFBOEIsNkJBQTZCLDBDQUEwQyxxQkFBcUIsK0NBQStDLFdBQVcsS0FBSyxpREFBaUQsc0NBQXNDLHlGQUF5RixlQUFlLHdCQUF3QiwrQ0FBK0MsV0FBVyxLQUFLLCtDQUErQyxFQUFFLDhQQUE4UCx1QkFBdUIsYUFBYSwrWUFBK1ksZ0JBQWdCLDhaQUE4WiwwREFBMEQsMEJBQTBCLGtJQUFrSSxZQUFZLGtCQUFrQiwyQkFBMkIsb0JBQW9CLGlEQUFpRCxxRUFBcUUsNkVBQTZFLHdCQUF3QixLQUFLLDREQUE0RCx3REFBd0QsRUFBRSwyQ0FBMkMsd0JBQXdCLGtCQUFrQixpTUFBaU0scUZBQXFGLHNKQUFzSix3REFBd0QsNkhBQTZILHFCQUFxQixrQ0FBa0MsV0FBVyx5Q0FBeUMsNkJBQTZCLDRDQUE0QyxpQkFBaUIsRUFBRSx1QkFBdUIseUdBQXlHLG9FQUFvRSxxSkFBcUosNEJBQTRCLCtDQUErQyxrQkFBa0IsSUFBSSxvQkFBb0IsSUFBSSxnQkFBZ0IsSUFBSSxLQUFLLHFCQUFxQiwrQ0FBK0MsdUNBQXVDLHFCQUFxQixvREFBb0QsOENBQThDLHVDQUF1QyxNQUFNLHVDQUF1QyxNQUFNLG1DQUFtQyx3REFBd0QsMEJBQTBCLG1CQUFtQixtR0FBbUcsMkRBQTJELCtCQUErQiw0Q0FBNEMsZ0VBQWdFLElBQUksZ0JBQWdCLGNBQWMsaUNBQWlDLFNBQVMsMEJBQTBCLGtCQUFrQixxREFBcUQsNERBQTRELCtCQUErQiw2REFBNkQsNkVBQTZFLHVJQUF1SSxpQkFBaUIsa0NBQWtDLGlCQUFpQix3R0FBd0csNEJBQTRCLGtCQUFrQiwyQ0FBMkMsOEJBQThCLGVBQWUsWUFBWSxJQUFJLEtBQUssa0JBQWtCLGdDQUFnQyxZQUFZLFdBQVcsZ0NBQWdDLFNBQVMsaUtBQWlLLGdDQUFnQywwREFBMEQsV0FBVyxLQUFLLFdBQVcsc0dBQXNHLHNCQUFzQixnQkFBZ0Isa0JBQWtCLGtDQUFrQywyQkFBMkIsNFNBQTRTLHdCQUF3QixrQkFBa0Isa0hBQWtILHlCQUF5Qiw2QkFBNkIseUJBQXlCLGlDQUFpQyxPQUFPLGFBQWEsMEdBQTBHLGdDQUFnQywwREFBMEQsK1VBQStVLElBQUksdUZBQXVGLDRHQUE0RywwQkFBMEIsa0VBQWtFLHdDQUF3Qyx5QkFBeUIsOENBQThDLG9EQUFvRCw4QkFBOEIscUNBQXFDLGdCQUFnQixVQUFVLFdBQVcsS0FBSyw0QkFBNEIsUUFBUSxXQUFXLG9EQUFvRCxrQ0FBa0MsUUFBUSxXQUFXLEtBQUssT0FBTyxnQ0FBZ0Msa0VBQWtFLHVDQUF1QyxxQ0FBcUMsRUFBRSx3QkFBd0IsZ1RBQWdULGlDQUFpQywyQ0FBMkMsdUJBQXVCLG1EQUFtRCxPQUFPLDhJQUE4SSxxREFBcUQsV0FBVyxFQUFFLG1CQUFtQixrQkFBa0IsbUNBQW1DLDhHQUE4RyxvREFBb0QsK0RBQStELHNDQUFzQywwQkFBMEIseUxBQXlMLElBQUksMkVBQTJFLGFBQWEsc0NBQXNDLDBCQUEwQixpS0FBaUssaVJBQWlSLFFBQVEscUJBQXFCLGdFQUFnRSxxQkFBcUIsbUJBQW1CLGdUQUFnVCxzQ0FBc0MseUNBQXlDLGlCQUFpQixtQkFBbUIsK05BQStOLGFBQWEscWdCQUFxZ0IsRUFBRSw2Q0FBNkMsR0FBRyw0QkFBNEIsc0JBQXNCLDJDQUEyQyxrR0FBa0csZ0NBQWdDLGVBQWUsY0FBYyw2Q0FBNkMsRUFBRSxvVEFBb1QsdUJBQXVCLGFBQWEsd01BQXdNLGtOQUFrTix3QkFBd0IsbUZBQW1GLDZEQUE2RCxXQUFXLEtBQUssd0RBQXdELGFBQWEsa0pBQWtKLCtDQUErQyxJQUFJLDJCQUEyQixNQUFNLDhCQUE4QixTQUFTLHdDQUF3Qyx3QkFBd0IsMkJBQTJCLG1DQUFtQyxXQUFXLEtBQUssV0FBVyw2R0FBNkcscUJBQXFCLHlEQUF5RCxXQUFXLEtBQUssdURBQXVELHNDQUFzQyxpSkFBaUosZUFBZSx1QkFBdUIsNkJBQTZCLGtCQUFrQixpQ0FBaUMsd0JBQXdCLCtDQUErQyxXQUFXLEtBQUssa0RBQWtELEVBQUUsc1BBQXNQLHVCQUF1QixhQUFhLFdBQVcsT0FBTyxrRUFBa0UsR0FBRyx1QkFBdUIsYUFBYSxvS0FBb0ssYUFBYSw4QkFBOEIsMEJBQTBCLGFBQWEsMEJBQTBCLGlCQUFpQiw4QkFBOEIsYUFBYSxtQ0FBbUMsaUJBQWlCLDBCQUEwQixrQkFBa0IsZ0RBQWdELGlCQUFpQiwwQkFBMEIsa0dBQWtHLFNBQVMsOENBQThDLHdEQUF3RCxVQUFVLFFBQVEsNENBQTRDLGlCQUFpQixFQUFFLDRDQUE0QyxpQkFBaUIsVUFBVSx3cEJBQXdwQixjQUFjLDBCQUEwQixxSEFBcUgsNkRBQTZELHFCQUFxQixFQUFFLHFJQUFxSSx1QkFBdUIsYUFBYSxvTkFBb04sMEJBQTBCLFFBQVEsZ0JBQWdCLDJCQUEyQixZQUFZLFdBQVcsS0FBSyxXQUFXLFVBQVUsd0VBQXdFLG1HQUFtRyxpUUFBaVEsRUFBRSx3S0FBd0ssdUJBQXVCLGFBQWEscUZBQXFGLGFBQWEscXJDQUFxckMsZ0NBQWdDLFlBQVksSUFBSSxLQUFLLGNBQWMsZ0VBQWdFLFlBQVksNjFEQUE2MUQseUJBQXlCLFlBQVksdUJBQXVCLEVBQUUsbURBQW1ELHVCQUF1QixhQUFhLGdOQUFnTixvQkFBb0Isa0ZBQWtGLFdBQVcseUVBQXlFLDRCQUE0QiwyR0FBMkcsaUNBQWlDLFlBQVksZ0VBQWdFLDJCQUEyQixPQUFPLG9GQUFvRixnRUFBZ0Usc0NBQXNDLGtEQUFrRCxvREFBb0QsOEVBQThFLG1CQUFtQixnRUFBZ0UsMEJBQTBCLGtDQUFrQyxTQUFTLHVHQUF1RywrQ0FBK0MsbURBQW1ELEdBQUcsRUFBRSw2S0FBNkssdUJBQXVCLGFBQWEsbUlBQW1JLGtCQUFrQixPQUFPLEdBQUcsMENBQTBDLElBQUksMENBQTBDLElBQUksMENBQTBDLG9CQUFvQixXQUFXLDBEQUEwRCxxREFBcUQsU0FBUyxnQkFBZ0Isc0JBQXNCLDRCQUE0QixjQUFjLE1BQU0sOEZBQThGLGlCQUFpQixtQkFBbUIsV0FBVyw2QkFBNkIsY0FBYyxzR0FBc0csc0VBQXNFLGNBQWMsR0FBRyxxREFBcUQsd0JBQXdCLElBQUkscURBQXFELHdCQUF3QixJQUFJLHFEQUFxRCx3QkFBd0IsK0JBQStCLHFCQUFxQixtQ0FBbUMsa0ZBQWtGLFlBQVksNkVBQTZFLGFBQWEsOEJBQThCLDhCQUE4QixnQkFBZ0IsMENBQTBDLEVBQUUsd0ZBQXdGLHVCQUF1QixhQUFhLGlFQUFpRSxhQUFhLHFIQUFxSCw4QkFBOEIsWUFBWSxJQUFJLEtBQUssY0FBYyxxTEFBcUwsdUJBQXVCLFlBQVkscUJBQXFCLEVBQUUsZ0NBQWdDLHVCQUF1QixhQUFhLHNCQUFzQixtRkFBbUYsSUFBSSxLQUFLLGNBQWMseUhBQXlILEtBQUsseU1BQXlNLGlCQUFpQix3QkFBd0Isb0JBQW9CLDhDQUE4QyxpREFBaUQsNkJBQTZCLFdBQVcsK0ZBQStGLHFCQUFxQixVQUFVLFlBQVksSUFBSSxLQUFLLHNEQUFzRCxZQUFZLElBQUkseUNBQXlDLDRCQUE0QiwyQkFBMkIsSUFBSSxLQUFLLHlDQUF5QyxXQUFXLGdCQUFnQixPQUFPLFNBQVMsS0FBSywwRkFBMEYsRUFBRSw4Q0FBOEMsdUJBQXVCLGFBQWEsZ0JBQWdCLG9CQUFvQixRQUFRLElBQUksWUFBWSxJQUFJLHdCQUF3QixTQUFTLHdCQUF3QixnRUFBZ0UsR0FBRyx1QkFBdUIsYUFBYSxrWEFBa1gsb0JBQW9CLCtDQUErQyxPQUFPLGlLQUFpSyxpQkFBaUIsaURBQWlELHFFQUFxRSw2RUFBNkUsNENBQTRDLElBQUksY0FBYyxTQUFTLFNBQVMsU0FBUywrQkFBK0IsK0JBQStCLG9DQUFvQyxTQUFTLDRGQUE0Riw2REFBNkQsS0FBSyxzREFBc0Qsa0NBQWtDLE9BQU8sV0FBVyxnRkFBZ0YsNkNBQTZDLG1CQUFtQixFQUFFLGdFQUFnRSxtQkFBbUIsK0JBQStCLCtGQUErRiw0SkFBNEosa0VBQWtFLFdBQVcsZ0hBQWdILGdCQUFnQiwyQkFBMkIsMkNBQTJDLGFBQWEsZ0RBQWdELFNBQVMsMENBQTBDLHFIQUFxSCx5RUFBeUUsZ09BQWdPLFNBQVMsODBCQUE4MEIsT0FBTyxpSUFBaUksbUZBQW1GLEtBQUssT0FBTyxZQUFZLDBDQUEwQyw2Z0JBQTZnQixvQkFBb0IsRUFBRSxpQkFBaUIsZ0ZBQWdGLGlEQUFpRCxxQkFBcUIseUJBQXlCLHlCQUF5QixnQkFBZ0Isa0RBQWtELHlCQUF5QixtRUFBbUUsaVpBQWlaLEdBQUcsaVlBQWlZLGtCQUFrQixnQ0FBZ0MsdUVBQXVFLDhCQUE4QixnSkFBZ0osRUFBRSw2QkFBNkIsK0ZBQStGLHlEQUF5RCxzSkFBc0osR0FBRyxnQ0FBZ0Msa0JBQWtCLGdDQUFnQyxJQUFJLEtBQUssNkVBQTZFLDBDQUEwQyxnQkFBZ0IsK0NBQStDLGNBQWMsMkdBQTJHLHlHQUF5RyxnRUFBZ0UsY0FBYyxPQUFPLElBQUksOEJBQThCLFNBQVMsMENBQTBDLE1BQU0saUNBQWlDLGFBQWEsa0RBQWtELHVCQUF1QixtREFBbUQsMENBQTBDLGlYQUFpWCxzREFBc0QsdUNBQXVDLFFBQVEsV0FBVyx1Q0FBdUMsZUFBZSxvREFBb0QsSUFBSSw0Q0FBNEMsV0FBVyxLQUFLLFdBQVcsY0FBYyxrQkFBa0Isb0ZBQW9GLFNBQVMsY0FBYyxRQUFRLElBQUksc0RBQXNELHVEQUF1RCxXQUFXLCtNQUErTSwrQkFBK0IsVUFBVSxXQUFXLEtBQUssUUFBUSxXQUFXLHFEQUFxRCx5REFBeUQsdUNBQXVDLCtDQUErQyxFQUFFLGtDQUFrQyxRQUFRLElBQUksS0FBSyxpRUFBaUUsaUJBQWlCLGNBQWMseUJBQXlCLHFGQUFxRixRQUFRLFdBQVcsS0FBSyw4Q0FBOEMsMExBQTBMLFFBQVEsV0FBVyxLQUFLLFdBQVcsY0FBYyxrQkFBa0IseURBQXlELDJJQUEySSxLQUFLLHNCQUFzQiw0QkFBNEIsNkJBQTZCLGNBQWMsMkJBQTJCLEtBQUssY0FBYyx3Q0FBd0MsNElBQTRJLGNBQWMsUUFBUSxJQUFJLEtBQUssNEJBQTRCLG9DQUFvQyxNQUFNLHNGQUFzRix3Q0FBd0Msa0NBQWtDLEtBQUssdUdBQXVHLG9CQUFvQixnQkFBZ0Isb0lBQW9JLHFDQUFxQyxTQUFTLDJCQUEyQixrSkFBa0osc0JBQXNCLHNCQUFzQiwyUEFBMlAsd0JBQXdCLDRGQUE0Rix5QkFBeUIsTUFBTSxnSUFBZ0kseUNBQXlDLGtDQUFrQyxxQkFBcUIsc0RBQXNELGtNQUFrTSwwQkFBMEIsZ0dBQWdHLG9CQUFvQiw0Q0FBNEMsOENBQThDLG1CQUFtQixLQUFLLFlBQVksSUFBSSxnQkFBZ0IsSUFBSSxvQkFBb0IsS0FBSyxNQUFNLDZFQUE2RSxNQUFNLFNBQVMseUhBQXlILFNBQVMsMEJBQTBCLGtCQUFrQiw2REFBNkQseUJBQXlCLDBEQUEwRCw2RkFBNkYsa0NBQWtDLDhCQUE4QixZQUFZLE1BQU0sT0FBTyxlQUFlLGlGQUFpRix3QkFBd0IsaUNBQWlDLHVCQUF1QixpRkFBaUYsb0VBQW9FLHNDQUFzQyw0QkFBNEIsK0NBQStDLGtCQUFrQixJQUFJLG9CQUFvQixJQUFJLGdCQUFnQixJQUFJLEtBQUsscUJBQXFCLCtDQUErQyx1Q0FBdUMscUJBQXFCLG9EQUFvRCw4Q0FBOEMsdUNBQXVDLE1BQU0sdUNBQXVDLE1BQU0sbUNBQW1DLHdEQUF3RCx5QkFBeUIsWUFBWSxJQUFJLEtBQUssaUNBQWlDLG1EQUFtRCwrQkFBK0IsZ0NBQWdDLGVBQWUsb0RBQW9ELCtCQUErQixhQUFhLEVBQUUsbVRBQW1ULHVCQUF1QixhQUFhLDRCQUE0QixjQUFjLDJCQUEyQixJQUFJLDBCQUEwQixVQUFVLEdBQUcsdUJBQXVCLGFBQWEsZ05BQWdOLGdCQUFnQixFQUFFLDZHQUE2RyxjQUFjLE1BQU0sd0NBQXdDLFNBQVMsdUJBQXVCLFFBQVEsMEZBQTBGLE9BQU8sMEZBQTBGLElBQUksNERBQTRELElBQUksZ0VBQWdFLFVBQVUsZ0dBQWdHLFVBQVUsZ0dBQWdHLFVBQVUsdUJBQXVCLElBQUkseUJBQXlCLFdBQVcsMENBQTBDLFFBQVEsaURBQWlELFNBQVMsaURBQWlELFNBQVMsR0FBRywrQ0FBK0MsSUFBSSwrQ0FBK0MsSUFBSSxnREFBZ0QsSUFBSSwrQ0FBK0MsTUFBTSw4Q0FBOEMsYUFBYSwwQ0FBMEMsaUJBQWlCLGdCQUFnQixrREFBa0QsZUFBZSx5REFBeUQsYUFBYSxpQ0FBaUMsY0FBYywwQ0FBMEMsYUFBYSxvQ0FBb0MsV0FBVyxvREFBb0QsNEJBQTRCLDhCQUE4QixhQUFhLDhCQUE4QixlQUFlLDhCQUE4QixvQkFBb0IsOEJBQThCLFdBQVcsOEJBQThCLFVBQVUsYUFBYSxrRUFBa0UsVUFBVSxtQ0FBbUMsUUFBUSxtQ0FBbUMsY0FBYyxtQ0FBbUMsYUFBYSw4QkFBOEIsb0JBQW9CLE9BQU8scUNBQXFDLGdCQUFnQixlQUFlLGdCQUFnQixlQUFlLE9BQU8sd0NBQXdDLGNBQWMsdUJBQXVCLElBQUksRUFBRSxzTEFBc0wsdUJBQXVCLGFBQWEsV0FBVyx1Y0FBdWMsdUNBQXVDLEVBQUUsMkhBQTJILHFCQUFxQixrQkFBa0IsaUNBQWlDLEdBQUcsdUJBQXVCLGFBQWEscUJBQXFCLHdCQUF3QixpSEFBaUgsVUFBVSw2QkFBNkIsTUFBTSxrQ0FBa0MsVUFBVSxnQ0FBZ0MsTUFBTSwrQkFBK0IsT0FBTyxzRUFBc0UsRUFBRSxnQkFBZ0IsdUJBQXVCLGFBQWEsZ0tBQWdLLHlFQUF5RSxnSEFBZ0gsU0FBUyxtREFBbUQsOEdBQThHLHNEQUFzRCx5RUFBeUUsb0JBQW9CLG9CQUFvQiw4Q0FBOEMsWUFBWSxXQUFXLEtBQUssY0FBYyxzQ0FBc0MseUNBQXlDLE1BQU0sZ0JBQWdCLFlBQVksV0FBVyxLQUFLLGlEQUFpRCxTQUFTLHdGQUF3RixrREFBa0Qsc0JBQXNCLHVEQUF1RCwyQkFBMkIsMkJBQTJCLHFDQUFxQyxXQUFXLEtBQUssV0FBVywrQ0FBK0MscUJBQXFCLDJEQUEyRCxXQUFXLEtBQUsseURBQXlELHNDQUFzQyxpSkFBaUosZUFBZSx3QkFBd0IsaURBQWlELFdBQVcsS0FBSywrQkFBK0IsRUFBRSxxTEFBcUwsdUJBQXVCLGFBQWEsZ0RBQWdELGdCQUFnQixpTkFBaU4sa0JBQWtCLGNBQWMsZUFBZSx1RUFBdUUsY0FBYyxRQUFRLE1BQU0sZUFBZSw2QkFBNkIsa0ZBQWtGLEVBQUUsTUFBTSwyQkFBMkIscUdBQXFHLEVBQUUsTUFBTSwyQkFBMkIsdUZBQXVGLEVBQUUsTUFBTSwyREFBMkQsZ0JBQWdCLGlMQUFpTCxrQkFBa0IsNEVBQTRFLEVBQUUsT0FBTyxrQkFBa0IscUJBQXFCLDZOQUE2Tiw4QkFBOEIsdUZBQXVGLDZCQUE2QixxREFBcUQsNEJBQTRCLGVBQWUscUhBQXFILGtCQUFrQixtQ0FBbUMsUUFBUSwwRUFBMEUsZ0JBQWdCLElBQUksOEJBQThCLDJCQUEyQixzQkFBc0IsMkRBQTJELG9KQUFvSixVQUFVLDJCQUEyQixTQUFTLFdBQVcsbUlBQW1JLDBCQUEwQixlQUFlLHNEQUFzRCxzQkFBc0IsZUFBZSwwREFBMEQsMkJBQTJCLGlCQUFpQixzQkFBc0IsRUFBRSwwQ0FBMEMsdUJBQXVCLGFBQWEsK1FBQStRLEVBQUUsMEVBQTBFLG9FQUFvRSxjQUFjLGVBQWUsc0NBQXNDLFFBQVEsZ0hBQWdILFNBQVMsS0FBSyx3QkFBd0IsTUFBTSx5QkFBeUIsT0FBTyx3QkFBd0IsVUFBVSx3QkFBd0IsUUFBUSx3QkFBd0IsbUJBQW1CLFNBQVMsMEJBQTBCLGFBQWEsZ0VBQWdFLFNBQVMsY0FBYyxjQUFjLHlCQUF5QixPQUFPLDRFQUE0RSxRQUFRLHlCQUF5QixRQUFRLHVCQUF1QixVQUFVLG9DQUFvQyxVQUFVLHFDQUFxQyxVQUFVLHNDQUFzQyxTQUFTLFFBQVEsMEJBQTBCLE9BQU8sT0FBTyx3QkFBd0IsT0FBTyxzQkFBc0IsT0FBTyxjQUFjLHdCQUF3QixTQUFTLE1BQU0sK0JBQStCLFdBQVcseUJBQXlCLE9BQU8seUJBQXlCLFlBQVksd0VBQXdFLHdDQUF3QyxJQUFJLFdBQVcsR0FBRyxFQUFFLGtDQUFrQywrQkFBK0IsRUFBRSxnTUFBZ00sdUJBQXVCLGFBQWEsOEdBQThHLG9CQUFvQixtSEFBbUgsbUNBQW1DLGFBQWEsZ0JBQWdCLGdCQUFnQixrQ0FBa0MsaUJBQWlCLHNCQUFzQiwyQ0FBMkMsZ0JBQWdCLHVVQUF1VSwwQkFBMEIsU0FBUywyRkFBMkYsR0FBRyxFQUFFLHNHQUFzRyx1QkFBdUIsYUFBYSx3UUFBd1EsY0FBYyxnRkFBZ0YsbUJBQW1CLDBLQUEwSyxtQkFBbUIsa0JBQWtCLGNBQWMseUNBQXlDLGlKQUFpSixtQkFBbUIsR0FBRyxjQUFjLCtDQUErQyxjQUFjLG9CQUFvQixzQkFBc0IsZ0JBQWdCLHdCQUF3Qix1QkFBdUIsOEdBQThHLG9DQUFvQyxxQkFBcUIsNEJBQTRCLHFCQUFxQixZQUFZLCtCQUErQixvREFBb0QsNEJBQTRCLHVCQUF1QixvTEFBb0wscUVBQXFFLHlIQUF5SCx1REFBdUQsZUFBZSxTQUFTLDJCQUEyQixVQUFVLHVCQUF1QiwwQkFBMEIsK0VBQStFLGtCQUFrQiw4S0FBOEssTUFBTSwwQkFBMEIsS0FBSywrQkFBK0Isb0NBQW9DLCtGQUErRixTQUFTLHdCQUF3QixvQkFBb0Isd0JBQXdCLG9CQUFvQixtQkFBbUIscUVBQXFFLDBCQUEwQiwrRUFBK0Usb0JBQW9CLHVGQUF1RixrQkFBa0IsZ05BQWdOLDJCQUEyQiwrREFBK0QsOEJBQThCLG1CQUFtQiw4QkFBOEIsNEhBQTRILGFBQWEsNEJBQTRCLCtCQUErQixnQ0FBZ0MsbUJBQW1CLGlCQUFpQixxRkFBcUYsY0FBYyx3REFBd0QsNERBQTRELDBCQUEwQiw2QkFBNkIsUUFBUSxXQUFXLEtBQUssV0FBVyxtRkFBbUYscUJBQXFCLFVBQVUsV0FBVyxLQUFLLFdBQVcsUUFBUSxXQUFXLDRDQUE0QyxnQ0FBZ0MsNEJBQTRCLDRCQUE0Qix3UEFBd1AsK0JBQStCLGVBQWUsMkJBQTJCLGdEQUFnRCxFQUFFLDZCQUE2QixlQUFlLGFBQWEsOEJBQThCLGtIQUFrSCwrQkFBK0IsaURBQWlELDJFQUEyRSx3QkFBd0IsdUJBQXVCLFVBQVUsd0JBQXdCLHVCQUF1QixzQkFBc0Isd0JBQXdCLDBCQUEwQixnQkFBZ0IsbUJBQW1CLDZCQUE2QixXQUFXLGdEQUFnRCxpQkFBaUIsaUJBQWlCLDJCQUEyQixvQkFBb0IsZ0NBQWdDLEVBQUUsNkJBQTZCLHFEQUFxRCw4Q0FBOEMsMkpBQTJKLHlCQUF5QiwrTEFBK0wsY0FBYyx5QkFBeUIscUJBQXFCLCtCQUErQixtREFBbUQsa1JBQWtSLDRCQUE0QiwyQ0FBMkMsd0JBQXdCLFFBQVEsV0FBVyxtQkFBbUIsNEJBQTRCLFdBQVcsMkJBQTJCLGFBQWEsV0FBVyxzQkFBc0Isc0JBQXNCLGlGQUFpRixzQkFBc0Isd0RBQXdELDhCQUE4QixxQ0FBcUMsdUJBQXVCLGlEQUFpRCxzQkFBc0IsK0JBQStCLE9BQU8sUUFBUSxvQkFBb0IsNkRBQTZELDRCQUE0Qiw0REFBNEQsS0FBSyxXQUFXLEtBQUssV0FBVyxnQkFBZ0IsVUFBVSxFQUFFLHVNQUF1TSx1QkFBdUIsYUFBYSxzQkFBc0IsaUJBQWlCLE9BQU8sR0FBRyxtQ0FBbUMsSUFBSSxtQ0FBbUMsSUFBSSxtQ0FBbUMsSUFBSSxtQ0FBbUMsY0FBYyxHQUFHLHVCQUF1QixhQUFhLG9VQUFvVSwwTEFBMEwsNENBQTRDLHFPQUFxTyx1RkFBdUYsc0JBQXNCLDRIQUE0SCxxQ0FBcUMsMkJBQTJCLE1BQU0sRUFBRSxzQkFBc0Isb0RBQW9ELGNBQWMseUNBQXlDLHFCQUFxQixnS0FBZ0sseURBQXlELEtBQUssNkNBQTZDLGdCQUFnQixtQ0FBbUMsWUFBWSxrQkFBa0IsaUJBQWlCLEdBQUcsTUFBTSxFQUFFLGdDQUFnQyw0RUFBNEUsZUFBZSxFQUFFLHdCQUF3QixnREFBZ0QsMEZBQTBGLFNBQVMsNEdBQTRHLGtCQUFrQixxQkFBcUIsOElBQThJLEVBQUUsZ0JBQWdCLDZCQUE2QixrS0FBa0ssK0ZBQStGLHFGQUFxRixXQUFXLDBCQUEwQiwrRUFBK0UseURBQXlELCtDQUErQyxxQkFBcUIsRUFBRSxLQUFLLG1FQUFtRSxRQUFRLDhFQUE4RSxHQUFHLDJDQUEyQywrQkFBK0IsOEJBQThCLDJCQUEyQiw0SUFBNEksbURBQW1ELEVBQUUsK0JBQStCLHdCQUF3QiwwR0FBMEcsOEtBQThLLGdCQUFnQixrQ0FBa0MsY0FBYyxpQkFBaUIsV0FBVyxLQUFLLFdBQVcsNEJBQTRCLFVBQVUsWUFBWSxJQUFJLEtBQUssaUNBQWlDLElBQUksS0FBSyxlQUFlLFNBQVMscUJBQXFCLG1CQUFtQixzQkFBc0Isa0JBQWtCLElBQUksMENBQTBDLGdCQUFnQixPQUFPLGNBQWMsa0VBQWtFLGdFQUFnRSxLQUFLLDZCQUE2QixXQUFXLEtBQUssK0JBQStCLFNBQVMsdUJBQXVCLHdCQUF3QixJQUFJLFFBQVEsWUFBWSxjQUFjLG1CQUFtQiwwQ0FBMEMsV0FBVyxLQUFLLGtDQUFrQywyQkFBMkIsU0FBUyxvQkFBb0IsaUNBQWlDLFdBQVcsS0FBSyx1QkFBdUIsa0NBQWtDLDBFQUEwRSxHQUFHLFNBQVMsY0FBYyxlQUFlLGFBQWEsZUFBZSw2RkFBNkYsaUVBQWlFLGdDQUFnQyx3Q0FBd0MsRUFBRSxrQkFBa0IsU0FBUyxxQ0FBcUMsNERBQTRELHdCQUF3QixlQUFlLEtBQUssU0FBUyxxQkFBcUIsU0FBUyx3Q0FBd0Msa0NBQWtDLGlFQUFpRSwwSEFBMEgsS0FBSyxrRUFBa0UsMEJBQTBCLHdEQUF3RCwwQ0FBMEMsRUFBRSxZQUFZLGFBQWEsc0JBQXNCLE1BQU0sbURBQW1ELFVBQVUsU0FBUyxXQUFXLDBFQUEwRSxzQ0FBc0Msa0JBQWtCLHFGQUFxRixhQUFhLDJCQUEyQixFQUFFLHVCQUF1QiwwREFBMEQsU0FBUyxFQUFFLGdCQUFnQixZQUFZLFdBQVcsS0FBSyxXQUFXLGlFQUFpRSwrQkFBK0IsOENBQThDLDBDQUEwQyxLQUFLLHdCQUF3QixlQUFlLG1GQUFtRiwyREFBMkQsMkxBQTJMLDJCQUEyQixhQUFhLHNFQUFzRSx5QkFBeUIscUdBQXFHLEtBQUssb0NBQW9DLHVEQUF1RCxtR0FBbUcsMEJBQTBCLGlFQUFpRSxtSkFBbUosNkJBQTZCLHlDQUF5QyxPQUFPLEtBQUsseUJBQXlCLGdCQUFnQixvQkFBb0IsMkNBQTJDLFdBQVcsMEJBQTBCLFFBQVEsV0FBVyxlQUFlLFNBQVMsbUJBQW1CLElBQUksTUFBTSx1QkFBdUIsbUJBQW1CLHVCQUF1QixtQkFBbUIsb0JBQW9CLHlCQUF5Qiw0QkFBNEIsd0JBQXdCLFFBQVEsV0FBVyxLQUFLLHNCQUFzQixxQkFBcUIsbUNBQW1DLGdCQUFnQixjQUFjLGdCQUFnQixpREFBaUQsUUFBUSxJQUFJLEtBQUssZUFBZSxrRkFBa0YsU0FBUyx5Q0FBeUMsaURBQWlELDBDQUEwQywyQkFBMkIseURBQXlELFdBQVcsK0JBQStCLFFBQVEsV0FBVywrQkFBK0IsMkNBQTJDLDZEQUE2RCxXQUFXLGlCQUFpQixzREFBc0QsNkJBQTZCLFFBQVEsV0FBVyxLQUFLLDhCQUE4QixxQkFBcUIsUUFBUSxXQUFXLGNBQWMsOGhCQUE4aEIsb0NBQW9DLEVBQUUsNEJBQTRCLHNCQUFzQixRQUFRLFdBQVcsc0NBQXNDLGFBQWEscUNBQXFDLGdIQUFnSCwwQ0FBMEMsWUFBWSxXQUFXLEtBQUssMkJBQTJCLGVBQWUsY0FBYyx3QkFBd0IsMEJBQTBCLFFBQVEsV0FBVyw4RUFBOEUsWUFBWSxvQ0FBb0Msd0NBQXdDLDBIQUEwSCwrSUFBK0ksNEJBQTRCLGtDQUFrQyxRQUFRLFdBQVcsOEJBQThCLHdCQUF3QixRQUFRLFdBQVcsS0FBSyxnQkFBZ0Isa0JBQWtCLG1CQUFtQiwrQkFBK0IsU0FBUywrQkFBK0IsaUNBQWlDLFFBQVEsV0FBVyxLQUFLLFdBQVcsMEJBQTBCLGtEQUFrRCxrSkFBa0oscUJBQXFCLFVBQVUsV0FBVyxLQUFLLGVBQWUsUUFBUSxXQUFXLEtBQUssMkJBQTJCLDBDQUEwQyxrQ0FBa0Msc0JBQXNCLGNBQWMsa0JBQWtCLDBCQUEwQixrQ0FBa0MsUUFBUSxXQUFXLEtBQUssa0VBQWtFLHlCQUF5Qiw4SkFBOEosV0FBVyxLQUFLLFdBQVcsb0VBQW9FLHlCQUF5QixRQUFRLDBCQUEwQixRQUFRLFdBQVcsS0FBSyxXQUFXLDBNQUEwTSxRQUFRLFdBQVcsbUdBQW1HLCtDQUErQyxVQUFVLCtHQUErRyw4RUFBOEUsT0FBTyxXQUFXLEtBQUssOEVBQThFLHdDQUF3Qyx3RUFBd0UsY0FBYyxVQUFVLGdCQUFnQixpSUFBaUksdUJBQXVCLFFBQVEsdUJBQXVCLFVBQVUsdUJBQXVCLFFBQVEsV0FBVyxLQUFLLHFOQUFxTixXQUFXLEtBQUssY0FBYywrQ0FBK0MsMkpBQTJKLDRDQUE0QyxxRkFBcUYsUUFBUSxXQUFXLDRCQUE0QixrQkFBa0IseUVBQXlFLHVDQUF1QyxNQUFNLFFBQVEsU0FBUyxnQkFBZ0IscUJBQXFCLFVBQVUsdUZBQXVGLGlCQUFpQiw0REFBNEQsRUFBRSx1REFBdUQsRUFBRSx1REFBdUQsc0JBQXNCLDJFQUEyRSxFQUFFLHNFQUFzRSxFQUFFLFNBQVMsNENBQTRDLFNBQVMsZ0JBQWdCLHFCQUFxQixnQkFBZ0IsbUNBQW1DLGlEQUFpRCxTQUFTLGdCQUFnQixxQkFBcUIscUJBQXFCLG1DQUFtQyxtQ0FBbUMsU0FBUyxnQkFBZ0IsMkJBQTJCLCtFQUErRSwyQ0FBMkMsK0NBQStDLGdCQUFnQixzQ0FBc0MsbUJBQW1CLG9FQUFvRSxxQkFBcUIsa0JBQWtCLCtDQUErQyxTQUFTLHVCQUF1Qix1QkFBdUIsNEJBQTRCLFdBQVcsS0FBSywrQkFBK0IsZ0NBQWdDLHlCQUF5Qix1Q0FBdUMsbWVBQW1lLHFFQUFxRSxvQkFBb0Isd0RBQXdELDRHQUE0RyxXQUFXLEtBQUssK0ZBQStGLGtLQUFrSyxnQkFBZ0IsOENBQThDLGdCQUFnQiw0Q0FBNEMsaUJBQWlCLCtFQUErRSw2QkFBNkIsK0RBQStELDBEQUEwRCxrZ0JBQWtnQixzQkFBc0IsNEhBQTRILDJDQUEyQyxrV0FBa1csZ0NBQWdDLHdCQUF3QixtQ0FBbUMsMkhBQTJILEtBQUssc0NBQXNDLCtIQUErSCxZQUFZLHFDQUFxQyxtRUFBbUUsc0JBQXNCLDBFQUEwRSxrRkFBa0YsaUJBQWlCLHVCQUF1QixnREFBZ0QscUZBQXFGLDREQUE0RCxtTEFBbUwsUUFBUSxXQUFXLGlFQUFpRSxpQkFBaUIsUUFBUSxXQUFXLGlFQUFpRSwwQkFBMEIsUUFBUSxXQUFXLG1FQUFtRSx3RUFBd0UscUJBQXFCLHdCQUF3Qix3aUNBQXdpQyxxQkFBcUIsMkNBQTJDLFFBQVEsV0FBVyxLQUFLLFdBQVcsaUNBQWlDLFFBQVEsV0FBVyxZQUFZLCtCQUErQixnQkFBZ0Isa0VBQWtFLDJJQUEySSxrQ0FBa0MsZ0NBQWdDLGlDQUFpQyxrQ0FBa0MsOEJBQThCLHVEQUF1RCw2QkFBNkIsTUFBTSxZQUFZLGVBQWUsZUFBZSwrQkFBK0IsaUVBQWlFLHdHQUF3RyxNQUFNLEdBQUcsaUJBQWlCLElBQUksaUJBQWlCLElBQUksaUJBQWlCLElBQUksa0JBQWtCLFFBQVEsNkJBQTZCLGtDQUFrQyw0QkFBNEIsb0JBQW9CLG9CQUFvQixPQUFPLDZIQUE2SCw2QkFBNkIsaUNBQWlDLHFCQUFxQixHQUFHLGFBQWEsSUFBSSxhQUFhLElBQUksYUFBYSxJQUFJLGNBQWMsSUFBSSxnQkFBZ0IsYUFBYSxtQ0FBbUMsZ0JBQWdCLGlCQUFpQiwrQkFBK0IsUUFBUSx3REFBd0QsMkNBQTJDLGlCQUFpQiwrQkFBK0IsUUFBUSx3REFBd0QsOENBQThDLHdLQUF3Syx5SkFBeUosaUNBQWlDLGlFQUFpRSw4RUFBOEUsVUFBVSxjQUFjLG9DQUFvQyx1QkFBdUIsYUFBYSw0RUFBNEUsbUJBQW1CLHlDQUF5QywwQkFBMEIseUZBQXlGLGlGQUFpRixhQUFhLFNBQVMsb0hBQW9ILE9BQU8sNkJBQTZCLFdBQVcseUJBQXlCLEdBQUcsNElBQTRJLDhCQUE4QixxRUFBcUUsUUFBUSxXQUFXLDBCQUEwQix3QkFBd0IscUJBQXFCLGdCQUFnQiw4Q0FBOEMsTUFBTSx5REFBeUQsTUFBTSwrREFBK0QseUJBQXlCLDhCQUE4QiwyQ0FBMkMsd0VBQXdFLHNCQUFzQixlQUFlLHlCQUF5QixtRUFBbUUsMEJBQTBCLGFBQWEsVUFBVSxtRUFBbUUsa0RBQWtELGdCQUFnQixXQUFXLGdDQUFnQyxnQkFBZ0IsaUlBQWlJLFNBQVMsa0NBQWtDLHlDQUF5QyxpQ0FBaUMsV0FBVyxLQUFLLFdBQVcsMEJBQTBCLDhDQUE4QywyQ0FBMkMsTUFBTSxnQ0FBZ0MsdUJBQXVCLFdBQVcscUlBQXFJLCtCQUErQix3QkFBd0IsV0FBVyx5Q0FBeUMsK0VBQStFLFdBQVcsS0FBSyxXQUFXLHdEQUF3RCxTQUFTLFNBQVMsK0hBQStILCtEQUErRCw4QkFBOEIsaUVBQWlFLG9DQUFvQyxPQUFPLGdCQUFnQixXQUFXLDhCQUE4Qix5REFBeUQsV0FBVyxLQUFLLG9DQUFvQywyRUFBMkUsaURBQWlELDBCQUEwQiw0Q0FBNEMsaUZBQWlGLDZCQUE2QixNQUFNLDJCQUEyQixnQkFBZ0IsMkVBQTJFLDhGQUE4RixxSUFBcUksNkVBQTZFLFlBQVksd0NBQXdDLFlBQVksK0JBQStCLFdBQVcsUUFBUSx5QkFBeUIscUJBQXFCLG9EQUFvRCxhQUFhLFdBQVcsc0RBQXNELHlCQUF5QixnQ0FBZ0MsV0FBVyx1QkFBdUIsVUFBVSx5Q0FBeUMsdUNBQXVDLE1BQU0sOEJBQThCLGVBQWUsMEZBQTBGLDZIQUE2SCx3REFBd0QsWUFBWSxnQ0FBZ0MsWUFBWSwrQkFBK0IsV0FBVyxPQUFPLHlCQUF5QixxQkFBcUIsc0VBQXNFLFdBQVcsY0FBYyxhQUFhLFlBQVksV0FBVyxzREFBc0QsYUFBYSxZQUFZLFdBQVcsdUJBQXVCLCtEQUErRCxJQUFJLFdBQVcscUVBQXFFLElBQUksV0FBVyxvREFBb0QsVUFBVSw0QkFBNEIsd0dBQXdHLDBFQUEwRSxrREFBa0QsdUJBQXVCLEtBQUssV0FBVyxxREFBcUQsUUFBUSxXQUFXLGlFQUFpRSw0QkFBNEIsUUFBUSxXQUFXLG1EQUFtRCxPQUFPLFNBQVMsUUFBUSxXQUFXLDRDQUE0QywwQkFBMEIsa0JBQWtCLHdEQUF3RCxRQUFRLHNCQUFzQixLQUFLLHNCQUFzQixzRkFBc0YsZ0JBQWdCLDJDQUEyQyxTQUFTLG1CQUFtQix3QkFBd0IsdUJBQXVCLGlCQUFpQixLQUFLLHFCQUFxQixxQ0FBcUMsTUFBTSwyQkFBMkIsNkJBQTZCLFFBQVEscUJBQXFCLHVCQUF1QixrQkFBa0IsV0FBVyxZQUFZLFFBQVEsV0FBVyxZQUFZLGFBQWEsbURBQW1ELFFBQVEsV0FBVyxLQUFLLDhCQUE4QixNQUFNLDRCQUE0QixvQ0FBb0MsWUFBWSw0QkFBNEIsNEJBQTRCLFdBQVcsS0FBSyw4Q0FBOEMsUUFBUSxXQUFXLGdCQUFnQixhQUFhLFdBQVcsYUFBYSxxRkFBcUYsdUJBQXVCLGlEQUFpRCxzQkFBc0IsK0NBQStDLGlEQUFpRCx5QkFBeUIsUUFBUSxXQUFXLEtBQUssd0JBQXdCLHVEQUF1RCx5QkFBeUIsY0FBYywrQkFBK0IsZ0JBQWdCLFdBQVcscURBQXFELGVBQWUsRUFBRSxzVkFBc1YsdUJBQXVCLGFBQWEsV0FBVyx1RkFBdUYsbUNBQW1DLDRQQUE0UCxHQUFHLHVCQUF1QixhQUFhLDZIQUE2SCxvQkFBb0IscUhBQXFILGlHQUFpRyxvQkFBb0IsMkNBQTJDLGtDQUFrQyxRQUFRLElBQUksS0FBSyxXQUFXLG1DQUFtQywyQkFBMkIsd0JBQXdCLHdCQUF3QixjQUFjLG9DQUFvQyxrQkFBa0IscUJBQXFCLGNBQWMsa0JBQWtCLGNBQWMsa0JBQWtCLHNCQUFzQix1QkFBdUIsd0JBQXdCLHNCQUFzQixJQUFJLFNBQVMsY0FBYyxlQUFlLGFBQWEsc0JBQXNCLHVCQUF1Qix3QkFBd0Isc0RBQXNELFVBQVUsY0FBYyw2QkFBNkIsa0JBQWtCLGNBQWMsc0NBQXNDLElBQUksS0FBSyxXQUFXLHFCQUFxQixTQUFTLFdBQVcsc0NBQXNDLG9CQUFvQixRQUFRLDBDQUEwQyxnRkFBZ0YscUNBQXFDLHFDQUFxQyxxQ0FBcUMsV0FBVyxLQUFLLFdBQVcsdUNBQXVDLFlBQVkseUNBQXlDLHNCQUFzQixhQUFhLGlCQUFpQix3QkFBd0Isa0JBQWtCLHVEQUF1RCxrR0FBa0csZ0NBQWdDLCtDQUErQyxzQ0FBc0MsNENBQTRDLFFBQVEsd0JBQXdCLHdCQUF3QixrRUFBa0UsRUFBRSx3Q0FBd0MsdUJBQXVCLGFBQWEsd0lBQXdJLE1BQU0sMkNBQTJDLFlBQVksaUtBQWlLLDBEQUEwRCxXQUFXLEtBQUssc0NBQXNDLHVEQUF1RCx5QkFBeUIsdUZBQXVGLFdBQVcsS0FBSywyQkFBMkIseUhBQXlILGlEQUFpRCxnQ0FBZ0MsRUFBRSx1SUFBdUksdUJBQXVCLGFBQWEsNkxBQTZMLDJCQUEyQixhQUFhLFFBQVEsMkRBQTJELGFBQWEsUUFBUSw4Q0FBOEMsMEJBQTBCLHdoQkFBd2hCLHdCQUF3QixZQUFZLFlBQVksUUFBUSxXQUFXLFNBQVMsOENBQThDLGdCQUFnQixjQUFjLGdCQUFnQixhQUFhLDRGQUE0RixXQUFXLFVBQVUsUUFBUSw0Q0FBNEMsaUJBQWlCLEVBQUUsNENBQTRDLGlCQUFpQixrQkFBa0IscUVBQXFFLGdDQUFnQyxPQUFPLDhGQUE4RiwyRUFBMkUsOEJBQThCLDhCQUE4Qiw4REFBOEQsOEJBQThCLE9BQU8sWUFBWSxZQUFZLFFBQVEsUUFBUSxnR0FBZ0csd0VBQXdFLGlGQUFpRixTQUFTLHVDQUF1QyxZQUFZLHFHQUFxRyxXQUFXLGdDQUFnQyx1Q0FBdUMsOEJBQThCLGtCQUFrQixvQkFBb0IsVUFBVSw2QkFBNkIsVUFBVSw2QkFBNkIsaUNBQWlDLEVBQUUsaUNBQWlDLCtCQUErQixPQUFPLG9EQUFvRCxVQUFVLGtEQUFrRCx1Q0FBdUMsa0ZBQWtGLGFBQWEsOEJBQThCLGtCQUFrQixFQUFFLDZJQUE2SSx1QkFBdUIsYUFBYSxpZEFBaWQsb0JBQW9CLG1CQUFtQix1Q0FBdUMsa0JBQWtCLFVBQVUsZ0RBQWdELGdCQUFnQixvQkFBb0IsWUFBWSxXQUFXLEtBQUssc0NBQXNDLEVBQUUsaUNBQWlDLHFFQUFxRSx3QkFBd0IsRUFBRSw2Q0FBNkMsU0FBUyxvQkFBb0IsRUFBRSx1QkFBdUIsc0dBQXNHLCtEQUErRCxtSEFBbUgsZ0JBQWdCLDZFQUE2RSw4REFBOEQsR0FBRyxNQUFNLGlDQUFpQywyREFBMkQsWUFBWSxXQUFXLG9CQUFvQix5QkFBeUIscUNBQXFDLHFCQUFxQixjQUFjLGdDQUFnQyxLQUFLLHFDQUFxQyxxREFBcUQsV0FBVyxjQUFjLG1EQUFtRCw4Q0FBOEMsMkNBQTJDLDZGQUE2RixhQUFhLDRDQUE0QyxnREFBZ0Qsc0JBQXNCLG9CQUFvQixjQUFjLFdBQVcscUJBQXFCLE9BQU8sTUFBTSxpRkFBaUYsY0FBYywwQkFBMEIsU0FBUywyR0FBMkcsR0FBRyxFQUFFLGthQUFrYSx1QkFBdUIsYUFBYSwrRkFBK0Ysd0ZBQXdGLFdBQVcsTUFBTSxPQUFPLFFBQVEsT0FBTyxVQUFVLFVBQVUsV0FBVyxXQUFXLFVBQVUsYUFBYSxZQUFZLGNBQWMsYUFBYSxvQkFBb0IsRUFBRSxvRUFBb0UsdUJBQXVCLGFBQWEsa09BQWtPLFlBQVksRUFBRSxnQkFBZ0IsV0FBVyxJQUFJLFVBQVUsa0JBQWtCLGlCQUFpQixrQkFBa0Isa0JBQWtCLHNEQUFzRCxVQUFVLHVCQUF1QixZQUFZLGdCQUFnQixhQUFhLGlCQUFpQixhQUFhLCtCQUErQixVQUFVLG1CQUFtQixFQUFFLGFBQWEsZ0JBQWdCLE9BQU8sNkJBQTZCLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLHVCQUF1QixrQkFBa0IsbUJBQW1CLE9BQU8sNkJBQTZCLHdCQUF3QixFQUFFLDBCQUEwQixFQUFFLFVBQVUsVUFBVSxXQUFXLDZEQUE2RCxjQUFjLGtCQUFrQixrQkFBa0IsRUFBRSxxR0FBcUcsdUJBQXVCLGFBQWEsZ0VBQWdFLEVBQUUsOENBQThDLHVCQUF1QiwyR0FBMkcsaUJBQWlCLGtCQUFrQixlQUFlLGtCQUFrQixLQUFLLEtBQUssNEJBQTRCLDRCQUE0QixtQkFBbUIsT0FBTyx3QkFBd0IsZ0ZBQWdGLGdCQUFnQixHQUFHLHFEQUFxRCxRQUFRLHdCQUF3QiwrU0FBK1MsRUFBRSw2QkFBNkIsZ0JBQWdCLG9DQUFvQyw2QkFBNkIsNENBQTRDLEVBQUUsTUFBTSxpQ0FBaUMsMERBQTBELHdDQUF3Qyx1Q0FBdUMsc0NBQXNDLFNBQVMsRUFBRSx3Q0FBd0MsaURBQWlELFdBQVcsRUFBRSxhQUFhLHdCQUF3Qix3RUFBd0UsRUFBRSw2RkFBNkYsaUJBQWlCLHlDQUF5QywrSEFBK0gsV0FBVywyTUFBMk0sZ0RBQWdELFdBQVcsMkJBQTJCLGtGQUFrRixRQUFRLHdDQUF3QyxHQUFHLDZCQUE2QixzREFBc0QseU5BQXlOLGFBQWEsZ0JBQWdCLGdCQUFnQixrQ0FBa0MsZ0VBQWdFLGdFQUFnRSxnREFBZ0QsNEJBQTRCLHlCQUF5QixxQ0FBcUMsbVBBQW1QLDRwQkFBNHBCLGNBQWMsaUNBQWlDLHdCQUF3Qix5Q0FBeUMsd0JBQXdCLHdDQUF3Qyx3QkFBd0IsRUFBRSxvQ0FBb0MsK0JBQStCLElBQUksbUpBQW1KLHNDQUFzQyxhQUFhLGlCQUFpQixrQ0FBa0MsNENBQTRDLFNBQVMsZ0JBQWdCLEVBQUUsMEJBQTBCLDBCQUEwQixxT0FBcU8sRUFBRSxtQkFBbUIseUJBQXlCLDJCQUEyQixtQkFBbUIsd0NBQXdDLDBEQUEwRCxFQUFFLElBQUkseUJBQXlCLCtQQUErUCx3Q0FBd0MsZUFBZSxFQUFFLFFBQVEsOEJBQThCLFNBQVMsa0JBQWtCLGdEQUFnRCxtQkFBbUIsRUFBRSxxSEFBcUgsb0lBQW9JLHNGQUFzRixRQUFRLDZCQUE2QixFQUFFLHFDQUFxQyxrQ0FBa0MseURBQXlELGlDQUFpQyxvQkFBb0IsMkNBQTJDLHdDQUF3QyxJQUFJLFdBQVcsaURBQWlELElBQUksU0FBUyx1Q0FBdUMsRUFBRSxnQkFBZ0IsOEJBQThCLHlCQUF5QixpREFBaUQsZ0JBQWdCLGlEQUFpRCwyRUFBMkUsaURBQWlELGtCQUFrQixzQkFBc0IsUUFBUSwwQ0FBMEMsaUtBQWlLLCtCQUErQixlQUFlLEVBQUUsNkhBQTZILFFBQVEsd0JBQXdCLDBCQUEwQixTQUFTLDZDQUE2QywyRkFBMkYsNkJBQTZCLGdDQUFnQywrQkFBK0Isd0NBQXdDLHdCQUF3QixtQ0FBbUMsc0NBQXNDLFNBQVMsc0RBQXNELG9EQUFvRCx1Q0FBdUMsb0RBQW9ELDZEQUE2RCw4SUFBOEksU0FBUywwRUFBMEUscUJBQXFCLDZGQUE2RixXQUFXLGlEQUFpRCwrRUFBK0UsRUFBRSxtRUFBbUUsc0NBQXNDLEdBQUcsUUFBUSw4Q0FBOEMsRUFBRSwySEFBMkgsZ0NBQWdDLG9CQUFvQiw2QkFBNkIsOEJBQThCLFVBQVUsd0JBQXdCLFNBQVMscUVBQXFFLFlBQVksK0ZBQStGLHdCQUF3QixFQUFFLEVBQUUsa0NBQWtDLHNEQUFzRCxvQkFBb0IseUJBQXlCLDREQUE0RCxVQUFVLHFCQUFxQiwyQkFBMkIsTUFBTSwwRUFBMEUsMEJBQTBCLGlDQUFpQyxFQUFFLG1CQUFtQixFQUFFLGtHQUFrRyx3QkFBd0IsZ0NBQWdDLHdCQUF3QixnQ0FBZ0Msd0JBQXdCLElBQUksT0FBTywrQkFBK0IsZUFBZSxTQUFTLHNDQUFzQyxFQUFFLDZDQUE2QyxrQ0FBa0MsU0FBUyxnQ0FBZ0MsU0FBUyxXQUFXLEVBQUUsb0NBQW9DLGVBQWUsNENBQTRDLHNEQUFzRCw0Q0FBNEMseUJBQXlCLFVBQVUsRUFBRSxFQUFFLGtDQUFrQywwQkFBMEIsRUFBRSw0Q0FBNEMsbUNBQW1DLFNBQVMsSUFBSSxTQUFTLFdBQVcsNENBQTRDLDREQUE0RCxzREFBc0QsMkNBQTJDLFVBQVUsVUFBVSxnQ0FBZ0MsNEVBQTRFLHlFQUF5RSxXQUFXLGlCQUFpQixpQkFBaUIsUUFBUSxjQUFjLDBDQUEwQyxpQkFBaUIsRUFBRSxPQUFPLDJDQUEyQyxpQkFBaUIsMkpBQTJKLFdBQVcsUUFBUSxxQkFBcUIsMENBQTBDLGdCQUFnQiwwQ0FBMEMsbUJBQW1CLEVBQUUsdUNBQXVDLDZCQUE2Qiw0Q0FBNEMsc0NBQXNDLFVBQVUsMkNBQTJDLFdBQVcsc0NBQXNDLFdBQVcsNERBQTRELEVBQUUsRUFBRSxFQUFFLFNBQVMsc0JBQXNCLDhCQUE4QiwwQkFBMEIsb0NBQW9DLHdCQUF3Qiw2REFBNkQsc0VBQXNFLDRCQUE0QixTQUFTLDZCQUE2QixTQUFTLDJCQUEyQixTQUFTLDRCQUE0QixTQUFTLGtCQUFrQixTQUFTLHNCQUFzQixvQ0FBb0MsT0FBTyxPQUFPLHdKQUF3SixVQUFVLHVGQUF1RixrQ0FBa0MsT0FBTyxzRUFBc0UsZ0VBQWdFLHlIQUF5SCxjQUFjLDRKQUE0Six5SUFBeUksZ0JBQWdCLGFBQWEsVUFBVSxnSUFBZ0ksbUNBQW1DLDhCQUE4Qix5QkFBeUIsMkJBQTJCLGlFQUFpRSx3Q0FBd0MsV0FBVyw0Q0FBNEMsb0JBQW9CLGVBQWUsRUFBRSx5Q0FBeUMscUJBQXFCLHlDQUF5QywyQkFBMkIsb0JBQW9CLEVBQUUsT0FBTyxTQUFTLHVCQUF1QixrQ0FBa0MscUNBQXFDLG1CQUFtQixvQ0FBb0Msa0JBQWtCLEVBQUUsbUNBQW1DLCtCQUErQixnQ0FBZ0MsSUFBSSw4QkFBOEIscUNBQXFDLG1DQUFtQyxxQ0FBcUMsZ0JBQWdCLDZDQUE2QyxnQ0FBZ0Msb0NBQW9DLGdCQUFnQixFQUFFLDhCQUE4QixxQkFBcUIsaUNBQWlDLHdDQUF3QyxxQkFBcUIsRUFBRSxhQUFhLGlDQUFpQyxhQUFhLHdCQUF3Qiw2QkFBNkIsU0FBUyxnQ0FBZ0MsZ0NBQWdDLHVCQUF1QixFQUFFLHlDQUF5QyxvQkFBb0Isb0NBQW9DLDRCQUE0Qiw0QkFBNEIseUJBQXlCLGdDQUFnQywyQ0FBMkMsdUdBQXVHLG9DQUFvQyxjQUFjLEtBQUssZ0JBQWdCLElBQUksMkNBQTJDLFNBQVMsK0JBQStCLDhDQUE4QyxxQ0FBcUMsTUFBTSxnQkFBZ0IsUUFBUSw2QkFBNkIscUNBQXFDLElBQUksaURBQWlELGlFQUFpRSw2QkFBNkIsd0NBQXdDLGdDQUFnQyxLQUFLLHdCQUF3Qiw2REFBNkQsbUNBQW1DLGFBQWEsd0NBQXdDLGtFQUFrRSwrQ0FBK0Msd0ZBQXdGLGtEQUFrRCxvQkFBb0IsNkZBQTZGLHFCQUFxQixxR0FBcUcsNkNBQTZDLElBQUksc0JBQXNCLG9HQUFvRyxxQkFBcUIsNkNBQTZDLDZCQUE2Qiw2RUFBNkUsT0FBTyxTQUFTLDZDQUE2QyxRQUFRLEVBQUUsa0NBQWtDLEdBQUcsc0ZBQXNGLDJCQUEyQixvQkFBb0Isd0NBQXdDLEVBQUUsdUJBQXVCLGtDQUFrQyx1QkFBdUIsT0FBTyxxQ0FBcUMsc0JBQXNCLDRCQUE0QixzQkFBc0IsUUFBUSxpQkFBaUIsVUFBVSxpRUFBaUUsaUNBQWlDLDRDQUE0Qyx1Q0FBdUMseUJBQXlCLFNBQVMsbUJBQW1CLHFCQUFxQix1Q0FBdUMsdUJBQXVCLDhCQUE4QixnQ0FBZ0Msa0NBQWtDLG9DQUFvQyx1QkFBdUIsd0JBQXdCLHVCQUF1Qix5QkFBeUIsSUFBSSxnSEFBZ0gsV0FBVyx1QkFBdUIsV0FBVywwQkFBMEIsa0NBQWtDLDBCQUEwQixzREFBc0QsRUFBRSxzQkFBc0IscUJBQXFCLDZDQUE2QyxnREFBZ0QsR0FBRyxPQUFPLHFCQUFxQix1QkFBdUIsd0JBQXdCLDZCQUE2QixnQ0FBZ0MsaUNBQWlDLG9DQUFvQywrQkFBK0IseUJBQXlCLHlCQUF5Qix5QkFBeUIsK0VBQStFLCtDQUErQyw0QkFBNEIsY0FBYyxFQUFFLGtEQUFrRCxTQUFTLEVBQUUsK0JBQStCLGFBQWEseUVBQXlFLEVBQUUsNEJBQTRCLGlEQUFpRCxjQUFjLGdEQUFnRCxVQUFVLDZCQUE2QixzQkFBc0Isc0NBQXNDLE9BQU8sTUFBTSxvTkFBb04saUJBQWlCLGlLQUFpSyx1QkFBdUIscUJBQXFCLHFDQUFxQyxPQUFPLGdCQUFnQixxQkFBcUIsd0JBQXdCLHFCQUFxQixzQ0FBc0MsT0FBTyxnQkFBZ0IscUJBQXFCLHNCQUFzQixxQkFBcUIsb0NBQW9DLE9BQU8sZ0JBQWdCLHNDQUFzQyx1QkFBdUIscUJBQXFCLHFDQUFxQyxPQUFPLGdCQUFnQixzQkFBc0IscUJBQXFCLHFEQUFxRCxhQUFhLGdEQUFnRCxxQ0FBcUMsVUFBVSxnQkFBZ0IsNERBQTRELEVBQUUsZUFBZSx5QkFBeUIseUdBQXlHLGtDQUFrQyxrQkFBa0Isa0RBQWtELDBCQUEwQixlQUFlLDZMQUE2TCxtSEFBbUgsRUFBRSxpRkFBaUYseUpBQXlKLE1BQU0sOEVBQThFLDZDQUE2Qyw0QkFBNEIsaUNBQWlDLHFCQUFxQiwrQkFBK0IsU0FBUywyQkFBMkIsVUFBVSxtREFBbUQsMERBQTBELEVBQUUsS0FBSyxzRUFBc0UsMkRBQTJELHdCQUF3QixzQ0FBc0MsaUJBQWlCLHFCQUFxQixvTUFBb00sb0JBQW9CLGFBQWEsb0JBQW9CLDhFQUE4RSxzREFBc0QsVUFBVSxxQ0FBcUMsMEJBQTBCLDZCQUE2Qix3Q0FBd0MsNkJBQTZCLHdDQUF3QyxxQkFBcUIsaUJBQWlCLElBQUksNEJBQTRCLHdDQUF3QyxzQkFBc0Isc0NBQXNDLE9BQU8saUNBQWlDLFdBQVcsMEJBQTBCLEVBQUUsK0JBQStCLEVBQUUsbUNBQW1DLGlIQUFpSCwyQkFBMkIsYUFBYSw4REFBOEQscURBQXFELDJGQUEyRix1Q0FBdUMsRUFBRSxpQ0FBaUMsK0JBQStCLFFBQVEsU0FBUywyQkFBMkIsaUNBQWlDLEtBQUssMEJBQTBCLDhFQUE4RSxTQUFTLG1DQUFtQyxVQUFVLHdDQUF3QywyQ0FBMkMsZ0NBQWdDLGVBQWUsMkZBQTJGLG1CQUFtQix3Q0FBd0MsV0FBVyxnQkFBZ0IsSUFBSSxvQkFBb0Isb0JBQW9CLHVDQUF1QyxTQUFTLGdCQUFnQixJQUFJLG1CQUFtQixxQkFBcUIsZUFBZSxJQUFJLG1CQUFtQixxQkFBcUIsZ0JBQWdCLElBQUksc0JBQXNCLGdCQUFnQixHQUFHLGtDQUFrQyw2QkFBNkIsT0FBTyxzQkFBc0IsU0FBUyw0Q0FBNEMsVUFBVSxJQUFJLGtiQUFrYiwwQ0FBMEMscWxCQUFxbEIsNkNBQTZDLGlEQUFpRCxrQkFBa0IsR0FBRyw2QkFBNkIsNEJBQTRCLDZCQUE2QixFQUFFLGFBQWEsVUFBVSxXQUFXLGcyQ0FBZzJDLDBDQUEwQywyb0JBQTJvQiwyRUFBMkUsMENBQTBDLCtCQUErQixhQUFhLDBZQUEwWSxXQUFXLFVBQVUsRUFBRSw2REFBNkQsdUJBQXVCLGFBQWEsOElBQThJLHdCQUF3QixzQkFBc0IsZ0JBQWdCLHFQQUFxUCxxQ0FBcUMsZUFBZSx3QkFBd0IsU0FBUyw0QkFBNEIsd0RBQXdELDRCQUE0QixPQUFPLHNDQUFzQywyQkFBMkIscUNBQXFDLGVBQWUsZ0JBQWdCLFFBQVEsaUJBQWlCLE1BQU0sd0JBQXdCLG1CQUFtQixTQUFTLG1CQUFtQixTQUFTLEdBQUcsMEJBQTBCLG9JQUFvSSxtRkFBbUYsNkJBQTZCLEVBQUUsa0dBQWtHLHVCQUF1QixhQUFhLHFCQUFxQixxQkFBcUIsZ0JBQWdCLHNDQUFzQyxPQUFPLGdCQUFnQixxRUFBcUUseUJBQXlCLElBQUksaUJBQWlCLFdBQVcsbURBQW1ELGlCQUFpQixhQUFhLG1EQUFtRCxrQkFBa0IsVUFBVSxvQkFBb0IsYUFBYSxvQkFBb0Isb0JBQW9CLHdCQUF3QixTQUFTLCtCQUErQixjQUFjLHFCQUFxQixZQUFZLEdBQUcsdUJBQXVCLGFBQWEsNHVCQUE0dUIsZ0JBQWdCLCtHQUErRyxlQUFlLGtCQUFrQixnQkFBZ0IscUJBQXFCLHNDQUFzQyxzUkFBc1Isa0JBQWtCLGNBQWMseURBQXlELGdDQUFnQyxnQkFBZ0Isd0NBQXdDLHdCQUF3QixHQUFHLGtCQUFrQiwwRUFBMEUsZ0JBQWdCLCtCQUErQixjQUFjLHNCQUFzQix3QkFBd0Isa0JBQWtCLHNCQUFzQixpQkFBaUIsNEJBQTRCLFlBQVksV0FBVyxLQUFLLGtDQUFrQyw0QkFBNEIsT0FBTyxpSEFBaUgsOEJBQThCLDhKQUE4SixnT0FBZ08sZ0VBQWdFLCtDQUErQyx5QkFBeUIsbUJBQW1CLDBCQUEwQixVQUFVLDhGQUE4RixNQUFNLG9EQUFvRCxNQUFNLG1DQUFtQyxNQUFNLDREQUE0RCxNQUFNLHdEQUF3RCxNQUFNLDBEQUEwRCxZQUFZLDhCQUE4QixxRkFBcUYsd0RBQXdELDZFQUE2RSwwQkFBMEIsNENBQTRDLGlIQUFpSCwwREFBMEQsOERBQThELDhEQUE4RCxzQ0FBc0MsZ0JBQWdCLGtEQUFrRCx3TEFBd0wsb0xBQW9MLHFDQUFxQyxjQUFjLDBDQUEwQyw4QkFBOEIsd0NBQXdDLDZDQUE2QyxzSkFBc0osaUJBQWlCLHlDQUF5QyxpQkFBaUIsRUFBRSx5QkFBeUIsbVFBQW1RLDhCQUE4QixvQkFBb0IseUJBQXlCLE1BQU0sa0JBQWtCLHFDQUFxQyxtQ0FBbUMsY0FBYyxJQUFJLE9BQU8sT0FBTyxpQkFBaUIsNkJBQTZCLHNFQUFzRSw4QkFBOEIsdUNBQXVDLHVCQUF1QixZQUFZLFNBQVMsNkJBQTZCLDZCQUE2QiwrQ0FBK0Msb0JBQW9CLGNBQWMsNkdBQTZHLGtDQUFrQywrSEFBK0gsZ0xBQWdMLGtCQUFrQix3Q0FBd0MsUUFBUSxtR0FBbUcsYUFBYSw4REFBOEQsaUJBQWlCLDRFQUE0RSxrQkFBa0IsK0NBQStDLCtCQUErQix5QkFBeUIsb0JBQW9CLHFFQUFxRSxFQUFFLHdGQUF3RixtREFBbUQsWUFBWSxvQ0FBb0MsWUFBWSxtREFBbUQsZ0NBQWdDLDhEQUE4RCx5Q0FBeUMsNEpBQTRKLFlBQVksMkVBQTJFLDZDQUE2Qyw2Q0FBNkMscUhBQXFILG1EQUFtRCxZQUFZLFdBQVcsRUFBRSxtQ0FBbUMsc0dBQXNHLHFGQUFxRixrQkFBa0IsbUJBQW1CLG9GQUFvRixrQkFBa0IsMENBQTBDLHdDQUF3QyxnQkFBZ0IsV0FBVyxxQkFBcUIsaUJBQWlCLGdDQUFnQyx5RUFBeUUsc0JBQXNCLHlCQUF5QixpREFBaUQsMEJBQTBCLFdBQVcsNkJBQTZCLFFBQVEsd0dBQXdHLHVCQUF1QiwwSkFBMEosaURBQWlELGNBQWMsbURBQW1ELGlCQUFpQixrRkFBa0YsV0FBVyxxQkFBcUIsVUFBVSxrQkFBa0IsZ0RBQWdELHVDQUF1QywwQ0FBMEMseUJBQXlCLG9CQUFvQix5RUFBeUUsZUFBZSxZQUFZLEVBQUUsK0NBQStDLG1DQUFtQyw4REFBOEQsMEJBQTBCLDBJQUEwSSw4QkFBOEIsNFRBQTRULCtEQUErRCx5QkFBeUIsc0NBQXNDLG9DQUFvQyxrQ0FBa0MsZ0JBQWdCLDBCQUEwQixnQkFBZ0Isa0JBQWtCLGdCQUFnQiwyQkFBMkIsZ0JBQWdCLHFDQUFxQyxnQkFBZ0Isa0NBQWtDLDhEQUE4RCxzRkFBc0Ysa0JBQWtCLGtDQUFrQyxnRUFBZ0UsU0FBUyw4QkFBOEIsa0RBQWtELEtBQUssUUFBUSxzRUFBc0Usb0RBQW9ELGdCQUFnQiwwSUFBMEksZ0JBQWdCLGtGQUFrRixnQkFBZ0IsMkRBQTJELDZFQUE2RSxvQkFBb0IsNENBQTRDLG9CQUFvQixpQkFBaUIsd0RBQXdELG1KQUFtSixjQUFjLDBDQUEwQyw2QkFBNkIsa0VBQWtFLHFEQUFxRCxpQkFBaUIsOEJBQThCLDZCQUE2QixTQUFTLDBEQUEwRCw2REFBNkQsMEdBQTBHLHlCQUF5Qix5REFBeUQsMkJBQTJCLHlDQUF5QyxvQkFBb0IsVUFBVSwrREFBK0QscUNBQXFDLDBCQUEwQixtSEFBbUgsR0FBRyxNQUFNLHVDQUF1QywyQkFBMkIsOEVBQThFLDBCQUEwQiw0QkFBNEIsV0FBVyxvQ0FBb0MsaUhBQWlILGNBQWMsNkZBQTZGLGtJQUFrSSw0REFBNEQsZ0JBQWdCLDhCQUE4QixpQkFBaUIsc0JBQXNCLGdEQUFnRCx5QkFBeUIscURBQXFELFdBQVcsZ0JBQWdCLFlBQVksS0FBSyxzRkFBc0Ysd0JBQXdCLGFBQWEsa0lBQWtJLGdCQUFnQixVQUFVLGdCQUFnQiwyREFBMkQsbUJBQW1CLHlGQUF5RixpQ0FBaUMsZ0NBQWdDLGdCQUFnQiw4Q0FBOEMsNkJBQTZCLDhCQUE4Qiw0SEFBNEgsU0FBUywwQkFBMEIsMENBQTBDLHdFQUF3RSxlQUFlLGFBQWEsaUNBQWlDLCtKQUErSixnQkFBZ0IsZ0JBQWdCLCtCQUErQixtRkFBbUYsOEhBQThILGdCQUFnQix1REFBdUQsdUZBQXVGLHNCQUFzQixrQ0FBa0Msc0xBQXNMLHdFQUF3RSxrQkFBa0IseUNBQXlDLHNDQUFzQyxvQkFBb0IsNERBQTRELDhEQUE4RCxpSkFBaUosU0FBUywrQ0FBK0MsMENBQTBDLHFEQUFxRCxlQUFlLGFBQWEsd0NBQXdDLFNBQVMsd0dBQXdHLHlCQUF5QixjQUFjLHlCQUF5QixnQ0FBZ0MseURBQXlELDRGQUE0RiwwQkFBMEIsNkdBQTZHLDREQUE0RCx1QkFBdUIsc0NBQXNDLGlEQUFpRCwwQkFBMEIsc0NBQXNDLG9EQUFvRCw2QkFBNkIsc0NBQXNDLDhEQUE4RCwwQkFBMEIscUNBQXFDLGtEQUFrRCxvQ0FBb0MsZ0RBQWdELEVBQUUsc2lCQUFzaUIsdUJBQXVCLGFBQWEsNkVBQTZFLDBCQUEwQixxQkFBcUIsd0NBQXdDLGlCQUFpQix5QkFBeUIsdUZBQXVGLFlBQVksYUFBYSxhQUFhLGtCQUFrQixpQkFBaUIsbUJBQW1CLG1CQUFtQixvQkFBb0IsbUJBQW1CLFdBQVcsbUJBQW1CLHlCQUF5QixNQUFNLE1BQU0saUNBQWlDLGFBQWEsaUJBQWlCLG9CQUFvQixvQkFBb0IscUJBQXFCLDJCQUEyQixTQUFTLHFCQUFxQix1QkFBdUIsMkJBQTJCLFFBQVEsNkJBQTZCLHlDQUF5Qyw2QkFBNkIsTUFBTSxvQ0FBb0MseUJBQXlCLHFDQUFxQyx1QkFBdUIsSUFBSSxpQkFBaUIsS0FBSyw4RUFBOEUsdUJBQXVCLElBQUksZUFBZSxTQUFTLDBCQUEwQixxQ0FBcUMsZ0NBQWdDLDRDQUE0QyxhQUFhLGVBQWUsZUFBZSxVQUFVLDhGQUE4RixNQUFNLDRFQUE0RSxnQkFBZ0IscUJBQXFCLGlCQUFpQixxQkFBcUIsZUFBZSxrQkFBa0IsZUFBZSxtQkFBbUIsZUFBZSxtQkFBbUIsZUFBZSxtQkFBbUIsaUJBQWlCLFFBQVEsRUFBRSwrQ0FBK0MsdUJBQXVCLGFBQWEsNEVBQTRFLDRCQUE0QiwrSEFBK0gsZ0JBQWdCLDJCQUEyQixZQUFZLElBQUksS0FBSyxXQUFXLG1CQUFtQixzREFBc0QsU0FBUyxrREFBa0QsRUFBRSw0REFBNEQsdUJBQXVCLGFBQWEsa0dBQWtHLGlCQUFpQix1QkFBdUIsc0VBQXNFLE1BQU0sbURBQW1ELDhHQUE4RywrREFBK0QsV0FBVyxLQUFLLDhDQUE4QyxhQUFhLGlEQUFpRCw4Q0FBOEMsMkJBQTJCLHNDQUFzQyxXQUFXLEtBQUssMkJBQTJCLDRLQUE0SyxFQUFFLDZHQUE2Ryx1QkFBdUIsYUFBYSxrTUFBa00sMkRBQTJELFdBQVcsYUFBYSwrZ0JBQStnQixhQUFhLFFBQVEsMkRBQTJELGFBQWEsUUFBUSxpRUFBaUUsOEJBQThCLGNBQWMsNkRBQTZELGdCQUFnQixVQUFVLGVBQWUsV0FBVyxrQ0FBa0MsTUFBTSw4QkFBOEIseUJBQXlCLHFCQUFxQixjQUFjLDhCQUE4QiwyREFBMkQsK0JBQStCLEVBQUUsb0pBQW9KLHVCQUF1QixhQUFhLHVVQUF1VSxvQkFBb0Isb0NBQW9DLHVDQUF1QyxZQUFZLFdBQVcsbUJBQW1CLDRDQUE0QyxrQ0FBa0Msb0lBQW9JLG9CQUFvQixpQkFBaUIsZ0JBQWdCLDJCQUEyQiw2Q0FBNkMsMEhBQTBILHFEQUFxRCw4REFBOEQsZ0RBQWdELFdBQVcsY0FBYyxtREFBbUQsOENBQThDLDJDQUEyQywwRkFBMEYsOEJBQThCLDBCQUEwQixTQUFTLHVGQUF1RixHQUFHLEVBQUUsOFJBQThSLHVCQUF1QixhQUFhLHllQUF5ZSxnQkFBZ0IsMklBQTJJLFlBQVksa0JBQWtCLG1CQUFtQix1RkFBdUYsZ0JBQWdCLHNCQUFzQiwyQkFBMkIsNEJBQTRCLFlBQVksV0FBVyxLQUFLLGtDQUFrQyw0QkFBNEIsT0FBTywySkFBMkosNkJBQTZCLHdJQUF3SSxrRUFBa0UsbUNBQW1DLDRFQUE0RSxtQ0FBbUMsZ0tBQWdLLDRCQUE0Qiw4REFBOEQsb1dBQW9XLDRGQUE0RiwrQ0FBK0Msb0JBQW9CLG1CQUFtQixxQkFBcUIsOFBBQThQLHlDQUF5QyxFQUFFLGFBQWEscUJBQXFCLDZCQUE2Qiw0S0FBNEsseUhBQXlILG1FQUFtRSwwRkFBMEYsZ0pBQWdKLFVBQVUsMkRBQTJELHlGQUF5RixVQUFVLHNDQUFzQyxVQUFVLDZIQUE2SCxFQUFFLHlDQUF5QyxrQkFBa0IsVUFBVSwrRkFBK0YsRUFBRSx5Q0FBeUMsa0JBQWtCLFVBQVUsOEhBQThILEVBQUUseUNBQXlDLGdEQUFnRCxnRkFBZ0Ysd0NBQXdDLDZDQUE2QywrQkFBK0IsaUlBQWlJLCtDQUErQyxzRUFBc0UsMEVBQTBFLHNFQUFzRSwyRUFBMkUsMHNCQUEwc0Isd0JBQXdCLHFHQUFxRyxtREFBbUQsK01BQStNLDZCQUE2QixnSEFBZ0gsMkVBQTJFLCtCQUErQixnSEFBZ0gsNkVBQTZFLCtCQUErQixnSEFBZ0gsb0ZBQW9GLEdBQUcsc0JBQXNCLGlKQUFpSix5RUFBeUUsOFBBQThQLGdFQUFnRSxJQUFJLGlCQUFpQiw4REFBOEQsa0JBQWtCLDZEQUE2RCxvQkFBb0IseURBQXlELEdBQUcsK1hBQStYLGNBQWMsa0dBQWtHLDhCQUE4QixrSEFBa0gseUJBQXlCLG9DQUFvQyxxQ0FBcUMsb0NBQW9DLDZCQUE2Qiw2RkFBNkYsZ0NBQWdDLHdCQUF3Qix5REFBeUQsMk9BQTJPLGlFQUFpRSwwSEFBMEgsa0VBQWtFLHlCQUF5Qix5REFBeUQseURBQXlELHFEQUFxRCxjQUFjLFNBQVMsb0ZBQW9GLGdCQUFnQiw4QkFBOEIsMEVBQTBFLFlBQVksOEdBQThHLGdCQUFnQixlQUFlLGdCQUFnQixzQ0FBc0MsZ0JBQWdCLG1DQUFtQyxnQkFBZ0IsME1BQTBNLHdEQUF3RCw4QkFBOEIsc1JBQXNSLGFBQWEsMklBQTJJLGdCQUFnQix5Q0FBeUMsb0NBQW9DLHVFQUF1RSwyRkFBMkYscUJBQXFCLHdEQUF3RCw2Q0FBNkMseUVBQXlFLGlDQUFpQyw4UkFBOFIsYUFBYSw4QkFBOEIsMEJBQTBCLDhFQUE4RSwwQkFBMEIsNEJBQTRCLFlBQVksRUFBRSxzV0FBc1csdUJBQXVCLGFBQWEsaU5BQWlOLGNBQWMscUNBQXFDLHVEQUF1RCxLQUFLLHVEQUF1RCxhQUFhLGtGQUFrRiwyRUFBMkUsbUJBQW1CLFlBQVksS0FBSyxXQUFXLHdDQUF3QywyQkFBMkIsdUJBQXVCLGdHQUFnRyxtRUFBbUUsY0FBYyx3RkFBd0YsYUFBYSxxSkFBcUosdUNBQXVDLHlDQUF5QyxnREFBZ0QsY0FBYyx3RkFBd0YsdUdBQXVHLG9GQUFvRixvYUFBb2EsY0FBYyx5SUFBeUksZ0JBQWdCLFNBQVMsV0FBVyxhQUFhLHdGQUF3RixvQ0FBb0MsY0FBYyx1QkFBdUIsMkNBQTJDLGlCQUFpQixXQUFXLGtDQUFrQyxnQkFBZ0IscUNBQXFDLGdCQUFnQixrQkFBa0IseUNBQXlDLGdCQUFnQixxQ0FBcUMsb0JBQW9CLHNCQUFzQiw0Q0FBNEMsZ0JBQWdCLHFDQUFxQyxrQkFBa0Isb0ZBQW9GLDJCQUEyQixvQkFBb0IsY0FBYyxjQUFjLHVDQUF1QyxZQUFZLG1CQUFtQixvQ0FBb0Msd0JBQXdCLHdCQUF3Qiw4RUFBOEUsb0JBQW9CLHVCQUF1Qix1REFBdUQsK0ZBQStGLDhCQUE4QixZQUFZLFdBQVcsS0FBSyxXQUFXLHdFQUF3RSxxQkFBcUIsaUJBQWlCLE1BQU0scUJBQXFCLE1BQU0scUJBQXFCLE1BQU0sa0JBQWtCLE1BQU0sNkJBQTZCLDRCQUE0QixNQUFNLDRFQUE0RSx5QkFBeUIsc0JBQXNCLHFCQUFxQix5QkFBeUIsaUNBQWlDLG1CQUFtQiw4R0FBOEcscUNBQXFDLG9DQUFvQyxXQUFXLDZCQUE2QixTQUFTLDhCQUE4QiwrQkFBK0IsV0FBVyw4QkFBOEIsU0FBUyxvQ0FBb0MsOEJBQThCLGtCQUFrQixtQkFBbUIsZ0RBQWdELDZDQUE2QyxFQUFFLHFLQUFxSyx1QkFBdUIsYUFBYSxnREFBZ0QsY0FBYyxNQUFNLFVBQVUsdUJBQXVCLHdDQUF3QyxRQUFRLHVCQUF1QixzQkFBc0IsaUJBQWlCLE1BQU0sbUJBQW1CLE9BQU8sUUFBUSxtRUFBbUUsc0JBQXNCLGlCQUFpQixNQUFNLGFBQWEsU0FBUyx3QkFBd0IsTUFBTSw4REFBOEQsMENBQTBDLG9DQUFvQyxzSEFBc0gsaUJBQWlCLHFCQUFxQixRQUFRLFdBQVcsK0VBQStFLFFBQVEsRUFBRSxRQUFRLFdBQVcsS0FBSyxXQUFXLDBGQUEwRix3Q0FBd0MsdUJBQXVCLHlDQUF5Qyx3Q0FBd0MsNkJBQTZCLEVBQUUsYUFBYSxTQUFTLG1DQUFtQyxPQUFPLFFBQVEsdURBQXVELE1BQU0sV0FBVyxLQUFLLGNBQWMsb0JBQW9CLHNCQUFzQixzQkFBc0Isd0RBQXdELG9DQUFvQyx1Q0FBdUMsT0FBTyxrQ0FBa0MsdU9BQXVPLCtIQUErSCxFQUFFLGFBQWEsdUJBQXVCLGFBQWEsaUVBQWlFLHdCQUF3QixNQUFNLHdEQUF3RCxtREFBbUQsNktBQTZLLGFBQWEsMkNBQTJDLDJDQUEyQyxtQ0FBbUMsNENBQTRDLG1CQUFtQixLQUFLLG9CQUFvQixtQ0FBbUMsRUFBRSxHQUFHLEVBQUUsMERBQTBELHVCQUF1QixhQUFhLHdCQUF3QiwwR0FBMEcsaUNBQWlDLGdNQUFnTSxzTEFBc0wsbUVBQW1FLDJDQUEyQywrQkFBK0IsR0FBRyxHQUFHLHVCQUF1QixhQUFhLHVCQUF1Qix3RUFBd0UsNkJBQTZCLHdCQUF3QixtRkFBbUYscUNBQXFDLHFDQUFxQyxJQUFJLEdBQUcsdUJBQXVCLGFBQWEsd0JBQXdCLDJLQUEySyxZQUFZLEVBQUUsa0dBQWtHLHVCQUF1QixhQUFhLDZDQUE2QyxzQkFBc0IsbURBQW1ELDZDQUE2Qyx3QkFBd0IseUVBQXlFLGFBQWEsWUFBWSwwQ0FBMEMsa0pBQWtKLHlDQUF5QyxNQUFNLDRDQUE0Qyx1Q0FBdUMsTUFBTSxxQ0FBcUMsTUFBTSx1Q0FBdUMsTUFBTSxjQUFjLE1BQU0sNERBQTRELHVEQUF1RCxvQ0FBb0MsdUJBQXVCLDRDQUE0QyxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLHVCQUF1QixhQUFhLHFJQUFxSSx3QkFBd0IsbUJBQW1CLGFBQWEsU0FBUyxnRkFBZ0YseUJBQXlCLHlFQUF5RSxnQ0FBZ0Msc0JBQXNCLDhDQUE4Qyx1QkFBdUIsK0ZBQStGLG9CQUFvQixpQ0FBaUMsSUFBSSxvQkFBb0Isa0JBQWtCLEtBQUssRUFBRSwwR0FBMEcsdUJBQXVCLGFBQWEsb0xBQW9MLDBCQUEwQixvRUFBb0UscUZBQXFGLDZCQUE2QixRQUFRLFdBQVcsS0FBSyxXQUFXLG9CQUFvQixNQUFNLDBEQUEwRCxRQUFRLFdBQVcsS0FBSyxXQUFXLDhDQUE4Qyx5RkFBeUYseUNBQXlDLGtCQUFrQixxQkFBcUIsa0VBQWtFLFNBQVMsNkJBQTZCLEVBQUUsNEJBQTRCLDJFQUEyRSxnQkFBZ0IsbUdBQW1HLHVDQUF1Qyx1RUFBdUUsd0JBQXdCLHlFQUF5RSx1UkFBdVIsNkRBQTZELHFCQUFxQiw0Q0FBNEMsZUFBZSw2QkFBNkIsR0FBRyxpQkFBaUIsV0FBVyxZQUFZLE9BQU8sWUFBWSwrREFBK0QsRUFBRSxvQkFBb0IsNEJBQTRCLFVBQVUsZUFBZSxVQUFVLGtJQUFrSSxFQUFFLDhHQUE4Ryx1QkFBdUIsYUFBYSxnQ0FBZ0Msd0JBQXdCLFlBQVksV0FBVyxhQUFhLHdDQUF3QyxlQUFlLE1BQU0sc0NBQXNDLGFBQWEsNkNBQTZDLEVBQUUsZ0JBQWdCLHVCQUF1QixhQUFhLGdSQUFnUixpREFBaUQsUUFBUSxzQkFBc0IsT0FBTyxPQUFPLHdCQUF3Qix3QkFBd0IsdUJBQXVCLGNBQWMsb0JBQW9CLGlFQUFpRSxFQUFFLFdBQVcsZ0dBQWdHLEVBQUUscUJBQXFCLGdCQUFnQixzR0FBc0csY0FBYyxLQUFLLHFCQUFxQixLQUFLLHNCQUFzQixLQUFLLGlCQUFpQiwyRkFBMkYsZ0JBQWdCLGdCQUFnQixlQUFlLHFFQUFxRSxPQUFPLG1EQUFtRCxTQUFTLHNEQUFzRCxRQUFRLDREQUE0RCx1QkFBdUIseUNBQXlDLGlCQUFpQix5Q0FBeUMsV0FBVyxRQUFRLGlGQUFpRiwrQ0FBK0MsYUFBYSxRQUFRLHFGQUFxRixpREFBaUQsMEJBQTBCLFFBQVEseURBQXlELEVBQUUsc1BBQXNQLHVCQUF1QixhQUFhLG9NQUFvTSx3QkFBd0Isb0VBQW9FLHdIQUF3SCx5REFBeUQsSUFBSSxVQUFVLGNBQWMsbUNBQW1DLDZCQUE2QixzREFBc0QsNkJBQTZCLGdFQUFnRSxtQkFBbUIsRUFBRSw4S0FBOEssdUJBQXVCLGFBQWEsV0FBVyxrQkFBa0IsR0FBRyx1QkFBdUIsYUFBYSxvT0FBb08sb0JBQW9CLGFBQWEsb0NBQW9DLHlCQUF5QixRQUFRLFFBQVEsV0FBVyxLQUFLLDRJQUE0SSxZQUFZLE9BQU8sU0FBUyxRQUFRLDhCQUE4Qix3REFBd0QsS0FBSyxXQUFXLGFBQWEsS0FBSyxXQUFXLFdBQVcsZ0JBQWdCLFdBQVcsZ0NBQWdDLGFBQWEseUJBQXlCLE1BQU0sOEJBQThCLFdBQVcsMERBQTBELDRCQUE0Qix1Q0FBdUMsK0JBQStCLEVBQUUsaUJBQWlCLDROQUE0TixLQUFLLElBQUksS0FBSyxxREFBcUQsaUNBQWlDLG1DQUFtQyw0REFBNEQsYUFBYSx3REFBd0QsMkRBQTJELHlCQUF5Qix1QkFBdUIsV0FBVyxLQUFLLHdCQUF3Qix3Q0FBd0MsK0JBQStCLE1BQU0sV0FBVyxLQUFLLFdBQVcsWUFBWSx5QkFBeUIsY0FBYyx1Q0FBdUMsK0JBQStCLE1BQU0sNkNBQTZDLFdBQVcsd0RBQXdELDRCQUE0Qix1REFBdUQsMEVBQTBFLEVBQUUseUJBQXlCLHNEQUFzRCxXQUFXLEtBQUsscUNBQXFDLFdBQVcsS0FBSyxXQUFXLFlBQVkscUNBQXFDLCtDQUErQywyQ0FBMkMsb0JBQW9CLElBQUksUUFBUSxZQUFZLFdBQVcsdUJBQXVCLFdBQVcsS0FBSyxXQUFXLFlBQVksK0JBQStCLG9CQUFvQixZQUFZLCtCQUErQixlQUFlLHFCQUFxQixjQUFjLFFBQVEsV0FBVyxtQkFBbUIsV0FBVyxLQUFLLGFBQWEsd0NBQXdDLHNDQUFzQyxvQ0FBb0MsUUFBUSxXQUFXLEtBQUssd0JBQXdCLHdDQUF3QyxRQUFRLFdBQVcsS0FBSyx3QkFBd0IsU0FBUywwQkFBMEIsK0RBQStELDJEQUEyRCxPQUFPLG9CQUFvQixvQ0FBb0MsV0FBVyxLQUFLLHdCQUF3QiwrQkFBK0IsRUFBRSx5Q0FBeUMsa0JBQWtCLDRHQUE0RyxXQUFXLEtBQUssZ0JBQWdCLHdEQUF3RCx5REFBeUQsY0FBYyxtQkFBbUIsUUFBUSxXQUFXLEtBQUssc0VBQXNFLFNBQVMsbURBQW1ELFdBQVcsc0JBQXNCLGVBQWUsV0FBVyxjQUFjLFlBQVksK0JBQStCLHFDQUFxQyxTQUFTLCtDQUErQyxRQUFRLFdBQVcsc0JBQXNCLGVBQWUsV0FBVyxjQUFjLDRCQUE0QixhQUFhLFdBQVcseUJBQXlCLGFBQWEsbUVBQW1FLGtCQUFrQiw4QkFBOEIsV0FBVywrRkFBK0YsV0FBVyxLQUFLLDBCQUEwQix5QkFBeUIsb0JBQW9CLDZCQUE2QixpREFBaUQsWUFBWSxXQUFXLEtBQUsseUNBQXlDLFFBQVEsV0FBVyx1Q0FBdUMsc0JBQXNCLHlFQUF5RSxRQUFRLFdBQVcsS0FBSyxPQUFPLDBCQUEwQiwyQkFBMkIsdUNBQXVDLFVBQVUsR0FBRyxrQkFBa0IsOEJBQThCLFdBQVcsS0FBSywwQ0FBMEMsV0FBVyxLQUFLLHlCQUF5QixnRUFBZ0UsdUNBQXVDLG9CQUFvQixHQUFHLGtCQUFrQix1QkFBdUIsV0FBVyx1QkFBdUIsV0FBVyxLQUFLLFdBQVcsNkJBQTZCLGtCQUFrQix5SEFBeUgsY0FBYywwQ0FBMEMsWUFBWSxXQUFXLEtBQUssK0NBQStDLFdBQVcsS0FBSyxXQUFXLFlBQVksaUNBQWlDLGNBQWMsa0JBQWtCLHVGQUF1Rix1Q0FBdUMsbUJBQW1CLEdBQUcsY0FBYyx1QkFBdUIsV0FBVyw2QkFBNkIscUVBQXFFLFdBQVcsS0FBSyxXQUFXLHNIQUFzSCxzQkFBc0Isc0JBQXNCLEVBQUUsaUxBQWlMLHVCQUF1QixhQUFhLHFOQUFxTixvQkFBb0IseUJBQXlCLFlBQVksNkNBQTZDLDhCQUE4QixhQUFhLEVBQUUsV0FBVywyQkFBMkIsaUVBQWlFLCtDQUErQyxnQkFBZ0Isa0NBQWtDLGdDQUFnQyxzQkFBc0IsMEVBQTBFLHVCQUF1Qiw4Q0FBOEMsSUFBSSx5TUFBeU0sV0FBVyxpQ0FBaUMsZ0JBQWdCLDJCQUEyQixlQUFlLDJJQUEySSx3QkFBd0IsNkRBQTZELHdCQUF3QixTQUFTLDBCQUEwQixxQkFBcUIsc0NBQXNDLGtCQUFrQixrQ0FBa0MsTUFBTSxjQUFjLGdDQUFnQyxtQ0FBbUMsV0FBVyxpREFBaUQsd0NBQXdDLEVBQUUsK0tBQStLLHVCQUF1QixhQUFhLDRDQUE0QywrQkFBK0IsdUJBQXVCLDBCQUEwQix1REFBdUQsMkJBQTJCLGdDQUFnQyxTQUFTLEtBQUssb0JBQW9CLGdEQUFnRCwyQkFBMkIsK0JBQStCLDRDQUE0QyxvQ0FBb0MsNkVBQTZFLDBCQUEwQixNQUFNLG9EQUFvRCxFQUFFLG9DQUFvQyx1QkFBdUIsYUFBYSxxSEFBcUgsb0JBQW9CLHlHQUF5RyxjQUFjLGtCQUFrQixjQUFjLGtCQUFrQixzQkFBc0IsdUNBQXVDLG1CQUFtQix3Q0FBd0MsZ0JBQWdCLHdEQUF3RCxjQUFjLG9CQUFvQixjQUFjLHFEQUFxRCxnRkFBZ0YsMEJBQTBCLGdEQUFnRCw4Q0FBOEMsb0JBQW9CLEVBQUUscUNBQXFDLGtCQUFrQiw0Q0FBNEMsZUFBZSw0Q0FBNEMsRUFBRSxzQ0FBc0MsbURBQW1ELHNDQUFzQywySEFBMkgsb0JBQW9CLGtGQUFrRixnQkFBZ0IsdUZBQXVGLCtDQUErQyxXQUFXLDhCQUE4QixpQkFBaUIsTUFBTSxxQ0FBcUMsZ0ZBQWdGLGdDQUFnQyxFQUFFLDhHQUE4Ryx1QkFBdUIsYUFBYSxTQUFTLGl0QkFBaXRCLGFBQWEsRUFBRSw2UUFBNlEsdUJBQXVCLGFBQWEsV0FBVyxTQUFTLGdHQUFnRyxVQUFVLDhFQUE4RSxTQUFTLDZDQUE2QyxjQUFjLHNEQUFzRCxHQUFHLHVCQUF1QixhQUFhLHdHQUF3RywwQkFBMEIsZ0JBQWdCLDJCQUEyQiwyQkFBMkIsb0JBQW9CLFdBQVcsS0FBSyxXQUFXLGtDQUFrQyxxQkFBcUIsc0JBQXNCLHFCQUFxQiw2REFBNkQsY0FBYyx1REFBdUQsMEZBQTBGLEVBQUUsZ0dBQWdHLHVCQUF1QixhQUFhLDJQQUEyUCx3QkFBd0IsTUFBTSxtSEFBbUgsNEJBQTRCLCtGQUErRiw0Q0FBNEMsc0dBQXNHLDBCQUEwQiwyQkFBMkIsMkVBQTJFLGlGQUFpRiw2QkFBNkIsZ0xBQWdMLDhEQUE4RCxzRkFBc0YsT0FBTyxzQkFBc0IseUJBQXlCLGNBQWMsa0hBQWtILHNEQUFzRCxjQUFjLGlEQUFpRCwyQkFBMkIsNENBQTRDLDZEQUE2RCxvQ0FBb0Msd0xBQXdMLHNCQUFzQixrQkFBa0IsNkNBQTZDLDhFQUE4RSwyQ0FBMkMsU0FBUyxpREFBaUQsMkJBQTJCLDJCQUEyQixNQUFNLGdCQUFnQixtQ0FBbUMsK0JBQStCLE1BQU0saUhBQWlILCtGQUErRixzSkFBc0oseUNBQXlDLG9CQUFvQiw4REFBOEQseUVBQXlFLHdEQUF3RCxnQkFBZ0IsOEdBQThHLGlHQUFpRyw0Q0FBNEMsYUFBYSxRQUFRLDREQUE0RCxzREFBc0QsaUlBQWlJLHVCQUF1QixtR0FBbUcsaUhBQWlILHFDQUFxQyxtSEFBbUgsVUFBVSw4QkFBOEIsd0dBQXdHLHNCQUFzQixpQkFBaUIsc0JBQXNCLHlHQUF5RyxFQUFFLDhCQUE4Qix1Q0FBdUMsRUFBRSxpREFBaUQsRUFBRSw2TUFBNk0sdUJBQXVCLGFBQWEsd0JBQXdCLHNDQUFzQyxrQkFBa0IsV0FBVyxvQkFBb0IsYUFBYSxXQUFXLEtBQUssV0FBVyxpQ0FBaUMsd0NBQXdDLDZCQUE2QixVQUFVLEdBQUcsdUJBQXVCLGFBQWEsWUFBWSw2REFBNkQsZ0JBQWdCLDhFQUE4RSx1QkFBdUIsV0FBVyxLQUFLLG1CQUFtQixXQUFXLEtBQUssV0FBVyxxQkFBcUIsK0NBQStDLGlCQUFpQix3QkFBd0IsbUpBQW1KLDhCQUE4QiwyQ0FBMkMsMEJBQTBCLCtCQUErQix5QkFBeUIsdUJBQXVCLG9DQUFvQyx5RkFBeUYsRUFBRSxnREFBZ0QsdUJBQXVCLGFBQWEsNE1BQTRNLGtCQUFrQiwrQ0FBK0Msa0JBQWtCLHFDQUFxQyxrQ0FBa0MsWUFBWSxFQUFFLG9CQUFvQixzQ0FBc0MsZ0NBQWdDLGFBQWEsZUFBZSxrREFBa0QsU0FBUyxrQkFBa0IsMkJBQTJCLG9CQUFvQixlQUFlLHlJQUF5SSxnREFBZ0QsNEJBQTRCLGtCQUFrQixlQUFlLGtDQUFrQyxvQkFBb0IsUUFBUSw0RUFBNEUsT0FBTyx3SEFBd0gsZ0JBQWdCLHNFQUFzRSxXQUFXLG9CQUFvQix1R0FBdUcsOEJBQThCLDBCQUEwQixtQkFBbUIsZ0pBQWdKLDJDQUEyQywrQkFBK0IsK0NBQStDLCtDQUErQyw4QkFBOEIsaUNBQWlDLDREQUE0RCxtQkFBbUIsdUJBQXVCLGVBQWUsaUJBQWlCLGFBQWEscURBQXFELDJCQUEyQiw4QkFBOEIsRUFBRSwwQkFBMEIsaUJBQWlCLHlEQUF5RCxFQUFFLDJJQUEySSx1QkFBdUIsYUFBYSx1SUFBdUksOEJBQThCLDhDQUE4Qyw2QkFBNkIsc0VBQXNFLGtDQUFrQyxzR0FBc0csRUFBRSxrSEFBa0gsdUJBQXVCLGFBQWEsc0pBQXNKLFdBQVcsbUdBQW1HLFVBQVUsYUFBYSxZQUFZLFlBQVksV0FBVyxXQUFXLFVBQVUsZ0JBQWdCLGVBQWUsdUdBQXVHLEVBQUUsb0lBQW9JLHVCQUF1QixhQUFhLGtSQUFrUixXQUFXLG1CQUFtQixvS0FBb0ssSUFBSSxVQUFVLGVBQWUsY0FBYyxXQUFXLGlGQUFpRix3RUFBd0Usc0RBQXNELDZCQUE2QixnRUFBZ0Usa0JBQWtCLGdDQUFnQyw4QkFBOEIsV0FBVyxLQUFLLHdCQUF3QixxREFBcUQsVUFBVSxlQUFlLFFBQVEsa0JBQWtCLEdBQUcsY0FBYyxVQUFVLEVBQUUscU5BQXFOLHVCQUF1QixhQUFhLDJIQUEySCw0QkFBNEIsZ0JBQWdCLDJCQUEyQix3S0FBd0ssRUFBRSwrRkFBK0YsdUJBQXVCLGFBQWEsdU5BQXVOLDBCQUEwQiw0TUFBNE0sb0NBQW9DLDhCQUE4QixrSUFBa0ksa0JBQWtCLGlCQUFpQixvQ0FBb0MscUJBQXFCLElBQUksZ0JBQWdCLEVBQUUsNElBQTRJLEVBQUUsNEpBQTRKLHVCQUF1QixhQUFhLFdBQVcsNmRBQTZkLEVBQUUsK05BQStOLHVCQUF1QixhQUFhLFdBQVcsU0FBUyw2RUFBNkUsU0FBUyx1REFBdUQsR0FBRyx1QkFBdUIsYUFBYSxnREFBZ0QsMEJBQTBCLFdBQVcsZ0JBQWdCLHdCQUF3QixhQUFhLFlBQVksV0FBVyxLQUFLLFdBQVcsMkZBQTJGLEVBQUUsMENBQTBDLHVCQUF1QixhQUFhLHNIQUFzSCwwQkFBMEIscUVBQXFFLG9CQUFvQixzQ0FBc0MsUUFBUSx3Q0FBd0MsZ0hBQWdILDRDQUE0Qyx5QkFBeUIsbUNBQW1DLDhDQUE4QyxxREFBcUQsdUdBQXVHLHdKQUF3SiwrR0FBK0cseUNBQXlDLDRCQUE0Qiw4REFBOEQsZUFBZSxxQ0FBcUMsbUVBQW1FLEdBQUcsRUFBRSwyR0FBMkcsdUJBQXVCLGFBQWEsOE1BQThNLFdBQVcsR0FBRyxvREFBb0QsSUFBSSxvREFBb0QsS0FBSyw2Q0FBNkMsS0FBSyw2Q0FBNkMsT0FBTyxnREFBZ0QsVUFBVSxVQUFVLGdCQUFnQixlQUFlLG9CQUFvQixnQkFBZ0IscURBQXFELFVBQVUsa0NBQWtDLGFBQWEsdURBQXVELFlBQVksc0dBQXNHLFVBQVUsaUVBQWlFLFNBQVMsNkNBQTZDLFdBQVcsOENBQThDLGNBQWMscUVBQXFFLFFBQVEsOENBQThDLFNBQVMsY0FBYyx5REFBeUQsWUFBWSxXQUFXLDJCQUEyQixjQUFjLFlBQVksbUNBQW1DLFdBQVcsU0FBUywyQkFBMkIsWUFBWSxVQUFVLDRCQUE0QixRQUFRLFVBQVUsVUFBVSwrQ0FBK0MsWUFBWSxVQUFVLG1DQUFtQyxnQkFBZ0IsaUNBQWlDLGVBQWUsK0NBQStDLGtCQUFrQixpQkFBaUIsT0FBTyxPQUFPLGlDQUFpQyxRQUFRLCtDQUErQyxpQkFBaUIsMkZBQTJGLDBDQUEwQyxhQUFhLDRDQUE0QyxVQUFVLG1GQUFtRixFQUFFLHVLQUF1Syx1QkFBdUIsYUFBYSxtRkFBbUYsa0JBQWtCLE9BQU8sMkJBQTJCLHNEQUFzRCxnQkFBZ0IsZUFBZSxjQUFjLFdBQVcsd0JBQXdCLDZJQUE2SSxnRUFBZ0Usa0RBQWtELHFDQUFxQyxNQUFNLHlKQUF5SixnRkFBZ0Ysd0JBQXdCLFNBQVMsRUFBRSwwRUFBMEUsd0NBQXdDLElBQUksZ0JBQWdCLHVCQUF1QiwrQkFBK0IsMkJBQTJCLElBQUksWUFBWSxTQUFTLElBQUksUUFBUSxZQUFZLEtBQUssV0FBVyxTQUFTLHdCQUF3QixjQUFjLE9BQU8sU0FBUyx3QkFBd0IsNkRBQTZELDJCQUEyQixRQUFRLElBQUksc0JBQXNCLHlDQUF5QyxLQUFLLHVVQUF1VSxvQ0FBb0MsdURBQXVELGVBQWUsdURBQXVELFdBQVcsS0FBSywyQkFBMkIsS0FBSyxXQUFXLGdCQUFnQixzQkFBc0IsTUFBTSwwQkFBMEIsVUFBVSxFQUFFLGdEQUFnRCxnREFBZ0QsMExBQTBMLGFBQWEsR0FBRyxVQUFVLEdBQUcsRUFBRSxzRUFBc0UsdUJBQXVCLGFBQWEsc0hBQXNILG9CQUFvQixzRUFBc0UsUUFBUSxXQUFXLHNCQUFzQixXQUFXLCtDQUErQyxhQUFhLHNDQUFzQyxxQ0FBcUMsZ0hBQWdILFFBQVEsV0FBVyxLQUFLLG1FQUFtRSxtQkFBbUIsZUFBZSx5REFBeUQsdUJBQXVCLGlDQUFpQyxnQkFBZ0IsK0RBQStELHFCQUFxQix1Q0FBdUMsc0JBQXNCLDhGQUE4RixTQUFTLGlDQUFpQyxrREFBa0Qsa0VBQWtFLFFBQVEsbUVBQW1FLGFBQWEsMEJBQTBCLFFBQVEsV0FBVyxrQkFBa0IsbUNBQW1DLDJDQUEyQyxRQUFRLGNBQWMsUUFBUSxJQUFJLElBQUksV0FBVyw2QkFBNkIsNkNBQTZDLFdBQVcsS0FBSyxzQ0FBc0MsV0FBVyxLQUFLLGlDQUFpQyx1SUFBdUksZ0JBQWdCLHNCQUFzQixFQUFFLHNGQUFzRix1QkFBdUIsYUFBYSwySUFBMkksb0JBQW9CLHdDQUF3QyxxR0FBcUcsS0FBSyxnQ0FBZ0Msa0NBQWtDLHdHQUF3RyxvQkFBb0Isd0lBQXdJLGdjQUFnYyxtQkFBbUIsNEZBQTRGLFdBQVcsaUNBQWlDLGdCQUFnQiwyQkFBMkIsd0RBQXdELGdMQUFnTCxhQUFhLEdBQUcsa0NBQWtDLFFBQVEsY0FBYyxnQ0FBZ0MsWUFBWSxXQUFXLEtBQUssb0JBQW9CLHlFQUF5RSxnREFBZ0QsRUFBRSwyR0FBMkcsdUJBQXVCLGFBQWEsd0JBQXdCLGdKQUFnSixHQUFHLHVCQUF1QixhQUFhLGtKQUFrSixvQkFBb0IsbUlBQW1JLHVCQUF1Qix3REFBd0QsV0FBVyx3QkFBd0Isc0NBQXNDLFdBQVcsd0JBQXdCLGlCQUFpQixXQUFXLDBCQUEwQixpQkFBaUIsMENBQTBDLGFBQWEsa0NBQWtDLGlHQUFpRyxrRUFBa0UsY0FBYyxvQkFBb0IsOENBQThDLHFDQUFxQyw2Q0FBNkMsK0NBQStDLFFBQVEsdUxBQXVMLGdCQUFnQiw4Q0FBOEMsUUFBUSxpQ0FBaUMsMkJBQTJCLHNFQUFzRSxZQUFZLFdBQVcsS0FBSyxXQUFXLHdCQUF3QixXQUFXLDBDQUEwQyxJQUFJLDRQQUE0UCxTQUFTLGtCQUFrQixpR0FBaUcsMkJBQTJCLGdEQUFnRCxhQUFhLDJCQUEyQixnREFBZ0QsV0FBVyxXQUFXLEtBQUssT0FBTyxZQUFZLHFCQUFxQixLQUFLLG9CQUFvQix1Q0FBdUMsZUFBZSx3QkFBd0IsaURBQWlELHdCQUF3QixJQUFJLDZCQUE2Qix1R0FBdUcsNEpBQTRKLFdBQVcsOEJBQThCLG1DQUFtQyx1SUFBdUksaUNBQWlDLEVBQUUsMElBQTBJLHVCQUF1QixhQUFhLFNBQVMsZ3NCQUFnc0IsYUFBYSxFQUFFLG1PQUFtTyx1QkFBdUIsYUFBYSxXQUFXLFNBQVMsK0VBQStFLFNBQVMscURBQXFELGNBQWMsdURBQXVELEdBQUcsdUJBQXVCLGFBQWEsc0VBQXNFLHNCQUFzQiw4QkFBOEIsV0FBVyxLQUFLLFdBQVcsbUJBQW1CLEtBQUssT0FBTyw0Q0FBNEMsV0FBVyxxQ0FBcUMsc0JBQXNCLDJCQUEyQixRQUFRLFlBQVksRUFBRSwrREFBK0QsdUJBQXVCLGFBQWEseUVBQXlFLG9CQUFvQiw2SEFBNkgseUVBQXlFLG1GQUFtRiw4SEFBOEgseUJBQXlCLGlYQUFpWCxrZUFBa2UsRUFBRSxvQkFBb0IsMkRBQTJELHFCQUFxQixpREFBaUQsNkJBQTZCLGdCQUFnQixJQUFJLEtBQUssK0RBQStELDJDQUEyQyxnRkFBZ0YsYUFBYSwyQ0FBMkMsV0FBVyxXQUFXLGFBQWEsV0FBVyxLQUFLLG1FQUFtRSwrREFBK0Qsb0NBQW9DLHlEQUF5RCxvQkFBb0IsUUFBUSxXQUFXLEtBQUssc0ZBQXNGLG1HQUFtRyxTQUFTLEVBQUUsNkZBQTZGLG9CQUFvQixpRkFBaUYsVUFBVSx5RUFBeUUsbUlBQW1JLHFEQUFxRCxpREFBaUQsdUNBQXVDLDZJQUE2SSw4TkFBOE4sRUFBRSxXQUFXLHVCQUF1Qix3QkFBd0Isc0RBQXNELGdEQUFnRCwySUFBMkksWUFBWSxXQUFXLFFBQVEsV0FBVyxZQUFZLE9BQU8sRUFBRSxrREFBa0QsRUFBRSxzREFBc0QsdUJBQXVCLGFBQWEsd0JBQXdCLHdDQUF3QyxrQkFBa0IsV0FBVyxZQUFZLHdCQUF3QiwyQkFBMkIsYUFBYSxXQUFXLFlBQVksd0JBQXdCLEtBQUssNENBQTRDLHNDQUFzQywwQ0FBMEMsNkJBQTZCLFVBQVUsR0FBRyx1QkFBdUIsYUFBYSw0RUFBNEUsV0FBVyxvQkFBb0IsMERBQTBELDhCQUE4QiwwQkFBMEIscUJBQXFCLGlEQUFpRCxvQkFBb0IsK0RBQStELDhCQUE4Qiw2Q0FBNkMsYUFBYSxnQ0FBZ0Msa0dBQWtHLEVBQUUsS0FBSyxnRUFBZ0UscURBQXFELDhCQUE4QixnQ0FBZ0MscUJBQXFCLEVBQUUsNkJBQTZCLDBEQUEwRCxpRUFBaUUsRUFBRSxtRUFBbUUsdUJBQXVCLGFBQWEsbUZBQW1GLGNBQWMsT0FBTyxNQUFNLFVBQVUsZUFBZSxPQUFPLHNDQUFzQyx5Q0FBeUMsV0FBVyw0REFBNEQsVUFBVSxnQkFBZ0IsbUJBQW1CLDBJQUEwSSxpQkFBaUIsT0FBTywyQkFBMkIsRUFBRSxpRUFBaUUsdUJBQXVCLGFBQWEsc0ZBQXNGLG9CQUFvQixPQUFPLHFEQUFxRCx3QkFBd0IsNkdBQTZHLHNDQUFzQyw2RUFBNkUscUJBQXFCLEdBQUcsVUFBVSxHQUFHLEVBQUUsb0VBQW9FLHVCQUF1QixhQUFhLG9HQUFvRyxvQkFBb0IseUJBQXlCLHFFQUFxRSw0QkFBNEIsZ0JBQWdCLDJCQUEyQixvS0FBb0ssRUFBRSw2RkFBNkYsdUJBQXVCLGFBQWEsV0FBVyw2SkFBNkoseVpBQXlaLEVBQUUsdVBBQXVQLHVCQUF1QixhQUFhLCtEQUErRCw4QkFBOEIsc0VBQXNFLHNDQUFzQyw0QkFBNEIsMEJBQTBCLHFJQUFxSSxvRUFBb0UsWUFBWSxFQUFFLEVBQUUsV0FBVyxFQUFFLHlEQUF5RCx1QkFBdUIsYUFBYSx5Q0FBeUMsc0JBQXNCLHVCQUF1Qiw0QkFBNEIsVUFBVSxXQUFXLGVBQWUsWUFBWSxJQUFJLEtBQUssV0FBVyxTQUFTLGVBQWUsMkNBQTJDLHFDQUFxQyxZQUFZLE9BQU8sRUFBRSxnQkFBZ0IsdUJBQXVCLGFBQWEsOEdBQThHLGdCQUFnQixFQUFFLDZHQUE2RyxRQUFRLGlDQUFpQyxJQUFJLG9EQUFvRCxJQUFJLG9EQUFvRCxJQUFJLHFDQUFxQyxLQUFLLHdDQUF3QyxLQUFLLHdDQUF3QyxJQUFJLHFDQUFxQyxLQUFLLHdDQUF3QyxLQUFLLHdDQUF3QyxlQUFlLHdDQUF3QywrQkFBK0IsbURBQW1ELG9CQUFvQixFQUFFLGtHQUFrRyx1QkFBdUIsYUFBYSx5Q0FBeUMsNEJBQTRCLG1RQUFtUSx3QkFBd0IsYUFBYSx5QkFBeUIsZ0VBQWdFLDJCQUEyQixlQUFlLDJCQUEyQixFQUFFLHFMQUFxTCxRQUFRLFFBQVEsMk5BQTJOLFVBQVUsRUFBRSxnQkFBZ0IsdUJBQXVCLGFBQWEsNEtBQTRLLFdBQVcsT0FBTyxnQ0FBZ0MsWUFBWSxzREFBc0QsUUFBUSxNQUFNLHlDQUF5QyxTQUFTLGdCQUFnQixVQUFVLHlDQUF5QyxpQkFBaUIsT0FBTyxzRkFBc0YsWUFBWSx1RUFBdUUsWUFBWSw0RkFBNEYsUUFBUSw2Q0FBNkMsOEJBQThCLEVBQUUsOEJBQThCLEVBQUUsYUFBYSwwQ0FBMEMsY0FBYywyRUFBMkUsV0FBVyw0RUFBNEUsU0FBUywrQ0FBK0MsV0FBVyxxQ0FBcUMsV0FBVyxxQ0FBcUMsaUJBQWlCLHVGQUF1RixhQUFhLGdCQUFnQixhQUFhLDRDQUE0QyxhQUFhLHlDQUF5QyxpQkFBaUIscUZBQXFGLGFBQWEseUNBQXlDLGlCQUFpQixxRkFBcUYsZUFBZSxxRkFBcUYsaUJBQWlCLHVGQUF1RixvQkFBb0IsMENBQTBDLGFBQWEseUNBQXlDLHdFQUF3RSxzSEFBc0gsZ0JBQWdCLHFDQUFxQyxlQUFlLDBDQUEwQyxjQUFjLGlDQUFpQyxjQUFjLHlDQUF5QyxXQUFXLDBDQUEwQyxZQUFZLG1EQUFtRCxZQUFZLDhDQUE4QyxZQUFZLGdDQUFnQyxZQUFZLDhDQUE4QyxXQUFXLDBDQUEwQyxpQkFBaUIsK0NBQStDLGlCQUFpQiw4Q0FBOEMsaUJBQWlCLGlEQUFpRCxZQUFZLGtDQUFrQyxpQkFBaUIsZ0NBQWdDLGlCQUFpQix3Q0FBd0MsVUFBVSxrQ0FBa0MsZUFBZSx3Q0FBd0MsZUFBZSxnQ0FBZ0MsUUFBUSw4Q0FBOEMsUUFBUSw4Q0FBOEMsYUFBYSwrQ0FBK0MsYUFBYSwrQ0FBK0MsY0FBYyxPQUFPLGlDQUFpQyxjQUFjLGdCQUFnQixlQUFlLDBDQUEwQyxrQkFBa0IsRUFBRSx3SkFBd0osdUJBQXVCLGFBQWEsbVZBQW1WLDBCQUEwQiwyQkFBMkIsZUFBZSxnQkFBZ0IsMkJBQTJCLGdCQUFnQiw0QkFBNEIsc0NBQXNDLGdCQUFnQixpQ0FBaUMsdUJBQXVCLHdDQUF3QyxjQUFjLG9oQkFBb2hCLG1DQUFtQyxxREFBcUQsK0NBQStDLG9EQUFvRCx1S0FBdUssdUJBQXVCLEVBQUUsOERBQThELDJDQUEyQyxvREFBb0QsdUZBQXVGLGdEQUFnRCxnaUJBQWdpQixFQUFFLDJUQUEyVCx1QkFBdUIsYUFBYSwyU0FBMlMsd0JBQXdCLDJGQUEyRix1RUFBdUUsc0NBQXNDLHdCQUF3QixTQUFTLGVBQWUsOEVBQThFLHdCQUF3Qiw0REFBNEQsc0ZBQXNGLHNGQUFzRixVQUFVLHlDQUF5QyxVQUFVLCtHQUErRyxFQUFFLGtSQUFrUix1QkFBdUIsYUFBYSw0QkFBNEIsNEVBQTRFLGtCQUFrQixLQUFLLDhCQUE4QixZQUFZLGtCQUFrQixnQkFBZ0IsS0FBSyw4QkFBOEIsWUFBWSxrQkFBa0IsZ0JBQWdCLEtBQUssa0NBQWtDLFlBQVksa0JBQWtCLGdCQUFnQixLQUFLLGtDQUFrQyxlQUFlLGtCQUFrQixLQUFLLEdBQUcsdUJBQXVCLGFBQWEseUVBQXlFLDBCQUEwQixpSkFBaUosNkNBQTZDLCtFQUErRSx1REFBdUQsc0JBQXNCLGNBQWMsMkNBQTJDLHNIQUFzSCx3QkFBd0IscUJBQXFCLDJCQUEyQixLQUFLLElBQUksaU9BQWlPLGdIQUFnSCx3QkFBd0IscUJBQXFCLDJCQUEyQixLQUFLLElBQUksaU9BQWlPLG9IQUFvSCxjQUFjLDZCQUE2QixxSUFBcUksd0JBQXdCLHFCQUFxQiwyQkFBMkIsS0FBSyxJQUFJLGtDQUFrQyxzRkFBc0Ysd0JBQXdCLHFCQUFxQiwyQkFBMkIsS0FBSyxJQUFJLGtDQUFrQyx1SEFBdUgseUJBQXlCLDJJQUEySSxXQUFXLHFCQUFxQixJQUFJLG9FQUFvRSxvQ0FBb0MsR0FBRyxRQUFRLElBQUkseUlBQXlJLG1CQUFtQiw4R0FBOEcsOENBQThDLEdBQUcsNEJBQTRCLDhDQUE4QyxzQ0FBc0MsMENBQTBDLEdBQUcsS0FBSyxnSUFBZ0ksV0FBVyxpQkFBaUIsS0FBSyx1Q0FBdUMsb0NBQW9DLEdBQUcsVUFBVSxNQUFNLGdDQUFnQyxtQkFBbUIsbUZBQW1GLDhDQUE4QyxHQUFHLCtCQUErQiw4Q0FBOEMseUNBQXlDLDBDQUEwQyxLQUFLLEVBQUUsd0RBQXdELHVCQUF1QixhQUFhLHlFQUF5RSx3QkFBd0Isd0NBQXdDLFFBQVEsV0FBVywwRkFBMEYsa0tBQWtLLDBGQUEwRixrS0FBa0ssY0FBYyxFQUFFLHdEQUF3RCx1QkFBdUIsYUFBYSw0QkFBNEIsZ0tBQWdLLHFFQUFxRSxHQUFHLHVCQUF1QixhQUFhLHlDQUF5QywwQkFBMEIscUZBQXFGLDhGQUE4RixpQkFBaUIsUUFBUSxJQUFJLDhDQUE4QyxJQUFJLDhFQUE4RSxxQkFBcUIsUUFBUSxJQUFJLFlBQVksSUFBSSx3QkFBd0IsVUFBVSxFQUFFLGdCQUFnQix1QkFBdUIsYUFBYSxzREFBc0Qsa0JBQWtCLDRDQUE0QyxrQ0FBa0MsZ0NBQWdDLHlFQUF5RSwwQkFBMEIsSUFBSSxrQ0FBa0MsWUFBWSxJQUFJLHFEQUFxRCxJQUFJLGlDQUFpQyxpQkFBaUIsSUFBSSxjQUFjLFlBQVksTUFBTSxzSkFBc0osMExBQTBMLGFBQWEsSUFBSSxLQUFLLFFBQVEsTUFBTSxrSkFBa0osMExBQTBMLGdCQUFnQixJQUFJLG1CQUFtQixRQUFRLE1BQU0sOE1BQThNLGtQQUFrUCxhQUFhLEVBQUUsb0NBQW9DLHVCQUF1QixhQUFhLFdBQVcsOEJBQThCLEdBQUcsdUJBQXVCLGFBQWEsMEJBQTBCLGdDQUFnQyxnQkFBZ0Isb0JBQW9CLDZGQUE2RixRQUFRLFdBQVcsZ1FBQWdRLFNBQVMsdUJBQXVCLFlBQVksZUFBZSxxRUFBcUUsUUFBUSxXQUFXLGdJQUFnSSxTQUFTLHVCQUF1QixnQkFBZ0IsZUFBZSxrQ0FBa0MsUUFBUSxXQUFXLG9JQUFvSSxTQUFTLHFCQUFxQixZQUFZLFVBQVUsVUFBVSxRQUFRLFdBQVcsb0VBQW9FLFdBQVcsR0FBRyx1QkFBdUIsYUFBYSwwQkFBMEIsZ0NBQWdDLGdCQUFnQixvQkFBb0IsNkZBQTZGLFFBQVEsV0FBVyxnUUFBZ1EsU0FBUyx1QkFBdUIsZ0JBQWdCLGVBQWUsa0NBQWtDLFFBQVEsV0FBVyxvSUFBb0ksU0FBUyx1QkFBdUIsWUFBWSxlQUFlLHFFQUFxRSxRQUFRLFdBQVcsZ0lBQWdJLFNBQVMscUJBQXFCLFlBQVksVUFBVSxVQUFVLFFBQVEsV0FBVyxvRUFBb0UsV0FBVyxHQUFHLHVCQUF1QixhQUFhLDhCQUE4QixnQkFBZ0IsNEJBQTRCLGdCQUFnQixVQUFVLGdKQUFnSixVQUFVLGdFQUFnRSxRQUFRLFdBQVcsZ1NBQWdTLFNBQVMsbUJBQW1CLFVBQVUsNEpBQTRKLEtBQUssd0NBQXdDLFFBQVEsV0FBVyxvSkFBb0osU0FBUyxtQkFBbUIsVUFBVSw0SkFBNEosS0FBSyx3Q0FBd0MsUUFBUSxXQUFXLG9KQUFvSixTQUFTLGlCQUFpQixVQUFVLG9LQUFvSyxRQUFRLFdBQVcsNEVBQTRFLFdBQVcsR0FBRyx1QkFBdUIsYUFBYSw0SEFBNEgsNEJBQTRCLGdCQUFnQiwyQkFBMkIsb0NBQW9DLCtCQUErQiwwTUFBME0sRUFBRSxtSEFBbUgsdUJBQXVCLGFBQWEsU0FBUyxnVUFBZ1UsYUFBYSxFQUFFLDBGQUEwRix1QkFBdUIsYUFBYSx3QkFBd0IsbUNBQW1DLElBQUksS0FBSyxxQkFBcUIsbUZBQW1GLFVBQVUsR0FBRyx1QkFBdUIsYUFBYSwwQkFBMEIseUJBQXlCLG1CQUFtQixRQUFRLFdBQVcsc0hBQXNILHlCQUF5QixHQUFHLHVCQUF1QixhQUFhLHlDQUF5QywwQkFBMEIsTUFBTSw2REFBNkQsV0FBVyxpQkFBaUIsVUFBVSxFQUFFLGdCQUFnQix1QkFBdUIsYUFBYSxnQ0FBZ0MsOENBQThDLE1BQU0sa0dBQWtHLGdCQUFnQixrQ0FBa0MsZ0RBQWdELGtEQUFrRCxHQUFHLHVCQUF1QixhQUFhLDZMQUE2TCx3QkFBd0IsdURBQXVELHNHQUFzRyw2RUFBNkUsc0dBQXNHLG9CQUFvQiw0QkFBNEIscUNBQXFDLHVDQUF1QyxhQUFhLDRCQUE0QixNQUFNLG1EQUFtRCxLQUFLLHlDQUF5QywwQ0FBMEMsT0FBTywwQkFBMEIsRUFBRSx1REFBdUQsK0NBQStDLDRFQUE0RSx5S0FBeUssb0NBQW9DLDRCQUE0QiwrQ0FBK0MsZ0RBQWdELGlOQUFpTix5T0FBeU8sOEVBQThFLDJCQUEyQixZQUFZLGdKQUFnSix1TEFBdUwsdUNBQXVDLHNDQUFzQywwQ0FBMEMsNERBQTRELHNFQUFzRSxRQUFRLFdBQVcsd0VBQXdFLDBCQUEwQix5Q0FBeUMsWUFBWSxHQUFHLDJDQUEyQyxrQ0FBa0MsU0FBUyxtQ0FBbUMsbURBQW1ELHlEQUF5RCxtQkFBbUIsdURBQXVELHdCQUF3QixvQkFBb0IsZ0ZBQWdGLG9RQUFvUSxxQkFBcUIsRUFBRSwrS0FBK0ssdUJBQXVCLGFBQWEsc01BQXNNLHNCQUFzQixrTUFBa00sOENBQThDLDBCQUEwQiw0QkFBNEIsMEJBQTBCLHVCQUF1QixxRUFBcUUsc01BQXNNLG1CQUFtQixnREFBZ0QsMEJBQTBCLG1CQUFtQixnREFBZ0QsMEJBQTBCLHFCQUFxQixnQ0FBZ0MsbUJBQW1CLHVEQUF1RCwrQ0FBK0MsbUJBQW1CLHVEQUF1RCwrQ0FBK0MscUJBQXFCLGdDQUFnQyxxQkFBcUIsd0JBQXdCLHlCQUF5Qix5REFBeUQsNkNBQTZDLE1BQU0seUJBQXlCLHdYQUF3WCxTQUFTLHVCQUF1QixnQ0FBZ0MsdUJBQXVCLGdDQUFnQyxvQkFBb0IseUNBQXlDLG1CQUFtQixvQkFBb0IseUNBQXlDLG1CQUFtQiwyQkFBMkIsMENBQTBDLHNCQUFzQiwyQkFBMkIsMENBQTBDLHNCQUFzQiwrQkFBK0Isd0RBQXdELDBDQUEwQywrQkFBK0Isd0RBQXdELDBDQUEwQyxvQkFBb0IsWUFBWSxvQkFBb0IsY0FBYyxFQUFFLG9MQUFvTCx1QkFBdUIsYUFBYSxxQkFBcUIsMEJBQTBCLDZDQUE2QyxnQkFBZ0IsY0FBYywyTEFBMkwsOEJBQThCLFFBQVEsSUFBSSxZQUFZLElBQUksMkZBQTJGLHNCQUFzQix1QkFBdUIsR0FBRyxZQUFZLElBQUksS0FBSyxjQUFjLHdCQUF3QixteEJBQW14QixlQUFlLHVCQUF1QixrRUFBa0UsRUFBRSxnQkFBZ0IsdUJBQXVCLGFBQWEsK0JBQStCLDBCQUEwQixrREFBa0QsbUJBQW1CLG1EQUFtRCxLQUFLLHFCQUFxQixnSUFBZ0ksVUFBVSxFQUFFLGdCQUFnQix1QkFBdUIsYUFBYSxtUUFBbVEsYUFBYSxXQUFXLHFDQUFxQyxnQ0FBZ0MscUNBQXFDLFVBQVUsVUFBVSxnQkFBZ0IsZUFBZSxVQUFVLE1BQU0sd0JBQXdCLFVBQVUsT0FBTyxrQkFBa0IsVUFBVSxnRUFBZ0UsaUJBQWlCLFdBQVcsUUFBUSxrREFBa0QsaUJBQWlCLGFBQWEsUUFBUSxvREFBb0QsaUJBQWlCLGVBQWUsY0FBYyxxREFBcUQsb0JBQW9CLE9BQU8sb0NBQW9DLEdBQUcsV0FBVyxFQUFFLEVBQUUsK05BQStOLHVCQUF1QixhQUFhLGdMQUFnTCx3QkFBd0IsdUNBQXVDLElBQUksS0FBSyxhQUFhLDJCQUEyQiw2Q0FBNkMscUJBQXFCLHFDQUFxQyxZQUFZLEVBQUUsa0tBQWtLLHVCQUF1QixhQUFhLHFGQUFxRiw0QkFBNEIsZ0JBQWdCLDJCQUEyQiw4QkFBOEIsa09BQWtPLHNCQUFzQixxREFBcUQsRUFBRSw4RUFBOEUsdUJBQXVCLGFBQWEsd0JBQXdCLHdDQUF3QyxHQUFHLHVCQUF1QixhQUFhLDRGQUE0RiwwQkFBMEIsNENBQTRDLFFBQVEsV0FBVyxnQ0FBZ0MsUUFBUSxxQkFBcUIsc0ZBQXNGLFdBQVcsNEpBQTRKLDBCQUEwQiw2S0FBNksseUVBQXlFLHVEQUF1RCxNQUFNLFlBQVksMkJBQTJCLHdCQUF3QixFQUFFLHNGQUFzRix1QkFBdUIsYUFBYSxTQUFTLCtaQUErWixhQUFhLEVBQUUsNEtBQTRLLHVCQUF1QixhQUFhLHVMQUF1TCxnQkFBZ0IsNkNBQTZDLElBQUksS0FBSyx1Q0FBdUMsZ0ZBQWdGLGNBQWMscURBQXFELGNBQWMsWUFBWSxhQUFhLHVDQUF1QyxZQUFZLDBDQUEwQyxNQUFNLG1CQUFtQixtQ0FBbUMsV0FBVyxpREFBaUQsb0JBQW9CLHVCQUF1QixXQUFXLHVDQUF1QyxnQ0FBZ0MsUUFBUSxXQUFXLDBGQUEwRixrQkFBa0Isc0JBQXNCLGFBQWEsb0JBQW9CLFNBQVMsMkJBQTJCLFdBQVcsWUFBWSxjQUFjLGVBQWUsTUFBTSxzQkFBc0IsV0FBVyxZQUFZLFNBQVMsMEJBQTBCLFlBQVksV0FBVyx1QkFBdUIsbURBQW1ELDJEQUEyRCx3RkFBd0YsbUZBQW1GLEdBQUcsRUFBRSwrSEFBK0gsdUJBQXVCLGFBQWEsd0JBQXdCLDhDQUE4QyxrQkFBa0IsV0FBVyxvQkFBb0IsYUFBYSxXQUFXLGdGQUFnRixnQ0FBZ0MsOEJBQThCLFVBQVUsR0FBRyx1QkFBdUIsYUFBYSwrR0FBK0csZ0JBQWdCLDZFQUE2RSxhQUFhLDBDQUEwQyxZQUFZLEdBQUcsbUJBQW1CLGtJQUFrSSw4QkFBOEIsV0FBVyxvQkFBb0IsVUFBVSw2QkFBNkIsOEJBQThCLHVGQUF1RixFQUFFLHFHQUFxRyx1QkFBdUIsYUFBYSxrUEFBa1AsR0FBRyxvREFBb0QsSUFBSSxvREFBb0QsSUFBSSxvREFBb0QsSUFBSSxxQ0FBcUMsSUFBSSxxQ0FBcUMsSUFBSSxxQ0FBcUMsV0FBVyxnRkFBZ0YsVUFBVSx1Q0FBdUMsU0FBUyxtRkFBbUYsT0FBTyxvREFBb0QsWUFBWSxvREFBb0Qsa0JBQWtCLGdCQUFnQixFQUFFLGNBQWMsR0FBRyxVQUFVLGdFQUFnRSxHQUFHLFdBQVcsRUFBRSwyREFBMkQsVUFBVSxrQkFBa0IsY0FBYyxpR0FBaUcsa0NBQWtDLEVBQUUsME5BQTBOLHVCQUF1QixhQUFhLDRDQUE0Qyx3QkFBd0IsbUhBQW1ILElBQUksS0FBSyxrREFBa0QsZ0NBQWdDLDZCQUE2Qix1Q0FBdUMsR0FBRyxFQUFFLHVDQUF1Qyx1QkFBdUIsYUFBYSw4SkFBOEosZ0JBQWdCLHNEQUFzRCxrQkFBa0IseUJBQXlCLHlCQUF5QixpSUFBaUksdURBQXVELDBDQUEwQyxnRkFBZ0YsT0FBTyx3QkFBd0IsSUFBSSw4QkFBOEIsSUFBSSwrQkFBK0IsZ0JBQWdCLDJDQUEyQyxnQkFBZ0IscUJBQXFCLHVCQUF1QixrQkFBa0IsRUFBRSxtVkFBbVYsNkJBQTZCLDBRQUEwUSxxQkFBcUIsWUFBWSxzQkFBc0Isb0JBQW9CLHNCQUFzQix3REFBd0QseUJBQXlCLHFEQUFxRCx1REFBdUQsRUFBRSw0RkFBNEYsdUJBQXVCLGFBQWEscUZBQXFGLDRCQUE0QixnQkFBZ0IsMkJBQTJCLDBEQUEwRCxnVEFBZ1Qsc0JBQXNCLDRFQUE0RSxFQUFFLDhFQUE4RSx1QkFBdUIsYUFBYSxXQUFXLDhKQUE4SixzQkFBc0IsOERBQThELHFDQUFxQyxVQUFVLEVBQUUsd0ZBQXdGLHVCQUF1QixhQUFhLDhWQUE4VixhQUFhLHFPQUFxTyxnQ0FBZ0MsY0FBYyx3REFBd0Qsc0VBQXNFLFlBQVksZ0RBQWdELFdBQVcsTUFBTSxrRkFBa0YsUUFBUSx5REFBeUQsbUJBQW1CLE1BQU0seURBQXlELG1CQUFtQixPQUFPLCtEQUErRCxtQkFBbUIsV0FBVywwRkFBMEYsWUFBWSwwQ0FBMEMsYUFBYSwwQ0FBMEMsY0FBYyxzQ0FBc0MsZUFBZSx5Q0FBeUMsWUFBWSw0RUFBNEUsUUFBUSxxQ0FBcUMsK0JBQStCLGdCQUFnQixPQUFPLFVBQVUsVUFBVSwyQkFBMkIsWUFBWSxVQUFVLDJCQUEyQix1QkFBdUIsZUFBZSxtQkFBbUIsT0FBTyxxREFBcUQsR0FBRyxXQUFXLEVBQUUsRUFBRSxxUkFBcVIsdUJBQXVCLGFBQWEsaURBQWlELHdCQUF3QixhQUFhLGVBQWUsRUFBRSwyQ0FBMkMsdUJBQXVCLGFBQWEsNEJBQTRCLDJFQUEyRSxRQUFRLElBQUksZ0dBQWdHLFFBQVEsTUFBTSxnR0FBZ0csOEJBQThCLHlDQUF5QyxNQUFNLHlDQUF5QyxNQUFNLHlHQUF5RyxNQUFNLHlHQUF5RyxHQUFHLHVCQUF1QixhQUFhLG9GQUFvRix3QkFBd0IsOEJBQThCLG1FQUFtRSw2RUFBNkUsY0FBYyxFQUFFLHdIQUF3SCx5RUFBeUUsVUFBVSw4QkFBOEIsMEJBQTBCLEVBQUUsNkVBQTZFLHVCQUF1QixhQUFhLFdBQVcsc09BQXNPLDRDQUE0QyxrQkFBa0Isc0NBQXNDLHlFQUF5RSwrSEFBK0gsR0FBRyx1QkFBdUIsYUFBYSwwTEFBMEwsZ0NBQWdDLGlEQUFpRCxpQ0FBaUMsTUFBTSw0WkFBNFosdUZBQXVGLHFHQUFxRyxnQ0FBZ0MsRUFBRSwwR0FBMEcsdUJBQXVCLGFBQWEsNERBQTRELGdCQUFnQix5QkFBeUIsY0FBYyxvQkFBb0IsMEtBQTBLLGNBQWMsbUJBQW1CLFNBQVMsZ0RBQWdELE9BQU8seUJBQXlCLGNBQWMsbUJBQW1CLE9BQU8sa0NBQWtDLFdBQVcsNERBQTRELEVBQUUsc0RBQXNELHVCQUF1QixhQUFhLDRCQUE0QixvRkFBb0YsOERBQThELEdBQUcsdUJBQXVCLGFBQWEscUJBQXFCLGNBQWMsc0JBQXNCLElBQUksc0VBQXNFLEVBQUUsd0JBQXdCLHdCQUF3QixtQkFBbUIsZUFBZSxVQUFVLFVBQVUseUJBQXlCLDRHQUE0RyxxQkFBcUIscUNBQXFDLFFBQVEsaUJBQWlCLDZCQUE2QixTQUFTLGlCQUFpQixRQUFRLGdJQUFnSSxxQkFBcUIscUNBQXFDLFFBQVEsaUJBQWlCLDZCQUE2QixLQUFLLG1CQUFtQiwwQ0FBMEMsS0FBSyxlQUFlLGtDQUFrQyxZQUFZLEVBQUUsZ0JBQWdCLHVCQUF1QixhQUFhLHdKQUF3Siw0QkFBNEIsZ0JBQWdCLDJCQUEyQixlQUFlLDRDQUE0Qyx3Q0FBd0Msc0VBQXNFLDBCQUEwQixjQUFjLG1CQUFtQixFQUFFLDhJQUE4SSx1QkFBdUIsYUFBYSxtRUFBbUUsMEJBQTBCLDRHQUE0Ryx3Q0FBd0MsRUFBRSx3Q0FBd0MsV0FBVyxJQUFJLDZCQUE2QixvQkFBb0Isd0VBQXdFLG1CQUFtQixnREFBZ0QsTUFBTSxVQUFVLEVBQUUsNERBQTRELHVCQUF1QixhQUFhLHNCQUFzQix5QkFBeUIsR0FBRyx1QkFBdUIsYUFBYSx3Q0FBd0Msb0JBQW9CLG9EQUFvRCxzQkFBc0IsMkRBQTJELFlBQVksaUtBQWlLLFlBQVksNEVBQTRFLFFBQVEsTUFBTSxLQUFLLGdJQUFnSSwrQ0FBK0MsTUFBTSxpR0FBaUcseURBQXlELHNDQUFzQyxpQkFBaUIsNENBQTRDLDRGQUE0RixRQUFRLFdBQVcsNEZBQTRGLG1CQUFtQixjQUFjLHFCQUFxQixpQkFBaUIsS0FBSyxtQkFBbUIsY0FBYyxlQUFlLFlBQVksNkJBQTZCLGNBQWMsWUFBWSxvUEFBb1Asc0JBQXNCLFdBQVcsa0JBQWtCLDhDQUE4QyxLQUFLLDZEQUE2RCxTQUFTLFFBQVEscUJBQXFCLHVEQUF1RCxhQUFhLFNBQVMsUUFBUSxxQkFBcUIsbURBQW1ELCtHQUErRyxNQUFNLGdDQUFnQyxRQUFRLHlCQUF5Qiw0RkFBNEYsd0JBQXdCLGtCQUFrQixvRkFBb0YsU0FBUyxrQ0FBa0MsaUVBQWlFLGtDQUFrQyxpRUFBaUUsMEJBQTBCLFlBQVksMEJBQTBCLFdBQVcsS0FBSyxlQUFlLGtCQUFrQixnQ0FBZ0MsUUFBUSx1Q0FBdUMsd0VBQXdFLDhDQUE4QyxFQUFFLGtDQUFrQyx1QkFBdUIsYUFBYSwwREFBMEQsOEJBQThCLHNCQUFzQixnQ0FBZ0MsY0FBYyxnTUFBZ00sS0FBSyxFQUFFLG9EQUFvRCx1QkFBdUIsYUFBYSxTQUFTLGlWQUFpVixhQUFhLEVBQUUsdUlBQXVJLHVCQUF1QixhQUFhLHFCQUFxQiw0QkFBNEIsV0FBVyw0QkFBNEIsYUFBYSxxQ0FBcUMsb0NBQW9DLDRCQUE0QixvQ0FBb0MsRUFBRSxnQkFBZ0IsdUJBQXVCLGFBQWEsbUVBQW1FLHNCQUFzQixpR0FBaUcsdUJBQXVCLHlHQUF5RywyQkFBMkIsc0VBQXNFLElBQUksc0RBQXNELHNHQUFzRyxtR0FBbUcsYUFBYSxJQUFJLGlEQUFpRCw2QkFBNkIsaUJBQWlCLEVBQUUsa0JBQWtCLEdBQUcsRUFBRSwwREFBMEQsdUJBQXVCLGFBQWEsdUJBQXVCLGdCQUFnQixzRUFBc0UsbUdBQW1HLHNCQUFzQix1RUFBdUUsUUFBUSxNQUFNLHNGQUFzRixNQUFNLHVKQUF1SixXQUFXLHFKQUFxSixFQUFFLGtCQUFrQix1QkFBdUIsYUFBYSx5V0FBeVcsZ0JBQWdCLGtDQUFrQyx1QkFBdUIsZUFBZSxvQ0FBb0MsaUNBQWlDLGdDQUFnQywwQ0FBMEMsU0FBUyxPQUFPLGNBQWMsa0NBQWtDLGNBQWMsa0NBQWtDLGNBQWMsa0NBQWtDLEtBQUssU0FBUyxFQUFFLHNKQUFzSixJQUFJLEtBQUssT0FBTywwQkFBMEIsTUFBTSw0RkFBNEYscUJBQXFCLEtBQUssd0JBQXdCLHFPQUFxTyxrQkFBa0IsU0FBUywyQkFBMkIsaUNBQWlDLE1BQU0sMkNBQTJDLFFBQVEsaUJBQWlCLDhDQUE4QyxTQUFTLG9CQUFvQiwrTUFBK00sdUJBQXVCLG1DQUFtQyxtQkFBbUIsb0NBQW9DLFdBQVcsS0FBSyxnTUFBZ00sbUJBQW1CLGdEQUFnRCxTQUFTLHlCQUF5Qix3QkFBd0Isa0RBQWtELHlIQUF5SCxzS0FBc0ssMEhBQTBILG1GQUFtRiwyRkFBMkYsa0dBQWtHLDBCQUEwQixzSUFBc0ksOERBQThELGFBQWEsNEVBQTRFLEVBQUUsZ0NBQWdDLG9NQUFvTSwwRUFBMEUsY0FBYyx1QkFBdUIsMFJBQTBSLDhPQUE4TyxrRkFBa0YsbUJBQW1CLG9DQUFvQyxpREFBaUQsNkNBQTZDLG1HQUFtRyxJQUFJLEtBQUssMkNBQTJDLFlBQVkseUJBQXlCLEVBQUUsNENBQTRDLGtCQUFrQixrQ0FBa0Msc0dBQXNHLG1IQUFtSCxPQUFPLHFCQUFxQix1RkFBdUYsc0VBQXNFLFFBQVEsSUFBSSxjQUFjLFFBQVEsSUFBSSxzQkFBc0IsUUFBUSxXQUFXLDJCQUEyQixtQkFBbUIsaUJBQWlCLGNBQWMsMkNBQTJDLGNBQWMsWUFBWSxvQkFBb0IsWUFBWSxFQUFFLCtCQUErQixrRUFBa0UseUVBQXlFLG9EQUFvRCxpQ0FBaUMsRUFBRSx5RkFBeUYseUJBQXlCLDJFQUEyRSxzREFBc0QseUJBQXlCLEVBQUUsMkZBQTJGLDJCQUEyQiwyRUFBMkUsU0FBUyxvQ0FBb0MsaUZBQWlGLHVIQUF1SCxrQ0FBa0MsZ0VBQWdFLE1BQU0sY0FBYyxLQUFLLE1BQU0sbUVBQW1FLHdCQUF3QixjQUFjLDREQUE0RCw2REFBNkQsOEhBQThILG1CQUFtQiw2QkFBNkIsa0NBQWtDLFdBQVcsb0NBQW9DLDBCQUEwQixPQUFPLG9FQUFvRSw0Q0FBNEMsd0JBQXdCLHFJQUFxSSxrQkFBa0IsZUFBZSxLQUFLLFlBQVksSUFBSSxNQUFNLG9EQUFvRCxtQkFBbUIsdUJBQXVCLDRCQUE0Qix5QkFBeUIsa0NBQWtDLG9LQUFvSyxRQUFRLGdGQUFnRixZQUFZLGtDQUFrQyw2Q0FBNkMsMENBQTBDLEVBQUUsb0RBQW9ELHNDQUFzQyxtQkFBbUIsOERBQThELGtDQUFrQyxnRUFBZ0UsNEJBQTRCLEtBQUssaUJBQWlCLFdBQVcsOEJBQThCLDBDQUEwQyxFQUFFLG1VQUFtVSx1QkFBdUIsYUFBYSx1REFBdUQsa0JBQWtCLE9BQU8sMkJBQTJCLHNDQUFzQyxzQkFBc0IsaUJBQWlCLGtCQUFrQixzQkFBc0IsMEZBQTBGLHlCQUF5QixnT0FBZ08sa0NBQWtDLG9DQUFvQywwQkFBMEIsK0JBQStCLDRDQUE0Qyx1SEFBdUgsRUFBRSxpREFBaUQsdUJBQXVCLGFBQWEsOEZBQThGLHNCQUFzQix5Q0FBeUMsOEJBQThCLDBCQUEwQixxQkFBcUIsNEtBQTRLLCtDQUErQyw0RkFBNEYsRUFBRSxrQkFBa0Isd0RBQXdELHVCQUF1QixrRUFBa0UsRUFBRSxnRUFBZ0UsV0FBVyxNQUFNLDJEQUEyRCwrQ0FBK0MsNkVBQTZFLFFBQVEsRUFBRSxvRkFBb0YsdUJBQXVCLGFBQWEsd0VBQXdFLDhCQUE4QixvQ0FBb0MsOE1BQThNLHNCQUFzQixtQ0FBbUMsRUFBRSxrRUFBa0UsdUJBQXVCLGFBQWEsOE9BQThPLGFBQWEsUUFBUSxpQ0FBaUMsdU5BQXVOLDBEQUEwRCxnRkFBZ0YsaUtBQWlLLGdCQUFnQixPQUFPLFVBQVUsV0FBVywwQ0FBMEMsZUFBZSxrQkFBa0IsbUJBQW1CLE9BQU8sNkJBQTZCLEdBQUcsV0FBVyxFQUFFLEVBQUUsb01BQW9NLHVCQUF1QixhQUFhLGtUQUFrVCx3QkFBd0IsNEJBQTRCLDJDQUEyQyxlQUFlLHdDQUF3QyxtRUFBbUUsb0JBQW9CLHVEQUF1RCxxRUFBcUUsOE1BQThNLHdIQUF3SCxhQUFhLGlFQUFpRSxtQ0FBbUMsRUFBRSxVQUFVLE1BQU0sZ0JBQWdCLEVBQUUsb1NBQW9TLHVCQUF1QixhQUFhLG1MQUFtTCw0QkFBNEIsZ0JBQWdCLDJCQUEyQix5QkFBeUIsaURBQWlELHlEQUF5RCxZQUFZLHVCQUF1QiwwQkFBMEIsYUFBYSxZQUFZLEdBQUcsdUNBQXVDLEVBQUUseUtBQXlLLHVCQUF1QixhQUFhLFNBQVMsaVhBQWlYLGFBQWEsRUFBRSwySUFBMkksdUJBQXVCLGFBQWEsd0ZBQXdGLG9DQUFvQyx1REFBdUQsU0FBUyx5RUFBeUUsY0FBYyxnQ0FBZ0MsY0FBYyxnQ0FBZ0MsY0FBYyxnQ0FBZ0MsY0FBYyxnQ0FBZ0MsZ0JBQWdCLGlCQUFpQixpSUFBaUksV0FBVyxtQ0FBbUMsY0FBYyxLQUFLLGNBQWMsaUNBQWlDLFNBQVMsZUFBZSxTQUFTLEVBQUUsd0JBQXdCLDRLQUE0SyxJQUFJLEtBQUssT0FBTywwQkFBMEIsTUFBTSxrRUFBa0UscUJBQXFCLEtBQUssd0JBQXdCLDZOQUE2TixjQUFjLGNBQWMsMkJBQTJCLGlDQUFpQyxNQUFNLHlEQUF5RCxRQUFRLGlCQUFpQixxREFBcUQsVUFBVSxFQUFFLGlGQUFpRix1QkFBdUIsYUFBYSx3QkFBd0Isc0JBQXNCLFFBQVEsV0FBVyxLQUFLLCtDQUErQyxxQkFBcUIsS0FBSyw4QkFBOEIsV0FBVyxpQkFBaUIsVUFBVSxRQUFRLGlCQUFpQixLQUFLLDBCQUEwQixXQUFXLGlCQUFpQixhQUFhLEdBQUcsdUJBQXVCLGFBQWEsd2FBQXdhLGtCQUFrQiw2RkFBNkYsZ0JBQWdCLGNBQWMscUNBQXFDLHNCQUFzQixnQkFBZ0Isb0NBQW9DLDBCQUEwQiw0QkFBNEIsd0JBQXdCLGtEQUFrRCx1RkFBdUYsd0NBQXdDLDZNQUE2TSxLQUFLLDREQUE0RCxTQUFTLGdCQUFnQixvREFBb0QsU0FBUyw4QkFBOEIsS0FBSyw2R0FBNkcsMEJBQTBCLHVCQUF1Qiw2RkFBNkYsMkNBQTJDLFNBQVMsUUFBUSxXQUFXLHdFQUF3RSx1REFBdUQsMkRBQTJELGtGQUFrRiw4REFBOEQseUJBQXlCLHNHQUFzRyxFQUFFLGdEQUFnRCxvTUFBb00sMEVBQTBFLG1GQUFtRix1QkFBdUIsMEhBQTBILG9EQUFvRCwrRUFBK0UsbUJBQW1CLG9DQUFvQyxrREFBa0QsNkNBQTZDLDZCQUE2QixjQUFjLHNCQUFzQiw0Q0FBNEMsYUFBYSw4REFBOEQsZ0JBQWdCLFVBQVUsd05BQXdOLGlGQUFpRixtQkFBbUIsbUJBQW1CLGtCQUFrQixzSEFBc0gsSUFBSSxLQUFLLDJDQUEyQyxZQUFZLHlCQUF5QixFQUFFLDRDQUE0QyxrQkFBa0IsZ0RBQWdELGNBQWMsNEJBQTRCLGlDQUFpQyxHQUFHLEVBQUUsbVpBQW1aLHVCQUF1QixhQUFhLGtOQUFrTixhQUFhLEdBQUcscUNBQXFDLE9BQU8sTUFBTSxjQUFjLGVBQWUsU0FBUyxPQUFPLGNBQWMsZ0JBQWdCLFNBQVMsT0FBTyxjQUFjLGdCQUFnQixRQUFRLE1BQU0sY0FBYyxlQUFlLFNBQVMsT0FBTyxjQUFjLGdCQUFnQixTQUFTLE9BQU8sY0FBYyxnQkFBZ0IsUUFBUSxxQ0FBcUMsWUFBWSxxQ0FBcUMsWUFBWSwwQ0FBMEMsUUFBUSw4RUFBOEUsUUFBUSw4RUFBOEUsVUFBVSx1RUFBdUUsY0FBYywwQ0FBMEMsT0FBTyw4Q0FBOEMsT0FBTyw4Q0FBOEMsZUFBZSx5Q0FBeUMsbUJBQW1CLEVBQUUsa0JBQWtCLE9BQU8sNkJBQTZCLEdBQUcsV0FBVyxFQUFFLEVBQUUsK0xBQStMLHVCQUF1QixhQUFhLHNRQUFzUSx3QkFBd0IsaUxBQWlMLHdGQUF3RixLQUFLLFVBQVUsME9BQTBPLGNBQWMseUVBQXlFLG9FQUFvRSxZQUFZLGFBQWEsMERBQTBELFFBQVEsYUFBYSxrQ0FBa0MsMkJBQTJCLE9BQU8seUJBQXlCLDBEQUEwRCxRQUFRLGFBQWEsa0NBQWtDLDJCQUEyQixRQUFRLHFIQUFxSCxtRkFBbUYsT0FBTyxzRUFBc0Usc0xBQXNMLG1DQUFtQyxrREFBa0QsT0FBTyw2RkFBNkYscURBQXFELFdBQVcsRUFBRSx3UEFBd1AsdUJBQXVCLGFBQWEsMEJBQTBCLHdCQUF3QixnQkFBZ0IsY0FBYyxpQkFBaUIsTUFBTSxZQUFZLFdBQVcsOEJBQThCLGtCQUFrQixjQUFjLGdCQUFnQixtQkFBbUIsZ0JBQWdCLGdDQUFnQyxtQkFBbUIsbUJBQW1CLGdCQUFnQixtQkFBbUIsUUFBUSxJQUFJLHVDQUF1QyxJQUFJLHdCQUF3QixVQUFVLEVBQUUscUJBQXFCLHVCQUF1QixhQUFhLFdBQVcsdUJBQXVCLEdBQUcsdUJBQXVCLGFBQWEsNkRBQTZELGdDQUFnQyxvTkFBb04sUUFBUSxXQUFXLDBDQUEwQyx3RkFBd0YsSUFBSSwyQkFBMkIsb0VBQW9FLFFBQVEsV0FBVyxLQUFLLGNBQWMsZ0JBQWdCLG9DQUFvQyw4QkFBOEIsV0FBVyxxQkFBcUIsb0NBQW9DLEVBQUUsZ0RBQWdELHVCQUF1QixhQUFhLG1JQUFtSSw0QkFBNEIsZ0JBQWdCLDJCQUEyQixnSUFBZ0ksc0JBQXNCLGlCQUFpQixFQUFFLDBIQUEwSCx1QkFBdUIsYUFBYSxrQ0FBa0Msc0JBQXNCLDZCQUE2QixtQ0FBbUMsUUFBUSxXQUFXLGlDQUFpQyxJQUFJLG1PQUFtTyxLQUFLLFNBQVMsRUFBRSxRQUFRLG1CQUFtQixLQUFLLCtJQUErSSx3REFBd0Qsa0NBQWtDLDRCQUE0QixpQkFBaUIsR0FBRyxFQUFFLGdCQUFnQix1QkFBdUIsYUFBYSxrRkFBa0YsZ0NBQWdDLDZJQUE2SSxpQkFBaUIsSUFBSSxrREFBa0QsU0FBUyxnR0FBZ0csK0NBQStDLEtBQUssbUZBQW1GLE1BQU0sTUFBTSx3QkFBd0IsV0FBVyw0QkFBNEIsZ0VBQWdFLFdBQVcsNEJBQTRCLHdDQUF3QyxvR0FBb0csZ0VBQWdFLHFIQUFxSCxrQkFBa0Isd0tBQXdLLE9BQU8sdUZBQXVGLHVEQUF1RCxpSkFBaUosSUFBSSxFQUFFLDJFQUEyRSx1QkFBdUIsYUFBYSxTQUFTLHFUQUFxVCxhQUFhLEVBQUUsdUlBQXVJLHVCQUF1QixhQUFhLG1EQUFtRCxjQUFjLDhCQUE4QixrQkFBa0Isa0NBQWtDLFFBQVEsV0FBVyxLQUFLLCtDQUErQyxJQUFJLDJHQUEyRyxxRUFBcUUsNkdBQTZHLFNBQVMsd0JBQXdCLFVBQVUsZUFBZSx5QkFBeUIsS0FBSyxxQkFBcUIsYUFBYSxrQkFBa0IsNkRBQTZELEVBQUUsZ0JBQWdCLHVCQUF1QixhQUFhLCtEQUErRCxnQ0FBZ0MseUZBQXlGLDhDQUE4QyxlQUFlLGdEQUFnRCx1QkFBdUIsa0NBQWtDLEtBQUssNkJBQTZCLElBQUksNkJBQTZCLDZCQUE2QixRQUFRLHNDQUFzQyxRQUFRLElBQUksb0JBQW9CLEtBQUssb0NBQW9DLDBJQUEwSSxJQUFJLGtCQUFrQixVQUFVLEVBQUUscUNBQXFDLHVCQUF1QixhQUFhLGtKQUFrSixnQkFBZ0IsdUlBQXVJLG9CQUFvQix5Q0FBeUMsRUFBRSxzQkFBc0IsZ0JBQWdCLGdGQUFnRixhQUFhLHFCQUFxQixPQUFPLHVCQUF1QixFQUFFLDBCQUEwQixrQkFBa0IsOERBQThELDRCQUE0Qix3QkFBd0IsNkNBQTZDLG1MQUFtTCxRQUFRLHlCQUF5QixtQkFBbUIsaUJBQWlCLGdCQUFnQixtQkFBbUIsZ0NBQWdDLHlCQUF5QixtQkFBbUIsaUJBQWlCLGdCQUFnQixtQkFBbUIsd0VBQXdFLHNCQUFzQixrSEFBa0gsd0NBQXdDLGVBQWUsOENBQThDLEtBQUssUUFBUSwrQkFBK0IsdUNBQXVDLHFCQUFxQixzRUFBc0UsWUFBWSxHQUFHLGlDQUFpQyxFQUFFLDRCQUE0QixhQUFhLDRCQUE0QixhQUFhLDRCQUE0QixrREFBa0QsZUFBZSxrREFBa0QsRUFBRSwrREFBK0QsTUFBTSxZQUFZLElBQUkseUJBQXlCLFNBQVMsb0JBQW9CLGVBQWUsK0dBQStHLFFBQVEsWUFBWSxxQ0FBcUMsUUFBUSxZQUFZLHFDQUFxQyxRQUFRLElBQUksbUJBQW1CLFFBQVEsSUFBSSxtREFBbUQsSUFBSSx3Q0FBd0MsYUFBYSxJQUFJLDBCQUEwQixJQUFJLHlDQUF5Qyw4QkFBOEIsSUFBSSxnQkFBZ0IsU0FBUyw0QkFBNEIsUUFBUSxLQUFLLGdCQUFnQix1QkFBdUIsS0FBSyxnRUFBZ0UsUUFBUSxJQUFJLHFHQUFxRyxJQUFJLHNNQUFzTSwwREFBMEQscUNBQXFDLHdGQUF3RixvQ0FBb0MscUNBQXFDLHVDQUF1QyxXQUFXLCtEQUErRCxFQUFFLGlCQUFpQixlQUFlLFdBQVcsZ0hBQWdILGdCQUFnQixxQkFBcUIsZ0JBQWdCLGtDQUFrQyw0REFBNEQsNktBQTZLLEdBQUcsRUFBRSxvSUFBb0ksdUJBQXVCLGFBQWEsY0FBYyxzQkFBc0IsK0RBQStELHVCQUF1QixHQUFHLEVBQUUsT0FBTyx1QkFBdUIsYUFBYSwwQkFBMEIsNERBQTRELEdBQUcsdUJBQXVCLGFBQWEsaUVBQWlFLGdCQUFnQixXQUFXLHlFQUF5RSxnQ0FBZ0MsaUJBQWlCLG9EQUFvRCxxQkFBcUIsY0FBYyw0Q0FBNEMseUJBQXlCLGlDQUFpQyxLQUFLLGtDQUFrQyw2QkFBNkIsV0FBVyxLQUFLLHFDQUFxQyxLQUFLLE1BQU0sbUJBQW1CLFlBQVksV0FBVyxnQkFBZ0IsS0FBSyxPQUFPLGVBQWUsYUFBYSw4QkFBOEIsZ0ZBQWdGLEVBQUUsMERBQTBELHVCQUF1QixhQUFhLDBSQUEwUixLQUFLLFdBQVcsS0FBSyxXQUFXLFVBQVUsVUFBVSw2QkFBNkIsR0FBRyxXQUFXLGlDQUFpQyxFQUFFLDJLQUEySyx1QkFBdUIsYUFBYSx3RkFBd0YsZ0JBQWdCLG1NQUFtTSxpRUFBaUUsZ0VBQWdFLGtCQUFrQix5QkFBeUIsMkVBQTJFLE9BQU8sMEpBQTBKLHdCQUF3QixXQUFXLCtEQUErRCxVQUFVLHFDQUFxQyw2QkFBNkIsK0RBQStELGtCQUFrQix3RkFBd0YsSUFBSSxLQUFLLHFCQUFxQixrQkFBa0IsWUFBWSxJQUFJLGtCQUFrQixPQUFPLDZCQUE2QixJQUFJLDJKQUEySiwwQ0FBMEMsa0ZBQWtGLHNCQUFzQix1QkFBdUIsMkJBQTJCLHFCQUFxQix3QkFBd0IsRUFBRSxpRkFBaUYsdUJBQXVCLGFBQWEsU0FBUywwUkFBMFIsYUFBYSxFQUFFLG9JQUFvSSx1QkFBdUIsYUFBYSwrSkFBK0osV0FBVyxHQUFHLG9EQUFvRCxJQUFJLG9EQUFvRCxVQUFVLFVBQVUsZ0JBQWdCLGVBQWUsc0NBQXNDLDJGQUEyRixXQUFXLGlIQUFpSCxhQUFhLFNBQVMsMENBQTBDLFlBQVksMEZBQTBGLGFBQWEsd0ZBQXdGLGlCQUFpQixTQUFTLCtDQUErQyx5QkFBeUIsK0NBQStDLDJCQUEyQiw0Q0FBNEMsV0FBVyw0Q0FBNEMsbUJBQW1CLEVBQUUscUJBQXFCLHFJQUFxSSw4QkFBOEIsRUFBRSwySUFBMkksdUJBQXVCLGFBQWEsd0JBQXdCLDJCQUEyQixJQUFJLHdDQUF3QyxVQUFVLEdBQUcsdUJBQXVCLGFBQWEsd0JBQXdCLE9BQU8sT0FBTyw4QkFBOEIsTUFBTSw4QkFBOEIsT0FBTyw4QkFBOEIsbUJBQW1CLEdBQUcsdUJBQXVCLGFBQWEsMEJBQTBCLFdBQVcsc0JBQXNCLGdCQUFnQix1QkFBdUIsV0FBVyxzQ0FBc0MseUJBQXlCLFdBQVcsNENBQTRDLHVCQUF1QixXQUFXLFNBQVMsd0NBQXdDLFdBQVcsYUFBYSxpQkFBaUIsU0FBUyx1QkFBdUIsV0FBVyxTQUFTLHdDQUF3QyxXQUFXLGFBQWEsaUJBQWlCLFdBQVcsRUFBRSxxQkFBcUIsdUJBQXVCLGFBQWEsaUtBQWlLLG9CQUFvQixxQkFBcUIsdURBQXVELEtBQUssS0FBSyxnQkFBZ0IsZUFBZSx5QkFBeUIsSUFBSSxTQUFTLGdCQUFnQixxR0FBcUcsd0JBQXdCLFdBQVcsc0NBQXNDLG1CQUFtQiwwQ0FBMEMsa0JBQWtCLDhCQUE4QiwrQ0FBK0MsOEJBQThCLGlJQUFpSSxvRkFBb0YsbUNBQW1DLHFCQUFxQixzQ0FBc0MsdUJBQXVCLG1CQUFtQixRQUFRLGtCQUFrQixtQkFBbUIsMkJBQTJCLHFCQUFxQix3QkFBd0IscURBQXFELEVBQUUsaUVBQWlFLHVCQUF1QixhQUFhLHNNQUFzTSxzQkFBc0IsbUdBQW1HLG9EQUFvRCxhQUFhLDRCQUE0QixrQkFBa0IsK0dBQStHLHdDQUF3QyxnREFBZ0QsS0FBSyxXQUFXLHVCQUF1QixtQkFBbUIsU0FBUyxRQUFRLFdBQVcsa0tBQWtLLHFCQUFxQiw0Q0FBNEMsc0VBQXNFLG9CQUFvQixzQkFBc0Isd0JBQXdCLG1FQUFtRSxXQUFXLEtBQUssV0FBVyw2RkFBNkYsU0FBUyx1QkFBdUIsUUFBUSxXQUFXLHlCQUF5QixXQUFXLGtDQUFrQyxtRUFBbUUsNkJBQTZCLDBCQUEwQixRQUFRLFdBQVcsNkJBQTZCLFdBQVcsc0JBQXNCLFVBQVUsTUFBTSwyQ0FBMkMsUUFBUSxXQUFXLEtBQUssNkJBQTZCLGtCQUFrQiwwREFBMEQsWUFBWSxZQUFZLHFUQUFxVCx5QkFBeUIscUJBQXFCLGtCQUFrQiw0Q0FBNEMsb0NBQW9DLHdDQUF3QyxpS0FBaUssa0JBQWtCLCtHQUErRyx3Q0FBd0Msa0NBQWtDLHFDQUFxQyw0REFBNEQsa0JBQWtCLG9EQUFvRCxTQUFTLHdDQUF3Qyx3QkFBd0IsbUJBQW1CLHNIQUFzSCxZQUFZLGdMQUFnTCxrREFBa0Qsd0VBQXdFLHFCQUFxQix5SUFBeUksNklBQTZJLEtBQUssa0NBQWtDLDBDQUEwQyxFQUFFLHVDQUF1QyxRQUFRLFdBQVcsS0FBSyxXQUFXLHFKQUFxSix5RUFBeUUsVUFBVSxjQUFjLGVBQWUsY0FBYyx1QkFBdUIsK0NBQStDLFdBQVcsU0FBUyxvQ0FBb0MsS0FBSyxTQUFTLDBCQUEwQixRQUFRLFdBQVcsaUJBQWlCLHNDQUFzQyxLQUFLLGlCQUFpQixLQUFLLGlCQUFpQixzQ0FBc0MsNkJBQTZCLGlEQUFpRCxRQUFRLElBQUksYUFBYSxJQUFJLE1BQU0sVUFBVSxLQUFLLGFBQWEsSUFBSSxNQUFNLFFBQVEsS0FBSyx5QkFBeUIsT0FBTyxtQkFBbUIsK0dBQStHLHVKQUF1SixFQUFFLDBMQUEwTCx1QkFBdUIsYUFBYSxXQUFXLDZCQUE2QixHQUFHLHVCQUF1QixhQUFhLGdLQUFnSyxJQUFJLGdDQUFnQyxFQUFFLDRCQUE0QixFQUFFLDhCQUE4QixFQUFFLDJCQUEyQixNQUFNLGdDQUFnQyxFQUFFLDRCQUE0QixFQUFFLDhCQUE4QixFQUFFLDJCQUEyQixHQUFHLHdCQUF3QiwwQ0FBMEMseUJBQXlCLGNBQWMsZ0NBQWdDLFFBQVEsV0FBVyw2S0FBNkssdUJBQXVCLG9CQUFvQixZQUFZLHFCQUFxQixXQUFXLFFBQVEsV0FBVyxLQUFLLG9CQUFvQiw4QkFBOEIsYUFBYSxRQUFRLGtCQUFrQixLQUFLLG1EQUFtRCwwQkFBMEIsTUFBTSxpQkFBaUIsMEJBQTBCLCtCQUErQixrQkFBa0IscUNBQXFDLE1BQU0sc0VBQXNFLEVBQUUsOEZBQThGLHVCQUF1QixhQUFhLDBIQUEwSCw0QkFBNEIsZ0JBQWdCLDJCQUEyQixzQkFBc0IsNEhBQTRILHdKQUF3SixNQUFNLHVMQUF1TCx3QkFBd0IsNkRBQTZELHdCQUF3QixTQUFTLDBCQUEwQixxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSxpSEFBaUgsdUJBQXVCLGFBQWEsOEJBQThCLHNKQUFzSixXQUFXLHVEQUF1RCx5R0FBeUcsS0FBSyxZQUFZLFdBQVcsdUNBQXVDLFNBQVMsaUJBQWlCLFVBQVUsR0FBRyx1QkFBdUIsYUFBYSxxRkFBcUYsNEJBQTRCLGlCQUFpQixNQUFNLDJDQUEyQywwQkFBMEIsa0NBQWtDLHFDQUFxQyw0REFBNEQsRUFBRSxvREFBb0QsdUJBQXVCLGFBQWEsU0FBUyxndUJBQWd1QixhQUFhLEVBQUUsZ1VBQWdVLHVCQUF1QixhQUFhLFdBQVcsc0JBQXNCLCtCQUErQixJQUFJLFlBQVksMkJBQTJCLHVCQUF1QixJQUFJLFlBQVksMkJBQTJCLGVBQWUsT0FBTyxZQUFZLElBQUksaUJBQWlCLHlDQUF5QyxlQUFlLFVBQVUsWUFBWSxJQUFJLG1CQUFtQixHQUFHLHVCQUF1QixhQUFhLG9SQUFvUixhQUFhLGVBQWUscUNBQXFDLFNBQVMsT0FBTyxxQ0FBcUMsaUJBQWlCLG1PQUFtTyxFQUFFLFNBQVMsRUFBRSxPQUFPLDZCQUE2QixHQUFHLFdBQVcsRUFBRSxFQUFFLDhQQUE4UCx1QkFBdUIsYUFBYSwyTEFBMkwsMEJBQTBCLHNCQUFzQixhQUFhLEVBQUUscUJBQXFCLGlCQUFpQixvRkFBb0Ysa0RBQWtELFlBQVksZ0RBQWdELDJOQUEyTixrQkFBa0IsOENBQThDLG9DQUFvQyxvQkFBb0IscUJBQXFCLGFBQWEsSUFBSSx5QkFBeUIsS0FBSyxVQUFVLFFBQVEsSUFBSSxXQUFXLFNBQVMsZ0JBQWdCLE9BQU8sMkNBQTJDLHdCQUF3QixrQ0FBa0MsYUFBYSxJQUFJLHFCQUFxQixLQUFLLG1CQUFtQixRQUFRLElBQUksZ0NBQWdDLFNBQVMsd0JBQXdCLGdMQUFnTCxvQkFBb0IsZUFBZSxvQkFBb0IsZUFBZSxvQkFBb0IsZUFBZSxvQkFBb0IsYUFBYSw0R0FBNEcsdVVBQXVVLHFDQUFxQyw2RUFBNkUsUUFBUSxJQUFJLGtFQUFrRSxVQUFVLHdEQUF3RCxpRkFBaUYsSUFBSSxrQ0FBa0MsNEJBQTRCLG9CQUFvQixRQUFRLElBQUksYUFBYSxnQ0FBZ0MsVUFBVSwrREFBK0QsNEdBQTRHLDZFQUE2RSxRQUFRLElBQUksS0FBSyxvQkFBb0IsMlNBQTJTLGFBQWEsS0FBSyxvQkFBb0IsYUFBYSxLQUFLLHFCQUFxQixPQUFPLHVHQUF1RyxFQUFFLGlMQUFpTCx1QkFBdUIsYUFBYSx5SkFBeUosb0JBQW9CLHlFQUF5RSxhQUFhLEVBQUUsK0JBQStCLHFDQUFxQyxlQUFlLHlCQUF5QixnREFBZ0Qsc0JBQXNCLCtCQUErQixvQ0FBb0MsS0FBSyxnQ0FBZ0MsK0VBQStFLHdCQUF3QixZQUFZLGNBQWMsZ0NBQWdDLFFBQVEsV0FBVyxLQUFLLG9CQUFvQix1REFBdUQsV0FBVyxLQUFLLHVDQUF1QyxTQUFTLGdGQUFnRix3QkFBd0IsRUFBRSw2SEFBNkgsdUJBQXVCLGFBQWEsK0lBQStJLDRCQUE0QixnQkFBZ0IsMkJBQTJCLGtEQUFrRCxzQkFBc0IsdUJBQXVCLEVBQUUsc0lBQXNJLHVCQUF1QixhQUFhLDZFQUE2RSxnQ0FBZ0MscUJBQXFCLE1BQU0sMkVBQTJFLGlFQUFpRSxFQUFFLHdEQUF3RCx1QkFBdUIsYUFBYSxTQUFTLDhkQUE4ZCxhQUFhLEVBQUUsc09BQXNPLHVCQUF1QixhQUFhLDJDQUEyQyw0QkFBNEIsOERBQThELDJNQUEyTSxFQUFFLHFDQUFxQyx1QkFBdUIsYUFBYSwrTEFBK0wsYUFBYSx3VEFBd1QsT0FBTyxvQ0FBb0MsR0FBRyxXQUFXLEVBQUUsRUFBRSwyS0FBMkssdUJBQXVCLGFBQWEsb0pBQW9KLDRCQUE0QixnQkFBZ0IsMkJBQTJCLGdEQUFnRCwwQkFBMEIsa0NBQWtDLEVBQUUsMklBQTJJLHVCQUF1QixhQUFhLFNBQVMsOGVBQThlLGFBQWEsRUFBRSw4TkFBOE4sdUJBQXVCLGFBQWEsNFJBQTRSLHFCQUFxQixHQUFHLHFCQUFxQixJQUFJLHFCQUFxQixJQUFJLHFCQUFxQixRQUFRLHFCQUFxQixTQUFTLGlCQUFpQixTQUFTLGlCQUFpQixVQUFVLE1BQU0sMEJBQTBCLFFBQVEsK0JBQStCLE9BQU8sb0NBQW9DLFVBQVUsdUZBQXVGLGFBQWEsTUFBTSwwQkFBMEIsT0FBTyx1Q0FBdUMsU0FBUyxHQUFHLE1BQU0sMEJBQTBCLFlBQVksNkJBQTZCLE9BQU8scUNBQXFDLElBQUksTUFBTSwwQkFBMEIsWUFBWSw2QkFBNkIsT0FBTyxxQ0FBcUMsSUFBSSxNQUFNLDBCQUEwQixZQUFZLDZCQUE2QixPQUFPLHNDQUFzQyxPQUFPLEdBQUcsTUFBTSwwQkFBMEIsT0FBTyxxQ0FBcUMsSUFBSSxNQUFNLDBCQUEwQixPQUFPLHFDQUFxQyxJQUFJLE1BQU0sMEJBQTBCLE9BQU8sc0NBQXNDLE9BQU8sb0NBQW9DLFlBQVksb0NBQW9DLG1CQUFtQixPQUFPLDZEQUE2RCxHQUFHLHlJQUF5SSxjQUFjLG1CQUFtQiw2SkFBNkosRUFBRSwwUEFBMFAsdUJBQXVCLGFBQWEsNENBQTRDLHdCQUF3QixpRUFBaUUsMENBQTBDLElBQUksS0FBSyxpQkFBaUIsZ0NBQWdDLGlKQUFpSixtREFBbUQsR0FBRyxFQUFFLHVDQUF1Qyx1QkFBdUIsYUFBYSxrSkFBa0osY0FBYyw4QkFBOEIsb0JBQW9CLHFCQUFxQixJQUFJLEtBQUssb0RBQW9ELHlCQUF5Qiw0QkFBNEIsT0FBTyxtQkFBbUIsa0JBQWtCLG9GQUFvRixrQkFBa0IsY0FBYyx3QkFBd0IsNE1BQTRNLGtCQUFrQixtQkFBbUIsZ0VBQWdFLGtCQUFrQix1QkFBdUIsSUFBSSw2Q0FBNkMsU0FBUyxhQUFhLElBQUksYUFBYSw0QkFBNEIsb0JBQW9CLHFEQUFxRCxrQkFBa0IsaUJBQWlCLFdBQVcsMkJBQTJCLFNBQVMsY0FBYyxJQUFJLGdCQUFnQiwyQ0FBMkMsZ0JBQWdCLG9CQUFvQixrQkFBa0IsSUFBSSxzQkFBc0Isb0JBQW9CLGFBQWEsb0JBQW9CLDJDQUEyQyxpQkFBaUIsV0FBVyw0QkFBNEIsU0FBUywrRUFBK0UsT0FBTyx1SEFBdUgsTUFBTSxpQkFBaUIsWUFBWSxXQUFXLEtBQUssY0FBYyxpQkFBaUIsSUFBSSxLQUFLLG9FQUFvRSw0QkFBNEIsaUVBQWlFLG9CQUFvQixXQUFXLHNCQUFzQiw2Q0FBNkMsSUFBSSwyQkFBMkIsU0FBUyxrQkFBa0Isa0JBQWtCLGNBQWMsaUJBQWlCLHNCQUFzQixjQUFjLGlCQUFpQixJQUFJLEtBQUssV0FBVywwQ0FBMEMsU0FBUyxRQUFRLHdCQUF3QixzQkFBc0IsMERBQTBELGdDQUFnQyxzQkFBc0IsK0VBQStFLHVDQUF1QyxTQUFTLG9EQUFvRCwrQkFBK0IsNERBQTRELCtFQUErRSxxREFBcUQsZ0NBQWdDLDREQUE0RCx3Q0FBd0MsS0FBSyxvQkFBb0IsZ0ZBQWdGLHNDQUFzQyx1REFBdUQsc0JBQXNCLHdDQUF3QyxvQ0FBb0MsY0FBYyxTQUFTLG9FQUFvRSx3Q0FBd0MsNENBQTRDLGlEQUFpRCxLQUFLLDJDQUEyQyxnQ0FBZ0MsTUFBTSx5RkFBeUYseUNBQXlDLGdHQUFnRywwRkFBMEYsc0JBQXNCLHdDQUF3QyxrQkFBa0Isd0NBQXdDLHFFQUFxRSwwQ0FBMEMsbUZBQW1GLGdKQUFnSixNQUFNLGtDQUFrQyxTQUFTLDhPQUE4Tyw0QkFBNEIsc0ZBQXNGLDhCQUE4QiwrQ0FBK0MsMEJBQTBCLDhCQUE4QixrRUFBa0Usc0JBQXNCLHdvQkFBd29CLG9DQUFvQyxRQUFRLDhHQUE4RyxzQkFBc0IscUJBQXFCLFdBQVcsdUJBQXVCLElBQUksZ0JBQWdCLElBQUksK0ZBQStGLFNBQVMsc0JBQXNCLHFCQUFxQixXQUFXLHVCQUF1QixJQUFJLGdCQUFnQixJQUFJLCtGQUErRixTQUFTLHNCQUFzQixxQkFBcUIsV0FBVyx1QkFBdUIsSUFBSSxnQkFBZ0IsSUFBSSwrRkFBK0YsU0FBUyxrQkFBa0IsWUFBWSxJQUFJLGdCQUFnQixJQUFJLGdCQUFnQixJQUFJLHVIQUF1SCxrQkFBa0IsbUJBQW1CLHlCQUF5QixxQkFBcUIsV0FBVyx1QkFBdUIsSUFBSSxnQkFBZ0IsSUFBSSxrREFBa0QsU0FBUyx5QkFBeUIscUJBQXFCLFdBQVcsdUJBQXVCLElBQUksZ0JBQWdCLElBQUksa0RBQWtELFNBQVMseUJBQXlCLHFCQUFxQixXQUFXLHVCQUF1QixJQUFJLGdCQUFnQixJQUFJLGtEQUFrRCxTQUFTLGlCQUFpQixpQkFBaUIsSUFBSSxjQUFjLFNBQVMsa0JBQWtCLGtCQUFrQixZQUFZLElBQUksZ0JBQWdCLElBQUksZ0JBQWdCLElBQUksS0FBSyxlQUFlLG9DQUFvQyw0Q0FBNEMsS0FBSyxrREFBa0QsSUFBSSxLQUFLLCtFQUErRSxnQkFBZ0Isb0VBQW9FLGtDQUFrQyxpQkFBaUIsV0FBVyxLQUFLLDBDQUEwQyxtQkFBbUIsVUFBVSxtQkFBbUIsa0NBQWtDLHFCQUFxQixLQUFLLDhDQUE4QyxrSkFBa0oseUNBQXlDLHlNQUF5TSxnQkFBZ0IsaUlBQWlJLHlFQUF5RSxLQUFLLHlCQUF5Qix5QkFBeUIscU5BQXFOLHVGQUF1RiwwQ0FBMEMsK0VBQStFLHNCQUFzQixxQ0FBcUMsb0JBQW9CLHlCQUF5QixzQkFBc0IsRUFBRSxlQUFlLE9BQU8scW5CQUFxbkIsMkdBQTJHLHNCQUFzQix3REFBd0QsWUFBWSw0RUFBNEUsdUJBQXVCLEtBQUsscUJBQXFCLGtEQUFrRCxFQUFFLHlIQUF5SCx1QkFBdUIsYUFBYSwyR0FBMkcsc0JBQXNCLGdDQUFnQyxxREFBcUQsNENBQTRDLG1LQUFtSyxnQkFBZ0IsMkJBQTJCLGtCQUFrQiwrQ0FBK0MsOGRBQThkLEtBQUssYUFBYSxzQkFBc0IsK0JBQStCLFdBQVcsaUNBQWlDLHdCQUF3QiwyQkFBMkIsRUFBRSxzQkFBc0IsRUFBRSxtR0FBbUcsdUJBQXVCLGFBQWEsU0FBUyw4R0FBOEcsc0JBQXNCLDRKQUE0SixhQUFhLEVBQUUsd0ZBQXdGLHVCQUF1QixhQUFhLGdQQUFnUCxhQUFhLEdBQUcsb0RBQW9ELElBQUksb0RBQW9ELElBQUksb0RBQW9ELElBQUkscUNBQXFDLElBQUkscUNBQXFDLElBQUkscUNBQXFDLE9BQU8sb0RBQW9ELFlBQVksb0RBQW9ELGtCQUFrQixnQkFBZ0IsZ0JBQWdCLG1FQUFtRSxZQUFZLHlDQUF5QyxZQUFZLHFDQUFxQyxRQUFRLGdDQUFnQyxjQUFjLHFDQUFxQyxZQUFZLHFDQUFxQyxtQkFBbUIsT0FBTyxpRUFBaUUsR0FBRywwQ0FBMEMsMENBQTBDLFVBQVUsU0FBUyxxQkFBcUIsb0VBQW9FLGdCQUFnQixNQUFNLG9CQUFvQixTQUFTLFFBQVEsb0JBQW9CLFNBQVMsUUFBUSxvQkFBb0IsT0FBTyxrQkFBa0IsYUFBYSxzQkFBc0Isd0RBQXdELHFCQUFxQix1REFBdUQsaUJBQWlCLDJCQUEyQixjQUFjLGdCQUFnQixFQUFFLEVBQUUsRUFBRSw0TkFBNE4sdUJBQXVCLGFBQWEsNENBQTRDLHdCQUF3QixvQkFBb0IsNkNBQTZDLEdBQUcsRUFBRSx1Q0FBdUMsdUJBQXVCLGFBQWEsbU1BQW1NLGtCQUFrQixzR0FBc0csa0JBQWtCLGNBQWMsNEJBQTRCLElBQUksaUJBQWlCLFNBQVMsb0JBQW9CLDRCQUE0QixJQUFJLDJCQUEyQixTQUFTLGNBQWMsNEJBQTRCLElBQUksMEJBQTBCLFNBQVMsZ0JBQWdCLHVCQUF1QixJQUFJLHNDQUFzQyxTQUFTLHlCQUF5Qix5QkFBeUIsMkJBQTJCLGlFQUFpRSwwQ0FBMEMsK0VBQStFLHNCQUFzQixxQ0FBcUMsWUFBWSxzSkFBc0osa0JBQWtCLDRGQUE0RiwwQkFBMEIseUVBQXlFLHVEQUF1RCxJQUFJLHVDQUF1QyxZQUFZLG1CQUFtQixPQUFPLG1lQUFtZSxzVUFBc1Usc0JBQXNCLHdEQUF3RCx5QkFBeUIsdUJBQXVCLEtBQUsscUJBQXFCLGlEQUFpRCxFQUFFLHVLQUF1Syx1QkFBdUIsYUFBYSwyR0FBMkcsNEJBQTRCLGdCQUFnQiwyQkFBMkIsY0FBYyx3QkFBd0IsV0FBVywwQ0FBMEMsRUFBRSwyQkFBMkIsaUNBQWlDLEtBQUssZ2hCQUFnaEIsS0FBSyw2Q0FBNkMsc0JBQXNCLDJMQUEyTCxFQUFFLG1HQUFtRyx1QkFBdUIsYUFBYSxTQUFTLCtGQUErRixzQkFBc0Isa0lBQWtJLGFBQWEsRUFBRSx3RkFBd0YsdUJBQXVCLGFBQWEsNEpBQTRKLGNBQWMsT0FBTyxNQUFNLFVBQVUsVUFBVSxPQUFPLHdDQUF3QyxtQkFBbUIsV0FBVyxHQUFHLG9EQUFvRCxPQUFPLHFDQUFxQyxPQUFPLHFDQUFxQyxNQUFNLHFDQUFxQyxRQUFRLHFDQUFxQyxPQUFPLFVBQVUsV0FBVyxXQUFXLEtBQUssbUJBQW1CLHVEQUF1RCxvREFBb0QsWUFBWSxvREFBb0QsWUFBWSxzREFBc0QsZ0JBQWdCLGVBQWUsT0FBTyw0Q0FBNEMsR0FBRyxFQUFFLDRIQUE0SCx3QkFBd0IsYUFBYSxxR0FBcUcsb0JBQW9CLE9BQU8saUJBQWlCLHNCQUFzQiw4TEFBOEwsV0FBVyxLQUFLLHVDQUF1QyxzQ0FBc0MseUNBQXlDLGlCQUFpQixxSEFBcUgsYUFBYSxlQUFlLEVBQUUsMERBQTBELFVBQVUscUJBQXFCLFFBQVEseUZBQXlGLElBQUksV0FBVyxtQkFBbUIsd0VBQXdFLGlCQUFpQixPQUFPLHlCQUF5QixjQUFjLFdBQVcsS0FBSyxXQUFXLHFEQUFxRCxVQUFVLDRCQUE0QixXQUFXLGdDQUFnQyxtQ0FBbUMsdUJBQXVCLFdBQVcsb0JBQW9CLHFCQUFxQixxQkFBcUIsZ0JBQWdCLGVBQWUsY0FBYyxtQkFBbUIsOENBQThDLFNBQVMsaUNBQWlDLHFCQUFxQixPQUFPLEdBQUcsVUFBVSxFQUFFLGVBQWUsRUFBRSxpRkFBaUYsd0JBQXdCLGFBQWEsZ0VBQWdFLG9CQUFvQixpRkFBaUYsNEJBQTRCLGdCQUFnQiwyQkFBMkIsZ0xBQWdMLEVBQUUsMERBQTBELHdCQUF3QixhQUFhLHFKQUFxSix5Q0FBeUMsb0JBQW9CLDZIQUE2SCxpQkFBaUIsK0ZBQStGLGNBQWMsV0FBVywwQkFBMEIsY0FBYyxrQkFBa0IsaUNBQWlDLGNBQWMsb0JBQW9CLDhDQUE4QyxxQ0FBcUMsZ0RBQWdELGlCQUFpQix1QkFBdUIsOEJBQThCLHdMQUF3TCxvQkFBb0IsMERBQTBELGVBQWUsZ0RBQWdELDhDQUE4Qyw0Q0FBNEMsS0FBSyxXQUFXLEtBQUssMkNBQTJDLG9GQUFvRixvR0FBb0csU0FBUyxvQkFBb0IscURBQXFELGVBQWUsdUNBQXVDLGNBQWMsK0NBQStDLG1LQUFtSywyRUFBMkUsV0FBVyw4QkFBOEIsNERBQTRELCtCQUErQixFQUFFLDBJQUEwSSx3QkFBd0IsYUFBYSxXQUFXLDRIQUE0SCx3TEFBd0wsRUFBRSwwSUFBMEksd0JBQXdCLGFBQWEsMkNBQTJDLDRCQUE0Qiw2REFBNkQsMEdBQTBHLG9EQUFvRCw0REFBNEQsRUFBRSxxQ0FBcUMsd0JBQXdCLGFBQWEsK0JBQStCLDRCQUE0Qix3QkFBd0IscURBQXFELDRDQUE0QyxpRUFBaUUsS0FBSyx1REFBdUQsa0VBQWtFLHlCQUF5Qiw4REFBOEQsNEdBQTRHLEdBQUcsR0FBRyxFQUFFLHVCQUF1Qix3QkFBd0IsYUFBYSx3QkFBd0IsdURBQXVELGtCQUFrQixXQUFXLG9CQUFvQixhQUFhLFdBQVcsS0FBSyxXQUFXLDZEQUE2RCw2Q0FBNkMsNkJBQTZCLFVBQVUsR0FBRyx3QkFBd0IsYUFBYSw0RUFBNEUsd0JBQXdCLDZFQUE2RSw4QkFBOEIsMEJBQTBCLHFCQUFxQixpQkFBaUIsa0RBQWtELGFBQWEsb0JBQW9CLGdKQUFnSixFQUFFLEdBQUcsRUFBRSxtRUFBbUUsd0JBQXdCLGFBQWEsa1VBQWtVLGdCQUFnQixXQUFXLGdCQUFnQixHQUFHLHdDQUF3QywrRUFBK0Usa0JBQWtCLDJCQUEyQixFQUFFLDZCQUE2QixFQUFFLEVBQUUsV0FBVyxVQUFVLHdDQUF3QyxnQkFBZ0IsY0FBYyx5REFBeUQsV0FBVyw2RkFBNkYsa0JBQWtCLDJCQUEyQixFQUFFLHNGQUFzRixlQUFlLHNHQUFzRyxlQUFlLDBDQUEwQyxZQUFZLGtGQUFrRixjQUFjLGdCQUFnQixjQUFjLGdCQUFnQixjQUFjLG9DQUFvQyxpQ0FBaUMsZ0JBQWdCLHNIQUFzSCxnQkFBZ0IscUNBQXFDLFdBQVcscUNBQXFDLFNBQVMsNkNBQTZDLGVBQWUsa0NBQWtDLDBCQUEwQiwyQ0FBMkMsZ0JBQWdCLHlEQUF5RCwySEFBMkgsRUFBRSx1UkFBdVIsd0JBQXdCLGFBQWEsZ0VBQWdFLDBDQUEwQyw4QkFBOEIsYUFBYSxXQUFXLFlBQVksMkJBQTJCLDREQUE0RCxtREFBbUQsRUFBRSx5Q0FBeUMsd0JBQXdCLGFBQWEsa05BQWtOLGtCQUFrQiwrQkFBK0Isa0JBQWtCLCtCQUErQix3QkFBd0Isb0NBQW9DLHlCQUF5Qiw4QkFBOEIsTUFBTSxpTEFBaUwsK0JBQStCLFNBQVMsRUFBRSxRQUFRLEtBQUssTUFBTSx3QkFBd0IsY0FBYyxFQUFFLFlBQVksV0FBVyxLQUFLLGFBQWEsc0VBQXNFLHdCQUF3QixZQUFZLEVBQUUsT0FBTyxzQ0FBc0MsYUFBYSxFQUFFLGtFQUFrRSxNQUFNLGVBQWUsa0NBQWtDLFdBQVcsS0FBSyxtQ0FBbUMsNkJBQTZCLFdBQVcsU0FBUyxtQkFBbUIsc0JBQXNCLFdBQVcsV0FBVyx5Q0FBeUMsYUFBYSxXQUFXLHlCQUF5Qiw0QkFBNEIsZUFBZSxxSEFBcUgsNkJBQTZCLHdCQUF3Qix3Q0FBd0MsU0FBUyxFQUFFLGVBQWUsdUJBQXVCLGtEQUFrRCxxQ0FBcUMscUNBQXFDLHFCQUFxQixjQUFjLEVBQUUsWUFBWSxJQUFJLEtBQUssU0FBUyxRQUFRLFdBQVcsb0JBQW9CLHFCQUFxQix3RkFBd0Ysc0JBQXNCLHFCQUFxQixzQkFBc0Isc0VBQXNFLGNBQWMsNEJBQTRCLG1EQUFtRCw4RkFBOEYsWUFBWSxFQUFFLFFBQVEsSUFBSSw0QkFBNEIsV0FBVyxLQUFLLHlEQUF5RCxrQkFBa0IsdUVBQXVFLE1BQU0sNkdBQTZHLFlBQVkseUJBQXlCLHdCQUF3QiwyQkFBMkIsdUJBQXVCLHFCQUFxQixFQUFFLE9BQU8scURBQXFELFVBQVUsRUFBRSxxTEFBcUwsd0JBQXdCLGFBQWEsOFBBQThQLGdCQUFnQixnQkFBZ0Isc0NBQXNDLGlDQUFpQyxvQ0FBb0Msc0NBQXNDLHVEQUF1RCxlQUFlLDJCQUEyQixxSUFBcUksNEJBQTRCLGdCQUFnQiwyQkFBMkIsYUFBYSx1Q0FBdUMsd0JBQXdCLHdDQUF3QyxvQ0FBb0MsMENBQTBDLG1EQUFtRCwyQkFBMkIsV0FBVyxlQUFlLFdBQVcsWUFBWSxvS0FBb0ssT0FBTyxzRUFBc0UsOEJBQThCLE9BQU8sMEVBQTBFLDhCQUE4QixFQUFFLDhOQUE4Tix3QkFBd0IsYUFBYSxTQUFTLGtIQUFrSCx1Q0FBdUMsNkdBQTZHLGFBQWEsRUFBRSxxRkFBcUYsd0JBQXdCLGFBQWEsMktBQTJLLG9CQUFvQiw0QkFBNEIsMEJBQTBCLHFCQUFxQix3S0FBd0ssMkVBQTJFLE9BQU8sK1ZBQStWLDBCQUEwQixTQUFTLDJEQUEyRCxpRkFBaUYscUdBQXFHLCtCQUErQixvQ0FBb0Msc0NBQXNDLGtFQUFrRSxlQUFlLElBQUksMEJBQTBCLHFCQUFxQixFQUFFLHFHQUFxRyxxQkFBcUIseUJBQXlCLDRCQUE0QixjQUFjLHFJQUFxSSx5RUFBeUUsb0JBQW9CLElBQUksK0VBQStFLDhCQUE4QixvQkFBb0IsaURBQWlELG9CQUFvQixxREFBcUQsK0JBQStCLDhCQUE4QiwrSUFBK0ksZUFBZSw0QkFBNEIsZ0JBQWdCLE9BQU8sb0RBQW9ELGVBQWUsSUFBSSxrQkFBa0IsbUJBQW1CLDRCQUE0QixlQUFlLEVBQUUseUdBQXlHLGVBQWUseUJBQXlCLDBCQUEwQixlQUFlLDJCQUEyQixlQUFlLDRCQUE0QixnQkFBZ0IsdUJBQXVCLFdBQVcsNEJBQTRCLDZIQUE2SCxpR0FBaUcsa0NBQWtDLHlEQUF5RCwwQkFBMEIsOExBQThMLHlCQUF5Qix1QkFBdUIsa0JBQWtCLG1CQUFtQiw2QkFBNkIsbUJBQW1CLGdHQUFnRyxtS0FBbUsscUVBQXFFLHVCQUF1QixpQkFBaUIsa0NBQWtDLDJGQUEyRixtQkFBbUIsb0RBQW9ELGdJQUFnSSxPQUFPLFdBQVcscUVBQXFFLGtNQUFrTSxvQkFBb0IsY0FBYyxhQUFhLGNBQWMsbUdBQW1HLGdDQUFnQyxnQkFBZ0Isa0ZBQWtGLGNBQWMsOEZBQThGLHFDQUFxQyxXQUFXLG9EQUFvRCx1QkFBdUIsMERBQTBELHlNQUF5TSxRQUFRLG9CQUFvQiw0REFBNEQsNEVBQTRFLDZEQUE2RCxNQUFNLDhKQUE4SiwyQ0FBMkMsTUFBTSw4TUFBOE0scUNBQXFDLGFBQWEsc05BQXNOLGtEQUFrRCwrQ0FBK0MsRUFBRSxFQUFFLG1FQUFtRSxJQUFJLGNBQWMscU9BQXFPLFdBQVcsbURBQW1ELHVCQUF1QixHQUFHLGNBQWMseUNBQXlDLDJCQUEyQixLQUFLLDJCQUEyQixRQUFRLDRCQUE0QixFQUFFLFNBQVMsY0FBYywyREFBMkQsV0FBVyxpREFBaUQsdUJBQXVCLEdBQUcsY0FBYywwQkFBMEIscUJBQXFCLHNHQUFzRyxjQUFjLG9EQUFvRCx1REFBdUQsMEJBQTBCLGNBQWMsZ0dBQWdHLGNBQWMsaUdBQWlHLGNBQWMsd0hBQXdILDRCQUE0Qiw0REFBNEQsRUFBRSxrQkFBa0IsNkdBQTZHLG1CQUFtQixzQkFBc0IsbUNBQW1DLEVBQUUsWUFBWSxpQkFBaUIsRUFBRSxrQkFBa0Isb0VBQW9FLG1CQUFtQixtQ0FBbUMsWUFBWSxpQkFBaUIsRUFBRSxnQkFBZ0Isb01BQW9NLDZHQUE2RyxrRkFBa0YsMkRBQTJELE1BQU0sbU9BQW1PLHFCQUFxQixPQUFPLG1PQUFtTywwREFBMEQsR0FBRyxjQUFjLDhGQUE4Riw4QkFBOEIsOEhBQThILDZCQUE2QixpQ0FBaUMsdUJBQXVCLG1CQUFtQix1RUFBdUUseUJBQXlCLGtCQUFrQixrRkFBa0YsRUFBRSxxREFBcUQsbUVBQW1FLFdBQVcsdUJBQXVCLG1CQUFtQixFQUFFLGdHQUFnRyxxSkFBcUosMktBQTJLLDZHQUE2RyxpRUFBaUUsOENBQThDLGdDQUFnQyxFQUFFLHdCQUF3QixpQ0FBaUMsNENBQTRDLEVBQUUseUJBQXlCLDJEQUEyRCxNQUFNLDZTQUE2UyxpRUFBaUUsT0FBTyx5TkFBeU4sd0dBQXdHLEdBQUcsMkNBQTJDLFNBQVMsd0dBQXdHLGtCQUFrQixJQUFJLDhCQUE4QixtRUFBbUUsR0FBRyxjQUFjLHlCQUF5Qiw2UkFBNlIsd0dBQXdHLGNBQWMsOEtBQThLLG9CQUFvQixpSUFBaUksMENBQTBDLDRKQUE0SixvQkFBb0Isd0hBQXdILG9EQUFvRCxHQUFHLGdIQUFnSCxjQUFjLG1HQUFtRywrRUFBK0Usb0NBQW9DLDZDQUE2QywwQkFBMEIsMEVBQTBFLDJPQUEyTyxpRkFBaUYsd0JBQXdCLDBFQUEwRSw2UUFBNlEseUZBQXlGLGNBQWMsK0VBQStFLDhEQUE4RCxRQUFRLCtFQUErRSxvQkFBb0IseURBQXlELGdCQUFnQixFQUFFLDJCQUEyQiwwREFBMEQsc0NBQXNDLEVBQUUsU0FBUyxvQ0FBb0MseUNBQXlDLG9CQUFvQixFQUFFLHlEQUF5RCxnQkFBZ0IsR0FBRyxvREFBb0QsaUNBQWlDLHNCQUFzQix1QkFBdUIsc0JBQXNCLHVCQUF1QixFQUFFLG9MQUFvTCwrYkFBK2IsaU9BQWlPLGtEQUFrRCx3QkFBd0IscURBQXFELEdBQUcsY0FBYyxxQ0FBcUMsV0FBVyx5QkFBeUIsSUFBSSxNQUFNLFNBQVMsZ0JBQWdCLE1BQU0sb0RBQW9ELGVBQWUsZ0VBQWdFLGNBQWMsRUFBRSxnQkFBZ0IsY0FBYywwQkFBMEIseURBQXlELG9CQUFvQixJQUFJLG9FQUFvRSxvQkFBb0IsSUFBSSxxREFBcUQsOEJBQThCLG9DQUFvQyw4QkFBOEIsMkNBQTJDLDJGQUEyRix1REFBdUQsMEJBQTBCLHVCQUF1Qix5QkFBeUIsbUJBQW1CLFFBQVEsZ0hBQWdILEVBQUUsb0RBQW9ELGVBQWUsK0hBQStILGVBQWUseUJBQXlCLDBCQUEwQixlQUFlLDJCQUEyQixlQUFlLDRCQUE0QixnQkFBZ0IsdUJBQXVCLFdBQVcseUJBQXlCLG1CQUFtQixvQkFBb0Isc0JBQXNCLGtCQUFrQixRQUFRLGFBQWEsd0VBQXdFLHlCQUF5QiwwQkFBMEIsV0FBVyxxRkFBcUYsNkRBQTZELEtBQUsscUdBQXFHLGNBQWMsY0FBYyxpREFBaUQsb0NBQW9DLFdBQVcsRUFBRSx1Q0FBdUMsb0NBQW9DLG9CQUFvQixFQUFFLHVDQUF1QyxvQkFBb0IsaUNBQWlDLDRCQUE0QixzQkFBc0IsV0FBVyxzQkFBc0IsZUFBZSxPQUFPLG1FQUFtRSxjQUFjLHVDQUF1QyxlQUFlLEVBQUUseUJBQXlCLFlBQVksRUFBRSxxQkFBcUIsa0JBQWtCLHFMQUFxTCxFQUFFLG1GQUFtRixnQkFBZ0IsdUJBQXVCLFdBQVcsTUFBTSxXQUFXLEtBQUssYUFBYSxzQkFBc0Isb0NBQW9DLHdCQUF3QixLQUFLLHlDQUF5Qyx3QkFBd0Isb0VBQW9FLHdDQUF3QyxnQ0FBZ0MsY0FBYyx3SEFBd0gsRUFBRSxLQUFLLG1CQUFtQiw4QkFBOEIsMkRBQTJELDRGQUE0RixVQUFVLGNBQWMseUNBQXlDLE9BQU8scURBQXFELEVBQUUscUJBQXFCLGlDQUFpQyxFQUFFLFNBQVMsZ0JBQWdCLGdEQUFnRCxlQUFlLGVBQWUsZ0JBQWdCLGlEQUFpRCxxQ0FBcUMsbUlBQW1JLE9BQU8sbURBQW1ELEVBQUUseUJBQXlCLGlDQUFpQyxNQUFNLElBQUksZ0VBQWdFLG9HQUFvRyxtQkFBbUIsT0FBTyxnUkFBZ1IsNEJBQTRCLFlBQVksRUFBRSw0SkFBNEosd0JBQXdCLGFBQWEscUJBQXFCLDRCQUE0Qix5Q0FBeUMsU0FBUyw2QkFBNkIseUJBQXlCLE9BQU8sRUFBRSxpQkFBaUIsd0JBQXdCLGFBQWEsMlNBQTJTLFdBQVcsVUFBVSwwQ0FBMEMsZUFBZSxnQkFBZ0IsY0FBYyxnQkFBZ0IsZUFBZSxnQkFBZ0IsNEJBQTRCLE9BQU8saUNBQWlDLGNBQWMsYUFBYSxnQkFBZ0IsZUFBZSxhQUFhLGdCQUFnQixjQUFjLDJDQUEyQyxVQUFVLDBDQUEwQyxRQUFRLDZCQUE2QixpQ0FBaUMsRUFBRSxpQ0FBaUMsa0JBQWtCLGtCQUFrQiw0REFBNEQsaUNBQWlDLEVBQUUsaUNBQWlDLGtCQUFrQixjQUFjLDBDQUEwQyxTQUFTLHFDQUFxQyxpQkFBaUIsbUJBQW1CLGtFQUFrRSxHQUFHLDJCQUEyQixHQUFHLEVBQUUsMlBBQTJQLHdCQUF3QixhQUFhLHNJQUFzSSxnQkFBZ0IsbUJBQW1CLHNCQUFzQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixtQkFBbUIsdUJBQXVCLFdBQVcsS0FBSyxXQUFXLDBCQUEwQixxQ0FBcUMsU0FBUyxrQkFBa0IsbUJBQW1CLHlDQUF5QyxLQUFLLEtBQUssV0FBVywwQkFBMEIscUNBQXFDLFNBQVMsZ0JBQWdCLFlBQVksV0FBVyx1Q0FBdUMsU0FBUyxjQUFjLG1FQUFtRSxjQUFjLHFHQUFxRyxjQUFjLGdEQUFnRCwrRkFBK0YsV0FBVyw4RUFBOEUsMEJBQTBCLGdCQUFnQix5QkFBeUIseUJBQXlCLFdBQVcsVUFBVSxFQUFFLGFBQWEsNkNBQTZDLGNBQWMsNkJBQTZCLGdCQUFnQiw2REFBNkQsaUVBQWlFLGdCQUFnQiwyQkFBMkIsc0JBQXNCLHVFQUF1RSxRQUFRLFlBQVksS0FBSyxXQUFXLHdCQUF3QixJQUFJLE1BQU0sMEJBQTBCLElBQUksT0FBTyx3RkFBd0YsMkJBQTJCLHlCQUF5QixtRkFBbUYsTUFBTSxpREFBaUQseUJBQXlCLGtEQUFrRCxRQUFRLFdBQVcsS0FBSyxpRkFBaUYscUJBQXFCLDBCQUEwQixRQUFRLFNBQVMsY0FBYyw2QkFBNkIsbURBQW1ELHVFQUF1RSxnSEFBZ0gsOEJBQThCLDBCQUEwQixvREFBb0Qsc0NBQXNDLDhIQUE4SCxnRUFBZ0UsOEJBQThCLDJEQUEyRCwrTEFBK0wsZ0NBQWdDLGlHQUFpRyx3QkFBd0Isc0NBQXNDLHVFQUF1RSxnTEFBZ0wsaUVBQWlFLDRNQUE0TSwyQkFBMkIsc0NBQXNDLHNEQUFzRCxnYkFBZ2IsaUJBQWlCLDRCQUE0QixjQUFjLHFCQUFxQiw0SEFBNEgsb0NBQW9DLGdKQUFnSixTQUFTLDZEQUE2RCxHQUFHLGdCQUFnQixpQkFBaUIsY0FBYywrQ0FBK0MsY0FBYyx1Q0FBdUMsRUFBRSxFQUFFLGdCQUFnQiwwQkFBMEIsMEJBQTBCLFVBQVUsU0FBUyxXQUFXLGdDQUFnQyxtQkFBbUIsYUFBYSxPQUFPLGdCQUFnQixvQkFBb0IseUJBQXlCLDBDQUEwQyxnREFBZ0QsYUFBYSxnQkFBZ0IsaUJBQWlCLDRCQUE0QixTQUFTLHNCQUFzQixXQUFXLEdBQUcsaUJBQWlCLHFDQUFxQyw4REFBOEQsNEJBQTRCLHlDQUF5QyxpQkFBaUIsRUFBRSxZQUFZLG9CQUFvQix1QkFBdUIsNkJBQTZCLGdEQUFnRCw2REFBNkQseUNBQXlDLDRMQUE0TCxrQ0FBa0MsRUFBRSwrQ0FBK0MsK1BBQStQLGdCQUFnQixVQUFVLHdDQUF3QyxvUEFBb1AsZ0JBQWdCLFVBQVUsSUFBSSwyQkFBMkIsNENBQTRDLGlCQUFpQixpRUFBaUUsaUNBQWlDLHlCQUF5QixrQ0FBa0Msc0JBQXNCLHFCQUFxQixTQUFTLGlCQUFpQiwyQkFBMkIsRUFBRSw4REFBOEQsd0JBQXdCLGFBQWEsa0hBQWtILHNDQUFzQyxtQ0FBbUMsaUJBQWlCLDJCQUEyQixnRUFBZ0UsMEZBQTBGLHFCQUFxQix3RUFBd0UsdUJBQXVCLHNCQUFzQixvRUFBb0Usa0NBQWtDLDRCQUE0QixrR0FBa0csRUFBRSwrQkFBK0IsK0RBQStELE1BQU0sRUFBRSx1RkFBdUYsd0JBQXdCLGFBQWEsZ0pBQWdKLGNBQWMseURBQXlELHdCQUF3QixZQUFZLHNCQUFzQixxREFBcUQsNkJBQTZCLG9GQUFvRiwyQkFBMkIsSUFBSSxZQUFZLFNBQVMsc0VBQXNFLDJCQUEyQix1Q0FBdUMsS0FBSyxxQkFBcUIsR0FBRyxFQUFFLHFIQUFxSCx3QkFBd0IsYUFBYSxXQUFXLGtOQUFrTix3TUFBd00sS0FBSywrZUFBK2UsS0FBSyx3Q0FBd0MsR0FBRyx3QkFBd0IsYUFBYSwyU0FBMlMsZ0JBQWdCLGdCQUFnQixzQ0FBc0MsaUNBQWlDLG9DQUFvQyxtRkFBbUYsMkJBQTJCLDJDQUEyQyw0QkFBNEIsZ0JBQWdCLDJCQUEyQixtQkFBbUIsbUhBQW1ILGFBQWEsdUNBQXVDLHdCQUF3Qix3QkFBd0IsMENBQTBDLG1EQUFtRCwyQkFBMkIsV0FBVyxlQUFlLFdBQVcsWUFBWSxzRUFBc0UsT0FBTywwRUFBMEUsMEZBQTBGLEVBQUUseVBBQXlQLHdCQUF3QixhQUFhLFNBQVMsa0hBQWtILHVDQUF1QyxxSUFBcUksYUFBYSxFQUFFLHFGQUFxRix3QkFBd0IsYUFBYSwrQ0FBK0MsaUpBQWlKLHNCQUFzQiw4SEFBOEgsc0ZBQXNGLDhCQUE4Qix5QkFBeUIsMkJBQTJCLDRCQUE0QiwyQkFBMkIsbUNBQW1DLCtCQUErQix3REFBd0QsR0FBRyx1S0FBdUssNkZBQTZGLDJGQUEyRixxQ0FBcUMsR0FBRyw4QkFBOEIscUJBQXFCLDZCQUE2QixHQUFHLHFCQUFxQiw2QkFBNkIsR0FBRyxpQ0FBaUMsaUNBQWlDLGlDQUFpQywyQ0FBMkMsaUxBQWlMLEdBQUcsMENBQTBDLG9DQUFvQyxHQUFHLGdKQUFnSixvSkFBb0osR0FBRyxvRUFBb0UseUJBQXlCLDJCQUEyQixpQ0FBaUMsNkJBQTZCLG9CQUFvQixPQUFPLE9BQU8sd0JBQXdCLE9BQU8sT0FBTyw0QkFBNEIsT0FBTyxPQUFPLHFEQUFxRCx1Q0FBdUMsb0NBQW9DLHVEQUF1RCxxREFBcUQsd0lBQXdJLG9EQUFvRCxlQUFlLFdBQVcsT0FBTyxvQkFBb0IsR0FBRyw2WUFBNlkscUNBQXFDLHVGQUF1Rix3TkFBd04sb0VBQW9FLHFEQUFxRCw2SEFBNkgsR0FBRyxpQkFBaUIsc0NBQXNDLGtCQUFrQixrQ0FBa0Msa0NBQWtDLGtDQUFrQyx1Q0FBdUMsbVNBQW1TLGtIQUFrSCwyRkFBMkYsR0FBRyxrQ0FBa0MsaUpBQWlKLHNCQUFzQix3RUFBd0Usc0ZBQXNGLDhCQUE4Qiw0QkFBNEIsMkJBQTJCLG1DQUFtQyxpQ0FBaUMsK0JBQStCLG9EQUFvRCxHQUFHLHVLQUF1Syw2RkFBNkYsMkZBQTJGLHFDQUFxQyxHQUFHLHlRQUF5USxxQ0FBcUMsdUZBQXVGLG9FQUFvRSx1SEFBdUgsR0FBRyxpQkFBaUIsc0NBQXNDLGtCQUFrQixrQ0FBa0Msa0NBQWtDLGtDQUFrQyx1Q0FBdUMsdU5BQXVOLGtIQUFrSCwyRkFBMkYsR0FBRyxrQ0FBa0MsaUpBQWlKLHNCQUFzQiw4SEFBOEgsc0ZBQXNGLDJCQUEyQiwyQkFBMkIsNEJBQTRCLDJCQUEyQixtQ0FBbUMsK0JBQStCLHdEQUF3RCxHQUFHLHVLQUF1Syw2RkFBNkYsMkZBQTJGLHFDQUFxQyxHQUFHLDhCQUE4QixxQkFBcUIsNkJBQTZCLEdBQUcscUJBQXFCLDZCQUE2QixHQUFHLGlDQUFpQyxpQ0FBaUMsaUNBQWlDLDJDQUEyQyxpTEFBaUwsR0FBRywwQ0FBMEMsb0NBQW9DLEdBQUcsZ0pBQWdKLG9KQUFvSixHQUFHLG9FQUFvRSx5QkFBeUIsMkJBQTJCLGlDQUFpQyw2QkFBNkIsb0JBQW9CLE9BQU8sT0FBTyx3QkFBd0IsT0FBTyxPQUFPLDRCQUE0QixPQUFPLE9BQU8scURBQXFELHVDQUF1QyxvQ0FBb0MsdURBQXVELHFEQUFxRCx3SUFBd0ksb0RBQW9ELGVBQWUsV0FBVyxPQUFPLG9CQUFvQixHQUFHLDZZQUE2WSxxQ0FBcUMsdUZBQXVGLHdOQUF3TixvRUFBb0UscURBQXFELDZIQUE2SCxHQUFHLGlCQUFpQixzQ0FBc0Msa0JBQWtCLGtDQUFrQyxrQ0FBa0Msa0NBQWtDLHVDQUF1QyxtU0FBbVMsc0NBQXNDLEdBQUcsaUNBQWlDLDhDQUE4QyxpQkFBaUIsK0JBQStCLEdBQUcsOEhBQThILHNFQUFzRSxzQkFBc0IsWUFBWSxxREFBcUQsd0JBQXdCLEVBQUUsd0JBQXdCLFlBQVksK0JBQStCLFFBQVEsZ0NBQWdDLEVBQUUsc0NBQXNDLE1BQU0sK1FBQStRLE9BQU8sdUJBQXVCLElBQUksZ0JBQWdCLHdCQUF3QixrQkFBa0IsZUFBZSxRQUFRLElBQUksWUFBWSxJQUFJLFlBQVksSUFBSSxrRUFBa0UsU0FBUyx3QkFBd0IsK0NBQStDLGNBQWMsK0JBQStCLGVBQWUsWUFBWSxLQUFLLEtBQUssb0NBQW9DLG9EQUFvRCxFQUFFLFNBQVMsbUJBQW1CLEtBQUssU0FBUyxrQkFBa0IsZUFBZSxzRUFBc0UsV0FBVyxzQkFBc0IsaUJBQWlCLFFBQVEsMENBQTBDLE9BQU8sc0JBQXNCLFVBQVUsZUFBZSx1R0FBdUcsV0FBVywwR0FBMEcsc0ZBQXNGLGloQkFBaWhCLCtDQUErQyxFQUFFLGNBQWMsMkVBQTJFLDRDQUE0Qyx3QkFBd0IsdUVBQXVFLDhCQUE4QixJQUFJLGdCQUFnQixJQUFJLDJHQUEyRyxTQUFTLFFBQVEsaUJBQWlCLFlBQVksS0FBSyxvQ0FBb0Msa0NBQWtDLHFCQUFxQixpQkFBaUIsTUFBTSxLQUFLLGVBQWUsMEJBQTBCLFNBQVMsMENBQTBDLEtBQUssWUFBWSxTQUFTLGtDQUFrQywyQ0FBMkMsK0JBQStCLDRCQUE0QixFQUFFLEVBQUUsUUFBUSxJQUFJLG1CQUFtQixJQUFJLFlBQVksS0FBSyw4QkFBOEIseUVBQXlFLHFCQUFxQix3ZEFBd2QsSUFBSSxPQUFPLDJCQUEyQixvQkFBb0Isd0JBQXdCLGtDQUFrQyxRQUFRLElBQUksa0dBQWtHLDZDQUE2QyxVQUFVLFlBQVksaUNBQWlDLCtCQUErQiw0QkFBNEIsRUFBRSxFQUFFLFFBQVEsSUFBSSxZQUFZLElBQUksWUFBWSxLQUFLLEtBQUssZUFBZSx1RUFBdUUsZ0JBQWdCLFVBQVUscUVBQXFFLDBEQUEwRCxXQUFXLE1BQU0sV0FBVyxLQUFLLGtFQUFrRSw0Q0FBNEMsV0FBVyxLQUFLLDBCQUEwQixPQUFPLGlCQUFpQixvQkFBb0IsT0FBTyw0RUFBNEUsOEJBQThCLDRIQUE0SCxHQUFHLFFBQVEsSUFBSSxLQUFLLGlKQUFpSix1Q0FBdUMsV0FBVyx5REFBeUQsd0RBQXdELHlCQUF5QixlQUFlLGdDQUFnQyxJQUFJLDhCQUE4Qiw0QkFBNEIsZUFBZSxnQ0FBZ0MsSUFBSSxvQkFBb0IsMEZBQTBGLFlBQVksRUFBRSw0QkFBNEIsd0JBQXdCLGFBQWEsNEJBQTRCLFFBQVEsbUJBQW1CLFdBQVcsa0RBQWtELG1DQUFtQyxXQUFXLG9DQUFvQyxVQUFVLEdBQUcsd0JBQXdCLGFBQWEsNk1BQTZNLGNBQWMsa0NBQWtDLGNBQWMsc0lBQXNJLGtIQUFrSCxjQUFjLHFDQUFxQywrQkFBK0IsRUFBRSxrQkFBa0Isa01BQWtNLElBQUksdUNBQXVDLGlEQUFpRCxpRkFBaUYsc0ZBQXNGLHFCQUFxQixTQUFTLE9BQU8sbUdBQW1HLHdCQUF3QixZQUFZLHNCQUFzQixtQkFBbUIsb0NBQW9DLHlFQUF5RSxZQUFZLElBQUksTUFBTSxFQUFFLG1CQUFtQix5QkFBeUIsWUFBWSxHQUFHLHNTQUFzUyxrQkFBa0IsMkVBQTJFLG9DQUFvQyx1Q0FBdUMsdUNBQXVDLHlCQUF5QiwwQ0FBMEMsTUFBTSxrREFBa0Qsb0JBQW9CLG9EQUFvRCxtQkFBbUIsb0JBQW9CLDhEQUE4RCxpQ0FBaUMsMEJBQTBCLGdCQUFnQixxQkFBcUIsNkNBQTZDLG1CQUFtQixnQkFBZ0IsT0FBTyxpQkFBaUIsZ0JBQWdCLG1CQUFtQiwrQkFBK0IsMkpBQTJKLFlBQVksV0FBVyxvQkFBb0IsK0JBQStCLFdBQVcsaUNBQWlDLE9BQU8sY0FBYyxPQUFPLHdUQUF3VCxlQUFlLHNGQUFzRixXQUFXLHNCQUFzQiw4QkFBOEIsMkJBQTJCLHFCQUFxQiw2Q0FBNkMscURBQXFELGVBQWUsV0FBVyw2RUFBNkUsMkJBQTJCLElBQUksd0RBQXdELHFCQUFxQixZQUFZLFFBQVEsK0NBQStDLFdBQVcsOExBQThMLGFBQWEsUUFBUSwwSEFBMEgsbUNBQW1DLGtDQUFrQyxxQkFBcUIsaUJBQWlCLEVBQUUsbUNBQW1DLEdBQUcsSUFBSSxjQUFjLHFIQUFxSCxnQ0FBZ0Msc0JBQXNCLDJCQUEyQixnQ0FBZ0MsMEJBQTBCLGlDQUFpQyx5QkFBeUIsMEJBQTBCLHNDQUFzQyxxQkFBcUIsNEJBQTRCLEVBQUUsaURBQWlELDREQUE0RCxTQUFTLHFCQUFxQixjQUFjLDREQUE0RCxnREFBZ0QsdUVBQXVFLCtCQUErQixxRkFBcUYsaUZBQWlGLG1EQUFtRCxnQ0FBZ0Msb0JBQW9CLGlEQUFpRCxnREFBZ0QsdUtBQXVLLGlFQUFpRSxFQUFFLDJEQUEyRCwyRkFBMkYsdURBQXVELEVBQUUsbURBQW1ELG9CQUFvQixJQUFJLGdCQUFnQiw4REFBOEQsSUFBSSxLQUFLLG9CQUFvQixrQkFBa0IsNEhBQTRILGdFQUFnRSxPQUFPLHFCQUFxQixnQkFBZ0IsaUhBQWlILG9CQUFvQiwwQ0FBMEMsaUNBQWlDLDZDQUE2Qyw4Q0FBOEMsU0FBUyx3QkFBd0IsZUFBZSx3SkFBd0osZUFBZSxxQkFBcUIsbUZBQW1GLDhCQUE4Qix1Q0FBdUMsK0JBQStCLDZDQUE2QyxrRkFBa0Ysc0NBQXNDLDhHQUE4RywyQkFBMkIsZUFBZSxpSEFBaUgsOEJBQThCLHdPQUF3TyxtQ0FBbUMsR0FBRyxxQkFBcUIsbURBQW1ELHdGQUF3RiwyQ0FBMkMsK0RBQStELHVFQUF1RSxpS0FBaUssU0FBUyw4REFBOEQsa1RBQWtULGtEQUFrRCxtREFBbUQsZ0RBQWdELG1QQUFtUCxlQUFlLG1CQUFtQix5Q0FBeUMsRUFBRSxpREFBaUQsa0RBQWtELG9EQUFvRCxnSEFBZ0gsd0RBQXdELGdCQUFnQixzQkFBc0IsNkJBQTZCLGlEQUFpRCx1RkFBdUYsZUFBZSxtQkFBbUIseUNBQXlDLEVBQUUsdURBQXVELHVGQUF1Riw2REFBNkQsRUFBRSwyREFBMkQsOEdBQThHLFlBQVksbUJBQW1CLHlDQUF5Qyx3QkFBd0IsRUFBRSxpS0FBaUssd0JBQXdCLGFBQWEscURBQXFELHdCQUF3QixpRUFBaUUsU0FBUyxRQUFRLEtBQUssS0FBSyxLQUFLLFdBQVcsd0JBQXdCLGlCQUFpQixhQUFhLDhCQUE4Qiw0REFBNEQsRUFBRSxXQUFXLDZCQUE2Qix5QkFBeUIsRUFBRSw4QkFBOEIsa0NBQWtDLGlCQUFpQiwyRkFBMkYsa0JBQWtCLHdCQUF3QixhQUFhLHNDQUFzQyxtSkFBbUosU0FBUywyQ0FBMkMsbUJBQW1CLHlCQUF5QixxQkFBcUIsMkJBQTJCLHlCQUF5QixjQUFjLGtDQUFrQyxrQkFBa0Isa0NBQWtDLDhCQUE4QixrQkFBa0IscUJBQXFCLDBCQUEwQixpQkFBaUIscUNBQXFDLFlBQVksbUJBQW1CLHVCQUF1QixzQkFBc0IsZ0VBQWdFLDRCQUE0QixrQkFBa0IsV0FBVyxJQUFJLEVBQUUsZ0RBQWdELHdCQUF3QixhQUFhLCtPQUErTyxnREFBZ0QsRUFBRSxXQUFXLFFBQVEscUNBQXFDLFNBQVMsd0NBQXdDLFNBQVMsd0NBQXdDLFNBQVMscUNBQXFDLFNBQVMsUUFBUSxxQ0FBcUMsT0FBTyxPQUFPLCtEQUErRCxRQUFRLDBEQUEwRCxpQkFBaUIsaUJBQWlCLE9BQU8scUNBQXFDLFlBQVkscURBQXFELGFBQWEseUNBQXlDLFdBQVcsNEZBQTRGLGVBQWUsY0FBYyxnREFBZ0Qsb0JBQW9CLEVBQUUsZ0RBQWdELGdCQUFnQixzR0FBc0csY0FBYyxLQUFLLHFCQUFxQixLQUFLLHNCQUFzQixLQUFLLFNBQVMsTUFBTSx5Q0FBeUMsVUFBVSxLQUFLLFlBQVksK0lBQStJLGlCQUFpQixXQUFXLG9DQUFvQyxRQUFRLG9EQUFvRCxPQUFPLDBDQUEwQyxZQUFZLHFHQUFxRyxXQUFXLHlEQUF5RCxPQUFPLCtEQUErRCxjQUFjLE9BQU8seUNBQXlDLGVBQWUsS0FBSyxpQkFBaUIsa0pBQWtKLEVBQUUsME1BQTBNLHdCQUF3QixhQUFhLHdFQUF3RSxnQ0FBZ0MsOENBQThDLFlBQVksMkJBQTJCLG9EQUFvRCxrREFBa0QsRUFBRSxnREFBZ0Qsd0JBQXdCLGFBQWEscUlBQXFJLGNBQWMscUJBQXFCLHNGQUFzRixnQkFBZ0IsaUNBQWlDLE9BQU8sb0JBQW9CLFdBQVcsOENBQThDLFFBQVEsV0FBVyw2Q0FBNkMsT0FBTyxTQUFTLFdBQVcsbUJBQW1CLG9HQUFvRywwQkFBMEIsMENBQTBDLFdBQVcscUNBQXFDLHlDQUF5QyxRQUFRLElBQUksS0FBSyxNQUFNLHlCQUF5QixxQkFBcUIsU0FBUyxpQ0FBaUMscUJBQXFCLGdFQUFnRSxpREFBaUQsMEZBQTBGLGdDQUFnQyxlQUFlLHlEQUF5RCxrS0FBa0ssUUFBUSxXQUFXLEtBQUssOEJBQThCLHFDQUFxQyxhQUFhLGlHQUFpRyxTQUFTLDRCQUE0QixrRUFBa0UsOEJBQThCLGdCQUFnQixXQUFXLEtBQUssV0FBVyx1Q0FBdUMsV0FBVyxLQUFLLFdBQVcsdUZBQXVGLDZDQUE2QyxFQUFFLGtHQUFrRyx3QkFBd0IsYUFBYSw0RUFBNEUsNEJBQTRCLGdCQUFnQiwyQkFBMkIsNEVBQTRFLHdHQUF3Ryw4RkFBOEYsMEVBQTBFLG9EQUFvRCw0RkFBNEYsU0FBUyw2QkFBNkIsTUFBTSxxQkFBcUIsSUFBSSx3RUFBd0UsNkJBQTZCLFNBQVMsZ0JBQWdCLG9CQUFvQix5REFBeUQsaUZBQWlGLGlEQUFpRCxtQkFBbUIsRUFBRSw2REFBNkQsd0JBQXdCLGFBQWEsbUVBQW1FLHdCQUF3QixPQUFPLDJJQUEySSxzRUFBc0UsRUFBRSxrQ0FBa0Msd0JBQXdCLGFBQWEscUJBQXFCLGlDQUFpQyw2QkFBNkIsa0ZBQWtGLGdDQUFnQyx3QkFBd0IsOEVBQThFLGdDQUFnQyxnQ0FBZ0MsV0FBVyxLQUFLLGNBQWMsc0JBQXNCLDRCQUE0Qix5REFBeUQsRUFBRSxnQkFBZ0Isd0JBQXdCLGFBQWEsU0FBUywwSkFBMEosa0JBQWtCLHdPQUF3TyxhQUFhLEVBQUUsMktBQTJLLHdCQUF3QixhQUFhLFdBQVcsY0FBYyxxQ0FBcUMsY0FBYyxvQ0FBb0Msa0JBQWtCLDRDQUE0QyxHQUFHLHdCQUF3QixhQUFhLGdEQUFnRCx3QkFBd0IsZ0JBQWdCLDJCQUEyQixvRUFBb0UsRUFBRSwyQ0FBMkMsd0JBQXdCLGFBQWEsNkxBQTZMLGtCQUFrQixtQ0FBbUMscUhBQXFILDJDQUEyQyxtQ0FBbUMsa0JBQWtCLHlDQUF5QyxvREFBb0Qsa0dBQWtHLGlGQUFpRix5SEFBeUgsYUFBYSxhQUFhLDZOQUE2Tiw0QkFBNEIsYUFBYSxraEJBQWtoQixFQUFFLG1FQUFtRSxzQkFBc0IsMkNBQTJDLDhCQUE4QixHQUFHLDhCQUE4QixvRUFBb0Usb0VBQW9FLDhCQUE4QixtR0FBbUcsMkJBQTJCLDJDQUEyQywwRUFBMEUsRUFBRSxrQkFBa0IsNkhBQTZILG9DQUFvQyx1QkFBdUIsNEZBQTRGLDBGQUEwRiwrRkFBK0YseUZBQXlGLHVCQUF1QixzQ0FBc0MsZ0JBQWdCLHVGQUF1RixnQkFBZ0IsdURBQXVELGtDQUFrQyxzRkFBc0YsZ0JBQWdCLGtEQUFrRCx1Q0FBdUMsY0FBYyxlQUFlLGdDQUFnQyxnQkFBZ0IsK0JBQStCLFNBQVMsV0FBVyxtQkFBbUIsb0JBQW9CLGVBQWUsZ0NBQWdDLFdBQVcseUNBQXlDLDRDQUE0QyxZQUFZLGdKQUFnSixZQUFZLDhCQUE4QixhQUFhLG9CQUFvQiwyQkFBMkIsUUFBUSxXQUFXLHNaQUFzWixRQUFRLFdBQVcsS0FBSyxxQkFBcUIsV0FBVyx1RUFBdUUsUUFBUSxXQUFXLG1FQUFtRSxZQUFZLGdFQUFnRSxzQ0FBc0MsYUFBYSx5RkFBeUYscUNBQXFDLFFBQVEsd0JBQXdCLEtBQUssdUJBQXVCLGtDQUFrQyxjQUFjLHlDQUF5QyxlQUFlLFdBQVcsNE1BQTRNLHdEQUF3RCxrREFBa0QsNERBQTRELDZCQUE2QixtQkFBbUIsd0RBQXdELEtBQUssc0ZBQXNGLDJFQUEyRSx5REFBeUQsdUJBQXVCLHdCQUF3QixxQ0FBcUMsdUNBQXVDLHdCQUF3QixhQUFhLG1CQUFtQix3RkFBd0Ysb0hBQW9ILEtBQUssMEJBQTBCLE1BQU0sVUFBVSwwR0FBMEcsNkRBQTZELHNHQUFzRyxrRkFBa0YsMERBQTBELHVCQUF1QixFQUFFLHFCQUFxQixzREFBc0QsNENBQTRDLDJSQUEyUixPQUFPLHlCQUF5Qix5Q0FBeUMsaURBQWlELHVFQUF1RSw0TEFBNEwsT0FBTyw4Q0FBOEMsb0RBQW9ELHlCQUF5QixnT0FBZ08sd0VBQXdFLHFTQUFxUyxFQUFFLG9CQUFvQiw0RkFBNEYsRUFBRSx3RUFBd0Usa0ZBQWtGLDREQUE0RCx1QkFBdUIsMENBQTBDLFlBQVksZUFBZSxnQkFBZ0Isc0RBQXNELHVHQUF1Ryx1RkFBdUYsT0FBTywrRkFBK0Ysa0JBQWtCLDZCQUE2QixjQUFjLElBQUksV0FBVyxpaUJBQWlpQixpREFBaUQsZ0lBQWdJLG1CQUFtQiw4QkFBOEIsZ0JBQWdCLDZCQUE2QixnQkFBZ0IsNkJBQTZCLGdCQUFnQixRQUFRLEVBQUUsMkpBQTJKLDBEQUEwRCxXQUFXLG1XQUFtVyxRQUFRLElBQUksbURBQW1ELElBQUksS0FBSywwRkFBMEYsV0FBVywwQ0FBMEMsYUFBYSxjQUFjLGdDQUFnQyxPQUFPLE1BQU0sUUFBUSxXQUFXLEtBQUssZ0JBQWdCLHlCQUF5QixvQkFBb0IsbUJBQW1CLHFCQUFxQixpQ0FBaUMsbUNBQW1DLHlGQUF5RixrSEFBa0gsa0JBQWtCLDZGQUE2RixnSUFBZ0ksOENBQThDLGlGQUFpRixvRUFBb0UsRUFBRSx3Q0FBd0MsRUFBRSxNQUFNLEVBQUUsRUFBRSxzQkFBc0IscUNBQXFDLHFCQUFxQix3Q0FBd0MsRUFBRSxJQUFJLHdCQUF3QixFQUFFLGlMQUFpTCx3QkFBd0IsYUFBYSxpQ0FBaUMsc0JBQXNCLDZEQUE2RCxrQ0FBa0MsU0FBUyxrQkFBa0IsK0NBQStDLDJCQUEyQixFQUFFLEdBQUcsRUFBRSwwQkFBMEIsd0JBQXdCLGFBQWEsOERBQThELDBCQUEwQiw0RUFBNEUsaUVBQWlFLEVBQUUsOENBQThDLHdCQUF3QixhQUFhLGlDQUFpQyxXQUFXLGdCQUFnQixxQ0FBcUMsVUFBVSxxQ0FBcUMsVUFBVSxxQ0FBcUMsVUFBVSxxQ0FBcUMscUJBQXFCLE9BQU8sMkNBQTJDLFVBQVUsK0RBQStELFFBQVEsNENBQTRDLFVBQVUsc0RBQXNELFVBQVUsZ0RBQWdELFNBQVMsT0FBTywyQ0FBMkMsWUFBWSxvREFBb0QsaUJBQWlCLGlCQUFpQixvQkFBb0IsRUFBRSw2QkFBNkIsd0JBQXdCLGFBQWEsK0lBQStJLGdCQUFnQiw2UUFBNlEsK0hBQStILGdGQUFnRixrQkFBa0IseUJBQXlCLGdDQUFnQyxPQUFPLG1TQUFtUyxzQkFBc0IsMEpBQTBKLEVBQUUsMEJBQTBCLHdKQUF3SixNQUFNLGdHQUFnRyxhQUFhLElBQUksNEZBQTRGLFNBQVMsaUNBQWlDLElBQUksV0FBVyxvRUFBb0UsSUFBSSxpSEFBaUgsdUZBQXVGLGdGQUFnRix1Q0FBdUMscUJBQXFCLGFBQWEsNkJBQTZCLDRFQUE0RSxxRUFBcUUsNEtBQTRLLG9EQUFvRCxvQ0FBb0MsT0FBTyxzQ0FBc0MsT0FBTyxFQUFFLHNCQUFzQiwwQkFBMEIseUJBQXlCLHFCQUFxQixzQkFBc0IsRUFBRSwySEFBMkgsd0JBQXdCLGFBQWEseUNBQXlDLDBCQUEwQixnQkFBZ0IsMkJBQTJCLDhVQUE4VSxFQUFFLG9DQUFvQyx3QkFBd0IsYUFBYSxTQUFTLHFQQUFxUCxhQUFhLEVBQUUsdUdBQXVHLHdCQUF3QixhQUFhLDhaQUE4WixjQUFjLGNBQWMsY0FBYyxvQkFBb0Isb0NBQW9DLHVCQUF1QixlQUFlLCtDQUErQyxjQUFjLDRCQUE0QixjQUFjLHlCQUF5QixjQUFjLG9GQUFvRixjQUFjLFFBQVEsT0FBTyw2QkFBNkIsU0FBUyxtQ0FBbUMsVUFBVSwyQ0FBMkMsa0NBQWtDLElBQUksNkJBQTZCLElBQUksNkJBQTZCLFFBQVEsMkJBQTJCLE9BQU8sT0FBTyw4Q0FBOEMsUUFBUSwyQ0FBMkMsTUFBTSwwQ0FBMEMsWUFBWSwwQ0FBMEMsWUFBWSw2REFBNkQsMkNBQTJDLEVBQUUsdUJBQXVCLEVBQUUsT0FBTyxPQUFPLDZCQUE2QixRQUFRLDJCQUEyQixPQUFPLE9BQU8sOENBQThDLFFBQVEsMENBQTBDLFNBQVMsNkJBQTZCLFNBQVMsNkJBQTZCLFFBQVEsNkJBQTZCLFlBQVksNkRBQTZELDJDQUEyQyxFQUFFLHVCQUF1Qix1Q0FBdUMsdUJBQXVCLHlDQUF5QyxPQUFPLHdDQUF3QyxPQUFPLHdDQUF3Qyw4QkFBOEIsK0JBQStCLEVBQUUsR0FBRyxxQ0FBcUMsRUFBRSwrVkFBK1Ysd0JBQXdCLGFBQWEsK1NBQStTLGdCQUFnQixzR0FBc0csMEJBQTBCLE9BQU8sT0FBTyw0RUFBNEUsSUFBSSw2RUFBNkUsSUFBSSxnQ0FBZ0MsMkNBQTJDLDJEQUEyRCxvREFBb0QsY0FBYyxvQ0FBb0MsV0FBVyx3Q0FBd0MsWUFBWSxXQUFXLEtBQUssMEJBQTBCLGlCQUFpQixZQUFZLHlCQUF5QiwyQ0FBMkMsa0NBQWtDLDJCQUEyQix3REFBd0Qsa0JBQWtCLElBQUksd0JBQXdCLGVBQWUsV0FBVyw2Q0FBNkMsd0JBQXdCLHFDQUFxQyxnQ0FBZ0MscUJBQXFCLDJCQUEyQiwwREFBMEQsK0ZBQStGLHdCQUF3QixZQUFZLHFCQUFxQixZQUFZLEVBQUUsMFBBQTBQLHdCQUF3QixhQUFhLDJKQUEySixjQUFjLDhDQUE4QyxLQUFLLHdCQUF3QixRQUFRLElBQUksS0FBSywyQ0FBMkMsWUFBWSw0QkFBNEIsYUFBYSxRQUFRLFFBQVEsaUJBQWlCLGtFQUFrRSxZQUFZLGdCQUFnQix5QkFBeUIsUUFBUSxXQUFXLEtBQUssV0FBVyxRQUFRLFdBQVcsS0FBSyxpQkFBaUIsNkVBQTZFLE9BQU8scUJBQXFCLFFBQVEsaUJBQWlCLEtBQUssNkNBQTZDLG1GQUFtRixpRkFBaUYsU0FBUyxvQ0FBb0MsV0FBVyx5Q0FBeUMsaUdBQWlHLHFDQUFxQyxtQ0FBbUMsUUFBUSxJQUFJLGFBQWEsaUJBQWlCLFFBQVEsOEVBQThFLEVBQUUsU0FBUyx1QkFBdUIsaUNBQWlDLDhCQUE4Qiw2Q0FBNkMsd0JBQXdCLG1CQUFtQix3Q0FBd0Msa0JBQWtCLEVBQUUsK0JBQStCLG1EQUFtRCx3QkFBd0IsV0FBVyxVQUFVLDhGQUE4RixHQUFHLEVBQUUsMEdBQTBHLHdCQUF3QixhQUFhLFdBQVcsZ0tBQWdLLDZTQUE2UyxHQUFHLHdCQUF3QixhQUFhLDJQQUEyUCxnQkFBZ0IsZ0JBQWdCLDRDQUE0QywrQ0FBK0MsNEJBQTRCLGdCQUFnQiwyQkFBMkIsa0ZBQWtGLGdCQUFnQixnQ0FBZ0Msc0pBQXNKLGlCQUFpQixvQ0FBb0MsZ0NBQWdDLHFCQUFxQixRQUFRLEdBQUcsZ0JBQWdCLDRCQUE0QixnQkFBZ0IsZ0NBQWdDLHVJQUF1SSwrRkFBK0YsNkNBQTZDLHdDQUF3QyxpS0FBaUssMEJBQTBCLEVBQUUscU9BQXFPLHdCQUF3QixhQUFhLFNBQVMsaVBBQWlQLGFBQWEsRUFBRSx3R0FBd0csd0JBQXdCLGFBQWEsb0lBQW9JLGNBQWMsYUFBYSxnQkFBZ0IsNEJBQTRCLHlCQUF5QixFQUFFLGdCQUFnQixzR0FBc0csY0FBYyxzREFBc0QsY0FBYyxtQkFBbUIsd0ZBQXdGLGNBQWMsbUJBQW1CLHdGQUF3RixrQkFBa0IsNkVBQTZFLGtCQUFrQiw2RUFBNkUsb0JBQW9CLDJCQUEyQixtQ0FBbUMsdUNBQXVDLDJEQUEyRCx3QkFBd0IsbUNBQW1DLHVDQUF1Qyw2REFBNkQsb0JBQW9CLDJCQUEyQixtQ0FBbUMsd0JBQXdCLDJEQUEyRCx3QkFBd0IsbUNBQW1DLHdCQUF3Qix5REFBeUQsZ0JBQWdCLHNCQUFzQiwrQkFBK0IsMkJBQTJCLHdCQUF3QixpREFBaUQsV0FBVyxxQ0FBcUMsMEJBQTBCLDZCQUE2QixNQUFNLHNEQUFzRCw4SUFBOEksU0FBUyw2QkFBNkIseUJBQXlCLEVBQUUsWUFBWSxzQkFBc0IsNkpBQTZKLDhCQUE4QixJQUFJLHNCQUFzQixpQ0FBaUMsd0JBQXdCLCtDQUErQyxxQkFBcUIsc0JBQXNCLEtBQUssc0JBQXNCLDRFQUE0RSxpRkFBaUYsY0FBYywyREFBMkQsUUFBUSxtZkFBbWYsR0FBRyxpQkFBaUIsaUZBQWlGLGtCQUFrQiwrQ0FBK0MsR0FBRyxjQUFjLFFBQVEsZ1JBQWdSLHlCQUF5QiwrSkFBK0osOEJBQThCLHdDQUF3QyxzQkFBc0IsYUFBYSxvREFBb0QsVUFBVSxHQUFHLGFBQWEsc0JBQXNCLGtKQUFrSiw4QkFBOEIsSUFBSSxzQkFBc0IsaUNBQWlDLHdCQUF3QiwrQ0FBK0Msc01BQXNNLGdFQUFnRSw2QkFBNkIsbUJBQW1CLCtjQUErYyxFQUFFLG1FQUFtRSxFQUFFLGdCQUFnQix5QkFBeUIsb0pBQW9KLDhCQUE4Qix3Q0FBd0Msd0JBQXdCLGFBQWEsNEVBQTRFLFVBQVUsSUFBSSxHQUFHLEVBQUUsaUhBQWlILHdCQUF3QixhQUFhLHlUQUF5VCxhQUFhLFNBQVMsbUJBQW1CLG1oR0FBbWhHLHFMQUFxTCwyR0FBMkcsY0FBYywrQkFBK0Isc0VBQXNFLEVBQUUsY0FBYyxVQUFVLGdCQUFnQiwwQkFBMEIsY0FBYywyQkFBMkIsMkJBQTJCLDRCQUE0Qix1QkFBdUIsRUFBRSxjQUFjLHlDQUF5QyxjQUFjLGdIQUFnSCxjQUFjLCtFQUErRSxjQUFjLDhPQUE4TyxjQUFjLGdFQUFnRSxjQUFjLCtDQUErQyxjQUFjLHVFQUF1RSxjQUFjLHdDQUF3QyxrQkFBa0IscURBQXFELDBHQUEwRyxtQ0FBbUMseUdBQXlHLGtDQUFrQyxzR0FBc0csK0JBQStCLHFKQUFxSixFQUFFLG9CQUFvQiwyQ0FBMkMsT0FBTyw0REFBNEQsNkJBQTZCLGlHQUFpRywyQkFBMkIsc05BQXNOLDBCQUEwQiwrREFBK0QsYUFBYSxZQUFZLFdBQVcsMERBQTBELGdCQUFnQix1Q0FBdUMsc0NBQXNDLHFCQUFxQixxQkFBcUIsRUFBRSx5R0FBeUcsMEJBQTBCLGlGQUFpRixrQkFBa0IsZ0JBQWdCLFdBQVcsS0FBSyxXQUFXLHlOQUF5TixtR0FBbUcsa0JBQWtCLDRCQUE0QiwwQ0FBMEMsTUFBTSxRQUFRLHVCQUF1Qiw2QkFBNkIsb0JBQW9CLGVBQWUsWUFBWSxXQUFXLHNHQUFzRyw2R0FBNkcsS0FBSyx1QkFBdUIsa0VBQWtFLEVBQUUsYUFBYSx3QkFBd0IsNEJBQTRCLDRCQUE0QiwwYUFBMGEsMkJBQTJCLDRCQUE0QixxQ0FBcUMsWUFBWSw4QkFBOEIsMEVBQTBFLGdDQUFnQyxFQUFFLDJCQUEyQixnQkFBZ0Isc0JBQXNCLHVCQUF1QixLQUFLLGdHQUFnRyxtREFBbUQsd0JBQXdCLDBCQUEwQixnQ0FBZ0MsNERBQTRELEVBQUUsY0FBYyxzREFBc0QsY0FBYyxtQkFBbUIsNENBQTRDLDhCQUE4QixTQUFTLHNFQUFzRSxLQUFLLEVBQUUsc0RBQXNELDBCQUEwQixzQkFBc0IsZ0xBQWdMLHlKQUF5SixxQkFBcUIsb0JBQW9CLGdCQUFnQixnSUFBZ0ksb0NBQW9DLFFBQVEsaUJBQWlCLG1DQUFtQyxhQUFhLE1BQU0sTUFBTSxPQUFPLHNHQUFzRywrQ0FBK0MsY0FBYyxRQUFRLGlCQUFpQixLQUFLLDBCQUEwQixRQUFRLHVCQUF1QixtSEFBbUgscUJBQXFCLFFBQVEsV0FBVyxLQUFLLHlCQUF5QixRQUFRLFdBQVcscUVBQXFFLFFBQVEsV0FBVyxtQkFBbUIsd0VBQXdFLG9GQUFvRixRQUFRLFFBQVEsdUJBQXVCLDhCQUE4QixRQUFRLHVCQUF1QixvREFBb0QsUUFBUSxRQUFRLHVCQUF1Qiw4QkFBOEIsUUFBUSx1QkFBdUIsbURBQW1ELHFDQUFxQyxRQUFRLDJEQUEyRCxpQ0FBaUMsb0NBQW9DLDhDQUE4QyxrQ0FBa0MsOENBQThDLG9DQUFvQyxzQkFBc0IseUJBQXlCLHlCQUF5QixpQkFBaUIsTUFBTSxJQUFJLGdFQUFnRSxFQUFFLGFBQWEsOEJBQThCLE9BQU8saUJBQWlCLHFCQUFxQixpQkFBaUIsbUJBQW1CLFFBQVEsV0FBVyxLQUFLLG9CQUFvQixxRkFBcUYsU0FBUyx5QkFBeUIsT0FBTyw0ZEFBNGQsbUJBQW1CLCtCQUErQix3REFBd0QscVFBQXFRLHlCQUF5QixvQ0FBb0MsdVFBQXVRLG9DQUFvQyxFQUFFLHVFQUF1RSxrREFBa0Qsd0VBQXdFLHdEQUF3RCx3Q0FBd0MsZUFBZSxzQkFBc0IsNERBQTRELG9EQUFvRCxvVUFBb1UsZUFBZSxJQUFJLHlHQUF5Ryx5REFBeUQscUNBQXFDLHdEQUF3RCwyQkFBMkIsc0JBQXNCLG1DQUFtQyx3QkFBd0IsbUNBQW1DLDhCQUE4Qiw2Q0FBNkMsdUNBQXVDLHdKQUF3SixvREFBb0Qsa0ZBQWtGLHNCQUFzQiw0QkFBNEIsc0NBQXNDLHNCQUFzQixFQUFFLHdEQUF3RCxvQkFBb0IsbUJBQW1CLFdBQVcsUUFBUSxXQUFXLGlJQUFpSSx5QkFBeUIsV0FBVyxNQUFNLFdBQVcsOEdBQThHLHdCQUF3QixpREFBaUQsOEJBQThCLHVEQUF1RCw2RUFBNkUsd3ZCQUF3dkIsZUFBZSxJQUFJLHNGQUFzRixvREFBb0QsOEhBQThILHlCQUF5QixzRkFBc0YsNkNBQTZDLDhGQUE4Rix1QkFBdUIsNkJBQTZCLHFDQUFxQyxxQ0FBcUMsa0NBQWtDLDJCQUEyQixzQkFBc0IsbUNBQW1DLHdCQUF3QiwyREFBMkQsZ0RBQWdELHFHQUFxRyxlQUFlLHVCQUF1QixlQUFlLDJCQUEyQixtQkFBbUIsNEJBQTRCLG9CQUFvQixFQUFFLGlEQUFpRCw2SUFBNkksbURBQW1ELCtFQUErRSwrQkFBK0IsbUhBQW1ILDhDQUE4QyxzTEFBc0wsd0dBQXdHLG1CQUFtQixxQkFBcUIsdUVBQXVFLHNEQUFzRCxrSUFBa0ksa0NBQWtDLDJEQUEyRCxpREFBaUQsaUNBQWlDLDBDQUEwQywwRkFBMEYsRUFBRSxrUEFBa1Asd0JBQXdCLGFBQWEsd0JBQXdCLHlEQUF5RCxXQUFXLEtBQUssV0FBVyxtQkFBbUIsb0NBQW9DLGtFQUFrRSwwQkFBMEIsR0FBRyxVQUFVLEdBQUcsd0JBQXdCLGFBQWEscUJBQXFCLHdCQUF3QixZQUFZLFdBQVcsYUFBYSxzUUFBc1EsZUFBZSxNQUFNLHNIQUFzSCxhQUFhLHNFQUFzRSxpQkFBaUIsbUZBQW1GLEVBQUUsZ0JBQWdCLHdCQUF3QixhQUFhLDJUQUEyVCxXQUFXLEdBQUcsNERBQTRELEtBQUssNERBQTRELEtBQUssZ0RBQWdELElBQUksNERBQTRELEtBQUssNERBQTRELEtBQUssZ0RBQWdELGFBQWEseUNBQXlDLGNBQWMsc0RBQXNELFlBQVksOEVBQThFLFlBQVksMkZBQTJGLE9BQU8sb0RBQW9ELFlBQVkscURBQXFELE9BQU8sb0ZBQW9GLFVBQVUsNkRBQTZELG1CQUFtQixFQUFFLHFCQUFxQixRQUFRLE9BQU8seUNBQXlDLFFBQVEsdURBQXVELFFBQVEsb0dBQW9HLFlBQVksc0RBQXNELFVBQVUsSUFBSSxpQkFBaUIsWUFBWSwwQ0FBMEMsaUJBQWlCLGNBQWMsMENBQTBDLGFBQWEsMENBQTBDLE9BQU8sK0dBQStHLFlBQVkseUNBQXlDLFdBQVcsUUFBUSxtRkFBbUYsVUFBVSxpRUFBaUUsT0FBTyxpRUFBaUUsZUFBZSw4Q0FBOEMsVUFBVSx3Q0FBd0MsVUFBVSw4Q0FBOEMsV0FBVyxnRkFBZ0Ysb0JBQW9CLE9BQU8sMkRBQTJELGlCQUFpQixrQkFBa0IsUUFBUSxhQUFhLE1BQU0sNkdBQTZHLFFBQVEsMkNBQTJDLGlCQUFpQixpQkFBaUIsYUFBYSxRQUFRLGFBQWEsUUFBUSxTQUFTLDhDQUE4QyxRQUFRLGlDQUFpQyxPQUFPLHdDQUF3QyxrQkFBa0IsV0FBVyxPQUFPLGlDQUFpQyxrQkFBa0Isa0JBQWtCLGFBQWEsUUFBUSxTQUFTLDhDQUE4QyxRQUFRLGlDQUFpQyxPQUFPLHdDQUF3QyxrQkFBa0IsV0FBVyxPQUFPLGlDQUFpQyxrQkFBa0Isa0JBQWtCLGVBQWUsNE1BQTRNLGFBQWEsaURBQWlELEtBQUsscUNBQXFDLElBQUksdUNBQXVDLEVBQUUsZ1NBQWdTLHdCQUF3QixhQUFhLG9OQUFvTiwwQkFBMEIsaUdBQWlHLHVCQUF1Qiw0QkFBNEIsT0FBTyxVQUFVLElBQUksV0FBVyxxQkFBcUIsd0NBQXdDLDBFQUEwRSw2UkFBNlIsZ0JBQWdCLG9CQUFvQiw2Q0FBNkMsNENBQTRDLHVDQUF1QyxhQUFhLDRCQUE0QixnQ0FBZ0MsT0FBTyxlQUFlLGdCQUFnQiw2REFBNkQsSUFBSSxpQkFBaUIsU0FBUyxrQkFBa0IsZ0JBQWdCLDZCQUE2QixtQkFBbUIsY0FBYyxtQkFBbUIsMkNBQTJDLG9CQUFvQixtQkFBbUIsTUFBTSxvRUFBb0Usa0RBQWtELFdBQVcsbUJBQW1CLGlNQUFpTSxPQUFPLGtCQUFrQixrS0FBa0ssSUFBSSxLQUFLLGFBQWEscUJBQXFCLDBIQUEwSCwyQkFBMkIsUUFBUSxXQUFXLCtCQUErQiwwQkFBMEIsMEJBQTBCLEtBQUssUUFBUSx1QkFBdUIsS0FBSyxpQ0FBaUMsSUFBSSxhQUFhLGlCQUFpQixjQUFjLEtBQUssMEJBQTBCLElBQUksYUFBYSxLQUFLLElBQUksZ0JBQWdCLFVBQVUsU0FBUyxLQUFLLHdEQUF3RCxJQUFJLDhCQUE4QixTQUFTLHdFQUF3RSxFQUFFLHFNQUFxTSx3QkFBd0IsYUFBYSxxQkFBcUIsd0JBQXdCLDZEQUE2RCxFQUFFLGdCQUFnQix3QkFBd0IsYUFBYSx1SEFBdUgsd0JBQXdCLG1DQUFtQyxrREFBa0QsMENBQTBDLHNEQUFzRCw2QkFBNkIsZ0VBQWdFLElBQUksRUFBRSxtR0FBbUcsd0JBQXdCLGFBQWEsV0FBVyx3RkFBd0YsR0FBRyx3QkFBd0IsYUFBYSxrQkFBa0IsMEJBQTBCLFFBQVEsT0FBTyxtQkFBbUIsNENBQTRDLGFBQWEsNEJBQTRCLCtCQUErQixzQkFBc0Isc0RBQXNELFdBQVcseUVBQXlFLHdCQUF3QiwyRUFBMkUsTUFBTSwrQ0FBK0MsZ0JBQWdCLDRCQUE0QixhQUFhLDBIQUEwSCxXQUFXLFlBQVksVUFBVSwwQkFBMEIsUUFBUSxXQUFXLGlCQUFpQixRQUFRLFdBQVcsS0FBSyxvQkFBb0IsV0FBVyxLQUFLLGNBQWMsbUJBQW1CLDRCQUE0QixhQUFhLFFBQVEsSUFBSSwyQkFBMkIsZ0JBQWdCLElBQUksS0FBSyxXQUFXLDRCQUE0QixlQUFlLFFBQVEsV0FBVyxLQUFLLHlCQUF5QixXQUFXLGdHQUFnRywyQ0FBMkMsV0FBVyxLQUFLLGlCQUFpQix1QkFBdUIsUUFBUSxXQUFXLEtBQUssaUZBQWlGLGVBQWUsUUFBUSx1QkFBdUIsSUFBSSxrQ0FBa0Msa0NBQWtDLFFBQVEsSUFBSSw0QkFBNEIseUVBQXlFLEVBQUUsY0FBYyx3QkFBd0IsYUFBYSxzQkFBc0IsWUFBWSxXQUFXLEtBQUssV0FBVyx1QkFBdUIsYUFBYSwyRkFBMkYsS0FBSyxLQUFLLFdBQVcsNkRBQTZELGlCQUFpQixXQUFXLEdBQUcsd0JBQXdCLGFBQWEsaVJBQWlSLDRCQUE0QixnQkFBZ0IsMkJBQTJCLGlCQUFpQixnQ0FBZ0MsaUVBQWlFLDhJQUE4SSxZQUFZLDJCQUEyQixTQUFTLGlMQUFpTCxpQkFBaUIsdUJBQXVCLFFBQVEsaUlBQWlJLHlEQUF5RCxlQUFlLFNBQVMsaUJBQWlCLHFCQUFxQix3Q0FBd0MsRUFBRSwyUUFBMlEsd0JBQXdCLGFBQWEscUJBQXFCLGNBQWMsZ0JBQWdCLDBCQUEwQixtQ0FBbUMsVUFBVSxhQUFhLFNBQVMsMENBQTBDLG9CQUFvQix1Q0FBdUMseUJBQXlCLEVBQUUsZ0JBQWdCLHdCQUF3QixhQUFhLHVFQUF1RSw0QkFBNEIsU0FBUyxhQUFhLHlDQUF5QyxRQUFRLDZCQUE2QixzQ0FBc0Msb0JBQW9CLEVBQUUsNkNBQTZDLHdCQUF3QixhQUFhLG9EQUFvRCx3QkFBd0IsUUFBUSx1RUFBdUUsZ0RBQWdELDBCQUEwQixnQ0FBZ0MsVUFBVSxRQUFRLGtFQUFrRSxVQUFVLGtFQUFrRSxtRUFBbUUsRUFBRSwrQ0FBK0Msd0JBQXdCLGFBQWEsc0pBQXNKLDRCQUE0QiwwSEFBMEgsNkJBQTZCLGtCQUFrQix5REFBeUQsNENBQTRDLHVDQUF1Qyw0REFBNEQsdUJBQXVCLGFBQWEsNERBQTRELHVCQUF1QixJQUFJLHFDQUFxQyw0REFBNEQsWUFBWSw2RUFBNkUsdUJBQXVCLGtIQUFrSCxxRUFBcUUseUNBQXlDLHdFQUF3RSxRQUFRLFdBQVcscUZBQXFGLE1BQU0sc0RBQXNELFFBQVEsV0FBVyx1QkFBdUIsV0FBVywwSEFBMEgsd0NBQXdDLG9CQUFvQixpRUFBaUUsMkNBQTJDLHlFQUF5RSwyRkFBMkYsRUFBRSw4SUFBOEksd0JBQXdCLGFBQWEsUUFBUSxtQkFBbUIsd3JCQUF3ckIsYUFBYSxFQUFFLDJRQUEyUSx3QkFBd0IsYUFBYSw4SUFBOEksZ0NBQWdDLG1CQUFtQixRQUFRLDJDQUEyQywyQkFBMkIsOEJBQThCLHNCQUFzQiwwQkFBMEIsRUFBRSxxR0FBcUcsd0JBQXdCLGFBQWEsbUpBQW1KLHdCQUF3QiwrUEFBK1AsY0FBYyxXQUFXLGVBQWUsOEJBQThCLFVBQVUsdUNBQXVDLDBFQUEwRSxVQUFVLHVDQUF1QyxPQUFPLFlBQVksb0JBQW9CLGtEQUFrRCxhQUFhLGNBQWMsbUJBQW1CLGdCQUFnQixrREFBa0Qsb0dBQW9HLGdCQUFnQiw0QkFBNEIsMEJBQTBCLDZJQUE2SSxlQUFlLDBFQUEwRSxpQkFBaUIsMEZBQTBGLG1CQUFtQixxQkFBcUIseUJBQXlCLDBCQUEwQiwwQkFBMEIsNkRBQTZELDBDQUEwQyxVQUFVLGVBQWUsa0RBQWtELGtCQUFrQixvQ0FBb0MscUZBQXFGLGNBQWMsZUFBZSxpRUFBaUUsZUFBZSwrRUFBK0UsV0FBVyxhQUFhLG1DQUFtQywrQkFBK0IsOEJBQThCLGFBQWEsa09BQWtPLCtCQUErQixZQUFZLCtDQUErQyxxQkFBcUIsSUFBSSxLQUFLLHlEQUF5RCx3SEFBd0gsU0FBUyxvQ0FBb0MseUJBQXlCLHFEQUFxRCx3REFBd0QsSUFBSSxlQUFlLHlCQUF5QixJQUFJLEtBQUssY0FBYyxjQUFjLE1BQU0sa0JBQWtCLGNBQWMsaURBQWlELGlFQUFpRSxXQUFXLEtBQUssc0JBQXNCLGNBQWMsTUFBTSxtR0FBbUcsaUVBQWlFLGtGQUFrRixXQUFXLFdBQVcsOENBQThDLFVBQVUsRUFBRSxtRUFBbUUsd0JBQXdCLGFBQWEsMEJBQTBCLGlEQUFpRCxHQUFHLHdCQUF3QixhQUFhLE9BQU8sOEJBQThCLDBCQUEwQixrQkFBa0Isb0JBQW9CLFFBQVEsV0FBVyxzSUFBc0ksZ0JBQWdCLHdCQUF3Qiw4QkFBOEIsb0RBQW9ELEVBQUUsU0FBUyxRQUFRLFdBQVcsMFNBQTBTLFVBQVUsR0FBRyx3QkFBd0IsYUFBYSwwQkFBMEIsc0JBQXNCLCtFQUErRSxzQkFBc0IsYUFBYSxZQUFZLG1CQUFtQixhQUFhLG1DQUFtQyxFQUFFLHFCQUFxQix3QkFBd0IsYUFBYSxXQUFXLDBDQUEwQyxHQUFHLHdCQUF3QixhQUFhLHlKQUF5SixnQ0FBZ0MsaUNBQWlDLFFBQVEsUUFBUSx1SEFBdUgsNkJBQTZCLHVRQUF1USxrQ0FBa0MsaUxBQWlMLEVBQUUsb0lBQW9JLHdCQUF3QixhQUFhLCtNQUErTSwwQkFBMEIsTUFBTSxxQkFBcUIsbUhBQW1ILDJCQUEyQiw0QkFBNEIsZ0JBQWdCLDJCQUEyQixrREFBa0QsOEJBQThCLHdCQUF3QixpQkFBaUIsbURBQW1ELEVBQUUsOENBQThDLHNCQUFzQixhQUFhLDBCQUEwQixvQ0FBb0MsRUFBRSxZQUFZLHdCQUF3QixjQUFjLDBCQUEwQiw0SUFBNEkscUVBQXFFLFFBQVEsZ0NBQWdDLHFDQUFxQyx1REFBdUQsaUNBQWlDLHNEQUFzRCwwQ0FBMEMsZ0RBQWdELHdLQUF3SyxvQkFBb0IscUhBQXFILGFBQWEsc0JBQXNCLGVBQWUsc0JBQXNCLFFBQVEsK0hBQStILHdDQUF3QyxXQUFXLDJCQUEyQixvRUFBb0UsbUJBQW1CLHdIQUF3SCxxQkFBcUIsOEZBQThGLEtBQUssV0FBVyx5Q0FBeUMsc0NBQXNDLDB4QkFBMHhCLHNFQUFzRSxTQUFTLHFHQUFxRywyRUFBMkUsMkZBQTJGLHNLQUFzSyw0QkFBNEIseU5BQXlOLCtMQUErTCwyQ0FBMkMsNkdBQTZHLGtFQUFrRSw4QkFBOEIsdURBQXVELHdCQUF3QixRQUFRLEVBQUUsRUFBRSxvQkFBb0IsUUFBUSwyQ0FBMkMsd0NBQXdDLGNBQWMsdUJBQXVCLGNBQWMsNEJBQTRCLG9CQUFvQixFQUFFLGNBQWMsNEJBQTRCLGFBQWEsRUFBRSxjQUFjLDRCQUE0QixhQUFhLEVBQUUsY0FBYyxZQUFZLGVBQWUsa0JBQWtCLGNBQWMsVUFBVSxnQ0FBZ0MsNENBQTRDLDhDQUE4QyxzQkFBc0IsZ0RBQWdELDJDQUEyQyx5REFBeUQsbUJBQW1CLG9DQUFvQyxnQ0FBZ0Msc0JBQXNCLGlFQUFpRSxpQ0FBaUMsZ0RBQWdELFVBQVUsc0NBQXNDLHdDQUF3QyxFQUFFLEVBQUUsZ0dBQWdHLE9BQU8sOEJBQThCLE9BQU8sa0JBQWtCLDBDQUEwQyxvQkFBb0IsRUFBRSx3QkFBd0Isb0JBQW9CLEVBQUUsNERBQTRELEVBQUUsK0pBQStKLHdCQUF3QixhQUFhLHNCQUFzQix3QkFBd0IseURBQXlELDRDQUE0QyxrQkFBa0IsV0FBVyxvQkFBb0IsYUFBYSxXQUFXLG1GQUFtRiwwQ0FBMEMsNkJBQTZCLFVBQVUsRUFBRSxrQkFBa0Isd0JBQXdCLGFBQWEsOENBQThDLDRCQUE0Qiw0Q0FBNEMsTUFBTSw2QkFBNkIsYUFBYSxFQUFFLGdCQUFnQiw0QkFBNEIsMkJBQTJCLE9BQU8sV0FBVyw4QkFBOEIsS0FBSyxXQUFXLEtBQUssdUJBQXVCLFVBQVUsd0NBQXdDLGtJQUFrSSxvQkFBb0IsS0FBSyxrQkFBa0IsOENBQThDLFdBQVcsR0FBRyx3QkFBd0IsYUFBYSxvRUFBb0Usa0JBQWtCLDRDQUE0QyxrQkFBa0IsMENBQTBDLFdBQVcsb0JBQW9CLDREQUE0RCw4QkFBOEIsMEJBQTBCLDJDQUEyQyx3Q0FBd0MseUNBQXlDLHdDQUF3QyxxS0FBcUssdURBQXVELDhCQUE4QixzSUFBc0ksRUFBRSwyREFBMkQsd0JBQXdCLGFBQWEscUJBQXFCLFdBQVcscUJBQXFCLHVEQUF1RCx3QkFBd0IsNkVBQTZFLHFCQUFxQixzREFBc0Qsc0JBQXNCLHlFQUF5RSxFQUFFLGdCQUFnQix3QkFBd0IsYUFBYSxxQkFBcUIsOEJBQThCLE9BQU8sZ0lBQWdJLEVBQUUsZ0JBQWdCLHdCQUF3QixhQUFhLDJDQUEyQyw0QkFBNEIsd0JBQXdCLCtFQUErRSx3QkFBd0Isd0RBQXdELEtBQUssZUFBZSxvQ0FBb0Msc0JBQXNCLEVBQUUscUNBQXFDLHdCQUF3QixhQUFhLDBWQUEwVixvQkFBb0IseURBQXlELFlBQVksbUJBQW1CLGVBQWUscUJBQXFCLFVBQVUsVUFBVSxnQkFBZ0IsZUFBZSw2QkFBNkIsU0FBUyxxQkFBcUIsZUFBZSwrQ0FBK0MsZUFBZSxnQkFBZ0IsYUFBYSxHQUFHLE1BQU0sMEJBQTBCLFVBQVUsb0NBQW9DLFFBQVEsd0NBQXdDLElBQUksTUFBTSwwQkFBMEIsVUFBVSxvQ0FBb0MsUUFBUSx3Q0FBd0MsSUFBSSxNQUFNLDBCQUEwQixVQUFVLG9DQUFvQyxRQUFRLHlDQUF5Qyw0Q0FBNEMsUUFBUSxvRUFBb0UsVUFBVSxTQUFTLE9BQU8sc0VBQXNFLFlBQVksV0FBVyw4QkFBOEIsVUFBVSxVQUFVLFdBQVcsRUFBRSxtQkFBbUIsK0JBQStCLGlCQUFpQixrQkFBa0IsWUFBWSx1REFBdUQsb0JBQW9CLFdBQVcsRUFBRSxlQUFlLGNBQWMsa0JBQWtCLDZEQUE2RCxFQUFFLHNSQUFzUix3QkFBd0IsYUFBYSwyRUFBMkUsd0JBQXdCLFFBQVEsdUJBQXVCLEVBQUUsd0JBQXdCLEVBQUUsdUVBQXVFLHdCQUF3QixhQUFhLDBCQUEwQixvQkFBb0IsOEJBQThCLDRGQUE0RixXQUFXLEtBQUssaUJBQWlCLG1CQUFtQiwwQ0FBMEMsbURBQW1ELGVBQWUsdUdBQXVHLDJCQUEyQixTQUFTLDBCQUEwQixnSEFBZ0gsWUFBWSxXQUFXLCtCQUErQixTQUFTLElBQUkscUJBQXFCLDJCQUEyQixJQUFJLEtBQUssZ0NBQWdDLElBQUksd0JBQXdCLElBQUksdUJBQXVCLE9BQU8sVUFBVSxFQUFFLHFCQUFxQix3QkFBd0IsYUFBYSx3VUFBd1UsZ0JBQWdCLHVRQUF1USxrQkFBa0IsY0FBYyxtRUFBbUUsY0FBYyxtRUFBbUUsZ0JBQWdCLGNBQWMsY0FBYyxZQUFZLHNCQUFzQixXQUFXLDZCQUE2QixLQUFLLFlBQVksSUFBSSx3Q0FBd0MsdUJBQXVCLFNBQVMsZ0JBQWdCLDRMQUE0TCxRQUFRLElBQUksc0ZBQXNGLGtDQUFrQywrQ0FBK0MsSUFBSSxnQkFBZ0IsTUFBTSw4QkFBOEIsMEZBQTBGLFdBQVcsb0xBQW9MLDhDQUE4QyxZQUFZLGdDQUFnQyxXQUFXLHVEQUF1RCx5QkFBeUIsU0FBUyx5SUFBeUksb0JBQW9CLDZFQUE2RSxJQUFJLEtBQUsseUJBQXlCLGlGQUFpRix1QkFBdUIsa0JBQWtCLDREQUE0RCxJQUFJLEtBQUssV0FBVyxtSEFBbUgsT0FBTywrQkFBK0Isa0NBQWtDLG1KQUFtSixjQUFjLHFCQUFxQixXQUFXLG1FQUFtRSx5QkFBeUIsTUFBTSxZQUFZLHlCQUF5QixpSUFBaUksMkJBQTJCLHNYQUFzWCxzQkFBc0IsNkNBQTZDLFlBQVksc0JBQXNCLG1LQUFtSyw4SkFBOEosK1BBQStQLGdCQUFnQix3REFBd0QsNFFBQTRRLGlVQUFpVSw2TUFBNk0sa1dBQWtXLHVKQUF1Six3UUFBd1Esc0JBQXNCLG9DQUFvQyxRQUFRLFdBQVcsS0FBSyxXQUFXLDRGQUE0RixXQUFXLFFBQVEsV0FBVyx1QkFBdUIsV0FBVyxpQkFBaUIsT0FBTyxpQ0FBaUMsNENBQTRDLHlLQUF5Syx5SEFBeUgsc0JBQXNCLHNiQUFzYix5QkFBeUIscUJBQXFCLHNCQUFzQixFQUFFLDhTQUE4Uyx3QkFBd0IsYUFBYSw0TEFBNEwsNEJBQTRCLGdCQUFnQiwyQkFBMkIscUJBQXFCLG1DQUFtQyw0S0FBNEssU0FBUyxXQUFXLG1JQUFtSSxZQUFZLDJCQUEyQixZQUFZLEVBQUUsaUJBQWlCLHVCQUF1QixRQUFRLDRDQUE0Qyw0QkFBNEIsSUFBSSxLQUFLLHlCQUF5Qiw4Q0FBOEMseURBQXlELGVBQWUsU0FBUyxpQkFBaUIscUJBQXFCLGlCQUFpQixxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSxzTEFBc0wsd0JBQXdCLGFBQWEsU0FBUyxxSkFBcUoseUNBQXlDLEVBQUUsdUNBQXVDLDBKQUEwSixhQUFhLEVBQUUsK0hBQStILHdCQUF3QixhQUFhLDZRQUE2USxXQUFXLFFBQVEsaUNBQWlDLElBQUkscUNBQXFDLElBQUkscUNBQXFDLFVBQVUsU0FBUyxlQUFlLFdBQVcsVUFBVSxnQkFBZ0IsZUFBZSxRQUFRLGtEQUFrRCxVQUFVLDJCQUEyQix3Q0FBd0Msb0NBQW9DLFNBQVMsOENBQThDLGtDQUFrQywwSUFBMEksOEJBQThCLHVEQUF1RCxjQUFjLFdBQVcsNEdBQTRHLGNBQWMsOEJBQThCLHVDQUF1QyxFQUFFLDROQUE0Tix3QkFBd0IsYUFBYSx5TUFBeU0sd0JBQXdCLDRCQUE0QiwyQ0FBMkMsTUFBTSxnQ0FBZ0Msd0NBQXdDLFFBQVEsSUFBSSxxQ0FBcUMsNkNBQTZDLGdCQUFnQiw2QkFBNkIsV0FBVyxXQUFXLGlGQUFpRixFQUFFLG9MQUFvTCx3QkFBd0IsYUFBYSw2UUFBNlEsNEJBQTRCLGdCQUFnQiwyQkFBMkIsb0NBQW9DLG9EQUFvRCxNQUFNLCtLQUErSyxZQUFZLDJCQUEyQixTQUFTLHdTQUF3UyxtQkFBbUIsRUFBRSx3UUFBd1Esd0JBQXdCLGFBQWEsOEJBQThCLFdBQVcsa0NBQWtDLEdBQUcsd0JBQXdCLGFBQWEsOERBQThELDRCQUE0QixpQkFBaUIsdUJBQXVCLFdBQVcscUJBQXFCLHVEQUF1RCw2RUFBNkUsb0JBQW9CLHNEQUFzRCw4SEFBOEgsdUNBQXVDLFNBQVMscUJBQXFCLHFDQUFxQyx1TUFBdU0sU0FBUyxnQkFBZ0IsTUFBTSxtSUFBbUksRUFBRSwwREFBMEQsd0JBQXdCLGFBQWEsU0FBUyw0ZkFBNGYsYUFBYSxFQUFFLG9OQUFvTix3QkFBd0IsYUFBYSw2RkFBNkYsNEJBQTRCLDhCQUE4QixpRkFBaUYsbUJBQW1CLFdBQVcsNkdBQTZHLEVBQUUsdUZBQXVGLHdCQUF3QixhQUFhLDhUQUE4VCxhQUFhLEtBQUsscUJBQXFCLE1BQU0scUJBQXFCLFlBQVkscUJBQXFCLGVBQWUsZ0ZBQWdGLFVBQVUsU0FBUyxlQUFlLFdBQVcsVUFBVSxnQkFBZ0IsZUFBZSx3REFBd0QsbUNBQW1DLHFDQUFxQyxrSUFBa0ksY0FBYyx1Q0FBdUMsb0JBQW9CLDBEQUEwRCxpRkFBaUYsY0FBYyw2Q0FBNkMsb0JBQW9CLGtCQUFrQixFQUFFLDJQQUEyUCx3QkFBd0IsYUFBYSw2TEFBNkwsd0JBQXdCLHlGQUF5RixJQUFJLEtBQUssY0FBYyxNQUFNLHFCQUFxQixnQ0FBZ0MsS0FBSywwQkFBMEIsNENBQTRDLHdDQUF3QyxRQUFRLHlDQUF5QyxLQUFLLEVBQUUsNktBQTZLLHdCQUF3QixhQUFhLDJNQUEyTSw0QkFBNEIsZ0JBQWdCLDJCQUEyQixpQkFBaUIsNkJBQTZCLHlDQUF5QyxpRkFBaUYseUpBQXlKLFlBQVksdUdBQXVHLEVBQUUsc01BQXNNLHdCQUF3QixhQUFhLHdCQUF3Qiw4REFBOEQsR0FBRyx3QkFBd0IsYUFBYSxpTUFBaU0sMEJBQTBCLCtGQUErRiw4QkFBOEIsZUFBZSx1QkFBdUIsbUJBQW1CLHlGQUF5Riw0Q0FBNEMsa0JBQWtCLDZEQUE2RCxzSUFBc0ksMEJBQTBCLDBNQUEwTSxjQUFjLGtEQUFrRCx1SUFBdUksWUFBWSxzQkFBc0IscUVBQXFFLEVBQUUsbUxBQW1MLHdCQUF3QixhQUFhLFNBQVMsbWNBQW1jLGFBQWEsRUFBRSxvTkFBb04sd0JBQXdCLGFBQWEsMFBBQTBQLGdCQUFnQixpQkFBaUIsb0VBQW9FLFdBQVcsS0FBSywwQkFBMEIsa0NBQWtDLDBCQUEwQixZQUFZLFdBQVcsdUJBQXVCLGdCQUFnQixzQ0FBc0MsNkZBQTZGLDZDQUE2Qyw2Q0FBNkMsbUNBQW1DLGtGQUFrRixtQ0FBbUMsa0JBQWtCLDZFQUE2RSx3SEFBd0gsVUFBVSxzR0FBc0csVUFBVSxTQUFTLEdBQUcsRUFBRSxpTUFBaU0sd0JBQXdCLGFBQWEsdUVBQXVFLHdCQUF3QiwyREFBMkQsNENBQTRDLGtCQUFrQixXQUFXLG9CQUFvQixhQUFhLFdBQVcsMkZBQTJGLGdDQUFnQyw4QkFBOEIsVUFBVSxFQUFFLDJEQUEyRCx3QkFBd0IsYUFBYSxrSUFBa0ksd0JBQXdCLGlCQUFpQiw4QkFBOEIsMEhBQTBILDRDQUE0Qyw0R0FBNEcsRUFBRSxPQUFPLEVBQUUsMkZBQTJGLHdCQUF3QixhQUFhLG1RQUFtUSxvSUFBb0ksb0VBQW9FLE9BQU8sbUNBQW1DLDJGQUEyRixPQUFPLHlEQUF5RCxZQUFZLGNBQWMsbUlBQW1JLG1CQUFtQixjQUFjLEVBQUUscUNBQXFDLFNBQVMsWUFBWSxrQ0FBa0Msc0RBQXNELGFBQWEsMERBQTBELG1CQUFtQixrQkFBa0IsNEdBQTRHLEVBQUUsaUxBQWlMLHdCQUF3QixhQUFhLFdBQVcsNkdBQTZHLHdGQUF3RixHQUFHLHdCQUF3QixhQUFhLHdXQUF3VyxrRUFBa0UsY0FBYyw0R0FBNEcsK0NBQStDLDhCQUE4QixXQUFXLEtBQUssd0JBQXdCLGFBQWEsaUNBQWlDLE1BQU0saUNBQWlDLE1BQU0sMkJBQTJCLGFBQWEsb0NBQW9DLE1BQU0sb0NBQW9DLE1BQU0sK0JBQStCLGlEQUFpRCxJQUFJLG9CQUFvQixlQUFlLGtFQUFrRSxJQUFJLEtBQUssbUJBQW1CLDBFQUEwRSxhQUFhLGlCQUFpQixTQUFTLGNBQWMsbUNBQW1DLDJNQUEyTSwrQ0FBK0Msa0RBQWtELCtDQUErQyx5QkFBeUIsUUFBUSxtQkFBbUIsSUFBSSxXQUFXLHlCQUF5QixRQUFRLG1CQUFtQixJQUFJLFdBQVcsb0NBQW9DLElBQUksS0FBSyxNQUFNLGtCQUFrQixvQkFBb0IsbURBQW1ELG9CQUFvQixtTEFBbUwsb0NBQW9DLElBQUksZ0NBQWdDLDBCQUEwQixhQUFhLFNBQVMsOERBQThELE1BQU0sUUFBUSxJQUFJLDhCQUE4QixNQUFNLHlCQUF5QixJQUFJLFdBQVcsYUFBYSxJQUFJLDJCQUEyQiw4QkFBOEIsSUFBSSxXQUFXLFlBQVksMkRBQTJELFNBQVMsZ0JBQWdCLG9CQUFvQix1REFBdUQseUtBQXlLLGdCQUFnQixTQUFTLGVBQWUsZUFBZSxPQUFPLDBFQUEwRSxjQUFjLHVEQUF1RCxTQUFTLGdCQUFnQixPQUFPLHVEQUF1RCxzQ0FBc0MsOERBQThELDJCQUEyQixjQUFjLDRCQUE0Qix5SEFBeUgsaURBQWlELDBDQUEwQyxrQkFBa0IsV0FBVyxvQkFBb0IsU0FBUyxtSkFBbUosMkJBQTJCLG9PQUFvTyx1QkFBdUIsa0RBQWtELFdBQVcsb0NBQW9DLGtCQUFrQixRQUFRLHdFQUF3RSwyQ0FBMkMsUUFBUSxXQUFXLHVCQUF1QixnQkFBZ0IseUpBQXlKLHVDQUF1QyxJQUFJLCtEQUErRCx5QkFBeUIsNENBQTRDLGFBQWEsTUFBTSxnS0FBZ0ssc0JBQXNCLDhCQUE4QixhQUFhLE1BQU0sK0pBQStKLEtBQUssMEJBQTBCLDhDQUE4QyxzQkFBc0IsOEJBQThCLGFBQWEsTUFBTSwrSkFBK0osS0FBSyw0QkFBNEIsNENBQTRDLHNCQUFzQiw2QkFBNkIsYUFBYSxNQUFNLDhKQUE4SixzQkFBc0IsU0FBUyxTQUFTLFFBQVEsV0FBVyxvQkFBb0IsS0FBSyxNQUFNLDBFQUEwRSxxQkFBcUIsa0JBQWtCLFFBQVEsV0FBVyxvRUFBb0UsT0FBTyxvQkFBb0IsdUNBQXVDLCtIQUErSCxnQkFBZ0Isc0NBQXNDLHNEQUFzRCxrQkFBa0IsUUFBUSxPQUFPLHdCQUF3QixpREFBaUQsSUFBSSxVQUFVLFdBQVcsU0FBUyxzQ0FBc0MsZUFBZSxnQkFBZ0Isd0dBQXdHLE1BQU0sbUNBQW1DLHVCQUF1QixnQ0FBZ0MsdUJBQXVCLG9CQUFvQixvQ0FBb0MsOEJBQThCLElBQUksS0FBSywrTEFBK0wseUJBQXlCLFdBQVcsRUFBRSxnVUFBZ1Usd0JBQXdCLGFBQWEsMlJBQTJSLDRCQUE0QixnQkFBZ0IsMkJBQTJCLDZFQUE2RSxNQUFNLGdEQUFnRCxnTkFBZ04saUJBQWlCLHVCQUF1QixRQUFRLHNDQUFzQyx5REFBeUQsZUFBZSxTQUFTLGlCQUFpQixxQkFBcUIsc0NBQXNDLG1CQUFtQixFQUFFLHFSQUFxUix3QkFBd0IsYUFBYSxvckJBQW9yQixrQkFBa0Isd0NBQXdDLFVBQVUsRUFBRSxvREFBb0QsZ0JBQWdCLGtCQUFrQixxTkFBcU4sSUFBSSx5R0FBeUcsZ0NBQWdDLGtCQUFrQixvQkFBb0IsK0JBQStCLDBCQUEwQiwrTEFBK0wsVUFBVSwwQkFBMEIsbUJBQW1CLGdJQUFnSSxJQUFJLGtPQUFrTywwQ0FBMEMsc0JBQXNCLG9TQUFvUyx1QkFBdUIsb1NBQW9TLCtCQUErQixvQkFBb0Isb0RBQW9ELDZCQUE2Qiw0T0FBNE8saUJBQWlCLGtKQUFrSixlQUFlLCtOQUErTixnQkFBZ0IsNkdBQTZHLG9CQUFvQixtSEFBbUgsOERBQThELHlYQUF5WCxrQkFBa0Isa0NBQWtDLHNCQUFzQixrQ0FBa0MsU0FBUyxvQ0FBb0Msd0hBQXdILDhIQUE4SCxjQUFjLDZJQUE2SSxpQ0FBaUMsa0JBQWtCLElBQUksU0FBUyxxREFBcUQscUNBQXFDLFdBQVcsb0NBQW9DLFFBQVEsV0FBVyxLQUFLLE9BQU8sZUFBZSx1Q0FBdUMsc0JBQXNCLFdBQVcsdVZBQXVWLHFJQUFxSSxnRUFBZ0UsUUFBUSxJQUFJLDBEQUEwRCwwQkFBMEIsSUFBSSxzQkFBc0IsMEJBQTBCLElBQUksc0JBQXNCLGlEQUFpRCxLQUFLLHlCQUF5QixRQUFRLElBQUksV0FBVyxPQUFPLDhCQUE4QixtQkFBbUIsd0hBQXdILHFDQUFxQywwRUFBMEUscUNBQXFDLFlBQVksOERBQThELFlBQVksbUVBQW1FLFlBQVksOENBQThDLHVCQUF1QixteEJBQW14QixzQkFBc0IsRUFBRSxzQkFBc0IsYUFBYSx1REFBdUQsa0VBQWtFLGlDQUFpQyxxQkFBcUIseUxBQXlMLFVBQVUseUJBQXlCLGFBQWEsNEJBQTRCLDhCQUE4QixRQUFRLElBQUksNEJBQTRCLGlDQUFpQyw4QkFBOEIsK0NBQStDLFlBQVksRUFBRSxRQUFRLFVBQVUseUNBQXlDLHlGQUF5RixtQkFBbUIsMEJBQTBCLHlDQUF5QyxNQUFNLHFCQUFxQixrQ0FBa0MsTUFBTSwyQkFBMkIsU0FBUyw2Q0FBNkMsd0RBQXdELG9CQUFvQiw2SUFBNkksV0FBVywyQkFBMkIsdURBQXVELDZFQUE2RSwyQ0FBMkMsdUJBQXVCLFFBQVEsMEJBQTBCLE1BQU0saUJBQWlCLG1CQUFtQixNQUFNLHVGQUF1Riw0QkFBNEIsUUFBUSx3QkFBd0IsTUFBTSxpQkFBaUIsaUJBQWlCLE1BQU0sdUZBQXVGLDhDQUE4QyxpQkFBaUIsV0FBVyx3RkFBd0YsOENBQThDLEtBQUssbUJBQW1CLE1BQU0seUJBQXlCLE1BQU0sa0JBQWtCLHVCQUF1Qix5Q0FBeUMsSUFBSSxFQUFFLHdCQUF3QixnQ0FBZ0Msc0JBQXNCLCtDQUErQyx3REFBd0QsUUFBUSxXQUFXLDJEQUEyRCx1QkFBdUIsOERBQThELGtDQUFrQyx3Q0FBd0MsZ0ZBQWdGLFFBQVEsV0FBVyxLQUFLLGdFQUFnRSwyQkFBMkIsb0ZBQW9GLHNEQUFzRCxRQUFRLFdBQVcsY0FBYyxTQUFTLFFBQVEsSUFBSSxvQkFBb0IscUJBQXFCLDhDQUE4QyxRQUFRLElBQUksc0NBQXNDLHNCQUFzQiwyS0FBMkssK0JBQStCLCtIQUErSCxxQkFBcUIsWUFBWSxtQkFBbUIsb0RBQW9ELE9BQU8seUJBQXlCLG1DQUFtQyxvR0FBb0csZ0dBQWdHLHVCQUF1Qiw4TUFBOE0sWUFBWSxFQUFFLGVBQWUsK0JBQStCLGdIQUFnSCxXQUFXLHdEQUF3RCxrTEFBa0wsS0FBSyxvQkFBb0IsUUFBUSxRQUFRLG1CQUFtQixXQUFXLCtGQUErRixhQUFhLFdBQVcsMkZBQTJGLHNFQUFzRSw0QkFBNEIseUVBQXlFLGVBQWUsOENBQThDLDhCQUE4QixvQkFBb0IsK0JBQStCLHVCQUF1QixJQUFJLDhEQUE4RCw0QkFBNEIsYUFBYSxpRkFBaUYsUUFBUSxVQUFVLDhDQUE4QyxpREFBaUQscUVBQXFFLG9DQUFvQyxFQUFFLCtyQkFBK3JCLHdCQUF3QixhQUFhLCtVQUErVSxhQUFhLDZCQUE2QixTQUFTLGVBQWUsV0FBVyxVQUFVLGdCQUFnQixlQUFlLFFBQVEsNEJBQTRCLG1DQUFtQyxRQUFRLDBDQUEwQyw0UUFBNFEseUhBQXlILHlCQUF5QixhQUFhLDJCQUEyQixlQUFlLGNBQWMsa0NBQWtDLG9CQUFvQixrQkFBa0IsRUFBRSwwUkFBMFIsd0JBQXdCLGFBQWEsb1NBQW9TLGFBQWEsT0FBTyw4QkFBOEIsa0JBQWtCLFdBQVcsY0FBYyw0Q0FBNEMsU0FBUyxjQUFjLFNBQVMsR0FBRyxhQUFhLFNBQVMsY0FBYyxnQkFBZ0Isc0JBQXNCLGtNQUFrTSxpQ0FBaUMsZUFBZSw2SEFBNkgseUJBQXlCLG1GQUFtRiw2RUFBNkUsTUFBTSxrQkFBa0IsMkpBQTJKLGNBQWMsbUJBQW1CLHlFQUF5RSxZQUFZLGVBQWUsWUFBWSxrQkFBa0IsaUNBQWlDLFlBQVksRUFBRSxXQUFXLFFBQVEsV0FBVyxLQUFLLHNCQUFzQixVQUFVLFNBQVMsMEdBQTBHLHlCQUF5QiwyQkFBMkIsY0FBYyxHQUFHLDhDQUE4QyxXQUFXLEtBQUssc0JBQXNCLG9KQUFvSixPQUFPLFNBQVMsb0NBQW9DLDhCQUE4QiwrQkFBK0IscUNBQXFDLCtCQUErQiw4Q0FBOEMsOEJBQThCLGVBQWUsTUFBTSxJQUFJLHdFQUF3RSxpRUFBaUUsRUFBRSxrQ0FBa0Msb0NBQW9DLHVFQUF1RSxXQUFXLEtBQUssV0FBVyxxQkFBcUIseUJBQXlCLGtDQUFrQyxhQUFhLDZCQUE2QixFQUFFLE9BQU8scUNBQXFDLDJCQUEyQixvQ0FBb0MsT0FBTyxvQkFBb0IsS0FBSyxFQUFFLDZCQUE2Qiw2QkFBNkIsd0JBQXdCLHNFQUFzRSxPQUFPLG1CQUFtQiw2QkFBNkIsdUJBQXVCLDBFQUEwRSx3QkFBd0IsdURBQXVELEVBQUUsVUFBVSxFQUFFLGtSQUFrUix3QkFBd0IsYUFBYSwyTUFBMk0sNEJBQTRCLGdCQUFnQiwyQkFBMkIsbUJBQW1CLGdFQUFnRSxxQkFBcUIsU0FBUyxzRkFBc0YsVUFBVSxxQ0FBcUMsYUFBYSxVQUFVLEVBQUUsZUFBZSw4SEFBOEgseUJBQXlCLFlBQVksNEVBQTRFLG1CQUFtQixFQUFFLHNNQUFzTSx3QkFBd0IsYUFBYSx3QkFBd0Isa0NBQWtDLEdBQUcsd0JBQXdCLGFBQWEsNEpBQTRKLDBCQUEwQixvSEFBb0gsOEJBQThCLGVBQWUsdUJBQXVCLGlIQUFpSCw0Q0FBNEMsa0JBQWtCLDRGQUE0RixzRkFBc0YsMEJBQTBCLDZIQUE2SCxjQUFjLGdCQUFnQiw4RkFBOEYsc0NBQXNDLHNCQUFzQiwwREFBMEQsRUFBRSw4SUFBOEksd0JBQXdCLGFBQWEsU0FBUyx5UUFBeVEsaUNBQWlDLGlLQUFpSyxhQUFhLEVBQUUsNExBQTRMLHdCQUF3QixhQUFhLHFCQUFxQixnQkFBZ0IsMENBQTBDLGdHQUFnRyxnQkFBZ0IsNEZBQTRGLDhDQUE4QyxrQkFBa0IsMEJBQTBCLDhDQUE4Qyw4QkFBOEIsRUFBRSwrQkFBK0IsaUVBQWlFLDBCQUEwQiwyQkFBMkIsa0ZBQWtGLEVBQUUsc0JBQXNCLGtDQUFrQyxvQkFBb0IsS0FBSywyQkFBMkIsaUxBQWlMLHlCQUF5QixzQkFBc0IsK0JBQStCLG9CQUFvQixLQUFLLG9CQUFvQixtRUFBbUUseUJBQXlCLDZDQUE2QyxpQkFBaUIsS0FBSyx3QkFBd0IsaUNBQWlDLGdDQUFnQyxFQUFFLGlCQUFpQix3QkFBd0IsYUFBYSx3RkFBd0Ysd0JBQXdCLG1EQUFtRCw2QkFBNkIsa0JBQWtCLFdBQVcsb0JBQW9CLGFBQWEsV0FBVyxLQUFLLHNCQUFzQixhQUFhLHVEQUF1RCxnQ0FBZ0MsZ0NBQWdDLDhCQUE4QixVQUFVLEVBQUUsMkVBQTJFLHdCQUF3QixhQUFhLCtKQUErSixXQUFXLGVBQWUsb0RBQW9ELFFBQVEsb0RBQW9ELEtBQUssb0RBQW9ELEtBQUssd0NBQXdDLFNBQVMsb0RBQW9ELFNBQVMsaUNBQWlDLFlBQVksMkdBQTJHLHlDQUF5QyxrREFBa0QsVUFBVSwyQkFBMkIsd0NBQXdDLDBEQUEwRCxlQUFlLFFBQVEsMkRBQTJELFNBQVMsOENBQThDLHNDQUFzQyxjQUFjLGtDQUFrQyxtRkFBbUYsRUFBRSxvSUFBb0ksd0JBQXdCLGFBQWEsa1BBQWtQLHdCQUF3Qiw0SkFBNEosSUFBSSxLQUFLLDRCQUE0QixtQ0FBbUMsYUFBYSx5Q0FBeUMsT0FBTywwQkFBMEIsRUFBRSxxTkFBcU4sd0JBQXdCLGFBQWEsMlJBQTJSLG9CQUFvQiw0QkFBNEIsMEVBQTBFLEtBQUssZUFBZSxpQ0FBaUMscUJBQXFCLFdBQVcsd0RBQXdELGdCQUFnQiwyQkFBMkIsaUJBQWlCLE1BQU0sNE1BQTRNLFlBQVksMkJBQTJCLFNBQVMsMFJBQTBSLG9CQUFvQixFQUFFLHdRQUF3USx3QkFBd0IsYUFBYSwrRUFBK0Usb0JBQW9CLG1DQUFtQyx5Q0FBeUMsNkJBQTZCLGdCQUFnQix3REFBd0QscUJBQXFCLG1CQUFtQixpSEFBaUgsY0FBYyw0Q0FBNEMsMkZBQTJGLFdBQVcsOEJBQThCLGlCQUFpQix1QkFBdUIsV0FBVyw2QkFBNkIsMENBQTBDLDhHQUE4Ryx1QkFBdUIsRUFBRSx5RUFBeUUsd0JBQXdCLGFBQWEsV0FBVyxrWkFBa1osRUFBRSw0TEFBNEwsd0JBQXdCLGFBQWEsbUVBQW1FLDBCQUEwQix5REFBeUQsd0dBQXdHLG9DQUFvQyxXQUFXLHVCQUF1QixXQUFXLEtBQUssaUJBQWlCLG1CQUFtQixLQUFLLGdDQUFnQyxxQ0FBcUMsWUFBWSxFQUFFLHVEQUF1RCx3QkFBd0IsYUFBYSxxRUFBcUUsV0FBVyxpWEFBaVgsRUFBRSxpRUFBaUUsd0JBQXdCLGFBQWEsMFNBQTBTLDRCQUE0QixnQkFBZ0IsMkJBQTJCLGlCQUFpQix3VEFBd1QsRUFBRSxrUUFBa1Esd0JBQXdCLGFBQWEsd1RBQXdULFdBQVcsOFFBQThRLDBJQUEwSSxpRkFBaUYsNEJBQTRCLG9IQUFvSCxPQUFPLElBQUksc0JBQXNCLEVBQUUsc0JBQXNCLGFBQWEsd0RBQXdELDZCQUE2Qix3QkFBd0IsMEZBQTBGLFFBQVEsV0FBVyxrQkFBa0Isa0JBQWtCLHVCQUF1QiwyQ0FBMkMsUUFBUSxJQUFJLEtBQUssZUFBZSxTQUFTLHlDQUF5QyxnQ0FBZ0MsYUFBYSw4QkFBOEIsbU9BQW1PLFlBQVksOERBQThELFlBQVksbUVBQW1FLFlBQVksa2pCQUFrakIsaUJBQWlCLCtCQUErQix5REFBeUQsdUJBQXVCLFdBQVcsNkJBQTZCLDBDQUEwQyxnSEFBZ0gsc0NBQXNDLEVBQUUsOFZBQThWLHdCQUF3QixhQUFhLDZUQUE2VCxXQUFXLEdBQUcscUNBQXFDLElBQUkscUNBQXFDLElBQUkscUNBQXFDLE1BQU0sOENBQThDLFVBQVUsU0FBUyxlQUFlLFdBQVcsVUFBVSxnQkFBZ0IsZUFBZSxRQUFRLDZDQUE2QyxVQUFVLDJCQUEyQix3Q0FBd0MsNERBQTRELFNBQVMsOENBQThDLGtDQUFrQywwSUFBMEksOEJBQThCLHVEQUF1RCxjQUFjLFdBQVcsNEdBQTRHLGNBQWMsa0NBQWtDLHVDQUF1QyxFQUFFLHNRQUFzUSx3QkFBd0IsYUFBYSwyTEFBMkwscUNBQXFDLHdCQUF3Qiw2REFBNkQsbUJBQW1CLFFBQVEsV0FBVyxtQkFBbUIsd0RBQXdELFdBQVcscUJBQXFCLE9BQU8sMkNBQTJDLFFBQVEsSUFBSSxvSEFBb0gsb0JBQW9CLFFBQVEsV0FBVyxzQ0FBc0MsRUFBRSxvSkFBb0osd0JBQXdCLGFBQWEsNlFBQTZRLDRCQUE0QixnQkFBZ0IsMkJBQTJCLGlDQUFpQyw2SUFBNkksZ09BQWdPLFlBQVksMkJBQTJCLFNBQVMsMFJBQTBSLG1CQUFtQixFQUFFLHdRQUF3USx3QkFBd0IsYUFBYSw4QkFBOEIsbURBQW1ELFdBQVcsd0JBQXdCLDZCQUE2QixVQUFVLEdBQUcsd0JBQXdCLGFBQWEsOERBQThELDRCQUE0QixpQkFBaUIsdUJBQXVCLFdBQVcscUJBQXFCLHVEQUF1RCw2RUFBNkUsb0JBQW9CLDhEQUE4RCxtREFBbUQscUJBQXFCLG1CQUFtQixxSkFBcUosb0VBQW9FLGdCQUFnQiwwREFBMEQsRUFBRSx5REFBeUQsd0JBQXdCLGFBQWEsU0FBUyx1ZUFBdWUsYUFBYSxFQUFFLGtOQUFrTix3QkFBd0IsYUFBYSwyQkFBMkIsMEJBQTBCLHNCQUFzQixrREFBa0QsT0FBTywyRkFBMkYsK0NBQStDLFlBQVksRUFBRSx1QkFBdUIsd0JBQXdCLGFBQWEsZ1ZBQWdWLHdCQUF3QixHQUFHLFVBQVUsVUFBVSxnQkFBZ0Isa0JBQWtCLG1CQUFtQix5QkFBeUIsU0FBUyxzQkFBc0IsdUhBQXVILEVBQUUsY0FBYyxPQUFPLDBEQUEwRCxpREFBaUQsb0VBQW9FLDBCQUEwQixTQUFTLDBDQUEwQyxRQUFRLGlDQUFpQyxTQUFTLG9EQUFvRCxPQUFPLE1BQU0sOEZBQThGLFVBQVUsMENBQTBDLGdDQUFnQyxnQ0FBZ0MsV0FBVyxVQUFVLGdCQUFnQixlQUFlLGlFQUFpRSxTQUFTLDBDQUEwQyxpQkFBaUIsZ0JBQWdCLDBDQUEwQyxnQkFBZ0IsMENBQTBDLFdBQVcseUNBQXlDLGFBQWEsMkNBQTJDLG9CQUFvQixFQUFFLDRQQUE0UCx3QkFBd0IsYUFBYSxxUUFBcVEsa0JBQWtCLDRGQUE0RixXQUFXLEtBQUssb0RBQW9ELG1EQUFtRCx5QkFBeUIsbURBQW1ELCtCQUErQixTQUFTLEVBQUUsU0FBUyxtQkFBbUIsU0FBUyxFQUFFLGNBQWMsZ0VBQWdFLDhDQUE4Qyw4REFBOEQsd0JBQXdCLGdEQUFnRCw2Q0FBNkMsOEVBQThFLDJCQUEyQiw4SEFBOEgsc0JBQXNCLFdBQVcsNERBQTRELHNCQUFzQixXQUFXLGlFQUFpRSx5SUFBeUksU0FBUyx3QkFBd0IsU0FBUyxLQUFLLFdBQVcsd0tBQXdLLDBEQUEwRCxrR0FBa0csS0FBSyxrQkFBa0IsaUNBQWlDLDRCQUE0QixZQUFZLFdBQVcsS0FBSyw0Q0FBNEMseUNBQXlDLHNDQUFzQyxXQUFXLG1CQUFtQixRQUFRLFdBQVcsS0FBSyxXQUFXLCtCQUErQixRQUFRLFdBQVcsS0FBSyxXQUFXLGNBQWMsNEJBQTRCLG9GQUFvRixrQ0FBa0MsNktBQTZLLHNCQUFzQixjQUFjLGlDQUFpQyxrREFBa0QsV0FBVyxLQUFLLG9CQUFvQixxQkFBcUIsNEJBQTRCLDhEQUE4RCxnQkFBZ0IsRUFBRSxpTUFBaU0sd0JBQXdCLGFBQWEsNkxBQTZMLGdCQUFnQixnQkFBZ0Isc0NBQXNDLFdBQVcsa0JBQWtCLHVFQUF1RSw0QkFBNEIsZ0JBQWdCLDJCQUEyQixhQUFhLHVDQUF1QyxvRUFBb0UsK0JBQStCLHlEQUF5RCw4Q0FBOEMsa0RBQWtELHlIQUF5SCxRQUFRLElBQUksS0FBSyxlQUFlLHNCQUFzQix5REFBeUQsV0FBVyxhQUFhLGNBQWMsb0JBQW9CLE1BQU0sb0NBQW9DLDZDQUE2QyxjQUFjLGdIQUFnSCxzQkFBc0IsUUFBUSxJQUFJLEtBQUssK0VBQStFLGlDQUFpQyxRQUFRLFdBQVcsWUFBWSxXQUFXLEtBQUssZ0JBQWdCLG1HQUFtRyxnRkFBZ0YsOENBQThDLG1CQUFtQixFQUFFLDZLQUE2Syx3QkFBd0IsYUFBYSx1ZUFBdWUsZ0JBQWdCLHNKQUFzSixpQkFBaUIsOEVBQThFLGdEQUFnRCxxREFBcUQsV0FBVyxLQUFLLE9BQU8sMkRBQTJELG9NQUFvTSxvRUFBb0UsMEZBQTBGLDhDQUE4QyxnQkFBZ0IsMEVBQTBFLCtCQUErQiw0QkFBNEIsUUFBUSxXQUFXLGVBQWUsU0FBUyxRQUFRLElBQUksb0JBQW9CLGtCQUFrQiw4Q0FBOEMsUUFBUSxXQUFXLEtBQUssbUVBQW1FLElBQUksMkJBQTJCLDREQUE0RCxJQUFJLDJCQUEyQix5SUFBeUksS0FBSyxxQkFBcUIsTUFBTSwyQ0FBMkMsZ0JBQWdCLG1CQUFtQixRQUFRLG1DQUFtQyxXQUFXLEtBQUssV0FBVyw4QkFBOEIsU0FBUyxXQUFXLG1RQUFtUSwrQ0FBK0MsOENBQThDLGdCQUFnQiwwQkFBMEIsZ0NBQWdDLFVBQVUsV0FBVywyQkFBMkIsd0RBQXdELFFBQVEsV0FBVyx5QkFBeUIsd0ZBQXdGLG9FQUFvRSxTQUFTLDBGQUEwRiw0RkFBNEYsV0FBVyxrREFBa0QsbUNBQW1DLHdCQUF3QixvQkFBb0IsNkNBQTZDLHVCQUF1QixFQUFFLE9BQU8sU0FBUyxZQUFZLGtDQUFrQyxJQUFJLDBEQUEwRCxtQkFBbUIsaUhBQWlILHNCQUFzQixtSEFBbUgsK0JBQStCLE1BQU0sMkhBQTJILGNBQWMsU0FBUyxFQUFFLHNCQUFzQix3QkFBd0IsV0FBVyxpQkFBaUIsNkJBQTZCLHFIQUFxSCw0QkFBNEIsa0NBQWtDLFdBQVcsS0FBSyxpRUFBaUUsaUJBQWlCLHNFQUFzRSw0QkFBNEIsOEZBQThGLGVBQWUsc0NBQXNDLDhCQUE4QixzQkFBc0IsMkJBQTJCLHNEQUFzRCxxQ0FBcUMsdUJBQXVCLFdBQVcsd0RBQXdELDRCQUE0QixhQUFhLHdFQUF3RSxRQUFRLFVBQVUsd0NBQXdDLHVEQUF1RCwyQ0FBMkMseUJBQXlCLGtEQUFrRCxNQUFNLDBDQUEwQyxxQkFBcUIsNkJBQTZCLHlCQUF5QixTQUFTLGVBQWUsRUFBRSxxYUFBcWEsd0JBQXdCLGFBQWEsa1BBQWtQLEdBQUcsb0RBQW9ELElBQUksb0RBQW9ELElBQUksb0RBQW9ELElBQUkscUNBQXFDLElBQUkscUNBQXFDLElBQUkscUNBQXFDLFNBQVMsR0FBRyxxQ0FBcUMsSUFBSSxxQ0FBcUMsSUFBSSxxQ0FBcUMsaUJBQWlCLGVBQWUsaURBQWlELFVBQVUsOENBQThDLE9BQU8seUNBQXlDLFlBQVkseUNBQXlDLGtCQUFrQixnQkFBZ0IsRUFBRSwyRUFBMkUsR0FBRyxVQUFVLGdFQUFnRSxHQUFHLFdBQVcsRUFBRSwyREFBMkQsVUFBVSxrQkFBa0IsY0FBYyw4R0FBOEcsa0NBQWtDLEVBQUUsME5BQTBOLHdCQUF3QixhQUFhLDRDQUE0Qyx3QkFBd0Isc0hBQXNILHNHQUFzRyxjQUFjLFFBQVEsSUFBSSxLQUFLLGtEQUFrRCxnQ0FBZ0MsT0FBTyx1Q0FBdUMsRUFBRSwyQ0FBMkMsUUFBUSxJQUFJLEtBQUssV0FBVyxnQ0FBZ0MsV0FBVyxnQ0FBZ0MsV0FBVyxnQ0FBZ0MsUUFBUSxJQUFJLEtBQUssV0FBVyxnQ0FBZ0MsV0FBVyxnQ0FBZ0MsV0FBVyxnQ0FBZ0MsOEVBQThFLEVBQUUsdUNBQXVDLHdCQUF3QixhQUFhLGdKQUFnSix5QkFBeUIsZ0JBQWdCLHNEQUFzRCxrQkFBa0IsY0FBYyw4QkFBOEIsY0FBYyxlQUFlLGtEQUFrRCxjQUFjLGVBQWUsK0NBQStDLGdCQUFnQixvREFBb0QsZ0JBQWdCLHFCQUFxQixpQ0FBaUMsa0JBQWtCLEVBQUUsNERBQTRELGdFQUFnRSx1Q0FBdUMsdUJBQXVCLGlEQUFpRCxnQ0FBZ0MsY0FBYywwSEFBMEgsS0FBSyxvRUFBb0UsV0FBVyxnQkFBZ0IsV0FBVyx5QkFBeUIsc0JBQXNCLGdFQUFnRSx3S0FBd0ssOERBQThELHNCQUFzQixpUEFBaVAseUJBQXlCLHdEQUF3RCxnQkFBZ0IscUJBQXFCLGtCQUFrQix5QkFBeUIsd0NBQXdDLHFPQUFxTyxzQkFBc0IsWUFBWSxzQkFBc0Isb0JBQW9CLHNCQUFzQix3REFBd0QseUJBQXlCLHFEQUFxRCx1REFBdUQsRUFBRSxrR0FBa0csd0JBQXdCLGFBQWEscUZBQXFGLDRCQUE0QixnQkFBZ0IsMkJBQTJCLDBEQUEwRCxrVkFBa1Ysc0JBQXNCLDRFQUE0RSxFQUFFLCtFQUErRSx3QkFBd0IsYUFBYSxXQUFXLG9LQUFvSyxzQkFBc0IsOERBQThELG1PQUFtTyxVQUFVLEVBQUUsNEZBQTRGLHdCQUF3QixhQUFhLHVMQUF1TCxXQUFXLFFBQVEscUNBQXFDLFVBQVUscUNBQXFDLFNBQVMscUNBQXFDLGVBQWUsbUZBQW1GLFFBQVEsOEJBQThCLFdBQVcsMENBQTBDLFNBQVMsUUFBUSxxQ0FBcUMsT0FBTyxVQUFVLHNCQUFzQixVQUFVLFlBQVksc0JBQXNCLE9BQU8sa0JBQWtCLGlCQUFpQixPQUFPLFNBQVMsc0RBQXNELGlCQUFpQiwwQkFBMEIsYUFBYSwrQ0FBK0MsMERBQTBELGNBQWMsc0NBQXNDLGdHQUFnRyx5Q0FBeUMsR0FBRyxFQUFFLHlKQUF5Six3QkFBd0IsYUFBYSw0RkFBNEYseUJBQXlCLDBDQUEwQyxnQkFBZ0IsMkJBQTJCLDRDQUE0Qyx1REFBdUQsRUFBRSxnREFBZ0Qsd0JBQXdCLGFBQWEseUtBQXlLLHFCQUFxQixpR0FBaUcsS0FBSyxlQUFlLDRCQUE0QiwrQ0FBK0Msa0JBQWtCLGVBQWUsb0JBQW9CLCtDQUErQyxrQkFBa0IsZUFBZSxvQkFBb0IsOEJBQThCLFlBQVksSUFBSSxhQUFhLHFDQUFxQywyQ0FBMkMsaUVBQWlFLFVBQVUsbUJBQW1CLDBCQUEwQixXQUFXLGdDQUFnQyxXQUFXLGdDQUFnQyxHQUFHLEtBQUssV0FBVywyQkFBMkIsMEZBQTBGLGtCQUFrQixvQkFBb0IsRUFBRSxJQUFJLDhCQUE4QixZQUFZLHVCQUF1QixhQUFhLEtBQUssU0FBUyx1RUFBdUUsMEJBQTBCLDRCQUE0QixrQ0FBa0MsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0Isb0JBQW9CLGlEQUFpRCx1QkFBdUIscUhBQXFILFVBQVUsRUFBRSxlQUFlLE9BQU8scUJBQXFCLHVCQUF1QixFQUFFLG1EQUFtRCwwQkFBMEIseUJBQXlCLG9CQUFvQixzQkFBc0IsOEJBQThCLDRFQUE0RSxtQ0FBbUMsUUFBUSxjQUFjLHlCQUF5QixxSkFBcUosWUFBWSxXQUFXLEtBQUssY0FBYyw4REFBOEQsRUFBRSwyRUFBMkUsd0JBQXdCLGFBQWEsV0FBVyw0REFBNEQsR0FBRyx3QkFBd0IsYUFBYSwyRkFBMkYsNEJBQTRCLGdCQUFnQiwyQkFBMkIsaUNBQWlDLDZCQUE2QixrQkFBa0IsNEpBQTRKLGdCQUFnQixzRkFBc0YsOENBQThDLElBQUkseUhBQXlILG1CQUFtQixFQUFFLDZEQUE2RCx3QkFBd0IsYUFBYSxXQUFXLG9XQUFvVyxFQUFFLHdKQUF3Six3QkFBd0IsYUFBYSxXQUFXLGtCQUFrQixvQ0FBb0MsdUJBQXVCLDRDQUE0QyxHQUFHLHdCQUF3QixhQUFhLGdEQUFnRCx3QkFBd0IsZ0JBQWdCLDJCQUEyQiw0REFBNEQsRUFBRSwyQ0FBMkMsd0JBQXdCLGFBQWEscWFBQXFhLG9CQUFvQixxU0FBcVMsd0JBQXdCLGdCQUFnQixzQkFBc0IsU0FBUyw4REFBOEQsaUJBQWlCLEVBQUUsa0JBQWtCLHFEQUFxRCx1Q0FBdUMsOEVBQThFLGVBQWUsRUFBRSxrQ0FBa0MsZ0JBQWdCLGlCQUFpQixxQ0FBcUMsZUFBZSxrREFBa0QsZUFBZSwyREFBMkQsZUFBZSw0REFBNEQsd0JBQXdCLFlBQVksbUZBQW1GLHFCQUFxQixnRUFBZ0Usa0JBQWtCLDhCQUE4QixNQUFNLDRCQUE0QixpQkFBaUIsY0FBYyxFQUFFLFdBQVcsS0FBSyxvQkFBb0IsbUJBQW1CLHVCQUF1QixFQUFFLG1CQUFtQix3QkFBd0IsdUJBQXVCLEVBQUUsMENBQTBDLEdBQUcsdUNBQXVDLDBCQUEwQixJQUFJLG1CQUFtQixnQkFBZ0IsNENBQTRDLHVDQUF1QyxXQUFXLFNBQVMsV0FBVyxtQkFBbUIsNkJBQTZCLEVBQUUsUUFBUSxjQUFjLDhCQUE4QixNQUFNLHNFQUFzRSx3QkFBd0IsaUJBQWlCLFNBQVMsMkNBQTJDLG9CQUFvQixtQkFBbUIsRUFBRSxzQkFBc0IscUVBQXFFLGdDQUFnQyxFQUFFLDZOQUE2TixtR0FBbUcsK0NBQStDLGtCQUFrQixtQkFBbUIseUNBQXlDLFNBQVMsNEJBQTRCLHlCQUF5QixHQUFHLFdBQVcsUUFBUSxjQUFjLHNCQUFzQixRQUFRLGVBQWUsUUFBUSxXQUFXLDBCQUEwQixJQUFJLG1CQUFtQixnQkFBZ0Isd0NBQXdDLGlDQUFpQyxnQkFBZ0IsaUZBQWlGLHVCQUF1QixFQUFFLHVCQUF1QixpQkFBaUIsMkJBQTJCLDhEQUE4RCx3QkFBd0IsTUFBTSxxQ0FBcUMsb0RBQW9ELGNBQWMsaUNBQWlDLGFBQWEsc0JBQXNCLCtGQUErRiwrUkFBK1IsT0FBTyx5QkFBeUIsNkJBQTZCLG1FQUFtRSxxRUFBcUUsb0xBQW9MLE9BQU8sOENBQThDLHdDQUF3Qyx1QkFBdUIseURBQXlELG9CQUFvQixvT0FBb08sbURBQW1ELGtCQUFrQiw4QkFBOEIsU0FBUyxXQUFXLHVCQUF1Qix1REFBdUQscUJBQXFCLHlCQUF5QixZQUFZLDBCQUEwQixpQkFBaUIsaUJBQWlCLGdSQUFnUixtQkFBbUIsdUNBQXVDLHdCQUF3QixPQUFPLDhCQUE4Qix1QkFBdUIsSUFBSSxxREFBcUQsbUNBQW1DLFVBQVUsSUFBSSxtQkFBbUIsa0JBQWtCLDZCQUE2QixFQUFFLGdCQUFnQixNQUFNLGtDQUFrQyw4QkFBOEIsT0FBTyxjQUFjLDJCQUEyQixjQUFjLGdCQUFnQixjQUFjLGtCQUFrQixjQUFjLHNCQUFzQixrQkFBa0Isd0JBQXdCLGtCQUFrQixrQ0FBa0Msa0JBQWtCLHFCQUFxQixxSEFBcUgsb0JBQW9CLG1DQUFtQyw2REFBNkQsMkJBQTJCLDhEQUE4RCxpQ0FBaUMsdUVBQXVFLHlCQUF5Qix5QkFBeUIsd1NBQXdTLGdjQUFnYyxFQUFFLG1FQUFtRSxzQkFBc0IsMkNBQTJDLDhCQUE4QixHQUFHLDhCQUE4QixvRUFBb0Usb0VBQW9FLDhCQUE4QixtR0FBbUcsMkJBQTJCLDJDQUEyQyxtREFBbUQsOEJBQThCLHNFQUFzRSx5Q0FBeUMsc0RBQXNELGNBQWMsRUFBRSw4Q0FBOEMsTUFBTSwrQkFBK0IsNkJBQTZCLFdBQVcscUNBQXFDLE9BQU8sZ0JBQWdCLE9BQU8sV0FBVyxtQkFBbUIsSUFBSSxPQUFPLDJDQUEyQyxhQUFhLGtFQUFrRSxrQ0FBa0MsNkRBQTZELEVBQUUsZ0JBQWdCLHFCQUFxQiw4REFBOEQsb0JBQW9CLDRCQUE0Qiw4REFBOEQsdURBQXVELHNCQUFzQixvTUFBb00sT0FBTyw4QkFBOEIsT0FBTyxrQkFBa0Isd0NBQXdDLGNBQWMsRUFBRSxzQkFBc0IsY0FBYyxFQUFFLHNCQUFzQixFQUFFLGtWQUFrVix3QkFBd0IsYUFBYSw2REFBNkQsa0JBQWtCLHdJQUF3SSx1R0FBdUcsV0FBVyxrQkFBa0Isa0VBQWtFLGtDQUFrQywwRUFBMEUsMkJBQTJCLEVBQUUsRUFBRSxhQUFhLEVBQUUsb0RBQW9ELHdCQUF3QixhQUFhLDhSQUE4UixjQUFjLE9BQU8sTUFBTSwwQkFBMEIsUUFBUSwyQ0FBMkMsTUFBTSwyQ0FBMkMsT0FBTyxpREFBaUQsVUFBVSxHQUFHLDBCQUEwQixJQUFJLDBCQUEwQixJQUFJLDJCQUEyQixRQUFRLG1DQUFtQyxjQUFjLDBCQUEwQixRQUFRLHFDQUFxQyxZQUFZLDBCQUEwQixpQkFBaUIsbUNBQW1DLGlCQUFpQix1Q0FBdUMscUJBQXFCLEdBQUcscUJBQXFCLElBQUkscUJBQXFCLElBQUkscUJBQXFCLE9BQU8sb0NBQW9DLFlBQVksb0NBQW9DLGdDQUFnQywwQ0FBMEMsZUFBZSxzQkFBc0IsT0FBTyx3RkFBd0YsR0FBRyxxQkFBcUIsa0JBQWtCLGNBQWMsMEJBQTBCLGdCQUFnQixHQUFHLDBDQUEwQyxJQUFJLDJDQUEyQyxJQUFJLDBDQUEwQyxXQUFXLFNBQVMscUNBQXFDLFVBQVUscUNBQXFDLFdBQVcsc0NBQXNDLFlBQVkscUNBQXFDLFVBQVUsc0NBQXNDLFVBQVUsb0NBQW9DLGNBQWMsVUFBVSxXQUFXLFdBQVcsVUFBVSxXQUFXLFVBQVUsRUFBRSxlQUFlLGNBQWMsbUJBQW1CLGlGQUFpRixFQUFFLDRQQUE0UCx3QkFBd0IsYUFBYSw0Q0FBNEMsd0JBQXdCLHNCQUFzQixnREFBZ0QsU0FBUyxxQ0FBcUMsR0FBRyxFQUFFLHVDQUF1Qyx3QkFBd0IsYUFBYSxtUUFBbVEsa0JBQWtCLDZUQUE2VCxrQkFBa0IsMkJBQTJCLDBFQUEwRSxpQ0FBaUMsNEJBQTRCLDBFQUEwRSxpQ0FBaUMsNEJBQTRCLHdCQUF3QiwrSEFBK0gsMEJBQTBCLDRCQUE0Qiw2TUFBNk0sMFRBQTBULFlBQVksSUFBSSxLQUFLLDBCQUEwQix3REFBd0QsMENBQTBDLDROQUE0Tix5NkRBQXk2RCxnQkFBZ0IsZ0JBQWdCLFlBQVksb0JBQW9CLFVBQVUsU0FBUyxjQUFjLGlCQUFpQixXQUFXLEtBQUssV0FBVyxlQUFlLFNBQVMsY0FBYyx1QkFBdUIsV0FBVyxlQUFlLE9BQU8sTUFBTSxTQUFTLGdCQUFnQixnQkFBZ0IsOEJBQThCLFdBQVcsMENBQTBDLFVBQVUsd0JBQXdCLFdBQVcsUUFBUSxJQUFJLEtBQUssNENBQTRDLCtDQUErQyxRQUFRLFFBQVEsSUFBSSxjQUFjLFFBQVEsSUFBSSxvREFBb0QsU0FBUyx5QkFBeUIsV0FBVyxRQUFRLElBQUksS0FBSyw0Q0FBNEMsK0NBQStDLFFBQVEsUUFBUSxJQUFJLGNBQWMsUUFBUSxJQUFJLG9EQUFvRCxVQUFVLDJFQUEyRSxnQkFBZ0IsaUJBQWlCLFdBQVcsaUJBQWlCLEtBQUssTUFBTSxrQkFBa0IsOEJBQThCLHdCQUF3QixpQkFBaUIsZ0JBQWdCLFdBQVcsZ0JBQWdCLFVBQVUsNENBQTRDLElBQUksTUFBTSxLQUFLLElBQUksMEJBQTBCLHNCQUFzQixlQUFlLDRCQUE0QixxTUFBcU0sV0FBVyxLQUFLLDhCQUE4QixxQ0FBcUMsbUNBQW1DLCtCQUErQix5Q0FBeUMsUUFBUSxJQUFJLDZMQUE2TCxxQkFBcUIsNkRBQTZELE1BQU0saUJBQWlCLFFBQVEsSUFBSSxzRUFBc0UscUJBQXFCLFNBQVMsR0FBRyxzQkFBc0IsOElBQThJLFlBQVksU0FBUyxRQUFRLElBQUksb0JBQW9CLElBQUksZUFBZSxRQUFRLElBQUksWUFBWSxJQUFJLG9KQUFvSiwyRkFBMkYsSUFBSSxtQ0FBbUMsSUFBSSxzQ0FBc0MsUUFBUSxJQUFJLFlBQVksSUFBSSxZQUFZLElBQUksMkRBQTJELFFBQVEsSUFBSSxZQUFZLElBQUksWUFBWSxJQUFJLGtIQUFrSCxRQUFRLElBQUksa0VBQWtFLFFBQVEsSUFBSSxZQUFZLElBQUksWUFBWSxJQUFJLDZEQUE2RCxxR0FBcUcscUJBQXFCLGtCQUFrQix1QkFBdUIsa0JBQWtCLHVCQUF1QixrQkFBa0IsT0FBTyxPQUFPLGdVQUFnVSxxREFBcUQscUNBQXFDLGtCQUFrQiw0QkFBNEIsWUFBWSwyREFBMkQsOFJBQThSLGlDQUFpQyxRQUFRLElBQUksS0FBSyx1QkFBdUIsb21CQUFvbUIsYUFBYSxtQ0FBbUMsMERBQTBELHNkQUFzZCxzQkFBc0IsOERBQThELHlCQUF5Qix1QkFBdUIsS0FBSyxxQkFBcUIsaURBQWlELEVBQUUsZ05BQWdOLHdCQUF3QixhQUFhLDJHQUEyRyxrQkFBa0IsK0JBQStCLDRCQUE0QixRQUFRLGdCQUFnQiwyQkFBMkIsK0JBQStCLDREQUE0RCxLQUFLLCthQUErYSxLQUFLLEVBQUUsd0NBQXdDLFFBQVEsSUFBSSxLQUFLLDBEQUEwRCxnQkFBZ0IsSUFBSSwwQkFBMEIsK0lBQStJLDJFQUEyRSxzQkFBc0IsbUJBQW1CLEVBQUUsb0dBQW9HLHdCQUF3QixhQUFhLFNBQVMsNEVBQTRFLHNCQUFzQiwwS0FBMEssYUFBYSxFQUFFLDRGQUE0Rix3QkFBd0IsYUFBYSwyTUFBMk0sY0FBYyxVQUFVLHNCQUFzQixlQUFlLHNDQUFzQyxjQUFjLHFCQUFxQixTQUFTLFFBQVEsNkJBQTZCLFNBQVMsNkJBQTZCLFNBQVMsc0NBQXNDLFNBQVMsc0NBQXNDLFNBQVMseUJBQXlCLFdBQVcsVUFBVSxXQUFXLFFBQVEsT0FBTyxtQ0FBbUMsUUFBUSx3Q0FBd0MsT0FBTyxPQUFPLHlDQUF5QyxVQUFVLElBQUksV0FBVyxHQUFHLFFBQVEsUUFBUSw2QkFBNkIsU0FBUyw2QkFBNkIsU0FBUyxzQ0FBc0MsU0FBUyxzQ0FBc0MsU0FBUyx5QkFBeUIsV0FBVyxVQUFVLFdBQVcsUUFBUSxPQUFPLG1DQUFtQyxRQUFRLHdDQUF3QyxPQUFPLE9BQU8seUNBQXlDLFVBQVUsSUFBSSxXQUFXLElBQUksd0NBQXdDLEVBQUUsZ0tBQWdLLHdCQUF3QixhQUFhLGdFQUFnRSxrQ0FBa0MsK0JBQStCLGlCQUFpQiwyQkFBMkIsd0RBQXdELGlEQUFpRCxFQUFFLHlDQUF5Qyx3QkFBd0IsYUFBYSw4QkFBOEIscUJBQXFCLFdBQVcsR0FBRyxFQUFFLG9CQUFvQix3QkFBd0IsYUFBYSxXQUFXLHdiQUF3Yix3bkJBQXduQixHQUFHLHdCQUF3QixhQUFhLGdGQUFnRixjQUFjLHFCQUFxQixnQkFBZ0IsV0FBVywwQkFBMEIsU0FBUyxTQUFTLGdCQUFnQixXQUFXLGNBQWMsNEJBQTRCLFFBQVEsV0FBVywyRkFBMkYsaUJBQWlCLFdBQVcsS0FBSyxvQkFBb0IsNEJBQTRCLFNBQVMsY0FBYywyQkFBMkIsSUFBSSxZQUFZLFNBQVMsY0FBYywrQ0FBK0MsMkNBQTJDLElBQUksZ0JBQWdCLHNDQUFzQyxXQUFXLE9BQU8sa0JBQWtCLEVBQUUsRUFBRSxnQkFBZ0IsY0FBYyxZQUFZLDZDQUE2QyxhQUFhLFdBQVcsd0JBQXdCLHVCQUF1Qix1RkFBdUYsNkNBQTZDLGlCQUFpQixTQUFTLHdCQUF3QixzQ0FBc0MsZ0RBQWdELHNCQUFzQiwyQ0FBMkMsbUNBQW1DLDhCQUE4QixtS0FBbUssdUJBQXVCLHVEQUF1RCxzQkFBc0IscUVBQXFFLHlEQUF5RCxTQUFTLDBCQUEwQixtR0FBbUcsd0JBQXdCLGtCQUFrQixvQkFBb0IsYUFBYSxFQUFFLGdFQUFnRSwyUEFBMlAsVUFBVSxTQUFTLGtCQUFrQixXQUFXLFNBQVMsOEJBQThCLFlBQVksMkNBQTJDLFlBQVksa0NBQWtDLDZCQUE2Qiw2QkFBNkIsV0FBVyxzQkFBc0Isb0dBQW9HLEdBQUcscUNBQXFDLHNCQUFzQixLQUFLLEVBQUUsK0RBQStELHdCQUF3QixhQUFhLHVDQUF1Qyw0QkFBNEIsa0JBQWtCLElBQUksMkxBQTJMLGFBQWEsNkJBQTZCLEVBQUUsRUFBRSxXQUFXLElBQUksaUtBQWlLLE1BQU0sSUFBSSxpS0FBaUssS0FBSyw0QkFBNEIsa0JBQWtCLHlFQUF5RSxZQUFZLElBQUksd0RBQXdELE9BQU8sNEtBQTRLLEdBQUcsRUFBRSx1QkFBdUIsd0JBQXdCLGFBQWEsNEVBQTRFLDRCQUE0QixnQkFBZ0IsMkJBQTJCLDRQQUE0UCx3QkFBd0IsbUdBQW1HLFdBQVcsc0JBQXNCLG9CQUFvQixhQUFhLElBQUksY0FBYyxtQkFBbUIsOE5BQThOLDBCQUEwQixFQUFFLDZEQUE2RCx3QkFBd0IsYUFBYSxTQUFTLGdOQUFnTixhQUFhLEVBQUUscUZBQXFGLHdCQUF3QixhQUFhLCtRQUErUSxjQUFjLDRDQUE0QyxnQkFBZ0IsK0RBQStELGdCQUFnQiwwRkFBMEYsY0FBYywyQ0FBMkMsU0FBUyxtQkFBbUIsa0JBQWtCLEVBQUUsa0JBQWtCLGlFQUFpRSxxSEFBcUgsdUJBQXVCLDBCQUEwQixrQkFBa0IseURBQXlELDZmQUE2ZiwrQkFBK0IsK0VBQStFLEVBQUUsOERBQThELGlEQUFpRCxvRUFBb0Usc0ZBQXNGLG9EQUFvRCxFQUFFLG1FQUFtRSwyTUFBMk0scURBQXFELG9DQUFvQyx1RUFBdUUsNElBQTRJLHlFQUF5RSxvT0FBb08scUtBQXFLLDJEQUEyRCw0Q0FBNEMsaUZBQWlGLDZDQUE2QywyQkFBMkIsNkNBQTZDLGlEQUFpRCxvQkFBb0Isa0JBQWtCLHVFQUF1RSx3QkFBd0IsRUFBRSw2RUFBNkUsYUFBYSxnRUFBZ0UsOEVBQThFLEtBQUssYUFBYSxxQkFBcUIsb0RBQW9ELGdFQUFnRSxzSEFBc0gsRUFBRSxnQkFBZ0IsMkJBQTJCLDRCQUE0QixrQ0FBa0MseUJBQXlCLG1CQUFtQixxQkFBcUIsa0pBQWtKLEVBQUUsYUFBYSwrREFBK0Qsd0JBQXdCLEVBQUUsNERBQTRELEtBQUssa0JBQWtCLCtEQUErRCx3QkFBd0IsRUFBRSxvRkFBb0YsYUFBYSw0QkFBNEIsMEJBQTBCLElBQUksYUFBYSxxRUFBcUUsd0JBQXdCLEVBQUUsNkdBQTZHLEtBQUssYUFBYSxtQkFBbUIsOEJBQThCLEVBQUUsb0JBQW9CLG9CQUFvQixtQkFBbUIsb0dBQW9HLG9DQUFvQyxxREFBcUQsVUFBVSxpTEFBaUwsd01BQXdNLG1KQUFtSiwwQ0FBMEMsSUFBSSw4QkFBOEIsT0FBTyxtQkFBbUIsb0JBQW9CLGlDQUFpQyxxREFBcUQsNEJBQTRCLFNBQVMsd0JBQXdCLHlDQUF5QyxtQkFBbUIsNENBQTRDLHFIQUFxSCwwQ0FBMEMsaUNBQWlDLE9BQU8seUNBQXlDLFVBQVUsRUFBRSxFQUFFLGNBQWMsMkNBQTJDLGtCQUFrQixxQkFBcUIsZ0NBQWdDLG9EQUFvRCxTQUFTLGtCQUFrQixnSUFBZ0ksY0FBYyx1QkFBdUIsY0FBYyx3QkFBd0IsY0FBYyxrRkFBa0Ysa0JBQWtCLElBQUksa0JBQWtCLGNBQWMsZUFBZSwrSUFBK0kscUJBQXFCLFdBQVcsS0FBSyxnQ0FBZ0MsV0FBVyxzQkFBc0IsK0NBQStDLFNBQVMsUUFBUSw0R0FBNEcsd0JBQXdCLGlDQUFpQywyREFBMkQscUVBQXFFLG9CQUFvQixtQkFBbUIscURBQXFELHFCQUFxQixtREFBbUQsOENBQThDLDhFQUE4RSwrQkFBK0IsMEJBQTBCLDBGQUEwRiw2QkFBNkIsMEJBQTBCLEVBQUUscUJBQXFCLEdBQUcsb0JBQW9CLGtCQUFrQiw2QkFBNkIsbUJBQW1CLGtCQUFrQiw2Q0FBNkMsd0NBQXdDLEVBQUUsMEZBQTBGLGVBQWUsU0FBUywyR0FBMkcsZ0RBQWdELHFIQUFxSCxzQkFBc0Isa0JBQWtCLGdCQUFnQixzTEFBc0wsc0pBQXNKLGlOQUFpTixpSUFBaUksa0JBQWtCLGdCQUFnQixnQkFBZ0IsNEJBQTRCLHlEQUF5RCxtREFBbUQsMEJBQTBCLGNBQWMsK0JBQStCLDBEQUEwRCxrQkFBa0IsSUFBSSwyQ0FBMkMseURBQXlELDJEQUEyRCxRQUFRLEVBQUUsZ0JBQWdCLGtCQUFrQixLQUFLLGVBQWUsU0FBUyxnQkFBZ0IsZ0JBQWdCLHNDQUFzQywyQkFBMkIsU0FBUyxjQUFjLHNCQUFzQix1QkFBdUIsZ0JBQWdCLGdCQUFnQiwyQkFBMkIsMkJBQTJCLGNBQWMsMkJBQTJCLHdCQUF3QixxR0FBcUcsd0JBQXdCLGNBQWMsWUFBWSxvU0FBb1MsaUNBQWlDLDRCQUE0QixrQ0FBa0MsK0JBQStCLHFEQUFxRCxFQUFFLGlLQUFpSyxnQ0FBZ0MscUJBQXFCLGFBQWEsWUFBWSw4QkFBOEIsK0JBQStCLDZCQUE2QiwrQkFBK0IscUdBQXFHLDhDQUE4Qyw2Q0FBNkMsRUFBRSxxRUFBcUUsMEdBQTBHLGVBQWUsNEJBQTRCLGdCQUFnQixxQkFBcUIsc0NBQXNDLEVBQUUscURBQXFELGlCQUFpQixXQUFXLGdHQUFnRyw2QkFBNkIsaURBQWlELHVHQUF1Ryw4QkFBOEIsT0FBTyx3QkFBd0IsbUNBQW1DLDZDQUE2QyxnSEFBZ0gsdUNBQXVDLHFCQUFxQixpQkFBaUIsd0JBQXdCLHFDQUFxQyx1QkFBdUIsYUFBYSxrR0FBa0csNkJBQTZCLGtFQUFrRSwyQkFBMkIsa0NBQWtDLDRFQUE0RSwrQkFBK0IsK0JBQStCLHVDQUF1QywyQ0FBMkMsK0JBQStCLGdCQUFnQixHQUFHLHNCQUFzQixzQ0FBc0MsRUFBRSx1RUFBdUUseUVBQXlFLGFBQWEsK0JBQStCLDhGQUE4RixFQUFFLGdDQUFnQywrQ0FBK0MsbUNBQW1DLGdEQUFnRCx5QkFBeUIsbUVBQW1FLG1GQUFtRixjQUFjLEVBQUUsdUVBQXVFLHNKQUFzSiw0QkFBNEIsNEJBQTRCLHlCQUF5QixtSEFBbUgsMkVBQTJFLDZGQUE2RixjQUFjLEVBQUUsdUVBQXVFLDRHQUE0Ryw0QkFBNEIsNEJBQTRCLHlDQUF5Qyx1QkFBdUIsWUFBWSx1QkFBdUIsWUFBWSxlQUFlLEVBQUUsc05BQXNOLHdCQUF3QixhQUFhLGdFQUFnRSxXQUFXLHFDQUFxQyxVQUFVLGtCQUFrQixpQkFBaUIsYUFBYSx1Q0FBdUMsYUFBYSx5Q0FBeUMsWUFBWSwyRUFBMkUsV0FBVyxpRkFBaUYsT0FBTyw2QkFBNkIsOEJBQThCLEVBQUUsOEJBQThCLGtCQUFrQixPQUFPLE9BQU8saUNBQWlDLFFBQVEsK0NBQStDLGlCQUFpQixrQ0FBa0MsZUFBZSxhQUFhLFlBQVksZUFBZSxjQUFjLFlBQVksV0FBVyx1RkFBdUYsU0FBUywwQ0FBMEMsUUFBUSxzREFBc0QsWUFBWSxpQ0FBaUMsT0FBTyxPQUFPLGlDQUFpQyxRQUFRLHdDQUF3QyxrQkFBa0IsaUJBQWlCLFdBQVcsU0FBUywwQ0FBMEMsUUFBUSxpQ0FBaUMsUUFBUSx3Q0FBd0MsaUJBQWlCLE9BQU8sdUZBQXVGLGdIQUFnSCxnSEFBZ0gsRUFBRSwrQ0FBK0Msd0JBQXdCLGFBQWEsbUlBQW1JLGtCQUFrQixrQkFBa0IsdUNBQXVDLGtEQUFrRCx1Q0FBdUMsZ0NBQWdDLGlEQUFpRCx1QkFBdUIsb0JBQW9CLHdFQUF3RSxjQUFjLG9GQUFvRixvQkFBb0IsT0FBTyw2REFBNkQsd0NBQXdDLHdCQUF3QixhQUFhLHlCQUF5Qix5R0FBeUcsV0FBVyxLQUFLLGdGQUFnRiwyREFBMkQsV0FBVyxnQ0FBZ0MsS0FBSywyQ0FBMkMsc0hBQXNILHVCQUF1Qix1QkFBdUIsbUJBQW1CLFdBQVcsVUFBVSxXQUFXLGNBQWMsUUFBUSxrQkFBa0IsNkRBQTZELDhCQUE4QixVQUFVLEVBQUUsZ0RBQWdELEtBQUsscURBQXFELDBFQUEwRSxxQkFBcUIsMENBQTBDLEVBQUUsb0hBQW9ILHdCQUF3QixhQUFhLGlFQUFpRSx3QkFBd0IsNkNBQTZDLFdBQVcsS0FBSyxzQ0FBc0MsV0FBVyxLQUFLLGlDQUFpQywyR0FBMkcsb0JBQW9CLEVBQUUsOEJBQThCLHdCQUF3QixhQUFhLDhGQUE4Riw0QkFBNEIsZ0JBQWdCLDJCQUEyQixnQkFBZ0IsNEJBQTRCLG1EQUFtRCw2RUFBNkUsa0JBQWtCLCtDQUErQyxrQ0FBa0MsNkVBQTZFLDhCQUE4QixVQUFVLEVBQUUsNEZBQTRGLDhDQUE4QyxXQUFXLEVBQUUsb0RBQW9ELGtEQUFrRCxXQUFXLElBQUksRUFBRSx1RkFBdUYsd0JBQXdCLGFBQWEsbUNBQW1DLGlEQUFpRCwwQkFBMEIsMkNBQTJDLG1CQUFtQixnQkFBZ0IsSUFBSSxxQkFBcUIsWUFBWSx3Q0FBd0MsUUFBUSxnREFBZ0Qsb0NBQW9DLHdCQUF3Qix5QkFBeUIsa0NBQWtDLCtCQUErQiw4QkFBOEIsNkNBQTZDLDBCQUEwQixZQUFZLEVBQUUsZ0JBQWdCLHdCQUF3QixhQUFhLDRGQUE0Riw4QkFBOEIsaUdBQWlHLFNBQVMsOEJBQThCLHFDQUFxQyw0QkFBNEIsd0VBQXdFLGlCQUFpQiwrQkFBK0IscUJBQXFCLGlHQUFpRyxxS0FBcUssZ0JBQWdCLHVGQUF1RixlQUFlLHNHQUFzRyxxREFBcUQsdURBQXVELDhKQUE4SixFQUFFLHFGQUFxRix3QkFBd0IsYUFBYSxXQUFXLGlsQkFBaWxCLEVBQUUsNFFBQTRRLHdCQUF3QixhQUFhLGdFQUFnRSxXQUFXLGVBQWUsYUFBYSxnQkFBZ0IsWUFBWSxxQkFBcUIsaUJBQWlCLEdBQUcsRUFBRSwrQ0FBK0Msd0JBQXdCLGFBQWEsOEVBQThFLDBCQUEwQiw4QkFBOEIsMkJBQTJCLFlBQVksRUFBRSx3RUFBd0Usd0JBQXdCLGFBQWEsaUlBQWlJLDRCQUE0Qix3Q0FBd0MsY0FBYyxXQUFXLDRFQUE0RSxFQUFFLDRCQUE0Qix3REFBd0QsNENBQTRDLGlFQUFpRSxLQUFLLHlMQUF5TCxpSUFBaUksaUZBQWlGLHdCQUF3QixLQUFLLDZDQUE2Qyx3RUFBd0UsTUFBTSx1QkFBdUIsSUFBSSxjQUFjLGdEQUFnRCxPQUFPLE1BQU0sNkJBQTZCLElBQUksa0JBQWtCLGdEQUFnRCxPQUFPLDZCQUE2QixLQUFLLDhDQUE4QywyR0FBMkcsaUhBQWlILEVBQUUseUNBQXlDLFFBQVEsNkVBQTZFLFlBQVksSUFBSSw4QkFBOEIsbUJBQW1CLFlBQVksSUFBSSw4QkFBOEIscURBQXFELCtDQUErQyx3SkFBd0osdURBQXVELDZGQUE2RixrQkFBa0IsUUFBUSxPQUFPLEdBQUcsRUFBRSx1SEFBdUgsd0JBQXdCLGFBQWEsZ0ZBQWdGLHdCQUF3Qiw0REFBNEQsOEJBQThCLDBCQUEwQixxQkFBcUIsNkNBQTZDLGFBQWEsaUJBQWlCLFdBQVcsbU9BQW1PLE9BQU8sMkRBQTJELCtIQUErSCxHQUFHLEVBQUUsNERBQTRELHdCQUF3QixhQUFhLGlOQUFpTiw4RkFBOEYsTUFBTSwwQkFBMEIsT0FBTyxxQ0FBcUMsNkZBQTZGLE9BQU8sNkRBQTZELEdBQUcsb0RBQW9ELDhCQUE4Qiw2R0FBNkcsY0FBYyxtQkFBbUIsa0dBQWtHLEVBQUUsZ0tBQWdLLHdCQUF3QixhQUFhLCtOQUErTixrQkFBa0Isb0ZBQW9GLGtCQUFrQix5QkFBeUIseUJBQXlCLHFOQUFxTix1RkFBdUYsMENBQTBDLCtFQUErRSxzQkFBc0IscUNBQXFDLG9CQUFvQix5QkFBeUIsc0JBQXNCLEVBQUUsZUFBZSxPQUFPLGlwQkFBaXBCLDJHQUEyRyxzQkFBc0Isd0RBQXdELHlCQUF5Qix1QkFBdUIsS0FBSyxxQkFBcUIsaURBQWlELEVBQUUscUlBQXFJLHdCQUF3QixhQUFhLHlGQUF5Riw0QkFBNEIsZ0JBQWdCLDJCQUEyQixhQUFhLHdCQUF3Qiw0SEFBNEgsaUJBQWlCLEtBQUssS0FBSywyREFBMkQsc0NBQXNDLFNBQVMsbUJBQW1CLFFBQVEsMENBQTBDLGtDQUFrQyw4Q0FBOEMsWUFBWSxXQUFXLEtBQUssV0FBVyxrQ0FBa0MsUUFBUSxTQUFTLDhCQUE4QixFQUFFLGlFQUFpRSx3QkFBd0IsYUFBYSxTQUFTLDJHQUEyRyxzQkFBc0Isa0lBQWtJLGFBQWEsRUFBRSx1R0FBdUcsd0JBQXdCLGFBQWEsa0dBQWtHLGNBQWMsT0FBTyxRQUFRLFVBQVUsaUJBQWlCLDRCQUE0QixRQUFRLFVBQVUsc0JBQXNCLDRCQUE0QixZQUFZLHNCQUFzQiw0QkFBNEIsbUJBQW1CLGtCQUFrQixtQkFBbUIsV0FBVyxTQUFTLDZDQUE2QyxPQUFPLHNEQUFzRCxpWUFBaVksTUFBTSx3REFBd0QsT0FBTyxrRkFBa0YsVUFBVSwwQ0FBMEMsaUJBQWlCLHlEQUF5RCxFQUFFLDRFQUE0RSx3QkFBd0IsYUFBYSwySUFBMkksY0FBYyw4QkFBOEIsY0FBYywyQkFBMkIsd0JBQXdCLG9FQUFvRSx3SEFBd0gsb0VBQW9FLElBQUksS0FBSyxtQkFBbUIsZ0hBQWdILFlBQVksK0JBQStCLDJPQUEyTyxzRkFBc0YsRUFBRSxrSEFBa0gsd0JBQXdCLGFBQWEscURBQXFELHdCQUF3QixzRkFBc0YsUUFBUSxXQUFXLEtBQUssV0FBVyxtSUFBbUksT0FBTyxhQUFhLG9KQUFvSiw4QkFBOEIsV0FBVyxLQUFLLE9BQU8sWUFBWSxXQUFXLEtBQUssV0FBVywwQ0FBMEMsRUFBRSw4QkFBOEIsd0JBQXdCLGFBQWEseU5BQXlOLGtCQUFrQix5RkFBeUYsV0FBVyxpQ0FBaUMsZ0JBQWdCLDJCQUEyQiwyVkFBMlYsa0NBQWtDLFFBQVEsY0FBYyxnQ0FBZ0MseUNBQXlDLFdBQVcsaUNBQWlDLDJCQUEyQixFQUFFLHFIQUFxSCx3QkFBd0IsYUFBYSxpSkFBaUosNEJBQTRCLGlCQUFpQixNQUFNLDhHQUE4RyxnQ0FBZ0MsS0FBSyw4QkFBOEIsS0FBSyxpQkFBaUIsNkJBQTZCLDBDQUEwQyw2QkFBNkIsOERBQThELGlCQUFpQixvQkFBb0IsVUFBVSxjQUFjLGdCQUFnQixFQUFFLGlGQUFpRix3QkFBd0IsYUFBYSxTQUFTLDBpQkFBMGlCLGFBQWEsRUFBRSw4TkFBOE4sd0JBQXdCLGFBQWEsV0FBVyxlQUFlLDZFQUE2RSxlQUFlLDZDQUE2QyxvQkFBb0Isc0RBQXNELEdBQUcsd0JBQXdCLGFBQWEsZ0RBQWdELDBCQUEwQixTQUFTLGdCQUFnQiwyQkFBMkIsWUFBWSxXQUFXLEtBQUssV0FBVyxvQ0FBb0MsS0FBSyxPQUFPLHFFQUFxRSxFQUFFLDJDQUEyQyx3QkFBd0IsYUFBYSxrRkFBa0YsNEJBQTRCLDZCQUE2Qix3QkFBd0IscURBQXFELHNFQUFzRSxxQ0FBcUMsNkNBQTZDLDJCQUEyQiw2Q0FBNkMsMkRBQTJELGVBQWUscUJBQXFCLHFCQUFxQiw4Q0FBOEMseXBCQUF5cEIsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsd0VBQXdFLHdCQUF3QixhQUFhLGdIQUFnSCxXQUFXLG9CQUFvQixrRkFBa0YsOEJBQThCLDBCQUEwQixxQkFBcUIsa0NBQWtDLDhDQUE4QyxlQUFlLHNCQUFzQiwrSkFBK0osaURBQWlELHdDQUF3Qyw2REFBNkQsRUFBRSxJQUFJLEVBQUUsc0ZBQXNGLHdCQUF3QixhQUFhLDZKQUE2Siw0Q0FBNEMsb0JBQW9CLFNBQVMsMENBQTBDLFNBQVMsMEVBQTBFLGVBQWUsdUNBQXVDLGlDQUFpQyxPQUFPLDBKQUEwSixXQUFXLGtGQUFrRixVQUFVLDBDQUEwQyxpQkFBaUIsaUJBQWlCLGtCQUFrQixvQkFBb0IsY0FBYyxxRUFBcUUsNkJBQTZCLFVBQVUscUJBQXFCLHFCQUFxQixvQkFBb0IsK0JBQStCLGdCQUFnQixXQUFXLEtBQUssaUJBQWlCLGNBQWMsYUFBYSwrQkFBK0Isb0JBQW9CLFdBQVcsS0FBSyxpQkFBaUIsa0JBQWtCLG1CQUFtQiwrQkFBK0Isa0JBQWtCLFdBQVcsS0FBSyxpQkFBaUIseUJBQXlCLHVCQUF1QiwrQkFBK0IsbUJBQW1CLFdBQVcsS0FBSyxpQkFBaUIseUJBQXlCLHdCQUF3QixpQ0FBaUMseUJBQXlCLFdBQVcsS0FBSyxpQkFBaUIseUNBQXlDLG1DQUFtQyxrQ0FBa0MsdUNBQXVDLDhCQUE4QixrQ0FBa0MsaUJBQWlCLFdBQVcsS0FBSyxpQkFBaUIsaUJBQWlCLHNCQUFzQixTQUFTLHFCQUFxQixnREFBZ0QsZ0NBQWdDLFlBQVksYUFBYSxXQUFXLEtBQUssaUJBQWlCLFVBQVUsdUJBQXVCLGdCQUFnQixpQkFBaUIsK0JBQStCLG9CQUFvQixXQUFXLEtBQUssaUJBQWlCLG9CQUFvQiw4QkFBOEIsa0NBQWtDLHNCQUFzQixRQUFRLGtCQUFrQixpQkFBaUIsa0JBQWtCLEtBQUssV0FBVyxLQUFLLGlCQUFpQixVQUFVLFVBQVUsaUJBQWlCLGtDQUFrQyxvQ0FBb0MsNERBQTRELFdBQVcsbUJBQW1CLDBEQUEwRCxnQkFBZ0IsZ0JBQWdCLGdCQUFnQixlQUFlLGdCQUFnQix3QkFBd0IsK0JBQStCLFdBQVcsZ0JBQWdCLDJCQUEyQiwwQkFBMEIsb0NBQW9DLFFBQVEsV0FBVyxjQUFjLGtCQUFrQixzQkFBc0IsK0JBQStCLE9BQU8sZ0VBQWdFLGdCQUFnQiw4QkFBOEIsUUFBUSxXQUFXLEtBQUssR0FBRyxVQUFVLDhCQUE4QixzR0FBc0cscUJBQXFCLFFBQVEsV0FBVyxxQkFBcUIsa0RBQWtELEVBQUUsU0FBUyxpQ0FBaUMsY0FBYyxxQ0FBcUMsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLEtBQUsscUNBQXFDLDZDQUE2QyxJQUFJLDBIQUEwSCxtQkFBbUIscUJBQXFCLFFBQVEsV0FBVyxrQkFBa0IsNkJBQTZCLGlDQUFpQyx3QkFBd0IsRUFBRSx1SEFBdUgsd0JBQXdCLGFBQWEsMkxBQTJMLHVEQUF1RCxTQUFTLDBDQUEwQyxTQUFTLDBFQUEwRSxZQUFZLHNGQUFzRixRQUFRLHFDQUFxQyxlQUFlLDBDQUEwQyxpQkFBaUIsOEJBQThCLFNBQVMsZ0JBQWdCLHNDQUFzQyxpQkFBaUIsd0RBQXdELHlEQUF5RCx5REFBeUQsU0FBUyxpQ0FBaUMsY0FBYyw0QkFBNEIsTUFBTSwwQkFBMEIscUNBQXFDLHdEQUF3RCx1QkFBdUIsNkNBQTZDLFNBQVMsMEJBQTBCLCtDQUErQyxjQUFjLHdCQUF3QixvQkFBb0IsOEJBQThCLGVBQWUsaUJBQWlCLHNGQUFzRixVQUFVLDJCQUEyQixpQkFBaUIsNEJBQTRCLGlCQUFpQiwyQkFBMkIsZUFBZSw0QkFBNEIsZ0JBQWdCLDJCQUEyQixlQUFlLDRCQUE0QixnQkFBZ0IsNEJBQTRCLFdBQVcseUJBQXlCLDRCQUE0QixXQUFXLHVCQUF1Qiw0QkFBNEIsV0FBVyx3QkFBd0IsNEJBQTRCLFdBQVcsd0JBQXdCLDRCQUE0QixXQUFXLHlCQUF5Qiw0QkFBNEIsV0FBVyx1QkFBdUIsNEJBQTRCLFdBQVcsd0JBQXdCLDRCQUE0QixXQUFXLHdCQUF3QixPQUFPLHFCQUFxQiw0QkFBNEIsT0FBTyxxQkFBcUIsNkJBQTZCLHdDQUF3QyxLQUFLLEtBQUssaUJBQWlCLHVEQUF1RCxpQkFBaUIsbUJBQW1CLGFBQWEsaUJBQWlCLDZDQUE2QyxpQkFBaUIsbUJBQW1CLGdCQUFnQixPQUFPLGdDQUFnQyxJQUFJLEtBQUssb0NBQW9DLGdDQUFnQyxnQkFBZ0IsWUFBWSxXQUFXLEtBQUssaUNBQWlDLEVBQUUsNEdBQTRHLHdCQUF3QixhQUFhLCtHQUErRyxnQkFBZ0Isc0dBQXNHLDZDQUE2Qyx3R0FBd0csUUFBUSxXQUFXLDhCQUE4QixpRUFBaUUsUUFBUSxNQUFNLFFBQVEsV0FBVyxLQUFLLGtEQUFrRCxnREFBZ0QsV0FBVyxzRUFBc0UscUJBQXFCLHFDQUFxQyxXQUFXLDJDQUEyQyxPQUFPLFFBQVEsV0FBVyxxQ0FBcUMsUUFBUSxXQUFXLEtBQUssb0JBQW9CLFdBQVcsd0NBQXdDLHNDQUFzQyxJQUFJLDBCQUEwQixRQUFRLElBQUksS0FBSyxvRUFBb0UsUUFBUSxXQUFXLHdGQUF3RixFQUFFLFNBQVMsd0RBQXdELFNBQVMsMENBQTBDLFNBQVMsNkNBQTZDLGFBQWEsaUNBQWlDLFNBQVMsaUNBQWlDLGlDQUFpQyxRQUFRLHFCQUFxQixtQ0FBbUMsaUJBQWlCLGlCQUFpQixrQ0FBa0MsV0FBVyxnQkFBZ0Isc0NBQXNDLDBCQUEwQiw4Q0FBOEMsTUFBTSxJQUFJLE1BQU0sTUFBTSxNQUFNLEdBQUcsNkJBQTZCLGFBQWEsV0FBVyxLQUFLLGNBQWMsaURBQWlELHNEQUFzRCwwQ0FBMEMsc0JBQXNCLFNBQVMsMkJBQTJCLGVBQWUsUUFBUSxXQUFXLHdCQUF3QixXQUFXLGlCQUFpQixVQUFVLEVBQUUsaUZBQWlGLHdCQUF3QixhQUFhLHVDQUF1QyxnQkFBZ0IseUJBQXlCLDJEQUEyRCxxQkFBcUIsWUFBWSxhQUFhLFlBQVksR0FBRyx3QkFBd0IsYUFBYSx5RkFBeUYscURBQXFELFNBQVMsMENBQTBDLFNBQVMsMEVBQTBFLFFBQVEsd0ZBQXdGLGlCQUFpQiw4QkFBOEIsU0FBUyxnQkFBZ0Isc0NBQXNDLGdEQUFnRCxpQ0FBaUMsY0FBYyw0QkFBNEIsTUFBTSwwQkFBMEIscUNBQXFDLDRDQUE0QyxvQ0FBb0MsUUFBUSxJQUFJLFVBQVUsWUFBWSx5QkFBeUIsZ0JBQWdCLHFDQUFxQyxzQkFBc0Isc0NBQXNDLHVCQUF1QixXQUFXLElBQUksZ0JBQWdCLFNBQVMsK0RBQStELFFBQVEsV0FBVyxLQUFLLHdEQUF3RCxRQUFRLElBQUksaUJBQWlCLFNBQVMsUUFBUSxJQUFJLGlCQUFpQixrQ0FBa0MsRUFBRSw0REFBNEQsRUFBRSxHQUFHLFdBQVcsRTs7Ozs7Ozs7Ozs7O0FDTnp6bTZGLFdBQVcsbUJBQU8sQ0FBQywwQ0FBYTs7QUFFaEM7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLFFBQVE7QUFDbEM7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELE1BQU07QUFDeEQ7QUFDQSwwREFBMEQ7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLFFBQVEsR0FBRyxNQUFNO0FBQ3RELGdEQUFnRCxRQUFRLFFBQVEsUUFBUSw4QkFBOEIsTUFBTTtBQUM1RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSwwQkFBMEIsUUFBUTtBQUNsQztBQUNBO0FBQ0E7QUFDQSxtREFBbUQsTUFBTTtBQUN6RDtBQUNBLDBEQUEwRDtBQUMxRDtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsUUFBUTtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsMEJBQTBCLFFBQVE7QUFDbEM7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELE1BQU07QUFDekQ7QUFDQSwwREFBMEQ7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSwwQkFBMEIsUUFBUTtBQUNsQztBQUNBO0FBQ0E7QUFDQSxtREFBbUQsTUFBTTtBQUN6RDtBQUNBLDBEQUEwRDtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsK0NBQStDLFNBQVM7O0FBRXhEO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxzQkFBc0IsbUJBQW1CO0FBQ3pDO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLHdDQUF3QyxLQUFLLFFBQVEsS0FBSztBQUMxRCxzQkFBc0IsbUJBQW1CO0FBQ3pDO0FBQ0E7QUFDQSw0QkFBNEIsb0JBQW9CLCtCQUErQixjQUFjOztBQUU3RjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsZ0NBQWdDLEtBQUs7O0FBRXJDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxpQ0FBaUMsU0FBUzs7QUFFMUM7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLDRCQUE0QixhQUFhOztBQUV6QztBQUNBLEtBQUs7QUFDTDtBQUNBLHlCQUF5QixLQUFLO0FBQzlCLHlCQUF5QixLQUFLO0FBQzlCLHNDQUFzQyxLQUFLO0FBQzNDOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRDtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsSUFBSSx3QkFBd0I7QUFDNUU7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELElBQUksc0JBQXNCO0FBQzFFO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxJQUFJLGtCQUFrQjtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQzs7Ozs7Ozs7Ozs7QUNqT0E7QUFDQSxZQUFZLG1CQUFPLENBQUMsMEVBQWlCOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUMsRTs7Ozs7Ozs7Ozs7QUNYRDtBQUNBLHNCQUFzQixtQkFBTyxDQUFDLCtEQUFvQjtBQUNsRDtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLHlGQUFzQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDLEU7Ozs7Ozs7Ozs7O0FDekJEO0FBQ0EsWUFBWSxtQkFBTyxDQUFDLDBFQUFpQjtBQUNyQztBQUNBLHVCQUF1QixtQkFBTyxDQUFDLGlFQUFxQjs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUMsRTs7Ozs7Ozs7Ozs7QUM3QkQsUUFBUSxtQkFBTyxDQUFDLDJEQUFZO0FBQzVCO0FBQ0EsWUFBWSxtQkFBTyxDQUFDLHlDQUFTO0FBQzdCO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMseUZBQXNCOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsbUJBQW1CLEVBQUU7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUMsRTs7Ozs7Ozs7Ozs7QUN0Q0Q7QUFDQSxZQUFZLG1CQUFPLENBQUMsMEVBQWlCOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRTs7Ozs7Ozs7Ozs7QUNiRDtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLHlGQUFzQjtBQUMvQztBQUNBLHlCQUF5QixtQkFBTyxDQUFDLHFFQUF1Qjs7QUFFeEQ7QUFDQTtBQUNBLENBQUMsRTs7Ozs7Ozs7Ozs7QUNQRDtBQUNBLFlBQVksbUJBQU8sQ0FBQywwRUFBaUI7QUFDckMsYUFBYSxtQkFBTyxDQUFDLDJDQUFVOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDLEU7Ozs7Ozs7Ozs7O0FDbkJEO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMseUZBQXNCO0FBQy9DO0FBQ0EsdUJBQXVCLG1CQUFPLENBQUMsaUVBQXFCOztBQUVwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDLEU7Ozs7Ozs7Ozs7O0FDOUJEO0FBQ0EsWUFBWSxtQkFBTyxDQUFDLDBFQUFpQjtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxtREFBYzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixpQkFBaUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDLEU7Ozs7Ozs7Ozs7O0FDMUJEO0FBQ0EsWUFBWSxtQkFBTyxDQUFDLDBFQUFpQjs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDLEU7Ozs7Ozs7Ozs7O0FDZEQsVUFBVSxtQkFBTyxDQUFDLCtCQUFRO0FBQzFCLFdBQVcsbUJBQU8sQ0FBQyxxREFBTTtBQUN6QixVQUFVLG1CQUFPLENBQUMsd0NBQUs7QUFDdkI7QUFDQSxZQUFZLG1CQUFPLENBQUMsMEVBQWlCO0FBQ3JDLG9CQUFvQixtQkFBTyxDQUFDLDJEQUFrQjtBQUM5Qyx5QkFBeUIsbUJBQU8sQ0FBQyxxRUFBdUI7QUFDeEQsNkJBQTZCLG1CQUFPLENBQUMsK0VBQTRCO0FBQ2pFLG1CQUFtQixtQkFBTyxDQUFDLHlEQUFpQjtBQUM1QztBQUNBLGNBQWMsbUJBQU8sQ0FBQyw2Q0FBVztBQUNqQyx3QkFBd0IsbUJBQU8sQ0FBQyxtRUFBc0I7QUFDdEQsaUJBQWlCLG1CQUFPLENBQUMsbURBQWM7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsaURBQWE7QUFDckMsWUFBWSxtQkFBTyxDQUFDLHlDQUFTO0FBQzdCLGFBQWEsbUJBQU8sQ0FBQywyQ0FBVTtBQUMvQiwwQkFBMEIsbUJBQU8sQ0FBQyx1RUFBd0I7O0FBRTFEO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7Ozs7Ozs7Ozs7OztBQ2hGRDtBQUNBLFlBQVksbUJBQU8sQ0FBQywwRUFBaUI7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsaURBQWE7QUFDckMsY0FBYyxtQkFBTyxDQUFDLDJDQUFVOztBQUVoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFOzs7Ozs7Ozs7OztBQ3ZCRCxRQUFRLG1CQUFPLENBQUMsMkRBQVk7QUFDNUI7QUFDQSxZQUFZLG1CQUFPLENBQUMsMEVBQWlCOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQyxFOzs7Ozs7Ozs7OztBQ3BCRCxRQUFRLG1CQUFPLENBQUMsMkRBQVk7QUFDNUI7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxpREFBYTtBQUNyQztBQUNBLGlCQUFpQixtQkFBTyxDQUFDLHlGQUFzQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxzQkFBc0IsRUFBRTtBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQyxFOzs7Ozs7Ozs7OztBQy9CRCxRQUFRLG1CQUFPLENBQUMsMkRBQVk7QUFDNUI7QUFDQSxZQUFZLG1CQUFPLENBQUMsMEVBQWlCO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLGlEQUFhO0FBQ3JDO0FBQ0Esb0JBQW9CLG1CQUFPLENBQUMsMkRBQWtCOztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVUsRUFBRTtBQUN4QyxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTCxvQkFBb0Isa0JBQWtCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTCxvQkFBb0IsaUJBQWlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLDRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQyxFOzs7Ozs7Ozs7OztBQ3BIRCxRQUFRLG1CQUFPLENBQUMsMkRBQVk7QUFDNUIsYUFBYSxtQkFBTyxDQUFDLDZFQUFrQjtBQUN2QztBQUNBLGVBQWUsbUJBQU8sQ0FBQywrQ0FBWTtBQUNuQztBQUNBLGlCQUFpQixtQkFBTyxDQUFDLHlGQUFzQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMscUJBQXFCLEVBQUU7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDOztBQUVEOztBQUVBLDJCOzs7Ozs7Ozs7OztBQ2pFQTtBQUNBLFlBQVksbUJBQU8sQ0FBQywwRUFBaUI7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDLEU7Ozs7Ozs7Ozs7O0FDZkQsUUFBUSxtQkFBTyxDQUFDLDJEQUFZO0FBQzVCO0FBQ0EsV0FBVyxtQkFBTyxDQUFDLHVDQUFRO0FBQzNCO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMseUZBQXNCOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxpQkFBaUIsRUFBRTtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQyxFOzs7Ozs7Ozs7OztBQzNDRDtBQUNBLFlBQVksbUJBQU8sQ0FBQywwRUFBaUI7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQyxFOzs7Ozs7Ozs7OztBQzFDRCxRQUFRLG1CQUFPLENBQUMsMkRBQVk7QUFDNUI7QUFDQSxZQUFZLG1CQUFPLENBQUMsMEVBQWlCOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixVQUFVO0FBQ3JDLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQyxFOzs7Ozs7Ozs7OztBQzdCRCxRQUFRLG1CQUFPLENBQUMsMkRBQVk7QUFDNUI7QUFDQSxhQUFhLG1CQUFPLENBQUMsMkNBQVU7QUFDL0I7QUFDQSxpQkFBaUIsbUJBQU8sQ0FBQyx5RkFBc0I7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsb0JBQW9CLEVBQUU7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUMsRTs7Ozs7Ozs7Ozs7QUNyQ0QsUUFBUSxtQkFBTyxDQUFDLDJEQUFZO0FBQzVCO0FBQ0EsWUFBWSxtQkFBTyxDQUFDLDBFQUFpQjtBQUNyQyxhQUFhLG1CQUFPLENBQUMsMkNBQVU7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQyxFOzs7Ozs7Ozs7OztBQ2ZELFFBQVEsbUJBQU8sQ0FBQywyREFBWTtBQUM1QjtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLHlEQUFpQjtBQUM1QztBQUNBLGlCQUFpQixtQkFBTyxDQUFDLHlGQUFzQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQyxFOzs7Ozs7Ozs7OztBQzlCRDtBQUNBLFlBQVksbUJBQU8sQ0FBQywwRUFBaUI7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDLEU7Ozs7Ozs7Ozs7O0FDUEQ7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxpREFBYTtBQUNyQztBQUNBLGlCQUFpQixtQkFBTyxDQUFDLHlGQUFzQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0EsY0FBYyxXQUFXO0FBQ3pCLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUMsRTs7Ozs7Ozs7Ozs7QUNiRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDOzs7Ozs7Ozs7OztBQ3hEQSxXQUFXLG1CQUFPLENBQUMsdUVBQWdCOztBQUVuQzs7QUFFQSxDQUFDOzs7Ozs7Ozs7Ozs7O0FDSkQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGVBQWUsbUJBQU8sQ0FBQyxzQ0FBUTtBQUMvQixlQUFlLG1CQUFPLENBQUMsNkNBQWU7QUFDdEM7QUFDQSxlQUFlLG1CQUFPLENBQUMsc0VBQTZCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxrREFBVTs7QUFFakMsZ0JBQWdCLG1CQUFPLENBQUMsZ0VBQVc7O0FBRW5DLFVBQVUsbUJBQU8sQ0FBQywrQkFBUTs7QUFFNEI7QUFDWjtBQUMyQzs7QUFFdEU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSDs7Ozs7Ozs7Ozs7OztBQ3ZCQSxjQUFjLG1CQUFPLENBQUMsdUlBQTZEOztBQUVuRiw0Q0FBNEMsUUFBUzs7QUFFckQ7QUFDQTs7OztBQUlBLGVBQWU7O0FBRWY7QUFDQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsc0dBQW1EOztBQUV4RTs7QUFFQSxHQUFHLEtBQVUsRUFBRSxFOzs7Ozs7Ozs7Ozs7QUNsQmYsY0FBYyxtQkFBTyxDQUFDLGlJQUEwRDs7QUFFaEYsNENBQTRDLFFBQVM7O0FBRXJEO0FBQ0E7Ozs7QUFJQSxlQUFlOztBQUVmO0FBQ0E7O0FBRUEsYUFBYSxtQkFBTyxDQUFDLHNHQUFtRDs7QUFFeEU7O0FBRUEsR0FBRyxLQUFVLEVBQUUsRTs7Ozs7Ozs7Ozs7QUNuQmYsVUFBVSxtQkFBTyxDQUFDLHVGQUE2Qzs7QUFFL0QsMkJBQTJCLGtDQUFrQyxhQUFhLG9vRkFBb29GLHVmQUF1ZjtBQUNyc0csMEI7Ozs7Ozs7Ozs7O0FDSEE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsb0dBQW9HLGtCQUFrQjtBQUN0SDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEM7Ozs7Ozs7Ozs7O0FDOUpBLHlCQUF5QixtQkFBTyxDQUFDLHlGQUFzQjs7QUFFdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDLEU7Ozs7Ozs7Ozs7O0FDbENELFFBQVEsbUJBQU8sQ0FBQywyREFBWTtBQUM1QixRQUFRLG1CQUFPLENBQUMsb0RBQVE7QUFDeEI7QUFDQSxVQUFVLG1CQUFPLENBQUMsb0VBQWU7QUFDakMsV0FBVyxtQkFBTyxDQUFDLHVFQUFnQjtBQUNuQyxtQkFBbUIsbUJBQU8sQ0FBQyxrR0FBeUI7QUFDcEQsaUJBQWlCLG1CQUFPLENBQUMsOERBQWE7QUFDdEMsYUFBYSxtQkFBTyxDQUFDLDhDQUFRO0FBQzdCLFdBQVcsbUJBQU8sQ0FBQyxxREFBTTs7QUFFekIsbUJBQW1CLG1CQUFPLENBQUMsd0dBQW1DO0FBQzlELG1CQUFtQixtQkFBTyxDQUFDLHdHQUFtQzs7QUFFOUQ7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsUUFBUTtBQUM1RDtBQUNBLDhDQUE4QztBQUM5QztBQUNBO0FBQ0E7QUFDQSxrQkFBa0Isa0JBQWtCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7Ozs7Ozs7Ozs7QUNsSUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSwwRUFBMEU7QUFDMUUsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEM7Ozs7Ozs7Ozs7OztBQ2pDQSxjQUFjLG1CQUFPLENBQUMsMEtBQXlEOztBQUUvRSw0Q0FBNEMsUUFBUzs7QUFFckQ7QUFDQTs7OztBQUlBLGVBQWU7O0FBRWY7QUFDQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsNEZBQXlDOztBQUU5RDs7QUFFQSxHQUFHLEtBQVUsRUFBRSxFOzs7Ozs7Ozs7OztBQ25CZjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyw2RUFBa0I7QUFDdkMsY0FBYyxtQkFBTyxDQUFDLHdEQUFnQjtBQUN0QyxhQUFhLG1CQUFPLENBQUMsc0RBQWU7OztBQUdwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7O0FDakNBLGFBQWEsbUJBQU8sQ0FBQyxzREFBZTs7QUFFcEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrQkFBK0IsMEJBQTBCO0FBQ3pEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7Ozs7Ozs7QUM5Q0E7QUFDQSxhQUFhLG1CQUFPLENBQUMsc0RBQWU7QUFDcEMsZ0JBQWdCLG1CQUFPLENBQUMsNERBQWtCO0FBQzFDLFdBQVcsbUJBQU8sQ0FBQyxrREFBYTtBQUNoQyxXQUFXLG1CQUFPLENBQUMsa0RBQWE7QUFDaEMsaUJBQWlCLG1CQUFPLENBQUMsOERBQW1CO0FBQzVDLFdBQVcsbUJBQU8sQ0FBQyxrREFBYTtBQUNoQyxhQUFhLG1CQUFPLENBQUMsNkVBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLCtGQUF3Qjs7QUFFaEQ7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QscUJBQXFCO0FBQ3pFO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0UsZUFBZTtBQUMvRSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQSx5REFBeUQsYUFBYTtBQUN0RTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBOzs7Ozs7Ozs7Ozs7QUMxSkEsc0JBQXNCLG1CQUFPLENBQUMsNkVBQWtCO0FBQ2hELGtCQUFrQixtQkFBTyxDQUFDLCtGQUF3QjtBQUNsRCxjQUFjLG1CQUFPLENBQUMsd0RBQWdCO0FBQ3RDLFdBQVcsbUJBQU8sQ0FBQyxrREFBYTtBQUNoQyxhQUFhLG1CQUFPLENBQUMsc0RBQWU7QUFDcEM7O0FBRUE7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLGFBQWE7QUFDeEQ7O0FBRUE7QUFDQSw4QkFBOEI7O0FBRTlCO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0Esd0NBQXdDLHVDQUF1QztBQUMvRSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSwwQkFBMEIscUNBQXFDO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDJDQUEyQyxZQUFZO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNkNBQTZDLFlBQVk7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4Q0FBOEMsWUFBWTtBQUMxRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0QsWUFBWTtBQUM5RDtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsMERBQTBELFlBQVk7QUFDdEU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2QkFBNkIsYUFBYTs7QUFFMUM7QUFDQTtBQUNBLDhDQUE4QyxZQUFZO0FBQzFEO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0NBQWdDO0FBQ2hDLDJDQUEyQyxZQUFZO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEMsb0RBQW9ELFlBQVk7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsYUFBYTtBQUN2RDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7O0FBRWhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLE9BQU87QUFDckI7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBOztBQUVBOzs7Ozs7Ozs7Ozs7QUM5WUE7QUFDQSxZQUFZLG1CQUFPLENBQUMsdUVBQWdCO0FBQ3BDLFVBQVUsbUJBQU8sQ0FBQyxvRUFBZTtBQUNqQyxzQkFBc0IsbUJBQU8sQ0FBQyxrRUFBa0I7QUFDaEQsY0FBYyxtQkFBTyxDQUFDLHdEQUFnQjtBQUN0Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLGlCQUFpQjtBQUNqQjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQixpQkFBaUI7QUFDakI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQixpQkFBaUI7QUFDakI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ2pSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtB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QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxnREFBZ0Q7QUFDaEQsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7Ozs7Ozs7OztBQzlQRDtBQUNBLFlBQVksbUJBQU8sQ0FBQywwRUFBaUI7QUFDckMsV0FBVyxtQkFBTyxDQUFDLCtFQUFnQjtBQUNuQyxhQUFhLG1CQUFPLENBQUMsc0RBQWU7QUFDcEMsZUFBZSxtQkFBTyxDQUFDLDBEQUFpQjtBQUN4QyxZQUFZLG1CQUFPLENBQUMsb0RBQWM7QUFDbEMsYUFBYSxtQkFBTyxDQUFDLHNEQUFlOztBQUVwQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw0Q0FBNEMsV0FBVztBQUN2RDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsdUJBQXVCO0FBQ3ZCOztBQUVBLDBCQUEwQixlQUFlOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4REFBOEQ7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOzs7Ozs7Ozs7Ozs7QUM3SUE7QUFDQSxhQUFhLG1CQUFPLENBQUMsOENBQVE7QUFDN0IsVUFBVSxtQkFBTyxDQUFDLG9FQUFlO0FBQ2pDLGNBQWMsbUJBQU8sQ0FBQyxrRUFBa0I7QUFDeEMsV0FBVyxtQkFBTyxDQUFDLHVFQUFnQjs7QUFFbkM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxnQkFBZ0IsSUFBSTtBQUNwQixnQkFBZ0I7QUFDaEIsZ0JBQWdCLFdBQVc7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsV0FBVztBQUMzQixnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1REFBdUQ7QUFDdkQsb0RBQW9ELEtBQUs7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFdBQVc7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixXQUFXO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxnQkFBZ0IsV0FBVztBQUMzQjtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxnQkFBZ0IsRUFBRTtBQUNsQixnQkFBZ0IsRUFBRTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EscURBQXFELFFBQVE7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7Ozs7QUFJTDtBQUNBO0FBQ0EsZ0JBQWdCLEVBQUU7QUFDbEIsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7Ozs7QUFJTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7Ozs7Ozs7Ozs7Ozs7QUM5Ylk7QUFDYjtBQUNBLGVBQWUsbUJBQU8sQ0FBQywwREFBaUI7QUFDeEMsYUFBYSxtQkFBTyxDQUFDLHNEQUFlO0FBQ3BDLDhCQUE4QixpQkFBaUIsT0FBTztBQUN0RCxXQUFXLG1CQUFPLENBQUMsa0RBQWE7QUFDaEMsYUFBYSxtQkFBTyxDQUFDLHNEQUFlO0FBQ3BDLGFBQWEsbUJBQU8sQ0FBQyxzREFBZTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsMERBQWlCO0FBQ3hDLGVBQWUsbUJBQU8sQ0FBQywwREFBaUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLDBEQUFpQjtBQUN4QyxhQUFhLG1CQUFPLENBQUMsc0RBQWU7QUFDcEMsaUJBQWlCLG1CQUFPLENBQUMsOERBQW1CO0FBQzVDLGVBQWUsbUJBQU8sQ0FBQyx3REFBZ0IsRUFBRTtBQUN6QyxVQUFVLG1CQUFPLENBQUMsZ0RBQVk7QUFDOUIsYUFBYSxtQkFBTyxDQUFDLHNEQUFlO0FBQ3BDLFlBQVksbUJBQU8sQ0FBQyxvREFBYztBQUNsQyxhQUFhLG1CQUFPLENBQUMsNkVBQWtCO0FBQ3ZDLGNBQWMsbUJBQU8sQ0FBQyx1RUFBZ0I7QUFDdEMsZ0JBQWdCLG1CQUFPLENBQUMsMkRBQVk7QUFDcEM7QUFDQTs7QUFFQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1Qyw0QkFBNEI7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxnQ0FBZ0Msc0JBQXNCLEdBQUcsaUJBQWlCO0FBQzFFLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLFlBQVk7QUFDM0M7O0FBRUE7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRDQUE0QyxXQUFXO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFFQUFxRSxTQUFTO0FBQzlFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLHlDQUF5QztBQUNw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Q0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsOEJBQThCLFlBQVk7QUFDMUM7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxTQUFTLDZCQUE2QjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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LEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4Qjs7QUFFOUIsK0JBQStCOztBQUUvQixtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOzs7QUFHTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG1EQUFtRDs7QUFFbkQ7QUFDQTtBQUNBLE9BQU87OztBQUdQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsc0NBQXNDOztBQUV0QztBQUNBLG9DQUFvQztBQUNwQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG1DQUFtQzs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQSwyQ0FBMkMsU0FBUztBQUNwRDs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsOENBQThDLFNBQVM7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLHdCQUF3QjtBQUMvQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSwrQkFBK0I7QUFDL0IsNkNBQTZDOztBQUU3QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0MsNkVBQTZFOztBQUVuSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7O0FBRTFCLHlCQUF5Qjs7QUFFekIsc0JBQXNCOztBQUV0Qiw0QkFBNEI7O0FBRTVCLDhCQUE4Qjs7QUFFOUIsbUNBQW1DOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7OztBQUdMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87OztBQUdQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVCxvREFBb0Q7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMkNBQTJDOztBQUUzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHlDQUF5QywwRUFBMEU7QUFDbkg7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLDJDQUEyQyxTQUFTO0FBQ3BEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qjs7QUFFNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPOztBQUVQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdHQUFnRzs7QUFFaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLEVBQUU7O0FBRVg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLEVBQUU7O0FBRVg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sRUFBRTs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTyxFQUFFOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHNDQUFzQywrRUFBK0U7O0FBRXJIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx5RUFBeUU7O0FBRXpFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7O0FBRUw7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1SUFBdUk7O0FBRXZJO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSyxFQUFFOztBQUVQLHNDQUFzQyxPQUFPO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUEsMENBQTBDLFNBQVM7QUFDbkQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7O0FBRTFCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7OztBQUdMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULDBDQUEwQztBQUMxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMkNBQTJDO0FBQzNDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSx5Q0FBeUMsd0VBQXdFO0FBQ2pIO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsV0FBVztBQUNYO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCwrQkFBK0IsOEZBQThGOztBQUU3SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgsc0NBQXNDO0FBQ3RDO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlDQUF5Qzs7QUFFekM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0EsS0FBSzs7O0FBR0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLCtCQUErQiwrREFBK0Q7O0FBRTlGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsZ0NBQWdDLEtBQUs7QUFDckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxPQUFPOztBQUVQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLDJDQUEyQztBQUMzQzs7QUFFQSx3SUFBd0k7O0FBRXhJO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQSxrQ0FBa0MsS0FBSztBQUN2Qzs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7O0FBR0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNB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QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLFlBQVk7O0FBRXBCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRixvQkFBb0I7O0FBRXBCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQSxrQkFBa0Isa0NBQWtDO0FBQ3BELEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVSxZQUFZO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLFNBQVM7QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTLFlBQVk7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLFlBQVk7QUFDdEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxTQUFTO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBLGdCQUFnQixJQUFJOztBQUVwQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSx3Q0FBd0MsSUFBSTtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLGNBQWM7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLGdDQUFnQyxNQUFNO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLGVBQWU7O0FBRWYsU0FBUzs7QUFFVDtBQUNBLFFBQVEsaUNBQWlDO0FBQ3pDLFFBQVEsb0JBQW9CO0FBQzVCLFFBQVEsc0NBQXNDO0FBQzlDLFFBQVE7QUFDUixFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsYUFBYSxFQUFFO0FBQy9CO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSw0REFBNEQ7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBLHlDQUF5Qzs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkRBQTZEOztBQUU3RDtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0VBQWdFOztBQUVoRTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7O0FBRTdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsaUVBQWlFLFVBQVU7QUFDM0Usc0NBQXNDLDJCQUEyQjtBQUNqRTtBQUNBLGdDQUFnQyxNQUFNO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLFVBQVUsWUFBWTtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxVQUFVLFlBQVk7QUFDdEI7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLFVBQVU7QUFDcEI7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsVUFBVSxjQUFjO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0EsWUFBWSx1RUFBdUU7QUFDbkY7QUFDQTtBQUNBLFlBQVksNEJBQTRCO0FBQ3hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsU0FBUztBQUNqQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLDJEQUEyRDs7QUFFM0Q7QUFDQTtBQUNBLG9GQUFvRjs7QUFFcEY7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUEsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUSxTQUFTO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLFNBQVM7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgsUUFBUSxTQUFTO0FBQ2pCO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxpREFBaUQ7QUFDeEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpREFBaUQ7QUFDakQsVUFBVSx3Q0FBd0M7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsTUFBTTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTs7QUFFQSxDQUFDOzs7O0FBSUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUEsUUFBUSxHQUFHO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7Ozs7QUFJQTs7QUFFQTs7QUFFQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCLFNBQVM7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7O0FBRUEsY0FBYyxTQUFTO0FBQ3ZCO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVSxPQUFPO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVLE9BQU87QUFDakIsMEJBQTBCLHdCQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsMENBQTBDO0FBQzFDLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjs7QUFFbkI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVSxjQUFjO0FBQ3hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7QUFFUjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsd0NBQXdDLHNDQUFzQztBQUM5RSxvQ0FBb0MsdUNBQXVDO0FBQzNFLG9DQUFvQyxzQ0FBc0M7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixPQUFPO0FBQ1A7QUFDQSxNQUFNO0FBQ04sS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVc7O0FBRVg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTs7QUFFVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7O0FBRVg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7O0FBRVI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9DQUFvQztBQUNwQyxxQ0FBcUM7QUFDckMsb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7Ozs7O0FBS0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVSxTQUFTO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsYUFBYTtBQUNwQyxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixTQUFTO0FBQzdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osR0FBRztBQUNILEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBOzs7QUFHQTs7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUSxnQkFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLGdCQUFnQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEOztBQUVBOztBQUVBOzs7O0FBSUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxFQUFFO0FBQ0Y7O0FBRUEsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEsT0FBTztBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxzQkFBc0I7O0FBRXRCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLE9BQU87QUFDZjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxnQkFBZ0I7QUFDbEI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFdBQVc7O0FBRVg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BEOztBQUVBO0FBQ0E7O0FBRUEsY0FBYyxzQkFBc0I7QUFDcEM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsK0RBQStEO0FBQy9EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsVUFBVSxjQUFjOztBQUV4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG1CQUFtQjtBQUNwQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLHVDQUF1QztBQUNqRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsdURBQXVEO0FBQzlFOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLCtDQUErQztBQUNwRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQ0FBcUMsY0FBYztBQUNuRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQsY0FBYyxxQ0FBcUM7QUFDbkQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7O0FBR0Q7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkNBQTJDLE9BQU87QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7O0FBRTlCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsT0FBTztBQUNqQjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLCtCQUErQjtBQUN2QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsdUNBQXVDLE9BQU87QUFDOUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDLE9BQU87QUFDL0M7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLHFDQUFxQztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBLFNBQVMsOEJBQThCO0FBQ3ZDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7O0FBRUY7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxZQUFZLE9BQU87QUFDbkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLFdBQVc7QUFDcEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOzs7O0FBSUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtDQUErQyxjQUFjLFdBQVc7QUFDeEUsbUJBQW1CLFVBQVU7QUFDN0I7QUFDQSxzQkFBc0IsY0FBYyxzQkFBc0IsZ0JBQWdCO0FBQzFFLGdCQUFnQixXQUFXLFlBQVk7QUFDdkMsY0FBYztBQUNkOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGLENBQUM7OztBQUdEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSwrREFBK0Q7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsUUFBUSxPQUFPOztBQUVmO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBOztBQUVBLFVBQVUsT0FBTztBQUNqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFdBQVcsU0FBUztBQUNwQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXOztBQUVYO0FBQ0E7QUFDQTtBQUNBLFFBQVEsT0FBTztBQUNmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxnQkFBZ0I7QUFDeEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLGlEQUFpRCwwQkFBMEI7QUFDM0U7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLGdCQUFnQjtBQUMxQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBOztBQUVBLDZDQUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUEsUUFBUSxnQkFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLGdCQUFnQjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQSxpRUFBaUU7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQixjQUFjO0FBQ2xDLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlEQUFpRDs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0IsU0FBUztBQUN4QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwrQkFBK0IsU0FBUztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLGdCQUFnQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsa0JBQWtCO0FBQzVCLFdBQVcsa0JBQWtCO0FBQzdCLGNBQWM7QUFDZCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLFFBQVEsbUJBQW1CO0FBQzNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7O0FBS0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7O0FBS0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOzs7OztBQUtEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUEsaUNBQWlDO0FBQ2pDO0FBQ0E7O0FBRUEsSUFBSTtBQUNKOztBQUVBLElBQUk7QUFDSjtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBLFdBQVcsU0FBUztBQUNwQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7QUFLRDs7O0FBR0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsOENBQThDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkNBQTJDO0FBQzNDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxLQUFLO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpREFBaUQ7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxQ0FBcUM7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7O0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVILEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLEtBQUs7QUFDTDs7QUFFQSxXQUFXO0FBQ1gsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7O0FBRWhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7O0FBRWhCLGdEQUFnRDtBQUNoRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQjtBQUNuQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3REFBd0Q7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCO0FBQ2pCLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCOztBQUUzQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0NBQWtDOztBQUVsQztBQUNBLHNCQUFzQjtBQUN0QiwyQkFBMkI7O0FBRTNCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRDtBQUN0RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTs7QUFFUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBLG1EQUFtRDtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdUJBQXVCO0FBQ2xDLFdBQVcseUJBQXlCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7OztBQUtEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CLGFBQWEsdUNBQXVDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7O0FBS0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7OztBQUtEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsSUFBSTtBQUNKLEdBQUc7QUFDSDs7QUFFQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7O0FBS0Q7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EscURBQXFEO0FBQ3JEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQjs7QUFFbkI7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7O0FBRUQ7QUFDQSxjQUFjLHNEQUFzRDtBQUNwRTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBLGNBQWMsbUNBQW1DO0FBQ2pELGVBQWUsNkRBQTZEO0FBQzVFOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxFQUFFO0FBQ0YsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7O0FBS0Q7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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Q0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUMsR0FBRztBQUNKOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWixzTkFBc047O0FBRXROO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUVBQXVFO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQix1QkFBdUI7QUFDeEM7O0FBRUEsb0JBQW9CLDJCQUEyQjtBQUMvQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixzQkFBc0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUNBQXlDOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsS0FBSztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLFVBQVUsUUFBUTtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsMEJBQTBCO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0I7O0FBRXBCLG1CQUFtQiwwQkFBMEI7QUFDN0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLDZDQUE2Qzs7QUFFN0MsNkNBQTZDOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSCxpQkFBaUIsMEJBQTBCO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSw2QkFBNkI7O0FBRTdCO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQSxxRUFBcUU7QUFDckU7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0I7O0FBRWhCLGlCQUFpQiwwQkFBMEI7QUFDM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qjs7QUFFNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSx3RUFBd0U7O0FBRXhFOztBQUVBO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzREFBc0Q7O0FBRXREO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxvREFBb0Q7QUFDcEQ7O0FBRUE7QUFDQTtBQUNBLHVFQUF1RTtBQUN2RTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHNEQUFzRDs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsMEJBQTBCO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHdCQUF3Qjs7QUFFeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxtQkFBbUIsMEJBQTBCO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9COztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSx1REFBdUQ7O0FBRXZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsUUFBUSxZQUFZLFFBQVEsT0FBTyxTQUFTO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFFQUFxRTtBQUNyRTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLE1BQU07QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEI7O0FBRTFCO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBEOztBQUUxRDtBQUNBLDZEQUE2RDs7QUFFN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFOztBQUV2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0VBQStFOztBQUUvRTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7O0FBRTNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2RUFBNkU7O0FBRTdFLGdFQUFnRTs7QUFFaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0U7O0FBRWhFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0VBQWdFOztBQUVoRTtBQUNBO0FBQ0Esc0VBQXNFOztBQUV0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRDs7QUFFMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBFQUEwRTs7QUFFMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQzs7QUFFakMsaUNBQWlDOztBQUVqQztBQUNBLGtDQUFrQzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QixHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qjs7QUFFekI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUEscUJBQXFCLGlCQUFpQjtBQUN0QztBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtB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QUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsY0FBYztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxVQUFVO0FBQ1YsVUFBVTtBQUNWLFdBQVc7QUFDWDtBQUNBO0FBQ0EsR0FBRztBQUNILFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsOEJBQThCOztBQUU5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUEscUJBQXFCLG9CQUFvQjtBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7Ozs7Ozs7OztBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDs7QUFFbEQsc0JBQXNCOztBQUV0Qix1QkFBdUI7QUFDdkI7O0FBRUEsb0VBQW9FOztBQUVwRTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRzs7O0FBR0gsc0VBQXNFOztBQUV0RSwrREFBK0Q7QUFDL0Qsa0RBQWtEO0FBQ2xEO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7O0FBRTNDLGlGQUFpRjs7QUFFakYsK0NBQStDO0FBQy9DO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdILHVFQUF1RTs7QUFFdkU7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsd0ZBQXdGO0FBQ3hGOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBaUU7QUFDakU7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTCxvQkFBb0IsZ0VBQWdFLFdBQVc7QUFDL0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx3Q0FBd0M7QUFDeEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSztBQUNMOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6Qzs7QUFFQSx5RUFBeUU7O0FBRXpFO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQyxhQUFhOztBQUVkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDLEVBQUU7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBOzs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDs7QUFFckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUIsaUNBQWlDLHdCQUF3QixHQUFHLFlBQVk7QUFDeEU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscURBQXFEO0FBQ3JEOztBQUVBLGdGQUFnRjs7QUFFaEYsd0ZBQXdGOztBQUV4RjtBQUNBLHFDQUFxQztBQUNyQyxLQUFLOzs7QUFHTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLOzs7QUFHTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDs7O0FBR0E7QUFDQSxJQUFJLElBQUk7QUFDUjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7Ozs7OztBQVFBO0FBQ0EsOEZBQThGO0FBQzlGO0FBQ0E7QUFDQSxzQkFBc0IsS0FBSyxJQUFJOztBQUUvQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0Q7QUFDQTtBQUNBOztBQUVBLHVEQUF1RDs7QUFFdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7O0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7QUFDRDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7O0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDOztBQUUzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCOztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQSw0QkFBNEI7O0FBRTVCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRzs7O0FBR0gsMkJBQTJCOztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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O0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7Ozs7Ozs7Ozs7QUFZQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7QUFDQSxtRUFBbUU7O0FBRW5FOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBLDBDQUEwQztBQUMxQyxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEIseUJBQXlCO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQyxFQUFFO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCOztBQUV4Qjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUMsRUFBRTs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7Ozs7Ozs7OztBQVNBO0FBQ0E7QUFDQSw0QkFBNEI7O0FBRTVCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7OztBQUdILDBGQUEwRjs7QUFFMUYsbURBQW1EO0FBQ25EOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSyxXQUFXOztBQUVoQjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUssV0FBVzs7QUFFaEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUEsbUJBQW1CLGlCQUFpQjtBQUNwQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILHdEQUF3RCxFQUFFOztBQUUxRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0VBQWtFOztBQUVsRTs7QUFFQSxxQkFBcUIsdUJBQXVCO0FBQzVDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7Ozs7O0FBS0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2Q0FBNkM7O0FBRTdDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9GQUFvRjs7QUFFcEY7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBLDhFQUE4RTtBQUM5RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUssV0FBVzs7QUFFaEI7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRztBQUNILHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7O0FBV0E7QUFDQSxpQ0FBaUM7QUFDakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DOztBQUVuQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7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dUY7QUFDdkY7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUIsMEJBQTBCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSyxXQUFXOztBQUVoQjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7Ozs7O0FBT0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLG1FQUFtRTs7QUFFbkU7QUFDQTtBQUNBLDRFQUE0RTs7QUFFNUU7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7Ozs7QUFNQTtBQUNBO0FBQ0EsdUVBQXVFO0FBQ3ZFOztBQUVBLGlCQUFpQixrQkFBa0I7QUFDbkM7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3REFBd0Q7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUMsT0FBTyxRQUFRO0FBQ3BELGdDQUFnQyxJQUFJLFVBQVUsSUFBSSxXQUFXLGFBQWE7QUFDMUU7O0FBRUEscUJBQXFCLHVCQUF1QjtBQUM1QyxpQ0FBaUM7O0FBRWpDOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNCQUFzQjs7QUFFdEI7QUFDQSx1QkFBdUIsMEJBQTBCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0IsMkJBQTJCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSyxXQUFXOztBQUVoQjtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7OztBQUdBLHFEQUFxRDs7QUFFckQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBLGdGQUFnRjs7QUFFaEY7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNENBQTRDOztBQUU1QztBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQSxrREFBa0Q7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EseUVBQXlFO0FBQ3pFOztBQUVBLHFEQUFxRDs7QUFFckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU8sV0FBVztBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4REFBOEQ7QUFDOUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7Ozs7Ozs7Ozs7Ozs7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3Qzs7QUFFeEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbURBQW1EOztBQUVuRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7OztBQUlBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQzs7QUFFdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaURBQWlEOztBQUVqRCw0RkFBNEY7QUFDNUYsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOzs7QUFHTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUdBQXVHO0FBQ3ZHOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiw0QkFBNEI7QUFDakQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQU1BO0FBQ0EsMERBQTBEOztBQUUxRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0Esd0JBQXdCLElBQUksR0FBRztBQUMvQix5Q0FBeUM7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRSwwQkFBMEIsSUFBSSxHQUFHO0FBQ3BDLDBDQUEwQzs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFFLHlCQUF5QixJQUFJLElBQUksR0FBRztBQUN2QywyREFBMkQ7QUFDM0Q7O0FBRUE7QUFDQSxvQ0FBb0M7O0FBRXBDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRSxxQkFBcUIsSUFBSSxHQUFHO0FBQy9CO0FBQ0E7QUFDQSw4QkFBOEIsZUFBZSxhQUFhOztBQUUxRCwwQ0FBMEMsY0FBYyxJQUFJLEdBQUcsd0JBQXdCLElBQUksR0FBRzs7QUFFOUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUU7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixlQUFlO0FBQ2pDLENBQUMsRUFBRTtBQUNILGtCQUFrQjtBQUNsQixvQkFBb0I7QUFDcEIsc0JBQXNCO0FBQ3RCLG9DQUFvQztBQUNwQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUI7O0FBRXpCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBNkI7O0FBRTdCO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQyxFQUFFLGdCQUFnQixPQUFPLE9BQU87QUFDakMsaUJBQWlCLE9BQU8sT0FBTztBQUMvQix5Q0FBeUMsT0FBTyxnQkFBZ0I7O0FBRWhFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSwyQ0FBMkMsYUFBYSxzQ0FBc0M7QUFDOUY7O0FBRUE7QUFDQSw2Q0FBNkMsYUFBYSxtREFBbUQ7QUFDN0c7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwREFBMEQ7QUFDMUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDLEVBQUU7QUFDSDtBQUNBLGdCQUFnQjs7QUFFaEIsMEJBQTBCO0FBQzFCLDBCQUEwQixHQUFHO0FBQzdCLFdBQVc7QUFDWCxXQUFXO0FBQ1gsYUFBYTtBQUNiLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCLDhCQUE4QixnQkFBZ0IsYUFBYTtBQUMzRCw4QkFBOEIsaUJBQWlCLGFBQWE7QUFDNUQ7QUFDQSx5QkFBeUIsWUFBWTtBQUNyQyxlQUFlLFdBQVcsZ0JBQWdCOztBQUUxQyw4Q0FBOEMsY0FBYyxJQUFJLFNBQVM7QUFDekUseUNBQXlDLGlCQUFpQixPQUFPLGlCQUFpQjtBQUNsRiwrQ0FBK0MsY0FBYyxpQkFBaUIsU0FBUyxHQUFHOztBQUUxRixpQ0FBaUMsRUFBRSxHQUFHOztBQUV0QyxpQ0FBaUMsRUFBRTtBQUNuQyxpQ0FBaUMsRUFBRTtBQUNuQyxpQ0FBaUMsRUFBRTtBQUNuQyxpQ0FBaUMsRUFBRTtBQUNuQyxpQ0FBaUMsRUFBRTtBQUNuQyxpQ0FBaUMsRUFBRTtBQUNuQyxpQ0FBaUMsRUFBRTtBQUNuQyxrQ0FBa0MsRUFBRSxHQUFHOztBQUV2QyxrQ0FBa0MsRUFBRTtBQUNwQyxrQ0FBa0MsRUFBRSxHQUFHOztBQUV2Qyw2QkFBNkIsRUFBRSxHQUFHO0FBQ2xDO0FBQ0E7O0FBRUEsK0JBQStCOztBQUUvQixrQ0FBa0MsU0FBUyxJQUFJO0FBQy9DLGtDQUFrQyxTQUFTLElBQUk7QUFDL0Msa0NBQWtDLFNBQVMsSUFBSSxHQUFHO0FBQ2xELHNCQUFzQixNQUFNLFVBQVUsU0FBUztBQUMvQztBQUNBO0FBQ0E7O0FBRUEsb0NBQW9DLFVBQVUsbUJBQW1CLFdBQVcsR0FBRztBQUMvRSxZQUFZLE1BQU07QUFDbEI7QUFDQSxZQUFZLFNBQVM7QUFDckIsbUJBQW1CLGNBQWM7O0FBRWpDLG9DQUFvQyxVQUFVLFNBQVMsVUFBVSxVQUFVO0FBQzNFO0FBQ0E7QUFDQSxzQ0FBc0MsV0FBVyxLQUFLLFdBQVcsY0FBYyxNQUFNLFVBQVUsVUFBVTtBQUN6RyxpQ0FBaUM7O0FBRWpDLHFDQUFxQyxlQUFlLFFBQVEsS0FBSyxXQUFXLE9BQU8sdUJBQXVCLE9BQU8sVUFBVSxlQUFlO0FBQzFJLHFDQUFxQyxXQUFXLGVBQWUsSUFBSSxVQUFVLGVBQWU7QUFDNUYscUNBQXFDLFdBQVcsYUFBYSxJQUFJLFVBQVUsZUFBZTtBQUMxRixxQ0FBcUMsV0FBVyxvQkFBb0IsR0FBRyxNQUFNLFVBQVUsZUFBZTtBQUN0RyxxQ0FBcUMsV0FBVyxlQUFlLE1BQU0sR0FBRyxNQUFNLFVBQVUsZUFBZTtBQUN2RyxxQ0FBcUMsV0FBVyxlQUFlLElBQUksR0FBRyxNQUFNLFVBQVUsZUFBZTtBQUNyRyxxQ0FBcUMsV0FBVyxTQUFTLElBQUksVUFBVSxlQUFlLEdBQUc7O0FBRXpGO0FBQ0EsbUNBQW1DLGdCQUFnQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQztBQUNBLFVBQVUsTUFBTTtBQUNoQixrQkFBa0IsRUFBRSxNQUFNLEVBQUUsTUFBTTtBQUNsQztBQUNBOztBQUVBLGtDQUFrQyxpQkFBaUIsS0FBSyxNQUFNO0FBQzlELGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsUUFBUTs7QUFFOUMsb0NBQW9DLFFBQVE7QUFDNUMsb0NBQW9DLFFBQVE7QUFDNUMsb0NBQW9DLFFBQVE7QUFDNUMscUNBQXFDLFNBQVM7QUFDOUMsaUNBQWlDLEtBQUs7QUFDdEMsaUNBQWlDLEtBQUs7QUFDdEMsb0NBQW9DLFFBQVE7QUFDNUMsc0NBQXNDLFVBQVU7QUFDaEQsa0NBQWtDLE1BQU07QUFDeEMsa0NBQWtDLE1BQU07QUFDeEMsb0NBQW9DLFFBQVEsR0FBRyxlQUFlLFVBQVUsSUFBSSxVQUFVLEVBQUU7O0FBRXhGLG1DQUFtQyxVQUFVLEVBQUUsUUFBUSxTQUFTLEdBQUcsa0JBQWtCLFFBQVEsNkJBQTZCO0FBQzFILHNCQUFzQixFQUFFOztBQUV4Qix3REFBd0Qsa0JBQWtCLGFBQWEsaUJBQWlCLEVBQUUsYUFBYSxnQkFBZ0IsT0FBTyxJQUFJLE1BQU07O0FBRXhKLCtCQUErQixnQkFBZ0IsR0FBRyxFQUFFLEdBQUcsYUFBYSxRQUFRO0FBQzVFLGdCQUFnQixRQUFRO0FBQ3hCLGtCQUFrQixRQUFROztBQUUxQixnQ0FBZ0MsdUJBQXVCO0FBQ3ZELG9DQUFvQyxtQkFBbUI7QUFDdkQsc0NBQXNDLGtCQUFrQixHQUFHOztBQUUzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxtQ0FBbUM7QUFDbkMsT0FBTzs7QUFFUDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBOztBQUVBLHFDQUFxQztBQUNyQztBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEMseUJBQXlCLFNBQVMsSUFBSTtBQUN0Qzs7QUFFQSx1Q0FBdUMsWUFBWSxZQUFZLFVBQVUsa0JBQWtCLElBQUkscUJBQXFCO0FBQ3BIOztBQUVBLCtCQUErQixLQUFLLFFBQVEsR0FBRzs7QUFFL0Msa0NBQWtDLFdBQVc7QUFDN0MsaUJBQWlCLElBQUksb0JBQW9CO0FBQ3pDOztBQUVBLDRCQUE0QixJQUFJO0FBQ2hDLCtCQUErQixLQUFLLFFBQVEsR0FBRzs7QUFFL0MsaUNBQWlDLGtCQUFrQixJQUFJLHNCQUFzQjtBQUM3RTs7QUFFQSxnQkFBZ0IsZUFBZSxLQUFLLFFBQVEsR0FBRzs7QUFFL0MsZ0NBQWdDLEdBQUcsa0JBQWtCLElBQUkscUJBQXFCO0FBQzlFOztBQUVBLCtCQUErQixLQUFLLFFBQVEsR0FBRzs7QUFFL0MscUNBQXFDLGdCQUFnQixjQUFjLG9CQUFvQjtBQUN2Rjs7QUFFQSx5Q0FBeUMsS0FBSyxRQUFRLEdBQUcsZ0JBQWdCLGdCQUFnQixzQkFBc0I7QUFDL0c7O0FBRUEsMkNBQTJDLEtBQUssT0FBTyxHQUFHLGlCQUFpQjs7QUFFM0Usd0NBQXdDLGdCQUFnQjs7QUFFeEQsOENBQThDLGNBQWM7O0FBRTVELDJDQUEyQyxlQUFlOztBQUUxRCw0Q0FBNEM7O0FBRTVDO0FBQ0EsMENBQTBDLEVBQUUsR0FBRyxFQUFFO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHlCQUF5QixPQUFPLElBQUk7QUFDcEMsQ0FBQyxFQUFFLGtCQUFrQixPQUFPO0FBQzVCLE1BQU0sbUJBQW1CO0FBQ3pCO0FBQ0EsZUFBZSxLQUFLLElBQUk7QUFDeEI7QUFDQSxpQkFBaUIsTUFBTSxJQUFJLE1BQU0sbUJBQW1CO0FBQ3BELGVBQWUsS0FBSyxJQUFJO0FBQ3hCLHdCQUF3QixtQkFBbUI7QUFDM0M7O0FBRUEsb0NBQW9DLFlBQVksWUFBWSxZQUFZLFdBQVcsZUFBZSxTQUFTLGtCQUFrQixZQUFZLFlBQVksWUFBWSxXQUFXO0FBQzVLLG9EQUFvRCxhQUFhLFlBQVksWUFBWSxXQUFXO0FBQ3BHLDhCQUE4QixTQUFTLGFBQWE7QUFDcEQsb0RBQW9ELGFBQWEsYUFBYSxhQUFhLFlBQVksTUFBTSxTQUFTLFdBQVc7QUFDakk7QUFDQTtBQUNBOztBQUVBLG9DQUFvQyxlQUFlLElBQUksV0FBVyxHQUFHLGVBQWUsTUFBTSxTQUFTLElBQUksR0FBRztBQUMxRztBQUNBOztBQUVBLGlDQUFpQyxhQUFhLDhCQUE4QixFQUFFO0FBQzlFO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0IsY0FBYywrQkFBK0IsT0FBTyxFQUFFLHFCQUFxQixLQUFLLEdBQUcsMEJBQTBCLFFBQVE7QUFDcEosWUFBWTtBQUNaLDJCQUEyQixNQUFNO0FBQ2pDO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkMsZ0NBQWdDO0FBQ2hDLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUMsY0FBYyw4QkFBOEIscUJBQXFCLGdCQUFnQix5QkFBeUIsT0FBTyxHQUFHOztBQUVySixpQ0FBaUMsY0FBYyw4QkFBOEIscUJBQXFCLGdCQUFnQix5QkFBeUIsT0FBTyxHQUFHLGlDQUFpQztBQUN0TCxrQkFBa0I7QUFDbEIsbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQSxrQ0FBa0MsS0FBSyxJQUFJLG9CQUFvQjtBQUMvRDtBQUNBLGdDQUFnQzs7QUFFaEMsb0NBQW9DLG1CQUFtQixTQUFTO0FBQ2hFOztBQUVBLHVDQUF1Qyx3QkFBd0IsR0FBRyw4QkFBOEIsb0JBQW9CLFlBQVk7O0FBRWhJLHlDQUF5QyxlQUFlLHNCQUFzQixhQUFhLGNBQWMsTUFBTSxTQUFTLGNBQWMsR0FBRyw4QkFBOEIsb0JBQW9CLGFBQWE7O0FBRXhNLHlDQUF5QyxlQUFlLHNCQUFzQixjQUFjLEdBQUcsTUFBTSxTQUFTLGNBQWMsR0FBRztBQUMvSCw2QkFBNkIsa0JBQWtCLGFBQWE7O0FBRTVELHlDQUF5QyxlQUFlLG9CQUFvQixjQUFjLEdBQUcsTUFBTSxTQUFTLHdCQUF3QixHQUFHLDZCQUE2QixvQkFBb0IsYUFBYSxTQUFTOztBQUU5TSx3Q0FBd0MsZUFBZSxzQkFBc0IsY0FBYyxVQUFVLElBQUksTUFBTSxTQUFTLHdCQUF3QixHQUFHLDZCQUE2QixrQkFBa0IsYUFBYSxTQUFTOztBQUV4Tix3Q0FBd0MsZUFBZSxvQkFBb0IsY0FBYyxVQUFVLElBQUksTUFBTSxTQUFTLDBCQUEwQixHQUFHLDhCQUE4QixVQUFVLGFBQWE7O0FBRXhNLHlDQUF5QyxlQUFlLFdBQVcsY0FBYyxjQUFjLE1BQU0sU0FBUyxjQUFjLEdBQUc7QUFDL0gsNkJBQTZCLFVBQVUsYUFBYTs7QUFFcEQseUNBQXlDLGVBQWUsV0FBVyxjQUFjLFlBQVksTUFBTSxTQUFTLHdCQUF3QixHQUFHLDZCQUE2QixTQUFTLEVBQUUsU0FBUyxhQUFhOztBQUVyTSx3Q0FBd0MsZUFBZSxVQUFVLEVBQUUsVUFBVSxjQUFjLGNBQWMsTUFBTSxTQUFTLGNBQWMsR0FBRyw2QkFBNkIsU0FBUyxFQUFFLFNBQVMsYUFBYTs7QUFFdk0sd0NBQXdDLGVBQWUsVUFBVSxFQUFFLFVBQVUsY0FBYyxZQUFZLE1BQU0sU0FBUywwQkFBMEIsR0FBRyxpQ0FBaUMsb0JBQW9CLGFBQWE7O0FBRXJOLDRDQUE0QyxlQUFlLHNCQUFzQixjQUFjLFVBQVUsTUFBTSxTQUFTLHdCQUF3QixHQUFHLGlDQUFpQyxrQkFBa0IsYUFBYTs7QUFFbk4sNENBQTRDLGVBQWUsb0JBQW9CLGNBQWMsVUFBVSxNQUFNLFNBQVMsMEJBQTBCLEdBQUcsOEJBQThCLG9CQUFvQixhQUFhOztBQUVsTix5Q0FBeUMsZUFBZSxzQkFBc0IsY0FBYyxPQUFPLE1BQU0sU0FBUyx3QkFBd0IsR0FBRyw4QkFBOEIsa0JBQWtCLGFBQWE7O0FBRTFNLHlDQUF5QyxlQUFlLG9CQUFvQixjQUFjLE9BQU8sTUFBTSxTQUFTLDBCQUEwQixHQUFHOztBQUU3SSxvQ0FBb0M7O0FBRXBDLG1DQUFtQzs7QUFFbkMsb0NBQW9DOztBQUVwQyxvQ0FBb0M7O0FBRXBDLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDOztBQUU5QyxtREFBbUQ7O0FBRW5ELDZDQUE2Qzs7QUFFN0MscUNBQXFDLGVBQWUsY0FBYyxhQUFhO0FBQy9FLDBDQUEwQyxlQUFlLGNBQWMsV0FBVztBQUNsRix3Q0FBd0Msa0JBQWtCLGNBQWMsYUFBYTtBQUNyRiw2Q0FBNkMsa0JBQWtCLGNBQWMsV0FBVyxHQUFHOztBQUUzRixzQ0FBc0MsV0FBVyxVQUFVLGVBQWU7QUFDMUUsZ0RBQWdELFVBQVU7QUFDMUQsZ0RBQWdELFVBQVUsR0FBRztBQUM3RDs7QUFFQSwwQ0FBMEMsY0FBYyxPQUFPO0FBQy9ELDBDQUEwQyxjQUFjLE9BQU87QUFDL0Qsc0NBQXNDLFVBQVUsT0FBTztBQUN2RCwwQ0FBMEMsY0FBYyxPQUFPO0FBQy9ELHNDQUFzQyxVQUFVLE9BQU87QUFDdkQsMENBQTBDLGNBQWMsT0FBTztBQUMvRCwwQ0FBMEMsY0FBYyxFQUFFO0FBQzFELCtDQUErQyxtQkFBbUIsRUFBRTtBQUNwRSwyQ0FBMkMsZUFBZSxPQUFPO0FBQ2pFLDJDQUEyQyxlQUFlLE9BQU87QUFDakUsNkNBQTZDLGlCQUFpQixFQUFFO0FBQ2hFLDhDQUE4QyxrQkFBa0IsRUFBRTtBQUNsRSw2Q0FBNkMsaUJBQWlCLEVBQUU7QUFDaEUsOENBQThDLGtCQUFrQixFQUFFLEdBQUc7QUFDckU7QUFDQTtBQUNBOztBQUVBLDBDQUEwQyxnQkFBZ0IsaUJBQWlCLE1BQU0sV0FBVyxlQUFlO0FBQzNHLDBDQUEwQyxpQkFBaUIsaUJBQWlCLE1BQU0sWUFBWSxlQUFlO0FBQzdHLHFDQUFxQzs7QUFFckMscUNBQXFDOztBQUVyQyx1Q0FBdUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLE1BQU0sV0FBVyxlQUFlO0FBQzFHLHVDQUF1QyxpQkFBaUIsbUJBQW1CLE1BQU0sWUFBWSxlQUFlO0FBQzVHLGtDQUFrQzs7QUFFbEMsa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVEOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLEVBQUU7QUFDL0IsNkJBQTZCLEVBQUU7QUFDL0IsNkJBQTZCLEVBQUU7QUFDL0I7QUFDQTtBQUNBLGlDQUFpQyxFQUFFO0FBQ25DLGdDQUFnQyxFQUFFO0FBQ2xDO0FBQ0EsK0JBQStCLEVBQUU7QUFDakM7QUFDQSxpQ0FBaUMsRUFBRTtBQUNuQyxtQ0FBbUMsRUFBRTtBQUNyQztBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsRUFBRTtBQUNyQywrQkFBK0IsRUFBRTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxFQUFFO0FBQ2xDO0FBQ0EsaUNBQWlDLEVBQUU7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLEVBQUU7QUFDaEMsbUNBQW1DLEVBQUU7QUFDckMsOEJBQThCLEVBQUU7QUFDaEMsbUNBQW1DLEVBQUU7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxFQUFFO0FBQ25DLGlDQUFpQyxFQUFFO0FBQ25DLCtCQUErQixFQUFFO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLHdDQUF3Qyw2Q0FBNkMsUUFBUTs7QUFFN0Y7QUFDQSxnQ0FBZ0MsRUFBRSxHQUFHO0FBQ3JDO0FBQ0E7O0FBRUEsZ0RBQWdELFVBQVU7QUFDMUQsZ0RBQWdELFVBQVU7QUFDMUQsdUNBQXVDLGVBQWUsTUFBTSxXQUFXOztBQUV2RSxtQ0FBbUMsVUFBVSxHQUFHO0FBQ2hELHFDQUFxQyxVQUFVLEdBQUc7QUFDbEQsbUNBQW1DLFVBQVUsR0FBRztBQUNoRCxrQ0FBa0MsVUFBVSxHQUFHO0FBQy9DLG9DQUFvQyxVQUFVLEdBQUc7QUFDakQsbUNBQW1DLE1BQU0sSUFBSTtBQUM3QyxxQ0FBcUMsVUFBVSxHQUFHO0FBQ2xELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQsb0NBQW9DLFVBQVUsR0FBRztBQUNqRCxvQ0FBb0MsVUFBVSxHQUFHO0FBQ2pELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQsb0NBQW9DLFVBQVUsR0FBRztBQUNqRCxvQ0FBb0MsVUFBVSxHQUFHO0FBQ2pELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQsb0NBQW9DLFVBQVUsR0FBRztBQUNqRCxvQ0FBb0MsVUFBVSxHQUFHO0FBQ2pELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQscUNBQXFDLFVBQVUsR0FBRztBQUNsRCxxQ0FBcUMsVUFBVSxHQUFHO0FBQ2xELHFDQUFxQyxVQUFVLEdBQUc7QUFDbEQscUNBQXFDLFVBQVUsR0FBRztBQUNsRCxxQ0FBcUMsVUFBVSxHQUFHO0FBQ2xELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQsb0NBQW9DLFVBQVUsR0FBRztBQUNqRCxvQ0FBb0MsVUFBVSxHQUFHO0FBQ2pELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQsb0NBQW9DLFVBQVUsR0FBRztBQUNqRCxtQ0FBbUMsVUFBVSxHQUFHO0FBQ2hELG1DQUFtQyxVQUFVLEdBQUc7QUFDaEQsbUNBQW1DLFVBQVUsR0FBRztBQUNoRCxtQ0FBbUMsVUFBVSxHQUFHO0FBQ2hELG1DQUFtQyxVQUFVLEdBQUc7QUFDaEQsc0NBQXNDLFVBQVUsR0FBRztBQUNuRCxzQ0FBc0MsVUFBVSxHQUFHO0FBQ25ELHNDQUFzQyxVQUFVLEdBQUc7QUFDbkQsc0NBQXNDLFVBQVUsR0FBRztBQUNuRCxzQ0FBc0MsVUFBVSxHQUFHO0FBQ25ELHNDQUFzQyxVQUFVLEdBQUc7QUFDbkQsc0NBQXNDLFVBQVUsR0FBRztBQUNuRCxzQ0FBc0MsVUFBVSxHQUFHO0FBQ25ELHNDQUFzQyxVQUFVLEdBQUc7QUFDbkQsc0NBQXNDLFVBQVUsR0FBRztBQUNuRCxvQ0FBb0MsVUFBVSxHQUFHO0FBQ2pELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQsb0NBQW9DLFVBQVUsR0FBRztBQUNqRCxvQ0FBb0MsVUFBVSxHQUFHO0FBQ2pELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQsb0NBQW9DLFVBQVUsR0FBRztBQUNqRCxvQ0FBb0MsVUFBVSxHQUFHO0FBQ2pELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQsb0NBQW9DLFVBQVUsR0FBRztBQUNqRCxvQ0FBb0MsVUFBVSxHQUFHO0FBQ2pELG9DQUFvQyxVQUFVLEdBQUc7QUFDakQsb0NBQW9DLFVBQVUsR0FBRztBQUNqRCxxQ0FBcUMsVUFBVSxHQUFHO0FBQ2xELHNDQUFzQyxVQUFVLEdBQUc7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQix1REFBdUQsRUFBRTs7QUFFM0UsbUJBQW1CLGFBQWE7QUFDaEMsMkJBQTJCOztBQUUzQjs7QUFFQSxnQ0FBZ0M7QUFDaEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCO0FBQzdCO0FBQ0EsV0FBVyx5QkFBeUI7QUFDcEM7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBLGtCQUFrQjs7QUFFbEIsc0JBQXNCOztBQUV0QjtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0QsRUFBRTtBQUN4RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxxREFBcUQ7O0FBRXJELDhCQUE4Qjs7QUFFOUIscUNBQXFDLFFBQVE7QUFDN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNEJBQTRCOztBQUU1QjtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVc7QUFDWCx1Q0FBdUM7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7OztBQUdBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUNBQXVDOztBQUV2QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWixxQ0FBcUM7O0FBRXJDLENBQUM7QUFDRDtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7O0FBRUEsOEVBQThFOztBQUU5RSw2QkFBNkI7O0FBRTdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBLDRDQUE0Qzs7QUFFNUMsOEJBQThCOztBQUU5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0I7QUFDbEIsOEJBQThCOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlFQUF5RTtBQUN6RTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsaUJBQWlCO0FBQ3BDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7O0FBRXpCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQixpQkFBaUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxzRUFBc0U7O0FBRXRFO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQkFBMkI7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7O0FBRVY7QUFDQSx1QkFBdUI7O0FBRXZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOzs7QUFHQTtBQUNBO0FBQ0EsU0FBUzs7O0FBR1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrRkFBK0YsS0FBSztBQUNwRztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGVBQWU7QUFDbEM7QUFDQSxvREFBb0Q7QUFDcEQsNENBQTRDLElBQUk7QUFDaEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEMsc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sa0RBQWtEO0FBQ3pEO0FBQ0EsOENBQThDOztBQUU5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1COztBQUVuQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBMEM7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCLEVBQUUsWUFBWSxFQUFFOztBQUU3QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsbUJBQW1CLEVBQUU7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsK0NBQStDO0FBQy9DLDBFQUEwRSxJQUFJO0FBQzlFLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qjs7QUFFdkIscUJBQXFCO0FBQ3JCOztBQUVBLHdEQUF3RCxFQUFFOztBQUUxRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJEQUEyRDs7QUFFM0Q7QUFDQTtBQUNBLEtBQUs7QUFDTCwwQ0FBMEM7QUFDMUM7QUFDQTs7O0FBR0EsNkNBQTZDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixJQUFJO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjs7QUFFL0I7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTs7QUFFZiw2Q0FBNkM7QUFDN0MseUNBQXlDOztBQUV6QywrQkFBK0I7O0FBRS9CO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsT0FBTztBQUMxQix1QkFBdUI7O0FBRXZCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBNkI7O0FBRTdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7OztBQUdMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0I7QUFDeEIsT0FBTztBQUNQLHdCQUF3QjtBQUN4QjtBQUNBLEtBQUs7OztBQUdMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsa0JBQWtCLGdCQUFnQixHQUFHO0FBQ3JDOztBQUVBLG1CQUFtQjs7QUFFbkI7QUFDQSxxQkFBcUIscUJBQXFCO0FBQzFDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBLElBQUksS0FBSztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvREFBb0Q7O0FBRXBEO0FBQ0EsNEJBQTRCO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUEsT0FBTztBQUNQO0FBQ0EsQ0FBQyxFOzs7Ozs7Ozs7OztBQ3pnaUJEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTs7Ozs7Ozs7Ozs7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUMxR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixzQkFBc0I7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFB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O0FBQ0EsS0FBSztBQUNMO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0EsS0FBSztBQUNMLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQ7QUFDakQ7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLG9CQUFvQjtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsb0JBQW9CO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDNVFhOztBQUViO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQixTQUFTO0FBQzVCO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMkJBQTJCLGdCQUFnQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1CLG1CQUFtQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxFQUFFO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxrREFBa0QsRUFBRTtBQUNwRDtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsT0FBTyxXQUFXLGFBQWE7QUFDakQ7O0FBRUEsbUJBQW1CLGtCQUFrQjtBQUNyQztBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLGlCQUFpQjtBQUN4QztBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsc0JBQXNCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNyT2E7O0FBRWIsV0FBVyxtQkFBTyxDQUFDLDREQUFlO0FBQ2xDLFNBQVMsbUJBQU8sQ0FBQywwREFBaUI7QUFDbEM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQ1phOztBQUViLFdBQVcsbUJBQU8sQ0FBQyw0REFBZTtBQUNsQyxhQUFhLG1CQUFPLENBQUMsb0VBQW1COztBQUV4QyxxQkFBcUIsbUJBQU8sQ0FBQyxnRkFBa0I7QUFDL0Msa0JBQWtCLG1CQUFPLENBQUMsb0VBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLDREQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7Ozs7Ozs7Ozs7Ozs7QUNqQmE7O0FBRWIscUJBQXFCLG1CQUFPLENBQUMsZ0ZBQWtCOztBQUUvQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNYYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsb0VBQW1CO0FBQ3hDLGtCQUFrQixtQkFBTyxDQUFDLG9FQUFZOztBQUV0QztBQUNBO0FBQ0EsMkJBQTJCLGlCQUFpQixHQUFHLG9CQUFvQiwyQ0FBMkMsRUFBRSxFQUFFO0FBQ2xIO0FBQ0E7Ozs7Ozs7Ozs7OztBQ1RBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUEsY0FBYyxtQkFBTyxDQUFDLHVEQUFROztBQUU5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLG1CQUFtQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsc0JBQXNCO0FBQ3ZDOztBQUVBO0FBQ0EsbUJBQW1CLDJCQUEyQjs7QUFFOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdCQUFnQixtQkFBbUI7QUFDbkM7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlCQUFpQiwyQkFBMkI7QUFDNUM7QUFDQTs7QUFFQSxRQUFRLHVCQUF1QjtBQUMvQjtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBLGlCQUFpQix1QkFBdUI7QUFDeEM7QUFDQTs7QUFFQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsaUJBQWlCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkLGtEQUFrRCxzQkFBc0I7QUFDeEU7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQSxLQUFLLEtBQXdDLEVBQUUsRUFFN0M7O0FBRUYsUUFBUSxzQkFBaUI7QUFDekI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdURBQXVEO0FBQ3ZEOztBQUVBLDZCQUE2QixtQkFBbUI7O0FBRWhEOztBQUVBOztBQUVBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUM5WUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLFdBQVcsRUFBRTtBQUNyRCx3Q0FBd0MsV0FBVyxFQUFFOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLHNDQUFzQztBQUN0QyxHQUFHO0FBQ0g7QUFDQSw4REFBOEQ7QUFDOUQ7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUN4RkE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sS0FBNkI7QUFDbkMsUUFBUSxLQUE0QjtBQUNwQztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksZ0JBQWdCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsb0JBQW9CO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQixZQUFZO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxZQUFZO0FBQ2xEO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSx1Q0FBdUMsWUFBWTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLDhCQUE4QjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLGdCQUFnQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxZQUFZO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxZQUFZO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLFdBQVc7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQWtEO0FBQ2xELEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLFlBQVk7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLFlBQVk7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLFlBQVk7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGdCQUFnQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLFlBQVk7QUFDekQ7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsMEJBQTBCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxxQkFBcUIsY0FBYztBQUNuQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLFlBQVk7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLGVBQWU7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUIsZUFBZTtBQUNwQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLFlBQVk7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLFlBQVk7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsWUFBWTtBQUNyRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLGdCQUFnQjtBQUN6QztBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsT0FBTztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxZQUFZO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsWUFBWTtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsWUFBWTtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2RUFBNkU7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLEtBQXdCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLFlBQVk7QUFD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QUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7Ozs7Ozs7Ozs7OztBQ3RQQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQixzQkFBc0I7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ2xCQSxlIiwiZmlsZSI6InN0b2Noc3MtY29tbW9uLmJ1bmRsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vdmFyIGNvbmZpZyA9IHJlcXVpcmUoJy4vY29uZmlnLmpzJykocHJvY2Vzcy5lbnYuTk9ERV9FTlYpO1xubGV0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cbmxldCByb3V0ZVByZWZpeCA9ICdzdG9jaHNzJztcbmxldCBhcGlQcmVmaXggPSAgcGF0aC5qb2luKHJvdXRlUHJlZml4LCAnYXBpJyk7XG5sZXQgZ2V0QmFzZVBhdGggPSAoKSA9PiB7XG4gIHRyeSB7XG4gICAgbGV0IGJhc2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdiYXNlJylcbiAgICBsZXQgaHJlZiA9IGJhc2UuZ2V0QXR0cmlidXRlKCdocmVmJylcbiAgICByZXR1cm4gaHJlZlxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnLydcbiAgfVxufTtcbmxldCBnZXRBcGlQYXRoID0gKCkgPT4gcGF0aC5qb2luKGdldEJhc2VQYXRoKCksIGFwaVByZWZpeCk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIHJvdXRlUHJlZml4OiByb3V0ZVByZWZpeCxcbiAgICBnZXRBcGlQYXRoOiBnZXRBcGlQYXRoLFxuICAgIGdldEJhc2VQYXRoOiBnZXRCYXNlUGF0aFxufTtcbiIsIi8qKlxuKiBwbG90bHkuanMgdjEuNDcuMVxuKiBDb3B5cmlnaHQgMjAxMi0yMDE5LCBQbG90bHksIEluYy5cbiogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4qL1xuIWZ1bmN0aW9uKHQpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlKW1vZHVsZS5leHBvcnRzPXQoKTtlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sdCk7ZWxzZXsoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzKS5QbG90bHk9dCgpfX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbil7ZnVuY3Rpb24gaShvLHMpe2lmKCFyW29dKXtpZighZVtvXSl7dmFyIGw9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighcyYmbClyZXR1cm4gbChvLCEwKTtpZihhKXJldHVybiBhKG8sITApO3ZhciBjPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgYy5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGN9dmFyIHU9cltvXT17ZXhwb3J0czp7fX07ZVtvXVswXS5jYWxsKHUuZXhwb3J0cyxmdW5jdGlvbih0KXtyZXR1cm4gaShlW29dWzFdW3RdfHx0KX0sdSx1LmV4cG9ydHMsdCxlLHIsbil9cmV0dXJuIHJbb10uZXhwb3J0c31mb3IodmFyIGE9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxvPTA7bzxuLmxlbmd0aDtvKyspaShuW29dKTtyZXR1cm4gaX19KCkoezE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vc3JjL2xpYlwiKSxpPXtcIlgsWCBkaXZcIjpcImRpcmVjdGlvbjpsdHI7Zm9udC1mYW1pbHk6J09wZW4gU2FucycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO21hcmdpbjowO3BhZGRpbmc6MDtcIixcIlggaW5wdXQsWCBidXR0b25cIjpcImZvbnQtZmFtaWx5OidPcGVuIFNhbnMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcIixcIlggaW5wdXQ6Zm9jdXMsWCBidXR0b246Zm9jdXNcIjpcIm91dGxpbmU6bm9uZTtcIixcIlggYVwiOlwidGV4dC1kZWNvcmF0aW9uOm5vbmU7XCIsXCJYIGE6aG92ZXJcIjpcInRleHQtZGVjb3JhdGlvbjpub25lO1wiLFwiWCAuY3Jpc3BcIjpcInNoYXBlLXJlbmRlcmluZzpjcmlzcEVkZ2VzO1wiLFwiWCAudXNlci1zZWxlY3Qtbm9uZVwiOlwiLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTstby11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7XCIsXCJYIHN2Z1wiOlwib3ZlcmZsb3c6aGlkZGVuO1wiLFwiWCBzdmcgYVwiOlwiZmlsbDojNDQ3YWRiO1wiLFwiWCBzdmcgYTpob3ZlclwiOlwiZmlsbDojM2M2ZGM1O1wiLFwiWCAubWFpbi1zdmdcIjpcInBvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtwb2ludGVyLWV2ZW50czpub25lO1wiLFwiWCAubWFpbi1zdmcgLmRyYWdsYXllclwiOlwicG9pbnRlci1ldmVudHM6YWxsO1wiLFwiWCAuY3Vyc29yLWRlZmF1bHRcIjpcImN1cnNvcjpkZWZhdWx0O1wiLFwiWCAuY3Vyc29yLXBvaW50ZXJcIjpcImN1cnNvcjpwb2ludGVyO1wiLFwiWCAuY3Vyc29yLWNyb3NzaGFpclwiOlwiY3Vyc29yOmNyb3NzaGFpcjtcIixcIlggLmN1cnNvci1tb3ZlXCI6XCJjdXJzb3I6bW92ZTtcIixcIlggLmN1cnNvci1jb2wtcmVzaXplXCI6XCJjdXJzb3I6Y29sLXJlc2l6ZTtcIixcIlggLmN1cnNvci1yb3ctcmVzaXplXCI6XCJjdXJzb3I6cm93LXJlc2l6ZTtcIixcIlggLmN1cnNvci1ucy1yZXNpemVcIjpcImN1cnNvcjpucy1yZXNpemU7XCIsXCJYIC5jdXJzb3ItZXctcmVzaXplXCI6XCJjdXJzb3I6ZXctcmVzaXplO1wiLFwiWCAuY3Vyc29yLXN3LXJlc2l6ZVwiOlwiY3Vyc29yOnN3LXJlc2l6ZTtcIixcIlggLmN1cnNvci1zLXJlc2l6ZVwiOlwiY3Vyc29yOnMtcmVzaXplO1wiLFwiWCAuY3Vyc29yLXNlLXJlc2l6ZVwiOlwiY3Vyc29yOnNlLXJlc2l6ZTtcIixcIlggLmN1cnNvci13LXJlc2l6ZVwiOlwiY3Vyc29yOnctcmVzaXplO1wiLFwiWCAuY3Vyc29yLWUtcmVzaXplXCI6XCJjdXJzb3I6ZS1yZXNpemU7XCIsXCJYIC5jdXJzb3ItbnctcmVzaXplXCI6XCJjdXJzb3I6bnctcmVzaXplO1wiLFwiWCAuY3Vyc29yLW4tcmVzaXplXCI6XCJjdXJzb3I6bi1yZXNpemU7XCIsXCJYIC5jdXJzb3ItbmUtcmVzaXplXCI6XCJjdXJzb3I6bmUtcmVzaXplO1wiLFwiWCAuY3Vyc29yLWdyYWJcIjpcImN1cnNvcjotd2Via2l0LWdyYWI7Y3Vyc29yOmdyYWI7XCIsXCJYIC5tb2RlYmFyXCI6XCJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MnB4O3JpZ2h0OjJweDtcIixcIlggLmVhc2UtYmdcIjpcIi13ZWJraXQtdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZSAwczstbW96LXRyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAwLjNzIGVhc2UgMHM7LW1zLXRyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAwLjNzIGVhc2UgMHM7LW8tdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZSAwczt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMC4zcyBlYXNlIDBzO1wiLFwiWCAubW9kZWJhci0taG92ZXI+Om5vdCgud2F0ZXJtYXJrKVwiOlwib3BhY2l0eTowOy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZSAwczstbW96LXRyYW5zaXRpb246b3BhY2l0eSAwLjNzIGVhc2UgMHM7LW1zLXRyYW5zaXRpb246b3BhY2l0eSAwLjNzIGVhc2UgMHM7LW8tdHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZSAwczt0cmFuc2l0aW9uOm9wYWNpdHkgMC4zcyBlYXNlIDBzO1wiLFwiWDpob3ZlciAubW9kZWJhci0taG92ZXIgLm1vZGViYXItZ3JvdXBcIjpcIm9wYWNpdHk6MTtcIixcIlggLm1vZGViYXItZ3JvdXBcIjpcImZsb2F0OmxlZnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmctbGVmdDo4cHg7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3doaXRlLXNwYWNlOm5vd3JhcDtcIixcIlggLm1vZGViYXItYnRuXCI6XCJwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MTZweDtwYWRkaW5nOjNweCA0cHg7aGVpZ2h0OjIycHg7Y3Vyc29yOnBvaW50ZXI7bGluZS1oZWlnaHQ6bm9ybWFsO2JveC1zaXppbmc6Ym9yZGVyLWJveDtcIixcIlggLm1vZGViYXItYnRuIHN2Z1wiOlwicG9zaXRpb246cmVsYXRpdmU7dG9wOjJweDtcIixcIlggLm1vZGViYXIudmVydGljYWxcIjpcImRpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC13cmFwOndyYXA7YWxpZ24tY29udGVudDpmbGV4LWVuZDttYXgtaGVpZ2h0OjEwMCU7XCIsXCJYIC5tb2RlYmFyLnZlcnRpY2FsIHN2Z1wiOlwidG9wOi0xcHg7XCIsXCJYIC5tb2RlYmFyLnZlcnRpY2FsIC5tb2RlYmFyLWdyb3VwXCI6XCJkaXNwbGF5OmJsb2NrO2Zsb2F0Om5vbmU7cGFkZGluZy1sZWZ0OjBweDtwYWRkaW5nLWJvdHRvbTo4cHg7XCIsXCJYIC5tb2RlYmFyLnZlcnRpY2FsIC5tb2RlYmFyLWdyb3VwIC5tb2RlYmFyLWJ0blwiOlwiZGlzcGxheTpibG9jazt0ZXh0LWFsaWduOmNlbnRlcjtcIixcIlggW2RhdGEtdGl0bGVdOmJlZm9yZSxYIFtkYXRhLXRpdGxlXTphZnRlclwiOlwicG9zaXRpb246YWJzb2x1dGU7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7LW1vei10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTstby10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO2Rpc3BsYXk6bm9uZTtvcGFjaXR5OjA7ei1pbmRleDoxMDAxO3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjExMCU7cmlnaHQ6NTAlO1wiLFwiWCBbZGF0YS10aXRsZV06aG92ZXI6YmVmb3JlLFggW2RhdGEtdGl0bGVdOmhvdmVyOmFmdGVyXCI6XCJkaXNwbGF5OmJsb2NrO29wYWNpdHk6MTtcIixcIlggW2RhdGEtdGl0bGVdOmJlZm9yZVwiOlwiY29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjo2cHggc29saWQgdHJhbnNwYXJlbnQ7ei1pbmRleDoxMDAyO21hcmdpbi10b3A6LTEycHg7Ym9yZGVyLWJvdHRvbS1jb2xvcjojNjk3MzhhO21hcmdpbi1yaWdodDotNnB4O1wiLFwiWCBbZGF0YS10aXRsZV06YWZ0ZXJcIjpcImNvbnRlbnQ6YXR0cihkYXRhLXRpdGxlKTtiYWNrZ3JvdW5kOiM2OTczOGE7Y29sb3I6d2hpdGU7cGFkZGluZzo4cHggMTBweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxMnB4O3doaXRlLXNwYWNlOm5vd3JhcDttYXJnaW4tcmlnaHQ6LTE4cHg7Ym9yZGVyLXJhZGl1czoycHg7XCIsXCJYIC52ZXJ0aWNhbCBbZGF0YS10aXRsZV06YmVmb3JlLFggLnZlcnRpY2FsIFtkYXRhLXRpdGxlXTphZnRlclwiOlwidG9wOjAlO3JpZ2h0OjIwMCU7XCIsXCJYIC52ZXJ0aWNhbCBbZGF0YS10aXRsZV06YmVmb3JlXCI6XCJib3JkZXI6NnB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0LWNvbG9yOiM2OTczOGE7bWFyZ2luLXRvcDo4cHg7bWFyZ2luLXJpZ2h0Oi0zMHB4O1wiLFwiWCAuc2VsZWN0LW91dGxpbmVcIjpcImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MTtzaGFwZS1yZW5kZXJpbmc6Y3Jpc3BFZGdlcztcIixcIlggLnNlbGVjdC1vdXRsaW5lLTFcIjpcInN0cm9rZTp3aGl0ZTtcIixcIlggLnNlbGVjdC1vdXRsaW5lLTJcIjpcInN0cm9rZTpibGFjaztzdHJva2UtZGFzaGFycmF5OjJweCAycHg7XCIsWTpcImZvbnQtZmFtaWx5OidPcGVuIFNhbnMnO3Bvc2l0aW9uOmZpeGVkO3RvcDo1MHB4O3JpZ2h0OjIwcHg7ei1pbmRleDoxMDAwMDtmb250LXNpemU6MTBwdDttYXgtd2lkdGg6MTgwcHg7XCIsXCJZIHBcIjpcIm1hcmdpbjowO1wiLFwiWSAubm90aWZpZXItbm90ZVwiOlwibWluLXdpZHRoOjE4MHB4O21heC13aWR0aDoyNTBweDtib3JkZXI6MXB4IHNvbGlkICNmZmY7ei1pbmRleDozMDAwO21hcmdpbjowO2JhY2tncm91bmQtY29sb3I6IzhjOTdhZjtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTQwLDE1MSwxNzUsMC45KTtjb2xvcjojZmZmO3BhZGRpbmc6MTBweDtvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7d29yZC13cmFwOmJyZWFrLXdvcmQ7LW1zLWh5cGhlbnM6YXV0bzstd2Via2l0LWh5cGhlbnM6YXV0bztoeXBoZW5zOmF1dG87XCIsXCJZIC5ub3RpZmllci1jbG9zZVwiOlwiY29sb3I6I2ZmZjtvcGFjaXR5OjAuODtmbG9hdDpyaWdodDtwYWRkaW5nOjAgNXB4O2JhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtmb250LXNpemU6MjBweDtmb250LXdlaWdodDpib2xkO2xpbmUtaGVpZ2h0OjIwcHg7XCIsXCJZIC5ub3RpZmllci1jbG9zZTpob3ZlclwiOlwiY29sb3I6IzQ0NDt0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6cG9pbnRlcjtcIn07Zm9yKHZhciBhIGluIGkpe3ZhciBvPWEucmVwbGFjZSgvXiwvLFwiICxcIikucmVwbGFjZSgvWC9nLFwiLmpzLXBsb3RseS1wbG90IC5wbG90bHlcIikucmVwbGFjZSgvWS9nLFwiLnBsb3RseS1ub3RpZmllclwiKTtuLmFkZFN0eWxlUnVsZShvLGlbYV0pfX0se1wiLi4vc3JjL2xpYlwiOjcwMX1dLDI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e3VuZG86e3dpZHRoOjg1Ny4xLGhlaWdodDoxZTMscGF0aDpcIm04NTcgMzUwcTAtODctMzQtMTY2dC05MS0xMzctMTM3LTkyLTE2Ni0zNHEtOTYgMC0xODMgNDF0LTE0NyAxMTRxLTQgNi00IDEzdDUgMTFsNzYgNzdxNiA1IDE0IDUgOS0xIDEzLTcgNDEtNTMgMTAwLTgydDEyNi0yOXE1OCAwIDExMCAyM3Q5MiA2MSA2MSA5MSAyMiAxMTEtMjIgMTExLTYxIDkxLTkyIDYxLTExMCAyM3EtNTUgMC0xMDUtMjB0LTkwLTU3bDc3LTc3cTE3LTE2IDgtMzgtMTAtMjMtMzMtMjNoLTI1MHEtMTUgMC0yNSAxMXQtMTEgMjV2MjUwcTAgMjQgMjIgMzMgMjIgMTAgMzktOGw3Mi03MnE2MCA1NyAxMzcgODh0MTU5IDMxcTg3IDAgMTY2LTM0dDEzNy05MiA5MS0xMzcgMzQtMTY2elwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0saG9tZTp7d2lkdGg6OTI4LjYsaGVpZ2h0OjFlMyxwYXRoOlwibTc4NiAyOTZ2LTI2N3EwLTE1LTExLTI2dC0yNS0xMGgtMjE0djIxNGgtMTQzdi0yMTRoLTIxNHEtMTUgMC0yNSAxMHQtMTEgMjZ2MjY3cTAgMSAwIDJ0MCAybDMyMSAyNjQgMzIxLTI2NHExLTEgMS00eiBtMTI0IDM5bC0zNC00MXEtNS01LTEyLTZoLTJxLTcgMC0xMiAzbC0zODYgMzIyLTM4Ni0zMjJxLTctNC0xMy00LTcgMi0xMiA3bC0zNSA0MXEtNCA1LTMgMTN0NiAxMmw0MDEgMzM0cTE4IDE1IDQyIDE1dDQzLTE1bDEzNi0xMTR2MTA5cTAgOCA1IDEzdDEzIDVoMTA3cTggMCAxMy01dDUtMTN2LTIyN2wxMjItMTAycTUtNSA2LTEydC00LTEzelwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0sXCJjYW1lcmEtcmV0cm9cIjp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDpcIm01MTggMzg2cTAgOC01IDEzdC0xMyA1cS0zNyAwLTYzLTI3dC0yNi02M3EwLTggNS0xM3QxMy01IDEyIDUgNSAxM3EwIDIzIDE2IDM4dDM4IDE2cTggMCAxMyA1dDUgMTN6IG0xMjUtNzNxMC01OS00Mi0xMDF0LTEwMS00Mi0xMDEgNDItNDIgMTAxIDQyIDEwMSAxMDEgNDIgMTAxLTQyIDQyLTEwMXogbS01NzItMzIwaDg1OHY3MWgtODU4di03MXogbTY0MyAzMjBxMCA4OS02MiAxNTJ0LTE1MiA2Mi0xNTEtNjItNjMtMTUyIDYzLTE1MSAxNTEtNjMgMTUyIDYzIDYyIDE1MXogbS01NzEgMzU4aDIxNHY3MmgtMjE0di03MnogbS03Mi0xMDdoODU4djE0M2gtNDYybC0zNi03MWgtMzYwdi03MnogbTkyOSAxNDN2LTcxNHEwLTMwLTIxLTUxdC01MC0yMWgtODU4cS0yOSAwLTUwIDIxdC0yMSA1MXY3MTRxMCAzMCAyMSA1MXQ1MCAyMWg4NThxMjkgMCA1MC0yMXQyMS01MXpcIix0cmFuc2Zvcm06XCJtYXRyaXgoMSAwIDAgLTEgMCA4NTApXCJ9LHpvb21ib3g6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6XCJtMTAwMC0yNWwtMjUwIDI1MWM0MCA2MyA2MyAxMzggNjMgMjE4IDAgMjI0LTE4MiA0MDYtNDA3IDQwNi0yMjQgMC00MDYtMTgyLTQwNi00MDZzMTgzLTQwNiA0MDctNDA2YzgwIDAgMTU1IDIyIDIxOCA2MmwyNTAtMjUwIDEyNSAxMjV6IG0tODEyIDI1MGwwIDQzOCA0MzcgMCAwLTQzOC00MzcgMHogbTYyIDM3NWwzMTMgMCAwLTMxMi0zMTMgMCAwIDMxMnpcIix0cmFuc2Zvcm06XCJtYXRyaXgoMSAwIDAgLTEgMCA4NTApXCJ9LHBhbjp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDpcIm0xMDAwIDM1MGwtMTg3IDE4OCAwLTEyNS0yNTAgMCAwIDI1MCAxMjUgMC0xODggMTg3LTE4Ny0xODcgMTI1IDAgMC0yNTAtMjUwIDAgMCAxMjUtMTg4LTE4OCAxODYtMTg3IDAgMTI1IDI1MiAwIDAtMjUwLTEyNSAwIDE4Ny0xODggMTg4IDE4OC0xMjUgMCAwIDI1MCAyNTAgMCAwLTEyNiAxODcgMTg4elwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0sem9vbV9wbHVzOnt3aWR0aDo4NzUsaGVpZ2h0OjFlMyxwYXRoOlwibTEgNzg3bDAtODc1IDg3NSAwIDAgODc1LTg3NSAweiBtNjg3LTUwMGwtMTg3IDAgMC0xODctMTI1IDAgMCAxODctMTg4IDAgMCAxMjUgMTg4IDAgMCAxODcgMTI1IDAgMC0xODcgMTg3IDAgMC0xMjV6XCIsdHJhbnNmb3JtOlwibWF0cml4KDEgMCAwIC0xIDAgODUwKVwifSx6b29tX21pbnVzOnt3aWR0aDo4NzUsaGVpZ2h0OjFlMyxwYXRoOlwibTAgNzg4bDAtODc2IDg3NSAwIDAgODc2LTg3NSAweiBtNjg4LTUwMGwtNTAwIDAgMCAxMjUgNTAwIDAgMC0xMjV6XCIsdHJhbnNmb3JtOlwibWF0cml4KDEgMCAwIC0xIDAgODUwKVwifSxhdXRvc2NhbGU6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6XCJtMjUwIDg1MGwtMTg3IDAtNjMgMCAwLTYyIDAtMTg4IDYzIDAgMCAxODggMTg3IDAgMCA2MnogbTY4OCAwbC0xODggMCAwLTYyIDE4OCAwIDAtMTg4IDYyIDAgMCAxODggMCA2Mi02MiAweiBtLTg3NS05MzhsMCAxODgtNjMgMCAwLTE4OCAwLTYyIDYzIDAgMTg3IDAgMCA2Mi0xODcgMHogbTg3NSAxODhsMC0xODgtMTg4IDAgMC02MiAxODggMCA2MiAwIDAgNjIgMCAxODgtNjIgMHogbS0xMjUgMTg4bC0xIDAtOTMtOTQtMTU2IDE1NiAxNTYgMTU2IDkyLTkzIDIgMCAwIDI1MC0yNTAgMCAwLTIgOTMtOTItMTU2LTE1Ni0xNTYgMTU2IDk0IDkyIDAgMi0yNTAgMCAwLTI1MCAwIDAgOTMgOTMgMTU3LTE1Ni0xNTctMTU2LTkzIDk0IDAgMCAwLTI1MCAyNTAgMCAwIDAtOTQgOTMgMTU2IDE1NyAxNTYtMTU3LTkzLTkzIDAgMCAyNTAgMCAwIDI1MHpcIix0cmFuc2Zvcm06XCJtYXRyaXgoMSAwIDAgLTEgMCA4NTApXCJ9LHRvb2x0aXBfYmFzaWM6e3dpZHRoOjE1MDAsaGVpZ2h0OjFlMyxwYXRoOlwibTM3NSA3MjVsMCAwLTM3NS0zNzUgMzc1LTM3NCAwLTEgMTEyNSAwIDAgNzUwLTExMjUgMHpcIix0cmFuc2Zvcm06XCJtYXRyaXgoMSAwIDAgLTEgMCA4NTApXCJ9LHRvb2x0aXBfY29tcGFyZTp7d2lkdGg6MTEyNSxoZWlnaHQ6MWUzLHBhdGg6XCJtMTg3IDc4NmwwIDItMTg3LTE4OCAxODgtMTg3IDAgMCA5MzcgMCAwIDM3My05MzggMHogbTAtNDk5bDAgMS0xODctMTg4IDE4OC0xODggMCAwIDkzNyAwIDAgMzc2LTkzOC0xelwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0scGxvdGx5bG9nbzp7d2lkdGg6MTU0MixoZWlnaHQ6MWUzLHBhdGg6XCJtMC0xMGgxODJ2LTE0MGgtMTgydjE0MHogbTIyOCAxNDZoMTgzdi0yODZoLTE4M3YyODZ6IG0yMjUgNzE0aDE4MnYtMTAwMGgtMTgydjEwMDB6IG0yMjUtMjg1aDE4MnYtNzE1aC0xODJ2NzE1eiBtMjI1IDE0MmgxODN2LTg1N2gtMTgzdjg1N3ogbTIzMS00MjhoMTgydi00MjloLTE4MnY0Mjl6IG0yMjUtMjkxaDE4M3YtMTM4aC0xODN2MTM4elwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0sXCJ6LWF4aXNcIjp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDpcIm04MzMgNWwtMTcgMTA4djQxbC0xMzAtNjUgMTMwLTY2YzAgMCAwIDM4IDAgMzkgMC0xIDM2LTE0IDM5LTI1IDQtMTUtNi0yMi0xNi0zMC0xNS0xMi0zOS0xNi01Ni0yMC05MC0yMi0xODctMjMtMjc5LTIzLTI2MSAwLTM0MSAzNC0zNTMgNTkgMyA2MCAyMjggMTEwIDIyOCAxMTAtMTQwLTgtMzUxLTM1LTM1MS0xMTYgMC0xMjAgMjkzLTE0MiA0NzQtMTQyIDE1NSAwIDQ3NyAyMiA0NzcgMTQyIDAgNTAtNzQgNzktMTYzIDk2eiBtLTM3NCA5NGMtNTgtNS05OS0yMS05OS00MCAwLTI0IDY1LTQzIDE0NC00MyA3OSAwIDE0MyAxOSAxNDMgNDMgMCAxOS00MiAzNC05OCA0MHYyMTZoODdsLTEzMiAxMzUtMTMzLTEzNWg4OHYtMjE2eiBtMTY3IDUxNWgtMTM2djFjMTYgMTYgMzEgMzQgNDYgNTJsODQgMTA5djU0aC0yMzB2LTcxaDEyNHYtMWMtMTYtMTctMjgtMzItNDQtNTFsLTg5LTExNHYtNTFoMjQ1djcyelwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0sXCIzZF9yb3RhdGVcIjp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDpcIm05MjIgNjYwYy01IDQtOSA3LTE0IDExLTM1OSAyNjMtNTgwLTMxLTU4MC0zMWwtMTAyIDI4IDU4LTQwMGMwIDEgMSAxIDIgMiAxMTggMTA4IDM1MSAyNDkgMzUxIDI0OXMtNjIgMjctMTAwIDQyYzg4IDgzIDIyMiAxODMgMzQ3IDEyMiAxNi04IDMwLTE3IDQ0LTI3LTIgMS00IDItNiA0eiBtMzYtMzI5YzAgMCA2NCAyMjktODggMjk2LTYyIDI3LTEyNCAxNC0xNzUtMTEgMTU3LTc4IDIyNS0yMDggMjQ5LTI2NiA4LTE5IDExLTMxIDExLTMxIDIgNSA2IDE1IDExIDMyLTUtMTMtOC0yMC04LTIweiBtLTc3NS0yMzljNzAtMzEgMTE3LTUwIDE5OC0zMi0xMjEgODAtMTk5IDM0Ni0xOTkgMzQ2bC05Ni0xNS01OC0xMmMwIDAgNTUtMjI2IDE1NS0yODd6IG02MDMgMTMzbC0zMTctMTM5YzAgMCA0LTQgMTktMTQgNy01IDI0LTE1IDI0LTE1cy0xNzctMTQ3LTM4OSA0YzIzNS0yODcgNTM2LTExMiA1MzYtMTEybDMxLTIyIDEwMCAyOTktNC0xeiBtLTI5OC0xNTNjNi00IDE0LTkgMjQtMTUgMCAwLTE3IDEwLTI0IDE1elwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0sY2FtZXJhOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOlwibTUwMCA0NTBjLTgzIDAtMTUwLTY3LTE1MC0xNTAgMC04MyA2Ny0xNTAgMTUwLTE1MCA4MyAwIDE1MCA2NyAxNTAgMTUwIDAgODMtNjcgMTUwLTE1MCAxNTB6IG00MDAgMTUwaC0xMjBjLTE2IDAtMzQgMTMtMzkgMjlsLTMxIDkzYy02IDE1LTIzIDI4LTQwIDI4aC0zNDBjLTE2IDAtMzQtMTMtMzktMjhsLTMxLTk0Yy02LTE1LTIzLTI4LTQwLTI4aC0xMjBjLTU1IDAtMTAwLTQ1LTEwMC0xMDB2LTQ1MGMwLTU1IDQ1LTEwMCAxMDAtMTAwaDgwMGM1NSAwIDEwMCA0NSAxMDAgMTAwdjQ1MGMwIDU1LTQ1IDEwMC0xMDAgMTAweiBtLTQwMC01NTBjLTEzOCAwLTI1MCAxMTItMjUwIDI1MCAwIDEzOCAxMTIgMjUwIDI1MCAyNTAgMTM4IDAgMjUwLTExMiAyNTAtMjUwIDAtMTM4LTExMi0yNTAtMjUwLTI1MHogbTM2NSAzODBjLTE5IDAtMzUgMTYtMzUgMzUgMCAxOSAxNiAzNSAzNSAzNSAxOSAwIDM1LTE2IDM1LTM1IDAtMTktMTYtMzUtMzUtMzV6XCIsdHJhbnNmb3JtOlwibWF0cml4KDEgMCAwIC0xIDAgODUwKVwifSxtb3ZpZTp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDpcIm05MzggNDEzbC0xODgtMTI1YzAgMzctMTcgNzEtNDQgOTQgNjQgMzggMTA3IDEwNyAxMDcgMTg3IDAgMTIxLTk4IDIxOS0yMTkgMjE5LTEyMSAwLTIxOS05OC0yMTktMjE5IDAtNjEgMjUtMTE3IDY2LTE1NmgtMTE1YzMwIDMzIDQ5IDc2IDQ5IDEyNSAwIDEwMy04NCAxODctMTg3IDE4N3MtMTg4LTg0LTE4OC0xODdjMC01NyAyNi0xMDcgNjUtMTQxLTM4LTIyLTY1LTYyLTY1LTEwOXYtMjUwYzAtNzAgNTYtMTI2IDEyNS0xMjZoNTAwYzY5IDAgMTI1IDU2IDEyNSAxMjZsMTg4LTEyNmMzNCAwIDYyIDI4IDYyIDYzdjM3NWMwIDM1LTI4IDYzLTYyIDYzeiBtLTc1MCAwYy02OSAwLTEyNSA1Ni0xMjUgMTI1czU2IDEyNSAxMjUgMTI1IDEyNS01NiAxMjUtMTI1LTU2LTEyNS0xMjUtMTI1eiBtNDA2LTFjLTg3IDAtMTU3IDcwLTE1NyAxNTcgMCA4NiA3MCAxNTYgMTU3IDE1NnMxNTYtNzAgMTU2LTE1Ni03MC0xNTctMTU2LTE1N3pcIix0cmFuc2Zvcm06XCJtYXRyaXgoMSAwIDAgLTEgMCA4NTApXCJ9LHF1ZXN0aW9uOnt3aWR0aDo4NTcuMSxoZWlnaHQ6MWUzLHBhdGg6XCJtNTAwIDgydjEwN3EwIDgtNSAxM3QtMTMgNWgtMTA3cS04IDAtMTMtNXQtNS0xM3YtMTA3cTAtOCA1LTEzdDEzLTVoMTA3cTggMCAxMyA1dDUgMTN6IG0xNDMgMzc1cTAgNDktMzEgOTF0LTc3IDY1LTk1IDIzcS0xMzYgMC0yMDctMTE5LTktMTQgNC0yNGw3NC01NXE0LTQgMTAtNCA5IDAgMTQgNyAzMCAzOCA0OCA1MSAxOSAxNCA0OCAxNCAyNyAwIDQ4LTE1dDIxLTMzcTAtMjEtMTEtMzR0LTM4LTI1cS0zNS0xNi02NS00OHQtMjktNzB2LTIwcTAtOCA1LTEzdDEzLTVoMTA3cTggMCAxMyA1dDUgMTNxMCAxMCAxMiAyN3QzMCAyOHExOCAxMCAyOCAxNnQyNSAxOSAyNSAyNyAxNiAzNCA3IDQ1eiBtMjE0LTEwN3EwLTExNy01Ny0yMTV0LTE1Ni0xNTYtMjE1LTU4LTIxNiA1OC0xNTUgMTU2LTU4IDIxNSA1OCAyMTUgMTU1IDE1NiAyMTYgNTggMjE1LTU4IDE1Ni0xNTYgNTctMjE1elwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0sZGlzazp7d2lkdGg6ODU3LjEsaGVpZ2h0OjFlMyxwYXRoOlwibTIxNC03aDQyOXYyMTRoLTQyOXYtMjE0eiBtNTAwIDBoNzJ2NTAwcTAgOC02IDIxdC0xMSAyMGwtMTU3IDE1NnEtNSA2LTE5IDEydC0yMiA1di0yMzJxMC0yMi0xNS0zOHQtMzgtMTZoLTMyMnEtMjIgMC0zNyAxNnQtMTYgMzh2MjMyaC03MnYtNzE0aDcydjIzMnEwIDIyIDE2IDM4dDM3IDE2aDQ2NXEyMiAwIDM4LTE2dDE1LTM4di0yMzJ6IG0tMjE0IDUxOHYxNzhxMCA4LTUgMTN0LTEzIDVoLTEwN3EtNyAwLTEzLTV0LTUtMTN2LTE3OHEwLTggNS0xM3QxMy01aDEwN3E3IDAgMTMgNXQ1IDEzeiBtMzU3LTE4di01MThxMC0yMi0xNS0zOHQtMzgtMTZoLTc1MHEtMjMgMC0zOCAxNnQtMTYgMzh2NzUwcTAgMjIgMTYgMzh0MzggMTZoNTE3cTIzIDAgNTAtMTJ0NDItMjZsMTU2LTE1N3ExNi0xNSAyNy00MnQxMS00OXpcIix0cmFuc2Zvcm06XCJtYXRyaXgoMSAwIDAgLTEgMCA4NTApXCJ9LGxhc3NvOnt3aWR0aDoxMDMxLGhlaWdodDoxZTMscGF0aDpcIm0xMDE4IDUzOGMtMzYgMjA3LTI5MCAzMzYtNTY4IDI4Ni0yNzctNDgtNDczLTI1Ni00MzYtNDYzIDEwLTU3IDM2LTEwOCA3Ni0xNTEtMTMtNjYgMTEtMTM3IDY4LTE4MyAzNC0yOCA3NS00MSAxMTQtNDJsLTU1LTcwIDAgMGMtMi0xLTMtMi00LTMtMTAtMTQtOC0zNCA1LTQ1IDE0LTExIDM0LTggNDUgNCAxIDEgMiAzIDIgNWwwIDAgMTEzIDE0MGMxNiAxMSAzMSAyNCA0NSA0MCA0IDMgNiA3IDggMTEgNDgtMyAxMDAgMCAxNTEgOSAyNzggNDggNDczIDI1NSA0MzYgNDYyeiBtLTYyNC0zNzljLTgwIDE0LTE0OSA0OC0xOTcgOTYgNDIgNDIgMTA5IDQ3IDE1NiA5IDMzLTI2IDQ3LTY2IDQxLTEwNXogbS0xODctNzRjLTE5IDE2LTMzIDM3LTM5IDYwIDUwLTMyIDEwOS01NSAxNzQtNjgtNDItMjUtOTUtMjQtMTM1IDh6IG0zNjAgNzVjLTM0LTctNjktOS0xMDItOCA4IDYyLTE2IDEyOC02OCAxNzAtNzMgNTktMTc1IDU0LTI0NC01LTkgMjAtMTYgNDAtMjAgNjEtMjggMTU5IDEyMSAzMTcgMzMzIDM1NHM0MDctNjAgNDM0LTIxN2MyOC0xNTktMTIxLTMxOC0zMzMtMzU1elwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDg1MClcIn0sc2VsZWN0Ym94Ont3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOlwibTAgODUwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg2IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODUgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtLTg1Ny0yODZsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG04NTcgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbS04NTctMjg1bDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtODU3IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0tODU3LTI4NmwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg1IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODYgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHpcIix0cmFuc2Zvcm06XCJtYXRyaXgoMSAwIDAgLTEgMCA4NTApXCJ9LHNwaWtlbGluZTp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDpcIk01MTIgNDA5YzAtNTctNDYtMTA0LTEwMy0xMDQtNTcgMC0xMDQgNDctMTA0IDEwNCAwIDU3IDQ3IDEwMyAxMDQgMTAzIDU3IDAgMTAzLTQ2IDEwMy0xMDN6IG0tMzI3LTM5bDkyIDAgMCA5Mi05MiAweiBtLTE4NSAwbDkyIDAgMCA5Mi05MiAweiBtMzcwLTE4Nmw5MiAwIDAgOTMtOTIgMHogbTAtMTg0bDkyIDAgMCA5Mi05MiAwelwiLHRyYW5zZm9ybTpcIm1hdHJpeCgxLjUgMCAwIC0xLjUgMCA4NTApXCJ9LG5ld3Bsb3RseWxvZ286e25hbWU6XCJuZXdwbG90bHlsb2dvXCIsc3ZnOlwiPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAxMzIgMTMyJz48ZGVmcz48c3R5bGU+LmNscy0xIHtmaWxsOiAjMTE5ZGZmO30gLmNscy0yIHtmaWxsOiAjMjVmZWZkO30gLmNscy0zIHtmaWxsOiAjZmZmO308L3N0eWxlPjwvZGVmcz48dGl0bGU+cGxvdGx5LWxvZ29tYXJrPC90aXRsZT48ZyBpZD0nc3ltYm9sJz48cmVjdCBjbGFzcz0nY2xzLTEnIHdpZHRoPScxMzInIGhlaWdodD0nMTMyJyByeD0nNicgcnk9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9Jzc4JyBjeT0nNTQnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9JzEwMicgY3k9JzMwJyByPSc2Jy8+PGNpcmNsZSBjbGFzcz0nY2xzLTInIGN4PSc3OCcgY3k9JzMwJyByPSc2Jy8+PGNpcmNsZSBjbGFzcz0nY2xzLTInIGN4PSc1NCcgY3k9JzMwJyByPSc2Jy8+PGNpcmNsZSBjbGFzcz0nY2xzLTInIGN4PSczMCcgY3k9JzMwJyByPSc2Jy8+PGNpcmNsZSBjbGFzcz0nY2xzLTInIGN4PSczMCcgY3k9JzU0JyByPSc2Jy8+PHBhdGggY2xhc3M9J2Nscy0zJyBkPSdNMzAsNzJhNiw2LDAsMCwwLTYsNnYyNGE2LDYsMCwwLDAsMTIsMFY3OEE2LDYsMCwwLDAsMzAsNzJaJy8+PHBhdGggY2xhc3M9J2Nscy0zJyBkPSdNNzgsNzJhNiw2LDAsMCwwLTYsNnYyNGE2LDYsMCwwLDAsMTIsMFY3OEE2LDYsMCwwLDAsNzgsNzJaJy8+PHBhdGggY2xhc3M9J2Nscy0zJyBkPSdNNTQsNDhhNiw2LDAsMCwwLTYsNnY0OGE2LDYsMCwwLDAsMTIsMFY1NEE2LDYsMCwwLDAsNTQsNDhaJy8+PHBhdGggY2xhc3M9J2Nscy0zJyBkPSdNMTAyLDQ4YTYsNiwwLDAsMC02LDZ2NDhhNiw2LDAsMCwwLDEyLDBWNTRBNiw2LDAsMCwwLDEwMiw0OFonLz48L2c+PC9zdmc+XCJ9fX0se31dLDM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFuc2Zvcm1zL2FnZ3JlZ2F0ZVwiKX0se1wiLi4vc3JjL3RyYW5zZm9ybXMvYWdncmVnYXRlXCI6MTE4OH1dLDQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvYmFyXCIpfSx7XCIuLi9zcmMvdHJhY2VzL2JhclwiOjg0Nn1dLDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvYmFycG9sYXJcIil9LHtcIi4uL3NyYy90cmFjZXMvYmFycG9sYXJcIjo4NTh9XSw2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL2JveFwiKX0se1wiLi4vc3JjL3RyYWNlcy9ib3hcIjo4Njh9XSw3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvY29tcG9uZW50cy9jYWxlbmRhcnNcIil9LHtcIi4uL3NyYy9jb21wb25lbnRzL2NhbGVuZGFyc1wiOjU3Nn1dLDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvY2FuZGxlc3RpY2tcIil9LHtcIi4uL3NyYy90cmFjZXMvY2FuZGxlc3RpY2tcIjo4Nzd9XSw5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL2NhcnBldFwiKX0se1wiLi4vc3JjL3RyYWNlcy9jYXJwZXRcIjo4OTZ9XSwxMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9jaG9yb3BsZXRoXCIpfSx7XCIuLi9zcmMvdHJhY2VzL2Nob3JvcGxldGhcIjo5MTB9XSwxMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9jb25lXCIpfSx7XCIuLi9zcmMvdHJhY2VzL2NvbmVcIjo5MTh9XSwxMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9jb250b3VyXCIpfSx7XCIuLi9zcmMvdHJhY2VzL2NvbnRvdXJcIjo5MzN9XSwxMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9jb250b3VyY2FycGV0XCIpfSx7XCIuLi9zcmMvdHJhY2VzL2NvbnRvdXJjYXJwZXRcIjo5NDR9XSwxNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL2NvcmVcIil9LHtcIi4uL3NyYy9jb3JlXCI6NjgwfV0sMTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFuc2Zvcm1zL2ZpbHRlclwiKX0se1wiLi4vc3JjL3RyYW5zZm9ybXMvZmlsdGVyXCI6MTE4OX1dLDE2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhbnNmb3Jtcy9ncm91cGJ5XCIpfSx7XCIuLi9zcmMvdHJhbnNmb3Jtcy9ncm91cGJ5XCI6MTE5MH1dLDE3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL2hlYXRtYXBcIil9LHtcIi4uL3NyYy90cmFjZXMvaGVhdG1hcFwiOjk1Nn1dLDE4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL2hlYXRtYXBnbFwiKX0se1wiLi4vc3JjL3RyYWNlcy9oZWF0bWFwZ2xcIjo5NjV9XSwxOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW1cIil9LHtcIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtXCI6OTc3fV0sMjA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtMmRcIil9LHtcIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtMmRcIjo5ODR9XSwyMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZGNvbnRvdXJcIil9LHtcIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtMmRjb250b3VyXCI6OTg4fV0sMjI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9jb3JlXCIpO24ucmVnaXN0ZXIoW3QoXCIuL2JhclwiKSx0KFwiLi9ib3hcIiksdChcIi4vaGVhdG1hcFwiKSx0KFwiLi9oaXN0b2dyYW1cIiksdChcIi4vaGlzdG9ncmFtMmRcIiksdChcIi4vaGlzdG9ncmFtMmRjb250b3VyXCIpLHQoXCIuL2NvbnRvdXJcIiksdChcIi4vc2NhdHRlcnRlcm5hcnlcIiksdChcIi4vdmlvbGluXCIpLHQoXCIuL3dhdGVyZmFsbFwiKSx0KFwiLi9waWVcIiksdChcIi4vc3VuYnVyc3RcIiksdChcIi4vc2NhdHRlcjNkXCIpLHQoXCIuL3N1cmZhY2VcIiksdChcIi4vaXNvc3VyZmFjZVwiKSx0KFwiLi92b2x1bWVcIiksdChcIi4vbWVzaDNkXCIpLHQoXCIuL2NvbmVcIiksdChcIi4vc3RyZWFtdHViZVwiKSx0KFwiLi9zY2F0dGVyZ2VvXCIpLHQoXCIuL2Nob3JvcGxldGhcIiksdChcIi4vc2NhdHRlcmdsXCIpLHQoXCIuL3NwbG9tXCIpLHQoXCIuL3BvaW50Y2xvdWRcIiksdChcIi4vaGVhdG1hcGdsXCIpLHQoXCIuL3BhcmNvb3Jkc1wiKSx0KFwiLi9wYXJjYXRzXCIpLHQoXCIuL3NjYXR0ZXJtYXBib3hcIiksdChcIi4vc2Fua2V5XCIpLHQoXCIuL3RhYmxlXCIpLHQoXCIuL2NhcnBldFwiKSx0KFwiLi9zY2F0dGVyY2FycGV0XCIpLHQoXCIuL2NvbnRvdXJjYXJwZXRcIiksdChcIi4vb2hsY1wiKSx0KFwiLi9jYW5kbGVzdGlja1wiKSx0KFwiLi9zY2F0dGVycG9sYXJcIiksdChcIi4vc2NhdHRlcnBvbGFyZ2xcIiksdChcIi4vYmFycG9sYXJcIildKSxuLnJlZ2lzdGVyKFt0KFwiLi9hZ2dyZWdhdGVcIiksdChcIi4vZmlsdGVyXCIpLHQoXCIuL2dyb3VwYnlcIiksdChcIi4vc29ydFwiKV0pLG4ucmVnaXN0ZXIoW3QoXCIuL2NhbGVuZGFyc1wiKV0pLGUuZXhwb3J0cz1ufSx7XCIuL2FnZ3JlZ2F0ZVwiOjMsXCIuL2JhclwiOjQsXCIuL2JhcnBvbGFyXCI6NSxcIi4vYm94XCI6NixcIi4vY2FsZW5kYXJzXCI6NyxcIi4vY2FuZGxlc3RpY2tcIjo4LFwiLi9jYXJwZXRcIjo5LFwiLi9jaG9yb3BsZXRoXCI6MTAsXCIuL2NvbmVcIjoxMSxcIi4vY29udG91clwiOjEyLFwiLi9jb250b3VyY2FycGV0XCI6MTMsXCIuL2NvcmVcIjoxNCxcIi4vZmlsdGVyXCI6MTUsXCIuL2dyb3VwYnlcIjoxNixcIi4vaGVhdG1hcFwiOjE3LFwiLi9oZWF0bWFwZ2xcIjoxOCxcIi4vaGlzdG9ncmFtXCI6MTksXCIuL2hpc3RvZ3JhbTJkXCI6MjAsXCIuL2hpc3RvZ3JhbTJkY29udG91clwiOjIxLFwiLi9pc29zdXJmYWNlXCI6MjMsXCIuL21lc2gzZFwiOjI0LFwiLi9vaGxjXCI6MjUsXCIuL3BhcmNhdHNcIjoyNixcIi4vcGFyY29vcmRzXCI6MjcsXCIuL3BpZVwiOjI4LFwiLi9wb2ludGNsb3VkXCI6MjksXCIuL3NhbmtleVwiOjMwLFwiLi9zY2F0dGVyM2RcIjozMSxcIi4vc2NhdHRlcmNhcnBldFwiOjMyLFwiLi9zY2F0dGVyZ2VvXCI6MzMsXCIuL3NjYXR0ZXJnbFwiOjM0LFwiLi9zY2F0dGVybWFwYm94XCI6MzUsXCIuL3NjYXR0ZXJwb2xhclwiOjM2LFwiLi9zY2F0dGVycG9sYXJnbFwiOjM3LFwiLi9zY2F0dGVydGVybmFyeVwiOjM4LFwiLi9zb3J0XCI6MzksXCIuL3NwbG9tXCI6NDAsXCIuL3N0cmVhbXR1YmVcIjo0MSxcIi4vc3VuYnVyc3RcIjo0MixcIi4vc3VyZmFjZVwiOjQzLFwiLi90YWJsZVwiOjQ0LFwiLi92aW9saW5cIjo0NSxcIi4vdm9sdW1lXCI6NDYsXCIuL3dhdGVyZmFsbFwiOjQ3fV0sMjM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvaXNvc3VyZmFjZVwiKX0se1wiLi4vc3JjL3RyYWNlcy9pc29zdXJmYWNlXCI6OTkzfV0sMjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvbWVzaDNkXCIpfSx7XCIuLi9zcmMvdHJhY2VzL21lc2gzZFwiOjk5OH1dLDI1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL29obGNcIil9LHtcIi4uL3NyYy90cmFjZXMvb2hsY1wiOjEwMDN9XSwyNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9wYXJjYXRzXCIpfSx7XCIuLi9zcmMvdHJhY2VzL3BhcmNhdHNcIjoxMDEyfV0sMjc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvcGFyY29vcmRzXCIpfSx7XCIuLi9zcmMvdHJhY2VzL3BhcmNvb3Jkc1wiOjEwMjF9XSwyODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9waWVcIil9LHtcIi4uL3NyYy90cmFjZXMvcGllXCI6MTAzMn1dLDI5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3BvaW50Y2xvdWRcIil9LHtcIi4uL3NyYy90cmFjZXMvcG9pbnRjbG91ZFwiOjEwNDF9XSwzMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9zYW5rZXlcIil9LHtcIi4uL3NyYy90cmFjZXMvc2Fua2V5XCI6MTA0N31dLDMxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXIzZFwiKX0se1wiLi4vc3JjL3RyYWNlcy9zY2F0dGVyM2RcIjoxMDg0fV0sMzI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvc2NhdHRlcmNhcnBldFwiKX0se1wiLi4vc3JjL3RyYWNlcy9zY2F0dGVyY2FycGV0XCI6MTA5MH1dLDMzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJnZW9cIil9LHtcIi4uL3NyYy90cmFjZXMvc2NhdHRlcmdlb1wiOjEwOTd9XSwzNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9zY2F0dGVyZ2xcIil9LHtcIi4uL3NyYy90cmFjZXMvc2NhdHRlcmdsXCI6MTEwNX1dLDM1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJtYXBib3hcIil9LHtcIi4uL3NyYy90cmFjZXMvc2NhdHRlcm1hcGJveFwiOjExMTF9XSwzNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9zY2F0dGVycG9sYXJcIil9LHtcIi4uL3NyYy90cmFjZXMvc2NhdHRlcnBvbGFyXCI6MTExOH1dLDM3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJwb2xhcmdsXCIpfSx7XCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJwb2xhcmdsXCI6MTEyMn1dLDM4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJ0ZXJuYXJ5XCIpfSx7XCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJ0ZXJuYXJ5XCI6MTEyOH1dLDM5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhbnNmb3Jtcy9zb3J0XCIpfSx7XCIuLi9zcmMvdHJhbnNmb3Jtcy9zb3J0XCI6MTE5Mn1dLDQwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3NwbG9tXCIpfSx7XCIuLi9zcmMvdHJhY2VzL3NwbG9tXCI6MTEzM31dLDQxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3N0cmVhbXR1YmVcIil9LHtcIi4uL3NyYy90cmFjZXMvc3RyZWFtdHViZVwiOjExMzh9XSw0MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9zdW5idXJzdFwiKX0se1wiLi4vc3JjL3RyYWNlcy9zdW5idXJzdFwiOjExNDR9XSw0MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy9zdXJmYWNlXCIpfSx7XCIuLi9zcmMvdHJhY2VzL3N1cmZhY2VcIjoxMTUzfV0sNDQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvdGFibGVcIil9LHtcIi4uL3NyYy90cmFjZXMvdGFibGVcIjoxMTYxfV0sNDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4uL3NyYy90cmFjZXMvdmlvbGluXCIpfSx7XCIuLi9zcmMvdHJhY2VzL3Zpb2xpblwiOjExNjl9XSw0NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi4vc3JjL3RyYWNlcy92b2x1bWVcIil9LHtcIi4uL3NyYy90cmFjZXMvdm9sdW1lXCI6MTE3N31dLDQ3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuLi9zcmMvdHJhY2VzL3dhdGVyZmFsbFwiKX0se1wiLi4vc3JjL3RyYWNlcy93YXRlcmZhbGxcIjoxMTgzfV0sNDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9KHQ9dHx8e30pLmV5ZXx8WzAsMCwxXSxyPXQuY2VudGVyfHxbMCwwLDBdLHM9dC51cHx8WzAsMSwwXSxsPXQuZGlzdGFuY2VMaW1pdHN8fFswLDEvMF0sYz10Lm1vZGV8fFwidHVybnRhYmxlXCIsdT1uKCksaD1pKCksZj1hKCk7cmV0dXJuIHUuc2V0RGlzdGFuY2VMaW1pdHMobFswXSxsWzFdKSx1Lmxvb2tBdCgwLGUscixzKSxoLnNldERpc3RhbmNlTGltaXRzKGxbMF0sbFsxXSksaC5sb29rQXQoMCxlLHIscyksZi5zZXREaXN0YW5jZUxpbWl0cyhsWzBdLGxbMV0pLGYubG9va0F0KDAsZSxyLHMpLG5ldyBvKHt0dXJudGFibGU6dSxvcmJpdDpoLG1hdHJpeDpmfSxjKX07dmFyIG49dChcInR1cm50YWJsZS1jYW1lcmEtY29udHJvbGxlclwiKSxpPXQoXCJvcmJpdC1jYW1lcmEtY29udHJvbGxlclwiKSxhPXQoXCJtYXRyaXgtY2FtZXJhLWNvbnRyb2xsZXJcIik7ZnVuY3Rpb24gbyh0LGUpe3RoaXMuX2NvbnRyb2xsZXJOYW1lcz1PYmplY3Qua2V5cyh0KSx0aGlzLl9jb250cm9sbGVyTGlzdD10aGlzLl9jb250cm9sbGVyTmFtZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSksdGhpcy5fbW9kZT1lLHRoaXMuX2FjdGl2ZT10W2VdLHRoaXMuX2FjdGl2ZXx8KHRoaXMuX21vZGU9XCJ0dXJudGFibGVcIix0aGlzLl9hY3RpdmU9dC50dXJudGFibGUpLHRoaXMubW9kZXM9dGhpcy5fY29udHJvbGxlck5hbWVzLHRoaXMuY29tcHV0ZWRNYXRyaXg9dGhpcy5fYWN0aXZlLmNvbXB1dGVkTWF0cml4LHRoaXMuY29tcHV0ZWRFeWU9dGhpcy5fYWN0aXZlLmNvbXB1dGVkRXllLHRoaXMuY29tcHV0ZWRVcD10aGlzLl9hY3RpdmUuY29tcHV0ZWRVcCx0aGlzLmNvbXB1dGVkQ2VudGVyPXRoaXMuX2FjdGl2ZS5jb21wdXRlZENlbnRlcix0aGlzLmNvbXB1dGVkUmFkaXVzPXRoaXMuX2FjdGl2ZS5jb21wdXRlZFJhZGl1c312YXIgcz1vLnByb3RvdHlwZTtbW1wiZmx1c2hcIiwxXSxbXCJpZGxlXCIsMV0sW1wibG9va0F0XCIsNF0sW1wicm90YXRlXCIsNF0sW1wicGFuXCIsNF0sW1widHJhbnNsYXRlXCIsNF0sW1wic2V0TWF0cml4XCIsMl0sW1wic2V0RGlzdGFuY2VMaW1pdHNcIiwyXSxbXCJzZXREaXN0YW5jZVwiLDJdXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10WzBdLHI9W10sbj0wO248dFsxXTsrK24pci5wdXNoKFwiYVwiK24pO3ZhciBpPVwidmFyIGNjPXRoaXMuX2NvbnRyb2xsZXJMaXN0O2Zvcih2YXIgaT0wO2k8Y2MubGVuZ3RoOysraSl7Y2NbaV0uXCIrdFswXStcIihcIityLmpvaW4oKStcIil9XCI7c1tlXT1GdW5jdGlvbi5hcHBseShudWxsLHIuY29uY2F0KGkpKX0pLHMucmVjYWxjTWF0cml4PWZ1bmN0aW9uKHQpe3RoaXMuX2FjdGl2ZS5yZWNhbGNNYXRyaXgodCl9LHMuZ2V0RGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FjdGl2ZS5nZXREaXN0YW5jZSh0KX0scy5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYWN0aXZlLmdldERpc3RhbmNlTGltaXRzKHQpfSxzLmxhc3RUPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZS5sYXN0VCgpfSxzLnNldE1vZGU9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuX21vZGUpe3ZhciBlPXRoaXMuX2NvbnRyb2xsZXJOYW1lcy5pbmRleE9mKHQpO2lmKCEoZTwwKSl7dmFyIHI9dGhpcy5fYWN0aXZlLG49dGhpcy5fY29udHJvbGxlckxpc3RbZV0saT1NYXRoLm1heChyLmxhc3RUKCksbi5sYXN0VCgpKTtyLnJlY2FsY01hdHJpeChpKSxuLnNldE1hdHJpeChpLHIuY29tcHV0ZWRNYXRyaXgpLHRoaXMuX2FjdGl2ZT1uLHRoaXMuX21vZGU9dCx0aGlzLmNvbXB1dGVkTWF0cml4PXRoaXMuX2FjdGl2ZS5jb21wdXRlZE1hdHJpeCx0aGlzLmNvbXB1dGVkRXllPXRoaXMuX2FjdGl2ZS5jb21wdXRlZEV5ZSx0aGlzLmNvbXB1dGVkVXA9dGhpcy5fYWN0aXZlLmNvbXB1dGVkVXAsdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLl9hY3RpdmUuY29tcHV0ZWRDZW50ZXIsdGhpcy5jb21wdXRlZFJhZGl1cz10aGlzLl9hY3RpdmUuY29tcHV0ZWRSYWRpdXN9fX0scy5nZXRNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vZGV9fSx7XCJtYXRyaXgtY2FtZXJhLWNvbnRyb2xsZXJcIjo0MjYsXCJvcmJpdC1jYW1lcmEtY29udHJvbGxlclwiOjQ0OSxcInR1cm50YWJsZS1jYW1lcmEtY29udHJvbGxlclwiOjUyN31dLDQ5OltmdW5jdGlvbih0LGUscil7dmFyIG4saTtuPXRoaXMsaT1mdW5jdGlvbih0LGUscixuKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBpKHQpe3JldHVybiB0LnRhcmdldC5kZXB0aH1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIHQuc291cmNlTGlua3MubGVuZ3RoP3QuZGVwdGg6ZS0xfWZ1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gYyh0LnNvdXJjZSxlLnNvdXJjZSl8fHQuaW5kZXgtZS5pbmRleH1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIGModC50YXJnZXQsZS50YXJnZXQpfHx0LmluZGV4LWUuaW5kZXh9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiB0LnkwLWUueTB9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC52YWx1ZX1mdW5jdGlvbiBoKHQpe3JldHVybih0LnkwK3QueTEpLzJ9ZnVuY3Rpb24gZih0KXtyZXR1cm4gaCh0LnNvdXJjZSkqdC52YWx1ZX1mdW5jdGlvbiBwKHQpe3JldHVybiBoKHQudGFyZ2V0KSp0LnZhbHVlfWZ1bmN0aW9uIGQodCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdC5ub2Rlc31mdW5jdGlvbiB2KHQpe3JldHVybiB0LmxpbmtzfWZ1bmN0aW9uIG0odCxlKXt2YXIgcj10LmdldChlKTtpZighcil0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nOiBcIitlKTtyZXR1cm4gcn1mdW5jdGlvbiB5KHQpe3JldHVyblt0LnNvdXJjZS54MSx0LnkwXX1mdW5jdGlvbiB4KHQpe3JldHVyblt0LnRhcmdldC54MCx0LnkxXX10LnNhbmtleT1mdW5jdGlvbigpe3ZhciB0PTAsbj0wLGk9MSx5PTEseD0yNCxiPTgsXz1kLHc9YSxrPWcsQT12LFQ9MzIsTT0yLzM7ZnVuY3Rpb24gUygpe3ZhciBhPXtub2RlczprLmFwcGx5KG51bGwsYXJndW1lbnRzKSxsaW5rczpBLmFwcGx5KG51bGwsYXJndW1lbnRzKX07cmV0dXJuIGZ1bmN0aW9uKHQpe3Qubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0LGUpe3QuaW5kZXg9ZSx0LnNvdXJjZUxpbmtzPVtdLHQudGFyZ2V0TGlua3M9W119KTt2YXIgZT1yLm1hcCh0Lm5vZGVzLF8pO3QubGlua3MuZm9yRWFjaChmdW5jdGlvbih0LHIpe3QuaW5kZXg9cjt2YXIgbj10LnNvdXJjZSxpPXQudGFyZ2V0O1wib2JqZWN0XCIhPXR5cGVvZiBuJiYobj10LnNvdXJjZT1tKGUsbikpLFwib2JqZWN0XCIhPXR5cGVvZiBpJiYoaT10LnRhcmdldD1tKGUsaSkpLG4uc291cmNlTGlua3MucHVzaCh0KSxpLnRhcmdldExpbmtzLnB1c2godCl9KX0oYSksZnVuY3Rpb24odCl7dC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QudmFsdWU9TWF0aC5tYXgoZS5zdW0odC5zb3VyY2VMaW5rcyx1KSxlLnN1bSh0LnRhcmdldExpbmtzLHUpKX0pfShhKSxmdW5jdGlvbihlKXt2YXIgcixuLGE7Zm9yKHI9ZS5ub2RlcyxuPVtdLGE9MDtyLmxlbmd0aDsrK2Escj1uLG49W10pci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZGVwdGg9YSx0LnNvdXJjZUxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7bi5pbmRleE9mKHQudGFyZ2V0KTwwJiZuLnB1c2godC50YXJnZXQpfSl9KTtmb3Iocj1lLm5vZGVzLG49W10sYT0wO3IubGVuZ3RoOysrYSxyPW4sbj1bXSlyLmZvckVhY2goZnVuY3Rpb24odCl7dC5oZWlnaHQ9YSx0LnRhcmdldExpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7bi5pbmRleE9mKHQuc291cmNlKTwwJiZuLnB1c2godC5zb3VyY2UpfSl9KTt2YXIgbz0oaS10LXgpLyhhLTEpO2Uubm9kZXMuZm9yRWFjaChmdW5jdGlvbihlKXtlLngxPShlLngwPXQrTWF0aC5tYXgoMCxNYXRoLm1pbihhLTEsTWF0aC5mbG9vcih3LmNhbGwobnVsbCxlLGEpKSkpKm8pK3h9KX0oYSksZnVuY3Rpb24odCl7dmFyIGk9ci5uZXN0KCkua2V5KGZ1bmN0aW9uKHQpe3JldHVybiB0LngwfSkuc29ydEtleXMoZS5hc2NlbmRpbmcpLmVudHJpZXModC5ub2RlcykubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlc30pOyhmdW5jdGlvbigpe3ZhciByPWUubWF4KGksZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RofSksYT1NKih5LW4pLyhyLTEpO2I+YSYmKGI9YSk7dmFyIG89ZS5taW4oaSxmdW5jdGlvbih0KXtyZXR1cm4oeS1uLSh0Lmxlbmd0aC0xKSpiKS9lLnN1bSh0LHUpfSk7aS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaChmdW5jdGlvbih0LGUpe3QueTE9KHQueTA9ZSkrdC52YWx1ZSpvfSl9KSx0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC53aWR0aD10LnZhbHVlKm99KX0pKCksZCgpO2Zvcih2YXIgYT0xLG89VDtvPjA7LS1vKWwoYSo9Ljk5KSxkKCkscyhhKSxkKCk7ZnVuY3Rpb24gcyh0KXtpLmZvckVhY2goZnVuY3Rpb24ocil7ci5mb3JFYWNoKGZ1bmN0aW9uKHIpe2lmKHIudGFyZ2V0TGlua3MubGVuZ3RoKXt2YXIgbj0oZS5zdW0oci50YXJnZXRMaW5rcyxmKS9lLnN1bShyLnRhcmdldExpbmtzLHUpLWgocikpKnQ7ci55MCs9bixyLnkxKz1ufX0pfSl9ZnVuY3Rpb24gbCh0KXtpLnNsaWNlKCkucmV2ZXJzZSgpLmZvckVhY2goZnVuY3Rpb24ocil7ci5mb3JFYWNoKGZ1bmN0aW9uKHIpe2lmKHIuc291cmNlTGlua3MubGVuZ3RoKXt2YXIgbj0oZS5zdW0oci5zb3VyY2VMaW5rcyxwKS9lLnN1bShyLnNvdXJjZUxpbmtzLHUpLWgocikpKnQ7ci55MCs9bixyLnkxKz1ufX0pfSl9ZnVuY3Rpb24gZCgpe2kuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZSxyLGksYT1uLG89dC5sZW5ndGg7Zm9yKHQuc29ydChjKSxpPTA7aTxvOysraSllPXRbaV0sKHI9YS1lLnkwKT4wJiYoZS55MCs9cixlLnkxKz1yKSxhPWUueTErYjtpZigocj1hLWIteSk+MClmb3IoYT1lLnkwLT1yLGUueTEtPXIsaT1vLTI7aT49MDstLWkpZT10W2ldLChyPWUueTErYi1hKT4wJiYoZS55MC09cixlLnkxLT1yKSxhPWUueTB9KX19KGEpLEUoYSksYX1mdW5jdGlvbiBFKHQpe3Qubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnNvdXJjZUxpbmtzLnNvcnQobCksdC50YXJnZXRMaW5rcy5zb3J0KHMpfSksdC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQueTAscj1lO3Quc291cmNlTGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LnkwPWUrdC53aWR0aC8yLGUrPXQud2lkdGh9KSx0LnRhcmdldExpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC55MT1yK3Qud2lkdGgvMixyKz10LndpZHRofSl9KX1yZXR1cm4gUy51cGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIEUodCksdH0sUy5ub2RlSWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8odCksUyk6X30sUy5ub2RlQWxpZ249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8odCksUyk6d30sUy5ub2RlV2lkdGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHg9K3QsUyk6eH0sUy5ub2RlUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0rdCxTKTpifSxTLm5vZGVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhrPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpvKHQpLFMpOmt9LFMubGlua3M9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEE9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om8odCksUyk6QX0sUy5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW49MCxpPStlWzBdLHk9K2VbMV0sUyk6W2ktdCx5LW5dfSxTLmV4dGVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rZVswXVswXSxpPStlWzFdWzBdLG49K2VbMF1bMV0seT0rZVsxXVsxXSxTKTpbW3Qsbl0sW2kseV1dfSxTLml0ZXJhdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9K3QsUyk6VH0sU30sdC5zYW5rZXlDZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQudGFyZ2V0TGlua3MubGVuZ3RoP3QuZGVwdGg6dC5zb3VyY2VMaW5rcy5sZW5ndGg/ZS5taW4odC5zb3VyY2VMaW5rcyxpKS0xOjB9LHQuc2Fua2V5TGVmdD1mdW5jdGlvbih0KXtyZXR1cm4gdC5kZXB0aH0sdC5zYW5rZXlSaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiBlLTEtdC5oZWlnaHR9LHQuc2Fua2V5SnVzdGlmeT1hLHQuc2Fua2V5TGlua0hvcml6b250YWw9ZnVuY3Rpb24oKXtyZXR1cm4gbi5saW5rSG9yaXpvbnRhbCgpLnNvdXJjZSh5KS50YXJnZXQoeCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSxcIm9iamVjdFwiPT10eXBlb2YgciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGU/aShyLHQoXCJkMy1hcnJheVwiKSx0KFwiZDMtY29sbGVjdGlvblwiKSx0KFwiZDMtc2hhcGVcIikpOmkobi5kMz1uLmQzfHx7fSxuLmQzLG4uZDMsbi5kMyl9LHtcImQzLWFycmF5XCI6MTQzLFwiZDMtY29sbGVjdGlvblwiOjE0NCxcImQzLXNoYXBlXCI6MTUzfV0sNTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1cInVuZGVmaW5lZFwiPT10eXBlb2YgV2Vha01hcD90KFwid2Vhay1tYXBcIik6V2Vha01hcCxpPXQoXCJnbC1idWZmZXJcIiksYT10KFwiZ2wtdmFvXCIpLG89bmV3IG47ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW8uZ2V0KHQpLHI9ZSYmKGUuX3RyaWFuZ2xlQnVmZmVyLmhhbmRsZXx8ZS5fdHJpYW5nbGVCdWZmZXIuYnVmZmVyKTtpZighcnx8IXQuaXNCdWZmZXIocikpe3ZhciBuPWkodCxuZXcgRmxvYXQzMkFycmF5KFstMSwtMSwtMSw0LDQsLTFdKSk7KGU9YSh0LFt7YnVmZmVyOm4sdHlwZTp0LkZMT0FULHNpemU6Mn1dKSkuX3RyaWFuZ2xlQnVmZmVyPW4sby5zZXQodCxlKX1lLmJpbmQoKSx0LmRyYXdBcnJheXModC5UUklBTkdMRVMsMCwzKSxlLnVuYmluZCgpfX0se1wiZ2wtYnVmZmVyXCI6MjM4LFwiZ2wtdmFvXCI6MzIwLFwid2Vhay1tYXBcIjo1Mzd9XSw1MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0wLHI9MCxuPTAsaT0wO3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXt2YXIgYT0odD10LnNsaWNlKCkpWzBdLG89YS50b1VwcGVyQ2FzZSgpO2lmKGEhPW8pc3dpdGNoKHRbMF09byxhKXtjYXNlXCJhXCI6dFs2XSs9bix0WzddKz1pO2JyZWFrO2Nhc2VcInZcIjp0WzFdKz1pO2JyZWFrO2Nhc2VcImhcIjp0WzFdKz1uO2JyZWFrO2RlZmF1bHQ6Zm9yKHZhciBzPTE7czx0Lmxlbmd0aDspdFtzKytdKz1uLHRbcysrXSs9aX1zd2l0Y2gobyl7Y2FzZVwiWlwiOm49ZSxpPXI7YnJlYWs7Y2FzZVwiSFwiOm49dFsxXTticmVhaztjYXNlXCJWXCI6aT10WzFdO2JyZWFrO2Nhc2VcIk1cIjpuPWU9dFsxXSxpPXI9dFsyXTticmVhaztkZWZhdWx0Om49dFt0Lmxlbmd0aC0yXSxpPXRbdC5sZW5ndGgtMV19cmV0dXJuIHR9KX19LHt9XSw1MjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCJwYWQtbGVmdFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2U9XCJudW1iZXJcIj09dHlwZW9mIGU/ZToxLHI9cnx8XCI6IFwiO3ZhciBpPXQuc3BsaXQoL1xccj9cXG4vKSxhPVN0cmluZyhpLmxlbmd0aCtlLTEpLmxlbmd0aDtyZXR1cm4gaS5tYXAoZnVuY3Rpb24odCxpKXt2YXIgbz1pK2Uscz1TdHJpbmcobykubGVuZ3RoLGw9bihvLGEtcyk7cmV0dXJuIGwrcit0fSkuam9pbihcIlxcblwiKX19LHtcInBhZC1sZWZ0XCI6NDUwfV0sNTM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoMD09PWUpcmV0dXJuW107aWYoMT09PWUpcmV0dXJuWzBdO2Zvcih2YXIgcj10WzBdLmxlbmd0aCxuPVt0WzBdXSxhPVswXSxvPTE7bzxlOysrbylpZihuLnB1c2godFtvXSksaShuLHIpKXtpZihhLnB1c2gobyksYS5sZW5ndGg9PT1yKzEpcmV0dXJuIGF9ZWxzZSBuLnBvcCgpO3JldHVybiBhfTt2YXIgbj10KFwicm9idXN0LW9yaWVudGF0aW9uXCIpO2Z1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUrMSksaT0wO2k8dC5sZW5ndGg7KytpKXJbaV09dFtpXTtmb3IoaT0wO2k8PXQubGVuZ3RoOysraSl7Zm9yKHZhciBhPXQubGVuZ3RoO2E8PWU7KythKXtmb3IodmFyIG89bmV3IEFycmF5KGUpLHM9MDtzPGU7KytzKW9bc109TWF0aC5wb3coYSsxLWkscyk7clthXT1vfWlmKG4uYXBwbHkodm9pZCAwLHIpKXJldHVybiEwfXJldHVybiExfX0se1wicm9idXN0LW9yaWVudGF0aW9uXCI6NDk1fV0sNTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihlKS5maWx0ZXIoZnVuY3Rpb24ocil7Zm9yKHZhciBuPW5ldyBBcnJheShyLmxlbmd0aCksYT0wO2E8ci5sZW5ndGg7KythKW5bYV09ZVtyW2FdXTtyZXR1cm4gaShuKSp0PDF9KX07dmFyIG49dChcImRlbGF1bmF5LXRyaWFuZ3VsYXRlXCIpLGk9dChcImNpcmN1bXJhZGl1c1wiKX0se2NpcmN1bXJhZGl1czoxMDUsXCJkZWxhdW5heS10cmlhbmd1bGF0ZVwiOjE1N31dLDU1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkobih0LGUpKX07dmFyIG49dChcImFscGhhLWNvbXBsZXhcIiksaT10KFwic2ltcGxpY2lhbC1jb21wbGV4LWJvdW5kYXJ5XCIpfSx7XCJhbHBoYS1jb21wbGV4XCI6NTQsXCJzaW1wbGljaWFsLWNvbXBsZXgtYm91bmRhcnlcIjo1MDJ9XSw1NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCF0fHxudWxsPT10Lmxlbmd0aCl0aHJvdyBFcnJvcihcIkFyZ3VtZW50IHNob3VsZCBiZSBhbiBhcnJheVwiKTtlPW51bGw9PWU/MTpNYXRoLmZsb29yKGUpO2Zvcih2YXIgcj1BcnJheSgyKmUpLG49MDtuPGU7bisrKXtmb3IodmFyIGk9LTEvMCxhPTEvMCxvPW4scz10Lmxlbmd0aDtvPHM7bys9ZSl0W29dPmkmJihpPXRbb10pLHRbb108YSYmKGE9dFtvXSk7cltuXT1hLHJbZStuXT1pfXJldHVybiByfX0se31dLDU3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImFycmF5LWJvdW5kc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKCF0fHxudWxsPT10Lmxlbmd0aCl0aHJvdyBFcnJvcihcIkFyZ3VtZW50IHNob3VsZCBiZSBhbiBhcnJheVwiKTtudWxsPT1lJiYoZT0xKTtudWxsPT1yJiYocj1uKHQsZSkpO2Zvcih2YXIgaT0wO2k8ZTtpKyspe3ZhciBhPXJbZStpXSxvPXJbaV0scz1pLGw9dC5sZW5ndGg7aWYoYT09PTEvMCYmbz09PS0xLzApZm9yKHM9aTtzPGw7cys9ZSl0W3NdPXRbc109PT1hPzE6dFtzXT09PW8/MDouNTtlbHNlIGlmKGE9PT0xLzApZm9yKHM9aTtzPGw7cys9ZSl0W3NdPXRbc109PT1hPzE6MDtlbHNlIGlmKG89PT0tMS8wKWZvcihzPWk7czxsO3MrPWUpdFtzXT10W3NdPT09bz8wOjE7ZWxzZXt2YXIgYz1hLW87Zm9yKHM9aTtzPGw7cys9ZSl0W3NdPTA9PT1jPy41Oih0W3NdLW8pL2N9fXJldHVybiB0fX0se1wiYXJyYXktYm91bmRzXCI6NTZ9XSw1ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPVwibnVtYmVyXCI9PXR5cGVvZiB0LG49XCJudW1iZXJcIj09dHlwZW9mIGU7ciYmIW4/KGU9dCx0PTApOnJ8fG58fCh0PTAsZT0wKTt2YXIgaT0oZXw9MCktKHR8PTApO2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoXCJhcnJheSBsZW5ndGggbXVzdCBiZSBwb3NpdGl2ZVwiKTtmb3IodmFyIGE9bmV3IEFycmF5KGkpLG89MCxzPXQ7bzxpO28rKyxzKyspYVtvXT1zO3JldHVybiBhfX0se31dLDU5OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZih0PT09ZSlyZXR1cm4gMDtmb3IodmFyIHI9dC5sZW5ndGgsbj1lLmxlbmd0aCxpPTAsYT1NYXRoLm1pbihyLG4pO2k8YTsrK2kpaWYodFtpXSE9PWVbaV0pe3I9dFtpXSxuPWVbaV07YnJlYWt9cmV0dXJuIHI8bj8tMTpuPHI/MTowfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHIuQnVmZmVyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiByLkJ1ZmZlci5pc0J1ZmZlcj9yLkJ1ZmZlci5pc0J1ZmZlcih0KTohKG51bGw9PXR8fCF0Ll9pc0J1ZmZlcil9dmFyIGE9dChcInV0aWwvXCIpLG89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxzPUFycmF5LnByb3RvdHlwZS5zbGljZSxsPVwiZm9vXCI9PT1mdW5jdGlvbigpe30ubmFtZTtmdW5jdGlvbiBjKHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gdSh0KXtyZXR1cm4haSh0KSYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHIuQXJyYXlCdWZmZXImJihcImZ1bmN0aW9uXCI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KHQpOiEhdCYmKHQgaW5zdGFuY2VvZiBEYXRhVmlld3x8ISEodC5idWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSkpfXZhciBoPWUuZXhwb3J0cz1tLGY9L1xccypmdW5jdGlvblxccysoW15cXChcXHNdKilcXHMqLztmdW5jdGlvbiBwKHQpe2lmKGEuaXNGdW5jdGlvbih0KSl7aWYobClyZXR1cm4gdC5uYW1lO3ZhciBlPXQudG9TdHJpbmcoKS5tYXRjaChmKTtyZXR1cm4gZSYmZVsxXX19ZnVuY3Rpb24gZCh0LGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0P3QubGVuZ3RoPGU/dDp0LnNsaWNlKDAsZSk6dH1mdW5jdGlvbiBnKHQpe2lmKGx8fCFhLmlzRnVuY3Rpb24odCkpcmV0dXJuIGEuaW5zcGVjdCh0KTt2YXIgZT1wKHQpO3JldHVyblwiW0Z1bmN0aW9uXCIrKGU/XCI6IFwiK2U6XCJcIikrXCJdXCJ9ZnVuY3Rpb24gdih0LGUscixuLGkpe3Rocm93IG5ldyBoLkFzc2VydGlvbkVycm9yKHttZXNzYWdlOnIsYWN0dWFsOnQsZXhwZWN0ZWQ6ZSxvcGVyYXRvcjpuLHN0YWNrU3RhcnRGdW5jdGlvbjppfSl9ZnVuY3Rpb24gbSh0LGUpe3R8fHYodCwhMCxlLFwiPT1cIixoLm9rKX1mdW5jdGlvbiB5KHQsZSxyLG8pe2lmKHQ9PT1lKXJldHVybiEwO2lmKGkodCkmJmkoZSkpcmV0dXJuIDA9PT1uKHQsZSk7aWYoYS5pc0RhdGUodCkmJmEuaXNEYXRlKGUpKXJldHVybiB0LmdldFRpbWUoKT09PWUuZ2V0VGltZSgpO2lmKGEuaXNSZWdFeHAodCkmJmEuaXNSZWdFeHAoZSkpcmV0dXJuIHQuc291cmNlPT09ZS5zb3VyY2UmJnQuZ2xvYmFsPT09ZS5nbG9iYWwmJnQubXVsdGlsaW5lPT09ZS5tdWx0aWxpbmUmJnQubGFzdEluZGV4PT09ZS5sYXN0SW5kZXgmJnQuaWdub3JlQ2FzZT09PWUuaWdub3JlQ2FzZTtpZihudWxsIT09dCYmXCJvYmplY3RcIj09dHlwZW9mIHR8fG51bGwhPT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZSl7aWYodSh0KSYmdShlKSYmYyh0KT09PWMoZSkmJiEodCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheXx8dCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSkpcmV0dXJuIDA9PT1uKG5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSxuZXcgVWludDhBcnJheShlLmJ1ZmZlcikpO2lmKGkodCkhPT1pKGUpKXJldHVybiExO3ZhciBsPShvPW98fHthY3R1YWw6W10sZXhwZWN0ZWQ6W119KS5hY3R1YWwuaW5kZXhPZih0KTtyZXR1cm4tMSE9PWwmJmw9PT1vLmV4cGVjdGVkLmluZGV4T2YoZSl8fChvLmFjdHVhbC5wdXNoKHQpLG8uZXhwZWN0ZWQucHVzaChlKSxmdW5jdGlvbih0LGUscixuKXtpZihudWxsPT10fHxudWxsPT1lKXJldHVybiExO2lmKGEuaXNQcmltaXRpdmUodCl8fGEuaXNQcmltaXRpdmUoZSkpcmV0dXJuIHQ9PT1lO2lmKHImJk9iamVjdC5nZXRQcm90b3R5cGVPZih0KSE9PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKSlyZXR1cm4hMTt2YXIgaT14KHQpLG89eChlKTtpZihpJiYhb3x8IWkmJm8pcmV0dXJuITE7aWYoaSlyZXR1cm4gdD1zLmNhbGwodCksZT1zLmNhbGwoZSkseSh0LGUscik7dmFyIGwsYyx1PXcodCksaD13KGUpO2lmKHUubGVuZ3RoIT09aC5sZW5ndGgpcmV0dXJuITE7Zm9yKHUuc29ydCgpLGguc29ydCgpLGM9dS5sZW5ndGgtMTtjPj0wO2MtLSlpZih1W2NdIT09aFtjXSlyZXR1cm4hMTtmb3IoYz11Lmxlbmd0aC0xO2M+PTA7Yy0tKWlmKGw9dVtjXSwheSh0W2xdLGVbbF0scixuKSlyZXR1cm4hMTtyZXR1cm4hMH0odCxlLHIsbykpfXJldHVybiByP3Q9PT1lOnQ9PWV9ZnVuY3Rpb24geCh0KXtyZXR1cm5cIltvYmplY3QgQXJndW1lbnRzXVwiPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gYih0LGUpe2lmKCF0fHwhZSlyZXR1cm4hMTtpZihcIltvYmplY3QgUmVnRXhwXVwiPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIGUudGVzdCh0KTt0cnl7aWYodCBpbnN0YW5jZW9mIGUpcmV0dXJuITB9Y2F0Y2godCl7fXJldHVybiFFcnJvci5pc1Byb3RvdHlwZU9mKGUpJiYhMD09PWUuY2FsbCh7fSx0KX1mdW5jdGlvbiBfKHQsZSxyLG4pe3ZhciBpO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJibG9ja1wiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO1wic3RyaW5nXCI9PXR5cGVvZiByJiYobj1yLHI9bnVsbCksaT1mdW5jdGlvbih0KXt2YXIgZTt0cnl7dCgpfWNhdGNoKHQpe2U9dH1yZXR1cm4gZX0oZSksbj0ociYmci5uYW1lP1wiIChcIityLm5hbWUrXCIpLlwiOlwiLlwiKSsobj9cIiBcIituOlwiLlwiKSx0JiYhaSYmdihpLHIsXCJNaXNzaW5nIGV4cGVjdGVkIGV4Y2VwdGlvblwiK24pO3ZhciBvPVwic3RyaW5nXCI9PXR5cGVvZiBuLHM9IXQmJmkmJiFyO2lmKCghdCYmYS5pc0Vycm9yKGkpJiZvJiZiKGkscil8fHMpJiZ2KGkscixcIkdvdCB1bndhbnRlZCBleGNlcHRpb25cIituKSx0JiZpJiZyJiYhYihpLHIpfHwhdCYmaSl0aHJvdyBpfWguQXNzZXJ0aW9uRXJyb3I9ZnVuY3Rpb24odCl7dmFyIGU7dGhpcy5uYW1lPVwiQXNzZXJ0aW9uRXJyb3JcIix0aGlzLmFjdHVhbD10LmFjdHVhbCx0aGlzLmV4cGVjdGVkPXQuZXhwZWN0ZWQsdGhpcy5vcGVyYXRvcj10Lm9wZXJhdG9yLHQubWVzc2FnZT8odGhpcy5tZXNzYWdlPXQubWVzc2FnZSx0aGlzLmdlbmVyYXRlZE1lc3NhZ2U9ITEpOih0aGlzLm1lc3NhZ2U9ZChnKChlPXRoaXMpLmFjdHVhbCksMTI4KStcIiBcIitlLm9wZXJhdG9yK1wiIFwiK2QoZyhlLmV4cGVjdGVkKSwxMjgpLHRoaXMuZ2VuZXJhdGVkTWVzc2FnZT0hMCk7dmFyIHI9dC5zdGFja1N0YXJ0RnVuY3Rpb258fHY7aWYoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxyKTtlbHNle3ZhciBuPW5ldyBFcnJvcjtpZihuLnN0YWNrKXt2YXIgaT1uLnN0YWNrLGE9cChyKSxvPWkuaW5kZXhPZihcIlxcblwiK2EpO2lmKG8+PTApe3ZhciBzPWkuaW5kZXhPZihcIlxcblwiLG8rMSk7aT1pLnN1YnN0cmluZyhzKzEpfXRoaXMuc3RhY2s9aX19fSxhLmluaGVyaXRzKGguQXNzZXJ0aW9uRXJyb3IsRXJyb3IpLGguZmFpbD12LGgub2s9bSxoLmVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0IT1lJiZ2KHQsZSxyLFwiPT1cIixoLmVxdWFsKX0saC5ub3RFcXVhbD1mdW5jdGlvbih0LGUscil7dD09ZSYmdih0LGUscixcIiE9XCIsaC5ub3RFcXVhbCl9LGguZGVlcEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt5KHQsZSwhMSl8fHYodCxlLHIsXCJkZWVwRXF1YWxcIixoLmRlZXBFcXVhbCl9LGguZGVlcFN0cmljdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt5KHQsZSwhMCl8fHYodCxlLHIsXCJkZWVwU3RyaWN0RXF1YWxcIixoLmRlZXBTdHJpY3RFcXVhbCl9LGgubm90RGVlcEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt5KHQsZSwhMSkmJnYodCxlLHIsXCJub3REZWVwRXF1YWxcIixoLm5vdERlZXBFcXVhbCl9LGgubm90RGVlcFN0cmljdEVxdWFsPWZ1bmN0aW9uIHQoZSxyLG4pe3koZSxyLCEwKSYmdihlLHIsbixcIm5vdERlZXBTdHJpY3RFcXVhbFwiLHQpfSxoLnN0cmljdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0IT09ZSYmdih0LGUscixcIj09PVwiLGguc3RyaWN0RXF1YWwpfSxoLm5vdFN0cmljdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0PT09ZSYmdih0LGUscixcIiE9PVwiLGgubm90U3RyaWN0RXF1YWwpfSxoLnRocm93cz1mdW5jdGlvbih0LGUscil7XyghMCx0LGUscil9LGguZG9lc05vdFRocm93PWZ1bmN0aW9uKHQsZSxyKXtfKCExLHQsZSxyKX0saC5pZkVycm9yPWZ1bmN0aW9uKHQpe2lmKHQpdGhyb3cgdH07dmFyIHc9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KW8uY2FsbCh0LHIpJiZlLnB1c2gocik7cmV0dXJuIGV9fSkuY2FsbCh0aGlzLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7XCJ1dGlsL1wiOjYyfV0sNjA6W2Z1bmN0aW9uKHQsZSxyKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Quc3VwZXJfPWUsdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSl9OmUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Quc3VwZXJfPWU7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9fSx7fV0sNjE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwib2JqZWN0XCI9PXR5cGVvZiB0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmNvcHkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQuZmlsbCYmXCJmdW5jdGlvblwiPT10eXBlb2YgdC5yZWFkVUludDh9fSx7fV0sNjI6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSxuKXt2YXIgaT0vJVtzZGolXS9nO3IuZm9ybWF0PWZ1bmN0aW9uKHQpe2lmKCFtKHQpKXtmb3IodmFyIGU9W10scj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspZS5wdXNoKHMoYXJndW1lbnRzW3JdKSk7cmV0dXJuIGUuam9pbihcIiBcIil9cj0xO2Zvcih2YXIgbj1hcmd1bWVudHMsYT1uLmxlbmd0aCxvPVN0cmluZyh0KS5yZXBsYWNlKGksZnVuY3Rpb24odCl7aWYoXCIlJVwiPT09dClyZXR1cm5cIiVcIjtpZihyPj1hKXJldHVybiB0O3N3aXRjaCh0KXtjYXNlXCIlc1wiOnJldHVybiBTdHJpbmcobltyKytdKTtjYXNlXCIlZFwiOnJldHVybiBOdW1iZXIobltyKytdKTtjYXNlXCIlalwiOnRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkobltyKytdKX1jYXRjaCh0KXtyZXR1cm5cIltDaXJjdWxhcl1cIn1kZWZhdWx0OnJldHVybiB0fX0pLGw9bltyXTtyPGE7bD1uWysrcl0pZyhsKXx8IWIobCk/bys9XCIgXCIrbDpvKz1cIiBcIitzKGwpO3JldHVybiBvfSxyLmRlcHJlY2F0ZT1mdW5jdGlvbih0LGkpe2lmKHkobi5wcm9jZXNzKSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gci5kZXByZWNhdGUodCxpKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2lmKCEwPT09ZS5ub0RlcHJlY2F0aW9uKXJldHVybiB0O3ZhciBhPSExO3JldHVybiBmdW5jdGlvbigpe2lmKCFhKXtpZihlLnRocm93RGVwcmVjYXRpb24pdGhyb3cgbmV3IEVycm9yKGkpO2UudHJhY2VEZXByZWNhdGlvbj9jb25zb2xlLnRyYWNlKGkpOmNvbnNvbGUuZXJyb3IoaSksYT0hMH1yZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTt2YXIgYSxvPXt9O2Z1bmN0aW9uIHModCxlKXt2YXIgbj17c2VlbjpbXSxzdHlsaXplOmN9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0zJiYobi5kZXB0aD1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg+PTQmJihuLmNvbG9ycz1hcmd1bWVudHNbM10pLGQoZSk/bi5zaG93SGlkZGVuPWU6ZSYmci5fZXh0ZW5kKG4sZSkseShuLnNob3dIaWRkZW4pJiYobi5zaG93SGlkZGVuPSExKSx5KG4uZGVwdGgpJiYobi5kZXB0aD0yKSx5KG4uY29sb3JzKSYmKG4uY29sb3JzPSExKSx5KG4uY3VzdG9tSW5zcGVjdCkmJihuLmN1c3RvbUluc3BlY3Q9ITApLG4uY29sb3JzJiYobi5zdHlsaXplPWwpLHUobix0LG4uZGVwdGgpfWZ1bmN0aW9uIGwodCxlKXt2YXIgcj1zLnN0eWxlc1tlXTtyZXR1cm4gcj9cIlxceDFiW1wiK3MuY29sb3JzW3JdWzBdK1wibVwiK3QrXCJcXHgxYltcIitzLmNvbG9yc1tyXVsxXStcIm1cIjp0fWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gdH1mdW5jdGlvbiB1KHQsZSxuKXtpZih0LmN1c3RvbUluc3BlY3QmJmUmJmsoZS5pbnNwZWN0KSYmZS5pbnNwZWN0IT09ci5pbnNwZWN0JiYoIWUuY29uc3RydWN0b3J8fGUuY29uc3RydWN0b3IucHJvdG90eXBlIT09ZSkpe3ZhciBpPWUuaW5zcGVjdChuLHQpO3JldHVybiBtKGkpfHwoaT11KHQsaSxuKSksaX12YXIgYT1mdW5jdGlvbih0LGUpe2lmKHkoZSkpcmV0dXJuIHQuc3R5bGl6ZShcInVuZGVmaW5lZFwiLFwidW5kZWZpbmVkXCIpO2lmKG0oZSkpe3ZhciByPVwiJ1wiK0pTT04uc3RyaW5naWZ5KGUpLnJlcGxhY2UoL15cInxcIiQvZyxcIlwiKS5yZXBsYWNlKC8nL2csXCJcXFxcJ1wiKS5yZXBsYWNlKC9cXFxcXCIvZywnXCInKStcIidcIjtyZXR1cm4gdC5zdHlsaXplKHIsXCJzdHJpbmdcIil9aWYodihlKSlyZXR1cm4gdC5zdHlsaXplKFwiXCIrZSxcIm51bWJlclwiKTtpZihkKGUpKXJldHVybiB0LnN0eWxpemUoXCJcIitlLFwiYm9vbGVhblwiKTtpZihnKGUpKXJldHVybiB0LnN0eWxpemUoXCJudWxsXCIsXCJudWxsXCIpfSh0LGUpO2lmKGEpcmV0dXJuIGE7dmFyIG89T2JqZWN0LmtleXMoZSkscz1mdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQscil7ZVt0XT0hMH0pLGV9KG8pO2lmKHQuc2hvd0hpZGRlbiYmKG89T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkpLHcoZSkmJihvLmluZGV4T2YoXCJtZXNzYWdlXCIpPj0wfHxvLmluZGV4T2YoXCJkZXNjcmlwdGlvblwiKT49MCkpcmV0dXJuIGgoZSk7aWYoMD09PW8ubGVuZ3RoKXtpZihrKGUpKXt2YXIgbD1lLm5hbWU/XCI6IFwiK2UubmFtZTpcIlwiO3JldHVybiB0LnN0eWxpemUoXCJbRnVuY3Rpb25cIitsK1wiXVwiLFwic3BlY2lhbFwiKX1pZih4KGUpKXJldHVybiB0LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLFwicmVnZXhwXCIpO2lmKF8oZSkpcmV0dXJuIHQuc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLFwiZGF0ZVwiKTtpZih3KGUpKXJldHVybiBoKGUpfXZhciBjLGI9XCJcIixBPSExLFQ9W1wie1wiLFwifVwiXTsocChlKSYmKEE9ITAsVD1bXCJbXCIsXCJdXCJdKSxrKGUpKSYmKGI9XCIgW0Z1bmN0aW9uXCIrKGUubmFtZT9cIjogXCIrZS5uYW1lOlwiXCIpK1wiXVwiKTtyZXR1cm4geChlKSYmKGI9XCIgXCIrUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKSxfKGUpJiYoYj1cIiBcIitEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKGUpKSx3KGUpJiYoYj1cIiBcIitoKGUpKSwwIT09by5sZW5ndGh8fEEmJjAhPWUubGVuZ3RoP248MD94KGUpP3Quc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSksXCJyZWdleHBcIik6dC5zdHlsaXplKFwiW09iamVjdF1cIixcInNwZWNpYWxcIik6KHQuc2Vlbi5wdXNoKGUpLGM9QT9mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYT1bXSxvPTAscz1lLmxlbmd0aDtvPHM7KytvKVMoZSxTdHJpbmcobykpP2EucHVzaChmKHQsZSxyLG4sU3RyaW5nKG8pLCEwKSk6YS5wdXNoKFwiXCIpO3JldHVybiBpLmZvckVhY2goZnVuY3Rpb24oaSl7aS5tYXRjaCgvXlxcZCskLyl8fGEucHVzaChmKHQsZSxyLG4saSwhMCkpfSksYX0odCxlLG4scyxvKTpvLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gZih0LGUsbixzLHIsQSl9KSx0LnNlZW4ucG9wKCksZnVuY3Rpb24odCxlLHIpe2lmKHQucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIDAsZS5pbmRleE9mKFwiXFxuXCIpPj0wJiYwLHQrZS5yZXBsYWNlKC9cXHUwMDFiXFxbXFxkXFxkP20vZyxcIlwiKS5sZW5ndGgrMX0sMCk+NjApcmV0dXJuIHJbMF0rKFwiXCI9PT1lP1wiXCI6ZStcIlxcbiBcIikrXCIgXCIrdC5qb2luKFwiLFxcbiAgXCIpK1wiIFwiK3JbMV07cmV0dXJuIHJbMF0rZStcIiBcIit0LmpvaW4oXCIsIFwiKStcIiBcIityWzFdfShjLGIsVCkpOlRbMF0rYitUWzFdfWZ1bmN0aW9uIGgodCl7cmV0dXJuXCJbXCIrRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkrXCJdXCJ9ZnVuY3Rpb24gZih0LGUscixuLGksYSl7dmFyIG8scyxsO2lmKChsPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxpKXx8e3ZhbHVlOmVbaV19KS5nZXQ/cz1sLnNldD90LnN0eWxpemUoXCJbR2V0dGVyL1NldHRlcl1cIixcInNwZWNpYWxcIik6dC5zdHlsaXplKFwiW0dldHRlcl1cIixcInNwZWNpYWxcIik6bC5zZXQmJihzPXQuc3R5bGl6ZShcIltTZXR0ZXJdXCIsXCJzcGVjaWFsXCIpKSxTKG4saSl8fChvPVwiW1wiK2krXCJdXCIpLHN8fCh0LnNlZW4uaW5kZXhPZihsLnZhbHVlKTwwPyhzPWcocik/dSh0LGwudmFsdWUsbnVsbCk6dSh0LGwudmFsdWUsci0xKSkuaW5kZXhPZihcIlxcblwiKT4tMSYmKHM9YT9zLnNwbGl0KFwiXFxuXCIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cIiAgXCIrdH0pLmpvaW4oXCJcXG5cIikuc3Vic3RyKDIpOlwiXFxuXCIrcy5zcGxpdChcIlxcblwiKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCIgICBcIit0fSkuam9pbihcIlxcblwiKSk6cz10LnN0eWxpemUoXCJbQ2lyY3VsYXJdXCIsXCJzcGVjaWFsXCIpKSx5KG8pKXtpZihhJiZpLm1hdGNoKC9eXFxkKyQvKSlyZXR1cm4gczsobz1KU09OLnN0cmluZ2lmeShcIlwiK2kpKS5tYXRjaCgvXlwiKFthLXpBLVpfXVthLXpBLVpfMC05XSopXCIkLyk/KG89by5zdWJzdHIoMSxvLmxlbmd0aC0yKSxvPXQuc3R5bGl6ZShvLFwibmFtZVwiKSk6KG89by5yZXBsYWNlKC8nL2csXCJcXFxcJ1wiKS5yZXBsYWNlKC9cXFxcXCIvZywnXCInKS5yZXBsYWNlKC8oXlwifFwiJCkvZyxcIidcIiksbz10LnN0eWxpemUobyxcInN0cmluZ1wiKSl9cmV0dXJuIG8rXCI6IFwiK3N9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KX1mdW5jdGlvbiBkKHQpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgdH1mdW5jdGlvbiBnKHQpe3JldHVybiBudWxsPT09dH1mdW5jdGlvbiB2KHQpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIG0odCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHR9ZnVuY3Rpb24geSh0KXtyZXR1cm4gdm9pZCAwPT09dH1mdW5jdGlvbiB4KHQpe3JldHVybiBiKHQpJiZcIltvYmplY3QgUmVnRXhwXVwiPT09QSh0KX1mdW5jdGlvbiBiKHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0JiZudWxsIT09dH1mdW5jdGlvbiBfKHQpe3JldHVybiBiKHQpJiZcIltvYmplY3QgRGF0ZV1cIj09PUEodCl9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gYih0KSYmKFwiW29iamVjdCBFcnJvcl1cIj09PUEodCl8fHQgaW5zdGFuY2VvZiBFcnJvcil9ZnVuY3Rpb24gayh0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIEEodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBUKHQpe3JldHVybiB0PDEwP1wiMFwiK3QudG9TdHJpbmcoMTApOnQudG9TdHJpbmcoMTApfXIuZGVidWdsb2c9ZnVuY3Rpb24odCl7aWYoeShhKSYmKGE9ZS5lbnYuTk9ERV9ERUJVR3x8XCJcIiksdD10LnRvVXBwZXJDYXNlKCksIW9bdF0paWYobmV3IFJlZ0V4cChcIlxcXFxiXCIrdCtcIlxcXFxiXCIsXCJpXCIpLnRlc3QoYSkpe3ZhciBuPWUucGlkO29bdF09ZnVuY3Rpb24oKXt2YXIgZT1yLmZvcm1hdC5hcHBseShyLGFyZ3VtZW50cyk7Y29uc29sZS5lcnJvcihcIiVzICVkOiAlc1wiLHQsbixlKX19ZWxzZSBvW3RdPWZ1bmN0aW9uKCl7fTtyZXR1cm4gb1t0XX0sci5pbnNwZWN0PXMscy5jb2xvcnM9e2JvbGQ6WzEsMjJdLGl0YWxpYzpbMywyM10sdW5kZXJsaW5lOls0LDI0XSxpbnZlcnNlOls3LDI3XSx3aGl0ZTpbMzcsMzldLGdyZXk6WzkwLDM5XSxibGFjazpbMzAsMzldLGJsdWU6WzM0LDM5XSxjeWFuOlszNiwzOV0sZ3JlZW46WzMyLDM5XSxtYWdlbnRhOlszNSwzOV0scmVkOlszMSwzOV0seWVsbG93OlszMywzOV19LHMuc3R5bGVzPXtzcGVjaWFsOlwiY3lhblwiLG51bWJlcjpcInllbGxvd1wiLGJvb2xlYW46XCJ5ZWxsb3dcIix1bmRlZmluZWQ6XCJncmV5XCIsbnVsbDpcImJvbGRcIixzdHJpbmc6XCJncmVlblwiLGRhdGU6XCJtYWdlbnRhXCIscmVnZXhwOlwicmVkXCJ9LHIuaXNBcnJheT1wLHIuaXNCb29sZWFuPWQsci5pc051bGw9ZyxyLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10fSxyLmlzTnVtYmVyPXYsci5pc1N0cmluZz1tLHIuaXNTeW1ib2w9ZnVuY3Rpb24odCl7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIHR9LHIuaXNVbmRlZmluZWQ9eSxyLmlzUmVnRXhwPXgsci5pc09iamVjdD1iLHIuaXNEYXRlPV8sci5pc0Vycm9yPXcsci5pc0Z1bmN0aW9uPWssci5pc1ByaW1pdGl2ZT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09PXR8fFwiYm9vbGVhblwiPT10eXBlb2YgdHx8XCJudW1iZXJcIj09dHlwZW9mIHR8fFwic3RyaW5nXCI9PXR5cGVvZiB0fHxcInN5bWJvbFwiPT10eXBlb2YgdHx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIHR9LHIuaXNCdWZmZXI9dChcIi4vc3VwcG9ydC9pc0J1ZmZlclwiKTt2YXIgTT1bXCJKYW5cIixcIkZlYlwiLFwiTWFyXCIsXCJBcHJcIixcIk1heVwiLFwiSnVuXCIsXCJKdWxcIixcIkF1Z1wiLFwiU2VwXCIsXCJPY3RcIixcIk5vdlwiLFwiRGVjXCJdO2Z1bmN0aW9uIFModCxlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSl9ci5sb2c9ZnVuY3Rpb24oKXt2YXIgdCxlO2NvbnNvbGUubG9nKFwiJXMgLSAlc1wiLCh0PW5ldyBEYXRlLGU9W1QodC5nZXRIb3VycygpKSxUKHQuZ2V0TWludXRlcygpKSxUKHQuZ2V0U2Vjb25kcygpKV0uam9pbihcIjpcIiksW3QuZ2V0RGF0ZSgpLE1bdC5nZXRNb250aCgpXSxlXS5qb2luKFwiIFwiKSksci5mb3JtYXQuYXBwbHkocixhcmd1bWVudHMpKX0sci5pbmhlcml0cz10KFwiaW5oZXJpdHNcIiksci5fZXh0ZW5kPWZ1bmN0aW9uKHQsZSl7aWYoIWV8fCFiKGUpKXJldHVybiB0O2Zvcih2YXIgcj1PYmplY3Qua2V5cyhlKSxuPXIubGVuZ3RoO24tLTspdFtyW25dXT1lW3Jbbl1dO3JldHVybiB0fX0pLmNhbGwodGhpcyx0KFwiX3Byb2Nlc3NcIiksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHtcIi4vc3VwcG9ydC9pc0J1ZmZlclwiOjYxLF9wcm9jZXNzOjQ3NSxpbmhlcml0czo2MH1dLDYzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhdG9iKHQpfX0se31dLDY0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUubGVuZ3RoLGE9bmV3IEFycmF5KHIrMSksbz0wO288cjsrK28pe2Zvcih2YXIgcz1uZXcgQXJyYXkocisxKSxsPTA7bDw9cjsrK2wpc1tsXT10W2xdW29dO2Fbb109c31hW3JdPW5ldyBBcnJheShyKzEpO2Zvcih2YXIgbz0wO288PXI7KytvKWFbcl1bb109MTtmb3IodmFyIGM9bmV3IEFycmF5KHIrMSksbz0wO288cjsrK28pY1tvXT1lW29dO2Nbcl09MTt2YXIgdT1uKGEsYyksaD1pKHVbcisxXSk7MD09PWgmJihoPTEpO2Zvcih2YXIgZj1uZXcgQXJyYXkocisxKSxvPTA7bzw9cjsrK28pZltvXT1pKHVbb10pL2g7cmV0dXJuIGZ9O3ZhciBuPXQoXCJyb2J1c3QtbGluZWFyLXNvbHZlXCIpO2Z1bmN0aW9uIGkodCl7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7KytyKWUrPXRbcl07cmV0dXJuIGV9fSx7XCJyb2J1c3QtbGluZWFyLXNvbHZlXCI6NDk0fV0sNjU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLmJ5dGVMZW5ndGg9ZnVuY3Rpb24odCl7dmFyIGU9Yyh0KSxyPWVbMF0sbj1lWzFdO3JldHVybiAzKihyK24pLzQtbn0sci50b0J5dGVBcnJheT1mdW5jdGlvbih0KXtmb3IodmFyIGUscj1jKHQpLG49clswXSxvPXJbMV0scz1uZXcgYShmdW5jdGlvbih0LGUscil7cmV0dXJuIDMqKGUrcikvNC1yfSgwLG4sbykpLGw9MCx1PW8+MD9uLTQ6bixoPTA7aDx1O2grPTQpZT1pW3QuY2hhckNvZGVBdChoKV08PDE4fGlbdC5jaGFyQ29kZUF0KGgrMSldPDwxMnxpW3QuY2hhckNvZGVBdChoKzIpXTw8NnxpW3QuY2hhckNvZGVBdChoKzMpXSxzW2wrK109ZT4+MTYmMjU1LHNbbCsrXT1lPj44JjI1NSxzW2wrK109MjU1JmU7Mj09PW8mJihlPWlbdC5jaGFyQ29kZUF0KGgpXTw8MnxpW3QuY2hhckNvZGVBdChoKzEpXT4+NCxzW2wrK109MjU1JmUpOzE9PT1vJiYoZT1pW3QuY2hhckNvZGVBdChoKV08PDEwfGlbdC5jaGFyQ29kZUF0KGgrMSldPDw0fGlbdC5jaGFyQ29kZUF0KGgrMildPj4yLHNbbCsrXT1lPj44JjI1NSxzW2wrK109MjU1JmUpO3JldHVybiBzfSxyLmZyb21CeXRlQXJyYXk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9dC5sZW5ndGgsaT1yJTMsYT1bXSxvPTAscz1yLWk7bzxzO28rPTE2MzgzKWEucHVzaCh1KHQsbyxvKzE2MzgzPnM/czpvKzE2MzgzKSk7MT09PWk/KGU9dFtyLTFdLGEucHVzaChuW2U+PjJdK25bZTw8NCY2M10rXCI9PVwiKSk6Mj09PWkmJihlPSh0W3ItMl08PDgpK3Rbci0xXSxhLnB1c2gobltlPj4xMF0rbltlPj40JjYzXStuW2U8PDImNjNdK1wiPVwiKSk7cmV0dXJuIGEuam9pbihcIlwiKX07Zm9yKHZhciBuPVtdLGk9W10sYT1cInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LG89XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCIscz0wLGw9by5sZW5ndGg7czxsOysrcyluW3NdPW9bc10saVtvLmNoYXJDb2RlQXQocyldPXM7ZnVuY3Rpb24gYyh0KXt2YXIgZT10Lmxlbmd0aDtpZihlJTQ+MCl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0XCIpO3ZhciByPXQuaW5kZXhPZihcIj1cIik7cmV0dXJuLTE9PT1yJiYocj1lKSxbcixyPT09ZT8wOjQtciU0XX1mdW5jdGlvbiB1KHQsZSxyKXtmb3IodmFyIGksYSxvPVtdLHM9ZTtzPHI7cys9MylpPSh0W3NdPDwxNiYxNjcxMTY4MCkrKHRbcysxXTw8OCY2NTI4MCkrKDI1NSZ0W3MrMl0pLG8ucHVzaChuWyhhPWkpPj4xOCY2M10rblthPj4xMiY2M10rblthPj42JjYzXStuWzYzJmFdKTtyZXR1cm4gby5qb2luKFwiXCIpfWlbXCItXCIuY2hhckNvZGVBdCgwKV09NjIsaVtcIl9cIi5jaGFyQ29kZUF0KDApXT02M30se31dLDY2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vbGliL3JhdGlvbmFsaXplXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKHRbMF0ubXVsKGVbMV0pLmFkZChlWzBdLm11bCh0WzFdKSksdFsxXS5tdWwoZVsxXSkpfX0se1wiLi9saWIvcmF0aW9uYWxpemVcIjo3Nn1dLDY3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0ubXVsKGVbMV0pLmNtcChlWzBdLm11bCh0WzFdKSl9fSx7fV0sNjg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9saWIvcmF0aW9uYWxpemVcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odFswXS5tdWwoZVsxXSksdFsxXS5tdWwoZVswXSkpfX0se1wiLi9saWIvcmF0aW9uYWxpemVcIjo3Nn1dLDY5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vaXMtcmF0XCIpLGk9dChcIi4vbGliL2lzLWJuXCIpLGE9dChcIi4vbGliL251bS10by1iblwiKSxvPXQoXCIuL2xpYi9zdHItdG8tYm5cIikscz10KFwiLi9saWIvcmF0aW9uYWxpemVcIiksbD10KFwiLi9kaXZcIik7ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSxyKXtpZihuKGUpKXJldHVybiByP2woZSx0KHIpKTpbZVswXS5jbG9uZSgpLGVbMV0uY2xvbmUoKV07dmFyIGM9MDt2YXIgdSxoO2lmKGkoZSkpdT1lLmNsb25lKCk7ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgZSl1PW8oZSk7ZWxzZXtpZigwPT09ZSlyZXR1cm5bYSgwKSxhKDEpXTtpZihlPT09TWF0aC5mbG9vcihlKSl1PWEoZSk7ZWxzZXtmb3IoO2UhPT1NYXRoLmZsb29yKGUpOyllKj1NYXRoLnBvdygyLDI1NiksYy09MjU2O3U9YShlKX19aWYobihyKSl1Lm11bChyWzFdKSxoPXJbMF0uY2xvbmUoKTtlbHNlIGlmKGkocikpaD1yLmNsb25lKCk7ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgciloPW8ocik7ZWxzZSBpZihyKWlmKHI9PT1NYXRoLmZsb29yKHIpKWg9YShyKTtlbHNle2Zvcig7ciE9PU1hdGguZmxvb3Iocik7KXIqPU1hdGgucG93KDIsMjU2KSxjKz0yNTY7aD1hKHIpfWVsc2UgaD1hKDEpO2M+MD91PXUudXNobG4oYyk6YzwwJiYoaD1oLnVzaGxuKC1jKSk7cmV0dXJuIHModSxoKX19LHtcIi4vZGl2XCI6NjgsXCIuL2lzLXJhdFwiOjcwLFwiLi9saWIvaXMtYm5cIjo3NCxcIi4vbGliL251bS10by1iblwiOjc1LFwiLi9saWIvcmF0aW9uYWxpemVcIjo3NixcIi4vbGliL3N0ci10by1iblwiOjc3fV0sNzA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9saWIvaXMtYm5cIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiYyPT09dC5sZW5ndGgmJm4odFswXSkmJm4odFsxXSl9fSx7XCIuL2xpYi9pcy1iblwiOjc0fV0sNzE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiYm4uanNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNtcChuZXcgbigwKSl9fSx7XCJibi5qc1wiOjg1fV0sNzI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9ibi1zaWduXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxyPXQud29yZHMsaT0wO2lmKDE9PT1lKWk9clswXTtlbHNlIGlmKDI9PT1lKWk9clswXSs2NzEwODg2NCpyWzFdO2Vsc2UgZm9yKHZhciBhPTA7YTxlO2ErKyl7dmFyIG89clthXTtpKz1vKk1hdGgucG93KDY3MTA4ODY0LGEpfXJldHVybiBuKHQpKml9fSx7XCIuL2JuLXNpZ25cIjo3MX1dLDczOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImRvdWJsZS1iaXRzXCIpLGk9dChcImJpdC10d2lkZGxlXCIpLmNvdW50VHJhaWxpbmdaZXJvcztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9aShuLmxvKHQpKTtpZihlPDMyKXJldHVybiBlO3ZhciByPWkobi5oaSh0KSk7aWYocj4yMClyZXR1cm4gNTI7cmV0dXJuIHIrMzJ9fSx7XCJiaXQtdHdpZGRsZVwiOjgzLFwiZG91YmxlLWJpdHNcIjoxNTl9XSw3NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3QoXCJibi5qc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwib2JqZWN0XCI9PXR5cGVvZiB0JiZCb29sZWFuKHQud29yZHMpfX0se1wiYm4uanNcIjo4NX1dLDc1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImJuLmpzXCIpLGk9dChcImRvdWJsZS1iaXRzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1pLmV4cG9uZW50KHQpO3JldHVybiBlPDUyP25ldyBuKHQpOm5ldyBuKHQqTWF0aC5wb3coMiw1Mi1lKSkudXNobG4oZS01Mil9fSx7XCJibi5qc1wiOjg1LFwiZG91YmxlLWJpdHNcIjoxNTl9XSw3NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL251bS10by1iblwiKSxpPXQoXCIuL2JuLXNpZ25cIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9aSh0KSxhPWkoZSk7aWYoMD09PXIpcmV0dXJuW24oMCksbigxKV07aWYoMD09PWEpcmV0dXJuW24oMCksbigwKV07YTwwJiYodD10Lm5lZygpLGU9ZS5uZWcoKSk7dmFyIG89dC5nY2QoZSk7aWYoby5jbXBuKDEpKXJldHVyblt0LmRpdihvKSxlLmRpdihvKV07cmV0dXJuW3QsZV19fSx7XCIuL2JuLXNpZ25cIjo3MSxcIi4vbnVtLXRvLWJuXCI6NzV9XSw3NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJibi5qc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBuKHQpfX0se1wiYm4uanNcIjo4NX1dLDc4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vbGliL3JhdGlvbmFsaXplXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKHRbMF0ubXVsKGVbMF0pLHRbMV0ubXVsKGVbMV0pKX19LHtcIi4vbGliL3JhdGlvbmFsaXplXCI6NzZ9XSw3OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2xpYi9ibi1zaWduXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbih0WzBdKSpuKHRbMV0pfX0se1wiLi9saWIvYm4tc2lnblwiOjcxfV0sODA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9saWIvcmF0aW9uYWxpemVcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odFswXS5tdWwoZVsxXSkuc3ViKHRbMV0ubXVsKGVbMF0pKSx0WzFdLm11bChlWzFdKSl9fSx7XCIuL2xpYi9yYXRpb25hbGl6ZVwiOjc2fV0sODE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9saWIvYm4tdG8tbnVtXCIpLGk9dChcIi4vbGliL2N0elwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV07aWYoMD09PWUuY21wbigwKSlyZXR1cm4gMDt2YXIgYT1lLmFicygpLmRpdm1vZChyLmFicygpKSxvPWEuZGl2LHM9bihvKSxsPWEubW9kLGM9ZS5uZWdhdGl2ZSE9PXIubmVnYXRpdmU/LTE6MTtpZigwPT09bC5jbXBuKDApKXJldHVybiBjKnM7aWYocyl7dmFyIHU9aShzKSs0LGg9bihsLnVzaGxuKHUpLmRpdlJvdW5kKHIpKTtyZXR1cm4gYyoocytoKk1hdGgucG93KDIsLXUpKX12YXIgZj1yLmJpdExlbmd0aCgpLWwuYml0TGVuZ3RoKCkrNTMsaD1uKGwudXNobG4oZikuZGl2Um91bmQocikpO3JldHVybiBmPDEwMjM/YypoKk1hdGgucG93KDIsLWYpOihoKj1NYXRoLnBvdygyLC0xMDIzKSxjKmgqTWF0aC5wb3coMiwxMDIzLWYpKX19LHtcIi4vbGliL2JuLXRvLW51bVwiOjcyLFwiLi9saWIvY3R6XCI6NzN9XSw4MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEpe3ZhciBvPVtcImZ1bmN0aW9uIFwiLHQsXCIoYSxsLGgsXCIsbi5qb2luKFwiLFwiKSxcIil7XCIsYT9cIlwiOlwidmFyIGk9XCIscj9cImwtMVwiOlwiaCsxXCIsXCI7d2hpbGUobDw9aCl7dmFyIG09KGwraCk+Pj4xLHg9YVwiLGk/XCIuZ2V0KG0pXCI6XCJbbV1cIl07cmV0dXJuIGE/ZS5pbmRleE9mKFwiY1wiKTwwP28ucHVzaChcIjtpZih4PT09eSl7cmV0dXJuIG19ZWxzZSBpZih4PD15KXtcIik6by5wdXNoKFwiO3ZhciBwPWMoeCx5KTtpZihwPT09MCl7cmV0dXJuIG19ZWxzZSBpZihwPD0wKXtcIik6by5wdXNoKFwiO2lmKFwiLGUsXCIpe2k9bTtcIikscj9vLnB1c2goXCJsPW0rMX1lbHNle2g9bS0xfVwiKTpvLnB1c2goXCJoPW0tMX1lbHNle2w9bSsxfVwiKSxvLnB1c2goXCJ9XCIpLGE/by5wdXNoKFwicmV0dXJuIC0xfTtcIik6by5wdXNoKFwicmV0dXJuIGl9O1wiKSxvLmpvaW4oXCJcIil9ZnVuY3Rpb24gaSh0LGUscixpKXtyZXR1cm4gbmV3IEZ1bmN0aW9uKFtuKFwiQVwiLFwieFwiK3QrXCJ5XCIsZSxbXCJ5XCJdLCExLGkpLG4oXCJCXCIsXCJ4XCIrdCtcInlcIixlLFtcInlcIl0sITAsaSksbihcIlBcIixcImMoeCx5KVwiK3QrXCIwXCIsZSxbXCJ5XCIsXCJjXCJdLCExLGkpLG4oXCJRXCIsXCJjKHgseSlcIit0K1wiMFwiLGUsW1wieVwiLFwiY1wiXSwhMCxpKSxcImZ1bmN0aW9uIGRpc3BhdGNoQnNlYXJjaFwiLHIsXCIoYSx5LGMsbCxoKXtpZihhLnNoYXBlKXtpZih0eXBlb2YoYyk9PT0nZnVuY3Rpb24nKXtyZXR1cm4gUShhLChsPT09dW5kZWZpbmVkKT8wOmx8MCwoaD09PXVuZGVmaW5lZCk/YS5zaGFwZVswXS0xOmh8MCx5LGMpfWVsc2V7cmV0dXJuIEIoYSwoYz09PXVuZGVmaW5lZCk/MDpjfDAsKGw9PT11bmRlZmluZWQpP2Euc2hhcGVbMF0tMTpsfDAseSl9fWVsc2V7aWYodHlwZW9mKGMpPT09J2Z1bmN0aW9uJyl7cmV0dXJuIFAoYSwobD09PXVuZGVmaW5lZCk/MDpsfDAsKGg9PT11bmRlZmluZWQpP2EubGVuZ3RoLTE6aHwwLHksYyl9ZWxzZXtyZXR1cm4gQShhLChjPT09dW5kZWZpbmVkKT8wOmN8MCwobD09PXVuZGVmaW5lZCk/YS5sZW5ndGgtMTpsfDAseSl9fX1yZXR1cm4gZGlzcGF0Y2hCc2VhcmNoXCIscl0uam9pbihcIlwiKSkoKX1lLmV4cG9ydHM9e2dlOmkoXCI+PVwiLCExLFwiR0VcIiksZ3Q6aShcIj5cIiwhMSxcIkdUXCIpLGx0OmkoXCI8XCIsITAsXCJMVFwiKSxsZTppKFwiPD1cIiwhMCxcIkxFXCIpLGVxOmkoXCItXCIsITAsXCJFUVwiLCEwKX19LHt9XSw4MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7dmFyIGU9MzI7cmV0dXJuKHQmPS10KSYmZS0tLDY1NTM1JnQmJihlLT0xNiksMTY3MTE5MzUmdCYmKGUtPTgpLDI1MjY0NTEzNSZ0JiYoZS09NCksODU4OTkzNDU5JnQmJihlLT0yKSwxNDMxNjU1NzY1JnQmJihlLT0xKSxlfXIuSU5UX0JJVFM9MzIsci5JTlRfTUFYPTIxNDc0ODM2NDcsci5JTlRfTUlOPS0xPDwzMSxyLnNpZ249ZnVuY3Rpb24odCl7cmV0dXJuKHQ+MCktKHQ8MCl9LHIuYWJzPWZ1bmN0aW9uKHQpe3ZhciBlPXQ+PjMxO3JldHVybih0XmUpLWV9LHIubWluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVeKHReZSkmLSh0PGUpfSxyLm1heD1mdW5jdGlvbih0LGUpe3JldHVybiB0Xih0XmUpJi0odDxlKX0sci5pc1BvdzI9ZnVuY3Rpb24odCl7cmV0dXJuISh0JnQtMXx8IXQpfSxyLmxvZzI9ZnVuY3Rpb24odCl7dmFyIGUscjtyZXR1cm4gZT0odD42NTUzNSk8PDQsZXw9cj0oKHQ+Pj49ZSk+MjU1KTw8MyxlfD1yPSgodD4+Pj1yKT4xNSk8PDIsKGV8PXI9KCh0Pj4+PXIpPjMpPDwxKXwodD4+Pj1yKT4+MX0sci5sb2cxMD1mdW5jdGlvbih0KXtyZXR1cm4gdD49MWU5Pzk6dD49MWU4Pzg6dD49MWU3Pzc6dD49MWU2PzY6dD49MWU1PzU6dD49MWU0PzQ6dD49MWUzPzM6dD49MTAwPzI6dD49MTA/MTowfSxyLnBvcENvdW50PWZ1bmN0aW9uKHQpe3JldHVybiAxNjg0MzAwOSooKHQ9KDg1ODk5MzQ1OSYodC09dD4+PjEmMTQzMTY1NTc2NSkpKyh0Pj4+MiY4NTg5OTM0NTkpKSsodD4+PjQpJjI1MjY0NTEzNSk+Pj4yNH0sci5jb3VudFRyYWlsaW5nWmVyb3M9bixyLm5leHRQb3cyPWZ1bmN0aW9uKHQpe3JldHVybiB0Kz0wPT09dCwtLXQsdHw9dD4+PjEsdHw9dD4+PjIsdHw9dD4+PjQsdHw9dD4+PjgsKHR8PXQ+Pj4xNikrMX0sci5wcmV2UG93Mj1mdW5jdGlvbih0KXtyZXR1cm4gdHw9dD4+PjEsdHw9dD4+PjIsdHw9dD4+PjQsdHw9dD4+PjgsKHR8PXQ+Pj4xNiktKHQ+Pj4xKX0sci5wYXJpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRePXQ+Pj4xNix0Xj10Pj4+OCx0Xj10Pj4+NCwyNzAzMD4+Pih0Jj0xNSkmMX07dmFyIGk9bmV3IEFycmF5KDI1Nik7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8MjU2OysrZSl7dmFyIHI9ZSxuPWUsaT03O2ZvcihyPj4+PTE7cjtyPj4+PTEpbjw8PTEsbnw9MSZyLC0taTt0W2VdPW48PGkmMjU1fX0oaSksci5yZXZlcnNlPWZ1bmN0aW9uKHQpe3JldHVybiBpWzI1NSZ0XTw8MjR8aVt0Pj4+OCYyNTVdPDwxNnxpW3Q+Pj4xNiYyNTVdPDw4fGlbdD4+PjI0JjI1NV19LHIuaW50ZXJsZWF2ZTI9ZnVuY3Rpb24odCxlKXtyZXR1cm4odD0xNDMxNjU1NzY1JigodD04NTg5OTM0NTkmKCh0PTI1MjY0NTEzNSYoKHQ9MTY3MTE5MzUmKCh0Jj02NTUzNSl8dDw8OCkpfHQ8PDQpKXx0PDwyKSl8dDw8MSkpfChlPTE0MzE2NTU3NjUmKChlPTg1ODk5MzQ1OSYoKGU9MjUyNjQ1MTM1JigoZT0xNjcxMTkzNSYoKGUmPTY1NTM1KXxlPDw4KSl8ZTw8NCkpfGU8PDIpKXxlPDwxKSk8PDF9LHIuZGVpbnRlcmxlYXZlMj1mdW5jdGlvbih0LGUpe3JldHVybih0PTY1NTM1JigodD0xNjcxMTkzNSYoKHQ9MjUyNjQ1MTM1JigodD04NTg5OTM0NTkmKCh0PXQ+Pj5lJjE0MzE2NTU3NjUpfHQ+Pj4xKSl8dD4+PjIpKXx0Pj4+NCkpfHQ+Pj4xNikpPDwxNj4+MTZ9LHIuaW50ZXJsZWF2ZTM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PTEyMjcxMzM1MTMmKCh0PTMyNzIzNTYwMzUmKCh0PTI1MTcxOTY5NSYoKHQ9NDI3ODE5MDMzNSYoKHQmPTEwMjMpfHQ8PDE2KSl8dDw8OCkpfHQ8PDQpKXx0PDwyKSwodHw9KGU9MTIyNzEzMzUxMyYoKGU9MzI3MjM1NjAzNSYoKGU9MjUxNzE5Njk1JigoZT00Mjc4MTkwMzM1JigoZSY9MTAyMyl8ZTw8MTYpKXxlPDw4KSl8ZTw8NCkpfGU8PDIpKTw8MSl8KHI9MTIyNzEzMzUxMyYoKHI9MzI3MjM1NjAzNSYoKHI9MjUxNzE5Njk1Jigocj00Mjc4MTkwMzM1JigociY9MTAyMyl8cjw8MTYpKXxyPDw4KSl8cjw8NCkpfHI8PDIpKTw8Mn0sci5kZWludGVybGVhdmUzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQ9MTAyMyYoKHQ9NDI3ODE5MDMzNSYoKHQ9MjUxNzE5Njk1JigodD0zMjcyMzU2MDM1JigodD10Pj4+ZSYxMjI3MTMzNTEzKXx0Pj4+MikpfHQ+Pj40KSl8dD4+PjgpKXx0Pj4+MTYpKTw8MjI+PjIyfSxyLm5leHRDb21iaW5hdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10fHQtMTtyZXR1cm4gZSsxfCh+ZSYtfmUpLTE+Pj5uKHQpKzF9fSx7fV0sODQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiY2xhbXBcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9e30pO3ZhciByLG8scyxsLGMsdSxoLGYscCxkLGcsdj1udWxsPT1lLmN1dG9mZj8uMjU6ZS5jdXRvZmYsbT1udWxsPT1lLnJhZGl1cz84OmUucmFkaXVzLHk9ZS5jaGFubmVsfHwwO2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KXx8QXJyYXkuaXNBcnJheSh0KSl7aWYoIWUud2lkdGh8fCFlLmhlaWdodCl0aHJvdyBFcnJvcihcIkZvciByYXcgZGF0YSB3aWR0aCBhbmQgaGVpZ2h0IHNob3VsZCBiZSBwcm92aWRlZCBieSBvcHRpb25zXCIpO3I9ZS53aWR0aCxvPWUuaGVpZ2h0LGw9dCx1PWUuc3RyaWRlP2Uuc3RyaWRlOk1hdGguZmxvb3IodC5sZW5ndGgvci9vKX1lbHNlIHdpbmRvdy5IVE1MQ2FudmFzRWxlbWVudCYmdCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MQ2FudmFzRWxlbWVudD8oaD0oZj10KS5nZXRDb250ZXh0KFwiMmRcIikscj1mLndpZHRoLG89Zi5oZWlnaHQscD1oLmdldEltYWdlRGF0YSgwLDAscixvKSxsPXAuZGF0YSx1PTQpOndpbmRvdy5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQmJnQgaW5zdGFuY2VvZiB3aW5kb3cuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPyhmPXQuY2FudmFzLGg9dCxyPWYud2lkdGgsbz1mLmhlaWdodCxwPWguZ2V0SW1hZ2VEYXRhKDAsMCxyLG8pLGw9cC5kYXRhLHU9NCk6d2luZG93LkltYWdlRGF0YSYmdCBpbnN0YW5jZW9mIHdpbmRvdy5JbWFnZURhdGEmJihwPXQscj10LndpZHRoLG89dC5oZWlnaHQsbD1wLmRhdGEsdT00KTtpZihzPU1hdGgubWF4KHIsbyksd2luZG93LlVpbnQ4Q2xhbXBlZEFycmF5JiZsIGluc3RhbmNlb2Ygd2luZG93LlVpbnQ4Q2xhbXBlZEFycmF5fHx3aW5kb3cuVWludDhBcnJheSYmbCBpbnN0YW5jZW9mIHdpbmRvdy5VaW50OEFycmF5KWZvcihjPWwsbD1BcnJheShyKm8pLGQ9MCxnPWMubGVuZ3RoO2Q8ZztkKyspbFtkXT1jW2QqdSt5XS8yNTU7ZWxzZSBpZigxIT09dSl0aHJvdyBFcnJvcihcIlJhdyBkYXRhIGNhbiBoYXZlIG9ubHkgMSB2YWx1ZSBwZXIgcGl4ZWxcIik7dmFyIHg9QXJyYXkocipvKSxiPUFycmF5KHIqbyksXz1BcnJheShzKSx3PUFycmF5KHMpLGs9QXJyYXkocysxKSxBPUFycmF5KHMpO2ZvcihkPTAsZz1yKm87ZDxnO2QrKyl7dmFyIFQ9bFtkXTt4W2RdPTE9PT1UPzA6MD09PVQ/aTpNYXRoLnBvdyhNYXRoLm1heCgwLC41LVQpLDIpLGJbZF09MT09PVQ/aTowPT09VD8wOk1hdGgucG93KE1hdGgubWF4KDAsVC0uNSksMil9YSh4LHIsbyxfLHcsQSxrKSxhKGIscixvLF8sdyxBLGspO3ZhciBNPXdpbmRvdy5GbG9hdDMyQXJyYXk/bmV3IEZsb2F0MzJBcnJheShyKm8pOm5ldyBBcnJheShyKm8pO2ZvcihkPTAsZz1yKm87ZDxnO2QrKylNW2RdPW4oMS0oKHhbZF0tYltkXSkvbSt2KSwwLDEpO3JldHVybiBNfTt2YXIgaT0xZTIwO2Z1bmN0aW9uIGEodCxlLHIsbixpLGEscyl7Zm9yKHZhciBsPTA7bDxlO2wrKyl7Zm9yKHZhciBjPTA7YzxyO2MrKyluW2NdPXRbYyplK2xdO2ZvcihvKG4saSxhLHMsciksYz0wO2M8cjtjKyspdFtjKmUrbF09aVtjXX1mb3IoYz0wO2M8cjtjKyspe2ZvcihsPTA7bDxlO2wrKyluW2xdPXRbYyplK2xdO2ZvcihvKG4saSxhLHMsZSksbD0wO2w8ZTtsKyspdFtjKmUrbF09TWF0aC5zcXJ0KGlbbF0pfX1mdW5jdGlvbiBvKHQsZSxyLG4sYSl7clswXT0wLG5bMF09LWksblsxXT0raTtmb3IodmFyIG89MSxzPTA7bzxhO28rKyl7Zm9yKHZhciBsPSh0W29dK28qby0odFtyW3NdXStyW3NdKnJbc10pKS8oMipvLTIqcltzXSk7bDw9bltzXTspcy0tLGw9KHRbb10rbypvLSh0W3Jbc11dK3Jbc10qcltzXSkpLygyKm8tMipyW3NdKTtyWysrc109byxuW3NdPWwsbltzKzFdPStpfWZvcihvPTAscz0wO288YTtvKyspe2Zvcig7bltzKzFdPG87KXMrKztlW29dPShvLXJbc10pKihvLXJbc10pK3RbcltzXV19fX0se2NsYW1wOjEwNn1dLDg1OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcihlfHxcIkFzc2VydGlvbiBmYWlsZWRcIil9ZnVuY3Rpb24gaSh0LGUpe3Quc3VwZXJfPWU7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gYSh0LGUscil7aWYoYS5pc0JOKHQpKXJldHVybiB0O3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT10JiYoXCJsZVwiIT09ZSYmXCJiZVwiIT09ZXx8KHI9ZSxlPTEwKSx0aGlzLl9pbml0KHR8fDAsZXx8MTAscnx8XCJiZVwiKSl9dmFyIG87XCJvYmplY3RcIj09dHlwZW9mIGU/ZS5leHBvcnRzPWE6ci5CTj1hLGEuQk49YSxhLndvcmRTaXplPTI2O3RyeXtvPXQoXCJidWZmZXJcIikuQnVmZmVyfWNhdGNoKHQpe31mdW5jdGlvbiBzKHQsZSxyKXtmb3IodmFyIG49MCxpPU1hdGgubWluKHQubGVuZ3RoLHIpLGE9ZTthPGk7YSsrKXt2YXIgbz10LmNoYXJDb2RlQXQoYSktNDg7bjw8PTQsbnw9bz49NDkmJm88PTU0P28tNDkrMTA6bz49MTcmJm88PTIyP28tMTcrMTA6MTUmb31yZXR1cm4gbn1mdW5jdGlvbiBsKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9TWF0aC5taW4odC5sZW5ndGgsciksbz1lO288YTtvKyspe3ZhciBzPXQuY2hhckNvZGVBdChvKS00ODtpKj1uLGkrPXM+PTQ5P3MtNDkrMTA6cz49MTc/cy0xNysxMDpzfXJldHVybiBpfWEuaXNCTj1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGF8fG51bGwhPT10JiZcIm9iamVjdFwiPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PWEud29yZFNpemUmJkFycmF5LmlzQXJyYXkodC53b3Jkcyl9LGEubWF4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY21wKGUpPjA/dDplfSxhLm1pbj1mdW5jdGlvbih0LGUpe3JldHVybiB0LmNtcChlKTwwP3Q6ZX0sYS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odCxlLHIpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHQsZSxyKTtpZihcIm9iamVjdFwiPT10eXBlb2YgdClyZXR1cm4gdGhpcy5faW5pdEFycmF5KHQsZSxyKTtcImhleFwiPT09ZSYmKGU9MTYpLG4oZT09PSgwfGUpJiZlPj0yJiZlPD0zNik7dmFyIGk9MDtcIi1cIj09PSh0PXQudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMrL2csXCJcIikpWzBdJiZpKyssMTY9PT1lP3RoaXMuX3BhcnNlSGV4KHQsaSk6dGhpcy5fcGFyc2VCYXNlKHQsZSxpKSxcIi1cIj09PXRbMF0mJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKSxcImxlXCI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKX0sYS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24odCxlLHIpe3Q8MCYmKHRoaXMubmVnYXRpdmU9MSx0PS10KSx0PDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ0XSx0aGlzLmxlbmd0aD0xKTp0PDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnQsdC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG4odDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZ0LHQvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksXCJsZVwiPT09ciYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGUscil9LGEucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24odCxlLHIpe2lmKG4oXCJudW1iZXJcIj09dHlwZW9mIHQubGVuZ3RoKSx0Lmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbCh0Lmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT0wO3ZhciBhLG8scz0wO2lmKFwiYmVcIj09PXIpZm9yKGk9dC5sZW5ndGgtMSxhPTA7aT49MDtpLT0zKW89dFtpXXx0W2ktMV08PDh8dFtpLTJdPDwxNix0aGlzLndvcmRzW2FdfD1vPDxzJjY3MTA4ODYzLHRoaXMud29yZHNbYSsxXT1vPj4+MjYtcyY2NzEwODg2Mywocys9MjQpPj0yNiYmKHMtPTI2LGErKyk7ZWxzZSBpZihcImxlXCI9PT1yKWZvcihpPTAsYT0wO2k8dC5sZW5ndGg7aSs9MylvPXRbaV18dFtpKzFdPDw4fHRbaSsyXTw8MTYsdGhpcy53b3Jkc1thXXw9bzw8cyY2NzEwODg2Myx0aGlzLndvcmRzW2ErMV09bz4+PjI2LXMmNjcxMDg4NjMsKHMrPTI0KT49MjYmJihzLT0yNixhKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbih0LGUpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgodC5sZW5ndGgtZSkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgcj0wO3I8dGhpcy5sZW5ndGg7cisrKXRoaXMud29yZHNbcl09MDt2YXIgbixpLGE9MDtmb3Iocj10Lmxlbmd0aC02LG49MDtyPj1lO3ItPTYpaT1zKHQscixyKzYpLHRoaXMud29yZHNbbl18PWk8PGEmNjcxMDg4NjMsdGhpcy53b3Jkc1tuKzFdfD1pPj4+MjYtYSY0MTk0MzAzLChhKz0yNCk+PTI2JiYoYS09MjYsbisrKTtyKzYhPT1lJiYoaT1zKHQsZSxyKzYpLHRoaXMud29yZHNbbl18PWk8PGEmNjcxMDg4NjMsdGhpcy53b3Jkc1tuKzFdfD1pPj4+MjYtYSY0MTk0MzAzKSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24odCxlLHIpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBuPTAsaT0xO2k8PTY3MTA4ODYzO2kqPWUpbisrO24tLSxpPWkvZXwwO2Zvcih2YXIgYT10Lmxlbmd0aC1yLG89YSVuLHM9TWF0aC5taW4oYSxhLW8pK3IsYz0wLHU9cjt1PHM7dSs9biljPWwodCx1LHUrbixlKSx0aGlzLmltdWxuKGkpLHRoaXMud29yZHNbMF0rYzw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1jOnRoaXMuX2lhZGRuKGMpO2lmKDAhPT1vKXt2YXIgaD0xO2ZvcihjPWwodCx1LHQubGVuZ3RoLGUpLHU9MDt1PG87dSsrKWgqPWU7dGhpcy5pbXVsbihoKSx0aGlzLndvcmRzWzBdK2M8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9Yzp0aGlzLl9pYWRkbihjKX19LGEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7dC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXQud29yZHNbZV09dGhpcy53b3Jkc1tlXTt0Lmxlbmd0aD10aGlzLmxlbmd0aCx0Lm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsdC5yZWQ9dGhpcy5yZWR9LGEucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGEobnVsbCk7cmV0dXJuIHRoaXMuY29weSh0KSx0fSxhLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHQpe2Zvcig7dGhpcy5sZW5ndGg8dDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxhLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LGEucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxhLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkP1wiPEJOLVI6IFwiOlwiPEJOOiBcIikrdGhpcy50b1N0cmluZygxNikrXCI+XCJ9O3ZhciBjPVtcIlwiLFwiMFwiLFwiMDBcIixcIjAwMFwiLFwiMDAwMFwiLFwiMDAwMDBcIixcIjAwMDAwMFwiLFwiMDAwMDAwMFwiLFwiMDAwMDAwMDBcIixcIjAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiXSx1PVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLGg9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gZih0LGUscil7ci5uZWdhdGl2ZT1lLm5lZ2F0aXZlXnQubmVnYXRpdmU7dmFyIG49dC5sZW5ndGgrZS5sZW5ndGh8MDtyLmxlbmd0aD1uLG49bi0xfDA7dmFyIGk9MHx0LndvcmRzWzBdLGE9MHxlLndvcmRzWzBdLG89aSphLHM9NjcxMDg4NjMmbyxsPW8vNjcxMDg4NjR8MDtyLndvcmRzWzBdPXM7Zm9yKHZhciBjPTE7YzxuO2MrKyl7Zm9yKHZhciB1PWw+Pj4yNixoPTY3MTA4ODYzJmwsZj1NYXRoLm1pbihjLGUubGVuZ3RoLTEpLHA9TWF0aC5tYXgoMCxjLXQubGVuZ3RoKzEpO3A8PWY7cCsrKXt2YXIgZD1jLXB8MDt1Kz0obz0oaT0wfHQud29yZHNbZF0pKihhPTB8ZS53b3Jkc1twXSkraCkvNjcxMDg4NjR8MCxoPTY3MTA4ODYzJm99ci53b3Jkc1tjXT0wfGgsbD0wfHV9cmV0dXJuIDAhPT1sP3Iud29yZHNbY109MHxsOnIubGVuZ3RoLS0sci5zdHJpcCgpfWEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHQsZSl7dmFyIHI7aWYoZT0wfGV8fDEsMTY9PT0odD10fHwxMCl8fFwiaGV4XCI9PT10KXtyPVwiXCI7Zm9yKHZhciBpPTAsYT0wLG89MDtvPHRoaXMubGVuZ3RoO28rKyl7dmFyIHM9dGhpcy53b3Jkc1tvXSxsPSgxNjc3NzIxNSYoczw8aXxhKSkudG9TdHJpbmcoMTYpO3I9MCE9PShhPXM+Pj4yNC1pJjE2Nzc3MjE1KXx8byE9PXRoaXMubGVuZ3RoLTE/Y1s2LWwubGVuZ3RoXStsK3I6bCtyLChpKz0yKT49MjYmJihpLT0yNixvLS0pfWZvcigwIT09YSYmKHI9YS50b1N0cmluZygxNikrcik7ci5sZW5ndGglZSE9MDspcj1cIjBcIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9XCItXCIrcikscn1pZih0PT09KDB8dCkmJnQ+PTImJnQ8PTM2KXt2YXIgZj11W3RdLHA9aFt0XTtyPVwiXCI7dmFyIGQ9dGhpcy5jbG9uZSgpO2ZvcihkLm5lZ2F0aXZlPTA7IWQuaXNaZXJvKCk7KXt2YXIgZz1kLm1vZG4ocCkudG9TdHJpbmcodCk7cj0oZD1kLmlkaXZuKHApKS5pc1plcm8oKT9nK3I6Y1tmLWcubGVuZ3RoXStnK3J9Zm9yKHRoaXMuaXNaZXJvKCkmJihyPVwiMFwiK3IpO3IubGVuZ3RoJWUhPTA7KXI9XCIwXCIrcjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihyPVwiLVwiK3IpLHJ9bighMSxcIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzZcIil9LGEucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3QrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT90Kz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbighMSxcIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0c1wiKSwwIT09dGhpcy5uZWdhdGl2ZT8tdDp0fSxhLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LGEucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG8pLHRoaXMudG9BcnJheUxpa2Uobyx0LGUpfSxhLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksdCxlKX0sYS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuYnl0ZUxlbmd0aCgpLGE9cnx8TWF0aC5tYXgoMSxpKTtuKGk8PWEsXCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoXCIpLG4oYT4wLFwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwXCIpLHRoaXMuc3RyaXAoKTt2YXIgbyxzLGw9XCJsZVwiPT09ZSxjPW5ldyB0KGEpLHU9dGhpcy5jbG9uZSgpO2lmKGwpe2ZvcihzPTA7IXUuaXNaZXJvKCk7cysrKW89dS5hbmRsbigyNTUpLHUuaXVzaHJuKDgpLGNbc109bztmb3IoO3M8YTtzKyspY1tzXT0wfWVsc2V7Zm9yKHM9MDtzPGEtaTtzKyspY1tzXT0wO2ZvcihzPTA7IXUuaXNaZXJvKCk7cysrKW89dS5hbmRsbigyNTUpLHUuaXVzaHJuKDgpLGNbYS1zLTFdPW99cmV0dXJuIGN9LE1hdGguY2x6MzI/YS5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXtyZXR1cm4gMzItTWF0aC5jbHozMih0KX06YS5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXt2YXIgZT10LHI9MDtyZXR1cm4gZT49NDA5NiYmKHIrPTEzLGU+Pj49MTMpLGU+PTY0JiYocis9NyxlPj4+PTcpLGU+PTgmJihyKz00LGU+Pj49NCksZT49MiYmKHIrPTIsZT4+Pj0yKSxyK2V9LGEucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbih0KXtpZigwPT09dClyZXR1cm4gMjY7dmFyIGU9dCxyPTA7cmV0dXJuIDA9PSg4MTkxJmUpJiYocis9MTMsZT4+Pj0xMyksMD09KDEyNyZlKSYmKHIrPTcsZT4+Pj03KSwwPT0oMTUmZSkmJihyKz00LGU+Pj49NCksMD09KDMmZSkmJihyKz0yLGU+Pj49MiksMD09KDEmZSkmJnIrKyxyfSxhLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdLGU9dGhpcy5fY291bnRCaXRzKHQpO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrZX0sYS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgdD0wLGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHI9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tlXSk7aWYodCs9ciwyNiE9PXIpYnJlYWt9cmV0dXJuIHR9LGEucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LGEucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbih0KXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bih0KS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LGEucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRlc3RuKHQtMSk/dGhpcy5ub3RuKHQpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LGEucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxhLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sYS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sYS5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbih0KXtmb3IoO3RoaXMubGVuZ3RoPHQubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy53b3Jkc1tlXT10aGlzLndvcmRzW2VdfHQud29yZHNbZV07cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1b3IodCl9LGEucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHQpOnQuY2xvbmUoKS5pb3IodGhpcyl9LGEucHJvdG90eXBlLnVvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IodCk6dC5jbG9uZSgpLml1b3IodGhpcyl9LGEucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHQpe3ZhciBlO2U9dGhpcy5sZW5ndGg+dC5sZW5ndGg/dDp0aGlzO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXSZ0LndvcmRzW3JdO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQodCl9LGEucHJvdG90eXBlLmFuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQodCk6dC5jbG9uZSgpLmlhbmQodGhpcyl9LGEucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZCh0KTp0LmNsb25lKCkuaXVhbmQodGhpcyl9LGEucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHQpe3ZhciBlLHI7dGhpcy5sZW5ndGg+dC5sZW5ndGg/KGU9dGhpcyxyPXQpOihlPXQscj10aGlzKTtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPWUud29yZHNbbl1eci53b3Jkc1tuXTtpZih0aGlzIT09ZSlmb3IoO248ZS5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09ZS53b3Jkc1tuXTtyZXR1cm4gdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1eG9yKHQpfSxhLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHQpOnQuY2xvbmUoKS5peG9yKHRoaXMpfSxhLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IodCk6dC5jbG9uZSgpLml1eG9yKHRoaXMpfSxhLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT0wfE1hdGguY2VpbCh0LzI2KSxyPXQlMjY7dGhpcy5fZXhwYW5kKGUpLHI+MCYmZS0tO2Zvcih2YXIgaT0wO2k8ZTtpKyspdGhpcy53b3Jkc1tpXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tpXTtyZXR1cm4gcj4wJiYodGhpcy53b3Jkc1tpXT1+dGhpcy53b3Jkc1tpXSY2NzEwODg2Mz4+MjYtciksdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4odCl9LGEucHJvdG90eXBlLnNldG49ZnVuY3Rpb24odCxlKXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgcj10LzI2fDAsaT10JTI2O3JldHVybiB0aGlzLl9leHBhbmQocisxKSx0aGlzLndvcmRzW3JdPWU/dGhpcy53b3Jkc1tyXXwxPDxpOnRoaXMud29yZHNbcl0mfigxPDxpKSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odCl7dmFyIGUscixuO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGU9dGhpcy5pc3ViKHQpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmUpcmV0dXJuIHQubmVnYXRpdmU9MCxlPXRoaXMuaXN1Yih0KSx0Lm5lZ2F0aXZlPTEsZS5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD50Lmxlbmd0aD8ocj10aGlzLG49dCk6KHI9dCxuPXRoaXMpO2Zvcih2YXIgaT0wLGE9MDthPG4ubGVuZ3RoO2ErKyllPSgwfHIud29yZHNbYV0pKygwfG4ud29yZHNbYV0pK2ksdGhpcy53b3Jkc1thXT02NzEwODg2MyZlLGk9ZT4+PjI2O2Zvcig7MCE9PWkmJmE8ci5sZW5ndGg7YSsrKWU9KDB8ci53b3Jkc1thXSkraSx0aGlzLndvcmRzW2FdPTY3MTA4ODYzJmUsaT1lPj4+MjY7aWYodGhpcy5sZW5ndGg9ci5sZW5ndGgsMCE9PWkpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09aSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYociE9PXRoaXMpZm9yKDthPHIubGVuZ3RoO2ErKyl0aGlzLndvcmRzW2FdPXIud29yZHNbYV07cmV0dXJuIHRoaXN9LGEucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gMCE9PXQubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyh0Lm5lZ2F0aXZlPTAsZT10aGlzLnN1Yih0KSx0Lm5lZ2F0aXZlXj0xLGUpOjA9PT10Lm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGU9dC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGUpOnRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHQpOnQuY2xvbmUoKS5pYWRkKHRoaXMpfSxhLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQpe2lmKDAhPT10Lm5lZ2F0aXZlKXt0Lm5lZ2F0aXZlPTA7dmFyIGU9dGhpcy5pYWRkKHQpO3JldHVybiB0Lm5lZ2F0aXZlPTEsZS5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZCh0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgcixuLGk9dGhpcy5jbXAodCk7aWYoMD09PWkpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO2k+MD8ocj10aGlzLG49dCk6KHI9dCxuPXRoaXMpO2Zvcih2YXIgYT0wLG89MDtvPG4ubGVuZ3RoO28rKylhPShlPSgwfHIud29yZHNbb10pLSgwfG4ud29yZHNbb10pK2EpPj4yNix0aGlzLndvcmRzW29dPTY3MTA4ODYzJmU7Zm9yKDswIT09YSYmbzxyLmxlbmd0aDtvKyspYT0oZT0oMHxyLndvcmRzW29dKSthKT4+MjYsdGhpcy53b3Jkc1tvXT02NzEwODg2MyZlO2lmKDA9PT1hJiZvPHIubGVuZ3RoJiZyIT09dGhpcylmb3IoO288ci5sZW5ndGg7bysrKXRoaXMud29yZHNbb109ci53b3Jkc1tvXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsbyksciE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Yih0KX07dmFyIHA9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvPXQud29yZHMscz1lLndvcmRzLGw9ci53b3JkcyxjPTAsdT0wfG9bMF0saD04MTkxJnUsZj11Pj4+MTMscD0wfG9bMV0sZD04MTkxJnAsZz1wPj4+MTMsdj0wfG9bMl0sbT04MTkxJnYseT12Pj4+MTMseD0wfG9bM10sYj04MTkxJngsXz14Pj4+MTMsdz0wfG9bNF0saz04MTkxJncsQT13Pj4+MTMsVD0wfG9bNV0sTT04MTkxJlQsUz1UPj4+MTMsRT0wfG9bNl0sQz04MTkxJkUsTD1FPj4+MTMsej0wfG9bN10sTz04MTkxJnosST16Pj4+MTMsRD0wfG9bOF0sUD04MTkxJkQsUj1EPj4+MTMsRj0wfG9bOV0sQj04MTkxJkYsTj1GPj4+MTMsaj0wfHNbMF0sVj04MTkxJmosVT1qPj4+MTMscT0wfHNbMV0sSD04MTkxJnEsRz1xPj4+MTMsWT0wfHNbMl0sVz04MTkxJlksWD1ZPj4+MTMsWj0wfHNbM10sJD04MTkxJlosSj1aPj4+MTMsSz0wfHNbNF0sUT04MTkxJkssdHQ9Sz4+PjEzLGV0PTB8c1s1XSxydD04MTkxJmV0LG50PWV0Pj4+MTMsaXQ9MHxzWzZdLGF0PTgxOTEmaXQsb3Q9aXQ+Pj4xMyxzdD0wfHNbN10sbHQ9ODE5MSZzdCxjdD1zdD4+PjEzLHV0PTB8c1s4XSxodD04MTkxJnV0LGZ0PXV0Pj4+MTMscHQ9MHxzWzldLGR0PTgxOTEmcHQsZ3Q9cHQ+Pj4xMztyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZSxyLmxlbmd0aD0xOTt2YXIgdnQ9KGMrKG49TWF0aC5pbXVsKGgsVikpfDApKygoODE5MSYoaT0oaT1NYXRoLmltdWwoaCxVKSkrTWF0aC5pbXVsKGYsVil8MCkpPDwxMyl8MDtjPSgoYT1NYXRoLmltdWwoZixVKSkrKGk+Pj4xMyl8MCkrKHZ0Pj4+MjYpfDAsdnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGQsViksaT0oaT1NYXRoLmltdWwoZCxVKSkrTWF0aC5pbXVsKGcsVil8MCxhPU1hdGguaW11bChnLFUpO3ZhciBtdD0oYysobj1uK01hdGguaW11bChoLEgpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChoLEcpfDApK01hdGguaW11bChmLEgpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZixHKXwwKSsoaT4+PjEzKXwwKSsobXQ+Pj4yNil8MCxtdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwobSxWKSxpPShpPU1hdGguaW11bChtLFUpKStNYXRoLmltdWwoeSxWKXwwLGE9TWF0aC5pbXVsKHksVSksbj1uK01hdGguaW11bChkLEgpfDAsaT0oaT1pK01hdGguaW11bChkLEcpfDApK01hdGguaW11bChnLEgpfDAsYT1hK01hdGguaW11bChnLEcpfDA7dmFyIHl0PShjKyhuPW4rTWF0aC5pbXVsKGgsVyl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGgsWCl8MCkrTWF0aC5pbXVsKGYsVyl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChmLFgpfDApKyhpPj4+MTMpfDApKyh5dD4+PjI2KXwwLHl0Jj02NzEwODg2MyxuPU1hdGguaW11bChiLFYpLGk9KGk9TWF0aC5pbXVsKGIsVSkpK01hdGguaW11bChfLFYpfDAsYT1NYXRoLmltdWwoXyxVKSxuPW4rTWF0aC5pbXVsKG0sSCl8MCxpPShpPWkrTWF0aC5pbXVsKG0sRyl8MCkrTWF0aC5pbXVsKHksSCl8MCxhPWErTWF0aC5pbXVsKHksRyl8MCxuPW4rTWF0aC5pbXVsKGQsVyl8MCxpPShpPWkrTWF0aC5pbXVsKGQsWCl8MCkrTWF0aC5pbXVsKGcsVyl8MCxhPWErTWF0aC5pbXVsKGcsWCl8MDt2YXIgeHQ9KGMrKG49bitNYXRoLmltdWwoaCwkKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxKKXwwKStNYXRoLmltdWwoZiwkKXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGYsSil8MCkrKGk+Pj4xMyl8MCkrKHh0Pj4+MjYpfDAseHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGssViksaT0oaT1NYXRoLmltdWwoayxVKSkrTWF0aC5pbXVsKEEsVil8MCxhPU1hdGguaW11bChBLFUpLG49bitNYXRoLmltdWwoYixIKXwwLGk9KGk9aStNYXRoLmltdWwoYixHKXwwKStNYXRoLmltdWwoXyxIKXwwLGE9YStNYXRoLmltdWwoXyxHKXwwLG49bitNYXRoLmltdWwobSxXKXwwLGk9KGk9aStNYXRoLmltdWwobSxYKXwwKStNYXRoLmltdWwoeSxXKXwwLGE9YStNYXRoLmltdWwoeSxYKXwwLG49bitNYXRoLmltdWwoZCwkKXwwLGk9KGk9aStNYXRoLmltdWwoZCxKKXwwKStNYXRoLmltdWwoZywkKXwwLGE9YStNYXRoLmltdWwoZyxKKXwwO3ZhciBidD0oYysobj1uK01hdGguaW11bChoLFEpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChoLHR0KXwwKStNYXRoLmltdWwoZixRKXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGYsdHQpfDApKyhpPj4+MTMpfDApKyhidD4+PjI2KXwwLGJ0Jj02NzEwODg2MyxuPU1hdGguaW11bChNLFYpLGk9KGk9TWF0aC5pbXVsKE0sVSkpK01hdGguaW11bChTLFYpfDAsYT1NYXRoLmltdWwoUyxVKSxuPW4rTWF0aC5pbXVsKGssSCl8MCxpPShpPWkrTWF0aC5pbXVsKGssRyl8MCkrTWF0aC5pbXVsKEEsSCl8MCxhPWErTWF0aC5pbXVsKEEsRyl8MCxuPW4rTWF0aC5pbXVsKGIsVyl8MCxpPShpPWkrTWF0aC5pbXVsKGIsWCl8MCkrTWF0aC5pbXVsKF8sVyl8MCxhPWErTWF0aC5pbXVsKF8sWCl8MCxuPW4rTWF0aC5pbXVsKG0sJCl8MCxpPShpPWkrTWF0aC5pbXVsKG0sSil8MCkrTWF0aC5pbXVsKHksJCl8MCxhPWErTWF0aC5pbXVsKHksSil8MCxuPW4rTWF0aC5pbXVsKGQsUSl8MCxpPShpPWkrTWF0aC5pbXVsKGQsdHQpfDApK01hdGguaW11bChnLFEpfDAsYT1hK01hdGguaW11bChnLHR0KXwwO3ZhciBfdD0oYysobj1uK01hdGguaW11bChoLHJ0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxudCl8MCkrTWF0aC5pbXVsKGYscnQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZixudCl8MCkrKGk+Pj4xMyl8MCkrKF90Pj4+MjYpfDAsX3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEMsViksaT0oaT1NYXRoLmltdWwoQyxVKSkrTWF0aC5pbXVsKEwsVil8MCxhPU1hdGguaW11bChMLFUpLG49bitNYXRoLmltdWwoTSxIKXwwLGk9KGk9aStNYXRoLmltdWwoTSxHKXwwKStNYXRoLmltdWwoUyxIKXwwLGE9YStNYXRoLmltdWwoUyxHKXwwLG49bitNYXRoLmltdWwoayxXKXwwLGk9KGk9aStNYXRoLmltdWwoayxYKXwwKStNYXRoLmltdWwoQSxXKXwwLGE9YStNYXRoLmltdWwoQSxYKXwwLG49bitNYXRoLmltdWwoYiwkKXwwLGk9KGk9aStNYXRoLmltdWwoYixKKXwwKStNYXRoLmltdWwoXywkKXwwLGE9YStNYXRoLmltdWwoXyxKKXwwLG49bitNYXRoLmltdWwobSxRKXwwLGk9KGk9aStNYXRoLmltdWwobSx0dCl8MCkrTWF0aC5pbXVsKHksUSl8MCxhPWErTWF0aC5pbXVsKHksdHQpfDAsbj1uK01hdGguaW11bChkLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoZCxudCl8MCkrTWF0aC5pbXVsKGcscnQpfDAsYT1hK01hdGguaW11bChnLG50KXwwO3ZhciB3dD0oYysobj1uK01hdGguaW11bChoLGF0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxvdCl8MCkrTWF0aC5pbXVsKGYsYXQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZixvdCl8MCkrKGk+Pj4xMyl8MCkrKHd0Pj4+MjYpfDAsd3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKE8sViksaT0oaT1NYXRoLmltdWwoTyxVKSkrTWF0aC5pbXVsKEksVil8MCxhPU1hdGguaW11bChJLFUpLG49bitNYXRoLmltdWwoQyxIKXwwLGk9KGk9aStNYXRoLmltdWwoQyxHKXwwKStNYXRoLmltdWwoTCxIKXwwLGE9YStNYXRoLmltdWwoTCxHKXwwLG49bitNYXRoLmltdWwoTSxXKXwwLGk9KGk9aStNYXRoLmltdWwoTSxYKXwwKStNYXRoLmltdWwoUyxXKXwwLGE9YStNYXRoLmltdWwoUyxYKXwwLG49bitNYXRoLmltdWwoaywkKXwwLGk9KGk9aStNYXRoLmltdWwoayxKKXwwKStNYXRoLmltdWwoQSwkKXwwLGE9YStNYXRoLmltdWwoQSxKKXwwLG49bitNYXRoLmltdWwoYixRKXwwLGk9KGk9aStNYXRoLmltdWwoYix0dCl8MCkrTWF0aC5pbXVsKF8sUSl8MCxhPWErTWF0aC5pbXVsKF8sdHQpfDAsbj1uK01hdGguaW11bChtLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwobSxudCl8MCkrTWF0aC5pbXVsKHkscnQpfDAsYT1hK01hdGguaW11bCh5LG50KXwwLG49bitNYXRoLmltdWwoZCxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKGQsb3QpfDApK01hdGguaW11bChnLGF0KXwwLGE9YStNYXRoLmltdWwoZyxvdCl8MDt2YXIga3Q9KGMrKG49bitNYXRoLmltdWwoaCxsdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGgsY3QpfDApK01hdGguaW11bChmLGx0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGYsY3QpfDApKyhpPj4+MTMpfDApKyhrdD4+PjI2KXwwLGt0Jj02NzEwODg2MyxuPU1hdGguaW11bChQLFYpLGk9KGk9TWF0aC5pbXVsKFAsVSkpK01hdGguaW11bChSLFYpfDAsYT1NYXRoLmltdWwoUixVKSxuPW4rTWF0aC5pbXVsKE8sSCl8MCxpPShpPWkrTWF0aC5pbXVsKE8sRyl8MCkrTWF0aC5pbXVsKEksSCl8MCxhPWErTWF0aC5pbXVsKEksRyl8MCxuPW4rTWF0aC5pbXVsKEMsVyl8MCxpPShpPWkrTWF0aC5pbXVsKEMsWCl8MCkrTWF0aC5pbXVsKEwsVyl8MCxhPWErTWF0aC5pbXVsKEwsWCl8MCxuPW4rTWF0aC5pbXVsKE0sJCl8MCxpPShpPWkrTWF0aC5pbXVsKE0sSil8MCkrTWF0aC5pbXVsKFMsJCl8MCxhPWErTWF0aC5pbXVsKFMsSil8MCxuPW4rTWF0aC5pbXVsKGssUSl8MCxpPShpPWkrTWF0aC5pbXVsKGssdHQpfDApK01hdGguaW11bChBLFEpfDAsYT1hK01hdGguaW11bChBLHR0KXwwLG49bitNYXRoLmltdWwoYixydCl8MCxpPShpPWkrTWF0aC5pbXVsKGIsbnQpfDApK01hdGguaW11bChfLHJ0KXwwLGE9YStNYXRoLmltdWwoXyxudCl8MCxuPW4rTWF0aC5pbXVsKG0sYXQpfDAsaT0oaT1pK01hdGguaW11bChtLG90KXwwKStNYXRoLmltdWwoeSxhdCl8MCxhPWErTWF0aC5pbXVsKHksb3QpfDAsbj1uK01hdGguaW11bChkLGx0KXwwLGk9KGk9aStNYXRoLmltdWwoZCxjdCl8MCkrTWF0aC5pbXVsKGcsbHQpfDAsYT1hK01hdGguaW11bChnLGN0KXwwO3ZhciBBdD0oYysobj1uK01hdGguaW11bChoLGh0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxmdCl8MCkrTWF0aC5pbXVsKGYsaHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZixmdCl8MCkrKGk+Pj4xMyl8MCkrKEF0Pj4+MjYpfDAsQXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsViksaT0oaT1NYXRoLmltdWwoQixVKSkrTWF0aC5pbXVsKE4sVil8MCxhPU1hdGguaW11bChOLFUpLG49bitNYXRoLmltdWwoUCxIKXwwLGk9KGk9aStNYXRoLmltdWwoUCxHKXwwKStNYXRoLmltdWwoUixIKXwwLGE9YStNYXRoLmltdWwoUixHKXwwLG49bitNYXRoLmltdWwoTyxXKXwwLGk9KGk9aStNYXRoLmltdWwoTyxYKXwwKStNYXRoLmltdWwoSSxXKXwwLGE9YStNYXRoLmltdWwoSSxYKXwwLG49bitNYXRoLmltdWwoQywkKXwwLGk9KGk9aStNYXRoLmltdWwoQyxKKXwwKStNYXRoLmltdWwoTCwkKXwwLGE9YStNYXRoLmltdWwoTCxKKXwwLG49bitNYXRoLmltdWwoTSxRKXwwLGk9KGk9aStNYXRoLmltdWwoTSx0dCl8MCkrTWF0aC5pbXVsKFMsUSl8MCxhPWErTWF0aC5pbXVsKFMsdHQpfDAsbj1uK01hdGguaW11bChrLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoayxudCl8MCkrTWF0aC5pbXVsKEEscnQpfDAsYT1hK01hdGguaW11bChBLG50KXwwLG49bitNYXRoLmltdWwoYixhdCl8MCxpPShpPWkrTWF0aC5pbXVsKGIsb3QpfDApK01hdGguaW11bChfLGF0KXwwLGE9YStNYXRoLmltdWwoXyxvdCl8MCxuPW4rTWF0aC5pbXVsKG0sbHQpfDAsaT0oaT1pK01hdGguaW11bChtLGN0KXwwKStNYXRoLmltdWwoeSxsdCl8MCxhPWErTWF0aC5pbXVsKHksY3QpfDAsbj1uK01hdGguaW11bChkLGh0KXwwLGk9KGk9aStNYXRoLmltdWwoZCxmdCl8MCkrTWF0aC5pbXVsKGcsaHQpfDAsYT1hK01hdGguaW11bChnLGZ0KXwwO3ZhciBUdD0oYysobj1uK01hdGguaW11bChoLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxndCl8MCkrTWF0aC5pbXVsKGYsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZixndCl8MCkrKGk+Pj4xMyl8MCkrKFR0Pj4+MjYpfDAsVHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsSCksaT0oaT1NYXRoLmltdWwoQixHKSkrTWF0aC5pbXVsKE4sSCl8MCxhPU1hdGguaW11bChOLEcpLG49bitNYXRoLmltdWwoUCxXKXwwLGk9KGk9aStNYXRoLmltdWwoUCxYKXwwKStNYXRoLmltdWwoUixXKXwwLGE9YStNYXRoLmltdWwoUixYKXwwLG49bitNYXRoLmltdWwoTywkKXwwLGk9KGk9aStNYXRoLmltdWwoTyxKKXwwKStNYXRoLmltdWwoSSwkKXwwLGE9YStNYXRoLmltdWwoSSxKKXwwLG49bitNYXRoLmltdWwoQyxRKXwwLGk9KGk9aStNYXRoLmltdWwoQyx0dCl8MCkrTWF0aC5pbXVsKEwsUSl8MCxhPWErTWF0aC5pbXVsKEwsdHQpfDAsbj1uK01hdGguaW11bChNLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoTSxudCl8MCkrTWF0aC5pbXVsKFMscnQpfDAsYT1hK01hdGguaW11bChTLG50KXwwLG49bitNYXRoLmltdWwoayxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKGssb3QpfDApK01hdGguaW11bChBLGF0KXwwLGE9YStNYXRoLmltdWwoQSxvdCl8MCxuPW4rTWF0aC5pbXVsKGIsbHQpfDAsaT0oaT1pK01hdGguaW11bChiLGN0KXwwKStNYXRoLmltdWwoXyxsdCl8MCxhPWErTWF0aC5pbXVsKF8sY3QpfDAsbj1uK01hdGguaW11bChtLGh0KXwwLGk9KGk9aStNYXRoLmltdWwobSxmdCl8MCkrTWF0aC5pbXVsKHksaHQpfDAsYT1hK01hdGguaW11bCh5LGZ0KXwwO3ZhciBNdD0oYysobj1uK01hdGguaW11bChkLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoZCxndCl8MCkrTWF0aC5pbXVsKGcsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZyxndCl8MCkrKGk+Pj4xMyl8MCkrKE10Pj4+MjYpfDAsTXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsVyksaT0oaT1NYXRoLmltdWwoQixYKSkrTWF0aC5pbXVsKE4sVyl8MCxhPU1hdGguaW11bChOLFgpLG49bitNYXRoLmltdWwoUCwkKXwwLGk9KGk9aStNYXRoLmltdWwoUCxKKXwwKStNYXRoLmltdWwoUiwkKXwwLGE9YStNYXRoLmltdWwoUixKKXwwLG49bitNYXRoLmltdWwoTyxRKXwwLGk9KGk9aStNYXRoLmltdWwoTyx0dCl8MCkrTWF0aC5pbXVsKEksUSl8MCxhPWErTWF0aC5pbXVsKEksdHQpfDAsbj1uK01hdGguaW11bChDLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoQyxudCl8MCkrTWF0aC5pbXVsKEwscnQpfDAsYT1hK01hdGguaW11bChMLG50KXwwLG49bitNYXRoLmltdWwoTSxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKE0sb3QpfDApK01hdGguaW11bChTLGF0KXwwLGE9YStNYXRoLmltdWwoUyxvdCl8MCxuPW4rTWF0aC5pbXVsKGssbHQpfDAsaT0oaT1pK01hdGguaW11bChrLGN0KXwwKStNYXRoLmltdWwoQSxsdCl8MCxhPWErTWF0aC5pbXVsKEEsY3QpfDAsbj1uK01hdGguaW11bChiLGh0KXwwLGk9KGk9aStNYXRoLmltdWwoYixmdCl8MCkrTWF0aC5pbXVsKF8saHQpfDAsYT1hK01hdGguaW11bChfLGZ0KXwwO3ZhciBTdD0oYysobj1uK01hdGguaW11bChtLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwobSxndCl8MCkrTWF0aC5pbXVsKHksZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoeSxndCl8MCkrKGk+Pj4xMyl8MCkrKFN0Pj4+MjYpfDAsU3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsJCksaT0oaT1NYXRoLmltdWwoQixKKSkrTWF0aC5pbXVsKE4sJCl8MCxhPU1hdGguaW11bChOLEopLG49bitNYXRoLmltdWwoUCxRKXwwLGk9KGk9aStNYXRoLmltdWwoUCx0dCl8MCkrTWF0aC5pbXVsKFIsUSl8MCxhPWErTWF0aC5pbXVsKFIsdHQpfDAsbj1uK01hdGguaW11bChPLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoTyxudCl8MCkrTWF0aC5pbXVsKEkscnQpfDAsYT1hK01hdGguaW11bChJLG50KXwwLG49bitNYXRoLmltdWwoQyxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKEMsb3QpfDApK01hdGguaW11bChMLGF0KXwwLGE9YStNYXRoLmltdWwoTCxvdCl8MCxuPW4rTWF0aC5pbXVsKE0sbHQpfDAsaT0oaT1pK01hdGguaW11bChNLGN0KXwwKStNYXRoLmltdWwoUyxsdCl8MCxhPWErTWF0aC5pbXVsKFMsY3QpfDAsbj1uK01hdGguaW11bChrLGh0KXwwLGk9KGk9aStNYXRoLmltdWwoayxmdCl8MCkrTWF0aC5pbXVsKEEsaHQpfDAsYT1hK01hdGguaW11bChBLGZ0KXwwO3ZhciBFdD0oYysobj1uK01hdGguaW11bChiLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoYixndCl8MCkrTWF0aC5pbXVsKF8sZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoXyxndCl8MCkrKGk+Pj4xMyl8MCkrKEV0Pj4+MjYpfDAsRXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsUSksaT0oaT1NYXRoLmltdWwoQix0dCkpK01hdGguaW11bChOLFEpfDAsYT1NYXRoLmltdWwoTix0dCksbj1uK01hdGguaW11bChQLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoUCxudCl8MCkrTWF0aC5pbXVsKFIscnQpfDAsYT1hK01hdGguaW11bChSLG50KXwwLG49bitNYXRoLmltdWwoTyxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKE8sb3QpfDApK01hdGguaW11bChJLGF0KXwwLGE9YStNYXRoLmltdWwoSSxvdCl8MCxuPW4rTWF0aC5pbXVsKEMsbHQpfDAsaT0oaT1pK01hdGguaW11bChDLGN0KXwwKStNYXRoLmltdWwoTCxsdCl8MCxhPWErTWF0aC5pbXVsKEwsY3QpfDAsbj1uK01hdGguaW11bChNLGh0KXwwLGk9KGk9aStNYXRoLmltdWwoTSxmdCl8MCkrTWF0aC5pbXVsKFMsaHQpfDAsYT1hK01hdGguaW11bChTLGZ0KXwwO3ZhciBDdD0oYysobj1uK01hdGguaW11bChrLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoayxndCl8MCkrTWF0aC5pbXVsKEEsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoQSxndCl8MCkrKGk+Pj4xMyl8MCkrKEN0Pj4+MjYpfDAsQ3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIscnQpLGk9KGk9TWF0aC5pbXVsKEIsbnQpKStNYXRoLmltdWwoTixydCl8MCxhPU1hdGguaW11bChOLG50KSxuPW4rTWF0aC5pbXVsKFAsYXQpfDAsaT0oaT1pK01hdGguaW11bChQLG90KXwwKStNYXRoLmltdWwoUixhdCl8MCxhPWErTWF0aC5pbXVsKFIsb3QpfDAsbj1uK01hdGguaW11bChPLGx0KXwwLGk9KGk9aStNYXRoLmltdWwoTyxjdCl8MCkrTWF0aC5pbXVsKEksbHQpfDAsYT1hK01hdGguaW11bChJLGN0KXwwLG49bitNYXRoLmltdWwoQyxodCl8MCxpPShpPWkrTWF0aC5pbXVsKEMsZnQpfDApK01hdGguaW11bChMLGh0KXwwLGE9YStNYXRoLmltdWwoTCxmdCl8MDt2YXIgTHQ9KGMrKG49bitNYXRoLmltdWwoTSxkdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKE0sZ3QpfDApK01hdGguaW11bChTLGR0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKFMsZ3QpfDApKyhpPj4+MTMpfDApKyhMdD4+PjI2KXwwLEx0Jj02NzEwODg2MyxuPU1hdGguaW11bChCLGF0KSxpPShpPU1hdGguaW11bChCLG90KSkrTWF0aC5pbXVsKE4sYXQpfDAsYT1NYXRoLmltdWwoTixvdCksbj1uK01hdGguaW11bChQLGx0KXwwLGk9KGk9aStNYXRoLmltdWwoUCxjdCl8MCkrTWF0aC5pbXVsKFIsbHQpfDAsYT1hK01hdGguaW11bChSLGN0KXwwLG49bitNYXRoLmltdWwoTyxodCl8MCxpPShpPWkrTWF0aC5pbXVsKE8sZnQpfDApK01hdGguaW11bChJLGh0KXwwLGE9YStNYXRoLmltdWwoSSxmdCl8MDt2YXIgenQ9KGMrKG49bitNYXRoLmltdWwoQyxkdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKEMsZ3QpfDApK01hdGguaW11bChMLGR0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKEwsZ3QpfDApKyhpPj4+MTMpfDApKyh6dD4+PjI2KXwwLHp0Jj02NzEwODg2MyxuPU1hdGguaW11bChCLGx0KSxpPShpPU1hdGguaW11bChCLGN0KSkrTWF0aC5pbXVsKE4sbHQpfDAsYT1NYXRoLmltdWwoTixjdCksbj1uK01hdGguaW11bChQLGh0KXwwLGk9KGk9aStNYXRoLmltdWwoUCxmdCl8MCkrTWF0aC5pbXVsKFIsaHQpfDAsYT1hK01hdGguaW11bChSLGZ0KXwwO3ZhciBPdD0oYysobj1uK01hdGguaW11bChPLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoTyxndCl8MCkrTWF0aC5pbXVsKEksZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoSSxndCl8MCkrKGk+Pj4xMyl8MCkrKE90Pj4+MjYpfDAsT3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsaHQpLGk9KGk9TWF0aC5pbXVsKEIsZnQpKStNYXRoLmltdWwoTixodCl8MCxhPU1hdGguaW11bChOLGZ0KTt2YXIgSXQ9KGMrKG49bitNYXRoLmltdWwoUCxkdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKFAsZ3QpfDApK01hdGguaW11bChSLGR0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKFIsZ3QpfDApKyhpPj4+MTMpfDApKyhJdD4+PjI2KXwwLEl0Jj02NzEwODg2Mzt2YXIgRHQ9KGMrKG49TWF0aC5pbXVsKEIsZHQpKXwwKSsoKDgxOTEmKGk9KGk9TWF0aC5pbXVsKEIsZ3QpKStNYXRoLmltdWwoTixkdCl8MCkpPDwxMyl8MDtyZXR1cm4gYz0oKGE9TWF0aC5pbXVsKE4sZ3QpKSsoaT4+PjEzKXwwKSsoRHQ+Pj4yNil8MCxEdCY9NjcxMDg4NjMsbFswXT12dCxsWzFdPW10LGxbMl09eXQsbFszXT14dCxsWzRdPWJ0LGxbNV09X3QsbFs2XT13dCxsWzddPWt0LGxbOF09QXQsbFs5XT1UdCxsWzEwXT1NdCxsWzExXT1TdCxsWzEyXT1FdCxsWzEzXT1DdCxsWzE0XT1MdCxsWzE1XT16dCxsWzE2XT1PdCxsWzE3XT1JdCxsWzE4XT1EdCwwIT09YyYmKGxbMTldPWMsci5sZW5ndGgrKykscn07ZnVuY3Rpb24gZCh0LGUscil7cmV0dXJuKG5ldyBnKS5tdWxwKHQsZSxyKX1mdW5jdGlvbiBnKHQsZSl7dGhpcy54PXQsdGhpcy55PWV9TWF0aC5pbXVsfHwocD1mKSxhLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoK3QubGVuZ3RoO3JldHVybiAxMD09PXRoaXMubGVuZ3RoJiYxMD09PXQubGVuZ3RoP3AodGhpcyx0LGUpOnI8NjM/Zih0aGlzLHQsZSk6cjwxMDI0P2Z1bmN0aW9uKHQsZSxyKXtyLm5lZ2F0aXZlPWUubmVnYXRpdmVedC5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aDtmb3IodmFyIG49MCxpPTAsYT0wO2E8ci5sZW5ndGgtMTthKyspe3ZhciBvPWk7aT0wO2Zvcih2YXIgcz02NzEwODg2MyZuLGw9TWF0aC5taW4oYSxlLmxlbmd0aC0xKSxjPU1hdGgubWF4KDAsYS10Lmxlbmd0aCsxKTtjPD1sO2MrKyl7dmFyIHU9YS1jLGg9KDB8dC53b3Jkc1t1XSkqKDB8ZS53b3Jkc1tjXSksZj02NzEwODg2MyZoO3M9NjcxMDg4NjMmKGY9ZitzfDApLGkrPShvPShvPW8rKGgvNjcxMDg4NjR8MCl8MCkrKGY+Pj4yNil8MCk+Pj4yNixvJj02NzEwODg2M31yLndvcmRzW2FdPXMsbj1vLG89aX1yZXR1cm4gMCE9PW4/ci53b3Jkc1thXT1uOnIubGVuZ3RoLS0sci5zdHJpcCgpfSh0aGlzLHQsZSk6ZCh0aGlzLHQsZSl9LGcucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPWEucHJvdG90eXBlLl9jb3VudEJpdHModCktMSxuPTA7bjx0O24rKyllW25dPXRoaXMucmV2QmluKG4scix0KTtyZXR1cm4gZX0sZy5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHQsZSxyKXtpZigwPT09dHx8dD09PXItMSlyZXR1cm4gdDtmb3IodmFyIG49MCxpPTA7aTxlO2krKylufD0oMSZ0KTw8ZS1pLTEsdD4+PTE7cmV0dXJuIG59LGcucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbz0wO288YTtvKyspbltvXT1lW3Rbb11dLGlbb109clt0W29dXX0sZy5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLnBlcm11dGUoYSx0LGUscixuLGkpO2Zvcih2YXIgbz0xO288aTtvPDw9MSlmb3IodmFyIHM9bzw8MSxsPU1hdGguY29zKDIqTWF0aC5QSS9zKSxjPU1hdGguc2luKDIqTWF0aC5QSS9zKSx1PTA7dTxpO3UrPXMpZm9yKHZhciBoPWwsZj1jLHA9MDtwPG87cCsrKXt2YXIgZD1yW3UrcF0sZz1uW3UrcF0sdj1yW3UrcCtvXSxtPW5bdStwK29dLHk9aCp2LWYqbTttPWgqbStmKnYsdj15LHJbdStwXT1kK3Ysblt1K3BdPWcrbSxyW3UrcCtvXT1kLXYsblt1K3Arb109Zy1tLHAhPT1zJiYoeT1sKmgtYypmLGY9bCpmK2MqaCxoPXkpfX0sZy5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24odCxlKXt2YXIgcj0xfE1hdGgubWF4KGUsdCksbj0xJnIsaT0wO2ZvcihyPXIvMnwwO3I7cj4+Pj0xKWkrKztyZXR1cm4gMTw8aSsxK259LGcucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbih0LGUscil7aWYoIShyPD0xKSlmb3IodmFyIG49MDtuPHIvMjtuKyspe3ZhciBpPXRbbl07dFtuXT10W3Itbi0xXSx0W3Itbi0xXT1pLGk9ZVtuXSxlW25dPS1lW3Itbi0xXSxlW3Itbi0xXT0taX19LGcucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49MDtuPGUvMjtuKyspe3ZhciBpPTgxOTIqTWF0aC5yb3VuZCh0WzIqbisxXS9lKStNYXRoLnJvdW5kKHRbMipuXS9lKStyO3Rbbl09NjcxMDg4NjMmaSxyPWk8NjcxMDg4NjQ/MDppLzY3MTA4ODY0fDB9cmV0dXJuIHR9LGcucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24odCxlLHIsaSl7Zm9yKHZhciBhPTAsbz0wO288ZTtvKyspYSs9MHx0W29dLHJbMipvXT04MTkxJmEsYT4+Pj0xMyxyWzIqbysxXT04MTkxJmEsYT4+Pj0xMztmb3Iobz0yKmU7bzxpOysrbylyW29dPTA7bigwPT09YSksbigwPT0oLTgxOTImYSkpfSxnLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT0wO3JldHVybiBlfSxnLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0yKnRoaXMuZ3Vlc3NMZW4xM2IodC5sZW5ndGgsZS5sZW5ndGgpLGk9dGhpcy5tYWtlUkJUKG4pLGE9dGhpcy5zdHViKG4pLG89bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pLGw9bmV3IEFycmF5KG4pLGM9bmV3IEFycmF5KG4pLHU9bmV3IEFycmF5KG4pLGg9bmV3IEFycmF5KG4pLGY9ci53b3JkcztmLmxlbmd0aD1uLHRoaXMuY29udmVydDEzYih0LndvcmRzLHQubGVuZ3RoLG8sbiksdGhpcy5jb252ZXJ0MTNiKGUud29yZHMsZS5sZW5ndGgsYyxuKSx0aGlzLnRyYW5zZm9ybShvLGEscyxsLG4saSksdGhpcy50cmFuc2Zvcm0oYyxhLHUsaCxuLGkpO2Zvcih2YXIgcD0wO3A8bjtwKyspe3ZhciBkPXNbcF0qdVtwXS1sW3BdKmhbcF07bFtwXT1zW3BdKmhbcF0rbFtwXSp1W3BdLHNbcF09ZH1yZXR1cm4gdGhpcy5jb25qdWdhdGUocyxsLG4pLHRoaXMudHJhbnNmb3JtKHMsbCxmLGEsbixpKSx0aGlzLmNvbmp1Z2F0ZShmLGEsbiksdGhpcy5ub3JtYWxpemUxM2IoZixuKSxyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aCxyLnN0cmlwKCl9LGEucHJvdG90eXBlLm11bD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgYShudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLHRoaXMubXVsVG8odCxlKX0sYS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbih0KXt2YXIgZT1uZXcgYShudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLGQodGhpcyx0LGUpfSxhLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8odCx0aGlzKX0sYS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KTtmb3IodmFyIGU9MCxyPTA7cjx0aGlzLmxlbmd0aDtyKyspe3ZhciBpPSgwfHRoaXMud29yZHNbcl0pKnQsYT0oNjcxMDg4NjMmaSkrKDY3MTA4ODYzJmUpO2U+Pj0yNixlKz1pLzY3MTA4ODY0fDAsZSs9YT4+PjI2LHRoaXMud29yZHNbcl09NjcxMDg4NjMmYX1yZXR1cm4gMCE9PWUmJih0aGlzLndvcmRzW3JdPWUsdGhpcy5sZW5ndGgrKyksdGhpc30sYS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHQpfSxhLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LGEucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LGEucHJvdG90eXBlLnBvdz1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQuYml0TGVuZ3RoKCkpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ci8yNnwwLGk9ciUyNjtlW3JdPSh0LndvcmRzW25dJjE8PGkpPj4+aX1yZXR1cm4gZX0odCk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBuZXcgYSgxKTtmb3IodmFyIHI9dGhpcyxuPTA7bjxlLmxlbmd0aCYmMD09PWVbbl07bisrLHI9ci5zcXIoKSk7aWYoKytuPGUubGVuZ3RoKWZvcih2YXIgaT1yLnNxcigpO248ZS5sZW5ndGg7bisrLGk9aS5zcXIoKSkwIT09ZVtuXSYmKHI9ci5tdWwoaSkpO3JldHVybiByfSxhLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGUscj10JTI2LGk9KHQtcikvMjYsYT02NzEwODg2Mz4+PjI2LXI8PDI2LXI7aWYoMCE9PXIpe3ZhciBvPTA7Zm9yKGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHM9dGhpcy53b3Jkc1tlXSZhLGw9KDB8dGhpcy53b3Jkc1tlXSktczw8cjt0aGlzLndvcmRzW2VdPWx8byxvPXM+Pj4yNi1yfW8mJih0aGlzLndvcmRzW2VdPW8sdGhpcy5sZW5ndGgrKyl9aWYoMCE9PWkpe2ZvcihlPXRoaXMubGVuZ3RoLTE7ZT49MDtlLS0pdGhpcy53b3Jkc1tlK2ldPXRoaXMud29yZHNbZV07Zm9yKGU9MDtlPGk7ZSsrKXRoaXMud29yZHNbZV09MDt0aGlzLmxlbmd0aCs9aX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4odCl9LGEucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbih0LGUscil7dmFyIGk7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCksaT1lPyhlLWUlMjYpLzI2OjA7dmFyIGE9dCUyNixvPU1hdGgubWluKCh0LWEpLzI2LHRoaXMubGVuZ3RoKSxzPTY3MTA4ODYzXjY3MTA4ODYzPj4+YTw8YSxsPXI7aWYoaS09byxpPU1hdGgubWF4KDAsaSksbCl7Zm9yKHZhciBjPTA7YzxvO2MrKylsLndvcmRzW2NdPXRoaXMud29yZHNbY107bC5sZW5ndGg9b31pZigwPT09byk7ZWxzZSBpZih0aGlzLmxlbmd0aD5vKWZvcih0aGlzLmxlbmd0aC09byxjPTA7Yzx0aGlzLmxlbmd0aDtjKyspdGhpcy53b3Jkc1tjXT10aGlzLndvcmRzW2Mrb107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgdT0wO2ZvcihjPXRoaXMubGVuZ3RoLTE7Yz49MCYmKDAhPT11fHxjPj1pKTtjLS0pe3ZhciBoPTB8dGhpcy53b3Jkc1tjXTt0aGlzLndvcmRzW2NdPXU8PDI2LWF8aD4+PmEsdT1oJnN9cmV0dXJuIGwmJjAhPT11JiYobC53b3Jkc1tsLmxlbmd0aCsrXT11KSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbih0LGUscil7cmV0dXJuIG4oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHQsZSxyKX0sYS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHQpfSxhLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbih0KX0sYS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHQpfSxhLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybih0KX0sYS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2LGk9MTw8ZTtyZXR1cm4hKHRoaXMubGVuZ3RoPD1yKSYmISEodGhpcy53b3Jkc1tyXSZpKX0sYS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPXQlMjYscj0odC1lKS8yNjtpZihuKDA9PT10aGlzLm5lZ2F0aXZlLFwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzXCIpLHRoaXMubGVuZ3RoPD1yKXJldHVybiB0aGlzO2lmKDAhPT1lJiZyKyssdGhpcy5sZW5ndGg9TWF0aC5taW4ocix0aGlzLmxlbmd0aCksMCE9PWUpe3ZhciBpPTY3MTA4ODYzXjY3MTA4ODYzPj4+ZTw8ZTt0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj1pfXJldHVybiB0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHQpfSxhLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbih0KXtyZXR1cm4gbihcIm51bWJlclwiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KSx0PDA/dGhpcy5pc3VibigtdCk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTx0Pyh0aGlzLndvcmRzWzBdPXQtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3Vibih0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4odCl9LGEucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbih0KXt0aGlzLndvcmRzWzBdKz10O2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZV0+PTY3MTA4ODY0O2UrKyl0aGlzLndvcmRzW2VdLT02NzEwODg2NCxlPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2UrMV09MTp0aGlzLndvcmRzW2UrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsZSsxKSx0aGlzfSxhLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbih0KXtpZihuKFwibnVtYmVyXCI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpLHQ8MClyZXR1cm4gdGhpcy5pYWRkbigtdCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXQsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2VdPDA7ZSsrKXRoaXMud29yZHNbZV0rPTY3MTA4ODY0LHRoaXMud29yZHNbZSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4odCl9LGEucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3Vibih0KX0sYS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sYS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LGEucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbih0LGUscil7dmFyIGksYSxvPXQubGVuZ3RoK3I7dGhpcy5fZXhwYW5kKG8pO3ZhciBzPTA7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKyl7YT0oMHx0aGlzLndvcmRzW2krcl0pK3M7dmFyIGw9KDB8dC53b3Jkc1tpXSkqZTtzPSgoYS09NjcxMDg4NjMmbCk+PjI2KS0obC82NzEwODg2NHwwKSx0aGlzLndvcmRzW2krcl09NjcxMDg4NjMmYX1mb3IoO2k8dGhpcy5sZW5ndGgtcjtpKyspcz0oYT0oMHx0aGlzLndvcmRzW2krcl0pK3MpPj4yNix0aGlzLndvcmRzW2krcl09NjcxMDg4NjMmYTtpZigwPT09cylyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihuKC0xPT09cykscz0wLGk9MDtpPHRoaXMubGVuZ3RoO2krKylzPShhPS0oMHx0aGlzLndvcmRzW2ldKStzKT4+MjYsdGhpcy53b3Jkc1tpXT02NzEwODg2MyZhO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbih0LGUpe3ZhciByPSh0aGlzLmxlbmd0aCx0Lmxlbmd0aCksbj10aGlzLmNsb25lKCksaT10LG89MHxpLndvcmRzW2kubGVuZ3RoLTFdOzAhPT0ocj0yNi10aGlzLl9jb3VudEJpdHMobykpJiYoaT1pLnVzaGxuKHIpLG4uaXVzaGxuKHIpLG89MHxpLndvcmRzW2kubGVuZ3RoLTFdKTt2YXIgcyxsPW4ubGVuZ3RoLWkubGVuZ3RoO2lmKFwibW9kXCIhPT1lKXsocz1uZXcgYShudWxsKSkubGVuZ3RoPWwrMSxzLndvcmRzPW5ldyBBcnJheShzLmxlbmd0aCk7Zm9yKHZhciBjPTA7YzxzLmxlbmd0aDtjKyspcy53b3Jkc1tjXT0wfXZhciB1PW4uY2xvbmUoKS5faXNobG5zdWJtdWwoaSwxLGwpOzA9PT11Lm5lZ2F0aXZlJiYobj11LHMmJihzLndvcmRzW2xdPTEpKTtmb3IodmFyIGg9bC0xO2g+PTA7aC0tKXt2YXIgZj02NzEwODg2NCooMHxuLndvcmRzW2kubGVuZ3RoK2hdKSsoMHxuLndvcmRzW2kubGVuZ3RoK2gtMV0pO2ZvcihmPU1hdGgubWluKGYvb3wwLDY3MTA4ODYzKSxuLl9pc2hsbnN1Ym11bChpLGYsaCk7MCE9PW4ubmVnYXRpdmU7KWYtLSxuLm5lZ2F0aXZlPTAsbi5faXNobG5zdWJtdWwoaSwxLGgpLG4uaXNaZXJvKCl8fChuLm5lZ2F0aXZlXj0xKTtzJiYocy53b3Jkc1toXT1mKX1yZXR1cm4gcyYmcy5zdHJpcCgpLG4uc3RyaXAoKSxcImRpdlwiIT09ZSYmMCE9PXImJm4uaXVzaHJuKHIpLHtkaXY6c3x8bnVsbCxtb2Q6bn19LGEucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIG4oIXQuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgYSgwKSxtb2Q6bmV3IGEoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZT8ocz10aGlzLm5lZygpLmRpdm1vZCh0LGUpLFwibW9kXCIhPT1lJiYoaT1zLmRpdi5uZWcoKSksXCJkaXZcIiE9PWUmJihvPXMubW9kLm5lZygpLHImJjAhPT1vLm5lZ2F0aXZlJiZvLmlhZGQodCkpLHtkaXY6aSxtb2Q6b30pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZT8ocz10aGlzLmRpdm1vZCh0Lm5lZygpLGUpLFwibW9kXCIhPT1lJiYoaT1zLmRpdi5uZWcoKSkse2RpdjppLG1vZDpzLm1vZH0pOjAhPSh0aGlzLm5lZ2F0aXZlJnQubmVnYXRpdmUpPyhzPXRoaXMubmVnKCkuZGl2bW9kKHQubmVnKCksZSksXCJkaXZcIiE9PWUmJihvPXMubW9kLm5lZygpLHImJjAhPT1vLm5lZ2F0aXZlJiZvLmlzdWIodCkpLHtkaXY6cy5kaXYsbW9kOm99KTp0Lmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAodCk8MD97ZGl2Om5ldyBhKDApLG1vZDp0aGlzfToxPT09dC5sZW5ndGg/XCJkaXZcIj09PWU/e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm51bGx9OlwibW9kXCI9PT1lP3tkaXY6bnVsbCxtb2Q6bmV3IGEodGhpcy5tb2RuKHQud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm5ldyBhKHRoaXMubW9kbih0LndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYodCxlKTt2YXIgaSxvLHN9LGEucHJvdG90eXBlLmRpdj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCxcImRpdlwiLCExKS5kaXZ9LGEucHJvdG90eXBlLm1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCxcIm1vZFwiLCExKS5tb2R9LGEucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsXCJtb2RcIiwhMCkubW9kfSxhLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRpdm1vZCh0KTtpZihlLm1vZC5pc1plcm8oKSlyZXR1cm4gZS5kaXY7dmFyIHI9MCE9PWUuZGl2Lm5lZ2F0aXZlP2UubW9kLmlzdWIodCk6ZS5tb2Qsbj10LnVzaHJuKDEpLGk9dC5hbmRsbigxKSxhPXIuY21wKG4pO3JldHVybiBhPDB8fDE9PT1pJiYwPT09YT9lLmRpdjowIT09ZS5kaXYubmVnYXRpdmU/ZS5kaXYuaXN1Ym4oMSk6ZS5kaXYuaWFkZG4oMSl9LGEucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24odCl7bih0PD02NzEwODg2Myk7Zm9yKHZhciBlPSgxPDwyNikldCxyPTAsaT10aGlzLmxlbmd0aC0xO2k+PTA7aS0tKXI9KGUqcisoMHx0aGlzLndvcmRzW2ldKSkldDtyZXR1cm4gcn0sYS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24odCl7bih0PD02NzEwODg2Myk7Zm9yKHZhciBlPTAscj10aGlzLmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgaT0oMHx0aGlzLndvcmRzW3JdKSs2NzEwODg2NCplO3RoaXMud29yZHNbcl09aS90fDAsZT1pJXR9cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHQpfSxhLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUpLG4oIXQuaXNaZXJvKCkpO3ZhciBlPXRoaXMscj10LmNsb25lKCk7ZT0wIT09ZS5uZWdhdGl2ZT9lLnVtb2QodCk6ZS5jbG9uZSgpO2Zvcih2YXIgaT1uZXcgYSgxKSxvPW5ldyBhKDApLHM9bmV3IGEoMCksbD1uZXcgYSgxKSxjPTA7ZS5pc0V2ZW4oKSYmci5pc0V2ZW4oKTspZS5pdXNocm4oMSksci5pdXNocm4oMSksKytjO2Zvcih2YXIgdT1yLmNsb25lKCksaD1lLmNsb25lKCk7IWUuaXNaZXJvKCk7KXtmb3IodmFyIGY9MCxwPTE7MD09KGUud29yZHNbMF0mcCkmJmY8MjY7KytmLHA8PD0xKTtpZihmPjApZm9yKGUuaXVzaHJuKGYpO2YtLSA+MDspKGkuaXNPZGQoKXx8by5pc09kZCgpKSYmKGkuaWFkZCh1KSxvLmlzdWIoaCkpLGkuaXVzaHJuKDEpLG8uaXVzaHJuKDEpO2Zvcih2YXIgZD0wLGc9MTswPT0oci53b3Jkc1swXSZnKSYmZDwyNjsrK2QsZzw8PTEpO2lmKGQ+MClmb3Ioci5pdXNocm4oZCk7ZC0tID4wOykocy5pc09kZCgpfHxsLmlzT2RkKCkpJiYocy5pYWRkKHUpLGwuaXN1YihoKSkscy5pdXNocm4oMSksbC5pdXNocm4oMSk7ZS5jbXAocik+PTA/KGUuaXN1YihyKSxpLmlzdWIocyksby5pc3ViKGwpKTooci5pc3ViKGUpLHMuaXN1YihpKSxsLmlzdWIobykpfXJldHVybnthOnMsYjpsLGdjZDpyLml1c2hsbihjKX19LGEucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlKSxuKCF0LmlzWmVybygpKTt2YXIgZT10aGlzLHI9dC5jbG9uZSgpO2U9MCE9PWUubmVnYXRpdmU/ZS51bW9kKHQpOmUuY2xvbmUoKTtmb3IodmFyIGksbz1uZXcgYSgxKSxzPW5ldyBhKDApLGw9ci5jbG9uZSgpO2UuY21wbigxKT4wJiZyLmNtcG4oMSk+MDspe2Zvcih2YXIgYz0wLHU9MTswPT0oZS53b3Jkc1swXSZ1KSYmYzwyNjsrK2MsdTw8PTEpO2lmKGM+MClmb3IoZS5pdXNocm4oYyk7Yy0tID4wOylvLmlzT2RkKCkmJm8uaWFkZChsKSxvLml1c2hybigxKTtmb3IodmFyIGg9MCxmPTE7MD09KHIud29yZHNbMF0mZikmJmg8MjY7KytoLGY8PD0xKTtpZihoPjApZm9yKHIuaXVzaHJuKGgpO2gtLSA+MDspcy5pc09kZCgpJiZzLmlhZGQobCkscy5pdXNocm4oMSk7ZS5jbXAocik+PTA/KGUuaXN1YihyKSxvLmlzdWIocykpOihyLmlzdWIoZSkscy5pc3ViKG8pKX1yZXR1cm4oaT0wPT09ZS5jbXBuKDEpP286cykuY21wbigwKTwwJiZpLmlhZGQodCksaX0sYS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHQuYWJzKCk7aWYodC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgZT10aGlzLmNsb25lKCkscj10LmNsb25lKCk7ZS5uZWdhdGl2ZT0wLHIubmVnYXRpdmU9MDtmb3IodmFyIG49MDtlLmlzRXZlbigpJiZyLmlzRXZlbigpO24rKyllLml1c2hybigxKSxyLml1c2hybigxKTtmb3IoOzspe2Zvcig7ZS5pc0V2ZW4oKTspZS5pdXNocm4oMSk7Zm9yKDtyLmlzRXZlbigpOylyLml1c2hybigxKTt2YXIgaT1lLmNtcChyKTtpZihpPDApe3ZhciBhPWU7ZT1yLHI9YX1lbHNlIGlmKDA9PT1pfHwwPT09ci5jbXBuKDEpKWJyZWFrO2UuaXN1YihyKX1yZXR1cm4gci5pdXNobG4obil9LGEucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWdjZCh0KS5hLnVtb2QodCl9LGEucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBdKX0sYS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1swXSl9LGEucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLndvcmRzWzBdJnR9LGEucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQpO3ZhciBlPXQlMjYscj0odC1lKS8yNixpPTE8PGU7aWYodGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLHRoaXMud29yZHNbcl18PWksdGhpcztmb3IodmFyIGE9aSxvPXI7MCE9PWEmJm88dGhpcy5sZW5ndGg7bysrKXt2YXIgcz0wfHRoaXMud29yZHNbb107YT0ocys9YSk+Pj4yNixzJj02NzEwODg2Myx0aGlzLndvcmRzW29dPXN9cmV0dXJuIDAhPT1hJiYodGhpcy53b3Jkc1tvXT1hLHRoaXMubGVuZ3RoKyspLHRoaXN9LGEucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxhLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhcilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmcilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSllPTE7ZWxzZXtyJiYodD0tdCksbih0PD02NzEwODg2MyxcIk51bWJlciBpcyB0b28gYmlnXCIpO3ZhciBpPTB8dGhpcy53b3Jkc1swXTtlPWk9PT10PzA6aTx0Py0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWU6ZX0sYS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHQpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGU9dGhpcy51Y21wKHQpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1lOmV9LGEucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24odCl7aWYodGhpcy5sZW5ndGg+dC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8dC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBlPTAscj10aGlzLmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgbj0wfHRoaXMud29yZHNbcl0saT0wfHQud29yZHNbcl07aWYobiE9PWkpe248aT9lPS0xOm4+aSYmKGU9MSk7YnJlYWt9fXJldHVybiBlfSxhLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10aGlzLmNtcG4odCl9LGEucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dGhpcy5jbXAodCl9LGEucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KT49MH0sYS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KT49MH0sYS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHQpe3JldHVybi0xPT09dGhpcy5jbXBuKHQpfSxhLnByb3RvdHlwZS5sdD1mdW5jdGlvbih0KXtyZXR1cm4tMT09PXRoaXMuY21wKHQpfSxhLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcG4odCk8PTB9LGEucHJvdG90eXBlLmx0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk8PTB9LGEucHJvdG90eXBlLmVxbj1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuY21wbih0KX0sYS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmNtcCh0KX0sYS5yZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB3KHQpfSxhLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbih0KXtyZXR1cm4gbighdGhpcy5yZWQsXCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLG4oMD09PXRoaXMubmVnYXRpdmUsXCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlc1wiKSx0LmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQodCl9LGEucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHRcIiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LGEucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZWQ9dCx0aGlzfSxhLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbih0KXtyZXR1cm4gbighdGhpcy5yZWQsXCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLHRoaXMuX2ZvcmNlUmVkKHQpfSxhLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmFkZCh0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuaWFkZCh0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLnN1Yih0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuaXN1Yih0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLnNobCh0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQubXVsKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQuaW11bCh0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxhLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxhLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxhLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxhLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxhLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQmJiF0LnJlZCxcInJlZFBvdyhub3JtYWxOdW0pXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHQpfTt2YXIgdj17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIG0odCxlKXt0aGlzLm5hbWU9dCx0aGlzLnA9bmV3IGEoZSwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IGEoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHkoKXttLmNhbGwodGhpcyxcImsyNTZcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmXCIpfWZ1bmN0aW9uIHgoKXttLmNhbGwodGhpcyxcInAyMjRcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxXCIpfWZ1bmN0aW9uIGIoKXttLmNhbGwodGhpcyxcInAxOTJcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmXCIpfWZ1bmN0aW9uIF8oKXttLmNhbGwodGhpcyxcIjI1NTE5XCIsXCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkXCIpfWZ1bmN0aW9uIHcodCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpe3ZhciBlPWEuX3ByaW1lKHQpO3RoaXMubT1lLnAsdGhpcy5wcmltZT1lfWVsc2Ugbih0Lmd0bigxKSxcIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMVwiKSx0aGlzLm09dCx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gayh0KXt3LmNhbGwodGhpcyx0KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBhKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfW0ucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgYShudWxsKTtyZXR1cm4gdC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHR9LG0ucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24odCl7dmFyIGUscj10O2Rve3RoaXMuc3BsaXQocix0aGlzLnRtcCksZT0ocj0ocj10aGlzLmltdWxLKHIpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoZT50aGlzLm4pO3ZhciBuPWU8dGhpcy5uPy0xOnIudWNtcCh0aGlzLnApO3JldHVybiAwPT09bj8oci53b3Jkc1swXT0wLHIubGVuZ3RoPTEpOm4+MD9yLmlzdWIodGhpcy5wKTpyLnN0cmlwKCkscn0sbS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXt0Lml1c2hybih0aGlzLm4sMCxlKX0sbS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaW11bCh0aGlzLmspfSxpKHksbSkseS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9TWF0aC5taW4odC5sZW5ndGgsOSksbj0wO248cjtuKyspZS53b3Jkc1tuXT10LndvcmRzW25dO2lmKGUubGVuZ3RoPXIsdC5sZW5ndGg8PTkpcmV0dXJuIHQud29yZHNbMF09MCx2b2lkKHQubGVuZ3RoPTEpO3ZhciBpPXQud29yZHNbOV07Zm9yKGUud29yZHNbZS5sZW5ndGgrK109NDE5NDMwMyZpLG49MTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBhPTB8dC53b3Jkc1tuXTt0LndvcmRzW24tMTBdPSg0MTk0MzAzJmEpPDw0fGk+Pj4yMixpPWF9aT4+Pj0yMix0LndvcmRzW24tMTBdPWksMD09PWkmJnQubGVuZ3RoPjEwP3QubGVuZ3RoLT0xMDp0Lmxlbmd0aC09OX0seS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7dC53b3Jkc1t0Lmxlbmd0aF09MCx0LndvcmRzW3QubGVuZ3RoKzFdPTAsdC5sZW5ndGgrPTI7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj0wfHQud29yZHNbcl07ZSs9OTc3Km4sdC53b3Jkc1tyXT02NzEwODg2MyZlLGU9NjQqbisoZS82NzEwODg2NHwwKX1yZXR1cm4gMD09PXQud29yZHNbdC5sZW5ndGgtMV0mJih0Lmxlbmd0aC0tLDA9PT10LndvcmRzW3QubGVuZ3RoLTFdJiZ0Lmxlbmd0aC0tKSx0fSxpKHgsbSksaShiLG0pLGkoXyxtKSxfLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPTE5KigwfHQud29yZHNbcl0pK2UsaT02NzEwODg2MyZuO24+Pj49MjYsdC53b3Jkc1tyXT1pLGU9bn1yZXR1cm4gMCE9PWUmJih0LndvcmRzW3QubGVuZ3RoKytdPWUpLHR9LGEuX3ByaW1lPWZ1bmN0aW9uKHQpe2lmKHZbdF0pcmV0dXJuIHZbdF07dmFyIGU7aWYoXCJrMjU2XCI9PT10KWU9bmV3IHk7ZWxzZSBpZihcInAyMjRcIj09PXQpZT1uZXcgeDtlbHNlIGlmKFwicDE5MlwiPT09dCllPW5ldyBiO2Vsc2V7aWYoXCJwMjU1MTlcIiE9PXQpdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBwcmltZSBcIit0KTtlPW5ldyBffXJldHVybiB2W3RdPWUsZX0sdy5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSxcInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzXCIpLG4odC5yZWQsXCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpfSx3LnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbih0LGUpe24oMD09KHQubmVnYXRpdmV8ZS5uZWdhdGl2ZSksXCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlc1wiKSxuKHQucmVkJiZ0LnJlZD09PWUucmVkLFwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKX0sdy5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UodCkuX2ZvcmNlUmVkKHRoaXMpOnQudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHQpe3JldHVybiB0LmlzWmVybygpP3QuY2xvbmUoKTp0aGlzLm0uc3ViKHQpLl9mb3JjZVJlZCh0aGlzKX0sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuYWRkKGUpO3JldHVybiByLmNtcCh0aGlzLm0pPj0wJiZyLmlzdWIodGhpcy5tKSxyLl9mb3JjZVJlZCh0aGlzKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmlhZGQoZSk7cmV0dXJuIHIuY21wKHRoaXMubSk+PTAmJnIuaXN1Yih0aGlzLm0pLHJ9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LnN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHIuX2ZvcmNlUmVkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuaXN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHJ9LHcucHJvdG90eXBlLnNobD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkxKHQpLHRoaXMuaW1vZCh0LnVzaGxuKGUpKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHQsZSksdGhpcy5pbW9kKHQuaW11bChlKSl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHQsZSksdGhpcy5pbW9kKHQubXVsKGUpKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbXVsKHQsdC5jbG9uZSgpKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm11bCh0LHQpfSx3LnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHQpe2lmKHQuaXNaZXJvKCkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgZT10aGlzLm0uYW5kbG4oMyk7aWYobihlJTI9PTEpLDM9PT1lKXt2YXIgcj10aGlzLm0uYWRkKG5ldyBhKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHQscil9Zm9yKHZhciBpPXRoaXMubS5zdWJuKDEpLG89MDshaS5pc1plcm8oKSYmMD09PWkuYW5kbG4oMSk7KW8rKyxpLml1c2hybigxKTtuKCFpLmlzWmVybygpKTt2YXIgcz1uZXcgYSgxKS50b1JlZCh0aGlzKSxsPXMucmVkTmVnKCksYz10aGlzLm0uc3VibigxKS5pdXNocm4oMSksdT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKHU9bmV3IGEoMip1KnUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyh1LGMpLmNtcChsKTspdS5yZWRJQWRkKGwpO2Zvcih2YXIgaD10aGlzLnBvdyh1LGkpLGY9dGhpcy5wb3codCxpLmFkZG4oMSkuaXVzaHJuKDEpKSxwPXRoaXMucG93KHQsaSksZD1vOzAhPT1wLmNtcChzKTspe2Zvcih2YXIgZz1wLHY9MDswIT09Zy5jbXAocyk7disrKWc9Zy5yZWRTcXIoKTtuKHY8ZCk7dmFyIG09dGhpcy5wb3coaCxuZXcgYSgxKS5pdXNobG4oZC12LTEpKTtmPWYucmVkTXVsKG0pLGg9bS5yZWRTcXIoKSxwPXAucmVkTXVsKGgpLGQ9dn1yZXR1cm4gZn0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXt2YXIgZT10Ll9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09ZS5uZWdhdGl2ZT8oZS5uZWdhdGl2ZT0wLHRoaXMuaW1vZChlKS5yZWROZWcoKSk6dGhpcy5pbW9kKGUpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odCxlKXtpZihlLmlzWmVybygpKXJldHVybiBuZXcgYSgxKS50b1JlZCh0aGlzKTtpZigwPT09ZS5jbXBuKDEpKXJldHVybiB0LmNsb25lKCk7dmFyIHI9bmV3IEFycmF5KDE2KTtyWzBdPW5ldyBhKDEpLnRvUmVkKHRoaXMpLHJbMV09dDtmb3IodmFyIG49MjtuPHIubGVuZ3RoO24rKylyW25dPXRoaXMubXVsKHJbbi0xXSx0KTt2YXIgaT1yWzBdLG89MCxzPTAsbD1lLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bCYmKGw9MjYpLG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7Zm9yKHZhciBjPWUud29yZHNbbl0sdT1sLTE7dT49MDt1LS0pe3ZhciBoPWM+PnUmMTtpIT09clswXSYmKGk9dGhpcy5zcXIoaSkpLDAhPT1ofHwwIT09bz8obzw8PTEsb3w9aCwoND09PSsrc3x8MD09PW4mJjA9PT11KSYmKGk9dGhpcy5tdWwoaSxyW29dKSxzPTAsbz0wKSk6cz0wfWw9MjZ9cmV0dXJuIGl9LHcucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih0KXt2YXIgZT10LnVtb2QodGhpcy5tKTtyZXR1cm4gZT09PXQ/ZS5jbG9uZSgpOmV9LHcucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xvbmUoKTtyZXR1cm4gZS5yZWQ9bnVsbCxlfSxhLm1vbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBrKHQpfSxpKGssdyksay5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltb2QodC51c2hsbih0aGlzLnNoaWZ0KSl9LGsucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW1vZCh0Lm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gZS5yZWQ9bnVsbCxlfSxrLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQsZSl7aWYodC5pc1plcm8oKXx8ZS5pc1plcm8oKSlyZXR1cm4gdC53b3Jkc1swXT0wLHQubGVuZ3RoPTEsdDt2YXIgcj10LmltdWwoZSksbj1yLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxpPXIuaXN1YihuKS5pdXNocm4odGhpcy5zaGlmdCksYT1pO3JldHVybiBpLmNtcCh0aGlzLm0pPj0wP2E9aS5pc3ViKHRoaXMubSk6aS5jbXBuKDApPDAmJihhPWkuaWFkZCh0aGlzLm0pKSxhLl9mb3JjZVJlZCh0aGlzKX0say5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQsZSl7aWYodC5pc1plcm8oKXx8ZS5pc1plcm8oKSlyZXR1cm4gbmV3IGEoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciByPXQubXVsKGUpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksaT1yLmlzdWIobikuaXVzaHJuKHRoaXMuc2hpZnQpLG89aTtyZXR1cm4gaS5jbXAodGhpcy5tKT49MD9vPWkuaXN1Yih0aGlzLm0pOmkuY21wbigwKTwwJiYobz1pLmlhZGQodGhpcy5tKSksby5fZm9yY2VSZWQodGhpcyl9LGsucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW1vZCh0Ll9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIGV8fGUsdGhpcyl9LHtidWZmZXI6OTR9XSw4NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT10Lmxlbmd0aCxhPTA7Zm9yKGU9MDtlPGk7KytlKWErPXRbZV0ubGVuZ3RoO3ZhciBvPW5ldyBBcnJheShhKSxzPTA7Zm9yKGU9MDtlPGk7KytlKXt2YXIgbD10W2VdLGM9bC5sZW5ndGg7Zm9yKHI9MDtyPGM7KytyKXt2YXIgdT1vW3MrK109bmV3IEFycmF5KGMtMSksaD0wO2ZvcihuPTA7bjxjOysrbiluIT09ciYmKHVbaCsrXT1sW25dKTtpZigxJnIpe3ZhciBmPXVbMV07dVsxXT11WzBdLHVbMF09Zn19fXJldHVybiBvfX0se31dLDg3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAxOnJldHVybiBuPVtdLGMoaT10LGksdSwhMCksbjtjYXNlIDI6cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9jKHQsdCxlLCEwKTpmdW5jdGlvbih0LGUpe3JldHVybiBuPVtdLGModCxlLHUsITEpLG59KHQsZSk7Y2FzZSAzOnJldHVybiBjKHQsZSxyLCExKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImJveC1pbnRlcnNlY3Q6IEludmFsaWQgYXJndW1lbnRzXCIpfXZhciBpfTt2YXIgbixpPXQoXCJ0eXBlZGFycmF5LXBvb2xcIiksYT10KFwiLi9saWIvc3dlZXBcIiksbz10KFwiLi9saWIvaW50ZXJzZWN0XCIpO2Z1bmN0aW9uIHModCxlKXtmb3IodmFyIHI9MDtyPHQ7KytyKWlmKCEoZVtyXTw9ZVtyK3RdKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBsKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9MCxvPTAsbD10Lmxlbmd0aDtvPGw7KytvKXt2YXIgYz10W29dO2lmKCFzKGUsYykpe2Zvcih2YXIgdT0wO3U8MiplOysrdSlyW2krK109Y1t1XTtuW2ErK109b319cmV0dXJuIGF9ZnVuY3Rpb24gYyh0LGUscixuKXt2YXIgcz10Lmxlbmd0aCxjPWUubGVuZ3RoO2lmKCEoczw9MHx8Yzw9MCkpe3ZhciB1PXRbMF0ubGVuZ3RoPj4+MTtpZighKHU8PTApKXt2YXIgaCxmPWkubWFsbG9jRG91YmxlKDIqdSpzKSxwPWkubWFsbG9jSW50MzIocyk7aWYoKHM9bCh0LHUsZixwKSk+MCl7aWYoMT09PXUmJm4pYS5pbml0KHMpLGg9YS5zd2VlcENvbXBsZXRlKHUsciwwLHMsZixwLDAscyxmLHApO2Vsc2V7dmFyIGQ9aS5tYWxsb2NEb3VibGUoMip1KmMpLGc9aS5tYWxsb2NJbnQzMihjKTsoYz1sKGUsdSxkLGcpKT4wJiYoYS5pbml0KHMrYyksaD0xPT09dT9hLnN3ZWVwQmlwYXJ0aXRlKHUsciwwLHMsZixwLDAsYyxkLGcpOm8odSxyLG4scyxmLHAsYyxkLGcpLGkuZnJlZShkKSxpLmZyZWUoZykpfWkuZnJlZShmKSxpLmZyZWUocCl9cmV0dXJuIGh9fX1mdW5jdGlvbiB1KHQsZSl7bi5wdXNoKFt0LGVdKX19LHtcIi4vbGliL2ludGVyc2VjdFwiOjg5LFwiLi9saWIvc3dlZXBcIjo5MyxcInR5cGVkYXJyYXktcG9vbFwiOjUzMH1dLDg4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49XCJkXCIsaT1cImF4XCIsYT1cInZ2XCIsbz1cImZwXCIscz1cImVzXCIsbD1cInJzXCIsYz1cInJlXCIsdT1cInJiXCIsaD1cInJpXCIsZj1cInJwXCIscD1cImJzXCIsZD1cImJlXCIsZz1cImJiXCIsdj1cImJpXCIsbT1cImJwXCIseT1cInJ2XCIseD1cIlFcIixiPVtuLGksYSxsLGMsdSxoLHAsZCxnLHZdO2Z1bmN0aW9uIF8odCl7dmFyIGU9XCJicnV0ZUZvcmNlXCIrKHQ/XCJGdWxsXCI6XCJQYXJ0aWFsXCIpLHI9W10sXz1iLnNsaWNlKCk7dHx8Xy5zcGxpY2UoMywwLG8pO3ZhciB3PVtcImZ1bmN0aW9uIFwiK2UrXCIoXCIrXy5qb2luKCkrXCIpe1wiXTtmdW5jdGlvbiBrKGUsbyl7dmFyIF89ZnVuY3Rpb24odCxlLHIpe3ZhciBvPVwiYnJ1dGVGb3JjZVwiKyh0P1wiUmVkXCI6XCJCbHVlXCIpKyhlP1wiRmxpcFwiOlwiXCIpKyhyP1wiRnVsbFwiOlwiXCIpLF89W1wiZnVuY3Rpb24gXCIsbyxcIihcIixiLmpvaW4oKSxcIil7XCIsXCJ2YXIgXCIscyxcIj0yKlwiLG4sXCI7XCJdLHc9XCJmb3IodmFyIGk9XCIrbCtcIixcIitmK1wiPVwiK3MrXCIqXCIrbCtcIjtpPFwiK2MrXCI7KytpLFwiK2YrXCIrPVwiK3MrXCIpe3ZhciB4MD1cIit1K1wiW1wiK2krXCIrXCIrZitcIl0seDE9XCIrdStcIltcIitpK1wiK1wiK2YrXCIrXCIrbitcIl0seGk9XCIraCtcIltpXTtcIixrPVwiZm9yKHZhciBqPVwiK3ArXCIsXCIrbStcIj1cIitzK1wiKlwiK3ArXCI7ajxcIitkK1wiOysraixcIittK1wiKz1cIitzK1wiKXt2YXIgeTA9XCIrZytcIltcIitpK1wiK1wiK20rXCJdLFwiKyhyP1wieTE9XCIrZytcIltcIitpK1wiK1wiK20rXCIrXCIrbitcIl0sXCI6XCJcIikrXCJ5aT1cIit2K1wiW2pdO1wiO3JldHVybiB0P18ucHVzaCh3LHgsXCI6XCIsayk6Xy5wdXNoKGsseCxcIjpcIix3KSxyP18ucHVzaChcImlmKHkxPHgwfHx4MTx5MCljb250aW51ZTtcIik6ZT9fLnB1c2goXCJpZih5MDw9eDB8fHgxPHkwKWNvbnRpbnVlO1wiKTpfLnB1c2goXCJpZih5MDx4MHx8eDE8eTApY29udGludWU7XCIpLF8ucHVzaChcImZvcih2YXIgaz1cIitpK1wiKzE7azxcIituK1wiOysrayl7dmFyIHIwPVwiK3UrXCJbaytcIitmK1wiXSxyMT1cIit1K1wiW2srXCIrbitcIitcIitmK1wiXSxiMD1cIitnK1wiW2srXCIrbStcIl0sYjE9XCIrZytcIltrK1wiK24rXCIrXCIrbStcIl07aWYocjE8YjB8fGIxPHIwKWNvbnRpbnVlIFwiK3grXCI7fXZhciBcIit5K1wiPVwiK2ErXCIoXCIpLGU/Xy5wdXNoKFwieWkseGlcIik6Xy5wdXNoKFwieGkseWlcIiksXy5wdXNoKFwiKTtpZihcIit5K1wiIT09dm9pZCAwKXJldHVybiBcIit5K1wiO319fVwiKSx7bmFtZTpvLGNvZGU6Xy5qb2luKFwiXCIpfX0oZSxvLHQpO3IucHVzaChfLmNvZGUpLHcucHVzaChcInJldHVybiBcIitfLm5hbWUrXCIoXCIrYi5qb2luKCkrXCIpO1wiKX13LnB1c2goXCJpZihcIitjK1wiLVwiK2wrXCI+XCIrZCtcIi1cIitwK1wiKXtcIiksdD8oayghMCwhMSksdy5wdXNoKFwifWVsc2V7XCIpLGsoITEsITEpKToody5wdXNoKFwiaWYoXCIrbytcIil7XCIpLGsoITAsITApLHcucHVzaChcIn1lbHNle1wiKSxrKCEwLCExKSx3LnB1c2goXCJ9fWVsc2V7aWYoXCIrbytcIil7XCIpLGsoITEsITApLHcucHVzaChcIn1lbHNle1wiKSxrKCExLCExKSx3LnB1c2goXCJ9XCIpKSx3LnB1c2goXCJ9fXJldHVybiBcIitlKTt2YXIgQT1yLmpvaW4oXCJcIikrdy5qb2luKFwiXCIpO3JldHVybiBuZXcgRnVuY3Rpb24oQSkoKX1yLnBhcnRpYWw9XyghMSksci5mdWxsPV8oITApfSx7fV0sODk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSx1LFMsRSxDLEwpeyFmdW5jdGlvbih0LGUpe3ZhciByPTgqaS5sb2cyKGUrMSkqKHQrMSl8MCxhPWkubmV4dFBvdzIoYipyKTt3Lmxlbmd0aDxhJiYobi5mcmVlKHcpLHc9bi5tYWxsb2NJbnQzMihhKSk7dmFyIG89aS5uZXh0UG93MihfKnIpO2s8byYmKG4uZnJlZShrKSxrPW4ubWFsbG9jRG91YmxlKG8pKX0odCxhK0UpO3ZhciB6LE89MCxJPTIqdDtBKE8rKywwLDAsYSwwLEUscj8xNjowLC0xLzAsMS8wKSxyfHxBKE8rKywwLDAsRSwwLGEsMSwtMS8wLDEvMCk7Zm9yKDtPPjA7KXt2YXIgRD0oTy09MSkqYixQPXdbRF0sUj13W0QrMV0sRj13W0QrMl0sQj13W0QrM10sTj13W0QrNF0saj13W0QrNV0sVj1PKl8sVT1rW1ZdLHE9a1tWKzFdLEg9MSZqLEc9ISEoMTYmaiksWT11LFc9UyxYPUMsWj1MO2lmKEgmJihZPUMsVz1MLFg9dSxaPVMpLCEoMiZqJiYoRj12KHQsUCxSLEYsWSxXLHEpLFI+PUYpfHw0JmomJihSPW0odCxQLFIsRixZLFcsVSkpPj1GKSl7dmFyICQ9Ri1SLEo9Ti1CO2lmKEcpe2lmKHQqJCooJCtKKTxwKXtpZih2b2lkIDAhPT0oej1sLnNjYW5Db21wbGV0ZSh0LFAsZSxSLEYsWSxXLEIsTixYLFopKSlyZXR1cm4gejtjb250aW51ZX19ZWxzZXtpZih0Kk1hdGgubWluKCQsSik8aCl7aWYodm9pZCAwIT09KHo9byh0LFAsZSxILFIsRixZLFcsQixOLFgsWikpKXJldHVybiB6O2NvbnRpbnVlfWlmKHQqJCpKPGYpe2lmKHZvaWQgMCE9PSh6PWwuc2NhbkJpcGFydGl0ZSh0LFAsZSxILFIsRixZLFcsQixOLFgsWikpKXJldHVybiB6O2NvbnRpbnVlfX12YXIgSz1kKHQsUCxSLEYsWSxXLFUscSk7aWYoUjxLKWlmKHQqKEstUik8aCl7aWYodm9pZCAwIT09KHo9cyh0LFArMSxlLFIsSyxZLFcsQixOLFgsWikpKXJldHVybiB6fWVsc2UgaWYoUD09PXQtMil7aWYodm9pZCAwIT09KHo9SD9sLnN3ZWVwQmlwYXJ0aXRlKHQsZSxCLE4sWCxaLFIsSyxZLFcpOmwuc3dlZXBCaXBhcnRpdGUodCxlLFIsSyxZLFcsQixOLFgsWikpKXJldHVybiB6fWVsc2UgQShPKyssUCsxLFIsSyxCLE4sSCwtMS8wLDEvMCksQShPKyssUCsxLEIsTixSLEssMV5ILC0xLzAsMS8wKTtpZihLPEYpe3ZhciBRPWModCxQLEIsTixYLFopLHR0PVhbSSpRK1BdLGV0PWcodCxQLFEsTixYLFosdHQpO2lmKGV0PE4mJkEoTysrLFAsSyxGLGV0LE4sKDR8SCkrKEc/MTY6MCksdHQscSksQjxRJiZBKE8rKyxQLEssRixCLFEsKDJ8SCkrKEc/MTY6MCksVSx0dCksUSsxPT09ZXQpe2lmKHZvaWQgMCE9PSh6PUc/TSh0LFAsZSxLLEYsWSxXLFEsWCxaW1FdKTpUKHQsUCxlLEgsSyxGLFksVyxRLFgsWltRXSkpKXJldHVybiB6fWVsc2UgaWYoUTxldCl7dmFyIHJ0O2lmKEcpe2lmKHJ0PXkodCxQLEssRixZLFcsdHQpLEs8cnQpe3ZhciBudD1nKHQsUCxLLHJ0LFksVyx0dCk7aWYoUD09PXQtMil7aWYoSzxudCYmdm9pZCAwIT09KHo9bC5zd2VlcENvbXBsZXRlKHQsZSxLLG50LFksVyxRLGV0LFgsWikpKXJldHVybiB6O2lmKG50PHJ0JiZ2b2lkIDAhPT0oej1sLnN3ZWVwQmlwYXJ0aXRlKHQsZSxudCxydCxZLFcsUSxldCxYLFopKSlyZXR1cm4gen1lbHNlIEs8bnQmJkEoTysrLFArMSxLLG50LFEsZXQsMTYsLTEvMCwxLzApLG50PHJ0JiYoQShPKyssUCsxLG50LHJ0LFEsZXQsMCwtMS8wLDEvMCksQShPKyssUCsxLFEsZXQsbnQscnQsMSwtMS8wLDEvMCkpfX1lbHNlIHJ0PUg/eCh0LFAsSyxGLFksVyx0dCk6eSh0LFAsSyxGLFksVyx0dCksSzxydCYmKFA9PT10LTI/ej1IP2wuc3dlZXBCaXBhcnRpdGUodCxlLFEsZXQsWCxaLEsscnQsWSxXKTpsLnN3ZWVwQmlwYXJ0aXRlKHQsZSxLLHJ0LFksVyxRLGV0LFgsWik6KEEoTysrLFArMSxLLHJ0LFEsZXQsSCwtMS8wLDEvMCksQShPKyssUCsxLFEsZXQsSyxydCwxXkgsLTEvMCwxLzApKSl9fX19fTt2YXIgbj10KFwidHlwZWRhcnJheS1wb29sXCIpLGk9dChcImJpdC10d2lkZGxlXCIpLGE9dChcIi4vYnJ1dGVcIiksbz1hLnBhcnRpYWwscz1hLmZ1bGwsbD10KFwiLi9zd2VlcFwiKSxjPXQoXCIuL21lZGlhblwiKSx1PXQoXCIuL3BhcnRpdGlvblwiKSxoPTEyOCxmPTE8PDIyLHA9MTw8MjIsZD11KFwiIShsbz49cDApJiYhKHAxPj1oaSlcIixbXCJwMFwiLFwicDFcIl0pLGc9dShcImxvPT09cDBcIixbXCJwMFwiXSksdj11KFwibG88cDBcIixbXCJwMFwiXSksbT11KFwiaGk8PXAwXCIsW1wicDBcIl0pLHk9dShcImxvPD1wMCYmcDA8PWhpXCIsW1wicDBcIl0pLHg9dShcImxvPHAwJiZwMDw9aGlcIixbXCJwMFwiXSksYj02LF89Mix3PW4ubWFsbG9jSW50MzIoMTAyNCksaz1uLm1hbGxvY0RvdWJsZSgxMDI0KTtmdW5jdGlvbiBBKHQsZSxyLG4saSxhLG8scyxsKXt2YXIgYz1iKnQ7d1tjXT1lLHdbYysxXT1yLHdbYysyXT1uLHdbYyszXT1pLHdbYys0XT1hLHdbYys1XT1vO3ZhciB1PV8qdDtrW3VdPXMsa1t1KzFdPWx9ZnVuY3Rpb24gVCh0LGUscixuLGksYSxvLHMsbCxjLHUpe3ZhciBoPTIqdCxmPWwqaCxwPWNbZitlXTt0OmZvcih2YXIgZD1pLGc9aSpoO2Q8YTsrK2QsZys9aCl7dmFyIHY9b1tnK2VdLG09b1tnK2UrdF07aWYoIShwPHZ8fG08cCkmJighbnx8cCE9PXYpKXtmb3IodmFyIHkseD1zW2RdLGI9ZSsxO2I8dDsrK2Ipe3Y9b1tnK2JdLG09b1tnK2IrdF07dmFyIF89Y1tmK2JdLHc9Y1tmK2IrdF07aWYobTxffHx3PHYpY29udGludWUgdH1pZih2b2lkIDAhPT0oeT1uP3IodSx4KTpyKHgsdSkpKXJldHVybiB5fX19ZnVuY3Rpb24gTSh0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdT0yKnQsaD1zKnUsZj1sW2grZV07dDpmb3IodmFyIHA9bixkPW4qdTtwPGk7KytwLGQrPXUpe3ZhciBnPW9bcF07aWYoZyE9PWMpe3ZhciB2PWFbZCtlXSxtPWFbZCtlK3RdO2lmKCEoZjx2fHxtPGYpKXtmb3IodmFyIHk9ZSsxO3k8dDsrK3kpe3Y9YVtkK3ldLG09YVtkK3krdF07dmFyIHg9bFtoK3ldLGI9bFtoK3krdF07aWYobTx4fHxiPHYpY29udGludWUgdH12YXIgXz1yKGcsYyk7aWYodm9pZCAwIT09XylyZXR1cm4gX319fX19LHtcIi4vYnJ1dGVcIjo4OCxcIi4vbWVkaWFuXCI6OTAsXCIuL3BhcnRpdGlvblwiOjkxLFwiLi9zd2VlcFwiOjkzLFwiYml0LXR3aWRkbGVcIjo4MyxcInR5cGVkYXJyYXktcG9vbFwiOjUzMH1dLDkwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyxsKXtpZihvPD1yKzEpcmV0dXJuIHI7dmFyIGM9cix1PW8saD1vK3I+Pj4xLGY9Mip0LHA9aCxkPXNbZipoK2VdO2Zvcig7Yzx1Oyl7aWYodS1jPGkpe2EodCxlLGMsdSxzLGwpLGQ9c1tmKmgrZV07YnJlYWt9dmFyIGc9dS1jLHY9TWF0aC5yYW5kb20oKSpnK2N8MCxtPXNbZip2K2VdLHk9TWF0aC5yYW5kb20oKSpnK2N8MCx4PXNbZip5K2VdLGI9TWF0aC5yYW5kb20oKSpnK2N8MCxfPXNbZipiK2VdO208PXg/Xz49eD8ocD15LGQ9eCk6bT49Xz8ocD12LGQ9bSk6KHA9YixkPV8pOng+PV8/KHA9eSxkPXgpOl8+PW0/KHA9dixkPW0pOihwPWIsZD1fKTtmb3IodmFyIHc9ZioodS0xKSxrPWYqcCxBPTA7QTxmOysrQSwrK3csKytrKXt2YXIgVD1zW3ddO3Nbd109c1trXSxzW2tdPVR9dmFyIE09bFt1LTFdO2xbdS0xXT1sW3BdLGxbcF09TSxwPW4odCxlLGMsdS0xLHMsbCxkKTtmb3IodmFyIHc9ZioodS0xKSxrPWYqcCxBPTA7QTxmOysrQSwrK3csKytrKXt2YXIgVD1zW3ddO3Nbd109c1trXSxzW2tdPVR9dmFyIE09bFt1LTFdO2lmKGxbdS0xXT1sW3BdLGxbcF09TSxoPHApe2Zvcih1PXAtMTtjPHUmJnNbZioodS0xKStlXT09PWQ7KXUtPTE7dSs9MX1lbHNle2lmKCEocDxoKSlicmVhaztmb3IoYz1wKzE7Yzx1JiZzW2YqYytlXT09PWQ7KWMrPTF9fXJldHVybiBuKHQsZSxyLGgscyxsLHNbZipoK2VdKX07dmFyIG49dChcIi4vcGFydGl0aW9uXCIpKFwibG88cDBcIixbXCJwMFwiXSksaT04O2Z1bmN0aW9uIGEodCxlLHIsbixpLGEpe2Zvcih2YXIgbz0yKnQscz1vKihyKzEpK2UsbD1yKzE7bDxuOysrbCxzKz1vKWZvcih2YXIgYz1pW3NdLHU9bCxoPW8qKGwtMSk7dT5yJiZpW2grZV0+YzstLXUsaC09byl7Zm9yKHZhciBmPWgscD1oK28sZD0wO2Q8bzsrK2QsKytmLCsrcCl7dmFyIGc9aVtmXTtpW2ZdPWlbcF0saVtwXT1nfXZhciB2PWFbdV07YVt1XT1hW3UtMV0sYVt1LTFdPXZ9fX0se1wiLi9wYXJ0aXRpb25cIjo5MX1dLDkxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9XCJhYmNkZWZcIi5zcGxpdChcIlwiKS5jb25jYXQoZSksaT1bXTt0LmluZGV4T2YoXCJsb1wiKT49MCYmaS5wdXNoKFwibG89ZVtrK25dXCIpO3QuaW5kZXhPZihcImhpXCIpPj0wJiZpLnB1c2goXCJoaT1lW2srb11cIik7cmV0dXJuIHIucHVzaChuLnJlcGxhY2UoXCJfXCIsaS5qb2luKCkpLnJlcGxhY2UoXCIkXCIsdCkpLEZ1bmN0aW9uLmFwcGx5KHZvaWQgMCxyKX07dmFyIG49XCJmb3IodmFyIGo9MiphLGs9aipjLGw9ayxtPWMsbj1iLG89YStiLHA9YztkPnA7KytwLGsrPWope3ZhciBfO2lmKCQpaWYobT09PXApbSs9MSxsKz1qO2Vsc2V7Zm9yKHZhciBzPTA7aj5zOysrcyl7dmFyIHQ9ZVtrK3NdO2VbaytzXT1lW2xdLGVbbCsrXT10fXZhciB1PWZbcF07ZltwXT1mW21dLGZbbSsrXT11fX1yZXR1cm4gbVwifSx7fV0sOTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlPD00Km4/aSgwLGUtMSx0KTpmdW5jdGlvbiB0KGUscixoKXt2YXIgZj0oci1lKzEpLzZ8MCxwPWUrZixkPXItZixnPWUrcj4+MSx2PWctZixtPWcrZix5PXAseD12LGI9ZyxfPW0sdz1kLGs9ZSsxLEE9ci0xLFQ9MDtjKHkseCxoKSYmKFQ9eSx5PXgseD1UKTtjKF8sdyxoKSYmKFQ9XyxfPXcsdz1UKTtjKHksYixoKSYmKFQ9eSx5PWIsYj1UKTtjKHgsYixoKSYmKFQ9eCx4PWIsYj1UKTtjKHksXyxoKSYmKFQ9eSx5PV8sXz1UKTtjKGIsXyxoKSYmKFQ9YixiPV8sXz1UKTtjKHgsdyxoKSYmKFQ9eCx4PXcsdz1UKTtjKHgsYixoKSYmKFQ9eCx4PWIsYj1UKTtjKF8sdyxoKSYmKFQ9XyxfPXcsdz1UKTt2YXIgTT1oWzIqeF07dmFyIFM9aFsyKngrMV07dmFyIEU9aFsyKl9dO3ZhciBDPWhbMipfKzFdO3ZhciBMPTIqeTt2YXIgej0yKmI7dmFyIE89Mip3O3ZhciBJPTIqcDt2YXIgRD0yKmc7dmFyIFA9MipkO2Zvcih2YXIgUj0wO1I8MjsrK1Ipe3ZhciBGPWhbTCtSXSxCPWhbeitSXSxOPWhbTytSXTtoW0krUl09RixoW0QrUl09QixoW1ArUl09Tn1vKHYsZSxoKTtvKG0scixoKTtmb3IodmFyIGo9aztqPD1BOysrailpZih1KGosTSxTLGgpKWohPT1rJiZhKGosayxoKSwrK2s7ZWxzZSBpZighdShqLEUsQyxoKSlmb3IoOzspe2lmKHUoQSxFLEMsaCkpe3UoQSxNLFMsaCk/KHMoaixrLEEsaCksKytrLC0tQSk6KGEoaixBLGgpLC0tQSk7YnJlYWt9aWYoLS1BPGopYnJlYWt9bChlLGstMSxNLFMsaCk7bChyLEErMSxFLEMsaCk7ay0yLWU8PW4/aShlLGstMixoKTp0KGUsay0yLGgpO3ItKEErMik8PW4/aShBKzIscixoKTp0KEErMixyLGgpO0Etazw9bj9pKGssQSxoKTp0KGssQSxoKX0oMCxlLTEsdCl9O3ZhciBuPTMyO2Z1bmN0aW9uIGkodCxlLHIpe2Zvcih2YXIgbj0yKih0KzEpLGk9dCsxO2k8PWU7KytpKXtmb3IodmFyIGE9cltuKytdLG89cltuKytdLHM9aSxsPW4tMjtzLS0gPnQ7KXt2YXIgYz1yW2wtMl0sdT1yW2wtMV07aWYoYzxhKWJyZWFrO2lmKGM9PT1hJiZ1PG8pYnJlYWs7cltsXT1jLHJbbCsxXT11LGwtPTJ9cltsXT1hLHJbbCsxXT1vfX1mdW5jdGlvbiBhKHQsZSxyKXtlKj0yO3ZhciBuPXJbdCo9Ml0saT1yW3QrMV07clt0XT1yW2VdLHJbdCsxXT1yW2UrMV0scltlXT1uLHJbZSsxXT1pfWZ1bmN0aW9uIG8odCxlLHIpe2UqPTIsclt0Kj0yXT1yW2VdLHJbdCsxXT1yW2UrMV19ZnVuY3Rpb24gcyh0LGUscixuKXtlKj0yLHIqPTI7dmFyIGk9blt0Kj0yXSxhPW5bdCsxXTtuW3RdPW5bZV0sblt0KzFdPW5bZSsxXSxuW2VdPW5bcl0sbltlKzFdPW5bcisxXSxuW3JdPWksbltyKzFdPWF9ZnVuY3Rpb24gbCh0LGUscixuLGkpe2UqPTIsaVt0Kj0yXT1pW2VdLGlbZV09cixpW3QrMV09aVtlKzFdLGlbZSsxXT1ufWZ1bmN0aW9uIGModCxlLHIpe2UqPTI7dmFyIG49clt0Kj0yXSxpPXJbZV07cmV0dXJuIShuPGkpJiYobiE9PWl8fHJbdCsxXT5yW2UrMV0pfWZ1bmN0aW9uIHUodCxlLHIsbil7dmFyIGk9blt0Kj0yXTtyZXR1cm4gaTxlfHxpPT09ZSYmblt0KzFdPHJ9fSx7fV0sOTM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e2luaXQ6ZnVuY3Rpb24odCl7dmFyIGU9aS5uZXh0UG93Mih0KTtzLmxlbmd0aDxlJiYobi5mcmVlKHMpLHM9bi5tYWxsb2NJbnQzMihlKSk7bC5sZW5ndGg8ZSYmKG4uZnJlZShsKSxsPW4ubWFsbG9jSW50MzIoZSkpO2MubGVuZ3RoPGUmJihuLmZyZWUoYyksYz1uLm1hbGxvY0ludDMyKGUpKTt1Lmxlbmd0aDxlJiYobi5mcmVlKHUpLHU9bi5tYWxsb2NJbnQzMihlKSk7aC5sZW5ndGg8ZSYmKG4uZnJlZShoKSxoPW4ubWFsbG9jSW50MzIoZSkpO2YubGVuZ3RoPGUmJihuLmZyZWUoZiksZj1uLm1hbGxvY0ludDMyKGUpKTt2YXIgcj04KmU7cC5sZW5ndGg8ciYmKG4uZnJlZShwKSxwPW4ubWFsbG9jRG91YmxlKHIpKX0sc3dlZXBCaXBhcnRpdGU6ZnVuY3Rpb24odCxlLHIsbixpLGgsZix2LG0seSl7Zm9yKHZhciB4PTAsYj0yKnQsXz10LTEsdz1iLTEsaz1yO2s8bjsrK2spe3ZhciBBPWhba10sVD1iKms7cFt4KytdPWlbVCtfXSxwW3grK109LShBKzEpLHBbeCsrXT1pW1Qrd10scFt4KytdPUF9Zm9yKHZhciBrPWY7azx2Oysrayl7dmFyIEE9eVtrXStvLE09YiprO3BbeCsrXT1tW00rX10scFt4KytdPS1BLHBbeCsrXT1tW00rd10scFt4KytdPUF9dmFyIFM9eD4+PjE7YShwLFMpO2Zvcih2YXIgRT0wLEM9MCxrPTA7azxTOysrayl7dmFyIEw9MHxwWzIqaysxXTtpZihMPj1vKWQoYyx1LEMtLSxMPUwtb3wwKTtlbHNlIGlmKEw+PTApZChzLGwsRS0tLEwpO2Vsc2UgaWYoTDw9LW8pe0w9LUwtb3wwO2Zvcih2YXIgej0wO3o8RTsrK3ope3ZhciBPPWUoc1t6XSxMKTtpZih2b2lkIDAhPT1PKXJldHVybiBPfWcoYyx1LEMrKyxMKX1lbHNle0w9LUwtMXwwO2Zvcih2YXIgej0wO3o8QzsrK3ope3ZhciBPPWUoTCxjW3pdKTtpZih2b2lkIDAhPT1PKXJldHVybiBPfWcocyxsLEUrKyxMKX19fSxzd2VlcENvbXBsZXRlOmZ1bmN0aW9uKHQsZSxyLG4saSxvLHYsbSx5LHgpe2Zvcih2YXIgYj0wLF89Mip0LHc9dC0xLGs9Xy0xLEE9cjtBPG47KytBKXt2YXIgVD1vW0FdKzE8PDEsTT1fKkE7cFtiKytdPWlbTSt3XSxwW2IrK109LVQscFtiKytdPWlbTStrXSxwW2IrK109VH1mb3IodmFyIEE9djtBPG07KytBKXt2YXIgVD14W0FdKzE8PDEsUz1fKkE7cFtiKytdPXlbUyt3XSxwW2IrK109MXwtVCxwW2IrK109eVtTK2tdLHBbYisrXT0xfFR9dmFyIEU9Yj4+PjE7YShwLEUpO2Zvcih2YXIgQz0wLEw9MCx6PTAsQT0wO0E8RTsrK0Epe3ZhciBPPTB8cFsyKkErMV0sST0xJk87aWYoQTxFLTEmJk8+PjE9PXBbMipBKzNdPj4xJiYoST0yLEErPTEpLE88MCl7Zm9yKHZhciBEPS0oTz4+MSktMSxQPTA7UDx6OysrUCl7dmFyIFI9ZShoW1BdLEQpO2lmKHZvaWQgMCE9PVIpcmV0dXJuIFJ9aWYoMCE9PUkpZm9yKHZhciBQPTA7UDxDOysrUCl7dmFyIFI9ZShzW1BdLEQpO2lmKHZvaWQgMCE9PVIpcmV0dXJuIFJ9aWYoMSE9PUkpZm9yKHZhciBQPTA7UDxMOysrUCl7dmFyIFI9ZShjW1BdLEQpO2lmKHZvaWQgMCE9PVIpcmV0dXJuIFJ9MD09PUk/ZyhzLGwsQysrLEQpOjE9PT1JP2coYyx1LEwrKyxEKToyPT09SSYmZyhoLGYseisrLEQpfWVsc2V7dmFyIEQ9KE8+PjEpLTE7MD09PUk/ZChzLGwsQy0tLEQpOjE9PT1JP2QoYyx1LEwtLSxEKToyPT09SSYmZChoLGYsei0tLEQpfX19LHNjYW5CaXBhcnRpdGU6ZnVuY3Rpb24odCxlLHIsbixpLGMsdSxoLGYsdixtLHkpe3ZhciB4PTAsYj0yKnQsXz1lLHc9ZSt0LGs9MSxBPTE7bj9BPW86az1vO2Zvcih2YXIgVD1pO1Q8YzsrK1Qpe3ZhciBNPVQrayxTPWIqVDtwW3grK109dVtTK19dLHBbeCsrXT0tTSxwW3grK109dVtTK3ddLHBbeCsrXT1NfWZvcih2YXIgVD1mO1Q8djsrK1Qpe3ZhciBNPVQrQSxFPWIqVDtwW3grK109bVtFK19dLHBbeCsrXT0tTX12YXIgQz14Pj4+MTthKHAsQyk7Zm9yKHZhciBMPTAsVD0wO1Q8QzsrK1Qpe3ZhciB6PTB8cFsyKlQrMV07aWYoejwwKXt2YXIgTT0teixPPSExO2lmKE0+PW8/KE89IW4sTS09byk6KE89ISFuLE0tPTEpLE8pZyhzLGwsTCsrLE0pO2Vsc2V7dmFyIEk9eVtNXSxEPWIqTSxQPW1bRCtlKzFdLFI9bVtEK2UrMSt0XTt0OmZvcih2YXIgRj0wO0Y8TDsrK0Ype3ZhciBCPXNbRl0sTj1iKkI7aWYoIShSPHVbTitlKzFdfHx1W04rZSsxK3RdPFApKXtmb3IodmFyIGo9ZSsyO2o8dDsrK2opaWYobVtEK2ordF08dVtOK2pdfHx1W04rait0XTxtW0Qral0pY29udGludWUgdDt2YXIgVixVPWhbQl07aWYodm9pZCAwIT09KFY9bj9yKEksVSk6cihVLEkpKSlyZXR1cm4gVn19fX1lbHNlIGQocyxsLEwtLSx6LWspfX0sc2NhbkNvbXBsZXRlOmZ1bmN0aW9uKHQsZSxyLG4saSxsLGMsdSxoLGYsZCl7Zm9yKHZhciBnPTAsdj0yKnQsbT1lLHk9ZSt0LHg9bjt4PGk7Kyt4KXt2YXIgYj14K28sXz12Kng7cFtnKytdPWxbXyttXSxwW2crK109LWIscFtnKytdPWxbXyt5XSxwW2crK109Yn1mb3IodmFyIHg9dTt4PGg7Kyt4KXt2YXIgYj14KzEsdz12Kng7cFtnKytdPWZbdyttXSxwW2crK109LWJ9dmFyIGs9Zz4+PjE7YShwLGspO2Zvcih2YXIgQT0wLHg9MDt4PGs7Kyt4KXt2YXIgVD0wfHBbMip4KzFdO2lmKFQ8MCl7dmFyIGI9LVQ7aWYoYj49bylzW0ErK109Yi1vO2Vsc2V7dmFyIE09ZFtiLT0xXSxTPXYqYixFPWZbUytlKzFdLEM9ZltTK2UrMSt0XTt0OmZvcih2YXIgTD0wO0w8QTsrK0wpe3ZhciB6PXNbTF0sTz1jW3pdO2lmKE89PT1NKWJyZWFrO3ZhciBJPXYqejtpZighKEM8bFtJK2UrMV18fGxbSStlKzErdF08RSkpe2Zvcih2YXIgRD1lKzI7RDx0OysrRClpZihmW1MrRCt0XTxsW0krRF18fGxbSStEK3RdPGZbUytEXSljb250aW51ZSB0O3ZhciBQPXIoTyxNKTtpZih2b2lkIDAhPT1QKXJldHVybiBQfX19fWVsc2V7Zm9yKHZhciBiPVQtbyxMPUEtMTtMPj0wOy0tTClpZihzW0xdPT09Yil7Zm9yKHZhciBEPUwrMTtEPEE7KytEKXNbRC0xXT1zW0RdO2JyZWFrfS0tQX19fX07dmFyIG49dChcInR5cGVkYXJyYXktcG9vbFwiKSxpPXQoXCJiaXQtdHdpZGRsZVwiKSxhPXQoXCIuL3NvcnRcIiksbz0xPDwyOCxzPW4ubWFsbG9jSW50MzIoMTAyNCksbD1uLm1hbGxvY0ludDMyKDEwMjQpLGM9bi5tYWxsb2NJbnQzMigxMDI0KSx1PW4ubWFsbG9jSW50MzIoMTAyNCksaD1uLm1hbGxvY0ludDMyKDEwMjQpLGY9bi5tYWxsb2NJbnQzMigxMDI0KSxwPW4ubWFsbG9jRG91YmxlKDgxOTIpO2Z1bmN0aW9uIGQodCxlLHIsbil7dmFyIGk9ZVtuXSxhPXRbci0xXTt0W2ldPWEsZVthXT1pfWZ1bmN0aW9uIGcodCxlLHIsbil7dFtyXT1uLGVbbl09cn19LHtcIi4vc29ydFwiOjkyLFwiYml0LXR3aWRkbGVcIjo4MyxcInR5cGVkYXJyYXktcG9vbFwiOjUzMH1dLDk0OltmdW5jdGlvbih0LGUscil7fSx7fV0sOTU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbigpe307cmV0dXJuIGUucHJvdG90eXBlPXQsbmV3IGV9LGk9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpJiZlLnB1c2gocik7cmV0dXJuIHJ9LGE9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmR8fGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodCxhcmd1bWVudHMpfX07ZnVuY3Rpb24gbygpe3RoaXMuX2V2ZW50cyYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMsXCJfZXZlbnRzXCIpfHwodGhpcy5fZXZlbnRzPW4obnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCksdGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21heExpc3RlbmVyc3x8dm9pZCAwfWUuZXhwb3J0cz1vLG8uRXZlbnRFbWl0dGVyPW8sby5wcm90b3R5cGUuX2V2ZW50cz12b2lkIDAsby5wcm90b3R5cGUuX21heExpc3RlbmVycz12b2lkIDA7dmFyIHMsbD0xMDt0cnl7dmFyIGM9e307T2JqZWN0LmRlZmluZVByb3BlcnR5JiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxcInhcIix7dmFsdWU6MH0pLHM9MD09PWMueH1jYXRjaCh0KXtzPSExfWZ1bmN0aW9uIHUodCl7cmV0dXJuIHZvaWQgMD09PXQuX21heExpc3RlbmVycz9vLmRlZmF1bHRNYXhMaXN0ZW5lcnM6dC5fbWF4TGlzdGVuZXJzfWZ1bmN0aW9uIGgodCxlLHIsaSl7dmFyIGEsbyxzO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO2lmKChvPXQuX2V2ZW50cyk/KG8ubmV3TGlzdGVuZXImJih0LmVtaXQoXCJuZXdMaXN0ZW5lclwiLGUsci5saXN0ZW5lcj9yLmxpc3RlbmVyOnIpLG89dC5fZXZlbnRzKSxzPW9bZV0pOihvPXQuX2V2ZW50cz1uKG51bGwpLHQuX2V2ZW50c0NvdW50PTApLHMpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHM/cz1vW2VdPWk/W3Isc106W3Mscl06aT9zLnVuc2hpZnQocik6cy5wdXNoKHIpLCFzLndhcm5lZCYmKGE9dSh0KSkmJmE+MCYmcy5sZW5ndGg+YSl7cy53YXJuZWQ9ITA7dmFyIGw9bmV3IEVycm9yKFwiUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiBcIitzLmxlbmd0aCsnIFwiJytTdHJpbmcoZSkrJ1wiIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQuJyk7bC5uYW1lPVwiTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nXCIsbC5lbWl0dGVyPXQsbC50eXBlPWUsbC5jb3VudD1zLmxlbmd0aCxcIm9iamVjdFwiPT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oXCIlczogJXNcIixsLm5hbWUsbC5tZXNzYWdlKX19ZWxzZSBzPW9bZV09ciwrK3QuX2V2ZW50c0NvdW50O3JldHVybiB0fWZ1bmN0aW9uIGYoKXtpZighdGhpcy5maXJlZClzd2l0Y2godGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLHRoaXMud3JhcEZuKSx0aGlzLmZpcmVkPSEwLGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTtjYXNlIDE6cmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCxhcmd1bWVudHNbMF0pO2Nhc2UgMjpyZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0LGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pO2Nhc2UgMzpyZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0LGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKTtkZWZhdWx0OmZvcih2YXIgdD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksZT0wO2U8dC5sZW5ndGg7KytlKXRbZV09YXJndW1lbnRzW2VdO3RoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsdCl9fWZ1bmN0aW9uIHAodCxlLHIpe3ZhciBuPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDp0LHR5cGU6ZSxsaXN0ZW5lcjpyfSxpPWEuY2FsbChmLG4pO3JldHVybiBpLmxpc3RlbmVyPXIsbi53cmFwRm49aSxpfWZ1bmN0aW9uIGQodCxlLHIpe3ZhciBuPXQuX2V2ZW50cztpZighbilyZXR1cm5bXTt2YXIgaT1uW2VdO3JldHVybiBpP1wiZnVuY3Rpb25cIj09dHlwZW9mIGk/cj9baS5saXN0ZW5lcnx8aV06W2ldOnI/ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wO3I8ZS5sZW5ndGg7KytyKWVbcl09dFtyXS5saXN0ZW5lcnx8dFtyXTtyZXR1cm4gZX0oaSk6dihpLGkubGVuZ3RoKTpbXX1mdW5jdGlvbiBnKHQpe3ZhciBlPXRoaXMuX2V2ZW50cztpZihlKXt2YXIgcj1lW3RdO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHIpcmV0dXJuIDE7aWYocilyZXR1cm4gci5sZW5ndGh9cmV0dXJuIDB9ZnVuY3Rpb24gdih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT10W25dO3JldHVybiByfXM/T2JqZWN0LmRlZmluZVByb3BlcnR5KG8sXCJkZWZhdWx0TWF4TGlzdGVuZXJzXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx9LHNldDpmdW5jdGlvbih0KXtpZihcIm51bWJlclwiIT10eXBlb2YgdHx8dDwwfHx0IT10KXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZGVmYXVsdE1heExpc3RlbmVyc1wiIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtsPXR9fSk6by5kZWZhdWx0TWF4TGlzdGVuZXJzPWwsby5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKHQpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0fHx0PDB8fGlzTmFOKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiblwiIGFyZ3VtZW50IG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPXQsdGhpc30sby5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHUodGhpcyl9LG8ucHJvdG90eXBlLmVtaXQ9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHM9XCJlcnJvclwiPT09dDtpZihvPXRoaXMuX2V2ZW50cylzPXMmJm51bGw9PW8uZXJyb3I7ZWxzZSBpZighcylyZXR1cm4hMTtpZihzKXtpZihhcmd1bWVudHMubGVuZ3RoPjEmJihlPWFyZ3VtZW50c1sxXSksZSBpbnN0YW5jZW9mIEVycm9yKXRocm93IGU7dmFyIGw9bmV3IEVycm9yKCdVbmhhbmRsZWQgXCJlcnJvclwiIGV2ZW50LiAoJytlK1wiKVwiKTt0aHJvdyBsLmNvbnRleHQ9ZSxsfWlmKCEocj1vW3RdKSlyZXR1cm4hMTt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByO3N3aXRjaChuPWFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMTohZnVuY3Rpb24odCxlLHIpe2lmKGUpdC5jYWxsKHIpO2Vsc2UgZm9yKHZhciBuPXQubGVuZ3RoLGk9dih0LG4pLGE9MDthPG47KythKWlbYV0uY2FsbChyKX0ocixjLHRoaXMpO2JyZWFrO2Nhc2UgMjohZnVuY3Rpb24odCxlLHIsbil7aWYoZSl0LmNhbGwocixuKTtlbHNlIGZvcih2YXIgaT10Lmxlbmd0aCxhPXYodCxpKSxvPTA7bzxpOysrbylhW29dLmNhbGwocixuKX0ocixjLHRoaXMsYXJndW1lbnRzWzFdKTticmVhaztjYXNlIDM6IWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYoZSl0LmNhbGwocixuLGkpO2Vsc2UgZm9yKHZhciBhPXQubGVuZ3RoLG89dih0LGEpLHM9MDtzPGE7KytzKW9bc10uY2FsbChyLG4saSl9KHIsYyx0aGlzLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0pO2JyZWFrO2Nhc2UgNDohZnVuY3Rpb24odCxlLHIsbixpLGEpe2lmKGUpdC5jYWxsKHIsbixpLGEpO2Vsc2UgZm9yKHZhciBvPXQubGVuZ3RoLHM9dih0LG8pLGw9MDtsPG87KytsKXNbbF0uY2FsbChyLG4saSxhKX0ocixjLHRoaXMsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM10pO2JyZWFrO2RlZmF1bHQ6Zm9yKGk9bmV3IEFycmF5KG4tMSksYT0xO2E8bjthKyspaVthLTFdPWFyZ3VtZW50c1thXTshZnVuY3Rpb24odCxlLHIsbil7aWYoZSl0LmFwcGx5KHIsbik7ZWxzZSBmb3IodmFyIGk9dC5sZW5ndGgsYT12KHQsaSksbz0wO288aTsrK28pYVtvXS5hcHBseShyLG4pfShyLGMsdGhpcyxpKX1yZXR1cm4hMH0sby5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaCh0aGlzLHQsZSwhMSl9LG8ucHJvdG90eXBlLm9uPW8ucHJvdG90eXBlLmFkZExpc3RlbmVyLG8ucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3JldHVybiBoKHRoaXMsdCxlLCEwKX0sby5wcm90b3R5cGUub25jZT1mdW5jdGlvbih0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO3JldHVybiB0aGlzLm9uKHQscCh0aGlzLHQsZSkpLHRoaXN9LG8ucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXI9ZnVuY3Rpb24odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtyZXR1cm4gdGhpcy5wcmVwZW5kTGlzdGVuZXIodCxwKHRoaXMsdCxlKSksdGhpc30sby5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGEsbyxzO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO2lmKCEoaT10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKCEocj1pW3RdKSlyZXR1cm4gdGhpcztpZihyPT09ZXx8ci5saXN0ZW5lcj09PWUpMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9bihudWxsKTooZGVsZXRlIGlbdF0saS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KFwicmVtb3ZlTGlzdGVuZXJcIix0LHIubGlzdGVuZXJ8fGUpKTtlbHNlIGlmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHIpe2ZvcihhPS0xLG89ci5sZW5ndGgtMTtvPj0wO28tLSlpZihyW29dPT09ZXx8cltvXS5saXN0ZW5lcj09PWUpe3M9cltvXS5saXN0ZW5lcixhPW87YnJlYWt9aWYoYTwwKXJldHVybiB0aGlzOzA9PT1hP3Iuc2hpZnQoKTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLG49cisxLGk9dC5sZW5ndGg7bjxpO3IrPTEsbis9MSl0W3JdPXRbbl07dC5wb3AoKX0ocixhKSwxPT09ci5sZW5ndGgmJihpW3RdPXJbMF0pLGkucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdChcInJlbW92ZUxpc3RlbmVyXCIsdCxzfHxlKX1yZXR1cm4gdGhpc30sby5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsYTtpZighKHI9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZighci5yZW1vdmVMaXN0ZW5lcilyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2V2ZW50cz1uKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApOnJbdF0mJigwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1uKG51bGwpOmRlbGV0ZSByW3RdKSx0aGlzO2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgbyxzPWkocik7Zm9yKGE9MDthPHMubGVuZ3RoOysrYSlcInJlbW92ZUxpc3RlbmVyXCIhPT0obz1zW2FdKSYmdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMobyk7cmV0dXJuIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKFwicmVtb3ZlTGlzdGVuZXJcIiksdGhpcy5fZXZlbnRzPW4obnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCx0aGlzfWlmKFwiZnVuY3Rpb25cIj09dHlwZW9mKGU9clt0XSkpdGhpcy5yZW1vdmVMaXN0ZW5lcih0LGUpO2Vsc2UgaWYoZSlmb3IoYT1lLmxlbmd0aC0xO2E+PTA7YS0tKXRoaXMucmVtb3ZlTGlzdGVuZXIodCxlW2FdKTtyZXR1cm4gdGhpc30sby5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBkKHRoaXMsdCwhMCl9LG8ucHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbih0KXtyZXR1cm4gZCh0aGlzLHQsITEpfSxvLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0Lmxpc3RlbmVyQ291bnQ/dC5saXN0ZW5lckNvdW50KGUpOmcuY2FsbCh0LGUpfSxvLnByb3RvdHlwZS5saXN0ZW5lckNvdW50PWcsby5wcm90b3R5cGUuZXZlbnROYW1lcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ldmVudHNDb3VudD4wP1JlZmxlY3Qub3duS2V5cyh0aGlzLl9ldmVudHMpOltdfX0se31dLDk2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImJhc2U2NC1qc1wiKSxpPXQoXCJpZWVlNzU0XCIpO3IuQnVmZmVyPXMsci5TbG93QnVmZmVyPWZ1bmN0aW9uKHQpeyt0IT10JiYodD0wKTtyZXR1cm4gcy5hbGxvYygrdCl9LHIuSU5TUEVDVF9NQVhfQllURVM9NTA7dmFyIGE9MjE0NzQ4MzY0NztmdW5jdGlvbiBvKHQpe2lmKHQ+YSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJyt0KydcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKTt2YXIgZT1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gZS5fX3Byb3RvX189cy5wcm90b3R5cGUsZX1mdW5jdGlvbiBzKHQsZSxyKXtpZihcIm51bWJlclwiPT10eXBlb2YgdCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gdSh0KX1yZXR1cm4gbCh0LGUscil9ZnVuY3Rpb24gbCh0LGUscil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7XCJzdHJpbmdcIj09dHlwZW9mIGUmJlwiXCIhPT1lfHwoZT1cInV0ZjhcIik7aWYoIXMuaXNFbmNvZGluZyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrZSk7dmFyIHI9MHxwKHQsZSksbj1vKHIpLGk9bi53cml0ZSh0LGUpO2khPT1yJiYobj1uLnNsaWNlKDAsaSkpO3JldHVybiBufSh0LGUpO2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KSlyZXR1cm4gaCh0KTtpZihudWxsPT10KXRocm93IFR5cGVFcnJvcihcIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlIFwiK3R5cGVvZiB0KTtpZihqKHQsQXJyYXlCdWZmZXIpfHx0JiZqKHQuYnVmZmVyLEFycmF5QnVmZmVyKSlyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKGU8MHx8dC5ieXRlTGVuZ3RoPGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wib2Zmc2V0XCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYodC5ieXRlTGVuZ3RoPGUrKHJ8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCdcImxlbmd0aFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO3ZhciBuO249dm9pZCAwPT09ZSYmdm9pZCAwPT09cj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQsZSk6bmV3IFVpbnQ4QXJyYXkodCxlLHIpO3JldHVybiBuLl9fcHJvdG9fXz1zLnByb3RvdHlwZSxufSh0LGUscik7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwidmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTt2YXIgbj10LnZhbHVlT2YmJnQudmFsdWVPZigpO2lmKG51bGwhPW4mJm4hPT10KXJldHVybiBzLmZyb20obixlLHIpO3ZhciBpPWZ1bmN0aW9uKHQpe2lmKHMuaXNCdWZmZXIodCkpe3ZhciBlPTB8Zih0Lmxlbmd0aCkscj1vKGUpO3JldHVybiAwPT09ci5sZW5ndGg/cjoodC5jb3B5KHIsMCwwLGUpLHIpfWlmKHZvaWQgMCE9PXQubGVuZ3RoKXJldHVyblwibnVtYmVyXCIhPXR5cGVvZiB0Lmxlbmd0aHx8Vih0Lmxlbmd0aCk/bygwKTpoKHQpO2lmKFwiQnVmZmVyXCI9PT10LnR5cGUmJkFycmF5LmlzQXJyYXkodC5kYXRhKSlyZXR1cm4gaCh0LmRhdGEpfSh0KTtpZihpKXJldHVybiBpO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPVN5bWJvbC50b1ByaW1pdGl2ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgdFtTeW1ib2wudG9QcmltaXRpdmVdKXJldHVybiBzLmZyb20odFtTeW1ib2wudG9QcmltaXRpdmVdKFwic3RyaW5nXCIpLGUscik7dGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlIFwiK3R5cGVvZiB0KX1mdW5jdGlvbiBjKHQpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicrdCsnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwic2l6ZVwiJyl9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gYyh0KSxvKHQ8MD8wOjB8Zih0KSl9ZnVuY3Rpb24gaCh0KXtmb3IodmFyIGU9dC5sZW5ndGg8MD8wOjB8Zih0Lmxlbmd0aCkscj1vKGUpLG49MDtuPGU7bis9MSlyW25dPTI1NSZ0W25dO3JldHVybiByfWZ1bmN0aW9uIGYodCl7aWYodD49YSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHhcIithLnRvU3RyaW5nKDE2KStcIiBieXRlc1wiKTtyZXR1cm4gMHx0fWZ1bmN0aW9uIHAodCxlKXtpZihzLmlzQnVmZmVyKHQpKXJldHVybiB0Lmxlbmd0aDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcodCl8fGoodCxBcnJheUJ1ZmZlcikpcmV0dXJuIHQuYnl0ZUxlbmd0aDtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiB0KTt2YXIgcj10Lmxlbmd0aCxuPWFyZ3VtZW50cy5sZW5ndGg+MiYmITA9PT1hcmd1bWVudHNbMl07aWYoIW4mJjA9PT1yKXJldHVybiAwO2Zvcih2YXIgaT0hMTs7KXN3aXRjaChlKXtjYXNlXCJhc2NpaVwiOmNhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOnJldHVybiByO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiBGKHQpLmxlbmd0aDtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gMipyO2Nhc2VcImhleFwiOnJldHVybiByPj4+MTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gQih0KS5sZW5ndGg7ZGVmYXVsdDppZihpKXJldHVybiBuPy0xOkYodCkubGVuZ3RoO2U9KFwiXCIrZSkudG9Mb3dlckNhc2UoKSxpPSEwfX1mdW5jdGlvbiBkKHQsZSxyKXt2YXIgbj10W2VdO3RbZV09dFtyXSx0W3JdPW59ZnVuY3Rpb24gZyh0LGUscixuLGkpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4tMTtpZihcInN0cmluZ1wiPT10eXBlb2Ygcj8obj1yLHI9MCk6cj4yMTQ3NDgzNjQ3P3I9MjE0NzQ4MzY0NzpyPC0yMTQ3NDgzNjQ4JiYocj0tMjE0NzQ4MzY0OCksVihyPStyKSYmKHI9aT8wOnQubGVuZ3RoLTEpLHI8MCYmKHI9dC5sZW5ndGgrcikscj49dC5sZW5ndGgpe2lmKGkpcmV0dXJuLTE7cj10Lmxlbmd0aC0xfWVsc2UgaWYocjwwKXtpZighaSlyZXR1cm4tMTtyPTB9aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPXMuZnJvbShlLG4pKSxzLmlzQnVmZmVyKGUpKXJldHVybiAwPT09ZS5sZW5ndGg/LTE6dih0LGUscixuLGkpO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXJldHVybiBlJj0yNTUsXCJmdW5jdGlvblwiPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9pP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0LGUscik6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbCh0LGUscik6dih0LFtlXSxyLG4saSk7dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlclwiKX1mdW5jdGlvbiB2KHQsZSxyLG4saSl7dmFyIGEsbz0xLHM9dC5sZW5ndGgsbD1lLmxlbmd0aDtpZih2b2lkIDAhPT1uJiYoXCJ1Y3MyXCI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fFwidWNzLTJcIj09PW58fFwidXRmMTZsZVwiPT09bnx8XCJ1dGYtMTZsZVwiPT09bikpe2lmKHQubGVuZ3RoPDJ8fGUubGVuZ3RoPDIpcmV0dXJuLTE7bz0yLHMvPTIsbC89MixyLz0yfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gMT09PW8/dFtlXTp0LnJlYWRVSW50MTZCRShlKm8pfWlmKGkpe3ZhciB1PS0xO2ZvcihhPXI7YTxzO2ErKylpZihjKHQsYSk9PT1jKGUsLTE9PT11PzA6YS11KSl7aWYoLTE9PT11JiYodT1hKSxhLXUrMT09PWwpcmV0dXJuIHUqb31lbHNlLTEhPT11JiYoYS09YS11KSx1PS0xfWVsc2UgZm9yKHIrbD5zJiYocj1zLWwpLGE9cjthPj0wO2EtLSl7Zm9yKHZhciBoPSEwLGY9MDtmPGw7ZisrKWlmKGModCxhK2YpIT09YyhlLGYpKXtoPSExO2JyZWFrfWlmKGgpcmV0dXJuIGF9cmV0dXJuLTF9ZnVuY3Rpb24gbSh0LGUscixuKXtyPU51bWJlcihyKXx8MDt2YXIgaT10Lmxlbmd0aC1yO24/KG49TnVtYmVyKG4pKT5pJiYobj1pKTpuPWk7dmFyIGE9ZS5sZW5ndGg7bj5hLzImJihuPWEvMik7Zm9yKHZhciBvPTA7bzxuOysrbyl7dmFyIHM9cGFyc2VJbnQoZS5zdWJzdHIoMipvLDIpLDE2KTtpZihWKHMpKXJldHVybiBvO3RbcitvXT1zfXJldHVybiBvfWZ1bmN0aW9uIHkodCxlLHIsbil7cmV0dXJuIE4oRihlLHQubGVuZ3RoLXIpLHQscixuKX1mdW5jdGlvbiB4KHQsZSxyLG4pe3JldHVybiBOKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPTA7cjx0Lmxlbmd0aDsrK3IpZS5wdXNoKDI1NSZ0LmNoYXJDb2RlQXQocikpO3JldHVybiBlfShlKSx0LHIsbil9ZnVuY3Rpb24gYih0LGUscixuKXtyZXR1cm4geCh0LGUscixuKX1mdW5jdGlvbiBfKHQsZSxyLG4pe3JldHVybiBOKEIoZSksdCxyLG4pfWZ1bmN0aW9uIHcodCxlLHIsbil7cmV0dXJuIE4oZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpLGE9W10sbz0wO288dC5sZW5ndGgmJiEoKGUtPTIpPDApOysrbylyPXQuY2hhckNvZGVBdChvKSxuPXI+PjgsaT1yJTI1NixhLnB1c2goaSksYS5wdXNoKG4pO3JldHVybiBhfShlLHQubGVuZ3RoLXIpLHQscixuKX1mdW5jdGlvbiBrKHQsZSxyKXtyZXR1cm4gMD09PWUmJnI9PT10Lmxlbmd0aD9uLmZyb21CeXRlQXJyYXkodCk6bi5mcm9tQnl0ZUFycmF5KHQuc2xpY2UoZSxyKSl9ZnVuY3Rpb24gQSh0LGUscil7cj1NYXRoLm1pbih0Lmxlbmd0aCxyKTtmb3IodmFyIG49W10saT1lO2k8cjspe3ZhciBhLG8scyxsLGM9dFtpXSx1PW51bGwsaD1jPjIzOT80OmM+MjIzPzM6Yz4xOTE/MjoxO2lmKGkraDw9cilzd2l0Y2goaCl7Y2FzZSAxOmM8MTI4JiYodT1jKTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihhPXRbaSsxXSkpJiYobD0oMzEmYyk8PDZ8NjMmYSk+MTI3JiYodT1sKTticmVhaztjYXNlIDM6YT10W2krMV0sbz10W2krMl0sMTI4PT0oMTkyJmEpJiYxMjg9PSgxOTImbykmJihsPSgxNSZjKTw8MTJ8KDYzJmEpPDw2fDYzJm8pPjIwNDcmJihsPDU1Mjk2fHxsPjU3MzQzKSYmKHU9bCk7YnJlYWs7Y2FzZSA0OmE9dFtpKzFdLG89dFtpKzJdLHM9dFtpKzNdLDEyOD09KDE5MiZhKSYmMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJihsPSgxNSZjKTw8MTh8KDYzJmEpPDwxMnwoNjMmbyk8PDZ8NjMmcyk+NjU1MzUmJmw8MTExNDExMiYmKHU9bCl9bnVsbD09PXU/KHU9NjU1MzMsaD0xKTp1PjY1NTM1JiYodS09NjU1MzYsbi5wdXNoKHU+Pj4xMCYxMDIzfDU1Mjk2KSx1PTU2MzIwfDEwMjMmdSksbi5wdXNoKHUpLGkrPWh9cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGU8PVQpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLHQpO3ZhciByPVwiXCIsbj0wO2Zvcig7bjxlOylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyx0LnNsaWNlKG4sbis9VCkpO3JldHVybiByfShuKX1yLmtNYXhMZW5ndGg9YSxzLlRZUEVEX0FSUkFZX1NVUFBPUlQ9ZnVuY3Rpb24oKXt0cnl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoMSk7cmV0dXJuIHQuX19wcm90b19fPXtfX3Byb3RvX186VWludDhBcnJheS5wcm90b3R5cGUsZm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX0sNDI9PT10LmZvbygpfWNhdGNoKHQpe3JldHVybiExfX0oKSxzLlRZUEVEX0FSUkFZX1NVUFBPUlR8fFwidW5kZWZpbmVkXCI9PXR5cGVvZiBjb25zb2xlfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBjb25zb2xlLmVycm9yfHxjb25zb2xlLmVycm9yKFwiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuXCIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLnByb3RvdHlwZSxcInBhcmVudFwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKHMuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLnByb3RvdHlwZSxcIm9mZnNldFwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKHMuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnl0ZU9mZnNldH19KSxcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1TeW1ib2wuc3BlY2llcyYmc1tTeW1ib2wuc3BlY2llc109PT1zJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocyxTeW1ib2wuc3BlY2llcyx7dmFsdWU6bnVsbCxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMX0pLHMucG9vbFNpemU9ODE5MixzLmZyb209ZnVuY3Rpb24odCxlLHIpe3JldHVybiBsKHQsZSxyKX0scy5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLHMuX19wcm90b19fPVVpbnQ4QXJyYXkscy5hbGxvYz1mdW5jdGlvbih0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gYyh0KSx0PD0wP28odCk6dm9pZCAwIT09ZT9cInN0cmluZ1wiPT10eXBlb2Ygcj9vKHQpLmZpbGwoZSxyKTpvKHQpLmZpbGwoZSk6byh0KX0odCxlLHIpfSxzLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHQpe3JldHVybiB1KHQpfSxzLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih0KXtyZXR1cm4gdSh0KX0scy5pc0J1ZmZlcj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dCYmITA9PT10Ll9pc0J1ZmZlciYmdCE9PXMucHJvdG90eXBlfSxzLmNvbXBhcmU9ZnVuY3Rpb24odCxlKXtpZihqKHQsVWludDhBcnJheSkmJih0PXMuZnJvbSh0LHQub2Zmc2V0LHQuYnl0ZUxlbmd0aCkpLGooZSxVaW50OEFycmF5KSYmKGU9cy5mcm9tKGUsZS5vZmZzZXQsZS5ieXRlTGVuZ3RoKSksIXMuaXNCdWZmZXIodCl8fCFzLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImJ1ZjFcIiwgXCJidWYyXCIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZih0PT09ZSlyZXR1cm4gMDtmb3IodmFyIHI9dC5sZW5ndGgsbj1lLmxlbmd0aCxpPTAsYT1NYXRoLm1pbihyLG4pO2k8YTsrK2kpaWYodFtpXSE9PWVbaV0pe3I9dFtpXSxuPWVbaV07YnJlYWt9cmV0dXJuIHI8bj8tMTpuPHI/MTowfSxzLmlzRW5jb2Rpbmc9ZnVuY3Rpb24odCl7c3dpdGNoKFN0cmluZyh0KS50b0xvd2VyQ2FzZSgpKXtjYXNlXCJoZXhcIjpjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpjYXNlXCJhc2NpaVwiOmNhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOmNhc2VcImJhc2U2NFwiOmNhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxzLmNvbmNhdD1mdW5jdGlvbih0LGUpe2lmKCFBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gcy5hbGxvYygwKTt2YXIgcjtpZih2b2lkIDA9PT1lKWZvcihlPTAscj0wO3I8dC5sZW5ndGg7KytyKWUrPXRbcl0ubGVuZ3RoO3ZhciBuPXMuYWxsb2NVbnNhZmUoZSksaT0wO2ZvcihyPTA7cjx0Lmxlbmd0aDsrK3Ipe3ZhciBhPXRbcl07aWYoaihhLFVpbnQ4QXJyYXkpJiYoYT1zLmZyb20oYSkpLCFzLmlzQnVmZmVyKGEpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2EuY29weShuLGkpLGkrPWEubGVuZ3RofXJldHVybiBufSxzLmJ5dGVMZW5ndGg9cCxzLnByb3RvdHlwZS5faXNCdWZmZXI9ITAscy5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHNcIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTIpZCh0aGlzLGUsZSsxKTtyZXR1cm4gdGhpc30scy5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHNcIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTQpZCh0aGlzLGUsZSszKSxkKHRoaXMsZSsxLGUrMik7cmV0dXJuIHRoaXN9LHMucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO2lmKHQlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzXCIpO2Zvcih2YXIgZT0wO2U8dDtlKz04KWQodGhpcyxlLGUrNyksZCh0aGlzLGUrMSxlKzYpLGQodGhpcyxlKzIsZSs1KSxkKHRoaXMsZSszLGUrNCk7cmV0dXJuIHRoaXN9LHMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT10P1wiXCI6MD09PWFyZ3VtZW50cy5sZW5ndGg/QSh0aGlzLDAsdCk6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPSExO2lmKCh2b2lkIDA9PT1lfHxlPDApJiYoZT0wKSxlPnRoaXMubGVuZ3RoKXJldHVyblwiXCI7aWYoKHZvaWQgMD09PXJ8fHI+dGhpcy5sZW5ndGgpJiYocj10aGlzLmxlbmd0aCkscjw9MClyZXR1cm5cIlwiO2lmKChyPj4+PTApPD0oZT4+Pj0wKSlyZXR1cm5cIlwiO2Zvcih0fHwodD1cInV0ZjhcIik7Oylzd2l0Y2godCl7Y2FzZVwiaGV4XCI6cmV0dXJuIEUodGhpcyxlLHIpO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiBBKHRoaXMsZSxyKTtjYXNlXCJhc2NpaVwiOnJldHVybiBNKHRoaXMsZSxyKTtjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpyZXR1cm4gUyh0aGlzLGUscik7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIGsodGhpcyxlLHIpO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiBDKHRoaXMsZSxyKTtkZWZhdWx0OmlmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK3QpO3Q9KHQrXCJcIikudG9Mb3dlckNhc2UoKSxuPSEwfX0uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxzLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZz1zLnByb3RvdHlwZS50b1N0cmluZyxzLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7aWYoIXMuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXJcIik7cmV0dXJuIHRoaXM9PT10fHwwPT09cy5jb21wYXJlKHRoaXMsdCl9LHMucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgdD1cIlwiLGU9ci5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdD10aGlzLnRvU3RyaW5nKFwiaGV4XCIsMCxlKS5yZXBsYWNlKC8oLnsyfSkvZyxcIiQxIFwiKS50cmltKCksdGhpcy5sZW5ndGg+ZSYmKHQrPVwiIC4uLiBcIiksXCI8QnVmZmVyIFwiK3QrXCI+XCJ9LHMucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24odCxlLHIsbixpKXtpZihqKHQsVWludDhBcnJheSkmJih0PXMuZnJvbSh0LHQub2Zmc2V0LHQuYnl0ZUxlbmd0aCkpLCFzLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInRhcmdldFwiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdCk7aWYodm9pZCAwPT09ZSYmKGU9MCksdm9pZCAwPT09ciYmKHI9dD90Lmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksZTwwfHxyPnQubGVuZ3RofHxuPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvdXQgb2YgcmFuZ2UgaW5kZXhcIik7aWYobj49aSYmZT49cilyZXR1cm4gMDtpZihuPj1pKXJldHVybi0xO2lmKGU+PXIpcmV0dXJuIDE7aWYodGhpcz09PXQpcmV0dXJuIDA7Zm9yKHZhciBhPShpPj4+PTApLShuPj4+PTApLG89KHI+Pj49MCktKGU+Pj49MCksbD1NYXRoLm1pbihhLG8pLGM9dGhpcy5zbGljZShuLGkpLHU9dC5zbGljZShlLHIpLGg9MDtoPGw7KytoKWlmKGNbaF0hPT11W2hdKXthPWNbaF0sbz11W2hdO2JyZWFrfXJldHVybiBhPG8/LTE6bzxhPzE6MH0scy5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24odCxlLHIpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKHQsZSxyKX0scy5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbih0LGUscil7cmV0dXJuIGcodGhpcyx0LGUsciwhMCl9LHMucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZyh0aGlzLHQsZSxyLCExKX0scy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCxlLHIsbil7aWYodm9pZCAwPT09ZSluPVwidXRmOFwiLHI9dGhpcy5sZW5ndGgsZT0wO2Vsc2UgaWYodm9pZCAwPT09ciYmXCJzdHJpbmdcIj09dHlwZW9mIGUpbj1lLHI9dGhpcy5sZW5ndGgsZT0wO2Vsc2V7aWYoIWlzRmluaXRlKGUpKXRocm93IG5ldyBFcnJvcihcIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkXCIpO2U+Pj49MCxpc0Zpbml0ZShyKT8ocj4+Pj0wLHZvaWQgMD09PW4mJihuPVwidXRmOFwiKSk6KG49cixyPXZvaWQgMCl9dmFyIGk9dGhpcy5sZW5ndGgtZTtpZigodm9pZCAwPT09cnx8cj5pKSYmKHI9aSksdC5sZW5ndGg+MCYmKHI8MHx8ZTwwKXx8ZT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzXCIpO258fChuPVwidXRmOFwiKTtmb3IodmFyIGE9ITE7Oylzd2l0Y2gobil7Y2FzZVwiaGV4XCI6cmV0dXJuIG0odGhpcyx0LGUscik7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIHkodGhpcyx0LGUscik7Y2FzZVwiYXNjaWlcIjpyZXR1cm4geCh0aGlzLHQsZSxyKTtjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpyZXR1cm4gYih0aGlzLHQsZSxyKTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gXyh0aGlzLHQsZSxyKTtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gdyh0aGlzLHQsZSxyKTtkZWZhdWx0OmlmKGEpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK24pO249KFwiXCIrbikudG9Mb3dlckNhc2UoKSxhPSEwfX0scy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6XCJCdWZmZXJcIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBUPTQwOTY7ZnVuY3Rpb24gTSh0LGUscil7dmFyIG49XCJcIjtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgaT1lO2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmdFtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gUyh0LGUscil7dmFyIG49XCJcIjtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgaT1lO2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSh0W2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBFKHQsZSxyKXt2YXIgbj10Lmxlbmd0aDsoIWV8fGU8MCkmJihlPTApLCghcnx8cjwwfHxyPm4pJiYocj1uKTtmb3IodmFyIGk9XCJcIixhPWU7YTxyOysrYSlpKz1SKHRbYV0pO3JldHVybiBpfWZ1bmN0aW9uIEModCxlLHIpe2Zvcih2YXIgbj10LnNsaWNlKGUsciksaT1cIlwiLGE9MDthPG4ubGVuZ3RoO2ErPTIpaSs9U3RyaW5nLmZyb21DaGFyQ29kZShuW2FdKzI1NipuW2ErMV0pO3JldHVybiBpfWZ1bmN0aW9uIEwodCxlLHIpe2lmKHQlMSE9MHx8dDwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwib2Zmc2V0IGlzIG5vdCB1aW50XCIpO2lmKHQrZT5yKXRocm93IG5ldyBSYW5nZUVycm9yKFwiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aFwiKX1mdW5jdGlvbiB6KHQsZSxyLG4saSxhKXtpZighcy5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZihlPml8fGU8YSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihyK24+dC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIil9ZnVuY3Rpb24gTyh0LGUscixuLGksYSl7aWYocituPnQubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW5kZXggb3V0IG9mIHJhbmdlXCIpO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiBJKHQsZSxyLG4sYSl7cmV0dXJuIGU9K2Uscj4+Pj0wLGF8fE8odCwwLHIsNCksaS53cml0ZSh0LGUscixuLDIzLDQpLHIrNH1mdW5jdGlvbiBEKHQsZSxyLG4sYSl7cmV0dXJuIGU9K2Uscj4+Pj0wLGF8fE8odCwwLHIsOCksaS53cml0ZSh0LGUscixuLDUyLDgpLHIrOH1zLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoOyh0PX5+dCk8MD8odCs9cik8MCYmKHQ9MCk6dD5yJiYodD1yKSwoZT12b2lkIDA9PT1lP3I6fn5lKTwwPyhlKz1yKTwwJiYoZT0wKTplPnImJihlPXIpLGU8dCYmKGU9dCk7dmFyIG49dGhpcy5zdWJhcnJheSh0LGUpO3JldHVybiBuLl9fcHJvdG9fXz1zLnByb3RvdHlwZSxufSxzLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKHQsZSxyKXt0Pj4+PTAsZT4+Pj0wLHJ8fEwodCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1t0XSxpPTEsYT0wOysrYTxlJiYoaSo9MjU2KTspbis9dGhpc1t0K2FdKmk7cmV0dXJuIG59LHMucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8TCh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3QrLS1lXSxpPTE7ZT4wJiYoaSo9MjU2KTspbis9dGhpc1t0Ky0tZV0qaTtyZXR1cm4gbn0scy5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxMKHQsMSx0aGlzLmxlbmd0aCksdGhpc1t0XX0scy5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxMKHQsMix0aGlzLmxlbmd0aCksdGhpc1t0XXx0aGlzW3QrMV08PDh9LHMucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8TCh0LDIsdGhpcy5sZW5ndGgpLHRoaXNbdF08PDh8dGhpc1t0KzFdfSxzLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCw0LHRoaXMubGVuZ3RoKSwodGhpc1t0XXx0aGlzW3QrMV08PDh8dGhpc1t0KzJdPDwxNikrMTY3NzcyMTYqdGhpc1t0KzNdfSxzLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW3RdKyh0aGlzW3QrMV08PDE2fHRoaXNbdCsyXTw8OHx0aGlzW3QrM10pfSxzLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8TCh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3RdLGk9MSxhPTA7KythPGUmJihpKj0yNTYpOyluKz10aGlzW3QrYV0qaTtyZXR1cm4gbj49KGkqPTEyOCkmJihuLT1NYXRoLnBvdygyLDgqZSkpLG59LHMucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbih0LGUscil7dD4+Pj0wLGU+Pj49MCxyfHxMKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPWUsaT0xLGE9dGhpc1t0Ky0tbl07bj4wJiYoaSo9MjU2KTspYSs9dGhpc1t0Ky0tbl0qaTtyZXR1cm4gYT49KGkqPTEyOCkmJihhLT1NYXRoLnBvdygyLDgqZSkpLGF9LHMucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxMKHQsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbdF0/LTEqKDI1NS10aGlzW3RdKzEpOnRoaXNbdF19LHMucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKHQsZSl7dD4+Pj0wLGV8fEwodCwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW3RdfHRoaXNbdCsxXTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0scy5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24odCxlKXt0Pj4+PTAsZXx8TCh0LDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbdCsxXXx0aGlzW3RdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxzLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8TCh0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdF18dGhpc1t0KzFdPDw4fHRoaXNbdCsyXTw8MTZ8dGhpc1t0KzNdPDwyNH0scy5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCw0LHRoaXMubGVuZ3RoKSx0aGlzW3RdPDwyNHx0aGlzW3QrMV08PDE2fHRoaXNbdCsyXTw8OHx0aGlzW3QrM119LHMucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxMKHQsNCx0aGlzLmxlbmd0aCksaS5yZWFkKHRoaXMsdCwhMCwyMyw0KX0scy5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCw0LHRoaXMubGVuZ3RoKSxpLnJlYWQodGhpcyx0LCExLDIzLDQpfSxzLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCw4LHRoaXMubGVuZ3RoKSxpLnJlYWQodGhpcyx0LCEwLDUyLDgpfSxzLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCw4LHRoaXMubGVuZ3RoKSxpLnJlYWQodGhpcyx0LCExLDUyLDgpfSxzLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbih0LGUscixuKXsodD0rdCxlPj4+PTAscj4+Pj0wLG4pfHx6KHRoaXMsdCxlLHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9MSxhPTA7Zm9yKHRoaXNbZV09MjU1JnQ7KythPHImJihpKj0yNTYpOyl0aGlzW2UrYV09dC9pJjI1NTtyZXR1cm4gZStyfSxzLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbih0LGUscixuKXsodD0rdCxlPj4+PTAscj4+Pj0wLG4pfHx6KHRoaXMsdCxlLHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9ci0xLGE9MTtmb3IodGhpc1tlK2ldPTI1NSZ0Oy0taT49MCYmKGEqPTI1Nik7KXRoaXNbZStpXT10L2EmMjU1O3JldHVybiBlK3J9LHMucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDEsMjU1LDApLHRoaXNbZV09MjU1JnQsZSsxfSxzLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8eih0aGlzLHQsZSwyLDY1NTM1LDApLHRoaXNbZV09MjU1JnQsdGhpc1tlKzFdPXQ+Pj44LGUrMn0scy5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fHoodGhpcyx0LGUsMiw2NTUzNSwwKSx0aGlzW2VdPXQ+Pj44LHRoaXNbZSsxXT0yNTUmdCxlKzJ9LHMucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW2UrM109dD4+PjI0LHRoaXNbZSsyXT10Pj4+MTYsdGhpc1tlKzFdPXQ+Pj44LHRoaXNbZV09MjU1JnQsZSs0fSxzLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8eih0aGlzLHQsZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1tlXT10Pj4+MjQsdGhpc1tlKzFdPXQ+Pj4xNix0aGlzW2UrMl09dD4+PjgsdGhpc1tlKzNdPTI1NSZ0LGUrNH0scy5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbih0LGUscixuKXtpZih0PSt0LGU+Pj49MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7eih0aGlzLHQsZSxyLGktMSwtaSl9dmFyIGE9MCxvPTEscz0wO2Zvcih0aGlzW2VdPTI1NSZ0OysrYTxyJiYobyo9MjU2KTspdDwwJiYwPT09cyYmMCE9PXRoaXNbZSthLTFdJiYocz0xKSx0aGlzW2UrYV09KHQvbz4+MCktcyYyNTU7cmV0dXJuIGUrcn0scy5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbih0LGUscixuKXtpZih0PSt0LGU+Pj49MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7eih0aGlzLHQsZSxyLGktMSwtaSl9dmFyIGE9ci0xLG89MSxzPTA7Zm9yKHRoaXNbZSthXT0yNTUmdDstLWE+PTAmJihvKj0yNTYpOyl0PDAmJjA9PT1zJiYwIT09dGhpc1tlK2ErMV0mJihzPTEpLHRoaXNbZSthXT0odC9vPj4wKS1zJjI1NTtyZXR1cm4gZStyfSxzLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDEsMTI3LC0xMjgpLHQ8MCYmKHQ9MjU1K3QrMSksdGhpc1tlXT0yNTUmdCxlKzF9LHMucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fHoodGhpcyx0LGUsMiwzMjc2NywtMzI3NjgpLHRoaXNbZV09MjU1JnQsdGhpc1tlKzFdPXQ+Pj44LGUrMn0scy5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8eih0aGlzLHQsZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tlXT10Pj4+OCx0aGlzW2UrMV09MjU1JnQsZSsyfSxzLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsdGhpc1tlKzJdPXQ+Pj4xNix0aGlzW2UrM109dD4+PjI0LGUrNH0scy5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8eih0aGlzLHQsZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHQ8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpLHRoaXNbZV09dD4+PjI0LHRoaXNbZSsxXT10Pj4+MTYsdGhpc1tlKzJdPXQ+Pj44LHRoaXNbZSszXT0yNTUmdCxlKzR9LHMucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIEkodGhpcyx0LGUsITAscil9LHMucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIEkodGhpcyx0LGUsITEscil9LHMucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBEKHRoaXMsdCxlLCEwLHIpfSxzLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gRCh0aGlzLHQsZSwhMSxyKX0scy5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0LGUscixuKXtpZighcy5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyXCIpO2lmKHJ8fChyPTApLG58fDA9PT1ufHwobj10aGlzLmxlbmd0aCksZT49dC5sZW5ndGgmJihlPXQubGVuZ3RoKSxlfHwoZT0wKSxuPjAmJm48ciYmKG49ciksbj09PXIpcmV0dXJuIDA7aWYoMD09PXQubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kc1wiKTtpZihyPDB8fHI+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW5kZXggb3V0IG9mIHJhbmdlXCIpO2lmKG48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzXCIpO24+dGhpcy5sZW5ndGgmJihuPXRoaXMubGVuZ3RoKSx0Lmxlbmd0aC1lPG4tciYmKG49dC5sZW5ndGgtZStyKTt2YXIgaT1uLXI7aWYodGhpcz09PXQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4pdGhpcy5jb3B5V2l0aGluKGUscixuKTtlbHNlIGlmKHRoaXM9PT10JiZyPGUmJmU8bilmb3IodmFyIGE9aS0xO2E+PTA7LS1hKXRbYStlXT10aGlzW2Ercl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbCh0LHRoaXMuc3ViYXJyYXkocixuKSxlKTtyZXR1cm4gaX0scy5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbih0LGUscixuKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGU/KG49ZSxlPTAscj10aGlzLmxlbmd0aCk6XCJzdHJpbmdcIj09dHlwZW9mIHImJihuPXIscj10aGlzLmxlbmd0aCksdm9pZCAwIT09biYmXCJzdHJpbmdcIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcihcImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmdcIik7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4mJiFzLmlzRW5jb2RpbmcobikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK24pO2lmKDE9PT10Lmxlbmd0aCl7dmFyIGk9dC5jaGFyQ29kZUF0KDApOyhcInV0ZjhcIj09PW4mJmk8MTI4fHxcImxhdGluMVwiPT09bikmJih0PWkpfX1lbHNlXCJudW1iZXJcIj09dHlwZW9mIHQmJih0Jj0yNTUpO2lmKGU8MHx8dGhpcy5sZW5ndGg8ZXx8dGhpcy5sZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk91dCBvZiByYW5nZSBpbmRleFwiKTtpZihyPD1lKXJldHVybiB0aGlzO3ZhciBhO2lmKGU+Pj49MCxyPXZvaWQgMD09PXI/dGhpcy5sZW5ndGg6cj4+PjAsdHx8KHQ9MCksXCJudW1iZXJcIj09dHlwZW9mIHQpZm9yKGE9ZTthPHI7KythKXRoaXNbYV09dDtlbHNle3ZhciBvPXMuaXNCdWZmZXIodCk/dDpzLmZyb20odCxuKSxsPW8ubGVuZ3RoO2lmKDA9PT1sKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSBcIicrdCsnXCIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgXCJ2YWx1ZVwiJyk7Zm9yKGE9MDthPHItZTsrK2EpdGhpc1thK2VdPW9bYSVsXX1yZXR1cm4gdGhpc307dmFyIFA9L1teK1xcLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIFIodCl7cmV0dXJuIHQ8MTY/XCIwXCIrdC50b1N0cmluZygxNik6dC50b1N0cmluZygxNil9ZnVuY3Rpb24gRih0LGUpe3ZhciByO2U9ZXx8MS8wO2Zvcih2YXIgbj10Lmxlbmd0aCxpPW51bGwsYT1bXSxvPTA7bzxuOysrbyl7aWYoKHI9dC5jaGFyQ29kZUF0KG8pKT41NTI5NSYmcjw1NzM0NCl7aWYoIWkpe2lmKHI+NTYzMTkpeyhlLT0zKT4tMSYmYS5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihvKzE9PT1uKXsoZS09Myk+LTEmJmEucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aT1yO2NvbnRpbnVlfWlmKHI8NTYzMjApeyhlLT0zKT4tMSYmYS5wdXNoKDIzOSwxOTEsMTg5KSxpPXI7Y29udGludWV9cj02NTUzNisoaS01NTI5Njw8MTB8ci01NjMyMCl9ZWxzZSBpJiYoZS09Myk+LTEmJmEucHVzaCgyMzksMTkxLDE4OSk7aWYoaT1udWxsLHI8MTI4KXtpZigoZS09MSk8MClicmVhazthLnB1c2gocil9ZWxzZSBpZihyPDIwNDgpe2lmKChlLT0yKTwwKWJyZWFrO2EucHVzaChyPj42fDE5Miw2MyZyfDEyOCl9ZWxzZSBpZihyPDY1NTM2KXtpZigoZS09Myk8MClicmVhazthLnB1c2gocj4+MTJ8MjI0LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX1lbHNle2lmKCEocjwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNvZGUgcG9pbnRcIik7aWYoKGUtPTQpPDApYnJlYWs7YS5wdXNoKHI+PjE4fDI0MCxyPj4xMiY2M3wxMjgscj4+NiY2M3wxMjgsNjMmcnwxMjgpfX1yZXR1cm4gYX1mdW5jdGlvbiBCKHQpe3JldHVybiBuLnRvQnl0ZUFycmF5KGZ1bmN0aW9uKHQpe2lmKCh0PSh0PXQuc3BsaXQoXCI9XCIpWzBdKS50cmltKCkucmVwbGFjZShQLFwiXCIpKS5sZW5ndGg8MilyZXR1cm5cIlwiO2Zvcig7dC5sZW5ndGglNCE9MDspdCs9XCI9XCI7cmV0dXJuIHR9KHQpKX1mdW5jdGlvbiBOKHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8biYmIShpK3I+PWUubGVuZ3RofHxpPj10Lmxlbmd0aCk7KytpKWVbaStyXT10W2ldO3JldHVybiBpfWZ1bmN0aW9uIGoodCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIGV8fG51bGwhPXQmJm51bGwhPXQuY29uc3RydWN0b3ImJm51bGwhPXQuY29uc3RydWN0b3IubmFtZSYmdC5jb25zdHJ1Y3Rvci5uYW1lPT09ZS5uYW1lfWZ1bmN0aW9uIFYodCl7cmV0dXJuIHQhPXR9fSx7XCJiYXNlNjQtanNcIjo2NSxpZWVlNzU0OjQwNX1dLDk3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vbGliL21vbm90b25lXCIpLGk9dChcIi4vbGliL3RyaWFuZ3VsYXRpb25cIiksYT10KFwiLi9saWIvZGVsYXVuYXlcIiksbz10KFwiLi9saWIvZmlsdGVyXCIpO2Z1bmN0aW9uIHModCl7cmV0dXJuW01hdGgubWluKHRbMF0sdFsxXSksTWF0aC5tYXgodFswXSx0WzFdKV19ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXX1mdW5jdGlvbiBjKHQsZSxyKXtyZXR1cm4gZSBpbiB0P3RbZV06cn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe0FycmF5LmlzQXJyYXkoZSk/KHI9cnx8e30sZT1lfHxbXSk6KHI9ZXx8e30sZT1bXSk7dmFyIHU9ISFjKHIsXCJkZWxhdW5heVwiLCEwKSxoPSEhYyhyLFwiaW50ZXJpb3JcIiwhMCksZj0hIWMocixcImV4dGVyaW9yXCIsITApLHA9ISFjKHIsXCJpbmZpbml0eVwiLCExKTtpZighaCYmIWZ8fDA9PT10Lmxlbmd0aClyZXR1cm5bXTt2YXIgZD1uKHQsZSk7aWYodXx8aCE9PWZ8fHApe2Zvcih2YXIgZz1pKHQubGVuZ3RoLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChzKS5zb3J0KGwpfShlKSksdj0wO3Y8ZC5sZW5ndGg7Kyt2KXt2YXIgbT1kW3ZdO2cuYWRkVHJpYW5nbGUobVswXSxtWzFdLG1bMl0pfXJldHVybiB1JiZhKHQsZyksZj9oP3A/byhnLDAscCk6Zy5jZWxscygpOm8oZywxLHApOm8oZywtMSl9cmV0dXJuIGR9fSx7XCIuL2xpYi9kZWxhdW5heVwiOjk4LFwiLi9saWIvZmlsdGVyXCI6OTksXCIuL2xpYi9tb25vdG9uZVwiOjEwMCxcIi4vbGliL3RyaWFuZ3VsYXRpb25cIjoxMDF9XSw5ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJyb2J1c3QtaW4tc3BoZXJlXCIpWzRdO3QoXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiKTtmdW5jdGlvbiBpKHQsZSxyLGksYSxvKXt2YXIgcz1lLm9wcG9zaXRlKGksYSk7aWYoIShzPDApKXtpZihhPGkpe3ZhciBsPWk7aT1hLGE9bCxsPW8sbz1zLHM9bH1lLmlzQ29uc3RyYWludChpLGEpfHxuKHRbaV0sdFthXSx0W29dLHRbc10pPDAmJnIucHVzaChpLGEpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sYT10Lmxlbmd0aCxvPWUuc3RhcnMscz0wO3M8YTsrK3MpZm9yKHZhciBsPW9bc10sYz0xO2M8bC5sZW5ndGg7Yys9Mil7dmFyIHU9bFtjXTtpZighKHU8cykmJiFlLmlzQ29uc3RyYWludChzLHUpKXtmb3IodmFyIGg9bFtjLTFdLGY9LTEscD0xO3A8bC5sZW5ndGg7cCs9MilpZihsW3AtMV09PT11KXtmPWxbcF07YnJlYWt9ZjwwfHxuKHRbc10sdFt1XSx0W2hdLHRbZl0pPDAmJnIucHVzaChzLHUpfX1mb3IoO3IubGVuZ3RoPjA7KXtmb3IodmFyIHU9ci5wb3AoKSxzPXIucG9wKCksaD0tMSxmPS0xLGw9b1tzXSxkPTE7ZDxsLmxlbmd0aDtkKz0yKXt2YXIgZz1sW2QtMV0sdj1sW2RdO2c9PT11P2Y9djp2PT09dSYmKGg9Zyl9aDwwfHxmPDB8fChuKHRbc10sdFt1XSx0W2hdLHRbZl0pPj0wfHwoZS5mbGlwKHMsdSksaSh0LGUscixoLHMsZiksaSh0LGUscixzLGYsaCksaSh0LGUscixmLHUsaCksaSh0LGUscix1LGgsZikpKX19fSx7XCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiOjEwMixcInJvYnVzdC1pbi1zcGhlcmVcIjo0OTN9XSw5OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuLGk9dChcImJpbmFyeS1zZWFyY2gtYm91bmRzXCIpO2Z1bmN0aW9uIGEodCxlLHIsbixpLGEsbyl7dGhpcy5jZWxscz10LHRoaXMubmVpZ2hib3I9ZSx0aGlzLmZsYWdzPW4sdGhpcy5jb25zdHJhaW50PXIsdGhpcy5hY3RpdmU9aSx0aGlzLm5leHQ9YSx0aGlzLmJvdW5kYXJ5PW99ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXXx8dFsyXS1lWzJdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jZWxscygpLG49ci5sZW5ndGgsaT0wO2k8bjsrK2kpe3ZhciBzPXJbaV0sbD1zWzBdLGM9c1sxXSx1PXNbMl07Yzx1P2M8bCYmKHNbMF09YyxzWzFdPXUsc1syXT1sKTp1PGwmJihzWzBdPXUsc1sxXT1sLHNbMl09Yyl9ci5zb3J0KG8pO2Zvcih2YXIgaD1uZXcgQXJyYXkobiksaT0wO2k8aC5sZW5ndGg7KytpKWhbaV09MDt2YXIgZj1bXSxwPVtdLGQ9bmV3IEFycmF5KDMqbiksZz1uZXcgQXJyYXkoMypuKSx2PW51bGw7ZSYmKHY9W10pO2Zvcih2YXIgbT1uZXcgYShyLGQsZyxoLGYscCx2KSxpPTA7aTxuOysraSlmb3IodmFyIHM9cltpXSx5PTA7eTwzOysreSl7dmFyIGw9c1t5XSxjPXNbKHkrMSklM10seD1kWzMqaSt5XT1tLmxvY2F0ZShjLGwsdC5vcHBvc2l0ZShjLGwpKSxiPWdbMyppK3ldPXQuaXNDb25zdHJhaW50KGwsYyk7eDwwJiYoYj9wLnB1c2goaSk6KGYucHVzaChpKSxoW2ldPTEpLGUmJnYucHVzaChbYyxsLC0xXSkpfXJldHVybiBtfSh0LHIpO2lmKDA9PT1lKXJldHVybiByP24uY2VsbHMuY29uY2F0KG4uYm91bmRhcnkpOm4uY2VsbHM7dmFyIGk9MSxzPW4uYWN0aXZlLGw9bi5uZXh0LGM9bi5mbGFncyx1PW4uY2VsbHMsaD1uLmNvbnN0cmFpbnQsZj1uLm5laWdoYm9yO2Zvcig7cy5sZW5ndGg+MHx8bC5sZW5ndGg+MDspe2Zvcig7cy5sZW5ndGg+MDspe3ZhciBwPXMucG9wKCk7aWYoY1twXSE9PS1pKXtjW3BdPWk7dVtwXTtmb3IodmFyIGQ9MDtkPDM7KytkKXt2YXIgZz1mWzMqcCtkXTtnPj0wJiYwPT09Y1tnXSYmKGhbMypwK2RdP2wucHVzaChnKToocy5wdXNoKGcpLGNbZ109aSkpfX19dmFyIHY9bDtsPXMscz12LGwubGVuZ3RoPTAsaT0taX12YXIgbT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTAsaT0wO2k8dC5sZW5ndGg7KytpKWVbaV09PT1yJiYodFtuKytdPXRbaV0pO3JldHVybiB0Lmxlbmd0aD1uLHR9KHUsYyxlKTtpZihyKXJldHVybiBtLmNvbmNhdChuLmJvdW5kYXJ5KTtyZXR1cm4gbX0sYS5wcm90b3R5cGUubG9jYXRlPShuPVswLDAsMF0sZnVuY3Rpb24odCxlLHIpe3ZhciBhPXQscz1lLGw9cjtyZXR1cm4gZTxyP2U8dCYmKGE9ZSxzPXIsbD10KTpyPHQmJihhPXIscz10LGw9ZSksYTwwPy0xOihuWzBdPWEsblsxXT1zLG5bMl09bCxpLmVxKHRoaXMuY2VsbHMsbixvKSl9KX0se1wiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIjoxMDJ9XSwxMDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIiksaT10KFwicm9idXN0LW9yaWVudGF0aW9uXCIpWzNdLGE9MCxvPTEscz0yO2Z1bmN0aW9uIGwodCxlLHIsbixpKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmlkeD1yLHRoaXMubG93ZXJJZHM9bix0aGlzLnVwcGVySWRzPWl9ZnVuY3Rpb24gYyh0LGUscixuKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLnR5cGU9cix0aGlzLmlkeD1ufWZ1bmN0aW9uIHUodCxlKXt2YXIgcj10LmFbMF0tZS5hWzBdfHx0LmFbMV0tZS5hWzFdfHx0LnR5cGUtZS50eXBlO3JldHVybiByfHwodC50eXBlIT09YSYmKHI9aSh0LmEsdC5iLGUuYikpP3I6dC5pZHgtZS5pZHgpfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gaSh0LmEsdC5iLGUpfWZ1bmN0aW9uIGYodCxlLHIsYSxvKXtmb3IodmFyIHM9bi5sdChlLGEsaCksbD1uLmd0KGUsYSxoKSxjPXM7YzxsOysrYyl7Zm9yKHZhciB1PWVbY10sZj11Lmxvd2VySWRzLHA9Zi5sZW5ndGg7cD4xJiZpKHJbZltwLTJdXSxyW2ZbcC0xXV0sYSk+MDspdC5wdXNoKFtmW3AtMV0sZltwLTJdLG9dKSxwLT0xO2YubGVuZ3RoPXAsZi5wdXNoKG8pO3ZhciBkPXUudXBwZXJJZHM7Zm9yKHA9ZC5sZW5ndGg7cD4xJiZpKHJbZFtwLTJdXSxyW2RbcC0xXV0sYSk8MDspdC5wdXNoKFtkW3AtMl0sZFtwLTFdLG9dKSxwLT0xO2QubGVuZ3RoPXAsZC5wdXNoKG8pfX1mdW5jdGlvbiBwKHQsZSl7dmFyIHI7cmV0dXJuKHI9dC5hWzBdPGUuYVswXT9pKHQuYSx0LmIsZS5hKTppKGUuYixlLmEsdC5hKSk/cjoocj1lLmJbMF08dC5iWzBdP2kodC5hLHQuYixlLmIpOmkoZS5iLGUuYSx0LmIpKXx8dC5pZHgtZS5pZHh9ZnVuY3Rpb24gZCh0LGUscil7dmFyIGk9bi5sZSh0LHIscCksYT10W2ldLG89YS51cHBlcklkcyxzPW9bby5sZW5ndGgtMV07YS51cHBlcklkcz1bc10sdC5zcGxpY2UoaSsxLDAsbmV3IGwoci5hLHIuYixyLmlkeCxbc10sbykpfWZ1bmN0aW9uIGcodCxlLHIpe3ZhciBpPXIuYTtyLmE9ci5iLHIuYj1pO3ZhciBhPW4uZXEodCxyLHApLG89dFthXTt0W2EtMV0udXBwZXJJZHM9by51cHBlcklkcyx0LnNwbGljZShhLDEpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPWUubGVuZ3RoLGk9W10saD0wO2g8cjsrK2gpaS5wdXNoKG5ldyBjKHRbaF0sbnVsbCxhLGgpKTtmb3IodmFyIGg9MDtoPG47KytoKXt2YXIgcD1lW2hdLHY9dFtwWzBdXSxtPXRbcFsxXV07dlswXTxtWzBdP2kucHVzaChuZXcgYyh2LG0scyxoKSxuZXcgYyhtLHYsbyxoKSk6dlswXT5tWzBdJiZpLnB1c2gobmV3IGMobSx2LHMsaCksbmV3IGModixtLG8saCkpfWkuc29ydCh1KTtmb3IodmFyIHk9aVswXS5hWzBdLSgxK01hdGguYWJzKGlbMF0uYVswXSkpKk1hdGgucG93KDIsLTUyKSx4PVtuZXcgbChbeSwxXSxbeSwwXSwtMSxbXSxbXSxbXSxbXSldLGI9W10saD0wLF89aS5sZW5ndGg7aDxfOysraCl7dmFyIHc9aVtoXSxrPXcudHlwZTtrPT09YT9mKGIseCx0LHcuYSx3LmlkeCk6az09PXM/ZCh4LHQsdyk6Zyh4LHQsdyl9cmV0dXJuIGJ9fSx7XCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiOjEwMixcInJvYnVzdC1vcmllbnRhdGlvblwiOjQ5NX1dLDEwMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiKTtmdW5jdGlvbiBpKHQsZSl7dGhpcy5zdGFycz10LHRoaXMuZWRnZXM9ZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09W107cmV0dXJuIG5ldyBpKHIsZSl9O3ZhciBhPWkucHJvdG90eXBlO2Z1bmN0aW9uIG8odCxlLHIpe2Zvcih2YXIgbj0xLGk9dC5sZW5ndGg7bjxpO24rPTIpaWYodFtuLTFdPT09ZSYmdFtuXT09PXIpcmV0dXJuIHRbbi0xXT10W2ktMl0sdFtuXT10W2ktMV0sdm9pZCh0Lmxlbmd0aD1pLTIpfWEuaXNDb25zdHJhaW50PWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF07ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXX1yZXR1cm4gZnVuY3Rpb24ocixpKXtyZXR1cm4gdFswXT1NYXRoLm1pbihyLGkpLHRbMV09TWF0aC5tYXgocixpKSxuLmVxKHRoaXMuZWRnZXMsdCxlKT49MH19KCksYS5yZW1vdmVUcmlhbmdsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5zdGFycztvKG5bdF0sZSxyKSxvKG5bZV0scix0KSxvKG5bcl0sdCxlKX0sYS5hZGRUcmlhbmdsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5zdGFycztuW3RdLnB1c2goZSxyKSxuW2VdLnB1c2gocix0KSxuW3JdLnB1c2godCxlKX0sYS5vcHBvc2l0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLnN0YXJzW2VdLG49MSxpPXIubGVuZ3RoO248aTtuKz0yKWlmKHJbbl09PT10KXJldHVybiByW24tMV07cmV0dXJuLTF9LGEuZmxpcD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMub3Bwb3NpdGUodCxlKSxuPXRoaXMub3Bwb3NpdGUoZSx0KTt0aGlzLnJlbW92ZVRyaWFuZ2xlKHQsZSxyKSx0aGlzLnJlbW92ZVRyaWFuZ2xlKGUsdCxuKSx0aGlzLmFkZFRyaWFuZ2xlKHQsbixyKSx0aGlzLmFkZFRyaWFuZ2xlKGUscixuKX0sYS5lZGdlcz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN0YXJzLGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxhPTAsbz1pLmxlbmd0aDthPG87YSs9MillLnB1c2goW2lbYV0saVthKzFdXSk7cmV0dXJuIGV9LGEuY2VsbHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5zdGFycyxlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sYT0wLG89aS5sZW5ndGg7YTxvO2ErPTIpe3ZhciBzPWlbYV0sbD1pW2ErMV07cjxNYXRoLm1pbihzLGwpJiZlLnB1c2goW3IscyxsXSl9cmV0dXJuIGV9fSx7XCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiOjEwMn1dLDEwMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlLHIsbixpKXt2YXIgYT1bXCJmdW5jdGlvbiBcIix0LFwiKGEsbCxoLFwiLG4uam9pbihcIixcIiksXCIpe1wiLGk/XCJcIjpcInZhciBpPVwiLHI/XCJsLTFcIjpcImgrMVwiLFwiO3doaWxlKGw8PWgpe3ZhciBtPShsK2gpPj4+MSx4PWFbbV1cIl07cmV0dXJuIGk/ZS5pbmRleE9mKFwiY1wiKTwwP2EucHVzaChcIjtpZih4PT09eSl7cmV0dXJuIG19ZWxzZSBpZih4PD15KXtcIik6YS5wdXNoKFwiO3ZhciBwPWMoeCx5KTtpZihwPT09MCl7cmV0dXJuIG19ZWxzZSBpZihwPD0wKXtcIik6YS5wdXNoKFwiO2lmKFwiLGUsXCIpe2k9bTtcIikscj9hLnB1c2goXCJsPW0rMX1lbHNle2g9bS0xfVwiKTphLnB1c2goXCJoPW0tMX1lbHNle2w9bSsxfVwiKSxhLnB1c2goXCJ9XCIpLGk/YS5wdXNoKFwicmV0dXJuIC0xfTtcIik6YS5wdXNoKFwicmV0dXJuIGl9O1wiKSxhLmpvaW4oXCJcIil9ZnVuY3Rpb24gaSh0LGUscixpKXtyZXR1cm4gbmV3IEZ1bmN0aW9uKFtuKFwiQVwiLFwieFwiK3QrXCJ5XCIsZSxbXCJ5XCJdLGkpLG4oXCJQXCIsXCJjKHgseSlcIit0K1wiMFwiLGUsW1wieVwiLFwiY1wiXSxpKSxcImZ1bmN0aW9uIGRpc3BhdGNoQnNlYXJjaFwiLHIsXCIoYSx5LGMsbCxoKXtpZih0eXBlb2YoYyk9PT0nZnVuY3Rpb24nKXtyZXR1cm4gUChhLChsPT09dm9pZCAwKT8wOmx8MCwoaD09PXZvaWQgMCk/YS5sZW5ndGgtMTpofDAseSxjKX1lbHNle3JldHVybiBBKGEsKGM9PT12b2lkIDApPzA6Y3wwLChsPT09dm9pZCAwKT9hLmxlbmd0aC0xOmx8MCx5KX19cmV0dXJuIGRpc3BhdGNoQnNlYXJjaFwiLHJdLmpvaW4oXCJcIikpKCl9ZS5leHBvcnRzPXtnZTppKFwiPj1cIiwhMSxcIkdFXCIpLGd0OmkoXCI+XCIsITEsXCJHVFwiKSxsdDppKFwiPFwiLCEwLFwiTFRcIiksbGU6aShcIjw9XCIsITAsXCJMRVwiKSxlcTppKFwiLVwiLCEwLFwiRVFcIiwhMCl9fSx7fV0sMTAzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xLHI9MTtyPHQubGVuZ3RoOysrcilmb3IodmFyIG49MDtuPHI7KytuKWlmKHRbcl08dFtuXSllPS1lO2Vsc2UgaWYodFtuXT09PXRbcl0pcmV0dXJuIDA7cmV0dXJuIGV9fSx7fV0sMTA0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImR1cFwiKSxpPXQoXCJyb2J1c3QtbGluZWFyLXNvbHZlXCIpO2Z1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLGk9MDtpPG47KytpKXIrPXRbaV0qZVtpXTtyZXR1cm4gcn1mdW5jdGlvbiBvKHQpe3ZhciBlPXQubGVuZ3RoO2lmKDA9PT1lKXJldHVybltdO3RbMF0ubGVuZ3RoO3ZhciByPW4oW3QubGVuZ3RoKzEsdC5sZW5ndGgrMV0sMSksbz1uKFt0Lmxlbmd0aCsxXSwxKTtyW2VdW2VdPTA7Zm9yKHZhciBzPTA7czxlOysrcyl7Zm9yKHZhciBsPTA7bDw9czsrK2wpcltsXVtzXT1yW3NdW2xdPTIqYSh0W3NdLHRbbF0pO29bc109YSh0W3NdLHRbc10pfXZhciBjPWkocixvKSx1PTAsaD1jW2UrMV07Zm9yKHM9MDtzPGgubGVuZ3RoOysrcyl1Kz1oW3NdO3ZhciBmPW5ldyBBcnJheShlKTtmb3Iocz0wO3M8ZTsrK3Mpe2g9Y1tzXTt2YXIgcD0wO2ZvcihsPTA7bDxoLmxlbmd0aDsrK2wpcCs9aFtsXTtmW3NdPXAvdX1yZXR1cm4gZn1mdW5jdGlvbiBzKHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm5bXTtmb3IodmFyIGU9dFswXS5sZW5ndGgscj1uKFtlXSksaT1vKHQpLGE9MDthPHQubGVuZ3RoOysrYSlmb3IodmFyIHM9MDtzPGU7KytzKXJbc10rPXRbYV1bc10qaVthXTtyZXR1cm4gcn1zLmJhcnljZW5ldHJpYz1vLGUuZXhwb3J0cz1zfSx7ZHVwOjE2MixcInJvYnVzdC1saW5lYXItc29sdmVcIjo0OTR9XSwxMDU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW4odCkscj0wLGk9MDtpPHQubGVuZ3RoOysraSlmb3IodmFyIGE9dFtpXSxvPTA7bzxlLmxlbmd0aDsrK28pcis9TWF0aC5wb3coYVtvXS1lW29dLDIpO3JldHVybiBNYXRoLnNxcnQoci90Lmxlbmd0aCl9O3ZhciBuPXQoXCJjaXJjdW1jZW50ZXJcIil9LHtjaXJjdW1jZW50ZXI6MTA0fV0sMTA2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZTxyP3Q8ZT9lOnQ+cj9yOnQ6dDxyP3I6dD5lP2U6dH19LHt9XSwxMDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuO2lmKHIpe249ZTtmb3IodmFyIGk9bmV3IEFycmF5KGUubGVuZ3RoKSxhPTA7YTxlLmxlbmd0aDsrK2Epe3ZhciBvPWVbYV07aVthXT1bb1swXSxvWzFdLHJbYV1dfWU9aX12YXIgcz1mdW5jdGlvbih0LGUscil7dmFyIG49ZCh0LFtdLHAodCkpO3JldHVybiBtKGUsbixyKSwhIW59KHQsZSwhIXIpO2Zvcig7eSh0LGUsISFyKTspcz0hMDtpZihyJiZzKXtuLmxlbmd0aD0wLHIubGVuZ3RoPTA7Zm9yKHZhciBhPTA7YTxlLmxlbmd0aDsrK2Epe3ZhciBvPWVbYV07bi5wdXNoKFtvWzBdLG9bMV1dKSxyLnB1c2gob1syXSl9fXJldHVybiBzfTt2YXIgbj10KFwidW5pb24tZmluZFwiKSxpPXQoXCJib3gtaW50ZXJzZWN0XCIpLGE9dChcInJvYnVzdC1zZWdtZW50LWludGVyc2VjdFwiKSxvPXQoXCJiaWctcmF0XCIpLHM9dChcImJpZy1yYXQvY21wXCIpLGw9dChcImJpZy1yYXQvdG8tZmxvYXRcIiksYz10KFwicmF0LXZlY1wiKSx1PXQoXCJuZXh0YWZ0ZXJcIiksaD10KFwiLi9saWIvcmF0LXNlZy1pbnRlcnNlY3RcIik7ZnVuY3Rpb24gZih0KXt2YXIgZT1sKHQpO3JldHVyblt1KGUsLTEvMCksdShlLDEvMCldfWZ1bmN0aW9uIHAodCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbj10W3JdO2Vbcl09W3UoblswXSwtMS8wKSx1KG5bMV0sLTEvMCksdShuWzBdLDEvMCksdShuWzFdLDEvMCldfXJldHVybiBlfWZ1bmN0aW9uIGQodCxlLHIpe2Zvcih2YXIgYT1lLmxlbmd0aCxvPW5ldyBuKGEpLHM9W10sbD0wO2w8ZS5sZW5ndGg7KytsKXt2YXIgYz1lW2xdLGg9ZihjWzBdKSxwPWYoY1sxXSk7cy5wdXNoKFt1KGhbMF0sLTEvMCksdShwWzBdLC0xLzApLHUoaFsxXSwxLzApLHUocFsxXSwxLzApXSl9aShzLGZ1bmN0aW9uKHQsZSl7by5saW5rKHQsZSl9KTt2YXIgZD0hMCxnPW5ldyBBcnJheShhKTtmb3IobD0wO2w8YTsrK2wpeyhtPW8uZmluZChsKSkhPT1sJiYoZD0hMSx0W21dPVtNYXRoLm1pbih0W2xdWzBdLHRbbV1bMF0pLE1hdGgubWluKHRbbF1bMV0sdFttXVsxXSldKX1pZihkKXJldHVybiBudWxsO3ZhciB2PTA7Zm9yKGw9MDtsPGE7KytsKXt2YXIgbTsobT1vLmZpbmQobCkpPT09bD8oZ1tsXT12LHRbdisrXT10W2xdKTpnW2xdPS0xfXQubGVuZ3RoPXY7Zm9yKGw9MDtsPGE7KytsKWdbbF08MCYmKGdbbF09Z1tvLmZpbmQobCldKTtyZXR1cm4gZ31mdW5jdGlvbiBnKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIHYodCxlKXt2YXIgcj10WzBdLWVbMF18fHRbMV0tZVsxXTtyZXR1cm4gcnx8KHRbMl08ZVsyXT8tMTp0WzJdPmVbMl0/MTowKX1mdW5jdGlvbiBtKHQsZSxyKXtpZigwIT09dC5sZW5ndGgpe2lmKGUpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBpPWVbKG89dFtuXSlbMF1dLGE9ZVtvWzFdXTtvWzBdPU1hdGgubWluKGksYSksb1sxXT1NYXRoLm1heChpLGEpfWVsc2UgZm9yKG49MDtuPHQubGVuZ3RoOysrbil7dmFyIG87aT0obz10W25dKVswXSxhPW9bMV07b1swXT1NYXRoLm1pbihpLGEpLG9bMV09TWF0aC5tYXgoaSxhKX1yP3Quc29ydCh2KTp0LnNvcnQoZyk7dmFyIHM9MTtmb3Iobj0xO248dC5sZW5ndGg7KytuKXt2YXIgbD10W24tMV0sYz10W25dOyhjWzBdIT09bFswXXx8Y1sxXSE9PWxbMV18fHImJmNbMl0hPT1sWzJdKSYmKHRbcysrXT1jKX10Lmxlbmd0aD1zfX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZS5sZW5ndGgpLG49MDtuPGUubGVuZ3RoOysrbil7dmFyIGk9ZVtuXSxhPXRbaVswXV0sbz10W2lbMV1dO3Jbbl09W3UoTWF0aC5taW4oYVswXSxvWzBdKSwtMS8wKSx1KE1hdGgubWluKGFbMV0sb1sxXSksLTEvMCksdShNYXRoLm1heChhWzBdLG9bMF0pLDEvMCksdShNYXRoLm1heChhWzFdLG9bMV0pLDEvMCldfXJldHVybiByfSh0LGUpLGY9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVtdO3JldHVybiBpKHIsZnVuY3Rpb24ocixpKXt2YXIgbz1lW3JdLHM9ZVtpXTtpZihvWzBdIT09c1swXSYmb1swXSE9PXNbMV0mJm9bMV0hPT1zWzBdJiZvWzFdIT09c1sxXSl7dmFyIGw9dFtvWzBdXSxjPXRbb1sxXV0sdT10W3NbMF1dLGg9dFtzWzFdXTthKGwsYyx1LGgpJiZuLnB1c2goW3IsaV0pfX0pLG59KHQsZSxuKSxnPXAodCksdj1mdW5jdGlvbih0LGUscixuKXt2YXIgbz1bXTtyZXR1cm4gaShyLG4sZnVuY3Rpb24ocixuKXt2YXIgaT1lW3JdO2lmKGlbMF0hPT1uJiZpWzFdIT09bil7dmFyIHM9dFtuXSxsPXRbaVswXV0sYz10W2lbMV1dO2EobCxjLHMscykmJm8ucHVzaChbcixuXSl9fSksb30odCxlLG4sZykseT1kKHQsZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSx1LGY9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW28odFswXSksbyh0WzFdKV19KTtmb3IoYT0wO2E8ci5sZW5ndGg7KythKXt2YXIgcD1yW2FdO3U9cFswXTt2YXIgZD1wWzFdLGc9ZVt1XSx2PWVbZF0sbT1oKGModFtnWzBdXSksYyh0W2dbMV1dKSxjKHRbdlswXV0pLGModFt2WzFdXSkpO2lmKG0pe3ZhciB5PXQubGVuZ3RoO3QucHVzaChbbChtWzBdKSxsKG1bMV0pXSksZi5wdXNoKG0pLG4ucHVzaChbdSx5XSxbZCx5XSl9fWZvcihuLnNvcnQoZnVuY3Rpb24odCxlKXtpZih0WzBdIT09ZVswXSlyZXR1cm4gdFswXS1lWzBdO3ZhciByPWZbdFsxXV0sbj1mW2VbMV1dO3JldHVybiBzKHJbMF0sblswXSl8fHMoclsxXSxuWzFdKX0pLGE9bi5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIHg9ZVt1PShTPW5bYV0pWzBdXSxiPXhbMF0sXz14WzFdLHc9dFtiXSxrPXRbX107aWYoKHdbMF0ta1swXXx8d1sxXS1rWzFdKTwwKXt2YXIgQT1iO2I9XyxfPUF9eFswXT1iO3ZhciBULE09eFsxXT1TWzFdO2ZvcihpJiYoVD14WzJdKTthPjAmJm5bYS0xXVswXT09PXU7KXt2YXIgUyxFPShTPW5bLS1hXSlbMV07aT9lLnB1c2goW00sRSxUXSk6ZS5wdXNoKFtNLEVdKSxNPUV9aT9lLnB1c2goW00sXyxUXSk6ZS5wdXNoKFtNLF9dKX1yZXR1cm4gZn0odCxlLGYsdixyKSk7cmV0dXJuIG0oZSx5LHIpLCEheXx8KGYubGVuZ3RoPjB8fHYubGVuZ3RoPjApfX0se1wiLi9saWIvcmF0LXNlZy1pbnRlcnNlY3RcIjoxMDgsXCJiaWctcmF0XCI6NjksXCJiaWctcmF0L2NtcFwiOjY3LFwiYmlnLXJhdC90by1mbG9hdFwiOjgxLFwiYm94LWludGVyc2VjdFwiOjg3LG5leHRhZnRlcjo0NDQsXCJyYXQtdmVjXCI6NDc5LFwicm9idXN0LXNlZ21lbnQtaW50ZXJzZWN0XCI6NDk4LFwidW5pb24tZmluZFwiOjUzMX1dLDEwODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgYT1zKGUsdCksaD1zKG4sciksZj11KGEsaCk7aWYoMD09PW8oZikpcmV0dXJuIG51bGw7dmFyIHA9cyh0LHIpLGQ9dShoLHApLGc9aShkLGYpLHY9YyhhLGcpO3JldHVybiBsKHQsdil9O3ZhciBuPXQoXCJiaWctcmF0L211bFwiKSxpPXQoXCJiaWctcmF0L2RpdlwiKSxhPXQoXCJiaWctcmF0L3N1YlwiKSxvPXQoXCJiaWctcmF0L3NpZ25cIikscz10KFwicmF0LXZlYy9zdWJcIiksbD10KFwicmF0LXZlYy9hZGRcIiksYz10KFwicmF0LXZlYy9tdWxzXCIpO2Z1bmN0aW9uIHUodCxlKXtyZXR1cm4gYShuKHRbMF0sZVsxXSksbih0WzFdLGVbMF0pKX19LHtcImJpZy1yYXQvZGl2XCI6NjgsXCJiaWctcmF0L211bFwiOjc4LFwiYmlnLXJhdC9zaWduXCI6NzksXCJiaWctcmF0L3N1YlwiOjgwLFwicmF0LXZlYy9hZGRcIjo0NzgsXCJyYXQtdmVjL211bHNcIjo0ODAsXCJyYXQtdmVjL3N1YlwiOjQ4MX1dLDEwOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJjbGFtcFwiKTtmdW5jdGlvbiBpKHQsZSl7bnVsbD09ZSYmKGU9ITApO3ZhciByPXRbMF0saT10WzFdLGE9dFsyXSxvPXRbM107cmV0dXJuIG51bGw9PW8mJihvPWU/MToyNTUpLGUmJihyKj0yNTUsaSo9MjU1LGEqPTI1NSxvKj0yNTUpLDE2Nzc3MjE2KihyPTI1NSZuKHIsMCwyNTUpKSsoKGk9MjU1Jm4oaSwwLDI1NSkpPDwxNikrKChhPTI1NSZuKGEsMCwyNTUpKTw8OCkrKG89MjU1Jm4obywwLDI1NSkpfWUuZXhwb3J0cz1pLGUuZXhwb3J0cy50bz1pLGUuZXhwb3J0cy5mcm9tPWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHQ9K3QpPj4+MjQsbj0oMTY3MTE2ODAmdCk+Pj4xNixpPSg2NTI4MCZ0KT4+PjgsYT0yNTUmdDtyZXR1cm4hMT09PWU/W3IsbixpLGFdOltyLzI1NSxuLzI1NSxpLzI1NSxhLzI1NV19fSx7Y2xhbXA6MTA2fV0sMTEwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXthbGljZWJsdWU6WzI0MCwyNDgsMjU1XSxhbnRpcXVld2hpdGU6WzI1MCwyMzUsMjE1XSxhcXVhOlswLDI1NSwyNTVdLGFxdWFtYXJpbmU6WzEyNywyNTUsMjEyXSxhenVyZTpbMjQwLDI1NSwyNTVdLGJlaWdlOlsyNDUsMjQ1LDIyMF0sYmlzcXVlOlsyNTUsMjI4LDE5Nl0sYmxhY2s6WzAsMCwwXSxibGFuY2hlZGFsbW9uZDpbMjU1LDIzNSwyMDVdLGJsdWU6WzAsMCwyNTVdLGJsdWV2aW9sZXQ6WzEzOCw0MywyMjZdLGJyb3duOlsxNjUsNDIsNDJdLGJ1cmx5d29vZDpbMjIyLDE4NCwxMzVdLGNhZGV0Ymx1ZTpbOTUsMTU4LDE2MF0sY2hhcnRyZXVzZTpbMTI3LDI1NSwwXSxjaG9jb2xhdGU6WzIxMCwxMDUsMzBdLGNvcmFsOlsyNTUsMTI3LDgwXSxjb3JuZmxvd2VyYmx1ZTpbMTAwLDE0OSwyMzddLGNvcm5zaWxrOlsyNTUsMjQ4LDIyMF0sY3JpbXNvbjpbMjIwLDIwLDYwXSxjeWFuOlswLDI1NSwyNTVdLGRhcmtibHVlOlswLDAsMTM5XSxkYXJrY3lhbjpbMCwxMzksMTM5XSxkYXJrZ29sZGVucm9kOlsxODQsMTM0LDExXSxkYXJrZ3JheTpbMTY5LDE2OSwxNjldLGRhcmtncmVlbjpbMCwxMDAsMF0sZGFya2dyZXk6WzE2OSwxNjksMTY5XSxkYXJra2hha2k6WzE4OSwxODMsMTA3XSxkYXJrbWFnZW50YTpbMTM5LDAsMTM5XSxkYXJrb2xpdmVncmVlbjpbODUsMTA3LDQ3XSxkYXJrb3JhbmdlOlsyNTUsMTQwLDBdLGRhcmtvcmNoaWQ6WzE1Myw1MCwyMDRdLGRhcmtyZWQ6WzEzOSwwLDBdLGRhcmtzYWxtb246WzIzMywxNTAsMTIyXSxkYXJrc2VhZ3JlZW46WzE0MywxODgsMTQzXSxkYXJrc2xhdGVibHVlOls3Miw2MSwxMzldLGRhcmtzbGF0ZWdyYXk6WzQ3LDc5LDc5XSxkYXJrc2xhdGVncmV5Ols0Nyw3OSw3OV0sZGFya3R1cnF1b2lzZTpbMCwyMDYsMjA5XSxkYXJrdmlvbGV0OlsxNDgsMCwyMTFdLGRlZXBwaW5rOlsyNTUsMjAsMTQ3XSxkZWVwc2t5Ymx1ZTpbMCwxOTEsMjU1XSxkaW1ncmF5OlsxMDUsMTA1LDEwNV0sZGltZ3JleTpbMTA1LDEwNSwxMDVdLGRvZGdlcmJsdWU6WzMwLDE0NCwyNTVdLGZpcmVicmljazpbMTc4LDM0LDM0XSxmbG9yYWx3aGl0ZTpbMjU1LDI1MCwyNDBdLGZvcmVzdGdyZWVuOlszNCwxMzksMzRdLGZ1Y2hzaWE6WzI1NSwwLDI1NV0sZ2FpbnNib3JvOlsyMjAsMjIwLDIyMF0sZ2hvc3R3aGl0ZTpbMjQ4LDI0OCwyNTVdLGdvbGQ6WzI1NSwyMTUsMF0sZ29sZGVucm9kOlsyMTgsMTY1LDMyXSxncmF5OlsxMjgsMTI4LDEyOF0sZ3JlZW46WzAsMTI4LDBdLGdyZWVueWVsbG93OlsxNzMsMjU1LDQ3XSxncmV5OlsxMjgsMTI4LDEyOF0saG9uZXlkZXc6WzI0MCwyNTUsMjQwXSxob3RwaW5rOlsyNTUsMTA1LDE4MF0saW5kaWFucmVkOlsyMDUsOTIsOTJdLGluZGlnbzpbNzUsMCwxMzBdLGl2b3J5OlsyNTUsMjU1LDI0MF0sa2hha2k6WzI0MCwyMzAsMTQwXSxsYXZlbmRlcjpbMjMwLDIzMCwyNTBdLGxhdmVuZGVyYmx1c2g6WzI1NSwyNDAsMjQ1XSxsYXduZ3JlZW46WzEyNCwyNTIsMF0sbGVtb25jaGlmZm9uOlsyNTUsMjUwLDIwNV0sbGlnaHRibHVlOlsxNzMsMjE2LDIzMF0sbGlnaHRjb3JhbDpbMjQwLDEyOCwxMjhdLGxpZ2h0Y3lhbjpbMjI0LDI1NSwyNTVdLGxpZ2h0Z29sZGVucm9keWVsbG93OlsyNTAsMjUwLDIxMF0sbGlnaHRncmF5OlsyMTEsMjExLDIxMV0sbGlnaHRncmVlbjpbMTQ0LDIzOCwxNDRdLGxpZ2h0Z3JleTpbMjExLDIxMSwyMTFdLGxpZ2h0cGluazpbMjU1LDE4MiwxOTNdLGxpZ2h0c2FsbW9uOlsyNTUsMTYwLDEyMl0sbGlnaHRzZWFncmVlbjpbMzIsMTc4LDE3MF0sbGlnaHRza3libHVlOlsxMzUsMjA2LDI1MF0sbGlnaHRzbGF0ZWdyYXk6WzExOSwxMzYsMTUzXSxsaWdodHNsYXRlZ3JleTpbMTE5LDEzNiwxNTNdLGxpZ2h0c3RlZWxibHVlOlsxNzYsMTk2LDIyMl0sbGlnaHR5ZWxsb3c6WzI1NSwyNTUsMjI0XSxsaW1lOlswLDI1NSwwXSxsaW1lZ3JlZW46WzUwLDIwNSw1MF0sbGluZW46WzI1MCwyNDAsMjMwXSxtYWdlbnRhOlsyNTUsMCwyNTVdLG1hcm9vbjpbMTI4LDAsMF0sbWVkaXVtYXF1YW1hcmluZTpbMTAyLDIwNSwxNzBdLG1lZGl1bWJsdWU6WzAsMCwyMDVdLG1lZGl1bW9yY2hpZDpbMTg2LDg1LDIxMV0sbWVkaXVtcHVycGxlOlsxNDcsMTEyLDIxOV0sbWVkaXVtc2VhZ3JlZW46WzYwLDE3OSwxMTNdLG1lZGl1bXNsYXRlYmx1ZTpbMTIzLDEwNCwyMzhdLG1lZGl1bXNwcmluZ2dyZWVuOlswLDI1MCwxNTRdLG1lZGl1bXR1cnF1b2lzZTpbNzIsMjA5LDIwNF0sbWVkaXVtdmlvbGV0cmVkOlsxOTksMjEsMTMzXSxtaWRuaWdodGJsdWU6WzI1LDI1LDExMl0sbWludGNyZWFtOlsyNDUsMjU1LDI1MF0sbWlzdHlyb3NlOlsyNTUsMjI4LDIyNV0sbW9jY2FzaW46WzI1NSwyMjgsMTgxXSxuYXZham93aGl0ZTpbMjU1LDIyMiwxNzNdLG5hdnk6WzAsMCwxMjhdLG9sZGxhY2U6WzI1MywyNDUsMjMwXSxvbGl2ZTpbMTI4LDEyOCwwXSxvbGl2ZWRyYWI6WzEwNywxNDIsMzVdLG9yYW5nZTpbMjU1LDE2NSwwXSxvcmFuZ2VyZWQ6WzI1NSw2OSwwXSxvcmNoaWQ6WzIxOCwxMTIsMjE0XSxwYWxlZ29sZGVucm9kOlsyMzgsMjMyLDE3MF0scGFsZWdyZWVuOlsxNTIsMjUxLDE1Ml0scGFsZXR1cnF1b2lzZTpbMTc1LDIzOCwyMzhdLHBhbGV2aW9sZXRyZWQ6WzIxOSwxMTIsMTQ3XSxwYXBheWF3aGlwOlsyNTUsMjM5LDIxM10scGVhY2hwdWZmOlsyNTUsMjE4LDE4NV0scGVydTpbMjA1LDEzMyw2M10scGluazpbMjU1LDE5MiwyMDNdLHBsdW06WzIyMSwxNjAsMjIxXSxwb3dkZXJibHVlOlsxNzYsMjI0LDIzMF0scHVycGxlOlsxMjgsMCwxMjhdLHJlYmVjY2FwdXJwbGU6WzEwMiw1MSwxNTNdLHJlZDpbMjU1LDAsMF0scm9zeWJyb3duOlsxODgsMTQzLDE0M10scm95YWxibHVlOls2NSwxMDUsMjI1XSxzYWRkbGVicm93bjpbMTM5LDY5LDE5XSxzYWxtb246WzI1MCwxMjgsMTE0XSxzYW5keWJyb3duOlsyNDQsMTY0LDk2XSxzZWFncmVlbjpbNDYsMTM5LDg3XSxzZWFzaGVsbDpbMjU1LDI0NSwyMzhdLHNpZW5uYTpbMTYwLDgyLDQ1XSxzaWx2ZXI6WzE5MiwxOTIsMTkyXSxza3libHVlOlsxMzUsMjA2LDIzNV0sc2xhdGVibHVlOlsxMDYsOTAsMjA1XSxzbGF0ZWdyYXk6WzExMiwxMjgsMTQ0XSxzbGF0ZWdyZXk6WzExMiwxMjgsMTQ0XSxzbm93OlsyNTUsMjUwLDI1MF0sc3ByaW5nZ3JlZW46WzAsMjU1LDEyN10sc3RlZWxibHVlOls3MCwxMzAsMTgwXSx0YW46WzIxMCwxODAsMTQwXSx0ZWFsOlswLDEyOCwxMjhdLHRoaXN0bGU6WzIxNiwxOTEsMjE2XSx0b21hdG86WzI1NSw5OSw3MV0sdHVycXVvaXNlOls2NCwyMjQsMjA4XSx2aW9sZXQ6WzIzOCwxMzAsMjM4XSx3aGVhdDpbMjQ1LDIyMiwxNzldLHdoaXRlOlsyNTUsMjU1LDI1NV0sd2hpdGVzbW9rZTpbMjQ1LDI0NSwyNDVdLHllbGxvdzpbMjU1LDI1NSwwXSx5ZWxsb3dncmVlbjpbMTU0LDIwNSw1MF19fSx7fV0sMTExOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImNvbG9yLXJnYmFcIiksaT10KFwiY2xhbXBcIiksYT10KFwiZHR5cGVcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7XCJmbG9hdFwiIT09ZSYmZXx8KGU9XCJhcnJheVwiKSxcInVpbnRcIj09PWUmJihlPVwidWludDhcIiksXCJ1aW50X2NsYW1wZWRcIj09PWUmJihlPVwidWludDhfY2xhbXBlZFwiKTt2YXIgcj1uZXcoYShlKSkoNCksbz1cInVpbnQ4XCIhPT1lJiZcInVpbnQ4X2NsYW1wZWRcIiE9PWU7cmV0dXJuIHQubGVuZ3RoJiZcInN0cmluZ1wiIT10eXBlb2YgdHx8KCh0PW4odCkpWzBdLz0yNTUsdFsxXS89MjU1LHRbMl0vPTI1NSksZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXl8fCEhKEFycmF5LmlzQXJyYXkodCkmJih0WzBdPjF8fDA9PT10WzBdKSYmKHRbMV0+MXx8MD09PXRbMV0pJiYodFsyXT4xfHwwPT09dFsyXSkmJighdFszXXx8dFszXT4xKSl9KHQpPyhyWzBdPXRbMF0sclsxXT10WzFdLHJbMl09dFsyXSxyWzNdPW51bGwhPXRbM10/dFszXToyNTUsbyYmKHJbMF0vPTI1NSxyWzFdLz0yNTUsclsyXS89MjU1LHJbM10vPTI1NSkscik6KG8/KHJbMF09dFswXSxyWzFdPXRbMV0sclsyXT10WzJdLHJbM109bnVsbCE9dFszXT90WzNdOjEpOihyWzBdPWkoTWF0aC5mbG9vcigyNTUqdFswXSksMCwyNTUpLHJbMV09aShNYXRoLmZsb29yKDI1NSp0WzFdKSwwLDI1NSksclsyXT1pKE1hdGguZmxvb3IoMjU1KnRbMl0pLDAsMjU1KSxyWzNdPW51bGw9PXRbM10/MjU1OmkoTWF0aC5mbG9vcigyNTUqdFszXSksMCwyNTUpKSxyKX19LHtjbGFtcDoxMDYsXCJjb2xvci1yZ2JhXCI6MTEzLGR0eXBlOjE2MX1dLDExMjpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiY29sb3ItbmFtZVwiKSxpPXQoXCJpcy1wbGFpbi1vYmpcIiksYT10KFwiZGVmaW5lZFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscyxsPVtdLGM9MTtpZihcInN0cmluZ1wiPT10eXBlb2YgdClpZihuW3RdKWw9blt0XS5zbGljZSgpLHM9XCJyZ2JcIjtlbHNlIGlmKFwidHJhbnNwYXJlbnRcIj09PXQpYz0wLHM9XCJyZ2JcIixsPVswLDAsMF07ZWxzZSBpZigvXiNbQS1GYS1mMC05XSskLy50ZXN0KHQpKXt2YXIgdT10LnNsaWNlKDEpLGg9dS5sZW5ndGgsZj1oPD00O2M9MSxmPyhsPVtwYXJzZUludCh1WzBdK3VbMF0sMTYpLHBhcnNlSW50KHVbMV0rdVsxXSwxNikscGFyc2VJbnQodVsyXSt1WzJdLDE2KV0sND09PWgmJihjPXBhcnNlSW50KHVbM10rdVszXSwxNikvMjU1KSk6KGw9W3BhcnNlSW50KHVbMF0rdVsxXSwxNikscGFyc2VJbnQodVsyXSt1WzNdLDE2KSxwYXJzZUludCh1WzRdK3VbNV0sMTYpXSw4PT09aCYmKGM9cGFyc2VJbnQodVs2XSt1WzddLDE2KS8yNTUpKSxsWzBdfHwobFswXT0wKSxsWzFdfHwobFsxXT0wKSxsWzJdfHwobFsyXT0wKSxzPVwicmdiXCJ9ZWxzZSBpZihlPS9eKCg/OnJnYnxoc1tsdmJdfGh3YnxjbXlrP3x4eVt6eV18Z3JheXxsYWJ8bGNodT92P3xbbHlddXZ8bG1zKWE/KVxccypcXCgoW15cXCldKilcXCkvLmV4ZWModCkpe3ZhciBwPWVbMV0sdT1wLnJlcGxhY2UoL2EkLyxcIlwiKTtzPXU7dmFyIGg9XCJjbXlrXCI9PT11PzQ6XCJncmF5XCI9PT11PzE6MztsPWVbMl0udHJpbSgpLnNwbGl0KC9cXHMqLFxccyovKS5tYXAoZnVuY3Rpb24odCxlKXtpZigvJSQvLnRlc3QodCkpcmV0dXJuIGU9PT1oP3BhcnNlRmxvYXQodCkvMTAwOlwicmdiXCI9PT11PzI1NSpwYXJzZUZsb2F0KHQpLzEwMDpwYXJzZUZsb2F0KHQpO2lmKFwiaFwiPT09dVtlXSl7aWYoL2RlZyQvLnRlc3QodCkpcmV0dXJuIHBhcnNlRmxvYXQodCk7aWYodm9pZCAwIT09b1t0XSlyZXR1cm4gb1t0XX1yZXR1cm4gcGFyc2VGbG9hdCh0KX0pLHA9PT11JiZsLnB1c2goMSksYz12b2lkIDA9PT1sW2hdPzE6bFtoXSxsPWwuc2xpY2UoMCxoKX1lbHNlIHQubGVuZ3RoPjEwJiYvWzAtOV0oPzpcXHN8XFwvKS8udGVzdCh0KSYmKGw9dC5tYXRjaCgvKFswLTldKykvZykubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUZsb2F0KHQpfSkscz10Lm1hdGNoKC8oW2Etel0pL2dpKS5qb2luKFwiXCIpLnRvTG93ZXJDYXNlKCkpO2Vsc2UgaWYoaXNOYU4odCkpaWYoaSh0KSl7dmFyIGQ9YSh0LnIsdC5yZWQsdC5SLG51bGwpO251bGwhPT1kPyhzPVwicmdiXCIsbD1bZCxhKHQuZyx0LmdyZWVuLHQuRyksYSh0LmIsdC5ibHVlLHQuQildKToocz1cImhzbFwiLGw9W2EodC5oLHQuaHVlLHQuSCksYSh0LnMsdC5zYXR1cmF0aW9uLHQuUyksYSh0LmwsdC5saWdodG5lc3MsdC5MLHQuYix0LmJyaWdodG5lc3MpXSksYz1hKHQuYSx0LmFscGhhLHQub3BhY2l0eSwxKSxudWxsIT10Lm9wYWNpdHkmJihjLz0xMDApfWVsc2UoQXJyYXkuaXNBcnJheSh0KXx8ci5BcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3JiZBcnJheUJ1ZmZlci5pc1ZpZXcodCkpJiYobD1bdFswXSx0WzFdLHRbMl1dLHM9XCJyZ2JcIixjPTQ9PT10Lmxlbmd0aD90WzNdOjEpO2Vsc2Ugcz1cInJnYlwiLGw9W3Q+Pj4xNiwoNjUyODAmdCk+Pj44LDI1NSZ0XTtyZXR1cm57c3BhY2U6cyx2YWx1ZXM6bCxhbHBoYTpjfX07dmFyIG89e3JlZDowLG9yYW5nZTo2MCx5ZWxsb3c6MTIwLGdyZWVuOjE4MCxibHVlOjI0MCxwdXJwbGU6MzAwfX0pLmNhbGwodGhpcyxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se1wiY29sb3ItbmFtZVwiOjExMCxkZWZpbmVkOjE1NixcImlzLXBsYWluLW9ialwiOjQxNX1dLDExMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJjb2xvci1wYXJzZVwiKSxpPXQoXCJjb2xvci1zcGFjZS9oc2xcIiksYT10KFwiY2xhbXBcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHI9bih0KTtyZXR1cm4gci5zcGFjZT8oKGU9QXJyYXkoMykpWzBdPWEoci52YWx1ZXNbMF0sMCwyNTUpLGVbMV09YShyLnZhbHVlc1sxXSwwLDI1NSksZVsyXT1hKHIudmFsdWVzWzJdLDAsMjU1KSxcImhcIj09PXIuc3BhY2VbMF0mJihlPWkucmdiKGUpKSxlLnB1c2goYShyLmFscGhhLDAsMSkpLGUpOltdfX0se2NsYW1wOjEwNixcImNvbG9yLXBhcnNlXCI6MTEyLFwiY29sb3Itc3BhY2UvaHNsXCI6MTE0fV0sMTE0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vcmdiXCIpO2UuZXhwb3J0cz17bmFtZTpcImhzbFwiLG1pbjpbMCwwLDBdLG1heDpbMzYwLDEwMCwxMDBdLGNoYW5uZWw6W1wiaHVlXCIsXCJzYXR1cmF0aW9uXCIsXCJsaWdodG5lc3NcIl0sYWxpYXM6W1wiSFNMXCJdLHJnYjpmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG89dFswXS8zNjAscz10WzFdLzEwMCxsPXRbMl0vMTAwO2lmKDA9PT1zKXJldHVyblthPTI1NSpsLGEsYV07ZT0yKmwtKHI9bDwuNT9sKigxK3MpOmwrcy1sKnMpLGk9WzAsMCwwXTtmb3IodmFyIGM9MDtjPDM7YysrKShuPW8rMS8zKi0oYy0xKSk8MD9uKys6bj4xJiZuLS0sYT02Km48MT9lKzYqKHItZSkqbjoyKm48MT9yOjMqbjwyP2UrKHItZSkqKDIvMy1uKSo2OmUsaVtjXT0yNTUqYTtyZXR1cm4gaX19LG4uaHNsPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10WzBdLzI1NSxpPXRbMV0vMjU1LGE9dFsyXS8yNTUsbz1NYXRoLm1pbihuLGksYSkscz1NYXRoLm1heChuLGksYSksbD1zLW87cmV0dXJuIHM9PT1vP2U9MDpuPT09cz9lPShpLWEpL2w6aT09PXM/ZT0yKyhhLW4pL2w6YT09PXMmJihlPTQrKG4taSkvbCksKGU9TWF0aC5taW4oNjAqZSwzNjApKTwwJiYoZSs9MzYwKSxyPShvK3MpLzIsW2UsMTAwKihzPT09bz8wOnI8PS41P2wvKHMrbyk6bC8oMi1zLW8pKSwxMDAqcl19fSx7XCIuL3JnYlwiOjExNX1dLDExNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17bmFtZTpcInJnYlwiLG1pbjpbMCwwLDBdLG1heDpbMjU1LDI1NSwyNTVdLGNoYW5uZWw6W1wicmVkXCIsXCJncmVlblwiLFwiYmx1ZVwiXSxhbGlhczpbXCJSR0JcIl19fSx7fV0sMTE2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXtqZXQ6W3tpbmRleDowLHJnYjpbMCwwLDEzMV19LHtpbmRleDouMTI1LHJnYjpbMCw2MCwxNzBdfSx7aW5kZXg6LjM3NSxyZ2I6WzUsMjU1LDI1NV19LHtpbmRleDouNjI1LHJnYjpbMjU1LDI1NSwwXX0se2luZGV4Oi44NzUscmdiOlsyNTAsMCwwXX0se2luZGV4OjEscmdiOlsxMjgsMCwwXX1dLGhzdjpbe2luZGV4OjAscmdiOlsyNTUsMCwwXX0se2luZGV4Oi4xNjkscmdiOlsyNTMsMjU1LDJdfSx7aW5kZXg6LjE3MyxyZ2I6WzI0NywyNTUsMl19LHtpbmRleDouMzM3LHJnYjpbMCwyNTIsNF19LHtpbmRleDouMzQxLHJnYjpbMCwyNTIsMTBdfSx7aW5kZXg6LjUwNixyZ2I6WzEsMjQ5LDI1NV19LHtpbmRleDouNjcxLHJnYjpbMiwwLDI1M119LHtpbmRleDouNjc1LHJnYjpbOCwwLDI1M119LHtpbmRleDouODM5LHJnYjpbMjU1LDAsMjUxXX0se2luZGV4Oi44NDMscmdiOlsyNTUsMCwyNDVdfSx7aW5kZXg6MSxyZ2I6WzI1NSwwLDZdfV0saG90Olt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi4zLHJnYjpbMjMwLDAsMF19LHtpbmRleDouNixyZ2I6WzI1NSwyMTAsMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyNTVdfV0sY29vbDpbe2luZGV4OjAscmdiOlswLDI1NSwyNTVdfSx7aW5kZXg6MSxyZ2I6WzI1NSwwLDI1NV19XSxzcHJpbmc6W3tpbmRleDowLHJnYjpbMjU1LDAsMjU1XX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDBdfV0sc3VtbWVyOlt7aW5kZXg6MCxyZ2I6WzAsMTI4LDEwMl19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwxMDJdfV0sYXV0dW1uOlt7aW5kZXg6MCxyZ2I6WzI1NSwwLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMF19XSx3aW50ZXI6W3tpbmRleDowLHJnYjpbMCwwLDI1NV19LHtpbmRleDoxLHJnYjpbMCwyNTUsMTI4XX1dLGJvbmU6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjM3NixyZ2I6Wzg0LDg0LDExNl19LHtpbmRleDouNzUzLHJnYjpbMTY5LDIwMCwyMDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1XX1dLGNvcHBlcjpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouODA0LHJnYjpbMjU1LDE2MCwxMDJdfSx7aW5kZXg6MSxyZ2I6WzI1NSwxOTksMTI3XX1dLGdyZXlzOlt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NV19XSx5aWduYnU6W3tpbmRleDowLHJnYjpbOCwyOSw4OF19LHtpbmRleDouMTI1LHJnYjpbMzcsNTIsMTQ4XX0se2luZGV4Oi4yNSxyZ2I6WzM0LDk0LDE2OF19LHtpbmRleDouMzc1LHJnYjpbMjksMTQ1LDE5Ml19LHtpbmRleDouNSxyZ2I6WzY1LDE4MiwxOTZdfSx7aW5kZXg6LjYyNSxyZ2I6WzEyNywyMDUsMTg3XX0se2luZGV4Oi43NSxyZ2I6WzE5OSwyMzMsMTgwXX0se2luZGV4Oi44NzUscmdiOlsyMzcsMjQ4LDIxN119LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyMTddfV0sZ3JlZW5zOlt7aW5kZXg6MCxyZ2I6WzAsNjgsMjddfSx7aW5kZXg6LjEyNSxyZ2I6WzAsMTA5LDQ0XX0se2luZGV4Oi4yNSxyZ2I6WzM1LDEzOSw2OV19LHtpbmRleDouMzc1LHJnYjpbNjUsMTcxLDkzXX0se2luZGV4Oi41LHJnYjpbMTE2LDE5NiwxMThdfSx7aW5kZXg6LjYyNSxyZ2I6WzE2MSwyMTcsMTU1XX0se2luZGV4Oi43NSxyZ2I6WzE5OSwyMzMsMTkyXX0se2luZGV4Oi44NzUscmdiOlsyMjksMjQ1LDIyNF19LHtpbmRleDoxLHJnYjpbMjQ3LDI1MiwyNDVdfV0seWlvcnJkOlt7aW5kZXg6MCxyZ2I6WzEyOCwwLDM4XX0se2luZGV4Oi4xMjUscmdiOlsxODksMCwzOF19LHtpbmRleDouMjUscmdiOlsyMjcsMjYsMjhdfSx7aW5kZXg6LjM3NSxyZ2I6WzI1Miw3OCw0Ml19LHtpbmRleDouNSxyZ2I6WzI1MywxNDEsNjBdfSx7aW5kZXg6LjYyNSxyZ2I6WzI1NCwxNzgsNzZdfSx7aW5kZXg6Ljc1LHJnYjpbMjU0LDIxNywxMThdfSx7aW5kZXg6Ljg3NSxyZ2I6WzI1NSwyMzcsMTYwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDIwNF19XSxibHVlcmVkOlt7aW5kZXg6MCxyZ2I6WzAsMCwyNTVdfSx7aW5kZXg6MSxyZ2I6WzI1NSwwLDBdfV0scmRidTpbe2luZGV4OjAscmdiOls1LDEwLDE3Ml19LHtpbmRleDouMzUscmdiOlsxMDYsMTM3LDI0N119LHtpbmRleDouNSxyZ2I6WzE5MCwxOTAsMTkwXX0se2luZGV4Oi42LHJnYjpbMjIwLDE3MCwxMzJdfSx7aW5kZXg6LjcscmdiOlsyMzAsMTQ1LDkwXX0se2luZGV4OjEscmdiOlsxNzgsMTAsMjhdfV0scGljbmljOlt7aW5kZXg6MCxyZ2I6WzAsMCwyNTVdfSx7aW5kZXg6LjEscmdiOls1MSwxNTMsMjU1XX0se2luZGV4Oi4yLHJnYjpbMTAyLDIwNCwyNTVdfSx7aW5kZXg6LjMscmdiOlsxNTMsMjA0LDI1NV19LHtpbmRleDouNCxyZ2I6WzIwNCwyMDQsMjU1XX0se2luZGV4Oi41LHJnYjpbMjU1LDI1NSwyNTVdfSx7aW5kZXg6LjYscmdiOlsyNTUsMjA0LDI1NV19LHtpbmRleDouNyxyZ2I6WzI1NSwxNTMsMjU1XX0se2luZGV4Oi44LHJnYjpbMjU1LDEwMiwyMDRdfSx7aW5kZXg6LjkscmdiOlsyNTUsMTAyLDEwMl19LHtpbmRleDoxLHJnYjpbMjU1LDAsMF19XSxyYWluYm93Olt7aW5kZXg6MCxyZ2I6WzE1MCwwLDkwXX0se2luZGV4Oi4xMjUscmdiOlswLDAsMjAwXX0se2luZGV4Oi4yNSxyZ2I6WzAsMjUsMjU1XX0se2luZGV4Oi4zNzUscmdiOlswLDE1MiwyNTVdfSx7aW5kZXg6LjUscmdiOls0NCwyNTUsMTUwXX0se2luZGV4Oi42MjUscmdiOlsxNTEsMjU1LDBdfSx7aW5kZXg6Ljc1LHJnYjpbMjU1LDIzNCwwXX0se2luZGV4Oi44NzUscmdiOlsyNTUsMTExLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwwLDBdfV0scG9ydGxhbmQ6W3tpbmRleDowLHJnYjpbMTIsNTEsMTMxXX0se2luZGV4Oi4yNSxyZ2I6WzEwLDEzNiwxODZdfSx7aW5kZXg6LjUscmdiOlsyNDIsMjExLDU2XX0se2luZGV4Oi43NSxyZ2I6WzI0MiwxNDMsNTZdfSx7aW5kZXg6MSxyZ2I6WzIxNywzMCwzMF19XSxibGFja2JvZHk6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjIscmdiOlsyMzAsMCwwXX0se2luZGV4Oi40LHJnYjpbMjMwLDIxMCwwXX0se2luZGV4Oi43LHJnYjpbMjU1LDI1NSwyNTVdfSx7aW5kZXg6MSxyZ2I6WzE2MCwyMDAsMjU1XX1dLGVhcnRoOlt7aW5kZXg6MCxyZ2I6WzAsMCwxMzBdfSx7aW5kZXg6LjEscmdiOlswLDE4MCwxODBdfSx7aW5kZXg6LjIscmdiOls0MCwyMTAsNDBdfSx7aW5kZXg6LjQscmdiOlsyMzAsMjMwLDUwXX0se2luZGV4Oi42LHJnYjpbMTIwLDcwLDIwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NV19XSxlbGVjdHJpYzpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMTUscmdiOlszMCwwLDEwMF19LHtpbmRleDouNCxyZ2I6WzEyMCwwLDEwMF19LHtpbmRleDouNixyZ2I6WzE2MCw5MCwwXX0se2luZGV4Oi44LHJnYjpbMjMwLDIwMCwwXX0se2luZGV4OjEscmdiOlsyNTUsMjUwLDIyMF19XSxhbHBoYTpbe2luZGV4OjAscmdiOlsyNTUsMjU1LDI1NSwwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NSwxXX1dLHZpcmlkaXM6W3tpbmRleDowLHJnYjpbNjgsMSw4NF19LHtpbmRleDouMTMscmdiOls3MSw0NCwxMjJdfSx7aW5kZXg6LjI1LHJnYjpbNTksODEsMTM5XX0se2luZGV4Oi4zOCxyZ2I6WzQ0LDExMywxNDJdfSx7aW5kZXg6LjUscmdiOlszMywxNDQsMTQxXX0se2luZGV4Oi42MyxyZ2I6WzM5LDE3MywxMjldfSx7aW5kZXg6Ljc1LHJnYjpbOTIsMjAwLDk5XX0se2luZGV4Oi44OCxyZ2I6WzE3MCwyMjAsNTBdfSx7aW5kZXg6MSxyZ2I6WzI1MywyMzEsMzddfV0saW5mZXJubzpbe2luZGV4OjAscmdiOlswLDAsNF19LHtpbmRleDouMTMscmdiOlszMSwxMiw3Ml19LHtpbmRleDouMjUscmdiOls4NSwxNSwxMDldfSx7aW5kZXg6LjM4LHJnYjpbMTM2LDM0LDEwNl19LHtpbmRleDouNSxyZ2I6WzE4Niw1NCw4NV19LHtpbmRleDouNjMscmdiOlsyMjcsODksNTFdfSx7aW5kZXg6Ljc1LHJnYjpbMjQ5LDE0MCwxMF19LHtpbmRleDouODgscmdiOlsyNDksMjAxLDUwXX0se2luZGV4OjEscmdiOlsyNTIsMjU1LDE2NF19XSxtYWdtYTpbe2luZGV4OjAscmdiOlswLDAsNF19LHtpbmRleDouMTMscmdiOlsyOCwxNiw2OF19LHtpbmRleDouMjUscmdiOls3OSwxOCwxMjNdfSx7aW5kZXg6LjM4LHJnYjpbMTI5LDM3LDEyOV19LHtpbmRleDouNSxyZ2I6WzE4MSw1NCwxMjJdfSx7aW5kZXg6LjYzLHJnYjpbMjI5LDgwLDEwMF19LHtpbmRleDouNzUscmdiOlsyNTEsMTM1LDk3XX0se2luZGV4Oi44OCxyZ2I6WzI1NCwxOTQsMTM1XX0se2luZGV4OjEscmdiOlsyNTIsMjUzLDE5MV19XSxwbGFzbWE6W3tpbmRleDowLHJnYjpbMTMsOCwxMzVdfSx7aW5kZXg6LjEzLHJnYjpbNzUsMywxNjFdfSx7aW5kZXg6LjI1LHJnYjpbMTI1LDMsMTY4XX0se2luZGV4Oi4zOCxyZ2I6WzE2OCwzNCwxNTBdfSx7aW5kZXg6LjUscmdiOlsyMDMsNzAsMTIxXX0se2luZGV4Oi42MyxyZ2I6WzIyOSwxMDcsOTNdfSx7aW5kZXg6Ljc1LHJnYjpbMjQ4LDE0OCw2NV19LHtpbmRleDouODgscmdiOlsyNTMsMTk1LDQwXX0se2luZGV4OjEscmdiOlsyNDAsMjQ5LDMzXX1dLHdhcm06W3tpbmRleDowLHJnYjpbMTI1LDAsMTc5XX0se2luZGV4Oi4xMyxyZ2I6WzE3MiwwLDE4N119LHtpbmRleDouMjUscmdiOlsyMTksMCwxNzBdfSx7aW5kZXg6LjM4LHJnYjpbMjU1LDAsMTMwXX0se2luZGV4Oi41LHJnYjpbMjU1LDYzLDc0XX0se2luZGV4Oi42MyxyZ2I6WzI1NSwxMjMsMF19LHtpbmRleDouNzUscmdiOlsyMzQsMTc2LDBdfSx7aW5kZXg6Ljg4LHJnYjpbMTkwLDIyOCwwXX0se2luZGV4OjEscmdiOlsxNDcsMjU1LDBdfV0sY29vbDpbe2luZGV4OjAscmdiOlsxMjUsMCwxNzldfSx7aW5kZXg6LjEzLHJnYjpbMTE2LDAsMjE4XX0se2luZGV4Oi4yNSxyZ2I6Wzk4LDc0LDIzN119LHtpbmRleDouMzgscmdiOls2OCwxNDYsMjMxXX0se2luZGV4Oi41LHJnYjpbMCwyMDQsMTk3XX0se2luZGV4Oi42MyxyZ2I6WzAsMjQ3LDE0Nl19LHtpbmRleDouNzUscmdiOlswLDI1NSw4OF19LHtpbmRleDouODgscmdiOls0MCwyNTUsOF19LHtpbmRleDoxLHJnYjpbMTQ3LDI1NSwwXX1dLFwicmFpbmJvdy1zb2Z0XCI6W3tpbmRleDowLHJnYjpbMTI1LDAsMTc5XX0se2luZGV4Oi4xLHJnYjpbMTk5LDAsMTgwXX0se2luZGV4Oi4yLHJnYjpbMjU1LDAsMTIxXX0se2luZGV4Oi4zLHJnYjpbMjU1LDEwOCwwXX0se2luZGV4Oi40LHJnYjpbMjIyLDE5NCwwXX0se2luZGV4Oi41LHJnYjpbMTUwLDI1NSwwXX0se2luZGV4Oi42LHJnYjpbMCwyNTUsNTVdfSx7aW5kZXg6LjcscmdiOlswLDI0NiwxNTBdfSx7aW5kZXg6LjgscmdiOls1MCwxNjcsMjIyXX0se2luZGV4Oi45LHJnYjpbMTAzLDUxLDIzNV19LHtpbmRleDoxLHJnYjpbMTI0LDAsMTg2XX1dLGJhdGh5bWV0cnk6W3tpbmRleDowLHJnYjpbNDAsMjYsNDRdfSx7aW5kZXg6LjEzLHJnYjpbNTksNDksOTBdfSx7aW5kZXg6LjI1LHJnYjpbNjQsNzYsMTM5XX0se2luZGV4Oi4zOCxyZ2I6WzYzLDExMCwxNTFdfSx7aW5kZXg6LjUscmdiOls3MiwxNDIsMTU4XX0se2luZGV4Oi42MyxyZ2I6Wzg1LDE3NCwxNjNdfSx7aW5kZXg6Ljc1LHJnYjpbMTIwLDIwNiwxNjNdfSx7aW5kZXg6Ljg4LHJnYjpbMTg3LDIzMCwxNzJdfSx7aW5kZXg6MSxyZ2I6WzI1MywyNTQsMjA0XX1dLGNkb206W3tpbmRleDowLHJnYjpbNDcsMTUsNjJdfSx7aW5kZXg6LjEzLHJnYjpbODcsMjMsODZdfSx7aW5kZXg6LjI1LHJnYjpbMTMwLDI4LDk5XX0se2luZGV4Oi4zOCxyZ2I6WzE3MSw0MSw5Nl19LHtpbmRleDouNSxyZ2I6WzIwNiw2Nyw4Nl19LHtpbmRleDouNjMscmdiOlsyMzAsMTA2LDg0XX0se2luZGV4Oi43NSxyZ2I6WzI0MiwxNDksMTAzXX0se2luZGV4Oi44OCxyZ2I6WzI0OSwxOTMsMTM1XX0se2luZGV4OjEscmdiOlsyNTQsMjM3LDE3Nl19XSxjaGxvcm9waHlsbDpbe2luZGV4OjAscmdiOlsxOCwzNiwyMF19LHtpbmRleDouMTMscmdiOlsyNSw2Myw0MV19LHtpbmRleDouMjUscmdiOlsyNCw5MSw1OV19LHtpbmRleDouMzgscmdiOlsxMywxMTksNzJdfSx7aW5kZXg6LjUscmdiOlsxOCwxNDgsODBdfSx7aW5kZXg6LjYzLHJnYjpbODAsMTczLDg5XX0se2luZGV4Oi43NSxyZ2I6WzEzMiwxOTYsMTIyXX0se2luZGV4Oi44OCxyZ2I6WzE3NSwyMjEsMTYyXX0se2luZGV4OjEscmdiOlsyMTUsMjQ5LDIwOF19XSxkZW5zaXR5Olt7aW5kZXg6MCxyZ2I6WzU0LDE0LDM2XX0se2luZGV4Oi4xMyxyZ2I6Wzg5LDIzLDgwXX0se2luZGV4Oi4yNSxyZ2I6WzExMCw0NSwxMzJdfSx7aW5kZXg6LjM4LHJnYjpbMTIwLDc3LDE3OF19LHtpbmRleDouNSxyZ2I6WzEyMCwxMTMsMjEzXX0se2luZGV4Oi42MyxyZ2I6WzExNSwxNTEsMjI4XX0se2luZGV4Oi43NSxyZ2I6WzEzNCwxODUsMjI3XX0se2luZGV4Oi44OCxyZ2I6WzE3NywyMTQsMjI3XX0se2luZGV4OjEscmdiOlsyMzAsMjQxLDI0MV19XSxcImZyZWVzdXJmYWNlLWJsdWVcIjpbe2luZGV4OjAscmdiOlszMCw0LDExMF19LHtpbmRleDouMTMscmdiOls0NywxNCwxNzZdfSx7aW5kZXg6LjI1LHJnYjpbNDEsNDUsMjM2XX0se2luZGV4Oi4zOCxyZ2I6WzI1LDk5LDIxMl19LHtpbmRleDouNSxyZ2I6WzY4LDEzMSwyMDBdfSx7aW5kZXg6LjYzLHJnYjpbMTE0LDE1NiwxOTddfSx7aW5kZXg6Ljc1LHJnYjpbMTU3LDE4MSwyMDNdfSx7aW5kZXg6Ljg4LHJnYjpbMjAwLDIwOCwyMTZdfSx7aW5kZXg6MSxyZ2I6WzI0MSwyMzcsMjM2XX1dLFwiZnJlZXN1cmZhY2UtcmVkXCI6W3tpbmRleDowLHJnYjpbNjAsOSwxOF19LHtpbmRleDouMTMscmdiOlsxMDAsMTcsMjddfSx7aW5kZXg6LjI1LHJnYjpbMTQyLDIwLDI5XX0se2luZGV4Oi4zOCxyZ2I6WzE3Nyw0MywyN119LHtpbmRleDouNSxyZ2I6WzE5Miw4Nyw2M119LHtpbmRleDouNjMscmdiOlsyMDUsMTI1LDEwNV19LHtpbmRleDouNzUscmdiOlsyMTYsMTYyLDE0OF19LHtpbmRleDouODgscmdiOlsyMjcsMTk5LDE5M119LHtpbmRleDoxLHJnYjpbMjQxLDIzNywyMzZdfV0sb3h5Z2VuOlt7aW5kZXg6MCxyZ2I6WzY0LDUsNV19LHtpbmRleDouMTMscmdiOlsxMDYsNiwxNV19LHtpbmRleDouMjUscmdiOlsxNDQsMjYsN119LHtpbmRleDouMzgscmdiOlsxNjgsNjQsM119LHtpbmRleDouNSxyZ2I6WzE4OCwxMDAsNF19LHtpbmRleDouNjMscmdiOlsyMDYsMTM2LDExXX0se2luZGV4Oi43NSxyZ2I6WzIyMCwxNzQsMjVdfSx7aW5kZXg6Ljg4LHJnYjpbMjMxLDIxNSw0NF19LHtpbmRleDoxLHJnYjpbMjQ4LDI1NCwxMDVdfV0scGFyOlt7aW5kZXg6MCxyZ2I6WzUxLDIwLDI0XX0se2luZGV4Oi4xMyxyZ2I6WzkwLDMyLDM1XX0se2luZGV4Oi4yNSxyZ2I6WzEyOSw0NCwzNF19LHtpbmRleDouMzgscmdiOlsxNTksNjgsMjVdfSx7aW5kZXg6LjUscmdiOlsxODIsOTksMTldfSx7aW5kZXg6LjYzLHJnYjpbMTk5LDEzNCwyMl19LHtpbmRleDouNzUscmdiOlsyMTIsMTcxLDM1XX0se2luZGV4Oi44OCxyZ2I6WzIyMSwyMTAsNTRdfSx7aW5kZXg6MSxyZ2I6WzIyNSwyNTMsNzVdfV0scGhhc2U6W3tpbmRleDowLHJnYjpbMTQ1LDEwNSwxOF19LHtpbmRleDouMTMscmdiOlsxODQsNzEsMzhdfSx7aW5kZXg6LjI1LHJnYjpbMTg2LDU4LDExNV19LHtpbmRleDouMzgscmdiOlsxNjAsNzEsMTg1XX0se2luZGV4Oi41LHJnYjpbMTEwLDk3LDIxOF19LHtpbmRleDouNjMscmdiOls1MCwxMjMsMTY0XX0se2luZGV4Oi43NSxyZ2I6WzMxLDEzMSwxMTBdfSx7aW5kZXg6Ljg4LHJnYjpbNzcsMTI5LDM0XX0se2luZGV4OjEscmdiOlsxNDUsMTA1LDE4XX1dLHNhbGluaXR5Olt7aW5kZXg6MCxyZ2I6WzQyLDI0LDEwOF19LHtpbmRleDouMTMscmdiOlszMyw1MCwxNjJdfSx7aW5kZXg6LjI1LHJnYjpbMTUsOTAsMTQ1XX0se2luZGV4Oi4zOCxyZ2I6WzQwLDExOCwxMzddfSx7aW5kZXg6LjUscmdiOls1OSwxNDYsMTM1XX0se2luZGV4Oi42MyxyZ2I6Wzc5LDE3NSwxMjZdfSx7aW5kZXg6Ljc1LHJnYjpbMTIwLDIwMywxMDRdfSx7aW5kZXg6Ljg4LHJnYjpbMTkzLDIyMSwxMDBdfSx7aW5kZXg6MSxyZ2I6WzI1MywyMzksMTU0XX1dLHRlbXBlcmF0dXJlOlt7aW5kZXg6MCxyZ2I6WzQsMzUsNTFdfSx7aW5kZXg6LjEzLHJnYjpbMjMsNTEsMTIyXX0se2luZGV4Oi4yNSxyZ2I6Wzg1LDU5LDE1N119LHtpbmRleDouMzgscmdiOlsxMjksNzksMTQzXX0se2luZGV4Oi41LHJnYjpbMTc1LDk1LDEzMF19LHtpbmRleDouNjMscmdiOlsyMjIsMTEyLDEwMV19LHtpbmRleDouNzUscmdiOlsyNDksMTQ2LDY2XX0se2luZGV4Oi44OCxyZ2I6WzI0OSwxOTYsNjVdfSx7aW5kZXg6MSxyZ2I6WzIzMiwyNTAsOTFdfV0sdHVyYmlkaXR5Olt7aW5kZXg6MCxyZ2I6WzM0LDMxLDI3XX0se2luZGV4Oi4xMyxyZ2I6WzY1LDUwLDQxXX0se2luZGV4Oi4yNSxyZ2I6Wzk4LDY5LDUyXX0se2luZGV4Oi4zOCxyZ2I6WzEzMSw4OSw1N119LHtpbmRleDouNSxyZ2I6WzE2MSwxMTIsNTldfSx7aW5kZXg6LjYzLHJnYjpbMTg1LDE0MCw2Nl19LHtpbmRleDouNzUscmdiOlsyMDIsMTc0LDg4XX0se2luZGV4Oi44OCxyZ2I6WzIxNiwyMDksMTI2XX0se2luZGV4OjEscmdiOlsyMzMsMjQ2LDE3MV19XSxcInZlbG9jaXR5LWJsdWVcIjpbe2luZGV4OjAscmdiOlsxNywzMiw2NF19LHtpbmRleDouMTMscmdiOlszNSw1MiwxMTZdfSx7aW5kZXg6LjI1LHJnYjpbMjksODEsMTU2XX0se2luZGV4Oi4zOCxyZ2I6WzMxLDExMywxNjJdfSx7aW5kZXg6LjUscmdiOls1MCwxNDQsMTY5XX0se2luZGV4Oi42MyxyZ2I6Wzg3LDE3MywxNzZdfSx7aW5kZXg6Ljc1LHJnYjpbMTQ5LDE5NiwxODldfSx7aW5kZXg6Ljg4LHJnYjpbMjAzLDIyMSwyMTFdfSx7aW5kZXg6MSxyZ2I6WzI1NCwyNTEsMjMwXX1dLFwidmVsb2NpdHktZ3JlZW5cIjpbe2luZGV4OjAscmdiOlsyMywzNSwxOV19LHtpbmRleDouMTMscmdiOlsyNCw2NCwzOF19LHtpbmRleDouMjUscmdiOlsxMSw5NSw0NV19LHtpbmRleDouMzgscmdiOlszOSwxMjMsMzVdfSx7aW5kZXg6LjUscmdiOls5NSwxNDYsMTJdfSx7aW5kZXg6LjYzLHJnYjpbMTUyLDE2NSwxOF19LHtpbmRleDouNzUscmdiOlsyMDEsMTg2LDY5XX0se2luZGV4Oi44OCxyZ2I6WzIzMywyMTYsMTM3XX0se2luZGV4OjEscmdiOlsyNTUsMjUzLDIwNV19XSxjdWJlaGVsaXg6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjA3LHJnYjpbMjIsNSw1OV19LHtpbmRleDouMTMscmdiOls2MCw0LDEwNV19LHtpbmRleDouMixyZ2I6WzEwOSwxLDEzNV19LHtpbmRleDouMjcscmdiOlsxNjEsMCwxNDddfSx7aW5kZXg6LjMzLHJnYjpbMjEwLDIsMTQyXX0se2luZGV4Oi40LHJnYjpbMjUxLDExLDEyM119LHtpbmRleDouNDcscmdiOlsyNTUsMjksOTddfSx7aW5kZXg6LjUzLHJnYjpbMjU1LDU0LDY5XX0se2luZGV4Oi42LHJnYjpbMjU1LDg1LDQ2XX0se2luZGV4Oi42NyxyZ2I6WzI1NSwxMjAsMzRdfSx7aW5kZXg6LjczLHJnYjpbMjU1LDE1NywzN119LHtpbmRleDouOCxyZ2I6WzI0MSwxOTEsNTddfSx7aW5kZXg6Ljg3LHJnYjpbMjI0LDIyMCw5M119LHtpbmRleDouOTMscmdiOlsyMTgsMjQxLDE0Ml19LHtpbmRleDoxLHJnYjpbMjI3LDI1MywxOThdfV19fSx7fV0sMTE3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vY29sb3JTY2FsZVwiKSxpPXQoXCJsZXJwXCIpO2Z1bmN0aW9uIGEodCl7cmV0dXJuW3RbMF0vMjU1LHRbMV0vMjU1LHRbMl0vMjU1LHRbM11dfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlLHI9XCIjXCIsbj0wO248MzsrK24pcis9KFwiMDBcIisoZT0oZT10W25dKS50b1N0cmluZygxNikpKS5zdWJzdHIoZS5sZW5ndGgpO3JldHVybiByfWZ1bmN0aW9uIHModCl7cmV0dXJuXCJyZ2JhKFwiK3Quam9pbihcIixcIikrXCIpXCJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbCxjLHUsaCxmLHAsZCxnO3R8fCh0PXt9KTtwPSh0Lm5zaGFkZXN8fDcyKS0xLGY9dC5mb3JtYXR8fFwiaGV4XCIsKGg9dC5jb2xvcm1hcCl8fChoPVwiamV0XCIpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBoKXtpZihoPWgudG9Mb3dlckNhc2UoKSwhbltoXSl0aHJvdyBFcnJvcihoK1wiIG5vdCBhIHN1cHBvcnRlZCBjb2xvcnNjYWxlXCIpO3U9bltoXX1lbHNle2lmKCFBcnJheS5pc0FycmF5KGgpKXRocm93IEVycm9yKFwidW5zdXBwb3J0ZWQgY29sb3JtYXAgb3B0aW9uXCIsaCk7dT1oLnNsaWNlKCl9aWYodS5sZW5ndGg+cCsxKXRocm93IG5ldyBFcnJvcihoK1wiIG1hcCByZXF1aXJlcyBuc2hhZGVzIHRvIGJlIGF0IGxlYXN0IHNpemUgXCIrdS5sZW5ndGgpO2Q9QXJyYXkuaXNBcnJheSh0LmFscGhhKT8yIT09dC5hbHBoYS5sZW5ndGg/WzEsMV06dC5hbHBoYS5zbGljZSgpOlwibnVtYmVyXCI9PXR5cGVvZiB0LmFscGhhP1t0LmFscGhhLHQuYWxwaGFdOlsxLDFdO2U9dS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodC5pbmRleCpwKX0pLGRbMF09TWF0aC5taW4oTWF0aC5tYXgoZFswXSwwKSwxKSxkWzFdPU1hdGgubWluKE1hdGgubWF4KGRbMV0sMCksMSk7dmFyIHY9dS5tYXAoZnVuY3Rpb24odCxlKXt2YXIgcj11W2VdLmluZGV4LG49dVtlXS5yZ2Iuc2xpY2UoKTtyZXR1cm4gND09PW4ubGVuZ3RoJiZuWzNdPj0wJiZuWzNdPD0xP246KG5bM109ZFswXSsoZFsxXS1kWzBdKSpyLG4pfSksbT1bXTtmb3IoZz0wO2c8ZS5sZW5ndGgtMTsrK2cpe2M9ZVtnKzFdLWVbZ10scj12W2ddLGw9dltnKzFdO2Zvcih2YXIgeT0wO3k8Yzt5Kyspe3ZhciB4PXkvYzttLnB1c2goW01hdGgucm91bmQoaShyWzBdLGxbMF0seCkpLE1hdGgucm91bmQoaShyWzFdLGxbMV0seCkpLE1hdGgucm91bmQoaShyWzJdLGxbMl0seCkpLGkoclszXSxsWzNdLHgpXSl9fW0ucHVzaCh1W3UubGVuZ3RoLTFdLnJnYi5jb25jYXQoZFsxXSkpLFwiaGV4XCI9PT1mP209bS5tYXAobyk6XCJyZ2JhU3RyaW5nXCI9PT1mP209bS5tYXAocyk6XCJmbG9hdFwiPT09ZiYmKG09bS5tYXAoYSkpO3JldHVybiBtfX0se1wiLi9jb2xvclNjYWxlXCI6MTE2LGxlcnA6NDE4fV0sMTE4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4oZSxyLGEpO2lmKDA9PT1vKXt2YXIgcz1pKG4odCxlLHIpKSxjPWkobih0LGUsYSkpO2lmKHM9PT1jKXtpZigwPT09cyl7dmFyIHU9bCh0LGUsciksaD1sKHQsZSxhKTtyZXR1cm4gdT09PWg/MDp1PzE6LTF9cmV0dXJuIDB9cmV0dXJuIDA9PT1jP3M+MD8tMTpsKHQsZSxhKT8tMToxOjA9PT1zP2M+MD8xOmwodCxlLHIpPzE6LTE6aShjLXMpfXZhciBmPW4odCxlLHIpO2lmKGY+MClyZXR1cm4gbz4wJiZuKHQsZSxhKT4wPzE6LTE7aWYoZjwwKXJldHVybiBvPjB8fG4odCxlLGEpPjA/MTotMTt2YXIgcD1uKHQsZSxhKTtyZXR1cm4gcD4wPzE6bCh0LGUscik/MTotMX07dmFyIG49dChcInJvYnVzdC1vcmllbnRhdGlvblwiKSxpPXQoXCJzaWdudW1cIiksYT10KFwidHdvLXN1bVwiKSxvPXQoXCJyb2J1c3QtcHJvZHVjdFwiKSxzPXQoXCJyb2J1c3Qtc3VtXCIpO2Z1bmN0aW9uIGwodCxlLHIpe3ZhciBuPWEodFswXSwtZVswXSksaT1hKHRbMV0sLWVbMV0pLGw9YShyWzBdLC1lWzBdKSxjPWEoclsxXSwtZVsxXSksdT1zKG8obixsKSxvKGksYykpO3JldHVybiB1W3UubGVuZ3RoLTFdPj0wfX0se1wicm9idXN0LW9yaWVudGF0aW9uXCI6NDk1LFwicm9idXN0LXByb2R1Y3RcIjo0OTYsXCJyb2J1c3Qtc3VtXCI6NTAwLHNpZ251bTo1MDEsXCJ0d28tc3VtXCI6NTI5fV0sMTE5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGgsYT10Lmxlbmd0aC1lLmxlbmd0aDtpZihhKXJldHVybiBhO3N3aXRjaChyKXtjYXNlIDA6cmV0dXJuIDA7Y2FzZSAxOnJldHVybiB0WzBdLWVbMF07Y2FzZSAyOnJldHVybiB0WzBdK3RbMV0tZVswXS1lWzFdfHxuKHRbMF0sdFsxXSktbihlWzBdLGVbMV0pO2Nhc2UgMzp2YXIgbz10WzBdK3RbMV0scz1lWzBdK2VbMV07aWYoYT1vK3RbMl0tKHMrZVsyXSkpcmV0dXJuIGE7dmFyIGw9bih0WzBdLHRbMV0pLGM9bihlWzBdLGVbMV0pO3JldHVybiBuKGwsdFsyXSktbihjLGVbMl0pfHxuKGwrdFsyXSxvKS1uKGMrZVsyXSxzKTtjYXNlIDQ6dmFyIHU9dFswXSxoPXRbMV0sZj10WzJdLHA9dFszXSxkPWVbMF0sZz1lWzFdLHY9ZVsyXSxtPWVbM107cmV0dXJuIHUraCtmK3AtKGQrZyt2K20pfHxuKHUsaCxmLHApLW4oZCxnLHYsbSxkKXx8bih1K2gsdStmLHUrcCxoK2YsaCtwLGYrcCktbihkK2csZCt2LGQrbSxnK3YsZyttLHYrbSl8fG4odStoK2YsdStoK3AsdStmK3AsaCtmK3ApLW4oZCtnK3YsZCtnK20sZCt2K20sZyt2K20pO2RlZmF1bHQ6Zm9yKHZhciB5PXQuc2xpY2UoKS5zb3J0KGkpLHg9ZS5zbGljZSgpLnNvcnQoaSksYj0wO2I8cjsrK2IpaWYoYT15W2JdLXhbYl0pcmV0dXJuIGE7cmV0dXJuIDB9fTt2YXIgbj1NYXRoLm1pbjtmdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQtZX19LHt9XSwxMjA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiY29tcGFyZS1jZWxsXCIpLGk9dChcImNlbGwtb3JpZW50YXRpb25cIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxlKXx8aSh0KS1pKGUpfX0se1wiY2VsbC1vcmllbnRhdGlvblwiOjEwMyxcImNvbXBhcmUtY2VsbFwiOjExOX1dLDEyMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2xpYi9jaDFkXCIpLGk9dChcIi4vbGliL2NoMmRcIiksYT10KFwiLi9saWIvY2huZFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoMD09PWUpcmV0dXJuW107aWYoMT09PWUpcmV0dXJuW1swXV07dmFyIHI9dFswXS5sZW5ndGg7aWYoMD09PXIpcmV0dXJuW107aWYoMT09PXIpcmV0dXJuIG4odCk7aWYoMj09PXIpcmV0dXJuIGkodCk7cmV0dXJuIGEodCxyKX19LHtcIi4vbGliL2NoMWRcIjoxMjIsXCIuL2xpYi9jaDJkXCI6MTIzLFwiLi9saWIvY2huZFwiOjEyNH1dLDEyMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTAsbj0xO248dC5sZW5ndGg7KytuKXRbbl1bMF08dFtlXVswXSYmKGU9biksdFtuXVswXT50W3JdWzBdJiYocj1uKTtyZXR1cm4gZTxyP1tbZV0sW3JdXTplPnI/W1tyXSxbZV1dOltbZV1dfX0se31dLDEyMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uKHQpLHI9ZS5sZW5ndGg7aWYocjw9MilyZXR1cm5bXTtmb3IodmFyIGk9bmV3IEFycmF5KHIpLGE9ZVtyLTFdLG89MDtvPHI7KytvKXt2YXIgcz1lW29dO2lbb109W2Esc10sYT1zfXJldHVybiBpfTt2YXIgbj10KFwibW9ub3RvbmUtY29udmV4LWh1bGwtMmRcIil9LHtcIm1vbm90b25lLWNvbnZleC1odWxsLTJkXCI6NDI3fV0sMTI0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dHJ5e3JldHVybiBuKHQsITApfWNhdGNoKHMpe3ZhciByPWkodCk7aWYoci5sZW5ndGg8PWUpcmV0dXJuW107dmFyIGE9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8ZS5sZW5ndGg7KytpKW5baV09dFtlW2ldXTtmb3IodmFyIGE9ZS5sZW5ndGgsaT0wO2k8cjsrK2kpZS5pbmRleE9mKGkpPDAmJihuW2ErK109dFtpXSk7cmV0dXJuIG59KHQsciksbz1uKGEsITApO3JldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPWUubGVuZ3RoLGk9MDtpPHI7KytpKWZvcih2YXIgYT10W2ldLG89MDtvPGEubGVuZ3RoOysrbyl7dmFyIHM9YVtvXTtpZihzPG4pYVtvXT1lW3NdO2Vsc2V7cy09bjtmb3IodmFyIGw9MDtsPG47KytsKXM+PWVbbF0mJihzKz0xKTthW29dPXN9fXJldHVybiB0fShvLHIpfX07dmFyIG49dChcImluY3JlbWVudGFsLWNvbnZleC1odWxsXCIpLGk9dChcImFmZmluZS1odWxsXCIpfSx7XCJhZmZpbmUtaHVsbFwiOjUzLFwiaW5jcmVtZW50YWwtY29udmV4LWh1bGxcIjo0MDZ9XSwxMjU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e0FGRzpcImFmZ2hhblwiLEFMQTpcIlxcXFxiXFxcXHdsYW5kXCIsQUxCOlwiYWxiYW5pYVwiLERaQTpcImFsZ2VyaWFcIixBU006XCJeKD89LiphbWVyaWMpLipzYW1vYVwiLEFORDpcImFuZG9ycmFcIixBR086XCJhbmdvbGFcIixBSUE6XCJhbmd1aWxsP2FcIixBVEE6XCJhbnRhcmN0aWNhXCIsQVRHOlwiYW50aWd1YVwiLEFSRzpcImFyZ2VudGluXCIsQVJNOlwiYXJtZW5pYVwiLEFCVzpcIl4oPyEuKmJvbmFpcmUpLipcXFxcYmFydWJhXCIsQVVTOlwiYXVzdHJhbGlhXCIsQVVUOlwiXig/IS4qaHVuZ2FyeSkuKmF1c3RyaWF8XFxcXGJhdXN0cmkuKlxcXFxiZW1wXCIsQVpFOlwiYXplcmJhaWphblwiLEJIUzpcImJhaGFtYXNcIixCSFI6XCJiYWhyYWluXCIsQkdEOlwiYmFuZ2xhZGVzaHxeKD89LiplYXN0KS4qcGFraT9zdGFuXCIsQlJCOlwiYmFyYmFkb3NcIixCTFI6XCJiZWxhcnVzfGJ5ZWxvXCIsQkVMOlwiXig/IS4qbHV4ZW0pLipiZWxnaXVtXCIsQkxaOlwiYmVsaXplfF4oPz0uKmJyaXRpc2gpLipob25kdXJhc1wiLEJFTjpcImJlbmlufGRhaG9tZVwiLEJNVTpcImJlcm11ZGFcIixCVE46XCJiaHV0YW5cIixCT0w6XCJib2xpdmlhXCIsQkVTOlwiXig/PS4qYm9uYWlyZSkuKmV1c3RhdGl1c3xeKD89LipjYXJpYikuKm5ldGhlcmxhbmRzfFxcXFxiYmVzLj9pc2xhbmRzXCIsQklIOlwiaGVyemVnb3ZpbmF8Ym9zbmlhXCIsQldBOlwiYm90c3dhbmF8YmVjaHVhbmFcIixCVlQ6XCJib3V2ZXRcIixCUkE6XCJicmF6aWxcIixJT1Q6XCJicml0aXNoLj9pbmRpYW4uP29jZWFuXCIsQlJOOlwiYnJ1bmVpXCIsQkdSOlwiYnVsZ2FyaWFcIixCRkE6XCJidXJraW5hfFxcXFxiZmFzb3x1cHBlci4/dm9sdGFcIixCREk6XCJidXJ1bmRpXCIsQ1BWOlwidmVyZGVcIixLSE06XCJjYW1ib2RpYXxrYW1wdWNoZWF8a2htZXJcIixDTVI6XCJjYW1lcm9vblwiLENBTjpcImNhbmFkYVwiLENZTTpcImNheW1hblwiLENBRjpcIlxcXFxiY2VudHJhbC5hZnJpY2FuLnJlcHVibGljXCIsVENEOlwiXFxcXGJjaGFkXCIsQ0hMOlwiXFxcXGJjaGlsZVwiLENITjpcIl4oPyEuKlxcXFxibWFjKSg/IS4qXFxcXGJob25nKSg/IS4qXFxcXGJ0YWkpKD8hLipcXFxcYnJlcCkuKmNoaW5hfF4oPz0uKnBlbykoPz0uKnJlcCkuKmNoaW5hXCIsQ1hSOlwiY2hyaXN0bWFzXCIsQ0NLOlwiXFxcXGJjb2Nvc3xrZWVsaW5nXCIsQ09MOlwiY29sb21iaWFcIixDT006XCJjb21vcm9cIixDT0c6XCJeKD8hLipcXFxcYmRlbSkoPyEuKlxcXFxiZFtcXFxcLl0/cikoPyEuKmtpbnNoYXNhKSg/IS4qemFpcmUpKD8hLipiZWxnKSg/IS4qbC5vcG9sZHZpbGxlKSg/IS4qZnJlZSkuKlxcXFxiY29uZ29cIixDT0s6XCJcXFxcYmNvb2tcIixDUkk6XCJjb3N0YS4/cmljYVwiLENJVjpcIml2b2lyZXxpdm9yeVwiLEhSVjpcImNyb2F0aWFcIixDVUI6XCJcXFxcYmN1YmFcIixDVVc6XCJeKD8hLipib25haXJlKS4qXFxcXGJjdXJhKGN8XFx4ZTcpYW9cIixDWVA6XCJjeXBydXNcIixDU0s6XCJjemVjaG9zbG92YWtpYVwiLENaRTpcIl4oPz0uKnJlcCkuKmN6ZWNofGN6ZWNoaWF8Ym9oZW1pYVwiLENPRDpcIlxcXFxiZGVtLipjb25nb3xjb25nby4qXFxcXGJkZW18Y29uZ28uKlxcXFxiZFtcXFxcLl0/cnxcXFxcYmRbXFxcXC5dP3IuKmNvbmdvfGJlbGdpYW4uP2NvbmdvfGNvbmdvLj9mcmVlLj9zdGF0ZXxraW5zaGFzYXx6YWlyZXxsLm9wb2xkdmlsbGV8ZHJjfGRyb2N8cmRjXCIsRE5LOlwiZGVubWFya1wiLERKSTpcImRqaWJvdXRpXCIsRE1BOlwiZG9taW5pY2EoPyFuKVwiLERPTTpcImRvbWluaWNhbi5yZXBcIixFQ1U6XCJlY3VhZG9yXCIsRUdZOlwiZWd5cHRcIixTTFY6XCJlbC4/c2FsdmFkb3JcIixHTlE6XCJndWluZS4qZXF8ZXEuKmd1aW5lfF4oPz0uKnNwYW4pLipndWluZWFcIixFUkk6XCJlcml0cmVhXCIsRVNUOlwiZXN0b25pYVwiLEVUSDpcImV0aGlvcGlhfGFieXNzaW5pYVwiLEZMSzpcImZhbGtsYW5kfG1hbHZpbmFzXCIsRlJPOlwiZmFyb2V8ZmFlcm9lXCIsRkpJOlwiZmlqaVwiLEZJTjpcImZpbmxhbmRcIixGUkE6XCJeKD8hLipcXFxcYmRlcCkoPyEuKm1hcnRpbmlxdWUpLipmcmFuY2V8ZnJlbmNoLj9yZXB1YmxpY3xcXFxcYmdhdWxcIixHVUY6XCJeKD89LipmcmVuY2gpLipndWlhbmFcIixQWUY6XCJmcmVuY2guP3BvbHluZXNpYXx0YWhpdGlcIixBVEY6XCJmcmVuY2guP3NvdXRoZXJuXCIsR0FCOlwiZ2Fib25cIixHTUI6XCJnYW1iaWFcIixHRU86XCJeKD8hLipzb3V0aCkuKmdlb3JnaWFcIixERFI6XCJnZXJtYW4uP2RlbW9jcmF0aWMuP3JlcHVibGljfGRlbW9jcmF0aWMuP3JlcHVibGljLipnZXJtYW55fGVhc3QuZ2VybWFueVwiLERFVTpcIl4oPyEuKmVhc3QpLipnZXJtYW55fF4oPz0uKlxcXFxiZmVkLipcXFxcYnJlcCkuKmdlcm1hblwiLEdIQTpcImdoYW5hfGdvbGQuP2NvYXN0XCIsR0lCOlwiZ2licmFsdGFyXCIsR1JDOlwiZ3JlZWNlfGhlbGxlbmljfGhlbGxhc1wiLEdSTDpcImdyZWVubGFuZFwiLEdSRDpcImdyZW5hZGFcIixHTFA6XCJndWFkZWxvdXBlXCIsR1VNOlwiXFxcXGJndWFtXCIsR1RNOlwiZ3VhdGVtYWxhXCIsR0dZOlwiZ3Vlcm5zZXlcIixHSU46XCJeKD8hLiplcSkoPyEuKnNwYW4pKD8hLipiaXNzYXUpKD8hLipwb3J0dSkoPyEuKm5ldykuKmd1aW5lYVwiLEdOQjpcImJpc3NhdXxeKD89Lipwb3J0dSkuKmd1aW5lYVwiLEdVWTpcImd1eWFuYXxicml0aXNoLj9ndWlhbmFcIixIVEk6XCJoYWl0aVwiLEhNRDpcImhlYXJkLiptY2RvbmFsZFwiLFZBVDpcImhvbHkuP3NlZXx2YXRpY2FufHBhcGFsLj9zdFwiLEhORDpcIl4oPyEuKmJyaXQpLipob25kdXJhc1wiLEhLRzpcImhvbmcuP2tvbmdcIixIVU46XCJeKD8hLiphdXN0cikuKmh1bmdhcnlcIixJU0w6XCJpY2VsYW5kXCIsSU5EOlwiaW5kaWEoPyEuKm9jZWEpXCIsSUROOlwiaW5kb25lc2lhXCIsSVJOOlwiXFxcXGJpcmFufHBlcnNpYVwiLElSUTpcIlxcXFxiaXJhcXxtZXNvcG90YW1pYVwiLElSTDpcIiheaXJlbGFuZCl8KF5yZXB1YmxpYy4qaXJlbGFuZClcIixJTU46XCJeKD89Lippc2xlKS4qXFxcXGJtYW5cIixJU1I6XCJpc3JhZWxcIixJVEE6XCJpdGFseVwiLEpBTTpcImphbWFpY2FcIixKUE46XCJqYXBhblwiLEpFWTpcImplcnNleVwiLEpPUjpcImpvcmRhblwiLEtBWjpcImthemFrXCIsS0VOOlwia2VueWF8YnJpdGlzaC4/ZWFzdC4/YWZyaWNhfGVhc3QuP2FmcmljYS4/cHJvdFwiLEtJUjpcImtpcmliYXRpXCIsUFJLOlwiXig/PS4qZGVtb2NyYXR8cGVvcGxlfG5vcnRofGQuKnAuKi5yKS4qXFxcXGJrb3JlYXxkcHJrfGtvcmVhLiooZC4qcC4qcilcIixLV1Q6XCJrdXdhaXRcIixLR1o6XCJreXJneXp8a2lyZ2hpelwiLExBTzpcIlxcXFxibGFvcz9cXFxcYlwiLExWQTpcImxhdHZpYVwiLExCTjpcImxlYmFub25cIixMU086XCJsZXNvdGhvfGJhc3V0b1wiLExCUjpcImxpYmVyaWFcIixMQlk6XCJsaWJ5YVwiLExJRTpcImxpZWNodGVuc3RlaW5cIixMVFU6XCJsaXRodWFuaWFcIixMVVg6XCJeKD8hLipiZWxnKS4qbHV4ZW1cIixNQUM6XCJtYWNhKG98dSlcIixNREc6XCJtYWRhZ2FzY2FyfG1hbGFnYXN5XCIsTVdJOlwibWFsYXdpfG55YXNhXCIsTVlTOlwibWFsYXlzaWFcIixNRFY6XCJtYWxkaXZlXCIsTUxJOlwiXFxcXGJtYWxpXFxcXGJcIixNTFQ6XCJcXFxcYm1hbHRhXCIsTUhMOlwibWFyc2hhbGxcIixNVFE6XCJtYXJ0aW5pcXVlXCIsTVJUOlwibWF1cml0YW5pYVwiLE1VUzpcIm1hdXJpdGl1c1wiLE1ZVDpcIlxcXFxibWF5b3R0ZVwiLE1FWDpcIlxcXFxibWV4aWNcIixGU006XCJmZWQuKm1pY3JvbmVzaWF8bWljcm9uZXNpYS4qZmVkXCIsTUNPOlwibW9uYWNvXCIsTU5HOlwibW9uZ29saWFcIixNTkU6XCJeKD8hLipzZXJiaWEpLiptb250ZW5lZ3JvXCIsTVNSOlwibW9udHNlcnJhdFwiLE1BUjpcIm1vcm9jY298XFxcXGJtYXJvY1wiLE1PWjpcIm1vemFtYmlxdWVcIixNTVI6XCJteWFubWFyfGJ1cm1hXCIsTkFNOlwibmFtaWJpYVwiLE5SVTpcIm5hdXJ1XCIsTlBMOlwibmVwYWxcIixOTEQ6XCJeKD8hLipcXFxcYmFudCkoPyEuKlxcXFxiY2FyaWIpLipuZXRoZXJsYW5kc1wiLEFOVDpcIl4oPz0uKlxcXFxiYW50KS4qKG5ldGhlcnxkdXRjaClcIixOQ0w6XCJuZXcuP2NhbGVkb25pYVwiLE5aTDpcIm5ldy4/emVhbGFuZFwiLE5JQzpcIm5pY2FyYWd1YVwiLE5FUjpcIlxcXFxibmlnZXIoPyFpYSlcIixOR0E6XCJuaWdlcmlhXCIsTklVOlwibml1ZVwiLE5GSzpcIm5vcmZvbGtcIixNTlA6XCJtYXJpYW5hXCIsTk9SOlwibm9yd2F5XCIsT01OOlwiXFxcXGJvbWFufHRydWNpYWxcIixQQUs6XCJeKD8hLiplYXN0KS4qcGFraT9zdGFuXCIsUExXOlwicGFsYXVcIixQU0U6XCJwYWxlc3RpbnxcXFxcYmdhemF8d2VzdC4/YmFua1wiLFBBTjpcInBhbmFtYVwiLFBORzpcInBhcHVhfG5ldy4/Z3VpbmVhXCIsUFJZOlwicGFyYWd1YXlcIixQRVI6XCJwZXJ1XCIsUEhMOlwicGhpbGlwcGluZXNcIixQQ046XCJwaXRjYWlyblwiLFBPTDpcInBvbGFuZFwiLFBSVDpcInBvcnR1Z2FsXCIsUFJJOlwicHVlcnRvLj9yaWNvXCIsUUFUOlwicWF0YXJcIixLT1I6XCJeKD8hLipkLipwLipyKSg/IS4qZGVtb2NyYXQpKD8hLipwZW9wbGUpKD8hLipub3J0aCkuKlxcXFxia29yZWEoPyEuKmQuKnAuKnIpXCIsTURBOlwibW9sZG92fGIoYXxlKXNzYXJhYmlhXCIsUkVVOlwicihlfFxceGU5KXVuaW9uXCIsUk9VOlwicihvfHV8b3UpbWFuaWFcIixSVVM6XCJcXFxcYnJ1c3NpYXxzb3ZpZXQuP3VuaW9ufHVcXFxcLj9zXFxcXC4/c1xcXFwuP3J8c29jaWFsaXN0Lj9yZXB1YmxpY3NcIixSV0E6XCJyd2FuZGFcIixCTE06XCJiYXJ0aChlfFxceGU5KWxlbXlcIixTSE46XCJoZWxlbmFcIixLTkE6XCJraXR0c3xcXFxcYm5ldmlzXCIsTENBOlwiXFxcXGJsdWNpYVwiLE1BRjpcIl4oPz0uKmNvbGxlY3Rpdml0eSkuKm1hcnRpbnxeKD89LipmcmFuY2UpLiptYXJ0aW4oPyFpcXVlKXxeKD89LipmcmVuY2gpLiptYXJ0aW4oPyFpcXVlKVwiLFNQTTpcIm1pcXVlbG9uXCIsVkNUOlwidmluY2VudFwiLFdTTTpcIl4oPyEuKmFtZXIpLipzYW1vYVwiLFNNUjpcInNhbi4/bWFyaW5vXCIsU1RQOlwiXFxcXGJzKGF8XFx4ZTMpby4/dG9tKGV8XFx4ZTkpXCIsU0FVOlwiXFxcXGJzYVxcXFx3Ki4/YXJhYmlhXCIsU0VOOlwic2VuZWdhbFwiLFNSQjpcIl4oPyEuKm1vbnRlKS4qc2VyYmlhXCIsU1lDOlwic2V5Y2hlbGxcIixTTEU6XCJzaWVycmFcIixTR1A6XCJzaW5nYXBvcmVcIixTWE06XCJeKD8hLiptYXJ0aW4pKD8hLipzYWJhKS4qbWFhcnRlblwiLFNWSzpcIl4oPyEuKmN6ZSkuKnNsb3Zha1wiLFNWTjpcInNsb3ZlbmlhXCIsU0xCOlwic29sb21vblwiLFNPTTpcInNvbWFsaVwiLFpBRjpcInNvdXRoLmFmcmljYXxzXFxcXFxcXFwuLj9hZnJpY2FcIixTR1M6XCJzb3V0aC4/Z2VvcmdpYXxzYW5kd2ljaFwiLFNTRDpcIlxcXFxic1xcXFx3Ki4/c3VkYW5cIixFU1A6XCJzcGFpblwiLExLQTpcInNyaS4/bGFua2F8Y2V5bG9uXCIsU0ROOlwiXig/IS4qXFxcXGJzKD8hdSkpLipzdWRhblwiLFNVUjpcInN1cmluYW18ZHV0Y2guP2d1aWFuYVwiLFNKTTpcInN2YWxiYXJkXCIsU1daOlwic3dhemlsYW5kXCIsU1dFOlwic3dlZGVuXCIsQ0hFOlwic3dpdHp8c3dpc3NcIixTWVI6XCJzeXJpYVwiLFRXTjpcInRhaXdhbnx0YWlwZWl8Zm9ybW9zYXxeKD8hLipwZW8pKD89LipyZXApLipjaGluYVwiLFRKSzpcInRhamlrXCIsVEhBOlwidGhhaWxhbmR8XFxcXGJzaWFtXCIsTUtEOlwibWFjZWRvbmlhfGZ5cm9tXCIsVExTOlwiXig/PS4qbGVzdGUpLip0aW1vcnxeKD89LiplYXN0KS4qdGltb3JcIixUR086XCJ0b2dvXCIsVEtMOlwidG9rZWxhdVwiLFRPTjpcInRvbmdhXCIsVFRPOlwidHJpbmlkYWR8dG9iYWdvXCIsVFVOOlwidHVuaXNpYVwiLFRVUjpcInR1cmtleVwiLFRLTTpcInR1cmttZW5cIixUQ0E6XCJ0dXJrc1wiLFRVVjpcInR1dmFsdVwiLFVHQTpcInVnYW5kYVwiLFVLUjpcInVrcmFpblwiLEFSRTpcImVtaXJhdGVzfF51XFxcXC4/YVxcXFwuP2VcXFxcLj8kfHVuaXRlZC4/YXJhYi4/ZW1cIixHQlI6XCJ1bml0ZWQuP2tpbmdkb218YnJpdGFpbnxedVxcXFwuP2tcXFxcLj8kXCIsVFpBOlwidGFuemFuaWFcIixVU0E6XCJ1bml0ZWQuP3N0YXRlc1xcXFxiKD8hLippc2xhbmRzKXxcXFxcYnVcXFxcLj9zXFxcXC4/YVxcXFwuP1xcXFxifF5cXFxccyp1XFxcXC4/c1xcXFwuP1xcXFxiKD8hLippc2xhbmRzKVwiLFVNSTpcIm1pbm9yLj9vdXRseWluZy4/aXNcIixVUlk6XCJ1cnVndWF5XCIsVVpCOlwidXpiZWtcIixWVVQ6XCJ2YW51YXR1fG5ldy4/aGVicmlkZXNcIixWRU46XCJ2ZW5lenVlbGFcIixWTk06XCJeKD8hLipyZXB1YmxpYykuKnZpZXQuP25hbXxeKD89Lipzb2NpYWxpc3QpLip2aWV0Lj9uYW1cIixWR0I6XCJeKD89LipcXFxcYnVcXFxcLj9cXFxccz9rKS4qdmlyZ2lufF4oPz0uKmJyaXQpLip2aXJnaW58Xig/PS4qa2luZ2RvbSkuKnZpcmdpblwiLFZJUjpcIl4oPz0uKlxcXFxidVxcXFwuP1xcXFxzP3MpLip2aXJnaW58Xig/PS4qc3RhdGVzKS4qdmlyZ2luXCIsV0xGOlwiZnV0dW5hfHdhbGxpc1wiLEVTSDpcIndlc3Rlcm4uc2FoYXJhXCIsWUVNOlwiXig/IS4qYXJhYikoPyEuKm5vcnRoKSg/IS4qc2FuYSkoPyEuKnBlbykoPyEuKmRlbSkoPyEuKnNvdXRoKSg/IS4qYWRlbikoPyEuKlxcXFxicFxcXFwuP2RcXFxcLj9yKS4qeWVtZW5cIixZTUQ6XCJeKD89LipwZW8pLip5ZW1lbnxeKD8hLipyZXApKD89LipkZW0pLip5ZW1lbnxeKD89Lipzb3V0aCkuKnllbWVufF4oPz0uKmFkZW4pLip5ZW1lbnxeKD89LipcXFxcYnBcXFxcLj9kXFxcXC4/cikuKnllbWVuXCIsWVVHOlwieXVnb3NsYXZpYVwiLFpNQjpcInphbWJpYXxub3J0aGVybi4/cmhvZGVzaWFcIixFQVo6XCJ6YW56aWJhclwiLFpXRTpcInppbWJhYndlfF4oPyEuKm5vcnRoZXJuKS4qcmhvZGVzaWFcIn19LHt9XSwxMjY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9W1wieHgtc21hbGxcIixcIngtc21hbGxcIixcInNtYWxsXCIsXCJtZWRpdW1cIixcImxhcmdlXCIsXCJ4LWxhcmdlXCIsXCJ4eC1sYXJnZVwiLFwibGFyZ2VyXCIsXCJzbWFsbGVyXCJdfSx7fV0sMTI3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVtcIm5vcm1hbFwiLFwiY29uZGVuc2VkXCIsXCJzZW1pLWNvbmRlbnNlZFwiLFwiZXh0cmEtY29uZGVuc2VkXCIsXCJ1bHRyYS1jb25kZW5zZWRcIixcImV4cGFuZGVkXCIsXCJzZW1pLWV4cGFuZGVkXCIsXCJleHRyYS1leHBhbmRlZFwiLFwidWx0cmEtZXhwYW5kZWRcIl19LHt9XSwxMjg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9W1wibm9ybWFsXCIsXCJpdGFsaWNcIixcIm9ibGlxdWVcIl19LHt9XSwxMjk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9W1wibm9ybWFsXCIsXCJib2xkXCIsXCJib2xkZXJcIixcImxpZ2h0ZXJcIixcIjEwMFwiLFwiMjAwXCIsXCIzMDBcIixcIjQwMFwiLFwiNTAwXCIsXCI2MDBcIixcIjcwMFwiLFwiODAwXCIsXCI5MDBcIl19LHt9XSwxMzA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e3BhcnNlOnQoXCIuL3BhcnNlXCIpLHN0cmluZ2lmeTp0KFwiLi9zdHJpbmdpZnlcIil9fSx7XCIuL3BhcnNlXCI6MTMyLFwiLi9zdHJpbmdpZnlcIjoxMzN9XSwxMzE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiY3NzLWZvbnQtc2l6ZS1rZXl3b3Jkc1wiKTtlLmV4cG9ydHM9e2lzU2l6ZTpmdW5jdGlvbih0KXtyZXR1cm4vXltcXGRcXC5dLy50ZXN0KHQpfHwtMSE9PXQuaW5kZXhPZihcIi9cIil8fC0xIT09bi5pbmRleE9mKHQpfX19LHtcImNzcy1mb250LXNpemUta2V5d29yZHNcIjoxMjZ9XSwxMzI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwidW5xdW90ZVwiKSxpPXQoXCJjc3MtZ2xvYmFsLWtleXdvcmRzXCIpLGE9dChcImNzcy1zeXN0ZW0tZm9udC1rZXl3b3Jkc1wiKSxvPXQoXCJjc3MtZm9udC13ZWlnaHQta2V5d29yZHNcIikscz10KFwiY3NzLWZvbnQtc3R5bGUta2V5d29yZHNcIiksbD10KFwiY3NzLWZvbnQtc3RyZXRjaC1rZXl3b3Jkc1wiKSxjPXQoXCJzdHJpbmctc3BsaXQtYnlcIiksdT10KFwiLi9saWIvdXRpbFwiKS5pc1NpemU7ZS5leHBvcnRzPWY7dmFyIGg9Zi5jYWNoZT17fTtmdW5jdGlvbiBmKHQpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcihcIkZvbnQgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZy5cIik7aWYoaFt0XSlyZXR1cm4gaFt0XTtpZihcIlwiPT09dCl0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgcGFyc2UgYW4gZW1wdHkgc3RyaW5nLlwiKTtpZigtMSE9PWEuaW5kZXhPZih0KSlyZXR1cm4gaFt0XT17c3lzdGVtOnR9O2Zvcih2YXIgZSxyPXtzdHlsZTpcIm5vcm1hbFwiLHZhcmlhbnQ6XCJub3JtYWxcIix3ZWlnaHQ6XCJub3JtYWxcIixzdHJldGNoOlwibm9ybWFsXCIsbGluZUhlaWdodDpcIm5vcm1hbFwiLHNpemU6XCIxcmVtXCIsZmFtaWx5OltcInNlcmlmXCJdfSxmPWModCwvXFxzKy8pO2U9Zi5zaGlmdCgpOyl7aWYoLTEhPT1pLmluZGV4T2YoZSkpcmV0dXJuW1wic3R5bGVcIixcInZhcmlhbnRcIixcIndlaWdodFwiLFwic3RyZXRjaFwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JbdF09ZX0pLGhbdF09cjtpZigtMT09PXMuaW5kZXhPZihlKSlpZihcIm5vcm1hbFwiIT09ZSYmXCJzbWFsbC1jYXBzXCIhPT1lKWlmKC0xPT09bC5pbmRleE9mKGUpKXtpZigtMT09PW8uaW5kZXhPZihlKSl7aWYodShlKSl7dmFyIGQ9YyhlLFwiL1wiKTtpZihyLnNpemU9ZFswXSxudWxsIT1kWzFdP3IubGluZUhlaWdodD1wKGRbMV0pOlwiL1wiPT09ZlswXSYmKGYuc2hpZnQoKSxyLmxpbmVIZWlnaHQ9cChmLnNoaWZ0KCkpKSwhZi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyByZXF1aXJlZCBmb250LWZhbWlseS5cIik7cmV0dXJuIHIuZmFtaWx5PWMoZi5qb2luKFwiIFwiKSwvXFxzKixcXHMqLykubWFwKG4pLGhbdF09cn10aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIG9yIHVuc3VwcG9ydGVkIGZvbnQgdG9rZW46IFwiK2UpfXIud2VpZ2h0PWV9ZWxzZSByLnN0cmV0Y2g9ZTtlbHNlIHIudmFyaWFudD1lO2Vsc2Ugci5zdHlsZT1lfXRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgcmVxdWlyZWQgZm9udC1zaXplLlwiKX1mdW5jdGlvbiBwKHQpe3ZhciBlPXBhcnNlRmxvYXQodCk7cmV0dXJuIGUudG9TdHJpbmcoKT09PXQ/ZTp0fX0se1wiLi9saWIvdXRpbFwiOjEzMSxcImNzcy1mb250LXN0cmV0Y2gta2V5d29yZHNcIjoxMjcsXCJjc3MtZm9udC1zdHlsZS1rZXl3b3Jkc1wiOjEyOCxcImNzcy1mb250LXdlaWdodC1rZXl3b3Jkc1wiOjEyOSxcImNzcy1nbG9iYWwta2V5d29yZHNcIjoxMzQsXCJjc3Mtc3lzdGVtLWZvbnQta2V5d29yZHNcIjoxMzUsXCJzdHJpbmctc3BsaXQtYnlcIjo1MTQsdW5xdW90ZTo1MzN9XSwxMzM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicGljay1ieS1hbGlhc1wiKSxpPXQoXCIuL2xpYi91dGlsXCIpLmlzU2l6ZSxhPWcodChcImNzcy1nbG9iYWwta2V5d29yZHNcIikpLG89Zyh0KFwiY3NzLXN5c3RlbS1mb250LWtleXdvcmRzXCIpKSxzPWcodChcImNzcy1mb250LXdlaWdodC1rZXl3b3Jkc1wiKSksbD1nKHQoXCJjc3MtZm9udC1zdHlsZS1rZXl3b3Jkc1wiKSksYz1nKHQoXCJjc3MtZm9udC1zdHJldGNoLWtleXdvcmRzXCIpKSx1PXtub3JtYWw6MSxcInNtYWxsLWNhcHNcIjoxfSxoPXtzZXJpZjoxLFwic2Fucy1zZXJpZlwiOjEsbW9ub3NwYWNlOjEsY3Vyc2l2ZToxLGZhbnRhc3k6MSxcInN5c3RlbS11aVwiOjF9LGY9XCIxcmVtXCIscD1cInNlcmlmXCI7ZnVuY3Rpb24gZCh0LGUpe2lmKHQmJiFlW3RdJiYhYVt0XSl0aHJvdyBFcnJvcihcIlVua25vd24ga2V5d29yZCBgXCIrdCtcImBcIik7cmV0dXJuIHR9ZnVuY3Rpb24gZyh0KXtmb3IodmFyIGU9e30scj0wO3I8dC5sZW5ndGg7cisrKWVbdFtyXV09MTtyZXR1cm4gZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoKHQ9bih0LHtzdHlsZTpcInN0eWxlIGZvbnRzdHlsZSBmb250U3R5bGUgZm9udC1zdHlsZSBzbG9wZSBkaXN0aW5jdGlvblwiLHZhcmlhbnQ6XCJ2YXJpYW50IGZvbnQtdmFyaWFudCBmb250VmFyaWFudCBmb250dmFyaWFudCB2YXIgY2FwaXRhbGl6YXRpb25cIix3ZWlnaHQ6XCJ3ZWlnaHQgdyBmb250LXdlaWdodCBmb250V2VpZ2h0IGZvbnR3ZWlnaHRcIixzdHJldGNoOlwic3RyZXRjaCBmb250LXN0cmV0Y2ggZm9udFN0cmV0Y2ggZm9udHN0cmV0Y2ggd2lkdGhcIixzaXplOlwic2l6ZSBzIGZvbnQtc2l6ZSBmb250U2l6ZSBmb250c2l6ZSBoZWlnaHQgZW0gZW1TaXplXCIsbGluZUhlaWdodDpcImxoIGxpbmUtaGVpZ2h0IGxpbmVIZWlnaHQgbGluZWhlaWdodCBsZWFkaW5nXCIsZmFtaWx5OlwiZm9udCBmYW1pbHkgZm9udEZhbWlseSBmb250LWZhbWlseSBmb250ZmFtaWx5IHR5cGUgdHlwZWZhY2UgZmFjZVwiLHN5c3RlbTpcInN5c3RlbSByZXNlcnZlZCBkZWZhdWx0IGdsb2JhbFwifSkpLnN5c3RlbSlyZXR1cm4gdC5zeXN0ZW0mJmQodC5zeXN0ZW0sbyksdC5zeXN0ZW07aWYoZCh0LnN0eWxlLGwpLGQodC52YXJpYW50LHUpLGQodC53ZWlnaHQscyksZCh0LnN0cmV0Y2gsYyksbnVsbD09dC5zaXplJiYodC5zaXplPWYpLFwibnVtYmVyXCI9PXR5cGVvZiB0LnNpemUmJih0LnNpemUrPVwicHhcIiksIWkpdGhyb3cgRXJyb3IoXCJCYWQgc2l6ZSB2YWx1ZSBgXCIrdC5zaXplK1wiYFwiKTt0LmZhbWlseXx8KHQuZmFtaWx5PXApLEFycmF5LmlzQXJyYXkodC5mYW1pbHkpJiYodC5mYW1pbHkubGVuZ3RofHwodC5mYW1pbHk9W3BdKSx0LmZhbWlseT10LmZhbWlseS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGhbdF0/dDonXCInK3QrJ1wiJ30pLmpvaW4oXCIsIFwiKSk7dmFyIGU9W107cmV0dXJuIGUucHVzaCh0LnN0eWxlKSx0LnZhcmlhbnQhPT10LnN0eWxlJiZlLnB1c2godC52YXJpYW50KSx0LndlaWdodCE9PXQudmFyaWFudCYmdC53ZWlnaHQhPT10LnN0eWxlJiZlLnB1c2godC53ZWlnaHQpLHQuc3RyZXRjaCE9PXQud2VpZ2h0JiZ0LnN0cmV0Y2ghPT10LnZhcmlhbnQmJnQuc3RyZXRjaCE9PXQuc3R5bGUmJmUucHVzaCh0LnN0cmV0Y2gpLGUucHVzaCh0LnNpemUrKG51bGw9PXQubGluZUhlaWdodHx8XCJub3JtYWxcIj09PXQubGluZUhlaWdodHx8dC5saW5lSGVpZ2h0K1wiXCI9PVwiMVwiP1wiXCI6XCIvXCIrdC5saW5lSGVpZ2h0KSksZS5wdXNoKHQuZmFtaWx5KSxlLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX19LHtcIi4vbGliL3V0aWxcIjoxMzEsXCJjc3MtZm9udC1zdHJldGNoLWtleXdvcmRzXCI6MTI3LFwiY3NzLWZvbnQtc3R5bGUta2V5d29yZHNcIjoxMjgsXCJjc3MtZm9udC13ZWlnaHQta2V5d29yZHNcIjoxMjksXCJjc3MtZ2xvYmFsLWtleXdvcmRzXCI6MTM0LFwiY3NzLXN5c3RlbS1mb250LWtleXdvcmRzXCI6MTM1LFwicGljay1ieS1hbGlhc1wiOjQ1OH1dLDEzNDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bXCJpbmhlcml0XCIsXCJpbml0aWFsXCIsXCJ1bnNldFwiXX0se31dLDEzNTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bXCJjYXB0aW9uXCIsXCJpY29uXCIsXCJtZW51XCIsXCJtZXNzYWdlLWJveFwiLFwic21hbGwtY2FwdGlvblwiLFwic3RhdHVzLWJhclwiXX0se31dLDEzNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89aS0xLHM9aSppLGw9bypvLGM9KDErMippKSpsLHU9aSpsLGg9cyooMy0yKmkpLGY9cypvO2lmKHQubGVuZ3RoKXthfHwoYT1uZXcgQXJyYXkodC5sZW5ndGgpKTtmb3IodmFyIHA9dC5sZW5ndGgtMTtwPj0wOy0tcClhW3BdPWMqdFtwXSt1KmVbcF0raCpyW3BdK2YqbltwXTtyZXR1cm4gYX1yZXR1cm4gYyp0K3UqZStoKnIrZipufSxlLmV4cG9ydHMuZGVyaXZhdGl2ZT1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89NippKmktNippLHM9MyppKmktNCppKzEsbD0tNippKmkrNippLGM9MyppKmktMippO2lmKHQubGVuZ3RoKXthfHwoYT1uZXcgQXJyYXkodC5sZW5ndGgpKTtmb3IodmFyIHU9dC5sZW5ndGgtMTt1Pj0wOy0tdSlhW3VdPW8qdFt1XStzKmVbdV0rbCpyW3VdK2Mqblt1XTtyZXR1cm4gYX1yZXR1cm4gbyp0K3MqZStsKnJbdV0rYypufX0se31dLDEzNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2xpYi90aHVuay5qc1wiKTtmdW5jdGlvbiBpKCl7dGhpcy5hcmdUeXBlcz1bXSx0aGlzLnNoaW1BcmdzPVtdLHRoaXMuYXJyYXlBcmdzPVtdLHRoaXMuYXJyYXlCbG9ja0luZGljZXM9W10sdGhpcy5zY2FsYXJBcmdzPVtdLHRoaXMub2Zmc2V0QXJncz1bXSx0aGlzLm9mZnNldEFyZ0luZGV4PVtdLHRoaXMuaW5kZXhBcmdzPVtdLHRoaXMuc2hhcGVBcmdzPVtdLHRoaXMuZnVuY05hbWU9XCJcIix0aGlzLnByZT1udWxsLHRoaXMuYm9keT1udWxsLHRoaXMucG9zdD1udWxsLHRoaXMuZGVidWc9ITF9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBpO2UucHJlPXQucHJlLGUuYm9keT10LmJvZHksZS5wb3N0PXQucG9zdDt2YXIgcj10LmFyZ3Muc2xpY2UoMCk7ZS5hcmdUeXBlcz1yO2Zvcih2YXIgYT0wO2E8ci5sZW5ndGg7KythKXt2YXIgbz1yW2FdO2lmKFwiYXJyYXlcIj09PW98fFwib2JqZWN0XCI9PXR5cGVvZiBvJiZvLmJsb2NrSW5kaWNlcyl7aWYoZS5hcmdUeXBlc1thXT1cImFycmF5XCIsZS5hcnJheUFyZ3MucHVzaChhKSxlLmFycmF5QmxvY2tJbmRpY2VzLnB1c2goby5ibG9ja0luZGljZXM/by5ibG9ja0luZGljZXM6MCksZS5zaGltQXJncy5wdXNoKFwiYXJyYXlcIithKSxhPGUucHJlLmFyZ3MubGVuZ3RoJiZlLnByZS5hcmdzW2FdLmNvdW50PjApdGhyb3cgbmV3IEVycm9yKFwiY3dpc2U6IHByZSgpIGJsb2NrIG1heSBub3QgcmVmZXJlbmNlIGFycmF5IGFyZ3NcIik7aWYoYTxlLnBvc3QuYXJncy5sZW5ndGgmJmUucG9zdC5hcmdzW2FdLmNvdW50PjApdGhyb3cgbmV3IEVycm9yKFwiY3dpc2U6IHBvc3QoKSBibG9jayBtYXkgbm90IHJlZmVyZW5jZSBhcnJheSBhcmdzXCIpfWVsc2UgaWYoXCJzY2FsYXJcIj09PW8pZS5zY2FsYXJBcmdzLnB1c2goYSksZS5zaGltQXJncy5wdXNoKFwic2NhbGFyXCIrYSk7ZWxzZSBpZihcImluZGV4XCI9PT1vKXtpZihlLmluZGV4QXJncy5wdXNoKGEpLGE8ZS5wcmUuYXJncy5sZW5ndGgmJmUucHJlLmFyZ3NbYV0uY291bnQ+MCl0aHJvdyBuZXcgRXJyb3IoXCJjd2lzZTogcHJlKCkgYmxvY2sgbWF5IG5vdCByZWZlcmVuY2UgYXJyYXkgaW5kZXhcIik7aWYoYTxlLmJvZHkuYXJncy5sZW5ndGgmJmUuYm9keS5hcmdzW2FdLmx2YWx1ZSl0aHJvdyBuZXcgRXJyb3IoXCJjd2lzZTogYm9keSgpIGJsb2NrIG1heSBub3Qgd3JpdGUgdG8gYXJyYXkgaW5kZXhcIik7aWYoYTxlLnBvc3QuYXJncy5sZW5ndGgmJmUucG9zdC5hcmdzW2FdLmNvdW50PjApdGhyb3cgbmV3IEVycm9yKFwiY3dpc2U6IHBvc3QoKSBibG9jayBtYXkgbm90IHJlZmVyZW5jZSBhcnJheSBpbmRleFwiKX1lbHNlIGlmKFwic2hhcGVcIj09PW8pe2lmKGUuc2hhcGVBcmdzLnB1c2goYSksYTxlLnByZS5hcmdzLmxlbmd0aCYmZS5wcmUuYXJnc1thXS5sdmFsdWUpdGhyb3cgbmV3IEVycm9yKFwiY3dpc2U6IHByZSgpIGJsb2NrIG1heSBub3Qgd3JpdGUgdG8gYXJyYXkgc2hhcGVcIik7aWYoYTxlLmJvZHkuYXJncy5sZW5ndGgmJmUuYm9keS5hcmdzW2FdLmx2YWx1ZSl0aHJvdyBuZXcgRXJyb3IoXCJjd2lzZTogYm9keSgpIGJsb2NrIG1heSBub3Qgd3JpdGUgdG8gYXJyYXkgc2hhcGVcIik7aWYoYTxlLnBvc3QuYXJncy5sZW5ndGgmJmUucG9zdC5hcmdzW2FdLmx2YWx1ZSl0aHJvdyBuZXcgRXJyb3IoXCJjd2lzZTogcG9zdCgpIGJsb2NrIG1heSBub3Qgd3JpdGUgdG8gYXJyYXkgc2hhcGVcIil9ZWxzZXtpZihcIm9iamVjdFwiIT10eXBlb2Ygb3x8IW8ub2Zmc2V0KXRocm93IG5ldyBFcnJvcihcImN3aXNlOiBVbmtub3duIGFyZ3VtZW50IHR5cGUgXCIrclthXSk7ZS5hcmdUeXBlc1thXT1cIm9mZnNldFwiLGUub2Zmc2V0QXJncy5wdXNoKHthcnJheTpvLmFycmF5LG9mZnNldDpvLm9mZnNldH0pLGUub2Zmc2V0QXJnSW5kZXgucHVzaChhKX19aWYoZS5hcnJheUFyZ3MubGVuZ3RoPD0wKXRocm93IG5ldyBFcnJvcihcImN3aXNlOiBObyBhcnJheSBhcmd1bWVudHMgc3BlY2lmaWVkXCIpO2lmKGUucHJlLmFyZ3MubGVuZ3RoPnIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImN3aXNlOiBUb28gbWFueSBhcmd1bWVudHMgaW4gcHJlKCkgYmxvY2tcIik7aWYoZS5ib2R5LmFyZ3MubGVuZ3RoPnIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImN3aXNlOiBUb28gbWFueSBhcmd1bWVudHMgaW4gYm9keSgpIGJsb2NrXCIpO2lmKGUucG9zdC5hcmdzLmxlbmd0aD5yLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJjd2lzZTogVG9vIG1hbnkgYXJndW1lbnRzIGluIHBvc3QoKSBibG9ja1wiKTtyZXR1cm4gZS5kZWJ1Zz0hIXQucHJpbnRDb2RlfHwhIXQuZGVidWcsZS5mdW5jTmFtZT10LmZ1bmNOYW1lfHxcImN3aXNlXCIsZS5ibG9ja1NpemU9dC5ibG9ja1NpemV8fDY0LG4oZSl9fSx7XCIuL2xpYi90aHVuay5qc1wiOjEzOX1dLDEzODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJ1bmlxXCIpO2Z1bmN0aW9uIGkodCxlLHIpe3ZhciBuLGksYT10Lmxlbmd0aCxvPWUuYXJyYXlBcmdzLmxlbmd0aCxzPWUuaW5kZXhBcmdzLmxlbmd0aD4wLGw9W10sYz1bXSx1PTAsaD0wO2ZvcihuPTA7bjxhOysrbiljLnB1c2goW1wiaVwiLG4sXCI9MFwiXS5qb2luKFwiXCIpKTtmb3IoaT0wO2k8bzsrK2kpZm9yKG49MDtuPGE7KytuKWg9dSx1PXRbbl0sMD09PW4/Yy5wdXNoKFtcImRcIixpLFwic1wiLG4sXCI9dFwiLGksXCJwXCIsdV0uam9pbihcIlwiKSk6Yy5wdXNoKFtcImRcIixpLFwic1wiLG4sXCI9KHRcIixpLFwicFwiLHUsXCItc1wiLGgsXCIqdFwiLGksXCJwXCIsaCxcIilcIl0uam9pbihcIlwiKSk7Zm9yKGMubGVuZ3RoPjAmJmwucHVzaChcInZhciBcIitjLmpvaW4oXCIsXCIpKSxuPWEtMTtuPj0wOy0tbil1PXRbbl0sbC5wdXNoKFtcImZvcihpXCIsbixcIj0wO2lcIixuLFwiPHNcIix1LFwiOysraVwiLG4sXCIpe1wiXS5qb2luKFwiXCIpKTtmb3IobC5wdXNoKHIpLG49MDtuPGE7KytuKXtmb3IoaD11LHU9dFtuXSxpPTA7aTxvOysraSlsLnB1c2goW1wicFwiLGksXCIrPWRcIixpLFwic1wiLG5dLmpvaW4oXCJcIikpO3MmJihuPjAmJmwucHVzaChbXCJpbmRleFtcIixoLFwiXS09c1wiLGhdLmpvaW4oXCJcIikpLGwucHVzaChbXCIrK2luZGV4W1wiLHUsXCJdXCJdLmpvaW4oXCJcIikpKSxsLnB1c2goXCJ9XCIpfXJldHVybiBsLmpvaW4oXCJcXG5cIil9ZnVuY3Rpb24gYSh0LGUscil7Zm9yKHZhciBuPXQuYm9keSxpPVtdLGE9W10sbz0wO288dC5hcmdzLmxlbmd0aDsrK28pe3ZhciBzPXQuYXJnc1tvXTtpZighKHMuY291bnQ8PTApKXt2YXIgbD1uZXcgUmVnRXhwKHMubmFtZSxcImdcIiksYz1cIlwiLHU9ZS5hcnJheUFyZ3MuaW5kZXhPZihvKTtzd2l0Y2goZS5hcmdUeXBlc1tvXSl7Y2FzZVwib2Zmc2V0XCI6dmFyIGg9ZS5vZmZzZXRBcmdJbmRleC5pbmRleE9mKG8pO3U9ZS5vZmZzZXRBcmdzW2hdLmFycmF5LGM9XCIrcVwiK2g7Y2FzZVwiYXJyYXlcIjpjPVwicFwiK3UrYzt2YXIgZj1cImxcIitvLHA9XCJhXCIrdTtpZigwPT09ZS5hcnJheUJsb2NrSW5kaWNlc1t1XSkxPT09cy5jb3VudD9cImdlbmVyaWNcIj09PXJbdV0/cy5sdmFsdWU/KGkucHVzaChbXCJ2YXIgXCIsZixcIj1cIixwLFwiLmdldChcIixjLFwiKVwiXS5qb2luKFwiXCIpKSxuPW4ucmVwbGFjZShsLGYpLGEucHVzaChbcCxcIi5zZXQoXCIsYyxcIixcIixmLFwiKVwiXS5qb2luKFwiXCIpKSk6bj1uLnJlcGxhY2UobCxbcCxcIi5nZXQoXCIsYyxcIilcIl0uam9pbihcIlwiKSk6bj1uLnJlcGxhY2UobCxbcCxcIltcIixjLFwiXVwiXS5qb2luKFwiXCIpKTpcImdlbmVyaWNcIj09PXJbdV0/KGkucHVzaChbXCJ2YXIgXCIsZixcIj1cIixwLFwiLmdldChcIixjLFwiKVwiXS5qb2luKFwiXCIpKSxuPW4ucmVwbGFjZShsLGYpLHMubHZhbHVlJiZhLnB1c2goW3AsXCIuc2V0KFwiLGMsXCIsXCIsZixcIilcIl0uam9pbihcIlwiKSkpOihpLnB1c2goW1widmFyIFwiLGYsXCI9XCIscCxcIltcIixjLFwiXVwiXS5qb2luKFwiXCIpKSxuPW4ucmVwbGFjZShsLGYpLHMubHZhbHVlJiZhLnB1c2goW3AsXCJbXCIsYyxcIl09XCIsZl0uam9pbihcIlwiKSkpO2Vsc2V7Zm9yKHZhciBkPVtzLm5hbWVdLGc9W2NdLHY9MDt2PE1hdGguYWJzKGUuYXJyYXlCbG9ja0luZGljZXNbdV0pO3YrKylkLnB1c2goXCJcXFxccypcXFxcWyhbXlxcXFxdXSspXFxcXF1cIiksZy5wdXNoKFwiJFwiKyh2KzEpK1wiKnRcIit1K1wiYlwiK3YpO2lmKGw9bmV3IFJlZ0V4cChkLmpvaW4oXCJcIiksXCJnXCIpLGM9Zy5qb2luKFwiK1wiKSxcImdlbmVyaWNcIj09PXJbdV0pdGhyb3cgbmV3IEVycm9yKFwiY3dpc2U6IEdlbmVyaWMgYXJyYXlzIG5vdCBzdXBwb3J0ZWQgaW4gY29tYmluYXRpb24gd2l0aCBibG9ja3MhXCIpO249bi5yZXBsYWNlKGwsW3AsXCJbXCIsYyxcIl1cIl0uam9pbihcIlwiKSl9YnJlYWs7Y2FzZVwic2NhbGFyXCI6bj1uLnJlcGxhY2UobCxcIllcIitlLnNjYWxhckFyZ3MuaW5kZXhPZihvKSk7YnJlYWs7Y2FzZVwiaW5kZXhcIjpuPW4ucmVwbGFjZShsLFwiaW5kZXhcIik7YnJlYWs7Y2FzZVwic2hhcGVcIjpuPW4ucmVwbGFjZShsLFwic2hhcGVcIil9fX1yZXR1cm5baS5qb2luKFwiXFxuXCIpLG4sYS5qb2luKFwiXFxuXCIpXS5qb2luKFwiXFxuXCIpLnRyaW0oKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZVsxXS5sZW5ndGgtTWF0aC5hYnModC5hcnJheUJsb2NrSW5kaWNlc1swXSl8MCxvPW5ldyBBcnJheSh0LmFycmF5QXJncy5sZW5ndGgpLHM9bmV3IEFycmF5KHQuYXJyYXlBcmdzLmxlbmd0aCksbD0wO2w8dC5hcnJheUFyZ3MubGVuZ3RoOysrbClzW2xdPWVbMipsXSxvW2xdPWVbMipsKzFdO3ZhciBjPVtdLHU9W10saD1bXSxmPVtdLHA9W107Zm9yKGw9MDtsPHQuYXJyYXlBcmdzLmxlbmd0aDsrK2wpe3QuYXJyYXlCbG9ja0luZGljZXNbbF08MD8oaC5wdXNoKDApLGYucHVzaChyKSxjLnB1c2gociksdS5wdXNoKHIrdC5hcnJheUJsb2NrSW5kaWNlc1tsXSkpOihoLnB1c2godC5hcnJheUJsb2NrSW5kaWNlc1tsXSksZi5wdXNoKHQuYXJyYXlCbG9ja0luZGljZXNbbF0rciksYy5wdXNoKDApLHUucHVzaCh0LmFycmF5QmxvY2tJbmRpY2VzW2xdKSk7Zm9yKHZhciBkPVtdLGc9MDtnPG9bbF0ubGVuZ3RoO2crKyloW2xdPD1vW2xdW2ddJiZvW2xdW2ddPGZbbF0mJmQucHVzaChvW2xdW2ddLWhbbF0pO3AucHVzaChkKX12YXIgdj1bXCJTU1wiXSxtPVtcIid1c2Ugc3RyaWN0J1wiXSx5PVtdO2ZvcihnPTA7ZzxyOysrZyl5LnB1c2goW1wic1wiLGcsXCI9U1NbXCIsZyxcIl1cIl0uam9pbihcIlwiKSk7Zm9yKGw9MDtsPHQuYXJyYXlBcmdzLmxlbmd0aDsrK2wpe2Zvcih2LnB1c2goXCJhXCIrbCksdi5wdXNoKFwidFwiK2wpLHYucHVzaChcInBcIitsKSxnPTA7ZzxyOysrZyl5LnB1c2goW1widFwiLGwsXCJwXCIsZyxcIj10XCIsbCxcIltcIixoW2xdK2csXCJdXCJdLmpvaW4oXCJcIikpO2ZvcihnPTA7ZzxNYXRoLmFicyh0LmFycmF5QmxvY2tJbmRpY2VzW2xdKTsrK2cpeS5wdXNoKFtcInRcIixsLFwiYlwiLGcsXCI9dFwiLGwsXCJbXCIsY1tsXStnLFwiXVwiXS5qb2luKFwiXCIpKX1mb3IobD0wO2w8dC5zY2FsYXJBcmdzLmxlbmd0aDsrK2wpdi5wdXNoKFwiWVwiK2wpO2lmKHQuc2hhcGVBcmdzLmxlbmd0aD4wJiZ5LnB1c2goXCJzaGFwZT1TUy5zbGljZSgwKVwiKSx0LmluZGV4QXJncy5sZW5ndGg+MCl7dmFyIHg9bmV3IEFycmF5KHIpO2ZvcihsPTA7bDxyOysrbCl4W2xdPVwiMFwiO3kucHVzaChbXCJpbmRleD1bXCIseC5qb2luKFwiLFwiKSxcIl1cIl0uam9pbihcIlwiKSl9Zm9yKGw9MDtsPHQub2Zmc2V0QXJncy5sZW5ndGg7KytsKXt2YXIgYj10Lm9mZnNldEFyZ3NbbF0sXz1bXTtmb3IoZz0wO2c8Yi5vZmZzZXQubGVuZ3RoOysrZykwIT09Yi5vZmZzZXRbZ10mJigxPT09Yi5vZmZzZXRbZ10/Xy5wdXNoKFtcInRcIixiLmFycmF5LFwicFwiLGddLmpvaW4oXCJcIikpOl8ucHVzaChbYi5vZmZzZXRbZ10sXCIqdFwiLGIuYXJyYXksXCJwXCIsZ10uam9pbihcIlwiKSkpOzA9PT1fLmxlbmd0aD95LnB1c2goXCJxXCIrbCtcIj0wXCIpOnkucHVzaChbXCJxXCIsbCxcIj1cIixfLmpvaW4oXCIrXCIpXS5qb2luKFwiXCIpKX12YXIgdz1uKFtdLmNvbmNhdCh0LnByZS50aGlzVmFycykuY29uY2F0KHQuYm9keS50aGlzVmFycykuY29uY2F0KHQucG9zdC50aGlzVmFycykpO2ZvcigoeT15LmNvbmNhdCh3KSkubGVuZ3RoPjAmJm0ucHVzaChcInZhciBcIit5LmpvaW4oXCIsXCIpKSxsPTA7bDx0LmFycmF5QXJncy5sZW5ndGg7KytsKW0ucHVzaChcInBcIitsK1wifD0wXCIpO3QucHJlLmJvZHkubGVuZ3RoPjMmJm0ucHVzaChhKHQucHJlLHQscykpO3ZhciBrPWEodC5ib2R5LHQscyksQT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRbMF0ubGVuZ3RoO2U8cjspe2Zvcih2YXIgbj0xO248dC5sZW5ndGg7KytuKWlmKHRbbl1bZV0hPT10WzBdW2VdKXJldHVybiBlOysrZX1yZXR1cm4gZX0ocCk7QTxyP20ucHVzaChmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGE9ZS5sZW5ndGgsbz1yLmFycmF5QXJncy5sZW5ndGgscz1yLmJsb2NrU2l6ZSxsPXIuaW5kZXhBcmdzLmxlbmd0aD4wLGM9W10sdT0wO3U8bzsrK3UpYy5wdXNoKFtcInZhciBvZmZzZXRcIix1LFwiPXBcIix1XS5qb2luKFwiXCIpKTtmb3IodT10O3U8YTsrK3UpYy5wdXNoKFtcImZvcih2YXIgalwiK3UrXCI9U1NbXCIsZVt1XSxcIl18MDtqXCIsdSxcIj4wOyl7XCJdLmpvaW4oXCJcIikpLGMucHVzaChbXCJpZihqXCIsdSxcIjxcIixzLFwiKXtcIl0uam9pbihcIlwiKSksYy5wdXNoKFtcInNcIixlW3VdLFwiPWpcIix1XS5qb2luKFwiXCIpKSxjLnB1c2goW1wialwiLHUsXCI9MFwiXS5qb2luKFwiXCIpKSxjLnB1c2goW1wifWVsc2V7c1wiLGVbdV0sXCI9XCIsc10uam9pbihcIlwiKSksYy5wdXNoKFtcImpcIix1LFwiLT1cIixzLFwifVwiXS5qb2luKFwiXCIpKSxsJiZjLnB1c2goW1wiaW5kZXhbXCIsZVt1XSxcIl09alwiLHVdLmpvaW4oXCJcIikpO2Zvcih1PTA7dTxvOysrdSl7Zm9yKHZhciBoPVtcIm9mZnNldFwiK3VdLGY9dDtmPGE7KytmKWgucHVzaChbXCJqXCIsZixcIip0XCIsdSxcInBcIixlW2ZdXS5qb2luKFwiXCIpKTtjLnB1c2goW1wicFwiLHUsXCI9KFwiLGguam9pbihcIitcIiksXCIpXCJdLmpvaW4oXCJcIikpfWZvcihjLnB1c2goaShlLHIsbikpLHU9dDt1PGE7Kyt1KWMucHVzaChcIn1cIik7cmV0dXJuIGMuam9pbihcIlxcblwiKX0oQSxwWzBdLHQsaykpOm0ucHVzaChpKHBbMF0sdCxrKSksdC5wb3N0LmJvZHkubGVuZ3RoPjMmJm0ucHVzaChhKHQucG9zdCx0LHMpKSx0LmRlYnVnJiZjb25zb2xlLmxvZyhcIi0tLS0tR2VuZXJhdGVkIGN3aXNlIHJvdXRpbmUgZm9yIFwiLGUsXCI6XFxuXCIrbS5qb2luKFwiXFxuXCIpK1wiXFxuLS0tLS0tLS0tLVwiKTt2YXIgVD1bdC5mdW5jTmFtZXx8XCJ1bm5hbWVkXCIsXCJfY3dpc2VfbG9vcF9cIixvWzBdLmpvaW4oXCJzXCIpLFwibVwiLEEsZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0hMCxuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBpPXRbbl0sYT1pLm1hdGNoKC9cXGQrLyk7YT1hP2FbMF06XCJcIiwwPT09aS5jaGFyQXQoMCk/ZVtuXT1cInVcIitpLmNoYXJBdCgxKSthOmVbbl09aS5jaGFyQXQoMCkrYSxuPjAmJihyPXImJmVbbl09PT1lW24tMV0pfXJldHVybiByP2VbMF06ZS5qb2luKFwiXCIpfShzKV0uam9pbihcIlwiKTtyZXR1cm4gbmV3IEZ1bmN0aW9uKFtcImZ1bmN0aW9uIFwiLFQsXCIoXCIsdi5qb2luKFwiLFwiKSxcIil7XCIsbS5qb2luKFwiXFxuXCIpLFwifSByZXR1cm4gXCIsVF0uam9pbihcIlwiKSkoKX19LHt1bmlxOjUzMn1dLDEzOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2NvbXBpbGUuanNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPVtcIid1c2Ugc3RyaWN0J1wiLFwidmFyIENBQ0hFRD17fVwiXSxyPVtdLGk9dC5mdW5jTmFtZStcIl9jd2lzZV90aHVua1wiO2UucHVzaChbXCJyZXR1cm4gZnVuY3Rpb24gXCIsaSxcIihcIix0LnNoaW1BcmdzLmpvaW4oXCIsXCIpLFwiKXtcIl0uam9pbihcIlwiKSk7Zm9yKHZhciBhPVtdLG89W10scz1bW1wiYXJyYXlcIix0LmFycmF5QXJnc1swXSxcIi5zaGFwZS5zbGljZShcIixNYXRoLm1heCgwLHQuYXJyYXlCbG9ja0luZGljZXNbMF0pLHQuYXJyYXlCbG9ja0luZGljZXNbMF08MD9cIixcIit0LmFycmF5QmxvY2tJbmRpY2VzWzBdK1wiKVwiOlwiKVwiXS5qb2luKFwiXCIpXSxsPVtdLGM9W10sdT0wO3U8dC5hcnJheUFyZ3MubGVuZ3RoOysrdSl7dmFyIGg9dC5hcnJheUFyZ3NbdV07ci5wdXNoKFtcInRcIixoLFwiPWFycmF5XCIsaCxcIi5kdHlwZSxcIixcInJcIixoLFwiPWFycmF5XCIsaCxcIi5vcmRlclwiXS5qb2luKFwiXCIpKSxhLnB1c2goXCJ0XCIraCksYS5wdXNoKFwiclwiK2gpLG8ucHVzaChcInRcIitoKSxvLnB1c2goXCJyXCIraCtcIi5qb2luKClcIikscy5wdXNoKFwiYXJyYXlcIitoK1wiLmRhdGFcIikscy5wdXNoKFwiYXJyYXlcIitoK1wiLnN0cmlkZVwiKSxzLnB1c2goXCJhcnJheVwiK2grXCIub2Zmc2V0fDBcIiksdT4wJiYobC5wdXNoKFwiYXJyYXlcIit0LmFycmF5QXJnc1swXStcIi5zaGFwZS5sZW5ndGg9PT1hcnJheVwiK2grXCIuc2hhcGUubGVuZ3RoK1wiKyhNYXRoLmFicyh0LmFycmF5QmxvY2tJbmRpY2VzWzBdKS1NYXRoLmFicyh0LmFycmF5QmxvY2tJbmRpY2VzW3VdKSkpLGMucHVzaChcImFycmF5XCIrdC5hcnJheUFyZ3NbMF0rXCIuc2hhcGVbc2hhcGVJbmRleCtcIitNYXRoLm1heCgwLHQuYXJyYXlCbG9ja0luZGljZXNbMF0pK1wiXT09PWFycmF5XCIraCtcIi5zaGFwZVtzaGFwZUluZGV4K1wiK01hdGgubWF4KDAsdC5hcnJheUJsb2NrSW5kaWNlc1t1XSkrXCJdXCIpKX1mb3IodC5hcnJheUFyZ3MubGVuZ3RoPjEmJihlLnB1c2goXCJpZiAoIShcIitsLmpvaW4oXCIgJiYgXCIpK1wiKSkgdGhyb3cgbmV3IEVycm9yKCdjd2lzZTogQXJyYXlzIGRvIG5vdCBhbGwgaGF2ZSB0aGUgc2FtZSBkaW1lbnNpb25hbGl0eSEnKVwiKSxlLnB1c2goXCJmb3IodmFyIHNoYXBlSW5kZXg9YXJyYXlcIit0LmFycmF5QXJnc1swXStcIi5zaGFwZS5sZW5ndGgtXCIrTWF0aC5hYnModC5hcnJheUJsb2NrSW5kaWNlc1swXSkrXCI7IHNoYXBlSW5kZXgtLVxceDNlMDspIHtcIiksZS5wdXNoKFwiaWYgKCEoXCIrYy5qb2luKFwiICYmIFwiKStcIikpIHRocm93IG5ldyBFcnJvcignY3dpc2U6IEFycmF5cyBkbyBub3QgYWxsIGhhdmUgdGhlIHNhbWUgc2hhcGUhJylcIiksZS5wdXNoKFwifVwiKSksdT0wO3U8dC5zY2FsYXJBcmdzLmxlbmd0aDsrK3Upcy5wdXNoKFwic2NhbGFyXCIrdC5zY2FsYXJBcmdzW3VdKTtyZXR1cm4gci5wdXNoKFtcInR5cGU9W1wiLG8uam9pbihcIixcIiksXCJdLmpvaW4oKVwiXS5qb2luKFwiXCIpKSxyLnB1c2goXCJwcm9jPUNBQ0hFRFt0eXBlXVwiKSxlLnB1c2goXCJ2YXIgXCIrci5qb2luKFwiLFwiKSksZS5wdXNoKFtcImlmKCFwcm9jKXtcIixcIkNBQ0hFRFt0eXBlXT1wcm9jPWNvbXBpbGUoW1wiLGEuam9pbihcIixcIiksXCJdKX1cIixcInJldHVybiBwcm9jKFwiLHMuam9pbihcIixcIiksXCIpfVwiXS5qb2luKFwiXCIpKSx0LmRlYnVnJiZjb25zb2xlLmxvZyhcIi0tLS0tR2VuZXJhdGVkIHRodW5rOlxcblwiK2Uuam9pbihcIlxcblwiKStcIlxcbi0tLS0tLS0tLS1cIiksbmV3IEZ1bmN0aW9uKFwiY29tcGlsZVwiLGUuam9pbihcIlxcblwiKSkobi5iaW5kKHZvaWQgMCx0KSl9fSx7XCIuL2NvbXBpbGUuanNcIjoxMzh9XSwxNDA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dChcImN3aXNlLWNvbXBpbGVyXCIpfSx7XCJjd2lzZS1jb21waWxlclwiOjEzN31dLDE0MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuLGk9dChcImVzNS1leHQvb2JqZWN0L2NvcHlcIiksYT10KFwiZXM1LWV4dC9vYmplY3Qvbm9ybWFsaXplLW9wdGlvbnNcIiksbz10KFwiZXM1LWV4dC9vYmplY3QvdmFsaWQtY2FsbGFibGVcIikscz10KFwiZXM1LWV4dC9vYmplY3QvbWFwXCIpLGw9dChcImVzNS1leHQvb2JqZWN0L3ZhbGlkLWNhbGxhYmxlXCIpLGM9dChcImVzNS1leHQvb2JqZWN0L3ZhbGlkLXZhbHVlXCIpLHU9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsaD1PYmplY3QuZGVmaW5lUHJvcGVydHksZj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O249ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGE9YyhlKSYmbChlLnZhbHVlKTtyZXR1cm4gZGVsZXRlKG49aShlKSkud3JpdGFibGUsZGVsZXRlIG4udmFsdWUsbi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hci5vdmVyd3JpdGVEZWZpbml0aW9uJiZmLmNhbGwodGhpcyx0KT9hOihlLnZhbHVlPXUuY2FsbChhLHIucmVzb2x2ZUNvbnRleHQ/ci5yZXNvbHZlQ29udGV4dCh0aGlzKTp0aGlzKSxoKHRoaXMsdCxlKSx0aGlzW3RdKX0sbn0sZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWEoYXJndW1lbnRzWzFdKTtyZXR1cm4gbnVsbCE9ZS5yZXNvbHZlQ29udGV4dCYmbyhlLnJlc29sdmVDb250ZXh0KSxzKHQsZnVuY3Rpb24odCxyKXtyZXR1cm4gbihyLHQsZSl9KX19LHtcImVzNS1leHQvb2JqZWN0L2NvcHlcIjoxODIsXCJlczUtZXh0L29iamVjdC9tYXBcIjoxOTEsXCJlczUtZXh0L29iamVjdC9ub3JtYWxpemUtb3B0aW9uc1wiOjE5MixcImVzNS1leHQvb2JqZWN0L3ZhbGlkLWNhbGxhYmxlXCI6MTk2LFwiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWVcIjoxOTh9XSwxNDI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZXM1LWV4dC9vYmplY3QvYXNzaWduXCIpLGk9dChcImVzNS1leHQvb2JqZWN0L25vcm1hbGl6ZS1vcHRpb25zXCIpLGE9dChcImVzNS1leHQvb2JqZWN0L2lzLWNhbGxhYmxlXCIpLG89dChcImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnNcIik7KGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGEscyxsLGM7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mnx8XCJzdHJpbmdcIiE9dHlwZW9mIHQ/KGw9ZSxlPXQsdD1udWxsKTpsPWFyZ3VtZW50c1syXSxudWxsPT10PyhyPXM9ITAsYT0hMSk6KHI9by5jYWxsKHQsXCJjXCIpLGE9by5jYWxsKHQsXCJlXCIpLHM9by5jYWxsKHQsXCJ3XCIpKSxjPXt2YWx1ZTplLGNvbmZpZ3VyYWJsZTpyLGVudW1lcmFibGU6YSx3cml0YWJsZTpzfSxsP24oaShsKSxjKTpjfSkuZ3M9ZnVuY3Rpb24odCxlLHIpe3ZhciBzLGwsYyx1O3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiB0PyhjPXIscj1lLGU9dCx0PW51bGwpOmM9YXJndW1lbnRzWzNdLG51bGw9PWU/ZT12b2lkIDA6YShlKT9udWxsPT1yP3I9dm9pZCAwOmEocil8fChjPXIscj12b2lkIDApOihjPWUsZT1yPXZvaWQgMCksbnVsbD09dD8ocz0hMCxsPSExKToocz1vLmNhbGwodCxcImNcIiksbD1vLmNhbGwodCxcImVcIikpLHU9e2dldDplLHNldDpyLGNvbmZpZ3VyYWJsZTpzLGVudW1lcmFibGU6bH0sYz9uKGkoYyksdSk6dX19LHtcImVzNS1leHQvb2JqZWN0L2Fzc2lnblwiOjE3OSxcImVzNS1leHQvb2JqZWN0L2lzLWNhbGxhYmxlXCI6MTg1LFwiZXM1LWV4dC9vYmplY3Qvbm9ybWFsaXplLW9wdGlvbnNcIjoxOTIsXCJlczUtZXh0L3N0cmluZy8jL2NvbnRhaW5zXCI6MTk5fV0sMTQzOltmdW5jdGlvbih0LGUscil7dmFyIG47bj10aGlzLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gcih0KXt2YXIgcjtyZXR1cm4gMT09PXQubGVuZ3RoJiYocj10LHQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZShyKHQpLG4pfSkse2xlZnQ6ZnVuY3Rpb24oZSxyLG4saSl7Zm9yKG51bGw9PW4mJihuPTApLG51bGw9PWkmJihpPWUubGVuZ3RoKTtuPGk7KXt2YXIgYT1uK2k+Pj4xO3QoZVthXSxyKTwwP249YSsxOmk9YX1yZXR1cm4gbn0scmlnaHQ6ZnVuY3Rpb24oZSxyLG4saSl7Zm9yKG51bGw9PW4mJihuPTApLG51bGw9PWkmJihpPWUubGVuZ3RoKTtuPGk7KXt2YXIgYT1uK2k+Pj4xO3QoZVthXSxyKT4wP2k9YTpuPWErMX1yZXR1cm4gbn19fXZhciBuPXIoZSksaT1uLnJpZ2h0LGE9bi5sZWZ0O2Z1bmN0aW9uIG8odCxlKXtyZXR1cm5bdCxlXX1mdW5jdGlvbiBzKHQpe3JldHVybiBudWxsPT09dD9OYU46K3R9ZnVuY3Rpb24gbCh0LGUpe3ZhciByLG4saT10Lmxlbmd0aCxhPTAsbz0tMSxsPTAsYz0wO2lmKG51bGw9PWUpZm9yKDsrK288aTspaXNOYU4ocj1zKHRbb10pKXx8KGMrPShuPXItbCkqKHItKGwrPW4vKythKSkpO2Vsc2UgZm9yKDsrK288aTspaXNOYU4ocj1zKGUodFtvXSxvLHQpKSl8fChjKz0obj1yLWwpKihyLShsKz1uLysrYSkpKTtpZihhPjEpcmV0dXJuIGMvKGEtMSl9ZnVuY3Rpb24gYyh0LGUpe3ZhciByPWwodCxlKTtyZXR1cm4gcj9NYXRoLnNxcnQocik6cn1mdW5jdGlvbiB1KHQsZSl7dmFyIHIsbixpLGE9dC5sZW5ndGgsbz0tMTtpZihudWxsPT1lKXtmb3IoOysrbzxhOylpZihudWxsIT0ocj10W29dKSYmcj49cilmb3Iobj1pPXI7KytvPGE7KW51bGwhPShyPXRbb10pJiYobj5yJiYobj1yKSxpPHImJihpPXIpKX1lbHNlIGZvcig7KytvPGE7KWlmKG51bGwhPShyPWUodFtvXSxvLHQpKSYmcj49cilmb3Iobj1pPXI7KytvPGE7KW51bGwhPShyPWUodFtvXSxvLHQpKSYmKG4+ciYmKG49ciksaTxyJiYoaT1yKSk7cmV0dXJuW24saV19dmFyIGg9QXJyYXkucHJvdG90eXBlLGY9aC5zbGljZSxwPWgubWFwO2Z1bmN0aW9uIGQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIGcodCl7cmV0dXJuIHR9ZnVuY3Rpb24gdih0LGUscil7dD0rdCxlPStlLHI9KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8oZT10LHQ9MCwxKTppPDM/MTorcjtmb3IodmFyIG49LTEsaT0wfE1hdGgubWF4KDAsTWF0aC5jZWlsKChlLXQpL3IpKSxhPW5ldyBBcnJheShpKTsrK248aTspYVtuXT10K24qcjtyZXR1cm4gYX12YXIgbT1NYXRoLnNxcnQoNTApLHk9TWF0aC5zcXJ0KDEwKSx4PU1hdGguc3FydCgyKTtmdW5jdGlvbiBiKHQsZSxyKXt2YXIgbj0oZS10KS9NYXRoLm1heCgwLHIpLGk9TWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMTApLGE9bi9NYXRoLnBvdygxMCxpKTtyZXR1cm4gaT49MD8oYT49bT8xMDphPj15PzU6YT49eD8yOjEpKk1hdGgucG93KDEwLGkpOi1NYXRoLnBvdygxMCwtaSkvKGE+PW0/MTA6YT49eT81OmE+PXg/MjoxKX1mdW5jdGlvbiBfKHQsZSxyKXt2YXIgbj1NYXRoLmFicyhlLXQpL01hdGgubWF4KDAsciksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCkpLGE9bi9pO3JldHVybiBhPj1tP2kqPTEwOmE+PXk/aSo9NTphPj14JiYoaSo9MiksZTx0Py1pOml9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMikrMX1mdW5jdGlvbiBrKHQsZSxyKXtpZihudWxsPT1yJiYocj1zKSxuPXQubGVuZ3RoKXtpZigoZT0rZSk8PTB8fG48MilyZXR1cm4rcih0WzBdLDAsdCk7aWYoZT49MSlyZXR1cm4rcih0W24tMV0sbi0xLHQpO3ZhciBuLGk9KG4tMSkqZSxhPU1hdGguZmxvb3IoaSksbz0rcih0W2FdLGEsdCk7cmV0dXJuIG8rKCtyKHRbYSsxXSxhKzEsdCktbykqKGktYSl9fWZ1bmN0aW9uIEEodCxlKXt2YXIgcixuLGk9dC5sZW5ndGgsYT0tMTtpZihudWxsPT1lKXtmb3IoOysrYTxpOylpZihudWxsIT0ocj10W2FdKSYmcj49cilmb3Iobj1yOysrYTxpOyludWxsIT0ocj10W2FdKSYmbj5yJiYobj1yKX1lbHNlIGZvcig7KythPGk7KWlmKG51bGwhPShyPWUodFthXSxhLHQpKSYmcj49cilmb3Iobj1yOysrYTxpOyludWxsIT0ocj1lKHRbYV0sYSx0KSkmJm4+ciYmKG49cik7cmV0dXJuIG59ZnVuY3Rpb24gVCh0KXtpZighKGk9dC5sZW5ndGgpKXJldHVybltdO2Zvcih2YXIgZT0tMSxyPUEodCxNKSxuPW5ldyBBcnJheShyKTsrK2U8cjspZm9yKHZhciBpLGE9LTEsbz1uW2VdPW5ldyBBcnJheShpKTsrK2E8aTspb1thXT10W2FdW2VdO3JldHVybiBufWZ1bmN0aW9uIE0odCl7cmV0dXJuIHQubGVuZ3RofXQuYmlzZWN0PWksdC5iaXNlY3RSaWdodD1pLHQuYmlzZWN0TGVmdD1hLHQuYXNjZW5kaW5nPWUsdC5iaXNlY3Rvcj1yLHQuY3Jvc3M9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxzLGw9dC5sZW5ndGgsYz1lLmxlbmd0aCx1PW5ldyBBcnJheShsKmMpO2ZvcihudWxsPT1yJiYocj1vKSxuPWE9MDtuPGw7KytuKWZvcihzPXRbbl0saT0wO2k8YzsrK2ksKythKXVbYV09cihzLGVbaV0pO3JldHVybiB1fSx0LmRlc2NlbmRpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59LHQuZGV2aWF0aW9uPWMsdC5leHRlbnQ9dSx0Lmhpc3RvZ3JhbT1mdW5jdGlvbigpe3ZhciB0PWcsZT11LHI9dztmdW5jdGlvbiBuKG4pe3ZhciBhLG8scz1uLmxlbmd0aCxsPW5ldyBBcnJheShzKTtmb3IoYT0wO2E8czsrK2EpbFthXT10KG5bYV0sYSxuKTt2YXIgYz1lKGwpLHU9Y1swXSxoPWNbMV0sZj1yKGwsdSxoKTtBcnJheS5pc0FycmF5KGYpfHwoZj1fKHUsaCxmKSxmPXYoTWF0aC5jZWlsKHUvZikqZixoLGYpKTtmb3IodmFyIHA9Zi5sZW5ndGg7ZlswXTw9dTspZi5zaGlmdCgpLC0tcDtmb3IoO2ZbcC0xXT5oOylmLnBvcCgpLC0tcDt2YXIgZCxnPW5ldyBBcnJheShwKzEpO2ZvcihhPTA7YTw9cDsrK2EpKGQ9Z1thXT1bXSkueDA9YT4wP2ZbYS0xXTp1LGQueDE9YTxwP2ZbYV06aDtmb3IoYT0wO2E8czsrK2EpdTw9KG89bFthXSkmJm88PWgmJmdbaShmLG8sMCxwKV0ucHVzaChuW2FdKTtyZXR1cm4gZ31yZXR1cm4gbi52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6ZChlKSxuKTp0fSxuLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6ZChbdFswXSx0WzFdXSksbik6ZX0sbi50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpBcnJheS5pc0FycmF5KHQpP2QoZi5jYWxsKHQpKTpkKHQpLG4pOnJ9LG59LHQudGhyZXNob2xkRnJlZWRtYW5EaWFjb25pcz1mdW5jdGlvbih0LHIsbil7cmV0dXJuIHQ9cC5jYWxsKHQscykuc29ydChlKSxNYXRoLmNlaWwoKG4tcikvKDIqKGsodCwuNzUpLWsodCwuMjUpKSpNYXRoLnBvdyh0Lmxlbmd0aCwtMS8zKSkpfSx0LnRocmVzaG9sZFNjb3R0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gTWF0aC5jZWlsKChyLWUpLygzLjUqYyh0KSpNYXRoLnBvdyh0Lmxlbmd0aCwtMS8zKSkpfSx0LnRocmVzaG9sZFN0dXJnZXM9dyx0Lm1heD1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10Lmxlbmd0aCxhPS0xO2lmKG51bGw9PWUpe2Zvcig7KythPGk7KWlmKG51bGwhPShyPXRbYV0pJiZyPj1yKWZvcihuPXI7KythPGk7KW51bGwhPShyPXRbYV0pJiZyPm4mJihuPXIpfWVsc2UgZm9yKDsrK2E8aTspaWYobnVsbCE9KHI9ZSh0W2FdLGEsdCkpJiZyPj1yKWZvcihuPXI7KythPGk7KW51bGwhPShyPWUodFthXSxhLHQpKSYmcj5uJiYobj1yKTtyZXR1cm4gbn0sdC5tZWFuPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10Lmxlbmd0aCxpPW4sYT0tMSxvPTA7aWYobnVsbD09ZSlmb3IoOysrYTxuOylpc05hTihyPXModFthXSkpPy0taTpvKz1yO2Vsc2UgZm9yKDsrK2E8bjspaXNOYU4ocj1zKGUodFthXSxhLHQpKSk/LS1pOm8rPXI7aWYoaSlyZXR1cm4gby9pfSx0Lm1lZGlhbj1mdW5jdGlvbih0LHIpe3ZhciBuLGk9dC5sZW5ndGgsYT0tMSxvPVtdO2lmKG51bGw9PXIpZm9yKDsrK2E8aTspaXNOYU4obj1zKHRbYV0pKXx8by5wdXNoKG4pO2Vsc2UgZm9yKDsrK2E8aTspaXNOYU4obj1zKHIodFthXSxhLHQpKSl8fG8ucHVzaChuKTtyZXR1cm4gayhvLnNvcnQoZSksLjUpfSx0Lm1lcmdlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saT10Lmxlbmd0aCxhPS0xLG89MDsrK2E8aTspbys9dFthXS5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KG8pOy0taT49MDspZm9yKGU9KG49dFtpXSkubGVuZ3RoOy0tZT49MDspclstLW9dPW5bZV07cmV0dXJuIHJ9LHQubWluPUEsdC5wYWlycz1mdW5jdGlvbih0LGUpe251bGw9PWUmJihlPW8pO2Zvcih2YXIgcj0wLG49dC5sZW5ndGgtMSxpPXRbMF0sYT1uZXcgQXJyYXkobjwwPzA6bik7cjxuOylhW3JdPWUoaSxpPXRbKytyXSk7cmV0dXJuIGF9LHQucGVybXV0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09dFtlW3JdXTtyZXR1cm4gbn0sdC5xdWFudGlsZT1rLHQucmFuZ2U9dix0LnNjYW49ZnVuY3Rpb24odCxyKXtpZihuPXQubGVuZ3RoKXt2YXIgbixpLGE9MCxvPTAscz10W29dO2ZvcihudWxsPT1yJiYocj1lKTsrK2E8bjspKHIoaT10W2FdLHMpPDB8fDAhPT1yKHMscykpJiYocz1pLG89YSk7cmV0dXJuIDA9PT1yKHMscyk/bzp2b2lkIDB9fSx0LnNodWZmbGU9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpLGE9KG51bGw9PXI/dC5sZW5ndGg6ciktKGU9bnVsbD09ZT8wOitlKTthOylpPU1hdGgucmFuZG9tKCkqYS0tfDAsbj10W2ErZV0sdFthK2VdPXRbaStlXSx0W2krZV09bjtyZXR1cm4gdH0sdC5zdW09ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQubGVuZ3RoLGk9LTEsYT0wO2lmKG51bGw9PWUpZm9yKDsrK2k8bjspKHI9K3RbaV0pJiYoYSs9cik7ZWxzZSBmb3IoOysraTxuOykocj0rZSh0W2ldLGksdCkpJiYoYSs9cik7cmV0dXJuIGF9LHQudGlja3M9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHM9LTE7aWYocj0rciwodD0rdCk9PShlPStlKSYmcj4wKXJldHVyblt0XTtpZigobj1lPHQpJiYoaT10LHQ9ZSxlPWkpLDA9PT0obz1iKHQsZSxyKSl8fCFpc0Zpbml0ZShvKSlyZXR1cm5bXTtpZihvPjApZm9yKHQ9TWF0aC5jZWlsKHQvbyksZT1NYXRoLmZsb29yKGUvbyksYT1uZXcgQXJyYXkoaT1NYXRoLmNlaWwoZS10KzEpKTsrK3M8aTspYVtzXT0odCtzKSpvO2Vsc2UgZm9yKHQ9TWF0aC5mbG9vcih0Km8pLGU9TWF0aC5jZWlsKGUqbyksYT1uZXcgQXJyYXkoaT1NYXRoLmNlaWwodC1lKzEpKTsrK3M8aTspYVtzXT0odC1zKS9vO3JldHVybiBuJiZhLnJldmVyc2UoKSxhfSx0LnRpY2tJbmNyZW1lbnQ9Yix0LnRpY2tTdGVwPV8sdC50cmFuc3Bvc2U9VCx0LnZhcmlhbmNlPWwsdC56aXA9ZnVuY3Rpb24oKXtyZXR1cm4gVChhcmd1bWVudHMpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0oXCJvYmplY3RcIj09dHlwZW9mIHImJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBlP3I6bi5kMz1uLmQzfHx7fSl9LHt9XSwxNDQ6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbjtuPXRoaXMsZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZSgpe31mdW5jdGlvbiByKHQscil7dmFyIG49bmV3IGU7aWYodCBpbnN0YW5jZW9mIGUpdC5lYWNoKGZ1bmN0aW9uKHQsZSl7bi5zZXQoZSx0KX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIGksYT0tMSxvPXQubGVuZ3RoO2lmKG51bGw9PXIpZm9yKDsrK2E8bzspbi5zZXQoYSx0W2FdKTtlbHNlIGZvcig7KythPG87KW4uc2V0KHIoaT10W2FdLGEsdCksaSl9ZWxzZSBpZih0KWZvcih2YXIgcyBpbiB0KW4uc2V0KHMsdFtzXSk7cmV0dXJuIG59ZS5wcm90b3R5cGU9ci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmUsaGFzOmZ1bmN0aW9uKHQpe3JldHVyblwiJFwiK3QgaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW1wiJFwiK3RdfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpc1tcIiRcIit0XT1lLHRoaXN9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT1cIiRcIit0O3JldHVybiBlIGluIHRoaXMmJmRlbGV0ZSB0aGlzW2VdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKVwiJFwiPT09dFswXSYmZGVsZXRlIHRoaXNbdF19LGtleXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcylcIiRcIj09PWVbMF0mJnQucHVzaChlLnNsaWNlKDEpKTtyZXR1cm4gdH0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpXCIkXCI9PT1lWzBdJiZ0LnB1c2godGhpc1tlXSk7cmV0dXJuIHR9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcylcIiRcIj09PWVbMF0mJnQucHVzaCh7a2V5OmUuc2xpY2UoMSksdmFsdWU6dGhpc1tlXX0pO3JldHVybiB0fSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtmb3IodmFyIGUgaW4gdGhpcylcIiRcIj09PWVbMF0mJisrdDtyZXR1cm4gdH0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcylpZihcIiRcIj09PXRbMF0pcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMpXCIkXCI9PT1lWzBdJiZ0KHRoaXNbZV0sZS5zbGljZSgxKSx0aGlzKX19O2Z1bmN0aW9uIG4oKXtyZXR1cm57fX1mdW5jdGlvbiBpKHQsZSxyKXt0W2VdPXJ9ZnVuY3Rpb24gYSgpe3JldHVybiByKCl9ZnVuY3Rpb24gbyh0LGUscil7dC5zZXQoZSxyKX1mdW5jdGlvbiBzKCl7fXZhciBsPXIucHJvdG90eXBlO2Z1bmN0aW9uIGModCxlKXt2YXIgcj1uZXcgcztpZih0IGluc3RhbmNlb2Ygcyl0LmVhY2goZnVuY3Rpb24odCl7ci5hZGQodCl9KTtlbHNlIGlmKHQpe3ZhciBuPS0xLGk9dC5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysrbjxpOylyLmFkZCh0W25dKTtlbHNlIGZvcig7KytuPGk7KXIuYWRkKGUodFtuXSxuLHQpKX1yZXR1cm4gcn1zLnByb3RvdHlwZT1jLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cyxoYXM6bC5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW1wiJFwiKyh0Kz1cIlwiKV09dCx0aGlzfSxyZW1vdmU6bC5yZW1vdmUsY2xlYXI6bC5jbGVhcix2YWx1ZXM6bC5rZXlzLHNpemU6bC5zaXplLGVtcHR5OmwuZW1wdHksZWFjaDpsLmVhY2h9O3QubmVzdD1mdW5jdGlvbigpe3ZhciB0LGUscyxsPVtdLGM9W107ZnVuY3Rpb24gdShuLGksYSxvKXtpZihpPj1sLmxlbmd0aClyZXR1cm4gbnVsbCE9dCYmbi5zb3J0KHQpLG51bGwhPWU/ZShuKTpuO2Zvcih2YXIgcyxjLGgsZj0tMSxwPW4ubGVuZ3RoLGQ9bFtpKytdLGc9cigpLHY9YSgpOysrZjxwOykoaD1nLmdldChzPWQoYz1uW2ZdKStcIlwiKSk/aC5wdXNoKGMpOmcuc2V0KHMsW2NdKTtyZXR1cm4gZy5lYWNoKGZ1bmN0aW9uKHQsZSl7byh2LGUsdSh0LGksYSxvKSl9KSx2fXJldHVybiBzPXtvYmplY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIHUodCwwLG4saSl9LG1hcDpmdW5jdGlvbih0KXtyZXR1cm4gdSh0LDAsYSxvKX0sZW50cmllczpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24gdChyLG4pe2lmKCsrbj5sLmxlbmd0aClyZXR1cm4gcjt2YXIgaSxhPWNbbi0xXTtyZXR1cm4gbnVsbCE9ZSYmbj49bC5sZW5ndGg/aT1yLmVudHJpZXMoKTooaT1bXSxyLmVhY2goZnVuY3Rpb24oZSxyKXtpLnB1c2goe2tleTpyLHZhbHVlczp0KGUsbil9KX0pKSxudWxsIT1hP2kuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBhKHQua2V5LGUua2V5KX0pOml9KHUodCwwLGEsbyksMCl9LGtleTpmdW5jdGlvbih0KXtyZXR1cm4gbC5wdXNoKHQpLHN9LHNvcnRLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiBjW2wubGVuZ3RoLTFdPXQsc30sc29ydFZhbHVlczpmdW5jdGlvbihlKXtyZXR1cm4gdD1lLHN9LHJvbGx1cDpmdW5jdGlvbih0KXtyZXR1cm4gZT10LHN9fX0sdC5zZXQ9Yyx0Lm1hcD1yLHQua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2gocik7cmV0dXJuIGV9LHQudmFsdWVzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh0W3JdKTtyZXR1cm4gZX0sdC5lbnRyaWVzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh7a2V5OnIsdmFsdWU6dFtyXX0pO3JldHVybiBlfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0oXCJvYmplY3RcIj09dHlwZW9mIHImJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBlP3I6bi5kMz1uLmQzfHx7fSl9LHt9XSwxNDU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbjtuPXRoaXMsZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZSh0LGUscil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gcih0LGUpe3ZhciByPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiBlKXJbbl09ZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBuKCl7fXZhciBpPVwiXFxcXHMqKFsrLV0/XFxcXGQrKVxcXFxzKlwiLGE9XCJcXFxccyooWystXT9cXFxcZCpcXFxcLj9cXFxcZCsoPzpbZUVdWystXT9cXFxcZCspPylcXFxccypcIixvPVwiXFxcXHMqKFsrLV0/XFxcXGQqXFxcXC4/XFxcXGQrKD86W2VFXVsrLV0/XFxcXGQrKT8pJVxcXFxzKlwiLHM9L14jKFswLTlhLWZdezN9KSQvLGw9L14jKFswLTlhLWZdezZ9KSQvLGM9bmV3IFJlZ0V4cChcIl5yZ2JcXFxcKFwiK1tpLGksaV0rXCJcXFxcKSRcIiksdT1uZXcgUmVnRXhwKFwiXnJnYlxcXFwoXCIrW28sbyxvXStcIlxcXFwpJFwiKSxoPW5ldyBSZWdFeHAoXCJecmdiYVxcXFwoXCIrW2ksaSxpLGFdK1wiXFxcXCkkXCIpLGY9bmV3IFJlZ0V4cChcIl5yZ2JhXFxcXChcIitbbyxvLG8sYV0rXCJcXFxcKSRcIikscD1uZXcgUmVnRXhwKFwiXmhzbFxcXFwoXCIrW2EsbyxvXStcIlxcXFwpJFwiKSxkPW5ldyBSZWdFeHAoXCJeaHNsYVxcXFwoXCIrW2EsbyxvLGFdK1wiXFxcXCkkXCIpLGc9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gdih0KXt2YXIgZTtyZXR1cm4gdD0odCtcIlwiKS50cmltKCkudG9Mb3dlckNhc2UoKSwoZT1zLmV4ZWModCkpP25ldyBfKChlPXBhcnNlSW50KGVbMV0sMTYpKT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgxNSZlKTw8NHwxNSZlLDEpOihlPWwuZXhlYyh0KSk/bShwYXJzZUludChlWzFdLDE2KSk6KGU9Yy5leGVjKHQpKT9uZXcgXyhlWzFdLGVbMl0sZVszXSwxKTooZT11LmV4ZWModCkpP25ldyBfKDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLDEpOihlPWguZXhlYyh0KSk/eShlWzFdLGVbMl0sZVszXSxlWzRdKTooZT1mLmV4ZWModCkpP3koMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsZVs0XSk6KGU9cC5leGVjKHQpKT9rKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsMSk6KGU9ZC5leGVjKHQpKT9rKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6Zy5oYXNPd25Qcm9wZXJ0eSh0KT9tKGdbdF0pOlwidHJhbnNwYXJlbnRcIj09PXQ/bmV3IF8oTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBtKHQpe3JldHVybiBuZXcgXyh0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMSl9ZnVuY3Rpb24geSh0LGUscixuKXtyZXR1cm4gbjw9MCYmKHQ9ZT1yPU5hTiksbmV3IF8odCxlLHIsbil9ZnVuY3Rpb24geCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG58fCh0PXYodCkpLHQ/bmV3IF8oKHQ9dC5yZ2IoKSkucix0LmcsdC5iLHQub3BhY2l0eSk6bmV3IF99ZnVuY3Rpb24gYih0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/eCh0KTpuZXcgXyh0LGUscixudWxsPT1uPzE6bil9ZnVuY3Rpb24gXyh0LGUscixuKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gdyh0KXtyZXR1cm4oKHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0KXx8MCkpKTwxNj9cIjBcIjpcIlwiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBrKHQsZSxyLG4pe3JldHVybiBuPD0wP3Q9ZT1yPU5hTjpyPD0wfHxyPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgVCh0LGUscixuKX1mdW5jdGlvbiBBKHQsZSxyLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgVClyZXR1cm4gbmV3IFQodC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2Ygbnx8KHQ9dih0KSksIXQpcmV0dXJuIG5ldyBUO2lmKHQgaW5zdGFuY2VvZiBUKXJldHVybiB0O3ZhciBlPSh0PXQucmdiKCkpLnIvMjU1LHI9dC5nLzI1NSxpPXQuYi8yNTUsYT1NYXRoLm1pbihlLHIsaSksbz1NYXRoLm1heChlLHIsaSkscz1OYU4sbD1vLWEsYz0obythKS8yO3JldHVybiBsPyhzPWU9PT1vPyhyLWkpL2wrNioocjxpKTpyPT09bz8oaS1lKS9sKzI6KGUtcikvbCs0LGwvPWM8LjU/bythOjItby1hLHMqPTYwKTpsPWM+MCYmYzwxPzA6cyxuZXcgVChzLGwsYyx0Lm9wYWNpdHkpfSh0KTpuZXcgVCh0LGUscixudWxsPT1pPzE6aSl9ZnVuY3Rpb24gVCh0LGUscixuKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gTSh0LGUscil7cmV0dXJuIDI1NSoodDw2MD9lKyhyLWUpKnQvNjA6dDwxODA/cjp0PDI0MD9lKyhyLWUpKigyNDAtdCkvNjA6ZSl9ZShuLHYse2Rpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuaGV4KCl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrXCJcIn19KSxlKF8sYixyKG4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBfKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBfKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiAwPD10aGlzLnImJnRoaXMucjw9MjU1JiYwPD10aGlzLmcmJnRoaXMuZzw9MjU1JiYwPD10aGlzLmImJnRoaXMuYjw9MjU1JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OmZ1bmN0aW9uKCl7cmV0dXJuXCIjXCIrdyh0aGlzLnIpK3codGhpcy5nKSt3KHRoaXMuYil9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT9cInJnYihcIjpcInJnYmEoXCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpK1wiLCBcIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKStcIiwgXCIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10P1wiKVwiOlwiLCBcIit0K1wiKVwiKX19KSksZShULEEscihuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgVCh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBUKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxlPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqZSxpPTIqci1uO3JldHVybiBuZXcgXyhNKHQ+PTI0MD90LTI0MDp0KzEyMCxpLG4pLE0odCxpLG4pLE0odDwxMjA/dCsyNDA6dC0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX19KSk7dmFyIFM9TWF0aC5QSS8xODAsRT0xODAvTWF0aC5QSSxDPS45NjQyMixMPTEsej0uODI1MjEsTz00LzI5LEk9Ni8yOSxEPTMqSSpJLFA9SSpJKkk7ZnVuY3Rpb24gUih0KXtpZih0IGluc3RhbmNlb2YgQilyZXR1cm4gbmV3IEIodC5sLHQuYSx0LmIsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgRyl7aWYoaXNOYU4odC5oKSlyZXR1cm4gbmV3IEIodC5sLDAsMCx0Lm9wYWNpdHkpO3ZhciBlPXQuaCpTO3JldHVybiBuZXcgQih0LmwsTWF0aC5jb3MoZSkqdC5jLE1hdGguc2luKGUpKnQuYyx0Lm9wYWNpdHkpfXQgaW5zdGFuY2VvZiBffHwodD14KHQpKTt2YXIgcixuLGk9VSh0LnIpLGE9VSh0LmcpLG89VSh0LmIpLHM9TigoLjIyMjUwNDUqaSsuNzE2ODc4NiphKy4wNjA2MTY5Km8pL0wpO3JldHVybiBpPT09YSYmYT09PW8/cj1uPXM6KHI9TigoLjQzNjA3NDcqaSsuMzg1MDY0OSphKy4xNDMwODA0Km8pL0MpLG49TigoLjAxMzkzMjIqaSsuMDk3MTA0NSphKy43MTQxNzMzKm8pL3opKSxuZXcgQigxMTYqcy0xNiw1MDAqKHItcyksMjAwKihzLW4pLHQub3BhY2l0eSl9ZnVuY3Rpb24gRih0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/Uih0KTpuZXcgQih0LGUscixudWxsPT1uPzE6bil9ZnVuY3Rpb24gQih0LGUscixuKXt0aGlzLmw9K3QsdGhpcy5hPStlLHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gTih0KXtyZXR1cm4gdD5QP01hdGgucG93KHQsMS8zKTp0L0QrT31mdW5jdGlvbiBqKHQpe3JldHVybiB0Pkk/dCp0KnQ6RCoodC1PKX1mdW5jdGlvbiBWKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gVSh0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBxKHQpe2lmKHQgaW5zdGFuY2VvZiBHKXJldHVybiBuZXcgRyh0LmgsdC5jLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBCfHwodD1SKHQpKSwwPT09dC5hJiYwPT09dC5iKXJldHVybiBuZXcgRyhOYU4sMCx0LmwsdC5vcGFjaXR5KTt2YXIgZT1NYXRoLmF0YW4yKHQuYix0LmEpKkU7cmV0dXJuIG5ldyBHKGU8MD9lKzM2MDplLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIEgodCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3EodCk6bmV3IEcodCxlLHIsbnVsbD09bj8xOm4pfWZ1bmN0aW9uIEcodCxlLHIsbil7dGhpcy5oPSt0LHRoaXMuYz0rZSx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWUoQixGLHIobix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBCKHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQih0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmwrMTYpLzExNixlPWlzTmFOKHRoaXMuYSk/dDp0K3RoaXMuYS81MDAscj1pc05hTih0aGlzLmIpP3Q6dC10aGlzLmIvMjAwO3JldHVybiBuZXcgXyhWKDMuMTMzODU2MSooZT1DKmooZSkpLTEuNjE2ODY2NyoodD1MKmoodCkpLS40OTA2MTQ2KihyPXoqaihyKSkpLFYoLS45Nzg3Njg0KmUrMS45MTYxNDE1KnQrLjAzMzQ1NCpyKSxWKC4wNzE5NDUzKmUtLjIyODk5MTQqdCsxLjQwNTI0MjcqciksdGhpcy5vcGFjaXR5KX19KSksZShHLEgscihuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEcodGhpcy5oLHRoaXMuYyx0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBHKHRoaXMuaCx0aGlzLmMsdGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIFIodGhpcykucmdiKCl9fSkpO3ZhciBZPS0uMTQ4NjEsVz0xLjc4Mjc3LFg9LS4yOTIyNyxaPS0uOTA2NDksJD0xLjk3Mjk0LEo9JCpaLEs9JCpXLFE9VypYLVoqWTtmdW5jdGlvbiB0dCh0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIGV0KXJldHVybiBuZXcgZXQodC5oLHQucyx0LmwsdC5vcGFjaXR5KTt0IGluc3RhbmNlb2YgX3x8KHQ9eCh0KSk7dmFyIGU9dC5yLzI1NSxyPXQuZy8yNTUsbj10LmIvMjU1LGk9KFEqbitKKmUtSypyKS8oUStKLUspLGE9bi1pLG89KCQqKHItaSktWCphKS9aLHM9TWF0aC5zcXJ0KG8qbythKmEpLygkKmkqKDEtaSkpLGw9cz9NYXRoLmF0YW4yKG8sYSkqRS0xMjA6TmFOO3JldHVybiBuZXcgZXQobDwwP2wrMzYwOmwscyxpLHQub3BhY2l0eSl9KHQpOm5ldyBldCh0LGUscixudWxsPT1uPzE6bil9ZnVuY3Rpb24gZXQodCxlLHIsbil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWUoZXQsdHQscihuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgZXQodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcgZXQodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD1pc05hTih0aGlzLmgpPzA6KHRoaXMuaCsxMjApKlMsZT0rdGhpcy5sLHI9aXNOYU4odGhpcy5zKT8wOnRoaXMucyplKigxLWUpLG49TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gbmV3IF8oMjU1KihlK3IqKFkqbitXKmkpKSwyNTUqKGUrciooWCpuK1oqaSkpLDI1NSooZStyKigkKm4pKSx0aGlzLm9wYWNpdHkpfX0pKSx0LmNvbG9yPXYsdC5yZ2I9Yix0LmhzbD1BLHQubGFiPUYsdC5oY2w9SCx0LmxjaD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/cSh0KTpuZXcgRyhyLGUsdCxudWxsPT1uPzE6bil9LHQuZ3JheT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgQih0LDAsMCxudWxsPT1lPzE6ZSl9LHQuY3ViZWhlbGl4PXR0LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfShcIm9iamVjdFwiPT10eXBlb2YgciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGU/cjpuLmQzPW4uZDN8fHt9KX0se31dLDE0NjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuO249dGhpcyxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjt2YXIgZT17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiByKCl7Zm9yKHZhciB0LGU9MCxyPWFyZ3VtZW50cy5sZW5ndGgsaT17fTtlPHI7KytlKXtpZighKHQ9YXJndW1lbnRzW2VdK1wiXCIpfHx0IGluIGkpdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCB0eXBlOiBcIit0KTtpW3RdPVtdfXJldHVybiBuZXcgbihpKX1mdW5jdGlvbiBuKHQpe3RoaXMuXz10fWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHIsbj0wLGk9dC5sZW5ndGg7bjxpOysrbilpZigocj10W25dKS5uYW1lPT09ZSlyZXR1cm4gci52YWx1ZX1mdW5jdGlvbiBhKHQscixuKXtmb3IodmFyIGk9MCxhPXQubGVuZ3RoO2k8YTsrK2kpaWYodFtpXS5uYW1lPT09cil7dFtpXT1lLHQ9dC5zbGljZSgwLGkpLmNvbmNhdCh0LnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6cix2YWx1ZTpufSksdH1uLnByb3RvdHlwZT1yLnByb3RvdHlwZT17Y29uc3RydWN0b3I6bixvbjpmdW5jdGlvbih0LGUpe3ZhciByLG4sbz10aGlzLl8scz0obj1vLCh0K1wiXCIpLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPVwiXCIscj10LmluZGV4T2YoXCIuXCIpO2lmKHI+PTAmJihlPXQuc2xpY2UocisxKSx0PXQuc2xpY2UoMCxyKSksdCYmIW4uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlOiBcIit0KTtyZXR1cm57dHlwZTp0LG5hbWU6ZX19KSksbD0tMSxjPXMubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGNhbGxiYWNrOiBcIitlKTtmb3IoOysrbDxjOylpZihyPSh0PXNbbF0pLnR5cGUpb1tyXT1hKG9bcl0sdC5uYW1lLGUpO2Vsc2UgaWYobnVsbD09ZSlmb3IociBpbiBvKW9bcl09YShvW3JdLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrbDxjOylpZigocj0odD1zW2xdKS50eXBlKSYmKHI9aShvW3JdLHQubmFtZSkpKXJldHVybiByfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIHQ9e30sZT10aGlzLl87Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBuKHQpfSxjYWxsOmZ1bmN0aW9uKHQsZSl7aWYoKHI9YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgcixuLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7KythKWlbYV09YXJndW1lbnRzW2ErMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiK3QpO2ZvcihhPTAscj0obj10aGlzLl9bdF0pLmxlbmd0aDthPHI7KythKW5bYV0udmFsdWUuYXBwbHkoZSxpKX0sYXBwbHk6ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlOiBcIit0KTtmb3IodmFyIG49dGhpcy5fW3RdLGk9MCxhPW4ubGVuZ3RoO2k8YTsrK2kpbltpXS52YWx1ZS5hcHBseShlLHIpfX0sdC5kaXNwYXRjaD1yLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfShcIm9iamVjdFwiPT10eXBlb2YgciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGU/cjpuLmQzPW4uZDN8fHt9KX0se31dLDE0NzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk7bj10aGlzLGk9ZnVuY3Rpb24odCxlLHIsbixpKXtcInVzZSBzdHJpY3RcIjt2YXIgYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LG89ZnVuY3Rpb24oKXtyZXR1cm4gMWUtNiooTWF0aC5yYW5kb20oKS0uNSl9O2Z1bmN0aW9uIHModCl7cmV0dXJuIHQueCt0LnZ4fWZ1bmN0aW9uIGwodCl7cmV0dXJuIHQueSt0LnZ5fWZ1bmN0aW9uIGModCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcihcIm1pc3Npbmc6IFwiK2UpO3JldHVybiByfWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQueH1mdW5jdGlvbiBmKHQpe3JldHVybiB0Lnl9dmFyIHA9MTAsZD1NYXRoLlBJKigzLU1hdGguc3FydCg1KSk7dC5mb3JjZUNlbnRlcj1mdW5jdGlvbih0LGUpe3ZhciByO2Z1bmN0aW9uIG4oKXt2YXIgbixpLGE9ci5sZW5ndGgsbz0wLHM9MDtmb3Iobj0wO248YTsrK24pbys9KGk9cltuXSkueCxzKz1pLnk7Zm9yKG89by9hLXQscz1zL2EtZSxuPTA7bjxhOysrbikoaT1yW25dKS54LT1vLGkueS09c31yZXR1cm4gbnVsbD09dCYmKHQ9MCksbnVsbD09ZSYmKGU9MCksbi5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe3I9dH0sbi54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStlLG4pOnR9LG4ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdCxuKTplfSxufSx0LmZvcmNlQ29sbGlkZT1mdW5jdGlvbih0KXt2YXIgcixuLGk9MSxjPTE7ZnVuY3Rpb24gdSgpe2Zvcih2YXIgdCxhLHUsZixwLGQsZyx2PXIubGVuZ3RoLG09MDttPGM7KyttKWZvcihhPWUucXVhZHRyZWUocixzLGwpLnZpc2l0QWZ0ZXIoaCksdD0wO3Q8djsrK3QpdT1yW3RdLGQ9blt1LmluZGV4XSxnPWQqZCxmPXUueCt1LnZ4LHA9dS55K3UudnksYS52aXNpdCh5KTtmdW5jdGlvbiB5KHQsZSxyLG4sYSl7dmFyIHM9dC5kYXRhLGw9dC5yLGM9ZCtsO2lmKCFzKXJldHVybiBlPmYrY3x8bjxmLWN8fHI+cCtjfHxhPHAtYztpZihzLmluZGV4PnUuaW5kZXgpe3ZhciBoPWYtcy54LXMudngsdj1wLXMueS1zLnZ5LG09aCpoK3YqdjttPGMqYyYmKDA9PT1oJiYobSs9KGg9bygpKSpoKSwwPT09diYmKG0rPSh2PW8oKSkqdiksbT0oYy0obT1NYXRoLnNxcnQobSkpKS9tKmksdS52eCs9KGgqPW0pKihjPShsKj1sKS8oZytsKSksdS52eSs9KHYqPW0pKmMscy52eC09aCooYz0xLWMpLHMudnktPXYqYyl9fX1mdW5jdGlvbiBoKHQpe2lmKHQuZGF0YSlyZXR1cm4gdC5yPW5bdC5kYXRhLmluZGV4XTtmb3IodmFyIGU9dC5yPTA7ZTw0OysrZSl0W2VdJiZ0W2VdLnI+dC5yJiYodC5yPXRbZV0ucil9ZnVuY3Rpb24gZigpe2lmKHIpe3ZhciBlLGksYT1yLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkoYSksZT0wO2U8YTsrK2UpaT1yW2VdLG5baS5pbmRleF09K3QoaSxlLHIpfX1yZXR1cm5cImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiYodD1hKG51bGw9PXQ/MTordCkpLHUuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXQsZigpfSx1Lml0ZXJhdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9K3QsdSk6Y30sdS5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCx1KTppfSx1LnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6YSgrZSksZigpLHUpOnR9LHV9LHQuZm9yY2VMaW5rPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSxzLGwsaD1jLGY9ZnVuY3Rpb24odCl7cmV0dXJuIDEvTWF0aC5taW4oc1t0LnNvdXJjZS5pbmRleF0sc1t0LnRhcmdldC5pbmRleF0pfSxwPWEoMzApLGQ9MTtmdW5jdGlvbiBnKHIpe2Zvcih2YXIgaT0wLGE9dC5sZW5ndGg7aTxkOysraSlmb3IodmFyIHMsYyx1LGgsZixwLGcsdj0wO3Y8YTsrK3YpYz0ocz10W3ZdKS5zb3VyY2UsaD0odT1zLnRhcmdldCkueCt1LnZ4LWMueC1jLnZ4fHxvKCksZj11LnkrdS52eS1jLnktYy52eXx8bygpLGgqPXA9KChwPU1hdGguc3FydChoKmgrZipmKSktblt2XSkvcCpyKmVbdl0sZio9cCx1LnZ4LT1oKihnPWxbdl0pLHUudnktPWYqZyxjLnZ4Kz1oKihnPTEtZyksYy52eSs9ZipnfWZ1bmN0aW9uIHYoKXtpZihpKXt2YXIgYSxvLGM9aS5sZW5ndGgsZj10Lmxlbmd0aCxwPXIubWFwKGksaCk7Zm9yKGE9MCxzPW5ldyBBcnJheShjKTthPGY7KythKShvPXRbYV0pLmluZGV4PWEsXCJvYmplY3RcIiE9dHlwZW9mIG8uc291cmNlJiYoby5zb3VyY2U9dShwLG8uc291cmNlKSksXCJvYmplY3RcIiE9dHlwZW9mIG8udGFyZ2V0JiYoby50YXJnZXQ9dShwLG8udGFyZ2V0KSksc1tvLnNvdXJjZS5pbmRleF09KHNbby5zb3VyY2UuaW5kZXhdfHwwKSsxLHNbby50YXJnZXQuaW5kZXhdPShzW28udGFyZ2V0LmluZGV4XXx8MCkrMTtmb3IoYT0wLGw9bmV3IEFycmF5KGYpO2E8ZjsrK2Epbz10W2FdLGxbYV09c1tvLnNvdXJjZS5pbmRleF0vKHNbby5zb3VyY2UuaW5kZXhdK3Nbby50YXJnZXQuaW5kZXhdKTtlPW5ldyBBcnJheShmKSxtKCksbj1uZXcgQXJyYXkoZikseSgpfX1mdW5jdGlvbiBtKCl7aWYoaSlmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZVtyXT0rZih0W3JdLHIsdCl9ZnVuY3Rpb24geSgpe2lmKGkpZm9yKHZhciBlPTAscj10Lmxlbmd0aDtlPHI7KytlKW5bZV09K3AodFtlXSxlLHQpfXJldHVybiBudWxsPT10JiYodD1bXSksZy5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2k9dCx2KCl9LGcubGlua3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSx2KCksZyk6dH0sZy5pZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD10LGcpOmh9LGcuaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0rdCxnKTpkfSxnLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDphKCt0KSxtKCksZyk6Zn0sZy5kaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6YSgrdCkseSgpLGcpOnB9LGd9LHQuZm9yY2VNYW55Qm9keT1mdW5jdGlvbigpe3ZhciB0LHIsbixpLHM9YSgtMzApLGw9MSxjPTEvMCx1PS44MTtmdW5jdGlvbiBwKGkpe3ZhciBhLG89dC5sZW5ndGgscz1lLnF1YWR0cmVlKHQsaCxmKS52aXNpdEFmdGVyKGcpO2ZvcihuPWksYT0wO2E8bzsrK2Epcj10W2FdLHMudmlzaXQodil9ZnVuY3Rpb24gZCgpe2lmKHQpe3ZhciBlLHIsbj10Lmxlbmd0aDtmb3IoaT1uZXcgQXJyYXkobiksZT0wO2U8bjsrK2Upcj10W2VdLGlbci5pbmRleF09K3MocixlLHQpfX1mdW5jdGlvbiBnKHQpe3ZhciBlLHIsbixhLG8scz0wLGw9MDtpZih0Lmxlbmd0aCl7Zm9yKG49YT1vPTA7bzw0OysrbykoZT10W29dKSYmKHI9TWF0aC5hYnMoZS52YWx1ZSkpJiYocys9ZS52YWx1ZSxsKz1yLG4rPXIqZS54LGErPXIqZS55KTt0Lng9bi9sLHQueT1hL2x9ZWxzZXsoZT10KS54PWUuZGF0YS54LGUueT1lLmRhdGEueTtkb3tzKz1pW2UuZGF0YS5pbmRleF19d2hpbGUoZT1lLm5leHQpfXQudmFsdWU9c31mdW5jdGlvbiB2KHQsZSxhLHMpe2lmKCF0LnZhbHVlKXJldHVybiEwO3ZhciBoPXQueC1yLngsZj10Lnktci55LHA9cy1lLGQ9aCpoK2YqZjtpZihwKnAvdTxkKXJldHVybiBkPGMmJigwPT09aCYmKGQrPShoPW8oKSkqaCksMD09PWYmJihkKz0oZj1vKCkpKmYpLGQ8bCYmKGQ9TWF0aC5zcXJ0KGwqZCkpLHIudngrPWgqdC52YWx1ZSpuL2Qsci52eSs9Zip0LnZhbHVlKm4vZCksITA7aWYoISh0Lmxlbmd0aHx8ZD49Yykpeyh0LmRhdGEhPT1yfHx0Lm5leHQpJiYoMD09PWgmJihkKz0oaD1vKCkpKmgpLDA9PT1mJiYoZCs9KGY9bygpKSpmKSxkPGwmJihkPU1hdGguc3FydChsKmQpKSk7ZG97dC5kYXRhIT09ciYmKHA9aVt0LmRhdGEuaW5kZXhdKm4vZCxyLnZ4Kz1oKnAsci52eSs9ZipwKX13aGlsZSh0PXQubmV4dCl9fXJldHVybiBwLmluaXRpYWxpemU9ZnVuY3Rpb24oZSl7dD1lLGQoKX0scC5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6YSgrdCksZCgpLHApOnN9LHAuZGlzdGFuY2VNaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCp0LHApOk1hdGguc3FydChsKX0scC5kaXN0YW5jZU1heD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10KnQscCk6TWF0aC5zcXJ0KGMpfSxwLnRoZXRhPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQqdCxwKTpNYXRoLnNxcnQodSl9LHB9LHQuZm9yY2VSYWRpYWw9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksbyxzPWEoLjEpO2Z1bmN0aW9uIGwodCl7Zm9yKHZhciBhPTAscz1uLmxlbmd0aDthPHM7KythKXt2YXIgbD1uW2FdLGM9bC54LWV8fDFlLTYsdT1sLnktcnx8MWUtNixoPU1hdGguc3FydChjKmMrdSp1KSxmPShvW2FdLWgpKmlbYV0qdC9oO2wudngrPWMqZixsLnZ5Kz11KmZ9fWZ1bmN0aW9uIGMoKXtpZihuKXt2YXIgZSxyPW4ubGVuZ3RoO2ZvcihpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxlPTA7ZTxyOysrZSlvW2VdPSt0KG5bZV0sZSxuKSxpW2VdPWlzTmFOKG9bZV0pPzA6K3MobltlXSxlLG4pfX1yZXR1cm5cImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiYodD1hKCt0KSksbnVsbD09ZSYmKGU9MCksbnVsbD09ciYmKHI9MCksbC5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe249dCxjKCl9LGwuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OmEoK3QpLGMoKSxsKTpzfSxsLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6YSgrZSksYygpLGwpOnR9LGwueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdCxsKTplfSxsLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3QsbCk6cn0sbH0sdC5mb3JjZVNpbXVsYXRpb249ZnVuY3Rpb24odCl7dmFyIGUsYT0xLG89LjAwMSxzPTEtTWF0aC5wb3cobywxLzMwMCksbD0wLGM9LjYsdT1yLm1hcCgpLGg9aS50aW1lcihnKSxmPW4uZGlzcGF0Y2goXCJ0aWNrXCIsXCJlbmRcIik7ZnVuY3Rpb24gZygpe3YoKSxmLmNhbGwoXCJ0aWNrXCIsZSksYTxvJiYoaC5zdG9wKCksZi5jYWxsKFwiZW5kXCIsZSkpfWZ1bmN0aW9uIHYoKXt2YXIgZSxyLG49dC5sZW5ndGg7Zm9yKGErPShsLWEpKnMsdS5lYWNoKGZ1bmN0aW9uKHQpe3QoYSl9KSxlPTA7ZTxuOysrZSludWxsPT0ocj10W2VdKS5meD9yLngrPXIudngqPWM6KHIueD1yLmZ4LHIudng9MCksbnVsbD09ci5meT9yLnkrPXIudnkqPWM6KHIueT1yLmZ5LHIudnk9MCl9ZnVuY3Rpb24gbSgpe2Zvcih2YXIgZSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKXtpZigoZT10W3JdKS5pbmRleD1yLGlzTmFOKGUueCl8fGlzTmFOKGUueSkpe3ZhciBpPXAqTWF0aC5zcXJ0KHIpLGE9cipkO2UueD1pKk1hdGguY29zKGEpLGUueT1pKk1hdGguc2luKGEpfShpc05hTihlLnZ4KXx8aXNOYU4oZS52eSkpJiYoZS52eD1lLnZ5PTApfX1mdW5jdGlvbiB5KGUpe3JldHVybiBlLmluaXRpYWxpemUmJmUuaW5pdGlhbGl6ZSh0KSxlfXJldHVybiBudWxsPT10JiYodD1bXSksbSgpLGU9e3RpY2s6dixyZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIGgucmVzdGFydChnKSxlfSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGguc3RvcCgpLGV9LG5vZGVzOmZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXIsbSgpLHUuZWFjaCh5KSxlKTp0fSxhbHBoYTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxlKTphfSxhbHBoYU1pbjpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCxlKTpvfSxhbHBoYURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LGUpOitzfSxhbHBoYVRhcmdldDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rdCxlKTpsfSx2ZWxvY2l0eURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTEtdCxlKToxLWN9LGZvcmNlOmZ1bmN0aW9uKHQscil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8obnVsbD09cj91LnJlbW92ZSh0KTp1LnNldCh0LHkocikpLGUpOnUuZ2V0KHQpfSxmaW5kOmZ1bmN0aW9uKGUscixuKXt2YXIgaSxhLG8scyxsLGM9MCx1PXQubGVuZ3RoO2ZvcihudWxsPT1uP249MS8wOm4qPW4sYz0wO2M8dTsrK2MpKG89KGk9ZS0ocz10W2NdKS54KSppKyhhPXItcy55KSphKTxuJiYobD1zLG49byk7cmV0dXJuIGx9LG9uOmZ1bmN0aW9uKHQscil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oZi5vbih0LHIpLGUpOmYub24odCl9fX0sdC5mb3JjZVg9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9YSguMSk7ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGksYT0wLG89ZS5sZW5ndGg7YTxvOysrYSkoaT1lW2FdKS52eCs9KG5bYV0taS54KSpyW2FdKnR9ZnVuY3Rpb24gcygpe2lmKGUpe3ZhciBhLG89ZS5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KG8pLG49bmV3IEFycmF5KG8pLGE9MDthPG87KythKXJbYV09aXNOYU4oblthXT0rdChlW2FdLGEsZSkpPzA6K2koZVthXSxhLGUpfX1yZXR1cm5cImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiYodD1hKG51bGw9PXQ/MDordCkpLG8uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtlPXQscygpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDphKCt0KSxzKCksbyk6aX0sby54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTphKCtlKSxzKCksbyk6dH0sb30sdC5mb3JjZVk9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9YSguMSk7ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGksYT0wLG89ZS5sZW5ndGg7YTxvOysrYSkoaT1lW2FdKS52eSs9KG5bYV0taS55KSpyW2FdKnR9ZnVuY3Rpb24gcygpe2lmKGUpe3ZhciBhLG89ZS5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KG8pLG49bmV3IEFycmF5KG8pLGE9MDthPG87KythKXJbYV09aXNOYU4oblthXT0rdChlW2FdLGEsZSkpPzA6K2koZVthXSxhLGUpfX1yZXR1cm5cImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiYodD1hKG51bGw9PXQ/MDordCkpLG8uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtlPXQscygpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDphKCt0KSxzKCksbyk6aX0sby55PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTphKCtlKSxzKCksbyk6dH0sb30sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LFwib2JqZWN0XCI9PXR5cGVvZiByJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZT9pKHIsdChcImQzLXF1YWR0cmVlXCIpLHQoXCJkMy1jb2xsZWN0aW9uXCIpLHQoXCJkMy1kaXNwYXRjaFwiKSx0KFwiZDMtdGltZXJcIikpOmkobi5kMz1uLmQzfHx7fSxuLmQzLG4uZDMsbi5kMyxuLmQzKX0se1wiZDMtY29sbGVjdGlvblwiOjE0NCxcImQzLWRpc3BhdGNoXCI6MTQ2LFwiZDMtcXVhZHRyZWVcIjoxNTEsXCJkMy10aW1lclwiOjE1NH1dLDE0ODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuO249dGhpcyxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuIHQucGFyZW50PT09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIHIodCxlKXtyZXR1cm4gdCtlLnh9ZnVuY3Rpb24gbih0LGUpe3JldHVybiBNYXRoLm1heCh0LGUueSl9ZnVuY3Rpb24gaSh0KXt2YXIgZT0wLHI9dC5jaGlsZHJlbixuPXImJnIubGVuZ3RoO2lmKG4pZm9yKDstLW4+PTA7KWUrPXJbbl0udmFsdWU7ZWxzZSBlPTE7dC52YWx1ZT1lfWZ1bmN0aW9uIGEodCxlKXt2YXIgcixuLGksYSxzLHU9bmV3IGModCksaD0rdC52YWx1ZSYmKHUudmFsdWU9dC52YWx1ZSksZj1bdV07Zm9yKG51bGw9PWUmJihlPW8pO3I9Zi5wb3AoKTspaWYoaCYmKHIudmFsdWU9K3IuZGF0YS52YWx1ZSksKGk9ZShyLmRhdGEpKSYmKHM9aS5sZW5ndGgpKWZvcihyLmNoaWxkcmVuPW5ldyBBcnJheShzKSxhPXMtMTthPj0wOy0tYSlmLnB1c2gobj1yLmNoaWxkcmVuW2FdPW5ldyBjKGlbYV0pKSxuLnBhcmVudD1yLG4uZGVwdGg9ci5kZXB0aCsxO3JldHVybiB1LmVhY2hCZWZvcmUobCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdC5jaGlsZHJlbn1mdW5jdGlvbiBzKHQpe3QuZGF0YT10LmRhdGEuZGF0YX1mdW5jdGlvbiBsKHQpe3ZhciBlPTA7ZG97dC5oZWlnaHQ9ZX13aGlsZSgodD10LnBhcmVudCkmJnQuaGVpZ2h0PCsrZSl9ZnVuY3Rpb24gYyh0KXt0aGlzLmRhdGE9dCx0aGlzLmRlcHRoPXRoaXMuaGVpZ2h0PTAsdGhpcy5wYXJlbnQ9bnVsbH1jLnByb3RvdHlwZT1hLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Yyxjb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2hBZnRlcihpKX0sZWFjaDpmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhPXRoaXMsbz1bYV07ZG97Zm9yKGU9by5yZXZlcnNlKCksbz1bXTthPWUucG9wKCk7KWlmKHQoYSkscj1hLmNoaWxkcmVuKWZvcihuPTAsaT1yLmxlbmd0aDtuPGk7KytuKW8ucHVzaChyW25dKX13aGlsZShvLmxlbmd0aCk7cmV0dXJuIHRoaXN9LGVhY2hBZnRlcjpmdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGk9dGhpcyxhPVtpXSxvPVtdO2k9YS5wb3AoKTspaWYoby5wdXNoKGkpLGU9aS5jaGlsZHJlbilmb3Iocj0wLG49ZS5sZW5ndGg7cjxuOysrcilhLnB1c2goZVtyXSk7Zm9yKDtpPW8ucG9wKCk7KXQoaSk7cmV0dXJuIHRoaXN9LGVhY2hCZWZvcmU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbj10aGlzLGk9W25dO249aS5wb3AoKTspaWYodChuKSxlPW4uY2hpbGRyZW4pZm9yKHI9ZS5sZW5ndGgtMTtyPj0wOy0tcilpLnB1c2goZVtyXSk7cmV0dXJuIHRoaXN9LHN1bTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoZnVuY3Rpb24oZSl7Zm9yKHZhciByPSt0KGUuZGF0YSl8fDAsbj1lLmNoaWxkcmVuLGk9biYmbi5sZW5ndGg7LS1pPj0wOylyKz1uW2ldLnZhbHVlO2UudmFsdWU9cn0pfSxzb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbiYmZS5jaGlsZHJlbi5zb3J0KHQpfSl9LHBhdGg6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMscj1mdW5jdGlvbih0LGUpe2lmKHQ9PT1lKXJldHVybiB0O3ZhciByPXQuYW5jZXN0b3JzKCksbj1lLmFuY2VzdG9ycygpLGk9bnVsbDtmb3IodD1yLnBvcCgpLGU9bi5wb3AoKTt0PT09ZTspaT10LHQ9ci5wb3AoKSxlPW4ucG9wKCk7cmV0dXJuIGl9KGUsdCksbj1bZV07ZSE9PXI7KWU9ZS5wYXJlbnQsbi5wdXNoKGUpO2Zvcih2YXIgaT1uLmxlbmd0aDt0IT09cjspbi5zcGxpY2UoaSwwLHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIG59LGFuY2VzdG9yczpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W3RdO3Q9dC5wYXJlbnQ7KWUucHVzaCh0KTtyZXR1cm4gZX0sZGVzY2VuZGFudHM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGUpe3QucHVzaChlKX0pLHR9LGxlYXZlczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8dC5wdXNoKGUpfSksdH0sbGlua3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9W107cmV0dXJuIHQuZWFjaChmdW5jdGlvbihyKXtyIT09dCYmZS5wdXNoKHtzb3VyY2U6ci5wYXJlbnQsdGFyZ2V0OnJ9KX0pLGV9LGNvcHk6ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzKS5lYWNoQmVmb3JlKHMpfX07dmFyIHU9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIGgodCl7Zm9yKHZhciBlLHIsbj0wLGk9KHQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbj10Lmxlbmd0aDtuOylyPU1hdGgucmFuZG9tKCkqbi0tfDAsZT10W25dLHRbbl09dFtyXSx0W3JdPWU7cmV0dXJuIHR9KHUuY2FsbCh0KSkpLmxlbmd0aCxhPVtdO248aTspZT10W25dLHImJmQocixlKT8rK246KHI9dihhPWYoYSxlKSksbj0wKTtyZXR1cm4gcn1mdW5jdGlvbiBmKHQsZSl7dmFyIHIsbjtpZihnKGUsdCkpcmV0dXJuW2VdO2ZvcihyPTA7cjx0Lmxlbmd0aDsrK3IpaWYocChlLHRbcl0pJiZnKG0odFtyXSxlKSx0KSlyZXR1cm5bdFtyXSxlXTtmb3Iocj0wO3I8dC5sZW5ndGgtMTsrK3IpZm9yKG49cisxO248dC5sZW5ndGg7KytuKWlmKHAobSh0W3JdLHRbbl0pLGUpJiZwKG0odFtyXSxlKSx0W25dKSYmcChtKHRbbl0sZSksdFtyXSkmJmcoeSh0W3JdLHRbbl0sZSksdCkpcmV0dXJuW3Rbcl0sdFtuXSxlXTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gcCh0LGUpe3ZhciByPXQuci1lLnIsbj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gcjwwfHxyKnI8bipuK2kqaX1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9dC5yLWUucisxZS02LG49ZS54LXQueCxpPWUueS10Lnk7cmV0dXJuIHI+MCYmcipyPm4qbitpKml9ZnVuY3Rpb24gZyh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKWlmKCFkKHQsZVtyXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gdih0KXtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTpyZXR1cm57eDooZT10WzBdKS54LHk6ZS55LHI6ZS5yfTtjYXNlIDI6cmV0dXJuIG0odFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIHkodFswXSx0WzFdLHRbMl0pfXZhciBlfWZ1bmN0aW9uIG0odCxlKXt2YXIgcj10Lngsbj10LnksaT10LnIsYT1lLngsbz1lLnkscz1lLnIsbD1hLXIsYz1vLW4sdT1zLWksaD1NYXRoLnNxcnQobCpsK2MqYyk7cmV0dXJue3g6KHIrYStsL2gqdSkvMix5OihuK28rYy9oKnUpLzIscjooaCtpK3MpLzJ9fWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBuPXQueCxpPXQueSxhPXQucixvPWUueCxzPWUueSxsPWUucixjPXIueCx1PXIueSxoPXIucixmPW4tbyxwPW4tYyxkPWktcyxnPWktdSx2PWwtYSxtPWgtYSx5PW4qbitpKmktYSphLHg9eS1vKm8tcypzK2wqbCxiPXktYypjLXUqdStoKmgsXz1wKmQtZipnLHc9KGQqYi1nKngpLygyKl8pLW4saz0oZyp2LWQqbSkvXyxBPShwKngtZipiKS8oMipfKS1pLFQ9KGYqbS1wKnYpL18sTT1rKmsrVCpULTEsUz0yKihhK3cqaytBKlQpLEU9dyp3K0EqQS1hKmEsQz0tKE0/KFMrTWF0aC5zcXJ0KFMqUy00Kk0qRSkpLygyKk0pOkUvUyk7cmV0dXJue3g6bit3K2sqQyx5OmkrQStUKkMscjpDfX1mdW5jdGlvbiB4KHQsZSxyKXt2YXIgbixpLGEsbyxzPXQueC1lLngsbD10LnktZS55LGM9cypzK2wqbDtjPyhpPWUucityLnIsaSo9aSxvPXQucityLnIsaT4obyo9byk/KG49KGMrby1pKS8oMipjKSxhPU1hdGguc3FydChNYXRoLm1heCgwLG8vYy1uKm4pKSxyLng9dC54LW4qcy1hKmwsci55PXQueS1uKmwrYSpzKToobj0oYytpLW8pLygyKmMpLGE9TWF0aC5zcXJ0KE1hdGgubWF4KDAsaS9jLW4qbikpLHIueD1lLngrbipzLWEqbCxyLnk9ZS55K24qbCthKnMpKTooci54PWUueCtyLnIsci55PWUueSl9ZnVuY3Rpb24gYih0LGUpe3ZhciByPXQucitlLnItMWUtNixuPWUueC10LngsaT1lLnktdC55O3JldHVybiByPjAmJnIqcj5uKm4raSppfWZ1bmN0aW9uIF8odCl7dmFyIGU9dC5fLHI9dC5uZXh0Ll8sbj1lLnIrci5yLGk9KGUueCpyLnIrci54KmUucikvbixhPShlLnkqci5yK3IueSplLnIpL247cmV0dXJuIGkqaSthKmF9ZnVuY3Rpb24gdyh0KXt0aGlzLl89dCx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24gayh0KXtpZighKGk9dC5sZW5ndGgpKXJldHVybiAwO3ZhciBlLHIsbixpLGEsbyxzLGwsYyx1LGY7aWYoKGU9dFswXSkueD0wLGUueT0wLCEoaT4xKSlyZXR1cm4gZS5yO2lmKHI9dFsxXSxlLng9LXIucixyLng9ZS5yLHIueT0wLCEoaT4yKSlyZXR1cm4gZS5yK3Iucjt4KHIsZSxuPXRbMl0pLGU9bmV3IHcoZSkscj1uZXcgdyhyKSxuPW5ldyB3KG4pLGUubmV4dD1uLnByZXZpb3VzPXIsci5uZXh0PWUucHJldmlvdXM9bixuLm5leHQ9ci5wcmV2aW91cz1lO3Q6Zm9yKHM9MztzPGk7KytzKXt4KGUuXyxyLl8sbj10W3NdKSxuPW5ldyB3KG4pLGw9ci5uZXh0LGM9ZS5wcmV2aW91cyx1PXIuXy5yLGY9ZS5fLnI7ZG97aWYodTw9Zil7aWYoYihsLl8sbi5fKSl7cj1sLGUubmV4dD1yLHIucHJldmlvdXM9ZSwtLXM7Y29udGludWUgdH11Kz1sLl8ucixsPWwubmV4dH1lbHNle2lmKGIoYy5fLG4uXykpeyhlPWMpLm5leHQ9cixyLnByZXZpb3VzPWUsLS1zO2NvbnRpbnVlIHR9Zis9Yy5fLnIsYz1jLnByZXZpb3VzfX13aGlsZShsIT09Yy5uZXh0KTtmb3Iobi5wcmV2aW91cz1lLG4ubmV4dD1yLGUubmV4dD1yLnByZXZpb3VzPXI9bixhPV8oZSk7KG49bi5uZXh0KSE9PXI7KShvPV8obikpPGEmJihlPW4sYT1vKTtyPWUubmV4dH1mb3IoZT1bci5fXSxuPXI7KG49bi5uZXh0KSE9PXI7KWUucHVzaChuLl8pO2ZvcihuPWgoZSkscz0wO3M8aTsrK3MpKGU9dFtzXSkueC09bi54LGUueS09bi55O3JldHVybiBuLnJ9ZnVuY3Rpb24gQSh0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdH1mdW5jdGlvbiBUKCl7cmV0dXJuIDB9ZnVuY3Rpb24gTSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gUyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHQudmFsdWUpfWZ1bmN0aW9uIEUodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW58fChlLnI9TWF0aC5tYXgoMCwrdChlKXx8MCkpfX1mdW5jdGlvbiBDKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe2lmKG49ci5jaGlsZHJlbil7dmFyIG4saSxhLG89bi5sZW5ndGgscz10KHIpKmV8fDA7aWYocylmb3IoaT0wO2k8bzsrK2kpbltpXS5yKz1zO2lmKGE9ayhuKSxzKWZvcihpPTA7aTxvOysraSluW2ldLnItPXM7ci5yPWErc319fWZ1bmN0aW9uIEwodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPWUucGFyZW50O2Uucio9dCxyJiYoZS54PXIueCt0KmUueCxlLnk9ci55K3QqZS55KX19ZnVuY3Rpb24geih0KXt0LngwPU1hdGgucm91bmQodC54MCksdC55MD1NYXRoLnJvdW5kKHQueTApLHQueDE9TWF0aC5yb3VuZCh0LngxKSx0LnkxPU1hdGgucm91bmQodC55MSl9ZnVuY3Rpb24gTyh0LGUscixuLGkpe2Zvcih2YXIgYSxvPXQuY2hpbGRyZW4scz0tMSxsPW8ubGVuZ3RoLGM9dC52YWx1ZSYmKG4tZSkvdC52YWx1ZTsrK3M8bDspKGE9b1tzXSkueTA9cixhLnkxPWksYS54MD1lLGEueDE9ZSs9YS52YWx1ZSpjfXZhciBJPVwiJFwiLEQ9e2RlcHRoOi0xfSxQPXt9O2Z1bmN0aW9uIFIodCl7cmV0dXJuIHQuaWR9ZnVuY3Rpb24gRih0KXtyZXR1cm4gdC5wYXJlbnRJZH1mdW5jdGlvbiBCKHQsZSl7cmV0dXJuIHQucGFyZW50PT09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIE4odCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZT9lWzBdOnQudH1mdW5jdGlvbiBqKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGU/ZVtlLmxlbmd0aC0xXTp0LnR9ZnVuY3Rpb24gVih0LGUscil7dmFyIG49ci8oZS5pLXQuaSk7ZS5jLT1uLGUucys9cix0LmMrPW4sZS56Kz1yLGUubSs9cn1mdW5jdGlvbiBVKHQsZSxyKXtyZXR1cm4gdC5hLnBhcmVudD09PWUucGFyZW50P3QuYTpyfWZ1bmN0aW9uIHEodCxlKXt0aGlzLl89dCx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9ZX1mdW5jdGlvbiBIKHQsZSxyLG4saSl7Zm9yKHZhciBhLG89dC5jaGlsZHJlbixzPS0xLGw9by5sZW5ndGgsYz10LnZhbHVlJiYoaS1yKS90LnZhbHVlOysrczxsOykoYT1vW3NdKS54MD1lLGEueDE9bixhLnkwPXIsYS55MT1yKz1hLnZhbHVlKmN9cS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjLnByb3RvdHlwZSk7dmFyIEc9KDErTWF0aC5zcXJ0KDUpKS8yO2Z1bmN0aW9uIFkodCxlLHIsbixpLGEpe2Zvcih2YXIgbyxzLGwsYyx1LGgsZixwLGQsZyx2LG09W10seT1lLmNoaWxkcmVuLHg9MCxiPTAsXz15Lmxlbmd0aCx3PWUudmFsdWU7eDxfOyl7bD1pLXIsYz1hLW47ZG97dT15W2IrK10udmFsdWV9d2hpbGUoIXUmJmI8Xyk7Zm9yKGg9Zj11LHY9dSp1KihnPU1hdGgubWF4KGMvbCxsL2MpLyh3KnQpKSxkPU1hdGgubWF4KGYvdix2L2gpO2I8XzsrK2Ipe2lmKHUrPXM9eVtiXS52YWx1ZSxzPGgmJihoPXMpLHM+ZiYmKGY9cyksdj11KnUqZywocD1NYXRoLm1heChmL3Ysdi9oKSk+ZCl7dS09czticmVha31kPXB9bS5wdXNoKG89e3ZhbHVlOnUsZGljZTpsPGMsY2hpbGRyZW46eS5zbGljZSh4LGIpfSksby5kaWNlP08obyxyLG4saSx3P24rPWMqdS93OmEpOkgobyxyLG4sdz9yKz1sKnUvdzppLGEpLHctPXUseD1ifXJldHVybiBtfXZhciBXPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0LHIsbixpLGEpe1koZSx0LHIsbixpLGEpfXJldHVybiByLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LHJ9KEcpO3ZhciBYPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0LHIsbixpLGEpe2lmKChvPXQuX3NxdWFyaWZ5KSYmby5yYXRpbz09PWUpZm9yKHZhciBvLHMsbCxjLHUsaD0tMSxmPW8ubGVuZ3RoLHA9dC52YWx1ZTsrK2g8Zjspe2ZvcihsPShzPW9baF0pLmNoaWxkcmVuLGM9cy52YWx1ZT0wLHU9bC5sZW5ndGg7Yzx1OysrYylzLnZhbHVlKz1sW2NdLnZhbHVlO3MuZGljZT9PKHMscixuLGksbis9KGEtbikqcy52YWx1ZS9wKTpIKHMscixuLHIrPShpLXIpKnMudmFsdWUvcCxhKSxwLT1zLnZhbHVlfWVsc2UgdC5fc3F1YXJpZnk9bz1ZKGUsdCxyLG4saSxhKSxvLnJhdGlvPWV9cmV0dXJuIHIucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIHQoKGU9K2UpPjE/ZToxKX0scn0oRyk7dC5jbHVzdGVyPWZ1bmN0aW9uKCl7dmFyIHQ9ZSxpPTEsYT0xLG89ITE7ZnVuY3Rpb24gcyhlKXt2YXIgcyxsPTA7ZS5lYWNoQWZ0ZXIoZnVuY3Rpb24oZSl7dmFyIGk9ZS5jaGlsZHJlbjtpPyhlLng9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVkdWNlKHIsMCkvdC5sZW5ndGh9KGkpLGUueT1mdW5jdGlvbih0KXtyZXR1cm4gMSt0LnJlZHVjZShuLDApfShpKSk6KGUueD1zP2wrPXQoZSxzKTowLGUueT0wLHM9ZSl9KTt2YXIgYz1mdW5jdGlvbih0KXtmb3IodmFyIGU7ZT10LmNoaWxkcmVuOyl0PWVbMF07cmV0dXJuIHR9KGUpLHU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlO2U9dC5jaGlsZHJlbjspdD1lW2UubGVuZ3RoLTFdO3JldHVybiB0fShlKSxoPWMueC10KGMsdSkvMixmPXUueCt0KHUsYykvMjtyZXR1cm4gZS5lYWNoQWZ0ZXIobz9mdW5jdGlvbih0KXt0Lng9KHQueC1lLngpKmksdC55PShlLnktdC55KSphfTpmdW5jdGlvbih0KXt0Lng9KHQueC1oKS8oZi1oKSppLHQueT0oMS0oZS55P3QueS9lLnk6MSkpKmF9KX1yZXR1cm4gcy5zZXBhcmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUscyk6dH0scy5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSExLGk9K3RbMF0sYT0rdFsxXSxzKTpvP251bGw6W2ksYV19LHMubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ITAsaT0rdFswXSxhPSt0WzFdLHMpOm8/W2ksYV06bnVsbH0sc30sdC5oaWVyYXJjaHk9YSx0LnBhY2s9ZnVuY3Rpb24oKXt2YXIgdD1udWxsLGU9MSxyPTEsbj1UO2Z1bmN0aW9uIGkoaSl7cmV0dXJuIGkueD1lLzIsaS55PXIvMix0P2kuZWFjaEJlZm9yZShFKHQpKS5lYWNoQWZ0ZXIoQyhuLC41KSkuZWFjaEJlZm9yZShMKDEpKTppLmVhY2hCZWZvcmUoRShTKSkuZWFjaEFmdGVyKEMoVCwxKSkuZWFjaEFmdGVyKEMobixpLnIvTWF0aC5taW4oZSxyKSkpLmVhY2hCZWZvcmUoTChNYXRoLm1pbihlLHIpLygyKmkucikpKSxpfXJldHVybiBpLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1udWxsPT0ocj1lKT9udWxsOkEociksaSk6dDt2YXIgcn0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLHI9K3RbMV0saSk6W2Uscl19LGkucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6TSgrdCksaSk6bn0saX0sdC5wYWNrU2libGluZ3M9ZnVuY3Rpb24odCl7cmV0dXJuIGsodCksdH0sdC5wYWNrRW5jbG9zZT1oLHQucGFydGl0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9MSxlPTEscj0wLG49ITE7ZnVuY3Rpb24gaShpKXt2YXIgYT1pLmhlaWdodCsxO3JldHVybiBpLngwPWkueTA9cixpLngxPXQsaS55MT1lL2EsaS5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe24uY2hpbGRyZW4mJk8obixuLngwLHQqKG4uZGVwdGgrMSkvZSxuLngxLHQqKG4uZGVwdGgrMikvZSk7dmFyIGk9bi54MCxhPW4ueTAsbz1uLngxLXIscz1uLnkxLXI7bzxpJiYoaT1vPShpK28pLzIpLHM8YSYmKGE9cz0oYStzKS8yKSxuLngwPWksbi55MD1hLG4ueDE9byxuLnkxPXN9fShlLGEpKSxuJiZpLmVhY2hCZWZvcmUoeiksaX1yZXR1cm4gaS5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hIXQsaSk6bn0saS5zaXplPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStyWzBdLGU9K3JbMV0saSk6W3QsZV19LGkucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxpKTpyfSxpfSx0LnN0cmF0aWZ5PWZ1bmN0aW9uKCl7dmFyIHQ9UixlPUY7ZnVuY3Rpb24gcihyKXt2YXIgbixpLGEsbyxzLHUsaCxmPXIubGVuZ3RoLHA9bmV3IEFycmF5KGYpLGQ9e307Zm9yKGk9MDtpPGY7KytpKW49cltpXSxzPXBbaV09bmV3IGMobiksbnVsbCE9KHU9dChuLGkscikpJiYodSs9XCJcIikmJihkW2g9SSsocy5pZD11KV09aCBpbiBkP1A6cyk7Zm9yKGk9MDtpPGY7KytpKWlmKHM9cFtpXSxudWxsIT0odT1lKHJbaV0saSxyKSkmJih1Kz1cIlwiKSl7aWYoIShvPWRbSSt1XSkpdGhyb3cgbmV3IEVycm9yKFwibWlzc2luZzogXCIrdSk7aWYobz09PVApdGhyb3cgbmV3IEVycm9yKFwiYW1iaWd1b3VzOiBcIit1KTtvLmNoaWxkcmVuP28uY2hpbGRyZW4ucHVzaChzKTpvLmNoaWxkcmVuPVtzXSxzLnBhcmVudD1vfWVsc2V7aWYoYSl0aHJvdyBuZXcgRXJyb3IoXCJtdWx0aXBsZSByb290c1wiKTthPXN9aWYoIWEpdGhyb3cgbmV3IEVycm9yKFwibm8gcm9vdFwiKTtpZihhLnBhcmVudD1ELGEuZWFjaEJlZm9yZShmdW5jdGlvbih0KXt0LmRlcHRoPXQucGFyZW50LmRlcHRoKzEsLS1mfSkuZWFjaEJlZm9yZShsKSxhLnBhcmVudD1udWxsLGY+MCl0aHJvdyBuZXcgRXJyb3IoXCJjeWNsZVwiKTtyZXR1cm4gYX1yZXR1cm4gci5pZD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1BKGUpLHIpOnR9LHIucGFyZW50SWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9QSh0KSxyKTplfSxyfSx0LnRyZWU9ZnVuY3Rpb24oKXt2YXIgdD1CLGU9MSxyPTEsbj1udWxsO2Z1bmN0aW9uIGkoaSl7dmFyIGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpLGEsbz1uZXcgcSh0LDApLHM9W29dO2U9cy5wb3AoKTspaWYobj1lLl8uY2hpbGRyZW4pZm9yKGUuY2hpbGRyZW49bmV3IEFycmF5KGE9bi5sZW5ndGgpLGk9YS0xO2k+PTA7LS1pKXMucHVzaChyPWUuY2hpbGRyZW5baV09bmV3IHEobltpXSxpKSksci5wYXJlbnQ9ZTtyZXR1cm4oby5wYXJlbnQ9bmV3IHEobnVsbCwwKSkuY2hpbGRyZW49W29dLG99KGkpO2lmKGwuZWFjaEFmdGVyKGEpLGwucGFyZW50Lm09LWwueixsLmVhY2hCZWZvcmUobyksbilpLmVhY2hCZWZvcmUocyk7ZWxzZXt2YXIgYz1pLHU9aSxoPWk7aS5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QueDxjLngmJihjPXQpLHQueD51LngmJih1PXQpLHQuZGVwdGg+aC5kZXB0aCYmKGg9dCl9KTt2YXIgZj1jPT09dT8xOnQoYyx1KS8yLHA9Zi1jLngsZD1lLyh1LngrZitwKSxnPXIvKGguZGVwdGh8fDEpO2kuZWFjaEJlZm9yZShmdW5jdGlvbih0KXt0Lng9KHQueCtwKSpkLHQueT10LmRlcHRoKmd9KX1yZXR1cm4gaX1mdW5jdGlvbiBhKGUpe3ZhciByPWUuY2hpbGRyZW4sbj1lLnBhcmVudC5jaGlsZHJlbixpPWUuaT9uW2UuaS0xXTpudWxsO2lmKHIpeyFmdW5jdGlvbih0KXtmb3IodmFyIGUscj0wLG49MCxpPXQuY2hpbGRyZW4sYT1pLmxlbmd0aDstLWE+PTA7KShlPWlbYV0pLnorPXIsZS5tKz1yLHIrPWUucysobis9ZS5jKX0oZSk7dmFyIGE9KHJbMF0ueityW3IubGVuZ3RoLTFdLnopLzI7aT8oZS56PWkueit0KGUuXyxpLl8pLGUubT1lLnotYSk6ZS56PWF9ZWxzZSBpJiYoZS56PWkueit0KGUuXyxpLl8pKTtlLnBhcmVudC5BPWZ1bmN0aW9uKGUscixuKXtpZihyKXtmb3IodmFyIGksYT1lLG89ZSxzPXIsbD1hLnBhcmVudC5jaGlsZHJlblswXSxjPWEubSx1PW8ubSxoPXMubSxmPWwubTtzPWoocyksYT1OKGEpLHMmJmE7KWw9TihsKSwobz1qKG8pKS5hPWUsKGk9cy56K2gtYS56LWMrdChzLl8sYS5fKSk+MCYmKFYoVShzLGUsbiksZSxpKSxjKz1pLHUrPWkpLGgrPXMubSxjKz1hLm0sZis9bC5tLHUrPW8ubTtzJiYhaihvKSYmKG8udD1zLG8ubSs9aC11KSxhJiYhTihsKSYmKGwudD1hLGwubSs9Yy1mLG49ZSl9cmV0dXJuIG59KGUsaSxlLnBhcmVudC5BfHxuWzBdKX1mdW5jdGlvbiBvKHQpe3QuXy54PXQueit0LnBhcmVudC5tLHQubSs9dC5wYXJlbnQubX1mdW5jdGlvbiBzKHQpe3QueCo9ZSx0Lnk9dC5kZXB0aCpyfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsZT0rdFswXSxyPSt0WzFdLGkpOm4/bnVsbDpbZSxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCxlPSt0WzBdLHI9K3RbMV0saSk6bj9bZSxyXTpudWxsfSxpfSx0LnRyZWVtYXA9ZnVuY3Rpb24oKXt2YXIgdD1XLGU9ITEscj0xLG49MSxpPVswXSxhPVQsbz1ULHM9VCxsPVQsYz1UO2Z1bmN0aW9uIHUodCl7cmV0dXJuIHQueDA9dC55MD0wLHQueDE9cix0LnkxPW4sdC5lYWNoQmVmb3JlKGgpLGk9WzBdLGUmJnQuZWFjaEJlZm9yZSh6KSx0fWZ1bmN0aW9uIGgoZSl7dmFyIHI9aVtlLmRlcHRoXSxuPWUueDArcix1PWUueTArcixoPWUueDEtcixmPWUueTEtcjtoPG4mJihuPWg9KG4raCkvMiksZjx1JiYodT1mPSh1K2YpLzIpLGUueDA9bixlLnkwPXUsZS54MT1oLGUueTE9ZixlLmNoaWxkcmVuJiYocj1pW2UuZGVwdGgrMV09YShlKS8yLG4rPWMoZSktcix1Kz1vKGUpLXIsKGgtPXMoZSktcik8biYmKG49aD0obitoKS8yKSwoZi09bChlKS1yKTx1JiYodT1mPSh1K2YpLzIpLHQoZSxuLHUsaCxmKSl9cmV0dXJuIHUucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ISF0LHUpOmV9LHUuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdFswXSxuPSt0WzFdLHUpOltyLG5dfSx1LnRpbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9QShlKSx1KTp0fSx1LnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dS5wYWRkaW5nSW5uZXIodCkucGFkZGluZ091dGVyKHQpOnUucGFkZGluZ0lubmVyKCl9LHUucGFkZGluZ0lubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpNKCt0KSx1KTphfSx1LnBhZGRpbmdPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdUb3AodCkucGFkZGluZ1JpZ2h0KHQpLnBhZGRpbmdCb3R0b20odCkucGFkZGluZ0xlZnQodCk6dS5wYWRkaW5nVG9wKCl9LHUucGFkZGluZ1RvcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6TSgrdCksdSk6b30sdS5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Ok0oK3QpLHUpOnN9LHUucGFkZGluZ0JvdHRvbT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6TSgrdCksdSk6bH0sdS5wYWRkaW5nTGVmdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6TSgrdCksdSk6Y30sdX0sdC50cmVlbWFwQmluYXJ5PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbyxzPXQuY2hpbGRyZW4sbD1zLmxlbmd0aCxjPW5ldyBBcnJheShsKzEpO2ZvcihjWzBdPW89YT0wO2E8bDsrK2EpY1thKzFdPW8rPXNbYV0udmFsdWU7IWZ1bmN0aW9uIHQoZSxyLG4saSxhLG8sbCl7aWYoZT49ci0xKXt2YXIgdT1zW2VdO3JldHVybiB1LngwPWksdS55MD1hLHUueDE9byx2b2lkKHUueTE9bCl9Zm9yKHZhciBoPWNbZV0sZj1uLzIraCxwPWUrMSxkPXItMTtwPGQ7KXt2YXIgZz1wK2Q+Pj4xO2NbZ108Zj9wPWcrMTpkPWd9Zi1jW3AtMV08Y1twXS1mJiZlKzE8cCYmLS1wO3ZhciB2PWNbcF0taCxtPW4tdjtpZihvLWk+bC1hKXt2YXIgeT0oaSptK28qdikvbjt0KGUscCx2LGksYSx5LGwpLHQocCxyLG0seSxhLG8sbCl9ZWxzZXt2YXIgeD0oYSptK2wqdikvbjt0KGUscCx2LGksYSxvLHgpLHQocCxyLG0saSx4LG8sbCl9fSgwLGwsdC52YWx1ZSxlLHIsbixpKX0sdC50cmVlbWFwRGljZT1PLHQudHJlZW1hcFNsaWNlPUgsdC50cmVlbWFwU2xpY2VEaWNlPWZ1bmN0aW9uKHQsZSxyLG4saSl7KDEmdC5kZXB0aD9IOk8pKHQsZSxyLG4saSl9LHQudHJlZW1hcFNxdWFyaWZ5PVcsdC50cmVlbWFwUmVzcXVhcmlmeT1YLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfShcIm9iamVjdFwiPT10eXBlb2YgciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGU/cjpuLmQzPW4uZDN8fHt9KX0se31dLDE0OTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk7bj10aGlzLGk9ZnVuY3Rpb24odCxlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiByKHQsZSxyLG4saSl7dmFyIGE9dCp0LG89YSp0O3JldHVybigoMS0zKnQrMyphLW8pKmUrKDQtNiphKzMqbykqcisoMSszKnQrMyphLTMqbykqbitvKmkpLzZ9ZnVuY3Rpb24gbih0KXt2YXIgZT10Lmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1uPD0wP249MDpuPj0xPyhuPTEsZS0xKTpNYXRoLmZsb29yKG4qZSksYT10W2ldLG89dFtpKzFdLHM9aT4wP3RbaS0xXToyKmEtbyxsPWk8ZS0xP3RbaSsyXToyKm8tYTtyZXR1cm4gcigobi1pL2UpKmUscyxhLG8sbCl9fWZ1bmN0aW9uIGkodCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPU1hdGguZmxvb3IoKChuJT0xKTwwPysrbjpuKSplKSxhPXRbKGkrZS0xKSVlXSxvPXRbaSVlXSxzPXRbKGkrMSklZV0sbD10WyhpKzIpJWVdO3JldHVybiByKChuLWkvZSkqZSxhLG8scyxsKX19ZnVuY3Rpb24gYSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdCtyKmV9fWZ1bmN0aW9uIHModCxlKXt2YXIgcj1lLXQ7cmV0dXJuIHI/byh0LHI+MTgwfHxyPC0xODA/ci0zNjAqTWF0aC5yb3VuZChyLzM2MCk6cik6YShpc05hTih0KT9lOnQpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIDE9PSh0PSt0KT9jOmZ1bmN0aW9uKGUscil7cmV0dXJuIHItZT9mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9TWF0aC5wb3codCxyKSxlPU1hdGgucG93KGUsciktdCxyPTEvcixmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3codCtuKmUscil9fShlLHIsdCk6YShpc05hTihlKT9yOmUpfX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9ZS10O3JldHVybiByP28odCxyKTphKGlzTmFOKHQpP2U6dCl9dmFyIHU9ZnVuY3Rpb24gdChyKXt2YXIgbj1sKHIpO2Z1bmN0aW9uIGkodCxyKXt2YXIgaT1uKCh0PWUucmdiKHQpKS5yLChyPWUucmdiKHIpKS5yKSxhPW4odC5nLHIuZyksbz1uKHQuYixyLmIpLHM9Yyh0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQucj1pKGUpLHQuZz1hKGUpLHQuYj1vKGUpLHQub3BhY2l0eT1zKGUpLHQrXCJcIn19cmV0dXJuIGkuZ2FtbWE9dCxpfSgxKTtmdW5jdGlvbiBoKHQpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgbixpLGE9ci5sZW5ndGgsbz1uZXcgQXJyYXkoYSkscz1uZXcgQXJyYXkoYSksbD1uZXcgQXJyYXkoYSk7Zm9yKG49MDtuPGE7KytuKWk9ZS5yZ2IocltuXSksb1tuXT1pLnJ8fDAsc1tuXT1pLmd8fDAsbFtuXT1pLmJ8fDA7cmV0dXJuIG89dChvKSxzPXQocyksbD10KGwpLGkub3BhY2l0eT0xLGZ1bmN0aW9uKHQpe3JldHVybiBpLnI9byh0KSxpLmc9cyh0KSxpLmI9bCh0KSxpK1wiXCJ9fX12YXIgZj1oKG4pLHA9aChpKTtmdW5jdGlvbiBkKHQsZSl7dmFyIHIsbj1lP2UubGVuZ3RoOjAsaT10P01hdGgubWluKG4sdC5sZW5ndGgpOjAsYT1uZXcgQXJyYXkoaSksbz1uZXcgQXJyYXkobik7Zm9yKHI9MDtyPGk7KytyKWFbcl09Xyh0W3JdLGVbcl0pO2Zvcig7cjxuOysrcilvW3JdPWVbcl07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihyPTA7cjxpOysrcilvW3JdPWFbcl0odCk7cmV0dXJuIG99fWZ1bmN0aW9uIGcodCxlKXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZS09dD0rdCxmdW5jdGlvbihuKXtyZXR1cm4gci5zZXRUaW1lKHQrZSpuKSxyfX1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuIGUtPXQ9K3QsZnVuY3Rpb24ocil7cmV0dXJuIHQrZSpyfX1mdW5jdGlvbiBtKHQsZSl7dmFyIHIsbj17fSxpPXt9O2ZvcihyIGluIG51bGwhPT10JiZcIm9iamVjdFwiPT10eXBlb2YgdHx8KHQ9e30pLG51bGwhPT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZXx8KGU9e30pLGUpciBpbiB0P25bcl09Xyh0W3JdLGVbcl0pOmlbcl09ZVtyXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHIgaW4gbilpW3JdPW5bcl0odCk7cmV0dXJuIGl9fXZhciB5PS9bLStdPyg/OlxcZCtcXC4/XFxkKnxcXC4/XFxkKykoPzpbZUVdWy0rXT9cXGQrKT8vZyx4PW5ldyBSZWdFeHAoeS5zb3VyY2UsXCJnXCIpO2Z1bmN0aW9uIGIodCxlKXt2YXIgcixuLGksYT15Lmxhc3RJbmRleD14Lmxhc3RJbmRleD0wLG89LTEscz1bXSxsPVtdO2Zvcih0Kz1cIlwiLGUrPVwiXCI7KHI9eS5leGVjKHQpKSYmKG49eC5leGVjKGUpKTspKGk9bi5pbmRleCk+YSYmKGk9ZS5zbGljZShhLGkpLHNbb10/c1tvXSs9aTpzWysrb109aSksKHI9clswXSk9PT0obj1uWzBdKT9zW29dP3Nbb10rPW46c1srK29dPW46KHNbKytvXT1udWxsLGwucHVzaCh7aTpvLHg6dihyLG4pfSkpLGE9eC5sYXN0SW5kZXg7cmV0dXJuIGE8ZS5sZW5ndGgmJihpPWUuc2xpY2UoYSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSxzLmxlbmd0aDwyP2xbMF0/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpK1wiXCJ9fShsWzBdLngpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0oZSk6KGU9bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciByLG49MDtuPGU7KytuKXNbKHI9bFtuXSkuaV09ci54KHQpO3JldHVybiBzLmpvaW4oXCJcIil9KX1mdW5jdGlvbiBfKHQscil7dmFyIG4saT10eXBlb2YgcjtyZXR1cm4gbnVsbD09cnx8XCJib29sZWFuXCI9PT1pP2Eocik6KFwibnVtYmVyXCI9PT1pP3Y6XCJzdHJpbmdcIj09PWk/KG49ZS5jb2xvcihyKSk/KHI9bix1KTpiOnIgaW5zdGFuY2VvZiBlLmNvbG9yP3U6ciBpbnN0YW5jZW9mIERhdGU/ZzpBcnJheS5pc0FycmF5KHIpP2Q6XCJmdW5jdGlvblwiIT10eXBlb2Ygci52YWx1ZU9mJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiByLnRvU3RyaW5nfHxpc05hTihyKT9tOnYpKHQscil9dmFyIHcsayxBLFQsTT0xODAvTWF0aC5QSSxTPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIEUodCxlLHIsbixpLGEpe3ZhciBvLHMsbDtyZXR1cm4obz1NYXRoLnNxcnQodCp0K2UqZSkpJiYodC89byxlLz1vKSwobD10KnIrZSpuKSYmKHItPXQqbCxuLT1lKmwpLChzPU1hdGguc3FydChyKnIrbipuKSkmJihyLz1zLG4vPXMsbC89cyksdCpuPGUqciYmKHQ9LXQsZT0tZSxsPS1sLG89LW8pLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTphLHJvdGF0ZTpNYXRoLmF0YW4yKGUsdCkqTSxza2V3WDpNYXRoLmF0YW4obCkqTSxzY2FsZVg6byxzY2FsZVk6c319ZnVuY3Rpb24gQyh0LGUscixuKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpK1wiIFwiOlwiXCJ9cmV0dXJuIGZ1bmN0aW9uKGEsbyl7dmFyIHM9W10sbD1bXTtyZXR1cm4gYT10KGEpLG89dChvKSxmdW5jdGlvbih0LG4saSxhLG8scyl7aWYodCE9PWl8fG4hPT1hKXt2YXIgbD1vLnB1c2goXCJ0cmFuc2xhdGUoXCIsbnVsbCxlLG51bGwscik7cy5wdXNoKHtpOmwtNCx4OnYodCxpKX0se2k6bC0yLHg6dihuLGEpfSl9ZWxzZShpfHxhKSYmby5wdXNoKFwidHJhbnNsYXRlKFwiK2krZSthK3IpfShhLnRyYW5zbGF0ZVgsYS50cmFuc2xhdGVZLG8udHJhbnNsYXRlWCxvLnRyYW5zbGF0ZVkscyxsKSxmdW5jdGlvbih0LGUscixhKXt0IT09ZT8odC1lPjE4MD9lKz0zNjA6ZS10PjE4MCYmKHQrPTM2MCksYS5wdXNoKHtpOnIucHVzaChpKHIpK1wicm90YXRlKFwiLG51bGwsbiktMix4OnYodCxlKX0pKTplJiZyLnB1c2goaShyKStcInJvdGF0ZShcIitlK24pfShhLnJvdGF0ZSxvLnJvdGF0ZSxzLGwpLGZ1bmN0aW9uKHQsZSxyLGEpe3QhPT1lP2EucHVzaCh7aTpyLnB1c2goaShyKStcInNrZXdYKFwiLG51bGwsbiktMix4OnYodCxlKX0pOmUmJnIucHVzaChpKHIpK1wic2tld1goXCIrZStuKX0oYS5za2V3WCxvLnNrZXdYLHMsbCksZnVuY3Rpb24odCxlLHIsbixhLG8pe2lmKHQhPT1yfHxlIT09bil7dmFyIHM9YS5wdXNoKGkoYSkrXCJzY2FsZShcIixudWxsLFwiLFwiLG51bGwsXCIpXCIpO28ucHVzaCh7aTpzLTQseDp2KHQscil9LHtpOnMtMix4OnYoZSxuKX0pfWVsc2UgMT09PXImJjE9PT1ufHxhLnB1c2goaShhKStcInNjYWxlKFwiK3IrXCIsXCIrbitcIilcIil9KGEuc2NhbGVYLGEuc2NhbGVZLG8uc2NhbGVYLG8uc2NhbGVZLHMsbCksYT1vPW51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9LTEsbj1sLmxlbmd0aDsrK3I8bjspc1soZT1sW3JdKS5pXT1lLngodCk7cmV0dXJuIHMuam9pbihcIlwiKX19fXZhciBMPUMoZnVuY3Rpb24odCl7cmV0dXJuXCJub25lXCI9PT10P1M6KHd8fCh3PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJESVZcIiksaz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsQT1kb2N1bWVudC5kZWZhdWx0Vmlldyksdy5zdHlsZS50cmFuc2Zvcm09dCx0PUEuZ2V0Q29tcHV0ZWRTdHlsZShrLmFwcGVuZENoaWxkKHcpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoXCJ0cmFuc2Zvcm1cIiksay5yZW1vdmVDaGlsZCh3KSxFKCsodD10LnNsaWNlKDcsLTEpLnNwbGl0KFwiLFwiKSlbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0sXCJweCwgXCIsXCJweClcIixcImRlZylcIiksej1DKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P1M6KFR8fChUPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXCJnXCIpKSxULnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLHQpLCh0PVQudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/RSgodD10Lm1hdHJpeCkuYSx0LmIsdC5jLHQuZCx0LmUsdC5mKTpTKX0sXCIsIFwiLFwiKVwiLFwiKVwiKSxPPU1hdGguU1FSVDIsST0yLEQ9NCxQPTFlLTEyO2Z1bmN0aW9uIFIodCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKSsxL3QpLzJ9ZnVuY3Rpb24gRih0KXtyZXR1cm4gZnVuY3Rpb24ocixuKXt2YXIgaT10KChyPWUuaHNsKHIpKS5oLChuPWUuaHNsKG4pKS5oKSxhPWMoci5zLG4ucyksbz1jKHIubCxuLmwpLHM9YyhyLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIuaD1pKHQpLHIucz1hKHQpLHIubD1vKHQpLHIub3BhY2l0eT1zKHQpLHIrXCJcIn19fXZhciBCPUYocyksTj1GKGMpO2Z1bmN0aW9uIGoodCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGk9dCgocj1lLmhjbChyKSkuaCwobj1lLmhjbChuKSkuaCksYT1jKHIuYyxuLmMpLG89YyhyLmwsbi5sKSxzPWMoci5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLmg9aSh0KSxyLmM9YSh0KSxyLmw9byh0KSxyLm9wYWNpdHk9cyh0KSxyK1wiXCJ9fX12YXIgVj1qKHMpLFU9aihjKTtmdW5jdGlvbiBxKHQpe3JldHVybiBmdW5jdGlvbiByKG4pe2Z1bmN0aW9uIGkocixpKXt2YXIgYT10KChyPWUuY3ViZWhlbGl4KHIpKS5oLChpPWUuY3ViZWhlbGl4KGkpKS5oKSxvPWMoci5zLGkucykscz1jKHIubCxpLmwpLGw9YyhyLm9wYWNpdHksaS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIuaD1hKHQpLHIucz1vKHQpLHIubD1zKE1hdGgucG93KHQsbikpLHIub3BhY2l0eT1sKHQpLHIrXCJcIn19cmV0dXJuIG49K24saS5nYW1tYT1yLGl9KDEpfXZhciBIPXEocyksRz1xKGMpO3QuaW50ZXJwb2xhdGU9Xyx0LmludGVycG9sYXRlQXJyYXk9ZCx0LmludGVycG9sYXRlQmFzaXM9bix0LmludGVycG9sYXRlQmFzaXNDbG9zZWQ9aSx0LmludGVycG9sYXRlRGF0ZT1nLHQuaW50ZXJwb2xhdGVEaXNjcmV0ZT1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHRbTWF0aC5tYXgoMCxNYXRoLm1pbihlLTEsTWF0aC5mbG9vcihyKmUpKSldfX0sdC5pbnRlcnBvbGF0ZUh1ZT1mdW5jdGlvbih0LGUpe3ZhciByPXMoK3QsK2UpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1yKHQpO3JldHVybiBlLTM2MCpNYXRoLmZsb29yKGUvMzYwKX19LHQuaW50ZXJwb2xhdGVOdW1iZXI9dix0LmludGVycG9sYXRlT2JqZWN0PW0sdC5pbnRlcnBvbGF0ZVJvdW5kPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtPXQ9K3QsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucm91bmQodCtlKnIpfX0sdC5pbnRlcnBvbGF0ZVN0cmluZz1iLHQuaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3M9TCx0LmludGVycG9sYXRlVHJhbnNmb3JtU3ZnPXosdC5pbnRlcnBvbGF0ZVpvb209ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dFswXSxhPXRbMV0sbz10WzJdLHM9ZVswXSxsPWVbMV0sYz1lWzJdLHU9cy1pLGg9bC1hLGY9dSp1K2gqaDtpZihmPFApbj1NYXRoLmxvZyhjL28pL08scj1mdW5jdGlvbih0KXtyZXR1cm5baSt0KnUsYSt0KmgsbypNYXRoLmV4cChPKnQqbildfTtlbHNle3ZhciBwPU1hdGguc3FydChmKSxkPShjKmMtbypvK0QqZikvKDIqbypJKnApLGc9KGMqYy1vKm8tRCpmKS8oMipjKkkqcCksdj1NYXRoLmxvZyhNYXRoLnNxcnQoZCpkKzEpLWQpLG09TWF0aC5sb2coTWF0aC5zcXJ0KGcqZysxKS1nKTtuPShtLXYpL08scj1mdW5jdGlvbih0KXt2YXIgZSxyPXQqbixzPVIodiksbD1vLyhJKnApKihzKihlPU8qcit2LCgoZT1NYXRoLmV4cCgyKmUpKS0xKS8oZSsxKSktZnVuY3Rpb24odCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKS0xL3QpLzJ9KHYpKTtyZXR1cm5baStsKnUsYStsKmgsbypzL1IoTypyK3YpXX19cmV0dXJuIHIuZHVyYXRpb249MWUzKm4scn0sdC5pbnRlcnBvbGF0ZVJnYj11LHQuaW50ZXJwb2xhdGVSZ2JCYXNpcz1mLHQuaW50ZXJwb2xhdGVSZ2JCYXNpc0Nsb3NlZD1wLHQuaW50ZXJwb2xhdGVIc2w9Qix0LmludGVycG9sYXRlSHNsTG9uZz1OLHQuaW50ZXJwb2xhdGVMYWI9ZnVuY3Rpb24odCxyKXt2YXIgbj1jKCh0PWUubGFiKHQpKS5sLChyPWUubGFiKHIpKS5sKSxpPWModC5hLHIuYSksYT1jKHQuYixyLmIpLG89Yyh0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQubD1uKGUpLHQuYT1pKGUpLHQuYj1hKGUpLHQub3BhY2l0eT1vKGUpLHQrXCJcIn19LHQuaW50ZXJwb2xhdGVIY2w9Vix0LmludGVycG9sYXRlSGNsTG9uZz1VLHQuaW50ZXJwb2xhdGVDdWJlaGVsaXg9SCx0LmludGVycG9sYXRlQ3ViZWhlbGl4TG9uZz1HLHQucGllY2V3aXNlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj1lLmxlbmd0aC0xLGk9ZVswXSxhPW5ldyBBcnJheShuPDA/MDpuKTtyPG47KWFbcl09dChpLGk9ZVsrK3JdKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMCxNYXRoLm1pbihuLTEsTWF0aC5mbG9vcih0Kj1uKSkpO3JldHVybiBhW2VdKHQtZSl9fSx0LnF1YW50aXplPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPXQobi8oZS0xKSk7cmV0dXJuIHJ9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSxcIm9iamVjdFwiPT10eXBlb2YgciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGU/aShyLHQoXCJkMy1jb2xvclwiKSk6aShuLmQzPW4uZDN8fHt9LG4uZDMpfSx7XCJkMy1jb2xvclwiOjE0NX1dLDE1MDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuO249dGhpcyxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjt2YXIgZT1NYXRoLlBJLHI9MiplLG49ci0xZS02O2Z1bmN0aW9uIGkoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz1cIlwifWZ1bmN0aW9uIGEoKXtyZXR1cm4gbmV3IGl9aS5wcm90b3R5cGU9YS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmksbW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz1cIk1cIisodGhpcy5feDA9dGhpcy5feDE9K3QpK1wiLFwiKyh0aGlzLl95MD10aGlzLl95MT0rZSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9XCJaXCIpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPVwiTFwiKyh0aGlzLl94MT0rdCkrXCIsXCIrKHRoaXMuX3kxPStlKX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbih0LGUscixuKXt0aGlzLl8rPVwiUVwiKyArdCtcIixcIisgK2UrXCIsXCIrKHRoaXMuX3gxPStyKStcIixcIisodGhpcy5feTE9K24pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLl8rPVwiQ1wiKyArdCtcIixcIisgK2UrXCIsXCIrICtyK1wiLFwiKyArbitcIixcIisodGhpcy5feDE9K2kpK1wiLFwiKyh0aGlzLl95MT0rYSl9LGFyY1RvOmZ1bmN0aW9uKHQscixuLGksYSl7dD0rdCxyPStyLG49K24saT0raSxhPSthO3ZhciBvPXRoaXMuX3gxLHM9dGhpcy5feTEsbD1uLXQsYz1pLXIsdT1vLXQsaD1zLXIsZj11KnUraCpoO2lmKGE8MCl0aHJvdyBuZXcgRXJyb3IoXCJuZWdhdGl2ZSByYWRpdXM6IFwiK2EpO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl8rPVwiTVwiKyh0aGlzLl94MT10KStcIixcIisodGhpcy5feTE9cik7ZWxzZSBpZihmPjFlLTYpaWYoTWF0aC5hYnMoaCpsLWMqdSk+MWUtNiYmYSl7dmFyIHA9bi1vLGQ9aS1zLGc9bCpsK2MqYyx2PXAqcCtkKmQsbT1NYXRoLnNxcnQoZykseT1NYXRoLnNxcnQoZikseD1hKk1hdGgudGFuKChlLU1hdGguYWNvcygoZytmLXYpLygyKm0qeSkpKS8yKSxiPXgveSxfPXgvbTtNYXRoLmFicyhiLTEpPjFlLTYmJih0aGlzLl8rPVwiTFwiKyh0K2IqdSkrXCIsXCIrKHIrYipoKSksdGhpcy5fKz1cIkFcIithK1wiLFwiK2ErXCIsMCwwLFwiKyArKGgqcD51KmQpK1wiLFwiKyh0aGlzLl94MT10K18qbCkrXCIsXCIrKHRoaXMuX3kxPXIrXypjKX1lbHNlIHRoaXMuXys9XCJMXCIrKHRoaXMuX3gxPXQpK1wiLFwiKyh0aGlzLl95MT1yKTtlbHNlO30sYXJjOmZ1bmN0aW9uKHQsaSxhLG8scyxsKXt0PSt0LGk9K2k7dmFyIGM9KGE9K2EpKk1hdGguY29zKG8pLHU9YSpNYXRoLnNpbihvKSxoPXQrYyxmPWkrdSxwPTFebCxkPWw/by1zOnMtbztpZihhPDApdGhyb3cgbmV3IEVycm9yKFwibmVnYXRpdmUgcmFkaXVzOiBcIithKTtudWxsPT09dGhpcy5feDE/dGhpcy5fKz1cIk1cIitoK1wiLFwiK2Y6KE1hdGguYWJzKHRoaXMuX3gxLWgpPjFlLTZ8fE1hdGguYWJzKHRoaXMuX3kxLWYpPjFlLTYpJiYodGhpcy5fKz1cIkxcIitoK1wiLFwiK2YpLGEmJihkPDAmJihkPWQlcityKSxkPm4/dGhpcy5fKz1cIkFcIithK1wiLFwiK2ErXCIsMCwxLFwiK3ArXCIsXCIrKHQtYykrXCIsXCIrKGktdSkrXCJBXCIrYStcIixcIithK1wiLDAsMSxcIitwK1wiLFwiKyh0aGlzLl94MT1oKStcIixcIisodGhpcy5feTE9Zik6ZD4xZS02JiYodGhpcy5fKz1cIkFcIithK1wiLFwiK2ErXCIsMCxcIisgKyhkPj1lKStcIixcIitwK1wiLFwiKyh0aGlzLl94MT10K2EqTWF0aC5jb3MocykpK1wiLFwiKyh0aGlzLl95MT1pK2EqTWF0aC5zaW4ocykpKSl9LHJlY3Q6ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5fKz1cIk1cIisodGhpcy5feDA9dGhpcy5feDE9K3QpK1wiLFwiKyh0aGlzLl95MD10aGlzLl95MT0rZSkrXCJoXCIrICtyK1widlwiKyArbitcImhcIistcitcIlpcIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX0sdC5wYXRoPWEsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9KFwib2JqZWN0XCI9PXR5cGVvZiByJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZT9yOm4uZDM9bi5kM3x8e30pfSx7fV0sMTUxOltmdW5jdGlvbih0LGUscil7dmFyIG47bj10aGlzLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUodCxlLHIsbil7aWYoaXNOYU4oZSl8fGlzTmFOKHIpKXJldHVybiB0O3ZhciBpLGEsbyxzLGwsYyx1LGgsZixwPXQuX3Jvb3QsZD17ZGF0YTpufSxnPXQuX3gwLHY9dC5feTAsbT10Ll94MSx5PXQuX3kxO2lmKCFwKXJldHVybiB0Ll9yb290PWQsdDtmb3IoO3AubGVuZ3RoOylpZigoYz1lPj0oYT0oZyttKS8yKSk/Zz1hOm09YSwodT1yPj0obz0odit5KS8yKSk/dj1vOnk9byxpPXAsIShwPXBbaD11PDwxfGNdKSlyZXR1cm4gaVtoXT1kLHQ7aWYocz0rdC5feC5jYWxsKG51bGwscC5kYXRhKSxsPSt0Ll95LmNhbGwobnVsbCxwLmRhdGEpLGU9PT1zJiZyPT09bClyZXR1cm4gZC5uZXh0PXAsaT9pW2hdPWQ6dC5fcm9vdD1kLHQ7ZG97aT1pP2lbaF09bmV3IEFycmF5KDQpOnQuX3Jvb3Q9bmV3IEFycmF5KDQpLChjPWU+PShhPShnK20pLzIpKT9nPWE6bT1hLCh1PXI+PShvPSh2K3kpLzIpKT92PW86eT1vfXdoaWxlKChoPXU8PDF8Yyk9PShmPShsPj1vKTw8MXxzPj1hKSk7cmV0dXJuIGlbZl09cCxpW2hdPWQsdH12YXIgcj1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMubm9kZT10LHRoaXMueDA9ZSx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX07ZnVuY3Rpb24gbih0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBpKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIGEodCxlLHIpe3ZhciBhPW5ldyBvKG51bGw9PWU/bjplLG51bGw9PXI/aTpyLE5hTixOYU4sTmFOLE5hTik7cmV0dXJuIG51bGw9PXQ/YTphLmFkZEFsbCh0KX1mdW5jdGlvbiBvKHQsZSxyLG4saSxhKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPWEsdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gcyh0KXtmb3IodmFyIGU9e2RhdGE6dC5kYXRhfSxyPWU7dD10Lm5leHQ7KXI9ci5uZXh0PXtkYXRhOnQuZGF0YX07cmV0dXJuIGV9dmFyIGw9YS5wcm90b3R5cGU9by5wcm90b3R5cGU7bC5jb3B5PWZ1bmN0aW9uKCl7dmFyIHQsZSxyPW5ldyBvKHRoaXMuX3gsdGhpcy5feSx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSksbj10aGlzLl9yb290O2lmKCFuKXJldHVybiByO2lmKCFuLmxlbmd0aClyZXR1cm4gci5fcm9vdD1zKG4pLHI7Zm9yKHQ9W3tzb3VyY2U6bix0YXJnZXQ6ci5fcm9vdD1uZXcgQXJyYXkoNCl9XTtuPXQucG9wKCk7KWZvcih2YXIgaT0wO2k8NDsrK2kpKGU9bi5zb3VyY2VbaV0pJiYoZS5sZW5ndGg/dC5wdXNoKHtzb3VyY2U6ZSx0YXJnZXQ6bi50YXJnZXRbaV09bmV3IEFycmF5KDQpfSk6bi50YXJnZXRbaV09cyhlKSk7cmV0dXJuIHJ9LGwuYWRkPWZ1bmN0aW9uKHQpe3ZhciByPSt0aGlzLl94LmNhbGwobnVsbCx0KSxuPSt0aGlzLl95LmNhbGwobnVsbCx0KTtyZXR1cm4gZSh0aGlzLmNvdmVyKHIsbikscixuLHQpfSxsLmFkZEFsbD1mdW5jdGlvbih0KXt2YXIgcixuLGksYSxvPXQubGVuZ3RoLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLGM9MS8wLHU9MS8wLGg9LTEvMCxmPS0xLzA7Zm9yKG49MDtuPG87KytuKWlzTmFOKGk9K3RoaXMuX3guY2FsbChudWxsLHI9dFtuXSkpfHxpc05hTihhPSt0aGlzLl95LmNhbGwobnVsbCxyKSl8fChzW25dPWksbFtuXT1hLGk8YyYmKGM9aSksaT5oJiYoaD1pKSxhPHUmJih1PWEpLGE+ZiYmKGY9YSkpO2ZvcihoPGMmJihjPXRoaXMuX3gwLGg9dGhpcy5feDEpLGY8dSYmKHU9dGhpcy5feTAsZj10aGlzLl95MSksdGhpcy5jb3ZlcihjLHUpLmNvdmVyKGgsZiksbj0wO248bzsrK24pZSh0aGlzLHNbbl0sbFtuXSx0W25dKTtyZXR1cm4gdGhpc30sbC5jb3Zlcj1mdW5jdGlvbih0LGUpe2lmKGlzTmFOKHQ9K3QpfHxpc05hTihlPStlKSlyZXR1cm4gdGhpczt2YXIgcj10aGlzLl94MCxuPXRoaXMuX3kwLGk9dGhpcy5feDEsYT10aGlzLl95MTtpZihpc05hTihyKSlpPShyPU1hdGguZmxvb3IodCkpKzEsYT0obj1NYXRoLmZsb29yKGUpKSsxO2Vsc2V7aWYoIShyPnR8fHQ+aXx8bj5lfHxlPmEpKXJldHVybiB0aGlzO3ZhciBvLHMsbD1pLXIsYz10aGlzLl9yb290O3N3aXRjaChzPShlPChuK2EpLzIpPDwxfHQ8KHIraSkvMil7Y2FzZSAwOmRveyhvPW5ldyBBcnJheSg0KSlbc109YyxjPW99d2hpbGUoYT1uKyhsKj0yKSx0PihpPXIrbCl8fGU+YSk7YnJlYWs7Y2FzZSAxOmRveyhvPW5ldyBBcnJheSg0KSlbc109YyxjPW99d2hpbGUoYT1uKyhsKj0yKSwocj1pLWwpPnR8fGU+YSk7YnJlYWs7Y2FzZSAyOmRveyhvPW5ldyBBcnJheSg0KSlbc109YyxjPW99d2hpbGUobj1hLShsKj0yKSx0PihpPXIrbCl8fG4+ZSk7YnJlYWs7Y2FzZSAzOmRveyhvPW5ldyBBcnJheSg0KSlbc109YyxjPW99d2hpbGUobj1hLShsKj0yKSwocj1pLWwpPnR8fG4+ZSl9dGhpcy5fcm9vdCYmdGhpcy5fcm9vdC5sZW5ndGgmJih0aGlzLl9yb290PWMpfXJldHVybiB0aGlzLl94MD1yLHRoaXMuX3kwPW4sdGhpcy5feDE9aSx0aGlzLl95MT1hLHRoaXN9LGwuZGF0YT1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3t0LnB1c2goZS5kYXRhKX13aGlsZShlPWUubmV4dCl9KSx0fSxsLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCt0WzBdWzBdLCt0WzBdWzFdKS5jb3ZlcigrdFsxXVswXSwrdFsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX0sbC5maW5kPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhLG8scyxsLGMsdSxoPXRoaXMuX3gwLGY9dGhpcy5feTAscD10aGlzLl94MSxkPXRoaXMuX3kxLGc9W10sdj10aGlzLl9yb290O2Zvcih2JiZnLnB1c2gobmV3IHIodixoLGYscCxkKSksbnVsbD09bj9uPTEvMDooaD10LW4sZj1lLW4scD10K24sZD1lK24sbio9bik7Yz1nLnBvcCgpOylpZighKCEodj1jLm5vZGUpfHwoYT1jLngwKT5wfHwobz1jLnkwKT5kfHwocz1jLngxKTxofHwobD1jLnkxKTxmKSlpZih2Lmxlbmd0aCl7dmFyIG09KGErcykvMix5PShvK2wpLzI7Zy5wdXNoKG5ldyByKHZbM10sbSx5LHMsbCksbmV3IHIodlsyXSxhLHksbSxsKSxuZXcgcih2WzFdLG0sbyxzLHkpLG5ldyByKHZbMF0sYSxvLG0seSkpLCh1PShlPj15KTw8MXx0Pj1tKSYmKGM9Z1tnLmxlbmd0aC0xXSxnW2cubGVuZ3RoLTFdPWdbZy5sZW5ndGgtMS11XSxnW2cubGVuZ3RoLTEtdV09Yyl9ZWxzZXt2YXIgeD10LSt0aGlzLl94LmNhbGwobnVsbCx2LmRhdGEpLGI9ZS0rdGhpcy5feS5jYWxsKG51bGwsdi5kYXRhKSxfPXgqeCtiKmI7aWYoXzxuKXt2YXIgdz1NYXRoLnNxcnQobj1fKTtoPXQtdyxmPWUtdyxwPXQrdyxkPWUrdyxpPXYuZGF0YX19cmV0dXJuIGl9LGwucmVtb3ZlPWZ1bmN0aW9uKHQpe2lmKGlzTmFOKGE9K3RoaXMuX3guY2FsbChudWxsLHQpKXx8aXNOYU4obz0rdGhpcy5feS5jYWxsKG51bGwsdCkpKXJldHVybiB0aGlzO3ZhciBlLHIsbixpLGEsbyxzLGwsYyx1LGgsZixwPXRoaXMuX3Jvb3QsZD10aGlzLl94MCxnPXRoaXMuX3kwLHY9dGhpcy5feDEsbT10aGlzLl95MTtpZighcClyZXR1cm4gdGhpcztpZihwLmxlbmd0aClmb3IoOzspe2lmKChjPWE+PShzPShkK3YpLzIpKT9kPXM6dj1zLCh1PW8+PShsPShnK20pLzIpKT9nPWw6bT1sLGU9cCwhKHA9cFtoPXU8PDF8Y10pKXJldHVybiB0aGlzO2lmKCFwLmxlbmd0aClicmVhazsoZVtoKzEmM118fGVbaCsyJjNdfHxlW2grMyYzXSkmJihyPWUsZj1oKX1mb3IoO3AuZGF0YSE9PXQ7KWlmKG49cCwhKHA9cC5uZXh0KSlyZXR1cm4gdGhpcztyZXR1cm4oaT1wLm5leHQpJiZkZWxldGUgcC5uZXh0LG4/KGk/bi5uZXh0PWk6ZGVsZXRlIG4ubmV4dCx0aGlzKTplPyhpP2VbaF09aTpkZWxldGUgZVtoXSwocD1lWzBdfHxlWzFdfHxlWzJdfHxlWzNdKSYmcD09PShlWzNdfHxlWzJdfHxlWzFdfHxlWzBdKSYmIXAubGVuZ3RoJiYocj9yW2ZdPXA6dGhpcy5fcm9vdD1wKSx0aGlzKToodGhpcy5fcm9vdD1pLHRoaXMpfSxsLnJlbW92ZUFsbD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoO2U8cjsrK2UpdGhpcy5yZW1vdmUodFtlXSk7cmV0dXJuIHRoaXN9LGwucm9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290fSxsLnNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3srK3R9d2hpbGUoZT1lLm5leHQpfSksdH0sbC52aXNpdD1mdW5jdGlvbih0KXt2YXIgZSxuLGksYSxvLHMsbD1bXSxjPXRoaXMuX3Jvb3Q7Zm9yKGMmJmwucHVzaChuZXcgcihjLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1sLnBvcCgpOylpZighdChjPWUubm9kZSxpPWUueDAsYT1lLnkwLG89ZS54MSxzPWUueTEpJiZjLmxlbmd0aCl7dmFyIHU9KGkrbykvMixoPShhK3MpLzI7KG49Y1szXSkmJmwucHVzaChuZXcgcihuLHUsaCxvLHMpKSwobj1jWzJdKSYmbC5wdXNoKG5ldyByKG4saSxoLHUscykpLChuPWNbMV0pJiZsLnB1c2gobmV3IHIobix1LGEsbyxoKSksKG49Y1swXSkmJmwucHVzaChuZXcgcihuLGksYSx1LGgpKX1yZXR1cm4gdGhpc30sbC52aXNpdEFmdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLG49W10saT1bXTtmb3IodGhpcy5fcm9vdCYmbi5wdXNoKG5ldyByKHRoaXMuX3Jvb3QsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtlPW4ucG9wKCk7KXt2YXIgYT1lLm5vZGU7aWYoYS5sZW5ndGgpe3ZhciBvLHM9ZS54MCxsPWUueTAsYz1lLngxLHU9ZS55MSxoPShzK2MpLzIsZj0obCt1KS8yOyhvPWFbMF0pJiZuLnB1c2gobmV3IHIobyxzLGwsaCxmKSksKG89YVsxXSkmJm4ucHVzaChuZXcgcihvLGgsbCxjLGYpKSwobz1hWzJdKSYmbi5wdXNoKG5ldyByKG8scyxmLGgsdSkpLChvPWFbM10pJiZuLnB1c2gobmV3IHIobyxoLGYsYyx1KSl9aS5wdXNoKGUpfWZvcig7ZT1pLnBvcCgpOyl0KGUubm9kZSxlLngwLGUueTAsZS54MSxlLnkxKTtyZXR1cm4gdGhpc30sbC54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl94PXQsdGhpcyk6dGhpcy5feH0sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl95PXQsdGhpcyk6dGhpcy5feX0sdC5xdWFkdHJlZT1hLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfShcIm9iamVjdFwiPT10eXBlb2YgciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGU/cjpuLmQzPW4uZDN8fHt9KX0se31dLDE1MjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk7bj10aGlzLGk9ZnVuY3Rpb24odCxlLHIsbixpKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBhKHQpe3JldHVybiB0LnRhcmdldC5kZXB0aH1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHQuc291cmNlTGlua3MubGVuZ3RoP3QuZGVwdGg6ZS0xfWZ1bmN0aW9uIHModCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWk9aSYmaS5oYXNPd25Qcm9wZXJ0eShcImRlZmF1bHRcIik/aS5kZWZhdWx0Omk7dmFyIGw9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgdH07ZnVuY3Rpb24gYyh0LGUpe3JldHVybiBoKHQuc291cmNlLGUuc291cmNlKXx8dC5pbmRleC1lLmluZGV4fWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gaCh0LnRhcmdldCxlLnRhcmdldCl8fHQuaW5kZXgtZS5pbmRleH1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQucGFydE9mQ3ljbGU9PT1lLnBhcnRPZkN5Y2xlP3QueTAtZS55MDpcInRvcFwiPT09dC5jaXJjdWxhckxpbmtUeXBlfHxcImJvdHRvbVwiPT09ZS5jaXJjdWxhckxpbmtUeXBlPy0xOjF9ZnVuY3Rpb24gZih0KXtyZXR1cm4gdC52YWx1ZX1mdW5jdGlvbiBwKHQpe3JldHVybih0LnkwK3QueTEpLzJ9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gcCh0LnNvdXJjZSl9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gcCh0LnRhcmdldCl9ZnVuY3Rpb24gdih0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiBtKHQpe3JldHVybiB0Lm5vZGVzfWZ1bmN0aW9uIHkodCl7cmV0dXJuIHQubGlua3N9ZnVuY3Rpb24geCh0LGUpe3ZhciByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcihcIm1pc3Npbmc6IFwiK2UpO3JldHVybiByfWZ1bmN0aW9uIGIodCxlKXtyZXR1cm4gZSh0KX12YXIgXz0yNSx3PTEwLGs9LjM7ZnVuY3Rpb24gQSh0LGUpe3ZhciByPTAsbj0wO3QubGlua3MuZm9yRWFjaChmdW5jdGlvbihpKXtpLmNpcmN1bGFyJiYoaS5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZXx8aS50YXJnZXQuY2lyY3VsYXJMaW5rVHlwZT9pLmNpcmN1bGFyTGlua1R5cGU9aS5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZT9pLnNvdXJjZS5jaXJjdWxhckxpbmtUeXBlOmkudGFyZ2V0LmNpcmN1bGFyTGlua1R5cGU6aS5jaXJjdWxhckxpbmtUeXBlPXI8bj9cInRvcFwiOlwiYm90dG9tXCIsXCJ0b3BcIj09aS5jaXJjdWxhckxpbmtUeXBlP3IrPTE6bis9MSx0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7Yih0LGUpIT1iKGkuc291cmNlLGUpJiZiKHQsZSkhPWIoaS50YXJnZXQsZSl8fCh0LmNpcmN1bGFyTGlua1R5cGU9aS5jaXJjdWxhckxpbmtUeXBlKX0pKX0pLHQubGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNpcmN1bGFyJiYodC5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZT09dC50YXJnZXQuY2lyY3VsYXJMaW5rVHlwZSYmKHQuY2lyY3VsYXJMaW5rVHlwZT10LnNvdXJjZS5jaXJjdWxhckxpbmtUeXBlKSxZKHQsZSkmJih0LmNpcmN1bGFyTGlua1R5cGU9dC5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZSkpfSl9ZnVuY3Rpb24gVCh0KXt2YXIgZT1NYXRoLmFicyh0LnkxLXQueTApLHI9TWF0aC5hYnModC50YXJnZXQueDAtdC5zb3VyY2UueDEpO3JldHVybiBNYXRoLmF0YW4oci9lKX1mdW5jdGlvbiBNKHQsZSl7dmFyIHI9MDt0LnNvdXJjZUxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7cj10LmNpcmN1bGFyJiYhWSh0LGUpP3IrMTpyfSk7dmFyIG49MDtyZXR1cm4gdC50YXJnZXRMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe249dC5jaXJjdWxhciYmIVkodCxlKT9uKzE6bn0pLHIrbn1mdW5jdGlvbiBTKHQpe3ZhciBlPXQuc291cmNlLnNvdXJjZUxpbmtzLHI9MDtlLmZvckVhY2goZnVuY3Rpb24odCl7cj10LmNpcmN1bGFyP3IrMTpyfSk7dmFyIG49dC50YXJnZXQudGFyZ2V0TGlua3MsaT0wO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24odCl7aT10LmNpcmN1bGFyP2krMTppfSksIShyPjF8fGk+MSl9ZnVuY3Rpb24gRSh0LGUscil7cmV0dXJuIHQuc29ydChMKSx0LmZvckVhY2goZnVuY3Rpb24obixpKXt2YXIgYSxvLHM9MDtpZihZKG4scikmJlMobikpbi5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyPXMrbi53aWR0aC8yO2Vsc2V7Zm9yKHZhciBsPTA7bDxpO2wrKylpZihhPXRbaV0sbz10W2xdLCEoYS5zb3VyY2UuY29sdW1uPG8udGFyZ2V0LmNvbHVtbnx8YS50YXJnZXQuY29sdW1uPm8uc291cmNlLmNvbHVtbikpe3ZhciBjPXRbbF0uY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcit0W2xdLndpZHRoLzIrZTtzPWM+cz9jOnN9bi5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyPXMrbi53aWR0aC8yfX0pLHR9ZnVuY3Rpb24gQyh0LHIsaSxhKXt2YXIgbz1lLm1pbih0LmxpbmtzLGZ1bmN0aW9uKHQpe3JldHVybiB0LnNvdXJjZS55MH0pO3QubGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNpcmN1bGFyJiYodC5jaXJjdWxhclBhdGhEYXRhPXt9KX0pLEUodC5saW5rcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuXCJ0b3BcIj09dC5jaXJjdWxhckxpbmtUeXBlfSkscixhKSxFKHQubGlua3MuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVyblwiYm90dG9tXCI9PXQuY2lyY3VsYXJMaW5rVHlwZX0pLHIsYSksdC5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGUuY2lyY3VsYXIpe2lmKGUuY2lyY3VsYXJQYXRoRGF0YS5hcmNSYWRpdXM9ZS53aWR0aCt3LGUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0Tm9kZUJ1ZmZlcj01LGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodE5vZGVCdWZmZXI9NSxlLmNpcmN1bGFyUGF0aERhdGEuc291cmNlV2lkdGg9ZS5zb3VyY2UueDEtZS5zb3VyY2UueDAsZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVg9ZS5zb3VyY2UueDArZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVdpZHRoLGUuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRYPWUudGFyZ2V0LngwLGUuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZPWUueTAsZS5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFk9ZS55MSxZKGUsYSkmJlMoZSkpZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRTbWFsbEFyY1JhZGl1cz13K2Uud2lkdGgvMixlLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzPXcrZS53aWR0aC8yLGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodFNtYWxsQXJjUmFkaXVzPXcrZS53aWR0aC8yLGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzPXcrZS53aWR0aC8yLFwiYm90dG9tXCI9PWUuY2lyY3VsYXJMaW5rVHlwZT8oZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudD1lLnNvdXJjZS55MStfK2UuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudC1lLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudC1lLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cyk6KGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQ9ZS5zb3VyY2UueTAtXy1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQrZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cyxlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxSaWdodElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQrZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMpO2Vsc2V7dmFyIHM9ZS5zb3VyY2UuY29sdW1uLGw9ZS5jaXJjdWxhckxpbmtUeXBlLGM9dC5saW5rcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuc291cmNlLmNvbHVtbj09cyYmdC5jaXJjdWxhckxpbmtUeXBlPT1sfSk7XCJib3R0b21cIj09ZS5jaXJjdWxhckxpbmtUeXBlP2Muc29ydChPKTpjLnNvcnQoeik7dmFyIHU9MDtjLmZvckVhY2goZnVuY3Rpb24odCxuKXt0LmNpcmN1bGFyTGlua0lEPT1lLmNpcmN1bGFyTGlua0lEJiYoZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRTbWFsbEFyY1JhZGl1cz13K2Uud2lkdGgvMit1LGUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXM9dytlLndpZHRoLzIrbipyK3UpLHUrPXQud2lkdGh9KSxzPWUudGFyZ2V0LmNvbHVtbixjPXQubGlua3MuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRhcmdldC5jb2x1bW49PXMmJnQuY2lyY3VsYXJMaW5rVHlwZT09bH0pLFwiYm90dG9tXCI9PWUuY2lyY3VsYXJMaW5rVHlwZT9jLnNvcnQoRCk6Yy5zb3J0KEkpLHU9MCxjLmZvckVhY2goZnVuY3Rpb24odCxuKXt0LmNpcmN1bGFyTGlua0lEPT1lLmNpcmN1bGFyTGlua0lEJiYoZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXM9dytlLndpZHRoLzIrdSxlLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cz13K2Uud2lkdGgvMituKnIrdSksdSs9dC53aWR0aH0pLFwiYm90dG9tXCI9PWUuY2lyY3VsYXJMaW5rVHlwZT8oZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudD1NYXRoLm1heChpLGUuc291cmNlLnkxLGUudGFyZ2V0LnkxKStfK2UuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudC1lLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudC1lLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cyk6KGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQ9by1fLWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCtlLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCtlLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cyl9ZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEuc291cmNlWCtlLmNpcmN1bGFyUGF0aERhdGEubGVmdE5vZGVCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFgtZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0Tm9kZUJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEubGVmdEZ1bGxFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVgrZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cytlLmNpcmN1bGFyUGF0aERhdGEubGVmdE5vZGVCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0RnVsbEV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WC1lLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cy1lLmNpcmN1bGFyUGF0aERhdGEucmlnaHROb2RlQnVmZmVyfWlmKGUuY2lyY3VsYXIpZS5wYXRoPWZ1bmN0aW9uKHQpe3ZhciBlPVwiXCI7ZT1cInRvcFwiPT10LmNpcmN1bGFyTGlua1R5cGU/XCJNXCIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVgrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVkrXCIgTFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0SW5uZXJFeHRlbnQrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVkrXCIgQVwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRTbWFsbEFyY1JhZGl1cytcIiAwIDAgMCBcIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdEZ1bGxFeHRlbnQrXCIgXCIrKHQuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZLXQuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0U21hbGxBcmNSYWRpdXMpK1wiIExcIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdEZ1bGxFeHRlbnQrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50K1wiIEFcIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzK1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMrXCIgMCAwIDAgXCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudCtcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K1wiIExcIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRJbm5lckV4dGVudCtcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K1wiIEFcIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cytcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cytcIiAwIDAgMCBcIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRGdWxsRXh0ZW50K1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQrXCIgTFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodEZ1bGxFeHRlbnQrXCIgXCIrKHQuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZLXQuY2lyY3VsYXJQYXRoRGF0YS5yaWdodFNtYWxsQXJjUmFkaXVzKStcIiBBXCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXMrXCIgMCAwIDAgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFkrXCIgTFwiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRYK1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZOlwiTVwiK3QuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VYK1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZK1wiIExcIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdElubmVyRXh0ZW50K1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZK1wiIEFcIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzK1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0U21hbGxBcmNSYWRpdXMrXCIgMCAwIDEgXCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRGdWxsRXh0ZW50K1wiIFwiKyh0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWSt0LmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzKStcIiBMXCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRGdWxsRXh0ZW50K1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudCtcIiBBXCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cytcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzK1wiIDAgMCAxIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0SW5uZXJFeHRlbnQrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCtcIiBMXCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCtcIiBBXCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrXCIgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrXCIgMCAwIDEgXCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0RnVsbEV4dGVudCtcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxSaWdodElubmVyRXh0ZW50K1wiIExcIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRGdWxsRXh0ZW50K1wiIFwiKyh0LmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WSt0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRTbWFsbEFyY1JhZGl1cykrXCIgQVwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzK1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodFNtYWxsQXJjUmFkaXVzK1wiIDAgMCAxIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodElubmVyRXh0ZW50K1wiIFwiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZK1wiIExcIit0LmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WCtcIiBcIit0LmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WTtyZXR1cm4gZX0oZSk7ZWxzZXt2YXIgaD1uLmxpbmtIb3Jpem9udGFsKCkuc291cmNlKGZ1bmN0aW9uKHQpe3JldHVyblt0LnNvdXJjZS54MCsodC5zb3VyY2UueDEtdC5zb3VyY2UueDApLHQueTBdfSkudGFyZ2V0KGZ1bmN0aW9uKHQpe3JldHVyblt0LnRhcmdldC54MCx0LnkxXX0pO2UucGF0aD1oKGUpfX0pfWZ1bmN0aW9uIEwodCxlKXtyZXR1cm4gUCh0KT09UChlKT9cImJvdHRvbVwiPT10LmNpcmN1bGFyTGlua1R5cGU/Tyh0LGUpOnoodCxlKTpQKGUpLVAodCl9ZnVuY3Rpb24geih0LGUpe3JldHVybiB0LnkwLWUueTB9ZnVuY3Rpb24gTyh0LGUpe3JldHVybiBlLnkwLXQueTB9ZnVuY3Rpb24gSSh0LGUpe3JldHVybiB0LnkxLWUueTF9ZnVuY3Rpb24gRCh0LGUpe3JldHVybiBlLnkxLXQueTF9ZnVuY3Rpb24gUCh0KXtyZXR1cm4gdC50YXJnZXQuY29sdW1uLXQuc291cmNlLmNvbHVtbn1mdW5jdGlvbiBSKHQpe3JldHVybiB0LnRhcmdldC54MC10LnNvdXJjZS54MX1mdW5jdGlvbiBGKHQsZSl7dmFyIHI9VCh0KSxuPVIoZSkvTWF0aC50YW4ocik7cmV0dXJuXCJ1cFwiPT1HKHQpP3QueTErbjp0LnkxLW59ZnVuY3Rpb24gQih0LGUpe3ZhciByPVQodCksbj1SKGUpL01hdGgudGFuKHIpO3JldHVyblwidXBcIj09Ryh0KT90LnkxLW46dC55MStufWZ1bmN0aW9uIE4odCxlLHIsbil7dC5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uKGkpe2lmKCFpLmNpcmN1bGFyJiZpLnRhcmdldC5jb2x1bW4taS5zb3VyY2UuY29sdW1uPjEpe3ZhciBhPWkuc291cmNlLmNvbHVtbisxLG89aS50YXJnZXQuY29sdW1uLTEscz0xLGw9by1hKzE7Zm9yKHM9MTthPD1vO2ErKyxzKyspdC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKG8pe2lmKG8uY29sdW1uPT1hKXt2YXIgYyx1PXMvKGwrMSksaD1NYXRoLnBvdygxLXUsMyksZj0zKnUqTWF0aC5wb3coMS11LDIpLHA9MypNYXRoLnBvdyh1LDIpKigxLXUpLGQ9TWF0aC5wb3codSwzKSxnPWgqaS55MCtmKmkueTArcCppLnkxK2QqaS55MSx2PWctaS53aWR0aC8yLG09ZytpLndpZHRoLzI7dj5vLnkwJiZ2PG8ueTE/KGM9by55MS12KzEwLGM9XCJib3R0b21cIj09by5jaXJjdWxhckxpbmtUeXBlP2M6LWMsbz1WKG8sYyxlLHIpLHQubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXtiKHQsbikhPWIobyxuKSYmdC5jb2x1bW49PW8uY29sdW1uJiZqKG8sdCkmJlYodCxjLGUscil9KSk6bT5vLnkwJiZtPG8ueTE/KGM9bS1vLnkwKzEwLG89VihvLGMsZSxyKSx0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7Yih0LG4pIT1iKG8sbikmJnQuY29sdW1uPT1vLmNvbHVtbiYmdC55MDxvLnkxJiZ0LnkxPm8ueTEmJlYodCxjLGUscil9KSk6djxvLnkwJiZtPm8ueTEmJihjPW0tby55MCsxMCxvPVYobyxjLGUsciksdC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2IodCxuKSE9YihvLG4pJiZ0LmNvbHVtbj09by5jb2x1bW4mJnQueTA8by55MSYmdC55MT5vLnkxJiZWKHQsYyxlLHIpfSkpfX0pfX0pfWZ1bmN0aW9uIGoodCxlKXtyZXR1cm4gdC55MD5lLnkwJiZ0LnkwPGUueTF8fCh0LnkxPmUueTAmJnQueTE8ZS55MXx8dC55MDxlLnkwJiZ0LnkxPmUueTEpfWZ1bmN0aW9uIFYodCxlLHIsbil7cmV0dXJuIHQueTArZT49ciYmdC55MStlPD1uJiYodC55MD10LnkwK2UsdC55MT10LnkxK2UsdC50YXJnZXRMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QueTE9dC55MStlfSksdC5zb3VyY2VMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QueTA9dC55MCtlfSkpLHR9ZnVuY3Rpb24gVSh0LGUscixuKXt0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24oaSl7biYmaS55KyhpLnkxLWkueTApPmUmJihpLnk9aS55LShpLnkrKGkueTEtaS55MCktZSkpO3ZhciBhPXQubGlua3MuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBiKHQuc291cmNlLHIpPT1iKGkscil9KSxvPWEubGVuZ3RoO28+MSYmYS5zb3J0KGZ1bmN0aW9uKHQsZSl7aWYoIXQuY2lyY3VsYXImJiFlLmNpcmN1bGFyKXtpZih0LnRhcmdldC5jb2x1bW49PWUudGFyZ2V0LmNvbHVtbilyZXR1cm4gdC55MS1lLnkxO2lmKCFIKHQsZSkpcmV0dXJuIHQueTEtZS55MTtpZih0LnRhcmdldC5jb2x1bW4+ZS50YXJnZXQuY29sdW1uKXt2YXIgcj1CKGUsdCk7cmV0dXJuIHQueTEtcn1pZihlLnRhcmdldC5jb2x1bW4+dC50YXJnZXQuY29sdW1uKXJldHVybiBCKHQsZSktZS55MX1yZXR1cm4gdC5jaXJjdWxhciYmIWUuY2lyY3VsYXI/XCJ0b3BcIj09dC5jaXJjdWxhckxpbmtUeXBlPy0xOjE6ZS5jaXJjdWxhciYmIXQuY2lyY3VsYXI/XCJ0b3BcIj09ZS5jaXJjdWxhckxpbmtUeXBlPzE6LTE6dC5jaXJjdWxhciYmZS5jaXJjdWxhcj90LmNpcmN1bGFyTGlua1R5cGU9PT1lLmNpcmN1bGFyTGlua1R5cGUmJlwidG9wXCI9PXQuY2lyY3VsYXJMaW5rVHlwZT90LnRhcmdldC5jb2x1bW49PT1lLnRhcmdldC5jb2x1bW4/dC50YXJnZXQueTEtZS50YXJnZXQueTE6ZS50YXJnZXQuY29sdW1uLXQudGFyZ2V0LmNvbHVtbjp0LmNpcmN1bGFyTGlua1R5cGU9PT1lLmNpcmN1bGFyTGlua1R5cGUmJlwiYm90dG9tXCI9PXQuY2lyY3VsYXJMaW5rVHlwZT90LnRhcmdldC5jb2x1bW49PT1lLnRhcmdldC5jb2x1bW4/ZS50YXJnZXQueTEtdC50YXJnZXQueTE6dC50YXJnZXQuY29sdW1uLWUudGFyZ2V0LmNvbHVtbjpcInRvcFwiPT10LmNpcmN1bGFyTGlua1R5cGU/LTE6MTp2b2lkIDB9KTt2YXIgcz1pLnkwO2EuZm9yRWFjaChmdW5jdGlvbih0KXt0LnkwPXMrdC53aWR0aC8yLHMrPXQud2lkdGh9KSxhLmZvckVhY2goZnVuY3Rpb24odCxlKXtpZihcImJvdHRvbVwiPT10LmNpcmN1bGFyTGlua1R5cGUpe2Zvcih2YXIgcj1lKzEsbj0wO3I8bztyKyspbis9YVtyXS53aWR0aDt0LnkwPWkueTEtbi10LndpZHRoLzJ9fSl9KX1mdW5jdGlvbiBxKHQsZSxyKXt0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49dC5saW5rcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGIodC50YXJnZXQscik9PWIoZSxyKX0pLGk9bi5sZW5ndGg7aT4xJiZuLnNvcnQoZnVuY3Rpb24odCxlKXtpZighdC5jaXJjdWxhciYmIWUuY2lyY3VsYXIpe2lmKHQuc291cmNlLmNvbHVtbj09ZS5zb3VyY2UuY29sdW1uKXJldHVybiB0LnkwLWUueTA7aWYoIUgodCxlKSlyZXR1cm4gdC55MC1lLnkwO2lmKGUuc291cmNlLmNvbHVtbjx0LnNvdXJjZS5jb2x1bW4pe3ZhciByPUYoZSx0KTtyZXR1cm4gdC55MC1yfWlmKHQuc291cmNlLmNvbHVtbjxlLnNvdXJjZS5jb2x1bW4pcmV0dXJuIEYodCxlKS1lLnkwfXJldHVybiB0LmNpcmN1bGFyJiYhZS5jaXJjdWxhcj9cInRvcFwiPT10LmNpcmN1bGFyTGlua1R5cGU/LTE6MTplLmNpcmN1bGFyJiYhdC5jaXJjdWxhcj9cInRvcFwiPT1lLmNpcmN1bGFyTGlua1R5cGU/MTotMTp0LmNpcmN1bGFyJiZlLmNpcmN1bGFyP3QuY2lyY3VsYXJMaW5rVHlwZT09PWUuY2lyY3VsYXJMaW5rVHlwZSYmXCJ0b3BcIj09dC5jaXJjdWxhckxpbmtUeXBlP3Quc291cmNlLmNvbHVtbj09PWUuc291cmNlLmNvbHVtbj90LnNvdXJjZS55MS1lLnNvdXJjZS55MTp0LnNvdXJjZS5jb2x1bW4tZS5zb3VyY2UuY29sdW1uOnQuY2lyY3VsYXJMaW5rVHlwZT09PWUuY2lyY3VsYXJMaW5rVHlwZSYmXCJib3R0b21cIj09dC5jaXJjdWxhckxpbmtUeXBlP3Quc291cmNlLmNvbHVtbj09PWUuc291cmNlLmNvbHVtbj90LnNvdXJjZS55MS1lLnNvdXJjZS55MTplLnNvdXJjZS5jb2x1bW4tdC5zb3VyY2UuY29sdW1uOlwidG9wXCI9PXQuY2lyY3VsYXJMaW5rVHlwZT8tMToxOnZvaWQgMH0pO3ZhciBhPWUueTA7bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QueTE9YSt0LndpZHRoLzIsYSs9dC53aWR0aH0pLG4uZm9yRWFjaChmdW5jdGlvbih0LHIpe2lmKFwiYm90dG9tXCI9PXQuY2lyY3VsYXJMaW5rVHlwZSl7Zm9yKHZhciBhPXIrMSxvPTA7YTxpO2ErKylvKz1uW2FdLndpZHRoO3QueTE9ZS55MS1vLXQud2lkdGgvMn19KX0pfWZ1bmN0aW9uIEgodCxlKXtyZXR1cm4gRyh0KT09RyhlKX1mdW5jdGlvbiBHKHQpe3JldHVybiB0LnkwLXQueTE+MD9cInVwXCI6XCJkb3duXCJ9ZnVuY3Rpb24gWSh0LGUpe3JldHVybiBiKHQuc291cmNlLGUpPT1iKHQudGFyZ2V0LGUpfXQuc2Fua2V5Q2lyY3VsYXI9ZnVuY3Rpb24oKXt2YXIgdCxuLGE9MCxiPTAsVD0xLFM9MSxFPTI0LEw9dix6PW8sTz1tLEk9eSxEPTMyLFA9MixSPW51bGw7ZnVuY3Rpb24gRigpe3ZhciBvPXtub2RlczpPLmFwcGx5KG51bGwsYXJndW1lbnRzKSxsaW5rczpJLmFwcGx5KG51bGwsYXJndW1lbnRzKX07IWZ1bmN0aW9uKHQpe3Qubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0LGUpe3QuaW5kZXg9ZSx0LnNvdXJjZUxpbmtzPVtdLHQudGFyZ2V0TGlua3M9W119KTt2YXIgZT1yLm1hcCh0Lm5vZGVzLEwpO3QubGlua3MuZm9yRWFjaChmdW5jdGlvbih0LHIpe3QuaW5kZXg9cjt2YXIgbj10LnNvdXJjZSxpPXQudGFyZ2V0O1wib2JqZWN0XCIhPT0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIG4/XCJ1bmRlZmluZWRcIjpsKG4pKSYmKG49dC5zb3VyY2U9eChlLG4pKSxcIm9iamVjdFwiIT09KFwidW5kZWZpbmVkXCI9PXR5cGVvZiBpP1widW5kZWZpbmVkXCI6bChpKSkmJihpPXQudGFyZ2V0PXgoZSxpKSksbi5zb3VyY2VMaW5rcy5wdXNoKHQpLGkudGFyZ2V0TGlua3MucHVzaCh0KX0pfShvKSxmdW5jdGlvbih0LGUscil7dmFyIG49MDtpZihudWxsPT09cil7Zm9yKHZhciBhPVtdLG89MDtvPHQubGlua3MubGVuZ3RoO28rKyl7dmFyIHM9dC5saW5rc1tvXSxsPXMuc291cmNlLmluZGV4LGM9cy50YXJnZXQuaW5kZXg7YVtsXXx8KGFbbF09W10pLGFbY118fChhW2NdPVtdKSwtMT09PWFbbF0uaW5kZXhPZihjKSYmYVtsXS5wdXNoKGMpfXZhciB1PWkoYSk7dS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoLWUubGVuZ3RofSk7dmFyIGg9e307Zm9yKG89MDtvPHUubGVuZ3RoO28rKyl7Zm9yKHZhciBmPXVbb10scD0hMSxkPTA7ZDxmLmxlbmd0aC0xO2QrKylpZihoW2ZbZF1dfHwoaFtmW2RdXT17fSksaFtmW2RdXSYmaFtmW2RdXVtmW2QrMV1dKXtwPSEwO2JyZWFrfWlmKCFwKXt2YXIgZz1mLnNsaWNlKC0yKTtoW2dbMF1dW2dbMV1dPSEwfX10LmxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC50YXJnZXQuaW5kZXgscj10LnNvdXJjZS5pbmRleDtlPT09cnx8aFtyXSYmaFtyXVtlXT8odC5jaXJjdWxhcj0hMCx0LmNpcmN1bGFyTGlua0lEPW4sbis9MSk6dC5jaXJjdWxhcj0hMX0pfWVsc2UgdC5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc291cmNlW3JdPHQudGFyZ2V0W3JdP3QuY2lyY3VsYXI9ITE6KHQuY2lyY3VsYXI9ITAsdC5jaXJjdWxhckxpbmtJRD1uLG4rPTEpfSl9KG8sMCxSKSxmdW5jdGlvbih0KXt0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dC5wYXJ0T2ZDeWNsZT0hMSx0LnZhbHVlPU1hdGgubWF4KGUuc3VtKHQuc291cmNlTGlua3MsZiksZS5zdW0odC50YXJnZXRMaW5rcyxmKSksdC5zb3VyY2VMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuY2lyY3VsYXImJih0LnBhcnRPZkN5Y2xlPSEwLHQuY2lyY3VsYXJMaW5rVHlwZT1lLmNpcmN1bGFyTGlua1R5cGUpfSksdC50YXJnZXRMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuY2lyY3VsYXImJih0LnBhcnRPZkN5Y2xlPSEwLHQuY2lyY3VsYXJMaW5rVHlwZT1lLmNpcmN1bGFyTGlua1R5cGUpfSl9KX0obyksZnVuY3Rpb24odCl7dmFyIGUscixuO2ZvcihlPXQubm9kZXMscj1bXSxuPTA7ZS5sZW5ndGg7KytuLGU9cixyPVtdKWUuZm9yRWFjaChmdW5jdGlvbih0KXt0LmRlcHRoPW4sdC5zb3VyY2VMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3IuaW5kZXhPZih0LnRhcmdldCk8MCYmIXQuY2lyY3VsYXImJnIucHVzaCh0LnRhcmdldCl9KX0pO2ZvcihlPXQubm9kZXMscj1bXSxuPTA7ZS5sZW5ndGg7KytuLGU9cixyPVtdKWUuZm9yRWFjaChmdW5jdGlvbih0KXt0LmhlaWdodD1uLHQudGFyZ2V0TGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXtyLmluZGV4T2YodC5zb3VyY2UpPDAmJiF0LmNpcmN1bGFyJiZyLnB1c2godC5zb3VyY2UpfSl9KTt0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dC5jb2x1bW49TWF0aC5mbG9vcih6LmNhbGwobnVsbCx0LG4pKX0pfShvKSxBKG8sTCksZnVuY3Rpb24oaSxvLHMpe3ZhciBsPXIubmVzdCgpLmtleShmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW59KS5zb3J0S2V5cyhlLmFzY2VuZGluZykuZW50cmllcyhpLm5vZGVzKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWVzfSk7KGZ1bmN0aW9uKHIpe2lmKG4pe3ZhciBvPTEvMDtsLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9UypuLyh0Lmxlbmd0aCsxKTtvPWU8bz9lOm99KSx0PW99dmFyIHM9ZS5taW4obCxmdW5jdGlvbihyKXtyZXR1cm4oUy1iLShyLmxlbmd0aC0xKSp0KS9lLnN1bShyLGYpfSk7cyo9ayxpLmxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC53aWR0aD10LnZhbHVlKnN9KTt2YXIgYz1mdW5jdGlvbih0KXt2YXIgcj0wLG49MCxpPTAsYT0wLG89ZS5tYXgodC5ub2RlcyxmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW59KTtyZXR1cm4gdC5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY2lyY3VsYXImJihcInRvcFwiPT10LmNpcmN1bGFyTGlua1R5cGU/cis9dC53aWR0aDpuKz10LndpZHRoLDA9PXQudGFyZ2V0LmNvbHVtbiYmKGErPXQud2lkdGgpLHQuc291cmNlLmNvbHVtbj09byYmKGkrPXQud2lkdGgpKX0pLHt0b3A6cj1yPjA/citfK3c6cixib3R0b206bj1uPjA/bitfK3c6bixsZWZ0OmE9YT4wP2ErXyt3OmEscmlnaHQ6aT1pPjA/aStfK3c6aX19KGkpLHU9ZnVuY3Rpb24odCxyKXt2YXIgbj1lLm1heCh0Lm5vZGVzLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbn0pLGk9VC1hLG89Uy1iLHM9aStyLnJpZ2h0K3IubGVmdCxsPW8rci50b3Arci5ib3R0b20sYz1pL3MsdT1vL2w7cmV0dXJuIGE9YSpjK3IubGVmdCxUPTA9PXIucmlnaHQ/VDpUKmMsYj1iKnUrci50b3AsUyo9dSx0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dC54MD1hK3QuY29sdW1uKigoVC1hLUUpL24pLHQueDE9dC54MCtFfSksdX0oaSxjKTtzKj11LGkubGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LndpZHRoPXQudmFsdWUqc30pLGwuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDt0LmZvckVhY2goZnVuY3Rpb24odCxuKXt0LmRlcHRoPT1sLmxlbmd0aC0xJiYxPT1lPyh0LnkwPVMvMi10LnZhbHVlKnMsdC55MT10LnkwK3QudmFsdWUqcyk6MD09dC5kZXB0aCYmMT09ZT8odC55MD1TLzItdC52YWx1ZSpzLHQueTE9dC55MCt0LnZhbHVlKnMpOnQucGFydE9mQ3ljbGU/MD09TSh0LHIpPyh0LnkwPVMvMituLHQueTE9dC55MCt0LnZhbHVlKnMpOlwidG9wXCI9PXQuY2lyY3VsYXJMaW5rVHlwZT8odC55MD1iK24sdC55MT10LnkwK3QudmFsdWUqcyk6KHQueTA9Uy10LnZhbHVlKnMtbix0LnkxPXQueTArdC52YWx1ZSpzKTowPT1jLnRvcHx8MD09Yy5ib3R0b20/KHQueTA9KFMtYikvZSpuLHQueTE9dC55MCt0LnZhbHVlKnMpOih0LnkwPShTLWIpLzItZS8yK24sdC55MT10LnkwK3QudmFsdWUqcyl9KX0pfSkocyksbSgpO2Zvcih2YXIgYz0xLHU9bzt1PjA7LS11KXYoYyo9Ljk5LHMpLG0oKTtmdW5jdGlvbiB2KHQscil7dmFyIG49bC5sZW5ndGg7bC5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBhPWkubGVuZ3RoLG89aVswXS5kZXB0aDtpLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIHM7aWYoaS5zb3VyY2VMaW5rcy5sZW5ndGh8fGkudGFyZ2V0TGlua3MubGVuZ3RoKWlmKGkucGFydE9mQ3ljbGUmJk0oaSxyKT4wKTtlbHNlIGlmKDA9PW8mJjE9PWEpcz1pLnkxLWkueTAsaS55MD1TLzItcy8yLGkueTE9Uy8yK3MvMjtlbHNlIGlmKG89PW4tMSYmMT09YSlzPWkueTEtaS55MCxpLnkwPVMvMi1zLzIsaS55MT1TLzIrcy8yO2Vsc2V7dmFyIGw9ZS5tZWFuKGkuc291cmNlTGlua3MsZyksYz1lLm1lYW4oaS50YXJnZXRMaW5rcyxkKSx1PSgobCYmYz8obCtjKS8yOmx8fGMpLXAoaSkpKnQ7aS55MCs9dSxpLnkxKz11fX0pfSl9ZnVuY3Rpb24gbSgpe2wuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcixuLGksYT1iLG89ZS5sZW5ndGg7Zm9yKGUuc29ydChoKSxpPTA7aTxvOysraSlyPWVbaV0sKG49YS1yLnkwKT4wJiYoci55MCs9bixyLnkxKz1uKSxhPXIueTErdDtpZigobj1hLXQtUyk+MClmb3IoYT1yLnkwLT1uLHIueTEtPW4saT1vLTI7aT49MDstLWkpcj1lW2ldLChuPXIueTErdC1hKT4wJiYoci55MC09bixyLnkxLT1uKSxhPXIueTB9KX19KG8sRCxMKSxCKG8pO2Zvcih2YXIgcz0wO3M8NDtzKyspVShvLFMsTCkscShvLDAsTCksTihvLGIsUyxMKSxVKG8sUyxMKSxxKG8sMCxMKTtyZXR1cm4gZnVuY3Rpb24odCxyLG4pe3ZhciBpPXQubm9kZXMsYT10LmxpbmtzLG89ITEscz0hMTtpZihhLmZvckVhY2goZnVuY3Rpb24odCl7XCJ0b3BcIj09dC5jaXJjdWxhckxpbmtUeXBlP289ITA6XCJib3R0b21cIj09dC5jaXJjdWxhckxpbmtUeXBlJiYocz0hMCl9KSwwPT1vfHwwPT1zKXt2YXIgbD1lLm1pbihpLGZ1bmN0aW9uKHQpe3JldHVybiB0LnkwfSksYz1lLm1heChpLGZ1bmN0aW9uKHQpe3JldHVybiB0LnkxfSksdT1jLWwsaD1uLXIsZj1oL3U7aS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPSh0LnkxLXQueTApKmY7dC55MD0odC55MC1sKSpmLHQueTE9dC55MCtlfSksYS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QueTA9KHQueTAtbCkqZix0LnkxPSh0LnkxLWwpKmYsdC53aWR0aD10LndpZHRoKmZ9KX19KG8sYixTKSxDKG8sUCxTLEwpLG99ZnVuY3Rpb24gQih0KXt0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dC5zb3VyY2VMaW5rcy5zb3J0KHUpLHQudGFyZ2V0TGlua3Muc29ydChjKX0pLHQubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LnkwLHI9ZSxuPXQueTEsaT1uO3Quc291cmNlTGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNpcmN1bGFyPyh0LnkwPW4tdC53aWR0aC8yLG4tPXQud2lkdGgpOih0LnkwPWUrdC53aWR0aC8yLGUrPXQud2lkdGgpfSksdC50YXJnZXRMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY2lyY3VsYXI/KHQueTE9aS10LndpZHRoLzIsaS09dC53aWR0aCk6KHQueTE9cit0LndpZHRoLzIscis9dC53aWR0aCl9KX0pfXJldHVybiBGLm5vZGVJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cyh0KSxGKTpMfSxGLm5vZGVBbGlnbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oej1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cyh0KSxGKTp6fSxGLm5vZGVXaWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT0rdCxGKTpFfSxGLm5vZGVQYWRkaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStlLEYpOnR9LEYubm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE89XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnModCksRik6T30sRi5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oST1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cyh0KSxGKTpJfSxGLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9Yj0wLFQ9K3RbMF0sUz0rdFsxXSxGKTpbVC1hLFMtYl19LEYuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0WzBdWzBdLFQ9K3RbMV1bMF0sYj0rdFswXVsxXSxTPSt0WzFdWzFdLEYpOltbYSxiXSxbVCxTXV19LEYuaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRD0rdCxGKTpEfSxGLmNpcmN1bGFyTGlua0dhcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUD0rdCxGKTpQfSxGLm5vZGVQYWRkaW5nUmF0aW89ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsRik6bn0sRi5zb3J0Tm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFI9dCxGKTpSfSxGLnVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gQSh0LEwpLEIodCksdC5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY2lyY3VsYXImJih0LmNpcmN1bGFyTGlua1R5cGU9dC55MCt0LnkxPFM/XCJ0b3BcIjpcImJvdHRvbVwiLHQuc291cmNlLmNpcmN1bGFyTGlua1R5cGU9dC5jaXJjdWxhckxpbmtUeXBlLHQudGFyZ2V0LmNpcmN1bGFyTGlua1R5cGU9dC5jaXJjdWxhckxpbmtUeXBlKX0pLFUodCxTLEwsITEpLHEodCwwLEwpLEModCxQLFMsTCksdH0sRn0sdC5zYW5rZXlDZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQudGFyZ2V0TGlua3MubGVuZ3RoP3QuZGVwdGg6dC5zb3VyY2VMaW5rcy5sZW5ndGg/ZS5taW4odC5zb3VyY2VMaW5rcyxhKS0xOjB9LHQuc2Fua2V5TGVmdD1mdW5jdGlvbih0KXtyZXR1cm4gdC5kZXB0aH0sdC5zYW5rZXlSaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiBlLTEtdC5oZWlnaHR9LHQuc2Fua2V5SnVzdGlmeT1vLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSxcIm9iamVjdFwiPT10eXBlb2YgciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGU/aShyLHQoXCJkMy1hcnJheVwiKSx0KFwiZDMtY29sbGVjdGlvblwiKSx0KFwiZDMtc2hhcGVcIiksdChcImVsZW1lbnRhcnktY2lyY3VpdHMtZGlyZWN0ZWQtZ3JhcGhcIikpOmkobi5kMz1uLmQzfHx7fSxuLmQzLG4uZDMsbi5kMyxudWxsKX0se1wiZDMtYXJyYXlcIjoxNDMsXCJkMy1jb2xsZWN0aW9uXCI6MTQ0LFwiZDMtc2hhcGVcIjoxNTMsXCJlbGVtZW50YXJ5LWNpcmN1aXRzLWRpcmVjdGVkLWdyYXBoXCI6MTY1fV0sMTUzOltmdW5jdGlvbih0LGUscil7dmFyIG4saTtuPXRoaXMsaT1mdW5jdGlvbih0LGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHIodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBuPU1hdGguYWJzLGk9TWF0aC5hdGFuMixhPU1hdGguY29zLG89TWF0aC5tYXgscz1NYXRoLm1pbixsPU1hdGguc2luLGM9TWF0aC5zcXJ0LHU9MWUtMTIsaD1NYXRoLlBJLGY9aC8yLHA9MipoO2Z1bmN0aW9uIGQodCl7cmV0dXJuIHQ+PTE/Zjp0PD0tMT8tZjpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiB2KHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uIG0odCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiB5KHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIHgodCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gYih0LGUscixuLGksYSxzKXt2YXIgbD10LXIsdT1lLW4saD0ocz9hOi1hKS9jKGwqbCt1KnUpLGY9aCp1LHA9LWgqbCxkPXQrZixnPWUrcCx2PXIrZixtPW4rcCx5PShkK3YpLzIseD0oZyttKS8yLGI9di1kLF89bS1nLHc9YipiK18qXyxrPWktYSxBPWQqbS12KmcsVD0oXzwwPy0xOjEpKmMobygwLGsqayp3LUEqQSkpLE09KEEqXy1iKlQpL3csUz0oLUEqYi1fKlQpL3csRT0oQSpfK2IqVCkvdyxDPSgtQSpiK18qVCkvdyxMPU0teSx6PVMteCxPPUUteSxJPUMteDtyZXR1cm4gTCpMK3oqej5PKk8rSSpJJiYoTT1FLFM9Qykse2N4Ok0sY3k6Uyx4MDE6LWYseTAxOi1wLHgxMTpNKihpL2stMSkseTExOlMqKGkvay0xKX19ZnVuY3Rpb24gXyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gbmV3IF8odCl9ZnVuY3Rpb24gayh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBBKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIFQoKXt2YXIgdD1rLG49QSxpPXIoITApLGE9bnVsbCxvPXcscz1udWxsO2Z1bmN0aW9uIGwocil7dmFyIGwsYyx1LGg9ci5sZW5ndGgsZj0hMTtmb3IobnVsbD09YSYmKHM9byh1PWUucGF0aCgpKSksbD0wO2w8PWg7KytsKSEobDxoJiZpKGM9cltsXSxsLHIpKT09PWYmJigoZj0hZik/cy5saW5lU3RhcnQoKTpzLmxpbmVFbmQoKSksZiYmcy5wb2ludCgrdChjLGwsciksK24oYyxsLHIpKTtpZih1KXJldHVybiBzPW51bGwsdStcIlwifHxudWxsfXJldHVybiBsLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOnIoK2UpLGwpOnR9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cigrdCksbCk6bn0sbC5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCEhdCksbCk6aX0sbC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LG51bGwhPWEmJihzPW8oYSkpLGwpOm99LGwuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9hPXM9bnVsbDpzPW8oYT10KSxsKTphfSxsfWZ1bmN0aW9uIE0oKXt2YXIgdD1rLG49bnVsbCxpPXIoMCksYT1BLG89cighMCkscz1udWxsLGw9dyxjPW51bGw7ZnVuY3Rpb24gdShyKXt2YXIgdSxoLGYscCxkLGc9ci5sZW5ndGgsdj0hMSxtPW5ldyBBcnJheShnKSx5PW5ldyBBcnJheShnKTtmb3IobnVsbD09cyYmKGM9bChkPWUucGF0aCgpKSksdT0wO3U8PWc7Kyt1KXtpZighKHU8ZyYmbyhwPXJbdV0sdSxyKSk9PT12KWlmKHY9IXYpaD11LGMuYXJlYVN0YXJ0KCksYy5saW5lU3RhcnQoKTtlbHNle2ZvcihjLmxpbmVFbmQoKSxjLmxpbmVTdGFydCgpLGY9dS0xO2Y+PWg7LS1mKWMucG9pbnQobVtmXSx5W2ZdKTtjLmxpbmVFbmQoKSxjLmFyZWFFbmQoKX12JiYobVt1XT0rdChwLHUscikseVt1XT0raShwLHUsciksYy5wb2ludChuPytuKHAsdSxyKTptW3VdLGE/K2EocCx1LHIpOnlbdV0pKX1pZihkKXJldHVybiBjPW51bGwsZCtcIlwifHxudWxsfWZ1bmN0aW9uIGgoKXtyZXR1cm4gVCgpLmRlZmluZWQobykuY3VydmUobCkuY29udGV4dChzKX1yZXR1cm4gdS54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTpyKCtlKSxuPW51bGwsdSk6dH0sdS54MD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6cigrZSksdSk6dH0sdS54MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P251bGw6XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoK3QpLHUpOm59LHUueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cigrdCksYT1udWxsLHUpOml9LHUueTA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoK3QpLHUpOml9LHUueTE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bnVsbD09dD9udWxsOlwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCt0KSx1KTphfSx1LmxpbmVYMD11LmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiBoKCkueCh0KS55KGkpfSx1LmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiBoKCkueCh0KS55KGEpfSx1LmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiBoKCkueChuKS55KGkpfSx1LmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoISF0KSx1KTpvfSx1LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQsbnVsbCE9cyYmKGM9bChzKSksdSk6bH0sdS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P3M9Yz1udWxsOmM9bChzPXQpLHUpOnN9LHV9ZnVuY3Rpb24gUyh0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn1mdW5jdGlvbiBFKHQpe3JldHVybiB0fV8ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9fX07dmFyIEM9eih3KTtmdW5jdGlvbiBMKHQpe3RoaXMuX2N1cnZlPXR9ZnVuY3Rpb24geih0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBuZXcgTCh0KGUpKX1yZXR1cm4gZS5fY3VydmU9dCxlfWZ1bmN0aW9uIE8odCl7dmFyIGU9dC5jdXJ2ZTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2Uoeih0KSk6ZSgpLl9jdXJ2ZX0sdH1mdW5jdGlvbiBJKCl7cmV0dXJuIE8oVCgpLmN1cnZlKEMpKX1mdW5jdGlvbiBEKCl7dmFyIHQ9TSgpLmN1cnZlKEMpLGU9dC5jdXJ2ZSxyPXQubGluZVgwLG49dC5saW5lWDEsaT10LmxpbmVZMCxhPXQubGluZVkxO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQuc3RhcnRBbmdsZT10LngwLGRlbGV0ZSB0LngwLHQuZW5kQW5nbGU9dC54MSxkZWxldGUgdC54MSx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmlubmVyUmFkaXVzPXQueTAsZGVsZXRlIHQueTAsdC5vdXRlclJhZGl1cz10LnkxLGRlbGV0ZSB0LnkxLHQubGluZVN0YXJ0QW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gTyhyKCkpfSxkZWxldGUgdC5saW5lWDAsdC5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gTyhuKCkpfSxkZWxldGUgdC5saW5lWDEsdC5saW5lSW5uZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gTyhpKCkpfSxkZWxldGUgdC5saW5lWTAsdC5saW5lT3V0ZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gTyhhKCkpfSxkZWxldGUgdC5saW5lWTEsdC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKHoodCkpOmUoKS5fY3VydmV9LHR9ZnVuY3Rpb24gUCh0LGUpe3JldHVyblsoZT0rZSkqTWF0aC5jb3ModC09TWF0aC5QSS8yKSxlKk1hdGguc2luKHQpXX1MLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX2N1cnZlLnBvaW50KGUqTWF0aC5zaW4odCksZSotTWF0aC5jb3ModCkpfX07dmFyIFI9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIEYodCl7cmV0dXJuIHQuc291cmNlfWZ1bmN0aW9uIEIodCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIE4odCl7dmFyIG49RixpPUIsYT1rLG89QSxzPW51bGw7ZnVuY3Rpb24gbCgpe3ZhciByLGw9Ui5jYWxsKGFyZ3VtZW50cyksYz1uLmFwcGx5KHRoaXMsbCksdT1pLmFwcGx5KHRoaXMsbCk7aWYoc3x8KHM9cj1lLnBhdGgoKSksdChzLCthLmFwcGx5KHRoaXMsKGxbMF09YyxsKSksK28uYXBwbHkodGhpcyxsKSwrYS5hcHBseSh0aGlzLChsWzBdPXUsbCkpLCtvLmFwcGx5KHRoaXMsbCkpLHIpcmV0dXJuIHM9bnVsbCxyK1wiXCJ8fG51bGx9cmV0dXJuIGwuc291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsbCk6bn0sbC50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxsKTppfSxsLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoK3QpLGwpOmF9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cigrdCksbCk6b30sbC5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW51bGw9PXQ/bnVsbDp0LGwpOnN9LGx9ZnVuY3Rpb24gaih0LGUscixuLGkpe3QubW92ZVRvKGUsciksdC5iZXppZXJDdXJ2ZVRvKGU9KGUrbikvMixyLGUsaSxuLGkpfWZ1bmN0aW9uIFYodCxlLHIsbixpKXt0Lm1vdmVUbyhlLHIpLHQuYmV6aWVyQ3VydmVUbyhlLHI9KHIraSkvMixuLHIsbixpKX1mdW5jdGlvbiBVKHQsZSxyLG4saSl7dmFyIGE9UChlLHIpLG89UChlLHI9KHIraSkvMikscz1QKG4sciksbD1QKG4saSk7dC5tb3ZlVG8oYVswXSxhWzFdKSx0LmJlemllckN1cnZlVG8ob1swXSxvWzFdLHNbMF0sc1sxXSxsWzBdLGxbMV0pfXZhciBxPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KGUvaCk7dC5tb3ZlVG8ociwwKSx0LmFyYygwLDAsciwwLHApfX0sSD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc3FydChlLzUpLzI7dC5tb3ZlVG8oLTMqciwtciksdC5saW5lVG8oLXIsLXIpLHQubGluZVRvKC1yLC0zKnIpLHQubGluZVRvKHIsLTMqciksdC5saW5lVG8ociwtciksdC5saW5lVG8oMypyLC1yKSx0LmxpbmVUbygzKnIsciksdC5saW5lVG8ocixyKSx0LmxpbmVUbyhyLDMqciksdC5saW5lVG8oLXIsMypyKSx0LmxpbmVUbygtcixyKSx0LmxpbmVUbygtMypyLHIpLHQuY2xvc2VQYXRoKCl9fSxHPU1hdGguc3FydCgxLzMpLFk9MipHLFc9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNxcnQoZS9ZKSxuPXIqRzt0Lm1vdmVUbygwLC1yKSx0LmxpbmVUbyhuLDApLHQubGluZVRvKDAsciksdC5saW5lVG8oLW4sMCksdC5jbG9zZVBhdGgoKX19LFg9TWF0aC5zaW4oaC8xMCkvTWF0aC5zaW4oNypoLzEwKSxaPU1hdGguc2luKHAvMTApKlgsJD0tTWF0aC5jb3MocC8xMCkqWCxKPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KC44OTA4MTMwOTE1MjkyODUyKmUpLG49WipyLGk9JCpyO3QubW92ZVRvKDAsLXIpLHQubGluZVRvKG4saSk7Zm9yKHZhciBhPTE7YTw1OysrYSl7dmFyIG89cCphLzUscz1NYXRoLmNvcyhvKSxsPU1hdGguc2luKG8pO3QubGluZVRvKGwqciwtcypyKSx0LmxpbmVUbyhzKm4tbCppLGwqbitzKmkpfXQuY2xvc2VQYXRoKCl9fSxLPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KGUpLG49LXIvMjt0LnJlY3QobixuLHIscil9fSxRPU1hdGguc3FydCgzKSx0dD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPS1NYXRoLnNxcnQoZS8oMypRKSk7dC5tb3ZlVG8oMCwyKnIpLHQubGluZVRvKC1RKnIsLXIpLHQubGluZVRvKFEqciwtciksdC5jbG9zZVBhdGgoKX19LGV0PS0uNSxydD1NYXRoLnNxcnQoMykvMixudD0xL01hdGguc3FydCgxMiksaXQ9MyoobnQvMisxKSxhdD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc3FydChlL2l0KSxuPXIvMixpPXIqbnQsYT1uLG89cipudCtyLHM9LWEsbD1vO3QubW92ZVRvKG4saSksdC5saW5lVG8oYSxvKSx0LmxpbmVUbyhzLGwpLHQubGluZVRvKGV0Km4tcnQqaSxydCpuK2V0KmkpLHQubGluZVRvKGV0KmEtcnQqbyxydCphK2V0Km8pLHQubGluZVRvKGV0KnMtcnQqbCxydCpzK2V0KmwpLHQubGluZVRvKGV0Km4rcnQqaSxldCppLXJ0Km4pLHQubGluZVRvKGV0KmErcnQqbyxldCpvLXJ0KmEpLHQubGluZVRvKGV0KnMrcnQqbCxldCpsLXJ0KnMpLHQuY2xvc2VQYXRoKCl9fSxvdD1bcSxILFcsSyxKLHR0LGF0XTtmdW5jdGlvbiBzdCgpe31mdW5jdGlvbiBsdCh0LGUscil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKnQuX3gwK3QuX3gxKS8zLCgyKnQuX3kwK3QuX3kxKS8zLCh0Ll94MCsyKnQuX3gxKS8zLCh0Ll95MCsyKnQuX3kxKS8zLCh0Ll94MCs0KnQuX3gxK2UpLzYsKHQuX3kwKzQqdC5feTErcikvNil9ZnVuY3Rpb24gY3QodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHV0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBodCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gZnQodCxlKXt0aGlzLl9iYXNpcz1uZXcgY3QodCksdGhpcy5fYmV0YT1lfWN0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6bHQodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6bHQodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19LHV0LnByb3RvdHlwZT17YXJlYVN0YXJ0OnN0LGFyZWFFbmQ6c3QsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gyKzIqdGhpcy5feDMpLzMsKHRoaXMuX3kyKzIqdGhpcy5feTMpLzMpLHRoaXMuX2NvbnRleHQubGluZVRvKCh0aGlzLl94MysyKnRoaXMuX3gyKS8zLCh0aGlzLl95MysyKnRoaXMuX3kyKS8zKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9dCx0aGlzLl95Mj1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND10LHRoaXMuX3k0PWUsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNiwodGhpcy5feTArNCp0aGlzLl95MStlKS82KTticmVhaztkZWZhdWx0Omx0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxodC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Mzt2YXIgcj0odGhpcy5feDArNCp0aGlzLl94MSt0KS82LG49KHRoaXMuX3kwKzQqdGhpcy5feTErZSkvNjt0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHIsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8ocixuKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Omx0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxmdC5wcm90b3R5cGU9e2xpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXSx0aGlzLl9iYXNpcy5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LHI9dC5sZW5ndGgtMTtpZihyPjApZm9yKHZhciBuLGk9dFswXSxhPWVbMF0sbz10W3JdLWkscz1lW3JdLWEsbD0tMTsrK2w8PXI7KW49bC9yLHRoaXMuX2Jhc2lzLnBvaW50KHRoaXMuX2JldGEqdFtsXSsoMS10aGlzLl9iZXRhKSooaStuKm8pLHRoaXMuX2JldGEqZVtsXSsoMS10aGlzLl9iZXRhKSooYStuKnMpKTt0aGlzLl94PXRoaXMuX3k9bnVsbCx0aGlzLl9iYXNpcy5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfX07dmFyIHB0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gMT09PWU/bmV3IGN0KHQpOm5ldyBmdCh0LGUpfXJldHVybiByLmJldGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxyfSguODUpO2Z1bmN0aW9uIGR0KHQsZSxyKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8odC5feDErdC5fayoodC5feDItdC5feDApLHQuX3kxK3QuX2sqKHQuX3kyLXQuX3kwKSx0Ll94Mit0Ll9rKih0Ll94MS1lKSx0Ll95Mit0Ll9rKih0Ll95MS1yKSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gZ3QodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fWd0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpkdCh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDE9dCx0aGlzLl95MT1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6ZHQodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciB2dD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIG5ldyBndCh0LGUpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxyfSgwKTtmdW5jdGlvbiBtdCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9bXQucHJvdG90eXBlPXthcmVhU3RhcnQ6c3QsYXJlYUVuZDpzdCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PWUpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9ZTticmVhaztkZWZhdWx0OmR0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgeXQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBuZXcgbXQodCxlKX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oMCk7ZnVuY3Rpb24geHQodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fXh0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OmR0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgYnQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBuZXcgeHQodCxlKX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oMCk7ZnVuY3Rpb24gX3QodCxlLHIpe3ZhciBuPXQuX3gxLGk9dC5feTEsYT10Ll94MixvPXQuX3kyO2lmKHQuX2wwMV9hPnUpe3ZhciBzPTIqdC5fbDAxXzJhKzMqdC5fbDAxX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGw9Myp0Ll9sMDFfYSoodC5fbDAxX2ErdC5fbDEyX2EpO249KG4qcy10Ll94MCp0Ll9sMTJfMmErdC5feDIqdC5fbDAxXzJhKS9sLGk9KGkqcy10Ll95MCp0Ll9sMTJfMmErdC5feTIqdC5fbDAxXzJhKS9sfWlmKHQuX2wyM19hPnUpe3ZhciBjPTIqdC5fbDIzXzJhKzMqdC5fbDIzX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGg9Myp0Ll9sMjNfYSoodC5fbDIzX2ErdC5fbDEyX2EpO2E9KGEqYyt0Ll94MSp0Ll9sMjNfMmEtZSp0Ll9sMTJfMmEpL2gsbz0obypjK3QuX3kxKnQuX2wyM18yYS1yKnQuX2wxMl8yYSkvaH10Ll9jb250ZXh0LmJlemllckN1cnZlVG8obixpLGEsbyx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gd3QodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX13dC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mil9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItdCxuPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Ol90KHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIGt0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZT9uZXcgd3QodCxlKTpuZXcgZ3QodCwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KC41KTtmdW5jdGlvbiBBdCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfUF0LnByb3RvdHlwZT17YXJlYVN0YXJ0OnN0LGFyZWFFbmQ6c3QsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLXQsbj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6X3QodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgVHQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlP25ldyBBdCh0LGUpOm5ldyBtdCh0LDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oLjUpO2Z1bmN0aW9uIE10KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9TXQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi10LG49dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Ol90KHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIFN0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZT9uZXcgTXQodCxlKTpuZXcgeHQodCwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KC41KTtmdW5jdGlvbiBFdCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gQ3QodCl7cmV0dXJuIHQ8MD8tMToxfWZ1bmN0aW9uIEx0KHQsZSxyKXt2YXIgbj10Ll94MS10Ll94MCxpPWUtdC5feDEsYT0odC5feTEtdC5feTApLyhufHxpPDAmJi0wKSxvPShyLXQuX3kxKS8oaXx8bjwwJiYtMCkscz0oYSppK28qbikvKG4raSk7cmV0dXJuKEN0KGEpK0N0KG8pKSpNYXRoLm1pbihNYXRoLmFicyhhKSxNYXRoLmFicyhvKSwuNSpNYXRoLmFicyhzKSl8fDB9ZnVuY3Rpb24genQodCxlKXt2YXIgcj10Ll94MS10Ll94MDtyZXR1cm4gcj8oMyoodC5feTEtdC5feTApL3ItZSkvMjplfWZ1bmN0aW9uIE90KHQsZSxyKXt2YXIgbj10Ll94MCxpPXQuX3kwLGE9dC5feDEsbz10Ll95MSxzPShhLW4pLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4rcyxpK3MqZSxhLXMsby1zKnIsYSxvKX1mdW5jdGlvbiBJdCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gRHQodCl7dGhpcy5fY29udGV4dD1uZXcgUHQodCl9ZnVuY3Rpb24gUHQodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIFJ0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBGdCh0KXt2YXIgZSxyLG49dC5sZW5ndGgtMSxpPW5ldyBBcnJheShuKSxhPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKTtmb3IoaVswXT0wLGFbMF09MixvWzBdPXRbMF0rMip0WzFdLGU9MTtlPG4tMTsrK2UpaVtlXT0xLGFbZV09NCxvW2VdPTQqdFtlXSsyKnRbZSsxXTtmb3IoaVtuLTFdPTIsYVtuLTFdPTcsb1tuLTFdPTgqdFtuLTFdK3Rbbl0sZT0xO2U8bjsrK2Upcj1pW2VdL2FbZS0xXSxhW2VdLT1yLG9bZV0tPXIqb1tlLTFdO2ZvcihpW24tMV09b1tuLTFdL2Fbbi0xXSxlPW4tMjtlPj0wOy0tZSlpW2VdPShvW2VdLWlbZSsxXSkvYVtlXTtmb3IoYVtuLTFdPSh0W25dK2lbbi0xXSkvMixlPTA7ZTxuLTE7KytlKWFbZV09Mip0W2UrMV0taVtlKzFdO3JldHVybltpLGFdfWZ1bmN0aW9uIEJ0KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX3Q9ZX1mdW5jdGlvbiBOdCh0LGUpe2lmKChpPXQubGVuZ3RoKT4xKWZvcih2YXIgcixuLGksYT0xLG89dFtlWzBdXSxzPW8ubGVuZ3RoO2E8aTsrK2EpZm9yKG49byxvPXRbZVthXV0scj0wO3I8czsrK3Ipb1tyXVsxXSs9b1tyXVswXT1pc05hTihuW3JdWzFdKT9uW3JdWzBdOm5bcl1bMV19ZnVuY3Rpb24ganQodCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpOy0tZT49MDspcltlXT1lO3JldHVybiByfWZ1bmN0aW9uIFZ0KHQsZSl7cmV0dXJuIHRbZV19ZnVuY3Rpb24gVXQodCl7dmFyIGU9dC5tYXAocXQpO3JldHVybiBqdCh0KS5zb3J0KGZ1bmN0aW9uKHQscil7cmV0dXJuIGVbdF0tZVtyXX0pfWZ1bmN0aW9uIHF0KHQpe2Zvcih2YXIgZSxyPS0xLG49MCxpPXQubGVuZ3RoLGE9LTEvMDsrK3I8aTspKGU9K3Rbcl1bMV0pPmEmJihhPWUsbj1yKTtyZXR1cm4gbn1mdW5jdGlvbiBIdCh0KXt2YXIgZT10Lm1hcChHdCk7cmV0dXJuIGp0KHQpLnNvcnQoZnVuY3Rpb24odCxyKXtyZXR1cm4gZVt0XS1lW3JdfSl9ZnVuY3Rpb24gR3QodCl7Zm9yKHZhciBlLHI9MCxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KShlPSt0W25dWzFdKSYmKHIrPWUpO3JldHVybiByfUV0LnByb3RvdHlwZT17YXJlYVN0YXJ0OnN0LGFyZWFFbmQ6c3QsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3Q9K3QsZT0rZSx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSkpfX0sSXQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOk90KHRoaXMsdGhpcy5fdDAsenQodGhpcyx0aGlzLl90MCkpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgcj1OYU47aWYoZT0rZSwodD0rdCkhPT10aGlzLl94MXx8ZSE9PXRoaXMuX3kxKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLE90KHRoaXMsenQodGhpcyxyPUx0KHRoaXMsdCxlKSkscik7YnJlYWs7ZGVmYXVsdDpPdCh0aGlzLHRoaXMuX3QwLHI9THQodGhpcyx0LGUpKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWUsdGhpcy5fdDA9cn19fSwoRHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSXQucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24odCxlKXtJdC5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLGUsdCl9LFB0LnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUsdCxuLHIsYSxpKX19LFJ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LHI9dC5sZW5ndGg7aWYocilpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRbMF0sZVswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odFswXSxlWzBdKSwyPT09cil0aGlzLl9jb250ZXh0LmxpbmVUbyh0WzFdLGVbMV0pO2Vsc2UgZm9yKHZhciBuPUZ0KHQpLGk9RnQoZSksYT0wLG89MTtvPHI7KythLCsrbyl0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oblswXVthXSxpWzBdW2FdLG5bMV1bYV0saVsxXVthXSx0W29dLGVbb10pOyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXIpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lLHRoaXMuX3g9dGhpcy5feT1udWxsfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX19LEJ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiYyPT09dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDppZih0aGlzLl90PD0wKXRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsZSksdGhpcy5fY29udGV4dC5saW5lVG8odCxlKTtlbHNle3ZhciByPXRoaXMuX3gqKDEtdGhpcy5fdCkrdCp0aGlzLl90O3RoaXMuX2NvbnRleHQubGluZVRvKHIsdGhpcy5feSksdGhpcy5fY29udGV4dC5saW5lVG8ocixlKX19dGhpcy5feD10LHRoaXMuX3k9ZX19LHQuYXJjPWZ1bmN0aW9uKCl7dmFyIHQ9ZyxvPXYsXz1yKDApLHc9bnVsbCxrPW0sQT15LFQ9eCxNPW51bGw7ZnVuY3Rpb24gUygpe3ZhciByLGcsdixtPSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx5PStvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx4PWsuYXBwbHkodGhpcyxhcmd1bWVudHMpLWYsUz1BLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1mLEU9bihTLXgpLEM9Uz54O2lmKE18fChNPXI9ZS5wYXRoKCkpLHk8bSYmKGc9eSx5PW0sbT1nKSx5PnUpaWYoRT5wLXUpTS5tb3ZlVG8oeSphKHgpLHkqbCh4KSksTS5hcmMoMCwwLHkseCxTLCFDKSxtPnUmJihNLm1vdmVUbyhtKmEoUyksbSpsKFMpKSxNLmFyYygwLDAsbSxTLHgsQykpO2Vsc2V7dmFyIEwseixPPXgsST1TLEQ9eCxQPVMsUj1FLEY9RSxCPVQuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsTj1CPnUmJih3Pyt3LmFwcGx5KHRoaXMsYXJndW1lbnRzKTpjKG0qbSt5KnkpKSxqPXMobih5LW0pLzIsK18uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxWPWosVT1qO2lmKE4+dSl7dmFyIHE9ZChOL20qbChCKSksSD1kKE4veSpsKEIpKTsoUi09MipxKT51PyhEKz1xKj1DPzE6LTEsUC09cSk6KFI9MCxEPVA9KHgrUykvMiksKEYtPTIqSCk+dT8oTys9SCo9Qz8xOi0xLEktPUgpOihGPTAsTz1JPSh4K1MpLzIpfXZhciBHPXkqYShPKSxZPXkqbChPKSxXPW0qYShQKSxYPW0qbChQKTtpZihqPnUpe3ZhciBaLCQ9eSphKEkpLEo9eSpsKEkpLEs9bSphKEQpLFE9bSpsKEQpO2lmKEU8aCYmKFo9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt2YXIgbD1yLXQsYz1uLWUsaD1vLWksZj1zLWEscD1mKmwtaCpjO2lmKCEocCpwPHUpKXJldHVyblt0KyhwPShoKihlLWEpLWYqKHQtaSkpL3ApKmwsZStwKmNdfShHLFksSyxRLCQsSixXLFgpKSl7dmFyIHR0PUctWlswXSxldD1ZLVpbMV0scnQ9JC1aWzBdLG50PUotWlsxXSxpdD0xL2woKCh2PSh0dCpydCtldCpudCkvKGModHQqdHQrZXQqZXQpKmMocnQqcnQrbnQqbnQpKSk+MT8wOnY8LTE/aDpNYXRoLmFjb3ModikpLzIpLGF0PWMoWlswXSpaWzBdK1pbMV0qWlsxXSk7Vj1zKGosKG0tYXQpLyhpdC0xKSksVT1zKGosKHktYXQpLyhpdCsxKSl9fUY+dT9VPnU/KEw9YihLLFEsRyxZLHksVSxDKSx6PWIoJCxKLFcsWCx5LFUsQyksTS5tb3ZlVG8oTC5jeCtMLngwMSxMLmN5K0wueTAxKSxVPGo/TS5hcmMoTC5jeCxMLmN5LFUsaShMLnkwMSxMLngwMSksaSh6LnkwMSx6LngwMSksIUMpOihNLmFyYyhMLmN4LEwuY3ksVSxpKEwueTAxLEwueDAxKSxpKEwueTExLEwueDExKSwhQyksTS5hcmMoMCwwLHksaShMLmN5K0wueTExLEwuY3grTC54MTEpLGkoei5jeSt6LnkxMSx6LmN4K3oueDExKSwhQyksTS5hcmMoei5jeCx6LmN5LFUsaSh6LnkxMSx6LngxMSksaSh6LnkwMSx6LngwMSksIUMpKSk6KE0ubW92ZVRvKEcsWSksTS5hcmMoMCwwLHksTyxJLCFDKSk6TS5tb3ZlVG8oRyxZKSxtPnUmJlI+dT9WPnU/KEw9YihXLFgsJCxKLG0sLVYsQyksej1iKEcsWSxLLFEsbSwtVixDKSxNLmxpbmVUbyhMLmN4K0wueDAxLEwuY3krTC55MDEpLFY8aj9NLmFyYyhMLmN4LEwuY3ksVixpKEwueTAxLEwueDAxKSxpKHoueTAxLHoueDAxKSwhQyk6KE0uYXJjKEwuY3gsTC5jeSxWLGkoTC55MDEsTC54MDEpLGkoTC55MTEsTC54MTEpLCFDKSxNLmFyYygwLDAsbSxpKEwuY3krTC55MTEsTC5jeCtMLngxMSksaSh6LmN5K3oueTExLHouY3grei54MTEpLEMpLE0uYXJjKHouY3gsei5jeSxWLGkoei55MTEsei54MTEpLGkoei55MDEsei54MDEpLCFDKSkpOk0uYXJjKDAsMCxtLFAsRCxDKTpNLmxpbmVUbyhXLFgpfWVsc2UgTS5tb3ZlVG8oMCwwKTtpZihNLmNsb3NlUGF0aCgpLHIpcmV0dXJuIE09bnVsbCxyK1wiXCJ8fG51bGx9cmV0dXJuIFMuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgZT0oK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIscj0oK2suYXBwbHkodGhpcyxhcmd1bWVudHMpKyArQS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItaC8yO3JldHVyblthKHIpKmUsbChyKSplXX0sUy5pbm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6cigrZSksUyk6dH0sUy5vdXRlclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cigrdCksUyk6b30sUy5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoK3QpLFMpOl99LFMucGFkUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PW51bGw9PXQ/bnVsbDpcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cigrdCksUyk6d30sUy5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhrPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCt0KSxTKTprfSxTLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhBPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCt0KSxTKTpBfSxTLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhUPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCt0KSxTKTpUfSxTLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE09bnVsbD09dD9udWxsOnQsUyk6TX0sU30sdC5hcmVhPU0sdC5saW5lPVQsdC5waWU9ZnVuY3Rpb24oKXt2YXIgdD1FLGU9UyxuPW51bGwsaT1yKDApLGE9cihwKSxvPXIoMCk7ZnVuY3Rpb24gcyhyKXt2YXIgcyxsLGMsdSxoLGY9ci5sZW5ndGgsZD0wLGc9bmV3IEFycmF5KGYpLHY9bmV3IEFycmF5KGYpLG09K2kuYXBwbHkodGhpcyxhcmd1bWVudHMpLHk9TWF0aC5taW4ocCxNYXRoLm1heCgtcCxhLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1tKSkseD1NYXRoLm1pbihNYXRoLmFicyh5KS9mLG8uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxiPXgqKHk8MD8tMToxKTtmb3Iocz0wO3M8ZjsrK3MpKGg9dltnW3NdPXNdPSt0KHJbc10scyxyKSk+MCYmKGQrPWgpO2ZvcihudWxsIT1lP2cuc29ydChmdW5jdGlvbih0LHIpe3JldHVybiBlKHZbdF0sdltyXSl9KTpudWxsIT1uJiZnLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gbihyW3RdLHJbZV0pfSkscz0wLGM9ZD8oeS1mKmIpL2Q6MDtzPGY7KytzLG09dSlsPWdbc10sdT1tKygoaD12W2xdKT4wP2gqYzowKStiLHZbbF09e2RhdGE6cltsXSxpbmRleDpzLHZhbHVlOmgsc3RhcnRBbmdsZTptLGVuZEFuZ2xlOnUscGFkQW5nbGU6eH07cmV0dXJuIHZ9cmV0dXJuIHMudmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOnIoK2UpLHMpOnR9LHMuc29ydFZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG49bnVsbCxzKTplfSxzLnNvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlPW51bGwscyk6bn0scy5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCt0KSxzKTppfSxzLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCt0KSxzKTphfSxzLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCt0KSxzKTpvfSxzfSx0LmFyZWFSYWRpYWw9RCx0LnJhZGlhbEFyZWE9RCx0LmxpbmVSYWRpYWw9SSx0LnJhZGlhbExpbmU9SSx0LnBvaW50UmFkaWFsPVAsdC5saW5rSG9yaXpvbnRhbD1mdW5jdGlvbigpe3JldHVybiBOKGopfSx0LmxpbmtWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiBOKFYpfSx0LmxpbmtSYWRpYWw9ZnVuY3Rpb24oKXt2YXIgdD1OKFUpO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHR9LHQuc3ltYm9sPWZ1bmN0aW9uKCl7dmFyIHQ9cihxKSxuPXIoNjQpLGk9bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHI7aWYoaXx8KGk9cj1lLnBhdGgoKSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cykuZHJhdyhpLCtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkscilyZXR1cm4gaT1udWxsLHIrXCJcInx8bnVsbH1yZXR1cm4gYS50eXBlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTpyKGUpLGEpOnR9LGEuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6cigrdCksYSk6bn0sYS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/bnVsbDp0LGEpOml9LGF9LHQuc3ltYm9scz1vdCx0LnN5bWJvbENpcmNsZT1xLHQuc3ltYm9sQ3Jvc3M9SCx0LnN5bWJvbERpYW1vbmQ9Vyx0LnN5bWJvbFNxdWFyZT1LLHQuc3ltYm9sU3Rhcj1KLHQuc3ltYm9sVHJpYW5nbGU9dHQsdC5zeW1ib2xXeWU9YXQsdC5jdXJ2ZUJhc2lzQ2xvc2VkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdXQodCl9LHQuY3VydmVCYXNpc09wZW49ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBodCh0KX0sdC5jdXJ2ZUJhc2lzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgY3QodCl9LHQuY3VydmVCdW5kbGU9cHQsdC5jdXJ2ZUNhcmRpbmFsQ2xvc2VkPXl0LHQuY3VydmVDYXJkaW5hbE9wZW49YnQsdC5jdXJ2ZUNhcmRpbmFsPXZ0LHQuY3VydmVDYXRtdWxsUm9tQ2xvc2VkPVR0LHQuY3VydmVDYXRtdWxsUm9tT3Blbj1TdCx0LmN1cnZlQ2F0bXVsbFJvbT1rdCx0LmN1cnZlTGluZWFyQ2xvc2VkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRXQodCl9LHQuY3VydmVMaW5lYXI9dyx0LmN1cnZlTW9ub3RvbmVYPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgSXQodCl9LHQuY3VydmVNb25vdG9uZVk9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBEdCh0KX0sdC5jdXJ2ZU5hdHVyYWw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBSdCh0KX0sdC5jdXJ2ZVN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBCdCh0LC41KX0sdC5jdXJ2ZVN0ZXBBZnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEJ0KHQsMSl9LHQuY3VydmVTdGVwQmVmb3JlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQnQodCwwKX0sdC5zdGFjaz1mdW5jdGlvbigpe3ZhciB0PXIoW10pLGU9anQsbj1OdCxpPVZ0O2Z1bmN0aW9uIGEocil7dmFyIGEsbyxzPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGw9ci5sZW5ndGgsYz1zLmxlbmd0aCx1PW5ldyBBcnJheShjKTtmb3IoYT0wO2E8YzsrK2Epe2Zvcih2YXIgaCxmPXNbYV0scD11W2FdPW5ldyBBcnJheShsKSxkPTA7ZDxsOysrZClwW2RdPWg9WzAsK2kocltkXSxmLGQscildLGguZGF0YT1yW2RdO3Aua2V5PWZ9Zm9yKGE9MCxvPWUodSk7YTxjOysrYSl1W29bYV1dLmluZGV4PWE7cmV0dXJuIG4odSxvKSx1fXJldHVybiBhLmtleXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOnIoUi5jYWxsKGUpKSxhKTp0fSxhLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpyKCt0KSxhKTppfSxhLm9yZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXQ/anQ6XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OnIoUi5jYWxsKHQpKSxhKTplfSxhLm9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P050OnQsYSk6bn0sYX0sdC5zdGFja09mZnNldEV4cGFuZD1mdW5jdGlvbih0LGUpe2lmKChuPXQubGVuZ3RoKT4wKXtmb3IodmFyIHIsbixpLGE9MCxvPXRbMF0ubGVuZ3RoO2E8bzsrK2Epe2ZvcihpPXI9MDtyPG47KytyKWkrPXRbcl1bYV1bMV18fDA7aWYoaSlmb3Iocj0wO3I8bjsrK3IpdFtyXVthXVsxXS89aX1OdCh0LGUpfX0sdC5zdGFja09mZnNldERpdmVyZ2luZz1mdW5jdGlvbih0LGUpe2lmKChzPXQubGVuZ3RoKT4xKWZvcih2YXIgcixuLGksYSxvLHMsbD0wLGM9dFtlWzBdXS5sZW5ndGg7bDxjOysrbClmb3IoYT1vPTAscj0wO3I8czsrK3IpKGk9KG49dFtlW3JdXVtsXSlbMV0tblswXSk+PTA/KG5bMF09YSxuWzFdPWErPWkpOmk8MD8oblsxXT1vLG5bMF09bys9aSk6blswXT1hfSx0LnN0YWNrT2Zmc2V0Tm9uZT1OdCx0LnN0YWNrT2Zmc2V0U2lsaG91ZXR0ZT1mdW5jdGlvbih0LGUpe2lmKChyPXQubGVuZ3RoKT4wKXtmb3IodmFyIHIsbj0wLGk9dFtlWzBdXSxhPWkubGVuZ3RoO248YTsrK24pe2Zvcih2YXIgbz0wLHM9MDtvPHI7KytvKXMrPXRbb11bbl1bMV18fDA7aVtuXVsxXSs9aVtuXVswXT0tcy8yfU50KHQsZSl9fSx0LnN0YWNrT2Zmc2V0V2lnZ2xlPWZ1bmN0aW9uKHQsZSl7aWYoKGk9dC5sZW5ndGgpPjAmJihuPShyPXRbZVswXV0pLmxlbmd0aCk+MCl7Zm9yKHZhciByLG4saSxhPTAsbz0xO288bjsrK28pe2Zvcih2YXIgcz0wLGw9MCxjPTA7czxpOysrcyl7Zm9yKHZhciB1PXRbZVtzXV0saD11W29dWzFdfHwwLGY9KGgtKHVbby0xXVsxXXx8MCkpLzIscD0wO3A8czsrK3Ape3ZhciBkPXRbZVtwXV07Zis9KGRbb11bMV18fDApLShkW28tMV1bMV18fDApfWwrPWgsYys9ZipofXJbby0xXVsxXSs9cltvLTFdWzBdPWEsbCYmKGEtPWMvbCl9cltvLTFdWzFdKz1yW28tMV1bMF09YSxOdCh0LGUpfX0sdC5zdGFja09yZGVyQXBwZWFyYW5jZT1VdCx0LnN0YWNrT3JkZXJBc2NlbmRpbmc9SHQsdC5zdGFja09yZGVyRGVzY2VuZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gSHQodCkucmV2ZXJzZSgpfSx0LnN0YWNrT3JkZXJJbnNpZGVPdXQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPXQubGVuZ3RoLGk9dC5tYXAoR3QpLGE9VXQodCksbz0wLHM9MCxsPVtdLGM9W107Zm9yKGU9MDtlPG47KytlKXI9YVtlXSxvPHM/KG8rPWlbcl0sbC5wdXNoKHIpKToocys9aVtyXSxjLnB1c2gocikpO3JldHVybiBjLnJldmVyc2UoKS5jb25jYXQobCl9LHQuc3RhY2tPcmRlck5vbmU9anQsdC5zdGFja09yZGVyUmV2ZXJzZT1mdW5jdGlvbih0KXtyZXR1cm4ganQodCkucmV2ZXJzZSgpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sXCJvYmplY3RcIj09dHlwZW9mIHImJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBlP2kocix0KFwiZDMtcGF0aFwiKSk6aShuLmQzPW4uZDN8fHt9LG4uZDMpfSx7XCJkMy1wYXRoXCI6MTUwfV0sMTU0OltmdW5jdGlvbih0LGUscil7dmFyIG47bj10aGlzLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO3ZhciBlLHIsbj0wLGk9MCxhPTAsbz0xZTMscz0wLGw9MCxjPTAsdT1cIm9iamVjdFwiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLGg9XCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBmKCl7cmV0dXJuIGx8fChoKHApLGw9dS5ub3coKStjKX1mdW5jdGlvbiBwKCl7bD0wfWZ1bmN0aW9uIGQoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIGcodCxlLHIpe3ZhciBuPW5ldyBkO3JldHVybiBuLnJlc3RhcnQodCxlLHIpLG59ZnVuY3Rpb24gdigpe2YoKSwrK247Zm9yKHZhciB0LHI9ZTtyOykodD1sLXIuX3RpbWUpPj0wJiZyLl9jYWxsLmNhbGwobnVsbCx0KSxyPXIuX25leHQ7LS1ufWZ1bmN0aW9uIG0oKXtsPShzPXUubm93KCkpK2Msbj1pPTA7dHJ5e3YoKX1maW5hbGx5e249MCxmdW5jdGlvbigpe3ZhciB0LG4saT1lLGE9MS8wO2Zvcig7aTspaS5fY2FsbD8oYT5pLl90aW1lJiYoYT1pLl90aW1lKSx0PWksaT1pLl9uZXh0KToobj1pLl9uZXh0LGkuX25leHQ9bnVsbCxpPXQ/dC5fbmV4dD1uOmU9bik7cj10LHgoYSl9KCksbD0wfX1mdW5jdGlvbiB5KCl7dmFyIHQ9dS5ub3coKSxlPXQtcztlPm8mJihjLT1lLHM9dCl9ZnVuY3Rpb24geCh0KXtufHwoaSYmKGk9Y2xlYXJUaW1lb3V0KGkpKSx0LWw+MjQ/KHQ8MS8wJiYoaT1zZXRUaW1lb3V0KG0sdC11Lm5vdygpLWMpKSxhJiYoYT1jbGVhckludGVydmFsKGEpKSk6KGF8fChzPXUubm93KCksYT1zZXRJbnRlcnZhbCh5LG8pKSxuPTEsaChtKSkpfWQucHJvdG90eXBlPWcucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpkLHJlc3RhcnQ6ZnVuY3Rpb24odCxuLGkpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO2k9KG51bGw9PWk/ZigpOitpKSsobnVsbD09bj8wOituKSx0aGlzLl9uZXh0fHxyPT09dGhpc3x8KHI/ci5fbmV4dD10aGlzOmU9dGhpcyxyPXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPWkseCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCx4KCkpfX07dC5ub3c9Zix0LnRpbWVyPWcsdC50aW1lckZsdXNoPXYsdC50aW1lb3V0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1uZXcgZDtyZXR1cm4gZT1udWxsPT1lPzA6K2Usbi5yZXN0YXJ0KGZ1bmN0aW9uKHIpe24uc3RvcCgpLHQocitlKX0sZSxyKSxufSx0LmludGVydmFsPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1uZXcgZCxpPWU7cmV0dXJuIG51bGw9PWU/KG4ucmVzdGFydCh0LGUsciksbik6KGU9K2Uscj1udWxsPT1yP2YoKTorcixuLnJlc3RhcnQoZnVuY3Rpb24gYShvKXtvKz1pLG4ucmVzdGFydChhLGkrPWUsciksdChvKX0sZSxyKSxuKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9KFwib2JqZWN0XCI9PXR5cGVvZiByJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZT9yOm4uZDM9bi5kM3x8e30pfSx7fV0sMTU1OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKCl7dmFyIHQ9e3ZlcnNpb246XCIzLjUuMTdcIn0scj1bXS5zbGljZSxuPWZ1bmN0aW9uKHQpe3JldHVybiByLmNhbGwodCl9LGk9dGhpcy5kb2N1bWVudDtmdW5jdGlvbiBhKHQpe3JldHVybiB0JiYodC5vd25lckRvY3VtZW50fHx0LmRvY3VtZW50fHx0KS5kb2N1bWVudEVsZW1lbnR9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdCYmKHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx0LmRvY3VtZW50JiZ0fHx0LmRlZmF1bHRWaWV3KX1pZihpKXRyeXtuKGkuZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9kZXMpWzBdLm5vZGVUeXBlfWNhdGNoKHQpe249ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpO2UtLTspcltlXT10W2VdO3JldHVybiByfX1pZihEYXRlLm5vd3x8KERhdGUubm93PWZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfSksaSl0cnl7aS5jcmVhdGVFbGVtZW50KFwiRElWXCIpLnN0eWxlLnNldFByb3BlcnR5KFwib3BhY2l0eVwiLDAsXCJcIil9Y2F0Y2godCl7dmFyIHM9dGhpcy5FbGVtZW50LnByb3RvdHlwZSxsPXMuc2V0QXR0cmlidXRlLGM9cy5zZXRBdHRyaWJ1dGVOUyx1PXRoaXMuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUsaD11LnNldFByb3BlcnR5O3Muc2V0QXR0cmlidXRlPWZ1bmN0aW9uKHQsZSl7bC5jYWxsKHRoaXMsdCxlK1wiXCIpfSxzLnNldEF0dHJpYnV0ZU5TPWZ1bmN0aW9uKHQsZSxyKXtjLmNhbGwodGhpcyx0LGUscitcIlwiKX0sdS5zZXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUscil7aC5jYWxsKHRoaXMsdCxlK1wiXCIscil9fWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gcCh0KXtyZXR1cm4gbnVsbD09PXQ/TmFOOit0fWZ1bmN0aW9uIGQodCl7cmV0dXJuIWlzTmFOKHQpfWZ1bmN0aW9uIGcodCl7cmV0dXJue2xlZnQ6ZnVuY3Rpb24oZSxyLG4saSl7Zm9yKGFyZ3VtZW50cy5sZW5ndGg8MyYmKG49MCksYXJndW1lbnRzLmxlbmd0aDw0JiYoaT1lLmxlbmd0aCk7bjxpOyl7dmFyIGE9bitpPj4+MTt0KGVbYV0scik8MD9uPWErMTppPWF9cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKGUscixuLGkpe2Zvcihhcmd1bWVudHMubGVuZ3RoPDMmJihuPTApLGFyZ3VtZW50cy5sZW5ndGg8NCYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPjA/aT1hOm49YSsxfXJldHVybiBufX19dC5hc2NlbmRpbmc9Zix0LmRlc2NlbmRpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59LHQubWluPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPS0xLGE9dC5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KytpPGE7KWlmKG51bGwhPShuPXRbaV0pJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2k8YTspbnVsbCE9KG49dFtpXSkmJnI+biYmKHI9bil9ZWxzZXtmb3IoOysraTxhOylpZihudWxsIT0obj1lLmNhbGwodCx0W2ldLGkpKSYmbj49bil7cj1uO2JyZWFrfWZvcig7KytpPGE7KW51bGwhPShuPWUuY2FsbCh0LHRbaV0saSkpJiZyPm4mJihyPW4pfXJldHVybiByfSx0Lm1heD1mdW5jdGlvbih0LGUpe3ZhciByLG4saT0tMSxhPXQubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtmb3IoOysraTxhOylpZihudWxsIT0obj10W2ldKSYmbj49bil7cj1uO2JyZWFrfWZvcig7KytpPGE7KW51bGwhPShuPXRbaV0pJiZuPnImJihyPW4pfWVsc2V7Zm9yKDsrK2k8YTspaWYobnVsbCE9KG49ZS5jYWxsKHQsdFtpXSxpKSkmJm4+PW4pe3I9bjticmVha31mb3IoOysraTxhOyludWxsIT0obj1lLmNhbGwodCx0W2ldLGkpKSYmbj5yJiYocj1uKX1yZXR1cm4gcn0sdC5leHRlbnQ9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT0tMSxvPXQubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtmb3IoOysrYTxvOylpZihudWxsIT0obj10W2FdKSYmbj49bil7cj1pPW47YnJlYWt9Zm9yKDsrK2E8bzspbnVsbCE9KG49dFthXSkmJihyPm4mJihyPW4pLGk8biYmKGk9bikpfWVsc2V7Zm9yKDsrK2E8bzspaWYobnVsbCE9KG49ZS5jYWxsKHQsdFthXSxhKSkmJm4+PW4pe3I9aT1uO2JyZWFrfWZvcig7KythPG87KW51bGwhPShuPWUuY2FsbCh0LHRbYV0sYSkpJiYocj5uJiYocj1uKSxpPG4mJihpPW4pKX1yZXR1cm5bcixpXX0sdC5zdW09ZnVuY3Rpb24odCxlKXt2YXIgcixuPTAsaT10Lmxlbmd0aCxhPS0xO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KythPGk7KWQocj0rdFthXSkmJihuKz1yKTtlbHNlIGZvcig7KythPGk7KWQocj0rZS5jYWxsKHQsdFthXSxhKSkmJihuKz1yKTtyZXR1cm4gbn0sdC5tZWFuPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj0wLGk9dC5sZW5ndGgsYT0tMSxvPWk7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2E8aTspZChyPXAodFthXSkpP24rPXI6LS1vO2Vsc2UgZm9yKDsrK2E8aTspZChyPXAoZS5jYWxsKHQsdFthXSxhKSkpP24rPXI6LS1vO2lmKG8pcmV0dXJuIG4vb30sdC5xdWFudGlsZT1mdW5jdGlvbih0LGUpe3ZhciByPSh0Lmxlbmd0aC0xKSplKzEsbj1NYXRoLmZsb29yKHIpLGk9K3Rbbi0xXSxhPXItbjtyZXR1cm4gYT9pK2EqKHRbbl0taSk6aX0sdC5tZWRpYW49ZnVuY3Rpb24oZSxyKXt2YXIgbixpPVtdLGE9ZS5sZW5ndGgsbz0tMTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrbzxhOylkKG49cChlW29dKSkmJmkucHVzaChuKTtlbHNlIGZvcig7KytvPGE7KWQobj1wKHIuY2FsbChlLGVbb10sbykpKSYmaS5wdXNoKG4pO2lmKGkubGVuZ3RoKXJldHVybiB0LnF1YW50aWxlKGkuc29ydChmKSwuNSl9LHQudmFyaWFuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dC5sZW5ndGgsYT0wLG89MCxzPS0xLGw9MDtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrczxpOylkKHI9cCh0W3NdKSkmJihvKz0obj1yLWEpKihyLShhKz1uLysrbCkpKTtlbHNlIGZvcig7KytzPGk7KWQocj1wKGUuY2FsbCh0LHRbc10scykpKSYmKG8rPShuPXItYSkqKHItKGErPW4vKytsKSkpO2lmKGw+MSlyZXR1cm4gby8obC0xKX0sdC5kZXZpYXRpb249ZnVuY3Rpb24oKXt2YXIgZT10LnZhcmlhbmNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZT9NYXRoLnNxcnQoZSk6ZX07dmFyIHY9ZyhmKTtmdW5jdGlvbiBtKHQpe3JldHVybiB0Lmxlbmd0aH10LmJpc2VjdExlZnQ9di5sZWZ0LHQuYmlzZWN0PXQuYmlzZWN0UmlnaHQ9di5yaWdodCx0LmJpc2VjdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBnKDE9PT10Lmxlbmd0aD9mdW5jdGlvbihlLHIpe3JldHVybiBmKHQoZSkscil9OnQpfSx0LnNodWZmbGU9ZnVuY3Rpb24odCxlLHIpeyhhPWFyZ3VtZW50cy5sZW5ndGgpPDMmJihyPXQubGVuZ3RoLGE8MiYmKGU9MCkpO2Zvcih2YXIgbixpLGE9ci1lO2E7KWk9TWF0aC5yYW5kb20oKSphLS18MCxuPXRbYStlXSx0W2ErZV09dFtpK2VdLHRbaStlXT1uO3JldHVybiB0fSx0LnBlcm11dGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5sZW5ndGgsbj1uZXcgQXJyYXkocik7ci0tOyluW3JdPXRbZVtyXV07cmV0dXJuIG59LHQucGFpcnM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aC0xLG49dFswXSxpPW5ldyBBcnJheShyPDA/MDpyKTtlPHI7KWlbZV09W24sbj10WysrZV1dO3JldHVybiBpfSx0LnRyYW5zcG9zZT1mdW5jdGlvbihlKXtpZighKGE9ZS5sZW5ndGgpKXJldHVybltdO2Zvcih2YXIgcj0tMSxuPXQubWluKGUsbSksaT1uZXcgQXJyYXkobik7KytyPG47KWZvcih2YXIgYSxvPS0xLHM9aVtyXT1uZXcgQXJyYXkoYSk7KytvPGE7KXNbb109ZVtvXVtyXTtyZXR1cm4gaX0sdC56aXA9ZnVuY3Rpb24oKXtyZXR1cm4gdC50cmFuc3Bvc2UoYXJndW1lbnRzKX0sdC5rZXlzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaChyKTtyZXR1cm4gZX0sdC52YWx1ZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHRbcl0pO3JldHVybiBlfSx0LmVudHJpZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHtrZXk6cix2YWx1ZTp0W3JdfSk7cmV0dXJuIGV9LHQubWVyZ2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpPXQubGVuZ3RoLGE9LTEsbz0wOysrYTxpOylvKz10W2FdLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobyk7LS1pPj0wOylmb3IoZT0obj10W2ldKS5sZW5ndGg7LS1lPj0wOylyWy0tb109bltlXTtyZXR1cm4gcn07dmFyIHk9TWF0aC5hYnM7ZnVuY3Rpb24geCh0LGUpe2Zvcih2YXIgciBpbiBlKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxyLHt2YWx1ZTplW3JdLGVudW1lcmFibGU6ITF9KX1mdW5jdGlvbiBiKCl7dGhpcy5fPU9iamVjdC5jcmVhdGUobnVsbCl9dC5yYW5nZT1mdW5jdGlvbih0LGUscil7aWYoYXJndW1lbnRzLmxlbmd0aDwzJiYocj0xLGFyZ3VtZW50cy5sZW5ndGg8MiYmKGU9dCx0PTApKSwoZS10KS9yPT0xLzApdGhyb3cgbmV3IEVycm9yKFwiaW5maW5pdGUgcmFuZ2VcIik7dmFyIG4saT1bXSxhPWZ1bmN0aW9uKHQpe3ZhciBlPTE7Zm9yKDt0KmUlMTspZSo9MTA7cmV0dXJuIGV9KHkocikpLG89LTE7aWYodCo9YSxlKj1hLChyKj1hKTwwKWZvcig7KG49dCtyKisrbyk+ZTspaS5wdXNoKG4vYSk7ZWxzZSBmb3IoOyhuPXQrciorK28pPGU7KWkucHVzaChuL2EpO3JldHVybiBpfSx0Lm1hcD1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBiO2lmKHQgaW5zdGFuY2VvZiBiKXQuZm9yRWFjaChmdW5jdGlvbih0LGUpe3Iuc2V0KHQsZSl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBuLGk9LTEsYT10Lmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysraTxhOylyLnNldChpLHRbaV0pO2Vsc2UgZm9yKDsrK2k8YTspci5zZXQoZS5jYWxsKHQsbj10W2ldLGkpLG4pfWVsc2UgZm9yKHZhciBvIGluIHQpci5zZXQobyx0W29dKTtyZXR1cm4gcn07dmFyIF89XCJfX3Byb3RvX19cIix3PVwiXFwwXCI7ZnVuY3Rpb24gayh0KXtyZXR1cm4odCs9XCJcIik9PT1ffHx0WzBdPT09dz93K3Q6dH1mdW5jdGlvbiBBKHQpe3JldHVybih0Kz1cIlwiKVswXT09PXc/dC5zbGljZSgxKTp0fWZ1bmN0aW9uIFQodCl7cmV0dXJuIGsodClpbiB0aGlzLl99ZnVuY3Rpb24gTSh0KXtyZXR1cm4odD1rKHQpKWluIHRoaXMuXyYmZGVsZXRlIHRoaXMuX1t0XX1mdW5jdGlvbiBTKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuXyl0LnB1c2goQShlKSk7cmV0dXJuIHR9ZnVuY3Rpb24gRSgpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMuXykrK3Q7cmV0dXJuIHR9ZnVuY3Rpb24gQygpe2Zvcih2YXIgdCBpbiB0aGlzLl8pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gTCgpe3RoaXMuXz1PYmplY3QuY3JlYXRlKG51bGwpfWZ1bmN0aW9uIHoodCl7cmV0dXJuIHR9ZnVuY3Rpb24gTyh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ci5hcHBseShlLGFyZ3VtZW50cyk7cmV0dXJuIG49PT1lP3Q6bn19ZnVuY3Rpb24gSSh0LGUpe2lmKGUgaW4gdClyZXR1cm4gZTtlPWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKTtmb3IodmFyIHI9MCxuPUQubGVuZ3RoO3I8bjsrK3Ipe3ZhciBpPURbcl0rZTtpZihpIGluIHQpcmV0dXJuIGl9fXgoYix7aGFzOlQsZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9bayh0KV19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9bayh0KV09ZX0scmVtb3ZlOk0sa2V5czpTLHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl8pdC5wdXNoKHRoaXMuX1tlXSk7cmV0dXJuIHR9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcy5fKXQucHVzaCh7a2V5OkEoZSksdmFsdWU6dGhpcy5fW2VdfSk7cmV0dXJuIHR9LHNpemU6RSxlbXB0eTpDLGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuXyl0LmNhbGwodGhpcyxBKGUpLHRoaXMuX1tlXSl9fSksdC5uZXN0PWZ1bmN0aW9uKCl7dmFyIGUscixuPXt9LGk9W10sYT1bXTtmdW5jdGlvbiBvKHQsYSxzKXtpZihzPj1pLmxlbmd0aClyZXR1cm4gcj9yLmNhbGwobixhKTplP2Euc29ydChlKTphO2Zvcih2YXIgbCxjLHUsaCxmPS0xLHA9YS5sZW5ndGgsZD1pW3MrK10sZz1uZXcgYjsrK2Y8cDspKGg9Zy5nZXQobD1kKGM9YVtmXSkpKT9oLnB1c2goYyk6Zy5zZXQobCxbY10pO3JldHVybiB0PyhjPXQoKSx1PWZ1bmN0aW9uKGUscil7Yy5zZXQoZSxvKHQscixzKSl9KTooYz17fSx1PWZ1bmN0aW9uKGUscil7Y1tlXT1vKHQscixzKX0pLGcuZm9yRWFjaCh1KSxjfXJldHVybiBuLm1hcD1mdW5jdGlvbih0LGUpe3JldHVybiBvKGUsdCwwKX0sbi5lbnRyaWVzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbiB0KGUscil7aWYocj49aS5sZW5ndGgpcmV0dXJuIGU7dmFyIG49W10sbz1hW3IrK107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlLGkpe24ucHVzaCh7a2V5OmUsdmFsdWVzOnQoaSxyKX0pfSksbz9uLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gbyh0LmtleSxlLmtleSl9KTpufShvKHQubWFwLGUsMCksMCl9LG4ua2V5PWZ1bmN0aW9uKHQpe3JldHVybiBpLnB1c2godCksbn0sbi5zb3J0S2V5cz1mdW5jdGlvbih0KXtyZXR1cm4gYVtpLmxlbmd0aC0xXT10LG59LG4uc29ydFZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gZT10LG59LG4ucm9sbHVwPWZ1bmN0aW9uKHQpe3JldHVybiByPXQsbn0sbn0sdC5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEw7aWYodClmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZS5hZGQodFtyXSk7cmV0dXJuIGV9LHgoTCx7aGFzOlQsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9bayh0Kz1cIlwiKV09ITAsdH0scmVtb3ZlOk0sdmFsdWVzOlMsc2l6ZTpFLGVtcHR5OkMsZm9yRWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fKXQuY2FsbCh0aGlzLEEoZSkpfX0pLHQuYmVoYXZpb3I9e30sdC5yZWJpbmQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj0xLGk9YXJndW1lbnRzLmxlbmd0aDsrK248aTspdFtyPWFyZ3VtZW50c1tuXV09Tyh0LGUsZVtyXSk7cmV0dXJuIHR9O3ZhciBEPVtcIndlYmtpdFwiLFwibXNcIixcIm1velwiLFwiTW96XCIsXCJvXCIsXCJPXCJdO2Z1bmN0aW9uIFAoKXt9ZnVuY3Rpb24gUigpe31mdW5jdGlvbiBGKHQpe3ZhciBlPVtdLHI9bmV3IGI7ZnVuY3Rpb24gbigpe2Zvcih2YXIgcixuPWUsaT0tMSxhPW4ubGVuZ3RoOysraTxhOykocj1uW2ldLm9uKSYmci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHR9cmV0dXJuIG4ub249ZnVuY3Rpb24obixpKXt2YXIgYSxvPXIuZ2V0KG4pO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/byYmby5vbjoobyYmKG8ub249bnVsbCxlPWUuc2xpY2UoMCxhPWUuaW5kZXhPZihvKSkuY29uY2F0KGUuc2xpY2UoYSsxKSksci5yZW1vdmUobikpLGkmJmUucHVzaChyLnNldChuLHtvbjppfSkpLHQpfSxufWZ1bmN0aW9uIEIoKXt0LmV2ZW50LnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24gTigpe2Zvcih2YXIgZSxyPXQuZXZlbnQ7ZT1yLnNvdXJjZUV2ZW50OylyPWU7cmV0dXJuIHJ9ZnVuY3Rpb24gaihlKXtmb3IodmFyIHI9bmV3IFIsbj0wLGk9YXJndW1lbnRzLmxlbmd0aDsrK248aTspclthcmd1bWVudHNbbl1dPUYocik7cmV0dXJuIHIub2Y9ZnVuY3Rpb24obixpKXtyZXR1cm4gZnVuY3Rpb24oYSl7dHJ5e3ZhciBvPWEuc291cmNlRXZlbnQ9dC5ldmVudDthLnRhcmdldD1lLHQuZXZlbnQ9YSxyW2EudHlwZV0uYXBwbHkobixpKX1maW5hbGx5e3QuZXZlbnQ9b319fSxyfXQuZGlzcGF0Y2g9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9bmV3IFIsZT0tMSxyPWFyZ3VtZW50cy5sZW5ndGg7KytlPHI7KXRbYXJndW1lbnRzW2VdXT1GKHQpO3JldHVybiB0fSxSLnByb3RvdHlwZS5vbj1mdW5jdGlvbih0LGUpe3ZhciByPXQuaW5kZXhPZihcIi5cIiksbj1cIlwiO2lmKHI+PTAmJihuPXQuc2xpY2UocisxKSx0PXQuc2xpY2UoMCxyKSksdClyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP3RoaXNbdF0ub24obik6dGhpc1t0XS5vbihuLGUpO2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoKXtpZihudWxsPT1lKWZvcih0IGluIHRoaXMpdGhpcy5oYXNPd25Qcm9wZXJ0eSh0KSYmdGhpc1t0XS5vbihuLG51bGwpO3JldHVybiB0aGlzfX0sdC5ldmVudD1udWxsLHQucmVxdW90ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKFYsXCJcXFxcJCZcIil9O3ZhciBWPS9bXFxcXFxcXlxcJFxcKlxcK1xcP1xcfFxcW1xcXVxcKFxcKVxcLlxce1xcfV0vZyxVPXt9Ll9fcHJvdG9fXz9mdW5jdGlvbih0LGUpe3QuX19wcm90b19fPWV9OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdfTtmdW5jdGlvbiBxKHQpe3JldHVybiBVKHQsVyksdH12YXIgSD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnF1ZXJ5U2VsZWN0b3IodCl9LEc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5xdWVyeVNlbGVjdG9yQWxsKHQpfSxZPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5tYXRjaGVzfHx0W0kodCxcIm1hdGNoZXNTZWxlY3RvclwiKV07cmV0dXJuKFk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5jYWxsKHQsZSl9KSh0LGUpfTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBTaXp6bGUmJihIPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFNpenpsZSh0LGUpWzBdfHxudWxsfSxHPVNpenpsZSxZPVNpenpsZS5tYXRjaGVzU2VsZWN0b3IpLHQuc2VsZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHQuc2VsZWN0KGkuZG9jdW1lbnRFbGVtZW50KX07dmFyIFc9dC5zZWxlY3Rpb24ucHJvdG90eXBlPVtdO2Z1bmN0aW9uIFgodCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdD90OmZ1bmN0aW9uKCl7cmV0dXJuIEgodCx0aGlzKX19ZnVuY3Rpb24gWih0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oKXtyZXR1cm4gRyh0LHRoaXMpfX1XLnNlbGVjdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhPVtdO3Q9WCh0KTtmb3IodmFyIG89LTEscz10aGlzLmxlbmd0aDsrK288czspe2EucHVzaChlPVtdKSxlLnBhcmVudE5vZGU9KG49dGhpc1tvXSkucGFyZW50Tm9kZTtmb3IodmFyIGw9LTEsYz1uLmxlbmd0aDsrK2w8YzspKGk9bltsXSk/KGUucHVzaChyPXQuY2FsbChpLGkuX19kYXRhX18sbCxvKSksciYmXCJfX2RhdGFfX1wiaW4gaSYmKHIuX19kYXRhX189aS5fX2RhdGFfXykpOmUucHVzaChudWxsKX1yZXR1cm4gcShhKX0sVy5zZWxlY3RBbGw9ZnVuY3Rpb24odCl7dmFyIGUscixpPVtdO3Q9Wih0KTtmb3IodmFyIGE9LTEsbz10aGlzLmxlbmd0aDsrK2E8bzspZm9yKHZhciBzPXRoaXNbYV0sbD0tMSxjPXMubGVuZ3RoOysrbDxjOykocj1zW2xdKSYmKGkucHVzaChlPW4odC5jYWxsKHIsci5fX2RhdGFfXyxsLGEpKSksZS5wYXJlbnROb2RlPXIpO3JldHVybiBxKGkpfTt2YXIgJD1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixKPXtzdmc6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHhodG1sOiQseGxpbms6XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIseG1sOlwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zL1wifTtmdW5jdGlvbiBLKGUscil7cmV0dXJuIGU9dC5ucy5xdWFsaWZ5KGUpLG51bGw9PXI/ZS5sb2NhbD9mdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKX06ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShlKX06XCJmdW5jdGlvblwiPT10eXBlb2Ygcj9lLmxvY2FsP2Z1bmN0aW9uKCl7dmFyIHQ9ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09dD90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwsdCl9OmZ1bmN0aW9uKCl7dmFyIHQ9ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09dD90aGlzLnJlbW92ZUF0dHJpYnV0ZShlKTp0aGlzLnNldEF0dHJpYnV0ZShlLHQpfTplLmxvY2FsP2Z1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwscil9OmZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoZSxyKX19ZnVuY3Rpb24gUSh0KXtyZXR1cm4gdC50cmltKCkucmVwbGFjZSgvXFxzKy9nLFwiIFwiKX1mdW5jdGlvbiB0dChlKXtyZXR1cm4gbmV3IFJlZ0V4cChcIig/Ol58XFxcXHMrKVwiK3QucmVxdW90ZShlKStcIig/OlxcXFxzK3wkKVwiLFwiZ1wiKX1mdW5jdGlvbiBldCh0KXtyZXR1cm4odCtcIlwiKS50cmltKCkuc3BsaXQoL158XFxzKy8pfWZ1bmN0aW9uIHJ0KHQsZSl7dmFyIHI9KHQ9ZXQodCkubWFwKG50KSkubGVuZ3RoO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZnVuY3Rpb24oKXtmb3IodmFyIG49LTEsaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTsrK248cjspdFtuXSh0aGlzLGkpfTpmdW5jdGlvbigpe2Zvcih2YXIgbj0tMTsrK248cjspdFtuXSh0aGlzLGUpfX1mdW5jdGlvbiBudCh0KXt2YXIgZT10dCh0KTtyZXR1cm4gZnVuY3Rpb24ocixuKXtpZihpPXIuY2xhc3NMaXN0KXJldHVybiBuP2kuYWRkKHQpOmkucmVtb3ZlKHQpO3ZhciBpPXIuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIil8fFwiXCI7bj8oZS5sYXN0SW5kZXg9MCxlLnRlc3QoaSl8fHIuc2V0QXR0cmlidXRlKFwiY2xhc3NcIixRKGkrXCIgXCIrdCkpKTpyLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsUShpLnJlcGxhY2UoZSxcIiBcIikpKX19ZnVuY3Rpb24gaXQodCxlLHIpe3JldHVybiBudWxsPT1lP2Z1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX06XCJmdW5jdGlvblwiPT10eXBlb2YgZT9mdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsbixyKX06ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZSxyKX19ZnVuY3Rpb24gYXQodCxlKXtyZXR1cm4gbnVsbD09ZT9mdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2Z1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPXJ9OmZ1bmN0aW9uKCl7dGhpc1t0XT1lfX1mdW5jdGlvbiBvdChlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6KGU9dC5ucy5xdWFsaWZ5KGUpKS5sb2NhbD9mdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuc3BhY2UsZS5sb2NhbCl9OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT0kJiZ0LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT0kP3QuY3JlYXRlRWxlbWVudChlKTp0LmNyZWF0ZUVsZW1lbnROUyhyLGUpfX1mdW5jdGlvbiBzdCgpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIGx0KHQpe3JldHVybntfX2RhdGFfXzp0fX1mdW5jdGlvbiBjdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gWSh0aGlzLHQpfX1mdW5jdGlvbiB1dCh0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuO3IrKylmb3IodmFyIGksYT10W3JdLG89MCxzPWEubGVuZ3RoO288cztvKyspKGk9YVtvXSkmJmUoaSxvLHIpO3JldHVybiB0fWZ1bmN0aW9uIGh0KHQpe3JldHVybiBVKHQsZnQpLHR9dC5ucz17cHJlZml4OkoscXVhbGlmeTpmdW5jdGlvbih0KXt2YXIgZT10LmluZGV4T2YoXCI6XCIpLHI9dDtyZXR1cm4gZT49MCYmXCJ4bWxuc1wiIT09KHI9dC5zbGljZSgwLGUpKSYmKHQ9dC5zbGljZShlKzEpKSxKLmhhc093blByb3BlcnR5KHIpP3tzcGFjZTpKW3JdLGxvY2FsOnR9OnR9fSxXLmF0dHI9ZnVuY3Rpb24oZSxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4oZT10Lm5zLnF1YWxpZnkoZSkpLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShlKX1mb3IociBpbiBlKXRoaXMuZWFjaChLKHIsZVtyXSkpO3JldHVybiB0aGlzfXJldHVybiB0aGlzLmVhY2goSyhlLHIpKX0sVy5jbGFzc2VkPWZ1bmN0aW9uKHQsZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7dmFyIHI9dGhpcy5ub2RlKCksbj0odD1ldCh0KSkubGVuZ3RoLGk9LTE7aWYoZT1yLmNsYXNzTGlzdCl7Zm9yKDsrK2k8bjspaWYoIWUuY29udGFpbnModFtpXSkpcmV0dXJuITF9ZWxzZSBmb3IoZT1yLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpOysraTxuOylpZighdHQodFtpXSkudGVzdChlKSlyZXR1cm4hMTtyZXR1cm4hMH1mb3IoZSBpbiB0KXRoaXMuZWFjaChydChlLHRbZV0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKHJ0KHQsZSkpfSxXLnN0eWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoO2lmKG48Myl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpe2ZvcihyIGluIG48MiYmKGU9XCJcIiksdCl0aGlzLmVhY2goaXQocix0W3JdLGUpKTtyZXR1cm4gdGhpc31pZihuPDIpe3ZhciBpPXRoaXMubm9kZSgpO3JldHVybiBvKGkpLmdldENvbXB1dGVkU3R5bGUoaSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfXI9XCJcIn1yZXR1cm4gdGhpcy5lYWNoKGl0KHQsZSxyKSl9LFcucHJvcGVydHk9ZnVuY3Rpb24odCxlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXJldHVybiB0aGlzLm5vZGUoKVt0XTtmb3IoZSBpbiB0KXRoaXMuZWFjaChhdChlLHRbZV0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKGF0KHQsZSkpfSxXLnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/XCJcIjplfTpudWxsPT10P2Z1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1cIlwifTpmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH0pOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxXLmh0bWw9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1lP1wiXCI6ZX06bnVsbD09dD9mdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPVwiXCJ9OmZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9dH0pOnRoaXMubm9kZSgpLmlubmVySFRNTH0sVy5hcHBlbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9b3QodCksdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX0sVy5pbnNlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1vdCh0KSxlPVgoZSksdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUodC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9LFcucmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChzdCl9LFcuZGF0YT1mdW5jdGlvbih0LGUpe3ZhciByLG4saT0tMSxhPXRoaXMubGVuZ3RoO2lmKCFhcmd1bWVudHMubGVuZ3RoKXtmb3IodD1uZXcgQXJyYXkoYT0ocj10aGlzWzBdKS5sZW5ndGgpOysraTxhOykobj1yW2ldKSYmKHRbaV09bi5fX2RhdGFfXyk7cmV0dXJuIHR9ZnVuY3Rpb24gbyh0LHIpe3ZhciBuLGksYSxvPXQubGVuZ3RoLHU9ci5sZW5ndGgsaD1NYXRoLm1pbihvLHUpLGY9bmV3IEFycmF5KHUpLHA9bmV3IEFycmF5KHUpLGQ9bmV3IEFycmF5KG8pO2lmKGUpe3ZhciBnLHY9bmV3IGIsbT1uZXcgQXJyYXkobyk7Zm9yKG49LTE7KytuPG87KShpPXRbbl0pJiYodi5oYXMoZz1lLmNhbGwoaSxpLl9fZGF0YV9fLG4pKT9kW25dPWk6di5zZXQoZyxpKSxtW25dPWcpO2ZvcihuPS0xOysrbjx1OykoaT12LmdldChnPWUuY2FsbChyLGE9cltuXSxuKSkpPyEwIT09aSYmKGZbbl09aSxpLl9fZGF0YV9fPWEpOnBbbl09bHQoYSksdi5zZXQoZywhMCk7Zm9yKG49LTE7KytuPG87KW4gaW4gbSYmITAhPT12LmdldChtW25dKSYmKGRbbl09dFtuXSl9ZWxzZXtmb3Iobj0tMTsrK248aDspaT10W25dLGE9cltuXSxpPyhpLl9fZGF0YV9fPWEsZltuXT1pKTpwW25dPWx0KGEpO2Zvcig7bjx1OysrbilwW25dPWx0KHJbbl0pO2Zvcig7bjxvOysrbilkW25dPXRbbl19cC51cGRhdGU9ZixwLnBhcmVudE5vZGU9Zi5wYXJlbnROb2RlPWQucGFyZW50Tm9kZT10LnBhcmVudE5vZGUscy5wdXNoKHApLGwucHVzaChmKSxjLnB1c2goZCl9dmFyIHM9aHQoW10pLGw9cShbXSksYz1xKFtdKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KWZvcig7KytpPGE7KW8ocj10aGlzW2ldLHQuY2FsbChyLHIucGFyZW50Tm9kZS5fX2RhdGFfXyxpKSk7ZWxzZSBmb3IoOysraTxhOylvKHI9dGhpc1tpXSx0KTtyZXR1cm4gbC5lbnRlcj1mdW5jdGlvbigpe3JldHVybiBzfSxsLmV4aXQ9ZnVuY3Rpb24oKXtyZXR1cm4gY30sbH0sVy5kYXR1bT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KFwiX19kYXRhX19cIix0KTp0aGlzLnByb3BlcnR5KFwiX19kYXRhX19cIil9LFcuZmlsdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPVtdO1wiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJih0PWN0KHQpKTtmb3IodmFyIGE9MCxvPXRoaXMubGVuZ3RoO2E8bzthKyspe2kucHVzaChlPVtdKSxlLnBhcmVudE5vZGU9KHI9dGhpc1thXSkucGFyZW50Tm9kZTtmb3IodmFyIHM9MCxsPXIubGVuZ3RoO3M8bDtzKyspKG49cltzXSkmJnQuY2FsbChuLG4uX19kYXRhX18scyxhKSYmZS5wdXNoKG4pfXJldHVybiBxKGkpfSxXLm9yZGVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xLGU9dGhpcy5sZW5ndGg7Kyt0PGU7KWZvcih2YXIgcixuPXRoaXNbdF0saT1uLmxlbmd0aC0xLGE9bltpXTstLWk+PTA7KShyPW5baV0pJiYoYSYmYSE9PXIubmV4dFNpYmxpbmcmJmEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocixhKSxhPXIpO3JldHVybiB0aGlzfSxXLnNvcnQ9ZnVuY3Rpb24odCl7dD1mdW5jdGlvbih0KXthcmd1bWVudHMubGVuZ3RofHwodD1mKTtyZXR1cm4gZnVuY3Rpb24oZSxyKXtyZXR1cm4gZSYmcj90KGUuX19kYXRhX18sci5fX2RhdGFfXyk6IWUtIXJ9fS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7Zm9yKHZhciBlPS0xLHI9dGhpcy5sZW5ndGg7KytlPHI7KXRoaXNbZV0uc29ydCh0KTtyZXR1cm4gdGhpcy5vcmRlcigpfSxXLmVhY2g9ZnVuY3Rpb24odCl7cmV0dXJuIHV0KHRoaXMsZnVuY3Rpb24oZSxyLG4pe3QuY2FsbChlLGUuX19kYXRhX18scixuKX0pfSxXLmNhbGw9ZnVuY3Rpb24odCl7dmFyIGU9bihhcmd1bWVudHMpO3JldHVybiB0LmFwcGx5KGVbMF09dGhpcyxlKSx0aGlzfSxXLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxXLm5vZGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPXRoaXMubGVuZ3RoO3Q8ZTt0KyspZm9yKHZhciByPXRoaXNbdF0sbj0wLGk9ci5sZW5ndGg7bjxpO24rKyl7dmFyIGE9cltuXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfSxXLnNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiB1dCh0aGlzLGZ1bmN0aW9uKCl7Kyt0fSksdH07dmFyIGZ0PVtdO2Z1bmN0aW9uIHB0KGUscixpKXt2YXIgYT1cIl9fb25cIitlLG89ZS5pbmRleE9mKFwiLlwiKSxzPWd0O28+MCYmKGU9ZS5zbGljZSgwLG8pKTt2YXIgbD1kdC5nZXQoZSk7ZnVuY3Rpb24gYygpe3ZhciB0PXRoaXNbYV07dCYmKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHQsdC4kKSxkZWxldGUgdGhpc1thXSl9cmV0dXJuIGwmJihlPWwscz12dCksbz9yP2Z1bmN0aW9uKCl7dmFyIHQ9cyhyLG4oYXJndW1lbnRzKSk7Yy5jYWxsKHRoaXMpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLHRoaXNbYV09dCx0LiQ9aSksdC5fPXJ9OmM6cj9QOmZ1bmN0aW9uKCl7dmFyIHIsbj1uZXcgUmVnRXhwKFwiXl9fb24oW14uXSspXCIrdC5yZXF1b3RlKGUpK1wiJFwiKTtmb3IodmFyIGkgaW4gdGhpcylpZihyPWkubWF0Y2gobikpe3ZhciBhPXRoaXNbaV07dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHJbMV0sYSxhLiQpLGRlbGV0ZSB0aGlzW2ldfX19dC5zZWxlY3Rpb24uZW50ZXI9aHQsdC5zZWxlY3Rpb24uZW50ZXIucHJvdG90eXBlPWZ0LGZ0LmFwcGVuZD1XLmFwcGVuZCxmdC5lbXB0eT1XLmVtcHR5LGZ0Lm5vZGU9Vy5ub2RlLGZ0LmNhbGw9Vy5jYWxsLGZ0LnNpemU9Vy5zaXplLGZ0LnNlbGVjdD1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksYSxvPVtdLHM9LTEsbD10aGlzLmxlbmd0aDsrK3M8bDspe249KGk9dGhpc1tzXSkudXBkYXRlLG8ucHVzaChlPVtdKSxlLnBhcmVudE5vZGU9aS5wYXJlbnROb2RlO2Zvcih2YXIgYz0tMSx1PWkubGVuZ3RoOysrYzx1OykoYT1pW2NdKT8oZS5wdXNoKG5bY109cj10LmNhbGwoaS5wYXJlbnROb2RlLGEuX19kYXRhX18sYyxzKSksci5fX2RhdGFfXz1hLl9fZGF0YV9fKTplLnB1c2gobnVsbCl9cmV0dXJuIHEobyl9LGZ0Lmluc2VydD1mdW5jdGlvbih0LGUpe3ZhciByLG4saTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYocj10aGlzLGU9ZnVuY3Rpb24odCxlLGEpe3ZhciBvLHM9clthXS51cGRhdGUsbD1zLmxlbmd0aDtmb3IoYSE9aSYmKGk9YSxuPTApLGU+PW4mJihuPWUrMSk7IShvPXNbbl0pJiYrK248bDspO3JldHVybiBvfSksVy5pbnNlcnQuY2FsbCh0aGlzLHQsZSl9LHQuc2VsZWN0PWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0PyhlPVtIKHQsaSldKS5wYXJlbnROb2RlPWkuZG9jdW1lbnRFbGVtZW50OihlPVt0XSkucGFyZW50Tm9kZT1hKHQpLHEoW2VdKX0sdC5zZWxlY3RBbGw9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQ/KGU9bihHKHQsaSkpKS5wYXJlbnROb2RlPWkuZG9jdW1lbnRFbGVtZW50OihlPW4odCkpLnBhcmVudE5vZGU9bnVsbCxxKFtlXSl9LFcub249ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7aWYobjwzKXtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl7Zm9yKHIgaW4gbjwyJiYoZT0hMSksdCl0aGlzLmVhY2gocHQocix0W3JdLGUpKTtyZXR1cm4gdGhpc31pZihuPDIpcmV0dXJuKG49dGhpcy5ub2RlKClbXCJfX29uXCIrdF0pJiZuLl87cj0hMX1yZXR1cm4gdGhpcy5lYWNoKHB0KHQsZSxyKSl9O3ZhciBkdD10Lm1hcCh7bW91c2VlbnRlcjpcIm1vdXNlb3ZlclwiLG1vdXNlbGVhdmU6XCJtb3VzZW91dFwifSk7ZnVuY3Rpb24gZ3QoZSxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9dC5ldmVudDt0LmV2ZW50PW4sclswXT10aGlzLl9fZGF0YV9fO3RyeXtlLmFwcGx5KHRoaXMscil9ZmluYWxseXt0LmV2ZW50PWl9fX1mdW5jdGlvbiB2dCh0LGUpe3ZhciByPWd0KHQsZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQucmVsYXRlZFRhcmdldDtlJiYoZT09PXRoaXN8fDgmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSl8fHIuY2FsbCh0aGlzLHQpfX1pJiZkdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe1wib25cIit0IGluIGkmJmR0LnJlbW92ZSh0KX0pO3ZhciBtdCx5dD0wO2Z1bmN0aW9uIHh0KGUpe3ZhciByPVwiLmRyYWdzdXBwcmVzcy1cIisgKyt5dCxuPVwiY2xpY2tcIityLGk9dC5zZWxlY3QobyhlKSkub24oXCJ0b3VjaG1vdmVcIityLEIpLm9uKFwiZHJhZ3N0YXJ0XCIrcixCKS5vbihcInNlbGVjdHN0YXJ0XCIrcixCKTtpZihudWxsPT1tdCYmKG10PSEoXCJvbnNlbGVjdHN0YXJ0XCJpbiBlKSYmSShlLnN0eWxlLFwidXNlclNlbGVjdFwiKSksbXQpe3ZhciBzPWEoZSkuc3R5bGUsbD1zW210XTtzW210XT1cIm5vbmVcIn1yZXR1cm4gZnVuY3Rpb24odCl7aWYoaS5vbihyLG51bGwpLG10JiYoc1ttdF09bCksdCl7dmFyIGU9ZnVuY3Rpb24oKXtpLm9uKG4sbnVsbCl9O2kub24obixmdW5jdGlvbigpe0IoKSxlKCl9LCEwKSxzZXRUaW1lb3V0KGUsMCl9fX10Lm1vdXNlPWZ1bmN0aW9uKHQpe3JldHVybiBfdCh0LE4oKSl9O3ZhciBidD10aGlzLm5hdmlnYXRvciYmL1dlYktpdC8udGVzdCh0aGlzLm5hdmlnYXRvci51c2VyQWdlbnQpPy0xOjA7ZnVuY3Rpb24gX3QoZSxyKXtyLmNoYW5nZWRUb3VjaGVzJiYocj1yLmNoYW5nZWRUb3VjaGVzWzBdKTt2YXIgbj1lLm93bmVyU1ZHRWxlbWVudHx8ZTtpZihuLmNyZWF0ZVNWR1BvaW50KXt2YXIgaT1uLmNyZWF0ZVNWR1BvaW50KCk7aWYoYnQ8MCl7dmFyIGE9byhlKTtpZihhLnNjcm9sbFh8fGEuc2Nyb2xsWSl7dmFyIHM9KG49dC5zZWxlY3QoXCJib2R5XCIpLmFwcGVuZChcInN2Z1wiKS5zdHlsZSh7cG9zaXRpb246XCJhYnNvbHV0ZVwiLHRvcDowLGxlZnQ6MCxtYXJnaW46MCxwYWRkaW5nOjAsYm9yZGVyOlwibm9uZVwifSxcImltcG9ydGFudFwiKSlbMF1bMF0uZ2V0U2NyZWVuQ1RNKCk7YnQ9IShzLmZ8fHMuZSksbi5yZW1vdmUoKX19cmV0dXJuIGJ0PyhpLng9ci5wYWdlWCxpLnk9ci5wYWdlWSk6KGkueD1yLmNsaWVudFgsaS55PXIuY2xpZW50WSksWyhpPWkubWF0cml4VHJhbnNmb3JtKGUuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSkueCxpLnldfXZhciBsPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3IuY2xpZW50WC1sLmxlZnQtZS5jbGllbnRMZWZ0LHIuY2xpZW50WS1sLnRvcC1lLmNsaWVudFRvcF19ZnVuY3Rpb24gd3QoKXtyZXR1cm4gdC5ldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyfXQudG91Y2g9ZnVuY3Rpb24odCxlLHIpe2lmKGFyZ3VtZW50cy5sZW5ndGg8MyYmKHI9ZSxlPU4oKS5jaGFuZ2VkVG91Y2hlcyksZSlmb3IodmFyIG4saT0wLGE9ZS5sZW5ndGg7aTxhOysraSlpZigobj1lW2ldKS5pZGVudGlmaWVyPT09cilyZXR1cm4gX3QodCxuKX0sdC5iZWhhdmlvci5kcmFnPWZ1bmN0aW9uKCl7dmFyIGU9aihhLFwiZHJhZ1wiLFwiZHJhZ3N0YXJ0XCIsXCJkcmFnZW5kXCIpLHI9bnVsbCxuPXMoUCx0Lm1vdXNlLG8sXCJtb3VzZW1vdmVcIixcIm1vdXNldXBcIiksaT1zKHd0LHQudG91Y2gseixcInRvdWNobW92ZVwiLFwidG91Y2hlbmRcIik7ZnVuY3Rpb24gYSgpe3RoaXMub24oXCJtb3VzZWRvd24uZHJhZ1wiLG4pLm9uKFwidG91Y2hzdGFydC5kcmFnXCIsaSl9ZnVuY3Rpb24gcyhuLGksYSxvLHMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsLGM9dC5ldmVudC50YXJnZXQuY29ycmVzcG9uZGluZ0VsZW1lbnR8fHQuZXZlbnQudGFyZ2V0LHU9dGhpcy5wYXJlbnROb2RlLGg9ZS5vZih0aGlzLGFyZ3VtZW50cyksZj0wLHA9bigpLGQ9XCIuZHJhZ1wiKyhudWxsPT1wP1wiXCI6XCItXCIrcCksZz10LnNlbGVjdChhKGMpKS5vbihvK2QsZnVuY3Rpb24oKXt2YXIgdCxlLHI9aSh1LHApO2lmKCFyKXJldHVybjt0PXJbMF0tbVswXSxlPXJbMV0tbVsxXSxmfD10fGUsbT1yLGgoe3R5cGU6XCJkcmFnXCIseDpyWzBdK2xbMF0seTpyWzFdK2xbMV0sZHg6dCxkeTplfSl9KS5vbihzK2QsZnVuY3Rpb24oKXtpZighaSh1LHApKXJldHVybjtnLm9uKG8rZCxudWxsKS5vbihzK2QsbnVsbCksdihmKSxoKHt0eXBlOlwiZHJhZ2VuZFwifSl9KSx2PXh0KGMpLG09aSh1LHApO2w9cj9bKGw9ci5hcHBseSh0aGlzLGFyZ3VtZW50cykpLngtbVswXSxsLnktbVsxXV06WzAsMF0saCh7dHlwZTpcImRyYWdzdGFydFwifSl9fXJldHVybiBhLm9yaWdpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGEpOnJ9LHQucmViaW5kKGEsZSxcIm9uXCIpfSx0LnRvdWNoZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYoZT1OKCkudG91Y2hlcyksZT9uKGUpLm1hcChmdW5jdGlvbihlKXt2YXIgcj1fdCh0LGUpO3JldHVybiByLmlkZW50aWZpZXI9ZS5pZGVudGlmaWVyLHJ9KTpbXX07dmFyIGt0PTFlLTYsQXQ9a3Qqa3QsVHQ9TWF0aC5QSSxNdD0yKlR0LFN0PU10LWt0LEV0PVR0LzIsQ3Q9VHQvMTgwLEx0PTE4MC9UdDtmdW5jdGlvbiB6dCh0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9ZnVuY3Rpb24gT3QodCxlLHIpe3JldHVybihlWzBdLXRbMF0pKihyWzFdLXRbMV0pLShlWzFdLXRbMV0pKihyWzBdLXRbMF0pfWZ1bmN0aW9uIEl0KHQpe3JldHVybiB0PjE/MDp0PC0xP1R0Ok1hdGguYWNvcyh0KX1mdW5jdGlvbiBEdCh0KXtyZXR1cm4gdD4xP0V0OnQ8LTE/LUV0Ok1hdGguYXNpbih0KX1mdW5jdGlvbiBQdCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn1mdW5jdGlvbiBSdCh0KXtyZXR1cm4odD1NYXRoLnNpbih0LzIpKSp0fXZhciBGdD1NYXRoLlNRUlQyO3QuaW50ZXJwb2xhdGVab29tPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXRbMF0sYT10WzFdLG89dFsyXSxzPWVbMF0sbD1lWzFdLGM9ZVsyXSx1PXMtaSxoPWwtYSxmPXUqdStoKmg7aWYoZjxBdCluPU1hdGgubG9nKGMvbykvRnQscj1mdW5jdGlvbih0KXtyZXR1cm5baSt0KnUsYSt0KmgsbypNYXRoLmV4cChGdCp0Km4pXX07ZWxzZXt2YXIgcD1NYXRoLnNxcnQoZiksZD0oYypjLW8qbys0KmYpLygyKm8qMipwKSxnPShjKmMtbypvLTQqZikvKDIqYyoyKnApLHY9TWF0aC5sb2coTWF0aC5zcXJ0KGQqZCsxKS1kKSxtPU1hdGgubG9nKE1hdGguc3FydChnKmcrMSktZyk7bj0obS12KS9GdCxyPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dCpuLHM9UHQodiksbD1vLygyKnApKihzKihlPUZ0KnIrdiwoKGU9TWF0aC5leHAoMiplKSktMSkvKGUrMSkpLWZ1bmN0aW9uKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfSh2KSk7cmV0dXJuW2krbCp1LGErbCpoLG8qcy9QdChGdCpyK3YpXX19cmV0dXJuIHIuZHVyYXRpb249MWUzKm4scn0sdC5iZWhhdmlvci56b29tPWZ1bmN0aW9uKCl7dmFyIGUscixuLGEscyxsLGMsdSxoLGY9e3g6MCx5OjAsazoxfSxwPVs5NjAsNTAwXSxkPWp0LGc9MjUwLHY9MCxtPVwibW91c2Vkb3duLnpvb21cIix5PVwibW91c2Vtb3ZlLnpvb21cIix4PVwibW91c2V1cC56b29tXCIsYj1cInRvdWNoc3RhcnQuem9vbVwiLF89aih3LFwiem9vbXN0YXJ0XCIsXCJ6b29tXCIsXCJ6b29tZW5kXCIpO2Z1bmN0aW9uIHcodCl7dC5vbihtLHopLm9uKE50K1wiLnpvb21cIixJKS5vbihcImRibGNsaWNrLnpvb21cIixEKS5vbihiLE8pfWZ1bmN0aW9uIGsodCl7cmV0dXJuWyh0WzBdLWYueCkvZi5rLCh0WzFdLWYueSkvZi5rXX1mdW5jdGlvbiBBKHQpe2Yuaz1NYXRoLm1heChkWzBdLE1hdGgubWluKGRbMV0sdCkpfWZ1bmN0aW9uIFQodCxlKXtlPWZ1bmN0aW9uKHQpe3JldHVyblt0WzBdKmYuaytmLngsdFsxXSpmLmsrZi55XX0oZSksZi54Kz10WzBdLWVbMF0sZi55Kz10WzFdLWVbMV19ZnVuY3Rpb24gTShlLG4saSxhKXtlLl9fY2hhcnRfXz17eDpmLngseTpmLnksazpmLmt9LEEoTWF0aC5wb3coMixhKSksVChyPW4saSksZT10LnNlbGVjdChlKSxnPjAmJihlPWUudHJhbnNpdGlvbigpLmR1cmF0aW9uKGcpKSxlLmNhbGwody5ldmVudCl9ZnVuY3Rpb24gUygpe2MmJmMuZG9tYWluKGwucmFuZ2UoKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuKHQtZi54KS9mLmt9KS5tYXAobC5pbnZlcnQpKSxoJiZoLmRvbWFpbih1LnJhbmdlKCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybih0LWYueSkvZi5rfSkubWFwKHUuaW52ZXJ0KSl9ZnVuY3Rpb24gRSh0KXt2Kyt8fHQoe3R5cGU6XCJ6b29tc3RhcnRcIn0pfWZ1bmN0aW9uIEModCl7UygpLHQoe3R5cGU6XCJ6b29tXCIsc2NhbGU6Zi5rLHRyYW5zbGF0ZTpbZi54LGYueV19KX1mdW5jdGlvbiBMKHQpey0tdnx8KHQoe3R5cGU6XCJ6b29tZW5kXCJ9KSxyPW51bGwpfWZ1bmN0aW9uIHooKXt2YXIgZT10aGlzLHI9Xy5vZihlLGFyZ3VtZW50cyksbj0wLGk9dC5zZWxlY3QobyhlKSkub24oeSxmdW5jdGlvbigpe249MSxUKHQubW91c2UoZSksYSksQyhyKX0pLm9uKHgsZnVuY3Rpb24oKXtpLm9uKHksbnVsbCkub24oeCxudWxsKSxzKG4pLEwocil9KSxhPWsodC5tb3VzZShlKSkscz14dChlKTtocy5jYWxsKGUpLEUocil9ZnVuY3Rpb24gTygpe3ZhciBlLHI9dGhpcyxuPV8ub2Yocixhcmd1bWVudHMpLGk9e30sYT0wLG89XCIuem9vbS1cIit0LmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXIsbD1cInRvdWNobW92ZVwiK28sYz1cInRvdWNoZW5kXCIrbyx1PVtdLGg9dC5zZWxlY3QocikscD14dChyKTtmdW5jdGlvbiBkKCl7dmFyIG49dC50b3VjaGVzKHIpO3JldHVybiBlPWYuayxuLmZvckVhY2goZnVuY3Rpb24odCl7dC5pZGVudGlmaWVyIGluIGkmJihpW3QuaWRlbnRpZmllcl09ayh0KSl9KSxufWZ1bmN0aW9uIGcoKXt2YXIgZT10LmV2ZW50LnRhcmdldDt0LnNlbGVjdChlKS5vbihsLHYpLm9uKGMseSksdS5wdXNoKGUpO2Zvcih2YXIgbj10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLG89MCxoPW4ubGVuZ3RoO288aDsrK28paVtuW29dLmlkZW50aWZpZXJdPW51bGw7dmFyIHA9ZCgpLGc9RGF0ZS5ub3coKTtpZigxPT09cC5sZW5ndGgpe2lmKGctczw1MDApe3ZhciBtPXBbMF07TShyLG0saVttLmlkZW50aWZpZXJdLE1hdGguZmxvb3IoTWF0aC5sb2coZi5rKS9NYXRoLkxOMikrMSksQigpfXM9Z31lbHNlIGlmKHAubGVuZ3RoPjEpe209cFswXTt2YXIgeD1wWzFdLGI9bVswXS14WzBdLF89bVsxXS14WzFdO2E9YipiK18qX319ZnVuY3Rpb24gdigpe3ZhciBvLGwsYyx1LGg9dC50b3VjaGVzKHIpO2hzLmNhbGwocik7Zm9yKHZhciBmPTAscD1oLmxlbmd0aDtmPHA7KytmLHU9bnVsbClpZihjPWhbZl0sdT1pW2MuaWRlbnRpZmllcl0pe2lmKGwpYnJlYWs7bz1jLGw9dX1pZih1KXt2YXIgZD0oZD1jWzBdLW9bMF0pKmQrKGQ9Y1sxXS1vWzFdKSpkLGc9YSYmTWF0aC5zcXJ0KGQvYSk7bz1bKG9bMF0rY1swXSkvMiwob1sxXStjWzFdKS8yXSxsPVsobFswXSt1WzBdKS8yLChsWzFdK3VbMV0pLzJdLEEoZyplKX1zPW51bGwsVChvLGwpLEMobil9ZnVuY3Rpb24geSgpe2lmKHQuZXZlbnQudG91Y2hlcy5sZW5ndGgpe2Zvcih2YXIgZT10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLHI9MCxhPWUubGVuZ3RoO3I8YTsrK3IpZGVsZXRlIGlbZVtyXS5pZGVudGlmaWVyXTtmb3IodmFyIHMgaW4gaSlyZXR1cm4gdm9pZCBkKCl9dC5zZWxlY3RBbGwodSkub24obyxudWxsKSxoLm9uKG0seikub24oYixPKSxwKCksTChuKX1nKCksRShuKSxoLm9uKG0sbnVsbCkub24oYixnKX1mdW5jdGlvbiBJKCl7dmFyIGk9Xy5vZih0aGlzLGFyZ3VtZW50cyk7YT9jbGVhclRpbWVvdXQoYSk6KGhzLmNhbGwodGhpcyksZT1rKHI9bnx8dC5tb3VzZSh0aGlzKSksRShpKSksYT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YT1udWxsLEwoaSl9LDUwKSxCKCksQShNYXRoLnBvdygyLC4wMDIqQnQoKSkqZi5rKSxUKHIsZSksQyhpKX1mdW5jdGlvbiBEKCl7dmFyIGU9dC5tb3VzZSh0aGlzKSxyPU1hdGgubG9nKGYuaykvTWF0aC5MTjI7TSh0aGlzLGUsayhlKSx0LmV2ZW50LnNoaWZ0S2V5P01hdGguY2VpbChyKS0xOk1hdGguZmxvb3IocikrMSl9cmV0dXJuIE50fHwoTnQ9XCJvbndoZWVsXCJpbiBpPyhCdD1mdW5jdGlvbigpe3JldHVybi10LmV2ZW50LmRlbHRhWSoodC5ldmVudC5kZWx0YU1vZGU/MTIwOjEpfSxcIndoZWVsXCIpOlwib25tb3VzZXdoZWVsXCJpbiBpPyhCdD1mdW5jdGlvbigpe3JldHVybiB0LmV2ZW50LndoZWVsRGVsdGF9LFwibW91c2V3aGVlbFwiKTooQnQ9ZnVuY3Rpb24oKXtyZXR1cm4tdC5ldmVudC5kZXRhaWx9LFwiTW96TW91c2VQaXhlbFNjcm9sbFwiKSksdy5ldmVudD1mdW5jdGlvbihlKXtlLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1fLm9mKHRoaXMsYXJndW1lbnRzKSxuPWY7ZHM/dC5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmVhY2goXCJzdGFydC56b29tXCIsZnVuY3Rpb24oKXtmPXRoaXMuX19jaGFydF9ffHx7eDowLHk6MCxrOjF9LEUoZSl9KS50d2VlbihcInpvb206em9vbVwiLGZ1bmN0aW9uKCl7dmFyIGk9cFswXSxhPXBbMV0sbz1yP3JbMF06aS8yLHM9cj9yWzFdOmEvMixsPXQuaW50ZXJwb2xhdGVab29tKFsoby1mLngpL2Yuaywocy1mLnkpL2YuayxpL2Yua10sWyhvLW4ueCkvbi5rLChzLW4ueSkvbi5rLGkvbi5rXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPWwodCksbj1pL3JbMl07dGhpcy5fX2NoYXJ0X189Zj17eDpvLXJbMF0qbix5OnMtclsxXSpuLGs6bn0sQyhlKX19KS5lYWNoKFwiaW50ZXJydXB0Lnpvb21cIixmdW5jdGlvbigpe0woZSl9KS5lYWNoKFwiZW5kLnpvb21cIixmdW5jdGlvbigpe0woZSl9KToodGhpcy5fX2NoYXJ0X189ZixFKGUpLEMoZSksTChlKSl9KX0sdy50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9e3g6K3RbMF0seTordFsxXSxrOmYua30sUygpLHcpOltmLngsZi55XX0sdy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj17eDpmLngseTpmLnksazpudWxsfSxBKCt0KSxTKCksdyk6Zi5rfSx3LnNjYWxlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPW51bGw9PXQ/anQ6Wyt0WzBdLCt0WzFdXSx3KTpkfSx3LmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10JiZbK3RbMF0sK3RbMV1dLHcpOm59LHcuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD10JiZbK3RbMF0sK3RbMV1dLHcpOnB9LHcuZHVyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9K3Qsdyk6Z30sdy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsbD10LmNvcHkoKSxmPXt4OjAseTowLGs6MX0sdyk6Y30sdy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXQsdT10LmNvcHkoKSxmPXt4OjAseTowLGs6MX0sdyk6aH0sdC5yZWJpbmQodyxfLFwib25cIil9O3ZhciBCdCxOdCxqdD1bMCwxLzBdO2Z1bmN0aW9uIFZ0KCl7fWZ1bmN0aW9uIFV0KHQsZSxyKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFV0Pyh0aGlzLmg9K3QsdGhpcy5zPStlLHZvaWQodGhpcy5sPStyKSk6YXJndW1lbnRzLmxlbmd0aDwyP3QgaW5zdGFuY2VvZiBVdD9uZXcgVXQodC5oLHQucyx0LmwpOnVlKFwiXCIrdCxoZSxVdCk6bmV3IFV0KHQsZSxyKX10LmNvbG9yPVZ0LFZ0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpK1wiXCJ9LHQuaHNsPVV0O3ZhciBxdD1VdC5wcm90b3R5cGU9bmV3IFZ0O2Z1bmN0aW9uIEh0KHQsZSxyKXt2YXIgbixpO2Z1bmN0aW9uIGEodCl7cmV0dXJuIE1hdGgucm91bmQoMjU1KmZ1bmN0aW9uKHQpe3JldHVybiB0PjM2MD90LT0zNjA6dDwwJiYodCs9MzYwKSx0PDYwP24rKGktbikqdC82MDp0PDE4MD9pOnQ8MjQwP24rKGktbikqKDI0MC10KS82MDpufSh0KSl9cmV0dXJuIHQ9aXNOYU4odCk/MDoodCU9MzYwKTwwP3QrMzYwOnQsZT1pc05hTihlKT8wOmU8MD8wOmU+MT8xOmUsbj0yKihyPXI8MD8wOnI+MT8xOnIpLShpPXI8PS41P3IqKDErZSk6citlLXIqZSksbmV3IGFlKGEodCsxMjApLGEodCksYSh0LTEyMCkpfWZ1bmN0aW9uIEd0KGUscixuKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIEd0Pyh0aGlzLmg9K2UsdGhpcy5jPStyLHZvaWQodGhpcy5sPStuKSk6YXJndW1lbnRzLmxlbmd0aDwyP2UgaW5zdGFuY2VvZiBHdD9uZXcgR3QoZS5oLGUuYyxlLmwpOmVlKGUgaW5zdGFuY2VvZiBYdD9lLmw6KGU9ZmUoKGU9dC5yZ2IoZSkpLnIsZS5nLGUuYikpLmwsZS5hLGUuYik6bmV3IEd0KGUscixuKX1xdC5icmlnaHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP3Q6MSksbmV3IFV0KHRoaXMuaCx0aGlzLnMsdGhpcy5sL3QpfSxxdC5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD90OjEpLG5ldyBVdCh0aGlzLmgsdGhpcy5zLHQqdGhpcy5sKX0scXQucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIEh0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKX0sdC5oY2w9R3Q7dmFyIFl0PUd0LnByb3RvdHlwZT1uZXcgVnQ7ZnVuY3Rpb24gV3QodCxlLHIpe3JldHVybiBpc05hTih0KSYmKHQ9MCksaXNOYU4oZSkmJihlPTApLG5ldyBYdChyLE1hdGguY29zKHQqPUN0KSplLE1hdGguc2luKHQpKmUpfWZ1bmN0aW9uIFh0KHQsZSxyKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFh0Pyh0aGlzLmw9K3QsdGhpcy5hPStlLHZvaWQodGhpcy5iPStyKSk6YXJndW1lbnRzLmxlbmd0aDwyP3QgaW5zdGFuY2VvZiBYdD9uZXcgWHQodC5sLHQuYSx0LmIpOnQgaW5zdGFuY2VvZiBHdD9XdCh0LmgsdC5jLHQubCk6ZmUoKHQ9YWUodCkpLnIsdC5nLHQuYik6bmV3IFh0KHQsZSxyKX1ZdC5icmlnaHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEd0KHRoaXMuaCx0aGlzLmMsTWF0aC5taW4oMTAwLHRoaXMubCtadCooYXJndW1lbnRzLmxlbmd0aD90OjEpKSl9LFl0LmRhcmtlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEd0KHRoaXMuaCx0aGlzLmMsTWF0aC5tYXgoMCx0aGlzLmwtWnQqKGFyZ3VtZW50cy5sZW5ndGg/dDoxKSkpfSxZdC5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4gV3QodGhpcy5oLHRoaXMuYyx0aGlzLmwpLnJnYigpfSx0LmxhYj1YdDt2YXIgWnQ9MTgsJHQ9Ljk1MDQ3LEp0PTEsS3Q9MS4wODg4MyxRdD1YdC5wcm90b3R5cGU9bmV3IFZ0O2Z1bmN0aW9uIHRlKHQsZSxyKXt2YXIgbj0odCsxNikvMTE2LGk9bitlLzUwMCxhPW4tci8yMDA7cmV0dXJuIG5ldyBhZShpZSgzLjI0MDQ1NDIqKGk9cmUoaSkqJHQpLTEuNTM3MTM4NSoobj1yZShuKSpKdCktLjQ5ODUzMTQqKGE9cmUoYSkqS3QpKSxpZSgtLjk2OTI2NippKzEuODc2MDEwOCpuKy4wNDE1NTYqYSksaWUoLjA1NTY0MzQqaS0uMjA0MDI1OSpuKzEuMDU3MjI1MiphKSl9ZnVuY3Rpb24gZWUodCxlLHIpe3JldHVybiB0PjA/bmV3IEd0KE1hdGguYXRhbjIocixlKSpMdCxNYXRoLnNxcnQoZSplK3IqciksdCk6bmV3IEd0KE5hTixOYU4sdCl9ZnVuY3Rpb24gcmUodCl7cmV0dXJuIHQ+LjIwNjg5MzAzND90KnQqdDoodC00LzI5KS83Ljc4NzAzN31mdW5jdGlvbiBuZSh0KXtyZXR1cm4gdD4uMDA4ODU2P01hdGgucG93KHQsMS8zKTo3Ljc4NzAzNyp0KzQvMjl9ZnVuY3Rpb24gaWUodCl7cmV0dXJuIE1hdGgucm91bmQoMjU1Kih0PD0uMDAzMDQ/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KSl9ZnVuY3Rpb24gYWUodCxlLHIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgYWU/KHRoaXMucj1+fnQsdGhpcy5nPX5+ZSx2b2lkKHRoaXMuYj1+fnIpKTphcmd1bWVudHMubGVuZ3RoPDI/dCBpbnN0YW5jZW9mIGFlP25ldyBhZSh0LnIsdC5nLHQuYik6dWUoXCJcIit0LGFlLEh0KTpuZXcgYWUodCxlLHIpfWZ1bmN0aW9uIG9lKHQpe3JldHVybiBuZXcgYWUodD4+MTYsdD4+OCYyNTUsMjU1JnQpfWZ1bmN0aW9uIHNlKHQpe3JldHVybiBvZSh0KStcIlwifVF0LmJyaWdodGVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWHQoTWF0aC5taW4oMTAwLHRoaXMubCtadCooYXJndW1lbnRzLmxlbmd0aD90OjEpKSx0aGlzLmEsdGhpcy5iKX0sUXQuZGFya2VyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWHQoTWF0aC5tYXgoMCx0aGlzLmwtWnQqKGFyZ3VtZW50cy5sZW5ndGg/dDoxKSksdGhpcy5hLHRoaXMuYil9LFF0LnJnYj1mdW5jdGlvbigpe3JldHVybiB0ZSh0aGlzLmwsdGhpcy5hLHRoaXMuYil9LHQucmdiPWFlO3ZhciBsZT1hZS5wcm90b3R5cGU9bmV3IFZ0O2Z1bmN0aW9uIGNlKHQpe3JldHVybiB0PDE2P1wiMFwiK01hdGgubWF4KDAsdCkudG9TdHJpbmcoMTYpOk1hdGgubWluKDI1NSx0KS50b1N0cmluZygxNil9ZnVuY3Rpb24gdWUodCxlLHIpe3ZhciBuLGksYSxvPTAscz0wLGw9MDtpZihuPS8oW2Etel0rKVxcKCguKilcXCkvLmV4ZWModD10LnRvTG93ZXJDYXNlKCkpKXN3aXRjaChpPW5bMl0uc3BsaXQoXCIsXCIpLG5bMV0pe2Nhc2VcImhzbFwiOnJldHVybiByKHBhcnNlRmxvYXQoaVswXSkscGFyc2VGbG9hdChpWzFdKS8xMDAscGFyc2VGbG9hdChpWzJdKS8xMDApO2Nhc2VcInJnYlwiOnJldHVybiBlKGRlKGlbMF0pLGRlKGlbMV0pLGRlKGlbMl0pKX1yZXR1cm4oYT1nZS5nZXQodCkpP2UoYS5yLGEuZyxhLmIpOihudWxsPT10fHxcIiNcIiE9PXQuY2hhckF0KDApfHxpc05hTihhPXBhcnNlSW50KHQuc2xpY2UoMSksMTYpKXx8KDQ9PT10Lmxlbmd0aD8obz0oMzg0MCZhKT4+NCxvfD1vPj40LHM9MjQwJmEsc3w9cz4+NCxsPTE1JmEsbHw9bDw8NCk6Nz09PXQubGVuZ3RoJiYobz0oMTY3MTE2ODAmYSk+PjE2LHM9KDY1MjgwJmEpPj44LGw9MjU1JmEpKSxlKG8scyxsKSl9ZnVuY3Rpb24gaGUodCxlLHIpe3ZhciBuLGksYT1NYXRoLm1pbih0Lz0yNTUsZS89MjU1LHIvPTI1NSksbz1NYXRoLm1heCh0LGUscikscz1vLWEsbD0obythKS8yO3JldHVybiBzPyhpPWw8LjU/cy8obythKTpzLygyLW8tYSksbj10PT1vPyhlLXIpL3MrKGU8cj82OjApOmU9PW8/KHItdCkvcysyOih0LWUpL3MrNCxuKj02MCk6KG49TmFOLGk9bD4wJiZsPDE/MDpuKSxuZXcgVXQobixpLGwpfWZ1bmN0aW9uIGZlKHQsZSxyKXt2YXIgbj1uZSgoLjQxMjQ1NjQqKHQ9cGUodCkpKy4zNTc1NzYxKihlPXBlKGUpKSsuMTgwNDM3NSoocj1wZShyKSkpLyR0KSxpPW5lKCguMjEyNjcyOSp0Ky43MTUxNTIyKmUrLjA3MjE3NSpyKS9KdCk7cmV0dXJuIFh0KDExNippLTE2LDUwMCoobi1pKSwyMDAqKGktbmUoKC4wMTkzMzM5KnQrLjExOTE5MiplKy45NTAzMDQxKnIpL0t0KSkpfWZ1bmN0aW9uIHBlKHQpe3JldHVybih0Lz0yNTUpPD0uMDQwNDU/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIGRlKHQpe3ZhciBlPXBhcnNlRmxvYXQodCk7cmV0dXJuXCIlXCI9PT10LmNoYXJBdCh0Lmxlbmd0aC0xKT9NYXRoLnJvdW5kKDIuNTUqZSk6ZX1sZS5icmlnaHRlcj1mdW5jdGlvbih0KXt0PU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/dDoxKTt2YXIgZT10aGlzLnIscj10aGlzLmcsbj10aGlzLmIsaT0zMDtyZXR1cm4gZXx8cnx8bj8oZSYmZTxpJiYoZT1pKSxyJiZyPGkmJihyPWkpLG4mJm48aSYmKG49aSksbmV3IGFlKE1hdGgubWluKDI1NSxlL3QpLE1hdGgubWluKDI1NSxyL3QpLE1hdGgubWluKDI1NSxuL3QpKSk6bmV3IGFlKGksaSxpKX0sbGUuZGFya2VyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYWUoKHQ9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD90OjEpKSp0aGlzLnIsdCp0aGlzLmcsdCp0aGlzLmIpfSxsZS5oc2w9ZnVuY3Rpb24oKXtyZXR1cm4gaGUodGhpcy5yLHRoaXMuZyx0aGlzLmIpfSxsZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiI1wiK2NlKHRoaXMucikrY2UodGhpcy5nKStjZSh0aGlzLmIpfTt2YXIgZ2U9dC5tYXAoe2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH0pO2Z1bmN0aW9uIHZlKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBtZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiAyPT09YXJndW1lbnRzLmxlbmd0aCYmXCJmdW5jdGlvblwiPT10eXBlb2YgciYmKG49cixyPW51bGwpLHllKGUscix0LG4pfX1mdW5jdGlvbiB5ZShlLHIsaSxhKXt2YXIgbz17fSxzPXQuZGlzcGF0Y2goXCJiZWZvcmVzZW5kXCIsXCJwcm9ncmVzc1wiLFwibG9hZFwiLFwiZXJyb3JcIiksbD17fSxjPW5ldyBYTUxIdHRwUmVxdWVzdCx1PW51bGw7ZnVuY3Rpb24gaCgpe3ZhciB0LGU9Yy5zdGF0dXM7aWYoIWUmJmZ1bmN0aW9uKHQpe3ZhciBlPXQucmVzcG9uc2VUeXBlO3JldHVybiBlJiZcInRleHRcIiE9PWU/dC5yZXNwb25zZTp0LnJlc3BvbnNlVGV4dH0oYyl8fGU+PTIwMCYmZTwzMDB8fDMwND09PWUpe3RyeXt0PWkuY2FsbChvLGMpfWNhdGNoKHQpe3JldHVybiB2b2lkIHMuZXJyb3IuY2FsbChvLHQpfXMubG9hZC5jYWxsKG8sdCl9ZWxzZSBzLmVycm9yLmNhbGwobyxjKX1yZXR1cm4hdGhpcy5YRG9tYWluUmVxdWVzdHx8XCJ3aXRoQ3JlZGVudGlhbHNcImluIGN8fCEvXihodHRwKHMpPzopP1xcL1xcLy8udGVzdChlKXx8KGM9bmV3IFhEb21haW5SZXF1ZXN0KSxcIm9ubG9hZFwiaW4gYz9jLm9ubG9hZD1jLm9uZXJyb3I9aDpjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2MucmVhZHlTdGF0ZT4zJiZoKCl9LGMub25wcm9ncmVzcz1mdW5jdGlvbihlKXt2YXIgcj10LmV2ZW50O3QuZXZlbnQ9ZTt0cnl7cy5wcm9ncmVzcy5jYWxsKG8sYyl9ZmluYWxseXt0LmV2ZW50PXJ9fSxvLmhlYWRlcj1mdW5jdGlvbih0LGUpe3JldHVybiB0PSh0K1wiXCIpLnRvTG93ZXJDYXNlKCksYXJndW1lbnRzLmxlbmd0aDwyP2xbdF06KG51bGw9PWU/ZGVsZXRlIGxbdF06bFt0XT1lK1wiXCIsbyl9LG8ubWltZVR5cGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOnQrXCJcIixvKTpyfSxvLnJlc3BvbnNlVHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LG8pOnV9LG8ucmVzcG9uc2U9ZnVuY3Rpb24odCl7cmV0dXJuIGk9dCxvfSxbXCJnZXRcIixcInBvc3RcIl0uZm9yRWFjaChmdW5jdGlvbih0KXtvW3RdPWZ1bmN0aW9uKCl7cmV0dXJuIG8uc2VuZC5hcHBseShvLFt0XS5jb25jYXQobihhcmd1bWVudHMpKSl9fSksby5zZW5kPWZ1bmN0aW9uKHQsbixpKXtpZigyPT09YXJndW1lbnRzLmxlbmd0aCYmXCJmdW5jdGlvblwiPT10eXBlb2YgbiYmKGk9bixuPW51bGwpLGMub3Blbih0LGUsITApLG51bGw9PXJ8fFwiYWNjZXB0XCJpbiBsfHwobC5hY2NlcHQ9citcIiwqLypcIiksYy5zZXRSZXF1ZXN0SGVhZGVyKWZvcih2YXIgYSBpbiBsKWMuc2V0UmVxdWVzdEhlYWRlcihhLGxbYV0pO3JldHVybiBudWxsIT1yJiZjLm92ZXJyaWRlTWltZVR5cGUmJmMub3ZlcnJpZGVNaW1lVHlwZShyKSxudWxsIT11JiYoYy5yZXNwb25zZVR5cGU9dSksbnVsbCE9aSYmby5vbihcImVycm9yXCIsaSkub24oXCJsb2FkXCIsZnVuY3Rpb24odCl7aShudWxsLHQpfSkscy5iZWZvcmVzZW5kLmNhbGwobyxjKSxjLnNlbmQobnVsbD09bj9udWxsOm4pLG99LG8uYWJvcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gYy5hYm9ydCgpLG99LHQucmViaW5kKG8scyxcIm9uXCIpLG51bGw9PWE/bzpvLmdldChmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQubGVuZ3RoP2Z1bmN0aW9uKGUscil7dChudWxsPT1lP3I6bnVsbCl9OnR9KGEpKX1nZS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7Z2Uuc2V0KHQsb2UoZSkpfSksdC5mdW5jdG9yPXZlLHQueGhyPW1lKHopLHQuZHN2PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IFJlZ0V4cCgnW1wiJyt0K1wiXFxuXVwiKSxuPXQuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiBpKHQscixuKXthcmd1bWVudHMubGVuZ3RoPDMmJihuPXIscj1udWxsKTt2YXIgaT15ZSh0LGUsbnVsbD09cj9hOm8ociksbik7cmV0dXJuIGkucm93PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2kucmVzcG9uc2UobnVsbD09KHI9dCk/YTpvKHQpKTpyfSxpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIGkucGFyc2UodC5yZXNwb25zZVRleHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBpLnBhcnNlKGUucmVzcG9uc2VUZXh0LHQpfX1mdW5jdGlvbiBzKGUpe3JldHVybiBlLm1hcChsKS5qb2luKHQpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIHIudGVzdCh0KT8nXCInK3QucmVwbGFjZSgvXFxcIi9nLCdcIlwiJykrJ1wiJzp0fXJldHVybiBpLnBhcnNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI7cmV0dXJuIGkucGFyc2VSb3dzKHQsZnVuY3Rpb24odCxuKXtpZihyKXJldHVybiByKHQsbi0xKTt2YXIgaT1uZXcgRnVuY3Rpb24oXCJkXCIsXCJyZXR1cm4ge1wiK3QubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpK1wiOiBkW1wiK2UrXCJdXCJ9KS5qb2luKFwiLFwiKStcIn1cIik7cj1lP2Z1bmN0aW9uKHQscil7cmV0dXJuIGUoaSh0KSxyKX06aX0pfSxpLnBhcnNlUm93cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYT17fSxvPXt9LHM9W10sbD10Lmxlbmd0aCxjPTAsdT0wO2Z1bmN0aW9uIGgoKXtpZihjPj1sKXJldHVybiBvO2lmKGkpcmV0dXJuIGk9ITEsYTt2YXIgZT1jO2lmKDM0PT09dC5jaGFyQ29kZUF0KGUpKXtmb3IodmFyIHI9ZTtyKys8bDspaWYoMzQ9PT10LmNoYXJDb2RlQXQocikpe2lmKDM0IT09dC5jaGFyQ29kZUF0KHIrMSkpYnJlYWs7KytyfXJldHVybiBjPXIrMiwxMz09PShzPXQuY2hhckNvZGVBdChyKzEpKT8oaT0hMCwxMD09PXQuY2hhckNvZGVBdChyKzIpJiYrK2MpOjEwPT09cyYmKGk9ITApLHQuc2xpY2UoZSsxLHIpLnJlcGxhY2UoL1wiXCIvZywnXCInKX1mb3IoO2M8bDspe3ZhciBzLHU9MTtpZigxMD09PShzPXQuY2hhckNvZGVBdChjKyspKSlpPSEwO2Vsc2UgaWYoMTM9PT1zKWk9ITAsMTA9PT10LmNoYXJDb2RlQXQoYykmJigrK2MsKyt1KTtlbHNlIGlmKHMhPT1uKWNvbnRpbnVlO3JldHVybiB0LnNsaWNlKGUsYy11KX1yZXR1cm4gdC5zbGljZShlKX1mb3IoOyhyPWgoKSkhPT1vOyl7Zm9yKHZhciBmPVtdO3IhPT1hJiZyIT09bzspZi5wdXNoKHIpLHI9aCgpO2UmJm51bGw9PShmPWUoZix1KyspKXx8cy5wdXNoKGYpfXJldHVybiBzfSxpLmZvcm1hdD1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGVbMF0pKXJldHVybiBpLmZvcm1hdFJvd3MoZSk7dmFyIHI9bmV3IEwsbj1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KXIuaGFzKGUpfHxuLnB1c2goci5hZGQoZSkpfSksW24ubWFwKGwpLmpvaW4odCldLmNvbmNhdChlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGwoZVt0XSl9KS5qb2luKHQpfSkpLmpvaW4oXCJcXG5cIil9LGkuZm9ybWF0Um93cz1mdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAocykuam9pbihcIlxcblwiKX0saX0sdC5jc3Y9dC5kc3YoXCIsXCIsXCJ0ZXh0L2NzdlwiKSx0LnRzdj10LmRzdihcIlxcdFwiLFwidGV4dC90YWItc2VwYXJhdGVkLXZhbHVlc1wiKTt2YXIgeGUsYmUsX2Usd2Usa2U9dGhpc1tJKHRoaXMsXCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWVcIildfHxmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBBZSh0LGUscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtuPDImJihlPTApLG48MyYmKHI9RGF0ZS5ub3coKSk7dmFyIGk9e2M6dCx0OnIrZSxuOm51bGx9O3JldHVybiBiZT9iZS5uPWk6eGU9aSxiZT1pLF9lfHwod2U9Y2xlYXJUaW1lb3V0KHdlKSxfZT0xLGtlKFRlKSksaX1mdW5jdGlvbiBUZSgpe3ZhciB0PU1lKCksZT1TZSgpLXQ7ZT4yND8oaXNGaW5pdGUoZSkmJihjbGVhclRpbWVvdXQod2UpLHdlPXNldFRpbWVvdXQoVGUsZSkpLF9lPTApOihfZT0xLGtlKFRlKSl9ZnVuY3Rpb24gTWUoKXtmb3IodmFyIHQ9RGF0ZS5ub3coKSxlPXhlO2U7KXQ+PWUudCYmZS5jKHQtZS50KSYmKGUuYz1udWxsKSxlPWUubjtyZXR1cm4gdH1mdW5jdGlvbiBTZSgpe2Zvcih2YXIgdCxlPXhlLHI9MS8wO2U7KWUuYz8oZS50PHImJihyPWUudCksZT0odD1lKS5uKTplPXQ/dC5uPWUubjp4ZT1lLm47cmV0dXJuIGJlPXQscn1mdW5jdGlvbiBFZSh0LGUpe3JldHVybiBlLSh0P01hdGguY2VpbChNYXRoLmxvZyh0KS9NYXRoLkxOMTApOjEpfXQudGltZXI9ZnVuY3Rpb24oKXtBZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHQudGltZXIuZmx1c2g9ZnVuY3Rpb24oKXtNZSgpLFNlKCl9LHQucm91bmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9NYXRoLnJvdW5kKHQqKGU9TWF0aC5wb3coMTAsZSkpKS9lOk1hdGgucm91bmQodCl9O3ZhciBDZT1bXCJ5XCIsXCJ6XCIsXCJhXCIsXCJmXCIsXCJwXCIsXCJuXCIsXCJcXHhiNVwiLFwibVwiLFwiXCIsXCJrXCIsXCJNXCIsXCJHXCIsXCJUXCIsXCJQXCIsXCJFXCIsXCJaXCIsXCJZXCJdLm1hcChmdW5jdGlvbih0LGUpe3ZhciByPU1hdGgucG93KDEwLDMqeSg4LWUpKTtyZXR1cm57c2NhbGU6ZT44P2Z1bmN0aW9uKHQpe3JldHVybiB0L3J9OmZ1bmN0aW9uKHQpe3JldHVybiB0KnJ9LHN5bWJvbDp0fX0pO3QuZm9ybWF0UHJlZml4PWZ1bmN0aW9uKGUscil7dmFyIG49MDtyZXR1cm4oZT0rZSkmJihlPDAmJihlKj0tMSksciYmKGU9dC5yb3VuZChlLEVlKGUscikpKSxuPTErTWF0aC5mbG9vcigxZS0xMitNYXRoLmxvZyhlKS9NYXRoLkxOMTApLG49TWF0aC5tYXgoLTI0LE1hdGgubWluKDI0LDMqTWF0aC5mbG9vcigobi0xKS8zKSkpKSxDZVs4K24vM119O3ZhciBMZT0vKD86KFtee10pPyhbPD49Xl0pKT8oWytcXC0gXSk/KFskI10pPygwKT8oXFxkKyk/KCwpPyhcXC4tP1xcZCspPyhbYS16JV0pPy9pLHplPXQubWFwKHtiOmZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKDIpfSxjOmZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHQpfSxvOmZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKDgpfSx4OmZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKDE2KX0sWDpmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0sZzpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvUHJlY2lzaW9uKGUpfSxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9FeHBvbmVudGlhbChlKX0sZjpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRml4ZWQoZSl9LHI6ZnVuY3Rpb24oZSxyKXtyZXR1cm4oZT10LnJvdW5kKGUsRWUoZSxyKSkpLnRvRml4ZWQoTWF0aC5tYXgoMCxNYXRoLm1pbigyMCxFZShlKigxKzFlLTE1KSxyKSkpKX19KTtmdW5jdGlvbiBPZSh0KXtyZXR1cm4gdCtcIlwifXZhciBJZT10LnRpbWU9e30sRGU9RGF0ZTtmdW5jdGlvbiBQZSgpe3RoaXMuXz1uZXcgRGF0ZShhcmd1bWVudHMubGVuZ3RoPjE/RGF0ZS5VVEMuYXBwbHkodGhpcyxhcmd1bWVudHMpOmFyZ3VtZW50c1swXSl9UGUucHJvdG90eXBlPXtnZXREYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENEYXRlKCl9LGdldERheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDRGF5KCl9LGdldEZ1bGxZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENGdWxsWWVhcigpfSxnZXRIb3VyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDSG91cnMoKX0sZ2V0TWlsbGlzZWNvbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNaWxsaXNlY29uZHMoKX0sZ2V0TWludXRlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDTWludXRlcygpfSxnZXRNb250aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDTW9udGgoKX0sZ2V0U2Vjb25kczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDU2Vjb25kcygpfSxnZXRUaW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRUaW1lKCl9LGdldFRpbWV6b25lT2Zmc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDB9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLnZhbHVlT2YoKX0sc2V0RGF0ZTpmdW5jdGlvbigpe1JlLnNldFVUQ0RhdGUuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldERheTpmdW5jdGlvbigpe1JlLnNldFVUQ0RheS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0RnVsbFllYXI6ZnVuY3Rpb24oKXtSZS5zZXRVVENGdWxsWWVhci5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0SG91cnM6ZnVuY3Rpb24oKXtSZS5zZXRVVENIb3Vycy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0TWlsbGlzZWNvbmRzOmZ1bmN0aW9uKCl7UmUuc2V0VVRDTWlsbGlzZWNvbmRzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNaW51dGVzOmZ1bmN0aW9uKCl7UmUuc2V0VVRDTWludXRlcy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0TW9udGg6ZnVuY3Rpb24oKXtSZS5zZXRVVENNb250aC5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0U2Vjb25kczpmdW5jdGlvbigpe1JlLnNldFVUQ1NlY29uZHMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldFRpbWU6ZnVuY3Rpb24oKXtSZS5zZXRUaW1lLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfX07dmFyIFJlPURhdGUucHJvdG90eXBlO2Z1bmN0aW9uIEZlKHQsZSxyKXtmdW5jdGlvbiBuKGUpe3ZhciByPXQoZSksbj1hKHIsMSk7cmV0dXJuIGUtcjxuLWU/cjpufWZ1bmN0aW9uIGkocil7cmV0dXJuIGUocj10KG5ldyBEZShyLTEpKSwxKSxyfWZ1bmN0aW9uIGEodCxyKXtyZXR1cm4gZSh0PW5ldyBEZSgrdCksciksdH1mdW5jdGlvbiBvKHQsbixhKXt2YXIgbz1pKHQpLHM9W107aWYoYT4xKWZvcig7bzxuOylyKG8pJWF8fHMucHVzaChuZXcgRGF0ZSgrbykpLGUobywxKTtlbHNlIGZvcig7bzxuOylzLnB1c2gobmV3IERhdGUoK28pKSxlKG8sMSk7cmV0dXJuIHN9dC5mbG9vcj10LHQucm91bmQ9bix0LmNlaWw9aSx0Lm9mZnNldD1hLHQucmFuZ2U9bzt2YXIgcz10LnV0Yz1CZSh0KTtyZXR1cm4gcy5mbG9vcj1zLHMucm91bmQ9QmUobikscy5jZWlsPUJlKGkpLHMub2Zmc2V0PUJlKGEpLHMucmFuZ2U9ZnVuY3Rpb24odCxlLHIpe3RyeXtEZT1QZTt2YXIgbj1uZXcgUGU7cmV0dXJuIG4uXz10LG8obixlLHIpfWZpbmFsbHl7RGU9RGF0ZX19LHR9ZnVuY3Rpb24gQmUodCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7dHJ5e0RlPVBlO3ZhciBuPW5ldyBQZTtyZXR1cm4gbi5fPWUsdChuLHIpLl99ZmluYWxseXtEZT1EYXRlfX19SWUueWVhcj1GZShmdW5jdGlvbih0KXtyZXR1cm4odD1JZS5kYXkodCkpLnNldE1vbnRoKDAsMSksdH0sZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKX0pLEllLnllYXJzPUllLnllYXIucmFuZ2UsSWUueWVhcnMudXRjPUllLnllYXIudXRjLnJhbmdlLEllLmRheT1GZShmdW5jdGlvbih0KXt2YXIgZT1uZXcgRGUoMmUzLDApO3JldHVybiBlLnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCksdC5nZXREYXRlKCkpLGV9LGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCktMX0pLEllLmRheXM9SWUuZGF5LnJhbmdlLEllLmRheXMudXRjPUllLmRheS51dGMucmFuZ2UsSWUuZGF5T2ZZZWFyPWZ1bmN0aW9uKHQpe3ZhciBlPUllLnllYXIodCk7cmV0dXJuIE1hdGguZmxvb3IoKHQtZS02ZTQqKHQuZ2V0VGltZXpvbmVPZmZzZXQoKS1lLmdldFRpbWV6b25lT2Zmc2V0KCkpKS84NjRlNSl9LFtcInN1bmRheVwiLFwibW9uZGF5XCIsXCJ0dWVzZGF5XCIsXCJ3ZWRuZXNkYXlcIixcInRodXJzZGF5XCIsXCJmcmlkYXlcIixcInNhdHVyZGF5XCJdLmZvckVhY2goZnVuY3Rpb24odCxlKXtlPTctZTt2YXIgcj1JZVt0XT1GZShmdW5jdGlvbih0KXtyZXR1cm4odD1JZS5kYXkodCkpLnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrZSklNyksdH0sZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNypNYXRoLmZsb29yKGUpKX0sZnVuY3Rpb24odCl7dmFyIHI9SWUueWVhcih0KS5nZXREYXkoKTtyZXR1cm4gTWF0aC5mbG9vcigoSWUuZGF5T2ZZZWFyKHQpKyhyK2UpJTcpLzcpLShyIT09ZSl9KTtJZVt0K1wic1wiXT1yLnJhbmdlLEllW3QrXCJzXCJdLnV0Yz1yLnV0Yy5yYW5nZSxJZVt0K1wiT2ZZZWFyXCJdPWZ1bmN0aW9uKHQpe3ZhciByPUllLnllYXIodCkuZ2V0RGF5KCk7cmV0dXJuIE1hdGguZmxvb3IoKEllLmRheU9mWWVhcih0KSsocitlKSU3KS83KX19KSxJZS53ZWVrPUllLnN1bmRheSxJZS53ZWVrcz1JZS5zdW5kYXkucmFuZ2UsSWUud2Vla3MudXRjPUllLnN1bmRheS51dGMucmFuZ2UsSWUud2Vla09mWWVhcj1JZS5zdW5kYXlPZlllYXI7dmFyIE5lPXtcIi1cIjpcIlwiLF86XCIgXCIsMDpcIjBcIn0samU9L15cXHMqXFxkKy8sVmU9L14lLztmdW5jdGlvbiBVZSh0LGUscil7dmFyIG49dDwwP1wiLVwiOlwiXCIsaT0obj8tdDp0KStcIlwiLGE9aS5sZW5ndGg7cmV0dXJuIG4rKGE8cj9uZXcgQXJyYXkoci1hKzEpLmpvaW4oZSkraTppKX1mdW5jdGlvbiBxZShlKXtyZXR1cm4gbmV3IFJlZ0V4cChcIl4oPzpcIitlLm1hcCh0LnJlcXVvdGUpLmpvaW4oXCJ8XCIpK1wiKVwiLFwiaVwiKX1mdW5jdGlvbiBIZSh0KXtmb3IodmFyIGU9bmV3IGIscj0tMSxuPXQubGVuZ3RoOysrcjxuOyllLnNldCh0W3JdLnRvTG93ZXJDYXNlKCkscik7cmV0dXJuIGV9ZnVuY3Rpb24gR2UodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMSkpO3JldHVybiBuPyh0Lnc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWWUodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQuVT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXZSh0LGUscil7amUubGFzdEluZGV4PTA7dmFyIG49amUuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5XPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFhlKHQsZSxyKXtqZS5sYXN0SW5kZXg9MDt2YXIgbj1qZS5leGVjKGUuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8odC55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFplKHQsZSxyKXtqZS5sYXN0SW5kZXg9MDt2YXIgbixpPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBpPyh0Lnk9KG49K2lbMF0pKyhuPjY4PzE5MDA6MmUzKSxyK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiAkZSh0LGUscil7cmV0dXJuL15bKy1dXFxkezR9JC8udGVzdChlPWUuc2xpY2UocixyKzUpKT8odC5aPS1lLHIrNSk6LTF9ZnVuY3Rpb24gSmUodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEtlKHQsZSxyKXtqZS5sYXN0SW5kZXg9MDt2YXIgbj1qZS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFFlKHQsZSxyKXtqZS5sYXN0SW5kZXg9MDt2YXIgbj1qZS5leGVjKGUuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8odC5qPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHRyKHQsZSxyKXtqZS5sYXN0SW5kZXg9MDt2YXIgbj1qZS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5IPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGVyKHQsZSxyKXtqZS5sYXN0SW5kZXg9MDt2YXIgbj1qZS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5NPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHJyKHQsZSxyKXtqZS5sYXN0SW5kZXg9MDt2YXIgbj1qZS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5TPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG5yKHQsZSxyKXtqZS5sYXN0SW5kZXg9MDt2YXIgbj1qZS5leGVjKGUuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8odC5MPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGlyKHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKSxyPWU+MD9cIi1cIjpcIitcIixuPXkoZSkvNjB8MCxpPXkoZSklNjA7cmV0dXJuIHIrVWUobixcIjBcIiwyKStVZShpLFwiMFwiLDIpfWZ1bmN0aW9uIGFyKHQsZSxyKXtWZS5sYXN0SW5kZXg9MDt2YXIgbj1WZS5leGVjKGUuc2xpY2UocixyKzEpKTtyZXR1cm4gbj9yK25bMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIG9yKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPS0xOysrcjxlOyl0W3JdWzBdPXRoaXModFtyXVswXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0wLG49dFtyXTshblsxXShlKTspbj10Wysrcl07cmV0dXJuIG5bMF0oZSl9fXQubG9jYWxlPWZ1bmN0aW9uKGUpe3JldHVybntudW1iZXJGb3JtYXQ6ZnVuY3Rpb24oZSl7dmFyIHI9ZS5kZWNpbWFsLG49ZS50aG91c2FuZHMsaT1lLmdyb3VwaW5nLGE9ZS5jdXJyZW5jeSxvPWkmJm4/ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsYT1bXSxvPTAscz1pWzBdLGw9MDtyPjAmJnM+MCYmKGwrcysxPmUmJihzPU1hdGgubWF4KDEsZS1sKSksYS5wdXNoKHQuc3Vic3RyaW5nKHItPXMscitzKSksISgobCs9cysxKT5lKSk7KXM9aVtvPShvKzEpJWkubGVuZ3RoXTtyZXR1cm4gYS5yZXZlcnNlKCkuam9pbihuKX06ejtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49TGUuZXhlYyhlKSxpPW5bMV18fFwiIFwiLHM9blsyXXx8XCI+XCIsbD1uWzNdfHxcIi1cIixjPW5bNF18fFwiXCIsdT1uWzVdLGg9K25bNl0sZj1uWzddLHA9bls4XSxkPW5bOV0sZz0xLHY9XCJcIixtPVwiXCIseT0hMSx4PSEwO3N3aXRjaChwJiYocD0rcC5zdWJzdHJpbmcoMSkpLCh1fHxcIjBcIj09PWkmJlwiPVwiPT09cykmJih1PWk9XCIwXCIscz1cIj1cIiksZCl7Y2FzZVwiblwiOmY9ITAsZD1cImdcIjticmVhaztjYXNlXCIlXCI6Zz0xMDAsbT1cIiVcIixkPVwiZlwiO2JyZWFrO2Nhc2VcInBcIjpnPTEwMCxtPVwiJVwiLGQ9XCJyXCI7YnJlYWs7Y2FzZVwiYlwiOmNhc2VcIm9cIjpjYXNlXCJ4XCI6Y2FzZVwiWFwiOlwiI1wiPT09YyYmKHY9XCIwXCIrZC50b0xvd2VyQ2FzZSgpKTtjYXNlXCJjXCI6eD0hMTtjYXNlXCJkXCI6eT0hMCxwPTA7YnJlYWs7Y2FzZVwic1wiOmc9LTEsZD1cInJcIn1cIiRcIj09PWMmJih2PWFbMF0sbT1hWzFdKSxcInJcIiE9ZHx8cHx8KGQ9XCJnXCIpLG51bGwhPXAmJihcImdcIj09ZD9wPU1hdGgubWF4KDEsTWF0aC5taW4oMjEscCkpOlwiZVwiIT1kJiZcImZcIiE9ZHx8KHA9TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxwKSkpKSxkPXplLmdldChkKXx8T2U7dmFyIGI9dSYmZjtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49bTtpZih5JiZlJTEpcmV0dXJuXCJcIjt2YXIgYT1lPDB8fDA9PT1lJiYxL2U8MD8oZT0tZSxcIi1cIik6XCItXCI9PT1sP1wiXCI6bDtpZihnPDApe3ZhciBjPXQuZm9ybWF0UHJlZml4KGUscCk7ZT1jLnNjYWxlKGUpLG49Yy5zeW1ib2wrbX1lbHNlIGUqPWc7dmFyIF8sdyxrPShlPWQoZSxwKSkubGFzdEluZGV4T2YoXCIuXCIpO2lmKGs8MCl7dmFyIEE9eD9lLmxhc3RJbmRleE9mKFwiZVwiKTotMTtBPDA/KF89ZSx3PVwiXCIpOihfPWUuc3Vic3RyaW5nKDAsQSksdz1lLnN1YnN0cmluZyhBKSl9ZWxzZSBfPWUuc3Vic3RyaW5nKDAsayksdz1yK2Uuc3Vic3RyaW5nKGsrMSk7IXUmJmYmJihfPW8oXywxLzApKTt2YXIgVD12Lmxlbmd0aCtfLmxlbmd0aCt3Lmxlbmd0aCsoYj8wOmEubGVuZ3RoKSxNPVQ8aD9uZXcgQXJyYXkoVD1oLVQrMSkuam9pbihpKTpcIlwiO3JldHVybiBiJiYoXz1vKE0rXyxNLmxlbmd0aD9oLXcubGVuZ3RoOjEvMCkpLGErPXYsZT1fK3csKFwiPFwiPT09cz9hK2UrTTpcIj5cIj09PXM/TSthK2U6XCJeXCI9PT1zP00uc3Vic3RyaW5nKDAsVD4+PTEpK2ErZStNLnN1YnN0cmluZyhUKTphKyhiP2U6TStlKSkrbn19fShlKSx0aW1lRm9ybWF0OmZ1bmN0aW9uKGUpe3ZhciByPWUuZGF0ZVRpbWUsbj1lLmRhdGUsaT1lLnRpbWUsYT1lLnBlcmlvZHMsbz1lLmRheXMscz1lLnNob3J0RGF5cyxsPWUubW9udGhzLGM9ZS5zaG9ydE1vbnRocztmdW5jdGlvbiB1KHQpe3ZhciBlPXQubGVuZ3RoO2Z1bmN0aW9uIHIocil7Zm9yKHZhciBuLGksYSxvPVtdLHM9LTEsbD0wOysrczxlOykzNz09PXQuY2hhckNvZGVBdChzKSYmKG8ucHVzaCh0LnNsaWNlKGwscykpLG51bGwhPShpPU5lW249dC5jaGFyQXQoKytzKV0pJiYobj10LmNoYXJBdCgrK3MpKSwoYT1fW25dKSYmKG49YShyLG51bGw9PWk/XCJlXCI9PT1uP1wiIFwiOlwiMFwiOmkpKSxvLnB1c2gobiksbD1zKzEpO3JldHVybiBvLnB1c2godC5zbGljZShsLHMpKSxvLmpvaW4oXCJcIil9cmV0dXJuIHIucGFyc2U9ZnVuY3Rpb24oZSl7dmFyIHI9e3k6MTkwMCxtOjAsZDoxLEg6MCxNOjAsUzowLEw6MCxaOm51bGx9O2lmKGgocix0LGUsMCkhPWUubGVuZ3RoKXJldHVybiBudWxsO1wicFwiaW4gciYmKHIuSD1yLkglMTIrMTIqci5wKTt2YXIgbj1udWxsIT1yLlomJkRlIT09UGUsaT1uZXcobj9QZTpEZSk7cmV0dXJuXCJqXCJpbiByP2kuc2V0RnVsbFllYXIoci55LDAsci5qKTpcIldcImluIHJ8fFwiVVwiaW4gcj8oXCJ3XCJpbiByfHwoci53PVwiV1wiaW4gcj8xOjApLGkuc2V0RnVsbFllYXIoci55LDAsMSksaS5zZXRGdWxsWWVhcihyLnksMCxcIldcImluIHI/KHIudys2KSU3Kzcqci5XLShpLmdldERheSgpKzUpJTc6ci53Kzcqci5VLShpLmdldERheSgpKzYpJTcpKTppLnNldEZ1bGxZZWFyKHIueSxyLm0sci5kKSxpLnNldEhvdXJzKHIuSCsoci5aLzEwMHwwKSxyLk0rci5aJTEwMCxyLlMsci5MKSxuP2kuXzppfSxyLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LHJ9ZnVuY3Rpb24gaCh0LGUscixuKXtmb3IodmFyIGksYSxvLHM9MCxsPWUubGVuZ3RoLGM9ci5sZW5ndGg7czxsOyl7aWYobj49YylyZXR1cm4tMTtpZigzNz09PShpPWUuY2hhckNvZGVBdChzKyspKSl7aWYobz1lLmNoYXJBdChzKyspLCEoYT13W28gaW4gTmU/ZS5jaGFyQXQocysrKTpvXSl8fChuPWEodCxyLG4pKTwwKXJldHVybi0xfWVsc2UgaWYoaSE9ci5jaGFyQ29kZUF0KG4rKykpcmV0dXJuLTF9cmV0dXJuIG59dS51dGM9ZnVuY3Rpb24odCl7dmFyIGU9dSh0KTtmdW5jdGlvbiByKHQpe3RyeXt2YXIgcj1uZXcoRGU9UGUpO3JldHVybiByLl89dCxlKHIpfWZpbmFsbHl7RGU9RGF0ZX19cmV0dXJuIHIucGFyc2U9ZnVuY3Rpb24odCl7dHJ5e0RlPVBlO3ZhciByPWUucGFyc2UodCk7cmV0dXJuIHImJnIuX31maW5hbGx5e0RlPURhdGV9fSxyLnRvU3RyaW5nPWUudG9TdHJpbmcscn0sdS5tdWx0aT11LnV0Yy5tdWx0aT1vcjt2YXIgZj10Lm1hcCgpLHA9cWUobyksZD1IZShvKSxnPXFlKHMpLHY9SGUocyksbT1xZShsKSx5PUhlKGwpLHg9cWUoYyksYj1IZShjKTthLmZvckVhY2goZnVuY3Rpb24odCxlKXtmLnNldCh0LnRvTG93ZXJDYXNlKCksZSl9KTt2YXIgXz17YTpmdW5jdGlvbih0KXtyZXR1cm4gc1t0LmdldERheSgpXX0sQTpmdW5jdGlvbih0KXtyZXR1cm4gb1t0LmdldERheSgpXX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gY1t0LmdldE1vbnRoKCldfSxCOmZ1bmN0aW9uKHQpe3JldHVybiBsW3QuZ2V0TW9udGgoKV19LGM6dShyKSxkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0RGF0ZSgpLGUsMil9LGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVWUodC5nZXREYXRlKCksZSwyKX0sSDpmdW5jdGlvbih0LGUpe3JldHVybiBVZSh0LmdldEhvdXJzKCksZSwyKX0sSTpmdW5jdGlvbih0LGUpe3JldHVybiBVZSh0LmdldEhvdXJzKCklMTJ8fDEyLGUsMil9LGo6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVWUoMStJZS5kYXlPZlllYXIodCksZSwzKX0sTDpmdW5jdGlvbih0LGUpe3JldHVybiBVZSh0LmdldE1pbGxpc2Vjb25kcygpLGUsMyl9LG06ZnVuY3Rpb24odCxlKXtyZXR1cm4gVWUodC5nZXRNb250aCgpKzEsZSwyKX0sTTpmdW5jdGlvbih0LGUpe3JldHVybiBVZSh0LmdldE1pbnV0ZXMoKSxlLDIpfSxwOmZ1bmN0aW9uKHQpe3JldHVybiBhWysodC5nZXRIb3VycygpPj0xMildfSxTOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0U2Vjb25kcygpLGUsMil9LFU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVWUoSWUuc3VuZGF5T2ZZZWFyKHQpLGUsMil9LHc6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF5KCl9LFc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVWUoSWUubW9uZGF5T2ZZZWFyKHQpLGUsMil9LHg6dShuKSxYOnUoaSkseTpmdW5jdGlvbih0LGUpe3JldHVybiBVZSh0LmdldEZ1bGxZZWFyKCklMTAwLGUsMil9LFk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVWUodC5nZXRGdWxsWWVhcigpJTFlNCxlLDQpfSxaOmlyLFwiJVwiOmZ1bmN0aW9uKCl7cmV0dXJuXCIlXCJ9fSx3PXthOmZ1bmN0aW9uKHQsZSxyKXtnLmxhc3RJbmRleD0wO3ZhciBuPWcuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC53PXYuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSkscituWzBdLmxlbmd0aCk6LTF9LEE6ZnVuY3Rpb24odCxlLHIpe3AubGFzdEluZGV4PTA7dmFyIG49cC5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Lnc9ZC5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSxyK25bMF0ubGVuZ3RoKTotMX0sYjpmdW5jdGlvbih0LGUscil7eC5sYXN0SW5kZXg9MDt2YXIgbj14LmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQubT1iLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLHIrblswXS5sZW5ndGgpOi0xfSxCOmZ1bmN0aW9uKHQsZSxyKXttLmxhc3RJbmRleD0wO3ZhciBuPW0uZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5tPXkuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSkscituWzBdLmxlbmd0aCk6LTF9LGM6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBoKHQsXy5jLnRvU3RyaW5nKCksZSxyKX0sZDpLZSxlOktlLEg6dHIsSTp0cixqOlFlLEw6bnIsbTpKZSxNOmVyLHA6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWYuZ2V0KGUuc2xpY2UocixyKz0yKS50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gbnVsbD09bj8tMToodC5wPW4scil9LFM6cnIsVTpZZSx3OkdlLFc6V2UseDpmdW5jdGlvbih0LGUscil7cmV0dXJuIGgodCxfLngudG9TdHJpbmcoKSxlLHIpfSxYOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gaCh0LF8uWC50b1N0cmluZygpLGUscil9LHk6WmUsWTpYZSxaOiRlLFwiJVwiOmFyfTtyZXR1cm4gdX0oZSl9fTt2YXIgc3I9dC5sb2NhbGUoe2RlY2ltYWw6XCIuXCIsdGhvdXNhbmRzOlwiLFwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbXCIkXCIsXCJcIl0sZGF0ZVRpbWU6XCIlYSAlYiAlZSAlWCAlWVwiLGRhdGU6XCIlbS8lZC8lWVwiLHRpbWU6XCIlSDolTTolU1wiLHBlcmlvZHM6W1wiQU1cIixcIlBNXCJdLGRheXM6W1wiU3VuZGF5XCIsXCJNb25kYXlcIixcIlR1ZXNkYXlcIixcIldlZG5lc2RheVwiLFwiVGh1cnNkYXlcIixcIkZyaWRheVwiLFwiU2F0dXJkYXlcIl0sc2hvcnREYXlzOltcIlN1blwiLFwiTW9uXCIsXCJUdWVcIixcIldlZFwiLFwiVGh1XCIsXCJGcmlcIixcIlNhdFwiXSxtb250aHM6W1wiSmFudWFyeVwiLFwiRmVicnVhcnlcIixcIk1hcmNoXCIsXCJBcHJpbFwiLFwiTWF5XCIsXCJKdW5lXCIsXCJKdWx5XCIsXCJBdWd1c3RcIixcIlNlcHRlbWJlclwiLFwiT2N0b2JlclwiLFwiTm92ZW1iZXJcIixcIkRlY2VtYmVyXCJdLHNob3J0TW9udGhzOltcIkphblwiLFwiRmViXCIsXCJNYXJcIixcIkFwclwiLFwiTWF5XCIsXCJKdW5cIixcIkp1bFwiLFwiQXVnXCIsXCJTZXBcIixcIk9jdFwiLFwiTm92XCIsXCJEZWNcIl19KTtmdW5jdGlvbiBscigpe310LmZvcm1hdD1zci5udW1iZXJGb3JtYXQsdC5nZW89e30sbHIucHJvdG90eXBlPXtzOjAsdDowLGFkZDpmdW5jdGlvbih0KXt1cih0LHRoaXMudCxjciksdXIoY3Iucyx0aGlzLnMsdGhpcyksdGhpcy5zP3RoaXMudCs9Y3IudDp0aGlzLnM9Y3IudH0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zfX07dmFyIGNyPW5ldyBscjtmdW5jdGlvbiB1cih0LGUscil7dmFyIG49ci5zPXQrZSxpPW4tdCxhPW4taTtyLnQ9dC1hKyhlLWkpfWZ1bmN0aW9uIGhyKHQsZSl7dCYmcHIuaGFzT3duUHJvcGVydHkodC50eXBlKSYmcHJbdC50eXBlXSh0LGUpfXQuZ2VvLnN0cmVhbT1mdW5jdGlvbih0LGUpe3QmJmZyLmhhc093blByb3BlcnR5KHQudHlwZSk/ZnJbdC50eXBlXSh0LGUpOmhyKHQsZSl9O3ZhciBmcj17RmVhdHVyZTpmdW5jdGlvbih0LGUpe2hyKHQuZ2VvbWV0cnksZSl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuZmVhdHVyZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylocihyW25dLmdlb21ldHJ5LGUpfX0scHI9e1NwaGVyZTpmdW5jdGlvbih0LGUpe2Uuc3BoZXJlKCl9LFBvaW50OmZ1bmN0aW9uKHQsZSl7dD10LmNvb3JkaW5hdGVzLGUucG9pbnQodFswXSx0WzFdLHRbMl0pfSxNdWx0aVBvaW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOyl0PXJbbl0sZS5wb2ludCh0WzBdLHRbMV0sdFsyXSl9LExpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtkcih0LmNvb3JkaW5hdGVzLGUsMCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspZHIocltuXSxlLDApfSxQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7Z3IodC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylncihyW25dLGUpfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5nZW9tZXRyaWVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaHIocltuXSxlKX19O2Z1bmN0aW9uIGRyKHQsZSxyKXt2YXIgbixpPS0xLGE9dC5sZW5ndGgtcjtmb3IoZS5saW5lU3RhcnQoKTsrK2k8YTspbj10W2ldLGUucG9pbnQoblswXSxuWzFdLG5bMl0pO2UubGluZUVuZCgpfWZ1bmN0aW9uIGdyKHQsZSl7dmFyIHI9LTEsbj10Lmxlbmd0aDtmb3IoZS5wb2x5Z29uU3RhcnQoKTsrK3I8bjspZHIodFtyXSxlLDEpO2UucG9seWdvbkVuZCgpfXQuZ2VvLmFyZWE9ZnVuY3Rpb24oZSl7cmV0dXJuIHZyPTAsdC5nZW8uc3RyZWFtKGUsQ3IpLHZyfTt2YXIgdnIsbXIseXIseHIsYnIsX3Isd3Isa3IsQXIsVHIsTXIsU3IsRXI9bmV3IGxyLENyPXtzcGhlcmU6ZnVuY3Rpb24oKXt2cis9NCpUdH0scG9pbnQ6UCxsaW5lU3RhcnQ6UCxsaW5lRW5kOlAscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7RXIucmVzZXQoKSxDci5saW5lU3RhcnQ9THJ9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgdD0yKkVyO3ZyKz10PDA/NCpUdCt0OnQsQ3IubGluZVN0YXJ0PUNyLmxpbmVFbmQ9Q3IucG9pbnQ9UH19O2Z1bmN0aW9uIExyKCl7dmFyIHQsZSxyLG4saTtmdW5jdGlvbiBhKHQsZSl7ZT1lKkN0LzIrVHQvNDt2YXIgYT0odCo9Q3QpLXIsbz1hPj0wPzE6LTEscz1vKmEsbD1NYXRoLmNvcyhlKSxjPU1hdGguc2luKGUpLHU9aSpjLGg9bipsK3UqTWF0aC5jb3MocyksZj11Km8qTWF0aC5zaW4ocyk7RXIuYWRkKE1hdGguYXRhbjIoZixoKSkscj10LG49bCxpPWN9Q3IucG9pbnQ9ZnVuY3Rpb24obyxzKXtDci5wb2ludD1hLHI9KHQ9bykqQ3Qsbj1NYXRoLmNvcyhzPShlPXMpKkN0LzIrVHQvNCksaT1NYXRoLnNpbihzKX0sQ3IubGluZUVuZD1mdW5jdGlvbigpe2EodCxlKX19ZnVuY3Rpb24genIodCl7dmFyIGU9dFswXSxyPXRbMV0sbj1NYXRoLmNvcyhyKTtyZXR1cm5bbipNYXRoLmNvcyhlKSxuKk1hdGguc2luKGUpLE1hdGguc2luKHIpXX1mdW5jdGlvbiBPcih0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXX1mdW5jdGlvbiBJcih0LGUpe3JldHVyblt0WzFdKmVbMl0tdFsyXSplWzFdLHRbMl0qZVswXS10WzBdKmVbMl0sdFswXSplWzFdLXRbMV0qZVswXV19ZnVuY3Rpb24gRHIodCxlKXt0WzBdKz1lWzBdLHRbMV0rPWVbMV0sdFsyXSs9ZVsyXX1mdW5jdGlvbiBQcih0LGUpe3JldHVyblt0WzBdKmUsdFsxXSplLHRbMl0qZV19ZnVuY3Rpb24gUnIodCl7dmFyIGU9TWF0aC5zcXJ0KHRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdKTt0WzBdLz1lLHRbMV0vPWUsdFsyXS89ZX1mdW5jdGlvbiBGcih0KXtyZXR1cm5bTWF0aC5hdGFuMih0WzFdLHRbMF0pLER0KHRbMl0pXX1mdW5jdGlvbiBCcih0LGUpe3JldHVybiB5KHRbMF0tZVswXSk8a3QmJnkodFsxXS1lWzFdKTxrdH10Lmdlby5ib3VuZHM9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saSxhLG8scyxsLGMsdSxoLGY9e3BvaW50OnAsbGluZVN0YXJ0OmcsbGluZUVuZDp2LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2YucG9pbnQ9bSxmLmxpbmVTdGFydD14LGYubGluZUVuZD1iLGM9MCxDci5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0NyLnBvbHlnb25FbmQoKSxmLnBvaW50PXAsZi5saW5lU3RhcnQ9ZyxmLmxpbmVFbmQ9dixFcjwwPyhlPS0obj0xODApLHI9LShpPTkwKSk6Yz5rdD9pPTkwOmM8LWt0JiYocj0tOTApLGhbMF09ZSxoWzFdPW59fTtmdW5jdGlvbiBwKHQsYSl7dS5wdXNoKGg9W2U9dCxuPXRdKSxhPHImJihyPWEpLGE+aSYmKGk9YSl9ZnVuY3Rpb24gZCh0LG8pe3ZhciBzPXpyKFt0KkN0LG8qQ3RdKTtpZihsKXt2YXIgYz1JcihsLHMpLHU9SXIoW2NbMV0sLWNbMF0sMF0sYyk7UnIodSksdT1Gcih1KTt2YXIgaD10LWEsZj1oPjA/MTotMSxkPXVbMF0qTHQqZixnPXkoaCk+MTgwO2lmKGdeKGYqYTxkJiZkPGYqdCkpKHY9dVsxXSpMdCk+aSYmKGk9dik7ZWxzZSBpZihnXihmKmE8KGQ9KGQrMzYwKSUzNjAtMTgwKSYmZDxmKnQpKXt2YXIgdjsodj0tdVsxXSpMdCk8ciYmKHI9dil9ZWxzZSBvPHImJihyPW8pLG8+aSYmKGk9byk7Zz90PGE/XyhlLHQpPl8oZSxuKSYmKG49dCk6Xyh0LG4pPl8oZSxuKSYmKGU9dCk6bj49ZT8odDxlJiYoZT10KSx0Pm4mJihuPXQpKTp0PmE/XyhlLHQpPl8oZSxuKSYmKG49dCk6Xyh0LG4pPl8oZSxuKSYmKGU9dCl9ZWxzZSBwKHQsbyk7bD1zLGE9dH1mdW5jdGlvbiBnKCl7Zi5wb2ludD1kfWZ1bmN0aW9uIHYoKXtoWzBdPWUsaFsxXT1uLGYucG9pbnQ9cCxsPW51bGx9ZnVuY3Rpb24gbSh0LGUpe2lmKGwpe3ZhciByPXQtYTtjKz15KHIpPjE4MD9yKyhyPjA/MzYwOi0zNjApOnJ9ZWxzZSBvPXQscz1lO0NyLnBvaW50KHQsZSksZCh0LGUpfWZ1bmN0aW9uIHgoKXtDci5saW5lU3RhcnQoKX1mdW5jdGlvbiBiKCl7bShvLHMpLENyLmxpbmVFbmQoKSx5KGMpPmt0JiYoZT0tKG49MTgwKSksaFswXT1lLGhbMV09bixsPW51bGx9ZnVuY3Rpb24gXyh0LGUpe3JldHVybihlLT10KTwwP2UrMzYwOmV9ZnVuY3Rpb24gdyh0LGUpe3JldHVybiB0WzBdLWVbMF19ZnVuY3Rpb24gayh0LGUpe3JldHVybiBlWzBdPD1lWzFdP2VbMF08PXQmJnQ8PWVbMV06dDxlWzBdfHxlWzFdPHR9cmV0dXJuIGZ1bmN0aW9uKGEpe2lmKGk9bj0tKGU9cj0xLzApLHU9W10sdC5nZW8uc3RyZWFtKGEsZiksYz11Lmxlbmd0aCl7dS5zb3J0KHcpO2Zvcih2YXIgbz0xLHM9W2c9dVswXV07bzxjOysrbylrKChwPXVbb10pWzBdLGcpfHxrKHBbMV0sZyk/KF8oZ1swXSxwWzFdKT5fKGdbMF0sZ1sxXSkmJihnWzFdPXBbMV0pLF8ocFswXSxnWzFdKT5fKGdbMF0sZ1sxXSkmJihnWzBdPXBbMF0pKTpzLnB1c2goZz1wKTtmb3IodmFyIGwsYyxwLGQ9LTEvMCxnPShvPTAsc1tjPXMubGVuZ3RoLTFdKTtvPD1jO2c9cCwrK28pcD1zW29dLChsPV8oZ1sxXSxwWzBdKSk+ZCYmKGQ9bCxlPXBbMF0sbj1nWzFdKX1yZXR1cm4gdT1oPW51bGwsZT09PTEvMHx8cj09PTEvMD9bW05hTixOYU5dLFtOYU4sTmFOXV06W1tlLHJdLFtuLGldXX19KCksdC5nZW8uY2VudHJvaWQ9ZnVuY3Rpb24oZSl7bXI9eXI9eHI9YnI9X3I9d3I9a3I9QXI9VHI9TXI9U3I9MCx0Lmdlby5zdHJlYW0oZSxOcik7dmFyIHI9VHIsbj1NcixpPVNyLGE9cipyK24qbitpKmk7cmV0dXJuIGE8QXQmJihyPXdyLG49a3IsaT1Bcix5cjxrdCYmKHI9eHIsbj1icixpPV9yKSwoYT1yKnIrbipuK2kqaSk8QXQpP1tOYU4sTmFOXTpbTWF0aC5hdGFuMihuLHIpKkx0LER0KGkvTWF0aC5zcXJ0KGEpKSpMdF19O3ZhciBOcj17c3BoZXJlOlAscG9pbnQ6anIsbGluZVN0YXJ0OlVyLGxpbmVFbmQ6cXIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7TnIubGluZVN0YXJ0PUhyfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7TnIubGluZVN0YXJ0PVVyfX07ZnVuY3Rpb24ganIodCxlKXt0Kj1DdDt2YXIgcj1NYXRoLmNvcyhlKj1DdCk7VnIocipNYXRoLmNvcyh0KSxyKk1hdGguc2luKHQpLE1hdGguc2luKGUpKX1mdW5jdGlvbiBWcih0LGUscil7eHIrPSh0LXhyKS8rK21yLGJyKz0oZS1icikvbXIsX3IrPShyLV9yKS9tcn1mdW5jdGlvbiBVcigpe3ZhciB0LGUscjtmdW5jdGlvbiBuKG4saSl7bio9Q3Q7dmFyIGE9TWF0aC5jb3MoaSo9Q3QpLG89YSpNYXRoLmNvcyhuKSxzPWEqTWF0aC5zaW4obiksbD1NYXRoLnNpbihpKSxjPU1hdGguYXRhbjIoTWF0aC5zcXJ0KChjPWUqbC1yKnMpKmMrKGM9cipvLXQqbCkqYysoYz10KnMtZSpvKSpjKSx0Km8rZSpzK3IqbCk7eXIrPWMsd3IrPWMqKHQrKHQ9bykpLGtyKz1jKihlKyhlPXMpKSxBcis9Yyoocisocj1sKSksVnIodCxlLHIpfU5yLnBvaW50PWZ1bmN0aW9uKGksYSl7aSo9Q3Q7dmFyIG89TWF0aC5jb3MoYSo9Q3QpO3Q9bypNYXRoLmNvcyhpKSxlPW8qTWF0aC5zaW4oaSkscj1NYXRoLnNpbihhKSxOci5wb2ludD1uLFZyKHQsZSxyKX19ZnVuY3Rpb24gcXIoKXtOci5wb2ludD1qcn1mdW5jdGlvbiBIcigpe3ZhciB0LGUscixuLGk7ZnVuY3Rpb24gYSh0LGUpe3QqPUN0O3ZhciBhPU1hdGguY29zKGUqPUN0KSxvPWEqTWF0aC5jb3ModCkscz1hKk1hdGguc2luKHQpLGw9TWF0aC5zaW4oZSksYz1uKmwtaSpzLHU9aSpvLXIqbCxoPXIqcy1uKm8sZj1NYXRoLnNxcnQoYypjK3UqdStoKmgpLHA9cipvK24qcytpKmwsZD1mJiYtSXQocCkvZixnPU1hdGguYXRhbjIoZixwKTtUcis9ZCpjLE1yKz1kKnUsU3IrPWQqaCx5cis9Zyx3cis9Zyoocisocj1vKSksa3IrPWcqKG4rKG49cykpLEFyKz1nKihpKyhpPWwpKSxWcihyLG4saSl9TnIucG9pbnQ9ZnVuY3Rpb24obyxzKXt0PW8sZT1zLE5yLnBvaW50PWEsbyo9Q3Q7dmFyIGw9TWF0aC5jb3Mocyo9Q3QpO3I9bCpNYXRoLmNvcyhvKSxuPWwqTWF0aC5zaW4obyksaT1NYXRoLnNpbihzKSxWcihyLG4saSl9LE5yLmxpbmVFbmQ9ZnVuY3Rpb24oKXthKHQsZSksTnIubGluZUVuZD1xcixOci5wb2ludD1qcn19ZnVuY3Rpb24gR3IodCxlKXtmdW5jdGlvbiByKHIsbil7cmV0dXJuIHI9dChyLG4pLGUoclswXSxyWzFdKX1yZXR1cm4gdC5pbnZlcnQmJmUuaW52ZXJ0JiYoci5pbnZlcnQ9ZnVuY3Rpb24ocixuKXtyZXR1cm4ocj1lLmludmVydChyLG4pKSYmdC5pbnZlcnQoclswXSxyWzFdKX0pLHJ9ZnVuY3Rpb24gWXIoKXtyZXR1cm4hMH1mdW5jdGlvbiBXcih0LGUscixuLGkpe3ZhciBhPVtdLG89W107aWYodC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCEoKGU9dC5sZW5ndGgtMSk8PTApKXt2YXIgZSxyPXRbMF0sbj10W2VdO2lmKEJyKHIsbikpe2kubGluZVN0YXJ0KCk7Zm9yKHZhciBzPTA7czxlOysrcylpLnBvaW50KChyPXRbc10pWzBdLHJbMV0pO2kubGluZUVuZCgpfWVsc2V7dmFyIGw9bmV3IFpyKHIsdCxudWxsLCEwKSxjPW5ldyBacihyLG51bGwsbCwhMSk7bC5vPWMsYS5wdXNoKGwpLG8ucHVzaChjKSxsPW5ldyBacihuLHQsbnVsbCwhMSksYz1uZXcgWnIobixudWxsLGwsITApLGwubz1jLGEucHVzaChsKSxvLnB1c2goYyl9fX0pLG8uc29ydChlKSxYcihhKSxYcihvKSxhLmxlbmd0aCl7Zm9yKHZhciBzPTAsbD1yLGM9by5sZW5ndGg7czxjOysrcylvW3NdLmU9bD0hbDtmb3IodmFyIHUsaCxmPWFbMF07Oyl7Zm9yKHZhciBwPWYsZD0hMDtwLnY7KWlmKChwPXAubik9PT1mKXJldHVybjt1PXAueixpLmxpbmVTdGFydCgpO2Rve2lmKHAudj1wLm8udj0hMCxwLmUpe2lmKGQpZm9yKHM9MCxjPXUubGVuZ3RoO3M8YzsrK3MpaS5wb2ludCgoaD11W3NdKVswXSxoWzFdKTtlbHNlIG4ocC54LHAubi54LDEsaSk7cD1wLm59ZWxzZXtpZihkKWZvcihzPSh1PXAucC56KS5sZW5ndGgtMTtzPj0wOy0tcylpLnBvaW50KChoPXVbc10pWzBdLGhbMV0pO2Vsc2UgbihwLngscC5wLngsLTEsaSk7cD1wLnB9dT0ocD1wLm8pLnosZD0hZH13aGlsZSghcC52KTtpLmxpbmVFbmQoKX19fWZ1bmN0aW9uIFhyKHQpe2lmKGU9dC5sZW5ndGgpe2Zvcih2YXIgZSxyLG49MCxpPXRbMF07KytuPGU7KWkubj1yPXRbbl0sci5wPWksaT1yO2kubj1yPXRbMF0sci5wPWl9fWZ1bmN0aW9uIFpyKHQsZSxyLG4pe3RoaXMueD10LHRoaXMuej1lLHRoaXMubz1yLHRoaXMuZT1uLHRoaXMudj0hMSx0aGlzLm49dGhpcy5wPW51bGx9ZnVuY3Rpb24gJHIoZSxyLG4saSl7cmV0dXJuIGZ1bmN0aW9uKGEsbyl7dmFyIHMsbD1yKG8pLGM9YS5pbnZlcnQoaVswXSxpWzFdKSx1PXtwb2ludDpoLGxpbmVTdGFydDpwLGxpbmVFbmQ6ZCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt1LnBvaW50PWIsdS5saW5lU3RhcnQ9Xyx1LmxpbmVFbmQ9dyxzPVtdLGc9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt1LnBvaW50PWgsdS5saW5lU3RhcnQ9cCx1LmxpbmVFbmQ9ZCxzPXQubWVyZ2Uocyk7dmFyIGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLG49dFsxXSxpPVtNYXRoLnNpbihyKSwtTWF0aC5jb3MociksMF0sYT0wLG89MDtFci5yZXNldCgpO2Zvcih2YXIgcz0wLGw9ZS5sZW5ndGg7czxsOysrcyl7dmFyIGM9ZVtzXSx1PWMubGVuZ3RoO2lmKHUpZm9yKHZhciBoPWNbMF0sZj1oWzBdLHA9aFsxXS8yK1R0LzQsZD1NYXRoLnNpbihwKSxnPU1hdGguY29zKHApLHY9MTs7KXt2PT09dSYmKHY9MCk7dmFyIG09KHQ9Y1t2XSlbMF0seT10WzFdLzIrVHQvNCx4PU1hdGguc2luKHkpLGI9TWF0aC5jb3MoeSksXz1tLWYsdz1fPj0wPzE6LTEsaz13Kl8sQT1rPlR0LFQ9ZCp4O2lmKEVyLmFkZChNYXRoLmF0YW4yKFQqdypNYXRoLnNpbihrKSxnKmIrVCpNYXRoLmNvcyhrKSkpLGErPUE/Xyt3Kk10Ol8sQV5mPj1yXm0+PXIpe3ZhciBNPUlyKHpyKGgpLHpyKHQpKTtScihNKTt2YXIgUz1JcihpLE0pO1JyKFMpO3ZhciBFPShBXl8+PTA/LTE6MSkqRHQoU1syXSk7KG4+RXx8bj09PUUmJihNWzBdfHxNWzFdKSkmJihvKz1BXl8+PTA/MTotMSl9aWYoIXYrKylicmVhaztmPW0sZD14LGc9YixoPXR9fXJldHVybihhPC1rdHx8YTxrdCYmRXI8LWt0KV4xJm99KGMsZyk7cy5sZW5ndGg/KHh8fChvLnBvbHlnb25TdGFydCgpLHg9ITApLFdyKHMsUXIsZSxuLG8pKTplJiYoeHx8KG8ucG9seWdvblN0YXJ0KCkseD0hMCksby5saW5lU3RhcnQoKSxuKG51bGwsbnVsbCwxLG8pLG8ubGluZUVuZCgpKSx4JiYoby5wb2x5Z29uRW5kKCkseD0hMSkscz1nPW51bGx9LHNwaGVyZTpmdW5jdGlvbigpe28ucG9seWdvblN0YXJ0KCksby5saW5lU3RhcnQoKSxuKG51bGwsbnVsbCwxLG8pLG8ubGluZUVuZCgpLG8ucG9seWdvbkVuZCgpfX07ZnVuY3Rpb24gaCh0LHIpe3ZhciBuPWEodCxyKTtlKHQ9blswXSxyPW5bMV0pJiZvLnBvaW50KHQscil9ZnVuY3Rpb24gZih0LGUpe3ZhciByPWEodCxlKTtsLnBvaW50KHJbMF0sclsxXSl9ZnVuY3Rpb24gcCgpe3UucG9pbnQ9ZixsLmxpbmVTdGFydCgpfWZ1bmN0aW9uIGQoKXt1LnBvaW50PWgsbC5saW5lRW5kKCl9dmFyIGcsdixtPUtyKCkseT1yKG0pLHg9ITE7ZnVuY3Rpb24gYih0LGUpe3YucHVzaChbdCxlXSk7dmFyIHI9YSh0LGUpO3kucG9pbnQoclswXSxyWzFdKX1mdW5jdGlvbiBfKCl7eS5saW5lU3RhcnQoKSx2PVtdfWZ1bmN0aW9uIHcoKXtiKHZbMF1bMF0sdlswXVsxXSkseS5saW5lRW5kKCk7dmFyIHQsZT15LmNsZWFuKCkscj1tLmJ1ZmZlcigpLG49ci5sZW5ndGg7aWYodi5wb3AoKSxnLnB1c2godiksdj1udWxsLG4paWYoMSZlKXt2YXIgaSxhPS0xO2lmKChuPSh0PXJbMF0pLmxlbmd0aC0xKT4wKXtmb3IoeHx8KG8ucG9seWdvblN0YXJ0KCkseD0hMCksby5saW5lU3RhcnQoKTsrK2E8bjspby5wb2ludCgoaT10W2FdKVswXSxpWzFdKTtvLmxpbmVFbmQoKX19ZWxzZSBuPjEmJjImZSYmci5wdXNoKHIucG9wKCkuY29uY2F0KHIuc2hpZnQoKSkpLHMucHVzaChyLmZpbHRlcihKcikpfXJldHVybiB1fX1mdW5jdGlvbiBKcih0KXtyZXR1cm4gdC5sZW5ndGg+MX1mdW5jdGlvbiBLcigpe3ZhciB0LGU9W107cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2UucHVzaCh0PVtdKX0scG9pbnQ6ZnVuY3Rpb24oZSxyKXt0LnB1c2goW2Uscl0pfSxsaW5lRW5kOlAsYnVmZmVyOmZ1bmN0aW9uKCl7dmFyIHI9ZTtyZXR1cm4gZT1bXSx0PW51bGwscn0scmVqb2luOmZ1bmN0aW9uKCl7ZS5sZW5ndGg+MSYmZS5wdXNoKGUucG9wKCkuY29uY2F0KGUuc2hpZnQoKSkpfX19ZnVuY3Rpb24gUXIodCxlKXtyZXR1cm4oKHQ9dC54KVswXTwwP3RbMV0tRXQta3Q6RXQtdFsxXSktKChlPWUueClbMF08MD9lWzFdLUV0LWt0OkV0LWVbMV0pfXZhciB0bj0kcihZcixmdW5jdGlvbih0KXt2YXIgZSxyPU5hTixuPU5hTixpPU5hTjtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dC5saW5lU3RhcnQoKSxlPTF9LHBvaW50OmZ1bmN0aW9uKGEsbyl7dmFyIHM9YT4wP1R0Oi1UdCxsPXkoYS1yKTt5KGwtVHQpPGt0Pyh0LnBvaW50KHIsbj0obitvKS8yPjA/RXQ6LUV0KSx0LnBvaW50KGksbiksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHMsbiksdC5wb2ludChhLG4pLGU9MCk6aSE9PXMmJmw+PVR0JiYoeShyLWkpPGt0JiYoci09aSprdCkseShhLXMpPGt0JiYoYS09cyprdCksbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG89TWF0aC5zaW4odC1yKTtyZXR1cm4geShvKT5rdD9NYXRoLmF0YW4oKE1hdGguc2luKGUpKihhPU1hdGguY29zKG4pKSpNYXRoLnNpbihyKS1NYXRoLnNpbihuKSooaT1NYXRoLmNvcyhlKSkqTWF0aC5zaW4odCkpLyhpKmEqbykpOihlK24pLzJ9KHIsbixhLG8pLHQucG9pbnQoaSxuKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQocyxuKSxlPTApLHQucG9pbnQocj1hLG49byksaT1zfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCkscj1uPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1lfX19LGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpO2lmKG51bGw9PXQpaT1yKkV0LG4ucG9pbnQoLVR0LGkpLG4ucG9pbnQoMCxpKSxuLnBvaW50KFR0LGkpLG4ucG9pbnQoVHQsMCksbi5wb2ludChUdCwtaSksbi5wb2ludCgwLC1pKSxuLnBvaW50KC1UdCwtaSksbi5wb2ludCgtVHQsMCksbi5wb2ludCgtVHQsaSk7ZWxzZSBpZih5KHRbMF0tZVswXSk+a3Qpe3ZhciBhPXRbMF08ZVswXT9UdDotVHQ7aT1yKmEvMixuLnBvaW50KC1hLGkpLG4ucG9pbnQoMCxpKSxuLnBvaW50KGEsaSl9ZWxzZSBuLnBvaW50KGVbMF0sZVsxXSl9LFstVHQsLVR0LzJdKTtmdW5jdGlvbiBlbih0LGUscixuKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIGEsbz1pLmEscz1pLmIsbD1vLngsYz1vLnksdT0wLGg9MSxmPXMueC1sLHA9cy55LWM7aWYoYT10LWwsZnx8IShhPjApKXtpZihhLz1mLGY8MCl7aWYoYTx1KXJldHVybjthPGgmJihoPWEpfWVsc2UgaWYoZj4wKXtpZihhPmgpcmV0dXJuO2E+dSYmKHU9YSl9aWYoYT1yLWwsZnx8IShhPDApKXtpZihhLz1mLGY8MCl7aWYoYT5oKXJldHVybjthPnUmJih1PWEpfWVsc2UgaWYoZj4wKXtpZihhPHUpcmV0dXJuO2E8aCYmKGg9YSl9aWYoYT1lLWMscHx8IShhPjApKXtpZihhLz1wLHA8MCl7aWYoYTx1KXJldHVybjthPGgmJihoPWEpfWVsc2UgaWYocD4wKXtpZihhPmgpcmV0dXJuO2E+dSYmKHU9YSl9aWYoYT1uLWMscHx8IShhPDApKXtpZihhLz1wLHA8MCl7aWYoYT5oKXJldHVybjthPnUmJih1PWEpfWVsc2UgaWYocD4wKXtpZihhPHUpcmV0dXJuO2E8aCYmKGg9YSl9cmV0dXJuIHU+MCYmKGkuYT17eDpsK3UqZix5OmMrdSpwfSksaDwxJiYoaS5iPXt4OmwraCpmLHk6YytoKnB9KSxpfX19fX19dmFyIHJuPTFlOTtmdW5jdGlvbiBubihlLHIsbixpKXtyZXR1cm4gZnVuY3Rpb24obCl7dmFyIGMsdSxoLGYscCxkLGcsdixtLHkseCxiPWwsXz1LcigpLHc9ZW4oZSxyLG4saSksaz17cG9pbnQ6TSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtrLnBvaW50PVMsdSYmdS5wdXNoKGg9W10pO3k9ITAsbT0hMSxnPXY9TmFOfSxsaW5lRW5kOmZ1bmN0aW9uKCl7YyYmKFMoZixwKSxkJiZtJiZfLnJlam9pbigpLGMucHVzaChfLmJ1ZmZlcigpKSk7ay5wb2ludD1NLG0mJmwubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtsPV8sYz1bXSx1PVtdLHg9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtsPWIsYz10Lm1lcmdlKGMpO3ZhciByPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dS5sZW5ndGgsbj10WzFdLGk9MDtpPHI7KytpKWZvcih2YXIgYSxvPTEscz11W2ldLGw9cy5sZW5ndGgsYz1zWzBdO288bDsrK28pYT1zW29dLGNbMV08PW4/YVsxXT5uJiZPdChjLGEsdCk+MCYmKytlOmFbMV08PW4mJk90KGMsYSx0KTwwJiYtLWUsYz1hO3JldHVybiAwIT09ZX0oW2UsaV0pLG49eCYmcixhPWMubGVuZ3RoOyhufHxhKSYmKGwucG9seWdvblN0YXJ0KCksbiYmKGwubGluZVN0YXJ0KCksQShudWxsLG51bGwsMSxsKSxsLmxpbmVFbmQoKSksYSYmV3IoYyxvLHIsQSxsKSxsLnBvbHlnb25FbmQoKSksYz11PWg9bnVsbH19O2Z1bmN0aW9uIEEodCxvLGwsYyl7dmFyIHU9MCxoPTA7aWYobnVsbD09dHx8KHU9YSh0LGwpKSE9PShoPWEobyxsKSl8fHModCxvKTwwXmw+MClkb3tjLnBvaW50KDA9PT11fHwzPT09dT9lOm4sdT4xP2k6cil9d2hpbGUoKHU9KHUrbCs0KSU0KSE9PWgpO2Vsc2UgYy5wb2ludChvWzBdLG9bMV0pfWZ1bmN0aW9uIFQodCxhKXtyZXR1cm4gZTw9dCYmdDw9biYmcjw9YSYmYTw9aX1mdW5jdGlvbiBNKHQsZSl7VCh0LGUpJiZsLnBvaW50KHQsZSl9ZnVuY3Rpb24gUyh0LGUpe3ZhciByPVQodD1NYXRoLm1heCgtcm4sTWF0aC5taW4ocm4sdCkpLGU9TWF0aC5tYXgoLXJuLE1hdGgubWluKHJuLGUpKSk7aWYodSYmaC5wdXNoKFt0LGVdKSx5KWY9dCxwPWUsZD1yLHk9ITEsciYmKGwubGluZVN0YXJ0KCksbC5wb2ludCh0LGUpKTtlbHNlIGlmKHImJm0pbC5wb2ludCh0LGUpO2Vsc2V7dmFyIG49e2E6e3g6Zyx5OnZ9LGI6e3g6dCx5OmV9fTt3KG4pPyhtfHwobC5saW5lU3RhcnQoKSxsLnBvaW50KG4uYS54LG4uYS55KSksbC5wb2ludChuLmIueCxuLmIueSkscnx8bC5saW5lRW5kKCkseD0hMSk6ciYmKGwubGluZVN0YXJ0KCksbC5wb2ludCh0LGUpLHg9ITEpfWc9dCx2PWUsbT1yfXJldHVybiBrfTtmdW5jdGlvbiBhKHQsaSl7cmV0dXJuIHkodFswXS1lKTxrdD9pPjA/MDozOnkodFswXS1uKTxrdD9pPjA/MjoxOnkodFsxXS1yKTxrdD9pPjA/MTowOmk+MD8zOjJ9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBzKHQueCxlLngpfWZ1bmN0aW9uIHModCxlKXt2YXIgcj1hKHQsMSksbj1hKGUsMSk7cmV0dXJuIHIhPT1uP3ItbjowPT09cj9lWzFdLXRbMV06MT09PXI/dFswXS1lWzBdOjI9PT1yP3RbMV0tZVsxXTplWzBdLXRbMF19fWZ1bmN0aW9uIGFuKHQpe3ZhciBlPTAscj1UdC8zLG49Q24odCksaT1uKGUscik7cmV0dXJuIGkucGFyYWxsZWxzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oZT10WzBdKlR0LzE4MCxyPXRbMV0qVHQvMTgwKTpbZS9UdCoxODAsci9UdCoxODBdfSxpfWZ1bmN0aW9uIG9uKHQsZSl7dmFyIHI9TWF0aC5zaW4odCksbj0ocitNYXRoLnNpbihlKSkvMixpPTErciooMipuLXIpLGE9TWF0aC5zcXJ0KGkpL247ZnVuY3Rpb24gbyh0LGUpe3ZhciByPU1hdGguc3FydChpLTIqbipNYXRoLnNpbihlKSkvbjtyZXR1cm5bcipNYXRoLnNpbih0Kj1uKSxhLXIqTWF0aC5jb3ModCldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWEtZTtyZXR1cm5bTWF0aC5hdGFuMih0LHIpL24sRHQoKGktKHQqdCtyKnIpKm4qbikvKDIqbikpXX0sb310Lmdlby5jbGlwRXh0ZW50PWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG4saSxhLG89e3N0cmVhbTpmdW5jdGlvbih0KXtyZXR1cm4gaSYmKGkudmFsaWQ9ITEpLChpPWEodCkpLnZhbGlkPSEwLGl9LGV4dGVudDpmdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1ubih0PStzWzBdWzBdLGU9K3NbMF1bMV0scj0rc1sxXVswXSxuPStzWzFdWzFdKSxpJiYoaS52YWxpZD0hMSxpPW51bGwpLG8pOltbdCxlXSxbcixuXV19fTtyZXR1cm4gby5leHRlbnQoW1swLDBdLFs5NjAsNTAwXV0pfSwodC5nZW8uY29uaWNFcXVhbEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gYW4ob24pfSkucmF3PW9uLHQuZ2VvLmFsYmVycz1mdW5jdGlvbigpe3JldHVybiB0Lmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbOTYsMF0pLmNlbnRlcihbLS42LDM4LjddKS5wYXJhbGxlbHMoWzI5LjUsNDUuNV0pLnNjYWxlKDEwNzApfSx0Lmdlby5hbGJlcnNVc2E9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saSxhPXQuZ2VvLmFsYmVycygpLG89dC5nZW8uY29uaWNFcXVhbEFyZWEoKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLHM9dC5nZW8uY29uaWNFcXVhbEFyZWEoKS5yb3RhdGUoWzE1NywwXSkuY2VudGVyKFstMywxOS45XSkucGFyYWxsZWxzKFs4LDE4XSksbD17cG9pbnQ6ZnVuY3Rpb24odCxyKXtlPVt0LHJdfX07ZnVuY3Rpb24gYyh0KXt2YXIgYT10WzBdLG89dFsxXTtyZXR1cm4gZT1udWxsLHIoYSxvKSxlfHwobihhLG8pLGUpfHxpKGEsbyksZX1yZXR1cm4gYy5pbnZlcnQ9ZnVuY3Rpb24odCl7dmFyIGU9YS5zY2FsZSgpLHI9YS50cmFuc2xhdGUoKSxuPSh0WzBdLXJbMF0pL2UsaT0odFsxXS1yWzFdKS9lO3JldHVybihpPj0uMTImJmk8LjIzNCYmbj49LS40MjUmJm48LS4yMTQ/bzppPj0uMTY2JiZpPC4yMzQmJm4+PS0uMjE0JiZuPC0uMTE1P3M6YSkuaW52ZXJ0KHQpfSxjLnN0cmVhbT1mdW5jdGlvbih0KXt2YXIgZT1hLnN0cmVhbSh0KSxyPW8uc3RyZWFtKHQpLG49cy5zdHJlYW0odCk7cmV0dXJue3BvaW50OmZ1bmN0aW9uKHQsaSl7ZS5wb2ludCh0LGkpLHIucG9pbnQodCxpKSxuLnBvaW50KHQsaSl9LHNwaGVyZTpmdW5jdGlvbigpe2Uuc3BoZXJlKCksci5zcGhlcmUoKSxuLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLmxpbmVTdGFydCgpLHIubGluZVN0YXJ0KCksbi5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2UubGluZUVuZCgpLHIubGluZUVuZCgpLG4ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25TdGFydCgpLHIucG9seWdvblN0YXJ0KCksbi5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2UucG9seWdvbkVuZCgpLHIucG9seWdvbkVuZCgpLG4ucG9seWdvbkVuZCgpfX19LGMucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhLnByZWNpc2lvbih0KSxvLnByZWNpc2lvbih0KSxzLnByZWNpc2lvbih0KSxjKTphLnByZWNpc2lvbigpfSxjLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhLnNjYWxlKHQpLG8uc2NhbGUoLjM1KnQpLHMuc2NhbGUodCksYy50cmFuc2xhdGUoYS50cmFuc2xhdGUoKSkpOmEuc2NhbGUoKX0sYy50cmFuc2xhdGU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGEudHJhbnNsYXRlKCk7dmFyIGU9YS5zY2FsZSgpLHU9K3RbMF0saD0rdFsxXTtyZXR1cm4gcj1hLnRyYW5zbGF0ZSh0KS5jbGlwRXh0ZW50KFtbdS0uNDU1KmUsaC0uMjM4KmVdLFt1Ky40NTUqZSxoKy4yMzgqZV1dKS5zdHJlYW0obCkucG9pbnQsbj1vLnRyYW5zbGF0ZShbdS0uMzA3KmUsaCsuMjAxKmVdKS5jbGlwRXh0ZW50KFtbdS0uNDI1KmUra3QsaCsuMTIqZStrdF0sW3UtLjIxNCplLWt0LGgrLjIzNCplLWt0XV0pLnN0cmVhbShsKS5wb2ludCxpPXMudHJhbnNsYXRlKFt1LS4yMDUqZSxoKy4yMTIqZV0pLmNsaXBFeHRlbnQoW1t1LS4yMTQqZStrdCxoKy4xNjYqZStrdF0sW3UtLjExNSplLWt0LGgrLjIzNCplLWt0XV0pLnN0cmVhbShsKS5wb2ludCxjfSxjLnNjYWxlKDEwNzApfTt2YXIgc24sbG4sY24sdW4saG4sZm4scG49e3BvaW50OlAsbGluZVN0YXJ0OlAsbGluZUVuZDpQLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2xuPTAscG4ubGluZVN0YXJ0PWRufSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7cG4ubGluZVN0YXJ0PXBuLmxpbmVFbmQ9cG4ucG9pbnQ9UCxzbis9eShsbi8yKX19O2Z1bmN0aW9uIGRuKCl7dmFyIHQsZSxyLG47ZnVuY3Rpb24gaSh0LGUpe2xuKz1uKnQtciplLHI9dCxuPWV9cG4ucG9pbnQ9ZnVuY3Rpb24oYSxvKXtwbi5wb2ludD1pLHQ9cj1hLGU9bj1vfSxwbi5saW5lRW5kPWZ1bmN0aW9uKCl7aSh0LGUpfX12YXIgZ249e3BvaW50OmZ1bmN0aW9uKHQsZSl7dDxjbiYmKGNuPXQpO3Q+aG4mJihobj10KTtlPHVuJiYodW49ZSk7ZT5mbiYmKGZuPWUpfSxsaW5lU3RhcnQ6UCxsaW5lRW5kOlAscG9seWdvblN0YXJ0OlAscG9seWdvbkVuZDpQfTtmdW5jdGlvbiB2bigpe3ZhciB0PW1uKDQuNSksZT1bXSxyPXtwb2ludDpuLGxpbmVTdGFydDpmdW5jdGlvbigpe3IucG9pbnQ9aX0sbGluZUVuZDpvLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3IubGluZUVuZD1zfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ci5saW5lRW5kPW8sci5wb2ludD1ufSxwb2ludFJhZGl1czpmdW5jdGlvbihlKXtyZXR1cm4gdD1tbihlKSxyfSxyZXN1bHQ6ZnVuY3Rpb24oKXtpZihlLmxlbmd0aCl7dmFyIHQ9ZS5qb2luKFwiXCIpO3JldHVybiBlPVtdLHR9fX07ZnVuY3Rpb24gbihyLG4pe2UucHVzaChcIk1cIixyLFwiLFwiLG4sdCl9ZnVuY3Rpb24gaSh0LG4pe2UucHVzaChcIk1cIix0LFwiLFwiLG4pLHIucG9pbnQ9YX1mdW5jdGlvbiBhKHQscil7ZS5wdXNoKFwiTFwiLHQsXCIsXCIscil9ZnVuY3Rpb24gbygpe3IucG9pbnQ9bn1mdW5jdGlvbiBzKCl7ZS5wdXNoKFwiWlwiKX1yZXR1cm4gcn1mdW5jdGlvbiBtbih0KXtyZXR1cm5cIm0wLFwiK3QrXCJhXCIrdCtcIixcIit0K1wiIDAgMSwxIDAsXCIrLTIqdCtcImFcIit0K1wiLFwiK3QrXCIgMCAxLDEgMCxcIisyKnQrXCJ6XCJ9dmFyIHluLHhuPXtwb2ludDpibixsaW5lU3RhcnQ6X24sbGluZUVuZDp3bixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt4bi5saW5lU3RhcnQ9a259LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt4bi5wb2ludD1ibix4bi5saW5lU3RhcnQ9X24seG4ubGluZUVuZD13bn19O2Z1bmN0aW9uIGJuKHQsZSl7eHIrPXQsYnIrPWUsKytfcn1mdW5jdGlvbiBfbigpe3ZhciB0LGU7ZnVuY3Rpb24gcihyLG4pe3ZhciBpPXItdCxhPW4tZSxvPU1hdGguc3FydChpKmkrYSphKTt3cis9byoodCtyKS8yLGtyKz1vKihlK24pLzIsQXIrPW8sYm4odD1yLGU9bil9eG4ucG9pbnQ9ZnVuY3Rpb24obixpKXt4bi5wb2ludD1yLGJuKHQ9bixlPWkpfX1mdW5jdGlvbiB3bigpe3huLnBvaW50PWJufWZ1bmN0aW9uIGtuKCl7dmFyIHQsZSxyLG47ZnVuY3Rpb24gaSh0LGUpe3ZhciBpPXQtcixhPWUtbixvPU1hdGguc3FydChpKmkrYSphKTt3cis9byoocit0KS8yLGtyKz1vKihuK2UpLzIsQXIrPW8sVHIrPShvPW4qdC1yKmUpKihyK3QpLE1yKz1vKihuK2UpLFNyKz0zKm8sYm4ocj10LG49ZSl9eG4ucG9pbnQ9ZnVuY3Rpb24oYSxvKXt4bi5wb2ludD1pLGJuKHQ9cj1hLGU9bj1vKX0seG4ubGluZUVuZD1mdW5jdGlvbigpe2kodCxlKX19ZnVuY3Rpb24gQW4odCl7dmFyIGU9NC41LHI9e3BvaW50Om4sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ci5wb2ludD1pfSxsaW5lRW5kOm8scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7ci5saW5lRW5kPXN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtyLmxpbmVFbmQ9byxyLnBvaW50PW59LHBvaW50UmFkaXVzOmZ1bmN0aW9uKHQpe3JldHVybiBlPXQscn0scmVzdWx0OlB9O2Z1bmN0aW9uIG4ocixuKXt0Lm1vdmVUbyhyK2UsbiksdC5hcmMocixuLGUsMCxNdCl9ZnVuY3Rpb24gaShlLG4pe3QubW92ZVRvKGUsbiksci5wb2ludD1hfWZ1bmN0aW9uIGEoZSxyKXt0LmxpbmVUbyhlLHIpfWZ1bmN0aW9uIG8oKXtyLnBvaW50PW59ZnVuY3Rpb24gcygpe3QuY2xvc2VQYXRoKCl9cmV0dXJuIHJ9ZnVuY3Rpb24gVG4odCl7dmFyIGU9LjUscj1NYXRoLmNvcygzMCpDdCksbj0xNjtmdW5jdGlvbiBpKGUpe3JldHVybihuP2Z1bmN0aW9uKGUpe3ZhciByLGksbyxzLGwsYyx1LGgsZixwLGQsZyx2PXtwb2ludDptLGxpbmVTdGFydDp5LGxpbmVFbmQ6Yixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25TdGFydCgpLHYubGluZVN0YXJ0PV99LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25FbmQoKSx2LmxpbmVTdGFydD15fX07ZnVuY3Rpb24gbShyLG4pe3I9dChyLG4pLGUucG9pbnQoclswXSxyWzFdKX1mdW5jdGlvbiB5KCl7aD1OYU4sdi5wb2ludD14LGUubGluZVN0YXJ0KCl9ZnVuY3Rpb24geChyLGkpe3ZhciBvPXpyKFtyLGldKSxzPXQocixpKTthKGgsZix1LHAsZCxnLGg9c1swXSxmPXNbMV0sdT1yLHA9b1swXSxkPW9bMV0sZz1vWzJdLG4sZSksZS5wb2ludChoLGYpfWZ1bmN0aW9uIGIoKXt2LnBvaW50PW0sZS5saW5lRW5kKCl9ZnVuY3Rpb24gXygpe3koKSx2LnBvaW50PXcsdi5saW5lRW5kPWt9ZnVuY3Rpb24gdyh0LGUpe3gocj10LGUpLGk9aCxvPWYscz1wLGw9ZCxjPWcsdi5wb2ludD14fWZ1bmN0aW9uIGsoKXthKGgsZix1LHAsZCxnLGksbyxyLHMsbCxjLG4sZSksdi5saW5lRW5kPWIsYigpfXJldHVybiB2fTpmdW5jdGlvbihlKXtyZXR1cm4gU24oZSxmdW5jdGlvbihyLG4pe3I9dChyLG4pLGUucG9pbnQoclswXSxyWzFdKX0pfSkoZSl9ZnVuY3Rpb24gYShuLGksbyxzLGwsYyx1LGgsZixwLGQsZyx2LG0pe3ZhciB4PXUtbixiPWgtaSxfPXgqeCtiKmI7aWYoXz40KmUmJnYtLSl7dmFyIHc9cytwLGs9bCtkLEE9YytnLFQ9TWF0aC5zcXJ0KHcqdytrKmsrQSpBKSxNPU1hdGguYXNpbihBLz1UKSxTPXkoeShBKS0xKTxrdHx8eShvLWYpPGt0PyhvK2YpLzI6TWF0aC5hdGFuMihrLHcpLEU9dChTLE0pLEM9RVswXSxMPUVbMV0sej1DLW4sTz1MLWksST1iKnoteCpPOyhJKkkvXz5lfHx5KCh4KnorYipPKS9fLS41KT4uM3x8cypwK2wqZCtjKmc8cikmJihhKG4saSxvLHMsbCxjLEMsTCxTLHcvPVQsay89VCxBLHYsbSksbS5wb2ludChDLEwpLGEoQyxMLFMsdyxrLEEsdSxoLGYscCxkLGcsdixtKSl9fXJldHVybiBpLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0oZT10KnQpPjAmJjE2LGkpOk1hdGguc3FydChlKX0saX1mdW5jdGlvbiBNbih0KXt0aGlzLnN0cmVhbT10fWZ1bmN0aW9uIFNuKHQsZSl7cmV0dXJue3BvaW50OmUsc3BoZXJlOmZ1bmN0aW9uKCl7dC5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dC5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dC5wb2x5Z29uRW5kKCl9fX1mdW5jdGlvbiBFbih0KXtyZXR1cm4gQ24oZnVuY3Rpb24oKXtyZXR1cm4gdH0pKCl9ZnVuY3Rpb24gQ24oZSl7dmFyIHIsbixpLGEsbyxzLGw9VG4oZnVuY3Rpb24odCxlKXtyZXR1cm5bKHQ9cih0LGUpKVswXSpjK2Esby10WzFdKmNdfSksYz0xNTAsdT00ODAsaD0yNTAsZj0wLHA9MCxkPTAsZz0wLHY9MCxtPXRuLHg9eixiPW51bGwsXz1udWxsO2Z1bmN0aW9uIHcodCl7cmV0dXJuWyh0PWkodFswXSpDdCx0WzFdKkN0KSlbMF0qYythLG8tdFsxXSpjXX1mdW5jdGlvbiBrKHQpe3JldHVybih0PWkuaW52ZXJ0KCh0WzBdLWEpL2MsKG8tdFsxXSkvYykpJiZbdFswXSpMdCx0WzFdKkx0XX1mdW5jdGlvbiBBKCl7aT1HcihuPUluKGQsZyx2KSxyKTt2YXIgdD1yKGYscCk7cmV0dXJuIGE9dS10WzBdKmMsbz1oK3RbMV0qYyxUKCl9ZnVuY3Rpb24gVCgpe3JldHVybiBzJiYocy52YWxpZD0hMSxzPW51bGwpLHd9cmV0dXJuIHcuc3RyZWFtPWZ1bmN0aW9uKHQpe3JldHVybiBzJiYocy52YWxpZD0hMSksKHM9TG4obShuLGwoeCh0KSkpKSkudmFsaWQ9ITAsc30sdy5jbGlwQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09bnVsbD09dD8oYj10LHRuKTpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmNvcyh0KSxyPWU+MCxuPXkoZSk+a3Q7cmV0dXJuICRyKGksZnVuY3Rpb24odCl7dmFyIGUscyxsLGMsdTtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7Yz1sPSExLHU9MX0scG9pbnQ6ZnVuY3Rpb24oaCxmKXt2YXIgcCxkPVtoLGZdLGc9aShoLGYpLHY9cj9nPzA6byhoLGYpOmc/byhoKyhoPDA/VHQ6LVR0KSxmKTowO2lmKCFlJiYoYz1sPWcpJiZ0LmxpbmVTdGFydCgpLGchPT1sJiYocD1hKGUsZCksKEJyKGUscCl8fEJyKGQscCkpJiYoZFswXSs9a3QsZFsxXSs9a3QsZz1pKGRbMF0sZFsxXSkpKSxnIT09bCl1PTAsZz8odC5saW5lU3RhcnQoKSxwPWEoZCxlKSx0LnBvaW50KHBbMF0scFsxXSkpOihwPWEoZSxkKSx0LnBvaW50KHBbMF0scFsxXSksdC5saW5lRW5kKCkpLGU9cDtlbHNlIGlmKG4mJmUmJnJeZyl7dmFyIG07diZzfHwhKG09YShkLGUsITApKXx8KHU9MCxyPyh0LmxpbmVTdGFydCgpLHQucG9pbnQobVswXVswXSxtWzBdWzFdKSx0LnBvaW50KG1bMV1bMF0sbVsxXVsxXSksdC5saW5lRW5kKCkpOih0LnBvaW50KG1bMV1bMF0sbVsxXVsxXSksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KG1bMF1bMF0sbVswXVsxXSkpKX0hZ3x8ZSYmQnIoZSxkKXx8dC5wb2ludChkWzBdLGRbMV0pLGU9ZCxsPWcscz12fSxsaW5lRW5kOmZ1bmN0aW9uKCl7bCYmdC5saW5lRW5kKCksZT1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiB1fChjJiZsKTw8MX19fSxGbih0LDYqQ3QpLHI/WzAsLXRdOlstVHQsdC1UdF0pO2Z1bmN0aW9uIGkodCxyKXtyZXR1cm4gTWF0aC5jb3ModCkqTWF0aC5jb3Mocik+ZX1mdW5jdGlvbiBhKHQscixuKXt2YXIgaT1bMSwwLDBdLGE9SXIoenIodCksenIocikpLG89T3IoYSxhKSxzPWFbMF0sbD1vLXMqcztpZighbClyZXR1cm4hbiYmdDt2YXIgYz1lKm8vbCx1PS1lKnMvbCxoPUlyKGksYSksZj1QcihpLGMpO0RyKGYsUHIoYSx1KSk7dmFyIHA9aCxkPU9yKGYscCksZz1PcihwLHApLHY9ZCpkLWcqKE9yKGYsZiktMSk7aWYoISh2PDApKXt2YXIgbT1NYXRoLnNxcnQodikseD1QcihwLCgtZC1tKS9nKTtpZihEcih4LGYpLHg9RnIoeCksIW4pcmV0dXJuIHg7dmFyIGIsXz10WzBdLHc9clswXSxrPXRbMV0sQT1yWzFdO3c8XyYmKGI9XyxfPXcsdz1iKTt2YXIgVD13LV8sTT15KFQtVHQpPGt0O2lmKCFNJiZBPGsmJihiPWssaz1BLEE9YiksTXx8VDxrdD9NP2srQT4wXnhbMV08KHkoeFswXS1fKTxrdD9rOkEpOms8PXhbMV0mJnhbMV08PUE6VD5UdF4oXzw9eFswXSYmeFswXTw9dykpe3ZhciBTPVByKHAsKC1kK20pL2cpO3JldHVybiBEcihTLGYpLFt4LEZyKFMpXX19fWZ1bmN0aW9uIG8oZSxuKXt2YXIgaT1yP3Q6VHQtdCxhPTA7cmV0dXJuIGU8LWk/YXw9MTplPmkmJihhfD0yKSxuPC1pP2F8PTQ6bj5pJiYoYXw9OCksYX19KChiPSt0KSpDdCksVCgpKTpifSx3LmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89dCx4PXQ/bm4odFswXVswXSx0WzBdWzFdLHRbMV1bMF0sdFsxXVsxXSk6eixUKCkpOl99LHcuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9K3QsQSgpKTpjfSx3LnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdFswXSxoPSt0WzFdLEEoKSk6W3UsaF19LHcuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPXRbMF0lMzYwKkN0LHA9dFsxXSUzNjAqQ3QsQSgpKTpbZipMdCxwKkx0XX0sdy5yb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9dFswXSUzNjAqQ3QsZz10WzFdJTM2MCpDdCx2PXQubGVuZ3RoPjI/dFsyXSUzNjAqQ3Q6MCxBKCkpOltkKkx0LGcqTHQsdipMdF19LHQucmViaW5kKHcsbCxcInByZWNpc2lvblwiKSxmdW5jdGlvbigpe3JldHVybiByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHcuaW52ZXJ0PXIuaW52ZXJ0JiZrLEEoKX19ZnVuY3Rpb24gTG4odCl7cmV0dXJuIFNuKHQsZnVuY3Rpb24oZSxyKXt0LnBvaW50KGUqQ3QscipDdCl9KX1mdW5jdGlvbiB6bih0LGUpe3JldHVyblt0LGVdfWZ1bmN0aW9uIE9uKHQsZSl7cmV0dXJuW3Q+VHQ/dC1NdDp0PC1UdD90K010OnQsZV19ZnVuY3Rpb24gSW4odCxlLHIpe3JldHVybiB0P2V8fHI/R3IoUG4odCksUm4oZSxyKSk6UG4odCk6ZXx8cj9SbihlLHIpOk9ufWZ1bmN0aW9uIERuKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVyblsoZSs9dCk+VHQ/ZS1NdDplPC1UdD9lK010OmUscl19fWZ1bmN0aW9uIFBuKHQpe3ZhciBlPURuKHQpO3JldHVybiBlLmludmVydD1EbigtdCksZX1mdW5jdGlvbiBSbih0LGUpe3ZhciByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCksaT1NYXRoLmNvcyhlKSxhPU1hdGguc2luKGUpO2Z1bmN0aW9uIG8odCxlKXt2YXIgbz1NYXRoLmNvcyhlKSxzPU1hdGguY29zKHQpKm8sbD1NYXRoLnNpbih0KSpvLGM9TWF0aC5zaW4oZSksdT1jKnIrcypuO3JldHVybltNYXRoLmF0YW4yKGwqaS11KmEscypyLWMqbiksRHQodSppK2wqYSldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBvPU1hdGguY29zKGUpLHM9TWF0aC5jb3ModCkqbyxsPU1hdGguc2luKHQpKm8sYz1NYXRoLnNpbihlKSx1PWMqaS1sKmE7cmV0dXJuW01hdGguYXRhbjIobCppK2MqYSxzKnIrdSpuKSxEdCh1KnItcypuKV19LG99ZnVuY3Rpb24gRm4odCxlKXt2YXIgcj1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpO3JldHVybiBmdW5jdGlvbihpLGEsbyxzKXt2YXIgbD1vKmU7bnVsbCE9aT8oaT1CbihyLGkpLGE9Qm4ocixhKSwobz4wP2k8YTppPmEpJiYoaSs9bypNdCkpOihpPXQrbypNdCxhPXQtLjUqbCk7Zm9yKHZhciBjLHU9aTtvPjA/dT5hOnU8YTt1LT1sKXMucG9pbnQoKGM9RnIoW3IsLW4qTWF0aC5jb3ModSksLW4qTWF0aC5zaW4odSldKSlbMF0sY1sxXSl9fWZ1bmN0aW9uIEJuKHQsZSl7dmFyIHI9enIoZSk7clswXS09dCxScihyKTt2YXIgbj1JdCgtclsxXSk7cmV0dXJuKCgtclsyXTwwPy1uOm4pKzIqTWF0aC5QSS1rdCklKDIqTWF0aC5QSSl9ZnVuY3Rpb24gTm4oZSxyLG4pe3ZhciBpPXQucmFuZ2UoZSxyLWt0LG4pLmNvbmNhdChyKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkubWFwKGZ1bmN0aW9uKGUpe3JldHVyblt0LGVdfSl9fWZ1bmN0aW9uIGpuKGUscixuKXt2YXIgaT10LnJhbmdlKGUsci1rdCxuKS5jb25jYXQocik7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLm1hcChmdW5jdGlvbihlKXtyZXR1cm5bZSx0XX0pfX1mdW5jdGlvbiBWbih0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gVW4odCl7cmV0dXJuIHQudGFyZ2V0fXQuZ2VvLnBhdGg9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saSxhLG89NC41O2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGUmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiBvJiZpLnBvaW50UmFkaXVzKCtvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYSYmYS52YWxpZHx8KGE9bihpKSksdC5nZW8uc3RyZWFtKGUsYSkpLGkucmVzdWx0KCl9ZnVuY3Rpb24gbCgpe3JldHVybiBhPW51bGwsc31yZXR1cm4gcy5hcmVhPWZ1bmN0aW9uKGUpe3JldHVybiBzbj0wLHQuZ2VvLnN0cmVhbShlLG4ocG4pKSxzbn0scy5jZW50cm9pZD1mdW5jdGlvbihlKXtyZXR1cm4geHI9YnI9X3I9d3I9a3I9QXI9VHI9TXI9U3I9MCx0Lmdlby5zdHJlYW0oZSxuKHhuKSksU3I/W1RyL1NyLE1yL1NyXTpBcj9bd3IvQXIsa3IvQXJdOl9yP1t4ci9fcixici9fcl06W05hTixOYU5dfSxzLmJvdW5kcz1mdW5jdGlvbihlKXtyZXR1cm4gaG49Zm49LShjbj11bj0xLzApLHQuZ2VvLnN0cmVhbShlLG4oZ24pKSxbW2NuLHVuXSxbaG4sZm5dXX0scy5wcm9qZWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPShlPXQpP3Quc3RyZWFtfHwocj10LGk9VG4oZnVuY3Rpb24odCxlKXtyZXR1cm4gcihbdCpMdCxlKkx0XSl9KSxmdW5jdGlvbih0KXtyZXR1cm4gTG4oaSh0KSl9KTp6LGwoKSk6ZTt2YXIgcixpfSxzLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09KHI9dCk/bmV3IHZuOm5ldyBBbih0KSxcImZ1bmN0aW9uXCIhPXR5cGVvZiBvJiZpLnBvaW50UmFkaXVzKG8pLGwoKSk6cn0scy5wb2ludFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6KGkucG9pbnRSYWRpdXMoK3QpLCt0KSxzKTpvfSxzLnByb2plY3Rpb24odC5nZW8uYWxiZXJzVXNhKCkpLmNvbnRleHQobnVsbCl9LHQuZ2VvLnRyYW5zZm9ybT1mdW5jdGlvbih0KXtyZXR1cm57c3RyZWFtOmZ1bmN0aW9uKGUpe3ZhciByPW5ldyBNbihlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9fX0sTW4ucHJvdG90eXBlPXtwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuc3RyZWFtLnBvaW50KHQsZSl9LHNwaGVyZTpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fSx0Lmdlby5wcm9qZWN0aW9uPUVuLHQuZ2VvLnByb2plY3Rpb25NdXRhdG9yPUNuLCh0Lmdlby5lcXVpcmVjdGFuZ3VsYXI9ZnVuY3Rpb24oKXtyZXR1cm4gRW4oem4pfSkucmF3PXpuLmludmVydD16bix0Lmdlby5yb3RhdGlvbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3JldHVybihlPXQoZVswXSpDdCxlWzFdKkN0KSlbMF0qPUx0LGVbMV0qPUx0LGV9cmV0dXJuIHQ9SW4odFswXSUzNjAqQ3QsdFsxXSpDdCx0Lmxlbmd0aD4yP3RbMl0qQ3Q6MCksZS5pbnZlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dC5pbnZlcnQoZVswXSpDdCxlWzFdKkN0KSlbMF0qPUx0LGVbMV0qPUx0LGV9LGV9LE9uLmludmVydD16bix0Lmdlby5jaXJjbGU9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9WzAsMF0sbj02O2Z1bmN0aW9uIGkoKXt2YXIgdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiByP3IuYXBwbHkodGhpcyxhcmd1bWVudHMpOnIsbj1JbigtdFswXSpDdCwtdFsxXSpDdCwwKS5pbnZlcnQsaT1bXTtyZXR1cm4gZShudWxsLG51bGwsMSx7cG9pbnQ6ZnVuY3Rpb24odCxlKXtpLnB1c2godD1uKHQsZSkpLHRbMF0qPUx0LHRbMV0qPUx0fX0pLHt0eXBlOlwiUG9seWdvblwiLGNvb3JkaW5hdGVzOltpXX19cmV0dXJuIGkub3JpZ2luPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsaSk6cn0saS5hbmdsZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1GbigodD0rcikqQ3QsbipDdCksaSk6dH0saS5wcmVjaXNpb249ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9Rm4odCpDdCwobj0rcikqQ3QpLGkpOm59LGkuYW5nbGUoOTApfSx0Lmdlby5kaXN0YW5jZT1mdW5jdGlvbih0LGUpe3ZhciByLG49KGVbMF0tdFswXSkqQ3QsaT10WzFdKkN0LGE9ZVsxXSpDdCxvPU1hdGguc2luKG4pLHM9TWF0aC5jb3MobiksbD1NYXRoLnNpbihpKSxjPU1hdGguY29zKGkpLHU9TWF0aC5zaW4oYSksaD1NYXRoLmNvcyhhKTtyZXR1cm4gTWF0aC5hdGFuMihNYXRoLnNxcnQoKHI9aCpvKSpyKyhyPWMqdS1sKmgqcykqciksbCp1K2MqaCpzKX0sdC5nZW8uZ3JhdGljdWxlPWZ1bmN0aW9uKCl7dmFyIGUscixuLGksYSxvLHMsbCxjLHUsaCxmLHA9MTAsZD1wLGc9OTAsdj0zNjAsbT0yLjU7ZnVuY3Rpb24geCgpe3JldHVybnt0eXBlOlwiTXVsdGlMaW5lU3RyaW5nXCIsY29vcmRpbmF0ZXM6YigpfX1mdW5jdGlvbiBiKCl7cmV0dXJuIHQucmFuZ2UoTWF0aC5jZWlsKGkvZykqZyxuLGcpLm1hcChoKS5jb25jYXQodC5yYW5nZShNYXRoLmNlaWwobC92KSp2LHMsdikubWFwKGYpKS5jb25jYXQodC5yYW5nZShNYXRoLmNlaWwoci9wKSpwLGUscCkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB5KHQlZyk+a3R9KS5tYXAoYykpLmNvbmNhdCh0LnJhbmdlKE1hdGguY2VpbChvL2QpKmQsYSxkKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHkodCV2KT5rdH0pLm1hcCh1KSl9cmV0dXJuIHgubGluZXM9ZnVuY3Rpb24oKXtyZXR1cm4gYigpLm1hcChmdW5jdGlvbih0KXtyZXR1cm57dHlwZTpcIkxpbmVTdHJpbmdcIixjb29yZGluYXRlczp0fX0pfSx4Lm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpcIlBvbHlnb25cIixjb29yZGluYXRlczpbaChpKS5jb25jYXQoZihzKS5zbGljZSgxKSxoKG4pLnJldmVyc2UoKS5zbGljZSgxKSxmKGwpLnJldmVyc2UoKS5zbGljZSgxKSldfX0seC5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/eC5tYWpvckV4dGVudCh0KS5taW5vckV4dGVudCh0KTp4Lm1pbm9yRXh0ZW50KCl9LHgubWFqb3JFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3RbMF1bMF0sbj0rdFsxXVswXSxsPSt0WzBdWzFdLHM9K3RbMV1bMV0saT5uJiYodD1pLGk9bixuPXQpLGw+cyYmKHQ9bCxsPXMscz10KSx4LnByZWNpc2lvbihtKSk6W1tpLGxdLFtuLHNdXX0seC5taW5vckV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdFswXVswXSxlPSt0WzFdWzBdLG89K3RbMF1bMV0sYT0rdFsxXVsxXSxyPmUmJih0PXIscj1lLGU9dCksbz5hJiYodD1vLG89YSxhPXQpLHgucHJlY2lzaW9uKG0pKTpbW3Isb10sW2UsYV1dfSx4LnN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/eC5tYWpvclN0ZXAodCkubWlub3JTdGVwKHQpOngubWlub3JTdGVwKCl9LHgubWFqb3JTdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSt0WzBdLHY9K3RbMV0seCk6W2csdl19LHgubWlub3JTdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPSt0WzBdLGQ9K3RbMV0seCk6W3AsZF19LHgucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPSt0LGM9Tm4obyxhLDkwKSx1PWpuKHIsZSxtKSxoPU5uKGwscyw5MCksZj1qbihpLG4sbSkseCk6bX0seC5tYWpvckV4dGVudChbWy0xODAsLTkwK2t0XSxbMTgwLDkwLWt0XV0pLm1pbm9yRXh0ZW50KFtbLTE4MCwtODAta3RdLFsxODAsODAra3RdXSl9LHQuZ2VvLmdyZWF0QXJjPWZ1bmN0aW9uKCl7dmFyIGUscixuPVZuLGk9VW47ZnVuY3Rpb24gYSgpe3JldHVybnt0eXBlOlwiTGluZVN0cmluZ1wiLGNvb3JkaW5hdGVzOltlfHxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyfHxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKV19fXJldHVybiBhLmRpc3RhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZ2VvLmRpc3RhbmNlKGV8fG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHJ8fGkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sYS5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/bnVsbDp0LGEpOm59LGEudGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQscj1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P251bGw6dCxhKTppfSxhLnByZWNpc2lvbj1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2E6MH0sYX0sdC5nZW8uaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcj10WzBdKkN0LG49dFsxXSpDdCxpPWVbMF0qQ3QsYT1lWzFdKkN0LG89TWF0aC5jb3Mobikscz1NYXRoLnNpbihuKSxsPU1hdGguY29zKGEpLGM9TWF0aC5zaW4oYSksdT1vKk1hdGguY29zKHIpLGg9bypNYXRoLnNpbihyKSxmPWwqTWF0aC5jb3MoaSkscD1sKk1hdGguc2luKGkpLGQ9MipNYXRoLmFzaW4oTWF0aC5zcXJ0KFJ0KGEtbikrbypsKlJ0KGktcikpKSxnPTEvTWF0aC5zaW4oZCksKHY9ZD9mdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNpbih0Kj1kKSpnLHI9TWF0aC5zaW4oZC10KSpnLG49cip1K2UqZixpPXIqaCtlKnAsYT1yKnMrZSpjO3JldHVybltNYXRoLmF0YW4yKGksbikqTHQsTWF0aC5hdGFuMihhLE1hdGguc3FydChuKm4raSppKSkqTHRdfTpmdW5jdGlvbigpe3JldHVybltyKkx0LG4qTHRdfSkuZGlzdGFuY2U9ZCx2O3ZhciByLG4saSxhLG8scyxsLGMsdSxoLGYscCxkLGcsdn0sdC5nZW8ubGVuZ3RoPWZ1bmN0aW9uKGUpe3JldHVybiB5bj0wLHQuZ2VvLnN0cmVhbShlLHFuKSx5bn07dmFyIHFuPXtzcGhlcmU6UCxwb2ludDpQLGxpbmVTdGFydDpmdW5jdGlvbigpe3ZhciB0LGUscjtmdW5jdGlvbiBuKG4saSl7dmFyIGE9TWF0aC5zaW4oaSo9Q3QpLG89TWF0aC5jb3MoaSkscz15KChuKj1DdCktdCksbD1NYXRoLmNvcyhzKTt5bis9TWF0aC5hdGFuMihNYXRoLnNxcnQoKHM9bypNYXRoLnNpbihzKSkqcysocz1yKmEtZSpvKmwpKnMpLGUqYStyKm8qbCksdD1uLGU9YSxyPW99cW4ucG9pbnQ9ZnVuY3Rpb24oaSxhKXt0PWkqQ3QsZT1NYXRoLnNpbihhKj1DdCkscj1NYXRoLmNvcyhhKSxxbi5wb2ludD1ufSxxbi5saW5lRW5kPWZ1bmN0aW9uKCl7cW4ucG9pbnQ9cW4ubGluZUVuZD1QfX0sbGluZUVuZDpQLHBvbHlnb25TdGFydDpQLHBvbHlnb25FbmQ6UH07ZnVuY3Rpb24gSG4odCxlKXtmdW5jdGlvbiByKGUscil7dmFyIG49TWF0aC5jb3MoZSksaT1NYXRoLmNvcyhyKSxhPXQobippKTtyZXR1cm5bYSppKk1hdGguc2luKGUpLGEqTWF0aC5zaW4ocildfXJldHVybiByLmludmVydD1mdW5jdGlvbih0LHIpe3ZhciBuPU1hdGguc3FydCh0KnQrcipyKSxpPWUobiksYT1NYXRoLnNpbihpKSxvPU1hdGguY29zKGkpO3JldHVybltNYXRoLmF0YW4yKHQqYSxuKm8pLE1hdGguYXNpbihuJiZyKmEvbildfSxyfXZhciBHbj1IbihmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KDIvKDErdCkpfSxmdW5jdGlvbih0KXtyZXR1cm4gMipNYXRoLmFzaW4odC8yKX0pOyh0Lmdlby5hemltdXRoYWxFcXVhbEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gRW4oR24pfSkucmF3PUduO3ZhciBZbj1IbihmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmFjb3ModCk7cmV0dXJuIGUmJmUvTWF0aC5zaW4oZSl9LHopO2Z1bmN0aW9uIFduKHQsZSl7dmFyIHI9TWF0aC5jb3ModCksbj1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC50YW4oVHQvNCt0LzIpfSxpPXQ9PT1lP01hdGguc2luKHQpOk1hdGgubG9nKHIvTWF0aC5jb3MoZSkpL01hdGgubG9nKG4oZSkvbih0KSksYT1yKk1hdGgucG93KG4odCksaSkvaTtpZighaSlyZXR1cm4gJG47ZnVuY3Rpb24gbyh0LGUpe2E+MD9lPC1FdCtrdCYmKGU9LUV0K2t0KTplPkV0LWt0JiYoZT1FdC1rdCk7dmFyIHI9YS9NYXRoLnBvdyhuKGUpLGkpO3JldHVybltyKk1hdGguc2luKGkqdCksYS1yKk1hdGguY29zKGkqdCldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWEtZSxuPXp0KGkpKk1hdGguc3FydCh0KnQrcipyKTtyZXR1cm5bTWF0aC5hdGFuMih0LHIpL2ksMipNYXRoLmF0YW4oTWF0aC5wb3coYS9uLDEvaSkpLUV0XX0sb31mdW5jdGlvbiBYbih0LGUpe3ZhciByPU1hdGguY29zKHQpLG49dD09PWU/TWF0aC5zaW4odCk6KHItTWF0aC5jb3MoZSkpLyhlLXQpLGk9ci9uK3Q7aWYoeShuKTxrdClyZXR1cm4gem47ZnVuY3Rpb24gYSh0LGUpe3ZhciByPWktZTtyZXR1cm5bcipNYXRoLnNpbihuKnQpLGktcipNYXRoLmNvcyhuKnQpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1pLWU7cmV0dXJuW01hdGguYXRhbjIodCxyKS9uLGktenQobikqTWF0aC5zcXJ0KHQqdCtyKnIpXX0sYX0odC5nZW8uYXppbXV0aGFsRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gRW4oWW4pfSkucmF3PVluLCh0Lmdlby5jb25pY0NvbmZvcm1hbD1mdW5jdGlvbigpe3JldHVybiBhbihXbil9KS5yYXc9V24sKHQuZ2VvLmNvbmljRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gYW4oWG4pfSkucmF3PVhuO3ZhciBabj1IbihmdW5jdGlvbih0KXtyZXR1cm4gMS90fSxNYXRoLmF0YW4pO2Z1bmN0aW9uICRuKHQsZSl7cmV0dXJuW3QsTWF0aC5sb2coTWF0aC50YW4oVHQvNCtlLzIpKV19ZnVuY3Rpb24gSm4odCl7dmFyIGUscj1Fbih0KSxuPXIuc2NhbGUsaT1yLnRyYW5zbGF0ZSxhPXIuY2xpcEV4dGVudDtyZXR1cm4gci5zY2FsZT1mdW5jdGlvbigpe3ZhciB0PW4uYXBwbHkocixhcmd1bWVudHMpO3JldHVybiB0PT09cj9lP3IuY2xpcEV4dGVudChudWxsKTpyOnR9LHIudHJhbnNsYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9aS5hcHBseShyLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1yP2U/ci5jbGlwRXh0ZW50KG51bGwpOnI6dH0sci5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBvPWEuYXBwbHkocixhcmd1bWVudHMpO2lmKG89PT1yKXtpZihlPW51bGw9PXQpe3ZhciBzPVR0Km4oKSxsPWkoKTthKFtbbFswXS1zLGxbMV0tc10sW2xbMF0rcyxsWzFdK3NdXSl9fWVsc2UgZSYmKG89bnVsbCk7cmV0dXJuIG99LHIuY2xpcEV4dGVudChudWxsKX0odC5nZW8uZ25vbW9uaWM9ZnVuY3Rpb24oKXtyZXR1cm4gRW4oWm4pfSkucmF3PVpuLCRuLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0LDIqTWF0aC5hdGFuKE1hdGguZXhwKGUpKS1FdF19LCh0Lmdlby5tZXJjYXRvcj1mdW5jdGlvbigpe3JldHVybiBKbigkbil9KS5yYXc9JG47dmFyIEtuPUhuKGZ1bmN0aW9uKCl7cmV0dXJuIDF9LE1hdGguYXNpbik7KHQuZ2VvLm9ydGhvZ3JhcGhpYz1mdW5jdGlvbigpe3JldHVybiBFbihLbil9KS5yYXc9S247dmFyIFFuPUhuKGZ1bmN0aW9uKHQpe3JldHVybiAxLygxK3QpfSxmdW5jdGlvbih0KXtyZXR1cm4gMipNYXRoLmF0YW4odCl9KTtmdW5jdGlvbiB0aSh0LGUpe3JldHVybltNYXRoLmxvZyhNYXRoLnRhbihUdC80K2UvMikpLC10XX1mdW5jdGlvbiBlaSh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiByaSh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBuaSh0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1bMCwxXSxuPTIsaT0yO2k8ZTtpKyspe2Zvcig7bj4xJiZPdCh0W3Jbbi0yXV0sdFtyW24tMV1dLHRbaV0pPD0wOyktLW47cltuKytdPWl9cmV0dXJuIHIuc2xpY2UoMCxuKX1mdW5jdGlvbiBpaSh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXX0odC5nZW8uc3RlcmVvZ3JhcGhpYz1mdW5jdGlvbigpe3JldHVybiBFbihRbil9KS5yYXc9UW4sdGkuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuWy1lLDIqTWF0aC5hdGFuKE1hdGguZXhwKHQpKS1FdF19LCh0Lmdlby50cmFuc3ZlcnNlTWVyY2F0b3I9ZnVuY3Rpb24oKXt2YXIgdD1Kbih0aSksZT10LmNlbnRlcixyPXQucm90YXRlO3JldHVybiB0LmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD9lKFstdFsxXSx0WzBdXSk6Wyh0PWUoKSlbMV0sLXRbMF1dfSx0LnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdD9yKFt0WzBdLHRbMV0sdC5sZW5ndGg+Mj90WzJdKzkwOjkwXSk6Wyh0PXIoKSlbMF0sdFsxXSx0WzJdLTkwXX0scihbMCwwLDkwXSl9KS5yYXc9dGksdC5nZW9tPXt9LHQuZ2VvbS5odWxsPWZ1bmN0aW9uKHQpe3ZhciBlPWVpLHI9cmk7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbih0KTtmdW5jdGlvbiBuKHQpe2lmKHQubGVuZ3RoPDMpcmV0dXJuW107dmFyIG4saT12ZShlKSxhPXZlKHIpLG89dC5sZW5ndGgscz1bXSxsPVtdO2ZvcihuPTA7bjxvO24rKylzLnB1c2goWytpLmNhbGwodGhpcyx0W25dLG4pLCthLmNhbGwodGhpcyx0W25dLG4pLG5dKTtmb3Iocy5zb3J0KGlpKSxuPTA7bjxvO24rKylsLnB1c2goW3Nbbl1bMF0sLXNbbl1bMV1dKTt2YXIgYz1uaShzKSx1PW5pKGwpLGg9dVswXT09PWNbMF0sZj11W3UubGVuZ3RoLTFdPT09Y1tjLmxlbmd0aC0xXSxwPVtdO2ZvcihuPWMubGVuZ3RoLTE7bj49MDstLW4pcC5wdXNoKHRbc1tjW25dXVsyXV0pO2ZvcihuPStoO248dS5sZW5ndGgtZjsrK24pcC5wdXNoKHRbc1t1W25dXVsyXV0pO3JldHVybiBwfXJldHVybiBuLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxufSx0Lmdlb20ucG9seWdvbj1mdW5jdGlvbih0KXtyZXR1cm4gVSh0LGFpKSx0fTt2YXIgYWk9dC5nZW9tLnBvbHlnb24ucHJvdG90eXBlPVtdO2Z1bmN0aW9uIG9pKHQsZSxyKXtyZXR1cm4oclswXS1lWzBdKSoodFsxXS1lWzFdKTwoclsxXS1lWzFdKSoodFswXS1lWzBdKX1mdW5jdGlvbiBzaSh0LGUscixuKXt2YXIgaT10WzBdLGE9clswXSxvPWVbMF0taSxzPW5bMF0tYSxsPXRbMV0sYz1yWzFdLHU9ZVsxXS1sLGg9blsxXS1jLGY9KHMqKGwtYyktaCooaS1hKSkvKGgqby1zKnUpO3JldHVybltpK2YqbyxsK2YqdV19ZnVuY3Rpb24gbGkodCl7dmFyIGU9dFswXSxyPXRbdC5sZW5ndGgtMV07cmV0dXJuIShlWzBdLXJbMF18fGVbMV0tclsxXSl9YWkuYXJlYT1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPS0xLHI9dGhpcy5sZW5ndGgsbj10aGlzW3ItMV0saT0wOysrZTxyOyl0PW4sbj10aGlzW2VdLGkrPXRbMV0qblswXS10WzBdKm5bMV07cmV0dXJuLjUqaX0sYWkuY2VudHJvaWQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPS0xLGk9dGhpcy5sZW5ndGgsYT0wLG89MCxzPXRoaXNbaS0xXTtmb3IoYXJndW1lbnRzLmxlbmd0aHx8KHQ9LTEvKDYqdGhpcy5hcmVhKCkpKTsrK248aTspZT1zLHM9dGhpc1tuXSxyPWVbMF0qc1sxXS1zWzBdKmVbMV0sYSs9KGVbMF0rc1swXSkqcixvKz0oZVsxXStzWzFdKSpyO3JldHVyblthKnQsbyp0XX0sYWkuY2xpcD1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksYSxvLHM9bGkodCksbD0tMSxjPXRoaXMubGVuZ3RoLWxpKHRoaXMpLHU9dGhpc1tjLTFdOysrbDxjOyl7Zm9yKGU9dC5zbGljZSgpLHQubGVuZ3RoPTAsaT10aGlzW2xdLGE9ZVsobj1lLmxlbmd0aC1zKS0xXSxyPS0xOysrcjxuOylvaShvPWVbcl0sdSxpKT8ob2koYSx1LGkpfHx0LnB1c2goc2koYSxvLHUsaSkpLHQucHVzaChvKSk6b2koYSx1LGkpJiZ0LnB1c2goc2koYSxvLHUsaSkpLGE9bztzJiZ0LnB1c2godFswXSksdT1pfXJldHVybiB0fTt2YXIgY2ksdWksaGksZmkscGksZGk9W10sZ2k9W107ZnVuY3Rpb24gdmkoKXtEaSh0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gbWkodCl7dmFyIGU9ZGkucG9wKCl8fG5ldyB2aTtyZXR1cm4gZS5zaXRlPXQsZX1mdW5jdGlvbiB5aSh0KXtTaSh0KSxoaS5yZW1vdmUodCksZGkucHVzaCh0KSxEaSh0KX1mdW5jdGlvbiB4aSh0KXt2YXIgZT10LmNpcmNsZSxyPWUueCxuPWUuY3ksaT17eDpyLHk6bn0sYT10LlAsbz10Lk4scz1bdF07eWkodCk7Zm9yKHZhciBsPWE7bC5jaXJjbGUmJnkoci1sLmNpcmNsZS54KTxrdCYmeShuLWwuY2lyY2xlLmN5KTxrdDspYT1sLlAscy51bnNoaWZ0KGwpLHlpKGwpLGw9YTtzLnVuc2hpZnQobCksU2kobCk7Zm9yKHZhciBjPW87Yy5jaXJjbGUmJnkoci1jLmNpcmNsZS54KTxrdCYmeShuLWMuY2lyY2xlLmN5KTxrdDspbz1jLk4scy5wdXNoKGMpLHlpKGMpLGM9bztzLnB1c2goYyksU2koYyk7dmFyIHUsaD1zLmxlbmd0aDtmb3IodT0xO3U8aDsrK3UpYz1zW3VdLGw9c1t1LTFdLHppKGMuZWRnZSxsLnNpdGUsYy5zaXRlLGkpO2w9c1swXSwoYz1zW2gtMV0pLmVkZ2U9TGkobC5zaXRlLGMuc2l0ZSxudWxsLGkpLE1pKGwpLE1pKGMpfWZ1bmN0aW9uIGJpKHQpe2Zvcih2YXIgZSxyLG4saSxhPXQueCxvPXQueSxzPWhpLl87czspaWYoKG49X2kocyxvKS1hKT5rdClzPXMuTDtlbHNle2lmKCEoKGk9YS13aShzLG8pKT5rdCkpe24+LWt0PyhlPXMuUCxyPXMpOmk+LWt0PyhlPXMscj1zLk4pOmU9cj1zO2JyZWFrfWlmKCFzLlIpe2U9czticmVha31zPXMuUn12YXIgbD1taSh0KTtpZihoaS5pbnNlcnQoZSxsKSxlfHxyKXtpZihlPT09cilyZXR1cm4gU2koZSkscj1taShlLnNpdGUpLGhpLmluc2VydChsLHIpLGwuZWRnZT1yLmVkZ2U9TGkoZS5zaXRlLGwuc2l0ZSksTWkoZSksdm9pZCBNaShyKTtpZihyKXtTaShlKSxTaShyKTt2YXIgYz1lLnNpdGUsdT1jLngsaD1jLnksZj10LngtdSxwPXQueS1oLGQ9ci5zaXRlLGc9ZC54LXUsdj1kLnktaCxtPTIqKGYqdi1wKmcpLHk9ZipmK3AqcCx4PWcqZyt2KnYsYj17eDoodip5LXAqeCkvbSt1LHk6KGYqeC1nKnkpL20raH07emkoci5lZGdlLGMsZCxiKSxsLmVkZ2U9TGkoYyx0LG51bGwsYiksci5lZGdlPUxpKHQsZCxudWxsLGIpLE1pKGUpLE1pKHIpfWVsc2UgbC5lZGdlPUxpKGUuc2l0ZSxsLnNpdGUpfX1mdW5jdGlvbiBfaSh0LGUpe3ZhciByPXQuc2l0ZSxuPXIueCxpPXIueSxhPWktZTtpZighYSlyZXR1cm4gbjt2YXIgbz10LlA7aWYoIW8pcmV0dXJuLTEvMDt2YXIgcz0ocj1vLnNpdGUpLngsbD1yLnksYz1sLWU7aWYoIWMpcmV0dXJuIHM7dmFyIHU9cy1uLGg9MS9hLTEvYyxmPXUvYztyZXR1cm4gaD8oLWYrTWF0aC5zcXJ0KGYqZi0yKmgqKHUqdS8oLTIqYyktbCtjLzIraS1hLzIpKSkvaCtuOihuK3MpLzJ9ZnVuY3Rpb24gd2kodCxlKXt2YXIgcj10Lk47aWYocilyZXR1cm4gX2kocixlKTt2YXIgbj10LnNpdGU7cmV0dXJuIG4ueT09PWU/bi54OjEvMH1mdW5jdGlvbiBraSh0KXt0aGlzLnNpdGU9dCx0aGlzLmVkZ2VzPVtdfWZ1bmN0aW9uIEFpKHQsZSl7cmV0dXJuIGUuYW5nbGUtdC5hbmdsZX1mdW5jdGlvbiBUaSgpe0RpKHRoaXMpLHRoaXMueD10aGlzLnk9dGhpcy5hcmM9dGhpcy5zaXRlPXRoaXMuY3k9bnVsbH1mdW5jdGlvbiBNaSh0KXt2YXIgZT10LlAscj10Lk47aWYoZSYmcil7dmFyIG49ZS5zaXRlLGk9dC5zaXRlLGE9ci5zaXRlO2lmKG4hPT1hKXt2YXIgbz1pLngscz1pLnksbD1uLngtbyxjPW4ueS1zLHU9YS54LW8saD0yKihsKih2PWEueS1zKS1jKnUpO2lmKCEoaD49LUF0KSl7dmFyIGY9bCpsK2MqYyxwPXUqdSt2KnYsZD0odipmLWMqcCkvaCxnPShsKnAtdSpmKS9oLHY9ZytzLG09Z2kucG9wKCl8fG5ldyBUaTttLmFyYz10LG0uc2l0ZT1pLG0ueD1kK28sbS55PXYrTWF0aC5zcXJ0KGQqZCtnKmcpLG0uY3k9dix0LmNpcmNsZT1tO2Zvcih2YXIgeT1udWxsLHg9cGkuXzt4OylpZihtLnk8eC55fHxtLnk9PT14LnkmJm0ueDw9eC54KXtpZigheC5MKXt5PXguUDticmVha314PXguTH1lbHNle2lmKCF4LlIpe3k9eDticmVha314PXguUn1waS5pbnNlcnQoeSxtKSx5fHwoZmk9bSl9fX19ZnVuY3Rpb24gU2kodCl7dmFyIGU9dC5jaXJjbGU7ZSYmKGUuUHx8KGZpPWUuTikscGkucmVtb3ZlKGUpLGdpLnB1c2goZSksRGkoZSksdC5jaXJjbGU9bnVsbCl9ZnVuY3Rpb24gRWkodCxlKXt2YXIgcj10LmI7aWYocilyZXR1cm4hMDt2YXIgbixpLGE9dC5hLG89ZVswXVswXSxzPWVbMV1bMF0sbD1lWzBdWzFdLGM9ZVsxXVsxXSx1PXQubCxoPXQucixmPXUueCxwPXUueSxkPWgueCxnPWgueSx2PShmK2QpLzIsbT0ocCtnKS8yO2lmKGc9PT1wKXtpZih2PG98fHY+PXMpcmV0dXJuO2lmKGY+ZCl7aWYoYSl7aWYoYS55Pj1jKXJldHVybn1lbHNlIGE9e3g6dix5Omx9O3I9e3g6dix5OmN9fWVsc2V7aWYoYSl7aWYoYS55PGwpcmV0dXJufWVsc2UgYT17eDp2LHk6Y307cj17eDp2LHk6bH19fWVsc2UgaWYoaT1tLShuPShmLWQpLyhnLXApKSp2LG48LTF8fG4+MSlpZihmPmQpe2lmKGEpe2lmKGEueT49YylyZXR1cm59ZWxzZSBhPXt4OihsLWkpL24seTpsfTtyPXt4OihjLWkpL24seTpjfX1lbHNle2lmKGEpe2lmKGEueTxsKXJldHVybn1lbHNlIGE9e3g6KGMtaSkvbix5OmN9O3I9e3g6KGwtaSkvbix5Omx9fWVsc2UgaWYocDxnKXtpZihhKXtpZihhLng+PXMpcmV0dXJufWVsc2UgYT17eDpvLHk6bipvK2l9O3I9e3g6cyx5Om4qcytpfX1lbHNle2lmKGEpe2lmKGEueDxvKXJldHVybn1lbHNlIGE9e3g6cyx5Om4qcytpfTtyPXt4Om8seTpuKm8raX19cmV0dXJuIHQuYT1hLHQuYj1yLCEwfWZ1bmN0aW9uIENpKHQsZSl7dGhpcy5sPXQsdGhpcy5yPWUsdGhpcy5hPXRoaXMuYj1udWxsfWZ1bmN0aW9uIExpKHQsZSxyLG4pe3ZhciBpPW5ldyBDaSh0LGUpO3JldHVybiBjaS5wdXNoKGkpLHImJnppKGksdCxlLHIpLG4mJnppKGksZSx0LG4pLHVpW3QuaV0uZWRnZXMucHVzaChuZXcgT2koaSx0LGUpKSx1aVtlLmldLmVkZ2VzLnB1c2gobmV3IE9pKGksZSx0KSksaX1mdW5jdGlvbiB6aSh0LGUscixuKXt0LmF8fHQuYj90Lmw9PT1yP3QuYj1uOnQuYT1uOih0LmE9bix0Lmw9ZSx0LnI9cil9ZnVuY3Rpb24gT2kodCxlLHIpe3ZhciBuPXQuYSxpPXQuYjt0aGlzLmVkZ2U9dCx0aGlzLnNpdGU9ZSx0aGlzLmFuZ2xlPXI/TWF0aC5hdGFuMihyLnktZS55LHIueC1lLngpOnQubD09PWU/TWF0aC5hdGFuMihpLngtbi54LG4ueS1pLnkpOk1hdGguYXRhbjIobi54LWkueCxpLnktbi55KX1mdW5jdGlvbiBJaSgpe3RoaXMuXz1udWxsfWZ1bmN0aW9uIERpKHQpe3QuVT10LkM9dC5MPXQuUj10LlA9dC5OPW51bGx9ZnVuY3Rpb24gUGkodCxlKXt2YXIgcj1lLG49ZS5SLGk9ci5VO2k/aS5MPT09cj9pLkw9bjppLlI9bjp0Ll89bixuLlU9aSxyLlU9bixyLlI9bi5MLHIuUiYmKHIuUi5VPXIpLG4uTD1yfWZ1bmN0aW9uIFJpKHQsZSl7dmFyIHI9ZSxuPWUuTCxpPXIuVTtpP2kuTD09PXI/aS5MPW46aS5SPW46dC5fPW4sbi5VPWksci5VPW4sci5MPW4uUixyLkwmJihyLkwuVT1yKSxuLlI9cn1mdW5jdGlvbiBGaSh0KXtmb3IoO3QuTDspdD10Lkw7cmV0dXJuIHR9ZnVuY3Rpb24gQmkodCxlKXt2YXIgcixuLGksYT10LnNvcnQoTmkpLnBvcCgpO2ZvcihjaT1bXSx1aT1uZXcgQXJyYXkodC5sZW5ndGgpLGhpPW5ldyBJaSxwaT1uZXcgSWk7OylpZihpPWZpLGEmJighaXx8YS55PGkueXx8YS55PT09aS55JiZhLng8aS54KSlhLng9PT1yJiZhLnk9PT1ufHwodWlbYS5pXT1uZXcga2koYSksYmkoYSkscj1hLngsbj1hLnkpLGE9dC5wb3AoKTtlbHNle2lmKCFpKWJyZWFrO3hpKGkuYXJjKX1lJiYoZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9Y2ksbj1lbih0WzBdWzBdLHRbMF1bMV0sdFsxXVswXSx0WzFdWzFdKSxpPXIubGVuZ3RoO2ktLTspKCFFaShlPXJbaV0sdCl8fCFuKGUpfHx5KGUuYS54LWUuYi54KTxrdCYmeShlLmEueS1lLmIueSk8a3QpJiYoZS5hPWUuYj1udWxsLHIuc3BsaWNlKGksMSkpfShlKSxmdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksYSxvLHMsbCxjLHUsaD10WzBdWzBdLGY9dFsxXVswXSxwPXRbMF1bMV0sZD10WzFdWzFdLGc9dWksdj1nLmxlbmd0aDt2LS07KWlmKChhPWdbdl0pJiZhLnByZXBhcmUoKSlmb3IobD0ocz1hLmVkZ2VzKS5sZW5ndGgsbz0wO288bDspbj0odT1zW29dLmVuZCgpKS54LGk9dS55LGU9KGM9c1srK28lbF0uc3RhcnQoKSkueCxyPWMueSwoeShuLWUpPmt0fHx5KGktcik+a3QpJiYocy5zcGxpY2UobywwLG5ldyBPaSgobT1hLnNpdGUseD11LGI9eShuLWgpPGt0JiZkLWk+a3Q/e3g6aCx5OnkoZS1oKTxrdD9yOmR9OnkoaS1kKTxrdCYmZi1uPmt0P3t4Onkoci1kKTxrdD9lOmYseTpkfTp5KG4tZik8a3QmJmktcD5rdD97eDpmLHk6eShlLWYpPGt0P3I6cH06eShpLXApPGt0JiZuLWg+a3Q/e3g6eShyLXApPGt0P2U6aCx5OnB9Om51bGwsXz12b2lkIDAsXz1uZXcgQ2kobSxudWxsKSxfLmE9eCxfLmI9YixjaS5wdXNoKF8pLF8pLGEuc2l0ZSxudWxsKSksKytsKTt2YXIgbSx4LGIsX30oZSkpO3ZhciBvPXtjZWxsczp1aSxlZGdlczpjaX07cmV0dXJuIGhpPXBpPWNpPXVpPW51bGwsb31mdW5jdGlvbiBOaSh0LGUpe3JldHVybiBlLnktdC55fHxlLngtdC54fWtpLnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9dGhpcy5lZGdlcyxyPWUubGVuZ3RoO3ItLTspKHQ9ZVtyXS5lZGdlKS5iJiZ0LmF8fGUuc3BsaWNlKHIsMSk7cmV0dXJuIGUuc29ydChBaSksZS5sZW5ndGh9LE9pLnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlLmw9PT10aGlzLnNpdGU/dGhpcy5lZGdlLmE6dGhpcy5lZGdlLmJ9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2UubD09PXRoaXMuc2l0ZT90aGlzLmVkZ2UuYjp0aGlzLmVkZ2UuYX19LElpLnByb3RvdHlwZT17aW5zZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpO2lmKHQpe2lmKGUuUD10LGUuTj10Lk4sdC5OJiYodC5OLlA9ZSksdC5OPWUsdC5SKXtmb3IodD10LlI7dC5MOyl0PXQuTDt0Lkw9ZX1lbHNlIHQuUj1lO3I9dH1lbHNlIHRoaXMuXz8odD1GaSh0aGlzLl8pLGUuUD1udWxsLGUuTj10LHQuUD10Lkw9ZSxyPXQpOihlLlA9ZS5OPW51bGwsdGhpcy5fPWUscj1udWxsKTtmb3IoZS5MPWUuUj1udWxsLGUuVT1yLGUuQz0hMCx0PWU7ciYmci5DOylyPT09KG49ci5VKS5MPyhpPW4uUikmJmkuQz8oci5DPWkuQz0hMSxuLkM9ITAsdD1uKToodD09PXIuUiYmKFBpKHRoaXMscikscj0odD1yKS5VKSxyLkM9ITEsbi5DPSEwLFJpKHRoaXMsbikpOihpPW4uTCkmJmkuQz8oci5DPWkuQz0hMSxuLkM9ITAsdD1uKToodD09PXIuTCYmKFJpKHRoaXMscikscj0odD1yKS5VKSxyLkM9ITEsbi5DPSEwLFBpKHRoaXMsbikpLHI9dC5VO3RoaXMuXy5DPSExfSxyZW1vdmU6ZnVuY3Rpb24odCl7dC5OJiYodC5OLlA9dC5QKSx0LlAmJih0LlAuTj10Lk4pLHQuTj10LlA9bnVsbDt2YXIgZSxyLG4saT10LlUsYT10Lkwsbz10LlI7aWYocj1hP28/Rmkobyk6YTpvLGk/aS5MPT09dD9pLkw9cjppLlI9cjp0aGlzLl89cixhJiZvPyhuPXIuQyxyLkM9dC5DLHIuTD1hLGEuVT1yLHIhPT1vPyhpPXIuVSxyLlU9dC5VLHQ9ci5SLGkuTD10LHIuUj1vLG8uVT1yKTooci5VPWksaT1yLHQ9ci5SKSk6KG49dC5DLHQ9ciksdCYmKHQuVT1pKSwhbilpZih0JiZ0LkMpdC5DPSExO2Vsc2V7ZG97aWYodD09PXRoaXMuXylicmVhaztpZih0PT09aS5MKXtpZigoZT1pLlIpLkMmJihlLkM9ITEsaS5DPSEwLFBpKHRoaXMsaSksZT1pLlIpLGUuTCYmZS5MLkN8fGUuUiYmZS5SLkMpe2UuUiYmZS5SLkN8fChlLkwuQz0hMSxlLkM9ITAsUmkodGhpcyxlKSxlPWkuUiksZS5DPWkuQyxpLkM9ZS5SLkM9ITEsUGkodGhpcyxpKSx0PXRoaXMuXzticmVha319ZWxzZSBpZigoZT1pLkwpLkMmJihlLkM9ITEsaS5DPSEwLFJpKHRoaXMsaSksZT1pLkwpLGUuTCYmZS5MLkN8fGUuUiYmZS5SLkMpe2UuTCYmZS5MLkN8fChlLlIuQz0hMSxlLkM9ITAsUGkodGhpcyxlKSxlPWkuTCksZS5DPWkuQyxpLkM9ZS5MLkM9ITEsUmkodGhpcyxpKSx0PXRoaXMuXzticmVha31lLkM9ITAsdD1pLGk9aS5VfXdoaWxlKCF0LkMpO3QmJih0LkM9ITEpfX19LHQuZ2VvbS52b3Jvbm9pPWZ1bmN0aW9uKHQpe3ZhciBlPWVpLHI9cmksbj1lLGk9cixhPWppO2lmKHQpcmV0dXJuIG8odCk7ZnVuY3Rpb24gbyh0KXt2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9YVswXVswXSxuPWFbMF1bMV0saT1hWzFdWzBdLG89YVsxXVsxXTtyZXR1cm4gQmkocyh0KSxhKS5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGEscyl7dmFyIGw9YS5lZGdlcyxjPWEuc2l0ZTsoZVtzXT1sLmxlbmd0aD9sLm1hcChmdW5jdGlvbih0KXt2YXIgZT10LnN0YXJ0KCk7cmV0dXJuW2UueCxlLnldfSk6Yy54Pj1yJiZjLng8PWkmJmMueT49biYmYy55PD1vP1tbcixvXSxbaSxvXSxbaSxuXSxbcixuXV06W10pLnBvaW50PXRbc119KSxlfWZ1bmN0aW9uIHModCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJue3g6TWF0aC5yb3VuZChuKHQsZSkva3QpKmt0LHk6TWF0aC5yb3VuZChpKHQsZSkva3QpKmt0LGk6ZX19KX1yZXR1cm4gby5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gQmkocyh0KSkuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmwmJnQucn0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm57c291cmNlOnRbZS5sLmldLHRhcmdldDp0W2Uuci5pXX19KX0sby50cmlhbmdsZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIEJpKHModCkpLmNlbGxzLmZvckVhY2goZnVuY3Rpb24ocixuKXtmb3IodmFyIGksYSxvLHMsbD1yLnNpdGUsYz1yLmVkZ2VzLnNvcnQoQWkpLHU9LTEsaD1jLmxlbmd0aCxmPWNbaC0xXS5lZGdlLHA9Zi5sPT09bD9mLnI6Zi5sOysrdTxoOylmLGk9cCxwPShmPWNbdV0uZWRnZSkubD09PWw/Zi5yOmYubCxuPGkuaSYmbjxwLmkmJihvPWkscz1wLCgoYT1sKS54LXMueCkqKG8ueS1hLnkpLShhLngtby54KSoocy55LWEueSk8MCkmJmUucHVzaChbdFtuXSx0W2kuaV0sdFtwLmldXSl9KSxlfSxvLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dmUoZT10KSxvKTplfSxvLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dmUocj10KSxvKTpyfSxvLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bnVsbD09dD9qaTp0LG8pOmE9PT1qaT9udWxsOmF9LG8uc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9vLmNsaXBFeHRlbnQodCYmW1swLDBdLHRdKTphPT09amk/bnVsbDphJiZhWzFdfSxvfTt2YXIgamk9W1stMWU2LC0xZTZdLFsxZTYsMWU2XV07ZnVuY3Rpb24gVmkodCl7cmV0dXJuIHQueH1mdW5jdGlvbiBVaSh0KXtyZXR1cm4gdC55fWZ1bmN0aW9uIHFpKGUscil7ZT10LnJnYihlKSxyPXQucmdiKHIpO3ZhciBuPWUucixpPWUuZyxhPWUuYixvPXIuci1uLHM9ci5nLWksbD1yLmItYTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuXCIjXCIrY2UoTWF0aC5yb3VuZChuK28qdCkpK2NlKE1hdGgucm91bmQoaStzKnQpKStjZShNYXRoLnJvdW5kKGErbCp0KSl9fWZ1bmN0aW9uIEhpKHQsZSl7dmFyIHIsbj17fSxpPXt9O2ZvcihyIGluIHQpciBpbiBlP25bcl09WmkodFtyXSxlW3JdKTppW3JdPXRbcl07Zm9yKHIgaW4gZSlyIGluIHR8fChpW3JdPWVbcl0pO3JldHVybiBmdW5jdGlvbih0KXtmb3IociBpbiBuKWlbcl09bltyXSh0KTtyZXR1cm4gaX19ZnVuY3Rpb24gR2kodCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKHIpe3JldHVybiB0KigxLXIpK2Uqcn19ZnVuY3Rpb24gWWkodCxlKXt2YXIgcixuLGksYT1XaS5sYXN0SW5kZXg9WGkubGFzdEluZGV4PTAsbz0tMSxzPVtdLGw9W107Zm9yKHQrPVwiXCIsZSs9XCJcIjsocj1XaS5leGVjKHQpKSYmKG49WGkuZXhlYyhlKSk7KShpPW4uaW5kZXgpPmEmJihpPWUuc2xpY2UoYSxpKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLChyPXJbMF0pPT09KG49blswXSk/c1tvXT9zW29dKz1uOnNbKytvXT1uOihzWysrb109bnVsbCxsLnB1c2goe2k6byx4OkdpKHIsbil9KSksYT1YaS5sYXN0SW5kZXg7cmV0dXJuIGE8ZS5sZW5ndGgmJihpPWUuc2xpY2UoYSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSxzLmxlbmd0aDwyP2xbMF0/KGU9bFswXS54LGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpK1wiXCJ9KTpmdW5jdGlvbigpe3JldHVybiBlfTooZT1sLmxlbmd0aCxmdW5jdGlvbih0KXtmb3IodmFyIHIsbj0wO248ZTsrK24pc1socj1sW25dKS5pXT1yLngodCk7cmV0dXJuIHMuam9pbihcIlwiKX0pfXQuZ2VvbS5kZWxhdW5heT1mdW5jdGlvbihlKXtyZXR1cm4gdC5nZW9tLnZvcm9ub2koKS50cmlhbmdsZXMoZSl9LHQuZ2VvbS5xdWFkdHJlZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLG89ZWkscz1yaTtpZihhPWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG89Vmkscz1VaSwzPT09YSYmKGk9cixuPWUscj1lPTApLGwodCk7ZnVuY3Rpb24gbCh0KXt2YXIgbCxjLHUsaCxmLHAsZCxnLHYsbT12ZShvKSx4PXZlKHMpO2lmKG51bGwhPWUpcD1lLGQ9cixnPW4sdj1pO2Vsc2UgaWYoZz12PS0ocD1kPTEvMCksYz1bXSx1PVtdLGY9dC5sZW5ndGgsYSlmb3IoaD0wO2g8ZjsrK2gpKGw9dFtoXSkueDxwJiYocD1sLngpLGwueTxkJiYoZD1sLnkpLGwueD5nJiYoZz1sLngpLGwueT52JiYodj1sLnkpLGMucHVzaChsLngpLHUucHVzaChsLnkpO2Vsc2UgZm9yKGg9MDtoPGY7KytoKXt2YXIgYj0rbShsPXRbaF0saCksXz0reChsLGgpO2I8cCYmKHA9YiksXzxkJiYoZD1fKSxiPmcmJihnPWIpLF8+diYmKHY9XyksYy5wdXNoKGIpLHUucHVzaChfKX12YXIgdz1nLXAsaz12LWQ7ZnVuY3Rpb24gQSh0LGUscixuLGksYSxvLHMpe2lmKCFpc05hTihyKSYmIWlzTmFOKG4pKWlmKHQubGVhZil7dmFyIGw9dC54LGM9dC55O2lmKG51bGwhPWwpaWYoeShsLXIpK3koYy1uKTwuMDEpVCh0LGUscixuLGksYSxvLHMpO2Vsc2V7dmFyIHU9dC5wb2ludDt0Lng9dC55PXQucG9pbnQ9bnVsbCxUKHQsdSxsLGMsaSxhLG8scyksVCh0LGUscixuLGksYSxvLHMpfWVsc2UgdC54PXIsdC55PW4sdC5wb2ludD1lfWVsc2UgVCh0LGUscixuLGksYSxvLHMpfWZ1bmN0aW9uIFQodCxlLHIsbixpLGEsbyxzKXt2YXIgbD0uNSooaStvKSxjPS41KihhK3MpLHU9cj49bCxoPW4+PWMsZj1oPDwxfHU7dC5sZWFmPSExLHU/aT1sOm89bCxoP2E9YzpzPWMsQSh0PXQubm9kZXNbZl18fCh0Lm5vZGVzW2ZdPXtsZWFmOiEwLG5vZGVzOltdLHBvaW50Om51bGwseDpudWxsLHk6bnVsbCxhZGQ6ZnVuY3Rpb24odCl7QShNLHQsK20odCwrK2gpLCt4KHQsaCkscCxkLGcsdil9fSksZSxyLG4saSxhLG8scyl9dz5rP3Y9ZCt3Omc9cCtrO3ZhciBNPXtsZWFmOiEwLG5vZGVzOltdLHBvaW50Om51bGwseDpudWxsLHk6bnVsbCxhZGQ6ZnVuY3Rpb24odCl7QShNLHQsK20odCwrK2gpLCt4KHQsaCkscCxkLGcsdil9fTtpZihNLnZpc2l0PWZ1bmN0aW9uKHQpeyFmdW5jdGlvbiB0KGUscixuLGksYSxvKXtpZighZShyLG4saSxhLG8pKXt2YXIgcz0uNSoobithKSxsPS41KihpK28pLGM9ci5ub2RlcztjWzBdJiZ0KGUsY1swXSxuLGkscyxsKSxjWzFdJiZ0KGUsY1sxXSxzLGksYSxsKSxjWzJdJiZ0KGUsY1syXSxuLGwscyxvKSxjWzNdJiZ0KGUsY1szXSxzLGwsYSxvKX19KHQsTSxwLGQsZyx2KX0sTS5maW5kPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcyxsPTEvMDtyZXR1cm4gZnVuY3Rpb24gdChjLHUsaCxmLHApe2lmKCEodT5hfHxoPm98fGY8bnx8cDxpKSl7aWYoZD1jLnBvaW50KXt2YXIgZCxnPWUtYy54LHY9ci1jLnksbT1nKmcrdip2O2lmKG08bCl7dmFyIHk9TWF0aC5zcXJ0KGw9bSk7bj1lLXksaT1yLXksYT1lK3ksbz1yK3kscz1kfX1mb3IodmFyIHg9Yy5ub2RlcyxiPS41Kih1K2YpLF89LjUqKGgrcCksdz0ocj49Xyk8PDF8ZT49YixrPXcrNDt3PGs7Kyt3KWlmKGM9eFszJnddKXN3aXRjaCgzJncpe2Nhc2UgMDp0KGMsdSxoLGIsXyk7YnJlYWs7Y2FzZSAxOnQoYyxiLGgsZixfKTticmVhaztjYXNlIDI6dChjLHUsXyxiLHApO2JyZWFrO2Nhc2UgMzp0KGMsYixfLGYscCl9fX0odCxuLGksYSxvKSxzfShNLHRbMF0sdFsxXSxwLGQsZyx2KX0saD0tMSxudWxsPT1lKXtmb3IoOysraDxmOylBKE0sdFtoXSxjW2hdLHVbaF0scCxkLGcsdik7LS1ofWVsc2UgdC5mb3JFYWNoKE0uYWRkKTtyZXR1cm4gYz11PXQ9bD1udWxsLE19cmV0dXJuIGwueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LGwpOm99LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGwpOnN9LGwuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2U9cj1uPWk9bnVsbDooZT0rdFswXVswXSxyPSt0WzBdWzFdLG49K3RbMV1bMF0saT0rdFsxXVsxXSksbCk6bnVsbD09ZT9udWxsOltbZSxyXSxbbixpXV19LGwuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9lPXI9bj1pPW51bGw6KGU9cj0wLG49K3RbMF0saT0rdFsxXSksbCk6bnVsbD09ZT9udWxsOltuLWUsaS1yXX0sbH0sdC5pbnRlcnBvbGF0ZVJnYj1xaSx0LmludGVycG9sYXRlT2JqZWN0PUhpLHQuaW50ZXJwb2xhdGVOdW1iZXI9R2ksdC5pbnRlcnBvbGF0ZVN0cmluZz1ZaTt2YXIgV2k9L1stK10/KD86XFxkK1xcLj9cXGQqfFxcLj9cXGQrKSg/OltlRV1bLStdP1xcZCspPy9nLFhpPW5ldyBSZWdFeHAoV2kuc291cmNlLFwiZ1wiKTtmdW5jdGlvbiBaaShlLHIpe2Zvcih2YXIgbixpPXQuaW50ZXJwb2xhdG9ycy5sZW5ndGg7LS1pPj0wJiYhKG49dC5pbnRlcnBvbGF0b3JzW2ldKGUscikpOyk7cmV0dXJuIG59ZnVuY3Rpb24gJGkodCxlKXt2YXIgcixuPVtdLGk9W10sYT10Lmxlbmd0aCxvPWUubGVuZ3RoLHM9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpO2ZvcihyPTA7cjxzOysrciluLnB1c2goWmkodFtyXSxlW3JdKSk7Zm9yKDtyPGE7KytyKWlbcl09dFtyXTtmb3IoO3I8bzsrK3IpaVtyXT1lW3JdO3JldHVybiBmdW5jdGlvbih0KXtmb3Iocj0wO3I8czsrK3IpaVtyXT1uW3JdKHQpO3JldHVybiBpfX10LmludGVycG9sYXRlPVppLHQuaW50ZXJwb2xhdG9ycz1bZnVuY3Rpb24odCxlKXt2YXIgcj10eXBlb2YgZTtyZXR1cm4oXCJzdHJpbmdcIj09PXI/Z2UuaGFzKGUudG9Mb3dlckNhc2UoKSl8fC9eKCN8cmdiXFwofGhzbFxcKCkvaS50ZXN0KGUpP3FpOllpOmUgaW5zdGFuY2VvZiBWdD9xaTpBcnJheS5pc0FycmF5KGUpPyRpOlwib2JqZWN0XCI9PT1yJiZpc05hTihlKT9IaTpHaSkodCxlKX1dLHQuaW50ZXJwb2xhdGVBcnJheT0kaTt2YXIgSmk9ZnVuY3Rpb24oKXtyZXR1cm4gen0sS2k9dC5tYXAoe2xpbmVhcjpKaSxwb2x5OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3coZSx0KX19LHF1YWQ6ZnVuY3Rpb24oKXtyZXR1cm4gcmF9LGN1YmljOmZ1bmN0aW9uKCl7cmV0dXJuIG5hfSxzaW46ZnVuY3Rpb24oKXtyZXR1cm4gYWF9LGV4cDpmdW5jdGlvbigpe3JldHVybiBvYX0sY2lyY2xlOmZ1bmN0aW9uKCl7cmV0dXJuIHNhfSxlbGFzdGljOmZ1bmN0aW9uKHQsZSl7dmFyIHI7YXJndW1lbnRzLmxlbmd0aDwyJiYoZT0uNDUpO2FyZ3VtZW50cy5sZW5ndGg/cj1lL010Kk1hdGguYXNpbigxL3QpOih0PTEscj1lLzQpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gMSt0Kk1hdGgucG93KDIsLTEwKm4pKk1hdGguc2luKChuLXIpKk10L2UpfX0sYmFjazpmdW5jdGlvbih0KXt0fHwodD0xLjcwMTU4KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUqZSooKHQrMSkqZS10KX19LGJvdW5jZTpmdW5jdGlvbigpe3JldHVybiBsYX19KSxRaT10Lm1hcCh7aW46eixvdXQ6dGEsXCJpbi1vdXRcIjplYSxcIm91dC1pblwiOmZ1bmN0aW9uKHQpe3JldHVybiBlYSh0YSh0KSl9fSk7ZnVuY3Rpb24gdGEodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiAxLXQoMS1lKX19ZnVuY3Rpb24gZWEodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi41KihlPC41P3QoMiplKToyLXQoMi0yKmUpKX19ZnVuY3Rpb24gcmEodCl7cmV0dXJuIHQqdH1mdW5jdGlvbiBuYSh0KXtyZXR1cm4gdCp0KnR9ZnVuY3Rpb24gaWEodCl7aWYodDw9MClyZXR1cm4gMDtpZih0Pj0xKXJldHVybiAxO3ZhciBlPXQqdCxyPWUqdDtyZXR1cm4gNCoodDwuNT9yOjMqKHQtZSkrci0uNzUpfWZ1bmN0aW9uIGFhKHQpe3JldHVybiAxLU1hdGguY29zKHQqRXQpfWZ1bmN0aW9uIG9hKHQpe3JldHVybiBNYXRoLnBvdygyLDEwKih0LTEpKX1mdW5jdGlvbiBzYSh0KXtyZXR1cm4gMS1NYXRoLnNxcnQoMS10KnQpfWZ1bmN0aW9uIGxhKHQpe3JldHVybiB0PDEvMi43NT83LjU2MjUqdCp0OnQ8Mi8yLjc1PzcuNTYyNSoodC09MS41LzIuNzUpKnQrLjc1OnQ8Mi41LzIuNzU/Ny41NjI1Kih0LT0yLjI1LzIuNzUpKnQrLjkzNzU6Ny41NjI1Kih0LT0yLjYyNS8yLjc1KSp0Ky45ODQzNzV9ZnVuY3Rpb24gY2EodCxlKXtyZXR1cm4gZS09dCxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZCh0K2Uqcil9fWZ1bmN0aW9uIHVhKHQpe3ZhciBlLHIsbixpPVt0LmEsdC5iXSxhPVt0LmMsdC5kXSxvPWZhKGkpLHM9aGEoaSxhKSxsPWZhKCgoZT1hKVswXSs9KG49LXMpKihyPWkpWzBdLGVbMV0rPW4qclsxXSxlKSl8fDA7aVswXSphWzFdPGFbMF0qaVsxXSYmKGlbMF0qPS0xLGlbMV0qPS0xLG8qPS0xLHMqPS0xKSx0aGlzLnJvdGF0ZT0obz9NYXRoLmF0YW4yKGlbMV0saVswXSk6TWF0aC5hdGFuMigtYVswXSxhWzFdKSkqTHQsdGhpcy50cmFuc2xhdGU9W3QuZSx0LmZdLHRoaXMuc2NhbGU9W28sbF0sdGhpcy5za2V3PWw/TWF0aC5hdGFuMihzLGwpKkx0OjB9ZnVuY3Rpb24gaGEodCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXX1mdW5jdGlvbiBmYSh0KXt2YXIgZT1NYXRoLnNxcnQoaGEodCx0KSk7cmV0dXJuIGUmJih0WzBdLz1lLHRbMV0vPWUpLGV9dC5lYXNlPWZ1bmN0aW9uKHQpe3ZhciBlLG49dC5pbmRleE9mKFwiLVwiKSxpPW4+PTA/dC5zbGljZSgwLG4pOnQsYT1uPj0wP3Quc2xpY2UobisxKTpcImluXCI7cmV0dXJuIGk9S2kuZ2V0KGkpfHxKaSxhPVFpLmdldChhKXx8eixlPWEoaS5hcHBseShudWxsLHIuY2FsbChhcmd1bWVudHMsMSkpKSxmdW5jdGlvbih0KXtyZXR1cm4gdDw9MD8wOnQ+PTE/MTplKHQpfX0sdC5pbnRlcnBvbGF0ZUhjbD1mdW5jdGlvbihlLHIpe2U9dC5oY2woZSkscj10LmhjbChyKTt2YXIgbj1lLmgsaT1lLmMsYT1lLmwsbz1yLmgtbixzPXIuYy1pLGw9ci5sLWE7aXNOYU4ocykmJihzPTAsaT1pc05hTihpKT9yLmM6aSk7aXNOYU4obyk/KG89MCxuPWlzTmFOKG4pP3IuaDpuKTpvPjE4MD9vLT0zNjA6bzwtMTgwJiYobys9MzYwKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFd0KG4rbyp0LGkrcyp0LGErbCp0KStcIlwifX0sdC5pbnRlcnBvbGF0ZUhzbD1mdW5jdGlvbihlLHIpe2U9dC5oc2woZSkscj10LmhzbChyKTt2YXIgbj1lLmgsaT1lLnMsYT1lLmwsbz1yLmgtbixzPXIucy1pLGw9ci5sLWE7aXNOYU4ocykmJihzPTAsaT1pc05hTihpKT9yLnM6aSk7aXNOYU4obyk/KG89MCxuPWlzTmFOKG4pP3IuaDpuKTpvPjE4MD9vLT0zNjA6bzwtMTgwJiYobys9MzYwKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEh0KG4rbyp0LGkrcyp0LGErbCp0KStcIlwifX0sdC5pbnRlcnBvbGF0ZUxhYj1mdW5jdGlvbihlLHIpe2U9dC5sYWIoZSkscj10LmxhYihyKTt2YXIgbj1lLmwsaT1lLmEsYT1lLmIsbz1yLmwtbixzPXIuYS1pLGw9ci5iLWE7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0ZShuK28qdCxpK3MqdCxhK2wqdCkrXCJcIn19LHQuaW50ZXJwb2xhdGVSb3VuZD1jYSx0LnRyYW5zZm9ybT1mdW5jdGlvbihlKXt2YXIgcj1pLmNyZWF0ZUVsZW1lbnROUyh0Lm5zLnByZWZpeC5zdmcsXCJnXCIpO3JldHVybih0LnRyYW5zZm9ybT1mdW5jdGlvbih0KXtpZihudWxsIT10KXtyLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLHQpO3ZhciBlPXIudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKX1yZXR1cm4gbmV3IHVhKGU/ZS5tYXRyaXg6cGEpfSkoZSl9LHVhLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwidHJhbnNsYXRlKFwiK3RoaXMudHJhbnNsYXRlK1wiKXJvdGF0ZShcIit0aGlzLnJvdGF0ZStcIilza2V3WChcIit0aGlzLnNrZXcrXCIpc2NhbGUoXCIrdGhpcy5zY2FsZStcIilcIn07dmFyIHBhPXthOjEsYjowLGM6MCxkOjEsZTowLGY6MH07ZnVuY3Rpb24gZGEodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrXCIsXCI6XCJcIn1mdW5jdGlvbiBnYShlLHIpe3ZhciBuPVtdLGk9W107cmV0dXJuIGU9dC50cmFuc2Zvcm0oZSkscj10LnRyYW5zZm9ybShyKSxmdW5jdGlvbih0LGUscixuKXtpZih0WzBdIT09ZVswXXx8dFsxXSE9PWVbMV0pe3ZhciBpPXIucHVzaChcInRyYW5zbGF0ZShcIixudWxsLFwiLFwiLG51bGwsXCIpXCIpO24ucHVzaCh7aTppLTQseDpHaSh0WzBdLGVbMF0pfSx7aTppLTIseDpHaSh0WzFdLGVbMV0pfSl9ZWxzZShlWzBdfHxlWzFdKSYmci5wdXNoKFwidHJhbnNsYXRlKFwiK2UrXCIpXCIpfShlLnRyYW5zbGF0ZSxyLnRyYW5zbGF0ZSxuLGkpLGZ1bmN0aW9uKHQsZSxyLG4pe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxuLnB1c2goe2k6ci5wdXNoKGRhKHIpK1wicm90YXRlKFwiLG51bGwsXCIpXCIpLTIseDpHaSh0LGUpfSkpOmUmJnIucHVzaChkYShyKStcInJvdGF0ZShcIitlK1wiKVwiKX0oZS5yb3RhdGUsci5yb3RhdGUsbixpKSxmdW5jdGlvbih0LGUscixuKXt0IT09ZT9uLnB1c2goe2k6ci5wdXNoKGRhKHIpK1wic2tld1goXCIsbnVsbCxcIilcIiktMix4OkdpKHQsZSl9KTplJiZyLnB1c2goZGEocikrXCJza2V3WChcIitlK1wiKVwiKX0oZS5za2V3LHIuc2tldyxuLGkpLGZ1bmN0aW9uKHQsZSxyLG4pe2lmKHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXSl7dmFyIGk9ci5wdXNoKGRhKHIpK1wic2NhbGUoXCIsbnVsbCxcIixcIixudWxsLFwiKVwiKTtuLnB1c2goe2k6aS00LHg6R2kodFswXSxlWzBdKX0se2k6aS0yLHg6R2kodFsxXSxlWzFdKX0pfWVsc2UgMT09PWVbMF0mJjE9PT1lWzFdfHxyLnB1c2goZGEocikrXCJzY2FsZShcIitlK1wiKVwiKX0oZS5zY2FsZSxyLnNjYWxlLG4saSksZT1yPW51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9LTEsYT1pLmxlbmd0aDsrK3I8YTspblsoZT1pW3JdKS5pXT1lLngodCk7cmV0dXJuIG4uam9pbihcIlwiKX19ZnVuY3Rpb24gdmEodCxlKXtyZXR1cm4gZT0oZS09dD0rdCl8fDEvZSxmdW5jdGlvbihyKXtyZXR1cm4oci10KS9lfX1mdW5jdGlvbiBtYSh0LGUpe3JldHVybiBlPShlLT10PSt0KXx8MS9lLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDEsKHItdCkvZSkpfX1mdW5jdGlvbiB5YSh0KXtmb3IodmFyIGU9dC5zb3VyY2Uscj10LnRhcmdldCxuPWZ1bmN0aW9uKHQsZSl7aWYodD09PWUpcmV0dXJuIHQ7dmFyIHI9eGEodCksbj14YShlKSxpPXIucG9wKCksYT1uLnBvcCgpLG89bnVsbDtmb3IoO2k9PT1hOylvPWksaT1yLnBvcCgpLGE9bi5wb3AoKTtyZXR1cm4gb30oZSxyKSxpPVtlXTtlIT09bjspZT1lLnBhcmVudCxpLnB1c2goZSk7Zm9yKHZhciBhPWkubGVuZ3RoO3IhPT1uOylpLnNwbGljZShhLDAscikscj1yLnBhcmVudDtyZXR1cm4gaX1mdW5jdGlvbiB4YSh0KXtmb3IodmFyIGU9W10scj10LnBhcmVudDtudWxsIT1yOyllLnB1c2godCksdD1yLHI9ci5wYXJlbnQ7cmV0dXJuIGUucHVzaCh0KSxlfWZ1bmN0aW9uIGJhKHQpe3QuZml4ZWR8PTJ9ZnVuY3Rpb24gX2EodCl7dC5maXhlZCY9LTd9ZnVuY3Rpb24gd2EodCl7dC5maXhlZHw9NCx0LnB4PXQueCx0LnB5PXQueX1mdW5jdGlvbiBrYSh0KXt0LmZpeGVkJj0tNX10LmludGVycG9sYXRlVHJhbnNmb3JtPWdhLHQubGF5b3V0PXt9LHQubGF5b3V0LmJ1bmRsZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0tMSxuPXQubGVuZ3RoOysrcjxuOyllLnB1c2goeWEodFtyXSkpO3JldHVybiBlfX0sdC5sYXlvdXQuY2hvcmQ9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saSxhLG8scyxsPXt9LGM9MDtmdW5jdGlvbiB1KCl7dmFyIGwsdSxmLHAsZCxnPXt9LHY9W10sbT10LnJhbmdlKGkpLHk9W107Zm9yKGU9W10scj1bXSxsPTAscD0tMTsrK3A8aTspe2Zvcih1PTAsZD0tMTsrK2Q8aTspdSs9bltwXVtkXTt2LnB1c2godSkseS5wdXNoKHQucmFuZ2UoaSkpLGwrPXV9Zm9yKGEmJm0uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBhKHZbdF0sdltlXSl9KSxvJiZ5LmZvckVhY2goZnVuY3Rpb24odCxlKXt0LnNvcnQoZnVuY3Rpb24odCxyKXtyZXR1cm4gbyhuW2VdW3RdLG5bZV1bcl0pfSl9KSxsPShNdC1jKmkpL2wsdT0wLHA9LTE7KytwPGk7KXtmb3IoZj11LGQ9LTE7KytkPGk7KXt2YXIgeD1tW3BdLGI9eVt4XVtkXSxfPW5beF1bYl0sdz11LGs9dSs9XypsO2dbeCtcIi1cIitiXT17aW5kZXg6eCxzdWJpbmRleDpiLHN0YXJ0QW5nbGU6dyxlbmRBbmdsZTprLHZhbHVlOl99fXJbeF09e2luZGV4Ongsc3RhcnRBbmdsZTpmLGVuZEFuZ2xlOnUsdmFsdWU6dlt4XX0sdSs9Y31mb3IocD0tMTsrK3A8aTspZm9yKGQ9cC0xOysrZDxpOyl7dmFyIEE9Z1twK1wiLVwiK2RdLFQ9Z1tkK1wiLVwiK3BdOyhBLnZhbHVlfHxULnZhbHVlKSYmZS5wdXNoKEEudmFsdWU8VC52YWx1ZT97c291cmNlOlQsdGFyZ2V0OkF9Ontzb3VyY2U6QSx0YXJnZXQ6VH0pfXMmJmgoKX1mdW5jdGlvbiBoKCl7ZS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHMoKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlKS8yLChlLnNvdXJjZS52YWx1ZStlLnRhcmdldC52YWx1ZSkvMil9KX1yZXR1cm4gbC5tYXRyaXg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9KG49dCkmJm4ubGVuZ3RoLGU9cj1udWxsLGwpOm59LGwucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LGU9cj1udWxsLGwpOmN9LGwuc29ydEdyb3Vwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LGU9cj1udWxsLGwpOmF9LGwuc29ydFN1Ymdyb3Vwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LGU9bnVsbCxsKTpvfSxsLnNvcnRDaG9yZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCxlJiZoKCksbCk6c30sbC5jaG9yZHM9ZnVuY3Rpb24oKXtyZXR1cm4gZXx8dSgpLGV9LGwuZ3JvdXBzPWZ1bmN0aW9uKCl7cmV0dXJuIHJ8fHUoKSxyfSxsfSx0LmxheW91dC5mb3JjZT1mdW5jdGlvbigpe3ZhciBlLHIsbixpLGEsbyxzPXt9LGw9dC5kaXNwYXRjaChcInN0YXJ0XCIsXCJ0aWNrXCIsXCJlbmRcIiksYz1bMSwxXSx1PS45LGg9QWEsZj1UYSxwPS0zMCxkPU1hLGc9LjEsdj0uNjQsbT1bXSx5PVtdO2Z1bmN0aW9uIHgodCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuLGkpe2lmKGUucG9pbnQhPT10KXt2YXIgYT1lLmN4LXQueCxvPWUuY3ktdC55LHM9aS1yLGw9YSphK28qbztpZihzKnMvdjxsKXtpZihsPGQpe3ZhciBjPWUuY2hhcmdlL2w7dC5weC09YSpjLHQucHktPW8qY31yZXR1cm4hMH1pZihlLnBvaW50JiZsJiZsPGQpe2M9ZS5wb2ludENoYXJnZS9sO3QucHgtPWEqYyx0LnB5LT1vKmN9fXJldHVybiFlLmNoYXJnZX19ZnVuY3Rpb24gYihlKXtlLnB4PXQuZXZlbnQueCxlLnB5PXQuZXZlbnQueSxzLnJlc3VtZSgpfXJldHVybiBzLnRpY2s9ZnVuY3Rpb24oKXtpZigobio9Ljk5KTwuMDA1KXJldHVybiBlPW51bGwsbC5lbmQoe3R5cGU6XCJlbmRcIixhbHBoYTpuPTB9KSwhMDt2YXIgcixzLGgsZixkLHYsYixfLHcsaz1tLmxlbmd0aCxBPXkubGVuZ3RoO2ZvcihzPTA7czxBOysrcylmPShoPXlbc10pLnNvdXJjZSwodj0oXz0oZD1oLnRhcmdldCkueC1mLngpKl8rKHc9ZC55LWYueSkqdykmJihfKj12PW4qYVtzXSooKHY9TWF0aC5zcXJ0KHYpKS1pW3NdKS92LHcqPXYsZC54LT1fKihiPWYud2VpZ2h0K2Qud2VpZ2h0P2Yud2VpZ2h0LyhmLndlaWdodCtkLndlaWdodCk6LjUpLGQueS09dypiLGYueCs9XyooYj0xLWIpLGYueSs9dypiKTtpZigoYj1uKmcpJiYoXz1jWzBdLzIsdz1jWzFdLzIscz0tMSxiKSlmb3IoOysrczxrOykoaD1tW3NdKS54Kz0oXy1oLngpKmIsaC55Kz0ody1oLnkpKmI7aWYocClmb3IoIWZ1bmN0aW9uIHQoZSxyLG4pe3ZhciBpPTAsYT0wO2UuY2hhcmdlPTA7aWYoIWUubGVhZilmb3IodmFyIG8scz1lLm5vZGVzLGw9cy5sZW5ndGgsYz0tMTsrK2M8bDspbnVsbCE9KG89c1tjXSkmJih0KG8scixuKSxlLmNoYXJnZSs9by5jaGFyZ2UsaSs9by5jaGFyZ2Uqby5jeCxhKz1vLmNoYXJnZSpvLmN5KTtpZihlLnBvaW50KXtlLmxlYWZ8fChlLnBvaW50LngrPU1hdGgucmFuZG9tKCktLjUsZS5wb2ludC55Kz1NYXRoLnJhbmRvbSgpLS41KTt2YXIgdT1yKm5bZS5wb2ludC5pbmRleF07ZS5jaGFyZ2UrPWUucG9pbnRDaGFyZ2U9dSxpKz11KmUucG9pbnQueCxhKz11KmUucG9pbnQueX1lLmN4PWkvZS5jaGFyZ2U7ZS5jeT1hL2UuY2hhcmdlfShyPXQuZ2VvbS5xdWFkdHJlZShtKSxuLG8pLHM9LTE7KytzPGs7KShoPW1bc10pLmZpeGVkfHxyLnZpc2l0KHgoaCkpO2ZvcihzPS0xOysrczxrOykoaD1tW3NdKS5maXhlZD8oaC54PWgucHgsaC55PWgucHkpOihoLngtPShoLnB4LShoLnB4PWgueCkpKnUsaC55LT0oaC5weS0oaC5weT1oLnkpKSp1KTtsLnRpY2soe3R5cGU6XCJ0aWNrXCIsYWxwaGE6bn0pfSxzLm5vZGVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPXQscyk6bX0scy5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT10LHMpOnl9LHMuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LHMpOmN9LHMubGlua0Rpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDordCxzKTpofSxzLmRpc3RhbmNlPXMubGlua0Rpc3RhbmNlLHMubGlua1N0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDordCxzKTpmfSxzLmZyaWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0LHMpOnV9LHMuY2hhcmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDordCxzKTpwfSxzLmNoYXJnZURpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXQqdCxzKTpNYXRoLnNxcnQoZCl9LHMuZ3Jhdml0eT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0rdCxzKTpnfSxzLnRoZXRhPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PXQqdCxzKTpNYXRoLnNxcnQodil9LHMuYWxwaGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K3Qsbj90PjA/bj10OihlLmM9bnVsbCxlLnQ9TmFOLGU9bnVsbCxsLmVuZCh7dHlwZTpcImVuZFwiLGFscGhhOm49MH0pKTp0PjAmJihsLnN0YXJ0KHt0eXBlOlwic3RhcnRcIixhbHBoYTpuPXR9KSxlPUFlKHMudGljaykpLHMpOm59LHMuc3RhcnQ9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbj1tLmxlbmd0aCxsPXkubGVuZ3RoLHU9Y1swXSxkPWNbMV07Zm9yKHQ9MDt0PG47Kyt0KShyPW1bdF0pLmluZGV4PXQsci53ZWlnaHQ9MDtmb3IodD0wO3Q8bDsrK3QpXCJudW1iZXJcIj09dHlwZW9mKHI9eVt0XSkuc291cmNlJiYoci5zb3VyY2U9bVtyLnNvdXJjZV0pLFwibnVtYmVyXCI9PXR5cGVvZiByLnRhcmdldCYmKHIudGFyZ2V0PW1bci50YXJnZXRdKSwrK3Iuc291cmNlLndlaWdodCwrK3IudGFyZ2V0LndlaWdodDtmb3IodD0wO3Q8bjsrK3Qpcj1tW3RdLGlzTmFOKHIueCkmJihyLng9ZyhcInhcIix1KSksaXNOYU4oci55KSYmKHIueT1nKFwieVwiLGQpKSxpc05hTihyLnB4KSYmKHIucHg9ci54KSxpc05hTihyLnB5KSYmKHIucHk9ci55KTtpZihpPVtdLFwiZnVuY3Rpb25cIj09dHlwZW9mIGgpZm9yKHQ9MDt0PGw7Kyt0KWlbdF09K2guY2FsbCh0aGlzLHlbdF0sdCk7ZWxzZSBmb3IodD0wO3Q8bDsrK3QpaVt0XT1oO2lmKGE9W10sXCJmdW5jdGlvblwiPT10eXBlb2YgZilmb3IodD0wO3Q8bDsrK3QpYVt0XT0rZi5jYWxsKHRoaXMseVt0XSx0KTtlbHNlIGZvcih0PTA7dDxsOysrdClhW3RdPWY7aWYobz1bXSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBwKWZvcih0PTA7dDxuOysrdClvW3RdPStwLmNhbGwodGhpcyxtW3RdLHQpO2Vsc2UgZm9yKHQ9MDt0PG47Kyt0KW9bdF09cDtmdW5jdGlvbiBnKHIsaSl7aWYoIWUpe2ZvcihlPW5ldyBBcnJheShuKSxjPTA7YzxuOysrYyllW2NdPVtdO2ZvcihjPTA7YzxsOysrYyl7dmFyIGE9eVtjXTtlW2Euc291cmNlLmluZGV4XS5wdXNoKGEudGFyZ2V0KSxlW2EudGFyZ2V0LmluZGV4XS5wdXNoKGEuc291cmNlKX19Zm9yKHZhciBvLHM9ZVt0XSxjPS0xLHU9cy5sZW5ndGg7KytjPHU7KWlmKCFpc05hTihvPXNbY11bcl0pKXJldHVybiBvO3JldHVybiBNYXRoLnJhbmRvbSgpKml9cmV0dXJuIHMucmVzdW1lKCl9LHMucmVzdW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHMuYWxwaGEoLjEpfSxzLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gcy5hbHBoYSgwKX0scy5kcmFnPWZ1bmN0aW9uKCl7aWYocnx8KHI9dC5iZWhhdmlvci5kcmFnKCkub3JpZ2luKHopLm9uKFwiZHJhZ3N0YXJ0LmZvcmNlXCIsYmEpLm9uKFwiZHJhZy5mb3JjZVwiLGIpLm9uKFwiZHJhZ2VuZC5mb3JjZVwiLF9hKSksIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHI7dGhpcy5vbihcIm1vdXNlb3Zlci5mb3JjZVwiLHdhKS5vbihcIm1vdXNlb3V0LmZvcmNlXCIsa2EpLmNhbGwocil9LHQucmViaW5kKHMsbCxcIm9uXCIpfTt2YXIgQWE9MjAsVGE9MSxNYT0xLzA7ZnVuY3Rpb24gU2EoZSxyKXtyZXR1cm4gdC5yZWJpbmQoZSxyLFwic29ydFwiLFwiY2hpbGRyZW5cIixcInZhbHVlXCIpLGUubm9kZXM9ZSxlLmxpbmtzPUlhLGV9ZnVuY3Rpb24gRWEodCxlKXtmb3IodmFyIHI9W3RdO251bGwhPSh0PXIucG9wKCkpOylpZihlKHQpLChpPXQuY2hpbGRyZW4pJiYobj1pLmxlbmd0aCkpZm9yKHZhciBuLGk7LS1uPj0wOylyLnB1c2goaVtuXSl9ZnVuY3Rpb24gQ2EodCxlKXtmb3IodmFyIHI9W3RdLG49W107bnVsbCE9KHQ9ci5wb3AoKSk7KWlmKG4ucHVzaCh0KSwoYT10LmNoaWxkcmVuKSYmKGk9YS5sZW5ndGgpKWZvcih2YXIgaSxhLG89LTE7KytvPGk7KXIucHVzaChhW29dKTtmb3IoO251bGwhPSh0PW4ucG9wKCkpOyllKHQpfWZ1bmN0aW9uIExhKHQpe3JldHVybiB0LmNoaWxkcmVufWZ1bmN0aW9uIHphKHQpe3JldHVybiB0LnZhbHVlfWZ1bmN0aW9uIE9hKHQsZSl7cmV0dXJuIGUudmFsdWUtdC52YWx1ZX1mdW5jdGlvbiBJYShlKXtyZXR1cm4gdC5tZXJnZShlLm1hcChmdW5jdGlvbih0KXtyZXR1cm4odC5jaGlsZHJlbnx8W10pLm1hcChmdW5jdGlvbihlKXtyZXR1cm57c291cmNlOnQsdGFyZ2V0OmV9fSl9KSl9dC5sYXlvdXQuaGllcmFyY2h5PWZ1bmN0aW9uKCl7dmFyIHQ9T2EsZT1MYSxyPXphO2Z1bmN0aW9uIG4oaSl7dmFyIGEsbz1baV0scz1bXTtmb3IoaS5kZXB0aD0wO251bGwhPShhPW8ucG9wKCkpOylpZihzLnB1c2goYSksKGM9ZS5jYWxsKG4sYSxhLmRlcHRoKSkmJihsPWMubGVuZ3RoKSl7Zm9yKHZhciBsLGMsdTstLWw+PTA7KW8ucHVzaCh1PWNbbF0pLHUucGFyZW50PWEsdS5kZXB0aD1hLmRlcHRoKzE7ciYmKGEudmFsdWU9MCksYS5jaGlsZHJlbj1jfWVsc2UgciYmKGEudmFsdWU9K3IuY2FsbChuLGEsYS5kZXB0aCl8fDApLGRlbGV0ZSBhLmNoaWxkcmVuO3JldHVybiBDYShpLGZ1bmN0aW9uKGUpe3ZhciBuLGk7dCYmKG49ZS5jaGlsZHJlbikmJm4uc29ydCh0KSxyJiYoaT1lLnBhcmVudCkmJihpLnZhbHVlKz1lLnZhbHVlKX0pLHN9cmV0dXJuIG4uc29ydD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG4pOnR9LG4uY2hpbGRyZW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sbi5yZXZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiByJiYoRWEodCxmdW5jdGlvbih0KXt0LmNoaWxkcmVuJiYodC52YWx1ZT0wKX0pLENhKHQsZnVuY3Rpb24odCl7dmFyIGU7dC5jaGlsZHJlbnx8KHQudmFsdWU9K3IuY2FsbChuLHQsdC5kZXB0aCl8fDApLChlPXQucGFyZW50KSYmKGUudmFsdWUrPXQudmFsdWUpfSkpLHR9LG59LHQubGF5b3V0LnBhcnRpdGlvbj1mdW5jdGlvbigpe3ZhciBlPXQubGF5b3V0LmhpZXJhcmNoeSgpLHI9WzEsMV07ZnVuY3Rpb24gbih0LG4pe3ZhciBpPWUuY2FsbCh0aGlzLHQsbik7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4saSl7dmFyIGE9ZS5jaGlsZHJlbjtpZihlLng9cixlLnk9ZS5kZXB0aCppLGUuZHg9bixlLmR5PWksYSYmKG89YS5sZW5ndGgpKXt2YXIgbyxzLGwsYz0tMTtmb3Iobj1lLnZhbHVlP24vZS52YWx1ZTowOysrYzxvOyl0KHM9YVtjXSxyLGw9cy52YWx1ZSpuLGkpLHIrPWx9fShpWzBdLDAsclswXSxyWzFdL2Z1bmN0aW9uIHQoZSl7dmFyIHI9ZS5jaGlsZHJlbixuPTA7aWYociYmKGk9ci5sZW5ndGgpKWZvcih2YXIgaSxhPS0xOysrYTxpOyluPU1hdGgubWF4KG4sdChyW2FdKSk7cmV0dXJuIDErbn0oaVswXSkpLGl9cmV0dXJuIG4uc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LFNhKG4sZSl9LHQubGF5b3V0LnBpZT1mdW5jdGlvbigpe3ZhciBlPU51bWJlcixyPURhLG49MCxpPU10LGE9MDtmdW5jdGlvbiBvKHMpe3ZhciBsLGM9cy5sZW5ndGgsdT1zLm1hcChmdW5jdGlvbih0LHIpe3JldHVybitlLmNhbGwobyx0LHIpfSksaD0rKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6biksZj0oXCJmdW5jdGlvblwiPT10eXBlb2YgaT9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTppKS1oLHA9TWF0aC5taW4oTWF0aC5hYnMoZikvYywrKFwiZnVuY3Rpb25cIj09dHlwZW9mIGE/YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YSkpLGQ9cCooZjwwPy0xOjEpLGc9dC5zdW0odSksdj1nPyhmLWMqZCkvZzowLG09dC5yYW5nZShjKSx5PVtdO3JldHVybiBudWxsIT1yJiZtLnNvcnQocj09PURhP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHVbZV0tdVt0XX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gcihzW3RdLHNbZV0pfSksbS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3lbdF09e2RhdGE6c1t0XSx2YWx1ZTpsPXVbdF0sc3RhcnRBbmdsZTpoLGVuZEFuZ2xlOmgrPWwqditkLHBhZEFuZ2xlOnB9fSkseX1yZXR1cm4gby52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG8pOmV9LG8uc29ydD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG8pOnJ9LG8uc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LG8pOm59LG8uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxvKTppfSxvLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsbyk6YX0sb307dmFyIERhPXt9O2Z1bmN0aW9uIFBhKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gUmEodCl7cmV0dXJuIHQueX1mdW5jdGlvbiBGYSh0LGUscil7dC55MD1lLHQueT1yfXQubGF5b3V0LnN0YWNrPWZ1bmN0aW9uKCl7dmFyIGU9eixyPWphLG49VmEsaT1GYSxhPVBhLG89UmE7ZnVuY3Rpb24gcyhsLGMpe2lmKCEocD1sLmxlbmd0aCkpcmV0dXJuIGw7dmFyIHU9bC5tYXAoZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5jYWxsKHMsdCxyKX0pLGg9dS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW2EuY2FsbChzLHQsZSksby5jYWxsKHMsdCxlKV19KX0pLGY9ci5jYWxsKHMsaCxjKTt1PXQucGVybXV0ZSh1LGYpLGg9dC5wZXJtdXRlKGgsZik7dmFyIHAsZCxnLHYsbT1uLmNhbGwocyxoLGMpLHk9dVswXS5sZW5ndGg7Zm9yKGc9MDtnPHk7KytnKWZvcihpLmNhbGwocyx1WzBdW2ddLHY9bVtnXSxoWzBdW2ddWzFdKSxkPTE7ZDxwOysrZClpLmNhbGwocyx1W2RdW2ddLHYrPWhbZC0xXVtnXVsxXSxoW2RdW2ddWzFdKTtyZXR1cm4gbH1yZXR1cm4gcy52YWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxzKTplfSxzLm9yZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpCYS5nZXQodCl8fGphLHMpOnJ9LHMub2Zmc2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpOYS5nZXQodCl8fFZhLHMpOm59LHMueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LHMpOmF9LHMueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LHMpOm99LHMub3V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQscyk6aX0sc307dmFyIEJhPXQubWFwKHtcImluc2lkZS1vdXRcIjpmdW5jdGlvbihlKXt2YXIgcixuLGk9ZS5sZW5ndGgsYT1lLm1hcChVYSksbz1lLm1hcChxYSkscz10LnJhbmdlKGkpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gYVt0XS1hW2VdfSksbD0wLGM9MCx1PVtdLGg9W107Zm9yKHI9MDtyPGk7KytyKW49c1tyXSxsPGM/KGwrPW9bbl0sdS5wdXNoKG4pKTooYys9b1tuXSxoLnB1c2gobikpO3JldHVybiBoLnJldmVyc2UoKS5jb25jYXQodSl9LHJldmVyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIHQucmFuZ2UoZS5sZW5ndGgpLnJldmVyc2UoKX0sZGVmYXVsdDpqYX0pLE5hPXQubWFwKHtzaWxob3VldHRlOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXQubGVuZ3RoLGE9dFswXS5sZW5ndGgsbz1bXSxzPTAsbD1bXTtmb3Iocj0wO3I8YTsrK3Ipe2ZvcihlPTAsbj0wO2U8aTtlKyspbis9dFtlXVtyXVsxXTtuPnMmJihzPW4pLG8ucHVzaChuKX1mb3Iocj0wO3I8YTsrK3IpbFtyXT0ocy1vW3JdKS8yO3JldHVybiBsfSx3aWdnbGU6ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHMsbCxjLHU9dC5sZW5ndGgsaD10WzBdLGY9aC5sZW5ndGgscD1bXTtmb3IocFswXT1sPWM9MCxyPTE7cjxmOysrcil7Zm9yKGU9MCxpPTA7ZTx1OysrZSlpKz10W2VdW3JdWzFdO2ZvcihlPTAsYT0wLHM9aFtyXVswXS1oW3ItMV1bMF07ZTx1OysrZSl7Zm9yKG49MCxvPSh0W2VdW3JdWzFdLXRbZV1bci0xXVsxXSkvKDIqcyk7bjxlOysrbilvKz0odFtuXVtyXVsxXS10W25dW3ItMV1bMV0pL3M7YSs9byp0W2VdW3JdWzFdfXBbcl09bC09aT9hL2kqczowLGw8YyYmKGM9bCl9Zm9yKHI9MDtyPGY7KytyKXBbcl0tPWM7cmV0dXJuIHB9LGV4cGFuZDpmdW5jdGlvbih0KXt2YXIgZSxyLG4saT10Lmxlbmd0aCxhPXRbMF0ubGVuZ3RoLG89MS9pLHM9W107Zm9yKHI9MDtyPGE7KytyKXtmb3IoZT0wLG49MDtlPGk7ZSsrKW4rPXRbZV1bcl1bMV07aWYobilmb3IoZT0wO2U8aTtlKyspdFtlXVtyXVsxXS89bjtlbHNlIGZvcihlPTA7ZTxpO2UrKyl0W2VdW3JdWzFdPW99Zm9yKHI9MDtyPGE7KytyKXNbcl09MDtyZXR1cm4gc30semVybzpWYX0pO2Z1bmN0aW9uIGphKGUpe3JldHVybiB0LnJhbmdlKGUubGVuZ3RoKX1mdW5jdGlvbiBWYSh0KXtmb3IodmFyIGU9LTEscj10WzBdLmxlbmd0aCxuPVtdOysrZTxyOyluW2VdPTA7cmV0dXJuIG59ZnVuY3Rpb24gVWEodCl7Zm9yKHZhciBlLHI9MSxuPTAsaT10WzBdWzFdLGE9dC5sZW5ndGg7cjxhOysrcikoZT10W3JdWzFdKT5pJiYobj1yLGk9ZSk7cmV0dXJuIG59ZnVuY3Rpb24gcWEodCl7cmV0dXJuIHQucmVkdWNlKEhhLDApfWZ1bmN0aW9uIEhhKHQsZSl7cmV0dXJuIHQrZVsxXX1mdW5jdGlvbiBHYSh0LGUpe3JldHVybiBZYSh0LE1hdGguY2VpbChNYXRoLmxvZyhlLmxlbmd0aCkvTWF0aC5MTjIrMSkpfWZ1bmN0aW9uIFlhKHQsZSl7Zm9yKHZhciByPS0xLG49K3RbMF0saT0odFsxXS1uKS9lLGE9W107KytyPD1lOylhW3JdPWkqcituO3JldHVybiBhfWZ1bmN0aW9uIFdhKGUpe3JldHVyblt0Lm1pbihlKSx0Lm1heChlKV19ZnVuY3Rpb24gWGEodCxlKXtyZXR1cm4gdC52YWx1ZS1lLnZhbHVlfWZ1bmN0aW9uIFphKHQsZSl7dmFyIHI9dC5fcGFja19uZXh0O3QuX3BhY2tfbmV4dD1lLGUuX3BhY2tfcHJldj10LGUuX3BhY2tfbmV4dD1yLHIuX3BhY2tfcHJldj1lfWZ1bmN0aW9uICRhKHQsZSl7dC5fcGFja19uZXh0PWUsZS5fcGFja19wcmV2PXR9ZnVuY3Rpb24gSmEodCxlKXt2YXIgcj1lLngtdC54LG49ZS55LXQueSxpPXQucitlLnI7cmV0dXJuLjk5OSppKmk+cipyK24qbn1mdW5jdGlvbiBLYSh0KXtpZigoZT10LmNoaWxkcmVuKSYmKGw9ZS5sZW5ndGgpKXt2YXIgZSxyLG4saSxhLG8scyxsLGM9MS8wLHU9LTEvMCxoPTEvMCxmPS0xLzA7aWYoZS5mb3JFYWNoKFFhKSwocj1lWzBdKS54PS1yLnIsci55PTAseChyKSxsPjEmJigobj1lWzFdKS54PW4ucixuLnk9MCx4KG4pLGw+MikpZm9yKGVvKHIsbixpPWVbMl0pLHgoaSksWmEocixpKSxyLl9wYWNrX3ByZXY9aSxaYShpLG4pLG49ci5fcGFja19uZXh0LGE9MzthPGw7YSsrKXtlbyhyLG4saT1lW2FdKTt2YXIgcD0wLGQ9MSxnPTE7Zm9yKG89bi5fcGFja19uZXh0O28hPT1uO289by5fcGFja19uZXh0LGQrKylpZihKYShvLGkpKXtwPTE7YnJlYWt9aWYoMT09cClmb3Iocz1yLl9wYWNrX3ByZXY7cyE9PW8uX3BhY2tfcHJldiYmIUphKHMsaSk7cz1zLl9wYWNrX3ByZXYsZysrKTtwPyhkPGd8fGQ9PWcmJm4ucjxyLnI/JGEocixuPW8pOiRhKHI9cyxuKSxhLS0pOihaYShyLGkpLG49aSx4KGkpKX12YXIgdj0oYyt1KS8yLG09KGgrZikvMix5PTA7Zm9yKGE9MDthPGw7YSsrKShpPWVbYV0pLngtPXYsaS55LT1tLHk9TWF0aC5tYXgoeSxpLnIrTWF0aC5zcXJ0KGkueCppLngraS55KmkueSkpO3Qucj15LGUuZm9yRWFjaCh0byl9ZnVuY3Rpb24geCh0KXtjPU1hdGgubWluKHQueC10LnIsYyksdT1NYXRoLm1heCh0LngrdC5yLHUpLGg9TWF0aC5taW4odC55LXQucixoKSxmPU1hdGgubWF4KHQueSt0LnIsZil9fWZ1bmN0aW9uIFFhKHQpe3QuX3BhY2tfbmV4dD10Ll9wYWNrX3ByZXY9dH1mdW5jdGlvbiB0byh0KXtkZWxldGUgdC5fcGFja19uZXh0LGRlbGV0ZSB0Ll9wYWNrX3ByZXZ9ZnVuY3Rpb24gZW8odCxlLHIpe3ZhciBuPXQucityLnIsaT1lLngtdC54LGE9ZS55LXQueTtpZihuJiYoaXx8YSkpe3ZhciBvPWUucityLnIscz1pKmkrYSphLGw9LjUrKChuKj1uKS0obyo9bykpLygyKnMpLGM9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKihuK3MpLShuLT1zKSpuLW8qbykpLygyKnMpO3IueD10LngrbCppK2MqYSxyLnk9dC55K2wqYS1jKml9ZWxzZSByLng9dC54K24sci55PXQueX1mdW5jdGlvbiBybyh0LGUpe3JldHVybiB0LnBhcmVudD09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIG5vKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGUubGVuZ3RoP2VbMF06dC50fWZ1bmN0aW9uIGlvKHQpe3ZhciBlLHI9dC5jaGlsZHJlbjtyZXR1cm4oZT1yLmxlbmd0aCk/cltlLTFdOnQudH1mdW5jdGlvbiBhbyh0LGUscil7dmFyIG49ci8oZS5pLXQuaSk7ZS5jLT1uLGUucys9cix0LmMrPW4sZS56Kz1yLGUubSs9cn1mdW5jdGlvbiBvbyh0LGUscil7cmV0dXJuIHQuYS5wYXJlbnQ9PT1lLnBhcmVudD90LmE6cn1mdW5jdGlvbiBzbyh0KXtyZXR1cm57eDp0LngseTp0LnksZHg6dC5keCxkeTp0LmR5fX1mdW5jdGlvbiBsbyh0LGUpe3ZhciByPXQueCtlWzNdLG49dC55K2VbMF0saT10LmR4LWVbMV0tZVszXSxhPXQuZHktZVswXS1lWzJdO3JldHVybiBpPDAmJihyKz1pLzIsaT0wKSxhPDAmJihuKz1hLzIsYT0wKSx7eDpyLHk6bixkeDppLGR5OmF9fWZ1bmN0aW9uIGNvKHQpe3ZhciBlPXRbMF0scj10W3QubGVuZ3RoLTFdO3JldHVybiBlPHI/W2Uscl06W3IsZV19ZnVuY3Rpb24gdW8odCl7cmV0dXJuIHQucmFuZ2VFeHRlbnQ/dC5yYW5nZUV4dGVudCgpOmNvKHQucmFuZ2UoKSl9ZnVuY3Rpb24gaG8odCxlLHIsbil7dmFyIGk9cih0WzBdLHRbMV0pLGE9bihlWzBdLGVbMV0pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gYShpKHQpKX19ZnVuY3Rpb24gZm8odCxlKXt2YXIgcixuPTAsaT10Lmxlbmd0aC0xLGE9dFtuXSxvPXRbaV07cmV0dXJuIG88YSYmKHI9bixuPWksaT1yLHI9YSxhPW8sbz1yKSx0W25dPWUuZmxvb3IoYSksdFtpXT1lLmNlaWwobyksdH1mdW5jdGlvbiBwbyh0KXtyZXR1cm4gdD97Zmxvb3I6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoZS90KSp0fSxjZWlsOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmNlaWwoZS90KSp0fX06Z299dC5sYXlvdXQuaGlzdG9ncmFtPWZ1bmN0aW9uKCl7dmFyIGU9ITAscj1OdW1iZXIsbj1XYSxpPUdhO2Z1bmN0aW9uIGEoYSxvKXtmb3IodmFyIHMsbCxjPVtdLHU9YS5tYXAocix0aGlzKSxoPW4uY2FsbCh0aGlzLHUsbyksZj1pLmNhbGwodGhpcyxoLHUsbykscD0obz0tMSx1Lmxlbmd0aCksZD1mLmxlbmd0aC0xLGc9ZT8xOjEvcDsrK288ZDspKHM9Y1tvXT1bXSkuZHg9ZltvKzFdLShzLng9ZltvXSkscy55PTA7aWYoZD4wKWZvcihvPS0xOysrbzxwOykobD11W29dKT49aFswXSYmbDw9aFsxXSYmKChzPWNbdC5iaXNlY3QoZixsLDEsZCktMV0pLnkrPWcscy5wdXNoKGFbb10pKTtyZXR1cm4gY31yZXR1cm4gYS52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGEpOnJ9LGEucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dmUodCksYSk6bn0sYS5iaW5zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPVwibnVtYmVyXCI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUpe3JldHVybiBZYShlLHQpfTp2ZSh0KSxhKTppfSxhLmZyZXF1ZW5jeT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0hIXQsYSk6ZX0sYX0sdC5sYXlvdXQucGFjaz1mdW5jdGlvbigpe3ZhciBlLHI9dC5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChYYSksbj0wLGk9WzEsMV07ZnVuY3Rpb24gYSh0LGEpe3ZhciBvPXIuY2FsbCh0aGlzLHQsYSkscz1vWzBdLGw9aVswXSxjPWlbMV0sdT1udWxsPT1lP01hdGguc3FydDpcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6ZnVuY3Rpb24oKXtyZXR1cm4gZX07aWYocy54PXMueT0wLENhKHMsZnVuY3Rpb24odCl7dC5yPSt1KHQudmFsdWUpfSksQ2EocyxLYSksbil7dmFyIGg9biooZT8xOk1hdGgubWF4KDIqcy5yL2wsMipzLnIvYykpLzI7Q2EocyxmdW5jdGlvbih0KXt0LnIrPWh9KSxDYShzLEthKSxDYShzLGZ1bmN0aW9uKHQpe3Quci09aH0pfXJldHVybiBmdW5jdGlvbiB0KGUscixuLGkpe3ZhciBhPWUuY2hpbGRyZW47ZS54PXIrPWkqZS54O2UueT1uKz1pKmUueTtlLnIqPWk7aWYoYSlmb3IodmFyIG89LTEscz1hLmxlbmd0aDsrK288czspdChhW29dLHIsbixpKX0ocyxsLzIsYy8yLGU/MToxL01hdGgubWF4KDIqcy5yL2wsMipzLnIvYykpLG99cmV0dXJuIGEuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGEpOml9LGEucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXR8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDordCxhKTplfSxhLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsYSk6bn0sU2EoYSxyKX0sdC5sYXlvdXQudHJlZT1mdW5jdGlvbigpe3ZhciBlPXQubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQobnVsbCkudmFsdWUobnVsbCkscj1ybyxuPVsxLDFdLGk9bnVsbDtmdW5jdGlvbiBhKHQsYSl7dmFyIGM9ZS5jYWxsKHRoaXMsdCxhKSx1PWNbMF0saD1mdW5jdGlvbih0KXt2YXIgZSxyPXtBOm51bGwsY2hpbGRyZW46W3RdfSxuPVtyXTtmb3IoO251bGwhPShlPW4ucG9wKCkpOylmb3IodmFyIGksYT1lLmNoaWxkcmVuLG89MCxzPWEubGVuZ3RoO288czsrK28pbi5wdXNoKChhW29dPWk9e186YVtvXSxwYXJlbnQ6ZSxjaGlsZHJlbjooaT1hW29dLmNoaWxkcmVuKSYmaS5zbGljZSgpfHxbXSxBOm51bGwsYTpudWxsLHo6MCxtOjAsYzowLHM6MCx0Om51bGwsaTpvfSkuYT1pKTtyZXR1cm4gci5jaGlsZHJlblswXX0odSk7aWYoQ2EoaCxvKSxoLnBhcmVudC5tPS1oLnosRWEoaCxzKSxpKUVhKHUsbCk7ZWxzZXt2YXIgZj11LHA9dSxkPXU7RWEodSxmdW5jdGlvbih0KXt0Lng8Zi54JiYoZj10KSx0Lng+cC54JiYocD10KSx0LmRlcHRoPmQuZGVwdGgmJihkPXQpfSk7dmFyIGc9cihmLHApLzItZi54LHY9blswXS8ocC54K3IocCxmKS8yK2cpLG09blsxXS8oZC5kZXB0aHx8MSk7RWEodSxmdW5jdGlvbih0KXt0Lng9KHQueCtnKSp2LHQueT10LmRlcHRoKm19KX1yZXR1cm4gY31mdW5jdGlvbiBvKHQpe3ZhciBlPXQuY2hpbGRyZW4sbj10LnBhcmVudC5jaGlsZHJlbixpPXQuaT9uW3QuaS0xXTpudWxsO2lmKGUubGVuZ3RoKXshZnVuY3Rpb24odCl7dmFyIGUscj0wLG49MCxpPXQuY2hpbGRyZW4sYT1pLmxlbmd0aDtmb3IoOy0tYT49MDspKGU9aVthXSkueis9cixlLm0rPXIscis9ZS5zKyhuKz1lLmMpfSh0KTt2YXIgYT0oZVswXS56K2VbZS5sZW5ndGgtMV0ueikvMjtpPyh0Lno9aS56K3IodC5fLGkuXyksdC5tPXQuei1hKTp0Lno9YX1lbHNlIGkmJih0Lno9aS56K3IodC5fLGkuXykpO3QucGFyZW50LkE9ZnVuY3Rpb24odCxlLG4pe2lmKGUpe2Zvcih2YXIgaSxhPXQsbz10LHM9ZSxsPWEucGFyZW50LmNoaWxkcmVuWzBdLGM9YS5tLHU9by5tLGg9cy5tLGY9bC5tO3M9aW8ocyksYT1ubyhhKSxzJiZhOylsPW5vKGwpLChvPWlvKG8pKS5hPXQsKGk9cy56K2gtYS56LWMrcihzLl8sYS5fKSk+MCYmKGFvKG9vKHMsdCxuKSx0LGkpLGMrPWksdSs9aSksaCs9cy5tLGMrPWEubSxmKz1sLm0sdSs9by5tO3MmJiFpbyhvKSYmKG8udD1zLG8ubSs9aC11KSxhJiYhbm8obCkmJihsLnQ9YSxsLm0rPWMtZixuPXQpfXJldHVybiBufSh0LGksdC5wYXJlbnQuQXx8blswXSl9ZnVuY3Rpb24gcyh0KXt0Ll8ueD10LnordC5wYXJlbnQubSx0Lm0rPXQucGFyZW50Lm19ZnVuY3Rpb24gbCh0KXt0LngqPW5bMF0sdC55PXQuZGVwdGgqblsxXX1yZXR1cm4gYS5zZXBhcmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PShuPXQpP2w6bnVsbCxhKTppP251bGw6bn0sYS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT0obj10KT9udWxsOmwsYSk6aT9uOm51bGx9LFNhKGEsZSl9LHQubGF5b3V0LmNsdXN0ZXI9ZnVuY3Rpb24oKXt2YXIgZT10LmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KG51bGwpLnZhbHVlKG51bGwpLHI9cm8sbj1bMSwxXSxpPSExO2Z1bmN0aW9uIGEoYSxvKXt2YXIgcyxsPWUuY2FsbCh0aGlzLGEsbyksYz1sWzBdLHU9MDtDYShjLGZ1bmN0aW9uKGUpe3ZhciBuPWUuY2hpbGRyZW47biYmbi5sZW5ndGg/KGUueD1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlLnh9LDApL3QubGVuZ3RofShuKSxlLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIDErdC5tYXgoZSxmdW5jdGlvbih0KXtyZXR1cm4gdC55fSl9KG4pKTooZS54PXM/dSs9cihlLHMpOjAsZS55PTAscz1lKX0pO3ZhciBoPWZ1bmN0aW9uIHQoZSl7dmFyIHI9ZS5jaGlsZHJlbjtyZXR1cm4gciYmci5sZW5ndGg/dChyWzBdKTplfShjKSxmPWZ1bmN0aW9uIHQoZSl7dmFyIHIsbj1lLmNoaWxkcmVuO3JldHVybiBuJiYocj1uLmxlbmd0aCk/dChuW3ItMV0pOmV9KGMpLHA9aC54LXIoaCxmKS8yLGQ9Zi54K3IoZixoKS8yO3JldHVybiBDYShjLGk/ZnVuY3Rpb24odCl7dC54PSh0LngtYy54KSpuWzBdLHQueT0oYy55LXQueSkqblsxXX06ZnVuY3Rpb24odCl7dC54PSh0LngtcCkvKGQtcCkqblswXSx0Lnk9KDEtKGMueT90LnkvYy55OjEpKSpuWzFdfSksbH1yZXR1cm4gYS5zZXBhcmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PShuPXQpLGEpOmk/bnVsbDpufSxhLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGwhPShuPXQpLGEpOmk/bjpudWxsfSxTYShhLGUpfSx0LmxheW91dC50cmVlbWFwPWZ1bmN0aW9uKCl7dmFyIGUscj10LmxheW91dC5oaWVyYXJjaHkoKSxuPU1hdGgucm91bmQsaT1bMSwxXSxhPW51bGwsbz1zbyxzPSExLGw9XCJzcXVhcmlmeVwiLGM9LjUqKDErTWF0aC5zcXJ0KDUpKTtmdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByLG4saT0tMSxhPXQubGVuZ3RoOysraTxhOyluPShyPXRbaV0pLnZhbHVlKihlPDA/MDplKSxyLmFyZWE9aXNOYU4obil8fG48PTA/MDpufWZ1bmN0aW9uIGgodCl7dmFyIGU9dC5jaGlsZHJlbjtpZihlJiZlLmxlbmd0aCl7dmFyIHIsbixpLGE9byh0KSxzPVtdLGM9ZS5zbGljZSgpLGY9MS8wLGc9XCJzbGljZVwiPT09bD9hLmR4OlwiZGljZVwiPT09bD9hLmR5Olwic2xpY2UtZGljZVwiPT09bD8xJnQuZGVwdGg/YS5keTphLmR4Ok1hdGgubWluKGEuZHgsYS5keSk7Zm9yKHUoYyxhLmR4KmEuZHkvdC52YWx1ZSkscy5hcmVhPTA7KGk9Yy5sZW5ndGgpPjA7KXMucHVzaChyPWNbaS0xXSkscy5hcmVhKz1yLmFyZWEsXCJzcXVhcmlmeVwiIT09bHx8KG49cChzLGcpKTw9Zj8oYy5wb3AoKSxmPW4pOihzLmFyZWEtPXMucG9wKCkuYXJlYSxkKHMsZyxhLCExKSxnPU1hdGgubWluKGEuZHgsYS5keSkscy5sZW5ndGg9cy5hcmVhPTAsZj0xLzApO3MubGVuZ3RoJiYoZChzLGcsYSwhMCkscy5sZW5ndGg9cy5hcmVhPTApLGUuZm9yRWFjaChoKX19ZnVuY3Rpb24gZih0KXt2YXIgZT10LmNoaWxkcmVuO2lmKGUmJmUubGVuZ3RoKXt2YXIgcixuPW8odCksaT1lLnNsaWNlKCksYT1bXTtmb3IodShpLG4uZHgqbi5keS90LnZhbHVlKSxhLmFyZWE9MDtyPWkucG9wKCk7KWEucHVzaChyKSxhLmFyZWErPXIuYXJlYSxudWxsIT1yLnomJihkKGEsci56P24uZHg6bi5keSxuLCFpLmxlbmd0aCksYS5sZW5ndGg9YS5hcmVhPTApO2UuZm9yRWFjaChmKX19ZnVuY3Rpb24gcCh0LGUpe2Zvcih2YXIgcixuPXQuYXJlYSxpPTAsYT0xLzAsbz0tMSxzPXQubGVuZ3RoOysrbzxzOykocj10W29dLmFyZWEpJiYocjxhJiYoYT1yKSxyPmkmJihpPXIpKTtyZXR1cm4gZSo9ZSwobio9bik/TWF0aC5tYXgoZSppKmMvbixuLyhlKmEqYykpOjEvMH1mdW5jdGlvbiBkKHQsZSxyLGkpe3ZhciBhLG89LTEscz10Lmxlbmd0aCxsPXIueCxjPXIueSx1PWU/bih0LmFyZWEvZSk6MDtpZihlPT1yLmR4KXtmb3IoKGl8fHU+ci5keSkmJih1PXIuZHkpOysrbzxzOykoYT10W29dKS54PWwsYS55PWMsYS5keT11LGwrPWEuZHg9TWF0aC5taW4oci54K3IuZHgtbCx1P24oYS5hcmVhL3UpOjApO2Euej0hMCxhLmR4Kz1yLngrci5keC1sLHIueSs9dSxyLmR5LT11fWVsc2V7Zm9yKChpfHx1PnIuZHgpJiYodT1yLmR4KTsrK288czspKGE9dFtvXSkueD1sLGEueT1jLGEuZHg9dSxjKz1hLmR5PU1hdGgubWluKHIueStyLmR5LWMsdT9uKGEuYXJlYS91KTowKTthLno9ITEsYS5keSs9ci55K3IuZHktYyxyLngrPXUsci5keC09dX19ZnVuY3Rpb24gZyh0KXt2YXIgbj1lfHxyKHQpLGE9blswXTtyZXR1cm4gYS54PWEueT0wLGEudmFsdWU/KGEuZHg9aVswXSxhLmR5PWlbMV0pOmEuZHg9YS5keT0wLGUmJnIucmV2YWx1ZShhKSx1KFthXSxhLmR4KmEuZHkvYS52YWx1ZSksKGU/ZjpoKShhKSxzJiYoZT1uKSxufXJldHVybiBnLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxnKTppfSxnLnBhZGRpbmc9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGE7ZnVuY3Rpb24gZShlKXtyZXR1cm4gbG8oZSx0KX12YXIgcjtyZXR1cm4gbz1udWxsPT0oYT10KT9zbzpcImZ1bmN0aW9uXCI9PShyPXR5cGVvZiB0KT9mdW5jdGlvbihlKXt2YXIgcj10LmNhbGwoZyxlLGUuZGVwdGgpO3JldHVybiBudWxsPT1yP3NvKGUpOmxvKGUsXCJudW1iZXJcIj09dHlwZW9mIHI/W3IscixyLHJdOnIpfTpcIm51bWJlclwiPT09cj8odD1bdCx0LHQsdF0sZSk6ZSxnfSxnLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQ/TWF0aC5yb3VuZDpOdW1iZXIsZyk6biE9TnVtYmVyfSxnLnN0aWNreT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGU9bnVsbCxnKTpzfSxnLnJhdGlvPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsZyk6Y30sZy5tb2RlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQrXCJcIixnKTpsfSxTYShnLHIpfSx0LnJhbmRvbT17bm9ybWFsOmZ1bmN0aW9uKHQsZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gcjwyJiYoZT0xKSxyPDEmJih0PTApLGZ1bmN0aW9uKCl7dmFyIHIsbixpO2Rve2k9KHI9MipNYXRoLnJhbmRvbSgpLTEpKnIrKG49MipNYXRoLnJhbmRvbSgpLTEpKm59d2hpbGUoIWl8fGk+MSk7cmV0dXJuIHQrZSpyKk1hdGguc3FydCgtMipNYXRoLmxvZyhpKS9pKX19LGxvZ05vcm1hbDpmdW5jdGlvbigpe3ZhciBlPXQucmFuZG9tLm5vcm1hbC5hcHBseSh0LGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZXhwKGUoKSl9fSxiYXRlczpmdW5jdGlvbihlKXt2YXIgcj10LnJhbmRvbS5pcndpbkhhbGwoZSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIoKS9lfX0saXJ3aW5IYWxsOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT0wLHI9MDtyPHQ7cisrKWUrPU1hdGgucmFuZG9tKCk7cmV0dXJuIGV9fX0sdC5zY2FsZT17fTt2YXIgZ289e2Zsb29yOnosY2VpbDp6fTtmdW5jdGlvbiB2byhlLHIsbixpKXt2YXIgYT1bXSxvPVtdLHM9MCxsPU1hdGgubWluKGUubGVuZ3RoLHIubGVuZ3RoKS0xO2ZvcihlW2xdPGVbMF0mJihlPWUuc2xpY2UoKS5yZXZlcnNlKCkscj1yLnNsaWNlKCkucmV2ZXJzZSgpKTsrK3M8PWw7KWEucHVzaChuKGVbcy0xXSxlW3NdKSksby5wdXNoKGkocltzLTFdLHJbc10pKTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49dC5iaXNlY3QoZSxyLDEsbCktMTtyZXR1cm4gb1tuXShhW25dKHIpKX19ZnVuY3Rpb24gbW8oZSxyKXtyZXR1cm4gdC5yZWJpbmQoZSxyLFwicmFuZ2VcIixcInJhbmdlUm91bmRcIixcImludGVycG9sYXRlXCIsXCJjbGFtcFwiKX1mdW5jdGlvbiB5byh0LGUpe3JldHVybiBmbyh0LHBvKHhvKHQsZSlbMl0pKSxmbyh0LHBvKHhvKHQsZSlbMl0pKSx0fWZ1bmN0aW9uIHhvKHQsZSl7bnVsbD09ZSYmKGU9MTApO3ZhciByPWNvKHQpLG49clsxXS1yWzBdLGk9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhuL2UpL01hdGguTE4xMCkpLGE9ZS9uKmk7cmV0dXJuIGE8PS4xNT9pKj0xMDphPD0uMzU/aSo9NTphPD0uNzUmJihpKj0yKSxyWzBdPU1hdGguY2VpbChyWzBdL2kpKmksclsxXT1NYXRoLmZsb29yKHJbMV0vaSkqaSsuNSppLHJbMl09aSxyfWZ1bmN0aW9uIGJvKGUscil7cmV0dXJuIHQucmFuZ2UuYXBwbHkodCx4byhlLHIpKX1mdW5jdGlvbiBfbyhlLHIsbil7dmFyIGk9eG8oZSxyKTtpZihuKXt2YXIgYT1MZS5leGVjKG4pO2lmKGEuc2hpZnQoKSxcInNcIj09PWFbOF0pe3ZhciBvPXQuZm9ybWF0UHJlZml4KE1hdGgubWF4KHkoaVswXSkseShpWzFdKSkpO3JldHVybiBhWzddfHwoYVs3XT1cIi5cIitrbyhvLnNjYWxlKGlbMl0pKSksYVs4XT1cImZcIixuPXQuZm9ybWF0KGEuam9pbihcIlwiKSksZnVuY3Rpb24odCl7cmV0dXJuIG4oby5zY2FsZSh0KSkrby5zeW1ib2x9fWFbN118fChhWzddPVwiLlwiK2Z1bmN0aW9uKHQsZSl7dmFyIHI9a28oZVsyXSk7cmV0dXJuIHQgaW4gd28/TWF0aC5hYnMoci1rbyhNYXRoLm1heCh5KGVbMF0pLHkoZVsxXSkpKSkrICsoXCJlXCIhPT10KTpyLTIqKFwiJVwiPT09dCl9KGFbOF0saSkpLG49YS5qb2luKFwiXCIpfWVsc2Ugbj1cIiwuXCIra28oaVsyXSkrXCJmXCI7cmV0dXJuIHQuZm9ybWF0KG4pfXQuc2NhbGUubGluZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4saSl7dmFyIGEsbztmdW5jdGlvbiBzKCl7dmFyIHQ9TWF0aC5taW4oZS5sZW5ndGgsci5sZW5ndGgpPjI/dm86aG8scz1pP21hOnZhO3JldHVybiBhPXQoZSxyLHMsbiksbz10KHIsZSxzLFppKSxsfWZ1bmN0aW9uIGwodCl7cmV0dXJuIGEodCl9bC5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG8odCl9O2wuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQubWFwKE51bWJlcikscygpKTplfTtsLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQscygpKTpyfTtsLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGwucmFuZ2UodCkuaW50ZXJwb2xhdGUoY2EpfTtsLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQscygpKTppfTtsLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQscygpKTpufTtsLnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBibyhlLHQpfTtsLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxyKXtyZXR1cm4gX28oZSx0LHIpfTtsLm5pY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHlvKGUsdCkscygpfTtsLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChlLHIsbixpKX07cmV0dXJuIHMoKX0oWzAsMV0sWzAsMV0sWmksITEpfTt2YXIgd289e3M6MSxnOjEscDoxLHI6MSxlOjF9O2Z1bmN0aW9uIGtvKHQpe3JldHVybi1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4xMCsuMDEpfXQuc2NhbGUubG9nPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUocixuLGksYSl7ZnVuY3Rpb24gbyh0KXtyZXR1cm4oaT9NYXRoLmxvZyh0PDA/MDp0KTotTWF0aC5sb2codD4wPzA6LXQpKS9NYXRoLmxvZyhuKX1mdW5jdGlvbiBzKHQpe3JldHVybiBpP01hdGgucG93KG4sdCk6LU1hdGgucG93KG4sLXQpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIHIobyh0KSl9bC5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHMoci5pbnZlcnQodCkpfTtsLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10WzBdPj0wLHIuZG9tYWluKChhPXQubWFwKE51bWJlcikpLm1hcChvKSksbCk6YX07bC5iYXNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LHIuZG9tYWluKGEubWFwKG8pKSxsKTpufTtsLm5pY2U9ZnVuY3Rpb24oKXt2YXIgdD1mbyhhLm1hcChvKSxpP01hdGg6VG8pO3JldHVybiByLmRvbWFpbih0KSxhPXQubWFwKHMpLGx9O2wudGlja3M9ZnVuY3Rpb24oKXt2YXIgdD1jbyhhKSxlPVtdLHI9dFswXSxsPXRbMV0sYz1NYXRoLmZsb29yKG8ocikpLHU9TWF0aC5jZWlsKG8obCkpLGg9biUxPzI6bjtpZihpc0Zpbml0ZSh1LWMpKXtpZihpKXtmb3IoO2M8dTtjKyspZm9yKHZhciBmPTE7ZjxoO2YrKyllLnB1c2gocyhjKSpmKTtlLnB1c2gocyhjKSl9ZWxzZSBmb3IoZS5wdXNoKHMoYykpO2MrKzx1Oylmb3IodmFyIGY9aC0xO2Y+MDtmLS0pZS5wdXNoKHMoYykqZik7Zm9yKGM9MDtlW2NdPHI7YysrKTtmb3IodT1lLmxlbmd0aDtlW3UtMV0+bDt1LS0pO2U9ZS5zbGljZShjLHUpfXJldHVybiBlfTtsLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZSxyKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gQW87YXJndW1lbnRzLmxlbmd0aDwyP3I9QW86XCJmdW5jdGlvblwiIT10eXBlb2YgciYmKHI9dC5mb3JtYXQocikpO3ZhciBpPU1hdGgubWF4KDEsbiplL2wudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10L3MoTWF0aC5yb3VuZChvKHQpKSk7cmV0dXJuIGUqbjxuLS41JiYoZSo9biksZTw9aT9yKHQpOlwiXCJ9fTtsLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZShyLmNvcHkoKSxuLGksYSl9O3JldHVybiBtbyhsLHIpfSh0LnNjYWxlLmxpbmVhcigpLmRvbWFpbihbMCwxXSksMTAsITAsWzEsMTBdKX07dmFyIEFvPXQuZm9ybWF0KFwiLjBlXCIpLFRvPXtmbG9vcjpmdW5jdGlvbih0KXtyZXR1cm4tTWF0aC5jZWlsKC10KX0sY2VpbDpmdW5jdGlvbih0KXtyZXR1cm4tTWF0aC5mbG9vcigtdCl9fTtmdW5jdGlvbiBNbyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGU8MD8tTWF0aC5wb3coLWUsdCk6TWF0aC5wb3coZSx0KX19dC5zY2FsZS5wb3c9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbil7dmFyIGk9TW8ociksYT1NbygxL3IpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIGUoaSh0KSl9by5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGEoZS5pbnZlcnQodCkpfTtvLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZS5kb21haW4oKG49dC5tYXAoTnVtYmVyKSkubWFwKGkpKSxvKTpufTtvLnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBibyhuLHQpfTtvLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gX28obix0LGUpfTtvLm5pY2U9ZnVuY3Rpb24odCl7cmV0dXJuIG8uZG9tYWluKHlvKG4sdCkpfTtvLmV4cG9uZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPU1vKHI9dCksYT1NbygxL3IpLGUuZG9tYWluKG4ubWFwKGkpKSxvKTpyfTtvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChlLmNvcHkoKSxyLG4pfTtyZXR1cm4gbW8obyxlKX0odC5zY2FsZS5saW5lYXIoKSwxLFswLDFdKX0sdC5zY2FsZS5zcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuc2NhbGUucG93KCkuZXhwb25lbnQoLjUpfSx0LnNjYWxlLm9yZGluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZShyLG4pe3ZhciBpLGEsbztmdW5jdGlvbiBzKHQpe3JldHVybiBhWygoaS5nZXQodCl8fChcInJhbmdlXCI9PT1uLnQ/aS5zZXQodCxyLnB1c2godCkpOk5hTikpLTEpJWEubGVuZ3RoXX1mdW5jdGlvbiBsKGUsbil7cmV0dXJuIHQucmFuZ2Uoci5sZW5ndGgpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZStuKnR9KX1zLmRvbWFpbj1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcjtyPVtdLGk9bmV3IGI7Zm9yKHZhciBlLGE9LTEsbz10Lmxlbmd0aDsrK2E8bzspaS5oYXMoZT10W2FdKXx8aS5zZXQoZSxyLnB1c2goZSkpO3JldHVybiBzW24udF0uYXBwbHkocyxuLmEpfTtzLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsbz0wLG49e3Q6XCJyYW5nZVwiLGE6YXJndW1lbnRzfSxzKTphfTtzLnJhbmdlUG9pbnRzPWZ1bmN0aW9uKHQsZSl7YXJndW1lbnRzLmxlbmd0aDwyJiYoZT0wKTt2YXIgaT10WzBdLGM9dFsxXSx1PXIubGVuZ3RoPDI/KGk9KGkrYykvMiwwKTooYy1pKS8oci5sZW5ndGgtMStlKTtyZXR1cm4gYT1sKGkrdSplLzIsdSksbz0wLG49e3Q6XCJyYW5nZVBvaW50c1wiLGE6YXJndW1lbnRzfSxzfTtzLnJhbmdlUm91bmRQb2ludHM9ZnVuY3Rpb24odCxlKXthcmd1bWVudHMubGVuZ3RoPDImJihlPTApO3ZhciBpPXRbMF0sYz10WzFdLHU9ci5sZW5ndGg8Mj8oaT1jPU1hdGgucm91bmQoKGkrYykvMiksMCk6KGMtaSkvKHIubGVuZ3RoLTErZSl8MDtyZXR1cm4gYT1sKGkrTWF0aC5yb3VuZCh1KmUvMisoYy1pLShyLmxlbmd0aC0xK2UpKnUpLzIpLHUpLG89MCxuPXt0OlwicmFuZ2VSb3VuZFBvaW50c1wiLGE6YXJndW1lbnRzfSxzfTtzLnJhbmdlQmFuZHM9ZnVuY3Rpb24odCxlLGkpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9MCksYXJndW1lbnRzLmxlbmd0aDwzJiYoaT1lKTt2YXIgYz10WzFdPHRbMF0sdT10W2MtMF0saD10WzEtY10sZj0oaC11KS8oci5sZW5ndGgtZSsyKmkpO3JldHVybiBhPWwodStmKmksZiksYyYmYS5yZXZlcnNlKCksbz1mKigxLWUpLG49e3Q6XCJyYW5nZUJhbmRzXCIsYTphcmd1bWVudHN9LHN9O3MucmFuZ2VSb3VuZEJhbmRzPWZ1bmN0aW9uKHQsZSxpKXthcmd1bWVudHMubGVuZ3RoPDImJihlPTApLGFyZ3VtZW50cy5sZW5ndGg8MyYmKGk9ZSk7dmFyIGM9dFsxXTx0WzBdLHU9dFtjLTBdLGg9dFsxLWNdLGY9TWF0aC5mbG9vcigoaC11KS8oci5sZW5ndGgtZSsyKmkpKTtyZXR1cm4gYT1sKHUrTWF0aC5yb3VuZCgoaC11LShyLmxlbmd0aC1lKSpmKS8yKSxmKSxjJiZhLnJldmVyc2UoKSxvPU1hdGgucm91bmQoZiooMS1lKSksbj17dDpcInJhbmdlUm91bmRCYW5kc1wiLGE6YXJndW1lbnRzfSxzfTtzLnJhbmdlQmFuZD1mdW5jdGlvbigpe3JldHVybiBvfTtzLnJhbmdlRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGNvKG4uYVswXSl9O3MuY29weT1mdW5jdGlvbigpe3JldHVybiBlKHIsbil9O3JldHVybiBzLmRvbWFpbihyKX0oW10se3Q6XCJyYW5nZVwiLGE6W1tdXX0pfSx0LnNjYWxlLmNhdGVnb3J5MTA9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoU28pfSx0LnNjYWxlLmNhdGVnb3J5MjA9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoRW8pfSx0LnNjYWxlLmNhdGVnb3J5MjBiPWZ1bmN0aW9uKCl7cmV0dXJuIHQuc2NhbGUub3JkaW5hbCgpLnJhbmdlKENvKX0sdC5zY2FsZS5jYXRlZ29yeTIwYz1mdW5jdGlvbigpe3JldHVybiB0LnNjYWxlLm9yZGluYWwoKS5yYW5nZShMbyl9O3ZhciBTbz1bMjA2MjI2MCwxNjc0NDIwNiwyOTI0NTg4LDE0MDM0NzI4LDk3MjU4ODUsOTE5NzEzMSwxNDkwNzMzMCw4MzU1NzExLDEyMzY5MTg2LDE1NTYxNzVdLm1hcChzZSksRW89WzIwNjIyNjAsMTE0NTQ0NDAsMTY3NDQyMDYsMTY3NTk2NzIsMjkyNDU4OCwxMDAxODY5OCwxNDAzNDcyOCwxNjc1MDc0Miw5NzI1ODg1LDEyOTU1ODYxLDkxOTcxMzEsMTI4ODUxNDAsMTQ5MDczMzAsMTYyMzQxOTQsODM1NTcxMSwxMzA5MjgwNywxMjM2OTE4NiwxNDQwODU4OSwxNTU2MTc1LDEwNDEwNzI1XS5tYXAoc2UpLENvPVszNzUwNzc3LDUzOTU2MTksNzA0MDcxOSwxMDI2NDI4Niw2NTE5MDk3LDkyMTY1OTQsMTE5MTUxMTUsMTM1NTY2MzYsOTIwMjk5MywxMjQyNjgwOSwxNTE4NjUxNCwxNTE5MDkzMiw4NjY2MTY5LDExMzU2NDkwLDE0MDQ5NjQzLDE1MTc3MzcyLDgwNzc2ODMsMTA4MzQzMjQsMTM1Mjg1MDksMTQ1ODk2NTRdLm1hcChzZSksTG89WzMyNDQ3MzMsNzA1NzExMCwxMDQwNjYyNSwxMzAzMjQzMSwxNTA5NTA1MywxNjYxNjc2NCwxNjYyNTI1OSwxNjYzNDAxOCwzMjUzMDc2LDc2NTI0NzAsMTA2MDcwMDMsMTMxMDE1MDQsNzY5NTI4MSwxMDM5NDMxMiwxMjM2OTM3MiwxNDM0Mjg5MSw2NTEzNTA3LDk4Njg5NTAsMTI0MzQ4NzcsMTQyNzcwODFdLm1hcChzZSk7ZnVuY3Rpb24gem8oKXtyZXR1cm4gMH10LnNjYWxlLnF1YW50aWxlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUocixuKXt2YXIgaTtmdW5jdGlvbiBhKCl7dmFyIGU9MCxhPW4ubGVuZ3RoO2ZvcihpPVtdOysrZTxhOylpW2UtMV09dC5xdWFudGlsZShyLGUvYSk7cmV0dXJuIG99ZnVuY3Rpb24gbyhlKXtpZighaXNOYU4oZT0rZSkpcmV0dXJuIG5bdC5iaXNlY3QoaSxlKV19by5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dC5tYXAocCkuZmlsdGVyKGQpLnNvcnQoZiksYSgpKTpyfTtvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsYSgpKTpufTtvLnF1YW50aWxlcz1mdW5jdGlvbigpe3JldHVybiBpfTtvLmludmVydEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4odD1uLmluZGV4T2YodCkpPDA/W05hTixOYU5dOlt0PjA/aVt0LTFdOnJbMF0sdDxpLmxlbmd0aD9pW3RdOnJbci5sZW5ndGgtMV1dfTtvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZShyLG4pfTtyZXR1cm4gYSgpfShbXSxbXSl9LHQuc2NhbGUucXVhbnRpemU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbil7dmFyIGksYTtmdW5jdGlvbiBvKHQpe3JldHVybiBuW01hdGgubWF4KDAsTWF0aC5taW4oYSxNYXRoLmZsb29yKGkqKHQtZSkpKSldfWZ1bmN0aW9uIHMoKXtyZXR1cm4gaT1uLmxlbmd0aC8oci1lKSxhPW4ubGVuZ3RoLTEsb31vLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdFswXSxyPSt0W3QubGVuZ3RoLTFdLHMoKSk6W2Uscl19O28ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxzKCkpOm59O28uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVyblt0PSh0PW4uaW5kZXhPZih0KSk8MD9OYU46dC9pK2UsdCsxL2ldfTtvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChlLHIsbil9O3JldHVybiBzKCl9KDAsMSxbMCwxXSl9LHQuc2NhbGUudGhyZXNob2xkPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUocixuKXtmdW5jdGlvbiBpKGUpe2lmKGU8PWUpcmV0dXJuIG5bdC5iaXNlY3QocixlKV19aS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxpKTpyfTtpLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsaSk6bn07aS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bi5pbmRleE9mKHQpLFtyW3QtMV0sclt0XV19O2kuY29weT1mdW5jdGlvbigpe3JldHVybiBlKHIsbil9O3JldHVybiBpfShbLjVdLFswLDFdKX0sdC5zY2FsZS5pZGVudGl0eT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuK3R9ci5pbnZlcnQ9cjtyLmRvbWFpbj1yLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQubWFwKHIpLHIpOmV9O3IudGlja3M9ZnVuY3Rpb24odCl7cmV0dXJuIGJvKGUsdCl9O3IudGlja0Zvcm1hdD1mdW5jdGlvbih0LHIpe3JldHVybiBfbyhlLHQscil9O3IuY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUpfTtyZXR1cm4gcn0oWzAsMV0pfSx0LnN2Zz17fSx0LnN2Zy5hcmM9ZnVuY3Rpb24oKXt2YXIgdD1JbyxlPURvLHI9em8sbj1PbyxpPVBvLGE9Um8sbz1GbztmdW5jdGlvbiBzKCl7dmFyIHM9TWF0aC5tYXgoMCwrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGM9TWF0aC5tYXgoMCwrZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHU9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktRXQsaD1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1FdCxmPU1hdGguYWJzKGgtdSkscD11Pmg/MDoxO2lmKGM8cyYmKGQ9YyxjPXMscz1kKSxmPj1TdClyZXR1cm4gbChjLHApKyhzP2wocywxLXApOlwiXCIpK1wiWlwiO3ZhciBkLGcsdixtLHkseCxiLF8sdyxrLEEsVCxNPTAsUz0wLEU9W107aWYoKG09KCtvLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8MCkvMikmJih2PW49PT1Pbz9NYXRoLnNxcnQocypzK2MqYyk6K24uYXBwbHkodGhpcyxhcmd1bWVudHMpLHB8fChTKj0tMSksYyYmKFM9RHQodi9jKk1hdGguc2luKG0pKSkscyYmKE09RHQodi9zKk1hdGguc2luKG0pKSkpLGMpe3k9YypNYXRoLmNvcyh1K1MpLHg9YypNYXRoLnNpbih1K1MpLGI9YypNYXRoLmNvcyhoLVMpLF89YypNYXRoLnNpbihoLVMpO3ZhciBDPU1hdGguYWJzKGgtdS0yKlMpPD1UdD8wOjE7aWYoUyYmQm8oeSx4LGIsXyk9PT1wXkMpe3ZhciBMPSh1K2gpLzI7eT1jKk1hdGguY29zKEwpLHg9YypNYXRoLnNpbihMKSxiPV89bnVsbH19ZWxzZSB5PXg9MDtpZihzKXt3PXMqTWF0aC5jb3MoaC1NKSxrPXMqTWF0aC5zaW4oaC1NKSxBPXMqTWF0aC5jb3ModStNKSxUPXMqTWF0aC5zaW4odStNKTt2YXIgej1NYXRoLmFicyh1LWgrMipNKTw9VHQ/MDoxO2lmKE0mJkJvKHcsayxBLFQpPT09MS1wXnope3ZhciBPPSh1K2gpLzI7dz1zKk1hdGguY29zKE8pLGs9cypNYXRoLnNpbihPKSxBPVQ9bnVsbH19ZWxzZSB3PWs9MDtpZihmPmt0JiYoZD1NYXRoLm1pbihNYXRoLmFicyhjLXMpLzIsK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSk+LjAwMSl7Zz1zPGNecD8wOjE7dmFyIEk9ZCxEPWQ7aWYoZjxUdCl7dmFyIFA9bnVsbD09QT9bdyxrXTpudWxsPT1iP1t5LHhdOnNpKFt5LHhdLFtBLFRdLFtiLF9dLFt3LGtdKSxSPXktUFswXSxGPXgtUFsxXSxCPWItUFswXSxOPV8tUFsxXSxqPTEvTWF0aC5zaW4oTWF0aC5hY29zKChSKkIrRipOKS8oTWF0aC5zcXJ0KFIqUitGKkYpKk1hdGguc3FydChCKkIrTipOKSkpLzIpLFY9TWF0aC5zcXJ0KFBbMF0qUFswXStQWzFdKlBbMV0pO0Q9TWF0aC5taW4oZCwocy1WKS8oai0xKSksST1NYXRoLm1pbihkLChjLVYpLyhqKzEpKX1pZihudWxsIT1iKXt2YXIgVT1ObyhudWxsPT1BP1t3LGtdOltBLFRdLFt5LHhdLGMsSSxwKSxxPU5vKFtiLF9dLFt3LGtdLGMsSSxwKTtkPT09ST9FLnB1c2goXCJNXCIsVVswXSxcIkFcIixJLFwiLFwiLEksXCIgMCAwLFwiLGcsXCIgXCIsVVsxXSxcIkFcIixjLFwiLFwiLGMsXCIgMCBcIiwxLXBeQm8oVVsxXVswXSxVWzFdWzFdLHFbMV1bMF0scVsxXVsxXSksXCIsXCIscCxcIiBcIixxWzFdLFwiQVwiLEksXCIsXCIsSSxcIiAwIDAsXCIsZyxcIiBcIixxWzBdKTpFLnB1c2goXCJNXCIsVVswXSxcIkFcIixJLFwiLFwiLEksXCIgMCAxLFwiLGcsXCIgXCIscVswXSl9ZWxzZSBFLnB1c2goXCJNXCIseSxcIixcIix4KTtpZihudWxsIT1BKXt2YXIgSD1ObyhbeSx4XSxbQSxUXSxzLC1ELHApLEc9Tm8oW3csa10sbnVsbD09Yj9beSx4XTpbYixfXSxzLC1ELHApO2Q9PT1EP0UucHVzaChcIkxcIixHWzBdLFwiQVwiLEQsXCIsXCIsRCxcIiAwIDAsXCIsZyxcIiBcIixHWzFdLFwiQVwiLHMsXCIsXCIscyxcIiAwIFwiLHBeQm8oR1sxXVswXSxHWzFdWzFdLEhbMV1bMF0sSFsxXVsxXSksXCIsXCIsMS1wLFwiIFwiLEhbMV0sXCJBXCIsRCxcIixcIixELFwiIDAgMCxcIixnLFwiIFwiLEhbMF0pOkUucHVzaChcIkxcIixHWzBdLFwiQVwiLEQsXCIsXCIsRCxcIiAwIDAsXCIsZyxcIiBcIixIWzBdKX1lbHNlIEUucHVzaChcIkxcIix3LFwiLFwiLGspfWVsc2UgRS5wdXNoKFwiTVwiLHksXCIsXCIseCksbnVsbCE9YiYmRS5wdXNoKFwiQVwiLGMsXCIsXCIsYyxcIiAwIFwiLEMsXCIsXCIscCxcIiBcIixiLFwiLFwiLF8pLEUucHVzaChcIkxcIix3LFwiLFwiLGspLG51bGwhPUEmJkUucHVzaChcIkFcIixzLFwiLFwiLHMsXCIgMCBcIix6LFwiLFwiLDEtcCxcIiBcIixBLFwiLFwiLFQpO3JldHVybiBFLnB1c2goXCJaXCIpLEUuam9pbihcIlwiKX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuXCJNMCxcIit0K1wiQVwiK3QrXCIsXCIrdCtcIiAwIDEsXCIrZStcIiAwLFwiKy10K1wiQVwiK3QrXCIsXCIrdCtcIiAwIDEsXCIrZStcIiAwLFwiK3R9cmV0dXJuIHMuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dmUoZSkscyk6dH0scy5vdXRlclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT12ZSh0KSxzKTplfSxzLmNvcm5lclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj12ZSh0KSxzKTpyfSxzLnBhZFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10PT1Pbz9Pbzp2ZSh0KSxzKTpufSxzLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dmUodCkscyk6aX0scy5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT12ZSh0KSxzKTphfSxzLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXZlKHQpLHMpOm99LHMuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgcj0oK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsbj0oK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItRXQ7cmV0dXJuW01hdGguY29zKG4pKnIsTWF0aC5zaW4obikqcl19LHN9O3ZhciBPbz1cImF1dG9cIjtmdW5jdGlvbiBJbyh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiBEbyh0KXtyZXR1cm4gdC5vdXRlclJhZGl1c31mdW5jdGlvbiBQbyh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIFJvKHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIEZvKHQpe3JldHVybiB0JiZ0LnBhZEFuZ2xlfWZ1bmN0aW9uIEJvKHQsZSxyLG4pe3JldHVybih0LXIpKmUtKGUtbikqdD4wPzA6MX1mdW5jdGlvbiBObyh0LGUscixuLGkpe3ZhciBhPXRbMF0tZVswXSxvPXRbMV0tZVsxXSxzPShpP246LW4pL01hdGguc3FydChhKmErbypvKSxsPXMqbyxjPS1zKmEsdT10WzBdK2wsaD10WzFdK2MsZj1lWzBdK2wscD1lWzFdK2MsZD0odStmKS8yLGc9KGgrcCkvMix2PWYtdSxtPXAtaCx5PXYqdittKm0seD1yLW4sYj11KnAtZipoLF89KG08MD8tMToxKSpNYXRoLnNxcnQoTWF0aC5tYXgoMCx4KngqeS1iKmIpKSx3PShiKm0tdipfKS95LGs9KC1iKnYtbSpfKS95LEE9KGIqbSt2Kl8pL3ksVD0oLWIqdittKl8pL3ksTT13LWQsUz1rLWcsRT1BLWQsQz1ULWc7cmV0dXJuIE0qTStTKlM+RSpFK0MqQyYmKHc9QSxrPVQpLFtbdy1sLGstY10sW3cqci94LGsqci94XV19ZnVuY3Rpb24gam8odCl7dmFyIGU9ZWkscj1yaSxuPVlyLGk9VW8sYT1pLmtleSxvPS43O2Z1bmN0aW9uIHMoYSl7dmFyIHMsbD1bXSxjPVtdLHU9LTEsaD1hLmxlbmd0aCxmPXZlKGUpLHA9dmUocik7ZnVuY3Rpb24gZCgpe2wucHVzaChcIk1cIixpKHQoYyksbykpfWZvcig7Kyt1PGg7KW4uY2FsbCh0aGlzLHM9YVt1XSx1KT9jLnB1c2goWytmLmNhbGwodGhpcyxzLHUpLCtwLmNhbGwodGhpcyxzLHUpXSk6Yy5sZW5ndGgmJihkKCksYz1bXSk7cmV0dXJuIGMubGVuZ3RoJiZkKCksbC5sZW5ndGg/bC5qb2luKFwiXCIpOm51bGx9cmV0dXJuIHMueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LHMpOmV9LHMueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LHMpOnJ9LHMuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LHMpOm59LHMuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9XCJmdW5jdGlvblwiPT10eXBlb2YgdD9pPXQ6KGk9Vm8uZ2V0KHQpfHxVbykua2V5LHMpOmF9LHMudGVuc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LHMpOm99LHN9dC5zdmcubGluZT1mdW5jdGlvbigpe3JldHVybiBqbyh6KX07dmFyIFZvPXQubWFwKHtsaW5lYXI6VW8sXCJsaW5lYXItY2xvc2VkXCI6cW8sc3RlcDpmdW5jdGlvbih0KXt2YXIgZT0wLHI9dC5sZW5ndGgsbj10WzBdLGk9W25bMF0sXCIsXCIsblsxXV07Zm9yKDsrK2U8cjspaS5wdXNoKFwiSFwiLChuWzBdKyhuPXRbZV0pWzBdKS8yLFwiVlwiLG5bMV0pO3I+MSYmaS5wdXNoKFwiSFwiLG5bMF0pO3JldHVybiBpLmpvaW4oXCJcIil9LFwic3RlcC1iZWZvcmVcIjpIbyxcInN0ZXAtYWZ0ZXJcIjpHbyxiYXNpczpYbyxcImJhc2lzLW9wZW5cIjpmdW5jdGlvbih0KXtpZih0Lmxlbmd0aDw0KXJldHVybiBVbyh0KTt2YXIgZSxyPVtdLG49LTEsaT10Lmxlbmd0aCxhPVswXSxvPVswXTtmb3IoOysrbjwzOyllPXRbbl0sYS5wdXNoKGVbMF0pLG8ucHVzaChlWzFdKTtyLnB1c2goWm8oS28sYSkrXCIsXCIrWm8oS28sbykpLC0tbjtmb3IoOysrbjxpOyllPXRbbl0sYS5zaGlmdCgpLGEucHVzaChlWzBdKSxvLnNoaWZ0KCksby5wdXNoKGVbMV0pLFFvKHIsYSxvKTtyZXR1cm4gci5qb2luKFwiXCIpfSxcImJhc2lzLWNsb3NlZFwiOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbj0tMSxpPXQubGVuZ3RoLGE9aSs0LG89W10scz1bXTtmb3IoOysrbjw0OylyPXRbbiVpXSxvLnB1c2goclswXSkscy5wdXNoKHJbMV0pO2U9W1pvKEtvLG8pLFwiLFwiLFpvKEtvLHMpXSwtLW47Zm9yKDsrK248YTspcj10W24laV0sby5zaGlmdCgpLG8ucHVzaChyWzBdKSxzLnNoaWZ0KCkscy5wdXNoKHJbMV0pLFFvKGUsbyxzKTtyZXR1cm4gZS5qb2luKFwiXCIpfSxidW5kbGU6ZnVuY3Rpb24odCxlKXt2YXIgcj10Lmxlbmd0aC0xO2lmKHIpZm9yKHZhciBuLGksYT10WzBdWzBdLG89dFswXVsxXSxzPXRbcl1bMF0tYSxsPXRbcl1bMV0tbyxjPS0xOysrYzw9cjspbj10W2NdLGk9Yy9yLG5bMF09ZSpuWzBdKygxLWUpKihhK2kqcyksblsxXT1lKm5bMV0rKDEtZSkqKG8raSpsKTtyZXR1cm4gWG8odCl9LGNhcmRpbmFsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoPDM/VW8odCk6dFswXStZbyh0LFdvKHQsZSkpfSxcImNhcmRpbmFsLW9wZW5cIjpmdW5jdGlvbih0LGUpe3JldHVybiB0Lmxlbmd0aDw0P1VvKHQpOnRbMV0rWW8odC5zbGljZSgxLC0xKSxXbyh0LGUpKX0sXCJjYXJkaW5hbC1jbG9zZWRcIjpmdW5jdGlvbih0LGUpe3JldHVybiB0Lmxlbmd0aDwzP3FvKHQpOnRbMF0rWW8oKHQucHVzaCh0WzBdKSx0KSxXbyhbdFt0Lmxlbmd0aC0yXV0uY29uY2F0KHQsW3RbMV1dKSxlKSl9LG1vbm90b25lOmZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aDwzP1VvKHQpOnRbMF0rWW8odCxmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhPVtdLG89ZnVuY3Rpb24odCl7dmFyIGU9MCxyPXQubGVuZ3RoLTEsbj1bXSxpPXRbMF0sYT10WzFdLG89blswXT10cyhpLGEpO2Zvcig7KytlPHI7KW5bZV09KG8rKG89dHMoaT1hLGE9dFtlKzFdKSkpLzI7cmV0dXJuIG5bZV09byxufSh0KSxzPS0xLGw9dC5sZW5ndGgtMTtmb3IoOysrczxsOyllPXRzKHRbc10sdFtzKzFdKSx5KGUpPGt0P29bc109b1tzKzFdPTA6KHI9b1tzXS9lLG49b1tzKzFdL2UsKGk9cipyK24qbik+OSYmKGk9MyplL01hdGguc3FydChpKSxvW3NdPWkqcixvW3MrMV09aSpuKSk7cz0tMTtmb3IoOysrczw9bDspaT0odFtNYXRoLm1pbihsLHMrMSldWzBdLXRbTWF0aC5tYXgoMCxzLTEpXVswXSkvKDYqKDErb1tzXSpvW3NdKSksYS5wdXNoKFtpfHwwLG9bc10qaXx8MF0pO3JldHVybiBhfSh0KSl9fSk7ZnVuY3Rpb24gVW8odCl7cmV0dXJuIHQubGVuZ3RoPjE/dC5qb2luKFwiTFwiKTp0K1wiWlwifWZ1bmN0aW9uIHFvKHQpe3JldHVybiB0LmpvaW4oXCJMXCIpK1wiWlwifWZ1bmN0aW9uIEhvKHQpe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGgsbj10WzBdLGk9W25bMF0sXCIsXCIsblsxXV07KytlPHI7KWkucHVzaChcIlZcIiwobj10W2VdKVsxXSxcIkhcIixuWzBdKTtyZXR1cm4gaS5qb2luKFwiXCIpfWZ1bmN0aW9uIEdvKHQpe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGgsbj10WzBdLGk9W25bMF0sXCIsXCIsblsxXV07KytlPHI7KWkucHVzaChcIkhcIiwobj10W2VdKVswXSxcIlZcIixuWzFdKTtyZXR1cm4gaS5qb2luKFwiXCIpfWZ1bmN0aW9uIFlvKHQsZSl7aWYoZS5sZW5ndGg8MXx8dC5sZW5ndGghPWUubGVuZ3RoJiZ0Lmxlbmd0aCE9ZS5sZW5ndGgrMilyZXR1cm4gVW8odCk7dmFyIHI9dC5sZW5ndGghPWUubGVuZ3RoLG49XCJcIixpPXRbMF0sYT10WzFdLG89ZVswXSxzPW8sbD0xO2lmKHImJihuKz1cIlFcIisoYVswXS0yKm9bMF0vMykrXCIsXCIrKGFbMV0tMipvWzFdLzMpK1wiLFwiK2FbMF0rXCIsXCIrYVsxXSxpPXRbMV0sbD0yKSxlLmxlbmd0aD4xKXtzPWVbMV0sYT10W2xdLGwrKyxuKz1cIkNcIisoaVswXStvWzBdKStcIixcIisoaVsxXStvWzFdKStcIixcIisoYVswXS1zWzBdKStcIixcIisoYVsxXS1zWzFdKStcIixcIithWzBdK1wiLFwiK2FbMV07Zm9yKHZhciBjPTI7YzxlLmxlbmd0aDtjKyssbCsrKWE9dFtsXSxzPWVbY10sbis9XCJTXCIrKGFbMF0tc1swXSkrXCIsXCIrKGFbMV0tc1sxXSkrXCIsXCIrYVswXStcIixcIithWzFdfWlmKHIpe3ZhciB1PXRbbF07bis9XCJRXCIrKGFbMF0rMipzWzBdLzMpK1wiLFwiKyhhWzFdKzIqc1sxXS8zKStcIixcIit1WzBdK1wiLFwiK3VbMV19cmV0dXJuIG59ZnVuY3Rpb24gV28odCxlKXtmb3IodmFyIHIsbj1bXSxpPSgxLWUpLzIsYT10WzBdLG89dFsxXSxzPTEsbD10Lmxlbmd0aDsrK3M8bDspcj1hLGE9byxvPXRbc10sbi5wdXNoKFtpKihvWzBdLXJbMF0pLGkqKG9bMV0tclsxXSldKTtyZXR1cm4gbn1mdW5jdGlvbiBYbyh0KXtpZih0Lmxlbmd0aDwzKXJldHVybiBVbyh0KTt2YXIgZT0xLHI9dC5sZW5ndGgsbj10WzBdLGk9blswXSxhPW5bMV0sbz1baSxpLGksKG49dFsxXSlbMF1dLHM9W2EsYSxhLG5bMV1dLGw9W2ksXCIsXCIsYSxcIkxcIixabyhLbyxvKSxcIixcIixabyhLbyxzKV07Zm9yKHQucHVzaCh0W3ItMV0pOysrZTw9cjspbj10W2VdLG8uc2hpZnQoKSxvLnB1c2goblswXSkscy5zaGlmdCgpLHMucHVzaChuWzFdKSxRbyhsLG8scyk7cmV0dXJuIHQucG9wKCksbC5wdXNoKFwiTFwiLG4pLGwuam9pbihcIlwiKX1mdW5jdGlvbiBabyh0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXSt0WzNdKmVbM119Vm8uZm9yRWFjaChmdW5jdGlvbih0LGUpe2Uua2V5PXQsZS5jbG9zZWQ9Ly1jbG9zZWQkLy50ZXN0KHQpfSk7dmFyICRvPVswLDIvMywxLzMsMF0sSm89WzAsMS8zLDIvMywwXSxLbz1bMCwxLzYsMi8zLDEvNl07ZnVuY3Rpb24gUW8odCxlLHIpe3QucHVzaChcIkNcIixabygkbyxlKSxcIixcIixabygkbyxyKSxcIixcIixabyhKbyxlKSxcIixcIixabyhKbyxyKSxcIixcIixabyhLbyxlKSxcIixcIixabyhLbyxyKSl9ZnVuY3Rpb24gdHModCxlKXtyZXR1cm4oZVsxXS10WzFdKS8oZVswXS10WzBdKX1mdW5jdGlvbiBlcyh0KXtmb3IodmFyIGUscixuLGk9LTEsYT10Lmxlbmd0aDsrK2k8YTspcj0oZT10W2ldKVswXSxuPWVbMV0tRXQsZVswXT1yKk1hdGguY29zKG4pLGVbMV09cipNYXRoLnNpbihuKTtyZXR1cm4gdH1mdW5jdGlvbiBycyh0KXt2YXIgZT1laSxyPWVpLG49MCxpPXJpLGE9WXIsbz1VbyxzPW8ua2V5LGw9byxjPVwiTFwiLHU9Ljc7ZnVuY3Rpb24gaChzKXt2YXIgaCxmLHAsZD1bXSxnPVtdLHY9W10sbT0tMSx5PXMubGVuZ3RoLHg9dmUoZSksYj12ZShuKSxfPWU9PT1yP2Z1bmN0aW9uKCl7cmV0dXJuIGZ9OnZlKHIpLHc9bj09PWk/ZnVuY3Rpb24oKXtyZXR1cm4gcH06dmUoaSk7ZnVuY3Rpb24gaygpe2QucHVzaChcIk1cIixvKHQodiksdSksYyxsKHQoZy5yZXZlcnNlKCkpLHUpLFwiWlwiKX1mb3IoOysrbTx5OylhLmNhbGwodGhpcyxoPXNbbV0sbSk/KGcucHVzaChbZj0reC5jYWxsKHRoaXMsaCxtKSxwPStiLmNhbGwodGhpcyxoLG0pXSksdi5wdXNoKFsrXy5jYWxsKHRoaXMsaCxtKSwrdy5jYWxsKHRoaXMsaCxtKV0pKTpnLmxlbmd0aCYmKGsoKSxnPVtdLHY9W10pO3JldHVybiBnLmxlbmd0aCYmaygpLGQubGVuZ3RoP2Quam9pbihcIlwiKTpudWxsfXJldHVybiBoLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cj10LGgpOnJ9LGgueDA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxoKTplfSxoLngxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsaCk6cn0saC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWk9dCxoKTppfSxoLnkwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsaCk6bn0saC55MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGgpOml9LGguZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LGgpOmF9LGguaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9XCJmdW5jdGlvblwiPT10eXBlb2YgdD9vPXQ6KG89Vm8uZ2V0KHQpfHxVbykua2V5LGw9by5yZXZlcnNlfHxvLGM9by5jbG9zZWQ/XCJNXCI6XCJMXCIsaCk6c30saC50ZW5zaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsaCk6dX0saH1mdW5jdGlvbiBucyh0KXtyZXR1cm4gdC5yYWRpdXN9ZnVuY3Rpb24gaXModCl7cmV0dXJuW3QueCx0LnldfWZ1bmN0aW9uIGFzKCl7cmV0dXJuIDY0fWZ1bmN0aW9uIG9zKCl7cmV0dXJuXCJjaXJjbGVcIn1mdW5jdGlvbiBzcyh0KXt2YXIgZT1NYXRoLnNxcnQodC9UdCk7cmV0dXJuXCJNMCxcIitlK1wiQVwiK2UrXCIsXCIrZStcIiAwIDEsMSAwLFwiKy1lK1wiQVwiK2UrXCIsXCIrZStcIiAwIDEsMSAwLFwiK2UrXCJaXCJ9dC5zdmcubGluZS5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgdD1qbyhlcyk7cmV0dXJuIHQucmFkaXVzPXQueCxkZWxldGUgdC54LHQuYW5nbGU9dC55LGRlbGV0ZSB0LnksdH0sSG8ucmV2ZXJzZT1HbyxHby5yZXZlcnNlPUhvLHQuc3ZnLmFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gcnMoeil9LHQuc3ZnLmFyZWEucmFkaWFsPWZ1bmN0aW9uKCl7dmFyIHQ9cnMoZXMpO3JldHVybiB0LnJhZGl1cz10LngsZGVsZXRlIHQueCx0LmlubmVyUmFkaXVzPXQueDAsZGVsZXRlIHQueDAsdC5vdXRlclJhZGl1cz10LngxLGRlbGV0ZSB0LngxLHQuYW5nbGU9dC55LGRlbGV0ZSB0LnksdC5zdGFydEFuZ2xlPXQueTAsZGVsZXRlIHQueTAsdC5lbmRBbmdsZT10LnkxLGRlbGV0ZSB0LnkxLHR9LHQuc3ZnLmNob3JkPWZ1bmN0aW9uKCl7dmFyIHQ9Vm4sZT1VbixyPW5zLG49UG8saT1SbztmdW5jdGlvbiBhKHIsbil7dmFyIGksYSxjPW8odGhpcyx0LHIsbiksdT1vKHRoaXMsZSxyLG4pO3JldHVyblwiTVwiK2MucDArcyhjLnIsYy5wMSxjLmExLWMuYTApKyhhPXUsKGk9YykuYTA9PWEuYTAmJmkuYTE9PWEuYTE/bChjLnIsYy5wMSxjLnIsYy5wMCk6bChjLnIsYy5wMSx1LnIsdS5wMCkrcyh1LnIsdS5wMSx1LmExLXUuYTApK2wodS5yLHUucDEsYy5yLGMucDApKStcIlpcIn1mdW5jdGlvbiBvKHQsZSxhLG8pe3ZhciBzPWUuY2FsbCh0LGEsbyksbD1yLmNhbGwodCxzLG8pLGM9bi5jYWxsKHQscyxvKS1FdCx1PWkuY2FsbCh0LHMsbyktRXQ7cmV0dXJue3I6bCxhMDpjLGExOnUscDA6W2wqTWF0aC5jb3MoYyksbCpNYXRoLnNpbihjKV0scDE6W2wqTWF0aC5jb3ModSksbCpNYXRoLnNpbih1KV19fWZ1bmN0aW9uIHModCxlLHIpe3JldHVyblwiQVwiK3QrXCIsXCIrdCtcIiAwIFwiKyArKHI+VHQpK1wiLDEgXCIrZX1mdW5jdGlvbiBsKHQsZSxyLG4pe3JldHVyblwiUSAwLDAgXCIrbn1yZXR1cm4gYS5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dmUodCksYSk6cn0sYS5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dmUoZSksYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dmUodCksYSk6ZX0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXZlKHQpLGEpOm59LGEuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dmUodCksYSk6aX0sYX0sdC5zdmcuZGlhZ29uYWw9ZnVuY3Rpb24oKXt2YXIgdD1WbixlPVVuLHI9aXM7ZnVuY3Rpb24gbihuLGkpe3ZhciBhPXQuY2FsbCh0aGlzLG4saSksbz1lLmNhbGwodGhpcyxuLGkpLHM9KGEueStvLnkpLzIsbD1bYSx7eDphLngseTpzfSx7eDpvLngseTpzfSxvXTtyZXR1cm5cIk1cIisobD1sLm1hcChyKSlbMF0rXCJDXCIrbFsxXStcIiBcIitsWzJdK1wiIFwiK2xbM119cmV0dXJuIG4uc291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXZlKGUpLG4pOnR9LG4udGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXZlKHQpLG4pOmV9LG4ucHJvamVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG59LHQuc3ZnLmRpYWdvbmFsLnJhZGlhbD1mdW5jdGlvbigpe3ZhciBlPXQuc3ZnLmRpYWdvbmFsKCkscj1pcyxuPWUucHJvamVjdGlvbjtyZXR1cm4gZS5wcm9qZWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cykscj1lWzBdLG49ZVsxXS1FdDtyZXR1cm5bcipNYXRoLmNvcyhuKSxyKk1hdGguc2luKG4pXX19KHI9dCkpOnJ9LGV9LHQuc3ZnLnN5bWJvbD1mdW5jdGlvbigpe3ZhciB0PW9zLGU9YXM7ZnVuY3Rpb24gcihyLG4pe3JldHVybihscy5nZXQodC5jYWxsKHRoaXMscixuKSl8fHNzKShlLmNhbGwodGhpcyxyLG4pKX1yZXR1cm4gci50eXBlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXZlKGUpLHIpOnR9LHIuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT12ZSh0KSxyKTplfSxyfTt2YXIgbHM9dC5tYXAoe2NpcmNsZTpzcyxjcm9zczpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodC81KS8yO3JldHVyblwiTVwiKy0zKmUrXCIsXCIrLWUrXCJIXCIrLWUrXCJWXCIrLTMqZStcIkhcIitlK1wiVlwiKy1lK1wiSFwiKzMqZStcIlZcIitlK1wiSFwiK2UrXCJWXCIrMyplK1wiSFwiKy1lK1wiVlwiK2UrXCJIXCIrLTMqZStcIlpcIn0sZGlhbW9uZDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodC8oMip1cykpLHI9ZSp1cztyZXR1cm5cIk0wLFwiKy1lK1wiTFwiK3IrXCIsMCAwLFwiK2UrXCIgXCIrLXIrXCIsMFpcIn0sc3F1YXJlOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0KS8yO3JldHVyblwiTVwiKy1lK1wiLFwiKy1lK1wiTFwiK2UrXCIsXCIrLWUrXCIgXCIrZStcIixcIitlK1wiIFwiKy1lK1wiLFwiK2UrXCJaXCJ9LFwidHJpYW5nbGUtZG93blwiOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0L2NzKSxyPWUqY3MvMjtyZXR1cm5cIk0wLFwiK3IrXCJMXCIrZStcIixcIistcitcIiBcIistZStcIixcIistcitcIlpcIn0sXCJ0cmlhbmdsZS11cFwiOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0L2NzKSxyPWUqY3MvMjtyZXR1cm5cIk0wLFwiKy1yK1wiTFwiK2UrXCIsXCIrcitcIiBcIistZStcIixcIityK1wiWlwifX0pO3Quc3ZnLnN5bWJvbFR5cGVzPWxzLmtleXMoKTt2YXIgY3M9TWF0aC5zcXJ0KDMpLHVzPU1hdGgudGFuKDMwKkN0KTtXLnRyYW5zaXRpb249ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbj1kc3x8KyttcyxpPWJzKHQpLGE9W10sbz1nc3x8e3RpbWU6RGF0ZS5ub3coKSxlYXNlOmlhLGRlbGF5OjAsZHVyYXRpb246MjUwfSxzPS0xLGw9dGhpcy5sZW5ndGg7KytzPGw7KXthLnB1c2goZT1bXSk7Zm9yKHZhciBjPXRoaXNbc10sdT0tMSxoPWMubGVuZ3RoOysrdTxoOykocj1jW3VdKSYmX3Mocix1LGksbixvKSxlLnB1c2gocil9cmV0dXJuIHBzKGEsaSxuKX0sVy5pbnRlcnJ1cHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaChudWxsPT10P2hzOmZzKGJzKHQpKSl9O3ZhciBocz1mcyhicygpKTtmdW5jdGlvbiBmcyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZSxyLG47KGU9dGhpc1t0XSkmJihuPWVbcj1lLmFjdGl2ZV0pJiYobi50aW1lci5jPW51bGwsbi50aW1lci50PU5hTiwtLWUuY291bnQ/ZGVsZXRlIGVbcl06ZGVsZXRlIHRoaXNbdF0sZS5hY3RpdmUrPS41LG4uZXZlbnQmJm4uZXZlbnQuaW50ZXJydXB0LmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLG4uaW5kZXgpKX19ZnVuY3Rpb24gcHModCxlLHIpe3JldHVybiBVKHQsdnMpLHQubmFtZXNwYWNlPWUsdC5pZD1yLHR9dmFyIGRzLGdzLHZzPVtdLG1zPTA7ZnVuY3Rpb24geXModCxlLHIsbil7dmFyIGk9dC5pZCxhPXQubmFtZXNwYWNlO3JldHVybiB1dCh0LFwiZnVuY3Rpb25cIj09dHlwZW9mIHI/ZnVuY3Rpb24odCxvLHMpe3RbYV1baV0udHdlZW4uc2V0KGUsbihyLmNhbGwodCx0Ll9fZGF0YV9fLG8scykpKX06KHI9bihyKSxmdW5jdGlvbih0KXt0W2FdW2ldLnR3ZWVuLnNldChlLHIpfSkpfWZ1bmN0aW9uIHhzKHQpe3JldHVybiBudWxsPT10JiYodD1cIlwiKSxmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gYnModCl7cmV0dXJuIG51bGw9PXQ/XCJfX3RyYW5zaXRpb25fX1wiOlwiX190cmFuc2l0aW9uX1wiK3QrXCJfX1wifWZ1bmN0aW9uIF9zKHQsZSxyLG4saSl7dmFyIGEsbyxzLGwsYyx1PXRbcl18fCh0W3JdPXthY3RpdmU6MCxjb3VudDowfSksaD11W25dO2Z1bmN0aW9uIGYocil7dmFyIGk9dS5hY3RpdmUsZj11W2ldO2Zvcih2YXIgZCBpbiBmJiYoZi50aW1lci5jPW51bGwsZi50aW1lci50PU5hTiwtLXUuY291bnQsZGVsZXRlIHVbaV0sZi5ldmVudCYmZi5ldmVudC5pbnRlcnJ1cHQuY2FsbCh0LHQuX19kYXRhX18sZi5pbmRleCkpLHUpaWYoK2Q8bil7dmFyIGc9dVtkXTtnLnRpbWVyLmM9bnVsbCxnLnRpbWVyLnQ9TmFOLC0tdS5jb3VudCxkZWxldGUgdVtkXX1vLmM9cCxBZShmdW5jdGlvbigpe3JldHVybiBvLmMmJnAocnx8MSkmJihvLmM9bnVsbCxvLnQ9TmFOKSwxfSwwLGEpLHUuYWN0aXZlPW4saC5ldmVudCYmaC5ldmVudC5zdGFydC5jYWxsKHQsdC5fX2RhdGFfXyxlKSxjPVtdLGgudHdlZW4uZm9yRWFjaChmdW5jdGlvbihyLG4peyhuPW4uY2FsbCh0LHQuX19kYXRhX18sZSkpJiZjLnB1c2gobil9KSxsPWguZWFzZSxzPWguZHVyYXRpb259ZnVuY3Rpb24gcChpKXtmb3IodmFyIGE9aS9zLG89bChhKSxmPWMubGVuZ3RoO2Y+MDspY1stLWZdLmNhbGwodCxvKTtpZihhPj0xKXJldHVybiBoLmV2ZW50JiZoLmV2ZW50LmVuZC5jYWxsKHQsdC5fX2RhdGFfXyxlKSwtLXUuY291bnQ/ZGVsZXRlIHVbbl06ZGVsZXRlIHRbcl0sMX1ofHwoYT1pLnRpbWUsbz1BZShmdW5jdGlvbih0KXt2YXIgZT1oLmRlbGF5O2lmKG8udD1lK2EsZTw9dClyZXR1cm4gZih0LWUpO28uYz1mfSwwLGEpLGg9dVtuXT17dHdlZW46bmV3IGIsdGltZTphLHRpbWVyOm8sZGVsYXk6aS5kZWxheSxkdXJhdGlvbjppLmR1cmF0aW9uLGVhc2U6aS5lYXNlLGluZGV4OmV9LGk9bnVsbCwrK3UuY291bnQpfXZzLmNhbGw9Vy5jYWxsLHZzLmVtcHR5PVcuZW1wdHksdnMubm9kZT1XLm5vZGUsdnMuc2l6ZT1XLnNpemUsdC50cmFuc2l0aW9uPWZ1bmN0aW9uKGUscil7cmV0dXJuIGUmJmUudHJhbnNpdGlvbj9kcz9lLnRyYW5zaXRpb24ocik6ZTp0LnNlbGVjdGlvbigpLnRyYW5zaXRpb24oZSl9LHQudHJhbnNpdGlvbi5wcm90b3R5cGU9dnMsdnMuc2VsZWN0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXRoaXMuaWQsYT10aGlzLm5hbWVzcGFjZSxvPVtdO3Q9WCh0KTtmb3IodmFyIHM9LTEsbD10aGlzLmxlbmd0aDsrK3M8bDspe28ucHVzaChlPVtdKTtmb3IodmFyIGM9dGhpc1tzXSx1PS0xLGg9Yy5sZW5ndGg7Kyt1PGg7KShuPWNbdV0pJiYocj10LmNhbGwobixuLl9fZGF0YV9fLHUscykpPyhcIl9fZGF0YV9fXCJpbiBuJiYoci5fX2RhdGFfXz1uLl9fZGF0YV9fKSxfcyhyLHUsYSxpLG5bYV1baV0pLGUucHVzaChyKSk6ZS5wdXNoKG51bGwpfXJldHVybiBwcyhvLGEsaSl9LHZzLnNlbGVjdEFsbD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG89dGhpcy5pZCxzPXRoaXMubmFtZXNwYWNlLGw9W107dD1aKHQpO2Zvcih2YXIgYz0tMSx1PXRoaXMubGVuZ3RoOysrYzx1Oylmb3IodmFyIGg9dGhpc1tjXSxmPS0xLHA9aC5sZW5ndGg7KytmPHA7KWlmKG49aFtmXSl7YT1uW3NdW29dLHI9dC5jYWxsKG4sbi5fX2RhdGFfXyxmLGMpLGwucHVzaChlPVtdKTtmb3IodmFyIGQ9LTEsZz1yLmxlbmd0aDsrK2Q8ZzspKGk9cltkXSkmJl9zKGksZCxzLG8sYSksZS5wdXNoKGkpfXJldHVybiBwcyhsLHMsbyl9LHZzLmZpbHRlcj1mdW5jdGlvbih0KXt2YXIgZSxyLG49W107XCJmdW5jdGlvblwiIT10eXBlb2YgdCYmKHQ9Y3QodCkpO2Zvcih2YXIgaT0wLGE9dGhpcy5sZW5ndGg7aTxhO2krKyl7bi5wdXNoKGU9W10pO2Zvcih2YXIgbyxzPTAsbD0obz10aGlzW2ldKS5sZW5ndGg7czxsO3MrKykocj1vW3NdKSYmdC5jYWxsKHIsci5fX2RhdGFfXyxzLGkpJiZlLnB1c2gocil9cmV0dXJuIHBzKG4sdGhpcy5uYW1lc3BhY2UsdGhpcy5pZCl9LHZzLnR3ZWVuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5pZCxuPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/dGhpcy5ub2RlKClbbl1bcl0udHdlZW4uZ2V0KHQpOnV0KHRoaXMsbnVsbD09ZT9mdW5jdGlvbihlKXtlW25dW3JdLnR3ZWVuLnJlbW92ZSh0KX06ZnVuY3Rpb24oaSl7aVtuXVtyXS50d2Vlbi5zZXQodCxlKX0pfSx2cy5hdHRyPWZ1bmN0aW9uKGUscil7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IociBpbiBlKXRoaXMuYXR0cihyLGVbcl0pO3JldHVybiB0aGlzfXZhciBuPVwidHJhbnNmb3JtXCI9PWU/Z2E6WmksaT10Lm5zLnF1YWxpZnkoZSk7ZnVuY3Rpb24gYSgpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGkpfWZ1bmN0aW9uIG8oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCl9cmV0dXJuIHlzKHRoaXMsXCJhdHRyLlwiK2UscixpLmxvY2FsP2Z1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P286KHQrPVwiXCIsZnVuY3Rpb24oKXt2YXIgZSxyPXRoaXMuZ2V0QXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsKTtyZXR1cm4gciE9PXQmJihlPW4ocix0KSxmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCxlKHQpKX0pfSl9OmZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P2E6KHQrPVwiXCIsZnVuY3Rpb24oKXt2YXIgZSxyPXRoaXMuZ2V0QXR0cmlidXRlKGkpO3JldHVybiByIT09dCYmKGU9bihyLHQpLGZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlKGksZSh0KSl9KX0pfSl9LHZzLmF0dHJUd2Vlbj1mdW5jdGlvbihlLHIpe3ZhciBuPXQubnMucXVhbGlmeShlKTtyZXR1cm4gdGhpcy50d2VlbihcImF0dHIuXCIrZSxuLmxvY2FsP2Z1bmN0aW9uKHQsZSl7dmFyIGk9ci5jYWxsKHRoaXMsdCxlLHRoaXMuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKSk7cmV0dXJuIGkmJmZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLGkodCkpfX06ZnVuY3Rpb24odCxlKXt2YXIgaT1yLmNhbGwodGhpcyx0LGUsdGhpcy5nZXRBdHRyaWJ1dGUobikpO3JldHVybiBpJiZmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZShuLGkodCkpfX0pfSx2cy5zdHlsZT1mdW5jdGlvbih0LGUscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtpZihuPDMpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXtmb3IociBpbiBuPDImJihlPVwiXCIpLHQpdGhpcy5zdHlsZShyLHRbcl0sZSk7cmV0dXJuIHRoaXN9cj1cIlwifWZ1bmN0aW9uIGkoKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfXJldHVybiB5cyh0aGlzLFwic3R5bGUuXCIrdCxlLGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP2k6KGUrPVwiXCIsZnVuY3Rpb24oKXt2YXIgbixpPW8odGhpcykuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCk7cmV0dXJuIGkhPT1lJiYobj1aaShpLGUpLGZ1bmN0aW9uKGUpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxuKGUpLHIpfSl9KX0pfSx2cy5zdHlsZVR3ZWVuPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzJiYocj1cIlwiKSx0aGlzLnR3ZWVuKFwic3R5bGUuXCIrdCxmdW5jdGlvbihuLGkpe3ZhciBhPWUuY2FsbCh0aGlzLG4saSxvKHRoaXMpLmdldENvbXB1dGVkU3R5bGUodGhpcyxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpKTtyZXR1cm4gYSYmZnVuY3Rpb24oZSl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGEoZSkscil9fSl9LHZzLnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHlzKHRoaXMsXCJ0ZXh0XCIsdCx4cyl9LHZzLnJlbW92ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMubmFtZXNwYWNlO3JldHVybiB0aGlzLmVhY2goXCJlbmQudHJhbnNpdGlvblwiLGZ1bmN0aW9uKCl7dmFyIGU7dGhpc1t0XS5jb3VudDwyJiYoZT10aGlzLnBhcmVudE5vZGUpJiZlLnJlbW92ZUNoaWxkKHRoaXMpfSl9LHZzLmVhc2U9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5pZCxuPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/dGhpcy5ub2RlKClbbl1bcl0uZWFzZTooXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmKGU9dC5lYXNlLmFwcGx5KHQsYXJndW1lbnRzKSksdXQodGhpcyxmdW5jdGlvbih0KXt0W25dW3JdLmVhc2U9ZX0pKX0sdnMuZGVsYXk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pZCxyPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/dGhpcy5ub2RlKClbcl1bZV0uZGVsYXk6dXQodGhpcyxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2Z1bmN0aW9uKG4saSxhKXtuW3JdW2VdLmRlbGF5PSt0LmNhbGwobixuLl9fZGF0YV9fLGksYSl9Oih0PSt0LGZ1bmN0aW9uKG4pe25bcl1bZV0uZGVsYXk9dH0pKX0sdnMuZHVyYXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pZCxyPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/dGhpcy5ub2RlKClbcl1bZV0uZHVyYXRpb246dXQodGhpcyxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2Z1bmN0aW9uKG4saSxhKXtuW3JdW2VdLmR1cmF0aW9uPU1hdGgubWF4KDEsdC5jYWxsKG4sbi5fX2RhdGFfXyxpLGEpKX06KHQ9TWF0aC5tYXgoMSx0KSxmdW5jdGlvbihuKXtuW3JdW2VdLmR1cmF0aW9uPXR9KSl9LHZzLmVhY2g9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLmlkLGk9dGhpcy5uYW1lc3BhY2U7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgYT1ncyxvPWRzO3RyeXtkcz1uLHV0KHRoaXMsZnVuY3Rpb24odCxyLGEpe2dzPXRbaV1bbl0sZS5jYWxsKHQsdC5fX2RhdGFfXyxyLGEpfSl9ZmluYWxseXtncz1hLGRzPW99fWVsc2UgdXQodGhpcyxmdW5jdGlvbihhKXt2YXIgbz1hW2ldW25dOyhvLmV2ZW50fHwoby5ldmVudD10LmRpc3BhdGNoKFwic3RhcnRcIixcImVuZFwiLFwiaW50ZXJydXB0XCIpKSkub24oZSxyKX0pO3JldHVybiB0aGlzfSx2cy50cmFuc2l0aW9uPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUscixuPXRoaXMuaWQsaT0rK21zLGE9dGhpcy5uYW1lc3BhY2Usbz1bXSxzPTAsbD10aGlzLmxlbmd0aDtzPGw7cysrKXtvLnB1c2godD1bXSk7Zm9yKHZhciBjLHU9MCxoPShjPXRoaXNbc10pLmxlbmd0aDt1PGg7dSsrKShlPWNbdV0pJiZfcyhlLHUsYSxpLHt0aW1lOihyPWVbYV1bbl0pLnRpbWUsZWFzZTpyLmVhc2UsZGVsYXk6ci5kZWxheStyLmR1cmF0aW9uLGR1cmF0aW9uOnIuZHVyYXRpb259KSx0LnB1c2goZSl9cmV0dXJuIHBzKG8sYSxpKX0sdC5zdmcuYXhpcz1mdW5jdGlvbigpe3ZhciBlLHI9dC5zY2FsZS5saW5lYXIoKSxpPXdzLGE9NixvPTYscz0zLGw9WzEwXSxjPW51bGw7ZnVuY3Rpb24gdShuKXtuLmVhY2goZnVuY3Rpb24oKXt2YXIgbix1PXQuc2VsZWN0KHRoaXMpLGg9dGhpcy5fX2NoYXJ0X198fHIsZj10aGlzLl9fY2hhcnRfXz1yLmNvcHkoKSxwPW51bGw9PWM/Zi50aWNrcz9mLnRpY2tzLmFwcGx5KGYsbCk6Zi5kb21haW4oKTpjLGQ9bnVsbD09ZT9mLnRpY2tGb3JtYXQ/Zi50aWNrRm9ybWF0LmFwcGx5KGYsbCk6ejplLGc9dS5zZWxlY3RBbGwoXCIudGlja1wiKS5kYXRhKHAsZiksdj1nLmVudGVyKCkuaW5zZXJ0KFwiZ1wiLFwiLmRvbWFpblwiKS5hdHRyKFwiY2xhc3NcIixcInRpY2tcIikuc3R5bGUoXCJvcGFjaXR5XCIsa3QpLG09dC50cmFuc2l0aW9uKGcuZXhpdCgpKS5zdHlsZShcIm9wYWNpdHlcIixrdCkucmVtb3ZlKCkseT10LnRyYW5zaXRpb24oZy5vcmRlcigpKS5zdHlsZShcIm9wYWNpdHlcIiwxKSx4PU1hdGgubWF4KGEsMCkrcyxiPXVvKGYpLF89dS5zZWxlY3RBbGwoXCIuZG9tYWluXCIpLmRhdGEoWzBdKSx3PShfLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiY2xhc3NcIixcImRvbWFpblwiKSx0LnRyYW5zaXRpb24oXykpO3YuYXBwZW5kKFwibGluZVwiKSx2LmFwcGVuZChcInRleHRcIik7dmFyIGssQSxULE0sUz12LnNlbGVjdChcImxpbmVcIiksRT15LnNlbGVjdChcImxpbmVcIiksQz1nLnNlbGVjdChcInRleHRcIikudGV4dChkKSxMPXYuc2VsZWN0KFwidGV4dFwiKSxPPXkuc2VsZWN0KFwidGV4dFwiKSxJPVwidG9wXCI9PT1pfHxcImxlZnRcIj09PWk/LTE6MTtpZihcImJvdHRvbVwiPT09aXx8XCJ0b3BcIj09PWk/KG49QXMsaz1cInhcIixUPVwieVwiLEE9XCJ4MlwiLE09XCJ5MlwiLEMuYXR0cihcImR5XCIsSTwwP1wiMGVtXCI6XCIuNzFlbVwiKS5zdHlsZShcInRleHQtYW5jaG9yXCIsXCJtaWRkbGVcIiksdy5hdHRyKFwiZFwiLFwiTVwiK2JbMF0rXCIsXCIrSSpvK1wiVjBIXCIrYlsxXStcIlZcIitJKm8pKToobj1UcyxrPVwieVwiLFQ9XCJ4XCIsQT1cInkyXCIsTT1cIngyXCIsQy5hdHRyKFwiZHlcIixcIi4zMmVtXCIpLnN0eWxlKFwidGV4dC1hbmNob3JcIixJPDA/XCJlbmRcIjpcInN0YXJ0XCIpLHcuYXR0cihcImRcIixcIk1cIitJKm8rXCIsXCIrYlswXStcIkgwVlwiK2JbMV0rXCJIXCIrSSpvKSksUy5hdHRyKE0sSSphKSxMLmF0dHIoVCxJKngpLEUuYXR0cihBLDApLmF0dHIoTSxJKmEpLE8uYXR0cihrLDApLmF0dHIoVCxJKngpLGYucmFuZ2VCYW5kKXt2YXIgRD1mLFA9RC5yYW5nZUJhbmQoKS8yO2g9Zj1mdW5jdGlvbih0KXtyZXR1cm4gRCh0KStQfX1lbHNlIGgucmFuZ2VCYW5kP2g9ZjptLmNhbGwobixmLGgpO3YuY2FsbChuLGgsZikseS5jYWxsKG4sZixmKX0pfXJldHVybiB1LnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsdSk6cn0sdS5vcmllbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCBpbiBrcz90K1wiXCI6d3MsdSk6aX0sdS50aWNrcz1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW4oYXJndW1lbnRzKSx1KTpsfSx1LnRpY2tWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCx1KTpjfSx1LnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCx1KTplfSx1LnRpY2tTaXplPWZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg7cmV0dXJuIGU/KGE9K3Qsbz0rYXJndW1lbnRzW2UtMV0sdSk6YX0sdS5pbm5lclRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LHUpOmF9LHUub3V0ZXJUaWNrU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCx1KTpvfSx1LnRpY2tQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LHUpOnN9LHUudGlja1N1YmRpdmlkZT1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoJiZ1fSx1fTt2YXIgd3M9XCJib3R0b21cIixrcz17dG9wOjEscmlnaHQ6MSxib3R0b206MSxsZWZ0OjF9O2Z1bmN0aW9uIEFzKHQsZSxyKXt0LmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXt2YXIgbj1lKHQpO3JldHVyblwidHJhbnNsYXRlKFwiKyhpc0Zpbml0ZShuKT9uOnIodCkpK1wiLDApXCJ9KX1mdW5jdGlvbiBUcyh0LGUscil7dC5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7dmFyIG49ZSh0KTtyZXR1cm5cInRyYW5zbGF0ZSgwLFwiKyhpc0Zpbml0ZShuKT9uOnIodCkpK1wiKVwifSl9dC5zdmcuYnJ1c2g9ZnVuY3Rpb24oKXt2YXIgZSxyLG49aihmLFwiYnJ1c2hzdGFydFwiLFwiYnJ1c2hcIixcImJydXNoZW5kXCIpLGk9bnVsbCxhPW51bGwscz1bMCwwXSxsPVswLDBdLGM9ITAsdT0hMCxoPVNzWzBdO2Z1bmN0aW9uIGYoZSl7ZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dC5zZWxlY3QodGhpcykuc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpLnN0eWxlKFwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yXCIsXCJyZ2JhKDAsMCwwLDApXCIpLm9uKFwibW91c2Vkb3duLmJydXNoXCIsdikub24oXCJ0b3VjaHN0YXJ0LmJydXNoXCIsdikscj1lLnNlbGVjdEFsbChcIi5iYWNrZ3JvdW5kXCIpLmRhdGEoWzBdKTtyLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKS5hdHRyKFwiY2xhc3NcIixcImJhY2tncm91bmRcIikuc3R5bGUoXCJ2aXNpYmlsaXR5XCIsXCJoaWRkZW5cIikuc3R5bGUoXCJjdXJzb3JcIixcImNyb3NzaGFpclwiKSxlLnNlbGVjdEFsbChcIi5leHRlbnRcIikuZGF0YShbMF0pLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKS5hdHRyKFwiY2xhc3NcIixcImV4dGVudFwiKS5zdHlsZShcImN1cnNvclwiLFwibW92ZVwiKTt2YXIgbj1lLnNlbGVjdEFsbChcIi5yZXNpemVcIikuZGF0YShoLHopO24uZXhpdCgpLnJlbW92ZSgpLG4uZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLGZ1bmN0aW9uKHQpe3JldHVyblwicmVzaXplIFwiK3R9KS5zdHlsZShcImN1cnNvclwiLGZ1bmN0aW9uKHQpe3JldHVybiBNc1t0XX0pLmFwcGVuZChcInJlY3RcIikuYXR0cihcInhcIixmdW5jdGlvbih0KXtyZXR1cm4vW2V3XSQvLnRlc3QodCk/LTM6bnVsbH0pLmF0dHIoXCJ5XCIsZnVuY3Rpb24odCl7cmV0dXJuL15bbnNdLy50ZXN0KHQpPy0zOm51bGx9KS5hdHRyKFwid2lkdGhcIiw2KS5hdHRyKFwiaGVpZ2h0XCIsNikuc3R5bGUoXCJ2aXNpYmlsaXR5XCIsXCJoaWRkZW5cIiksbi5zdHlsZShcImRpc3BsYXlcIixmLmVtcHR5KCk/XCJub25lXCI6bnVsbCk7dmFyIG8scz10LnRyYW5zaXRpb24oZSksbD10LnRyYW5zaXRpb24ocik7aSYmKG89dW8oaSksbC5hdHRyKFwieFwiLG9bMF0pLmF0dHIoXCJ3aWR0aFwiLG9bMV0tb1swXSksZChzKSksYSYmKG89dW8oYSksbC5hdHRyKFwieVwiLG9bMF0pLmF0dHIoXCJoZWlnaHRcIixvWzFdLW9bMF0pLGcocykpLHAocyl9KX1mdW5jdGlvbiBwKHQpe3Quc2VsZWN0QWxsKFwiLnJlc2l6ZVwiKS5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrc1srL2UkLy50ZXN0KHQpXStcIixcIitsWysvXnMvLnRlc3QodCldK1wiKVwifSl9ZnVuY3Rpb24gZCh0KXt0LnNlbGVjdChcIi5leHRlbnRcIikuYXR0cihcInhcIixzWzBdKSx0LnNlbGVjdEFsbChcIi5leHRlbnQsLm4+cmVjdCwucz5yZWN0XCIpLmF0dHIoXCJ3aWR0aFwiLHNbMV0tc1swXSl9ZnVuY3Rpb24gZyh0KXt0LnNlbGVjdChcIi5leHRlbnRcIikuYXR0cihcInlcIixsWzBdKSx0LnNlbGVjdEFsbChcIi5leHRlbnQsLmU+cmVjdCwudz5yZWN0XCIpLmF0dHIoXCJoZWlnaHRcIixsWzFdLWxbMF0pfWZ1bmN0aW9uIHYoKXt2YXIgaCx2LG09dGhpcyx5PXQuc2VsZWN0KHQuZXZlbnQudGFyZ2V0KSx4PW4ub2YobSxhcmd1bWVudHMpLGI9dC5zZWxlY3QobSksXz15LmRhdHVtKCksdz0hL14obnxzKSQvLnRlc3QoXykmJmksaz0hL14oZXx3KSQvLnRlc3QoXykmJmEsQT15LmNsYXNzZWQoXCJleHRlbnRcIiksVD14dChtKSxNPXQubW91c2UobSksUz10LnNlbGVjdChvKG0pKS5vbihcImtleWRvd24uYnJ1c2hcIixmdW5jdGlvbigpezMyPT10LmV2ZW50LmtleUNvZGUmJihBfHwoaD1udWxsLE1bMF0tPXNbMV0sTVsxXS09bFsxXSxBPTIpLEIoKSl9KS5vbihcImtleXVwLmJydXNoXCIsZnVuY3Rpb24oKXszMj09dC5ldmVudC5rZXlDb2RlJiYyPT1BJiYoTVswXSs9c1sxXSxNWzFdKz1sWzFdLEE9MCxCKCkpfSk7aWYodC5ldmVudC5jaGFuZ2VkVG91Y2hlcz9TLm9uKFwidG91Y2htb3ZlLmJydXNoXCIsTCkub24oXCJ0b3VjaGVuZC5icnVzaFwiLE8pOlMub24oXCJtb3VzZW1vdmUuYnJ1c2hcIixMKS5vbihcIm1vdXNldXAuYnJ1c2hcIixPKSxiLmludGVycnVwdCgpLnNlbGVjdEFsbChcIipcIikuaW50ZXJydXB0KCksQSlNWzBdPXNbMF0tTVswXSxNWzFdPWxbMF0tTVsxXTtlbHNlIGlmKF8pe3ZhciBFPSsvdyQvLnRlc3QoXyksQz0rL15uLy50ZXN0KF8pO3Y9W3NbMS1FXS1NWzBdLGxbMS1DXS1NWzFdXSxNWzBdPXNbRV0sTVsxXT1sW0NdfWVsc2UgdC5ldmVudC5hbHRLZXkmJihoPU0uc2xpY2UoKSk7ZnVuY3Rpb24gTCgpe3ZhciBlPXQubW91c2UobSkscj0hMTt2JiYoZVswXSs9dlswXSxlWzFdKz12WzFdKSxBfHwodC5ldmVudC5hbHRLZXk/KGh8fChoPVsoc1swXStzWzFdKS8yLChsWzBdK2xbMV0pLzJdKSxNWzBdPXNbKyhlWzBdPGhbMF0pXSxNWzFdPWxbKyhlWzFdPGhbMV0pXSk6aD1udWxsKSx3JiZ6KGUsaSwwKSYmKGQoYikscj0hMCksayYmeihlLGEsMSkmJihnKGIpLHI9ITApLHImJihwKGIpLHgoe3R5cGU6XCJicnVzaFwiLG1vZGU6QT9cIm1vdmVcIjpcInJlc2l6ZVwifSkpfWZ1bmN0aW9uIHoodCxuLGkpe3ZhciBhLG8sZj11byhuKSxwPWZbMF0sZD1mWzFdLGc9TVtpXSx2PWk/bDpzLG09dlsxXS12WzBdO2lmKEEmJihwLT1nLGQtPW0rZyksYT0oaT91OmMpP01hdGgubWF4KHAsTWF0aC5taW4oZCx0W2ldKSk6dFtpXSxBP289KGErPWcpK206KGgmJihnPU1hdGgubWF4KHAsTWF0aC5taW4oZCwyKmhbaV0tYSkpKSxnPGE/KG89YSxhPWcpOm89ZyksdlswXSE9YXx8dlsxXSE9bylyZXR1cm4gaT9yPW51bGw6ZT1udWxsLHZbMF09YSx2WzFdPW8sITB9ZnVuY3Rpb24gTygpe0woKSxiLnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixcImFsbFwiKS5zZWxlY3RBbGwoXCIucmVzaXplXCIpLnN0eWxlKFwiZGlzcGxheVwiLGYuZW1wdHkoKT9cIm5vbmVcIjpudWxsKSx0LnNlbGVjdChcImJvZHlcIikuc3R5bGUoXCJjdXJzb3JcIixudWxsKSxTLm9uKFwibW91c2Vtb3ZlLmJydXNoXCIsbnVsbCkub24oXCJtb3VzZXVwLmJydXNoXCIsbnVsbCkub24oXCJ0b3VjaG1vdmUuYnJ1c2hcIixudWxsKS5vbihcInRvdWNoZW5kLmJydXNoXCIsbnVsbCkub24oXCJrZXlkb3duLmJydXNoXCIsbnVsbCkub24oXCJrZXl1cC5icnVzaFwiLG51bGwpLFQoKSx4KHt0eXBlOlwiYnJ1c2hlbmRcIn0pfWIuc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwibm9uZVwiKS5zZWxlY3RBbGwoXCIucmVzaXplXCIpLnN0eWxlKFwiZGlzcGxheVwiLG51bGwpLHQuc2VsZWN0KFwiYm9keVwiKS5zdHlsZShcImN1cnNvclwiLHkuc3R5bGUoXCJjdXJzb3JcIikpLHgoe3R5cGU6XCJicnVzaHN0YXJ0XCJ9KSxMKCl9cmV0dXJuIGYuZXZlbnQ9ZnVuY3Rpb24oaSl7aS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9bi5vZih0aGlzLGFyZ3VtZW50cyksYT17eDpzLHk6bCxpOmUsajpyfSxvPXRoaXMuX19jaGFydF9ffHxhO3RoaXMuX19jaGFydF9fPWEsZHM/dC5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmVhY2goXCJzdGFydC5icnVzaFwiLGZ1bmN0aW9uKCl7ZT1vLmkscj1vLmoscz1vLngsbD1vLnksaSh7dHlwZTpcImJydXNoc3RhcnRcIn0pfSkudHdlZW4oXCJicnVzaDpicnVzaFwiLGZ1bmN0aW9uKCl7dmFyIHQ9JGkocyxhLngpLG49JGkobCxhLnkpO3JldHVybiBlPXI9bnVsbCxmdW5jdGlvbihlKXtzPWEueD10KGUpLGw9YS55PW4oZSksaSh7dHlwZTpcImJydXNoXCIsbW9kZTpcInJlc2l6ZVwifSl9fSkuZWFjaChcImVuZC5icnVzaFwiLGZ1bmN0aW9uKCl7ZT1hLmkscj1hLmosaSh7dHlwZTpcImJydXNoXCIsbW9kZTpcInJlc2l6ZVwifSksaSh7dHlwZTpcImJydXNoZW5kXCJ9KX0pOihpKHt0eXBlOlwiYnJ1c2hzdGFydFwifSksaSh7dHlwZTpcImJydXNoXCIsbW9kZTpcInJlc2l6ZVwifSksaSh7dHlwZTpcImJydXNoZW5kXCJ9KSl9KX0sZi54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPVNzWyEoaT10KTw8MXwhYV0sZik6aX0sZi55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPVNzWyFpPDwxfCEoYT10KV0sZik6YX0sZi5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaSYmYT8oYz0hIXRbMF0sdT0hIXRbMV0pOmk/Yz0hIXQ6YSYmKHU9ISF0KSxmKTppJiZhP1tjLHVdOmk/YzphP3U6bnVsbH0sZi5leHRlbnQ9ZnVuY3Rpb24odCl7dmFyIG4sbyxjLHUsaDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaSYmKG49dFswXSxvPXRbMV0sYSYmKG49blswXSxvPW9bMF0pLGU9W24sb10saS5pbnZlcnQmJihuPWkobiksbz1pKG8pKSxvPG4mJihoPW4sbj1vLG89aCksbj09c1swXSYmbz09c1sxXXx8KHM9W24sb10pKSxhJiYoYz10WzBdLHU9dFsxXSxpJiYoYz1jWzFdLHU9dVsxXSkscj1bYyx1XSxhLmludmVydCYmKGM9YShjKSx1PWEodSkpLHU8YyYmKGg9YyxjPXUsdT1oKSxjPT1sWzBdJiZ1PT1sWzFdfHwobD1bYyx1XSkpLGYpOihpJiYoZT8obj1lWzBdLG89ZVsxXSk6KG49c1swXSxvPXNbMV0saS5pbnZlcnQmJihuPWkuaW52ZXJ0KG4pLG89aS5pbnZlcnQobykpLG88biYmKGg9bixuPW8sbz1oKSkpLGEmJihyPyhjPXJbMF0sdT1yWzFdKTooYz1sWzBdLHU9bFsxXSxhLmludmVydCYmKGM9YS5pbnZlcnQoYyksdT1hLmludmVydCh1KSksdTxjJiYoaD1jLGM9dSx1PWgpKSksaSYmYT9bW24sY10sW28sdV1dOmk/W24sb106YSYmW2MsdV0pfSxmLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIGYuZW1wdHkoKXx8KHM9WzAsMF0sbD1bMCwwXSxlPXI9bnVsbCksZn0sZi5lbXB0eT1mdW5jdGlvbigpe3JldHVybiEhaSYmc1swXT09c1sxXXx8ISFhJiZsWzBdPT1sWzFdfSx0LnJlYmluZChmLG4sXCJvblwiKX07dmFyIE1zPXtuOlwibnMtcmVzaXplXCIsZTpcImV3LXJlc2l6ZVwiLHM6XCJucy1yZXNpemVcIix3OlwiZXctcmVzaXplXCIsbnc6XCJud3NlLXJlc2l6ZVwiLG5lOlwibmVzdy1yZXNpemVcIixzZTpcIm53c2UtcmVzaXplXCIsc3c6XCJuZXN3LXJlc2l6ZVwifSxTcz1bW1wiblwiLFwiZVwiLFwic1wiLFwid1wiLFwibndcIixcIm5lXCIsXCJzZVwiLFwic3dcIl0sW1wiZVwiLFwid1wiXSxbXCJuXCIsXCJzXCJdLFtdXSxFcz1JZS5mb3JtYXQ9c3IudGltZUZvcm1hdCxDcz1Fcy51dGMsTHM9Q3MoXCIlWS0lbS0lZFQlSDolTTolUy4lTFpcIik7ZnVuY3Rpb24genModCl7cmV0dXJuIHQudG9JU09TdHJpbmcoKX1mdW5jdGlvbiBPcyhlLHIsbil7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gZSh0KX1mdW5jdGlvbiBhKGUsbil7dmFyIGk9KGVbMV0tZVswXSkvbixhPXQuYmlzZWN0KERzLGkpO3JldHVybiBhPT1Ecy5sZW5ndGg/W3IueWVhcix4byhlLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC8zMTUzNmU2fSksbilbMl1dOmE/cltpL0RzW2EtMV08RHNbYV0vaT9hLTE6YV06W0ZzLHhvKGUsbilbMl1dfXJldHVybiBpLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gSXMoZS5pbnZlcnQodCkpfSxpLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZS5kb21haW4odCksaSk6ZS5kb21haW4oKS5tYXAoSXMpfSxpLm5pY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj1pLmRvbWFpbigpLG49Y28ociksbz1udWxsPT10P2EobiwxMCk6XCJudW1iZXJcIj09dHlwZW9mIHQmJmEobix0KTtmdW5jdGlvbiBzKHIpe3JldHVybiFpc05hTihyKSYmIXQucmFuZ2UocixJcygrcisxKSxlKS5sZW5ndGh9cmV0dXJuIG8mJih0PW9bMF0sZT1vWzFdKSxpLmRvbWFpbihmbyhyLGU+MT97Zmxvb3I6ZnVuY3Rpb24oZSl7Zm9yKDtzKGU9dC5mbG9vcihlKSk7KWU9SXMoZS0xKTtyZXR1cm4gZX0sY2VpbDpmdW5jdGlvbihlKXtmb3IoO3MoZT10LmNlaWwoZSkpOyllPUlzKCtlKzEpO3JldHVybiBlfX06dCkpfSxpLnRpY2tzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9Y28oaS5kb21haW4oKSksbj1udWxsPT10P2EociwxMCk6XCJudW1iZXJcIj09dHlwZW9mIHQ/YShyLHQpOiF0LnJhbmdlJiZbe3JhbmdlOnR9LGVdO3JldHVybiBuJiYodD1uWzBdLGU9blsxXSksdC5yYW5nZShyWzBdLElzKCtyWzFdKzEpLGU8MT8xOmUpfSxpLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIE9zKGUuY29weSgpLHIsbil9LG1vKGksZSl9ZnVuY3Rpb24gSXModCl7cmV0dXJuIG5ldyBEYXRlKHQpfUVzLmlzbz1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyYmK25ldyBEYXRlKFwiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaXCIpP3pzOkxzLHpzLnBhcnNlPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBEYXRlKHQpO3JldHVybiBpc05hTihlKT9udWxsOmV9LHpzLnRvU3RyaW5nPUxzLnRvU3RyaW5nLEllLnNlY29uZD1GZShmdW5jdGlvbih0KXtyZXR1cm4gbmV3IERlKDFlMypNYXRoLmZsb29yKHQvMWUzKSl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKHQuZ2V0VGltZSgpKzFlMypNYXRoLmZsb29yKGUpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0U2Vjb25kcygpfSksSWUuc2Vjb25kcz1JZS5zZWNvbmQucmFuZ2UsSWUuc2Vjb25kcy51dGM9SWUuc2Vjb25kLnV0Yy5yYW5nZSxJZS5taW51dGU9RmUoZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBEZSg2ZTQqTWF0aC5mbG9vcih0LzZlNCkpfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSh0LmdldFRpbWUoKSs2ZTQqTWF0aC5mbG9vcihlKSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pLEllLm1pbnV0ZXM9SWUubWludXRlLnJhbmdlLEllLm1pbnV0ZXMudXRjPUllLm1pbnV0ZS51dGMucmFuZ2UsSWUuaG91cj1GZShmdW5jdGlvbih0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCkvNjA7cmV0dXJuIG5ldyBEZSgzNmU1KihNYXRoLmZsb29yKHQvMzZlNS1lKStlKSl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKHQuZ2V0VGltZSgpKzM2ZTUqTWF0aC5mbG9vcihlKSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9KSxJZS5ob3Vycz1JZS5ob3VyLnJhbmdlLEllLmhvdXJzLnV0Yz1JZS5ob3VyLnV0Yy5yYW5nZSxJZS5tb250aD1GZShmdW5jdGlvbih0KXtyZXR1cm4odD1JZS5kYXkodCkpLnNldERhdGUoMSksdH0sZnVuY3Rpb24odCxlKXt0LnNldE1vbnRoKHQuZ2V0TW9udGgoKStlKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKX0pLEllLm1vbnRocz1JZS5tb250aC5yYW5nZSxJZS5tb250aHMudXRjPUllLm1vbnRoLnV0Yy5yYW5nZTt2YXIgRHM9WzFlMyw1ZTMsMTVlMywzZTQsNmU0LDNlNSw5ZTUsMThlNSwzNmU1LDEwOGU1LDIxNmU1LDQzMmU1LDg2NGU1LDE3MjhlNSw2MDQ4ZTUsMjU5MmU2LDc3NzZlNiwzMTUzNmU2XSxQcz1bW0llLnNlY29uZCwxXSxbSWUuc2Vjb25kLDVdLFtJZS5zZWNvbmQsMTVdLFtJZS5zZWNvbmQsMzBdLFtJZS5taW51dGUsMV0sW0llLm1pbnV0ZSw1XSxbSWUubWludXRlLDE1XSxbSWUubWludXRlLDMwXSxbSWUuaG91ciwxXSxbSWUuaG91ciwzXSxbSWUuaG91ciw2XSxbSWUuaG91ciwxMl0sW0llLmRheSwxXSxbSWUuZGF5LDJdLFtJZS53ZWVrLDFdLFtJZS5tb250aCwxXSxbSWUubW9udGgsM10sW0llLnllYXIsMV1dLFJzPUVzLm11bHRpKFtbXCIuJUxcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaWxsaXNlY29uZHMoKX1dLFtcIjolU1wiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFNlY29uZHMoKX1dLFtcIiVJOiVNXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TWludXRlcygpfV0sW1wiJUkgJXBcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRIb3VycygpfV0sW1wiJWEgJWRcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKSYmMSE9dC5nZXREYXRlKCl9XSxbXCIlYiAlZFwiLGZ1bmN0aW9uKHQpe3JldHVybiAxIT10LmdldERhdGUoKX1dLFtcIiVCXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKX1dLFtcIiVZXCIsWXJdXSksRnM9e3JhbmdlOmZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdC5yYW5nZShNYXRoLmNlaWwoZS9uKSpuLCtyLG4pLm1hcChJcyl9LGZsb29yOnosY2VpbDp6fTtQcy55ZWFyPUllLnllYXIsSWUuc2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gT3ModC5zY2FsZS5saW5lYXIoKSxQcyxScyl9O3ZhciBCcz1Qcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0udXRjLHRbMV1dfSksTnM9Q3MubXVsdGkoW1tcIi4lTFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbGxpc2Vjb25kcygpfV0sW1wiOiVTXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDU2Vjb25kcygpfV0sW1wiJUk6JU1cIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNaW51dGVzKCl9XSxbXCIlSSAlcFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0hvdXJzKCl9XSxbXCIlYSAlZFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0RheSgpJiYxIT10LmdldFVUQ0RhdGUoKX1dLFtcIiViICVkXCIsZnVuY3Rpb24odCl7cmV0dXJuIDEhPXQuZ2V0VVRDRGF0ZSgpfV0sW1wiJUJcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpfV0sW1wiJVlcIixZcl1dKTtmdW5jdGlvbiBqcyh0KXtyZXR1cm4gSlNPTi5wYXJzZSh0LnJlc3BvbnNlVGV4dCl9ZnVuY3Rpb24gVnModCl7dmFyIGU9aS5jcmVhdGVSYW5nZSgpO3JldHVybiBlLnNlbGVjdE5vZGUoaS5ib2R5KSxlLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0LnJlc3BvbnNlVGV4dCl9QnMueWVhcj1JZS55ZWFyLnV0YyxJZS5zY2FsZS51dGM9ZnVuY3Rpb24oKXtyZXR1cm4gT3ModC5zY2FsZS5saW5lYXIoKSxCcyxOcyl9LHQudGV4dD1tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXNwb25zZVRleHR9KSx0Lmpzb249ZnVuY3Rpb24odCxlKXtyZXR1cm4geWUodCxcImFwcGxpY2F0aW9uL2pzb25cIixqcyxlKX0sdC5odG1sPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHllKHQsXCJ0ZXh0L2h0bWxcIixWcyxlKX0sdC54bWw9bWUoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVzcG9uc2VYTUx9KSxcIm9iamVjdFwiPT10eXBlb2YgZSYmZS5leHBvcnRzP2UuZXhwb3J0cz10OnRoaXMuZDM9dH0oKX0se31dLDE1NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspaWYodm9pZCAwIT09YXJndW1lbnRzW3RdKXJldHVybiBhcmd1bWVudHNbdF19fSx7fV0sMTU3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImluY3JlbWVudGFsLWNvbnZleC1odWxsXCIpLGk9dChcInVuaXFcIik7ZnVuY3Rpb24gYSh0LGUpe3RoaXMucG9pbnQ9dCx0aGlzLmluZGV4PWV9ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj10LnBvaW50LG49ZS5wb2ludCxpPXIubGVuZ3RoLGE9MDthPGk7KythKXt2YXIgbz1uW2FdLXJbYV07aWYobylyZXR1cm4gb31yZXR1cm4gMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lmxlbmd0aDtpZigwPT09cilyZXR1cm5bXTt2YXIgcz10WzBdLmxlbmd0aDtpZihzPDEpcmV0dXJuW107aWYoMT09PXMpcmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtpZigxPT09dClyZXR1cm4gcj9bWy0xLDBdXTpbXTt2YXIgbj1lLm1hcChmdW5jdGlvbih0LGUpe3JldHVyblt0WzBdLGVdfSk7bi5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0tZVswXX0pO2Zvcih2YXIgaT1uZXcgQXJyYXkodC0xKSxhPTE7YTx0OysrYSl7dmFyIG89blthLTFdLHM9blthXTtpW2EtMV09W29bMV0sc1sxXV19ciYmaS5wdXNoKFstMSxpWzBdWzFdXSxbaVt0LTFdWzFdLC0xXSk7cmV0dXJuIGl9KHIsdCxlKTtmb3IodmFyIGw9bmV3IEFycmF5KHIpLGM9MSx1PTA7dTxyOysrdSl7Zm9yKHZhciBoPXRbdV0sZj1uZXcgQXJyYXkocysxKSxwPTAsZD0wO2Q8czsrK2Qpe3ZhciBnPWhbZF07ZltkXT1nLHArPWcqZ31mW3NdPXAsbFt1XT1uZXcgYShmLHUpLGM9TWF0aC5tYXgocCxjKX1pKGwsbykscj1sLmxlbmd0aDtmb3IodmFyIHY9bmV3IEFycmF5KHIrcysxKSxtPW5ldyBBcnJheShyK3MrMSkseT0ocysxKSoocysxKSpjLHg9bmV3IEFycmF5KHMrMSksdT0wO3U8PXM7Kyt1KXhbdV09MDt4W3NdPXksdlswXT14LnNsaWNlKCksbVswXT0tMTtmb3IodmFyIHU9MDt1PD1zOysrdSl7dmFyIGY9eC5zbGljZSgpO2ZbdV09MSx2W3UrMV09ZixtW3UrMV09LTF9Zm9yKHZhciB1PTA7dTxyOysrdSl7dmFyIGI9bFt1XTt2W3UrcysxXT1iLnBvaW50LG1bdStzKzFdPWIuaW5kZXh9dmFyIF89bih2LCExKTtfPWU/Xy5maWx0ZXIoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wO3I8PXM7KytyKXt2YXIgbj1tW3Rbcl1dO2lmKG48MCYmKytlPj0yKXJldHVybiExO3Rbcl09bn1yZXR1cm4hMH0pOl8uZmlsdGVyKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8PXM7KytlKXt2YXIgcj1tW3RbZV1dO2lmKHI8MClyZXR1cm4hMTt0W2VdPXJ9cmV0dXJuITB9KTtpZigxJnMpZm9yKHZhciB1PTA7dTxfLmxlbmd0aDsrK3Upe3ZhciBiPV9bdV0sZj1iWzBdO2JbMF09YlsxXSxiWzFdPWZ9cmV0dXJuIF99fSx7XCJpbmNyZW1lbnRhbC1jb252ZXgtaHVsbFwiOjQwNix1bmlxOjUzMn1dLDE1ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1hO3ZhciBuPShhLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpKS5nZXRDb250ZXh0KFwiMmRcIiksaT1vKFszMiwxMjZdKTtmdW5jdGlvbiBhKHQsZSl7QXJyYXkuaXNBcnJheSh0KSYmKHQ9dC5qb2luKFwiLCBcIikpO3ZhciByLGE9e30scz0xNixsPS4wNTtlJiYoMj09PWUubGVuZ3RoJiZcIm51bWJlclwiPT10eXBlb2YgZVswXT9yPW8oZSk6QXJyYXkuaXNBcnJheShlKT9yPWU6KGUubz9yPW8oZS5vKTplLnBhaXJzJiYocj1lLnBhaXJzKSxlLmZvbnRTaXplJiYocz1lLmZvbnRTaXplKSxudWxsIT1lLnRocmVzaG9sZCYmKGw9ZS50aHJlc2hvbGQpKSkscnx8KHI9aSksbi5mb250PXMrXCJweCBcIit0O2Zvcih2YXIgYz0wO2M8ci5sZW5ndGg7YysrKXt2YXIgdT1yW2NdLGg9bi5tZWFzdXJlVGV4dCh1WzBdKS53aWR0aCtuLm1lYXN1cmVUZXh0KHVbMV0pLndpZHRoLGY9bi5tZWFzdXJlVGV4dCh1KS53aWR0aDtpZihNYXRoLmFicyhoLWYpPnMqbCl7dmFyIHA9KGYtaCkvczthW3VdPTFlMypwfX1yZXR1cm4gYX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT1bXSxyPXRbMF07cjw9dFsxXTtyKyspZm9yKHZhciBuPVN0cmluZy5mcm9tQ2hhckNvZGUociksaT10WzBdO2k8dFsxXTtpKyspe3ZhciBhPW4rU3RyaW5nLmZyb21DaGFyQ29kZShpKTtlLnB1c2goYSl9cmV0dXJuIGV9YS5jcmVhdGVQYWlycz1vLGEuYXNjaWk9aX0se31dLDE1OTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXt2YXIgcj0hMTtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgRmxvYXQ2NEFycmF5KXt2YXIgbj1uZXcgRmxvYXQ2NEFycmF5KDEpLGk9bmV3IFVpbnQzMkFycmF5KG4uYnVmZmVyKTtpZihuWzBdPTEscj0hMCwxMDcyNjkzMjQ4PT09aVsxXSl7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsW2lbMF0saVsxXV19LGUuZXhwb3J0cy5wYWNrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGlbMF09dCxpWzFdPWUsblswXX0sZS5leHBvcnRzLmxvPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsaVswXX0sZS5leHBvcnRzLmhpPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsaVsxXX19ZWxzZSBpZigxMDcyNjkzMjQ4PT09aVswXSl7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsW2lbMV0saVswXV19LGUuZXhwb3J0cy5wYWNrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGlbMV09dCxpWzBdPWUsblswXX0sZS5leHBvcnRzLmxvPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsaVsxXX0sZS5leHBvcnRzLmhpPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsaVswXX19ZWxzZSByPSExfWlmKCFyKXt2YXIgYT1uZXcgdCg4KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEud3JpdGVEb3VibGVMRSh0LDAsITApLFthLnJlYWRVSW50MzJMRSgwLCEwKSxhLnJlYWRVSW50MzJMRSg0LCEwKV19LGUuZXhwb3J0cy5wYWNrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEud3JpdGVVSW50MzJMRSh0LDAsITApLGEud3JpdGVVSW50MzJMRShlLDQsITApLGEucmVhZERvdWJsZUxFKDAsITApfSxlLmV4cG9ydHMubG89ZnVuY3Rpb24odCl7cmV0dXJuIGEud3JpdGVEb3VibGVMRSh0LDAsITApLGEucmVhZFVJbnQzMkxFKDAsITApfSxlLmV4cG9ydHMuaGk9ZnVuY3Rpb24odCl7cmV0dXJuIGEud3JpdGVEb3VibGVMRSh0LDAsITApLGEucmVhZFVJbnQzMkxFKDQsITApfX1lLmV4cG9ydHMuc2lnbj1mdW5jdGlvbih0KXtyZXR1cm4gZS5leHBvcnRzLmhpKHQpPj4+MzF9LGUuZXhwb3J0cy5leHBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4oZS5leHBvcnRzLmhpKHQpPDwxPj4+MjEpLTEwMjN9LGUuZXhwb3J0cy5mcmFjdGlvbj1mdW5jdGlvbih0KXt2YXIgcj1lLmV4cG9ydHMubG8odCksbj1lLmV4cG9ydHMuaGkodCksaT0xMDQ4NTc1Jm47cmV0dXJuIDIxNDY0MzUwNzImbiYmKGkrPTE8PDIwKSxbcixpXX0sZS5leHBvcnRzLmRlbm9ybWFsaXplZD1mdW5jdGlvbih0KXtyZXR1cm4hKDIxNDY0MzUwNzImZS5leHBvcnRzLmhpKHQpKX19KS5jYWxsKHRoaXMsdChcImJ1ZmZlclwiKS5CdWZmZXIpfSx7YnVmZmVyOjk2fV0sMTYwOltmdW5jdGlvbih0LGUscil7dmFyIG49dChcImFicy1zdmctcGF0aFwiKSxpPXQoXCJub3JtYWxpemUtc3ZnLXBhdGhcIiksYT17TTpcIm1vdmVUb1wiLEM6XCJiZXppZXJDdXJ2ZVRvXCJ9O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3QuYmVnaW5QYXRoKCksaShuKGUpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWVbMF0sbj1lLnNsaWNlKDEpO3RbYVtyXV0uYXBwbHkodCxuKX0pLHQuY2xvc2VQYXRoKCl9fSx7XCJhYnMtc3ZnLXBhdGhcIjo1MSxcIm5vcm1hbGl6ZS1zdmctcGF0aFwiOjQ0NX1dLDE2MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZVwiaW50OFwiOnJldHVybiBJbnQ4QXJyYXk7Y2FzZVwiaW50MTZcIjpyZXR1cm4gSW50MTZBcnJheTtjYXNlXCJpbnQzMlwiOnJldHVybiBJbnQzMkFycmF5O2Nhc2VcInVpbnQ4XCI6cmV0dXJuIFVpbnQ4QXJyYXk7Y2FzZVwidWludDE2XCI6cmV0dXJuIFVpbnQxNkFycmF5O2Nhc2VcInVpbnQzMlwiOnJldHVybiBVaW50MzJBcnJheTtjYXNlXCJmbG9hdDMyXCI6cmV0dXJuIEZsb2F0MzJBcnJheTtjYXNlXCJmbG9hdDY0XCI6cmV0dXJuIEZsb2F0NjRBcnJheTtjYXNlXCJhcnJheVwiOnJldHVybiBBcnJheTtjYXNlXCJ1aW50OF9jbGFtcGVkXCI6cmV0dXJuIFVpbnQ4Q2xhbXBlZEFycmF5fX19LHt9XSwxNjI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtzd2l0Y2goXCJ1bmRlZmluZWRcIj09dHlwZW9mIGUmJihlPTApLHR5cGVvZiB0KXtjYXNlXCJudW1iZXJcIjppZih0PjApcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHIsbjtmb3Iocj1uZXcgQXJyYXkodCksbj0wO248dDsrK24pcltuXT1lO3JldHVybiByfSgwfHQsZSk7YnJlYWs7Y2FzZVwib2JqZWN0XCI6aWYoXCJudW1iZXJcIj09dHlwZW9mIHQubGVuZ3RoKXJldHVybiBmdW5jdGlvbiB0KGUscixuKXt2YXIgaT0wfGVbbl07aWYoaTw9MClyZXR1cm5bXTt2YXIgYSxvPW5ldyBBcnJheShpKTtpZihuPT09ZS5sZW5ndGgtMSlmb3IoYT0wO2E8aTsrK2Epb1thXT1yO2Vsc2UgZm9yKGE9MDthPGk7KythKW9bYV09dChlLHIsbisxKTtyZXR1cm4gb30odCxlLDApfXJldHVybltdfX0se31dLDE2MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlLHIpe3I9cnx8Mjt2YXIgbixzLGwsYyx1LHAsZyx2PWUmJmUubGVuZ3RoLG09dj9lWzBdKnI6dC5sZW5ndGgseT1pKHQsMCxtLHIsITApLHg9W107aWYoIXkpcmV0dXJuIHg7aWYodiYmKHk9ZnVuY3Rpb24odCxlLHIsbil7dmFyIG8scyxsLGMsdSxwPVtdO2ZvcihvPTAscz1lLmxlbmd0aDtvPHM7bysrKWw9ZVtvXSpuLGM9bzxzLTE/ZVtvKzFdKm46dC5sZW5ndGgsKHU9aSh0LGwsYyxuLCExKSk9PT11Lm5leHQmJih1LnN0ZWluZXI9ITApLHAucHVzaChkKHUpKTtmb3IocC5zb3J0KGgpLG89MDtvPHAubGVuZ3RoO28rKylmKHBbb10scikscj1hKHIsci5uZXh0KTtyZXR1cm4gcn0odCxlLHkscikpLHQubGVuZ3RoPjgwKnIpe249bD10WzBdLHM9Yz10WzFdO2Zvcih2YXIgYj1yO2I8bTtiKz1yKSh1PXRbYl0pPG4mJihuPXUpLChwPXRbYisxXSk8cyYmKHM9cCksdT5sJiYobD11KSxwPmMmJihjPXApO2c9MCE9PShnPU1hdGgubWF4KGwtbixjLXMpKT8xL2c6MH1yZXR1cm4gbyh5LHgscixuLHMsZykseH1mdW5jdGlvbiBpKHQsZSxyLG4saSl7dmFyIGEsbztpZihpPT09VCh0LGUscixuKT4wKWZvcihhPWU7YTxyO2ErPW4pbz13KGEsdFthXSx0W2ErMV0sbyk7ZWxzZSBmb3IoYT1yLW47YT49ZTthLT1uKW89dyhhLHRbYV0sdFthKzFdLG8pO3JldHVybiBvJiZ5KG8sby5uZXh0KSYmKGsobyksbz1vLm5leHQpLG99ZnVuY3Rpb24gYSh0LGUpe2lmKCF0KXJldHVybiB0O2V8fChlPXQpO3ZhciByLG49dDtkb3tpZihyPSExLG4uc3RlaW5lcnx8IXkobixuLm5leHQpJiYwIT09bShuLnByZXYsbixuLm5leHQpKW49bi5uZXh0O2Vsc2V7aWYoayhuKSwobj1lPW4ucHJldik9PT1uLm5leHQpYnJlYWs7cj0hMH19d2hpbGUocnx8biE9PWUpO3JldHVybiBlfWZ1bmN0aW9uIG8odCxlLHIsbixpLGgsZil7aWYodCl7IWYmJmgmJmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQ7ZG97bnVsbD09PWkueiYmKGkuej1wKGkueCxpLnksZSxyLG4pKSxpLnByZXZaPWkucHJldixpLm5leHRaPWkubmV4dCxpPWkubmV4dH13aGlsZShpIT09dCk7aS5wcmV2Wi5uZXh0Wj1udWxsLGkucHJldlo9bnVsbCxmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scyxsLGM9MTtkb3tmb3Iocj10LHQ9bnVsbCxhPW51bGwsbz0wO3I7KXtmb3IobysrLG49cixzPTAsZT0wO2U8YyYmKHMrKyxuPW4ubmV4dFopO2UrKyk7Zm9yKGw9YztzPjB8fGw+MCYmbjspMCE9PXMmJigwPT09bHx8IW58fHIuejw9bi56KT8oaT1yLHI9ci5uZXh0WixzLS0pOihpPW4sbj1uLm5leHRaLGwtLSksYT9hLm5leHRaPWk6dD1pLGkucHJldlo9YSxhPWk7cj1ufWEubmV4dFo9bnVsbCxjKj0yfXdoaWxlKG8+MSl9KGkpfSh0LG4saSxoKTtmb3IodmFyIGQsZyx2PXQ7dC5wcmV2IT09dC5uZXh0OylpZihkPXQucHJldixnPXQubmV4dCxoP2wodCxuLGksaCk6cyh0KSllLnB1c2goZC5pL3IpLGUucHVzaCh0LmkvciksZS5wdXNoKGcuaS9yKSxrKHQpLHQ9Zy5uZXh0LHY9Zy5uZXh0O2Vsc2UgaWYoKHQ9Zyk9PT12KXtmPzE9PT1mP28odD1jKHQsZSxyKSxlLHIsbixpLGgsMik6Mj09PWYmJnUodCxlLHIsbixpLGgpOm8oYSh0KSxlLHIsbixpLGgsMSk7YnJlYWt9fX1mdW5jdGlvbiBzKHQpe3ZhciBlPXQucHJldixyPXQsbj10Lm5leHQ7aWYobShlLHIsbik+PTApcmV0dXJuITE7Zm9yKHZhciBpPXQubmV4dC5uZXh0O2khPT10LnByZXY7KXtpZihnKGUueCxlLnksci54LHIueSxuLngsbi55LGkueCxpLnkpJiZtKGkucHJldixpLGkubmV4dCk+PTApcmV0dXJuITE7aT1pLm5leHR9cmV0dXJuITB9ZnVuY3Rpb24gbCh0LGUscixuKXt2YXIgaT10LnByZXYsYT10LG89dC5uZXh0O2lmKG0oaSxhLG8pPj0wKXJldHVybiExO2Zvcih2YXIgcz1pLng8YS54P2kueDxvLng/aS54Om8ueDphLng8by54P2EueDpvLngsbD1pLnk8YS55P2kueTxvLnk/aS55Om8ueTphLnk8by55P2EueTpvLnksYz1pLng+YS54P2kueD5vLng/aS54Om8ueDphLng+by54P2EueDpvLngsdT1pLnk+YS55P2kueT5vLnk/aS55Om8ueTphLnk+by55P2EueTpvLnksaD1wKHMsbCxlLHIsbiksZj1wKGMsdSxlLHIsbiksZD10LnByZXZaLHY9dC5uZXh0WjtkJiZkLno+PWgmJnYmJnYuejw9Zjspe2lmKGQhPT10LnByZXYmJmQhPT10Lm5leHQmJmcoaS54LGkueSxhLngsYS55LG8ueCxvLnksZC54LGQueSkmJm0oZC5wcmV2LGQsZC5uZXh0KT49MClyZXR1cm4hMTtpZihkPWQucHJldlosdiE9PXQucHJldiYmdiE9PXQubmV4dCYmZyhpLngsaS55LGEueCxhLnksby54LG8ueSx2Lngsdi55KSYmbSh2LnByZXYsdix2Lm5leHQpPj0wKXJldHVybiExO3Y9di5uZXh0Wn1mb3IoO2QmJmQuej49aDspe2lmKGQhPT10LnByZXYmJmQhPT10Lm5leHQmJmcoaS54LGkueSxhLngsYS55LG8ueCxvLnksZC54LGQueSkmJm0oZC5wcmV2LGQsZC5uZXh0KT49MClyZXR1cm4hMTtkPWQucHJldlp9Zm9yKDt2JiZ2Lno8PWY7KXtpZih2IT09dC5wcmV2JiZ2IT09dC5uZXh0JiZnKGkueCxpLnksYS54LGEueSxvLngsby55LHYueCx2LnkpJiZtKHYucHJldix2LHYubmV4dCk+PTApcmV0dXJuITE7dj12Lm5leHRafXJldHVybiEwfWZ1bmN0aW9uIGModCxlLHIpe3ZhciBuPXQ7ZG97dmFyIGk9bi5wcmV2LGE9bi5uZXh0Lm5leHQ7IXkoaSxhKSYmeChpLG4sbi5uZXh0LGEpJiZiKGksYSkmJmIoYSxpKSYmKGUucHVzaChpLmkvciksZS5wdXNoKG4uaS9yKSxlLnB1c2goYS5pL3IpLGsobiksayhuLm5leHQpLG49dD1hKSxuPW4ubmV4dH13aGlsZShuIT09dCk7cmV0dXJuIG59ZnVuY3Rpb24gdSh0LGUscixuLGkscyl7dmFyIGw9dDtkb3tmb3IodmFyIGM9bC5uZXh0Lm5leHQ7YyE9PWwucHJldjspe2lmKGwuaSE9PWMuaSYmdihsLGMpKXt2YXIgdT1fKGwsYyk7cmV0dXJuIGw9YShsLGwubmV4dCksdT1hKHUsdS5uZXh0KSxvKGwsZSxyLG4saSxzKSx2b2lkIG8odSxlLHIsbixpLHMpfWM9Yy5uZXh0fWw9bC5uZXh0fXdoaWxlKGwhPT10KX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQueC1lLnh9ZnVuY3Rpb24gZih0LGUpe2lmKGU9ZnVuY3Rpb24odCxlKXt2YXIgcixuPWUsaT10LngsYT10Lnksbz0tMS8wO2Rve2lmKGE8PW4ueSYmYT49bi5uZXh0LnkmJm4ubmV4dC55IT09bi55KXt2YXIgcz1uLngrKGEtbi55KSoobi5uZXh0Lngtbi54KS8obi5uZXh0Lnktbi55KTtpZihzPD1pJiZzPm8pe2lmKG89cyxzPT09aSl7aWYoYT09PW4ueSlyZXR1cm4gbjtpZihhPT09bi5uZXh0LnkpcmV0dXJuIG4ubmV4dH1yPW4ueDxuLm5leHQueD9uOm4ubmV4dH19bj1uLm5leHR9d2hpbGUobiE9PWUpO2lmKCFyKXJldHVybiBudWxsO2lmKGk9PT1vKXJldHVybiByLnByZXY7dmFyIGwsYz1yLHU9ci54LGg9ci55LGY9MS8wO249ci5uZXh0O2Zvcig7biE9PWM7KWk+PW4ueCYmbi54Pj11JiZpIT09bi54JiZnKGE8aD9pOm8sYSx1LGgsYTxoP286aSxhLG4ueCxuLnkpJiYoKGw9TWF0aC5hYnMoYS1uLnkpLyhpLW4ueCkpPGZ8fGw9PT1mJiZuLng+ci54KSYmYihuLHQpJiYocj1uLGY9bCksbj1uLm5leHQ7cmV0dXJuIHJ9KHQsZSkpe3ZhciByPV8oZSx0KTthKHIsci5uZXh0KX19ZnVuY3Rpb24gcCh0LGUscixuLGkpe3JldHVybih0PTE0MzE2NTU3NjUmKCh0PTg1ODk5MzQ1OSYoKHQ9MjUyNjQ1MTM1JigodD0xNjcxMTkzNSYoKHQ9MzI3NjcqKHQtcikqaSl8dDw8OCkpfHQ8PDQpKXx0PDwyKSl8dDw8MSkpfChlPTE0MzE2NTU3NjUmKChlPTg1ODk5MzQ1OSYoKGU9MjUyNjQ1MTM1JigoZT0xNjcxMTkzNSYoKGU9MzI3NjcqKGUtbikqaSl8ZTw8OCkpfGU8PDQpKXxlPDwyKSl8ZTw8MSkpPDwxfWZ1bmN0aW9uIGQodCl7dmFyIGU9dCxyPXQ7ZG97ZS54PHIueCYmKHI9ZSksZT1lLm5leHR9d2hpbGUoZSE9PXQpO3JldHVybiByfWZ1bmN0aW9uIGcodCxlLHIsbixpLGEsbyxzKXtyZXR1cm4oaS1vKSooZS1zKS0odC1vKSooYS1zKT49MCYmKHQtbykqKG4tcyktKHItbykqKGUtcyk+PTAmJihyLW8pKihhLXMpLShpLW8pKihuLXMpPj0wfWZ1bmN0aW9uIHYodCxlKXtyZXR1cm4gdC5uZXh0LmkhPT1lLmkmJnQucHJldi5pIT09ZS5pJiYhZnVuY3Rpb24odCxlKXt2YXIgcj10O2Rve2lmKHIuaSE9PXQuaSYmci5uZXh0LmkhPT10LmkmJnIuaSE9PWUuaSYmci5uZXh0LmkhPT1lLmkmJngocixyLm5leHQsdCxlKSlyZXR1cm4hMDtyPXIubmV4dH13aGlsZShyIT09dCk7cmV0dXJuITF9KHQsZSkmJmIodCxlKSYmYihlLHQpJiZmdW5jdGlvbih0LGUpe3ZhciByPXQsbj0hMSxpPSh0LngrZS54KS8yLGE9KHQueStlLnkpLzI7ZG97ci55PmEhPXIubmV4dC55PmEmJnIubmV4dC55IT09ci55JiZpPChyLm5leHQueC1yLngpKihhLXIueSkvKHIubmV4dC55LXIueSkrci54JiYobj0hbikscj1yLm5leHR9d2hpbGUociE9PXQpO3JldHVybiBufSh0LGUpfWZ1bmN0aW9uIG0odCxlLHIpe3JldHVybihlLnktdC55KSooci54LWUueCktKGUueC10LngpKihyLnktZS55KX1mdW5jdGlvbiB5KHQsZSl7cmV0dXJuIHQueD09PWUueCYmdC55PT09ZS55fWZ1bmN0aW9uIHgodCxlLHIsbil7cmV0dXJuISEoeSh0LGUpJiZ5KHIsbil8fHkodCxuKSYmeShyLGUpKXx8bSh0LGUscik+MCE9bSh0LGUsbik+MCYmbShyLG4sdCk+MCE9bShyLG4sZSk+MH1mdW5jdGlvbiBiKHQsZSl7cmV0dXJuIG0odC5wcmV2LHQsdC5uZXh0KTwwP20odCxlLHQubmV4dCk+PTAmJm0odCx0LnByZXYsZSk+PTA6bSh0LGUsdC5wcmV2KTwwfHxtKHQsdC5uZXh0LGUpPDB9ZnVuY3Rpb24gXyh0LGUpe3ZhciByPW5ldyBBKHQuaSx0LngsdC55KSxuPW5ldyBBKGUuaSxlLngsZS55KSxpPXQubmV4dCxhPWUucHJldjtyZXR1cm4gdC5uZXh0PWUsZS5wcmV2PXQsci5uZXh0PWksaS5wcmV2PXIsbi5uZXh0PXIsci5wcmV2PW4sYS5uZXh0PW4sbi5wcmV2PWEsbn1mdW5jdGlvbiB3KHQsZSxyLG4pe3ZhciBpPW5ldyBBKHQsZSxyKTtyZXR1cm4gbj8oaS5uZXh0PW4ubmV4dCxpLnByZXY9bixuLm5leHQucHJldj1pLG4ubmV4dD1pKTooaS5wcmV2PWksaS5uZXh0PWkpLGl9ZnVuY3Rpb24gayh0KXt0Lm5leHQucHJldj10LnByZXYsdC5wcmV2Lm5leHQ9dC5uZXh0LHQucHJldlomJih0LnByZXZaLm5leHRaPXQubmV4dFopLHQubmV4dFomJih0Lm5leHRaLnByZXZaPXQucHJldlopfWZ1bmN0aW9uIEEodCxlLHIpe3RoaXMuaT10LHRoaXMueD1lLHRoaXMueT1yLHRoaXMucHJldj1udWxsLHRoaXMubmV4dD1udWxsLHRoaXMuej1udWxsLHRoaXMucHJldlo9bnVsbCx0aGlzLm5leHRaPW51bGwsdGhpcy5zdGVpbmVyPSExfWZ1bmN0aW9uIFQodCxlLHIsbil7Zm9yKHZhciBpPTAsYT1lLG89ci1uO2E8cjthKz1uKWkrPSh0W29dLXRbYV0pKih0W2ErMV0rdFtvKzFdKSxvPWE7cmV0dXJuIGl9ZS5leHBvcnRzPW4sZS5leHBvcnRzLmRlZmF1bHQ9bixuLmRldmlhdGlvbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lJiZlLmxlbmd0aCxhPWk/ZVswXSpyOnQubGVuZ3RoLG89TWF0aC5hYnMoVCh0LDAsYSxyKSk7aWYoaSlmb3IodmFyIHM9MCxsPWUubGVuZ3RoO3M8bDtzKyspe3ZhciBjPWVbc10qcix1PXM8bC0xP2VbcysxXSpyOnQubGVuZ3RoO28tPU1hdGguYWJzKFQodCxjLHUscikpfXZhciBoPTA7Zm9yKHM9MDtzPG4ubGVuZ3RoO3MrPTMpe3ZhciBmPW5bc10qcixwPW5bcysxXSpyLGQ9bltzKzJdKnI7aCs9TWF0aC5hYnMoKHRbZl0tdFtkXSkqKHRbcCsxXS10W2YrMV0pLSh0W2ZdLXRbcF0pKih0W2QrMV0tdFtmKzFdKSl9cmV0dXJuIDA9PT1vJiYwPT09aD8wOk1hdGguYWJzKChoLW8pL28pfSxuLmZsYXR0ZW49ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF1bMF0ubGVuZ3RoLHI9e3ZlcnRpY2VzOltdLGhvbGVzOltdLGRpbWVuc2lvbnM6ZX0sbj0wLGk9MDtpPHQubGVuZ3RoO2krKyl7Zm9yKHZhciBhPTA7YTx0W2ldLmxlbmd0aDthKyspZm9yKHZhciBvPTA7bzxlO28rKylyLnZlcnRpY2VzLnB1c2godFtpXVthXVtvXSk7aT4wJiYobis9dFtpLTFdLmxlbmd0aCxyLmhvbGVzLnB1c2gobikpfXJldHVybiByfX0se31dLDE2NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoO2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlKXtlPTA7Zm9yKHZhciBpPTA7aTxyOysraSl7dmFyIGE9dFtpXTtlPU1hdGgubWF4KGUsYVswXSxhWzFdKX1lPTErKDB8ZSl9ZXw9MDtmb3IodmFyIG89bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKW9baV09W107Zm9yKHZhciBpPTA7aTxyOysraSl7dmFyIGE9dFtpXTtvW2FbMF1dLnB1c2goYVsxXSksb1thWzFdXS5wdXNoKGFbMF0pfWZvcih2YXIgcz0wO3M8ZTsrK3MpbihvW3NdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pO3JldHVybiBvfTt2YXIgbj10KFwidW5pcVwiKX0se3VuaXE6NTMyfV0sMTY1OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcInN0cm9uZ2x5LWNvbm5lY3RlZC1jb21wb25lbnRzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyPVtdLGk9W10sYT1bXSxvPXt9LHM9W107ZnVuY3Rpb24gbCh0KXt2YXIgcixuLHU9ITE7Zm9yKGkucHVzaCh0KSxhW3RdPSEwLHI9MDtyPHNbdF0ubGVuZ3RoO3IrKykobj1zW3RdW3JdKT09PWU/KGMoZSxpKSx1PSEwKTphW25dfHwodT1sKG4pKTtpZih1KSFmdW5jdGlvbiB0KGUpe2FbZV09ITEsby5oYXNPd25Qcm9wZXJ0eShlKSYmT2JqZWN0LmtleXMob1tlXSkuZm9yRWFjaChmdW5jdGlvbihyKXtkZWxldGUgb1tlXVtyXSxhW3JdJiZ0KHIpfSl9KHQpO2Vsc2UgZm9yKHI9MDtyPHNbdF0ubGVuZ3RoO3IrKyl7bj1zW3RdW3JdO3ZhciBoPW9bbl07aHx8KGg9e30sb1tuXT1oKSxoW25dPSEwfXJldHVybiBpLnBvcCgpLHV9ZnVuY3Rpb24gYyh0LGUpe3ZhciBuPVtdLmNvbmNhdChlKS5jb25jYXQodCk7ci5wdXNoKG4pfWZ1bmN0aW9uIHUoZSl7IWZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXI8ZSYmKHRbcl09W10pLHRbcl09dFtyXS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQ+PWV9KX0oZSk7Zm9yKHZhciByLGk9bih0KS5jb21wb25lbnRzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGg+MX0pLGE9MS8wLG89MDtvPGkubGVuZ3RoO28rKylmb3IodmFyIHM9MDtzPGlbb10ubGVuZ3RoO3MrKylpW29dW3NdPGEmJihhPWlbb11bc10scj1vKTt2YXIgbD1pW3JdO3JldHVybiEhbCYme2xlYXN0VmVydGV4OmEsYWRqTGlzdDp0Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybi0xPT09bC5pbmRleE9mKGUpP1tdOnQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybi0xIT09bC5pbmRleE9mKHQpfSl9KX19ZT0wO2Zvcih2YXIgaD10Lmxlbmd0aDtlPGg7KXt2YXIgZj11KGUpO2lmKGU9Zi5sZWFzdFZlcnRleCxzPWYuYWRqTGlzdCl7Zm9yKHZhciBwPTA7cDxzLmxlbmd0aDtwKyspZm9yKHZhciBkPTA7ZDxzW3BdLmxlbmd0aDtkKyspe3ZhciBnPXNbcF1bZF07YVsrZ109ITEsb1tnXT17fX1sKGUpLGUrPTF9ZWxzZSBlPWh9cmV0dXJuIHJ9fSx7XCJzdHJvbmdseS1jb25uZWN0ZWQtY29tcG9uZW50c1wiOjUxNX1dLDE2NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWVcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcykubGVuZ3RoPTAsdGhpc319LHtcIi4uLy4uL29iamVjdC92YWxpZC12YWx1ZVwiOjE5OH1dLDE2NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi9pcy1pbXBsZW1lbnRlZFwiKSgpP0FycmF5LmZyb206dChcIi4vc2hpbVwiKX0se1wiLi9pcy1pbXBsZW1lbnRlZFwiOjE2OCxcIi4vc2hpbVwiOjE2OX1dLDE2ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGUscj1BcnJheS5mcm9tO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHImJihlPXIodD1bXCJyYXpcIixcImR3YVwiXSksQm9vbGVhbihlJiZlIT09dCYmXCJkd2FcIj09PWVbMV0pKX19LHt9XSwxNjk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZXM2LXN5bWJvbFwiKS5pdGVyYXRvcixpPXQoXCIuLi8uLi9mdW5jdGlvbi9pcy1hcmd1bWVudHNcIiksYT10KFwiLi4vLi4vZnVuY3Rpb24vaXMtZnVuY3Rpb25cIiksbz10KFwiLi4vLi4vbnVtYmVyL3RvLXBvcy1pbnRlZ2VyXCIpLHM9dChcIi4uLy4uL29iamVjdC92YWxpZC1jYWxsYWJsZVwiKSxsPXQoXCIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWVcIiksYz10KFwiLi4vLi4vb2JqZWN0L2lzLXZhbHVlXCIpLHU9dChcIi4uLy4uL3N0cmluZy9pcy1zdHJpbmdcIiksaD1BcnJheS5pc0FycmF5LGY9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwscD17Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bnVsbH0sZD1PYmplY3QuZGVmaW5lUHJvcGVydHk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsZyx2LG0seSx4LGIsXyx3LGs9YXJndW1lbnRzWzFdLEE9YXJndW1lbnRzWzJdO2lmKHQ9T2JqZWN0KGwodCkpLGMoaykmJnMoayksdGhpcyYmdGhpcyE9PUFycmF5JiZhKHRoaXMpKWU9dGhpcztlbHNle2lmKCFrKXtpZihpKHQpKXJldHVybiAxIT09KG09dC5sZW5ndGgpP0FycmF5LmFwcGx5KG51bGwsdCk6KCh2PW5ldyBBcnJheSgxKSlbMF09dFswXSx2KTtpZihoKHQpKXtmb3Iodj1uZXcgQXJyYXkobT10Lmxlbmd0aCkscj0wO3I8bTsrK3IpdltyXT10W3JdO3JldHVybiB2fX12PVtdfWlmKCFoKHQpKWlmKHZvaWQgMCE9PShfPXRbbl0pKXtmb3IoeD1zKF8pLmNhbGwodCksZSYmKHY9bmV3IGUpLGI9eC5uZXh0KCkscj0wOyFiLmRvbmU7KXc9az9mLmNhbGwoayxBLGIudmFsdWUscik6Yi52YWx1ZSxlPyhwLnZhbHVlPXcsZCh2LHIscCkpOnZbcl09dyxiPXgubmV4dCgpLCsrcjttPXJ9ZWxzZSBpZih1KHQpKXtmb3IobT10Lmxlbmd0aCxlJiYodj1uZXcgZSkscj0wLGc9MDtyPG07KytyKXc9dFtyXSxyKzE8bSYmKHk9dy5jaGFyQ29kZUF0KDApKT49NTUyOTYmJnk8PTU2MzE5JiYodys9dFsrK3JdKSx3PWs/Zi5jYWxsKGssQSx3LGcpOncsZT8ocC52YWx1ZT13LGQodixnLHApKTp2W2ddPXcsKytnO209Z31pZih2b2lkIDA9PT1tKWZvcihtPW8odC5sZW5ndGgpLGUmJih2PW5ldyBlKG0pKSxyPTA7cjxtOysrcil3PWs/Zi5jYWxsKGssQSx0W3JdLHIpOnRbcl0sZT8ocC52YWx1ZT13LGQodixyLHApKTp2W3JdPXc7cmV0dXJuIGUmJihwLnZhbHVlPW51bGwsdi5sZW5ndGg9bSksdn19LHtcIi4uLy4uL2Z1bmN0aW9uL2lzLWFyZ3VtZW50c1wiOjE3MCxcIi4uLy4uL2Z1bmN0aW9uL2lzLWZ1bmN0aW9uXCI6MTcxLFwiLi4vLi4vbnVtYmVyL3RvLXBvcy1pbnRlZ2VyXCI6MTc3LFwiLi4vLi4vb2JqZWN0L2lzLXZhbHVlXCI6MTg3LFwiLi4vLi4vb2JqZWN0L3ZhbGlkLWNhbGxhYmxlXCI6MTk2LFwiLi4vLi4vb2JqZWN0L3ZhbGlkLXZhbHVlXCI6MTk4LFwiLi4vLi4vc3RyaW5nL2lzLXN0cmluZ1wiOjIwMixcImVzNi1zeW1ib2xcIjoyMTJ9XSwxNzA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGk9bi5jYWxsKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuLmNhbGwodCk9PT1pfX0se31dLDE3MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaT1uLmNhbGwodChcIi4vbm9vcFwiKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJm4uY2FsbCh0KT09PWl9fSx7XCIuL25vb3BcIjoxNzJ9XSwxNzI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSx7fV0sMTczOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuL2lzLWltcGxlbWVudGVkXCIpKCk/TWF0aC5zaWduOnQoXCIuL3NoaW1cIil9LHtcIi4vaXMtaW1wbGVtZW50ZWRcIjoxNzQsXCIuL3NoaW1cIjoxNzV9XSwxNzQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1NYXRoLnNpZ247cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmKDE9PT10KDEwKSYmLTE9PT10KC0yMCkpfX0se31dLDE3NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD1OdW1iZXIodCksaXNOYU4odCl8fDA9PT10P3Q6dD4wPzE6LTF9fSx7fV0sMTc2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL21hdGgvc2lnblwiKSxpPU1hdGguYWJzLGE9TWF0aC5mbG9vcjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGlzTmFOKHQpPzA6MCE9PSh0PU51bWJlcih0KSkmJmlzRmluaXRlKHQpP24odCkqYShpKHQpKTp0fX0se1wiLi4vbWF0aC9zaWduXCI6MTczfV0sMTc3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vdG8taW50ZWdlclwiKSxpPU1hdGgubWF4O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSgwLG4odCkpfX0se1wiLi90by1pbnRlZ2VyXCI6MTc2fV0sMTc4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vdmFsaWQtY2FsbGFibGVcIiksaT10KFwiLi92YWxpZC12YWx1ZVwiKSxhPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLG89RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwscz1PYmplY3Qua2V5cyxsPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIsYyl7dmFyIHUsaD1hcmd1bWVudHNbMl0sZj1hcmd1bWVudHNbM107cmV0dXJuIHI9T2JqZWN0KGkocikpLG4oYyksdT1zKHIpLGYmJnUuc29ydChcImZ1bmN0aW9uXCI9PXR5cGVvZiBmP2EuY2FsbChmLHIpOnZvaWQgMCksXCJmdW5jdGlvblwiIT10eXBlb2YgdCYmKHQ9dVt0XSksby5jYWxsKHQsdSxmdW5jdGlvbih0LG4pe3JldHVybiBsLmNhbGwocix0KT9vLmNhbGwoYyxoLHJbdF0sdCxyLG4pOmV9KX19fSx7XCIuL3ZhbGlkLWNhbGxhYmxlXCI6MTk2LFwiLi92YWxpZC12YWx1ZVwiOjE5OH1dLDE3OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi9pcy1pbXBsZW1lbnRlZFwiKSgpP09iamVjdC5hc3NpZ246dChcIi4vc2hpbVwiKX0se1wiLi9pcy1pbXBsZW1lbnRlZFwiOjE4MCxcIi4vc2hpbVwiOjE4MX1dLDE4MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGU9T2JqZWN0LmFzc2lnbjtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYoZSh0PXtmb286XCJyYXpcIn0se2JhcjpcImR3YVwifSx7dHJ6eTpcInRyenlcIn0pLHQuZm9vK3QuYmFyK3QudHJ6eT09PVwicmF6ZHdhdHJ6eVwiKX19LHt9XSwxODE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4va2V5c1wiKSxpPXQoXCIuLi92YWxpZC12YWx1ZVwiKSxhPU1hdGgubWF4O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG8scyxsPWEoYXJndW1lbnRzLmxlbmd0aCwyKTtmb3IodD1PYmplY3QoaSh0KSkscz1mdW5jdGlvbihuKXt0cnl7dFtuXT1lW25dfWNhdGNoKHQpe3J8fChyPXQpfX0sbz0xO288bDsrK28pZT1hcmd1bWVudHNbb10sbihlKS5mb3JFYWNoKHMpO2lmKHZvaWQgMCE9PXIpdGhyb3cgcjtyZXR1cm4gdH19LHtcIi4uL2tleXNcIjoxODgsXCIuLi92YWxpZC12YWx1ZVwiOjE5OH1dLDE4MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9hcnJheS9mcm9tXCIpLGk9dChcIi4vYXNzaWduXCIpLGE9dChcIi4vdmFsaWQtdmFsdWVcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdChhKHQpKSxyPWFyZ3VtZW50c1sxXSxvPU9iamVjdChhcmd1bWVudHNbMl0pO2lmKGUhPT10JiYhcilyZXR1cm4gZTt2YXIgcz17fTtyZXR1cm4gcj9uKHIsZnVuY3Rpb24oZSl7KG8uZW5zdXJlfHxlIGluIHQpJiYoc1tlXT10W2VdKX0pOmkocyx0KSxzfX0se1wiLi4vYXJyYXkvZnJvbVwiOjE2NyxcIi4vYXNzaWduXCI6MTc5LFwiLi92YWxpZC12YWx1ZVwiOjE5OH1dLDE4MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuLGksYSxvLHM9T2JqZWN0LmNyZWF0ZTt0KFwiLi9zZXQtcHJvdG90eXBlLW9mL2lzLWltcGxlbWVudGVkXCIpKCl8fChuPXQoXCIuL3NldC1wcm90b3R5cGUtb2Yvc2hpbVwiKSksZS5leHBvcnRzPW4/MSE9PW4ubGV2ZWw/czooaT17fSxhPXt9LG89e2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0sT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoT2JqZWN0LnByb3RvdHlwZSkuZm9yRWFjaChmdW5jdGlvbih0KXthW3RdPVwiX19wcm90b19fXCIhPT10P286e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhpLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLFwibnVsbFBvbHlmaWxsXCIse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLHZhbHVlOml9KSxmdW5jdGlvbih0LGUpe3JldHVybiBzKG51bGw9PT10P2k6dCxlKX0pOnN9LHtcIi4vc2V0LXByb3RvdHlwZS1vZi9pcy1pbXBsZW1lbnRlZFwiOjE5NCxcIi4vc2V0LXByb3RvdHlwZS1vZi9zaGltXCI6MTk1fV0sMTg0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuL19pdGVyYXRlXCIpKFwiZm9yRWFjaFwiKX0se1wiLi9faXRlcmF0ZVwiOjE3OH1dLDE4NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0fX0se31dLDE4NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2lzLXZhbHVlXCIpLGk9e2Z1bmN0aW9uOiEwLG9iamVjdDohMH07ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQpJiZpW3R5cGVvZiB0XXx8ITF9fSx7XCIuL2lzLXZhbHVlXCI6MTg3fV0sMTg3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2Z1bmN0aW9uL25vb3BcIikoKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1uJiZudWxsIT09dH19LHtcIi4uL2Z1bmN0aW9uL25vb3BcIjoxNzJ9XSwxODg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4vaXMtaW1wbGVtZW50ZWRcIikoKT9PYmplY3Qua2V5czp0KFwiLi9zaGltXCIpfSx7XCIuL2lzLWltcGxlbWVudGVkXCI6MTg5LFwiLi9zaGltXCI6MTkwfV0sMTg5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3Qua2V5cyhcInByaW1pdGl2ZVwiKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19fSx7fV0sMTkwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2lzLXZhbHVlXCIpLGk9T2JqZWN0LmtleXM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKG4odCk/T2JqZWN0KHQpOnQpfX0se1wiLi4vaXMtdmFsdWVcIjoxODd9XSwxOTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi92YWxpZC1jYWxsYWJsZVwiKSxpPXQoXCIuL2Zvci1lYWNoXCIpLGE9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e30sbz1hcmd1bWVudHNbMl07cmV0dXJuIG4oZSksaSh0LGZ1bmN0aW9uKHQsbixpLHMpe3Jbbl09YS5jYWxsKGUsbyx0LG4saSxzKX0pLHJ9fSx7XCIuL2Zvci1lYWNoXCI6MTg0LFwiLi92YWxpZC1jYWxsYWJsZVwiOjE5Nn1dLDE5MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2lzLXZhbHVlXCIpLGk9QXJyYXkucHJvdG90eXBlLmZvckVhY2gsYT1PYmplY3QuY3JlYXRlO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1hKG51bGwpO3JldHVybiBpLmNhbGwoYXJndW1lbnRzLGZ1bmN0aW9uKHQpe24odCkmJmZ1bmN0aW9uKHQsZSl7dmFyIHI7Zm9yKHIgaW4gdCllW3JdPXRbcl19KE9iamVjdCh0KSxlKX0pLGV9fSx7XCIuL2lzLXZhbHVlXCI6MTg3fV0sMTkzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuL2lzLWltcGxlbWVudGVkXCIpKCk/T2JqZWN0LnNldFByb3RvdHlwZU9mOnQoXCIuL3NoaW1cIil9LHtcIi4vaXMtaW1wbGVtZW50ZWRcIjoxOTQsXCIuL3NoaW1cIjoxOTV9XSwxOTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1PYmplY3QuY3JlYXRlLGk9T2JqZWN0LmdldFByb3RvdHlwZU9mLGE9e307ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LnNldFByb3RvdHlwZU9mLGU9YXJndW1lbnRzWzBdfHxuO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJmkodChlKG51bGwpLGEpKT09PWF9fSx7fV0sMTk1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saSxhLG8scz10KFwiLi4vaXMtb2JqZWN0XCIpLGw9dChcIi4uL3ZhbGlkLXZhbHVlXCIpLGM9T2JqZWN0LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mLHU9T2JqZWN0LmRlZmluZVByb3BlcnR5LGg9e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH07bj1mdW5jdGlvbih0LGUpe2lmKGwodCksbnVsbD09PWV8fHMoZSkpcmV0dXJuIHQ7dGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb3RvdHlwZSBtdXN0IGJlIG51bGwgb3IgYW4gb2JqZWN0XCIpfSxlLmV4cG9ydHM9KGk9ZnVuY3Rpb24oKXt2YXIgdCxlPU9iamVjdC5jcmVhdGUobnVsbCkscj17fSxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LnByb3RvdHlwZSxcIl9fcHJvdG9fX1wiKTtpZihuKXt0cnl7KHQ9bi5zZXQpLmNhbGwoZSxyKX1jYXRjaCh0KXt9aWYoT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09cilyZXR1cm57c2V0OnQsbGV2ZWw6Mn19cmV0dXJuIGUuX19wcm90b19fPXIsT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09cj97bGV2ZWw6Mn06KChlPXt9KS5fX3Byb3RvX189cixPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1yJiZ7bGV2ZWw6MX0pfSgpKT8oMj09PWkubGV2ZWw/aS5zZXQ/KG89aS5zZXQsYT1mdW5jdGlvbih0LGUpe3JldHVybiBvLmNhbGwobih0LGUpLGUpLHR9KTphPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxlKS5fX3Byb3RvX189ZSx0fTphPWZ1bmN0aW9uIHQoZSxyKXt2YXIgaTtyZXR1cm4gbihlLHIpLChpPWMuY2FsbCh0Lm51bGxQb2x5ZmlsbCxlKSkmJmRlbGV0ZSB0Lm51bGxQb2x5ZmlsbC5fX3Byb3RvX18sbnVsbD09PXImJihyPXQubnVsbFBvbHlmaWxsKSxlLl9fcHJvdG9fXz1yLGkmJnUodC5udWxsUG9seWZpbGwsXCJfX3Byb3RvX19cIixoKSxlfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxcImxldmVsXCIse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLHZhbHVlOmkubGV2ZWx9KSk6bnVsbCx0KFwiLi4vY3JlYXRlXCIpfSx7XCIuLi9jcmVhdGVcIjoxODMsXCIuLi9pcy1vYmplY3RcIjoxODYsXCIuLi92YWxpZC12YWx1ZVwiOjE5OH1dLDE5NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYSBmdW5jdGlvblwiKTtyZXR1cm4gdH19LHt9XSwxOTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9pcy1vYmplY3RcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFuKHQpKXRocm93IG5ldyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYW4gT2JqZWN0XCIpO3JldHVybiB0fX0se1wiLi9pcy1vYmplY3RcIjoxODZ9XSwxOTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9pcy12YWx1ZVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgbnVsbCBvciB1bmRlZmluZWRcIik7cmV0dXJuIHR9fSx7XCIuL2lzLXZhbHVlXCI6MTg3fV0sMTk5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuL2lzLWltcGxlbWVudGVkXCIpKCk/U3RyaW5nLnByb3RvdHlwZS5jb250YWluczp0KFwiLi9zaGltXCIpfSx7XCIuL2lzLWltcGxlbWVudGVkXCI6MjAwLFwiLi9zaGltXCI6MjAxfV0sMjAwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49XCJyYXpkd2F0cnp5XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2Ygbi5jb250YWlucyYmKCEwPT09bi5jb250YWlucyhcImR3YVwiKSYmITE9PT1uLmNvbnRhaW5zKFwiZm9vXCIpKX19LHt9XSwyMDE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1TdHJpbmcucHJvdG90eXBlLmluZGV4T2Y7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuLmNhbGwodGhpcyx0LGFyZ3VtZW50c1sxXSk+LTF9fSx7fV0sMjAyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxpPW4uY2FsbChcIlwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHR8fHQmJlwib2JqZWN0XCI9PXR5cGVvZiB0JiYodCBpbnN0YW5jZW9mIFN0cmluZ3x8bi5jYWxsKHQpPT09aSl8fCExfX0se31dLDIwMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCksaT1NYXRoLnJhbmRvbTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdDtkb3t0PWkoKS50b1N0cmluZygzNikuc2xpY2UoMil9d2hpbGUoblt0XSk7cmV0dXJuIHR9fSx7fV0sMjA0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saT10KFwiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZlwiKSxhPXQoXCJlczUtZXh0L3N0cmluZy8jL2NvbnRhaW5zXCIpLG89dChcImRcIikscz10KFwiZXM2LXN5bWJvbFwiKSxsPXQoXCIuL1wiKSxjPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtuPWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3J1wiKTtsLmNhbGwodGhpcyx0KSxlPWU/YS5jYWxsKGUsXCJrZXkrdmFsdWVcIik/XCJrZXkrdmFsdWVcIjphLmNhbGwoZSxcImtleVwiKT9cImtleVwiOlwidmFsdWVcIjpcInZhbHVlXCIsYyh0aGlzLFwiX19raW5kX19cIixvKFwiXCIsZSkpfSxpJiZpKG4sbCksZGVsZXRlIG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobC5wcm90b3R5cGUse19yZXNvbHZlOm8oZnVuY3Rpb24odCl7cmV0dXJuXCJ2YWx1ZVwiPT09dGhpcy5fX2tpbmRfXz90aGlzLl9fbGlzdF9fW3RdOlwia2V5K3ZhbHVlXCI9PT10aGlzLl9fa2luZF9fP1t0LHRoaXMuX19saXN0X19bdF1dOnR9KX0pLGMobi5wcm90b3R5cGUscy50b1N0cmluZ1RhZyxvKFwiY1wiLFwiQXJyYXkgSXRlcmF0b3JcIikpfSx7XCIuL1wiOjIwNyxkOjE0MixcImVzNS1leHQvb2JqZWN0L3NldC1wcm90b3R5cGUtb2ZcIjoxOTMsXCJlczUtZXh0L3N0cmluZy8jL2NvbnRhaW5zXCI6MTk5LFwiZXM2LXN5bWJvbFwiOjIxMn1dLDIwNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50c1wiKSxpPXQoXCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZVwiKSxhPXQoXCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmdcIiksbz10KFwiLi9nZXRcIikscz1BcnJheS5pc0FycmF5LGw9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsYz1BcnJheS5wcm90b3R5cGUuc29tZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcix1LGgsZixwLGQsZyx2LG09YXJndW1lbnRzWzJdO2lmKHModCl8fG4odCk/cj1cImFycmF5XCI6YSh0KT9yPVwic3RyaW5nXCI6dD1vKHQpLGkoZSksaD1mdW5jdGlvbigpe2Y9ITB9LFwiYXJyYXlcIiE9PXIpaWYoXCJzdHJpbmdcIiE9PXIpZm9yKHU9dC5uZXh0KCk7IXUuZG9uZTspe2lmKGwuY2FsbChlLG0sdS52YWx1ZSxoKSxmKXJldHVybjt1PXQubmV4dCgpfWVsc2UgZm9yKGQ9dC5sZW5ndGgscD0wO3A8ZCYmKGc9dFtwXSxwKzE8ZCYmKHY9Zy5jaGFyQ29kZUF0KDApKT49NTUyOTYmJnY8PTU2MzE5JiYoZys9dFsrK3BdKSxsLmNhbGwoZSxtLGcsaCksIWYpOysrcCk7ZWxzZSBjLmNhbGwodCxmdW5jdGlvbih0KXtyZXR1cm4gbC5jYWxsKGUsbSx0LGgpLGZ9KX19LHtcIi4vZ2V0XCI6MjA2LFwiZXM1LWV4dC9mdW5jdGlvbi9pcy1hcmd1bWVudHNcIjoxNzAsXCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZVwiOjE5NixcImVzNS1leHQvc3RyaW5nL2lzLXN0cmluZ1wiOjIwMn1dLDIwNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50c1wiKSxpPXQoXCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmdcIiksYT10KFwiLi9hcnJheVwiKSxvPXQoXCIuL3N0cmluZ1wiKSxzPXQoXCIuL3ZhbGlkLWl0ZXJhYmxlXCIpLGw9dChcImVzNi1zeW1ib2xcIikuaXRlcmF0b3I7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHModClbbF0/dFtsXSgpOm4odCk/bmV3IGEodCk6aSh0KT9uZXcgbyh0KTpuZXcgYSh0KX19LHtcIi4vYXJyYXlcIjoyMDQsXCIuL3N0cmluZ1wiOjIwOSxcIi4vdmFsaWQtaXRlcmFibGVcIjoyMTAsXCJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50c1wiOjE3MCxcImVzNS1leHQvc3RyaW5nL2lzLXN0cmluZ1wiOjIwMixcImVzNi1zeW1ib2xcIjoyMTJ9XSwyMDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbixpPXQoXCJlczUtZXh0L2FycmF5LyMvY2xlYXJcIiksYT10KFwiZXM1LWV4dC9vYmplY3QvYXNzaWduXCIpLG89dChcImVzNS1leHQvb2JqZWN0L3ZhbGlkLWNhbGxhYmxlXCIpLHM9dChcImVzNS1leHQvb2JqZWN0L3ZhbGlkLXZhbHVlXCIpLGw9dChcImRcIiksYz10KFwiZC9hdXRvLWJpbmRcIiksdT10KFwiZXM2LXN5bWJvbFwiKSxoPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxmPU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzO2UuZXhwb3J0cz1uPWZ1bmN0aW9uKHQsZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgbikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnXCIpO2YodGhpcyx7X19saXN0X186bChcIndcIixzKHQpKSxfX2NvbnRleHRfXzpsKFwid1wiLGUpLF9fbmV4dEluZGV4X186bChcIndcIiwwKX0pLGUmJihvKGUub24pLGUub24oXCJfYWRkXCIsdGhpcy5fb25BZGQpLGUub24oXCJfZGVsZXRlXCIsdGhpcy5fb25EZWxldGUpLGUub24oXCJfY2xlYXJcIix0aGlzLl9vbkNsZWFyKSl9LGRlbGV0ZSBuLnByb3RvdHlwZS5jb25zdHJ1Y3RvcixmKG4ucHJvdG90eXBlLGEoe19uZXh0OmwoZnVuY3Rpb24oKXt2YXIgdDtpZih0aGlzLl9fbGlzdF9fKXJldHVybiB0aGlzLl9fcmVkb19fJiZ2b2lkIDAhPT0odD10aGlzLl9fcmVkb19fLnNoaWZ0KCkpP3Q6dGhpcy5fX25leHRJbmRleF9fPHRoaXMuX19saXN0X18ubGVuZ3RoP3RoaXMuX19uZXh0SW5kZXhfXysrOnZvaWQgdGhpcy5fdW5CaW5kKCl9KSxuZXh0OmwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlYXRlUmVzdWx0KHRoaXMuX25leHQoKSl9KSxfY3JlYXRlUmVzdWx0OmwoZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/e2RvbmU6ITAsdmFsdWU6dm9pZCAwfTp7ZG9uZTohMSx2YWx1ZTp0aGlzLl9yZXNvbHZlKHQpfX0pLF9yZXNvbHZlOmwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX19saXN0X19bdF19KSxfdW5CaW5kOmwoZnVuY3Rpb24oKXt0aGlzLl9fbGlzdF9fPW51bGwsZGVsZXRlIHRoaXMuX19yZWRvX18sdGhpcy5fX2NvbnRleHRfXyYmKHRoaXMuX19jb250ZXh0X18ub2ZmKFwiX2FkZFwiLHRoaXMuX29uQWRkKSx0aGlzLl9fY29udGV4dF9fLm9mZihcIl9kZWxldGVcIix0aGlzLl9vbkRlbGV0ZSksdGhpcy5fX2NvbnRleHRfXy5vZmYoXCJfY2xlYXJcIix0aGlzLl9vbkNsZWFyKSx0aGlzLl9fY29udGV4dF9fPW51bGwpfSksdG9TdHJpbmc6bChmdW5jdGlvbigpe3JldHVyblwiW29iamVjdCBcIisodGhpc1t1LnRvU3RyaW5nVGFnXXx8XCJPYmplY3RcIikrXCJdXCJ9KX0sYyh7X29uQWRkOmwoZnVuY3Rpb24odCl7dD49dGhpcy5fX25leHRJbmRleF9ffHwoKyt0aGlzLl9fbmV4dEluZGV4X18sdGhpcy5fX3JlZG9fXz8odGhpcy5fX3JlZG9fXy5mb3JFYWNoKGZ1bmN0aW9uKGUscil7ZT49dCYmKHRoaXMuX19yZWRvX19bcl09KytlKX0sdGhpcyksdGhpcy5fX3JlZG9fXy5wdXNoKHQpKTpoKHRoaXMsXCJfX3JlZG9fX1wiLGwoXCJjXCIsW3RdKSkpfSksX29uRGVsZXRlOmwoZnVuY3Rpb24odCl7dmFyIGU7dD49dGhpcy5fX25leHRJbmRleF9ffHwoLS10aGlzLl9fbmV4dEluZGV4X18sdGhpcy5fX3JlZG9fXyYmKC0xIT09KGU9dGhpcy5fX3JlZG9fXy5pbmRleE9mKHQpKSYmdGhpcy5fX3JlZG9fXy5zcGxpY2UoZSwxKSx0aGlzLl9fcmVkb19fLmZvckVhY2goZnVuY3Rpb24oZSxyKXtlPnQmJih0aGlzLl9fcmVkb19fW3JdPS0tZSl9LHRoaXMpKSl9KSxfb25DbGVhcjpsKGZ1bmN0aW9uKCl7dGhpcy5fX3JlZG9fXyYmaS5jYWxsKHRoaXMuX19yZWRvX18pLHRoaXMuX19uZXh0SW5kZXhfXz0wfSl9KSkpLGgobi5wcm90b3R5cGUsdS5pdGVyYXRvcixsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSl9LHtkOjE0MixcImQvYXV0by1iaW5kXCI6MTQxLFwiZXM1LWV4dC9hcnJheS8jL2NsZWFyXCI6MTY2LFwiZXM1LWV4dC9vYmplY3QvYXNzaWduXCI6MTc5LFwiZXM1LWV4dC9vYmplY3QvdmFsaWQtY2FsbGFibGVcIjoxOTYsXCJlczUtZXh0L29iamVjdC92YWxpZC12YWx1ZVwiOjE5OCxcImVzNi1zeW1ib2xcIjoyMTJ9XSwyMDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZXM1LWV4dC9mdW5jdGlvbi9pcy1hcmd1bWVudHNcIiksaT10KFwiZXM1LWV4dC9vYmplY3QvaXMtdmFsdWVcIiksYT10KFwiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nXCIpLG89dChcImVzNi1zeW1ib2xcIikuaXRlcmF0b3Iscz1BcnJheS5pc0FycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hIWkodCkmJighIXModCl8fCghIWEodCl8fCghIW4odCl8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHRbb10pKSl9fSx7XCJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50c1wiOjE3MCxcImVzNS1leHQvb2JqZWN0L2lzLXZhbHVlXCI6MTg3LFwiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nXCI6MjAyLFwiZXM2LXN5bWJvbFwiOjIxMn1dLDIwOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuLGk9dChcImVzNS1leHQvb2JqZWN0L3NldC1wcm90b3R5cGUtb2ZcIiksYT10KFwiZFwiKSxvPXQoXCJlczYtc3ltYm9sXCIpLHM9dChcIi4vXCIpLGw9T2JqZWN0LmRlZmluZVByb3BlcnR5O249ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3J1wiKTt0PVN0cmluZyh0KSxzLmNhbGwodGhpcyx0KSxsKHRoaXMsXCJfX2xlbmd0aF9fXCIsYShcIlwiLHQubGVuZ3RoKSl9LGkmJmkobixzKSxkZWxldGUgbi5wcm90b3R5cGUuY29uc3RydWN0b3Isbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShzLnByb3RvdHlwZSx7X25leHQ6YShmdW5jdGlvbigpe2lmKHRoaXMuX19saXN0X18pcmV0dXJuIHRoaXMuX19uZXh0SW5kZXhfXzx0aGlzLl9fbGVuZ3RoX18/dGhpcy5fX25leHRJbmRleF9fKys6dm9pZCB0aGlzLl91bkJpbmQoKX0pLF9yZXNvbHZlOmEoZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLl9fbGlzdF9fW3RdO3JldHVybiB0aGlzLl9fbmV4dEluZGV4X189PT10aGlzLl9fbGVuZ3RoX18/cjooZT1yLmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmZTw9NTYzMTk/cit0aGlzLl9fbGlzdF9fW3RoaXMuX19uZXh0SW5kZXhfXysrXTpyfSl9KSxsKG4ucHJvdG90eXBlLG8udG9TdHJpbmdUYWcsYShcImNcIixcIlN0cmluZyBJdGVyYXRvclwiKSl9LHtcIi4vXCI6MjA3LGQ6MTQyLFwiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZlwiOjE5MyxcImVzNi1zeW1ib2xcIjoyMTJ9XSwyMTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9pcy1pdGVyYWJsZVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBpdGVyYWJsZVwiKTtyZXR1cm4gdH19LHtcIi4vaXMtaXRlcmFibGVcIjoyMDh9XSwyMTE6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24obixpKXshZnVuY3Rpb24odCxuKXtcIm9iamVjdFwiPT10eXBlb2YgciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGU/ZS5leHBvcnRzPW4oKTp0LkVTNlByb21pc2U9bigpfSh0aGlzLGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZSh0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0fXZhciByPUFycmF5LmlzQXJyYXk/QXJyYXkuaXNBcnJheTpmdW5jdGlvbih0KXtyZXR1cm5cIltvYmplY3QgQXJyYXldXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9LGE9MCxvPXZvaWQgMCxzPXZvaWQgMCxsPWZ1bmN0aW9uKHQsZSl7Z1thXT10LGdbYSsxXT1lLDI9PT0oYSs9MikmJihzP3Modik6XygpKX07dmFyIGM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dm9pZCAwLHU9Y3x8e30saD11Lk11dGF0aW9uT2JzZXJ2ZXJ8fHUuV2ViS2l0TXV0YXRpb25PYnNlcnZlcixmPVwidW5kZWZpbmVkXCI9PXR5cGVvZiBzZWxmJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbiYmXCJbb2JqZWN0IHByb2Nlc3NdXCI9PT17fS50b1N0cmluZy5jYWxsKG4pLHA9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5JiZcInVuZGVmaW5lZFwiIT10eXBlb2YgaW1wb3J0U2NyaXB0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIE1lc3NhZ2VDaGFubmVsO2Z1bmN0aW9uIGQoKXt2YXIgdD1zZXRUaW1lb3V0O3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHYsMSl9fXZhciBnPW5ldyBBcnJheSgxZTMpO2Z1bmN0aW9uIHYoKXtmb3IodmFyIHQ9MDt0PGE7dCs9Mil7KDAsZ1t0XSkoZ1t0KzFdKSxnW3RdPXZvaWQgMCxnW3QrMV09dm9pZCAwfWE9MH12YXIgbSx5LHgsYixfPXZvaWQgMDtmdW5jdGlvbiB3KHQsZSl7dmFyIHI9YXJndW1lbnRzLG49dGhpcyxpPW5ldyB0aGlzLmNvbnN0cnVjdG9yKFQpO3ZvaWQgMD09PWlbQV0mJlUoaSk7dmFyIGEsbz1uLl9zdGF0ZTtyZXR1cm4gbz8oYT1yW28tMV0sbChmdW5jdGlvbigpe3JldHVybiBqKG8saSxhLG4uX3Jlc3VsdCl9KSk6UihuLGksdCxlKSxpfWZ1bmN0aW9uIGsodCl7aWYodCYmXCJvYmplY3RcIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I9PT10aGlzKXJldHVybiB0O3ZhciBlPW5ldyB0aGlzKFQpO3JldHVybiBPKGUsdCksZX1mP189ZnVuY3Rpb24oKXtyZXR1cm4gbi5uZXh0VGljayh2KX06aD8oeT0wLHg9bmV3IGgodiksYj1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKSx4Lm9ic2VydmUoYix7Y2hhcmFjdGVyRGF0YTohMH0pLF89ZnVuY3Rpb24oKXtiLmRhdGE9eT0rK3klMn0pOnA/KChtPW5ldyBNZXNzYWdlQ2hhbm5lbCkucG9ydDEub25tZXNzYWdlPXYsXz1mdW5jdGlvbigpe3JldHVybiBtLnBvcnQyLnBvc3RNZXNzYWdlKDApfSk6Xz12b2lkIDA9PT1jJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2Z1bmN0aW9uKCl7dHJ5e3ZhciBlPXQoXCJ2ZXJ0eFwiKTtyZXR1cm4gbz1lLnJ1bk9uTG9vcHx8ZS5ydW5PbkNvbnRleHQsZnVuY3Rpb24oKXtvKHYpfX1jYXRjaCh0KXtyZXR1cm4gZCgpfX0oKTpkKCk7dmFyIEE9TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDE2KTtmdW5jdGlvbiBUKCl7fXZhciBNPXZvaWQgMCxTPTEsRT0yLEM9bmV3IEI7ZnVuY3Rpb24gTCh0KXt0cnl7cmV0dXJuIHQudGhlbn1jYXRjaCh0KXtyZXR1cm4gQy5lcnJvcj10LEN9fWZ1bmN0aW9uIHoodCxyLG4pe3IuY29uc3RydWN0b3I9PT10LmNvbnN0cnVjdG9yJiZuPT09dyYmci5jb25zdHJ1Y3Rvci5yZXNvbHZlPT09az9mdW5jdGlvbih0LGUpe2UuX3N0YXRlPT09Uz9EKHQsZS5fcmVzdWx0KTplLl9zdGF0ZT09PUU/UCh0LGUuX3Jlc3VsdCk6UihlLHZvaWQgMCxmdW5jdGlvbihlKXtyZXR1cm4gTyh0LGUpfSxmdW5jdGlvbihlKXtyZXR1cm4gUCh0LGUpfSl9KHQscik6bj09PUM/UCh0LEMuZXJyb3IpOnZvaWQgMD09PW4/RCh0LHIpOmUobik/ZnVuY3Rpb24odCxlLHIpe2woZnVuY3Rpb24odCl7dmFyIG49ITEsaT1mdW5jdGlvbih0LGUscixuKXt0cnl7dC5jYWxsKGUscixuKX1jYXRjaCh0KXtyZXR1cm4gdH19KHIsZSxmdW5jdGlvbihyKXtufHwobj0hMCxlIT09cj9PKHQscik6RCh0LHIpKX0sZnVuY3Rpb24oZSl7bnx8KG49ITAsUCh0LGUpKX0sdC5fbGFiZWwpOyFuJiZpJiYobj0hMCxQKHQsaSkpfSx0KX0odCxyLG4pOkQodCxyKX1mdW5jdGlvbiBPKHQsZSl7dmFyIHI7dD09PWU/UCh0LG5ldyBUeXBlRXJyb3IoXCJZb3UgY2Fubm90IHJlc29sdmUgYSBwcm9taXNlIHdpdGggaXRzZWxmXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZihyPWUpfHxcIm9iamVjdFwiPT10eXBlb2YgciYmbnVsbCE9PXI/eih0LGUsTChlKSk6RCh0LGUpfWZ1bmN0aW9uIEkodCl7dC5fb25lcnJvciYmdC5fb25lcnJvcih0Ll9yZXN1bHQpLEYodCl9ZnVuY3Rpb24gRCh0LGUpe3QuX3N0YXRlPT09TSYmKHQuX3Jlc3VsdD1lLHQuX3N0YXRlPVMsMCE9PXQuX3N1YnNjcmliZXJzLmxlbmd0aCYmbChGLHQpKX1mdW5jdGlvbiBQKHQsZSl7dC5fc3RhdGU9PT1NJiYodC5fc3RhdGU9RSx0Ll9yZXN1bHQ9ZSxsKEksdCkpfWZ1bmN0aW9uIFIodCxlLHIsbil7dmFyIGk9dC5fc3Vic2NyaWJlcnMsYT1pLmxlbmd0aDt0Ll9vbmVycm9yPW51bGwsaVthXT1lLGlbYStTXT1yLGlbYStFXT1uLDA9PT1hJiZ0Ll9zdGF0ZSYmbChGLHQpfWZ1bmN0aW9uIEYodCl7dmFyIGU9dC5fc3Vic2NyaWJlcnMscj10Ll9zdGF0ZTtpZigwIT09ZS5sZW5ndGgpe2Zvcih2YXIgbj12b2lkIDAsaT12b2lkIDAsYT10Ll9yZXN1bHQsbz0wO288ZS5sZW5ndGg7bys9MyluPWVbb10saT1lW28rcl0sbj9qKHIsbixpLGEpOmkoYSk7dC5fc3Vic2NyaWJlcnMubGVuZ3RoPTB9fWZ1bmN0aW9uIEIoKXt0aGlzLmVycm9yPW51bGx9dmFyIE49bmV3IEI7ZnVuY3Rpb24gaih0LHIsbixpKXt2YXIgYT1lKG4pLG89dm9pZCAwLHM9dm9pZCAwLGw9dm9pZCAwLGM9dm9pZCAwO2lmKGEpe2lmKChvPWZ1bmN0aW9uKHQsZSl7dHJ5e3JldHVybiB0KGUpfWNhdGNoKHQpe3JldHVybiBOLmVycm9yPXQsTn19KG4saSkpPT09Tj8oYz0hMCxzPW8uZXJyb3Isbz1udWxsKTpsPSEwLHI9PT1vKXJldHVybiB2b2lkIFAocixuZXcgVHlwZUVycm9yKFwiQSBwcm9taXNlcyBjYWxsYmFjayBjYW5ub3QgcmV0dXJuIHRoYXQgc2FtZSBwcm9taXNlLlwiKSl9ZWxzZSBvPWksbD0hMDtyLl9zdGF0ZSE9PU18fChhJiZsP08ocixvKTpjP1AocixzKTp0PT09Uz9EKHIsbyk6dD09PUUmJlAocixvKSl9dmFyIFY9MDtmdW5jdGlvbiBVKHQpe3RbQV09VisrLHQuX3N0YXRlPXZvaWQgMCx0Ll9yZXN1bHQ9dm9pZCAwLHQuX3N1YnNjcmliZXJzPVtdfWZ1bmN0aW9uIHEodCxlKXt0aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yPXQsdGhpcy5wcm9taXNlPW5ldyB0KFQpLHRoaXMucHJvbWlzZVtBXXx8VSh0aGlzLnByb21pc2UpLHIoZSk/KHRoaXMuX2lucHV0PWUsdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5fcmVtYWluaW5nPWUubGVuZ3RoLHRoaXMuX3Jlc3VsdD1uZXcgQXJyYXkodGhpcy5sZW5ndGgpLDA9PT10aGlzLmxlbmd0aD9EKHRoaXMucHJvbWlzZSx0aGlzLl9yZXN1bHQpOih0aGlzLmxlbmd0aD10aGlzLmxlbmd0aHx8MCx0aGlzLl9lbnVtZXJhdGUoKSwwPT09dGhpcy5fcmVtYWluaW5nJiZEKHRoaXMucHJvbWlzZSx0aGlzLl9yZXN1bHQpKSk6UCh0aGlzLnByb21pc2UsbmV3IEVycm9yKFwiQXJyYXkgTWV0aG9kcyBtdXN0IGJlIHByb3ZpZGVkIGFuIEFycmF5XCIpKX1mdW5jdGlvbiBIKHQpe3RoaXNbQV09VisrLHRoaXMuX3Jlc3VsdD10aGlzLl9zdGF0ZT12b2lkIDAsdGhpcy5fc3Vic2NyaWJlcnM9W10sVCE9PXQmJihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJZb3UgbXVzdCBwYXNzIGEgcmVzb2x2ZXIgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBwcm9taXNlIGNvbnN0cnVjdG9yXCIpfSgpLHRoaXMgaW5zdGFuY2VvZiBIP2Z1bmN0aW9uKHQsZSl7dHJ5e2UoZnVuY3Rpb24oZSl7Tyh0LGUpfSxmdW5jdGlvbihlKXtQKHQsZSl9KX1jYXRjaChlKXtQKHQsZSl9fSh0aGlzLHQpOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Byb21pc2UnOiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvciwgdGhpcyBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKX0oKSl9ZnVuY3Rpb24gRygpe3ZhciB0PXZvaWQgMDtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgaSl0PWk7ZWxzZSBpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZil0PXNlbGY7ZWxzZSB0cnl7dD1GdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl9Y2F0Y2godCl7dGhyb3cgbmV3IEVycm9yKFwicG9seWZpbGwgZmFpbGVkIGJlY2F1c2UgZ2xvYmFsIG9iamVjdCBpcyB1bmF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50XCIpfXZhciBlPXQuUHJvbWlzZTtpZihlKXt2YXIgcj1udWxsO3RyeXtyPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlLnJlc29sdmUoKSl9Y2F0Y2godCl7fWlmKFwiW29iamVjdCBQcm9taXNlXVwiPT09ciYmIWUuY2FzdClyZXR1cm59dC5Qcm9taXNlPUh9cmV0dXJuIHEucHJvdG90eXBlLl9lbnVtZXJhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5sZW5ndGgsZT10aGlzLl9pbnB1dCxyPTA7dGhpcy5fc3RhdGU9PT1NJiZyPHQ7cisrKXRoaXMuX2VhY2hFbnRyeShlW3JdLHIpfSxxLnByb3RvdHlwZS5fZWFjaEVudHJ5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvcixuPXIucmVzb2x2ZTtpZihuPT09ayl7dmFyIGk9TCh0KTtpZihpPT09dyYmdC5fc3RhdGUhPT1NKXRoaXMuX3NldHRsZWRBdCh0Ll9zdGF0ZSxlLHQuX3Jlc3VsdCk7ZWxzZSBpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBpKXRoaXMuX3JlbWFpbmluZy0tLHRoaXMuX3Jlc3VsdFtlXT10O2Vsc2UgaWYocj09PUgpe3ZhciBhPW5ldyByKFQpO3ooYSx0LGkpLHRoaXMuX3dpbGxTZXR0bGVBdChhLGUpfWVsc2UgdGhpcy5fd2lsbFNldHRsZUF0KG5ldyByKGZ1bmN0aW9uKGUpe3JldHVybiBlKHQpfSksZSl9ZWxzZSB0aGlzLl93aWxsU2V0dGxlQXQobih0KSxlKX0scS5wcm90b3R5cGUuX3NldHRsZWRBdD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5wcm9taXNlO24uX3N0YXRlPT09TSYmKHRoaXMuX3JlbWFpbmluZy0tLHQ9PT1FP1AobixyKTp0aGlzLl9yZXN1bHRbZV09ciksMD09PXRoaXMuX3JlbWFpbmluZyYmRChuLHRoaXMuX3Jlc3VsdCl9LHEucHJvdG90eXBlLl93aWxsU2V0dGxlQXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzO1IodCx2b2lkIDAsZnVuY3Rpb24odCl7cmV0dXJuIHIuX3NldHRsZWRBdChTLGUsdCl9LGZ1bmN0aW9uKHQpe3JldHVybiByLl9zZXR0bGVkQXQoRSxlLHQpfSl9LEguYWxsPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcSh0aGlzLHQpLnByb21pc2V9LEgucmFjZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiByKHQpP25ldyBlKGZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXQubGVuZ3RoLGE9MDthPGk7YSsrKWUucmVzb2x2ZSh0W2FdKS50aGVuKHIsbil9KTpuZXcgZShmdW5jdGlvbih0LGUpe3JldHVybiBlKG5ldyBUeXBlRXJyb3IoXCJZb3UgbXVzdCBwYXNzIGFuIGFycmF5IHRvIHJhY2UuXCIpKX0pfSxILnJlc29sdmU9ayxILnJlamVjdD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgdGhpcyhUKTtyZXR1cm4gUChlLHQpLGV9LEguX3NldFNjaGVkdWxlcj1mdW5jdGlvbih0KXtzPXR9LEguX3NldEFzYXA9ZnVuY3Rpb24odCl7bD10fSxILl9hc2FwPWwsSC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkgsdGhlbjp3LGNhdGNoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRoZW4obnVsbCx0KX19LEcoKSxILnBvbHlmaWxsPUcsSC5Qcm9taXNlPUgsSH0pfSkuY2FsbCh0aGlzLHQoXCJfcHJvY2Vzc1wiKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se19wcm9jZXNzOjQ3NX1dLDIxMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi9pcy1pbXBsZW1lbnRlZFwiKSgpP1N5bWJvbDp0KFwiLi9wb2x5ZmlsbFwiKX0se1wiLi9pcy1pbXBsZW1lbnRlZFwiOjIxMyxcIi4vcG9seWZpbGxcIjoyMTV9XSwyMTM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17b2JqZWN0OiEwLHN5bWJvbDohMH07ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgU3ltYm9sKXJldHVybiExO3Q9U3ltYm9sKFwidGVzdCBzeW1ib2xcIik7dHJ5e1N0cmluZyh0KX1jYXRjaCh0KXtyZXR1cm4hMX1yZXR1cm4hIW5bdHlwZW9mIFN5bWJvbC5pdGVyYXRvcl0mJighIW5bdHlwZW9mIFN5bWJvbC50b1ByaW1pdGl2ZV0mJiEhblt0eXBlb2YgU3ltYm9sLnRvU3RyaW5nVGFnXSl9fSx7fV0sMjE0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEhdCYmKFwic3ltYm9sXCI9PXR5cGVvZiB0fHwhIXQuY29uc3RydWN0b3ImJihcIlN5bWJvbFwiPT09dC5jb25zdHJ1Y3Rvci5uYW1lJiZcIlN5bWJvbFwiPT09dFt0LmNvbnN0cnVjdG9yLnRvU3RyaW5nVGFnXSkpfX0se31dLDIxNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuLGksYSxvLHM9dChcImRcIiksbD10KFwiLi92YWxpZGF0ZS1zeW1ib2xcIiksYz1PYmplY3QuY3JlYXRlLHU9T2JqZWN0LmRlZmluZVByb3BlcnRpZXMsaD1PYmplY3QuZGVmaW5lUHJvcGVydHksZj1PYmplY3QucHJvdG90eXBlLHA9YyhudWxsKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wpe249U3ltYm9sO3RyeXtTdHJpbmcobigpKSxvPSEwfWNhdGNoKHQpe319dmFyIGQsZz0oZD1jKG51bGwpLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG49MDtkW3QrKG58fFwiXCIpXTspKytuO3JldHVybiBkW3QrPW58fFwiXCJdPSEwLGgoZixlPVwiQEBcIit0LHMuZ3MobnVsbCxmdW5jdGlvbih0KXtyfHwocj0hMCxoKHRoaXMsZSxzKHQpKSxyPSExKX0pKSxlfSk7YT1mdW5jdGlvbih0KXtpZih0aGlzIGluc3RhbmNlb2YgYSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yXCIpO3JldHVybiBpKHQpfSxlLmV4cG9ydHM9aT1mdW5jdGlvbiB0KGUpe3ZhciByO2lmKHRoaXMgaW5zdGFuY2VvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3JcIik7cmV0dXJuIG8/bihlKToocj1jKGEucHJvdG90eXBlKSxlPXZvaWQgMD09PWU/XCJcIjpTdHJpbmcoZSksdShyLHtfX2Rlc2NyaXB0aW9uX186cyhcIlwiLGUpLF9fbmFtZV9fOnMoXCJcIixnKGUpKX0pKX0sdShpLHtmb3I6cyhmdW5jdGlvbih0KXtyZXR1cm4gcFt0XT9wW3RdOnBbdF09aShTdHJpbmcodCkpfSksa2V5Rm9yOnMoZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGUgaW4gbCh0KSxwKWlmKHBbZV09PT10KXJldHVybiBlfSksaGFzSW5zdGFuY2U6cyhcIlwiLG4mJm4uaGFzSW5zdGFuY2V8fGkoXCJoYXNJbnN0YW5jZVwiKSksaXNDb25jYXRTcHJlYWRhYmxlOnMoXCJcIixuJiZuLmlzQ29uY2F0U3ByZWFkYWJsZXx8aShcImlzQ29uY2F0U3ByZWFkYWJsZVwiKSksaXRlcmF0b3I6cyhcIlwiLG4mJm4uaXRlcmF0b3J8fGkoXCJpdGVyYXRvclwiKSksbWF0Y2g6cyhcIlwiLG4mJm4ubWF0Y2h8fGkoXCJtYXRjaFwiKSkscmVwbGFjZTpzKFwiXCIsbiYmbi5yZXBsYWNlfHxpKFwicmVwbGFjZVwiKSksc2VhcmNoOnMoXCJcIixuJiZuLnNlYXJjaHx8aShcInNlYXJjaFwiKSksc3BlY2llczpzKFwiXCIsbiYmbi5zcGVjaWVzfHxpKFwic3BlY2llc1wiKSksc3BsaXQ6cyhcIlwiLG4mJm4uc3BsaXR8fGkoXCJzcGxpdFwiKSksdG9QcmltaXRpdmU6cyhcIlwiLG4mJm4udG9QcmltaXRpdmV8fGkoXCJ0b1ByaW1pdGl2ZVwiKSksdG9TdHJpbmdUYWc6cyhcIlwiLG4mJm4udG9TdHJpbmdUYWd8fGkoXCJ0b1N0cmluZ1RhZ1wiKSksdW5zY29wYWJsZXM6cyhcIlwiLG4mJm4udW5zY29wYWJsZXN8fGkoXCJ1bnNjb3BhYmxlc1wiKSl9KSx1KGEucHJvdG90eXBlLHtjb25zdHJ1Y3RvcjpzKGkpLHRvU3RyaW5nOnMoXCJcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fbmFtZV9ffSl9KSx1KGkucHJvdG90eXBlLHt0b1N0cmluZzpzKGZ1bmN0aW9uKCl7cmV0dXJuXCJTeW1ib2wgKFwiK2wodGhpcykuX19kZXNjcmlwdGlvbl9fK1wiKVwifSksdmFsdWVPZjpzKGZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcyl9KX0pLGgoaS5wcm90b3R5cGUsaS50b1ByaW1pdGl2ZSxzKFwiXCIsZnVuY3Rpb24oKXt2YXIgdD1sKHRoaXMpO3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiB0P3Q6dC50b1N0cmluZygpfSkpLGgoaS5wcm90b3R5cGUsaS50b1N0cmluZ1RhZyxzKFwiY1wiLFwiU3ltYm9sXCIpKSxoKGEucHJvdG90eXBlLGkudG9TdHJpbmdUYWcscyhcImNcIixpLnByb3RvdHlwZVtpLnRvU3RyaW5nVGFnXSkpLGgoYS5wcm90b3R5cGUsaS50b1ByaW1pdGl2ZSxzKFwiY1wiLGkucHJvdG90eXBlW2kudG9QcmltaXRpdmVdKSl9LHtcIi4vdmFsaWRhdGUtc3ltYm9sXCI6MjE2LGQ6MTQyfV0sMjE2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vaXMtc3ltYm9sXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKHQrXCIgaXMgbm90IGEgc3ltYm9sXCIpO3JldHVybiB0fX0se1wiLi9pcy1zeW1ib2xcIjoyMTR9XSwyMTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4vaXMtaW1wbGVtZW50ZWRcIikoKT9XZWFrTWFwOnQoXCIuL3BvbHlmaWxsXCIpfSx7XCIuL2lzLWltcGxlbWVudGVkXCI6MjE4LFwiLi9wb2x5ZmlsbFwiOjIyMH1dLDIxODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGU7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgV2Vha01hcClyZXR1cm4hMTt0cnl7dD1uZXcgV2Vha01hcChbW2U9e30sXCJvbmVcIl0sW3t9LFwidHdvXCJdLFt7fSxcInRocmVlXCJdXSl9Y2F0Y2godCl7cmV0dXJuITF9cmV0dXJuXCJbb2JqZWN0IFdlYWtNYXBdXCI9PT1TdHJpbmcodCkmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnNldCYmKHQuc2V0KHt9LDEpPT09dCYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQuZGVsZXRlJiYoXCJmdW5jdGlvblwiPT10eXBlb2YgdC5oYXMmJlwib25lXCI9PT10LmdldChlKSkpKSl9fSx7fV0sMjE5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPVwiZnVuY3Rpb25cIj09dHlwZW9mIFdlYWtNYXAmJlwiW29iamVjdCBXZWFrTWFwXVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ldyBXZWFrTWFwKX0se31dLDIyMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuLGk9dChcImVzNS1leHQvb2JqZWN0L3NldC1wcm90b3R5cGUtb2ZcIiksYT10KFwiZXM1LWV4dC9vYmplY3QvdmFsaWQtb2JqZWN0XCIpLG89dChcImVzNS1leHQvb2JqZWN0L3ZhbGlkLXZhbHVlXCIpLHM9dChcImVzNS1leHQvc3RyaW5nL3JhbmRvbS11bmlxXCIpLGw9dChcImRcIiksYz10KFwiZXM2LWl0ZXJhdG9yL2dldFwiKSx1PXQoXCJlczYtaXRlcmF0b3IvZm9yLW9mXCIpLGg9dChcImVzNi1zeW1ib2xcIikudG9TdHJpbmdUYWcsZj10KFwiLi9pcy1uYXRpdmUtaW1wbGVtZW50ZWRcIikscD1BcnJheS5pc0FycmF5LGQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LGc9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSx2PU9iamVjdC5nZXRQcm90b3R5cGVPZjtlLmV4cG9ydHM9bj1mdW5jdGlvbigpe3ZhciB0LGU9YXJndW1lbnRzWzBdO2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3J1wiKTtyZXR1cm4gdD1mJiZpJiZXZWFrTWFwIT09bj9pKG5ldyBXZWFrTWFwLHYodGhpcykpOnRoaXMsbnVsbCE9ZSYmKHAoZSl8fChlPWMoZSkpKSxkKHQsXCJfX3dlYWtNYXBEYXRhX19cIixsKFwiY1wiLFwiJHdlYWtNYXAkXCIrcygpKSksZT8odShlLGZ1bmN0aW9uKGUpe28oZSksdC5zZXQoZVswXSxlWzFdKX0pLHQpOnR9LGYmJihpJiZpKG4sV2Vha01hcCksbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShXZWFrTWFwLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6bChuKX0pKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLnByb3RvdHlwZSx7ZGVsZXRlOmwoZnVuY3Rpb24odCl7cmV0dXJuISFnLmNhbGwoYSh0KSx0aGlzLl9fd2Vha01hcERhdGFfXykmJihkZWxldGUgdFt0aGlzLl9fd2Vha01hcERhdGFfX10sITApfSksZ2V0OmwoZnVuY3Rpb24odCl7aWYoZy5jYWxsKGEodCksdGhpcy5fX3dlYWtNYXBEYXRhX18pKXJldHVybiB0W3RoaXMuX193ZWFrTWFwRGF0YV9fXX0pLGhhczpsKGZ1bmN0aW9uKHQpe3JldHVybiBnLmNhbGwoYSh0KSx0aGlzLl9fd2Vha01hcERhdGFfXyl9KSxzZXQ6bChmdW5jdGlvbih0LGUpe3JldHVybiBkKGEodCksdGhpcy5fX3dlYWtNYXBEYXRhX18sbChcImNcIixlKSksdGhpc30pLHRvU3RyaW5nOmwoZnVuY3Rpb24oKXtyZXR1cm5cIltvYmplY3QgV2Vha01hcF1cIn0pfSksZChuLnByb3RvdHlwZSxoLGwoXCJjXCIsXCJXZWFrTWFwXCIpKX0se1wiLi9pcy1uYXRpdmUtaW1wbGVtZW50ZWRcIjoyMTksZDoxNDIsXCJlczUtZXh0L29iamVjdC9zZXQtcHJvdG90eXBlLW9mXCI6MTkzLFwiZXM1LWV4dC9vYmplY3QvdmFsaWQtb2JqZWN0XCI6MTk3LFwiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWVcIjoxOTgsXCJlczUtZXh0L3N0cmluZy9yYW5kb20tdW5pcVwiOjIwMyxcImVzNi1pdGVyYXRvci9mb3Itb2ZcIjoyMDUsXCJlczYtaXRlcmF0b3IvZ2V0XCI6MjA2LFwiZXM2LXN5bWJvbFwiOjIxMn1dLDIyMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZXx8MCxpPXJ8fDE7cmV0dXJuW1t0WzEyXSt0WzBdLHRbMTNdK3RbMV0sdFsxNF0rdFsyXSx0WzE1XSt0WzNdXSxbdFsxMl0tdFswXSx0WzEzXS10WzFdLHRbMTRdLXRbMl0sdFsxNV0tdFszXV0sW3RbMTJdK3RbNF0sdFsxM10rdFs1XSx0WzE0XSt0WzZdLHRbMTVdK3RbN11dLFt0WzEyXS10WzRdLHRbMTNdLXRbNV0sdFsxNF0tdFs2XSx0WzE1XS10WzddXSxbbip0WzEyXSt0WzhdLG4qdFsxM10rdFs5XSxuKnRbMTRdK3RbMTBdLG4qdFsxNV0rdFsxMV1dLFtpKnRbMTJdLXRbOF0saSp0WzEzXS10WzldLGkqdFsxNF0tdFsxMF0saSp0WzE1XS10WzExXV1dfX0se31dLDIyMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJpcy1zdHJpbmctYmxhbmtcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXR5cGVvZiB0O2lmKFwic3RyaW5nXCI9PT1lKXt2YXIgcj10O2lmKDA9PT0odD0rdCkmJm4ocikpcmV0dXJuITF9ZWxzZSBpZihcIm51bWJlclwiIT09ZSlyZXR1cm4hMTtyZXR1cm4gdC10PDF9fSx7XCJpcy1zdHJpbmctYmxhbmtcIjo0MTZ9XSwyMjM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBvKFswXSxbMF0sMCk7Y2FzZSAxOmlmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXt2YXIgbj1sKHQpO3JldHVybiBuZXcgbyhuLG4sMCl9cmV0dXJuIG5ldyBvKHQsbCh0Lmxlbmd0aCksMCk7Y2FzZSAyOmlmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXt2YXIgbj1sKHQubGVuZ3RoKTtyZXR1cm4gbmV3IG8odCxuLCtlKX1yPTA7Y2FzZSAzOmlmKHQubGVuZ3RoIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwic3RhdGUgYW5kIHZlbG9jaXR5IGxlbmd0aHMgbXVzdCBtYXRjaFwiKTtyZXR1cm4gbmV3IG8odCxlLHIpfX07dmFyIG49dChcImN1YmljLWhlcm1pdGVcIiksaT10KFwiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIik7ZnVuY3Rpb24gYSh0LGUscil7cmV0dXJuIE1hdGgubWluKGUsTWF0aC5tYXgodCxyKSl9ZnVuY3Rpb24gbyh0LGUscil7dGhpcy5kaW1lbnNpb249dC5sZW5ndGgsdGhpcy5ib3VuZHM9W25ldyBBcnJheSh0aGlzLmRpbWVuc2lvbiksbmV3IEFycmF5KHRoaXMuZGltZW5zaW9uKV07Zm9yKHZhciBuPTA7bjx0aGlzLmRpbWVuc2lvbjsrK24pdGhpcy5ib3VuZHNbMF1bbl09LTEvMCx0aGlzLmJvdW5kc1sxXVtuXT0xLzA7dGhpcy5fc3RhdGU9dC5zbGljZSgpLnJldmVyc2UoKSx0aGlzLl92ZWxvY2l0eT1lLnNsaWNlKCkucmV2ZXJzZSgpLHRoaXMuX3RpbWU9W3JdLHRoaXMuX3NjcmF0Y2g9W3Quc2xpY2UoKSx0LnNsaWNlKCksdC5zbGljZSgpLHQuc2xpY2UoKSx0LnNsaWNlKCldfXZhciBzPW8ucHJvdG90eXBlO2Z1bmN0aW9uIGwodCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0OysrcillW3JdPTA7cmV0dXJuIGV9cy5mbHVzaD1mdW5jdGlvbih0KXt2YXIgZT1pLmd0KHRoaXMuX3RpbWUsdCktMTtlPD0wfHwodGhpcy5fdGltZS5zcGxpY2UoMCxlKSx0aGlzLl9zdGF0ZS5zcGxpY2UoMCxlKnRoaXMuZGltZW5zaW9uKSx0aGlzLl92ZWxvY2l0eS5zcGxpY2UoMCxlKnRoaXMuZGltZW5zaW9uKSl9LHMuY3VydmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGltZSxyPWUubGVuZ3RoLG89aS5sZShlLHQpLHM9dGhpcy5fc2NyYXRjaFswXSxsPXRoaXMuX3N0YXRlLGM9dGhpcy5fdmVsb2NpdHksdT10aGlzLmRpbWVuc2lvbixoPXRoaXMuYm91bmRzO2lmKG88MClmb3IodmFyIGY9dS0xLHA9MDtwPHU7KytwLC0tZilzW3BdPWxbZl07ZWxzZSBpZihvPj1yLTEpe2Y9bC5sZW5ndGgtMTt2YXIgZD10LWVbci0xXTtmb3IocD0wO3A8dTsrK3AsLS1mKXNbcF09bFtmXStkKmNbZl19ZWxzZXtmPXUqKG8rMSktMTt2YXIgZz1lW29dLHY9ZVtvKzFdLWd8fDEsbT10aGlzLl9zY3JhdGNoWzFdLHk9dGhpcy5fc2NyYXRjaFsyXSx4PXRoaXMuX3NjcmF0Y2hbM10sYj10aGlzLl9zY3JhdGNoWzRdLF89ITA7Zm9yKHA9MDtwPHU7KytwLC0tZiltW3BdPWxbZl0seFtwXT1jW2ZdKnYseVtwXT1sW2YrdV0sYltwXT1jW2YrdV0qdixfPV8mJm1bcF09PT15W3BdJiZ4W3BdPT09YltwXSYmMD09PXhbcF07aWYoXylmb3IocD0wO3A8dTsrK3Apc1twXT1tW3BdO2Vsc2UgbihtLHgseSxiLCh0LWcpL3Yscyl9dmFyIHc9aFswXSxrPWhbMV07Zm9yKHA9MDtwPHU7KytwKXNbcF09YSh3W3BdLGtbcF0sc1twXSk7cmV0dXJuIHN9LHMuZGN1cnZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbWUscj1lLmxlbmd0aCxhPWkubGUoZSx0KSxvPXRoaXMuX3NjcmF0Y2hbMF0scz10aGlzLl9zdGF0ZSxsPXRoaXMuX3ZlbG9jaXR5LGM9dGhpcy5kaW1lbnNpb247aWYoYT49ci0xKWZvcih2YXIgdT1zLmxlbmd0aC0xLGg9KGVbci0xXSwwKTtoPGM7KytoLC0tdSlvW2hdPWxbdV07ZWxzZXt1PWMqKGErMSktMTt2YXIgZj1lW2FdLHA9ZVthKzFdLWZ8fDEsZD10aGlzLl9zY3JhdGNoWzFdLGc9dGhpcy5fc2NyYXRjaFsyXSx2PXRoaXMuX3NjcmF0Y2hbM10sbT10aGlzLl9zY3JhdGNoWzRdLHk9ITA7Zm9yKGg9MDtoPGM7KytoLC0tdSlkW2hdPXNbdV0sdltoXT1sW3VdKnAsZ1toXT1zW3UrY10sbVtoXT1sW3UrY10qcCx5PXkmJmRbaF09PT1nW2hdJiZ2W2hdPT09bVtoXSYmMD09PXZbaF07aWYoeSlmb3IoaD0wO2g8YzsrK2gpb1toXT0wO2Vsc2V7bi5kZXJpdmF0aXZlKGQsdixnLG0sKHQtZikvcCxvKTtmb3IoaD0wO2g8YzsrK2gpb1toXS89cH19cmV0dXJuIG99LHMubGFzdFQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90aW1lO3JldHVybiB0W3QubGVuZ3RoLTFdfSxzLnN0YWJsZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl92ZWxvY2l0eSxlPXQubGVuZ3RoLHI9dGhpcy5kaW1lbnNpb24tMTtyPj0wOy0tcilpZih0Wy0tZV0pcmV0dXJuITE7cmV0dXJuITB9LHMuanVtcD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhc3RUKCkscj10aGlzLmRpbWVuc2lvbjtpZighKHQ8ZXx8YXJndW1lbnRzLmxlbmd0aCE9PXIrMSkpe3ZhciBuPXRoaXMuX3N0YXRlLGk9dGhpcy5fdmVsb2NpdHksbz1uLmxlbmd0aC10aGlzLmRpbWVuc2lvbixzPXRoaXMuYm91bmRzLGw9c1swXSxjPXNbMV07dGhpcy5fdGltZS5wdXNoKGUsdCk7Zm9yKHZhciB1PTA7dTwyOysrdSlmb3IodmFyIGg9MDtoPHI7KytoKW4ucHVzaChuW28rK10pLGkucHVzaCgwKTt0aGlzLl90aW1lLnB1c2godCk7Zm9yKGg9cjtoPjA7LS1oKW4ucHVzaChhKGxbaC0xXSxjW2gtMV0sYXJndW1lbnRzW2hdKSksaS5wdXNoKDApfX0scy5wdXNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXRoaXMuZGltZW5zaW9uO2lmKCEodDxlfHxhcmd1bWVudHMubGVuZ3RoIT09cisxKSl7dmFyIG49dGhpcy5fc3RhdGUsaT10aGlzLl92ZWxvY2l0eSxvPW4ubGVuZ3RoLXRoaXMuZGltZW5zaW9uLHM9dC1lLGw9dGhpcy5ib3VuZHMsYz1sWzBdLHU9bFsxXSxoPXM+MWUtNj8xL3M6MDt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciBmPXI7Zj4wOy0tZil7dmFyIHA9YShjW2YtMV0sdVtmLTFdLGFyZ3VtZW50c1tmXSk7bi5wdXNoKHApLGkucHVzaCgocC1uW28rK10pKmgpfX19LHMuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGltZW5zaW9uO2lmKCEodDx0aGlzLmxhc3RUKCl8fGFyZ3VtZW50cy5sZW5ndGghPT1lKzEpKXt2YXIgcj10aGlzLl9zdGF0ZSxuPXRoaXMuX3ZlbG9jaXR5LGk9dGhpcy5ib3VuZHMsbz1pWzBdLHM9aVsxXTt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciBsPWU7bD4wOy0tbClyLnB1c2goYShvW2wtMV0sc1tsLTFdLGFyZ3VtZW50c1tsXSkpLG4ucHVzaCgwKX19LHMubW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhc3RUKCkscj10aGlzLmRpbWVuc2lvbjtpZighKHQ8PWV8fGFyZ3VtZW50cy5sZW5ndGghPT1yKzEpKXt2YXIgbj10aGlzLl9zdGF0ZSxpPXRoaXMuX3ZlbG9jaXR5LG89bi5sZW5ndGgtdGhpcy5kaW1lbnNpb24scz10aGlzLmJvdW5kcyxsPXNbMF0sYz1zWzFdLHU9dC1lLGg9dT4xZS02PzEvdTowO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGY9cjtmPjA7LS1mKXt2YXIgcD1hcmd1bWVudHNbZl07bi5wdXNoKGEobFtmLTFdLGNbZi0xXSxuW28rK10rcCkpLGkucHVzaChwKmgpfX19LHMuaWRsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhc3RUKCk7aWYoISh0PGUpKXt2YXIgcj10aGlzLmRpbWVuc2lvbixuPXRoaXMuX3N0YXRlLGk9dGhpcy5fdmVsb2NpdHksbz1uLmxlbmd0aC1yLHM9dGhpcy5ib3VuZHMsbD1zWzBdLGM9c1sxXSx1PXQtZTt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciBoPXItMTtoPj0wOy0taCluLnB1c2goYShsW2hdLGNbaF0sbltvXSt1Kmlbb10pKSxpLnB1c2goMCksbys9MX19fSx7XCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiOjgyLFwiY3ViaWMtaGVybWl0ZVwiOjEzNn1dLDIyNDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCJkdHlwZVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKCF0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJtdXN0IHNwZWNpZnkgZGF0YSBhcyBmaXJzdCBwYXJhbWV0ZXJcIik7aWYocj0wfCsocnx8MCksQXJyYXkuaXNBcnJheSh0KSYmdFswXSYmXCJudW1iZXJcIj09dHlwZW9mIHRbMF1bMF0pe3ZhciBpLGEsbyxzLGw9dFswXS5sZW5ndGgsYz10Lmxlbmd0aCpsO2UmJlwic3RyaW5nXCIhPXR5cGVvZiBlfHwoZT1uZXcobihlfHxcImZsb2F0MzJcIikpKGMrcikpO3ZhciB1PWUubGVuZ3RoLXI7aWYoYyE9PXUpdGhyb3cgbmV3IEVycm9yKFwic291cmNlIGxlbmd0aCBcIitjK1wiIChcIitsK1wieFwiK3QubGVuZ3RoK1wiKSBkb2VzIG5vdCBtYXRjaCBkZXN0aW5hdGlvbiBsZW5ndGggXCIrdSk7Zm9yKGk9MCxvPXI7aTx0Lmxlbmd0aDtpKyspZm9yKGE9MDthPGw7YSsrKWVbbysrXT1udWxsPT09dFtpXVthXT9OYU46dFtpXVthXX1lbHNlIGlmKGUmJlwic3RyaW5nXCIhPXR5cGVvZiBlKWUuc2V0KHQscik7ZWxzZXt2YXIgaD1uKGV8fFwiZmxvYXQzMlwiKTtpZihBcnJheS5pc0FycmF5KHQpfHxcImFycmF5XCI9PT1lKWZvcihlPW5ldyBoKHQubGVuZ3RoK3IpLGk9MCxvPXIscz1lLmxlbmd0aDtvPHM7bysrLGkrKyllW29dPW51bGw9PT10W2ldP05hTjp0W2ldO2Vsc2UgMD09PXI/ZT1uZXcgaCh0KTooZT1uZXcgaCh0Lmxlbmd0aCtyKSkuc2V0KHQscil9cmV0dXJuIGV9fSx7ZHR5cGU6MTYxfV0sMjI1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImNzcy1mb250L3N0cmluZ2lmeVwiKSxpPVszMiwxMjZdO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuc2hhcGU/dC5zaGFwZTp0LmNhbnZhcz9bdC5jYW52YXMud2lkdGgsdC5jYW52YXMuaGVpZ2h0XTpbNTEyLDUxMl0scj10LmNhbnZhc3x8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSxhPXQuZm9udCxvPVwibnVtYmVyXCI9PXR5cGVvZiB0LnN0ZXA/W3Quc3RlcCx0LnN0ZXBdOnQuc3RlcHx8WzMyLDMyXSxzPXQuY2hhcnN8fGk7YSYmXCJzdHJpbmdcIiE9dHlwZW9mIGEmJihhPW4oYSkpO2lmKEFycmF5LmlzQXJyYXkocykpe2lmKDI9PT1zLmxlbmd0aCYmXCJudW1iZXJcIj09dHlwZW9mIHNbMF0mJlwibnVtYmVyXCI9PXR5cGVvZiBzWzFdKXtmb3IodmFyIGw9W10sYz1zWzBdLHU9MDtjPD1zWzFdO2MrKylsW3UrK109U3RyaW5nLmZyb21DaGFyQ29kZShjKTtzPWx9fWVsc2Ugcz1TdHJpbmcocykuc3BsaXQoXCJcIik7ZT1lLnNsaWNlKCksci53aWR0aD1lWzBdLHIuaGVpZ2h0PWVbMV07dmFyIGg9ci5nZXRDb250ZXh0KFwiMmRcIik7aC5maWxsU3R5bGU9XCIjMDAwXCIsaC5maWxsUmVjdCgwLDAsci53aWR0aCxyLmhlaWdodCksaC5mb250PWEsaC50ZXh0QWxpZ249XCJjZW50ZXJcIixoLnRleHRCYXNlbGluZT1cIm1pZGRsZVwiLGguZmlsbFN0eWxlPVwiI2ZmZlwiO2Zvcih2YXIgZj1vWzBdLzIscD1vWzFdLzIsYz0wO2M8cy5sZW5ndGg7YysrKWguZmlsbFRleHQoc1tjXSxmLHApLChmKz1vWzBdKT5lWzBdLW9bMF0vMiYmKGY9b1swXS8yLHArPW9bMV0pO3JldHVybiByfX0se1wiY3NzLWZvbnQvc3RyaW5naWZ5XCI6MTMzfV0sMjI2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2V8fChlPXt9KSwoXCJzdHJpbmdcIj09dHlwZW9mIHR8fEFycmF5LmlzQXJyYXkodCkpJiYoZS5mYW1pbHk9dCk7dmFyIHI9QXJyYXkuaXNBcnJheShlLmZhbWlseSk/ZS5mYW1pbHkuam9pbihcIiwgXCIpOmUuZmFtaWx5O2lmKCFyKXRocm93IEVycm9yKFwiYGZhbWlseWAgbXVzdCBiZSBkZWZpbmVkXCIpO3ZhciBzPWUuc2l6ZXx8ZS5mb250U2l6ZXx8ZS5lbXx8NDgsbD1lLndlaWdodHx8ZS5mb250V2VpZ2h0fHxcIlwiLGM9KHQ9W2Uuc3R5bGV8fGUuZm9udFN0eWxlfHxcIlwiLGwsc10uam9pbihcIiBcIikrXCJweCBcIityLGUub3JpZ2lufHxcInRvcFwiKTtpZihuLmNhY2hlW3JdJiZzPD1uLmNhY2hlW3JdLmVtKXJldHVybiBpKG4uY2FjaGVbcl0sYyk7dmFyIHU9ZS5jYW52YXN8fG4uY2FudmFzLGg9dS5nZXRDb250ZXh0KFwiMmRcIiksZj17dXBwZXI6dm9pZCAwIT09ZS51cHBlcj9lLnVwcGVyOlwiSFwiLGxvd2VyOnZvaWQgMCE9PWUubG93ZXI/ZS5sb3dlcjpcInhcIixkZXNjZW50OnZvaWQgMCE9PWUuZGVzY2VudD9lLmRlc2NlbnQ6XCJwXCIsYXNjZW50OnZvaWQgMCE9PWUuYXNjZW50P2UuYXNjZW50OlwiaFwiLHRpdHRsZTp2b2lkIDAhPT1lLnRpdHRsZT9lLnRpdHRsZTpcImlcIixvdmVyc2hvb3Q6dm9pZCAwIT09ZS5vdmVyc2hvb3Q/ZS5vdmVyc2hvb3Q6XCJPXCJ9LHA9TWF0aC5jZWlsKDEuNSpzKTt1LmhlaWdodD1wLHUud2lkdGg9LjUqcCxoLmZvbnQ9dDt2YXIgZD17dG9wOjB9O2guY2xlYXJSZWN0KDAsMCxwLHApLGgudGV4dEJhc2VsaW5lPVwidG9wXCIsaC5maWxsU3R5bGU9XCJibGFja1wiLGguZmlsbFRleHQoXCJIXCIsMCwwKTt2YXIgZz1hKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtoLmNsZWFyUmVjdCgwLDAscCxwKSxoLnRleHRCYXNlbGluZT1cImJvdHRvbVwiLGguZmlsbFRleHQoXCJIXCIsMCxwKTt2YXIgdj1hKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtkLmxpbmVIZWlnaHQ9ZC5ib3R0b209cC12K2csaC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9XCJhbHBoYWJldGljXCIsaC5maWxsVGV4dChcIkhcIiwwLHApO3ZhciBtPXAtYShoLmdldEltYWdlRGF0YSgwLDAscCxwKSktMStnO2QuYmFzZWxpbmU9ZC5hbHBoYWJldGljPW0saC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9XCJtaWRkbGVcIixoLmZpbGxUZXh0KFwiSFwiLDAsLjUqcCk7dmFyIHk9YShoLmdldEltYWdlRGF0YSgwLDAscCxwKSk7ZC5tZWRpYW49ZC5taWRkbGU9cC15LTErZy0uNSpwLGguY2xlYXJSZWN0KDAsMCxwLHApLGgudGV4dEJhc2VsaW5lPVwiaGFuZ2luZ1wiLGguZmlsbFRleHQoXCJIXCIsMCwuNSpwKTt2YXIgeD1hKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtkLmhhbmdpbmc9cC14LTErZy0uNSpwLGguY2xlYXJSZWN0KDAsMCxwLHApLGgudGV4dEJhc2VsaW5lPVwiaWRlb2dyYXBoaWNcIixoLmZpbGxUZXh0KFwiSFwiLDAscCk7dmFyIGI9YShoLmdldEltYWdlRGF0YSgwLDAscCxwKSk7aWYoZC5pZGVvZ3JhcGhpYz1wLWItMStnLGYudXBwZXImJihoLmNsZWFyUmVjdCgwLDAscCxwKSxoLnRleHRCYXNlbGluZT1cInRvcFwiLGguZmlsbFRleHQoZi51cHBlciwwLDApLGQudXBwZXI9YShoLmdldEltYWdlRGF0YSgwLDAscCxwKSksZC5jYXBIZWlnaHQ9ZC5iYXNlbGluZS1kLnVwcGVyKSxmLmxvd2VyJiYoaC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9XCJ0b3BcIixoLmZpbGxUZXh0KGYubG93ZXIsMCwwKSxkLmxvd2VyPWEoaC5nZXRJbWFnZURhdGEoMCwwLHAscCkpLGQueEhlaWdodD1kLmJhc2VsaW5lLWQubG93ZXIpLGYudGl0dGxlJiYoaC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9XCJ0b3BcIixoLmZpbGxUZXh0KGYudGl0dGxlLDAsMCksZC50aXR0bGU9YShoLmdldEltYWdlRGF0YSgwLDAscCxwKSkpLGYuYXNjZW50JiYoaC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9XCJ0b3BcIixoLmZpbGxUZXh0KGYuYXNjZW50LDAsMCksZC5hc2NlbnQ9YShoLmdldEltYWdlRGF0YSgwLDAscCxwKSkpLGYuZGVzY2VudCYmKGguY2xlYXJSZWN0KDAsMCxwLHApLGgudGV4dEJhc2VsaW5lPVwidG9wXCIsaC5maWxsVGV4dChmLmRlc2NlbnQsMCwwKSxkLmRlc2NlbnQ9byhoLmdldEltYWdlRGF0YSgwLDAscCxwKSkpLGYub3ZlcnNob290KXtoLmNsZWFyUmVjdCgwLDAscCxwKSxoLnRleHRCYXNlbGluZT1cInRvcFwiLGguZmlsbFRleHQoZi5vdmVyc2hvb3QsMCwwKTt2YXIgXz1vKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtkLm92ZXJzaG9vdD1fLW19Zm9yKHZhciB3IGluIGQpZFt3XS89cztyZXR1cm4gZC5lbT1zLG4uY2FjaGVbcl09ZCxpKGQsYyl9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPXt9O2Zvcih2YXIgbiBpblwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT10W2VdKSx0KVwiZW1cIiE9PW4mJihyW25dPXRbbl0tZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9dC5oZWlnaHQscj10LmRhdGEsbj0zO248ci5sZW5ndGg7bis9NClpZigwIT09cltuXSlyZXR1cm4gTWF0aC5mbG9vciguMjUqKG4tMykvZSl9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9dC5oZWlnaHQscj10LmRhdGEsbj1yLmxlbmd0aC0xO24+MDtuLT00KWlmKDAhPT1yW25dKXJldHVybiBNYXRoLmZsb29yKC4yNSoobi0zKS9lKX1lLmV4cG9ydHM9bixuLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLG4uY2FjaGU9e319LHt9XSwyMjc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBjKHR8fGQsbnVsbCl9O3ZhciBuPTAsaT0xO2Z1bmN0aW9uIGEodCxlLHIsbixpLGEpe3RoaXMuX2NvbG9yPXQsdGhpcy5rZXk9ZSx0aGlzLnZhbHVlPXIsdGhpcy5sZWZ0PW4sdGhpcy5yaWdodD1pLHRoaXMuX2NvdW50PWF9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbmV3IGEodC5fY29sb3IsdC5rZXksdC52YWx1ZSx0LmxlZnQsdC5yaWdodCx0Ll9jb3VudCl9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBuZXcgYSh0LGUua2V5LGUudmFsdWUsZS5sZWZ0LGUucmlnaHQsZS5fY291bnQpfWZ1bmN0aW9uIGwodCl7dC5fY291bnQ9MSsodC5sZWZ0P3QubGVmdC5fY291bnQ6MCkrKHQucmlnaHQ/dC5yaWdodC5fY291bnQ6MCl9ZnVuY3Rpb24gYyh0LGUpe3RoaXMuX2NvbXBhcmU9dCx0aGlzLnJvb3Q9ZX12YXIgdT1jLnByb3RvdHlwZTtmdW5jdGlvbiBoKHQsZSl7dGhpcy50cmVlPXQsdGhpcy5fc3RhY2s9ZX1PYmplY3QuZGVmaW5lUHJvcGVydHkodSxcImtleXNcIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihlLHIpe3QucHVzaChlKX0pLHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsXCJ2YWx1ZXNcIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihlLHIpe3QucHVzaChyKX0pLHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsXCJsZW5ndGhcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdD90aGlzLnJvb3QuX2NvdW50OjB9fSksdS5pbnNlcnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5fY29tcGFyZSxvPXRoaXMucm9vdCx1PVtdLGg9W107bzspe3ZhciBmPXIodCxvLmtleSk7dS5wdXNoKG8pLGgucHVzaChmKSxvPWY8PTA/by5sZWZ0Om8ucmlnaHR9dS5wdXNoKG5ldyBhKG4sdCxlLG51bGwsbnVsbCwxKSk7Zm9yKHZhciBwPXUubGVuZ3RoLTI7cD49MDstLXApe289dVtwXTtoW3BdPD0wP3VbcF09bmV3IGEoby5fY29sb3Isby5rZXksby52YWx1ZSx1W3ArMV0sby5yaWdodCxvLl9jb3VudCsxKTp1W3BdPW5ldyBhKG8uX2NvbG9yLG8ua2V5LG8udmFsdWUsby5sZWZ0LHVbcCsxXSxvLl9jb3VudCsxKX1mb3IocD11Lmxlbmd0aC0xO3A+MTstLXApe3ZhciBkPXVbcC0xXTtvPXVbcF07aWYoZC5fY29sb3I9PT1pfHxvLl9jb2xvcj09PWkpYnJlYWs7dmFyIGc9dVtwLTJdO2lmKGcubGVmdD09PWQpaWYoZC5sZWZ0PT09byl7aWYoISh2PWcucmlnaHQpfHx2Ll9jb2xvciE9PW4pe2lmKGcuX2NvbG9yPW4sZy5sZWZ0PWQucmlnaHQsZC5fY29sb3I9aSxkLnJpZ2h0PWcsdVtwLTJdPWQsdVtwLTFdPW8sbChnKSxsKGQpLHA+PTMpKG09dVtwLTNdKS5sZWZ0PT09Zz9tLmxlZnQ9ZDptLnJpZ2h0PWQ7YnJlYWt9ZC5fY29sb3I9aSxnLnJpZ2h0PXMoaSx2KSxnLl9jb2xvcj1uLHAtPTF9ZWxzZXtpZighKHY9Zy5yaWdodCl8fHYuX2NvbG9yIT09bil7aWYoZC5yaWdodD1vLmxlZnQsZy5fY29sb3I9bixnLmxlZnQ9by5yaWdodCxvLl9jb2xvcj1pLG8ubGVmdD1kLG8ucmlnaHQ9Zyx1W3AtMl09byx1W3AtMV09ZCxsKGcpLGwoZCksbChvKSxwPj0zKShtPXVbcC0zXSkubGVmdD09PWc/bS5sZWZ0PW86bS5yaWdodD1vO2JyZWFrfWQuX2NvbG9yPWksZy5yaWdodD1zKGksdiksZy5fY29sb3I9bixwLT0xfWVsc2UgaWYoZC5yaWdodD09PW8pe2lmKCEodj1nLmxlZnQpfHx2Ll9jb2xvciE9PW4pe2lmKGcuX2NvbG9yPW4sZy5yaWdodD1kLmxlZnQsZC5fY29sb3I9aSxkLmxlZnQ9Zyx1W3AtMl09ZCx1W3AtMV09byxsKGcpLGwoZCkscD49MykobT11W3AtM10pLnJpZ2h0PT09Zz9tLnJpZ2h0PWQ6bS5sZWZ0PWQ7YnJlYWt9ZC5fY29sb3I9aSxnLmxlZnQ9cyhpLHYpLGcuX2NvbG9yPW4scC09MX1lbHNle3ZhciB2O2lmKCEodj1nLmxlZnQpfHx2Ll9jb2xvciE9PW4pe3ZhciBtO2lmKGQubGVmdD1vLnJpZ2h0LGcuX2NvbG9yPW4sZy5yaWdodD1vLmxlZnQsby5fY29sb3I9aSxvLnJpZ2h0PWQsby5sZWZ0PWcsdVtwLTJdPW8sdVtwLTFdPWQsbChnKSxsKGQpLGwobykscD49MykobT11W3AtM10pLnJpZ2h0PT09Zz9tLnJpZ2h0PW86bS5sZWZ0PW87YnJlYWt9ZC5fY29sb3I9aSxnLmxlZnQ9cyhpLHYpLGcuX2NvbG9yPW4scC09MX19cmV0dXJuIHVbMF0uX2NvbG9yPWksbmV3IGMocix1WzBdKX0sdS5mb3JFYWNoPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLnJvb3Qpc3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24gdChlLHIpe3ZhciBuO2lmKHIubGVmdCYmKG49dChlLHIubGVmdCkpKXJldHVybiBuO3JldHVybihuPWUoci5rZXksci52YWx1ZSkpfHwoci5yaWdodD90KGUsci5yaWdodCk6dm9pZCAwKX0odCx0aGlzLnJvb3QpO2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24gdChlLHIsbixpKXtpZihyKGUsaS5rZXkpPD0wKXt2YXIgYTtpZihpLmxlZnQmJihhPXQoZSxyLG4saS5sZWZ0KSkpcmV0dXJuIGE7aWYoYT1uKGkua2V5LGkudmFsdWUpKXJldHVybiBhfWlmKGkucmlnaHQpcmV0dXJuIHQoZSxyLG4saS5yaWdodCl9KGUsdGhpcy5fY29tcGFyZSx0LHRoaXMucm9vdCk7Y2FzZSAzOmlmKHRoaXMuX2NvbXBhcmUoZSxyKT49MClyZXR1cm47cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4saSxhKXt2YXIgbyxzPW4oZSxhLmtleSksbD1uKHIsYS5rZXkpO2lmKHM8PTApe2lmKGEubGVmdCYmKG89dChlLHIsbixpLGEubGVmdCkpKXJldHVybiBvO2lmKGw+MCYmKG89aShhLmtleSxhLnZhbHVlKSkpcmV0dXJuIG99aWYobD4wJiZhLnJpZ2h0KXJldHVybiB0KGUscixuLGksYS5yaWdodCl9KGUscix0aGlzLl9jb21wYXJlLHQsdGhpcy5yb290KX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LFwiYmVnaW5cIix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9dGhpcy5yb290O2U7KXQucHVzaChlKSxlPWUubGVmdDtyZXR1cm4gbmV3IGgodGhpcyx0KX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodSxcImVuZFwiLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT10aGlzLnJvb3Q7ZTspdC5wdXNoKGUpLGU9ZS5yaWdodDtyZXR1cm4gbmV3IGgodGhpcyx0KX19KSx1LmF0PWZ1bmN0aW9uKHQpe2lmKHQ8MClyZXR1cm4gbmV3IGgodGhpcyxbXSk7Zm9yKHZhciBlPXRoaXMucm9vdCxyPVtdOzspe2lmKHIucHVzaChlKSxlLmxlZnQpe2lmKHQ8ZS5sZWZ0Ll9jb3VudCl7ZT1lLmxlZnQ7Y29udGludWV9dC09ZS5sZWZ0Ll9jb3VudH1pZighdClyZXR1cm4gbmV3IGgodGhpcyxyKTtpZih0LT0xLCFlLnJpZ2h0KWJyZWFrO2lmKHQ+PWUucmlnaHQuX2NvdW50KWJyZWFrO2U9ZS5yaWdodH1yZXR1cm4gbmV3IGgodGhpcyxbXSl9LHUuZ2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2NvbXBhcmUscj10aGlzLnJvb3Qsbj1bXSxpPTA7cjspe3ZhciBhPWUodCxyLmtleSk7bi5wdXNoKHIpLGE8PTAmJihpPW4ubGVuZ3RoKSxyPWE8PTA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG4ubGVuZ3RoPWksbmV3IGgodGhpcyxuKX0sdS5ndD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYTwwJiYoaT1uLmxlbmd0aCkscj1hPDA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG4ubGVuZ3RoPWksbmV3IGgodGhpcyxuKX0sdS5sdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYT4wJiYoaT1uLmxlbmd0aCkscj1hPD0wP3IubGVmdDpyLnJpZ2h0fXJldHVybiBuLmxlbmd0aD1pLG5ldyBoKHRoaXMsbil9LHUubGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2NvbXBhcmUscj10aGlzLnJvb3Qsbj1bXSxpPTA7cjspe3ZhciBhPWUodCxyLmtleSk7bi5wdXNoKHIpLGE+PTAmJihpPW4ubGVuZ3RoKSxyPWE8MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbi5sZW5ndGg9aSxuZXcgaCh0aGlzLG4pfSx1LmZpbmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2NvbXBhcmUscj10aGlzLnJvb3Qsbj1bXTtyOyl7dmFyIGk9ZSh0LHIua2V5KTtpZihuLnB1c2gociksMD09PWkpcmV0dXJuIG5ldyBoKHRoaXMsbik7cj1pPD0wP3IubGVmdDpyLnJpZ2h0fXJldHVybiBuZXcgaCh0aGlzLFtdKX0sdS5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5maW5kKHQpO3JldHVybiBlP2UucmVtb3ZlKCk6dGhpc30sdS5nZXQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2NvbXBhcmUscj10aGlzLnJvb3Q7cjspe3ZhciBuPWUodCxyLmtleSk7aWYoMD09PW4pcmV0dXJuIHIudmFsdWU7cj1uPD0wP3IubGVmdDpyLnJpZ2h0fX07dmFyIGY9aC5wcm90b3R5cGU7ZnVuY3Rpb24gcCh0LGUpe3Qua2V5PWUua2V5LHQudmFsdWU9ZS52YWx1ZSx0LmxlZnQ9ZS5sZWZ0LHQucmlnaHQ9ZS5yaWdodCx0Ll9jb2xvcj1lLl9jb2xvcix0Ll9jb3VudD1lLl9jb3VudH1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTowfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLFwidmFsaWRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YWNrLmxlbmd0aD4wfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLFwibm9kZVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhY2subGVuZ3RoPjA/dGhpcy5fc3RhY2tbdGhpcy5fc3RhY2subGVuZ3RoLTFdOm51bGx9LGVudW1lcmFibGU6ITB9KSxmLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBoKHRoaXMudHJlZSx0aGlzLl9zdGFjay5zbGljZSgpKX0sZi5yZW1vdmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwPT09dC5sZW5ndGgpcmV0dXJuIHRoaXMudHJlZTt2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9dFt0Lmxlbmd0aC0xXTtlW2UubGVuZ3RoLTFdPW5ldyBhKHIuX2NvbG9yLHIua2V5LHIudmFsdWUsci5sZWZ0LHIucmlnaHQsci5fY291bnQpO2Zvcih2YXIgdT10Lmxlbmd0aC0yO3U+PTA7LS11KXsocj10W3VdKS5sZWZ0PT09dFt1KzFdP2VbdV09bmV3IGEoci5fY29sb3Isci5rZXksci52YWx1ZSxlW3UrMV0sci5yaWdodCxyLl9jb3VudCk6ZVt1XT1uZXcgYShyLl9jb2xvcixyLmtleSxyLnZhbHVlLHIubGVmdCxlW3UrMV0sci5fY291bnQpfWlmKChyPWVbZS5sZW5ndGgtMV0pLmxlZnQmJnIucmlnaHQpe3ZhciBoPWUubGVuZ3RoO2ZvcihyPXIubGVmdDtyLnJpZ2h0OyllLnB1c2gocikscj1yLnJpZ2h0O3ZhciBmPWVbaC0xXTtlLnB1c2gobmV3IGEoci5fY29sb3IsZi5rZXksZi52YWx1ZSxyLmxlZnQsci5yaWdodCxyLl9jb3VudCkpLGVbaC0xXS5rZXk9ci5rZXksZVtoLTFdLnZhbHVlPXIudmFsdWU7Zm9yKHU9ZS5sZW5ndGgtMjt1Pj1oOy0tdSlyPWVbdV0sZVt1XT1uZXcgYShyLl9jb2xvcixyLmtleSxyLnZhbHVlLHIubGVmdCxlW3UrMV0sci5fY291bnQpO2VbaC0xXS5sZWZ0PWVbaF19aWYoKHI9ZVtlLmxlbmd0aC0xXSkuX2NvbG9yPT09bil7dmFyIGQ9ZVtlLmxlbmd0aC0yXTtkLmxlZnQ9PT1yP2QubGVmdD1udWxsOmQucmlnaHQ9PT1yJiYoZC5yaWdodD1udWxsKSxlLnBvcCgpO2Zvcih1PTA7dTxlLmxlbmd0aDsrK3UpZVt1XS5fY291bnQtLTtyZXR1cm4gbmV3IGModGhpcy50cmVlLl9jb21wYXJlLGVbMF0pfWlmKHIubGVmdHx8ci5yaWdodCl7ci5sZWZ0P3AocixyLmxlZnQpOnIucmlnaHQmJnAocixyLnJpZ2h0KSxyLl9jb2xvcj1pO2Zvcih1PTA7dTxlLmxlbmd0aC0xOysrdSllW3VdLl9jb3VudC0tO3JldHVybiBuZXcgYyh0aGlzLnRyZWUuX2NvbXBhcmUsZVswXSl9aWYoMT09PWUubGVuZ3RoKXJldHVybiBuZXcgYyh0aGlzLnRyZWUuX2NvbXBhcmUsbnVsbCk7Zm9yKHU9MDt1PGUubGVuZ3RoOysrdSllW3VdLl9jb3VudC0tO3ZhciBnPWVbZS5sZW5ndGgtMl07cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLGEsYyx1PXQubGVuZ3RoLTE7dT49MDstLXUpe2lmKGU9dFt1XSwwPT09dSlyZXR1cm4gdm9pZChlLl9jb2xvcj1pKTtpZigocj10W3UtMV0pLmxlZnQ9PT1lKXtpZigoYT1yLnJpZ2h0KS5yaWdodCYmYS5yaWdodC5fY29sb3I9PT1uKXJldHVybiBjPShhPXIucmlnaHQ9byhhKSkucmlnaHQ9byhhLnJpZ2h0KSxyLnJpZ2h0PWEubGVmdCxhLmxlZnQ9cixhLnJpZ2h0PWMsYS5fY29sb3I9ci5fY29sb3IsZS5fY29sb3I9aSxyLl9jb2xvcj1pLGMuX2NvbG9yPWksbChyKSxsKGEpLHU+MSYmKChoPXRbdS0yXSkubGVmdD09PXI/aC5sZWZ0PWE6aC5yaWdodD1hKSx2b2lkKHRbdS0xXT1hKTtpZihhLmxlZnQmJmEubGVmdC5fY29sb3I9PT1uKXJldHVybiBjPShhPXIucmlnaHQ9byhhKSkubGVmdD1vKGEubGVmdCksci5yaWdodD1jLmxlZnQsYS5sZWZ0PWMucmlnaHQsYy5sZWZ0PXIsYy5yaWdodD1hLGMuX2NvbG9yPXIuX2NvbG9yLHIuX2NvbG9yPWksYS5fY29sb3I9aSxlLl9jb2xvcj1pLGwociksbChhKSxsKGMpLHU+MSYmKChoPXRbdS0yXSkubGVmdD09PXI/aC5sZWZ0PWM6aC5yaWdodD1jKSx2b2lkKHRbdS0xXT1jKTtpZihhLl9jb2xvcj09PWkpe2lmKHIuX2NvbG9yPT09bilyZXR1cm4gci5fY29sb3I9aSx2b2lkKHIucmlnaHQ9cyhuLGEpKTtyLnJpZ2h0PXMobixhKTtjb250aW51ZX1hPW8oYSksci5yaWdodD1hLmxlZnQsYS5sZWZ0PXIsYS5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9bixsKHIpLGwoYSksdT4xJiYoKGg9dFt1LTJdKS5sZWZ0PT09cj9oLmxlZnQ9YTpoLnJpZ2h0PWEpLHRbdS0xXT1hLHRbdV09cix1KzE8dC5sZW5ndGg/dFt1KzFdPWU6dC5wdXNoKGUpLHUrPTJ9ZWxzZXtpZigoYT1yLmxlZnQpLmxlZnQmJmEubGVmdC5fY29sb3I9PT1uKXJldHVybiBjPShhPXIubGVmdD1vKGEpKS5sZWZ0PW8oYS5sZWZ0KSxyLmxlZnQ9YS5yaWdodCxhLnJpZ2h0PXIsYS5sZWZ0PWMsYS5fY29sb3I9ci5fY29sb3IsZS5fY29sb3I9aSxyLl9jb2xvcj1pLGMuX2NvbG9yPWksbChyKSxsKGEpLHU+MSYmKChoPXRbdS0yXSkucmlnaHQ9PT1yP2gucmlnaHQ9YTpoLmxlZnQ9YSksdm9pZCh0W3UtMV09YSk7aWYoYS5yaWdodCYmYS5yaWdodC5fY29sb3I9PT1uKXJldHVybiBjPShhPXIubGVmdD1vKGEpKS5yaWdodD1vKGEucmlnaHQpLHIubGVmdD1jLnJpZ2h0LGEucmlnaHQ9Yy5sZWZ0LGMucmlnaHQ9cixjLmxlZnQ9YSxjLl9jb2xvcj1yLl9jb2xvcixyLl9jb2xvcj1pLGEuX2NvbG9yPWksZS5fY29sb3I9aSxsKHIpLGwoYSksbChjKSx1PjEmJigoaD10W3UtMl0pLnJpZ2h0PT09cj9oLnJpZ2h0PWM6aC5sZWZ0PWMpLHZvaWQodFt1LTFdPWMpO2lmKGEuX2NvbG9yPT09aSl7aWYoci5fY29sb3I9PT1uKXJldHVybiByLl9jb2xvcj1pLHZvaWQoci5sZWZ0PXMobixhKSk7ci5sZWZ0PXMobixhKTtjb250aW51ZX12YXIgaDthPW8oYSksci5sZWZ0PWEucmlnaHQsYS5yaWdodD1yLGEuX2NvbG9yPXIuX2NvbG9yLHIuX2NvbG9yPW4sbChyKSxsKGEpLHU+MSYmKChoPXRbdS0yXSkucmlnaHQ9PT1yP2gucmlnaHQ9YTpoLmxlZnQ9YSksdFt1LTFdPWEsdFt1XT1yLHUrMTx0Lmxlbmd0aD90W3UrMV09ZTp0LnB1c2goZSksdSs9Mn19fShlKSxnLmxlZnQ9PT1yP2cubGVmdD1udWxsOmcucmlnaHQ9bnVsbCxuZXcgYyh0aGlzLnRyZWUuX2NvbXBhcmUsZVswXSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLFwia2V5XCIse2dldDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0YWNrLmxlbmd0aD4wKXJldHVybiB0aGlzLl9zdGFja1t0aGlzLl9zdGFjay5sZW5ndGgtMV0ua2V5fSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsXCJ2YWx1ZVwiLHtnZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9zdGFjay5sZW5ndGg+MClyZXR1cm4gdGhpcy5fc3RhY2tbdGhpcy5fc3RhY2subGVuZ3RoLTFdLnZhbHVlfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsXCJpbmRleFwiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD0wLGU9dGhpcy5fc3RhY2s7aWYoMD09PWUubGVuZ3RoKXt2YXIgcj10aGlzLnRyZWUucm9vdDtyZXR1cm4gcj9yLl9jb3VudDowfWVbZS5sZW5ndGgtMV0ubGVmdCYmKHQ9ZVtlLmxlbmd0aC0xXS5sZWZ0Ll9jb3VudCk7Zm9yKHZhciBuPWUubGVuZ3RoLTI7bj49MDstLW4pZVtuKzFdPT09ZVtuXS5yaWdodCYmKCsrdCxlW25dLmxlZnQmJih0Kz1lW25dLmxlZnQuX2NvdW50KSk7cmV0dXJuIHR9LGVudW1lcmFibGU6ITB9KSxmLm5leHQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwIT09dC5sZW5ndGgpe3ZhciBlPXRbdC5sZW5ndGgtMV07aWYoZS5yaWdodClmb3IoZT1lLnJpZ2h0O2U7KXQucHVzaChlKSxlPWUubGVmdDtlbHNlIGZvcih0LnBvcCgpO3QubGVuZ3RoPjAmJnRbdC5sZW5ndGgtMV0ucmlnaHQ9PT1lOyllPXRbdC5sZW5ndGgtMV0sdC5wb3AoKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLFwiaGFzTmV4dFwiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwPT09dC5sZW5ndGgpcmV0dXJuITE7aWYodFt0Lmxlbmd0aC0xXS5yaWdodClyZXR1cm4hMDtmb3IodmFyIGU9dC5sZW5ndGgtMTtlPjA7LS1lKWlmKHRbZS0xXS5sZWZ0PT09dFtlXSlyZXR1cm4hMDtyZXR1cm4hMX19KSxmLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zdGFjaztpZigwPT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgdXBkYXRlIGVtcHR5IG5vZGUhXCIpO3ZhciByPW5ldyBBcnJheShlLmxlbmd0aCksbj1lW2UubGVuZ3RoLTFdO3Jbci5sZW5ndGgtMV09bmV3IGEobi5fY29sb3Isbi5rZXksdCxuLmxlZnQsbi5yaWdodCxuLl9jb3VudCk7Zm9yKHZhciBpPWUubGVuZ3RoLTI7aT49MDstLWkpKG49ZVtpXSkubGVmdD09PWVbaSsxXT9yW2ldPW5ldyBhKG4uX2NvbG9yLG4ua2V5LG4udmFsdWUscltpKzFdLG4ucmlnaHQsbi5fY291bnQpOnJbaV09bmV3IGEobi5fY29sb3Isbi5rZXksbi52YWx1ZSxuLmxlZnQscltpKzFdLG4uX2NvdW50KTtyZXR1cm4gbmV3IGModGhpcy50cmVlLl9jb21wYXJlLHJbMF0pfSxmLnByZXY9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwIT09dC5sZW5ndGgpe3ZhciBlPXRbdC5sZW5ndGgtMV07aWYoZS5sZWZ0KWZvcihlPWUubGVmdDtlOyl0LnB1c2goZSksZT1lLnJpZ2h0O2Vsc2UgZm9yKHQucG9wKCk7dC5sZW5ndGg+MCYmdFt0Lmxlbmd0aC0xXS5sZWZ0PT09ZTspZT10W3QubGVuZ3RoLTFdLHQucG9wKCl9fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZixcImhhc1ByZXZcIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3RhY2s7aWYoMD09PXQubGVuZ3RoKXJldHVybiExO2lmKHRbdC5sZW5ndGgtMV0ubGVmdClyZXR1cm4hMDtmb3IodmFyIGU9dC5sZW5ndGgtMTtlPjA7LS1lKWlmKHRbZS0xXS5yaWdodD09PXRbZV0pcmV0dXJuITA7cmV0dXJuITF9fSl9LHt9XSwyMjg6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj1bLjk5OTk5OTk5OTk5OTgwOTksNjc2LjUyMDM2ODEyMTg4NTEsLTEyNTkuMTM5MjE2NzIyNDAyOCw3NzEuMzIzNDI4Nzc3NjUzMSwtMTc2LjYxNTAyOTE2MjE0MDYsMTIuNTA3MzQzMjc4Njg2OTA1LC0uMTM4NTcxMDk1MjY1NzIwMTIsOTk4NDM2OTU3ODAxOTU3MmUtMjEsMS41MDU2MzI3MzUxNDkzMTE2ZS03XSxpPTYwNy8xMjgsYT1bLjk5OTk5OTk5OTk5OTk5NzEsNTcuMTU2MjM1NjY1ODYyOTIsLTU5LjU5Nzk2MDM1NTQ3NTQ5LDE0LjEzNjA5Nzk3NDc0MTc0NiwtLjQ5MTkxMzgxNjA5NzYyMDIsMzM5OTQ2NDk5ODQ4MTE4OWUtMjAsNDY1MjM2Mjg5MjcwNDg1OGUtMjAsLTk4Mzc0NDc1MzA0ODc5NTZlLTIwLC4wMDAxNTgwODg3MDMyMjQ5MTI1LC0uMDAwMjEwMjY0NDQxNzI0MTA0ODgsLjAwMDIxNzQzOTYxODExNTIxMjY1LC0uMDAwMTY0MzE4MTA2NTM2NzYzOSw4NDQxODIyMzk4Mzg1Mjc1ZS0yMCwtMjYxOTA4Mzg0MDE1ODE0MDhlLTIxLDM2ODk5MTgyNjU5NTMxNjI1ZS0yMl07ZnVuY3Rpb24gbyh0KXtpZih0PDApcmV0dXJuIE51bWJlcihcIjAvMFwiKTtmb3IodmFyIGU9YVswXSxyPWEubGVuZ3RoLTE7cj4wOy0tcillKz1hW3JdLyh0K3IpO3ZhciBuPXQraSsuNTtyZXR1cm4uNSpNYXRoLmxvZygyKk1hdGguUEkpKyh0Ky41KSpNYXRoLmxvZyhuKS1uK01hdGgubG9nKGUpLU1hdGgubG9nKHQpfWUuZXhwb3J0cz1mdW5jdGlvbiB0KGUpe2lmKGU8LjUpcmV0dXJuIE1hdGguUEkvKE1hdGguc2luKE1hdGguUEkqZSkqdCgxLWUpKTtpZihlPjEwMClyZXR1cm4gTWF0aC5leHAobyhlKSk7ZS09MTtmb3IodmFyIHI9blswXSxpPTE7aTw5O2krKylyKz1uW2ldLyhlK2kpO3ZhciBhPWUrNysuNTtyZXR1cm4gTWF0aC5zcXJ0KDIqTWF0aC5QSSkqTWF0aC5wb3coYSxlKy41KSpNYXRoLmV4cCgtYSkqcn0sZS5leHBvcnRzLmxvZz1vfSx7fV0sMjI5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIm11c3Qgc3BlY2lmeSB0eXBlIHN0cmluZ1wiKTtpZihlPWV8fHt9LFwidW5kZWZpbmVkXCI9PXR5cGVvZiBkb2N1bWVudCYmIWUuY2FudmFzKXJldHVybiBudWxsO3ZhciByPWUuY2FudmFzfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1wibnVtYmVyXCI9PXR5cGVvZiBlLndpZHRoJiYoci53aWR0aD1lLndpZHRoKTtcIm51bWJlclwiPT10eXBlb2YgZS5oZWlnaHQmJihyLmhlaWdodD1lLmhlaWdodCk7dmFyIG4saT1lO3RyeXt2YXIgYT1bdF07MD09PXQuaW5kZXhPZihcIndlYmdsXCIpJiZhLnB1c2goXCJleHBlcmltZW50YWwtXCIrdCk7Zm9yKHZhciBvPTA7bzxhLmxlbmd0aDtvKyspaWYobj1yLmdldENvbnRleHQoYVtvXSxpKSlyZXR1cm4gbn1jYXRjaCh0KXtuPW51bGx9cmV0dXJuIG58fG51bGx9fSx7fV0sMjMwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IHUodCk7cmV0dXJuIHIudXBkYXRlKGUpLHJ9O3ZhciBuPXQoXCIuL2xpYi90ZXh0LmpzXCIpLGk9dChcIi4vbGliL2xpbmVzLmpzXCIpLGE9dChcIi4vbGliL2JhY2tncm91bmQuanNcIiksbz10KFwiLi9saWIvY3ViZS5qc1wiKSxzPXQoXCIuL2xpYi90aWNrcy5qc1wiKSxsPW5ldyBGbG9hdDMyQXJyYXkoWzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdKTtmdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHR9ZnVuY3Rpb24gdSh0KXt0aGlzLmdsPXQsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5ib3VuZHM9W1stMTAsLTEwLC0xMF0sWzEwLDEwLDEwXV0sdGhpcy50aWNrcz1bW10sW10sW11dLHRoaXMuYXV0b1RpY2tzPSEwLHRoaXMudGlja1NwYWNpbmc9WzEsMSwxXSx0aGlzLnRpY2tFbmFibGU9WyEwLCEwLCEwXSx0aGlzLnRpY2tGb250PVtcInNhbnMtc2VyaWZcIixcInNhbnMtc2VyaWZcIixcInNhbnMtc2VyaWZcIl0sdGhpcy50aWNrU2l6ZT1bMTIsMTIsMTJdLHRoaXMudGlja0FuZ2xlPVswLDAsMF0sdGhpcy50aWNrQWxpZ249W1wiYXV0b1wiLFwiYXV0b1wiLFwiYXV0b1wiXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja1BhZD1bMTAsMTAsMTBdLHRoaXMubGFzdEN1YmVQcm9wcz17Y3ViZUVkZ2VzOlswLDAsMF0sYXhpczpbMCwwLDBdfSx0aGlzLmxhYmVscz1bXCJ4XCIsXCJ5XCIsXCJ6XCJdLHRoaXMubGFiZWxFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxhYmVsRm9udD1cInNhbnMtc2VyaWZcIix0aGlzLmxhYmVsU2l6ZT1bMjAsMjAsMjBdLHRoaXMubGFiZWxBbmdsZT1bMCwwLDBdLHRoaXMubGFiZWxBbGlnbj1bXCJhdXRvXCIsXCJhdXRvXCIsXCJhdXRvXCJdLHRoaXMubGFiZWxDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGFiZWxQYWQ9WzEwLDEwLDEwXSx0aGlzLmxpbmVFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxpbmVNaXJyb3I9WyExLCExLCExXSx0aGlzLmxpbmVXaWR0aD1bMSwxLDFdLHRoaXMubGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5saW5lVGlja0VuYWJsZT1bITAsITAsITBdLHRoaXMubGluZVRpY2tNaXJyb3I9WyExLCExLCExXSx0aGlzLmxpbmVUaWNrTGVuZ3RoPVswLDAsMF0sdGhpcy5saW5lVGlja1dpZHRoPVsxLDEsMV0sdGhpcy5saW5lVGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ncmlkRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5ncmlkV2lkdGg9WzEsMSwxXSx0aGlzLmdyaWRDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuemVyb0VuYWJsZT1bITAsITAsITBdLHRoaXMuemVyb0xpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuemVyb0xpbmVXaWR0aD1bMiwyLDJdLHRoaXMuYmFja2dyb3VuZEVuYWJsZT1bITEsITEsITFdLHRoaXMuYmFja2dyb3VuZENvbG9yPVtbLjgsLjgsLjgsLjVdLFsuOCwuOCwuOCwuNV0sWy44LC44LC44LC41XV0sdGhpcy5fZmlyc3RJbml0PSEwLHRoaXMuX3RleHQ9bnVsbCx0aGlzLl9saW5lcz1udWxsLHRoaXMuX2JhY2tncm91bmQ9YSh0KX12YXIgaD11LnByb3RvdHlwZTtmdW5jdGlvbiBmKCl7dGhpcy5wcmltYWxPZmZzZXQ9WzAsMCwwXSx0aGlzLnByaW1hbE1pbm9yPVswLDAsMF0sdGhpcy5taXJyb3JPZmZzZXQ9WzAsMCwwXSx0aGlzLm1pcnJvck1pbm9yPVswLDAsMF19aC51cGRhdGU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIsbil7aWYobiBpbiB0KXt2YXIgaSxhPXRbbl0sbz10aGlzW25dOyhlP0FycmF5LmlzQXJyYXkoYSkmJkFycmF5LmlzQXJyYXkoYVswXSk6QXJyYXkuaXNBcnJheShhKSk/dGhpc1tuXT1pPVtyKGFbMF0pLHIoYVsxXSkscihhWzJdKV06dGhpc1tuXT1pPVtyKGEpLHIoYSkscihhKV07Zm9yKHZhciBzPTA7czwzOysrcylpZihpW3NdIT09b1tzXSlyZXR1cm4hMH1yZXR1cm4hMX10PXR8fHt9O3ZhciByLGE9ZS5iaW5kKHRoaXMsITEsTnVtYmVyKSxvPWUuYmluZCh0aGlzLCExLEJvb2xlYW4pLGw9ZS5iaW5kKHRoaXMsITEsU3RyaW5nKSxjPWUuYmluZCh0aGlzLCEwLGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2lmKDM9PT10Lmxlbmd0aClyZXR1cm5bK3RbMF0sK3RbMV0sK3RbMl0sMV07aWYoND09PXQubGVuZ3RoKXJldHVyblsrdFswXSwrdFsxXSwrdFsyXSwrdFszXV19cmV0dXJuWzAsMCwwLDFdfSksdT0hMSxoPSExO2lmKFwiYm91bmRzXCJpbiB0KWZvcih2YXIgZj10LmJvdW5kcyxwPTA7cDwyOysrcClmb3IodmFyIGQ9MDtkPDM7KytkKWZbcF1bZF0hPT10aGlzLmJvdW5kc1twXVtkXSYmKGg9ITApLHRoaXMuYm91bmRzW3BdW2RdPWZbcF1bZF07aWYoXCJ0aWNrc1wiaW4gdCl7cj10LnRpY2tzLHU9ITAsdGhpcy5hdXRvVGlja3M9ITE7Zm9yKHA9MDtwPDM7KytwKXRoaXMudGlja1NwYWNpbmdbcF09MH1lbHNlIGEoXCJ0aWNrU3BhY2luZ1wiKSYmKHRoaXMuYXV0b1RpY2tzPSEwLGg9ITApO2lmKHRoaXMuX2ZpcnN0SW5pdCYmKFwidGlja3NcImluIHR8fFwidGlja1NwYWNpbmdcImluIHR8fCh0aGlzLmF1dG9UaWNrcz0hMCksaD0hMCx1PSEwLHRoaXMuX2ZpcnN0SW5pdD0hMSksaCYmdGhpcy5hdXRvVGlja3MmJihyPXMuY3JlYXRlKHRoaXMuYm91bmRzLHRoaXMudGlja1NwYWNpbmcpLHU9ITApLHUpe2ZvcihwPTA7cDwzOysrcClyW3BdLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54LWUueH0pO3MuZXF1YWwocix0aGlzLnRpY2tzKT91PSExOnRoaXMudGlja3M9cn1vKFwidGlja0VuYWJsZVwiKSxsKFwidGlja0ZvbnRcIikmJih1PSEwKSxhKFwidGlja1NpemVcIiksYShcInRpY2tBbmdsZVwiKSxhKFwidGlja1BhZFwiKSxjKFwidGlja0NvbG9yXCIpO3ZhciBnPWwoXCJsYWJlbHNcIik7bChcImxhYmVsRm9udFwiKSYmKGc9ITApLG8oXCJsYWJlbEVuYWJsZVwiKSxhKFwibGFiZWxTaXplXCIpLGEoXCJsYWJlbFBhZFwiKSxjKFwibGFiZWxDb2xvclwiKSxvKFwibGluZUVuYWJsZVwiKSxvKFwibGluZU1pcnJvclwiKSxhKFwibGluZVdpZHRoXCIpLGMoXCJsaW5lQ29sb3JcIiksbyhcImxpbmVUaWNrRW5hYmxlXCIpLG8oXCJsaW5lVGlja01pcnJvclwiKSxhKFwibGluZVRpY2tMZW5ndGhcIiksYShcImxpbmVUaWNrV2lkdGhcIiksYyhcImxpbmVUaWNrQ29sb3JcIiksbyhcImdyaWRFbmFibGVcIiksYShcImdyaWRXaWR0aFwiKSxjKFwiZ3JpZENvbG9yXCIpLG8oXCJ6ZXJvRW5hYmxlXCIpLGMoXCJ6ZXJvTGluZUNvbG9yXCIpLGEoXCJ6ZXJvTGluZVdpZHRoXCIpLG8oXCJiYWNrZ3JvdW5kRW5hYmxlXCIpLGMoXCJiYWNrZ3JvdW5kQ29sb3JcIiksdGhpcy5fdGV4dD90aGlzLl90ZXh0JiYoZ3x8dSkmJnRoaXMuX3RleHQudXBkYXRlKHRoaXMuYm91bmRzLHRoaXMubGFiZWxzLHRoaXMubGFiZWxGb250LHRoaXMudGlja3MsdGhpcy50aWNrRm9udCk6dGhpcy5fdGV4dD1uKHRoaXMuZ2wsdGhpcy5ib3VuZHMsdGhpcy5sYWJlbHMsdGhpcy5sYWJlbEZvbnQsdGhpcy50aWNrcyx0aGlzLnRpY2tGb250KSx0aGlzLl9saW5lcyYmdSYmKHRoaXMuX2xpbmVzLmRpc3Bvc2UoKSx0aGlzLl9saW5lcz1udWxsKSx0aGlzLl9saW5lc3x8KHRoaXMuX2xpbmVzPWkodGhpcy5nbCx0aGlzLmJvdW5kcyx0aGlzLnRpY2tzKSl9O3ZhciBwPVtuZXcgZixuZXcgZixuZXcgZl07ZnVuY3Rpb24gZCh0LGUscixuLGkpe2Zvcih2YXIgYT10LnByaW1hbE9mZnNldCxvPXQucHJpbWFsTWlub3Iscz10Lm1pcnJvck9mZnNldCxsPXQubWlycm9yTWlub3IsYz1uW2VdLHU9MDt1PDM7Kyt1KWlmKGUhPT11KXt2YXIgaD1hLGY9cyxwPW8sZD1sO2MmMTw8dSYmKGg9cyxmPWEscD1sLGQ9byksaFt1XT1yWzBdW3VdLGZbdV09clsxXVt1XSxpW3VdPjA/KHBbdV09LTEsZFt1XT0wKToocFt1XT0wLGRbdV09MSl9fXZhciBnPVswLDAsMF0sdj17bW9kZWw6bCx2aWV3OmwscHJvamVjdGlvbjpsLF9vcnRobzohMX07aC5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiEwfSxoLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5kcmF3VHJhbnNwYXJlbnQ9ZnVuY3Rpb24odCl7fTt2YXIgbT1bMCwwLDBdLHk9WzAsMCwwXSx4PVswLDAsMF07aC5kcmF3PWZ1bmN0aW9uKHQpe3Q9dHx8djtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fGwsbj10LnZpZXd8fGwsaT10LnByb2plY3Rpb258fGwsYT10aGlzLmJvdW5kcyxzPXQuX29ydGhvfHwhMSx1PW8ocixuLGksYSxzKSxoPXUuY3ViZUVkZ2VzLGY9dS5heGlzLGI9blsxMl0sXz1uWzEzXSx3PW5bMTRdLGs9blsxNV0sQT0ocz8yOjEpKnRoaXMucGl4ZWxSYXRpbyooaVszXSpiK2lbN10qXytpWzExXSp3K2lbMTVdKmspL2UuZHJhd2luZ0J1ZmZlckhlaWdodCxUPTA7VDwzOysrVCl0aGlzLmxhc3RDdWJlUHJvcHMuY3ViZUVkZ2VzW1RdPWhbVF0sdGhpcy5sYXN0Q3ViZVByb3BzLmF4aXNbVF09ZltUXTt2YXIgTT1wO2ZvcihUPTA7VDwzOysrVClkKHBbVF0sVCx0aGlzLmJvdW5kcyxoLGYpO2U9dGhpcy5nbDt2YXIgUyxFPWc7Zm9yKFQ9MDtUPDM7KytUKXRoaXMuYmFja2dyb3VuZEVuYWJsZVtUXT9FW1RdPWZbVF06RVtUXT0wO3RoaXMuX2JhY2tncm91bmQuZHJhdyhyLG4saSxhLEUsdGhpcy5iYWNrZ3JvdW5kQ29sb3IpLHRoaXMuX2xpbmVzLmJpbmQocixuLGksdGhpcyk7Zm9yKFQ9MDtUPDM7KytUKXt2YXIgQz1bMCwwLDBdO2ZbVF0+MD9DW1RdPWFbMV1bVF06Q1tUXT1hWzBdW1RdO2Zvcih2YXIgTD0wO0w8MjsrK0wpe3ZhciB6PShUKzErTCklMyxPPShUKzErKDFeTCkpJTM7dGhpcy5ncmlkRW5hYmxlW3pdJiZ0aGlzLl9saW5lcy5kcmF3R3JpZCh6LE8sdGhpcy5ib3VuZHMsQyx0aGlzLmdyaWRDb2xvclt6XSx0aGlzLmdyaWRXaWR0aFt6XSp0aGlzLnBpeGVsUmF0aW8pfWZvcihMPTA7TDwyOysrTCl7ej0oVCsxK0wpJTMsTz0oVCsxKygxXkwpKSUzO3RoaXMuemVyb0VuYWJsZVtPXSYmTWF0aC5taW4oYVswXVtPXSxhWzFdW09dKTw9MCYmTWF0aC5tYXgoYVswXVtPXSxhWzFdW09dKT49MCYmdGhpcy5fbGluZXMuZHJhd1plcm8oeixPLHRoaXMuYm91bmRzLEMsdGhpcy56ZXJvTGluZUNvbG9yW09dLHRoaXMuemVyb0xpbmVXaWR0aFtPXSp0aGlzLnBpeGVsUmF0aW8pfX1mb3IoVD0wO1Q8MzsrK1Qpe3RoaXMubGluZUVuYWJsZVtUXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNMaW5lKFQsdGhpcy5ib3VuZHMsTVtUXS5wcmltYWxPZmZzZXQsdGhpcy5saW5lQ29sb3JbVF0sdGhpcy5saW5lV2lkdGhbVF0qdGhpcy5waXhlbFJhdGlvKSx0aGlzLmxpbmVNaXJyb3JbVF0mJnRoaXMuX2xpbmVzLmRyYXdBeGlzTGluZShULHRoaXMuYm91bmRzLE1bVF0ubWlycm9yT2Zmc2V0LHRoaXMubGluZUNvbG9yW1RdLHRoaXMubGluZVdpZHRoW1RdKnRoaXMucGl4ZWxSYXRpbyk7dmFyIEk9YyhtLE1bVF0ucHJpbWFsTWlub3IpLEQ9Yyh5LE1bVF0ubWlycm9yTWlub3IpLFA9dGhpcy5saW5lVGlja0xlbmd0aDtmb3IoTD0wO0w8MzsrK0wpe3ZhciBSPUEvcls1KkxdO0lbTF0qPVBbTF0qUixEW0xdKj1QW0xdKlJ9dGhpcy5saW5lVGlja0VuYWJsZVtUXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNUaWNrcyhULE1bVF0ucHJpbWFsT2Zmc2V0LEksdGhpcy5saW5lVGlja0NvbG9yW1RdLHRoaXMubGluZVRpY2tXaWR0aFtUXSp0aGlzLnBpeGVsUmF0aW8pLHRoaXMubGluZVRpY2tNaXJyb3JbVF0mJnRoaXMuX2xpbmVzLmRyYXdBeGlzVGlja3MoVCxNW1RdLm1pcnJvck9mZnNldCxELHRoaXMubGluZVRpY2tDb2xvcltUXSx0aGlzLmxpbmVUaWNrV2lkdGhbVF0qdGhpcy5waXhlbFJhdGlvKX10aGlzLl9saW5lcy51bmJpbmQoKSx0aGlzLl90ZXh0LmJpbmQocixuLGksdGhpcy5waXhlbFJhdGlvKTt2YXIgRixCO2Z1bmN0aW9uIE4odCl7KEI9WzAsMCwwXSlbdF09MX1mdW5jdGlvbiBqKHQsZSxyKXt2YXIgbj0odCsxKSUzLGk9KHQrMiklMyxhPWVbbl0sbz1lW2ldLHM9cltuXSxsPXJbaV07YT4wJiZsPjA/TihuKTphPjAmJmw8MD9OKG4pOmE8MCYmbD4wP04obik6YTwwJiZsPDA/TihuKTpvPjAmJnM+MD9OKGkpOm8+MCYmczwwP04oaSk6bzwwJiZzPjA/TihpKTpvPDAmJnM8MCYmTihpKX1mb3IoVD0wO1Q8MzsrK1Qpe3ZhciBWPU1bVF0ucHJpbWFsTWlub3IsVT1NW1RdLm1pcnJvck1pbm9yLHE9Yyh4LE1bVF0ucHJpbWFsT2Zmc2V0KTtmb3IoTD0wO0w8MzsrK0wpdGhpcy5saW5lVGlja0VuYWJsZVtUXSYmKHFbTF0rPUEqVltMXSpNYXRoLm1heCh0aGlzLmxpbmVUaWNrTGVuZ3RoW0xdLDApL3JbNSpMXSk7dmFyIEg9WzAsMCwwXTtpZihIW1RdPTEsdGhpcy50aWNrRW5hYmxlW1RdKXstMzYwMD09PXRoaXMudGlja0FuZ2xlW1RdPyh0aGlzLnRpY2tBbmdsZVtUXT0wLHRoaXMudGlja0FsaWduW1RdPVwiYXV0b1wiKTp0aGlzLnRpY2tBbGlnbltUXT0tMSxGPTEsXCJhdXRvXCI9PT0oUz1bdGhpcy50aWNrQWxpZ25bVF0sLjUsRl0pWzBdP1NbMF09MDpTWzBdPXBhcnNlSW50KFwiXCIrU1swXSksQj1bMCwwLDBdLGooVCxWLFUpO2ZvcihMPTA7TDwzOysrTClxW0xdKz1BKlZbTF0qdGhpcy50aWNrUGFkW0xdL3JbNSpMXTt0aGlzLl90ZXh0LmRyYXdUaWNrcyhULHRoaXMudGlja1NpemVbVF0sdGhpcy50aWNrQW5nbGVbVF0scSx0aGlzLnRpY2tDb2xvcltUXSxILEIsUyl9aWYodGhpcy5sYWJlbEVuYWJsZVtUXSl7Rj0wLEI9WzAsMCwwXSx0aGlzLmxhYmVsc1tUXS5sZW5ndGg+NCYmKE4oVCksRj0xKSxcImF1dG9cIj09PShTPVt0aGlzLmxhYmVsQWxpZ25bVF0sLjUsRl0pWzBdP1NbMF09MDpTWzBdPXBhcnNlSW50KFwiXCIrU1swXSk7Zm9yKEw9MDtMPDM7KytMKXFbTF0rPUEqVltMXSp0aGlzLmxhYmVsUGFkW0xdL3JbNSpMXTtxW1RdKz0uNSooYVswXVtUXSthWzFdW1RdKSx0aGlzLl90ZXh0LmRyYXdMYWJlbChULHRoaXMubGFiZWxTaXplW1RdLHRoaXMubGFiZWxBbmdsZVtUXSxxLHRoaXMubGFiZWxDb2xvcltUXSxbMCwwLDBdLEIsUyl9fXRoaXMuX3RleHQudW5iaW5kKCl9LGguZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX3RleHQuZGlzcG9zZSgpLHRoaXMuX2xpbmVzLmRpc3Bvc2UoKSx0aGlzLl9iYWNrZ3JvdW5kLmRpc3Bvc2UoKSx0aGlzLl9saW5lcz1udWxsLHRoaXMuX3RleHQ9bnVsbCx0aGlzLl9iYWNrZ3JvdW5kPW51bGwsdGhpcy5nbD1udWxsfX0se1wiLi9saWIvYmFja2dyb3VuZC5qc1wiOjIzMSxcIi4vbGliL2N1YmUuanNcIjoyMzIsXCIuL2xpYi9saW5lcy5qc1wiOjIzMyxcIi4vbGliL3RleHQuanNcIjoyMzUsXCIuL2xpYi90aWNrcy5qc1wiOjIzNn1dLDIzMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj1bXSxzPTAsbD0wO2w8MzsrK2wpZm9yKHZhciBjPShsKzEpJTMsdT0obCsyKSUzLGg9WzAsMCwwXSxmPVswLDAsMF0scD0tMTtwPD0xO3ArPTIpe3IucHVzaChzLHMrMixzKzEscysxLHMrMixzKzMpLGhbbF09cCxmW2xdPXA7Zm9yKHZhciBkPS0xO2Q8PTE7ZCs9Mil7aFtjXT1kO2Zvcih2YXIgZz0tMTtnPD0xO2crPTIpaFt1XT1nLGUucHVzaChoWzBdLGhbMV0saFsyXSxmWzBdLGZbMV0sZlsyXSkscys9MX12YXIgdj1jO2M9dSx1PXZ9dmFyIG09bih0LG5ldyBGbG9hdDMyQXJyYXkoZSkpLHk9bih0LG5ldyBVaW50MTZBcnJheShyKSx0LkVMRU1FTlRfQVJSQVlfQlVGRkVSKSx4PWkodCxbe2J1ZmZlcjptLHR5cGU6dC5GTE9BVCxzaXplOjMsb2Zmc2V0OjAsc3RyaWRlOjI0fSx7YnVmZmVyOm0sdHlwZTp0LkZMT0FULHNpemU6MyxvZmZzZXQ6MTIsc3RyaWRlOjI0fV0seSksYj1hKHQpO3JldHVybiBiLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxiLmF0dHJpYnV0ZXMubm9ybWFsLmxvY2F0aW9uPTEsbmV3IG8odCxtLHgsYil9O3ZhciBuPXQoXCJnbC1idWZmZXJcIiksaT10KFwiZ2wtdmFvXCIpLGE9dChcIi4vc2hhZGVyc1wiKS5iZztmdW5jdGlvbiBvKHQsZSxyLG4pe3RoaXMuZ2w9dCx0aGlzLmJ1ZmZlcj1lLHRoaXMudmFvPXIsdGhpcy5zaGFkZXI9bn12YXIgcz1vLnByb3RvdHlwZTtzLmRyYXc9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbz0hMSxzPTA7czwzOysrcylvPW98fGlbc107aWYobyl7dmFyIGw9dGhpcy5nbDtsLmVuYWJsZShsLlBPTFlHT05fT0ZGU0VUX0ZJTEwpLGwucG9seWdvbk9mZnNldCgxLDIpLHRoaXMuc2hhZGVyLmJpbmQoKSx0aGlzLnNoYWRlci51bmlmb3Jtcz17bW9kZWw6dCx2aWV3OmUscHJvamVjdGlvbjpyLGJvdW5kczpuLGVuYWJsZTppLGNvbG9yczphfSx0aGlzLnZhby5iaW5kKCksdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUywzNiksdGhpcy52YW8udW5iaW5kKCksbC5kaXNhYmxlKGwuUE9MWUdPTl9PRkZTRVRfRklMTCl9fSxzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZhby5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHtcIi4vc2hhZGVyc1wiOjIzNCxcImdsLWJ1ZmZlclwiOjIzOCxcImdsLXZhb1wiOjMyMH1dLDIzMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLHApe2kocyxlLHQpLGkocyxyLHMpO2Zvcih2YXIgeT0wLHg9MDt4PDI7Kyt4KXt1WzJdPWFbeF1bMl07Zm9yKHZhciBiPTA7YjwyOysrYil7dVsxXT1hW2JdWzFdO2Zvcih2YXIgXz0wO188MjsrK18pdVswXT1hW19dWzBdLGYobFt5XSx1LHMpLHkrPTF9fWZvcih2YXIgdz0tMSx4PTA7eDw4OysreCl7Zm9yKHZhciBrPWxbeF1bM10sQT0wO0E8MzsrK0EpY1t4XVtBXT1sW3hdW0FdL2s7cCYmKGNbeF1bMl0qPS0xKSxrPDAmJih3PDA/dz14OmNbeF1bMl08Y1t3XVsyXSYmKHc9eCkpfWlmKHc8MCl7dz0wO2Zvcih2YXIgVD0wO1Q8MzsrK1Qpe2Zvcih2YXIgTT0oVCsyKSUzLFM9KFQrMSklMyxFPS0xLEM9LTEsTD0wO0w8MjsrK0wpe3ZhciB6PUw8PFQsTz16KyhMPDxNKSsoMS1MPDxTKSxJPXorKDEtTDw8TSkrKEw8PFMpO28oY1t6XSxjW09dLGNbSV0saCk8MHx8KEw/RT0xOkM9MSl9aWYoRTwwfHxDPDApQz5FJiYod3w9MTw8VCk7ZWxzZXtmb3IodmFyIEw9MDtMPDI7KytMKXt2YXIgej1MPDxULE89eisoTDw8TSkrKDEtTDw8UyksST16KygxLUw8PE0pKyhMPDxTKSxEPWQoW2xbel0sbFtPXSxsW0ldLGxbeisoMTw8TSkrKDE8PFMpXV0pO0w/RT1EOkM9RH1DPkUmJih3fD0xPDxUKX19fWZvcih2YXIgUD03XncsUj0tMSx4PTA7eDw4OysreCl4IT09dyYmeCE9PVAmJihSPDA/Uj14OmNbUl1bMV0+Y1t4XVsxXSYmKFI9eCkpO2Zvcih2YXIgRj0tMSx4PTA7eDwzOysreCl7dmFyIEI9Ul4xPDx4O2lmKEIhPT13JiZCIT09UCl7RjwwJiYoRj1CKTt2YXIgUz1jW0JdO1NbMF08Y1tGXVswXSYmKEY9Qil9fWZvcih2YXIgTj0tMSx4PTA7eDwzOysreCl7dmFyIEI9Ul4xPDx4O2lmKEIhPT13JiZCIT09UCYmQiE9PUYpe048MCYmKE49Qik7dmFyIFM9Y1tCXTtTWzBdPmNbTl1bMF0mJihOPUIpfX12YXIgaj1nO2pbMF09alsxXT1qWzJdPTAsaltuLmxvZzIoRl5SKV09UiZGLGpbbi5sb2cyKFJeTildPVImTjt2YXIgVj03Xk47Vj09PXd8fFY9PT1QPyhWPTdeRixqW24ubG9nMihOXlYpXT1WJk4pOmpbbi5sb2cyKEZeVildPVYmRjtmb3IodmFyIFU9dixxPXcsVD0wO1Q8MzsrK1QpVVtUXT1xJjE8PFQ/LTE6MTtyZXR1cm4gbX07dmFyIG49dChcImJpdC10d2lkZGxlXCIpLGk9dChcImdsLW1hdDQvbXVsdGlwbHlcIiksYT10KFwic3BsaXQtcG9seWdvblwiKSxvPXQoXCJyb2J1c3Qtb3JpZW50YXRpb25cIikscz1uZXcgQXJyYXkoMTYpLGw9bmV3IEFycmF5KDgpLGM9bmV3IEFycmF5KDgpLHU9bmV3IEFycmF5KDMpLGg9WzAsMCwwXTtmdW5jdGlvbiBmKHQsZSxyKXtmb3IodmFyIG49MDtuPDQ7KytuKXt0W25dPXJbMTIrbl07Zm9yKHZhciBpPTA7aTwzOysraSl0W25dKz1lW2ldKnJbNCppK25dfX0hZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PDg7Kyt0KWxbdF09WzEsMSwxLDFdLGNbdF09WzEsMSwxXX0oKTt2YXIgcD1bWzAsMCwxLDAsMF0sWzAsMCwtMSwxLDBdLFswLC0xLDAsMSwwXSxbMCwxLDAsMSwwXSxbLTEsMCwwLDEsMF0sWzEsMCwwLDEsMF1dO2Z1bmN0aW9uIGQodCl7Zm9yKHZhciBlPTA7ZTxwLmxlbmd0aDsrK2UpaWYoKHQ9YS5wb3NpdGl2ZSh0LHBbZV0pKS5sZW5ndGg8MylyZXR1cm4gMDt2YXIgcj10WzBdLG49clswXS9yWzNdLGk9clsxXS9yWzNdLG89MDtmb3IoZT0xO2UrMTx0Lmxlbmd0aDsrK2Upe3ZhciBzPXRbZV0sbD10W2UrMV0sYz1zWzBdL3NbM10tbix1PXNbMV0vc1szXS1pLGg9bFswXS9sWzNdLW4sZj1sWzFdL2xbM10taTtvKz1NYXRoLmFicyhjKmYtdSpoKX1yZXR1cm4gb312YXIgZz1bMSwxLDFdLHY9WzAsMCwwXSxtPXtjdWJlRWRnZXM6ZyxheGlzOnZ9fSx7XCJiaXQtdHdpZGRsZVwiOjgzLFwiZ2wtbWF0NC9tdWx0aXBseVwiOjI2NCxcInJvYnVzdC1vcmllbnRhdGlvblwiOjQ5NSxcInNwbGl0LXBvbHlnb25cIjo1MTJ9XSwyMzM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPVtdLHM9WzAsMCwwXSxsPVswLDAsMF0sYz1bMCwwLDBdLHU9WzAsMCwwXTtvLnB1c2goMCwwLDEsMCwxLDEsMCwwLC0xLDAsMCwtMSwwLDEsMSwwLDEsLTEpO2Zvcih2YXIgaD0wO2g8MzsrK2gpe2Zvcih2YXIgZj1vLmxlbmd0aC8zfDAsZD0wO2Q8cltoXS5sZW5ndGg7KytkKXt2YXIgZz0rcltoXVtkXS54O28ucHVzaChnLDAsMSxnLDEsMSxnLDAsLTEsZywwLC0xLGcsMSwxLGcsMSwtMSl9dmFyIHY9by5sZW5ndGgvM3wwO3NbaF09ZixsW2hdPXYtZjtmb3IodmFyIGY9by5sZW5ndGgvM3wwLG09MDttPHJbaF0ubGVuZ3RoOysrbSl7dmFyIGc9K3JbaF1bbV0ueDtvLnB1c2goZywwLDEsZywxLDEsZywwLC0xLGcsMCwtMSxnLDEsMSxnLDEsLTEpfXZhciB2PW8ubGVuZ3RoLzN8MDtjW2hdPWYsdVtoXT12LWZ9dmFyIHk9bih0LG5ldyBGbG9hdDMyQXJyYXkobykpLHg9aSh0LFt7YnVmZmVyOnksdHlwZTp0LkZMT0FULHNpemU6MyxzdHJpZGU6MCxvZmZzZXQ6MH1dKSxiPWEodCk7cmV0dXJuIGIuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLG5ldyBwKHQseSx4LGIsbCxzLHUsYyl9O3ZhciBuPXQoXCJnbC1idWZmZXJcIiksaT10KFwiZ2wtdmFvXCIpLGE9dChcIi4vc2hhZGVyc1wiKS5saW5lLG89WzAsMCwwXSxzPVswLDAsMF0sbD1bMCwwLDBdLGM9WzAsMCwwXSx1PVsxLDFdO2Z1bmN0aW9uIGgodCl7cmV0dXJuIHRbMF09dFsxXT10WzJdPTAsdH1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHR9ZnVuY3Rpb24gcCh0LGUscixuLGksYSxvLHMpe3RoaXMuZ2w9dCx0aGlzLnZlcnRCdWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMuc2hhZGVyPW4sdGhpcy50aWNrQ291bnQ9aSx0aGlzLnRpY2tPZmZzZXQ9YSx0aGlzLmdyaWRDb3VudD1vLHRoaXMuZ3JpZE9mZnNldD1zfXZhciBkPXAucHJvdG90eXBlO2QuYmluZD1mdW5jdGlvbih0LGUscil7dGhpcy5zaGFkZXIuYmluZCgpLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1vZGVsPXQsdGhpcy5zaGFkZXIudW5pZm9ybXMudmlldz1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb249cix1WzBdPXRoaXMuZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLHVbMV09dGhpcy5nbC5kcmF3aW5nQnVmZmVySGVpZ2h0LHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlblNoYXBlPXUsdGhpcy52YW8uYmluZCgpfSxkLnVuYmluZD1mdW5jdGlvbigpe3RoaXMudmFvLnVuYmluZCgpfSxkLmRyYXdBeGlzTGluZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPWgocyk7dGhpcy5zaGFkZXIudW5pZm9ybXMubWFqb3JBeGlzPXMsYVt0XT1lWzFdW3RdLWVbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMubWlub3JBeGlzPWE7dmFyIG8sdT1mKGMscik7dVt0XSs9ZVswXVt0XSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9dSx0aGlzLnNoYWRlci51bmlmb3Jtcy5saW5lV2lkdGg9aSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1uLChvPWgobCkpWyh0KzIpJTNdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1vLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsNiksKG89aChsKSlbKHQrMSklM109MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5BeGlzPW8sdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyw2KX0sZC5kcmF3QXhpc1RpY2tzPWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYodGhpcy50aWNrQ291bnRbdF0pe3ZhciBhPWgobyk7YVt0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1ham9yQXhpcz1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1pbm9yQXhpcz1yLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPW4sdGhpcy5zaGFkZXIudW5pZm9ybXMubGluZVdpZHRoPWk7dmFyIHM9aChsKTtzW3RdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1zLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy50aWNrQ291bnRbdF0sdGhpcy50aWNrT2Zmc2V0W3RdKX19LGQuZHJhd0dyaWQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2lmKHRoaXMuZ3JpZENvdW50W3RdKXt2YXIgdT1oKHMpO3VbZV09clsxXVtlXS1yWzBdW2VdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1pbm9yQXhpcz11O3ZhciBwPWYoYyxuKTtwW2VdKz1yWzBdW2VdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1wO3ZhciBkPWgobyk7ZFt0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1ham9yQXhpcz1kO3ZhciBnPWgobCk7Z1t0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlbkF4aXM9Zyx0aGlzLnNoYWRlci51bmlmb3Jtcy5saW5lV2lkdGg9YSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1pLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy5ncmlkQ291bnRbdF0sdGhpcy5ncmlkT2Zmc2V0W3RdKX19LGQuZHJhd1plcm89ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPWgocyk7dGhpcy5zaGFkZXIudW5pZm9ybXMubWFqb3JBeGlzPW8sb1t0XT1yWzFdW3RdLXJbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMubWlub3JBeGlzPW87dmFyIHU9ZihjLG4pO3VbdF0rPXJbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMub2Zmc2V0PXU7dmFyIHA9aChsKTtwW2VdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1wLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmxpbmVXaWR0aD1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPWksdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyw2KX0sZC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52YW8uZGlzcG9zZSgpLHRoaXMudmVydEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0se1wiLi9zaGFkZXJzXCI6MjM0LFwiZ2wtYnVmZmVyXCI6MjM4LFwiZ2wtdmFvXCI6MzIwfV0sMjM0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsc2xpZnlcIiksaT10KFwiZ2wtc2hhZGVyXCIpLGE9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcXG5cXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XFxudW5pZm9ybSB2ZWMzIG9mZnNldCwgbWFqb3JBeGlzLCBtaW5vckF4aXMsIHNjcmVlbkF4aXM7XFxudW5pZm9ybSBmbG9hdCBsaW5lV2lkdGg7XFxudW5pZm9ybSB2ZWMyIHNjcmVlblNoYXBlO1xcblxcbnZlYzMgcHJvamVjdCh2ZWMzIHApIHtcXG4gIHZlYzQgcHAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwLCAxLjApO1xcbiAgcmV0dXJuIHBwLnh5eiAvIG1heChwcC53LCAwLjAwMDEpO1xcbn1cXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWMzIG1ham9yID0gcG9zaXRpb24ueCAqIG1ham9yQXhpcztcXG4gIHZlYzMgbWlub3IgPSBwb3NpdGlvbi55ICogbWlub3JBeGlzO1xcblxcbiAgdmVjMyB2UG9zaXRpb24gPSBtYWpvciArIG1pbm9yICsgb2Zmc2V0O1xcbiAgdmVjMyBwUG9zaXRpb24gPSBwcm9qZWN0KHZQb3NpdGlvbik7XFxuICB2ZWMzIG9mZnNldCA9IHByb2plY3QodlBvc2l0aW9uICsgc2NyZWVuQXhpcyAqIHBvc2l0aW9uLnopO1xcblxcbiAgdmVjMiBzY3JlZW4gPSBub3JtYWxpemUoKG9mZnNldCAtIHBQb3NpdGlvbikueHkgKiBzY3JlZW5TaGFwZSkgLyBzY3JlZW5TaGFwZTtcXG5cXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChwUG9zaXRpb24gKyB2ZWMzKDAuNSAqIHNjcmVlbiAqIGxpbmVXaWR0aCwgMCksIDEuMCk7XFxufVxcblwiXSksbz1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnVuaWZvcm0gdmVjNCBjb2xvcjtcXG52b2lkIG1haW4oKSB7XFxuICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XCJdKTtyLmxpbmU9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxhLG8sbnVsbCxbe25hbWU6XCJwb3NpdGlvblwiLHR5cGU6XCJ2ZWMzXCJ9XSl9O3ZhciBzPW4oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XFxuXFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcbnVuaWZvcm0gdmVjMyBvZmZzZXQsIGF4aXMsIGFsaWduRGlyLCBhbGlnbk9wdDtcXG51bmlmb3JtIGZsb2F0IHNjYWxlLCBhbmdsZSwgcGl4ZWxTY2FsZTtcXG51bmlmb3JtIHZlYzIgcmVzb2x1dGlvbjtcXG5cXG52ZWMzIHByb2plY3QodmVjMyBwKSB7XFxuICB2ZWM0IHBwID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocCwgMS4wKTtcXG4gIHJldHVybiBwcC54eXogLyBtYXgocHAudywgMC4wMDAxKTtcXG59XFxuXFxuZmxvYXQgY29tcHV0ZVZpZXdBbmdsZSh2ZWMzIGEsIHZlYzMgYikge1xcbiAgdmVjMyBBID0gcHJvamVjdChhKTtcXG4gIHZlYzMgQiA9IHByb2plY3QoYik7XFxuXFxuICByZXR1cm4gYXRhbihcXG4gICAgKEIueSAtIEEueSkgKiByZXNvbHV0aW9uLnksXFxuICAgIChCLnggLSBBLngpICogcmVzb2x1dGlvbi54XFxuICApO1xcbn1cXG5cXG5jb25zdCBmbG9hdCBQSSA9IDMuMTQxNTkyO1xcbmNvbnN0IGZsb2F0IFRXT19QSSA9IDIuMCAqIFBJO1xcbmNvbnN0IGZsb2F0IEhBTEZfUEkgPSAwLjUgKiBQSTtcXG5jb25zdCBmbG9hdCBPTkVfQU5EX0hBTEZfUEkgPSAxLjUgKiBQSTtcXG5cXG5pbnQgb3B0aW9uID0gaW50KGZsb29yKGFsaWduT3B0LnggKyAwLjAwMSkpO1xcbmZsb2F0IGh2X3JhdGlvID0gICAgICAgYWxpZ25PcHQueTtcXG5ib29sIGVuYWJsZUFsaWduID0gICAgKGFsaWduT3B0LnogIT0gMC4wKTtcXG5cXG5mbG9hdCBtb2RfYW5nbGUoZmxvYXQgYSkge1xcbiAgcmV0dXJuIG1vZChhLCBQSSk7XFxufVxcblxcbmZsb2F0IHBvc2l0aXZlX2FuZ2xlKGZsb2F0IGEpIHtcXG4gIHJldHVybiBtb2RfYW5nbGUoKGEgPCAwLjApID9cXG4gICAgYSArIFRXT19QSSA6XFxuICAgIGFcXG4gICk7XFxufVxcblxcbmZsb2F0IGxvb2tfdXB3YXJkcyhmbG9hdCBhKSB7XFxuICBmbG9hdCBiID0gcG9zaXRpdmVfYW5nbGUoYSk7XFxuICByZXR1cm4gKChiID4gSEFMRl9QSSkgJiYgKGIgPD0gT05FX0FORF9IQUxGX1BJKSkgP1xcbiAgICBiIC0gUEkgOlxcbiAgICBiO1xcbn1cXG5cXG5mbG9hdCBsb29rX2hvcml6b250YWxfb3JfdmVydGljYWwoZmxvYXQgYSwgZmxvYXQgcmF0aW8pIHtcXG4gIC8vIHJhdGlvIGNvbnRyb2xzIHRoZSByYXRpbyBiZXR3ZWVuIGJlaW5nIGhvcml6b250YWwgdG8gKHZlcnRpY2FsICsgaG9yaXpvbnRhbClcXG4gIC8vIGlmIHJhdGlvIGlzIHNldCB0byAwLjUgdGhlbiBpdCBpcyA1MCUsIDUwJS5cXG4gIC8vIHdoZW4gdXNpbmcgYSBoaWdoZXIgcmF0aW8gZS5nLiAwLjc1IHRoZSByZXN1bHQgd291bGRcXG4gIC8vIGxpa2VseSBiZSBtb3JlIGhvcml6b250YWwgdGhhbiB2ZXJ0aWNhbC5cXG5cXG4gIGZsb2F0IGIgPSBwb3NpdGl2ZV9hbmdsZShhKTtcXG5cXG4gIHJldHVyblxcbiAgICAoYiA8ICggICAgICByYXRpbykgKiBIQUxGX1BJKSA/IDAuMCA6XFxuICAgIChiIDwgKDIuMCAtIHJhdGlvKSAqIEhBTEZfUEkpID8gLUhBTEZfUEkgOlxcbiAgICAoYiA8ICgyLjAgKyByYXRpbykgKiBIQUxGX1BJKSA/IDAuMCA6XFxuICAgIChiIDwgKDQuMCAtIHJhdGlvKSAqIEhBTEZfUEkpID8gSEFMRl9QSSA6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wO1xcbn1cXG5cXG5mbG9hdCByb3VuZFRvKGZsb2F0IGEsIGZsb2F0IGIpIHtcXG4gIHJldHVybiBmbG9hdChiICogZmxvb3IoKGEgKyAwLjUgKiBiKSAvIGIpKTtcXG59XFxuXFxuZmxvYXQgbG9va19yb3VuZF9uX2RpcmVjdGlvbnMoZmxvYXQgYSwgaW50IG4pIHtcXG4gIGZsb2F0IGIgPSBwb3NpdGl2ZV9hbmdsZShhKTtcXG4gIGZsb2F0IGRpdiA9IFRXT19QSSAvIGZsb2F0KG4pO1xcbiAgZmxvYXQgYyA9IHJvdW5kVG8oYiwgZGl2KTtcXG4gIHJldHVybiBsb29rX3Vwd2FyZHMoYyk7XFxufVxcblxcbmZsb2F0IGFwcGx5QWxpZ25PcHRpb24oZmxvYXQgcmF3QW5nbGUsIGZsb2F0IGRlbHRhKSB7XFxuICByZXR1cm5cXG4gICAgKG9wdGlvbiA+ICAyKSA/IGxvb2tfcm91bmRfbl9kaXJlY3Rpb25zKHJhd0FuZ2xlICsgZGVsdGEsIG9wdGlvbikgOiAgICAgICAvLyBvcHRpb24gMy1uOiByb3VuZCB0byBuIGRpcmVjdGlvbnNcXG4gICAgKG9wdGlvbiA9PSAyKSA/IGxvb2tfaG9yaXpvbnRhbF9vcl92ZXJ0aWNhbChyYXdBbmdsZSArIGRlbHRhLCBodl9yYXRpbykgOiAvLyBob3Jpem9udGFsIG9yIHZlcnRpY2FsXFxuICAgIChvcHRpb24gPT0gMSkgPyByYXdBbmdsZSArIGRlbHRhIDogICAgICAgLy8gdXNlIGZyZWUgYW5nbGUsIGFuZCBmbGlwIHRvIGFsaWduIHdpdGggb25lIGRpcmVjdGlvbiBvZiB0aGUgYXhpc1xcbiAgICAob3B0aW9uID09IDApID8gbG9va191cHdhcmRzKHJhd0FuZ2xlKSA6IC8vIHVzZSBmcmVlIGFuZ2xlLCBhbmQgc3RheSB1cHdhcmRzXFxuICAgIChvcHRpb24gPT0tMSkgPyAwLjAgOiAgICAgICAgICAgICAgICAgICAgLy8gdXNlZnVsIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBhbGwgdGV4dHMgcmVtYWlucyBob3Jpem9udGFsXFxuICAgICAgICAgICAgICAgICAgICByYXdBbmdsZTsgICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHJldHVybiBiYWNrIHJhdyBpbnB1dCBhbmdsZVxcbn1cXG5cXG5ib29sIGlzQXhpc1RpdGxlID0gKGF4aXMueCA9PSAwLjApICYmXFxuICAgICAgICAgICAgICAgICAgIChheGlzLnkgPT0gMC4wKSAmJlxcbiAgICAgICAgICAgICAgICAgICAoYXhpcy56ID09IDAuMCk7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgLy9Db21wdXRlIHdvcmxkIG9mZnNldFxcbiAgZmxvYXQgYXhpc0Rpc3RhbmNlID0gcG9zaXRpb24uejtcXG4gIHZlYzMgZGF0YVBvc2l0aW9uID0gYXhpc0Rpc3RhbmNlICogYXhpcyArIG9mZnNldDtcXG5cXG4gIGZsb2F0IGJldGEgPSBhbmdsZTsgLy8gaS5lLiB1c2VyIGRlZmluZWQgYXR0cmlidXRlcyBmb3IgZWFjaCB0aWNrXFxuXFxuICBmbG9hdCBheGlzQW5nbGU7XFxuICBmbG9hdCBjbGlwQW5nbGU7XFxuICBmbG9hdCBmbGlwO1xcblxcbiAgaWYgKGVuYWJsZUFsaWduKSB7XFxuICAgIGF4aXNBbmdsZSA9IChpc0F4aXNUaXRsZSkgPyBIQUxGX1BJIDpcXG4gICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZVZpZXdBbmdsZShkYXRhUG9zaXRpb24sIGRhdGFQb3NpdGlvbiArIGF4aXMpO1xcbiAgICBjbGlwQW5nbGUgPSBjb21wdXRlVmlld0FuZ2xlKGRhdGFQb3NpdGlvbiwgZGF0YVBvc2l0aW9uICsgYWxpZ25EaXIpO1xcblxcbiAgICBheGlzQW5nbGUgKz0gKHNpbihheGlzQW5nbGUpIDwgMC4wKSA/IFBJIDogMC4wO1xcbiAgICBjbGlwQW5nbGUgKz0gKHNpbihjbGlwQW5nbGUpIDwgMC4wKSA/IFBJIDogMC4wO1xcblxcbiAgICBmbGlwID0gKGRvdCh2ZWMyKGNvcyhheGlzQW5nbGUpLCBzaW4oYXhpc0FuZ2xlKSksXFxuICAgICAgICAgICAgICAgIHZlYzIoc2luKGNsaXBBbmdsZSksLWNvcyhjbGlwQW5nbGUpKSkgPiAwLjApID8gMS4wIDogMC4wO1xcblxcbiAgICBiZXRhICs9IGFwcGx5QWxpZ25PcHRpb24oY2xpcEFuZ2xlLCBmbGlwICogUEkpO1xcbiAgfVxcblxcbiAgLy9Db21wdXRlIHBsYW5lIG9mZnNldFxcbiAgdmVjMiBwbGFuZUNvb3JkID0gcG9zaXRpb24ueHkgKiBwaXhlbFNjYWxlO1xcblxcbiAgbWF0MiBwbGFuZVhmb3JtID0gc2NhbGUgKiBtYXQyKFxcbiAgICAgY29zKGJldGEpLCBzaW4oYmV0YSksXFxuICAgIC1zaW4oYmV0YSksIGNvcyhiZXRhKVxcbiAgKTtcXG5cXG4gIHZlYzIgdmlld09mZnNldCA9IDIuMCAqIHBsYW5lWGZvcm0gKiBwbGFuZUNvb3JkIC8gcmVzb2x1dGlvbjtcXG5cXG4gIC8vQ29tcHV0ZSBjbGlwIHBvc2l0aW9uXFxuICB2ZWMzIGNsaXBQb3NpdGlvbiA9IHByb2plY3QoZGF0YVBvc2l0aW9uKTtcXG5cXG4gIC8vQXBwbHkgdGV4dCBvZmZzZXQgaW4gY2xpcCBjb29yZGluYXRlc1xcbiAgY2xpcFBvc2l0aW9uICs9IHZlYzModmlld09mZnNldCwgMC4wKTtcXG5cXG4gIC8vRG9uZVxcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KGNsaXBQb3NpdGlvbiwgMS4wKTtcXG59XCJdKSxsPW4oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxudW5pZm9ybSB2ZWM0IGNvbG9yO1xcbnZvaWQgbWFpbigpIHtcXG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cIl0pO3IudGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LHMsbCxudWxsLFt7bmFtZTpcInBvc2l0aW9uXCIsdHlwZTpcInZlYzNcIn1dKX07dmFyIGM9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWw7XFxuXFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcbnVuaWZvcm0gdmVjMyBlbmFibGU7XFxudW5pZm9ybSB2ZWMzIGJvdW5kc1syXTtcXG5cXG52YXJ5aW5nIHZlYzMgY29sb3JDaGFubmVsO1xcblxcbnZvaWQgbWFpbigpIHtcXG5cXG4gIHZlYzMgc2lnbkF4aXMgPSBzaWduKGJvdW5kc1sxXSAtIGJvdW5kc1swXSk7XFxuXFxuICB2ZWMzIHJlYWxOb3JtYWwgPSBzaWduQXhpcyAqIG5vcm1hbDtcXG5cXG4gIGlmKGRvdChyZWFsTm9ybWFsLCBlbmFibGUpID4gMC4wKSB7XFxuICAgIHZlYzMgbWluUmFuZ2UgPSBtaW4oYm91bmRzWzBdLCBib3VuZHNbMV0pO1xcbiAgICB2ZWMzIG1heFJhbmdlID0gbWF4KGJvdW5kc1swXSwgYm91bmRzWzFdKTtcXG4gICAgdmVjMyBuUG9zaXRpb24gPSBtaXgobWluUmFuZ2UsIG1heFJhbmdlLCAwLjUgKiAocG9zaXRpb24gKyAxLjApKTtcXG4gICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChuUG9zaXRpb24sIDEuMCk7XFxuICB9IGVsc2Uge1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XFxuICB9XFxuXFxuICBjb2xvckNoYW5uZWwgPSBhYnMocmVhbE5vcm1hbCk7XFxufVwiXSksdT1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnVuaWZvcm0gdmVjNCBjb2xvcnNbM107XFxuXFxudmFyeWluZyB2ZWMzIGNvbG9yQ2hhbm5lbDtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBnbF9GcmFnQ29sb3IgPSBjb2xvckNoYW5uZWwueCAqIGNvbG9yc1swXSArXFxuICAgICAgICAgICAgICAgICBjb2xvckNoYW5uZWwueSAqIGNvbG9yc1sxXSArXFxuICAgICAgICAgICAgICAgICBjb2xvckNoYW5uZWwueiAqIGNvbG9yc1syXTtcXG59XCJdKTtyLmJnPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQsYyx1LG51bGwsW3tuYW1lOlwicG9zaXRpb25cIix0eXBlOlwidmVjM1wifSx7bmFtZTpcIm5vcm1hbFwiLHR5cGU6XCJ2ZWMzXCJ9XSl9fSx7XCJnbC1zaGFkZXJcIjoyOTgsZ2xzbGlmeTo0MDJ9XSwyMzU6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEscyxsKXt2YXIgdT1uKHQpLGg9aSh0LFt7YnVmZmVyOnUsc2l6ZTozfV0pLGY9byh0KTtmLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MDt2YXIgcD1uZXcgYyh0LGYsdSxoKTtyZXR1cm4gcC51cGRhdGUoZSxyLGEscyxsKSxwfTt2YXIgbj10KFwiZ2wtYnVmZmVyXCIpLGk9dChcImdsLXZhb1wiKSxhPXQoXCJ2ZWN0b3JpemUtdGV4dFwiKSxvPXQoXCIuL3NoYWRlcnNcIikudGV4dCxzPXdpbmRvd3x8ci5nbG9iYWx8fHt9LGw9cy5fX1RFWFRfQ0FDSEV8fHt9O3MuX19URVhUX0NBQ0hFPXt9O2Z1bmN0aW9uIGModCxlLHIsbil7dGhpcy5nbD10LHRoaXMuc2hhZGVyPWUsdGhpcy5idWZmZXI9cix0aGlzLnZhbz1uLHRoaXMudGlja09mZnNldD10aGlzLnRpY2tDb3VudD10aGlzLmxhYmVsT2Zmc2V0PXRoaXMubGFiZWxDb3VudD1udWxsfXZhciB1PWMucHJvdG90eXBlLGg9WzAsMF07dS5iaW5kPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMudmFvLmJpbmQoKSx0aGlzLnNoYWRlci5iaW5kKCk7dmFyIGk9dGhpcy5zaGFkZXIudW5pZm9ybXM7aS5tb2RlbD10LGkudmlldz1lLGkucHJvamVjdGlvbj1yLGkucGl4ZWxTY2FsZT1uLGhbMF09dGhpcy5nbC5kcmF3aW5nQnVmZmVyV2lkdGgsaFsxXT10aGlzLmdsLmRyYXdpbmdCdWZmZXJIZWlnaHQsdGhpcy5zaGFkZXIudW5pZm9ybXMucmVzb2x1dGlvbj1ofSx1LnVuYmluZD1mdW5jdGlvbigpe3RoaXMudmFvLnVuYmluZCgpfSx1LnVwZGF0ZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBvPVtdO2Z1bmN0aW9uIHModCxlLHIsbixpLHMpe3ZhciBjPWxbcl07Y3x8KGM9bFtyXT17fSk7dmFyIHU9Y1tlXTt1fHwodT1jW2VdPWZ1bmN0aW9uKHQsZSl7dHJ5e3JldHVybiBhKHQsZSl9Y2F0Y2goZSl7cmV0dXJuIGNvbnNvbGUud2FybignZXJyb3IgdmVjdG9yaXppbmcgdGV4dDpcIicrdCsnXCIgZXJyb3I6JyxlKSx7Y2VsbHM6W10scG9zaXRpb25zOltdfX19KGUse3RyaWFuZ2xlczohMCxmb250OnIsdGV4dEFsaWduOlwiY2VudGVyXCIsdGV4dEJhc2VsaW5lOlwibWlkZGxlXCIsbGluZVNwYWNpbmc6aSxzdHlsZXRhZ3M6c30pKTtmb3IodmFyIGg9KG58fDEyKS8xMixmPXUucG9zaXRpb25zLHA9dS5jZWxscyxkPTAsZz1wLmxlbmd0aDtkPGc7KytkKWZvcih2YXIgdj1wW2RdLG09MjttPj0wOy0tbSl7dmFyIHk9Zlt2W21dXTtvLnB1c2goaCp5WzBdLC1oKnlbMV0sdCl9fWZvcih2YXIgYz1bMCwwLDBdLHU9WzAsMCwwXSxoPVswLDAsMF0sZj1bMCwwLDBdLHA9e2JyZWFrbGluZXM6ITAsYm9sZHM6ITAsaXRhbGljczohMCxzdWJzY3JpcHRzOiEwLHN1cGVyc2NyaXB0czohMH0sZD0wO2Q8MzsrK2Qpe2hbZF09by5sZW5ndGgvM3wwLHMoLjUqKHRbMF1bZF0rdFsxXVtkXSksZVtkXSxyW2RdLDEyLDEuMjUscCksZltkXT0oby5sZW5ndGgvM3wwKS1oW2RdLGNbZF09by5sZW5ndGgvM3wwO2Zvcih2YXIgZz0wO2c8bltkXS5sZW5ndGg7KytnKW5bZF1bZ10udGV4dCYmcyhuW2RdW2ddLngsbltkXVtnXS50ZXh0LG5bZF1bZ10uZm9udHx8aSxuW2RdW2ddLmZvbnRTaXplfHwxMiwxLjI1LHApO3VbZF09KG8ubGVuZ3RoLzN8MCktY1tkXX10aGlzLmJ1ZmZlci51cGRhdGUobyksdGhpcy50aWNrT2Zmc2V0PWMsdGhpcy50aWNrQ291bnQ9dSx0aGlzLmxhYmVsT2Zmc2V0PWgsdGhpcy5sYWJlbENvdW50PWZ9LHUuZHJhd1RpY2tzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dGhpcy50aWNrQ291bnRbdF0mJih0aGlzLnNoYWRlci51bmlmb3Jtcy5heGlzPWEsdGhpcy5zaGFkZXIudW5pZm9ybXMuY29sb3I9aSx0aGlzLnNoYWRlci51bmlmb3Jtcy5hbmdsZT1yLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjYWxlPWUsdGhpcy5zaGFkZXIudW5pZm9ybXMub2Zmc2V0PW4sdGhpcy5zaGFkZXIudW5pZm9ybXMuYWxpZ25EaXI9byx0aGlzLnNoYWRlci51bmlmb3Jtcy5hbGlnbk9wdD1zLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy50aWNrQ291bnRbdF0sdGhpcy50aWNrT2Zmc2V0W3RdKSl9LHUuZHJhd0xhYmVsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dGhpcy5sYWJlbENvdW50W3RdJiYodGhpcy5zaGFkZXIudW5pZm9ybXMuYXhpcz1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPWksdGhpcy5zaGFkZXIudW5pZm9ybXMuYW5nbGU9cix0aGlzLnNoYWRlci51bmlmb3Jtcy5zY2FsZT1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1uLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFsaWduRGlyPW8sdGhpcy5zaGFkZXIudW5pZm9ybXMuYWxpZ25PcHQ9cyx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLHRoaXMubGFiZWxDb3VudFt0XSx0aGlzLmxhYmVsT2Zmc2V0W3RdKSl9LHUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnZhby5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpfX0pLmNhbGwodGhpcyx0KFwiX3Byb2Nlc3NcIikpfSx7XCIuL3NoYWRlcnNcIjoyMzQsX3Byb2Nlc3M6NDc1LFwiZ2wtYnVmZmVyXCI6MjM4LFwiZ2wtdmFvXCI6MzIwLFwidmVjdG9yaXplLXRleHRcIjo1MzV9XSwyMzY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9dCtcIlwiLG49ci5pbmRleE9mKFwiLlwiKSxpPTA7bj49MCYmKGk9ci5sZW5ndGgtbi0xKTt2YXIgYT1NYXRoLnBvdygxMCxpKSxvPU1hdGgucm91bmQodCplKmEpLHM9bytcIlwiO2lmKHMuaW5kZXhPZihcImVcIik+PTApcmV0dXJuIHM7dmFyIGw9by9hLGM9byVhO288MD8obD0wfC1NYXRoLmNlaWwobCksYz0wfC1jKToobD0wfE1hdGguZmxvb3IobCksY3w9MCk7dmFyIHU9XCJcIitsO2lmKG88MCYmKHU9XCItXCIrdSksaSl7Zm9yKHZhciBoPVwiXCIrYztoLmxlbmd0aDxpOyloPVwiMFwiK2g7cmV0dXJuIHUrXCIuXCIraH1yZXR1cm4gdX1yLmNyZWF0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxpPTA7aTwzOysraSl7Zm9yKHZhciBhPVtdLG89KHRbMF1baV0sdFsxXVtpXSwwKTtvKmVbaV08PXRbMV1baV07KytvKWEucHVzaCh7eDpvKmVbaV0sdGV4dDpuKGVbaV0sbyl9KTtmb3IodmFyIG89LTE7byplW2ldPj10WzBdW2ldOy0tbylhLnB1c2goe3g6byplW2ldLHRleHQ6bihlW2ldLG8pfSk7ci5wdXNoKGEpfXJldHVybiByfSxyLmVxdWFsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjwzOysrcil7aWYodFtyXS5sZW5ndGghPT1lW3JdLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHRbcl0ubGVuZ3RoOysrbil7dmFyIGk9dFtyXVtuXSxhPWVbcl1bbl07aWYoaS54IT09YS54fHxpLnRleHQhPT1hLnRleHR8fGkuZm9udCE9PWEuZm9udHx8aS5mb250Q29sb3IhPT1hLmZvbnRDb2xvcnx8aS5mb250U2l6ZSE9PWEuZm9udFNpemV8fGkuZHghPT1hLmR4fHxpLmR5IT09YS5keSlyZXR1cm4hMX19cmV0dXJuITB9fSx7fV0sMjM3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwsaCl7dmFyIGY9ZS5tb2RlbHx8YyxwPWUudmlld3x8YyxtPWUucHJvamVjdGlvbnx8Yyx5PWUuX29ydGhvfHwhMSx4PXQuYm91bmRzLGI9KGg9aHx8YShmLHAsbSx4LHkpKS5heGlzO28odSxwLGYpLG8odSxtLHUpO2Zvcih2YXIgXz1nLHc9MDt3PDM7Kyt3KV9bd10ubG89MS8wLF9bd10uaGk9LTEvMCxfW3ddLnBpeGVsc1BlckRhdGFVbml0PTEvMDt2YXIgaz1uKHModSx1KSk7cyh1LHUpO2Zvcih2YXIgQT0wO0E8MzsrK0Epe3ZhciBUPShBKzEpJTMsTT0oQSsyKSUzLFM9djt0OmZvcih2YXIgdz0wO3c8MjsrK3cpe3ZhciBFPVtdO2lmKGJbQV08MCE9ISF3KXtTW0FdPXhbd11bQV07Zm9yKHZhciBDPTA7QzwyOysrQyl7U1tUXT14W0Ned11bVF07Zm9yKHZhciBMPTA7TDwyOysrTClTW01dPXhbTF5DXnddW01dLEUucHVzaChTLnNsaWNlKCkpfWZvcih2YXIgej15PzU6NCxDPXo7Qz09PXo7KytDKXtpZigwPT09RS5sZW5ndGgpY29udGludWUgdDtFPWkucG9zaXRpdmUoRSxrW0NdKX1mb3IodmFyIEM9MDtDPEUubGVuZ3RoOysrQylmb3IodmFyIE09RVtDXSxPPWQodix1LE0scixsKSxMPTA7TDwzOysrTClfW0xdLmxvPU1hdGgubWluKF9bTF0ubG8sTVtMXSksX1tMXS5oaT1NYXRoLm1heChfW0xdLmhpLE1bTF0pLEwhPT1BJiYoX1tMXS5waXhlbHNQZXJEYXRhVW5pdD1NYXRoLm1pbihfW0xdLnBpeGVsc1BlckRhdGFVbml0LE1hdGguYWJzKE9bTF0pKSl9fX1yZXR1cm4gX307dmFyIG49dChcImV4dHJhY3QtZnJ1c3R1bS1wbGFuZXNcIiksaT10KFwic3BsaXQtcG9seWdvblwiKSxhPXQoXCIuL2xpYi9jdWJlLmpzXCIpLG89dChcImdsLW1hdDQvbXVsdGlwbHlcIikscz10KFwiZ2wtbWF0NC90cmFuc3Bvc2VcIiksbD10KFwiZ2wtdmVjNC90cmFuc2Zvcm1NYXQ0XCIpLGM9bmV3IEZsb2F0MzJBcnJheShbMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0pLHU9bmV3IEZsb2F0MzJBcnJheSgxNik7ZnVuY3Rpb24gaCh0LGUscil7dGhpcy5sbz10LHRoaXMuaGk9ZSx0aGlzLnBpeGVsc1BlckRhdGFVbml0PXJ9dmFyIGY9WzAsMCwwLDFdLHA9WzAsMCwwLDFdO2Z1bmN0aW9uIGQodCxlLHIsbixpKXtmb3IodmFyIGE9MDthPDM7KythKXtmb3IodmFyIG89ZixzPXAsYz0wO2M8MzsrK2Mpc1tjXT1vW2NdPXJbY107c1szXT1vWzNdPTEsc1thXSs9MSxsKHMscyxlKSxzWzNdPDAmJih0W2FdPTEvMCksb1thXS09MSxsKG8sbyxlKSxvWzNdPDAmJih0W2FdPTEvMCk7dmFyIHU9KG9bMF0vb1szXS1zWzBdL3NbM10pKm4saD0ob1sxXS9vWzNdLXNbMV0vc1szXSkqaTt0W2FdPS4yNSpNYXRoLnNxcnQodSp1K2gqaCl9cmV0dXJuIHR9dmFyIGc9W25ldyBoKDEvMCwtMS8wLDEvMCksbmV3IGgoMS8wLC0xLzAsMS8wKSxuZXcgaCgxLzAsLTEvMCwxLzApXSx2PVswLDAsMF19LHtcIi4vbGliL2N1YmUuanNcIjoyMzIsXCJleHRyYWN0LWZydXN0dW0tcGxhbmVzXCI6MjIxLFwiZ2wtbWF0NC9tdWx0aXBseVwiOjI2NCxcImdsLW1hdDQvdHJhbnNwb3NlXCI6MjczLFwiZ2wtdmVjNC90cmFuc2Zvcm1NYXQ0XCI6MzkxLFwic3BsaXQtcG9seWdvblwiOjUxMn1dLDIzODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJ0eXBlZGFycmF5LXBvb2xcIiksaT10KFwibmRhcnJheS1vcHNcIiksYT10KFwibmRhcnJheVwiKSxvPVtcInVpbnQ4XCIsXCJ1aW50OF9jbGFtcGVkXCIsXCJ1aW50MTZcIixcInVpbnQzMlwiLFwiaW50OFwiLFwiaW50MTZcIixcImludDMyXCIsXCJmbG9hdDMyXCJdO2Z1bmN0aW9uIHModCxlLHIsbixpKXt0aGlzLmdsPXQsdGhpcy50eXBlPWUsdGhpcy5oYW5kbGU9cix0aGlzLmxlbmd0aD1uLHRoaXMudXNhZ2U9aX12YXIgbD1zLnByb3RvdHlwZTtmdW5jdGlvbiBjKHQsZSxyLG4saSxhKXt2YXIgbz1pLmxlbmd0aCppLkJZVEVTX1BFUl9FTEVNRU5UO2lmKGE8MClyZXR1cm4gdC5idWZmZXJEYXRhKGUsaSxuKSxvO2lmKG8rYT5yKXRocm93IG5ldyBFcnJvcihcImdsLWJ1ZmZlcjogSWYgcmVzaXppbmcgYnVmZmVyLCBtdXN0IG5vdCBzcGVjaWZ5IG9mZnNldFwiKTtyZXR1cm4gdC5idWZmZXJTdWJEYXRhKGUsYSxpKSxyfWZ1bmN0aW9uIHUodCxlKXtmb3IodmFyIHI9bi5tYWxsb2ModC5sZW5ndGgsZSksaT10Lmxlbmd0aCxhPTA7YTxpOysrYSlyW2FdPXRbYV07cmV0dXJuIHJ9bC5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5nbC5iaW5kQnVmZmVyKHRoaXMudHlwZSx0aGlzLmhhbmRsZSl9LGwudW5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5nbC5iaW5kQnVmZmVyKHRoaXMudHlwZSxudWxsKX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5oYW5kbGUpfSxsLnVwZGF0ZT1mdW5jdGlvbih0LGUpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlJiYoZT0tMSksdGhpcy5iaW5kKCksXCJvYmplY3RcIj09dHlwZW9mIHQmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiB0LnNoYXBlKXt2YXIgcj10LmR0eXBlO2lmKG8uaW5kZXhPZihyKTwwJiYocj1cImZsb2F0MzJcIiksdGhpcy50eXBlPT09dGhpcy5nbC5FTEVNRU5UX0FSUkFZX0JVRkZFUilyPWdsLmdldEV4dGVuc2lvbihcIk9FU19lbGVtZW50X2luZGV4X3VpbnRcIikmJlwidWludDE2XCIhPT1yP1widWludDMyXCI6XCJ1aW50MTZcIjtpZihyPT09dC5kdHlwZSYmZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MSxuPWUubGVuZ3RoLTE7bj49MDstLW4pe2lmKGVbbl0hPT1yKXJldHVybiExO3IqPXRbbl19cmV0dXJuITB9KHQuc2hhcGUsdC5zdHJpZGUpKTA9PT10Lm9mZnNldCYmdC5kYXRhLmxlbmd0aD09PXQuc2hhcGVbMF0/dGhpcy5sZW5ndGg9Yyh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLHQuZGF0YSxlKTp0aGlzLmxlbmd0aD1jKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsdC5kYXRhLnN1YmFycmF5KHQub2Zmc2V0LHQuc2hhcGVbMF0pLGUpO2Vsc2V7dmFyIHM9bi5tYWxsb2ModC5zaXplLHIpLGw9YShzLHQuc2hhcGUpO2kuYXNzaWduKGwsdCksdGhpcy5sZW5ndGg9Yyh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLGU8MD9zOnMuc3ViYXJyYXkoMCx0LnNpemUpLGUpLG4uZnJlZShzKX19ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgaDtoPXRoaXMudHlwZT09PXRoaXMuZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVI/dSh0LFwidWludDE2XCIpOnUodCxcImZsb2F0MzJcIiksdGhpcy5sZW5ndGg9Yyh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLGU8MD9oOmguc3ViYXJyYXkoMCx0Lmxlbmd0aCksZSksbi5mcmVlKGgpfWVsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIHQmJlwibnVtYmVyXCI9PXR5cGVvZiB0Lmxlbmd0aCl0aGlzLmxlbmd0aD1jKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsdCxlKTtlbHNle2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0JiZ2b2lkIDAhPT10KXRocm93IG5ldyBFcnJvcihcImdsLWJ1ZmZlcjogSW52YWxpZCBkYXRhIHR5cGVcIik7aWYoZT49MCl0aHJvdyBuZXcgRXJyb3IoXCJnbC1idWZmZXI6IENhbm5vdCBzcGVjaWZ5IG9mZnNldCB3aGVuIHJlc2l6aW5nIGJ1ZmZlclwiKTsodHw9MCk8PTAmJih0PTEpLHRoaXMuZ2wuYnVmZmVyRGF0YSh0aGlzLnR5cGUsMHx0LHRoaXMudXNhZ2UpLHRoaXMubGVuZ3RoPXR9fSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7aWYocj1yfHx0LkFSUkFZX0JVRkZFUixuPW58fHQuRFlOQU1JQ19EUkFXLHIhPT10LkFSUkFZX0JVRkZFUiYmciE9PXQuRUxFTUVOVF9BUlJBWV9CVUZGRVIpdGhyb3cgbmV3IEVycm9yKFwiZ2wtYnVmZmVyOiBJbnZhbGlkIHR5cGUgZm9yIHdlYmdsIGJ1ZmZlciwgbXVzdCBiZSBlaXRoZXIgZ2wuQVJSQVlfQlVGRkVSIG9yIGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSXCIpO2lmKG4hPT10LkRZTkFNSUNfRFJBVyYmbiE9PXQuU1RBVElDX0RSQVcmJm4hPT10LlNUUkVBTV9EUkFXKXRocm93IG5ldyBFcnJvcihcImdsLWJ1ZmZlcjogSW52YWxpZCB1c2FnZSBmb3IgYnVmZmVyLCBtdXN0IGJlIGVpdGhlciBnbC5EWU5BTUlDX0RSQVcsIGdsLlNUQVRJQ19EUkFXIG9yIGdsLlNUUkVBTV9EUkFXXCIpO3ZhciBpPXQuY3JlYXRlQnVmZmVyKCksYT1uZXcgcyh0LHIsaSwwLG4pO3JldHVybiBhLnVwZGF0ZShlKSxhfX0se25kYXJyYXk6NDQzLFwibmRhcnJheS1vcHNcIjo0MzcsXCJ0eXBlZGFycmF5LXBvb2xcIjo1MzB9XSwyMzk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2wtdmVjM1wiKSxpPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspaWYodFtyXT49ZSlyZXR1cm4gci0xO3JldHVybiByfSxhPW4uY3JlYXRlKCksbz1uLmNyZWF0ZSgpLHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PGU/ZTp0PnI/cjp0fSxsPWZ1bmN0aW9uKHQsZSxyLGwpe3ZhciBjPXRbMF0sdT10WzFdLGg9dFsyXSxmPXJbMF0ubGVuZ3RoLHA9clsxXS5sZW5ndGgsZD1yWzJdLmxlbmd0aCxnPWkoclswXSxjKSx2PWkoclsxXSx1KSxtPWkoclsyXSxoKSx5PWcrMSx4PXYrMSxiPW0rMTtpZihsJiYoZz1zKGcsMCxmLTEpLHk9cyh5LDAsZi0xKSx2PXModiwwLHAtMSkseD1zKHgsMCxwLTEpLG09cyhtLDAsZC0xKSxiPXMoYiwwLGQtMSkpLGc8MHx8djwwfHxtPDB8fHk+PWZ8fHg+PXB8fGI+PWQpcmV0dXJuIG4uY3JlYXRlKCk7dmFyIF89KGMtclswXVtnXSkvKHJbMF1beV0tclswXVtnXSksdz0odS1yWzFdW3ZdKS8oclsxXVt4XS1yWzFdW3ZdKSxrPShoLXJbMl1bbV0pLyhyWzJdW2JdLXJbMl1bbV0pOyhfPDB8fF8+MXx8aXNOYU4oXykpJiYoXz0wKSwodzwwfHx3PjF8fGlzTmFOKHcpKSYmKHc9MCksKGs8MHx8az4xfHxpc05hTihrKSkmJihrPTApO3ZhciBBPW0qZipwLFQ9YipmKnAsTT12KmYsUz14KmYsRT1nLEM9eSxMPWVbTStBK0VdLHo9ZVtNK0ErQ10sTz1lW1MrQStFXSxJPWVbUytBK0NdLEQ9ZVtNK1QrRV0sUD1lW00rVCtDXSxSPWVbUytUK0VdLEY9ZVtTK1QrQ10sQj1uLmNyZWF0ZSgpO3JldHVybiBuLmxlcnAoQixMLHosXyksbi5sZXJwKGEsTyxJLF8pLG4ubGVycChCLEIsYSx3KSxuLmxlcnAoYSxELFAsXyksbi5sZXJwKG8sUixGLF8pLG4ubGVycChhLGEsbyx3KSxuLmxlcnAoQixCLGEsayksQn07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI7cj10LnBvc2l0aW9ucz90LnBvc2l0aW9uczpmdW5jdGlvbih0KXtmb3IodmFyIGU9dFswXSxyPXRbMV0sbj10WzJdLGk9W10sYT0wO2E8bi5sZW5ndGg7YSsrKWZvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKWZvcih2YXIgcz0wO3M8ZS5sZW5ndGg7cysrKWkucHVzaChbblthXSxyW29dLGVbc11dKTtyZXR1cm4gaX0odC5tZXNoZ3JpZCk7dmFyIGk9dC5tZXNoZ3JpZCxhPXQudmVjdG9ycyxvPXtwb3NpdGlvbnM6W10sdmVydGV4SW50ZW5zaXR5OltdLHZlcnRleEludGVuc2l0eUJvdW5kczp0LnZlcnRleEludGVuc2l0eUJvdW5kcyx2ZXJ0ZXhOb3JtYWxzOltdLHZlY3RvcnM6W10sY2VsbHM6W10sY29uZU9mZnNldDp0LmNvbmVPZmZzZXQsY29sb3JtYXA6dC5jb2xvcm1hcH07aWYoMD09PXQucG9zaXRpb25zLmxlbmd0aClyZXR1cm4gZSYmKGVbMF09WzAsMCwwXSxlWzFdPVswLDAsMF0pLG87Zm9yKHZhciBzPTAsYz0xLzAsdT0tMS8wLGg9MS8wLGY9LTEvMCxwPTEvMCxkPS0xLzAsZz1udWxsLHY9bnVsbCxtPVtdLHk9MS8wLHg9MDt4PHIubGVuZ3RoO3grKyl7dmFyIGIsXz1yW3hdO2M9TWF0aC5taW4oX1swXSxjKSx1PU1hdGgubWF4KF9bMF0sdSksaD1NYXRoLm1pbihfWzFdLGgpLGY9TWF0aC5tYXgoX1sxXSxmKSxwPU1hdGgubWluKF9bMl0scCksZD1NYXRoLm1heChfWzJdLGQpLGI9aT9sKF8sYSxpLCEwKTphW3hdLG4ubGVuZ3RoKGIpPnMmJihzPW4ubGVuZ3RoKGIpKSx4JiYoeT1NYXRoLm1pbih5LDIqbi5kaXN0YW5jZShnLF8pLyhuLmxlbmd0aCh2KStuLmxlbmd0aChiKSkpKSxnPV8sdj1iLG0ucHVzaChiKX12YXIgdz1bYyxoLHBdLGs9W3UsZixkXTtlJiYoZVswXT13LGVbMV09ayksMD09PXMmJihzPTEpO3ZhciBBPTEvcztpc0Zpbml0ZSh5KSYmIWlzTmFOKHkpfHwoeT0xKSxvLnZlY3RvclNjYWxlPXk7dmFyIFQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPW4uY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PXQmJm4uc2V0KGksdCxlLHIpLGl9KDAsMSwwKSxNPXQuY29uZVNpemV8fC41O3QuYWJzb2x1dGVDb25lU2l6ZSYmKE09dC5hYnNvbHV0ZUNvbmVTaXplKkEpLG8uY29uZVNjYWxlPU07eD0wO2Zvcih2YXIgUz0wO3g8ci5sZW5ndGg7eCsrKWZvcih2YXIgRT0oXz1yW3hdKVswXSxDPV9bMV0sTD1fWzJdLHo9bVt4XSxPPW4ubGVuZ3RoKHopKkEsST0wO0k8ODtJKyspe28ucG9zaXRpb25zLnB1c2goW0UsQyxMLFMrK10pLG8ucG9zaXRpb25zLnB1c2goW0UsQyxMLFMrK10pLG8ucG9zaXRpb25zLnB1c2goW0UsQyxMLFMrK10pLG8ucG9zaXRpb25zLnB1c2goW0UsQyxMLFMrK10pLG8ucG9zaXRpb25zLnB1c2goW0UsQyxMLFMrK10pLG8ucG9zaXRpb25zLnB1c2goW0UsQyxMLFMrK10pLG8udmVjdG9ycy5wdXNoKHopLG8udmVjdG9ycy5wdXNoKHopLG8udmVjdG9ycy5wdXNoKHopLG8udmVjdG9ycy5wdXNoKHopLG8udmVjdG9ycy5wdXNoKHopLG8udmVjdG9ycy5wdXNoKHopLG8udmVydGV4SW50ZW5zaXR5LnB1c2goTyxPLE8pLG8udmVydGV4SW50ZW5zaXR5LnB1c2goTyxPLE8pLG8udmVydGV4Tm9ybWFscy5wdXNoKFQsVCxUKSxvLnZlcnRleE5vcm1hbHMucHVzaChULFQsVCk7dmFyIEQ9by5wb3NpdGlvbnMubGVuZ3RoO28uY2VsbHMucHVzaChbRC02LEQtNSxELTRdLFtELTMsRC0yLEQtMV0pfXJldHVybiBvfSxlLmV4cG9ydHMuY3JlYXRlQ29uZU1lc2g9dChcIi4vbGliL2NvbmVtZXNoXCIpfSx7XCIuL2xpYi9jb25lbWVzaFwiOjI0MCxcImdsLXZlYzNcIjozMzl9XSwyNDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2wtc2hhZGVyXCIpLGk9dChcImdsLWJ1ZmZlclwiKSxhPXQoXCJnbC12YW9cIiksbz10KFwiZ2wtdGV4dHVyZTJkXCIpLHM9dChcIm5vcm1hbHNcIiksbD10KFwiZ2wtbWF0NC9tdWx0aXBseVwiKSxjPXQoXCJnbC1tYXQ0L2ludmVydFwiKSx1PXQoXCJuZGFycmF5XCIpLGg9dChcImNvbG9ybWFwXCIpLGY9dChcInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyXCIpLHA9dChcInR5cGVkYXJyYXktcG9vbFwiKSxkPXQoXCIuL3NoYWRlcnNcIiksZz1kLm1lc2hTaGFkZXIsdj1kLnBpY2tTaGFkZXIsbT1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24geSh0LGUscixuLGksYSxvLHMsbCxjLHUsaCxmLHAsZCxnLHYseSx4LGIsXyx3LGssQSl7dGhpcy5nbD10LHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuY2VsbHM9W10sdGhpcy5wb3NpdGlvbnM9W10sdGhpcy5pbnRlbnNpdHk9W10sdGhpcy50ZXh0dXJlPWUsdGhpcy5kaXJ0eT0hMCx0aGlzLnRyaVNoYWRlcj1yLHRoaXMucGlja1NoYWRlcj1uLHRoaXMudHJpYW5nbGVQb3NpdGlvbnM9aSx0aGlzLnRyaWFuZ2xlVmVjdG9ycz1hLHRoaXMudHJpYW5nbGVDb2xvcnM9cyx0aGlzLnRyaWFuZ2xlTm9ybWFscz1jLHRoaXMudHJpYW5nbGVVVnM9bCx0aGlzLnRyaWFuZ2xlSWRzPW8sdGhpcy50cmlhbmdsZVZBTz11LHRoaXMudHJpYW5nbGVDb3VudD0wLHRoaXMubGluZVdpZHRoPTEsdGhpcy5lZGdlUG9zaXRpb25zPWgsdGhpcy5lZGdlQ29sb3JzPXAsdGhpcy5lZGdlVVZzPWQsdGhpcy5lZGdlSWRzPWYsdGhpcy5lZGdlVkFPPWcsdGhpcy5lZGdlQ291bnQ9MCx0aGlzLnBvaW50UG9zaXRpb25zPXYsdGhpcy5wb2ludENvbG9ycz14LHRoaXMucG9pbnRVVnM9Yix0aGlzLnBvaW50U2l6ZXM9Xyx0aGlzLnBvaW50SWRzPXksdGhpcy5wb2ludFZBTz13LHRoaXMucG9pbnRDb3VudD0wLHRoaXMuY29udG91ckxpbmVXaWR0aD0xLHRoaXMuY29udG91clBvc2l0aW9ucz1rLHRoaXMuY29udG91clZBTz1BLHRoaXMuY29udG91ckNvdW50PTAsdGhpcy5jb250b3VyQ29sb3I9WzAsMCwwXSx0aGlzLmNvbnRvdXJFbmFibGU9ITAsdGhpcy5waWNrSWQ9MSx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5saWdodFBvc2l0aW9uPVsxZTUsMWU1LDBdLHRoaXMuYW1iaWVudExpZ2h0PS44LHRoaXMuZGlmZnVzZUxpZ2h0PS44LHRoaXMuc3BlY3VsYXJMaWdodD0yLHRoaXMucm91Z2huZXNzPS41LHRoaXMuZnJlc25lbD0xLjUsdGhpcy5vcGFjaXR5PTEsdGhpcy5jb25lU2NhbGU9Mix0aGlzLnZlY3RvclNjYWxlPTEsdGhpcy5jb25lT2Zmc2V0PS4yNSx0aGlzLl9tb2RlbD1tLHRoaXMuX3ZpZXc9bSx0aGlzLl9wcm9qZWN0aW9uPW0sdGhpcy5fcmVzb2x1dGlvbj1bMSwxXX12YXIgeD15LnByb3RvdHlwZTtmdW5jdGlvbiBiKHQpe3ZhciBlPW4odCx2LnZlcnRleCx2LmZyYWdtZW50LG51bGwsdi5hdHRyaWJ1dGVzKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmlkLmxvY2F0aW9uPTEsZS5hdHRyaWJ1dGVzLnZlY3Rvci5sb2NhdGlvbj01LGV9eC5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk+PTF9LHguaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk8MX0seC5waWNrU2xvdHM9MSx4LnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LHguaGlnaGxpZ2h0PWZ1bmN0aW9uKHQpe2lmKHQmJnRoaXMuY29udG91ckVuYWJsZSl7Zm9yKHZhciBlPWYodGhpcy5jZWxscyx0aGlzLmludGVuc2l0eSx0LmludGVuc2l0eSkscj1lLmNlbGxzLG49ZS52ZXJ0ZXhJZHMsaT1lLnZlcnRleFdlaWdodHMsYT1yLmxlbmd0aCxvPXAubWFsbG9jRmxvYXQzMig2KmEpLHM9MCxsPTA7bDxhOysrbClmb3IodmFyIGM9cltsXSx1PTA7dTwyOysrdSl7dmFyIGg9Y1swXTsyPT09Yy5sZW5ndGgmJihoPWNbdV0pO2Zvcih2YXIgZD1uW2hdWzBdLGc9bltoXVsxXSx2PWlbaF0sbT0xLXYseT10aGlzLnBvc2l0aW9uc1tkXSx4PXRoaXMucG9zaXRpb25zW2ddLGI9MDtiPDM7KytiKW9bcysrXT12KnlbYl0rbSp4W2JdfXRoaXMuY29udG91ckNvdW50PXMvM3wwLHRoaXMuY29udG91clBvc2l0aW9ucy51cGRhdGUoby5zdWJhcnJheSgwLHMpKSxwLmZyZWUobyl9ZWxzZSB0aGlzLmNvbnRvdXJDb3VudD0wfSx4LnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7dGhpcy5kaXJ0eT0hMCxcImNvbnRvdXJFbmFibGVcImluIHQmJih0aGlzLmNvbnRvdXJFbmFibGU9dC5jb250b3VyRW5hYmxlKSxcImNvbnRvdXJDb2xvclwiaW4gdCYmKHRoaXMuY29udG91ckNvbG9yPXQuY29udG91ckNvbG9yKSxcImxpbmVXaWR0aFwiaW4gdCYmKHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRoKSxcImxpZ2h0UG9zaXRpb25cImluIHQmJih0aGlzLmxpZ2h0UG9zaXRpb249dC5saWdodFBvc2l0aW9uKSxcIm9wYWNpdHlcImluIHQmJih0aGlzLm9wYWNpdHk9dC5vcGFjaXR5KSxcImFtYmllbnRcImluIHQmJih0aGlzLmFtYmllbnRMaWdodD10LmFtYmllbnQpLFwiZGlmZnVzZVwiaW4gdCYmKHRoaXMuZGlmZnVzZUxpZ2h0PXQuZGlmZnVzZSksXCJzcGVjdWxhclwiaW4gdCYmKHRoaXMuc3BlY3VsYXJMaWdodD10LnNwZWN1bGFyKSxcInJvdWdobmVzc1wiaW4gdCYmKHRoaXMucm91Z2huZXNzPXQucm91Z2huZXNzKSxcImZyZXNuZWxcImluIHQmJih0aGlzLmZyZXNuZWw9dC5mcmVzbmVsKSx2b2lkIDAhPT10LnZlY3RvclNjYWxlJiYodGhpcy52ZWN0b3JTY2FsZT10LnZlY3RvclNjYWxlKSx2b2lkIDAhPT10LmNvbmVTY2FsZSYmKHRoaXMuY29uZVNjYWxlPXQuY29uZVNjYWxlKSx2b2lkIDAhPT10LmNvbmVPZmZzZXQmJih0aGlzLmNvbmVPZmZzZXQ9dC5jb25lT2Zmc2V0KSx0LnRleHR1cmU/KHRoaXMudGV4dHVyZS5kaXNwb3NlKCksdGhpcy50ZXh0dXJlPW8oZSx0LnRleHR1cmUpKTp0LmNvbG9ybWFwJiYodGhpcy50ZXh0dXJlLnNoYXBlPVsyNTYsMjU2XSx0aGlzLnRleHR1cmUubWluRmlsdGVyPWUuTElORUFSX01JUE1BUF9MSU5FQVIsdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcj1lLkxJTkVBUix0aGlzLnRleHR1cmUuc2V0UGl4ZWxzKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1oKHtjb2xvcm1hcDp0LG5zaGFkZXM6MjU2LGZvcm1hdDpcInJnYmFcIn0pLHI9bmV3IFVpbnQ4QXJyYXkoMTAyNCksbj0wO248MjU2Oysrbil7Zm9yKHZhciBpPWVbbl0sYT0wO2E8MzsrK2Epcls0Km4rYV09aVthXTtyWzQqbiszXT0yNTUqaVszXX1yZXR1cm4gdShyLFsyNTYsMjU2LDRdLFs0LDAsMV0pfSh0LmNvbG9ybWFwKSksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwKCkpO3ZhciByPXQuY2VsbHMsbj10LnBvc2l0aW9ucyxpPXQudmVjdG9ycztpZihuJiZyJiZpKXt2YXIgYT1bXSxsPVtdLGM9W10sZj1bXSxwPVtdLGQ9W10sZz1bXSx2PVtdLG09W10seT1bXSx4PVtdLGI9W10sXz1bXSx3PVtdLGs9W107dGhpcy5jZWxscz1yLHRoaXMucG9zaXRpb25zPW47dmFyIEE9dC52ZXJ0ZXhOb3JtYWxzLFQ9dC5jZWxsTm9ybWFscyxNPXZvaWQgMD09PXQudmVydGV4Tm9ybWFsc0Vwc2lsb24/MWUtNjp0LnZlcnRleE5vcm1hbHNFcHNpbG9uLFM9dm9pZCAwPT09dC5mYWNlTm9ybWFsc0Vwc2lsb24/MWUtNjp0LmZhY2VOb3JtYWxzRXBzaWxvbjt0LnVzZUZhY2V0Tm9ybWFscyYmIVQmJihUPXMuZmFjZU5vcm1hbHMocixuLFMpKSxUfHxBfHwoQT1zLnZlcnRleE5vcm1hbHMocixuLE0pKTt2YXIgRT10LnZlcnRleENvbG9ycyxDPXQuY2VsbENvbG9ycyxMPXQubWVzaENvbG9yfHxbMSwxLDEsMV0sej10LnZlcnRleFVWcyxPPXQudmVydGV4SW50ZW5zaXR5LEk9dC5jZWxsVVZzLEQ9dC5jZWxsSW50ZW5zaXR5LFA9MS8wLFI9LTEvMDtpZigheiYmIUkpaWYoTylpZih0LnZlcnRleEludGVuc2l0eUJvdW5kcylQPSt0LnZlcnRleEludGVuc2l0eUJvdW5kc1swXSxSPSt0LnZlcnRleEludGVuc2l0eUJvdW5kc1sxXTtlbHNlIGZvcih2YXIgRj0wO0Y8Ty5sZW5ndGg7KytGKXt2YXIgQj1PW0ZdO1A9TWF0aC5taW4oUCxCKSxSPU1hdGgubWF4KFIsQil9ZWxzZSBpZihEKWZvcihGPTA7RjxELmxlbmd0aDsrK0Ype0I9RFtGXTtQPU1hdGgubWluKFAsQiksUj1NYXRoLm1heChSLEIpfWVsc2UgZm9yKEY9MDtGPG4ubGVuZ3RoOysrRil7Qj1uW0ZdWzJdO1A9TWF0aC5taW4oUCxCKSxSPU1hdGgubWF4KFIsQil9dGhpcy5pbnRlbnNpdHk9T3x8KEQ/ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpbltpXT0wO3ZhciBhPXQubGVuZ3RoO2ZvcihpPTA7aTxhOysraSlmb3IodmFyIG89dFtpXSxzPTA7czxvLmxlbmd0aDsrK3MpbltvW3NdXT1yW2ldO3JldHVybiBufShyLG4ubGVuZ3RoLEQpOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPXRbbl1bMl07cmV0dXJuIHJ9KG4pKTt2YXIgTj10LnBvaW50U2l6ZXMsaj10LnBvaW50U2l6ZXx8MTt0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXTtmb3IoRj0wO0Y8bi5sZW5ndGg7KytGKWZvcih2YXIgVj1uW0ZdLFU9MDtVPDM7KytVKSFpc05hTihWW1VdKSYmaXNGaW5pdGUoVltVXSkmJih0aGlzLmJvdW5kc1swXVtVXT1NYXRoLm1pbih0aGlzLmJvdW5kc1swXVtVXSxWW1VdKSx0aGlzLmJvdW5kc1sxXVtVXT1NYXRoLm1heCh0aGlzLmJvdW5kc1sxXVtVXSxWW1VdKSk7dmFyIHE9MCxIPTAsRz0wO3Q6Zm9yKEY9MDtGPHIubGVuZ3RoOysrRil7dmFyIFk9cltGXTtzd2l0Y2goWS5sZW5ndGgpe2Nhc2UgMTpmb3IoVj1uW1g9WVswXV0sVT0wO1U8MzsrK1UpaWYoaXNOYU4oVltVXSl8fCFpc0Zpbml0ZShWW1VdKSljb250aW51ZSB0O3gucHVzaChWWzBdLFZbMV0sVlsyXSxWWzNdKSwzPT09KFo9RT9FW1hdOkM/Q1tGXTpMKS5sZW5ndGg/Yi5wdXNoKFpbMF0sWlsxXSxaWzJdLDEpOmIucHVzaChaWzBdLFpbMV0sWlsyXSxaWzNdKSwkPXo/eltYXTpPP1soT1tYXS1QKS8oUi1QKSwwXTpJP0lbRl06RD9bKERbRl0tUCkvKFItUCksMF06WyhWWzJdLVApLyhSLVApLDBdLF8ucHVzaCgkWzBdLCRbMV0pLE4/dy5wdXNoKE5bWF0pOncucHVzaChqKSxrLnB1c2goRiksRys9MTticmVhaztjYXNlIDI6Zm9yKFU9MDtVPDI7KytVKXtWPW5bWD1ZW1VdXTtmb3IodmFyIFc9MDtXPDM7KytXKWlmKGlzTmFOKFZbV10pfHwhaXNGaW5pdGUoVltXXSkpY29udGludWUgdH1mb3IoVT0wO1U8MjsrK1Upe1Y9bltYPVlbVV1dO2cucHVzaChWWzBdLFZbMV0sVlsyXSksMz09PShaPUU/RVtYXTpDP0NbRl06TCkubGVuZ3RoP3YucHVzaChaWzBdLFpbMV0sWlsyXSwxKTp2LnB1c2goWlswXSxaWzFdLFpbMl0sWlszXSksJD16P3pbWF06Tz9bKE9bWF0tUCkvKFItUCksMF06ST9JW0ZdOkQ/WyhEW0ZdLVApLyhSLVApLDBdOlsoVlsyXS1QKS8oUi1QKSwwXSxtLnB1c2goJFswXSwkWzFdKSx5LnB1c2goRil9SCs9MTticmVhaztjYXNlIDM6Zm9yKFU9MDtVPDM7KytVKWZvcihWPW5bWD1ZW1VdXSxXPTA7VzwzOysrVylpZihpc05hTihWW1ddKXx8IWlzRmluaXRlKFZbV10pKWNvbnRpbnVlIHQ7Zm9yKFU9MDtVPDM7KytVKXt2YXIgWDtWPW5bWD1ZWzItVV1dO2EucHVzaChWWzBdLFZbMV0sVlsyXSxWWzNdKTt2YXIgWiwkLEosSz1pW1hdO2wucHVzaChLWzBdLEtbMV0sS1syXSksMz09PShaPUU/RVtYXTpDP0NbRl06TCkubGVuZ3RoP2MucHVzaChaWzBdLFpbMV0sWlsyXSwxKTpjLnB1c2goWlswXSxaWzFdLFpbMl0sWlszXSksJD16P3pbWF06Tz9bKE9bWF0tUCkvKFItUCksMF06ST9JW0ZdOkQ/WyhEW0ZdLVApLyhSLVApLDBdOlsoVlsyXS1QKS8oUi1QKSwwXSxwLnB1c2goJFswXSwkWzFdKSxKPUE/QVtYXTpUW0ZdLGYucHVzaChKWzBdLEpbMV0sSlsyXSksZC5wdXNoKEYpfXErPTF9fXRoaXMucG9pbnRDb3VudD1HLHRoaXMuZWRnZUNvdW50PUgsdGhpcy50cmlhbmdsZUNvdW50PXEsdGhpcy5wb2ludFBvc2l0aW9ucy51cGRhdGUoeCksdGhpcy5wb2ludENvbG9ycy51cGRhdGUoYiksdGhpcy5wb2ludFVWcy51cGRhdGUoXyksdGhpcy5wb2ludFNpemVzLnVwZGF0ZSh3KSx0aGlzLnBvaW50SWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoaykpLHRoaXMuZWRnZVBvc2l0aW9ucy51cGRhdGUoZyksdGhpcy5lZGdlQ29sb3JzLnVwZGF0ZSh2KSx0aGlzLmVkZ2VVVnMudXBkYXRlKG0pLHRoaXMuZWRnZUlkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KHkpKSx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLnVwZGF0ZShhKSx0aGlzLnRyaWFuZ2xlVmVjdG9ycy51cGRhdGUobCksdGhpcy50cmlhbmdsZUNvbG9ycy51cGRhdGUoYyksdGhpcy50cmlhbmdsZVVWcy51cGRhdGUocCksdGhpcy50cmlhbmdsZU5vcm1hbHMudXBkYXRlKGYpLHRoaXMudHJpYW5nbGVJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheShkKSl9fSx4LmRyYXdUcmFuc3BhcmVudD14LmRyYXc9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fG0sbj10LnZpZXd8fG0saT10LnByb2plY3Rpb258fG0sYT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylhWzBdW29dPU1hdGgubWF4KGFbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxhWzFdW29dPU1hdGgubWluKGFbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt2YXIgcz17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGludmVyc2VNb2RlbDptLnNsaWNlKCksY2xpcEJvdW5kczphLGthbWJpZW50OnRoaXMuYW1iaWVudExpZ2h0LGtkaWZmdXNlOnRoaXMuZGlmZnVzZUxpZ2h0LGtzcGVjdWxhcjp0aGlzLnNwZWN1bGFyTGlnaHQscm91Z2huZXNzOnRoaXMucm91Z2huZXNzLGZyZXNuZWw6dGhpcy5mcmVzbmVsLGV5ZVBvc2l0aW9uOlswLDAsMF0sbGlnaHRQb3NpdGlvbjpbMCwwLDBdLG9wYWNpdHk6dGhpcy5vcGFjaXR5LHZlY3RvclNjYWxlOnRoaXMudmVjdG9yU2NhbGUsY29uZVNjYWxlOnRoaXMuY29uZVNjYWxlLGNvbmVPZmZzZXQ6dGhpcy5jb25lT2Zmc2V0LGNvbnRvdXJDb2xvcjp0aGlzLmNvbnRvdXJDb2xvcix0ZXh0dXJlOjB9O3MuaW52ZXJzZU1vZGVsPWMocy5pbnZlcnNlTW9kZWwscy5tb2RlbCksZS5kaXNhYmxlKGUuQ1VMTF9GQUNFKSx0aGlzLnRleHR1cmUuYmluZCgwKTt2YXIgdT1uZXcgQXJyYXkoMTYpO2wodSxzLnZpZXcscy5tb2RlbCksbCh1LHMucHJvamVjdGlvbix1KSxjKHUsdSk7Zm9yKG89MDtvPDM7KytvKXMuZXllUG9zaXRpb25bb109dVsxMitvXS91WzE1XTt2YXIgaD11WzE1XTtmb3Iobz0wO288MzsrK28paCs9dGhpcy5saWdodFBvc2l0aW9uW29dKnVbNCpvKzNdO2ZvcihvPTA7bzwzOysrbyl7Zm9yKHZhciBmPXVbMTIrb10scD0wO3A8MzsrK3ApZis9dVs0KnArb10qdGhpcy5saWdodFBvc2l0aW9uW3BdO3MubGlnaHRQb3NpdGlvbltvXT1mL2h9aWYodGhpcy50cmlhbmdsZUNvdW50PjApe3ZhciBkPXRoaXMudHJpU2hhZGVyO2QuYmluZCgpLGQudW5pZm9ybXM9cyx0aGlzLnRyaWFuZ2xlVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRVMsMCwzKnRoaXMudHJpYW5nbGVDb3VudCksdGhpcy50cmlhbmdsZVZBTy51bmJpbmQoKX19LHguZHJhd1BpY2s9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fG0sbj10LnZpZXd8fG0saT10LnByb2plY3Rpb258fG0sYT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylhWzBdW29dPU1hdGgubWF4KGFbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxhWzFdW29dPU1hdGgubWluKGFbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt0aGlzLl9tb2RlbD1bXS5zbGljZS5jYWxsKHIpLHRoaXMuX3ZpZXc9W10uc2xpY2UuY2FsbChuKSx0aGlzLl9wcm9qZWN0aW9uPVtdLnNsaWNlLmNhbGwoaSksdGhpcy5fcmVzb2x1dGlvbj1bZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XTt2YXIgcz17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGNsaXBCb3VuZHM6YSx2ZWN0b3JTY2FsZTp0aGlzLnZlY3RvclNjYWxlLGNvbmVTY2FsZTp0aGlzLmNvbmVTY2FsZSxjb25lT2Zmc2V0OnRoaXMuY29uZU9mZnNldCxwaWNrSWQ6dGhpcy5waWNrSWQvMjU1fSxsPXRoaXMucGlja1NoYWRlcjtsLmJpbmQoKSxsLnVuaWZvcm1zPXMsdGhpcy50cmlhbmdsZUNvdW50PjAmJih0aGlzLnRyaWFuZ2xlVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRVMsMCwzKnRoaXMudHJpYW5nbGVDb3VudCksdGhpcy50cmlhbmdsZVZBTy51bmJpbmQoKSksdGhpcy5lZGdlQ291bnQ+MCYmKHRoaXMuZWRnZVZBTy5iaW5kKCksZS5saW5lV2lkdGgodGhpcy5saW5lV2lkdGgqdGhpcy5waXhlbFJhdGlvKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLDIqdGhpcy5lZGdlQ291bnQpLHRoaXMuZWRnZVZBTy51bmJpbmQoKSl9LHgucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7dmFyIGU9dC52YWx1ZVswXSsyNTYqdC52YWx1ZVsxXSs2NTUzNip0LnZhbHVlWzJdLHI9dGhpcy5jZWxsc1tlXSxuPXRoaXMucG9zaXRpb25zW3JbMV1dLnNsaWNlKDAsMyk7cmV0dXJue2luZGV4Ok1hdGguZmxvb3IoclsxXS80OCkscG9zaXRpb246bixkYXRhQ29vcmRpbmF0ZTpufX0seC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRyaVNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVkFPLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVmVjdG9ycy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZUNvbG9ycy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVVWcy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZU5vcm1hbHMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVJZHMuZGlzcG9zZSgpLHRoaXMuZWRnZVZBTy5kaXNwb3NlKCksdGhpcy5lZGdlUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLmVkZ2VDb2xvcnMuZGlzcG9zZSgpLHRoaXMuZWRnZVVWcy5kaXNwb3NlKCksdGhpcy5lZGdlSWRzLmRpc3Bvc2UoKSx0aGlzLnBvaW50VkFPLmRpc3Bvc2UoKSx0aGlzLnBvaW50UG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLnBvaW50Q29sb3JzLmRpc3Bvc2UoKSx0aGlzLnBvaW50VVZzLmRpc3Bvc2UoKSx0aGlzLnBvaW50U2l6ZXMuZGlzcG9zZSgpLHRoaXMucG9pbnRJZHMuZGlzcG9zZSgpLHRoaXMuY29udG91clZBTy5kaXNwb3NlKCksdGhpcy5jb250b3VyUG9zaXRpb25zLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7MT09PWFyZ3VtZW50cy5sZW5ndGgmJih0PShlPXQpLmdsKTt2YXIgcj1lLnRyaVNoYWRlcnx8ZnVuY3Rpb24odCl7dmFyIGU9bih0LGcudmVydGV4LGcuZnJhZ21lbnQsbnVsbCxnLmF0dHJpYnV0ZXMpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlLmF0dHJpYnV0ZXMudmVjdG9yLmxvY2F0aW9uPTUsZX0odCkscz1iKHQpLGw9byh0LHUobmV3IFVpbnQ4QXJyYXkoWzI1NSwyNTUsMjU1LDI1NV0pLFsxLDEsNF0pKTtsLmdlbmVyYXRlTWlwbWFwKCksbC5taW5GaWx0ZXI9dC5MSU5FQVJfTUlQTUFQX0xJTkVBUixsLm1hZ0ZpbHRlcj10LkxJTkVBUjt2YXIgYz1pKHQpLGg9aSh0KSxmPWkodCkscD1pKHQpLGQ9aSh0KSx2PWkodCksbT1hKHQsW3tidWZmZXI6Yyx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOnYsdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6Zix0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOnAsdHlwZTp0LkZMT0FULHNpemU6Mn0se2J1ZmZlcjpkLHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6aCx0eXBlOnQuRkxPQVQsc2l6ZTozfV0pLHg9aSh0KSxfPWkodCksdz1pKHQpLGs9aSh0KSxBPWEodCxbe2J1ZmZlcjp4LHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6ayx0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjpfLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6dyx0eXBlOnQuRkxPQVQsc2l6ZToyfV0pLFQ9aSh0KSxNPWkodCksUz1pKHQpLEU9aSh0KSxDPWkodCksTD1hKHQsW3tidWZmZXI6VCx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOkMsdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6TSx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOlMsdHlwZTp0LkZMT0FULHNpemU6Mn0se2J1ZmZlcjpFLHR5cGU6dC5GTE9BVCxzaXplOjF9XSksej1pKHQpLE89bmV3IHkodCxsLHIscyxjLGgsdixmLHAsZCxtLHgsayxfLHcsQSxULEMsTSxTLEUsTCx6LGEodCxbe2J1ZmZlcjp6LHR5cGU6dC5GTE9BVCxzaXplOjN9XSkpO3JldHVybiBPLnVwZGF0ZShlKSxPfX0se1wiLi9zaGFkZXJzXCI6MjQxLGNvbG9ybWFwOjExNyxcImdsLWJ1ZmZlclwiOjIzOCxcImdsLW1hdDQvaW52ZXJ0XCI6MjYyLFwiZ2wtbWF0NC9tdWx0aXBseVwiOjI2NCxcImdsLXNoYWRlclwiOjI5OCxcImdsLXRleHR1cmUyZFwiOjMxNSxcImdsLXZhb1wiOjMyMCxuZGFycmF5OjQ0Myxub3JtYWxzOjQ0NixcInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyXCI6NTAzLFwidHlwZWRhcnJheS1wb29sXCI6NTMwfV0sMjQxOltmdW5jdGlvbih0LGUscil7dmFyIG49dChcImdsc2xpZnlcIiksaT1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG52ZWMzIGdldE9ydGhvZ29uYWxWZWN0b3IodmVjMyB2KSB7XFxuICAvLyBSZXR1cm4gdXAtdmVjdG9yIGZvciBvbmx5LXogdmVjdG9yLlxcbiAgLy8gUmV0dXJuIGF4ICsgYnkgKyBjeiA9IDAsIGEgcG9pbnQgdGhhdCBsaWVzIG9uIHRoZSBwbGFuZSB0aGF0IGhhcyB2IGFzIGEgbm9ybWFsIGFuZCB0aGF0IGlzbid0ICgwLDAsMCkuXFxuICAvLyBGcm9tIHRoZSBhYm92ZSBpZi1zdGF0ZW1lbnQgd2UgaGF2ZSB8fGF8fCA+IDAgIFUgIHx8Ynx8ID4gMC5cXG4gIC8vIEFzc2lnbiB6ID0gMCwgeCA9IC1iLCB5ID0gYTpcXG4gIC8vIGEqLWIgKyBiKmEgKyBjKjAgPSAtYmEgKyBiYSArIDAgPSAwXFxuICBpZiAodi54KnYueCA+IHYueip2LnogfHwgdi55KnYueSA+IHYueip2LnopIHtcXG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKC12LnksIHYueCwgMC4wKSk7XFxuICB9IGVsc2Uge1xcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoMC4wLCB2LnosIC12LnkpKTtcXG4gIH1cXG59XFxuXFxuLy8gQ2FsY3VsYXRlIHRoZSBjb25lIHZlcnRleCBhbmQgbm9ybWFsIGF0IHRoZSBnaXZlbiBpbmRleC5cXG4vL1xcbi8vIFRoZSByZXR1cm5lZCB2ZXJ0ZXggaXMgZm9yIGEgY29uZSB3aXRoIGl0cyB0b3AgYXQgb3JpZ2luIGFuZCBoZWlnaHQgb2YgMS4wLFxcbi8vIHBvaW50aW5nIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHZlY3RvciBhdHRyaWJ1dGUuXFxuLy9cXG4vLyBFYWNoIGNvbmUgaXMgbWFkZSB1cCBvZiBhIHRvcCB2ZXJ0ZXgsIGEgY2VudGVyIGJhc2UgdmVydGV4IGFuZCBiYXNlIHBlcmltZXRlciB2ZXJ0aWNlcy5cXG4vLyBUaGVzZSB2ZXJ0aWNlcyBhcmUgdXNlZCB0byBtYWtlIHVwIHRoZSB0cmlhbmdsZXMgb2YgdGhlIGNvbmUgYnkgdGhlIGZvbGxvd2luZzpcXG4vLyAgIHNlZ21lbnQgKyAwIHRvcCB2ZXJ0ZXhcXG4vLyAgIHNlZ21lbnQgKyAxIHBlcmltZXRlciB2ZXJ0ZXggYSsxXFxuLy8gICBzZWdtZW50ICsgMiBwZXJpbWV0ZXIgdmVydGV4IGFcXG4vLyAgIHNlZ21lbnQgKyAzIGNlbnRlciBiYXNlIHZlcnRleFxcbi8vICAgc2VnbWVudCArIDQgcGVyaW1ldGVyIHZlcnRleCBhXFxuLy8gICBzZWdtZW50ICsgNSBwZXJpbWV0ZXIgdmVydGV4IGErMVxcbi8vIFdoZXJlIHNlZ21lbnQgaXMgdGhlIG51bWJlciBvZiB0aGUgcmFkaWFsIHNlZ21lbnQgKiA2IGFuZCBhIGlzIHRoZSBhbmdsZSBhdCB0aGF0IHJhZGlhbCBzZWdtZW50Llxcbi8vIFRvIGdvIGZyb20gaW5kZXggdG8gc2VnbWVudCwgZmxvb3IoaW5kZXggLyA2KVxcbi8vIFRvIGdvIGZyb20gc2VnbWVudCB0byBhbmdsZSwgMipwaSAqIChzZWdtZW50L3NlZ21lbnRDb3VudClcXG4vLyBUbyBnbyBmcm9tIGluZGV4IHRvIHNlZ21lbnQgaW5kZXgsIGluZGV4IC0gKHNlZ21lbnQqNilcXG4vL1xcbnZlYzMgZ2V0Q29uZVBvc2l0aW9uKHZlYzMgZCwgZmxvYXQgcmF3SW5kZXgsIGZsb2F0IGNvbmVPZmZzZXQsIG91dCB2ZWMzIG5vcm1hbCkge1xcblxcbiAgY29uc3QgZmxvYXQgc2VnbWVudENvdW50ID0gOC4wO1xcblxcbiAgZmxvYXQgaW5kZXggPSByYXdJbmRleCAtIGZsb29yKHJhd0luZGV4IC9cXG4gICAgKHNlZ21lbnRDb3VudCAqIDYuMCkpICpcXG4gICAgKHNlZ21lbnRDb3VudCAqIDYuMCk7XFxuXFxuICBmbG9hdCBzZWdtZW50ID0gZmxvb3IoMC4wMDEgKyBpbmRleC82LjApO1xcbiAgZmxvYXQgc2VnbWVudEluZGV4ID0gaW5kZXggLSAoc2VnbWVudCo2LjApO1xcblxcbiAgbm9ybWFsID0gLW5vcm1hbGl6ZShkKTtcXG5cXG4gIGlmIChzZWdtZW50SW5kZXggPiAyLjk5ICYmIHNlZ21lbnRJbmRleCA8IDMuMDEpIHtcXG4gICAgcmV0dXJuIG1peCh2ZWMzKDAuMCksIC1kLCBjb25lT2Zmc2V0KTtcXG4gIH1cXG5cXG4gIGZsb2F0IG5leHRBbmdsZSA9IChcXG4gICAgKHNlZ21lbnRJbmRleCA+IDAuOTkgJiYgIHNlZ21lbnRJbmRleCA8IDEuMDEpIHx8XFxuICAgIChzZWdtZW50SW5kZXggPiA0Ljk5ICYmICBzZWdtZW50SW5kZXggPCA1LjAxKVxcbiAgKSA/IDEuMCA6IDAuMDtcXG4gIGZsb2F0IGFuZ2xlID0gMi4wICogMy4xNDE1OSAqICgoc2VnbWVudCArIG5leHRBbmdsZSkgLyBzZWdtZW50Q291bnQpO1xcblxcbiAgdmVjMyB2MSA9IG1peChkLCB2ZWMzKDAuMCksIGNvbmVPZmZzZXQpO1xcbiAgdmVjMyB2MiA9IHYxIC0gZDtcXG5cXG4gIHZlYzMgdSA9IGdldE9ydGhvZ29uYWxWZWN0b3IoZCk7XFxuICB2ZWMzIHYgPSBub3JtYWxpemUoY3Jvc3ModSwgZCkpO1xcblxcbiAgdmVjMyB4ID0gdSAqIGNvcyhhbmdsZSkgKiBsZW5ndGgoZCkqMC4yNTtcXG4gIHZlYzMgeSA9IHYgKiBzaW4oYW5nbGUpICogbGVuZ3RoKGQpKjAuMjU7XFxuICB2ZWMzIHYzID0gdjIgKyB4ICsgeTtcXG4gIGlmIChzZWdtZW50SW5kZXggPCAzLjApIHtcXG4gICAgdmVjMyB0eCA9IHUgKiBzaW4oYW5nbGUpO1xcbiAgICB2ZWMzIHR5ID0gdiAqIC1jb3MoYW5nbGUpO1xcbiAgICB2ZWMzIHRhbmdlbnQgPSB0eCArIHR5O1xcbiAgICBub3JtYWwgPSBub3JtYWxpemUoY3Jvc3ModjMgLSB2MSwgdGFuZ2VudCkpO1xcbiAgfVxcblxcbiAgaWYgKHNlZ21lbnRJbmRleCA9PSAwLjApIHtcXG4gICAgcmV0dXJuIG1peChkLCB2ZWMzKDAuMCksIGNvbmVPZmZzZXQpO1xcbiAgfVxcbiAgcmV0dXJuIHYzO1xcbn1cXG5cXG5hdHRyaWJ1dGUgdmVjMyB2ZWN0b3I7XFxuYXR0cmlidXRlIHZlYzQgY29sb3IsIHBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xcbnVuaWZvcm0gZmxvYXQgdmVjdG9yU2NhbGU7XFxudW5pZm9ybSBmbG9hdCBjb25lU2NhbGU7XFxuXFxudW5pZm9ybSBmbG9hdCBjb25lT2Zmc2V0O1xcblxcbnVuaWZvcm0gbWF0NCBtb2RlbFxcbiAgICAgICAgICAgLCB2aWV3XFxuICAgICAgICAgICAsIHByb2plY3Rpb25cXG4gICAgICAgICAgICwgaW52ZXJzZU1vZGVsO1xcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvblxcbiAgICAgICAgICAgLCBsaWdodFBvc2l0aW9uO1xcblxcbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxcbiAgICAgICAgICAgLCBmX2xpZ2h0RGlyZWN0aW9uXFxuICAgICAgICAgICAsIGZfZXllRGlyZWN0aW9uXFxuICAgICAgICAgICAsIGZfZGF0YVxcbiAgICAgICAgICAgLCBmX3Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xcbnZhcnlpbmcgdmVjMiBmX3V2O1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIC8vIFNjYWxlIHRoZSB2ZWN0b3IgbWFnbml0dWRlIHRvIHN0YXkgY29uc3RhbnQgd2l0aFxcbiAgLy8gbW9kZWwgJiB2aWV3IGNoYW5nZXMuXFxuICB2ZWMzIG5vcm1hbDtcXG4gIHZlYzMgWFlaID0gZ2V0Q29uZVBvc2l0aW9uKG1hdDMobW9kZWwpICogKCh2ZWN0b3JTY2FsZSAqIGNvbmVTY2FsZSkgKiB2ZWN0b3IpLCBwb3NpdGlvbi53LCBjb25lT2Zmc2V0LCBub3JtYWwpO1xcbiAgdmVjNCBjb25lUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24ueHl6LCAxLjApICsgdmVjNChYWVosIDAuMCk7XFxuXFxuICAvL0xpZ2h0aW5nIGdlb21ldHJ5IHBhcmFtZXRlcnNcXG4gIHZlYzQgY2FtZXJhQ29vcmRpbmF0ZSA9IHZpZXcgKiBjb25lUG9zaXRpb247XFxuICBjYW1lcmFDb29yZGluYXRlLnh5eiAvPSBjYW1lcmFDb29yZGluYXRlLnc7XFxuICBmX2xpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xcbiAgZl9leWVEaXJlY3Rpb24gICA9IGV5ZVBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XFxuICBmX25vcm1hbCA9IG5vcm1hbGl6ZSgodmVjNChub3JtYWwsMC4wKSAqIGludmVyc2VNb2RlbCkueHl6KTtcXG5cXG4gIC8vIHZlYzQgbV9wb3NpdGlvbiAgPSBtb2RlbCAqIHZlYzQoY29uZVBvc2l0aW9uLCAxLjApO1xcbiAgdmVjNCB0X3Bvc2l0aW9uICA9IHZpZXcgKiBjb25lUG9zaXRpb247XFxuICBnbF9Qb3NpdGlvbiAgICAgID0gcHJvamVjdGlvbiAqIHRfcG9zaXRpb247XFxuXFxuICBmX2NvbG9yICAgICAgICAgID0gY29sb3I7XFxuICBmX2RhdGEgICAgICAgICAgID0gY29uZVBvc2l0aW9uLnh5ejtcXG4gIGZfcG9zaXRpb24gICAgICAgPSBwb3NpdGlvbi54eXo7XFxuICBmX3V2ICAgICAgICAgICAgID0gdXY7XFxufVxcblwiXSksYT1uKFtcIiNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlXFxuXFxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuZmxvYXQgYmVja21hbm5EaXN0cmlidXRpb24oZmxvYXQgeCwgZmxvYXQgcm91Z2huZXNzKSB7XFxuICBmbG9hdCBOZG90SCA9IG1heCh4LCAwLjAwMDEpO1xcbiAgZmxvYXQgY29zMkFscGhhID0gTmRvdEggKiBOZG90SDtcXG4gIGZsb2F0IHRhbjJBbHBoYSA9IChjb3MyQWxwaGEgLSAxLjApIC8gY29zMkFscGhhO1xcbiAgZmxvYXQgcm91Z2huZXNzMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcXG4gIGZsb2F0IGRlbm9tID0gMy4xNDE1OTI2NTM1ODk3OTMgKiByb3VnaG5lc3MyICogY29zMkFscGhhICogY29zMkFscGhhO1xcbiAgcmV0dXJuIGV4cCh0YW4yQWxwaGEgLyByb3VnaG5lc3MyKSAvIGRlbm9tO1xcbn1cXG5cXG5mbG9hdCBjb29rVG9ycmFuY2VTcGVjdWxhcihcXG4gIHZlYzMgbGlnaHREaXJlY3Rpb24sXFxuICB2ZWMzIHZpZXdEaXJlY3Rpb24sXFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwsXFxuICBmbG9hdCByb3VnaG5lc3MsXFxuICBmbG9hdCBmcmVzbmVsKSB7XFxuXFxuICBmbG9hdCBWZG90TiA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XFxuICBmbG9hdCBMZG90TiA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xcblxcbiAgLy9IYWxmIGFuZ2xlIHZlY3RvclxcbiAgdmVjMyBIID0gbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uICsgdmlld0RpcmVjdGlvbik7XFxuXFxuICAvL0dlb21ldHJpYyB0ZXJtXFxuICBmbG9hdCBOZG90SCA9IG1heChkb3Qoc3VyZmFjZU5vcm1hbCwgSCksIDAuMCk7XFxuICBmbG9hdCBWZG90SCA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcXG4gIGZsb2F0IExkb3RIID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcXG4gIGZsb2F0IEcxID0gKDIuMCAqIE5kb3RIICogVmRvdE4pIC8gVmRvdEg7XFxuICBmbG9hdCBHMiA9ICgyLjAgKiBOZG90SCAqIExkb3ROKSAvIExkb3RIO1xcbiAgZmxvYXQgRyA9IG1pbigxLjAsIG1pbihHMSwgRzIpKTtcXG4gIFxcbiAgLy9EaXN0cmlidXRpb24gdGVybVxcbiAgZmxvYXQgRCA9IGJlY2ttYW5uRGlzdHJpYnV0aW9uKE5kb3RILCByb3VnaG5lc3MpO1xcblxcbiAgLy9GcmVzbmVsIHRlcm1cXG4gIGZsb2F0IEYgPSBwb3coMS4wIC0gVmRvdE4sIGZyZXNuZWwpO1xcblxcbiAgLy9NdWx0aXBseSB0ZXJtcyBhbmQgZG9uZVxcbiAgcmV0dXJuICBHICogRiAqIEQgLyBtYXgoMy4xNDE1OTI2NSAqIFZkb3ROLCAwLjAwMDAwMSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XFxuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XFxufVxcblxcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzXFxuICAgICAgICAgICAgLCBmcmVzbmVsXFxuICAgICAgICAgICAgLCBrYW1iaWVudFxcbiAgICAgICAgICAgICwga2RpZmZ1c2VcXG4gICAgICAgICAgICAsIGtzcGVjdWxhclxcbiAgICAgICAgICAgICwgb3BhY2l0eTtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcblxcbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxcbiAgICAgICAgICAgLCBmX2xpZ2h0RGlyZWN0aW9uXFxuICAgICAgICAgICAsIGZfZXllRGlyZWN0aW9uXFxuICAgICAgICAgICAsIGZfZGF0YVxcbiAgICAgICAgICAgLCBmX3Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xcbnZhcnlpbmcgdmVjMiBmX3V2O1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfcG9zaXRpb24pKSBkaXNjYXJkO1xcbiAgdmVjMyBOID0gbm9ybWFsaXplKGZfbm9ybWFsKTtcXG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShmX2xpZ2h0RGlyZWN0aW9uKTtcXG4gIHZlYzMgViA9IG5vcm1hbGl6ZShmX2V5ZURpcmVjdGlvbik7XFxuXFxuICBpZihnbF9Gcm9udEZhY2luZykge1xcbiAgICBOID0gLU47XFxuICB9XFxuXFxuICBmbG9hdCBzcGVjdWxhciA9IG1pbigxLjAsIG1heCgwLjAsIGNvb2tUb3JyYW5jZVNwZWN1bGFyKEwsIFYsIE4sIHJvdWdobmVzcywgZnJlc25lbCkpKTtcXG4gIGZsb2F0IGRpZmZ1c2UgID0gbWluKGthbWJpZW50ICsga2RpZmZ1c2UgKiBtYXgoZG90KE4sIEwpLCAwLjApLCAxLjApO1xcblxcbiAgdmVjNCBzdXJmYWNlQ29sb3IgPSBmX2NvbG9yICogdGV4dHVyZTJEKHRleHR1cmUsIGZfdXYpO1xcbiAgdmVjNCBsaXRDb2xvciA9IHN1cmZhY2VDb2xvci5hICogdmVjNChkaWZmdXNlICogc3VyZmFjZUNvbG9yLnJnYiArIGtzcGVjdWxhciAqIHZlYzMoMSwxLDEpICogc3BlY3VsYXIsICAxLjApO1xcblxcbiAgZ2xfRnJhZ0NvbG9yID0gbGl0Q29sb3IgKiBvcGFjaXR5O1xcbn1cXG5cIl0pLG89bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuXFxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxudmVjMyBnZXRPcnRob2dvbmFsVmVjdG9yKHZlYzMgdikge1xcbiAgLy8gUmV0dXJuIHVwLXZlY3RvciBmb3Igb25seS16IHZlY3Rvci5cXG4gIC8vIFJldHVybiBheCArIGJ5ICsgY3ogPSAwLCBhIHBvaW50IHRoYXQgbGllcyBvbiB0aGUgcGxhbmUgdGhhdCBoYXMgdiBhcyBhIG5vcm1hbCBhbmQgdGhhdCBpc24ndCAoMCwwLDApLlxcbiAgLy8gRnJvbSB0aGUgYWJvdmUgaWYtc3RhdGVtZW50IHdlIGhhdmUgfHxhfHwgPiAwICBVICB8fGJ8fCA+IDAuXFxuICAvLyBBc3NpZ24geiA9IDAsIHggPSAtYiwgeSA9IGE6XFxuICAvLyBhKi1iICsgYiphICsgYyowID0gLWJhICsgYmEgKyAwID0gMFxcbiAgaWYgKHYueCp2LnggPiB2Lnoqdi56IHx8IHYueSp2LnkgPiB2Lnoqdi56KSB7XFxuICAgIHJldHVybiBub3JtYWxpemUodmVjMygtdi55LCB2LngsIDAuMCkpO1xcbiAgfSBlbHNlIHtcXG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKDAuMCwgdi56LCAtdi55KSk7XFxuICB9XFxufVxcblxcbi8vIENhbGN1bGF0ZSB0aGUgY29uZSB2ZXJ0ZXggYW5kIG5vcm1hbCBhdCB0aGUgZ2l2ZW4gaW5kZXguXFxuLy9cXG4vLyBUaGUgcmV0dXJuZWQgdmVydGV4IGlzIGZvciBhIGNvbmUgd2l0aCBpdHMgdG9wIGF0IG9yaWdpbiBhbmQgaGVpZ2h0IG9mIDEuMCxcXG4vLyBwb2ludGluZyBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSB2ZWN0b3IgYXR0cmlidXRlLlxcbi8vXFxuLy8gRWFjaCBjb25lIGlzIG1hZGUgdXAgb2YgYSB0b3AgdmVydGV4LCBhIGNlbnRlciBiYXNlIHZlcnRleCBhbmQgYmFzZSBwZXJpbWV0ZXIgdmVydGljZXMuXFxuLy8gVGhlc2UgdmVydGljZXMgYXJlIHVzZWQgdG8gbWFrZSB1cCB0aGUgdHJpYW5nbGVzIG9mIHRoZSBjb25lIGJ5IHRoZSBmb2xsb3dpbmc6XFxuLy8gICBzZWdtZW50ICsgMCB0b3AgdmVydGV4XFxuLy8gICBzZWdtZW50ICsgMSBwZXJpbWV0ZXIgdmVydGV4IGErMVxcbi8vICAgc2VnbWVudCArIDIgcGVyaW1ldGVyIHZlcnRleCBhXFxuLy8gICBzZWdtZW50ICsgMyBjZW50ZXIgYmFzZSB2ZXJ0ZXhcXG4vLyAgIHNlZ21lbnQgKyA0IHBlcmltZXRlciB2ZXJ0ZXggYVxcbi8vICAgc2VnbWVudCArIDUgcGVyaW1ldGVyIHZlcnRleCBhKzFcXG4vLyBXaGVyZSBzZWdtZW50IGlzIHRoZSBudW1iZXIgb2YgdGhlIHJhZGlhbCBzZWdtZW50ICogNiBhbmQgYSBpcyB0aGUgYW5nbGUgYXQgdGhhdCByYWRpYWwgc2VnbWVudC5cXG4vLyBUbyBnbyBmcm9tIGluZGV4IHRvIHNlZ21lbnQsIGZsb29yKGluZGV4IC8gNilcXG4vLyBUbyBnbyBmcm9tIHNlZ21lbnQgdG8gYW5nbGUsIDIqcGkgKiAoc2VnbWVudC9zZWdtZW50Q291bnQpXFxuLy8gVG8gZ28gZnJvbSBpbmRleCB0byBzZWdtZW50IGluZGV4LCBpbmRleCAtIChzZWdtZW50KjYpXFxuLy9cXG52ZWMzIGdldENvbmVQb3NpdGlvbih2ZWMzIGQsIGZsb2F0IHJhd0luZGV4LCBmbG9hdCBjb25lT2Zmc2V0LCBvdXQgdmVjMyBub3JtYWwpIHtcXG5cXG4gIGNvbnN0IGZsb2F0IHNlZ21lbnRDb3VudCA9IDguMDtcXG5cXG4gIGZsb2F0IGluZGV4ID0gcmF3SW5kZXggLSBmbG9vcihyYXdJbmRleCAvXFxuICAgIChzZWdtZW50Q291bnQgKiA2LjApKSAqXFxuICAgIChzZWdtZW50Q291bnQgKiA2LjApO1xcblxcbiAgZmxvYXQgc2VnbWVudCA9IGZsb29yKDAuMDAxICsgaW5kZXgvNi4wKTtcXG4gIGZsb2F0IHNlZ21lbnRJbmRleCA9IGluZGV4IC0gKHNlZ21lbnQqNi4wKTtcXG5cXG4gIG5vcm1hbCA9IC1ub3JtYWxpemUoZCk7XFxuXFxuICBpZiAoc2VnbWVudEluZGV4ID4gMi45OSAmJiBzZWdtZW50SW5kZXggPCAzLjAxKSB7XFxuICAgIHJldHVybiBtaXgodmVjMygwLjApLCAtZCwgY29uZU9mZnNldCk7XFxuICB9XFxuXFxuICBmbG9hdCBuZXh0QW5nbGUgPSAoXFxuICAgIChzZWdtZW50SW5kZXggPiAwLjk5ICYmICBzZWdtZW50SW5kZXggPCAxLjAxKSB8fFxcbiAgICAoc2VnbWVudEluZGV4ID4gNC45OSAmJiAgc2VnbWVudEluZGV4IDwgNS4wMSlcXG4gICkgPyAxLjAgOiAwLjA7XFxuICBmbG9hdCBhbmdsZSA9IDIuMCAqIDMuMTQxNTkgKiAoKHNlZ21lbnQgKyBuZXh0QW5nbGUpIC8gc2VnbWVudENvdW50KTtcXG5cXG4gIHZlYzMgdjEgPSBtaXgoZCwgdmVjMygwLjApLCBjb25lT2Zmc2V0KTtcXG4gIHZlYzMgdjIgPSB2MSAtIGQ7XFxuXFxuICB2ZWMzIHUgPSBnZXRPcnRob2dvbmFsVmVjdG9yKGQpO1xcbiAgdmVjMyB2ID0gbm9ybWFsaXplKGNyb3NzKHUsIGQpKTtcXG5cXG4gIHZlYzMgeCA9IHUgKiBjb3MoYW5nbGUpICogbGVuZ3RoKGQpKjAuMjU7XFxuICB2ZWMzIHkgPSB2ICogc2luKGFuZ2xlKSAqIGxlbmd0aChkKSowLjI1O1xcbiAgdmVjMyB2MyA9IHYyICsgeCArIHk7XFxuICBpZiAoc2VnbWVudEluZGV4IDwgMy4wKSB7XFxuICAgIHZlYzMgdHggPSB1ICogc2luKGFuZ2xlKTtcXG4gICAgdmVjMyB0eSA9IHYgKiAtY29zKGFuZ2xlKTtcXG4gICAgdmVjMyB0YW5nZW50ID0gdHggKyB0eTtcXG4gICAgbm9ybWFsID0gbm9ybWFsaXplKGNyb3NzKHYzIC0gdjEsIHRhbmdlbnQpKTtcXG4gIH1cXG5cXG4gIGlmIChzZWdtZW50SW5kZXggPT0gMC4wKSB7XFxuICAgIHJldHVybiBtaXgoZCwgdmVjMygwLjApLCBjb25lT2Zmc2V0KTtcXG4gIH1cXG4gIHJldHVybiB2MztcXG59XFxuXFxuYXR0cmlidXRlIHZlYzMgdmVjdG9yO1xcbmF0dHJpYnV0ZSB2ZWM0IHBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xcblxcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcXG5cXG51bmlmb3JtIGZsb2F0IHZlY3RvclNjYWxlO1xcbnVuaWZvcm0gZmxvYXQgY29uZVNjYWxlO1xcbnVuaWZvcm0gZmxvYXQgY29uZU9mZnNldDtcXG5cXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzQgZl9pZDtcXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWMzIG5vcm1hbDtcXG4gIHZlYzMgWFlaID0gZ2V0Q29uZVBvc2l0aW9uKG1hdDMobW9kZWwpICogKCh2ZWN0b3JTY2FsZSAqIGNvbmVTY2FsZSkgKiB2ZWN0b3IpLCBwb3NpdGlvbi53LCBjb25lT2Zmc2V0LCBub3JtYWwpO1xcbiAgdmVjNCBjb25lUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24ueHl6LCAxLjApICsgdmVjNChYWVosIDAuMCk7XFxuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogY29uZVBvc2l0aW9uO1xcbiAgZl9pZCAgICAgICAgPSBpZDtcXG4gIGZfcG9zaXRpb24gID0gcG9zaXRpb24ueHl6O1xcbn1cXG5cIl0pLHM9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcXG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xcbn1cXG5cXG51bmlmb3JtIHZlYzMgIGNsaXBCb3VuZHNbMl07XFxudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XFxuXFxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XFxudmFyeWluZyB2ZWM0IGZfaWQ7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9wb3NpdGlvbikpIGRpc2NhcmQ7XFxuXFxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZCwgZl9pZC54eXopO1xcbn1cIl0pO3IubWVzaFNoYWRlcj17dmVydGV4OmksZnJhZ21lbnQ6YSxhdHRyaWJ1dGVzOlt7bmFtZTpcInBvc2l0aW9uXCIsdHlwZTpcInZlYzRcIn0se25hbWU6XCJub3JtYWxcIix0eXBlOlwidmVjM1wifSx7bmFtZTpcImNvbG9yXCIsdHlwZTpcInZlYzRcIn0se25hbWU6XCJ1dlwiLHR5cGU6XCJ2ZWMyXCJ9LHtuYW1lOlwidmVjdG9yXCIsdHlwZTpcInZlYzNcIn1dfSxyLnBpY2tTaGFkZXI9e3ZlcnRleDpvLGZyYWdtZW50OnMsYXR0cmlidXRlczpbe25hbWU6XCJwb3NpdGlvblwiLHR5cGU6XCJ2ZWM0XCJ9LHtuYW1lOlwiaWRcIix0eXBlOlwidmVjNFwifSx7bmFtZTpcInZlY3RvclwiLHR5cGU6XCJ2ZWMzXCJ9XX19LHtnbHNsaWZ5OjQwMn1dLDI0MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17MDpcIk5PTkVcIiwxOlwiT05FXCIsMjpcIkxJTkVfTE9PUFwiLDM6XCJMSU5FX1NUUklQXCIsNDpcIlRSSUFOR0xFU1wiLDU6XCJUUklBTkdMRV9TVFJJUFwiLDY6XCJUUklBTkdMRV9GQU5cIiwyNTY6XCJERVBUSF9CVUZGRVJfQklUXCIsNTEyOlwiTkVWRVJcIiw1MTM6XCJMRVNTXCIsNTE0OlwiRVFVQUxcIiw1MTU6XCJMRVFVQUxcIiw1MTY6XCJHUkVBVEVSXCIsNTE3OlwiTk9URVFVQUxcIiw1MTg6XCJHRVFVQUxcIiw1MTk6XCJBTFdBWVNcIiw3Njg6XCJTUkNfQ09MT1JcIiw3Njk6XCJPTkVfTUlOVVNfU1JDX0NPTE9SXCIsNzcwOlwiU1JDX0FMUEhBXCIsNzcxOlwiT05FX01JTlVTX1NSQ19BTFBIQVwiLDc3MjpcIkRTVF9BTFBIQVwiLDc3MzpcIk9ORV9NSU5VU19EU1RfQUxQSEFcIiw3NzQ6XCJEU1RfQ09MT1JcIiw3NzU6XCJPTkVfTUlOVVNfRFNUX0NPTE9SXCIsNzc2OlwiU1JDX0FMUEhBX1NBVFVSQVRFXCIsMTAyNDpcIlNURU5DSUxfQlVGRkVSX0JJVFwiLDEwMjg6XCJGUk9OVFwiLDEwMjk6XCJCQUNLXCIsMTAzMjpcIkZST05UX0FORF9CQUNLXCIsMTI4MDpcIklOVkFMSURfRU5VTVwiLDEyODE6XCJJTlZBTElEX1ZBTFVFXCIsMTI4MjpcIklOVkFMSURfT1BFUkFUSU9OXCIsMTI4NTpcIk9VVF9PRl9NRU1PUllcIiwxMjg2OlwiSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT05cIiwyMzA0OlwiQ1dcIiwyMzA1OlwiQ0NXXCIsMjg0OTpcIkxJTkVfV0lEVEhcIiwyODg0OlwiQ1VMTF9GQUNFXCIsMjg4NTpcIkNVTExfRkFDRV9NT0RFXCIsMjg4NjpcIkZST05UX0ZBQ0VcIiwyOTI4OlwiREVQVEhfUkFOR0VcIiwyOTI5OlwiREVQVEhfVEVTVFwiLDI5MzA6XCJERVBUSF9XUklURU1BU0tcIiwyOTMxOlwiREVQVEhfQ0xFQVJfVkFMVUVcIiwyOTMyOlwiREVQVEhfRlVOQ1wiLDI5NjA6XCJTVEVOQ0lMX1RFU1RcIiwyOTYxOlwiU1RFTkNJTF9DTEVBUl9WQUxVRVwiLDI5NjI6XCJTVEVOQ0lMX0ZVTkNcIiwyOTYzOlwiU1RFTkNJTF9WQUxVRV9NQVNLXCIsMjk2NDpcIlNURU5DSUxfRkFJTFwiLDI5NjU6XCJTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTFwiLDI5NjY6XCJTVEVOQ0lMX1BBU1NfREVQVEhfUEFTU1wiLDI5Njc6XCJTVEVOQ0lMX1JFRlwiLDI5Njg6XCJTVEVOQ0lMX1dSSVRFTUFTS1wiLDI5Nzg6XCJWSUVXUE9SVFwiLDMwMjQ6XCJESVRIRVJcIiwzMDQyOlwiQkxFTkRcIiwzMDg4OlwiU0NJU1NPUl9CT1hcIiwzMDg5OlwiU0NJU1NPUl9URVNUXCIsMzEwNjpcIkNPTE9SX0NMRUFSX1ZBTFVFXCIsMzEwNzpcIkNPTE9SX1dSSVRFTUFTS1wiLDMzMTc6XCJVTlBBQ0tfQUxJR05NRU5UXCIsMzMzMzpcIlBBQ0tfQUxJR05NRU5UXCIsMzM3OTpcIk1BWF9URVhUVVJFX1NJWkVcIiwzMzg2OlwiTUFYX1ZJRVdQT1JUX0RJTVNcIiwzNDA4OlwiU1VCUElYRUxfQklUU1wiLDM0MTA6XCJSRURfQklUU1wiLDM0MTE6XCJHUkVFTl9CSVRTXCIsMzQxMjpcIkJMVUVfQklUU1wiLDM0MTM6XCJBTFBIQV9CSVRTXCIsMzQxNDpcIkRFUFRIX0JJVFNcIiwzNDE1OlwiU1RFTkNJTF9CSVRTXCIsMzU1MzpcIlRFWFRVUkVfMkRcIiw0MzUyOlwiRE9OVF9DQVJFXCIsNDM1MzpcIkZBU1RFU1RcIiw0MzU0OlwiTklDRVNUXCIsNTEyMDpcIkJZVEVcIiw1MTIxOlwiVU5TSUdORURfQllURVwiLDUxMjI6XCJTSE9SVFwiLDUxMjM6XCJVTlNJR05FRF9TSE9SVFwiLDUxMjQ6XCJJTlRcIiw1MTI1OlwiVU5TSUdORURfSU5UXCIsNTEyNjpcIkZMT0FUXCIsNTM4NjpcIklOVkVSVFwiLDU4OTA6XCJURVhUVVJFXCIsNjQwMTpcIlNURU5DSUxfSU5ERVhcIiw2NDAyOlwiREVQVEhfQ09NUE9ORU5UXCIsNjQwNjpcIkFMUEhBXCIsNjQwNzpcIlJHQlwiLDY0MDg6XCJSR0JBXCIsNjQwOTpcIkxVTUlOQU5DRVwiLDY0MTA6XCJMVU1JTkFOQ0VfQUxQSEFcIiw3NjgwOlwiS0VFUFwiLDc2ODE6XCJSRVBMQUNFXCIsNzY4MjpcIklOQ1JcIiw3NjgzOlwiREVDUlwiLDc5MzY6XCJWRU5ET1JcIiw3OTM3OlwiUkVOREVSRVJcIiw3OTM4OlwiVkVSU0lPTlwiLDk3Mjg6XCJORUFSRVNUXCIsOTcyOTpcIkxJTkVBUlwiLDk5ODQ6XCJORUFSRVNUX01JUE1BUF9ORUFSRVNUXCIsOTk4NTpcIkxJTkVBUl9NSVBNQVBfTkVBUkVTVFwiLDk5ODY6XCJORUFSRVNUX01JUE1BUF9MSU5FQVJcIiw5OTg3OlwiTElORUFSX01JUE1BUF9MSU5FQVJcIiwxMDI0MDpcIlRFWFRVUkVfTUFHX0ZJTFRFUlwiLDEwMjQxOlwiVEVYVFVSRV9NSU5fRklMVEVSXCIsMTAyNDI6XCJURVhUVVJFX1dSQVBfU1wiLDEwMjQzOlwiVEVYVFVSRV9XUkFQX1RcIiwxMDQ5NzpcIlJFUEVBVFwiLDEwNzUyOlwiUE9MWUdPTl9PRkZTRVRfVU5JVFNcIiwxNjM4NDpcIkNPTE9SX0JVRkZFUl9CSVRcIiwzMjc2OTpcIkNPTlNUQU5UX0NPTE9SXCIsMzI3NzA6XCJPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1JcIiwzMjc3MTpcIkNPTlNUQU5UX0FMUEhBXCIsMzI3NzI6XCJPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEFcIiwzMjc3MzpcIkJMRU5EX0NPTE9SXCIsMzI3NzQ6XCJGVU5DX0FERFwiLDMyNzc3OlwiQkxFTkRfRVFVQVRJT05fUkdCXCIsMzI3Nzg6XCJGVU5DX1NVQlRSQUNUXCIsMzI3Nzk6XCJGVU5DX1JFVkVSU0VfU1VCVFJBQ1RcIiwzMjgxOTpcIlVOU0lHTkVEX1NIT1JUXzRfNF80XzRcIiwzMjgyMDpcIlVOU0lHTkVEX1NIT1JUXzVfNV81XzFcIiwzMjgyMzpcIlBPTFlHT05fT0ZGU0VUX0ZJTExcIiwzMjgyNDpcIlBPTFlHT05fT0ZGU0VUX0ZBQ1RPUlwiLDMyODU0OlwiUkdCQTRcIiwzMjg1NTpcIlJHQjVfQTFcIiwzMjg3MzpcIlRFWFRVUkVfQklORElOR18yRFwiLDMyOTI2OlwiU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFXCIsMzI5Mjg6XCJTQU1QTEVfQ09WRVJBR0VcIiwzMjkzNjpcIlNBTVBMRV9CVUZGRVJTXCIsMzI5Mzc6XCJTQU1QTEVTXCIsMzI5Mzg6XCJTQU1QTEVfQ09WRVJBR0VfVkFMVUVcIiwzMjkzOTpcIlNBTVBMRV9DT1ZFUkFHRV9JTlZFUlRcIiwzMjk2ODpcIkJMRU5EX0RTVF9SR0JcIiwzMjk2OTpcIkJMRU5EX1NSQ19SR0JcIiwzMjk3MDpcIkJMRU5EX0RTVF9BTFBIQVwiLDMyOTcxOlwiQkxFTkRfU1JDX0FMUEhBXCIsMzMwNzE6XCJDTEFNUF9UT19FREdFXCIsMzMxNzA6XCJHRU5FUkFURV9NSVBNQVBfSElOVFwiLDMzMTg5OlwiREVQVEhfQ09NUE9ORU5UMTZcIiwzMzMwNjpcIkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVFwiLDMzNjM1OlwiVU5TSUdORURfU0hPUlRfNV82XzVcIiwzMzY0ODpcIk1JUlJPUkVEX1JFUEVBVFwiLDMzOTAxOlwiQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFXCIsMzM5MDI6XCJBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0VcIiwzMzk4NDpcIlRFWFRVUkUwXCIsMzM5ODU6XCJURVhUVVJFMVwiLDMzOTg2OlwiVEVYVFVSRTJcIiwzMzk4NzpcIlRFWFRVUkUzXCIsMzM5ODg6XCJURVhUVVJFNFwiLDMzOTg5OlwiVEVYVFVSRTVcIiwzMzk5MDpcIlRFWFRVUkU2XCIsMzM5OTE6XCJURVhUVVJFN1wiLDMzOTkyOlwiVEVYVFVSRThcIiwzMzk5MzpcIlRFWFRVUkU5XCIsMzM5OTQ6XCJURVhUVVJFMTBcIiwzMzk5NTpcIlRFWFRVUkUxMVwiLDMzOTk2OlwiVEVYVFVSRTEyXCIsMzM5OTc6XCJURVhUVVJFMTNcIiwzMzk5ODpcIlRFWFRVUkUxNFwiLDMzOTk5OlwiVEVYVFVSRTE1XCIsMzQwMDA6XCJURVhUVVJFMTZcIiwzNDAwMTpcIlRFWFRVUkUxN1wiLDM0MDAyOlwiVEVYVFVSRTE4XCIsMzQwMDM6XCJURVhUVVJFMTlcIiwzNDAwNDpcIlRFWFRVUkUyMFwiLDM0MDA1OlwiVEVYVFVSRTIxXCIsMzQwMDY6XCJURVhUVVJFMjJcIiwzNDAwNzpcIlRFWFRVUkUyM1wiLDM0MDA4OlwiVEVYVFVSRTI0XCIsMzQwMDk6XCJURVhUVVJFMjVcIiwzNDAxMDpcIlRFWFRVUkUyNlwiLDM0MDExOlwiVEVYVFVSRTI3XCIsMzQwMTI6XCJURVhUVVJFMjhcIiwzNDAxMzpcIlRFWFRVUkUyOVwiLDM0MDE0OlwiVEVYVFVSRTMwXCIsMzQwMTU6XCJURVhUVVJFMzFcIiwzNDAxNjpcIkFDVElWRV9URVhUVVJFXCIsMzQwMjQ6XCJNQVhfUkVOREVSQlVGRkVSX1NJWkVcIiwzNDA0MTpcIkRFUFRIX1NURU5DSUxcIiwzNDA1NTpcIklOQ1JfV1JBUFwiLDM0MDU2OlwiREVDUl9XUkFQXCIsMzQwNjc6XCJURVhUVVJFX0NVQkVfTUFQXCIsMzQwNjg6XCJURVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVBcIiwzNDA2OTpcIlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWFwiLDM0MDcwOlwiVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YXCIsMzQwNzE6XCJURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1lcIiwzNDA3MjpcIlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWVwiLDM0MDczOlwiVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aXCIsMzQwNzQ6XCJURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1pcIiwzNDA3NjpcIk1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkVcIiwzNDMzODpcIlZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRFwiLDM0MzM5OlwiVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFXCIsMzQzNDA6XCJWRVJURVhfQVRUUklCX0FSUkFZX1NUUklERVwiLDM0MzQxOlwiVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFXCIsMzQzNDI6XCJDVVJSRU5UX1ZFUlRFWF9BVFRSSUJcIiwzNDM3MzpcIlZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUlwiLDM0NDY2OlwiTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTXCIsMzQ0Njc6XCJDT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUU1wiLDM0NjYwOlwiQlVGRkVSX1NJWkVcIiwzNDY2MTpcIkJVRkZFUl9VU0FHRVwiLDM0ODE2OlwiU1RFTkNJTF9CQUNLX0ZVTkNcIiwzNDgxNzpcIlNURU5DSUxfQkFDS19GQUlMXCIsMzQ4MTg6XCJTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMXCIsMzQ4MTk6XCJTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTXCIsMzQ4Nzc6XCJCTEVORF9FUVVBVElPTl9BTFBIQVwiLDM0OTIxOlwiTUFYX1ZFUlRFWF9BVFRSSUJTXCIsMzQ5MjI6XCJWRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRURcIiwzNDkzMDpcIk1BWF9URVhUVVJFX0lNQUdFX1VOSVRTXCIsMzQ5NjI6XCJBUlJBWV9CVUZGRVJcIiwzNDk2MzpcIkVMRU1FTlRfQVJSQVlfQlVGRkVSXCIsMzQ5NjQ6XCJBUlJBWV9CVUZGRVJfQklORElOR1wiLDM0OTY1OlwiRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElOR1wiLDM0OTc1OlwiVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElOR1wiLDM1MDQwOlwiU1RSRUFNX0RSQVdcIiwzNTA0NDpcIlNUQVRJQ19EUkFXXCIsMzUwNDg6XCJEWU5BTUlDX0RSQVdcIiwzNTYzMjpcIkZSQUdNRU5UX1NIQURFUlwiLDM1NjMzOlwiVkVSVEVYX1NIQURFUlwiLDM1NjYwOlwiTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTXCIsMzU2NjE6XCJNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU1wiLDM1NjYzOlwiU0hBREVSX1RZUEVcIiwzNTY2NDpcIkZMT0FUX1ZFQzJcIiwzNTY2NTpcIkZMT0FUX1ZFQzNcIiwzNTY2NjpcIkZMT0FUX1ZFQzRcIiwzNTY2NzpcIklOVF9WRUMyXCIsMzU2Njg6XCJJTlRfVkVDM1wiLDM1NjY5OlwiSU5UX1ZFQzRcIiwzNTY3MDpcIkJPT0xcIiwzNTY3MTpcIkJPT0xfVkVDMlwiLDM1NjcyOlwiQk9PTF9WRUMzXCIsMzU2NzM6XCJCT09MX1ZFQzRcIiwzNTY3NDpcIkZMT0FUX01BVDJcIiwzNTY3NTpcIkZMT0FUX01BVDNcIiwzNTY3NjpcIkZMT0FUX01BVDRcIiwzNTY3ODpcIlNBTVBMRVJfMkRcIiwzNTY4MDpcIlNBTVBMRVJfQ1VCRVwiLDM1NzEyOlwiREVMRVRFX1NUQVRVU1wiLDM1NzEzOlwiQ09NUElMRV9TVEFUVVNcIiwzNTcxNDpcIkxJTktfU1RBVFVTXCIsMzU3MTU6XCJWQUxJREFURV9TVEFUVVNcIiwzNTcxNjpcIklORk9fTE9HX0xFTkdUSFwiLDM1NzE3OlwiQVRUQUNIRURfU0hBREVSU1wiLDM1NzE4OlwiQUNUSVZFX1VOSUZPUk1TXCIsMzU3MTk6XCJBQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIXCIsMzU3MjA6XCJTSEFERVJfU09VUkNFX0xFTkdUSFwiLDM1NzIxOlwiQUNUSVZFX0FUVFJJQlVURVNcIiwzNTcyMjpcIkFDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSFwiLDM1NzI0OlwiU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OXCIsMzU3MjU6XCJDVVJSRU5UX1BST0dSQU1cIiwzNjAwMzpcIlNURU5DSUxfQkFDS19SRUZcIiwzNjAwNDpcIlNURU5DSUxfQkFDS19WQUxVRV9NQVNLXCIsMzYwMDU6XCJTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLXCIsMzYwMDY6XCJGUkFNRUJVRkZFUl9CSU5ESU5HXCIsMzYwMDc6XCJSRU5ERVJCVUZGRVJfQklORElOR1wiLDM2MDQ4OlwiRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRVwiLDM2MDQ5OlwiRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRVwiLDM2MDUwOlwiRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMXCIsMzYwNTE6XCJGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRVwiLDM2MDUzOlwiRlJBTUVCVUZGRVJfQ09NUExFVEVcIiwzNjA1NDpcIkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVFwiLDM2MDU1OlwiRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlRcIiwzNjA1NzpcIkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OU1wiLDM2MDYxOlwiRlJBTUVCVUZGRVJfVU5TVVBQT1JURURcIiwzNjA2NDpcIkNPTE9SX0FUVEFDSE1FTlQwXCIsMzYwOTY6XCJERVBUSF9BVFRBQ0hNRU5UXCIsMzYxMjg6XCJTVEVOQ0lMX0FUVEFDSE1FTlRcIiwzNjE2MDpcIkZSQU1FQlVGRkVSXCIsMzYxNjE6XCJSRU5ERVJCVUZGRVJcIiwzNjE2MjpcIlJFTkRFUkJVRkZFUl9XSURUSFwiLDM2MTYzOlwiUkVOREVSQlVGRkVSX0hFSUdIVFwiLDM2MTY0OlwiUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVFwiLDM2MTY4OlwiU1RFTkNJTF9JTkRFWDhcIiwzNjE3NjpcIlJFTkRFUkJVRkZFUl9SRURfU0laRVwiLDM2MTc3OlwiUkVOREVSQlVGRkVSX0dSRUVOX1NJWkVcIiwzNjE3ODpcIlJFTkRFUkJVRkZFUl9CTFVFX1NJWkVcIiwzNjE3OTpcIlJFTkRFUkJVRkZFUl9BTFBIQV9TSVpFXCIsMzYxODA6XCJSRU5ERVJCVUZGRVJfREVQVEhfU0laRVwiLDM2MTgxOlwiUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRVwiLDM2MTk0OlwiUkdCNTY1XCIsMzYzMzY6XCJMT1dfRkxPQVRcIiwzNjMzNzpcIk1FRElVTV9GTE9BVFwiLDM2MzM4OlwiSElHSF9GTE9BVFwiLDM2MzM5OlwiTE9XX0lOVFwiLDM2MzQwOlwiTUVESVVNX0lOVFwiLDM2MzQxOlwiSElHSF9JTlRcIiwzNjM0NjpcIlNIQURFUl9DT01QSUxFUlwiLDM2MzQ3OlwiTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlNcIiwzNjM0ODpcIk1BWF9WQVJZSU5HX1ZFQ1RPUlNcIiwzNjM0OTpcIk1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlNcIiwzNzQ0MDpcIlVOUEFDS19GTElQX1lfV0VCR0xcIiwzNzQ0MTpcIlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTFwiLDM3NDQyOlwiQ09OVEVYVF9MT1NUX1dFQkdMXCIsMzc0NDM6XCJVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMXCIsMzc0NDQ6XCJCUk9XU0VSX0RFRkFVTFRfV0VCR0xcIn19LHt9XSwyNDM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi8xLjAvbnVtYmVyc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5bdF19fSx7XCIuLzEuMC9udW1iZXJzXCI6MjQyfV0sMjQ0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUpLG89aShlLFt7YnVmZmVyOnIsdHlwZTplLkZMT0FULHNpemU6MyxvZmZzZXQ6MCxzdHJpZGU6NDB9LHtidWZmZXI6cix0eXBlOmUuRkxPQVQsc2l6ZTo0LG9mZnNldDoxMixzdHJpZGU6NDB9LHtidWZmZXI6cix0eXBlOmUuRkxPQVQsc2l6ZTozLG9mZnNldDoyOCxzdHJpZGU6NDB9XSksbD1hKGUpO2wuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGwuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0xLGwuYXR0cmlidXRlcy5vZmZzZXQubG9jYXRpb249Mjt2YXIgYz1uZXcgcyhlLHIsbyxsKTtyZXR1cm4gYy51cGRhdGUodCksY307dmFyIG49dChcImdsLWJ1ZmZlclwiKSxpPXQoXCJnbC12YW9cIiksYT10KFwiLi9zaGFkZXJzL2luZGV4XCIpLG89WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIHModCxlLHIsbil7dGhpcy5nbD10LHRoaXMuc2hhZGVyPW4sdGhpcy5idWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmxpbmVXaWR0aD1bMSwxLDFdLHRoaXMuY2FwU2l6ZT1bMTAsMTAsMTBdLHRoaXMubGluZUNvdW50PVswLDAsMF0sdGhpcy5saW5lT2Zmc2V0PVswLDAsMF0sdGhpcy5vcGFjaXR5PTEsdGhpcy5oYXNBbHBoYT0hMX12YXIgbD1zLnByb3RvdHlwZTtmdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciByPTA7cjwzOysrcil0WzBdW3JdPU1hdGgubWluKHRbMF1bcl0sZVtyXSksdFsxXVtyXT1NYXRoLm1heCh0WzFdW3JdLGVbcl0pfWwuaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5oYXNBbHBoYX0sbC5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzQWxwaGF9LGwuZHJhd1RyYW5zcGFyZW50PWwuZHJhdz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsLHI9dGhpcy5zaGFkZXIudW5pZm9ybXM7dGhpcy5zaGFkZXIuYmluZCgpO3ZhciBuPXIudmlldz10LnZpZXd8fG8saT1yLnByb2plY3Rpb249dC5wcm9qZWN0aW9ufHxvO3IubW9kZWw9dC5tb2RlbHx8byxyLmNsaXBCb3VuZHM9dGhpcy5jbGlwQm91bmRzLHIub3BhY2l0eT10aGlzLm9wYWNpdHk7dmFyIGE9blsxMl0scz1uWzEzXSxsPW5bMTRdLGM9blsxNV0sdT0odC5fb3J0aG98fCExPzI6MSkqdGhpcy5waXhlbFJhdGlvKihpWzNdKmEraVs3XSpzK2lbMTFdKmwraVsxNV0qYykvZS5kcmF3aW5nQnVmZmVySGVpZ2h0O3RoaXMudmFvLmJpbmQoKTtmb3IodmFyIGg9MDtoPDM7KytoKWUubGluZVdpZHRoKHRoaXMubGluZVdpZHRoW2hdKnRoaXMucGl4ZWxSYXRpbyksci5jYXBTaXplPXRoaXMuY2FwU2l6ZVtoXSp1LHRoaXMubGluZUNvdW50W2hdJiZlLmRyYXdBcnJheXMoZS5MSU5FUyx0aGlzLmxpbmVPZmZzZXRbaF0sdGhpcy5saW5lQ291bnRbaF0pO3RoaXMudmFvLnVuYmluZCgpfTt2YXIgdT1mdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgQXJyYXkoMyksZT0wO2U8MzsrK2Upe2Zvcih2YXIgcj1bXSxuPTE7bjw9MjsrK24pZm9yKHZhciBpPS0xO2k8PTE7aSs9Mil7dmFyIGE9WzAsMCwwXTthWyhuK2UpJTNdPWksci5wdXNoKGEpfXRbZV09cn1yZXR1cm4gdH0oKTtmdW5jdGlvbiBoKHQsZSxyLG4pe2Zvcih2YXIgaT11W25dLGE9MDthPGkubGVuZ3RoOysrYSl7dmFyIG89aVthXTt0LnB1c2goZVswXSxlWzFdLGVbMl0sclswXSxyWzFdLHJbMl0sclszXSxvWzBdLG9bMV0sb1syXSl9cmV0dXJuIGkubGVuZ3RofWwudXBkYXRlPWZ1bmN0aW9uKHQpe1wibGluZVdpZHRoXCJpbih0PXR8fHt9KSYmKHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRoLEFycmF5LmlzQXJyYXkodGhpcy5saW5lV2lkdGgpfHwodGhpcy5saW5lV2lkdGg9W3RoaXMubGluZVdpZHRoLHRoaXMubGluZVdpZHRoLHRoaXMubGluZVdpZHRoXSkpLFwiY2FwU2l6ZVwiaW4gdCYmKHRoaXMuY2FwU2l6ZT10LmNhcFNpemUsQXJyYXkuaXNBcnJheSh0aGlzLmNhcFNpemUpfHwodGhpcy5jYXBTaXplPVt0aGlzLmNhcFNpemUsdGhpcy5jYXBTaXplLHRoaXMuY2FwU2l6ZV0pKSx0aGlzLmhhc0FscGhhPSExLFwib3BhY2l0eVwiaW4gdCYmKHRoaXMub3BhY2l0eT0rdC5vcGFjaXR5LHRoaXMub3BhY2l0eTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpO3ZhciBlPXQuY29sb3J8fFtbMCwwLDBdLFswLDAsMF0sWzAsMCwwXV0scj10LnBvc2l0aW9uLG49dC5lcnJvcjtpZihBcnJheS5pc0FycmF5KGVbMF0pfHwoZT1bZSxlLGVdKSxyJiZuKXt2YXIgaT1bXSxhPXIubGVuZ3RoLG89MDt0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmxpbmVDb3VudD1bMCwwLDBdO2Zvcih2YXIgcz0wO3M8MzsrK3Mpe3RoaXMubGluZU9mZnNldFtzXT1vO3Q6Zm9yKHZhciBsPTA7bDxhOysrbCl7Zm9yKHZhciB1PXJbbF0sZj0wO2Y8MzsrK2YpaWYoaXNOYU4odVtmXSl8fCFpc0Zpbml0ZSh1W2ZdKSljb250aW51ZSB0O3ZhciBwPW5bbF0sZD1lW3NdO2lmKEFycmF5LmlzQXJyYXkoZFswXSkmJihkPWVbbF0pLDM9PT1kLmxlbmd0aD9kPVtkWzBdLGRbMV0sZFsyXSwxXTo0PT09ZC5sZW5ndGgmJihkPVtkWzBdLGRbMV0sZFsyXSxkWzNdXSwhdGhpcy5oYXNBbHBoYSYmZFszXTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpLCFpc05hTihwWzBdW3NdKSYmIWlzTmFOKHBbMV1bc10pKXt2YXIgZztpZihwWzBdW3NdPDApKGc9dS5zbGljZSgpKVtzXSs9cFswXVtzXSxpLnB1c2godVswXSx1WzFdLHVbMl0sZFswXSxkWzFdLGRbMl0sZFszXSwwLDAsMCxnWzBdLGdbMV0sZ1syXSxkWzBdLGRbMV0sZFsyXSxkWzNdLDAsMCwwKSxjKHRoaXMuYm91bmRzLGcpLG8rPTIraChpLGcsZCxzKTtpZihwWzFdW3NdPjApKGc9dS5zbGljZSgpKVtzXSs9cFsxXVtzXSxpLnB1c2godVswXSx1WzFdLHVbMl0sZFswXSxkWzFdLGRbMl0sZFszXSwwLDAsMCxnWzBdLGdbMV0sZ1syXSxkWzBdLGRbMV0sZFsyXSxkWzNdLDAsMCwwKSxjKHRoaXMuYm91bmRzLGcpLG8rPTIraChpLGcsZCxzKX19dGhpcy5saW5lQ291bnRbc109by10aGlzLmxpbmVPZmZzZXRbc119dGhpcy5idWZmZXIudXBkYXRlKGkpfX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnZhby5kaXNwb3NlKCl9fSx7XCIuL3NoYWRlcnMvaW5kZXhcIjoyNDUsXCJnbC1idWZmZXJcIjoyMzgsXCJnbC12YW9cIjozMjB9XSwyNDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2xzbGlmeVwiKSxpPXQoXCJnbC1zaGFkZXJcIiksYT1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uLCBvZmZzZXQ7XFxuYXR0cmlidXRlIHZlYzQgY29sb3I7XFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcbnVuaWZvcm0gZmxvYXQgY2FwU2l6ZTtcXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xcbnZhcnlpbmcgdmVjMyBmcmFnUG9zaXRpb247XFxuXFxudm9pZCBtYWluKCkge1xcbiAgdmVjNCB3b3JsZFBvc2l0aW9uICA9IG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG4gIHdvcmxkUG9zaXRpb24gICAgICAgPSAod29ybGRQb3NpdGlvbiAvIHdvcmxkUG9zaXRpb24udykgKyB2ZWM0KGNhcFNpemUgKiBvZmZzZXQsIDAuMCk7XFxuICBnbF9Qb3NpdGlvbiAgICAgICAgID0gcHJvamVjdGlvbiAqIHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xcbiAgZnJhZ0NvbG9yICAgICAgICAgICA9IGNvbG9yO1xcbiAgZnJhZ1Bvc2l0aW9uICAgICAgICA9IHBvc2l0aW9uO1xcbn1cIl0pLG89bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcXG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xcbn1cXG5cXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxudmFyeWluZyB2ZWMzIGZyYWdQb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmIChcXG4gICAgb3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBmcmFnUG9zaXRpb24pIHx8XFxuICAgIGZyYWdDb2xvci5hICogb3BhY2l0eSA9PSAwLlxcbiAgKSBkaXNjYXJkO1xcblxcbiAgZ2xfRnJhZ0NvbG9yID0gb3BhY2l0eSAqIGZyYWdDb2xvcjtcXG59XCJdKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxhLG8sbnVsbCxbe25hbWU6XCJwb3NpdGlvblwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwiY29sb3JcIix0eXBlOlwidmVjNFwifSx7bmFtZTpcIm9mZnNldFwiLHR5cGU6XCJ2ZWMzXCJ9XSl9fSx7XCJnbC1zaGFkZXJcIjoyOTgsZ2xzbGlmeTo0MDJ9XSwyNDY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2wtdGV4dHVyZTJkXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtpfHwoaT10LkZSQU1FQlVGRkVSX1VOU1VQUE9SVEVELGE9dC5GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQsbz10LkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyxzPXQuRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQpO3ZhciBjPXQuZ2V0RXh0ZW5zaW9uKFwiV0VCR0xfZHJhd19idWZmZXJzXCIpOyFsJiZjJiZmdW5jdGlvbih0LGUpe3ZhciByPXQuZ2V0UGFyYW1ldGVyKGUuTUFYX0NPTE9SX0FUVEFDSE1FTlRTX1dFQkdMKTtsPW5ldyBBcnJheShyKzEpO2Zvcih2YXIgbj0wO248PXI7KytuKXtmb3IodmFyIGk9bmV3IEFycmF5KHIpLGE9MDthPG47KythKWlbYV09dC5DT0xPUl9BVFRBQ0hNRU5UMCthO2Zvcih2YXIgYT1uO2E8cjsrK2EpaVthXT10Lk5PTkU7bFtuXT1pfX0odCxjKTtBcnJheS5pc0FycmF5KGUpJiYobj1yLHI9MHxlWzFdLGU9MHxlWzBdKTtpZihcIm51bWJlclwiIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoXCJnbC1mYm86IE1pc3Npbmcgc2hhcGUgcGFyYW1ldGVyXCIpO3ZhciB1PXQuZ2V0UGFyYW1ldGVyKHQuTUFYX1JFTkRFUkJVRkZFUl9TSVpFKTtpZihlPDB8fGU+dXx8cjwwfHxyPnUpdGhyb3cgbmV3IEVycm9yKFwiZ2wtZmJvOiBQYXJhbWV0ZXJzIGFyZSB0b28gbGFyZ2UgZm9yIEZCT1wiKTt2YXIgaD0xO2lmKFwiY29sb3JcImluKG49bnx8e30pKXtpZigoaD1NYXRoLm1heCgwfG4uY29sb3IsMCkpPDApdGhyb3cgbmV3IEVycm9yKFwiZ2wtZmJvOiBNdXN0IHNwZWNpZnkgYSBub25uZWdhdGl2ZSBudW1iZXIgb2YgY29sb3JzXCIpO2lmKGg+MSl7aWYoIWMpdGhyb3cgbmV3IEVycm9yKFwiZ2wtZmJvOiBNdWx0aXBsZSBkcmF3IGJ1ZmZlciBleHRlbnNpb24gbm90IHN1cHBvcnRlZFwiKTtpZihoPnQuZ2V0UGFyYW1ldGVyKGMuTUFYX0NPTE9SX0FUVEFDSE1FTlRTX1dFQkdMKSl0aHJvdyBuZXcgRXJyb3IoXCJnbC1mYm86IENvbnRleHQgZG9lcyBub3Qgc3VwcG9ydCBcIitoK1wiIGRyYXcgYnVmZmVyc1wiKX19dmFyIGY9dC5VTlNJR05FRF9CWVRFLHA9dC5nZXRFeHRlbnNpb24oXCJPRVNfdGV4dHVyZV9mbG9hdFwiKTtpZihuLmZsb2F0JiZoPjApe2lmKCFwKXRocm93IG5ldyBFcnJvcihcImdsLWZibzogQ29udGV4dCBkb2VzIG5vdCBzdXBwb3J0IGZsb2F0aW5nIHBvaW50IHRleHR1cmVzXCIpO2Y9dC5GTE9BVH1lbHNlIG4ucHJlZmVyRmxvYXQmJmg+MCYmcCYmKGY9dC5GTE9BVCk7dmFyIGc9ITA7XCJkZXB0aFwiaW4gbiYmKGc9ISFuLmRlcHRoKTt2YXIgdj0hMTtcInN0ZW5jaWxcImluIG4mJih2PSEhbi5zdGVuY2lsKTtyZXR1cm4gbmV3IGQodCxlLHIsZixoLGcsdixjKX07dmFyIGksYSxvLHMsbD1udWxsO2Z1bmN0aW9uIGModCl7cmV0dXJuW3QuZ2V0UGFyYW1ldGVyKHQuRlJBTUVCVUZGRVJfQklORElORyksdC5nZXRQYXJhbWV0ZXIodC5SRU5ERVJCVUZGRVJfQklORElORyksdC5nZXRQYXJhbWV0ZXIodC5URVhUVVJFX0JJTkRJTkdfMkQpXX1mdW5jdGlvbiB1KHQsZSl7dC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUixlWzBdKSx0LmJpbmRSZW5kZXJidWZmZXIodC5SRU5ERVJCVUZGRVIsZVsxXSksdC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsZVsyXSl9ZnVuY3Rpb24gaCh0KXtzd2l0Y2godCl7Y2FzZSBpOnRocm93IG5ldyBFcnJvcihcImdsLWZibzogRnJhbWVidWZmZXIgdW5zdXBwb3J0ZWRcIik7Y2FzZSBhOnRocm93IG5ldyBFcnJvcihcImdsLWZibzogRnJhbWVidWZmZXIgaW5jb21wbGV0ZSBhdHRhY2htZW50XCIpO2Nhc2Ugbzp0aHJvdyBuZXcgRXJyb3IoXCJnbC1mYm86IEZyYW1lYnVmZmVyIGluY29tcGxldGUgZGltZW5zaW9uc1wiKTtjYXNlIHM6dGhyb3cgbmV3IEVycm9yKFwiZ2wtZmJvOiBGcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIG1pc3NpbmcgYXR0YWNobWVudFwiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImdsLWZibzogRnJhbWVidWZmZXIgZmFpbGVkIGZvciB1bnNwZWNpZmllZCByZWFzb25cIil9fWZ1bmN0aW9uIGYodCxlLHIsaSxhLG8pe2lmKCFpKXJldHVybiBudWxsO3ZhciBzPW4odCxlLHIsYSxpKTtyZXR1cm4gcy5tYWdGaWx0ZXI9dC5ORUFSRVNULHMubWluRmlsdGVyPXQuTkVBUkVTVCxzLm1pcFNhbXBsZXM9MSxzLmJpbmQoKSx0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKHQuRlJBTUVCVUZGRVIsbyx0LlRFWFRVUkVfMkQscy5oYW5kbGUsMCksc31mdW5jdGlvbiBwKHQsZSxyLG4saSl7dmFyIGE9dC5jcmVhdGVSZW5kZXJidWZmZXIoKTtyZXR1cm4gdC5iaW5kUmVuZGVyYnVmZmVyKHQuUkVOREVSQlVGRkVSLGEpLHQucmVuZGVyYnVmZmVyU3RvcmFnZSh0LlJFTkRFUkJVRkZFUixuLGUsciksdC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0LkZSQU1FQlVGRkVSLGksdC5SRU5ERVJCVUZGRVIsYSksYX1mdW5jdGlvbiBkKHQsZSxyLG4saSxhLG8scyl7dGhpcy5nbD10LHRoaXMuX3NoYXBlPVswfGUsMHxyXSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZXh0PXMsdGhpcy5jb2xvcj1uZXcgQXJyYXkoaSk7Zm9yKHZhciBkPTA7ZDxpOysrZCl0aGlzLmNvbG9yW2RdPW51bGw7dGhpcy5fY29sb3JfcmI9bnVsbCx0aGlzLmRlcHRoPW51bGwsdGhpcy5fZGVwdGhfcmI9bnVsbCx0aGlzLl9jb2xvclR5cGU9bix0aGlzLl91c2VEZXB0aD1hLHRoaXMuX3VzZVN0ZW5jaWw9bzt2YXIgZz10aGlzLHY9WzB8ZSwwfHJdO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHYsezA6e2dldDpmdW5jdGlvbigpe3JldHVybiBnLl9zaGFwZVswXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBnLndpZHRoPXR9fSwxOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5fc2hhcGVbMV19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gZy5oZWlnaHQ9dH19fSksdGhpcy5fc2hhcGVWZWN0b3I9dixmdW5jdGlvbih0KXt2YXIgZT1jKHQuZ2wpLHI9dC5nbCxuPXQuaGFuZGxlPXIuY3JlYXRlRnJhbWVidWZmZXIoKSxpPXQuX3NoYXBlWzBdLGE9dC5fc2hhcGVbMV0sbz10LmNvbG9yLmxlbmd0aCxzPXQuX2V4dCxkPXQuX3VzZVN0ZW5jaWwsZz10Ll91c2VEZXB0aCx2PXQuX2NvbG9yVHlwZTtyLmJpbmRGcmFtZWJ1ZmZlcihyLkZSQU1FQlVGRkVSLG4pO2Zvcih2YXIgbT0wO208bzsrK20pdC5jb2xvclttXT1mKHIsaSxhLHYsci5SR0JBLHIuQ09MT1JfQVRUQUNITUVOVDArbSk7MD09PW8/KHQuX2NvbG9yX3JiPXAocixpLGEsci5SR0JBNCxyLkNPTE9SX0FUVEFDSE1FTlQwKSxzJiZzLmRyYXdCdWZmZXJzV0VCR0wobFswXSkpOm8+MSYmcy5kcmF3QnVmZmVyc1dFQkdMKGxbb10pO3ZhciB5PXIuZ2V0RXh0ZW5zaW9uKFwiV0VCR0xfZGVwdGhfdGV4dHVyZVwiKTt5P2Q/dC5kZXB0aD1mKHIsaSxhLHkuVU5TSUdORURfSU5UXzI0XzhfV0VCR0wsci5ERVBUSF9TVEVOQ0lMLHIuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKTpnJiYodC5kZXB0aD1mKHIsaSxhLHIuVU5TSUdORURfU0hPUlQsci5ERVBUSF9DT01QT05FTlQsci5ERVBUSF9BVFRBQ0hNRU5UKSk6ZyYmZD90Ll9kZXB0aF9yYj1wKHIsaSxhLHIuREVQVEhfU1RFTkNJTCxyLkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCk6Zz90Ll9kZXB0aF9yYj1wKHIsaSxhLHIuREVQVEhfQ09NUE9ORU5UMTYsci5ERVBUSF9BVFRBQ0hNRU5UKTpkJiYodC5fZGVwdGhfcmI9cChyLGksYSxyLlNURU5DSUxfSU5ERVgsci5TVEVOQ0lMX0FUVEFDSE1FTlQpKTt2YXIgeD1yLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoci5GUkFNRUJVRkZFUik7aWYoeCE9PXIuRlJBTUVCVUZGRVJfQ09NUExFVEUpe2Zvcih0Ll9kZXN0cm95ZWQ9ITAsci5iaW5kRnJhbWVidWZmZXIoci5GUkFNRUJVRkZFUixudWxsKSxyLmRlbGV0ZUZyYW1lYnVmZmVyKHQuaGFuZGxlKSx0LmhhbmRsZT1udWxsLHQuZGVwdGgmJih0LmRlcHRoLmRpc3Bvc2UoKSx0LmRlcHRoPW51bGwpLHQuX2RlcHRoX3JiJiYoci5kZWxldGVSZW5kZXJidWZmZXIodC5fZGVwdGhfcmIpLHQuX2RlcHRoX3JiPW51bGwpLG09MDttPHQuY29sb3IubGVuZ3RoOysrbSl0LmNvbG9yW21dLmRpc3Bvc2UoKSx0LmNvbG9yW21dPW51bGw7dC5fY29sb3JfcmImJihyLmRlbGV0ZVJlbmRlcmJ1ZmZlcih0Ll9jb2xvcl9yYiksdC5fY29sb3JfcmI9bnVsbCksdShyLGUpLGgoeCl9dShyLGUpfSh0aGlzKX12YXIgZz1kLnByb3RvdHlwZTtmdW5jdGlvbiB2KHQsZSxyKXtpZih0Ll9kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKFwiZ2wtZmJvOiBDYW4ndCByZXNpemUgZGVzdHJveWVkIEZCT1wiKTtpZih0Ll9zaGFwZVswXSE9PWV8fHQuX3NoYXBlWzFdIT09cil7dmFyIG49dC5nbCxpPW4uZ2V0UGFyYW1ldGVyKG4uTUFYX1JFTkRFUkJVRkZFUl9TSVpFKTtpZihlPDB8fGU+aXx8cjwwfHxyPmkpdGhyb3cgbmV3IEVycm9yKFwiZ2wtZmJvOiBDYW4ndCByZXNpemUgRkJPLCBpbnZhbGlkIGRpbWVuc2lvbnNcIik7dC5fc2hhcGVbMF09ZSx0Ll9zaGFwZVsxXT1yO2Zvcih2YXIgYT1jKG4pLG89MDtvPHQuY29sb3IubGVuZ3RoOysrbyl0LmNvbG9yW29dLnNoYXBlPXQuX3NoYXBlO3QuX2NvbG9yX3JiJiYobi5iaW5kUmVuZGVyYnVmZmVyKG4uUkVOREVSQlVGRkVSLHQuX2NvbG9yX3JiKSxuLnJlbmRlcmJ1ZmZlclN0b3JhZ2Uobi5SRU5ERVJCVUZGRVIsbi5SR0JBNCx0Ll9zaGFwZVswXSx0Ll9zaGFwZVsxXSkpLHQuZGVwdGgmJih0LmRlcHRoLnNoYXBlPXQuX3NoYXBlKSx0Ll9kZXB0aF9yYiYmKG4uYmluZFJlbmRlcmJ1ZmZlcihuLlJFTkRFUkJVRkZFUix0Ll9kZXB0aF9yYiksdC5fdXNlRGVwdGgmJnQuX3VzZVN0ZW5jaWw/bi5yZW5kZXJidWZmZXJTdG9yYWdlKG4uUkVOREVSQlVGRkVSLG4uREVQVEhfU1RFTkNJTCx0Ll9zaGFwZVswXSx0Ll9zaGFwZVsxXSk6dC5fdXNlRGVwdGg/bi5yZW5kZXJidWZmZXJTdG9yYWdlKG4uUkVOREVSQlVGRkVSLG4uREVQVEhfQ09NUE9ORU5UMTYsdC5fc2hhcGVbMF0sdC5fc2hhcGVbMV0pOnQuX3VzZVN0ZW5jaWwmJm4ucmVuZGVyYnVmZmVyU3RvcmFnZShuLlJFTkRFUkJVRkZFUixuLlNURU5DSUxfSU5ERVgsdC5fc2hhcGVbMF0sdC5fc2hhcGVbMV0pKSxuLmJpbmRGcmFtZWJ1ZmZlcihuLkZSQU1FQlVGRkVSLHQuaGFuZGxlKTt2YXIgcz1uLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMobi5GUkFNRUJVRkZFUik7cyE9PW4uRlJBTUVCVUZGRVJfQ09NUExFVEUmJih0LmRpc3Bvc2UoKSx1KG4sYSksaChzKSksdShuLGEpfX1PYmplY3QuZGVmaW5lUHJvcGVydGllcyhnLHtzaGFwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZD9bMCwwXTp0aGlzLl9zaGFwZVZlY3Rvcn0sc2V0OmZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCl8fCh0PVswfHQsMHx0XSksMiE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImdsLWZibzogU2hhcGUgdmVjdG9yIG11c3QgYmUgbGVuZ3RoIDJcIik7dmFyIGU9MHx0WzBdLHI9MHx0WzFdO3JldHVybiB2KHRoaXMsZSxyKSxbZSxyXX0sZW51bWVyYWJsZTohMX0sd2lkdGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZXN0cm95ZWQ/MDp0aGlzLl9zaGFwZVswXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB2KHRoaXMsdHw9MCx0aGlzLl9zaGFwZVsxXSksdH0sZW51bWVyYWJsZTohMX0saGVpZ2h0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkPzA6dGhpcy5fc2hhcGVbMV19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdHw9MCx2KHRoaXMsdGhpcy5fc2hhcGVbMF0sdCksdH0sZW51bWVyYWJsZTohMX19KSxnLmJpbmQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fZGVzdHJveWVkKXt2YXIgdD10aGlzLmdsO3QuYmluZEZyYW1lYnVmZmVyKHQuRlJBTUVCVUZGRVIsdGhpcy5oYW5kbGUpLHQudmlld3BvcnQoMCwwLHRoaXMuX3NoYXBlWzBdLHRoaXMuX3NoYXBlWzFdKX19LGcuZGlzcG9zZT1mdW5jdGlvbigpe2lmKCF0aGlzLl9kZXN0cm95ZWQpe3RoaXMuX2Rlc3Ryb3llZD0hMDt2YXIgdD10aGlzLmdsO3QuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5oYW5kbGUpLHRoaXMuaGFuZGxlPW51bGwsdGhpcy5kZXB0aCYmKHRoaXMuZGVwdGguZGlzcG9zZSgpLHRoaXMuZGVwdGg9bnVsbCksdGhpcy5fZGVwdGhfcmImJih0LmRlbGV0ZVJlbmRlcmJ1ZmZlcih0aGlzLl9kZXB0aF9yYiksdGhpcy5fZGVwdGhfcmI9bnVsbCk7Zm9yKHZhciBlPTA7ZTx0aGlzLmNvbG9yLmxlbmd0aDsrK2UpdGhpcy5jb2xvcltlXS5kaXNwb3NlKCksdGhpcy5jb2xvcltlXT1udWxsO3RoaXMuX2NvbG9yX3JiJiYodC5kZWxldGVSZW5kZXJidWZmZXIodGhpcy5fY29sb3JfcmIpLHRoaXMuX2NvbG9yX3JiPW51bGwpfX19LHtcImdsLXRleHR1cmUyZFwiOjMxNX1dLDI0NzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCJzcHJpbnRmLWpzXCIpLnNwcmludGYsaT10KFwiZ2wtY29uc3RhbnRzL2xvb2t1cFwiKSxhPXQoXCJnbHNsLXNoYWRlci1uYW1lXCIpLG89dChcImFkZC1saW5lLW51bWJlcnNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgcz1hKGUpfHxcIm9mIHVua25vd24gbmFtZSAoc2VlIG5wbSBnbHNsLXNoYWRlci1uYW1lKVwiLGw9XCJ1bmtub3duIHR5cGVcIjt2b2lkIDAhPT1yJiYobD1yPT09aS5GUkFHTUVOVF9TSEFERVI/XCJmcmFnbWVudFwiOlwidmVydGV4XCIpO2Zvcih2YXIgYz1uKFwiRXJyb3IgY29tcGlsaW5nICVzIHNoYWRlciAlczpcXG5cIixsLHMpLHU9bihcIiVzJXNcIixjLHQpLGg9dC5zcGxpdChcIlxcblwiKSxmPXt9LHA9MDtwPGgubGVuZ3RoO3ArKyl7dmFyIGQ9aFtwXTtpZihcIlwiIT09ZCYmXCJcXDBcIiE9PWQpe3ZhciBnPXBhcnNlSW50KGQuc3BsaXQoXCI6XCIpWzJdKTtpZihpc05hTihnKSl0aHJvdyBuZXcgRXJyb3IobihcIkNvdWxkIG5vdCBwYXJzZSBlcnJvcjogJXNcIixkKSk7ZltnXT1kfX1mb3IodmFyIHY9byhlKS5zcGxpdChcIlxcblwiKSxwPTA7cDx2Lmxlbmd0aDtwKyspaWYoZltwKzNdfHxmW3ArMl18fGZbcCsxXSl7dmFyIG09dltwXTtpZihjKz1tK1wiXFxuXCIsZltwKzFdKXt2YXIgeT1mW3ArMV07eT15LnN1YnN0cih5LnNwbGl0KFwiOlwiLDMpLmpvaW4oXCI6XCIpLmxlbmd0aCsxKS50cmltKCksYys9bihcIl5eXiAlc1xcblxcblwiLHkpfX1yZXR1cm57bG9uZzpjLnRyaW0oKSxzaG9ydDp1LnRyaW0oKX19fSx7XCJhZGQtbGluZS1udW1iZXJzXCI6NTIsXCJnbC1jb25zdGFudHMvbG9va3VwXCI6MjQzLFwiZ2xzbC1zaGFkZXItbmFtZVwiOjM5NCxcInNwcmludGYtanNcIjo1MTN9XSwyNDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdsLG49byhyLGwudmVydGV4LGwuZnJhZ21lbnQpLGk9byhyLGwucGlja1ZlcnRleCxsLnBpY2tGcmFnbWVudCksYT1zKHIpLHU9cyhyKSxoPXMociksZj1zKHIpLHA9bmV3IGModCxuLGksYSx1LGgsZik7cmV0dXJuIHAudXBkYXRlKGUpLHQuYWRkT2JqZWN0KHApLHB9O3ZhciBuPXQoXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiKSxpPXQoXCJpb3RhLWFycmF5XCIpLGE9dChcInR5cGVkYXJyYXktcG9vbFwiKSxvPXQoXCJnbC1zaGFkZXJcIikscz10KFwiZ2wtYnVmZmVyXCIpLGw9dChcIi4vbGliL3NoYWRlcnNcIik7ZnVuY3Rpb24gYyh0LGUscixuLGksYSxvKXt0aGlzLnBsb3Q9dCx0aGlzLnNoYWRlcj1lLHRoaXMucGlja1NoYWRlcj1yLHRoaXMucG9zaXRpb25CdWZmZXI9bix0aGlzLndlaWdodEJ1ZmZlcj1pLHRoaXMuY29sb3JCdWZmZXI9YSx0aGlzLmlkQnVmZmVyPW8sdGhpcy54RGF0YT1bXSx0aGlzLnlEYXRhPVtdLHRoaXMuc2hhcGU9WzAsMF0sdGhpcy5ib3VuZHM9WzEvMCwxLzAsLTEvMCwtMS8wXSx0aGlzLnBpY2tPZmZzZXQ9MH12YXIgdSxoPWMucHJvdG90eXBlLGY9WzAsMCwxLDAsMCwxLDEsMCwxLDEsMCwxXTtoLmRyYXc9KHU9WzEsMCwwLDAsMSwwLDAsMCwxXSxmdW5jdGlvbigpe3ZhciB0PXRoaXMucGxvdCxlPXRoaXMuc2hhZGVyLHI9dGhpcy5ib3VuZHMsbj10aGlzLm51bVZlcnRpY2VzO2lmKCEobjw9MCkpe3ZhciBpPXQuZ2wsYT10LmRhdGFCb3gsbz1yWzJdLXJbMF0scz1yWzNdLXJbMV0sbD1hWzJdLWFbMF0sYz1hWzNdLWFbMV07dVswXT0yKm8vbCx1WzRdPTIqcy9jLHVbNl09MiooclswXS1hWzBdKS9sLTEsdVs3XT0yKihyWzFdLWFbMV0pL2MtMSxlLmJpbmQoKTt2YXIgaD1lLnVuaWZvcm1zO2gudmlld1RyYW5zZm9ybT11LGguc2hhcGU9dGhpcy5zaGFwZTt2YXIgZj1lLmF0dHJpYnV0ZXM7dGhpcy5wb3NpdGlvbkJ1ZmZlci5iaW5kKCksZi5wb3NpdGlvbi5wb2ludGVyKCksdGhpcy53ZWlnaHRCdWZmZXIuYmluZCgpLGYud2VpZ2h0LnBvaW50ZXIoaS5VTlNJR05FRF9CWVRFLCExKSx0aGlzLmNvbG9yQnVmZmVyLmJpbmQoKSxmLmNvbG9yLnBvaW50ZXIoaS5VTlNJR05FRF9CWVRFLCEwKSxpLmRyYXdBcnJheXMoaS5UUklBTkdMRVMsMCxuKX19KSxoLmRyYXdQaWNrPWZ1bmN0aW9uKCl7dmFyIHQ9WzEsMCwwLDAsMSwwLDAsMCwxXSxlPVswLDAsMCwwXTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49dGhpcy5wbG90LGk9dGhpcy5waWNrU2hhZGVyLGE9dGhpcy5ib3VuZHMsbz10aGlzLm51bVZlcnRpY2VzO2lmKCEobzw9MCkpe3ZhciBzPW4uZ2wsbD1uLmRhdGFCb3gsYz1hWzJdLWFbMF0sdT1hWzNdLWFbMV0saD1sWzJdLWxbMF0sZj1sWzNdLWxbMV07dFswXT0yKmMvaCx0WzRdPTIqdS9mLHRbNl09MiooYVswXS1sWzBdKS9oLTEsdFs3XT0yKihhWzFdLWxbMV0pL2YtMTtmb3IodmFyIHA9MDtwPDQ7KytwKWVbcF09cj4+OCpwJjI1NTt0aGlzLnBpY2tPZmZzZXQ9cixpLmJpbmQoKTt2YXIgZD1pLnVuaWZvcm1zO2Qudmlld1RyYW5zZm9ybT10LGQucGlja09mZnNldD1lLGQuc2hhcGU9dGhpcy5zaGFwZTt2YXIgZz1pLmF0dHJpYnV0ZXM7cmV0dXJuIHRoaXMucG9zaXRpb25CdWZmZXIuYmluZCgpLGcucG9zaXRpb24ucG9pbnRlcigpLHRoaXMud2VpZ2h0QnVmZmVyLmJpbmQoKSxnLndlaWdodC5wb2ludGVyKHMuVU5TSUdORURfQllURSwhMSksdGhpcy5pZEJ1ZmZlci5iaW5kKCksZy5waWNrSWQucG9pbnRlcihzLlVOU0lHTkVEX0JZVEUsITEpLHMuZHJhd0FycmF5cyhzLlRSSUFOR0xFUywwLG8pLHIrdGhpcy5zaGFwZVswXSp0aGlzLnNoYXBlWzFdfX19KCksaC5waWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnBpY2tPZmZzZXQsaT10aGlzLnNoYXBlWzBdKnRoaXMuc2hhcGVbMV07aWYocjxufHxyPj1uK2kpcmV0dXJuIG51bGw7dmFyIGE9ci1uLG89dGhpcy54RGF0YSxzPXRoaXMueURhdGE7cmV0dXJue29iamVjdDp0aGlzLHBvaW50SWQ6YSxkYXRhQ29vcmQ6W29bYSV0aGlzLnNoYXBlWzBdXSxzW2EvdGhpcy5zaGFwZVswXXwwXV19fSxoLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuc2hhcGV8fFswLDBdLHI9dC54fHxpKGVbMF0pLG89dC55fHxpKGVbMV0pLHM9dC56fHxuZXcgRmxvYXQzMkFycmF5KGVbMF0qZVsxXSk7dGhpcy54RGF0YT1yLHRoaXMueURhdGE9bzt2YXIgbD10LmNvbG9yTGV2ZWxzfHxbMF0sYz10LmNvbG9yVmFsdWVzfHxbMCwwLDAsMV0sdT1sLmxlbmd0aCxoPXRoaXMuYm91bmRzLHA9aFswXT1yWzBdLGQ9aFsxXT1vWzBdLGc9MS8oKGhbMl09cltyLmxlbmd0aC0xXSktcCksdj0xLygoaFszXT1vW28ubGVuZ3RoLTFdKS1kKSxtPWVbMF0seT1lWzFdO3RoaXMuc2hhcGU9W20seV07dmFyIHg9KG0tMSkqKHktMSkqKGYubGVuZ3RoPj4+MSk7dGhpcy5udW1WZXJ0aWNlcz14O2Zvcih2YXIgYj1hLm1hbGxvY1VpbnQ4KDQqeCksXz1hLm1hbGxvY0Zsb2F0MzIoMip4KSx3PWEubWFsbG9jVWludDgoMip4KSxrPWEubWFsbG9jVWludDMyKHgpLEE9MCxUPTA7VDx5LTE7KytUKWZvcih2YXIgTT12KihvW1RdLWQpLFM9dioob1tUKzFdLWQpLEU9MDtFPG0tMTsrK0UpZm9yKHZhciBDPWcqKHJbRV0tcCksTD1nKihyW0UrMV0tcCksej0wO3o8Zi5sZW5ndGg7eis9Mil7dmFyIE8sSSxELFAsUj1mW3pdLEY9Zlt6KzFdLEI9c1soVCtGKSptKyhFK1IpXSxOPW4ubGUobCxCKTtpZihOPDApTz1jWzBdLEk9Y1sxXSxEPWNbMl0sUD1jWzNdO2Vsc2UgaWYoTj09PXUtMSlPPWNbNCp1LTRdLEk9Y1s0KnUtM10sRD1jWzQqdS0yXSxQPWNbNCp1LTFdO2Vsc2V7dmFyIGo9KEItbFtOXSkvKGxbTisxXS1sW05dKSxWPTEtaixVPTQqTixxPTQqKE4rMSk7Tz1WKmNbVV0raipjW3FdLEk9VipjW1UrMV0raipjW3ErMV0sRD1WKmNbVSsyXStqKmNbcSsyXSxQPVYqY1tVKzNdK2oqY1txKzNdfWJbNCpBXT0yNTUqTyxiWzQqQSsxXT0yNTUqSSxiWzQqQSsyXT0yNTUqRCxiWzQqQSszXT0yNTUqUCxfWzIqQV09LjUqQysuNSpMLF9bMipBKzFdPS41Kk0rLjUqUyx3WzIqQV09Uix3WzIqQSsxXT1GLGtbQV09VCptK0UsQSs9MX10aGlzLnBvc2l0aW9uQnVmZmVyLnVwZGF0ZShfKSx0aGlzLndlaWdodEJ1ZmZlci51cGRhdGUodyksdGhpcy5jb2xvckJ1ZmZlci51cGRhdGUoYiksdGhpcy5pZEJ1ZmZlci51cGRhdGUoayksYS5mcmVlKF8pLGEuZnJlZShiKSxhLmZyZWUodyksYS5mcmVlKGspfSxoLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBvc2l0aW9uQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLndlaWdodEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5jb2xvckJ1ZmZlci5kaXNwb3NlKCksdGhpcy5pZEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5wbG90LnJlbW92ZU9iamVjdCh0aGlzKX19LHtcIi4vbGliL3NoYWRlcnNcIjoyNDksXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiOjI1MCxcImdsLWJ1ZmZlclwiOjIzOCxcImdsLXNoYWRlclwiOjI5OCxcImlvdGEtYXJyYXlcIjo0MDksXCJ0eXBlZGFycmF5LXBvb2xcIjo1MzB9XSwyNDk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2xzbGlmeVwiKTtlLmV4cG9ydHM9e2ZyYWdtZW50Om4oW1wicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xcbnZvaWQgbWFpbigpIHtcXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoZnJhZ0NvbG9yLnJnYiAqIGZyYWdDb2xvci5hLCBmcmFnQ29sb3IuYSk7XFxufVxcblwiXSksdmVydGV4Om4oW1wicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcXG5hdHRyaWJ1dGUgdmVjMiB3ZWlnaHQ7XFxuXFxudW5pZm9ybSB2ZWMyIHNoYXBlO1xcbnVuaWZvcm0gbWF0MyB2aWV3VHJhbnNmb3JtO1xcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgdmVjMyB2UG9zaXRpb24gPSB2aWV3VHJhbnNmb3JtICogdmVjMyggcG9zaXRpb24gKyAod2VpZ2h0LS41KS8oc2hhcGUtMS4pICwgMS4wKTtcXG4gIGZyYWdDb2xvciA9IGNvbG9yO1xcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHZQb3NpdGlvbi54eSwgMCwgdlBvc2l0aW9uLnopO1xcbn1cXG5cIl0pLHBpY2tGcmFnbWVudDpuKFtcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxudmFyeWluZyB2ZWM0IGZyYWdJZDtcXG52YXJ5aW5nIHZlYzIgdldlaWdodDtcXG5cXG51bmlmb3JtIHZlYzIgc2hhcGU7XFxudW5pZm9ybSB2ZWM0IHBpY2tPZmZzZXQ7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgdmVjMiBkID0gc3RlcCguNSwgdldlaWdodCk7XFxuICB2ZWM0IGlkID0gZnJhZ0lkICsgcGlja09mZnNldDtcXG4gIGlkLnggKz0gZC54ICsgZC55KnNoYXBlLng7XFxuXFxuICBpZC55ICs9IGZsb29yKGlkLnggLyAyNTYuMCk7XFxuICBpZC54IC09IGZsb29yKGlkLnggLyAyNTYuMCkgKiAyNTYuMDtcXG5cXG4gIGlkLnogKz0gZmxvb3IoaWQueSAvIDI1Ni4wKTtcXG4gIGlkLnkgLT0gZmxvb3IoaWQueSAvIDI1Ni4wKSAqIDI1Ni4wO1xcblxcbiAgaWQudyArPSBmbG9vcihpZC56IC8gMjU2LjApO1xcbiAgaWQueiAtPSBmbG9vcihpZC56IC8gMjU2LjApICogMjU2LjA7XFxuXFxuICBnbF9GcmFnQ29sb3IgPSBpZC8yNTUuO1xcbn1cXG5cIl0pLHBpY2tWZXJ0ZXg6bihbXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWM0IHBpY2tJZDtcXG5hdHRyaWJ1dGUgdmVjMiB3ZWlnaHQ7XFxuXFxudW5pZm9ybSB2ZWMyIHNoYXBlO1xcbnVuaWZvcm0gbWF0MyB2aWV3VHJhbnNmb3JtO1xcblxcbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XFxudmFyeWluZyB2ZWMyIHZXZWlnaHQ7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgdldlaWdodCA9IHdlaWdodDtcXG5cXG4gIGZyYWdJZCA9IHBpY2tJZDtcXG5cXG4gIHZlYzMgdlBvc2l0aW9uID0gdmlld1RyYW5zZm9ybSAqIHZlYzMoIHBvc2l0aW9uICsgKHdlaWdodC0uNSkvKHNoYXBlLTEuKSAsIDEuMCk7XFxuICBnbF9Qb3NpdGlvbiA9IHZlYzQodlBvc2l0aW9uLnh5LCAwLCB2UG9zaXRpb24ueik7XFxufVxcblwiXSl9fSx7Z2xzbGlmeTo0MDJ9XSwyNTA6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMTAyXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MTAyfV0sMjUxOltmdW5jdGlvbih0LGUscil7dmFyIG49dChcImdsc2xpZnlcIiksaT10KFwiZ2wtc2hhZGVyXCIpLGE9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiwgbmV4dFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSBmbG9hdCBhcmNMZW5ndGgsIGxpbmVXaWR0aDtcXG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcXG5cXG51bmlmb3JtIHZlYzIgc2NyZWVuU2hhcGU7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFJhdGlvO1xcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xcbnZhcnlpbmcgdmVjMyB3b3JsZFBvc2l0aW9uO1xcbnZhcnlpbmcgZmxvYXQgcGl4ZWxBcmNMZW5ndGg7XFxuXFxudmVjNCBwcm9qZWN0KHZlYzMgcCkge1xcbiAgcmV0dXJuIHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHAsIDEuMCk7XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzQgc3RhcnRQb2ludCA9IHByb2plY3QocG9zaXRpb24pO1xcbiAgdmVjNCBlbmRQb2ludCAgID0gcHJvamVjdChuZXh0UG9zaXRpb24pO1xcblxcbiAgdmVjMiBBID0gc3RhcnRQb2ludC54eSAvIHN0YXJ0UG9pbnQudztcXG4gIHZlYzIgQiA9ICAgZW5kUG9pbnQueHkgLyAgIGVuZFBvaW50Lnc7XFxuXFxuICBmbG9hdCBjbGlwQW5nbGUgPSBhdGFuKFxcbiAgICAoQi55IC0gQS55KSAqIHNjcmVlblNoYXBlLnksXFxuICAgIChCLnggLSBBLngpICogc2NyZWVuU2hhcGUueFxcbiAgKTtcXG5cXG4gIHZlYzIgb2Zmc2V0ID0gMC41ICogcGl4ZWxSYXRpbyAqIGxpbmVXaWR0aCAqIHZlYzIoXFxuICAgIHNpbihjbGlwQW5nbGUpLFxcbiAgICAtY29zKGNsaXBBbmdsZSlcXG4gICkgLyBzY3JlZW5TaGFwZTtcXG5cXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChzdGFydFBvaW50Lnh5ICsgc3RhcnRQb2ludC53ICogb2Zmc2V0LCBzdGFydFBvaW50Lnp3KTtcXG5cXG4gIHdvcmxkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4gIHBpeGVsQXJjTGVuZ3RoID0gYXJjTGVuZ3RoO1xcbiAgZnJhZ0NvbG9yID0gY29sb3I7XFxufVxcblwiXSksbz1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XFxuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XFxufVxcblxcbnVuaWZvcm0gdmVjMyAgICAgIGNsaXBCb3VuZHNbMl07XFxudW5pZm9ybSBzYW1wbGVyMkQgZGFzaFRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCAgICAgZGFzaFNjYWxlO1xcbnVuaWZvcm0gZmxvYXQgICAgIG9wYWNpdHk7XFxuXFxudmFyeWluZyB2ZWMzICAgIHdvcmxkUG9zaXRpb247XFxudmFyeWluZyBmbG9hdCAgIHBpeGVsQXJjTGVuZ3RoO1xcbnZhcnlpbmcgdmVjNCAgICBmcmFnQ29sb3I7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgaWYgKFxcbiAgICBvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHdvcmxkUG9zaXRpb24pIHx8XFxuICAgIGZyYWdDb2xvci5hICogb3BhY2l0eSA9PSAwLlxcbiAgKSBkaXNjYXJkO1xcblxcbiAgZmxvYXQgZGFzaFdlaWdodCA9IHRleHR1cmUyRChkYXNoVGV4dHVyZSwgdmVjMihkYXNoU2NhbGUgKiBwaXhlbEFyY0xlbmd0aCwgMCkpLnI7XFxuICBpZihkYXNoV2VpZ2h0IDwgMC41KSB7XFxuICAgIGRpc2NhcmQ7XFxuICB9XFxuICBnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3IgKiBvcGFjaXR5O1xcbn1cXG5cIl0pLHM9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG4jZGVmaW5lIEZMT0FUX01BWCAgMS43MDE0MTE4NGUzOFxcbiNkZWZpbmUgRkxPQVRfTUlOICAxLjE3NTQ5NDM1ZS0zOFxcblxcbmxvd3AgdmVjNCBlbmNvZGVfZmxvYXRfMTYwNDE1MDU1OShoaWdocCBmbG9hdCB2KSB7XFxuICBoaWdocCBmbG9hdCBhdiA9IGFicyh2KTtcXG5cXG4gIC8vSGFuZGxlIHNwZWNpYWwgY2FzZXNcXG4gIGlmKGF2IDwgRkxPQVRfTUlOKSB7XFxuICAgIHJldHVybiB2ZWM0KDAuMCwgMC4wLCAwLjAsIDAuMCk7XFxuICB9IGVsc2UgaWYodiA+IEZMT0FUX01BWCkge1xcbiAgICByZXR1cm4gdmVjNCgxMjcuMCwgMTI4LjAsIDAuMCwgMC4wKSAvIDI1NS4wO1xcbiAgfSBlbHNlIGlmKHYgPCAtRkxPQVRfTUFYKSB7XFxuICAgIHJldHVybiB2ZWM0KDI1NS4wLCAxMjguMCwgMC4wLCAwLjApIC8gMjU1LjA7XFxuICB9XFxuXFxuICBoaWdocCB2ZWM0IGMgPSB2ZWM0KDAsMCwwLDApO1xcblxcbiAgLy9Db21wdXRlIGV4cG9uZW50IGFuZCBtYW50aXNzYVxcbiAgaGlnaHAgZmxvYXQgZSA9IGZsb29yKGxvZzIoYXYpKTtcXG4gIGhpZ2hwIGZsb2F0IG0gPSBhdiAqIHBvdygyLjAsIC1lKSAtIDEuMDtcXG4gIFxcbiAgLy9VbnBhY2sgbWFudGlzc2FcXG4gIGNbMV0gPSBmbG9vcigxMjguMCAqIG0pO1xcbiAgbSAtPSBjWzFdIC8gMTI4LjA7XFxuICBjWzJdID0gZmxvb3IoMzI3NjguMCAqIG0pO1xcbiAgbSAtPSBjWzJdIC8gMzI3NjguMDtcXG4gIGNbM10gPSBmbG9vcig4Mzg4NjA4LjAgKiBtKTtcXG4gIFxcbiAgLy9VbnBhY2sgZXhwb25lbnRcXG4gIGhpZ2hwIGZsb2F0IGViaWFzID0gZSArIDEyNy4wO1xcbiAgY1swXSA9IGZsb29yKGViaWFzIC8gMi4wKTtcXG4gIGViaWFzIC09IGNbMF0gKiAyLjA7XFxuICBjWzFdICs9IGZsb29yKGViaWFzKSAqIDEyOC4wOyBcXG5cXG4gIC8vVW5wYWNrIHNpZ24gYml0XFxuICBjWzBdICs9IDEyOC4wICogc3RlcCgwLjAsIC12KTtcXG5cXG4gIC8vU2NhbGUgYmFjayB0byByYW5nZVxcbiAgcmV0dXJuIGMgLyAyNTUuMDtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcXG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XFxuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcXG59XFxuXFxudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XFxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XFxuXFxudmFyeWluZyB2ZWMzIHdvcmxkUG9zaXRpb247XFxudmFyeWluZyBmbG9hdCBwaXhlbEFyY0xlbmd0aDtcXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHdvcmxkUG9zaXRpb24pKSBkaXNjYXJkO1xcblxcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwaWNrSWQvMjU1LjAsIGVuY29kZV9mbG9hdF8xNjA0MTUwNTU5KHBpeGVsQXJjTGVuZ3RoKS54eXopO1xcbn1cIl0pLGw9W3tuYW1lOlwicG9zaXRpb25cIix0eXBlOlwidmVjM1wifSx7bmFtZTpcIm5leHRQb3NpdGlvblwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwiYXJjTGVuZ3RoXCIsdHlwZTpcImZsb2F0XCJ9LHtuYW1lOlwibGluZVdpZHRoXCIsdHlwZTpcImZsb2F0XCJ9LHtuYW1lOlwiY29sb3JcIix0eXBlOlwidmVjNFwifV07ci5jcmVhdGVTaGFkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxhLG8sbnVsbCxsKX0sci5jcmVhdGVQaWNrU2hhZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQsYSxzLG51bGwsbCl9fSx7XCJnbC1zaGFkZXJcIjoyOTgsZ2xzbGlmeTo0MDJ9XSwyNTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbHx8dC5zY2VuZSYmdC5zY2VuZS5nbCxyPXUoZSk7ci5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsci5hdHRyaWJ1dGVzLm5leHRQb3NpdGlvbi5sb2NhdGlvbj0xLHIuYXR0cmlidXRlcy5hcmNMZW5ndGgubG9jYXRpb249MixyLmF0dHJpYnV0ZXMubGluZVdpZHRoLmxvY2F0aW9uPTMsci5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTQ7dmFyIG89aChlKTtvLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxvLmF0dHJpYnV0ZXMubmV4dFBvc2l0aW9uLmxvY2F0aW9uPTEsby5hdHRyaWJ1dGVzLmFyY0xlbmd0aC5sb2NhdGlvbj0yLG8uYXR0cmlidXRlcy5saW5lV2lkdGgubG9jYXRpb249MyxvLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249NDtmb3IodmFyIHM9bihlKSxjPWkoZSxbe2J1ZmZlcjpzLHNpemU6MyxvZmZzZXQ6MCxzdHJpZGU6NDh9LHtidWZmZXI6cyxzaXplOjMsb2Zmc2V0OjEyLHN0cmlkZTo0OH0se2J1ZmZlcjpzLHNpemU6MSxvZmZzZXQ6MjQsc3RyaWRlOjQ4fSx7YnVmZmVyOnMsc2l6ZToxLG9mZnNldDoyOCxzdHJpZGU6NDh9LHtidWZmZXI6cyxzaXplOjQsb2Zmc2V0OjMyLHN0cmlkZTo0OH1dKSxmPWwobmV3IEFycmF5KDEwMjQpLFsyNTYsMSw0XSkscD0wO3A8MTAyNDsrK3ApZi5kYXRhW3BdPTI1NTt2YXIgZD1hKGUsZik7ZC53cmFwPWUuUkVQRUFUO3ZhciBnPW5ldyB2KGUscixvLHMsYyxkKTtyZXR1cm4gZy51cGRhdGUodCksZ307dmFyIG49dChcImdsLWJ1ZmZlclwiKSxpPXQoXCJnbC12YW9cIiksYT10KFwiZ2wtdGV4dHVyZTJkXCIpLG89dChcImdsc2wtcmVhZC1mbG9hdFwiKSxzPXQoXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiKSxsPXQoXCJuZGFycmF5XCIpLGM9dChcIi4vbGliL3NoYWRlcnNcIiksdT1jLmNyZWF0ZVNoYWRlcixoPWMuY3JlYXRlUGlja1NoYWRlcixmPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByPTAsbj0wO248MzsrK24pe3ZhciBpPXRbbl0tZVtuXTtyKz1pKml9cmV0dXJuIE1hdGguc3FydChyKX1mdW5jdGlvbiBkKHQpe2Zvcih2YXIgZT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxyPTA7cjwzOysrcillWzBdW3JdPU1hdGgubWF4KHRbMF1bcl0sZVswXVtyXSksZVsxXVtyXT1NYXRoLm1pbih0WzFdW3JdLGVbMV1bcl0pO3JldHVybiBlfWZ1bmN0aW9uIGcodCxlLHIsbil7dGhpcy5hcmNMZW5ndGg9dCx0aGlzLnBvc2l0aW9uPWUsdGhpcy5pbmRleD1yLHRoaXMuZGF0YUNvb3JkaW5hdGU9bn1mdW5jdGlvbiB2KHQsZSxyLG4saSxhKXt0aGlzLmdsPXQsdGhpcy5zaGFkZXI9ZSx0aGlzLnBpY2tTaGFkZXI9cix0aGlzLmJ1ZmZlcj1uLHRoaXMudmFvPWksdGhpcy5jbGlwQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMucG9pbnRzPVtdLHRoaXMuYXJjTGVuZ3RoPVtdLHRoaXMudmVydGV4Q291bnQ9MCx0aGlzLmJvdW5kcz1bWzAsMCwwXSxbMCwwLDBdXSx0aGlzLnBpY2tJZD0wLHRoaXMubGluZVdpZHRoPTEsdGhpcy50ZXh0dXJlPWEsdGhpcy5kYXNoU2NhbGU9MSx0aGlzLm9wYWNpdHk9MSx0aGlzLmhhc0FscGhhPSExLHRoaXMuZGlydHk9ITAsdGhpcy5waXhlbFJhdGlvPTF9dmFyIG09di5wcm90b3R5cGU7bS5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzQWxwaGF9LG0uaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5oYXNBbHBoYX0sbS5waWNrU2xvdHM9MSxtLnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LG0uZHJhd1RyYW5zcGFyZW50PW0uZHJhdz1mdW5jdGlvbih0KXtpZih0aGlzLnZlcnRleENvdW50KXt2YXIgZT10aGlzLmdsLHI9dGhpcy5zaGFkZXIsbj10aGlzLnZhbztyLmJpbmQoKSxyLnVuaWZvcm1zPXttb2RlbDp0Lm1vZGVsfHxmLHZpZXc6dC52aWV3fHxmLHByb2plY3Rpb246dC5wcm9qZWN0aW9ufHxmLGNsaXBCb3VuZHM6ZCh0aGlzLmNsaXBCb3VuZHMpLGRhc2hUZXh0dXJlOnRoaXMudGV4dHVyZS5iaW5kKCksZGFzaFNjYWxlOnRoaXMuZGFzaFNjYWxlL3RoaXMuYXJjTGVuZ3RoW3RoaXMuYXJjTGVuZ3RoLmxlbmd0aC0xXSxvcGFjaXR5OnRoaXMub3BhY2l0eSxzY3JlZW5TaGFwZTpbZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XSxwaXhlbFJhdGlvOnRoaXMucGl4ZWxSYXRpb30sbi5iaW5kKCksbi5kcmF3KGUuVFJJQU5HTEVfU1RSSVAsdGhpcy52ZXJ0ZXhDb3VudCksbi51bmJpbmQoKX19LG0uZHJhd1BpY2s9ZnVuY3Rpb24odCl7aWYodGhpcy52ZXJ0ZXhDb3VudCl7dmFyIGU9dGhpcy5nbCxyPXRoaXMucGlja1NoYWRlcixuPXRoaXMudmFvO3IuYmluZCgpLHIudW5pZm9ybXM9e21vZGVsOnQubW9kZWx8fGYsdmlldzp0LnZpZXd8fGYscHJvamVjdGlvbjp0LnByb2plY3Rpb258fGYscGlja0lkOnRoaXMucGlja0lkLGNsaXBCb3VuZHM6ZCh0aGlzLmNsaXBCb3VuZHMpLHNjcmVlblNoYXBlOltlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdLHBpeGVsUmF0aW86dGhpcy5waXhlbFJhdGlvfSxuLmJpbmQoKSxuLmRyYXcoZS5UUklBTkdMRV9TVFJJUCx0aGlzLnZlcnRleENvdW50KSxuLnVuYmluZCgpfX0sbS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGUscjt0aGlzLmRpcnR5PSEwO3ZhciBuPSEhdC5jb25uZWN0R2FwcztcImRhc2hTY2FsZVwiaW4gdCYmKHRoaXMuZGFzaFNjYWxlPXQuZGFzaFNjYWxlKSx0aGlzLmhhc0FscGhhPSExLFwib3BhY2l0eVwiaW4gdCYmKHRoaXMub3BhY2l0eT0rdC5vcGFjaXR5LHRoaXMub3BhY2l0eTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpO3ZhciBpPVtdLGE9W10sbz1bXSxjPTAsdT0wLGg9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sZj10LnBvc2l0aW9ufHx0LnBvc2l0aW9ucztpZihmKXt2YXIgZD10LmNvbG9yfHx0LmNvbG9yc3x8WzAsMCwwLDFdLGc9dC5saW5lV2lkdGh8fDEsdj0hMTt0OmZvcihlPTE7ZTxmLmxlbmd0aDsrK2Upe3ZhciBtLHkseCxiPWZbZS0xXSxfPWZbZV07Zm9yKGEucHVzaChjKSxvLnB1c2goYi5zbGljZSgpKSxyPTA7cjwzOysrcil7aWYoaXNOYU4oYltyXSl8fGlzTmFOKF9bcl0pfHwhaXNGaW5pdGUoYltyXSl8fCFpc0Zpbml0ZShfW3JdKSl7aWYoIW4mJmkubGVuZ3RoPjApe2Zvcih2YXIgdz0wO3c8MjQ7Kyt3KWkucHVzaChpW2kubGVuZ3RoLTEyXSk7dSs9Mix2PSEwfWNvbnRpbnVlIHR9aFswXVtyXT1NYXRoLm1pbihoWzBdW3JdLGJbcl0sX1tyXSksaFsxXVtyXT1NYXRoLm1heChoWzFdW3JdLGJbcl0sX1tyXSl9QXJyYXkuaXNBcnJheShkWzBdKT8obT1kLmxlbmd0aD5lLTE/ZFtlLTFdOmQubGVuZ3RoPjA/ZFtkLmxlbmd0aC0xXTpbMCwwLDAsMV0seT1kLmxlbmd0aD5lP2RbZV06ZC5sZW5ndGg+MD9kW2QubGVuZ3RoLTFdOlswLDAsMCwxXSk6bT15PWQsMz09PW0ubGVuZ3RoJiYobT1bbVswXSxtWzFdLG1bMl0sMV0pLDM9PT15Lmxlbmd0aCYmKHk9W3lbMF0seVsxXSx5WzJdLDFdKSwhdGhpcy5oYXNBbHBoYSYmbVszXTwxJiYodGhpcy5oYXNBbHBoYT0hMCkseD1BcnJheS5pc0FycmF5KGcpP2cubGVuZ3RoPmUtMT9nW2UtMV06Zy5sZW5ndGg+MD9nW2cubGVuZ3RoLTFdOlswLDAsMCwxXTpnO3ZhciBrPWM7aWYoYys9cChiLF8pLHYpe2ZvcihyPTA7cjwyOysrcilpLnB1c2goYlswXSxiWzFdLGJbMl0sX1swXSxfWzFdLF9bMl0sayx4LG1bMF0sbVsxXSxtWzJdLG1bM10pO3UrPTIsdj0hMX1pLnB1c2goYlswXSxiWzFdLGJbMl0sX1swXSxfWzFdLF9bMl0sayx4LG1bMF0sbVsxXSxtWzJdLG1bM10sYlswXSxiWzFdLGJbMl0sX1swXSxfWzFdLF9bMl0saywteCxtWzBdLG1bMV0sbVsyXSxtWzNdLF9bMF0sX1sxXSxfWzJdLGJbMF0sYlsxXSxiWzJdLGMsLXgseVswXSx5WzFdLHlbMl0seVszXSxfWzBdLF9bMV0sX1syXSxiWzBdLGJbMV0sYlsyXSxjLHgseVswXSx5WzFdLHlbMl0seVszXSksdSs9NH19aWYodGhpcy5idWZmZXIudXBkYXRlKGkpLGEucHVzaChjKSxvLnB1c2goZltmLmxlbmd0aC0xXS5zbGljZSgpKSx0aGlzLmJvdW5kcz1oLHRoaXMudmVydGV4Q291bnQ9dSx0aGlzLnBvaW50cz1vLHRoaXMuYXJjTGVuZ3RoPWEsXCJkYXNoZXNcImluIHQpe3ZhciBBPXQuZGFzaGVzLnNsaWNlKCk7Zm9yKEEudW5zaGlmdCgwKSxlPTE7ZTxBLmxlbmd0aDsrK2UpQVtlXT1BW2UtMV0rQVtlXTt2YXIgVD1sKG5ldyBBcnJheSgxMDI0KSxbMjU2LDEsNF0pO2ZvcihlPTA7ZTwyNTY7KytlKXtmb3Iocj0wO3I8NDsrK3IpVC5zZXQoZSwwLHIsMCk7MSZzLmxlKEEsQVtBLmxlbmd0aC0xXSplLzI1NSk/VC5zZXQoZSwwLDAsMCk6VC5zZXQoZSwwLDAsMjU1KX10aGlzLnRleHR1cmUuc2V0UGl4ZWxzKFQpfX0sbS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlci5kaXNwb3NlKCl9LG0ucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7dmFyIGU9byh0LnZhbHVlWzBdLHQudmFsdWVbMV0sdC52YWx1ZVsyXSwwKSxyPXMubGUodGhpcy5hcmNMZW5ndGgsZSk7aWYocjwwKXJldHVybiBudWxsO2lmKHI9PT10aGlzLmFyY0xlbmd0aC5sZW5ndGgtMSlyZXR1cm4gbmV3IGcodGhpcy5hcmNMZW5ndGhbdGhpcy5hcmNMZW5ndGgubGVuZ3RoLTFdLHRoaXMucG9pbnRzW3RoaXMucG9pbnRzLmxlbmd0aC0xXS5zbGljZSgpLHIpO2Zvcih2YXIgbj10aGlzLnBvaW50c1tyXSxpPXRoaXMucG9pbnRzW01hdGgubWluKHIrMSx0aGlzLnBvaW50cy5sZW5ndGgtMSldLGE9KGUtdGhpcy5hcmNMZW5ndGhbcl0pLyh0aGlzLmFyY0xlbmd0aFtyKzFdLXRoaXMuYXJjTGVuZ3RoW3JdKSxsPTEtYSxjPVswLDAsMF0sdT0wO3U8MzsrK3UpY1t1XT1sKm5bdV0rYSppW3VdO3ZhciBoPU1hdGgubWluKGE8LjU/cjpyKzEsdGhpcy5wb2ludHMubGVuZ3RoLTEpO3JldHVybiBuZXcgZyhlLGMsaCx0aGlzLnBvaW50c1toXSl9fSx7XCIuL2xpYi9zaGFkZXJzXCI6MjUxLFwiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIjoyNTMsXCJnbC1idWZmZXJcIjoyMzgsXCJnbC10ZXh0dXJlMmRcIjozMTUsXCJnbC12YW9cIjozMjAsXCJnbHNsLXJlYWQtZmxvYXRcIjozOTMsbmRhcnJheTo0NDN9XSwyNTM6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMTAyXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MTAyfV0sMjU0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPXIqYS1pKm47cmV0dXJuIG8/KG89MS9vLHRbMF09YSpvLHRbMV09LW4qbyx0WzJdPS1pKm8sdFszXT1yKm8sdCk6bnVsbH19LHt9XSwyNTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89ZVs0XSxzPWVbNV0sbD1lWzZdLGM9ZVs3XSx1PWVbOF0saD11Km8tcypjLGY9LXUqYStzKmwscD1jKmEtbypsLGQ9cipoK24qZitpKnA7cmV0dXJuIGQ/KGQ9MS9kLHRbMF09aCpkLHRbMV09KC11Km4raSpjKSpkLHRbMl09KHMqbi1pKm8pKmQsdFszXT1mKmQsdFs0XT0odSpyLWkqbCkqZCx0WzVdPSgtcypyK2kqYSkqZCx0WzZdPXAqZCx0WzddPSgtYypyK24qbCkqZCx0WzhdPShvKnItbiphKSpkLHQpOm51bGx9fSx7fV0sMjU2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBGbG9hdDMyQXJyYXkoMTYpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZVs0XT10WzRdLGVbNV09dFs1XSxlWzZdPXRbNl0sZVs3XT10WzddLGVbOF09dFs4XSxlWzldPXRbOV0sZVsxMF09dFsxMF0sZVsxMV09dFsxMV0sZVsxMl09dFsxMl0sZVsxM109dFsxM10sZVsxNF09dFsxNF0sZVsxNV09dFsxNV0sZX19LHt9XSwyNTc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgRmxvYXQzMkFycmF5KDE2KTtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9fSx7fV0sMjU4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXSxpPXRbM10sYT10WzRdLG89dFs1XSxzPXRbNl0sbD10WzddLGM9dFs4XSx1PXRbOV0saD10WzEwXSxmPXRbMTFdLHA9dFsxMl0sZD10WzEzXSxnPXRbMTRdLHY9dFsxNV07cmV0dXJuKGUqby1yKmEpKihoKnYtZipnKS0oZSpzLW4qYSkqKHUqdi1mKmQpKyhlKmwtaSphKSoodSpnLWgqZCkrKHIqcy1uKm8pKihjKnYtZipwKS0ocipsLWkqbykqKGMqZy1oKnApKyhuKmwtaSpzKSooYypkLXUqcCl9fSx7fV0sMjU5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPXIrcixzPW4rbixsPWkraSxjPXIqbyx1PW4qbyxoPW4qcyxmPWkqbyxwPWkqcyxkPWkqbCxnPWEqbyx2PWEqcyxtPWEqbDtyZXR1cm4gdFswXT0xLWgtZCx0WzFdPXUrbSx0WzJdPWYtdix0WzNdPTAsdFs0XT11LW0sdFs1XT0xLWMtZCx0WzZdPXArZyx0WzddPTAsdFs4XT1mK3YsdFs5XT1wLWcsdFsxMF09MS1jLWgsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9fSx7fV0sMjYwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9bituLGw9aStpLGM9YSthLHU9bipzLGg9bipsLGY9bipjLHA9aSpsLGQ9aSpjLGc9YSpjLHY9bypzLG09bypsLHk9bypjO3JldHVybiB0WzBdPTEtKHArZyksdFsxXT1oK3ksdFsyXT1mLW0sdFszXT0wLHRbNF09aC15LHRbNV09MS0odStnKSx0WzZdPWQrdix0WzddPTAsdFs4XT1mK20sdFs5XT1kLXYsdFsxMF09MS0odStwKSx0WzExXT0wLHRbMTJdPXJbMF0sdFsxM109clsxXSx0WzE0XT1yWzJdLHRbMTVdPTEsdH19LHt9XSwyNjE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0xLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0xLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fX0se31dLDI2MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1lWzRdLHM9ZVs1XSxsPWVbNl0sYz1lWzddLHU9ZVs4XSxoPWVbOV0sZj1lWzEwXSxwPWVbMTFdLGQ9ZVsxMl0sZz1lWzEzXSx2PWVbMTRdLG09ZVsxNV0seT1yKnMtbipvLHg9cipsLWkqbyxiPXIqYy1hKm8sXz1uKmwtaSpzLHc9bipjLWEqcyxrPWkqYy1hKmwsQT11KmctaCpkLFQ9dSp2LWYqZCxNPXUqbS1wKmQsUz1oKnYtZipnLEU9aCptLXAqZyxDPWYqbS1wKnYsTD15KkMteCpFK2IqUytfKk0tdypUK2sqQTtpZighTClyZXR1cm4gbnVsbDtyZXR1cm4gTD0xL0wsdFswXT0ocypDLWwqRStjKlMpKkwsdFsxXT0oaSpFLW4qQy1hKlMpKkwsdFsyXT0oZyprLXYqdyttKl8pKkwsdFszXT0oZip3LWgqay1wKl8pKkwsdFs0XT0obCpNLW8qQy1jKlQpKkwsdFs1XT0ocipDLWkqTSthKlQpKkwsdFs2XT0odipiLWQqay1tKngpKkwsdFs3XT0odSprLWYqYitwKngpKkwsdFs4XT0obypFLXMqTStjKkEpKkwsdFs5XT0obipNLXIqRS1hKkEpKkwsdFsxMF09KGQqdy1nKmIrbSp5KSpMLHRbMTFdPShoKmItdSp3LXAqeSkqTCx0WzEyXT0ocypULW8qUy1sKkEpKkwsdFsxM109KHIqUy1uKlQraSpBKSpMLHRbMTRdPShnKngtZCpfLXYqeSkqTCx0WzE1XT0odSpfLWgqeCtmKnkpKkwsdH19LHt9XSwyNjM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi9pZGVudGl0eVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbyxzLGwsYyx1LGgsZixwLGQsZz1lWzBdLHY9ZVsxXSxtPWVbMl0seT1pWzBdLHg9aVsxXSxiPWlbMl0sXz1yWzBdLHc9clsxXSxrPXJbMl07aWYoTWF0aC5hYnMoZy1fKTwxZS02JiZNYXRoLmFicyh2LXcpPDFlLTYmJk1hdGguYWJzKG0tayk8MWUtNilyZXR1cm4gbih0KTtoPWctXyxmPXYtdyxwPW0tayxkPTEvTWF0aC5zcXJ0KGgqaCtmKmYrcCpwKSxhPXgqKHAqPWQpLWIqKGYqPWQpLG89YiooaCo9ZCkteSpwLHM9eSpmLXgqaCwoZD1NYXRoLnNxcnQoYSphK28qbytzKnMpKT8oYSo9ZD0xL2Qsbyo9ZCxzKj1kKTooYT0wLG89MCxzPTApO2w9ZipzLXAqbyxjPXAqYS1oKnMsdT1oKm8tZiphLChkPU1hdGguc3FydChsKmwrYypjK3UqdSkpPyhsKj1kPTEvZCxjKj1kLHUqPWQpOihsPTAsYz0wLHU9MCk7cmV0dXJuIHRbMF09YSx0WzFdPWwsdFsyXT1oLHRbM109MCx0WzRdPW8sdFs1XT1jLHRbNl09Zix0WzddPTAsdFs4XT1zLHRbOV09dSx0WzEwXT1wLHRbMTFdPTAsdFsxMl09LShhKmcrbyp2K3MqbSksdFsxM109LShsKmcrYyp2K3UqbSksdFsxNF09LShoKmcrZip2K3AqbSksdFsxNV09MSx0fX0se1wiLi9pZGVudGl0eVwiOjI2MX1dLDI2NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLGM9ZVs2XSx1PWVbN10saD1lWzhdLGY9ZVs5XSxwPWVbMTBdLGQ9ZVsxMV0sZz1lWzEyXSx2PWVbMTNdLG09ZVsxNF0seT1lWzE1XSx4PXJbMF0sYj1yWzFdLF89clsyXSx3PXJbM107cmV0dXJuIHRbMF09eCpuK2IqcytfKmgrdypnLHRbMV09eCppK2IqbCtfKmYrdyp2LHRbMl09eCphK2IqYytfKnArdyptLHRbM109eCpvK2IqdStfKmQrdyp5LHg9cls0XSxiPXJbNV0sXz1yWzZdLHc9cls3XSx0WzRdPXgqbitiKnMrXypoK3cqZyx0WzVdPXgqaStiKmwrXypmK3cqdix0WzZdPXgqYStiKmMrXypwK3cqbSx0WzddPXgqbytiKnUrXypkK3cqeSx4PXJbOF0sYj1yWzldLF89clsxMF0sdz1yWzExXSx0WzhdPXgqbitiKnMrXypoK3cqZyx0WzldPXgqaStiKmwrXypmK3cqdix0WzEwXT14KmErYipjK18qcCt3Km0sdFsxMV09eCpvK2IqdStfKmQrdyp5LHg9clsxMl0sYj1yWzEzXSxfPXJbMTRdLHc9clsxNV0sdFsxMl09eCpuK2IqcytfKmgrdypnLHRbMTNdPXgqaStiKmwrXypmK3cqdix0WzE0XT14KmErYipjK18qcCt3Km0sdFsxNV09eCpvK2IqdStfKmQrdyp5LHR9fSx7fV0sMjY1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPTEvKGUtciksbD0xLyhuLWkpLGM9MS8oYS1vKTtyZXR1cm4gdFswXT0tMipzLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPS0yKmwsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTIqYyx0WzExXT0wLHRbMTJdPShlK3IpKnMsdFsxM109KGkrbikqbCx0WzE0XT0obythKSpjLHRbMTVdPTEsdH19LHt9XSwyNjY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT0xL01hdGgudGFuKGUvMiksbz0xLyhuLWkpO3JldHVybiB0WzBdPWEvcix0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT1hLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0oaStuKSpvLHRbMTFdPS0xLHRbMTJdPTAsdFsxM109MCx0WzE0XT0yKmkqbipvLHRbMTVdPTAsdH19LHt9XSwyNjc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHMsbCxjLHUsaCxmLHAsZCxnLHYsbSx5LHgsYixfLHcsayxBLFQsTSxTLEU9blswXSxDPW5bMV0sTD1uWzJdLHo9TWF0aC5zcXJ0KEUqRStDKkMrTCpMKTtpZihNYXRoLmFicyh6KTwxZS02KXJldHVybiBudWxsO0UqPXo9MS96LEMqPXosTCo9eixpPU1hdGguc2luKHIpLGE9TWF0aC5jb3Mociksbz0xLWEscz1lWzBdLGw9ZVsxXSxjPWVbMl0sdT1lWzNdLGg9ZVs0XSxmPWVbNV0scD1lWzZdLGQ9ZVs3XSxnPWVbOF0sdj1lWzldLG09ZVsxMF0seT1lWzExXSx4PUUqRSpvK2EsYj1DKkUqbytMKmksXz1MKkUqby1DKmksdz1FKkMqby1MKmksaz1DKkMqbythLEE9TCpDKm8rRSppLFQ9RSpMKm8rQyppLE09QypMKm8tRSppLFM9TCpMKm8rYSx0WzBdPXMqeCtoKmIrZypfLHRbMV09bCp4K2YqYit2Kl8sdFsyXT1jKngrcCpiK20qXyx0WzNdPXUqeCtkKmIreSpfLHRbNF09cyp3K2gqaytnKkEsdFs1XT1sKncrZiprK3YqQSx0WzZdPWMqdytwKmsrbSpBLHRbN109dSp3K2Qqayt5KkEsdFs4XT1zKlQraCpNK2cqUyx0WzldPWwqVCtmKk0rdipTLHRbMTBdPWMqVCtwKk0rbSpTLHRbMTFdPXUqVCtkKk0reSpTLGUhPT10JiYodFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pO3JldHVybiB0fX0se31dLDI2ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbNF0sbz1lWzVdLHM9ZVs2XSxsPWVbN10sYz1lWzhdLHU9ZVs5XSxoPWVbMTBdLGY9ZVsxMV07ZSE9PXQmJih0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pO3JldHVybiB0WzRdPWEqaStjKm4sdFs1XT1vKmkrdSpuLHRbNl09cyppK2gqbix0WzddPWwqaStmKm4sdFs4XT1jKmktYSpuLHRbOV09dSppLW8qbix0WzEwXT1oKmktcypuLHRbMTFdPWYqaS1sKm4sdH19LHt9XSwyNjk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzBdLG89ZVsxXSxzPWVbMl0sbD1lWzNdLGM9ZVs4XSx1PWVbOV0saD1lWzEwXSxmPWVbMTFdO2UhPT10JiYodFs0XT1lWzRdLHRbNV09ZVs1XSx0WzZdPWVbNl0sdFs3XT1lWzddLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKTtyZXR1cm4gdFswXT1hKmktYypuLHRbMV09byppLXUqbix0WzJdPXMqaS1oKm4sdFszXT1sKmktZipuLHRbOF09YSpuK2MqaSx0WzldPW8qbit1KmksdFsxMF09cypuK2gqaSx0WzExXT1sKm4rZippLHR9fSx7fV0sMjcwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVswXSxvPWVbMV0scz1lWzJdLGw9ZVszXSxjPWVbNF0sdT1lWzVdLGg9ZVs2XSxmPWVbN107ZSE9PXQmJih0WzhdPWVbOF0sdFs5XT1lWzldLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTFdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKTtyZXR1cm4gdFswXT1hKmkrYypuLHRbMV09byppK3Uqbix0WzJdPXMqaStoKm4sdFszXT1sKmkrZipuLHRbNF09YyppLWEqbix0WzVdPXUqaS1vKm4sdFs2XT1oKmktcypuLHRbN109ZippLWwqbix0fX0se31dLDI3MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49clswXSxpPXJbMV0sYT1yWzJdO3JldHVybiB0WzBdPWVbMF0qbix0WzFdPWVbMV0qbix0WzJdPWVbMl0qbix0WzNdPWVbM10qbix0WzRdPWVbNF0qaSx0WzVdPWVbNV0qaSx0WzZdPWVbNl0qaSx0WzddPWVbN10qaSx0WzhdPWVbOF0qYSx0WzldPWVbOV0qYSx0WzEwXT1lWzEwXSphLHRbMTFdPWVbMTFdKmEsdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0sdH19LHt9XSwyNzI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHMsbCxjLHUsaCxmLHAsZCxnPXJbMF0sdj1yWzFdLG09clsyXTtlPT09dD8odFsxMl09ZVswXSpnK2VbNF0qditlWzhdKm0rZVsxMl0sdFsxM109ZVsxXSpnK2VbNV0qditlWzldKm0rZVsxM10sdFsxNF09ZVsyXSpnK2VbNl0qditlWzEwXSptK2VbMTRdLHRbMTVdPWVbM10qZytlWzddKnYrZVsxMV0qbStlWzE1XSk6KG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLGM9ZVs2XSx1PWVbN10saD1lWzhdLGY9ZVs5XSxwPWVbMTBdLGQ9ZVsxMV0sdFswXT1uLHRbMV09aSx0WzJdPWEsdFszXT1vLHRbNF09cyx0WzVdPWwsdFs2XT1jLHRbN109dSx0WzhdPWgsdFs5XT1mLHRbMTBdPXAsdFsxMV09ZCx0WzEyXT1uKmcrcyp2K2gqbStlWzEyXSx0WzEzXT1pKmcrbCp2K2YqbStlWzEzXSx0WzE0XT1hKmcrYyp2K3AqbStlWzE0XSx0WzE1XT1vKmcrdSp2K2QqbStlWzE1XSk7cmV0dXJuIHR9fSx7fV0sMjczOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYodD09PWUpe3ZhciByPWVbMV0sbj1lWzJdLGk9ZVszXSxhPWVbNl0sbz1lWzddLHM9ZVsxMV07dFsxXT1lWzRdLHRbMl09ZVs4XSx0WzNdPWVbMTJdLHRbNF09cix0WzZdPWVbOV0sdFs3XT1lWzEzXSx0WzhdPW4sdFs5XT1hLHRbMTFdPWVbMTRdLHRbMTJdPWksdFsxM109byx0WzE0XT1zfWVsc2UgdFswXT1lWzBdLHRbMV09ZVs0XSx0WzJdPWVbOF0sdFszXT1lWzEyXSx0WzRdPWVbMV0sdFs1XT1lWzVdLHRbNl09ZVs5XSx0WzddPWVbMTNdLHRbOF09ZVsyXSx0WzldPWVbNl0sdFsxMF09ZVsxMF0sdFsxMV09ZVsxNF0sdFsxMl09ZVszXSx0WzEzXT1lWzddLHRbMTRdPWVbMTFdLHRbMTVdPWVbMTVdO3JldHVybiB0fX0se31dLDI3NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTp0WzBdPTEvZVswXTticmVhaztjYXNlIDQ6bih0LGUpO2JyZWFrO2Nhc2UgOTppKHQsZSk7YnJlYWs7Y2FzZSAxNjphKHQsZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJjdXJyZW50bHkgc3VwcG9ydHMgbWF0cmljZXMgdXAgdG8gNHg0XCIpfXJldHVybiB0fTt2YXIgbj10KFwiZ2wtbWF0Mi9pbnZlcnRcIiksaT10KFwiZ2wtbWF0My9pbnZlcnRcIiksYT10KFwiZ2wtbWF0NC9pbnZlcnRcIil9LHtcImdsLW1hdDIvaW52ZXJ0XCI6MjU0LFwiZ2wtbWF0My9pbnZlcnRcIjoyNTUsXCJnbC1tYXQ0L2ludmVydFwiOjI2Mn1dLDI3NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJiYXJ5Y2VudHJpY1wiKSxpPXQoXCJwb2x5dG9wZS1jbG9zZXN0LXBvaW50L2xpYi9jbG9zZXN0X3BvaW50XzJkLmpzXCIpO2Z1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9WzAsMCwwLDBdLG49MDtuPDQ7KytuKWZvcih2YXIgaT0wO2k8NDsrK2kpcltpXSs9dFs0Km4raV0qZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBvKHQsZSxyLG4saSl7Zm9yKHZhciBvPWEobixhKHIsYShlLFt0WzBdLHRbMV0sdFsyXSwxXSkpKSxzPTA7czwzOysrcylvW3NdLz1vWzNdO3JldHVyblsuNSppWzBdKigxK29bMF0pLC41KmlbMV0qKDEtb1sxXSldfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLHMsbCl7aWYoMT09PXQubGVuZ3RoKXJldHVyblswLHRbMF0uc2xpY2UoKV07Zm9yKHZhciBjPW5ldyBBcnJheSh0Lmxlbmd0aCksdT0wO3U8dC5sZW5ndGg7Kyt1KWNbdV09byh0W3VdLHIsYSxzLGwpO2Zvcih2YXIgaD0wLGY9MS8wLHU9MDt1PGMubGVuZ3RoOysrdSl7Zm9yKHZhciBwPTAsZD0wO2Q8MjsrK2QpcCs9TWF0aC5wb3coY1t1XVtkXS1lW2RdLDIpO3A8ZiYmKGY9cCxoPXUpfWZvcih2YXIgZz1mdW5jdGlvbih0LGUpe2lmKDI9PT10Lmxlbmd0aCl7Zm9yKHZhciByPTAsYT0wLG89MDtvPDI7KytvKXIrPU1hdGgucG93KGVbb10tdFswXVtvXSwyKSxhKz1NYXRoLnBvdyhlW29dLXRbMV1bb10sMik7cmV0dXJuIHI9TWF0aC5zcXJ0KHIpLGE9TWF0aC5zcXJ0KGEpLHIrYTwxZS02P1sxLDBdOlthLyhyK2EpLHIvKGErcildfWlmKDM9PT10Lmxlbmd0aCl7dmFyIHM9WzAsMF07cmV0dXJuIGkodFswXSx0WzFdLHRbMl0sZSxzKSxuKHQscyl9cmV0dXJuW119KGMsZSksdj0wLHU9MDt1PDM7Kyt1KXtpZihnW3VdPC0uMDAxfHxnW3VdPjEuMDAwMSlyZXR1cm4gbnVsbDt2Kz1nW3VdfWlmKE1hdGguYWJzKHYtMSk+LjAwMSlyZXR1cm4gbnVsbDtyZXR1cm5baCxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bMCwwLDBdLG49MDtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9dFtuXSxhPWVbbl0sbz0wO288MzsrK28pcltvXSs9YSppW29dO3JldHVybiByfSh0LGcpLGddfX0se2JhcnljZW50cmljOjY0LFwicG9seXRvcGUtY2xvc2VzdC1wb2ludC9saWIvY2xvc2VzdF9wb2ludF8yZC5qc1wiOjQ3NH1dLDI3NjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCJnbHNsaWZ5XCIpLGk9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiwgbm9ybWFsO1xcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xcblxcbnVuaWZvcm0gbWF0NCBtb2RlbFxcbiAgICAgICAgICAgLCB2aWV3XFxuICAgICAgICAgICAsIHByb2plY3Rpb25cXG4gICAgICAgICAgICwgaW52ZXJzZU1vZGVsO1xcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvblxcbiAgICAgICAgICAgLCBsaWdodFBvc2l0aW9uO1xcblxcbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxcbiAgICAgICAgICAgLCBmX2xpZ2h0RGlyZWN0aW9uXFxuICAgICAgICAgICAsIGZfZXllRGlyZWN0aW9uXFxuICAgICAgICAgICAsIGZfZGF0YTtcXG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcXG52YXJ5aW5nIHZlYzIgZl91djtcXG5cXG52ZWM0IHByb2plY3QodmVjMyBwKSB7XFxuICByZXR1cm4gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocCwgMS4wKTtcXG59XFxuXFxudm9pZCBtYWluKCkge1xcbiAgZ2xfUG9zaXRpb24gICAgICA9IHByb2plY3QocG9zaXRpb24pO1xcblxcbiAgLy9MaWdodGluZyBnZW9tZXRyeSBwYXJhbWV0ZXJzXFxuICB2ZWM0IGNhbWVyYUNvb3JkaW5hdGUgPSB2aWV3ICogdmVjNChwb3NpdGlvbiAsIDEuMCk7XFxuICBjYW1lcmFDb29yZGluYXRlLnh5eiAvPSBjYW1lcmFDb29yZGluYXRlLnc7XFxuICBmX2xpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xcbiAgZl9leWVEaXJlY3Rpb24gICA9IGV5ZVBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XFxuICBmX25vcm1hbCAgPSBub3JtYWxpemUoKHZlYzQobm9ybWFsLCAwLjApICogaW52ZXJzZU1vZGVsKS54eXopO1xcblxcbiAgZl9jb2xvciAgICAgICAgICA9IGNvbG9yO1xcbiAgZl9kYXRhICAgICAgICAgICA9IHBvc2l0aW9uO1xcbiAgZl91diAgICAgICAgICAgICA9IHV2O1xcbn1cXG5cIl0pLGE9bihbXCIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZVxcblxcbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmZsb2F0IGJlY2ttYW5uRGlzdHJpYnV0aW9uKGZsb2F0IHgsIGZsb2F0IHJvdWdobmVzcykge1xcbiAgZmxvYXQgTmRvdEggPSBtYXgoeCwgMC4wMDAxKTtcXG4gIGZsb2F0IGNvczJBbHBoYSA9IE5kb3RIICogTmRvdEg7XFxuICBmbG9hdCB0YW4yQWxwaGEgPSAoY29zMkFscGhhIC0gMS4wKSAvIGNvczJBbHBoYTtcXG4gIGZsb2F0IHJvdWdobmVzczIgPSByb3VnaG5lc3MgKiByb3VnaG5lc3M7XFxuICBmbG9hdCBkZW5vbSA9IDMuMTQxNTkyNjUzNTg5NzkzICogcm91Z2huZXNzMiAqIGNvczJBbHBoYSAqIGNvczJBbHBoYTtcXG4gIHJldHVybiBleHAodGFuMkFscGhhIC8gcm91Z2huZXNzMikgLyBkZW5vbTtcXG59XFxuXFxuZmxvYXQgY29va1RvcnJhbmNlU3BlY3VsYXIoXFxuICB2ZWMzIGxpZ2h0RGlyZWN0aW9uLFxcbiAgdmVjMyB2aWV3RGlyZWN0aW9uLFxcbiAgdmVjMyBzdXJmYWNlTm9ybWFsLFxcbiAgZmxvYXQgcm91Z2huZXNzLFxcbiAgZmxvYXQgZnJlc25lbCkge1xcblxcbiAgZmxvYXQgVmRvdE4gPSBtYXgoZG90KHZpZXdEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xcbiAgZmxvYXQgTGRvdE4gPSBtYXgoZG90KGxpZ2h0RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSwgMC4wKTtcXG5cXG4gIC8vSGFsZiBhbmdsZSB2ZWN0b3JcXG4gIHZlYzMgSCA9IG5vcm1hbGl6ZShsaWdodERpcmVjdGlvbiArIHZpZXdEaXJlY3Rpb24pO1xcblxcbiAgLy9HZW9tZXRyaWMgdGVybVxcbiAgZmxvYXQgTmRvdEggPSBtYXgoZG90KHN1cmZhY2VOb3JtYWwsIEgpLCAwLjApO1xcbiAgZmxvYXQgVmRvdEggPSBtYXgoZG90KHZpZXdEaXJlY3Rpb24sIEgpLCAwLjAwMDAwMSk7XFxuICBmbG9hdCBMZG90SCA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIEgpLCAwLjAwMDAwMSk7XFxuICBmbG9hdCBHMSA9ICgyLjAgKiBOZG90SCAqIFZkb3ROKSAvIFZkb3RIO1xcbiAgZmxvYXQgRzIgPSAoMi4wICogTmRvdEggKiBMZG90TikgLyBMZG90SDtcXG4gIGZsb2F0IEcgPSBtaW4oMS4wLCBtaW4oRzEsIEcyKSk7XFxuICBcXG4gIC8vRGlzdHJpYnV0aW9uIHRlcm1cXG4gIGZsb2F0IEQgPSBiZWNrbWFubkRpc3RyaWJ1dGlvbihOZG90SCwgcm91Z2huZXNzKTtcXG5cXG4gIC8vRnJlc25lbCB0ZXJtXFxuICBmbG9hdCBGID0gcG93KDEuMCAtIFZkb3ROLCBmcmVzbmVsKTtcXG5cXG4gIC8vTXVsdGlwbHkgdGVybXMgYW5kIGRvbmVcXG4gIHJldHVybiAgRyAqIEYgKiBEIC8gbWF4KDMuMTQxNTkyNjUgKiBWZG90TiwgMC4wMDAwMDEpO1xcbn1cXG5cXG4vLyNwcmFnbWEgZ2xzbGlmeTogYmVja21hbm4gPSByZXF1aXJlKGdsc2wtc3BlY3VsYXItYmVja21hbm4pIC8vIHVzZWQgaW4gZ2wtc3VyZmFjZTNkXFxuXFxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcXG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XFxuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcXG59XFxuXFxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XFxudW5pZm9ybSBmbG9hdCByb3VnaG5lc3NcXG4gICAgICAgICAgICAsIGZyZXNuZWxcXG4gICAgICAgICAgICAsIGthbWJpZW50XFxuICAgICAgICAgICAgLCBrZGlmZnVzZVxcbiAgICAgICAgICAgICwga3NwZWN1bGFyO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxuXFxudmFyeWluZyB2ZWMzIGZfbm9ybWFsXFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cXG4gICAgICAgICAgICwgZl9leWVEaXJlY3Rpb25cXG4gICAgICAgICAgICwgZl9kYXRhO1xcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xcbnZhcnlpbmcgdmVjMiBmX3V2O1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmIChmX2NvbG9yLmEgPT0gMC4wIHx8XFxuICAgIG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9kYXRhKVxcbiAgKSBkaXNjYXJkO1xcblxcbiAgdmVjMyBOID0gbm9ybWFsaXplKGZfbm9ybWFsKTtcXG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShmX2xpZ2h0RGlyZWN0aW9uKTtcXG4gIHZlYzMgViA9IG5vcm1hbGl6ZShmX2V5ZURpcmVjdGlvbik7XFxuXFxuICBpZihnbF9Gcm9udEZhY2luZykge1xcbiAgICBOID0gLU47XFxuICB9XFxuXFxuICBmbG9hdCBzcGVjdWxhciA9IG1pbigxLjAsIG1heCgwLjAsIGNvb2tUb3JyYW5jZVNwZWN1bGFyKEwsIFYsIE4sIHJvdWdobmVzcywgZnJlc25lbCkpKTtcXG4gIC8vZmxvYXQgc3BlY3VsYXIgPSBtYXgoMC4wLCBiZWNrbWFubihMLCBWLCBOLCByb3VnaG5lc3MpKTsgLy8gdXNlZCBpbiBnbC1zdXJmYWNlM2RcXG5cXG4gIGZsb2F0IGRpZmZ1c2UgID0gbWluKGthbWJpZW50ICsga2RpZmZ1c2UgKiBtYXgoZG90KE4sIEwpLCAwLjApLCAxLjApO1xcblxcbiAgdmVjNCBzdXJmYWNlQ29sb3IgPSB2ZWM0KGZfY29sb3IucmdiLCAxLjApICogdGV4dHVyZTJEKHRleHR1cmUsIGZfdXYpO1xcbiAgdmVjNCBsaXRDb2xvciA9IHN1cmZhY2VDb2xvci5hICogdmVjNChkaWZmdXNlICogc3VyZmFjZUNvbG9yLnJnYiArIGtzcGVjdWxhciAqIHZlYzMoMSwxLDEpICogc3BlY3VsYXIsICAxLjApO1xcblxcbiAgZ2xfRnJhZ0NvbG9yID0gbGl0Q29sb3IgKiBmX2NvbG9yLmE7XFxufVxcblwiXSksbz1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xcblxcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcXG5cXG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcXG52YXJ5aW5nIHZlYzMgZl9kYXRhO1xcbnZhcnlpbmcgdmVjMiBmX3V2O1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxuICBmX2NvbG9yID0gY29sb3I7XFxuICBmX2RhdGEgID0gcG9zaXRpb247XFxuICBmX3V2ICAgID0gdXY7XFxufVwiXSkscz1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XFxuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XFxufVxcblxcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xcblxcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xcbnZhcnlpbmcgdmVjMyBmX2RhdGE7XFxudmFyeWluZyB2ZWMyIGZfdXY7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9kYXRhKSkgZGlzY2FyZDtcXG5cXG4gIGdsX0ZyYWdDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dikgKiBvcGFjaXR5O1xcbn1cIl0pLGw9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcXG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xcbn1cXG5cXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcXG5hdHRyaWJ1dGUgdmVjMiB1djtcXG5hdHRyaWJ1dGUgZmxvYXQgcG9pbnRTaXplO1xcblxcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcXG5cXG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcXG52YXJ5aW5nIHZlYzIgZl91djtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBwb3NpdGlvbikpIHtcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAuMCwgMC4wICwwLjAgLDAuMCk7XFxuICB9IGVsc2Uge1xcbiAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xcbiAgfVxcbiAgZ2xfUG9pbnRTaXplID0gcG9pbnRTaXplO1xcbiAgZl9jb2xvciA9IGNvbG9yO1xcbiAgZl91diA9IHV2O1xcbn1cIl0pLGM9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcXG5cXG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcXG52YXJ5aW5nIHZlYzIgZl91djtcXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWMyIHBvaW50UiA9IGdsX1BvaW50Q29vcmQueHkgLSB2ZWMyKDAuNSwgMC41KTtcXG4gIGlmKGRvdChwb2ludFIsIHBvaW50UikgPiAwLjI1KSB7XFxuICAgIGRpc2NhcmQ7XFxuICB9XFxuICBnbF9GcmFnQ29sb3IgPSBmX2NvbG9yICogdGV4dHVyZTJEKHRleHR1cmUsIGZfdXYpICogb3BhY2l0eTtcXG59XCJdKSx1PW4oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzQgaWQ7XFxuXFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcblxcbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjNCBmX2lkO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxuICBmX2lkICAgICAgICA9IGlkO1xcbiAgZl9wb3NpdGlvbiAgPSBwb3NpdGlvbjtcXG59XCJdKSxoPW4oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcXG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XFxuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcXG59XFxuXFxudW5pZm9ybSB2ZWMzICBjbGlwQm91bmRzWzJdO1xcbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xcblxcbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjNCBmX2lkO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfcG9zaXRpb24pKSBkaXNjYXJkO1xcblxcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwaWNrSWQsIGZfaWQueHl6KTtcXG59XCJdKSxmPW4oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcXG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XFxuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcXG59XFxuXFxuYXR0cmlidXRlIHZlYzMgIHBvc2l0aW9uO1xcbmF0dHJpYnV0ZSBmbG9hdCBwb2ludFNpemU7XFxuYXR0cmlidXRlIHZlYzQgIGlkO1xcblxcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcXG5cXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzQgZl9pZDtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBwb3NpdGlvbikpIHtcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDAuMCk7XFxuICB9IGVsc2Uge1xcbiAgICBnbF9Qb3NpdGlvbiAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG4gICAgZ2xfUG9pbnRTaXplID0gcG9pbnRTaXplO1xcbiAgfVxcbiAgZl9pZCAgICAgICAgID0gaWQ7XFxuICBmX3Bvc2l0aW9uICAgPSBwb3NpdGlvbjtcXG59XCJdKSxwPW4oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XFxuXFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxufVwiXSksZD1uKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnVuaWZvcm0gdmVjMyBjb250b3VyQ29sb3I7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb250b3VyQ29sb3IsIDEuMCk7XFxufVxcblwiXSk7ci5tZXNoU2hhZGVyPXt2ZXJ0ZXg6aSxmcmFnbWVudDphLGF0dHJpYnV0ZXM6W3tuYW1lOlwicG9zaXRpb25cIix0eXBlOlwidmVjM1wifSx7bmFtZTpcIm5vcm1hbFwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwiY29sb3JcIix0eXBlOlwidmVjNFwifSx7bmFtZTpcInV2XCIsdHlwZTpcInZlYzJcIn1dfSxyLndpcmVTaGFkZXI9e3ZlcnRleDpvLGZyYWdtZW50OnMsYXR0cmlidXRlczpbe25hbWU6XCJwb3NpdGlvblwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwiY29sb3JcIix0eXBlOlwidmVjNFwifSx7bmFtZTpcInV2XCIsdHlwZTpcInZlYzJcIn1dfSxyLnBvaW50U2hhZGVyPXt2ZXJ0ZXg6bCxmcmFnbWVudDpjLGF0dHJpYnV0ZXM6W3tuYW1lOlwicG9zaXRpb25cIix0eXBlOlwidmVjM1wifSx7bmFtZTpcImNvbG9yXCIsdHlwZTpcInZlYzRcIn0se25hbWU6XCJ1dlwiLHR5cGU6XCJ2ZWMyXCJ9LHtuYW1lOlwicG9pbnRTaXplXCIsdHlwZTpcImZsb2F0XCJ9XX0sci5waWNrU2hhZGVyPXt2ZXJ0ZXg6dSxmcmFnbWVudDpoLGF0dHJpYnV0ZXM6W3tuYW1lOlwicG9zaXRpb25cIix0eXBlOlwidmVjM1wifSx7bmFtZTpcImlkXCIsdHlwZTpcInZlYzRcIn1dfSxyLnBvaW50UGlja1NoYWRlcj17dmVydGV4OmYsZnJhZ21lbnQ6aCxhdHRyaWJ1dGVzOlt7bmFtZTpcInBvc2l0aW9uXCIsdHlwZTpcInZlYzNcIn0se25hbWU6XCJwb2ludFNpemVcIix0eXBlOlwiZmxvYXRcIn0se25hbWU6XCJpZFwiLHR5cGU6XCJ2ZWM0XCJ9XX0sci5jb250b3VyU2hhZGVyPXt2ZXJ0ZXg6cCxmcmFnbWVudDpkLGF0dHJpYnV0ZXM6W3tuYW1lOlwicG9zaXRpb25cIix0eXBlOlwidmVjM1wifV19fSx7Z2xzbGlmeTo0MDJ9XSwyNzc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2wtc2hhZGVyXCIpLGk9dChcImdsLWJ1ZmZlclwiKSxhPXQoXCJnbC12YW9cIiksbz10KFwiZ2wtdGV4dHVyZTJkXCIpLHM9dChcIm5vcm1hbHNcIiksbD10KFwiZ2wtbWF0NC9tdWx0aXBseVwiKSxjPXQoXCJnbC1tYXQ0L2ludmVydFwiKSx1PXQoXCJuZGFycmF5XCIpLGg9dChcImNvbG9ybWFwXCIpLGY9dChcInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyXCIpLHA9dChcInR5cGVkYXJyYXktcG9vbFwiKSxkPXQoXCIuL2xpYi9zaGFkZXJzXCIpLGc9dChcIi4vbGliL2Nsb3Nlc3QtcG9pbnRcIiksdj1kLm1lc2hTaGFkZXIsbT1kLndpcmVTaGFkZXIseT1kLnBvaW50U2hhZGVyLHg9ZC5waWNrU2hhZGVyLGI9ZC5wb2ludFBpY2tTaGFkZXIsXz1kLmNvbnRvdXJTaGFkZXIsdz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24gayh0LGUscixuLGksYSxvLHMsbCxjLHUsaCxmLHAsZCxnLHYsbSx5LHgsYixfLGssQSxULE0sUyl7dGhpcy5nbD10LHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuY2VsbHM9W10sdGhpcy5wb3NpdGlvbnM9W10sdGhpcy5pbnRlbnNpdHk9W10sdGhpcy50ZXh0dXJlPWUsdGhpcy5kaXJ0eT0hMCx0aGlzLnRyaVNoYWRlcj1yLHRoaXMubGluZVNoYWRlcj1uLHRoaXMucG9pbnRTaGFkZXI9aSx0aGlzLnBpY2tTaGFkZXI9YSx0aGlzLnBvaW50UGlja1NoYWRlcj1vLHRoaXMuY29udG91clNoYWRlcj1zLHRoaXMudHJpYW5nbGVQb3NpdGlvbnM9bCx0aGlzLnRyaWFuZ2xlQ29sb3JzPXUsdGhpcy50cmlhbmdsZU5vcm1hbHM9Zix0aGlzLnRyaWFuZ2xlVVZzPWgsdGhpcy50cmlhbmdsZUlkcz1jLHRoaXMudHJpYW5nbGVWQU89cCx0aGlzLnRyaWFuZ2xlQ291bnQ9MCx0aGlzLmxpbmVXaWR0aD0xLHRoaXMuZWRnZVBvc2l0aW9ucz1kLHRoaXMuZWRnZUNvbG9ycz12LHRoaXMuZWRnZVVWcz1tLHRoaXMuZWRnZUlkcz1nLHRoaXMuZWRnZVZBTz15LHRoaXMuZWRnZUNvdW50PTAsdGhpcy5wb2ludFBvc2l0aW9ucz14LHRoaXMucG9pbnRDb2xvcnM9Xyx0aGlzLnBvaW50VVZzPWssdGhpcy5wb2ludFNpemVzPUEsdGhpcy5wb2ludElkcz1iLHRoaXMucG9pbnRWQU89VCx0aGlzLnBvaW50Q291bnQ9MCx0aGlzLmNvbnRvdXJMaW5lV2lkdGg9MSx0aGlzLmNvbnRvdXJQb3NpdGlvbnM9TSx0aGlzLmNvbnRvdXJWQU89Uyx0aGlzLmNvbnRvdXJDb3VudD0wLHRoaXMuY29udG91ckNvbG9yPVswLDAsMF0sdGhpcy5jb250b3VyRW5hYmxlPSEwLHRoaXMucGlja0lkPTEsdGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5jbGlwQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMubGlnaHRQb3NpdGlvbj1bMWU1LDFlNSwwXSx0aGlzLmFtYmllbnRMaWdodD0uOCx0aGlzLmRpZmZ1c2VMaWdodD0uOCx0aGlzLnNwZWN1bGFyTGlnaHQ9Mix0aGlzLnJvdWdobmVzcz0uNSx0aGlzLmZyZXNuZWw9MS41LHRoaXMub3BhY2l0eT0xLHRoaXMuaGFzQWxwaGE9ITEsdGhpcy5vcGFjaXR5c2NhbGU9ITEsdGhpcy5fbW9kZWw9dyx0aGlzLl92aWV3PXcsdGhpcy5fcHJvamVjdGlvbj13LHRoaXMuX3Jlc29sdXRpb249WzEsMV19dmFyIEE9ay5wcm90b3R5cGU7ZnVuY3Rpb24gVCh0LGUpe2lmKCFlKXJldHVybiAxO2lmKCFlLmxlbmd0aClyZXR1cm4gMTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoOysrcil7aWYoZS5sZW5ndGg8MilyZXR1cm4gMTtpZihlW3JdWzBdPT09dClyZXR1cm4gZVtyXVsxXTtpZihlW3JdWzBdPnQmJnI+MCl7dmFyIG49KGVbcl1bMF0tdCkvKGVbcl1bMF0tZVtyLTFdWzBdKTtyZXR1cm4gZVtyXVsxXSooMS1uKStuKmVbci0xXVsxXX19cmV0dXJuIDF9ZnVuY3Rpb24gTSh0KXt2YXIgZT1uKHQseS52ZXJ0ZXgseS5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0yLGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0zLGUuYXR0cmlidXRlcy5wb2ludFNpemUubG9jYXRpb249NCxlfWZ1bmN0aW9uIFModCl7dmFyIGU9bih0LHgudmVydGV4LHguZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuaWQubG9jYXRpb249MSxlfWZ1bmN0aW9uIEUodCl7dmFyIGU9bih0LGIudmVydGV4LGIuZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuaWQubG9jYXRpb249MSxlLmF0dHJpYnV0ZXMucG9pbnRTaXplLmxvY2F0aW9uPTQsZX1mdW5jdGlvbiBDKHQpe3ZhciBlPW4odCxfLnZlcnRleCxfLmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZX1BLmlzT3BhcXVlPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaGFzQWxwaGF9LEEuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc0FscGhhfSxBLnBpY2tTbG90cz0xLEEuc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH0sQS5oaWdobGlnaHQ9ZnVuY3Rpb24odCl7aWYodCYmdGhpcy5jb250b3VyRW5hYmxlKXtmb3IodmFyIGU9Zih0aGlzLmNlbGxzLHRoaXMuaW50ZW5zaXR5LHQuaW50ZW5zaXR5KSxyPWUuY2VsbHMsbj1lLnZlcnRleElkcyxpPWUudmVydGV4V2VpZ2h0cyxhPXIubGVuZ3RoLG89cC5tYWxsb2NGbG9hdDMyKDYqYSkscz0wLGw9MDtsPGE7KytsKWZvcih2YXIgYz1yW2xdLHU9MDt1PDI7Kyt1KXt2YXIgaD1jWzBdOzI9PT1jLmxlbmd0aCYmKGg9Y1t1XSk7Zm9yKHZhciBkPW5baF1bMF0sZz1uW2hdWzFdLHY9aVtoXSxtPTEtdix5PXRoaXMucG9zaXRpb25zW2RdLHg9dGhpcy5wb3NpdGlvbnNbZ10sYj0wO2I8MzsrK2Ipb1tzKytdPXYqeVtiXSttKnhbYl19dGhpcy5jb250b3VyQ291bnQ9cy8zfDAsdGhpcy5jb250b3VyUG9zaXRpb25zLnVwZGF0ZShvLnN1YmFycmF5KDAscykpLHAuZnJlZShvKX1lbHNlIHRoaXMuY29udG91ckNvdW50PTB9LEEudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e307dmFyIGU9dGhpcy5nbDt0aGlzLmRpcnR5PSEwLFwiY29udG91ckVuYWJsZVwiaW4gdCYmKHRoaXMuY29udG91ckVuYWJsZT10LmNvbnRvdXJFbmFibGUpLFwiY29udG91ckNvbG9yXCJpbiB0JiYodGhpcy5jb250b3VyQ29sb3I9dC5jb250b3VyQ29sb3IpLFwibGluZVdpZHRoXCJpbiB0JiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgpLFwibGlnaHRQb3NpdGlvblwiaW4gdCYmKHRoaXMubGlnaHRQb3NpdGlvbj10LmxpZ2h0UG9zaXRpb24pLHRoaXMuaGFzQWxwaGE9ITEsXCJvcGFjaXR5XCJpbiB0JiYodGhpcy5vcGFjaXR5PXQub3BhY2l0eSx0aGlzLm9wYWNpdHk8MSYmKHRoaXMuaGFzQWxwaGE9ITApKSxcIm9wYWNpdHlzY2FsZVwiaW4gdCYmKHRoaXMub3BhY2l0eXNjYWxlPXQub3BhY2l0eXNjYWxlLHRoaXMuaGFzQWxwaGE9ITApLFwiYW1iaWVudFwiaW4gdCYmKHRoaXMuYW1iaWVudExpZ2h0PXQuYW1iaWVudCksXCJkaWZmdXNlXCJpbiB0JiYodGhpcy5kaWZmdXNlTGlnaHQ9dC5kaWZmdXNlKSxcInNwZWN1bGFyXCJpbiB0JiYodGhpcy5zcGVjdWxhckxpZ2h0PXQuc3BlY3VsYXIpLFwicm91Z2huZXNzXCJpbiB0JiYodGhpcy5yb3VnaG5lc3M9dC5yb3VnaG5lc3MpLFwiZnJlc25lbFwiaW4gdCYmKHRoaXMuZnJlc25lbD10LmZyZXNuZWwpLHQudGV4dHVyZT8odGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRleHR1cmU9byhlLHQudGV4dHVyZSkpOnQuY29sb3JtYXAmJih0aGlzLnRleHR1cmUuc2hhcGU9WzI1NiwyNTZdLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZS5MSU5FQVJfTUlQTUFQX0xJTkVBUix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUuTElORUFSLHRoaXMudGV4dHVyZS5zZXRQaXhlbHMoZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9aCh7Y29sb3JtYXA6dCxuc2hhZGVzOjI1Nixmb3JtYXQ6XCJyZ2JhXCJ9KSxuPW5ldyBVaW50OEFycmF5KDEwMjQpLGk9MDtpPDI1NjsrK2kpe2Zvcih2YXIgYT1yW2ldLG89MDtvPDM7KytvKW5bNCppK29dPWFbb107bls0KmkrM109ZT8yNTUqVChpLzI1NSxlKToyNTUqYVszXX1yZXR1cm4gdShuLFsyNTYsMjU2LDRdLFs0LDAsMV0pfSh0LmNvbG9ybWFwLHRoaXMub3BhY2l0eXNjYWxlKSksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwKCkpO3ZhciByPXQuY2VsbHMsbj10LnBvc2l0aW9ucztpZihuJiZyKXt2YXIgaT1bXSxhPVtdLGw9W10sYz1bXSxmPVtdLHA9W10sZD1bXSxnPVtdLHY9W10sbT1bXSx5PVtdLHg9W10sYj1bXSxfPVtdO3RoaXMuY2VsbHM9cix0aGlzLnBvc2l0aW9ucz1uO3ZhciB3PXQudmVydGV4Tm9ybWFscyxrPXQuY2VsbE5vcm1hbHMsQT12b2lkIDA9PT10LnZlcnRleE5vcm1hbHNFcHNpbG9uPzFlLTY6dC52ZXJ0ZXhOb3JtYWxzRXBzaWxvbixNPXZvaWQgMD09PXQuZmFjZU5vcm1hbHNFcHNpbG9uPzFlLTY6dC5mYWNlTm9ybWFsc0Vwc2lsb247dC51c2VGYWNldE5vcm1hbHMmJiFrJiYoaz1zLmZhY2VOb3JtYWxzKHIsbixNKSksa3x8d3x8KHc9cy52ZXJ0ZXhOb3JtYWxzKHIsbixBKSk7dmFyIFM9dC52ZXJ0ZXhDb2xvcnMsRT10LmNlbGxDb2xvcnMsQz10Lm1lc2hDb2xvcnx8WzEsMSwxLDFdLEw9dC52ZXJ0ZXhVVnMsej10LnZlcnRleEludGVuc2l0eSxPPXQuY2VsbFVWcyxJPXQuY2VsbEludGVuc2l0eSxEPTEvMCxQPS0xLzA7aWYoIUwmJiFPKWlmKHopaWYodC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHMpRD0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMF0sUD0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMV07ZWxzZSBmb3IodmFyIFI9MDtSPHoubGVuZ3RoOysrUil7dmFyIEY9eltSXTtEPU1hdGgubWluKEQsRiksUD1NYXRoLm1heChQLEYpfWVsc2UgaWYoSSlmb3IoUj0wO1I8SS5sZW5ndGg7KytSKXtGPUlbUl07RD1NYXRoLm1pbihELEYpLFA9TWF0aC5tYXgoUCxGKX1lbHNlIGZvcihSPTA7UjxuLmxlbmd0aDsrK1Ipe0Y9bltSXVsyXTtEPU1hdGgubWluKEQsRiksUD1NYXRoLm1heChQLEYpfXRoaXMuaW50ZW5zaXR5PXp8fChJP2Z1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKW5baV09MDt2YXIgYT10Lmxlbmd0aDtmb3IoaT0wO2k8YTsrK2kpZm9yKHZhciBvPXRbaV0scz0wO3M8by5sZW5ndGg7KytzKW5bb1tzXV09cltpXTtyZXR1cm4gbn0ocixuLmxlbmd0aCxJKTpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT10W25dWzJdO3JldHVybiByfShuKSk7dmFyIEI9dC5wb2ludFNpemVzLE49dC5wb2ludFNpemV8fDE7dGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV07Zm9yKFI9MDtSPG4ubGVuZ3RoOysrUilmb3IodmFyIGo9bltSXSxWPTA7VjwzOysrVikhaXNOYU4oaltWXSkmJmlzRmluaXRlKGpbVl0pJiYodGhpcy5ib3VuZHNbMF1bVl09TWF0aC5taW4odGhpcy5ib3VuZHNbMF1bVl0saltWXSksdGhpcy5ib3VuZHNbMV1bVl09TWF0aC5tYXgodGhpcy5ib3VuZHNbMV1bVl0saltWXSkpO3ZhciBVPTAscT0wLEg9MDt0OmZvcihSPTA7UjxyLmxlbmd0aDsrK1Ipe3ZhciBHPXJbUl07c3dpdGNoKEcubGVuZ3RoKXtjYXNlIDE6Zm9yKGo9bltXPUdbMF1dLFY9MDtWPDM7KytWKWlmKGlzTmFOKGpbVl0pfHwhaXNGaW5pdGUoaltWXSkpY29udGludWUgdDttLnB1c2goalswXSxqWzFdLGpbMl0pLFg9Uz9TW1ddOkU/RVtSXTpDLHRoaXMub3BhY2l0eXNjYWxlJiZ6P2EucHVzaChYWzBdLFhbMV0sWFsyXSx0aGlzLm9wYWNpdHkqVCgoeltXXS1EKS8oUC1EKSx0aGlzLm9wYWNpdHlzY2FsZSkpOjM9PT1YLmxlbmd0aD95LnB1c2goWFswXSxYWzFdLFhbMl0sdGhpcy5vcGFjaXR5KTooeS5wdXNoKFhbMF0sWFsxXSxYWzJdLFhbM10qdGhpcy5vcGFjaXR5KSwhdGhpcy5oYXNBbHBoYSYmWFszXTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpLFo9TD9MW1ddOno/Wyh6W1ddLUQpLyhQLUQpLDBdOk8/T1tSXTpJP1soSVtSXS1EKS8oUC1EKSwwXTpbKGpbMl0tRCkvKFAtRCksMF0seC5wdXNoKFpbMF0sWlsxXSksQj9iLnB1c2goQltXXSk6Yi5wdXNoKE4pLF8ucHVzaChSKSxIKz0xO2JyZWFrO2Nhc2UgMjpmb3IoVj0wO1Y8MjsrK1Ype2o9bltXPUdbVl1dO2Zvcih2YXIgWT0wO1k8MzsrK1kpaWYoaXNOYU4oaltZXSl8fCFpc0Zpbml0ZShqW1ldKSljb250aW51ZSB0fWZvcihWPTA7VjwyOysrVil7aj1uW1c9R1tWXV07cC5wdXNoKGpbMF0salsxXSxqWzJdKSxYPVM/U1tXXTpFP0VbUl06Qyx0aGlzLm9wYWNpdHlzY2FsZSYmej9hLnB1c2goWFswXSxYWzFdLFhbMl0sdGhpcy5vcGFjaXR5KlQoKHpbV10tRCkvKFAtRCksdGhpcy5vcGFjaXR5c2NhbGUpKTozPT09WC5sZW5ndGg/ZC5wdXNoKFhbMF0sWFsxXSxYWzJdLHRoaXMub3BhY2l0eSk6KGQucHVzaChYWzBdLFhbMV0sWFsyXSxYWzNdKnRoaXMub3BhY2l0eSksIXRoaXMuaGFzQWxwaGEmJlhbM108MSYmKHRoaXMuaGFzQWxwaGE9ITApKSxaPUw/TFtXXTp6P1soeltXXS1EKS8oUC1EKSwwXTpPP09bUl06ST9bKElbUl0tRCkvKFAtRCksMF06WyhqWzJdLUQpLyhQLUQpLDBdLGcucHVzaChaWzBdLFpbMV0pLHYucHVzaChSKX1xKz0xO2JyZWFrO2Nhc2UgMzpmb3IoVj0wO1Y8MzsrK1YpZm9yKGo9bltXPUdbVl1dLFk9MDtZPDM7KytZKWlmKGlzTmFOKGpbWV0pfHwhaXNGaW5pdGUoaltZXSkpY29udGludWUgdDtmb3IoVj0wO1Y8MzsrK1Ype3ZhciBXLFgsWiwkO2o9bltXPUdbMi1WXV07aS5wdXNoKGpbMF0salsxXSxqWzJdKSxYPVM/U1tXXTpFP0VbUl06Qyx0aGlzLm9wYWNpdHlzY2FsZSYmej9hLnB1c2goWFswXSxYWzFdLFhbMl0sdGhpcy5vcGFjaXR5KlQoKHpbV10tRCkvKFAtRCksdGhpcy5vcGFjaXR5c2NhbGUpKTozPT09WC5sZW5ndGg/YS5wdXNoKFhbMF0sWFsxXSxYWzJdLHRoaXMub3BhY2l0eSk6KGEucHVzaChYWzBdLFhbMV0sWFsyXSxYWzNdKnRoaXMub3BhY2l0eSksIXRoaXMuaGFzQWxwaGEmJlhbM108MSYmKHRoaXMuaGFzQWxwaGE9ITApKSxaPUw/TFtXXTp6P1soeltXXS1EKS8oUC1EKSwwXTpPP09bUl06ST9bKElbUl0tRCkvKFAtRCksMF06WyhqWzJdLUQpLyhQLUQpLDBdLGMucHVzaChaWzBdLFpbMV0pLCQ9dz93W1ddOmtbUl0sbC5wdXNoKCRbMF0sJFsxXSwkWzJdKSxmLnB1c2goUil9VSs9MX19dGhpcy5wb2ludENvdW50PUgsdGhpcy5lZGdlQ291bnQ9cSx0aGlzLnRyaWFuZ2xlQ291bnQ9VSx0aGlzLnBvaW50UG9zaXRpb25zLnVwZGF0ZShtKSx0aGlzLnBvaW50Q29sb3JzLnVwZGF0ZSh5KSx0aGlzLnBvaW50VVZzLnVwZGF0ZSh4KSx0aGlzLnBvaW50U2l6ZXMudXBkYXRlKGIpLHRoaXMucG9pbnRJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheShfKSksdGhpcy5lZGdlUG9zaXRpb25zLnVwZGF0ZShwKSx0aGlzLmVkZ2VDb2xvcnMudXBkYXRlKGQpLHRoaXMuZWRnZVVWcy51cGRhdGUoZyksdGhpcy5lZGdlSWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkodikpLHRoaXMudHJpYW5nbGVQb3NpdGlvbnMudXBkYXRlKGkpLHRoaXMudHJpYW5nbGVDb2xvcnMudXBkYXRlKGEpLHRoaXMudHJpYW5nbGVVVnMudXBkYXRlKGMpLHRoaXMudHJpYW5nbGVOb3JtYWxzLnVwZGF0ZShsKSx0aGlzLnRyaWFuZ2xlSWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoZikpfX0sQS5kcmF3VHJhbnNwYXJlbnQ9QS5kcmF3PWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHx3LG49dC52aWV3fHx3LGk9dC5wcm9qZWN0aW9ufHx3LGE9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28pYVswXVtvXT1NYXRoLm1heChhWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksYVsxXVtvXT1NYXRoLm1pbihhWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dmFyIHM9e21vZGVsOnIsdmlldzpuLHByb2plY3Rpb246aSxpbnZlcnNlTW9kZWw6dy5zbGljZSgpLGNsaXBCb3VuZHM6YSxrYW1iaWVudDp0aGlzLmFtYmllbnRMaWdodCxrZGlmZnVzZTp0aGlzLmRpZmZ1c2VMaWdodCxrc3BlY3VsYXI6dGhpcy5zcGVjdWxhckxpZ2h0LHJvdWdobmVzczp0aGlzLnJvdWdobmVzcyxmcmVzbmVsOnRoaXMuZnJlc25lbCxleWVQb3NpdGlvbjpbMCwwLDBdLGxpZ2h0UG9zaXRpb246WzAsMCwwXSxjb250b3VyQ29sb3I6dGhpcy5jb250b3VyQ29sb3IsdGV4dHVyZTowfTtzLmludmVyc2VNb2RlbD1jKHMuaW52ZXJzZU1vZGVsLHMubW9kZWwpLGUuZGlzYWJsZShlLkNVTExfRkFDRSksdGhpcy50ZXh0dXJlLmJpbmQoMCk7dmFyIHU9bmV3IEFycmF5KDE2KTtsKHUscy52aWV3LHMubW9kZWwpLGwodSxzLnByb2plY3Rpb24sdSksYyh1LHUpO2ZvcihvPTA7bzwzOysrbylzLmV5ZVBvc2l0aW9uW29dPXVbMTIrb10vdVsxNV07dmFyIGgsZj11WzE1XTtmb3Iobz0wO288MzsrK28pZis9dGhpcy5saWdodFBvc2l0aW9uW29dKnVbNCpvKzNdO2ZvcihvPTA7bzwzOysrbyl7Zm9yKHZhciBwPXVbMTIrb10sZD0wO2Q8MzsrK2QpcCs9dVs0KmQrb10qdGhpcy5saWdodFBvc2l0aW9uW2RdO3MubGlnaHRQb3NpdGlvbltvXT1wL2Z9dGhpcy50cmlhbmdsZUNvdW50PjAmJigoaD10aGlzLnRyaVNoYWRlcikuYmluZCgpLGgudW5pZm9ybXM9cyx0aGlzLnRyaWFuZ2xlVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRVMsMCwzKnRoaXMudHJpYW5nbGVDb3VudCksdGhpcy50cmlhbmdsZVZBTy51bmJpbmQoKSk7dGhpcy5lZGdlQ291bnQ+MCYmdGhpcy5saW5lV2lkdGg+MCYmKChoPXRoaXMubGluZVNoYWRlcikuYmluZCgpLGgudW5pZm9ybXM9cyx0aGlzLmVkZ2VWQU8uYmluZCgpLGUubGluZVdpZHRoKHRoaXMubGluZVdpZHRoKnRoaXMucGl4ZWxSYXRpbyksZS5kcmF3QXJyYXlzKGUuTElORVMsMCwyKnRoaXMuZWRnZUNvdW50KSx0aGlzLmVkZ2VWQU8udW5iaW5kKCkpO3RoaXMucG9pbnRDb3VudD4wJiYoKGg9dGhpcy5wb2ludFNoYWRlcikuYmluZCgpLGgudW5pZm9ybXM9cyx0aGlzLnBvaW50VkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5QT0lOVFMsMCx0aGlzLnBvaW50Q291bnQpLHRoaXMucG9pbnRWQU8udW5iaW5kKCkpO3RoaXMuY29udG91ckVuYWJsZSYmdGhpcy5jb250b3VyQ291bnQ+MCYmdGhpcy5jb250b3VyTGluZVdpZHRoPjAmJigoaD10aGlzLmNvbnRvdXJTaGFkZXIpLmJpbmQoKSxoLnVuaWZvcm1zPXMsdGhpcy5jb250b3VyVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLHRoaXMuY29udG91ckNvdW50KSx0aGlzLmNvbnRvdXJWQU8udW5iaW5kKCkpfSxBLmRyYXdQaWNrPWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHx3LG49dC52aWV3fHx3LGk9dC5wcm9qZWN0aW9ufHx3LGE9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28pYVswXVtvXT1NYXRoLm1heChhWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksYVsxXVtvXT1NYXRoLm1pbihhWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dGhpcy5fbW9kZWw9W10uc2xpY2UuY2FsbChyKSx0aGlzLl92aWV3PVtdLnNsaWNlLmNhbGwobiksdGhpcy5fcHJvamVjdGlvbj1bXS5zbGljZS5jYWxsKGkpLHRoaXMuX3Jlc29sdXRpb249W2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF07dmFyIHMsbD17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGNsaXBCb3VuZHM6YSxwaWNrSWQ6dGhpcy5waWNrSWQvMjU1fTsoKHM9dGhpcy5waWNrU2hhZGVyKS5iaW5kKCkscy51bmlmb3Jtcz1sLHRoaXMudHJpYW5nbGVDb3VudD4wJiYodGhpcy50cmlhbmdsZVZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuVFJJQU5HTEVTLDAsMyp0aGlzLnRyaWFuZ2xlQ291bnQpLHRoaXMudHJpYW5nbGVWQU8udW5iaW5kKCkpLHRoaXMuZWRnZUNvdW50PjAmJih0aGlzLmVkZ2VWQU8uYmluZCgpLGUubGluZVdpZHRoKHRoaXMubGluZVdpZHRoKnRoaXMucGl4ZWxSYXRpbyksZS5kcmF3QXJyYXlzKGUuTElORVMsMCwyKnRoaXMuZWRnZUNvdW50KSx0aGlzLmVkZ2VWQU8udW5iaW5kKCkpLHRoaXMucG9pbnRDb3VudD4wKSYmKChzPXRoaXMucG9pbnRQaWNrU2hhZGVyKS5iaW5kKCkscy51bmlmb3Jtcz1sLHRoaXMucG9pbnRWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlBPSU5UUywwLHRoaXMucG9pbnRDb3VudCksdGhpcy5wb2ludFZBTy51bmJpbmQoKSl9LEEucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7Zm9yKHZhciBlPXQudmFsdWVbMF0rMjU2KnQudmFsdWVbMV0rNjU1MzYqdC52YWx1ZVsyXSxyPXRoaXMuY2VsbHNbZV0sbj10aGlzLnBvc2l0aW9ucyxpPW5ldyBBcnJheShyLmxlbmd0aCksYT0wO2E8ci5sZW5ndGg7KythKWlbYV09bltyW2FdXTt2YXIgbz1nKGksW3QuY29vcmRbMF0sdGhpcy5fcmVzb2x1dGlvblsxXS10LmNvb3JkWzFdXSx0aGlzLl9tb2RlbCx0aGlzLl92aWV3LHRoaXMuX3Byb2plY3Rpb24sdGhpcy5fcmVzb2x1dGlvbik7aWYoIW8pcmV0dXJuIG51bGw7dmFyIHM9b1syXSxsPTA7Zm9yKGE9MDthPHIubGVuZ3RoOysrYSlsKz1zW2FdKnRoaXMuaW50ZW5zaXR5W3JbYV1dO3JldHVybntwb3NpdGlvbjpvWzFdLGluZGV4OnJbb1swXV0sY2VsbDpyLGNlbGxJZDplLGludGVuc2l0eTpsLGRhdGFDb29yZGluYXRlOnRoaXMucG9zaXRpb25zW3Jbb1swXV1dfX0sQS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRyaVNoYWRlci5kaXNwb3NlKCksdGhpcy5saW5lU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBvaW50U2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMucG9pbnRQaWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVkFPLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlQ29sb3JzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVVZzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlTm9ybWFscy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZUlkcy5kaXNwb3NlKCksdGhpcy5lZGdlVkFPLmRpc3Bvc2UoKSx0aGlzLmVkZ2VQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMuZWRnZUNvbG9ycy5kaXNwb3NlKCksdGhpcy5lZGdlVVZzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VJZHMuZGlzcG9zZSgpLHRoaXMucG9pbnRWQU8uZGlzcG9zZSgpLHRoaXMucG9pbnRQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMucG9pbnRDb2xvcnMuZGlzcG9zZSgpLHRoaXMucG9pbnRVVnMuZGlzcG9zZSgpLHRoaXMucG9pbnRTaXplcy5kaXNwb3NlKCksdGhpcy5wb2ludElkcy5kaXNwb3NlKCksdGhpcy5jb250b3VyVkFPLmRpc3Bvc2UoKSx0aGlzLmNvbnRvdXJQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMuY29udG91clNoYWRlci5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoJiYodD0oZT10KS5nbCksISh0LmdldEV4dGVuc2lvbihcIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlc1wiKXx8dC5nZXRFeHRlbnNpb24oXCJNT1pfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzXCIpfHx0LmdldEV4dGVuc2lvbihcIldFQktJVF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXNcIikpKXRocm93IG5ldyBFcnJvcihcImRlcml2YXRpdmVzIG5vdCBzdXBwb3J0ZWRcIik7dmFyIHI9ZnVuY3Rpb24odCl7dmFyIGU9bih0LHYudmVydGV4LHYuZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlLmF0dHJpYnV0ZXMubm9ybWFsLmxvY2F0aW9uPTQsZX0odCkscz1mdW5jdGlvbih0KXt2YXIgZT1uKHQsbS52ZXJ0ZXgsbS5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0yLGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0zLGV9KHQpLGw9TSh0KSxjPVModCksaD1FKHQpLGY9Qyh0KSxwPW8odCx1KG5ldyBVaW50OEFycmF5KFsyNTUsMjU1LDI1NSwyNTVdKSxbMSwxLDRdKSk7cC5nZW5lcmF0ZU1pcG1hcCgpLHAubWluRmlsdGVyPXQuTElORUFSX01JUE1BUF9MSU5FQVIscC5tYWdGaWx0ZXI9dC5MSU5FQVI7dmFyIGQ9aSh0KSxnPWkodCkseT1pKHQpLHg9aSh0KSxiPWkodCksXz1hKHQsW3tidWZmZXI6ZCx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOmIsdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6Zyx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOnksdHlwZTp0LkZMT0FULHNpemU6Mn0se2J1ZmZlcjp4LHR5cGU6dC5GTE9BVCxzaXplOjN9XSksdz1pKHQpLEE9aSh0KSxUPWkodCksTD1pKHQpLHo9YSh0LFt7YnVmZmVyOncsdHlwZTp0LkZMT0FULHNpemU6M30se2J1ZmZlcjpMLHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOkEsdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjpULHR5cGU6dC5GTE9BVCxzaXplOjJ9XSksTz1pKHQpLEk9aSh0KSxEPWkodCksUD1pKHQpLFI9aSh0KSxGPWEodCxbe2J1ZmZlcjpPLHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6Uix0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjpJLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6RCx0eXBlOnQuRkxPQVQsc2l6ZToyfSx7YnVmZmVyOlAsdHlwZTp0LkZMT0FULHNpemU6MX1dKSxCPWkodCksTj1uZXcgayh0LHAscixzLGwsYyxoLGYsZCxiLGcseSx4LF8sdyxMLEEsVCx6LE8sUixJLEQsUCxGLEIsYSh0LFt7YnVmZmVyOkIsdHlwZTp0LkZMT0FULHNpemU6M31dKSk7cmV0dXJuIE4udXBkYXRlKGUpLE59fSx7XCIuL2xpYi9jbG9zZXN0LXBvaW50XCI6Mjc1LFwiLi9saWIvc2hhZGVyc1wiOjI3Nixjb2xvcm1hcDoxMTcsXCJnbC1idWZmZXJcIjoyMzgsXCJnbC1tYXQ0L2ludmVydFwiOjI2MixcImdsLW1hdDQvbXVsdGlwbHlcIjoyNjQsXCJnbC1zaGFkZXJcIjoyOTgsXCJnbC10ZXh0dXJlMmRcIjozMTUsXCJnbC12YW9cIjozMjAsbmRhcnJheTo0NDMsbm9ybWFsczo0NDYsXCJzaW1wbGljaWFsLWNvbXBsZXgtY29udG91clwiOjUwMyxcInR5cGVkYXJyYXktcG9vbFwiOjUzMH1dLDI3ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlLFswLDAsMCwxLDEsMCwxLDFdKSxzPWkoZSxhLmJveFZlcnQsYS5saW5lRnJhZyk7cmV0dXJuIG5ldyBvKHQscixzKX07dmFyIG49dChcImdsLWJ1ZmZlclwiKSxpPXQoXCJnbC1zaGFkZXJcIiksYT10KFwiLi9zaGFkZXJzXCIpO2Z1bmN0aW9uIG8odCxlLHIpe3RoaXMucGxvdD10LHRoaXMudmJvPWUsdGhpcy5zaGFkZXI9cn12YXIgcyxsLGM9by5wcm90b3R5cGU7Yy5iaW5kPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zaGFkZXI7dGhpcy52Ym8uYmluZCgpLHRoaXMuc2hhZGVyLmJpbmQoKSx0LmF0dHJpYnV0ZXMuY29vcmQucG9pbnRlcigpLHQudW5pZm9ybXMuc2NyZWVuQm94PXRoaXMucGxvdC5zY3JlZW5Cb3h9LGMuZHJhd0JveD0ocz1bMCwwXSxsPVswLDBdLGZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpcy5wbG90LG89dGhpcy5zaGFkZXIsYz1hLmdsO3NbMF09dCxzWzFdPWUsbFswXT1yLGxbMV09bixvLnVuaWZvcm1zLmxvPXMsby51bmlmb3Jtcy5oaT1sLG8udW5pZm9ybXMuY29sb3I9aSxjLmRyYXdBcnJheXMoYy5UUklBTkdMRV9TVFJJUCwwLDQpfSksYy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52Ym8uZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHtcIi4vc2hhZGVyc1wiOjI4MSxcImdsLWJ1ZmZlclwiOjIzOCxcImdsLXNoYWRlclwiOjI5OH1dLDI3OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlKSxhPWkoZSxvLmdyaWRWZXJ0LG8uZ3JpZEZyYWcpLGw9aShlLG8udGlja1ZlcnQsby5ncmlkRnJhZyk7cmV0dXJuIG5ldyBzKHQscixhLGwpfTt2YXIgbj10KFwiZ2wtYnVmZmVyXCIpLGk9dChcImdsLXNoYWRlclwiKSxhPXQoXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiKSxvPXQoXCIuL3NoYWRlcnNcIik7ZnVuY3Rpb24gcyh0LGUscixuKXt0aGlzLnBsb3Q9dCx0aGlzLnZibz1lLHRoaXMuc2hhZGVyPXIsdGhpcy50aWNrU2hhZGVyPW4sdGhpcy50aWNrcz1bW10sW11dfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gdC1lfXZhciBjLHUsaCxmLHAsZD1zLnByb3RvdHlwZTtkLmRyYXc9KGM9WzAsMF0sdT1bMCwwXSxoPVswLDBdLGZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMucGxvdCxlPXRoaXMudmJvLHI9dGhpcy5zaGFkZXIsbj10aGlzLnRpY2tzLGk9dC5nbCxhPXQuX3RpY2tCb3VuZHMsbz10LmRhdGFCb3gscz10LnZpZXdCb3gsbD10LmdyaWRMaW5lV2lkdGgsZj10LmdyaWRMaW5lQ29sb3IscD10LmdyaWRMaW5lRW5hYmxlLGQ9dC5waXhlbFJhdGlvLGc9MDtnPDI7KytnKXt2YXIgdj1hW2ddLG09YVtnKzJdLXYseT0uNSoob1tnKzJdK29bZ10pLHg9b1tnKzJdLW9bZ107dVtnXT0yKm0veCxjW2ddPTIqKHYteSkveH1yLmJpbmQoKSxlLmJpbmQoKSxyLmF0dHJpYnV0ZXMuZGF0YUNvb3JkLnBvaW50ZXIoKSxyLnVuaWZvcm1zLmRhdGFTaGlmdD1jLHIudW5pZm9ybXMuZGF0YVNjYWxlPXU7dmFyIGI9MDtmb3IoZz0wO2c8MjsrK2cpe2hbMF09aFsxXT0wLGhbZ109MSxyLnVuaWZvcm1zLmRhdGFBeGlzPWgsci51bmlmb3Jtcy5saW5lV2lkdGg9bFtnXS8oc1tnKzJdLXNbZ10pKmQsci51bmlmb3Jtcy5jb2xvcj1mW2ddO3ZhciBfPTYqbltnXS5sZW5ndGg7cFtnXSYmXyYmaS5kcmF3QXJyYXlzKGkuVFJJQU5HTEVTLGIsXyksYis9X319KSxkLmRyYXdUaWNrTWFya3M9ZnVuY3Rpb24oKXt2YXIgdD1bMCwwXSxlPVswLDBdLHI9WzEsMF0sbj1bMCwxXSxpPVswLDBdLG89WzAsMF07cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBzPXRoaXMucGxvdCxjPXRoaXMudmJvLHU9dGhpcy50aWNrU2hhZGVyLGg9dGhpcy50aWNrcyxmPXMuZ2wscD1zLl90aWNrQm91bmRzLGQ9cy5kYXRhQm94LGc9cy52aWV3Qm94LHY9cy5waXhlbFJhdGlvLG09cy5zY3JlZW5Cb3gseT1tWzJdLW1bMF0seD1tWzNdLW1bMV0sYj1nWzJdLWdbMF0sXz1nWzNdLWdbMV0sdz0wO3c8MjsrK3cpe3ZhciBrPXBbd10sQT1wW3crMl0tayxUPS41KihkW3crMl0rZFt3XSksTT1kW3crMl0tZFt3XTtlW3ddPTIqQS9NLHRbd109Miooay1UKS9NfWVbMF0qPWIveSx0WzBdKj1iL3ksZVsxXSo9Xy94LHRbMV0qPV8veCx1LmJpbmQoKSxjLmJpbmQoKSx1LmF0dHJpYnV0ZXMuZGF0YUNvb3JkLnBvaW50ZXIoKTt2YXIgUz11LnVuaWZvcm1zO1MuZGF0YVNoaWZ0PXQsUy5kYXRhU2NhbGU9ZTt2YXIgRT1zLnRpY2tNYXJrTGVuZ3RoLEM9cy50aWNrTWFya1dpZHRoLEw9cy50aWNrTWFya0NvbG9yLHo9NipoWzBdLmxlbmd0aCxPPU1hdGgubWluKGEuZ2UoaFswXSwoZFswXS1wWzBdKS8ocFsyXS1wWzBdKSxsKSxoWzBdLmxlbmd0aCksST1NYXRoLm1pbihhLmd0KGhbMF0sKGRbMl0tcFswXSkvKHBbMl0tcFswXSksbCksaFswXS5sZW5ndGgpLEQ9MCs2Kk8sUD02Kk1hdGgubWF4KDAsSS1PKSxSPU1hdGgubWluKGEuZ2UoaFsxXSwoZFsxXS1wWzFdKS8ocFszXS1wWzFdKSxsKSxoWzFdLmxlbmd0aCksRj1NYXRoLm1pbihhLmd0KGhbMV0sKGRbM10tcFsxXSkvKHBbM10tcFsxXSksbCksaFsxXS5sZW5ndGgpLEI9eis2KlIsTj02Kk1hdGgubWF4KDAsRi1SKTtpWzBdPTIqKGdbMF0tRVsxXSkveS0xLGlbMV09KGdbM10rZ1sxXSkveC0xLG9bMF09RVsxXSp2L3ksb1sxXT1DWzFdKnYveCxOJiYoUy5jb2xvcj1MWzFdLFMudGlja1NjYWxlPW8sUy5kYXRhQXhpcz1uLFMuc2NyZWVuT2Zmc2V0PWksZi5kcmF3QXJyYXlzKGYuVFJJQU5HTEVTLEIsTikpLGlbMF09KGdbMl0rZ1swXSkveS0xLGlbMV09MiooZ1sxXS1FWzBdKS94LTEsb1swXT1DWzBdKnYveSxvWzFdPUVbMF0qdi94LFAmJihTLmNvbG9yPUxbMF0sUy50aWNrU2NhbGU9byxTLmRhdGFBeGlzPXIsUy5zY3JlZW5PZmZzZXQ9aSxmLmRyYXdBcnJheXMoZi5UUklBTkdMRVMsRCxQKSksaVswXT0yKihnWzJdK0VbM10pL3ktMSxpWzFdPShnWzNdK2dbMV0pL3gtMSxvWzBdPUVbM10qdi95LG9bMV09Q1szXSp2L3gsTiYmKFMuY29sb3I9TFszXSxTLnRpY2tTY2FsZT1vLFMuZGF0YUF4aXM9bixTLnNjcmVlbk9mZnNldD1pLGYuZHJhd0FycmF5cyhmLlRSSUFOR0xFUyxCLE4pKSxpWzBdPShnWzJdK2dbMF0pL3ktMSxpWzFdPTIqKGdbM10rRVsyXSkveC0xLG9bMF09Q1syXSp2L3ksb1sxXT1FWzJdKnYveCxQJiYoUy5jb2xvcj1MWzJdLFMudGlja1NjYWxlPW8sUy5kYXRhQXhpcz1yLFMuc2NyZWVuT2Zmc2V0PWksZi5kcmF3QXJyYXlzKGYuVFJJQU5HTEVTLEQsUCkpfX0oKSxkLnVwZGF0ZT0oZj1bMSwxLC0xLC0xLDEsLTFdLHA9WzEsLTEsMSwxLC0xLC0xXSxmdW5jdGlvbih0KXtmb3IodmFyIGU9dC50aWNrcyxyPXQuYm91bmRzLG49bmV3IEZsb2F0MzJBcnJheSgxOCooZVswXS5sZW5ndGgrZVsxXS5sZW5ndGgpKSxpPSh0aGlzLnBsb3QuemVyb0xpbmVFbmFibGUsMCksYT1bW10sW11dLG89MDtvPDI7KytvKWZvcih2YXIgcz1hW29dLGw9ZVtvXSxjPXJbb10sdT1yW28rMl0saD0wO2g8bC5sZW5ndGg7KytoKXt2YXIgZD0obFtoXS54LWMpLyh1LWMpO3MucHVzaChkKTtmb3IodmFyIGc9MDtnPDY7KytnKW5baSsrXT1kLG5baSsrXT1mW2ddLG5baSsrXT1wW2ddfXRoaXMudGlja3M9YSx0aGlzLnZiby51cGRhdGUobil9KSxkLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZiby5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMudGlja1NoYWRlci5kaXNwb3NlKCl9fSx7XCIuL3NoYWRlcnNcIjoyODEsXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiOjI4MyxcImdsLWJ1ZmZlclwiOjIzOCxcImdsLXNoYWRlclwiOjI5OH1dLDI4MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlLFstMSwtMSwtMSwxLDEsLTEsMSwxXSkscz1pKGUsYS5saW5lVmVydCxhLmxpbmVGcmFnKTtyZXR1cm4gbmV3IG8odCxyLHMpfTt2YXIgbj10KFwiZ2wtYnVmZmVyXCIpLGk9dChcImdsLXNoYWRlclwiKSxhPXQoXCIuL3NoYWRlcnNcIik7ZnVuY3Rpb24gbyh0LGUscil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yfXZhciBzLGwsYz1vLnByb3RvdHlwZTtjLmJpbmQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnNoYWRlcjt0aGlzLnZiby5iaW5kKCksdGhpcy5zaGFkZXIuYmluZCgpLHQuYXR0cmlidXRlcy5jb29yZC5wb2ludGVyKCksdC51bmlmb3Jtcy5zY3JlZW5Cb3g9dGhpcy5wbG90LnNjcmVlbkJveH0sYy5kcmF3TGluZT0ocz1bMCwwXSxsPVswLDBdLGZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz10aGlzLnBsb3QsYz10aGlzLnNoYWRlcix1PW8uZ2w7c1swXT10LHNbMV09ZSxsWzBdPXIsbFsxXT1uLGMudW5pZm9ybXMuc3RhcnQ9cyxjLnVuaWZvcm1zLmVuZD1sLGMudW5pZm9ybXMud2lkdGg9aSpvLnBpeGVsUmF0aW8sYy51bmlmb3Jtcy5jb2xvcj1hLHUuZHJhd0FycmF5cyh1LlRSSUFOR0xFX1NUUklQLDAsNCl9KSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZiby5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0se1wiLi9zaGFkZXJzXCI6MjgxLFwiZ2wtYnVmZmVyXCI6MjM4LFwiZ2wtc2hhZGVyXCI6Mjk4fV0sMjgxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsc2xpZnlcIiksaT1uKFtcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxudW5pZm9ybSB2ZWM0IGNvbG9yO1xcbnZvaWQgbWFpbigpIHtcXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IueHl6ICogY29sb3IudywgY29sb3Iudyk7XFxufVxcblwiXSk7ZS5leHBvcnRzPXtsaW5lVmVydDpuKFtcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzIgY29vcmQ7XFxuXFxudW5pZm9ybSB2ZWM0IHNjcmVlbkJveDtcXG51bmlmb3JtIHZlYzIgc3RhcnQsIGVuZDtcXG51bmlmb3JtIGZsb2F0IHdpZHRoO1xcblxcbnZlYzIgcGVycCh2ZWMyIHYpIHtcXG4gIHJldHVybiB2ZWMyKHYueSwgLXYueCk7XFxufVxcblxcbnZlYzIgc2NyZWVuKHZlYzIgdikge1xcbiAgcmV0dXJuIDIuMCAqICh2IC0gc2NyZWVuQm94Lnh5KSAvIChzY3JlZW5Cb3guencgLSBzY3JlZW5Cb3gueHkpIC0gMS4wO1xcbn1cXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWMyIGRlbHRhID0gbm9ybWFsaXplKHBlcnAoc3RhcnQgLSBlbmQpKTtcXG4gIHZlYzIgb2Zmc2V0ID0gbWl4KHN0YXJ0LCBlbmQsIDAuNSAqIChjb29yZC55KzEuMCkpO1xcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHNjcmVlbihvZmZzZXQgKyAwLjUgKiB3aWR0aCAqIGRlbHRhICogY29vcmQueCksIDAsIDEpO1xcbn1cXG5cIl0pLGxpbmVGcmFnOmksdGV4dFZlcnQ6bihbXCIjZGVmaW5lIEdMU0xJRlkgMVxcbmF0dHJpYnV0ZSB2ZWMzIHRleHRDb29yZGluYXRlO1xcblxcbnVuaWZvcm0gdmVjMiBkYXRhU2NhbGUsIGRhdGFTaGlmdCwgZGF0YUF4aXMsIHNjcmVlbk9mZnNldCwgdGV4dFNjYWxlO1xcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgZmxvYXQgZGF0YU9mZnNldCAgPSB0ZXh0Q29vcmRpbmF0ZS56O1xcbiAgdmVjMiBnbHlwaE9mZnNldCAgPSB0ZXh0Q29vcmRpbmF0ZS54eTtcXG4gIG1hdDIgZ2x5cGhNYXRyaXggPSBtYXQyKGNvcyhhbmdsZSksIHNpbihhbmdsZSksIC1zaW4oYW5nbGUpLCBjb3MoYW5nbGUpKTtcXG4gIHZlYzIgc2NyZWVuQ29vcmRpbmF0ZSA9IGRhdGFBeGlzICogKGRhdGFTY2FsZSAqIGRhdGFPZmZzZXQgKyBkYXRhU2hpZnQpICtcXG4gICAgZ2x5cGhNYXRyaXggKiBnbHlwaE9mZnNldCAqIHRleHRTY2FsZSArIHNjcmVlbk9mZnNldDtcXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChzY3JlZW5Db29yZGluYXRlLCAwLCAxKTtcXG59XFxuXCJdKSx0ZXh0RnJhZzppLGdyaWRWZXJ0Om4oW1wicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjMyBkYXRhQ29vcmQ7XFxuXFxudW5pZm9ybSB2ZWMyIGRhdGFBeGlzLCBkYXRhU2hpZnQsIGRhdGFTY2FsZTtcXG51bmlmb3JtIGZsb2F0IGxpbmVXaWR0aDtcXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWMyIHBvcyA9IGRhdGFBeGlzICogKGRhdGFTY2FsZSAqIGRhdGFDb29yZC54ICsgZGF0YVNoaWZ0KTtcXG4gIHBvcyArPSAxMC4wICogZGF0YUNvb3JkLnkgKiB2ZWMyKGRhdGFBeGlzLnksIC1kYXRhQXhpcy54KSArIGRhdGFDb29yZC56ICogbGluZVdpZHRoO1xcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcywgMCwgMSk7XFxufVxcblwiXSksZ3JpZEZyYWc6aSxib3hWZXJ0Om4oW1wicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjMiBjb29yZDtcXG5cXG51bmlmb3JtIHZlYzQgc2NyZWVuQm94O1xcbnVuaWZvcm0gdmVjMiBsbywgaGk7XFxuXFxudmVjMiBzY3JlZW4odmVjMiB2KSB7XFxuICByZXR1cm4gMi4wICogKHYgLSBzY3JlZW5Cb3gueHkpIC8gKHNjcmVlbkJveC56dyAtIHNjcmVlbkJveC54eSkgLSAxLjA7XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChzY3JlZW4obWl4KGxvLCBoaSwgY29vcmQpKSwgMCwgMSk7XFxufVxcblwiXSksdGlja1ZlcnQ6bihbXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMzIGRhdGFDb29yZDtcXG5cXG51bmlmb3JtIHZlYzIgZGF0YUF4aXMsIGRhdGFTaGlmdCwgZGF0YVNjYWxlLCBzY3JlZW5PZmZzZXQsIHRpY2tTY2FsZTtcXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWMyIHBvcyA9IGRhdGFBeGlzICogKGRhdGFTY2FsZSAqIGRhdGFDb29yZC54ICsgZGF0YVNoaWZ0KTtcXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChwb3MgKyB0aWNrU2NhbGUqZGF0YUNvb3JkLnl6ICsgc2NyZWVuT2Zmc2V0LCAwLCAxKTtcXG59XFxuXCJdKX19LHtnbHNsaWZ5OjQwMn1dLDI4MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlKSxhPWkoZSxzLnRleHRWZXJ0LHMudGV4dEZyYWcpO3JldHVybiBuZXcgbCh0LHIsYSl9O3ZhciBuPXQoXCJnbC1idWZmZXJcIiksaT10KFwiZ2wtc2hhZGVyXCIpLGE9dChcInRleHQtY2FjaGVcIiksbz10KFwiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIikscz10KFwiLi9zaGFkZXJzXCIpO2Z1bmN0aW9uIGwodCxlLHIpe3RoaXMucGxvdD10LHRoaXMudmJvPWUsdGhpcy5zaGFkZXI9cix0aGlzLnRpY2tPZmZzZXQ9W1tdLFtdXSx0aGlzLnRpY2tYPVtbXSxbXV0sdGhpcy5sYWJlbE9mZnNldD1bMCwwXSx0aGlzLmxhYmVsQ291bnQ9WzAsMF19dmFyIGMsdSxoLGYscCxkLGc9bC5wcm90b3R5cGU7Zy5kcmF3VGlja3M9KGM9WzAsMF0sdT1bMCwwXSxoPVswLDBdLGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGxvdCxyPXRoaXMuc2hhZGVyLG49dGhpcy50aWNrWFt0XSxpPXRoaXMudGlja09mZnNldFt0XSxhPWUuZ2wscz1lLnZpZXdCb3gsbD1lLmRhdGFCb3gsZj1lLnNjcmVlbkJveCxwPWUucGl4ZWxSYXRpbyxkPWUudGlja0VuYWJsZSxnPWUudGlja1BhZCx2PWUudGlja0NvbG9yLG09ZS50aWNrQW5nbGUseT1lLmxhYmVsRW5hYmxlLHg9ZS5sYWJlbFBhZCxiPWUubGFiZWxDb2xvcixfPWUubGFiZWxBbmdsZSx3PXRoaXMubGFiZWxPZmZzZXRbdF0saz10aGlzLmxhYmVsQ291bnRbdF0sQT1vLmx0KG4sbFt0XSksVD1vLmxlKG4sbFt0KzJdKTtjWzBdPWNbMV09MCxjW3RdPTEsdVt0XT0oc1syK3RdK3NbdF0pLyhmWzIrdF0tZlt0XSktMTt2YXIgTT0yL2ZbMisoMV50KV0tZlsxXnRdO3VbMV50XT1NKnNbMV50XS0xLGRbdF0mJih1WzFedF0tPU0qcCpnW3RdLEE8VCYmaVtUXT5pW0FdJiYoci51bmlmb3Jtcy5kYXRhQXhpcz1jLHIudW5pZm9ybXMuc2NyZWVuT2Zmc2V0PXUsci51bmlmb3Jtcy5jb2xvcj12W3RdLHIudW5pZm9ybXMuYW5nbGU9bVt0XSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRVMsaVtBXSxpW1RdLWlbQV0pKSkseVt0XSYmayYmKHVbMV50XS09TSpwKnhbdF0sci51bmlmb3Jtcy5kYXRhQXhpcz1oLHIudW5pZm9ybXMuc2NyZWVuT2Zmc2V0PXUsci51bmlmb3Jtcy5jb2xvcj1iW3RdLHIudW5pZm9ybXMuYW5nbGU9X1t0XSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRVMsdyxrKSksdVsxXnRdPU0qc1syKygxXnQpXS0xLGRbdCsyXSYmKHVbMV50XSs9TSpwKmdbdCsyXSxBPFQmJmlbVF0+aVtBXSYmKHIudW5pZm9ybXMuZGF0YUF4aXM9YyxyLnVuaWZvcm1zLnNjcmVlbk9mZnNldD11LHIudW5pZm9ybXMuY29sb3I9dlt0KzJdLHIudW5pZm9ybXMuYW5nbGU9bVt0KzJdLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFUyxpW0FdLGlbVF0taVtBXSkpKSx5W3QrMl0mJmsmJih1WzFedF0rPU0qcCp4W3QrMl0sci51bmlmb3Jtcy5kYXRhQXhpcz1oLHIudW5pZm9ybXMuc2NyZWVuT2Zmc2V0PXUsci51bmlmb3Jtcy5jb2xvcj1iW3QrMl0sci51bmlmb3Jtcy5hbmdsZT1fW3QrMl0sYS5kcmF3QXJyYXlzKGEuVFJJQU5HTEVTLHcsaykpfSksZy5kcmF3VGl0bGU9ZnVuY3Rpb24oKXt2YXIgdD1bMCwwXSxlPVswLDBdO3JldHVybiBmdW5jdGlvbigpe3ZhciByPXRoaXMucGxvdCxuPXRoaXMuc2hhZGVyLGk9ci5nbCxhPXIuc2NyZWVuQm94LG89ci50aXRsZUNlbnRlcixzPXIudGl0bGVBbmdsZSxsPXIudGl0bGVDb2xvcixjPXIucGl4ZWxSYXRpbztpZih0aGlzLnRpdGxlQ291bnQpe2Zvcih2YXIgdT0wO3U8MjsrK3UpZVt1XT0yKihvW3VdKmMtYVt1XSkvKGFbMit1XS1hW3VdKS0xO24uYmluZCgpLG4udW5pZm9ybXMuZGF0YUF4aXM9dCxuLnVuaWZvcm1zLnNjcmVlbk9mZnNldD1lLG4udW5pZm9ybXMuYW5nbGU9cyxuLnVuaWZvcm1zLmNvbG9yPWwsaS5kcmF3QXJyYXlzKGkuVFJJQU5HTEVTLHRoaXMudGl0bGVPZmZzZXQsdGhpcy50aXRsZUNvdW50KX19fSgpLGcuYmluZD0oZj1bMCwwXSxwPVswLDBdLGQ9WzAsMF0sZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBsb3QsZT10aGlzLnNoYWRlcixyPXQuX3RpY2tCb3VuZHMsbj10LmRhdGFCb3gsaT10LnNjcmVlbkJveCxhPXQudmlld0JveDtlLmJpbmQoKTtmb3IodmFyIG89MDtvPDI7KytvKXt2YXIgcz1yW29dLGw9cltvKzJdLXMsYz0uNSoobltvKzJdK25bb10pLHU9bltvKzJdLW5bb10saD1hW29dLGc9YVtvKzJdLWgsdj1pW29dLG09aVtvKzJdLXY7cFtvXT0yKmwvdSpnL20sZltvXT0yKihzLWMpL3UqZy9tfWRbMV09Mip0LnBpeGVsUmF0aW8vKGlbM10taVsxXSksZFswXT1kWzFdKihpWzNdLWlbMV0pLyhpWzJdLWlbMF0pLGUudW5pZm9ybXMuZGF0YVNjYWxlPXAsZS51bmlmb3Jtcy5kYXRhU2hpZnQ9ZixlLnVuaWZvcm1zLnRleHRTY2FsZT1kLHRoaXMudmJvLmJpbmQoKSxlLmF0dHJpYnV0ZXMudGV4dENvb3JkaW5hdGUucG9pbnRlcigpfSksZy51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksbyxzPVtdLGw9dC50aWNrcyxjPXQuYm91bmRzO2ZvcihvPTA7bzwyOysrbyl7dmFyIHU9W01hdGguZmxvb3Iocy5sZW5ndGgvMyldLGg9Wy0xLzBdLGY9bFtvXTtmb3IoZT0wO2U8Zi5sZW5ndGg7KytlKXt2YXIgcD1mW2VdLGQ9cC54LGc9cC50ZXh0LHY9cC5mb250fHxcInNhbnMtc2VyaWZcIjtpPXAuZm9udFNpemV8fDEyO2Zvcih2YXIgbT0xLyhjW28rMl0tY1tvXSkseT1jW29dLHg9Zy5zcGxpdChcIlxcblwiKSxiPTA7Yjx4Lmxlbmd0aDtiKyspZm9yKG49YSh2LHhbYl0pLmRhdGEscj0wO3I8bi5sZW5ndGg7cis9MilzLnB1c2gobltyXSppLC1uW3IrMV0qaS1iKmkqMS4yLChkLXkpKm0pO3UucHVzaChNYXRoLmZsb29yKHMubGVuZ3RoLzMpKSxoLnB1c2goZCl9dGhpcy50aWNrT2Zmc2V0W29dPXUsdGhpcy50aWNrWFtvXT1ofWZvcihvPTA7bzwyOysrbyl7Zm9yKHRoaXMubGFiZWxPZmZzZXRbb109TWF0aC5mbG9vcihzLmxlbmd0aC8zKSxuPWEodC5sYWJlbEZvbnRbb10sdC5sYWJlbHNbb10se3RleHRBbGlnbjpcImNlbnRlclwifSkuZGF0YSxpPXQubGFiZWxTaXplW29dLGU9MDtlPG4ubGVuZ3RoO2UrPTIpcy5wdXNoKG5bZV0qaSwtbltlKzFdKmksMCk7dGhpcy5sYWJlbENvdW50W29dPU1hdGguZmxvb3Iocy5sZW5ndGgvMyktdGhpcy5sYWJlbE9mZnNldFtvXX1mb3IodGhpcy50aXRsZU9mZnNldD1NYXRoLmZsb29yKHMubGVuZ3RoLzMpLG49YSh0LnRpdGxlRm9udCx0LnRpdGxlKS5kYXRhLGk9dC50aXRsZVNpemUsZT0wO2U8bi5sZW5ndGg7ZSs9MilzLnB1c2gobltlXSppLC1uW2UrMV0qaSwwKTt0aGlzLnRpdGxlQ291bnQ9TWF0aC5mbG9vcihzLmxlbmd0aC8zKS10aGlzLnRpdGxlT2Zmc2V0LHRoaXMudmJvLnVwZGF0ZShzKX0sZy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52Ym8uZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHtcIi4vc2hhZGVyc1wiOjI4MSxcImJpbmFyeS1zZWFyY2gtYm91bmRzXCI6MjgzLFwiZ2wtYnVmZmVyXCI6MjM4LFwiZ2wtc2hhZGVyXCI6Mjk4LFwidGV4dC1jYWNoZVwiOjUyMX1dLDI4MzpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsxMDJdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoxMDJ9XSwyODQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPW4oZSxbZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XSksYz1uZXcgbChlLHIpO3JldHVybiBjLmdyaWQ9aShjKSxjLnRleHQ9YShjKSxjLmxpbmU9byhjKSxjLmJveD1zKGMpLGMudXBkYXRlKHQpLGN9O3ZhciBuPXQoXCJnbC1zZWxlY3Qtc3RhdGljXCIpLGk9dChcIi4vbGliL2dyaWRcIiksYT10KFwiLi9saWIvdGV4dFwiKSxvPXQoXCIuL2xpYi9saW5lXCIpLHM9dChcIi4vbGliL2JveFwiKTtmdW5jdGlvbiBsKHQsZSl7dGhpcy5nbD10LHRoaXMucGlja0J1ZmZlcj1lLHRoaXMuc2NyZWVuQm94PVswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XSx0aGlzLnZpZXdCb3g9WzAsMCwwLDBdLHRoaXMuZGF0YUJveD1bLTEwLC0xMCwxMCwxMF0sdGhpcy5ncmlkTGluZUVuYWJsZT1bITAsITBdLHRoaXMuZ3JpZExpbmVXaWR0aD1bMSwxXSx0aGlzLmdyaWRMaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMudGlja01hcmtMZW5ndGg9WzAsMCwwLDBdLHRoaXMudGlja01hcmtXaWR0aD1bMCwwLDAsMF0sdGhpcy50aWNrTWFya0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja1BhZD1bMTUsMTUsMTUsMTVdLHRoaXMudGlja0FuZ2xlPVswLDAsMCwwXSx0aGlzLnRpY2tFbmFibGU9WyEwLCEwLCEwLCEwXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVsUGFkPVsxNSwxNSwxNSwxNV0sdGhpcy5sYWJlbEFuZ2xlPVswLE1hdGguUEkvMiwwLDMqTWF0aC5QSS8yXSx0aGlzLmxhYmVsRW5hYmxlPVshMCwhMCwhMCwhMF0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGl0bGVDZW50ZXI9WzAsMF0sdGhpcy50aXRsZUVuYWJsZT0hMCx0aGlzLnRpdGxlQW5nbGU9MCx0aGlzLnRpdGxlQ29sb3I9WzAsMCwwLDFdLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDBdLHRoaXMuYmFja2dyb3VuZENvbG9yPVswLDAsMCwwXSx0aGlzLnplcm9MaW5lRW5hYmxlPVshMCwhMF0sdGhpcy56ZXJvTGluZVdpZHRoPVs0LDRdLHRoaXMuemVyb0xpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ib3JkZXJMaW5lRW5hYmxlPVshMCwhMCwhMCwhMF0sdGhpcy5ib3JkZXJMaW5lV2lkdGg9WzIsMiwyLDJdLHRoaXMuYm9yZGVyTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZ3JpZD1udWxsLHRoaXMudGV4dD1udWxsLHRoaXMubGluZT1udWxsLHRoaXMuYm94PW51bGwsdGhpcy5vYmplY3RzPVtdLHRoaXMub3ZlcmxheXM9W10sdGhpcy5fdGlja0JvdW5kcz1bMS8wLDEvMCwtMS8wLC0xLzBdLHRoaXMuc3RhdGljPSExLHRoaXMuZGlydHk9ITEsdGhpcy5waWNrRGlydHk9ITEsdGhpcy5waWNrRGVsYXk9MTIwLHRoaXMucGlja1JhZGl1cz0xMCx0aGlzLl9waWNrVGltZW91dD1udWxsLHRoaXMuX2RyYXdQaWNrPXRoaXMuZHJhd1BpY2suYmluZCh0aGlzKSx0aGlzLl9kZXB0aENvdW50ZXI9MH12YXIgYz1sLnByb3RvdHlwZTtmdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT10LnNsaWNlKCkscj0wO3I8ZS5sZW5ndGg7KytyKWVbcl09ZVtyXS5zbGljZSgpO3JldHVybiBlfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdC54LWUueH1jLnNldERpcnR5PWZ1bmN0aW9uKCl7dGhpcy5kaXJ0eT10aGlzLnBpY2tEaXJ0eT0hMH0sYy5zZXRPdmVybGF5RGlydHk9ZnVuY3Rpb24oKXt0aGlzLmRpcnR5PSEwfSxjLm5leHREZXB0aFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlcHRoQ291bnRlcisrLzY1NTM2fSxjLmRyYXc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsLGU9dGhpcy5zY3JlZW5Cb3gscj10aGlzLnZpZXdCb3gsbj10aGlzLmRhdGFCb3gsaT10aGlzLnBpeGVsUmF0aW8sYT10aGlzLmdyaWQsbz10aGlzLmxpbmUscz10aGlzLnRleHQsbD10aGlzLm9iamVjdHM7aWYodGhpcy5fZGVwdGhDb3VudGVyPTAsdGhpcy5waWNrRGlydHkmJih0aGlzLl9waWNrVGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuX3BpY2tUaW1lb3V0KSx0aGlzLnBpY2tEaXJ0eT0hMSx0aGlzLl9waWNrVGltZW91dD1zZXRUaW1lb3V0KHRoaXMuX2RyYXdQaWNrLHRoaXMucGlja0RlbGF5KSksdGhpcy5kaXJ0eSl7aWYodGhpcy5kaXJ0eT0hMSx0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLG51bGwpLHQuZW5hYmxlKHQuU0NJU1NPUl9URVNUKSx0LmRpc2FibGUodC5ERVBUSF9URVNUKSx0LmRlcHRoRnVuYyh0LkxFU1MpLHQuZGVwdGhNYXNrKCExKSx0LmVuYWJsZSh0LkJMRU5EKSx0LmJsZW5kRXF1YXRpb24odC5GVU5DX0FERCx0LkZVTkNfQUREKSx0LmJsZW5kRnVuYyh0Lk9ORSx0Lk9ORV9NSU5VU19TUkNfQUxQSEEpLHRoaXMuYm9yZGVyQ29sb3Ipe3Quc2Npc3NvcihlWzBdLGVbMV0sZVsyXS1lWzBdLGVbM10tZVsxXSk7dmFyIGM9dGhpcy5ib3JkZXJDb2xvcjt0LmNsZWFyQ29sb3IoY1swXSpjWzNdLGNbMV0qY1szXSxjWzJdKmNbM10sY1szXSksdC5jbGVhcih0LkNPTE9SX0JVRkZFUl9CSVR8dC5ERVBUSF9CVUZGRVJfQklUKX10LnNjaXNzb3IoclswXSxyWzFdLHJbMl0tclswXSxyWzNdLXJbMV0pLHQudmlld3BvcnQoclswXSxyWzFdLHJbMl0tclswXSxyWzNdLXJbMV0pO3ZhciB1PXRoaXMuYmFja2dyb3VuZENvbG9yO3QuY2xlYXJDb2xvcih1WzBdKnVbM10sdVsxXSp1WzNdLHVbMl0qdVszXSx1WzNdKSx0LmNsZWFyKHQuQ09MT1JfQlVGRkVSX0JJVCksYS5kcmF3KCk7dmFyIGg9dGhpcy56ZXJvTGluZUVuYWJsZSxmPXRoaXMuemVyb0xpbmVDb2xvcixwPXRoaXMuemVyb0xpbmVXaWR0aDtpZihoWzBdfHxoWzFdKXtvLmJpbmQoKTtmb3IodmFyIGQ9MDtkPDI7KytkKWlmKGhbZF0mJm5bZF08PTAmJm5bZCsyXT49MCl7dmFyIGc9ZVtkXS1uW2RdKihlW2QrMl0tZVtkXSkvKG5bZCsyXS1uW2RdKTswPT09ZD9vLmRyYXdMaW5lKGcsZVsxXSxnLGVbM10scFtkXSxmW2RdKTpvLmRyYXdMaW5lKGVbMF0sZyxlWzJdLGcscFtkXSxmW2RdKX19Zm9yKGQ9MDtkPGwubGVuZ3RoOysrZClsW2RdLmRyYXcoKTt0LnZpZXdwb3J0KGVbMF0sZVsxXSxlWzJdLWVbMF0sZVszXS1lWzFdKSx0LnNjaXNzb3IoZVswXSxlWzFdLGVbMl0tZVswXSxlWzNdLWVbMV0pLHRoaXMuZ3JpZC5kcmF3VGlja01hcmtzKCksby5iaW5kKCk7dmFyIHY9dGhpcy5ib3JkZXJMaW5lRW5hYmxlLG09dGhpcy5ib3JkZXJMaW5lV2lkdGgseT10aGlzLmJvcmRlckxpbmVDb2xvcjtmb3IodlsxXSYmby5kcmF3TGluZShyWzBdLHJbMV0tLjUqbVsxXSppLHJbMF0sclszXSsuNSptWzNdKmksbVsxXSx5WzFdKSx2WzBdJiZvLmRyYXdMaW5lKHJbMF0tLjUqbVswXSppLHJbMV0sclsyXSsuNSptWzJdKmksclsxXSxtWzBdLHlbMF0pLHZbM10mJm8uZHJhd0xpbmUoclsyXSxyWzFdLS41Km1bMV0qaSxyWzJdLHJbM10rLjUqbVszXSppLG1bM10seVszXSksdlsyXSYmby5kcmF3TGluZShyWzBdLS41Km1bMF0qaSxyWzNdLHJbMl0rLjUqbVsyXSppLHJbM10sbVsyXSx5WzJdKSxzLmJpbmQoKSxkPTA7ZDwyOysrZClzLmRyYXdUaWNrcyhkKTt0aGlzLnRpdGxlRW5hYmxlJiZzLmRyYXdUaXRsZSgpO3ZhciB4PXRoaXMub3ZlcmxheXM7Zm9yKGQ9MDtkPHgubGVuZ3RoOysrZCl4W2RdLmRyYXcoKTt0LmRpc2FibGUodC5TQ0lTU09SX1RFU1QpLHQuZGlzYWJsZSh0LkJMRU5EKSx0LmRlcHRoTWFzayghMCl9fSxjLmRyYXdQaWNrPWZ1bmN0aW9uKCl7aWYoIXRoaXMuc3RhdGljKXt2YXIgdD10aGlzLnBpY2tCdWZmZXI7dGhpcy5nbDt0aGlzLl9waWNrVGltZW91dD1udWxsLHQuYmVnaW4oKTtmb3IodmFyIGU9MSxyPXRoaXMub2JqZWN0cyxuPTA7bjxyLmxlbmd0aDsrK24pZT1yW25dLmRyYXdQaWNrKGUpO3QuZW5kKCl9fSxjLnBpY2s9ZnVuY3Rpb24odCxlKXtpZighdGhpcy5zdGF0aWMpe3ZhciByPXRoaXMucGl4ZWxSYXRpbyxuPXRoaXMucGlja1BpeGVsUmF0aW8saT10aGlzLnZpZXdCb3gsYT0wfE1hdGgucm91bmQoKHQtaVswXS9yKSpuKSxvPTB8TWF0aC5yb3VuZCgoZS1pWzFdL3IpKm4pLHM9dGhpcy5waWNrQnVmZmVyLnF1ZXJ5KGEsbyx0aGlzLnBpY2tSYWRpdXMpO2lmKCFzKXJldHVybiBudWxsO2Zvcih2YXIgbD1zLmlkKyhzLnZhbHVlWzBdPDw4KSsocy52YWx1ZVsxXTw8MTYpKyhzLnZhbHVlWzJdPDwyNCksYz10aGlzLm9iamVjdHMsdT0wO3U8Yy5sZW5ndGg7Kyt1KXt2YXIgaD1jW3VdLnBpY2soYSxvLGwpO2lmKGgpcmV0dXJuIGh9cmV0dXJuIG51bGx9fSxjLnNldFNjcmVlbkJveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjcmVlbkJveCxyPXRoaXMucGl4ZWxSYXRpbztlWzBdPTB8TWF0aC5yb3VuZCh0WzBdKnIpLGVbMV09MHxNYXRoLnJvdW5kKHRbMV0qciksZVsyXT0wfE1hdGgucm91bmQodFsyXSpyKSxlWzNdPTB8TWF0aC5yb3VuZCh0WzNdKnIpLHRoaXMuc2V0RGlydHkoKX0sYy5zZXREYXRhQm94PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGF0YUJveDsoZVswXSE9PXRbMF18fGVbMV0hPT10WzFdfHxlWzJdIT09dFsyXXx8ZVszXSE9PXRbM10pJiYoZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLHRoaXMuc2V0RGlydHkoKSl9LGMuc2V0Vmlld0JveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnBpeGVsUmF0aW8scj10aGlzLnZpZXdCb3g7clswXT0wfE1hdGgucm91bmQodFswXSplKSxyWzFdPTB8TWF0aC5yb3VuZCh0WzFdKmUpLHJbMl09MHxNYXRoLnJvdW5kKHRbMl0qZSksclszXT0wfE1hdGgucm91bmQodFszXSplKTt2YXIgbj10aGlzLnBpY2tQaXhlbFJhdGlvO3RoaXMucGlja0J1ZmZlci5zaGFwZT1bMHxNYXRoLnJvdW5kKCh0WzJdLXRbMF0pKm4pLDB8TWF0aC5yb3VuZCgodFszXS10WzFdKSpuKV0sdGhpcy5zZXREaXJ0eSgpfSxjLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7dGhpcy5waXhlbFJhdGlvPXQucGl4ZWxSYXRpb3x8MTt2YXIgcj10aGlzLnBpeGVsUmF0aW87dGhpcy5waWNrUGl4ZWxSYXRpbz1NYXRoLm1heChyLDEpLHRoaXMuc2V0U2NyZWVuQm94KHQuc2NyZWVuQm94fHxbMCwwLGUuZHJhd2luZ0J1ZmZlcldpZHRoL3IsZS5kcmF3aW5nQnVmZmVySGVpZ2h0L3JdKTt0aGlzLnNjcmVlbkJveDt0aGlzLnNldFZpZXdCb3godC52aWV3Qm94fHxbLjEyNSoodGhpcy5zY3JlZW5Cb3hbMl0tdGhpcy5zY3JlZW5Cb3hbMF0pL3IsLjEyNSoodGhpcy5zY3JlZW5Cb3hbM10tdGhpcy5zY3JlZW5Cb3hbMV0pL3IsLjg3NSoodGhpcy5zY3JlZW5Cb3hbMl0tdGhpcy5zY3JlZW5Cb3hbMF0pL3IsLjg3NSoodGhpcy5zY3JlZW5Cb3hbM10tdGhpcy5zY3JlZW5Cb3hbMV0pL3JdKTt2YXIgbj10aGlzLnZpZXdCb3gsaT0oblsyXS1uWzBdKS8oblszXS1uWzFdKTt0aGlzLnNldERhdGFCb3godC5kYXRhQm94fHxbLTEwLC0xMC9pLDEwLDEwL2ldKSx0aGlzLmJvcmRlckNvbG9yPSExIT09dC5ib3JkZXJDb2xvciYmKHQuYm9yZGVyQ29sb3J8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLmJhY2tncm91bmRDb2xvcj0odC5iYWNrZ3JvdW5kQ29sb3J8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lRW5hYmxlPSh0LmdyaWRMaW5lRW5hYmxlfHxbITAsITBdKS5zbGljZSgpLHRoaXMuZ3JpZExpbmVXaWR0aD0odC5ncmlkTGluZVdpZHRofHxbMSwxXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lQ29sb3I9dSh0LmdyaWRMaW5lQ29sb3J8fFtbLjUsLjUsLjUsMV0sWy41LC41LC41LDFdXSksdGhpcy56ZXJvTGluZUVuYWJsZT0odC56ZXJvTGluZUVuYWJsZXx8WyEwLCEwXSkuc2xpY2UoKSx0aGlzLnplcm9MaW5lV2lkdGg9KHQuemVyb0xpbmVXaWR0aHx8WzQsNF0pLnNsaWNlKCksdGhpcy56ZXJvTGluZUNvbG9yPXUodC56ZXJvTGluZUNvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGlja01hcmtMZW5ndGg9KHQudGlja01hcmtMZW5ndGh8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLnRpY2tNYXJrV2lkdGg9KHQudGlja01hcmtXaWR0aHx8WzAsMCwwLDBdKS5zbGljZSgpLHRoaXMudGlja01hcmtDb2xvcj11KHQudGlja01hcmtDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGl0bGVDZW50ZXI9KHQudGl0bGVDZW50ZXJ8fFsuNSooblswXStuWzJdKS9yLChuWzNdKzEyMCkvcl0pLnNsaWNlKCksdGhpcy50aXRsZUVuYWJsZT0hKFwidGl0bGVFbmFibGVcImluIHQmJiF0LnRpdGxlRW5hYmxlKSx0aGlzLnRpdGxlQW5nbGU9dC50aXRsZUFuZ2xlfHwwLHRoaXMudGl0bGVDb2xvcj0odC50aXRsZUNvbG9yfHxbMCwwLDAsMV0pLnNsaWNlKCksdGhpcy5sYWJlbFBhZD0odC5sYWJlbFBhZHx8WzE1LDE1LDE1LDE1XSkuc2xpY2UoKSx0aGlzLmxhYmVsQW5nbGU9KHQubGFiZWxBbmdsZXx8WzAsTWF0aC5QSS8yLDAsMypNYXRoLlBJLzJdKS5zbGljZSgpLHRoaXMubGFiZWxFbmFibGU9KHQubGFiZWxFbmFibGV8fFshMCwhMCwhMCwhMF0pLnNsaWNlKCksdGhpcy5sYWJlbENvbG9yPXUodC5sYWJlbENvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSksdGhpcy50aWNrUGFkPSh0LnRpY2tQYWR8fFsxNSwxNSwxNSwxNV0pLnNsaWNlKCksdGhpcy50aWNrQW5nbGU9KHQudGlja0FuZ2xlfHxbMCwwLDAsMF0pLnNsaWNlKCksdGhpcy50aWNrRW5hYmxlPSh0LnRpY2tFbmFibGV8fFshMCwhMCwhMCwhMF0pLnNsaWNlKCksdGhpcy50aWNrQ29sb3I9dSh0LnRpY2tDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMuYm9yZGVyTGluZUVuYWJsZT0odC5ib3JkZXJMaW5lRW5hYmxlfHxbITAsITAsITAsITBdKS5zbGljZSgpLHRoaXMuYm9yZGVyTGluZVdpZHRoPSh0LmJvcmRlckxpbmVXaWR0aHx8WzIsMiwyLDJdKS5zbGljZSgpLHRoaXMuYm9yZGVyTGluZUNvbG9yPXUodC5ib3JkZXJMaW5lQ29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dKTt2YXIgYT10LnRpY2tzfHxbW10sW11dLG89dGhpcy5fdGlja0JvdW5kcztvWzBdPW9bMV09MS8wLG9bMl09b1szXT0tMS8wO2Zvcih2YXIgcz0wO3M8MjsrK3Mpe3ZhciBsPWFbc10uc2xpY2UoMCk7MCE9PWwubGVuZ3RoJiYobC5zb3J0KGgpLG9bc109TWF0aC5taW4ob1tzXSxsWzBdLngpLG9bcysyXT1NYXRoLm1heChvW3MrMl0sbFtsLmxlbmd0aC0xXS54KSl9dGhpcy5ncmlkLnVwZGF0ZSh7Ym91bmRzOm8sdGlja3M6YX0pLHRoaXMudGV4dC51cGRhdGUoe2JvdW5kczpvLHRpY2tzOmEsbGFiZWxzOnQubGFiZWxzfHxbXCJ4XCIsXCJ5XCJdLGxhYmVsU2l6ZTp0LmxhYmVsU2l6ZXx8WzEyLDEyXSxsYWJlbEZvbnQ6dC5sYWJlbEZvbnR8fFtcInNhbnMtc2VyaWZcIixcInNhbnMtc2VyaWZcIl0sdGl0bGU6dC50aXRsZXx8XCJcIix0aXRsZVNpemU6dC50aXRsZVNpemV8fDE4LHRpdGxlRm9udDp0LnRpdGxlRm9udHx8XCJzYW5zLXNlcmlmXCJ9KSx0aGlzLnN0YXRpYz0hIXQuc3RhdGljLHRoaXMuc2V0RGlydHkoKX0sYy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5ib3guZGlzcG9zZSgpLHRoaXMuZ3JpZC5kaXNwb3NlKCksdGhpcy50ZXh0LmRpc3Bvc2UoKSx0aGlzLmxpbmUuZGlzcG9zZSgpO2Zvcih2YXIgdD10aGlzLm9iamVjdHMubGVuZ3RoLTE7dD49MDstLXQpdGhpcy5vYmplY3RzW3RdLmRpc3Bvc2UoKTt0aGlzLm9iamVjdHMubGVuZ3RoPTA7Zm9yKHQ9dGhpcy5vdmVybGF5cy5sZW5ndGgtMTt0Pj0wOy0tdCl0aGlzLm92ZXJsYXlzW3RdLmRpc3Bvc2UoKTt0aGlzLm92ZXJsYXlzLmxlbmd0aD0wLHRoaXMuZ2w9bnVsbH0sYy5hZGRPYmplY3Q9ZnVuY3Rpb24odCl7dGhpcy5vYmplY3RzLmluZGV4T2YodCk8MCYmKHRoaXMub2JqZWN0cy5wdXNoKHQpLHRoaXMuc2V0RGlydHkoKSl9LGMucmVtb3ZlT2JqZWN0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLm9iamVjdHMscj0wO3I8ZS5sZW5ndGg7KytyKWlmKGVbcl09PT10KXtlLnNwbGljZShyLDEpLHRoaXMuc2V0RGlydHkoKTticmVha319LGMuYWRkT3ZlcmxheT1mdW5jdGlvbih0KXt0aGlzLm92ZXJsYXlzLmluZGV4T2YodCk8MCYmKHRoaXMub3ZlcmxheXMucHVzaCh0KSx0aGlzLnNldE92ZXJsYXlEaXJ0eSgpKX0sYy5yZW1vdmVPdmVybGF5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLm92ZXJsYXlzLHI9MDtyPGUubGVuZ3RoOysrcilpZihlW3JdPT09dCl7ZS5zcGxpY2UociwxKSx0aGlzLnNldE92ZXJsYXlEaXJ0eSgpO2JyZWFrfX19LHtcIi4vbGliL2JveFwiOjI3OCxcIi4vbGliL2dyaWRcIjoyNzksXCIuL2xpYi9saW5lXCI6MjgwLFwiLi9saWIvdGV4dFwiOjI4MixcImdsLXNlbGVjdC1zdGF0aWNcIjoyOTd9XSwyODU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0PXR8fGRvY3VtZW50LmJvZHksZT1lfHx7fTt2YXIgcj1bLjAxLDEvMF07XCJkaXN0YW5jZUxpbWl0c1wiaW4gZSYmKHJbMF09ZS5kaXN0YW5jZUxpbWl0c1swXSxyWzFdPWUuZGlzdGFuY2VMaW1pdHNbMV0pO1wiem9vbU1pblwiaW4gZSYmKHJbMF09ZS56b29tTWluKTtcInpvb21NYXhcImluIGUmJihyWzFdPWUuem9vbU1heCk7dmFyIGM9aSh7Y2VudGVyOmUuY2VudGVyfHxbMCwwLDBdLHVwOmUudXB8fFswLDEsMF0sZXllOmUuZXllfHxbMCwwLDEwXSxtb2RlOmUubW9kZXx8XCJvcmJpdFwiLGRpc3RhbmNlTGltaXRzOnJ9KSx1PVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXSxoPTAsZj10LmNsaWVudFdpZHRoLHA9dC5jbGllbnRIZWlnaHQsZD17a2V5QmluZGluZ01vZGU6XCJyb3RhdGVcIixlbmFibGVXaGVlbDohMCx2aWV3OmMsZWxlbWVudDp0LGRlbGF5OmUuZGVsYXl8fDE2LHJvdGF0ZVNwZWVkOmUucm90YXRlU3BlZWR8fDEsem9vbVNwZWVkOmUuem9vbVNwZWVkfHwxLHRyYW5zbGF0ZVNwZWVkOmUudHJhbnNsYXRlU3BlZWR8fDEsZmxpcFg6ISFlLmZsaXBYLGZsaXBZOiEhZS5mbGlwWSxtb2RlczpjLm1vZGVzLF9vcnRobzplLl9vcnRob3x8ZS5wcm9qZWN0aW9uJiZcIm9ydGhvZ3JhcGhpY1wiPT09ZS5wcm9qZWN0aW9uLnR5cGV8fCExLHRpY2s6ZnVuY3Rpb24oKXt2YXIgZT1uKCkscj10aGlzLmRlbGF5LGk9ZS0yKnI7Yy5pZGxlKGUtciksYy5yZWNhbGNNYXRyaXgoaSksYy5mbHVzaChlLSgxMDArMipyKSk7Zm9yKHZhciBhPSEwLG89Yy5jb21wdXRlZE1hdHJpeCxzPTA7czwxNjsrK3MpYT1hJiZ1W3NdPT09b1tzXSx1W3NdPW9bc107dmFyIGw9dC5jbGllbnRXaWR0aD09PWYmJnQuY2xpZW50SGVpZ2h0PT09cDtyZXR1cm4gZj10LmNsaWVudFdpZHRoLHA9dC5jbGllbnRIZWlnaHQsYT8hbDooaD1NYXRoLmV4cChjLmNvbXB1dGVkUmFkaXVzWzBdKSwhMCl9LGxvb2tBdDpmdW5jdGlvbih0LGUscil7Yy5sb29rQXQoYy5sYXN0VCgpLHQsZSxyKX0scm90YXRlOmZ1bmN0aW9uKHQsZSxyKXtjLnJvdGF0ZShjLmxhc3RUKCksdCxlLHIpfSxwYW46ZnVuY3Rpb24odCxlLHIpe2MucGFuKGMubGFzdFQoKSx0LGUscil9LHRyYW5zbGF0ZTpmdW5jdGlvbih0LGUscil7Yy50cmFuc2xhdGUoYy5sYXN0VCgpLHQsZSxyKX19O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhkLHttYXRyaXg6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmNvbXB1dGVkTWF0cml4fSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGMuc2V0TWF0cml4KGMubGFzdFQoKSx0KSxjLmNvbXB1dGVkTWF0cml4fSxlbnVtZXJhYmxlOiEwfSxtb2RlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5nZXRNb2RlKCl9LHNldDpmdW5jdGlvbih0KXt2YXIgZT1jLmNvbXB1dGVkVXAuc2xpY2UoKSxyPWMuY29tcHV0ZWRFeWUuc2xpY2UoKSxpPWMuY29tcHV0ZWRDZW50ZXIuc2xpY2UoKTtpZihjLnNldE1vZGUodCksXCJ0dXJudGFibGVcIj09PXQpe3ZhciBhPW4oKTtjLl9hY3RpdmUubG9va0F0KGEscixpLGUpLGMuX2FjdGl2ZS5sb29rQXQoYSs1MDAscixpLFswLDAsMV0pLGMuX2FjdGl2ZS5mbHVzaChhKX1yZXR1cm4gYy5nZXRNb2RlKCl9LGVudW1lcmFibGU6ITB9LGNlbnRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuY29tcHV0ZWRDZW50ZXJ9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5sb29rQXQoYy5sYXN0VCgpLG51bGwsdCksYy5jb21wdXRlZENlbnRlcn0sZW51bWVyYWJsZTohMH0sZXllOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5jb21wdXRlZEV5ZX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLmxvb2tBdChjLmxhc3RUKCksdCksYy5jb21wdXRlZEV5ZX0sZW51bWVyYWJsZTohMH0sdXA6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmNvbXB1dGVkVXB9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5sb29rQXQoYy5sYXN0VCgpLG51bGwsbnVsbCx0KSxjLmNvbXB1dGVkVXB9LGVudW1lcmFibGU6ITB9LGRpc3RhbmNlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaH0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLnNldERpc3RhbmNlKGMubGFzdFQoKSx0KSx0fSxlbnVtZXJhYmxlOiEwfSxkaXN0YW5jZUxpbWl0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuZ2V0RGlzdGFuY2VMaW1pdHMocil9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5zZXREaXN0YW5jZUxpbWl0cyh0KSx0fSxlbnVtZXJhYmxlOiEwfX0pLHQuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldmVudERlZmF1bHQoKSwhMX0pLGQuX2xhc3RYPS0xLGQuX2xhc3RZPS0xLGQuX2xhc3RNb2RzPXtzaGlmdDohMSxjb250cm9sOiExLGFsdDohMSxtZXRhOiExfSxkLmVuYWJsZU1vdXNlTGlzdGVuZXJzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHIsaSxhKXt2YXIgbz1kLmtleUJpbmRpbmdNb2RlO2lmKCExIT09byl7dmFyIHM9XCJyb3RhdGVcIj09PW8sbD1cInBhblwiPT09byx1PVwiem9vbVwiPT09byxmPSEhYS5jb250cm9sLHA9ISFhLmFsdCxnPSEhYS5zaGlmdCx2PSEhKDEmZSksbT0hISgyJmUpLHk9ISEoNCZlKSx4PTEvdC5jbGllbnRIZWlnaHQsYj14KihyLWQuX2xhc3RYKSxfPXgqKGktZC5fbGFzdFkpLHc9ZC5mbGlwWD8xOi0xLGs9ZC5mbGlwWT8xOi0xLEE9TWF0aC5QSSpkLnJvdGF0ZVNwZWVkLFQ9bigpO2lmKC0xIT09ZC5fbGFzdFgmJi0xIT09ZC5fbGFzdFkmJigocyYmdiYmIWYmJiFwJiYhZ3x8diYmIWYmJiFwJiZnKSYmYy5yb3RhdGUoVCx3KkEqYiwtaypBKl8sMCksKGwmJnYmJiFmJiYhcCYmIWd8fG18fHYmJmYmJiFwJiYhZykmJmMucGFuKFQsLWQudHJhbnNsYXRlU3BlZWQqYipoLGQudHJhbnNsYXRlU3BlZWQqXypoLDApLHUmJnYmJiFmJiYhcCYmIWd8fHl8fHYmJiFmJiZwJiYhZykpe3ZhciBNPS1kLnpvb21TcGVlZCpfL3dpbmRvdy5pbm5lckhlaWdodCooVC1jLmxhc3RUKCkpKjEwMDtjLnBhbihULDAsMCxoKihNYXRoLmV4cChNKS0xKSl9cmV0dXJuIGQuX2xhc3RYPXIsZC5fbGFzdFk9aSxkLl9sYXN0TW9kcz1hLCEwfX1kLm1vdXNlTGlzdGVuZXI9YSh0LGUpLHQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIixmdW5jdGlvbihyKXt2YXIgbj1zKHIuY2hhbmdlZFRvdWNoZXNbMF0sdCk7ZSgwLG5bMF0sblsxXSxkLl9sYXN0TW9kcyksZSgxLG5bMF0sblsxXSxkLl9sYXN0TW9kcyksci5wcmV2ZW50RGVmYXVsdCgpfSwhIWwmJntwYXNzaXZlOiExfSksdC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsZnVuY3Rpb24ocil7dmFyIG49cyhyLmNoYW5nZWRUb3VjaGVzWzBdLHQpO2UoMSxuWzBdLG5bMV0sZC5fbGFzdE1vZHMpLHIucHJldmVudERlZmF1bHQoKX0sISFsJiZ7cGFzc2l2ZTohMX0pLHQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsZnVuY3Rpb24odCl7ZSgwLGQuX2xhc3RYLGQuX2xhc3RZLGQuX2xhc3RNb2RzKSx0LnByZXZlbnREZWZhdWx0KCl9LCEhbCYme3Bhc3NpdmU6ITF9KSxkLndoZWVsTGlzdGVuZXI9byh0LGZ1bmN0aW9uKHQsZSl7aWYoITEhPT1kLmtleUJpbmRpbmdNb2RlJiZkLmVuYWJsZVdoZWVsKXt2YXIgcj1kLmZsaXBYPzE6LTEsaT1kLmZsaXBZPzE6LTEsYT1uKCk7aWYoTWF0aC5hYnModCk+TWF0aC5hYnMoZSkpYy5yb3RhdGUoYSwwLDAsLXQqcipNYXRoLlBJKmQucm90YXRlU3BlZWQvd2luZG93LmlubmVyV2lkdGgpO2Vsc2UgaWYoIWQuX29ydGhvKXt2YXIgbz0tZC56b29tU3BlZWQqaSplL3dpbmRvdy5pbm5lckhlaWdodCooYS1jLmxhc3RUKCkpLzIwO2MucGFuKGEsMCwwLGgqKE1hdGguZXhwKG8pLTEpKX19fSwhMCl9LGQuZW5hYmxlTW91c2VMaXN0ZW5lcnMoKSxkfTt2YXIgbj10KFwicmlnaHQtbm93XCIpLGk9dChcIjNkLXZpZXdcIiksYT10KFwibW91c2UtY2hhbmdlXCIpLG89dChcIm1vdXNlLXdoZWVsXCIpLHM9dChcIm1vdXNlLWV2ZW50LW9mZnNldFwiKSxsPXQoXCJoYXMtcGFzc2l2ZS1ldmVudHNcIil9LHtcIjNkLXZpZXdcIjo0OCxcImhhcy1wYXNzaXZlLWV2ZW50c1wiOjQwNCxcIm1vdXNlLWNoYW5nZVwiOjQyOCxcIm1vdXNlLWV2ZW50LW9mZnNldFwiOjQyOSxcIm1vdXNlLXdoZWVsXCI6NDMxLFwicmlnaHQtbm93XCI6NDg5fV0sMjg2OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcImdsc2xpZnlcIiksaT10KFwiZ2wtc2hhZGVyXCIpLGE9bihbXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xcbnZhcnlpbmcgdmVjMiB1djtcXG52b2lkIG1haW4oKSB7XFxuICB1diA9IHBvc2l0aW9uO1xcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLCAxKTtcXG59XCJdKSxvPW4oW1wicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCBhY2N1bUJ1ZmZlcjtcXG52YXJ5aW5nIHZlYzIgdXY7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgdmVjNCBhY2N1bSA9IHRleHR1cmUyRChhY2N1bUJ1ZmZlciwgMC41ICogKHV2ICsgMS4wKSk7XFxuICBnbF9GcmFnQ29sb3IgPSBtaW4odmVjNCgxLDEsMSwxKSwgYWNjdW0pO1xcbn1cIl0pO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZTpcInBvc2l0aW9uXCIsdHlwZTpcInZlYzJcIn1dKX19LHtcImdsLXNoYWRlclwiOjI5OCxnbHNsaWZ5OjQwMn1dLDI4NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2NhbWVyYS5qc1wiKSxpPXQoXCJnbC1heGVzM2RcIiksYT10KFwiZ2wtYXhlczNkL3Byb3BlcnRpZXNcIiksbz10KFwiZ2wtc3Bpa2VzM2RcIikscz10KFwiZ2wtc2VsZWN0LXN0YXRpY1wiKSxsPXQoXCJnbC1mYm9cIiksYz10KFwiYS1iaWctdHJpYW5nbGVcIiksdT10KFwibW91c2UtY2hhbmdlXCIpLGg9dChcIm1vdXNlLXdoZWVsXCIpLGY9dChcImdsLW1hdDQvcGVyc3BlY3RpdmVcIikscD10KFwiZ2wtbWF0NC9vcnRob1wiKSxkPXQoXCIuL2xpYi9zaGFkZXJcIiksZz10KFwiaXMtbW9iaWxlXCIpKHt0YWJsZXQ6ITB9KTtmdW5jdGlvbiB2KCl7dGhpcy5tb3VzZT1bLTEsLTFdLHRoaXMuc2NyZWVuPW51bGwsdGhpcy5kaXN0YW5jZT0xLzAsdGhpcy5pbmRleD1udWxsLHRoaXMuZGF0YUNvb3JkaW5hdGU9bnVsbCx0aGlzLmRhdGFQb3NpdGlvbj1udWxsLHRoaXMub2JqZWN0PW51bGwsdGhpcy5kYXRhPW51bGx9ZnVuY3Rpb24gbSh0KXt2YXIgZT1NYXRoLnJvdW5kKE1hdGgubG9nKE1hdGguYWJzKHQpKS9NYXRoLmxvZygxMCkpO2lmKGU8MCl7dmFyIHI9TWF0aC5yb3VuZChNYXRoLnBvdygxMCwtZSkpO3JldHVybiBNYXRoLmNlaWwodCpyKS9yfWlmKGU+MCl7cj1NYXRoLnJvdW5kKE1hdGgucG93KDEwLGUpKTtyZXR1cm4gTWF0aC5jZWlsKHQvcikqcn1yZXR1cm4gTWF0aC5jZWlsKHQpfWZ1bmN0aW9uIHkodCl7cmV0dXJuXCJib29sZWFuXCIhPXR5cGVvZiB0fHx0fWUuZXhwb3J0cz17Y3JlYXRlU2NlbmU6ZnVuY3Rpb24odCl7KHQ9dHx8e30pLmNhbWVyYT10LmNhbWVyYXx8e307dmFyIGU9dC5jYW52YXM7aWYoIWUpaWYoZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLHQuY29udGFpbmVyKXt2YXIgcj10LmNvbnRhaW5lcjtyLmFwcGVuZENoaWxkKGUpfWVsc2UgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKTt2YXIgeD10LmdsO3h8fCh4PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bnVsbDt0cnl7KHI9dC5nZXRDb250ZXh0KFwid2ViZ2xcIixlKSl8fChyPXQuZ2V0Q29udGV4dChcImV4cGVyaW1lbnRhbC13ZWJnbFwiLGUpKX1jYXRjaCh0KXtyZXR1cm4gbnVsbH1yZXR1cm4gcn0oZSx0LmdsT3B0aW9uc3x8e3ByZW11bHRpcGxpZWRBbHBoYTohMCxhbnRpYWxpYXM6ITAscHJlc2VydmVEcmF3aW5nQnVmZmVyOmd9KSk7aWYoIXgpdGhyb3cgbmV3IEVycm9yKFwid2ViZ2wgbm90IHN1cHBvcnRlZFwiKTt2YXIgYj10LmJvdW5kc3x8W1stMTAsLTEwLC0xMF0sWzEwLDEwLDEwXV0sXz1uZXcgdix3PWwoeCxbeC5kcmF3aW5nQnVmZmVyV2lkdGgseC5kcmF3aW5nQnVmZmVySGVpZ2h0XSx7cHJlZmVyRmxvYXQ6IWd9KSxrPWQoeCksQT10LmNhbWVyYU9iamVjdCYmITA9PT10LmNhbWVyYU9iamVjdC5fb3J0aG98fHQuY2FtZXJhLnByb2plY3Rpb24mJlwib3J0aG9ncmFwaGljXCI9PT10LmNhbWVyYS5wcm9qZWN0aW9uLnR5cGV8fCExLFQ9e2V5ZTp0LmNhbWVyYS5leWV8fFsyLDAsMF0sY2VudGVyOnQuY2FtZXJhLmNlbnRlcnx8WzAsMCwwXSx1cDp0LmNhbWVyYS51cHx8WzAsMSwwXSx6b29tTWluOnQuY2FtZXJhLnpvb21NYXh8fC4xLHpvb21NYXg6dC5jYW1lcmEuem9vbU1pbnx8MTAwLG1vZGU6dC5jYW1lcmEubW9kZXx8XCJ0dXJudGFibGVcIixfb3J0aG86QX0sTT10LmF4ZXN8fHt9LFM9aSh4LE0pO1MuZW5hYmxlPSFNLmRpc2FibGU7dmFyIEU9dC5zcGlrZXN8fHt9LEM9byh4LEUpLEw9W10sej1bXSxPPVtdLEk9W10sRD0hMCxQPSEwLFI9bmV3IEFycmF5KDE2KSxGPW5ldyBBcnJheSgxNiksQj17dmlldzpudWxsLHByb2plY3Rpb246Uixtb2RlbDpGLF9vcnRobzohMX0sUD0hMCxOPVt4LmRyYXdpbmdCdWZmZXJXaWR0aCx4LmRyYXdpbmdCdWZmZXJIZWlnaHRdLGo9dC5jYW1lcmFPYmplY3R8fG4oZSxUKSxWPXtnbDp4LGNvbnRleHRMb3N0OiExLHBpeGVsUmF0aW86dC5waXhlbFJhdGlvfHwxLGNhbnZhczplLHNlbGVjdGlvbjpfLGNhbWVyYTpqLGF4ZXM6UyxheGVzUGl4ZWxzOm51bGwsc3Bpa2VzOkMsYm91bmRzOmIsb2JqZWN0czpMLHNoYXBlOk4sYXNwZWN0OnQuYXNwZWN0UmF0aW98fFsxLDEsMV0scGlja1JhZGl1czp0LnBpY2tSYWRpdXN8fDEwLHpOZWFyOnQuek5lYXJ8fC4wMSx6RmFyOnQuekZhcnx8MWUzLGZvdnk6dC5mb3Z5fHxNYXRoLlBJLzQsY2xlYXJDb2xvcjp0LmNsZWFyQ29sb3J8fFswLDAsMCwwXSxhdXRvUmVzaXplOnkodC5hdXRvUmVzaXplKSxhdXRvQm91bmRzOnkodC5hdXRvQm91bmRzKSxhdXRvU2NhbGU6ISF0LmF1dG9TY2FsZSxhdXRvQ2VudGVyOnkodC5hdXRvQ2VudGVyKSxjbGlwVG9Cb3VuZHM6eSh0LmNsaXBUb0JvdW5kcyksc25hcFRvRGF0YTohIXQuc25hcFRvRGF0YSxvbnNlbGVjdDp0Lm9uc2VsZWN0fHxudWxsLG9ucmVuZGVyOnQub25yZW5kZXJ8fG51bGwsb25jbGljazp0Lm9uY2xpY2t8fG51bGwsY2FtZXJhUGFyYW1zOkIsb25jb250ZXh0bG9zczpudWxsLG1vdXNlTGlzdGVuZXI6bnVsbCxfc3RvcHBlZDohMX0sVT1beC5kcmF3aW5nQnVmZmVyV2lkdGgvVi5waXhlbFJhdGlvfDAseC5kcmF3aW5nQnVmZmVySGVpZ2h0L1YucGl4ZWxSYXRpb3wwXTtmdW5jdGlvbiBxKCl7aWYoIVYuX3N0b3BwZWQmJlYuYXV0b1Jlc2l6ZSl7dmFyIHQ9ZS5wYXJlbnROb2RlLHI9MSxuPTE7dCYmdCE9PWRvY3VtZW50LmJvZHk/KHI9dC5jbGllbnRXaWR0aCxuPXQuY2xpZW50SGVpZ2h0KToocj13aW5kb3cuaW5uZXJXaWR0aCxuPXdpbmRvdy5pbm5lckhlaWdodCk7dmFyIGk9MHxNYXRoLmNlaWwocipWLnBpeGVsUmF0aW8pLGE9MHxNYXRoLmNlaWwobipWLnBpeGVsUmF0aW8pO2lmKGkhPT1lLndpZHRofHxhIT09ZS5oZWlnaHQpe2Uud2lkdGg9aSxlLmhlaWdodD1hO3ZhciBvPWUuc3R5bGU7by5wb3NpdGlvbj1vLnBvc2l0aW9ufHxcImFic29sdXRlXCIsby5sZWZ0PVwiMHB4XCIsby50b3A9XCIwcHhcIixvLndpZHRoPXIrXCJweFwiLG8uaGVpZ2h0PW4rXCJweFwiLEQ9ITB9fX1WLmF1dG9SZXNpemUmJnEoKTtmdW5jdGlvbiBIKCl7Zm9yKHZhciB0PUwubGVuZ3RoLGU9SS5sZW5ndGgscj0wO3I8ZTsrK3IpT1tyXT0wO3Q6Zm9yKHZhciByPTA7cjx0Oysrcil7dmFyIG49TFtyXSxpPW4ucGlja1Nsb3RzO2lmKGkpe2Zvcih2YXIgYT0wO2E8ZTsrK2EpaWYoT1thXStpPDI1NSl7eltyXT1hLG4uc2V0UGlja0Jhc2UoT1thXSsxKSxPW2FdKz1pO2NvbnRpbnVlIHR9dmFyIG89cyh4LE4pO3pbcl09ZSxJLnB1c2gobyksTy5wdXNoKGkpLG4uc2V0UGlja0Jhc2UoMSksZSs9MX1lbHNlIHpbcl09LTF9Zm9yKDtlPjAmJjA9PT1PW2UtMV07KU8ucG9wKCksSS5wb3AoKS5kaXNwb3NlKCl9ZnVuY3Rpb24gRygpe2lmKFYuY29udGV4dExvc3QpcmV0dXJuITA7eC5pc0NvbnRleHRMb3N0KCkmJihWLmNvbnRleHRMb3N0PSEwLFYubW91c2VMaXN0ZW5lci5lbmFibGVkPSExLFYuc2VsZWN0aW9uLm9iamVjdD1udWxsLFYub25jb250ZXh0bG9zcyYmVi5vbmNvbnRleHRsb3NzKCkpfXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIscSksVi51cGRhdGU9ZnVuY3Rpb24odCl7Vi5fc3RvcHBlZHx8KHQ9dHx8e30sRD0hMCxQPSEwKX0sVi5hZGQ9ZnVuY3Rpb24odCl7Vi5fc3RvcHBlZHx8KHQuYXhlcz1TLEwucHVzaCh0KSx6LnB1c2goLTEpLEQ9ITAsUD0hMCxIKCkpfSxWLnJlbW92ZT1mdW5jdGlvbih0KXtpZighVi5fc3RvcHBlZCl7dmFyIGU9TC5pbmRleE9mKHQpO2U8MHx8KEwuc3BsaWNlKGUsMSksei5wb3AoKSxEPSEwLFA9ITAsSCgpKX19LFYuZGlzcG9zZT1mdW5jdGlvbigpe2lmKCFWLl9zdG9wcGVkJiYoVi5fc3RvcHBlZD0hMCx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHEpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndlYmdsY29udGV4dGxvc3RcIixHKSxWLm1vdXNlTGlzdGVuZXIuZW5hYmxlZD0hMSwhVi5jb250ZXh0TG9zdCkpe1MuZGlzcG9zZSgpLEMuZGlzcG9zZSgpO2Zvcih2YXIgdD0wO3Q8TC5sZW5ndGg7Kyt0KUxbdF0uZGlzcG9zZSgpO3cuZGlzcG9zZSgpO2Zvcih2YXIgdD0wO3Q8SS5sZW5ndGg7Kyt0KUlbdF0uZGlzcG9zZSgpO2suZGlzcG9zZSgpLHg9bnVsbCxTPW51bGwsQz1udWxsLEw9W119fSxWLndoZWVsTGlzdGVuZXI9aChlLGZ1bmN0aW9uKHQsZSl7aWYoITEhPT1qLmtleUJpbmRpbmdNb2RlJiZqLmVuYWJsZVdoZWVsJiZqLl9vcnRobyl7dmFyIHI9dD5lPzEuMToxLzEuMTtWLmFzcGVjdFswXSo9cixWLmFzcGVjdFsxXSo9cixWLmFzcGVjdFsyXSo9cixWLnJlZHJhdygpfX0sITApLFYuX21vdXNlUm90YXRpbmc9ITEsVi5fcHJldkJ1dHRvbnM9MCxWLmVuYWJsZU1vdXNlTGlzdGVuZXJzPWZ1bmN0aW9uKCl7Vi5tb3VzZUxpc3RlbmVyPXUoZSxmdW5jdGlvbih0LGUscil7aWYoIVYuX3N0b3BwZWQpe3ZhciBuPUkubGVuZ3RoLGk9TC5sZW5ndGgsYT1fLm9iamVjdDtfLmRpc3RhbmNlPTEvMCxfLm1vdXNlWzBdPWUsXy5tb3VzZVsxXT1yLF8ub2JqZWN0PW51bGwsXy5zY3JlZW49bnVsbCxfLmRhdGFDb29yZGluYXRlPV8uZGF0YVBvc2l0aW9uPW51bGw7dmFyIG89ITE7aWYodCYmVi5fcHJldkJ1dHRvbnMpVi5fbW91c2VSb3RhdGluZz0hMDtlbHNle1YuX21vdXNlUm90YXRpbmcmJihQPSEwKSxWLl9tb3VzZVJvdGF0aW5nPSExO2Zvcih2YXIgcz0wO3M8bjsrK3Mpe3ZhciBsPUlbc10ucXVlcnkoZSxVWzFdLXItMSxWLnBpY2tSYWRpdXMpO2lmKGwpe2lmKGwuZGlzdGFuY2U+Xy5kaXN0YW5jZSljb250aW51ZTtmb3IodmFyIGM9MDtjPGk7KytjKXt2YXIgdT1MW2NdO2lmKHpbY109PT1zKXt2YXIgaD11LnBpY2sobCk7aCYmKF8uYnV0dG9ucz10LF8uc2NyZWVuPWwuY29vcmQsXy5kaXN0YW5jZT1sLmRpc3RhbmNlLF8ub2JqZWN0PXUsXy5pbmRleD1oLmRpc3RhbmNlLF8uZGF0YVBvc2l0aW9uPWgucG9zaXRpb24sXy5kYXRhQ29vcmRpbmF0ZT1oLmRhdGFDb29yZGluYXRlLF8uZGF0YT1oLG89ITApfX19fX1hJiZhIT09Xy5vYmplY3QmJihhLmhpZ2hsaWdodCYmYS5oaWdobGlnaHQobnVsbCksRD0hMCksXy5vYmplY3QmJihfLm9iamVjdC5oaWdobGlnaHQmJl8ub2JqZWN0LmhpZ2hsaWdodChfLmRhdGEpLEQ9ITApLChvPW98fF8ub2JqZWN0IT09YSkmJlYub25zZWxlY3QmJlYub25zZWxlY3QoXyksMSZ0JiYhKDEmVi5fcHJldkJ1dHRvbnMpJiZWLm9uY2xpY2smJlYub25jbGljayhfKSxWLl9wcmV2QnV0dG9ucz10fX0pfSxlLmFkZEV2ZW50TGlzdGVuZXIoXCJ3ZWJnbGNvbnRleHRsb3N0XCIsRyk7dmFyIFk9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sVz1bWVswXS5zbGljZSgpLFlbMV0uc2xpY2UoKV07ZnVuY3Rpb24gWCgpe2lmKCFHKCkpe3EoKTt2YXIgdD1WLmNhbWVyYS50aWNrKCk7Qi52aWV3PVYuY2FtZXJhLm1hdHJpeCxEPUR8fHQsUD1QfHx0LFMucGl4ZWxSYXRpbz1WLnBpeGVsUmF0aW8sQy5waXhlbFJhdGlvPVYucGl4ZWxSYXRpbzt2YXIgZT1MLmxlbmd0aCxyPVlbMF0sbj1ZWzFdO3JbMF09clsxXT1yWzJdPTEvMCxuWzBdPW5bMV09blsyXT0tMS8wO2Zvcih2YXIgaT0wO2k8ZTsrK2kpe3ZhciBvPUxbaV07by5waXhlbFJhdGlvPVYucGl4ZWxSYXRpbyxvLmF4ZXM9Vi5heGVzLEQ9RHx8ISFvLmRpcnR5LFA9UHx8ISFvLmRpcnR5O3ZhciBzPW8uYm91bmRzO2lmKHMpZm9yKHZhciBsPXNbMF0sdT1zWzFdLGg9MDtoPDM7KytoKXJbaF09TWF0aC5taW4ocltoXSxsW2hdKSxuW2hdPU1hdGgubWF4KG5baF0sdVtoXSl9dmFyIGQ9Vi5ib3VuZHM7aWYoVi5hdXRvQm91bmRzKWZvcih2YXIgaD0wO2g8MzsrK2gpe2lmKG5baF08cltoXSlyW2hdPS0xLG5baF09MTtlbHNle3JbaF09PT1uW2hdJiYocltoXS09MSxuW2hdKz0xKTt2YXIgZz0uMDUqKG5baF0tcltoXSk7cltoXT1yW2hdLWcsbltoXT1uW2hdK2d9ZFswXVtoXT1yW2hdLGRbMV1baF09bltoXX1mb3IodmFyIHY9ITEsaD0wO2g8MzsrK2gpdj12fHxXWzBdW2hdIT09ZFswXVtoXXx8V1sxXVtoXSE9PWRbMV1baF0sV1swXVtoXT1kWzBdW2hdLFdbMV1baF09ZFsxXVtoXTtpZihQPVB8fHYsRD1EfHx2KXtpZih2KXtmb3IodmFyIHk9WzAsMCwwXSxpPTA7aTwzOysraSl5W2ldPW0oKGRbMV1baV0tZFswXVtpXSkvMTApO1MuYXV0b1RpY2tzP1MudXBkYXRlKHtib3VuZHM6ZCx0aWNrU3BhY2luZzp5fSk6Uy51cGRhdGUoe2JvdW5kczpkfSl9dmFyIGI9eC5kcmF3aW5nQnVmZmVyV2lkdGgsVD14LmRyYXdpbmdCdWZmZXJIZWlnaHQ7TlswXT1iLE5bMV09VCxVWzBdPTB8TWF0aC5tYXgoYi9WLnBpeGVsUmF0aW8sMSksVVsxXT0wfE1hdGgubWF4KFQvVi5waXhlbFJhdGlvLDEpLEE/KHAoUiwtYi9ULGIvVCwtMSwxLFYuek5lYXIsVi56RmFyKSxCLl9vcnRobz0hMCk6KGYoUixWLmZvdnksYi9ULFYuek5lYXIsVi56RmFyKSxCLl9vcnRobz0hMSk7Zm9yKHZhciBpPTA7aTwxNjsrK2kpRltpXT0wO0ZbMTVdPTE7Zm9yKHZhciBNPTAsaT0wO2k8MzsrK2kpTT1NYXRoLm1heChNLGRbMV1baV0tZFswXVtpXSk7Zm9yKHZhciBpPTA7aTwzOysraSlWLmF1dG9TY2FsZT9GWzUqaV09Vi5hc3BlY3RbaV0vKGRbMV1baV0tZFswXVtpXSk6Rls1KmldPTEvTSxWLmF1dG9DZW50ZXImJihGWzEyK2ldPS41Ki1GWzUqaV0qKGRbMF1baV0rZFsxXVtpXSkpO2Zvcih2YXIgaT0wO2k8ZTsrK2kpe3ZhciBvPUxbaV07by5heGVzQm91bmRzPWQsVi5jbGlwVG9Cb3VuZHMmJihvLmNsaXBCb3VuZHM9ZCl9Xy5vYmplY3QmJihWLnNuYXBUb0RhdGE/Qy5wb3NpdGlvbj1fLmRhdGFDb29yZGluYXRlOkMucG9zaXRpb249Xy5kYXRhUG9zaXRpb24sQy5ib3VuZHM9ZCksUCYmKFA9ITEsZnVuY3Rpb24oKXtpZihHKCkpcmV0dXJuO3guY29sb3JNYXNrKCEwLCEwLCEwLCEwKSx4LmRlcHRoTWFzayghMCkseC5kaXNhYmxlKHguQkxFTkQpLHguZW5hYmxlKHguREVQVEhfVEVTVCk7Zm9yKHZhciB0PUwubGVuZ3RoLGU9SS5sZW5ndGgscj0wO3I8ZTsrK3Ipe3ZhciBuPUlbcl07bi5zaGFwZT1VLG4uYmVnaW4oKTtmb3IodmFyIGk9MDtpPHQ7KytpKWlmKHpbaV09PT1yKXt2YXIgYT1MW2ldO2EuZHJhd1BpY2smJihhLnBpeGVsUmF0aW89MSxhLmRyYXdQaWNrKEIpKX1uLmVuZCgpfX0oKSksVi5heGVzUGl4ZWxzPWEoVi5heGVzLEIsYixUKSxWLm9ucmVuZGVyJiZWLm9ucmVuZGVyKCkseC5iaW5kRnJhbWVidWZmZXIoeC5GUkFNRUJVRkZFUixudWxsKSx4LnZpZXdwb3J0KDAsMCxiLFQpO3ZhciBFPVYuY2xlYXJDb2xvcjt4LmNsZWFyQ29sb3IoRVswXSxFWzFdLEVbMl0sRVszXSkseC5jbGVhcih4LkNPTE9SX0JVRkZFUl9CSVR8eC5ERVBUSF9CVUZGRVJfQklUKSx4LmRlcHRoTWFzayghMCkseC5jb2xvck1hc2soITAsITAsITAsITApLHguZW5hYmxlKHguREVQVEhfVEVTVCkseC5kZXB0aEZ1bmMoeC5MRVFVQUwpLHguZGlzYWJsZSh4LkJMRU5EKSx4LmRpc2FibGUoeC5DVUxMX0ZBQ0UpO3ZhciBPPSExO1MuZW5hYmxlJiYoTz1PfHxTLmlzVHJhbnNwYXJlbnQoKSxTLmRyYXcoQikpLEMuYXhlcz1TLF8ub2JqZWN0JiZDLmRyYXcoQikseC5kaXNhYmxlKHguQ1VMTF9GQUNFKTtmb3IodmFyIGk9MDtpPGU7KytpKXt2YXIgbz1MW2ldO28uYXhlcz1TLG8ucGl4ZWxSYXRpbz1WLnBpeGVsUmF0aW8sby5pc09wYXF1ZSYmby5pc09wYXF1ZSgpJiZvLmRyYXcoQiksby5pc1RyYW5zcGFyZW50JiZvLmlzVHJhbnNwYXJlbnQoKSYmKE89ITApfWlmKE8pe3cuc2hhcGU9Tix3LmJpbmQoKSx4LmNsZWFyKHguREVQVEhfQlVGRkVSX0JJVCkseC5jb2xvck1hc2soITEsITEsITEsITEpLHguZGVwdGhNYXNrKCEwKSx4LmRlcHRoRnVuYyh4LkxFU1MpLFMuZW5hYmxlJiZTLmlzVHJhbnNwYXJlbnQoKSYmUy5kcmF3VHJhbnNwYXJlbnQoQik7Zm9yKHZhciBpPTA7aTxlOysraSl7dmFyIG89TFtpXTtvLmlzT3BhcXVlJiZvLmlzT3BhcXVlKCkmJm8uZHJhdyhCKX14LmVuYWJsZSh4LkJMRU5EKSx4LmJsZW5kRXF1YXRpb24oeC5GVU5DX0FERCkseC5ibGVuZEZ1bmMoeC5PTkUseC5PTkVfTUlOVVNfU1JDX0FMUEhBKSx4LmNvbG9yTWFzayghMCwhMCwhMCwhMCkseC5kZXB0aE1hc2soITEpLHguY2xlYXJDb2xvcigwLDAsMCwwKSx4LmNsZWFyKHguQ09MT1JfQlVGRkVSX0JJVCksUy5pc1RyYW5zcGFyZW50KCkmJlMuZHJhd1RyYW5zcGFyZW50KEIpO2Zvcih2YXIgaT0wO2k8ZTsrK2kpe3ZhciBvPUxbaV07by5pc1RyYW5zcGFyZW50JiZvLmlzVHJhbnNwYXJlbnQoKSYmby5kcmF3VHJhbnNwYXJlbnQoQil9eC5iaW5kRnJhbWVidWZmZXIoeC5GUkFNRUJVRkZFUixudWxsKSx4LmJsZW5kRnVuYyh4Lk9ORSx4Lk9ORV9NSU5VU19TUkNfQUxQSEEpLHguZGlzYWJsZSh4LkRFUFRIX1RFU1QpLGsuYmluZCgpLHcuY29sb3JbMF0uYmluZCgwKSxrLnVuaWZvcm1zLmFjY3VtQnVmZmVyPTAsYyh4KSx4LmRpc2FibGUoeC5CTEVORCl9RD0hMTtmb3IodmFyIGk9MDtpPGU7KytpKUxbaV0uZGlydHk9ITF9fX1yZXR1cm4gVi5lbmFibGVNb3VzZUxpc3RlbmVycygpLGZ1bmN0aW9uIHQoKXtWLl9zdG9wcGVkfHxWLmNvbnRleHRMb3N0fHwoWCgpLHJlcXVlc3RBbmltYXRpb25GcmFtZSh0KSl9KCksVi5yZWRyYXc9ZnVuY3Rpb24oKXtWLl9zdG9wcGVkfHwoRD0hMCxYKCkpfSxWfSxjcmVhdGVDYW1lcmE6bn19LHtcIi4vY2FtZXJhLmpzXCI6Mjg1LFwiLi9saWIvc2hhZGVyXCI6Mjg2LFwiYS1iaWctdHJpYW5nbGVcIjo1MCxcImdsLWF4ZXMzZFwiOjIzMCxcImdsLWF4ZXMzZC9wcm9wZXJ0aWVzXCI6MjM3LFwiZ2wtZmJvXCI6MjQ2LFwiZ2wtbWF0NC9vcnRob1wiOjI2NSxcImdsLW1hdDQvcGVyc3BlY3RpdmVcIjoyNjYsXCJnbC1zZWxlY3Qtc3RhdGljXCI6Mjk3LFwiZ2wtc3Bpa2VzM2RcIjozMDcsXCJpcy1tb2JpbGVcIjo0MTMsXCJtb3VzZS1jaGFuZ2VcIjo0MjgsXCJtb3VzZS13aGVlbFwiOjQzMX1dLDI4ODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCJnbHNsaWZ5XCIpO3IucG9pbnRWZXJ0ZXg9bihbXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xcblxcbnVuaWZvcm0gbWF0MyBtYXRyaXg7XFxudW5pZm9ybSBmbG9hdCBwb2ludFNpemU7XFxudW5pZm9ybSBmbG9hdCBwb2ludENsb3VkO1xcblxcbmhpZ2hwIGZsb2F0IHJhbmQodmVjMiBjbykge1xcbiAgaGlnaHAgZmxvYXQgYSA9IDEyLjk4OTg7XFxuICBoaWdocCBmbG9hdCBiID0gNzguMjMzO1xcbiAgaGlnaHAgZmxvYXQgYyA9IDQzNzU4LjU0NTM7XFxuICBoaWdocCBmbG9hdCBkID0gZG90KGNvLnh5LCB2ZWMyKGEsIGIpKTtcXG4gIGhpZ2hwIGZsb2F0IGUgPSBtb2QoZCwgMy4xNCk7XFxuICByZXR1cm4gZnJhY3Qoc2luKGUpICogYyk7XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzMgaGdQb3NpdGlvbiA9IG1hdHJpeCAqIHZlYzMocG9zaXRpb24sIDEpO1xcbiAgZ2xfUG9zaXRpb24gID0gdmVjNChoZ1Bvc2l0aW9uLnh5LCAwLCBoZ1Bvc2l0aW9uLnopO1xcbiAgICAvLyBpZiB3ZSBkb24ndCBqaXR0ZXIgdGhlIHBvaW50IHNpemUgYSBiaXQsIG92ZXJhbGwgcG9pbnQgY2xvdWRcXG4gICAgLy8gc2F0dXJhdGlvbiAnanVtcHMnIG9uIHpvb21pbmcsIHdoaWNoIGlzIGRpc3R1cmJpbmcgYW5kIGNvbmZ1c2luZ1xcbiAgZ2xfUG9pbnRTaXplID0gcG9pbnRTaXplICogKCgxOS41ICsgcmFuZChwb3NpdGlvbikpIC8gMjAuMCk7XFxuICBpZihwb2ludENsb3VkICE9IDAuMCkgeyAvLyBwb2ludENsb3VkIGlzIHRydXRoeVxcbiAgICAvLyBnZXQgdGhlIHNhbWUgc3F1YXJlIHN1cmZhY2UgYXMgY2lyY2xlIHdvdWxkIGJlXFxuICAgIGdsX1BvaW50U2l6ZSAqPSAwLjg4NjtcXG4gIH1cXG59XCJdKSxyLnBvaW50RnJhZ21lbnQ9bihbXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnVuaWZvcm0gdmVjNCBjb2xvciwgYm9yZGVyQ29sb3I7XFxudW5pZm9ybSBmbG9hdCBjZW50ZXJGcmFjdGlvbjtcXG51bmlmb3JtIGZsb2F0IHBvaW50Q2xvdWQ7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgZmxvYXQgcmFkaXVzO1xcbiAgdmVjNCBiYXNlQ29sb3I7XFxuICBpZihwb2ludENsb3VkICE9IDAuMCkgeyAvLyBwb2ludENsb3VkIGlzIHRydXRoeVxcbiAgICBpZihjZW50ZXJGcmFjdGlvbiA9PSAxLjApIHtcXG4gICAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG4gICAgfSBlbHNlIHtcXG4gICAgICBnbF9GcmFnQ29sb3IgPSBtaXgoYm9yZGVyQ29sb3IsIGNvbG9yLCBjZW50ZXJGcmFjdGlvbik7XFxuICAgIH1cXG4gIH0gZWxzZSB7XFxuICAgIHJhZGl1cyA9IGxlbmd0aCgyLjAgKiBnbF9Qb2ludENvb3JkLnh5IC0gMS4wKTtcXG4gICAgaWYocmFkaXVzID4gMS4wKSB7XFxuICAgICAgZGlzY2FyZDtcXG4gICAgfVxcbiAgICBiYXNlQ29sb3IgPSBtaXgoYm9yZGVyQ29sb3IsIGNvbG9yLCBzdGVwKHJhZGl1cywgY2VudGVyRnJhY3Rpb24pKTtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChiYXNlQ29sb3IucmdiICogYmFzZUNvbG9yLmEsIGJhc2VDb2xvci5hKTtcXG4gIH1cXG59XFxuXCJdKSxyLnBpY2tWZXJ0ZXg9bihbXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWM0IHBpY2tJZDtcXG5cXG51bmlmb3JtIG1hdDMgbWF0cml4O1xcbnVuaWZvcm0gZmxvYXQgcG9pbnRTaXplO1xcbnVuaWZvcm0gdmVjNCBwaWNrT2Zmc2V0O1xcblxcbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgdmVjMyBoZ1Bvc2l0aW9uID0gbWF0cml4ICogdmVjMyhwb3NpdGlvbiwgMSk7XFxuICBnbF9Qb3NpdGlvbiAgPSB2ZWM0KGhnUG9zaXRpb24ueHksIDAsIGhnUG9zaXRpb24ueik7XFxuICBnbF9Qb2ludFNpemUgPSBwb2ludFNpemU7XFxuXFxuICB2ZWM0IGlkID0gcGlja0lkICsgcGlja09mZnNldDtcXG4gIGlkLnkgKz0gZmxvb3IoaWQueCAvIDI1Ni4wKTtcXG4gIGlkLnggLT0gZmxvb3IoaWQueCAvIDI1Ni4wKSAqIDI1Ni4wO1xcblxcbiAgaWQueiArPSBmbG9vcihpZC55IC8gMjU2LjApO1xcbiAgaWQueSAtPSBmbG9vcihpZC55IC8gMjU2LjApICogMjU2LjA7XFxuXFxuICBpZC53ICs9IGZsb29yKGlkLnogLyAyNTYuMCk7XFxuICBpZC56IC09IGZsb29yKGlkLnogLyAyNTYuMCkgKiAyNTYuMDtcXG5cXG4gIGZyYWdJZCA9IGlkO1xcbn1cXG5cIl0pLHIucGlja0ZyYWdtZW50PW4oW1wicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0lkO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGZsb2F0IHJhZGl1cyA9IGxlbmd0aCgyLjAgKiBnbF9Qb2ludENvb3JkLnh5IC0gMS4wKTtcXG4gIGlmKHJhZGl1cyA+IDEuMCkge1xcbiAgICBkaXNjYXJkO1xcbiAgfVxcbiAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0lkIC8gMjU1LjA7XFxufVxcblwiXSl9LHtnbHNsaWZ5OjQwMn1dLDI4OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbC1zaGFkZXJcIiksaT10KFwiZ2wtYnVmZmVyXCIpLGE9dChcInR5cGVkYXJyYXktcG9vbFwiKSxvPXQoXCIuL2xpYi9zaGFkZXJcIik7ZnVuY3Rpb24gcyh0LGUscixuLGkpe3RoaXMucGxvdD10LHRoaXMub2Zmc2V0QnVmZmVyPWUsdGhpcy5waWNrQnVmZmVyPXIsdGhpcy5zaGFkZXI9bix0aGlzLnBpY2tTaGFkZXI9aSx0aGlzLnNpemVNaW49LjUsdGhpcy5zaXplTWluQ2FwPTIsdGhpcy5zaXplTWF4PTIwLHRoaXMuYXJlYVJhdGlvPTEsdGhpcy5wb2ludENvdW50PTAsdGhpcy5jb2xvcj1bMSwwLDAsMV0sdGhpcy5ib3JkZXJDb2xvcj1bMCwwLDAsMV0sdGhpcy5ibGVuZD0hMSx0aGlzLnBpY2tPZmZzZXQ9MCx0aGlzLnBvaW50cz1udWxsfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2wsYT1pKHIpLGw9aShyKSxjPW4ocixvLnBvaW50VmVydGV4LG8ucG9pbnRGcmFnbWVudCksdT1uKHIsby5waWNrVmVydGV4LG8ucGlja0ZyYWdtZW50KSxoPW5ldyBzKHQsYSxsLGMsdSk7cmV0dXJuIGgudXBkYXRlKGUpLHQuYWRkT2JqZWN0KGgpLGh9O3ZhciBsLGMsdT1zLnByb3RvdHlwZTt1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLm9mZnNldEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5waWNrQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnBsb3QucmVtb3ZlT2JqZWN0KHRoaXMpfSx1LnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZTtmdW5jdGlvbiByKGUscil7cmV0dXJuIGUgaW4gdD90W2VdOnJ9dD10fHx7fSx0aGlzLnNpemVNaW49cihcInNpemVNaW5cIiwuNSksdGhpcy5zaXplTWF4PXIoXCJzaXplTWF4XCIsMjApLHRoaXMuY29sb3I9cihcImNvbG9yXCIsWzEsMCwwLDFdKS5zbGljZSgpLHRoaXMuYXJlYVJhdGlvPXIoXCJhcmVhUmF0aW9cIiwxKSx0aGlzLmJvcmRlckNvbG9yPXIoXCJib3JkZXJDb2xvclwiLFswLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmJsZW5kPXIoXCJibGVuZFwiLCExKTt2YXIgbj10LnBvc2l0aW9ucy5sZW5ndGg+Pj4xLGk9dC5wb3NpdGlvbnMgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXksbz10LmlkVG9JbmRleCBpbnN0YW5jZW9mIEludDMyQXJyYXkmJnQuaWRUb0luZGV4Lmxlbmd0aD49bixzPXQucG9zaXRpb25zLGw9aT9zOmEubWFsbG9jRmxvYXQzMihzLmxlbmd0aCksYz1vP3QuaWRUb0luZGV4OmEubWFsbG9jSW50MzIobik7aWYoaXx8bC5zZXQocyksIW8pZm9yKGwuc2V0KHMpLGU9MDtlPG47ZSsrKWNbZV09ZTt0aGlzLnBvaW50cz1zLHRoaXMub2Zmc2V0QnVmZmVyLnVwZGF0ZShsKSx0aGlzLnBpY2tCdWZmZXIudXBkYXRlKGMpLGl8fGEuZnJlZShsKSxvfHxhLmZyZWUoYyksdGhpcy5wb2ludENvdW50PW4sdGhpcy5waWNrT2Zmc2V0PTB9LHUudW5pZmllZERyYXc9KGw9WzEsMCwwLDAsMSwwLDAsMCwxXSxjPVswLDAsMCwwXSxmdW5jdGlvbih0KXt2YXIgZT12b2lkIDAhPT10LHI9ZT90aGlzLnBpY2tTaGFkZXI6dGhpcy5zaGFkZXIsbj10aGlzLnBsb3QuZ2wsaT10aGlzLnBsb3QuZGF0YUJveDtpZigwPT09dGhpcy5wb2ludENvdW50KXJldHVybiB0O3ZhciBhPWlbMl0taVswXSxvPWlbM10taVsxXSxzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj0wLGk9dC5sZW5ndGg+Pj4xO2ZvcihyPTA7cjxpO3IrKyl7dmFyIGE9dFsyKnJdLG89dFsyKnIrMV07YT49ZVswXSYmYTw9ZVsyXSYmbz49ZVsxXSYmbzw9ZVszXSYmbisrfXJldHVybiBufSh0aGlzLnBvaW50cyxpKSx1PXRoaXMucGxvdC5waWNrUGl4ZWxSYXRpbypNYXRoLm1heChNYXRoLm1pbih0aGlzLnNpemVNaW5DYXAsdGhpcy5zaXplTWluKSxNYXRoLm1pbih0aGlzLnNpemVNYXgsdGhpcy5zaXplTWF4L01hdGgucG93KHMsLjMzMzMzKSkpO2xbMF09Mi9hLGxbNF09Mi9vLGxbNl09LTIqaVswXS9hLTEsbFs3XT0tMippWzFdL28tMSx0aGlzLm9mZnNldEJ1ZmZlci5iaW5kKCksci5iaW5kKCksci5hdHRyaWJ1dGVzLnBvc2l0aW9uLnBvaW50ZXIoKSxyLnVuaWZvcm1zLm1hdHJpeD1sLHIudW5pZm9ybXMuY29sb3I9dGhpcy5jb2xvcixyLnVuaWZvcm1zLmJvcmRlckNvbG9yPXRoaXMuYm9yZGVyQ29sb3Isci51bmlmb3Jtcy5wb2ludENsb3VkPXU8NSxyLnVuaWZvcm1zLnBvaW50U2l6ZT11LHIudW5pZm9ybXMuY2VudGVyRnJhY3Rpb249TWF0aC5taW4oMSxNYXRoLm1heCgwLE1hdGguc3FydCgxLXRoaXMuYXJlYVJhdGlvKSkpLGUmJihjWzBdPTI1NSZ0LGNbMV09dD4+OCYyNTUsY1syXT10Pj4xNiYyNTUsY1szXT10Pj4yNCYyNTUsdGhpcy5waWNrQnVmZmVyLmJpbmQoKSxyLmF0dHJpYnV0ZXMucGlja0lkLnBvaW50ZXIobi5VTlNJR05FRF9CWVRFKSxyLnVuaWZvcm1zLnBpY2tPZmZzZXQ9Yyx0aGlzLnBpY2tPZmZzZXQ9dCk7dmFyIGg9bi5nZXRQYXJhbWV0ZXIobi5CTEVORCksZj1uLmdldFBhcmFtZXRlcihuLkRJVEhFUik7cmV0dXJuIGgmJiF0aGlzLmJsZW5kJiZuLmRpc2FibGUobi5CTEVORCksZiYmbi5kaXNhYmxlKG4uRElUSEVSKSxuLmRyYXdBcnJheXMobi5QT0lOVFMsMCx0aGlzLnBvaW50Q291bnQpLGgmJiF0aGlzLmJsZW5kJiZuLmVuYWJsZShuLkJMRU5EKSxmJiZuLmVuYWJsZShuLkRJVEhFUiksdCt0aGlzLnBvaW50Q291bnR9KSx1LmRyYXc9dS51bmlmaWVkRHJhdyx1LmRyYXdQaWNrPXUudW5pZmllZERyYXcsdS5waWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnBpY2tPZmZzZXQsaT10aGlzLnBvaW50Q291bnQ7aWYocjxufHxyPj1uK2kpcmV0dXJuIG51bGw7dmFyIGE9ci1uLG89dGhpcy5wb2ludHM7cmV0dXJue29iamVjdDp0aGlzLHBvaW50SWQ6YSxkYXRhQ29vcmQ6W29bMiphXSxvWzIqYSsxXV19fX0se1wiLi9saWIvc2hhZGVyXCI6Mjg4LFwiZ2wtYnVmZmVyXCI6MjM4LFwiZ2wtc2hhZGVyXCI6Mjk4LFwidHlwZWRhcnJheS1wb29sXCI6NTMwfV0sMjkwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzLGwsYz1lWzBdLHU9ZVsxXSxoPWVbMl0sZj1lWzNdLHA9clswXSxkPXJbMV0sZz1yWzJdLHY9clszXTsoYT1jKnArdSpkK2gqZytmKnYpPDAmJihhPS1hLHA9LXAsZD0tZCxnPS1nLHY9LXYpOzEtYT4xZS02PyhpPU1hdGguYWNvcyhhKSxvPU1hdGguc2luKGkpLHM9TWF0aC5zaW4oKDEtbikqaSkvbyxsPU1hdGguc2luKG4qaSkvbyk6KHM9MS1uLGw9bik7cmV0dXJuIHRbMF09cypjK2wqcCx0WzFdPXMqdStsKmQsdFsyXT1zKmgrbCpnLHRbM109cypmK2wqdix0fX0se31dLDI5MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdHx8MD09PXQ/dC50b1N0cmluZygpOlwiXCJ9fSx7fV0sMjkyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInZlY3Rvcml6ZS10ZXh0XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9aVtlXTthfHwoYT1pW2VdPXt9KTtpZih0IGluIGEpcmV0dXJuIGFbdF07dmFyIG89e3RleHRBbGlnbjpcImNlbnRlclwiLHRleHRCYXNlbGluZTpcIm1pZGRsZVwiLGxpbmVIZWlnaHQ6MSxmb250OmUsbGluZVNwYWNpbmc6MS4yNSxzdHlsZXRhZ3M6e2JyZWFrbGluZXM6ITAsYm9sZHM6ITAsaXRhbGljczohMCxzdWJzY3JpcHRzOiEwLHN1cGVyc2NyaXB0czohMH0sdHJpYW5nbGVzOiEwfSxzPW4odCxvKTtvLnRyaWFuZ2xlcz0hMTt2YXIgbCxjLHU9bih0LG8pO2lmKHImJjEhPT1yKXtmb3IobD0wO2w8cy5wb3NpdGlvbnMubGVuZ3RoOysrbClmb3IoYz0wO2M8cy5wb3NpdGlvbnNbbF0ubGVuZ3RoOysrYylzLnBvc2l0aW9uc1tsXVtjXS89cjtmb3IobD0wO2w8dS5wb3NpdGlvbnMubGVuZ3RoOysrbClmb3IoYz0wO2M8dS5wb3NpdGlvbnNbbF0ubGVuZ3RoOysrYyl1LnBvc2l0aW9uc1tsXVtjXS89cn12YXIgaD1bWzEvMCwxLzBdLFstMS8wLC0xLzBdXSxmPXUucG9zaXRpb25zLmxlbmd0aDtmb3IobD0wO2w8ZjsrK2wpe3ZhciBwPXUucG9zaXRpb25zW2xdO2ZvcihjPTA7YzwyOysrYyloWzBdW2NdPU1hdGgubWluKGhbMF1bY10scFtjXSksaFsxXVtjXT1NYXRoLm1heChoWzFdW2NdLHBbY10pfXJldHVybiBhW3RdPVtzLHUsaF19O3ZhciBpPXt9fSx7XCJ2ZWN0b3JpemUtdGV4dFwiOjUzNX1dLDI5MzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCJnbC1zaGFkZXJcIiksaT10KFwiZ2xzbGlmeVwiKSxhPWkoW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcXG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XFxuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcXG59XFxuXFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzQgY29sb3I7XFxuYXR0cmlidXRlIHZlYzIgZ2x5cGg7XFxuYXR0cmlidXRlIHZlYzQgaWQ7XFxuXFxudW5pZm9ybSB2ZWM0IGhpZ2hsaWdodElkO1xcbnVuaWZvcm0gZmxvYXQgaGlnaGxpZ2h0U2NhbGU7XFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xcblxcbnZhcnlpbmcgdmVjNCBpbnRlcnBDb2xvcjtcXG52YXJ5aW5nIHZlYzQgcGlja0lkO1xcbnZhcnlpbmcgdmVjMyBkYXRhQ29vcmRpbmF0ZTtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBwb3NpdGlvbikpIHtcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xcbiAgfSBlbHNlIHtcXG4gICAgZmxvYXQgc2NhbGUgPSAxLjA7XFxuICAgIGlmKGRpc3RhbmNlKGhpZ2hsaWdodElkLCBpZCkgPCAwLjAwMDEpIHtcXG4gICAgICBzY2FsZSA9IGhpZ2hsaWdodFNjYWxlO1xcbiAgICB9XFxuXFxuICAgIHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbiwgMSk7XFxuICAgIHZlYzQgdmlld1Bvc2l0aW9uID0gdmlldyAqIHdvcmxkUG9zaXRpb247XFxuICAgIHZpZXdQb3NpdGlvbiA9IHZpZXdQb3NpdGlvbiAvIHZpZXdQb3NpdGlvbi53O1xcbiAgICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiAodmlld1Bvc2l0aW9uICsgc2NhbGUgKiB2ZWM0KGdseXBoLngsIC1nbHlwaC55LCAwLCAwKSk7XFxuXFxuICAgIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uO1xcbiAgICBpbnRlcnBDb2xvciA9IGNvbG9yO1xcbiAgICBwaWNrSWQgPSBpZDtcXG4gICAgZGF0YUNvb3JkaW5hdGUgPSBwb3NpdGlvbjtcXG4gIH1cXG59XCJdKSxvPWkoW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcXG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XFxuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcXG59XFxuXFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzQgY29sb3I7XFxuYXR0cmlidXRlIHZlYzIgZ2x5cGg7XFxuYXR0cmlidXRlIHZlYzQgaWQ7XFxuXFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaXplO1xcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xcbnVuaWZvcm0gZmxvYXQgaGlnaGxpZ2h0U2NhbGUsIHBpeGVsUmF0aW87XFxudW5pZm9ybSB2ZWM0IGhpZ2hsaWdodElkO1xcblxcbnZhcnlpbmcgdmVjNCBpbnRlcnBDb2xvcjtcXG52YXJ5aW5nIHZlYzQgcGlja0lkO1xcbnZhcnlpbmcgdmVjMyBkYXRhQ29vcmRpbmF0ZTtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBwb3NpdGlvbikpIHtcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xcbiAgfSBlbHNlIHtcXG4gICAgZmxvYXQgc2NhbGUgPSBwaXhlbFJhdGlvO1xcbiAgICBpZihkaXN0YW5jZShoaWdobGlnaHRJZC5iZ3IsIGlkLmJncikgPCAwLjAwMSkge1xcbiAgICAgIHNjYWxlICo9IGhpZ2hsaWdodFNjYWxlO1xcbiAgICB9XFxuXFxuICAgIHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG4gICAgdmVjNCB2aWV3UG9zaXRpb24gPSB2aWV3ICogd29ybGRQb3NpdGlvbjtcXG4gICAgdmVjNCBjbGlwUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlld1Bvc2l0aW9uO1xcbiAgICBjbGlwUG9zaXRpb24gLz0gY2xpcFBvc2l0aW9uLnc7XFxuXFxuICAgIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uICsgdmVjNChzY3JlZW5TaXplICogc2NhbGUgKiB2ZWMyKGdseXBoLngsIC1nbHlwaC55KSwgMC4wLCAwLjApO1xcbiAgICBpbnRlcnBDb2xvciA9IGNvbG9yO1xcbiAgICBwaWNrSWQgPSBpZDtcXG4gICAgZGF0YUNvb3JkaW5hdGUgPSBwb3NpdGlvbjtcXG4gIH1cXG59XCJdKSxzPWkoW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcXG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XFxuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcXG59XFxuXFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzQgY29sb3I7XFxuYXR0cmlidXRlIHZlYzIgZ2x5cGg7XFxuYXR0cmlidXRlIHZlYzQgaWQ7XFxuXFxudW5pZm9ybSBmbG9hdCBoaWdobGlnaHRTY2FsZTtcXG51bmlmb3JtIHZlYzQgaGlnaGxpZ2h0SWQ7XFxudW5pZm9ybSB2ZWMzIGF4ZXNbMl07XFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaXplO1xcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xcbnVuaWZvcm0gZmxvYXQgc2NhbGUsIHBpeGVsUmF0aW87XFxuXFxudmFyeWluZyB2ZWM0IGludGVycENvbG9yO1xcbnZhcnlpbmcgdmVjNCBwaWNrSWQ7XFxudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHBvc2l0aW9uKSkge1xcblxcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XFxuICB9IGVsc2Uge1xcbiAgICBmbG9hdCBsc2NhbGUgPSBwaXhlbFJhdGlvICogc2NhbGU7XFxuICAgIGlmKGRpc3RhbmNlKGhpZ2hsaWdodElkLCBpZCkgPCAwLjAwMDEpIHtcXG4gICAgICBsc2NhbGUgKj0gaGlnaGxpZ2h0U2NhbGU7XFxuICAgIH1cXG5cXG4gICAgdmVjNCBjbGlwQ2VudGVyICAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMSk7XFxuICAgIHZlYzMgZGF0YVBvc2l0aW9uID0gcG9zaXRpb24gKyAwLjUqbHNjYWxlKihheGVzWzBdICogZ2x5cGgueCArIGF4ZXNbMV0gKiBnbHlwaC55KSAqIGNsaXBDZW50ZXIudyAqIHNjcmVlblNpemUueTtcXG4gICAgdmVjNCBjbGlwUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChkYXRhUG9zaXRpb24sIDEpO1xcblxcbiAgICBnbF9Qb3NpdGlvbiA9IGNsaXBQb3NpdGlvbjtcXG4gICAgaW50ZXJwQ29sb3IgPSBjb2xvcjtcXG4gICAgcGlja0lkID0gaWQ7XFxuICAgIGRhdGFDb29yZGluYXRlID0gZGF0YVBvc2l0aW9uO1xcbiAgfVxcbn1cXG5cIl0pLGw9aShbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcXG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xcbn1cXG5cXG51bmlmb3JtIHZlYzMgZnJhZ0NsaXBCb3VuZHNbMl07XFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xcblxcbnZhcnlpbmcgdmVjNCBpbnRlcnBDb2xvcjtcXG52YXJ5aW5nIHZlYzQgcGlja0lkO1xcbnZhcnlpbmcgdmVjMyBkYXRhQ29vcmRpbmF0ZTtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBpZiAoXFxuICAgIG91dE9mUmFuZ2UoZnJhZ0NsaXBCb3VuZHNbMF0sIGZyYWdDbGlwQm91bmRzWzFdLCBkYXRhQ29vcmRpbmF0ZSkgfHxcXG4gICAgaW50ZXJwQ29sb3IuYSAqIG9wYWNpdHkgPT0gMC5cXG4gICkgZGlzY2FyZDtcXG4gIGdsX0ZyYWdDb2xvciA9IGludGVycENvbG9yICogb3BhY2l0eTtcXG59XFxuXCJdKSxjPWkoW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcXG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XFxuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcXG59XFxuXFxudW5pZm9ybSB2ZWMzIGZyYWdDbGlwQm91bmRzWzJdO1xcbnVuaWZvcm0gZmxvYXQgcGlja0dyb3VwO1xcblxcbnZhcnlpbmcgdmVjNCBwaWNrSWQ7XFxudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmIChvdXRPZlJhbmdlKGZyYWdDbGlwQm91bmRzWzBdLCBmcmFnQ2xpcEJvdW5kc1sxXSwgZGF0YUNvb3JkaW5hdGUpKSBkaXNjYXJkO1xcblxcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwaWNrR3JvdXAsIHBpY2tJZC5iZ3IpO1xcbn1cIl0pLHU9W3tuYW1lOlwicG9zaXRpb25cIix0eXBlOlwidmVjM1wifSx7bmFtZTpcImNvbG9yXCIsdHlwZTpcInZlYzRcIn0se25hbWU6XCJnbHlwaFwiLHR5cGU6XCJ2ZWMyXCJ9LHtuYW1lOlwiaWRcIix0eXBlOlwidmVjNFwifV0saD17dmVydGV4OmEsZnJhZ21lbnQ6bCxhdHRyaWJ1dGVzOnV9LGY9e3ZlcnRleDpvLGZyYWdtZW50OmwsYXR0cmlidXRlczp1fSxwPXt2ZXJ0ZXg6cyxmcmFnbWVudDpsLGF0dHJpYnV0ZXM6dX0sZD17dmVydGV4OmEsZnJhZ21lbnQ6YyxhdHRyaWJ1dGVzOnV9LGc9e3ZlcnRleDpvLGZyYWdtZW50OmMsYXR0cmlidXRlczp1fSx2PXt2ZXJ0ZXg6cyxmcmFnbWVudDpjLGF0dHJpYnV0ZXM6dX07ZnVuY3Rpb24gbSh0LGUpe3ZhciByPW4odCxlKSxpPXIuYXR0cmlidXRlcztyZXR1cm4gaS5wb3NpdGlvbi5sb2NhdGlvbj0wLGkuY29sb3IubG9jYXRpb249MSxpLmdseXBoLmxvY2F0aW9uPTIsaS5pZC5sb2NhdGlvbj0zLHJ9ci5jcmVhdGVQZXJzcGVjdGl2ZT1mdW5jdGlvbih0KXtyZXR1cm4gbSh0LGgpfSxyLmNyZWF0ZU9ydGhvPWZ1bmN0aW9uKHQpe3JldHVybiBtKHQsZil9LHIuY3JlYXRlUHJvamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gbSh0LHApfSxyLmNyZWF0ZVBpY2tQZXJzcGVjdGl2ZT1mdW5jdGlvbih0KXtyZXR1cm4gbSh0LGQpfSxyLmNyZWF0ZVBpY2tPcnRobz1mdW5jdGlvbih0KXtyZXR1cm4gbSh0LGcpfSxyLmNyZWF0ZVBpY2tQcm9qZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBtKHQsdil9fSx7XCJnbC1zaGFkZXJcIjoyOTgsZ2xzbGlmeTo0MDJ9XSwyOTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiaXMtc3RyaW5nLWJsYW5rXCIpLGk9dChcImdsLWJ1ZmZlclwiKSxhPXQoXCJnbC12YW9cIiksbz10KFwidHlwZWRhcnJheS1wb29sXCIpLHM9dChcImdsLW1hdDQvbXVsdGlwbHlcIiksbD10KFwiLi9saWIvc2hhZGVyc1wiKSxjPXQoXCIuL2xpYi9nbHlwaHNcIiksdT10KFwiLi9saWIvZ2V0LXNpbXBsZS1zdHJpbmdcIiksaD1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24gZih0LGUpe3ZhciByPXRbMF0sbj10WzFdLGk9dFsyXSxhPXRbM107cmV0dXJuIHRbMF09ZVswXSpyK2VbNF0qbitlWzhdKmkrZVsxMl0qYSx0WzFdPWVbMV0qcitlWzVdKm4rZVs5XSppK2VbMTNdKmEsdFsyXT1lWzJdKnIrZVs2XSpuK2VbMTBdKmkrZVsxNF0qYSx0WzNdPWVbM10qcitlWzddKm4rZVsxMV0qaStlWzE1XSphLHR9ZnVuY3Rpb24gcCh0LGUscixuKXtyZXR1cm4gZihuLG4pLGYobixuKSxmKG4sbil9ZnVuY3Rpb24gZCh0LGUpe3RoaXMuaW5kZXg9dCx0aGlzLmRhdGFDb29yZGluYXRlPXRoaXMucG9zaXRpb249ZX1mdW5jdGlvbiBnKHQpe3JldHVybiEwPT09dD8xOnQ+MT8xOnR9ZnVuY3Rpb24gdih0LGUscixuLGksYSxvLHMsbCxjLHUsaCl7dGhpcy5nbD10LHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuc2hhZGVyPWUsdGhpcy5vcnRob1NoYWRlcj1yLHRoaXMucHJvamVjdFNoYWRlcj1uLHRoaXMucG9pbnRCdWZmZXI9aSx0aGlzLmNvbG9yQnVmZmVyPWEsdGhpcy5nbHlwaEJ1ZmZlcj1vLHRoaXMuaWRCdWZmZXI9cyx0aGlzLnZhbz1sLHRoaXMudmVydGV4Q291bnQ9MCx0aGlzLmxpbmVWZXJ0ZXhDb3VudD0wLHRoaXMub3BhY2l0eT0xLHRoaXMuaGFzQWxwaGE9ITEsdGhpcy5saW5lV2lkdGg9MCx0aGlzLnByb2plY3RTY2FsZT1bMi8zLDIvMywyLzNdLHRoaXMucHJvamVjdE9wYWNpdHk9WzEsMSwxXSx0aGlzLnByb2plY3RIYXNBbHBoYT0hMSx0aGlzLnBpY2tJZD0wLHRoaXMucGlja1BlcnNwZWN0aXZlU2hhZGVyPWMsdGhpcy5waWNrT3J0aG9TaGFkZXI9dSx0aGlzLnBpY2tQcm9qZWN0U2hhZGVyPWgsdGhpcy5wb2ludHM9W10sdGhpcy5fc2VsZWN0UmVzdWx0PW5ldyBkKDAsWzAsMCwwXSksdGhpcy51c2VPcnRobz0hMCx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmF4ZXNQcm9qZWN0PVshMCwhMCwhMF0sdGhpcy5heGVzQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMuaGlnaGxpZ2h0SWQ9WzEsMSwxLDFdLHRoaXMuaGlnaGxpZ2h0U2NhbGU9Mix0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5kaXJ0eT0hMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPWwuY3JlYXRlUGVyc3BlY3RpdmUoZSksbj1sLmNyZWF0ZU9ydGhvKGUpLG89bC5jcmVhdGVQcm9qZWN0KGUpLHM9bC5jcmVhdGVQaWNrUGVyc3BlY3RpdmUoZSksYz1sLmNyZWF0ZVBpY2tPcnRobyhlKSx1PWwuY3JlYXRlUGlja1Byb2plY3QoZSksaD1pKGUpLGY9aShlKSxwPWkoZSksZD1pKGUpLGc9YShlLFt7YnVmZmVyOmgsc2l6ZTozLHR5cGU6ZS5GTE9BVH0se2J1ZmZlcjpmLHNpemU6NCx0eXBlOmUuRkxPQVR9LHtidWZmZXI6cCxzaXplOjIsdHlwZTplLkZMT0FUfSx7YnVmZmVyOmQsc2l6ZTo0LHR5cGU6ZS5VTlNJR05FRF9CWVRFLG5vcm1hbGl6ZWQ6ITB9XSksbT1uZXcgdihlLHIsbixvLGgsZixwLGQsZyxzLGMsdSk7cmV0dXJuIG0udXBkYXRlKHQpLG19O3ZhciBtPXYucHJvdG90eXBlO20ucGlja1Nsb3RzPTEsbS5zZXRQaWNrQmFzZT1mdW5jdGlvbih0KXt0aGlzLnBpY2tJZD10fSxtLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtpZih0aGlzLmhhc0FscGhhKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8MzsrK3QpaWYodGhpcy5heGVzUHJvamVjdFt0XSYmdGhpcy5wcm9qZWN0SGFzQWxwaGEpcmV0dXJuITA7cmV0dXJuITF9LG0uaXNPcGFxdWU9ZnVuY3Rpb24oKXtpZighdGhpcy5oYXNBbHBoYSlyZXR1cm4hMDtmb3IodmFyIHQ9MDt0PDM7Kyt0KWlmKHRoaXMuYXhlc1Byb2plY3RbdF0mJiF0aGlzLnByb2plY3RIYXNBbHBoYSlyZXR1cm4hMDtyZXR1cm4hMX07dmFyIHk9WzAsMF0seD1bMCwwLDBdLGI9WzAsMCwwXSxfPVswLDAsMCwxXSx3PVswLDAsMCwxXSxrPWguc2xpY2UoKSxBPVswLDAsMF0sVD1bWzAsMCwwXSxbMCwwLDBdXTtmdW5jdGlvbiBNKHQpe3JldHVybiB0WzBdPXRbMV09dFsyXT0wLHR9ZnVuY3Rpb24gUyh0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPTEsdH1mdW5jdGlvbiBFKHQsZSxyLG4pe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0W3JdPW4sdH1mdW5jdGlvbiBDKHQsZSxyLG4pe3ZhciBpLGE9ZS5heGVzUHJvamVjdCxvPWUuZ2wsbD10LnVuaWZvcm1zLGM9ci5tb2RlbHx8aCx1PXIudmlld3x8aCxmPXIucHJvamVjdGlvbnx8aCxkPWUuYXhlc0JvdW5kcyxnPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1ULHI9MDtyPDI7KytyKWZvcih2YXIgbj0wO248MzsrK24pZVtyXVtuXT1NYXRoLm1heChNYXRoLm1pbih0W3JdW25dLDFlOCksLTFlOCk7cmV0dXJuIGV9KGUuY2xpcEJvdW5kcyk7aT1lLmF4ZXMmJmUuYXhlcy5sYXN0Q3ViZVByb3BzP2UuYXhlcy5sYXN0Q3ViZVByb3BzLmF4aXM6WzEsMSwxXSx5WzBdPTIvby5kcmF3aW5nQnVmZmVyV2lkdGgseVsxXT0yL28uZHJhd2luZ0J1ZmZlckhlaWdodCx0LmJpbmQoKSxsLnZpZXc9dSxsLnByb2plY3Rpb249ZixsLnNjcmVlblNpemU9eSxsLmhpZ2hsaWdodElkPWUuaGlnaGxpZ2h0SWQsbC5oaWdobGlnaHRTY2FsZT1lLmhpZ2hsaWdodFNjYWxlLGwuY2xpcEJvdW5kcz1nLGwucGlja0dyb3VwPWUucGlja0lkLzI1NSxsLnBpeGVsUmF0aW89bjtmb3IodmFyIHY9MDt2PDM7Kyt2KWlmKGFbdl0pe2wuc2NhbGU9ZS5wcm9qZWN0U2NhbGVbdl0sbC5vcGFjaXR5PWUucHJvamVjdE9wYWNpdHlbdl07Zm9yKHZhciBtPWssQz0wO0M8MTY7KytDKW1bQ109MDtmb3IoQz0wO0M8NDsrK0MpbVs1KkNdPTE7bVs1KnZdPTAsaVt2XTwwP21bMTIrdl09ZFswXVt2XTptWzEyK3ZdPWRbMV1bdl0scyhtLGMsbSksbC5tb2RlbD1tO3ZhciBMPSh2KzEpJTMsej0odisyKSUzLE89TSh4KSxJPU0oYik7T1tMXT0xLElbel09MTt2YXIgRD1wKDAsMCwwLFMoXyxPKSksUD1wKDAsMCwwLFModyxJKSk7aWYoTWF0aC5hYnMoRFsxXSk+TWF0aC5hYnMoUFsxXSkpe3ZhciBSPUQ7RD1QLFA9UixSPU8sTz1JLEk9Ujt2YXIgRj1MO0w9eix6PUZ9RFswXTwwJiYoT1tMXT0tMSksUFsxXT4wJiYoSVt6XT0tMSk7dmFyIEI9MCxOPTA7Zm9yKEM9MDtDPDQ7KytDKUIrPU1hdGgucG93KGNbNCpMK0NdLDIpLE4rPU1hdGgucG93KGNbNCp6K0NdLDIpO09bTF0vPU1hdGguc3FydChCKSxJW3pdLz1NYXRoLnNxcnQoTiksbC5heGVzWzBdPU8sbC5heGVzWzFdPUksbC5mcmFnQ2xpcEJvdW5kc1swXT1FKEEsZ1swXSx2LC0xZTgpLGwuZnJhZ0NsaXBCb3VuZHNbMV09RShBLGdbMV0sdiwxZTgpLGUudmFvLmJpbmQoKSxlLnZhby5kcmF3KG8uVFJJQU5HTEVTLGUudmVydGV4Q291bnQpLGUubGluZVdpZHRoPjAmJihvLmxpbmVXaWR0aChlLmxpbmVXaWR0aCpuKSxlLnZhby5kcmF3KG8uTElORVMsZS5saW5lVmVydGV4Q291bnQsZS52ZXJ0ZXhDb3VudCkpLGUudmFvLnVuYmluZCgpfX12YXIgTD1bWy0xZTgsLTFlOCwtMWU4XSxbMWU4LDFlOCwxZThdXTtmdW5jdGlvbiB6KHQsZSxyLG4saSxhLG8pe3ZhciBzPXIuZ2w7aWYoKGE9PT1yLnByb2plY3RIYXNBbHBoYXx8bykmJkMoZSxyLG4saSksYT09PXIuaGFzQWxwaGF8fG8pe3QuYmluZCgpO3ZhciBsPXQudW5pZm9ybXM7bC5tb2RlbD1uLm1vZGVsfHxoLGwudmlldz1uLnZpZXd8fGgsbC5wcm9qZWN0aW9uPW4ucHJvamVjdGlvbnx8aCx5WzBdPTIvcy5kcmF3aW5nQnVmZmVyV2lkdGgseVsxXT0yL3MuZHJhd2luZ0J1ZmZlckhlaWdodCxsLnNjcmVlblNpemU9eSxsLmhpZ2hsaWdodElkPXIuaGlnaGxpZ2h0SWQsbC5oaWdobGlnaHRTY2FsZT1yLmhpZ2hsaWdodFNjYWxlLGwuZnJhZ0NsaXBCb3VuZHM9TCxsLmNsaXBCb3VuZHM9ci5heGVzLmJvdW5kcyxsLm9wYWNpdHk9ci5vcGFjaXR5LGwucGlja0dyb3VwPXIucGlja0lkLzI1NSxsLnBpeGVsUmF0aW89aSxyLnZhby5iaW5kKCksci52YW8uZHJhdyhzLlRSSUFOR0xFUyxyLnZlcnRleENvdW50KSxyLmxpbmVXaWR0aD4wJiYocy5saW5lV2lkdGgoci5saW5lV2lkdGgqaSksci52YW8uZHJhdyhzLkxJTkVTLHIubGluZVZlcnRleENvdW50LHIudmVydGV4Q291bnQpKSxyLnZhby51bmJpbmQoKX19ZnVuY3Rpb24gTyh0LGUscixpKXt2YXIgYTthPUFycmF5LmlzQXJyYXkodCk/ZTx0Lmxlbmd0aD90W2VdOnZvaWQgMDp0LGE9dShhKTt2YXIgbz0hMDtuKGEpJiYoYT1cIlxcdTI1YmNcIixvPSExKTt2YXIgcz1jKGEscixpKTtyZXR1cm57bWVzaDpzWzBdLGxpbmVzOnNbMV0sYm91bmRzOnNbMl0sdmlzaWJsZTpvfX1tLmRyYXc9ZnVuY3Rpb24odCl7eih0aGlzLnVzZU9ydGhvP3RoaXMub3J0aG9TaGFkZXI6dGhpcy5zaGFkZXIsdGhpcy5wcm9qZWN0U2hhZGVyLHRoaXMsdCx0aGlzLnBpeGVsUmF0aW8sITEsITEpfSxtLmRyYXdUcmFuc3BhcmVudD1mdW5jdGlvbih0KXt6KHRoaXMudXNlT3J0aG8/dGhpcy5vcnRob1NoYWRlcjp0aGlzLnNoYWRlcix0aGlzLnByb2plY3RTaGFkZXIsdGhpcyx0LHRoaXMucGl4ZWxSYXRpbywhMCwhMSl9LG0uZHJhd1BpY2s9ZnVuY3Rpb24odCl7eih0aGlzLnVzZU9ydGhvP3RoaXMucGlja09ydGhvU2hhZGVyOnRoaXMucGlja1BlcnNwZWN0aXZlU2hhZGVyLHRoaXMucGlja1Byb2plY3RTaGFkZXIsdGhpcyx0LDEsITAsITApfSxtLnBpY2s9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7aWYodC5pZCE9PXRoaXMucGlja0lkKXJldHVybiBudWxsO3ZhciBlPXQudmFsdWVbMl0rKHQudmFsdWVbMV08PDgpKyh0LnZhbHVlWzBdPDwxNik7aWYoZT49dGhpcy5wb2ludENvdW50fHxlPDApcmV0dXJuIG51bGw7dmFyIHI9dGhpcy5wb2ludHNbZV0sbj10aGlzLl9zZWxlY3RSZXN1bHQ7bi5pbmRleD1lO2Zvcih2YXIgaT0wO2k8MzsrK2kpbi5wb3NpdGlvbltpXT1uLmRhdGFDb29yZGluYXRlW2ldPXJbaV07cmV0dXJuIG59LG0uaGlnaGxpZ2h0PWZ1bmN0aW9uKHQpe2lmKHQpe3ZhciBlPXQuaW5kZXgscj0yNTUmZSxuPWU+PjgmMjU1LGk9ZT4+MTYmMjU1O3RoaXMuaGlnaGxpZ2h0SWQ9W3IvMjU1LG4vMjU1LGkvMjU1LDBdfWVsc2UgdGhpcy5oaWdobGlnaHRJZD1bMSwxLDEsMV19LG0udXBkYXRlPWZ1bmN0aW9uKHQpe2lmKFwicGVyc3BlY3RpdmVcImluKHQ9dHx8e30pJiYodGhpcy51c2VPcnRobz0hdC5wZXJzcGVjdGl2ZSksXCJvcnRob2dyYXBoaWNcImluIHQmJih0aGlzLnVzZU9ydGhvPSEhdC5vcnRob2dyYXBoaWMpLFwibGluZVdpZHRoXCJpbiB0JiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgpLFwicHJvamVjdFwiaW4gdClpZihBcnJheS5pc0FycmF5KHQucHJvamVjdCkpdGhpcy5heGVzUHJvamVjdD10LnByb2plY3Q7ZWxzZXt2YXIgZT0hIXQucHJvamVjdDt0aGlzLmF4ZXNQcm9qZWN0PVtlLGUsZV19aWYoXCJwcm9qZWN0U2NhbGVcImluIHQpaWYoQXJyYXkuaXNBcnJheSh0LnByb2plY3RTY2FsZSkpdGhpcy5wcm9qZWN0U2NhbGU9dC5wcm9qZWN0U2NhbGUuc2xpY2UoKTtlbHNle3ZhciByPSt0LnByb2plY3RTY2FsZTt0aGlzLnByb2plY3RTY2FsZT1bcixyLHJdfWlmKHRoaXMucHJvamVjdEhhc0FscGhhPSExLFwicHJvamVjdE9wYWNpdHlcImluIHQpe2lmKEFycmF5LmlzQXJyYXkodC5wcm9qZWN0T3BhY2l0eSkpdGhpcy5wcm9qZWN0T3BhY2l0eT10LnByb2plY3RPcGFjaXR5LnNsaWNlKCk7ZWxzZXtyPSt0LnByb2plY3RPcGFjaXR5O3RoaXMucHJvamVjdE9wYWNpdHk9W3IscixyXX1mb3IodmFyIG49MDtuPDM7KytuKXRoaXMucHJvamVjdE9wYWNpdHlbbl09Zyh0aGlzLnByb2plY3RPcGFjaXR5W25dKSx0aGlzLnByb2plY3RPcGFjaXR5W25dPDEmJih0aGlzLnByb2plY3RIYXNBbHBoYT0hMCl9dGhpcy5oYXNBbHBoYT0hMSxcIm9wYWNpdHlcImluIHQmJih0aGlzLm9wYWNpdHk9Zyh0Lm9wYWNpdHkpLHRoaXMub3BhY2l0eTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpLHRoaXMuZGlydHk9ITA7dmFyIGksYSxzPXQucG9zaXRpb24sbD10LmZvbnR8fFwibm9ybWFsXCIsYz10LmFsaWdubWVudHx8WzAsMF07aWYoMj09PWMubGVuZ3RoKWk9Y1swXSxhPWNbMV07ZWxzZXtpPVtdLGE9W107Zm9yKG49MDtuPGMubGVuZ3RoOysrbilpW25dPWNbbl1bMF0sYVtuXT1jW25dWzFdfXZhciB1PVsxLzAsMS8wLDEvMF0saD1bLTEvMCwtMS8wLC0xLzBdLGY9dC5nbHlwaCxwPXQuY29sb3IsZD10LnNpemUsdj10LmFuZ2xlLG09dC5saW5lQ29sb3IseT0tMSx4PTAsYj0wLF89MDtpZihzLmxlbmd0aCl7Xz1zLmxlbmd0aDt0OmZvcihuPTA7bjxfOysrbil7Zm9yKHZhciB3PXNbbl0saz0wO2s8MzsrK2spaWYoaXNOYU4od1trXSl8fCFpc0Zpbml0ZSh3W2tdKSljb250aW51ZSB0O3ZhciBBPShOPU8oZixuLGwsdGhpcy5waXhlbFJhdGlvKSkubWVzaCxUPU4ubGluZXMsTT1OLmJvdW5kczt4Kz0zKkEuY2VsbHMubGVuZ3RoLGIrPTIqVC5lZGdlcy5sZW5ndGh9fXZhciBTPXgrYixFPW8ubWFsbG9jRmxvYXQoMypTKSxDPW8ubWFsbG9jRmxvYXQoNCpTKSxMPW8ubWFsbG9jRmxvYXQoMipTKSx6PW8ubWFsbG9jVWludDMyKFMpO2lmKFM+MCl7dmFyIEk9MCxEPXgsUD1bMCwwLDAsMV0sUj1bMCwwLDAsMV0sRj1BcnJheS5pc0FycmF5KHApJiZBcnJheS5pc0FycmF5KHBbMF0pLEI9QXJyYXkuaXNBcnJheShtKSYmQXJyYXkuaXNBcnJheShtWzBdKTt0OmZvcihuPTA7bjxfOysrbil7eSs9MTtmb3Iodz1zW25dLGs9MDtrPDM7KytrKXtpZihpc05hTih3W2tdKXx8IWlzRmluaXRlKHdba10pKWNvbnRpbnVlIHQ7aFtrXT1NYXRoLm1heChoW2tdLHdba10pLHVba109TWF0aC5taW4odVtrXSx3W2tdKX1BPShOPU8oZixuLGwsdGhpcy5waXhlbFJhdGlvKSkubWVzaCxUPU4ubGluZXMsTT1OLmJvdW5kczt2YXIgTixqPU4udmlzaWJsZTtpZihqKWlmKEFycmF5LmlzQXJyYXkocCkpe2lmKDM9PT0oVj1GP248cC5sZW5ndGg/cFtuXTpbMCwwLDAsMF06cCkubGVuZ3RoKXtmb3Ioaz0wO2s8MzsrK2spUFtrXT1WW2tdO1BbM109MX1lbHNlIGlmKDQ9PT1WLmxlbmd0aCl7Zm9yKGs9MDtrPDQ7KytrKVBba109VltrXTshdGhpcy5oYXNBbHBoYSYmVlszXTwxJiYodGhpcy5oYXNBbHBoYT0hMCl9fWVsc2UgUFswXT1QWzFdPVBbMl09MCxQWzNdPTE7ZWxzZSBQPVsxLDEsMSwwXTtpZihqKWlmKEFycmF5LmlzQXJyYXkobSkpe3ZhciBWO2lmKDM9PT0oVj1CP248bS5sZW5ndGg/bVtuXTpbMCwwLDAsMF06bSkubGVuZ3RoKXtmb3Ioaz0wO2s8MzsrK2spUltrXT1WW2tdO1Jba109MX1lbHNlIGlmKDQ9PT1WLmxlbmd0aCl7Zm9yKGs9MDtrPDQ7KytrKVJba109VltrXTshdGhpcy5oYXNBbHBoYSYmVlszXTwxJiYodGhpcy5oYXNBbHBoYT0hMCl9fWVsc2UgUlswXT1SWzFdPVJbMl09MCxSWzNdPTE7ZWxzZSBSPVsxLDEsMSwwXTt2YXIgVT0uNTtqP0FycmF5LmlzQXJyYXkoZCk/VT1uPGQubGVuZ3RoPytkW25dOjEyOmQ/VT0rZDp0aGlzLnVzZU9ydGhvJiYoVT0xMik6VT0wO3ZhciBxPTA7QXJyYXkuaXNBcnJheSh2KT9xPW48di5sZW5ndGg/K3Zbbl06MDp2JiYocT0rdik7dmFyIEg9TWF0aC5jb3MocSksRz1NYXRoLnNpbihxKTtmb3Iodz1zW25dLGs9MDtrPDM7KytrKWhba109TWF0aC5tYXgoaFtrXSx3W2tdKSx1W2tdPU1hdGgubWluKHVba10sd1trXSk7dmFyIFk9aSxXPWE7WT0wO0FycmF5LmlzQXJyYXkoaSk/WT1uPGkubGVuZ3RoP2lbbl06MDppJiYoWT1pKTtXPTA7QXJyYXkuaXNBcnJheShhKT9XPW48YS5sZW5ndGg/YVtuXTowOmEmJihXPWEpO3ZhciBYPVtZKj1ZPjA/MS1NWzBdWzBdOlk8MD8xK01bMV1bMF06MSxXKj1XPjA/MS1NWzBdWzFdOlc8MD8xK01bMV1bMV06MV0sWj1BLmNlbGxzfHxbXSwkPUEucG9zaXRpb25zfHxbXTtmb3Ioaz0wO2s8Wi5sZW5ndGg7KytrKWZvcih2YXIgSj1aW2tdLEs9MDtLPDM7KytLKXtmb3IodmFyIFE9MDtRPDM7KytRKUVbMypJK1FdPXdbUV07Zm9yKFE9MDtRPDQ7KytRKUNbNCpJK1FdPVBbUV07eltJXT15O3ZhciB0dD0kW0pbS11dO0xbMipJXT1VKihIKnR0WzBdLUcqdHRbMV0rWFswXSksTFsyKkkrMV09VSooRyp0dFswXStIKnR0WzFdK1hbMV0pLEkrPTF9Zm9yKFo9VC5lZGdlcywkPVQucG9zaXRpb25zLGs9MDtrPFoubGVuZ3RoOysraylmb3IoSj1aW2tdLEs9MDtLPDI7KytLKXtmb3IoUT0wO1E8MzsrK1EpRVszKkQrUV09d1tRXTtmb3IoUT0wO1E8NDsrK1EpQ1s0KkQrUV09UltRXTt6W0RdPXk7dHQ9JFtKW0tdXTtMWzIqRF09VSooSCp0dFswXS1HKnR0WzFdK1hbMF0pLExbMipEKzFdPVUqKEcqdHRbMF0rSCp0dFsxXStYWzFdKSxEKz0xfX19dGhpcy5ib3VuZHM9W3UsaF0sdGhpcy5wb2ludHM9cyx0aGlzLnBvaW50Q291bnQ9cy5sZW5ndGgsdGhpcy52ZXJ0ZXhDb3VudD14LHRoaXMubGluZVZlcnRleENvdW50PWIsdGhpcy5wb2ludEJ1ZmZlci51cGRhdGUoRSksdGhpcy5jb2xvckJ1ZmZlci51cGRhdGUoQyksdGhpcy5nbHlwaEJ1ZmZlci51cGRhdGUoTCksdGhpcy5pZEJ1ZmZlci51cGRhdGUoeiksby5mcmVlKEUpLG8uZnJlZShDKSxvLmZyZWUoTCksby5mcmVlKHopfSxtLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5vcnRob1NoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrUGVyc3BlY3RpdmVTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja09ydGhvU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnZhby5kaXNwb3NlKCksdGhpcy5wb2ludEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5jb2xvckJ1ZmZlci5kaXNwb3NlKCksdGhpcy5nbHlwaEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5pZEJ1ZmZlci5kaXNwb3NlKCl9fSx7XCIuL2xpYi9nZXQtc2ltcGxlLXN0cmluZ1wiOjI5MSxcIi4vbGliL2dseXBoc1wiOjI5MixcIi4vbGliL3NoYWRlcnNcIjoyOTMsXCJnbC1idWZmZXJcIjoyMzgsXCJnbC1tYXQ0L211bHRpcGx5XCI6MjY0LFwiZ2wtdmFvXCI6MzIwLFwiaXMtc3RyaW5nLWJsYW5rXCI6NDE2LFwidHlwZWRhcnJheS1wb29sXCI6NTMwfV0sMjk1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsc2xpZnlcIik7ci5ib3hWZXJ0ZXg9bihbXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMyIHZlcnRleDtcXG5cXG51bmlmb3JtIHZlYzIgY29ybmVyQSwgY29ybmVyQjtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBnbF9Qb3NpdGlvbiA9IHZlYzQobWl4KGNvcm5lckEsIGNvcm5lckIsIHZlcnRleCksIDAsIDEpO1xcbn1cXG5cIl0pLHIuYm94RnJhZ21lbnQ9bihbXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnVuaWZvcm0gdmVjNCBjb2xvcjtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCJdKX0se2dsc2xpZnk6NDAyfV0sMjk2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsLXNoYWRlclwiKSxpPXQoXCJnbC1idWZmZXJcIiksYT10KFwiLi9saWIvc2hhZGVyc1wiKTtmdW5jdGlvbiBvKHQsZSxyKXt0aGlzLnBsb3Q9dCx0aGlzLmJveEJ1ZmZlcj1lLHRoaXMuYm94U2hhZGVyPXIsdGhpcy5lbmFibGVkPSEwLHRoaXMuc2VsZWN0Qm94PVsxLzAsMS8wLC0xLzAsLTEvMF0sdGhpcy5ib3JkZXJDb2xvcj1bMCwwLDAsMV0sdGhpcy5pbm5lckZpbGw9ITEsdGhpcy5pbm5lckNvbG9yPVswLDAsMCwuMjVdLHRoaXMub3V0ZXJGaWxsPSEwLHRoaXMub3V0ZXJDb2xvcj1bMCwwLDAsLjVdLHRoaXMuYm9yZGVyV2lkdGg9MTB9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbCxzPWkocixbMCwwLDAsMSwxLDAsMSwxXSksbD1uKHIsYS5ib3hWZXJ0ZXgsYS5ib3hGcmFnbWVudCksYz1uZXcgbyh0LHMsbCk7cmV0dXJuIGMudXBkYXRlKGUpLHQuYWRkT3ZlcmxheShjKSxjfTt2YXIgcz1vLnByb3RvdHlwZTtzLmRyYXc9ZnVuY3Rpb24oKXtpZih0aGlzLmVuYWJsZWQpe3ZhciB0PXRoaXMucGxvdCxlPXRoaXMuc2VsZWN0Qm94LHI9dGhpcy5ib3JkZXJXaWR0aCxuPSh0aGlzLmlubmVyRmlsbCx0aGlzLmlubmVyQ29sb3IpLGk9KHRoaXMub3V0ZXJGaWxsLHRoaXMub3V0ZXJDb2xvciksYT10aGlzLmJvcmRlckNvbG9yLG89dC5ib3gscz10LnNjcmVlbkJveCxsPXQuZGF0YUJveCxjPXQudmlld0JveCx1PXQucGl4ZWxSYXRpbyxoPShlWzBdLWxbMF0pKihjWzJdLWNbMF0pLyhsWzJdLWxbMF0pK2NbMF0sZj0oZVsxXS1sWzFdKSooY1szXS1jWzFdKS8obFszXS1sWzFdKStjWzFdLHA9KGVbMl0tbFswXSkqKGNbMl0tY1swXSkvKGxbMl0tbFswXSkrY1swXSxkPShlWzNdLWxbMV0pKihjWzNdLWNbMV0pLyhsWzNdLWxbMV0pK2NbMV07aWYoaD1NYXRoLm1heChoLGNbMF0pLGY9TWF0aC5tYXgoZixjWzFdKSxwPU1hdGgubWluKHAsY1syXSksZD1NYXRoLm1pbihkLGNbM10pLCEocDxofHxkPGYpKXtvLmJpbmQoKTt2YXIgZz1zWzJdLXNbMF0sdj1zWzNdLXNbMV07aWYodGhpcy5vdXRlckZpbGwmJihvLmRyYXdCb3goMCwwLGcsZixpKSxvLmRyYXdCb3goMCxmLGgsZCxpKSxvLmRyYXdCb3goMCxkLGcsdixpKSxvLmRyYXdCb3gocCxmLGcsZCxpKSksdGhpcy5pbm5lckZpbGwmJm8uZHJhd0JveChoLGYscCxkLG4pLHI+MCl7dmFyIG09cip1O28uZHJhd0JveChoLW0sZi1tLHArbSxmK20sYSksby5kcmF3Qm94KGgtbSxkLW0scCttLGQrbSxhKSxvLmRyYXdCb3goaC1tLGYtbSxoK20sZCttLGEpLG8uZHJhd0JveChwLW0sZi1tLHArbSxkK20sYSl9fX19LHMudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e30sdGhpcy5pbm5lckZpbGw9ISF0LmlubmVyRmlsbCx0aGlzLm91dGVyRmlsbD0hIXQub3V0ZXJGaWxsLHRoaXMuaW5uZXJDb2xvcj0odC5pbm5lckNvbG9yfHxbMCwwLDAsLjVdKS5zbGljZSgpLHRoaXMub3V0ZXJDb2xvcj0odC5vdXRlckNvbG9yfHxbMCwwLDAsLjVdKS5zbGljZSgpLHRoaXMuYm9yZGVyQ29sb3I9KHQuYm9yZGVyQ29sb3J8fFswLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmJvcmRlcldpZHRoPXQuYm9yZGVyV2lkdGh8fDAsdGhpcy5zZWxlY3RCb3g9KHQuc2VsZWN0Qm94fHx0aGlzLnNlbGVjdEJveCkuc2xpY2UoKX0scy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5ib3hCdWZmZXIuZGlzcG9zZSgpLHRoaXMuYm94U2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBsb3QucmVtb3ZlT3ZlcmxheSh0aGlzKX19LHtcIi4vbGliL3NoYWRlcnNcIjoyOTUsXCJnbC1idWZmZXJcIjoyMzgsXCJnbC1zaGFkZXJcIjoyOTh9XSwyOTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKHQsZSksYT1pLm1hbGxvY1VpbnQ4KGVbMF0qZVsxXSo0KTtyZXR1cm4gbmV3IGModCxyLGEpfTt2YXIgbj10KFwiZ2wtZmJvXCIpLGk9dChcInR5cGVkYXJyYXktcG9vbFwiKSxhPXQoXCJuZGFycmF5XCIpLG89dChcImJpdC10d2lkZGxlXCIpLm5leHRQb3cyLHM9dChcImN3aXNlL2xpYi93cmFwcGVyXCIpKHthcmdzOltcImFycmF5XCIse29mZnNldDpbMCwwLDFdLGFycmF5OjB9LHtvZmZzZXQ6WzAsMCwyXSxhcnJheTowfSx7b2Zmc2V0OlswLDAsM10sYXJyYXk6MH0sXCJzY2FsYXJcIixcInNjYWxhclwiLFwiaW5kZXhcIl0scHJlOntib2R5Olwie3RoaXNfY2xvc2VzdEQyPTFlOCx0aGlzX2Nsb3Nlc3RYPS0xLHRoaXNfY2xvc2VzdFk9LTF9XCIsYXJnczpbXSx0aGlzVmFyczpbXCJ0aGlzX2Nsb3Nlc3REMlwiLFwidGhpc19jbG9zZXN0WFwiLFwidGhpc19jbG9zZXN0WVwiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6XCJ7aWYoX2lubGluZV8xNl9hcmcwXzwyNTV8fF9pbmxpbmVfMTZfYXJnMV88MjU1fHxfaW5saW5lXzE2X2FyZzJfPDI1NXx8X2lubGluZV8xNl9hcmczXzwyNTUpe3ZhciBfaW5saW5lXzE2X2w9X2lubGluZV8xNl9hcmc0Xy1faW5saW5lXzE2X2FyZzZfWzBdLF9pbmxpbmVfMTZfYT1faW5saW5lXzE2X2FyZzVfLV9pbmxpbmVfMTZfYXJnNl9bMV0sX2lubGluZV8xNl9mPV9pbmxpbmVfMTZfbCpfaW5saW5lXzE2X2wrX2lubGluZV8xNl9hKl9pbmxpbmVfMTZfYTtfaW5saW5lXzE2X2Y8dGhpc19jbG9zZXN0RDImJih0aGlzX2Nsb3Nlc3REMj1faW5saW5lXzE2X2YsdGhpc19jbG9zZXN0WD1faW5saW5lXzE2X2FyZzZfWzBdLHRoaXNfY2xvc2VzdFk9X2lubGluZV8xNl9hcmc2X1sxXSl9fVwiLGFyZ3M6W3tuYW1lOlwiX2lubGluZV8xNl9hcmcwX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzE2X2FyZzFfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfMTZfYXJnMl9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xNl9hcmczX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzE2X2FyZzRfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfMTZfYXJnNV9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xNl9hcmc2X1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6NH1dLHRoaXNWYXJzOltcInRoaXNfY2xvc2VzdEQyXCIsXCJ0aGlzX2Nsb3Nlc3RYXCIsXCJ0aGlzX2Nsb3Nlc3RZXCJdLGxvY2FsVmFyczpbXCJfaW5saW5lXzE2X2FcIixcIl9pbmxpbmVfMTZfZlwiLFwiX2lubGluZV8xNl9sXCJdfSxwb3N0Ontib2R5Olwie3JldHVyblt0aGlzX2Nsb3Nlc3RYLHRoaXNfY2xvc2VzdFksdGhpc19jbG9zZXN0RDJdfVwiLGFyZ3M6W10sdGhpc1ZhcnM6W1widGhpc19jbG9zZXN0RDJcIixcInRoaXNfY2xvc2VzdFhcIixcInRoaXNfY2xvc2VzdFlcIl0sbG9jYWxWYXJzOltdfSxkZWJ1ZzohMSxmdW5jTmFtZTpcImN3aXNlXCIsYmxvY2tTaXplOjY0fSk7ZnVuY3Rpb24gbCh0LGUscixuLGkpe3RoaXMuY29vcmQ9W3QsZV0sdGhpcy5pZD1yLHRoaXMudmFsdWU9bix0aGlzLmRpc3RhbmNlPWl9ZnVuY3Rpb24gYyh0LGUscil7dGhpcy5nbD10LHRoaXMuZmJvPWUsdGhpcy5idWZmZXI9cix0aGlzLl9yZWFkVGltZW91dD1udWxsO3ZhciBuPXRoaXM7dGhpcy5fcmVhZENhbGxiYWNrPWZ1bmN0aW9uKCl7bi5nbCYmKGUuYmluZCgpLHQucmVhZFBpeGVscygwLDAsZS5zaGFwZVswXSxlLnNoYXBlWzFdLHQuUkdCQSx0LlVOU0lHTkVEX0JZVEUsbi5idWZmZXIpLG4uX3JlYWRUaW1lb3V0PW51bGwpfX12YXIgdT1jLnByb3RvdHlwZTtPYmplY3QuZGVmaW5lUHJvcGVydHkodSxcInNoYXBlXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdsP3RoaXMuZmJvLnNoYXBlLnNsaWNlKCk6WzAsMF19LHNldDpmdW5jdGlvbih0KXtpZih0aGlzLmdsKXt0aGlzLmZiby5zaGFwZT10O3ZhciBlPXRoaXMuZmJvLnNoYXBlWzBdLHI9dGhpcy5mYm8uc2hhcGVbMV07aWYociplKjQ+dGhpcy5idWZmZXIubGVuZ3RoKXtpLmZyZWUodGhpcy5idWZmZXIpO2Zvcih2YXIgbj10aGlzLmJ1ZmZlcj1pLm1hbGxvY1VpbnQ4KG8ociplKjQpKSxhPTA7YTxyKmUqNDsrK2EpblthXT0yNTV9cmV0dXJuIHR9fX0pLHUuYmVnaW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3RoaXMuc2hhcGU7dCYmKHRoaXMuZmJvLmJpbmQoKSx0LmNsZWFyQ29sb3IoMSwxLDEsMSksdC5jbGVhcih0LkNPTE9SX0JVRkZFUl9CSVR8dC5ERVBUSF9CVUZGRVJfQklUKSl9LHUuZW5kPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nbDt0JiYodC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUixudWxsKSx0aGlzLl9yZWFkVGltZW91dHx8Y2xlYXJUaW1lb3V0KHRoaXMuX3JlYWRUaW1lb3V0KSx0aGlzLl9yZWFkVGltZW91dD1zZXRUaW1lb3V0KHRoaXMuX3JlYWRDYWxsYmFjaywxKSl9LHUucXVlcnk9ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLmdsKXJldHVybiBudWxsO3ZhciBuPXRoaXMuZmJvLnNoYXBlLnNsaWNlKCk7dHw9MCxlfD0wLFwibnVtYmVyXCIhPXR5cGVvZiByJiYocj0xKTt2YXIgaT0wfE1hdGgubWluKE1hdGgubWF4KHQtciwwKSxuWzBdKSxvPTB8TWF0aC5taW4oTWF0aC5tYXgodCtyLDApLG5bMF0pLGM9MHxNYXRoLm1pbihNYXRoLm1heChlLXIsMCksblsxXSksdT0wfE1hdGgubWluKE1hdGgubWF4KGUrciwwKSxuWzFdKTtpZihvPD1pfHx1PD1jKXJldHVybiBudWxsO3ZhciBoPVtvLWksdS1jXSxmPWEodGhpcy5idWZmZXIsW2hbMF0saFsxXSw0XSxbNCw0Km5bMF0sMV0sNCooaStuWzBdKmMpKSxwPXMoZi5oaShoWzBdLGhbMV0sMSkscixyKSxkPXBbMF0sZz1wWzFdO3JldHVybiBkPDB8fE1hdGgucG93KHRoaXMucmFkaXVzLDIpPHBbMl0/bnVsbDpuZXcgbChkK2l8MCxnK2N8MCxmLmdldChkLGcsMCksW2YuZ2V0KGQsZywxKSxmLmdldChkLGcsMiksZi5nZXQoZCxnLDMpXSxNYXRoLnNxcnQocFsyXSkpfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmdsJiYodGhpcy5mYm8uZGlzcG9zZSgpLGkuZnJlZSh0aGlzLmJ1ZmZlciksdGhpcy5nbD1udWxsLHRoaXMuX3JlYWRUaW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy5fcmVhZFRpbWVvdXQpKX19LHtcImJpdC10d2lkZGxlXCI6ODMsXCJjd2lzZS9saWIvd3JhcHBlclwiOjE0MCxcImdsLWZib1wiOjI0NixuZGFycmF5OjQ0MyxcInR5cGVkYXJyYXktcG9vbFwiOjUzMH1dLDI5ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2xpYi9jcmVhdGUtdW5pZm9ybXNcIiksaT10KFwiLi9saWIvY3JlYXRlLWF0dHJpYnV0ZXNcIiksYT10KFwiLi9saWIvcmVmbGVjdFwiKSxvPXQoXCIuL2xpYi9zaGFkZXItY2FjaGVcIikscz10KFwiLi9saWIvcnVudGltZS1yZWZsZWN0XCIpLGw9dChcIi4vbGliL0dMRXJyb3JcIik7ZnVuY3Rpb24gYyh0KXt0aGlzLmdsPXQsdGhpcy5nbC5sYXN0QXR0cmliQ291bnQ9MCx0aGlzLl92cmVmPXRoaXMuX2ZyZWY9dGhpcy5fcmVsaW5rPXRoaXMudmVydFNoYWRlcj10aGlzLmZyYWdTaGFkZXI9dGhpcy5wcm9ncmFtPXRoaXMuYXR0cmlidXRlcz10aGlzLnVuaWZvcm1zPXRoaXMudHlwZXM9bnVsbH12YXIgdT1jLnByb3RvdHlwZTtmdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQubmFtZTxlLm5hbWU/LTE6MX11LmJpbmQ9ZnVuY3Rpb24oKXt2YXIgdDt0aGlzLnByb2dyYW18fHRoaXMuX3JlbGluaygpO3ZhciBlPXRoaXMuZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLnByb2dyYW0sdGhpcy5nbC5BQ1RJVkVfQVRUUklCVVRFUykscj10aGlzLmdsLmxhc3RBdHRyaWJDb3VudDtpZihlPnIpZm9yKHQ9cjt0PGU7dCsrKXRoaXMuZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodCk7ZWxzZSBpZihyPmUpZm9yKHQ9ZTt0PHI7dCsrKXRoaXMuZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHQpO3RoaXMuZ2wubGFzdEF0dHJpYkNvdW50PWUsdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSl9LHUuZGlzcG9zZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmdsLmxhc3RBdHRyaWJDb3VudCxlPTA7ZTx0O2UrKyl0aGlzLmdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShlKTt0aGlzLmdsLmxhc3RBdHRyaWJDb3VudD0wLHRoaXMuX2ZyZWYmJnRoaXMuX2ZyZWYuZGlzcG9zZSgpLHRoaXMuX3ZyZWYmJnRoaXMuX3ZyZWYuZGlzcG9zZSgpLHRoaXMuYXR0cmlidXRlcz10aGlzLnR5cGVzPXRoaXMudmVydFNoYWRlcj10aGlzLmZyYWdTaGFkZXI9dGhpcy5wcm9ncmFtPXRoaXMuX3JlbGluaz10aGlzLl9mcmVmPXRoaXMuX3ZyZWY9bnVsbH0sdS51cGRhdGU9ZnVuY3Rpb24odCxlLHIsYyl7aWYoIWV8fDE9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgdT10O3Q9dS52ZXJ0ZXgsZT11LmZyYWdtZW50LHI9dS51bmlmb3JtcyxjPXUuYXR0cmlidXRlc312YXIgZj10aGlzLHA9Zi5nbCxkPWYuX3ZyZWY7Zi5fdnJlZj1vLnNoYWRlcihwLHAuVkVSVEVYX1NIQURFUix0KSxkJiZkLmRpc3Bvc2UoKSxmLnZlcnRTaGFkZXI9Zi5fdnJlZi5zaGFkZXI7dmFyIGc9dGhpcy5fZnJlZjtpZihmLl9mcmVmPW8uc2hhZGVyKHAscC5GUkFHTUVOVF9TSEFERVIsZSksZyYmZy5kaXNwb3NlKCksZi5mcmFnU2hhZGVyPWYuX2ZyZWYuc2hhZGVyLCFyfHwhYyl7dmFyIHY9cC5jcmVhdGVQcm9ncmFtKCk7aWYocC5hdHRhY2hTaGFkZXIodixmLmZyYWdTaGFkZXIpLHAuYXR0YWNoU2hhZGVyKHYsZi52ZXJ0U2hhZGVyKSxwLmxpbmtQcm9ncmFtKHYpLCFwLmdldFByb2dyYW1QYXJhbWV0ZXIodixwLkxJTktfU1RBVFVTKSl7dmFyIG09cC5nZXRQcm9ncmFtSW5mb0xvZyh2KTt0aHJvdyBuZXcgbChtLFwiRXJyb3IgbGlua2luZyBwcm9ncmFtOlwiK20pfXI9cnx8cy51bmlmb3JtcyhwLHYpLGM9Y3x8cy5hdHRyaWJ1dGVzKHAsdikscC5kZWxldGVQcm9ncmFtKHYpfShjPWMuc2xpY2UoKSkuc29ydChoKTt2YXIgeSx4PVtdLGI9W10sXz1bXTtmb3IoeT0wO3k8Yy5sZW5ndGg7Kyt5KXt2YXIgdz1jW3ldO2lmKHcudHlwZS5pbmRleE9mKFwibWF0XCIpPj0wKXtmb3IodmFyIGs9MHx3LnR5cGUuY2hhckF0KHcudHlwZS5sZW5ndGgtMSksQT1uZXcgQXJyYXkoayksVD0wO1Q8azsrK1QpQVtUXT1fLmxlbmd0aCxiLnB1c2gody5uYW1lK1wiW1wiK1QrXCJdXCIpLFwibnVtYmVyXCI9PXR5cGVvZiB3LmxvY2F0aW9uP18ucHVzaCh3LmxvY2F0aW9uK1QpOkFycmF5LmlzQXJyYXkody5sb2NhdGlvbikmJncubG9jYXRpb24ubGVuZ3RoPT09ayYmXCJudW1iZXJcIj09dHlwZW9mIHcubG9jYXRpb25bVF0/Xy5wdXNoKDB8dy5sb2NhdGlvbltUXSk6Xy5wdXNoKC0xKTt4LnB1c2goe25hbWU6dy5uYW1lLHR5cGU6dy50eXBlLGxvY2F0aW9uczpBfSl9ZWxzZSB4LnB1c2goe25hbWU6dy5uYW1lLHR5cGU6dy50eXBlLGxvY2F0aW9uczpbXy5sZW5ndGhdfSksYi5wdXNoKHcubmFtZSksXCJudW1iZXJcIj09dHlwZW9mIHcubG9jYXRpb24/Xy5wdXNoKDB8dy5sb2NhdGlvbik6Xy5wdXNoKC0xKX12YXIgTT0wO2Zvcih5PTA7eTxfLmxlbmd0aDsrK3kpaWYoX1t5XTwwKXtmb3IoO18uaW5kZXhPZihNKT49MDspTSs9MTtfW3ldPU19dmFyIFM9bmV3IEFycmF5KHIubGVuZ3RoKTtmdW5jdGlvbiBFKCl7Zi5wcm9ncmFtPW8ucHJvZ3JhbShwLGYuX3ZyZWYsZi5fZnJlZixiLF8pO2Zvcih2YXIgdD0wO3Q8ci5sZW5ndGg7Kyt0KVNbdF09cC5nZXRVbmlmb3JtTG9jYXRpb24oZi5wcm9ncmFtLHJbdF0ubmFtZSl9RSgpLGYuX3JlbGluaz1FLGYudHlwZXM9e3VuaWZvcm1zOmEociksYXR0cmlidXRlczphKGMpfSxmLmF0dHJpYnV0ZXM9aShwLGYseCxfKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZixcInVuaWZvcm1zXCIsbihwLGYscixTKSl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPW5ldyBjKHQpO3JldHVybiBhLnVwZGF0ZShlLHIsbixpKSxhfX0se1wiLi9saWIvR0xFcnJvclwiOjI5OSxcIi4vbGliL2NyZWF0ZS1hdHRyaWJ1dGVzXCI6MzAwLFwiLi9saWIvY3JlYXRlLXVuaWZvcm1zXCI6MzAxLFwiLi9saWIvcmVmbGVjdFwiOjMwMixcIi4vbGliL3J1bnRpbWUtcmVmbGVjdFwiOjMwMyxcIi4vbGliL3NoYWRlci1jYWNoZVwiOjMwNH1dLDI5OTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe3RoaXMuc2hvcnRNZXNzYWdlPWV8fFwiXCIsdGhpcy5sb25nTWVzc2FnZT1yfHxcIlwiLHRoaXMucmF3RXJyb3I9dHx8XCJcIix0aGlzLm1lc3NhZ2U9XCJnbC1zaGFkZXI6IFwiKyhlfHx0fHxcIlwiKSsocj9cIlxcblwiK3I6XCJcIiksdGhpcy5zdGFjaz0obmV3IEVycm9yKS5zdGFja31uLnByb3RvdHlwZT1uZXcgRXJyb3Isbi5wcm90b3R5cGUubmFtZT1cIkdMRXJyb3JcIixuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uLGUuZXhwb3J0cz1ufSx7fV0sMzAwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe2Zvcih2YXIgYT17fSxsPTAsYz1yLmxlbmd0aDtsPGM7KytsKXt2YXIgdT1yW2xdLGg9dS5uYW1lLGY9dS50eXBlLHA9dS5sb2NhdGlvbnM7c3dpdGNoKGYpe2Nhc2VcImJvb2xcIjpjYXNlXCJpbnRcIjpjYXNlXCJmbG9hdFwiOm8odCxlLHBbMF0saSwxLGEsaCk7YnJlYWs7ZGVmYXVsdDppZihmLmluZGV4T2YoXCJ2ZWNcIik+PTApe3ZhciBkPWYuY2hhckNvZGVBdChmLmxlbmd0aC0xKS00ODtpZihkPDJ8fGQ+NCl0aHJvdyBuZXcgbihcIlwiLFwiSW52YWxpZCBkYXRhIHR5cGUgZm9yIGF0dHJpYnV0ZSBcIitoK1wiOiBcIitmKTtvKHQsZSxwWzBdLGksZCxhLGgpfWVsc2V7aWYoIShmLmluZGV4T2YoXCJtYXRcIik+PTApKXRocm93IG5ldyBuKFwiXCIsXCJVbmtub3duIGRhdGEgdHlwZSBmb3IgYXR0cmlidXRlIFwiK2grXCI6IFwiK2YpO3ZhciBkPWYuY2hhckNvZGVBdChmLmxlbmd0aC0xKS00ODtpZihkPDJ8fGQ+NCl0aHJvdyBuZXcgbihcIlwiLFwiSW52YWxpZCBkYXRhIHR5cGUgZm9yIGF0dHJpYnV0ZSBcIitoK1wiOiBcIitmKTtzKHQsZSxwLGksZCxhLGgpfX19cmV0dXJuIGF9O3ZhciBuPXQoXCIuL0dMRXJyb3JcIik7ZnVuY3Rpb24gaSh0LGUscixuLGksYSl7dGhpcy5fZ2w9dCx0aGlzLl93cmFwcGVyPWUsdGhpcy5faW5kZXg9cix0aGlzLl9sb2NhdGlvbnM9bix0aGlzLl9kaW1lbnNpb249aSx0aGlzLl9jb25zdEZ1bmM9YX12YXIgYT1pLnByb3RvdHlwZTtmdW5jdGlvbiBvKHQsZSxyLG4sYSxvLHMpe2Zvcih2YXIgbD1bXCJnbFwiLFwidlwiXSxjPVtdLHU9MDt1PGE7Kyt1KWwucHVzaChcInhcIit1KSxjLnB1c2goXCJ4XCIrdSk7bC5wdXNoKFwiaWYoeDAubGVuZ3RoPT09dm9pZCAwKXtyZXR1cm4gZ2wudmVydGV4QXR0cmliXCIrYStcImYodixcIitjLmpvaW4oKStcIil9ZWxzZXtyZXR1cm4gZ2wudmVydGV4QXR0cmliXCIrYStcImZ2KHYseDApfVwiKTt2YXIgaD1GdW5jdGlvbi5hcHBseShudWxsLGwpLGY9bmV3IGkodCxlLHIsbixhLGgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHMse3NldDpmdW5jdGlvbihlKXtyZXR1cm4gdC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkobltyXSksaCh0LG5bcl0sZSksZX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGZ9LGVudW1lcmFibGU6ITB9KX1mdW5jdGlvbiBzKHQsZSxyLG4saSxhLHMpe2Zvcih2YXIgbD1uZXcgQXJyYXkoaSksYz1uZXcgQXJyYXkoaSksdT0wO3U8aTsrK3Upbyh0LGUsclt1XSxuLGksbCx1KSxjW3VdPWxbdV07T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsXCJsb2NhdGlvblwiLHtzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIGU9MDtlPGk7KytlKWNbZV0ubG9jYXRpb249dFtlXTtlbHNlIGZvcihlPTA7ZTxpOysrZSljW2VdLmxvY2F0aW9uPXQrZTtyZXR1cm4gdH0sZ2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBBcnJheShpKSxlPTA7ZTxpOysrZSl0W2VdPW5bcltlXV07cmV0dXJuIHR9LGVudW1lcmFibGU6ITB9KSxsLnBvaW50ZXI9ZnVuY3Rpb24oZSxhLG8scyl7ZT1lfHx0LkZMT0FULGE9ISFhLG89b3x8aSppLHM9c3x8MDtmb3IodmFyIGw9MDtsPGk7KytsKXt2YXIgYz1uW3JbbF1dO3QudmVydGV4QXR0cmliUG9pbnRlcihjLGksZSxhLG8scytsKmkpLHQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYyl9fTt2YXIgaD1uZXcgQXJyYXkoaSksZj10W1widmVydGV4QXR0cmliXCIraStcImZ2XCJdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLHMse3NldDpmdW5jdGlvbihlKXtmb3IodmFyIGE9MDthPGk7KythKXt2YXIgbz1uW3JbYV1dO2lmKHQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KG8pLEFycmF5LmlzQXJyYXkoZVswXSkpZi5jYWxsKHQsbyxlW2FdKTtlbHNle2Zvcih2YXIgcz0wO3M8aTsrK3MpaFtzXT1lW2kqYStzXTtmLmNhbGwodCxvLGgpfX1yZXR1cm4gZX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx9LGVudW1lcmFibGU6ITB9KX1hLnBvaW50ZXI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5fZ2wsYT10aGlzLl9sb2NhdGlvbnNbdGhpcy5faW5kZXhdO2kudmVydGV4QXR0cmliUG9pbnRlcihhLHRoaXMuX2RpbWVuc2lvbix0fHxpLkZMT0FULCEhZSxyfHwwLG58fDApLGkuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYSl9LGEuc2V0PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLl9jb25zdEZ1bmModGhpcy5fbG9jYXRpb25zW3RoaXMuX2luZGV4XSx0LGUscixuKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsXCJsb2NhdGlvblwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9jYXRpb25zW3RoaXMuX2luZGV4XX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0IT09dGhpcy5fbG9jYXRpb25zW3RoaXMuX2luZGV4XSYmKHRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF09MHx0LHRoaXMuX3dyYXBwZXIucHJvZ3JhbT1udWxsKSwwfHR9fSl9LHtcIi4vR0xFcnJvclwiOjI5OX1dLDMwMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL3JlZmxlY3RcIiksaT10KFwiLi9HTEVycm9yXCIpO2Z1bmN0aW9uIGEodCl7cmV0dXJuIG5ldyBGdW5jdGlvbihcInlcIixcInJldHVybiBmdW5jdGlvbigpe3JldHVybiB5fVwiKSh0KX1mdW5jdGlvbiBvKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWU7cmV0dXJuIHJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwodCxlLHIpe3N3aXRjaChyKXtjYXNlXCJib29sXCI6Y2FzZVwiaW50XCI6Y2FzZVwic2FtcGxlcjJEXCI6Y2FzZVwic2FtcGxlckN1YmVcIjpyZXR1cm5cImdsLnVuaWZvcm0xaShsb2NhdGlvbnNbXCIrZStcIl0sb2JqXCIrdCtcIilcIjtjYXNlXCJmbG9hdFwiOnJldHVyblwiZ2wudW5pZm9ybTFmKGxvY2F0aW9uc1tcIitlK1wiXSxvYmpcIit0K1wiKVwiO2RlZmF1bHQ6dmFyIG49ci5pbmRleE9mKFwidmVjXCIpO2lmKCEoMDw9biYmbjw9MSYmci5sZW5ndGg9PT00K24pKXtpZigwPT09ci5pbmRleE9mKFwibWF0XCIpJiY0PT09ci5sZW5ndGgpe3ZhciBhPXIuY2hhckNvZGVBdChyLmxlbmd0aC0xKS00ODtpZihhPDJ8fGE+NCl0aHJvdyBuZXcgaShcIlwiLFwiSW52YWxpZCB1bmlmb3JtIGRpbWVuc2lvbiB0eXBlIGZvciBtYXRyaXggXCIrbmFtZStcIjogXCIrcik7cmV0dXJuXCJnbC51bmlmb3JtTWF0cml4XCIrYStcImZ2KGxvY2F0aW9uc1tcIitlK1wiXSxmYWxzZSxvYmpcIit0K1wiKVwifXRocm93IG5ldyBpKFwiXCIsXCJVbmtub3duIHVuaWZvcm0gZGF0YSB0eXBlIGZvciBcIituYW1lK1wiOiBcIityKX12YXIgYT1yLmNoYXJDb2RlQXQoci5sZW5ndGgtMSktNDg7aWYoYTwyfHxhPjQpdGhyb3cgbmV3IGkoXCJcIixcIkludmFsaWQgZGF0YSB0eXBlXCIpO3N3aXRjaChyLmNoYXJBdCgwKSl7Y2FzZVwiYlwiOmNhc2VcImlcIjpyZXR1cm5cImdsLnVuaWZvcm1cIithK1wiaXYobG9jYXRpb25zW1wiK2UrXCJdLG9ialwiK3QrXCIpXCI7Y2FzZVwidlwiOnJldHVyblwiZ2wudW5pZm9ybVwiK2ErXCJmdihsb2NhdGlvbnNbXCIrZStcIl0sb2JqXCIrdCtcIilcIjtkZWZhdWx0OnRocm93IG5ldyBpKFwiXCIsXCJVbnJlY29nbml6ZWQgZGF0YSB0eXBlIGZvciB2ZWN0b3IgXCIrbmFtZStcIjogXCIrcil9fX1mdW5jdGlvbiBjKGUpe2Zvcih2YXIgbj1bXCJyZXR1cm4gZnVuY3Rpb24gdXBkYXRlUHJvcGVydHkob2JqKXtcIl0saT1mdW5jdGlvbiB0KGUscil7aWYoXCJvYmplY3RcIiE9dHlwZW9mIHIpcmV0dXJuW1tlLHJdXTt2YXIgbj1bXTtmb3IodmFyIGkgaW4gcil7dmFyIGE9cltpXSxvPWU7cGFyc2VJbnQoaSkrXCJcIj09PWk/bys9XCJbXCIraStcIl1cIjpvKz1cIi5cIitpLFwib2JqZWN0XCI9PXR5cGVvZiBhP24ucHVzaC5hcHBseShuLHQobyxhKSk6bi5wdXNoKFtvLGFdKX1yZXR1cm4gbn0oXCJcIixlKSxhPTA7YTxpLmxlbmd0aDsrK2Epe3ZhciBvPWlbYV0sYz1vWzBdLHU9b1sxXTtzW3VdJiZuLnB1c2gobChjLHUsclt1XS50eXBlKSl9bi5wdXNoKFwicmV0dXJuIG9ian1cIik7dmFyIGg9bmV3IEZ1bmN0aW9uKFwiZ2xcIixcImxvY2F0aW9uc1wiLG4uam9pbihcIlxcblwiKSk7cmV0dXJuIGgodCxzKX1mdW5jdGlvbiB1KG4sbCx1KXtpZihcIm9iamVjdFwiPT10eXBlb2YgdSl7dmFyIGY9aCh1KTtPYmplY3QuZGVmaW5lUHJvcGVydHkobixsLHtnZXQ6YShmKSxzZXQ6Yyh1KSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pfWVsc2Ugc1t1XT9PYmplY3QuZGVmaW5lUHJvcGVydHkobixsLHtnZXQ6KHA9dSxuZXcgRnVuY3Rpb24oXCJnbFwiLFwid3JhcHBlclwiLFwibG9jYXRpb25zXCIsXCJyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZ2wuZ2V0VW5pZm9ybSh3cmFwcGVyLnByb2dyYW0sbG9jYXRpb25zW1wiK3ArXCJdKX1cIikodCxlLHMpKSxzZXQ6Yyh1KSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pOm5bbF09ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2VcImJvb2xcIjpyZXR1cm4hMTtjYXNlXCJpbnRcIjpjYXNlXCJzYW1wbGVyMkRcIjpjYXNlXCJzYW1wbGVyQ3ViZVwiOmNhc2VcImZsb2F0XCI6cmV0dXJuIDA7ZGVmYXVsdDp2YXIgZT10LmluZGV4T2YoXCJ2ZWNcIik7aWYoMDw9ZSYmZTw9MSYmdC5sZW5ndGg9PT00K2Upe3ZhciByPXQuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKS00ODtpZihyPDJ8fHI+NCl0aHJvdyBuZXcgaShcIlwiLFwiSW52YWxpZCBkYXRhIHR5cGVcIik7cmV0dXJuXCJiXCI9PT10LmNoYXJBdCgwKT9vKHIsITEpOm8ociwwKX1pZigwPT09dC5pbmRleE9mKFwibWF0XCIpJiY0PT09dC5sZW5ndGgpe3ZhciByPXQuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKS00ODtpZihyPDJ8fHI+NCl0aHJvdyBuZXcgaShcIlwiLFwiSW52YWxpZCB1bmlmb3JtIGRpbWVuc2lvbiB0eXBlIGZvciBtYXRyaXggXCIrbmFtZStcIjogXCIrdCk7cmV0dXJuIG8ocipyLDApfXRocm93IG5ldyBpKFwiXCIsXCJVbmtub3duIHVuaWZvcm0gZGF0YSB0eXBlIGZvciBcIituYW1lK1wiOiBcIit0KX19KHJbdV0udHlwZSk7dmFyIHB9ZnVuY3Rpb24gaCh0KXt2YXIgZTtpZihBcnJheS5pc0FycmF5KHQpKXtlPW5ldyBBcnJheSh0Lmxlbmd0aCk7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpdShlLHIsdFtyXSl9ZWxzZSBmb3IodmFyIG4gaW4gZT17fSx0KXUoZSxuLHRbbl0pO3JldHVybiBlfXZhciBmPW4ociwhMCk7cmV0dXJue2dldDphKGgoZikpLHNldDpjKGYpLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfX19LHtcIi4vR0xFcnJvclwiOjI5OSxcIi4vcmVmbGVjdFwiOjMwMn1dLDMwMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXRbbl0ubmFtZSxhPWkuc3BsaXQoXCIuXCIpLG89cixzPTA7czxhLmxlbmd0aDsrK3Mpe3ZhciBsPWFbc10uc3BsaXQoXCJbXCIpO2lmKGwubGVuZ3RoPjEpe2xbMF1pbiBvfHwob1tsWzBdXT1bXSksbz1vW2xbMF1dO2Zvcih2YXIgYz0xO2M8bC5sZW5ndGg7KytjKXt2YXIgdT1wYXJzZUludChsW2NdKTtjPGwubGVuZ3RoLTF8fHM8YS5sZW5ndGgtMT8odSBpbiBvfHwoYzxsLmxlbmd0aC0xP29bdV09W106b1t1XT17fSksbz1vW3VdKTpvW3VdPWU/bjp0W25dLnR5cGV9fWVsc2UgczxhLmxlbmd0aC0xPyhsWzBdaW4gb3x8KG9bbFswXV09e30pLG89b1tsWzBdXSk6b1tsWzBdXT1lP246dFtuXS50eXBlfXJldHVybiByfX0se31dLDMwMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IudW5pZm9ybXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsdC5BQ1RJVkVfVU5JRk9STVMpLG49W10saT0wO2k8cjsrK2kpe3ZhciBvPXQuZ2V0QWN0aXZlVW5pZm9ybShlLGkpO2lmKG8pe3ZhciBzPWEodCxvLnR5cGUpO2lmKG8uc2l6ZT4xKWZvcih2YXIgbD0wO2w8by5zaXplOysrbCluLnB1c2goe25hbWU6by5uYW1lLnJlcGxhY2UoXCJbMF1cIixcIltcIitsK1wiXVwiKSx0eXBlOnN9KTtlbHNlIG4ucHVzaCh7bmFtZTpvLm5hbWUsdHlwZTpzfSl9fXJldHVybiBufSxyLmF0dHJpYnV0ZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsdC5BQ1RJVkVfQVRUUklCVVRFUyksbj1bXSxpPTA7aTxyOysraSl7dmFyIG89dC5nZXRBY3RpdmVBdHRyaWIoZSxpKTtvJiZuLnB1c2goe25hbWU6by5uYW1lLHR5cGU6YSh0LG8udHlwZSl9KX1yZXR1cm4gbn07dmFyIG49e0ZMT0FUOlwiZmxvYXRcIixGTE9BVF9WRUMyOlwidmVjMlwiLEZMT0FUX1ZFQzM6XCJ2ZWMzXCIsRkxPQVRfVkVDNDpcInZlYzRcIixJTlQ6XCJpbnRcIixJTlRfVkVDMjpcIml2ZWMyXCIsSU5UX1ZFQzM6XCJpdmVjM1wiLElOVF9WRUM0OlwiaXZlYzRcIixCT09MOlwiYm9vbFwiLEJPT0xfVkVDMjpcImJ2ZWMyXCIsQk9PTF9WRUMzOlwiYnZlYzNcIixCT09MX1ZFQzQ6XCJidmVjNFwiLEZMT0FUX01BVDI6XCJtYXQyXCIsRkxPQVRfTUFUMzpcIm1hdDNcIixGTE9BVF9NQVQ0OlwibWF0NFwiLFNBTVBMRVJfMkQ6XCJzYW1wbGVyMkRcIixTQU1QTEVSX0NVQkU6XCJzYW1wbGVyQ3ViZVwifSxpPW51bGw7ZnVuY3Rpb24gYSh0LGUpe2lmKCFpKXt2YXIgcj1PYmplY3Qua2V5cyhuKTtpPXt9O2Zvcih2YXIgYT0wO2E8ci5sZW5ndGg7KythKXt2YXIgbz1yW2FdO2lbdFtvXV09bltvXX19cmV0dXJuIGlbZV19fSx7fV0sMzA0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ci5zaGFkZXI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB1KHQpLmdldFNoYWRlclJlZmVyZW5jZShlLHIpfSxyLnByb2dyYW09ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdSh0KS5nZXRQcm9ncmFtKGUscixuLGkpfTt2YXIgbj10KFwiLi9HTEVycm9yXCIpLGk9dChcImdsLWZvcm1hdC1jb21waWxlci1lcnJvclwiKSxhPW5ldyhcInVuZGVmaW5lZFwiPT10eXBlb2YgV2Vha01hcD90KFwid2Vha21hcC1zaGltXCIpOldlYWtNYXApLG89MDtmdW5jdGlvbiBzKHQsZSxyLG4saSxhLG8pe3RoaXMuaWQ9dCx0aGlzLnNyYz1lLHRoaXMudHlwZT1yLHRoaXMuc2hhZGVyPW4sdGhpcy5jb3VudD1hLHRoaXMucHJvZ3JhbXM9W10sdGhpcy5jYWNoZT1vfWZ1bmN0aW9uIGwodCl7dGhpcy5nbD10LHRoaXMuc2hhZGVycz1be30se31dLHRoaXMucHJvZ3JhbXM9e319cy5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe2lmKDA9PS0tdGhpcy5jb3VudCl7Zm9yKHZhciB0PXRoaXMuY2FjaGUsZT10LmdsLHI9dGhpcy5wcm9ncmFtcyxuPTAsaT1yLmxlbmd0aDtuPGk7KytuKXt2YXIgYT10LnByb2dyYW1zW3Jbbl1dO2EmJihkZWxldGUgdC5wcm9ncmFtc1tuXSxlLmRlbGV0ZVByb2dyYW0oYSkpfWUuZGVsZXRlU2hhZGVyKHRoaXMuc2hhZGVyKSxkZWxldGUgdC5zaGFkZXJzW3RoaXMudHlwZT09PWUuRlJBR01FTlRfU0hBREVSfDBdW3RoaXMuc3JjXX19O3ZhciBjPWwucHJvdG90eXBlO2Z1bmN0aW9uIHUodCl7dmFyIGU9YS5nZXQodCk7cmV0dXJuIGV8fChlPW5ldyBsKHQpLGEuc2V0KHQsZSkpLGV9Yy5nZXRTaGFkZXJSZWZlcmVuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdsLGE9dGhpcy5zaGFkZXJzW3Q9PT1yLkZSQUdNRU5UX1NIQURFUnwwXSxsPWFbZV07aWYobCYmci5pc1NoYWRlcihsLnNoYWRlcikpbC5jb3VudCs9MTtlbHNle3ZhciBjPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT10LmNyZWF0ZVNoYWRlcihlKTtpZih0LnNoYWRlclNvdXJjZShhLHIpLHQuY29tcGlsZVNoYWRlcihhKSwhdC5nZXRTaGFkZXJQYXJhbWV0ZXIoYSx0LkNPTVBJTEVfU1RBVFVTKSl7dmFyIG89dC5nZXRTaGFkZXJJbmZvTG9nKGEpO3RyeXt2YXIgcz1pKG8scixlKX1jYXRjaCh0KXt0aHJvdyBjb25zb2xlLndhcm4oXCJGYWlsZWQgdG8gZm9ybWF0IGNvbXBpbGVyIGVycm9yOiBcIit0KSxuZXcgbihvLFwiRXJyb3IgY29tcGlsaW5nIHNoYWRlcjpcXG5cIitvKX10aHJvdyBuZXcgbihvLHMuc2hvcnQscy5sb25nKX1yZXR1cm4gYX0ocix0LGUpO2w9YVtlXT1uZXcgcyhvKyssZSx0LGMsW10sMSx0aGlzKX1yZXR1cm4gbH0sYy5nZXRQcm9ncmFtPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPVt0LmlkLGUuaWQsci5qb2luKFwiOlwiKSxpLmpvaW4oXCI6XCIpXS5qb2luKFwiQFwiKSxvPXRoaXMucHJvZ3JhbXNbYV07cmV0dXJuIG8mJnRoaXMuZ2wuaXNQcm9ncmFtKG8pfHwodGhpcy5wcm9ncmFtc1thXT1vPWZ1bmN0aW9uKHQsZSxyLGksYSl7dmFyIG89dC5jcmVhdGVQcm9ncmFtKCk7dC5hdHRhY2hTaGFkZXIobyxlKSx0LmF0dGFjaFNoYWRlcihvLHIpO2Zvcih2YXIgcz0wO3M8aS5sZW5ndGg7KytzKXQuYmluZEF0dHJpYkxvY2F0aW9uKG8sYVtzXSxpW3NdKTtpZih0LmxpbmtQcm9ncmFtKG8pLCF0LmdldFByb2dyYW1QYXJhbWV0ZXIobyx0LkxJTktfU1RBVFVTKSl7dmFyIGw9dC5nZXRQcm9ncmFtSW5mb0xvZyhvKTt0aHJvdyBuZXcgbihsLFwiRXJyb3IgbGlua2luZyBwcm9ncmFtOiBcIitsKX1yZXR1cm4gb30odGhpcy5nbCx0LnNoYWRlcixlLnNoYWRlcixyLGkpLHQucHJvZ3JhbXMucHVzaChhKSxlLnByb2dyYW1zLnB1c2goYSkpLG99fSx7XCIuL0dMRXJyb3JcIjoyOTksXCJnbC1mb3JtYXQtY29tcGlsZXItZXJyb3JcIjoyNDcsXCJ3ZWFrbWFwLXNoaW1cIjo1NDB9XSwzMDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe3RoaXMucGxvdD10LHRoaXMuZW5hYmxlPVshMCwhMCwhMSwhMV0sdGhpcy53aWR0aD1bMSwxLDEsMV0sdGhpcy5jb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmNlbnRlcj1bMS8wLDEvMF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IG4odCk7cmV0dXJuIHIudXBkYXRlKGUpLHQuYWRkT3ZlcmxheShyKSxyfTt2YXIgaT1uLnByb3RvdHlwZTtpLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9LHRoaXMuZW5hYmxlPSh0LmVuYWJsZXx8WyEwLCEwLCExLCExXSkuc2xpY2UoKSx0aGlzLndpZHRoPSh0LndpZHRofHxbMSwxLDEsMV0pLnNsaWNlKCksdGhpcy5jb2xvcj0odC5jb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgpfSksdGhpcy5jZW50ZXI9KHQuY2VudGVyfHxbMS8wLDEvMF0pLnNsaWNlKCksdGhpcy5wbG90LnNldE92ZXJsYXlEaXJ0eSgpfSxpLmRyYXc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVuYWJsZSxlPXRoaXMud2lkdGgscj10aGlzLmNvbG9yLG49dGhpcy5jZW50ZXIsaT10aGlzLnBsb3QsYT1pLmxpbmUsbz1pLmRhdGFCb3gscz1pLnZpZXdCb3g7aWYoYS5iaW5kKCksb1swXTw9blswXSYmblswXTw9b1syXSYmb1sxXTw9blsxXSYmblsxXTw9b1szXSl7dmFyIGw9c1swXSsoblswXS1vWzBdKS8ob1syXS1vWzBdKSooc1syXS1zWzBdKSxjPXNbMV0rKG5bMV0tb1sxXSkvKG9bM10tb1sxXSkqKHNbM10tc1sxXSk7dFswXSYmYS5kcmF3TGluZShsLGMsc1swXSxjLGVbMF0sclswXSksdFsxXSYmYS5kcmF3TGluZShsLGMsbCxzWzFdLGVbMV0sclsxXSksdFsyXSYmYS5kcmF3TGluZShsLGMsc1syXSxjLGVbMl0sclsyXSksdFszXSYmYS5kcmF3TGluZShsLGMsbCxzWzNdLGVbM10sclszXSl9fSxpLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnBsb3QucmVtb3ZlT3ZlcmxheSh0aGlzKX19LHt9XSwzMDY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2xzbGlmeVwiKSxpPXQoXCJnbC1zaGFkZXJcIiksYT1uKFtcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24sIGNvbG9yO1xcbmF0dHJpYnV0ZSBmbG9hdCB3ZWlnaHQ7XFxuXFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcbnVuaWZvcm0gdmVjMyBjb29yZGluYXRlc1szXTtcXG51bmlmb3JtIHZlYzQgY29sb3JzWzNdO1xcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaGFwZTtcXG51bmlmb3JtIGZsb2F0IGxpbmVXaWR0aDtcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzMgdmVydGV4UG9zaXRpb24gPSBtaXgoY29vcmRpbmF0ZXNbMF0sXFxuICAgIG1peChjb29yZGluYXRlc1syXSwgY29vcmRpbmF0ZXNbMV0sIDAuNSAqIChwb3NpdGlvbiArIDEuMCkpLCBhYnMocG9zaXRpb24pKTtcXG5cXG4gIHZlYzQgY2xpcFBvcyA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHZlcnRleFBvc2l0aW9uLCAxLjApO1xcbiAgdmVjMiBjbGlwT2Zmc2V0ID0gKHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KGNvbG9yLCAwLjApKS54eTtcXG4gIHZlYzIgZGVsdGEgPSB3ZWlnaHQgKiBjbGlwT2Zmc2V0ICogc2NyZWVuU2hhcGU7XFxuICB2ZWMyIGxpbmVPZmZzZXQgPSBub3JtYWxpemUodmVjMihkZWx0YS55LCAtZGVsdGEueCkpIC8gc2NyZWVuU2hhcGU7XFxuXFxuICBnbF9Qb3NpdGlvbiAgID0gdmVjNChjbGlwUG9zLnh5ICsgY2xpcFBvcy53ICogMC41ICogbGluZVdpZHRoICogbGluZU9mZnNldCwgY2xpcFBvcy56LCBjbGlwUG9zLncpO1xcbiAgZnJhZ0NvbG9yICAgICA9IGNvbG9yLnggKiBjb2xvcnNbMF0gKyBjb2xvci55ICogY29sb3JzWzFdICsgY29sb3IueiAqIGNvbG9yc1syXTtcXG59XFxuXCJdKSxvPW4oW1wicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjtcXG59XCJdKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxhLG8sbnVsbCxbe25hbWU6XCJwb3NpdGlvblwiLHR5cGU6XCJ2ZWMzXCJ9LHtuYW1lOlwiY29sb3JcIix0eXBlOlwidmVjM1wifSx7bmFtZTpcIndlaWdodFwiLHR5cGU6XCJmbG9hdFwifV0pfX0se1wiZ2wtc2hhZGVyXCI6Mjk4LGdsc2xpZnk6NDAyfV0sMzA3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsLWJ1ZmZlclwiKSxpPXQoXCJnbC12YW9cIiksYT10KFwiLi9zaGFkZXJzL2luZGV4XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPVtdO2Z1bmN0aW9uIG8odCxlLG4saSxhLG8pe3ZhciBzPVt0LGUsbiwwLDAsMCwxXTtzW2krM109MSxzW2ldPWEsci5wdXNoLmFwcGx5KHIscyksc1s2XT0tMSxyLnB1c2guYXBwbHkocixzKSxzW2ldPW8sci5wdXNoLmFwcGx5KHIscyksci5wdXNoLmFwcGx5KHIscyksc1s2XT0xLHIucHVzaC5hcHBseShyLHMpLHNbaV09YSxyLnB1c2guYXBwbHkocixzKX1vKDAsMCwwLDAsMCwxKSxvKDAsMCwwLDEsMCwxKSxvKDAsMCwwLDIsMCwxKSxvKDEsMCwwLDEsLTEsMSksbygxLDAsMCwyLC0xLDEpLG8oMCwxLDAsMCwtMSwxKSxvKDAsMSwwLDIsLTEsMSksbygwLDAsMSwwLC0xLDEpLG8oMCwwLDEsMSwtMSwxKTt2YXIgbD1uKHQsciksYz1pKHQsW3t0eXBlOnQuRkxPQVQsYnVmZmVyOmwsc2l6ZTozLG9mZnNldDowLHN0cmlkZToyOH0se3R5cGU6dC5GTE9BVCxidWZmZXI6bCxzaXplOjMsb2Zmc2V0OjEyLHN0cmlkZToyOH0se3R5cGU6dC5GTE9BVCxidWZmZXI6bCxzaXplOjEsb2Zmc2V0OjI0LHN0cmlkZToyOH1dKSx1PWEodCk7dS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsdS5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTEsdS5hdHRyaWJ1dGVzLndlaWdodC5sb2NhdGlvbj0yO3ZhciBoPW5ldyBzKHQsbCxjLHUpO3JldHVybiBoLnVwZGF0ZShlKSxofTt2YXIgbz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24gcyh0LGUscixuKXt0aGlzLmdsPXQsdGhpcy5idWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMuc2hhZGVyPW4sdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5ib3VuZHM9W1stMWUzLC0xZTMsLTFlM10sWzFlMywxZTMsMWUzXV0sdGhpcy5wb3NpdGlvbj1bMCwwLDBdLHRoaXMubGluZVdpZHRoPVsyLDIsMl0sdGhpcy5jb2xvcnM9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmVuYWJsZWQ9WyEwLCEwLCEwXSx0aGlzLmRyYXdTaWRlcz1bITAsITAsITBdLHRoaXMuYXhlcz1udWxsfXZhciBsPXMucHJvdG90eXBlLGM9WzAsMCwwXSx1PVswLDAsMF0saD1bMCwwXTtsLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5kcmF3VHJhbnNwYXJlbnQ9ZnVuY3Rpb24odCl7fSxsLmRyYXc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nbCxyPXRoaXMudmFvLG49dGhpcy5zaGFkZXI7ci5iaW5kKCksbi5iaW5kKCk7dmFyIGksYT10Lm1vZGVsfHxvLHM9dC52aWV3fHxvLGw9dC5wcm9qZWN0aW9ufHxvO3RoaXMuYXhlcyYmKGk9dGhpcy5heGVzLmxhc3RDdWJlUHJvcHMuYXhpcyk7Zm9yKHZhciBmPWMscD11LGQ9MDtkPDM7KytkKWkmJmlbZF08MD8oZltkXT10aGlzLmJvdW5kc1swXVtkXSxwW2RdPXRoaXMuYm91bmRzWzFdW2RdKTooZltkXT10aGlzLmJvdW5kc1sxXVtkXSxwW2RdPXRoaXMuYm91bmRzWzBdW2RdKTtoWzBdPWUuZHJhd2luZ0J1ZmZlcldpZHRoLGhbMV09ZS5kcmF3aW5nQnVmZmVySGVpZ2h0LG4udW5pZm9ybXMubW9kZWw9YSxuLnVuaWZvcm1zLnZpZXc9cyxuLnVuaWZvcm1zLnByb2plY3Rpb249bCxuLnVuaWZvcm1zLmNvb3JkaW5hdGVzPVt0aGlzLnBvc2l0aW9uLGYscF0sbi51bmlmb3Jtcy5jb2xvcnM9dGhpcy5jb2xvcnMsbi51bmlmb3Jtcy5zY3JlZW5TaGFwZT1oO2ZvcihkPTA7ZDwzOysrZCluLnVuaWZvcm1zLmxpbmVXaWR0aD10aGlzLmxpbmVXaWR0aFtkXSp0aGlzLnBpeGVsUmF0aW8sdGhpcy5lbmFibGVkW2RdJiYoci5kcmF3KGUuVFJJQU5HTEVTLDYsNipkKSx0aGlzLmRyYXdTaWRlc1tkXSYmci5kcmF3KGUuVFJJQU5HTEVTLDEyLDE4KzEyKmQpKTtyLnVuYmluZCgpfSxsLnVwZGF0ZT1mdW5jdGlvbih0KXt0JiYoXCJib3VuZHNcImluIHQmJih0aGlzLmJvdW5kcz10LmJvdW5kcyksXCJwb3NpdGlvblwiaW4gdCYmKHRoaXMucG9zaXRpb249dC5wb3NpdGlvbiksXCJsaW5lV2lkdGhcImluIHQmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCksXCJjb2xvcnNcImluIHQmJih0aGlzLmNvbG9ycz10LmNvbG9ycyksXCJlbmFibGVkXCJpbiB0JiYodGhpcy5lbmFibGVkPXQuZW5hYmxlZCksXCJkcmF3U2lkZXNcImluIHQmJih0aGlzLmRyYXdTaWRlcz10LmRyYXdTaWRlcykpfSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZhby5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHtcIi4vc2hhZGVycy9pbmRleFwiOjMwNixcImdsLWJ1ZmZlclwiOjIzOCxcImdsLXZhb1wiOjMyMH1dLDMwODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCJnbHNsaWZ5XCIpLGk9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuXFxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxudmVjMyBnZXRPcnRob2dvbmFsVmVjdG9yKHZlYzMgdikge1xcbiAgLy8gUmV0dXJuIHVwLXZlY3RvciBmb3Igb25seS16IHZlY3Rvci5cXG4gIC8vIFJldHVybiBheCArIGJ5ICsgY3ogPSAwLCBhIHBvaW50IHRoYXQgbGllcyBvbiB0aGUgcGxhbmUgdGhhdCBoYXMgdiBhcyBhIG5vcm1hbCBhbmQgdGhhdCBpc24ndCAoMCwwLDApLlxcbiAgLy8gRnJvbSB0aGUgYWJvdmUgaWYtc3RhdGVtZW50IHdlIGhhdmUgfHxhfHwgPiAwICBVICB8fGJ8fCA+IDAuXFxuICAvLyBBc3NpZ24geiA9IDAsIHggPSAtYiwgeSA9IGE6XFxuICAvLyBhKi1iICsgYiphICsgYyowID0gLWJhICsgYmEgKyAwID0gMFxcbiAgaWYgKHYueCp2LnggPiB2Lnoqdi56IHx8IHYueSp2LnkgPiB2Lnoqdi56KSB7XFxuICAgIHJldHVybiBub3JtYWxpemUodmVjMygtdi55LCB2LngsIDAuMCkpO1xcbiAgfSBlbHNlIHtcXG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKDAuMCwgdi56LCAtdi55KSk7XFxuICB9XFxufVxcblxcbi8vIENhbGN1bGF0ZSB0aGUgdHViZSB2ZXJ0ZXggYW5kIG5vcm1hbCBhdCB0aGUgZ2l2ZW4gaW5kZXguXFxuLy9cXG4vLyBUaGUgcmV0dXJuZWQgdmVydGV4IGlzIGZvciBhIHR1YmUgcmluZyB3aXRoIGl0cyBjZW50ZXIgYXQgb3JpZ2luLCByYWRpdXMgb2YgbGVuZ3RoKGQpLCBwb2ludGluZyBpbiB0aGUgZGlyZWN0aW9uIG9mIGQuXFxuLy9cXG4vLyBFYWNoIHR1YmUgc2VnbWVudCBpcyBtYWRlIHVwIG9mIGEgcmluZyBvZiB2ZXJ0aWNlcy5cXG4vLyBUaGVzZSB2ZXJ0aWNlcyBhcmUgdXNlZCB0byBtYWtlIHVwIHRoZSB0cmlhbmdsZXMgb2YgdGhlIHR1YmUgYnkgY29ubmVjdGluZyB0aGVtIHRvZ2V0aGVyIGluIHRoZSB2ZXJ0ZXggYXJyYXkuXFxuLy8gVGhlIGluZGV4ZXMgb2YgdHViZSBzZWdtZW50cyBydW4gZnJvbSAwIHRvIDguXFxuLy9cXG52ZWMzIGdldFR1YmVQb3NpdGlvbih2ZWMzIGQsIGZsb2F0IGluZGV4LCBvdXQgdmVjMyBub3JtYWwpIHtcXG4gIGZsb2F0IHNlZ21lbnRDb3VudCA9IDguMDtcXG5cXG4gIGZsb2F0IGFuZ2xlID0gMi4wICogMy4xNDE1OSAqIChpbmRleCAvIHNlZ21lbnRDb3VudCk7XFxuXFxuICB2ZWMzIHUgPSBnZXRPcnRob2dvbmFsVmVjdG9yKGQpO1xcbiAgdmVjMyB2ID0gbm9ybWFsaXplKGNyb3NzKHUsIGQpKTtcXG5cXG4gIHZlYzMgeCA9IHUgKiBjb3MoYW5nbGUpICogbGVuZ3RoKGQpO1xcbiAgdmVjMyB5ID0gdiAqIHNpbihhbmdsZSkgKiBsZW5ndGgoZCk7XFxuICB2ZWMzIHYzID0geCArIHk7XFxuXFxuICBub3JtYWwgPSBub3JtYWxpemUodjMpO1xcblxcbiAgcmV0dXJuIHYzO1xcbn1cXG5cXG5hdHRyaWJ1dGUgdmVjNCB2ZWN0b3I7XFxuYXR0cmlidXRlIHZlYzQgY29sb3IsIHBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xcbnVuaWZvcm0gZmxvYXQgdmVjdG9yU2NhbGU7XFxudW5pZm9ybSBmbG9hdCB0dWJlU2NhbGU7XFxuXFxudW5pZm9ybSBtYXQ0IG1vZGVsXFxuICAgICAgICAgICAsIHZpZXdcXG4gICAgICAgICAgICwgcHJvamVjdGlvblxcbiAgICAgICAgICAgLCBpbnZlcnNlTW9kZWw7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uXFxuICAgICAgICAgICAsIGxpZ2h0UG9zaXRpb247XFxuXFxudmFyeWluZyB2ZWMzIGZfbm9ybWFsXFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cXG4gICAgICAgICAgICwgZl9leWVEaXJlY3Rpb25cXG4gICAgICAgICAgICwgZl9kYXRhXFxuICAgICAgICAgICAsIGZfcG9zaXRpb247XFxudmFyeWluZyB2ZWM0IGZfY29sb3I7XFxudmFyeWluZyB2ZWMyIGZfdXY7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgLy8gU2NhbGUgdGhlIHZlY3RvciBtYWduaXR1ZGUgdG8gc3RheSBjb25zdGFudCB3aXRoXFxuICAvLyBtb2RlbCAmIHZpZXcgY2hhbmdlcy5cXG4gIHZlYzMgbm9ybWFsO1xcbiAgdmVjMyBYWVogPSBnZXRUdWJlUG9zaXRpb24obWF0Myhtb2RlbCkgKiAodHViZVNjYWxlICogdmVjdG9yLncgKiBub3JtYWxpemUodmVjdG9yLnh5eikpLCBwb3NpdGlvbi53LCBub3JtYWwpO1xcbiAgdmVjNCB0dWJlUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24ueHl6LCAxLjApICsgdmVjNChYWVosIDAuMCk7XFxuXFxuICAvL0xpZ2h0aW5nIGdlb21ldHJ5IHBhcmFtZXRlcnNcXG4gIHZlYzQgY2FtZXJhQ29vcmRpbmF0ZSA9IHZpZXcgKiB0dWJlUG9zaXRpb247XFxuICBjYW1lcmFDb29yZGluYXRlLnh5eiAvPSBjYW1lcmFDb29yZGluYXRlLnc7XFxuICBmX2xpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xcbiAgZl9leWVEaXJlY3Rpb24gICA9IGV5ZVBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XFxuICBmX25vcm1hbCA9IG5vcm1hbGl6ZSgodmVjNChub3JtYWwsMC4wKSAqIGludmVyc2VNb2RlbCkueHl6KTtcXG5cXG4gIC8vIHZlYzQgbV9wb3NpdGlvbiAgPSBtb2RlbCAqIHZlYzQodHViZVBvc2l0aW9uLCAxLjApO1xcbiAgdmVjNCB0X3Bvc2l0aW9uICA9IHZpZXcgKiB0dWJlUG9zaXRpb247XFxuICBnbF9Qb3NpdGlvbiAgICAgID0gcHJvamVjdGlvbiAqIHRfcG9zaXRpb247XFxuXFxuICBmX2NvbG9yICAgICAgICAgID0gY29sb3I7XFxuICBmX2RhdGEgICAgICAgICAgID0gdHViZVBvc2l0aW9uLnh5ejtcXG4gIGZfcG9zaXRpb24gICAgICAgPSBwb3NpdGlvbi54eXo7XFxuICBmX3V2ICAgICAgICAgICAgID0gdXY7XFxufVxcblwiXSksYT1uKFtcIiNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlXFxuXFxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuZmxvYXQgYmVja21hbm5EaXN0cmlidXRpb24oZmxvYXQgeCwgZmxvYXQgcm91Z2huZXNzKSB7XFxuICBmbG9hdCBOZG90SCA9IG1heCh4LCAwLjAwMDEpO1xcbiAgZmxvYXQgY29zMkFscGhhID0gTmRvdEggKiBOZG90SDtcXG4gIGZsb2F0IHRhbjJBbHBoYSA9IChjb3MyQWxwaGEgLSAxLjApIC8gY29zMkFscGhhO1xcbiAgZmxvYXQgcm91Z2huZXNzMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcXG4gIGZsb2F0IGRlbm9tID0gMy4xNDE1OTI2NTM1ODk3OTMgKiByb3VnaG5lc3MyICogY29zMkFscGhhICogY29zMkFscGhhO1xcbiAgcmV0dXJuIGV4cCh0YW4yQWxwaGEgLyByb3VnaG5lc3MyKSAvIGRlbm9tO1xcbn1cXG5cXG5mbG9hdCBjb29rVG9ycmFuY2VTcGVjdWxhcihcXG4gIHZlYzMgbGlnaHREaXJlY3Rpb24sXFxuICB2ZWMzIHZpZXdEaXJlY3Rpb24sXFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwsXFxuICBmbG9hdCByb3VnaG5lc3MsXFxuICBmbG9hdCBmcmVzbmVsKSB7XFxuXFxuICBmbG9hdCBWZG90TiA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XFxuICBmbG9hdCBMZG90TiA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xcblxcbiAgLy9IYWxmIGFuZ2xlIHZlY3RvclxcbiAgdmVjMyBIID0gbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uICsgdmlld0RpcmVjdGlvbik7XFxuXFxuICAvL0dlb21ldHJpYyB0ZXJtXFxuICBmbG9hdCBOZG90SCA9IG1heChkb3Qoc3VyZmFjZU5vcm1hbCwgSCksIDAuMCk7XFxuICBmbG9hdCBWZG90SCA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcXG4gIGZsb2F0IExkb3RIID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcXG4gIGZsb2F0IEcxID0gKDIuMCAqIE5kb3RIICogVmRvdE4pIC8gVmRvdEg7XFxuICBmbG9hdCBHMiA9ICgyLjAgKiBOZG90SCAqIExkb3ROKSAvIExkb3RIO1xcbiAgZmxvYXQgRyA9IG1pbigxLjAsIG1pbihHMSwgRzIpKTtcXG4gIFxcbiAgLy9EaXN0cmlidXRpb24gdGVybVxcbiAgZmxvYXQgRCA9IGJlY2ttYW5uRGlzdHJpYnV0aW9uKE5kb3RILCByb3VnaG5lc3MpO1xcblxcbiAgLy9GcmVzbmVsIHRlcm1cXG4gIGZsb2F0IEYgPSBwb3coMS4wIC0gVmRvdE4sIGZyZXNuZWwpO1xcblxcbiAgLy9NdWx0aXBseSB0ZXJtcyBhbmQgZG9uZVxcbiAgcmV0dXJuICBHICogRiAqIEQgLyBtYXgoMy4xNDE1OTI2NSAqIFZkb3ROLCAwLjAwMDAwMSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XFxuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XFxufVxcblxcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzXFxuICAgICAgICAgICAgLCBmcmVzbmVsXFxuICAgICAgICAgICAgLCBrYW1iaWVudFxcbiAgICAgICAgICAgICwga2RpZmZ1c2VcXG4gICAgICAgICAgICAsIGtzcGVjdWxhclxcbiAgICAgICAgICAgICwgb3BhY2l0eTtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcblxcbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxcbiAgICAgICAgICAgLCBmX2xpZ2h0RGlyZWN0aW9uXFxuICAgICAgICAgICAsIGZfZXllRGlyZWN0aW9uXFxuICAgICAgICAgICAsIGZfZGF0YVxcbiAgICAgICAgICAgLCBmX3Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xcbnZhcnlpbmcgdmVjMiBmX3V2O1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfcG9zaXRpb24pKSBkaXNjYXJkO1xcbiAgdmVjMyBOID0gbm9ybWFsaXplKGZfbm9ybWFsKTtcXG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShmX2xpZ2h0RGlyZWN0aW9uKTtcXG4gIHZlYzMgViA9IG5vcm1hbGl6ZShmX2V5ZURpcmVjdGlvbik7XFxuXFxuICBpZihnbF9Gcm9udEZhY2luZykge1xcbiAgICBOID0gLU47XFxuICB9XFxuXFxuICBmbG9hdCBzcGVjdWxhciA9IG1pbigxLjAsIG1heCgwLjAsIGNvb2tUb3JyYW5jZVNwZWN1bGFyKEwsIFYsIE4sIHJvdWdobmVzcywgZnJlc25lbCkpKTtcXG4gIGZsb2F0IGRpZmZ1c2UgID0gbWluKGthbWJpZW50ICsga2RpZmZ1c2UgKiBtYXgoZG90KE4sIEwpLCAwLjApLCAxLjApO1xcblxcbiAgdmVjNCBzdXJmYWNlQ29sb3IgPSBmX2NvbG9yICogdGV4dHVyZTJEKHRleHR1cmUsIGZfdXYpO1xcbiAgdmVjNCBsaXRDb2xvciA9IHN1cmZhY2VDb2xvci5hICogdmVjNChkaWZmdXNlICogc3VyZmFjZUNvbG9yLnJnYiArIGtzcGVjdWxhciAqIHZlYzMoMSwxLDEpICogc3BlY3VsYXIsICAxLjApO1xcblxcbiAgZ2xfRnJhZ0NvbG9yID0gbGl0Q29sb3IgKiBvcGFjaXR5O1xcbn1cXG5cIl0pLG89bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuXFxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxudmVjMyBnZXRPcnRob2dvbmFsVmVjdG9yKHZlYzMgdikge1xcbiAgLy8gUmV0dXJuIHVwLXZlY3RvciBmb3Igb25seS16IHZlY3Rvci5cXG4gIC8vIFJldHVybiBheCArIGJ5ICsgY3ogPSAwLCBhIHBvaW50IHRoYXQgbGllcyBvbiB0aGUgcGxhbmUgdGhhdCBoYXMgdiBhcyBhIG5vcm1hbCBhbmQgdGhhdCBpc24ndCAoMCwwLDApLlxcbiAgLy8gRnJvbSB0aGUgYWJvdmUgaWYtc3RhdGVtZW50IHdlIGhhdmUgfHxhfHwgPiAwICBVICB8fGJ8fCA+IDAuXFxuICAvLyBBc3NpZ24geiA9IDAsIHggPSAtYiwgeSA9IGE6XFxuICAvLyBhKi1iICsgYiphICsgYyowID0gLWJhICsgYmEgKyAwID0gMFxcbiAgaWYgKHYueCp2LnggPiB2Lnoqdi56IHx8IHYueSp2LnkgPiB2Lnoqdi56KSB7XFxuICAgIHJldHVybiBub3JtYWxpemUodmVjMygtdi55LCB2LngsIDAuMCkpO1xcbiAgfSBlbHNlIHtcXG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKDAuMCwgdi56LCAtdi55KSk7XFxuICB9XFxufVxcblxcbi8vIENhbGN1bGF0ZSB0aGUgdHViZSB2ZXJ0ZXggYW5kIG5vcm1hbCBhdCB0aGUgZ2l2ZW4gaW5kZXguXFxuLy9cXG4vLyBUaGUgcmV0dXJuZWQgdmVydGV4IGlzIGZvciBhIHR1YmUgcmluZyB3aXRoIGl0cyBjZW50ZXIgYXQgb3JpZ2luLCByYWRpdXMgb2YgbGVuZ3RoKGQpLCBwb2ludGluZyBpbiB0aGUgZGlyZWN0aW9uIG9mIGQuXFxuLy9cXG4vLyBFYWNoIHR1YmUgc2VnbWVudCBpcyBtYWRlIHVwIG9mIGEgcmluZyBvZiB2ZXJ0aWNlcy5cXG4vLyBUaGVzZSB2ZXJ0aWNlcyBhcmUgdXNlZCB0byBtYWtlIHVwIHRoZSB0cmlhbmdsZXMgb2YgdGhlIHR1YmUgYnkgY29ubmVjdGluZyB0aGVtIHRvZ2V0aGVyIGluIHRoZSB2ZXJ0ZXggYXJyYXkuXFxuLy8gVGhlIGluZGV4ZXMgb2YgdHViZSBzZWdtZW50cyBydW4gZnJvbSAwIHRvIDguXFxuLy9cXG52ZWMzIGdldFR1YmVQb3NpdGlvbih2ZWMzIGQsIGZsb2F0IGluZGV4LCBvdXQgdmVjMyBub3JtYWwpIHtcXG4gIGZsb2F0IHNlZ21lbnRDb3VudCA9IDguMDtcXG5cXG4gIGZsb2F0IGFuZ2xlID0gMi4wICogMy4xNDE1OSAqIChpbmRleCAvIHNlZ21lbnRDb3VudCk7XFxuXFxuICB2ZWMzIHUgPSBnZXRPcnRob2dvbmFsVmVjdG9yKGQpO1xcbiAgdmVjMyB2ID0gbm9ybWFsaXplKGNyb3NzKHUsIGQpKTtcXG5cXG4gIHZlYzMgeCA9IHUgKiBjb3MoYW5nbGUpICogbGVuZ3RoKGQpO1xcbiAgdmVjMyB5ID0gdiAqIHNpbihhbmdsZSkgKiBsZW5ndGgoZCk7XFxuICB2ZWMzIHYzID0geCArIHk7XFxuXFxuICBub3JtYWwgPSBub3JtYWxpemUodjMpO1xcblxcbiAgcmV0dXJuIHYzO1xcbn1cXG5cXG5hdHRyaWJ1dGUgdmVjNCB2ZWN0b3I7XFxuYXR0cmlidXRlIHZlYzQgcG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzQgaWQ7XFxuXFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xcbnVuaWZvcm0gZmxvYXQgdHViZVNjYWxlO1xcblxcbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjNCBmX2lkO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzMgbm9ybWFsO1xcbiAgdmVjMyBYWVogPSBnZXRUdWJlUG9zaXRpb24obWF0Myhtb2RlbCkgKiAodHViZVNjYWxlICogdmVjdG9yLncgKiBub3JtYWxpemUodmVjdG9yLnh5eikpLCBwb3NpdGlvbi53LCBub3JtYWwpO1xcbiAgdmVjNCB0dWJlUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24ueHl6LCAxLjApICsgdmVjNChYWVosIDAuMCk7XFxuXFxuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogdHViZVBvc2l0aW9uO1xcbiAgZl9pZCAgICAgICAgPSBpZDtcXG4gIGZfcG9zaXRpb24gID0gcG9zaXRpb24ueHl6O1xcbn1cXG5cIl0pLHM9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcXG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xcbn1cXG5cXG51bmlmb3JtIHZlYzMgIGNsaXBCb3VuZHNbMl07XFxudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XFxuXFxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XFxudmFyeWluZyB2ZWM0IGZfaWQ7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9wb3NpdGlvbikpIGRpc2NhcmQ7XFxuXFxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZCwgZl9pZC54eXopO1xcbn1cIl0pO3IubWVzaFNoYWRlcj17dmVydGV4OmksZnJhZ21lbnQ6YSxhdHRyaWJ1dGVzOlt7bmFtZTpcInBvc2l0aW9uXCIsdHlwZTpcInZlYzRcIn0se25hbWU6XCJub3JtYWxcIix0eXBlOlwidmVjM1wifSx7bmFtZTpcImNvbG9yXCIsdHlwZTpcInZlYzRcIn0se25hbWU6XCJ1dlwiLHR5cGU6XCJ2ZWMyXCJ9LHtuYW1lOlwidmVjdG9yXCIsdHlwZTpcInZlYzRcIn1dfSxyLnBpY2tTaGFkZXI9e3ZlcnRleDpvLGZyYWdtZW50OnMsYXR0cmlidXRlczpbe25hbWU6XCJwb3NpdGlvblwiLHR5cGU6XCJ2ZWM0XCJ9LHtuYW1lOlwiaWRcIix0eXBlOlwidmVjNFwifSx7bmFtZTpcInZlY3RvclwiLHR5cGU6XCJ2ZWM0XCJ9XX19LHtnbHNsaWZ5OjQwMn1dLDMwOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbC1zaGFkZXJcIiksaT10KFwiZ2wtYnVmZmVyXCIpLGE9dChcImdsLXZhb1wiKSxvPXQoXCJnbC10ZXh0dXJlMmRcIikscz10KFwibm9ybWFsc1wiKSxsPXQoXCJnbC1tYXQ0L211bHRpcGx5XCIpLGM9dChcImdsLW1hdDQvaW52ZXJ0XCIpLHU9dChcIm5kYXJyYXlcIiksaD10KFwiY29sb3JtYXBcIiksZj10KFwic2ltcGxpY2lhbC1jb21wbGV4LWNvbnRvdXJcIikscD10KFwidHlwZWRhcnJheS1wb29sXCIpLGQ9dChcIi4vc2hhZGVyc1wiKSxnPWQubWVzaFNoYWRlcix2PWQucGlja1NoYWRlcixtPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiB5KHQsZSxyLG4saSxhLG8scyxsLGMsdSxoLGYscCxkLGcsdix5LHgsYixfLHcsayxBKXt0aGlzLmdsPXQsdGhpcy5jZWxscz1bXSx0aGlzLnBvc2l0aW9ucz1bXSx0aGlzLmludGVuc2l0eT1bXSx0aGlzLnRleHR1cmU9ZSx0aGlzLmRpcnR5PSEwLHRoaXMudHJpU2hhZGVyPXIsdGhpcy5waWNrU2hhZGVyPW4sdGhpcy50cmlhbmdsZVBvc2l0aW9ucz1pLHRoaXMudHJpYW5nbGVWZWN0b3JzPWEsdGhpcy50cmlhbmdsZUNvbG9ycz1zLHRoaXMudHJpYW5nbGVOb3JtYWxzPWMsdGhpcy50cmlhbmdsZVVWcz1sLHRoaXMudHJpYW5nbGVJZHM9byx0aGlzLnRyaWFuZ2xlVkFPPXUsdGhpcy50cmlhbmdsZUNvdW50PTAsdGhpcy5saW5lV2lkdGg9MSx0aGlzLmVkZ2VQb3NpdGlvbnM9aCx0aGlzLmVkZ2VDb2xvcnM9cCx0aGlzLmVkZ2VVVnM9ZCx0aGlzLmVkZ2VJZHM9Zix0aGlzLmVkZ2VWQU89Zyx0aGlzLmVkZ2VDb3VudD0wLHRoaXMucG9pbnRQb3NpdGlvbnM9dix0aGlzLnBvaW50Q29sb3JzPXgsdGhpcy5wb2ludFVWcz1iLHRoaXMucG9pbnRTaXplcz1fLHRoaXMucG9pbnRJZHM9eSx0aGlzLnBvaW50VkFPPXcsdGhpcy5wb2ludENvdW50PTAsdGhpcy5jb250b3VyTGluZVdpZHRoPTEsdGhpcy5jb250b3VyUG9zaXRpb25zPWssdGhpcy5jb250b3VyVkFPPUEsdGhpcy5jb250b3VyQ291bnQ9MCx0aGlzLmNvbnRvdXJDb2xvcj1bMCwwLDBdLHRoaXMuY29udG91ckVuYWJsZT0hMSx0aGlzLnBpY2tJZD0xLHRoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmxpZ2h0UG9zaXRpb249WzFlNSwxZTUsMF0sdGhpcy5hbWJpZW50TGlnaHQ9LjgsdGhpcy5kaWZmdXNlTGlnaHQ9LjgsdGhpcy5zcGVjdWxhckxpZ2h0PTIsdGhpcy5yb3VnaG5lc3M9LjUsdGhpcy5mcmVzbmVsPTEuNSx0aGlzLm9wYWNpdHk9MSx0aGlzLnR1YmVTY2FsZT0xLHRoaXMuX21vZGVsPW0sdGhpcy5fdmlldz1tLHRoaXMuX3Byb2plY3Rpb249bSx0aGlzLl9yZXNvbHV0aW9uPVsxLDFdLHRoaXMucGl4ZWxSYXRpbz0xfXZhciB4PXkucHJvdG90eXBlO2Z1bmN0aW9uIGIodCl7dmFyIGU9bih0LHYudmVydGV4LHYuZnJhZ21lbnQsbnVsbCx2LmF0dHJpYnV0ZXMpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuaWQubG9jYXRpb249MSxlLmF0dHJpYnV0ZXMudmVjdG9yLmxvY2F0aW9uPTUsZX14LmlzT3BhcXVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BhY2l0eT49MX0seC5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BhY2l0eTwxfSx4LnBpY2tTbG90cz0xLHguc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH0seC5oaWdobGlnaHQ9ZnVuY3Rpb24odCl7aWYodCYmdGhpcy5jb250b3VyRW5hYmxlKXtmb3IodmFyIGU9Zih0aGlzLmNlbGxzLHRoaXMuaW50ZW5zaXR5LHQuaW50ZW5zaXR5KSxyPWUuY2VsbHMsbj1lLnZlcnRleElkcyxpPWUudmVydGV4V2VpZ2h0cyxhPXIubGVuZ3RoLG89cC5tYWxsb2NGbG9hdDMyKDYqYSkscz0wLGw9MDtsPGE7KytsKWZvcih2YXIgYz1yW2xdLHU9MDt1PDI7Kyt1KXt2YXIgaD1jWzBdOzI9PT1jLmxlbmd0aCYmKGg9Y1t1XSk7Zm9yKHZhciBkPW5baF1bMF0sZz1uW2hdWzFdLHY9aVtoXSxtPTEtdix5PXRoaXMucG9zaXRpb25zW2RdLHg9dGhpcy5wb3NpdGlvbnNbZ10sYj0wO2I8MzsrK2Ipb1tzKytdPXYqeVtiXSttKnhbYl19dGhpcy5jb250b3VyQ291bnQ9cy8zfDAsdGhpcy5jb250b3VyUG9zaXRpb25zLnVwZGF0ZShvLnN1YmFycmF5KDAscykpLHAuZnJlZShvKX1lbHNlIHRoaXMuY29udG91ckNvdW50PTB9LHgudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e307dmFyIGU9dGhpcy5nbDt0aGlzLmRpcnR5PSEwLFwiY29udG91ckVuYWJsZVwiaW4gdCYmKHRoaXMuY29udG91ckVuYWJsZT10LmNvbnRvdXJFbmFibGUpLFwiY29udG91ckNvbG9yXCJpbiB0JiYodGhpcy5jb250b3VyQ29sb3I9dC5jb250b3VyQ29sb3IpLFwibGluZVdpZHRoXCJpbiB0JiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgpLFwibGlnaHRQb3NpdGlvblwiaW4gdCYmKHRoaXMubGlnaHRQb3NpdGlvbj10LmxpZ2h0UG9zaXRpb24pLFwib3BhY2l0eVwiaW4gdCYmKHRoaXMub3BhY2l0eT10Lm9wYWNpdHkpLFwiYW1iaWVudFwiaW4gdCYmKHRoaXMuYW1iaWVudExpZ2h0PXQuYW1iaWVudCksXCJkaWZmdXNlXCJpbiB0JiYodGhpcy5kaWZmdXNlTGlnaHQ9dC5kaWZmdXNlKSxcInNwZWN1bGFyXCJpbiB0JiYodGhpcy5zcGVjdWxhckxpZ2h0PXQuc3BlY3VsYXIpLFwicm91Z2huZXNzXCJpbiB0JiYodGhpcy5yb3VnaG5lc3M9dC5yb3VnaG5lc3MpLFwiZnJlc25lbFwiaW4gdCYmKHRoaXMuZnJlc25lbD10LmZyZXNuZWwpLHQudGV4dHVyZT8odGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRleHR1cmU9byhlLHQudGV4dHVyZSkpOnQuY29sb3JtYXAmJih0aGlzLnRleHR1cmUuc2hhcGU9WzI1NiwyNTZdLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZS5MSU5FQVJfTUlQTUFQX0xJTkVBUix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUuTElORUFSLHRoaXMudGV4dHVyZS5zZXRQaXhlbHMoZnVuY3Rpb24odCl7Zm9yKHZhciBlPWgoe2NvbG9ybWFwOnQsbnNoYWRlczoyNTYsZm9ybWF0OlwicmdiYVwifSkscj1uZXcgVWludDhBcnJheSgxMDI0KSxuPTA7bjwyNTY7KytuKXtmb3IodmFyIGk9ZVtuXSxhPTA7YTwzOysrYSlyWzQqbithXT1pW2FdO3JbNCpuKzNdPTI1NSppWzNdfXJldHVybiB1KHIsWzI1NiwyNTYsNF0sWzQsMCwxXSl9KHQuY29sb3JtYXApKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXAoKSk7dmFyIHI9dC5jZWxscyxuPXQucG9zaXRpb25zLGk9dC52ZWN0b3JzO2lmKG4mJnImJmkpe3ZvaWQgMCE9PXQudHViZVNjYWxlJiYodGhpcy50dWJlU2NhbGU9dC50dWJlU2NhbGUpO3ZhciBhPVtdLGw9W10sYz1bXSxmPVtdLHA9W10sZD1bXSxnPVtdLHY9W10sbT1bXSx5PVtdLHg9W10sYj1bXSxfPVtdLHc9W10saz1bXTt0aGlzLmNlbGxzPXIsdGhpcy5wb3NpdGlvbnM9bix0aGlzLnZlY3RvcnM9aTt2YXIgQT10LnZlcnRleE5vcm1hbHMsVD10LmNlbGxOb3JtYWxzLE09dm9pZCAwPT09dC52ZXJ0ZXhOb3JtYWxzRXBzaWxvbj8xZS02OnQudmVydGV4Tm9ybWFsc0Vwc2lsb24sUz12b2lkIDA9PT10LmZhY2VOb3JtYWxzRXBzaWxvbj8xZS02OnQuZmFjZU5vcm1hbHNFcHNpbG9uO3QudXNlRmFjZXROb3JtYWxzJiYhVCYmKFQ9cy5mYWNlTm9ybWFscyhyLG4sUykpLFR8fEF8fChBPXMudmVydGV4Tm9ybWFscyhyLG4sTSkpO3ZhciBFPXQudmVydGV4Q29sb3JzLEM9dC5jZWxsQ29sb3JzLEw9dC5tZXNoQ29sb3J8fFsxLDEsMSwxXSx6PXQudmVydGV4VVZzLE89dC52ZXJ0ZXhJbnRlbnNpdHksST10LmNlbGxVVnMsRD10LmNlbGxJbnRlbnNpdHksUD0xLzAsUj0tMS8wO2lmKCF6JiYhSSlpZihPKWlmKHQudmVydGV4SW50ZW5zaXR5Qm91bmRzKVA9K3QudmVydGV4SW50ZW5zaXR5Qm91bmRzWzBdLFI9K3QudmVydGV4SW50ZW5zaXR5Qm91bmRzWzFdO2Vsc2UgZm9yKHZhciBGPTA7RjxPLmxlbmd0aDsrK0Ype3ZhciBCPU9bRl07UD1NYXRoLm1pbihQLEIpLFI9TWF0aC5tYXgoUixCKX1lbHNlIGlmKEQpZm9yKEY9MDtGPEQubGVuZ3RoOysrRil7Qj1EW0ZdO1A9TWF0aC5taW4oUCxCKSxSPU1hdGgubWF4KFIsQil9ZWxzZSBmb3IoRj0wO0Y8bi5sZW5ndGg7KytGKXtCPW5bRl1bMl07UD1NYXRoLm1pbihQLEIpLFI9TWF0aC5tYXgoUixCKX10aGlzLmludGVuc2l0eT1PfHwoRD9mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSluW2ldPTA7dmFyIGE9dC5sZW5ndGg7Zm9yKGk9MDtpPGE7KytpKWZvcih2YXIgbz10W2ldLHM9MDtzPG8ubGVuZ3RoOysrcyluW29bc11dPXJbaV07cmV0dXJuIG59KHIsbi5sZW5ndGgsRCk6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09dFtuXVsyXTtyZXR1cm4gcn0obikpO3ZhciBOPXQucG9pbnRTaXplcyxqPXQucG9pbnRTaXplfHwxO3RoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dO2ZvcihGPTA7RjxuLmxlbmd0aDsrK0YpZm9yKHZhciBWPW5bRl0sVT0wO1U8MzsrK1UpIWlzTmFOKFZbVV0pJiZpc0Zpbml0ZShWW1VdKSYmKHRoaXMuYm91bmRzWzBdW1VdPU1hdGgubWluKHRoaXMuYm91bmRzWzBdW1VdLFZbVV0pLHRoaXMuYm91bmRzWzFdW1VdPU1hdGgubWF4KHRoaXMuYm91bmRzWzFdW1VdLFZbVV0pKTt2YXIgcT0wLEg9MCxHPTA7dDpmb3IoRj0wO0Y8ci5sZW5ndGg7KytGKXt2YXIgWT1yW0ZdO3N3aXRjaChZLmxlbmd0aCl7Y2FzZSAxOmZvcihWPW5bWD1ZWzBdXSxVPTA7VTwzOysrVSlpZihpc05hTihWW1VdKXx8IWlzRmluaXRlKFZbVV0pKWNvbnRpbnVlIHQ7eC5wdXNoKFZbMF0sVlsxXSxWWzJdLFZbM10pLDM9PT0oWj1FP0VbWF06Qz9DW0ZdOkwpLmxlbmd0aD9iLnB1c2goWlswXSxaWzFdLFpbMl0sMSk6Yi5wdXNoKFpbMF0sWlsxXSxaWzJdLFpbM10pLCQ9ej96W1hdOk8/WyhPW1hdLVApLyhSLVApLDBdOkk/SVtGXTpEP1soRFtGXS1QKS8oUi1QKSwwXTpbKFZbMl0tUCkvKFItUCksMF0sXy5wdXNoKCRbMF0sJFsxXSksTj93LnB1c2goTltYXSk6dy5wdXNoKGopLGsucHVzaChGKSxHKz0xO2JyZWFrO2Nhc2UgMjpmb3IoVT0wO1U8MjsrK1Upe1Y9bltYPVlbVV1dO2Zvcih2YXIgVz0wO1c8MzsrK1cpaWYoaXNOYU4oVltXXSl8fCFpc0Zpbml0ZShWW1ddKSljb250aW51ZSB0fWZvcihVPTA7VTwyOysrVSl7Vj1uW1g9WVtVXV07Zy5wdXNoKFZbMF0sVlsxXSxWWzJdKSwzPT09KFo9RT9FW1hdOkM/Q1tGXTpMKS5sZW5ndGg/di5wdXNoKFpbMF0sWlsxXSxaWzJdLDEpOnYucHVzaChaWzBdLFpbMV0sWlsyXSxaWzNdKSwkPXo/eltYXTpPP1soT1tYXS1QKS8oUi1QKSwwXTpJP0lbRl06RD9bKERbRl0tUCkvKFItUCksMF06WyhWWzJdLVApLyhSLVApLDBdLG0ucHVzaCgkWzBdLCRbMV0pLHkucHVzaChGKX1IKz0xO2JyZWFrO2Nhc2UgMzpmb3IoVT0wO1U8MzsrK1UpZm9yKFY9bltYPVlbVV1dLFc9MDtXPDM7KytXKWlmKGlzTmFOKFZbV10pfHwhaXNGaW5pdGUoVltXXSkpY29udGludWUgdDtmb3IoVT0wO1U8MzsrK1Upe3ZhciBYO1Y9bltYPVlbMi1VXV07YS5wdXNoKFZbMF0sVlsxXSxWWzJdLFZbM10pO3ZhciBaLCQsSixLPWlbWF07bC5wdXNoKEtbMF0sS1sxXSxLWzJdLEtbM10pLDM9PT0oWj1FP0VbWF06Qz9DW0ZdOkwpLmxlbmd0aD9jLnB1c2goWlswXSxaWzFdLFpbMl0sMSk6Yy5wdXNoKFpbMF0sWlsxXSxaWzJdLFpbM10pLCQ9ej96W1hdOk8/WyhPW1hdLVApLyhSLVApLDBdOkk/SVtGXTpEP1soRFtGXS1QKS8oUi1QKSwwXTpbKFZbMl0tUCkvKFItUCksMF0scC5wdXNoKCRbMF0sJFsxXSksSj1BP0FbWF06VFtGXSxmLnB1c2goSlswXSxKWzFdLEpbMl0pLGQucHVzaChGKX1xKz0xfX10aGlzLnBvaW50Q291bnQ9Ryx0aGlzLmVkZ2VDb3VudD1ILHRoaXMudHJpYW5nbGVDb3VudD1xLHRoaXMucG9pbnRQb3NpdGlvbnMudXBkYXRlKHgpLHRoaXMucG9pbnRDb2xvcnMudXBkYXRlKGIpLHRoaXMucG9pbnRVVnMudXBkYXRlKF8pLHRoaXMucG9pbnRTaXplcy51cGRhdGUodyksdGhpcy5wb2ludElkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KGspKSx0aGlzLmVkZ2VQb3NpdGlvbnMudXBkYXRlKGcpLHRoaXMuZWRnZUNvbG9ycy51cGRhdGUodiksdGhpcy5lZGdlVVZzLnVwZGF0ZShtKSx0aGlzLmVkZ2VJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheSh5KSksdGhpcy50cmlhbmdsZVBvc2l0aW9ucy51cGRhdGUoYSksdGhpcy50cmlhbmdsZVZlY3RvcnMudXBkYXRlKGwpLHRoaXMudHJpYW5nbGVDb2xvcnMudXBkYXRlKGMpLHRoaXMudHJpYW5nbGVVVnMudXBkYXRlKHApLHRoaXMudHJpYW5nbGVOb3JtYWxzLnVwZGF0ZShmKSx0aGlzLnRyaWFuZ2xlSWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoZCkpfX0seC5kcmF3VHJhbnNwYXJlbnQ9eC5kcmF3PWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHxtLG49dC52aWV3fHxtLGk9dC5wcm9qZWN0aW9ufHxtLGE9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28pYVswXVtvXT1NYXRoLm1heChhWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksYVsxXVtvXT1NYXRoLm1pbihhWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dmFyIHM9e21vZGVsOnIsdmlldzpuLHByb2plY3Rpb246aSxpbnZlcnNlTW9kZWw6bS5zbGljZSgpLGNsaXBCb3VuZHM6YSxrYW1iaWVudDp0aGlzLmFtYmllbnRMaWdodCxrZGlmZnVzZTp0aGlzLmRpZmZ1c2VMaWdodCxrc3BlY3VsYXI6dGhpcy5zcGVjdWxhckxpZ2h0LHJvdWdobmVzczp0aGlzLnJvdWdobmVzcyxmcmVzbmVsOnRoaXMuZnJlc25lbCxleWVQb3NpdGlvbjpbMCwwLDBdLGxpZ2h0UG9zaXRpb246WzAsMCwwXSxvcGFjaXR5OnRoaXMub3BhY2l0eSx0dWJlU2NhbGU6dGhpcy50dWJlU2NhbGUsY29udG91ckNvbG9yOnRoaXMuY29udG91ckNvbG9yLHRleHR1cmU6MH07cy5pbnZlcnNlTW9kZWw9YyhzLmludmVyc2VNb2RlbCxzLm1vZGVsKSxlLmRpc2FibGUoZS5DVUxMX0ZBQ0UpLHRoaXMudGV4dHVyZS5iaW5kKDApO3ZhciB1PW5ldyBBcnJheSgxNik7bCh1LHMudmlldyxzLm1vZGVsKSxsKHUscy5wcm9qZWN0aW9uLHUpLGModSx1KTtmb3Iobz0wO288MzsrK28pcy5leWVQb3NpdGlvbltvXT11WzEyK29dL3VbMTVdO3ZhciBoPXVbMTVdO2ZvcihvPTA7bzwzOysrbyloKz10aGlzLmxpZ2h0UG9zaXRpb25bb10qdVs0Km8rM107Zm9yKG89MDtvPDM7KytvKXtmb3IodmFyIGY9dVsxMitvXSxwPTA7cDwzOysrcClmKz11WzQqcCtvXSp0aGlzLmxpZ2h0UG9zaXRpb25bcF07cy5saWdodFBvc2l0aW9uW29dPWYvaH1pZih0aGlzLnRyaWFuZ2xlQ291bnQ+MCl7dmFyIGQ9dGhpcy50cmlTaGFkZXI7ZC5iaW5kKCksZC51bmlmb3Jtcz1zLHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpfX0seC5kcmF3UGljaz1mdW5jdGlvbih0KXt0PXR8fHt9O2Zvcih2YXIgZT10aGlzLmdsLHI9dC5tb2RlbHx8bSxuPXQudmlld3x8bSxpPXQucHJvamVjdGlvbnx8bSxhPVtbLTFlNiwtMWU2LC0xZTZdLFsxZTYsMWU2LDFlNl1dLG89MDtvPDM7KytvKWFbMF1bb109TWF0aC5tYXgoYVswXVtvXSx0aGlzLmNsaXBCb3VuZHNbMF1bb10pLGFbMV1bb109TWF0aC5taW4oYVsxXVtvXSx0aGlzLmNsaXBCb3VuZHNbMV1bb10pO3RoaXMuX21vZGVsPVtdLnNsaWNlLmNhbGwociksdGhpcy5fdmlldz1bXS5zbGljZS5jYWxsKG4pLHRoaXMuX3Byb2plY3Rpb249W10uc2xpY2UuY2FsbChpKSx0aGlzLl9yZXNvbHV0aW9uPVtlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdO3ZhciBzPXttb2RlbDpyLHZpZXc6bixwcm9qZWN0aW9uOmksY2xpcEJvdW5kczphLHR1YmVTY2FsZTp0aGlzLnR1YmVTY2FsZSxwaWNrSWQ6dGhpcy5waWNrSWQvMjU1fSxsPXRoaXMucGlja1NoYWRlcjtsLmJpbmQoKSxsLnVuaWZvcm1zPXMsdGhpcy50cmlhbmdsZUNvdW50PjAmJih0aGlzLnRyaWFuZ2xlVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRVMsMCwzKnRoaXMudHJpYW5nbGVDb3VudCksdGhpcy50cmlhbmdsZVZBTy51bmJpbmQoKSksdGhpcy5lZGdlQ291bnQ+MCYmKHRoaXMuZWRnZVZBTy5iaW5kKCksZS5saW5lV2lkdGgodGhpcy5saW5lV2lkdGgqdGhpcy5waXhlbFJhdGlvKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLDIqdGhpcy5lZGdlQ291bnQpLHRoaXMuZWRnZVZBTy51bmJpbmQoKSl9LHgucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7dmFyIGU9dC52YWx1ZVswXSsyNTYqdC52YWx1ZVsxXSs2NTUzNip0LnZhbHVlWzJdLHI9dGhpcy5jZWxsc1tlXSxuPXRoaXMucG9zaXRpb25zW3JbMV1dLnNsaWNlKDAsMyk7cmV0dXJue2luZGV4OmUscG9zaXRpb246bixpbnRlbnNpdHk6dGhpcy5pbnRlbnNpdHlbclsxXV0sdmVsb2NpdHk6dGhpcy52ZWN0b3JzW3JbMV1dLnNsaWNlKDAsMyksZGl2ZXJnZW5jZTp0aGlzLnZlY3RvcnNbclsxXV1bM10sZGF0YUNvb3JkaW5hdGU6bn19LHguZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudGV4dHVyZS5kaXNwb3NlKCksdGhpcy50cmlTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVZBTy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVZlY3RvcnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVDb2xvcnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVVVnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVOb3JtYWxzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlSWRzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VWQU8uZGlzcG9zZSgpLHRoaXMuZWRnZVBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5lZGdlQ29sb3JzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VVVnMuZGlzcG9zZSgpLHRoaXMuZWRnZUlkcy5kaXNwb3NlKCksdGhpcy5wb2ludFZBTy5kaXNwb3NlKCksdGhpcy5wb2ludFBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5wb2ludENvbG9ycy5kaXNwb3NlKCksdGhpcy5wb2ludFVWcy5kaXNwb3NlKCksdGhpcy5wb2ludFNpemVzLmRpc3Bvc2UoKSx0aGlzLnBvaW50SWRzLmRpc3Bvc2UoKSx0aGlzLmNvbnRvdXJWQU8uZGlzcG9zZSgpLHRoaXMuY29udG91clBvc2l0aW9ucy5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpezE9PT1hcmd1bWVudHMubGVuZ3RoJiYodD0oZT10KS5nbCk7dmFyIHI9ZS50cmlTaGFkZXJ8fGZ1bmN0aW9uKHQpe3ZhciBlPW4odCxnLnZlcnRleCxnLmZyYWdtZW50LG51bGwsZy5hdHRyaWJ1dGVzKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTIsZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTMsZS5hdHRyaWJ1dGVzLnZlY3Rvci5sb2NhdGlvbj01LGV9KHQpLHM9Yih0KSxsPW8odCx1KG5ldyBVaW50OEFycmF5KFsyNTUsMjU1LDI1NSwyNTVdKSxbMSwxLDRdKSk7bC5nZW5lcmF0ZU1pcG1hcCgpLGwubWluRmlsdGVyPXQuTElORUFSX01JUE1BUF9MSU5FQVIsbC5tYWdGaWx0ZXI9dC5MSU5FQVI7dmFyIGM9aSh0KSxoPWkodCksZj1pKHQpLHA9aSh0KSxkPWkodCksdj1pKHQpLG09YSh0LFt7YnVmZmVyOmMsdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjp2LHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOmYsdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjpwLHR5cGU6dC5GTE9BVCxzaXplOjJ9LHtidWZmZXI6ZCx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOmgsdHlwZTp0LkZMT0FULHNpemU6NH1dKSx4PWkodCksXz1pKHQpLHc9aSh0KSxrPWkodCksQT1hKHQsW3tidWZmZXI6eCx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOmssdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6Xyx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOncsdHlwZTp0LkZMT0FULHNpemU6Mn1dKSxUPWkodCksTT1pKHQpLFM9aSh0KSxFPWkodCksQz1pKHQpLEw9YSh0LFt7YnVmZmVyOlQsdHlwZTp0LkZMT0FULHNpemU6M30se2J1ZmZlcjpDLHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOk0sdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjpTLHR5cGU6dC5GTE9BVCxzaXplOjJ9LHtidWZmZXI6RSx0eXBlOnQuRkxPQVQsc2l6ZToxfV0pLHo9aSh0KSxPPW5ldyB5KHQsbCxyLHMsYyxoLHYsZixwLGQsbSx4LGssXyx3LEEsVCxDLE0sUyxFLEwseixhKHQsW3tidWZmZXI6eix0eXBlOnQuRkxPQVQsc2l6ZTozfV0pKTtyZXR1cm4gTy51cGRhdGUoZSksT319LHtcIi4vc2hhZGVyc1wiOjMwOCxjb2xvcm1hcDoxMTcsXCJnbC1idWZmZXJcIjoyMzgsXCJnbC1tYXQ0L2ludmVydFwiOjI2MixcImdsLW1hdDQvbXVsdGlwbHlcIjoyNjQsXCJnbC1zaGFkZXJcIjoyOTgsXCJnbC10ZXh0dXJlMmRcIjozMTUsXCJnbC12YW9cIjozMjAsbmRhcnJheTo0NDMsbm9ybWFsczo0NDYsXCJzaW1wbGljaWFsLWNvbXBsZXgtY29udG91clwiOjUwMyxcInR5cGVkYXJyYXktcG9vbFwiOjUzMH1dLDMxMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbC12ZWMzXCIpLGk9dChcImdsLXZlYzRcIiksYT1mdW5jdGlvbih0LGUscixhKXtmb3IodmFyIG89MCxzPTA7czx0Lmxlbmd0aDtzKyspZm9yKHZhciBsPXRbc10udmVsb2NpdGllcyxjPTA7YzxsLmxlbmd0aDtjKyspe3ZhciB1PW4ubGVuZ3RoKGxbY10pO3U+byYmKG89dSl9dmFyIGg9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvLHMsbCxjPXQucG9pbnRzLHU9dC52ZWxvY2l0aWVzLGg9dC5kaXZlcmdlbmNlcztuLnNldChuLmNyZWF0ZSgpLDAsMSwwKSxuLmNyZWF0ZSgpLG4uY3JlYXRlKCk7bi5jcmVhdGUoKTtmb3IodmFyIGY9W10scD1bXSxkPVtdLGc9W10sdj1bXSxtPVtdLHk9MCx4PTAsYj1pLmNyZWF0ZSgpLF89aS5jcmVhdGUoKSx3PTA7dzxjLmxlbmd0aDt3Kyspe289Y1t3XSxzPXVbd10sbD1oW3ddLDA9PT1lJiYobD0uMDUqcikseD1uLmxlbmd0aChzKS9hLGI9aS5jcmVhdGUoKSxuLmNvcHkoYixzKSxiWzNdPWw7Zm9yKHZhciBrPTA7azw4O2srKyl2W2tdPVtvWzBdLG9bMV0sb1syXSxrXTtpZihnLmxlbmd0aD4wKWZvcihrPTA7azw4O2srKyl7dmFyIEE9KGsrMSklODtmLnB1c2goZ1trXSx2W2tdLHZbQV0sdltBXSxnW0FdLGdba10pLGQucHVzaChfLGIsYixiLF8sXyksbS5wdXNoKHkseCx4LHgseSx5KSxwLnB1c2goW2YubGVuZ3RoLTYsZi5sZW5ndGgtNSxmLmxlbmd0aC00XSxbZi5sZW5ndGgtMyxmLmxlbmd0aC0yLGYubGVuZ3RoLTFdKX12YXIgVD1nO2c9dix2PVQsVD1fLF89YixiPVQsVD15LHk9eCx4PVR9cmV0dXJue3Bvc2l0aW9uczpmLGNlbGxzOnAsdmVjdG9yczpkLHZlcnRleEludGVuc2l0eTptfX0odCxyLGEsbyl9KSxmPVtdLHA9W10sZD1bXSxnPVtdO2ZvcihzPTA7czxoLmxlbmd0aDtzKyspe3ZhciB2PWhbc10sbT1mLmxlbmd0aDtmPWYuY29uY2F0KHYucG9zaXRpb25zKSxkPWQuY29uY2F0KHYudmVjdG9ycyksZz1nLmNvbmNhdCh2LnZlcnRleEludGVuc2l0eSk7Zm9yKGM9MDtjPHYuY2VsbHMubGVuZ3RoO2MrKyl7dmFyIHk9di5jZWxsc1tjXSx4PVtdO3AucHVzaCh4KTtmb3IodmFyIGI9MDtiPHkubGVuZ3RoO2IrKyl4LnB1c2goeVtiXSttKX19cmV0dXJue3Bvc2l0aW9uczpmLGNlbGxzOnAsdmVjdG9yczpkLHZlcnRleEludGVuc2l0eTpnLGNvbG9ybWFwOmV9fSxvPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5jcmVhdGUoKSxpPTFlLTQ7bi5hZGQocix0LFtpLDAsMF0pO3ZhciBhPXRoaXMuZ2V0VmVsb2NpdHkocik7bi5zdWJ0cmFjdChhLGEsZSksbi5zY2FsZShhLGEsMWU0KSxuLmFkZChyLHQsWzAsaSwwXSk7dmFyIG89dGhpcy5nZXRWZWxvY2l0eShyKTtuLnN1YnRyYWN0KG8sbyxlKSxuLnNjYWxlKG8sbywxZTQpLG4uYWRkKHIsdCxbMCwwLGldKTt2YXIgcz10aGlzLmdldFZlbG9jaXR5KHIpO3JldHVybiBuLnN1YnRyYWN0KHMscyxlKSxuLnNjYWxlKHMscywxZTQpLG4uYWRkKHIsYSxvKSxuLmFkZChyLHIscykscn0scz1mdW5jdGlvbih0KXtyZXR1cm4gZih0LHRoaXMudmVjdG9ycyx0aGlzLm1lc2hncmlkLHRoaXMuY2xhbXBCb3JkZXJzKX0sbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO2lmKG49PT1lKXJldHVybiByO2lmKG4+ZSlyZXR1cm4gci0xfXJldHVybiByfSxjPW4uY3JlYXRlKCksdT1uLmNyZWF0ZSgpLGg9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PGU/ZTp0PnI/cjp0fSxmPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXRbMF0sbz10WzFdLHM9dFsyXSxmPXJbMF0ubGVuZ3RoLHA9clsxXS5sZW5ndGgsZD1yWzJdLmxlbmd0aCxnPWwoclswXSxhKSx2PWwoclsxXSxvKSxtPWwoclsyXSxzKSx5PWcrMSx4PXYrMSxiPW0rMTtpZihyWzBdW2ddPT09YSYmKHk9ZyksclsxXVt2XT09PW8mJih4PXYpLHJbMl1bbV09PT1zJiYoYj1tKSxpJiYoZz1oKGcsMCxmLTEpLHk9aCh5LDAsZi0xKSx2PWgodiwwLHAtMSkseD1oKHgsMCxwLTEpLG09aChtLDAsZC0xKSxiPWgoYiwwLGQtMSkpLGc8MHx8djwwfHxtPDB8fHk+PWZ8fHg+PXB8fGI+PWQpcmV0dXJuIG4uY3JlYXRlKCk7dmFyIF89KGEtclswXVtnXSkvKHJbMF1beV0tclswXVtnXSksdz0oby1yWzFdW3ZdKS8oclsxXVt4XS1yWzFdW3ZdKSxrPShzLXJbMl1bbV0pLyhyWzJdW2JdLXJbMl1bbV0pOyhfPDB8fF8+MXx8aXNOYU4oXykpJiYoXz0wKSwodzwwfHx3PjF8fGlzTmFOKHcpKSYmKHc9MCksKGs8MHx8az4xfHxpc05hTihrKSkmJihrPTApO3ZhciBBPW0qZipwLFQ9YipmKnAsTT12KmYsUz14KmYsRT1nLEM9eSxMPWVbTStBK0VdLHo9ZVtNK0ErQ10sTz1lW1MrQStFXSxJPWVbUytBK0NdLEQ9ZVtNK1QrRV0sUD1lW00rVCtDXSxSPWVbUytUK0VdLEY9ZVtTK1QrQ10sQj1uLmNyZWF0ZSgpO3JldHVybiBuLmxlcnAoQixMLHosXyksbi5sZXJwKGMsTyxJLF8pLG4ubGVycChCLEIsYyx3KSxuLmxlcnAoYyxELFAsXyksbi5sZXJwKHUsUixGLF8pLG4ubGVycChjLGMsdSx3KSxuLmxlcnAoQixCLGMsayksQn0scD1mdW5jdGlvbih0KXt2YXIgZT0xLzA7dC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pO2Zvcih2YXIgcj0xO3I8dC5sZW5ndGg7cisrKXt2YXIgbj1NYXRoLmFicyh0W3JdLXRbci0xXSk7bjxlJiYoZT1uKX1yZXR1cm4gZX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGFydGluZ1Bvc2l0aW9ucyxpPXQubWF4TGVuZ3RofHwxZTMsbD10LnR1YmVTaXplfHwxLGM9dC5hYnNvbHV0ZVR1YmVTaXplO3QuZ2V0RGl2ZXJnZW5jZXx8KHQuZ2V0RGl2ZXJnZW5jZT1vKSx0LmdldFZlbG9jaXR5fHwodC5nZXRWZWxvY2l0eT1zKSx2b2lkIDA9PT10LmNsYW1wQm9yZGVycyYmKHQuY2xhbXBCb3JkZXJzPSEwKTt2YXIgdT1bXSxoPWVbMF1bMF0sZj1lWzBdWzFdLGQ9ZVswXVsyXSxnPWVbMV1bMF0sdj1lWzFdWzFdLG09ZVsxXVsyXSx5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdO3JldHVybiByPj1oJiZyPD1nJiZuPj1mJiZuPD12JiZpPj1kJiZpPD1tfSx4PTEwKm4uZGlzdGFuY2UoZVswXSxlWzFdKS9pLGI9eCp4LF89MSx3PTA7bi5jcmVhdGUoKTtyLmxlbmd0aD49MiYmKF89ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9W10sbj1bXSxpPXt9LGE9e30sbz17fSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPXRbc10sYz1sWzBdLHU9bFsxXSxoPWxbMl07aVtjXXx8KGUucHVzaChjKSxpW2NdPSEwKSxhW3VdfHwoci5wdXNoKHUpLGFbdV09ITApLG9baF18fChuLnB1c2goaCksb1toXT0hMCl9dmFyIGY9cChlKSxkPXAociksZz1wKG4pLHY9TWF0aC5taW4oZixkLGcpO3JldHVybiBpc0Zpbml0ZSh2KT92OjF9KHIpKTtmb3IodmFyIGs9MDtrPHIubGVuZ3RoO2srKyl7dmFyIEE9bi5jcmVhdGUoKTtuLmNvcHkoQSxyW2tdKTt2YXIgVD1bQV0sTT1bXSxTPXQuZ2V0VmVsb2NpdHkoQSksRT1BO00ucHVzaChTKTt2YXIgQz1bXSxMPXQuZ2V0RGl2ZXJnZW5jZShBLFMpOyhEPW4ubGVuZ3RoKEwpKT53JiYhaXNOYU4oRCkmJmlzRmluaXRlKEQpJiYodz1EKSxDLnB1c2goRCksdS5wdXNoKHtwb2ludHM6VCx2ZWxvY2l0aWVzOk0sZGl2ZXJnZW5jZXM6Q30pO2Zvcih2YXIgej0wO3o8MTAwKmkmJlQubGVuZ3RoPGkmJnkoMCxBKTspe3orKzt2YXIgTz1uLmNsb25lKFMpLEk9bi5zcXVhcmVkTGVuZ3RoKE8pO2lmKDA9PT1JKWJyZWFrO2lmKEk+YiYmbi5zY2FsZShPLE8seC9NYXRoLnNxcnQoSSkpLG4uYWRkKE8sTyxBKSxTPXQuZ2V0VmVsb2NpdHkoTyksbi5zcXVhcmVkRGlzdGFuY2UoRSxPKS1iPi0xZS00KmIpe1QucHVzaChPKSxFPU8sTS5wdXNoKFMpO0w9dC5nZXREaXZlcmdlbmNlKE8sUyk7KEQ9bi5sZW5ndGgoTCkpPncmJiFpc05hTihEKSYmaXNGaW5pdGUoRCkmJih3PUQpLEMucHVzaChEKX1BPU99fWZvcihrPTA7azxDLmxlbmd0aDtrKyspe3ZhciBEPUNba107IWlzTmFOKEQpJiZpc0Zpbml0ZShEKXx8KENba109dyl9dmFyIFA9YSh1LHQuY29sb3JtYXAsdyxfKTtyZXR1cm4gYz9QLnR1YmVTY2FsZT1jOigwPT09dyYmKHc9MSksUC50dWJlU2NhbGU9LjUqbCpfL3cpLFB9LGUuZXhwb3J0cy5jcmVhdGVUdWJlTWVzaD10KFwiLi9saWIvdHViZW1lc2hcIil9LHtcIi4vbGliL3R1YmVtZXNoXCI6MzA5LFwiZ2wtdmVjM1wiOjMzOSxcImdsLXZlYzRcIjozNzV9XSwzMTE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiZ2wtc2hhZGVyXCIpLGk9dChcImdsc2xpZnlcIiksYT1pKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWM0IHV2O1xcbmF0dHJpYnV0ZSB2ZWMzIGY7XFxuYXR0cmlidXRlIHZlYzMgbm9ybWFsO1xcblxcbnVuaWZvcm0gdmVjMyBvYmplY3RPZmZzZXQ7XFxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uLCBpbnZlcnNlTW9kZWw7XFxudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb24sIGV5ZVBvc2l0aW9uO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGNvbG9ybWFwO1xcblxcbnZhcnlpbmcgZmxvYXQgdmFsdWUsIGtpbGw7XFxudmFyeWluZyB2ZWMzIHdvcmxkQ29vcmRpbmF0ZTtcXG52YXJ5aW5nIHZlYzIgcGxhbmVDb29yZGluYXRlO1xcbnZhcnlpbmcgdmVjMyBsaWdodERpcmVjdGlvbiwgZXllRGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgdmVjMyBsb2NhbENvb3JkaW5hdGUgPSB2ZWMzKHV2Lnp3LCBmLngpO1xcbiAgd29ybGRDb29yZGluYXRlID0gb2JqZWN0T2Zmc2V0ICsgbG9jYWxDb29yZGluYXRlO1xcbiAgdmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHdvcmxkQ29vcmRpbmF0ZSwgMS4wKTtcXG4gIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xcbiAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XFxuICBraWxsID0gZi55O1xcbiAgdmFsdWUgPSBmLno7XFxuICBwbGFuZUNvb3JkaW5hdGUgPSB1di54eTtcXG5cXG4gIHZDb2xvciA9IHRleHR1cmUyRChjb2xvcm1hcCwgdmVjMih2YWx1ZSwgdmFsdWUpKTtcXG5cXG4gIC8vTGlnaHRpbmcgZ2VvbWV0cnkgcGFyYW1ldGVyc1xcbiAgdmVjNCBjYW1lcmFDb29yZGluYXRlID0gdmlldyAqIHdvcmxkUG9zaXRpb247XFxuICBjYW1lcmFDb29yZGluYXRlLnh5eiAvPSBjYW1lcmFDb29yZGluYXRlLnc7XFxuICBsaWdodERpcmVjdGlvbiA9IGxpZ2h0UG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcXG4gIGV5ZURpcmVjdGlvbiAgID0gZXllUG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcXG4gIHN1cmZhY2VOb3JtYWwgID0gbm9ybWFsaXplKCh2ZWM0KG5vcm1hbCwwKSAqIGludmVyc2VNb2RlbCkueHl6KTtcXG59XFxuXCJdKSxvPWkoW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuZmxvYXQgYmVja21hbm5EaXN0cmlidXRpb24oZmxvYXQgeCwgZmxvYXQgcm91Z2huZXNzKSB7XFxuICBmbG9hdCBOZG90SCA9IG1heCh4LCAwLjAwMDEpO1xcbiAgZmxvYXQgY29zMkFscGhhID0gTmRvdEggKiBOZG90SDtcXG4gIGZsb2F0IHRhbjJBbHBoYSA9IChjb3MyQWxwaGEgLSAxLjApIC8gY29zMkFscGhhO1xcbiAgZmxvYXQgcm91Z2huZXNzMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcXG4gIGZsb2F0IGRlbm9tID0gMy4xNDE1OTI2NTM1ODk3OTMgKiByb3VnaG5lc3MyICogY29zMkFscGhhICogY29zMkFscGhhO1xcbiAgcmV0dXJuIGV4cCh0YW4yQWxwaGEgLyByb3VnaG5lc3MyKSAvIGRlbm9tO1xcbn1cXG5cXG5mbG9hdCBiZWNrbWFublNwZWN1bGFyKFxcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcXG4gIHZlYzMgdmlld0RpcmVjdGlvbixcXG4gIHZlYzMgc3VyZmFjZU5vcm1hbCxcXG4gIGZsb2F0IHJvdWdobmVzcykge1xcbiAgcmV0dXJuIGJlY2ttYW5uRGlzdHJpYnV0aW9uKGRvdChzdXJmYWNlTm9ybWFsLCBub3JtYWxpemUobGlnaHREaXJlY3Rpb24gKyB2aWV3RGlyZWN0aW9uKSksIHJvdWdobmVzcyk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XFxuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcXG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xcbn1cXG5cXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XFxufVxcblxcbnVuaWZvcm0gdmVjMyBsb3dlckJvdW5kLCB1cHBlckJvdW5kO1xcbnVuaWZvcm0gZmxvYXQgY29udG91clRpbnQ7XFxudW5pZm9ybSB2ZWM0IGNvbnRvdXJDb2xvcjtcXG51bmlmb3JtIHNhbXBsZXIyRCBjb2xvcm1hcDtcXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcXG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcywgZnJlc25lbCwga2FtYmllbnQsIGtkaWZmdXNlLCBrc3BlY3VsYXIsIG9wYWNpdHk7XFxudW5pZm9ybSBmbG9hdCB2ZXJ0ZXhDb2xvcjtcXG5cXG52YXJ5aW5nIGZsb2F0IHZhbHVlLCBraWxsO1xcbnZhcnlpbmcgdmVjMyB3b3JsZENvb3JkaW5hdGU7XFxudmFyeWluZyB2ZWMzIGxpZ2h0RGlyZWN0aW9uLCBleWVEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWw7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBpZiAoKGtpbGwgPiAwLjApIHx8XFxuICAgICAgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgd29ybGRDb29yZGluYXRlKSkpIGRpc2NhcmQ7XFxuXFxuICB2ZWMzIE4gPSBub3JtYWxpemUoc3VyZmFjZU5vcm1hbCk7XFxuICB2ZWMzIFYgPSBub3JtYWxpemUoZXllRGlyZWN0aW9uKTtcXG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShsaWdodERpcmVjdGlvbik7XFxuXFxuICBpZihnbF9Gcm9udEZhY2luZykge1xcbiAgICBOID0gLU47XFxuICB9XFxuXFxuICBmbG9hdCBzcGVjdWxhciA9IG1heChiZWNrbWFublNwZWN1bGFyKEwsIFYsIE4sIHJvdWdobmVzcyksIDAuKTtcXG4gIGZsb2F0IGRpZmZ1c2UgID0gbWluKGthbWJpZW50ICsga2RpZmZ1c2UgKiBtYXgoZG90KE4sIEwpLCAwLjApLCAxLjApO1xcblxcbiAgLy9kZWNpZGUgaG93IHRvIGludGVycG9sYXRlIGNvbG9yIFxcdTIwMTQgaW4gdmVydGV4IG9yIGluIGZyYWdtZW50XFxuICB2ZWM0IHN1cmZhY2VDb2xvciA9XFxuICAgIHN0ZXAodmVydGV4Q29sb3IsIC41KSAqIHRleHR1cmUyRChjb2xvcm1hcCwgdmVjMih2YWx1ZSwgdmFsdWUpKSArXFxuICAgIHN0ZXAoLjUsIHZlcnRleENvbG9yKSAqIHZDb2xvcjtcXG5cXG4gIHZlYzQgbGl0Q29sb3IgPSBzdXJmYWNlQ29sb3IuYSAqIHZlYzQoZGlmZnVzZSAqIHN1cmZhY2VDb2xvci5yZ2IgKyBrc3BlY3VsYXIgKiB2ZWMzKDEsMSwxKSAqIHNwZWN1bGFyLCAgMS4wKTtcXG5cXG4gIGdsX0ZyYWdDb2xvciA9IG1peChsaXRDb2xvciwgY29udG91ckNvbG9yLCBjb250b3VyVGludCkgKiBvcGFjaXR5O1xcbn1cXG5cIl0pLHM9aShbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjNCB1djtcXG5hdHRyaWJ1dGUgZmxvYXQgZjtcXG5cXG51bmlmb3JtIHZlYzMgb2JqZWN0T2Zmc2V0O1xcbnVuaWZvcm0gbWF0MyBwZXJtdXRhdGlvbjtcXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XFxudW5pZm9ybSBmbG9hdCBoZWlnaHQsIHpPZmZzZXQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgY29sb3JtYXA7XFxuXFxudmFyeWluZyBmbG9hdCB2YWx1ZSwga2lsbDtcXG52YXJ5aW5nIHZlYzMgd29ybGRDb29yZGluYXRlO1xcbnZhcnlpbmcgdmVjMiBwbGFuZUNvb3JkaW5hdGU7XFxudmFyeWluZyB2ZWMzIGxpZ2h0RGlyZWN0aW9uLCBleWVEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWw7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWMzIGRhdGFDb29yZGluYXRlID0gcGVybXV0YXRpb24gKiB2ZWMzKHV2Lnh5LCBoZWlnaHQpO1xcbiAgd29ybGRDb29yZGluYXRlID0gb2JqZWN0T2Zmc2V0ICsgZGF0YUNvb3JkaW5hdGU7XFxuICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQod29ybGRDb29yZGluYXRlLCAxLjApO1xcblxcbiAgdmVjNCBjbGlwUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIHdvcmxkUG9zaXRpb247XFxuICBjbGlwUG9zaXRpb24ueiArPSB6T2Zmc2V0O1xcblxcbiAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XFxuICB2YWx1ZSA9IGYgKyBvYmplY3RPZmZzZXQuejtcXG4gIGtpbGwgPSAtMS4wO1xcbiAgcGxhbmVDb29yZGluYXRlID0gdXYuenc7XFxuXFxuICB2Q29sb3IgPSB0ZXh0dXJlMkQoY29sb3JtYXAsIHZlYzIodmFsdWUsIHZhbHVlKSk7XFxuXFxuICAvL0Rvbid0IGRvIGxpZ2h0aW5nIGZvciBjb250b3Vyc1xcbiAgc3VyZmFjZU5vcm1hbCAgID0gdmVjMygxLDAsMCk7XFxuICBleWVEaXJlY3Rpb24gICAgPSB2ZWMzKDAsMSwwKTtcXG4gIGxpZ2h0RGlyZWN0aW9uICA9IHZlYzMoMCwwLDEpO1xcbn1cXG5cIl0pLGw9aShbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XFxufVxcblxcbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XFxuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcXG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcXG59XFxuXFxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcXG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xcbn1cXG5cXG51bmlmb3JtIHZlYzIgc2hhcGU7XFxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XFxudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XFxuXFxudmFyeWluZyBmbG9hdCB2YWx1ZSwga2lsbDtcXG52YXJ5aW5nIHZlYzMgd29ybGRDb29yZGluYXRlO1xcbnZhcnlpbmcgdmVjMiBwbGFuZUNvb3JkaW5hdGU7XFxudmFyeWluZyB2ZWMzIHN1cmZhY2VOb3JtYWw7XFxuXFxudmVjMiBzcGxpdEZsb2F0KGZsb2F0IHYpIHtcXG4gIGZsb2F0IHZoID0gMjU1LjAgKiB2O1xcbiAgZmxvYXQgdXBwZXIgPSBmbG9vcih2aCk7XFxuICBmbG9hdCBsb3dlciA9IGZyYWN0KHZoKTtcXG4gIHJldHVybiB2ZWMyKHVwcGVyIC8gMjU1LjAsIGZsb29yKGxvd2VyICogMTYuMCkgLyAxNi4wKTtcXG59XFxuXFxudm9pZCBtYWluKCkge1xcbiAgaWYgKChraWxsID4gMC4wKSB8fFxcbiAgICAgIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHdvcmxkQ29vcmRpbmF0ZSkpKSBkaXNjYXJkO1xcblxcbiAgdmVjMiB1eCA9IHNwbGl0RmxvYXQocGxhbmVDb29yZGluYXRlLnggLyBzaGFwZS54KTtcXG4gIHZlYzIgdXkgPSBzcGxpdEZsb2F0KHBsYW5lQ29vcmRpbmF0ZS55IC8gc2hhcGUueSk7XFxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZCwgdXgueCwgdXkueCwgdXgueSArICh1eS55LzE2LjApKTtcXG59XFxuXCJdKTtyLmNyZWF0ZVNoYWRlcj1mdW5jdGlvbih0KXt2YXIgZT1uKHQsYSxvLG51bGwsW3tuYW1lOlwidXZcIix0eXBlOlwidmVjNFwifSx7bmFtZTpcImZcIix0eXBlOlwidmVjM1wifSx7bmFtZTpcIm5vcm1hbFwiLHR5cGU6XCJ2ZWMzXCJ9XSk7cmV0dXJuIGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5mLmxvY2F0aW9uPTEsZS5hdHRyaWJ1dGVzLm5vcm1hbC5sb2NhdGlvbj0yLGV9LHIuY3JlYXRlUGlja1NoYWRlcj1mdW5jdGlvbih0KXt2YXIgZT1uKHQsYSxsLG51bGwsW3tuYW1lOlwidXZcIix0eXBlOlwidmVjNFwifSx7bmFtZTpcImZcIix0eXBlOlwidmVjM1wifSx7bmFtZTpcIm5vcm1hbFwiLHR5cGU6XCJ2ZWMzXCJ9XSk7cmV0dXJuIGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5mLmxvY2F0aW9uPTEsZS5hdHRyaWJ1dGVzLm5vcm1hbC5sb2NhdGlvbj0yLGV9LHIuY3JlYXRlQ29udG91clNoYWRlcj1mdW5jdGlvbih0KXt2YXIgZT1uKHQscyxvLG51bGwsW3tuYW1lOlwidXZcIix0eXBlOlwidmVjNFwifSx7bmFtZTpcImZcIix0eXBlOlwiZmxvYXRcIn1dKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmYubG9jYXRpb249MSxlfSxyLmNyZWF0ZVBpY2tDb250b3VyU2hhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxzLGwsbnVsbCxbe25hbWU6XCJ1dlwiLHR5cGU6XCJ2ZWM0XCJ9LHtuYW1lOlwiZlwiLHR5cGU6XCJmbG9hdFwifV0pO3JldHVybiBlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuZi5sb2NhdGlvbj0xLGV9fSx7XCJnbC1zaGFkZXJcIjoyOTgsZ2xzbGlmeTo0MDJ9XSwzMTI6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMTAyXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MTAyfV0sMzEzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj15KGUpLG49YihlKSxzPXgoZSksbD1fKGUpLGM9aShlKSx1PWEoZSxbe2J1ZmZlcjpjLHNpemU6NCxzdHJpZGU6dyxvZmZzZXQ6MH0se2J1ZmZlcjpjLHNpemU6MyxzdHJpZGU6dyxvZmZzZXQ6MTZ9LHtidWZmZXI6YyxzaXplOjMsc3RyaWRlOncsb2Zmc2V0OjI4fV0pLGg9aShlKSxmPWEoZSxbe2J1ZmZlcjpoLHNpemU6NCxzdHJpZGU6MjAsb2Zmc2V0OjB9LHtidWZmZXI6aCxzaXplOjEsc3RyaWRlOjIwLG9mZnNldDoxNn1dKSxwPWkoZSksZD1hKGUsW3tidWZmZXI6cCxzaXplOjIsdHlwZTplLkZMT0FUfV0pLGc9byhlLDEsUyxlLlJHQkEsZS5VTlNJR05FRF9CWVRFKTtnLm1pbkZpbHRlcj1lLkxJTkVBUixnLm1hZ0ZpbHRlcj1lLkxJTkVBUjt2YXIgdj1uZXcgRShlLFswLDBdLFtbMCwwLDBdLFswLDAsMF1dLHIsbixjLHUsZyxzLGwsaCxmLHAsZCxbMCwwLDBdKSxtPXtsZXZlbHM6W1tdLFtdLFtdXX07Zm9yKHZhciBrIGluIHQpbVtrXT10W2tdO3JldHVybiBtLmNvbG9ybWFwPW0uY29sb3JtYXB8fFwiamV0XCIsdi51cGRhdGUobSksdn07dmFyIG49dChcImJpdC10d2lkZGxlXCIpLGk9dChcImdsLWJ1ZmZlclwiKSxhPXQoXCJnbC12YW9cIiksbz10KFwiZ2wtdGV4dHVyZTJkXCIpLHM9dChcInR5cGVkYXJyYXktcG9vbFwiKSxsPXQoXCJjb2xvcm1hcFwiKSxjPXQoXCJuZGFycmF5LW9wc1wiKSx1PXQoXCJuZGFycmF5LXBhY2tcIiksaD10KFwibmRhcnJheVwiKSxmPXQoXCJzdXJmYWNlLW5ldHNcIikscD10KFwiZ2wtbWF0NC9tdWx0aXBseVwiKSxkPXQoXCJnbC1tYXQ0L2ludmVydFwiKSxnPXQoXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiKSx2PXQoXCJuZGFycmF5LWdyYWRpZW50XCIpLG09dChcIi4vbGliL3NoYWRlcnNcIikseT1tLmNyZWF0ZVNoYWRlcix4PW0uY3JlYXRlQ29udG91clNoYWRlcixiPW0uY3JlYXRlUGlja1NoYWRlcixfPW0uY3JlYXRlUGlja0NvbnRvdXJTaGFkZXIsdz00MCxrPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSxBPVtbMCwwXSxbMCwxXSxbMSwwXSxbMSwxXSxbMSwwXSxbMCwxXV0sVD1bWzAsMCwwLDAsMCwwLDAsMCwwXSxbMCwwLDAsMCwwLDAsMCwwLDBdLFswLDAsMCwwLDAsMCwwLDAsMF1dO2Z1bmN0aW9uIE0odCxlLHIsbixpKXt0aGlzLnBvc2l0aW9uPXQsdGhpcy5pbmRleD1lLHRoaXMudXY9cix0aGlzLmxldmVsPW4sdGhpcy5kYXRhQ29vcmRpbmF0ZT1pfSFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8MzsrK3Qpe3ZhciBlPVRbdF0scj0odCsyKSUzO2VbKHQrMSklMyswXT0xLGVbciszXT0xLGVbdCs2XT0xfX0oKTt2YXIgUz0yNTY7ZnVuY3Rpb24gRSh0LGUscixuLGksYSxvLGwsYyx1LGYscCxkLGcsdil7dGhpcy5nbD10LHRoaXMuc2hhcGU9ZSx0aGlzLmJvdW5kcz1yLHRoaXMub2JqZWN0T2Zmc2V0PXYsdGhpcy5pbnRlbnNpdHlCb3VuZHM9W10sdGhpcy5fc2hhZGVyPW4sdGhpcy5fcGlja1NoYWRlcj1pLHRoaXMuX2Nvb3JkaW5hdGVCdWZmZXI9YSx0aGlzLl92YW89byx0aGlzLl9jb2xvck1hcD1sLHRoaXMuX2NvbnRvdXJTaGFkZXI9Yyx0aGlzLl9jb250b3VyUGlja1NoYWRlcj11LHRoaXMuX2NvbnRvdXJCdWZmZXI9Zix0aGlzLl9jb250b3VyVkFPPXAsdGhpcy5fY29udG91ck9mZnNldHM9W1tdLFtdLFtdXSx0aGlzLl9jb250b3VyQ291bnRzPVtbXSxbXSxbXV0sdGhpcy5fdmVydGV4Q291bnQ9MCx0aGlzLl9waWNrUmVzdWx0PW5ldyBNKFswLDAsMF0sWzAsMF0sWzAsMF0sWzAsMCwwXSxbMCwwLDBdKSx0aGlzLl9keW5hbWljQnVmZmVyPWQsdGhpcy5fZHluYW1pY1ZBTz1nLHRoaXMuX2R5bmFtaWNPZmZzZXRzPVswLDAsMF0sdGhpcy5fZHluYW1pY0NvdW50cz1bMCwwLDBdLHRoaXMuY29udG91cldpZHRoPVsxLDEsMV0sdGhpcy5jb250b3VyTGV2ZWxzPVtbMV0sWzFdLFsxXV0sdGhpcy5jb250b3VyVGludD1bMCwwLDBdLHRoaXMuY29udG91ckNvbG9yPVtbLjUsLjUsLjUsMV0sWy41LC41LC41LDFdLFsuNSwuNSwuNSwxXV0sdGhpcy5zaG93Q29udG91cj0hMCx0aGlzLnNob3dTdXJmYWNlPSEwLHRoaXMuZW5hYmxlSGlnaGxpZ2h0PVshMCwhMCwhMF0sdGhpcy5oaWdobGlnaHRDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuaGlnaGxpZ2h0VGludD1bMSwxLDFdLHRoaXMuaGlnaGxpZ2h0TGV2ZWw9Wy0xLC0xLC0xXSx0aGlzLmVuYWJsZUR5bmFtaWM9WyEwLCEwLCEwXSx0aGlzLmR5bmFtaWNMZXZlbD1bTmFOLE5hTixOYU5dLHRoaXMuZHluYW1pY0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5keW5hbWljVGludD1bMSwxLDFdLHRoaXMuZHluYW1pY1dpZHRoPVsxLDEsMV0sdGhpcy5heGVzQm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuc3VyZmFjZVByb2plY3Q9WyExLCExLCExXSx0aGlzLmNvbnRvdXJQcm9qZWN0PVtbITEsITEsITFdLFshMSwhMSwhMV0sWyExLCExLCExXV0sdGhpcy5jb2xvckJvdW5kcz1bITEsITFdLHRoaXMuX2ZpZWxkPVtoKHMubWFsbG9jRmxvYXQoMTAyNCksWzAsMF0pLGgocy5tYWxsb2NGbG9hdCgxMDI0KSxbMCwwXSksaChzLm1hbGxvY0Zsb2F0KDEwMjQpLFswLDBdKV0sdGhpcy5waWNrSWQ9MSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5zbmFwVG9EYXRhPSExLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMub3BhY2l0eT0xLHRoaXMubGlnaHRQb3NpdGlvbj1bMTAsMWU0LDBdLHRoaXMuYW1iaWVudExpZ2h0PS44LHRoaXMuZGlmZnVzZUxpZ2h0PS44LHRoaXMuc3BlY3VsYXJMaWdodD0yLHRoaXMucm91Z2huZXNzPS41LHRoaXMuZnJlc25lbD0xLjUsdGhpcy52ZXJ0ZXhDb2xvcj0wLHRoaXMuZGlydHk9ITB9dmFyIEM9RS5wcm90b3R5cGU7Qy5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BhY2l0eTwxfSxDLmlzT3BhcXVlPWZ1bmN0aW9uKCl7aWYodGhpcy5vcGFjaXR5Pj0xKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8MzsrK3QpaWYodGhpcy5fY29udG91ckNvdW50c1t0XS5sZW5ndGg+MHx8dGhpcy5fZHluYW1pY0NvdW50c1t0XT4wKXJldHVybiEwO3JldHVybiExfSxDLnBpY2tTbG90cz0xLEMuc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH07dmFyIEw9WzAsMCwwXSx6PXtzaG93U3VyZmFjZTohMSxzaG93Q29udG91cjohMSxwcm9qZWN0aW9uczpbay5zbGljZSgpLGsuc2xpY2UoKSxrLnNsaWNlKCldLGNsaXBCb3VuZHM6W1tbMCwwLDBdLFswLDAsMF1dLFtbMCwwLDBdLFswLDAsMF1dLFtbMCwwLDBdLFswLDAsMF1dXX07ZnVuY3Rpb24gTyh0LGUpe3ZhciByLG4saSxhPWUuYXhlcyYmZS5heGVzLmxhc3RDdWJlUHJvcHMuYXhpc3x8TCxvPWUuc2hvd1N1cmZhY2Uscz1lLnNob3dDb250b3VyO2ZvcihyPTA7cjwzOysrcilmb3Iobz1vfHxlLnN1cmZhY2VQcm9qZWN0W3JdLG49MDtuPDM7KytuKXM9c3x8ZS5jb250b3VyUHJvamVjdFtyXVtuXTtmb3Iocj0wO3I8MzsrK3Ipe3ZhciBsPXoucHJvamVjdGlvbnNbcl07Zm9yKG49MDtuPDE2OysrbilsW25dPTA7Zm9yKG49MDtuPDQ7KytuKWxbNSpuXT0xO2xbNSpyXT0wLGxbMTIrcl09ZS5heGVzQm91bmRzWysoYVtyXT4wKV1bcl0scChsLHQubW9kZWwsbCk7dmFyIGM9ei5jbGlwQm91bmRzW3JdO2ZvcihpPTA7aTwyOysraSlmb3Iobj0wO248MzsrK24pY1tpXVtuXT10LmNsaXBCb3VuZHNbaV1bbl07Y1swXVtyXT0tMWU4LGNbMV1bcl09MWU4fXJldHVybiB6LnNob3dTdXJmYWNlPW8sei5zaG93Q29udG91cj1zLHp9dmFyIEk9e21vZGVsOmssdmlldzprLHByb2plY3Rpb246ayxpbnZlcnNlTW9kZWw6ay5zbGljZSgpLGxvd2VyQm91bmQ6WzAsMCwwXSx1cHBlckJvdW5kOlswLDAsMF0sY29sb3JNYXA6MCxjbGlwQm91bmRzOltbMCwwLDBdLFswLDAsMF1dLGhlaWdodDowLGNvbnRvdXJUaW50OjAsY29udG91ckNvbG9yOlswLDAsMCwxXSxwZXJtdXRhdGlvbjpbMSwwLDAsMCwxLDAsMCwwLDFdLHpPZmZzZXQ6LTFlLTQsb2JqZWN0T2Zmc2V0OlswLDAsMF0sa2FtYmllbnQ6MSxrZGlmZnVzZToxLGtzcGVjdWxhcjoxLGxpZ2h0UG9zaXRpb246WzFlMywxZTMsMWUzXSxleWVQb3NpdGlvbjpbMCwwLDBdLHJvdWdobmVzczoxLGZyZXNuZWw6MSxvcGFjaXR5OjEsdmVydGV4Q29sb3I6MH0sRD1rLnNsaWNlKCksUD1bMSwwLDAsMCwxLDAsMCwwLDFdO2Z1bmN0aW9uIFIodCxlKXt0PXR8fHt9O3ZhciByPXRoaXMuZ2w7ci5kaXNhYmxlKHIuQ1VMTF9GQUNFKSx0aGlzLl9jb2xvck1hcC5iaW5kKDApO3ZhciBuPUk7bi5tb2RlbD10Lm1vZGVsfHxrLG4udmlldz10LnZpZXd8fGssbi5wcm9qZWN0aW9uPXQucHJvamVjdGlvbnx8ayxuLmxvd2VyQm91bmQ9W3RoaXMuYm91bmRzWzBdWzBdLHRoaXMuYm91bmRzWzBdWzFdLHRoaXMuY29sb3JCb3VuZHNbMF18fHRoaXMuYm91bmRzWzBdWzJdXSxuLnVwcGVyQm91bmQ9W3RoaXMuYm91bmRzWzFdWzBdLHRoaXMuYm91bmRzWzFdWzFdLHRoaXMuY29sb3JCb3VuZHNbMV18fHRoaXMuYm91bmRzWzFdWzJdXSxuLm9iamVjdE9mZnNldD10aGlzLm9iamVjdE9mZnNldCxuLmNvbnRvdXJDb2xvcj10aGlzLmNvbnRvdXJDb2xvclswXSxuLmludmVyc2VNb2RlbD1kKG4uaW52ZXJzZU1vZGVsLG4ubW9kZWwpO2Zvcih2YXIgaT0wO2k8MjsrK2kpZm9yKHZhciBhPW4uY2xpcEJvdW5kc1tpXSxvPTA7bzwzOysrbylhW29dPU1hdGgubWluKE1hdGgubWF4KHRoaXMuY2xpcEJvdW5kc1tpXVtvXSwtMWU4KSwxZTgpO24ua2FtYmllbnQ9dGhpcy5hbWJpZW50TGlnaHQsbi5rZGlmZnVzZT10aGlzLmRpZmZ1c2VMaWdodCxuLmtzcGVjdWxhcj10aGlzLnNwZWN1bGFyTGlnaHQsbi5yb3VnaG5lc3M9dGhpcy5yb3VnaG5lc3Msbi5mcmVzbmVsPXRoaXMuZnJlc25lbCxuLm9wYWNpdHk9dGhpcy5vcGFjaXR5LG4uaGVpZ2h0PTAsbi5wZXJtdXRhdGlvbj1QLG4udmVydGV4Q29sb3I9dGhpcy52ZXJ0ZXhDb2xvcjt2YXIgcz1EO2ZvcihwKHMsbi52aWV3LG4ubW9kZWwpLHAocyxuLnByb2plY3Rpb24scyksZChzLHMpLGk9MDtpPDM7KytpKW4uZXllUG9zaXRpb25baV09c1sxMitpXS9zWzE1XTt2YXIgbD1zWzE1XTtmb3IoaT0wO2k8MzsrK2kpbCs9dGhpcy5saWdodFBvc2l0aW9uW2ldKnNbNCppKzNdO2ZvcihpPTA7aTwzOysraSl7dmFyIGM9c1sxMitpXTtmb3Iobz0wO288MzsrK28pYys9c1s0Km8raV0qdGhpcy5saWdodFBvc2l0aW9uW29dO24ubGlnaHRQb3NpdGlvbltpXT1jL2x9dmFyIHU9TyhuLHRoaXMpO2lmKHUuc2hvd1N1cmZhY2UmJmU9PT10aGlzLm9wYWNpdHk8MSl7Zm9yKHRoaXMuX3NoYWRlci5iaW5kKCksdGhpcy5fc2hhZGVyLnVuaWZvcm1zPW4sdGhpcy5fdmFvLmJpbmQoKSx0aGlzLnNob3dTdXJmYWNlJiZ0aGlzLl92ZXJ0ZXhDb3VudCYmdGhpcy5fdmFvLmRyYXcoci5UUklBTkdMRVMsdGhpcy5fdmVydGV4Q291bnQpLGk9MDtpPDM7KytpKXRoaXMuc3VyZmFjZVByb2plY3RbaV0mJnRoaXMudmVydGV4Q291bnQmJih0aGlzLl9zaGFkZXIudW5pZm9ybXMubW9kZWw9dS5wcm9qZWN0aW9uc1tpXSx0aGlzLl9zaGFkZXIudW5pZm9ybXMuY2xpcEJvdW5kcz11LmNsaXBCb3VuZHNbaV0sdGhpcy5fdmFvLmRyYXcoci5UUklBTkdMRVMsdGhpcy5fdmVydGV4Q291bnQpKTt0aGlzLl92YW8udW5iaW5kKCl9aWYodS5zaG93Q29udG91ciYmIWUpe3ZhciBoPXRoaXMuX2NvbnRvdXJTaGFkZXI7bi5rYW1iaWVudD0xLG4ua2RpZmZ1c2U9MCxuLmtzcGVjdWxhcj0wLG4ub3BhY2l0eT0xLGguYmluZCgpLGgudW5pZm9ybXM9bjt2YXIgZj10aGlzLl9jb250b3VyVkFPO2ZvcihmLmJpbmQoKSxpPTA7aTwzOysraSlmb3IoaC51bmlmb3Jtcy5wZXJtdXRhdGlvbj1UW2ldLHIubGluZVdpZHRoKHRoaXMuY29udG91cldpZHRoW2ldKnRoaXMucGl4ZWxSYXRpbyksbz0wO288dGhpcy5jb250b3VyTGV2ZWxzW2ldLmxlbmd0aDsrK28pbz09PXRoaXMuaGlnaGxpZ2h0TGV2ZWxbaV0/KGgudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuaGlnaGxpZ2h0Q29sb3JbaV0saC51bmlmb3Jtcy5jb250b3VyVGludD10aGlzLmhpZ2hsaWdodFRpbnRbaV0pOjAhPT1vJiZvLTEhPT10aGlzLmhpZ2hsaWdodExldmVsW2ldfHwoaC51bmlmb3Jtcy5jb250b3VyQ29sb3I9dGhpcy5jb250b3VyQ29sb3JbaV0saC51bmlmb3Jtcy5jb250b3VyVGludD10aGlzLmNvbnRvdXJUaW50W2ldKSx0aGlzLl9jb250b3VyQ291bnRzW2ldW29dJiYoaC51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5jb250b3VyTGV2ZWxzW2ldW29dLGYuZHJhdyhyLkxJTkVTLHRoaXMuX2NvbnRvdXJDb3VudHNbaV1bb10sdGhpcy5fY29udG91ck9mZnNldHNbaV1bb10pKTtmb3IoaT0wO2k8MzsrK2kpZm9yKGgudW5pZm9ybXMubW9kZWw9dS5wcm9qZWN0aW9uc1tpXSxoLnVuaWZvcm1zLmNsaXBCb3VuZHM9dS5jbGlwQm91bmRzW2ldLG89MDtvPDM7KytvKWlmKHRoaXMuY29udG91clByb2plY3RbaV1bb10pe2gudW5pZm9ybXMucGVybXV0YXRpb249VFtvXSxyLmxpbmVXaWR0aCh0aGlzLmNvbnRvdXJXaWR0aFtvXSp0aGlzLnBpeGVsUmF0aW8pO2Zvcih2YXIgZz0wO2c8dGhpcy5jb250b3VyTGV2ZWxzW29dLmxlbmd0aDsrK2cpZz09PXRoaXMuaGlnaGxpZ2h0TGV2ZWxbb10/KGgudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuaGlnaGxpZ2h0Q29sb3Jbb10saC51bmlmb3Jtcy5jb250b3VyVGludD10aGlzLmhpZ2hsaWdodFRpbnRbb10pOjAhPT1nJiZnLTEhPT10aGlzLmhpZ2hsaWdodExldmVsW29dfHwoaC51bmlmb3Jtcy5jb250b3VyQ29sb3I9dGhpcy5jb250b3VyQ29sb3Jbb10saC51bmlmb3Jtcy5jb250b3VyVGludD10aGlzLmNvbnRvdXJUaW50W29dKSx0aGlzLl9jb250b3VyQ291bnRzW29dW2ddJiYoaC51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5jb250b3VyTGV2ZWxzW29dW2ddLGYuZHJhdyhyLkxJTkVTLHRoaXMuX2NvbnRvdXJDb3VudHNbb11bZ10sdGhpcy5fY29udG91ck9mZnNldHNbb11bZ10pKX1mb3IoZi51bmJpbmQoKSwoZj10aGlzLl9keW5hbWljVkFPKS5iaW5kKCksaT0wO2k8MzsrK2kpaWYoMCE9PXRoaXMuX2R5bmFtaWNDb3VudHNbaV0pZm9yKGgudW5pZm9ybXMubW9kZWw9bi5tb2RlbCxoLnVuaWZvcm1zLmNsaXBCb3VuZHM9bi5jbGlwQm91bmRzLGgudW5pZm9ybXMucGVybXV0YXRpb249VFtpXSxyLmxpbmVXaWR0aCh0aGlzLmR5bmFtaWNXaWR0aFtpXSp0aGlzLnBpeGVsUmF0aW8pLGgudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuZHluYW1pY0NvbG9yW2ldLGgudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5keW5hbWljVGludFtpXSxoLnVuaWZvcm1zLmhlaWdodD10aGlzLmR5bmFtaWNMZXZlbFtpXSxmLmRyYXcoci5MSU5FUyx0aGlzLl9keW5hbWljQ291bnRzW2ldLHRoaXMuX2R5bmFtaWNPZmZzZXRzW2ldKSxvPTA7bzwzOysrbyl0aGlzLmNvbnRvdXJQcm9qZWN0W29dW2ldJiYoaC51bmlmb3Jtcy5tb2RlbD11LnByb2plY3Rpb25zW29dLGgudW5pZm9ybXMuY2xpcEJvdW5kcz11LmNsaXBCb3VuZHNbb10sZi5kcmF3KHIuTElORVMsdGhpcy5fZHluYW1pY0NvdW50c1tpXSx0aGlzLl9keW5hbWljT2Zmc2V0c1tpXSkpO2YudW5iaW5kKCl9fUMuZHJhdz1mdW5jdGlvbih0KXtyZXR1cm4gUi5jYWxsKHRoaXMsdCwhMSl9LEMuZHJhd1RyYW5zcGFyZW50PWZ1bmN0aW9uKHQpe3JldHVybiBSLmNhbGwodGhpcyx0LCEwKX07dmFyIEY9e21vZGVsOmssdmlldzprLHByb2plY3Rpb246ayxpbnZlcnNlTW9kZWw6ayxjbGlwQm91bmRzOltbMCwwLDBdLFswLDAsMF1dLGhlaWdodDowLHNoYXBlOlswLDBdLHBpY2tJZDowLGxvd2VyQm91bmQ6WzAsMCwwXSx1cHBlckJvdW5kOlswLDAsMF0sek9mZnNldDowLG9iamVjdE9mZnNldDpbMCwwLDBdLHBlcm11dGF0aW9uOlsxLDAsMCwwLDEsMCwwLDAsMV0sbGlnaHRQb3NpdGlvbjpbMCwwLDBdLGV5ZVBvc2l0aW9uOlswLDAsMF19O2Z1bmN0aW9uIEIodCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9bZSh0WzBdKSxlKHRbMV0pLGUodFsyXSldOltlKHQpLGUodCksZSh0KV19ZnVuY3Rpb24gTih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT8zPT09dC5sZW5ndGg/W3RbMF0sdFsxXSx0WzJdLDFdOlt0WzBdLHRbMV0sdFsyXSx0WzNdXTpbMCwwLDAsMV19ZnVuY3Rpb24gaih0KXtpZihBcnJheS5pc0FycmF5KHQpKXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybltOKHRbMF0pLE4odFsxXSksTih0WzJdKV07dmFyIGU9Tih0KTtyZXR1cm5bZS5zbGljZSgpLGUuc2xpY2UoKSxlLnNsaWNlKCldfX1DLmRyYXdQaWNrPWZ1bmN0aW9uKHQpe3Q9dHx8e307dmFyIGU9dGhpcy5nbDtlLmRpc2FibGUoZS5DVUxMX0ZBQ0UpO3ZhciByPUY7ci5tb2RlbD10Lm1vZGVsfHxrLHIudmlldz10LnZpZXd8fGssci5wcm9qZWN0aW9uPXQucHJvamVjdGlvbnx8ayxyLnNoYXBlPXRoaXMuX2ZpZWxkWzJdLnNoYXBlLHIucGlja0lkPXRoaXMucGlja0lkLzI1NSxyLmxvd2VyQm91bmQ9dGhpcy5ib3VuZHNbMF0sci51cHBlckJvdW5kPXRoaXMuYm91bmRzWzFdLHIub2JqZWN0T2Zmc2V0PXRoaXMub2JqZWN0T2Zmc2V0LHIucGVybXV0YXRpb249UDtmb3IodmFyIG49MDtuPDI7KytuKWZvcih2YXIgaT1yLmNsaXBCb3VuZHNbbl0sYT0wO2E8MzsrK2EpaVthXT1NYXRoLm1pbihNYXRoLm1heCh0aGlzLmNsaXBCb3VuZHNbbl1bYV0sLTFlOCksMWU4KTt2YXIgbz1PKHIsdGhpcyk7aWYoby5zaG93U3VyZmFjZSl7Zm9yKHRoaXMuX3BpY2tTaGFkZXIuYmluZCgpLHRoaXMuX3BpY2tTaGFkZXIudW5pZm9ybXM9cix0aGlzLl92YW8uYmluZCgpLHRoaXMuX3Zhby5kcmF3KGUuVFJJQU5HTEVTLHRoaXMuX3ZlcnRleENvdW50KSxuPTA7bjwzOysrbil0aGlzLnN1cmZhY2VQcm9qZWN0W25dJiYodGhpcy5fcGlja1NoYWRlci51bmlmb3Jtcy5tb2RlbD1vLnByb2plY3Rpb25zW25dLHRoaXMuX3BpY2tTaGFkZXIudW5pZm9ybXMuY2xpcEJvdW5kcz1vLmNsaXBCb3VuZHNbbl0sdGhpcy5fdmFvLmRyYXcoZS5UUklBTkdMRVMsdGhpcy5fdmVydGV4Q291bnQpKTt0aGlzLl92YW8udW5iaW5kKCl9aWYoby5zaG93Q29udG91cil7dmFyIHM9dGhpcy5fY29udG91clBpY2tTaGFkZXI7cy5iaW5kKCkscy51bmlmb3Jtcz1yO3ZhciBsPXRoaXMuX2NvbnRvdXJWQU87Zm9yKGwuYmluZCgpLGE9MDthPDM7KythKWZvcihlLmxpbmVXaWR0aCh0aGlzLmNvbnRvdXJXaWR0aFthXSp0aGlzLnBpeGVsUmF0aW8pLHMudW5pZm9ybXMucGVybXV0YXRpb249VFthXSxuPTA7bjx0aGlzLmNvbnRvdXJMZXZlbHNbYV0ubGVuZ3RoOysrbil0aGlzLl9jb250b3VyQ291bnRzW2FdW25dJiYocy51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5jb250b3VyTGV2ZWxzW2FdW25dLGwuZHJhdyhlLkxJTkVTLHRoaXMuX2NvbnRvdXJDb3VudHNbYV1bbl0sdGhpcy5fY29udG91ck9mZnNldHNbYV1bbl0pKTtmb3Iobj0wO248MzsrK24pZm9yKHMudW5pZm9ybXMubW9kZWw9by5wcm9qZWN0aW9uc1tuXSxzLnVuaWZvcm1zLmNsaXBCb3VuZHM9by5jbGlwQm91bmRzW25dLGE9MDthPDM7KythKWlmKHRoaXMuY29udG91clByb2plY3Rbbl1bYV0pe3MudW5pZm9ybXMucGVybXV0YXRpb249VFthXSxlLmxpbmVXaWR0aCh0aGlzLmNvbnRvdXJXaWR0aFthXSp0aGlzLnBpeGVsUmF0aW8pO2Zvcih2YXIgYz0wO2M8dGhpcy5jb250b3VyTGV2ZWxzW2FdLmxlbmd0aDsrK2MpdGhpcy5fY29udG91ckNvdW50c1thXVtjXSYmKHMudW5pZm9ybXMuaGVpZ2h0PXRoaXMuY29udG91ckxldmVsc1thXVtjXSxsLmRyYXcoZS5MSU5FUyx0aGlzLl9jb250b3VyQ291bnRzW2FdW2NdLHRoaXMuX2NvbnRvdXJPZmZzZXRzW2FdW2NdKSl9bC51bmJpbmQoKX19LEMucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7dmFyIGU9dGhpcy5fZmllbGRbMl0uc2hhcGUscj10aGlzLl9waWNrUmVzdWx0LG49ZVswXSoodC52YWx1ZVswXSsodC52YWx1ZVsyXT4+NCkvMTYpLzI1NSxpPU1hdGguZmxvb3IobiksYT1uLWksbz1lWzFdKih0LnZhbHVlWzFdKygxNSZ0LnZhbHVlWzJdKS8xNikvMjU1LHM9TWF0aC5mbG9vcihvKSxsPW8tcztpKz0xLHMrPTE7dmFyIGM9ci5wb3NpdGlvbjtjWzBdPWNbMV09Y1syXT0wO2Zvcih2YXIgdT0wO3U8MjsrK3UpZm9yKHZhciBoPXU/YToxLWEsZj0wO2Y8MjsrK2YpZm9yKHZhciBwPWkrdSxkPXMrZix2PWgqKGY/bDoxLWwpLG09MDttPDM7KyttKWNbbV0rPXRoaXMuX2ZpZWxkW21dLmdldChwLGQpKnY7Zm9yKHZhciB5PXRoaXMuX3BpY2tSZXN1bHQubGV2ZWwseD0wO3g8MzsrK3gpaWYoeVt4XT1nLmxlKHRoaXMuY29udG91ckxldmVsc1t4XSxjW3hdKSx5W3hdPDApdGhpcy5jb250b3VyTGV2ZWxzW3hdLmxlbmd0aD4wJiYoeVt4XT0wKTtlbHNlIGlmKHlbeF08dGhpcy5jb250b3VyTGV2ZWxzW3hdLmxlbmd0aC0xKXt2YXIgYj10aGlzLmNvbnRvdXJMZXZlbHNbeF1beVt4XV0sXz10aGlzLmNvbnRvdXJMZXZlbHNbeF1beVt4XSsxXTtNYXRoLmFicyhiLWNbeF0pPk1hdGguYWJzKF8tY1t4XSkmJih5W3hdKz0xKX1mb3Ioci5pbmRleFswXT1hPC41P2k6aSsxLHIuaW5kZXhbMV09bDwuNT9zOnMrMSxyLnV2WzBdPW4vZVswXSxyLnV2WzFdPW8vZVsxXSxtPTA7bTwzOysrbSlyLmRhdGFDb29yZGluYXRlW21dPXRoaXMuX2ZpZWxkW21dLmdldChyLmluZGV4WzBdLHIuaW5kZXhbMV0pO3JldHVybiByfSxDLnBhZEZpZWxkPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5zaGFwZS5zbGljZSgpLG49dC5zaGFwZS5zbGljZSgpO2MuYXNzaWduKHQubG8oMSwxKS5oaShyWzBdLHJbMV0pLGUpLGMuYXNzaWduKHQubG8oMSkuaGkoclswXSwxKSxlLmhpKHJbMF0sMSkpLGMuYXNzaWduKHQubG8oMSxuWzFdLTEpLmhpKHJbMF0sMSksZS5sbygwLHJbMV0tMSkuaGkoclswXSwxKSksYy5hc3NpZ24odC5sbygwLDEpLmhpKDEsclsxXSksZS5oaSgxKSksYy5hc3NpZ24odC5sbyhuWzBdLTEsMSkuaGkoMSxyWzFdKSxlLmxvKHJbMF0tMSkpLHQuc2V0KDAsMCxlLmdldCgwLDApKSx0LnNldCgwLG5bMV0tMSxlLmdldCgwLHJbMV0tMSkpLHQuc2V0KG5bMF0tMSwwLGUuZ2V0KHJbMF0tMSwwKSksdC5zZXQoblswXS0xLG5bMV0tMSxlLmdldChyWzBdLTEsclsxXS0xKSl9LEMudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e30sdGhpcy5vYmplY3RPZmZzZXQ9dC5vYmplY3RPZmZzZXR8fHRoaXMub2JqZWN0T2Zmc2V0LHRoaXMuZGlydHk9ITAsXCJjb250b3VyV2lkdGhcImluIHQmJih0aGlzLmNvbnRvdXJXaWR0aD1CKHQuY29udG91cldpZHRoLE51bWJlcikpLFwic2hvd0NvbnRvdXJcImluIHQmJih0aGlzLnNob3dDb250b3VyPUIodC5zaG93Q29udG91cixCb29sZWFuKSksXCJzaG93U3VyZmFjZVwiaW4gdCYmKHRoaXMuc2hvd1N1cmZhY2U9ISF0LnNob3dTdXJmYWNlKSxcImNvbnRvdXJUaW50XCJpbiB0JiYodGhpcy5jb250b3VyVGludD1CKHQuY29udG91clRpbnQsQm9vbGVhbikpLFwiY29udG91ckNvbG9yXCJpbiB0JiYodGhpcy5jb250b3VyQ29sb3I9aih0LmNvbnRvdXJDb2xvcikpLFwiY29udG91clByb2plY3RcImluIHQmJih0aGlzLmNvbnRvdXJQcm9qZWN0PUIodC5jb250b3VyUHJvamVjdCxmdW5jdGlvbih0KXtyZXR1cm4gQih0LEJvb2xlYW4pfSkpLFwic3VyZmFjZVByb2plY3RcImluIHQmJih0aGlzLnN1cmZhY2VQcm9qZWN0PXQuc3VyZmFjZVByb2plY3QpLFwiZHluYW1pY0NvbG9yXCJpbiB0JiYodGhpcy5keW5hbWljQ29sb3I9aih0LmR5bmFtaWNDb2xvcikpLFwiZHluYW1pY1RpbnRcImluIHQmJih0aGlzLmR5bmFtaWNUaW50PUIodC5keW5hbWljVGludCxOdW1iZXIpKSxcImR5bmFtaWNXaWR0aFwiaW4gdCYmKHRoaXMuZHluYW1pY1dpZHRoPUIodC5keW5hbWljV2lkdGgsTnVtYmVyKSksXCJvcGFjaXR5XCJpbiB0JiYodGhpcy5vcGFjaXR5PXQub3BhY2l0eSksXCJjb2xvckJvdW5kc1wiaW4gdCYmKHRoaXMuY29sb3JCb3VuZHM9dC5jb2xvckJvdW5kcyksXCJ2ZXJ0ZXhDb2xvclwiaW4gdCYmKHRoaXMudmVydGV4Q29sb3I9dC52ZXJ0ZXhDb2xvcj8xOjApO3ZhciBlPXQuZmllbGR8fHQuY29vcmRzJiZ0LmNvb3Jkc1syXXx8bnVsbCxyPSExO2lmKGV8fChlPXRoaXMuX2ZpZWxkWzJdLnNoYXBlWzBdfHx0aGlzLl9maWVsZFsyXS5zaGFwZVsyXT90aGlzLl9maWVsZFsyXS5sbygxLDEpLmhpKHRoaXMuX2ZpZWxkWzJdLnNoYXBlWzBdLTIsdGhpcy5fZmllbGRbMl0uc2hhcGVbMV0tMik6dGhpcy5fZmllbGRbMl0uaGkoMCwwKSksXCJmaWVsZFwiaW4gdHx8XCJjb29yZHNcImluIHQpe3ZhciBpPShlLnNoYXBlWzBdKzIpKihlLnNoYXBlWzFdKzIpO2k+dGhpcy5fZmllbGRbMl0uZGF0YS5sZW5ndGgmJihzLmZyZWVGbG9hdCh0aGlzLl9maWVsZFsyXS5kYXRhKSx0aGlzLl9maWVsZFsyXS5kYXRhPXMubWFsbG9jRmxvYXQobi5uZXh0UG93MihpKSkpLHRoaXMuX2ZpZWxkWzJdPWgodGhpcy5fZmllbGRbMl0uZGF0YSxbZS5zaGFwZVswXSsyLGUuc2hhcGVbMV0rMl0pLHRoaXMucGFkRmllbGQodGhpcy5fZmllbGRbMl0sZSksdGhpcy5zaGFwZT1lLnNoYXBlLnNsaWNlKCk7Zm9yKHZhciBhPXRoaXMuc2hhcGUsbz0wO288MjsrK28pdGhpcy5fZmllbGRbMl0uc2l6ZT50aGlzLl9maWVsZFtvXS5kYXRhLmxlbmd0aCYmKHMuZnJlZUZsb2F0KHRoaXMuX2ZpZWxkW29dLmRhdGEpLHRoaXMuX2ZpZWxkW29dLmRhdGE9cy5tYWxsb2NGbG9hdCh0aGlzLl9maWVsZFsyXS5zaXplKSksdGhpcy5fZmllbGRbb109aCh0aGlzLl9maWVsZFtvXS5kYXRhLFthWzBdKzIsYVsxXSsyXSk7aWYodC5jb29yZHMpe3ZhciBwPXQuY29vcmRzO2lmKCFBcnJheS5pc0FycmF5KHApfHwzIT09cC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiZ2wtc3VyZmFjZTogaW52YWxpZCBjb29yZGluYXRlcyBmb3IgeC95XCIpO2ZvcihvPTA7bzwyOysrbyl7dmFyIGQ9cFtvXTtmb3IoYj0wO2I8MjsrK2IpaWYoZC5zaGFwZVtiXSE9PWFbYl0pdGhyb3cgbmV3IEVycm9yKFwiZ2wtc3VyZmFjZTogY29vcmRzIGhhdmUgaW5jb3JyZWN0IHNoYXBlXCIpO3RoaXMucGFkRmllbGQodGhpcy5fZmllbGRbb10sZCl9fWVsc2UgaWYodC50aWNrcyl7dmFyIGc9dC50aWNrcztpZighQXJyYXkuaXNBcnJheShnKXx8MiE9PWcubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImdsLXN1cmZhY2U6IGludmFsaWQgdGlja3NcIik7Zm9yKG89MDtvPDI7KytvKXt2YXIgbT1nW29dO2lmKChBcnJheS5pc0FycmF5KG0pfHxtLmxlbmd0aCkmJihtPWgobSkpLG0uc2hhcGVbMF0hPT1hW29dKXRocm93IG5ldyBFcnJvcihcImdsLXN1cmZhY2U6IGludmFsaWQgdGljayBsZW5ndGhcIik7dmFyIHk9aChtLmRhdGEsYSk7eS5zdHJpZGVbb109bS5zdHJpZGVbMF0seS5zdHJpZGVbMV5vXT0wLHRoaXMucGFkRmllbGQodGhpcy5fZmllbGRbb10seSl9fWVsc2V7Zm9yKG89MDtvPDI7KytvKXt2YXIgeD1bMCwwXTt4W29dPTEsdGhpcy5fZmllbGRbb109aCh0aGlzLl9maWVsZFtvXS5kYXRhLFthWzBdKzIsYVsxXSsyXSx4LDApfXRoaXMuX2ZpZWxkWzBdLnNldCgwLDAsMCk7Zm9yKHZhciBiPTA7YjxhWzBdOysrYil0aGlzLl9maWVsZFswXS5zZXQoYisxLDAsYik7Zm9yKHRoaXMuX2ZpZWxkWzBdLnNldChhWzBdKzEsMCxhWzBdLTEpLHRoaXMuX2ZpZWxkWzFdLnNldCgwLDAsMCksYj0wO2I8YVsxXTsrK2IpdGhpcy5fZmllbGRbMV0uc2V0KDAsYisxLGIpO3RoaXMuX2ZpZWxkWzFdLnNldCgwLGFbMV0rMSxhWzFdLTEpfXZhciBfPXRoaXMuX2ZpZWxkLHc9aChzLm1hbGxvY0Zsb2F0KDMqX1syXS5zaXplKjIpLFszLGFbMF0rMixhWzFdKzIsMl0pO2ZvcihvPTA7bzwzOysrbyl2KHcucGljayhvKSxfW29dLFwibWlycm9yXCIpO3ZhciBrPWgocy5tYWxsb2NGbG9hdCgzKl9bMl0uc2l6ZSksW2FbMF0rMixhWzFdKzIsM10pO2ZvcihvPTA7bzxhWzBdKzI7KytvKWZvcihiPTA7YjxhWzFdKzI7KytiKXt2YXIgVD13LmdldCgwLG8sYiwwKSxNPXcuZ2V0KDAsbyxiLDEpLEU9dy5nZXQoMSxvLGIsMCksQz13LmdldCgxLG8sYiwxKSxMPXcuZ2V0KDIsbyxiLDApLHo9dy5nZXQoMixvLGIsMSksTz1FKnotQypMLEk9TCpNLXoqVCxEPVQqQy1NKkUsUD1NYXRoLnNxcnQoTypPK0kqSStEKkQpO1A8MWUtOD8oUD1NYXRoLm1heChNYXRoLmFicyhPKSxNYXRoLmFicyhJKSxNYXRoLmFicyhEKSkpPDFlLTg/KEQ9MSxJPU89MCxQPTEpOlA9MS9QOlA9MS9NYXRoLnNxcnQoUCksay5zZXQobyxiLDAsTypQKSxrLnNldChvLGIsMSxJKlApLGsuc2V0KG8sYiwyLEQqUCl9cy5mcmVlKHcuZGF0YSk7dmFyIFI9WzEvMCwxLzAsMS8wXSxGPVstMS8wLC0xLzAsLTEvMF0sTj0xLzAsVj0tMS8wLFU9KGFbMF0tMSkqKGFbMV0tMSkqNixxPXMubWFsbG9jRmxvYXQobi5uZXh0UG93MigxMCpVKSksSD0wLEc9MDtmb3Iobz0wO288YVswXS0xOysrbyl0OmZvcihiPTA7YjxhWzFdLTE7KytiKXtmb3IodmFyIFk9MDtZPDI7KytZKWZvcih2YXIgVz0wO1c8MjsrK1cpZm9yKHZhciBYPTA7WDwzOysrWCl7dmFyIFo9dGhpcy5fZmllbGRbWF0uZ2V0KDErbytZLDErYitXKTtpZihpc05hTihaKXx8IWlzRmluaXRlKFopKWNvbnRpbnVlIHR9Zm9yKFg9MDtYPDY7KytYKXt2YXIgJD1vK0FbWF1bMF0sSj1iK0FbWF1bMV0sSz10aGlzLl9maWVsZFswXS5nZXQoJCsxLEorMSksUT10aGlzLl9maWVsZFsxXS5nZXQoJCsxLEorMSk7Wj10aGlzLl9maWVsZFsyXS5nZXQoJCsxLEorMSksTz1rLmdldCgkKzEsSisxLDApLEk9ay5nZXQoJCsxLEorMSwxKSxEPWsuZ2V0KCQrMSxKKzEsMiksdC5pbnRlbnNpdHkmJih0dD10LmludGVuc2l0eS5nZXQoJCxKKSk7dmFyIHR0PXQuaW50ZW5zaXR5P3QuaW50ZW5zaXR5LmdldCgkLEopOlordGhpcy5vYmplY3RPZmZzZXRbMl07cVtIKytdPSQscVtIKytdPUoscVtIKytdPUsscVtIKytdPVEscVtIKytdPVoscVtIKytdPTAscVtIKytdPXR0LHFbSCsrXT1PLHFbSCsrXT1JLHFbSCsrXT1ELFJbMF09TWF0aC5taW4oUlswXSxLK3RoaXMub2JqZWN0T2Zmc2V0WzBdKSxSWzFdPU1hdGgubWluKFJbMV0sUSt0aGlzLm9iamVjdE9mZnNldFsxXSksUlsyXT1NYXRoLm1pbihSWzJdLFordGhpcy5vYmplY3RPZmZzZXRbMl0pLE49TWF0aC5taW4oTix0dCksRlswXT1NYXRoLm1heChGWzBdLEsrdGhpcy5vYmplY3RPZmZzZXRbMF0pLEZbMV09TWF0aC5tYXgoRlsxXSxRK3RoaXMub2JqZWN0T2Zmc2V0WzFdKSxGWzJdPU1hdGgubWF4KEZbMl0sWit0aGlzLm9iamVjdE9mZnNldFsyXSksVj1NYXRoLm1heChWLHR0KSxHKz0xfX1mb3IodC5pbnRlbnNpdHlCb3VuZHMmJihOPSt0LmludGVuc2l0eUJvdW5kc1swXSxWPSt0LmludGVuc2l0eUJvdW5kc1sxXSksbz02O288SDtvKz0xMClxW29dPShxW29dLU4pLyhWLU4pO3RoaXMuX3ZlcnRleENvdW50PUcsdGhpcy5fY29vcmRpbmF0ZUJ1ZmZlci51cGRhdGUocS5zdWJhcnJheSgwLEgpKSxzLmZyZWVGbG9hdChxKSxzLmZyZWUoay5kYXRhKSx0aGlzLmJvdW5kcz1bUixGXSx0aGlzLmludGVuc2l0eT10LmludGVuc2l0eXx8dGhpcy5fZmllbGRbMl0sdGhpcy5pbnRlbnNpdHlCb3VuZHNbMF09PT1OJiZ0aGlzLmludGVuc2l0eUJvdW5kc1sxXT09PVZ8fChyPSEwKSx0aGlzLmludGVuc2l0eUJvdW5kcz1bTixWXX1pZihcImxldmVsc1wiaW4gdCl7dmFyIGV0PXQubGV2ZWxzO2ZvcihldD1BcnJheS5pc0FycmF5KGV0WzBdKT9ldC5zbGljZSgpOltbXSxbXSxldF0sbz0wO288MzsrK28pZXRbb109ZXRbb10uc2xpY2UoKSxldFtvXS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pO2ZvcihvPTA7bzwzOysrbylmb3IoYj0wO2I8ZXRbb10ubGVuZ3RoOysrYilldFtvXVtiXS09dGhpcy5vYmplY3RPZmZzZXRbb107dDpmb3Iobz0wO288MzsrK28pe2lmKGV0W29dLmxlbmd0aCE9PXRoaXMuY29udG91ckxldmVsc1tvXS5sZW5ndGgpe3I9ITA7YnJlYWt9Zm9yKGI9MDtiPGV0W29dLmxlbmd0aDsrK2IpaWYoZXRbb11bYl0hPT10aGlzLmNvbnRvdXJMZXZlbHNbb11bYl0pe3I9ITA7YnJlYWsgdH19dGhpcy5jb250b3VyTGV2ZWxzPWV0fWlmKHIpe189dGhpcy5fZmllbGQsYT10aGlzLnNoYXBlO2Zvcih2YXIgcnQ9W10sbnQ9MDtudDwzOysrbnQpe3ZhciBpdD10aGlzLmNvbnRvdXJMZXZlbHNbbnRdLGF0PVtdLG90PVtdLHN0PVswLDAsMF07Zm9yKG89MDtvPGl0Lmxlbmd0aDsrK28pe3ZhciBsdD1mKHRoaXMuX2ZpZWxkW250XSxpdFtvXSk7YXQucHVzaChydC5sZW5ndGgvNXwwKSxHPTA7dDpmb3IoYj0wO2I8bHQuY2VsbHMubGVuZ3RoOysrYil7dmFyIGN0PWx0LmNlbGxzW2JdO2ZvcihYPTA7WDwyOysrWCl7dmFyIHV0PWx0LnBvc2l0aW9uc1tjdFtYXV0saHQ9dXRbMF0sZnQ9MHxNYXRoLmZsb29yKGh0KSxwdD1odC1mdCxkdD11dFsxXSxndD0wfE1hdGguZmxvb3IoZHQpLHZ0PWR0LWd0LG10PSExO2U6Zm9yKHZhciB5dD0wO3l0PDM7Kyt5dCl7c3RbeXRdPTA7dmFyIHh0PShudCt5dCsxKSUzO2ZvcihZPTA7WTwyOysrWSl7dmFyIGJ0PVk/cHQ6MS1wdDtmb3IoJD0wfE1hdGgubWluKE1hdGgubWF4KGZ0K1ksMCksYVswXSksVz0wO1c8MjsrK1cpe3ZhciBfdD1XP3Z0OjEtdnQ7aWYoSj0wfE1hdGgubWluKE1hdGgubWF4KGd0K1csMCksYVsxXSksWj15dDwyP3RoaXMuX2ZpZWxkW3h0XS5nZXQoJCxKKToodGhpcy5pbnRlbnNpdHkuZ2V0KCQsSiktdGhpcy5pbnRlbnNpdHlCb3VuZHNbMF0pLyh0aGlzLmludGVuc2l0eUJvdW5kc1sxXS10aGlzLmludGVuc2l0eUJvdW5kc1swXSksIWlzRmluaXRlKFopfHxpc05hTihaKSl7bXQ9ITA7YnJlYWsgZX12YXIgd3Q9YnQqX3Q7c3RbeXRdKz13dCpafX19aWYobXQpe2lmKFg+MCl7Zm9yKHZhciBrdD0wO2t0PDU7KytrdClydC5wb3AoKTtHLT0xfWNvbnRpbnVlIHR9cnQucHVzaChzdFswXSxzdFsxXSx1dFswXSx1dFsxXSxzdFsyXSksRys9MX19b3QucHVzaChHKX10aGlzLl9jb250b3VyT2Zmc2V0c1tudF09YXQsdGhpcy5fY29udG91ckNvdW50c1tudF09b3R9dmFyIEF0PXMubWFsbG9jRmxvYXQocnQubGVuZ3RoKTtmb3Iobz0wO288cnQubGVuZ3RoOysrbylBdFtvXT1ydFtvXTt0aGlzLl9jb250b3VyQnVmZmVyLnVwZGF0ZShBdCkscy5mcmVlRmxvYXQoQXQpfXQuY29sb3JtYXAmJnRoaXMuX2NvbG9yTWFwLnNldFBpeGVscyhmdW5jdGlvbih0KXt2YXIgZT11KFtsKHtjb2xvcm1hcDp0LG5zaGFkZXM6Uyxmb3JtYXQ6XCJyZ2JhXCJ9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0sdFsxXSx0WzJdLDI1NSp0WzNdXX0pXSk7cmV0dXJuIGMuZGl2c2VxKGUsMjU1KSxlfSh0LmNvbG9ybWFwKSl9LEMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX3NoYWRlci5kaXNwb3NlKCksdGhpcy5fdmFvLmRpc3Bvc2UoKSx0aGlzLl9jb29yZGluYXRlQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLl9jb2xvck1hcC5kaXNwb3NlKCksdGhpcy5fY29udG91ckJ1ZmZlci5kaXNwb3NlKCksdGhpcy5fY29udG91clZBTy5kaXNwb3NlKCksdGhpcy5fY29udG91clNoYWRlci5kaXNwb3NlKCksdGhpcy5fY29udG91clBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMuX2R5bmFtaWNCdWZmZXIuZGlzcG9zZSgpLHRoaXMuX2R5bmFtaWNWQU8uZGlzcG9zZSgpO2Zvcih2YXIgdD0wO3Q8MzsrK3Qpcy5mcmVlRmxvYXQodGhpcy5fZmllbGRbdF0uZGF0YSl9LEMuaGlnaGxpZ2h0PWZ1bmN0aW9uKHQpe3ZhciBlLHI7aWYoIXQpcmV0dXJuIHRoaXMuX2R5bmFtaWNDb3VudHM9WzAsMCwwXSx0aGlzLmR5YW5hbWljTGV2ZWw9W05hTixOYU4sTmFOXSx2b2lkKHRoaXMuaGlnaGxpZ2h0TGV2ZWw9Wy0xLC0xLC0xXSk7Zm9yKGU9MDtlPDM7KytlKXRoaXMuZW5hYmxlSGlnaGxpZ2h0W2VdP3RoaXMuaGlnaGxpZ2h0TGV2ZWxbZV09dC5sZXZlbFtlXTp0aGlzLmhpZ2hsaWdodExldmVsW2VdPS0xO2ZvcihyPXRoaXMuc25hcFRvRGF0YT90LmRhdGFDb29yZGluYXRlOnQucG9zaXRpb24sZT0wO2U8MzsrK2UpcltlXS09dGhpcy5vYmplY3RPZmZzZXRbZV07aWYodGhpcy5lbmFibGVEeW5hbWljWzBdJiZyWzBdIT09dGhpcy5keW5hbWljTGV2ZWxbMF18fHRoaXMuZW5hYmxlRHluYW1pY1sxXSYmclsxXSE9PXRoaXMuZHluYW1pY0xldmVsWzFdfHx0aGlzLmVuYWJsZUR5bmFtaWNbMl0mJnJbMl0hPT10aGlzLmR5bmFtaWNMZXZlbFsyXSl7Zm9yKHZhciBuPTAsaT10aGlzLnNoYXBlLGE9cy5tYWxsb2NGbG9hdCgxMippWzBdKmlbMV0pLG89MDtvPDM7KytvKWlmKHRoaXMuZW5hYmxlRHluYW1pY1tvXSl7dGhpcy5keW5hbWljTGV2ZWxbb109cltvXTt2YXIgbD0obysxKSUzLGM9KG8rMiklMyx1PXRoaXMuX2ZpZWxkW29dLGg9dGhpcy5fZmllbGRbbF0scD10aGlzLl9maWVsZFtjXSxkPWYodSxyW29dKSxnPWQuY2VsbHMsdj1kLnBvc2l0aW9ucztmb3IodGhpcy5fZHluYW1pY09mZnNldHNbb109bixlPTA7ZTxnLmxlbmd0aDsrK2UpZm9yKHZhciBtPWdbZV0seT0wO3k8MjsrK3kpe3ZhciB4PXZbbVt5XV0sYj0reFswXSxfPTB8Yix3PTB8TWF0aC5taW4oXysxLGlbMF0pLGs9Yi1fLEE9MS1rLFQ9K3hbMV0sTT0wfFQsUz0wfE1hdGgubWluKE0rMSxpWzFdKSxFPVQtTSxDPTEtRSxMPUEqQyx6PUEqRSxPPWsqQyxJPWsqRSxEPUwqaC5nZXQoXyxNKSt6KmguZ2V0KF8sUykrTypoLmdldCh3LE0pK0kqaC5nZXQodyxTKSxQPUwqcC5nZXQoXyxNKSt6KnAuZ2V0KF8sUykrTypwLmdldCh3LE0pK0kqcC5nZXQodyxTKTtpZihpc05hTihEKXx8aXNOYU4oUCkpe3kmJihuLT0xKTticmVha31hWzIqbiswXT1ELGFbMipuKzFdPVAsbis9MX10aGlzLl9keW5hbWljQ291bnRzW29dPW4tdGhpcy5fZHluYW1pY09mZnNldHNbb119ZWxzZSB0aGlzLmR5bmFtaWNMZXZlbFtvXT1OYU4sdGhpcy5fZHluYW1pY0NvdW50c1tvXT0wO3RoaXMuX2R5bmFtaWNCdWZmZXIudXBkYXRlKGEuc3ViYXJyYXkoMCwyKm4pKSxzLmZyZWVGbG9hdChhKX19fSx7XCIuL2xpYi9zaGFkZXJzXCI6MzExLFwiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIjozMTIsXCJiaXQtdHdpZGRsZVwiOjgzLGNvbG9ybWFwOjExNyxcImdsLWJ1ZmZlclwiOjIzOCxcImdsLW1hdDQvaW52ZXJ0XCI6MjYyLFwiZ2wtbWF0NC9tdWx0aXBseVwiOjI2NCxcImdsLXRleHR1cmUyZFwiOjMxNSxcImdsLXZhb1wiOjMyMCxuZGFycmF5OjQ0MyxcIm5kYXJyYXktZ3JhZGllbnRcIjo0MzQsXCJuZGFycmF5LW9wc1wiOjQzNyxcIm5kYXJyYXktcGFja1wiOjQzOCxcInN1cmZhY2UtbmV0c1wiOjUxNixcInR5cGVkYXJyYXktcG9vbFwiOjUzMH1dLDMxNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJjc3MtZm9udFwiKSxpPXQoXCJwaWNrLWJ5LWFsaWFzXCIpLGE9dChcInJlZ2xcIiksbz10KFwiZ2wtdXRpbC9jb250ZXh0XCIpLHM9dChcImVzNi13ZWFrLW1hcFwiKSxsPXQoXCJjb2xvci1ub3JtYWxpemVcIiksYz10KFwiZm9udC1hdGxhc1wiKSx1PXQoXCJ0eXBlZGFycmF5LXBvb2xcIiksaD10KFwicGFyc2UtcmVjdFwiKSxmPXQoXCJpcy1wbGFpbi1vYmpcIikscD10KFwicGFyc2UtdW5pdFwiKSxkPXQoXCJ0by1weFwiKSxnPXQoXCJkZXRlY3Qta2VybmluZ1wiKSx2PXQoXCJvYmplY3QtYXNzaWduXCIpLG09dChcImZvbnQtbWVhc3VyZVwiKSx5PXQoXCJmbGF0dGVuLXZlcnRleC1kYXRhXCIpLHg9dChcImJpdC10d2lkZGxlXCIpLm5leHRQb3cyLGI9bmV3IHMsXz0hMTtpZihkb2N1bWVudC5ib2R5KXt2YXIgdz1kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpO3cuc3R5bGUuZm9udD1cIml0YWxpYyBzbWFsbC1jYXBzIGJvbGQgY29uZGVuc2VkIDE2cHgvMiBjdXJzaXZlXCIsZ2V0Q29tcHV0ZWRTdHlsZSh3KS5mb250U3RyZXRjaCYmKF89ITApLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodyl9dmFyIGs9ZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJnQuX2dsJiZ0LnByb3AmJnQudGV4dHVyZSYmdC5idWZmZXJ9KHQpP3RoaXMuZ2w9byh0KToodD17cmVnbDp0fSx0aGlzLmdsPXQucmVnbC5fZ2wpLHRoaXMuc2hhZGVyPWIuZ2V0KHRoaXMuZ2wpLHRoaXMuc2hhZGVyP3RoaXMucmVnbD10aGlzLnNoYWRlci5yZWdsOnRoaXMucmVnbD10LnJlZ2x8fGEoe2dsOnRoaXMuZ2x9KSx0aGlzLmNoYXJCdWZmZXI9dGhpcy5yZWdsLmJ1ZmZlcih7dHlwZTpcInVpbnQ4XCIsdXNhZ2U6XCJzdHJlYW1cIn0pLHRoaXMuc2l6ZUJ1ZmZlcj10aGlzLnJlZ2wuYnVmZmVyKHt0eXBlOlwiZmxvYXRcIix1c2FnZTpcInN0cmVhbVwifSksdGhpcy5zaGFkZXJ8fCh0aGlzLnNoYWRlcj10aGlzLmNyZWF0ZVNoYWRlcigpLGIuc2V0KHRoaXMuZ2wsdGhpcy5zaGFkZXIpKSx0aGlzLmJhdGNoPVtdLHRoaXMuZm9udFNpemU9W10sdGhpcy5mb250PVtdLHRoaXMuZm9udEF0bGFzPVtdLHRoaXMuZHJhdz10aGlzLnNoYWRlci5kcmF3LmJpbmQodGhpcyksdGhpcy5yZW5kZXI9ZnVuY3Rpb24oKXt0aGlzLnJlZ2wuX3JlZnJlc2goKSx0aGlzLmRyYXcodGhpcy5iYXRjaCl9LHRoaXMuY2FudmFzPXRoaXMuZ2wuY2FudmFzLHRoaXMudXBkYXRlKGYodCk/dDp7fSl9O2sucHJvdG90eXBlLmNyZWF0ZVNoYWRlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMucmVnbCxlPXQoe2JsZW5kOntlbmFibGU6ITAsY29sb3I6WzAsMCwwLDFdLGZ1bmM6e3NyY1JHQjpcInNyYyBhbHBoYVwiLGRzdFJHQjpcIm9uZSBtaW51cyBzcmMgYWxwaGFcIixzcmNBbHBoYTpcIm9uZSBtaW51cyBkc3QgYWxwaGFcIixkc3RBbHBoYTpcIm9uZVwifX0sc3RlbmNpbDp7ZW5hYmxlOiExfSxkZXB0aDp7ZW5hYmxlOiExfSxjb3VudDp0LnByb3AoXCJjb3VudFwiKSxvZmZzZXQ6dC5wcm9wKFwib2Zmc2V0XCIpLGF0dHJpYnV0ZXM6e2NoYXJPZmZzZXQ6e29mZnNldDo0LHN0cmlkZTo4LGJ1ZmZlcjp0LnRoaXMoXCJzaXplQnVmZmVyXCIpfSx3aWR0aDp7b2Zmc2V0OjAsc3RyaWRlOjgsYnVmZmVyOnQudGhpcyhcInNpemVCdWZmZXJcIil9LGNoYXI6dC50aGlzKFwiY2hhckJ1ZmZlclwiKSxwb3NpdGlvbjp0LnRoaXMoXCJwb3NpdGlvblwiKX0sdW5pZm9ybXM6e2F0bGFzU2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybltlLmF0bGFzLndpZHRoLGUuYXRsYXMuaGVpZ2h0XX0sYXRsYXNEaW06ZnVuY3Rpb24odCxlKXtyZXR1cm5bZS5hdGxhcy5jb2xzLGUuYXRsYXMucm93c119LGF0bGFzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuYXRsYXMudGV4dHVyZX0sY2hhclN0ZXA6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5hdGxhcy5zdGVwfSxlbTpmdW5jdGlvbih0LGUpe3JldHVybiBlLmF0bGFzLmVtfSxjb2xvcjp0LnByb3AoXCJjb2xvclwiKSxvcGFjaXR5OnQucHJvcChcIm9wYWNpdHlcIiksdmlld3BvcnQ6dC50aGlzKFwidmlld3BvcnRBcnJheVwiKSxzY2FsZTp0LnRoaXMoXCJzY2FsZVwiKSxhbGlnbjp0LnByb3AoXCJhbGlnblwiKSxiYXNlbGluZTp0LnByb3AoXCJiYXNlbGluZVwiKSx0cmFuc2xhdGU6dC50aGlzKFwidHJhbnNsYXRlXCIpLHBvc2l0aW9uT2Zmc2V0OnQucHJvcChcInBvc2l0aW9uT2Zmc2V0XCIpfSxwcmltaXRpdmU6XCJwb2ludHNcIix2aWV3cG9ydDp0LnRoaXMoXCJ2aWV3cG9ydFwiKSx2ZXJ0OlwiXFxuXFx0XFx0XFx0cHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcblxcdFxcdFxcdGF0dHJpYnV0ZSBmbG9hdCB3aWR0aCwgY2hhck9mZnNldCwgY2hhcjtcXG5cXHRcXHRcXHRhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcXG5cXHRcXHRcXHR1bmlmb3JtIGZsb2F0IGZvbnRTaXplLCBjaGFyU3RlcCwgZW0sIGFsaWduLCBiYXNlbGluZTtcXG5cXHRcXHRcXHR1bmlmb3JtIHZlYzQgdmlld3BvcnQ7XFxuXFx0XFx0XFx0dW5pZm9ybSB2ZWM0IGNvbG9yO1xcblxcdFxcdFxcdHVuaWZvcm0gdmVjMiBhdGxhc1NpemUsIGF0bGFzRGltLCBzY2FsZSwgdHJhbnNsYXRlLCBwb3NpdGlvbk9mZnNldDtcXG5cXHRcXHRcXHR2YXJ5aW5nIHZlYzIgY2hhckNvb3JkLCBjaGFySWQ7XFxuXFx0XFx0XFx0dmFyeWluZyBmbG9hdCBjaGFyV2lkdGg7XFxuXFx0XFx0XFx0dmFyeWluZyB2ZWM0IGZvbnRDb2xvcjtcXG5cXHRcXHRcXHR2b2lkIG1haW4gKCkge1xcblxcdFxcdFxcdFxcdFwiKyhrLm5vcm1hbFZpZXdwb3J0P1wiXCI6XCJ2ZWMyIHBvc2l0aW9uT2Zmc2V0ID0gdmVjMihwb3NpdGlvbk9mZnNldC54LC0gcG9zaXRpb25PZmZzZXQueSk7XCIpK1wiXFxuXFxuXFx0XFx0XFx0XFx0dmVjMiBvZmZzZXQgPSBmbG9vcihlbSAqICh2ZWMyKGFsaWduICsgY2hhck9mZnNldCwgYmFzZWxpbmUpXFxuXFx0XFx0XFx0XFx0XFx0KyBwb3NpdGlvbk9mZnNldCkpXFxuXFx0XFx0XFx0XFx0XFx0LyAodmlld3BvcnQuencgKiBzY2FsZS54eSk7XFxuXFxuXFx0XFx0XFx0XFx0dmVjMiBwb3NpdGlvbiA9IChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZTtcXG5cXHRcXHRcXHRcXHRwb3NpdGlvbiArPSBvZmZzZXQgKiBzY2FsZTtcXG5cXG5cXHRcXHRcXHRcXHRcIisoay5ub3JtYWxWaWV3cG9ydD9cInBvc2l0aW9uLnkgPSAxLiAtIHBvc2l0aW9uLnk7XCI6XCJcIikrXCJcXG5cXG5cXHRcXHRcXHRcXHRjaGFyQ29vcmQgPSBwb3NpdGlvbiAqIHZpZXdwb3J0Lnp3ICsgdmlld3BvcnQueHk7XFxuXFxuXFx0XFx0XFx0XFx0Z2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uICogMi4gLSAxLiwgMCwgMSk7XFxuXFxuXFx0XFx0XFx0XFx0Z2xfUG9pbnRTaXplID0gY2hhclN0ZXA7XFxuXFxuXFx0XFx0XFx0XFx0Y2hhcklkLnggPSBtb2QoY2hhciwgYXRsYXNEaW0ueCk7XFxuXFx0XFx0XFx0XFx0Y2hhcklkLnkgPSBmbG9vcihjaGFyIC8gYXRsYXNEaW0ueCk7XFxuXFxuXFx0XFx0XFx0XFx0Y2hhcldpZHRoID0gd2lkdGggKiBlbTtcXG5cXG5cXHRcXHRcXHRcXHRmb250Q29sb3IgPSBjb2xvciAvIDI1NS47XFxuXFx0XFx0XFx0fVwiLGZyYWc6XCJcXG5cXHRcXHRcXHRwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuXFx0XFx0XFx0dW5pZm9ybSBzYW1wbGVyMkQgYXRsYXM7XFxuXFx0XFx0XFx0dW5pZm9ybSBmbG9hdCBmb250U2l6ZSwgY2hhclN0ZXAsIG9wYWNpdHk7XFxuXFx0XFx0XFx0dW5pZm9ybSB2ZWMyIGF0bGFzU2l6ZTtcXG5cXHRcXHRcXHR1bmlmb3JtIHZlYzQgdmlld3BvcnQ7XFxuXFx0XFx0XFx0dmFyeWluZyB2ZWM0IGZvbnRDb2xvcjtcXG5cXHRcXHRcXHR2YXJ5aW5nIHZlYzIgY2hhckNvb3JkLCBjaGFySWQ7XFxuXFx0XFx0XFx0dmFyeWluZyBmbG9hdCBjaGFyV2lkdGg7XFxuXFxuXFx0XFx0XFx0ZmxvYXQgbGlnaHRuZXNzKHZlYzQgY29sb3IpIHtcXG5cXHRcXHRcXHRcXHRyZXR1cm4gY29sb3IuciAqIDAuMjk5ICsgY29sb3IuZyAqIDAuNTg3ICsgY29sb3IuYiAqIDAuMTE0O1xcblxcdFxcdFxcdH1cXG5cXG5cXHRcXHRcXHR2b2lkIG1haW4gKCkge1xcblxcdFxcdFxcdFxcdHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHkgLSBjaGFyQ29vcmQgKyBjaGFyU3RlcCAqIC41O1xcblxcdFxcdFxcdFxcdGZsb2F0IGhhbGZDaGFyU3RlcCA9IGZsb29yKGNoYXJTdGVwICogLjUgKyAuNSk7XFxuXFxuXFx0XFx0XFx0XFx0Ly8gaW52ZXJ0IHkgYW5kIHNoaWZ0IGJ5IDFweCAoRkYgZXhwZWNpYWxseSBuZWVkcyB0aGF0KVxcblxcdFxcdFxcdFxcdHV2LnkgPSBjaGFyU3RlcCAtIHV2Lnk7XFxuXFxuXFx0XFx0XFx0XFx0Ly8gaWdub3JlIHBvaW50cyBvdXRzaWRlIG9mIGNoYXJhY3RlciBib3VuZGluZyBib3hcXG5cXHRcXHRcXHRcXHRmbG9hdCBoYWxmQ2hhcldpZHRoID0gY2VpbChjaGFyV2lkdGggKiAuNSk7XFxuXFx0XFx0XFx0XFx0aWYgKGZsb29yKHV2LngpID4gaGFsZkNoYXJTdGVwICsgaGFsZkNoYXJXaWR0aCB8fFxcblxcdFxcdFxcdFxcdFxcdGZsb29yKHV2LngpIDwgaGFsZkNoYXJTdGVwIC0gaGFsZkNoYXJXaWR0aCkgcmV0dXJuO1xcblxcblxcdFxcdFxcdFxcdHV2ICs9IGNoYXJJZCAqIGNoYXJTdGVwO1xcblxcdFxcdFxcdFxcdHV2ID0gdXYgLyBhdGxhc1NpemU7XFxuXFxuXFx0XFx0XFx0XFx0dmVjNCBjb2xvciA9IGZvbnRDb2xvcjtcXG5cXHRcXHRcXHRcXHR2ZWM0IG1hc2sgPSB0ZXh0dXJlMkQoYXRsYXMsIHV2KTtcXG5cXG5cXHRcXHRcXHRcXHRmbG9hdCBtYXNrWSA9IGxpZ2h0bmVzcyhtYXNrKTtcXG5cXHRcXHRcXHRcXHQvLyBmbG9hdCBjb2xvclkgPSBsaWdodG5lc3MoY29sb3IpO1xcblxcdFxcdFxcdFxcdGNvbG9yLmEgKj0gbWFza1k7XFxuXFx0XFx0XFx0XFx0Y29sb3IuYSAqPSBvcGFjaXR5O1xcblxcblxcdFxcdFxcdFxcdC8vIGNvbG9yLmEgKz0gLjE7XFxuXFxuXFx0XFx0XFx0XFx0Ly8gYW50aWFsaWFzaW5nLCBzZWUgeWlxIGNvbG9yIHNwYWNlIHktY2hhbm5lbCBmb3JtdWxhXFxuXFx0XFx0XFx0XFx0Ly8gY29sb3IucmdiICs9ICgxLiAtIGNvbG9yLnJnYikgKiAoMS4gLSBtYXNrLnJnYik7XFxuXFxuXFx0XFx0XFx0XFx0Z2xfRnJhZ0NvbG9yID0gY29sb3I7XFxuXFx0XFx0XFx0fVwifSk7cmV0dXJue3JlZ2w6dCxkcmF3OmUsYXRsYXM6e319fSxrLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZihcInN0cmluZ1wiPT10eXBlb2YgdCl0PXt0ZXh0OnR9O2Vsc2UgaWYoIXQpcmV0dXJuO251bGwhPSh0PWkodCx7cG9zaXRpb246XCJwb3NpdGlvbiBwb3NpdGlvbnMgY29vcmQgY29vcmRzIGNvb3JkaW5hdGVzXCIsZm9udDpcImZvbnQgZm9udEZhY2UgZm9udGZhY2UgdHlwZWZhY2UgY3NzRm9udCBjc3MtZm9udCBmYW1pbHkgZm9udEZhbWlseVwiLGZvbnRTaXplOlwiZm9udFNpemUgZm9udHNpemUgc2l6ZSBmb250LXNpemVcIix0ZXh0OlwidGV4dCB0ZXh0cyBjaGFycyBjaGFyYWN0ZXJzIHZhbHVlIHZhbHVlcyBzeW1ib2xzXCIsYWxpZ246XCJhbGlnbiBhbGlnbm1lbnQgdGV4dEFsaWduIHRleHRiYXNlbGluZVwiLGJhc2VsaW5lOlwiYmFzZWxpbmUgdGV4dEJhc2VsaW5lIHRleHRiYXNlbGluZVwiLGRpcmVjdGlvbjpcImRpciBkaXJlY3Rpb24gdGV4dERpcmVjdGlvblwiLGNvbG9yOlwiY29sb3IgY29sb3VyIGZpbGwgZmlsbC1jb2xvciBmaWxsQ29sb3IgdGV4dENvbG9yIHRleHRjb2xvclwiLGtlcm5pbmc6XCJrZXJuaW5nIGtlcm5cIixyYW5nZTpcInJhbmdlIGRhdGFCb3hcIix2aWV3cG9ydDpcInZwIHZpZXdwb3J0IHZpZXdCb3ggdmlld2JveCB2aWV3UG9ydFwiLG9wYWNpdHk6XCJvcGFjaXR5IGFscGhhIHRyYW5zcGFyZW5jeSB2aXNpYmxlIHZpc2liaWxpdHkgb3BhcXVlXCIsb2Zmc2V0Olwib2Zmc2V0IHBvc2l0aW9uT2Zmc2V0IHBhZGRpbmcgc2hpZnQgaW5kZW50IGluZGVudGF0aW9uXCJ9LCEwKSkub3BhY2l0eSYmKEFycmF5LmlzQXJyYXkodC5vcGFjaXR5KT90aGlzLm9wYWNpdHk9dC5vcGFjaXR5Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KX0pOnRoaXMub3BhY2l0eT1wYXJzZUZsb2F0KHQub3BhY2l0eSkpLG51bGwhPXQudmlld3BvcnQmJih0aGlzLnZpZXdwb3J0PWgodC52aWV3cG9ydCksay5ub3JtYWxWaWV3cG9ydCYmKHRoaXMudmlld3BvcnQueT10aGlzLmNhbnZhcy5oZWlnaHQtdGhpcy52aWV3cG9ydC55LXRoaXMudmlld3BvcnQuaGVpZ2h0KSx0aGlzLnZpZXdwb3J0QXJyYXk9W3RoaXMudmlld3BvcnQueCx0aGlzLnZpZXdwb3J0LnksdGhpcy52aWV3cG9ydC53aWR0aCx0aGlzLnZpZXdwb3J0LmhlaWdodF0pLG51bGw9PXRoaXMudmlld3BvcnQmJih0aGlzLnZpZXdwb3J0PXt4OjAseTowLHdpZHRoOnRoaXMuZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLGhlaWdodDp0aGlzLmdsLmRyYXdpbmdCdWZmZXJIZWlnaHR9LHRoaXMudmlld3BvcnRBcnJheT1bdGhpcy52aWV3cG9ydC54LHRoaXMudmlld3BvcnQueSx0aGlzLnZpZXdwb3J0LndpZHRoLHRoaXMudmlld3BvcnQuaGVpZ2h0XSksbnVsbCE9dC5rZXJuaW5nJiYodGhpcy5rZXJuaW5nPXQua2VybmluZyksbnVsbCE9dC5vZmZzZXQmJihcIm51bWJlclwiPT10eXBlb2YgdC5vZmZzZXQmJih0Lm9mZnNldD1bdC5vZmZzZXQsMF0pLHRoaXMucG9zaXRpb25PZmZzZXQ9eSh0Lm9mZnNldCkpLHQuZGlyZWN0aW9uJiYodGhpcy5kaXJlY3Rpb249dC5kaXJlY3Rpb24pLHQucmFuZ2UmJih0aGlzLnJhbmdlPXQucmFuZ2UsdGhpcy5zY2FsZT1bMS8odC5yYW5nZVsyXS10LnJhbmdlWzBdKSwxLyh0LnJhbmdlWzNdLXQucmFuZ2VbMV0pXSx0aGlzLnRyYW5zbGF0ZT1bLXQucmFuZ2VbMF0sLXQucmFuZ2VbMV1dKSx0LnNjYWxlJiYodGhpcy5zY2FsZT10LnNjYWxlKSx0LnRyYW5zbGF0ZSYmKHRoaXMudHJhbnNsYXRlPXQudHJhbnNsYXRlKSx0aGlzLnNjYWxlfHwodGhpcy5zY2FsZT1bMS90aGlzLnZpZXdwb3J0LndpZHRoLDEvdGhpcy52aWV3cG9ydC5oZWlnaHRdKSx0aGlzLnRyYW5zbGF0ZXx8KHRoaXMudHJhbnNsYXRlPVswLDBdKSx0aGlzLmZvbnQubGVuZ3RofHx0LmZvbnR8fCh0LmZvbnQ9ay5iYXNlRm9udFNpemUrXCJweCBzYW5zLXNlcmlmXCIpO3ZhciByLGE9ITEsbz0hMTtpZih0LmZvbnQmJihBcnJheS5pc0FycmF5KHQuZm9udCk/dC5mb250Olt0LmZvbnRdKS5mb3JFYWNoKGZ1bmN0aW9uKHQscil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpdHJ5e3Q9bi5wYXJzZSh0KX1jYXRjaChlKXt0PW4ucGFyc2Uoay5iYXNlRm9udFNpemUrXCJweCBcIit0KX1lbHNlIHQ9bi5wYXJzZShuLnN0cmluZ2lmeSh0KSk7dmFyIGk9bi5zdHJpbmdpZnkoe3NpemU6ay5iYXNlRm9udFNpemUsZmFtaWx5OnQuZmFtaWx5LHN0cmV0Y2g6Xz90LnN0cmV0Y2g6dm9pZCAwLHZhcmlhbnQ6dC52YXJpYW50LHdlaWdodDp0LndlaWdodCxzdHlsZTp0LnN0eWxlfSkscz1wKHQuc2l6ZSksbD1NYXRoLnJvdW5kKHNbMF0qZChzWzFdKSk7aWYobCE9PWUuZm9udFNpemVbcl0mJihvPSEwLGUuZm9udFNpemVbcl09bCksIShlLmZvbnRbcl0mJmk9PWUuZm9udFtyXS5iYXNlU3RyaW5nfHwoYT0hMCxlLmZvbnRbcl09ay5mb250c1tpXSxlLmZvbnRbcl0pKSl7dmFyIGM9dC5mYW1pbHkuam9pbihcIiwgXCIpLHU9W3Quc3R5bGVdO3Quc3R5bGUhPXQudmFyaWFudCYmdS5wdXNoKHQudmFyaWFudCksdC52YXJpYW50IT10LndlaWdodCYmdS5wdXNoKHQud2VpZ2h0KSxfJiZ0LndlaWdodCE9dC5zdHJldGNoJiZ1LnB1c2godC5zdHJldGNoKSxlLmZvbnRbcl09e2Jhc2VTdHJpbmc6aSxmYW1pbHk6Yyx3ZWlnaHQ6dC53ZWlnaHQsc3RyZXRjaDp0LnN0cmV0Y2gsc3R5bGU6dC5zdHlsZSx2YXJpYW50OnQudmFyaWFudCx3aWR0aDp7fSxrZXJuaW5nOnt9LG1ldHJpY3M6bShjLHtvcmlnaW46XCJ0b3BcIixmb250U2l6ZTprLmJhc2VGb250U2l6ZSxmb250U3R5bGU6dS5qb2luKFwiIFwiKX0pfSxrLmZvbnRzW2ldPWUuZm9udFtyXX19KSwoYXx8bykmJnRoaXMuZm9udC5mb3JFYWNoKGZ1bmN0aW9uKHIsaSl7dmFyIGE9bi5zdHJpbmdpZnkoe3NpemU6ZS5mb250U2l6ZVtpXSxmYW1pbHk6ci5mYW1pbHksc3RyZXRjaDpfP3Iuc3RyZXRjaDp2b2lkIDAsdmFyaWFudDpyLnZhcmlhbnQsd2VpZ2h0OnIud2VpZ2h0LHN0eWxlOnIuc3R5bGV9KTtpZihlLmZvbnRBdGxhc1tpXT1lLnNoYWRlci5hdGxhc1thXSwhZS5mb250QXRsYXNbaV0pe3ZhciBvPXIubWV0cmljcztlLnNoYWRlci5hdGxhc1thXT1lLmZvbnRBdGxhc1tpXT17Zm9udFN0cmluZzphLHN0ZXA6MipNYXRoLmNlaWwoZS5mb250U2l6ZVtpXSpvLmJvdHRvbSouNSksZW06ZS5mb250U2l6ZVtpXSxjb2xzOjAscm93czowLGhlaWdodDowLHdpZHRoOjAsY2hhcnM6W10saWRzOnt9LHRleHR1cmU6ZS5yZWdsLnRleHR1cmUoKX19bnVsbD09dC50ZXh0JiYodC50ZXh0PWUudGV4dCl9KSxcInN0cmluZ1wiPT10eXBlb2YgdC50ZXh0JiZ0LnBvc2l0aW9uJiZ0LnBvc2l0aW9uLmxlbmd0aD4yKXtmb3IodmFyIHM9QXJyYXkoLjUqdC5wb3NpdGlvbi5sZW5ndGgpLGY9MDtmPHMubGVuZ3RoO2YrKylzW2ZdPXQudGV4dDt0LnRleHQ9c31pZihudWxsIT10LnRleHR8fGEpe2lmKHRoaXMudGV4dE9mZnNldHM9WzBdLEFycmF5LmlzQXJyYXkodC50ZXh0KSl7dGhpcy5jb3VudD10LnRleHRbMF0ubGVuZ3RoLHRoaXMuY291bnRzPVt0aGlzLmNvdW50XTtmb3IodmFyIGI9MTtiPHQudGV4dC5sZW5ndGg7YisrKWUudGV4dE9mZnNldHNbYl09ZS50ZXh0T2Zmc2V0c1tiLTFdK3QudGV4dFtiLTFdLmxlbmd0aCxlLmNvdW50Kz10LnRleHRbYl0ubGVuZ3RoLGUuY291bnRzLnB1c2godC50ZXh0W2JdLmxlbmd0aCk7dGhpcy50ZXh0PXQudGV4dC5qb2luKFwiXCIpfWVsc2UgdGhpcy50ZXh0PXQudGV4dCx0aGlzLmNvdW50PXRoaXMudGV4dC5sZW5ndGgsdGhpcy5jb3VudHM9W3RoaXMuY291bnRdO3I9W10sdGhpcy5mb250LmZvckVhY2goZnVuY3Rpb24odCxuKXtrLmF0bGFzQ29udGV4dC5mb250PXQuYmFzZVN0cmluZztmb3IodmFyIGk9ZS5mb250QXRsYXNbbl0sYT0wO2E8ZS50ZXh0Lmxlbmd0aDthKyspe3ZhciBvPWUudGV4dC5jaGFyQXQoYSk7aWYobnVsbD09aS5pZHNbb10mJihpLmlkc1tvXT1pLmNoYXJzLmxlbmd0aCxpLmNoYXJzLnB1c2gobyksci5wdXNoKG8pKSxudWxsPT10LndpZHRoW29dJiYodC53aWR0aFtvXT1rLmF0bGFzQ29udGV4dC5tZWFzdXJlVGV4dChvKS53aWR0aC9rLmJhc2VGb250U2l6ZSxlLmtlcm5pbmcpKXt2YXIgcz1bXTtmb3IodmFyIGwgaW4gdC53aWR0aClzLnB1c2gobCtvLG8rbCk7dih0Lmtlcm5pbmcsZyh0LmZhbWlseSx7cGFpcnM6c30pKX19fSl9aWYodC5wb3NpdGlvbilpZih0LnBvc2l0aW9uLmxlbmd0aD4yKXtmb3IodmFyIHc9IXQucG9zaXRpb25bMF0ubGVuZ3RoLEE9dS5tYWxsb2NGbG9hdCgyKnRoaXMuY291bnQpLFQ9MCxNPTA7VDx0aGlzLmNvdW50cy5sZW5ndGg7VCsrKXt2YXIgUz1lLmNvdW50c1tUXTtpZih3KWZvcih2YXIgRT0wO0U8UztFKyspQVtNKytdPXQucG9zaXRpb25bMipUXSxBW00rK109dC5wb3NpdGlvblsyKlQrMV07ZWxzZSBmb3IodmFyIEM9MDtDPFM7QysrKUFbTSsrXT10LnBvc2l0aW9uW1RdWzBdLEFbTSsrXT10LnBvc2l0aW9uW1RdWzFdfXRoaXMucG9zaXRpb24uY2FsbD90aGlzLnBvc2l0aW9uKHt0eXBlOlwiZmxvYXRcIixkYXRhOkF9KTp0aGlzLnBvc2l0aW9uPXRoaXMucmVnbC5idWZmZXIoe3R5cGU6XCJmbG9hdFwiLGRhdGE6QX0pLHUuZnJlZUZsb2F0KEEpfWVsc2UgdGhpcy5wb3NpdGlvbi5kZXN0cm95JiZ0aGlzLnBvc2l0aW9uLmRlc3Ryb3koKSx0aGlzLnBvc2l0aW9uPXtjb25zdGFudDp0LnBvc2l0aW9ufTtpZih0LnRleHR8fGEpe3ZhciBMPXUubWFsbG9jVWludDgodGhpcy5jb3VudCksej11Lm1hbGxvY0Zsb2F0KDIqdGhpcy5jb3VudCk7dGhpcy50ZXh0V2lkdGg9W107Zm9yKHZhciBPPTAsST0wO088dGhpcy5jb3VudHMubGVuZ3RoO08rKyl7Zm9yKHZhciBEPWUuY291bnRzW09dLFA9ZS5mb250W09dfHxlLmZvbnRbMF0sUj1lLmZvbnRBdGxhc1tPXXx8ZS5mb250QXRsYXNbMF0sRj0wO0Y8RDtGKyspe3ZhciBCPWUudGV4dC5jaGFyQXQoSSksTj1lLnRleHQuY2hhckF0KEktMSk7aWYoTFtJXT1SLmlkc1tCXSx6WzIqSV09UC53aWR0aFtCXSxGKXt2YXIgaj16WzIqSS0yXSxWPXpbMipJXSxVPXpbMipJLTFdKy41KmorLjUqVjtpZihlLmtlcm5pbmcpe3ZhciBxPVAua2VybmluZ1tOK0JdO3EmJihVKz0uMDAxKnEpfXpbMipJKzFdPVV9ZWxzZSB6WzIqSSsxXT0uNSp6WzIqSV07SSsrfWUudGV4dFdpZHRoLnB1c2goei5sZW5ndGg/LjUqelsyKkktMl0relsyKkktMV06MCl9dC5hbGlnbnx8KHQuYWxpZ249dGhpcy5hbGlnbiksdGhpcy5jaGFyQnVmZmVyKHtkYXRhOkwsdHlwZTpcInVpbnQ4XCIsdXNhZ2U6XCJzdHJlYW1cIn0pLHRoaXMuc2l6ZUJ1ZmZlcih7ZGF0YTp6LHR5cGU6XCJmbG9hdFwiLHVzYWdlOlwic3RyZWFtXCJ9KSx1LmZyZWVVaW50OChMKSx1LmZyZWVGbG9hdCh6KSxyLmxlbmd0aCYmdGhpcy5mb250LmZvckVhY2goZnVuY3Rpb24odCxyKXt2YXIgbj1lLmZvbnRBdGxhc1tyXSxpPW4uc3RlcCxhPU1hdGguZmxvb3Ioay5tYXhBdGxhc1NpemUvaSksbz1NYXRoLm1pbihhLG4uY2hhcnMubGVuZ3RoKSxzPU1hdGguY2VpbChuLmNoYXJzLmxlbmd0aC9vKSxsPXgobyppKSx1PXgocyppKTtuLndpZHRoPWwsbi5oZWlnaHQ9dSxuLnJvd3M9cyxuLmNvbHM9byxuLmVtJiZuLnRleHR1cmUoe2RhdGE6Yyh7Y2FudmFzOmsuYXRsYXNDYW52YXMsZm9udDpuLmZvbnRTdHJpbmcsY2hhcnM6bi5jaGFycyxzaGFwZTpbbCx1XSxzdGVwOltpLGldfSl9KX0pfWlmKHQuYWxpZ24mJih0aGlzLmFsaWduPXQuYWxpZ24sdGhpcy5hbGlnbk9mZnNldD10aGlzLnRleHRXaWR0aC5tYXAoZnVuY3Rpb24odCxyKXt2YXIgbj1BcnJheS5pc0FycmF5KGUuYWxpZ24pP2UuYWxpZ24ubGVuZ3RoPjE/ZS5hbGlnbltyXTplLmFsaWduWzBdOmUuYWxpZ247aWYoXCJudW1iZXJcIj09dHlwZW9mIG4pcmV0dXJuIG47c3dpdGNoKG4pe2Nhc2VcInJpZ2h0XCI6Y2FzZVwiZW5kXCI6cmV0dXJuLXQ7Y2FzZVwiY2VudGVyXCI6Y2FzZVwiY2VudHJlXCI6Y2FzZVwibWlkZGxlXCI6cmV0dXJuLjUqLXR9cmV0dXJuIDB9KSksbnVsbD09dGhpcy5iYXNlbGluZSYmbnVsbD09dC5iYXNlbGluZSYmKHQuYmFzZWxpbmU9MCksbnVsbCE9dC5iYXNlbGluZSYmKHRoaXMuYmFzZWxpbmU9dC5iYXNlbGluZSxBcnJheS5pc0FycmF5KHRoaXMuYmFzZWxpbmUpfHwodGhpcy5iYXNlbGluZT1bdGhpcy5iYXNlbGluZV0pLHRoaXMuYmFzZWxpbmVPZmZzZXQ9dGhpcy5iYXNlbGluZS5tYXAoZnVuY3Rpb24odCxyKXt2YXIgbj0oZS5mb250W3JdfHxlLmZvbnRbMF0pLm1ldHJpY3MsaT0wO3JldHVybiBpKz0uNSpuLmJvdHRvbSxpKz1cIm51bWJlclwiPT10eXBlb2YgdD90LW4uYmFzZWxpbmU6LW5bdF0say5ub3JtYWxWaWV3cG9ydHx8KGkqPS0xKSxpfSkpLG51bGwhPXQuY29sb3IpaWYodC5jb2xvcnx8KHQuY29sb3I9XCJ0cmFuc3BhcmVudFwiKSxcInN0cmluZ1wiIT10eXBlb2YgdC5jb2xvciYmaXNOYU4odC5jb2xvcikpe3ZhciBIO2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0LmNvbG9yWzBdJiZ0LmNvbG9yLmxlbmd0aD50aGlzLmNvdW50cy5sZW5ndGgpe3ZhciBHPXQuY29sb3IubGVuZ3RoO0g9dS5tYWxsb2NVaW50OChHKTtmb3IodmFyIFk9KHQuY29sb3Iuc3ViYXJyYXl8fHQuY29sb3Iuc2xpY2UpLmJpbmQodC5jb2xvciksVz0wO1c8RztXKz00KUguc2V0KGwoWShXLFcrNCksXCJ1aW50OFwiKSxXKX1lbHNle3ZhciBYPXQuY29sb3IubGVuZ3RoO0g9dS5tYWxsb2NVaW50OCg0KlgpO2Zvcih2YXIgWj0wO1o8WDtaKyspSC5zZXQobCh0LmNvbG9yW1pdfHwwLFwidWludDhcIiksNCpaKX10aGlzLmNvbG9yPUh9ZWxzZSB0aGlzLmNvbG9yPWwodC5jb2xvcixcInVpbnQ4XCIpO2lmKHQucG9zaXRpb258fHQudGV4dHx8dC5jb2xvcnx8dC5iYXNlbGluZXx8dC5hbGlnbnx8dC5mb250fHx0Lm9mZnNldHx8dC5vcGFjaXR5KWlmKHRoaXMuY29sb3IubGVuZ3RoPjR8fHRoaXMuYmFzZWxpbmVPZmZzZXQubGVuZ3RoPjF8fHRoaXMuYWxpZ24mJnRoaXMuYWxpZ24ubGVuZ3RoPjF8fHRoaXMuZm9udEF0bGFzLmxlbmd0aD4xfHx0aGlzLnBvc2l0aW9uT2Zmc2V0Lmxlbmd0aD4yKXt2YXIgJD1NYXRoLm1heCguNSp0aGlzLnBvc2l0aW9uLmxlbmd0aHx8MCwuMjUqdGhpcy5jb2xvci5sZW5ndGh8fDAsdGhpcy5iYXNlbGluZU9mZnNldC5sZW5ndGh8fDAsdGhpcy5hbGlnbk9mZnNldC5sZW5ndGh8fDAsdGhpcy5mb250Lmxlbmd0aHx8MCx0aGlzLm9wYWNpdHkubGVuZ3RofHwwLC41KnRoaXMucG9zaXRpb25PZmZzZXQubGVuZ3RofHwwKTt0aGlzLmJhdGNoPUFycmF5KCQpO2Zvcih2YXIgSj0wO0o8dGhpcy5iYXRjaC5sZW5ndGg7SisrKWUuYmF0Y2hbSl09e2NvdW50OmUuY291bnRzLmxlbmd0aD4xP2UuY291bnRzW0pdOmUuY291bnRzWzBdLG9mZnNldDplLnRleHRPZmZzZXRzLmxlbmd0aD4xP2UudGV4dE9mZnNldHNbSl06ZS50ZXh0T2Zmc2V0c1swXSxjb2xvcjplLmNvbG9yP2UuY29sb3IubGVuZ3RoPD00P2UuY29sb3I6ZS5jb2xvci5zdWJhcnJheSg0KkosNCpKKzQpOlswLDAsMCwyNTVdLG9wYWNpdHk6QXJyYXkuaXNBcnJheShlLm9wYWNpdHkpP2Uub3BhY2l0eVtKXTplLm9wYWNpdHksYmFzZWxpbmU6bnVsbCE9ZS5iYXNlbGluZU9mZnNldFtKXT9lLmJhc2VsaW5lT2Zmc2V0W0pdOmUuYmFzZWxpbmVPZmZzZXRbMF0sYWxpZ246ZS5hbGlnbj9udWxsIT1lLmFsaWduT2Zmc2V0W0pdP2UuYWxpZ25PZmZzZXRbSl06ZS5hbGlnbk9mZnNldFswXTowLGF0bGFzOmUuZm9udEF0bGFzW0pdfHxlLmZvbnRBdGxhc1swXSxwb3NpdGlvbk9mZnNldDplLnBvc2l0aW9uT2Zmc2V0Lmxlbmd0aD4yP2UucG9zaXRpb25PZmZzZXQuc3ViYXJyYXkoMipKLDIqSisyKTplLnBvc2l0aW9uT2Zmc2V0fX1lbHNlIHRoaXMuY291bnQ/dGhpcy5iYXRjaD1be2NvdW50OnRoaXMuY291bnQsb2Zmc2V0OjAsY29sb3I6dGhpcy5jb2xvcnx8WzAsMCwwLDI1NV0sb3BhY2l0eTpBcnJheS5pc0FycmF5KHRoaXMub3BhY2l0eSk/dGhpcy5vcGFjaXR5WzBdOnRoaXMub3BhY2l0eSxiYXNlbGluZTp0aGlzLmJhc2VsaW5lT2Zmc2V0WzBdLGFsaWduOnRoaXMuYWxpZ25PZmZzZXQ/dGhpcy5hbGlnbk9mZnNldFswXTowLGF0bGFzOnRoaXMuZm9udEF0bGFzWzBdLHBvc2l0aW9uT2Zmc2V0OnRoaXMucG9zaXRpb25PZmZzZXR9XTp0aGlzLmJhdGNoPVtdfSxrLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7fSxrLnByb3RvdHlwZS5rZXJuaW5nPSEwLGsucHJvdG90eXBlLnBvc2l0aW9uPXtjb25zdGFudDpuZXcgRmxvYXQzMkFycmF5KDIpfSxrLnByb3RvdHlwZS50cmFuc2xhdGU9bnVsbCxrLnByb3RvdHlwZS5zY2FsZT1udWxsLGsucHJvdG90eXBlLmZvbnQ9bnVsbCxrLnByb3RvdHlwZS50ZXh0PVwiXCIsay5wcm90b3R5cGUucG9zaXRpb25PZmZzZXQ9WzAsMF0say5wcm90b3R5cGUub3BhY2l0eT0xLGsucHJvdG90eXBlLmNvbG9yPW5ldyBVaW50OEFycmF5KFswLDAsMCwyNTVdKSxrLnByb3RvdHlwZS5hbGlnbk9mZnNldD1bMCwwXSxrLm5vcm1hbFZpZXdwb3J0PSExLGsubWF4QXRsYXNTaXplPTEwMjQsay5hdGxhc0NhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLGsuYXRsYXNDb250ZXh0PWsuYXRsYXNDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIse2FscGhhOiExfSksay5iYXNlRm9udFNpemU9NjQsay5mb250cz17fSxlLmV4cG9ydHM9a30se1wiYml0LXR3aWRkbGVcIjo4MyxcImNvbG9yLW5vcm1hbGl6ZVwiOjExMSxcImNzcy1mb250XCI6MTMwLFwiZGV0ZWN0LWtlcm5pbmdcIjoxNTgsXCJlczYtd2Vhay1tYXBcIjoyMTcsXCJmbGF0dGVuLXZlcnRleC1kYXRhXCI6MjI0LFwiZm9udC1hdGxhc1wiOjIyNSxcImZvbnQtbWVhc3VyZVwiOjIyNixcImdsLXV0aWwvY29udGV4dFwiOjMxNixcImlzLXBsYWluLW9ialwiOjQxNSxcIm9iamVjdC1hc3NpZ25cIjo0NDcsXCJwYXJzZS1yZWN0XCI6NDUyLFwicGFyc2UtdW5pdFwiOjQ1NCxcInBpY2stYnktYWxpYXNcIjo0NTgscmVnbDo0ODcsXCJ0by1weFwiOjUyNCxcInR5cGVkYXJyYXktcG9vbFwiOjUzMH1dLDMxNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJuZGFycmF5XCIpLGk9dChcIm5kYXJyYXktb3BzXCIpLGE9dChcInR5cGVkYXJyYXktcG9vbFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoYXJndW1lbnRzLmxlbmd0aDw9MSl0aHJvdyBuZXcgRXJyb3IoXCJnbC10ZXh0dXJlMmQ6IE1pc3NpbmcgYXJndW1lbnRzIGZvciB0ZXh0dXJlMmQgY29uc3RydWN0b3JcIik7b3x8ZnVuY3Rpb24odCl7bz1bdC5MSU5FQVIsdC5ORUFSRVNUX01JUE1BUF9MSU5FQVIsdC5MSU5FQVJfTUlQTUFQX05FQVJFU1QsdC5MSU5FQVJfTUlQTUFQX05FQVJFU1RdLHM9W3QuTkVBUkVTVCx0LkxJTkVBUix0Lk5FQVJFU1RfTUlQTUFQX05FQVJFU1QsdC5ORUFSRVNUX01JUE1BUF9MSU5FQVIsdC5MSU5FQVJfTUlQTUFQX05FQVJFU1QsdC5MSU5FQVJfTUlQTUFQX0xJTkVBUl0sbD1bdC5SRVBFQVQsdC5DTEFNUF9UT19FREdFLHQuTUlSUk9SRURfUkVQRUFUXX0odCk7aWYoXCJudW1iZXJcIj09dHlwZW9mIGFyZ3VtZW50c1sxXSlyZXR1cm4gdih0LGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzNdfHx0LlJHQkEsYXJndW1lbnRzWzRdfHx0LlVOU0lHTkVEX0JZVEUpO2lmKEFycmF5LmlzQXJyYXkoYXJndW1lbnRzWzFdKSlyZXR1cm4gdih0LDB8YXJndW1lbnRzWzFdWzBdLDB8YXJndW1lbnRzWzFdWzFdLGFyZ3VtZW50c1syXXx8dC5SR0JBLGFyZ3VtZW50c1szXXx8dC5VTlNJR05FRF9CWVRFKTtpZihcIm9iamVjdFwiPT10eXBlb2YgYXJndW1lbnRzWzFdKXt2YXIgZT1hcmd1bWVudHNbMV0scj1jKGUpP2U6ZS5yYXc7aWYocilyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPWcodCk7cmV0dXJuIHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCxpLGksYSxlKSxuZXcgZih0LG8scixuLGksYSl9KHQsciwwfGUud2lkdGgsMHxlLmhlaWdodCxhcmd1bWVudHNbMl18fHQuUkdCQSxhcmd1bWVudHNbM118fHQuVU5TSUdORURfQllURSk7aWYoZS5zaGFwZSYmZS5kYXRhJiZlLnN0cmlkZSlyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj1lLmR0eXBlLG89ZS5zaGFwZS5zbGljZSgpLHM9dC5nZXRQYXJhbWV0ZXIodC5NQVhfVEVYVFVSRV9TSVpFKTtpZihvWzBdPDB8fG9bMF0+c3x8b1sxXTwwfHxvWzFdPnMpdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHRleHR1cmUgc2l6ZVwiKTt2YXIgbD1kKG8sZS5zdHJpZGUuc2xpY2UoKSksYz0wO1wiZmxvYXQzMlwiPT09cj9jPXQuRkxPQVQ6XCJmbG9hdDY0XCI9PT1yPyhjPXQuRkxPQVQsbD0hMSxyPVwiZmxvYXQzMlwiKTpcInVpbnQ4XCI9PT1yP2M9dC5VTlNJR05FRF9CWVRFOihjPXQuVU5TSUdORURfQllURSxsPSExLHI9XCJ1aW50OFwiKTt2YXIgaCxwLHY9MDtpZigyPT09by5sZW5ndGgpdj10LkxVTUlOQU5DRSxvPVtvWzBdLG9bMV0sMV0sZT1uKGUuZGF0YSxvLFtlLnN0cmlkZVswXSxlLnN0cmlkZVsxXSwxXSxlLm9mZnNldCk7ZWxzZXtpZigzIT09by5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHNoYXBlIGZvciB0ZXh0dXJlXCIpO2lmKDE9PT1vWzJdKXY9dC5BTFBIQTtlbHNlIGlmKDI9PT1vWzJdKXY9dC5MVU1JTkFOQ0VfQUxQSEE7ZWxzZSBpZigzPT09b1syXSl2PXQuUkdCO2Vsc2V7aWYoNCE9PW9bMl0pdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHNoYXBlIGZvciBwaXhlbCBjb29yZHNcIik7dj10LlJHQkF9fWMhPT10LkZMT0FUfHx0LmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0XCIpfHwoYz10LlVOU0lHTkVEX0JZVEUsbD0hMSk7dmFyIG09ZS5zaXplO2lmKGwpaD0wPT09ZS5vZmZzZXQmJmUuZGF0YS5sZW5ndGg9PT1tP2UuZGF0YTplLmRhdGEuc3ViYXJyYXkoZS5vZmZzZXQsZS5vZmZzZXQrbSk7ZWxzZXt2YXIgeT1bb1syXSxvWzJdKm9bMF0sMV07cD1hLm1hbGxvYyhtLHIpO3ZhciB4PW4ocCxvLHksMCk7XCJmbG9hdDMyXCIhPT1yJiZcImZsb2F0NjRcIiE9PXJ8fGMhPT10LlVOU0lHTkVEX0JZVEU/aS5hc3NpZ24oeCxlKTp1KHgsZSksaD1wLnN1YmFycmF5KDAsbSl9dmFyIGI9Zyh0KTt0LnRleEltYWdlMkQodC5URVhUVVJFXzJELDAsdixvWzBdLG9bMV0sMCx2LGMsaCksbHx8YS5mcmVlKHApO3JldHVybiBuZXcgZih0LGIsb1swXSxvWzFdLHYsYyl9KHQsZSl9dGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIGFyZ3VtZW50cyBmb3IgdGV4dHVyZTJkIGNvbnN0cnVjdG9yXCIpfTt2YXIgbz1udWxsLHM9bnVsbCxsPW51bGw7ZnVuY3Rpb24gYyh0KXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQmJnQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQmJnQgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHxcInVuZGVmaW5lZFwiIT10eXBlb2YgSFRNTFZpZGVvRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnR8fFwidW5kZWZpbmVkXCIhPXR5cGVvZiBJbWFnZURhdGEmJnQgaW5zdGFuY2VvZiBJbWFnZURhdGF9dmFyIHU9ZnVuY3Rpb24odCxlKXtpLm11bHModCxlLDI1NSl9O2Z1bmN0aW9uIGgodCxlLHIpe3ZhciBuPXQuZ2wsaT1uLmdldFBhcmFtZXRlcihuLk1BWF9URVhUVVJFX1NJWkUpO2lmKGU8MHx8ZT5pfHxyPDB8fHI+aSl0aHJvdyBuZXcgRXJyb3IoXCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgdGV4dHVyZSBzaXplXCIpO3JldHVybiB0Ll9zaGFwZT1bZSxyXSx0LmJpbmQoKSxuLnRleEltYWdlMkQobi5URVhUVVJFXzJELDAsdC5mb3JtYXQsZSxyLDAsdC5mb3JtYXQsdC50eXBlLG51bGwpLHQuX21pcExldmVscz1bMF0sdH1mdW5jdGlvbiBmKHQsZSxyLG4saSxhKXt0aGlzLmdsPXQsdGhpcy5oYW5kbGU9ZSx0aGlzLmZvcm1hdD1pLHRoaXMudHlwZT1hLHRoaXMuX3NoYXBlPVtyLG5dLHRoaXMuX21pcExldmVscz1bMF0sdGhpcy5fbWFnRmlsdGVyPXQuTkVBUkVTVCx0aGlzLl9taW5GaWx0ZXI9dC5ORUFSRVNULHRoaXMuX3dyYXBTPXQuQ0xBTVBfVE9fRURHRSx0aGlzLl93cmFwVD10LkNMQU1QX1RPX0VER0UsdGhpcy5fYW5pc29TYW1wbGVzPTE7dmFyIG89dGhpcyxzPVt0aGlzLl93cmFwUyx0aGlzLl93cmFwVF07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocyxbe2dldDpmdW5jdGlvbigpe3JldHVybiBvLl93cmFwU30sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBvLndyYXBTPXR9fSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uX3dyYXBUfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8ud3JhcFQ9dH19XSksdGhpcy5fd3JhcFZlY3Rvcj1zO3ZhciBsPVt0aGlzLl9zaGFwZVswXSx0aGlzLl9zaGFwZVsxXV07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobCxbe2dldDpmdW5jdGlvbigpe3JldHVybiBvLl9zaGFwZVswXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBvLndpZHRoPXR9fSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uX3NoYXBlWzFdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8uaGVpZ2h0PXR9fV0pLHRoaXMuX3NoYXBlVmVjdG9yPWx9dmFyIHA9Zi5wcm90b3R5cGU7ZnVuY3Rpb24gZCh0LGUpe3JldHVybiAzPT09dC5sZW5ndGg/MT09PWVbMl0mJmVbMV09PT10WzBdKnRbMl0mJmVbMF09PT10WzJdOjE9PT1lWzBdJiZlWzFdPT09dFswXX1mdW5jdGlvbiBnKHQpe3ZhciBlPXQuY3JlYXRlVGV4dHVyZSgpO3JldHVybiB0LmJpbmRUZXh0dXJlKHQuVEVYVFVSRV8yRCxlKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NSU5fRklMVEVSLHQuTkVBUkVTVCksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfTUFHX0ZJTFRFUix0Lk5FQVJFU1QpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX1dSQVBfUyx0LkNMQU1QX1RPX0VER0UpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX1dSQVBfVCx0LkNMQU1QX1RPX0VER0UpLGV9ZnVuY3Rpb24gdih0LGUscixuLGkpe3ZhciBhPXQuZ2V0UGFyYW1ldGVyKHQuTUFYX1RFWFRVUkVfU0laRSk7aWYoZTwwfHxlPmF8fHI8MHx8cj5hKXRocm93IG5ldyBFcnJvcihcImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNoYXBlXCIpO2lmKGk9PT10LkZMT0FUJiYhdC5nZXRFeHRlbnNpb24oXCJPRVNfdGV4dHVyZV9mbG9hdFwiKSl0aHJvdyBuZXcgRXJyb3IoXCJnbC10ZXh0dXJlMmQ6IEZsb2F0aW5nIHBvaW50IHRleHR1cmVzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybVwiKTt2YXIgbz1nKHQpO3JldHVybiB0LnRleEltYWdlMkQodC5URVhUVVJFXzJELDAsbixlLHIsMCxuLGksbnVsbCksbmV3IGYodCxvLGUscixuLGkpfU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHAse21pbkZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21pbkZpbHRlcn0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuYmluZCgpO3ZhciBlPXRoaXMuZ2w7aWYodGhpcy50eXBlPT09ZS5GTE9BVCYmby5pbmRleE9mKHQpPj0wJiYoZS5nZXRFeHRlbnNpb24oXCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXJcIil8fCh0PWUuTkVBUkVTVCkpLHMuaW5kZXhPZih0KTwwKXRocm93IG5ldyBFcnJvcihcImdsLXRleHR1cmUyZDogVW5rbm93biBmaWx0ZXIgbW9kZSBcIit0KTtyZXR1cm4gZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfTUlOX0ZJTFRFUix0KSx0aGlzLl9taW5GaWx0ZXI9dH19LG1hZ0ZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuYmluZCgpO3ZhciBlPXRoaXMuZ2w7aWYodGhpcy50eXBlPT09ZS5GTE9BVCYmby5pbmRleE9mKHQpPj0wJiYoZS5nZXRFeHRlbnNpb24oXCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXJcIil8fCh0PWUuTkVBUkVTVCkpLHMuaW5kZXhPZih0KTwwKXRocm93IG5ldyBFcnJvcihcImdsLXRleHR1cmUyZDogVW5rbm93biBmaWx0ZXIgbW9kZSBcIit0KTtyZXR1cm4gZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfTUFHX0ZJTFRFUix0KSx0aGlzLl9tYWdGaWx0ZXI9dH19LG1pcFNhbXBsZXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmlzb1NhbXBsZXN9LHNldDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9hbmlzb1NhbXBsZXM7aWYodGhpcy5fYW5pc29TYW1wbGVzPTB8TWF0aC5tYXgodCwxKSxlIT09dGhpcy5fYW5pc29TYW1wbGVzKXt2YXIgcj10aGlzLmdsLmdldEV4dGVuc2lvbihcIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpY1wiKTtyJiZ0aGlzLmdsLnRleFBhcmFtZXRlcmYodGhpcy5nbC5URVhUVVJFXzJELHIuVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQsdGhpcy5fYW5pc29TYW1wbGVzKX1yZXR1cm4gdGhpcy5fYW5pc29TYW1wbGVzfX0sd3JhcFM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cmFwU30sc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMuYmluZCgpLGwuaW5kZXhPZih0KTwwKXRocm93IG5ldyBFcnJvcihcImdsLXRleHR1cmUyZDogVW5rbm93biB3cmFwIG1vZGUgXCIrdCk7cmV0dXJuIHRoaXMuZ2wudGV4UGFyYW1ldGVyaSh0aGlzLmdsLlRFWFRVUkVfMkQsdGhpcy5nbC5URVhUVVJFX1dSQVBfUyx0KSx0aGlzLl93cmFwUz10fX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cmFwVH0sc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMuYmluZCgpLGwuaW5kZXhPZih0KTwwKXRocm93IG5ldyBFcnJvcihcImdsLXRleHR1cmUyZDogVW5rbm93biB3cmFwIG1vZGUgXCIrdCk7cmV0dXJuIHRoaXMuZ2wudGV4UGFyYW1ldGVyaSh0aGlzLmdsLlRFWFRVUkVfMkQsdGhpcy5nbC5URVhUVVJFX1dSQVBfVCx0KSx0aGlzLl93cmFwVD10fX0sd3JhcDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyYXBWZWN0b3J9LHNldDpmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpfHwodD1bdCx0XSksMiE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImdsLXRleHR1cmUyZDogTXVzdCBzcGVjaWZ5IHdyYXAgbW9kZSBmb3Igcm93cyBhbmQgY29sdW1uc1wiKTtmb3IodmFyIGU9MDtlPDI7KytlKWlmKGwuaW5kZXhPZih0W2VdKTwwKXRocm93IG5ldyBFcnJvcihcImdsLXRleHR1cmUyZDogVW5rbm93biB3cmFwIG1vZGUgXCIrdCk7dGhpcy5fd3JhcFM9dFswXSx0aGlzLl93cmFwVD10WzFdO3ZhciByPXRoaXMuZ2w7cmV0dXJuIHRoaXMuYmluZCgpLHIudGV4UGFyYW1ldGVyaShyLlRFWFRVUkVfMkQsci5URVhUVVJFX1dSQVBfUyx0aGlzLl93cmFwUyksci50ZXhQYXJhbWV0ZXJpKHIuVEVYVFVSRV8yRCxyLlRFWFRVUkVfV1JBUF9ULHRoaXMuX3dyYXBUKSx0fX0sc2hhcGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaGFwZVZlY3Rvcn0sc2V0OmZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2lmKDIhPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgdGV4dHVyZSBzaGFwZVwiKX1lbHNlIHQ9WzB8dCwwfHRdO3JldHVybiBoKHRoaXMsMHx0WzBdLDB8dFsxXSksWzB8dFswXSwwfHRbMV1dfX0sd2lkdGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaGFwZVswXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBoKHRoaXMsdHw9MCx0aGlzLl9zaGFwZVsxXSksdH19LGhlaWdodDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NoYXBlWzFdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR8PTAsaCh0aGlzLHRoaXMuX3NoYXBlWzBdLHQpLHR9fX0pLHAuYmluZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsO3JldHVybiB2b2lkIDAhPT10JiZlLmFjdGl2ZVRleHR1cmUoZS5URVhUVVJFMCsoMHx0KSksZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsdGhpcy5oYW5kbGUpLHZvaWQgMCE9PXQ/MHx0OmUuZ2V0UGFyYW1ldGVyKGUuQUNUSVZFX1RFWFRVUkUpLWUuVEVYVFVSRTB9LHAuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuZ2wuZGVsZXRlVGV4dHVyZSh0aGlzLmhhbmRsZSl9LHAuZ2VuZXJhdGVNaXBtYXA9ZnVuY3Rpb24oKXt0aGlzLmJpbmQoKSx0aGlzLmdsLmdlbmVyYXRlTWlwbWFwKHRoaXMuZ2wuVEVYVFVSRV8yRCk7Zm9yKHZhciB0PU1hdGgubWluKHRoaXMuX3NoYXBlWzBdLHRoaXMuX3NoYXBlWzFdKSxlPTA7dD4wOysrZSx0Pj4+PTEpdGhpcy5fbWlwTGV2ZWxzLmluZGV4T2YoZSk8MCYmdGhpcy5fbWlwTGV2ZWxzLnB1c2goZSl9LHAuc2V0UGl4ZWxzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzPXRoaXMuZ2w7dGhpcy5iaW5kKCksQXJyYXkuaXNBcnJheShlKT8obz1yLHI9MHxlWzFdLGU9MHxlWzBdKTooZT1lfHwwLHI9cnx8MCksbz1vfHwwO3ZhciBsPWModCk/dDp0LnJhdztpZihsKXt0aGlzLl9taXBMZXZlbHMuaW5kZXhPZihvKTwwPyhzLnRleEltYWdlMkQocy5URVhUVVJFXzJELDAsdGhpcy5mb3JtYXQsdGhpcy5mb3JtYXQsdGhpcy50eXBlLGwpLHRoaXMuX21pcExldmVscy5wdXNoKG8pKTpzLnRleFN1YkltYWdlMkQocy5URVhUVVJFXzJELG8sZSxyLHRoaXMuZm9ybWF0LHRoaXMudHlwZSxsKX1lbHNle2lmKCEodC5zaGFwZSYmdC5zdHJpZGUmJnQuZGF0YSkpdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBVbnN1cHBvcnRlZCBkYXRhIHR5cGVcIik7aWYodC5zaGFwZS5sZW5ndGg8Mnx8ZSt0LnNoYXBlWzFdPnRoaXMuX3NoYXBlWzFdPj4+b3x8cit0LnNoYXBlWzBdPnRoaXMuX3NoYXBlWzBdPj4+b3x8ZTwwfHxyPDApdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBUZXh0dXJlIGRpbWVuc2lvbnMgYXJlIG91dCBvZiBib3VuZHNcIik7IWZ1bmN0aW9uKHQsZSxyLG8scyxsLGMsaCl7dmFyIGY9aC5kdHlwZSxwPWguc2hhcGUuc2xpY2UoKTtpZihwLmxlbmd0aDwyfHxwLmxlbmd0aD4zKXRocm93IG5ldyBFcnJvcihcImdsLXRleHR1cmUyZDogSW52YWxpZCBuZGFycmF5LCBtdXN0IGJlIDJkIG9yIDNkXCIpO3ZhciBnPTAsdj0wLG09ZChwLGguc3RyaWRlLnNsaWNlKCkpO1wiZmxvYXQzMlwiPT09Zj9nPXQuRkxPQVQ6XCJmbG9hdDY0XCI9PT1mPyhnPXQuRkxPQVQsbT0hMSxmPVwiZmxvYXQzMlwiKTpcInVpbnQ4XCI9PT1mP2c9dC5VTlNJR05FRF9CWVRFOihnPXQuVU5TSUdORURfQllURSxtPSExLGY9XCJ1aW50OFwiKTtpZigyPT09cC5sZW5ndGgpdj10LkxVTUlOQU5DRSxwPVtwWzBdLHBbMV0sMV0saD1uKGguZGF0YSxwLFtoLnN0cmlkZVswXSxoLnN0cmlkZVsxXSwxXSxoLm9mZnNldCk7ZWxzZXtpZigzIT09cC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHNoYXBlIGZvciB0ZXh0dXJlXCIpO2lmKDE9PT1wWzJdKXY9dC5BTFBIQTtlbHNlIGlmKDI9PT1wWzJdKXY9dC5MVU1JTkFOQ0VfQUxQSEE7ZWxzZSBpZigzPT09cFsyXSl2PXQuUkdCO2Vsc2V7aWYoNCE9PXBbMl0pdGhyb3cgbmV3IEVycm9yKFwiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHNoYXBlIGZvciBwaXhlbCBjb29yZHNcIik7dj10LlJHQkF9cFsyXX12IT09dC5MVU1JTkFOQ0UmJnYhPT10LkFMUEhBfHxzIT09dC5MVU1JTkFOQ0UmJnMhPT10LkFMUEhBfHwodj1zKTtpZih2IT09cyl0aHJvdyBuZXcgRXJyb3IoXCJnbC10ZXh0dXJlMmQ6IEluY29tcGF0aWJsZSB0ZXh0dXJlIGZvcm1hdCBmb3Igc2V0UGl4ZWxzXCIpO3ZhciB5PWguc2l6ZSx4PWMuaW5kZXhPZihvKTwwO3gmJmMucHVzaChvKTtpZihnPT09bCYmbSkwPT09aC5vZmZzZXQmJmguZGF0YS5sZW5ndGg9PT15P3g/dC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCxvLHMscFswXSxwWzFdLDAscyxsLGguZGF0YSk6dC50ZXhTdWJJbWFnZTJEKHQuVEVYVFVSRV8yRCxvLGUscixwWzBdLHBbMV0scyxsLGguZGF0YSk6eD90LnRleEltYWdlMkQodC5URVhUVVJFXzJELG8scyxwWzBdLHBbMV0sMCxzLGwsaC5kYXRhLnN1YmFycmF5KGgub2Zmc2V0LGgub2Zmc2V0K3kpKTp0LnRleFN1YkltYWdlMkQodC5URVhUVVJFXzJELG8sZSxyLHBbMF0scFsxXSxzLGwsaC5kYXRhLnN1YmFycmF5KGgub2Zmc2V0LGgub2Zmc2V0K3kpKTtlbHNle3ZhciBiO2I9bD09PXQuRkxPQVQ/YS5tYWxsb2NGbG9hdDMyKHkpOmEubWFsbG9jVWludDgoeSk7dmFyIF89bihiLHAsW3BbMl0scFsyXSpwWzBdLDFdKTtnPT09dC5GTE9BVCYmbD09PXQuVU5TSUdORURfQllURT91KF8saCk6aS5hc3NpZ24oXyxoKSx4P3QudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsbyxzLHBbMF0scFsxXSwwLHMsbCxiLnN1YmFycmF5KDAseSkpOnQudGV4U3ViSW1hZ2UyRCh0LlRFWFRVUkVfMkQsbyxlLHIscFswXSxwWzFdLHMsbCxiLnN1YmFycmF5KDAseSkpLGw9PT10LkZMT0FUP2EuZnJlZUZsb2F0MzIoYik6YS5mcmVlVWludDgoYil9fShzLGUscixvLHRoaXMuZm9ybWF0LHRoaXMudHlwZSx0aGlzLl9taXBMZXZlbHMsdCl9fX0se25kYXJyYXk6NDQzLFwibmRhcnJheS1vcHNcIjo0MzcsXCJ0eXBlZGFycmF5LXBvb2xcIjo1MzB9XSwzMTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicGljay1ieS1hbGlhc1wiKTtmdW5jdGlvbiBpKHQpe2lmKHQuY29udGFpbmVyKWlmKHQuY29udGFpbmVyPT1kb2N1bWVudC5ib2R5KWRvY3VtZW50LmJvZHkuc3R5bGUud2lkdGh8fCh0LmNhbnZhcy53aWR0aD10LndpZHRofHx0LnBpeGVsUmF0aW8qd2luZG93LmlubmVyV2lkdGgpLGRvY3VtZW50LmJvZHkuc3R5bGUuaGVpZ2h0fHwodC5jYW52YXMuaGVpZ2h0PXQuaGVpZ2h0fHx0LnBpeGVsUmF0aW8qd2luZG93LmlubmVySGVpZ2h0KTtlbHNle3ZhciBlPXQuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3QuY2FudmFzLndpZHRoPXQud2lkdGh8fGUucmlnaHQtZS5sZWZ0LHQuY2FudmFzLmhlaWdodD10LmhlaWdodHx8ZS5ib3R0b20tZS50b3B9fWZ1bmN0aW9uIGEodCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdC5nZXRDb250ZXh0JiZcIndpZHRoXCJpbiB0JiZcImhlaWdodFwiaW4gdH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU7aWYodD9cInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9e2NvbnRhaW5lcjp0fSk6dD17fSxhKHQpP3Q9e2NvbnRhaW5lcjp0fTp0PVwic3RyaW5nXCI9PXR5cGVvZihlPXQpLm5vZGVOYW1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmFwcGVuZENoaWxkJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdD97Y29udGFpbmVyOnR9OmZ1bmN0aW9uKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQuZHJhd0FycmF5c3x8XCJmdW5jdGlvblwiPT10eXBlb2YgdC5kcmF3RWxlbWVudHN9KHQpP3tnbDp0fTpuKHQse2NvbnRhaW5lcjpcImNvbnRhaW5lciB0YXJnZXQgZWxlbWVudCBlbCBjYW52YXMgaG9sZGVyIHBhcmVudCBwYXJlbnROb2RlIHdyYXBwZXIgdXNlIHJlZiByb290IG5vZGVcIixnbDpcImdsIGNvbnRleHQgd2ViZ2wgZ2xDb250ZXh0XCIsYXR0cnM6XCJhdHRyaWJ1dGVzIGF0dHJzIGNvbnRleHRBdHRyaWJ1dGVzXCIscGl4ZWxSYXRpbzpcInBpeGVsUmF0aW8gcHhSYXRpbyBweCByYXRpbyBweHJhdGlvIHBpeGVscmF0aW9cIn0sITApLHQucGl4ZWxSYXRpb3x8KHQucGl4ZWxSYXRpbz13aW5kb3cucGl4ZWxSYXRpb3x8MSksdC5nbClyZXR1cm4gdC5nbDtpZih0LmNhbnZhcyYmKHQuY29udGFpbmVyPXQuY2FudmFzLnBhcmVudE5vZGUpLHQuY29udGFpbmVyKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdC5jb250YWluZXIpe3ZhciByPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodC5jb250YWluZXIpO2lmKCFyKXRocm93IEVycm9yKFwiRWxlbWVudCBcIit0LmNvbnRhaW5lcitcIiBpcyBub3QgZm91bmRcIik7dC5jb250YWluZXI9cn1hKHQuY29udGFpbmVyKT8odC5jYW52YXM9dC5jb250YWluZXIsdC5jb250YWluZXI9dC5jYW52YXMucGFyZW50Tm9kZSk6dC5jYW52YXN8fCh0LmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLHQuY29udGFpbmVyLmFwcGVuZENoaWxkKHQuY2FudmFzKSxpKHQpKX1lbHNlIHQuY2FudmFzfHwodC5jb250YWluZXI9ZG9jdW1lbnQuYm9keXx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHQuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksdC5jYW52YXMuc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwiLHQuY2FudmFzLnN0eWxlLnRvcD0wLHQuY2FudmFzLnN0eWxlLmxlZnQ9MCx0LmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0LmNhbnZhcyksaSh0KSk7aWYoIXQuZ2wpdHJ5e3QuZ2w9dC5jYW52YXMuZ2V0Q29udGV4dChcIndlYmdsXCIsdC5hdHRycyl9Y2F0Y2goZSl7dHJ5e3QuZ2w9dC5jYW52YXMuZ2V0Q29udGV4dChcImV4cGVyaW1lbnRhbC13ZWJnbFwiLHQuYXR0cnMpfWNhdGNoKGUpe3QuZ2w9dC5jYW52YXMuZ2V0Q29udGV4dChcIndlYmdsLWV4cGVyaW1lbnRhbFwiLHQuYXR0cnMpfX1yZXR1cm4gdC5nbH19LHtcInBpY2stYnktYWxpYXNcIjo0NTh9XSwzMTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2U/ZS5iaW5kKCk6dC5iaW5kQnVmZmVyKHQuRUxFTUVOVF9BUlJBWV9CVUZGRVIsbnVsbCk7dmFyIG49MHx0LmdldFBhcmFtZXRlcih0Lk1BWF9WRVJURVhfQVRUUklCUyk7aWYocil7aWYoci5sZW5ndGg+bil0aHJvdyBuZXcgRXJyb3IoXCJnbC12YW86IFRvbyBtYW55IHZlcnRleCBhdHRyaWJ1dGVzXCIpO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7KytpKXt2YXIgYT1yW2ldO2lmKGEuYnVmZmVyKXt2YXIgbz1hLmJ1ZmZlcixzPWEuc2l6ZXx8NCxsPWEudHlwZXx8dC5GTE9BVCxjPSEhYS5ub3JtYWxpemVkLHU9YS5zdHJpZGV8fDAsaD1hLm9mZnNldHx8MDtvLmJpbmQoKSx0LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpLHQudmVydGV4QXR0cmliUG9pbnRlcihpLHMsbCxjLHUsaCl9ZWxzZXtpZihcIm51bWJlclwiPT10eXBlb2YgYSl0LnZlcnRleEF0dHJpYjFmKGksYSk7ZWxzZSBpZigxPT09YS5sZW5ndGgpdC52ZXJ0ZXhBdHRyaWIxZihpLGFbMF0pO2Vsc2UgaWYoMj09PWEubGVuZ3RoKXQudmVydGV4QXR0cmliMmYoaSxhWzBdLGFbMV0pO2Vsc2UgaWYoMz09PWEubGVuZ3RoKXQudmVydGV4QXR0cmliM2YoaSxhWzBdLGFbMV0sYVsyXSk7ZWxzZXtpZig0IT09YS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiZ2wtdmFvOiBJbnZhbGlkIHZlcnRleCBhdHRyaWJ1dGVcIik7dC52ZXJ0ZXhBdHRyaWI0ZihpLGFbMF0sYVsxXSxhWzJdLGFbM10pfXQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpfX1mb3IoO2k8bjsrK2kpdC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSl9ZWxzZSBmb3IodC5iaW5kQnVmZmVyKHQuQVJSQVlfQlVGRkVSLG51bGwpLGk9MDtpPG47KytpKXQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpfX0se31dLDMxODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2RvLWJpbmQuanNcIik7ZnVuY3Rpb24gaSh0KXt0aGlzLmdsPXQsdGhpcy5fZWxlbWVudHM9bnVsbCx0aGlzLl9hdHRyaWJ1dGVzPW51bGwsdGhpcy5fZWxlbWVudHNUeXBlPXQuVU5TSUdORURfU0hPUlR9aS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe24odGhpcy5nbCx0aGlzLl9lbGVtZW50cyx0aGlzLl9hdHRyaWJ1dGVzKX0saS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9lbGVtZW50cz1lLHRoaXMuX2F0dHJpYnV0ZXM9dCx0aGlzLl9lbGVtZW50c1R5cGU9cnx8dGhpcy5nbC5VTlNJR05FRF9TSE9SVH0saS5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe30saS5wcm90b3R5cGUudW5iaW5kPWZ1bmN0aW9uKCl7fSxpLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQsZSxyKXtyPXJ8fDA7dmFyIG49dGhpcy5nbDt0aGlzLl9lbGVtZW50cz9uLmRyYXdFbGVtZW50cyh0LGUsdGhpcy5fZWxlbWVudHNUeXBlLHIpOm4uZHJhd0FycmF5cyh0LHIsZSl9LGUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGkodCl9fSx7XCIuL2RvLWJpbmQuanNcIjozMTd9XSwzMTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9kby1iaW5kLmpzXCIpO2Z1bmN0aW9uIGkodCxlLHIsbixpLGEpe3RoaXMubG9jYXRpb249dCx0aGlzLmRpbWVuc2lvbj1lLHRoaXMuYT1yLHRoaXMuYj1uLHRoaXMuYz1pLHRoaXMuZD1hfWZ1bmN0aW9uIGEodCxlLHIpe3RoaXMuZ2w9dCx0aGlzLl9leHQ9ZSx0aGlzLmhhbmRsZT1yLHRoaXMuX2F0dHJpYnM9W10sdGhpcy5fdXNlRWxlbWVudHM9ITEsdGhpcy5fZWxlbWVudHNUeXBlPXQuVU5TSUdORURfU0hPUlR9aS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0KXtzd2l0Y2godGhpcy5kaW1lbnNpb24pe2Nhc2UgMTp0LnZlcnRleEF0dHJpYjFmKHRoaXMubG9jYXRpb24sdGhpcy5hKTticmVhaztjYXNlIDI6dC52ZXJ0ZXhBdHRyaWIyZih0aGlzLmxvY2F0aW9uLHRoaXMuYSx0aGlzLmIpO2JyZWFrO2Nhc2UgMzp0LnZlcnRleEF0dHJpYjNmKHRoaXMubG9jYXRpb24sdGhpcy5hLHRoaXMuYix0aGlzLmMpO2JyZWFrO2Nhc2UgNDp0LnZlcnRleEF0dHJpYjRmKHRoaXMubG9jYXRpb24sdGhpcy5hLHRoaXMuYix0aGlzLmMsdGhpcy5kKX19LGEucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLl9leHQuYmluZFZlcnRleEFycmF5T0VTKHRoaXMuaGFuZGxlKTtmb3IodmFyIHQ9MDt0PHRoaXMuX2F0dHJpYnMubGVuZ3RoOysrdCl0aGlzLl9hdHRyaWJzW3RdLmJpbmQodGhpcy5nbCl9LGEucHJvdG90eXBlLnVuYmluZD1mdW5jdGlvbigpe3RoaXMuX2V4dC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCl9LGEucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLl9leHQuZGVsZXRlVmVydGV4QXJyYXlPRVModGhpcy5oYW5kbGUpfSxhLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuYmluZCgpLG4odGhpcy5nbCxlLHQpLHRoaXMudW5iaW5kKCksdGhpcy5fYXR0cmlicy5sZW5ndGg9MCx0KWZvcih2YXIgYT0wO2E8dC5sZW5ndGg7KythKXt2YXIgbz10W2FdO1wibnVtYmVyXCI9PXR5cGVvZiBvP3RoaXMuX2F0dHJpYnMucHVzaChuZXcgaShhLDEsbykpOkFycmF5LmlzQXJyYXkobykmJnRoaXMuX2F0dHJpYnMucHVzaChuZXcgaShhLG8ubGVuZ3RoLG9bMF0sb1sxXSxvWzJdLG9bM10pKX10aGlzLl91c2VFbGVtZW50cz0hIWUsdGhpcy5fZWxlbWVudHNUeXBlPXJ8fHRoaXMuZ2wuVU5TSUdORURfU0hPUlR9LGEucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxlLHIpe3I9cnx8MDt2YXIgbj10aGlzLmdsO3RoaXMuX3VzZUVsZW1lbnRzP24uZHJhd0VsZW1lbnRzKHQsZSx0aGlzLl9lbGVtZW50c1R5cGUscik6bi5kcmF3QXJyYXlzKHQscixlKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBhKHQsZSxlLmNyZWF0ZVZlcnRleEFycmF5T0VTKCkpfX0se1wiLi9kby1iaW5kLmpzXCI6MzE3fV0sMzIwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vbGliL3Zhby1uYXRpdmUuanNcIiksaT10KFwiLi9saWIvdmFvLWVtdWxhdGVkLmpzXCIpO2Z1bmN0aW9uIGEodCl7dGhpcy5iaW5kVmVydGV4QXJyYXlPRVM9dC5iaW5kVmVydGV4QXJyYXkuYmluZCh0KSx0aGlzLmNyZWF0ZVZlcnRleEFycmF5T0VTPXQuY3JlYXRlVmVydGV4QXJyYXkuYmluZCh0KSx0aGlzLmRlbGV0ZVZlcnRleEFycmF5T0VTPXQuZGVsZXRlVmVydGV4QXJyYXkuYmluZCh0KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHMsbD10LmNyZWF0ZVZlcnRleEFycmF5P25ldyBhKHQpOnQuZ2V0RXh0ZW5zaW9uKFwiT0VTX3ZlcnRleF9hcnJheV9vYmplY3RcIik7cmV0dXJuKHM9bD9uKHQsbCk6aSh0KSkudXBkYXRlKGUscixvKSxzfX0se1wiLi9saWIvdmFvLWVtdWxhdGVkLmpzXCI6MzE4LFwiLi9saWIvdmFvLW5hdGl2ZS5qc1wiOjMxOX1dLDMyMTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXStyWzBdLHRbMV09ZVsxXStyWzFdLHRbMl09ZVsyXStyWzJdLHR9fSx7fV0sMzIyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0WzBdLHRbMV0sdFsyXSksbz1uKGVbMF0sZVsxXSxlWzJdKTtpKHIsciksaShvLG8pO3ZhciBzPWEocixvKTtyZXR1cm4gcz4xPzA6TWF0aC5hY29zKHMpfTt2YXIgbj10KFwiLi9mcm9tVmFsdWVzXCIpLGk9dChcIi4vbm9ybWFsaXplXCIpLGE9dChcIi4vZG90XCIpfSx7XCIuL2RvdFwiOjMzMixcIi4vZnJvbVZhbHVlc1wiOjMzOCxcIi4vbm9ybWFsaXplXCI6MzQ5fV0sMzIzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5jZWlsKGVbMF0pLHRbMV09TWF0aC5jZWlsKGVbMV0pLHRbMl09TWF0aC5jZWlsKGVbMl0pLHR9fSx7fV0sMzI0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBGbG9hdDMyQXJyYXkoMyk7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGV9fSx7fV0sMzI1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHR9fSx7fV0sMzI2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSgzKTtyZXR1cm4gdFswXT0wLHRbMV09MCx0WzJdPTAsdH19LHt9XSwzMjc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbMF0scz1yWzFdLGw9clsyXTtyZXR1cm4gdFswXT1pKmwtYSpzLHRbMV09YSpvLW4qbCx0WzJdPW4qcy1pKm8sdH19LHt9XSwzMjg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dChcIi4vZGlzdGFuY2VcIil9LHtcIi4vZGlzdGFuY2VcIjozMjl9XSwzMjk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLXRbMF0sbj1lWzFdLXRbMV0saT1lWzJdLXRbMl07cmV0dXJuIE1hdGguc3FydChyKnIrbipuK2kqaSl9fSx7fV0sMzMwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoXCIuL2RpdmlkZVwiKX0se1wiLi9kaXZpZGVcIjozMzF9XSwzMzE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0vclswXSx0WzFdPWVbMV0vclsxXSx0WzJdPWVbMl0vclsyXSx0fX0se31dLDMzMjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXX19LHt9XSwzMzM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9MWUtNn0se31dLDMzNDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0saT10WzFdLGE9dFsyXSxvPWVbMF0scz1lWzFdLGw9ZVsyXTtyZXR1cm4gTWF0aC5hYnMoci1vKTw9bipNYXRoLm1heCgxLE1hdGguYWJzKHIpLE1hdGguYWJzKG8pKSYmTWF0aC5hYnMoaS1zKTw9bipNYXRoLm1heCgxLE1hdGguYWJzKGkpLE1hdGguYWJzKHMpKSYmTWF0aC5hYnMoYS1sKTw9bipNYXRoLm1heCgxLE1hdGguYWJzKGEpLE1hdGguYWJzKGwpKX07dmFyIG49dChcIi4vZXBzaWxvblwiKX0se1wiLi9lcHNpbG9uXCI6MzMzfV0sMzM1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl19fSx7fV0sMzM2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5mbG9vcihlWzBdKSx0WzFdPU1hdGguZmxvb3IoZVsxXSksdFsyXT1NYXRoLmZsb29yKGVbMl0pLHR9fSx7fV0sMzM3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksYSxvKXt2YXIgcyxsO2V8fChlPTMpO3J8fChyPTApO2w9aT9NYXRoLm1pbihpKmUrcix0Lmxlbmd0aCk6dC5sZW5ndGg7Zm9yKHM9cjtzPGw7cys9ZSluWzBdPXRbc10sblsxXT10W3MrMV0sblsyXT10W3MrMl0sYShuLG4sbyksdFtzXT1uWzBdLHRbcysxXT1uWzFdLHRbcysyXT1uWzJdO3JldHVybiB0fTt2YXIgbj10KFwiLi9jcmVhdGVcIikoKX0se1wiLi9jcmVhdGVcIjozMjZ9XSwzMzg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW5ldyBGbG9hdDMyQXJyYXkoMyk7cmV0dXJuIG5bMF09dCxuWzFdPWUsblsyXT1yLG59fSx7fV0sMzM5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXtFUFNJTE9OOnQoXCIuL2Vwc2lsb25cIiksY3JlYXRlOnQoXCIuL2NyZWF0ZVwiKSxjbG9uZTp0KFwiLi9jbG9uZVwiKSxhbmdsZTp0KFwiLi9hbmdsZVwiKSxmcm9tVmFsdWVzOnQoXCIuL2Zyb21WYWx1ZXNcIiksY29weTp0KFwiLi9jb3B5XCIpLHNldDp0KFwiLi9zZXRcIiksZXF1YWxzOnQoXCIuL2VxdWFsc1wiKSxleGFjdEVxdWFsczp0KFwiLi9leGFjdEVxdWFsc1wiKSxhZGQ6dChcIi4vYWRkXCIpLHN1YnRyYWN0OnQoXCIuL3N1YnRyYWN0XCIpLHN1Yjp0KFwiLi9zdWJcIiksbXVsdGlwbHk6dChcIi4vbXVsdGlwbHlcIiksbXVsOnQoXCIuL211bFwiKSxkaXZpZGU6dChcIi4vZGl2aWRlXCIpLGRpdjp0KFwiLi9kaXZcIiksbWluOnQoXCIuL21pblwiKSxtYXg6dChcIi4vbWF4XCIpLGZsb29yOnQoXCIuL2Zsb29yXCIpLGNlaWw6dChcIi4vY2VpbFwiKSxyb3VuZDp0KFwiLi9yb3VuZFwiKSxzY2FsZTp0KFwiLi9zY2FsZVwiKSxzY2FsZUFuZEFkZDp0KFwiLi9zY2FsZUFuZEFkZFwiKSxkaXN0YW5jZTp0KFwiLi9kaXN0YW5jZVwiKSxkaXN0OnQoXCIuL2Rpc3RcIiksc3F1YXJlZERpc3RhbmNlOnQoXCIuL3NxdWFyZWREaXN0YW5jZVwiKSxzcXJEaXN0OnQoXCIuL3NxckRpc3RcIiksbGVuZ3RoOnQoXCIuL2xlbmd0aFwiKSxsZW46dChcIi4vbGVuXCIpLHNxdWFyZWRMZW5ndGg6dChcIi4vc3F1YXJlZExlbmd0aFwiKSxzcXJMZW46dChcIi4vc3FyTGVuXCIpLG5lZ2F0ZTp0KFwiLi9uZWdhdGVcIiksaW52ZXJzZTp0KFwiLi9pbnZlcnNlXCIpLG5vcm1hbGl6ZTp0KFwiLi9ub3JtYWxpemVcIiksZG90OnQoXCIuL2RvdFwiKSxjcm9zczp0KFwiLi9jcm9zc1wiKSxsZXJwOnQoXCIuL2xlcnBcIikscmFuZG9tOnQoXCIuL3JhbmRvbVwiKSx0cmFuc2Zvcm1NYXQ0OnQoXCIuL3RyYW5zZm9ybU1hdDRcIiksdHJhbnNmb3JtTWF0Mzp0KFwiLi90cmFuc2Zvcm1NYXQzXCIpLHRyYW5zZm9ybVF1YXQ6dChcIi4vdHJhbnNmb3JtUXVhdFwiKSxyb3RhdGVYOnQoXCIuL3JvdGF0ZVhcIikscm90YXRlWTp0KFwiLi9yb3RhdGVZXCIpLHJvdGF0ZVo6dChcIi4vcm90YXRlWlwiKSxmb3JFYWNoOnQoXCIuL2ZvckVhY2hcIil9fSx7XCIuL2FkZFwiOjMyMSxcIi4vYW5nbGVcIjozMjIsXCIuL2NlaWxcIjozMjMsXCIuL2Nsb25lXCI6MzI0LFwiLi9jb3B5XCI6MzI1LFwiLi9jcmVhdGVcIjozMjYsXCIuL2Nyb3NzXCI6MzI3LFwiLi9kaXN0XCI6MzI4LFwiLi9kaXN0YW5jZVwiOjMyOSxcIi4vZGl2XCI6MzMwLFwiLi9kaXZpZGVcIjozMzEsXCIuL2RvdFwiOjMzMixcIi4vZXBzaWxvblwiOjMzMyxcIi4vZXF1YWxzXCI6MzM0LFwiLi9leGFjdEVxdWFsc1wiOjMzNSxcIi4vZmxvb3JcIjozMzYsXCIuL2ZvckVhY2hcIjozMzcsXCIuL2Zyb21WYWx1ZXNcIjozMzgsXCIuL2ludmVyc2VcIjozNDAsXCIuL2xlblwiOjM0MSxcIi4vbGVuZ3RoXCI6MzQyLFwiLi9sZXJwXCI6MzQzLFwiLi9tYXhcIjozNDQsXCIuL21pblwiOjM0NSxcIi4vbXVsXCI6MzQ2LFwiLi9tdWx0aXBseVwiOjM0NyxcIi4vbmVnYXRlXCI6MzQ4LFwiLi9ub3JtYWxpemVcIjozNDksXCIuL3JhbmRvbVwiOjM1MCxcIi4vcm90YXRlWFwiOjM1MSxcIi4vcm90YXRlWVwiOjM1MixcIi4vcm90YXRlWlwiOjM1MyxcIi4vcm91bmRcIjozNTQsXCIuL3NjYWxlXCI6MzU1LFwiLi9zY2FsZUFuZEFkZFwiOjM1NixcIi4vc2V0XCI6MzU3LFwiLi9zcXJEaXN0XCI6MzU4LFwiLi9zcXJMZW5cIjozNTksXCIuL3NxdWFyZWREaXN0YW5jZVwiOjM2MCxcIi4vc3F1YXJlZExlbmd0aFwiOjM2MSxcIi4vc3ViXCI6MzYyLFwiLi9zdWJ0cmFjdFwiOjM2MyxcIi4vdHJhbnNmb3JtTWF0M1wiOjM2NCxcIi4vdHJhbnNmb3JtTWF0NFwiOjM2NSxcIi4vdHJhbnNmb3JtUXVhdFwiOjM2Nn1dLDM0MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPTEvZVswXSx0WzFdPTEvZVsxXSx0WzJdPTEvZVsyXSx0fX0se31dLDM0MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KFwiLi9sZW5ndGhcIil9LHtcIi4vbGVuZ3RoXCI6MzQyfV0sMzQyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXTtyZXR1cm4gTWF0aC5zcXJ0KGUqZStyKnIrbipuKX19LHt9XSwzNDM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZVswXSxhPWVbMV0sbz1lWzJdO3JldHVybiB0WzBdPWkrbiooclswXS1pKSx0WzFdPWErbiooclsxXS1hKSx0WzJdPW8rbiooclsyXS1vKSx0fX0se31dLDM0NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09TWF0aC5tYXgoZVswXSxyWzBdKSx0WzFdPU1hdGgubWF4KGVbMV0sclsxXSksdFsyXT1NYXRoLm1heChlWzJdLHJbMl0pLHR9fSx7fV0sMzQ1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1pbihlWzBdLHJbMF0pLHRbMV09TWF0aC5taW4oZVsxXSxyWzFdKSx0WzJdPU1hdGgubWluKGVbMl0sclsyXSksdH19LHt9XSwzNDY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dChcIi4vbXVsdGlwbHlcIil9LHtcIi4vbXVsdGlwbHlcIjozNDd9XSwzNDc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qclswXSx0WzFdPWVbMV0qclsxXSx0WzJdPWVbMl0qclsyXSx0fX0se31dLDM0ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPS1lWzBdLHRbMV09LWVbMV0sdFsyXT0tZVsyXSx0fX0se31dLDM0OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPXIqcituKm4raSppO2E+MCYmKGE9MS9NYXRoLnNxcnQoYSksdFswXT1lWzBdKmEsdFsxXT1lWzFdKmEsdFsyXT1lWzJdKmEpO3JldHVybiB0fX0se31dLDM1MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2U9ZXx8MTt2YXIgcj0yKk1hdGgucmFuZG9tKCkqTWF0aC5QSSxuPTIqTWF0aC5yYW5kb20oKS0xLGk9TWF0aC5zcXJ0KDEtbipuKSplO3JldHVybiB0WzBdPU1hdGguY29zKHIpKmksdFsxXT1NYXRoLnNpbihyKSppLHRbMl09biplLHR9fSx7fV0sMzUxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXJbMV0sYT1yWzJdLG89ZVsxXS1pLHM9ZVsyXS1hLGw9TWF0aC5zaW4obiksYz1NYXRoLmNvcyhuKTtyZXR1cm4gdFswXT1lWzBdLHRbMV09aStvKmMtcypsLHRbMl09YStvKmwrcypjLHR9fSx7fV0sMzUyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXJbMF0sYT1yWzJdLG89ZVswXS1pLHM9ZVsyXS1hLGw9TWF0aC5zaW4obiksYz1NYXRoLmNvcyhuKTtyZXR1cm4gdFswXT1pK3MqbCtvKmMsdFsxXT1lWzFdLHRbMl09YStzKmMtbypsLHR9fSx7fV0sMzUzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXJbMF0sYT1yWzFdLG89ZVswXS1pLHM9ZVsxXS1hLGw9TWF0aC5zaW4obiksYz1NYXRoLmNvcyhuKTtyZXR1cm4gdFswXT1pK28qYy1zKmwsdFsxXT1hK28qbCtzKmMsdFsyXT1lWzJdLHR9fSx7fV0sMzU0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5yb3VuZChlWzBdKSx0WzFdPU1hdGgucm91bmQoZVsxXSksdFsyXT1NYXRoLnJvdW5kKGVbMl0pLHR9fSx7fV0sMzU1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnIsdFsxXT1lWzFdKnIsdFsyXT1lWzJdKnIsdH19LHt9XSwzNTY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRbMF09ZVswXStyWzBdKm4sdFsxXT1lWzFdK3JbMV0qbix0WzJdPWVbMl0rclsyXSpuLHR9fSx7fV0sMzU3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0WzBdPWUsdFsxXT1yLHRbMl09bix0fX0se31dLDM1ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KFwiLi9zcXVhcmVkRGlzdGFuY2VcIil9LHtcIi4vc3F1YXJlZERpc3RhbmNlXCI6MzYwfV0sMzU5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoXCIuL3NxdWFyZWRMZW5ndGhcIil9LHtcIi4vc3F1YXJlZExlbmd0aFwiOjM2MX1dLDM2MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0tdFswXSxuPWVbMV0tdFsxXSxpPWVbMl0tdFsyXTtyZXR1cm4gcipyK24qbitpKml9fSx7fV0sMzYxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXTtyZXR1cm4gZSplK3IqcituKm59fSx7fV0sMzYyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoXCIuL3N1YnRyYWN0XCIpfSx7XCIuL3N1YnRyYWN0XCI6MzYzfV0sMzYzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdLXJbMF0sdFsxXT1lWzFdLXJbMV0sdFsyXT1lWzJdLXJbMl0sdH19LHt9XSwzNjQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXTtyZXR1cm4gdFswXT1uKnJbMF0raSpyWzNdK2Eqcls2XSx0WzFdPW4qclsxXStpKnJbNF0rYSpyWzddLHRbMl09bipyWzJdK2kqcls1XSthKnJbOF0sdH19LHt9XSwzNjU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbM10qbityWzddKmkrclsxMV0qYStyWzE1XTtyZXR1cm4gbz1vfHwxLHRbMF09KHJbMF0qbityWzRdKmkrcls4XSphK3JbMTJdKS9vLHRbMV09KHJbMV0qbityWzVdKmkrcls5XSphK3JbMTNdKS9vLHRbMl09KHJbMl0qbityWzZdKmkrclsxMF0qYStyWzE0XSkvbyx0fX0se31dLDM2NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89clswXSxzPXJbMV0sbD1yWzJdLGM9clszXSx1PWMqbitzKmEtbCppLGg9YyppK2wqbi1vKmEsZj1jKmErbyppLXMqbixwPS1vKm4tcyppLWwqYTtyZXR1cm4gdFswXT11KmMrcCotbytoKi1sLWYqLXMsdFsxXT1oKmMrcCotcytmKi1vLXUqLWwsdFsyXT1mKmMrcCotbCt1Ki1zLWgqLW8sdH19LHt9XSwzNjc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0rclswXSx0WzFdPWVbMV0rclsxXSx0WzJdPWVbMl0rclsyXSx0WzNdPWVbM10rclszXSx0fX0se31dLDM2ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgRmxvYXQzMkFycmF5KDQpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZX19LHt9XSwzNjk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHR9fSx7fV0sMzcwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSg0KTtyZXR1cm4gdFswXT0wLHRbMV09MCx0WzJdPTAsdFszXT0wLHR9fSx7fV0sMzcxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdLGk9ZVsyXS10WzJdLGE9ZVszXS10WzNdO3JldHVybiBNYXRoLnNxcnQocipyK24qbitpKmkrYSphKX19LHt9XSwzNzI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0vclswXSx0WzFdPWVbMV0vclsxXSx0WzJdPWVbMl0vclsyXSx0WzNdPWVbM10vclszXSx0fX0se31dLDM3MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXSt0WzNdKmVbM119fSx7fV0sMzc0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW5ldyBGbG9hdDMyQXJyYXkoNCk7cmV0dXJuIGlbMF09dCxpWzFdPWUsaVsyXT1yLGlbM109bixpfX0se31dLDM3NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17Y3JlYXRlOnQoXCIuL2NyZWF0ZVwiKSxjbG9uZTp0KFwiLi9jbG9uZVwiKSxmcm9tVmFsdWVzOnQoXCIuL2Zyb21WYWx1ZXNcIiksY29weTp0KFwiLi9jb3B5XCIpLHNldDp0KFwiLi9zZXRcIiksYWRkOnQoXCIuL2FkZFwiKSxzdWJ0cmFjdDp0KFwiLi9zdWJ0cmFjdFwiKSxtdWx0aXBseTp0KFwiLi9tdWx0aXBseVwiKSxkaXZpZGU6dChcIi4vZGl2aWRlXCIpLG1pbjp0KFwiLi9taW5cIiksbWF4OnQoXCIuL21heFwiKSxzY2FsZTp0KFwiLi9zY2FsZVwiKSxzY2FsZUFuZEFkZDp0KFwiLi9zY2FsZUFuZEFkZFwiKSxkaXN0YW5jZTp0KFwiLi9kaXN0YW5jZVwiKSxzcXVhcmVkRGlzdGFuY2U6dChcIi4vc3F1YXJlZERpc3RhbmNlXCIpLGxlbmd0aDp0KFwiLi9sZW5ndGhcIiksc3F1YXJlZExlbmd0aDp0KFwiLi9zcXVhcmVkTGVuZ3RoXCIpLG5lZ2F0ZTp0KFwiLi9uZWdhdGVcIiksaW52ZXJzZTp0KFwiLi9pbnZlcnNlXCIpLG5vcm1hbGl6ZTp0KFwiLi9ub3JtYWxpemVcIiksZG90OnQoXCIuL2RvdFwiKSxsZXJwOnQoXCIuL2xlcnBcIikscmFuZG9tOnQoXCIuL3JhbmRvbVwiKSx0cmFuc2Zvcm1NYXQ0OnQoXCIuL3RyYW5zZm9ybU1hdDRcIiksdHJhbnNmb3JtUXVhdDp0KFwiLi90cmFuc2Zvcm1RdWF0XCIpfX0se1wiLi9hZGRcIjozNjcsXCIuL2Nsb25lXCI6MzY4LFwiLi9jb3B5XCI6MzY5LFwiLi9jcmVhdGVcIjozNzAsXCIuL2Rpc3RhbmNlXCI6MzcxLFwiLi9kaXZpZGVcIjozNzIsXCIuL2RvdFwiOjM3MyxcIi4vZnJvbVZhbHVlc1wiOjM3NCxcIi4vaW52ZXJzZVwiOjM3NixcIi4vbGVuZ3RoXCI6Mzc3LFwiLi9sZXJwXCI6Mzc4LFwiLi9tYXhcIjozNzksXCIuL21pblwiOjM4MCxcIi4vbXVsdGlwbHlcIjozODEsXCIuL25lZ2F0ZVwiOjM4MixcIi4vbm9ybWFsaXplXCI6MzgzLFwiLi9yYW5kb21cIjozODQsXCIuL3NjYWxlXCI6Mzg1LFwiLi9zY2FsZUFuZEFkZFwiOjM4NixcIi4vc2V0XCI6Mzg3LFwiLi9zcXVhcmVkRGlzdGFuY2VcIjozODgsXCIuL3NxdWFyZWRMZW5ndGhcIjozODksXCIuL3N1YnRyYWN0XCI6MzkwLFwiLi90cmFuc2Zvcm1NYXQ0XCI6MzkxLFwiLi90cmFuc2Zvcm1RdWF0XCI6MzkyfV0sMzc2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09MS9lWzBdLHRbMV09MS9lWzFdLHRbMl09MS9lWzJdLHRbM109MS9lWzNdLHR9fSx7fV0sMzc3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXSxpPXRbM107cmV0dXJuIE1hdGguc3FydChlKmUrcipyK24qbitpKmkpfX0se31dLDM3ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lWzBdLGE9ZVsxXSxvPWVbMl0scz1lWzNdO3JldHVybiB0WzBdPWkrbiooclswXS1pKSx0WzFdPWErbiooclsxXS1hKSx0WzJdPW8rbiooclsyXS1vKSx0WzNdPXMrbiooclszXS1zKSx0fX0se31dLDM3OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09TWF0aC5tYXgoZVswXSxyWzBdKSx0WzFdPU1hdGgubWF4KGVbMV0sclsxXSksdFsyXT1NYXRoLm1heChlWzJdLHJbMl0pLHRbM109TWF0aC5tYXgoZVszXSxyWzNdKSx0fX0se31dLDM4MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09TWF0aC5taW4oZVswXSxyWzBdKSx0WzFdPU1hdGgubWluKGVbMV0sclsxXSksdFsyXT1NYXRoLm1pbihlWzJdLHJbMl0pLHRbM109TWF0aC5taW4oZVszXSxyWzNdKSx0fX0se31dLDM4MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXSpyWzBdLHRbMV09ZVsxXSpyWzFdLHRbMl09ZVsyXSpyWzJdLHRbM109ZVszXSpyWzNdLHR9fSx7fV0sMzgyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09LWVbMF0sdFsxXT0tZVsxXSx0WzJdPS1lWzJdLHRbM109LWVbM10sdH19LHt9XSwzODM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89cipyK24qbitpKmkrYSphO28+MCYmKG89MS9NYXRoLnNxcnQobyksdFswXT1yKm8sdFsxXT1uKm8sdFsyXT1pKm8sdFszXT1hKm8pO3JldHVybiB0fX0se31dLDM4NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuL25vcm1hbGl6ZVwiKSxpPXQoXCIuL3NjYWxlXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBlPWV8fDEsdFswXT1NYXRoLnJhbmRvbSgpLHRbMV09TWF0aC5yYW5kb20oKSx0WzJdPU1hdGgucmFuZG9tKCksdFszXT1NYXRoLnJhbmRvbSgpLG4odCx0KSxpKHQsdCxlKSx0fX0se1wiLi9ub3JtYWxpemVcIjozODMsXCIuL3NjYWxlXCI6Mzg1fV0sMzg1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnIsdFsxXT1lWzFdKnIsdFsyXT1lWzJdKnIsdFszXT1lWzNdKnIsdH19LHt9XSwzODY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRbMF09ZVswXStyWzBdKm4sdFsxXT1lWzFdK3JbMV0qbix0WzJdPWVbMl0rclsyXSpuLHRbM109ZVszXStyWzNdKm4sdH19LHt9XSwzODc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdFswXT1lLHRbMV09cix0WzJdPW4sdFszXT1pLHR9fSx7fV0sMzg4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdLGk9ZVsyXS10WzJdLGE9ZVszXS10WzNdO3JldHVybiByKnIrbipuK2kqaSthKmF9fSx7fV0sMzg5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXSxpPXRbM107cmV0dXJuIGUqZStyKnIrbipuK2kqaX19LHt9XSwzOTA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0tclswXSx0WzFdPWVbMV0tclsxXSx0WzJdPWVbMl0tclsyXSx0WzNdPWVbM10tclszXSx0fX0se31dLDM5MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXTtyZXR1cm4gdFswXT1yWzBdKm4rcls0XSppK3JbOF0qYStyWzEyXSpvLHRbMV09clsxXSpuK3JbNV0qaStyWzldKmErclsxM10qbyx0WzJdPXJbMl0qbityWzZdKmkrclsxMF0qYStyWzE0XSpvLHRbM109clszXSpuK3JbN10qaStyWzExXSphK3JbMTVdKm8sdH19LHt9XSwzOTI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbMF0scz1yWzFdLGw9clsyXSxjPXJbM10sdT1jKm4rcyphLWwqaSxoPWMqaStsKm4tbyphLGY9YyphK28qaS1zKm4scD0tbypuLXMqaS1sKmE7cmV0dXJuIHRbMF09dSpjK3AqLW8raCotbC1mKi1zLHRbMV09aCpjK3AqLXMrZiotby11Ki1sLHRbMl09ZipjK3AqLWwrdSotcy1oKi1vLHRbM109ZVszXSx0fX0se31dLDM5MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtyZXR1cm4gblswXT1hLG5bMV09cixuWzJdPWUsblszXT10LGlbMF19O3ZhciBuPW5ldyBVaW50OEFycmF5KDQpLGk9bmV3IEZsb2F0MzJBcnJheShuLmJ1ZmZlcil9LHt9XSwzOTQ6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiZ2xzbC10b2tlbml6ZXJcIiksaT10KFwiYXRvYi1saXRlXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9QXJyYXkuaXNBcnJheSh0KT90Om4odCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgYT1lW3JdO2lmKFwicHJlcHJvY2Vzc29yXCI9PT1hLnR5cGUpe3ZhciBvPWEuZGF0YS5tYXRjaCgvXFwjZGVmaW5lXFxzK1NIQURFUl9OQU1FKF9CNjQpP1xccysoLispJC8pO2lmKG8mJm9bMl0pe3ZhciBzPW9bMV0sbD1vWzJdO3JldHVybihzP2kobCk6bCkudHJpbSgpfX19fX0se1wiYXRvYi1saXRlXCI6NjMsXCJnbHNsLXRva2VuaXplclwiOjQwMX1dLDM5NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLGssQT0wLFQ9MCxNPWwsUz1bXSxFPVtdLEM9MSxMPTAsej0wLE89ITEsST0hMSxEPVwiXCIsUD1hLFI9bjtcIjMwMCBlc1wiPT09KHQ9dHx8e30pLnZlcnNpb24mJihQPXMsUj1vKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEU9W10sbnVsbCE9PXQ/ZnVuY3Rpb24odCl7dmFyIHI7QT0wLGs9KEQrPXQpLmxlbmd0aDtmb3IoO2U9RFtBXSxBPGs7KXtzd2l0Y2gocj1BLE0pe2Nhc2UgdTpBPVYoKTticmVhaztjYXNlIGg6Y2FzZSBmOkE9aigpO2JyZWFrO2Nhc2UgcDpBPVUoKTticmVhaztjYXNlIGQ6QT1HKCk7YnJlYWs7Y2FzZSBfOkE9SCgpO2JyZWFrO2Nhc2UgZzpBPVkoKTticmVhaztjYXNlIGM6QT1XKCk7YnJlYWs7Y2FzZSB4OkE9TigpO2JyZWFrO2Nhc2UgbDpBPUIoKX1pZihyIT09QSlzd2l0Y2goRFtyXSl7Y2FzZVwiXFxuXCI6TD0wLCsrQzticmVhaztkZWZhdWx0OisrTH19cmV0dXJuIFQrPUEsRD1ELnNsaWNlKEEpLEV9KHQucmVwbGFjZT90LnJlcGxhY2UoL1xcclxcbi9nLFwiXFxuXCIpOnQpOmZ1bmN0aW9uKHQpe1MubGVuZ3RoJiZGKFMuam9pbihcIlwiKSk7cmV0dXJuIE09YixGKFwiKGVvZilcIiksRX0oKX07ZnVuY3Rpb24gRih0KXt0Lmxlbmd0aCYmRS5wdXNoKHt0eXBlOndbTV0sZGF0YTp0LHBvc2l0aW9uOnosbGluZTpDLGNvbHVtbjpMfSl9ZnVuY3Rpb24gQigpe3JldHVybiBTPVMubGVuZ3RoP1tdOlMsXCIvXCI9PT1yJiZcIipcIj09PWU/KHo9VCtBLTEsTT11LHI9ZSxBKzEpOlwiL1wiPT09ciYmXCIvXCI9PT1lPyh6PVQrQS0xLE09aCxyPWUsQSsxKTpcIiNcIj09PWU/KE09Zix6PVQrQSxBKTovXFxzLy50ZXN0KGUpPyhNPXgsej1UK0EsQSk6KE89L1xcZC8udGVzdChlKSxJPS9bXlxcd19dLy50ZXN0KGUpLHo9VCtBLE09Tz9kOkk/cDpjLEEpfWZ1bmN0aW9uIE4oKXtyZXR1cm4vW15cXHNdL2cudGVzdChlKT8oRihTLmpvaW4oXCJcIikpLE09bCxBKTooUy5wdXNoKGUpLHI9ZSxBKzEpfWZ1bmN0aW9uIGooKXtyZXR1cm5cIlxcclwiIT09ZSYmXCJcXG5cIiE9PWV8fFwiXFxcXFwiPT09cj8oUy5wdXNoKGUpLHI9ZSxBKzEpOihGKFMuam9pbihcIlwiKSksTT1sLEEpfWZ1bmN0aW9uIFYoKXtyZXR1cm5cIi9cIj09PWUmJlwiKlwiPT09cj8oUy5wdXNoKGUpLEYoUy5qb2luKFwiXCIpKSxNPWwsQSsxKTooUy5wdXNoKGUpLHI9ZSxBKzEpfWZ1bmN0aW9uIFUoKXtpZihcIi5cIj09PXImJi9cXGQvLnRlc3QoZSkpcmV0dXJuIE09ZyxBO2lmKFwiL1wiPT09ciYmXCIqXCI9PT1lKXJldHVybiBNPXUsQTtpZihcIi9cIj09PXImJlwiL1wiPT09ZSlyZXR1cm4gTT1oLEE7aWYoXCIuXCI9PT1lJiZTLmxlbmd0aCl7Zm9yKDtxKFMpOyk7cmV0dXJuIE09ZyxBfWlmKFwiO1wiPT09ZXx8XCIpXCI9PT1lfHxcIihcIj09PWUpe2lmKFMubGVuZ3RoKWZvcig7cShTKTspO3JldHVybiBGKGUpLE09bCxBKzF9dmFyIHQ9Mj09PVMubGVuZ3RoJiZcIj1cIiE9PWU7aWYoL1tcXHdfXFxkXFxzXS8udGVzdChlKXx8dCl7Zm9yKDtxKFMpOyk7cmV0dXJuIE09bCxBfXJldHVybiBTLnB1c2goZSkscj1lLEErMX1mdW5jdGlvbiBxKHQpe2Zvcih2YXIgZSxyLG49MDs7KXtpZihlPWkuaW5kZXhPZih0LnNsaWNlKDAsdC5sZW5ndGgrbikuam9pbihcIlwiKSkscj1pW2VdLC0xPT09ZSl7aWYobi0tK3QubGVuZ3RoPjApY29udGludWU7cj10LnNsaWNlKDAsMSkuam9pbihcIlwiKX1yZXR1cm4gRihyKSx6Kz1yLmxlbmd0aCwoUz1TLnNsaWNlKHIubGVuZ3RoKSkubGVuZ3RofX1mdW5jdGlvbiBIKCl7cmV0dXJuL1teYS1mQS1GMC05XS8udGVzdChlKT8oRihTLmpvaW4oXCJcIikpLE09bCxBKTooUy5wdXNoKGUpLHI9ZSxBKzEpfWZ1bmN0aW9uIEcoKXtyZXR1cm5cIi5cIj09PWU/KFMucHVzaChlKSxNPWcscj1lLEErMSk6L1tlRV0vLnRlc3QoZSk/KFMucHVzaChlKSxNPWcscj1lLEErMSk6XCJ4XCI9PT1lJiYxPT09Uy5sZW5ndGgmJlwiMFwiPT09U1swXT8oTT1fLFMucHVzaChlKSxyPWUsQSsxKTovW15cXGRdLy50ZXN0KGUpPyhGKFMuam9pbihcIlwiKSksTT1sLEEpOihTLnB1c2goZSkscj1lLEErMSl9ZnVuY3Rpb24gWSgpe3JldHVyblwiZlwiPT09ZSYmKFMucHVzaChlKSxyPWUsQSs9MSksL1tlRV0vLnRlc3QoZSk/KFMucHVzaChlKSxyPWUsQSsxKTpcIi1cIj09PWUmJi9bZUVdLy50ZXN0KHIpPyhTLnB1c2goZSkscj1lLEErMSk6L1teXFxkXS8udGVzdChlKT8oRihTLmpvaW4oXCJcIikpLE09bCxBKTooUy5wdXNoKGUpLHI9ZSxBKzEpfWZ1bmN0aW9uIFcoKXtpZigvW15cXGRcXHdfXS8udGVzdChlKSl7dmFyIHQ9Uy5qb2luKFwiXCIpO3JldHVybiBNPVIuaW5kZXhPZih0KT4tMT95OlAuaW5kZXhPZih0KT4tMT9tOnYsRihTLmpvaW4oXCJcIikpLE09bCxBfXJldHVybiBTLnB1c2goZSkscj1lLEErMX19O3ZhciBuPXQoXCIuL2xpYi9saXRlcmFsc1wiKSxpPXQoXCIuL2xpYi9vcGVyYXRvcnNcIiksYT10KFwiLi9saWIvYnVpbHRpbnNcIiksbz10KFwiLi9saWIvbGl0ZXJhbHMtMzAwZXNcIikscz10KFwiLi9saWIvYnVpbHRpbnMtMzAwZXNcIiksbD05OTksYz05OTk5LHU9MCxoPTEsZj0yLHA9MyxkPTQsZz01LHY9NixtPTcseT04LHg9OSxiPTEwLF89MTEsdz1bXCJibG9jay1jb21tZW50XCIsXCJsaW5lLWNvbW1lbnRcIixcInByZXByb2Nlc3NvclwiLFwib3BlcmF0b3JcIixcImludGVnZXJcIixcImZsb2F0XCIsXCJpZGVudFwiLFwiYnVpbHRpblwiLFwia2V5d29yZFwiLFwid2hpdGVzcGFjZVwiLFwiZW9mXCIsXCJpbnRlZ2VyXCJdfSx7XCIuL2xpYi9idWlsdGluc1wiOjM5NyxcIi4vbGliL2J1aWx0aW5zLTMwMGVzXCI6Mzk2LFwiLi9saWIvbGl0ZXJhbHNcIjozOTksXCIuL2xpYi9saXRlcmFscy0zMDBlc1wiOjM5OCxcIi4vbGliL29wZXJhdG9yc1wiOjQwMH1dLDM5NjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuL2J1aWx0aW5zXCIpO249bi5zbGljZSgpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hL14oZ2xcXF98dGV4dHVyZSkvLnRlc3QodCl9KSxlLmV4cG9ydHM9bi5jb25jYXQoW1wiZ2xfVmVydGV4SURcIixcImdsX0luc3RhbmNlSURcIixcImdsX1Bvc2l0aW9uXCIsXCJnbF9Qb2ludFNpemVcIixcImdsX0ZyYWdDb29yZFwiLFwiZ2xfRnJvbnRGYWNpbmdcIixcImdsX0ZyYWdEZXB0aFwiLFwiZ2xfUG9pbnRDb29yZFwiLFwiZ2xfTWF4VmVydGV4QXR0cmlic1wiLFwiZ2xfTWF4VmVydGV4VW5pZm9ybVZlY3RvcnNcIixcImdsX01heFZlcnRleE91dHB1dFZlY3RvcnNcIixcImdsX01heEZyYWdtZW50SW5wdXRWZWN0b3JzXCIsXCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0c1wiLFwiZ2xfTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0c1wiLFwiZ2xfTWF4VGV4dHVyZUltYWdlVW5pdHNcIixcImdsX01heEZyYWdtZW50VW5pZm9ybVZlY3RvcnNcIixcImdsX01heERyYXdCdWZmZXJzXCIsXCJnbF9NaW5Qcm9ncmFtVGV4ZWxPZmZzZXRcIixcImdsX01heFByb2dyYW1UZXhlbE9mZnNldFwiLFwiZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnNcIixcImdsX0RlcHRoUmFuZ2VcIixcInRydW5jXCIsXCJyb3VuZFwiLFwicm91bmRFdmVuXCIsXCJpc25hblwiLFwiaXNpbmZcIixcImZsb2F0Qml0c1RvSW50XCIsXCJmbG9hdEJpdHNUb1VpbnRcIixcImludEJpdHNUb0Zsb2F0XCIsXCJ1aW50Qml0c1RvRmxvYXRcIixcInBhY2tTbm9ybTJ4MTZcIixcInVucGFja1Nub3JtMngxNlwiLFwicGFja1Vub3JtMngxNlwiLFwidW5wYWNrVW5vcm0yeDE2XCIsXCJwYWNrSGFsZjJ4MTZcIixcInVucGFja0hhbGYyeDE2XCIsXCJvdXRlclByb2R1Y3RcIixcInRyYW5zcG9zZVwiLFwiZGV0ZXJtaW5hbnRcIixcImludmVyc2VcIixcInRleHR1cmVcIixcInRleHR1cmVTaXplXCIsXCJ0ZXh0dXJlUHJvalwiLFwidGV4dHVyZUxvZFwiLFwidGV4dHVyZU9mZnNldFwiLFwidGV4ZWxGZXRjaFwiLFwidGV4ZWxGZXRjaE9mZnNldFwiLFwidGV4dHVyZVByb2pPZmZzZXRcIixcInRleHR1cmVMb2RPZmZzZXRcIixcInRleHR1cmVQcm9qTG9kXCIsXCJ0ZXh0dXJlUHJvakxvZE9mZnNldFwiLFwidGV4dHVyZUdyYWRcIixcInRleHR1cmVHcmFkT2Zmc2V0XCIsXCJ0ZXh0dXJlUHJvakdyYWRcIixcInRleHR1cmVQcm9qR3JhZE9mZnNldFwiXSl9LHtcIi4vYnVpbHRpbnNcIjozOTd9XSwzOTc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9W1wiYWJzXCIsXCJhY29zXCIsXCJhbGxcIixcImFueVwiLFwiYXNpblwiLFwiYXRhblwiLFwiY2VpbFwiLFwiY2xhbXBcIixcImNvc1wiLFwiY3Jvc3NcIixcImRGZHhcIixcImRGZHlcIixcImRlZ3JlZXNcIixcImRpc3RhbmNlXCIsXCJkb3RcIixcImVxdWFsXCIsXCJleHBcIixcImV4cDJcIixcImZhY2Vmb3J3YXJkXCIsXCJmbG9vclwiLFwiZnJhY3RcIixcImdsX0JhY2tDb2xvclwiLFwiZ2xfQmFja0xpZ2h0TW9kZWxQcm9kdWN0XCIsXCJnbF9CYWNrTGlnaHRQcm9kdWN0XCIsXCJnbF9CYWNrTWF0ZXJpYWxcIixcImdsX0JhY2tTZWNvbmRhcnlDb2xvclwiLFwiZ2xfQ2xpcFBsYW5lXCIsXCJnbF9DbGlwVmVydGV4XCIsXCJnbF9Db2xvclwiLFwiZ2xfRGVwdGhSYW5nZVwiLFwiZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnNcIixcImdsX0V5ZVBsYW5lUVwiLFwiZ2xfRXllUGxhbmVSXCIsXCJnbF9FeWVQbGFuZVNcIixcImdsX0V5ZVBsYW5lVFwiLFwiZ2xfRm9nXCIsXCJnbF9Gb2dDb29yZFwiLFwiZ2xfRm9nRnJhZ0Nvb3JkXCIsXCJnbF9Gb2dQYXJhbWV0ZXJzXCIsXCJnbF9GcmFnQ29sb3JcIixcImdsX0ZyYWdDb29yZFwiLFwiZ2xfRnJhZ0RhdGFcIixcImdsX0ZyYWdEZXB0aFwiLFwiZ2xfRnJhZ0RlcHRoRVhUXCIsXCJnbF9Gcm9udENvbG9yXCIsXCJnbF9Gcm9udEZhY2luZ1wiLFwiZ2xfRnJvbnRMaWdodE1vZGVsUHJvZHVjdFwiLFwiZ2xfRnJvbnRMaWdodFByb2R1Y3RcIixcImdsX0Zyb250TWF0ZXJpYWxcIixcImdsX0Zyb250U2Vjb25kYXJ5Q29sb3JcIixcImdsX0xpZ2h0TW9kZWxcIixcImdsX0xpZ2h0TW9kZWxQYXJhbWV0ZXJzXCIsXCJnbF9MaWdodE1vZGVsUHJvZHVjdHNcIixcImdsX0xpZ2h0UHJvZHVjdHNcIixcImdsX0xpZ2h0U291cmNlXCIsXCJnbF9MaWdodFNvdXJjZVBhcmFtZXRlcnNcIixcImdsX01hdGVyaWFsUGFyYW1ldGVyc1wiLFwiZ2xfTWF4Q2xpcFBsYW5lc1wiLFwiZ2xfTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0c1wiLFwiZ2xfTWF4RHJhd0J1ZmZlcnNcIixcImdsX01heEZyYWdtZW50VW5pZm9ybUNvbXBvbmVudHNcIixcImdsX01heExpZ2h0c1wiLFwiZ2xfTWF4VGV4dHVyZUNvb3Jkc1wiLFwiZ2xfTWF4VGV4dHVyZUltYWdlVW5pdHNcIixcImdsX01heFRleHR1cmVVbml0c1wiLFwiZ2xfTWF4VmFyeWluZ0Zsb2F0c1wiLFwiZ2xfTWF4VmVydGV4QXR0cmlic1wiLFwiZ2xfTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHNcIixcImdsX01heFZlcnRleFVuaWZvcm1Db21wb25lbnRzXCIsXCJnbF9Nb2RlbFZpZXdNYXRyaXhcIixcImdsX01vZGVsVmlld01hdHJpeEludmVyc2VcIixcImdsX01vZGVsVmlld01hdHJpeEludmVyc2VUcmFuc3Bvc2VcIixcImdsX01vZGVsVmlld01hdHJpeFRyYW5zcG9zZVwiLFwiZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeFwiLFwiZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeEludmVyc2VcIixcImdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlVHJhbnNwb3NlXCIsXCJnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4VHJhbnNwb3NlXCIsXCJnbF9NdWx0aVRleENvb3JkMFwiLFwiZ2xfTXVsdGlUZXhDb29yZDFcIixcImdsX011bHRpVGV4Q29vcmQyXCIsXCJnbF9NdWx0aVRleENvb3JkM1wiLFwiZ2xfTXVsdGlUZXhDb29yZDRcIixcImdsX011bHRpVGV4Q29vcmQ1XCIsXCJnbF9NdWx0aVRleENvb3JkNlwiLFwiZ2xfTXVsdGlUZXhDb29yZDdcIixcImdsX05vcm1hbFwiLFwiZ2xfTm9ybWFsTWF0cml4XCIsXCJnbF9Ob3JtYWxTY2FsZVwiLFwiZ2xfT2JqZWN0UGxhbmVRXCIsXCJnbF9PYmplY3RQbGFuZVJcIixcImdsX09iamVjdFBsYW5lU1wiLFwiZ2xfT2JqZWN0UGxhbmVUXCIsXCJnbF9Qb2ludFwiLFwiZ2xfUG9pbnRDb29yZFwiLFwiZ2xfUG9pbnRQYXJhbWV0ZXJzXCIsXCJnbF9Qb2ludFNpemVcIixcImdsX1Bvc2l0aW9uXCIsXCJnbF9Qcm9qZWN0aW9uTWF0cml4XCIsXCJnbF9Qcm9qZWN0aW9uTWF0cml4SW52ZXJzZVwiLFwiZ2xfUHJvamVjdGlvbk1hdHJpeEludmVyc2VUcmFuc3Bvc2VcIixcImdsX1Byb2plY3Rpb25NYXRyaXhUcmFuc3Bvc2VcIixcImdsX1NlY29uZGFyeUNvbG9yXCIsXCJnbF9UZXhDb29yZFwiLFwiZ2xfVGV4dHVyZUVudkNvbG9yXCIsXCJnbF9UZXh0dXJlTWF0cml4XCIsXCJnbF9UZXh0dXJlTWF0cml4SW52ZXJzZVwiLFwiZ2xfVGV4dHVyZU1hdHJpeEludmVyc2VUcmFuc3Bvc2VcIixcImdsX1RleHR1cmVNYXRyaXhUcmFuc3Bvc2VcIixcImdsX1ZlcnRleFwiLFwiZ3JlYXRlclRoYW5cIixcImdyZWF0ZXJUaGFuRXF1YWxcIixcImludmVyc2VzcXJ0XCIsXCJsZW5ndGhcIixcImxlc3NUaGFuXCIsXCJsZXNzVGhhbkVxdWFsXCIsXCJsb2dcIixcImxvZzJcIixcIm1hdHJpeENvbXBNdWx0XCIsXCJtYXhcIixcIm1pblwiLFwibWl4XCIsXCJtb2RcIixcIm5vcm1hbGl6ZVwiLFwibm90XCIsXCJub3RFcXVhbFwiLFwicG93XCIsXCJyYWRpYW5zXCIsXCJyZWZsZWN0XCIsXCJyZWZyYWN0XCIsXCJzaWduXCIsXCJzaW5cIixcInNtb290aHN0ZXBcIixcInNxcnRcIixcInN0ZXBcIixcInRhblwiLFwidGV4dHVyZTJEXCIsXCJ0ZXh0dXJlMkRMb2RcIixcInRleHR1cmUyRFByb2pcIixcInRleHR1cmUyRFByb2pMb2RcIixcInRleHR1cmVDdWJlXCIsXCJ0ZXh0dXJlQ3ViZUxvZFwiLFwidGV4dHVyZTJETG9kRVhUXCIsXCJ0ZXh0dXJlMkRQcm9qTG9kRVhUXCIsXCJ0ZXh0dXJlQ3ViZUxvZEVYVFwiLFwidGV4dHVyZTJER3JhZEVYVFwiLFwidGV4dHVyZTJEUHJvakdyYWRFWFRcIixcInRleHR1cmVDdWJlR3JhZEVYVFwiXX0se31dLDM5ODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuL2xpdGVyYWxzXCIpO2UuZXhwb3J0cz1uLnNsaWNlKCkuY29uY2F0KFtcImxheW91dFwiLFwiY2VudHJvaWRcIixcInNtb290aFwiLFwiY2FzZVwiLFwibWF0MngyXCIsXCJtYXQyeDNcIixcIm1hdDJ4NFwiLFwibWF0M3gyXCIsXCJtYXQzeDNcIixcIm1hdDN4NFwiLFwibWF0NHgyXCIsXCJtYXQ0eDNcIixcIm1hdDR4NFwiLFwidWludFwiLFwidXZlYzJcIixcInV2ZWMzXCIsXCJ1dmVjNFwiLFwic2FtcGxlckN1YmVTaGFkb3dcIixcInNhbXBsZXIyREFycmF5XCIsXCJzYW1wbGVyMkRBcnJheVNoYWRvd1wiLFwiaXNhbXBsZXIyRFwiLFwiaXNhbXBsZXIzRFwiLFwiaXNhbXBsZXJDdWJlXCIsXCJpc2FtcGxlcjJEQXJyYXlcIixcInVzYW1wbGVyMkRcIixcInVzYW1wbGVyM0RcIixcInVzYW1wbGVyQ3ViZVwiLFwidXNhbXBsZXIyREFycmF5XCIsXCJjb2hlcmVudFwiLFwicmVzdHJpY3RcIixcInJlYWRvbmx5XCIsXCJ3cml0ZW9ubHlcIixcInJlc291cmNlXCIsXCJhdG9taWNfdWludFwiLFwibm9wZXJzcGVjdGl2ZVwiLFwicGF0Y2hcIixcInNhbXBsZVwiLFwic3Vicm91dGluZVwiLFwiY29tbW9uXCIsXCJwYXJ0aXRpb25cIixcImFjdGl2ZVwiLFwiZmlsdGVyXCIsXCJpbWFnZTFEXCIsXCJpbWFnZTJEXCIsXCJpbWFnZTNEXCIsXCJpbWFnZUN1YmVcIixcImlpbWFnZTFEXCIsXCJpaW1hZ2UyRFwiLFwiaWltYWdlM0RcIixcImlpbWFnZUN1YmVcIixcInVpbWFnZTFEXCIsXCJ1aW1hZ2UyRFwiLFwidWltYWdlM0RcIixcInVpbWFnZUN1YmVcIixcImltYWdlMURBcnJheVwiLFwiaW1hZ2UyREFycmF5XCIsXCJpaW1hZ2UxREFycmF5XCIsXCJpaW1hZ2UyREFycmF5XCIsXCJ1aW1hZ2UxREFycmF5XCIsXCJ1aW1hZ2UyREFycmF5XCIsXCJpbWFnZTFEU2hhZG93XCIsXCJpbWFnZTJEU2hhZG93XCIsXCJpbWFnZTFEQXJyYXlTaGFkb3dcIixcImltYWdlMkRBcnJheVNoYWRvd1wiLFwiaW1hZ2VCdWZmZXJcIixcImlpbWFnZUJ1ZmZlclwiLFwidWltYWdlQnVmZmVyXCIsXCJzYW1wbGVyMURBcnJheVwiLFwic2FtcGxlcjFEQXJyYXlTaGFkb3dcIixcImlzYW1wbGVyMURcIixcImlzYW1wbGVyMURBcnJheVwiLFwidXNhbXBsZXIxRFwiLFwidXNhbXBsZXIxREFycmF5XCIsXCJpc2FtcGxlcjJEUmVjdFwiLFwidXNhbXBsZXIyRFJlY3RcIixcInNhbXBsZXJCdWZmZXJcIixcImlzYW1wbGVyQnVmZmVyXCIsXCJ1c2FtcGxlckJ1ZmZlclwiLFwic2FtcGxlcjJETVNcIixcImlzYW1wbGVyMkRNU1wiLFwidXNhbXBsZXIyRE1TXCIsXCJzYW1wbGVyMkRNU0FycmF5XCIsXCJpc2FtcGxlcjJETVNBcnJheVwiLFwidXNhbXBsZXIyRE1TQXJyYXlcIl0pfSx7XCIuL2xpdGVyYWxzXCI6Mzk5fV0sMzk5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVtcInByZWNpc2lvblwiLFwiaGlnaHBcIixcIm1lZGl1bXBcIixcImxvd3BcIixcImF0dHJpYnV0ZVwiLFwiY29uc3RcIixcInVuaWZvcm1cIixcInZhcnlpbmdcIixcImJyZWFrXCIsXCJjb250aW51ZVwiLFwiZG9cIixcImZvclwiLFwid2hpbGVcIixcImlmXCIsXCJlbHNlXCIsXCJpblwiLFwib3V0XCIsXCJpbm91dFwiLFwiZmxvYXRcIixcImludFwiLFwidm9pZFwiLFwiYm9vbFwiLFwidHJ1ZVwiLFwiZmFsc2VcIixcImRpc2NhcmRcIixcInJldHVyblwiLFwibWF0MlwiLFwibWF0M1wiLFwibWF0NFwiLFwidmVjMlwiLFwidmVjM1wiLFwidmVjNFwiLFwiaXZlYzJcIixcIml2ZWMzXCIsXCJpdmVjNFwiLFwiYnZlYzJcIixcImJ2ZWMzXCIsXCJidmVjNFwiLFwic2FtcGxlcjFEXCIsXCJzYW1wbGVyMkRcIixcInNhbXBsZXIzRFwiLFwic2FtcGxlckN1YmVcIixcInNhbXBsZXIxRFNoYWRvd1wiLFwic2FtcGxlcjJEU2hhZG93XCIsXCJzdHJ1Y3RcIixcImFzbVwiLFwiY2xhc3NcIixcInVuaW9uXCIsXCJlbnVtXCIsXCJ0eXBlZGVmXCIsXCJ0ZW1wbGF0ZVwiLFwidGhpc1wiLFwicGFja2VkXCIsXCJnb3RvXCIsXCJzd2l0Y2hcIixcImRlZmF1bHRcIixcImlubGluZVwiLFwibm9pbmxpbmVcIixcInZvbGF0aWxlXCIsXCJwdWJsaWNcIixcInN0YXRpY1wiLFwiZXh0ZXJuXCIsXCJleHRlcm5hbFwiLFwiaW50ZXJmYWNlXCIsXCJsb25nXCIsXCJzaG9ydFwiLFwiZG91YmxlXCIsXCJoYWxmXCIsXCJmaXhlZFwiLFwidW5zaWduZWRcIixcImlucHV0XCIsXCJvdXRwdXRcIixcImh2ZWMyXCIsXCJodmVjM1wiLFwiaHZlYzRcIixcImR2ZWMyXCIsXCJkdmVjM1wiLFwiZHZlYzRcIixcImZ2ZWMyXCIsXCJmdmVjM1wiLFwiZnZlYzRcIixcInNhbXBsZXIyRFJlY3RcIixcInNhbXBsZXIzRFJlY3RcIixcInNhbXBsZXIyRFJlY3RTaGFkb3dcIixcInNpemVvZlwiLFwiY2FzdFwiLFwibmFtZXNwYWNlXCIsXCJ1c2luZ1wiXX0se31dLDQwMDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bXCI8PD1cIixcIj4+PVwiLFwiKytcIixcIi0tXCIsXCI8PFwiLFwiPj5cIixcIjw9XCIsXCI+PVwiLFwiPT1cIixcIiE9XCIsXCImJlwiLFwifHxcIixcIis9XCIsXCItPVwiLFwiKj1cIixcIi89XCIsXCIlPVwiLFwiJj1cIixcIl5eXCIsXCJePVwiLFwifD1cIixcIihcIixcIilcIixcIltcIixcIl1cIixcIi5cIixcIiFcIixcIn5cIixcIipcIixcIi9cIixcIiVcIixcIitcIixcIi1cIixcIjxcIixcIj5cIixcIiZcIixcIl5cIixcInxcIixcIj9cIixcIjpcIixcIj1cIixcIixcIixcIjtcIixcIntcIixcIn1cIl19LHt9XSw0MDE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi9pbmRleFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKGUpLGk9W107cmV0dXJuIGk9KGk9aS5jb25jYXQocih0KSkpLmNvbmNhdChyKG51bGwpKX19LHtcIi4vaW5kZXhcIjozOTV9XSw0MDI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7XCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PVt0XSk7Zm9yKHZhciBlPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHI9W10sbj0wO248dC5sZW5ndGgtMTtuKyspci5wdXNoKHRbbl0sZVtuXXx8XCJcIik7cmV0dXJuIHIucHVzaCh0W25dKSxyLmpvaW4oXCJcIil9fSx7fV0sNDAzOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpe1widXNlIHN0cmljdFwiO3ZhciBuLGk9dChcImlzLWJyb3dzZXJcIik7bj1cImZ1bmN0aW9uXCI9PXR5cGVvZiByLm1hdGNoTWVkaWE/IXIubWF0Y2hNZWRpYShcIihob3Zlcjogbm9uZSlcIikubWF0Y2hlczppLGUuZXhwb3J0cz1ufSkuY2FsbCh0aGlzLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7XCJpcy1icm93c2VyXCI6NDEwfV0sNDA0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImlzLWJyb3dzZXJcIik7ZS5leHBvcnRzPW4mJmZ1bmN0aW9uKCl7dmFyIHQ9ITE7dHJ5e3ZhciBlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSxcInBhc3NpdmVcIix7Z2V0OmZ1bmN0aW9uKCl7dD0hMH19KTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInRlc3RcIixudWxsLGUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidGVzdFwiLG51bGwsZSl9Y2F0Y2goZSl7dD0hMX1yZXR1cm4gdH0oKX0se1wiaXMtYnJvd3NlclwiOjQxMH1dLDQwNTpbZnVuY3Rpb24odCxlLHIpe3IucmVhZD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLG8scz04Kmktbi0xLGw9KDE8PHMpLTEsYz1sPj4xLHU9LTcsaD1yP2ktMTowLGY9cj8tMToxLHA9dFtlK2hdO2ZvcihoKz1mLGE9cCYoMTw8LXUpLTEscD4+PS11LHUrPXM7dT4wO2E9MjU2KmErdFtlK2hdLGgrPWYsdS09OCk7Zm9yKG89YSYoMTw8LXUpLTEsYT4+PS11LHUrPW47dT4wO289MjU2Km8rdFtlK2hdLGgrPWYsdS09OCk7aWYoMD09PWEpYT0xLWM7ZWxzZXtpZihhPT09bClyZXR1cm4gbz9OYU46MS8wKihwPy0xOjEpO28rPU1hdGgucG93KDIsbiksYS09Y31yZXR1cm4ocD8tMToxKSpvKk1hdGgucG93KDIsYS1uKX0sci53cml0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8scyxsLGM9OCphLWktMSx1PSgxPDxjKS0xLGg9dT4+MSxmPTIzPT09aT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAscD1uPzA6YS0xLGQ9bj8xOi0xLGc9ZTwwfHwwPT09ZSYmMS9lPDA/MTowO2ZvcihlPU1hdGguYWJzKGUpLGlzTmFOKGUpfHxlPT09MS8wPyhzPWlzTmFOKGUpPzE6MCxvPXUpOihvPU1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjIpLGUqKGw9TWF0aC5wb3coMiwtbykpPDEmJihvLS0sbCo9MiksKGUrPW8raD49MT9mL2w6ZipNYXRoLnBvdygyLDEtaCkpKmw+PTImJihvKyssbC89MiksbytoPj11PyhzPTAsbz11KTpvK2g+PTE/KHM9KGUqbC0xKSpNYXRoLnBvdygyLGkpLG8rPWgpOihzPWUqTWF0aC5wb3coMixoLTEpKk1hdGgucG93KDIsaSksbz0wKSk7aT49ODt0W3IrcF09MjU1JnMscCs9ZCxzLz0yNTYsaS09OCk7Zm9yKG89bzw8aXxzLGMrPWk7Yz4wO3RbcitwXT0yNTUmbyxwKz1kLG8vPTI1NixjLT04KTt0W3IrcC1kXXw9MTI4Kmd9fSx7fV0sNDA2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoMD09PXIpdGhyb3cgbmV3IEVycm9yKFwiTXVzdCBoYXZlIGF0IGxlYXN0IGQrMSBwb2ludHNcIik7dmFyIGk9dFswXS5sZW5ndGg7aWYocjw9aSl0aHJvdyBuZXcgRXJyb3IoXCJNdXN0IGlucHV0IGF0IGxlYXN0IGQrMSBwb2ludHNcIik7dmFyIG89dC5zbGljZSgwLGkrMSkscz1uLmFwcGx5KHZvaWQgMCxvKTtpZigwPT09cyl0aHJvdyBuZXcgRXJyb3IoXCJJbnB1dCBub3QgaW4gZ2VuZXJhbCBwb3NpdGlvblwiKTtmb3IodmFyIGw9bmV3IEFycmF5KGkrMSksdT0wO3U8PWk7Kyt1KWxbdV09dTtzPDAmJihsWzBdPTEsbFsxXT0wKTtmb3IodmFyIGg9bmV3IGEobCxuZXcgQXJyYXkoaSsxKSwhMSksZj1oLmFkamFjZW50LHA9bmV3IEFycmF5KGkrMiksdT0wO3U8PWk7Kyt1KXtmb3IodmFyIGQ9bC5zbGljZSgpLGc9MDtnPD1pOysrZylnPT09dSYmKGRbZ109LTEpO3ZhciB2PWRbMF07ZFswXT1kWzFdLGRbMV09djt2YXIgbT1uZXcgYShkLG5ldyBBcnJheShpKzEpLCEwKTtmW3VdPW0scFt1XT1tfXBbaSsxXT1oO2Zvcih2YXIgdT0wO3U8PWk7Kyt1KWZvcih2YXIgZD1mW3VdLnZlcnRpY2VzLHk9Zlt1XS5hZGphY2VudCxnPTA7Zzw9aTsrK2cpe3ZhciB4PWRbZ107aWYoeDwwKXlbZ109aDtlbHNlIGZvcih2YXIgYj0wO2I8PWk7KytiKWZbYl0udmVydGljZXMuaW5kZXhPZih4KTwwJiYoeVtnXT1mW2JdKX1mb3IodmFyIF89bmV3IGMoaSxvLHApLHc9ISFlLHU9aSsxO3U8cjsrK3UpXy5pbnNlcnQodFt1XSx3KTtyZXR1cm4gXy5ib3VuZGFyeSgpfTt2YXIgbj10KFwicm9idXN0LW9yaWVudGF0aW9uXCIpLGk9dChcInNpbXBsaWNpYWwtY29tcGxleFwiKS5jb21wYXJlQ2VsbHM7ZnVuY3Rpb24gYSh0LGUscil7dGhpcy52ZXJ0aWNlcz10LHRoaXMuYWRqYWNlbnQ9ZSx0aGlzLmJvdW5kYXJ5PXIsdGhpcy5sYXN0VmlzaXRlZD0tMX1mdW5jdGlvbiBvKHQsZSxyKXt0aGlzLnZlcnRpY2VzPXQsdGhpcy5jZWxsPWUsdGhpcy5pbmRleD1yfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gaSh0LnZlcnRpY2VzLGUudmVydGljZXMpfWEucHJvdG90eXBlLmZsaXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnZlcnRpY2VzWzBdO3RoaXMudmVydGljZXNbMF09dGhpcy52ZXJ0aWNlc1sxXSx0aGlzLnZlcnRpY2VzWzFdPXQ7dmFyIGU9dGhpcy5hZGphY2VudFswXTt0aGlzLmFkamFjZW50WzBdPXRoaXMuYWRqYWNlbnRbMV0sdGhpcy5hZGphY2VudFsxXT1lfTt2YXIgbD1bXTtmdW5jdGlvbiBjKHQsZSxyKXt0aGlzLmRpbWVuc2lvbj10LHRoaXMudmVydGljZXM9ZSx0aGlzLnNpbXBsaWNlcz1yLHRoaXMuaW50ZXJpb3I9ci5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuYm91bmRhcnl9KSx0aGlzLnR1cGxlPW5ldyBBcnJheSh0KzEpO2Zvcih2YXIgaT0wO2k8PXQ7KytpKXRoaXMudHVwbGVbaV09dGhpcy52ZXJ0aWNlc1tpXTt2YXIgYT1sW3RdO2F8fChhPWxbdF09ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtcImZ1bmN0aW9uIG9yaWVudCgpe3ZhciB0dXBsZT10aGlzLnR1cGxlO3JldHVybiB0ZXN0KFwiXSxyPTA7cjw9dDsrK3Ipcj4wJiZlLnB1c2goXCIsXCIpLGUucHVzaChcInR1cGxlW1wiLHIsXCJdXCIpO2UucHVzaChcIil9cmV0dXJuIG9yaWVudFwiKTt2YXIgaT1uZXcgRnVuY3Rpb24oXCJ0ZXN0XCIsZS5qb2luKFwiXCIpKSxhPW5bdCsxXTtyZXR1cm4gYXx8KGE9biksaShhKX0odCkpLHRoaXMub3JpZW50PWF9dmFyIHU9Yy5wcm90b3R5cGU7dS5oYW5kbGVCb3VuZGFyeURlZ2VuZXJhY3k9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRpbWVuc2lvbixuPXRoaXMudmVydGljZXMubGVuZ3RoLTEsaT10aGlzLnR1cGxlLGE9dGhpcy52ZXJ0aWNlcyxvPVt0XTtmb3IodC5sYXN0VmlzaXRlZD0tbjtvLmxlbmd0aD4wOyl7KHQ9by5wb3AoKSkudmVydGljZXM7Zm9yKHZhciBzPXQuYWRqYWNlbnQsbD0wO2w8PXI7KytsKXt2YXIgYz1zW2xdO2lmKGMuYm91bmRhcnkmJiEoYy5sYXN0VmlzaXRlZDw9LW4pKXtmb3IodmFyIHU9Yy52ZXJ0aWNlcyxoPTA7aDw9cjsrK2gpe3ZhciBmPXVbaF07aVtoXT1mPDA/ZTphW2ZdfXZhciBwPXRoaXMub3JpZW50KCk7aWYocD4wKXJldHVybiBjO2MubGFzdFZpc2l0ZWQ9LW4sMD09PXAmJm8ucHVzaChjKX19fXJldHVybiBudWxsfSx1LndhbGs9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnZlcnRpY2VzLmxlbmd0aC0xLG49dGhpcy5kaW1lbnNpb24saT10aGlzLnZlcnRpY2VzLGE9dGhpcy50dXBsZSxvPWU/dGhpcy5pbnRlcmlvci5sZW5ndGgqTWF0aC5yYW5kb20oKXwwOnRoaXMuaW50ZXJpb3IubGVuZ3RoLTEscz10aGlzLmludGVyaW9yW29dO3Q6Zm9yKDshcy5ib3VuZGFyeTspe2Zvcih2YXIgbD1zLnZlcnRpY2VzLGM9cy5hZGphY2VudCx1PTA7dTw9bjsrK3UpYVt1XT1pW2xbdV1dO3MubGFzdFZpc2l0ZWQ9cjtmb3IodT0wO3U8PW47Kyt1KXt2YXIgaD1jW3VdO2lmKCEoaC5sYXN0VmlzaXRlZD49cikpe3ZhciBmPWFbdV07YVt1XT10O3ZhciBwPXRoaXMub3JpZW50KCk7aWYoYVt1XT1mLHA8MCl7cz1oO2NvbnRpbnVlIHR9aC5ib3VuZGFyeT9oLmxhc3RWaXNpdGVkPS1yOmgubGFzdFZpc2l0ZWQ9cn19cmV0dXJufXJldHVybiBzfSx1LmFkZFBlYWtzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy52ZXJ0aWNlcy5sZW5ndGgtMSxuPXRoaXMuZGltZW5zaW9uLGk9dGhpcy52ZXJ0aWNlcyxsPXRoaXMudHVwbGUsYz10aGlzLmludGVyaW9yLHU9dGhpcy5zaW1wbGljZXMsaD1bZV07ZS5sYXN0VmlzaXRlZD1yLGUudmVydGljZXNbZS52ZXJ0aWNlcy5pbmRleE9mKC0xKV09cixlLmJvdW5kYXJ5PSExLGMucHVzaChlKTtmb3IodmFyIGY9W107aC5sZW5ndGg+MDspe3ZhciBwPShlPWgucG9wKCkpLnZlcnRpY2VzLGQ9ZS5hZGphY2VudCxnPXAuaW5kZXhPZihyKTtpZighKGc8MCkpZm9yKHZhciB2PTA7djw9bjsrK3YpaWYodiE9PWcpe3ZhciBtPWRbdl07aWYobS5ib3VuZGFyeSYmIShtLmxhc3RWaXNpdGVkPj1yKSl7dmFyIHk9bS52ZXJ0aWNlcztpZihtLmxhc3RWaXNpdGVkIT09LXIpe2Zvcih2YXIgeD0wLGI9MDtiPD1uOysrYil5W2JdPDA/KHg9YixsW2JdPXQpOmxbYl09aVt5W2JdXTtpZih0aGlzLm9yaWVudCgpPjApe3lbeF09cixtLmJvdW5kYXJ5PSExLGMucHVzaChtKSxoLnB1c2gobSksbS5sYXN0VmlzaXRlZD1yO2NvbnRpbnVlfW0ubGFzdFZpc2l0ZWQ9LXJ9dmFyIF89bS5hZGphY2VudCx3PXAuc2xpY2UoKSxrPWQuc2xpY2UoKSxBPW5ldyBhKHcsaywhMCk7dS5wdXNoKEEpO3ZhciBUPV8uaW5kZXhPZihlKTtpZighKFQ8MCkpe19bVF09QSxrW2ddPW0sd1t2XT0tMSxrW3ZdPWUsZFt2XT1BLEEuZmxpcCgpO2ZvcihiPTA7Yjw9bjsrK2Ipe3ZhciBNPXdbYl07aWYoIShNPDB8fE09PT1yKSl7Zm9yKHZhciBTPW5ldyBBcnJheShuLTEpLEU9MCxDPTA7Qzw9bjsrK0Mpe3ZhciBMPXdbQ107TDwwfHxDPT09Ynx8KFNbRSsrXT1MKX1mLnB1c2gobmV3IG8oUyxBLGIpKX19fX19fWYuc29ydChzKTtmb3Iodj0wO3YrMTxmLmxlbmd0aDt2Kz0yKXt2YXIgej1mW3ZdLE89Zlt2KzFdLEk9ei5pbmRleCxEPU8uaW5kZXg7STwwfHxEPDB8fCh6LmNlbGwuYWRqYWNlbnRbei5pbmRleF09Ty5jZWxsLE8uY2VsbC5hZGphY2VudFtPLmluZGV4XT16LmNlbGwpfX0sdS5pbnNlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnZlcnRpY2VzO3IucHVzaCh0KTt2YXIgbj10aGlzLndhbGsodCxlKTtpZihuKXtmb3IodmFyIGk9dGhpcy5kaW1lbnNpb24sYT10aGlzLnR1cGxlLG89MDtvPD1pOysrbyl7dmFyIHM9bi52ZXJ0aWNlc1tvXTthW29dPXM8MD90OnJbc119dmFyIGw9dGhpcy5vcmllbnQoYSk7bDwwfHwoMCE9PWx8fChuPXRoaXMuaGFuZGxlQm91bmRhcnlEZWdlbmVyYWN5KG4sdCkpKSYmdGhpcy5hZGRQZWFrcyh0LG4pfX0sdS5ib3VuZGFyeT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmRpbWVuc2lvbixlPVtdLHI9dGhpcy5zaW1wbGljZXMsbj1yLmxlbmd0aCxpPTA7aTxuOysraSl7dmFyIGE9cltpXTtpZihhLmJvdW5kYXJ5KXtmb3IodmFyIG89bmV3IEFycmF5KHQpLHM9YS52ZXJ0aWNlcyxsPTAsYz0wLHU9MDt1PD10OysrdSlzW3VdPj0wP29bbCsrXT1zW3VdOmM9MSZ1O2lmKGM9PT0oMSZ0KSl7dmFyIGg9b1swXTtvWzBdPW9bMV0sb1sxXT1ofWUucHVzaChvKX19cmV0dXJuIGV9fSx7XCJyb2J1c3Qtb3JpZW50YXRpb25cIjo0OTUsXCJzaW1wbGljaWFsLWNvbXBsZXhcIjo1MDV9XSw0MDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIiksaT0wLGE9MTtmdW5jdGlvbiBvKHQsZSxyLG4saSl7dGhpcy5taWQ9dCx0aGlzLmxlZnQ9ZSx0aGlzLnJpZ2h0PXIsdGhpcy5sZWZ0UG9pbnRzPW4sdGhpcy5yaWdodFBvaW50cz1pLHRoaXMuY291bnQ9KGU/ZS5jb3VudDowKSsocj9yLmNvdW50OjApK24ubGVuZ3RofWUuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighdHx8MD09PXQubGVuZ3RoKXJldHVybiBuZXcgeChudWxsKTtyZXR1cm4gbmV3IHgoeSh0KSl9O3ZhciBzPW8ucHJvdG90eXBlO2Z1bmN0aW9uIGwodCxlKXt0Lm1pZD1lLm1pZCx0LmxlZnQ9ZS5sZWZ0LHQucmlnaHQ9ZS5yaWdodCx0LmxlZnRQb2ludHM9ZS5sZWZ0UG9pbnRzLHQucmlnaHRQb2ludHM9ZS5yaWdodFBvaW50cyx0LmNvdW50PWUuY291bnR9ZnVuY3Rpb24gYyh0LGUpe3ZhciByPXkoZSk7dC5taWQ9ci5taWQsdC5sZWZ0PXIubGVmdCx0LnJpZ2h0PXIucmlnaHQsdC5sZWZ0UG9pbnRzPXIubGVmdFBvaW50cyx0LnJpZ2h0UG9pbnRzPXIucmlnaHRQb2ludHMsdC5jb3VudD1yLmNvdW50fWZ1bmN0aW9uIHUodCxlKXt2YXIgcj10LmludGVydmFscyhbXSk7ci5wdXNoKGUpLGModCxyKX1mdW5jdGlvbiBoKHQsZSl7dmFyIHI9dC5pbnRlcnZhbHMoW10pLG49ci5pbmRleE9mKGUpO3JldHVybiBuPDA/aTooci5zcGxpY2UobiwxKSxjKHQsciksYSl9ZnVuY3Rpb24gZih0LGUscil7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aCYmdFtuXVswXTw9ZTsrK24pe3ZhciBpPXIodFtuXSk7aWYoaSlyZXR1cm4gaX19ZnVuY3Rpb24gcCh0LGUscil7Zm9yKHZhciBuPXQubGVuZ3RoLTE7bj49MCYmdFtuXVsxXT49ZTstLW4pe3ZhciBpPXIodFtuXSk7aWYoaSlyZXR1cm4gaX19ZnVuY3Rpb24gZCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbj1lKHRbcl0pO2lmKG4pcmV0dXJuIG59fWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gdC1lfWZ1bmN0aW9uIHYodCxlKXt2YXIgcj10WzBdLWVbMF07cmV0dXJuIHJ8fHRbMV0tZVsxXX1mdW5jdGlvbiBtKHQsZSl7dmFyIHI9dFsxXS1lWzFdO3JldHVybiByfHx0WzBdLWVbMF19ZnVuY3Rpb24geSh0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2godFtyXVswXSx0W3JdWzFdKTtlLnNvcnQoZyk7dmFyIG49ZVtlLmxlbmd0aD4+MV0saT1bXSxhPVtdLHM9W107Zm9yKHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIGw9dFtyXTtsWzFdPG4/aS5wdXNoKGwpOm48bFswXT9hLnB1c2gobCk6cy5wdXNoKGwpfXZhciBjPXMsdT1zLnNsaWNlKCk7cmV0dXJuIGMuc29ydCh2KSx1LnNvcnQobSksbmV3IG8obix5KGkpLHkoYSksYyx1KX1mdW5jdGlvbiB4KHQpe3RoaXMucm9vdD10fXMuaW50ZXJ2YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB0LnB1c2guYXBwbHkodCx0aGlzLmxlZnRQb2ludHMpLHRoaXMubGVmdCYmdGhpcy5sZWZ0LmludGVydmFscyh0KSx0aGlzLnJpZ2h0JiZ0aGlzLnJpZ2h0LmludGVydmFscyh0KSx0fSxzLmluc2VydD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvdW50LXRoaXMubGVmdFBvaW50cy5sZW5ndGg7aWYodGhpcy5jb3VudCs9MSx0WzFdPHRoaXMubWlkKXRoaXMubGVmdD80Kih0aGlzLmxlZnQuY291bnQrMSk+MyooZSsxKT91KHRoaXMsdCk6dGhpcy5sZWZ0Lmluc2VydCh0KTp0aGlzLmxlZnQ9eShbdF0pO2Vsc2UgaWYodFswXT50aGlzLm1pZCl0aGlzLnJpZ2h0PzQqKHRoaXMucmlnaHQuY291bnQrMSk+MyooZSsxKT91KHRoaXMsdCk6dGhpcy5yaWdodC5pbnNlcnQodCk6dGhpcy5yaWdodD15KFt0XSk7ZWxzZXt2YXIgcj1uLmdlKHRoaXMubGVmdFBvaW50cyx0LHYpLGk9bi5nZSh0aGlzLnJpZ2h0UG9pbnRzLHQsbSk7dGhpcy5sZWZ0UG9pbnRzLnNwbGljZShyLDAsdCksdGhpcy5yaWdodFBvaW50cy5zcGxpY2UoaSwwLHQpfX0scy5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb3VudC10aGlzLmxlZnRQb2ludHM7aWYodFsxXTx0aGlzLm1pZClyZXR1cm4gdGhpcy5sZWZ0PzQqKHRoaXMucmlnaHQ/dGhpcy5yaWdodC5jb3VudDowKT4zKihlLTEpP2godGhpcyx0KToyPT09KGM9dGhpcy5sZWZ0LnJlbW92ZSh0KSk/KHRoaXMubGVmdD1udWxsLHRoaXMuY291bnQtPTEsYSk6KGM9PT1hJiYodGhpcy5jb3VudC09MSksYyk6aTtpZih0WzBdPnRoaXMubWlkKXJldHVybiB0aGlzLnJpZ2h0PzQqKHRoaXMubGVmdD90aGlzLmxlZnQuY291bnQ6MCk+MyooZS0xKT9oKHRoaXMsdCk6Mj09PShjPXRoaXMucmlnaHQucmVtb3ZlKHQpKT8odGhpcy5yaWdodD1udWxsLHRoaXMuY291bnQtPTEsYSk6KGM9PT1hJiYodGhpcy5jb3VudC09MSksYyk6aTtpZigxPT09dGhpcy5jb3VudClyZXR1cm4gdGhpcy5sZWZ0UG9pbnRzWzBdPT09dD8yOmk7aWYoMT09PXRoaXMubGVmdFBvaW50cy5sZW5ndGgmJnRoaXMubGVmdFBvaW50c1swXT09PXQpe2lmKHRoaXMubGVmdCYmdGhpcy5yaWdodCl7Zm9yKHZhciByPXRoaXMsbz10aGlzLmxlZnQ7by5yaWdodDspcj1vLG89by5yaWdodDtpZihyPT09dGhpcylvLnJpZ2h0PXRoaXMucmlnaHQ7ZWxzZXt2YXIgcz10aGlzLmxlZnQsYz10aGlzLnJpZ2h0O3IuY291bnQtPW8uY291bnQsci5yaWdodD1vLmxlZnQsby5sZWZ0PXMsby5yaWdodD1jfWwodGhpcyxvKSx0aGlzLmNvdW50PSh0aGlzLmxlZnQ/dGhpcy5sZWZ0LmNvdW50OjApKyh0aGlzLnJpZ2h0P3RoaXMucmlnaHQuY291bnQ6MCkrdGhpcy5sZWZ0UG9pbnRzLmxlbmd0aH1lbHNlIHRoaXMubGVmdD9sKHRoaXMsdGhpcy5sZWZ0KTpsKHRoaXMsdGhpcy5yaWdodCk7cmV0dXJuIGF9Zm9yKHM9bi5nZSh0aGlzLmxlZnRQb2ludHMsdCx2KTtzPHRoaXMubGVmdFBvaW50cy5sZW5ndGgmJnRoaXMubGVmdFBvaW50c1tzXVswXT09PXRbMF07KytzKWlmKHRoaXMubGVmdFBvaW50c1tzXT09PXQpe3RoaXMuY291bnQtPTEsdGhpcy5sZWZ0UG9pbnRzLnNwbGljZShzLDEpO2ZvcihjPW4uZ2UodGhpcy5yaWdodFBvaW50cyx0LG0pO2M8dGhpcy5yaWdodFBvaW50cy5sZW5ndGgmJnRoaXMucmlnaHRQb2ludHNbY11bMV09PT10WzFdOysrYylpZih0aGlzLnJpZ2h0UG9pbnRzW2NdPT09dClyZXR1cm4gdGhpcy5yaWdodFBvaW50cy5zcGxpY2UoYywxKSxhfXJldHVybiBpfSxzLnF1ZXJ5UG9pbnQ9ZnVuY3Rpb24odCxlKXtpZih0PHRoaXMubWlkKXtpZih0aGlzLmxlZnQpaWYocj10aGlzLmxlZnQucXVlcnlQb2ludCh0LGUpKXJldHVybiByO3JldHVybiBmKHRoaXMubGVmdFBvaW50cyx0LGUpfWlmKHQ+dGhpcy5taWQpe3ZhciByO2lmKHRoaXMucmlnaHQpaWYocj10aGlzLnJpZ2h0LnF1ZXJ5UG9pbnQodCxlKSlyZXR1cm4gcjtyZXR1cm4gcCh0aGlzLnJpZ2h0UG9pbnRzLHQsZSl9cmV0dXJuIGQodGhpcy5sZWZ0UG9pbnRzLGUpfSxzLnF1ZXJ5SW50ZXJ2YWw9ZnVuY3Rpb24odCxlLHIpe3ZhciBuO2lmKHQ8dGhpcy5taWQmJnRoaXMubGVmdCYmKG49dGhpcy5sZWZ0LnF1ZXJ5SW50ZXJ2YWwodCxlLHIpKSlyZXR1cm4gbjtpZihlPnRoaXMubWlkJiZ0aGlzLnJpZ2h0JiYobj10aGlzLnJpZ2h0LnF1ZXJ5SW50ZXJ2YWwodCxlLHIpKSlyZXR1cm4gbjtyZXR1cm4gZTx0aGlzLm1pZD9mKHRoaXMubGVmdFBvaW50cyxlLHIpOnQ+dGhpcy5taWQ/cCh0aGlzLnJpZ2h0UG9pbnRzLHQscik6ZCh0aGlzLmxlZnRQb2ludHMscil9O3ZhciBiPXgucHJvdG90eXBlO2IuaW5zZXJ0PWZ1bmN0aW9uKHQpe3RoaXMucm9vdD90aGlzLnJvb3QuaW5zZXJ0KHQpOnRoaXMucm9vdD1uZXcgbyh0WzBdLG51bGwsbnVsbCxbdF0sW3RdKX0sYi5yZW1vdmU9ZnVuY3Rpb24odCl7aWYodGhpcy5yb290KXt2YXIgZT10aGlzLnJvb3QucmVtb3ZlKHQpO3JldHVybiAyPT09ZSYmKHRoaXMucm9vdD1udWxsKSxlIT09aX1yZXR1cm4hMX0sYi5xdWVyeVBvaW50PWZ1bmN0aW9uKHQsZSl7aWYodGhpcy5yb290KXJldHVybiB0aGlzLnJvb3QucXVlcnlQb2ludCh0LGUpfSxiLnF1ZXJ5SW50ZXJ2YWw9ZnVuY3Rpb24odCxlLHIpe2lmKHQ8PWUmJnRoaXMucm9vdClyZXR1cm4gdGhpcy5yb290LnF1ZXJ5SW50ZXJ2YWwodCxlLHIpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYixcImNvdW50XCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3Q/dGhpcy5yb290LmNvdW50OjB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIsXCJpbnRlcnZhbHNcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdD90aGlzLnJvb3QuaW50ZXJ2YWxzKFtdKTpbXX19KX0se1wiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIjo4Mn1dLDQwODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2U9ZXx8bmV3IEFycmF5KHQubGVuZ3RoKTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcillW3Rbcl1dPXI7cmV0dXJuIGV9fSx7fV0sNDA5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3IpZVtyXT1yO3JldHVybiBlfX0se31dLDQxMDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz0hMH0se31dLDQxMTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7cmV0dXJuISF0LmNvbnN0cnVjdG9yJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZ0LmNvbnN0cnVjdG9yLmlzQnVmZmVyKHQpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dCYmKG4odCl8fGZ1bmN0aW9uKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQucmVhZEZsb2F0TEUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQuc2xpY2UmJm4odC5zbGljZSgwLDApKX0odCl8fCEhdC5faXNCdWZmZXIpfX0se31dLDQxMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1cInVuZGVmaW5lZFwiIT10eXBlb2YgbmF2aWdhdG9yJiYoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl8fC9UcmlkZW50XFwvLy50ZXN0KG5hdmlnYXRvci5hcHBWZXJzaW9uKSl9LHt9XSw0MTM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9YSxlLmV4cG9ydHMuaXNNb2JpbGU9YTt2YXIgbj0vKGFuZHJvaWR8YmJcXGQrfG1lZWdvKS4rbW9iaWxlfGF2YW50Z298YmFkYVxcL3xibGFja2JlcnJ5fGJsYXplcnxjb21wYWx8ZWxhaW5lfGZlbm5lY3xoaXB0b3B8aWVtb2JpbGV8aXAoaG9uZXxvZCl8aXJpc3xraW5kbGV8bGdlIHxtYWVtb3xtaWRwfG1tcHxtb2JpbGUuK2ZpcmVmb3h8bmV0ZnJvbnR8b3BlcmEgbShvYnxpbilpfHBhbG0oIG9zKT98cGhvbmV8cChpeGl8cmUpXFwvfHBsdWNrZXJ8cG9ja2V0fHBzcHxzZXJpZXMoNHw2KTB8c3ltYmlhbnx0cmVvfHVwXFwuKGJyb3dzZXJ8bGluayl8dm9kYWZvbmV8d2FwfHdpbmRvd3MgKGNlfHBob25lKXx4ZGF8eGlpbm8vaSxpPS8oYW5kcm9pZHxiYlxcZCt8bWVlZ28pLittb2JpbGV8YXZhbnRnb3xiYWRhXFwvfGJsYWNrYmVycnl8YmxhemVyfGNvbXBhbHxlbGFpbmV8ZmVubmVjfGhpcHRvcHxpZW1vYmlsZXxpcChob25lfG9kKXxpcmlzfGtpbmRsZXxsZ2UgfG1hZW1vfG1pZHB8bW1wfG1vYmlsZS4rZmlyZWZveHxuZXRmcm9udHxvcGVyYSBtKG9ifGluKWl8cGFsbSggb3MpP3xwaG9uZXxwKGl4aXxyZSlcXC98cGx1Y2tlcnxwb2NrZXR8cHNwfHNlcmllcyg0fDYpMHxzeW1iaWFufHRyZW98dXBcXC4oYnJvd3NlcnxsaW5rKXx2b2RhZm9uZXx3YXB8d2luZG93cyAoY2V8cGhvbmUpfHhkYXx4aWlub3xhbmRyb2lkfGlwYWR8cGxheWJvb2t8c2lsay9pO2Z1bmN0aW9uIGEodCl7dHx8KHQ9e30pO3ZhciBlPXQudWE7cmV0dXJuIGV8fFwidW5kZWZpbmVkXCI9PXR5cGVvZiBuYXZpZ2F0b3J8fChlPW5hdmlnYXRvci51c2VyQWdlbnQpLGUmJmUuaGVhZGVycyYmXCJzdHJpbmdcIj09dHlwZW9mIGUuaGVhZGVyc1tcInVzZXItYWdlbnRcIl0mJihlPWUuaGVhZGVyc1tcInVzZXItYWdlbnRcIl0pLFwic3RyaW5nXCI9PXR5cGVvZiBlJiYodC50YWJsZXQ/aS50ZXN0KGUpOm4udGVzdChlKSl9fSx7fV0sNDE0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiBudWxsIT09dCYmKFwib2JqZWN0XCI9PT1lfHxcImZ1bmN0aW9uXCI9PT1lKX19LHt9XSw0MTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm5cIltvYmplY3QgT2JqZWN0XVwiPT09bi5jYWxsKHQpJiYobnVsbD09PShlPU9iamVjdC5nZXRQcm90b3R5cGVPZih0KSl8fGU9PT1PYmplY3QuZ2V0UHJvdG90eXBlT2Yoe30pKX19LHt9XSw0MTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9dC5sZW5ndGgsbj0wO248cjtuKyspaWYoKChlPXQuY2hhckNvZGVBdChuKSk8OXx8ZT4xMykmJjMyIT09ZSYmMTMzIT09ZSYmMTYwIT09ZSYmNTc2MCE9PWUmJjYxNTghPT1lJiYoZTw4MTkyfHxlPjgyMDUpJiY4MjMyIT09ZSYmODIzMyE9PWUmJjgyMzkhPT1lJiY4Mjg3IT09ZSYmODI4OCE9PWUmJjEyMjg4IT09ZSYmNjUyNzkhPT1lKXJldHVybiExO3JldHVybiEwfX0se31dLDQxNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9dC50cmltKCksISEoL15bbXpsaHZjc3F0YV1cXHMqWy0rLjAtOV1bXm1saHZ6Y3NxdGFdKy9pLnRlc3QodCkmJi9bXFxkel0kL2kudGVzdCh0KSYmdC5sZW5ndGg+NCkpfX0se31dLDQxODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQqKDEtcikrZSpyfX0se31dLDQxOTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXshZnVuY3Rpb24odCxuKXtcIm9iamVjdFwiPT10eXBlb2YgciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGU/ZS5leHBvcnRzPW4oKTp0Lm1hcGJveGdsPW4oKX0odGhpcyxmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBlLHIsbjtmdW5jdGlvbiBpKHQsaSl7aWYoZSlpZihyKXt2YXIgYT1cInZhciBzaGFyZWRDaHVuayA9IHt9OyAoXCIrZStcIikoc2hhcmVkQ2h1bmspOyAoXCIrcitcIikoc2hhcmVkQ2h1bmspO1wiLG89e307ZShvKSwobj1pKG8pKS53b3JrZXJVcmw9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW2FdLHt0eXBlOlwidGV4dC9qYXZhc2NyaXB0XCJ9KSl9ZWxzZSByPWk7ZWxzZSBlPWl9cmV0dXJuIGkoMCxmdW5jdGlvbihlKXt2YXIgcj1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2YgdD90OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6e307ZnVuY3Rpb24gbih0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxcImRlZmF1bHRcIik/dC5kZWZhdWx0OnR9ZnVuY3Rpb24gaSh0LGUpe3JldHVybiB0KGU9e2V4cG9ydHM6e319LGUuZXhwb3J0cyksZS5leHBvcnRzfXZhciBhPW87ZnVuY3Rpb24gbyh0LGUscixuKXt0aGlzLmN4PTMqdCx0aGlzLmJ4PTMqKHItdCktdGhpcy5jeCx0aGlzLmF4PTEtdGhpcy5jeC10aGlzLmJ4LHRoaXMuY3k9MyplLHRoaXMuYnk9Myoobi1lKS10aGlzLmN5LHRoaXMuYXk9MS10aGlzLmN5LXRoaXMuYnksdGhpcy5wMXg9dCx0aGlzLnAxeT1uLHRoaXMucDJ4PXIsdGhpcy5wMnk9bn1vLnByb3RvdHlwZS5zYW1wbGVDdXJ2ZVg9ZnVuY3Rpb24odCl7cmV0dXJuKCh0aGlzLmF4KnQrdGhpcy5ieCkqdCt0aGlzLmN4KSp0fSxvLnByb3RvdHlwZS5zYW1wbGVDdXJ2ZVk9ZnVuY3Rpb24odCl7cmV0dXJuKCh0aGlzLmF5KnQrdGhpcy5ieSkqdCt0aGlzLmN5KSp0fSxvLnByb3RvdHlwZS5zYW1wbGVDdXJ2ZURlcml2YXRpdmVYPWZ1bmN0aW9uKHQpe3JldHVybigzKnRoaXMuYXgqdCsyKnRoaXMuYngpKnQrdGhpcy5jeH0sby5wcm90b3R5cGUuc29sdmVDdXJ2ZVg9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvO2Zvcih2b2lkIDA9PT1lJiYoZT0xZS02KSxpPXQsbz0wO288ODtvKyspe2lmKGE9dGhpcy5zYW1wbGVDdXJ2ZVgoaSktdCxNYXRoLmFicyhhKTxlKXJldHVybiBpO3ZhciBzPXRoaXMuc2FtcGxlQ3VydmVEZXJpdmF0aXZlWChpKTtpZihNYXRoLmFicyhzKTwxZS02KWJyZWFrO2ktPWEvc31pZigoaT10KTwocj0wKSlyZXR1cm4gcjtpZihpPihuPTEpKXJldHVybiBuO2Zvcig7cjxuOyl7aWYoYT10aGlzLnNhbXBsZUN1cnZlWChpKSxNYXRoLmFicyhhLXQpPGUpcmV0dXJuIGk7dD5hP3I9aTpuPWksaT0uNSoobi1yKStyfXJldHVybiBpfSxvLnByb3RvdHlwZS5zb2x2ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnNhbXBsZUN1cnZlWSh0aGlzLnNvbHZlQ3VydmVYKHQsZSkpfTt2YXIgcz1mdW5jdGlvbih0LGUscil7dGhpcy5jb2x1bW49dCx0aGlzLnJvdz1lLHRoaXMuem9vbT1yfTtzLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgcyh0aGlzLmNvbHVtbix0aGlzLnJvdyx0aGlzLnpvb20pfSxzLnByb3RvdHlwZS56b29tVG89ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fem9vbVRvKHQpfSxzLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fc3ViKHQpfSxzLnByb3RvdHlwZS5fem9vbVRvPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgucG93KDIsdC10aGlzLnpvb20pO3JldHVybiB0aGlzLmNvbHVtbio9ZSx0aGlzLnJvdyo9ZSx0aGlzLnpvb209dCx0aGlzfSxzLnByb3RvdHlwZS5fc3ViPWZ1bmN0aW9uKHQpe3JldHVybiB0PXQuem9vbVRvKHRoaXMuem9vbSksdGhpcy5jb2x1bW4tPXQuY29sdW1uLHRoaXMucm93LT10LnJvdyx0aGlzfTt2YXIgbD1jO2Z1bmN0aW9uIGModCxlKXt0aGlzLng9dCx0aGlzLnk9ZX1mdW5jdGlvbiB1KHQsZSxyLG4pe3ZhciBpPW5ldyBhKHQsZSxyLG4pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaS5zb2x2ZSh0KX19Yy5wcm90b3R5cGU9e2Nsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjKHRoaXMueCx0aGlzLnkpfSxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fYWRkKHQpfSxzdWI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fc3ViKHQpfSxtdWx0QnlQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0QnlQb2ludCh0KX0sZGl2QnlQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9kaXZCeVBvaW50KHQpfSxtdWx0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX211bHQodCl9LGRpdjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9kaXYodCl9LHJvdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3RhdGUodCl9LHJvdGF0ZUFyb3VuZDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNsb25lKCkuX3JvdGF0ZUFyb3VuZCh0LGUpfSxtYXRNdWx0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX21hdE11bHQodCl9LHVuaXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl91bml0KCl9LHBlcnA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9wZXJwKCl9LHJvdW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fcm91bmQoKX0sbWFnOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkpfSxlcXVhbHM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueD09PXQueCYmdGhpcy55PT09dC55fSxkaXN0OmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0U3FyKHQpKX0sZGlzdFNxcjpmdW5jdGlvbih0KXt2YXIgZT10LngtdGhpcy54LHI9dC55LXRoaXMueTtyZXR1cm4gZSplK3Iqcn0sYW5nbGU6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5hdGFuMih0aGlzLnksdGhpcy54KX0sYW5nbGVUbzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5hdGFuMih0aGlzLnktdC55LHRoaXMueC10LngpfSxhbmdsZVdpdGg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYW5nbGVXaXRoU2VwKHQueCx0LnkpfSxhbmdsZVdpdGhTZXA6ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hdGFuMih0aGlzLngqZS10aGlzLnkqdCx0aGlzLngqdCt0aGlzLnkqZSl9LF9tYXRNdWx0OmZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0qdGhpcy54K3RbMV0qdGhpcy55LHI9dFsyXSp0aGlzLngrdFszXSp0aGlzLnk7cmV0dXJuIHRoaXMueD1lLHRoaXMueT1yLHRoaXN9LF9hZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXN9LF9zdWI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXN9LF9tdWx0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXN9LF9kaXY6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueC89dCx0aGlzLnkvPXQsdGhpc30sX211bHRCeVBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzfSxfZGl2QnlQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Lz10LngsdGhpcy55Lz10LnksdGhpc30sX3VuaXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGl2KHRoaXMubWFnKCkpLHRoaXN9LF9wZXJwOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy55O3JldHVybiB0aGlzLnk9dGhpcy54LHRoaXMueD0tdCx0aGlzfSxfcm90YXRlOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguY29zKHQpLHI9TWF0aC5zaW4odCksbj1lKnRoaXMueC1yKnRoaXMueSxpPXIqdGhpcy54K2UqdGhpcy55O3JldHVybiB0aGlzLng9bix0aGlzLnk9aSx0aGlzfSxfcm90YXRlQXJvdW5kOmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5jb3ModCksbj1NYXRoLnNpbih0KSxpPWUueCtyKih0aGlzLngtZS54KS1uKih0aGlzLnktZS55KSxhPWUueStuKih0aGlzLngtZS54KStyKih0aGlzLnktZS55KTtyZXR1cm4gdGhpcy54PWksdGhpcy55PWEsdGhpc30sX3JvdW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzfX0sYy5jb252ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgYz90OkFycmF5LmlzQXJyYXkodCk/bmV3IGModFswXSx0WzFdKTp0fTt2YXIgaD11KC4yNSwuMSwuMjUsMSk7ZnVuY3Rpb24gZih0LGUscil7cmV0dXJuIE1hdGgubWluKHIsTWF0aC5tYXgoZSx0KSl9ZnVuY3Rpb24gcCh0KXtmb3IodmFyIGU9W10scj1hcmd1bWVudHMubGVuZ3RoLTE7ci0tID4wOyllW3JdPWFyZ3VtZW50c1tyKzFdO2Zvcih2YXIgbj0wLGk9ZTtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07Zm9yKHZhciBvIGluIGEpdFtvXT1hW29dfXJldHVybiB0fXZhciBkPTE7ZnVuY3Rpb24gZyh0LGUpe3QuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdJiYoZVt0XT1lW3RdLmJpbmQoZSkpfSl9ZnVuY3Rpb24gdih0LGUpe3JldHVybi0xIT09dC5pbmRleE9mKGUsdC5sZW5ndGgtZS5sZW5ndGgpfWZ1bmN0aW9uIG0odCxlLHIpe3ZhciBuPXt9O2Zvcih2YXIgaSBpbiB0KW5baV09ZS5jYWxsKHJ8fHRoaXMsdFtpXSxpLHQpO3JldHVybiBufWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBuPXt9O2Zvcih2YXIgaSBpbiB0KWUuY2FsbChyfHx0aGlzLHRbaV0saSx0KSYmKG5baV09dFtpXSk7cmV0dXJuIG59ZnVuY3Rpb24geCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90Lm1hcCh4KTpcIm9iamVjdFwiPT10eXBlb2YgdCYmdD9tKHQseCk6dH12YXIgYj17fTtmdW5jdGlvbiBfKHQpe2JbdF18fChcInVuZGVmaW5lZFwiIT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuKHQpLGJbdF09ITApfWZ1bmN0aW9uIHcodCxlLHIpe3JldHVybihyLnktdC55KSooZS54LXQueCk+KGUueS10LnkpKihyLngtdC54KX1mdW5jdGlvbiBrKHQpe2Zvcih2YXIgZT0wLHI9MCxuPXQubGVuZ3RoLGk9bi0xLGE9dm9pZCAwLG89dm9pZCAwO3I8bjtpPXIrKylhPXRbcl0sZSs9KChvPXRbaV0pLngtYS54KSooYS55K28ueSk7cmV0dXJuIGV9dmFyIEE9e1Vua25vd246XCJVbmtub3duXCIsU3R5bGU6XCJTdHlsZVwiLFNvdXJjZTpcIlNvdXJjZVwiLFRpbGU6XCJUaWxlXCIsR2x5cGhzOlwiR2x5cGhzXCIsU3ByaXRlSW1hZ2U6XCJTcHJpdGVJbWFnZVwiLFNwcml0ZUpTT046XCJTcHJpdGVKU09OXCIsSW1hZ2U6XCJJbWFnZVwifTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZnJlZXplJiZPYmplY3QuZnJlZXplKEEpO3ZhciBUPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyLG4pe3QuY2FsbCh0aGlzLGUpLHRoaXMuc3RhdHVzPXIsdGhpcy51cmw9bix0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLHRoaXMubWVzc2FnZT1lfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWUrXCI6IFwiK3RoaXMubWVzc2FnZStcIiAoXCIrdGhpcy5zdGF0dXMrXCIpOiBcIit0aGlzLnVybH0sZX0oRXJyb3IpO2Z1bmN0aW9uIE0odCl7dmFyIGU9bmV3IHNlbGYuWE1MSHR0cFJlcXVlc3Q7Zm9yKHZhciByIGluIGUub3BlbihcIkdFVFwiLHQudXJsLCEwKSx0LmhlYWRlcnMpZS5zZXRSZXF1ZXN0SGVhZGVyKHIsdC5oZWFkZXJzW3JdKTtyZXR1cm4gZS53aXRoQ3JlZGVudGlhbHM9XCJpbmNsdWRlXCI9PT10LmNyZWRlbnRpYWxzLGV9dmFyIFM9ZnVuY3Rpb24odCxlKXt2YXIgcj1NKHQpO3JldHVybiByLnJlc3BvbnNlVHlwZT1cImFycmF5YnVmZmVyXCIsci5vbmVycm9yPWZ1bmN0aW9uKCl7ZShuZXcgRXJyb3Ioci5zdGF0dXNUZXh0KSl9LHIub25sb2FkPWZ1bmN0aW9uKCl7dmFyIG49ci5yZXNwb25zZTtpZigwPT09bi5ieXRlTGVuZ3RoJiYyMDA9PT1yLnN0YXR1cylyZXR1cm4gZShuZXcgRXJyb3IoXCJodHRwIHN0YXR1cyAyMDAgcmV0dXJuZWQgd2l0aG91dCBjb250ZW50LlwiKSk7ci5zdGF0dXM+PTIwMCYmci5zdGF0dXM8MzAwJiZyLnJlc3BvbnNlP2UobnVsbCx7ZGF0YTpuLGNhY2hlQ29udHJvbDpyLmdldFJlc3BvbnNlSGVhZGVyKFwiQ2FjaGUtQ29udHJvbFwiKSxleHBpcmVzOnIuZ2V0UmVzcG9uc2VIZWFkZXIoXCJFeHBpcmVzXCIpfSk6ZShuZXcgVChyLnN0YXR1c1RleHQsci5zdGF0dXMsdC51cmwpKX0sci5zZW5kKCkscn07ZnVuY3Rpb24gRSh0LGUscil7clt0XT1yW3RdfHxbXSxyW3RdLnB1c2goZSl9ZnVuY3Rpb24gQyh0LGUscil7aWYociYmclt0XSl7dmFyIG49clt0XS5pbmRleE9mKGUpOy0xIT09biYmclt0XS5zcGxpY2UobiwxKX19dmFyIEw9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17fSkscCh0aGlzLGUpLHRoaXMudHlwZT10fSx6PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXt2b2lkIDA9PT1yJiYocj17fSksdC5jYWxsKHRoaXMsXCJlcnJvclwiLHAoe2Vycm9yOmV9LHIpKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZX0oTCksTz1mdW5jdGlvbigpe307Ty5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fbGlzdGVuZXJzPXRoaXMuX2xpc3RlbmVyc3x8e30sRSh0LGUsdGhpcy5fbGlzdGVuZXJzKSx0aGlzfSxPLnByb3RvdHlwZS5vZmY9ZnVuY3Rpb24odCxlKXtyZXR1cm4gQyh0LGUsdGhpcy5fbGlzdGVuZXJzKSxDKHQsZSx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzKSx0aGlzfSxPLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX29uZVRpbWVMaXN0ZW5lcnM9dGhpcy5fb25lVGltZUxpc3RlbmVyc3x8e30sRSh0LGUsdGhpcy5fb25lVGltZUxpc3RlbmVycyksdGhpc30sTy5wcm90b3R5cGUuZmlyZT1mdW5jdGlvbih0KXtcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9bmV3IEwodCxhcmd1bWVudHNbMV18fHt9KSk7dmFyIGU9dC50eXBlO2lmKHRoaXMubGlzdGVucyhlKSl7dC50YXJnZXQ9dGhpcztmb3IodmFyIHI9MCxuPXRoaXMuX2xpc3RlbmVycyYmdGhpcy5fbGlzdGVuZXJzW2VdP3RoaXMuX2xpc3RlbmVyc1tlXS5zbGljZSgpOltdO3I8bi5sZW5ndGg7cis9MSluW3JdLmNhbGwodGhpcyx0KTtmb3IodmFyIGk9MCxhPXRoaXMuX29uZVRpbWVMaXN0ZW5lcnMmJnRoaXMuX29uZVRpbWVMaXN0ZW5lcnNbZV0/dGhpcy5fb25lVGltZUxpc3RlbmVyc1tlXS5zbGljZSgpOltdO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTtDKGUsbyx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzKSxvLmNhbGwodGhpcyx0KX12YXIgcz10aGlzLl9ldmVudGVkUGFyZW50O3MmJihwKHQsXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5fZXZlbnRlZFBhcmVudERhdGE/dGhpcy5fZXZlbnRlZFBhcmVudERhdGEoKTp0aGlzLl9ldmVudGVkUGFyZW50RGF0YSkscy5maXJlKHQpKX1lbHNlIHYoZSxcImVycm9yXCIpP2NvbnNvbGUuZXJyb3IodCYmdC5lcnJvcnx8dHx8XCJFbXB0eSBlcnJvciBldmVudFwiKTp2KGUsXCJ3YXJuaW5nXCIpJiZjb25zb2xlLndhcm4odCYmdC53YXJuaW5nfHx0fHxcIkVtcHR5IHdhcm5pbmcgZXZlbnRcIik7cmV0dXJuIHRoaXN9LE8ucHJvdG90eXBlLmxpc3RlbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xpc3RlbmVycyYmdGhpcy5fbGlzdGVuZXJzW3RdJiZ0aGlzLl9saXN0ZW5lcnNbdF0ubGVuZ3RoPjB8fHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMmJnRoaXMuX29uZVRpbWVMaXN0ZW5lcnNbdF0mJnRoaXMuX29uZVRpbWVMaXN0ZW5lcnNbdF0ubGVuZ3RoPjB8fHRoaXMuX2V2ZW50ZWRQYXJlbnQmJnRoaXMuX2V2ZW50ZWRQYXJlbnQubGlzdGVucyh0KX0sTy5wcm90b3R5cGUuc2V0RXZlbnRlZFBhcmVudD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9ldmVudGVkUGFyZW50PXQsdGhpcy5fZXZlbnRlZFBhcmVudERhdGE9ZSx0aGlzfTt2YXIgST17JHZlcnNpb246OCwkcm9vdDp7dmVyc2lvbjp7cmVxdWlyZWQ6ITAsdHlwZTpcImVudW1cIix2YWx1ZXM6WzhdfSxuYW1lOnt0eXBlOlwic3RyaW5nXCJ9LG1ldGFkYXRhOnt0eXBlOlwiKlwifSxjZW50ZXI6e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwibnVtYmVyXCJ9LHpvb206e3R5cGU6XCJudW1iZXJcIn0sYmVhcmluZzp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLHVuaXRzOlwiZGVncmVlc1wifSxwaXRjaDp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MCx1bml0czpcImRlZ3JlZXNcIn0sbGlnaHQ6e3R5cGU6XCJsaWdodFwifSxzb3VyY2VzOntyZXF1aXJlZDohMCx0eXBlOlwic291cmNlc1wifSxzcHJpdGU6e3R5cGU6XCJzdHJpbmdcIn0sZ2x5cGhzOnt0eXBlOlwic3RyaW5nXCJ9LHRyYW5zaXRpb246e3R5cGU6XCJ0cmFuc2l0aW9uXCJ9LGxheWVyczp7cmVxdWlyZWQ6ITAsdHlwZTpcImFycmF5XCIsdmFsdWU6XCJsYXllclwifX0sc291cmNlczp7XCIqXCI6e3R5cGU6XCJzb3VyY2VcIn19LHNvdXJjZTpbXCJzb3VyY2VfdmVjdG9yXCIsXCJzb3VyY2VfcmFzdGVyXCIsXCJzb3VyY2VfcmFzdGVyX2RlbVwiLFwic291cmNlX2dlb2pzb25cIixcInNvdXJjZV92aWRlb1wiLFwic291cmNlX2ltYWdlXCJdLHNvdXJjZV92ZWN0b3I6e3R5cGU6e3JlcXVpcmVkOiEwLHR5cGU6XCJlbnVtXCIsdmFsdWVzOnt2ZWN0b3I6e319fSx1cmw6e3R5cGU6XCJzdHJpbmdcIn0sdGlsZXM6e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwic3RyaW5nXCJ9LGJvdW5kczp7dHlwZTpcImFycmF5XCIsdmFsdWU6XCJudW1iZXJcIixsZW5ndGg6NCxkZWZhdWx0OlstMTgwLC04NS4wNTExLDE4MCw4NS4wNTExXX0sbWluem9vbTp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MH0sbWF4em9vbTp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MjJ9LGF0dHJpYnV0aW9uOnt0eXBlOlwic3RyaW5nXCJ9LFwiKlwiOnt0eXBlOlwiKlwifX0sc291cmNlX3Jhc3Rlcjp7dHlwZTp7cmVxdWlyZWQ6ITAsdHlwZTpcImVudW1cIix2YWx1ZXM6e3Jhc3Rlcjp7fX19LHVybDp7dHlwZTpcInN0cmluZ1wifSx0aWxlczp7dHlwZTpcImFycmF5XCIsdmFsdWU6XCJzdHJpbmdcIn0sYm91bmRzOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcIm51bWJlclwiLGxlbmd0aDo0LGRlZmF1bHQ6Wy0xODAsLTg1LjA1MTEsMTgwLDg1LjA1MTFdfSxtaW56b29tOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowfSxtYXh6b29tOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoyMn0sdGlsZVNpemU6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjUxMix1bml0czpcInBpeGVsc1wifSxzY2hlbWU6e3R5cGU6XCJlbnVtXCIsdmFsdWVzOnt4eXo6e30sdG1zOnt9fSxkZWZhdWx0OlwieHl6XCJ9LGF0dHJpYnV0aW9uOnt0eXBlOlwic3RyaW5nXCJ9LFwiKlwiOnt0eXBlOlwiKlwifX0sc291cmNlX3Jhc3Rlcl9kZW06e3R5cGU6e3JlcXVpcmVkOiEwLHR5cGU6XCJlbnVtXCIsdmFsdWVzOntcInJhc3Rlci1kZW1cIjp7fX19LHVybDp7dHlwZTpcInN0cmluZ1wifSx0aWxlczp7dHlwZTpcImFycmF5XCIsdmFsdWU6XCJzdHJpbmdcIn0sYm91bmRzOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcIm51bWJlclwiLGxlbmd0aDo0LGRlZmF1bHQ6Wy0xODAsLTg1LjA1MTEsMTgwLDg1LjA1MTFdfSxtaW56b29tOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowfSxtYXh6b29tOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoyMn0sdGlsZVNpemU6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjUxMix1bml0czpcInBpeGVsc1wifSxhdHRyaWJ1dGlvbjp7dHlwZTpcInN0cmluZ1wifSxlbmNvZGluZzp7dHlwZTpcImVudW1cIix2YWx1ZXM6e3RlcnJhcml1bTp7fSxtYXBib3g6e319LGRlZmF1bHQ6XCJtYXBib3hcIn0sXCIqXCI6e3R5cGU6XCIqXCJ9fSxzb3VyY2VfZ2VvanNvbjp7dHlwZTp7cmVxdWlyZWQ6ITAsdHlwZTpcImVudW1cIix2YWx1ZXM6e2dlb2pzb246e319fSxkYXRhOnt0eXBlOlwiKlwifSxtYXh6b29tOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoxOH0sYnVmZmVyOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoxMjgsbWF4aW11bTo1MTIsbWluaW11bTowfSx0b2xlcmFuY2U6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0Oi4zNzV9LGNsdXN0ZXI6e3R5cGU6XCJib29sZWFuXCIsZGVmYXVsdDohMX0sY2x1c3RlclJhZGl1czp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6NTAsbWluaW11bTowfSxjbHVzdGVyTWF4Wm9vbTp7dHlwZTpcIm51bWJlclwifSxsaW5lTWV0cmljczp7dHlwZTpcImJvb2xlYW5cIixkZWZhdWx0OiExfX0sc291cmNlX3ZpZGVvOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOlwiZW51bVwiLHZhbHVlczp7dmlkZW86e319fSx1cmxzOntyZXF1aXJlZDohMCx0eXBlOlwiYXJyYXlcIix2YWx1ZTpcInN0cmluZ1wifSxjb29yZGluYXRlczp7cmVxdWlyZWQ6ITAsdHlwZTpcImFycmF5XCIsbGVuZ3RoOjQsdmFsdWU6e3R5cGU6XCJhcnJheVwiLGxlbmd0aDoyLHZhbHVlOlwibnVtYmVyXCJ9fX0sc291cmNlX2ltYWdlOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOlwiZW51bVwiLHZhbHVlczp7aW1hZ2U6e319fSx1cmw6e3JlcXVpcmVkOiEwLHR5cGU6XCJzdHJpbmdcIn0sY29vcmRpbmF0ZXM6e3JlcXVpcmVkOiEwLHR5cGU6XCJhcnJheVwiLGxlbmd0aDo0LHZhbHVlOnt0eXBlOlwiYXJyYXlcIixsZW5ndGg6Mix2YWx1ZTpcIm51bWJlclwifX19LGxheWVyOntpZDp7dHlwZTpcInN0cmluZ1wiLHJlcXVpcmVkOiEwfSx0eXBlOnt0eXBlOlwiZW51bVwiLHZhbHVlczp7ZmlsbDp7fSxsaW5lOnt9LHN5bWJvbDp7fSxjaXJjbGU6e30saGVhdG1hcDp7fSxcImZpbGwtZXh0cnVzaW9uXCI6e30scmFzdGVyOnt9LGhpbGxzaGFkZTp7fSxiYWNrZ3JvdW5kOnt9fSxyZXF1aXJlZDohMH0sbWV0YWRhdGE6e3R5cGU6XCIqXCJ9LHNvdXJjZTp7dHlwZTpcInN0cmluZ1wifSxcInNvdXJjZS1sYXllclwiOnt0eXBlOlwic3RyaW5nXCJ9LG1pbnpvb206e3R5cGU6XCJudW1iZXJcIixtaW5pbXVtOjAsbWF4aW11bToyNH0sbWF4em9vbTp7dHlwZTpcIm51bWJlclwiLG1pbmltdW06MCxtYXhpbXVtOjI0fSxmaWx0ZXI6e3R5cGU6XCJmaWx0ZXJcIn0sbGF5b3V0Ont0eXBlOlwibGF5b3V0XCJ9LHBhaW50Ont0eXBlOlwicGFpbnRcIn19LGxheW91dDpbXCJsYXlvdXRfZmlsbFwiLFwibGF5b3V0X2xpbmVcIixcImxheW91dF9jaXJjbGVcIixcImxheW91dF9oZWF0bWFwXCIsXCJsYXlvdXRfZmlsbC1leHRydXNpb25cIixcImxheW91dF9zeW1ib2xcIixcImxheW91dF9yYXN0ZXJcIixcImxheW91dF9oaWxsc2hhZGVcIixcImxheW91dF9iYWNrZ3JvdW5kXCJdLGxheW91dF9iYWNrZ3JvdW5kOnt2aXNpYmlsaXR5Ont0eXBlOlwiZW51bVwiLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OlwidmlzaWJsZVwifX0sbGF5b3V0X2ZpbGw6e3Zpc2liaWxpdHk6e3R5cGU6XCJlbnVtXCIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6XCJ2aXNpYmxlXCJ9fSxsYXlvdXRfY2lyY2xlOnt2aXNpYmlsaXR5Ont0eXBlOlwiZW51bVwiLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OlwidmlzaWJsZVwifX0sbGF5b3V0X2hlYXRtYXA6e3Zpc2liaWxpdHk6e3R5cGU6XCJlbnVtXCIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6XCJ2aXNpYmxlXCJ9fSxsYXlvdXRfbGluZTp7XCJsaW5lLWNhcFwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdmFsdWVzOntidXR0Ont9LHJvdW5kOnt9LHNxdWFyZTp7fX0sZGVmYXVsdDpcImJ1dHRcIn0sXCJsaW5lLWpvaW5cIjp7dHlwZTpcImVudW1cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx2YWx1ZXM6e2JldmVsOnt9LHJvdW5kOnt9LG1pdGVyOnt9fSxkZWZhdWx0OlwibWl0ZXJcIn0sXCJsaW5lLW1pdGVyLWxpbWl0XCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxyZXF1aXJlczpbe1wibGluZS1qb2luXCI6XCJtaXRlclwifV19LFwibGluZS1yb3VuZC1saW1pdFwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoxLjA1LGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAscmVxdWlyZXM6W3tcImxpbmUtam9pblwiOlwicm91bmRcIn1dfSx2aXNpYmlsaXR5Ont0eXBlOlwiZW51bVwiLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OlwidmlzaWJsZVwifX0sbGF5b3V0X3N5bWJvbDp7XCJzeW1ib2wtcGxhY2VtZW50XCI6e3R5cGU6XCJlbnVtXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCx2YWx1ZXM6e3BvaW50Ont9LGxpbmU6e319LGRlZmF1bHQ6XCJwb2ludFwifSxcInN5bWJvbC1zcGFjaW5nXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjI1MCxtaW5pbXVtOjEsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCx1bml0czpcInBpeGVsc1wiLHJlcXVpcmVzOlt7XCJzeW1ib2wtcGxhY2VtZW50XCI6XCJsaW5lXCJ9XX0sXCJzeW1ib2wtYXZvaWQtZWRnZXNcIjp7dHlwZTpcImJvb2xlYW5cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLGRlZmF1bHQ6ITF9LFwiaWNvbi1hbGxvdy1vdmVybGFwXCI6e3R5cGU6XCJib29sZWFuXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOltcImljb24taW1hZ2VcIl19LFwiaWNvbi1pZ25vcmUtcGxhY2VtZW50XCI6e3R5cGU6XCJib29sZWFuXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOltcImljb24taW1hZ2VcIl19LFwiaWNvbi1vcHRpb25hbFwiOnt0eXBlOlwiYm9vbGVhblwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsZGVmYXVsdDohMSxyZXF1aXJlczpbXCJpY29uLWltYWdlXCIsXCJ0ZXh0LWZpZWxkXCJdfSxcImljb24tcm90YXRpb24tYWxpZ25tZW50XCI6e3R5cGU6XCJlbnVtXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fSxhdXRvOnt9fSxkZWZhdWx0OlwiYXV0b1wiLHJlcXVpcmVzOltcImljb24taW1hZ2VcIl19LFwiaWNvbi1zaXplXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjEsbWluaW11bTowLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHVuaXRzOlwiZmFjdG9yIG9mIHRoZSBvcmlnaW5hbCBpY29uIHNpemVcIixyZXF1aXJlczpbXCJpY29uLWltYWdlXCJdfSxcImljb24tdGV4dC1maXRcIjp7dHlwZTpcImVudW1cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHZhbHVlczp7bm9uZTp7fSx3aWR0aDp7fSxoZWlnaHQ6e30sYm90aDp7fX0sZGVmYXVsdDpcIm5vbmVcIixyZXF1aXJlczpbXCJpY29uLWltYWdlXCIsXCJ0ZXh0LWZpZWxkXCJdfSxcImljb24tdGV4dC1maXQtcGFkZGluZ1wiOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcIm51bWJlclwiLGxlbmd0aDo0LGRlZmF1bHQ6WzAsMCwwLDBdLHVuaXRzOlwicGl4ZWxzXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxyZXF1aXJlczpbXCJpY29uLWltYWdlXCIsXCJ0ZXh0LWZpZWxkXCIse1wiaWNvbi10ZXh0LWZpdFwiOltcImJvdGhcIixcIndpZHRoXCIsXCJoZWlnaHRcIl19XX0sXCJpY29uLWltYWdlXCI6e3R5cGU6XCJzdHJpbmdcIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0b2tlbnM6ITB9LFwiaWNvbi1yb3RhdGVcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHVuaXRzOlwiZGVncmVlc1wiLHJlcXVpcmVzOltcImljb24taW1hZ2VcIl19LFwiaWNvbi1wYWRkaW5nXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjIsbWluaW11bTowLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdW5pdHM6XCJwaXhlbHNcIixyZXF1aXJlczpbXCJpY29uLWltYWdlXCJdfSxcImljb24ta2VlcC11cHJpZ2h0XCI6e3R5cGU6XCJib29sZWFuXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOltcImljb24taW1hZ2VcIix7XCJpY29uLXJvdGF0aW9uLWFsaWdubWVudFwiOlwibWFwXCJ9LHtcInN5bWJvbC1wbGFjZW1lbnRcIjpcImxpbmVcIn1dfSxcImljb24tb2Zmc2V0XCI6e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwibnVtYmVyXCIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCxyZXF1aXJlczpbXCJpY29uLWltYWdlXCJdfSxcImljb24tYW5jaG9yXCI6e3R5cGU6XCJlbnVtXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdmFsdWVzOntjZW50ZXI6e30sbGVmdDp7fSxyaWdodDp7fSx0b3A6e30sYm90dG9tOnt9LFwidG9wLWxlZnRcIjp7fSxcInRvcC1yaWdodFwiOnt9LFwiYm90dG9tLWxlZnRcIjp7fSxcImJvdHRvbS1yaWdodFwiOnt9fSxkZWZhdWx0OlwiY2VudGVyXCIscmVxdWlyZXM6W1wiaWNvbi1pbWFnZVwiXX0sXCJpY29uLXBpdGNoLWFsaWdubWVudFwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e30sYXV0bzp7fX0sZGVmYXVsdDpcImF1dG9cIixyZXF1aXJlczpbXCJpY29uLWltYWdlXCJdfSxcInRleHQtcGl0Y2gtYWxpZ25tZW50XCI6e3R5cGU6XCJlbnVtXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fSxhdXRvOnt9fSxkZWZhdWx0OlwiYXV0b1wiLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnRcIjp7dHlwZTpcImVudW1cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9LGF1dG86e319LGRlZmF1bHQ6XCJhdXRvXCIscmVxdWlyZXM6W1widGV4dC1maWVsZFwiXX0sXCJ0ZXh0LWZpZWxkXCI6e3R5cGU6XCJzdHJpbmdcIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCxkZWZhdWx0OlwiXCIsdG9rZW5zOiEwfSxcInRleHQtZm9udFwiOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcInN0cmluZ1wiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLGRlZmF1bHQ6W1wiT3BlbiBTYW5zIFJlZ3VsYXJcIixcIkFyaWFsIFVuaWNvZGUgTVMgUmVndWxhclwiXSxyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCJdfSxcInRleHQtc2l6ZVwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoxNixtaW5pbXVtOjAsdW5pdHM6XCJwaXhlbHNcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCxyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCJdfSxcInRleHQtbWF4LXdpZHRoXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjEwLG1pbmltdW06MCx1bml0czpcImVtc1wiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC1saW5lLWhlaWdodFwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoxLjIsdW5pdHM6XCJlbXNcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC1sZXR0ZXItc3BhY2luZ1wiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLHVuaXRzOlwiZW1zXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAscmVxdWlyZXM6W1widGV4dC1maWVsZFwiXX0sXCJ0ZXh0LWp1c3RpZnlcIjp7dHlwZTpcImVudW1cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx2YWx1ZXM6e2xlZnQ6e30sY2VudGVyOnt9LHJpZ2h0Ont9fSxkZWZhdWx0OlwiY2VudGVyXCIscmVxdWlyZXM6W1widGV4dC1maWVsZFwiXX0sXCJ0ZXh0LWFuY2hvclwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHZhbHVlczp7Y2VudGVyOnt9LGxlZnQ6e30scmlnaHQ6e30sdG9wOnt9LGJvdHRvbTp7fSxcInRvcC1sZWZ0XCI6e30sXCJ0b3AtcmlnaHRcIjp7fSxcImJvdHRvbS1sZWZ0XCI6e30sXCJib3R0b20tcmlnaHRcIjp7fX0sZGVmYXVsdDpcImNlbnRlclwiLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC1tYXgtYW5nbGVcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6NDUsdW5pdHM6XCJkZWdyZWVzXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCIse1wic3ltYm9sLXBsYWNlbWVudFwiOlwibGluZVwifV19LFwidGV4dC1yb3RhdGVcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLHVuaXRzOlwiZGVncmVlc1wiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC1wYWRkaW5nXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjIsbWluaW11bTowLHVuaXRzOlwicGl4ZWxzXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCJdfSxcInRleHQta2VlcC11cHJpZ2h0XCI6e3R5cGU6XCJib29sZWFuXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCxkZWZhdWx0OiEwLHJlcXVpcmVzOltcInRleHQtZmllbGRcIix7XCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudFwiOlwibWFwXCJ9LHtcInN5bWJvbC1wbGFjZW1lbnRcIjpcImxpbmVcIn1dfSxcInRleHQtdHJhbnNmb3JtXCI6e3R5cGU6XCJlbnVtXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdmFsdWVzOntub25lOnt9LHVwcGVyY2FzZTp7fSxsb3dlcmNhc2U6e319LGRlZmF1bHQ6XCJub25lXCIscmVxdWlyZXM6W1widGV4dC1maWVsZFwiXX0sXCJ0ZXh0LW9mZnNldFwiOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcIm51bWJlclwiLHVuaXRzOlwiZW1zXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCJdfSxcInRleHQtYWxsb3ctb3ZlcmxhcFwiOnt0eXBlOlwiYm9vbGVhblwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsZGVmYXVsdDohMSxyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCJdfSxcInRleHQtaWdub3JlLXBsYWNlbWVudFwiOnt0eXBlOlwiYm9vbGVhblwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsZGVmYXVsdDohMSxyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCJdfSxcInRleHQtb3B0aW9uYWxcIjp7dHlwZTpcImJvb2xlYW5cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLGRlZmF1bHQ6ITEscmVxdWlyZXM6W1widGV4dC1maWVsZFwiLFwiaWNvbi1pbWFnZVwiXX0sdmlzaWJpbGl0eTp7dHlwZTpcImVudW1cIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDpcInZpc2libGVcIn19LGxheW91dF9yYXN0ZXI6e3Zpc2liaWxpdHk6e3R5cGU6XCJlbnVtXCIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6XCJ2aXNpYmxlXCJ9fSxsYXlvdXRfaGlsbHNoYWRlOnt2aXNpYmlsaXR5Ont0eXBlOlwiZW51bVwiLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OlwidmlzaWJsZVwifX0sZmlsdGVyOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcIipcIn0sZmlsdGVyX29wZXJhdG9yOnt0eXBlOlwiZW51bVwiLHZhbHVlczp7XCI9PVwiOnt9LFwiIT1cIjp7fSxcIj5cIjp7fSxcIj49XCI6e30sXCI8XCI6e30sXCI8PVwiOnt9LGluOnt9LFwiIWluXCI6e30sYWxsOnt9LGFueTp7fSxub25lOnt9LGhhczp7fSxcIiFoYXNcIjp7fX19LGdlb21ldHJ5X3R5cGU6e3R5cGU6XCJlbnVtXCIsdmFsdWVzOntQb2ludDp7fSxMaW5lU3RyaW5nOnt9LFBvbHlnb246e319fSxmdW5jdGlvbl9zdG9wOnt0eXBlOlwiYXJyYXlcIixtaW5pbXVtOjAsbWF4aW11bToyMix2YWx1ZTpbXCJudW1iZXJcIixcImNvbG9yXCJdLGxlbmd0aDoyfSxleHByZXNzaW9uOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcIipcIixtaW5pbXVtOjF9LGV4cHJlc3Npb25fbmFtZTp7dHlwZTpcImVudW1cIix2YWx1ZXM6e2xldDp7Z3JvdXA6XCJWYXJpYWJsZSBiaW5kaW5nXCJ9LHZhcjp7Z3JvdXA6XCJWYXJpYWJsZSBiaW5kaW5nXCJ9LGxpdGVyYWw6e2dyb3VwOlwiVHlwZXNcIn0sYXJyYXk6e2dyb3VwOlwiVHlwZXNcIn0sYXQ6e2dyb3VwOlwiTG9va3VwXCJ9LGNhc2U6e2dyb3VwOlwiRGVjaXNpb25cIn0sbWF0Y2g6e2dyb3VwOlwiRGVjaXNpb25cIn0sY29hbGVzY2U6e2dyb3VwOlwiRGVjaXNpb25cIn0sc3RlcDp7Z3JvdXA6XCJSYW1wcywgc2NhbGVzLCBjdXJ2ZXNcIn0saW50ZXJwb2xhdGU6e2dyb3VwOlwiUmFtcHMsIHNjYWxlcywgY3VydmVzXCJ9LGxuMjp7Z3JvdXA6XCJNYXRoXCJ9LHBpOntncm91cDpcIk1hdGhcIn0sZTp7Z3JvdXA6XCJNYXRoXCJ9LHR5cGVvZjp7Z3JvdXA6XCJUeXBlc1wifSxzdHJpbmc6e2dyb3VwOlwiVHlwZXNcIn0sbnVtYmVyOntncm91cDpcIlR5cGVzXCJ9LGJvb2xlYW46e2dyb3VwOlwiVHlwZXNcIn0sb2JqZWN0Ontncm91cDpcIlR5cGVzXCJ9LGNvbGxhdG9yOntncm91cDpcIlR5cGVzXCJ9LFwidG8tc3RyaW5nXCI6e2dyb3VwOlwiVHlwZXNcIn0sXCJ0by1udW1iZXJcIjp7Z3JvdXA6XCJUeXBlc1wifSxcInRvLWJvb2xlYW5cIjp7Z3JvdXA6XCJUeXBlc1wifSxcInRvLXJnYmFcIjp7Z3JvdXA6XCJDb2xvclwifSxcInRvLWNvbG9yXCI6e2dyb3VwOlwiVHlwZXNcIn0scmdiOntncm91cDpcIkNvbG9yXCJ9LHJnYmE6e2dyb3VwOlwiQ29sb3JcIn0sZ2V0Ontncm91cDpcIkxvb2t1cFwifSxoYXM6e2dyb3VwOlwiTG9va3VwXCJ9LGxlbmd0aDp7Z3JvdXA6XCJMb29rdXBcIn0scHJvcGVydGllczp7Z3JvdXA6XCJGZWF0dXJlIGRhdGFcIn0sXCJnZW9tZXRyeS10eXBlXCI6e2dyb3VwOlwiRmVhdHVyZSBkYXRhXCJ9LGlkOntncm91cDpcIkZlYXR1cmUgZGF0YVwifSx6b29tOntncm91cDpcIlpvb21cIn0sXCJoZWF0bWFwLWRlbnNpdHlcIjp7Z3JvdXA6XCJIZWF0bWFwXCJ9LFwibGluZS1wcm9ncmVzc1wiOntncm91cDpcIkhlYXRtYXBcIn0sXCIrXCI6e2dyb3VwOlwiTWF0aFwifSxcIipcIjp7Z3JvdXA6XCJNYXRoXCJ9LFwiLVwiOntncm91cDpcIk1hdGhcIn0sXCIvXCI6e2dyb3VwOlwiTWF0aFwifSxcIiVcIjp7Z3JvdXA6XCJNYXRoXCJ9LFwiXlwiOntncm91cDpcIk1hdGhcIn0sc3FydDp7Z3JvdXA6XCJNYXRoXCJ9LGxvZzEwOntncm91cDpcIk1hdGhcIn0sbG46e2dyb3VwOlwiTWF0aFwifSxsb2cyOntncm91cDpcIk1hdGhcIn0sc2luOntncm91cDpcIk1hdGhcIn0sY29zOntncm91cDpcIk1hdGhcIn0sdGFuOntncm91cDpcIk1hdGhcIn0sYXNpbjp7Z3JvdXA6XCJNYXRoXCJ9LGFjb3M6e2dyb3VwOlwiTWF0aFwifSxhdGFuOntncm91cDpcIk1hdGhcIn0sbWluOntncm91cDpcIk1hdGhcIn0sbWF4Ontncm91cDpcIk1hdGhcIn0scm91bmQ6e2dyb3VwOlwiTWF0aFwifSxhYnM6e2dyb3VwOlwiTWF0aFwifSxjZWlsOntncm91cDpcIk1hdGhcIn0sZmxvb3I6e2dyb3VwOlwiTWF0aFwifSxcIj09XCI6e2dyb3VwOlwiRGVjaXNpb25cIn0sXCIhPVwiOntncm91cDpcIkRlY2lzaW9uXCJ9LFwiPlwiOntncm91cDpcIkRlY2lzaW9uXCJ9LFwiPFwiOntncm91cDpcIkRlY2lzaW9uXCJ9LFwiPj1cIjp7Z3JvdXA6XCJEZWNpc2lvblwifSxcIjw9XCI6e2dyb3VwOlwiRGVjaXNpb25cIn0sYWxsOntncm91cDpcIkRlY2lzaW9uXCJ9LGFueTp7Z3JvdXA6XCJEZWNpc2lvblwifSxcIiFcIjp7Z3JvdXA6XCJEZWNpc2lvblwifSxcImlzLXN1cHBvcnRlZC1zY3JpcHRcIjp7Z3JvdXA6XCJTdHJpbmdcIn0sdXBjYXNlOntncm91cDpcIlN0cmluZ1wifSxkb3duY2FzZTp7Z3JvdXA6XCJTdHJpbmdcIn0sY29uY2F0Ontncm91cDpcIlN0cmluZ1wifSxcInJlc29sdmVkLWxvY2FsZVwiOntncm91cDpcIlN0cmluZ1wifX19LGxpZ2h0OnthbmNob3I6e3R5cGU6XCJlbnVtXCIsZGVmYXVsdDpcInZpZXdwb3J0XCIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LHRyYW5zaXRpb246ITEsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiExLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCJ9LHBvc2l0aW9uOnt0eXBlOlwiYXJyYXlcIixkZWZhdWx0OlsxLjE1LDIxMCwzMF0sbGVuZ3RoOjMsdmFsdWU6XCJudW1iZXJcIix0cmFuc2l0aW9uOiEwLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiExfSxjb2xvcjp7dHlwZTpcImNvbG9yXCIsZGVmYXVsdDpcIiNmZmZmZmZcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMSx0cmFuc2l0aW9uOiEwfSxpbnRlbnNpdHk6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0Oi41LG1pbmltdW06MCxtYXhpbXVtOjEsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITEsdHJhbnNpdGlvbjohMH19LHBhaW50OltcInBhaW50X2ZpbGxcIixcInBhaW50X2xpbmVcIixcInBhaW50X2NpcmNsZVwiLFwicGFpbnRfaGVhdG1hcFwiLFwicGFpbnRfZmlsbC1leHRydXNpb25cIixcInBhaW50X3N5bWJvbFwiLFwicGFpbnRfcmFzdGVyXCIsXCJwYWludF9oaWxsc2hhZGVcIixcInBhaW50X2JhY2tncm91bmRcIl0scGFpbnRfZmlsbDp7XCJmaWxsLWFudGlhbGlhc1wiOnt0eXBlOlwiYm9vbGVhblwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsZGVmYXVsdDohMH0sXCJmaWxsLW9wYWNpdHlcIjp7dHlwZTpcIm51bWJlclwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITB9LFwiZmlsbC1jb2xvclwiOnt0eXBlOlwiY29sb3JcIixkZWZhdWx0OlwiIzAwMDAwMFwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3tcIiFcIjpcImZpbGwtcGF0dGVyblwifV19LFwiZmlsbC1vdXRsaW5lLWNvbG9yXCI6e3R5cGU6XCJjb2xvclwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3tcIiFcIjpcImZpbGwtcGF0dGVyblwifSx7XCJmaWxsLWFudGlhbGlhc1wiOiEwfV19LFwiZmlsbC10cmFuc2xhdGVcIjp7dHlwZTpcImFycmF5XCIsdmFsdWU6XCJudW1iZXJcIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCx1bml0czpcInBpeGVsc1wifSxcImZpbGwtdHJhbnNsYXRlLWFuY2hvclwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6XCJtYXBcIixyZXF1aXJlczpbXCJmaWxsLXRyYW5zbGF0ZVwiXX0sXCJmaWxsLXBhdHRlcm5cIjp7dHlwZTpcInN0cmluZ1wiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMH19LHBhaW50X2xpbmU6e1wibGluZS1vcGFjaXR5XCI6e3R5cGU6XCJudW1iZXJcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCxkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwfSxcImxpbmUtY29sb3JcIjp7dHlwZTpcImNvbG9yXCIsZGVmYXVsdDpcIiMwMDAwMDBcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlt7XCIhXCI6XCJsaW5lLXBhdHRlcm5cIn1dfSxcImxpbmUtdHJhbnNsYXRlXCI6e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwibnVtYmVyXCIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6XCJwaXhlbHNcIn0sXCJsaW5lLXRyYW5zbGF0ZS1hbmNob3JcIjp7dHlwZTpcImVudW1cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OlwibWFwXCIscmVxdWlyZXM6W1wibGluZS10cmFuc2xhdGVcIl19LFwibGluZS13aWR0aFwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoxLG1pbmltdW06MCxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOlwicGl4ZWxzXCJ9LFwibGluZS1nYXAtd2lkdGhcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCx1bml0czpcInBpeGVsc1wifSxcImxpbmUtb2Zmc2V0XCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjAsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCx1bml0czpcInBpeGVsc1wifSxcImxpbmUtYmx1clwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLG1pbmltdW06MCxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOlwicGl4ZWxzXCJ9LFwibGluZS1kYXNoYXJyYXlcIjp7dHlwZTpcImFycmF5XCIsdmFsdWU6XCJudW1iZXJcIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOlwibGluZSB3aWR0aHNcIixyZXF1aXJlczpbe1wiIVwiOlwibGluZS1wYXR0ZXJuXCJ9XX0sXCJsaW5lLXBhdHRlcm5cIjp7dHlwZTpcInN0cmluZ1wiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMH0sXCJsaW5lLWdyYWRpZW50XCI6e3R5cGU6XCJjb2xvclwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITEsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiExLHRyYW5zaXRpb246ITEscmVxdWlyZXM6W3tcIiFcIjpcImxpbmUtZGFzaGFycmF5XCJ9LHtcIiFcIjpcImxpbmUtcGF0dGVyblwifSx7c291cmNlOlwiZ2VvanNvblwiLGhhczp7bGluZU1ldHJpY3M6ITB9fV19fSxwYWludF9jaXJjbGU6e1wiY2lyY2xlLXJhZGl1c1wiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDo1LG1pbmltdW06MCxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOlwicGl4ZWxzXCJ9LFwiY2lyY2xlLWNvbG9yXCI6e3R5cGU6XCJjb2xvclwiLGRlZmF1bHQ6XCIjMDAwMDAwXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMH0sXCJjaXJjbGUtYmx1clwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITB9LFwiY2lyY2xlLW9wYWNpdHlcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITB9LFwiY2lyY2xlLXRyYW5zbGF0ZVwiOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcIm51bWJlclwiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOlwicGl4ZWxzXCJ9LFwiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3JcIjp7dHlwZTpcImVudW1cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OlwibWFwXCIscmVxdWlyZXM6W1wiY2lyY2xlLXRyYW5zbGF0ZVwiXX0sXCJjaXJjbGUtcGl0Y2gtc2NhbGVcIjp7dHlwZTpcImVudW1cIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OlwibWFwXCJ9LFwiY2lyY2xlLXBpdGNoLWFsaWdubWVudFwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6XCJ2aWV3cG9ydFwifSxcImNpcmNsZS1zdHJva2Utd2lkdGhcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCx1bml0czpcInBpeGVsc1wifSxcImNpcmNsZS1zdHJva2UtY29sb3JcIjp7dHlwZTpcImNvbG9yXCIsZGVmYXVsdDpcIiMwMDAwMDBcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwfSxcImNpcmNsZS1zdHJva2Utb3BhY2l0eVwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMH19LHBhaW50X2hlYXRtYXA6e1wiaGVhdG1hcC1yYWRpdXNcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MzAsbWluaW11bToxLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6XCJwaXhlbHNcIn0sXCJoZWF0bWFwLXdlaWdodFwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoxLG1pbmltdW06MCxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiExfSxcImhlYXRtYXAtaW50ZW5zaXR5XCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjEsbWluaW11bTowLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiExLHRyYW5zaXRpb246ITB9LFwiaGVhdG1hcC1jb2xvclwiOnt0eXBlOlwiY29sb3JcIixkZWZhdWx0OltcImludGVycG9sYXRlXCIsW1wibGluZWFyXCJdLFtcImhlYXRtYXAtZGVuc2l0eVwiXSwwLFwicmdiYSgwLCAwLCAyNTUsIDApXCIsLjEsXCJyb3lhbGJsdWVcIiwuMyxcImN5YW5cIiwuNSxcImxpbWVcIiwuNyxcInllbGxvd1wiLDEsXCJyZWRcIl0sZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMSxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITEsdHJhbnNpdGlvbjohMX0sXCJoZWF0bWFwLW9wYWNpdHlcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiExLHRyYW5zaXRpb246ITB9fSxwYWludF9zeW1ib2w6e1wiaWNvbi1vcGFjaXR5XCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOltcImljb24taW1hZ2VcIl19LFwiaWNvbi1jb2xvclwiOnt0eXBlOlwiY29sb3JcIixkZWZhdWx0OlwiIzAwMDAwMFwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W1wiaWNvbi1pbWFnZVwiXX0sXCJpY29uLWhhbG8tY29sb3JcIjp7dHlwZTpcImNvbG9yXCIsZGVmYXVsdDpcInJnYmEoMCwgMCwgMCwgMClcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLFwicHJvcGVydHktZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOltcImljb24taW1hZ2VcIl19LFwiaWNvbi1oYWxvLXdpZHRoXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjAsbWluaW11bTowLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6XCJwaXhlbHNcIixyZXF1aXJlczpbXCJpY29uLWltYWdlXCJdfSxcImljb24taGFsby1ibHVyXCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjAsbWluaW11bTowLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6XCJwaXhlbHNcIixyZXF1aXJlczpbXCJpY29uLWltYWdlXCJdfSxcImljb24tdHJhbnNsYXRlXCI6e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwibnVtYmVyXCIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6XCJwaXhlbHNcIixyZXF1aXJlczpbXCJpY29uLWltYWdlXCJdfSxcImljb24tdHJhbnNsYXRlLWFuY2hvclwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6XCJtYXBcIixyZXF1aXJlczpbXCJpY29uLWltYWdlXCIsXCJpY29uLXRyYW5zbGF0ZVwiXX0sXCJ0ZXh0LW9wYWNpdHlcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W1widGV4dC1maWVsZFwiXX0sXCJ0ZXh0LWNvbG9yXCI6e3R5cGU6XCJjb2xvclwiLGRlZmF1bHQ6XCIjMDAwMDAwXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbXCJ0ZXh0LWZpZWxkXCJdfSxcInRleHQtaGFsby1jb2xvclwiOnt0eXBlOlwiY29sb3JcIixkZWZhdWx0OlwicmdiYSgwLCAwLCAwLCAwKVwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W1widGV4dC1maWVsZFwiXX0sXCJ0ZXh0LWhhbG8td2lkdGhcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCx1bml0czpcInBpeGVsc1wiLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC1oYWxvLWJsdXJcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCx1bml0czpcInBpeGVsc1wiLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC10cmFuc2xhdGVcIjp7dHlwZTpcImFycmF5XCIsdmFsdWU6XCJudW1iZXJcIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCx1bml0czpcInBpeGVsc1wiLHJlcXVpcmVzOltcInRleHQtZmllbGRcIl19LFwidGV4dC10cmFuc2xhdGUtYW5jaG9yXCI6e3R5cGU6XCJlbnVtXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDpcIm1hcFwiLHJlcXVpcmVzOltcInRleHQtZmllbGRcIixcInRleHQtdHJhbnNsYXRlXCJdfX0scGFpbnRfcmFzdGVyOntcInJhc3Rlci1vcGFjaXR5XCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITB9LFwicmFzdGVyLWh1ZS1yb3RhdGVcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMCx1bml0czpcImRlZ3JlZXNcIn0sXCJyYXN0ZXItYnJpZ2h0bmVzcy1taW5cIjp7dHlwZTpcIm51bWJlclwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsZGVmYXVsdDowLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMH0sXCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXhcIjp7dHlwZTpcIm51bWJlclwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMH0sXCJyYXN0ZXItc2F0dXJhdGlvblwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDowLG1pbmltdW06LTEsbWF4aW11bToxLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMH0sXCJyYXN0ZXItY29udHJhc3RcIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MCxtaW5pbXVtOi0xLG1heGltdW06MSxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITB9LFwicmFzdGVyLWZhZGUtZHVyYXRpb25cIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MzAwLG1pbmltdW06MCxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITEsdW5pdHM6XCJtaWxsaXNlY29uZHNcIn19LHBhaW50X2hpbGxzaGFkZTp7XCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWRpcmVjdGlvblwiOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDozMzUsbWluaW11bTowLG1heGltdW06MzU5LGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMX0sXCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWFuY2hvclwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6XCJ2aWV3cG9ydFwifSxcImhpbGxzaGFkZS1leGFnZ2VyYXRpb25cIjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6LjUsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITB9LFwiaGlsbHNoYWRlLXNoYWRvdy1jb2xvclwiOnt0eXBlOlwiY29sb3JcIixkZWZhdWx0OlwiIzAwMDAwMFwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdHJhbnNpdGlvbjohMH0sXCJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yXCI6e3R5cGU6XCJjb2xvclwiLGRlZmF1bHQ6XCIjRkZGRkZGXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwfSxcImhpbGxzaGFkZS1hY2NlbnQtY29sb3JcIjp7dHlwZTpcImNvbG9yXCIsZGVmYXVsdDpcIiMwMDAwMDBcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITB9fSxwYWludF9iYWNrZ3JvdW5kOntcImJhY2tncm91bmQtY29sb3JcIjp7dHlwZTpcImNvbG9yXCIsZGVmYXVsdDpcIiMwMDAwMDBcIixmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3tcIiFcIjpcImJhY2tncm91bmQtcGF0dGVyblwifV19LFwiYmFja2dyb3VuZC1wYXR0ZXJuXCI6e3R5cGU6XCJzdHJpbmdcIixmdW5jdGlvbjpcInBpZWNld2lzZS1jb25zdGFudFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITB9LFwiYmFja2dyb3VuZC1vcGFjaXR5XCI6e3R5cGU6XCJudW1iZXJcIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjpcImludGVycG9sYXRlZFwiLFwiem9vbS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITB9fSx0cmFuc2l0aW9uOntkdXJhdGlvbjp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MzAwLG1pbmltdW06MCx1bml0czpcIm1pbGxpc2Vjb25kc1wifSxkZWxheTp7dHlwZTpcIm51bWJlclwiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsdW5pdHM6XCJtaWxsaXNlY29uZHNcIn19LFwibGF5b3V0X2ZpbGwtZXh0cnVzaW9uXCI6e3Zpc2liaWxpdHk6e3R5cGU6XCJlbnVtXCIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6XCJ2aXNpYmxlXCJ9fSxmdW5jdGlvbjp7ZXhwcmVzc2lvbjp7dHlwZTpcImV4cHJlc3Npb25cIn0sc3RvcHM6e3R5cGU6XCJhcnJheVwiLHZhbHVlOlwiZnVuY3Rpb25fc3RvcFwifSxiYXNlOnt0eXBlOlwibnVtYmVyXCIsZGVmYXVsdDoxLG1pbmltdW06MH0scHJvcGVydHk6e3R5cGU6XCJzdHJpbmdcIixkZWZhdWx0OlwiJHpvb21cIn0sdHlwZTp7dHlwZTpcImVudW1cIix2YWx1ZXM6e2lkZW50aXR5Ont9LGV4cG9uZW50aWFsOnt9LGludGVydmFsOnt9LGNhdGVnb3JpY2FsOnt9fSxkZWZhdWx0OlwiZXhwb25lbnRpYWxcIn0sY29sb3JTcGFjZTp7dHlwZTpcImVudW1cIix2YWx1ZXM6e3JnYjp7fSxsYWI6e30saGNsOnt9fSxkZWZhdWx0OlwicmdiXCJ9LGRlZmF1bHQ6e3R5cGU6XCIqXCIscmVxdWlyZWQ6ITF9fSxcInBhaW50X2ZpbGwtZXh0cnVzaW9uXCI6e1wiZmlsbC1leHRydXNpb24tb3BhY2l0eVwiOnt0eXBlOlwibnVtYmVyXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITEsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMH0sXCJmaWxsLWV4dHJ1c2lvbi1jb2xvclwiOnt0eXBlOlwiY29sb3JcIixkZWZhdWx0OlwiIzAwMDAwMFwiLGZ1bmN0aW9uOlwiaW50ZXJwb2xhdGVkXCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsXCJwcm9wZXJ0eS1mdW5jdGlvblwiOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3tcIiFcIjpcImZpbGwtZXh0cnVzaW9uLXBhdHRlcm5cIn1dfSxcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZVwiOnt0eXBlOlwiYXJyYXlcIix2YWx1ZTpcIm51bWJlclwiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOlwicGl4ZWxzXCJ9LFwiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvclwiOnt0eXBlOlwiZW51bVwiLGZ1bmN0aW9uOlwicGllY2V3aXNlLWNvbnN0YW50XCIsXCJ6b29tLWZ1bmN0aW9uXCI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6XCJtYXBcIixyZXF1aXJlczpbXCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGVcIl19LFwiZmlsbC1leHRydXNpb24tcGF0dGVyblwiOnt0eXBlOlwic3RyaW5nXCIsZnVuY3Rpb246XCJwaWVjZXdpc2UtY29uc3RhbnRcIixcInpvb20tZnVuY3Rpb25cIjohMCx0cmFuc2l0aW9uOiEwfSxcImZpbGwtZXh0cnVzaW9uLWhlaWdodFwiOnt0eXBlOlwibnVtYmVyXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsZGVmYXVsdDowLG1pbmltdW06MCx1bml0czpcIm1ldGVyc1wiLHRyYW5zaXRpb246ITB9LFwiZmlsbC1leHRydXNpb24tYmFzZVwiOnt0eXBlOlwibnVtYmVyXCIsZnVuY3Rpb246XCJpbnRlcnBvbGF0ZWRcIixcInpvb20tZnVuY3Rpb25cIjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsZGVmYXVsdDowLG1pbmltdW06MCx1bml0czpcIm1ldGVyc1wiLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W1wiZmlsbC1leHRydXNpb24taGVpZ2h0XCJdfX19LEQ9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5tZXNzYWdlPSh0P3QrXCI6IFwiOlwiXCIpK3IsbiYmKHRoaXMuaWRlbnRpZmllcj1uKSxudWxsIT1lJiZlLl9fbGluZV9fJiYodGhpcy5saW5lPWUuX19saW5lX18pfTtmdW5jdGlvbiBQKHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZTtyZXR1cm4gcj9bbmV3IEQoZSxyLFwiY29uc3RhbnRzIGhhdmUgYmVlbiBkZXByZWNhdGVkIGFzIG9mIHY4XCIpXTpbXX1mdW5jdGlvbiBSKHQpe2Zvcih2YXIgZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGgtMTtyLS0gPjA7KWVbcl09YXJndW1lbnRzW3IrMV07Zm9yKHZhciBuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtmb3IodmFyIG8gaW4gYSl0W29dPWFbb119cmV0dXJuIHR9ZnVuY3Rpb24gRih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE51bWJlcnx8dCBpbnN0YW5jZW9mIFN0cmluZ3x8dCBpbnN0YW5jZW9mIEJvb2xlYW4/dC52YWx1ZU9mKCk6dH1mdW5jdGlvbiBCKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3QubWFwKEIpOkYodCl9dmFyIE49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLHIpLHRoaXMubWVzc2FnZT1yLHRoaXMua2V5PWV9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGV9KEVycm9yKSxqPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9W10pLHRoaXMucGFyZW50PXQsdGhpcy5iaW5kaW5ncz17fTtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdLGE9aVswXSxvPWlbMV07dGhpcy5iaW5kaW5nc1thXT1vfX07ai5wcm90b3R5cGUuY29uY2F0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaih0aGlzLHQpfSxqLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5iaW5kaW5nc1t0XSlyZXR1cm4gdGhpcy5iaW5kaW5nc1t0XTtpZih0aGlzLnBhcmVudClyZXR1cm4gdGhpcy5wYXJlbnQuZ2V0KHQpO3Rocm93IG5ldyBFcnJvcih0K1wiIG5vdCBmb3VuZCBpbiBzY29wZS5cIil9LGoucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4hIXRoaXMuYmluZGluZ3NbdF18fCEhdGhpcy5wYXJlbnQmJnRoaXMucGFyZW50Lmhhcyh0KX07dmFyIFY9e2tpbmQ6XCJudWxsXCJ9LFU9e2tpbmQ6XCJudW1iZXJcIn0scT17a2luZDpcInN0cmluZ1wifSxIPXtraW5kOlwiYm9vbGVhblwifSxHPXtraW5kOlwiY29sb3JcIn0sWT17a2luZDpcIm9iamVjdFwifSxXPXtraW5kOlwidmFsdWVcIn0sWD17a2luZDpcImNvbGxhdG9yXCJ9O2Z1bmN0aW9uIFoodCxlKXtyZXR1cm57a2luZDpcImFycmF5XCIsaXRlbVR5cGU6dCxOOmV9fWZ1bmN0aW9uICQodCl7aWYoXCJhcnJheVwiPT09dC5raW5kKXt2YXIgZT0kKHQuaXRlbVR5cGUpO3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0Lk4/XCJhcnJheTxcIitlK1wiLCBcIit0Lk4rXCI+XCI6XCJ2YWx1ZVwiPT09dC5pdGVtVHlwZS5raW5kP1wiYXJyYXlcIjpcImFycmF5PFwiK2UrXCI+XCJ9cmV0dXJuIHQua2luZH12YXIgSj1bVixVLHEsSCxHLFksWihXKV07ZnVuY3Rpb24gSyh0LGUpe2lmKFwiZXJyb3JcIj09PWUua2luZClyZXR1cm4gbnVsbDtpZihcImFycmF5XCI9PT10LmtpbmQpe2lmKFwiYXJyYXlcIj09PWUua2luZCYmIUsodC5pdGVtVHlwZSxlLml0ZW1UeXBlKSYmKFwibnVtYmVyXCIhPXR5cGVvZiB0Lk58fHQuTj09PWUuTikpcmV0dXJuIG51bGx9ZWxzZXtpZih0LmtpbmQ9PT1lLmtpbmQpcmV0dXJuIG51bGw7aWYoXCJ2YWx1ZVwiPT09dC5raW5kKWZvcih2YXIgcj0wLG49SjtyPG4ubGVuZ3RoO3IrPTEpaWYoIUsobltyXSxlKSlyZXR1cm4gbnVsbH1yZXR1cm5cIkV4cGVjdGVkIFwiKyQodCkrXCIgYnV0IGZvdW5kIFwiKyQoZSkrXCIgaW5zdGVhZC5cIn12YXIgUT1pKGZ1bmN0aW9uKHQsZSl7dmFyIHI9e3RyYW5zcGFyZW50OlswLDAsMCwwXSxhbGljZWJsdWU6WzI0MCwyNDgsMjU1LDFdLGFudGlxdWV3aGl0ZTpbMjUwLDIzNSwyMTUsMV0sYXF1YTpbMCwyNTUsMjU1LDFdLGFxdWFtYXJpbmU6WzEyNywyNTUsMjEyLDFdLGF6dXJlOlsyNDAsMjU1LDI1NSwxXSxiZWlnZTpbMjQ1LDI0NSwyMjAsMV0sYmlzcXVlOlsyNTUsMjI4LDE5NiwxXSxibGFjazpbMCwwLDAsMV0sYmxhbmNoZWRhbG1vbmQ6WzI1NSwyMzUsMjA1LDFdLGJsdWU6WzAsMCwyNTUsMV0sYmx1ZXZpb2xldDpbMTM4LDQzLDIyNiwxXSxicm93bjpbMTY1LDQyLDQyLDFdLGJ1cmx5d29vZDpbMjIyLDE4NCwxMzUsMV0sY2FkZXRibHVlOls5NSwxNTgsMTYwLDFdLGNoYXJ0cmV1c2U6WzEyNywyNTUsMCwxXSxjaG9jb2xhdGU6WzIxMCwxMDUsMzAsMV0sY29yYWw6WzI1NSwxMjcsODAsMV0sY29ybmZsb3dlcmJsdWU6WzEwMCwxNDksMjM3LDFdLGNvcm5zaWxrOlsyNTUsMjQ4LDIyMCwxXSxjcmltc29uOlsyMjAsMjAsNjAsMV0sY3lhbjpbMCwyNTUsMjU1LDFdLGRhcmtibHVlOlswLDAsMTM5LDFdLGRhcmtjeWFuOlswLDEzOSwxMzksMV0sZGFya2dvbGRlbnJvZDpbMTg0LDEzNCwxMSwxXSxkYXJrZ3JheTpbMTY5LDE2OSwxNjksMV0sZGFya2dyZWVuOlswLDEwMCwwLDFdLGRhcmtncmV5OlsxNjksMTY5LDE2OSwxXSxkYXJra2hha2k6WzE4OSwxODMsMTA3LDFdLGRhcmttYWdlbnRhOlsxMzksMCwxMzksMV0sZGFya29saXZlZ3JlZW46Wzg1LDEwNyw0NywxXSxkYXJrb3JhbmdlOlsyNTUsMTQwLDAsMV0sZGFya29yY2hpZDpbMTUzLDUwLDIwNCwxXSxkYXJrcmVkOlsxMzksMCwwLDFdLGRhcmtzYWxtb246WzIzMywxNTAsMTIyLDFdLGRhcmtzZWFncmVlbjpbMTQzLDE4OCwxNDMsMV0sZGFya3NsYXRlYmx1ZTpbNzIsNjEsMTM5LDFdLGRhcmtzbGF0ZWdyYXk6WzQ3LDc5LDc5LDFdLGRhcmtzbGF0ZWdyZXk6WzQ3LDc5LDc5LDFdLGRhcmt0dXJxdW9pc2U6WzAsMjA2LDIwOSwxXSxkYXJrdmlvbGV0OlsxNDgsMCwyMTEsMV0sZGVlcHBpbms6WzI1NSwyMCwxNDcsMV0sZGVlcHNreWJsdWU6WzAsMTkxLDI1NSwxXSxkaW1ncmF5OlsxMDUsMTA1LDEwNSwxXSxkaW1ncmV5OlsxMDUsMTA1LDEwNSwxXSxkb2RnZXJibHVlOlszMCwxNDQsMjU1LDFdLGZpcmVicmljazpbMTc4LDM0LDM0LDFdLGZsb3JhbHdoaXRlOlsyNTUsMjUwLDI0MCwxXSxmb3Jlc3RncmVlbjpbMzQsMTM5LDM0LDFdLGZ1Y2hzaWE6WzI1NSwwLDI1NSwxXSxnYWluc2Jvcm86WzIyMCwyMjAsMjIwLDFdLGdob3N0d2hpdGU6WzI0OCwyNDgsMjU1LDFdLGdvbGQ6WzI1NSwyMTUsMCwxXSxnb2xkZW5yb2Q6WzIxOCwxNjUsMzIsMV0sZ3JheTpbMTI4LDEyOCwxMjgsMV0sZ3JlZW46WzAsMTI4LDAsMV0sZ3JlZW55ZWxsb3c6WzE3MywyNTUsNDcsMV0sZ3JleTpbMTI4LDEyOCwxMjgsMV0saG9uZXlkZXc6WzI0MCwyNTUsMjQwLDFdLGhvdHBpbms6WzI1NSwxMDUsMTgwLDFdLGluZGlhbnJlZDpbMjA1LDkyLDkyLDFdLGluZGlnbzpbNzUsMCwxMzAsMV0saXZvcnk6WzI1NSwyNTUsMjQwLDFdLGtoYWtpOlsyNDAsMjMwLDE0MCwxXSxsYXZlbmRlcjpbMjMwLDIzMCwyNTAsMV0sbGF2ZW5kZXJibHVzaDpbMjU1LDI0MCwyNDUsMV0sbGF3bmdyZWVuOlsxMjQsMjUyLDAsMV0sbGVtb25jaGlmZm9uOlsyNTUsMjUwLDIwNSwxXSxsaWdodGJsdWU6WzE3MywyMTYsMjMwLDFdLGxpZ2h0Y29yYWw6WzI0MCwxMjgsMTI4LDFdLGxpZ2h0Y3lhbjpbMjI0LDI1NSwyNTUsMV0sbGlnaHRnb2xkZW5yb2R5ZWxsb3c6WzI1MCwyNTAsMjEwLDFdLGxpZ2h0Z3JheTpbMjExLDIxMSwyMTEsMV0sbGlnaHRncmVlbjpbMTQ0LDIzOCwxNDQsMV0sbGlnaHRncmV5OlsyMTEsMjExLDIxMSwxXSxsaWdodHBpbms6WzI1NSwxODIsMTkzLDFdLGxpZ2h0c2FsbW9uOlsyNTUsMTYwLDEyMiwxXSxsaWdodHNlYWdyZWVuOlszMiwxNzgsMTcwLDFdLGxpZ2h0c2t5Ymx1ZTpbMTM1LDIwNiwyNTAsMV0sbGlnaHRzbGF0ZWdyYXk6WzExOSwxMzYsMTUzLDFdLGxpZ2h0c2xhdGVncmV5OlsxMTksMTM2LDE1MywxXSxsaWdodHN0ZWVsYmx1ZTpbMTc2LDE5NiwyMjIsMV0sbGlnaHR5ZWxsb3c6WzI1NSwyNTUsMjI0LDFdLGxpbWU6WzAsMjU1LDAsMV0sbGltZWdyZWVuOls1MCwyMDUsNTAsMV0sbGluZW46WzI1MCwyNDAsMjMwLDFdLG1hZ2VudGE6WzI1NSwwLDI1NSwxXSxtYXJvb246WzEyOCwwLDAsMV0sbWVkaXVtYXF1YW1hcmluZTpbMTAyLDIwNSwxNzAsMV0sbWVkaXVtYmx1ZTpbMCwwLDIwNSwxXSxtZWRpdW1vcmNoaWQ6WzE4Niw4NSwyMTEsMV0sbWVkaXVtcHVycGxlOlsxNDcsMTEyLDIxOSwxXSxtZWRpdW1zZWFncmVlbjpbNjAsMTc5LDExMywxXSxtZWRpdW1zbGF0ZWJsdWU6WzEyMywxMDQsMjM4LDFdLG1lZGl1bXNwcmluZ2dyZWVuOlswLDI1MCwxNTQsMV0sbWVkaXVtdHVycXVvaXNlOls3MiwyMDksMjA0LDFdLG1lZGl1bXZpb2xldHJlZDpbMTk5LDIxLDEzMywxXSxtaWRuaWdodGJsdWU6WzI1LDI1LDExMiwxXSxtaW50Y3JlYW06WzI0NSwyNTUsMjUwLDFdLG1pc3R5cm9zZTpbMjU1LDIyOCwyMjUsMV0sbW9jY2FzaW46WzI1NSwyMjgsMTgxLDFdLG5hdmFqb3doaXRlOlsyNTUsMjIyLDE3MywxXSxuYXZ5OlswLDAsMTI4LDFdLG9sZGxhY2U6WzI1MywyNDUsMjMwLDFdLG9saXZlOlsxMjgsMTI4LDAsMV0sb2xpdmVkcmFiOlsxMDcsMTQyLDM1LDFdLG9yYW5nZTpbMjU1LDE2NSwwLDFdLG9yYW5nZXJlZDpbMjU1LDY5LDAsMV0sb3JjaGlkOlsyMTgsMTEyLDIxNCwxXSxwYWxlZ29sZGVucm9kOlsyMzgsMjMyLDE3MCwxXSxwYWxlZ3JlZW46WzE1MiwyNTEsMTUyLDFdLHBhbGV0dXJxdW9pc2U6WzE3NSwyMzgsMjM4LDFdLHBhbGV2aW9sZXRyZWQ6WzIxOSwxMTIsMTQ3LDFdLHBhcGF5YXdoaXA6WzI1NSwyMzksMjEzLDFdLHBlYWNocHVmZjpbMjU1LDIxOCwxODUsMV0scGVydTpbMjA1LDEzMyw2MywxXSxwaW5rOlsyNTUsMTkyLDIwMywxXSxwbHVtOlsyMjEsMTYwLDIyMSwxXSxwb3dkZXJibHVlOlsxNzYsMjI0LDIzMCwxXSxwdXJwbGU6WzEyOCwwLDEyOCwxXSxyZWJlY2NhcHVycGxlOlsxMDIsNTEsMTUzLDFdLHJlZDpbMjU1LDAsMCwxXSxyb3N5YnJvd246WzE4OCwxNDMsMTQzLDFdLHJveWFsYmx1ZTpbNjUsMTA1LDIyNSwxXSxzYWRkbGVicm93bjpbMTM5LDY5LDE5LDFdLHNhbG1vbjpbMjUwLDEyOCwxMTQsMV0sc2FuZHlicm93bjpbMjQ0LDE2NCw5NiwxXSxzZWFncmVlbjpbNDYsMTM5LDg3LDFdLHNlYXNoZWxsOlsyNTUsMjQ1LDIzOCwxXSxzaWVubmE6WzE2MCw4Miw0NSwxXSxzaWx2ZXI6WzE5MiwxOTIsMTkyLDFdLHNreWJsdWU6WzEzNSwyMDYsMjM1LDFdLHNsYXRlYmx1ZTpbMTA2LDkwLDIwNSwxXSxzbGF0ZWdyYXk6WzExMiwxMjgsMTQ0LDFdLHNsYXRlZ3JleTpbMTEyLDEyOCwxNDQsMV0sc25vdzpbMjU1LDI1MCwyNTAsMV0sc3ByaW5nZ3JlZW46WzAsMjU1LDEyNywxXSxzdGVlbGJsdWU6WzcwLDEzMCwxODAsMV0sdGFuOlsyMTAsMTgwLDE0MCwxXSx0ZWFsOlswLDEyOCwxMjgsMV0sdGhpc3RsZTpbMjE2LDE5MSwyMTYsMV0sdG9tYXRvOlsyNTUsOTksNzEsMV0sdHVycXVvaXNlOls2NCwyMjQsMjA4LDFdLHZpb2xldDpbMjM4LDEzMCwyMzgsMV0sd2hlYXQ6WzI0NSwyMjIsMTc5LDFdLHdoaXRlOlsyNTUsMjU1LDI1NSwxXSx3aGl0ZXNtb2tlOlsyNDUsMjQ1LDI0NSwxXSx5ZWxsb3c6WzI1NSwyNTUsMCwxXSx5ZWxsb3dncmVlbjpbMTU0LDIwNSw1MCwxXX07ZnVuY3Rpb24gbih0KXtyZXR1cm4odD1NYXRoLnJvdW5kKHQpKTwwPzA6dD4yNTU/MjU1OnR9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdDwwPzA6dD4xPzE6dH1mdW5jdGlvbiBhKHQpe3JldHVyblwiJVwiPT09dFt0Lmxlbmd0aC0xXT9uKHBhcnNlRmxvYXQodCkvMTAwKjI1NSk6bihwYXJzZUludCh0KSl9ZnVuY3Rpb24gbyh0KXtyZXR1cm5cIiVcIj09PXRbdC5sZW5ndGgtMV0/aShwYXJzZUZsb2F0KHQpLzEwMCk6aShwYXJzZUZsb2F0KHQpKX1mdW5jdGlvbiBzKHQsZSxyKXtyZXR1cm4gcjwwP3IrPTE6cj4xJiYoci09MSksNipyPDE/dCsoZS10KSpyKjY6MipyPDE/ZTozKnI8Mj90KyhlLXQpKigyLzMtcikqNjp0fXRyeXtlLnBhcnNlQ1NTQ29sb3I9ZnVuY3Rpb24odCl7dmFyIGUsaT10LnJlcGxhY2UoLyAvZyxcIlwiKS50b0xvd2VyQ2FzZSgpO2lmKGkgaW4gcilyZXR1cm4gcltpXS5zbGljZSgpO2lmKFwiI1wiPT09aVswXSlyZXR1cm4gND09PWkubGVuZ3RoPyhlPXBhcnNlSW50KGkuc3Vic3RyKDEpLDE2KSk+PTAmJmU8PTQwOTU/WygzODQwJmUpPj40fCgzODQwJmUpPj44LDI0MCZlfCgyNDAmZSk+PjQsMTUmZXwoMTUmZSk8PDQsMV06bnVsbDo3PT09aS5sZW5ndGgmJihlPXBhcnNlSW50KGkuc3Vic3RyKDEpLDE2KSk+PTAmJmU8PTE2Nzc3MjE1P1soMTY3MTE2ODAmZSk+PjE2LCg2NTI4MCZlKT4+OCwyNTUmZSwxXTpudWxsO3ZhciBsPWkuaW5kZXhPZihcIihcIiksYz1pLmluZGV4T2YoXCIpXCIpO2lmKC0xIT09bCYmYysxPT09aS5sZW5ndGgpe3ZhciB1PWkuc3Vic3RyKDAsbCksaD1pLnN1YnN0cihsKzEsYy0obCsxKSkuc3BsaXQoXCIsXCIpLGY9MTtzd2l0Y2godSl7Y2FzZVwicmdiYVwiOmlmKDQhPT1oLmxlbmd0aClyZXR1cm4gbnVsbDtmPW8oaC5wb3AoKSk7Y2FzZVwicmdiXCI6cmV0dXJuIDMhPT1oLmxlbmd0aD9udWxsOlthKGhbMF0pLGEoaFsxXSksYShoWzJdKSxmXTtjYXNlXCJoc2xhXCI6aWYoNCE9PWgubGVuZ3RoKXJldHVybiBudWxsO2Y9byhoLnBvcCgpKTtjYXNlXCJoc2xcIjppZigzIT09aC5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIHA9KHBhcnNlRmxvYXQoaFswXSklMzYwKzM2MCklMzYwLzM2MCxkPW8oaFsxXSksZz1vKGhbMl0pLHY9Zzw9LjU/ZyooZCsxKTpnK2QtZypkLG09MipnLXY7cmV0dXJuW24oMjU1KnMobSx2LHArMS8zKSksbigyNTUqcyhtLHYscCkpLG4oMjU1KnMobSx2LHAtMS8zKSksZl07ZGVmYXVsdDpyZXR1cm4gbnVsbH19cmV0dXJuIG51bGx9fWNhdGNoKHQpe319KS5wYXJzZUNTU0NvbG9yLHR0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZvaWQgMD09PW4mJihuPTEpLHRoaXMucj10LHRoaXMuZz1lLHRoaXMuYj1yLHRoaXMuYT1ufTt0dC5wYXJzZT1mdW5jdGlvbih0KXtpZih0KXtpZih0IGluc3RhbmNlb2YgdHQpcmV0dXJuIHQ7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpe3ZhciBlPVEodCk7aWYoZSlyZXR1cm4gbmV3IHR0KGVbMF0vMjU1KmVbM10sZVsxXS8yNTUqZVszXSxlWzJdLzI1NSplWzNdLGVbM10pfX19LHR0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMudG9BcnJheSgpLGU9dFswXSxyPXRbMV0sbj10WzJdLGk9dFszXTtyZXR1cm5cInJnYmEoXCIrTWF0aC5yb3VuZChlKStcIixcIitNYXRoLnJvdW5kKHIpK1wiLFwiK01hdGgucm91bmQobikrXCIsXCIraStcIilcIn0sdHQucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnIsZT10aGlzLmcscj10aGlzLmIsbj10aGlzLmE7cmV0dXJuIDA9PT1uP1swLDAsMCwwXTpbMjU1KnQvbiwyNTUqZS9uLDI1NSpyL24sbl19LHR0LmJsYWNrPW5ldyB0dCgwLDAsMCwxKSx0dC53aGl0ZT1uZXcgdHQoMSwxLDEsMSksdHQudHJhbnNwYXJlbnQ9bmV3IHR0KDAsMCwwLDApO3ZhciBldD1mdW5jdGlvbih0LGUscil7dGhpcy5zZW5zaXRpdml0eT10P2U/XCJ2YXJpYW50XCI6XCJjYXNlXCI6ZT9cImFjY2VudFwiOlwiYmFzZVwiLHRoaXMubG9jYWxlPXIsdGhpcy5jb2xsYXRvcj1uZXcgSW50bC5Db2xsYXRvcih0aGlzLmxvY2FsZT90aGlzLmxvY2FsZTpbXSx7c2Vuc2l0aXZpdHk6dGhpcy5zZW5zaXRpdml0eSx1c2FnZTpcInNlYXJjaFwifSl9O2V0LnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY29sbGF0b3IuY29tcGFyZSh0LGUpfSxldC5wcm90b3R5cGUucmVzb2x2ZWRMb2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEludGwuQ29sbGF0b3IodGhpcy5sb2NhbGU/dGhpcy5sb2NhbGU6W10pLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZX07dmFyIHJ0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnR5cGU9WCx0aGlzLmxvY2FsZT1yLHRoaXMuY2FzZVNlbnNpdGl2ZT10LHRoaXMuZGlhY3JpdGljU2Vuc2l0aXZlPWV9O2Z1bmN0aW9uIG50KHQsZSxyLG4pe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wJiZ0PD0yNTUmJlwibnVtYmVyXCI9PXR5cGVvZiBlJiZlPj0wJiZlPD0yNTUmJlwibnVtYmVyXCI9PXR5cGVvZiByJiZyPj0wJiZyPD0yNTU/dm9pZCAwPT09bnx8XCJudW1iZXJcIj09dHlwZW9mIG4mJm4+PTAmJm48PTE/bnVsbDpcIkludmFsaWQgcmdiYSB2YWx1ZSBbXCIrW3QsZSxyLG5dLmpvaW4oXCIsIFwiKStcIl06ICdhJyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS5cIjpcIkludmFsaWQgcmdiYSB2YWx1ZSBbXCIrKFwibnVtYmVyXCI9PXR5cGVvZiBuP1t0LGUscixuXTpbdCxlLHJdKS5qb2luKFwiLCBcIikrXCJdOiAncicsICdnJywgYW5kICdiJyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjU1LlwifWZ1bmN0aW9uIGl0KHQpe2lmKG51bGw9PT10KXJldHVybiBWO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXJldHVybiBxO2lmKFwiYm9vbGVhblwiPT10eXBlb2YgdClyZXR1cm4gSDtpZihcIm51bWJlclwiPT10eXBlb2YgdClyZXR1cm4gVTtpZih0IGluc3RhbmNlb2YgdHQpcmV0dXJuIEc7aWYodCBpbnN0YW5jZW9mIGV0KXJldHVybiBYO2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZSxyPXQubGVuZ3RoLG49MCxpPXQ7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pdChpW25dKTtpZihlKXtpZihlPT09YSljb250aW51ZTtlPVc7YnJlYWt9ZT1hfXJldHVybiBaKGV8fFcscil9cmV0dXJuIFl9cnQucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigyIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoXCJFeHBlY3RlZCBvbmUgYXJndW1lbnQuXCIpO3ZhciByPXRbMV07aWYoXCJvYmplY3RcIiE9dHlwZW9mIHJ8fEFycmF5LmlzQXJyYXkocikpcmV0dXJuIGUuZXJyb3IoXCJDb2xsYXRvciBvcHRpb25zIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0LlwiKTt2YXIgbj1lLnBhcnNlKHZvaWQgMCE9PXJbXCJjYXNlLXNlbnNpdGl2ZVwiXSYmcltcImNhc2Utc2Vuc2l0aXZlXCJdLDEsSCk7aWYoIW4pcmV0dXJuIG51bGw7dmFyIGk9ZS5wYXJzZSh2b2lkIDAhPT1yW1wiZGlhY3JpdGljLXNlbnNpdGl2ZVwiXSYmcltcImRpYWNyaXRpYy1zZW5zaXRpdmVcIl0sMSxIKTtpZighaSlyZXR1cm4gbnVsbDt2YXIgYT1udWxsO3JldHVybiByLmxvY2FsZSYmIShhPWUucGFyc2Uoci5sb2NhbGUsMSxxKSk/bnVsbDpuZXcgcnQobixpLGEpfSxydC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBldCh0aGlzLmNhc2VTZW5zaXRpdmUuZXZhbHVhdGUodCksdGhpcy5kaWFjcml0aWNTZW5zaXRpdmUuZXZhbHVhdGUodCksdGhpcy5sb2NhbGU/dGhpcy5sb2NhbGUuZXZhbHVhdGUodCk6bnVsbCl9LHJ0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmNhc2VTZW5zaXRpdmUpLHQodGhpcy5kaWFjcml0aWNTZW5zaXRpdmUpLHRoaXMubG9jYWxlJiZ0KHRoaXMubG9jYWxlKX0scnQucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVyblt2b2lkIDBdfSxydC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9e307cmV0dXJuIHRbXCJjYXNlLXNlbnNpdGl2ZVwiXT10aGlzLmNhc2VTZW5zaXRpdmUuc2VyaWFsaXplKCksdFtcImRpYWNyaXRpYy1zZW5zaXRpdmVcIl09dGhpcy5kaWFjcml0aWNTZW5zaXRpdmUuc2VyaWFsaXplKCksdGhpcy5sb2NhbGUmJih0LmxvY2FsZT10aGlzLmxvY2FsZS5zZXJpYWxpemUoKSksW1wiY29sbGF0b3JcIix0XX07dmFyIGF0PWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPXQsdGhpcy52YWx1ZT1lfTthdC5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDIhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcihcIidsaXRlcmFsJyBleHByZXNzaW9uIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBidXQgZm91bmQgXCIrKHQubGVuZ3RoLTEpK1wiIGluc3RlYWQuXCIpO2lmKCFmdW5jdGlvbiB0KGUpe2lmKG51bGw9PT1lKXJldHVybiEwO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiEwO2lmKFwiYm9vbGVhblwiPT10eXBlb2YgZSlyZXR1cm4hMDtpZihcIm51bWJlclwiPT10eXBlb2YgZSlyZXR1cm4hMDtpZihlIGluc3RhbmNlb2YgdHQpcmV0dXJuITA7aWYoZSBpbnN0YW5jZW9mIGV0KXJldHVybiEwO2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgcj0wLG49ZTtyPG4ubGVuZ3RoO3IrPTEpaWYoIXQobltyXSkpcmV0dXJuITE7cmV0dXJuITB9aWYoXCJvYmplY3RcIj09dHlwZW9mIGUpe2Zvcih2YXIgaSBpbiBlKWlmKCF0KGVbaV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiExfSh0WzFdKSlyZXR1cm4gZS5lcnJvcihcImludmFsaWQgdmFsdWVcIik7dmFyIHI9dFsxXSxuPWl0KHIpLGk9ZS5leHBlY3RlZFR5cGU7cmV0dXJuXCJhcnJheVwiIT09bi5raW5kfHwwIT09bi5OfHwhaXx8XCJhcnJheVwiIT09aS5raW5kfHxcIm51bWJlclwiPT10eXBlb2YgaS5OJiYwIT09aS5OfHwobj1pKSxuZXcgYXQobixyKX0sYXQucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWV9LGF0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24oKXt9LGF0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy52YWx1ZV19LGF0LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm5cImFycmF5XCI9PT10aGlzLnR5cGUua2luZHx8XCJvYmplY3RcIj09PXRoaXMudHlwZS5raW5kP1tcImxpdGVyYWxcIix0aGlzLnZhbHVlXTp0aGlzLnZhbHVlIGluc3RhbmNlb2YgdHQ/W1wicmdiYVwiXS5jb25jYXQodGhpcy52YWx1ZS50b0FycmF5KCkpOnRoaXMudmFsdWV9O3ZhciBvdD1mdW5jdGlvbih0KXt0aGlzLm5hbWU9XCJFeHByZXNzaW9uRXZhbHVhdGlvbkVycm9yXCIsdGhpcy5tZXNzYWdlPXR9O290LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlfTt2YXIgc3Q9e3N0cmluZzpxLG51bWJlcjpVLGJvb2xlYW46SCxvYmplY3Q6WX0sbHQ9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9dCx0aGlzLmFyZ3M9ZX07bHQucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwyKXJldHVybiBlLmVycm9yKFwiRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LlwiKTtmb3IodmFyIHI9dFswXSxuPXN0W3JdLGk9W10sYT0xO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz1lLnBhcnNlKHRbYV0sYSxXKTtpZighbylyZXR1cm4gbnVsbDtpLnB1c2gobyl9cmV0dXJuIG5ldyBsdChuLGkpfSxsdC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0aGlzLmFyZ3MubGVuZ3RoO2UrKyl7dmFyIHI9dGhpcy5hcmdzW2VdLmV2YWx1YXRlKHQpO2lmKCFLKHRoaXMudHlwZSxpdChyKSkpcmV0dXJuIHI7aWYoZT09PXRoaXMuYXJncy5sZW5ndGgtMSl0aHJvdyBuZXcgb3QoXCJFeHBlY3RlZCB2YWx1ZSB0byBiZSBvZiB0eXBlIFwiKyQodGhpcy50eXBlKStcIiwgYnV0IGZvdW5kIFwiKyQoaXQocikpK1wiIGluc3RlYWQuXCIpfXJldHVybiBudWxsfSxsdC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3RoaXMuYXJncy5mb3JFYWNoKHQpfSxsdC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuKHQ9W10pLmNvbmNhdC5hcHBseSh0LHRoaXMuYXJncy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucG9zc2libGVPdXRwdXRzKCl9KSk7dmFyIHR9LGx0LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy50eXBlLmtpbmRdLmNvbmNhdCh0aGlzLmFyZ3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlcmlhbGl6ZSgpfSkpfTt2YXIgY3Q9e3N0cmluZzpxLG51bWJlcjpVLGJvb2xlYW46SH0sdXQ9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9dCx0aGlzLmlucHV0PWV9O3V0LnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8Mnx8dC5sZW5ndGg+NClyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIDEsIDIsIG9yIDMgYXJndW1lbnRzLCBidXQgZm91bmQgXCIrKHQubGVuZ3RoLTEpK1wiIGluc3RlYWQuXCIpO3ZhciByLG47aWYodC5sZW5ndGg+Mil7dmFyIGk9dFsxXTtpZihcInN0cmluZ1wiIT10eXBlb2YgaXx8IShpIGluIGN0KSlyZXR1cm4gZS5lcnJvcignVGhlIGl0ZW0gdHlwZSBhcmd1bWVudCBvZiBcImFycmF5XCIgbXVzdCBiZSBvbmUgb2Ygc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4nLDEpO3I9Y3RbaV19ZWxzZSByPVc7aWYodC5sZW5ndGg+Myl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHRbMl18fHRbMl08MHx8dFsyXSE9PU1hdGguZmxvb3IodFsyXSkpcmV0dXJuIGUuZXJyb3IoJ1RoZSBsZW5ndGggYXJndW1lbnQgdG8gXCJhcnJheVwiIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxpdGVyYWwnLDIpO249dFsyXX12YXIgYT1aKHIsbiksbz1lLnBhcnNlKHRbdC5sZW5ndGgtMV0sdC5sZW5ndGgtMSxXKTtyZXR1cm4gbz9uZXcgdXQoYSxvKTpudWxsfSx1dC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbnB1dC5ldmFsdWF0ZSh0KTtpZihLKHRoaXMudHlwZSxpdChlKSkpdGhyb3cgbmV3IG90KFwiRXhwZWN0ZWQgdmFsdWUgdG8gYmUgb2YgdHlwZSBcIiskKHRoaXMudHlwZSkrXCIsIGJ1dCBmb3VuZCBcIiskKGl0KGUpKStcIiBpbnN0ZWFkLlwiKTtyZXR1cm4gZX0sdXQucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5wdXQpfSx1dC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5wdXQucG9zc2libGVPdXRwdXRzKCl9LHV0LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD1bXCJhcnJheVwiXSxlPXRoaXMudHlwZS5pdGVtVHlwZTtpZihcInN0cmluZ1wiPT09ZS5raW5kfHxcIm51bWJlclwiPT09ZS5raW5kfHxcImJvb2xlYW5cIj09PWUua2luZCl7dC5wdXNoKGUua2luZCk7dmFyIHI9dGhpcy50eXBlLk47XCJudW1iZXJcIj09dHlwZW9mIHImJnQucHVzaChyKX1yZXR1cm4gdC5wdXNoKHRoaXMuaW5wdXQuc2VyaWFsaXplKCkpLHR9O3ZhciBodD17XCJ0by1udW1iZXJcIjpVLFwidG8tY29sb3JcIjpHfSxmdD1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT10LHRoaXMuYXJncz1lfTtmdC5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDIpcmV0dXJuIGUuZXJyb3IoXCJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuXCIpO2Zvcih2YXIgcj10WzBdLG49aHRbcl0saT1bXSxhPTE7YTx0Lmxlbmd0aDthKyspe3ZhciBvPWUucGFyc2UodFthXSxhLFcpO2lmKCFvKXJldHVybiBudWxsO2kucHVzaChvKX1yZXR1cm4gbmV3IGZ0KG4saSl9LGZ0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtpZihcImNvbG9yXCI9PT10aGlzLnR5cGUua2luZCl7Zm9yKHZhciBlLHIsbj0wLGk9dGhpcy5hcmdzO248aS5sZW5ndGg7bis9MSlpZihyPW51bGwsXCJzdHJpbmdcIj09dHlwZW9mKGU9aVtuXS5ldmFsdWF0ZSh0KSkpe3ZhciBhPXQucGFyc2VDb2xvcihlKTtpZihhKXJldHVybiBhfWVsc2UgaWYoQXJyYXkuaXNBcnJheShlKSYmIShyPWUubGVuZ3RoPDN8fGUubGVuZ3RoPjQ/XCJJbnZhbGlkIHJiZ2EgdmFsdWUgXCIrSlNPTi5zdHJpbmdpZnkoZSkrXCI6IGV4cGVjdGVkIGFuIGFycmF5IGNvbnRhaW5pbmcgZWl0aGVyIHRocmVlIG9yIGZvdXIgbnVtZXJpYyB2YWx1ZXMuXCI6bnQoZVswXSxlWzFdLGVbMl0sZVszXSkpKXJldHVybiBuZXcgdHQoZVswXS8yNTUsZVsxXS8yNTUsZVsyXS8yNTUsZVszXSk7dGhyb3cgbmV3IG90KHJ8fFwiQ291bGQgbm90IHBhcnNlIGNvbG9yIGZyb20gdmFsdWUgJ1wiKyhcInN0cmluZ1wiPT10eXBlb2YgZT9lOkpTT04uc3RyaW5naWZ5KGUpKStcIidcIil9Zm9yKHZhciBvPW51bGwscz0wLGw9dGhpcy5hcmdzO3M8bC5sZW5ndGg7cys9MSlpZihudWxsIT09KG89bFtzXS5ldmFsdWF0ZSh0KSkpe3ZhciBjPU51bWJlcihvKTtpZighaXNOYU4oYykpcmV0dXJuIGN9dGhyb3cgbmV3IG90KFwiQ291bGQgbm90IGNvbnZlcnQgXCIrSlNPTi5zdHJpbmdpZnkobykrXCIgdG8gbnVtYmVyLlwiKX0sZnQucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0aGlzLmFyZ3MuZm9yRWFjaCh0KX0sZnQucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVybih0PVtdKS5jb25jYXQuYXBwbHkodCx0aGlzLmFyZ3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBvc3NpYmxlT3V0cHV0cygpfSkpO3ZhciB0fSxmdC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9W1widG8tXCIrdGhpcy50eXBlLmtpbmRdO3JldHVybiB0aGlzLmVhY2hDaGlsZChmdW5jdGlvbihlKXt0LnB1c2goZS5zZXJpYWxpemUoKSl9KSx0fTt2YXIgcHQ9W1wiVW5rbm93blwiLFwiUG9pbnRcIixcIkxpbmVTdHJpbmdcIixcIlBvbHlnb25cIl0sZHQ9ZnVuY3Rpb24oKXt0aGlzLl9wYXJzZUNvbG9yQ2FjaGU9e319O2R0LnByb3RvdHlwZS5pZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZlYXR1cmUmJlwiaWRcImluIHRoaXMuZmVhdHVyZT90aGlzLmZlYXR1cmUuaWQ6bnVsbH0sZHQucHJvdG90eXBlLmdlb21ldHJ5VHlwZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZlYXR1cmU/XCJudW1iZXJcIj09dHlwZW9mIHRoaXMuZmVhdHVyZS50eXBlP3B0W3RoaXMuZmVhdHVyZS50eXBlXTp0aGlzLmZlYXR1cmUudHlwZTpudWxsfSxkdC5wcm90b3R5cGUucHJvcGVydGllcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZlYXR1cmUmJnRoaXMuZmVhdHVyZS5wcm9wZXJ0aWVzfHx7fX0sZHQucHJvdG90eXBlLnBhcnNlQ29sb3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcGFyc2VDb2xvckNhY2hlW3RdO3JldHVybiBlfHwoZT10aGlzLl9wYXJzZUNvbG9yQ2FjaGVbdF09dHQucGFyc2UodCkpLGV9O3ZhciBndD1mdW5jdGlvbih0LGUscixuKXt0aGlzLm5hbWU9dCx0aGlzLnR5cGU9ZSx0aGlzLl9ldmFsdWF0ZT1yLHRoaXMuYXJncz1ufTtmdW5jdGlvbiB2dCh0KXtpZih0IGluc3RhbmNlb2YgZ3Qpe2lmKFwiZ2V0XCI9PT10Lm5hbWUmJjE9PT10LmFyZ3MubGVuZ3RoKXJldHVybiExO2lmKFwiaGFzXCI9PT10Lm5hbWUmJjE9PT10LmFyZ3MubGVuZ3RoKXJldHVybiExO2lmKFwicHJvcGVydGllc1wiPT09dC5uYW1lfHxcImdlb21ldHJ5LXR5cGVcIj09PXQubmFtZXx8XCJpZFwiPT09dC5uYW1lKXJldHVybiExO2lmKC9eZmlsdGVyLS8udGVzdCh0Lm5hbWUpKXJldHVybiExfXZhciBlPSEwO3JldHVybiB0LmVhY2hDaGlsZChmdW5jdGlvbih0KXtlJiYhdnQodCkmJihlPSExKX0pLGV9ZnVuY3Rpb24gbXQodCxlKXtpZih0IGluc3RhbmNlb2YgZ3QmJmUuaW5kZXhPZih0Lm5hbWUpPj0wKXJldHVybiExO3ZhciByPSEwO3JldHVybiB0LmVhY2hDaGlsZChmdW5jdGlvbih0KXtyJiYhbXQodCxlKSYmKHI9ITEpfSkscn1ndC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2V2YWx1YXRlKHQsdGhpcy5hcmdzKX0sZ3QucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0aGlzLmFyZ3MuZm9yRWFjaCh0KX0sZ3QucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVyblt2b2lkIDBdfSxndC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMubmFtZV0uY29uY2F0KHRoaXMuYXJncy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VyaWFsaXplKCl9KSl9LGd0LnBhcnNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxuPWd0LmRlZmluaXRpb25zW3JdO2lmKCFuKXJldHVybiBlLmVycm9yKCdVbmtub3duIGV4cHJlc3Npb24gXCInK3IrJ1wiLiBJZiB5b3Ugd2FudGVkIGEgbGl0ZXJhbCBhcnJheSwgdXNlIFtcImxpdGVyYWxcIiwgWy4uLl1dLicsMCk7Zm9yKHZhciBpPUFycmF5LmlzQXJyYXkobik/blswXTpuLnR5cGUsYT1BcnJheS5pc0FycmF5KG4pP1tbblsxXSxuWzJdXV06bi5vdmVybG9hZHMsbz1hLmZpbHRlcihmdW5jdGlvbihlKXt2YXIgcj1lWzBdO3JldHVybiFBcnJheS5pc0FycmF5KHIpfHxyLmxlbmd0aD09PXQubGVuZ3RoLTF9KSxzPVtdLGw9MTtsPHQubGVuZ3RoO2wrKyl7dmFyIGM9dFtsXSx1PXZvaWQgMDtpZigxPT09by5sZW5ndGgpe3ZhciBoPW9bMF1bMF07dT1BcnJheS5pc0FycmF5KGgpP2hbbC0xXTpoLnR5cGV9dmFyIGY9ZS5wYXJzZShjLDErcy5sZW5ndGgsdSk7aWYoIWYpcmV0dXJuIG51bGw7cy5wdXNoKGYpfWZvcih2YXIgcD1udWxsLGQ9MCxnPW87ZDxnLmxlbmd0aDtkKz0xKXt2YXIgdj1nW2RdLG09dlswXSx5PXZbMV07aWYocD1uZXcgeHQoZS5yZWdpc3RyeSxlLnBhdGgsbnVsbCxlLnNjb3BlKSxBcnJheS5pc0FycmF5KG0pJiZtLmxlbmd0aCE9PXMubGVuZ3RoKXAuZXJyb3IoXCJFeHBlY3RlZCBcIittLmxlbmd0aCtcIiBhcmd1bWVudHMsIGJ1dCBmb3VuZCBcIitzLmxlbmd0aCtcIiBpbnN0ZWFkLlwiKTtlbHNle2Zvcih2YXIgeD0wO3g8cy5sZW5ndGg7eCsrKXt2YXIgYj1BcnJheS5pc0FycmF5KG0pP21beF06bS50eXBlLF89c1t4XTtwLmNvbmNhdCh4KzEpLmNoZWNrU3VidHlwZShiLF8udHlwZSl9aWYoMD09PXAuZXJyb3JzLmxlbmd0aClyZXR1cm4gbmV3IGd0KHIsaSx5LHMpfX1pZigxPT09by5sZW5ndGgpZS5lcnJvcnMucHVzaC5hcHBseShlLmVycm9ycyxwLmVycm9ycyk7ZWxzZXt2YXIgdz0oby5sZW5ndGg/bzphKS5tYXAoZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIGU9dFswXSxBcnJheS5pc0FycmF5KGUpP1wiKFwiK2UubWFwKCQpLmpvaW4oXCIsIFwiKStcIilcIjpcIihcIiskKGUudHlwZSkrXCIuLi4pXCJ9KS5qb2luKFwiIHwgXCIpLGs9cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuICQodC50eXBlKX0pLmpvaW4oXCIsIFwiKTtlLmVycm9yKFwiRXhwZWN0ZWQgYXJndW1lbnRzIG9mIHR5cGUgXCIrdytcIiwgYnV0IGZvdW5kIChcIitrK1wiKSBpbnN0ZWFkLlwiKX1yZXR1cm4gbnVsbH0sZ3QucmVnaXN0ZXI9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gZ3QuZGVmaW5pdGlvbnM9ZSxlKXRbcl09Z3R9O3ZhciB5dD1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT1lLnR5cGUsdGhpcy5uYW1lPXQsdGhpcy5ib3VuZEV4cHJlc3Npb249ZX07eXQucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigyIT09dC5sZW5ndGh8fFwic3RyaW5nXCIhPXR5cGVvZiB0WzFdKXJldHVybiBlLmVycm9yKFwiJ3ZhcicgZXhwcmVzc2lvbiByZXF1aXJlcyBleGFjdGx5IG9uZSBzdHJpbmcgbGl0ZXJhbCBhcmd1bWVudC5cIik7dmFyIHI9dFsxXTtyZXR1cm4gZS5zY29wZS5oYXMocik/bmV3IHl0KHIsZS5zY29wZS5nZXQocikpOmUuZXJyb3IoJ1Vua25vd24gdmFyaWFibGUgXCInK3IrJ1wiLiBNYWtlIHN1cmUgXCInK3IrJ1wiIGhhcyBiZWVuIGJvdW5kIGluIGFuIGVuY2xvc2luZyBcImxldFwiIGV4cHJlc3Npb24gYmVmb3JlIHVzaW5nIGl0LicsMSl9LHl0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5ib3VuZEV4cHJlc3Npb24uZXZhbHVhdGUodCl9LHl0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24oKXt9LHl0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm5bdm9pZCAwXX0seXQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybltcInZhclwiLHRoaXMubmFtZV19O3ZhciB4dD1mdW5jdGlvbih0LGUscixuLGkpe3ZvaWQgMD09PWUmJihlPVtdKSx2b2lkIDA9PT1uJiYobj1uZXcgaiksdm9pZCAwPT09aSYmKGk9W10pLHRoaXMucmVnaXN0cnk9dCx0aGlzLnBhdGg9ZSx0aGlzLmtleT1lLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cIltcIit0K1wiXVwifSkuam9pbihcIlwiKSx0aGlzLnNjb3BlPW4sdGhpcy5lcnJvcnM9aSx0aGlzLmV4cGVjdGVkVHlwZT1yfTtmdW5jdGlvbiBidCh0LGUpe2Zvcih2YXIgcixuLGk9MCxhPXQubGVuZ3RoLTEsbz0wO2k8PWE7KXtpZihyPXRbbz1NYXRoLmZsb29yKChpK2EpLzIpXSxuPXRbbysxXSxlPT09cnx8ZT5yJiZlPG4pcmV0dXJuIG87aWYocjxlKWk9bysxO2Vsc2V7aWYoIShyPmUpKXRocm93IG5ldyBvdChcIklucHV0IGlzIG5vdCBhIG51bWJlci5cIik7YT1vLTF9fXJldHVybiBNYXRoLm1heChvLTEsMCl9eHQucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIHZvaWQgMD09PWkmJihpPXt9KSxlP3RoaXMuY29uY2F0KGUscixuKS5fcGFyc2UodCxpKTp0aGlzLl9wYXJzZSh0LGkpfSx4dC5wcm90b3R5cGUuX3BhcnNlPWZ1bmN0aW9uKHQsZSl7aWYobnVsbCE9PXQmJlwic3RyaW5nXCIhPXR5cGVvZiB0JiZcImJvb2xlYW5cIiE9dHlwZW9mIHQmJlwibnVtYmVyXCIhPXR5cGVvZiB0fHwodD1bXCJsaXRlcmFsXCIsdF0pLEFycmF5LmlzQXJyYXkodCkpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gdGhpcy5lcnJvcignRXhwZWN0ZWQgYW4gYXJyYXkgd2l0aCBhdCBsZWFzdCBvbmUgZWxlbWVudC4gSWYgeW91IHdhbnRlZCBhIGxpdGVyYWwgYXJyYXksIHVzZSBbXCJsaXRlcmFsXCIsIFtdXS4nKTt2YXIgcj10WzBdO2lmKFwic3RyaW5nXCIhPXR5cGVvZiByKXJldHVybiB0aGlzLmVycm9yKFwiRXhwcmVzc2lvbiBuYW1lIG11c3QgYmUgYSBzdHJpbmcsIGJ1dCBmb3VuZCBcIit0eXBlb2YgcisnIGluc3RlYWQuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgW1wibGl0ZXJhbFwiLCBbLi4uXV0uJywwKSxudWxsO3ZhciBuPXRoaXMucmVnaXN0cnlbcl07aWYobil7dmFyIGk9bi5wYXJzZSh0LHRoaXMpO2lmKCFpKXJldHVybiBudWxsO2lmKHRoaXMuZXhwZWN0ZWRUeXBlKXt2YXIgYT10aGlzLmV4cGVjdGVkVHlwZSxvPWkudHlwZTtpZihcInN0cmluZ1wiIT09YS5raW5kJiZcIm51bWJlclwiIT09YS5raW5kJiZcImJvb2xlYW5cIiE9PWEua2luZCYmXCJvYmplY3RcIiE9PWEua2luZHx8XCJ2YWx1ZVwiIT09by5raW5kKWlmKFwiYXJyYXlcIj09PWEua2luZCYmXCJ2YWx1ZVwiPT09by5raW5kKWUub21pdFR5cGVBbm5vdGF0aW9uc3x8KGk9bmV3IHV0KGEsaSkpO2Vsc2UgaWYoXCJjb2xvclwiIT09YS5raW5kfHxcInZhbHVlXCIhPT1vLmtpbmQmJlwic3RyaW5nXCIhPT1vLmtpbmQpe2lmKHRoaXMuY2hlY2tTdWJ0eXBlKHRoaXMuZXhwZWN0ZWRUeXBlLGkudHlwZSkpcmV0dXJuIG51bGx9ZWxzZSBlLm9taXRUeXBlQW5ub3RhdGlvbnN8fChpPW5ldyBmdChhLFtpXSkpO2Vsc2UgZS5vbWl0VHlwZUFubm90YXRpb25zfHwoaT1uZXcgbHQoYSxbaV0pKX1pZighKGkgaW5zdGFuY2VvZiBhdCkmJmZ1bmN0aW9uIHQoZSl7aWYoZSBpbnN0YW5jZW9mIHl0KXJldHVybiB0KGUuYm91bmRFeHByZXNzaW9uKTtpZihlIGluc3RhbmNlb2YgZ3QmJlwiZXJyb3JcIj09PWUubmFtZSlyZXR1cm4hMTtpZihlIGluc3RhbmNlb2YgcnQpcmV0dXJuITE7dmFyIHI9ZSBpbnN0YW5jZW9mIGZ0fHxlIGluc3RhbmNlb2YgbHR8fGUgaW5zdGFuY2VvZiB1dCxuPSEwO3JldHVybiBlLmVhY2hDaGlsZChmdW5jdGlvbihlKXtuPXI/biYmdChlKTpuJiZlIGluc3RhbmNlb2YgYXR9KSwhIW4mJih2dChlKSYmbXQoZSxbXCJ6b29tXCIsXCJoZWF0bWFwLWRlbnNpdHlcIixcImxpbmUtcHJvZ3Jlc3NcIixcImlzLXN1cHBvcnRlZC1zY3JpcHRcIl0pKX0oaSkpe3ZhciBzPW5ldyBkdDt0cnl7aT1uZXcgYXQoaS50eXBlLGkuZXZhbHVhdGUocykpfWNhdGNoKHQpe3JldHVybiB0aGlzLmVycm9yKHQubWVzc2FnZSksbnVsbH19cmV0dXJuIGl9cmV0dXJuIHRoaXMuZXJyb3IoJ1Vua25vd24gZXhwcmVzc2lvbiBcIicrcisnXCIuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgW1wibGl0ZXJhbFwiLCBbLi4uXV0uJywwKX1yZXR1cm4gdm9pZCAwPT09dD90aGlzLmVycm9yKFwiJ3VuZGVmaW5lZCcgdmFsdWUgaW52YWxpZC4gVXNlIG51bGwgaW5zdGVhZC5cIik6XCJvYmplY3RcIj09dHlwZW9mIHQ/dGhpcy5lcnJvcignQmFyZSBvYmplY3RzIGludmFsaWQuIFVzZSBbXCJsaXRlcmFsXCIsIHsuLi59XSBpbnN0ZWFkLicpOnRoaXMuZXJyb3IoXCJFeHBlY3RlZCBhbiBhcnJheSwgYnV0IGZvdW5kIFwiK3R5cGVvZiB0K1wiIGluc3RlYWQuXCIpfSx4dC5wcm90b3R5cGUuY29uY2F0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1cIm51bWJlclwiPT10eXBlb2YgdD90aGlzLnBhdGguY29uY2F0KHQpOnRoaXMucGF0aCxpPXI/dGhpcy5zY29wZS5jb25jYXQocik6dGhpcy5zY29wZTtyZXR1cm4gbmV3IHh0KHRoaXMucmVnaXN0cnksbixlfHxudWxsLGksdGhpcy5lcnJvcnMpfSx4dC5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9YXJndW1lbnRzLmxlbmd0aC0xO3ItLSA+MDspZVtyXT1hcmd1bWVudHNbcisxXTt2YXIgbj1cIlwiK3RoaXMua2V5K2UubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiW1wiK3QrXCJdXCJ9KS5qb2luKFwiXCIpO3RoaXMuZXJyb3JzLnB1c2gobmV3IE4obix0KSl9LHh0LnByb3RvdHlwZS5jaGVja1N1YnR5cGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1LKHQsZSk7cmV0dXJuIHImJnRoaXMuZXJyb3Iocikscn07dmFyIF90PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnR5cGU9dCx0aGlzLmlucHV0PWUsdGhpcy5sYWJlbHM9W10sdGhpcy5vdXRwdXRzPVtdO2Zvcih2YXIgbj0wLGk9cjtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl0sbz1hWzBdLHM9YVsxXTt0aGlzLmxhYmVscy5wdXNoKG8pLHRoaXMub3V0cHV0cy5wdXNoKHMpfX07ZnVuY3Rpb24gd3QodCxlLHIpe3JldHVybiB0KigxLXIpK2Uqcn1fdC5wYXJzZT1mdW5jdGlvbih0LGUpe3ZhciByPXRbMV0sbj10LnNsaWNlKDIpO2lmKHQubGVuZ3RoLTE8NClyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIGF0IGxlYXN0IDQgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSBcIisodC5sZW5ndGgtMSkrXCIuXCIpO2lmKCh0Lmxlbmd0aC0xKSUyIT0wKXJldHVybiBlLmVycm9yKFwiRXhwZWN0ZWQgYW4gZXZlbiBudW1iZXIgb2YgYXJndW1lbnRzLlwiKTtpZighKHI9ZS5wYXJzZShyLDEsVSkpKXJldHVybiBudWxsO3ZhciBpPVtdLGE9bnVsbDtlLmV4cGVjdGVkVHlwZSYmXCJ2YWx1ZVwiIT09ZS5leHBlY3RlZFR5cGUua2luZCYmKGE9ZS5leHBlY3RlZFR5cGUpLG4udW5zaGlmdCgtMS8wKTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rPTIpe3ZhciBzPW5bb10sbD1uW28rMV0sYz1vKzEsdT1vKzI7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHMpcmV0dXJuIGUuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgXCJzdGVwXCIgZXhwcmVzc2lvbnMgbXVzdCBiZSBkZWZpbmVkIHVzaW5nIGxpdGVyYWwgbnVtZXJpYyB2YWx1ZXMgKG5vdCBjb21wdXRlZCBleHByZXNzaW9ucykgZm9yIHRoZSBpbnB1dCB2YWx1ZXMuJyxjKTtpZihpLmxlbmd0aCYmaVtpLmxlbmd0aC0xXVswXT49cylyZXR1cm4gZS5lcnJvcignSW5wdXQvb3V0cHV0IHBhaXJzIGZvciBcInN0ZXBcIiBleHByZXNzaW9ucyBtdXN0IGJlIGFycmFuZ2VkIHdpdGggaW5wdXQgdmFsdWVzIGluIHN0cmljdGx5IGFzY2VuZGluZyBvcmRlci4nLGMpO3ZhciBoPWUucGFyc2UobCx1LGEpO2lmKCFoKXJldHVybiBudWxsO2E9YXx8aC50eXBlLGkucHVzaChbcyxoXSl9cmV0dXJuIG5ldyBfdChhLHIsaSl9LF90LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhYmVscyxyPXRoaXMub3V0cHV0cztpZigxPT09ZS5sZW5ndGgpcmV0dXJuIHJbMF0uZXZhbHVhdGUodCk7dmFyIG49dGhpcy5pbnB1dC5ldmFsdWF0ZSh0KTtpZihuPD1lWzBdKXJldHVybiByWzBdLmV2YWx1YXRlKHQpO3ZhciBpPWUubGVuZ3RoO3JldHVybiBuPj1lW2ktMV0/cltpLTFdLmV2YWx1YXRlKHQpOnJbYnQoZSxuKV0uZXZhbHVhdGUodCl9LF90LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmlucHV0KTtmb3IodmFyIGU9MCxyPXRoaXMub3V0cHV0cztlPHIubGVuZ3RoO2UrPTEpdChyW2VdKX0sX3QucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVybih0PVtdKS5jb25jYXQuYXBwbHkodCx0aGlzLm91dHB1dHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBvc3NpYmxlT3V0cHV0cygpfSkpO3ZhciB0fSxfdC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtcInN0ZXBcIix0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXSxlPTA7ZTx0aGlzLmxhYmVscy5sZW5ndGg7ZSsrKWU+MCYmdC5wdXNoKHRoaXMubGFiZWxzW2VdKSx0LnB1c2godGhpcy5vdXRwdXRzW2VdLnNlcmlhbGl6ZSgpKTtyZXR1cm4gdH07dmFyIGt0PU9iamVjdC5mcmVlemUoe251bWJlcjp3dCxjb2xvcjpmdW5jdGlvbih0LGUscil7cmV0dXJuIG5ldyB0dCh3dCh0LnIsZS5yLHIpLHd0KHQuZyxlLmcsciksd3QodC5iLGUuYixyKSx3dCh0LmEsZS5hLHIpKX0sYXJyYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0LG4pe3JldHVybiB3dCh0LGVbbl0scil9KX19KSxBdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnR5cGU9dCx0aGlzLmludGVycG9sYXRpb249ZSx0aGlzLmlucHV0PXIsdGhpcy5sYWJlbHM9W10sdGhpcy5vdXRwdXRzPVtdO2Zvcih2YXIgaT0wLGE9bjtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV0scz1vWzBdLGw9b1sxXTt0aGlzLmxhYmVscy5wdXNoKHMpLHRoaXMub3V0cHV0cy5wdXNoKGwpfX07ZnVuY3Rpb24gVHQodCxlLHIsbil7dmFyIGk9bi1yLGE9dC1yO3JldHVybiAwPT09aT8wOjE9PT1lP2EvaTooTWF0aC5wb3coZSxhKS0xKS8oTWF0aC5wb3coZSxpKS0xKX1BdC5pbnRlcnBvbGF0aW9uRmFjdG9yPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTA7aWYoXCJleHBvbmVudGlhbFwiPT09dC5uYW1lKWk9VHQoZSx0LmJhc2UscixuKTtlbHNlIGlmKFwibGluZWFyXCI9PT10Lm5hbWUpaT1UdChlLDEscixuKTtlbHNlIGlmKFwiY3ViaWMtYmV6aWVyXCI9PT10Lm5hbWUpe3ZhciBvPXQuY29udHJvbFBvaW50cztpPW5ldyBhKG9bMF0sb1sxXSxvWzJdLG9bM10pLnNvbHZlKFR0KGUsMSxyLG4pKX1yZXR1cm4gaX0sQXQucGFyc2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10WzFdLG49dFsyXSxpPXQuc2xpY2UoMyk7aWYoIUFycmF5LmlzQXJyYXkocil8fDA9PT1yLmxlbmd0aClyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIGFuIGludGVycG9sYXRpb24gdHlwZSBleHByZXNzaW9uLlwiLDEpO2lmKFwibGluZWFyXCI9PT1yWzBdKXI9e25hbWU6XCJsaW5lYXJcIn07ZWxzZSBpZihcImV4cG9uZW50aWFsXCI9PT1yWzBdKXt2YXIgYT1yWzFdO2lmKFwibnVtYmVyXCIhPXR5cGVvZiBhKXJldHVybiBlLmVycm9yKFwiRXhwb25lbnRpYWwgaW50ZXJwb2xhdGlvbiByZXF1aXJlcyBhIG51bWVyaWMgYmFzZS5cIiwxLDEpO3I9e25hbWU6XCJleHBvbmVudGlhbFwiLGJhc2U6YX19ZWxzZXtpZihcImN1YmljLWJlemllclwiIT09clswXSlyZXR1cm4gZS5lcnJvcihcIlVua25vd24gaW50ZXJwb2xhdGlvbiB0eXBlIFwiK1N0cmluZyhyWzBdKSwxLDApO3ZhciBvPXIuc2xpY2UoMSk7aWYoNCE9PW8ubGVuZ3RofHxvLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuXCJudW1iZXJcIiE9dHlwZW9mIHR8fHQ8MHx8dD4xfSkpcmV0dXJuIGUuZXJyb3IoXCJDdWJpYyBiZXppZXIgaW50ZXJwb2xhdGlvbiByZXF1aXJlcyBmb3VyIG51bWVyaWMgYXJndW1lbnRzIHdpdGggdmFsdWVzIGJldHdlZW4gMCBhbmQgMS5cIiwxKTtyPXtuYW1lOlwiY3ViaWMtYmV6aWVyXCIsY29udHJvbFBvaW50czpvfX1pZih0Lmxlbmd0aC0xPDQpcmV0dXJuIGUuZXJyb3IoXCJFeHBlY3RlZCBhdCBsZWFzdCA0IGFyZ3VtZW50cywgYnV0IGZvdW5kIG9ubHkgXCIrKHQubGVuZ3RoLTEpK1wiLlwiKTtpZigodC5sZW5ndGgtMSklMiE9MClyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIGFuIGV2ZW4gbnVtYmVyIG9mIGFyZ3VtZW50cy5cIik7aWYoIShuPWUucGFyc2UobiwyLFUpKSlyZXR1cm4gbnVsbDt2YXIgcz1bXSxsPW51bGw7ZS5leHBlY3RlZFR5cGUmJlwidmFsdWVcIiE9PWUuZXhwZWN0ZWRUeXBlLmtpbmQmJihsPWUuZXhwZWN0ZWRUeXBlKTtmb3IodmFyIGM9MDtjPGkubGVuZ3RoO2MrPTIpe3ZhciB1PWlbY10saD1pW2MrMV0sZj1jKzMscD1jKzQ7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHUpcmV0dXJuIGUuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgXCJpbnRlcnBvbGF0ZVwiIGV4cHJlc3Npb25zIG11c3QgYmUgZGVmaW5lZCB1c2luZyBsaXRlcmFsIG51bWVyaWMgdmFsdWVzIChub3QgY29tcHV0ZWQgZXhwcmVzc2lvbnMpIGZvciB0aGUgaW5wdXQgdmFsdWVzLicsZik7aWYocy5sZW5ndGgmJnNbcy5sZW5ndGgtMV1bMF0+PXUpcmV0dXJuIGUuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgXCJpbnRlcnBvbGF0ZVwiIGV4cHJlc3Npb25zIG11c3QgYmUgYXJyYW5nZWQgd2l0aCBpbnB1dCB2YWx1ZXMgaW4gc3RyaWN0bHkgYXNjZW5kaW5nIG9yZGVyLicsZik7dmFyIGQ9ZS5wYXJzZShoLHAsbCk7aWYoIWQpcmV0dXJuIG51bGw7bD1sfHxkLnR5cGUscy5wdXNoKFt1LGRdKX1yZXR1cm5cIm51bWJlclwiPT09bC5raW5kfHxcImNvbG9yXCI9PT1sLmtpbmR8fFwiYXJyYXlcIj09PWwua2luZCYmXCJudW1iZXJcIj09PWwuaXRlbVR5cGUua2luZCYmXCJudW1iZXJcIj09dHlwZW9mIGwuTj9uZXcgQXQobCxyLG4scyk6ZS5lcnJvcihcIlR5cGUgXCIrJChsKStcIiBpcyBub3QgaW50ZXJwb2xhdGFibGUuXCIpfSxBdC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYWJlbHMscj10aGlzLm91dHB1dHM7aWYoMT09PWUubGVuZ3RoKXJldHVybiByWzBdLmV2YWx1YXRlKHQpO3ZhciBuPXRoaXMuaW5wdXQuZXZhbHVhdGUodCk7aWYobjw9ZVswXSlyZXR1cm4gclswXS5ldmFsdWF0ZSh0KTt2YXIgaT1lLmxlbmd0aDtpZihuPj1lW2ktMV0pcmV0dXJuIHJbaS0xXS5ldmFsdWF0ZSh0KTt2YXIgYT1idChlLG4pLG89ZVthXSxzPWVbYSsxXSxsPUF0LmludGVycG9sYXRpb25GYWN0b3IodGhpcy5pbnRlcnBvbGF0aW9uLG4sbyxzKSxjPXJbYV0uZXZhbHVhdGUodCksdT1yW2ErMV0uZXZhbHVhdGUodCk7cmV0dXJuIGt0W3RoaXMudHlwZS5raW5kLnRvTG93ZXJDYXNlKCldKGMsdSxsKX0sQXQucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5wdXQpO2Zvcih2YXIgZT0wLHI9dGhpcy5vdXRwdXRzO2U8ci5sZW5ndGg7ZSs9MSl0KHJbZV0pfSxBdC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuKHQ9W10pLmNvbmNhdC5hcHBseSh0LHRoaXMub3V0cHV0cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucG9zc2libGVPdXRwdXRzKCl9KSk7dmFyIHR9LEF0LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W1wiaW50ZXJwb2xhdGVcIixcImxpbmVhclwiPT09dGhpcy5pbnRlcnBvbGF0aW9uLm5hbWU/W1wibGluZWFyXCJdOlwiZXhwb25lbnRpYWxcIj09PXRoaXMuaW50ZXJwb2xhdGlvbi5uYW1lPzE9PT10aGlzLmludGVycG9sYXRpb24uYmFzZT9bXCJsaW5lYXJcIl06W1wiZXhwb25lbnRpYWxcIix0aGlzLmludGVycG9sYXRpb24uYmFzZV06W1wiY3ViaWMtYmV6aWVyXCJdLmNvbmNhdCh0aGlzLmludGVycG9sYXRpb24uY29udHJvbFBvaW50cyksdGhpcy5pbnB1dC5zZXJpYWxpemUoKV0sZT0wO2U8dGhpcy5sYWJlbHMubGVuZ3RoO2UrKyl0LnB1c2godGhpcy5sYWJlbHNbZV0sdGhpcy5vdXRwdXRzW2VdLnNlcmlhbGl6ZSgpKTtyZXR1cm4gdH07dmFyIE10PWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPXQsdGhpcy5hcmdzPWV9O010LnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MilyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC5cIik7dmFyIHI9bnVsbCxuPWUuZXhwZWN0ZWRUeXBlO24mJlwidmFsdWVcIiE9PW4ua2luZCYmKHI9bik7Zm9yKHZhciBpPVtdLGE9MCxvPXQuc2xpY2UoMSk7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdLGw9ZS5wYXJzZShzLDEraS5sZW5ndGgscix2b2lkIDAse29taXRUeXBlQW5ub3RhdGlvbnM6ITB9KTtpZighbClyZXR1cm4gbnVsbDtyPXJ8fGwudHlwZSxpLnB1c2gobCl9dmFyIGM9biYmaS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiBLKG4sdC50eXBlKX0pO3JldHVybiBuZXcgTXQoYz9XOnIsaSl9LE10LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9bnVsbCxyPTAsbj10aGlzLmFyZ3M7cjxuLmxlbmd0aCYmbnVsbD09PShlPW5bcl0uZXZhbHVhdGUodCkpO3IrPTEpO3JldHVybiBlfSxNdC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3RoaXMuYXJncy5mb3JFYWNoKHQpfSxNdC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuKHQ9W10pLmNvbmNhdC5hcHBseSh0LHRoaXMuYXJncy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucG9zc2libGVPdXRwdXRzKCl9KSk7dmFyIHR9LE10LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD1bXCJjb2FsZXNjZVwiXTtyZXR1cm4gdGhpcy5lYWNoQ2hpbGQoZnVuY3Rpb24oZSl7dC5wdXNoKGUuc2VyaWFsaXplKCkpfSksdH07dmFyIFN0PWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPWUudHlwZSx0aGlzLmJpbmRpbmdzPVtdLmNvbmNhdCh0KSx0aGlzLnJlc3VsdD1lfTtTdC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVzdWx0LmV2YWx1YXRlKHQpfSxTdC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dGhpcy5iaW5kaW5ncztlPHIubGVuZ3RoO2UrPTEpdChyW2VdWzFdKTt0KHRoaXMucmVzdWx0KX0sU3QucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDw0KXJldHVybiBlLmVycm9yKFwiRXhwZWN0ZWQgYXQgbGVhc3QgMyBhcmd1bWVudHMsIGJ1dCBmb3VuZCBcIisodC5sZW5ndGgtMSkrXCIgaW5zdGVhZC5cIik7Zm9yKHZhciByPVtdLG49MTtuPHQubGVuZ3RoLTE7bis9Mil7dmFyIGk9dFtuXTtpZihcInN0cmluZ1wiIT10eXBlb2YgaSlyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIHN0cmluZywgYnV0IGZvdW5kIFwiK3R5cGVvZiBpK1wiIGluc3RlYWQuXCIsbik7aWYoL1teYS16QS1aMC05X10vLnRlc3QoaSkpcmV0dXJuIGUuZXJyb3IoXCJWYXJpYWJsZSBuYW1lcyBtdXN0IGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBvciAnXycuXCIsbik7dmFyIGE9ZS5wYXJzZSh0W24rMV0sbisxKTtpZighYSlyZXR1cm4gbnVsbDtyLnB1c2goW2ksYV0pfXZhciBvPWUucGFyc2UodFt0Lmxlbmd0aC0xXSx0Lmxlbmd0aC0xLHZvaWQgMCxyKTtyZXR1cm4gbz9uZXcgU3QocixvKTpudWxsfSxTdC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVzdWx0LnBvc3NpYmxlT3V0cHV0cygpfSxTdC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtcImxldFwiXSxlPTAscj10aGlzLmJpbmRpbmdzO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXSxpPW5bMF0sYT1uWzFdO3QucHVzaChpLGEuc2VyaWFsaXplKCkpfXJldHVybiB0LnB1c2godGhpcy5yZXN1bHQuc2VyaWFsaXplKCkpLHR9O3ZhciBFdD1mdW5jdGlvbih0LGUscil7dGhpcy50eXBlPXQsdGhpcy5pbmRleD1lLHRoaXMuaW5wdXQ9cn07RXQucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigzIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoXCJFeHBlY3RlZCAyIGFyZ3VtZW50cywgYnV0IGZvdW5kIFwiKyh0Lmxlbmd0aC0xKStcIiBpbnN0ZWFkLlwiKTt2YXIgcj1lLnBhcnNlKHRbMV0sMSxVKSxuPWUucGFyc2UodFsyXSwyLFooZS5leHBlY3RlZFR5cGV8fFcpKTtpZighcnx8IW4pcmV0dXJuIG51bGw7dmFyIGk9bi50eXBlO3JldHVybiBuZXcgRXQoaS5pdGVtVHlwZSxyLG4pfSxFdC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbmRleC5ldmFsdWF0ZSh0KSxyPXRoaXMuaW5wdXQuZXZhbHVhdGUodCk7aWYoZTwwKXRocm93IG5ldyBvdChcIkFycmF5IGluZGV4IG91dCBvZiBib3VuZHM6IFwiK2UrXCIgPCAwLlwiKTtpZihlPj1yLmxlbmd0aCl0aHJvdyBuZXcgb3QoXCJBcnJheSBpbmRleCBvdXQgb2YgYm91bmRzOiBcIitlK1wiID4gXCIrKHIubGVuZ3RoLTEpK1wiLlwiKTtpZihlIT09TWF0aC5mbG9vcihlKSl0aHJvdyBuZXcgb3QoXCJBcnJheSBpbmRleCBtdXN0IGJlIGFuIGludGVnZXIsIGJ1dCBmb3VuZCBcIitlK1wiIGluc3RlYWQuXCIpO3JldHVybiByW2VdfSxFdC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbmRleCksdCh0aGlzLmlucHV0KX0sRXQucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVyblt2b2lkIDBdfSxFdC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuW1wiYXRcIix0aGlzLmluZGV4LnNlcmlhbGl6ZSgpLHRoaXMuaW5wdXQuc2VyaWFsaXplKCldfTt2YXIgQ3Q9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuaW5wdXRUeXBlPXQsdGhpcy50eXBlPWUsdGhpcy5pbnB1dD1yLHRoaXMuY2FzZXM9bix0aGlzLm91dHB1dHM9aSx0aGlzLm90aGVyd2lzZT1hfTtDdC5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDUpcmV0dXJuIGUuZXJyb3IoXCJFeHBlY3RlZCBhdCBsZWFzdCA0IGFyZ3VtZW50cywgYnV0IGZvdW5kIG9ubHkgXCIrKHQubGVuZ3RoLTEpK1wiLlwiKTtpZih0Lmxlbmd0aCUyIT0xKXJldHVybiBlLmVycm9yKFwiRXhwZWN0ZWQgYW4gZXZlbiBudW1iZXIgb2YgYXJndW1lbnRzLlwiKTt2YXIgcixuO2UuZXhwZWN0ZWRUeXBlJiZcInZhbHVlXCIhPT1lLmV4cGVjdGVkVHlwZS5raW5kJiYobj1lLmV4cGVjdGVkVHlwZSk7Zm9yKHZhciBpPXt9LGE9W10sbz0yO288dC5sZW5ndGgtMTtvKz0yKXt2YXIgcz10W29dLGw9dFtvKzFdO0FycmF5LmlzQXJyYXkocyl8fChzPVtzXSk7dmFyIGM9ZS5jb25jYXQobyk7aWYoMD09PXMubGVuZ3RoKXJldHVybiBjLmVycm9yKFwiRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGJyYW5jaCBsYWJlbC5cIik7Zm9yKHZhciB1PTAsaD1zO3U8aC5sZW5ndGg7dSs9MSl7dmFyIGY9aFt1XTtpZihcIm51bWJlclwiIT10eXBlb2YgZiYmXCJzdHJpbmdcIiE9dHlwZW9mIGYpcmV0dXJuIGMuZXJyb3IoXCJCcmFuY2ggbGFiZWxzIG11c3QgYmUgbnVtYmVycyBvciBzdHJpbmdzLlwiKTtpZihcIm51bWJlclwiPT10eXBlb2YgZiYmTWF0aC5hYnMoZik+TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpcmV0dXJuIGMuZXJyb3IoXCJCcmFuY2ggbGFiZWxzIG11c3QgYmUgaW50ZWdlcnMgbm8gbGFyZ2VyIHRoYW4gXCIrTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIrXCIuXCIpO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBmJiZNYXRoLmZsb29yKGYpIT09ZilyZXR1cm4gYy5lcnJvcihcIk51bWVyaWMgYnJhbmNoIGxhYmVscyBtdXN0IGJlIGludGVnZXIgdmFsdWVzLlwiKTtpZihyKXtpZihjLmNoZWNrU3VidHlwZShyLGl0KGYpKSlyZXR1cm4gbnVsbH1lbHNlIHI9aXQoZik7aWYodm9pZCAwIT09aVtTdHJpbmcoZildKXJldHVybiBjLmVycm9yKFwiQnJhbmNoIGxhYmVscyBtdXN0IGJlIHVuaXF1ZS5cIik7aVtTdHJpbmcoZildPWEubGVuZ3RofXZhciBwPWUucGFyc2UobCxvLG4pO2lmKCFwKXJldHVybiBudWxsO249bnx8cC50eXBlLGEucHVzaChwKX12YXIgZD1lLnBhcnNlKHRbMV0sMSxyKTtpZighZClyZXR1cm4gbnVsbDt2YXIgZz1lLnBhcnNlKHRbdC5sZW5ndGgtMV0sdC5sZW5ndGgtMSxuKTtyZXR1cm4gZz9uZXcgQ3QocixuLGQsaSxhLGcpOm51bGx9LEN0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlucHV0LmV2YWx1YXRlKHQpO3JldHVybih0aGlzLm91dHB1dHNbdGhpcy5jYXNlc1tlXV18fHRoaXMub3RoZXJ3aXNlKS5ldmFsdWF0ZSh0KX0sQ3QucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5wdXQpLHRoaXMub3V0cHV0cy5mb3JFYWNoKHQpLHQodGhpcy5vdGhlcndpc2UpfSxDdC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuKHQ9W10pLmNvbmNhdC5hcHBseSh0LHRoaXMub3V0cHV0cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucG9zc2libGVPdXRwdXRzKCl9KSkuY29uY2F0KHRoaXMub3RoZXJ3aXNlLnBvc3NpYmxlT3V0cHV0cygpKTt2YXIgdH0sQ3QucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W1wibWF0Y2hcIix0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXSxyPVtdLG49e30saT0wLGE9T2JqZWN0LmtleXModGhpcy5jYXNlcykuc29ydCgpO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXSxzPW5bdC5jYXNlc1tvXV07dm9pZCAwPT09cz8oblt0LmNhc2VzW29dXT1yLmxlbmd0aCxyLnB1c2goW3QuY2FzZXNbb10sW29dXSkpOnJbc11bMV0ucHVzaChvKX1mb3IodmFyIGw9ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09PXQuaW5wdXQudHlwZS5raW5kP051bWJlcihlKTplfSxjPTAsdT1yO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGg9dVtjXSxmPWhbMF0scD1oWzFdOzE9PT1wLmxlbmd0aD9lLnB1c2gobChwWzBdKSk6ZS5wdXNoKHAubWFwKGwpKSxlLnB1c2godC5vdXRwdXRzW2ZdLnNlcmlhbGl6ZSgpKX1yZXR1cm4gZS5wdXNoKHRoaXMub3RoZXJ3aXNlLnNlcmlhbGl6ZSgpKSxlfTt2YXIgTHQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMudHlwZT10LHRoaXMuYnJhbmNoZXM9ZSx0aGlzLm90aGVyd2lzZT1yfTtmdW5jdGlvbiB6dCh0KXtyZXR1cm5cInN0cmluZ1wiPT09dC5raW5kfHxcIm51bWJlclwiPT09dC5raW5kfHxcImJvb2xlYW5cIj09PXQua2luZHx8XCJudWxsXCI9PT10LmtpbmR9ZnVuY3Rpb24gT3QodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtmdW5jdGlvbiByKHQsZSxyKXt0aGlzLnR5cGU9SCx0aGlzLmxocz10LHRoaXMucmhzPWUsdGhpcy5jb2xsYXRvcj1yfXJldHVybiByLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYoMyE9PXQubGVuZ3RoJiY0IT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoXCJFeHBlY3RlZCB0d28gb3IgdGhyZWUgYXJndW1lbnRzLlwiKTt2YXIgbj1lLnBhcnNlKHRbMV0sMSxXKTtpZighbilyZXR1cm4gbnVsbDt2YXIgaT1lLnBhcnNlKHRbMl0sMixXKTtpZighaSlyZXR1cm4gbnVsbDtpZighenQobi50eXBlKSYmIXp0KGkudHlwZSkpcmV0dXJuIGUuZXJyb3IoXCJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQgdG8gYmUgYSBzdHJpbmcsIG51bWJlciwgYm9vbGVhbiwgb3IgbnVsbCwgYnV0IGZvdW5kIChcIiskKG4udHlwZSkrXCIsIFwiKyQoaS50eXBlKStcIikgaW5zdGVhZC5cIik7aWYobi50eXBlLmtpbmQhPT1pLnR5cGUua2luZCYmXCJ2YWx1ZVwiIT09bi50eXBlLmtpbmQmJlwidmFsdWVcIiE9PWkudHlwZS5raW5kKXJldHVybiBlLmVycm9yKFwiQ2Fubm90IGNvbXBhcmUgXCIrJChuLnR5cGUpK1wiIGFuZCBcIiskKGkudHlwZSkrXCIuXCIpO3ZhciBhPW51bGw7aWYoND09PXQubGVuZ3RoKXtpZihcInN0cmluZ1wiIT09bi50eXBlLmtpbmQmJlwic3RyaW5nXCIhPT1pLnR5cGUua2luZClyZXR1cm4gZS5lcnJvcihcIkNhbm5vdCB1c2UgY29sbGF0b3IgdG8gY29tcGFyZSBub24tc3RyaW5nIHR5cGVzLlwiKTtpZighKGE9ZS5wYXJzZSh0WzNdLDMsWCkpKXJldHVybiBudWxsfXJldHVybiBuZXcgcihuLGksYSl9LHIucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXMuY29sbGF0b3I/MD09PXRoaXMuY29sbGF0b3IuZXZhbHVhdGUodCkuY29tcGFyZSh0aGlzLmxocy5ldmFsdWF0ZSh0KSx0aGlzLnJocy5ldmFsdWF0ZSh0KSk6dGhpcy5saHMuZXZhbHVhdGUodCk9PT10aGlzLnJocy5ldmFsdWF0ZSh0KTtyZXR1cm4gZT8hcjpyfSxyLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmxocyksdCh0aGlzLnJocyksdGhpcy5jb2xsYXRvciYmdCh0aGlzLmNvbGxhdG9yKX0sci5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuWyEwLCExXX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIGU9W3RdO3JldHVybiB0aGlzLmVhY2hDaGlsZChmdW5jdGlvbih0KXtlLnB1c2godC5zZXJpYWxpemUoKSl9KSxlfSxyfSgpfUx0LnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8NClyZXR1cm4gZS5lcnJvcihcIkV4cGVjdGVkIGF0IGxlYXN0IDMgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSBcIisodC5sZW5ndGgtMSkrXCIuXCIpO2lmKHQubGVuZ3RoJTIhPTApcmV0dXJuIGUuZXJyb3IoXCJFeHBlY3RlZCBhbiBvZGQgbnVtYmVyIG9mIGFyZ3VtZW50cy5cIik7dmFyIHI7ZS5leHBlY3RlZFR5cGUmJlwidmFsdWVcIiE9PWUuZXhwZWN0ZWRUeXBlLmtpbmQmJihyPWUuZXhwZWN0ZWRUeXBlKTtmb3IodmFyIG49W10saT0xO2k8dC5sZW5ndGgtMTtpKz0yKXt2YXIgYT1lLnBhcnNlKHRbaV0saSxIKTtpZighYSlyZXR1cm4gbnVsbDt2YXIgbz1lLnBhcnNlKHRbaSsxXSxpKzEscik7aWYoIW8pcmV0dXJuIG51bGw7bi5wdXNoKFthLG9dKSxyPXJ8fG8udHlwZX12YXIgcz1lLnBhcnNlKHRbdC5sZW5ndGgtMV0sdC5sZW5ndGgtMSxyKTtyZXR1cm4gcz9uZXcgTHQocixuLHMpOm51bGx9LEx0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRoaXMuYnJhbmNoZXM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9blswXSxhPW5bMV07aWYoaS5ldmFsdWF0ZSh0KSlyZXR1cm4gYS5ldmFsdWF0ZSh0KX1yZXR1cm4gdGhpcy5vdGhlcndpc2UuZXZhbHVhdGUodCl9LEx0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10aGlzLmJyYW5jaGVzO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXSxpPW5bMF0sYT1uWzFdO3QoaSksdChhKX10KHRoaXMub3RoZXJ3aXNlKX0sTHQucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVybih0PVtdKS5jb25jYXQuYXBwbHkodCx0aGlzLmJyYW5jaGVzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFswXSx0WzFdLnBvc3NpYmxlT3V0cHV0cygpfSkpLmNvbmNhdCh0aGlzLm90aGVyd2lzZS5wb3NzaWJsZU91dHB1dHMoKSk7dmFyIHR9LEx0LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD1bXCJjYXNlXCJdO3JldHVybiB0aGlzLmVhY2hDaGlsZChmdW5jdGlvbihlKXt0LnB1c2goZS5zZXJpYWxpemUoKSl9KSx0fTt2YXIgSXQ9T3QoXCI9PVwiLCExKSxEdD1PdChcIiE9XCIsITApLFB0PWZ1bmN0aW9uKHQpe3RoaXMudHlwZT1VLHRoaXMuaW5wdXQ9dH07UHQucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigyIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoXCJFeHBlY3RlZCAxIGFyZ3VtZW50LCBidXQgZm91bmQgXCIrKHQubGVuZ3RoLTEpK1wiIGluc3RlYWQuXCIpO3ZhciByPWUucGFyc2UodFsxXSwxKTtyZXR1cm4gcj9cImFycmF5XCIhPT1yLnR5cGUua2luZCYmXCJzdHJpbmdcIiE9PXIudHlwZS5raW5kJiZcInZhbHVlXCIhPT1yLnR5cGUua2luZD9lLmVycm9yKFwiRXhwZWN0ZWQgYXJndW1lbnQgb2YgdHlwZSBzdHJpbmcgb3IgYXJyYXksIGJ1dCBmb3VuZCBcIiskKHIudHlwZSkrXCIgaW5zdGVhZC5cIik6bmV3IFB0KHIpOm51bGx9LFB0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlucHV0LmV2YWx1YXRlKHQpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBlLmxlbmd0aDtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlLmxlbmd0aDt0aHJvdyBuZXcgb3QoXCJFeHBlY3RlZCB2YWx1ZSB0byBiZSBvZiB0eXBlIHN0cmluZyBvciBhcnJheSwgYnV0IGZvdW5kIFwiKyQoaXQoZSkpK1wiIGluc3RlYWQuXCIpfSxQdC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbnB1dCl9LFB0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm5bdm9pZCAwXX0sUHQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PVtcImxlbmd0aFwiXTtyZXR1cm4gdGhpcy5lYWNoQ2hpbGQoZnVuY3Rpb24oZSl7dC5wdXNoKGUuc2VyaWFsaXplKCkpfSksdH07dmFyIFJ0PXtcIj09XCI6SXQsXCIhPVwiOkR0LGFycmF5OnV0LGF0OkV0LGJvb2xlYW46bHQsY2FzZTpMdCxjb2FsZXNjZTpNdCxjb2xsYXRvcjpydCxpbnRlcnBvbGF0ZTpBdCxsZW5ndGg6UHQsbGV0OlN0LGxpdGVyYWw6YXQsbWF0Y2g6Q3QsbnVtYmVyOmx0LG9iamVjdDpsdCxzdGVwOl90LHN0cmluZzpsdCxcInRvLWNvbG9yXCI6ZnQsXCJ0by1udW1iZXJcIjpmdCx2YXI6eXR9O2Z1bmN0aW9uIEZ0KHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXTtyPXIuZXZhbHVhdGUodCksbj1uLmV2YWx1YXRlKHQpLGk9aS5ldmFsdWF0ZSh0KTt2YXIgbz1hP2EuZXZhbHVhdGUodCk6MSxzPW50KHIsbixpLG8pO2lmKHMpdGhyb3cgbmV3IG90KHMpO3JldHVybiBuZXcgdHQoci8yNTUqbyxuLzI1NSpvLGkvMjU1Km8sbyl9ZnVuY3Rpb24gQnQodCxlKXtyZXR1cm4gdCBpbiBlfWZ1bmN0aW9uIE50KHQsZSl7dmFyIHI9ZVt0XTtyZXR1cm4gdm9pZCAwPT09cj9udWxsOnJ9ZnVuY3Rpb24ganQodCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KTxuLmV2YWx1YXRlKHQpfWZ1bmN0aW9uIFZ0KHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCk+bi5ldmFsdWF0ZSh0KX1mdW5jdGlvbiBVdCh0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiByLmV2YWx1YXRlKHQpPD1uLmV2YWx1YXRlKHQpfWZ1bmN0aW9uIHF0KHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCk+PW4uZXZhbHVhdGUodCl9ZnVuY3Rpb24gSHQodCl7cmV0dXJue3R5cGU6dH19ZnVuY3Rpb24gR3QodCl7cmV0dXJue3Jlc3VsdDpcInN1Y2Nlc3NcIix2YWx1ZTp0fX1mdW5jdGlvbiBZdCh0KXtyZXR1cm57cmVzdWx0OlwiZXJyb3JcIix2YWx1ZTp0fX1ndC5yZWdpc3RlcihSdCx7ZXJyb3I6W3traW5kOlwiZXJyb3JcIn0sW3FdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTt0aHJvdyBuZXcgb3Qoci5ldmFsdWF0ZSh0KSl9XSx0eXBlb2Y6W3EsW1ddLGZ1bmN0aW9uKHQsZSl7cmV0dXJuICQoaXQoZVswXS5ldmFsdWF0ZSh0KSkpfV0sXCJ0by1zdHJpbmdcIjpbcSxbV10sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49dHlwZW9mKHI9ci5ldmFsdWF0ZSh0KSk7cmV0dXJuIG51bGw9PT1yP1wiXCI6XCJzdHJpbmdcIj09PW58fFwibnVtYmVyXCI9PT1ufHxcImJvb2xlYW5cIj09PW4/U3RyaW5nKHIpOnIgaW5zdGFuY2VvZiB0dD9yLnRvU3RyaW5nKCk6SlNPTi5zdHJpbmdpZnkocil9XSxcInRvLWJvb2xlYW5cIjpbSCxbV10sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBCb29sZWFuKHIuZXZhbHVhdGUodCkpfV0sXCJ0by1yZ2JhXCI6W1ooVSw0KSxbR10sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS5ldmFsdWF0ZSh0KS50b0FycmF5KCl9XSxyZ2I6W0csW1UsVSxVXSxGdF0scmdiYTpbRyxbVSxVLFUsVV0sRnRdLGhhczp7dHlwZTpILG92ZXJsb2FkczpbW1txXSxmdW5jdGlvbih0LGUpe3JldHVybiBCdChlWzBdLmV2YWx1YXRlKHQpLHQucHJvcGVydGllcygpKX1dLFtbcSxZXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiBCdChyLmV2YWx1YXRlKHQpLG4uZXZhbHVhdGUodCkpfV1dfSxnZXQ6e3R5cGU6VyxvdmVybG9hZHM6W1tbcV0sZnVuY3Rpb24odCxlKXtyZXR1cm4gTnQoZVswXS5ldmFsdWF0ZSh0KSx0LnByb3BlcnRpZXMoKSl9XSxbW3EsWV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gTnQoci5ldmFsdWF0ZSh0KSxuLmV2YWx1YXRlKHQpKX1dXX0scHJvcGVydGllczpbWSxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5wcm9wZXJ0aWVzKCl9XSxcImdlb21ldHJ5LXR5cGVcIjpbcSxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZW9tZXRyeVR5cGUoKX1dLGlkOltXLFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkKCl9XSx6b29tOltVLFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdsb2JhbHMuem9vbX1dLFwiaGVhdG1hcC1kZW5zaXR5XCI6W1UsW10sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2xvYmFscy5oZWF0bWFwRGVuc2l0eXx8MH1dLFwibGluZS1wcm9ncmVzc1wiOltVLFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdsb2JhbHMubGluZVByb2dyZXNzfHwwfV0sXCIrXCI6W1UsSHQoVSksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTAsaT1lO248aS5sZW5ndGg7bis9MSlyKz1pW25dLmV2YWx1YXRlKHQpO3JldHVybiByfV0sXCIqXCI6W1UsSHQoVSksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MSxuPTAsaT1lO248aS5sZW5ndGg7bis9MSlyKj1pW25dLmV2YWx1YXRlKHQpO3JldHVybiByfV0sXCItXCI6e3R5cGU6VSxvdmVybG9hZHM6W1tbVSxVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiByLmV2YWx1YXRlKHQpLW4uZXZhbHVhdGUodCl9XSxbW1VdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuLWVbMF0uZXZhbHVhdGUodCl9XV19LFwiL1wiOltVLFtVLFVdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCkvbi5ldmFsdWF0ZSh0KX1dLFwiJVwiOltVLFtVLFVdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCklbi5ldmFsdWF0ZSh0KX1dLGxuMjpbVSxbXSxmdW5jdGlvbigpe3JldHVybiBNYXRoLkxOMn1dLHBpOltVLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguUEl9XSxlOltVLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguRX1dLFwiXlwiOltVLFtVLFVdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIE1hdGgucG93KHIuZXZhbHVhdGUodCksbi5ldmFsdWF0ZSh0KSl9XSxzcXJ0OltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguc3FydChyLmV2YWx1YXRlKHQpKX1dLGxvZzEwOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGgubG9nMTAoci5ldmFsdWF0ZSh0KSl9XSxsbjpbVSxbVV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmxvZyhyLmV2YWx1YXRlKHQpKX1dLGxvZzI6W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5sb2cyKHIuZXZhbHVhdGUodCkpfV0sc2luOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguc2luKHIuZXZhbHVhdGUodCkpfV0sY29zOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguY29zKHIuZXZhbHVhdGUodCkpfV0sdGFuOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGgudGFuKHIuZXZhbHVhdGUodCkpfV0sYXNpbjpbVSxbVV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmFzaW4oci5ldmFsdWF0ZSh0KSl9XSxhY29zOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguYWNvcyhyLmV2YWx1YXRlKHQpKX1dLGF0YW46W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5hdGFuKHIuZXZhbHVhdGUodCkpfV0sbWluOltVLEh0KFUpLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWluLmFwcGx5KE1hdGgsZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXZhbHVhdGUodCl9KSl9XSxtYXg6W1UsSHQoVSksZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXguYXBwbHkoTWF0aCxlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5ldmFsdWF0ZSh0KX0pKX1dLGFiczpbVSxbVV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmFicyhyLmV2YWx1YXRlKHQpKX1dLHJvdW5kOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0uZXZhbHVhdGUodCk7cmV0dXJuIHI8MD8tTWF0aC5yb3VuZCgtcik6TWF0aC5yb3VuZChyKX1dLGZsb29yOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguZmxvb3Ioci5ldmFsdWF0ZSh0KSl9XSxjZWlsOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguY2VpbChyLmV2YWx1YXRlKHQpKX1dLFwiZmlsdGVyLT09XCI6W0gsW3EsV10sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gdC5wcm9wZXJ0aWVzKClbci52YWx1ZV09PT1uLnZhbHVlfV0sXCJmaWx0ZXItaWQtPT1cIjpbSCxbV10sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiB0LmlkKCk9PT1yLnZhbHVlfV0sXCJmaWx0ZXItdHlwZS09PVwiOltILFtxXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIHQuZ2VvbWV0cnlUeXBlKCk9PT1yLnZhbHVlfV0sXCJmaWx0ZXItPFwiOltILFtxLFddLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT10LnByb3BlcnRpZXMoKVtyLnZhbHVlXSxhPW4udmFsdWU7cmV0dXJuIHR5cGVvZiBpPT10eXBlb2YgYSYmaTxhfV0sXCJmaWx0ZXItaWQtPFwiOltILFtXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj10LmlkKCksaT1yLnZhbHVlO3JldHVybiB0eXBlb2Ygbj09dHlwZW9mIGkmJm48aX1dLFwiZmlsdGVyLT5cIjpbSCxbcSxXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9dC5wcm9wZXJ0aWVzKClbci52YWx1ZV0sYT1uLnZhbHVlO3JldHVybiB0eXBlb2YgaT09dHlwZW9mIGEmJmk+YX1dLFwiZmlsdGVyLWlkLT5cIjpbSCxbV10sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49dC5pZCgpLGk9ci52YWx1ZTtyZXR1cm4gdHlwZW9mIG49PXR5cGVvZiBpJiZuPml9XSxcImZpbHRlci08PVwiOltILFtxLFddLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT10LnByb3BlcnRpZXMoKVtyLnZhbHVlXSxhPW4udmFsdWU7cmV0dXJuIHR5cGVvZiBpPT10eXBlb2YgYSYmaTw9YX1dLFwiZmlsdGVyLWlkLTw9XCI6W0gsW1ddLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPXQuaWQoKSxpPXIudmFsdWU7cmV0dXJuIHR5cGVvZiBuPT10eXBlb2YgaSYmbjw9aX1dLFwiZmlsdGVyLT49XCI6W0gsW3EsV10sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPXQucHJvcGVydGllcygpW3IudmFsdWVdLGE9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIGk9PXR5cGVvZiBhJiZpPj1hfV0sXCJmaWx0ZXItaWQtPj1cIjpbSCxbV10sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49dC5pZCgpLGk9ci52YWx1ZTtyZXR1cm4gdHlwZW9mIG49PXR5cGVvZiBpJiZuPj1pfV0sXCJmaWx0ZXItaGFzXCI6W0gsW1ddLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0udmFsdWUgaW4gdC5wcm9wZXJ0aWVzKCl9XSxcImZpbHRlci1oYXMtaWRcIjpbSCxbXSxmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9PXQuaWQoKX1dLFwiZmlsdGVyLXR5cGUtaW5cIjpbSCxbWihxKV0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS52YWx1ZS5pbmRleE9mKHQuZ2VvbWV0cnlUeXBlKCkpPj0wfV0sXCJmaWx0ZXItaWQtaW5cIjpbSCxbWihXKV0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS52YWx1ZS5pbmRleE9mKHQuaWQoKSk+PTB9XSxcImZpbHRlci1pbi1zbWFsbFwiOltILFtxLFooVyldLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gZVsxXS52YWx1ZS5pbmRleE9mKHQucHJvcGVydGllcygpW3IudmFsdWVdKT49MH1dLFwiZmlsdGVyLWluLWxhcmdlXCI6W0gsW3EsWihXKV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbil7Zm9yKDtyPD1uOyl7dmFyIGk9cituPj4xO2lmKGVbaV09PT10KXJldHVybiEwO2VbaV0+dD9uPWktMTpyPWkrMX1yZXR1cm4hMX0odC5wcm9wZXJ0aWVzKClbci52YWx1ZV0sbi52YWx1ZSwwLG4udmFsdWUubGVuZ3RoLTEpfV0sXCI+XCI6e3R5cGU6SCxvdmVybG9hZHM6W1tbVSxVXSxWdF0sW1txLHFdLFZ0XSxbW3EscSxYXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiBlWzJdLmV2YWx1YXRlKHQpLmNvbXBhcmUoci5ldmFsdWF0ZSh0KSxuLmV2YWx1YXRlKHQpKT4wfV1dfSxcIjxcIjp7dHlwZTpILG92ZXJsb2FkczpbW1tVLFVdLGp0XSxbW3EscV0sanRdLFtbcSxxLFhdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIGVbMl0uZXZhbHVhdGUodCkuY29tcGFyZShyLmV2YWx1YXRlKHQpLG4uZXZhbHVhdGUodCkpPDB9XV19LFwiPj1cIjp7dHlwZTpILG92ZXJsb2FkczpbW1tVLFVdLHF0XSxbW3EscV0scXRdLFtbcSxxLFhdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIGVbMl0uZXZhbHVhdGUodCkuY29tcGFyZShyLmV2YWx1YXRlKHQpLG4uZXZhbHVhdGUodCkpPj0wfV1dfSxcIjw9XCI6e3R5cGU6SCxvdmVybG9hZHM6W1tbVSxVXSxVdF0sW1txLHFdLFV0XSxbW3EscSxYXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiBlWzJdLmV2YWx1YXRlKHQpLmNvbXBhcmUoci5ldmFsdWF0ZSh0KSxuLmV2YWx1YXRlKHQpKTw9MH1dXX0sYWxsOnt0eXBlOkgsb3ZlcmxvYWRzOltbW0gsSF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KSYmbi5ldmFsdWF0ZSh0KX1dLFtIdChIKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49ZTtyPG4ubGVuZ3RoO3IrPTEpaWYoIW5bcl0uZXZhbHVhdGUodCkpcmV0dXJuITE7cmV0dXJuITB9XV19LGFueTp7dHlwZTpILG92ZXJsb2FkczpbW1tILEhdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCl8fG4uZXZhbHVhdGUodCl9XSxbSHQoSCksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKz0xKWlmKG5bcl0uZXZhbHVhdGUodCkpcmV0dXJuITA7cmV0dXJuITF9XV19LFwiIVwiOltILFtIXSxmdW5jdGlvbih0LGUpe3JldHVybiFlWzBdLmV2YWx1YXRlKHQpfV0sXCJpcy1zdXBwb3J0ZWQtc2NyaXB0XCI6W0gsW3FdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPXQuZ2xvYmFscyYmdC5nbG9iYWxzLmlzU3VwcG9ydGVkU2NyaXB0O3JldHVybiFufHxuKHIuZXZhbHVhdGUodCkpfV0sdXBjYXNlOltxLFtxXSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLmV2YWx1YXRlKHQpLnRvVXBwZXJDYXNlKCl9XSxkb3duY2FzZTpbcSxbcV0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS5ldmFsdWF0ZSh0KS50b0xvd2VyQ2FzZSgpfV0sY29uY2F0OltxLEh0KHEpLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmV2YWx1YXRlKHQpfSkuam9pbihcIlwiKX1dLFwicmVzb2x2ZWQtbG9jYWxlXCI6W3EsW1hdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0uZXZhbHVhdGUodCkucmVzb2x2ZWRMb2NhbGUoKX1dfSk7dmFyIFd0PS45NTA0NyxYdD0xLFp0PTEuMDg4ODMsJHQ9NC8yOSxKdD02LzI5LEt0PTMqSnQqSnQsUXQ9SnQqSnQqSnQsdGU9TWF0aC5QSS8xODAsZWU9MTgwL01hdGguUEk7ZnVuY3Rpb24gcmUodCl7cmV0dXJuIHQ+UXQ/TWF0aC5wb3codCwxLzMpOnQvS3QrJHR9ZnVuY3Rpb24gbmUodCl7cmV0dXJuIHQ+SnQ/dCp0KnQ6S3QqKHQtJHQpfWZ1bmN0aW9uIGllKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gYWUodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gb2UodCl7dmFyIGU9YWUodC5yKSxyPWFlKHQuZyksbj1hZSh0LmIpLGk9cmUoKC40MTI0NTY0KmUrLjM1NzU3NjEqcisuMTgwNDM3NSpuKS9XdCksYT1yZSgoLjIxMjY3MjkqZSsuNzE1MTUyMipyKy4wNzIxNzUqbikvWHQpO3JldHVybntsOjExNiphLTE2LGE6NTAwKihpLWEpLGI6MjAwKihhLXJlKCguMDE5MzMzOSplKy4xMTkxOTIqcisuOTUwMzA0MSpuKS9adCkpLGFscGhhOnQuYX19ZnVuY3Rpb24gc2UodCl7dmFyIGU9KHQubCsxNikvMTE2LHI9aXNOYU4odC5hKT9lOmUrdC5hLzUwMCxuPWlzTmFOKHQuYik/ZTplLXQuYi8yMDA7cmV0dXJuIGU9WHQqbmUoZSkscj1XdCpuZShyKSxuPVp0Km5lKG4pLG5ldyB0dChpZSgzLjI0MDQ1NDIqci0xLjUzNzEzODUqZS0uNDk4NTMxNCpuKSxpZSgtLjk2OTI2NipyKzEuODc2MDEwOCplKy4wNDE1NTYqbiksaWUoLjA1NTY0MzQqci0uMjA0MDI1OSplKzEuMDU3MjI1MipuKSx0LmFscGhhKX12YXIgbGU9e2ZvcndhcmQ6b2UscmV2ZXJzZTpzZSxpbnRlcnBvbGF0ZTpmdW5jdGlvbih0LGUscil7cmV0dXJue2w6d3QodC5sLGUubCxyKSxhOnd0KHQuYSxlLmEsciksYjp3dCh0LmIsZS5iLHIpLGFscGhhOnd0KHQuYWxwaGEsZS5hbHBoYSxyKX19fSxjZT17Zm9yd2FyZDpmdW5jdGlvbih0KXt2YXIgZT1vZSh0KSxyPWUubCxuPWUuYSxpPWUuYixhPU1hdGguYXRhbjIoaSxuKSplZTtyZXR1cm57aDphPDA/YSszNjA6YSxjOk1hdGguc3FydChuKm4raSppKSxsOnIsYWxwaGE6dC5hfX0scmV2ZXJzZTpmdW5jdGlvbih0KXt2YXIgZT10LmgqdGUscj10LmM7cmV0dXJuIHNlKHtsOnQubCxhOk1hdGguY29zKGUpKnIsYjpNYXRoLnNpbihlKSpyLGFscGhhOnQuYWxwaGF9KX0saW50ZXJwb2xhdGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybntoOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLXQ7cmV0dXJuIHQrcioobj4xODB8fG48LTE4MD9uLTM2MCpNYXRoLnJvdW5kKG4vMzYwKTpuKX0odC5oLGUuaCxyKSxjOnd0KHQuYyxlLmMsciksbDp3dCh0LmwsZS5sLHIpLGFscGhhOnd0KHQuYWxwaGEsZS5hbHBoYSxyKX19fSx1ZT1PYmplY3QuZnJlZXplKHtsYWI6bGUsaGNsOmNlfSk7ZnVuY3Rpb24gaGUodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBOdW1iZXI/XCJudW1iZXJcIjp0IGluc3RhbmNlb2YgU3RyaW5nP1wic3RyaW5nXCI6dCBpbnN0YW5jZW9mIEJvb2xlYW4/XCJib29sZWFuXCI6QXJyYXkuaXNBcnJheSh0KT9cImFycmF5XCI6bnVsbD09PXQ/XCJudWxsXCI6dHlwZW9mIHR9ZnVuY3Rpb24gZmUodCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHQmJm51bGwhPT10JiYhQXJyYXkuaXNBcnJheSh0KX1mdW5jdGlvbiBwZSh0KXtyZXR1cm4gdH1mdW5jdGlvbiBkZSh0LGUscil7cmV0dXJuIHZvaWQgMCE9PXQ/dDp2b2lkIDAhPT1lP2U6dm9pZCAwIT09cj9yOnZvaWQgMH1mdW5jdGlvbiBnZSh0LGUscixuLGkpe3JldHVybiBkZSh0eXBlb2Ygcj09PWk/bltyXTp2b2lkIDAsdC5kZWZhdWx0LGUuZGVmYXVsdCl9ZnVuY3Rpb24gdmUodCxlLHIpe2lmKFwibnVtYmVyXCIhPT1oZShyKSlyZXR1cm4gZGUodC5kZWZhdWx0LGUuZGVmYXVsdCk7dmFyIG49dC5zdG9wcy5sZW5ndGg7aWYoMT09PW4pcmV0dXJuIHQuc3RvcHNbMF1bMV07aWYocjw9dC5zdG9wc1swXVswXSlyZXR1cm4gdC5zdG9wc1swXVsxXTtpZihyPj10LnN0b3BzW24tMV1bMF0pcmV0dXJuIHQuc3RvcHNbbi0xXVsxXTt2YXIgaT14ZSh0LnN0b3BzLHIpO3JldHVybiB0LnN0b3BzW2ldWzFdfWZ1bmN0aW9uIG1lKHQsZSxyKXt2YXIgbj12b2lkIDAhPT10LmJhc2U/dC5iYXNlOjE7aWYoXCJudW1iZXJcIiE9PWhlKHIpKXJldHVybiBkZSh0LmRlZmF1bHQsZS5kZWZhdWx0KTt2YXIgaT10LnN0b3BzLmxlbmd0aDtpZigxPT09aSlyZXR1cm4gdC5zdG9wc1swXVsxXTtpZihyPD10LnN0b3BzWzBdWzBdKXJldHVybiB0LnN0b3BzWzBdWzFdO2lmKHI+PXQuc3RvcHNbaS0xXVswXSlyZXR1cm4gdC5zdG9wc1tpLTFdWzFdO3ZhciBhPXhlKHQuc3RvcHMsciksbz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLXIsYT10LXI7cmV0dXJuIDA9PT1pPzA6MT09PWU/YS9pOihNYXRoLnBvdyhlLGEpLTEpLyhNYXRoLnBvdyhlLGkpLTEpfShyLG4sdC5zdG9wc1thXVswXSx0LnN0b3BzW2ErMV1bMF0pLHM9dC5zdG9wc1thXVsxXSxsPXQuc3RvcHNbYSsxXVsxXSxjPWt0W2UudHlwZV18fHBlO2lmKHQuY29sb3JTcGFjZSYmXCJyZ2JcIiE9PXQuY29sb3JTcGFjZSl7dmFyIHU9dWVbdC5jb2xvclNwYWNlXTtjPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUucmV2ZXJzZSh1LmludGVycG9sYXRlKHUuZm9yd2FyZCh0KSx1LmZvcndhcmQoZSksbykpfX1yZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBzLmV2YWx1YXRlP3tldmFsdWF0ZTpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPWFyZ3VtZW50cy5sZW5ndGg7ZS0tOyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgcj1zLmV2YWx1YXRlLmFwcGx5KHZvaWQgMCx0KSxuPWwuZXZhbHVhdGUuYXBwbHkodm9pZCAwLHQpO2lmKHZvaWQgMCE9PXImJnZvaWQgMCE9PW4pcmV0dXJuIGMocixuLG8pfX06YyhzLGwsbyl9ZnVuY3Rpb24geWUodCxlLHIpe3JldHVyblwiY29sb3JcIj09PWUudHlwZT9yPXR0LnBhcnNlKHIpOmhlKHIpPT09ZS50eXBlfHxcImVudW1cIj09PWUudHlwZSYmZS52YWx1ZXNbcl18fChyPXZvaWQgMCksZGUocix0LmRlZmF1bHQsZS5kZWZhdWx0KX1mdW5jdGlvbiB4ZSh0LGUpe2Zvcih2YXIgcixuLGk9MCxhPXQubGVuZ3RoLTEsbz0wO2k8PWE7KXtpZihyPXRbbz1NYXRoLmZsb29yKChpK2EpLzIpXVswXSxuPXRbbysxXVswXSxlPT09cnx8ZT5yJiZlPG4pcmV0dXJuIG87cjxlP2k9bysxOnI+ZSYmKGE9by0xKX1yZXR1cm4gTWF0aC5tYXgoby0xLDApfXZhciBiZT1mdW5jdGlvbih0LGUpe3ZhciByO3RoaXMuZXhwcmVzc2lvbj10LHRoaXMuX3dhcm5pbmdIaXN0b3J5PXt9LHRoaXMuX2RlZmF1bHRWYWx1ZT1cImNvbG9yXCI9PT0ocj1lKS50eXBlJiZmZShyLmRlZmF1bHQpP25ldyB0dCgwLDAsMCwwKTpcImNvbG9yXCI9PT1yLnR5cGU/dHQucGFyc2Uoci5kZWZhdWx0KXx8bnVsbDp2b2lkIDA9PT1yLmRlZmF1bHQ/bnVsbDpyLmRlZmF1bHQsXCJlbnVtXCI9PT1lLnR5cGUmJih0aGlzLl9lbnVtVmFsdWVzPWUudmFsdWVzKX07ZnVuY3Rpb24gX2UodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJnQubGVuZ3RoPjAmJlwic3RyaW5nXCI9PXR5cGVvZiB0WzBdJiZ0WzBdaW4gUnR9ZnVuY3Rpb24gd2UodCxlKXt2YXIgcj1uZXcgeHQoUnQsW10sZnVuY3Rpb24odCl7dmFyIGU9e2NvbG9yOkcsc3RyaW5nOnEsbnVtYmVyOlUsZW51bTpxLGJvb2xlYW46SH07cmV0dXJuXCJhcnJheVwiPT09dC50eXBlP1ooZVt0LnZhbHVlXXx8Vyx0Lmxlbmd0aCk6ZVt0LnR5cGVdfHxudWxsfShlKSksbj1yLnBhcnNlKHQpO3JldHVybiBuP0d0KG5ldyBiZShuLGUpKTpZdChyLmVycm9ycyl9YmUucHJvdG90eXBlLmV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fZXZhbHVhdG9yfHwodGhpcy5fZXZhbHVhdG9yPW5ldyBkdCksdGhpcy5fZXZhbHVhdG9yLmdsb2JhbHM9dCx0aGlzLl9ldmFsdWF0b3IuZmVhdHVyZT1lLHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh0aGlzLl9ldmFsdWF0b3IpfSxiZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCxlKXt0aGlzLl9ldmFsdWF0b3J8fCh0aGlzLl9ldmFsdWF0b3I9bmV3IGR0KSx0aGlzLl9ldmFsdWF0b3IuZ2xvYmFscz10LHRoaXMuX2V2YWx1YXRvci5mZWF0dXJlPWU7dHJ5e3ZhciByPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh0aGlzLl9ldmFsdWF0b3IpO2lmKG51bGw9PXIpcmV0dXJuIHRoaXMuX2RlZmF1bHRWYWx1ZTtpZih0aGlzLl9lbnVtVmFsdWVzJiYhKHIgaW4gdGhpcy5fZW51bVZhbHVlcykpdGhyb3cgbmV3IG90KFwiRXhwZWN0ZWQgdmFsdWUgdG8gYmUgb25lIG9mIFwiK09iamVjdC5rZXlzKHRoaXMuX2VudW1WYWx1ZXMpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCl9KS5qb2luKFwiLCBcIikrXCIsIGJ1dCBmb3VuZCBcIitKU09OLnN0cmluZ2lmeShyKStcIiBpbnN0ZWFkLlwiKTtyZXR1cm4gcn1jYXRjaCh0KXtyZXR1cm4gdGhpcy5fd2FybmluZ0hpc3RvcnlbdC5tZXNzYWdlXXx8KHRoaXMuX3dhcm5pbmdIaXN0b3J5W3QubWVzc2FnZV09ITAsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUud2Fybih0Lm1lc3NhZ2UpKSx0aGlzLl9kZWZhdWx0VmFsdWV9fTt2YXIga2U9ZnVuY3Rpb24odCxlKXt0aGlzLmtpbmQ9dCx0aGlzLl9zdHlsZUV4cHJlc3Npb249ZX07a2UucHJvdG90eXBlLmV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmcodCxlKX0sa2UucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3N0eWxlRXhwcmVzc2lvbi5ldmFsdWF0ZSh0LGUpfTt2YXIgQWU9ZnVuY3Rpb24odCxlLHIpe3RoaXMua2luZD10LHRoaXMuem9vbVN0b3BzPXIubGFiZWxzLHRoaXMuX3N0eWxlRXhwcmVzc2lvbj1lLHIgaW5zdGFuY2VvZiBBdCYmKHRoaXMuX2ludGVycG9sYXRpb25UeXBlPXIuaW50ZXJwb2xhdGlvbil9O2Z1bmN0aW9uIFRlKHQsZSl7aWYoXCJlcnJvclwiPT09KHQ9d2UodCxlKSkucmVzdWx0KXJldHVybiB0O3ZhciByPXQudmFsdWUuZXhwcmVzc2lvbixuPXZ0KHIpO2lmKCFuJiYhZVtcInByb3BlcnR5LWZ1bmN0aW9uXCJdKXJldHVybiBZdChbbmV3IE4oXCJcIixcInByb3BlcnR5IGV4cHJlc3Npb25zIG5vdCBzdXBwb3J0ZWRcIildKTt2YXIgaT1tdChyLFtcInpvb21cIl0pO2lmKCFpJiYhMT09PWVbXCJ6b29tLWZ1bmN0aW9uXCJdKXJldHVybiBZdChbbmV3IE4oXCJcIixcInpvb20gZXhwcmVzc2lvbnMgbm90IHN1cHBvcnRlZFwiKV0pO3ZhciBhPWZ1bmN0aW9uIHQoZSl7dmFyIHI9bnVsbDtpZihlIGluc3RhbmNlb2YgU3Qpcj10KGUucmVzdWx0KTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBNdClmb3IodmFyIG49MCxpPWUuYXJncztuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07aWYocj10KGEpKWJyZWFrfWVsc2UoZSBpbnN0YW5jZW9mIF90fHxlIGluc3RhbmNlb2YgQXQpJiZlLmlucHV0IGluc3RhbmNlb2YgZ3QmJlwiem9vbVwiPT09ZS5pbnB1dC5uYW1lJiYocj1lKTtyZXR1cm4gciBpbnN0YW5jZW9mIE4/cjooZS5lYWNoQ2hpbGQoZnVuY3Rpb24oZSl7dmFyIG49dChlKTtuIGluc3RhbmNlb2YgTj9yPW46IXImJm4/cj1uZXcgTihcIlwiLCdcInpvb21cIiBleHByZXNzaW9uIG1heSBvbmx5IGJlIHVzZWQgYXMgaW5wdXQgdG8gYSB0b3AtbGV2ZWwgXCJzdGVwXCIgb3IgXCJpbnRlcnBvbGF0ZVwiIGV4cHJlc3Npb24uJyk6ciYmbiYmciE9PW4mJihyPW5ldyBOKFwiXCIsJ09ubHkgb25lIHpvb20tYmFzZWQgXCJzdGVwXCIgb3IgXCJpbnRlcnBvbGF0ZVwiIHN1YmV4cHJlc3Npb24gbWF5IGJlIHVzZWQgaW4gYW4gZXhwcmVzc2lvbi4nKSl9KSxyKX0ocik7cmV0dXJuIGF8fGk/YSBpbnN0YW5jZW9mIE4/WXQoW2FdKTphIGluc3RhbmNlb2YgQXQmJlwicGllY2V3aXNlLWNvbnN0YW50XCI9PT1lLmZ1bmN0aW9uP1l0KFtuZXcgTihcIlwiLCdcImludGVycG9sYXRlXCIgZXhwcmVzc2lvbnMgY2Fubm90IGJlIHVzZWQgd2l0aCB0aGlzIHByb3BlcnR5JyldKTpHdChhP25ldyBBZShuP1wiY2FtZXJhXCI6XCJjb21wb3NpdGVcIix0LnZhbHVlLGEpOm5ldyBrZShuP1wiY29uc3RhbnRcIjpcInNvdXJjZVwiLHQudmFsdWUpKTpZdChbbmV3IE4oXCJcIiwnXCJ6b29tXCIgZXhwcmVzc2lvbiBtYXkgb25seSBiZSB1c2VkIGFzIGlucHV0IHRvIGEgdG9wLWxldmVsIFwic3RlcFwiIG9yIFwiaW50ZXJwb2xhdGVcIiBleHByZXNzaW9uLicpXSl9QWUucHJvdG90eXBlLmV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmcodCxlKX0sQWUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3N0eWxlRXhwcmVzc2lvbi5ldmFsdWF0ZSh0LGUpfSxBZS5wcm90b3R5cGUuaW50ZXJwb2xhdGlvbkZhY3Rvcj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX2ludGVycG9sYXRpb25UeXBlP0F0LmludGVycG9sYXRpb25GYWN0b3IodGhpcy5faW50ZXJwb2xhdGlvblR5cGUsdCxlLHIpOjB9O3ZhciBNZT1mdW5jdGlvbih0LGUpe3RoaXMuX3BhcmFtZXRlcnM9dCx0aGlzLl9zcGVjaWZpY2F0aW9uPWUsUih0aGlzLGZ1bmN0aW9uIHQoZSxyKXt2YXIgbixpLGEsbz1cImNvbG9yXCI9PT1yLnR5cGUscz1lLnN0b3BzJiZcIm9iamVjdFwiPT10eXBlb2YgZS5zdG9wc1swXVswXSxsPXN8fHZvaWQgMCE9PWUucHJvcGVydHksYz1zfHwhbCx1PWUudHlwZXx8KFwiaW50ZXJwb2xhdGVkXCI9PT1yLmZ1bmN0aW9uP1wiZXhwb25lbnRpYWxcIjpcImludGVydmFsXCIpO2lmKG8mJigoZT1SKHt9LGUpKS5zdG9wcyYmKGUuc3RvcHM9ZS5zdG9wcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0sdHQucGFyc2UodFsxXSldfSkpLGUuZGVmYXVsdD9lLmRlZmF1bHQ9dHQucGFyc2UoZS5kZWZhdWx0KTplLmRlZmF1bHQ9dHQucGFyc2Uoci5kZWZhdWx0KSksZS5jb2xvclNwYWNlJiZcInJnYlwiIT09ZS5jb2xvclNwYWNlJiYhdWVbZS5jb2xvclNwYWNlXSl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGNvbG9yIHNwYWNlOiBcIitlLmNvbG9yU3BhY2UpO2lmKFwiZXhwb25lbnRpYWxcIj09PXUpbj1tZTtlbHNlIGlmKFwiaW50ZXJ2YWxcIj09PXUpbj12ZTtlbHNlIGlmKFwiY2F0ZWdvcmljYWxcIj09PXUpe249Z2UsaT1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgaD0wLGY9ZS5zdG9wcztoPGYubGVuZ3RoO2grPTEpe3ZhciBwPWZbaF07aVtwWzBdXT1wWzFdfWE9dHlwZW9mIGUuc3RvcHNbMF1bMF19ZWxzZXtpZihcImlkZW50aXR5XCIhPT11KXRocm93IG5ldyBFcnJvcignVW5rbm93biBmdW5jdGlvbiB0eXBlIFwiJyt1KydcIicpO249eWV9aWYocyl7Zm9yKHZhciBkPXt9LGc9W10sdj0wO3Y8ZS5zdG9wcy5sZW5ndGg7disrKXt2YXIgbT1lLnN0b3BzW3ZdLHk9bVswXS56b29tO3ZvaWQgMD09PWRbeV0mJihkW3ldPXt6b29tOnksdHlwZTplLnR5cGUscHJvcGVydHk6ZS5wcm9wZXJ0eSxkZWZhdWx0OmUuZGVmYXVsdCxzdG9wczpbXX0sZy5wdXNoKHkpKSxkW3ldLnN0b3BzLnB1c2goW21bMF0udmFsdWUsbVsxXV0pfWZvcih2YXIgeD1bXSxiPTAsXz1nO2I8Xy5sZW5ndGg7Yis9MSl7dmFyIHc9X1tiXTt4LnB1c2goW2Rbd10uem9vbSx0KGRbd10scildKX1yZXR1cm57a2luZDpcImNvbXBvc2l0ZVwiLGludGVycG9sYXRpb25GYWN0b3I6QXQuaW50ZXJwb2xhdGlvbkZhY3Rvci5iaW5kKHZvaWQgMCx7bmFtZTpcImxpbmVhclwifSksem9vbVN0b3BzOngubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSksZXZhbHVhdGU6ZnVuY3Rpb24odCxuKXt2YXIgaT10Lnpvb207cmV0dXJuIG1lKHtzdG9wczp4LGJhc2U6ZS5iYXNlfSxyLGkpLmV2YWx1YXRlKGksbil9fX1yZXR1cm4gYz97a2luZDpcImNhbWVyYVwiLGludGVycG9sYXRpb25GYWN0b3I6XCJleHBvbmVudGlhbFwiPT09dT9BdC5pbnRlcnBvbGF0aW9uRmFjdG9yLmJpbmQodm9pZCAwLHtuYW1lOlwiZXhwb25lbnRpYWxcIixiYXNlOnZvaWQgMCE9PWUuYmFzZT9lLmJhc2U6MX0pOmZ1bmN0aW9uKCl7cmV0dXJuIDB9LHpvb21TdG9wczplLnN0b3BzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pLGV2YWx1YXRlOmZ1bmN0aW9uKHQpe3ZhciBvPXQuem9vbTtyZXR1cm4gbihlLHIsbyxpLGEpfX06e2tpbmQ6XCJzb3VyY2VcIixldmFsdWF0ZTpmdW5jdGlvbih0LG8pe3ZhciBzPW8mJm8ucHJvcGVydGllcz9vLnByb3BlcnRpZXNbZS5wcm9wZXJ0eV06dm9pZCAwO3JldHVybiB2b2lkIDA9PT1zP2RlKGUuZGVmYXVsdCxyLmRlZmF1bHQpOm4oZSxyLHMsaSxhKX19fSh0aGlzLl9wYXJhbWV0ZXJzLHRoaXMuX3NwZWNpZmljYXRpb24pKX07ZnVuY3Rpb24gU2UodCxlKXtpZihmZSh0KSlyZXR1cm4gbmV3IE1lKHQsZSk7aWYoX2UodCkpe3ZhciByPVRlKHQsZSk7aWYoXCJlcnJvclwiPT09ci5yZXN1bHQpdGhyb3cgbmV3IEVycm9yKHIudmFsdWUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleStcIjogXCIrdC5tZXNzYWdlfSkuam9pbihcIiwgXCIpKTtyZXR1cm4gci52YWx1ZX12YXIgbj10O3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiZcImNvbG9yXCI9PT1lLnR5cGUmJihuPXR0LnBhcnNlKHQpKSx7a2luZDpcImNvbnN0YW50XCIsZXZhbHVhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gbn19fWZ1bmN0aW9uIEVlKHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZSxuPXQudmFsdWVTcGVjfHx7fSxpPXQub2JqZWN0RWxlbWVudFZhbGlkYXRvcnN8fHt9LGE9dC5zdHlsZSxvPXQuc3R5bGVTcGVjLHM9W10sbD1oZShyKTtpZihcIm9iamVjdFwiIT09bClyZXR1cm5bbmV3IEQoZSxyLFwib2JqZWN0IGV4cGVjdGVkLCBcIitsK1wiIGZvdW5kXCIpXTtmb3IodmFyIGMgaW4gcil7dmFyIHU9Yy5zcGxpdChcIi5cIilbMF0saD1uW3VdfHxuW1wiKlwiXSxmPXZvaWQgMDtpZihpW3VdKWY9aVt1XTtlbHNlIGlmKG5bdV0pZj1LZTtlbHNlIGlmKGlbXCIqXCJdKWY9aVtcIipcIl07ZWxzZXtpZighbltcIipcIl0pe3MucHVzaChuZXcgRChlLHJbY10sJ3Vua25vd24gcHJvcGVydHkgXCInK2MrJ1wiJykpO2NvbnRpbnVlfWY9S2V9cz1zLmNvbmNhdChmKHtrZXk6KGU/ZStcIi5cIjplKStjLHZhbHVlOnJbY10sdmFsdWVTcGVjOmgsc3R5bGU6YSxzdHlsZVNwZWM6byxvYmplY3Q6cixvYmplY3RLZXk6Y30scikpfWZvcih2YXIgcCBpbiBuKWlbcF18fG5bcF0ucmVxdWlyZWQmJnZvaWQgMD09PW5bcF0uZGVmYXVsdCYmdm9pZCAwPT09cltwXSYmcy5wdXNoKG5ldyBEKGUsciwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSBcIicrcCsnXCInKSk7cmV0dXJuIHN9ZnVuY3Rpb24gQ2UodCl7dmFyIGU9dC52YWx1ZSxyPXQudmFsdWVTcGVjLG49dC5zdHlsZSxpPXQuc3R5bGVTcGVjLGE9dC5rZXksbz10LmFycmF5RWxlbWVudFZhbGlkYXRvcnx8S2U7aWYoXCJhcnJheVwiIT09aGUoZSkpcmV0dXJuW25ldyBEKGEsZSxcImFycmF5IGV4cGVjdGVkLCBcIitoZShlKStcIiBmb3VuZFwiKV07aWYoci5sZW5ndGgmJmUubGVuZ3RoIT09ci5sZW5ndGgpcmV0dXJuW25ldyBEKGEsZSxcImFycmF5IGxlbmd0aCBcIityLmxlbmd0aCtcIiBleHBlY3RlZCwgbGVuZ3RoIFwiK2UubGVuZ3RoK1wiIGZvdW5kXCIpXTtpZihyW1wibWluLWxlbmd0aFwiXSYmZS5sZW5ndGg8cltcIm1pbi1sZW5ndGhcIl0pcmV0dXJuW25ldyBEKGEsZSxcImFycmF5IGxlbmd0aCBhdCBsZWFzdCBcIityW1wibWluLWxlbmd0aFwiXStcIiBleHBlY3RlZCwgbGVuZ3RoIFwiK2UubGVuZ3RoK1wiIGZvdW5kXCIpXTt2YXIgcz17dHlwZTpyLnZhbHVlfTtpLiR2ZXJzaW9uPDcmJihzLmZ1bmN0aW9uPXIuZnVuY3Rpb24pLFwib2JqZWN0XCI9PT1oZShyLnZhbHVlKSYmKHM9ci52YWx1ZSk7Zm9yKHZhciBsPVtdLGM9MDtjPGUubGVuZ3RoO2MrKylsPWwuY29uY2F0KG8oe2FycmF5OmUsYXJyYXlJbmRleDpjLHZhbHVlOmVbY10sdmFsdWVTcGVjOnMsc3R5bGU6bixzdHlsZVNwZWM6aSxrZXk6YStcIltcIitjK1wiXVwifSkpO3JldHVybiBsfWZ1bmN0aW9uIExlKHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZSxuPXQudmFsdWVTcGVjLGk9aGUocik7cmV0dXJuXCJudW1iZXJcIiE9PWk/W25ldyBEKGUscixcIm51bWJlciBleHBlY3RlZCwgXCIraStcIiBmb3VuZFwiKV06XCJtaW5pbXVtXCJpbiBuJiZyPG4ubWluaW11bT9bbmV3IEQoZSxyLHIrXCIgaXMgbGVzcyB0aGFuIHRoZSBtaW5pbXVtIHZhbHVlIFwiK24ubWluaW11bSldOlwibWF4aW11bVwiaW4gbiYmcj5uLm1heGltdW0/W25ldyBEKGUscixyK1wiIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSB2YWx1ZSBcIituLm1heGltdW0pXTpbXX1mdW5jdGlvbiB6ZSh0KXt2YXIgZSxyLG4saT10LnZhbHVlU3BlYyxhPUYodC52YWx1ZS50eXBlKSxvPXt9LHM9XCJjYXRlZ29yaWNhbFwiIT09YSYmdm9pZCAwPT09dC52YWx1ZS5wcm9wZXJ0eSxsPSFzLGM9XCJhcnJheVwiPT09aGUodC52YWx1ZS5zdG9wcykmJlwiYXJyYXlcIj09PWhlKHQudmFsdWUuc3RvcHNbMF0pJiZcIm9iamVjdFwiPT09aGUodC52YWx1ZS5zdG9wc1swXVswXSksdT1FZSh7a2V5OnQua2V5LHZhbHVlOnQudmFsdWUsdmFsdWVTcGVjOnQuc3R5bGVTcGVjLmZ1bmN0aW9uLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOntzdG9wczpmdW5jdGlvbih0KXtpZihcImlkZW50aXR5XCI9PT1hKXJldHVybltuZXcgRCh0LmtleSx0LnZhbHVlLCdpZGVudGl0eSBmdW5jdGlvbiBtYXkgbm90IGhhdmUgYSBcInN0b3BzXCIgcHJvcGVydHknKV07dmFyIGU9W10scj10LnZhbHVlO3JldHVybiBlPWUuY29uY2F0KENlKHtrZXk6dC5rZXksdmFsdWU6cix2YWx1ZVNwZWM6dC52YWx1ZVNwZWMsc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsYXJyYXlFbGVtZW50VmFsaWRhdG9yOmh9KSksXCJhcnJheVwiPT09aGUocikmJjA9PT1yLmxlbmd0aCYmZS5wdXNoKG5ldyBEKHQua2V5LHIsXCJhcnJheSBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHN0b3BcIikpLGV9LGRlZmF1bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIEtlKHtrZXk6dC5rZXksdmFsdWU6dC52YWx1ZSx2YWx1ZVNwZWM6aSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlY30pfX19KTtyZXR1cm5cImlkZW50aXR5XCI9PT1hJiZzJiZ1LnB1c2gobmV3IEQodC5rZXksdC52YWx1ZSwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSBcInByb3BlcnR5XCInKSksXCJpZGVudGl0eVwiPT09YXx8dC52YWx1ZS5zdG9wc3x8dS5wdXNoKG5ldyBEKHQua2V5LHQudmFsdWUsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgXCJzdG9wc1wiJykpLFwiZXhwb25lbnRpYWxcIj09PWEmJlwicGllY2V3aXNlLWNvbnN0YW50XCI9PT10LnZhbHVlU3BlYy5mdW5jdGlvbiYmdS5wdXNoKG5ldyBEKHQua2V5LHQudmFsdWUsXCJleHBvbmVudGlhbCBmdW5jdGlvbnMgbm90IHN1cHBvcnRlZFwiKSksdC5zdHlsZVNwZWMuJHZlcnNpb24+PTgmJihsJiYhdC52YWx1ZVNwZWNbXCJwcm9wZXJ0eS1mdW5jdGlvblwiXT91LnB1c2gobmV3IEQodC5rZXksdC52YWx1ZSxcInByb3BlcnR5IGZ1bmN0aW9ucyBub3Qgc3VwcG9ydGVkXCIpKTpzJiYhdC52YWx1ZVNwZWNbXCJ6b29tLWZ1bmN0aW9uXCJdJiZcImhlYXRtYXAtY29sb3JcIiE9PXQub2JqZWN0S2V5JiZcImxpbmUtZ3JhZGllbnRcIiE9PXQub2JqZWN0S2V5JiZ1LnB1c2gobmV3IEQodC5rZXksdC52YWx1ZSxcInpvb20gZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWRcIikpKSxcImNhdGVnb3JpY2FsXCIhPT1hJiYhY3x8dm9pZCAwIT09dC52YWx1ZS5wcm9wZXJ0eXx8dS5wdXNoKG5ldyBEKHQua2V5LHQudmFsdWUsJ1wicHJvcGVydHlcIiBwcm9wZXJ0eSBpcyByZXF1aXJlZCcpKSx1O2Z1bmN0aW9uIGgodCl7dmFyIGU9W10sYT10LnZhbHVlLHM9dC5rZXk7aWYoXCJhcnJheVwiIT09aGUoYSkpcmV0dXJuW25ldyBEKHMsYSxcImFycmF5IGV4cGVjdGVkLCBcIitoZShhKStcIiBmb3VuZFwiKV07aWYoMiE9PWEubGVuZ3RoKXJldHVybltuZXcgRChzLGEsXCJhcnJheSBsZW5ndGggMiBleHBlY3RlZCwgbGVuZ3RoIFwiK2EubGVuZ3RoK1wiIGZvdW5kXCIpXTtpZihjKXtpZihcIm9iamVjdFwiIT09aGUoYVswXSkpcmV0dXJuW25ldyBEKHMsYSxcIm9iamVjdCBleHBlY3RlZCwgXCIraGUoYVswXSkrXCIgZm91bmRcIildO2lmKHZvaWQgMD09PWFbMF0uem9vbSlyZXR1cm5bbmV3IEQocyxhLFwib2JqZWN0IHN0b3Aga2V5IG11c3QgaGF2ZSB6b29tXCIpXTtpZih2b2lkIDA9PT1hWzBdLnZhbHVlKXJldHVybltuZXcgRChzLGEsXCJvYmplY3Qgc3RvcCBrZXkgbXVzdCBoYXZlIHZhbHVlXCIpXTtpZihuJiZuPkYoYVswXS56b29tKSlyZXR1cm5bbmV3IEQocyxhWzBdLnpvb20sXCJzdG9wIHpvb20gdmFsdWVzIG11c3QgYXBwZWFyIGluIGFzY2VuZGluZyBvcmRlclwiKV07RihhWzBdLnpvb20pIT09biYmKG49RihhWzBdLnpvb20pLHI9dm9pZCAwLG89e30pLGU9ZS5jb25jYXQoRWUoe2tleTpzK1wiWzBdXCIsdmFsdWU6YVswXSx2YWx1ZVNwZWM6e3pvb206e319LHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOnt6b29tOkxlLHZhbHVlOmZ9fSkpfWVsc2UgZT1lLmNvbmNhdChmKHtrZXk6cytcIlswXVwiLHZhbHVlOmFbMF0sdmFsdWVTcGVjOnt9LHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjfSxhKSk7cmV0dXJuIGUuY29uY2F0KEtlKHtrZXk6cytcIlsxXVwiLHZhbHVlOmFbMV0sdmFsdWVTcGVjOmksc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWN9KSl9ZnVuY3Rpb24gZih0LG4pe3ZhciBzPWhlKHQudmFsdWUpLGw9Rih0LnZhbHVlKSxjPW51bGwhPT10LnZhbHVlP3QudmFsdWU6bjtpZihlKXtpZihzIT09ZSlyZXR1cm5bbmV3IEQodC5rZXksYyxzK1wiIHN0b3AgZG9tYWluIHR5cGUgbXVzdCBtYXRjaCBwcmV2aW91cyBzdG9wIGRvbWFpbiB0eXBlIFwiK2UpXX1lbHNlIGU9cztpZihcIm51bWJlclwiIT09cyYmXCJzdHJpbmdcIiE9PXMmJlwiYm9vbGVhblwiIT09cylyZXR1cm5bbmV3IEQodC5rZXksYyxcInN0b3AgZG9tYWluIHZhbHVlIG11c3QgYmUgYSBudW1iZXIsIHN0cmluZywgb3IgYm9vbGVhblwiKV07aWYoXCJudW1iZXJcIiE9PXMmJlwiY2F0ZWdvcmljYWxcIiE9PWEpe3ZhciB1PVwibnVtYmVyIGV4cGVjdGVkLCBcIitzK1wiIGZvdW5kXCI7cmV0dXJuIGlbXCJwcm9wZXJ0eS1mdW5jdGlvblwiXSYmdm9pZCAwPT09YSYmKHUrPSdcXG5JZiB5b3UgaW50ZW5kZWQgdG8gdXNlIGEgY2F0ZWdvcmljYWwgZnVuY3Rpb24sIHNwZWNpZnkgYFwidHlwZVwiOiBcImNhdGVnb3JpY2FsXCJgLicpLFtuZXcgRCh0LmtleSxjLHUpXX1yZXR1cm5cImNhdGVnb3JpY2FsXCIhPT1hfHxcIm51bWJlclwiIT09c3x8aXNGaW5pdGUobCkmJk1hdGguZmxvb3IobCk9PT1sP1wiY2F0ZWdvcmljYWxcIiE9PWEmJlwibnVtYmVyXCI9PT1zJiZ2b2lkIDAhPT1yJiZsPHI/W25ldyBEKHQua2V5LGMsXCJzdG9wIGRvbWFpbiB2YWx1ZXMgbXVzdCBhcHBlYXIgaW4gYXNjZW5kaW5nIG9yZGVyXCIpXToocj1sLFwiY2F0ZWdvcmljYWxcIj09PWEmJmwgaW4gbz9bbmV3IEQodC5rZXksYyxcInN0b3AgZG9tYWluIHZhbHVlcyBtdXN0IGJlIHVuaXF1ZVwiKV06KG9bbF09ITAsW10pKTpbbmV3IEQodC5rZXksYyxcImludGVnZXIgZXhwZWN0ZWQsIGZvdW5kIFwiK2wpXX19ZnVuY3Rpb24gT2UodCl7dmFyIGU9KFwicHJvcGVydHlcIj09PXQuZXhwcmVzc2lvbkNvbnRleHQ/VGU6d2UpKEIodC52YWx1ZSksdC52YWx1ZVNwZWMpO3JldHVyblwiZXJyb3JcIj09PWUucmVzdWx0P2UudmFsdWUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRChcIlwiK3Qua2V5K2Uua2V5LHQudmFsdWUsZS5tZXNzYWdlKX0pOlwicHJvcGVydHlcIj09PXQuZXhwcmVzc2lvbkNvbnRleHQmJlwidGV4dC1mb250XCI9PT10LnByb3BlcnR5S2V5JiYtMSE9PWUudmFsdWUuX3N0eWxlRXhwcmVzc2lvbi5leHByZXNzaW9uLnBvc3NpYmxlT3V0cHV0cygpLmluZGV4T2Yodm9pZCAwKT9bbmV3IEQodC5rZXksdC52YWx1ZSwnSW52YWxpZCBkYXRhIGV4cHJlc3Npb24gZm9yIFwidGV4dC1mb250XCIuIE91dHB1dCB2YWx1ZXMgbXVzdCBiZSBjb250YWluZWQgYXMgbGl0ZXJhbHMgd2l0aGluIHRoZSBleHByZXNzaW9uLicpXTpbXX1mdW5jdGlvbiBJZSh0KXt2YXIgZT10LmtleSxyPXQudmFsdWUsbj10LnZhbHVlU3BlYyxpPVtdO3JldHVybiBBcnJheS5pc0FycmF5KG4udmFsdWVzKT8tMT09PW4udmFsdWVzLmluZGV4T2YoRihyKSkmJmkucHVzaChuZXcgRChlLHIsXCJleHBlY3RlZCBvbmUgb2YgW1wiK24udmFsdWVzLmpvaW4oXCIsIFwiKStcIl0sIFwiK0pTT04uc3RyaW5naWZ5KHIpK1wiIGZvdW5kXCIpKTotMT09PU9iamVjdC5rZXlzKG4udmFsdWVzKS5pbmRleE9mKEYocikpJiZpLnB1c2gobmV3IEQoZSxyLFwiZXhwZWN0ZWQgb25lIG9mIFtcIitPYmplY3Qua2V5cyhuLnZhbHVlcykuam9pbihcIiwgXCIpK1wiXSwgXCIrSlNPTi5zdHJpbmdpZnkocikrXCIgZm91bmRcIikpLGl9ZnVuY3Rpb24gRGUodCl7aWYoIUFycmF5LmlzQXJyYXkodCl8fDA9PT10Lmxlbmd0aClyZXR1cm4hMTtzd2l0Y2godFswXSl7Y2FzZVwiaGFzXCI6cmV0dXJuIHQubGVuZ3RoPj0yJiZcIiRpZFwiIT09dFsxXSYmXCIkdHlwZVwiIT09dFsxXTtjYXNlXCJpblwiOmNhc2VcIiFpblwiOmNhc2VcIiFoYXNcIjpjYXNlXCJub25lXCI6cmV0dXJuITE7Y2FzZVwiPT1cIjpjYXNlXCIhPVwiOmNhc2VcIj5cIjpjYXNlXCI+PVwiOmNhc2VcIjxcIjpjYXNlXCI8PVwiOnJldHVybiAzPT09dC5sZW5ndGgmJihBcnJheS5pc0FycmF5KHRbMV0pfHxBcnJheS5pc0FycmF5KHRbMl0pKTtjYXNlXCJhbnlcIjpjYXNlXCJhbGxcIjpmb3IodmFyIGU9MCxyPXQuc2xpY2UoMSk7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdO2lmKCFEZShuKSYmXCJib29sZWFuXCIhPXR5cGVvZiBuKXJldHVybiExfXJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITB9fU1lLmRlc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTWUodC5fcGFyYW1ldGVycyx0Ll9zcGVjaWZpY2F0aW9uKX0sTWUuc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybntfcGFyYW1ldGVyczp0Ll9wYXJhbWV0ZXJzLF9zcGVjaWZpY2F0aW9uOnQuX3NwZWNpZmljYXRpb259fTt2YXIgUGU9e3R5cGU6XCJib29sZWFuXCIsZGVmYXVsdDohMSxmdW5jdGlvbjohMCxcInByb3BlcnR5LWZ1bmN0aW9uXCI6ITAsXCJ6b29tLWZ1bmN0aW9uXCI6ITB9O2Z1bmN0aW9uIFJlKHQpe2lmKCF0KXJldHVybiBmdW5jdGlvbigpe3JldHVybiEwfTtEZSh0KXx8KHQ9QmUodCkpO3ZhciBlPXdlKHQsUGUpO2lmKFwiZXJyb3JcIj09PWUucmVzdWx0KXRocm93IG5ldyBFcnJvcihlLnZhbHVlLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXkrXCI6IFwiK3QubWVzc2FnZX0pLmpvaW4oXCIsIFwiKSk7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIGUudmFsdWUuZXZhbHVhdGUodCxyKX19ZnVuY3Rpb24gRmUodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9ZnVuY3Rpb24gQmUodCl7aWYoIXQpcmV0dXJuITA7dmFyIGUscj10WzBdO3JldHVybiB0Lmxlbmd0aDw9MT9cImFueVwiIT09cjpcIj09XCI9PT1yP05lKHRbMV0sdFsyXSxcIj09XCIpOlwiIT1cIj09PXI/VWUoTmUodFsxXSx0WzJdLFwiPT1cIikpOlwiPFwiPT09cnx8XCI+XCI9PT1yfHxcIjw9XCI9PT1yfHxcIj49XCI9PT1yP05lKHRbMV0sdFsyXSxyKTpcImFueVwiPT09cj8oZT10LnNsaWNlKDEpLFtcImFueVwiXS5jb25jYXQoZS5tYXAoQmUpKSk6XCJhbGxcIj09PXI/W1wiYWxsXCJdLmNvbmNhdCh0LnNsaWNlKDEpLm1hcChCZSkpOlwibm9uZVwiPT09cj9bXCJhbGxcIl0uY29uY2F0KHQuc2xpY2UoMSkubWFwKEJlKS5tYXAoVWUpKTpcImluXCI9PT1yP2plKHRbMV0sdC5zbGljZSgyKSk6XCIhaW5cIj09PXI/VWUoamUodFsxXSx0LnNsaWNlKDIpKSk6XCJoYXNcIj09PXI/VmUodFsxXSk6XCIhaGFzXCIhPT1yfHxVZShWZSh0WzFdKSl9ZnVuY3Rpb24gTmUodCxlLHIpe3N3aXRjaCh0KXtjYXNlXCIkdHlwZVwiOnJldHVybltcImZpbHRlci10eXBlLVwiK3IsZV07Y2FzZVwiJGlkXCI6cmV0dXJuW1wiZmlsdGVyLWlkLVwiK3IsZV07ZGVmYXVsdDpyZXR1cm5bXCJmaWx0ZXItXCIrcix0LGVdfX1mdW5jdGlvbiBqZSh0LGUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4hMTtzd2l0Y2godCl7Y2FzZVwiJHR5cGVcIjpyZXR1cm5bXCJmaWx0ZXItdHlwZS1pblwiLFtcImxpdGVyYWxcIixlXV07Y2FzZVwiJGlkXCI6cmV0dXJuW1wiZmlsdGVyLWlkLWluXCIsW1wibGl0ZXJhbFwiLGVdXTtkZWZhdWx0OnJldHVybiBlLmxlbmd0aD4yMDAmJiFlLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0IT10eXBlb2YgZVswXX0pP1tcImZpbHRlci1pbi1sYXJnZVwiLHQsW1wibGl0ZXJhbFwiLGUuc29ydChGZSldXTpbXCJmaWx0ZXItaW4tc21hbGxcIix0LFtcImxpdGVyYWxcIixlXV19fWZ1bmN0aW9uIFZlKHQpe3N3aXRjaCh0KXtjYXNlXCIkdHlwZVwiOnJldHVybiEwO2Nhc2VcIiRpZFwiOnJldHVybltcImZpbHRlci1oYXMtaWRcIl07ZGVmYXVsdDpyZXR1cm5bXCJmaWx0ZXItaGFzXCIsdF19fWZ1bmN0aW9uIFVlKHQpe3JldHVybltcIiFcIix0XX1mdW5jdGlvbiBxZSh0KXtyZXR1cm4gRGUoQih0LnZhbHVlKSk/T2UoUih7fSx0LHtleHByZXNzaW9uQ29udGV4dDpcImZpbHRlclwiLHZhbHVlU3BlYzp7dmFsdWU6XCJib29sZWFuXCJ9fSkpOmZ1bmN0aW9uIHQoZSl7dmFyIHI9ZS52YWx1ZSxuPWUua2V5O2lmKFwiYXJyYXlcIiE9PWhlKHIpKXJldHVybltuZXcgRChuLHIsXCJhcnJheSBleHBlY3RlZCwgXCIraGUocikrXCIgZm91bmRcIildO3ZhciBpLGE9ZS5zdHlsZVNwZWMsbz1bXTtpZihyLmxlbmd0aDwxKXJldHVybltuZXcgRChuLHIsXCJmaWx0ZXIgYXJyYXkgbXVzdCBoYXZlIGF0IGxlYXN0IDEgZWxlbWVudFwiKV07c3dpdGNoKG89by5jb25jYXQoSWUoe2tleTpuK1wiWzBdXCIsdmFsdWU6clswXSx2YWx1ZVNwZWM6YS5maWx0ZXJfb3BlcmF0b3Isc3R5bGU6ZS5zdHlsZSxzdHlsZVNwZWM6ZS5zdHlsZVNwZWN9KSksRihyWzBdKSl7Y2FzZVwiPFwiOmNhc2VcIjw9XCI6Y2FzZVwiPlwiOmNhc2VcIj49XCI6ci5sZW5ndGg+PTImJlwiJHR5cGVcIj09PUYoclsxXSkmJm8ucHVzaChuZXcgRChuLHIsJ1wiJHR5cGVcIiBjYW5ub3QgYmUgdXNlIHdpdGggb3BlcmF0b3IgXCInK3JbMF0rJ1wiJykpO2Nhc2VcIj09XCI6Y2FzZVwiIT1cIjozIT09ci5sZW5ndGgmJm8ucHVzaChuZXcgRChuLHIsJ2ZpbHRlciBhcnJheSBmb3Igb3BlcmF0b3IgXCInK3JbMF0rJ1wiIG11c3QgaGF2ZSAzIGVsZW1lbnRzJykpO2Nhc2VcImluXCI6Y2FzZVwiIWluXCI6ci5sZW5ndGg+PTImJlwic3RyaW5nXCIhPT0oaT1oZShyWzFdKSkmJm8ucHVzaChuZXcgRChuK1wiWzFdXCIsclsxXSxcInN0cmluZyBleHBlY3RlZCwgXCIraStcIiBmb3VuZFwiKSk7Zm9yKHZhciBzPTI7czxyLmxlbmd0aDtzKyspaT1oZShyW3NdKSxcIiR0eXBlXCI9PT1GKHJbMV0pP289by5jb25jYXQoSWUoe2tleTpuK1wiW1wiK3MrXCJdXCIsdmFsdWU6cltzXSx2YWx1ZVNwZWM6YS5nZW9tZXRyeV90eXBlLHN0eWxlOmUuc3R5bGUsc3R5bGVTcGVjOmUuc3R5bGVTcGVjfSkpOlwic3RyaW5nXCIhPT1pJiZcIm51bWJlclwiIT09aSYmXCJib29sZWFuXCIhPT1pJiZvLnB1c2gobmV3IEQobitcIltcIitzK1wiXVwiLHJbc10sXCJzdHJpbmcsIG51bWJlciwgb3IgYm9vbGVhbiBleHBlY3RlZCwgXCIraStcIiBmb3VuZFwiKSk7YnJlYWs7Y2FzZVwiYW55XCI6Y2FzZVwiYWxsXCI6Y2FzZVwibm9uZVwiOmZvcih2YXIgbD0xO2w8ci5sZW5ndGg7bCsrKW89by5jb25jYXQodCh7a2V5Om4rXCJbXCIrbCtcIl1cIix2YWx1ZTpyW2xdLHN0eWxlOmUuc3R5bGUsc3R5bGVTcGVjOmUuc3R5bGVTcGVjfSkpO2JyZWFrO2Nhc2VcImhhc1wiOmNhc2VcIiFoYXNcIjppPWhlKHJbMV0pLDIhPT1yLmxlbmd0aD9vLnB1c2gobmV3IEQobixyLCdmaWx0ZXIgYXJyYXkgZm9yIFwiJytyWzBdKydcIiBvcGVyYXRvciBtdXN0IGhhdmUgMiBlbGVtZW50cycpKTpcInN0cmluZ1wiIT09aSYmby5wdXNoKG5ldyBEKG4rXCJbMV1cIixyWzFdLFwic3RyaW5nIGV4cGVjdGVkLCBcIitpK1wiIGZvdW5kXCIpKX1yZXR1cm4gb30odCl9ZnVuY3Rpb24gSGUodCxlKXt2YXIgcj10LmtleSxuPXQuc3R5bGUsaT10LnN0eWxlU3BlYyxhPXQudmFsdWUsbz10Lm9iamVjdEtleSxzPWlbZStcIl9cIit0LmxheWVyVHlwZV07aWYoIXMpcmV0dXJuW107dmFyIGw9by5tYXRjaCgvXiguKiktdHJhbnNpdGlvbiQvKTtpZihcInBhaW50XCI9PT1lJiZsJiZzW2xbMV1dJiZzW2xbMV1dLnRyYW5zaXRpb24pcmV0dXJuIEtlKHtrZXk6cix2YWx1ZTphLHZhbHVlU3BlYzppLnRyYW5zaXRpb24sc3R5bGU6bixzdHlsZVNwZWM6aX0pO3ZhciBjLHU9dC52YWx1ZVNwZWN8fHNbb107aWYoIXUpcmV0dXJuW25ldyBEKHIsYSwndW5rbm93biBwcm9wZXJ0eSBcIicrbysnXCInKV07aWYoXCJzdHJpbmdcIj09PWhlKGEpJiZ1W1wicHJvcGVydHktZnVuY3Rpb25cIl0mJiF1LnRva2VucyYmKGM9L157KFtefV0rKX0kLy5leGVjKGEpKSlyZXR1cm5bbmV3IEQocixhLCdcIicrbysnXCIgZG9lcyBub3Qgc3VwcG9ydCBpbnRlcnBvbGF0aW9uIHN5bnRheFxcblVzZSBhbiBpZGVudGl0eSBwcm9wZXJ0eSBmdW5jdGlvbiBpbnN0ZWFkOiBgeyBcInR5cGVcIjogXCJpZGVudGl0eVwiLCBcInByb3BlcnR5XCI6ICcrSlNPTi5zdHJpbmdpZnkoY1sxXSkrXCIgfWAuXCIpXTt2YXIgaD1bXTtyZXR1cm5cInN5bWJvbFwiPT09dC5sYXllclR5cGUmJihcInRleHQtZmllbGRcIj09PW8mJm4mJiFuLmdseXBocyYmaC5wdXNoKG5ldyBEKHIsYSwndXNlIG9mIFwidGV4dC1maWVsZFwiIHJlcXVpcmVzIGEgc3R5bGUgXCJnbHlwaHNcIiBwcm9wZXJ0eScpKSxcInRleHQtZm9udFwiPT09byYmZmUoQihhKSkmJlwiaWRlbnRpdHlcIj09PUYoYS50eXBlKSYmaC5wdXNoKG5ldyBEKHIsYSwnXCJ0ZXh0LWZvbnRcIiBkb2VzIG5vdCBzdXBwb3J0IGlkZW50aXR5IGZ1bmN0aW9ucycpKSksaC5jb25jYXQoS2Uoe2tleTp0LmtleSx2YWx1ZTphLHZhbHVlU3BlYzp1LHN0eWxlOm4sc3R5bGVTcGVjOmksZXhwcmVzc2lvbkNvbnRleHQ6XCJwcm9wZXJ0eVwiLHByb3BlcnR5S2V5Om99KSl9ZnVuY3Rpb24gR2UodCl7cmV0dXJuIEhlKHQsXCJwYWludFwiKX1mdW5jdGlvbiBZZSh0KXtyZXR1cm4gSGUodCxcImxheW91dFwiKX1mdW5jdGlvbiBXZSh0KXt2YXIgZT1bXSxyPXQudmFsdWUsbj10LmtleSxpPXQuc3R5bGUsYT10LnN0eWxlU3BlYztyLnR5cGV8fHIucmVmfHxlLnB1c2gobmV3IEQobixyLCdlaXRoZXIgXCJ0eXBlXCIgb3IgXCJyZWZcIiBpcyByZXF1aXJlZCcpKTt2YXIgbyxzPUYoci50eXBlKSxsPUYoci5yZWYpO2lmKHIuaWQpZm9yKHZhciBjPUYoci5pZCksdT0wO3U8dC5hcnJheUluZGV4O3UrKyl7dmFyIGg9aS5sYXllcnNbdV07RihoLmlkKT09PWMmJmUucHVzaChuZXcgRChuLHIuaWQsJ2R1cGxpY2F0ZSBsYXllciBpZCBcIicrci5pZCsnXCIsIHByZXZpb3VzbHkgdXNlZCBhdCBsaW5lICcraC5pZC5fX2xpbmVfXykpfWlmKFwicmVmXCJpbiByKVtcInR5cGVcIixcInNvdXJjZVwiLFwic291cmNlLWxheWVyXCIsXCJmaWx0ZXJcIixcImxheW91dFwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QgaW4gciYmZS5wdXNoKG5ldyBEKG4sclt0XSwnXCInK3QrJ1wiIGlzIHByb2hpYml0ZWQgZm9yIHJlZiBsYXllcnMnKSl9KSxpLmxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe0YodC5pZCk9PT1sJiYobz10KX0pLG8/by5yZWY/ZS5wdXNoKG5ldyBEKG4sci5yZWYsXCJyZWYgY2Fubm90IHJlZmVyZW5jZSBhbm90aGVyIHJlZiBsYXllclwiKSk6cz1GKG8udHlwZSk6ZS5wdXNoKG5ldyBEKG4sci5yZWYsJ3JlZiBsYXllciBcIicrbCsnXCIgbm90IGZvdW5kJykpO2Vsc2UgaWYoXCJiYWNrZ3JvdW5kXCIhPT1zKWlmKHIuc291cmNlKXt2YXIgZj1pLnNvdXJjZXMmJmkuc291cmNlc1tyLnNvdXJjZV0scD1mJiZGKGYudHlwZSk7Zj9cInZlY3RvclwiPT09cCYmXCJyYXN0ZXJcIj09PXM/ZS5wdXNoKG5ldyBEKG4sci5zb3VyY2UsJ2xheWVyIFwiJytyLmlkKydcIiByZXF1aXJlcyBhIHJhc3RlciBzb3VyY2UnKSk6XCJyYXN0ZXJcIj09PXAmJlwicmFzdGVyXCIhPT1zP2UucHVzaChuZXcgRChuLHIuc291cmNlLCdsYXllciBcIicrci5pZCsnXCIgcmVxdWlyZXMgYSB2ZWN0b3Igc291cmNlJykpOlwidmVjdG9yXCIhPT1wfHxyW1wic291cmNlLWxheWVyXCJdP1wicmFzdGVyLWRlbVwiPT09cCYmXCJoaWxsc2hhZGVcIiE9PXM/ZS5wdXNoKG5ldyBEKG4sci5zb3VyY2UsXCJyYXN0ZXItZGVtIHNvdXJjZSBjYW4gb25seSBiZSB1c2VkIHdpdGggbGF5ZXIgdHlwZSAnaGlsbHNoYWRlJy5cIikpOlwibGluZVwiIT09c3x8IXIucGFpbnR8fCFyLnBhaW50W1wibGluZS1ncmFkaWVudFwiXXx8XCJnZW9qc29uXCI9PT1wJiZmLmxpbmVNZXRyaWNzfHxlLnB1c2gobmV3IEQobixyLCdsYXllciBcIicrci5pZCsnXCIgc3BlY2lmaWVzIGEgbGluZS1ncmFkaWVudCwgd2hpY2ggcmVxdWlyZXMgYSBHZW9KU09OIHNvdXJjZSB3aXRoIGBsaW5lTWV0cmljc2AgZW5hYmxlZC4nKSk6ZS5wdXNoKG5ldyBEKG4sciwnbGF5ZXIgXCInK3IuaWQrJ1wiIG11c3Qgc3BlY2lmeSBhIFwic291cmNlLWxheWVyXCInKSk6ZS5wdXNoKG5ldyBEKG4sci5zb3VyY2UsJ3NvdXJjZSBcIicrci5zb3VyY2UrJ1wiIG5vdCBmb3VuZCcpKX1lbHNlIGUucHVzaChuZXcgRChuLHIsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgXCJzb3VyY2VcIicpKTtyZXR1cm4gZT1lLmNvbmNhdChFZSh7a2V5Om4sdmFsdWU6cix2YWx1ZVNwZWM6YS5sYXllcixzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7XCIqXCI6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sdHlwZTpmdW5jdGlvbigpe3JldHVybiBLZSh7a2V5Om4rXCIudHlwZVwiLHZhbHVlOnIudHlwZSx2YWx1ZVNwZWM6YS5sYXllci50eXBlLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdDpyLG9iamVjdEtleTpcInR5cGVcIn0pfSxmaWx0ZXI6cWUsbGF5b3V0OmZ1bmN0aW9uKHQpe3JldHVybiBFZSh7bGF5ZXI6cixrZXk6dC5rZXksdmFsdWU6dC52YWx1ZSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7XCIqXCI6ZnVuY3Rpb24odCl7cmV0dXJuIFllKFIoe2xheWVyVHlwZTpzfSx0KSl9fX0pfSxwYWludDpmdW5jdGlvbih0KXtyZXR1cm4gRWUoe2xheWVyOnIsa2V5OnQua2V5LHZhbHVlOnQudmFsdWUsc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6e1wiKlwiOmZ1bmN0aW9uKHQpe3JldHVybiBHZShSKHtsYXllclR5cGU6c30sdCkpfX19KX19fSkpfWZ1bmN0aW9uIFhlKHQpe3ZhciBlPXQudmFsdWUscj10LmtleSxuPXQuc3R5bGVTcGVjLGk9dC5zdHlsZTtpZighZS50eXBlKXJldHVybltuZXcgRChyLGUsJ1widHlwZVwiIGlzIHJlcXVpcmVkJyldO3ZhciBhPUYoZS50eXBlKSxvPVtdO3N3aXRjaChhKXtjYXNlXCJ2ZWN0b3JcIjpjYXNlXCJyYXN0ZXJcIjpjYXNlXCJyYXN0ZXItZGVtXCI6aWYobz1vLmNvbmNhdChFZSh7a2V5OnIsdmFsdWU6ZSx2YWx1ZVNwZWM6bltcInNvdXJjZV9cIithLnJlcGxhY2UoXCItXCIsXCJfXCIpXSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzpufSkpLFwidXJsXCJpbiBlKWZvcih2YXIgcyBpbiBlKVtcInR5cGVcIixcInVybFwiLFwidGlsZVNpemVcIl0uaW5kZXhPZihzKTwwJiZvLnB1c2gobmV3IEQocitcIi5cIitzLGVbc10sJ2Egc291cmNlIHdpdGggYSBcInVybFwiIHByb3BlcnR5IG1heSBub3QgaW5jbHVkZSBhIFwiJytzKydcIiBwcm9wZXJ0eScpKTtyZXR1cm4gbztjYXNlXCJnZW9qc29uXCI6cmV0dXJuIEVlKHtrZXk6cix2YWx1ZTplLHZhbHVlU3BlYzpuLnNvdXJjZV9nZW9qc29uLHN0eWxlOmksc3R5bGVTcGVjOm59KTtjYXNlXCJ2aWRlb1wiOnJldHVybiBFZSh7a2V5OnIsdmFsdWU6ZSx2YWx1ZVNwZWM6bi5zb3VyY2VfdmlkZW8sc3R5bGU6aSxzdHlsZVNwZWM6bn0pO2Nhc2VcImltYWdlXCI6cmV0dXJuIEVlKHtrZXk6cix2YWx1ZTplLHZhbHVlU3BlYzpuLnNvdXJjZV9pbWFnZSxzdHlsZTppLHN0eWxlU3BlYzpufSk7Y2FzZVwiY2FudmFzXCI6cmV0dXJuIG8ucHVzaChuZXcgRChyLG51bGwsXCJQbGVhc2UgdXNlIHJ1bnRpbWUgQVBJcyB0byBhZGQgY2FudmFzIHNvdXJjZXMsIHJhdGhlciB0aGFuIGluY2x1ZGluZyB0aGVtIGluIHN0eWxlc2hlZXRzLlwiLFwic291cmNlLmNhbnZhc1wiKSksbztkZWZhdWx0OnJldHVybiBJZSh7a2V5OnIrXCIudHlwZVwiLHZhbHVlOmUudHlwZSx2YWx1ZVNwZWM6e3ZhbHVlczpbXCJ2ZWN0b3JcIixcInJhc3RlclwiLFwicmFzdGVyLWRlbVwiLFwiZ2VvanNvblwiLFwidmlkZW9cIixcImltYWdlXCJdfSxzdHlsZTppLHN0eWxlU3BlYzpufSl9fWZ1bmN0aW9uIFplKHQpe3ZhciBlPXQudmFsdWUscj10LnN0eWxlU3BlYyxuPXIubGlnaHQsaT10LnN0eWxlLGE9W10sbz1oZShlKTtpZih2b2lkIDA9PT1lKXJldHVybiBhO2lmKFwib2JqZWN0XCIhPT1vKXJldHVybiBhLmNvbmNhdChbbmV3IEQoXCJsaWdodFwiLGUsXCJvYmplY3QgZXhwZWN0ZWQsIFwiK28rXCIgZm91bmRcIildKTtmb3IodmFyIHMgaW4gZSl7dmFyIGw9cy5tYXRjaCgvXiguKiktdHJhbnNpdGlvbiQvKTthPWwmJm5bbFsxXV0mJm5bbFsxXV0udHJhbnNpdGlvbj9hLmNvbmNhdChLZSh7a2V5OnMsdmFsdWU6ZVtzXSx2YWx1ZVNwZWM6ci50cmFuc2l0aW9uLHN0eWxlOmksc3R5bGVTcGVjOnJ9KSk6bltzXT9hLmNvbmNhdChLZSh7a2V5OnMsdmFsdWU6ZVtzXSx2YWx1ZVNwZWM6bltzXSxzdHlsZTppLHN0eWxlU3BlYzpyfSkpOmEuY29uY2F0KFtuZXcgRChzLGVbc10sJ3Vua25vd24gcHJvcGVydHkgXCInK3MrJ1wiJyldKX1yZXR1cm4gYX1mdW5jdGlvbiAkZSh0KXt2YXIgZT10LnZhbHVlLHI9dC5rZXksbj1oZShlKTtyZXR1cm5cInN0cmluZ1wiIT09bj9bbmV3IEQocixlLFwic3RyaW5nIGV4cGVjdGVkLCBcIituK1wiIGZvdW5kXCIpXTpbXX12YXIgSmU9e1wiKlwiOmZ1bmN0aW9uKCl7cmV0dXJuW119LGFycmF5OkNlLGJvb2xlYW46ZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LG49aGUoZSk7cmV0dXJuXCJib29sZWFuXCIhPT1uP1tuZXcgRChyLGUsXCJib29sZWFuIGV4cGVjdGVkLCBcIituK1wiIGZvdW5kXCIpXTpbXX0sbnVtYmVyOkxlLGNvbG9yOmZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZSxuPWhlKHIpO3JldHVyblwic3RyaW5nXCIhPT1uP1tuZXcgRChlLHIsXCJjb2xvciBleHBlY3RlZCwgXCIrbitcIiBmb3VuZFwiKV06bnVsbD09PVEocik/W25ldyBEKGUsciwnY29sb3IgZXhwZWN0ZWQsIFwiJytyKydcIiBmb3VuZCcpXTpbXX0sY29uc3RhbnRzOlAsZW51bTpJZSxmaWx0ZXI6cWUsZnVuY3Rpb246emUsbGF5ZXI6V2Usb2JqZWN0OkVlLHNvdXJjZTpYZSxsaWdodDpaZSxzdHJpbmc6JGV9O2Z1bmN0aW9uIEtlKHQpe3ZhciBlPXQudmFsdWUscj10LnZhbHVlU3BlYyxuPXQuc3R5bGVTcGVjO3JldHVybiByLmZ1bmN0aW9uJiZmZShGKGUpKT96ZSh0KTpyLmZ1bmN0aW9uJiZfZShCKGUpKT9PZSh0KTpyLnR5cGUmJkplW3IudHlwZV0/SmVbci50eXBlXSh0KTpFZShSKHt9LHQse3ZhbHVlU3BlYzpyLnR5cGU/bltyLnR5cGVdOnJ9KSl9ZnVuY3Rpb24gUWUodCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LG49JGUodCk7cmV0dXJuIG4ubGVuZ3RoP246KC0xPT09ZS5pbmRleE9mKFwie2ZvbnRzdGFja31cIikmJm4ucHVzaChuZXcgRChyLGUsJ1wiZ2x5cGhzXCIgdXJsIG11c3QgaW5jbHVkZSBhIFwie2ZvbnRzdGFja31cIiB0b2tlbicpKSwtMT09PWUuaW5kZXhPZihcIntyYW5nZX1cIikmJm4ucHVzaChuZXcgRChyLGUsJ1wiZ2x5cGhzXCIgdXJsIG11c3QgaW5jbHVkZSBhIFwie3JhbmdlfVwiIHRva2VuJykpLG4pfWZ1bmN0aW9uIHRyKHQsZSl7ZT1lfHxJO3ZhciByPVtdO3JldHVybiByPXIuY29uY2F0KEtlKHtrZXk6XCJcIix2YWx1ZTp0LHZhbHVlU3BlYzplLiRyb290LHN0eWxlU3BlYzplLHN0eWxlOnQsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6e2dseXBoczpRZSxcIipcIjpmdW5jdGlvbigpe3JldHVybltdfX19KSksdC5jb25zdGFudHMmJihyPXIuY29uY2F0KFAoe2tleTpcImNvbnN0YW50c1wiLHZhbHVlOnQuY29uc3RhbnRzLHN0eWxlOnQsc3R5bGVTcGVjOmV9KSkpLGVyKHIpfWZ1bmN0aW9uIGVyKHQpe3JldHVybltdLmNvbmNhdCh0KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGluZS1lLmxpbmV9KX1mdW5jdGlvbiBycih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZXIodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX10ci5zb3VyY2U9cnIoWGUpLHRyLmxpZ2h0PXJyKFplKSx0ci5sYXllcj1ycihXZSksdHIuZmlsdGVyPXJyKHFlKSx0ci5wYWludFByb3BlcnR5PXJyKEdlKSx0ci5sYXlvdXRQcm9wZXJ0eT1ycihZZSk7dmFyIG5yPXRyLGlyPXRyLmxpZ2h0LGFyPXRyLnBhaW50UHJvcGVydHksb3I9dHIubGF5b3V0UHJvcGVydHk7ZnVuY3Rpb24gc3IodCxlKXt2YXIgcj0hMTtpZihlJiZlLmxlbmd0aClmb3IodmFyIG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO3QuZmlyZShuZXcgeihuZXcgRXJyb3IoYS5tZXNzYWdlKSkpLHI9ITB9cmV0dXJuIHJ9dmFyIGxyPXVyLGNyPTM7ZnVuY3Rpb24gdXIodCxlLHIpe3ZhciBuPXRoaXMuY2VsbHM9W107aWYodCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXt0aGlzLmFycmF5QnVmZmVyPXQ7dmFyIGk9bmV3IEludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7dD1pWzBdLGU9aVsxXSxyPWlbMl0sdGhpcy5kPWUrMipyO2Zvcih2YXIgYT0wO2E8dGhpcy5kKnRoaXMuZDthKyspe3ZhciBvPWlbY3IrYV0scz1pW2NyK2ErMV07bi5wdXNoKG89PT1zP251bGw6aS5zdWJhcnJheShvLHMpKX12YXIgbD1pW2NyK24ubGVuZ3RoXSxjPWlbY3Irbi5sZW5ndGgrMV07dGhpcy5rZXlzPWkuc3ViYXJyYXkobCxjKSx0aGlzLmJib3hlcz1pLnN1YmFycmF5KGMpLHRoaXMuaW5zZXJ0PXRoaXMuX2luc2VydFJlYWRvbmx5fWVsc2V7dGhpcy5kPWUrMipyO2Zvcih2YXIgdT0wO3U8dGhpcy5kKnRoaXMuZDt1Kyspbi5wdXNoKFtdKTt0aGlzLmtleXM9W10sdGhpcy5iYm94ZXM9W119dGhpcy5uPWUsdGhpcy5leHRlbnQ9dCx0aGlzLnBhZGRpbmc9cix0aGlzLnNjYWxlPWUvdCx0aGlzLnVpZD0wO3ZhciBoPXIvZSp0O3RoaXMubWluPS1oLHRoaXMubWF4PXQraH11ci5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5fZm9yRWFjaENlbGwoZSxyLG4saSx0aGlzLl9pbnNlcnRDZWxsLHRoaXMudWlkKyspLHRoaXMua2V5cy5wdXNoKHQpLHRoaXMuYmJveGVzLnB1c2goZSksdGhpcy5iYm94ZXMucHVzaChyKSx0aGlzLmJib3hlcy5wdXNoKG4pLHRoaXMuYmJveGVzLnB1c2goaSl9LHVyLnByb3RvdHlwZS5faW5zZXJ0UmVhZG9ubHk9ZnVuY3Rpb24oKXt0aHJvd1wiQ2Fubm90IGluc2VydCBpbnRvIGEgR3JpZEluZGV4IGNyZWF0ZWQgZnJvbSBhbiBBcnJheUJ1ZmZlci5cIn0sdXIucHJvdG90eXBlLl9pbnNlcnRDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLmNlbGxzW2ldLnB1c2goYSl9LHVyLnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLm1pbixhPXRoaXMubWF4O2lmKHQ8PWkmJmU8PWkmJmE8PXImJmE8PW4pcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMua2V5cyk7dmFyIG89W107cmV0dXJuIHRoaXMuX2ZvckVhY2hDZWxsKHQsZSxyLG4sdGhpcy5fcXVlcnlDZWxsLG8se30pLG99LHVyLnByb3RvdHlwZS5fcXVlcnlDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPXRoaXMuY2VsbHNbaV07aWYobnVsbCE9PXMpZm9yKHZhciBsPXRoaXMua2V5cyxjPXRoaXMuYmJveGVzLHU9MDt1PHMubGVuZ3RoO3UrKyl7dmFyIGg9c1t1XTtpZih2b2lkIDA9PT1vW2hdKXt2YXIgZj00Kmg7dDw9Y1tmKzJdJiZlPD1jW2YrM10mJnI+PWNbZiswXSYmbj49Y1tmKzFdPyhvW2hdPSEwLGEucHVzaChsW2hdKSk6b1toXT0hMX19fSx1ci5wcm90b3R5cGUuX2ZvckVhY2hDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcz10aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQodCksbD10aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQoZSksYz10aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQociksdT10aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQobiksaD1zO2g8PWM7aCsrKWZvcih2YXIgZj1sO2Y8PXU7ZisrKXt2YXIgcD10aGlzLmQqZitoO2lmKGkuY2FsbCh0aGlzLHQsZSxyLG4scCxhLG8pKXJldHVybn19LHVyLnByb3RvdHlwZS5fY29udmVydFRvQ2VsbENvb3JkPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKHRoaXMuZC0xLE1hdGguZmxvb3IodCp0aGlzLnNjYWxlKSt0aGlzLnBhZGRpbmcpKX0sdXIucHJvdG90eXBlLnRvQXJyYXlCdWZmZXI9ZnVuY3Rpb24oKXtpZih0aGlzLmFycmF5QnVmZmVyKXJldHVybiB0aGlzLmFycmF5QnVmZmVyO2Zvcih2YXIgdD10aGlzLmNlbGxzLGU9Y3IrdGhpcy5jZWxscy5sZW5ndGgrMSsxLHI9MCxuPTA7bjx0aGlzLmNlbGxzLmxlbmd0aDtuKyspcis9dGhpcy5jZWxsc1tuXS5sZW5ndGg7dmFyIGk9bmV3IEludDMyQXJyYXkoZStyK3RoaXMua2V5cy5sZW5ndGgrdGhpcy5iYm94ZXMubGVuZ3RoKTtpWzBdPXRoaXMuZXh0ZW50LGlbMV09dGhpcy5uLGlbMl09dGhpcy5wYWRkaW5nO2Zvcih2YXIgYT1lLG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9dFtvXTtpW2NyK29dPWEsaS5zZXQocyxhKSxhKz1zLmxlbmd0aH1yZXR1cm4gaVtjcit0Lmxlbmd0aF09YSxpLnNldCh0aGlzLmtleXMsYSksYSs9dGhpcy5rZXlzLmxlbmd0aCxpW2NyK3QubGVuZ3RoKzFdPWEsaS5zZXQodGhpcy5iYm94ZXMsYSksYSs9dGhpcy5iYm94ZXMubGVuZ3RoLGkuYnVmZmVyfTt2YXIgaHI9c2VsZi5JbWFnZURhdGEsZnI9e307ZnVuY3Rpb24gcHIodCxlLHIpe3ZvaWQgMD09PXImJihyPXt9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIl9jbGFzc1JlZ2lzdHJ5S2V5XCIse3ZhbHVlOnQsd3JpdGVhYmxlOiExfSksZnJbdF09e2tsYXNzOmUsb21pdDpyLm9taXR8fFtdLHNoYWxsb3c6ci5zaGFsbG93fHxbXX19Zm9yKHZhciBkciBpbiBwcihcIk9iamVjdFwiLE9iamVjdCksbHIuc2VyaWFsaXplPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC50b0FycmF5QnVmZmVyKCk7cmV0dXJuIGUmJmUucHVzaChyKSxyfSxsci5kZXNlcmlhbGl6ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGxyKHQpfSxwcihcIkdyaWRcIixscikscHIoXCJDb2xvclwiLHR0KSxwcihcIkVycm9yXCIsRXJyb3IpLHByKFwiU3R5bGVQcm9wZXJ0eUZ1bmN0aW9uXCIsTWUpLHByKFwiU3R5bGVFeHByZXNzaW9uXCIsYmUse29taXQ6W1wiX2V2YWx1YXRvclwiXX0pLHByKFwiWm9vbURlcGVuZGVudEV4cHJlc3Npb25cIixBZSkscHIoXCJab29tQ29uc3RhbnRFeHByZXNzaW9uXCIsa2UpLHByKFwiQ29tcG91bmRFeHByZXNzaW9uXCIsZ3Qse29taXQ6W1wiX2V2YWx1YXRlXCJdfSksUnQpUnRbZHJdLl9jbGFzc1JlZ2lzdHJ5S2V5fHxwcihcIkV4cHJlc3Npb25fXCIrZHIsUnRbZHJdKTtmdW5jdGlvbiBncih0LGUpe2lmKG51bGw9PXR8fFwiYm9vbGVhblwiPT10eXBlb2YgdHx8XCJudW1iZXJcIj09dHlwZW9mIHR8fFwic3RyaW5nXCI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2YgQm9vbGVhbnx8dCBpbnN0YW5jZW9mIE51bWJlcnx8dCBpbnN0YW5jZW9mIFN0cmluZ3x8dCBpbnN0YW5jZW9mIERhdGV8fHQgaW5zdGFuY2VvZiBSZWdFeHApcmV0dXJuIHQ7aWYodCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBlJiZlLnB1c2godCksdDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcodCkpe3ZhciByPXQ7cmV0dXJuIGUmJmUucHVzaChyLmJ1ZmZlcikscn1pZih0IGluc3RhbmNlb2YgaHIpcmV0dXJuIGUmJmUucHVzaCh0LmRhdGEuYnVmZmVyKSx0O2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgbj1bXSxpPTAsYT10O2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTtuLnB1c2goZ3IobyxlKSl9cmV0dXJuIG59aWYoXCJvYmplY3RcIj09dHlwZW9mIHQpe3ZhciBzPXQuY29uc3RydWN0b3IsbD1zLl9jbGFzc1JlZ2lzdHJ5S2V5O2lmKCFsKXRocm93IG5ldyBFcnJvcihcImNhbid0IHNlcmlhbGl6ZSBvYmplY3Qgb2YgdW5yZWdpc3RlcmVkIGNsYXNzXCIpO3ZhciBjPXt9O2lmKHMuc2VyaWFsaXplKWMuX3NlcmlhbGl6ZWQ9cy5zZXJpYWxpemUodCxlKTtlbHNle2Zvcih2YXIgdSBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkodSkmJiEoZnJbbF0ub21pdC5pbmRleE9mKHUpPj0wKSl7dmFyIGg9dFt1XTtjW3VdPWZyW2xdLnNoYWxsb3cuaW5kZXhPZih1KT49MD9oOmdyKGgsZSl9dCBpbnN0YW5jZW9mIEVycm9yJiYoYy5tZXNzYWdlPXQubWVzc2FnZSl9cmV0dXJue25hbWU6bCxwcm9wZXJ0aWVzOmN9fXRocm93IG5ldyBFcnJvcihcImNhbid0IHNlcmlhbGl6ZSBvYmplY3Qgb2YgdHlwZSBcIit0eXBlb2YgdCl9ZnVuY3Rpb24gdnIodCl7aWYobnVsbD09dHx8XCJib29sZWFuXCI9PXR5cGVvZiB0fHxcIm51bWJlclwiPT10eXBlb2YgdHx8XCJzdHJpbmdcIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBCb29sZWFufHx0IGluc3RhbmNlb2YgTnVtYmVyfHx0IGluc3RhbmNlb2YgU3RyaW5nfHx0IGluc3RhbmNlb2YgRGF0ZXx8dCBpbnN0YW5jZW9mIFJlZ0V4cHx8dCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxBcnJheUJ1ZmZlci5pc1ZpZXcodCl8fHQgaW5zdGFuY2VvZiBocilyZXR1cm4gdDtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdnIodCl9KTtpZihcIm9iamVjdFwiPT10eXBlb2YgdCl7dmFyIGU9dCxyPWUubmFtZSxuPWUucHJvcGVydGllcztpZighcil0aHJvdyBuZXcgRXJyb3IoXCJjYW4ndCBkZXNlcmlhbGl6ZSBvYmplY3Qgb2YgYW5vbnltb3VzIGNsYXNzXCIpO3ZhciBpPWZyW3JdLmtsYXNzO2lmKCFpKXRocm93IG5ldyBFcnJvcihcImNhbid0IGRlc2VyaWFsaXplIHVucmVnaXN0ZXJlZCBjbGFzcyBcIityKTtpZihpLmRlc2VyaWFsaXplKXJldHVybiBpLmRlc2VyaWFsaXplKG4uX3NlcmlhbGl6ZWQpO2Zvcih2YXIgYT1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxvPTAscz1PYmplY3Qua2V5cyhuKTtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb107YVtsXT1mcltyXS5zaGFsbG93LmluZGV4T2YobCk+PTA/bltsXTp2cihuW2xdKX1yZXR1cm4gYX10aHJvdyBuZXcgRXJyb3IoXCJjYW4ndCBkZXNlcmlhbGl6ZSBvYmplY3Qgb2YgdHlwZSBcIit0eXBlb2YgdCl9dmFyIG1yPWZ1bmN0aW9uKCl7dGhpcy5maXJzdD0hMH07bXIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPU1hdGguZmxvb3IodCk7cmV0dXJuIHRoaXMuZmlyc3Q/KHRoaXMuZmlyc3Q9ITEsdGhpcy5sYXN0SW50ZWdlclpvb209cix0aGlzLmxhc3RJbnRlZ2VyWm9vbVRpbWU9MCx0aGlzLmxhc3Rab29tPXQsdGhpcy5sYXN0Rmxvb3Jab29tPXIsITApOih0aGlzLmxhc3RGbG9vclpvb20+cj8odGhpcy5sYXN0SW50ZWdlclpvb209cisxLHRoaXMubGFzdEludGVnZXJab29tVGltZT1lKTp0aGlzLmxhc3RGbG9vclpvb208ciYmKHRoaXMubGFzdEludGVnZXJab29tPXIsdGhpcy5sYXN0SW50ZWdlclpvb21UaW1lPWUpLHQhPT10aGlzLmxhc3Rab29tJiYodGhpcy5sYXN0Wm9vbT10LHRoaXMubGFzdEZsb29yWm9vbT1yLCEwKSl9O3ZhciB5cj17XCJMYXRpbi0xIFN1cHBsZW1lbnRcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI4JiZ0PD0yNTV9LEFyYWJpYzpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTUzNiYmdDw9MTc5MX0sXCJBcmFiaWMgU3VwcGxlbWVudFwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xODcyJiZ0PD0xOTE5fSxcIkFyYWJpYyBFeHRlbmRlZC1BXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTIyMDgmJnQ8PTIzMDN9LFwiSGFuZ3VsIEphbW9cIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NDM1MiYmdDw9NDYwN30sXCJVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTUxMjAmJnQ8PTU3NTl9LEtobWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02MDE2JiZ0PD02MTQzfSxcIlVuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3MgRXh0ZW5kZWRcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjMyMCYmdDw9NjM5OX0sXCJHZW5lcmFsIFB1bmN0dWF0aW9uXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTgxOTImJnQ8PTgzMDN9LFwiTGV0dGVybGlrZSBTeW1ib2xzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTg0NDgmJnQ8PTg1Mjd9LFwiTnVtYmVyIEZvcm1zXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTg1MjgmJnQ8PTg1OTF9LFwiTWlzY2VsbGFuZW91cyBUZWNobmljYWxcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49ODk2MCYmdDw9OTIxNX0sXCJDb250cm9sIFBpY3R1cmVzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTkyMTYmJnQ8PTkyNzl9LFwiT3B0aWNhbCBDaGFyYWN0ZXIgUmVjb2duaXRpb25cIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49OTI4MCYmdDw9OTMxMX0sXCJFbmNsb3NlZCBBbHBoYW51bWVyaWNzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTkzMTImJnQ8PTk0NzF9LFwiR2VvbWV0cmljIFNoYXBlc1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj05NjMyJiZ0PD05NzI3fSxcIk1pc2NlbGxhbmVvdXMgU3ltYm9sc1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj05NzI4JiZ0PD05OTgzfSxcIk1pc2NlbGxhbmVvdXMgU3ltYm9scyBhbmQgQXJyb3dzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTExMDA4JiZ0PD0xMTI2M30sXCJDSksgUmFkaWNhbHMgU3VwcGxlbWVudFwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMTkwNCYmdDw9MTIwMzF9LFwiS2FuZ3hpIFJhZGljYWxzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyMDMyJiZ0PD0xMjI1NX0sXCJJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyMjcyJiZ0PD0xMjI4N30sXCJDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb25cIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTIyODgmJnQ8PTEyMzUxfSxIaXJhZ2FuYTpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTIzNTImJnQ8PTEyNDQ3fSxLYXRha2FuYTpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI0NDgmJnQ8PTEyNTQzfSxCb3BvbW9mbzpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI1NDQmJnQ8PTEyNTkxfSxcIkhhbmd1bCBDb21wYXRpYmlsaXR5IEphbW9cIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI1OTImJnQ8PTEyNjg3fSxLYW5idW46ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyNjg4JiZ0PD0xMjcwM30sXCJCb3BvbW9mbyBFeHRlbmRlZFwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjcwNCYmdDw9MTI3MzV9LFwiQ0pLIFN0cm9rZXNcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI3MzYmJnQ8PTEyNzgzfSxcIkthdGFrYW5hIFBob25ldGljIEV4dGVuc2lvbnNcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI3ODQmJnQ8PTEyNzk5fSxcIkVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHNcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI4MDAmJnQ8PTEzMDU1fSxcIkNKSyBDb21wYXRpYmlsaXR5XCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEzMDU2JiZ0PD0xMzMxMX0sXCJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEzMzEyJiZ0PD0xOTkwM30sXCJZaWppbmcgSGV4YWdyYW0gU3ltYm9sc1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xOTkwNCYmdDw9MTk5Njd9LFwiQ0pLIFVuaWZpZWQgSWRlb2dyYXBoc1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xOTk2OCYmdDw9NDA5NTl9LFwiWWkgU3lsbGFibGVzXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTQwOTYwJiZ0PD00MjEyN30sXCJZaSBSYWRpY2Fsc1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj00MjEyOCYmdDw9NDIxOTF9LFwiSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQVwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj00MzM2MCYmdDw9NDMzOTF9LFwiSGFuZ3VsIFN5bGxhYmxlc1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj00NDAzMiYmdDw9NTUyMTV9LFwiSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQlwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj01NTIxNiYmdDw9NTUyOTV9LFwiUHJpdmF0ZSBVc2UgQXJlYVwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj01NzM0NCYmdDw9NjM3NDN9LFwiQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBoc1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02Mzc0NCYmdDw9NjQyNTV9LFwiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY0MzM2JiZ0PD02NTAyM30sXCJWZXJ0aWNhbCBGb3Jtc1wiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NTA0MCYmdDw9NjUwNTV9LFwiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXNcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjUwNzImJnQ8PTY1MTAzfSxcIlNtYWxsIEZvcm0gVmFyaWFudHNcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjUxMDQmJnQ8PTY1MTM1fSxcIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQlwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NTEzNiYmdDw9NjUyNzl9LFwiSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXNcIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjUyODAmJnQ8PTY1NTE5fX07ZnVuY3Rpb24geHIodCl7Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSlpZihfcihyW2VdLmNoYXJDb2RlQXQoMCkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGJyKHQpe3JldHVybiEoeXIuQXJhYmljKHQpfHx5cltcIkFyYWJpYyBTdXBwbGVtZW50XCJdKHQpfHx5cltcIkFyYWJpYyBFeHRlbmRlZC1BXCJdKHQpfHx5cltcIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQVwiXSh0KXx8eXJbXCJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUJcIl0odCkpfWZ1bmN0aW9uIF9yKHQpe3JldHVybiEhKDc0Nj09PXR8fDc0Nz09PXR8fCEodDw0MzUyKSYmKHlyW1wiQm9wb21vZm8gRXh0ZW5kZWRcIl0odCl8fHlyLkJvcG9tb2ZvKHQpfHx5cltcIkNKSyBDb21wYXRpYmlsaXR5IEZvcm1zXCJdKHQpJiYhKHQ+PTY1MDk3JiZ0PD02NTEwMyl8fHlyW1wiQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBoc1wiXSh0KXx8eXJbXCJDSksgQ29tcGF0aWJpbGl0eVwiXSh0KXx8eXJbXCJDSksgUmFkaWNhbHMgU3VwcGxlbWVudFwiXSh0KXx8eXJbXCJDSksgU3Ryb2tlc1wiXSh0KXx8ISgheXJbXCJDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb25cIl0odCl8fHQ+PTEyMjk2JiZ0PD0xMjMwNXx8dD49MTIzMDgmJnQ8PTEyMzE5fHwxMjMzNj09PXQpfHx5cltcIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEFcIl0odCl8fHlyW1wiQ0pLIFVuaWZpZWQgSWRlb2dyYXBoc1wiXSh0KXx8eXJbXCJFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzXCJdKHQpfHx5cltcIkhhbmd1bCBDb21wYXRpYmlsaXR5IEphbW9cIl0odCl8fHlyW1wiSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQVwiXSh0KXx8eXJbXCJIYW5ndWwgSmFtbyBFeHRlbmRlZC1CXCJdKHQpfHx5cltcIkhhbmd1bCBKYW1vXCJdKHQpfHx5cltcIkhhbmd1bCBTeWxsYWJsZXNcIl0odCl8fHlyLkhpcmFnYW5hKHQpfHx5cltcIklkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnNcIl0odCl8fHlyLkthbmJ1bih0KXx8eXJbXCJLYW5neGkgUmFkaWNhbHNcIl0odCl8fHlyW1wiS2F0YWthbmEgUGhvbmV0aWMgRXh0ZW5zaW9uc1wiXSh0KXx8eXIuS2F0YWthbmEodCkmJjEyNTQwIT09dHx8ISgheXJbXCJIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3Jtc1wiXSh0KXx8NjUyODg9PT10fHw2NTI4OT09PXR8fDY1MjkzPT09dHx8dD49NjUzMDYmJnQ8PTY1MzEwfHw2NTMzOT09PXR8fDY1MzQxPT09dHx8NjUzNDM9PT10fHx0Pj02NTM3MSYmdDw9NjU1MDN8fDY1NTA3PT09dHx8dD49NjU1MTImJnQ8PTY1NTE5KXx8ISgheXJbXCJTbWFsbCBGb3JtIFZhcmlhbnRzXCJdKHQpfHx0Pj02NTExMiYmdDw9NjUxMTh8fHQ+PTY1MTIzJiZ0PD02NTEyNil8fHlyW1wiVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljc1wiXSh0KXx8eXJbXCJVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzIEV4dGVuZGVkXCJdKHQpfHx5cltcIlZlcnRpY2FsIEZvcm1zXCJdKHQpfHx5cltcIllpamluZyBIZXhhZ3JhbSBTeW1ib2xzXCJdKHQpfHx5cltcIllpIFN5bGxhYmxlc1wiXSh0KXx8eXJbXCJZaSBSYWRpY2Fsc1wiXSh0KSkpfWZ1bmN0aW9uIHdyKHQpe3JldHVybiEoX3IodCl8fGZ1bmN0aW9uKHQpe3JldHVybiEhKHlyW1wiTGF0aW4tMSBTdXBwbGVtZW50XCJdKHQpJiYoMTY3PT09dHx8MTY5PT09dHx8MTc0PT09dHx8MTc3PT09dHx8MTg4PT09dHx8MTg5PT09dHx8MTkwPT09dHx8MjE1PT09dHx8MjQ3PT09dCl8fHlyW1wiR2VuZXJhbCBQdW5jdHVhdGlvblwiXSh0KSYmKDgyMTQ9PT10fHw4MjI0PT09dHx8ODIyNT09PXR8fDgyNDA9PT10fHw4MjQxPT09dHx8ODI1MT09PXR8fDgyNTI9PT10fHw4MjU4PT09dHx8ODI2Mz09PXR8fDgyNjQ9PT10fHw4MjY1PT09dHx8ODI3Mz09PXQpfHx5cltcIkxldHRlcmxpa2UgU3ltYm9sc1wiXSh0KXx8eXJbXCJOdW1iZXIgRm9ybXNcIl0odCl8fHlyW1wiTWlzY2VsbGFuZW91cyBUZWNobmljYWxcIl0odCkmJih0Pj04OTYwJiZ0PD04OTY3fHx0Pj04OTcyJiZ0PD04OTkxfHx0Pj04OTk2JiZ0PD05ZTN8fDkwMDM9PT10fHx0Pj05MDg1JiZ0PD05MTE0fHx0Pj05MTUwJiZ0PD05MTY1fHw5MTY3PT09dHx8dD49OTE2OSYmdDw9OTE3OXx8dD49OTE4NiYmdDw9OTIxNSl8fHlyW1wiQ29udHJvbCBQaWN0dXJlc1wiXSh0KSYmOTI1MSE9PXR8fHlyW1wiT3B0aWNhbCBDaGFyYWN0ZXIgUmVjb2duaXRpb25cIl0odCl8fHlyW1wiRW5jbG9zZWQgQWxwaGFudW1lcmljc1wiXSh0KXx8eXJbXCJHZW9tZXRyaWMgU2hhcGVzXCJdKHQpfHx5cltcIk1pc2NlbGxhbmVvdXMgU3ltYm9sc1wiXSh0KSYmISh0Pj05NzU0JiZ0PD05NzU5KXx8eXJbXCJNaXNjZWxsYW5lb3VzIFN5bWJvbHMgYW5kIEFycm93c1wiXSh0KSYmKHQ+PTExMDI2JiZ0PD0xMTA1NXx8dD49MTEwODgmJnQ8PTExMDk3fHx0Pj0xMTE5MiYmdDw9MTEyNDMpfHx5cltcIkNKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvblwiXSh0KXx8eXIuS2F0YWthbmEodCl8fHlyW1wiUHJpdmF0ZSBVc2UgQXJlYVwiXSh0KXx8eXJbXCJDSksgQ29tcGF0aWJpbGl0eSBGb3Jtc1wiXSh0KXx8eXJbXCJTbWFsbCBGb3JtIFZhcmlhbnRzXCJdKHQpfHx5cltcIkhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zXCJdKHQpfHw4NzM0PT09dHx8ODc1Nj09PXR8fDg3NTc9PT10fHx0Pj05OTg0JiZ0PD0xMDA4N3x8dD49MTAxMDImJnQ8PTEwMTMxfHw2NTUzMj09PXR8fDY1NTMzPT09dCl9KHQpKX1mdW5jdGlvbiBrcih0LGUpe3JldHVybiEoIWUmJih0Pj0xNDI0JiZ0PD0yMzAzfHx5cltcIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQVwiXSh0KXx8eXJbXCJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUJcIl0odCkpfHx0Pj0yMzA0JiZ0PD0zNTgzfHx0Pj0zODQwJiZ0PD00MjU1fHx5ci5LaG1lcih0KSl9dmFyIEFyLFRyPSExLE1yPW51bGwsU3I9ITEsRXI9bmV3IE8sQ3I9e2FwcGx5QXJhYmljU2hhcGluZzpudWxsLHByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dDpudWxsLGlzTG9hZGVkOmZ1bmN0aW9uKCl7cmV0dXJuIFNyfHxudWxsIT1Dci5hcHBseUFyYWJpY1NoYXBpbmd9fSxMcj1mdW5jdGlvbih0LGUpe3RoaXMuem9vbT10LGU/KHRoaXMubm93PWUubm93LHRoaXMuZmFkZUR1cmF0aW9uPWUuZmFkZUR1cmF0aW9uLHRoaXMuem9vbUhpc3Rvcnk9ZS56b29tSGlzdG9yeSx0aGlzLnRyYW5zaXRpb249ZS50cmFuc2l0aW9uKToodGhpcy5ub3c9MCx0aGlzLmZhZGVEdXJhdGlvbj0wLHRoaXMuem9vbUhpc3Rvcnk9bmV3IG1yLHRoaXMudHJhbnNpdGlvbj17fSl9O0xyLnByb3RvdHlwZS5pc1N1cHBvcnRlZFNjcmlwdD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPXQ7cjxuLmxlbmd0aDtyKz0xKWlmKCFrcihuW3JdLmNoYXJDb2RlQXQoMCksZSkpcmV0dXJuITE7cmV0dXJuITB9KHQsQ3IuaXNMb2FkZWQoKSl9LExyLnByb3RvdHlwZS5jcm9zc0ZhZGluZ0ZhY3Rvcj1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5mYWRlRHVyYXRpb24/MTpNYXRoLm1pbigodGhpcy5ub3ctdGhpcy56b29tSGlzdG9yeS5sYXN0SW50ZWdlclpvb21UaW1lKS90aGlzLmZhZGVEdXJhdGlvbiwxKX07dmFyIHpyPWZ1bmN0aW9uKHQsZSl7dGhpcy5wcm9wZXJ0eT10LHRoaXMudmFsdWU9ZSx0aGlzLmV4cHJlc3Npb249U2Uodm9pZCAwPT09ZT90LnNwZWNpZmljYXRpb24uZGVmYXVsdDplLHQuc3BlY2lmaWNhdGlvbil9O3pyLnByb3RvdHlwZS5pc0RhdGFEcml2ZW49ZnVuY3Rpb24oKXtyZXR1cm5cInNvdXJjZVwiPT09dGhpcy5leHByZXNzaW9uLmtpbmR8fFwiY29tcG9zaXRlXCI9PT10aGlzLmV4cHJlc3Npb24ua2luZH0senIucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHJvcGVydHkucG9zc2libHlFdmFsdWF0ZSh0aGlzLHQpfTt2YXIgT3I9ZnVuY3Rpb24odCl7dGhpcy5wcm9wZXJ0eT10LHRoaXMudmFsdWU9bmV3IHpyKHQsdm9pZCAwKX07T3IucHJvdG90eXBlLnRyYW5zaXRpb25lZD1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgRHIodGhpcy5wcm9wZXJ0eSx0aGlzLnZhbHVlLGUscCh7fSx0LnRyYW5zaXRpb24sdGhpcy50cmFuc2l0aW9uKSx0Lm5vdyl9LE9yLnByb3RvdHlwZS51bnRyYW5zaXRpb25lZD1mdW5jdGlvbigpe3JldHVybiBuZXcgRHIodGhpcy5wcm9wZXJ0eSx0aGlzLnZhbHVlLG51bGwse30sMCl9O3ZhciBJcj1mdW5jdGlvbih0KXt0aGlzLl9wcm9wZXJ0aWVzPXQsdGhpcy5fdmFsdWVzPU9iamVjdC5jcmVhdGUodC5kZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlcyl9O0lyLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4geCh0aGlzLl92YWx1ZXNbdF0udmFsdWUudmFsdWUpfSxJci5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt0aGlzLl92YWx1ZXMuaGFzT3duUHJvcGVydHkodCl8fCh0aGlzLl92YWx1ZXNbdF09bmV3IE9yKHRoaXMuX3ZhbHVlc1t0XS5wcm9wZXJ0eSkpLHRoaXMuX3ZhbHVlc1t0XS52YWx1ZT1uZXcgenIodGhpcy5fdmFsdWVzW3RdLnByb3BlcnR5LG51bGw9PT1lP3ZvaWQgMDp4KGUpKX0sSXIucHJvdG90eXBlLmdldFRyYW5zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHgodGhpcy5fdmFsdWVzW3RdLnRyYW5zaXRpb24pfSxJci5wcm90b3R5cGUuc2V0VHJhbnNpdGlvbj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZhbHVlcy5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuX3ZhbHVlc1t0XT1uZXcgT3IodGhpcy5fdmFsdWVzW3RdLnByb3BlcnR5KSksdGhpcy5fdmFsdWVzW3RdLnRyYW5zaXRpb249eChlKXx8dm9pZCAwfSxJci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXt9LGU9MCxyPU9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcyk7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9dGhpcy5nZXRWYWx1ZShuKTt2b2lkIDAhPT1pJiYodFtuXT1pKTt2YXIgYT10aGlzLmdldFRyYW5zaXRpb24obik7dm9pZCAwIT09YSYmKHRbbitcIi10cmFuc2l0aW9uXCJdPWEpfXJldHVybiB0fSxJci5wcm90b3R5cGUudHJhbnNpdGlvbmVkPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBQcih0aGlzLl9wcm9wZXJ0aWVzKSxuPTAsaT1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtyLl92YWx1ZXNbYV09dGhpcy5fdmFsdWVzW2FdLnRyYW5zaXRpb25lZCh0LGUuX3ZhbHVlc1thXSl9cmV0dXJuIHJ9LElyLnByb3RvdHlwZS51bnRyYW5zaXRpb25lZD1mdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgUHIodGhpcy5fcHJvcGVydGllcyksZT0wLHI9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV07dC5fdmFsdWVzW25dPXRoaXMuX3ZhbHVlc1tuXS51bnRyYW5zaXRpb25lZCgpfXJldHVybiB0fTt2YXIgRHI9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLnByb3BlcnR5PXQsdGhpcy52YWx1ZT1lLHRoaXMuYmVnaW49aStuLmRlbGF5fHwwLHRoaXMuZW5kPXRoaXMuYmVnaW4rbi5kdXJhdGlvbnx8MCx0LnNwZWNpZmljYXRpb24udHJhbnNpdGlvbiYmKG4uZGVsYXl8fG4uZHVyYXRpb24pJiYodGhpcy5wcmlvcj1yKX07RHIucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dC5ub3d8fDAscj10aGlzLnZhbHVlLnBvc3NpYmx5RXZhbHVhdGUodCksbj10aGlzLnByaW9yO2lmKG4pe2lmKGU+dGhpcy5lbmQpcmV0dXJuIHRoaXMucHJpb3I9bnVsbCxyO2lmKHRoaXMudmFsdWUuaXNEYXRhRHJpdmVuKCkpcmV0dXJuIHRoaXMucHJpb3I9bnVsbCxyO2lmKGU8dGhpcy5iZWdpbilyZXR1cm4gbi5wb3NzaWJseUV2YWx1YXRlKHQpO3ZhciBpPShlLXRoaXMuYmVnaW4pLyh0aGlzLmVuZC10aGlzLmJlZ2luKTtyZXR1cm4gdGhpcy5wcm9wZXJ0eS5pbnRlcnBvbGF0ZShuLnBvc3NpYmx5RXZhbHVhdGUodCkscixmdW5jdGlvbih0KXtpZihpPD0wKXJldHVybiAwO2lmKGk+PTEpcmV0dXJuIDE7dmFyIGU9aSppLHI9ZSppO3JldHVybiA0KihpPC41P3I6MyooaS1lKStyLS43NSl9KCkpfXJldHVybiByfTt2YXIgUHI9ZnVuY3Rpb24odCl7dGhpcy5fcHJvcGVydGllcz10LHRoaXMuX3ZhbHVlcz1PYmplY3QuY3JlYXRlKHQuZGVmYXVsdFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlcyl9O1ByLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQnIodGhpcy5fcHJvcGVydGllcykscj0wLG49T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl07ZS5fdmFsdWVzW2ldPXRoaXMuX3ZhbHVlc1tpXS5wb3NzaWJseUV2YWx1YXRlKHQpfXJldHVybiBlfSxQci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTt0PGUubGVuZ3RoO3QrPTEpe3ZhciByPWVbdF07aWYodGhpcy5fdmFsdWVzW3JdLnByaW9yKXJldHVybiEwfXJldHVybiExfTt2YXIgUnI9ZnVuY3Rpb24odCl7dGhpcy5fcHJvcGVydGllcz10LHRoaXMuX3ZhbHVlcz1PYmplY3QuY3JlYXRlKHQuZGVmYXVsdFByb3BlcnR5VmFsdWVzKX07UnIucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB4KHRoaXMuX3ZhbHVlc1t0XS52YWx1ZSl9LFJyLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3RoaXMuX3ZhbHVlc1t0XT1uZXcgenIodGhpcy5fdmFsdWVzW3RdLnByb3BlcnR5LG51bGw9PT1lP3ZvaWQgMDp4KGUpKX0sUnIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD17fSxlPTAscj1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXSxpPXRoaXMuZ2V0VmFsdWUobik7dm9pZCAwIT09aSYmKHRbbl09aSl9cmV0dXJuIHR9LFJyLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQnIodGhpcy5fcHJvcGVydGllcykscj0wLG49T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl07ZS5fdmFsdWVzW2ldPXRoaXMuX3ZhbHVlc1tpXS5wb3NzaWJseUV2YWx1YXRlKHQpfXJldHVybiBlfTt2YXIgRnI9ZnVuY3Rpb24odCxlLHIpe3RoaXMucHJvcGVydHk9dCx0aGlzLnZhbHVlPWUsdGhpcy5nbG9iYWxzPXJ9O0ZyLnByb3RvdHlwZS5pc0NvbnN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuXCJjb25zdGFudFwiPT09dGhpcy52YWx1ZS5raW5kfSxGci5wcm90b3R5cGUuY29uc3RhbnRPcj1mdW5jdGlvbih0KXtyZXR1cm5cImNvbnN0YW50XCI9PT10aGlzLnZhbHVlLmtpbmQ/dGhpcy52YWx1ZS52YWx1ZTp0fSxGci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHJvcGVydHkuZXZhbHVhdGUodGhpcy52YWx1ZSx0aGlzLmdsb2JhbHMsdCl9O3ZhciBCcj1mdW5jdGlvbih0KXt0aGlzLl9wcm9wZXJ0aWVzPXQsdGhpcy5fdmFsdWVzPU9iamVjdC5jcmVhdGUodC5kZWZhdWx0UG9zc2libHlFdmFsdWF0ZWRWYWx1ZXMpfTtCci5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWx1ZXNbdF19O3ZhciBOcj1mdW5jdGlvbih0KXt0aGlzLnNwZWNpZmljYXRpb249dH07TnIucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5leHByZXNzaW9uLmV2YWx1YXRlKGUpfSxOci5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWt0W3RoaXMuc3BlY2lmaWNhdGlvbi50eXBlXTtyZXR1cm4gbj9uKHQsZSxyKTp0fTt2YXIganI9ZnVuY3Rpb24odCl7dGhpcy5zcGVjaWZpY2F0aW9uPXR9O2pyLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJjb25zdGFudFwiPT09dC5leHByZXNzaW9uLmtpbmR8fFwiY2FtZXJhXCI9PT10LmV4cHJlc3Npb24ua2luZD9uZXcgRnIodGhpcyx7a2luZDpcImNvbnN0YW50XCIsdmFsdWU6dC5leHByZXNzaW9uLmV2YWx1YXRlKGUpfSxlKTpuZXcgRnIodGhpcyx0LmV4cHJlc3Npb24sZSl9LGpyLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0LGUscil7aWYoXCJjb25zdGFudFwiIT09dC52YWx1ZS5raW5kfHxcImNvbnN0YW50XCIhPT1lLnZhbHVlLmtpbmQpcmV0dXJuIHQ7aWYodm9pZCAwPT09dC52YWx1ZS52YWx1ZXx8dm9pZCAwPT09ZS52YWx1ZS52YWx1ZSlyZXR1cm4gbmV3IEZyKHRoaXMse2tpbmQ6XCJjb25zdGFudFwiLHZhbHVlOnZvaWQgMH0sdC5nbG9iYWxzKTt2YXIgbj1rdFt0aGlzLnNwZWNpZmljYXRpb24udHlwZV07cmV0dXJuIG4/bmV3IEZyKHRoaXMse2tpbmQ6XCJjb25zdGFudFwiLHZhbHVlOm4odC52YWx1ZS52YWx1ZSxlLnZhbHVlLnZhbHVlLHIpfSx0Lmdsb2JhbHMpOnR9LGpyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0LGUscil7cmV0dXJuXCJjb25zdGFudFwiPT09dC5raW5kP3QudmFsdWU6dC5ldmFsdWF0ZShlLHIpfTt2YXIgVnI9ZnVuY3Rpb24odCl7dGhpcy5zcGVjaWZpY2F0aW9uPXR9O1ZyLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwIT09dC52YWx1ZSl7aWYoXCJjb25zdGFudFwiPT09dC5leHByZXNzaW9uLmtpbmQpe3ZhciByPXQuZXhwcmVzc2lvbi5ldmFsdWF0ZShlKTtyZXR1cm4gdGhpcy5fY2FsY3VsYXRlKHIscixyLGUpfXJldHVybiB0aGlzLl9jYWxjdWxhdGUodC5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBMcihNYXRoLmZsb29yKGUuem9vbS0xKSxlKSksdC5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBMcihNYXRoLmZsb29yKGUuem9vbSksZSkpLHQuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgTHIoTWF0aC5mbG9vcihlLnpvb20rMSksZSkpLGUpfX0sVnIucHJvdG90eXBlLl9jYWxjdWxhdGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi56b29tLGE9aS1NYXRoLmZsb29yKGkpLG89bi5jcm9zc0ZhZGluZ0ZhY3RvcigpO3JldHVybiBpPm4uem9vbUhpc3RvcnkubGFzdEludGVnZXJab29tP3tmcm9tOnQsdG86ZSxmcm9tU2NhbGU6Mix0b1NjYWxlOjEsdDphKygxLWEpKm99Ontmcm9tOnIsdG86ZSxmcm9tU2NhbGU6LjUsdG9TY2FsZToxLHQ6MS0oMS1vKSphfX0sVnIucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0fTt2YXIgVXI9ZnVuY3Rpb24odCl7dGhpcy5zcGVjaWZpY2F0aW9uPXR9O1VyLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuISF0LmV4cHJlc3Npb24uZXZhbHVhdGUoZSl9LFVyLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbigpe3JldHVybiExfTt2YXIgcXI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMucHJvcGVydGllcz10LHRoaXMuZGVmYXVsdFByb3BlcnR5VmFsdWVzPXt9LHRoaXMuZGVmYXVsdFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZXM9e30sdGhpcy5kZWZhdWx0VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzPXt9LHRoaXMuZGVmYXVsdFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVzPXt9LHQpe3ZhciByPXRbZV0sbj10aGlzLmRlZmF1bHRQcm9wZXJ0eVZhbHVlc1tlXT1uZXcgenIocix2b2lkIDApLGk9dGhpcy5kZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlc1tlXT1uZXcgT3Iocik7dGhpcy5kZWZhdWx0VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzW2VdPWkudW50cmFuc2l0aW9uZWQoKSx0aGlzLmRlZmF1bHRQb3NzaWJseUV2YWx1YXRlZFZhbHVlc1tlXT1uLnBvc3NpYmx5RXZhbHVhdGUoe30pfX07cHIoXCJEYXRhRHJpdmVuUHJvcGVydHlcIixqcikscHIoXCJEYXRhQ29uc3RhbnRQcm9wZXJ0eVwiLE5yKSxwcihcIkNyb3NzRmFkZWRQcm9wZXJ0eVwiLFZyKSxwcihcIkNvbG9yUmFtcFByb3BlcnR5XCIsVXIpO3ZhciBIcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7Zm9yKHZhciBuIGluIHQuY2FsbCh0aGlzKSx0aGlzLmlkPWUuaWQsdGhpcy5tZXRhZGF0YT1lLm1ldGFkYXRhLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5taW56b29tPWUubWluem9vbSx0aGlzLm1heHpvb209ZS5tYXh6b29tLHRoaXMudmlzaWJpbGl0eT1cInZpc2libGVcIixcImJhY2tncm91bmRcIiE9PWUudHlwZSYmKHRoaXMuc291cmNlPWUuc291cmNlLHRoaXMuc291cmNlTGF5ZXI9ZVtcInNvdXJjZS1sYXllclwiXSx0aGlzLmZpbHRlcj1lLmZpbHRlciksdGhpcy5fZmVhdHVyZUZpbHRlcj1mdW5jdGlvbigpe3JldHVybiEwfSxyLmxheW91dCYmKHRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0PW5ldyBScihyLmxheW91dCkpLHRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQ9bmV3IElyKHIucGFpbnQpLGUucGFpbnQpdGhpcy5zZXRQYWludFByb3BlcnR5KG4sZS5wYWludFtuXSx7dmFsaWRhdGU6ITF9KTtmb3IodmFyIGkgaW4gZS5sYXlvdXQpdGhpcy5zZXRMYXlvdXRQcm9wZXJ0eShpLGUubGF5b3V0W2ldLHt2YWxpZGF0ZTohMX0pO3RoaXMuX3RyYW5zaXRpb25pbmdQYWludD10aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LnVudHJhbnNpdGlvbmVkKCl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldExheW91dFByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVyblwidmlzaWJpbGl0eVwiPT09dD90aGlzLnZpc2liaWxpdHk6dGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQuZ2V0VmFsdWUodCl9LGUucHJvdG90eXBlLnNldExheW91dFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxyKXtpZihudWxsIT1lKXt2YXIgbj1cImxheWVycy5cIit0aGlzLmlkK1wiLmxheW91dC5cIit0O2lmKHRoaXMuX3ZhbGlkYXRlKG9yLG4sdCxlLHIpKXJldHVybn1cInZpc2liaWxpdHlcIiE9PXQ/dGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQuc2V0VmFsdWUodCxlKTp0aGlzLnZpc2liaWxpdHk9XCJub25lXCI9PT1lP2U6XCJ2aXNpYmxlXCJ9LGUucHJvdG90eXBlLmdldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24odCl7cmV0dXJuIHYodCxcIi10cmFuc2l0aW9uXCIpP3RoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuZ2V0VHJhbnNpdGlvbih0LnNsaWNlKDAsLVwiLXRyYW5zaXRpb25cIi5sZW5ndGgpKTp0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LmdldFZhbHVlKHQpfSxlLnByb3RvdHlwZS5zZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxyKXtpZihudWxsIT1lKXt2YXIgbj1cImxheWVycy5cIit0aGlzLmlkK1wiLnBhaW50LlwiK3Q7aWYodGhpcy5fdmFsaWRhdGUoYXIsbix0LGUscikpcmV0dXJufXYodCxcIi10cmFuc2l0aW9uXCIpP3RoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuc2V0VHJhbnNpdGlvbih0LnNsaWNlKDAsLVwiLXRyYW5zaXRpb25cIi5sZW5ndGgpLGV8fHZvaWQgMCk6dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5zZXRWYWx1ZSh0LGUpfSxlLnByb3RvdHlwZS5pc0hpZGRlbj1mdW5jdGlvbih0KXtyZXR1cm4hISh0aGlzLm1pbnpvb20mJnQ8dGhpcy5taW56b29tKXx8ISEodGhpcy5tYXh6b29tJiZ0Pj10aGlzLm1heHpvb20pfHxcIm5vbmVcIj09PXRoaXMudmlzaWJpbGl0eX0sZS5wcm90b3R5cGUudXBkYXRlVHJhbnNpdGlvbnM9ZnVuY3Rpb24odCl7dGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50PXRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQudHJhbnNpdGlvbmVkKHQsdGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50KX0sZS5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQuaGFzVHJhbnNpdGlvbigpfSxlLnByb3RvdHlwZS5yZWNhbGN1bGF0ZT1mdW5jdGlvbih0KXt0aGlzLl91bmV2YWx1YXRlZExheW91dCYmKHRoaXMubGF5b3V0PXRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0LnBvc3NpYmx5RXZhbHVhdGUodCkpLHRoaXMucGFpbnQ9dGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50LnBvc3NpYmx5RXZhbHVhdGUodCl9LGUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PXtpZDp0aGlzLmlkLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLnNvdXJjZSxcInNvdXJjZS1sYXllclwiOnRoaXMuc291cmNlTGF5ZXIsbWV0YWRhdGE6dGhpcy5tZXRhZGF0YSxtaW56b29tOnRoaXMubWluem9vbSxtYXh6b29tOnRoaXMubWF4em9vbSxmaWx0ZXI6dGhpcy5maWx0ZXIsbGF5b3V0OnRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0JiZ0aGlzLl91bmV2YWx1YXRlZExheW91dC5zZXJpYWxpemUoKSxwYWludDp0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50JiZ0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LnNlcmlhbGl6ZSgpfTtyZXR1cm5cIm5vbmVcIj09PXRoaXMudmlzaWJpbGl0eSYmKHQubGF5b3V0PXQubGF5b3V0fHx7fSx0LmxheW91dC52aXNpYmlsaXR5PVwibm9uZVwiKSx5KHQsZnVuY3Rpb24odCxlKXtyZXR1cm4hKHZvaWQgMD09PXR8fFwibGF5b3V0XCI9PT1lJiYhT2JqZWN0LmtleXModCkubGVuZ3RofHxcInBhaW50XCI9PT1lJiYhT2JqZWN0LmtleXModCkubGVuZ3RoKX0pfSxlLnByb3RvdHlwZS5fdmFsaWRhdGU9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4oIWl8fCExIT09aS52YWxpZGF0ZSkmJnNyKHRoaXMsdC5jYWxsKG5yLHtrZXk6ZSxsYXllclR5cGU6dGhpcy50eXBlLG9iamVjdEtleTpyLHZhbHVlOm4sc3R5bGVTcGVjOkksc3R5bGU6e2dseXBoczohMCxzcHJpdGU6ITB9fSkpfSxlLnByb3RvdHlwZS5oYXNPZmZzY3JlZW5QYXNzPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbigpe30sZX0oTyksR3I9e0ludDg6SW50OEFycmF5LFVpbnQ4OlVpbnQ4QXJyYXksSW50MTY6SW50MTZBcnJheSxVaW50MTY6VWludDE2QXJyYXksSW50MzI6SW50MzJBcnJheSxVaW50MzI6VWludDMyQXJyYXksRmxvYXQzMjpGbG9hdDMyQXJyYXl9LFlyPWZ1bmN0aW9uKHQsZSl7dGhpcy5fc3RydWN0QXJyYXk9dCx0aGlzLl9wb3MxPWUqdGhpcy5zaXplLHRoaXMuX3BvczI9dGhpcy5fcG9zMS8yLHRoaXMuX3BvczQ9dGhpcy5fcG9zMS80LHRoaXMuX3Bvczg9dGhpcy5fcG9zMS84fSxXcj1mdW5jdGlvbigpe3RoaXMuaXNUcmFuc2ZlcnJlZD0hMSx0aGlzLmNhcGFjaXR5PS0xLHRoaXMucmVzaXplKDApfTtmdW5jdGlvbiBYcih0LGUpe3ZvaWQgMD09PWUmJihlPTEpO3ZhciByPTAsbj0wO3JldHVybnttZW1iZXJzOnQubWFwKGZ1bmN0aW9uKHQpe3ZhciBpLGE9KGk9dC50eXBlLEdyW2ldLkJZVEVTX1BFUl9FTEVNRU5UKSxvPXI9WnIocixNYXRoLm1heChlLGEpKSxzPXQuY29tcG9uZW50c3x8MTtyZXR1cm4gbj1NYXRoLm1heChuLGEpLHIrPWEqcyx7bmFtZTp0Lm5hbWUsdHlwZTp0LnR5cGUsY29tcG9uZW50czpzLG9mZnNldDpvfX0pLHNpemU6WnIocixNYXRoLm1heChuLGUpKSxhbGlnbm1lbnQ6ZX19ZnVuY3Rpb24gWnIodCxlKXtyZXR1cm4gTWF0aC5jZWlsKHQvZSkqZX1Xci5zZXJpYWxpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fdHJpbSgpLGUmJih0LmlzVHJhbnNmZXJyZWQ9ITAsZS5wdXNoKHQuYXJyYXlCdWZmZXIpKSx7bGVuZ3RoOnQubGVuZ3RoLGFycmF5QnVmZmVyOnQuYXJyYXlCdWZmZXJ9fSxXci5kZXNlcmlhbGl6ZT1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QuY3JlYXRlKHRoaXMucHJvdG90eXBlKTtyZXR1cm4gZS5hcnJheUJ1ZmZlcj10LmFycmF5QnVmZmVyLGUubGVuZ3RoPXQubGVuZ3RoLGUuY2FwYWNpdHk9dC5hcnJheUJ1ZmZlci5ieXRlTGVuZ3RoL2UuYnl0ZXNQZXJFbGVtZW50LGUuX3JlZnJlc2hWaWV3cygpLGV9LFdyLnByb3RvdHlwZS5fdHJpbT1mdW5jdGlvbigpe3RoaXMubGVuZ3RoIT09dGhpcy5jYXBhY2l0eSYmKHRoaXMuY2FwYWNpdHk9dGhpcy5sZW5ndGgsdGhpcy5hcnJheUJ1ZmZlcj10aGlzLmFycmF5QnVmZmVyLnNsaWNlKDAsdGhpcy5sZW5ndGgqdGhpcy5ieXRlc1BlckVsZW1lbnQpLHRoaXMuX3JlZnJlc2hWaWV3cygpKX0sV3IucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5sZW5ndGg9MH0sV3IucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0KXt0aGlzLnJlc2VydmUodCksdGhpcy5sZW5ndGg9dH0sV3IucHJvdG90eXBlLnJlc2VydmU9ZnVuY3Rpb24odCl7aWYodD50aGlzLmNhcGFjaXR5KXt0aGlzLmNhcGFjaXR5PU1hdGgubWF4KHQsTWF0aC5mbG9vcig1KnRoaXMuY2FwYWNpdHkpLDEyOCksdGhpcy5hcnJheUJ1ZmZlcj1uZXcgQXJyYXlCdWZmZXIodGhpcy5jYXBhY2l0eSp0aGlzLmJ5dGVzUGVyRWxlbWVudCk7dmFyIGU9dGhpcy51aW50ODt0aGlzLl9yZWZyZXNoVmlld3MoKSxlJiZ0aGlzLnVpbnQ4LnNldChlKX19LFdyLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiX3JlZnJlc2hWaWV3cygpIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBjb25jcmV0ZSBTdHJ1Y3RBcnJheSBsYXlvdXRcIil9O3ZhciAkcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUocisxKTt2YXIgbj0yKnI7cmV0dXJuIHRoaXMuaW50MTZbbiswXT10LHRoaXMuaW50MTZbbisxXT1lLHJ9LGV9KFdyKTskci5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTQscHIoXCJTdHJ1Y3RBcnJheUxheW91dDJpNFwiLCRyKTt2YXIgSnI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShpKzEpO3ZhciBhPTQqaTtyZXR1cm4gdGhpcy5pbnQxNlthKzBdPXQsdGhpcy5pbnQxNlthKzFdPWUsdGhpcy5pbnQxNlthKzJdPXIsdGhpcy5pbnQxNlthKzNdPW4saX0sZX0oV3IpO0pyLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9OCxwcihcIlN0cnVjdEFycmF5TGF5b3V0NGk4XCIsSnIpO3ZhciBLcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShvKzEpO3ZhciBzPTYqbztyZXR1cm4gdGhpcy5pbnQxNltzKzBdPXQsdGhpcy5pbnQxNltzKzFdPWUsdGhpcy5pbnQxNltzKzJdPXIsdGhpcy5pbnQxNltzKzNdPW4sdGhpcy5pbnQxNltzKzRdPWksdGhpcy5pbnQxNltzKzVdPWEsb30sZX0oV3IpO0tyLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTIscHIoXCJTdHJ1Y3RBcnJheUxheW91dDJpNGkxMlwiLEtyKTt2YXIgUXI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3ZhciBsPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKGwrMSk7dmFyIGM9NipsLHU9MTIqbDtyZXR1cm4gdGhpcy5pbnQxNltjKzBdPXQsdGhpcy5pbnQxNltjKzFdPWUsdGhpcy5pbnQxNltjKzJdPXIsdGhpcy5pbnQxNltjKzNdPW4sdGhpcy51aW50OFt1KzhdPWksdGhpcy51aW50OFt1KzldPWEsdGhpcy51aW50OFt1KzEwXT1vLHRoaXMudWludDhbdSsxMV09cyxsfSxlfShXcik7UXIucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0xMixwcihcIlN0cnVjdEFycmF5TGF5b3V0NGk0dWIxMlwiLFFyKTt2YXIgdG49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt2YXIgbD10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShsKzEpO3ZhciBjPTgqbDtyZXR1cm4gdGhpcy5pbnQxNltjKzBdPXQsdGhpcy5pbnQxNltjKzFdPWUsdGhpcy5pbnQxNltjKzJdPXIsdGhpcy5pbnQxNltjKzNdPW4sdGhpcy51aW50MTZbYys0XT1pLHRoaXMudWludDE2W2MrNV09YSx0aGlzLnVpbnQxNltjKzZdPW8sdGhpcy51aW50MTZbYys3XT1zLGx9LGV9KFdyKTt0bi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTE2LHByKFwiU3RydWN0QXJyYXlMYXlvdXQ0aTR1aTE2XCIsdG4pO3ZhciBlbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUobisxKTt2YXIgaT0zKm47cmV0dXJuIHRoaXMuZmxvYXQzMltpKzBdPXQsdGhpcy5mbG9hdDMyW2krMV09ZSx0aGlzLmZsb2F0MzJbaSsyXT1yLG59LGV9KFdyKTtlbi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTEyLHByKFwiU3RydWN0QXJyYXlMYXlvdXQzZjEyXCIsZW4pO3ZhciBybj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDMyPW5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUoZSsxKTt2YXIgcj0xKmU7cmV0dXJuIHRoaXMudWludDMyW3IrMF09dCxlfSxlfShXcik7cm4ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD00LHByKFwiU3RydWN0QXJyYXlMYXlvdXQxdWw0XCIscm4pO3ZhciBubj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MzI9bmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1KXt2YXIgaD10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShoKzEpO3ZhciBmPTEyKmgscD02Kmg7cmV0dXJuIHRoaXMuaW50MTZbZiswXT10LHRoaXMuaW50MTZbZisxXT1lLHRoaXMuaW50MTZbZisyXT1yLHRoaXMuaW50MTZbZiszXT1uLHRoaXMuaW50MTZbZis0XT1pLHRoaXMuaW50MTZbZis1XT1hLHRoaXMudWludDMyW3ArM109byx0aGlzLnVpbnQxNltmKzhdPXMsdGhpcy51aW50MTZbZis5XT1sLHRoaXMuaW50MTZbZisxMF09Yyx0aGlzLmludDE2W2YrMTFdPXUsaH0sZX0oV3IpO25uLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MjQscHIoXCJTdHJ1Y3RBcnJheUxheW91dDZpMXVsMnVpMmkyNFwiLG5uKTt2YXIgYW49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUobysxKTt2YXIgcz02Km87cmV0dXJuIHRoaXMuaW50MTZbcyswXT10LHRoaXMuaW50MTZbcysxXT1lLHRoaXMuaW50MTZbcysyXT1yLHRoaXMuaW50MTZbcyszXT1uLHRoaXMuaW50MTZbcys0XT1pLHRoaXMuaW50MTZbcys1XT1hLG99LGV9KFdyKTthbi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTEyLHByKFwiU3RydWN0QXJyYXlMYXlvdXQyaTJpMmkxMlwiLGFuKTt2YXIgb249ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShyKzEpO3ZhciBuPTQqcjtyZXR1cm4gdGhpcy51aW50OFtuKzBdPXQsdGhpcy51aW50OFtuKzFdPWUscn0sZX0oV3IpO29uLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NCxwcihcIlN0cnVjdEFycmF5TGF5b3V0MnViNFwiLG9uKTt2YXIgc249ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQzMj1uZXcgVWludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxoLGYscCl7dmFyIGQ9dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUoZCsxKTt2YXIgZz0yMCpkLHY9MTAqZCxtPTQwKmQ7cmV0dXJuIHRoaXMuaW50MTZbZyswXT10LHRoaXMuaW50MTZbZysxXT1lLHRoaXMudWludDE2W2crMl09cix0aGlzLnVpbnQxNltnKzNdPW4sdGhpcy51aW50MzJbdisyXT1pLHRoaXMudWludDMyW3YrM109YSx0aGlzLnVpbnQzMlt2KzRdPW8sdGhpcy51aW50MTZbZysxMF09cyx0aGlzLnVpbnQxNltnKzExXT1sLHRoaXMudWludDE2W2crMTJdPWMsdGhpcy5mbG9hdDMyW3YrN109dSx0aGlzLmZsb2F0MzJbdis4XT1oLHRoaXMudWludDhbbSszNl09Zix0aGlzLnVpbnQ4W20rMzddPXAsZH0sZX0oV3IpO3NuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NDAscHIoXCJTdHJ1Y3RBcnJheUxheW91dDJpMnVpM3VsM3VpMmYydWI0MFwiLHNuKTt2YXIgbG49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUoZSsxKTt2YXIgcj0xKmU7cmV0dXJuIHRoaXMuZmxvYXQzMltyKzBdPXQsZX0sZX0oV3IpO2xuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NCxwcihcIlN0cnVjdEFycmF5TGF5b3V0MWY0XCIsbG4pO3ZhciBjbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShuKzEpO3ZhciBpPTMqbjtyZXR1cm4gdGhpcy5pbnQxNltpKzBdPXQsdGhpcy5pbnQxNltpKzFdPWUsdGhpcy5pbnQxNltpKzJdPXIsbn0sZX0oV3IpO2NuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NixwcihcIlN0cnVjdEFycmF5TGF5b3V0M2k2XCIsY24pO3ZhciB1bj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDMyPW5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQxNj1uZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShuKzEpO3ZhciBpPTIqbixhPTQqbjtyZXR1cm4gdGhpcy51aW50MzJbaSswXT10LHRoaXMudWludDE2W2ErMl09ZSx0aGlzLnVpbnQxNlthKzNdPXIsbn0sZX0oV3IpO3VuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9OCxwcihcIlN0cnVjdEFycmF5TGF5b3V0MXVsMnVpOFwiLHVuKTt2YXIgaG49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQxNj1uZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShuKzEpO3ZhciBpPTMqbjtyZXR1cm4gdGhpcy51aW50MTZbaSswXT10LHRoaXMudWludDE2W2krMV09ZSx0aGlzLnVpbnQxNltpKzJdPXIsbn0sZX0oV3IpO2huLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NixwcihcIlN0cnVjdEFycmF5TGF5b3V0M3VpNlwiLGhuKTt2YXIgZm49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQxNj1uZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUocisxKTt2YXIgbj0yKnI7cmV0dXJuIHRoaXMudWludDE2W24rMF09dCx0aGlzLnVpbnQxNltuKzFdPWUscn0sZX0oV3IpO2ZuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NCxwcihcIlN0cnVjdEFycmF5TGF5b3V0MnVpNFwiLGZuKTt2YXIgcG49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShyKzEpO3ZhciBuPTIqcjtyZXR1cm4gdGhpcy5mbG9hdDMyW24rMF09dCx0aGlzLmZsb2F0MzJbbisxXT1lLHJ9LGV9KFdyKTtwbi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTgscHIoXCJTdHJ1Y3RBcnJheUxheW91dDJmOFwiLHBuKTt2YXIgZG49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUoaSsxKTt2YXIgYT00Kmk7cmV0dXJuIHRoaXMuZmxvYXQzMlthKzBdPXQsdGhpcy5mbG9hdDMyW2ErMV09ZSx0aGlzLmZsb2F0MzJbYSsyXT1yLHRoaXMuZmxvYXQzMlthKzNdPW4saX0sZX0oV3IpO2RuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTYscHIoXCJTdHJ1Y3RBcnJheUxheW91dDRmMTZcIixkbik7dmFyIGduPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZTt2YXIgcj17YW5jaG9yUG9pbnRYOntjb25maWd1cmFibGU6ITB9LGFuY2hvclBvaW50WTp7Y29uZmlndXJhYmxlOiEwfSx4MTp7Y29uZmlndXJhYmxlOiEwfSx5MTp7Y29uZmlndXJhYmxlOiEwfSx4Mjp7Y29uZmlndXJhYmxlOiEwfSx5Mjp7Y29uZmlndXJhYmxlOiEwfSxmZWF0dXJlSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sc291cmNlTGF5ZXJJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxidWNrZXRJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxyYWRpdXM6e2NvbmZpZ3VyYWJsZTohMH0sc2lnbmVkRGlzdGFuY2VGcm9tQW5jaG9yOntjb25maWd1cmFibGU6ITB9LGFuY2hvclBvaW50Ontjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5hbmNob3JQb2ludFguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMF19LHIuYW5jaG9yUG9pbnRYLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzBdPXR9LHIuYW5jaG9yUG9pbnRZLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzFdfSxyLmFuY2hvclBvaW50WS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisxXT10fSxyLngxLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzJdfSxyLngxLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzJdPXR9LHIueTEuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrM119LHIueTEuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrM109dH0sci54Mi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMis0XX0sci54Mi5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMis0XT10fSxyLnkyLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzVdfSxyLnkyLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzVdPXR9LHIuZmVhdHVyZUluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCszXX0sci5mZWF0dXJlSW5kZXguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzNdPXR9LHIuc291cmNlTGF5ZXJJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrOF19LHIuc291cmNlTGF5ZXJJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrOF09dH0sci5idWNrZXRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrOV19LHIuYnVja2V0SW5kZXguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzldPXR9LHIucmFkaXVzLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzEwXX0sci5yYWRpdXMuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMTBdPXR9LHIuc2lnbmVkRGlzdGFuY2VGcm9tQW5jaG9yLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzExXX0sci5zaWduZWREaXN0YW5jZUZyb21BbmNob3Iuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMTFdPXR9LHIuYW5jaG9yUG9pbnQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBsKHRoaXMuYW5jaG9yUG9pbnRYLHRoaXMuYW5jaG9yUG9pbnRZKX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsciksZX0oWXIpO2duLnByb3RvdHlwZS5zaXplPTI0O3ZhciB2bj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGduKHRoaXMsdCl9LGV9KG5uKTtwcihcIkNvbGxpc2lvbkJveEFycmF5XCIsdm4pO3ZhciBtbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWU7dmFyIHI9e2FuY2hvclg6e2NvbmZpZ3VyYWJsZTohMH0sYW5jaG9yWTp7Y29uZmlndXJhYmxlOiEwfSxnbHlwaFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sbnVtR2x5cGhzOntjb25maWd1cmFibGU6ITB9LHZlcnRleFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sbGluZVN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sbGluZUxlbmd0aDp7Y29uZmlndXJhYmxlOiEwfSxzZWdtZW50Ontjb25maWd1cmFibGU6ITB9LGxvd2VyU2l6ZTp7Y29uZmlndXJhYmxlOiEwfSx1cHBlclNpemU6e2NvbmZpZ3VyYWJsZTohMH0sbGluZU9mZnNldFg6e2NvbmZpZ3VyYWJsZTohMH0sbGluZU9mZnNldFk6e2NvbmZpZ3VyYWJsZTohMH0sd3JpdGluZ01vZGU6e2NvbmZpZ3VyYWJsZTohMH0saGlkZGVuOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5hbmNob3JYLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzBdfSxyLmFuY2hvclguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMF09dH0sci5hbmNob3JZLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzFdfSxyLmFuY2hvclkuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV09dH0sci5nbHlwaFN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzJdfSxyLmdseXBoU3RhcnRJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMl09dH0sci5udW1HbHlwaHMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzNdfSxyLm51bUdseXBocy5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrM109dH0sci52ZXJ0ZXhTdGFydEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCsyXX0sci52ZXJ0ZXhTdGFydEluZGV4LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCsyXT10fSxyLmxpbmVTdGFydEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCszXX0sci5saW5lU3RhcnRJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrM109dH0sci5saW5lTGVuZ3RoLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCs0XX0sci5saW5lTGVuZ3RoLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCs0XT10fSxyLnNlZ21lbnQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzEwXX0sci5zZWdtZW50LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxMF09dH0sci5sb3dlclNpemUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzExXX0sci5sb3dlclNpemUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzExXT10fSxyLnVwcGVyU2l6ZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTJdfSxyLnVwcGVyU2l6ZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTJdPXR9LHIubGluZU9mZnNldFguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCs3XX0sci5saW5lT2Zmc2V0WC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzddPXR9LHIubGluZU9mZnNldFkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCs4XX0sci5saW5lT2Zmc2V0WS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzhdPXR9LHIud3JpdGluZ01vZGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczErMzZdfSxyLndyaXRpbmdNb2RlLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50OFt0aGlzLl9wb3MxKzM2XT10fSxyLmhpZGRlbi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSszN119LHIuaGlkZGVuLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50OFt0aGlzLl9wb3MxKzM3XT10fSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfShZcik7bW4ucHJvdG90eXBlLnNpemU9NDA7dmFyIHluPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbW4odGhpcyx0KX0sZX0oc24pO3ByKFwiUGxhY2VkU3ltYm9sQXJyYXlcIix5bik7dmFyIHhuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZTt2YXIgcj17b2Zmc2V0WDp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIHIub2Zmc2V0WC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzBdfSxyLm9mZnNldFguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCswXT10fSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfShZcik7eG4ucHJvdG90eXBlLnNpemU9NDt2YXIgYm49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXRvZmZzZXRYPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZsb2F0MzJbMSp0KzBdfSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB4bih0aGlzLHQpfSxlfShsbik7cHIoXCJHbHlwaE9mZnNldEFycmF5XCIsYm4pO3ZhciBfbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWU7dmFyIHI9e3g6e2NvbmZpZ3VyYWJsZTohMH0seTp7Y29uZmlndXJhYmxlOiEwfSx0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcjp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIHIueC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiswXX0sci54LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzBdPXR9LHIueS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisxXX0sci55LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzFdPXR9LHIudGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3IuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMl19LHIudGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3Iuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMl09dH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsciksZX0oWXIpO19uLnByb3RvdHlwZS5zaXplPTY7dmFyIHduPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0eD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnQxNlszKnQrMF19LGUucHJvdG90eXBlLmdldHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW50MTZbMyp0KzFdfSxlLnByb3RvdHlwZS5nZXR0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnQxNlszKnQrMl19LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IF9uKHRoaXMsdCl9LGV9KGNuKTtwcihcIlN5bWJvbExpbmVWZXJ0ZXhBcnJheVwiLHduKTt2YXIga249ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lO3ZhciByPXtmZWF0dXJlSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sc291cmNlTGF5ZXJJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxidWNrZXRJbmRleDp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIHIuZmVhdHVyZUluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCswXX0sci5mZWF0dXJlSW5kZXguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzBdPXR9LHIuc291cmNlTGF5ZXJJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMl19LHIuc291cmNlTGF5ZXJJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMl09dH0sci5idWNrZXRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrM119LHIuYnVja2V0SW5kZXguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzNdPXR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHIpLGV9KFlyKTtrbi5wcm90b3R5cGUuc2l6ZT04O3ZhciBBbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGtuKHRoaXMsdCl9LGV9KHVuKTtwcihcIkZlYXR1cmVJbmRleEFycmF5XCIsQW4pO3ZhciBUbj1Ycihbe25hbWU6XCJhX3Bvc1wiLGNvbXBvbmVudHM6Mix0eXBlOlwiSW50MTZcIn1dLDQpLm1lbWJlcnMsTW49ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9W10pLHRoaXMuc2VnbWVudHM9dH07TW4ucHJvdG90eXBlLnByZXBhcmVTZWdtZW50PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnNlZ21lbnRzW3RoaXMuc2VnbWVudHMubGVuZ3RoLTFdO3JldHVybiB0Pk1uLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIJiZfKFwiTWF4IHZlcnRpY2VzIHBlciBzZWdtZW50IGlzIFwiK01uLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIK1wiOiBidWNrZXQgcmVxdWVzdGVkIFwiK3QpLCghbnx8bi52ZXJ0ZXhMZW5ndGgrdD5Nbi5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCkmJihuPXt2ZXJ0ZXhPZmZzZXQ6ZS5sZW5ndGgscHJpbWl0aXZlT2Zmc2V0OnIubGVuZ3RoLHZlcnRleExlbmd0aDowLHByaW1pdGl2ZUxlbmd0aDowfSx0aGlzLnNlZ21lbnRzLnB1c2gobikpLG59LE1uLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWdtZW50c30sTW4ucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPXRoaXMuc2VnbWVudHM7dDxlLmxlbmd0aDt0Kz0xKXt2YXIgcj1lW3RdO2Zvcih2YXIgbiBpbiByLnZhb3Mpci52YW9zW25dLmRlc3Ryb3koKX19LE1uLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIPU1hdGgucG93KDIsMTYpLTEscHIoXCJTZWdtZW50VmVjdG9yXCIsTW4pO3ZhciBTbj1mdW5jdGlvbih0LGUpe3JldHVybiAyNTYqKHQ9ZihNYXRoLmZsb29yKHQpLDAsMjU1KSkrZihNYXRoLmZsb29yKGUpLDAsMjU1KX07ZnVuY3Rpb24gRW4odCl7cmV0dXJuW1NuKDI1NSp0LnIsMjU1KnQuZyksU24oMjU1KnQuYiwyNTUqdC5hKV19dmFyIENuPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnZhbHVlPXQsdGhpcy5uYW1lPWUsdGhpcy50eXBlPXIsdGhpcy5zdGF0aXN0aWNzPXttYXg6LTEvMH19O0NuLnByb3RvdHlwZS5kZWZpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuW1wiI2RlZmluZSBIQVNfVU5JRk9STV91X1wiK3RoaXMubmFtZV19LENuLnByb3RvdHlwZS5wb3B1bGF0ZVBhaW50QXJyYXk9ZnVuY3Rpb24oKXt9LENuLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24oKXt9LENuLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7fSxDbi5wcm90b3R5cGUuc2V0VW5pZm9ybXM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5jb25zdGFudE9yKHRoaXMudmFsdWUpLGE9dC5nbDtcImNvbG9yXCI9PT10aGlzLnR5cGU/YS51bmlmb3JtNGYoZS51bmlmb3Jtc1tcInVfXCIrdGhpcy5uYW1lXSxpLnIsaS5nLGkuYixpLmEpOmEudW5pZm9ybTFmKGUudW5pZm9ybXNbXCJ1X1wiK3RoaXMubmFtZV0saSl9O3ZhciBMbj1mdW5jdGlvbih0LGUscil7dGhpcy5leHByZXNzaW9uPXQsdGhpcy5uYW1lPWUsdGhpcy50eXBlPXIsdGhpcy5zdGF0aXN0aWNzPXttYXg6LTEvMH07dmFyIG49XCJjb2xvclwiPT09cj9wbjpsbjt0aGlzLnBhaW50VmVydGV4QXR0cmlidXRlcz1be25hbWU6XCJhX1wiK2UsdHlwZTpcIkZsb2F0MzJcIixjb21wb25lbnRzOlwiY29sb3JcIj09PXI/MjoxLG9mZnNldDowfV0sdGhpcy5wYWludFZlcnRleEFycmF5PW5ldyBufTtMbi5wcm90b3R5cGUuZGVmaW5lcz1mdW5jdGlvbigpe3JldHVybltdfSxMbi5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5wYWludFZlcnRleEFycmF5LG49ci5sZW5ndGg7ci5yZXNlcnZlKHQpO3ZhciBpPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgTHIoMCksZSk7aWYoXCJjb2xvclwiPT09dGhpcy50eXBlKWZvcih2YXIgYT1FbihpKSxvPW47bzx0O28rKylyLmVtcGxhY2VCYWNrKGFbMF0sYVsxXSk7ZWxzZXtmb3IodmFyIHM9bjtzPHQ7cysrKXIuZW1wbGFjZUJhY2soaSk7dGhpcy5zdGF0aXN0aWNzLm1heD1NYXRoLm1heCh0aGlzLnN0YXRpc3RpY3MubWF4LGkpfX0sTG4ucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnBhaW50VmVydGV4QXJyYXkmJih0aGlzLnBhaW50VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMucGFpbnRWZXJ0ZXhBcnJheSx0aGlzLnBhaW50VmVydGV4QXR0cmlidXRlcykpfSxMbi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMucGFpbnRWZXJ0ZXhCdWZmZXImJnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpfSxMbi5wcm90b3R5cGUuc2V0VW5pZm9ybXM9ZnVuY3Rpb24odCxlKXt0LmdsLnVuaWZvcm0xZihlLnVuaWZvcm1zW1wiYV9cIit0aGlzLm5hbWUrXCJfdFwiXSwwKX07dmFyIHpuPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5leHByZXNzaW9uPXQsdGhpcy5uYW1lPWUsdGhpcy50eXBlPXIsdGhpcy51c2VJbnRlZ2VyWm9vbT1uLHRoaXMuem9vbT1pLHRoaXMuc3RhdGlzdGljcz17bWF4Oi0xLzB9O3ZhciBhPVwiY29sb3JcIj09PXI/ZG46cG47dGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXM9W3tuYW1lOlwiYV9cIitlLHR5cGU6XCJGbG9hdDMyXCIsY29tcG9uZW50czpcImNvbG9yXCI9PT1yPzQ6MixvZmZzZXQ6MH1dLHRoaXMucGFpbnRWZXJ0ZXhBcnJheT1uZXcgYX07em4ucHJvdG90eXBlLmRlZmluZXM9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sem4ucHJvdG90eXBlLnBvcHVsYXRlUGFpbnRBcnJheT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMucGFpbnRWZXJ0ZXhBcnJheSxuPXIubGVuZ3RoO3IucmVzZXJ2ZSh0KTt2YXIgaT10aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IExyKHRoaXMuem9vbSksZSksYT10aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IExyKHRoaXMuem9vbSsxKSxlKTtpZihcImNvbG9yXCI9PT10aGlzLnR5cGUpZm9yKHZhciBvPUVuKGkpLHM9RW4oYSksbD1uO2w8dDtsKyspci5lbXBsYWNlQmFjayhvWzBdLG9bMV0sc1swXSxzWzFdKTtlbHNle2Zvcih2YXIgYz1uO2M8dDtjKyspci5lbXBsYWNlQmFjayhpLGEpO3RoaXMuc3RhdGlzdGljcy5tYXg9TWF0aC5tYXgodGhpcy5zdGF0aXN0aWNzLm1heCxpLGEpfX0sem4ucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnBhaW50VmVydGV4QXJyYXkmJih0aGlzLnBhaW50VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMucGFpbnRWZXJ0ZXhBcnJheSx0aGlzLnBhaW50VmVydGV4QXR0cmlidXRlcykpfSx6bi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMucGFpbnRWZXJ0ZXhCdWZmZXImJnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpfSx6bi5wcm90b3R5cGUuaW50ZXJwb2xhdGlvbkZhY3Rvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy51c2VJbnRlZ2VyWm9vbT90aGlzLmV4cHJlc3Npb24uaW50ZXJwb2xhdGlvbkZhY3RvcihNYXRoLmZsb29yKHQpLHRoaXMuem9vbSx0aGlzLnpvb20rMSk6dGhpcy5leHByZXNzaW9uLmludGVycG9sYXRpb25GYWN0b3IodCx0aGlzLnpvb20sdGhpcy56b29tKzEpfSx6bi5wcm90b3R5cGUuc2V0VW5pZm9ybXM9ZnVuY3Rpb24odCxlLHIpe3QuZ2wudW5pZm9ybTFmKGUudW5pZm9ybXNbXCJhX1wiK3RoaXMubmFtZStcIl90XCJdLHRoaXMuaW50ZXJwb2xhdGlvbkZhY3RvcihyLnpvb20pKX07dmFyIE9uPWZ1bmN0aW9uKCl7dGhpcy5iaW5kZXJzPXt9LHRoaXMuY2FjaGVLZXk9XCJcIix0aGlzLl9idWZmZXJzPVtdfTtPbi5jcmVhdGVEeW5hbWljPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1uZXcgT24saT1bXTtmb3IodmFyIGEgaW4gdC5wYWludC5fdmFsdWVzKWlmKHIoYSkpe3ZhciBvPXQucGFpbnQuZ2V0KGEpO2lmKG8gaW5zdGFuY2VvZiBGciYmby5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uW1wicHJvcGVydHktZnVuY3Rpb25cIl0pe3ZhciBzPURuKGEsdC50eXBlKSxsPW8ucHJvcGVydHkuc3BlY2lmaWNhdGlvbi50eXBlLGM9by5wcm9wZXJ0eS51c2VJbnRlZ2VyWm9vbTtcImNvbnN0YW50XCI9PT1vLnZhbHVlLmtpbmQ/KG4uYmluZGVyc1thXT1uZXcgQ24oby52YWx1ZSxzLGwpLGkucHVzaChcIi91X1wiK3MpKTpcInNvdXJjZVwiPT09by52YWx1ZS5raW5kPyhuLmJpbmRlcnNbYV09bmV3IExuKG8udmFsdWUscyxsKSxpLnB1c2goXCIvYV9cIitzKSk6KG4uYmluZGVyc1thXT1uZXcgem4oby52YWx1ZSxzLGwsYyxlKSxpLnB1c2goXCIvel9cIitzKSl9fXJldHVybiBuLmNhY2hlS2V5PWkuc29ydCgpLmpvaW4oXCJcIiksbn0sT24ucHJvdG90eXBlLnBvcHVsYXRlUGFpbnRBcnJheXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdGhpcy5iaW5kZXJzKXRoaXMuYmluZGVyc1tyXS5wb3B1bGF0ZVBhaW50QXJyYXkodCxlKX0sT24ucHJvdG90eXBlLmRlZmluZXM9ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcy5iaW5kZXJzKXQucHVzaC5hcHBseSh0LHRoaXMuYmluZGVyc1tlXS5kZWZpbmVzKCkpO3JldHVybiB0fSxPbi5wcm90b3R5cGUuc2V0VW5pZm9ybXM9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpIGluIHRoaXMuYmluZGVycyl0aGlzLmJpbmRlcnNbaV0uc2V0VW5pZm9ybXModCxlLG4sci5nZXQoaSkpfSxPbi5wcm90b3R5cGUuZ2V0UGFpbnRWZXJ0ZXhCdWZmZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2J1ZmZlcnN9LE9uLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuYmluZGVycyl0aGlzLmJpbmRlcnNbZV0udXBsb2FkKHQpO3ZhciByPVtdO2Zvcih2YXIgbiBpbiB0aGlzLmJpbmRlcnMpe3ZhciBpPXRoaXMuYmluZGVyc1tuXTsoaSBpbnN0YW5jZW9mIExufHxpIGluc3RhbmNlb2Ygem4pJiZpLnBhaW50VmVydGV4QnVmZmVyJiZyLnB1c2goaS5wYWludFZlcnRleEJ1ZmZlcil9dGhpcy5fYnVmZmVycz1yfSxPbi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLmJpbmRlcnMpdGhpcy5iaW5kZXJzW3RdLmRlc3Ryb3koKX07dmFyIEluPWZ1bmN0aW9uKHQsZSxyLG4pe3ZvaWQgMD09PW4mJihuPWZ1bmN0aW9uKCl7cmV0dXJuITB9KSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucz17fTtmb3IodmFyIGk9MCxhPWU7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO3RoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW28uaWRdPU9uLmNyZWF0ZUR5bmFtaWMobyxyLG4pLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW28uaWRdLmxheW91dEF0dHJpYnV0ZXM9dH19O2Z1bmN0aW9uIERuKHQsZSl7cmV0dXJue1widGV4dC1vcGFjaXR5XCI6XCJvcGFjaXR5XCIsXCJpY29uLW9wYWNpdHlcIjpcIm9wYWNpdHlcIixcInRleHQtY29sb3JcIjpcImZpbGxfY29sb3JcIixcImljb24tY29sb3JcIjpcImZpbGxfY29sb3JcIixcInRleHQtaGFsby1jb2xvclwiOlwiaGFsb19jb2xvclwiLFwiaWNvbi1oYWxvLWNvbG9yXCI6XCJoYWxvX2NvbG9yXCIsXCJ0ZXh0LWhhbG8tYmx1clwiOlwiaGFsb19ibHVyXCIsXCJpY29uLWhhbG8tYmx1clwiOlwiaGFsb19ibHVyXCIsXCJ0ZXh0LWhhbG8td2lkdGhcIjpcImhhbG9fd2lkdGhcIixcImljb24taGFsby13aWR0aFwiOlwiaGFsb193aWR0aFwiLFwibGluZS1nYXAtd2lkdGhcIjpcImdhcHdpZHRoXCJ9W3RdfHx0LnJlcGxhY2UoZStcIi1cIixcIlwiKS5yZXBsYWNlKC8tL2csXCJfXCIpfUluLnByb3RvdHlwZS5wb3B1bGF0ZVBhaW50QXJyYXlzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zKXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW3JdLnBvcHVsYXRlUGFpbnRBcnJheXModCxlKX0sSW4ucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbdF19LEluLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zKXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW2VdLnVwbG9hZCh0KX0sSW4ucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMpdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbdF0uZGVzdHJveSgpfSxwcihcIkNvbnN0YW50QmluZGVyXCIsQ24pLHByKFwiU291cmNlRXhwcmVzc2lvbkJpbmRlclwiLExuKSxwcihcIkNvbXBvc2l0ZUV4cHJlc3Npb25CaW5kZXJcIix6bikscHIoXCJQcm9ncmFtQ29uZmlndXJhdGlvblwiLE9uLHtvbWl0OltcIl9idWZmZXJzXCJdfSkscHIoXCJQcm9ncmFtQ29uZmlndXJhdGlvblNldFwiLEluKTt2YXIgUG49ODE5MixSbj0oMTYse21pbjotMSpNYXRoLnBvdygyLDE1KSxtYXg6TWF0aC5wb3coMiwxNSktMX0pO2Z1bmN0aW9uIEZuKHQpe2Zvcih2YXIgZT1Qbi90LmV4dGVudCxyPXQubG9hZEdlb21ldHJ5KCksbj0wO248ci5sZW5ndGg7bisrKWZvcih2YXIgaT1yW25dLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTtvLng9TWF0aC5yb3VuZChvLngqZSksby55PU1hdGgucm91bmQoby55KmUpLChvLng8Um4ubWlufHxvLng+Um4ubWF4fHxvLnk8Um4ubWlufHxvLnk+Um4ubWF4KSYmXyhcIkdlb21ldHJ5IGV4Y2VlZHMgYWxsb3dlZCBleHRlbnQsIHJlZHVjZSB5b3VyIHZlY3RvciB0aWxlIGJ1ZmZlciBzaXplXCIpfXJldHVybiByfWZ1bmN0aW9uIEJuKHQsZSxyLG4saSl7dC5lbXBsYWNlQmFjaygyKmUrKG4rMSkvMiwyKnIrKGkrMSkvMil9dmFyIE5uPWZ1bmN0aW9uKHQpe3RoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXJzPXQubGF5ZXJzLHRoaXMubGF5ZXJJZHM9dGhpcy5sYXllcnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSksdGhpcy5pbmRleD10LmluZGV4LHRoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3ICRyLHRoaXMuaW5kZXhBcnJheT1uZXcgaG4sdGhpcy5zZWdtZW50cz1uZXcgTW4sdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9bmV3IEluKFRuLHQubGF5ZXJzLHQuem9vbSl9O2Z1bmN0aW9uIGpuKHQsZSxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXTtpZihabihpLGUpKXJldHVybiEwO2lmKFluKGUsaSxyKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBWbih0LGUpe2lmKDE9PT10Lmxlbmd0aCYmMT09PXRbMF0ubGVuZ3RoKXJldHVybiBYbihlLHRbMF1bMF0pO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWZvcih2YXIgbj1lW3JdLGk9MDtpPG4ubGVuZ3RoO2krKylpZihYbih0LG5baV0pKXJldHVybiEwO2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXtmb3IodmFyIG89dFthXSxzPTA7czxvLmxlbmd0aDtzKyspaWYoWG4oZSxvW3NdKSlyZXR1cm4hMDtmb3IodmFyIGw9MDtsPGUubGVuZ3RoO2wrKylpZihIbihvLGVbbF0pKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIFVuKHQsZSxyKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylmb3IodmFyIGk9ZVtuXSxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBvPXRbYV07aWYoby5sZW5ndGg+PTMpZm9yKHZhciBzPTA7czxpLmxlbmd0aDtzKyspaWYoWm4obyxpW3NdKSlyZXR1cm4hMDtpZihxbihvLGkscikpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gcW4odCxlLHIpe2lmKHQubGVuZ3RoPjEpe2lmKEhuKHQsZSkpcmV0dXJuITA7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYoWW4oZVtuXSx0LHIpKXJldHVybiEwfWZvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKWlmKFluKHRbaV0sZSxyKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBIbih0LGUpe2lmKDA9PT10Lmxlbmd0aHx8MD09PWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGgtMTtyKyspZm9yKHZhciBuPXRbcl0saT10W3IrMV0sYT0wO2E8ZS5sZW5ndGgtMTthKyspaWYoR24obixpLGVbYV0sZVthKzFdKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBHbih0LGUscixuKXtyZXR1cm4gdyh0LHIsbikhPT13KGUscixuKSYmdyh0LGUscikhPT13KHQsZSxuKX1mdW5jdGlvbiBZbih0LGUscil7dmFyIG49cipyO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gdC5kaXN0U3FyKGVbMF0pPG47Zm9yKHZhciBpPTE7aTxlLmxlbmd0aDtpKyspaWYoV24odCxlW2ktMV0sZVtpXSk8bilyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBXbih0LGUscil7dmFyIG49ZS5kaXN0U3FyKHIpO2lmKDA9PT1uKXJldHVybiB0LmRpc3RTcXIoZSk7dmFyIGk9KCh0LngtZS54KSooci54LWUueCkrKHQueS1lLnkpKihyLnktZS55KSkvbjtyZXR1cm4gaTwwP3QuZGlzdFNxcihlKTppPjE/dC5kaXN0U3FyKHIpOnQuZGlzdFNxcihyLnN1YihlKS5fbXVsdChpKS5fYWRkKGUpKX1mdW5jdGlvbiBYbih0LGUpe2Zvcih2YXIgcixuLGksYT0hMSxvPTA7bzx0Lmxlbmd0aDtvKyspZm9yKHZhciBzPTAsbD0ocj10W29dKS5sZW5ndGgtMTtzPHIubGVuZ3RoO2w9cysrKW49cltzXSxpPXJbbF0sbi55PmUueSE9aS55PmUueSYmZS54PChpLngtbi54KSooZS55LW4ueSkvKGkueS1uLnkpK24ueCYmKGE9IWEpO3JldHVybiBhfWZ1bmN0aW9uIFpuKHQsZSl7Zm9yKHZhciByPSExLG49MCxpPXQubGVuZ3RoLTE7bjx0Lmxlbmd0aDtpPW4rKyl7dmFyIGE9dFtuXSxvPXRbaV07YS55PmUueSE9by55PmUueSYmZS54PChvLngtYS54KSooZS55LWEueSkvKG8ueS1hLnkpK2EueCYmKHI9IXIpfXJldHVybiByfWZ1bmN0aW9uICRuKHQsZSxyKXt2YXIgbj1lLnBhaW50LmdldCh0KS52YWx1ZTtyZXR1cm5cImNvbnN0YW50XCI9PT1uLmtpbmQ/bi52YWx1ZTpyLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQoZS5pZCkuYmluZGVyc1t0XS5zdGF0aXN0aWNzLm1heH1mdW5jdGlvbiBKbih0KXtyZXR1cm4gTWF0aC5zcXJ0KHRbMF0qdFswXSt0WzFdKnRbMV0pfWZ1bmN0aW9uIEtuKHQsZSxyLG4saSl7aWYoIWVbMF0mJiFlWzFdKXJldHVybiB0O3ZhciBhPWwuY29udmVydChlKTtcInZpZXdwb3J0XCI9PT1yJiZhLl9yb3RhdGUoLW4pO2Zvcih2YXIgbz1bXSxzPTA7czx0Lmxlbmd0aDtzKyspe2Zvcih2YXIgYz10W3NdLHU9W10saD0wO2g8Yy5sZW5ndGg7aCsrKXUucHVzaChjW2hdLnN1YihhLl9tdWx0KGkpKSk7by5wdXNoKHUpfXJldHVybiBvfU5uLnByb3RvdHlwZS5wb3B1bGF0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49dDtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl0sYT1pLmZlYXR1cmUsbz1pLmluZGV4LHM9aS5zb3VyY2VMYXllckluZGV4O2lmKHRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyKG5ldyBMcih0aGlzLnpvb20pLGEpKXt2YXIgbD1GbihhKTt0aGlzLmFkZEZlYXR1cmUoYSxsKSxlLmZlYXR1cmVJbmRleC5pbnNlcnQoYSxsLG8scyx0aGlzLmluZGV4KX19fSxObi5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGh9LE5uLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxUbiksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKHQpfSxObi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyJiYodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSl9LE5uLnByb3RvdHlwZS5hZGRGZWF0dXJlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj1lO3I8bi5sZW5ndGg7cis9MSlmb3IodmFyIGk9MCxhPW5bcl07aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldLHM9by54LGw9by55O2lmKCEoczwwfHxzPj1Qbnx8bDwwfHxsPj1Qbikpe3ZhciBjPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheSksdT1jLnZlcnRleExlbmd0aDtCbih0aGlzLmxheW91dFZlcnRleEFycmF5LHMsbCwtMSwtMSksQm4odGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxzLGwsMSwtMSksQm4odGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxzLGwsMSwxKSxCbih0aGlzLmxheW91dFZlcnRleEFycmF5LHMsbCwtMSwxKSx0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2sodSx1KzEsdSsyKSx0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2sodSx1KzMsdSsyKSxjLnZlcnRleExlbmd0aCs9NCxjLnByaW1pdGl2ZUxlbmd0aCs9Mn19dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCx0KX0scHIoXCJDaXJjbGVCdWNrZXRcIixObix7b21pdDpbXCJsYXllcnNcIl19KTt2YXIgUW49e3BhaW50Om5ldyBxcih7XCJjaXJjbGUtcmFkaXVzXCI6bmV3IGpyKEkucGFpbnRfY2lyY2xlW1wiY2lyY2xlLXJhZGl1c1wiXSksXCJjaXJjbGUtY29sb3JcIjpuZXcganIoSS5wYWludF9jaXJjbGVbXCJjaXJjbGUtY29sb3JcIl0pLFwiY2lyY2xlLWJsdXJcIjpuZXcganIoSS5wYWludF9jaXJjbGVbXCJjaXJjbGUtYmx1clwiXSksXCJjaXJjbGUtb3BhY2l0eVwiOm5ldyBqcihJLnBhaW50X2NpcmNsZVtcImNpcmNsZS1vcGFjaXR5XCJdKSxcImNpcmNsZS10cmFuc2xhdGVcIjpuZXcgTnIoSS5wYWludF9jaXJjbGVbXCJjaXJjbGUtdHJhbnNsYXRlXCJdKSxcImNpcmNsZS10cmFuc2xhdGUtYW5jaG9yXCI6bmV3IE5yKEkucGFpbnRfY2lyY2xlW1wiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3JcIl0pLFwiY2lyY2xlLXBpdGNoLXNjYWxlXCI6bmV3IE5yKEkucGFpbnRfY2lyY2xlW1wiY2lyY2xlLXBpdGNoLXNjYWxlXCJdKSxcImNpcmNsZS1waXRjaC1hbGlnbm1lbnRcIjpuZXcgTnIoSS5wYWludF9jaXJjbGVbXCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50XCJdKSxcImNpcmNsZS1zdHJva2Utd2lkdGhcIjpuZXcganIoSS5wYWludF9jaXJjbGVbXCJjaXJjbGUtc3Ryb2tlLXdpZHRoXCJdKSxcImNpcmNsZS1zdHJva2UtY29sb3JcIjpuZXcganIoSS5wYWludF9jaXJjbGVbXCJjaXJjbGUtc3Ryb2tlLWNvbG9yXCJdKSxcImNpcmNsZS1zdHJva2Utb3BhY2l0eVwiOm5ldyBqcihJLnBhaW50X2NpcmNsZVtcImNpcmNsZS1zdHJva2Utb3BhY2l0eVwiXSl9KX0sdGk9aShmdW5jdGlvbih0LGUpe3ZhciByO3QuZXhwb3J0cz0oKHI9bmV3IEZsb2F0MzJBcnJheSgzKSlbMF09MCxyWzFdPTAsclsyXT0wLGZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSg0KTt0WzBdPTAsdFsxXT0wLHRbMl09MCx0WzNdPTB9KCkse3ZlYzM6e3RyYW5zZm9ybU1hdDM6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXTtyZXR1cm4gdFswXT1uKnJbMF0raSpyWzNdK2Eqcls2XSx0WzFdPW4qclsxXStpKnJbNF0rYSpyWzddLHRbMl09bipyWzJdK2kqcls1XSthKnJbOF0sdH19LHZlYzQ6e3RyYW5zZm9ybU1hdDQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM107cmV0dXJuIHRbMF09clswXSpuK3JbNF0qaStyWzhdKmErclsxMl0qbyx0WzFdPXJbMV0qbityWzVdKmkrcls5XSphK3JbMTNdKm8sdFsyXT1yWzJdKm4rcls2XSppK3JbMTBdKmErclsxNF0qbyx0WzNdPXJbM10qbityWzddKmkrclsxMV0qYStyWzE1XSpvLHR9fSxtYXQyOntjcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgRmxvYXQzMkFycmF5KDQpO3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTEsdH0scm90YXRlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9TWF0aC5zaW4ociksbD1NYXRoLmNvcyhyKTtyZXR1cm4gdFswXT1uKmwrYSpzLHRbMV09aSpsK28qcyx0WzJdPW4qLXMrYSpsLHRbM109aSotcytvKmwsdH0sc2NhbGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1yWzBdLGw9clsxXTtyZXR1cm4gdFswXT1uKnMsdFsxXT1pKnMsdFsyXT1hKmwsdFszXT1vKmwsdH19LG1hdDM6e2NyZWF0ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBGbG9hdDMyQXJyYXkoOSk7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTEsdFs1XT0wLHRbNl09MCx0WzddPTAsdFs4XT0xLHR9LGZyb21Sb3RhdGlvbjpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc2luKGUpLG49TWF0aC5jb3MoZSk7cmV0dXJuIHRbMF09bix0WzFdPXIsdFsyXT0wLHRbM109LXIsdFs0XT1uLHRbNV09MCx0WzZdPTAsdFs3XT0wLHRbOF09MSx0fX0sbWF0NDp7Y3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSgxNik7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0xLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0xLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fSxpZGVudGl0eTpmdW5jdGlvbih0KXtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9LHRyYW5zbGF0ZTpmdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scyxsLGMsdSxoLGYscCxkLGc9clswXSx2PXJbMV0sbT1yWzJdO3JldHVybiBlPT09dD8odFsxMl09ZVswXSpnK2VbNF0qditlWzhdKm0rZVsxMl0sdFsxM109ZVsxXSpnK2VbNV0qditlWzldKm0rZVsxM10sdFsxNF09ZVsyXSpnK2VbNl0qditlWzEwXSptK2VbMTRdLHRbMTVdPWVbM10qZytlWzddKnYrZVsxMV0qbStlWzE1XSk6KG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLGM9ZVs2XSx1PWVbN10saD1lWzhdLGY9ZVs5XSxwPWVbMTBdLGQ9ZVsxMV0sdFswXT1uLHRbMV09aSx0WzJdPWEsdFszXT1vLHRbNF09cyx0WzVdPWwsdFs2XT1jLHRbN109dSx0WzhdPWgsdFs5XT1mLHRbMTBdPXAsdFsxMV09ZCx0WzEyXT1uKmcrcyp2K2gqbStlWzEyXSx0WzEzXT1pKmcrbCp2K2YqbStlWzEzXSx0WzE0XT1hKmcrYyp2K3AqbStlWzE0XSx0WzE1XT1vKmcrdSp2K2QqbStlWzE1XSksdH0sc2NhbGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXJbMF0saT1yWzFdLGE9clsyXTtyZXR1cm4gdFswXT1lWzBdKm4sdFsxXT1lWzFdKm4sdFsyXT1lWzJdKm4sdFszXT1lWzNdKm4sdFs0XT1lWzRdKmksdFs1XT1lWzVdKmksdFs2XT1lWzZdKmksdFs3XT1lWzddKmksdFs4XT1lWzhdKmEsdFs5XT1lWzldKmEsdFsxMF09ZVsxMF0qYSx0WzExXT1lWzExXSphLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdLHR9LG11bHRpcGx5OmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sYz1lWzZdLHU9ZVs3XSxoPWVbOF0sZj1lWzldLHA9ZVsxMF0sZD1lWzExXSxnPWVbMTJdLHY9ZVsxM10sbT1lWzE0XSx5PWVbMTVdLHg9clswXSxiPXJbMV0sXz1yWzJdLHc9clszXTtyZXR1cm4gdFswXT14Km4rYipzK18qaCt3KmcsdFsxXT14KmkrYipsK18qZit3KnYsdFsyXT14KmErYipjK18qcCt3Km0sdFszXT14Km8rYip1K18qZCt3KnkseD1yWzRdLGI9cls1XSxfPXJbNl0sdz1yWzddLHRbNF09eCpuK2IqcytfKmgrdypnLHRbNV09eCppK2IqbCtfKmYrdyp2LHRbNl09eCphK2IqYytfKnArdyptLHRbN109eCpvK2IqdStfKmQrdyp5LHg9cls4XSxiPXJbOV0sXz1yWzEwXSx3PXJbMTFdLHRbOF09eCpuK2IqcytfKmgrdypnLHRbOV09eCppK2IqbCtfKmYrdyp2LHRbMTBdPXgqYStiKmMrXypwK3cqbSx0WzExXT14Km8rYip1K18qZCt3KnkseD1yWzEyXSxiPXJbMTNdLF89clsxNF0sdz1yWzE1XSx0WzEyXT14Km4rYipzK18qaCt3KmcsdFsxM109eCppK2IqbCtfKmYrdyp2LHRbMTRdPXgqYStiKmMrXypwK3cqbSx0WzE1XT14Km8rYip1K18qZCt3KnksdH0scGVyc3BlY3RpdmU6ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT0xL01hdGgudGFuKGUvMiksbz0xLyhuLWkpO3JldHVybiB0WzBdPWEvcix0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT1hLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0oaStuKSpvLHRbMTFdPS0xLHRbMTJdPTAsdFsxM109MCx0WzE0XT0yKmkqbipvLHRbMTVdPTAsdH0scm90YXRlWDpmdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbNF0sbz1lWzVdLHM9ZVs2XSxsPWVbN10sYz1lWzhdLHU9ZVs5XSxoPWVbMTBdLGY9ZVsxMV07cmV0dXJuIGUhPT10JiYodFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKSx0WzRdPWEqaStjKm4sdFs1XT1vKmkrdSpuLHRbNl09cyppK2gqbix0WzddPWwqaStmKm4sdFs4XT1jKmktYSpuLHRbOV09dSppLW8qbix0WzEwXT1oKmktcypuLHRbMTFdPWYqaS1sKm4sdH0scm90YXRlWjpmdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbMF0sbz1lWzFdLHM9ZVsyXSxsPWVbM10sYz1lWzRdLHU9ZVs1XSxoPWVbNl0sZj1lWzddO3JldHVybiBlIT09dCYmKHRbOF09ZVs4XSx0WzldPWVbOV0sdFsxMF09ZVsxMF0sdFsxMV09ZVsxMV0sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pLHRbMF09YSppK2Mqbix0WzFdPW8qaSt1Km4sdFsyXT1zKmkraCpuLHRbM109bCppK2Yqbix0WzRdPWMqaS1hKm4sdFs1XT11KmktbypuLHRbNl09aCppLXMqbix0WzddPWYqaS1sKm4sdH0saW52ZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPWVbNF0scz1lWzVdLGw9ZVs2XSxjPWVbN10sdT1lWzhdLGg9ZVs5XSxmPWVbMTBdLHA9ZVsxMV0sZD1lWzEyXSxnPWVbMTNdLHY9ZVsxNF0sbT1lWzE1XSx5PXIqcy1uKm8seD1yKmwtaSpvLGI9cipjLWEqbyxfPW4qbC1pKnMsdz1uKmMtYSpzLGs9aSpjLWEqbCxBPXUqZy1oKmQsVD11KnYtZipkLE09dSptLXAqZCxTPWgqdi1mKmcsRT1oKm0tcCpnLEM9ZiptLXAqdixMPXkqQy14KkUrYipTK18qTS13KlQraypBO3JldHVybiBMPyhMPTEvTCx0WzBdPShzKkMtbCpFK2MqUykqTCx0WzFdPShpKkUtbipDLWEqUykqTCx0WzJdPShnKmstdip3K20qXykqTCx0WzNdPShmKnctaCprLXAqXykqTCx0WzRdPShsKk0tbypDLWMqVCkqTCx0WzVdPShyKkMtaSpNK2EqVCkqTCx0WzZdPSh2KmItZCprLW0qeCkqTCx0WzddPSh1KmstZipiK3AqeCkqTCx0WzhdPShvKkUtcypNK2MqQSkqTCx0WzldPShuKk0tcipFLWEqQSkqTCx0WzEwXT0oZCp3LWcqYittKnkpKkwsdFsxMV09KGgqYi11KnctcCp5KSpMLHRbMTJdPShzKlQtbypTLWwqQSkqTCx0WzEzXT0ocipTLW4qVCtpKkEpKkwsdFsxNF09KGcqeC1kKl8tdip5KSpMLHRbMTVdPSh1Kl8taCp4K2YqeSkqTCx0KTpudWxsfSxvcnRobzpmdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz0xLyhlLXIpLGw9MS8obi1pKSxjPTEvKGEtbyk7cmV0dXJuIHRbMF09LTIqcyx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0tMipsLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0yKmMsdFsxMV09MCx0WzEyXT0oZStyKSpzLHRbMTNdPShpK24pKmwsdFsxNF09KG8rYSkqYyx0WzE1XT0xLHR9fX0pfSksZWk9KHRpLnZlYzMsdGkudmVjNCkscmk9KHRpLm1hdDIsdGkubWF0Myx0aS5tYXQ0KSxuaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsUW4pfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5jcmVhdGVCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBObih0KX0sZS5wcm90b3R5cGUucXVlcnlSYWRpdXM9ZnVuY3Rpb24odCl7dmFyIGU9dDtyZXR1cm4gJG4oXCJjaXJjbGUtcmFkaXVzXCIsdGhpcyxlKSskbihcImNpcmNsZS1zdHJva2Utd2lkdGhcIix0aGlzLGUpK0puKHRoaXMucGFpbnQuZ2V0KFwiY2lyY2xlLXRyYW5zbGF0ZVwiKSl9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPUtuKHQsdGhpcy5wYWludC5nZXQoXCJjaXJjbGUtdHJhbnNsYXRlXCIpLHRoaXMucGFpbnQuZ2V0KFwiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3JcIiksaS5hbmdsZSxhKSxsPXRoaXMucGFpbnQuZ2V0KFwiY2lyY2xlLXJhZGl1c1wiKS5ldmFsdWF0ZShlKSt0aGlzLnBhaW50LmdldChcImNpcmNsZS1zdHJva2Utd2lkdGhcIikuZXZhbHVhdGUoZSksYz1cIm1hcFwiPT09dGhpcy5wYWludC5nZXQoXCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50XCIpLHU9Yz9zOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBpaSh0LGUscil9KX0pfSgwLG8saSksaD1jP2wqYTpsLGY9MCxwPXI7ZjxwLmxlbmd0aDtmKz0xKWZvcih2YXIgZD0wLGc9cFtmXTtkPGcubGVuZ3RoO2QrPTEpe3ZhciB2PWdbZF0sbT1jP3Y6aWkodixvLGkpLHk9aCx4PWVpLnRyYW5zZm9ybU1hdDQoW10sW3YueCx2LnksMCwxXSxvKTtpZihcInZpZXdwb3J0XCI9PT10aGlzLnBhaW50LmdldChcImNpcmNsZS1waXRjaC1zY2FsZVwiKSYmXCJtYXBcIj09PXRoaXMucGFpbnQuZ2V0KFwiY2lyY2xlLXBpdGNoLWFsaWdubWVudFwiKT95Kj14WzNdL2kuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZTpcIm1hcFwiPT09dGhpcy5wYWludC5nZXQoXCJjaXJjbGUtcGl0Y2gtc2NhbGVcIikmJlwidmlld3BvcnRcIj09PXRoaXMucGFpbnQuZ2V0KFwiY2lyY2xlLXBpdGNoLWFsaWdubWVudFwiKSYmKHkqPWkuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZS94WzNdKSxqbih1LG0seSkpcmV0dXJuITB9cmV0dXJuITF9LGV9KEhyKTtmdW5jdGlvbiBpaSh0LGUscil7dmFyIG49ZWkudHJhbnNmb3JtTWF0NChbXSxbdC54LHQueSwwLDFdLGUpO3JldHVybiBuZXcgbCgoblswXS9uWzNdKzEpKnIud2lkdGgqLjUsKG5bMV0vblszXSsxKSpyLmhlaWdodCouNSl9dmFyIGFpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZX0oTm4pO2Z1bmN0aW9uIG9pKHQsZSxyLG4pe3ZhciBpPWUud2lkdGgsYT1lLmhlaWdodDtpZihuKXtpZihuLmxlbmd0aCE9PWkqYSpyKXRocm93IG5ldyBSYW5nZUVycm9yKFwibWlzbWF0Y2hlZCBpbWFnZSBzaXplXCIpfWVsc2Ugbj1uZXcgVWludDhBcnJheShpKmEqcik7cmV0dXJuIHQud2lkdGg9aSx0LmhlaWdodD1hLHQuZGF0YT1uLHR9ZnVuY3Rpb24gc2kodCxlLHIpe3ZhciBuPWUud2lkdGgsaT1lLmhlaWdodDtpZihuIT09dC53aWR0aHx8aSE9PXQuaGVpZ2h0KXt2YXIgYT1vaSh7fSx7d2lkdGg6bixoZWlnaHQ6aX0scik7bGkodCxhLHt4OjAseTowfSx7eDowLHk6MH0se3dpZHRoOk1hdGgubWluKHQud2lkdGgsbiksaGVpZ2h0Ok1hdGgubWluKHQuaGVpZ2h0LGkpfSxyKSx0LndpZHRoPW4sdC5oZWlnaHQ9aSx0LmRhdGE9YS5kYXRhfX1mdW5jdGlvbiBsaSh0LGUscixuLGksYSl7aWYoMD09PWkud2lkdGh8fDA9PT1pLmhlaWdodClyZXR1cm4gZTtpZihpLndpZHRoPnQud2lkdGh8fGkuaGVpZ2h0PnQuaGVpZ2h0fHxyLng+dC53aWR0aC1pLndpZHRofHxyLnk+dC5oZWlnaHQtaS5oZWlnaHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvdXQgb2YgcmFuZ2Ugc291cmNlIGNvb3JkaW5hdGVzIGZvciBpbWFnZSBjb3B5XCIpO2lmKGkud2lkdGg+ZS53aWR0aHx8aS5oZWlnaHQ+ZS5oZWlnaHR8fG4ueD5lLndpZHRoLWkud2lkdGh8fG4ueT5lLmhlaWdodC1pLmhlaWdodCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIm91dCBvZiByYW5nZSBkZXN0aW5hdGlvbiBjb29yZGluYXRlcyBmb3IgaW1hZ2UgY29weVwiKTtmb3IodmFyIG89dC5kYXRhLHM9ZS5kYXRhLGw9MDtsPGkuaGVpZ2h0O2wrKylmb3IodmFyIGM9KChyLnkrbCkqdC53aWR0aCtyLngpKmEsdT0oKG4ueStsKSplLndpZHRoK24ueCkqYSxoPTA7aDxpLndpZHRoKmE7aCsrKXNbdStoXT1vW2MraF07cmV0dXJuIGV9cHIoXCJIZWF0bWFwQnVja2V0XCIsYWkse29taXQ6W1wibGF5ZXJzXCJdfSk7dmFyIGNpPWZ1bmN0aW9uKHQsZSl7b2kodGhpcyx0LDEsZSl9O2NpLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCl7c2kodGhpcyx0LDEpfSxjaS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGNpKHt3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodH0sbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhKSl9LGNpLmNvcHk9ZnVuY3Rpb24odCxlLHIsbixpKXtsaSh0LGUscixuLGksMSl9O3ZhciB1aT1mdW5jdGlvbih0LGUpe29pKHRoaXMsdCw0LGUpfTt1aS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQpe3NpKHRoaXMsdCw0KX0sdWkucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB1aSh7d2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHR9LG5ldyBVaW50OEFycmF5KHRoaXMuZGF0YSkpfSx1aS5jb3B5PWZ1bmN0aW9uKHQsZSxyLG4saSl7bGkodCxlLHIsbixpLDQpfSxwcihcIkFscGhhSW1hZ2VcIixjaSkscHIoXCJSR0JBSW1hZ2VcIix1aSk7dmFyIGhpPXtwYWludDpuZXcgcXIoe1wiaGVhdG1hcC1yYWRpdXNcIjpuZXcganIoSS5wYWludF9oZWF0bWFwW1wiaGVhdG1hcC1yYWRpdXNcIl0pLFwiaGVhdG1hcC13ZWlnaHRcIjpuZXcganIoSS5wYWludF9oZWF0bWFwW1wiaGVhdG1hcC13ZWlnaHRcIl0pLFwiaGVhdG1hcC1pbnRlbnNpdHlcIjpuZXcgTnIoSS5wYWludF9oZWF0bWFwW1wiaGVhdG1hcC1pbnRlbnNpdHlcIl0pLFwiaGVhdG1hcC1jb2xvclwiOm5ldyBVcihJLnBhaW50X2hlYXRtYXBbXCJoZWF0bWFwLWNvbG9yXCJdKSxcImhlYXRtYXAtb3BhY2l0eVwiOm5ldyBOcihJLnBhaW50X2hlYXRtYXBbXCJoZWF0bWFwLW9wYWNpdHlcIl0pfSl9O2Z1bmN0aW9uIGZpKHQsZSl7Zm9yKHZhciByPW5ldyBVaW50OEFycmF5KDEwMjQpLG49e30saT0wLGE9MDtpPDI1NjtpKyssYSs9NCl7bltlXT1pLzI1NTt2YXIgbz10LmV2YWx1YXRlKG4pO3JbYSswXT1NYXRoLmZsb29yKDI1NSpvLnIvby5hKSxyW2ErMV09TWF0aC5mbG9vcigyNTUqby5nL28uYSksclthKzJdPU1hdGguZmxvb3IoMjU1Km8uYi9vLmEpLHJbYSszXT1NYXRoLmZsb29yKDI1NSpvLmEpfXJldHVybiBuZXcgdWkoe3dpZHRoOjI1NixoZWlnaHQ6MX0scil9dmFyIHBpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxoaSksdGhpcy5fdXBkYXRlQ29sb3JSYW1wKCl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGFpKHQpfSxlLnByb3RvdHlwZS5zZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKGUscixuKXt0LnByb3RvdHlwZS5zZXRQYWludFByb3BlcnR5LmNhbGwodGhpcyxlLHIsbiksXCJoZWF0bWFwLWNvbG9yXCI9PT1lJiZ0aGlzLl91cGRhdGVDb2xvclJhbXAoKX0sZS5wcm90b3R5cGUuX3VwZGF0ZUNvbG9yUmFtcD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuX3ZhbHVlc1tcImhlYXRtYXAtY29sb3JcIl0udmFsdWUuZXhwcmVzc2lvbjt0aGlzLmNvbG9yUmFtcD1maSh0LFwiaGVhdG1hcERlbnNpdHlcIiksdGhpcy5jb2xvclJhbXBUZXh0dXJlPW51bGx9LGUucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbigpe3RoaXMuaGVhdG1hcEZibyYmKHRoaXMuaGVhdG1hcEZiby5kZXN0cm95KCksdGhpcy5oZWF0bWFwRmJvPW51bGwpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbigpe3JldHVybiAwfSxlLnByb3RvdHlwZS5xdWVyeUludGVyc2VjdHNGZWF0dXJlPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLmhhc09mZnNjcmVlblBhc3M9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMucGFpbnQuZ2V0KFwiaGVhdG1hcC1vcGFjaXR5XCIpJiZcIm5vbmVcIiE9PXRoaXMudmlzaWJpbGl0eX0sZX0oSHIpLGRpPXtwYWludDpuZXcgcXIoe1wiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1kaXJlY3Rpb25cIjpuZXcgTnIoSS5wYWludF9oaWxsc2hhZGVbXCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWRpcmVjdGlvblwiXSksXCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWFuY2hvclwiOm5ldyBOcihJLnBhaW50X2hpbGxzaGFkZVtcImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yXCJdKSxcImhpbGxzaGFkZS1leGFnZ2VyYXRpb25cIjpuZXcgTnIoSS5wYWludF9oaWxsc2hhZGVbXCJoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uXCJdKSxcImhpbGxzaGFkZS1zaGFkb3ctY29sb3JcIjpuZXcgTnIoSS5wYWludF9oaWxsc2hhZGVbXCJoaWxsc2hhZGUtc2hhZG93LWNvbG9yXCJdKSxcImhpbGxzaGFkZS1oaWdobGlnaHQtY29sb3JcIjpuZXcgTnIoSS5wYWludF9oaWxsc2hhZGVbXCJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yXCJdKSxcImhpbGxzaGFkZS1hY2NlbnQtY29sb3JcIjpuZXcgTnIoSS5wYWludF9oaWxsc2hhZGVbXCJoaWxsc2hhZGUtYWNjZW50LWNvbG9yXCJdKX0pfSxnaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsZGkpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5oYXNPZmZzY3JlZW5QYXNzPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLnBhaW50LmdldChcImhpbGxzaGFkZS1leGFnZ2VyYXRpb25cIikmJlwibm9uZVwiIT09dGhpcy52aXNpYmlsaXR5fSxlfShIciksdmk9WHIoW3tuYW1lOlwiYV9wb3NcIixjb21wb25lbnRzOjIsdHlwZTpcIkludDE2XCJ9XSw0KS5tZW1iZXJzLG1pPXhpLHlpPXhpO2Z1bmN0aW9uIHhpKHQsZSxyKXtyPXJ8fDI7dmFyIG4saSxhLG8scyxsLGMsdT1lJiZlLmxlbmd0aCxoPXU/ZVswXSpyOnQubGVuZ3RoLGY9YmkodCwwLGgsciwhMCkscD1bXTtpZighZilyZXR1cm4gcDtpZih1JiYoZj1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scz1bXTtmb3IoaT0wLGE9ZS5sZW5ndGg7aTxhO2krKykobz1iaSh0LGVbaV0qbixpPGEtMT9lW2krMV0qbjp0Lmxlbmd0aCxuLCExKSk9PT1vLm5leHQmJihvLnN0ZWluZXI9ITApLHMucHVzaChMaShvKSk7Zm9yKHMuc29ydChTaSksaT0wO2k8cy5sZW5ndGg7aSsrKUVpKHNbaV0scikscj1faShyLHIubmV4dCk7cmV0dXJuIHJ9KHQsZSxmLHIpKSx0Lmxlbmd0aD44MCpyKXtuPWE9dFswXSxpPW89dFsxXTtmb3IodmFyIGQ9cjtkPGg7ZCs9cikocz10W2RdKTxuJiYobj1zKSwobD10W2QrMV0pPGkmJihpPWwpLHM+YSYmKGE9cyksbD5vJiYobz1sKTtjPTAhPT0oYz1NYXRoLm1heChhLW4sby1pKSk/MS9jOjB9cmV0dXJuIHdpKGYscCxyLG4saSxjKSxwfWZ1bmN0aW9uIGJpKHQsZSxyLG4saSl7dmFyIGEsbztpZihpPT09VmkodCxlLHIsbik+MClmb3IoYT1lO2E8cjthKz1uKW89QmkoYSx0W2FdLHRbYSsxXSxvKTtlbHNlIGZvcihhPXItbjthPj1lO2EtPW4pbz1CaShhLHRbYV0sdFthKzFdLG8pO3JldHVybiBvJiZEaShvLG8ubmV4dCkmJihOaShvKSxvPW8ubmV4dCksb31mdW5jdGlvbiBfaSh0LGUpe2lmKCF0KXJldHVybiB0O2V8fChlPXQpO3ZhciByLG49dDtkb3tpZihyPSExLG4uc3RlaW5lcnx8IURpKG4sbi5uZXh0KSYmMCE9PUlpKG4ucHJldixuLG4ubmV4dCkpbj1uLm5leHQ7ZWxzZXtpZihOaShuKSwobj1lPW4ucHJldik9PT1uLm5leHQpYnJlYWs7cj0hMH19d2hpbGUocnx8biE9PWUpO3JldHVybiBlfWZ1bmN0aW9uIHdpKHQsZSxyLG4saSxhLG8pe2lmKHQpeyFvJiZhJiZmdW5jdGlvbih0LGUscixuKXt2YXIgaT10O2Rve251bGw9PT1pLnomJihpLno9Q2koaS54LGkueSxlLHIsbikpLGkucHJldlo9aS5wcmV2LGkubmV4dFo9aS5uZXh0LGk9aS5uZXh0fXdoaWxlKGkhPT10KTtpLnByZXZaLm5leHRaPW51bGwsaS5wcmV2Wj1udWxsLGZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbyxzLGwsYz0xO2Rve2ZvcihyPXQsdD1udWxsLGE9bnVsbCxvPTA7cjspe2ZvcihvKyssbj1yLHM9MCxlPTA7ZTxjJiYocysrLG49bi5uZXh0Wik7ZSsrKTtmb3IobD1jO3M+MHx8bD4wJiZuOykwIT09cyYmKDA9PT1sfHwhbnx8ci56PD1uLnopPyhpPXIscj1yLm5leHRaLHMtLSk6KGk9bixuPW4ubmV4dFosbC0tKSxhP2EubmV4dFo9aTp0PWksaS5wcmV2Wj1hLGE9aTtyPW59YS5uZXh0Wj1udWxsLGMqPTJ9d2hpbGUobz4xKX0oaSl9KHQsbixpLGEpO2Zvcih2YXIgcyxsLGM9dDt0LnByZXYhPT10Lm5leHQ7KWlmKHM9dC5wcmV2LGw9dC5uZXh0LGE/QWkodCxuLGksYSk6a2kodCkpZS5wdXNoKHMuaS9yKSxlLnB1c2godC5pL3IpLGUucHVzaChsLmkvciksTmkodCksdD1sLm5leHQsYz1sLm5leHQ7ZWxzZSBpZigodD1sKT09PWMpe28/MT09PW8/d2kodD1UaSh0LGUsciksZSxyLG4saSxhLDIpOjI9PT1vJiZNaSh0LGUscixuLGksYSk6d2koX2kodCksZSxyLG4saSxhLDEpO2JyZWFrfX19ZnVuY3Rpb24ga2kodCl7dmFyIGU9dC5wcmV2LHI9dCxuPXQubmV4dDtpZihJaShlLHIsbik+PTApcmV0dXJuITE7Zm9yKHZhciBpPXQubmV4dC5uZXh0O2khPT10LnByZXY7KXtpZih6aShlLngsZS55LHIueCxyLnksbi54LG4ueSxpLngsaS55KSYmSWkoaS5wcmV2LGksaS5uZXh0KT49MClyZXR1cm4hMTtpPWkubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBBaSh0LGUscixuKXt2YXIgaT10LnByZXYsYT10LG89dC5uZXh0O2lmKElpKGksYSxvKT49MClyZXR1cm4hMTtmb3IodmFyIHM9aS54PGEueD9pLng8by54P2kueDpvLng6YS54PG8ueD9hLng6by54LGw9aS55PGEueT9pLnk8by55P2kueTpvLnk6YS55PG8ueT9hLnk6by55LGM9aS54PmEueD9pLng+by54P2kueDpvLng6YS54Pm8ueD9hLng6by54LHU9aS55PmEueT9pLnk+by55P2kueTpvLnk6YS55Pm8ueT9hLnk6by55LGg9Q2kocyxsLGUscixuKSxmPUNpKGMsdSxlLHIsbikscD10LnByZXZaLGQ9dC5uZXh0WjtwJiZwLno+PWgmJmQmJmQuejw9Zjspe2lmKHAhPT10LnByZXYmJnAhPT10Lm5leHQmJnppKGkueCxpLnksYS54LGEueSxvLngsby55LHAueCxwLnkpJiZJaShwLnByZXYscCxwLm5leHQpPj0wKXJldHVybiExO2lmKHA9cC5wcmV2WixkIT09dC5wcmV2JiZkIT09dC5uZXh0JiZ6aShpLngsaS55LGEueCxhLnksby54LG8ueSxkLngsZC55KSYmSWkoZC5wcmV2LGQsZC5uZXh0KT49MClyZXR1cm4hMTtkPWQubmV4dFp9Zm9yKDtwJiZwLno+PWg7KXtpZihwIT09dC5wcmV2JiZwIT09dC5uZXh0JiZ6aShpLngsaS55LGEueCxhLnksby54LG8ueSxwLngscC55KSYmSWkocC5wcmV2LHAscC5uZXh0KT49MClyZXR1cm4hMTtwPXAucHJldlp9Zm9yKDtkJiZkLno8PWY7KXtpZihkIT09dC5wcmV2JiZkIT09dC5uZXh0JiZ6aShpLngsaS55LGEueCxhLnksby54LG8ueSxkLngsZC55KSYmSWkoZC5wcmV2LGQsZC5uZXh0KT49MClyZXR1cm4hMTtkPWQubmV4dFp9cmV0dXJuITB9ZnVuY3Rpb24gVGkodCxlLHIpe3ZhciBuPXQ7ZG97dmFyIGk9bi5wcmV2LGE9bi5uZXh0Lm5leHQ7IURpKGksYSkmJlBpKGksbixuLm5leHQsYSkmJlJpKGksYSkmJlJpKGEsaSkmJihlLnB1c2goaS5pL3IpLGUucHVzaChuLmkvciksZS5wdXNoKGEuaS9yKSxOaShuKSxOaShuLm5leHQpLG49dD1hKSxuPW4ubmV4dH13aGlsZShuIT09dCk7cmV0dXJuIG59ZnVuY3Rpb24gTWkodCxlLHIsbixpLGEpe3ZhciBvPXQ7ZG97Zm9yKHZhciBzPW8ubmV4dC5uZXh0O3MhPT1vLnByZXY7KXtpZihvLmkhPT1zLmkmJk9pKG8scykpe3ZhciBsPUZpKG8scyk7cmV0dXJuIG89X2kobyxvLm5leHQpLGw9X2kobCxsLm5leHQpLHdpKG8sZSxyLG4saSxhKSx2b2lkIHdpKGwsZSxyLG4saSxhKX1zPXMubmV4dH1vPW8ubmV4dH13aGlsZShvIT09dCl9ZnVuY3Rpb24gU2kodCxlKXtyZXR1cm4gdC54LWUueH1mdW5jdGlvbiBFaSh0LGUpe2lmKGU9ZnVuY3Rpb24odCxlKXt2YXIgcixuPWUsaT10LngsYT10Lnksbz0tMS8wO2Rve2lmKGE8PW4ueSYmYT49bi5uZXh0LnkmJm4ubmV4dC55IT09bi55KXt2YXIgcz1uLngrKGEtbi55KSoobi5uZXh0Lngtbi54KS8obi5uZXh0Lnktbi55KTtpZihzPD1pJiZzPm8pe2lmKG89cyxzPT09aSl7aWYoYT09PW4ueSlyZXR1cm4gbjtpZihhPT09bi5uZXh0LnkpcmV0dXJuIG4ubmV4dH1yPW4ueDxuLm5leHQueD9uOm4ubmV4dH19bj1uLm5leHR9d2hpbGUobiE9PWUpO2lmKCFyKXJldHVybiBudWxsO2lmKGk9PT1vKXJldHVybiByLnByZXY7dmFyIGwsYz1yLHU9ci54LGg9ci55LGY9MS8wO2ZvcihuPXIubmV4dDtuIT09YzspaT49bi54JiZuLng+PXUmJmkhPT1uLngmJnppKGE8aD9pOm8sYSx1LGgsYTxoP286aSxhLG4ueCxuLnkpJiYoKGw9TWF0aC5hYnMoYS1uLnkpLyhpLW4ueCkpPGZ8fGw9PT1mJiZuLng+ci54KSYmUmkobix0KSYmKHI9bixmPWwpLG49bi5uZXh0O3JldHVybiByfSh0LGUpKXt2YXIgcj1GaShlLHQpO19pKHIsci5uZXh0KX19ZnVuY3Rpb24gQ2kodCxlLHIsbixpKXtyZXR1cm4odD0xNDMxNjU1NzY1JigodD04NTg5OTM0NTkmKCh0PTI1MjY0NTEzNSYoKHQ9MTY3MTE5MzUmKCh0PTMyNzY3Kih0LXIpKmkpfHQ8PDgpKXx0PDw0KSl8dDw8MikpfHQ8PDEpKXwoZT0xNDMxNjU1NzY1JigoZT04NTg5OTM0NTkmKChlPTI1MjY0NTEzNSYoKGU9MTY3MTE5MzUmKChlPTMyNzY3KihlLW4pKmkpfGU8PDgpKXxlPDw0KSl8ZTw8MikpfGU8PDEpKTw8MX1mdW5jdGlvbiBMaSh0KXt2YXIgZT10LHI9dDtkb3tlLng8ci54JiYocj1lKSxlPWUubmV4dH13aGlsZShlIT09dCk7cmV0dXJuIHJ9ZnVuY3Rpb24gemkodCxlLHIsbixpLGEsbyxzKXtyZXR1cm4oaS1vKSooZS1zKS0odC1vKSooYS1zKT49MCYmKHQtbykqKG4tcyktKHItbykqKGUtcyk+PTAmJihyLW8pKihhLXMpLShpLW8pKihuLXMpPj0wfWZ1bmN0aW9uIE9pKHQsZSl7cmV0dXJuIHQubmV4dC5pIT09ZS5pJiZ0LnByZXYuaSE9PWUuaSYmIWZ1bmN0aW9uKHQsZSl7dmFyIHI9dDtkb3tpZihyLmkhPT10LmkmJnIubmV4dC5pIT09dC5pJiZyLmkhPT1lLmkmJnIubmV4dC5pIT09ZS5pJiZQaShyLHIubmV4dCx0LGUpKXJldHVybiEwO3I9ci5uZXh0fXdoaWxlKHIhPT10KTtyZXR1cm4hMX0odCxlKSYmUmkodCxlKSYmUmkoZSx0KSYmZnVuY3Rpb24odCxlKXt2YXIgcj10LG49ITEsaT0odC54K2UueCkvMixhPSh0LnkrZS55KS8yO2Rve3IueT5hIT1yLm5leHQueT5hJiZyLm5leHQueSE9PXIueSYmaTwoci5uZXh0Lngtci54KSooYS1yLnkpLyhyLm5leHQueS1yLnkpK3IueCYmKG49IW4pLHI9ci5uZXh0fXdoaWxlKHIhPT10KTtyZXR1cm4gbn0odCxlKX1mdW5jdGlvbiBJaSh0LGUscil7cmV0dXJuKGUueS10LnkpKihyLngtZS54KS0oZS54LXQueCkqKHIueS1lLnkpfWZ1bmN0aW9uIERpKHQsZSl7cmV0dXJuIHQueD09PWUueCYmdC55PT09ZS55fWZ1bmN0aW9uIFBpKHQsZSxyLG4pe3JldHVybiEhKERpKHQsZSkmJkRpKHIsbil8fERpKHQsbikmJkRpKHIsZSkpfHxJaSh0LGUscik+MCE9SWkodCxlLG4pPjAmJklpKHIsbix0KT4wIT1JaShyLG4sZSk+MH1mdW5jdGlvbiBSaSh0LGUpe3JldHVybiBJaSh0LnByZXYsdCx0Lm5leHQpPDA/SWkodCxlLHQubmV4dCk+PTAmJklpKHQsdC5wcmV2LGUpPj0wOklpKHQsZSx0LnByZXYpPDB8fElpKHQsdC5uZXh0LGUpPDB9ZnVuY3Rpb24gRmkodCxlKXt2YXIgcj1uZXcgamkodC5pLHQueCx0LnkpLG49bmV3IGppKGUuaSxlLngsZS55KSxpPXQubmV4dCxhPWUucHJldjtyZXR1cm4gdC5uZXh0PWUsZS5wcmV2PXQsci5uZXh0PWksaS5wcmV2PXIsbi5uZXh0PXIsci5wcmV2PW4sYS5uZXh0PW4sbi5wcmV2PWEsbn1mdW5jdGlvbiBCaSh0LGUscixuKXt2YXIgaT1uZXcgamkodCxlLHIpO3JldHVybiBuPyhpLm5leHQ9bi5uZXh0LGkucHJldj1uLG4ubmV4dC5wcmV2PWksbi5uZXh0PWkpOihpLnByZXY9aSxpLm5leHQ9aSksaX1mdW5jdGlvbiBOaSh0KXt0Lm5leHQucHJldj10LnByZXYsdC5wcmV2Lm5leHQ9dC5uZXh0LHQucHJldlomJih0LnByZXZaLm5leHRaPXQubmV4dFopLHQubmV4dFomJih0Lm5leHRaLnByZXZaPXQucHJldlopfWZ1bmN0aW9uIGppKHQsZSxyKXt0aGlzLmk9dCx0aGlzLng9ZSx0aGlzLnk9cix0aGlzLnByZXY9bnVsbCx0aGlzLm5leHQ9bnVsbCx0aGlzLno9bnVsbCx0aGlzLnByZXZaPW51bGwsdGhpcy5uZXh0Wj1udWxsLHRoaXMuc3RlaW5lcj0hMX1mdW5jdGlvbiBWaSh0LGUscixuKXtmb3IodmFyIGk9MCxhPWUsbz1yLW47YTxyO2ErPW4paSs9KHRbb10tdFthXSkqKHRbYSsxXSt0W28rMV0pLG89YTtyZXR1cm4gaX14aS5kZXZpYXRpb249ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZSYmZS5sZW5ndGgsYT1pP2VbMF0qcjp0Lmxlbmd0aCxvPU1hdGguYWJzKFZpKHQsMCxhLHIpKTtpZihpKWZvcih2YXIgcz0wLGw9ZS5sZW5ndGg7czxsO3MrKyl7dmFyIGM9ZVtzXSpyLHU9czxsLTE/ZVtzKzFdKnI6dC5sZW5ndGg7by09TWF0aC5hYnMoVmkodCxjLHUscikpfXZhciBoPTA7Zm9yKHM9MDtzPG4ubGVuZ3RoO3MrPTMpe3ZhciBmPW5bc10qcixwPW5bcysxXSpyLGQ9bltzKzJdKnI7aCs9TWF0aC5hYnMoKHRbZl0tdFtkXSkqKHRbcCsxXS10W2YrMV0pLSh0W2ZdLXRbcF0pKih0W2QrMV0tdFtmKzFdKSl9cmV0dXJuIDA9PT1vJiYwPT09aD8wOk1hdGguYWJzKChoLW8pL28pfSx4aS5mbGF0dGVuPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10WzBdWzBdLmxlbmd0aCxyPXt2ZXJ0aWNlczpbXSxob2xlczpbXSxkaW1lbnNpb25zOmV9LG49MCxpPTA7aTx0Lmxlbmd0aDtpKyspe2Zvcih2YXIgYT0wO2E8dFtpXS5sZW5ndGg7YSsrKWZvcih2YXIgbz0wO288ZTtvKyspci52ZXJ0aWNlcy5wdXNoKHRbaV1bYV1bb10pO2k+MCYmKG4rPXRbaS0xXS5sZW5ndGgsci5ob2xlcy5wdXNoKG4pKX1yZXR1cm4gcn0sbWkuZGVmYXVsdD15aTt2YXIgVWk9SGkscWk9SGk7ZnVuY3Rpb24gSGkodCxlLHIsbixpKXshZnVuY3Rpb24gdChlLHIsbixpLGEpe2Zvcig7aT5uOyl7aWYoaS1uPjYwMCl7dmFyIG89aS1uKzEscz1yLW4rMSxsPU1hdGgubG9nKG8pLGM9LjUqTWF0aC5leHAoMipsLzMpLHU9LjUqTWF0aC5zcXJ0KGwqYyooby1jKS9vKSoocy1vLzI8MD8tMToxKTt0KGUscixNYXRoLm1heChuLE1hdGguZmxvb3Ioci1zKmMvbyt1KSksTWF0aC5taW4oaSxNYXRoLmZsb29yKHIrKG8tcykqYy9vK3UpKSxhKX12YXIgaD1lW3JdLGY9bixwPWk7Zm9yKEdpKGUsbixyKSxhKGVbaV0saCk+MCYmR2koZSxuLGkpO2Y8cDspe2ZvcihHaShlLGYscCksZisrLHAtLTthKGVbZl0saCk8MDspZisrO2Zvcig7YShlW3BdLGgpPjA7KXAtLX0wPT09YShlW25dLGgpP0dpKGUsbixwKTpHaShlLCsrcCxpKSxwPD1yJiYobj1wKzEpLHI8PXAmJihpPXAtMSl9fSh0LGUscnx8MCxufHx0Lmxlbmd0aC0xLGl8fFlpKX1mdW5jdGlvbiBHaSh0LGUscil7dmFyIG49dFtlXTt0W2VdPXRbcl0sdFtyXT1ufWZ1bmN0aW9uIFlpKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTowfWZ1bmN0aW9uIFdpKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYocjw9MSlyZXR1cm5bdF07Zm9yKHZhciBuLGksYT1bXSxvPTA7bzxyO28rKyl7dmFyIHM9ayh0W29dKTswIT09cyYmKHRbb10uYXJlYT1NYXRoLmFicyhzKSx2b2lkIDA9PT1pJiYoaT1zPDApLGk9PT1zPDA/KG4mJmEucHVzaChuKSxuPVt0W29dXSk6bi5wdXNoKHRbb10pKX1pZihuJiZhLnB1c2gobiksZT4xKWZvcih2YXIgbD0wO2w8YS5sZW5ndGg7bCsrKWFbbF0ubGVuZ3RoPD1lfHwoVWkoYVtsXSxlLDEsYVtsXS5sZW5ndGgtMSxYaSksYVtsXT1hW2xdLnNsaWNlKDAsZSkpO3JldHVybiBhfWZ1bmN0aW9uIFhpKHQsZSl7cmV0dXJuIGUuYXJlYS10LmFyZWF9VWkuZGVmYXVsdD1xaTt2YXIgWmk9ZnVuY3Rpb24odCl7dGhpcy56b29tPXQuem9vbSx0aGlzLm92ZXJzY2FsaW5nPXQub3ZlcnNjYWxpbmcsdGhpcy5sYXllcnM9dC5sYXllcnMsdGhpcy5sYXllcklkcz10aGlzLmxheWVycy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheT1uZXcgJHIsdGhpcy5pbmRleEFycmF5PW5ldyBobix0aGlzLmluZGV4QXJyYXkyPW5ldyBmbix0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucz1uZXcgSW4odmksdC5sYXllcnMsdC56b29tKSx0aGlzLnNlZ21lbnRzPW5ldyBNbix0aGlzLnNlZ21lbnRzMj1uZXcgTW59O1ppLnByb3RvdHlwZS5wb3B1bGF0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49dDtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl0sYT1pLmZlYXR1cmUsbz1pLmluZGV4LHM9aS5zb3VyY2VMYXllckluZGV4O2lmKHRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyKG5ldyBMcih0aGlzLnpvb20pLGEpKXt2YXIgbD1GbihhKTt0aGlzLmFkZEZlYXR1cmUoYSxsKSxlLmZlYXR1cmVJbmRleC5pbnNlcnQoYSxsLG8scyx0aGlzLmluZGV4KX19fSxaaS5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGh9LFppLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx2aSksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSksdGhpcy5pbmRleEJ1ZmZlcjI9dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkyKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQodCl9LFppLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlcjIuZGVzdHJveSgpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzMi5kZXN0cm95KCkpfSxaaS5wcm90b3R5cGUuYWRkRmVhdHVyZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49V2koZSw1MDApO3I8bi5sZW5ndGg7cis9MSl7Zm9yKHZhciBpPW5bcl0sYT0wLG89MCxzPWk7bzxzLmxlbmd0aDtvKz0xKWErPXNbb10ubGVuZ3RoO2Zvcih2YXIgbD10aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KGEsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXkpLGM9bC52ZXJ0ZXhMZW5ndGgsdT1bXSxoPVtdLGY9MCxwPWk7ZjxwLmxlbmd0aDtmKz0xKXt2YXIgZD1wW2ZdO2lmKDAhPT1kLmxlbmd0aCl7ZCE9PWlbMF0mJmgucHVzaCh1Lmxlbmd0aC8yKTt2YXIgZz10aGlzLnNlZ21lbnRzMi5wcmVwYXJlU2VnbWVudChkLmxlbmd0aCx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheTIpLHY9Zy52ZXJ0ZXhMZW5ndGg7dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhkWzBdLngsZFswXS55KSx0aGlzLmluZGV4QXJyYXkyLmVtcGxhY2VCYWNrKHYrZC5sZW5ndGgtMSx2KSx1LnB1c2goZFswXS54KSx1LnB1c2goZFswXS55KTtmb3IodmFyIG09MTttPGQubGVuZ3RoO20rKyl0aGlzLmxheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKGRbbV0ueCxkW21dLnkpLHRoaXMuaW5kZXhBcnJheTIuZW1wbGFjZUJhY2sodittLTEsdittKSx1LnB1c2goZFttXS54KSx1LnB1c2goZFttXS55KTtnLnZlcnRleExlbmd0aCs9ZC5sZW5ndGgsZy5wcmltaXRpdmVMZW5ndGgrPWQubGVuZ3RofX1mb3IodmFyIHk9bWkodSxoKSx4PTA7eDx5Lmxlbmd0aDt4Kz0zKXRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhjK3lbeF0sYyt5W3grMV0sYyt5W3grMl0pO2wudmVydGV4TGVuZ3RoKz1hLGwucHJpbWl0aXZlTGVuZ3RoKz15Lmxlbmd0aC8zfXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsdCl9LHByKFwiRmlsbEJ1Y2tldFwiLFppLHtvbWl0OltcImxheWVyc1wiXX0pO3ZhciAkaT17cGFpbnQ6bmV3IHFyKHtcImZpbGwtYW50aWFsaWFzXCI6bmV3IE5yKEkucGFpbnRfZmlsbFtcImZpbGwtYW50aWFsaWFzXCJdKSxcImZpbGwtb3BhY2l0eVwiOm5ldyBqcihJLnBhaW50X2ZpbGxbXCJmaWxsLW9wYWNpdHlcIl0pLFwiZmlsbC1jb2xvclwiOm5ldyBqcihJLnBhaW50X2ZpbGxbXCJmaWxsLWNvbG9yXCJdKSxcImZpbGwtb3V0bGluZS1jb2xvclwiOm5ldyBqcihJLnBhaW50X2ZpbGxbXCJmaWxsLW91dGxpbmUtY29sb3JcIl0pLFwiZmlsbC10cmFuc2xhdGVcIjpuZXcgTnIoSS5wYWludF9maWxsW1wiZmlsbC10cmFuc2xhdGVcIl0pLFwiZmlsbC10cmFuc2xhdGUtYW5jaG9yXCI6bmV3IE5yKEkucGFpbnRfZmlsbFtcImZpbGwtdHJhbnNsYXRlLWFuY2hvclwiXSksXCJmaWxsLXBhdHRlcm5cIjpuZXcgVnIoSS5wYWludF9maWxsW1wiZmlsbC1wYXR0ZXJuXCJdKX0pfSxKaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsJGkpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5yZWNhbGN1bGF0ZT1mdW5jdGlvbih0KXt0aGlzLnBhaW50PXRoaXMuX3RyYW5zaXRpb25pbmdQYWludC5wb3NzaWJseUV2YWx1YXRlKHQpO3ZhciBlPXRoaXMucGFpbnQuX3ZhbHVlc1tcImZpbGwtb3V0bGluZS1jb2xvclwiXTtcImNvbnN0YW50XCI9PT1lLnZhbHVlLmtpbmQmJnZvaWQgMD09PWUudmFsdWUudmFsdWUmJih0aGlzLnBhaW50Ll92YWx1ZXNbXCJmaWxsLW91dGxpbmUtY29sb3JcIl09dGhpcy5wYWludC5fdmFsdWVzW1wiZmlsbC1jb2xvclwiXSl9LGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFppKHQpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBKbih0aGlzLnBhaW50LmdldChcImZpbGwtdHJhbnNsYXRlXCIpKX0sZS5wcm90b3R5cGUucXVlcnlJbnRlcnNlY3RzRmVhdHVyZT1mdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuIFZuKEtuKHQsdGhpcy5wYWludC5nZXQoXCJmaWxsLXRyYW5zbGF0ZVwiKSx0aGlzLnBhaW50LmdldChcImZpbGwtdHJhbnNsYXRlLWFuY2hvclwiKSxpLmFuZ2xlLGEpLHIpfSxlfShIciksS2k9WHIoW3tuYW1lOlwiYV9wb3NcIixjb21wb25lbnRzOjIsdHlwZTpcIkludDE2XCJ9LHtuYW1lOlwiYV9ub3JtYWxfZWRcIixjb21wb25lbnRzOjQsdHlwZTpcIkludDE2XCJ9XSw0KS5tZW1iZXJzLFFpPU1hdGgucG93KDIsMTMpO2Z1bmN0aW9uIHRhKHQsZSxyLG4saSxhLG8scyl7dC5lbXBsYWNlQmFjayhlLHIsMipNYXRoLmZsb29yKG4qUWkpK28saSpRaSoyLGEqUWkqMixNYXRoLnJvdW5kKHMpKX12YXIgZWE9ZnVuY3Rpb24odCl7dGhpcy56b29tPXQuem9vbSx0aGlzLm92ZXJzY2FsaW5nPXQub3ZlcnNjYWxpbmcsdGhpcy5sYXllcnM9dC5sYXllcnMsdGhpcy5sYXllcklkcz10aGlzLmxheWVycy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheT1uZXcgS3IsdGhpcy5pbmRleEFycmF5PW5ldyBobix0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucz1uZXcgSW4oS2ksdC5sYXllcnMsdC56b29tKSx0aGlzLnNlZ21lbnRzPW5ldyBNbn07ZnVuY3Rpb24gcmEodCxlKXtyZXR1cm4gdC54PT09ZS54JiYodC54PDB8fHQueD5Qbil8fHQueT09PWUueSYmKHQueTwwfHx0Lnk+UG4pfWZ1bmN0aW9uIG5hKHQpe3JldHVybiB0LmV2ZXJ5KGZ1bmN0aW9uKHQpe3JldHVybiB0Lng8MH0pfHx0LmV2ZXJ5KGZ1bmN0aW9uKHQpe3JldHVybiB0Lng+UG59KXx8dC5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4gdC55PDB9KXx8dC5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4gdC55PlBufSl9ZWEucHJvdG90eXBlLnBvcHVsYXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj10O3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXSxhPWkuZmVhdHVyZSxvPWkuaW5kZXgscz1pLnNvdXJjZUxheWVySW5kZXg7aWYodGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIobmV3IExyKHRoaXMuem9vbSksYSkpe3ZhciBsPUZuKGEpO3RoaXMuYWRkRmVhdHVyZShhLGwpLGUuZmVhdHVyZUluZGV4Lmluc2VydChhLGwsbyxzLHRoaXMuaW5kZXgpfX19LGVhLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aH0sZWEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LEtpKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQodCl9LGVhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpKX0sZWEucHJvdG90eXBlLmFkZEZlYXR1cmU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPVdpKGUsNTAwKTtyPG4ubGVuZ3RoO3IrPTEpe2Zvcih2YXIgaT1uW3JdLGE9MCxvPTAscz1pO288cy5sZW5ndGg7bys9MSlhKz1zW29dLmxlbmd0aDtmb3IodmFyIGw9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5KSxjPTAsdT1pO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGg9dVtjXTtpZigwIT09aC5sZW5ndGgmJiFuYShoKSlmb3IodmFyIGY9MCxwPTA7cDxoLmxlbmd0aDtwKyspe3ZhciBkPWhbcF07aWYocD49MSl7dmFyIGc9aFtwLTFdO2lmKCFyYShkLGcpKXtsLnZlcnRleExlbmd0aCs0Pk1uLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIJiYobD10aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXkpKTt2YXIgdj1kLnN1YihnKS5fcGVycCgpLl91bml0KCksbT1nLmRpc3QoZCk7ZittPjMyNzY4JiYoZj0wKSx0YSh0aGlzLmxheW91dFZlcnRleEFycmF5LGQueCxkLnksdi54LHYueSwwLDAsZiksdGEodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxkLngsZC55LHYueCx2LnksMCwxLGYpLGYrPW0sdGEodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxnLngsZy55LHYueCx2LnksMCwwLGYpLHRhKHRoaXMubGF5b3V0VmVydGV4QXJyYXksZy54LGcueSx2Lngsdi55LDAsMSxmKTt2YXIgeT1sLnZlcnRleExlbmd0aDt0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soeSx5KzEseSsyKSx0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soeSsxLHkrMix5KzMpLGwudmVydGV4TGVuZ3RoKz00LGwucHJpbWl0aXZlTGVuZ3RoKz0yfX19fWwudmVydGV4TGVuZ3RoK2E+TW4uTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEgmJihsPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoYSx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheSkpO2Zvcih2YXIgeD1bXSxiPVtdLF89bC52ZXJ0ZXhMZW5ndGgsdz0wLGs9aTt3PGsubGVuZ3RoO3crPTEpe3ZhciBBPWtbd107aWYoMCE9PUEubGVuZ3RoKXtBIT09aVswXSYmYi5wdXNoKHgubGVuZ3RoLzIpO2Zvcih2YXIgVD0wO1Q8QS5sZW5ndGg7VCsrKXt2YXIgTT1BW1RdO3RhKHRoaXMubGF5b3V0VmVydGV4QXJyYXksTS54LE0ueSwwLDAsMSwxLDApLHgucHVzaChNLngpLHgucHVzaChNLnkpfX19Zm9yKHZhciBTPW1pKHgsYiksRT0wO0U8Uy5sZW5ndGg7RSs9Myl0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soXytTW0VdLF8rU1tFKzFdLF8rU1tFKzJdKTtsLnByaW1pdGl2ZUxlbmd0aCs9Uy5sZW5ndGgvMyxsLnZlcnRleExlbmd0aCs9YX10aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLHQpfSxwcihcIkZpbGxFeHRydXNpb25CdWNrZXRcIixlYSx7b21pdDpbXCJsYXllcnNcIl19KTt2YXIgaWE9e3BhaW50Om5ldyBxcih7XCJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5XCI6bmV3IE5yKElbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLW9wYWNpdHlcIl0pLFwiZmlsbC1leHRydXNpb24tY29sb3JcIjpuZXcganIoSVtcInBhaW50X2ZpbGwtZXh0cnVzaW9uXCJdW1wiZmlsbC1leHRydXNpb24tY29sb3JcIl0pLFwiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlXCI6bmV3IE5yKElbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZVwiXSksXCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yXCI6bmV3IE5yKElbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3JcIl0pLFwiZmlsbC1leHRydXNpb24tcGF0dGVyblwiOm5ldyBWcihJW1wicGFpbnRfZmlsbC1leHRydXNpb25cIl1bXCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuXCJdKSxcImZpbGwtZXh0cnVzaW9uLWhlaWdodFwiOm5ldyBqcihJW1wicGFpbnRfZmlsbC1leHRydXNpb25cIl1bXCJmaWxsLWV4dHJ1c2lvbi1oZWlnaHRcIl0pLFwiZmlsbC1leHRydXNpb24tYmFzZVwiOm5ldyBqcihJW1wicGFpbnRfZmlsbC1leHRydXNpb25cIl1bXCJmaWxsLWV4dHJ1c2lvbi1iYXNlXCJdKX0pfSxhYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsaWEpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5jcmVhdGVCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBlYSh0KX0sZS5wcm90b3R5cGUucXVlcnlSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gSm4odGhpcy5wYWludC5nZXQoXCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGVcIikpfSxlLnByb3RvdHlwZS5xdWVyeUludGVyc2VjdHNGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtyZXR1cm4gVm4oS24odCx0aGlzLnBhaW50LmdldChcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZVwiKSx0aGlzLnBhaW50LmdldChcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3JcIiksaS5hbmdsZSxhKSxyKX0sZS5wcm90b3R5cGUuaGFzT2Zmc2NyZWVuUGFzcz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5wYWludC5nZXQoXCJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5XCIpJiZcIm5vbmVcIiE9PXRoaXMudmlzaWJpbGl0eX0sZS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKCl7dGhpcy52aWV3cG9ydEZyYW1lJiYodGhpcy52aWV3cG9ydEZyYW1lLmRlc3Ryb3koKSx0aGlzLnZpZXdwb3J0RnJhbWU9bnVsbCl9LGV9KEhyKSxvYT1Ycihbe25hbWU6XCJhX3Bvc19ub3JtYWxcIixjb21wb25lbnRzOjQsdHlwZTpcIkludDE2XCJ9LHtuYW1lOlwiYV9kYXRhXCIsY29tcG9uZW50czo0LHR5cGU6XCJVaW50OFwifV0sNCkubWVtYmVycyxzYT1sYTtmdW5jdGlvbiBsYSh0LGUscixuLGkpe3RoaXMucHJvcGVydGllcz17fSx0aGlzLmV4dGVudD1yLHRoaXMudHlwZT0wLHRoaXMuX3BiZj10LHRoaXMuX2dlb21ldHJ5PS0xLHRoaXMuX2tleXM9bix0aGlzLl92YWx1ZXM9aSx0LnJlYWRGaWVsZHMoY2EsdGhpcyxlKX1mdW5jdGlvbiBjYSh0LGUscil7MT09dD9lLmlkPXIucmVhZFZhcmludCgpOjI9PXQ/ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5yZWFkVmFyaW50KCkrdC5wb3M7dC5wb3M8cjspe3ZhciBuPWUuX2tleXNbdC5yZWFkVmFyaW50KCldLGk9ZS5fdmFsdWVzW3QucmVhZFZhcmludCgpXTtlLnByb3BlcnRpZXNbbl09aX19KHIsZSk6Mz09dD9lLnR5cGU9ci5yZWFkVmFyaW50KCk6ND09dCYmKGUuX2dlb21ldHJ5PXIucG9zKX1mdW5jdGlvbiB1YSh0KXtmb3IodmFyIGUscixuPTAsaT0wLGE9dC5sZW5ndGgsbz1hLTE7aTxhO289aSsrKWU9dFtpXSxuKz0oKHI9dFtvXSkueC1lLngpKihlLnkrci55KTtyZXR1cm4gbn1sYS50eXBlcz1bXCJVbmtub3duXCIsXCJQb2ludFwiLFwiTGluZVN0cmluZ1wiLFwiUG9seWdvblwiXSxsYS5wcm90b3R5cGUubG9hZEdlb21ldHJ5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGJmO3QucG9zPXRoaXMuX2dlb21ldHJ5O2Zvcih2YXIgZSxyPXQucmVhZFZhcmludCgpK3QucG9zLG49MSxpPTAsYT0wLG89MCxzPVtdO3QucG9zPHI7KXtpZihpPD0wKXt2YXIgYz10LnJlYWRWYXJpbnQoKTtuPTcmYyxpPWM+PjN9aWYoaS0tLDE9PT1ufHwyPT09bilhKz10LnJlYWRTVmFyaW50KCksbys9dC5yZWFkU1ZhcmludCgpLDE9PT1uJiYoZSYmcy5wdXNoKGUpLGU9W10pLGUucHVzaChuZXcgbChhLG8pKTtlbHNle2lmKDchPT1uKXRocm93IG5ldyBFcnJvcihcInVua25vd24gY29tbWFuZCBcIituKTtlJiZlLnB1c2goZVswXS5jbG9uZSgpKX19cmV0dXJuIGUmJnMucHVzaChlKSxzfSxsYS5wcm90b3R5cGUuYmJveD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BiZjt0LnBvcz10aGlzLl9nZW9tZXRyeTtmb3IodmFyIGU9dC5yZWFkVmFyaW50KCkrdC5wb3Mscj0xLG49MCxpPTAsYT0wLG89MS8wLHM9LTEvMCxsPTEvMCxjPS0xLzA7dC5wb3M8ZTspe2lmKG48PTApe3ZhciB1PXQucmVhZFZhcmludCgpO3I9NyZ1LG49dT4+M31pZihuLS0sMT09PXJ8fDI9PT1yKShpKz10LnJlYWRTVmFyaW50KCkpPG8mJihvPWkpLGk+cyYmKHM9aSksKGErPXQucmVhZFNWYXJpbnQoKSk8bCYmKGw9YSksYT5jJiYoYz1hKTtlbHNlIGlmKDchPT1yKXRocm93IG5ldyBFcnJvcihcInVua25vd24gY29tbWFuZCBcIityKX1yZXR1cm5bbyxsLHMsY119LGxhLnByb3RvdHlwZS50b0dlb0pTT049ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT10aGlzLmV4dGVudCpNYXRoLnBvdygyLHIpLG89dGhpcy5leHRlbnQqdCxzPXRoaXMuZXh0ZW50KmUsbD10aGlzLmxvYWRHZW9tZXRyeSgpLGM9bGEudHlwZXNbdGhpcy50eXBlXTtmdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10W2VdLG49MTgwLTM2MCooci55K3MpL2E7dFtlXT1bMzYwKihyLngrbykvYS0xODAsMzYwL01hdGguUEkqTWF0aC5hdGFuKE1hdGguZXhwKG4qTWF0aC5QSS8xODApKS05MF19fXN3aXRjaCh0aGlzLnR5cGUpe2Nhc2UgMTp2YXIgaD1bXTtmb3Iobj0wO248bC5sZW5ndGg7bisrKWhbbl09bFtuXVswXTt1KGw9aCk7YnJlYWs7Y2FzZSAyOmZvcihuPTA7bjxsLmxlbmd0aDtuKyspdShsW25dKTticmVhaztjYXNlIDM6Zm9yKGw9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoZTw9MSlyZXR1cm5bdF07Zm9yKHZhciByLG4saT1bXSxhPTA7YTxlO2ErKyl7dmFyIG89dWEodFthXSk7MCE9PW8mJih2b2lkIDA9PT1uJiYobj1vPDApLG49PT1vPDA/KHImJmkucHVzaChyKSxyPVt0W2FdXSk6ci5wdXNoKHRbYV0pKX1yZXR1cm4gciYmaS5wdXNoKHIpLGl9KGwpLG49MDtuPGwubGVuZ3RoO24rKylmb3IoaT0wO2k8bFtuXS5sZW5ndGg7aSsrKXUobFtuXVtpXSl9MT09PWwubGVuZ3RoP2w9bFswXTpjPVwiTXVsdGlcIitjO3ZhciBmPXt0eXBlOlwiRmVhdHVyZVwiLGdlb21ldHJ5Ont0eXBlOmMsY29vcmRpbmF0ZXM6bH0scHJvcGVydGllczp0aGlzLnByb3BlcnRpZXN9O3JldHVyblwiaWRcImluIHRoaXMmJihmLmlkPXRoaXMuaWQpLGZ9O3ZhciBoYT1mYTtmdW5jdGlvbiBmYSh0LGUpe3RoaXMudmVyc2lvbj0xLHRoaXMubmFtZT1udWxsLHRoaXMuZXh0ZW50PTQwOTYsdGhpcy5sZW5ndGg9MCx0aGlzLl9wYmY9dCx0aGlzLl9rZXlzPVtdLHRoaXMuX3ZhbHVlcz1bXSx0aGlzLl9mZWF0dXJlcz1bXSx0LnJlYWRGaWVsZHMocGEsdGhpcyxlKSx0aGlzLmxlbmd0aD10aGlzLl9mZWF0dXJlcy5sZW5ndGh9ZnVuY3Rpb24gcGEodCxlLHIpezE1PT09dD9lLnZlcnNpb249ci5yZWFkVmFyaW50KCk6MT09PXQ/ZS5uYW1lPXIucmVhZFN0cmluZygpOjU9PT10P2UuZXh0ZW50PXIucmVhZFZhcmludCgpOjI9PT10P2UuX2ZlYXR1cmVzLnB1c2goci5wb3MpOjM9PT10P2UuX2tleXMucHVzaChyLnJlYWRTdHJpbmcoKSk6ND09PXQmJmUuX3ZhbHVlcy5wdXNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1udWxsLHI9dC5yZWFkVmFyaW50KCkrdC5wb3M7dC5wb3M8cjspe3ZhciBuPXQucmVhZFZhcmludCgpPj4zO2U9MT09PW4/dC5yZWFkU3RyaW5nKCk6Mj09PW4/dC5yZWFkRmxvYXQoKTozPT09bj90LnJlYWREb3VibGUoKTo0PT09bj90LnJlYWRWYXJpbnQ2NCgpOjU9PT1uP3QucmVhZFZhcmludCgpOjY9PT1uP3QucmVhZFNWYXJpbnQoKTo3PT09bj90LnJlYWRCb29sZWFuKCk6bnVsbH1yZXR1cm4gZX0ocikpfWZ1bmN0aW9uIGRhKHQsZSxyKXtpZigzPT09dCl7dmFyIG49bmV3IGhhKHIsci5yZWFkVmFyaW50KCkrci5wb3MpO24ubGVuZ3RoJiYoZVtuLm5hbWVdPW4pfX1mYS5wcm90b3R5cGUuZmVhdHVyZT1mdW5jdGlvbih0KXtpZih0PDB8fHQ+PXRoaXMuX2ZlYXR1cmVzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJmZWF0dXJlIGluZGV4IG91dCBvZiBib3VuZHNcIik7dGhpcy5fcGJmLnBvcz10aGlzLl9mZWF0dXJlc1t0XTt2YXIgZT10aGlzLl9wYmYucmVhZFZhcmludCgpK3RoaXMuX3BiZi5wb3M7cmV0dXJuIG5ldyBzYSh0aGlzLl9wYmYsZSx0aGlzLmV4dGVudCx0aGlzLl9rZXlzLHRoaXMuX3ZhbHVlcyl9O3ZhciBnYT17VmVjdG9yVGlsZTpmdW5jdGlvbih0LGUpe3RoaXMubGF5ZXJzPXQucmVhZEZpZWxkcyhkYSx7fSxlKX0sVmVjdG9yVGlsZUZlYXR1cmU6c2EsVmVjdG9yVGlsZUxheWVyOmhhfSx2YT1nYS5WZWN0b3JUaWxlRmVhdHVyZS50eXBlcyxtYT02Myx5YT1NYXRoLmNvcyhNYXRoLlBJLzE4MCozNy41KSx4YT0uNSxiYT1NYXRoLnBvdygyLDE0KS94YTtmdW5jdGlvbiBfYSh0LGUscixuLGksYSxvKXt0LmVtcGxhY2VCYWNrKGUueCxlLnksbj8xOjAsaT8xOi0xLE1hdGgucm91bmQobWEqci54KSsxMjgsTWF0aC5yb3VuZChtYSpyLnkpKzEyOCwxKygwPT09YT8wOmE8MD8tMToxKXwobyp4YSY2Myk8PDIsbyp4YT4+Nil9dmFyIHdhPWZ1bmN0aW9uKHQpe3RoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXJzPXQubGF5ZXJzLHRoaXMubGF5ZXJJZHM9dGhpcy5sYXllcnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSksdGhpcy5pbmRleD10LmluZGV4LHRoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IFFyLHRoaXMuaW5kZXhBcnJheT1uZXcgaG4sdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9bmV3IEluKG9hLHQubGF5ZXJzLHQuem9vbSksdGhpcy5zZWdtZW50cz1uZXcgTW59O2Z1bmN0aW9uIGthKHQsZSl7cmV0dXJuKHQvZS50aWxlVG90YWwqKGUuZW5kLWUuc3RhcnQpK2Uuc3RhcnQpKihiYS0xKX13YS5wcm90b3R5cGUucG9wdWxhdGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPXQ7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdLGE9aS5mZWF0dXJlLG89aS5pbmRleCxzPWkuc291cmNlTGF5ZXJJbmRleDtpZih0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlcihuZXcgTHIodGhpcy56b29tKSxhKSl7dmFyIGw9Rm4oYSk7dGhpcy5hZGRGZWF0dXJlKGEsbCksZS5mZWF0dXJlSW5kZXguaW5zZXJ0KGEsbCxvLHMsdGhpcy5pbmRleCl9fX0sd2EucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RofSx3YS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksb2EpLHRoaXMuaW5kZXhCdWZmZXI9dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZCh0KX0sd2EucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlciYmKHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCksdGhpcy5zZWdtZW50cy5kZXN0cm95KCkpfSx3YS5wcm90b3R5cGUuYWRkRmVhdHVyZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLmxheWVyc1swXS5sYXlvdXQsbj1yLmdldChcImxpbmUtam9pblwiKS5ldmFsdWF0ZSh0KSxpPXIuZ2V0KFwibGluZS1jYXBcIiksYT1yLmdldChcImxpbmUtbWl0ZXItbGltaXRcIiksbz1yLmdldChcImxpbmUtcm91bmQtbGltaXRcIikscz0wLGw9ZTtzPGwubGVuZ3RoO3MrPTEpe3ZhciBjPWxbc107dGhpcy5hZGRMaW5lKGMsdCxuLGksYSxvKX19LHdhLnByb3RvdHlwZS5hZGRMaW5lPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1udWxsO2UucHJvcGVydGllcyYmZS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KFwibWFwYm94X2NsaXBfc3RhcnRcIikmJmUucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShcIm1hcGJveF9jbGlwX2VuZFwiKSYmKG89e3N0YXJ0OmUucHJvcGVydGllcy5tYXBib3hfY2xpcF9zdGFydCxlbmQ6ZS5wcm9wZXJ0aWVzLm1hcGJveF9jbGlwX2VuZCx0aWxlVG90YWw6dm9pZCAwfSk7Zm9yKHZhciBzPVwiUG9seWdvblwiPT09dmFbZS50eXBlXSxsPXQubGVuZ3RoO2w+PTImJnRbbC0xXS5lcXVhbHModFtsLTJdKTspbC0tO2Zvcih2YXIgYz0wO2M8bC0xJiZ0W2NdLmVxdWFscyh0W2MrMV0pOyljKys7aWYoIShsPChzPzM6MikpKXtvJiYoby50aWxlVG90YWw9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpLGE9MCxvPWM7bzxyLTE7bysrKW49dFtvXSxpPXRbbysxXSxhKz1uLmRpc3QoaSk7cmV0dXJuIGF9KHQsMCxsKSksXCJiZXZlbFwiPT09ciYmKGk9MS4wNSk7dmFyIHU9UG4vKDUxMip0aGlzLm92ZXJzY2FsaW5nKSoxNSxoPXRbY10sZj10aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDEwKmwsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXkpO3RoaXMuZGlzdGFuY2U9MDt2YXIgcCxkLGcsdj1uLG09cz9cImJ1dHRcIjpuLHk9ITAseD12b2lkIDAsYj12b2lkIDAsXz12b2lkIDAsdz12b2lkIDA7dGhpcy5lMT10aGlzLmUyPXRoaXMuZTM9LTEscyYmKHA9dFtsLTJdLHc9aC5zdWIocCkuX3VuaXQoKS5fcGVycCgpKTtmb3IodmFyIGs9YztrPGw7aysrKWlmKCEoYj1zJiZrPT09bC0xP3RbYysxXTp0W2srMV0pfHwhdFtrXS5lcXVhbHMoYikpe3cmJihfPXcpLHAmJih4PXApLHA9dFtrXSx3PWI/Yi5zdWIocCkuX3VuaXQoKS5fcGVycCgpOl87dmFyIEE9KF89X3x8dykuYWRkKHcpOzA9PT1BLngmJjA9PT1BLnl8fEEuX3VuaXQoKTt2YXIgVD1BLngqdy54K0EueSp3LnksTT0wIT09VD8xL1Q6MS8wLFM9VDx5YSYmeCYmYjtpZihTJiZrPmMpe3ZhciBFPXAuZGlzdCh4KTtpZihFPjIqdSl7dmFyIEM9cC5zdWIocC5zdWIoeCkuX211bHQodS9FKS5fcm91bmQoKSk7dGhpcy5kaXN0YW5jZSs9Qy5kaXN0KHgpLHRoaXMuYWRkQ3VycmVudFZlcnRleChDLHRoaXMuZGlzdGFuY2UsXy5tdWx0KDEpLDAsMCwhMSxmLG8pLHg9Q319dmFyIEw9eCYmYix6PUw/cjpiP3Y6bTtpZihMJiZcInJvdW5kXCI9PT16JiYoTTxhP3o9XCJtaXRlclwiOk08PTImJih6PVwiZmFrZXJvdW5kXCIpKSxcIm1pdGVyXCI9PT16JiZNPmkmJih6PVwiYmV2ZWxcIiksXCJiZXZlbFwiPT09eiYmKE0+MiYmKHo9XCJmbGlwYmV2ZWxcIiksTTxpJiYoej1cIm1pdGVyXCIpKSx4JiYodGhpcy5kaXN0YW5jZSs9cC5kaXN0KHgpKSxcIm1pdGVyXCI9PT16KUEuX211bHQoTSksdGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSxBLDAsMCwhMSxmLG8pO2Vsc2UgaWYoXCJmbGlwYmV2ZWxcIj09PXope2lmKE0+MTAwKUE9dy5jbG9uZSgpLm11bHQoLTEpO2Vsc2V7dmFyIE89Xy54KncueS1fLnkqdy54PjA/LTE6MSxJPU0qXy5hZGQodykubWFnKCkvXy5zdWIodykubWFnKCk7QS5fcGVycCgpLl9tdWx0KEkqTyl9dGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSxBLDAsMCwhMSxmLG8pLHRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsQS5tdWx0KC0xKSwwLDAsITEsZixvKX1lbHNlIGlmKFwiYmV2ZWxcIj09PXp8fFwiZmFrZXJvdW5kXCI9PT16KXt2YXIgRD1fLngqdy55LV8ueSp3Lng+MCxQPS1NYXRoLnNxcnQoTSpNLTEpO2lmKEQ/KGc9MCxkPVApOihkPTAsZz1QKSx5fHx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLF8sZCxnLCExLGYsbyksXCJmYWtlcm91bmRcIj09PXope2Zvcih2YXIgUj1NYXRoLmZsb29yKDgqKC41LShULS41KSkpLEY9dm9pZCAwLEI9MDtCPFI7QisrKUY9dy5tdWx0KChCKzEpLyhSKzEpKS5fYWRkKF8pLl91bml0KCksdGhpcy5hZGRQaWVTbGljZVZlcnRleChwLHRoaXMuZGlzdGFuY2UsRixELGYsbyk7dGhpcy5hZGRQaWVTbGljZVZlcnRleChwLHRoaXMuZGlzdGFuY2UsQSxELGYsbyk7Zm9yKHZhciBOPVItMTtOPj0wO04tLSlGPV8ubXVsdCgoTisxKS8oUisxKSkuX2FkZCh3KS5fdW5pdCgpLHRoaXMuYWRkUGllU2xpY2VWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLEYsRCxmLG8pfWImJnRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsdywtZCwtZywhMSxmLG8pfWVsc2VcImJ1dHRcIj09PXo/KHl8fHRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsXywwLDAsITEsZixvKSxiJiZ0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLHcsMCwwLCExLGYsbykpOlwic3F1YXJlXCI9PT16Pyh5fHwodGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSxfLDEsMSwhMSxmLG8pLHRoaXMuZTE9dGhpcy5lMj0tMSksYiYmdGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSx3LC0xLC0xLCExLGYsbykpOlwicm91bmRcIj09PXomJih5fHwodGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSxfLDAsMCwhMSxmLG8pLHRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsXywxLDEsITAsZixvKSx0aGlzLmUxPXRoaXMuZTI9LTEpLGImJih0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLHcsLTEsLTEsITAsZixvKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLHcsMCwwLCExLGYsbykpKTtpZihTJiZrPGwtMSl7dmFyIGo9cC5kaXN0KGIpO2lmKGo+Mip1KXt2YXIgVj1wLmFkZChiLnN1YihwKS5fbXVsdCh1L2opLl9yb3VuZCgpKTt0aGlzLmRpc3RhbmNlKz1WLmRpc3QocCksdGhpcy5hZGRDdXJyZW50VmVydGV4KFYsdGhpcy5kaXN0YW5jZSx3Lm11bHQoMSksMCwwLCExLGYsbykscD1WfX15PSExfXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsZSl9fSx3YS5wcm90b3R5cGUuYWRkQ3VycmVudFZlcnRleD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3ZhciBsLGM9dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx1PXRoaXMuaW5kZXhBcnJheTtzJiYoZT1rYShlLHMpKSxsPXIuY2xvbmUoKSxuJiZsLl9zdWIoci5wZXJwKCkuX211bHQobikpLF9hKGMsdCxsLGEsITEsbixlKSx0aGlzLmUzPW8udmVydGV4TGVuZ3RoKyssdGhpcy5lMT49MCYmdGhpcy5lMj49MCYmKHUuZW1wbGFjZUJhY2sodGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMpLG8ucHJpbWl0aXZlTGVuZ3RoKyspLHRoaXMuZTE9dGhpcy5lMix0aGlzLmUyPXRoaXMuZTMsbD1yLm11bHQoLTEpLGkmJmwuX3N1YihyLnBlcnAoKS5fbXVsdChpKSksX2EoYyx0LGwsYSwhMCwtaSxlKSx0aGlzLmUzPW8udmVydGV4TGVuZ3RoKyssdGhpcy5lMT49MCYmdGhpcy5lMj49MCYmKHUuZW1wbGFjZUJhY2sodGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMpLG8ucHJpbWl0aXZlTGVuZ3RoKyspLHRoaXMuZTE9dGhpcy5lMix0aGlzLmUyPXRoaXMuZTMsZT5iYS8yJiYhcyYmKHRoaXMuZGlzdGFuY2U9MCx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodCx0aGlzLmRpc3RhbmNlLHIsbixpLGEsbykpfSx3YS5wcm90b3R5cGUuYWRkUGllU2xpY2VWZXJ0ZXg9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3I9ci5tdWx0KG4/LTE6MSk7dmFyIG89dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxzPXRoaXMuaW5kZXhBcnJheTthJiYoZT1rYShlLGEpKSxfYShvLHQsciwhMSxuLDAsZSksdGhpcy5lMz1pLnZlcnRleExlbmd0aCsrLHRoaXMuZTE+PTAmJnRoaXMuZTI+PTAmJihzLmVtcGxhY2VCYWNrKHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzKSxpLnByaW1pdGl2ZUxlbmd0aCsrKSxuP3RoaXMuZTI9dGhpcy5lMzp0aGlzLmUxPXRoaXMuZTN9LHByKFwiTGluZUJ1Y2tldFwiLHdhLHtvbWl0OltcImxheWVyc1wiXX0pO3ZhciBBYT1uZXcgcXIoe1wibGluZS1jYXBcIjpuZXcgTnIoSS5sYXlvdXRfbGluZVtcImxpbmUtY2FwXCJdKSxcImxpbmUtam9pblwiOm5ldyBqcihJLmxheW91dF9saW5lW1wibGluZS1qb2luXCJdKSxcImxpbmUtbWl0ZXItbGltaXRcIjpuZXcgTnIoSS5sYXlvdXRfbGluZVtcImxpbmUtbWl0ZXItbGltaXRcIl0pLFwibGluZS1yb3VuZC1saW1pdFwiOm5ldyBOcihJLmxheW91dF9saW5lW1wibGluZS1yb3VuZC1saW1pdFwiXSl9KSxUYT17cGFpbnQ6bmV3IHFyKHtcImxpbmUtb3BhY2l0eVwiOm5ldyBqcihJLnBhaW50X2xpbmVbXCJsaW5lLW9wYWNpdHlcIl0pLFwibGluZS1jb2xvclwiOm5ldyBqcihJLnBhaW50X2xpbmVbXCJsaW5lLWNvbG9yXCJdKSxcImxpbmUtdHJhbnNsYXRlXCI6bmV3IE5yKEkucGFpbnRfbGluZVtcImxpbmUtdHJhbnNsYXRlXCJdKSxcImxpbmUtdHJhbnNsYXRlLWFuY2hvclwiOm5ldyBOcihJLnBhaW50X2xpbmVbXCJsaW5lLXRyYW5zbGF0ZS1hbmNob3JcIl0pLFwibGluZS13aWR0aFwiOm5ldyBqcihJLnBhaW50X2xpbmVbXCJsaW5lLXdpZHRoXCJdKSxcImxpbmUtZ2FwLXdpZHRoXCI6bmV3IGpyKEkucGFpbnRfbGluZVtcImxpbmUtZ2FwLXdpZHRoXCJdKSxcImxpbmUtb2Zmc2V0XCI6bmV3IGpyKEkucGFpbnRfbGluZVtcImxpbmUtb2Zmc2V0XCJdKSxcImxpbmUtYmx1clwiOm5ldyBqcihJLnBhaW50X2xpbmVbXCJsaW5lLWJsdXJcIl0pLFwibGluZS1kYXNoYXJyYXlcIjpuZXcgVnIoSS5wYWludF9saW5lW1wibGluZS1kYXNoYXJyYXlcIl0pLFwibGluZS1wYXR0ZXJuXCI6bmV3IFZyKEkucGFpbnRfbGluZVtcImxpbmUtcGF0dGVyblwiXSksXCJsaW5lLWdyYWRpZW50XCI6bmV3IFVyKEkucGFpbnRfbGluZVtcImxpbmUtZ3JhZGllbnRcIl0pfSksbGF5b3V0OkFhfSxNYT1uZXcoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKGUscil7cmV0dXJuIHI9bmV3IExyKE1hdGguZmxvb3Ioci56b29tKSx7bm93OnIubm93LGZhZGVEdXJhdGlvbjpyLmZhZGVEdXJhdGlvbix6b29tSGlzdG9yeTpyLnpvb21IaXN0b3J5LHRyYW5zaXRpb246ci50cmFuc2l0aW9ufSksdC5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZS5jYWxsKHRoaXMsZSxyKX0sZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiByPXAoe30scix7em9vbTpNYXRoLmZsb29yKHIuem9vbSl9KSx0LnByb3RvdHlwZS5ldmFsdWF0ZS5jYWxsKHRoaXMsZSxyLG4pfSxlfShqcikpKFRhLnBhaW50LnByb3BlcnRpZXNbXCJsaW5lLXdpZHRoXCJdLnNwZWNpZmljYXRpb24pO01hLnVzZUludGVnZXJab29tPSEwO3ZhciBTYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsVGEpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5zZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKGUscixuKXt0LnByb3RvdHlwZS5zZXRQYWludFByb3BlcnR5LmNhbGwodGhpcyxlLHIsbiksXCJsaW5lLWdyYWRpZW50XCI9PT1lJiZ0aGlzLl91cGRhdGVHcmFkaWVudCgpfSxlLnByb3RvdHlwZS5fdXBkYXRlR3JhZGllbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbXCJsaW5lLWdyYWRpZW50XCJdLnZhbHVlLmV4cHJlc3Npb247dGhpcy5ncmFkaWVudD1maSh0LFwibGluZVByb2dyZXNzXCIpLHRoaXMuZ3JhZGllbnRUZXh0dXJlPW51bGx9LGUucHJvdG90eXBlLnJlY2FsY3VsYXRlPWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLnJlY2FsY3VsYXRlLmNhbGwodGhpcyxlKSx0aGlzLnBhaW50Ll92YWx1ZXNbXCJsaW5lLWZsb29yd2lkdGhcIl09TWEucG9zc2libHlFdmFsdWF0ZSh0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQuX3ZhbHVlc1tcImxpbmUtd2lkdGhcIl0udmFsdWUsZSl9LGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHdhKHQpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbih0KXt2YXIgZT10LHI9RWEoJG4oXCJsaW5lLXdpZHRoXCIsdGhpcyxlKSwkbihcImxpbmUtZ2FwLXdpZHRoXCIsdGhpcyxlKSksbj0kbihcImxpbmUtb2Zmc2V0XCIsdGhpcyxlKTtyZXR1cm4gci8yK01hdGguYWJzKG4pK0puKHRoaXMucGFpbnQuZ2V0KFwibGluZS10cmFuc2xhdGVcIikpfSxlLnByb3RvdHlwZS5xdWVyeUludGVyc2VjdHNGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1Lbih0LHRoaXMucGFpbnQuZ2V0KFwibGluZS10cmFuc2xhdGVcIiksdGhpcy5wYWludC5nZXQoXCJsaW5lLXRyYW5zbGF0ZS1hbmNob3JcIiksaS5hbmdsZSxhKSxzPWEvMipFYSh0aGlzLnBhaW50LmdldChcImxpbmUtd2lkdGhcIikuZXZhbHVhdGUoZSksdGhpcy5wYWludC5nZXQoXCJsaW5lLWdhcC13aWR0aFwiKS5ldmFsdWF0ZShlKSksYz10aGlzLnBhaW50LmdldChcImxpbmUtb2Zmc2V0XCIpLmV2YWx1YXRlKGUpO3JldHVybiBjJiYocj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPW5ldyBsKDAsMCksaT0wO2k8dC5sZW5ndGg7aSsrKXtmb3IodmFyIGE9dFtpXSxvPVtdLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGM9YVtzLTFdLHU9YVtzXSxoPWFbcysxXSxmPTA9PT1zP246dS5zdWIoYykuX3VuaXQoKS5fcGVycCgpLHA9cz09PWEubGVuZ3RoLTE/bjpoLnN1Yih1KS5fdW5pdCgpLl9wZXJwKCksZD1mLl9hZGQocCkuX3VuaXQoKSxnPWQueCpwLngrZC55KnAueTtkLl9tdWx0KDEvZyksby5wdXNoKGQuX211bHQoZSkuX2FkZCh1KSl9ci5wdXNoKG8pfXJldHVybiByfShyLGMqYSkpLFVuKG8scixzKX0sZX0oSHIpO2Z1bmN0aW9uIEVhKHQsZSl7cmV0dXJuIGU+MD9lKzIqdDp0fXZhciBDYT1Ycihbe25hbWU6XCJhX3Bvc19vZmZzZXRcIixjb21wb25lbnRzOjQsdHlwZTpcIkludDE2XCJ9LHtuYW1lOlwiYV9kYXRhXCIsY29tcG9uZW50czo0LHR5cGU6XCJVaW50MTZcIn1dKSxMYT1Ycihbe25hbWU6XCJhX3Byb2plY3RlZF9wb3NcIixjb21wb25lbnRzOjMsdHlwZTpcIkZsb2F0MzJcIn1dLDQpLHphPShYcihbe25hbWU6XCJhX2ZhZGVfb3BhY2l0eVwiLGNvbXBvbmVudHM6MSx0eXBlOlwiVWludDMyXCJ9XSw0KSxYcihbe25hbWU6XCJhX3BsYWNlZFwiLGNvbXBvbmVudHM6Mix0eXBlOlwiVWludDhcIn1dLDQpKSxPYT0oWHIoW3t0eXBlOlwiSW50MTZcIixuYW1lOlwiYW5jaG9yUG9pbnRYXCJ9LHt0eXBlOlwiSW50MTZcIixuYW1lOlwiYW5jaG9yUG9pbnRZXCJ9LHt0eXBlOlwiSW50MTZcIixuYW1lOlwieDFcIn0se3R5cGU6XCJJbnQxNlwiLG5hbWU6XCJ5MVwifSx7dHlwZTpcIkludDE2XCIsbmFtZTpcIngyXCJ9LHt0eXBlOlwiSW50MTZcIixuYW1lOlwieTJcIn0se3R5cGU6XCJVaW50MzJcIixuYW1lOlwiZmVhdHVyZUluZGV4XCJ9LHt0eXBlOlwiVWludDE2XCIsbmFtZTpcInNvdXJjZUxheWVySW5kZXhcIn0se3R5cGU6XCJVaW50MTZcIixuYW1lOlwiYnVja2V0SW5kZXhcIn0se3R5cGU6XCJJbnQxNlwiLG5hbWU6XCJyYWRpdXNcIn0se3R5cGU6XCJJbnQxNlwiLG5hbWU6XCJzaWduZWREaXN0YW5jZUZyb21BbmNob3JcIn1dKSxYcihbe25hbWU6XCJhX3Bvc1wiLGNvbXBvbmVudHM6Mix0eXBlOlwiSW50MTZcIn0se25hbWU6XCJhX2FuY2hvcl9wb3NcIixjb21wb25lbnRzOjIsdHlwZTpcIkludDE2XCJ9LHtuYW1lOlwiYV9leHRydWRlXCIsY29tcG9uZW50czoyLHR5cGU6XCJJbnQxNlwifV0sNCkpLElhPVhyKFt7bmFtZTpcImFfcG9zXCIsY29tcG9uZW50czoyLHR5cGU6XCJJbnQxNlwifSx7bmFtZTpcImFfYW5jaG9yX3Bvc1wiLGNvbXBvbmVudHM6Mix0eXBlOlwiSW50MTZcIn0se25hbWU6XCJhX2V4dHJ1ZGVcIixjb21wb25lbnRzOjIsdHlwZTpcIkludDE2XCJ9XSw0KTtmdW5jdGlvbiBEYSh0LGUscil7dmFyIG49ZS5sYXlvdXQuZ2V0KFwidGV4dC10cmFuc2Zvcm1cIikuZXZhbHVhdGUocik7cmV0dXJuXCJ1cHBlcmNhc2VcIj09PW4/dD10LnRvTG9jYWxlVXBwZXJDYXNlKCk6XCJsb3dlcmNhc2VcIj09PW4mJih0PXQudG9Mb2NhbGVMb3dlckNhc2UoKSksQ3IuYXBwbHlBcmFiaWNTaGFwaW5nJiYodD1Dci5hcHBseUFyYWJpY1NoYXBpbmcodCkpLHR9WHIoW3t0eXBlOlwiSW50MTZcIixuYW1lOlwiYW5jaG9yWFwifSx7dHlwZTpcIkludDE2XCIsbmFtZTpcImFuY2hvcllcIn0se3R5cGU6XCJVaW50MTZcIixuYW1lOlwiZ2x5cGhTdGFydEluZGV4XCJ9LHt0eXBlOlwiVWludDE2XCIsbmFtZTpcIm51bUdseXBoc1wifSx7dHlwZTpcIlVpbnQzMlwiLG5hbWU6XCJ2ZXJ0ZXhTdGFydEluZGV4XCJ9LHt0eXBlOlwiVWludDMyXCIsbmFtZTpcImxpbmVTdGFydEluZGV4XCJ9LHt0eXBlOlwiVWludDMyXCIsbmFtZTpcImxpbmVMZW5ndGhcIn0se3R5cGU6XCJVaW50MTZcIixuYW1lOlwic2VnbWVudFwifSx7dHlwZTpcIlVpbnQxNlwiLG5hbWU6XCJsb3dlclNpemVcIn0se3R5cGU6XCJVaW50MTZcIixuYW1lOlwidXBwZXJTaXplXCJ9LHt0eXBlOlwiRmxvYXQzMlwiLG5hbWU6XCJsaW5lT2Zmc2V0WFwifSx7dHlwZTpcIkZsb2F0MzJcIixuYW1lOlwibGluZU9mZnNldFlcIn0se3R5cGU6XCJVaW50OFwiLG5hbWU6XCJ3cml0aW5nTW9kZVwifSx7dHlwZTpcIlVpbnQ4XCIsbmFtZTpcImhpZGRlblwifV0pLFhyKFt7dHlwZTpcIkZsb2F0MzJcIixuYW1lOlwib2Zmc2V0WFwifV0pLFhyKFt7dHlwZTpcIkludDE2XCIsbmFtZTpcInhcIn0se3R5cGU6XCJJbnQxNlwiLG5hbWU6XCJ5XCJ9LHt0eXBlOlwiSW50MTZcIixuYW1lOlwidGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3JcIn1dKTt2YXIgUGE9e1wiIVwiOlwiXFx1ZmUxNVwiLFwiI1wiOlwiXFx1ZmYwM1wiLCQ6XCJcXHVmZjA0XCIsXCIlXCI6XCJcXHVmZjA1XCIsXCImXCI6XCJcXHVmZjA2XCIsXCIoXCI6XCJcXHVmZTM1XCIsXCIpXCI6XCJcXHVmZTM2XCIsXCIqXCI6XCJcXHVmZjBhXCIsXCIrXCI6XCJcXHVmZjBiXCIsXCIsXCI6XCJcXHVmZTEwXCIsXCItXCI6XCJcXHVmZTMyXCIsXCIuXCI6XCJcXHUzMGZiXCIsXCIvXCI6XCJcXHVmZjBmXCIsXCI6XCI6XCJcXHVmZTEzXCIsXCI7XCI6XCJcXHVmZTE0XCIsXCI8XCI6XCJcXHVmZTNmXCIsXCI9XCI6XCJcXHVmZjFkXCIsXCI+XCI6XCJcXHVmZTQwXCIsXCI/XCI6XCJcXHVmZTE2XCIsXCJAXCI6XCJcXHVmZjIwXCIsXCJbXCI6XCJcXHVmZTQ3XCIsXCJcXFxcXCI6XCJcXHVmZjNjXCIsXCJdXCI6XCJcXHVmZTQ4XCIsXCJeXCI6XCJcXHVmZjNlXCIsXzpcIlxcdWZlMzNcIixcImBcIjpcIlxcdWZmNDBcIixcIntcIjpcIlxcdWZlMzdcIixcInxcIjpcIlxcdTIwMTVcIixcIn1cIjpcIlxcdWZlMzhcIixcIn5cIjpcIlxcdWZmNWVcIixcIlxceGEyXCI6XCJcXHVmZmUwXCIsXCJcXHhhM1wiOlwiXFx1ZmZlMVwiLFwiXFx4YTVcIjpcIlxcdWZmZTVcIixcIlxceGE2XCI6XCJcXHVmZmU0XCIsXCJcXHhhY1wiOlwiXFx1ZmZlMlwiLFwiXFx4YWZcIjpcIlxcdWZmZTNcIixcIlxcdTIwMTNcIjpcIlxcdWZlMzJcIixcIlxcdTIwMTRcIjpcIlxcdWZlMzFcIixcIlxcdTIwMThcIjpcIlxcdWZlNDNcIixcIlxcdTIwMTlcIjpcIlxcdWZlNDRcIixcIlxcdTIwMWNcIjpcIlxcdWZlNDFcIixcIlxcdTIwMWRcIjpcIlxcdWZlNDJcIixcIlxcdTIwMjZcIjpcIlxcdWZlMTlcIixcIlxcdTIwMjdcIjpcIlxcdTMwZmJcIixcIlxcdTIwYTlcIjpcIlxcdWZmZTZcIixcIlxcdTMwMDFcIjpcIlxcdWZlMTFcIixcIlxcdTMwMDJcIjpcIlxcdWZlMTJcIixcIlxcdTMwMDhcIjpcIlxcdWZlM2ZcIixcIlxcdTMwMDlcIjpcIlxcdWZlNDBcIixcIlxcdTMwMGFcIjpcIlxcdWZlM2RcIixcIlxcdTMwMGJcIjpcIlxcdWZlM2VcIixcIlxcdTMwMGNcIjpcIlxcdWZlNDFcIixcIlxcdTMwMGRcIjpcIlxcdWZlNDJcIixcIlxcdTMwMGVcIjpcIlxcdWZlNDNcIixcIlxcdTMwMGZcIjpcIlxcdWZlNDRcIixcIlxcdTMwMTBcIjpcIlxcdWZlM2JcIixcIlxcdTMwMTFcIjpcIlxcdWZlM2NcIixcIlxcdTMwMTRcIjpcIlxcdWZlMzlcIixcIlxcdTMwMTVcIjpcIlxcdWZlM2FcIixcIlxcdTMwMTZcIjpcIlxcdWZlMTdcIixcIlxcdTMwMTdcIjpcIlxcdWZlMThcIixcIlxcdWZmMDFcIjpcIlxcdWZlMTVcIixcIlxcdWZmMDhcIjpcIlxcdWZlMzVcIixcIlxcdWZmMDlcIjpcIlxcdWZlMzZcIixcIlxcdWZmMGNcIjpcIlxcdWZlMTBcIixcIlxcdWZmMGRcIjpcIlxcdWZlMzJcIixcIlxcdWZmMGVcIjpcIlxcdTMwZmJcIixcIlxcdWZmMWFcIjpcIlxcdWZlMTNcIixcIlxcdWZmMWJcIjpcIlxcdWZlMTRcIixcIlxcdWZmMWNcIjpcIlxcdWZlM2ZcIixcIlxcdWZmMWVcIjpcIlxcdWZlNDBcIixcIlxcdWZmMWZcIjpcIlxcdWZlMTZcIixcIlxcdWZmM2JcIjpcIlxcdWZlNDdcIixcIlxcdWZmM2RcIjpcIlxcdWZlNDhcIixcIlxcdWZmM2ZcIjpcIlxcdWZlMzNcIixcIlxcdWZmNWJcIjpcIlxcdWZlMzdcIixcIlxcdWZmNWNcIjpcIlxcdTIwMTVcIixcIlxcdWZmNWRcIjpcIlxcdWZlMzhcIixcIlxcdWZmNWZcIjpcIlxcdWZlMzVcIixcIlxcdWZmNjBcIjpcIlxcdWZlMzZcIixcIlxcdWZmNjFcIjpcIlxcdWZlMTJcIixcIlxcdWZmNjJcIjpcIlxcdWZlNDFcIixcIlxcdWZmNjNcIjpcIlxcdWZlNDJcIn0sUmE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIsbixpKXt0LmNhbGwodGhpcyxlLHIpLHRoaXMuYW5nbGU9bix2b2lkIDAhPT1pJiYodGhpcy5zZWdtZW50PWkpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZSh0aGlzLngsdGhpcy55LHRoaXMuYW5nbGUsdGhpcy5zZWdtZW50KX0sZX0obCk7ZnVuY3Rpb24gRmEodCxlKXt2YXIgcj1lLmV4cHJlc3Npb247aWYoXCJjb25zdGFudFwiPT09ci5raW5kKXJldHVybntmdW5jdGlvblR5cGU6XCJjb25zdGFudFwiLGxheW91dFNpemU6ci5ldmFsdWF0ZShuZXcgTHIodCsxKSl9O2lmKFwic291cmNlXCI9PT1yLmtpbmQpcmV0dXJue2Z1bmN0aW9uVHlwZTpcInNvdXJjZVwifTtmb3IodmFyIG49ci56b29tU3RvcHMsaT0wO2k8bi5sZW5ndGgmJm5baV08PXQ7KWkrKztmb3IodmFyIGE9aT1NYXRoLm1heCgwLGktMSk7YTxuLmxlbmd0aCYmblthXTx0KzE7KWErKzthPU1hdGgubWluKG4ubGVuZ3RoLTEsYSk7dmFyIG89e21pbjpuW2ldLG1heDpuW2FdfTtyZXR1cm5cImNvbXBvc2l0ZVwiPT09ci5raW5kP3tmdW5jdGlvblR5cGU6XCJjb21wb3NpdGVcIix6b29tUmFuZ2U6byxwcm9wZXJ0eVZhbHVlOmUudmFsdWV9OntmdW5jdGlvblR5cGU6XCJjYW1lcmFcIixsYXlvdXRTaXplOnIuZXZhbHVhdGUobmV3IExyKHQrMSkpLHpvb21SYW5nZTpvLHNpemVSYW5nZTp7bWluOnIuZXZhbHVhdGUobmV3IExyKG8ubWluKSksbWF4OnIuZXZhbHVhdGUobmV3IExyKG8ubWF4KSl9LHByb3BlcnR5VmFsdWU6ZS52YWx1ZX19cHIoXCJBbmNob3JcIixSYSk7dmFyIEJhPWdhLlZlY3RvclRpbGVGZWF0dXJlLnR5cGVzLE5hPVt7bmFtZTpcImFfZmFkZV9vcGFjaXR5XCIsY29tcG9uZW50czoxLHR5cGU6XCJVaW50OFwiLG9mZnNldDowfV07ZnVuY3Rpb24gamEodCxlLHIsbixpLGEsbyxzKXt0LmVtcGxhY2VCYWNrKGUscixNYXRoLnJvdW5kKDMyKm4pLE1hdGgucm91bmQoMzIqaSksYSxvLHM/c1swXTowLHM/c1sxXTowKX1mdW5jdGlvbiBWYSh0LGUscil7dC5lbXBsYWNlQmFjayhlLngsZS55LHIpLHQuZW1wbGFjZUJhY2soZS54LGUueSxyKSx0LmVtcGxhY2VCYWNrKGUueCxlLnksciksdC5lbXBsYWNlQmFjayhlLngsZS55LHIpfXZhciBVYT1mdW5jdGlvbih0KXt0aGlzLmxheW91dFZlcnRleEFycmF5PW5ldyB0bix0aGlzLmluZGV4QXJyYXk9bmV3IGhuLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zPXQsdGhpcy5zZWdtZW50cz1uZXcgTW4sdGhpcy5keW5hbWljTGF5b3V0VmVydGV4QXJyYXk9bmV3IGVuLHRoaXMub3BhY2l0eVZlcnRleEFycmF5PW5ldyBybix0aGlzLnBsYWNlZFN5bWJvbEFycmF5PW5ldyB5bn07VWEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0LGUpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksQ2EubWVtYmVycyksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSxlKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQodCksdGhpcy5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuZHluYW1pY0xheW91dFZlcnRleEFycmF5LExhLm1lbWJlcnMsITApLHRoaXMub3BhY2l0eVZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLm9wYWNpdHlWZXJ0ZXhBcnJheSxOYSwhMCksdGhpcy5vcGFjaXR5VmVydGV4QnVmZmVyLml0ZW1TaXplPTF9LFVhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpLHRoaXMuZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5vcGFjaXR5VmVydGV4QnVmZmVyLmRlc3Ryb3koKSl9LHByKFwiU3ltYm9sQnVmZmVyc1wiLFVhKTt2YXIgcWE9ZnVuY3Rpb24odCxlLHIpe3RoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IHQsdGhpcy5sYXlvdXRBdHRyaWJ1dGVzPWUsdGhpcy5pbmRleEFycmF5PW5ldyByLHRoaXMuc2VnbWVudHM9bmV3IE1uLHRoaXMuY29sbGlzaW9uVmVydGV4QXJyYXk9bmV3IG9ufTtxYS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5sYXlvdXRBdHRyaWJ1dGVzKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KSx0aGlzLmNvbGxpc2lvblZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmNvbGxpc2lvblZlcnRleEFycmF5LHphLm1lbWJlcnMsITApfSxxYS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyJiYodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpLHRoaXMuY29sbGlzaW9uVmVydGV4QnVmZmVyLmRlc3Ryb3koKSl9LHByKFwiQ29sbGlzaW9uQnVmZmVyc1wiLHFhKTt2YXIgSGE9ZnVuY3Rpb24odCl7dGhpcy5jb2xsaXNpb25Cb3hBcnJheT10LmNvbGxpc2lvbkJveEFycmF5LHRoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXJzPXQubGF5ZXJzLHRoaXMubGF5ZXJJZHM9dGhpcy5sYXllcnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSksdGhpcy5pbmRleD10LmluZGV4LHRoaXMucGl4ZWxSYXRpbz10LnBpeGVsUmF0aW8sdGhpcy5zb3VyY2VMYXllckluZGV4PXQuc291cmNlTGF5ZXJJbmRleDt2YXIgZT10aGlzLmxheWVyc1swXS5fdW5ldmFsdWF0ZWRMYXlvdXQuX3ZhbHVlczt0aGlzLnRleHRTaXplRGF0YT1GYSh0aGlzLnpvb20sZVtcInRleHQtc2l6ZVwiXSksdGhpcy5pY29uU2l6ZURhdGE9RmEodGhpcy56b29tLGVbXCJpY29uLXNpemVcIl0pO3ZhciByPXRoaXMubGF5ZXJzWzBdLmxheW91dDt0aGlzLnNvcnRGZWF0dXJlc0J5WT1yLmdldChcInRleHQtYWxsb3ctb3ZlcmxhcFwiKXx8ci5nZXQoXCJpY29uLWFsbG93LW92ZXJsYXBcIil8fHIuZ2V0KFwidGV4dC1pZ25vcmUtcGxhY2VtZW50XCIpfHxyLmdldChcImljb24taWdub3JlLXBsYWNlbWVudFwiKX07SGEucHJvdG90eXBlLmNyZWF0ZUFycmF5cz1mdW5jdGlvbigpe3RoaXMudGV4dD1uZXcgVWEobmV3IEluKENhLm1lbWJlcnMsdGhpcy5sYXllcnMsdGhpcy56b29tLGZ1bmN0aW9uKHQpe3JldHVybi9edGV4dC8udGVzdCh0KX0pKSx0aGlzLmljb249bmV3IFVhKG5ldyBJbihDYS5tZW1iZXJzLHRoaXMubGF5ZXJzLHRoaXMuem9vbSxmdW5jdGlvbih0KXtyZXR1cm4vXmljb24vLnRlc3QodCl9KSksdGhpcy5jb2xsaXNpb25Cb3g9bmV3IHFhKGFuLE9hLm1lbWJlcnMsZm4pLHRoaXMuY29sbGlzaW9uQ2lyY2xlPW5ldyBxYShhbixJYS5tZW1iZXJzLGhuKSx0aGlzLmdseXBoT2Zmc2V0QXJyYXk9bmV3IGJuLHRoaXMubGluZVZlcnRleEFycmF5PW5ldyB3bn0sSGEucHJvdG90eXBlLnBvcHVsYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sYXllcnNbMF0sbj1yLmxheW91dCxpPW4uZ2V0KFwidGV4dC1mb250XCIpLGE9bi5nZXQoXCJ0ZXh0LWZpZWxkXCIpLG89bi5nZXQoXCJpY29uLWltYWdlXCIpLHM9KFwiY29uc3RhbnRcIiE9PWEudmFsdWUua2luZHx8YS52YWx1ZS52YWx1ZS5sZW5ndGg+MCkmJihcImNvbnN0YW50XCIhPT1pLnZhbHVlLmtpbmR8fGkudmFsdWUudmFsdWUubGVuZ3RoPjApLGw9XCJjb25zdGFudFwiIT09by52YWx1ZS5raW5kfHxvLnZhbHVlLnZhbHVlJiZvLnZhbHVlLnZhbHVlLmxlbmd0aD4wO2lmKHRoaXMuZmVhdHVyZXM9W10sc3x8bCl7Zm9yKHZhciBjPWUuaWNvbkRlcGVuZGVuY2llcyx1PWUuZ2x5cGhEZXBlbmRlbmNpZXMsaD1uZXcgTHIodGhpcy56b29tKSxmPTAscD10O2Y8cC5sZW5ndGg7Zis9MSl7dmFyIGQ9cFtmXSxnPWQuZmVhdHVyZSx2PWQuaW5kZXgsbT1kLnNvdXJjZUxheWVySW5kZXg7aWYoci5fZmVhdHVyZUZpbHRlcihoLGcpKXt2YXIgeT12b2lkIDA7cyYmKHk9RGEoeT1yLmdldFZhbHVlQW5kUmVzb2x2ZVRva2VucyhcInRleHQtZmllbGRcIixnKSxyLGcpKTt2YXIgeD12b2lkIDA7aWYobCYmKHg9ci5nZXRWYWx1ZUFuZFJlc29sdmVUb2tlbnMoXCJpY29uLWltYWdlXCIsZykpLHl8fHgpe3ZhciBiPXt0ZXh0OnksaWNvbjp4LGluZGV4OnYsc291cmNlTGF5ZXJJbmRleDptLGdlb21ldHJ5OkZuKGcpLHByb3BlcnRpZXM6Zy5wcm9wZXJ0aWVzLHR5cGU6QmFbZy50eXBlXX07aWYodm9pZCAwIT09Zy5pZCYmKGIuaWQ9Zy5pZCksdGhpcy5mZWF0dXJlcy5wdXNoKGIpLHgmJihjW3hdPSEwKSx5KWZvcih2YXIgXz1pLmV2YWx1YXRlKGcpLmpvaW4oXCIsXCIpLHc9dVtfXT11W19dfHx7fSxrPVwibWFwXCI9PT1uLmdldChcInRleHQtcm90YXRpb24tYWxpZ25tZW50XCIpJiZcImxpbmVcIj09PW4uZ2V0KFwic3ltYm9sLXBsYWNlbWVudFwiKSxBPXhyKHkpLFQ9MDtUPHkubGVuZ3RoO1QrKylpZih3W3kuY2hhckNvZGVBdChUKV09ITAsayYmQSl7dmFyIE09UGFbeS5jaGFyQXQoVCldO00mJih3W00uY2hhckNvZGVBdCgwKV09ITApfX19fVwibGluZVwiPT09bi5nZXQoXCJzeW1ib2wtcGxhY2VtZW50XCIpJiYodGhpcy5mZWF0dXJlcz1mdW5jdGlvbih0KXt2YXIgZT17fSxyPXt9LG49W10saT0wO2Z1bmN0aW9uIGEoZSl7bi5wdXNoKHRbZV0pLGkrK31mdW5jdGlvbiBvKHQsZSxpKXt2YXIgYT1yW3RdO3JldHVybiBkZWxldGUgclt0XSxyW2VdPWEsblthXS5nZW9tZXRyeVswXS5wb3AoKSxuW2FdLmdlb21ldHJ5WzBdPW5bYV0uZ2VvbWV0cnlbMF0uY29uY2F0KGlbMF0pLGF9ZnVuY3Rpb24gcyh0LHIsaSl7dmFyIGE9ZVtyXTtyZXR1cm4gZGVsZXRlIGVbcl0sZVt0XT1hLG5bYV0uZ2VvbWV0cnlbMF0uc2hpZnQoKSxuW2FdLmdlb21ldHJ5WzBdPWlbMF0uY29uY2F0KG5bYV0uZ2VvbWV0cnlbMF0pLGF9ZnVuY3Rpb24gbCh0LGUscil7dmFyIG49cj9lWzBdW2VbMF0ubGVuZ3RoLTFdOmVbMF1bMF07cmV0dXJuIHQrXCI6XCIrbi54K1wiOlwiK24ueX1mb3IodmFyIGM9MDtjPHQubGVuZ3RoO2MrKyl7dmFyIHU9dFtjXSxoPXUuZ2VvbWV0cnksZj11LnRleHQ7aWYoZil7dmFyIHA9bChmLGgpLGQ9bChmLGgsITApO2lmKHAgaW4gciYmZCBpbiBlJiZyW3BdIT09ZVtkXSl7dmFyIGc9cyhwLGQsaCksdj1vKHAsZCxuW2ddLmdlb21ldHJ5KTtkZWxldGUgZVtwXSxkZWxldGUgcltkXSxyW2woZixuW3ZdLmdlb21ldHJ5LCEwKV09dixuW2ddLmdlb21ldHJ5PW51bGx9ZWxzZSBwIGluIHI/byhwLGQsaCk6ZCBpbiBlP3MocCxkLGgpOihhKGMpLGVbcF09aS0xLHJbZF09aS0xKX1lbHNlIGEoYyl9cmV0dXJuIG4uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdlb21ldHJ5fSl9KHRoaXMuZmVhdHVyZXMpKX19LEhhLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGh9LEhhLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy50ZXh0LnVwbG9hZCh0LHRoaXMuc29ydEZlYXR1cmVzQnlZKSx0aGlzLmljb24udXBsb2FkKHQsdGhpcy5zb3J0RmVhdHVyZXNCeVkpLHRoaXMuY29sbGlzaW9uQm94LnVwbG9hZCh0KSx0aGlzLmNvbGxpc2lvbkNpcmNsZS51cGxvYWQodCl9LEhhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy50ZXh0LmRlc3Ryb3koKSx0aGlzLmljb24uZGVzdHJveSgpLHRoaXMuY29sbGlzaW9uQm94LmRlc3Ryb3koKSx0aGlzLmNvbGxpc2lvbkNpcmNsZS5kZXN0cm95KCl9LEhhLnByb3RvdHlwZS5hZGRUb0xpbmVWZXJ0ZXhBcnJheT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGluZVZlcnRleEFycmF5Lmxlbmd0aDtpZih2b2lkIDAhPT10LnNlZ21lbnQpe2Zvcih2YXIgbj10LmRpc3QoZVt0LnNlZ21lbnQrMV0pLGk9dC5kaXN0KGVbdC5zZWdtZW50XSksYT17fSxvPXQuc2VnbWVudCsxO288ZS5sZW5ndGg7bysrKWFbb109e3g6ZVtvXS54LHk6ZVtvXS55LHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yOm59LG88ZS5sZW5ndGgtMSYmKG4rPWVbbysxXS5kaXN0KGVbb10pKTtmb3IodmFyIHM9dC5zZWdtZW50fHwwO3M+PTA7cy0tKWFbc109e3g6ZVtzXS54LHk6ZVtzXS55LHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yOml9LHM+MCYmKGkrPWVbcy0xXS5kaXN0KGVbc10pKTtmb3IodmFyIGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIGM9YVtsXTt0aGlzLmxpbmVWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhjLngsYy55LGMudGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3IpfX1yZXR1cm57bGluZVN0YXJ0SW5kZXg6cixsaW5lTGVuZ3RoOnRoaXMubGluZVZlcnRleEFycmF5Lmxlbmd0aC1yfX0sSGEucHJvdG90eXBlLmFkZFN5bWJvbHM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyl7Zm9yKHZhciB1PXQuaW5kZXhBcnJheSxoPXQubGF5b3V0VmVydGV4QXJyYXksZj10LmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSxwPXQuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCplLmxlbmd0aCx0LmxheW91dFZlcnRleEFycmF5LHQuaW5kZXhBcnJheSksZD10aGlzLmdseXBoT2Zmc2V0QXJyYXkubGVuZ3RoLGc9cC52ZXJ0ZXhMZW5ndGgsdj0wLG09ZTt2PG0ubGVuZ3RoO3YrPTEpe3ZhciB5PW1bdl0seD15LnRsLGI9eS50cixfPXkuYmwsdz15LmJyLGs9eS50ZXgsQT1wLnZlcnRleExlbmd0aCxUPXkuZ2x5cGhPZmZzZXRbMV07amEoaCxzLngscy55LHgueCxUK3gueSxrLngsay55LHIpLGphKGgscy54LHMueSxiLngsVCtiLnksay54K2sudyxrLnksciksamEoaCxzLngscy55LF8ueCxUK18ueSxrLngsay55K2suaCxyKSxqYShoLHMueCxzLnksdy54LFQrdy55LGsueCtrLncsay55K2suaCxyKSxWYShmLHMsMCksdS5lbXBsYWNlQmFjayhBLEErMSxBKzIpLHUuZW1wbGFjZUJhY2soQSsxLEErMixBKzMpLHAudmVydGV4TGVuZ3RoKz00LHAucHJpbWl0aXZlTGVuZ3RoKz0yLHRoaXMuZ2x5cGhPZmZzZXRBcnJheS5lbXBsYWNlQmFjayh5LmdseXBoT2Zmc2V0WzBdKX10LnBsYWNlZFN5bWJvbEFycmF5LmVtcGxhY2VCYWNrKHMueCxzLnksZCx0aGlzLmdseXBoT2Zmc2V0QXJyYXkubGVuZ3RoLWQsZyxsLGMscy5zZWdtZW50LHI/clswXTowLHI/clsxXTowLG5bMF0sblsxXSxvLCExKSx0LnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHQubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLGEpfSxIYS5wcm90b3R5cGUuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4PWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIGUuZW1wbGFjZUJhY2soMCwwKSx0LmVtcGxhY2VCYWNrKHIueCxyLnksbi54LG4ueSxNYXRoLnJvdW5kKGkueCksTWF0aC5yb3VuZChpLnkpKX0sSGEucHJvdG90eXBlLmFkZENvbGxpc2lvbkRlYnVnVmVydGljZXM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt2YXIgYz1pLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQsaS5sYXlvdXRWZXJ0ZXhBcnJheSxpLmluZGV4QXJyYXkpLHU9Yy52ZXJ0ZXhMZW5ndGgsaD1pLmxheW91dFZlcnRleEFycmF5LGY9aS5jb2xsaXNpb25WZXJ0ZXhBcnJheTtpZih0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleChoLGYsYSxvLmFuY2hvcixuZXcgbCh0LGUpKSx0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleChoLGYsYSxvLmFuY2hvcixuZXcgbChyLGUpKSx0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleChoLGYsYSxvLmFuY2hvcixuZXcgbChyLG4pKSx0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleChoLGYsYSxvLmFuY2hvcixuZXcgbCh0LG4pKSxjLnZlcnRleExlbmd0aCs9NCxzKXt2YXIgcD1pLmluZGV4QXJyYXk7cC5lbXBsYWNlQmFjayh1LHUrMSx1KzIpLHAuZW1wbGFjZUJhY2sodSx1KzIsdSszKSxjLnByaW1pdGl2ZUxlbmd0aCs9Mn1lbHNle3ZhciBkPWkuaW5kZXhBcnJheTtkLmVtcGxhY2VCYWNrKHUsdSsxKSxkLmVtcGxhY2VCYWNrKHUrMSx1KzIpLGQuZW1wbGFjZUJhY2sodSsyLHUrMyksZC5lbXBsYWNlQmFjayh1KzMsdSksYy5wcmltaXRpdmVMZW5ndGgrPTR9fSxIYS5wcm90b3R5cGUuZ2VuZXJhdGVDb2xsaXNpb25EZWJ1Z0J1ZmZlcnM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPXRoaXMuc3ltYm9sSW5zdGFuY2VzO3Q8ZS5sZW5ndGg7dCs9MSl7dmFyIHI9ZVt0XTtyLnRleHRDb2xsaXNpb25GZWF0dXJlPXtib3hTdGFydEluZGV4OnIudGV4dEJveFN0YXJ0SW5kZXgsYm94RW5kSW5kZXg6ci50ZXh0Qm94RW5kSW5kZXh9LHIuaWNvbkNvbGxpc2lvbkZlYXR1cmU9e2JveFN0YXJ0SW5kZXg6ci5pY29uQm94U3RhcnRJbmRleCxib3hFbmRJbmRleDpyLmljb25Cb3hFbmRJbmRleH07Zm9yKHZhciBuPTA7bjwyO24rKyl7dmFyIGk9clswPT09bj9cInRleHRDb2xsaXNpb25GZWF0dXJlXCI6XCJpY29uQ29sbGlzaW9uRmVhdHVyZVwiXTtpZihpKWZvcih2YXIgYT1pLmJveFN0YXJ0SW5kZXg7YTxpLmJveEVuZEluZGV4O2ErKyl7dmFyIG89dGhpcy5jb2xsaXNpb25Cb3hBcnJheS5nZXQoYSkscz1vLngxLGw9by55MSxjPW8ueDIsdT1vLnkyLGg9by5yYWRpdXM+MDt0aGlzLmFkZENvbGxpc2lvbkRlYnVnVmVydGljZXMocyxsLGMsdSxoP3RoaXMuY29sbGlzaW9uQ2lyY2xlOnRoaXMuY29sbGlzaW9uQm94LG8uYW5jaG9yUG9pbnQscixoKX19fX0sSGEucHJvdG90eXBlLmRlc2VyaWFsaXplQ29sbGlzaW9uQm94ZXM9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9e30sbz1lO288cjtvKyspe3ZhciBzPXQuZ2V0KG8pO2lmKDA9PT1zLnJhZGl1cyl7YS50ZXh0Qm94PXt4MTpzLngxLHkxOnMueTEseDI6cy54Mix5MjpzLnkyLGFuY2hvclBvaW50WDpzLmFuY2hvclBvaW50WCxhbmNob3JQb2ludFk6cy5hbmNob3JQb2ludFl9LGEudGV4dEZlYXR1cmVJbmRleD1zLmZlYXR1cmVJbmRleDticmVha31hLnRleHRDaXJjbGVzfHwoYS50ZXh0Q2lyY2xlcz1bXSxhLnRleHRGZWF0dXJlSW5kZXg9cy5mZWF0dXJlSW5kZXgpLGEudGV4dENpcmNsZXMucHVzaChzLmFuY2hvclBvaW50WCxzLmFuY2hvclBvaW50WSxzLnJhZGl1cyxzLnNpZ25lZERpc3RhbmNlRnJvbUFuY2hvciwxKX1mb3IodmFyIGw9bjtsPGk7bCsrKXt2YXIgYz10LmdldChsKTtpZigwPT09Yy5yYWRpdXMpe2EuaWNvbkJveD17eDE6Yy54MSx5MTpjLnkxLHgyOmMueDIseTI6Yy55MixhbmNob3JQb2ludFg6Yy5hbmNob3JQb2ludFgsYW5jaG9yUG9pbnRZOmMuYW5jaG9yUG9pbnRZfSxhLmljb25GZWF0dXJlSW5kZXg9Yy5mZWF0dXJlSW5kZXg7YnJlYWt9fXJldHVybiBhfSxIYS5wcm90b3R5cGUuaGFzVGV4dERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0LnNlZ21lbnRzLmdldCgpLmxlbmd0aD4wfSxIYS5wcm90b3R5cGUuaGFzSWNvbkRhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pY29uLnNlZ21lbnRzLmdldCgpLmxlbmd0aD4wfSxIYS5wcm90b3R5cGUuaGFzQ29sbGlzaW9uQm94RGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbGxpc2lvbkJveC5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MH0sSGEucHJvdG90eXBlLmhhc0NvbGxpc2lvbkNpcmNsZURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb2xsaXNpb25DaXJjbGUuc2VnbWVudHMuZ2V0KCkubGVuZ3RoPjB9LEhhLnByb3RvdHlwZS5zb3J0RmVhdHVyZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0aGlzLnNvcnRGZWF0dXJlc0J5WSYmdGhpcy5zb3J0ZWRBbmdsZSE9PXQmJih0aGlzLnNvcnRlZEFuZ2xlPXQsISh0aGlzLnRleHQuc2VnbWVudHMuZ2V0KCkubGVuZ3RoPjF8fHRoaXMuaWNvbi5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MSkpKXtmb3IodmFyIHI9W10sbj0wO248dGhpcy5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoO24rKylyLnB1c2gobik7dmFyIGk9TWF0aC5zaW4odCksYT1NYXRoLmNvcyh0KTtyLnNvcnQoZnVuY3Rpb24odCxyKXt2YXIgbj1lLnN5bWJvbEluc3RhbmNlc1t0XSxvPWUuc3ltYm9sSW5zdGFuY2VzW3JdO3JldHVybihpKm4uYW5jaG9yLngrYSpuLmFuY2hvci55fDApLShpKm8uYW5jaG9yLngrYSpvLmFuY2hvci55fDApfHxvLmZlYXR1cmVJbmRleC1uLmZlYXR1cmVJbmRleH0pLHRoaXMudGV4dC5pbmRleEFycmF5LmNsZWFyKCksdGhpcy5pY29uLmluZGV4QXJyYXkuY2xlYXIoKSx0aGlzLmZlYXR1cmVTb3J0T3JkZXI9W107Zm9yKHZhciBvPTAscz1yO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXSxjPWUuc3ltYm9sSW5zdGFuY2VzW2xdO2UuZmVhdHVyZVNvcnRPcmRlci5wdXNoKGMuZmVhdHVyZUluZGV4KTtmb3IodmFyIHU9MCxoPWMucGxhY2VkVGV4dFN5bWJvbEluZGljZXM7dTxoLmxlbmd0aDt1Kz0xKWZvcih2YXIgZj1oW3VdLHA9ZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChmKSxkPXAudmVydGV4U3RhcnRJbmRleCs0KnAubnVtR2x5cGhzLGc9cC52ZXJ0ZXhTdGFydEluZGV4O2c8ZDtnKz00KWUudGV4dC5pbmRleEFycmF5LmVtcGxhY2VCYWNrKGcsZysxLGcrMiksZS50ZXh0LmluZGV4QXJyYXkuZW1wbGFjZUJhY2soZysxLGcrMixnKzMpO3ZhciB2PWUuaWNvbi5wbGFjZWRTeW1ib2xBcnJheS5nZXQobCk7aWYodi5udW1HbHlwaHMpe3ZhciBtPXYudmVydGV4U3RhcnRJbmRleDtlLmljb24uaW5kZXhBcnJheS5lbXBsYWNlQmFjayhtLG0rMSxtKzIpLGUuaWNvbi5pbmRleEFycmF5LmVtcGxhY2VCYWNrKG0rMSxtKzIsbSszKX19dGhpcy50ZXh0LmluZGV4QnVmZmVyJiZ0aGlzLnRleHQuaW5kZXhCdWZmZXIudXBkYXRlRGF0YSh0aGlzLnRleHQuaW5kZXhBcnJheSksdGhpcy5pY29uLmluZGV4QnVmZmVyJiZ0aGlzLmljb24uaW5kZXhCdWZmZXIudXBkYXRlRGF0YSh0aGlzLmljb24uaW5kZXhBcnJheSl9fSxwcihcIlN5bWJvbEJ1Y2tldFwiLEhhLHtvbWl0OltcImxheWVyc1wiLFwiY29sbGlzaW9uQm94QXJyYXlcIixcImZlYXR1cmVzXCIsXCJjb21wYXJlVGV4dFwiXSxzaGFsbG93OltcInN5bWJvbEluc3RhbmNlc1wiXX0pLEhhLk1BWF9HTFlQSFM9NjU1MzUsSGEuYWRkRHluYW1pY0F0dHJpYnV0ZXM9VmE7dmFyIEdhPW5ldyBxcih7XCJzeW1ib2wtcGxhY2VtZW50XCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFtcInN5bWJvbC1wbGFjZW1lbnRcIl0pLFwic3ltYm9sLXNwYWNpbmdcIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sW1wic3ltYm9sLXNwYWNpbmdcIl0pLFwic3ltYm9sLWF2b2lkLWVkZ2VzXCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFtcInN5bWJvbC1hdm9pZC1lZGdlc1wiXSksXCJpY29uLWFsbG93LW92ZXJsYXBcIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sW1wiaWNvbi1hbGxvdy1vdmVybGFwXCJdKSxcImljb24taWdub3JlLXBsYWNlbWVudFwiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJpY29uLWlnbm9yZS1wbGFjZW1lbnRcIl0pLFwiaWNvbi1vcHRpb25hbFwiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJpY29uLW9wdGlvbmFsXCJdKSxcImljb24tcm90YXRpb24tYWxpZ25tZW50XCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFtcImljb24tcm90YXRpb24tYWxpZ25tZW50XCJdKSxcImljb24tc2l6ZVwiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbXCJpY29uLXNpemVcIl0pLFwiaWNvbi10ZXh0LWZpdFwiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJpY29uLXRleHQtZml0XCJdKSxcImljb24tdGV4dC1maXQtcGFkZGluZ1wiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJpY29uLXRleHQtZml0LXBhZGRpbmdcIl0pLFwiaWNvbi1pbWFnZVwiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbXCJpY29uLWltYWdlXCJdKSxcImljb24tcm90YXRlXCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFtcImljb24tcm90YXRlXCJdKSxcImljb24tcGFkZGluZ1wiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJpY29uLXBhZGRpbmdcIl0pLFwiaWNvbi1rZWVwLXVwcmlnaHRcIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sW1wiaWNvbi1rZWVwLXVwcmlnaHRcIl0pLFwiaWNvbi1vZmZzZXRcIjpuZXcganIoSS5sYXlvdXRfc3ltYm9sW1wiaWNvbi1vZmZzZXRcIl0pLFwiaWNvbi1hbmNob3JcIjpuZXcganIoSS5sYXlvdXRfc3ltYm9sW1wiaWNvbi1hbmNob3JcIl0pLFwiaWNvbi1waXRjaC1hbGlnbm1lbnRcIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sW1wiaWNvbi1waXRjaC1hbGlnbm1lbnRcIl0pLFwidGV4dC1waXRjaC1hbGlnbm1lbnRcIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sW1widGV4dC1waXRjaC1hbGlnbm1lbnRcIl0pLFwidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnRcIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sW1widGV4dC1yb3RhdGlvbi1hbGlnbm1lbnRcIl0pLFwidGV4dC1maWVsZFwiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LWZpZWxkXCJdKSxcInRleHQtZm9udFwiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LWZvbnRcIl0pLFwidGV4dC1zaXplXCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFtcInRleHQtc2l6ZVwiXSksXCJ0ZXh0LW1heC13aWR0aFwiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LW1heC13aWR0aFwiXSksXCJ0ZXh0LWxpbmUtaGVpZ2h0XCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFtcInRleHQtbGluZS1oZWlnaHRcIl0pLFwidGV4dC1sZXR0ZXItc3BhY2luZ1wiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LWxldHRlci1zcGFjaW5nXCJdKSxcInRleHQtanVzdGlmeVwiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LWp1c3RpZnlcIl0pLFwidGV4dC1hbmNob3JcIjpuZXcganIoSS5sYXlvdXRfc3ltYm9sW1widGV4dC1hbmNob3JcIl0pLFwidGV4dC1tYXgtYW5nbGVcIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sW1widGV4dC1tYXgtYW5nbGVcIl0pLFwidGV4dC1yb3RhdGVcIjpuZXcganIoSS5sYXlvdXRfc3ltYm9sW1widGV4dC1yb3RhdGVcIl0pLFwidGV4dC1wYWRkaW5nXCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFtcInRleHQtcGFkZGluZ1wiXSksXCJ0ZXh0LWtlZXAtdXByaWdodFwiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LWtlZXAtdXByaWdodFwiXSksXCJ0ZXh0LXRyYW5zZm9ybVwiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LXRyYW5zZm9ybVwiXSksXCJ0ZXh0LW9mZnNldFwiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LW9mZnNldFwiXSksXCJ0ZXh0LWFsbG93LW92ZXJsYXBcIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sW1widGV4dC1hbGxvdy1vdmVybGFwXCJdKSxcInRleHQtaWdub3JlLXBsYWNlbWVudFwiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnRcIl0pLFwidGV4dC1vcHRpb25hbFwiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbXCJ0ZXh0LW9wdGlvbmFsXCJdKX0pLFlhPXtwYWludDpuZXcgcXIoe1wiaWNvbi1vcGFjaXR5XCI6bmV3IGpyKEkucGFpbnRfc3ltYm9sW1wiaWNvbi1vcGFjaXR5XCJdKSxcImljb24tY29sb3JcIjpuZXcganIoSS5wYWludF9zeW1ib2xbXCJpY29uLWNvbG9yXCJdKSxcImljb24taGFsby1jb2xvclwiOm5ldyBqcihJLnBhaW50X3N5bWJvbFtcImljb24taGFsby1jb2xvclwiXSksXCJpY29uLWhhbG8td2lkdGhcIjpuZXcganIoSS5wYWludF9zeW1ib2xbXCJpY29uLWhhbG8td2lkdGhcIl0pLFwiaWNvbi1oYWxvLWJsdXJcIjpuZXcganIoSS5wYWludF9zeW1ib2xbXCJpY29uLWhhbG8tYmx1clwiXSksXCJpY29uLXRyYW5zbGF0ZVwiOm5ldyBOcihJLnBhaW50X3N5bWJvbFtcImljb24tdHJhbnNsYXRlXCJdKSxcImljb24tdHJhbnNsYXRlLWFuY2hvclwiOm5ldyBOcihJLnBhaW50X3N5bWJvbFtcImljb24tdHJhbnNsYXRlLWFuY2hvclwiXSksXCJ0ZXh0LW9wYWNpdHlcIjpuZXcganIoSS5wYWludF9zeW1ib2xbXCJ0ZXh0LW9wYWNpdHlcIl0pLFwidGV4dC1jb2xvclwiOm5ldyBqcihJLnBhaW50X3N5bWJvbFtcInRleHQtY29sb3JcIl0pLFwidGV4dC1oYWxvLWNvbG9yXCI6bmV3IGpyKEkucGFpbnRfc3ltYm9sW1widGV4dC1oYWxvLWNvbG9yXCJdKSxcInRleHQtaGFsby13aWR0aFwiOm5ldyBqcihJLnBhaW50X3N5bWJvbFtcInRleHQtaGFsby13aWR0aFwiXSksXCJ0ZXh0LWhhbG8tYmx1clwiOm5ldyBqcihJLnBhaW50X3N5bWJvbFtcInRleHQtaGFsby1ibHVyXCJdKSxcInRleHQtdHJhbnNsYXRlXCI6bmV3IE5yKEkucGFpbnRfc3ltYm9sW1widGV4dC10cmFuc2xhdGVcIl0pLFwidGV4dC10cmFuc2xhdGUtYW5jaG9yXCI6bmV3IE5yKEkucGFpbnRfc3ltYm9sW1widGV4dC10cmFuc2xhdGUtYW5jaG9yXCJdKX0pLGxheW91dDpHYX0sV2E9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLFlhKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucmVjYWxjdWxhdGU9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUucmVjYWxjdWxhdGUuY2FsbCh0aGlzLGUpLFwiYXV0b1wiPT09dGhpcy5sYXlvdXQuZ2V0KFwiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnRcIikmJihcImxpbmVcIj09PXRoaXMubGF5b3V0LmdldChcInN5bWJvbC1wbGFjZW1lbnRcIik/dGhpcy5sYXlvdXQuX3ZhbHVlc1tcImljb24tcm90YXRpb24tYWxpZ25tZW50XCJdPVwibWFwXCI6dGhpcy5sYXlvdXQuX3ZhbHVlc1tcImljb24tcm90YXRpb24tYWxpZ25tZW50XCJdPVwidmlld3BvcnRcIiksXCJhdXRvXCI9PT10aGlzLmxheW91dC5nZXQoXCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudFwiKSYmKFwibGluZVwiPT09dGhpcy5sYXlvdXQuZ2V0KFwic3ltYm9sLXBsYWNlbWVudFwiKT90aGlzLmxheW91dC5fdmFsdWVzW1widGV4dC1yb3RhdGlvbi1hbGlnbm1lbnRcIl09XCJtYXBcIjp0aGlzLmxheW91dC5fdmFsdWVzW1widGV4dC1yb3RhdGlvbi1hbGlnbm1lbnRcIl09XCJ2aWV3cG9ydFwiKSxcImF1dG9cIj09PXRoaXMubGF5b3V0LmdldChcInRleHQtcGl0Y2gtYWxpZ25tZW50XCIpJiYodGhpcy5sYXlvdXQuX3ZhbHVlc1tcInRleHQtcGl0Y2gtYWxpZ25tZW50XCJdPXRoaXMubGF5b3V0LmdldChcInRleHQtcm90YXRpb24tYWxpZ25tZW50XCIpKSxcImF1dG9cIj09PXRoaXMubGF5b3V0LmdldChcImljb24tcGl0Y2gtYWxpZ25tZW50XCIpJiYodGhpcy5sYXlvdXQuX3ZhbHVlc1tcImljb24tcGl0Y2gtYWxpZ25tZW50XCJdPXRoaXMubGF5b3V0LmdldChcImljb24tcm90YXRpb24tYWxpZ25tZW50XCIpKX0sZS5wcm90b3R5cGUuZ2V0VmFsdWVBbmRSZXNvbHZlVG9rZW5zPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10aGlzLmxheW91dC5nZXQodCkuZXZhbHVhdGUoZSksaT10aGlzLl91bmV2YWx1YXRlZExheW91dC5fdmFsdWVzW3RdO3JldHVybiBpLmlzRGF0YURyaXZlbigpfHxfZShpLnZhbHVlKT9uOihyPWUucHJvcGVydGllcyxuLnJlcGxhY2UoL3soW157fV0rKX0vZyxmdW5jdGlvbih0LGUpe3JldHVybiBlIGluIHI/U3RyaW5nKHJbZV0pOlwiXCJ9KSl9LGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEhhKHQpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbigpe3JldHVybiAwfSxlLnByb3RvdHlwZS5xdWVyeUludGVyc2VjdHNGZWF0dXJlPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGV9KEhyKSxYYT17cGFpbnQ6bmV3IHFyKHtcImJhY2tncm91bmQtY29sb3JcIjpuZXcgTnIoSS5wYWludF9iYWNrZ3JvdW5kW1wiYmFja2dyb3VuZC1jb2xvclwiXSksXCJiYWNrZ3JvdW5kLXBhdHRlcm5cIjpuZXcgVnIoSS5wYWludF9iYWNrZ3JvdW5kW1wiYmFja2dyb3VuZC1wYXR0ZXJuXCJdKSxcImJhY2tncm91bmQtb3BhY2l0eVwiOm5ldyBOcihJLnBhaW50X2JhY2tncm91bmRbXCJiYWNrZ3JvdW5kLW9wYWNpdHlcIl0pfSl9LFphPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxYYSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGV9KEhyKSwkYT17cGFpbnQ6bmV3IHFyKHtcInJhc3Rlci1vcGFjaXR5XCI6bmV3IE5yKEkucGFpbnRfcmFzdGVyW1wicmFzdGVyLW9wYWNpdHlcIl0pLFwicmFzdGVyLWh1ZS1yb3RhdGVcIjpuZXcgTnIoSS5wYWludF9yYXN0ZXJbXCJyYXN0ZXItaHVlLXJvdGF0ZVwiXSksXCJyYXN0ZXItYnJpZ2h0bmVzcy1taW5cIjpuZXcgTnIoSS5wYWludF9yYXN0ZXJbXCJyYXN0ZXItYnJpZ2h0bmVzcy1taW5cIl0pLFwicmFzdGVyLWJyaWdodG5lc3MtbWF4XCI6bmV3IE5yKEkucGFpbnRfcmFzdGVyW1wicmFzdGVyLWJyaWdodG5lc3MtbWF4XCJdKSxcInJhc3Rlci1zYXR1cmF0aW9uXCI6bmV3IE5yKEkucGFpbnRfcmFzdGVyW1wicmFzdGVyLXNhdHVyYXRpb25cIl0pLFwicmFzdGVyLWNvbnRyYXN0XCI6bmV3IE5yKEkucGFpbnRfcmFzdGVyW1wicmFzdGVyLWNvbnRyYXN0XCJdKSxcInJhc3Rlci1mYWRlLWR1cmF0aW9uXCI6bmV3IE5yKEkucGFpbnRfcmFzdGVyW1wicmFzdGVyLWZhZGUtZHVyYXRpb25cIl0pfSl9LEphPXtjaXJjbGU6bmksaGVhdG1hcDpwaSxoaWxsc2hhZGU6Z2ksZmlsbDpKaSxcImZpbGwtZXh0cnVzaW9uXCI6YWEsbGluZTpTYSxzeW1ib2w6V2EsYmFja2dyb3VuZDpaYSxyYXN0ZXI6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLCRhKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZX0oSHIpfSxLYT1pKGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUscil7cj1yfHx7fSx0aGlzLnc9dHx8NjQsdGhpcy5oPWV8fDY0LHRoaXMuYXV0b1Jlc2l6ZT0hIXIuYXV0b1Jlc2l6ZSx0aGlzLnNoZWx2ZXM9W10sdGhpcy5mcmVlYmlucz1bXSx0aGlzLnN0YXRzPXt9LHRoaXMuYmlucz17fSx0aGlzLm1heElkPTB9ZnVuY3Rpb24gZSh0LGUscil7dGhpcy54PTAsdGhpcy55PXQsdGhpcy53PXRoaXMuZnJlZT1lLHRoaXMuaD1yfXJldHVybiB0LnByb3RvdHlwZS5wYWNrPWZ1bmN0aW9uKHQsZSl7dD1bXS5jb25jYXQodCksZT1lfHx7fTtmb3IodmFyIHIsbixpLGEsbz1bXSxzPTA7czx0Lmxlbmd0aDtzKyspaWYocj10W3NdLnd8fHRbc10ud2lkdGgsbj10W3NdLmh8fHRbc10uaGVpZ2h0LGk9dFtzXS5pZCxyJiZuKXtpZighKGE9dGhpcy5wYWNrT25lKHIsbixpKSkpY29udGludWU7ZS5pblBsYWNlJiYodFtzXS54PWEueCx0W3NdLnk9YS55LHRbc10uaWQ9YS5pZCksby5wdXNoKGEpfXJldHVybiB0aGlzLnNocmluaygpLG99LHQucHJvdG90eXBlLnBhY2tPbmU9ZnVuY3Rpb24odCxyLG4pe3ZhciBpLGEsbyxzLGwsYyx1LGgsZj17ZnJlZWJpbjotMSxzaGVsZjotMSx3YXN0ZToxLzB9LHA9MDtpZihcInN0cmluZ1wiPT10eXBlb2Ygbnx8XCJudW1iZXJcIj09dHlwZW9mIG4pe2lmKGk9dGhpcy5nZXRCaW4obikpcmV0dXJuIHRoaXMucmVmKGkpLGk7XCJudW1iZXJcIj09dHlwZW9mIG4mJih0aGlzLm1heElkPU1hdGgubWF4KG4sdGhpcy5tYXhJZCkpfWVsc2Ugbj0rK3RoaXMubWF4SWQ7Zm9yKHM9MDtzPHRoaXMuZnJlZWJpbnMubGVuZ3RoO3MrKyl7aWYocj09PShpPXRoaXMuZnJlZWJpbnNbc10pLm1heGgmJnQ9PT1pLm1heHcpcmV0dXJuIHRoaXMuYWxsb2NGcmVlYmluKHMsdCxyLG4pO3I+aS5tYXhofHx0PmkubWF4d3x8cjw9aS5tYXhoJiZ0PD1pLm1heHcmJihvPWkubWF4dyppLm1heGgtdCpyKTxmLndhc3RlJiYoZi53YXN0ZT1vLGYuZnJlZWJpbj1zKX1mb3Iocz0wO3M8dGhpcy5zaGVsdmVzLmxlbmd0aDtzKyspaWYocCs9KGE9dGhpcy5zaGVsdmVzW3NdKS5oLCEodD5hLmZyZWUpKXtpZihyPT09YS5oKXJldHVybiB0aGlzLmFsbG9jU2hlbGYocyx0LHIsbik7cj5hLmh8fHI8YS5oJiYobz0oYS5oLXIpKnQpPGYud2FzdGUmJihmLmZyZWViaW49LTEsZi53YXN0ZT1vLGYuc2hlbGY9cyl9cmV0dXJuLTEhPT1mLmZyZWViaW4/dGhpcy5hbGxvY0ZyZWViaW4oZi5mcmVlYmluLHQscixuKTotMSE9PWYuc2hlbGY/dGhpcy5hbGxvY1NoZWxmKGYuc2hlbGYsdCxyLG4pOnI8PXRoaXMuaC1wJiZ0PD10aGlzLnc/KGE9bmV3IGUocCx0aGlzLncsciksdGhpcy5hbGxvY1NoZWxmKHRoaXMuc2hlbHZlcy5wdXNoKGEpLTEsdCxyLG4pKTp0aGlzLmF1dG9SZXNpemU/KGw9Yz10aGlzLmgsKCh1PWg9dGhpcy53KTw9bHx8dD51KSYmKGg9MipNYXRoLm1heCh0LHUpKSwobDx1fHxyPmwpJiYoYz0yKk1hdGgubWF4KHIsbCkpLHRoaXMucmVzaXplKGgsYyksdGhpcy5wYWNrT25lKHQscixuKSk6bnVsbH0sdC5wcm90b3R5cGUuYWxsb2NGcmVlYmluPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuZnJlZWJpbnMuc3BsaWNlKHQsMSlbMF07cmV0dXJuIGkuaWQ9bixpLnc9ZSxpLmg9cixpLnJlZmNvdW50PTAsdGhpcy5iaW5zW25dPWksdGhpcy5yZWYoaSksaX0sdC5wcm90b3R5cGUuYWxsb2NTaGVsZj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLnNoZWx2ZXNbdF0uYWxsb2MoZSxyLG4pO3JldHVybiB0aGlzLmJpbnNbbl09aSx0aGlzLnJlZihpKSxpfSx0LnByb3RvdHlwZS5zaHJpbms9ZnVuY3Rpb24oKXtpZih0aGlzLnNoZWx2ZXMubGVuZ3RoPjApe2Zvcih2YXIgdD0wLGU9MCxyPTA7cjx0aGlzLnNoZWx2ZXMubGVuZ3RoO3IrKyl7dmFyIG49dGhpcy5zaGVsdmVzW3JdO2UrPW4uaCx0PU1hdGgubWF4KG4udy1uLmZyZWUsdCl9dGhpcy5yZXNpemUodCxlKX19LHQucHJvdG90eXBlLmdldEJpbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5iaW5zW3RdfSx0LnByb3RvdHlwZS5yZWY9ZnVuY3Rpb24odCl7aWYoMT09Kyt0LnJlZmNvdW50KXt2YXIgZT10Lmg7dGhpcy5zdGF0c1tlXT0xKygwfHRoaXMuc3RhdHNbZV0pfXJldHVybiB0LnJlZmNvdW50fSx0LnByb3RvdHlwZS51bnJlZj1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXQucmVmY291bnQ/MDooMD09LS10LnJlZmNvdW50JiYodGhpcy5zdGF0c1t0LmhdLS0sZGVsZXRlIHRoaXMuYmluc1t0LmlkXSx0aGlzLmZyZWViaW5zLnB1c2godCkpLHQucmVmY291bnQpfSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2hlbHZlcz1bXSx0aGlzLmZyZWViaW5zPVtdLHRoaXMuc3RhdHM9e30sdGhpcy5iaW5zPXt9LHRoaXMubWF4SWQ9MH0sdC5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQsZSl7dGhpcy53PXQsdGhpcy5oPWU7Zm9yKHZhciByPTA7cjx0aGlzLnNoZWx2ZXMubGVuZ3RoO3IrKyl0aGlzLnNoZWx2ZXNbcl0ucmVzaXplKHQpO3JldHVybiEwfSxlLnByb3RvdHlwZS5hbGxvYz1mdW5jdGlvbih0LGUscil7aWYodD50aGlzLmZyZWV8fGU+dGhpcy5oKXJldHVybiBudWxsO3ZhciBuPXRoaXMueDtyZXR1cm4gdGhpcy54Kz10LHRoaXMuZnJlZS09dCxuZXcgZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dGhpcy5pZD10LHRoaXMueD1lLHRoaXMueT1yLHRoaXMudz1uLHRoaXMuaD1pLHRoaXMubWF4dz1hfHxuLHRoaXMubWF4aD1vfHxpLHRoaXMucmVmY291bnQ9MH0ocixuLHRoaXMueSx0LGUsdCx0aGlzLmgpfSxlLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZnJlZSs9dC10aGlzLncsdGhpcy53PXQsITB9LHR9KCl9KSxRYT1mdW5jdGlvbih0LGUpe3ZhciByPWUucGl4ZWxSYXRpbzt0aGlzLnBhZGRlZFJlY3Q9dCx0aGlzLnBpeGVsUmF0aW89cn0sdG89e3RsOntjb25maWd1cmFibGU6ITB9LGJyOntjb25maWd1cmFibGU6ITB9LGRpc3BsYXlTaXplOntjb25maWd1cmFibGU6ITB9fTt0by50bC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5wYWRkZWRSZWN0LngrMSx0aGlzLnBhZGRlZFJlY3QueSsxXX0sdG8uYnIuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMucGFkZGVkUmVjdC54K3RoaXMucGFkZGVkUmVjdC53LTEsdGhpcy5wYWRkZWRSZWN0LnkrdGhpcy5wYWRkZWRSZWN0LmgtMV19LHRvLmRpc3BsYXlTaXplLmdldD1mdW5jdGlvbigpe3JldHVyblsodGhpcy5wYWRkZWRSZWN0LnctMikvdGhpcy5waXhlbFJhdGlvLCh0aGlzLnBhZGRlZFJlY3QuaC0yKS90aGlzLnBpeGVsUmF0aW9dfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhRYS5wcm90b3R5cGUsdG8pO3ZhciBlbz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgdWkoe3dpZHRoOjAsaGVpZ2h0OjB9KSxyPXt9LG49bmV3IEthKDAsMCx7YXV0b1Jlc2l6ZTohMH0pO2Zvcih2YXIgaSBpbiB0KXt2YXIgYT10W2ldLG89bi5wYWNrT25lKGEuZGF0YS53aWR0aCsyLGEuZGF0YS5oZWlnaHQrMik7ZS5yZXNpemUoe3dpZHRoOm4udyxoZWlnaHQ6bi5ofSksdWkuY29weShhLmRhdGEsZSx7eDowLHk6MH0se3g6by54KzEseTpvLnkrMX0sYS5kYXRhKSxyW2ldPW5ldyBRYShvLGEpfW4uc2hyaW5rKCksZS5yZXNpemUoe3dpZHRoOm4udyxoZWlnaHQ6bi5ofSksdGhpcy5pbWFnZT1lLHRoaXMucG9zaXRpb25zPXJ9O3ByKFwiSW1hZ2VQb3NpdGlvblwiLFFhKSxwcihcIkltYWdlQXRsYXNcIixlbyk7dmFyIHJvPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbyxzPTgqaS1uLTEsbD0oMTw8cyktMSxjPWw+PjEsdT0tNyxoPXI/aS0xOjAsZj1yPy0xOjEscD10W2UraF07Zm9yKGgrPWYsYT1wJigxPDwtdSktMSxwPj49LXUsdSs9czt1PjA7YT0yNTYqYSt0W2UraF0saCs9Zix1LT04KTtmb3Iobz1hJigxPDwtdSktMSxhPj49LXUsdSs9bjt1PjA7bz0yNTYqbyt0W2UraF0saCs9Zix1LT04KTtpZigwPT09YSlhPTEtYztlbHNle2lmKGE9PT1sKXJldHVybiBvP05hTjoxLzAqKHA/LTE6MSk7bys9TWF0aC5wb3coMixuKSxhLT1jfXJldHVybihwPy0xOjEpKm8qTWF0aC5wb3coMixhLW4pfSxubz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8scyxsLGM9OCphLWktMSx1PSgxPDxjKS0xLGg9dT4+MSxmPTIzPT09aT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAscD1uPzA6YS0xLGQ9bj8xOi0xLGc9ZTwwfHwwPT09ZSYmMS9lPDA/MTowO2ZvcihlPU1hdGguYWJzKGUpLGlzTmFOKGUpfHxlPT09MS8wPyhzPWlzTmFOKGUpPzE6MCxvPXUpOihvPU1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjIpLGUqKGw9TWF0aC5wb3coMiwtbykpPDEmJihvLS0sbCo9MiksKGUrPW8raD49MT9mL2w6ZipNYXRoLnBvdygyLDEtaCkpKmw+PTImJihvKyssbC89MiksbytoPj11PyhzPTAsbz11KTpvK2g+PTE/KHM9KGUqbC0xKSpNYXRoLnBvdygyLGkpLG8rPWgpOihzPWUqTWF0aC5wb3coMixoLTEpKk1hdGgucG93KDIsaSksbz0wKSk7aT49ODt0W3IrcF09MjU1JnMscCs9ZCxzLz0yNTYsaS09OCk7Zm9yKG89bzw8aXxzLGMrPWk7Yz4wO3RbcitwXT0yNTUmbyxwKz1kLG8vPTI1NixjLT04KTt0W3IrcC1kXXw9MTI4Kmd9LGlvPWFvO2Z1bmN0aW9uIGFvKHQpe3RoaXMuYnVmPUFycmF5QnVmZmVyLmlzVmlldyYmQXJyYXlCdWZmZXIuaXNWaWV3KHQpP3Q6bmV3IFVpbnQ4QXJyYXkodHx8MCksdGhpcy5wb3M9MCx0aGlzLnR5cGU9MCx0aGlzLmxlbmd0aD10aGlzLmJ1Zi5sZW5ndGh9ZnVuY3Rpb24gb28odCl7cmV0dXJuIHQudHlwZT09PWFvLkJ5dGVzP3QucmVhZFZhcmludCgpK3QucG9zOnQucG9zKzF9ZnVuY3Rpb24gc28odCxlLHIpe3JldHVybiByPzQyOTQ5NjcyOTYqZSsodD4+PjApOjQyOTQ5NjcyOTYqKGU+Pj4wKSsodD4+PjApfWZ1bmN0aW9uIGxvKHQsZSxyKXt2YXIgbj1lPD0xNjM4Mz8xOmU8PTIwOTcxNTE/MjplPD0yNjg0MzU0NTU/MzpNYXRoLmNlaWwoTWF0aC5sb2coZSkvKDcqTWF0aC5MTjIpKTtyLnJlYWxsb2Mobik7Zm9yKHZhciBpPXIucG9zLTE7aT49dDtpLS0pci5idWZbaStuXT1yLmJ1ZltpXX1mdW5jdGlvbiBjbyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVWYXJpbnQodFtyXSl9ZnVuY3Rpb24gdW8odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlU1ZhcmludCh0W3JdKX1mdW5jdGlvbiBobyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVGbG9hdCh0W3JdKX1mdW5jdGlvbiBmbyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVEb3VibGUodFtyXSl9ZnVuY3Rpb24gcG8odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlQm9vbGVhbih0W3JdKX1mdW5jdGlvbiBnbyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVGaXhlZDMyKHRbcl0pfWZ1bmN0aW9uIHZvKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZVNGaXhlZDMyKHRbcl0pfWZ1bmN0aW9uIG1vKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZUZpeGVkNjQodFtyXSl9ZnVuY3Rpb24geW8odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlU0ZpeGVkNjQodFtyXSl9ZnVuY3Rpb24geG8odCxlKXtyZXR1cm4odFtlXXx0W2UrMV08PDh8dFtlKzJdPDwxNikrMTY3NzcyMTYqdFtlKzNdfWZ1bmN0aW9uIGJvKHQsZSxyKXt0W3JdPWUsdFtyKzFdPWU+Pj44LHRbcisyXT1lPj4+MTYsdFtyKzNdPWU+Pj4yNH1mdW5jdGlvbiBfbyh0LGUpe3JldHVybih0W2VdfHRbZSsxXTw8OHx0W2UrMl08PDE2KSsodFtlKzNdPDwyNCl9YW8uVmFyaW50PTAsYW8uRml4ZWQ2ND0xLGFvLkJ5dGVzPTIsYW8uRml4ZWQzMj01LGFvLnByb3RvdHlwZT17ZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuYnVmPW51bGx9LHJlYWRGaWVsZHM6ZnVuY3Rpb24odCxlLHIpe2ZvcihyPXJ8fHRoaXMubGVuZ3RoO3RoaXMucG9zPHI7KXt2YXIgbj10aGlzLnJlYWRWYXJpbnQoKSxpPW4+PjMsYT10aGlzLnBvczt0aGlzLnR5cGU9NyZuLHQoaSxlLHRoaXMpLHRoaXMucG9zPT09YSYmdGhpcy5za2lwKG4pfXJldHVybiBlfSxyZWFkTWVzc2FnZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnJlYWRGaWVsZHModCxlLHRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zKX0scmVhZEZpeGVkMzI6ZnVuY3Rpb24oKXt2YXIgdD14byh0aGlzLmJ1Zix0aGlzLnBvcyk7cmV0dXJuIHRoaXMucG9zKz00LHR9LHJlYWRTRml4ZWQzMjpmdW5jdGlvbigpe3ZhciB0PV9vKHRoaXMuYnVmLHRoaXMucG9zKTtyZXR1cm4gdGhpcy5wb3MrPTQsdH0scmVhZEZpeGVkNjQ6ZnVuY3Rpb24oKXt2YXIgdD14byh0aGlzLmJ1Zix0aGlzLnBvcykrNDI5NDk2NzI5Nip4byh0aGlzLmJ1Zix0aGlzLnBvcys0KTtyZXR1cm4gdGhpcy5wb3MrPTgsdH0scmVhZFNGaXhlZDY0OmZ1bmN0aW9uKCl7dmFyIHQ9eG8odGhpcy5idWYsdGhpcy5wb3MpKzQyOTQ5NjcyOTYqX28odGhpcy5idWYsdGhpcy5wb3MrNCk7cmV0dXJuIHRoaXMucG9zKz04LHR9LHJlYWRGbG9hdDpmdW5jdGlvbigpe3ZhciB0PXJvKHRoaXMuYnVmLHRoaXMucG9zLCEwLDIzLDQpO3JldHVybiB0aGlzLnBvcys9NCx0fSxyZWFkRG91YmxlOmZ1bmN0aW9uKCl7dmFyIHQ9cm8odGhpcy5idWYsdGhpcy5wb3MsITAsNTIsOCk7cmV0dXJuIHRoaXMucG9zKz04LHR9LHJlYWRWYXJpbnQ6ZnVuY3Rpb24odCl7dmFyIGUscixuPXRoaXMuYnVmO3JldHVybiBlPTEyNyYocj1uW3RoaXMucG9zKytdKSxyPDEyOD9lOihlfD0oMTI3JihyPW5bdGhpcy5wb3MrK10pKTw8NyxyPDEyOD9lOihlfD0oMTI3JihyPW5bdGhpcy5wb3MrK10pKTw8MTQscjwxMjg/ZTooZXw9KDEyNyYocj1uW3RoaXMucG9zKytdKSk8PDIxLHI8MTI4P2U6ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1yLmJ1ZjtpZihuPSgxMTImKGk9YVtyLnBvcysrXSkpPj40LGk8MTI4KXJldHVybiBzbyh0LG4sZSk7aWYobnw9KDEyNyYoaT1hW3IucG9zKytdKSk8PDMsaTwxMjgpcmV0dXJuIHNvKHQsbixlKTtpZihufD0oMTI3JihpPWFbci5wb3MrK10pKTw8MTAsaTwxMjgpcmV0dXJuIHNvKHQsbixlKTtpZihufD0oMTI3JihpPWFbci5wb3MrK10pKTw8MTcsaTwxMjgpcmV0dXJuIHNvKHQsbixlKTtpZihufD0oMTI3JihpPWFbci5wb3MrK10pKTw8MjQsaTwxMjgpcmV0dXJuIHNvKHQsbixlKTtpZihufD0oMSYoaT1hW3IucG9zKytdKSk8PDMxLGk8MTI4KXJldHVybiBzbyh0LG4sZSk7dGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgdmFyaW50IG5vdCBtb3JlIHRoYW4gMTAgYnl0ZXNcIil9KGV8PSgxNSYocj1uW3RoaXMucG9zXSkpPDwyOCx0LHRoaXMpKSkpfSxyZWFkVmFyaW50NjQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkVmFyaW50KCEwKX0scmVhZFNWYXJpbnQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJlYWRWYXJpbnQoKTtyZXR1cm4gdCUyPT0xPyh0KzEpLy0yOnQvMn0scmVhZEJvb2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbih0aGlzLnJlYWRWYXJpbnQoKSl9LHJlYWRTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcyxlPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49XCJcIixpPWU7aTxyOyl7dmFyIGEsbyxzLGw9dFtpXSxjPW51bGwsdT1sPjIzOT80Omw+MjIzPzM6bD4xOTE/MjoxO2lmKGkrdT5yKWJyZWFrOzE9PT11P2w8MTI4JiYoYz1sKToyPT09dT8xMjg9PSgxOTImKGE9dFtpKzFdKSkmJihjPSgzMSZsKTw8Nnw2MyZhKTw9MTI3JiYoYz1udWxsKTozPT09dT8oYT10W2krMV0sbz10W2krMl0sMTI4PT0oMTkyJmEpJiYxMjg9PSgxOTImbykmJigoYz0oMTUmbCk8PDEyfCg2MyZhKTw8Nnw2MyZvKTw9MjA0N3x8Yz49NTUyOTYmJmM8PTU3MzQzKSYmKGM9bnVsbCkpOjQ9PT11JiYoYT10W2krMV0sbz10W2krMl0scz10W2krM10sMTI4PT0oMTkyJmEpJiYxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmKChjPSgxNSZsKTw8MTh8KDYzJmEpPDwxMnwoNjMmbyk8PDZ8NjMmcyk8PTY1NTM1fHxjPj0xMTE0MTEyKSYmKGM9bnVsbCkpLG51bGw9PT1jPyhjPTY1NTMzLHU9MSk6Yz42NTUzNSYmKGMtPTY1NTM2LG4rPVN0cmluZy5mcm9tQ2hhckNvZGUoYz4+PjEwJjEwMjN8NTUyOTYpLGM9NTYzMjB8MTAyMyZjKSxuKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGMpLGkrPXV9cmV0dXJuIG59KHRoaXMuYnVmLHRoaXMucG9zLHQpO3JldHVybiB0aGlzLnBvcz10LGV9LHJlYWRCeXRlczpmdW5jdGlvbigpe3ZhciB0PXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zLGU9dGhpcy5idWYuc3ViYXJyYXkodGhpcy5wb3MsdCk7cmV0dXJuIHRoaXMucG9zPXQsZX0scmVhZFBhY2tlZFZhcmludDpmdW5jdGlvbih0LGUpe3ZhciByPW9vKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPHI7KXQucHVzaCh0aGlzLnJlYWRWYXJpbnQoZSkpO3JldHVybiB0fSxyZWFkUGFja2VkU1ZhcmludDpmdW5jdGlvbih0KXt2YXIgZT1vbyh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkU1ZhcmludCgpKTtyZXR1cm4gdH0scmVhZFBhY2tlZEJvb2xlYW46ZnVuY3Rpb24odCl7dmFyIGU9b28odGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEJvb2xlYW4oKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRGbG9hdDpmdW5jdGlvbih0KXt2YXIgZT1vbyh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkRmxvYXQoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWREb3VibGU6ZnVuY3Rpb24odCl7dmFyIGU9b28odGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZERvdWJsZSgpKTtyZXR1cm4gdH0scmVhZFBhY2tlZEZpeGVkMzI6ZnVuY3Rpb24odCl7dmFyIGU9b28odGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEZpeGVkMzIoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRTRml4ZWQzMjpmdW5jdGlvbih0KXt2YXIgZT1vbyh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkU0ZpeGVkMzIoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRGaXhlZDY0OmZ1bmN0aW9uKHQpe3ZhciBlPW9vKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRGaXhlZDY0KCkpO3JldHVybiB0fSxyZWFkUGFja2VkU0ZpeGVkNjQ6ZnVuY3Rpb24odCl7dmFyIGU9b28odGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZFNGaXhlZDY0KCkpO3JldHVybiB0fSxza2lwOmZ1bmN0aW9uKHQpe3ZhciBlPTcmdDtpZihlPT09YW8uVmFyaW50KWZvcig7dGhpcy5idWZbdGhpcy5wb3MrK10+MTI3Oyk7ZWxzZSBpZihlPT09YW8uQnl0ZXMpdGhpcy5wb3M9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3M7ZWxzZSBpZihlPT09YW8uRml4ZWQzMil0aGlzLnBvcys9NDtlbHNle2lmKGUhPT1hby5GaXhlZDY0KXRocm93IG5ldyBFcnJvcihcIlVuaW1wbGVtZW50ZWQgdHlwZTogXCIrZSk7dGhpcy5wb3MrPTh9fSx3cml0ZVRhZzpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVWYXJpbnQodDw8M3xlKX0scmVhbGxvYzpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5sZW5ndGh8fDE2O2U8dGhpcy5wb3MrdDspZSo9MjtpZihlIT09dGhpcy5sZW5ndGgpe3ZhciByPW5ldyBVaW50OEFycmF5KGUpO3Iuc2V0KHRoaXMuYnVmKSx0aGlzLmJ1Zj1yLHRoaXMubGVuZ3RoPWV9fSxmaW5pc2g6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGg9dGhpcy5wb3MsdGhpcy5wb3M9MCx0aGlzLmJ1Zi5zdWJhcnJheSgwLHRoaXMubGVuZ3RoKX0sd3JpdGVGaXhlZDMyOmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg0KSxibyh0aGlzLmJ1Zix0LHRoaXMucG9zKSx0aGlzLnBvcys9NH0sd3JpdGVTRml4ZWQzMjpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoNCksYm8odGhpcy5idWYsdCx0aGlzLnBvcyksdGhpcy5wb3MrPTR9LHdyaXRlRml4ZWQ2NDpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoOCksYm8odGhpcy5idWYsLTEmdCx0aGlzLnBvcyksYm8odGhpcy5idWYsTWF0aC5mbG9vcih0KigxLzQyOTQ5NjcyOTYpKSx0aGlzLnBvcys0KSx0aGlzLnBvcys9OH0sd3JpdGVTRml4ZWQ2NDpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoOCksYm8odGhpcy5idWYsLTEmdCx0aGlzLnBvcyksYm8odGhpcy5idWYsTWF0aC5mbG9vcih0KigxLzQyOTQ5NjcyOTYpKSx0aGlzLnBvcys0KSx0aGlzLnBvcys9OH0sd3JpdGVWYXJpbnQ6ZnVuY3Rpb24odCl7KHQ9K3R8fDApPjI2ODQzNTQ1NXx8dDwwP2Z1bmN0aW9uKHQsZSl7dmFyIHIsbjtpZih0Pj0wPyhyPXQlNDI5NDk2NzI5NnwwLG49dC80Mjk0OTY3Mjk2fDApOihuPX4oLXQvNDI5NDk2NzI5NiksNDI5NDk2NzI5NV4ocj1+KC10JTQyOTQ5NjcyOTYpKT9yPXIrMXwwOihyPTAsbj1uKzF8MCkpLHQ+PTB4MTAwMDAwMDAwMDAwMDAwMDB8fHQ8LTB4MTAwMDAwMDAwMDAwMDAwMDApdGhyb3cgbmV3IEVycm9yKFwiR2l2ZW4gdmFyaW50IGRvZXNuJ3QgZml0IGludG8gMTAgYnl0ZXNcIik7ZS5yZWFsbG9jKDEwKSxmdW5jdGlvbih0LGUscil7ci5idWZbci5wb3MrK109MTI3JnR8MTI4LHQ+Pj49NyxyLmJ1ZltyLnBvcysrXT0xMjcmdHwxMjgsdD4+Pj03LHIuYnVmW3IucG9zKytdPTEyNyZ0fDEyOCx0Pj4+PTcsci5idWZbci5wb3MrK109MTI3JnR8MTI4LHQ+Pj49NyxyLmJ1ZltyLnBvc109MTI3JnR9KHIsMCxlKSxmdW5jdGlvbih0LGUpe3ZhciByPSg3JnQpPDw0O2UuYnVmW2UucG9zKytdfD1yfCgodD4+Pj0zKT8xMjg6MCksdCYmKGUuYnVmW2UucG9zKytdPTEyNyZ0fCgodD4+Pj03KT8xMjg6MCksdCYmKGUuYnVmW2UucG9zKytdPTEyNyZ0fCgodD4+Pj03KT8xMjg6MCksdCYmKGUuYnVmW2UucG9zKytdPTEyNyZ0fCgodD4+Pj03KT8xMjg6MCksdCYmKGUuYnVmW2UucG9zKytdPTEyNyZ0fCgodD4+Pj03KT8xMjg6MCksdCYmKGUuYnVmW2UucG9zKytdPTEyNyZ0KSkpKSl9KG4sZSl9KHQsdGhpcyk6KHRoaXMucmVhbGxvYyg0KSx0aGlzLmJ1Zlt0aGlzLnBvcysrXT0xMjcmdHwodD4xMjc/MTI4OjApLHQ8PTEyN3x8KHRoaXMuYnVmW3RoaXMucG9zKytdPTEyNyYodD4+Pj03KXwodD4xMjc/MTI4OjApLHQ8PTEyN3x8KHRoaXMuYnVmW3RoaXMucG9zKytdPTEyNyYodD4+Pj03KXwodD4xMjc/MTI4OjApLHQ8PTEyN3x8KHRoaXMuYnVmW3RoaXMucG9zKytdPXQ+Pj43JjEyNykpKSl9LHdyaXRlU1ZhcmludDpmdW5jdGlvbih0KXt0aGlzLndyaXRlVmFyaW50KHQ8MD8yKi10LTE6Mip0KX0sd3JpdGVCb29sZWFuOmZ1bmN0aW9uKHQpe3RoaXMud3JpdGVWYXJpbnQoQm9vbGVhbih0KSl9LHdyaXRlU3RyaW5nOmZ1bmN0aW9uKHQpe3Q9U3RyaW5nKHQpLHRoaXMucmVhbGxvYyg0KnQubGVuZ3RoKSx0aGlzLnBvcysrO3ZhciBlPXRoaXMucG9zO3RoaXMucG9zPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saSxhPTA7YTxlLmxlbmd0aDthKyspe2lmKChuPWUuY2hhckNvZGVBdChhKSk+NTUyOTUmJm48NTczNDQpe2lmKCFpKXtuPjU2MzE5fHxhKzE9PT1lLmxlbmd0aD8odFtyKytdPTIzOSx0W3IrK109MTkxLHRbcisrXT0xODkpOmk9bjtjb250aW51ZX1pZihuPDU2MzIwKXt0W3IrK109MjM5LHRbcisrXT0xOTEsdFtyKytdPTE4OSxpPW47Y29udGludWV9bj1pLTU1Mjk2PDwxMHxuLTU2MzIwfDY1NTM2LGk9bnVsbH1lbHNlIGkmJih0W3IrK109MjM5LHRbcisrXT0xOTEsdFtyKytdPTE4OSxpPW51bGwpO248MTI4P3RbcisrXT1uOihuPDIwNDg/dFtyKytdPW4+PjZ8MTkyOihuPDY1NTM2P3RbcisrXT1uPj4xMnwyMjQ6KHRbcisrXT1uPj4xOHwyNDAsdFtyKytdPW4+PjEyJjYzfDEyOCksdFtyKytdPW4+PjYmNjN8MTI4KSx0W3IrK109NjMmbnwxMjgpfXJldHVybiByfSh0aGlzLmJ1Zix0LHRoaXMucG9zKTt2YXIgcj10aGlzLnBvcy1lO3I+PTEyOCYmbG8oZSxyLHRoaXMpLHRoaXMucG9zPWUtMSx0aGlzLndyaXRlVmFyaW50KHIpLHRoaXMucG9zKz1yfSx3cml0ZUZsb2F0OmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg0KSxubyh0aGlzLmJ1Zix0LHRoaXMucG9zLCEwLDIzLDQpLHRoaXMucG9zKz00fSx3cml0ZURvdWJsZTpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoOCksbm8odGhpcy5idWYsdCx0aGlzLnBvcywhMCw1Miw4KSx0aGlzLnBvcys9OH0sd3JpdGVCeXRlczpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDt0aGlzLndyaXRlVmFyaW50KGUpLHRoaXMucmVhbGxvYyhlKTtmb3IodmFyIHI9MDtyPGU7cisrKXRoaXMuYnVmW3RoaXMucG9zKytdPXRbcl19LHdyaXRlUmF3TWVzc2FnZTpmdW5jdGlvbih0LGUpe3RoaXMucG9zKys7dmFyIHI9dGhpcy5wb3M7dChlLHRoaXMpO3ZhciBuPXRoaXMucG9zLXI7bj49MTI4JiZsbyhyLG4sdGhpcyksdGhpcy5wb3M9ci0xLHRoaXMud3JpdGVWYXJpbnQobiksdGhpcy5wb3MrPW59LHdyaXRlTWVzc2FnZTpmdW5jdGlvbih0LGUscil7dGhpcy53cml0ZVRhZyh0LGFvLkJ5dGVzKSx0aGlzLndyaXRlUmF3TWVzc2FnZShlLHIpfSx3cml0ZVBhY2tlZFZhcmludDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQsY28sZSl9LHdyaXRlUGFja2VkU1ZhcmludDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQsdW8sZSl9LHdyaXRlUGFja2VkQm9vbGVhbjpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQscG8sZSl9LHdyaXRlUGFja2VkRmxvYXQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlTWVzc2FnZSh0LGhvLGUpfSx3cml0ZVBhY2tlZERvdWJsZTpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQsZm8sZSl9LHdyaXRlUGFja2VkRml4ZWQzMjpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQsZ28sZSl9LHdyaXRlUGFja2VkU0ZpeGVkMzI6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlTWVzc2FnZSh0LHZvLGUpfSx3cml0ZVBhY2tlZEZpeGVkNjQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlTWVzc2FnZSh0LG1vLGUpfSx3cml0ZVBhY2tlZFNGaXhlZDY0OmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCx5byxlKX0sd3JpdGVCeXRlc0ZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LGFvLkJ5dGVzKSx0aGlzLndyaXRlQnl0ZXMoZSl9LHdyaXRlRml4ZWQzMkZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LGFvLkZpeGVkMzIpLHRoaXMud3JpdGVGaXhlZDMyKGUpfSx3cml0ZVNGaXhlZDMyRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsYW8uRml4ZWQzMiksdGhpcy53cml0ZVNGaXhlZDMyKGUpfSx3cml0ZUZpeGVkNjRGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxhby5GaXhlZDY0KSx0aGlzLndyaXRlRml4ZWQ2NChlKX0sd3JpdGVTRml4ZWQ2NEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LGFvLkZpeGVkNjQpLHRoaXMud3JpdGVTRml4ZWQ2NChlKX0sd3JpdGVWYXJpbnRGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxhby5WYXJpbnQpLHRoaXMud3JpdGVWYXJpbnQoZSl9LHdyaXRlU1ZhcmludEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LGFvLlZhcmludCksdGhpcy53cml0ZVNWYXJpbnQoZSl9LHdyaXRlU3RyaW5nRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsYW8uQnl0ZXMpLHRoaXMud3JpdGVTdHJpbmcoZSl9LHdyaXRlRmxvYXRGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxhby5GaXhlZDMyKSx0aGlzLndyaXRlRmxvYXQoZSl9LHdyaXRlRG91YmxlRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsYW8uRml4ZWQ2NCksdGhpcy53cml0ZURvdWJsZShlKX0sd3JpdGVCb29sZWFuRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVmFyaW50RmllbGQodCxCb29sZWFuKGUpKX19O3ZhciB3bz0zO2Z1bmN0aW9uIGtvKHQsZSxyKXsxPT09dCYmci5yZWFkTWVzc2FnZShBbyxlKX1mdW5jdGlvbiBBbyh0LGUscil7aWYoMz09PXQpe3ZhciBuPXIucmVhZE1lc3NhZ2UoVG8se30pLGk9bi5pZCxhPW4uYml0bWFwLG89bi53aWR0aCxzPW4uaGVpZ2h0LGw9bi5sZWZ0LGM9bi50b3AsdT1uLmFkdmFuY2U7ZS5wdXNoKHtpZDppLGJpdG1hcDpuZXcgY2koe3dpZHRoOm8rMip3byxoZWlnaHQ6cysyKndvfSxhKSxtZXRyaWNzOnt3aWR0aDpvLGhlaWdodDpzLGxlZnQ6bCx0b3A6YyxhZHZhbmNlOnV9fSl9fWZ1bmN0aW9uIFRvKHQsZSxyKXsxPT09dD9lLmlkPXIucmVhZFZhcmludCgpOjI9PT10P2UuYml0bWFwPXIucmVhZEJ5dGVzKCk6Mz09PXQ/ZS53aWR0aD1yLnJlYWRWYXJpbnQoKTo0PT09dD9lLmhlaWdodD1yLnJlYWRWYXJpbnQoKTo1PT09dD9lLmxlZnQ9ci5yZWFkU1ZhcmludCgpOjY9PT10P2UudG9wPXIucmVhZFNWYXJpbnQoKTo3PT09dCYmKGUuYWR2YW5jZT1yLnJlYWRWYXJpbnQoKSl9dmFyIE1vPXdvLFNvPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRhcmdldD10LHRoaXMucGFyZW50PWUsdGhpcy5tYXBJZD1yLHRoaXMuY2FsbGJhY2tzPXt9LHRoaXMuY2FsbGJhY2tJRD0wLGcoW1wicmVjZWl2ZVwiXSx0aGlzKSx0aGlzLnRhcmdldC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLHRoaXMucmVjZWl2ZSwhMSl9O1NvLnByb3RvdHlwZS5zZW5kPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXI/dGhpcy5tYXBJZCtcIjpcIit0aGlzLmNhbGxiYWNrSUQrKzpudWxsO3ImJih0aGlzLmNhbGxiYWNrc1tpXT1yKTt2YXIgYT1bXTt0aGlzLnRhcmdldC5wb3N0TWVzc2FnZSh7dGFyZ2V0TWFwSWQ6bixzb3VyY2VNYXBJZDp0aGlzLm1hcElkLHR5cGU6dCxpZDpTdHJpbmcoaSksZGF0YTpncihlLGEpfSxhKX0sU28ucHJvdG90eXBlLnJlY2VpdmU9ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLG49dC5kYXRhLGk9bi5pZDtpZighbi50YXJnZXRNYXBJZHx8dGhpcy5tYXBJZD09PW4udGFyZ2V0TWFwSWQpe3ZhciBhPWZ1bmN0aW9uKHQsZSl7dmFyIG49W107ci50YXJnZXQucG9zdE1lc3NhZ2Uoe3NvdXJjZU1hcElkOnIubWFwSWQsdHlwZTpcIjxyZXNwb25zZT5cIixpZDpTdHJpbmcoaSksZXJyb3I6dD9ncih0KTpudWxsLGRhdGE6Z3IoZSxuKX0sbil9O2lmKFwiPHJlc3BvbnNlPlwiPT09bi50eXBlKWU9dGhpcy5jYWxsYmFja3Nbbi5pZF0sZGVsZXRlIHRoaXMuY2FsbGJhY2tzW24uaWRdLGUmJm4uZXJyb3I/ZSh2cihuLmVycm9yKSk6ZSYmZShudWxsLHZyKG4uZGF0YSkpO2Vsc2UgaWYodm9pZCAwIT09bi5pZCYmdGhpcy5wYXJlbnRbbi50eXBlXSl0aGlzLnBhcmVudFtuLnR5cGVdKG4uc291cmNlTWFwSWQsdnIobi5kYXRhKSxhKTtlbHNlIGlmKHZvaWQgMCE9PW4uaWQmJnRoaXMucGFyZW50LmdldFdvcmtlclNvdXJjZSl7dmFyIG89bi50eXBlLnNwbGl0KFwiLlwiKTt0aGlzLnBhcmVudC5nZXRXb3JrZXJTb3VyY2Uobi5zb3VyY2VNYXBJZCxvWzBdLG9bMV0pW29bMl1dKHZyKG4uZGF0YSksYSl9ZWxzZSB0aGlzLnBhcmVudFtuLnR5cGVdKHZyKG4uZGF0YSkpfX0sU28ucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMudGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsdGhpcy5yZWNlaXZlLCExKX07dmFyIEVvPW4oaShmdW5jdGlvbih0LGUpeyFmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSxuKXt2YXIgaT1yKDI1Nip0LDI1NiooZT1NYXRoLnBvdygyLG4pLWUtMSksbiksYT1yKDI1NioodCsxKSwyNTYqKGUrMSksbik7cmV0dXJuIGlbMF0rXCIsXCIraVsxXStcIixcIithWzBdK1wiLFwiK2FbMV19ZnVuY3Rpb24gcih0LGUscil7dmFyIG49MipNYXRoLlBJKjYzNzgxMzcvMjU2L01hdGgucG93KDIscik7cmV0dXJuW3Qqbi0yKk1hdGguUEkqNjM3ODEzNy8yLGUqbi0yKk1hdGguUEkqNjM3ODEzNy8yXX10LmdldFVSTD1mdW5jdGlvbih0LHIsbixpLGEsbyl7cmV0dXJuIG89b3x8e30sdCtcIj9cIitbXCJiYm94PVwiK2UobixpLGEpLFwiZm9ybWF0PVwiKyhvLmZvcm1hdHx8XCJpbWFnZS9wbmdcIiksXCJzZXJ2aWNlPVwiKyhvLnNlcnZpY2V8fFwiV01TXCIpLFwidmVyc2lvbj1cIisoby52ZXJzaW9ufHxcIjEuMS4xXCIpLFwicmVxdWVzdD1cIisoby5yZXF1ZXN0fHxcIkdldE1hcFwiKSxcInNycz1cIisoby5zcnN8fFwiRVBTRzozODU3XCIpLFwid2lkdGg9XCIrKG8ud2lkdGh8fDI1NiksXCJoZWlnaHQ9XCIrKG8uaGVpZ2h0fHwyNTYpLFwibGF5ZXJzPVwiK3JdLmpvaW4oXCImXCIpfSx0LmdldFRpbGVCQm94PWUsdC5nZXRNZXJjQ29vcmRzPXIsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9KGUpfSkpLENvPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLno9dCx0aGlzLng9ZSx0aGlzLnk9cix0aGlzLmtleT1PbygwLHQsZSxyKX07Q28ucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy56PT09dC56JiZ0aGlzLng9PT10LngmJnRoaXMueT09PXQueX0sQ28ucHJvdG90eXBlLnVybD1mdW5jdGlvbih0LGUpe3ZhciByPUVvLmdldFRpbGVCQm94KHRoaXMueCx0aGlzLnksdGhpcy56KSxuPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saT1cIlwiLGE9dDthPjA7YS0tKWkrPShlJihuPTE8PGEtMSk/MTowKSsociZuPzI6MCk7cmV0dXJuIGl9KHRoaXMueix0aGlzLngsdGhpcy55KTtyZXR1cm4gdFsodGhpcy54K3RoaXMueSkldC5sZW5ndGhdLnJlcGxhY2UoXCJ7cHJlZml4fVwiLCh0aGlzLnglMTYpLnRvU3RyaW5nKDE2KSsodGhpcy55JTE2KS50b1N0cmluZygxNikpLnJlcGxhY2UoXCJ7en1cIixTdHJpbmcodGhpcy56KSkucmVwbGFjZShcInt4fVwiLFN0cmluZyh0aGlzLngpKS5yZXBsYWNlKFwie3l9XCIsU3RyaW5nKFwidG1zXCI9PT1lP01hdGgucG93KDIsdGhpcy56KS10aGlzLnktMTp0aGlzLnkpKS5yZXBsYWNlKFwie3F1YWRrZXl9XCIsbikucmVwbGFjZShcIntiYm94LWVwc2ctMzg1N31cIixyKX07dmFyIExvPWZ1bmN0aW9uKHQsZSl7dGhpcy53cmFwPXQsdGhpcy5jYW5vbmljYWw9ZSx0aGlzLmtleT1Pbyh0LGUueixlLngsZS55KX0sem89ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLm92ZXJzY2FsZWRaPXQsdGhpcy53cmFwPWUsdGhpcy5jYW5vbmljYWw9bmV3IENvKHIsK24sK2kpLHRoaXMua2V5PU9vKGUsdCxuLGkpfTtmdW5jdGlvbiBPbyh0LGUscixuKXsodCo9Mik8MCYmKHQ9LTEqdC0xKTt2YXIgaT0xPDxlO3JldHVybiAzMiooaSppKnQraSpuK3IpK2V9em8ucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vdmVyc2NhbGVkWj09PXQub3ZlcnNjYWxlZFomJnRoaXMud3JhcD09PXQud3JhcCYmdGhpcy5jYW5vbmljYWwuZXF1YWxzKHQuY2Fub25pY2FsKX0sem8ucHJvdG90eXBlLnNjYWxlZFRvPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY2Fub25pY2FsLnotdDtyZXR1cm4gdD50aGlzLmNhbm9uaWNhbC56P25ldyB6byh0LHRoaXMud3JhcCx0aGlzLmNhbm9uaWNhbC56LHRoaXMuY2Fub25pY2FsLngsdGhpcy5jYW5vbmljYWwueSk6bmV3IHpvKHQsdGhpcy53cmFwLHQsdGhpcy5jYW5vbmljYWwueD4+ZSx0aGlzLmNhbm9uaWNhbC55Pj5lKX0sem8ucHJvdG90eXBlLmlzQ2hpbGRPZj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNhbm9uaWNhbC56LXQuY2Fub25pY2FsLno7cmV0dXJuIDA9PT10Lm92ZXJzY2FsZWRafHx0Lm92ZXJzY2FsZWRaPHRoaXMub3ZlcnNjYWxlZFomJnQuY2Fub25pY2FsLng9PT10aGlzLmNhbm9uaWNhbC54Pj5lJiZ0LmNhbm9uaWNhbC55PT09dGhpcy5jYW5vbmljYWwueT4+ZX0sem8ucHJvdG90eXBlLmNoaWxkcmVuPWZ1bmN0aW9uKHQpe2lmKHRoaXMub3ZlcnNjYWxlZFo+PXQpcmV0dXJuW25ldyB6byh0aGlzLm92ZXJzY2FsZWRaKzEsdGhpcy53cmFwLHRoaXMuY2Fub25pY2FsLnosdGhpcy5jYW5vbmljYWwueCx0aGlzLmNhbm9uaWNhbC55KV07dmFyIGU9dGhpcy5jYW5vbmljYWwueisxLHI9Mip0aGlzLmNhbm9uaWNhbC54LG49Mip0aGlzLmNhbm9uaWNhbC55O3JldHVybltuZXcgem8oZSx0aGlzLndyYXAsZSxyLG4pLG5ldyB6byhlLHRoaXMud3JhcCxlLHIrMSxuKSxuZXcgem8oZSx0aGlzLndyYXAsZSxyLG4rMSksbmV3IHpvKGUsdGhpcy53cmFwLGUscisxLG4rMSldfSx6by5wcm90b3R5cGUuaXNMZXNzVGhhbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy53cmFwPHQud3JhcHx8ISh0aGlzLndyYXA+dC53cmFwKSYmKHRoaXMub3ZlcnNjYWxlZFo8dC5vdmVyc2NhbGVkWnx8ISh0aGlzLm92ZXJzY2FsZWRaPnQub3ZlcnNjYWxlZFopJiYodGhpcy5jYW5vbmljYWwueDx0LmNhbm9uaWNhbC54fHwhKHRoaXMuY2Fub25pY2FsLng+dC5jYW5vbmljYWwueCkmJnRoaXMuY2Fub25pY2FsLnk8dC5jYW5vbmljYWwueSkpfSx6by5wcm90b3R5cGUud3JhcHBlZD1mdW5jdGlvbigpe3JldHVybiBuZXcgem8odGhpcy5vdmVyc2NhbGVkWiwwLHRoaXMuY2Fub25pY2FsLnosdGhpcy5jYW5vbmljYWwueCx0aGlzLmNhbm9uaWNhbC55KX0sem8ucHJvdG90eXBlLnVud3JhcFRvPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgem8odGhpcy5vdmVyc2NhbGVkWix0LHRoaXMuY2Fub25pY2FsLnosdGhpcy5jYW5vbmljYWwueCx0aGlzLmNhbm9uaWNhbC55KX0sem8ucHJvdG90eXBlLm92ZXJzY2FsZUZhY3Rvcj1mdW5jdGlvbigpe3JldHVybiBNYXRoLnBvdygyLHRoaXMub3ZlcnNjYWxlZFotdGhpcy5jYW5vbmljYWwueil9LHpvLnByb3RvdHlwZS50b1Vud3JhcHBlZD1mdW5jdGlvbigpe3JldHVybiBuZXcgTG8odGhpcy53cmFwLHRoaXMuY2Fub25pY2FsKX0sem8ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3ZlcnNjYWxlZForXCIvXCIrdGhpcy5jYW5vbmljYWwueCtcIi9cIit0aGlzLmNhbm9uaWNhbC55fSx6by5wcm90b3R5cGUudG9Db29yZGluYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBzKHRoaXMuY2Fub25pY2FsLngrTWF0aC5wb3coMix0aGlzLndyYXApLHRoaXMuY2Fub25pY2FsLnksdGhpcy5jYW5vbmljYWwueil9LHByKFwiQ2Fub25pY2FsVGlsZUlEXCIsQ28pLHByKFwiT3ZlcnNjYWxlZFRpbGVJRFwiLHpvLHtvbWl0OltcInBvc01hdHJpeFwiXX0pO3ZhciBJbz1mdW5jdGlvbih0LGUscil7aWYodDw9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkxldmVsIG11c3QgaGF2ZSBwb3NpdGl2ZSBkaW1lbnNpb25cIik7dGhpcy5kaW09dCx0aGlzLmJvcmRlcj1lLHRoaXMuc3RyaWRlPXRoaXMuZGltKzIqdGhpcy5ib3JkZXIsdGhpcy5kYXRhPXJ8fG5ldyBJbnQzMkFycmF5KCh0aGlzLmRpbSsyKnRoaXMuYm9yZGVyKSoodGhpcy5kaW0rMip0aGlzLmJvcmRlcikpfTtJby5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmRhdGFbdGhpcy5faWR4KHQsZSldPXIrNjU1MzZ9LElvLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5kYXRhW3RoaXMuX2lkeCh0LGUpXS02NTUzNn0sSW8ucHJvdG90eXBlLl9pZHg9ZnVuY3Rpb24odCxlKXtpZih0PC10aGlzLmJvcmRlcnx8dD49dGhpcy5kaW0rdGhpcy5ib3JkZXJ8fGU8LXRoaXMuYm9yZGVyfHxlPj10aGlzLmRpbSt0aGlzLmJvcmRlcil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIm91dCBvZiByYW5nZSBzb3VyY2UgY29vcmRpbmF0ZXMgZm9yIERFTSBkYXRhXCIpO3JldHVybihlK3RoaXMuYm9yZGVyKSp0aGlzLnN0cmlkZSsodCt0aGlzLmJvcmRlcil9LHByKFwiTGV2ZWxcIixJbyk7dmFyIERvPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnVpZD10LHRoaXMuc2NhbGU9ZXx8MSx0aGlzLmxldmVsPXJ8fG5ldyBJbygyNTYsNTEyKSx0aGlzLmxvYWRlZD0hIXJ9O0RvLnByb3RvdHlwZS5sb2FkRnJvbUltYWdlPWZ1bmN0aW9uKHQsZSl7aWYodC5oZWlnaHQhPT10LndpZHRoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiREVNIHRpbGVzIG11c3QgYmUgc3F1YXJlXCIpO2lmKGUmJlwibWFwYm94XCIhPT1lJiZcInRlcnJhcml1bVwiIT09ZSlyZXR1cm4gXygnXCInK2UrJ1wiIGlzIG5vdCBhIHZhbGlkIGVuY29kaW5nIHR5cGUuIFZhbGlkIHR5cGVzIGluY2x1ZGUgXCJtYXBib3hcIiBhbmQgXCJ0ZXJyYXJpdW1cIi4nKTt2YXIgcj10aGlzLmxldmVsPW5ldyBJbyh0LndpZHRoLHQud2lkdGgvMiksbj10LmRhdGE7dGhpcy5fdW5wYWNrRGF0YShyLG4sZXx8XCJtYXBib3hcIik7Zm9yKHZhciBpPTA7aTxyLmRpbTtpKyspci5zZXQoLTEsaSxyLmdldCgwLGkpKSxyLnNldChyLmRpbSxpLHIuZ2V0KHIuZGltLTEsaSkpLHIuc2V0KGksLTEsci5nZXQoaSwwKSksci5zZXQoaSxyLmRpbSxyLmdldChpLHIuZGltLTEpKTtyLnNldCgtMSwtMSxyLmdldCgwLDApKSxyLnNldChyLmRpbSwtMSxyLmdldChyLmRpbS0xLDApKSxyLnNldCgtMSxyLmRpbSxyLmdldCgwLHIuZGltLTEpKSxyLnNldChyLmRpbSxyLmRpbSxyLmdldChyLmRpbS0xLHIuZGltLTEpKSx0aGlzLmxvYWRlZD0hMH0sRG8ucHJvdG90eXBlLl91bnBhY2tNYXBib3g9ZnVuY3Rpb24odCxlLHIpe3JldHVybigyNTYqdCoyNTYrMjU2KmUrcikvMTAtMWU0fSxEby5wcm90b3R5cGUuX3VucGFja1RlcnJhcml1bT1mdW5jdGlvbih0LGUscil7cmV0dXJuIDI1Nip0K2Urci8yNTYtMzI3Njh9LERvLnByb3RvdHlwZS5fdW5wYWNrRGF0YT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXttYXBib3g6dGhpcy5fdW5wYWNrTWFwYm94LHRlcnJhcml1bTp0aGlzLl91bnBhY2tUZXJyYXJpdW19W3JdLGk9MDtpPHQuZGltO2krKylmb3IodmFyIGE9MDthPHQuZGltO2ErKyl7dmFyIG89NCooaSp0LmRpbSthKTt0LnNldChhLGksdGhpcy5zY2FsZSpuKGVbb10sZVtvKzFdLGVbbysyXSkpfX0sRG8ucHJvdG90eXBlLmdldFBpeGVscz1mdW5jdGlvbigpe3JldHVybiBuZXcgdWkoe3dpZHRoOnRoaXMubGV2ZWwuZGltKzIqdGhpcy5sZXZlbC5ib3JkZXIsaGVpZ2h0OnRoaXMubGV2ZWwuZGltKzIqdGhpcy5sZXZlbC5ib3JkZXJ9LG5ldyBVaW50OEFycmF5KHRoaXMubGV2ZWwuZGF0YS5idWZmZXIpKX0sRG8ucHJvdG90eXBlLmJhY2tmaWxsQm9yZGVyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmxldmVsLGk9dC5sZXZlbDtpZihuLmRpbSE9PWkuZGltKXRocm93IG5ldyBFcnJvcihcImxldmVsIG1pc21hdGNoIChkZW0gZGltZW5zaW9uKVwiKTt2YXIgYT1lKm4uZGltLG89ZSpuLmRpbStuLmRpbSxzPXIqbi5kaW0sbD1yKm4uZGltK24uZGltO3N3aXRjaChlKXtjYXNlLTE6YT1vLTE7YnJlYWs7Y2FzZSAxOm89YSsxfXN3aXRjaChyKXtjYXNlLTE6cz1sLTE7YnJlYWs7Y2FzZSAxOmw9cysxfWZvcih2YXIgYz1mKGEsLW4uYm9yZGVyLG4uZGltK24uYm9yZGVyKSx1PWYobywtbi5ib3JkZXIsbi5kaW0rbi5ib3JkZXIpLGg9ZihzLC1uLmJvcmRlcixuLmRpbStuLmJvcmRlcikscD1mKGwsLW4uYm9yZGVyLG4uZGltK24uYm9yZGVyKSxkPS1lKm4uZGltLGc9LXIqbi5kaW0sdj1oO3Y8cDt2KyspZm9yKHZhciBtPWM7bTx1O20rKyluLnNldChtLHYsaS5nZXQobStkLHYrZykpfSxwcihcIkRFTURhdGFcIixEbyk7dmFyIFBvPWZ1bmN0aW9uKHQpe3RoaXMuX3N0cmluZ1RvTnVtYmVyPXt9LHRoaXMuX251bWJlclRvU3RyaW5nPVtdO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10W2VdO3RoaXMuX3N0cmluZ1RvTnVtYmVyW3JdPWUsdGhpcy5fbnVtYmVyVG9TdHJpbmdbZV09cn19O1BvLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3N0cmluZ1RvTnVtYmVyW3RdfSxQby5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9udW1iZXJUb1N0cmluZ1t0XX07dmFyIFJvPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMudHlwZT1cIkZlYXR1cmVcIix0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZT10LHQuX3o9ZSx0Ll94PXIsdC5feT1uLHRoaXMucHJvcGVydGllcz10LnByb3BlcnRpZXMsbnVsbCE9dC5pZCYmKHRoaXMuaWQ9dC5pZCl9LEZvPXtnZW9tZXRyeTp7Y29uZmlndXJhYmxlOiEwfX07Rm8uZ2VvbWV0cnkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMuX2dlb21ldHJ5JiYodGhpcy5fZ2VvbWV0cnk9dGhpcy5fdmVjdG9yVGlsZUZlYXR1cmUudG9HZW9KU09OKHRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlLl94LHRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlLl95LHRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlLl96KS5nZW9tZXRyeSksdGhpcy5fZ2VvbWV0cnl9LEZvLmdlb21ldHJ5LnNldD1mdW5jdGlvbih0KXt0aGlzLl9nZW9tZXRyeT10fSxSby5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIHQ9e2dlb21ldHJ5OnRoaXMuZ2VvbWV0cnl9O2Zvcih2YXIgZSBpbiB0aGlzKVwiX2dlb21ldHJ5XCIhPT1lJiZcIl92ZWN0b3JUaWxlRmVhdHVyZVwiIT09ZSYmKHRbZV09dGhpc1tlXSk7cmV0dXJuIHR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJvLnByb3RvdHlwZSxGbyk7dmFyIEJvPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRpbGVJRD10LHRoaXMueD10LmNhbm9uaWNhbC54LHRoaXMueT10LmNhbm9uaWNhbC55LHRoaXMuej10LmNhbm9uaWNhbC56LHRoaXMuZ3JpZD1lfHxuZXcgbHIoUG4sMTYsMCksdGhpcy5mZWF0dXJlSW5kZXhBcnJheT1yfHxuZXcgQW59O2Z1bmN0aW9uIE5vKHQsZSl7cmV0dXJuIGUtdH1Cby5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpcy5mZWF0dXJlSW5kZXhBcnJheS5sZW5ndGg7dGhpcy5mZWF0dXJlSW5kZXhBcnJheS5lbXBsYWNlQmFjayhyLG4saSk7Zm9yKHZhciBvPTA7bzxlLmxlbmd0aDtvKyspe2Zvcih2YXIgcz1lW29dLGw9WzEvMCwxLzAsLTEvMCwtMS8wXSxjPTA7YzxzLmxlbmd0aDtjKyspe3ZhciB1PXNbY107bFswXT1NYXRoLm1pbihsWzBdLHUueCksbFsxXT1NYXRoLm1pbihsWzFdLHUueSksbFsyXT1NYXRoLm1heChsWzJdLHUueCksbFszXT1NYXRoLm1heChsWzNdLHUueSl9bFswXTxQbiYmbFsxXTxQbiYmbFsyXT49MCYmbFszXT49MCYmdGhpcy5ncmlkLmluc2VydChhLGxbMF0sbFsxXSxsWzJdLGxbM10pfX0sQm8ucHJvdG90eXBlLmxvYWRWVExheWVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZ0TGF5ZXJzfHwodGhpcy52dExheWVycz1uZXcgZ2EuVmVjdG9yVGlsZShuZXcgaW8odGhpcy5yYXdUaWxlRGF0YSkpLmxheWVycyx0aGlzLnNvdXJjZUxheWVyQ29kZXI9bmV3IFBvKHRoaXMudnRMYXllcnM/T2JqZWN0LmtleXModGhpcy52dExheWVycykuc29ydCgpOltcIl9nZW9qc29uVGlsZUxheWVyXCJdKSksdGhpcy52dExheWVyc30sQm8ucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpczt0aGlzLmxvYWRWVExheWVycygpO2Zvcih2YXIgbj10LnBhcmFtc3x8e30saT1Qbi90LnRpbGVTaXplL3Quc2NhbGUsYT1SZShuLmZpbHRlciksbz10LnF1ZXJ5R2VvbWV0cnkscz10LnF1ZXJ5UGFkZGluZyppLGw9MS8wLGM9MS8wLHU9LTEvMCxoPS0xLzAsZj0wO2Y8by5sZW5ndGg7ZisrKWZvcih2YXIgcD1vW2ZdLGQ9MDtkPHAubGVuZ3RoO2QrKyl7dmFyIGc9cFtkXTtsPU1hdGgubWluKGwsZy54KSxjPU1hdGgubWluKGMsZy55KSx1PU1hdGgubWF4KHUsZy54KSxoPU1hdGgubWF4KGgsZy55KX12YXIgdj10aGlzLmdyaWQucXVlcnkobC1zLGMtcyx1K3MsaCtzKTt2LnNvcnQoTm8pO2Zvcih2YXIgbSx5PXt9LHg9ZnVuY3Rpb24ocyl7dmFyIGw9dltzXTtpZihsIT09bSl7bT1sO3ZhciBjPXIuZmVhdHVyZUluZGV4QXJyYXkuZ2V0KGwpLHU9bnVsbDtyLmxvYWRNYXRjaGluZ0ZlYXR1cmUoeSxjLmJ1Y2tldEluZGV4LGMuc291cmNlTGF5ZXJJbmRleCxjLmZlYXR1cmVJbmRleCxhLG4ubGF5ZXJzLGUsZnVuY3Rpb24oZSxuKXtyZXR1cm4gdXx8KHU9Rm4oZSkpLG4ucXVlcnlJbnRlcnNlY3RzRmVhdHVyZShvLGUsdSxyLnosdC50cmFuc2Zvcm0saSx0LnBvc01hdHJpeCl9KX19LGI9MDtiPHYubGVuZ3RoO2IrKyl4KGIpO3JldHVybiB5fSxCby5wcm90b3R5cGUubG9hZE1hdGNoaW5nRmVhdHVyZT1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3ZhciBsPXRoaXMuYnVja2V0TGF5ZXJJRHNbZV07aWYoIWF8fGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspaWYoZS5pbmRleE9mKHRbcl0pPj0wKXJldHVybiEwO3JldHVybiExfShhLGwpKXt2YXIgYz10aGlzLnNvdXJjZUxheWVyQ29kZXIuZGVjb2RlKHIpLHU9dGhpcy52dExheWVyc1tjXS5mZWF0dXJlKG4pO2lmKGkobmV3IExyKHRoaXMudGlsZUlELm92ZXJzY2FsZWRaKSx1KSlmb3IodmFyIGg9MDtoPGwubGVuZ3RoO2grKyl7dmFyIGY9bFtoXTtpZighKGEmJmEuaW5kZXhPZihmKTwwKSl7dmFyIHA9b1tmXTtpZihwJiYoIXN8fHModSxwKSkpe3ZhciBkPW5ldyBSbyh1LHRoaXMueix0aGlzLngsdGhpcy55KTtkLmxheWVyPXAuc2VyaWFsaXplKCk7dmFyIGc9dFtmXTt2b2lkIDA9PT1nJiYoZz10W2ZdPVtdKSxnLnB1c2goe2ZlYXR1cmVJbmRleDpuLGZlYXR1cmU6ZH0pfX19fX0sQm8ucHJvdG90eXBlLmxvb2t1cFN5bWJvbEZlYXR1cmVzPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz17fTt0aGlzLmxvYWRWVExheWVycygpO2Zvcih2YXIgcz1SZShuKSxsPTAsYz10O2w8Yy5sZW5ndGg7bCs9MSl7dmFyIHU9Y1tsXTt0aGlzLmxvYWRNYXRjaGluZ0ZlYXR1cmUobyxlLHIsdSxzLGksYSl9cmV0dXJuIG99LEJvLnByb3RvdHlwZS5oYXNMYXllcj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRoaXMuYnVja2V0TGF5ZXJJRHM7ZTxyLmxlbmd0aDtlKz0xKWZvcih2YXIgbj0wLGk9cltlXTtuPGkubGVuZ3RoO24rPTEpaWYodD09PWlbbl0pcmV0dXJuITA7cmV0dXJuITF9LHByKFwiRmVhdHVyZUluZGV4XCIsQm8se29taXQ6W1wicmF3VGlsZURhdGFcIixcInNvdXJjZUxheWVyQ29kZXJcIl19KTt2YXIgam89e2hvcml6b250YWw6MSx2ZXJ0aWNhbDoyLGhvcml6b250YWxPbmx5OjN9LFZvPXs5OiEwLDEwOiEwLDExOiEwLDEyOiEwLDEzOiEwLDMyOiEwfSxVbz17fTtmdW5jdGlvbiBxbyh0LGUscixuKXt2YXIgaT1NYXRoLnBvdyh0LWUsMik7cmV0dXJuIG4/dDxlP2kvMjoyKmk6aStNYXRoLmFicyhyKSpyfWZ1bmN0aW9uIEhvKHQsZSl7dmFyIHI9MDtyZXR1cm4gMTA9PT10JiYoci09MWU0KSw0MCE9PXQmJjY1Mjg4IT09dHx8KHIrPTUwKSw0MSE9PWUmJjY1Mjg5IT09ZXx8KHIrPTUwKSxyfWZ1bmN0aW9uIEdvKHQsZSxyLG4saSxhKXtmb3IodmFyIG89bnVsbCxzPXFvKGUscixpLGEpLGw9MCxjPW47bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdLGg9cW8oZS11LngscixpLGEpK3UuYmFkbmVzcztoPD1zJiYobz11LHM9aCl9cmV0dXJue2luZGV4OnQseDplLHByaW9yQnJlYWs6byxiYWRuZXNzOnN9fWZ1bmN0aW9uIFlvKHQsZSxyLG4pe2lmKCFyKXJldHVybltdO2lmKCF0KXJldHVybltdO2Zvcih2YXIgaSxhPVtdLG89ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTAsYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz1uW3QuY2hhckNvZGVBdChhKV07byYmKGkrPW8ubWV0cmljcy5hZHZhbmNlK2UpfXJldHVybiBpL01hdGgubWF4KDEsTWF0aC5jZWlsKGkvcikpfSh0LGUscixuKSxzPTAsbD0wO2w8dC5sZW5ndGg7bCsrKXt2YXIgYz10LmNoYXJDb2RlQXQobCksdT1uW2NdO3UmJiFWb1tjXSYmKHMrPXUubWV0cmljcy5hZHZhbmNlK2UpLGw8dC5sZW5ndGgtMSYmKFVvW2NdfHwhKChpPWMpPDExOTA0KSYmKHlyW1wiQm9wb21vZm8gRXh0ZW5kZWRcIl0oaSl8fHlyLkJvcG9tb2ZvKGkpfHx5cltcIkNKSyBDb21wYXRpYmlsaXR5IEZvcm1zXCJdKGkpfHx5cltcIkNKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHNcIl0oaSl8fHlyW1wiQ0pLIENvbXBhdGliaWxpdHlcIl0oaSl8fHlyW1wiQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnRcIl0oaSl8fHlyW1wiQ0pLIFN0cm9rZXNcIl0oaSl8fHlyW1wiQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uXCJdKGkpfHx5cltcIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEFcIl0oaSl8fHlyW1wiQ0pLIFVuaWZpZWQgSWRlb2dyYXBoc1wiXShpKXx8eXJbXCJFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzXCJdKGkpfHx5cltcIkhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zXCJdKGkpfHx5ci5IaXJhZ2FuYShpKXx8eXJbXCJJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzXCJdKGkpfHx5cltcIkthbmd4aSBSYWRpY2Fsc1wiXShpKXx8eXJbXCJLYXRha2FuYSBQaG9uZXRpYyBFeHRlbnNpb25zXCJdKGkpfHx5ci5LYXRha2FuYShpKXx8eXJbXCJWZXJ0aWNhbCBGb3Jtc1wiXShpKXx8eXJbXCJZaSBSYWRpY2Fsc1wiXShpKXx8eXJbXCJZaSBTeWxsYWJsZXNcIl0oaSkpKSYmYS5wdXNoKEdvKGwrMSxzLG8sYSxIbyhjLHQuY2hhckNvZGVBdChsKzEpKSwhMSkpfXJldHVybiBmdW5jdGlvbiB0KGUpe3JldHVybiBlP3QoZS5wcmlvckJyZWFrKS5jb25jYXQoZS5pbmRleCk6W119KEdvKHQubGVuZ3RoLHMsbyxhLDAsITApKX1mdW5jdGlvbiBXbyh0KXt2YXIgZT0uNSxyPS41O3N3aXRjaCh0KXtjYXNlXCJyaWdodFwiOmNhc2VcInRvcC1yaWdodFwiOmNhc2VcImJvdHRvbS1yaWdodFwiOmU9MTticmVhaztjYXNlXCJsZWZ0XCI6Y2FzZVwidG9wLWxlZnRcIjpjYXNlXCJib3R0b20tbGVmdFwiOmU9MH1zd2l0Y2godCl7Y2FzZVwiYm90dG9tXCI6Y2FzZVwiYm90dG9tLXJpZ2h0XCI6Y2FzZVwiYm90dG9tLWxlZnRcIjpyPTE7YnJlYWs7Y2FzZVwidG9wXCI6Y2FzZVwidG9wLXJpZ2h0XCI6Y2FzZVwidG9wLWxlZnRcIjpyPTB9cmV0dXJue2hvcml6b250YWxBbGlnbjplLHZlcnRpY2FsQWxpZ246cn19ZnVuY3Rpb24gWG8odCxlLHIsbixpKXtpZihpKXt2YXIgYT1lW3Rbbl0uZ2x5cGhdO2lmKGEpZm9yKHZhciBvPWEubWV0cmljcy5hZHZhbmNlLHM9KHRbbl0ueCtvKSppLGw9cjtsPD1uO2wrKyl0W2xdLngtPXN9fVVvWzEwXT0hMCxVb1szMl09ITAsVW9bMzhdPSEwLFVvWzQwXT0hMCxVb1s0MV09ITAsVW9bNDNdPSEwLFVvWzQ1XT0hMCxVb1s0N109ITAsVW9bMTczXT0hMCxVb1sxODNdPSEwLFVvWzgyMDNdPSEwLFVvWzgyMDhdPSEwLFVvWzgyMTFdPSEwLFVvWzgyMzFdPSEwLGUuY29tbW9uanNHbG9iYWw9cixlLnVud3JhcEV4cG9ydHM9bixlLmNyZWF0ZUNvbW1vbmpzTW9kdWxlPWksZS5kZWZhdWx0PXNlbGYsZS5kZWZhdWx0JDE9bCxlLmdldEpTT049ZnVuY3Rpb24odCxlKXt2YXIgcj1NKHQpO3JldHVybiByLnNldFJlcXVlc3RIZWFkZXIoXCJBY2NlcHRcIixcImFwcGxpY2F0aW9uL2pzb25cIiksci5vbmVycm9yPWZ1bmN0aW9uKCl7ZShuZXcgRXJyb3Ioci5zdGF0dXNUZXh0KSl9LHIub25sb2FkPWZ1bmN0aW9uKCl7aWYoci5zdGF0dXM+PTIwMCYmci5zdGF0dXM8MzAwJiZyLnJlc3BvbnNlKXt2YXIgbjt0cnl7bj1KU09OLnBhcnNlKHIucmVzcG9uc2UpfWNhdGNoKHQpe3JldHVybiBlKHQpfWUobnVsbCxuKX1lbHNlIDQwMT09PXIuc3RhdHVzJiZ0LnVybC5tYXRjaCgvbWFwYm94LmNvbS8pP2UobmV3IFQoci5zdGF0dXNUZXh0K1wiOiB5b3UgbWF5IGhhdmUgcHJvdmlkZWQgYW4gaW52YWxpZCBNYXBib3ggYWNjZXNzIHRva2VuLiBTZWUgaHR0cHM6Ly93d3cubWFwYm94LmNvbS9hcGktZG9jdW1lbnRhdGlvbi8jYWNjZXNzLXRva2Vuc1wiLHIuc3RhdHVzLHQudXJsKSk6ZShuZXcgVChyLnN0YXR1c1RleHQsci5zdGF0dXMsdC51cmwpKX0sci5zZW5kKCkscn0sZS5nZXRJbWFnZT1mdW5jdGlvbih0LGUpe3JldHVybiBTKHQsZnVuY3Rpb24odCxyKXtpZih0KWUodCk7ZWxzZSBpZihyKXt2YXIgbj1uZXcgc2VsZi5JbWFnZSxpPXNlbGYuVVJMfHxzZWxmLndlYmtpdFVSTDtuLm9ubG9hZD1mdW5jdGlvbigpe2UobnVsbCxuKSxpLnJldm9rZU9iamVjdFVSTChuLnNyYyl9O3ZhciBhPW5ldyBzZWxmLkJsb2IoW25ldyBVaW50OEFycmF5KHIuZGF0YSldLHt0eXBlOlwiaW1hZ2UvcG5nXCJ9KTtuLmNhY2hlQ29udHJvbD1yLmNhY2hlQ29udHJvbCxuLmV4cGlyZXM9ci5leHBpcmVzLG4uc3JjPXIuZGF0YS5ieXRlTGVuZ3RoP2kuY3JlYXRlT2JqZWN0VVJMKGEpOlwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFCQ0FZQUFBQWZGY1NKQUFBQUMwbEVRVlFZVjJOZ0FBSUFBQVVBQWFyVnlGRUFBQUFBU1VWT1JLNUNZSUk9XCJ9fSl9LGUuUmVzb3VyY2VUeXBlPUEsZS5SR0JBSW1hZ2U9dWksZS5kZWZhdWx0JDI9S2EsZS5JbWFnZVBvc2l0aW9uPVFhLGUuZ2V0QXJyYXlCdWZmZXI9UyxlLmRlZmF1bHQkMz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGlvKHQpLnJlYWRGaWVsZHMoa28sW10pfSxlLmRlZmF1bHQkND15cixlLmFzeW5jQWxsPWZ1bmN0aW9uKHQsZSxyKXtpZighdC5sZW5ndGgpcmV0dXJuIHIobnVsbCxbXSk7dmFyIG49dC5sZW5ndGgsaT1uZXcgQXJyYXkodC5sZW5ndGgpLGE9bnVsbDt0LmZvckVhY2goZnVuY3Rpb24odCxvKXtlKHQsZnVuY3Rpb24odCxlKXt0JiYoYT10KSxpW29dPWUsMD09LS1uJiZyKGEsaSl9KX0pfSxlLkFscGhhSW1hZ2U9Y2ksZS5kZWZhdWx0JDU9SSxlLmVuZHNXaXRoPXYsZS5leHRlbmQ9cCxlLnNwaGVyaWNhbFRvQ2FydGVzaWFuPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXTtyZXR1cm4gcis9OTAscio9TWF0aC5QSS8xODAsbio9TWF0aC5QSS8xODAse3g6ZSpNYXRoLmNvcyhyKSpNYXRoLnNpbihuKSx5OmUqTWF0aC5zaW4ocikqTWF0aC5zaW4obiksejplKk1hdGguY29zKG4pfX0sZS5FdmVudGVkPU8sZS52YWxpZGF0ZVN0eWxlPW5yLGUudmFsaWRhdGVMaWdodD1pcixlLmVtaXRWYWxpZGF0aW9uRXJyb3JzPXNyLGUuZGVmYXVsdCQ2PXR0LGUubnVtYmVyPXd0LGUuUHJvcGVydGllcz1xcixlLlRyYW5zaXRpb25hYmxlPUlyLGUuVHJhbnNpdGlvbmluZz1QcixlLlBvc3NpYmx5RXZhbHVhdGVkPUJyLGUuRGF0YUNvbnN0YW50UHJvcGVydHk9TnIsZS53YXJuT25jZT1fLGUudW5pcXVlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZCsrfSxlLmRlZmF1bHQkNz1TbyxlLnBpY2s9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9e30sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO2kgaW4gdCYmKHJbaV09dFtpXSl9cmV0dXJuIHJ9LGUud3JhcD1mdW5jdGlvbih0LGUscil7dmFyIG49ci1lLGk9KCh0LWUpJW4rbiklbitlO3JldHVybiBpPT09ZT9yOml9LGUuY2xhbXA9ZixlLkV2ZW50PUwsZS5FcnJvckV2ZW50PXosZS5PdmVyc2NhbGVkVGlsZUlEPXpvLGUuZGVmYXVsdCQ4PVBuLGUuY3JlYXRlTGF5b3V0PVhyLGUuZ2V0Q29vcmRpbmF0ZXNDZW50ZXI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTEvMCxyPTEvMCxuPS0xLzAsaT0tMS8wLGE9MDthPHQubGVuZ3RoO2ErKyllPU1hdGgubWluKGUsdFthXS5jb2x1bW4pLHI9TWF0aC5taW4ocix0W2FdLnJvdyksbj1NYXRoLm1heChuLHRbYV0uY29sdW1uKSxpPU1hdGgubWF4KGksdFthXS5yb3cpO3ZhciBvPW4tZSxsPWktcixjPU1hdGgubWF4KG8sbCksdT1NYXRoLm1heCgwLE1hdGguZmxvb3IoLU1hdGgubG9nKGMpL01hdGguTE4yKSk7cmV0dXJuIG5ldyBzKChlK24pLzIsKHIraSkvMiwwKS56b29tVG8odSl9LGUuQ2Fub25pY2FsVGlsZUlEPUNvLGUuUmFzdGVyQm91bmRzQXJyYXk9SnIsZS5nZXRWaWRlbz1mdW5jdGlvbih0LGUpe3ZhciByLG4saT1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ2aWRlb1wiKTtpLm9ubG9hZHN0YXJ0PWZ1bmN0aW9uKCl7ZShudWxsLGkpfTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic291cmNlXCIpO3I9dFthXSxuPXZvaWQgMCwobj1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpKS5ocmVmPXIsKG4ucHJvdG9jb2whPT1zZWxmLmRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sfHxuLmhvc3QhPT1zZWxmLmRvY3VtZW50LmxvY2F0aW9uLmhvc3QpJiYoaS5jcm9zc09yaWdpbj1cIkFub255bW91c1wiKSxvLnNyYz10W2FdLGkuYXBwZW5kQ2hpbGQobyl9cmV0dXJuIGl9LGUuZGVmYXVsdCQ5PUQsZS5iaW5kQWxsPWcsZS5kZWZhdWx0JDEwPWZ1bmN0aW9uIHQoZSxyKXtpZihBcnJheS5pc0FycmF5KGUpKXtpZighQXJyYXkuaXNBcnJheShyKXx8ZS5sZW5ndGghPT1yLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZighdChlW25dLHJbbl0pKXJldHVybiExO3JldHVybiEwfWlmKFwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmbnVsbCE9PXIpe2lmKFwib2JqZWN0XCIhPXR5cGVvZiByKXJldHVybiExO2lmKE9iamVjdC5rZXlzKGUpLmxlbmd0aCE9PU9iamVjdC5rZXlzKHIpLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGkgaW4gZSlpZighdChlW2ldLHJbaV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiBlPT09cn0sZS5wYXJzZUNhY2hlQ29udHJvbD1mdW5jdGlvbih0KXt2YXIgZT17fTtpZih0LnJlcGxhY2UoLyg/Ol58KD86XFxzKlxcLFxccyopKShbXlxceDAwLVxceDIwXFwoXFwpPD5AXFwsO1xcOlxcXFxcIlxcL1xcW1xcXVxcP1xcPVxce1xcfVxceDdGXSspKD86XFw9KD86KFteXFx4MDAtXFx4MjBcXChcXCk8PkBcXCw7XFw6XFxcXFwiXFwvXFxbXFxdXFw/XFw9XFx7XFx9XFx4N0ZdKyl8KD86XFxcIigoPzpbXlwiXFxcXF18XFxcXC4pKilcXFwiKSkpPy9nLGZ1bmN0aW9uKHQscixuLGkpe3ZhciBhPW58fGk7cmV0dXJuIGVbcl09IWF8fGEudG9Mb3dlckNhc2UoKSxcIlwifSksZVtcIm1heC1hZ2VcIl0pe3ZhciByPXBhcnNlSW50KGVbXCJtYXgtYWdlXCJdLDEwKTtpc05hTihyKT9kZWxldGUgZVtcIm1heC1hZ2VcIl06ZVtcIm1heC1hZ2VcIl09cn1yZXR1cm4gZX0sZS5kZWZhdWx0JDExPUJvLGUuZGVmYXVsdCQxMj1SbyxlLmRlZmF1bHQkMTM9UmUsZS5kZWZhdWx0JDE0PUhhLGUuQ29sbGlzaW9uQm94QXJyYXk9dm4sZS5kZWZhdWx0JDE1PU1uLGUuVHJpYW5nbGVJbmRleEFycmF5PWhuLGUuZGVmYXVsdCQxNj1McixlLmRlZmF1bHQkMTc9cyxlLmtleXNEaWZmZXJlbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107Zm9yKHZhciBuIGluIHQpbiBpbiBlfHxyLnB1c2gobik7cmV0dXJuIHJ9LGUuZGVmYXVsdCQxOD1bXCJ0eXBlXCIsXCJzb3VyY2VcIixcInNvdXJjZS1sYXllclwiLFwibWluem9vbVwiLFwibWF4em9vbVwiLFwiZmlsdGVyXCIsXCJsYXlvdXRcIl0sZS5tYXQ0PXJpLGUudmVjND1laSxlLmdldFNpemVEYXRhPUZhLGUuZXZhbHVhdGVTaXplRm9yRmVhdHVyZT1mdW5jdGlvbih0LGUscil7dmFyIG49ZTtyZXR1cm5cInNvdXJjZVwiPT09dC5mdW5jdGlvblR5cGU/ci5sb3dlclNpemUvMTA6XCJjb21wb3NpdGVcIj09PXQuZnVuY3Rpb25UeXBlP3d0KHIubG93ZXJTaXplLzEwLHIudXBwZXJTaXplLzEwLG4udVNpemVUKTpuLnVTaXplfSxlLmV2YWx1YXRlU2l6ZUZvclpvb209ZnVuY3Rpb24odCxlLHIpe2lmKFwiY29uc3RhbnRcIj09PXQuZnVuY3Rpb25UeXBlKXJldHVybnt1U2l6ZVQ6MCx1U2l6ZTp0LmxheW91dFNpemV9O2lmKFwic291cmNlXCI9PT10LmZ1bmN0aW9uVHlwZSlyZXR1cm57dVNpemVUOjAsdVNpemU6MH07aWYoXCJjYW1lcmFcIj09PXQuZnVuY3Rpb25UeXBlKXt2YXIgbj10LnByb3BlcnR5VmFsdWUsaT10Lnpvb21SYW5nZSxhPXQuc2l6ZVJhbmdlLG89ZihTZShuLHIuc3BlY2lmaWNhdGlvbikuaW50ZXJwb2xhdGlvbkZhY3RvcihlLGkubWluLGkubWF4KSwwLDEpO3JldHVybnt1U2l6ZVQ6MCx1U2l6ZTphLm1pbitvKihhLm1heC1hLm1pbil9fXZhciBzPXQucHJvcGVydHlWYWx1ZSxsPXQuem9vbVJhbmdlO3JldHVybnt1U2l6ZVQ6ZihTZShzLHIuc3BlY2lmaWNhdGlvbikuaW50ZXJwb2xhdGlvbkZhY3RvcihlLGwubWluLGwubWF4KSwwLDEpLHVTaXplOjB9fSxlLmFkZER5bmFtaWNBdHRyaWJ1dGVzPVZhLGUuZGVmYXVsdCQxOT1ZYSxlLldyaXRpbmdNb2RlPWpvLGUubXVsdGlQb2x5Z29uSW50ZXJzZWN0c0J1ZmZlcmVkUG9pbnQ9am4sZS5tdWx0aVBvbHlnb25JbnRlcnNlY3RzTXVsdGlQb2x5Z29uPVZuLGUubXVsdGlQb2x5Z29uSW50ZXJzZWN0c0J1ZmZlcmVkTXVsdGlMaW5lPVVuLGUucG9seWdvbkludGVyc2VjdHNQb2x5Z29uPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspaWYoWm4oZSx0W3JdKSlyZXR1cm4hMDtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihabih0LGVbbl0pKXJldHVybiEwO3JldHVybiEhSG4odCxlKX0sZS5kaXN0VG9TZWdtZW50U3F1YXJlZD1XbixlLmRlZmF1bHQkMjA9dGksZS5kZWZhdWx0JDIxPUhyLGUuZGVmYXVsdCQyMj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEphW3QudHlwZV0odCl9LGUuY2xvbmU9eCxlLmZpbHRlck9iamVjdD15LGUubWFwT2JqZWN0PW0sZS5yZWdpc3RlckZvclBsdWdpbkF2YWlsYWJpbGl0eT1mdW5jdGlvbih0KXtyZXR1cm4gTXI/dCh7cGx1Z2luVVJMOk1yLGNvbXBsZXRpb25DYWxsYmFjazpBcn0pOkVyLm9uY2UoXCJwbHVnaW5BdmFpbGFibGVcIix0KSx0fSxlLmV2ZW50ZWQ9RXIsZS5kZWZhdWx0JDIzPW1yLGUuZGVmYXVsdCQyND1PbixlLlBvc0FycmF5PSRyLGUuVW53cmFwcGVkVGlsZUlEPUxvLGUuZWFzZT1oLGUuYmV6aWVyPXUsZS5zZXRSVExUZXh0UGx1Z2luPWZ1bmN0aW9uKHQsZSl7aWYoVHIpdGhyb3cgbmV3IEVycm9yKFwic2V0UlRMVGV4dFBsdWdpbiBjYW5ub3QgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLlwiKTtUcj0hMCxNcj10LEFyPWZ1bmN0aW9uKHQpe3Q/KFRyPSExLE1yPW51bGwsZSYmZSh0KSk6U3I9ITB9LEVyLmZpcmUobmV3IEwoXCJwbHVnaW5BdmFpbGFibGVcIix7cGx1Z2luVVJMOk1yLGNvbXBsZXRpb25DYWxsYmFjazpBcn0pKX0sZS52YWx1ZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHRbcl0pO3JldHVybiBlfSxlLmRlZmF1bHQkMjU9UmEsZS5yZWdpc3Rlcj1wcixlLkdMWVBIX1BCRl9CT1JERVI9TW8sZS5zaGFwZVRleHQ9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyl7dmFyIHU9dC50cmltKCk7Yz09PWpvLnZlcnRpY2FsJiYodT1mdW5jdGlvbih0KXtmb3IodmFyIGU9XCJcIixyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXQuY2hhckNvZGVBdChyKzEpfHxudWxsLGk9dC5jaGFyQ29kZUF0KHItMSl8fG51bGw7biYmd3IobikmJiFQYVt0W3IrMV1dfHxpJiZ3cihpKSYmIVBhW3Rbci0xXV18fCFQYVt0W3JdXT9lKz10W3JdOmUrPVBhW3Rbcl1dfXJldHVybiBlfSh1KSk7dmFyIGg9W10sZj17cG9zaXRpb25lZEdseXBoczpoLHRleHQ6dSx0b3A6c1sxXSxib3R0b206c1sxXSxsZWZ0OnNbMF0scmlnaHQ6c1swXSx3cml0aW5nTW9kZTpjfSxwPUNyLnByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dDtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwpe2Zvcih2YXIgYz0wLHU9LTE3LGg9MCxmPXQucG9zaXRpb25lZEdseXBocyxwPVwicmlnaHRcIj09PWE/MTpcImxlZnRcIj09PWE/MDouNSxkPTAsZz1yO2Q8Zy5sZW5ndGg7ZCs9MSl7dmFyIHY9Z1tkXTtpZigodj12LnRyaW0oKSkubGVuZ3RoKXtmb3IodmFyIG09Zi5sZW5ndGgseT0wO3k8di5sZW5ndGg7eSsrKXt2YXIgeD12LmNoYXJDb2RlQXQoeSksYj1lW3hdO2ImJihfcih4KSYmbyE9PWpvLmhvcml6b250YWw/KGYucHVzaCh7Z2x5cGg6eCx4OmMseTowLHZlcnRpY2FsOiEwfSksYys9bCtzKTooZi5wdXNoKHtnbHlwaDp4LHg6Yyx5OnUsdmVydGljYWw6ITF9KSxjKz1iLm1ldHJpY3MuYWR2YW5jZStzKSl9aWYoZi5sZW5ndGghPT1tKXt2YXIgXz1jLXM7aD1NYXRoLm1heChfLGgpLFhvKGYsZSxtLGYubGVuZ3RoLTEscCl9Yz0wLHUrPW59ZWxzZSB1Kz1ufXZhciB3PVdvKGkpLGs9dy5ob3Jpem9udGFsQWxpZ24sQT13LnZlcnRpY2FsQWxpZ247IWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcz0oZS1yKSppLGw9KC1uKm8rLjUpKmEsYz0wO2M8dC5sZW5ndGg7YysrKXRbY10ueCs9cyx0W2NdLnkrPWx9KGYscCxrLEEsaCxuLHIubGVuZ3RoKTt2YXIgVD1yLmxlbmd0aCpuO3QudG9wKz0tQSpULHQuYm90dG9tPXQudG9wK1QsdC5sZWZ0Kz0taypoLHQucmlnaHQ9dC5sZWZ0K2h9KGYsZSxwP3AodSxZbyh1LG8scixlKSk6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj0wLGk9MCxhPWU7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO3IucHVzaCh0LnN1YnN0cmluZyhuLG8pKSxuPW99cmV0dXJuIG48dC5sZW5ndGgmJnIucHVzaCh0LnN1YnN0cmluZyhuLHQubGVuZ3RoKSkscn0odSxZbyh1LG8scixlKSksbixpLGEsYyxvLGwpLCEhaC5sZW5ndGgmJmZ9LGUuc2hhcGVJY29uPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1XbyhyKSxpPW4uaG9yaXpvbnRhbEFsaWduLGE9bi52ZXJ0aWNhbEFsaWduLG89ZVswXSxzPWVbMV0sbD1vLXQuZGlzcGxheVNpemVbMF0qaSxjPWwrdC5kaXNwbGF5U2l6ZVswXSx1PXMtdC5kaXNwbGF5U2l6ZVsxXSphO3JldHVybntpbWFnZTp0LHRvcDp1LGJvdHRvbTp1K3QuZGlzcGxheVNpemVbMV0sbGVmdDpsLHJpZ2h0OmN9fSxlLmFsbG93c1ZlcnRpY2FsV3JpdGluZ01vZGU9eHIsZS5hbGxvd3NMZXR0ZXJTcGFjaW5nPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dDtlPHIubGVuZ3RoO2UrPTEpaWYoIWJyKHJbZV0uY2hhckNvZGVBdCgwKSkpcmV0dXJuITE7cmV0dXJuITB9LGUuZGVmYXVsdCQyNj1XaSxlLmRlZmF1bHQkMjc9UG8sZS5kZWZhdWx0JDI4PWVvLGUuZGVmYXVsdCQyOT1nYSxlLmRlZmF1bHQkMzA9aW8sZS5kZWZhdWx0JDMxPURvLGUuX19tb2R1bGVFeHBvcnRzPWdhLGUuZGVmYXVsdCQzMj1sLGUuX19tb2R1bGVFeHBvcnRzJDE9aW8sZS5wbHVnaW49Q3J9KSxpKDAsZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXt2YXIgcj10eXBlb2YgdDtpZihcIm51bWJlclwiPT09cnx8XCJib29sZWFuXCI9PT1yfHxcInN0cmluZ1wiPT09cnx8bnVsbD09dClyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCk7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBuPVwiW1wiLGk9MCxhPXQ7aTxhLmxlbmd0aDtpKz0xKW4rPWUoYVtpXSkrXCIsXCI7cmV0dXJuIG4rXCJdXCJ9Zm9yKHZhciBvPU9iamVjdC5rZXlzKHQpLnNvcnQoKSxzPVwie1wiLGw9MDtsPG8ubGVuZ3RoO2wrKylzKz1KU09OLnN0cmluZ2lmeShvW2xdKStcIjpcIitlKHRbb1tsXV0pK1wiLFwiO3JldHVybiBzK1wifVwifWZ1bmN0aW9uIHIocil7Zm9yKHZhciBuPVwiXCIsaT0wLGE9dC5kZWZhdWx0JDE4O2k8YS5sZW5ndGg7aSs9MSluKz1cIi9cIitlKHJbYVtpXV0pO3JldHVybiBufXZhciBuPWZ1bmN0aW9uKHQpe3QmJnRoaXMucmVwbGFjZSh0KX07ZnVuY3Rpb24gaSh0LGUscixuLGkpe2lmKHZvaWQgMD09PWUuc2VnbWVudClyZXR1cm4hMDtmb3IodmFyIGE9ZSxvPWUuc2VnbWVudCsxLHM9MDtzPi1yLzI7KXtpZigtLW88MClyZXR1cm4hMTtzLT10W29dLmRpc3QoYSksYT10W29dfXMrPXRbb10uZGlzdCh0W28rMV0pLG8rKztmb3IodmFyIGw9W10sYz0wO3M8ci8yOyl7dmFyIHU9dFtvLTFdLGg9dFtvXSxmPXRbbysxXTtpZighZilyZXR1cm4hMTt2YXIgcD11LmFuZ2xlVG8oaCktaC5hbmdsZVRvKGYpO2ZvcihwPU1hdGguYWJzKChwKzMqTWF0aC5QSSklKDIqTWF0aC5QSSktTWF0aC5QSSksbC5wdXNoKHtkaXN0YW5jZTpzLGFuZ2xlRGVsdGE6cH0pLGMrPXA7cy1sWzBdLmRpc3RhbmNlPm47KWMtPWwuc2hpZnQoKS5hbmdsZURlbHRhO2lmKGM+aSlyZXR1cm4hMTtvKysscys9aC5kaXN0KGYpfXJldHVybiEwfWZ1bmN0aW9uIGEoZSxyLG4sYSxvLHMsbCxjLHUpe3ZhciBoPWE/LjYqcypsOjAsZj1NYXRoLm1heChhP2EucmlnaHQtYS5sZWZ0OjAsbz9vLnJpZ2h0LW8ubGVmdDowKSxwPTA9PT1lWzBdLnh8fGVbMF0ueD09PXV8fDA9PT1lWzBdLnl8fGVbMF0ueT09PXU7cmV0dXJuIHItZipsPHIvNCYmKHI9ZipsK3IvNCksZnVuY3Rpb24gZShyLG4sYSxvLHMsbCxjLHUsaCl7Zm9yKHZhciBmPWwvMixwPTAsZD0wO2Q8ci5sZW5ndGgtMTtkKyspcCs9cltkXS5kaXN0KHJbZCsxXSk7Zm9yKHZhciBnPTAsdj1uLWEsbT1bXSx5PTA7eTxyLmxlbmd0aC0xO3krKyl7Zm9yKHZhciB4PXJbeV0sYj1yW3krMV0sXz14LmRpc3QoYiksdz1iLmFuZ2xlVG8oeCk7dithPGcrXzspe3ZhciBrPSgodis9YSktZykvXyxBPXQubnVtYmVyKHgueCxiLngsayksVD10Lm51bWJlcih4LnksYi55LGspO2lmKEE+PTAmJkE8aCYmVD49MCYmVDxoJiZ2LWY+PTAmJnYrZjw9cCl7dmFyIE09bmV3IHQuZGVmYXVsdCQyNShBLFQsdyx5KTtNLl9yb3VuZCgpLG8mJiFpKHIsTSxsLG8scyl8fG0ucHVzaChNKX19Zys9X31yZXR1cm4gdXx8bS5sZW5ndGh8fGN8fChtPWUocixnLzIsYSxvLHMsbCxjLCEwLGgpKSxtfShlLHA/ci8yKmMlcjooZi8yKzIqcykqbCpjJXIscixoLG4sZipsLHAsITEsdSl9bi5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbih0KXt0aGlzLl9sYXllckNvbmZpZ3M9e30sdGhpcy5fbGF5ZXJzPXt9LHRoaXMudXBkYXRlKHQsW10pfSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSxuKXtmb3IodmFyIGk9dGhpcyxhPTAsbz1lO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXTtpLl9sYXllckNvbmZpZ3Nbcy5pZF09czt2YXIgbD1pLl9sYXllcnNbcy5pZF09dC5kZWZhdWx0JDIyKHMpO2wuX2ZlYXR1cmVGaWx0ZXI9dC5kZWZhdWx0JDEzKGwuZmlsdGVyKX1mb3IodmFyIGM9MCx1PW47Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgaD11W2NdO2RlbGV0ZSBpLl9sYXllckNvbmZpZ3NbaF0sZGVsZXRlIGkuX2xheWVyc1toXX10aGlzLmZhbWlsaWVzQnlTb3VyY2U9e307Zm9yKHZhciBmPTAscD1mdW5jdGlvbih0KXtmb3IodmFyIGU9e30sbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT1yKHRbbl0pLGE9ZVtpXTthfHwoYT1lW2ldPVtdKSxhLnB1c2godFtuXSl9dmFyIG89W107Zm9yKHZhciBzIGluIGUpby5wdXNoKGVbc10pO3JldHVybiBvfSh0LnZhbHVlcyh0aGlzLl9sYXllckNvbmZpZ3MpKTtmPHAubGVuZ3RoO2YrPTEpe3ZhciBkPXBbZl0ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBpLl9sYXllcnNbdC5pZF19KSxnPWRbMF07aWYoXCJub25lXCIhPT1nLnZpc2liaWxpdHkpe3ZhciB2PWcuc291cmNlfHxcIlwiLG09aS5mYW1pbGllc0J5U291cmNlW3ZdO218fChtPWkuZmFtaWxpZXNCeVNvdXJjZVt2XT17fSk7dmFyIHk9Zy5zb3VyY2VMYXllcnx8XCJfZ2VvanNvblRpbGVMYXllclwiLHg9bVt5XTt4fHwoeD1tW3ldPVtdKSx4LnB1c2goZCl9fX07dmFyIG89ZnVuY3Rpb24oKXt0aGlzLm9wYWNpdHk9MCx0aGlzLnRhcmdldE9wYWNpdHk9MCx0aGlzLnRpbWU9MH07by5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbztyZXR1cm4gdC5vcGFjaXR5PXRoaXMub3BhY2l0eSx0LnRhcmdldE9wYWNpdHk9dGhpcy50YXJnZXRPcGFjaXR5LHQudGltZT10aGlzLnRpbWUsdH0sdC5yZWdpc3RlcihcIk9wYWNpdHlTdGF0ZVwiLG8pO3ZhciBzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7dmFyIGg9by50b3Aqcy1sLGY9by5ib3R0b20qcytsLHA9by5sZWZ0KnMtbCxkPW8ucmlnaHQqcytsO2lmKHRoaXMuYm94U3RhcnRJbmRleD10Lmxlbmd0aCxjKXt2YXIgZz1mLWgsdj1kLXA7Zz4wJiYoZz1NYXRoLm1heCgxMCpzLGcpLHRoaXMuX2FkZExpbmVDb2xsaXNpb25DaXJjbGVzKHQsZSxyLHIuc2VnbWVudCx2LGcsbixpLGEsdSkpfWVsc2UgdC5lbXBsYWNlQmFjayhyLngsci55LHAsaCxkLGYsbixpLGEsMCwwKTt0aGlzLmJveEVuZEluZGV4PXQubGVuZ3RofTtzLnByb3RvdHlwZS5fYWRkTGluZUNvbGxpc2lvbkNpcmNsZXM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyl7dmFyIHU9YS8yLGg9TWF0aC5mbG9vcihpL3UpLGY9MSsuNCpNYXRoLmxvZyhjKS9NYXRoLkxOMixwPU1hdGguZmxvb3IoaCpmLzIpLGQ9LWEvMixnPXIsdj1uKzEsbT1kLHk9LWkvMix4PXktaS80O2Rve2lmKC0tdjwwKXtpZihtPnkpcmV0dXJuO3Y9MDticmVha31tLT1lW3ZdLmRpc3QoZyksZz1lW3ZdfXdoaWxlKG0+eCk7Zm9yKHZhciBiPWVbdl0uZGlzdChlW3YrMV0pLF89LXA7XzxoK3A7XysrKXt2YXIgdz1fKnUsaz15K3c7aWYodzwwJiYoays9dyksdz5pJiYoays9dy1pKSwhKGs8bSkpe2Zvcig7bStiPGs7KXtpZihtKz1iLCsrdisxPj1lLmxlbmd0aClyZXR1cm47Yj1lW3ZdLmRpc3QoZVt2KzFdKX12YXIgQT1rLW0sVD1lW3ZdLE09ZVt2KzFdLnN1YihUKS5fdW5pdCgpLl9tdWx0KEEpLl9hZGQoVCkuX3JvdW5kKCksUz1NYXRoLmFicyhrLWQpPHU/MDouOCooay1kKTt0LmVtcGxhY2VCYWNrKE0ueCxNLnksLWEvMiwtYS8yLGEvMixhLzIsbyxzLGwsYS8yLFMpfX19O3ZhciBsPXUsYz11O2Z1bmN0aW9uIHUodCxlKXtpZighKHRoaXMgaW5zdGFuY2VvZiB1KSlyZXR1cm4gbmV3IHUodCxlKTtpZih0aGlzLmRhdGE9dHx8W10sdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmNvbXBhcmU9ZXx8aCx0aGlzLmxlbmd0aD4wKWZvcih2YXIgcj0odGhpcy5sZW5ndGg+PjEpLTE7cj49MDtyLS0pdGhpcy5fZG93bihyKX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTowfWZ1bmN0aW9uIGYoZSxyLG4pe3ZvaWQgMD09PXImJihyPTEpLHZvaWQgMD09PW4mJihuPSExKTtmb3IodmFyIGk9MS8wLGE9MS8wLG89LTEvMCxzPS0xLzAsYz1lWzBdLHU9MDt1PGMubGVuZ3RoO3UrKyl7dmFyIGg9Y1t1XTsoIXV8fGgueDxpKSYmKGk9aC54KSwoIXV8fGgueTxhKSYmKGE9aC55KSwoIXV8fGgueD5vKSYmKG89aC54KSwoIXV8fGgueT5zKSYmKHM9aC55KX12YXIgZj1vLWksZz1zLWEsdj1NYXRoLm1pbihmLGcpLG09di8yLHk9bmV3IGwobnVsbCxwKTtpZigwPT09dilyZXR1cm4gbmV3IHQuZGVmYXVsdCQxKGksYSk7Zm9yKHZhciB4PWk7eDxvO3grPXYpZm9yKHZhciBiPWE7YjxzO2IrPXYpeS5wdXNoKG5ldyBkKHgrbSxiK20sbSxlKSk7Zm9yKHZhciBfPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MCxuPTAsaT10WzBdLGE9MCxvPWkubGVuZ3RoLHM9by0xO2E8bztzPWErKyl7dmFyIGw9aVthXSxjPWlbc10sdT1sLngqYy55LWMueCpsLnk7cis9KGwueCtjLngpKnUsbis9KGwueStjLnkpKnUsZSs9Myp1fXJldHVybiBuZXcgZChyL2Usbi9lLDAsdCl9KGUpLHc9eS5sZW5ndGg7eS5sZW5ndGg7KXt2YXIgaz15LnBvcCgpOyhrLmQ+Xy5kfHwhXy5kKSYmKF89ayxuJiZjb25zb2xlLmxvZyhcImZvdW5kIGJlc3QgJWQgYWZ0ZXIgJWQgcHJvYmVzXCIsTWF0aC5yb3VuZCgxZTQqay5kKS8xZTQsdykpLGsubWF4LV8uZDw9cnx8KG09ay5oLzIseS5wdXNoKG5ldyBkKGsucC54LW0say5wLnktbSxtLGUpKSx5LnB1c2gobmV3IGQoay5wLngrbSxrLnAueS1tLG0sZSkpLHkucHVzaChuZXcgZChrLnAueC1tLGsucC55K20sbSxlKSkseS5wdXNoKG5ldyBkKGsucC54K20say5wLnkrbSxtLGUpKSx3Kz00KX1yZXR1cm4gbiYmKGNvbnNvbGUubG9nKFwibnVtIHByb2JlczogXCIrdyksY29uc29sZS5sb2coXCJiZXN0IGRpc3RhbmNlOiBcIitfLmQpKSxfLnB9ZnVuY3Rpb24gcCh0LGUpe3JldHVybiBlLm1heC10Lm1heH1mdW5jdGlvbiBkKGUscixuLGkpe3RoaXMucD1uZXcgdC5kZWZhdWx0JDEoZSxyKSx0aGlzLmg9bix0aGlzLmQ9ZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49ITEsaT0xLzAsYT0wO2E8ci5sZW5ndGg7YSsrKWZvcih2YXIgbz1yW2FdLHM9MCxsPW8ubGVuZ3RoLGM9bC0xO3M8bDtjPXMrKyl7dmFyIHU9b1tzXSxoPW9bY107dS55PmUueSE9aC55PmUueSYmZS54PChoLngtdS54KSooZS55LXUueSkvKGgueS11LnkpK3UueCYmKG49IW4pLGk9TWF0aC5taW4oaSx0LmRpc3RUb1NlZ21lbnRTcXVhcmVkKGUsdSxoKSl9cmV0dXJuKG4/MTotMSkqTWF0aC5zcXJ0KGkpfSh0aGlzLnAsaSksdGhpcy5tYXg9dGhpcy5kK3RoaXMuaCpNYXRoLlNRUlQyfWZ1bmN0aW9uIGcoZSxyLG4saSxhLG8pe2UuY3JlYXRlQXJyYXlzKCksZS5zeW1ib2xJbnN0YW5jZXM9W107dmFyIHM9NTEyKmUub3ZlcnNjYWxpbmc7ZS50aWxlUGl4ZWxSYXRpbz10LmRlZmF1bHQkOC9zLGUuY29tcGFyZVRleHQ9e30sZS5pY29uc05lZWRMaW5lYXI9ITE7dmFyIGw9ZS5sYXllcnNbMF0ubGF5b3V0LGM9ZS5sYXllcnNbMF0uX3VuZXZhbHVhdGVkTGF5b3V0Ll92YWx1ZXMsdT17fTtpZihcImNvbXBvc2l0ZVwiPT09ZS50ZXh0U2l6ZURhdGEuZnVuY3Rpb25UeXBlKXt2YXIgaD1lLnRleHRTaXplRGF0YS56b29tUmFuZ2UsZj1oLm1pbixwPWgubWF4O3UuY29tcG9zaXRlVGV4dFNpemVzPVtjW1widGV4dC1zaXplXCJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHQuZGVmYXVsdCQxNihmKSksY1tcInRleHQtc2l6ZVwiXS5wb3NzaWJseUV2YWx1YXRlKG5ldyB0LmRlZmF1bHQkMTYocCkpXX1pZihcImNvbXBvc2l0ZVwiPT09ZS5pY29uU2l6ZURhdGEuZnVuY3Rpb25UeXBlKXt2YXIgZD1lLmljb25TaXplRGF0YS56b29tUmFuZ2UsZz1kLm1pbixtPWQubWF4O3UuY29tcG9zaXRlSWNvblNpemVzPVtjW1wiaWNvbi1zaXplXCJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHQuZGVmYXVsdCQxNihnKSksY1tcImljb24tc2l6ZVwiXS5wb3NzaWJseUV2YWx1YXRlKG5ldyB0LmRlZmF1bHQkMTYobSkpXX11LmxheW91dFRleHRTaXplPWNbXCJ0ZXh0LXNpemVcIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgdC5kZWZhdWx0JDE2KGUuem9vbSsxKSksdS5sYXlvdXRJY29uU2l6ZT1jW1wiaWNvbi1zaXplXCJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHQuZGVmYXVsdCQxNihlLnpvb20rMSkpLHUudGV4dE1heFNpemU9Y1tcInRleHQtc2l6ZVwiXS5wb3NzaWJseUV2YWx1YXRlKG5ldyB0LmRlZmF1bHQkMTYoMTgpKTtmb3IodmFyIHk9MjQqbC5nZXQoXCJ0ZXh0LWxpbmUtaGVpZ2h0XCIpLHg9XCJtYXBcIj09PWwuZ2V0KFwidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnRcIikmJlwibGluZVwiPT09bC5nZXQoXCJzeW1ib2wtcGxhY2VtZW50XCIpLGI9bC5nZXQoXCJ0ZXh0LWtlZXAtdXByaWdodFwiKSxfPTAsdz1lLmZlYXR1cmVzO188dy5sZW5ndGg7Xys9MSl7dmFyIGs9d1tfXSxBPWwuZ2V0KFwidGV4dC1mb250XCIpLmV2YWx1YXRlKGspLmpvaW4oXCIsXCIpLFQ9cltBXXx8e30sTT1uW0FdfHx7fSxTPXt9LEU9ay50ZXh0O2lmKEUpe3ZhciBDPWwuZ2V0KFwidGV4dC1vZmZzZXRcIikuZXZhbHVhdGUoaykubWFwKGZ1bmN0aW9uKHQpe3JldHVybiAyNCp0fSksTD0yNCpsLmdldChcInRleHQtbGV0dGVyLXNwYWNpbmdcIikuZXZhbHVhdGUoayksej10LmFsbG93c0xldHRlclNwYWNpbmcoRSk/TDowLE89bC5nZXQoXCJ0ZXh0LWFuY2hvclwiKS5ldmFsdWF0ZShrKSxJPWwuZ2V0KFwidGV4dC1qdXN0aWZ5XCIpLmV2YWx1YXRlKGspLEQ9XCJsaW5lXCIhPT1sLmdldChcInN5bWJvbC1wbGFjZW1lbnRcIik/MjQqbC5nZXQoXCJ0ZXh0LW1heC13aWR0aFwiKS5ldmFsdWF0ZShrKTowO1MuaG9yaXpvbnRhbD10LnNoYXBlVGV4dChFLFQsRCx5LE8sSSx6LEMsMjQsdC5Xcml0aW5nTW9kZS5ob3Jpem9udGFsKSx0LmFsbG93c1ZlcnRpY2FsV3JpdGluZ01vZGUoRSkmJngmJmImJihTLnZlcnRpY2FsPXQuc2hhcGVUZXh0KEUsVCxELHksTyxJLHosQywyNCx0LldyaXRpbmdNb2RlLnZlcnRpY2FsKSl9dmFyIFA9dm9pZCAwO2lmKGsuaWNvbil7dmFyIFI9aVtrLmljb25dO1ImJihQPXQuc2hhcGVJY29uKGFbay5pY29uXSxsLmdldChcImljb24tb2Zmc2V0XCIpLmV2YWx1YXRlKGspLGwuZ2V0KFwiaWNvbi1hbmNob3JcIikuZXZhbHVhdGUoaykpLHZvaWQgMD09PWUuc2RmSWNvbnM/ZS5zZGZJY29ucz1SLnNkZjplLnNkZkljb25zIT09Ui5zZGYmJnQud2Fybk9uY2UoXCJTdHlsZSBzaGVldCB3YXJuaW5nOiBDYW5ub3QgbWl4IFNERiBhbmQgbm9uLVNERiBpY29ucyBpbiBvbmUgYnVmZmVyXCIpLFIucGl4ZWxSYXRpbyE9PWUucGl4ZWxSYXRpbz9lLmljb25zTmVlZExpbmVhcj0hMDowIT09bC5nZXQoXCJpY29uLXJvdGF0ZVwiKS5jb25zdGFudE9yKDEpJiYoZS5pY29uc05lZWRMaW5lYXI9ITApKX0oUy5ob3Jpem9udGFsfHxQKSYmdihlLGssUyxQLE0sdSl9byYmZS5nZW5lcmF0ZUNvbGxpc2lvbkRlYnVnQnVmZmVycygpfWZ1bmN0aW9uIHYoZSxyLG4saSxsLGMpe3ZhciB1PWMubGF5b3V0VGV4dFNpemUuZXZhbHVhdGUociksaD1jLmxheW91dEljb25TaXplLmV2YWx1YXRlKHIpLHA9Yy50ZXh0TWF4U2l6ZS5ldmFsdWF0ZShyKTt2b2lkIDA9PT1wJiYocD11KTt2YXIgZD1lLmxheWVyc1swXS5sYXlvdXQsZz1kLmdldChcInRleHQtb2Zmc2V0XCIpLmV2YWx1YXRlKHIpLHY9ZC5nZXQoXCJpY29uLW9mZnNldFwiKS5ldmFsdWF0ZShyKSx4PXUvMjQsYj1lLnRpbGVQaXhlbFJhdGlvKngsXz1lLnRpbGVQaXhlbFJhdGlvKnAvMjQsdz1lLnRpbGVQaXhlbFJhdGlvKmgsaz1lLnRpbGVQaXhlbFJhdGlvKmQuZ2V0KFwic3ltYm9sLXNwYWNpbmdcIiksQT1kLmdldChcInRleHQtcGFkZGluZ1wiKSplLnRpbGVQaXhlbFJhdGlvLFQ9ZC5nZXQoXCJpY29uLXBhZGRpbmdcIikqZS50aWxlUGl4ZWxSYXRpbyxNPWQuZ2V0KFwidGV4dC1tYXgtYW5nbGVcIikvMTgwKk1hdGguUEksUz1cIm1hcFwiPT09ZC5nZXQoXCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudFwiKSYmXCJsaW5lXCI9PT1kLmdldChcInN5bWJvbC1wbGFjZW1lbnRcIiksRT1cIm1hcFwiPT09ZC5nZXQoXCJpY29uLXJvdGF0aW9uLWFsaWdubWVudFwiKSYmXCJsaW5lXCI9PT1kLmdldChcInN5bWJvbC1wbGFjZW1lbnRcIiksQz1rLzIsTD1mdW5jdGlvbihhLHUpe3UueDwwfHx1Lng+PXQuZGVmYXVsdCQ4fHx1Lnk8MHx8dS55Pj10LmRlZmF1bHQkOHx8ZS5zeW1ib2xJbnN0YW5jZXMucHVzaChmdW5jdGlvbihlLHIsbixpLGEsbCxjLHUsaCxmLHAsZCxnLHYseSx4LGIsXyx3LGssQSl7dmFyIFQsTSxTPWUuYWRkVG9MaW5lVmVydGV4QXJyYXkocixuKSxFPTAsQz0wLEw9MCx6PWkuaG9yaXpvbnRhbD9pLmhvcml6b250YWwudGV4dDpcIlwiLE89W107aS5ob3Jpem9udGFsJiYoVD1uZXcgcyhjLG4scix1LGgsZixpLmhvcml6b250YWwscCxkLGcsZS5vdmVyc2NhbGluZyksQys9bShlLHIsaS5ob3Jpem9udGFsLGwsZyx3LHYsUyxpLnZlcnRpY2FsP3QuV3JpdGluZ01vZGUuaG9yaXpvbnRhbDp0LldyaXRpbmdNb2RlLmhvcml6b250YWxPbmx5LE8sayxBKSxpLnZlcnRpY2FsJiYoTCs9bShlLHIsaS52ZXJ0aWNhbCxsLGcsdyx2LFMsdC5Xcml0aW5nTW9kZS52ZXJ0aWNhbCxPLGssQSkpKTt2YXIgST1UP1QuYm94U3RhcnRJbmRleDplLmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aCxEPVQ/VC5ib3hFbmRJbmRleDplLmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDtpZihhKXt2YXIgUD1mdW5jdGlvbihlLHIsbixpLGEsbyl7dmFyIHMsbCxjLHUsaD1yLmltYWdlLGY9bi5sYXlvdXQscD1yLnRvcC0xL2gucGl4ZWxSYXRpbyxkPXIubGVmdC0xL2gucGl4ZWxSYXRpbyxnPXIuYm90dG9tKzEvaC5waXhlbFJhdGlvLHY9ci5yaWdodCsxL2gucGl4ZWxSYXRpbztpZihcIm5vbmVcIiE9PWYuZ2V0KFwiaWNvbi10ZXh0LWZpdFwiKSYmYSl7dmFyIG09di1kLHk9Zy1wLHg9Zi5nZXQoXCJ0ZXh0LXNpemVcIikuZXZhbHVhdGUobykvMjQsYj1hLmxlZnQqeCxfPWEucmlnaHQqeCx3PWEudG9wKngsaz1fLWIsQT1hLmJvdHRvbSp4LXcsVD1mLmdldChcImljb24tdGV4dC1maXQtcGFkZGluZ1wiKVswXSxNPWYuZ2V0KFwiaWNvbi10ZXh0LWZpdC1wYWRkaW5nXCIpWzFdLFM9Zi5nZXQoXCJpY29uLXRleHQtZml0LXBhZGRpbmdcIilbMl0sRT1mLmdldChcImljb24tdGV4dC1maXQtcGFkZGluZ1wiKVszXSxDPVwid2lkdGhcIj09PWYuZ2V0KFwiaWNvbi10ZXh0LWZpdFwiKT8uNSooQS15KTowLEw9XCJoZWlnaHRcIj09PWYuZ2V0KFwiaWNvbi10ZXh0LWZpdFwiKT8uNSooay1tKTowLHo9XCJ3aWR0aFwiPT09Zi5nZXQoXCJpY29uLXRleHQtZml0XCIpfHxcImJvdGhcIj09PWYuZ2V0KFwiaWNvbi10ZXh0LWZpdFwiKT9rOm0sTz1cImhlaWdodFwiPT09Zi5nZXQoXCJpY29uLXRleHQtZml0XCIpfHxcImJvdGhcIj09PWYuZ2V0KFwiaWNvbi10ZXh0LWZpdFwiKT9BOnk7cz1uZXcgdC5kZWZhdWx0JDEoYitMLUUsdytDLVQpLGw9bmV3IHQuZGVmYXVsdCQxKGIrTCtNK3osdytDLVQpLGM9bmV3IHQuZGVmYXVsdCQxKGIrTCtNK3osdytDK1MrTyksdT1uZXcgdC5kZWZhdWx0JDEoYitMLUUsdytDK1MrTyl9ZWxzZSBzPW5ldyB0LmRlZmF1bHQkMShkLHApLGw9bmV3IHQuZGVmYXVsdCQxKHYscCksYz1uZXcgdC5kZWZhdWx0JDEodixnKSx1PW5ldyB0LmRlZmF1bHQkMShkLGcpO3ZhciBJPW4ubGF5b3V0LmdldChcImljb24tcm90YXRlXCIpLmV2YWx1YXRlKG8pKk1hdGguUEkvMTgwO2lmKEkpe3ZhciBEPU1hdGguc2luKEkpLFA9TWF0aC5jb3MoSSksUj1bUCwtRCxELFBdO3MuX21hdE11bHQoUiksbC5fbWF0TXVsdChSKSx1Ll9tYXRNdWx0KFIpLGMuX21hdE11bHQoUil9cmV0dXJuW3t0bDpzLHRyOmwsYmw6dSxicjpjLHRleDpoLnBhZGRlZFJlY3Qsd3JpdGluZ01vZGU6dm9pZCAwLGdseXBoT2Zmc2V0OlswLDBdfV19KDAsYSxsLDAsaS5ob3Jpem9udGFsLHcpO009bmV3IHMoYyxuLHIsdSxoLGYsYSx5LHgsITEsZS5vdmVyc2NhbGluZyksRT00KlAubGVuZ3RoO3ZhciBSPWUuaWNvblNpemVEYXRhLEY9bnVsbDtcInNvdXJjZVwiPT09Ui5mdW5jdGlvblR5cGU/Rj1bMTAqbC5sYXlvdXQuZ2V0KFwiaWNvbi1zaXplXCIpLmV2YWx1YXRlKHcpXTpcImNvbXBvc2l0ZVwiPT09Ui5mdW5jdGlvblR5cGUmJihGPVsxMCpBLmNvbXBvc2l0ZUljb25TaXplc1swXS5ldmFsdWF0ZSh3KSwxMCpBLmNvbXBvc2l0ZUljb25TaXplc1sxXS5ldmFsdWF0ZSh3KV0pLGUuYWRkU3ltYm9scyhlLmljb24sUCxGLF8sYix3LCExLHIsUy5saW5lU3RhcnRJbmRleCxTLmxpbmVMZW5ndGgpfXZhciBCPU0/TS5ib3hTdGFydEluZGV4OmUuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoLE49TT9NLmJveEVuZEluZGV4OmUuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoO3JldHVybiBlLmdseXBoT2Zmc2V0QXJyYXkubGVuZ3RoPj10LmRlZmF1bHQkMTQuTUFYX0dMWVBIUyYmdC53YXJuT25jZShcIlRvbyBtYW55IGdseXBocyBiZWluZyByZW5kZXJlZCBpbiBhIHRpbGUuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvMjkwN1wiKSx7a2V5OnosdGV4dEJveFN0YXJ0SW5kZXg6SSx0ZXh0Qm94RW5kSW5kZXg6RCxpY29uQm94U3RhcnRJbmRleDpCLGljb25Cb3hFbmRJbmRleDpOLHRleHRPZmZzZXQ6dixpY29uT2Zmc2V0Ol8sYW5jaG9yOnIsbGluZTpuLGZlYXR1cmVJbmRleDp1LGZlYXR1cmU6dyxudW1HbHlwaFZlcnRpY2VzOkMsbnVtVmVydGljYWxHbHlwaFZlcnRpY2VzOkwsbnVtSWNvblZlcnRpY2VzOkUsdGV4dE9wYWNpdHlTdGF0ZTpuZXcgbyxpY29uT3BhY2l0eVN0YXRlOm5ldyBvLGlzRHVwbGljYXRlOiExLHBsYWNlZFRleHRTeW1ib2xJbmRpY2VzOk8sY3Jvc3NUaWxlSUQ6MH19KGUsdSxhLG4saSxlLmxheWVyc1swXSxlLmNvbGxpc2lvbkJveEFycmF5LHIuaW5kZXgsci5zb3VyY2VMYXllckluZGV4LGUuaW5kZXgsYixBLFMsZyx3LFQsRSx2LHIsbCxjKSl9O2lmKFwibGluZVwiPT09ZC5nZXQoXCJzeW1ib2wtcGxhY2VtZW50XCIpKWZvcih2YXIgej0wLE89ZnVuY3Rpb24oZSxyLG4saSxhKXtmb3IodmFyIG89W10scz0wO3M8ZS5sZW5ndGg7cysrKWZvcih2YXIgbD1lW3NdLGM9dm9pZCAwLHU9MDt1PGwubGVuZ3RoLTE7dSsrKXt2YXIgaD1sW3VdLGY9bFt1KzFdO2gueDwwJiZmLng8MHx8KGgueDwwP2g9bmV3IHQuZGVmYXVsdCQxKDAsaC55KyhmLnktaC55KSooKDAtaC54KS8oZi54LWgueCkpKS5fcm91bmQoKTpmLng8MCYmKGY9bmV3IHQuZGVmYXVsdCQxKDAsaC55KyhmLnktaC55KSooKDAtaC54KS8oZi54LWgueCkpKS5fcm91bmQoKSksaC55PDAmJmYueTwwfHwoaC55PDA/aD1uZXcgdC5kZWZhdWx0JDEoaC54KyhmLngtaC54KSooKDAtaC55KS8oZi55LWgueSkpLDApLl9yb3VuZCgpOmYueTwwJiYoZj1uZXcgdC5kZWZhdWx0JDEoaC54KyhmLngtaC54KSooKDAtaC55KS8oZi55LWgueSkpLDApLl9yb3VuZCgpKSxoLng+PWkmJmYueD49aXx8KGgueD49aT9oPW5ldyB0LmRlZmF1bHQkMShpLGgueSsoZi55LWgueSkqKChpLWgueCkvKGYueC1oLngpKSkuX3JvdW5kKCk6Zi54Pj1pJiYoZj1uZXcgdC5kZWZhdWx0JDEoaSxoLnkrKGYueS1oLnkpKigoaS1oLngpLyhmLngtaC54KSkpLl9yb3VuZCgpKSxoLnk+PWEmJmYueT49YXx8KGgueT49YT9oPW5ldyB0LmRlZmF1bHQkMShoLngrKGYueC1oLngpKigoYS1oLnkpLyhmLnktaC55KSksYSkuX3JvdW5kKCk6Zi55Pj1hJiYoZj1uZXcgdC5kZWZhdWx0JDEoaC54KyhmLngtaC54KSooKGEtaC55KS8oZi55LWgueSkpLGEpLl9yb3VuZCgpKSxjJiZoLmVxdWFscyhjW2MubGVuZ3RoLTFdKXx8KGM9W2hdLG8ucHVzaChjKSksYy5wdXNoKGYpKSkpKX1yZXR1cm4gb30oci5nZW9tZXRyeSwwLDAsdC5kZWZhdWx0JDgsdC5kZWZhdWx0JDgpO3o8Ty5sZW5ndGg7eis9MSlmb3IodmFyIEk9T1t6XSxEPTAsUD1hKEksayxNLG4udmVydGljYWx8fG4uaG9yaXpvbnRhbCxpLDI0LF8sZS5vdmVyc2NhbGluZyx0LmRlZmF1bHQkOCk7RDxQLmxlbmd0aDtEKz0xKXt2YXIgUj1QW0RdLEY9bi5ob3Jpem9udGFsO0YmJnkoZSxGLnRleHQsQyxSKXx8TChJLFIpfWVsc2UgaWYoXCJQb2x5Z29uXCI9PT1yLnR5cGUpZm9yKHZhciBCPTAsTj10LmRlZmF1bHQkMjYoci5nZW9tZXRyeSwwKTtCPE4ubGVuZ3RoO0IrPTEpe3ZhciBqPU5bQl0sVj1mKGosMTYpO0woalswXSxuZXcgdC5kZWZhdWx0JDI1KFYueCxWLnksMCkpfWVsc2UgaWYoXCJMaW5lU3RyaW5nXCI9PT1yLnR5cGUpZm9yKHZhciBVPTAscT1yLmdlb21ldHJ5O1U8cS5sZW5ndGg7VSs9MSl7dmFyIEg9cVtVXTtMKEgsbmV3IHQuZGVmYXVsdCQyNShIWzBdLngsSFswXS55LDApKX1lbHNlIGlmKFwiUG9pbnRcIj09PXIudHlwZSlmb3IodmFyIEc9MCxZPXIuZ2VvbWV0cnk7RzxZLmxlbmd0aDtHKz0xKWZvcih2YXIgVz0wLFg9WVtHXTtXPFgubGVuZ3RoO1crPTEpe3ZhciBaPVhbV107TChbWl0sbmV3IHQuZGVmYXVsdCQyNShaLngsWi55LDApKX19ZnVuY3Rpb24gbShlLHIsbixpLGEsbyxzLGwsYyx1LGgsZil7dmFyIHA9ZnVuY3Rpb24oZSxyLG4saSxhLG8pe2Zvcih2YXIgcz1uLmxheW91dC5nZXQoXCJ0ZXh0LXJvdGF0ZVwiKS5ldmFsdWF0ZShhKSpNYXRoLlBJLzE4MCxsPW4ubGF5b3V0LmdldChcInRleHQtb2Zmc2V0XCIpLmV2YWx1YXRlKGEpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gMjQqdH0pLGM9ci5wb3NpdGlvbmVkR2x5cGhzLHU9W10saD0wO2g8Yy5sZW5ndGg7aCsrKXt2YXIgZj1jW2hdLHA9b1tmLmdseXBoXTtpZihwKXt2YXIgZD1wLnJlY3Q7aWYoZCl7dmFyIGc9dC5HTFlQSF9QQkZfQk9SREVSKzEsdj1wLm1ldHJpY3MuYWR2YW5jZS8yLG09aT9bZi54K3YsZi55XTpbMCwwXSx5PWk/WzAsMF06W2YueCt2K2xbMF0sZi55K2xbMV1dLHg9cC5tZXRyaWNzLmxlZnQtZy12K3lbMF0sYj0tcC5tZXRyaWNzLnRvcC1nK3lbMV0sXz14K2Qudyx3PWIrZC5oLGs9bmV3IHQuZGVmYXVsdCQxKHgsYiksQT1uZXcgdC5kZWZhdWx0JDEoXyxiKSxUPW5ldyB0LmRlZmF1bHQkMSh4LHcpLE09bmV3IHQuZGVmYXVsdCQxKF8sdyk7aWYoaSYmZi52ZXJ0aWNhbCl7dmFyIFM9bmV3IHQuZGVmYXVsdCQxKC12LHYpLEU9LU1hdGguUEkvMixDPW5ldyB0LmRlZmF1bHQkMSg1LDApO2suX3JvdGF0ZUFyb3VuZChFLFMpLl9hZGQoQyksQS5fcm90YXRlQXJvdW5kKEUsUykuX2FkZChDKSxULl9yb3RhdGVBcm91bmQoRSxTKS5fYWRkKEMpLE0uX3JvdGF0ZUFyb3VuZChFLFMpLl9hZGQoQyl9aWYocyl7dmFyIEw9TWF0aC5zaW4ocyksej1NYXRoLmNvcyhzKSxPPVt6LC1MLEwsel07ay5fbWF0TXVsdChPKSxBLl9tYXRNdWx0KE8pLFQuX21hdE11bHQoTyksTS5fbWF0TXVsdChPKX11LnB1c2goe3RsOmssdHI6QSxibDpULGJyOk0sdGV4OmQsd3JpdGluZ01vZGU6ci53cml0aW5nTW9kZSxnbHlwaE9mZnNldDptfSl9fX1yZXR1cm4gdX0oMCxuLGksYSxvLGgpLGQ9ZS50ZXh0U2l6ZURhdGEsZz1udWxsO3JldHVyblwic291cmNlXCI9PT1kLmZ1bmN0aW9uVHlwZT9nPVsxMCppLmxheW91dC5nZXQoXCJ0ZXh0LXNpemVcIikuZXZhbHVhdGUobyldOlwiY29tcG9zaXRlXCI9PT1kLmZ1bmN0aW9uVHlwZSYmKGc9WzEwKmYuY29tcG9zaXRlVGV4dFNpemVzWzBdLmV2YWx1YXRlKG8pLDEwKmYuY29tcG9zaXRlVGV4dFNpemVzWzFdLmV2YWx1YXRlKG8pXSksZS5hZGRTeW1ib2xzKGUudGV4dCxwLGcscyxhLG8sYyxyLGwubGluZVN0YXJ0SW5kZXgsbC5saW5lTGVuZ3RoKSx1LnB1c2goZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5Lmxlbmd0aC0xKSw0KnAubGVuZ3RofWZ1bmN0aW9uIHkodCxlLHIsbil7dmFyIGk9dC5jb21wYXJlVGV4dDtpZihlIGluIGkpe2Zvcih2YXIgYT1pW2VdLG89YS5sZW5ndGgtMTtvPj0wO28tLSlpZihuLmRpc3QoYVtvXSk8cilyZXR1cm4hMH1lbHNlIGlbZV09W107cmV0dXJuIGlbZV0ucHVzaChuKSwhMX11LnByb3RvdHlwZT17cHVzaDpmdW5jdGlvbih0KXt0aGlzLmRhdGEucHVzaCh0KSx0aGlzLmxlbmd0aCsrLHRoaXMuX3VwKHRoaXMubGVuZ3RoLTEpfSxwb3A6ZnVuY3Rpb24oKXtpZigwIT09dGhpcy5sZW5ndGgpe3ZhciB0PXRoaXMuZGF0YVswXTtyZXR1cm4gdGhpcy5sZW5ndGgtLSx0aGlzLmxlbmd0aD4wJiYodGhpcy5kYXRhWzBdPXRoaXMuZGF0YVt0aGlzLmxlbmd0aF0sdGhpcy5fZG93bigwKSksdGhpcy5kYXRhLnBvcCgpLHR9fSxwZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YVswXX0sX3VwOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmRhdGEscj10aGlzLmNvbXBhcmUsbj1lW3RdO3Q+MDspe3ZhciBpPXQtMT4+MSxhPWVbaV07aWYocihuLGEpPj0wKWJyZWFrO2VbdF09YSx0PWl9ZVt0XT1ufSxfZG93bjpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5kYXRhLHI9dGhpcy5jb21wYXJlLG49dGhpcy5sZW5ndGg+PjEsaT1lW3RdO3Q8bjspe3ZhciBhPTErKHQ8PDEpLG89YSsxLHM9ZVthXTtpZihvPHRoaXMubGVuZ3RoJiZyKGVbb10scyk8MCYmKGE9byxzPWVbb10pLHIocyxpKT49MClicmVhaztlW3RdPXMsdD1hfWVbdF09aX19LGwuZGVmYXVsdD1jO3ZhciB4PWZ1bmN0aW9uKGUpe3ZhciByPW5ldyB0LkFscGhhSW1hZ2Uoe3dpZHRoOjAsaGVpZ2h0OjB9KSxuPXt9LGk9bmV3IHQuZGVmYXVsdCQyKDAsMCx7YXV0b1Jlc2l6ZTohMH0pO2Zvcih2YXIgYSBpbiBlKXt2YXIgbz1lW2FdLHM9blthXT17fTtmb3IodmFyIGwgaW4gbyl7dmFyIGM9b1srbF07aWYoYyYmMCE9PWMuYml0bWFwLndpZHRoJiYwIT09Yy5iaXRtYXAuaGVpZ2h0KXt2YXIgdT1pLnBhY2tPbmUoYy5iaXRtYXAud2lkdGgrMixjLmJpdG1hcC5oZWlnaHQrMik7ci5yZXNpemUoe3dpZHRoOmkudyxoZWlnaHQ6aS5ofSksdC5BbHBoYUltYWdlLmNvcHkoYy5iaXRtYXAscix7eDowLHk6MH0se3g6dS54KzEseTp1LnkrMX0sYy5iaXRtYXApLHNbbF09e3JlY3Q6dSxtZXRyaWNzOmMubWV0cmljc319fX1pLnNocmluaygpLHIucmVzaXplKHt3aWR0aDppLncsaGVpZ2h0OmkuaH0pLHRoaXMuaW1hZ2U9cix0aGlzLnBvc2l0aW9ucz1ufTt0LnJlZ2lzdGVyKFwiR2x5cGhBdGxhc1wiLHgpO3ZhciBiPWZ1bmN0aW9uKGUpe3RoaXMudGlsZUlEPW5ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS50aWxlSUQub3ZlcnNjYWxlZFosZS50aWxlSUQud3JhcCxlLnRpbGVJRC5jYW5vbmljYWwueixlLnRpbGVJRC5jYW5vbmljYWwueCxlLnRpbGVJRC5jYW5vbmljYWwueSksdGhpcy51aWQ9ZS51aWQsdGhpcy56b29tPWUuem9vbSx0aGlzLnBpeGVsUmF0aW89ZS5waXhlbFJhdGlvLHRoaXMudGlsZVNpemU9ZS50aWxlU2l6ZSx0aGlzLnNvdXJjZT1lLnNvdXJjZSx0aGlzLm92ZXJzY2FsaW5nPXRoaXMudGlsZUlELm92ZXJzY2FsZUZhY3RvcigpLHRoaXMuc2hvd0NvbGxpc2lvbkJveGVzPWUuc2hvd0NvbGxpc2lvbkJveGVzLHRoaXMuY29sbGVjdFJlc291cmNlVGltaW5nPSEhZS5jb2xsZWN0UmVzb3VyY2VUaW1pbmd9O2Z1bmN0aW9uIF8oZSxyKXtmb3IodmFyIG49bmV3IHQuZGVmYXVsdCQxNihyKSxpPTAsYT1lO2k8YS5sZW5ndGg7aSs9MSlhW2ldLnJlY2FsY3VsYXRlKG4pfWIucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXRoaXM7dGhpcy5zdGF0dXM9XCJwYXJzaW5nXCIsdGhpcy5kYXRhPWUsdGhpcy5jb2xsaXNpb25Cb3hBcnJheT1uZXcgdC5Db2xsaXNpb25Cb3hBcnJheTt2YXIgbz1uZXcgdC5kZWZhdWx0JDI3KE9iamVjdC5rZXlzKGUubGF5ZXJzKS5zb3J0KCkpLHM9bmV3IHQuZGVmYXVsdCQxMSh0aGlzLnRpbGVJRCk7cy5idWNrZXRMYXllcklEcz1bXTt2YXIgbCxjLHUsaD17fSxmPXtmZWF0dXJlSW5kZXg6cyxpY29uRGVwZW5kZW5jaWVzOnt9LGdseXBoRGVwZW5kZW5jaWVzOnt9fSxwPXIuZmFtaWxpZXNCeVNvdXJjZVt0aGlzLnNvdXJjZV07Zm9yKHZhciBkIGluIHApe3ZhciB2PWUubGF5ZXJzW2RdO2lmKHYpezE9PT12LnZlcnNpb24mJnQud2Fybk9uY2UoJ1ZlY3RvciB0aWxlIHNvdXJjZSBcIicrYS5zb3VyY2UrJ1wiIGxheWVyIFwiJytkKydcIiBkb2VzIG5vdCB1c2UgdmVjdG9yIHRpbGUgc3BlYyB2MiBhbmQgdGhlcmVmb3JlIG1heSBoYXZlIHNvbWUgcmVuZGVyaW5nIGVycm9ycy4nKTtmb3IodmFyIG09by5lbmNvZGUoZCkseT1bXSxiPTA7Yjx2Lmxlbmd0aDtiKyspe3ZhciB3PXYuZmVhdHVyZShiKTt5LnB1c2goe2ZlYXR1cmU6dyxpbmRleDpiLHNvdXJjZUxheWVySW5kZXg6bX0pfWZvcih2YXIgaz0wLEE9cFtkXTtrPEEubGVuZ3RoO2srPTEpe3ZhciBUPUFba10sTT1UWzBdO00ubWluem9vbSYmYS56b29tPE1hdGguZmxvb3IoTS5taW56b29tKXx8TS5tYXh6b29tJiZhLnpvb20+PU0ubWF4em9vbXx8XCJub25lXCIhPT1NLnZpc2liaWxpdHkmJihfKFQsYS56b29tKSwoaFtNLmlkXT1NLmNyZWF0ZUJ1Y2tldCh7aW5kZXg6cy5idWNrZXRMYXllcklEcy5sZW5ndGgsbGF5ZXJzOlQsem9vbTphLnpvb20scGl4ZWxSYXRpbzphLnBpeGVsUmF0aW8sb3ZlcnNjYWxpbmc6YS5vdmVyc2NhbGluZyxjb2xsaXNpb25Cb3hBcnJheTphLmNvbGxpc2lvbkJveEFycmF5LHNvdXJjZUxheWVySW5kZXg6bX0pKS5wb3B1bGF0ZSh5LGYpLHMuYnVja2V0TGF5ZXJJRHMucHVzaChULm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSl9fX12YXIgUz10Lm1hcE9iamVjdChmLmdseXBoRGVwZW5kZW5jaWVzLGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5tYXAoTnVtYmVyKX0pO09iamVjdC5rZXlzKFMpLmxlbmd0aD9uLnNlbmQoXCJnZXRHbHlwaHNcIix7dWlkOnRoaXMudWlkLHN0YWNrczpTfSxmdW5jdGlvbih0LGUpe2x8fChsPXQsYz1lLEMuY2FsbChhKSl9KTpjPXt9O3ZhciBFPU9iamVjdC5rZXlzKGYuaWNvbkRlcGVuZGVuY2llcyk7ZnVuY3Rpb24gQygpe2lmKGwpcmV0dXJuIGkobCk7aWYoYyYmdSl7dmFyIGU9bmV3IHgoYykscj1uZXcgdC5kZWZhdWx0JDI4KHUpO2Zvcih2YXIgbiBpbiBoKXt2YXIgYT1oW25dO2EgaW5zdGFuY2VvZiB0LmRlZmF1bHQkMTQmJihfKGEubGF5ZXJzLHRoaXMuem9vbSksZyhhLGMsZS5wb3NpdGlvbnMsdSxyLnBvc2l0aW9ucyx0aGlzLnNob3dDb2xsaXNpb25Cb3hlcykpfXRoaXMuc3RhdHVzPVwiZG9uZVwiLGkobnVsbCx7YnVja2V0czp0LnZhbHVlcyhoKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuaXNFbXB0eSgpfSksZmVhdHVyZUluZGV4OnMsY29sbGlzaW9uQm94QXJyYXk6dGhpcy5jb2xsaXNpb25Cb3hBcnJheSxnbHlwaEF0bGFzSW1hZ2U6ZS5pbWFnZSxpY29uQXRsYXNJbWFnZTpyLmltYWdlfSl9fUUubGVuZ3RoP24uc2VuZChcImdldEltYWdlc1wiLHtpY29uczpFfSxmdW5jdGlvbih0LGUpe2x8fChsPXQsdT1lLEMuY2FsbChhKSl9KTp1PXt9LEMuY2FsbCh0aGlzKX07dmFyIHc9ZnVuY3Rpb24odCl7cmV0dXJuISghcGVyZm9ybWFuY2V8fCFwZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlOYW1lKSYmcGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5TmFtZSh0KX07ZnVuY3Rpb24gayhlLHIpe3ZhciBuPXQuZ2V0QXJyYXlCdWZmZXIoZS5yZXF1ZXN0LGZ1bmN0aW9uKGUsbil7ZT9yKGUpOm4mJnIobnVsbCx7dmVjdG9yVGlsZTpuZXcgdC5kZWZhdWx0JDI5LlZlY3RvclRpbGUobmV3IHQuZGVmYXVsdCQzMChuLmRhdGEpKSxyYXdEYXRhOm4uZGF0YSxjYWNoZUNvbnRyb2w6bi5jYWNoZUNvbnRyb2wsZXhwaXJlczpuLmV4cGlyZXN9KX0pO3JldHVybiBmdW5jdGlvbigpe24uYWJvcnQoKSxyKCl9fXZhciBBPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmFjdG9yPXQsdGhpcy5sYXllckluZGV4PWUsdGhpcy5sb2FkVmVjdG9yRGF0YT1yfHxrLHRoaXMubG9hZGluZz17fSx0aGlzLmxvYWRlZD17fX07QS5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLGk9ZS51aWQ7dGhpcy5sb2FkaW5nfHwodGhpcy5sb2FkaW5nPXt9KTt2YXIgYT10aGlzLmxvYWRpbmdbaV09bmV3IGIoZSk7YS5hYm9ydD10aGlzLmxvYWRWZWN0b3JEYXRhKGUsZnVuY3Rpb24obyxzKXtpZihkZWxldGUgbi5sb2FkaW5nW2ldLG98fCFzKXJldHVybiByKG8pO3ZhciBsPXMucmF3RGF0YSxjPXt9O3MuZXhwaXJlcyYmKGMuZXhwaXJlcz1zLmV4cGlyZXMpLHMuY2FjaGVDb250cm9sJiYoYy5jYWNoZUNvbnRyb2w9cy5jYWNoZUNvbnRyb2wpO3ZhciB1PXt9O2lmKGUucmVxdWVzdCYmZS5yZXF1ZXN0LmNvbGxlY3RSZXNvdXJjZVRpbWluZyl7dmFyIGg9dyhlLnJlcXVlc3QudXJsKTtoJiYodS5yZXNvdXJjZVRpbWluZz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGgpKSl9YS52ZWN0b3JUaWxlPXMudmVjdG9yVGlsZSxhLnBhcnNlKHMudmVjdG9yVGlsZSxuLmxheWVySW5kZXgsbi5hY3RvcixmdW5jdGlvbihlLG4pe2lmKGV8fCFuKXJldHVybiByKGUpO3IobnVsbCx0LmV4dGVuZCh7cmF3VGlsZURhdGE6bC5zbGljZSgwKX0sbixjLHUpKX0pLG4ubG9hZGVkPW4ubG9hZGVkfHx7fSxuLmxvYWRlZFtpXT1hfSl9LEEucHJvdG90eXBlLnJlbG9hZFRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxvYWRlZCxuPXQudWlkLGk9dGhpcztpZihyJiZyW25dKXt2YXIgYT1yW25dO2Euc2hvd0NvbGxpc2lvbkJveGVzPXQuc2hvd0NvbGxpc2lvbkJveGVzO3ZhciBvPWZ1bmN0aW9uKHQscil7dmFyIG49YS5yZWxvYWRDYWxsYmFjaztuJiYoZGVsZXRlIGEucmVsb2FkQ2FsbGJhY2ssYS5wYXJzZShhLnZlY3RvclRpbGUsaS5sYXllckluZGV4LGkuYWN0b3IsbikpLGUodCxyKX07XCJwYXJzaW5nXCI9PT1hLnN0YXR1cz9hLnJlbG9hZENhbGxiYWNrPW86XCJkb25lXCI9PT1hLnN0YXR1cyYmYS5wYXJzZShhLnZlY3RvclRpbGUsdGhpcy5sYXllckluZGV4LHRoaXMuYWN0b3Isbyl9fSxBLnByb3RvdHlwZS5hYm9ydFRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxvYWRpbmcsbj10LnVpZDtyJiZyW25dJiZyW25dLmFib3J0JiYocltuXS5hYm9ydCgpLGRlbGV0ZSByW25dKSxlKCl9LEEucHJvdG90eXBlLnJlbW92ZVRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxvYWRlZCxuPXQudWlkO3ImJnJbbl0mJmRlbGV0ZSByW25dLGUoKX07dmFyIFQ9ZnVuY3Rpb24oKXt0aGlzLmxvYWRpbmc9e30sdGhpcy5sb2FkZWQ9e319O1QucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49ZS51aWQsaT1lLmVuY29kaW5nLGE9bmV3IHQuZGVmYXVsdCQzMShuKTt0aGlzLmxvYWRpbmdbbl09YSxhLmxvYWRGcm9tSW1hZ2UoZS5yYXdJbWFnZURhdGEsaSksZGVsZXRlIHRoaXMubG9hZGluZ1tuXSx0aGlzLmxvYWRlZD10aGlzLmxvYWRlZHx8e30sdGhpcy5sb2FkZWRbbl09YSxyKG51bGwsYSl9LFQucHJvdG90eXBlLnJlbW92ZVRpbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sb2FkZWQscj10LnVpZDtlJiZlW3JdJiZkZWxldGUgZVtyXX07dmFyIE09e1JBRElVUzo2Mzc4MTM3LEZMQVRURU5JTkc6MS8yOTguMjU3MjIzNTYzLFBPTEFSX1JBRElVUzo2MzU2NzUyLjMxNDJ9O2Z1bmN0aW9uIFModCl7dmFyIGU9MDtpZih0JiZ0Lmxlbmd0aD4wKXtlKz1NYXRoLmFicyhFKHRbMF0pKTtmb3IodmFyIHI9MTtyPHQubGVuZ3RoO3IrKyllLT1NYXRoLmFicyhFKHRbcl0pKX1yZXR1cm4gZX1mdW5jdGlvbiBFKHQpe3ZhciBlLHIsbixpLGEsbyxzPTAsbD10Lmxlbmd0aDtpZihsPjIpe2ZvcihvPTA7bzxsO28rKylvPT09bC0yPyhuPWwtMixpPWwtMSxhPTApOm89PT1sLTE/KG49bC0xLGk9MCxhPTEpOihuPW8saT1vKzEsYT1vKzIpLGU9dFtuXSxyPXRbaV0scys9KEModFthXVswXSktQyhlWzBdKSkqTWF0aC5zaW4oQyhyWzFdKSk7cz1zKk0uUkFESVVTKk0uUkFESVVTLzJ9cmV0dXJuIHN9ZnVuY3Rpb24gQyh0KXtyZXR1cm4gdCpNYXRoLlBJLzE4MH12YXIgTD17Z2VvbWV0cnk6ZnVuY3Rpb24gdChlKXt2YXIgcixuPTA7c3dpdGNoKGUudHlwZSl7Y2FzZVwiUG9seWdvblwiOnJldHVybiBTKGUuY29vcmRpbmF0ZXMpO2Nhc2VcIk11bHRpUG9seWdvblwiOmZvcihyPTA7cjxlLmNvb3JkaW5hdGVzLmxlbmd0aDtyKyspbis9UyhlLmNvb3JkaW5hdGVzW3JdKTtyZXR1cm4gbjtjYXNlXCJQb2ludFwiOmNhc2VcIk11bHRpUG9pbnRcIjpjYXNlXCJMaW5lU3RyaW5nXCI6Y2FzZVwiTXVsdGlMaW5lU3RyaW5nXCI6cmV0dXJuIDA7Y2FzZVwiR2VvbWV0cnlDb2xsZWN0aW9uXCI6Zm9yKHI9MDtyPGUuZ2VvbWV0cmllcy5sZW5ndGg7cisrKW4rPXQoZS5nZW9tZXRyaWVzW3JdKTtyZXR1cm4gbn19LHJpbmc6RX07ZnVuY3Rpb24geih0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdChyLGUpfX1mdW5jdGlvbiBPKHQsZSl7ZT0hIWUsdFswXT1JKHRbMF0sZSk7Zm9yKHZhciByPTE7cjx0Lmxlbmd0aDtyKyspdFtyXT1JKHRbcl0sIWUpO3JldHVybiB0fWZ1bmN0aW9uIEkodCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEwucmluZyh0KT49MH0odCk9PT1lP3Q6dC5yZXZlcnNlKCl9dmFyIEQ9dC5kZWZhdWx0JDI5LlZlY3RvclRpbGVGZWF0dXJlLnByb3RvdHlwZS50b0dlb0pTT04sUD1mdW5jdGlvbihlKXt0aGlzLl9mZWF0dXJlPWUsdGhpcy5leHRlbnQ9dC5kZWZhdWx0JDgsdGhpcy50eXBlPWUudHlwZSx0aGlzLnByb3BlcnRpZXM9ZS50YWdzLFwiaWRcImluIGUmJiFpc05hTihlLmlkKSYmKHRoaXMuaWQ9cGFyc2VJbnQoZS5pZCwxMCkpfTtQLnByb3RvdHlwZS5sb2FkR2VvbWV0cnk9ZnVuY3Rpb24oKXtpZigxPT09dGhpcy5fZmVhdHVyZS50eXBlKXtmb3IodmFyIGU9W10scj0wLG49dGhpcy5fZmVhdHVyZS5nZW9tZXRyeTtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl07ZS5wdXNoKFtuZXcgdC5kZWZhdWx0JDEoaVswXSxpWzFdKV0pfXJldHVybiBlfWZvcih2YXIgYT1bXSxvPTAscz10aGlzLl9mZWF0dXJlLmdlb21ldHJ5O288cy5sZW5ndGg7bys9MSl7Zm9yKHZhciBsPVtdLGM9MCx1PXNbb107Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgaD11W2NdO2wucHVzaChuZXcgdC5kZWZhdWx0JDEoaFswXSxoWzFdKSl9YS5wdXNoKGwpfXJldHVybiBhfSxQLnByb3RvdHlwZS50b0dlb0pTT049ZnVuY3Rpb24odCxlLHIpe3JldHVybiBELmNhbGwodGhpcyx0LGUscil9O3ZhciBSPWZ1bmN0aW9uKGUpe3RoaXMubGF5ZXJzPXtfZ2VvanNvblRpbGVMYXllcjp0aGlzfSx0aGlzLm5hbWU9XCJfZ2VvanNvblRpbGVMYXllclwiLHRoaXMuZXh0ZW50PXQuZGVmYXVsdCQ4LHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuX2ZlYXR1cmVzPWV9O1IucHJvdG90eXBlLmZlYXR1cmU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBQKHRoaXMuX2ZlYXR1cmVzW3RdKX07dmFyIEY9dC5fX21vZHVsZUV4cG9ydHMuVmVjdG9yVGlsZUZlYXR1cmUsQj1OO2Z1bmN0aW9uIE4odCxlKXt0aGlzLm9wdGlvbnM9ZXx8e30sdGhpcy5mZWF0dXJlcz10LHRoaXMubGVuZ3RoPXQubGVuZ3RofWZ1bmN0aW9uIGoodCxlKXt0aGlzLmlkPVwibnVtYmVyXCI9PXR5cGVvZiB0LmlkP3QuaWQ6dm9pZCAwLHRoaXMudHlwZT10LnR5cGUsdGhpcy5yYXdHZW9tZXRyeT0xPT09dC50eXBlP1t0Lmdlb21ldHJ5XTp0Lmdlb21ldHJ5LHRoaXMucHJvcGVydGllcz10LnRhZ3MsdGhpcy5leHRlbnQ9ZXx8NDA5Nn1OLnByb3RvdHlwZS5mZWF0dXJlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaih0aGlzLmZlYXR1cmVzW3RdLHRoaXMub3B0aW9ucy5leHRlbnQpfSxqLnByb3RvdHlwZS5sb2FkR2VvbWV0cnk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJhd0dlb21ldHJ5O3RoaXMuZ2VvbWV0cnk9W107Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe2Zvcih2YXIgbj1lW3JdLGk9W10sYT0wO2E8bi5sZW5ndGg7YSsrKWkucHVzaChuZXcgdC5kZWZhdWx0JDMyKG5bYV1bMF0sblthXVsxXSkpO3RoaXMuZ2VvbWV0cnkucHVzaChpKX1yZXR1cm4gdGhpcy5nZW9tZXRyeX0sai5wcm90b3R5cGUuYmJveD1mdW5jdGlvbigpe3RoaXMuZ2VvbWV0cnl8fHRoaXMubG9hZEdlb21ldHJ5KCk7Zm9yKHZhciB0PXRoaXMuZ2VvbWV0cnksZT0xLzAscj0tMS8wLG49MS8wLGk9LTEvMCxhPTA7YTx0Lmxlbmd0aDthKyspZm9yKHZhciBvPXRbYV0scz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdO2U9TWF0aC5taW4oZSxsLngpLHI9TWF0aC5tYXgocixsLngpLG49TWF0aC5taW4obixsLnkpLGk9TWF0aC5tYXgoaSxsLnkpfXJldHVybltlLG4scixpXX0sai5wcm90b3R5cGUudG9HZW9KU09OPUYucHJvdG90eXBlLnRvR2VvSlNPTjt2YXIgVj1ILFU9SCxxPUI7ZnVuY3Rpb24gSChlKXt2YXIgcj1uZXcgdC5fX21vZHVsZUV4cG9ydHMkMTtyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdC5sYXllcnMpZS53cml0ZU1lc3NhZ2UoMyxHLHQubGF5ZXJzW3JdKX0oZSxyKSxyLmZpbmlzaCgpfWZ1bmN0aW9uIEcodCxlKXt2YXIgcjtlLndyaXRlVmFyaW50RmllbGQoMTUsdC52ZXJzaW9ufHwxKSxlLndyaXRlU3RyaW5nRmllbGQoMSx0Lm5hbWV8fFwiXCIpLGUud3JpdGVWYXJpbnRGaWVsZCg1LHQuZXh0ZW50fHw0MDk2KTt2YXIgbj17a2V5czpbXSx2YWx1ZXM6W10sa2V5Y2FjaGU6e30sdmFsdWVjYWNoZTp7fX07Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyluLmZlYXR1cmU9dC5mZWF0dXJlKHIpLGUud3JpdGVNZXNzYWdlKDIsWSxuKTt2YXIgaT1uLmtleXM7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyllLndyaXRlU3RyaW5nRmllbGQoMyxpW3JdKTt2YXIgYT1uLnZhbHVlcztmb3Iocj0wO3I8YS5sZW5ndGg7cisrKWUud3JpdGVNZXNzYWdlKDQsSixhW3JdKX1mdW5jdGlvbiBZKHQsZSl7dmFyIHI9dC5mZWF0dXJlO3ZvaWQgMCE9PXIuaWQmJmUud3JpdGVWYXJpbnRGaWVsZCgxLHIuaWQpLGUud3JpdGVNZXNzYWdlKDIsVyx0KSxlLndyaXRlVmFyaW50RmllbGQoMyxyLnR5cGUpLGUud3JpdGVNZXNzYWdlKDQsJCxyKX1mdW5jdGlvbiBXKHQsZSl7dmFyIHI9dC5mZWF0dXJlLG49dC5rZXlzLGk9dC52YWx1ZXMsYT10LmtleWNhY2hlLG89dC52YWx1ZWNhY2hlO2Zvcih2YXIgcyBpbiByLnByb3BlcnRpZXMpe3ZhciBsPWFbc107dm9pZCAwPT09bCYmKG4ucHVzaChzKSxsPW4ubGVuZ3RoLTEsYVtzXT1sKSxlLndyaXRlVmFyaW50KGwpO3ZhciBjPXIucHJvcGVydGllc1tzXSx1PXR5cGVvZiBjO1wic3RyaW5nXCIhPT11JiZcImJvb2xlYW5cIiE9PXUmJlwibnVtYmVyXCIhPT11JiYoYz1KU09OLnN0cmluZ2lmeShjKSk7dmFyIGg9dStcIjpcIitjLGY9b1toXTt2b2lkIDA9PT1mJiYoaS5wdXNoKGMpLGY9aS5sZW5ndGgtMSxvW2hdPWYpLGUud3JpdGVWYXJpbnQoZil9fWZ1bmN0aW9uIFgodCxlKXtyZXR1cm4oZTw8MykrKDcmdCl9ZnVuY3Rpb24gWih0KXtyZXR1cm4gdDw8MV50Pj4zMX1mdW5jdGlvbiAkKHQsZSl7Zm9yKHZhciByPXQubG9hZEdlb21ldHJ5KCksbj10LnR5cGUsaT0wLGE9MCxvPXIubGVuZ3RoLHM9MDtzPG87cysrKXt2YXIgbD1yW3NdLGM9MTsxPT09biYmKGM9bC5sZW5ndGgpLGUud3JpdGVWYXJpbnQoWCgxLGMpKTtmb3IodmFyIHU9Mz09PW4/bC5sZW5ndGgtMTpsLmxlbmd0aCxoPTA7aDx1O2grKyl7MT09PWgmJjEhPT1uJiZlLndyaXRlVmFyaW50KFgoMix1LTEpKTt2YXIgZj1sW2hdLngtaSxwPWxbaF0ueS1hO2Uud3JpdGVWYXJpbnQoWihmKSksZS53cml0ZVZhcmludChaKHApKSxpKz1mLGErPXB9Mz09PW4mJmUud3JpdGVWYXJpbnQoWCg3LDApKX19ZnVuY3Rpb24gSih0LGUpe3ZhciByPXR5cGVvZiB0O1wic3RyaW5nXCI9PT1yP2Uud3JpdGVTdHJpbmdGaWVsZCgxLHQpOlwiYm9vbGVhblwiPT09cj9lLndyaXRlQm9vbGVhbkZpZWxkKDcsdCk6XCJudW1iZXJcIj09PXImJih0JTEhPTA/ZS53cml0ZURvdWJsZUZpZWxkKDMsdCk6dDwwP2Uud3JpdGVTVmFyaW50RmllbGQoNix0KTplLndyaXRlVmFyaW50RmllbGQoNSx0KSl9Vi5mcm9tVmVjdG9yVGlsZUpzPVUsVi5mcm9tR2VvanNvblZ0PWZ1bmN0aW9uKHQsZSl7ZT1lfHx7fTt2YXIgcj17fTtmb3IodmFyIG4gaW4gdClyW25dPW5ldyBCKHRbbl0uZmVhdHVyZXMsZSkscltuXS5uYW1lPW4scltuXS52ZXJzaW9uPWUudmVyc2lvbixyW25dLmV4dGVudD1lLmV4dGVudDtyZXR1cm4gSCh7bGF5ZXJzOnJ9KX0sVi5HZW9KU09OV3JhcHBlcj1xO3ZhciBLPWZ1bmN0aW9uIHQoZSxyLG4saSxhLG8pe2lmKCEoYS1pPD1uKSl7dmFyIHM9TWF0aC5mbG9vcigoaSthKS8yKTshZnVuY3Rpb24gdChlLHIsbixpLGEsbyl7Zm9yKDthPmk7KXtpZihhLWk+NjAwKXt2YXIgcz1hLWkrMSxsPW4taSsxLGM9TWF0aC5sb2cocyksdT0uNSpNYXRoLmV4cCgyKmMvMyksaD0uNSpNYXRoLnNxcnQoYyp1KihzLXUpL3MpKihsLXMvMjwwPy0xOjEpO3QoZSxyLG4sTWF0aC5tYXgoaSxNYXRoLmZsb29yKG4tbCp1L3MraCkpLE1hdGgubWluKGEsTWF0aC5mbG9vcihuKyhzLWwpKnUvcytoKSksbyl9dmFyIGY9clsyKm4rb10scD1pLGQ9YTtmb3IoUShlLHIsaSxuKSxyWzIqYStvXT5mJiZRKGUscixpLGEpO3A8ZDspe2ZvcihRKGUscixwLGQpLHArKyxkLS07clsyKnArb108ZjspcCsrO2Zvcig7clsyKmQrb10+ZjspZC0tfXJbMippK29dPT09Zj9RKGUscixpLGQpOlEoZSxyLCsrZCxhKSxkPD1uJiYoaT1kKzEpLG48PWQmJihhPWQtMSl9fShlLHIscyxpLGEsbyUyKSx0KGUscixuLGkscy0xLG8rMSksdChlLHIsbixzKzEsYSxvKzEpfX07ZnVuY3Rpb24gUSh0LGUscixuKXt0dCh0LHIsbiksdHQoZSwyKnIsMipuKSx0dChlLDIqcisxLDIqbisxKX1mdW5jdGlvbiB0dCh0LGUscil7dmFyIG49dFtlXTt0W2VdPXRbcl0sdFtyXT1ufWZ1bmN0aW9uIGV0KHQsZSxyLG4pe3ZhciBpPXQtcixhPWUtbjtyZXR1cm4gaSppK2EqYX12YXIgcnQ9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gbmV3IG50KHQsZSxyLG4saSl9O2Z1bmN0aW9uIG50KHQsZSxyLG4saSl7ZT1lfHxpdCxyPXJ8fGF0LGk9aXx8QXJyYXksdGhpcy5ub2RlU2l6ZT1ufHw2NCx0aGlzLnBvaW50cz10LHRoaXMuaWRzPW5ldyBpKHQubGVuZ3RoKSx0aGlzLmNvb3Jkcz1uZXcgaSgyKnQubGVuZ3RoKTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl0aGlzLmlkc1thXT1hLHRoaXMuY29vcmRzWzIqYV09ZSh0W2FdKSx0aGlzLmNvb3Jkc1syKmErMV09cih0W2FdKTtLKHRoaXMuaWRzLHRoaXMuY29vcmRzLHRoaXMubm9kZVNpemUsMCx0aGlzLmlkcy5sZW5ndGgtMSwwKX1mdW5jdGlvbiBpdCh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBhdCh0KXtyZXR1cm4gdFsxXX1udC5wcm90b3R5cGU9e3JhbmdlOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBmdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHMsbCxjPVswLHQubGVuZ3RoLTEsMF0sdT1bXTtjLmxlbmd0aDspe3ZhciBoPWMucG9wKCksZj1jLnBvcCgpLHA9Yy5wb3AoKTtpZihmLXA8PW8pZm9yKHZhciBkPXA7ZDw9ZjtkKyspcz1lWzIqZF0sbD1lWzIqZCsxXSxzPj1yJiZzPD1pJiZsPj1uJiZsPD1hJiZ1LnB1c2godFtkXSk7ZWxzZXt2YXIgZz1NYXRoLmZsb29yKChwK2YpLzIpO3M9ZVsyKmddLGw9ZVsyKmcrMV0scz49ciYmczw9aSYmbD49biYmbDw9YSYmdS5wdXNoKHRbZ10pO3ZhciB2PShoKzEpJTI7KDA9PT1oP3I8PXM6bjw9bCkmJihjLnB1c2gocCksYy5wdXNoKGctMSksYy5wdXNoKHYpKSwoMD09PWg/aT49czphPj1sKSYmKGMucHVzaChnKzEpLGMucHVzaChmKSxjLnB1c2godikpfX1yZXR1cm4gdX0odGhpcy5pZHMsdGhpcy5jb29yZHMsdCxlLHIsbix0aGlzLm5vZGVTaXplKX0sd2l0aGluOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbz1bMCx0Lmxlbmd0aC0xLDBdLHM9W10sbD1pKmk7by5sZW5ndGg7KXt2YXIgYz1vLnBvcCgpLHU9by5wb3AoKSxoPW8ucG9wKCk7aWYodS1oPD1hKWZvcih2YXIgZj1oO2Y8PXU7ZisrKWV0KGVbMipmXSxlWzIqZisxXSxyLG4pPD1sJiZzLnB1c2godFtmXSk7ZWxzZXt2YXIgcD1NYXRoLmZsb29yKChoK3UpLzIpLGQ9ZVsyKnBdLGc9ZVsyKnArMV07ZXQoZCxnLHIsbik8PWwmJnMucHVzaCh0W3BdKTt2YXIgdj0oYysxKSUyOygwPT09Yz9yLWk8PWQ6bi1pPD1nKSYmKG8ucHVzaChoKSxvLnB1c2gocC0xKSxvLnB1c2godikpLCgwPT09Yz9yK2k+PWQ6bitpPj1nKSYmKG8ucHVzaChwKzEpLG8ucHVzaCh1KSxvLnB1c2godikpfX1yZXR1cm4gc30odGhpcy5pZHMsdGhpcy5jb29yZHMsdCxlLHIsdGhpcy5ub2RlU2l6ZSl9fTtmdW5jdGlvbiBvdCh0KXt0aGlzLm9wdGlvbnM9cHQoT2JqZWN0LmNyZWF0ZSh0aGlzLm9wdGlvbnMpLHQpLHRoaXMudHJlZXM9bmV3IEFycmF5KHRoaXMub3B0aW9ucy5tYXhab29tKzEpfWZ1bmN0aW9uIHN0KHQsZSxyLG4saSl7cmV0dXJue3g6dCx5OmUsem9vbToxLzAsaWQ6bixwcm9wZXJ0aWVzOmkscGFyZW50SWQ6LTEsbnVtUG9pbnRzOnJ9fWZ1bmN0aW9uIGx0KHQsZSl7dmFyIHI9dC5nZW9tZXRyeS5jb29yZGluYXRlcztyZXR1cm57eDpodChyWzBdKSx5OmZ0KHJbMV0pLHpvb206MS8wLGlkOmUscGFyZW50SWQ6LTF9fWZ1bmN0aW9uIGN0KHQpe3JldHVybnt0eXBlOlwiRmVhdHVyZVwiLHByb3BlcnRpZXM6dXQodCksZ2VvbWV0cnk6e3R5cGU6XCJQb2ludFwiLGNvb3JkaW5hdGVzOlsobj10LngsMzYwKihuLS41KSksKGU9dC55LHI9KDE4MC0zNjAqZSkqTWF0aC5QSS8xODAsMzYwKk1hdGguYXRhbihNYXRoLmV4cChyKSkvTWF0aC5QSS05MCldfX07dmFyIGUscixufWZ1bmN0aW9uIHV0KHQpe3ZhciBlPXQubnVtUG9pbnRzLHI9ZT49MWU0P01hdGgucm91bmQoZS8xZTMpK1wia1wiOmU+PTFlMz9NYXRoLnJvdW5kKGUvMTAwKS8xMCtcImtcIjplO3JldHVybiBwdChwdCh7fSx0LnByb3BlcnRpZXMpLHtjbHVzdGVyOiEwLGNsdXN0ZXJfaWQ6dC5pZCxwb2ludF9jb3VudDplLHBvaW50X2NvdW50X2FiYnJldmlhdGVkOnJ9KX1mdW5jdGlvbiBodCh0KXtyZXR1cm4gdC8zNjArLjV9ZnVuY3Rpb24gZnQodCl7dmFyIGU9TWF0aC5zaW4odCpNYXRoLlBJLzE4MCkscj0uNS0uMjUqTWF0aC5sb2coKDErZSkvKDEtZSkpL01hdGguUEk7cmV0dXJuIHI8MD8wOnI+MT8xOnJ9ZnVuY3Rpb24gcHQodCxlKXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl07cmV0dXJuIHR9ZnVuY3Rpb24gZHQodCl7cmV0dXJuIHQueH1mdW5jdGlvbiBndCh0KXtyZXR1cm4gdC55fWZ1bmN0aW9uIHZ0KHQsZSxyLG4saSxhKXt2YXIgbz1pLXIscz1hLW47aWYoMCE9PW98fDAhPT1zKXt2YXIgbD0oKHQtcikqbysoZS1uKSpzKS8obypvK3Mqcyk7bD4xPyhyPWksbj1hKTpsPjAmJihyKz1vKmwsbis9cypsKX1yZXR1cm4obz10LXIpKm8rKHM9ZS1uKSpzfWZ1bmN0aW9uIG10KHQsZSxyLG4pe3ZhciBpPXtpZDp0fHxudWxsLHR5cGU6ZSxnZW9tZXRyeTpyLHRhZ3M6bixtaW5YOjEvMCxtaW5ZOjEvMCxtYXhYOi0xLzAsbWF4WTotMS8wfTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5nZW9tZXRyeSxyPXQudHlwZTtpZihcIlBvaW50XCI9PT1yfHxcIk11bHRpUG9pbnRcIj09PXJ8fFwiTGluZVN0cmluZ1wiPT09cil5dCh0LGUpO2Vsc2UgaWYoXCJQb2x5Z29uXCI9PT1yfHxcIk11bHRpTGluZVN0cmluZ1wiPT09cilmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl5dCh0LGVbbl0pO2Vsc2UgaWYoXCJNdWx0aVBvbHlnb25cIj09PXIpZm9yKG49MDtuPGUubGVuZ3RoO24rKylmb3IodmFyIGk9MDtpPGVbbl0ubGVuZ3RoO2krKyl5dCh0LGVbbl1baV0pfShpKSxpfWZ1bmN0aW9uIHl0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKz0zKXQubWluWD1NYXRoLm1pbih0Lm1pblgsZVtyXSksdC5taW5ZPU1hdGgubWluKHQubWluWSxlW3IrMV0pLHQubWF4WD1NYXRoLm1heCh0Lm1heFgsZVtyXSksdC5tYXhZPU1hdGgubWF4KHQubWF4WSxlW3IrMV0pfWZ1bmN0aW9uIHh0KHQsZSxyKXtpZihlLmdlb21ldHJ5KXt2YXIgbj1lLmdlb21ldHJ5LmNvb3JkaW5hdGVzLGk9ZS5nZW9tZXRyeS50eXBlLGE9TWF0aC5wb3coci50b2xlcmFuY2UvKCgxPDxyLm1heFpvb20pKnIuZXh0ZW50KSwyKSxvPVtdO2lmKFwiUG9pbnRcIj09PWkpYnQobixvKTtlbHNlIGlmKFwiTXVsdGlQb2ludFwiPT09aSlmb3IodmFyIHM9MDtzPG4ubGVuZ3RoO3MrKylidChuW3NdLG8pO2Vsc2UgaWYoXCJMaW5lU3RyaW5nXCI9PT1pKV90KG4sbyxhLCExKTtlbHNlIGlmKFwiTXVsdGlMaW5lU3RyaW5nXCI9PT1pKWlmKHIubGluZU1ldHJpY3MpZm9yKHM9MDtzPG4ubGVuZ3RoO3MrKylyZXR1cm4gbz1bXSxfdChuW3NdLG8sYSwhMSksdm9pZCB0LnB1c2gobXQoZS5pZCxcIkxpbmVTdHJpbmdcIixvLGUucHJvcGVydGllcykpO2Vsc2Ugd3QobixvLGEsITEpO2Vsc2UgaWYoXCJQb2x5Z29uXCI9PT1pKXd0KG4sbyxhLCEwKTtlbHNle2lmKFwiTXVsdGlQb2x5Z29uXCIhPT1pKXtpZihcIkdlb21ldHJ5Q29sbGVjdGlvblwiPT09aSl7Zm9yKHM9MDtzPGUuZ2VvbWV0cnkuZ2VvbWV0cmllcy5sZW5ndGg7cysrKXh0KHQse2lkOmUuaWQsZ2VvbWV0cnk6ZS5nZW9tZXRyeS5nZW9tZXRyaWVzW3NdLHByb3BlcnRpZXM6ZS5wcm9wZXJ0aWVzfSxyKTtyZXR1cm59dGhyb3cgbmV3IEVycm9yKFwiSW5wdXQgZGF0YSBpcyBub3QgYSB2YWxpZCBHZW9KU09OIG9iamVjdC5cIil9Zm9yKHM9MDtzPG4ubGVuZ3RoO3MrKyl7dmFyIGw9W107d3QobltzXSxsLGEsITApLG8ucHVzaChsKX19dC5wdXNoKG10KGUuaWQsaSxvLGUucHJvcGVydGllcykpfX1mdW5jdGlvbiBidCh0LGUpe2UucHVzaChrdCh0WzBdKSksZS5wdXNoKEF0KHRbMV0pKSxlLnB1c2goMCl9ZnVuY3Rpb24gX3QodCxlLHIsbil7Zm9yKHZhciBpLGEsbz0wLHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIGw9a3QodFtzXVswXSksYz1BdCh0W3NdWzFdKTtlLnB1c2gobCksZS5wdXNoKGMpLGUucHVzaCgwKSxzPjAmJihvKz1uPyhpKmMtbCphKS8yOk1hdGguc3FydChNYXRoLnBvdyhsLWksMikrTWF0aC5wb3coYy1hLDIpKSksaT1sLGE9Y312YXIgdT1lLmxlbmd0aC0zO2VbMl09MSxmdW5jdGlvbiB0KGUscixuLGkpe2Zvcih2YXIgYSxvPWkscz1lW3JdLGw9ZVtyKzFdLGM9ZVtuXSx1PWVbbisxXSxoPXIrMztoPG47aCs9Myl7dmFyIGY9dnQoZVtoXSxlW2grMV0scyxsLGMsdSk7Zj5vJiYoYT1oLG89Zil9bz5pJiYoYS1yPjMmJnQoZSxyLGEsaSksZVthKzJdPW8sbi1hPjMmJnQoZSxhLG4saSkpfShlLDAsdSxyKSxlW3UrMl09MSxlLnNpemU9TWF0aC5hYnMobyksZS5zdGFydD0wLGUuZW5kPWUuc2l6ZX1mdW5jdGlvbiB3dCh0LGUscixuKXtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9W107X3QodFtpXSxhLHIsbiksZS5wdXNoKGEpfX1mdW5jdGlvbiBrdCh0KXtyZXR1cm4gdC8zNjArLjV9ZnVuY3Rpb24gQXQodCl7dmFyIGU9TWF0aC5zaW4odCpNYXRoLlBJLzE4MCkscj0uNS0uMjUqTWF0aC5sb2coKDErZSkvKDEtZSkpL01hdGguUEk7cmV0dXJuIHI8MD8wOnI+MT8xOnJ9ZnVuY3Rpb24gVHQodCxlLHIsbixpLGEsbyxzKXtpZihuLz1lLGE+PShyLz1lKSYmbzw9bilyZXR1cm4gdDtpZihhPm58fG88cilyZXR1cm4gbnVsbDtmb3IodmFyIGw9W10sYz0wO2M8dC5sZW5ndGg7YysrKXt2YXIgdT10W2NdLGg9dS5nZW9tZXRyeSxmPXUudHlwZSxwPTA9PT1pP3UubWluWDp1Lm1pblksZD0wPT09aT91Lm1heFg6dS5tYXhZO2lmKHA+PXImJmQ8PW4pbC5wdXNoKHUpO2Vsc2UgaWYoIShwPm58fGQ8cikpe3ZhciBnPVtdO2lmKFwiUG9pbnRcIj09PWZ8fFwiTXVsdGlQb2ludFwiPT09ZilNdChoLGcscixuLGkpO2Vsc2UgaWYoXCJMaW5lU3RyaW5nXCI9PT1mKVN0KGgsZyxyLG4saSwhMSxzLmxpbmVNZXRyaWNzKTtlbHNlIGlmKFwiTXVsdGlMaW5lU3RyaW5nXCI9PT1mKUN0KGgsZyxyLG4saSwhMSk7ZWxzZSBpZihcIlBvbHlnb25cIj09PWYpQ3QoaCxnLHIsbixpLCEwKTtlbHNlIGlmKFwiTXVsdGlQb2x5Z29uXCI9PT1mKWZvcih2YXIgdj0wO3Y8aC5sZW5ndGg7disrKXt2YXIgbT1bXTtDdChoW3ZdLG0scixuLGksITApLG0ubGVuZ3RoJiZnLnB1c2gobSl9aWYoZy5sZW5ndGgpe2lmKHMubGluZU1ldHJpY3MmJlwiTGluZVN0cmluZ1wiPT09Zil7Zm9yKHY9MDt2PGcubGVuZ3RoO3YrKylsLnB1c2gobXQodS5pZCxmLGdbdl0sdS50YWdzKSk7Y29udGludWV9XCJMaW5lU3RyaW5nXCIhPT1mJiZcIk11bHRpTGluZVN0cmluZ1wiIT09Znx8KDE9PT1nLmxlbmd0aD8oZj1cIkxpbmVTdHJpbmdcIixnPWdbMF0pOmY9XCJNdWx0aUxpbmVTdHJpbmdcIiksXCJQb2ludFwiIT09ZiYmXCJNdWx0aVBvaW50XCIhPT1mfHwoZj0zPT09Zy5sZW5ndGg/XCJQb2ludFwiOlwiTXVsdGlQb2ludFwiKSxsLnB1c2gobXQodS5pZCxmLGcsdS50YWdzKSl9fX1yZXR1cm4gbC5sZW5ndGg/bDpudWxsfWZ1bmN0aW9uIE10KHQsZSxyLG4saSl7Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKz0zKXt2YXIgbz10W2EraV07bz49ciYmbzw9biYmKGUucHVzaCh0W2FdKSxlLnB1c2godFthKzFdKSxlLnB1c2godFthKzJdKSl9fWZ1bmN0aW9uIFN0KHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcyxsLGM9RXQodCksdT0wPT09aT96dDpPdCxoPXQuc3RhcnQsZj0wO2Y8dC5sZW5ndGgtMztmKz0zKXt2YXIgcD10W2ZdLGQ9dFtmKzFdLGc9dFtmKzJdLHY9dFtmKzNdLG09dFtmKzRdLHk9MD09PWk/cDpkLHg9MD09PWk/djptLGI9ITE7byYmKHM9TWF0aC5zcXJ0KE1hdGgucG93KHAtdiwyKStNYXRoLnBvdyhkLW0sMikpKSx5PHI/eD49ciYmKGw9dShjLHAsZCx2LG0sciksbyYmKGMuc3RhcnQ9aCtzKmwpKTp5Pm4/eDw9biYmKGw9dShjLHAsZCx2LG0sbiksbyYmKGMuc3RhcnQ9aCtzKmwpKTpMdChjLHAsZCxnKSx4PHImJnk+PXImJihsPXUoYyxwLGQsdixtLHIpLGI9ITApLHg+biYmeTw9biYmKGw9dShjLHAsZCx2LG0sbiksYj0hMCksIWEmJmImJihvJiYoYy5lbmQ9aCtzKmwpLGUucHVzaChjKSxjPUV0KHQpKSxvJiYoaCs9cyl9dmFyIF89dC5sZW5ndGgtMztwPXRbX10sZD10W18rMV0sZz10W18rMl0sKHk9MD09PWk/cDpkKT49ciYmeTw9biYmTHQoYyxwLGQsZyksXz1jLmxlbmd0aC0zLGEmJl8+PTMmJihjW19dIT09Y1swXXx8Y1tfKzFdIT09Y1sxXSkmJkx0KGMsY1swXSxjWzFdLGNbMl0pLGMubGVuZ3RoJiZlLnB1c2goYyl9ZnVuY3Rpb24gRXQodCl7dmFyIGU9W107cmV0dXJuIGUuc2l6ZT10LnNpemUsZS5zdGFydD10LnN0YXJ0LGUuZW5kPXQuZW5kLGV9ZnVuY3Rpb24gQ3QodCxlLHIsbixpLGEpe2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKVN0KHRbb10sZSxyLG4saSxhLCExKX1mdW5jdGlvbiBMdCh0LGUscixuKXt0LnB1c2goZSksdC5wdXNoKHIpLHQucHVzaChuKX1mdW5jdGlvbiB6dCh0LGUscixuLGksYSl7dmFyIG89KGEtZSkvKG4tZSk7cmV0dXJuIHQucHVzaChhKSx0LnB1c2gocisoaS1yKSpvKSx0LnB1c2goMSksb31mdW5jdGlvbiBPdCh0LGUscixuLGksYSl7dmFyIG89KGEtcikvKGktcik7cmV0dXJuIHQucHVzaChlKyhuLWUpKm8pLHQucHVzaChhKSx0LnB1c2goMSksb31mdW5jdGlvbiBJdCh0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpLGE9dFtuXSxvPWEudHlwZTtpZihcIlBvaW50XCI9PT1vfHxcIk11bHRpUG9pbnRcIj09PW98fFwiTGluZVN0cmluZ1wiPT09bylpPUR0KGEuZ2VvbWV0cnksZSk7ZWxzZSBpZihcIk11bHRpTGluZVN0cmluZ1wiPT09b3x8XCJQb2x5Z29uXCI9PT1vKXtpPVtdO2Zvcih2YXIgcz0wO3M8YS5nZW9tZXRyeS5sZW5ndGg7cysrKWkucHVzaChEdChhLmdlb21ldHJ5W3NdLGUpKX1lbHNlIGlmKFwiTXVsdGlQb2x5Z29uXCI9PT1vKWZvcihpPVtdLHM9MDtzPGEuZ2VvbWV0cnkubGVuZ3RoO3MrKyl7Zm9yKHZhciBsPVtdLGM9MDtjPGEuZ2VvbWV0cnlbc10ubGVuZ3RoO2MrKylsLnB1c2goRHQoYS5nZW9tZXRyeVtzXVtjXSxlKSk7aS5wdXNoKGwpfXIucHVzaChtdChhLmlkLG8saSxhLnRhZ3MpKX1yZXR1cm4gcn1mdW5jdGlvbiBEdCh0LGUpe3ZhciByPVtdO3Iuc2l6ZT10LnNpemUsdm9pZCAwIT09dC5zdGFydCYmKHIuc3RhcnQ9dC5zdGFydCxyLmVuZD10LmVuZCk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKz0zKXIucHVzaCh0W25dK2UsdFtuKzFdLHRbbisyXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gUHQodCxlKXtpZih0LnRyYW5zZm9ybWVkKXJldHVybiB0O3ZhciByLG4saSxhPTE8PHQueixvPXQueCxzPXQueTtmb3Iocj0wO3I8dC5mZWF0dXJlcy5sZW5ndGg7cisrKXt2YXIgbD10LmZlYXR1cmVzW3JdLGM9bC5nZW9tZXRyeSx1PWwudHlwZTtpZihsLmdlb21ldHJ5PVtdLDE9PT11KWZvcihuPTA7bjxjLmxlbmd0aDtuKz0yKWwuZ2VvbWV0cnkucHVzaChSdChjW25dLGNbbisxXSxlLGEsbyxzKSk7ZWxzZSBmb3Iobj0wO248Yy5sZW5ndGg7bisrKXt2YXIgaD1bXTtmb3IoaT0wO2k8Y1tuXS5sZW5ndGg7aSs9MiloLnB1c2goUnQoY1tuXVtpXSxjW25dW2krMV0sZSxhLG8scykpO2wuZ2VvbWV0cnkucHVzaChoKX19cmV0dXJuIHQudHJhbnNmb3JtZWQ9ITAsdH1mdW5jdGlvbiBSdCh0LGUscixuLGksYSl7cmV0dXJuW01hdGgucm91bmQocioodCpuLWkpKSxNYXRoLnJvdW5kKHIqKGUqbi1hKSldfWZ1bmN0aW9uIEZ0KHQsZSxyLG4saSl7Zm9yKHZhciBhPWU9PT1pLm1heFpvb20/MDppLnRvbGVyYW5jZS8oKDE8PGUpKmkuZXh0ZW50KSxvPXtmZWF0dXJlczpbXSxudW1Qb2ludHM6MCxudW1TaW1wbGlmaWVkOjAsbnVtRmVhdHVyZXM6MCxzb3VyY2U6bnVsbCx4OnIseTpuLHo6ZSx0cmFuc2Zvcm1lZDohMSxtaW5YOjIsbWluWToxLG1heFg6LTEsbWF4WTowfSxzPTA7czx0Lmxlbmd0aDtzKyspe28ubnVtRmVhdHVyZXMrKyxCdChvLHRbc10sYSxpKTt2YXIgbD10W3NdLm1pblgsYz10W3NdLm1pblksdT10W3NdLm1heFgsaD10W3NdLm1heFk7bDxvLm1pblgmJihvLm1pblg9bCksYzxvLm1pblkmJihvLm1pblk9YyksdT5vLm1heFgmJihvLm1heFg9dSksaD5vLm1heFkmJihvLm1heFk9aCl9cmV0dXJuIG99ZnVuY3Rpb24gQnQodCxlLHIsbil7dmFyIGk9ZS5nZW9tZXRyeSxhPWUudHlwZSxvPVtdO2lmKFwiUG9pbnRcIj09PWF8fFwiTXVsdGlQb2ludFwiPT09YSlmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrPTMpby5wdXNoKGlbc10pLG8ucHVzaChpW3MrMV0pLHQubnVtUG9pbnRzKyssdC5udW1TaW1wbGlmaWVkKys7ZWxzZSBpZihcIkxpbmVTdHJpbmdcIj09PWEpTnQobyxpLHQsciwhMSwhMSk7ZWxzZSBpZihcIk11bHRpTGluZVN0cmluZ1wiPT09YXx8XCJQb2x5Z29uXCI9PT1hKWZvcihzPTA7czxpLmxlbmd0aDtzKyspTnQobyxpW3NdLHQscixcIlBvbHlnb25cIj09PWEsMD09PXMpO2Vsc2UgaWYoXCJNdWx0aVBvbHlnb25cIj09PWEpZm9yKHZhciBsPTA7bDxpLmxlbmd0aDtsKyspe3ZhciBjPWlbbF07Zm9yKHM9MDtzPGMubGVuZ3RoO3MrKylOdChvLGNbc10sdCxyLCEwLDA9PT1zKX1pZihvLmxlbmd0aCl7dmFyIHU9ZS50YWdzfHxudWxsO2lmKFwiTGluZVN0cmluZ1wiPT09YSYmbi5saW5lTWV0cmljcyl7Zm9yKHZhciBoIGluIHU9e30sZS50YWdzKXVbaF09ZS50YWdzW2hdO3UubWFwYm94X2NsaXBfc3RhcnQ9aS5zdGFydC9pLnNpemUsdS5tYXBib3hfY2xpcF9lbmQ9aS5lbmQvaS5zaXplfXZhciBmPXtnZW9tZXRyeTpvLHR5cGU6XCJQb2x5Z29uXCI9PT1hfHxcIk11bHRpUG9seWdvblwiPT09YT8zOlwiTGluZVN0cmluZ1wiPT09YXx8XCJNdWx0aUxpbmVTdHJpbmdcIj09PWE/MjoxLHRhZ3M6dX07bnVsbCE9PWUuaWQmJihmLmlkPWUuaWQpLHQuZmVhdHVyZXMucHVzaChmKX19ZnVuY3Rpb24gTnQodCxlLHIsbixpLGEpe3ZhciBvPW4qbjtpZihuPjAmJmUuc2l6ZTwoaT9vOm4pKXIubnVtUG9pbnRzKz1lLmxlbmd0aC8zO2Vsc2V7Zm9yKHZhciBzPVtdLGw9MDtsPGUubGVuZ3RoO2wrPTMpKDA9PT1ufHxlW2wrMl0+bykmJihyLm51bVNpbXBsaWZpZWQrKyxzLnB1c2goZVtsXSkscy5wdXNoKGVbbCsxXSkpLHIubnVtUG9pbnRzKys7aSYmZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTAsaT10Lmxlbmd0aCxhPWktMjtuPGk7YT1uLG4rPTIpcis9KHRbbl0tdFthXSkqKHRbbisxXSt0W2ErMV0pO2lmKHI+MD09PWUpZm9yKG49MCxpPXQubGVuZ3RoO248aS8yO24rPTIpe3ZhciBvPXRbbl0scz10W24rMV07dFtuXT10W2ktMi1uXSx0W24rMV09dFtpLTEtbl0sdFtpLTItbl09byx0W2ktMS1uXT1zfX0ocyxhKSx0LnB1c2gocyl9fWZ1bmN0aW9uIGp0KHQsZSl7dmFyIHI9KGU9dGhpcy5vcHRpb25zPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdO3JldHVybiB0fShPYmplY3QuY3JlYXRlKHRoaXMub3B0aW9ucyksZSkpLmRlYnVnO2lmKHImJmNvbnNvbGUudGltZShcInByZXByb2Nlc3MgZGF0YVwiKSxlLm1heFpvb208MHx8ZS5tYXhab29tPjI0KXRocm93IG5ldyBFcnJvcihcIm1heFpvb20gc2hvdWxkIGJlIGluIHRoZSAwLTI0IHJhbmdlXCIpO3ZhciBuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107aWYoXCJGZWF0dXJlQ29sbGVjdGlvblwiPT09dC50eXBlKWZvcih2YXIgbj0wO248dC5mZWF0dXJlcy5sZW5ndGg7bisrKXh0KHIsdC5mZWF0dXJlc1tuXSxlKTtlbHNlXCJGZWF0dXJlXCI9PT10LnR5cGU/eHQocix0LGUpOnh0KHIse2dlb21ldHJ5OnR9LGUpO3JldHVybiByfSh0LGUpO3RoaXMudGlsZXM9e30sdGhpcy50aWxlQ29vcmRzPVtdLHImJihjb25zb2xlLnRpbWVFbmQoXCJwcmVwcm9jZXNzIGRhdGFcIiksY29uc29sZS5sb2coXCJpbmRleDogbWF4Wm9vbTogJWQsIG1heFBvaW50czogJWRcIixlLmluZGV4TWF4Wm9vbSxlLmluZGV4TWF4UG9pbnRzKSxjb25zb2xlLnRpbWUoXCJnZW5lcmF0ZSB0aWxlc1wiKSx0aGlzLnN0YXRzPXt9LHRoaXMudG90YWw9MCksKG49ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmJ1ZmZlci9lLmV4dGVudCxuPXQsaT1UdCh0LDEsLTEtcixyLDAsLTEsMixlKSxhPVR0KHQsMSwxLXIsMityLDAsLTEsMixlKTtyZXR1cm4oaXx8YSkmJihuPVR0KHQsMSwtciwxK3IsMCwtMSwyLGUpfHxbXSxpJiYobj1JdChpLDEpLmNvbmNhdChuKSksYSYmKG49bi5jb25jYXQoSXQoYSwtMSkpKSksbn0obixlKSkubGVuZ3RoJiZ0aGlzLnNwbGl0VGlsZShuLDAsMCwwKSxyJiYobi5sZW5ndGgmJmNvbnNvbGUubG9nKFwiZmVhdHVyZXM6ICVkLCBwb2ludHM6ICVkXCIsdGhpcy50aWxlc1swXS5udW1GZWF0dXJlcyx0aGlzLnRpbGVzWzBdLm51bVBvaW50cyksY29uc29sZS50aW1lRW5kKFwiZ2VuZXJhdGUgdGlsZXNcIiksY29uc29sZS5sb2coXCJ0aWxlcyBnZW5lcmF0ZWQ6XCIsdGhpcy50b3RhbCxKU09OLnN0cmluZ2lmeSh0aGlzLnN0YXRzKSkpfWZ1bmN0aW9uIFZ0KHQsZSxyKXtyZXR1cm4gMzIqKCgxPDx0KSpyK2UpK3R9ZnVuY3Rpb24gVXQodCxlKXt2YXIgcj10LnRpbGVJRC5jYW5vbmljYWw7aWYoIXRoaXMuX2dlb0pTT05JbmRleClyZXR1cm4gZShudWxsLG51bGwpO3ZhciBuPXRoaXMuX2dlb0pTT05JbmRleC5nZXRUaWxlKHIueixyLngsci55KTtpZighbilyZXR1cm4gZShudWxsLG51bGwpO3ZhciBpPW5ldyBSKG4uZmVhdHVyZXMpLGE9VihpKTswPT09YS5ieXRlT2Zmc2V0JiZhLmJ5dGVMZW5ndGg9PT1hLmJ1ZmZlci5ieXRlTGVuZ3RofHwoYT1uZXcgVWludDhBcnJheShhKSksZShudWxsLHt2ZWN0b3JUaWxlOmkscmF3RGF0YTphLmJ1ZmZlcn0pfW90LnByb3RvdHlwZT17b3B0aW9uczp7bWluWm9vbTowLG1heFpvb206MTYscmFkaXVzOjQwLGV4dGVudDo1MTIsbm9kZVNpemU6NjQsbG9nOiExLHJlZHVjZTpudWxsLGluaXRpYWw6ZnVuY3Rpb24oKXtyZXR1cm57fX0sbWFwOmZ1bmN0aW9uKHQpe3JldHVybiB0fX0sbG9hZDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMubG9nO2UmJmNvbnNvbGUudGltZShcInRvdGFsIHRpbWVcIik7dmFyIHI9XCJwcmVwYXJlIFwiK3QubGVuZ3RoK1wiIHBvaW50c1wiO2UmJmNvbnNvbGUudGltZShyKSx0aGlzLnBvaW50cz10O3ZhciBuPXQubWFwKGx0KTtlJiZjb25zb2xlLnRpbWVFbmQocik7Zm9yKHZhciBpPXRoaXMub3B0aW9ucy5tYXhab29tO2k+PXRoaXMub3B0aW9ucy5taW5ab29tO2ktLSl7dmFyIGE9K0RhdGUubm93KCk7dGhpcy50cmVlc1tpKzFdPXJ0KG4sZHQsZ3QsdGhpcy5vcHRpb25zLm5vZGVTaXplLEZsb2F0MzJBcnJheSksbj10aGlzLl9jbHVzdGVyKG4saSksZSYmY29uc29sZS5sb2coXCJ6JWQ6ICVkIGNsdXN0ZXJzIGluICVkbXNcIixpLG4ubGVuZ3RoLCtEYXRlLm5vdygpLWEpfXJldHVybiB0aGlzLnRyZWVzW3RoaXMub3B0aW9ucy5taW5ab29tXT1ydChuLGR0LGd0LHRoaXMub3B0aW9ucy5ub2RlU2l6ZSxGbG9hdDMyQXJyYXkpLGUmJmNvbnNvbGUudGltZUVuZChcInRvdGFsIHRpbWVcIiksdGhpc30sZ2V0Q2x1c3RlcnM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy50cmVlc1t0aGlzLl9saW1pdFpvb20oZSldLG49ci5yYW5nZShodCh0WzBdKSxmdCh0WzNdKSxodCh0WzJdKSxmdCh0WzFdKSksaT1bXSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBvPXIucG9pbnRzW25bYV1dO2kucHVzaChvLm51bVBvaW50cz9jdChvKTp0aGlzLnBvaW50c1tvLmlkXSl9cmV0dXJuIGl9LGdldENoaWxkcmVuOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMudHJlZXNbZSsxXS5wb2ludHNbdF0sbj10aGlzLm9wdGlvbnMucmFkaXVzLyh0aGlzLm9wdGlvbnMuZXh0ZW50Kk1hdGgucG93KDIsZSkpLGk9dGhpcy50cmVlc1tlKzFdLndpdGhpbihyLngsci55LG4pLGE9W10sbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz10aGlzLnRyZWVzW2UrMV0ucG9pbnRzW2lbb11dO3MucGFyZW50SWQ9PT10JiZhLnB1c2gocy5udW1Qb2ludHM/Y3Qocyk6dGhpcy5wb2ludHNbcy5pZF0pfXJldHVybiBhfSxnZXRMZWF2ZXM6ZnVuY3Rpb24odCxlLHIsbil7cj1yfHwxMCxuPW58fDA7dmFyIGk9W107cmV0dXJuIHRoaXMuX2FwcGVuZExlYXZlcyhpLHQsZSxyLG4sMCksaX0sZ2V0VGlsZTpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy50cmVlc1t0aGlzLl9saW1pdFpvb20odCldLGk9TWF0aC5wb3coMix0KSxhPXRoaXMub3B0aW9ucy5leHRlbnQsbz10aGlzLm9wdGlvbnMucmFkaXVzL2Escz0oci1vKS9pLGw9KHIrMStvKS9pLGM9e2ZlYXR1cmVzOltdfTtyZXR1cm4gdGhpcy5fYWRkVGlsZUZlYXR1cmVzKG4ucmFuZ2UoKGUtbykvaSxzLChlKzErbykvaSxsKSxuLnBvaW50cyxlLHIsaSxjKSwwPT09ZSYmdGhpcy5fYWRkVGlsZUZlYXR1cmVzKG4ucmFuZ2UoMS1vL2kscywxLGwpLG4ucG9pbnRzLGkscixpLGMpLGU9PT1pLTEmJnRoaXMuX2FkZFRpbGVGZWF0dXJlcyhuLnJhbmdlKDAscyxvL2ksbCksbi5wb2ludHMsLTEscixpLGMpLGMuZmVhdHVyZXMubGVuZ3RoP2M6bnVsbH0sZ2V0Q2x1c3RlckV4cGFuc2lvblpvb206ZnVuY3Rpb24odCxlKXtmb3IoO2U8dGhpcy5vcHRpb25zLm1heFpvb207KXt2YXIgcj10aGlzLmdldENoaWxkcmVuKHQsZSk7aWYoZSsrLDEhPT1yLmxlbmd0aClicmVhazt0PXJbMF0ucHJvcGVydGllcy5jbHVzdGVyX2lkfXJldHVybiBlfSxfYXBwZW5kTGVhdmVzOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG89dGhpcy5nZXRDaGlsZHJlbihlLHIpLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXS5wcm9wZXJ0aWVzO2lmKGwuY2x1c3Rlcj9hK2wucG9pbnRfY291bnQ8PWk/YSs9bC5wb2ludF9jb3VudDphPXRoaXMuX2FwcGVuZExlYXZlcyh0LGwuY2x1c3Rlcl9pZCxyKzEsbixpLGEpOmE8aT9hKys6dC5wdXNoKG9bc10pLHQubGVuZ3RoPT09bilicmVha31yZXR1cm4gYX0sX2FkZFRpbGVGZWF0dXJlczpmdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPWVbdFtvXV07YS5mZWF0dXJlcy5wdXNoKHt0eXBlOjEsZ2VvbWV0cnk6W1tNYXRoLnJvdW5kKHRoaXMub3B0aW9ucy5leHRlbnQqKHMueCppLXIpKSxNYXRoLnJvdW5kKHRoaXMub3B0aW9ucy5leHRlbnQqKHMueSppLW4pKV1dLHRhZ3M6cy5udW1Qb2ludHM/dXQocyk6dGhpcy5wb2ludHNbcy5pZF0ucHJvcGVydGllc30pfX0sX2xpbWl0Wm9vbTpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgodGhpcy5vcHRpb25zLm1pblpvb20sTWF0aC5taW4odCx0aGlzLm9wdGlvbnMubWF4Wm9vbSsxKSl9LF9jbHVzdGVyOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49dGhpcy5vcHRpb25zLnJhZGl1cy8odGhpcy5vcHRpb25zLmV4dGVudCpNYXRoLnBvdygyLGUpKSxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPXRbaV07aWYoIShhLnpvb208PWUpKXthLnpvb209ZTt2YXIgbz10aGlzLnRyZWVzW2UrMV0scz1vLndpdGhpbihhLngsYS55LG4pLGw9YS5udW1Qb2ludHN8fDEsYz1hLngqbCx1PWEueSpsLGg9bnVsbDt0aGlzLm9wdGlvbnMucmVkdWNlJiYoaD10aGlzLm9wdGlvbnMuaW5pdGlhbCgpLHRoaXMuX2FjY3VtdWxhdGUoaCxhKSk7Zm9yKHZhciBmPTA7ZjxzLmxlbmd0aDtmKyspe3ZhciBwPW8ucG9pbnRzW3NbZl1dO2lmKGU8cC56b29tKXt2YXIgZD1wLm51bVBvaW50c3x8MTtwLnpvb209ZSxjKz1wLngqZCx1Kz1wLnkqZCxsKz1kLHAucGFyZW50SWQ9aSx0aGlzLm9wdGlvbnMucmVkdWNlJiZ0aGlzLl9hY2N1bXVsYXRlKGgscCl9fTE9PT1sP3IucHVzaChhKTooYS5wYXJlbnRJZD1pLHIucHVzaChzdChjL2wsdS9sLGwsaSxoKSkpfX1yZXR1cm4gcn0sX2FjY3VtdWxhdGU6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLm51bVBvaW50cz9lLnByb3BlcnRpZXM6dGhpcy5vcHRpb25zLm1hcCh0aGlzLnBvaW50c1tlLmlkXS5wcm9wZXJ0aWVzKTt0aGlzLm9wdGlvbnMucmVkdWNlKHQscil9fSxqdC5wcm90b3R5cGUub3B0aW9ucz17bWF4Wm9vbToxNCxpbmRleE1heFpvb206NSxpbmRleE1heFBvaW50czoxZTUsdG9sZXJhbmNlOjMsZXh0ZW50OjQwOTYsYnVmZmVyOjY0LGxpbmVNZXRyaWNzOiExLGRlYnVnOjB9LGp0LnByb3RvdHlwZS5zcGxpdFRpbGU9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPVt0LGUscixuXSxsPXRoaXMub3B0aW9ucyxjPWwuZGVidWc7cy5sZW5ndGg7KXtuPXMucG9wKCkscj1zLnBvcCgpLGU9cy5wb3AoKSx0PXMucG9wKCk7dmFyIHU9MTw8ZSxoPVZ0KGUscixuKSxmPXRoaXMudGlsZXNbaF07aWYoIWYmJihjPjEmJmNvbnNvbGUudGltZShcImNyZWF0aW9uXCIpLGY9dGhpcy50aWxlc1toXT1GdCh0LGUscixuLGwpLHRoaXMudGlsZUNvb3Jkcy5wdXNoKHt6OmUseDpyLHk6bn0pLGMpKXtjPjEmJihjb25zb2xlLmxvZyhcInRpbGUgeiVkLSVkLSVkIChmZWF0dXJlczogJWQsIHBvaW50czogJWQsIHNpbXBsaWZpZWQ6ICVkKVwiLGUscixuLGYubnVtRmVhdHVyZXMsZi5udW1Qb2ludHMsZi5udW1TaW1wbGlmaWVkKSxjb25zb2xlLnRpbWVFbmQoXCJjcmVhdGlvblwiKSk7dmFyIHA9XCJ6XCIrZTt0aGlzLnN0YXRzW3BdPSh0aGlzLnN0YXRzW3BdfHwwKSsxLHRoaXMudG90YWwrK31pZihmLnNvdXJjZT10LGkpe2lmKGU9PT1sLm1heFpvb218fGU9PT1pKWNvbnRpbnVlO3ZhciBkPTE8PGktZTtpZihyIT09TWF0aC5mbG9vcihhL2QpfHxuIT09TWF0aC5mbG9vcihvL2QpKWNvbnRpbnVlfWVsc2UgaWYoZT09PWwuaW5kZXhNYXhab29tfHxmLm51bVBvaW50czw9bC5pbmRleE1heFBvaW50cyljb250aW51ZTtpZihmLnNvdXJjZT1udWxsLDAhPT10Lmxlbmd0aCl7Yz4xJiZjb25zb2xlLnRpbWUoXCJjbGlwcGluZ1wiKTt2YXIgZyx2LG0seSx4LGIsXz0uNSpsLmJ1ZmZlci9sLmV4dGVudCx3PS41LV8saz0uNStfLEE9MStfO2c9dj1tPXk9bnVsbCx4PVR0KHQsdSxyLV8scitrLDAsZi5taW5YLGYubWF4WCxsKSxiPVR0KHQsdSxyK3cscitBLDAsZi5taW5YLGYubWF4WCxsKSx0PW51bGwseCYmKGc9VHQoeCx1LG4tXyxuK2ssMSxmLm1pblksZi5tYXhZLGwpLHY9VHQoeCx1LG4rdyxuK0EsMSxmLm1pblksZi5tYXhZLGwpLHg9bnVsbCksYiYmKG09VHQoYix1LG4tXyxuK2ssMSxmLm1pblksZi5tYXhZLGwpLHk9VHQoYix1LG4rdyxuK0EsMSxmLm1pblksZi5tYXhZLGwpLGI9bnVsbCksYz4xJiZjb25zb2xlLnRpbWVFbmQoXCJjbGlwcGluZ1wiKSxzLnB1c2goZ3x8W10sZSsxLDIqciwyKm4pLHMucHVzaCh2fHxbXSxlKzEsMipyLDIqbisxKSxzLnB1c2gobXx8W10sZSsxLDIqcisxLDIqbikscy5wdXNoKHl8fFtdLGUrMSwyKnIrMSwyKm4rMSl9fX0sanQucHJvdG90eXBlLmdldFRpbGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMub3B0aW9ucyxpPW4uZXh0ZW50LGE9bi5kZWJ1ZztpZih0PDB8fHQ+MjQpcmV0dXJuIG51bGw7dmFyIG89MTw8dCxzPVZ0KHQsZT0oZSVvK28pJW8scik7aWYodGhpcy50aWxlc1tzXSlyZXR1cm4gUHQodGhpcy50aWxlc1tzXSxpKTthPjEmJmNvbnNvbGUubG9nKFwiZHJpbGxpbmcgZG93biB0byB6JWQtJWQtJWRcIix0LGUscik7Zm9yKHZhciBsLGM9dCx1PWUsaD1yOyFsJiZjPjA7KWMtLSx1PU1hdGguZmxvb3IodS8yKSxoPU1hdGguZmxvb3IoaC8yKSxsPXRoaXMudGlsZXNbVnQoYyx1LGgpXTtyZXR1cm4gbCYmbC5zb3VyY2U/KGE+MSYmY29uc29sZS5sb2coXCJmb3VuZCBwYXJlbnQgdGlsZSB6JWQtJWQtJWRcIixjLHUsaCksYT4xJiZjb25zb2xlLnRpbWUoXCJkcmlsbGluZyBkb3duXCIpLHRoaXMuc3BsaXRUaWxlKGwuc291cmNlLGMsdSxoLHQsZSxyKSxhPjEmJmNvbnNvbGUudGltZUVuZChcImRyaWxsaW5nIGRvd25cIiksdGhpcy50aWxlc1tzXT9QdCh0aGlzLnRpbGVzW3NdLGkpOm51bGwpOm51bGx9O3ZhciBxdD1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHQscixuKXtlLmNhbGwodGhpcyx0LHIsVXQpLG4mJih0aGlzLmxvYWRHZW9KU09OPW4pfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkRGF0YT1mdW5jdGlvbih0LGUpe3RoaXMuX3BlbmRpbmdDYWxsYmFjayYmdGhpcy5fcGVuZGluZ0NhbGxiYWNrKG51bGwse2FiYW5kb25lZDohMH0pLHRoaXMuX3BlbmRpbmdDYWxsYmFjaz1lLHRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtcz10LHRoaXMuX3N0YXRlJiZcIklkbGVcIiE9PXRoaXMuX3N0YXRlP3RoaXMuX3N0YXRlPVwiTmVlZHNMb2FkRGF0YVwiOih0aGlzLl9zdGF0ZT1cIkNvYWxlc2NpbmdcIix0aGlzLl9sb2FkRGF0YSgpKX0sci5wcm90b3R5cGUuX2xvYWREYXRhPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0aGlzLl9wZW5kaW5nQ2FsbGJhY2smJnRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtcyl7dmFyIGU9dGhpcy5fcGVuZGluZ0NhbGxiYWNrLHI9dGhpcy5fcGVuZGluZ0xvYWREYXRhUGFyYW1zO2RlbGV0ZSB0aGlzLl9wZW5kaW5nQ2FsbGJhY2ssZGVsZXRlIHRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtcyx0aGlzLmxvYWRHZW9KU09OKHIsZnVuY3Rpb24obixpKXtpZihufHwhaSlyZXR1cm4gZShuKTtpZihcIm9iamVjdFwiIT10eXBlb2YgaSlyZXR1cm4gZShuZXcgRXJyb3IoXCJJbnB1dCBkYXRhIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LlwiKSk7IWZ1bmN0aW9uIHQoZSxyKXtzd2l0Y2goZSYmZS50eXBlfHxudWxsKXtjYXNlXCJGZWF0dXJlQ29sbGVjdGlvblwiOnJldHVybiBlLmZlYXR1cmVzPWUuZmVhdHVyZXMubWFwKHoodCxyKSksZTtjYXNlXCJGZWF0dXJlXCI6cmV0dXJuIGUuZ2VvbWV0cnk9dChlLmdlb21ldHJ5LHIpLGU7Y2FzZVwiUG9seWdvblwiOmNhc2VcIk11bHRpUG9seWdvblwiOnJldHVybiBmdW5jdGlvbih0LGUpe3JldHVyblwiUG9seWdvblwiPT09dC50eXBlP3QuY29vcmRpbmF0ZXM9Tyh0LmNvb3JkaW5hdGVzLGUpOlwiTXVsdGlQb2x5Z29uXCI9PT10LnR5cGUmJih0LmNvb3JkaW5hdGVzPXQuY29vcmRpbmF0ZXMubWFwKHooTyxlKSkpLHR9KGUscik7ZGVmYXVsdDpyZXR1cm4gZX19KGksITApO3RyeXt0Ll9nZW9KU09OSW5kZXg9ci5jbHVzdGVyP2Z1bmN0aW9uKHQpe3JldHVybiBuZXcgb3QodCl9KHIuc3VwZXJjbHVzdGVyT3B0aW9ucykubG9hZChpLmZlYXR1cmVzKTpuZXcganQoaSxyLmdlb2pzb25WdE9wdGlvbnMpfWNhdGNoKG4pe3JldHVybiBlKG4pfXQubG9hZGVkPXt9O3ZhciBhPXt9O2lmKHIucmVxdWVzdCYmci5yZXF1ZXN0LmNvbGxlY3RSZXNvdXJjZVRpbWluZyl7dmFyIG89dyhyLnJlcXVlc3QudXJsKTtvJiYoYS5yZXNvdXJjZVRpbWluZz17fSxhLnJlc291cmNlVGltaW5nW3Iuc291cmNlXT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG8pKSl9ZShudWxsLGEpfSl9fSxyLnByb3RvdHlwZS5jb2FsZXNjZT1mdW5jdGlvbigpe1wiQ29hbGVzY2luZ1wiPT09dGhpcy5fc3RhdGU/dGhpcy5fc3RhdGU9XCJJZGxlXCI6XCJOZWVkc0xvYWREYXRhXCI9PT10aGlzLl9zdGF0ZSYmKHRoaXMuX3N0YXRlPVwiQ29hbGVzY2luZ1wiLHRoaXMuX2xvYWREYXRhKCkpfSxyLnByb3RvdHlwZS5yZWxvYWRUaWxlPWZ1bmN0aW9uKHQscil7dmFyIG49dGhpcy5sb2FkZWQsaT10LnVpZDtyZXR1cm4gbiYmbltpXT9lLnByb3RvdHlwZS5yZWxvYWRUaWxlLmNhbGwodGhpcyx0LHIpOnRoaXMubG9hZFRpbGUodCxyKX0sci5wcm90b3R5cGUubG9hZEdlb0pTT049ZnVuY3Rpb24oZSxyKXtpZihlLnJlcXVlc3QpdC5nZXRKU09OKGUucmVxdWVzdCxyKTtlbHNle2lmKFwic3RyaW5nXCIhPXR5cGVvZiBlLmRhdGEpcmV0dXJuIHIobmV3IEVycm9yKFwiSW5wdXQgZGF0YSBpcyBub3QgYSB2YWxpZCBHZW9KU09OIG9iamVjdC5cIikpO3RyeXtyZXR1cm4gcihudWxsLEpTT04ucGFyc2UoZS5kYXRhKSl9Y2F0Y2godCl7cmV0dXJuIHIobmV3IEVycm9yKFwiSW5wdXQgZGF0YSBpcyBub3QgYSB2YWxpZCBHZW9KU09OIG9iamVjdC5cIikpfX19LHIucHJvdG90eXBlLnJlbW92ZVNvdXJjZT1mdW5jdGlvbih0LGUpe3RoaXMuX3BlbmRpbmdDYWxsYmFjayYmdGhpcy5fcGVuZGluZ0NhbGxiYWNrKG51bGwse2FiYW5kb25lZDohMH0pLGUoKX0scn0oQSksSHQ9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpczt0aGlzLnNlbGY9ZSx0aGlzLmFjdG9yPW5ldyB0LmRlZmF1bHQkNyhlLHRoaXMpLHRoaXMubGF5ZXJJbmRleGVzPXt9LHRoaXMud29ya2VyU291cmNlVHlwZXM9e3ZlY3RvcjpBLGdlb2pzb246cXR9LHRoaXMud29ya2VyU291cmNlcz17fSx0aGlzLmRlbVdvcmtlclNvdXJjZXM9e30sdGhpcy5zZWxmLnJlZ2lzdGVyV29ya2VyU291cmNlPWZ1bmN0aW9uKHQsZSl7aWYoci53b3JrZXJTb3VyY2VUeXBlc1t0XSl0aHJvdyBuZXcgRXJyb3IoJ1dvcmtlciBzb3VyY2Ugd2l0aCBuYW1lIFwiJyt0KydcIiBhbHJlYWR5IHJlZ2lzdGVyZWQuJyk7ci53b3JrZXJTb3VyY2VUeXBlc1t0XT1lfSx0aGlzLnNlbGYucmVnaXN0ZXJSVExUZXh0UGx1Z2luPWZ1bmN0aW9uKGUpe2lmKHQucGx1Z2luLmlzTG9hZGVkKCkpdGhyb3cgbmV3IEVycm9yKFwiUlRMIHRleHQgcGx1Z2luIGFscmVhZHkgcmVnaXN0ZXJlZC5cIik7dC5wbHVnaW4uYXBwbHlBcmFiaWNTaGFwaW5nPWUuYXBwbHlBcmFiaWNTaGFwaW5nLHQucGx1Z2luLnByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dD1lLnByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dH19O3JldHVybiBIdC5wcm90b3R5cGUuc2V0TGF5ZXJzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldExheWVySW5kZXgodCkucmVwbGFjZShlKSxyKCl9LEh0LnByb3RvdHlwZS51cGRhdGVMYXllcnM9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0TGF5ZXJJbmRleCh0KS51cGRhdGUoZS5sYXllcnMsZS5yZW1vdmVkSWRzKSxyKCl9LEh0LnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbih0LGUscil7dGhpcy5nZXRXb3JrZXJTb3VyY2UodCxlLnR5cGUsZS5zb3VyY2UpLmxvYWRUaWxlKGUscil9LEh0LnByb3RvdHlwZS5sb2FkREVNVGlsZT1mdW5jdGlvbih0LGUscil7dGhpcy5nZXRERU1Xb3JrZXJTb3VyY2UodCxlLnNvdXJjZSkubG9hZFRpbGUoZSxyKX0sSHQucHJvdG90eXBlLnJlbG9hZFRpbGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0V29ya2VyU291cmNlKHQsZS50eXBlLGUuc291cmNlKS5yZWxvYWRUaWxlKGUscil9LEh0LnByb3RvdHlwZS5hYm9ydFRpbGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0V29ya2VyU291cmNlKHQsZS50eXBlLGUuc291cmNlKS5hYm9ydFRpbGUoZSxyKX0sSHQucHJvdG90eXBlLnJlbW92ZVRpbGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0V29ya2VyU291cmNlKHQsZS50eXBlLGUuc291cmNlKS5yZW1vdmVUaWxlKGUscil9LEh0LnByb3RvdHlwZS5yZW1vdmVERU1UaWxlPWZ1bmN0aW9uKHQsZSl7dGhpcy5nZXRERU1Xb3JrZXJTb3VyY2UodCxlLnNvdXJjZSkucmVtb3ZlVGlsZShlKX0sSHQucHJvdG90eXBlLnJlbW92ZVNvdXJjZT1mdW5jdGlvbih0LGUscil7aWYodGhpcy53b3JrZXJTb3VyY2VzW3RdJiZ0aGlzLndvcmtlclNvdXJjZXNbdF1bZS50eXBlXSYmdGhpcy53b3JrZXJTb3VyY2VzW3RdW2UudHlwZV1bZS5zb3VyY2VdKXt2YXIgbj10aGlzLndvcmtlclNvdXJjZXNbdF1bZS50eXBlXVtlLnNvdXJjZV07ZGVsZXRlIHRoaXMud29ya2VyU291cmNlc1t0XVtlLnR5cGVdW2Uuc291cmNlXSx2b2lkIDAhPT1uLnJlbW92ZVNvdXJjZT9uLnJlbW92ZVNvdXJjZShlLHIpOnIoKX19LEh0LnByb3RvdHlwZS5sb2FkV29ya2VyU291cmNlPWZ1bmN0aW9uKHQsZSxyKXt0cnl7dGhpcy5zZWxmLmltcG9ydFNjcmlwdHMoZS51cmwpLHIoKX1jYXRjaCh0KXtyKHQudG9TdHJpbmcoKSl9fSxIdC5wcm90b3R5cGUubG9hZFJUTFRleHRQbHVnaW49ZnVuY3Rpb24oZSxyLG4pe3RyeXt0LnBsdWdpbi5pc0xvYWRlZCgpfHwodGhpcy5zZWxmLmltcG9ydFNjcmlwdHMociksbih0LnBsdWdpbi5pc0xvYWRlZCgpP251bGw6bmV3IEVycm9yKFwiUlRMIFRleHQgUGx1Z2luIGZhaWxlZCB0byBpbXBvcnQgc2NyaXB0cyBmcm9tIFwiK3IpKSl9Y2F0Y2godCl7bih0LnRvU3RyaW5nKCkpfX0sSHQucHJvdG90eXBlLmdldExheWVySW5kZXg9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXllckluZGV4ZXNbdF07cmV0dXJuIGV8fChlPXRoaXMubGF5ZXJJbmRleGVzW3RdPW5ldyBuKSxlfSxIdC5wcm90b3R5cGUuZ2V0V29ya2VyU291cmNlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzO2lmKHRoaXMud29ya2VyU291cmNlc1t0XXx8KHRoaXMud29ya2VyU291cmNlc1t0XT17fSksdGhpcy53b3JrZXJTb3VyY2VzW3RdW2VdfHwodGhpcy53b3JrZXJTb3VyY2VzW3RdW2VdPXt9KSwhdGhpcy53b3JrZXJTb3VyY2VzW3RdW2VdW3JdKXt2YXIgaT17c2VuZDpmdW5jdGlvbihlLHIsaSl7bi5hY3Rvci5zZW5kKGUscixpLHQpfX07dGhpcy53b3JrZXJTb3VyY2VzW3RdW2VdW3JdPW5ldyB0aGlzLndvcmtlclNvdXJjZVR5cGVzW2VdKGksdGhpcy5nZXRMYXllckluZGV4KHQpKX1yZXR1cm4gdGhpcy53b3JrZXJTb3VyY2VzW3RdW2VdW3JdfSxIdC5wcm90b3R5cGUuZ2V0REVNV29ya2VyU291cmNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZGVtV29ya2VyU291cmNlc1t0XXx8KHRoaXMuZGVtV29ya2VyU291cmNlc1t0XT17fSksdGhpcy5kZW1Xb3JrZXJTb3VyY2VzW3RdW2VdfHwodGhpcy5kZW1Xb3JrZXJTb3VyY2VzW3RdW2VdPW5ldyBUKSx0aGlzLmRlbVdvcmtlclNvdXJjZXNbdF1bZV19LFwidW5kZWZpbmVkXCIhPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYmJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmbmV3IEh0KHNlbGYpLEh0fSksaSgwLGZ1bmN0aW9uKHQpe3ZhciBlPXQuY3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm4hIShcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQmJkFycmF5LnByb3RvdHlwZSYmQXJyYXkucHJvdG90eXBlLmV2ZXJ5JiZBcnJheS5wcm90b3R5cGUuZmlsdGVyJiZBcnJheS5wcm90b3R5cGUuZm9yRWFjaCYmQXJyYXkucHJvdG90eXBlLmluZGV4T2YmJkFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiYmQXJyYXkucHJvdG90eXBlLm1hcCYmQXJyYXkucHJvdG90eXBlLnNvbWUmJkFycmF5LnByb3RvdHlwZS5yZWR1Y2UmJkFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCYmQXJyYXkuaXNBcnJheSYmRnVuY3Rpb24ucHJvdG90eXBlJiZGdW5jdGlvbi5wcm90b3R5cGUuYmluZCYmT2JqZWN0LmtleXMmJk9iamVjdC5jcmVhdGUmJk9iamVjdC5nZXRQcm90b3R5cGVPZiYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMmJk9iamVjdC5pc1NlYWxlZCYmT2JqZWN0LmlzRnJvemVuJiZPYmplY3QuaXNFeHRlbnNpYmxlJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJiZPYmplY3QuZGVmaW5lUHJvcGVydHkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzJiZPYmplY3Quc2VhbCYmT2JqZWN0LmZyZWV6ZSYmT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zJiZcIkpTT05cImluIHdpbmRvdyYmXCJwYXJzZVwiaW4gSlNPTiYmXCJzdHJpbmdpZnlcImluIEpTT04mJmZ1bmN0aW9uKCl7aWYoIShcIldvcmtlclwiaW4gd2luZG93JiZcIkJsb2JcImluIHdpbmRvdyYmXCJVUkxcImluIHdpbmRvdykpcmV0dXJuITE7dmFyIHQsZSxyPW5ldyBCbG9iKFtcIlwiXSx7dHlwZTpcInRleHQvamF2YXNjcmlwdFwifSksbj1VUkwuY3JlYXRlT2JqZWN0VVJMKHIpO3RyeXtlPW5ldyBXb3JrZXIobiksdD0hMH1jYXRjaChlKXt0PSExfXJldHVybiBlJiZlLnRlcm1pbmF0ZSgpLFVSTC5yZXZva2VPYmplY3RVUkwobiksdH0oKSYmXCJVaW50OENsYW1wZWRBcnJheVwiaW4gd2luZG93JiZmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09clt0XSYmKHJbdF09ZnVuY3Rpb24odCl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSxuPU9iamVjdC5jcmVhdGUoZS53ZWJHTENvbnRleHRBdHRyaWJ1dGVzKTtyZXR1cm4gbi5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0PXQsci5wcm9iYWJseVN1cHBvcnRzQ29udGV4dD9yLnByb2JhYmx5U3VwcG9ydHNDb250ZXh0KFwid2ViZ2xcIixuKXx8ci5wcm9iYWJseVN1cHBvcnRzQ29udGV4dChcImV4cGVyaW1lbnRhbC13ZWJnbFwiLG4pOnIuc3VwcG9ydHNDb250ZXh0P3Iuc3VwcG9ydHNDb250ZXh0KFwid2ViZ2xcIixuKXx8ci5zdXBwb3J0c0NvbnRleHQoXCJleHBlcmltZW50YWwtd2ViZ2xcIixuKTpyLmdldENvbnRleHQoXCJ3ZWJnbFwiLG4pfHxyLmdldENvbnRleHQoXCJleHBlcmltZW50YWwtd2ViZ2xcIixuKX0odCkpLHJbdF19KHQmJnQuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCkpfXQuZXhwb3J0cz90LmV4cG9ydHM9ZTp3aW5kb3cmJih3aW5kb3cubWFwYm94Z2w9d2luZG93Lm1hcGJveGdsfHx7fSx3aW5kb3cubWFwYm94Z2wuc3VwcG9ydGVkPWUpO3ZhciByPXt9O2Uud2ViR0xDb250ZXh0QXR0cmlidXRlcz17YW50aWFsaWFzOiExLGFscGhhOiEwLHN0ZW5jaWw6ITAsZGVwdGg6ITB9fSkscj10LmRlZmF1bHQucGVyZm9ybWFuY2UmJnQuZGVmYXVsdC5wZXJmb3JtYW5jZS5ub3c/dC5kZWZhdWx0LnBlcmZvcm1hbmNlLm5vdy5iaW5kKHQuZGVmYXVsdC5wZXJmb3JtYW5jZSk6RGF0ZS5ub3cuYmluZChEYXRlKSxuPXQuZGVmYXVsdC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHQuZGVmYXVsdC5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHQuZGVmYXVsdC53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHQuZGVmYXVsdC5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSxpPXQuZGVmYXVsdC5jYW5jZWxBbmltYXRpb25GcmFtZXx8dC5kZWZhdWx0Lm1vekNhbmNlbEFuaW1hdGlvbkZyYW1lfHx0LmRlZmF1bHQud2Via2l0Q2FuY2VsQW5pbWF0aW9uRnJhbWV8fHQuZGVmYXVsdC5tc0NhbmNlbEFuaW1hdGlvbkZyYW1lLGE9e25vdzpyLGZyYW1lOmZ1bmN0aW9uKHQpe3JldHVybiBuKHQpfSxjYW5jZWxGcmFtZTpmdW5jdGlvbih0KXtyZXR1cm4gaSh0KX0sZ2V0SW1hZ2VEYXRhOmZ1bmN0aW9uKGUpe3ZhciByPXQuZGVmYXVsdC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLG49ci5nZXRDb250ZXh0KFwiMmRcIik7aWYoIW4pdGhyb3cgbmV3IEVycm9yKFwiZmFpbGVkIHRvIGNyZWF0ZSBjYW52YXMgMmQgY29udGV4dFwiKTtyZXR1cm4gci53aWR0aD1lLndpZHRoLHIuaGVpZ2h0PWUuaGVpZ2h0LG4uZHJhd0ltYWdlKGUsMCwwLGUud2lkdGgsZS5oZWlnaHQpLG4uZ2V0SW1hZ2VEYXRhKDAsMCxlLndpZHRoLGUuaGVpZ2h0KX0saGFyZHdhcmVDb25jdXJyZW5jeTp0LmRlZmF1bHQubmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3l8fDQsZ2V0IGRldmljZVBpeGVsUmF0aW8oKXtyZXR1cm4gdC5kZWZhdWx0LmRldmljZVBpeGVsUmF0aW99LHN1cHBvcnRzV2VicDohMX07aWYodC5kZWZhdWx0LmRvY3VtZW50KXt2YXIgbz10LmRlZmF1bHQuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtvLm9ubG9hZD1mdW5jdGlvbigpe2Euc3VwcG9ydHNXZWJwPSEwfSxvLnNyYz1cImRhdGE6aW1hZ2Uvd2VicDtiYXNlNjQsVWtsR1JoNEFBQUJYUlVKUVZsQTRUQkVBQUFBdkFRQUFBQWZRLy83M3YvK0JpT2gvQUFBPVwifXZhciBzPXtjcmVhdGU6ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXQuZGVmYXVsdC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpO3JldHVybiByJiYoaS5jbGFzc05hbWU9ciksbiYmbi5hcHBlbmRDaGlsZChpKSxpfSxjcmVhdGVOUzpmdW5jdGlvbihlLHIpe3JldHVybiB0LmRlZmF1bHQuZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUscil9fSxsPXQuZGVmYXVsdC5kb2N1bWVudD90LmRlZmF1bHQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlOm51bGw7ZnVuY3Rpb24gYyh0KXtpZighbClyZXR1cm4gbnVsbDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdaW4gbClyZXR1cm4gdFtlXTtyZXR1cm4gdFswXX12YXIgdSxoPWMoW1widXNlclNlbGVjdFwiLFwiTW96VXNlclNlbGVjdFwiLFwiV2Via2l0VXNlclNlbGVjdFwiLFwibXNVc2VyU2VsZWN0XCJdKTtzLmRpc2FibGVEcmFnPWZ1bmN0aW9uKCl7bCYmaCYmKHU9bFtoXSxsW2hdPVwibm9uZVwiKX0scy5lbmFibGVEcmFnPWZ1bmN0aW9uKCl7bCYmaCYmKGxbaF09dSl9O3ZhciBmPWMoW1widHJhbnNmb3JtXCIsXCJXZWJraXRUcmFuc2Zvcm1cIl0pO3Muc2V0VHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSl7dC5zdHlsZVtmXT1lfTt2YXIgcD0hMTt0cnl7dmFyIGQ9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwicGFzc2l2ZVwiLHtnZXQ6ZnVuY3Rpb24oKXtwPSEwfX0pO3QuZGVmYXVsdC5hZGRFdmVudExpc3RlbmVyKFwidGVzdFwiLGQsZCksdC5kZWZhdWx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0ZXN0XCIsZCxkKX1jYXRjaCh0KXtwPSExfXMuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUscixuKXt2b2lkIDA9PT1uJiYobj17fSksXCJwYXNzaXZlXCJpbiBuJiZwP3QuYWRkRXZlbnRMaXN0ZW5lcihlLHIsbik6dC5hZGRFdmVudExpc3RlbmVyKGUscixuLmNhcHR1cmUpfSxzLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxlLHIsbil7dm9pZCAwPT09biYmKG49e30pLFwicGFzc2l2ZVwiaW4gbiYmcD90LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxyLG4pOnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHIsbi5jYXB0dXJlKX07dmFyIGc9ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksdC5kZWZhdWx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLGcsITApfTtzLnN1cHByZXNzQ2xpY2s9ZnVuY3Rpb24oKXt0LmRlZmF1bHQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsZywhMCksdC5kZWZhdWx0LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LmRlZmF1bHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsZywhMCl9LDApfSxzLm1vdXNlUG9zPWZ1bmN0aW9uKGUscil7dmFyIG49ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gcj1yLnRvdWNoZXM/ci50b3VjaGVzWzBdOnIsbmV3IHQuZGVmYXVsdCQxKHIuY2xpZW50WC1uLmxlZnQtZS5jbGllbnRMZWZ0LHIuY2xpZW50WS1uLnRvcC1lLmNsaWVudFRvcCl9LHMudG91Y2hQb3M9ZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPVtdLGE9XCJ0b3VjaGVuZFwiPT09ci50eXBlP3IuY2hhbmdlZFRvdWNoZXM6ci50b3VjaGVzLG89MDtvPGEubGVuZ3RoO28rKylpLnB1c2gobmV3IHQuZGVmYXVsdCQxKGFbb10uY2xpZW50WC1uLmxlZnQtZS5jbGllbnRMZWZ0LGFbb10uY2xpZW50WS1uLnRvcC1lLmNsaWVudFRvcCkpO3JldHVybiBpfSxzLm1vdXNlQnV0dG9uPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT10LmRlZmF1bHQuSW5zdGFsbFRyaWdnZXImJjI9PT1lLmJ1dHRvbiYmZS5jdHJsS2V5JiZ0LmRlZmF1bHQubmF2aWdhdG9yLnBsYXRmb3JtLnRvVXBwZXJDYXNlKCkuaW5kZXhPZihcIk1BQ1wiKT49MD8wOmUuYnV0dG9ufSxzLnJlbW92ZT1mdW5jdGlvbih0KXt0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KX07dmFyIHY9e0FQSV9VUkw6XCJodHRwczovL2FwaS5tYXBib3guY29tXCIsUkVRVUlSRV9BQ0NFU1NfVE9LRU46ITAsQUNDRVNTX1RPS0VOOm51bGx9LG09XCJTZWUgaHR0cHM6Ly93d3cubWFwYm94LmNvbS9hcGktZG9jdW1lbnRhdGlvbi8jYWNjZXNzLXRva2Vuc1wiO2Z1bmN0aW9uIHkodCxlKXt2YXIgcj1UKHYuQVBJX1VSTCk7aWYodC5wcm90b2NvbD1yLnByb3RvY29sLHQuYXV0aG9yaXR5PXIuYXV0aG9yaXR5LFwiL1wiIT09ci5wYXRoJiYodC5wYXRoPVwiXCIrci5wYXRoK3QucGF0aCksIXYuUkVRVUlSRV9BQ0NFU1NfVE9LRU4pcmV0dXJuIE0odCk7aWYoIShlPWV8fHYuQUNDRVNTX1RPS0VOKSl0aHJvdyBuZXcgRXJyb3IoXCJBbiBBUEkgYWNjZXNzIHRva2VuIGlzIHJlcXVpcmVkIHRvIHVzZSBNYXBib3ggR0wuIFwiK20pO2lmKFwic1wiPT09ZVswXSl0aHJvdyBuZXcgRXJyb3IoXCJVc2UgYSBwdWJsaWMgYWNjZXNzIHRva2VuIChway4qKSB3aXRoIE1hcGJveCBHTCwgbm90IGEgc2VjcmV0IGFjY2VzcyB0b2tlbiAoc2suKikuIFwiK20pO3JldHVybiB0LnBhcmFtcy5wdXNoKFwiYWNjZXNzX3Rva2VuPVwiK2UpLE0odCl9ZnVuY3Rpb24geCh0KXtyZXR1cm4gMD09PXQuaW5kZXhPZihcIm1hcGJveDpcIil9dmFyIGI9ZnVuY3Rpb24odCxlKXtpZigheCh0KSlyZXR1cm4gdDt2YXIgcj1UKHQpO3JldHVybiByLnBhdGg9XCIvdjQvXCIrci5hdXRob3JpdHkrXCIuanNvblwiLHIucGFyYW1zLnB1c2goXCJzZWN1cmVcIikseShyLGUpfSxfPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPVQodCk7cmV0dXJuIHgodCk/KGkucGF0aD1cIi9zdHlsZXMvdjFcIitpLnBhdGgrXCIvc3ByaXRlXCIrZStyLHkoaSxuKSk6KGkucGF0aCs9XCJcIitlK3IsTShpKSl9LHc9LyhcXC4ocG5nfGpwZylcXGQqKSg/PSQpLyxrPWZ1bmN0aW9uKHQsZSxyKXtpZighZXx8IXgoZSkpcmV0dXJuIHQ7dmFyIG49VCh0KSxpPWEuZGV2aWNlUGl4ZWxSYXRpbz49Mnx8NTEyPT09cj9cIkAyeFwiOlwiXCIsbz1hLnN1cHBvcnRzV2VicD9cIi53ZWJwXCI6XCIkMVwiO3JldHVybiBuLnBhdGg9bi5wYXRoLnJlcGxhY2UodyxcIlwiK2krbyksZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspMD09PXRbZV0uaW5kZXhPZihcImFjY2Vzc190b2tlbj10ay5cIikmJih0W2VdPVwiYWNjZXNzX3Rva2VuPVwiKyh2LkFDQ0VTU19UT0tFTnx8XCJcIikpfShuLnBhcmFtcyksTShuKX0sQT0vXihcXHcrKTpcXC9cXC8oW15cXC8/XSopKFxcL1teP10rKT9cXD8/KC4rKT8vO2Z1bmN0aW9uIFQodCl7dmFyIGU9dC5tYXRjaChBKTtpZighZSl0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gcGFyc2UgVVJMIG9iamVjdFwiKTtyZXR1cm57cHJvdG9jb2w6ZVsxXSxhdXRob3JpdHk6ZVsyXSxwYXRoOmVbM118fFwiL1wiLHBhcmFtczplWzRdP2VbNF0uc3BsaXQoXCImXCIpOltdfX1mdW5jdGlvbiBNKHQpe3ZhciBlPXQucGFyYW1zLmxlbmd0aD9cIj9cIit0LnBhcmFtcy5qb2luKFwiJlwiKTpcIlwiO3JldHVybiB0LnByb3RvY29sK1wiOi8vXCIrdC5hdXRob3JpdHkrdC5wYXRoK2V9dmFyIFM9dC5kZWZhdWx0LkhUTUxJbWFnZUVsZW1lbnQsRT10LmRlZmF1bHQuSFRNTENhbnZhc0VsZW1lbnQsQz10LmRlZmF1bHQuSFRNTFZpZGVvRWxlbWVudCxMPXQuZGVmYXVsdC5JbWFnZURhdGEsej1mdW5jdGlvbih0LGUscixuKXt0aGlzLmNvbnRleHQ9dCx0aGlzLmZvcm1hdD1yLHRoaXMudGV4dHVyZT10LmdsLmNyZWF0ZVRleHR1cmUoKSx0aGlzLnVwZGF0ZShlLG4pfTt6LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10LndpZHRoLG49dC5oZWlnaHQsaT0hdGhpcy5zaXplfHx0aGlzLnNpemVbMF0hPT1yfHx0aGlzLnNpemVbMV0hPT1uLGE9dGhpcy5jb250ZXh0LG89YS5nbDt0aGlzLnVzZU1pcG1hcD1Cb29sZWFuKGUmJmUudXNlTWlwbWFwKSxvLmJpbmRUZXh0dXJlKG8uVEVYVFVSRV8yRCx0aGlzLnRleHR1cmUpLGk/KHRoaXMuc2l6ZT1bcixuXSxhLnBpeGVsU3RvcmVVbnBhY2suc2V0KDEpLHRoaXMuZm9ybWF0IT09by5SR0JBfHxlJiYhMT09PWUucHJlbXVsdGlwbHl8fGEucGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGEuc2V0KCEwKSx0IGluc3RhbmNlb2YgU3x8dCBpbnN0YW5jZW9mIEV8fHQgaW5zdGFuY2VvZiBDfHx0IGluc3RhbmNlb2YgTD9vLnRleEltYWdlMkQoby5URVhUVVJFXzJELDAsdGhpcy5mb3JtYXQsdGhpcy5mb3JtYXQsby5VTlNJR05FRF9CWVRFLHQpOm8udGV4SW1hZ2UyRChvLlRFWFRVUkVfMkQsMCx0aGlzLmZvcm1hdCxyLG4sMCx0aGlzLmZvcm1hdCxvLlVOU0lHTkVEX0JZVEUsdC5kYXRhKSk6dCBpbnN0YW5jZW9mIFN8fHQgaW5zdGFuY2VvZiBFfHx0IGluc3RhbmNlb2YgQ3x8dCBpbnN0YW5jZW9mIEw/by50ZXhTdWJJbWFnZTJEKG8uVEVYVFVSRV8yRCwwLDAsMCxvLlJHQkEsby5VTlNJR05FRF9CWVRFLHQpOm8udGV4U3ViSW1hZ2UyRChvLlRFWFRVUkVfMkQsMCwwLDAscixuLG8uUkdCQSxvLlVOU0lHTkVEX0JZVEUsdC5kYXRhKSx0aGlzLnVzZU1pcG1hcCYmdGhpcy5pc1NpemVQb3dlck9mVHdvKCkmJm8uZ2VuZXJhdGVNaXBtYXAoby5URVhUVVJFXzJEKX0sei5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5jb250ZXh0LmdsO24uYmluZFRleHR1cmUobi5URVhUVVJFXzJELHRoaXMudGV4dHVyZSksciE9PW4uTElORUFSX01JUE1BUF9ORUFSRVNUfHx0aGlzLmlzU2l6ZVBvd2VyT2ZUd28oKXx8KHI9bi5MSU5FQVIpLHQhPT10aGlzLmZpbHRlciYmKG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX01BR19GSUxURVIsdCksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfTUlOX0ZJTFRFUixyfHx0KSx0aGlzLmZpbHRlcj10KSxlIT09dGhpcy53cmFwJiYobi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9TLGUpLG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX1dSQVBfVCxlKSx0aGlzLndyYXA9ZSl9LHoucHJvdG90eXBlLmlzU2l6ZVBvd2VyT2ZUd289ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplWzBdPT09dGhpcy5zaXplWzFdJiZNYXRoLmxvZyh0aGlzLnNpemVbMF0pL01hdGguTE4yJTE9PTB9LHoucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQuZ2wuZGVsZXRlVGV4dHVyZSh0aGlzLnRleHR1cmUpLHRoaXMudGV4dHVyZT1udWxsfTt2YXIgTz1mdW5jdGlvbigpe3RoaXMuaW1hZ2VzPXt9LHRoaXMubG9hZGVkPSExLHRoaXMucmVxdWVzdG9ycz1bXSx0aGlzLnNoZWxmUGFjaz1uZXcgdC5kZWZhdWx0JDIoNjQsNjQse2F1dG9SZXNpemU6ITB9KSx0aGlzLnBhdHRlcm5zPXt9LHRoaXMuYXRsYXNJbWFnZT1uZXcgdC5SR0JBSW1hZ2Uoe3dpZHRoOjY0LGhlaWdodDo2NH0pLHRoaXMuZGlydHk9ITB9O08ucHJvdG90eXBlLmlzTG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9hZGVkfSxPLnByb3RvdHlwZS5zZXRMb2FkZWQ9ZnVuY3Rpb24odCl7aWYodGhpcy5sb2FkZWQhPT10JiYodGhpcy5sb2FkZWQ9dCx0KSl7Zm9yKHZhciBlPTAscj10aGlzLnJlcXVlc3RvcnM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9bi5pZHMsYT1uLmNhbGxiYWNrO3RoaXMuX25vdGlmeShpLGEpfXRoaXMucmVxdWVzdG9ycz1bXX19LE8ucHJvdG90eXBlLmdldEltYWdlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltYWdlc1t0XX0sTy5wcm90b3R5cGUuYWRkSW1hZ2U9ZnVuY3Rpb24odCxlKXt0aGlzLmltYWdlc1t0XT1lfSxPLnByb3RvdHlwZS5yZW1vdmVJbWFnZT1mdW5jdGlvbih0KXtkZWxldGUgdGhpcy5pbWFnZXNbdF07dmFyIGU9dGhpcy5wYXR0ZXJuc1t0XTtlJiYodGhpcy5zaGVsZlBhY2sudW5yZWYoZS5iaW4pLGRlbGV0ZSB0aGlzLnBhdHRlcm5zW3RdKX0sTy5wcm90b3R5cGUuZ2V0SW1hZ2VzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ITA7aWYoIXRoaXMuaXNMb2FkZWQoKSlmb3IodmFyIG49MCxpPXQ7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO3RoaXMuaW1hZ2VzW2FdfHwocj0hMSl9dGhpcy5pc0xvYWRlZCgpfHxyP3RoaXMuX25vdGlmeSh0LGUpOnRoaXMucmVxdWVzdG9ycy5wdXNoKHtpZHM6dCxjYWxsYmFjazplfSl9LE8ucHJvdG90eXBlLl9ub3RpZnk9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9e30sbj0wLGk9dDtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl0sbz10aGlzLmltYWdlc1thXTtvJiYoclthXT17ZGF0YTpvLmRhdGEuY2xvbmUoKSxwaXhlbFJhdGlvOm8ucGl4ZWxSYXRpbyxzZGY6by5zZGZ9KX1lKG51bGwscil9LE8ucHJvdG90eXBlLmdldFBpeGVsU2l6ZT1mdW5jdGlvbigpe3JldHVybnt3aWR0aDp0aGlzLnNoZWxmUGFjay53LGhlaWdodDp0aGlzLnNoZWxmUGFjay5ofX0sTy5wcm90b3R5cGUuZ2V0UGF0dGVybj1mdW5jdGlvbihlKXt2YXIgcj10aGlzLnBhdHRlcm5zW2VdO2lmKHIpcmV0dXJuIHIucG9zaXRpb247dmFyIG49dGhpcy5nZXRJbWFnZShlKTtpZighbilyZXR1cm4gbnVsbDt2YXIgaT1uLmRhdGEud2lkdGgrMixhPW4uZGF0YS5oZWlnaHQrMixvPXRoaXMuc2hlbGZQYWNrLnBhY2tPbmUoaSxhKTtpZighbylyZXR1cm4gbnVsbDt0aGlzLmF0bGFzSW1hZ2UucmVzaXplKHRoaXMuZ2V0UGl4ZWxTaXplKCkpO3ZhciBzPW4uZGF0YSxsPXRoaXMuYXRsYXNJbWFnZSxjPW8ueCsxLHU9by55KzEsaD1zLndpZHRoLGY9cy5oZWlnaHQ7dC5SR0JBSW1hZ2UuY29weShzLGwse3g6MCx5OjB9LHt4OmMseTp1fSx7d2lkdGg6aCxoZWlnaHQ6Zn0pLHQuUkdCQUltYWdlLmNvcHkocyxsLHt4OjAseTpmLTF9LHt4OmMseTp1LTF9LHt3aWR0aDpoLGhlaWdodDoxfSksdC5SR0JBSW1hZ2UuY29weShzLGwse3g6MCx5OjB9LHt4OmMseTp1K2Z9LHt3aWR0aDpoLGhlaWdodDoxfSksdC5SR0JBSW1hZ2UuY29weShzLGwse3g6aC0xLHk6MH0se3g6Yy0xLHk6dX0se3dpZHRoOjEsaGVpZ2h0OmZ9KSx0LlJHQkFJbWFnZS5jb3B5KHMsbCx7eDowLHk6MH0se3g6YytoLHk6dX0se3dpZHRoOjEsaGVpZ2h0OmZ9KSx0aGlzLmRpcnR5PSEwO3ZhciBwPW5ldyB0LkltYWdlUG9zaXRpb24obyxuKTtyZXR1cm4gdGhpcy5wYXR0ZXJuc1tlXT17YmluOm8scG9zaXRpb246cH0scH0sTy5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0KXt2YXIgZT10LmdsO3RoaXMuYXRsYXNUZXh0dXJlP3RoaXMuZGlydHkmJih0aGlzLmF0bGFzVGV4dHVyZS51cGRhdGUodGhpcy5hdGxhc0ltYWdlKSx0aGlzLmRpcnR5PSExKTp0aGlzLmF0bGFzVGV4dHVyZT1uZXcgeih0LHRoaXMuYXRsYXNJbWFnZSxlLlJHQkEpLHRoaXMuYXRsYXNUZXh0dXJlLmJpbmQoZS5MSU5FQVIsZS5DTEFNUF9UT19FREdFKX07dmFyIEk9UCxEPTFlMjA7ZnVuY3Rpb24gUCh0LGUscixuLGksYSl7dGhpcy5mb250U2l6ZT10fHwyNCx0aGlzLmJ1ZmZlcj12b2lkIDA9PT1lPzM6ZSx0aGlzLmN1dG9mZj1ufHwuMjUsdGhpcy5mb250RmFtaWx5PWl8fFwic2Fucy1zZXJpZlwiLHRoaXMuZm9udFdlaWdodD1hfHxcIm5vcm1hbFwiLHRoaXMucmFkaXVzPXJ8fDg7dmFyIG89dGhpcy5zaXplPXRoaXMuZm9udFNpemUrMip0aGlzLmJ1ZmZlcjt0aGlzLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLHRoaXMuY2FudmFzLndpZHRoPXRoaXMuY2FudmFzLmhlaWdodD1vLHRoaXMuY3R4PXRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKSx0aGlzLmN0eC5mb250PXRoaXMuZm9udFdlaWdodCtcIiBcIit0aGlzLmZvbnRTaXplK1wicHggXCIrdGhpcy5mb250RmFtaWx5LHRoaXMuY3R4LnRleHRCYXNlbGluZT1cIm1pZGRsZVwiLHRoaXMuY3R4LmZpbGxTdHlsZT1cImJsYWNrXCIsdGhpcy5ncmlkT3V0ZXI9bmV3IEZsb2F0NjRBcnJheShvKm8pLHRoaXMuZ3JpZElubmVyPW5ldyBGbG9hdDY0QXJyYXkobypvKSx0aGlzLmY9bmV3IEZsb2F0NjRBcnJheShvKSx0aGlzLmQ9bmV3IEZsb2F0NjRBcnJheShvKSx0aGlzLno9bmV3IEZsb2F0NjRBcnJheShvKzEpLHRoaXMudj1uZXcgSW50MTZBcnJheShvKSx0aGlzLm1pZGRsZT1NYXRoLnJvdW5kKG8vMioobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwiR2Vja28vXCIpPj0wPzEuMjoxKSl9ZnVuY3Rpb24gUih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9MDtzPGU7cysrKXtmb3IodmFyIGw9MDtsPHI7bCsrKW5bbF09dFtsKmUrc107Zm9yKEYobixpLGEsbyxyKSxsPTA7bDxyO2wrKyl0W2wqZStzXT1pW2xdfWZvcihsPTA7bDxyO2wrKyl7Zm9yKHM9MDtzPGU7cysrKW5bc109dFtsKmUrc107Zm9yKEYobixpLGEsbyxlKSxzPTA7czxlO3MrKyl0W2wqZStzXT1NYXRoLnNxcnQoaVtzXSl9fWZ1bmN0aW9uIEYodCxlLHIsbixpKXtyWzBdPTAsblswXT0tRCxuWzFdPStEO2Zvcih2YXIgYT0xLG89MDthPGk7YSsrKXtmb3IodmFyIHM9KHRbYV0rYSphLSh0W3Jbb11dK3Jbb10qcltvXSkpLygyKmEtMipyW29dKTtzPD1uW29dOylvLS0scz0odFthXSthKmEtKHRbcltvXV0rcltvXSpyW29dKSkvKDIqYS0yKnJbb10pO3JbKytvXT1hLG5bb109cyxuW28rMV09K0R9Zm9yKGE9MCxvPTA7YTxpO2ErKyl7Zm9yKDtuW28rMV08YTspbysrO2VbYV09KGEtcltvXSkqKGEtcltvXSkrdFtyW29dXX19UC5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0KXt0aGlzLmN0eC5jbGVhclJlY3QoMCwwLHRoaXMuc2l6ZSx0aGlzLnNpemUpLHRoaXMuY3R4LmZpbGxUZXh0KHQsdGhpcy5idWZmZXIsdGhpcy5taWRkbGUpO2Zvcih2YXIgZT10aGlzLmN0eC5nZXRJbWFnZURhdGEoMCwwLHRoaXMuc2l6ZSx0aGlzLnNpemUpLHI9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHRoaXMuc2l6ZSp0aGlzLnNpemUpLG49MDtuPHRoaXMuc2l6ZSp0aGlzLnNpemU7bisrKXt2YXIgaT1lLmRhdGFbNCpuKzNdLzI1NTt0aGlzLmdyaWRPdXRlcltuXT0xPT09aT8wOjA9PT1pP0Q6TWF0aC5wb3coTWF0aC5tYXgoMCwuNS1pKSwyKSx0aGlzLmdyaWRJbm5lcltuXT0xPT09aT9EOjA9PT1pPzA6TWF0aC5wb3coTWF0aC5tYXgoMCxpLS41KSwyKX1mb3IoUih0aGlzLmdyaWRPdXRlcix0aGlzLnNpemUsdGhpcy5zaXplLHRoaXMuZix0aGlzLmQsdGhpcy52LHRoaXMueiksUih0aGlzLmdyaWRJbm5lcix0aGlzLnNpemUsdGhpcy5zaXplLHRoaXMuZix0aGlzLmQsdGhpcy52LHRoaXMueiksbj0wO248dGhpcy5zaXplKnRoaXMuc2l6ZTtuKyspe3ZhciBhPXRoaXMuZ3JpZE91dGVyW25dLXRoaXMuZ3JpZElubmVyW25dO3Jbbl09TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgyNTUtMjU1KihhL3RoaXMucmFkaXVzK3RoaXMuY3V0b2ZmKSkpKX1yZXR1cm4gcn07dmFyIEI9ZnVuY3Rpb24odCxlKXt0aGlzLnJlcXVlc3RUcmFuc2Zvcm09dCx0aGlzLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseT1lLHRoaXMuZW50cmllcz17fX07Qi5wcm90b3R5cGUuc2V0VVJMPWZ1bmN0aW9uKHQpe3RoaXMudXJsPXR9LEIucHJvdG90eXBlLmdldEdseXBocz1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMsaT1bXTtmb3IodmFyIGEgaW4gZSlmb3IodmFyIG89MCxzPWVbYV07bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dO2kucHVzaCh7c3RhY2s6YSxpZDpsfSl9dC5hc3luY0FsbChpLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGFjayxpPXQuaWQsYT1uLmVudHJpZXNbcl07YXx8KGE9bi5lbnRyaWVzW3JdPXtnbHlwaHM6e30scmVxdWVzdHM6e319KTt2YXIgbz1hLmdseXBoc1tpXTtpZih2b2lkIDA9PT1vKWlmKG89bi5fdGlueVNERihhLHIsaSkpZShudWxsLHtzdGFjazpyLGlkOmksZ2x5cGg6b30pO2Vsc2V7dmFyIHM9TWF0aC5mbG9vcihpLzI1Nik7aWYoMjU2KnM+NjU1MzUpZShuZXcgRXJyb3IoXCJnbHlwaHMgPiA2NTUzNSBub3Qgc3VwcG9ydGVkXCIpKTtlbHNle3ZhciBsPWEucmVxdWVzdHNbc107bHx8KGw9YS5yZXF1ZXN0c1tzXT1bXSxCLmxvYWRHbHlwaFJhbmdlKHIscyxuLnVybCxuLnJlcXVlc3RUcmFuc2Zvcm0sZnVuY3Rpb24odCxlKXtpZihlKWZvcih2YXIgciBpbiBlKWEuZ2x5cGhzWytyXT1lWytyXTtmb3IodmFyIG49MCxpPWw7bjxpLmxlbmd0aDtuKz0xKSgwLGlbbl0pKHQsZSk7ZGVsZXRlIGEucmVxdWVzdHNbc119KSksbC5wdXNoKGZ1bmN0aW9uKHQsbil7dD9lKHQpOm4mJmUobnVsbCx7c3RhY2s6cixpZDppLGdseXBoOm5baV18fG51bGx9KX0pfX1lbHNlIGUobnVsbCx7c3RhY2s6cixpZDppLGdseXBoOm99KX0sZnVuY3Rpb24odCxlKXtpZih0KXIodCk7ZWxzZSBpZihlKXtmb3IodmFyIG49e30saT0wLGE9ZTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV0scz1vLnN0YWNrLGw9by5pZCxjPW8uZ2x5cGg7KG5bc118fChuW3NdPXt9KSlbbF09YyYme2lkOmMuaWQsYml0bWFwOmMuYml0bWFwLmNsb25lKCksbWV0cmljczpjLm1ldHJpY3N9fXIobnVsbCxuKX19KX0sQi5wcm90b3R5cGUuX3RpbnlTREY9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXRoaXMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5O2lmKGkmJih0LmRlZmF1bHQkNFtcIkNKSyBVbmlmaWVkIElkZW9ncmFwaHNcIl0obil8fHQuZGVmYXVsdCQ0W1wiSGFuZ3VsIFN5bGxhYmxlc1wiXShuKSkpe3ZhciBhPWUudGlueVNERjtpZighYSl7dmFyIG89XCI0MDBcIjsvYm9sZC9pLnRlc3Qocik/bz1cIjkwMFwiOi9tZWRpdW0vaS50ZXN0KHIpP289XCI1MDBcIjovbGlnaHQvaS50ZXN0KHIpJiYobz1cIjIwMFwiKSxhPWUudGlueVNERj1uZXcgQi5UaW55U0RGKDI0LDMsOCwuMjUsaSxvKX1yZXR1cm57aWQ6bixiaXRtYXA6bmV3IHQuQWxwaGFJbWFnZSh7d2lkdGg6MzAsaGVpZ2h0OjMwfSxhLmRyYXcoU3RyaW5nLmZyb21DaGFyQ29kZShuKSkpLG1ldHJpY3M6e3dpZHRoOjI0LGhlaWdodDoyNCxsZWZ0OjAsdG9wOi04LGFkdmFuY2U6MjR9fX19LEIubG9hZEdseXBoUmFuZ2U9ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbz0yNTYqcixzPW8rMjU1LGw9aShmdW5jdGlvbih0LGUpe2lmKCF4KHQpKXJldHVybiB0O3ZhciByPVQodCk7cmV0dXJuIHIucGF0aD1cIi9mb250cy92MVwiK3IucGF0aCx5KHIsZSl9KG4pLnJlcGxhY2UoXCJ7Zm9udHN0YWNrfVwiLGUpLnJlcGxhY2UoXCJ7cmFuZ2V9XCIsbytcIi1cIitzKSx0LlJlc291cmNlVHlwZS5HbHlwaHMpO3QuZ2V0QXJyYXlCdWZmZXIobCxmdW5jdGlvbihlLHIpe2lmKGUpYShlKTtlbHNlIGlmKHIpe2Zvcih2YXIgbj17fSxpPTAsbz10LmRlZmF1bHQkMyhyLmRhdGEpO2k8by5sZW5ndGg7aSs9MSl7dmFyIHM9b1tpXTtuW3MuaWRdPXN9YShudWxsLG4pfX0pfSxCLlRpbnlTREY9STt2YXIgTj1mdW5jdGlvbigpe3RoaXMuc3BlY2lmaWNhdGlvbj10LmRlZmF1bHQkNS5saWdodC5wb3NpdGlvbn07Ti5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbihlLHIpe3JldHVybiB0LnNwaGVyaWNhbFRvQ2FydGVzaWFuKGUuZXhwcmVzc2lvbi5ldmFsdWF0ZShyKSl9LE4ucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKGUscixuKXtyZXR1cm57eDp0Lm51bWJlcihlLngsci54LG4pLHk6dC5udW1iZXIoZS55LHIueSxuKSx6OnQubnVtYmVyKGUueixyLnosbil9fTt2YXIgaj1uZXcgdC5Qcm9wZXJ0aWVzKHthbmNob3I6bmV3IHQuRGF0YUNvbnN0YW50UHJvcGVydHkodC5kZWZhdWx0JDUubGlnaHQuYW5jaG9yKSxwb3NpdGlvbjpuZXcgTixjb2xvcjpuZXcgdC5EYXRhQ29uc3RhbnRQcm9wZXJ0eSh0LmRlZmF1bHQkNS5saWdodC5jb2xvciksaW50ZW5zaXR5Om5ldyB0LkRhdGFDb25zdGFudFByb3BlcnR5KHQuZGVmYXVsdCQ1LmxpZ2h0LmludGVuc2l0eSl9KSxWPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocil7ZS5jYWxsKHRoaXMpLHRoaXMuX3RyYW5zaXRpb25hYmxlPW5ldyB0LlRyYW5zaXRpb25hYmxlKGopLHRoaXMuc2V0TGlnaHQociksdGhpcy5fdHJhbnNpdGlvbmluZz10aGlzLl90cmFuc2l0aW9uYWJsZS51bnRyYW5zaXRpb25lZCgpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5nZXRMaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uYWJsZS5zZXJpYWxpemUoKX0sci5wcm90b3R5cGUuc2V0TGlnaHQ9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVMaWdodCxlKSlmb3IodmFyIHIgaW4gZSl7dmFyIG49ZVtyXTt0LmVuZHNXaXRoKHIsXCItdHJhbnNpdGlvblwiKT90aGlzLl90cmFuc2l0aW9uYWJsZS5zZXRUcmFuc2l0aW9uKHIuc2xpY2UoMCwtXCItdHJhbnNpdGlvblwiLmxlbmd0aCksbik6dGhpcy5fdHJhbnNpdGlvbmFibGUuc2V0VmFsdWUocixuKX19LHIucHJvdG90eXBlLnVwZGF0ZVRyYW5zaXRpb25zPWZ1bmN0aW9uKHQpe3RoaXMuX3RyYW5zaXRpb25pbmc9dGhpcy5fdHJhbnNpdGlvbmFibGUudHJhbnNpdGlvbmVkKHQsdGhpcy5fdHJhbnNpdGlvbmluZyl9LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbmluZy5oYXNUcmFuc2l0aW9uKCl9LHIucHJvdG90eXBlLnJlY2FsY3VsYXRlPWZ1bmN0aW9uKHQpe3RoaXMucHJvcGVydGllcz10aGlzLl90cmFuc2l0aW9uaW5nLnBvc3NpYmx5RXZhbHVhdGUodCl9LHIucHJvdG90eXBlLl92YWxpZGF0ZT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmVtaXRWYWxpZGF0aW9uRXJyb3JzKHRoaXMsZS5jYWxsKHQudmFsaWRhdGVTdHlsZSx0LmV4dGVuZCh7dmFsdWU6cixzdHlsZTp7Z2x5cGhzOiEwLHNwcml0ZTohMH0sc3R5bGVTcGVjOnQuZGVmYXVsdCQ1fSkpKX0scn0odC5FdmVudGVkKSxVPWZ1bmN0aW9uKHQsZSl7dGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5uZXh0Um93PTAsdGhpcy5ieXRlcz00LHRoaXMuZGF0YT1uZXcgVWludDhBcnJheSh0aGlzLndpZHRoKnRoaXMuaGVpZ2h0KnRoaXMuYnl0ZXMpLHRoaXMucG9zaXRpb25zPXt9fTtVLnByb3RvdHlwZS5nZXREYXNoPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5qb2luKFwiLFwiKStTdHJpbmcoZSk7cmV0dXJuIHRoaXMucG9zaXRpb25zW3JdfHwodGhpcy5wb3NpdGlvbnNbcl09dGhpcy5hZGREYXNoKHQsZSkpLHRoaXMucG9zaXRpb25zW3JdfSxVLnByb3RvdHlwZS5hZGREYXNoPWZ1bmN0aW9uKGUscil7dmFyIG49cj83OjAsaT0yKm4rMTtpZih0aGlzLm5leHRSb3craT50aGlzLmhlaWdodClyZXR1cm4gdC53YXJuT25jZShcIkxpbmVBdGxhcyBvdXQgb2Ygc3BhY2VcIiksbnVsbDtmb3IodmFyIGE9MCxvPTA7bzxlLmxlbmd0aDtvKyspYSs9ZVtvXTtmb3IodmFyIHM9dGhpcy53aWR0aC9hLGw9cy8yLGM9ZS5sZW5ndGglMj09MSx1PS1uO3U8PW47dSsrKWZvcih2YXIgaD10aGlzLm5leHRSb3crbit1LGY9dGhpcy53aWR0aCpoLHA9Yz8tZVtlLmxlbmd0aC0xXTowLGQ9ZVswXSxnPTEsdj0wO3Y8dGhpcy53aWR0aDt2Kyspe2Zvcig7ZDx2L3M7KXA9ZCxkKz1lW2ddLGMmJmc9PT1lLmxlbmd0aC0xJiYoZCs9ZVswXSksZysrO3ZhciBtPU1hdGguYWJzKHYtcCpzKSx5PU1hdGguYWJzKHYtZCpzKSx4PU1hdGgubWluKG0seSksYj1nJTI9PTEsXz12b2lkIDA7aWYocil7dmFyIHc9bj91L24qKGwrMSk6MDtpZihiKXt2YXIgaz1sLU1hdGguYWJzKHcpO189TWF0aC5zcXJ0KHgqeCtrKmspfWVsc2UgXz1sLU1hdGguc3FydCh4Kngrdyp3KX1lbHNlIF89KGI/MTotMSkqeDt0aGlzLmRhdGFbMys0KihmK3YpXT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxfKzEyOCkpfXZhciBBPXt5Oih0aGlzLm5leHRSb3crbisuNSkvdGhpcy5oZWlnaHQsaGVpZ2h0OjIqbi90aGlzLmhlaWdodCx3aWR0aDphfTtyZXR1cm4gdGhpcy5uZXh0Um93Kz1pLHRoaXMuZGlydHk9ITAsQX0sVS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0KXt2YXIgZT10LmdsO3RoaXMudGV4dHVyZT8oZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKSx0aGlzLmRpcnR5JiYodGhpcy5kaXJ0eT0hMSxlLnRleFN1YkltYWdlMkQoZS5URVhUVVJFXzJELDAsMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsZS5SR0JBLGUuVU5TSUdORURfQllURSx0aGlzLmRhdGEpKSk6KHRoaXMudGV4dHVyZT1lLmNyZWF0ZVRleHR1cmUoKSxlLmJpbmRUZXh0dXJlKGUuVEVYVFVSRV8yRCx0aGlzLnRleHR1cmUpLGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX1dSQVBfUyxlLlJFUEVBVCksZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfV1JBUF9ULGUuUkVQRUFUKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NSU5fRklMVEVSLGUuTElORUFSKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NQUdfRklMVEVSLGUuTElORUFSKSxlLnRleEltYWdlMkQoZS5URVhUVVJFXzJELDAsZS5SR0JBLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsMCxlLlJHQkEsZS5VTlNJR05FRF9CWVRFLHRoaXMuZGF0YSkpfTt2YXIgcT1mdW5jdGlvbiBlKHIsbil7dGhpcy53b3JrZXJQb29sPXIsdGhpcy5hY3RvcnM9W10sdGhpcy5jdXJyZW50QWN0b3I9MCx0aGlzLmlkPXQudW5pcXVlSWQoKTtmb3IodmFyIGk9dGhpcy53b3JrZXJQb29sLmFjcXVpcmUodGhpcy5pZCksYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdLHM9bmV3IGUuQWN0b3IobyxuLHRoaXMuaWQpO3MubmFtZT1cIldvcmtlciBcIithLHRoaXMuYWN0b3JzLnB1c2gocyl9fTtmdW5jdGlvbiBIKGUscixuKXt2YXIgaT1mdW5jdGlvbihlLHIpe2lmKGUpcmV0dXJuIG4oZSk7aWYocil7dmFyIGk9dC5waWNrKHIsW1widGlsZXNcIixcIm1pbnpvb21cIixcIm1heHpvb21cIixcImF0dHJpYnV0aW9uXCIsXCJtYXBib3hfbG9nb1wiLFwiYm91bmRzXCJdKTtyLnZlY3Rvcl9sYXllcnMmJihpLnZlY3RvckxheWVycz1yLnZlY3Rvcl9sYXllcnMsaS52ZWN0b3JMYXllcklkcz1pLnZlY3RvckxheWVycy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSksbihudWxsLGkpfX07ZS51cmw/dC5nZXRKU09OKHIoYihlLnVybCksdC5SZXNvdXJjZVR5cGUuU291cmNlKSxpKTphLmZyYW1lKGZ1bmN0aW9uKCl7cmV0dXJuIGkobnVsbCxlKX0pfXEucHJvdG90eXBlLmJyb2FkY2FzdD1mdW5jdGlvbihlLHIsbil7bj1ufHxmdW5jdGlvbigpe30sdC5hc3luY0FsbCh0aGlzLmFjdG9ycyxmdW5jdGlvbih0LG4pe3Quc2VuZChlLHIsbil9LG4pfSxxLnByb3RvdHlwZS5zZW5kPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybihcIm51bWJlclwiIT10eXBlb2Ygbnx8aXNOYU4obikpJiYobj10aGlzLmN1cnJlbnRBY3Rvcj0odGhpcy5jdXJyZW50QWN0b3IrMSkldGhpcy5hY3RvcnMubGVuZ3RoKSx0aGlzLmFjdG9yc1tuXS5zZW5kKHQsZSxyKSxufSxxLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLmFjdG9ycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QucmVtb3ZlKCl9KSx0aGlzLmFjdG9ycz1bXSx0aGlzLndvcmtlclBvb2wucmVsZWFzZSh0aGlzLmlkKX0scS5BY3Rvcj10LmRlZmF1bHQkNzt2YXIgRz1mdW5jdGlvbih0LGUpe2lmKGlzTmFOKHQpfHxpc05hTihlKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIExuZ0xhdCBvYmplY3Q6IChcIit0K1wiLCBcIitlK1wiKVwiKTtpZih0aGlzLmxuZz0rdCx0aGlzLmxhdD0rZSx0aGlzLmxhdD45MHx8dGhpcy5sYXQ8LTkwKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgTG5nTGF0IGxhdGl0dWRlIHZhbHVlOiBtdXN0IGJlIGJldHdlZW4gLTkwIGFuZCA5MFwiKX07Ry5wcm90b3R5cGUud3JhcD1mdW5jdGlvbigpe3JldHVybiBuZXcgRyh0LndyYXAodGhpcy5sbmcsLTE4MCwxODApLHRoaXMubGF0KX0sRy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVyblt0aGlzLmxuZyx0aGlzLmxhdF19LEcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJMbmdMYXQoXCIrdGhpcy5sbmcrXCIsIFwiK3RoaXMubGF0K1wiKVwifSxHLnByb3RvdHlwZS50b0JvdW5kcz1mdW5jdGlvbih0KXt2YXIgZT0zNjAqdC80MDA3NTAxNyxyPWUvTWF0aC5jb3MoTWF0aC5QSS8xODAqdGhpcy5sYXQpO3JldHVybiBuZXcgWShuZXcgRyh0aGlzLmxuZy1yLHRoaXMubGF0LWUpLG5ldyBHKHRoaXMubG5nK3IsdGhpcy5sYXQrZSkpfSxHLmNvbnZlcnQ9ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIEcpcmV0dXJuIHQ7aWYoQXJyYXkuaXNBcnJheSh0KSYmKDI9PT10Lmxlbmd0aHx8Mz09PXQubGVuZ3RoKSlyZXR1cm4gbmV3IEcoTnVtYmVyKHRbMF0pLE51bWJlcih0WzFdKSk7aWYoIUFycmF5LmlzQXJyYXkodCkmJlwib2JqZWN0XCI9PXR5cGVvZiB0JiZudWxsIT09dClyZXR1cm4gbmV3IEcoTnVtYmVyKHQubG5nKSxOdW1iZXIodC5sYXQpKTt0aHJvdyBuZXcgRXJyb3IoXCJgTG5nTGF0TGlrZWAgYXJndW1lbnQgbXVzdCBiZSBzcGVjaWZpZWQgYXMgYSBMbmdMYXQgaW5zdGFuY2UsIGFuIG9iamVjdCB7bG5nOiA8bG5nPiwgbGF0OiA8bGF0Pn0sIG9yIGFuIGFycmF5IG9mIFs8bG5nPiwgPGxhdD5dXCIpfTt2YXIgWT1mdW5jdGlvbih0LGUpe3QmJihlP3RoaXMuc2V0U291dGhXZXN0KHQpLnNldE5vcnRoRWFzdChlKTo0PT09dC5sZW5ndGg/dGhpcy5zZXRTb3V0aFdlc3QoW3RbMF0sdFsxXV0pLnNldE5vcnRoRWFzdChbdFsyXSx0WzNdXSk6dGhpcy5zZXRTb3V0aFdlc3QodFswXSkuc2V0Tm9ydGhFYXN0KHRbMV0pKX07WS5wcm90b3R5cGUuc2V0Tm9ydGhFYXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9uZT10IGluc3RhbmNlb2YgRz9uZXcgRyh0LmxuZyx0LmxhdCk6Ry5jb252ZXJ0KHQpLHRoaXN9LFkucHJvdG90eXBlLnNldFNvdXRoV2VzdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fc3c9dCBpbnN0YW5jZW9mIEc/bmV3IEcodC5sbmcsdC5sYXQpOkcuY29udmVydCh0KSx0aGlzfSxZLnByb3RvdHlwZS5leHRlbmQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPXRoaXMuX3N3LGk9dGhpcy5fbmU7aWYodCBpbnN0YW5jZW9mIEcpZT10LHI9dDtlbHNle2lmKCEodCBpbnN0YW5jZW9mIFkpKXJldHVybiBBcnJheS5pc0FycmF5KHQpP3QuZXZlcnkoQXJyYXkuaXNBcnJheSk/dGhpcy5leHRlbmQoWS5jb252ZXJ0KHQpKTp0aGlzLmV4dGVuZChHLmNvbnZlcnQodCkpOnRoaXM7aWYoZT10Ll9zdyxyPXQuX25lLCFlfHwhcilyZXR1cm4gdGhpc31yZXR1cm4gbnx8aT8obi5sbmc9TWF0aC5taW4oZS5sbmcsbi5sbmcpLG4ubGF0PU1hdGgubWluKGUubGF0LG4ubGF0KSxpLmxuZz1NYXRoLm1heChyLmxuZyxpLmxuZyksaS5sYXQ9TWF0aC5tYXgoci5sYXQsaS5sYXQpKToodGhpcy5fc3c9bmV3IEcoZS5sbmcsZS5sYXQpLHRoaXMuX25lPW5ldyBHKHIubG5nLHIubGF0KSksdGhpc30sWS5wcm90b3R5cGUuZ2V0Q2VudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBHKCh0aGlzLl9zdy5sbmcrdGhpcy5fbmUubG5nKS8yLCh0aGlzLl9zdy5sYXQrdGhpcy5fbmUubGF0KS8yKX0sWS5wcm90b3R5cGUuZ2V0U291dGhXZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3fSxZLnByb3RvdHlwZS5nZXROb3J0aEVhc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmV9LFkucHJvdG90eXBlLmdldE5vcnRoV2VzdD1mdW5jdGlvbigpe3JldHVybiBuZXcgRyh0aGlzLmdldFdlc3QoKSx0aGlzLmdldE5vcnRoKCkpfSxZLnByb3RvdHlwZS5nZXRTb3V0aEVhc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEcodGhpcy5nZXRFYXN0KCksdGhpcy5nZXRTb3V0aCgpKX0sWS5wcm90b3R5cGUuZ2V0V2VzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdy5sbmd9LFkucHJvdG90eXBlLmdldFNvdXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3LmxhdH0sWS5wcm90b3R5cGUuZ2V0RWFzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9uZS5sbmd9LFkucHJvdG90eXBlLmdldE5vcnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25lLmxhdH0sWS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVyblt0aGlzLl9zdy50b0FycmF5KCksdGhpcy5fbmUudG9BcnJheSgpXX0sWS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIkxuZ0xhdEJvdW5kcyhcIit0aGlzLl9zdy50b1N0cmluZygpK1wiLCBcIit0aGlzLl9uZS50b1N0cmluZygpK1wiKVwifSxZLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuISh0aGlzLl9zdyYmdGhpcy5fbmUpfSxZLmNvbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIXR8fHQgaW5zdGFuY2VvZiBZP3Q6bmV3IFkodCl9O3ZhciBXPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmJvdW5kcz1ZLmNvbnZlcnQodGhpcy52YWxpZGF0ZUJvdW5kcyh0KSksdGhpcy5taW56b29tPWV8fDAsdGhpcy5tYXh6b29tPXJ8fDI0fTtXLnByb3RvdHlwZS52YWxpZGF0ZUJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmND09PXQubGVuZ3RoP1tNYXRoLm1heCgtMTgwLHRbMF0pLE1hdGgubWF4KC05MCx0WzFdKSxNYXRoLm1pbigxODAsdFsyXSksTWF0aC5taW4oOTAsdFszXSldOlstMTgwLC05MCwxODAsOTBdfSxXLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKHRoaXMubG5nWCh0aGlzLmJvdW5kcy5nZXRXZXN0KCksdC56KSkscj1NYXRoLmZsb29yKHRoaXMubGF0WSh0aGlzLmJvdW5kcy5nZXROb3J0aCgpLHQueikpLG49TWF0aC5jZWlsKHRoaXMubG5nWCh0aGlzLmJvdW5kcy5nZXRFYXN0KCksdC56KSksaT1NYXRoLmNlaWwodGhpcy5sYXRZKHRoaXMuYm91bmRzLmdldFNvdXRoKCksdC56KSk7cmV0dXJuIHQueD49ZSYmdC54PG4mJnQueT49ciYmdC55PGl9LFcucHJvdG90eXBlLmxuZ1g9ZnVuY3Rpb24odCxlKXtyZXR1cm4odCsxODApKihNYXRoLnBvdygyLGUpLzM2MCl9LFcucHJvdG90eXBlLmxhdFk9ZnVuY3Rpb24oZSxyKXt2YXIgbj10LmNsYW1wKE1hdGguc2luKE1hdGguUEkvMTgwKmUpLC0uOTk5OSwuOTk5OSksaT1NYXRoLnBvdygyLHIpLygyKk1hdGguUEkpO3JldHVybiBNYXRoLnBvdygyLHItMSkrLjUqTWF0aC5sb2coKDErbikvKDEtbikpKi1pfTt2YXIgWD1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpLGEpe2lmKGUuY2FsbCh0aGlzKSx0aGlzLmlkPXIsdGhpcy5kaXNwYXRjaGVyPWksdGhpcy50eXBlPVwidmVjdG9yXCIsdGhpcy5taW56b29tPTAsdGhpcy5tYXh6b29tPTIyLHRoaXMuc2NoZW1lPVwieHl6XCIsdGhpcy50aWxlU2l6ZT01MTIsdGhpcy5yZXBhcnNlT3ZlcnNjYWxlZD0hMCx0aGlzLmlzVGlsZUNsaXBwZWQ9ITAsdC5leHRlbmQodGhpcyx0LnBpY2sobixbXCJ1cmxcIixcInNjaGVtZVwiLFwidGlsZVNpemVcIl0pKSx0aGlzLl9vcHRpb25zPXQuZXh0ZW5kKHt0eXBlOlwidmVjdG9yXCJ9LG4pLHRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZz1uLmNvbGxlY3RSZXNvdXJjZVRpbWluZyw1MTIhPT10aGlzLnRpbGVTaXplKXRocm93IG5ldyBFcnJvcihcInZlY3RvciB0aWxlIHNvdXJjZXMgbXVzdCBoYXZlIGEgdGlsZVNpemUgb2YgNTEyXCIpO3RoaXMuc2V0RXZlbnRlZFBhcmVudChhKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YWxvYWRpbmdcIix7ZGF0YVR5cGU6XCJzb3VyY2VcIn0pKSxIKHRoaXMuX29wdGlvbnMsdGhpcy5tYXAuX3RyYW5zZm9ybVJlcXVlc3QsZnVuY3Rpb24ocixuKXtyP2UuZmlyZShuZXcgdC5FcnJvckV2ZW50KHIpKTpuJiYodC5leHRlbmQoZSxuKSxuLmJvdW5kcyYmKGUudGlsZUJvdW5kcz1uZXcgVyhuLmJvdW5kcyxlLm1pbnpvb20sZS5tYXh6b29tKSksZS5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YVwiLHtkYXRhVHlwZTpcInNvdXJjZVwiLHNvdXJjZURhdGFUeXBlOlwibWV0YWRhdGFcIn0pKSxlLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhXCIse2RhdGFUeXBlOlwic291cmNlXCIsc291cmNlRGF0YVR5cGU6XCJjb250ZW50XCJ9KSkpfSl9LHIucHJvdG90eXBlLmhhc1RpbGU9ZnVuY3Rpb24odCl7cmV0dXJuIXRoaXMudGlsZUJvdW5kc3x8dGhpcy50aWxlQm91bmRzLmNvbnRhaW5zKHQuY2Fub25pY2FsKX0sci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLmxvYWQoKX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZXh0ZW5kKHt9LHRoaXMuX29wdGlvbnMpfSxyLnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbihlLHIpe3ZhciBuPWsoZS50aWxlSUQuY2Fub25pY2FsLnVybCh0aGlzLnRpbGVzLHRoaXMuc2NoZW1lKSx0aGlzLnVybCksaT17cmVxdWVzdDp0aGlzLm1hcC5fdHJhbnNmb3JtUmVxdWVzdChuLHQuUmVzb3VyY2VUeXBlLlRpbGUpLHVpZDplLnVpZCx0aWxlSUQ6ZS50aWxlSUQsem9vbTplLnRpbGVJRC5vdmVyc2NhbGVkWix0aWxlU2l6ZTp0aGlzLnRpbGVTaXplKmUudGlsZUlELm92ZXJzY2FsZUZhY3RvcigpLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkLHBpeGVsUmF0aW86YS5kZXZpY2VQaXhlbFJhdGlvLHNob3dDb2xsaXNpb25Cb3hlczp0aGlzLm1hcC5zaG93Q29sbGlzaW9uQm94ZXN9O2Z1bmN0aW9uIG8odCxuKXtyZXR1cm4gZS5hYm9ydGVkP3IobnVsbCk6dD9yKHQpOihuJiZuLnJlc291cmNlVGltaW5nJiYoZS5yZXNvdXJjZVRpbWluZz1uLnJlc291cmNlVGltaW5nKSx0aGlzLm1hcC5fcmVmcmVzaEV4cGlyZWRUaWxlcyYmZS5zZXRFeHBpcnlEYXRhKG4pLGUubG9hZFZlY3RvckRhdGEobix0aGlzLm1hcC5wYWludGVyKSxyKG51bGwpLHZvaWQoZS5yZWxvYWRDYWxsYmFjayYmKHRoaXMubG9hZFRpbGUoZSxlLnJlbG9hZENhbGxiYWNrKSxlLnJlbG9hZENhbGxiYWNrPW51bGwpKSl9aS5yZXF1ZXN0LmNvbGxlY3RSZXNvdXJjZVRpbWluZz10aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcsdm9pZCAwPT09ZS53b3JrZXJJRHx8XCJleHBpcmVkXCI9PT1lLnN0YXRlP2Uud29ya2VySUQ9dGhpcy5kaXNwYXRjaGVyLnNlbmQoXCJsb2FkVGlsZVwiLGksby5iaW5kKHRoaXMpKTpcImxvYWRpbmdcIj09PWUuc3RhdGU/ZS5yZWxvYWRDYWxsYmFjaz1yOnRoaXMuZGlzcGF0Y2hlci5zZW5kKFwicmVsb2FkVGlsZVwiLGksby5iaW5kKHRoaXMpLGUud29ya2VySUQpfSxyLnByb3RvdHlwZS5hYm9ydFRpbGU9ZnVuY3Rpb24odCl7dGhpcy5kaXNwYXRjaGVyLnNlbmQoXCJhYm9ydFRpbGVcIix7dWlkOnQudWlkLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkfSx2b2lkIDAsdC53b3JrZXJJRCl9LHIucHJvdG90eXBlLnVubG9hZFRpbGU9ZnVuY3Rpb24odCl7dC51bmxvYWRWZWN0b3JEYXRhKCksdGhpcy5kaXNwYXRjaGVyLnNlbmQoXCJyZW1vdmVUaWxlXCIse3VpZDp0LnVpZCx0eXBlOnRoaXMudHlwZSxzb3VyY2U6dGhpcy5pZH0sdm9pZCAwLHQud29ya2VySUQpfSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHJ9KHQuRXZlbnRlZCksWj1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpLGEpe2UuY2FsbCh0aGlzKSx0aGlzLmlkPXIsdGhpcy5kaXNwYXRjaGVyPWksdGhpcy5zZXRFdmVudGVkUGFyZW50KGEpLHRoaXMudHlwZT1cInJhc3RlclwiLHRoaXMubWluem9vbT0wLHRoaXMubWF4em9vbT0yMix0aGlzLnJvdW5kWm9vbT0hMCx0aGlzLnNjaGVtZT1cInh5elwiLHRoaXMudGlsZVNpemU9NTEyLHRoaXMuX2xvYWRlZD0hMSx0aGlzLl9vcHRpb25zPXQuZXh0ZW5kKHt9LG4pLHQuZXh0ZW5kKHRoaXMsdC5waWNrKG4sW1widXJsXCIsXCJzY2hlbWVcIixcInRpbGVTaXplXCJdKSl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuZmlyZShuZXcgdC5FdmVudChcImRhdGFsb2FkaW5nXCIse2RhdGFUeXBlOlwic291cmNlXCJ9KSksSCh0aGlzLl9vcHRpb25zLHRoaXMubWFwLl90cmFuc2Zvcm1SZXF1ZXN0LGZ1bmN0aW9uKHIsbil7cj9lLmZpcmUobmV3IHQuRXJyb3JFdmVudChyKSk6biYmKHQuZXh0ZW5kKGUsbiksbi5ib3VuZHMmJihlLnRpbGVCb3VuZHM9bmV3IFcobi5ib3VuZHMsZS5taW56b29tLGUubWF4em9vbSkpLGUuZmlyZShuZXcgdC5FdmVudChcImRhdGFcIix7ZGF0YVR5cGU6XCJzb3VyY2VcIixzb3VyY2VEYXRhVHlwZTpcIm1ldGFkYXRhXCJ9KSksZS5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YVwiLHtkYXRhVHlwZTpcInNvdXJjZVwiLHNvdXJjZURhdGFUeXBlOlwiY29udGVudFwifSkpKX0pfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMubG9hZCgpfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5leHRlbmQoe30sdGhpcy5fb3B0aW9ucyl9LHIucHJvdG90eXBlLmhhc1RpbGU9ZnVuY3Rpb24odCl7cmV0dXJuIXRoaXMudGlsZUJvdW5kc3x8dGhpcy50aWxlQm91bmRzLmNvbnRhaW5zKHQuY2Fub25pY2FsKX0sci5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLGk9ayhlLnRpbGVJRC5jYW5vbmljYWwudXJsKHRoaXMudGlsZXMsdGhpcy5zY2hlbWUpLHRoaXMudXJsLHRoaXMudGlsZVNpemUpO2UucmVxdWVzdD10LmdldEltYWdlKHRoaXMubWFwLl90cmFuc2Zvcm1SZXF1ZXN0KGksdC5SZXNvdXJjZVR5cGUuVGlsZSksZnVuY3Rpb24odCxpKXtpZihkZWxldGUgZS5yZXF1ZXN0LGUuYWJvcnRlZCllLnN0YXRlPVwidW5sb2FkZWRcIixyKG51bGwpO2Vsc2UgaWYodCllLnN0YXRlPVwiZXJyb3JlZFwiLHIodCk7ZWxzZSBpZihpKXtuLm1hcC5fcmVmcmVzaEV4cGlyZWRUaWxlcyYmZS5zZXRFeHBpcnlEYXRhKGkpLGRlbGV0ZSBpLmNhY2hlQ29udHJvbCxkZWxldGUgaS5leHBpcmVzO3ZhciBhPW4ubWFwLnBhaW50ZXIuY29udGV4dCxvPWEuZ2w7ZS50ZXh0dXJlPW4ubWFwLnBhaW50ZXIuZ2V0VGlsZVRleHR1cmUoaS53aWR0aCksZS50ZXh0dXJlP2UudGV4dHVyZS51cGRhdGUoaSx7dXNlTWlwbWFwOiEwfSk6KGUudGV4dHVyZT1uZXcgeihhLGksby5SR0JBLHt1c2VNaXBtYXA6ITB9KSxlLnRleHR1cmUuYmluZChvLkxJTkVBUixvLkNMQU1QX1RPX0VER0Usby5MSU5FQVJfTUlQTUFQX05FQVJFU1QpLGEuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljJiZvLnRleFBhcmFtZXRlcmYoby5URVhUVVJFXzJELGEuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULGEuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljTWF4KSksZS5zdGF0ZT1cImxvYWRlZFwiLHIobnVsbCl9fSl9LHIucHJvdG90eXBlLmFib3J0VGlsZT1mdW5jdGlvbih0LGUpe3QucmVxdWVzdCYmKHQucmVxdWVzdC5hYm9ydCgpLGRlbGV0ZSB0LnJlcXVlc3QpLGUoKX0sci5wcm90b3R5cGUudW5sb2FkVGlsZT1mdW5jdGlvbih0LGUpe3QudGV4dHVyZSYmdGhpcy5tYXAucGFpbnRlci5zYXZlVGlsZVRleHR1cmUodC50ZXh0dXJlKSxlKCl9LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4hMX0scn0odC5FdmVudGVkKSwkPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGksYSl7ZS5jYWxsKHRoaXMscixuLGksYSksdGhpcy50eXBlPVwicmFzdGVyLWRlbVwiLHRoaXMubWF4em9vbT0yMix0aGlzLl9vcHRpb25zPXQuZXh0ZW5kKHt9LG4pLHRoaXMuZW5jb2Rpbmc9bi5lbmNvZGluZ3x8XCJtYXBib3hcIn1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6XCJyYXN0ZXItZGVtXCIsdXJsOnRoaXMudXJsLHRpbGVTaXplOnRoaXMudGlsZVNpemUsdGlsZXM6dGhpcy50aWxlcyxib3VuZHM6dGhpcy5ib3VuZHMsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZ319LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49ayhlLnRpbGVJRC5jYW5vbmljYWwudXJsKHRoaXMudGlsZXMsdGhpcy5zY2hlbWUpLHRoaXMudXJsLHRoaXMudGlsZVNpemUpO2UucmVxdWVzdD10LmdldEltYWdlKHRoaXMubWFwLl90cmFuc2Zvcm1SZXF1ZXN0KG4sdC5SZXNvdXJjZVR5cGUuVGlsZSksZnVuY3Rpb24odCxuKXtpZihkZWxldGUgZS5yZXF1ZXN0LGUuYWJvcnRlZCllLnN0YXRlPVwidW5sb2FkZWRcIixyKG51bGwpO2Vsc2UgaWYodCllLnN0YXRlPVwiZXJyb3JlZFwiLHIodCk7ZWxzZSBpZihuKXt0aGlzLm1hcC5fcmVmcmVzaEV4cGlyZWRUaWxlcyYmZS5zZXRFeHBpcnlEYXRhKG4pLGRlbGV0ZSBuLmNhY2hlQ29udHJvbCxkZWxldGUgbi5leHBpcmVzO3ZhciBpPWEuZ2V0SW1hZ2VEYXRhKG4pLG89e3VpZDplLnVpZCxjb29yZDplLnRpbGVJRCxzb3VyY2U6dGhpcy5pZCxyYXdJbWFnZURhdGE6aSxlbmNvZGluZzp0aGlzLmVuY29kaW5nfTtlLndvcmtlcklEJiZcImV4cGlyZWRcIiE9PWUuc3RhdGV8fChlLndvcmtlcklEPXRoaXMuZGlzcGF0Y2hlci5zZW5kKFwibG9hZERFTVRpbGVcIixvLGZ1bmN0aW9uKHQsbil7dCYmKGUuc3RhdGU9XCJlcnJvcmVkXCIscih0KSksbiYmKGUuZGVtPW4sZS5uZWVkc0hpbGxzaGFkZVByZXBhcmU9ITAsZS5zdGF0ZT1cImxvYWRlZFwiLHIobnVsbCkpfS5iaW5kKHRoaXMpKSl9fS5iaW5kKHRoaXMpKSxlLm5laWdoYm9yaW5nVGlsZXM9dGhpcy5fZ2V0TmVpZ2hib3JpbmdUaWxlcyhlLnRpbGVJRCl9LHIucHJvdG90eXBlLl9nZXROZWlnaGJvcmluZ1RpbGVzPWZ1bmN0aW9uKGUpe3ZhciByPWUuY2Fub25pY2FsLG49TWF0aC5wb3coMixyLnopLGk9KHIueC0xK24pJW4sYT0wPT09ci54P2Uud3JhcC0xOmUud3JhcCxvPShyLngrMStuKSVuLHM9ci54KzE9PT1uP2Uud3JhcCsxOmUud3JhcCxsPXt9O3JldHVybiBsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixhLHIueixpLHIueSkua2V5XT17YmFja2ZpbGxlZDohMX0sbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFoscyxyLnosbyxyLnkpLmtleV09e2JhY2tmaWxsZWQ6ITF9LHIueT4wJiYobFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFosYSxyLnosaSxyLnktMSkua2V5XT17YmFja2ZpbGxlZDohMX0sbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFosZS53cmFwLHIueixyLngsci55LTEpLmtleV09e2JhY2tmaWxsZWQ6ITF9LGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLHMsci56LG8sci55LTEpLmtleV09e2JhY2tmaWxsZWQ6ITF9KSxyLnkrMTxuJiYobFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFosYSxyLnosaSxyLnkrMSkua2V5XT17YmFja2ZpbGxlZDohMX0sbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFosZS53cmFwLHIueixyLngsci55KzEpLmtleV09e2JhY2tmaWxsZWQ6ITF9LGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLHMsci56LG8sci55KzEpLmtleV09e2JhY2tmaWxsZWQ6ITF9KSxsfSxyLnByb3RvdHlwZS51bmxvYWRUaWxlPWZ1bmN0aW9uKHQpe3QuZGVtVGV4dHVyZSYmdGhpcy5tYXAucGFpbnRlci5zYXZlVGlsZVRleHR1cmUodC5kZW1UZXh0dXJlKSx0LmZibyYmKHQuZmJvLmRlc3Ryb3koKSxkZWxldGUgdC5mYm8pLHQuZGVtJiZkZWxldGUgdC5kZW0sZGVsZXRlIHQubmVpZ2hib3JpbmdUaWxlcyx0LnN0YXRlPVwidW5sb2FkZWRcIix0aGlzLmRpc3BhdGNoZXIuc2VuZChcInJlbW92ZURFTVRpbGVcIix7dWlkOnQudWlkLHNvdXJjZTp0aGlzLmlkfSx2b2lkIDAsdC53b3JrZXJJRCl9LHJ9KFopLEo9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4saSxhKXtlLmNhbGwodGhpcyksdGhpcy5pZD1yLHRoaXMudHlwZT1cImdlb2pzb25cIix0aGlzLm1pbnpvb209MCx0aGlzLm1heHpvb209MTgsdGhpcy50aWxlU2l6ZT01MTIsdGhpcy5pc1RpbGVDbGlwcGVkPSEwLHRoaXMucmVwYXJzZU92ZXJzY2FsZWQ9ITAsdGhpcy5fcmVtb3ZlZD0hMSx0aGlzLmRpc3BhdGNoZXI9aSx0aGlzLnNldEV2ZW50ZWRQYXJlbnQoYSksdGhpcy5fZGF0YT1uLmRhdGEsdGhpcy5fb3B0aW9ucz10LmV4dGVuZCh7fSxuKSx0aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmc9bi5jb2xsZWN0UmVzb3VyY2VUaW1pbmcsdGhpcy5fcmVzb3VyY2VUaW1pbmc9W10sdm9pZCAwIT09bi5tYXh6b29tJiYodGhpcy5tYXh6b29tPW4ubWF4em9vbSksbi50eXBlJiYodGhpcy50eXBlPW4udHlwZSk7dmFyIG89dC5kZWZhdWx0JDgvdGhpcy50aWxlU2l6ZTt0aGlzLndvcmtlck9wdGlvbnM9dC5leHRlbmQoe3NvdXJjZTp0aGlzLmlkLGNsdXN0ZXI6bi5jbHVzdGVyfHwhMSxnZW9qc29uVnRPcHRpb25zOntidWZmZXI6KHZvaWQgMCE9PW4uYnVmZmVyP24uYnVmZmVyOjEyOCkqbyx0b2xlcmFuY2U6KHZvaWQgMCE9PW4udG9sZXJhbmNlP24udG9sZXJhbmNlOi4zNzUpKm8sZXh0ZW50OnQuZGVmYXVsdCQ4LG1heFpvb206dGhpcy5tYXh6b29tLGxpbmVNZXRyaWNzOm4ubGluZU1ldHJpY3N8fCExfSxzdXBlcmNsdXN0ZXJPcHRpb25zOnttYXhab29tOnZvaWQgMCE9PW4uY2x1c3Rlck1heFpvb20/TWF0aC5taW4obi5jbHVzdGVyTWF4Wm9vbSx0aGlzLm1heHpvb20tMSk6dGhpcy5tYXh6b29tLTEsZXh0ZW50OnQuZGVmYXVsdCQ4LHJhZGl1czoobi5jbHVzdGVyUmFkaXVzfHw1MCkqbyxsb2c6ITF9fSxuLndvcmtlck9wdGlvbnMpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhbG9hZGluZ1wiLHtkYXRhVHlwZTpcInNvdXJjZVwifSkpLHRoaXMuX3VwZGF0ZVdvcmtlckRhdGEoZnVuY3Rpb24ocil7aWYocillLmZpcmUobmV3IHQuRXJyb3JFdmVudChyKSk7ZWxzZXt2YXIgbj17ZGF0YVR5cGU6XCJzb3VyY2VcIixzb3VyY2VEYXRhVHlwZTpcIm1ldGFkYXRhXCJ9O2UuX2NvbGxlY3RSZXNvdXJjZVRpbWluZyYmZS5fcmVzb3VyY2VUaW1pbmcmJmUuX3Jlc291cmNlVGltaW5nLmxlbmd0aD4wJiYobi5yZXNvdXJjZVRpbWluZz1lLl9yZXNvdXJjZVRpbWluZyxlLl9yZXNvdXJjZVRpbWluZz1bXSksZS5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YVwiLG4pKX19KX0sci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLmxvYWQoKX0sci5wcm90b3R5cGUuc2V0RGF0YT1mdW5jdGlvbihlKXt2YXIgcj10aGlzO3JldHVybiB0aGlzLl9kYXRhPWUsdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YWxvYWRpbmdcIix7ZGF0YVR5cGU6XCJzb3VyY2VcIn0pKSx0aGlzLl91cGRhdGVXb3JrZXJEYXRhKGZ1bmN0aW9uKGUpe2lmKGUpcmV0dXJuIHIuZmlyZShuZXcgdC5FcnJvckV2ZW50KGUpKTt2YXIgbj17ZGF0YVR5cGU6XCJzb3VyY2VcIixzb3VyY2VEYXRhVHlwZTpcImNvbnRlbnRcIn07ci5fY29sbGVjdFJlc291cmNlVGltaW5nJiZyLl9yZXNvdXJjZVRpbWluZyYmci5fcmVzb3VyY2VUaW1pbmcubGVuZ3RoPjAmJihuLnJlc291cmNlVGltaW5nPXIuX3Jlc291cmNlVGltaW5nLHIuX3Jlc291cmNlVGltaW5nPVtdKSxyLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhXCIsbikpfSksdGhpc30sci5wcm90b3R5cGUuX3VwZGF0ZVdvcmtlckRhdGE9ZnVuY3Rpb24oZSl7dmFyIHIsbixpPXRoaXMsYT10LmV4dGVuZCh7fSx0aGlzLndvcmtlck9wdGlvbnMpLG89dGhpcy5fZGF0YTtcInN0cmluZ1wiPT10eXBlb2Ygbz8oYS5yZXF1ZXN0PXRoaXMubWFwLl90cmFuc2Zvcm1SZXF1ZXN0KChyPW8sKG49dC5kZWZhdWx0LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpKS5ocmVmPXIsbi5ocmVmKSx0LlJlc291cmNlVHlwZS5Tb3VyY2UpLGEucmVxdWVzdC5jb2xsZWN0UmVzb3VyY2VUaW1pbmc9dGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nKTphLmRhdGE9SlNPTi5zdHJpbmdpZnkobyksdGhpcy53b3JrZXJJRD10aGlzLmRpc3BhdGNoZXIuc2VuZCh0aGlzLnR5cGUrXCIuXCIrYS5zb3VyY2UrXCIubG9hZERhdGFcIixhLGZ1bmN0aW9uKHQscil7aS5fcmVtb3ZlZHx8ciYmci5hYmFuZG9uZWR8fChpLl9sb2FkZWQ9ITAsciYmci5yZXNvdXJjZVRpbWluZyYmci5yZXNvdXJjZVRpbWluZ1tpLmlkXSYmKGkuX3Jlc291cmNlVGltaW5nPXIucmVzb3VyY2VUaW1pbmdbaS5pZF0uc2xpY2UoMCkpLGkuZGlzcGF0Y2hlci5zZW5kKGkudHlwZStcIi5cIithLnNvdXJjZStcIi5jb2FsZXNjZVwiLG51bGwsbnVsbCxpLndvcmtlcklEKSxlKHQpKX0sdGhpcy53b3JrZXJJRCl9LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXZvaWQgMD09PXQud29ya2VySUQ/XCJsb2FkVGlsZVwiOlwicmVsb2FkVGlsZVwiLGk9e3R5cGU6dGhpcy50eXBlLHVpZDp0LnVpZCx0aWxlSUQ6dC50aWxlSUQsem9vbTp0LnRpbGVJRC5vdmVyc2NhbGVkWixtYXhab29tOnRoaXMubWF4em9vbSx0aWxlU2l6ZTp0aGlzLnRpbGVTaXplLHNvdXJjZTp0aGlzLmlkLHBpeGVsUmF0aW86YS5kZXZpY2VQaXhlbFJhdGlvLHNob3dDb2xsaXNpb25Cb3hlczp0aGlzLm1hcC5zaG93Q29sbGlzaW9uQm94ZXN9O3Qud29ya2VySUQ9dGhpcy5kaXNwYXRjaGVyLnNlbmQobixpLGZ1bmN0aW9uKGksYSl7cmV0dXJuIHQudW5sb2FkVmVjdG9yRGF0YSgpLHQuYWJvcnRlZD9lKG51bGwpOmk/ZShpKToodC5sb2FkVmVjdG9yRGF0YShhLHIubWFwLnBhaW50ZXIsXCJyZWxvYWRUaWxlXCI9PT1uKSxlKG51bGwpKX0sdGhpcy53b3JrZXJJRCl9LHIucHJvdG90eXBlLmFib3J0VGlsZT1mdW5jdGlvbih0KXt0LmFib3J0ZWQ9ITB9LHIucHJvdG90eXBlLnVubG9hZFRpbGU9ZnVuY3Rpb24odCl7dC51bmxvYWRWZWN0b3JEYXRhKCksdGhpcy5kaXNwYXRjaGVyLnNlbmQoXCJyZW1vdmVUaWxlXCIse3VpZDp0LnVpZCx0eXBlOnRoaXMudHlwZSxzb3VyY2U6dGhpcy5pZH0sbnVsbCx0LndvcmtlcklEKX0sci5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9yZW1vdmVkPSEwLHRoaXMuZGlzcGF0Y2hlci5zZW5kKFwicmVtb3ZlU291cmNlXCIse3R5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkfSxudWxsLHRoaXMud29ya2VySUQpfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5leHRlbmQoe30sdGhpcy5fb3B0aW9ucyx7dHlwZTp0aGlzLnR5cGUsZGF0YTp0aGlzLl9kYXRhfSl9LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4hMX0scn0odC5FdmVudGVkKSxLPXQuY3JlYXRlTGF5b3V0KFt7bmFtZTpcImFfcG9zXCIsdHlwZTpcIkludDE2XCIsY29tcG9uZW50czoyfSx7bmFtZTpcImFfdGV4dHVyZV9wb3NcIix0eXBlOlwiSW50MTZcIixjb21wb25lbnRzOjJ9XSksUT1mdW5jdGlvbigpe3RoaXMuYm91bmRQcm9ncmFtPW51bGwsdGhpcy5ib3VuZExheW91dFZlcnRleEJ1ZmZlcj1udWxsLHRoaXMuYm91bmRQYWludFZlcnRleEJ1ZmZlcnM9W10sdGhpcy5ib3VuZEluZGV4QnVmZmVyPW51bGwsdGhpcy5ib3VuZFZlcnRleE9mZnNldD1udWxsLHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyPW51bGwsdGhpcy52YW89bnVsbH07US5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3RoaXMuY29udGV4dD10O2Zvcih2YXIgbD10aGlzLmJvdW5kUGFpbnRWZXJ0ZXhCdWZmZXJzLmxlbmd0aCE9PW4ubGVuZ3RoLGM9MDshbCYmYzxuLmxlbmd0aDtjKyspdGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVyc1tjXSE9PW5bY10mJihsPSEwKTt2YXIgdT0hdGhpcy52YW98fHRoaXMuYm91bmRQcm9ncmFtIT09ZXx8dGhpcy5ib3VuZExheW91dFZlcnRleEJ1ZmZlciE9PXJ8fGx8fHRoaXMuYm91bmRJbmRleEJ1ZmZlciE9PWl8fHRoaXMuYm91bmRWZXJ0ZXhPZmZzZXQhPT1hfHx0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlciE9PW98fHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyMiE9PXM7IXQuZXh0VmVydGV4QXJyYXlPYmplY3R8fHU/dGhpcy5mcmVzaEJpbmQoZSxyLG4saSxhLG8scyk6KHQuYmluZFZlcnRleEFycmF5T0VTLnNldCh0aGlzLnZhbyksbyYmby5iaW5kKCksaSYmaS5keW5hbWljRHJhdyYmaS5iaW5kKCkscyYmcy5iaW5kKCkpfSxRLnByb3RvdHlwZS5mcmVzaEJpbmQ9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHMsbD10Lm51bUF0dHJpYnV0ZXMsYz10aGlzLmNvbnRleHQsdT1jLmdsO2lmKGMuZXh0VmVydGV4QXJyYXlPYmplY3QpdGhpcy52YW8mJnRoaXMuZGVzdHJveSgpLHRoaXMudmFvPWMuZXh0VmVydGV4QXJyYXlPYmplY3QuY3JlYXRlVmVydGV4QXJyYXlPRVMoKSxjLmJpbmRWZXJ0ZXhBcnJheU9FUy5zZXQodGhpcy52YW8pLHM9MCx0aGlzLmJvdW5kUHJvZ3JhbT10LHRoaXMuYm91bmRMYXlvdXRWZXJ0ZXhCdWZmZXI9ZSx0aGlzLmJvdW5kUGFpbnRWZXJ0ZXhCdWZmZXJzPXIsdGhpcy5ib3VuZEluZGV4QnVmZmVyPW4sdGhpcy5ib3VuZFZlcnRleE9mZnNldD1pLHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyPWEsdGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXIyPW87ZWxzZXtzPWMuY3VycmVudE51bUF0dHJpYnV0ZXN8fDA7Zm9yKHZhciBoPWw7aDxzO2grKyl1LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShoKX1lLmVuYWJsZUF0dHJpYnV0ZXModSx0KTtmb3IodmFyIGY9MCxwPXI7ZjxwLmxlbmd0aDtmKz0xKXBbZl0uZW5hYmxlQXR0cmlidXRlcyh1LHQpO2EmJmEuZW5hYmxlQXR0cmlidXRlcyh1LHQpLG8mJm8uZW5hYmxlQXR0cmlidXRlcyh1LHQpLGUuYmluZCgpLGUuc2V0VmVydGV4QXR0cmliUG9pbnRlcnModSx0LGkpO2Zvcih2YXIgZD0wLGc9cjtkPGcubGVuZ3RoO2QrPTEpe3ZhciB2PWdbZF07di5iaW5kKCksdi5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyh1LHQsaSl9YSYmKGEuYmluZCgpLGEuc2V0VmVydGV4QXR0cmliUG9pbnRlcnModSx0LGkpKSxuJiZuLmJpbmQoKSxvJiYoby5iaW5kKCksby5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyh1LHQsaSkpLGMuY3VycmVudE51bUF0dHJpYnV0ZXM9bH0sUS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMudmFvJiYodGhpcy5jb250ZXh0LmV4dFZlcnRleEFycmF5T2JqZWN0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHRoaXMudmFvKSx0aGlzLnZhbz1udWxsKX07dmFyIHR0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCxyLG4saSl7ZS5jYWxsKHRoaXMpLHRoaXMuaWQ9dCx0aGlzLmRpc3BhdGNoZXI9bix0aGlzLmNvb3JkaW5hdGVzPXIuY29vcmRpbmF0ZXMsdGhpcy50eXBlPVwiaW1hZ2VcIix0aGlzLm1pbnpvb209MCx0aGlzLm1heHpvb209MjIsdGhpcy50aWxlU2l6ZT01MTIsdGhpcy50aWxlcz17fSx0aGlzLnNldEV2ZW50ZWRQYXJlbnQoaSksdGhpcy5vcHRpb25zPXJ9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuZmlyZShuZXcgdC5FdmVudChcImRhdGFsb2FkaW5nXCIse2RhdGFUeXBlOlwic291cmNlXCJ9KSksdGhpcy51cmw9dGhpcy5vcHRpb25zLnVybCx0LmdldEltYWdlKHRoaXMubWFwLl90cmFuc2Zvcm1SZXF1ZXN0KHRoaXMudXJsLHQuUmVzb3VyY2VUeXBlLkltYWdlKSxmdW5jdGlvbihyLG4pe3I/ZS5maXJlKG5ldyB0LkVycm9yRXZlbnQocikpOm4mJihlLmltYWdlPWEuZ2V0SW1hZ2VEYXRhKG4pLGUuX2ZpbmlzaExvYWRpbmcoKSl9KX0sci5wcm90b3R5cGUuX2ZpbmlzaExvYWRpbmc9ZnVuY3Rpb24oKXt0aGlzLm1hcCYmKHRoaXMuc2V0Q29vcmRpbmF0ZXModGhpcy5jb29yZGluYXRlcyksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YVwiLHtkYXRhVHlwZTpcInNvdXJjZVwiLHNvdXJjZURhdGFUeXBlOlwibWV0YWRhdGFcIn0pKSl9LHIucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMubWFwPXQsdGhpcy5sb2FkKCl9LHIucHJvdG90eXBlLnNldENvb3JkaW5hdGVzPWZ1bmN0aW9uKGUpe3RoaXMuY29vcmRpbmF0ZXM9ZTt2YXIgcj10aGlzLm1hcCxuPWUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiByLnRyYW5zZm9ybS5sb2NhdGlvbkNvb3JkaW5hdGUoRy5jb252ZXJ0KHQpKS56b29tVG8oMCl9KSxpPXRoaXMuY2VudGVyQ29vcmQ9dC5nZXRDb29yZGluYXRlc0NlbnRlcihuKTtpLmNvbHVtbj1NYXRoLmZsb29yKGkuY29sdW1uKSxpLnJvdz1NYXRoLmZsb29yKGkucm93KSx0aGlzLnRpbGVJRD1uZXcgdC5DYW5vbmljYWxUaWxlSUQoaS56b29tLGkuY29sdW1uLGkucm93KSx0aGlzLm1pbnpvb209dGhpcy5tYXh6b29tPWkuem9vbTt2YXIgYT1uLm1hcChmdW5jdGlvbihlKXt2YXIgcj1lLnpvb21UbyhpLnpvb20pO3JldHVybiBuZXcgdC5kZWZhdWx0JDEoTWF0aC5yb3VuZCgoci5jb2x1bW4taS5jb2x1bW4pKnQuZGVmYXVsdCQ4KSxNYXRoLnJvdW5kKChyLnJvdy1pLnJvdykqdC5kZWZhdWx0JDgpKX0pO3JldHVybiB0aGlzLl9ib3VuZHNBcnJheT1uZXcgdC5SYXN0ZXJCb3VuZHNBcnJheSx0aGlzLl9ib3VuZHNBcnJheS5lbXBsYWNlQmFjayhhWzBdLngsYVswXS55LDAsMCksdGhpcy5fYm91bmRzQXJyYXkuZW1wbGFjZUJhY2soYVsxXS54LGFbMV0ueSx0LmRlZmF1bHQkOCwwKSx0aGlzLl9ib3VuZHNBcnJheS5lbXBsYWNlQmFjayhhWzNdLngsYVszXS55LDAsdC5kZWZhdWx0JDgpLHRoaXMuX2JvdW5kc0FycmF5LmVtcGxhY2VCYWNrKGFbMl0ueCxhWzJdLnksdC5kZWZhdWx0JDgsdC5kZWZhdWx0JDgpLHRoaXMuYm91bmRzQnVmZmVyJiYodGhpcy5ib3VuZHNCdWZmZXIuZGVzdHJveSgpLGRlbGV0ZSB0aGlzLmJvdW5kc0J1ZmZlciksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YVwiLHtkYXRhVHlwZTpcInNvdXJjZVwiLHNvdXJjZURhdGFUeXBlOlwiY29udGVudFwifSkpLHRoaXN9LHIucHJvdG90eXBlLnByZXBhcmU9ZnVuY3Rpb24oKXtpZigwIT09T2JqZWN0LmtleXModGhpcy50aWxlcykubGVuZ3RoJiZ0aGlzLmltYWdlKXt2YXIgdD10aGlzLm1hcC5wYWludGVyLmNvbnRleHQsZT10LmdsO2Zvcih2YXIgciBpbiB0aGlzLmJvdW5kc0J1ZmZlcnx8KHRoaXMuYm91bmRzQnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuX2JvdW5kc0FycmF5LEsubWVtYmVycykpLHRoaXMuYm91bmRzVkFPfHwodGhpcy5ib3VuZHNWQU89bmV3IFEpLHRoaXMudGV4dHVyZXx8KHRoaXMudGV4dHVyZT1uZXcgeih0LHRoaXMuaW1hZ2UsZS5SR0JBKSx0aGlzLnRleHR1cmUuYmluZChlLkxJTkVBUixlLkNMQU1QX1RPX0VER0UpKSx0aGlzLnRpbGVzKXt2YXIgbj10aGlzLnRpbGVzW3JdO1wibG9hZGVkXCIhPT1uLnN0YXRlJiYobi5zdGF0ZT1cImxvYWRlZFwiLG4udGV4dHVyZT10aGlzLnRleHR1cmUpfX19LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7dGhpcy50aWxlSUQmJnRoaXMudGlsZUlELmVxdWFscyh0LnRpbGVJRC5jYW5vbmljYWwpPyh0aGlzLnRpbGVzW1N0cmluZyh0LnRpbGVJRC53cmFwKV09dCx0LmJ1Y2tldHM9e30sZShudWxsKSk6KHQuc3RhdGU9XCJlcnJvcmVkXCIsZShudWxsKSl9LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOlwiaW1hZ2VcIix1cmw6dGhpcy5vcHRpb25zLnVybCxjb29yZGluYXRlczp0aGlzLmNvb3JkaW5hdGVzfX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiExfSxyfSh0LkV2ZW50ZWQpLGV0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCxyLG4saSl7ZS5jYWxsKHRoaXMsdCxyLG4saSksdGhpcy5yb3VuZFpvb209ITAsdGhpcy50eXBlPVwidmlkZW9cIix0aGlzLm9wdGlvbnM9cn1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMscj10aGlzLm9wdGlvbnM7dGhpcy51cmxzPVtdO2Zvcih2YXIgbj0wLGk9ci51cmxzO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtlLnVybHMucHVzaChlLm1hcC5fdHJhbnNmb3JtUmVxdWVzdChhLHQuUmVzb3VyY2VUeXBlLlNvdXJjZSkudXJsKX10LmdldFZpZGVvKHRoaXMudXJscyxmdW5jdGlvbihyLG4pe3I/ZS5maXJlKG5ldyB0LkVycm9yRXZlbnQocikpOm4mJihlLnZpZGVvPW4sZS52aWRlby5sb29wPSEwLGUudmlkZW8uYWRkRXZlbnRMaXN0ZW5lcihcInBsYXlpbmdcIixmdW5jdGlvbigpe2UubWFwLl9yZXJlbmRlcigpfSksZS5tYXAmJmUudmlkZW8ucGxheSgpLGUuX2ZpbmlzaExvYWRpbmcoKSl9KX0sci5wcm90b3R5cGUuZ2V0VmlkZW89ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWRlb30sci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXB8fCh0aGlzLm1hcD10LHRoaXMubG9hZCgpLHRoaXMudmlkZW8mJih0aGlzLnZpZGVvLnBsYXkoKSx0aGlzLnNldENvb3JkaW5hdGVzKHRoaXMuY29vcmRpbmF0ZXMpKSl9LHIucHJvdG90eXBlLnByZXBhcmU9ZnVuY3Rpb24oKXtpZighKDA9PT1PYmplY3Qua2V5cyh0aGlzLnRpbGVzKS5sZW5ndGh8fHRoaXMudmlkZW8ucmVhZHlTdGF0ZTwyKSl7dmFyIHQ9dGhpcy5tYXAucGFpbnRlci5jb250ZXh0LGU9dC5nbDtmb3IodmFyIHIgaW4gdGhpcy5ib3VuZHNCdWZmZXJ8fCh0aGlzLmJvdW5kc0J1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLl9ib3VuZHNBcnJheSxLLm1lbWJlcnMpKSx0aGlzLmJvdW5kc1ZBT3x8KHRoaXMuYm91bmRzVkFPPW5ldyBRKSx0aGlzLnRleHR1cmU/dGhpcy52aWRlby5wYXVzZWR8fCh0aGlzLnRleHR1cmUuYmluZChlLkxJTkVBUixlLkNMQU1QX1RPX0VER0UpLGUudGV4U3ViSW1hZ2UyRChlLlRFWFRVUkVfMkQsMCwwLDAsZS5SR0JBLGUuVU5TSUdORURfQllURSx0aGlzLnZpZGVvKSk6KHRoaXMudGV4dHVyZT1uZXcgeih0LHRoaXMudmlkZW8sZS5SR0JBKSx0aGlzLnRleHR1cmUuYmluZChlLkxJTkVBUixlLkNMQU1QX1RPX0VER0UpKSx0aGlzLnRpbGVzKXt2YXIgbj10aGlzLnRpbGVzW3JdO1wibG9hZGVkXCIhPT1uLnN0YXRlJiYobi5zdGF0ZT1cImxvYWRlZFwiLG4udGV4dHVyZT10aGlzLnRleHR1cmUpfX19LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOlwidmlkZW9cIix1cmxzOnRoaXMudXJscyxjb29yZGluYXRlczp0aGlzLmNvb3JkaW5hdGVzfX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZGVvJiYhdGhpcy52aWRlby5wYXVzZWR9LHJ9KHR0KSxydD1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpLGEpe2UuY2FsbCh0aGlzLHIsbixpLGEpLG4uY29vcmRpbmF0ZXM/QXJyYXkuaXNBcnJheShuLmNvb3JkaW5hdGVzKSYmND09PW4uY29vcmRpbmF0ZXMubGVuZ3RoJiYhbi5jb29yZGluYXRlcy5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiFBcnJheS5pc0FycmF5KHQpfHwyIT09dC5sZW5ndGh8fHQuc29tZShmdW5jdGlvbih0KXtyZXR1cm5cIm51bWJlclwiIT10eXBlb2YgdH0pfSl8fHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LmRlZmF1bHQkOShcInNvdXJjZXMuXCIrcixudWxsLCdcImNvb3JkaW5hdGVzXCIgcHJvcGVydHkgbXVzdCBiZSBhbiBhcnJheSBvZiA0IGxvbmdpdHVkZS9sYXRpdHVkZSBhcnJheSBwYWlycycpKSk6dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IHQuZGVmYXVsdCQ5KFwic291cmNlcy5cIityLG51bGwsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgXCJjb29yZGluYXRlc1wiJykpKSxuLmFuaW1hdGUmJlwiYm9vbGVhblwiIT10eXBlb2Ygbi5hbmltYXRlJiZ0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgdC5kZWZhdWx0JDkoXCJzb3VyY2VzLlwiK3IsbnVsbCwnb3B0aW9uYWwgXCJhbmltYXRlXCIgcHJvcGVydHkgbXVzdCBiZSBhIGJvb2xlYW4gdmFsdWUnKSkpLG4uY2FudmFzP1wic3RyaW5nXCI9PXR5cGVvZiBuLmNhbnZhc3x8bi5jYW52YXMgaW5zdGFuY2VvZiB0LmRlZmF1bHQuSFRNTENhbnZhc0VsZW1lbnR8fHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LmRlZmF1bHQkOShcInNvdXJjZXMuXCIrcixudWxsLCdcImNhbnZhc1wiIG11c3QgYmUgZWl0aGVyIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgSUQgb2YgdGhlIGNhbnZhcyBlbGVtZW50IGZyb20gd2hpY2ggdG8gcmVhZCwgb3IgYW4gSFRNTENhbnZhc0VsZW1lbnQgaW5zdGFuY2UnKSkpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LmRlZmF1bHQkOShcInNvdXJjZXMuXCIrcixudWxsLCdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5IFwiY2FudmFzXCInKSkpLHRoaXMub3B0aW9ucz1uLHRoaXMuYW5pbWF0ZT12b2lkIDA9PT1uLmFuaW1hdGV8fG4uYW5pbWF0ZX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3RoaXMuY2FudmFzfHwodGhpcy5jYW52YXM9dGhpcy5vcHRpb25zLmNhbnZhcyBpbnN0YW5jZW9mIHQuZGVmYXVsdC5IVE1MQ2FudmFzRWxlbWVudD90aGlzLm9wdGlvbnMuY2FudmFzOnQuZGVmYXVsdC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLm9wdGlvbnMuY2FudmFzKSksdGhpcy53aWR0aD10aGlzLmNhbnZhcy53aWR0aCx0aGlzLmhlaWdodD10aGlzLmNhbnZhcy5oZWlnaHQsdGhpcy5faGFzSW52YWxpZERpbWVuc2lvbnMoKT90aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoXCJDYW52YXMgZGltZW5zaW9ucyBjYW5ub3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8uXCIpKSk6KHRoaXMucGxheT1mdW5jdGlvbigpe3RoaXMuX3BsYXlpbmc9ITAsdGhpcy5tYXAuX3JlcmVuZGVyKCl9LHRoaXMucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLl9wbGF5aW5nPSExfSx0aGlzLl9maW5pc2hMb2FkaW5nKCkpfSxyLnByb3RvdHlwZS5nZXRDYW52YXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW52YXN9LHIucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMubWFwPXQsdGhpcy5sb2FkKCksdGhpcy5jYW52YXMmJnRoaXMuYW5pbWF0ZSYmdGhpcy5wbGF5KCl9LHIucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5wYXVzZSgpfSxyLnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKCl7dmFyIHQ9ITE7aWYodGhpcy5jYW52YXMud2lkdGghPT10aGlzLndpZHRoJiYodGhpcy53aWR0aD10aGlzLmNhbnZhcy53aWR0aCx0PSEwKSx0aGlzLmNhbnZhcy5oZWlnaHQhPT10aGlzLmhlaWdodCYmKHRoaXMuaGVpZ2h0PXRoaXMuY2FudmFzLmhlaWdodCx0PSEwKSwhdGhpcy5faGFzSW52YWxpZERpbWVuc2lvbnMoKSYmMCE9PU9iamVjdC5rZXlzKHRoaXMudGlsZXMpLmxlbmd0aCl7dmFyIGU9dGhpcy5tYXAucGFpbnRlci5jb250ZXh0LHI9ZS5nbDtmb3IodmFyIG4gaW4gdGhpcy5ib3VuZHNCdWZmZXJ8fCh0aGlzLmJvdW5kc0J1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLl9ib3VuZHNBcnJheSxLLm1lbWJlcnMpKSx0aGlzLmJvdW5kc1ZBT3x8KHRoaXMuYm91bmRzVkFPPW5ldyBRKSx0aGlzLnRleHR1cmU/dD90aGlzLnRleHR1cmUudXBkYXRlKHRoaXMuY2FudmFzKTp0aGlzLl9wbGF5aW5nJiYodGhpcy50ZXh0dXJlLmJpbmQoci5MSU5FQVIsci5DTEFNUF9UT19FREdFKSxyLnRleFN1YkltYWdlMkQoci5URVhUVVJFXzJELDAsMCwwLHIuUkdCQSxyLlVOU0lHTkVEX0JZVEUsdGhpcy5jYW52YXMpKToodGhpcy50ZXh0dXJlPW5ldyB6KGUsdGhpcy5jYW52YXMsci5SR0JBKSx0aGlzLnRleHR1cmUuYmluZChyLkxJTkVBUixyLkNMQU1QX1RPX0VER0UpKSx0aGlzLnRpbGVzKXt2YXIgaT10aGlzLnRpbGVzW25dO1wibG9hZGVkXCIhPT1pLnN0YXRlJiYoaS5zdGF0ZT1cImxvYWRlZFwiLGkudGV4dHVyZT10aGlzLnRleHR1cmUpfX19LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOlwiY2FudmFzXCIsY29vcmRpbmF0ZXM6dGhpcy5jb29yZGluYXRlc319LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGxheWluZ30sci5wcm90b3R5cGUuX2hhc0ludmFsaWREaW1lbnNpb25zPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT1bdGhpcy5jYW52YXMud2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0XTt0PGUubGVuZ3RoO3QrPTEpe3ZhciByPWVbdF07aWYoaXNOYU4ocil8fHI8PTApcmV0dXJuITB9cmV0dXJuITF9LHJ9KHR0KSxudD17dmVjdG9yOlgscmFzdGVyOlosXCJyYXN0ZXItZGVtXCI6JCxnZW9qc29uOkosdmlkZW86ZXQsaW1hZ2U6dHQsY2FudmFzOnJ0fSxpdD1mdW5jdGlvbihlLHIsbixpKXt2YXIgYT1uZXcgbnRbci50eXBlXShlLHIsbixpKTtpZihhLmlkIT09ZSl0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBTb3VyY2UgaWQgdG8gYmUgXCIrZStcIiBpbnN0ZWFkIG9mIFwiK2EuaWQpO3JldHVybiB0LmJpbmRBbGwoW1wibG9hZFwiLFwiYWJvcnRcIixcInVubG9hZFwiLFwic2VyaWFsaXplXCIsXCJwcmVwYXJlXCJdLGEpLGF9O2Z1bmN0aW9uIGF0KHQsZSxyLG4saSl7dmFyIGE9aS5tYXhQaXRjaFNjYWxlRmFjdG9yKCksbz10LnRpbGVzSW4ocixhKTtvLnNvcnQob3QpO2Zvcih2YXIgcz1bXSxsPTAsYz1vO2w8Yy5sZW5ndGg7bCs9MSl7dmFyIHU9Y1tsXTtzLnB1c2goe3dyYXBwZWRUaWxlSUQ6dS50aWxlSUQud3JhcHBlZCgpLmtleSxxdWVyeVJlc3VsdHM6dS50aWxlLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhlLHUucXVlcnlHZW9tZXRyeSx1LnNjYWxlLG4saSxhLHQudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeCh1LnRpbGVJRC50b1Vud3JhcHBlZCgpKSl9KX1yZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LHI9e30sbj0wLGk9dDtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl0sbz1hLnF1ZXJ5UmVzdWx0cyxzPWEud3JhcHBlZFRpbGVJRCxsPXJbc109cltzXXx8e307Zm9yKHZhciBjIGluIG8pZm9yKHZhciB1PW9bY10saD1sW2NdPWxbY118fHt9LGY9ZVtjXT1lW2NdfHxbXSxwPTAsZD11O3A8ZC5sZW5ndGg7cCs9MSl7dmFyIGc9ZFtwXTtoW2cuZmVhdHVyZUluZGV4XXx8KGhbZy5mZWF0dXJlSW5kZXhdPSEwLGYucHVzaChnLmZlYXR1cmUpKX19cmV0dXJuIGV9KHMpfWZ1bmN0aW9uIG90KHQsZSl7dmFyIHI9dC50aWxlSUQsbj1lLnRpbGVJRDtyZXR1cm4gci5vdmVyc2NhbGVkWi1uLm92ZXJzY2FsZWRafHxyLmNhbm9uaWNhbC55LW4uY2Fub25pY2FsLnl8fHIud3JhcC1uLndyYXB8fHIuY2Fub25pY2FsLngtbi5jYW5vbmljYWwueH12YXIgc3Q9ZnVuY3Rpb24oZSxyKXt0aGlzLnRpbGVJRD1lLHRoaXMudWlkPXQudW5pcXVlSWQoKSx0aGlzLnVzZXM9MCx0aGlzLnRpbGVTaXplPXIsdGhpcy5idWNrZXRzPXt9LHRoaXMuZXhwaXJhdGlvblRpbWU9bnVsbCx0aGlzLnF1ZXJ5UGFkZGluZz0wLHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuc3RhdGU9XCJsb2FkaW5nXCJ9O3N0LnByb3RvdHlwZS5yZWdpc3RlckZhZGVEdXJhdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10K3RoaXMudGltZUFkZGVkO2U8YS5ub3coKXx8dGhpcy5mYWRlRW5kVGltZSYmZTx0aGlzLmZhZGVFbmRUaW1lfHwodGhpcy5mYWRlRW5kVGltZT1lKX0sc3QucHJvdG90eXBlLndhc1JlcXVlc3RlZD1mdW5jdGlvbigpe3JldHVyblwiZXJyb3JlZFwiPT09dGhpcy5zdGF0ZXx8XCJsb2FkZWRcIj09PXRoaXMuc3RhdGV8fFwicmVsb2FkaW5nXCI9PT10aGlzLnN0YXRlfSxzdC5wcm90b3R5cGUubG9hZFZlY3RvckRhdGE9ZnVuY3Rpb24oZSxyLG4pe2lmKHRoaXMuaGFzRGF0YSgpJiZ0aGlzLnVubG9hZFZlY3RvckRhdGEoKSx0aGlzLnN0YXRlPVwibG9hZGVkXCIsZSl7aWYoZS5mZWF0dXJlSW5kZXgmJih0aGlzLmxhdGVzdEZlYXR1cmVJbmRleD1lLmZlYXR1cmVJbmRleCxlLnJhd1RpbGVEYXRhPyh0aGlzLmxhdGVzdFJhd1RpbGVEYXRhPWUucmF3VGlsZURhdGEsdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGE9ZS5yYXdUaWxlRGF0YSk6dGhpcy5sYXRlc3RSYXdUaWxlRGF0YSYmKHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LnJhd1RpbGVEYXRhPXRoaXMubGF0ZXN0UmF3VGlsZURhdGEpKSx0aGlzLmNvbGxpc2lvbkJveEFycmF5PWUuY29sbGlzaW9uQm94QXJyYXksdGhpcy5idWNrZXRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307aWYoIWUpcmV0dXJuIHI7Zm9yKHZhciBuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXSxvPWEubGF5ZXJJZHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlLmdldExheWVyKHQpfSkuZmlsdGVyKEJvb2xlYW4pO2lmKDAhPT1vLmxlbmd0aCl7YS5sYXllcnM9bztmb3IodmFyIHM9MCxsPW87czxsLmxlbmd0aDtzKz0xKXJbbFtzXS5pZF09YX19cmV0dXJuIHJ9KGUuYnVja2V0cyxyLnN0eWxlKSxuKWZvcih2YXIgaSBpbiB0aGlzLmJ1Y2tldHMpe3ZhciBhPXRoaXMuYnVja2V0c1tpXTthIGluc3RhbmNlb2YgdC5kZWZhdWx0JDE0JiYoYS5qdXN0UmVsb2FkZWQ9ITApfWZvcih2YXIgbyBpbiB0aGlzLnF1ZXJ5UGFkZGluZz0wLHRoaXMuYnVja2V0cyl7dmFyIHM9dGhpcy5idWNrZXRzW29dO3RoaXMucXVlcnlQYWRkaW5nPU1hdGgubWF4KHRoaXMucXVlcnlQYWRkaW5nLHIuc3R5bGUuZ2V0TGF5ZXIocy5sYXllcklkc1swXSkucXVlcnlSYWRpdXMocykpfWUuaWNvbkF0bGFzSW1hZ2UmJih0aGlzLmljb25BdGxhc0ltYWdlPWUuaWNvbkF0bGFzSW1hZ2UpLGUuZ2x5cGhBdGxhc0ltYWdlJiYodGhpcy5nbHlwaEF0bGFzSW1hZ2U9ZS5nbHlwaEF0bGFzSW1hZ2UpfWVsc2UgdGhpcy5jb2xsaXNpb25Cb3hBcnJheT1uZXcgdC5Db2xsaXNpb25Cb3hBcnJheX0sc3QucHJvdG90eXBlLnVubG9hZFZlY3RvckRhdGE9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5idWNrZXRzKXRoaXMuYnVja2V0c1t0XS5kZXN0cm95KCk7dGhpcy5idWNrZXRzPXt9LHRoaXMuaWNvbkF0bGFzVGV4dHVyZSYmdGhpcy5pY29uQXRsYXNUZXh0dXJlLmRlc3Ryb3koKSx0aGlzLmdseXBoQXRsYXNUZXh0dXJlJiZ0aGlzLmdseXBoQXRsYXNUZXh0dXJlLmRlc3Ryb3koKSx0aGlzLmxhdGVzdEZlYXR1cmVJbmRleD1udWxsLHRoaXMuc3RhdGU9XCJ1bmxvYWRlZFwifSxzdC5wcm90b3R5cGUudW5sb2FkREVNRGF0YT1mdW5jdGlvbigpe3RoaXMuZGVtPW51bGwsdGhpcy5uZWlnaGJvcmluZ1RpbGVzPW51bGwsdGhpcy5zdGF0ZT1cInVubG9hZGVkXCJ9LHN0LnByb3RvdHlwZS5nZXRCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYnVja2V0c1t0LmlkXX0sc3QucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5idWNrZXRzKXt2YXIgcj10aGlzLmJ1Y2tldHNbZV07ci51cGxvYWRlZHx8KHIudXBsb2FkKHQpLHIudXBsb2FkZWQ9ITApfXZhciBuPXQuZ2w7dGhpcy5pY29uQXRsYXNJbWFnZSYmKHRoaXMuaWNvbkF0bGFzVGV4dHVyZT1uZXcgeih0LHRoaXMuaWNvbkF0bGFzSW1hZ2Usbi5SR0JBKSx0aGlzLmljb25BdGxhc0ltYWdlPW51bGwpLHRoaXMuZ2x5cGhBdGxhc0ltYWdlJiYodGhpcy5nbHlwaEF0bGFzVGV4dHVyZT1uZXcgeih0LHRoaXMuZ2x5cGhBdGxhc0ltYWdlLG4uQUxQSEEpLHRoaXMuZ2x5cGhBdGxhc0ltYWdlPW51bGwpfSxzdC5wcm90b3R5cGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3JldHVybiB0aGlzLmxhdGVzdEZlYXR1cmVJbmRleCYmdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGE/dGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucXVlcnkoe3F1ZXJ5R2VvbWV0cnk6ZSxzY2FsZTpyLHRpbGVTaXplOnRoaXMudGlsZVNpemUscG9zTWF0cml4Om8sdHJhbnNmb3JtOmkscGFyYW1zOm4scXVlcnlQYWRkaW5nOnRoaXMucXVlcnlQYWRkaW5nKmF9LHQpOnt9fSxzdC5wcm90b3R5cGUucXVlcnlTb3VyY2VGZWF0dXJlcz1mdW5jdGlvbihlLHIpe2lmKHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4JiZ0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YSl7dmFyIG49dGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgubG9hZFZUTGF5ZXJzKCksaT1yP3Iuc291cmNlTGF5ZXI6XCJcIixhPW4uX2dlb2pzb25UaWxlTGF5ZXJ8fG5baV07aWYoYSlmb3IodmFyIG89dC5kZWZhdWx0JDEzKHImJnIuZmlsdGVyKSxzPXt6OnRoaXMudGlsZUlELm92ZXJzY2FsZWRaLHg6dGhpcy50aWxlSUQuY2Fub25pY2FsLngseTp0aGlzLnRpbGVJRC5jYW5vbmljYWwueX0sbD0wO2w8YS5sZW5ndGg7bCsrKXt2YXIgYz1hLmZlYXR1cmUobCk7aWYobyhuZXcgdC5kZWZhdWx0JDE2KHRoaXMudGlsZUlELm92ZXJzY2FsZWRaKSxjKSl7dmFyIHU9bmV3IHQuZGVmYXVsdCQxMihjLHMueixzLngscy55KTt1LnRpbGU9cyxlLnB1c2godSl9fX19LHN0LnByb3RvdHlwZS5jbGVhck1hc2s9ZnVuY3Rpb24oKXt0aGlzLnNlZ21lbnRzJiYodGhpcy5zZWdtZW50cy5kZXN0cm95KCksZGVsZXRlIHRoaXMuc2VnbWVudHMpLHRoaXMubWFza2VkQm91bmRzQnVmZmVyJiYodGhpcy5tYXNrZWRCb3VuZHNCdWZmZXIuZGVzdHJveSgpLGRlbGV0ZSB0aGlzLm1hc2tlZEJvdW5kc0J1ZmZlciksdGhpcy5tYXNrZWRJbmRleEJ1ZmZlciYmKHRoaXMubWFza2VkSW5kZXhCdWZmZXIuZGVzdHJveSgpLGRlbGV0ZSB0aGlzLm1hc2tlZEluZGV4QnVmZmVyKX0sc3QucHJvdG90eXBlLnNldE1hc2s9ZnVuY3Rpb24oZSxyKXtpZighdC5kZWZhdWx0JDEwKHRoaXMubWFzayxlKSYmKHRoaXMubWFzaz1lLHRoaXMuY2xlYXJNYXNrKCksIXQuZGVmYXVsdCQxMChlLHswOiEwfSkpKXt2YXIgbj1uZXcgdC5SYXN0ZXJCb3VuZHNBcnJheSxpPW5ldyB0LlRyaWFuZ2xlSW5kZXhBcnJheTt0aGlzLnNlZ21lbnRzPW5ldyB0LmRlZmF1bHQkMTUsdGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCgwLG4saSk7Zm9yKHZhciBhPU9iamVjdC5rZXlzKGUpLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9ZVthW29dXSxsPXQuZGVmYXVsdCQ4Pj5zLnosYz1uZXcgdC5kZWZhdWx0JDEocy54Kmwscy55KmwpLHU9bmV3IHQuZGVmYXVsdCQxKGMueCtsLGMueStsKSxoPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCxuLGkpO24uZW1wbGFjZUJhY2soYy54LGMueSxjLngsYy55KSxuLmVtcGxhY2VCYWNrKHUueCxjLnksdS54LGMueSksbi5lbXBsYWNlQmFjayhjLngsdS55LGMueCx1LnkpLG4uZW1wbGFjZUJhY2sodS54LHUueSx1LngsdS55KTt2YXIgZj1oLnZlcnRleExlbmd0aDtpLmVtcGxhY2VCYWNrKGYsZisxLGYrMiksaS5lbXBsYWNlQmFjayhmKzEsZisyLGYrMyksaC52ZXJ0ZXhMZW5ndGgrPTQsaC5wcmltaXRpdmVMZW5ndGgrPTJ9dGhpcy5tYXNrZWRCb3VuZHNCdWZmZXI9ci5jcmVhdGVWZXJ0ZXhCdWZmZXIobixLLm1lbWJlcnMpLHRoaXMubWFza2VkSW5kZXhCdWZmZXI9ci5jcmVhdGVJbmRleEJ1ZmZlcihpKX19LHN0LnByb3RvdHlwZS5oYXNEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuXCJsb2FkZWRcIj09PXRoaXMuc3RhdGV8fFwicmVsb2FkaW5nXCI9PT10aGlzLnN0YXRlfHxcImV4cGlyZWRcIj09PXRoaXMuc3RhdGV9LHN0LnByb3RvdHlwZS5zZXRFeHBpcnlEYXRhPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuZXhwaXJhdGlvblRpbWU7aWYoZS5jYWNoZUNvbnRyb2wpe3ZhciBuPXQucGFyc2VDYWNoZUNvbnRyb2woZS5jYWNoZUNvbnRyb2wpO25bXCJtYXgtYWdlXCJdJiYodGhpcy5leHBpcmF0aW9uVGltZT1EYXRlLm5vdygpKzFlMypuW1wibWF4LWFnZVwiXSl9ZWxzZSBlLmV4cGlyZXMmJih0aGlzLmV4cGlyYXRpb25UaW1lPW5ldyBEYXRlKGUuZXhwaXJlcykuZ2V0VGltZSgpKTtpZih0aGlzLmV4cGlyYXRpb25UaW1lKXt2YXIgaT1EYXRlLm5vdygpLGE9ITE7aWYodGhpcy5leHBpcmF0aW9uVGltZT5pKWE9ITE7ZWxzZSBpZihyKWlmKHRoaXMuZXhwaXJhdGlvblRpbWU8cilhPSEwO2Vsc2V7dmFyIG89dGhpcy5leHBpcmF0aW9uVGltZS1yO28/dGhpcy5leHBpcmF0aW9uVGltZT1pK01hdGgubWF4KG8sM2U0KTphPSEwfWVsc2UgYT0hMDthPyh0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQrKyx0aGlzLnN0YXRlPVwiZXhwaXJlZFwiKTp0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQ9MH19LHN0LnByb3RvdHlwZS5nZXRFeHBpcnlUaW1lb3V0PWZ1bmN0aW9uKCl7aWYodGhpcy5leHBpcmF0aW9uVGltZSlyZXR1cm4gdGhpcy5leHBpcmVkUmVxdWVzdENvdW50PzFlMyooMTw8TWF0aC5taW4odGhpcy5leHBpcmVkUmVxdWVzdENvdW50LTEsMzEpKTpNYXRoLm1pbih0aGlzLmV4cGlyYXRpb25UaW1lLShuZXcgRGF0ZSkuZ2V0VGltZSgpLE1hdGgucG93KDIsMzEpLTEpfTt2YXIgbHQ9ZnVuY3Rpb24odCxlKXt0aGlzLm1heD10LHRoaXMub25SZW1vdmU9ZSx0aGlzLnJlc2V0KCl9O2x0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLmRhdGEpZm9yKHZhciBlPTAscj10aGlzLmRhdGFbdF07ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdO24udGltZW91dCYmY2xlYXJUaW1lb3V0KG4udGltZW91dCksdGhpcy5vblJlbW92ZShuLnZhbHVlKX1yZXR1cm4gdGhpcy5kYXRhPXt9LHRoaXMub3JkZXI9W10sdGhpc30sbHQucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcyxpPXQud3JhcHBlZCgpLmtleTt2b2lkIDA9PT10aGlzLmRhdGFbaV0mJih0aGlzLmRhdGFbaV09W10pO3ZhciBhPXt2YWx1ZTplLHRpbWVvdXQ6dm9pZCAwfTtpZih2b2lkIDAhPT1yJiYoYS50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtuLnJlbW92ZSh0LGEpfSxyKSksdGhpcy5kYXRhW2ldLnB1c2goYSksdGhpcy5vcmRlci5wdXNoKGkpLHRoaXMub3JkZXIubGVuZ3RoPnRoaXMubWF4KXt2YXIgbz10aGlzLl9nZXRBbmRSZW1vdmVCeUtleSh0aGlzLm9yZGVyWzBdKTtvJiZ0aGlzLm9uUmVtb3ZlKG8pfXJldHVybiB0aGlzfSxsdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0LndyYXBwZWQoKS5rZXkgaW4gdGhpcy5kYXRhfSxsdC5wcm90b3R5cGUuZ2V0QW5kUmVtb3ZlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhcyh0KT90aGlzLl9nZXRBbmRSZW1vdmVCeUtleSh0LndyYXBwZWQoKS5rZXkpOm51bGx9LGx0LnByb3RvdHlwZS5fZ2V0QW5kUmVtb3ZlQnlLZXk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kYXRhW3RdLnNoaWZ0KCk7cmV0dXJuIGUudGltZW91dCYmY2xlYXJUaW1lb3V0KGUudGltZW91dCksMD09PXRoaXMuZGF0YVt0XS5sZW5ndGgmJmRlbGV0ZSB0aGlzLmRhdGFbdF0sdGhpcy5vcmRlci5zcGxpY2UodGhpcy5vcmRlci5pbmRleE9mKHQpLDEpLGUudmFsdWV9LGx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGFzKHQpP3RoaXMuZGF0YVt0LndyYXBwZWQoKS5rZXldWzBdLnZhbHVlOm51bGx9LGx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCxlKXtpZighdGhpcy5oYXModCkpcmV0dXJuIHRoaXM7dmFyIHI9dC53cmFwcGVkKCkua2V5LG49dm9pZCAwPT09ZT8wOnRoaXMuZGF0YVtyXS5pbmRleE9mKGUpLGk9dGhpcy5kYXRhW3JdW25dO3JldHVybiB0aGlzLmRhdGFbcl0uc3BsaWNlKG4sMSksaS50aW1lb3V0JiZjbGVhclRpbWVvdXQoaS50aW1lb3V0KSwwPT09dGhpcy5kYXRhW3JdLmxlbmd0aCYmZGVsZXRlIHRoaXMuZGF0YVtyXSx0aGlzLm9uUmVtb3ZlKGkudmFsdWUpLHRoaXMub3JkZXIuc3BsaWNlKHRoaXMub3JkZXIuaW5kZXhPZihyKSwxKSx0aGlzfSxsdC5wcm90b3R5cGUuc2V0TWF4U2l6ZT1mdW5jdGlvbih0KXtmb3IodGhpcy5tYXg9dDt0aGlzLm9yZGVyLmxlbmd0aD50aGlzLm1heDspe3ZhciBlPXRoaXMuX2dldEFuZFJlbW92ZUJ5S2V5KHRoaXMub3JkZXJbMF0pO2UmJnRoaXMub25SZW1vdmUoZSl9cmV0dXJuIHRoaXN9O3ZhciBjdD1mdW5jdGlvbih0LGUscil7dGhpcy5jb250ZXh0PXQ7dmFyIG49dC5nbDt0aGlzLmJ1ZmZlcj1uLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuZHluYW1pY0RyYXc9Qm9vbGVhbihyKSx0aGlzLnVuYmluZFZBTygpLHQuYmluZEVsZW1lbnRCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKSxuLmJ1ZmZlckRhdGEobi5FTEVNRU5UX0FSUkFZX0JVRkZFUixlLmFycmF5QnVmZmVyLHRoaXMuZHluYW1pY0RyYXc/bi5EWU5BTUlDX0RSQVc6bi5TVEFUSUNfRFJBVyksdGhpcy5keW5hbWljRHJhd3x8ZGVsZXRlIGUuYXJyYXlCdWZmZXJ9O2N0LnByb3RvdHlwZS51bmJpbmRWQU89ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQuZXh0VmVydGV4QXJyYXlPYmplY3QmJnRoaXMuY29udGV4dC5iaW5kVmVydGV4QXJyYXlPRVMuc2V0KG51bGwpfSxjdC5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe3RoaXMuY29udGV4dC5iaW5kRWxlbWVudEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpfSxjdC5wcm90b3R5cGUudXBkYXRlRGF0YT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy51bmJpbmRWQU8oKSx0aGlzLmJpbmQoKSxlLmJ1ZmZlclN1YkRhdGEoZS5FTEVNRU5UX0FSUkFZX0JVRkZFUiwwLHQuYXJyYXlCdWZmZXIpfSxjdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udGV4dC5nbDt0aGlzLmJ1ZmZlciYmKHQuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKSxkZWxldGUgdGhpcy5idWZmZXIpfTt2YXIgdXQ9e0ludDg6XCJCWVRFXCIsVWludDg6XCJVTlNJR05FRF9CWVRFXCIsSW50MTY6XCJTSE9SVFwiLFVpbnQxNjpcIlVOU0lHTkVEX1NIT1JUXCIsSW50MzI6XCJJTlRcIixVaW50MzI6XCJVTlNJR05FRF9JTlRcIixGbG9hdDMyOlwiRkxPQVRcIn0saHQ9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5hdHRyaWJ1dGVzPXIsdGhpcy5pdGVtU2l6ZT1lLmJ5dGVzUGVyRWxlbWVudCx0aGlzLmR5bmFtaWNEcmF3PW4sdGhpcy5jb250ZXh0PXQ7dmFyIGk9dC5nbDt0aGlzLmJ1ZmZlcj1pLmNyZWF0ZUJ1ZmZlcigpLHQuYmluZFZlcnRleEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpLGkuYnVmZmVyRGF0YShpLkFSUkFZX0JVRkZFUixlLmFycmF5QnVmZmVyLHRoaXMuZHluYW1pY0RyYXc/aS5EWU5BTUlDX0RSQVc6aS5TVEFUSUNfRFJBVyksdGhpcy5keW5hbWljRHJhd3x8ZGVsZXRlIGUuYXJyYXlCdWZmZXJ9O2h0LnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0LmJpbmRWZXJ0ZXhCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKX0saHQucHJvdG90eXBlLnVwZGF0ZURhdGE9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO3RoaXMuYmluZCgpLGUuYnVmZmVyU3ViRGF0YShlLkFSUkFZX0JVRkZFUiwwLHQuYXJyYXlCdWZmZXIpfSxodC5wcm90b3R5cGUuZW5hYmxlQXR0cmlidXRlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDtyKyspe3ZhciBuPXRoaXMuYXR0cmlidXRlc1tyXSxpPWUuYXR0cmlidXRlc1tuLm5hbWVdO3ZvaWQgMCE9PWkmJnQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSl9fSxodC5wcm90b3R5cGUuc2V0VmVydGV4QXR0cmliUG9pbnRlcnM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248dGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDtuKyspe3ZhciBpPXRoaXMuYXR0cmlidXRlc1tuXSxhPWUuYXR0cmlidXRlc1tpLm5hbWVdO3ZvaWQgMCE9PWEmJnQudmVydGV4QXR0cmliUG9pbnRlcihhLGkuY29tcG9uZW50cyx0W3V0W2kudHlwZV1dLCExLHRoaXMuaXRlbVNpemUsaS5vZmZzZXQrdGhpcy5pdGVtU2l6ZSoocnx8MCkpfX0saHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnRleHQuZ2w7dGhpcy5idWZmZXImJih0LmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlciksZGVsZXRlIHRoaXMuYnVmZmVyKX07dmFyIGZ0PWZ1bmN0aW9uKGUpe3RoaXMuY29udGV4dD1lLHRoaXMuY3VycmVudD10LmRlZmF1bHQkNi50cmFuc3BhcmVudH07ZnQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LGZ0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50O3Qucj09PWUuciYmdC5nPT09ZS5nJiZ0LmI9PT1lLmImJnQuYT09PWUuYXx8KHRoaXMuY29udGV4dC5nbC5jbGVhckNvbG9yKHQucix0LmcsdC5iLHQuYSksdGhpcy5jdXJyZW50PXQpfTt2YXIgcHQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PTF9O3B0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxwdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudCE9PXQmJih0aGlzLmNvbnRleHQuZ2wuY2xlYXJEZXB0aCh0KSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBkdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9MH07ZHQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LGR0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50IT09dCYmKHRoaXMuY29udGV4dC5nbC5jbGVhclN0ZW5jaWwodCksdGhpcy5jdXJyZW50PXQpfTt2YXIgZ3Q9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PVshMCwhMCwhMCwhMF19O2d0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxndC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDt0WzBdPT09ZVswXSYmdFsxXT09PWVbMV0mJnRbMl09PT1lWzJdJiZ0WzNdPT09ZVszXXx8KHRoaXMuY29udGV4dC5nbC5jb2xvck1hc2sodFswXSx0WzFdLHRbMl0sdFszXSksdGhpcy5jdXJyZW50PXQpfTt2YXIgdnQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PSEwfTt2dC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sdnQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQhPT10JiYodGhpcy5jb250ZXh0LmdsLmRlcHRoTWFzayh0KSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBtdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9MjU1fTttdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sbXQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQhPT10JiYodGhpcy5jb250ZXh0LmdsLnN0ZW5jaWxNYXNrKHQpLHRoaXMuY3VycmVudD10KX07dmFyIHl0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD17ZnVuYzp0LmdsLkFMV0FZUyxyZWY6MCxtYXNrOjI1NX19O3l0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSx5dC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDt0LmZ1bmM9PT1lLmZ1bmMmJnQucmVmPT09ZS5yZWYmJnQubWFzaz09PWUubWFza3x8KHRoaXMuY29udGV4dC5nbC5zdGVuY2lsRnVuYyh0LmZ1bmMsdC5yZWYsdC5tYXNrKSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciB4dD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dDt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5jdXJyZW50PVtlLktFRVAsZS5LRUVQLGUuS0VFUF19O3h0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSx4dC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDt0WzBdPT09ZVswXSYmdFsxXT09PWVbMV0mJnRbMl09PT1lWzJdfHwodGhpcy5jb250ZXh0LmdsLnN0ZW5jaWxPcCh0WzBdLHRbMV0sdFsyXSksdGhpcy5jdXJyZW50PXQpfTt2YXIgYnQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PSExfTtidC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sYnQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dD9lLmVuYWJsZShlLlNURU5DSUxfVEVTVCk6ZS5kaXNhYmxlKGUuU1RFTkNJTF9URVNUKSx0aGlzLmN1cnJlbnQ9dH19O3ZhciBfdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9WzAsMV19O190LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxfdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDt0WzBdPT09ZVswXSYmdFsxXT09PWVbMV18fCh0aGlzLmNvbnRleHQuZ2wuZGVwdGhSYW5nZSh0WzBdLHRbMV0pLHRoaXMuY3VycmVudD10KX07dmFyIHd0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD0hMX07d3QucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LHd0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5jdXJyZW50IT09dCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO3Q/ZS5lbmFibGUoZS5ERVBUSF9URVNUKTplLmRpc2FibGUoZS5ERVBUSF9URVNUKSx0aGlzLmN1cnJlbnQ9dH19O3ZhciBrdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9dC5nbC5MRVNTfTtrdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sa3QucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQhPT10JiYodGhpcy5jb250ZXh0LmdsLmRlcHRoRnVuYyh0KSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBBdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9ITF9O0F0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxBdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuY3VycmVudCE9PXQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDt0P2UuZW5hYmxlKGUuQkxFTkQpOmUuZGlzYWJsZShlLkJMRU5EKSx0aGlzLmN1cnJlbnQ9dH19O3ZhciBUdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dDt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5jdXJyZW50PVtlLk9ORSxlLlpFUk9dfTtUdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sVHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7dFswXT09PWVbMF0mJnRbMV09PT1lWzFdfHwodGhpcy5jb250ZXh0LmdsLmJsZW5kRnVuYyh0WzBdLHRbMV0pLHRoaXMuY3VycmVudD10KX07dmFyIE10PWZ1bmN0aW9uKGUpe3RoaXMuY29udGV4dD1lLHRoaXMuY3VycmVudD10LmRlZmF1bHQkNi50cmFuc3BhcmVudH07TXQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LE10LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50O3Qucj09PWUuciYmdC5nPT09ZS5nJiZ0LmI9PT1lLmImJnQuYT09PWUuYXx8KHRoaXMuY29udGV4dC5nbC5ibGVuZENvbG9yKHQucix0LmcsdC5iLHQuYSksdGhpcy5jdXJyZW50PXQpfTt2YXIgU3Q9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PW51bGx9O1N0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxTdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudCE9PXQmJih0aGlzLmNvbnRleHQuZ2wudXNlUHJvZ3JhbSh0KSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBFdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9MX07RXQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LEV0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5jb250ZXh0LmxpbmVXaWR0aFJhbmdlLG49dC5jbGFtcChlLHJbMF0sclsxXSk7dGhpcy5jdXJyZW50IT09biYmKHRoaXMuY29udGV4dC5nbC5saW5lV2lkdGgobiksdGhpcy5jdXJyZW50PWUpfTt2YXIgQ3Q9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PXQuZ2wuVEVYVFVSRTB9O0N0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxDdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudCE9PXQmJih0aGlzLmNvbnRleHQuZ2wuYWN0aXZlVGV4dHVyZSh0KSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBMdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dDt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5jdXJyZW50PVswLDAsZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XX07THQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LEx0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50O3RbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl0mJnRbM109PT1lWzNdfHwodGhpcy5jb250ZXh0LmdsLnZpZXdwb3J0KHRbMF0sdFsxXSx0WzJdLHRbM10pLHRoaXMuY3VycmVudD10KX07dmFyIHp0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1udWxsfTt6dC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0senQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7ZS5iaW5kRnJhbWVidWZmZXIoZS5GUkFNRUJVRkZFUix0KSx0aGlzLmN1cnJlbnQ9dH19O3ZhciBPdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9bnVsbH07T3QucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LE90LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5jdXJyZW50IT09dCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO2UuYmluZFJlbmRlcmJ1ZmZlcihlLlJFTkRFUkJVRkZFUix0KSx0aGlzLmN1cnJlbnQ9dH19O3ZhciBJdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9bnVsbH07SXQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LEl0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5jdXJyZW50IT09dCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO2UuYmluZFRleHR1cmUoZS5URVhUVVJFXzJELHQpLHRoaXMuY3VycmVudD10fX07dmFyIER0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1udWxsfTtEdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sRHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7ZS5iaW5kQnVmZmVyKGUuQVJSQVlfQlVGRkVSLHQpLHRoaXMuY3VycmVudD10fX07dmFyIFB0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1udWxsfTtQdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sUHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7ZS5iaW5kQnVmZmVyKGUuRUxFTUVOVF9BUlJBWV9CVUZGRVIsdCksdGhpcy5jdXJyZW50PXR9O3ZhciBSdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9bnVsbH07UnQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LFJ0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50IT09dCYmdGhpcy5jb250ZXh0LmV4dFZlcnRleEFycmF5T2JqZWN0JiYodGhpcy5jb250ZXh0LmV4dFZlcnRleEFycmF5T2JqZWN0LmJpbmRWZXJ0ZXhBcnJheU9FUyh0KSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBGdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9NH07RnQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LEZ0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5jdXJyZW50IT09dCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO2UucGl4ZWxTdG9yZWkoZS5VTlBBQ0tfQUxJR05NRU5ULHQpLHRoaXMuY3VycmVudD10fX07dmFyIEJ0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD0hMX07QnQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LEJ0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5jdXJyZW50IT09dCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO2UucGl4ZWxTdG9yZWkoZS5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsdCksdGhpcy5jdXJyZW50PXR9fTt2YXIgTnQ9ZnVuY3Rpb24odCxlKXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9bnVsbCx0aGlzLnBhcmVudD1lfTtOdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH07dmFyIGp0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXt0LmNhbGwodGhpcyxlLHIpLHRoaXMuZGlydHk9ITF9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmRpcnR5fHx0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5jb250ZXh0LmJpbmRGcmFtZWJ1ZmZlci5zZXQodGhpcy5wYXJlbnQpLGUuZnJhbWVidWZmZXJUZXh0dXJlMkQoZS5GUkFNRUJVRkZFUixlLkNPTE9SX0FUVEFDSE1FTlQwLGUuVEVYVFVSRV8yRCx0LDApLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlLnByb3RvdHlwZS5zZXREaXJ0eT1mdW5jdGlvbigpe3RoaXMuZGlydHk9ITB9LGV9KE50KSxWdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5jb250ZXh0LmJpbmRGcmFtZWJ1ZmZlci5zZXQodGhpcy5wYXJlbnQpLGUuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoZS5GUkFNRUJVRkZFUixlLkRFUFRIX0FUVEFDSE1FTlQsZS5SRU5ERVJCVUZGRVIsdCksdGhpcy5jdXJyZW50PXR9fSxlfShOdCksVXQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuY29udGV4dD10LHRoaXMud2lkdGg9ZSx0aGlzLmhlaWdodD1yO3ZhciBuPXQuZ2wsaT10aGlzLmZyYW1lYnVmZmVyPW4uY3JlYXRlRnJhbWVidWZmZXIoKTt0aGlzLmNvbG9yQXR0YWNobWVudD1uZXcganQodCxpKSx0aGlzLmRlcHRoQXR0YWNobWVudD1uZXcgVnQodCxpKX07VXQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnRleHQuZ2wsZT10aGlzLmNvbG9yQXR0YWNobWVudC5nZXQoKTtlJiZ0LmRlbGV0ZVRleHR1cmUoZSk7dmFyIHI9dGhpcy5kZXB0aEF0dGFjaG1lbnQuZ2V0KCk7ciYmdC5kZWxldGVSZW5kZXJidWZmZXIociksdC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKX07dmFyIHF0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmZ1bmM9dCx0aGlzLm1hc2s9ZSx0aGlzLnJhbmdlPXJ9O3F0LlJlYWRPbmx5PSExLHF0LlJlYWRXcml0ZT0hMCxxdC5kaXNhYmxlZD1uZXcgcXQoNTE5LHF0LlJlYWRPbmx5LFswLDFdKTt2YXIgSHQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMudGVzdD10LHRoaXMucmVmPWUsdGhpcy5tYXNrPXIsdGhpcy5mYWlsPW4sdGhpcy5kZXB0aEZhaWw9aSx0aGlzLnBhc3M9YX07SHQuZGlzYWJsZWQ9bmV3IEh0KHtmdW5jOjUxOSxtYXNrOjB9LDAsMCw3NjgwLDc2ODAsNzY4MCk7dmFyIEd0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmJsZW5kRnVuY3Rpb249dCx0aGlzLmJsZW5kQ29sb3I9ZSx0aGlzLm1hc2s9cn07R3QuZGlzYWJsZWQ9bmV3IEd0KEd0LlJlcGxhY2U9WzEsMF0sdC5kZWZhdWx0JDYudHJhbnNwYXJlbnQsWyExLCExLCExLCExXSksR3QudW5ibGVuZGVkPW5ldyBHdChHdC5SZXBsYWNlLHQuZGVmYXVsdCQ2LnRyYW5zcGFyZW50LFshMCwhMCwhMCwhMF0pLEd0LmFscGhhQmxlbmRlZD1uZXcgR3QoWzEsNzcxXSx0LmRlZmF1bHQkNi50cmFuc3BhcmVudCxbITAsITAsITAsITBdKTt2YXIgWXQ9ZnVuY3Rpb24odCl7dGhpcy5nbD10LHRoaXMuZXh0VmVydGV4QXJyYXlPYmplY3Q9dGhpcy5nbC5nZXRFeHRlbnNpb24oXCJPRVNfdmVydGV4X2FycmF5X29iamVjdFwiKSx0aGlzLmxpbmVXaWR0aFJhbmdlPXQuZ2V0UGFyYW1ldGVyKHQuQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFKSx0aGlzLmNsZWFyQ29sb3I9bmV3IGZ0KHRoaXMpLHRoaXMuY2xlYXJEZXB0aD1uZXcgcHQodGhpcyksdGhpcy5jbGVhclN0ZW5jaWw9bmV3IGR0KHRoaXMpLHRoaXMuY29sb3JNYXNrPW5ldyBndCh0aGlzKSx0aGlzLmRlcHRoTWFzaz1uZXcgdnQodGhpcyksdGhpcy5zdGVuY2lsTWFzaz1uZXcgbXQodGhpcyksdGhpcy5zdGVuY2lsRnVuYz1uZXcgeXQodGhpcyksdGhpcy5zdGVuY2lsT3A9bmV3IHh0KHRoaXMpLHRoaXMuc3RlbmNpbFRlc3Q9bmV3IGJ0KHRoaXMpLHRoaXMuZGVwdGhSYW5nZT1uZXcgX3QodGhpcyksdGhpcy5kZXB0aFRlc3Q9bmV3IHd0KHRoaXMpLHRoaXMuZGVwdGhGdW5jPW5ldyBrdCh0aGlzKSx0aGlzLmJsZW5kPW5ldyBBdCh0aGlzKSx0aGlzLmJsZW5kRnVuYz1uZXcgVHQodGhpcyksdGhpcy5ibGVuZENvbG9yPW5ldyBNdCh0aGlzKSx0aGlzLnByb2dyYW09bmV3IFN0KHRoaXMpLHRoaXMubGluZVdpZHRoPW5ldyBFdCh0aGlzKSx0aGlzLmFjdGl2ZVRleHR1cmU9bmV3IEN0KHRoaXMpLHRoaXMudmlld3BvcnQ9bmV3IEx0KHRoaXMpLHRoaXMuYmluZEZyYW1lYnVmZmVyPW5ldyB6dCh0aGlzKSx0aGlzLmJpbmRSZW5kZXJidWZmZXI9bmV3IE90KHRoaXMpLHRoaXMuYmluZFRleHR1cmU9bmV3IEl0KHRoaXMpLHRoaXMuYmluZFZlcnRleEJ1ZmZlcj1uZXcgRHQodGhpcyksdGhpcy5iaW5kRWxlbWVudEJ1ZmZlcj1uZXcgUHQodGhpcyksdGhpcy5iaW5kVmVydGV4QXJyYXlPRVM9dGhpcy5leHRWZXJ0ZXhBcnJheU9iamVjdCYmbmV3IFJ0KHRoaXMpLHRoaXMucGl4ZWxTdG9yZVVucGFjaz1uZXcgRnQodGhpcyksdGhpcy5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYT1uZXcgQnQodGhpcyksdGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM9dC5nZXRFeHRlbnNpb24oXCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWNcIil8fHQuZ2V0RXh0ZW5zaW9uKFwiTU9aX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpY1wiKXx8dC5nZXRFeHRlbnNpb24oXCJXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljXCIpLHRoaXMuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljJiYodGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNNYXg9dC5nZXRQYXJhbWV0ZXIodGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKSksdGhpcy5leHRUZXh0dXJlSGFsZkZsb2F0PXQuZ2V0RXh0ZW5zaW9uKFwiT0VTX3RleHR1cmVfaGFsZl9mbG9hdFwiKSx0aGlzLmV4dFRleHR1cmVIYWxmRmxvYXQmJnQuZ2V0RXh0ZW5zaW9uKFwiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXJcIil9O1l0LnByb3RvdHlwZS5jcmVhdGVJbmRleEJ1ZmZlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgY3QodGhpcyx0LGUpfSxZdC5wcm90b3R5cGUuY3JlYXRlVmVydGV4QnVmZmVyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbmV3IGh0KHRoaXMsdCxlLHIpfSxZdC5wcm90b3R5cGUuY3JlYXRlUmVuZGVyYnVmZmVyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmdsLGk9bi5jcmVhdGVSZW5kZXJidWZmZXIoKTtyZXR1cm4gdGhpcy5iaW5kUmVuZGVyYnVmZmVyLnNldChpKSxuLnJlbmRlcmJ1ZmZlclN0b3JhZ2Uobi5SRU5ERVJCVUZGRVIsdCxlLHIpLHRoaXMuYmluZFJlbmRlcmJ1ZmZlci5zZXQobnVsbCksaX0sWXQucHJvdG90eXBlLmNyZWF0ZUZyYW1lYnVmZmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBVdCh0aGlzLHQsZSl9LFl0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbih0KXt2YXIgZT10LmNvbG9yLHI9dC5kZXB0aCxuPXRoaXMuZ2wsaT0wO2UmJihpfD1uLkNPTE9SX0JVRkZFUl9CSVQsdGhpcy5jbGVhckNvbG9yLnNldChlKSx0aGlzLmNvbG9yTWFzay5zZXQoWyEwLCEwLCEwLCEwXSkpLHZvaWQgMCE9PXImJihpfD1uLkRFUFRIX0JVRkZFUl9CSVQsdGhpcy5jbGVhckRlcHRoLnNldChyKSx0aGlzLmRlcHRoTWFzay5zZXQoITApKSxuLmNsZWFyKGkpfSxZdC5wcm90b3R5cGUuc2V0RGVwdGhNb2RlPWZ1bmN0aW9uKHQpe3QuZnVuYyE9PXRoaXMuZ2wuQUxXQVlTfHx0Lm1hc2s/KHRoaXMuZGVwdGhUZXN0LnNldCghMCksdGhpcy5kZXB0aEZ1bmMuc2V0KHQuZnVuYyksdGhpcy5kZXB0aE1hc2suc2V0KHQubWFzayksdGhpcy5kZXB0aFJhbmdlLnNldCh0LnJhbmdlKSk6dGhpcy5kZXB0aFRlc3Quc2V0KCExKX0sWXQucHJvdG90eXBlLnNldFN0ZW5jaWxNb2RlPWZ1bmN0aW9uKHQpe3QudGVzdC5mdW5jIT09dGhpcy5nbC5BTFdBWVN8fHQubWFzaz8odGhpcy5zdGVuY2lsVGVzdC5zZXQoITApLHRoaXMuc3RlbmNpbE1hc2suc2V0KHQubWFzayksdGhpcy5zdGVuY2lsT3Auc2V0KFt0LmZhaWwsdC5kZXB0aEZhaWwsdC5wYXNzXSksdGhpcy5zdGVuY2lsRnVuYy5zZXQoe2Z1bmM6dC50ZXN0LmZ1bmMscmVmOnQucmVmLG1hc2s6dC50ZXN0Lm1hc2t9KSk6dGhpcy5zdGVuY2lsVGVzdC5zZXQoITEpfSxZdC5wcm90b3R5cGUuc2V0Q29sb3JNb2RlPWZ1bmN0aW9uKGUpe3QuZGVmYXVsdCQxMChlLmJsZW5kRnVuY3Rpb24sR3QuUmVwbGFjZSk/dGhpcy5ibGVuZC5zZXQoITEpOih0aGlzLmJsZW5kLnNldCghMCksdGhpcy5ibGVuZEZ1bmMuc2V0KGUuYmxlbmRGdW5jdGlvbiksdGhpcy5ibGVuZENvbG9yLnNldChlLmJsZW5kQ29sb3IpKSx0aGlzLmNvbG9yTWFzay5zZXQoZS5tYXNrKX07dmFyIFd0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCxyLG4pe3ZhciBpPXRoaXM7ZS5jYWxsKHRoaXMpLHRoaXMuaWQ9dCx0aGlzLmRpc3BhdGNoZXI9bix0aGlzLm9uKFwiZGF0YVwiLGZ1bmN0aW9uKHQpe1wic291cmNlXCI9PT10LmRhdGFUeXBlJiZcIm1ldGFkYXRhXCI9PT10LnNvdXJjZURhdGFUeXBlJiYoaS5fc291cmNlTG9hZGVkPSEwKSxpLl9zb3VyY2VMb2FkZWQmJiFpLl9wYXVzZWQmJlwic291cmNlXCI9PT10LmRhdGFUeXBlJiZcImNvbnRlbnRcIj09PXQuc291cmNlRGF0YVR5cGUmJihpLnJlbG9hZCgpLGkudHJhbnNmb3JtJiZpLnVwZGF0ZShpLnRyYW5zZm9ybSkpfSksdGhpcy5vbihcImVycm9yXCIsZnVuY3Rpb24oKXtpLl9zb3VyY2VFcnJvcmVkPSEwfSksdGhpcy5fc291cmNlPWl0KHQscixuLHRoaXMpLHRoaXMuX3RpbGVzPXt9LHRoaXMuX2NhY2hlPW5ldyBsdCgwLHRoaXMuX3VubG9hZFRpbGUuYmluZCh0aGlzKSksdGhpcy5fdGltZXJzPXt9LHRoaXMuX2NhY2hlVGltZXJzPXt9LHRoaXMuX21heFRpbGVDYWNoZVNpemU9bnVsbCx0aGlzLl9pc0lkUmVuZGVyYWJsZT10aGlzLl9pc0lkUmVuZGVyYWJsZS5iaW5kKHRoaXMpLHRoaXMuX2NvdmVyZWRUaWxlcz17fX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLl9tYXhUaWxlQ2FjaGVTaXplPXQ/dC5fbWF4VGlsZUNhY2hlU2l6ZTpudWxsLHRoaXMuX3NvdXJjZSYmdGhpcy5fc291cmNlLm9uQWRkJiZ0aGlzLl9zb3VyY2Uub25BZGQodCl9LHIucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKHQpe3RoaXMuX3NvdXJjZSYmdGhpcy5fc291cmNlLm9uUmVtb3ZlJiZ0aGlzLl9zb3VyY2Uub25SZW1vdmUodCl9LHIucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe2lmKHRoaXMuX3NvdXJjZUVycm9yZWQpcmV0dXJuITA7aWYoIXRoaXMuX3NvdXJjZUxvYWRlZClyZXR1cm4hMTtmb3IodmFyIHQgaW4gdGhpcy5fdGlsZXMpe3ZhciBlPXRoaXMuX3RpbGVzW3RdO2lmKFwibG9hZGVkXCIhPT1lLnN0YXRlJiZcImVycm9yZWRcIiE9PWUuc3RhdGUpcmV0dXJuITF9cmV0dXJuITB9LHIucHJvdG90eXBlLmdldFNvdXJjZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3VyY2V9LHIucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7dGhpcy5fcGF1c2VkPSEwfSxyLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXtpZih0aGlzLl9wYXVzZWQpe3ZhciB0PXRoaXMuX3Nob3VsZFJlbG9hZE9uUmVzdW1lO3RoaXMuX3BhdXNlZD0hMSx0aGlzLl9zaG91bGRSZWxvYWRPblJlc3VtZT0hMSx0JiZ0aGlzLnJlbG9hZCgpLHRoaXMudHJhbnNmb3JtJiZ0aGlzLnVwZGF0ZSh0aGlzLnRyYW5zZm9ybSl9fSxyLnByb3RvdHlwZS5fbG9hZFRpbGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fc291cmNlLmxvYWRUaWxlKHQsZSl9LHIucHJvdG90eXBlLl91bmxvYWRUaWxlPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX3NvdXJjZS51bmxvYWRUaWxlKXJldHVybiB0aGlzLl9zb3VyY2UudW5sb2FkVGlsZSh0LGZ1bmN0aW9uKCl7fSl9LHIucHJvdG90eXBlLl9hYm9ydFRpbGU9ZnVuY3Rpb24odCl7aWYodGhpcy5fc291cmNlLmFib3J0VGlsZSlyZXR1cm4gdGhpcy5fc291cmNlLmFib3J0VGlsZSh0LGZ1bmN0aW9uKCl7fSl9LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3VyY2Uuc2VyaWFsaXplKCl9LHIucHJvdG90eXBlLnByZXBhcmU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuX3NvdXJjZS5wcmVwYXJlJiZ0aGlzLl9zb3VyY2UucHJlcGFyZSgpLHRoaXMuX3RpbGVzKXRoaXMuX3RpbGVzW2VdLnVwbG9hZCh0KX0sci5wcm90b3R5cGUuZ2V0SWRzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fdGlsZXMpLm1hcChOdW1iZXIpLnNvcnQoZnVuY3Rpb24ocixuKXt2YXIgaT1lLl90aWxlc1tyXS50aWxlSUQsYT1lLl90aWxlc1tuXS50aWxlSUQsbz1uZXcgdC5kZWZhdWx0JDEoaS5jYW5vbmljYWwueCxpLmNhbm9uaWNhbC55KS5yb3RhdGUoZS50cmFuc2Zvcm0uYW5nbGUpLHM9bmV3IHQuZGVmYXVsdCQxKGEuY2Fub25pY2FsLngsYS5jYW5vbmljYWwueSkucm90YXRlKGUudHJhbnNmb3JtLmFuZ2xlKTtyZXR1cm4gaS5vdmVyc2NhbGVkWi1hLm92ZXJzY2FsZWRafHxzLnktby55fHxzLngtby54fSl9LHIucHJvdG90eXBlLmdldFJlbmRlcmFibGVJZHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRJZHMoKS5maWx0ZXIodGhpcy5faXNJZFJlbmRlcmFibGUpfSxyLnByb3RvdHlwZS5oYXNSZW5kZXJhYmxlUGFyZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZmluZExvYWRlZFBhcmVudCh0LDAse30pO3JldHVybiEhZSYmdGhpcy5faXNJZFJlbmRlcmFibGUoZS50aWxlSUQua2V5KX0sci5wcm90b3R5cGUuX2lzSWRSZW5kZXJhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl90aWxlc1t0XSYmdGhpcy5fdGlsZXNbdF0uaGFzRGF0YSgpJiYhdGhpcy5fY292ZXJlZFRpbGVzW3RdfSxyLnByb3RvdHlwZS5yZWxvYWQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9wYXVzZWQpdGhpcy5fc2hvdWxkUmVsb2FkT25SZXN1bWU9ITA7ZWxzZSBmb3IodmFyIHQgaW4gdGhpcy5fY2FjaGUucmVzZXQoKSx0aGlzLl90aWxlcyl0aGlzLl9yZWxvYWRUaWxlKHQsXCJyZWxvYWRpbmdcIil9LHIucHJvdG90eXBlLl9yZWxvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdGlsZXNbdF07ciYmKFwibG9hZGluZ1wiIT09ci5zdGF0ZSYmKHIuc3RhdGU9ZSksdGhpcy5fbG9hZFRpbGUocix0aGlzLl90aWxlTG9hZGVkLmJpbmQodGhpcyxyLHQsZSkpKX0sci5wcm90b3R5cGUuX3RpbGVMb2FkZWQ9ZnVuY3Rpb24oZSxyLG4saSl7aWYoaSlyZXR1cm4gZS5zdGF0ZT1cImVycm9yZWRcIix2b2lkKDQwNCE9PWkuc3RhdHVzP3RoaXMuX3NvdXJjZS5maXJlKG5ldyB0LkVycm9yRXZlbnQoaSx7dGlsZTplfSkpOnRoaXMudXBkYXRlKHRoaXMudHJhbnNmb3JtKSk7ZS50aW1lQWRkZWQ9YS5ub3coKSxcImV4cGlyZWRcIj09PW4mJihlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uPSEwKSx0aGlzLl9zZXRUaWxlUmVsb2FkVGltZXIocixlKSxcInJhc3Rlci1kZW1cIj09PXRoaXMuZ2V0U291cmNlKCkudHlwZSYmZS5kZW0mJnRoaXMuX2JhY2tmaWxsREVNKGUpLHRoaXMuX3NvdXJjZS5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YVwiLHtkYXRhVHlwZTpcInNvdXJjZVwiLHRpbGU6ZSxjb29yZDplLnRpbGVJRH0pKSx0aGlzLm1hcCYmKHRoaXMubWFwLnBhaW50ZXIudGlsZUV4dGVudFZBTy52YW89bnVsbCl9LHIucHJvdG90eXBlLl9iYWNrZmlsbERFTT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5nZXRSZW5kZXJhYmxlSWRzKCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO2lmKHQubmVpZ2hib3JpbmdUaWxlcyYmdC5uZWlnaGJvcmluZ1RpbGVzW25dKXt2YXIgaT10aGlzLmdldFRpbGVCeUlEKG4pO2EodCxpKSxhKGksdCl9fWZ1bmN0aW9uIGEodCxlKXt0Lm5lZWRzSGlsbHNoYWRlUHJlcGFyZT0hMDt2YXIgcj1lLnRpbGVJRC5jYW5vbmljYWwueC10LnRpbGVJRC5jYW5vbmljYWwueCxuPWUudGlsZUlELmNhbm9uaWNhbC55LXQudGlsZUlELmNhbm9uaWNhbC55LGk9TWF0aC5wb3coMix0LnRpbGVJRC5jYW5vbmljYWwueiksYT1lLnRpbGVJRC5rZXk7MD09PXImJjA9PT1ufHxNYXRoLmFicyhuKT4xfHwoTWF0aC5hYnMocik+MSYmKDE9PT1NYXRoLmFicyhyK2kpP3IrPWk6MT09PU1hdGguYWJzKHItaSkmJihyLT1pKSksZS5kZW0mJnQuZGVtJiYodC5kZW0uYmFja2ZpbGxCb3JkZXIoZS5kZW0scixuKSx0Lm5laWdoYm9yaW5nVGlsZXMmJnQubmVpZ2hib3JpbmdUaWxlc1thXSYmKHQubmVpZ2hib3JpbmdUaWxlc1thXS5iYWNrZmlsbGVkPSEwKSkpfX0sci5wcm90b3R5cGUuZ2V0VGlsZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXRUaWxlQnlJRCh0LmtleSl9LHIucHJvdG90eXBlLmdldFRpbGVCeUlEPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl90aWxlc1t0XX0sci5wcm90b3R5cGUuZ2V0Wm9vbT1mdW5jdGlvbih0KXtyZXR1cm4gdC56b29tK3Quc2NhbGVab29tKHQudGlsZVNpemUvdGhpcy5fc291cmNlLnRpbGVTaXplKX0sci5wcm90b3R5cGUuX2ZpbmRMb2FkZWRDaGlsZHJlbj1mdW5jdGlvbih0LGUscil7dmFyIG49ITE7Zm9yKHZhciBpIGluIHRoaXMuX3RpbGVzKXt2YXIgYT10aGlzLl90aWxlc1tpXTtpZighKHJbaV18fCFhLmhhc0RhdGEoKXx8YS50aWxlSUQub3ZlcnNjYWxlZFo8PXQub3ZlcnNjYWxlZFp8fGEudGlsZUlELm92ZXJzY2FsZWRaPmUpKXt2YXIgbz1NYXRoLnBvdygyLGEudGlsZUlELmNhbm9uaWNhbC56LXQuY2Fub25pY2FsLnopO2lmKE1hdGguZmxvb3IoYS50aWxlSUQuY2Fub25pY2FsLngvbyk9PT10LmNhbm9uaWNhbC54JiZNYXRoLmZsb29yKGEudGlsZUlELmNhbm9uaWNhbC55L28pPT09dC5jYW5vbmljYWwueSlmb3IocltpXT1hLnRpbGVJRCxuPSEwO2EmJmEudGlsZUlELm92ZXJzY2FsZWRaLTE+dC5vdmVyc2NhbGVkWjspe3ZhciBzPWEudGlsZUlELnNjYWxlZFRvKGEudGlsZUlELm92ZXJzY2FsZWRaLTEpO2lmKCFzKWJyZWFrOyhhPXRoaXMuX3RpbGVzW3Mua2V5XSkmJmEuaGFzRGF0YSgpJiYoZGVsZXRlIHJbaV0scltzLmtleV09cyl9fX1yZXR1cm4gbn0sci5wcm90b3R5cGUuZmluZExvYWRlZFBhcmVudD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQub3ZlcnNjYWxlZFotMTtuPj1lO24tLSl7dmFyIGk9dC5zY2FsZWRUbyhuKTtpZighaSlyZXR1cm47dmFyIGE9U3RyaW5nKGkua2V5KSxvPXRoaXMuX3RpbGVzW2FdO2lmKG8mJm8uaGFzRGF0YSgpKXJldHVybiByW2FdPWksbztpZih0aGlzLl9jYWNoZS5oYXMoaSkpcmV0dXJuIHJbYV09aSx0aGlzLl9jYWNoZS5nZXQoaSl9fSxyLnByb3RvdHlwZS51cGRhdGVDYWNoZVNpemU9ZnVuY3Rpb24odCl7dmFyIGU9KE1hdGguY2VpbCh0LndpZHRoL3RoaXMuX3NvdXJjZS50aWxlU2l6ZSkrMSkqKE1hdGguY2VpbCh0LmhlaWdodC90aGlzLl9zb3VyY2UudGlsZVNpemUpKzEpLHI9TWF0aC5mbG9vcig1KmUpLG49XCJudW1iZXJcIj09dHlwZW9mIHRoaXMuX21heFRpbGVDYWNoZVNpemU/TWF0aC5taW4odGhpcy5fbWF4VGlsZUNhY2hlU2l6ZSxyKTpyO3RoaXMuX2NhY2hlLnNldE1heFNpemUobil9LHIucHJvdG90eXBlLmhhbmRsZVdyYXBKdW1wPWZ1bmN0aW9uKHQpe3ZhciBlPSh0LSh2b2lkIDA9PT10aGlzLl9wcmV2TG5nP3Q6dGhpcy5fcHJldkxuZykpLzM2MCxyPU1hdGgucm91bmQoZSk7aWYodGhpcy5fcHJldkxuZz10LHIpe3ZhciBuPXt9O2Zvcih2YXIgaSBpbiB0aGlzLl90aWxlcyl7dmFyIGE9dGhpcy5fdGlsZXNbaV07YS50aWxlSUQ9YS50aWxlSUQudW53cmFwVG8oYS50aWxlSUQud3JhcCtyKSxuW2EudGlsZUlELmtleV09YX1mb3IodmFyIG8gaW4gdGhpcy5fdGlsZXM9bix0aGlzLl90aW1lcnMpY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyc1tvXSksZGVsZXRlIHRoaXMuX3RpbWVyc1tvXTtmb3IodmFyIHMgaW4gdGhpcy5fdGlsZXMpe3ZhciBsPXRoaXMuX3RpbGVzW3NdO3RoaXMuX3NldFRpbGVSZWxvYWRUaW1lcihzLGwpfX19LHIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlKXt2YXIgbj10aGlzO2lmKHRoaXMudHJhbnNmb3JtPWUsdGhpcy5fc291cmNlTG9hZGVkJiYhdGhpcy5fcGF1c2VkKXt2YXIgaTt0aGlzLnVwZGF0ZUNhY2hlU2l6ZShlKSx0aGlzLmhhbmRsZVdyYXBKdW1wKHRoaXMudHJhbnNmb3JtLmNlbnRlci5sbmcpLHRoaXMuX2NvdmVyZWRUaWxlcz17fSx0aGlzLnVzZWQ/dGhpcy5fc291cmNlLnRpbGVJRD9pPWUuZ2V0VmlzaWJsZVVud3JhcHBlZENvb3JkaW5hdGVzKHRoaXMuX3NvdXJjZS50aWxlSUQpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLmNhbm9uaWNhbC56LGUud3JhcCxlLmNhbm9uaWNhbC56LGUuY2Fub25pY2FsLngsZS5jYW5vbmljYWwueSl9KTooaT1lLmNvdmVyaW5nVGlsZXMoe3RpbGVTaXplOnRoaXMuX3NvdXJjZS50aWxlU2l6ZSxtaW56b29tOnRoaXMuX3NvdXJjZS5taW56b29tLG1heHpvb206dGhpcy5fc291cmNlLm1heHpvb20scm91bmRab29tOnRoaXMuX3NvdXJjZS5yb3VuZFpvb20scmVwYXJzZU92ZXJzY2FsZWQ6dGhpcy5fc291cmNlLnJlcGFyc2VPdmVyc2NhbGVkfSksdGhpcy5fc291cmNlLmhhc1RpbGUmJihpPWkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9zb3VyY2UuaGFzVGlsZSh0KX0pKSk6aT1bXTt2YXIgbyxzPSh0aGlzLl9zb3VyY2Uucm91bmRab29tP01hdGgucm91bmQ6TWF0aC5mbG9vcikodGhpcy5nZXRab29tKGUpKSxsPU1hdGgubWF4KHMtci5tYXhPdmVyem9vbWluZyx0aGlzLl9zb3VyY2UubWluem9vbSksYz1NYXRoLm1heChzK3IubWF4VW5kZXJ6b29taW5nLHRoaXMuX3NvdXJjZS5taW56b29tKSx1PXRoaXMuX3VwZGF0ZVJldGFpbmVkVGlsZXMoaSxzKSxoPXt9O2lmKFp0KHRoaXMuX3NvdXJjZS50eXBlKSlmb3IodmFyIGY9T2JqZWN0LmtleXModSkscD0wO3A8Zi5sZW5ndGg7cCsrKXt2YXIgZD1mW3BdLGc9dVtkXSx2PW4uX3RpbGVzW2RdO2lmKHYmJih2b2lkIDA9PT12LmZhZGVFbmRUaW1lfHx2LmZhZGVFbmRUaW1lPj1hLm5vdygpKSl7bi5fZmluZExvYWRlZENoaWxkcmVuKGcsYyx1KSYmKHVbZF09Zyk7dmFyIG09bi5maW5kTG9hZGVkUGFyZW50KGcsbCxoKTttJiZuLl9hZGRUaWxlKG0udGlsZUlEKX19Zm9yKG8gaW4gaCl1W29dfHwobi5fY292ZXJlZFRpbGVzW29dPSEwKTtmb3IobyBpbiBoKXVbb109aFtvXTtmb3IodmFyIHk9dC5rZXlzRGlmZmVyZW5jZSh0aGlzLl90aWxlcyx1KSx4PTA7eDx5Lmxlbmd0aDt4Kyspbi5fcmVtb3ZlVGlsZSh5W3hdKX19LHIucHJvdG90eXBlLl91cGRhdGVSZXRhaW5lZFRpbGVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXt9LGk9e30sYT1NYXRoLm1heChlLXIubWF4T3Zlcnpvb21pbmcsdGhpcy5fc291cmNlLm1pbnpvb20pLG89TWF0aC5tYXgoZStyLm1heFVuZGVyem9vbWluZyx0aGlzLl9zb3VyY2UubWluem9vbSkscz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbD10W3NdLGM9dGhpcy5fYWRkVGlsZShsKSx1PSExO2lmKGMuaGFzRGF0YSgpKW5bbC5rZXldPWw7ZWxzZXt1PWMud2FzUmVxdWVzdGVkKCksbltsLmtleV09bDt2YXIgaD0hMDtpZihlKzE+dGhpcy5fc291cmNlLm1heHpvb20pe3ZhciBmPWwuY2hpbGRyZW4odGhpcy5fc291cmNlLm1heHpvb20pWzBdLHA9dGhpcy5nZXRUaWxlKGYpO3AmJnAuaGFzRGF0YSgpP25bZi5rZXldPWY6aD0hMX1lbHNle3RoaXMuX2ZpbmRMb2FkZWRDaGlsZHJlbihsLG8sbik7Zm9yKHZhciBkPWwuY2hpbGRyZW4odGhpcy5fc291cmNlLm1heHpvb20pLGc9MDtnPGQubGVuZ3RoO2crKylpZighbltkW2ddLmtleV0pe2g9ITE7YnJlYWt9fWlmKCFoKWZvcih2YXIgdj1sLm92ZXJzY2FsZWRaLTE7dj49YTstLXYpe3ZhciBtPWwuc2NhbGVkVG8odik7aWYoaVttLmtleV0pYnJlYWs7aWYoaVttLmtleV09ITAsIShjPXRoaXMuZ2V0VGlsZShtKSkmJnUmJihjPXRoaXMuX2FkZFRpbGUobSkpLGMmJihuW20ua2V5XT1tLHU9Yy53YXNSZXF1ZXN0ZWQoKSxjLmhhc0RhdGEoKSkpYnJlYWt9fX1yZXR1cm4gbn0sci5wcm90b3R5cGUuX2FkZFRpbGU9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fdGlsZXNbZS5rZXldO2lmKHIpcmV0dXJuIHI7KHI9dGhpcy5fY2FjaGUuZ2V0QW5kUmVtb3ZlKGUpKSYmKHRoaXMuX3NldFRpbGVSZWxvYWRUaW1lcihlLmtleSxyKSxyLnRpbGVJRD1lKTt2YXIgbj1Cb29sZWFuKHIpO3JldHVybiBufHwocj1uZXcgc3QoZSx0aGlzLl9zb3VyY2UudGlsZVNpemUqZS5vdmVyc2NhbGVGYWN0b3IoKSksdGhpcy5fbG9hZFRpbGUocix0aGlzLl90aWxlTG9hZGVkLmJpbmQodGhpcyxyLGUua2V5LHIuc3RhdGUpKSkscj8oci51c2VzKyssdGhpcy5fdGlsZXNbZS5rZXldPXIsbnx8dGhpcy5fc291cmNlLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhbG9hZGluZ1wiLHt0aWxlOnIsY29vcmQ6ci50aWxlSUQsZGF0YVR5cGU6XCJzb3VyY2VcIn0pKSxyKTpudWxsfSxyLnByb3RvdHlwZS5fc2V0VGlsZVJlbG9hZFRpbWVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpczt0IGluIHRoaXMuX3RpbWVycyYmKGNsZWFyVGltZW91dCh0aGlzLl90aW1lcnNbdF0pLGRlbGV0ZSB0aGlzLl90aW1lcnNbdF0pO3ZhciBuPWUuZ2V0RXhwaXJ5VGltZW91dCgpO24mJih0aGlzLl90aW1lcnNbdF09c2V0VGltZW91dChmdW5jdGlvbigpe3IuX3JlbG9hZFRpbGUodCxcImV4cGlyZWRcIiksZGVsZXRlIHIuX3RpbWVyc1t0XX0sbikpfSxyLnByb3RvdHlwZS5fcmVtb3ZlVGlsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aWxlc1t0XTtlJiYoZS51c2VzLS0sZGVsZXRlIHRoaXMuX3RpbGVzW3RdLHRoaXMuX3RpbWVyc1t0XSYmKGNsZWFyVGltZW91dCh0aGlzLl90aW1lcnNbdF0pLGRlbGV0ZSB0aGlzLl90aW1lcnNbdF0pLGUudXNlcz4wfHwoZS5oYXNEYXRhKCk/dGhpcy5fY2FjaGUuYWRkKGUudGlsZUlELGUsZS5nZXRFeHBpcnlUaW1lb3V0KCkpOihlLmFib3J0ZWQ9ITAsdGhpcy5fYWJvcnRUaWxlKGUpLHRoaXMuX3VubG9hZFRpbGUoZSkpKSl9LHIucHJvdG90eXBlLmNsZWFyVGlsZXM9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fc2hvdWxkUmVsb2FkT25SZXN1bWU9ITEsdGhpcy5fcGF1c2VkPSExLHRoaXMuX3RpbGVzKXRoaXMuX3JlbW92ZVRpbGUodCk7dGhpcy5fY2FjaGUucmVzZXQoKX0sci5wcm90b3R5cGUudGlsZXNJbj1mdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1bXSxpPXRoaXMuZ2V0SWRzKCksYT0xLzAsbz0xLzAscz0tMS8wLGw9LTEvMCxjPWVbMF0uem9vbSx1PTA7dTxlLmxlbmd0aDt1Kyspe3ZhciBoPWVbdV07YT1NYXRoLm1pbihhLGguY29sdW1uKSxvPU1hdGgubWluKG8saC5yb3cpLHM9TWF0aC5tYXgocyxoLmNvbHVtbiksbD1NYXRoLm1heChsLGgucm93KX1mb3IodmFyIGY9MDtmPGkubGVuZ3RoO2YrKyl7dmFyIHA9dGhpcy5fdGlsZXNbaVtmXV0sZD1wLnRpbGVJRCxnPU1hdGgucG93KDIsdGhpcy50cmFuc2Zvcm0uem9vbS1wLnRpbGVJRC5vdmVyc2NhbGVkWiksdj1yKnAucXVlcnlQYWRkaW5nKnQuZGVmYXVsdCQ4L3AudGlsZVNpemUvZyxtPVtYdChkLG5ldyB0LmRlZmF1bHQkMTcoYSxvLGMpKSxYdChkLG5ldyB0LmRlZmF1bHQkMTcocyxsLGMpKV07aWYobVswXS54LXY8dC5kZWZhdWx0JDgmJm1bMF0ueS12PHQuZGVmYXVsdCQ4JiZtWzFdLngrdj49MCYmbVsxXS55K3Y+PTApe2Zvcih2YXIgeT1bXSx4PTA7eDxlLmxlbmd0aDt4KyspeS5wdXNoKFh0KGQsZVt4XSkpO24ucHVzaCh7dGlsZTpwLHRpbGVJRDpkLHF1ZXJ5R2VvbWV0cnk6W3ldLHNjYWxlOmd9KX19cmV0dXJuIG59LHIucHJvdG90eXBlLmdldFZpc2libGVDb29yZGluYXRlcz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9dGhpcy5nZXRSZW5kZXJhYmxlSWRzKCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll90aWxlc1tlXS50aWxlSUR9KSxyPTAsbj1lO3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXTtpLnBvc01hdHJpeD10LnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgoaS50b1Vud3JhcHBlZCgpKX1yZXR1cm4gZX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe2lmKHRoaXMuX3NvdXJjZS5oYXNUcmFuc2l0aW9uKCkpcmV0dXJuITA7aWYoWnQodGhpcy5fc291cmNlLnR5cGUpKWZvcih2YXIgdCBpbiB0aGlzLl90aWxlcyl7dmFyIGU9dGhpcy5fdGlsZXNbdF07aWYodm9pZCAwIT09ZS5mYWRlRW5kVGltZSYmZS5mYWRlRW5kVGltZT49YS5ub3coKSlyZXR1cm4hMH1yZXR1cm4hMX0scn0odC5FdmVudGVkKTtmdW5jdGlvbiBYdChlLHIpe3ZhciBuPXIuem9vbVRvKGUuY2Fub25pY2FsLnopO3JldHVybiBuZXcgdC5kZWZhdWx0JDEoKG4uY29sdW1uLShlLmNhbm9uaWNhbC54K2Uud3JhcCpNYXRoLnBvdygyLGUuY2Fub25pY2FsLnopKSkqdC5kZWZhdWx0JDgsKG4ucm93LWUuY2Fub25pY2FsLnkpKnQuZGVmYXVsdCQ4KX1mdW5jdGlvbiBadCh0KXtyZXR1cm5cInJhc3RlclwiPT09dHx8XCJpbWFnZVwiPT09dHx8XCJ2aWRlb1wiPT09dH1mdW5jdGlvbiAkdCgpe3JldHVybiBuZXcgdC5kZWZhdWx0LldvcmtlcihFbi53b3JrZXJVcmwpfVd0Lm1heE92ZXJ6b29taW5nPTEwLFd0Lm1heFVuZGVyem9vbWluZz0zO3ZhciBKdCxLdD1mdW5jdGlvbigpe3RoaXMuYWN0aXZlPXt9fTtmdW5jdGlvbiBRdChlLHIpe3ZhciBuPXt9O2Zvcih2YXIgaSBpbiBlKVwicmVmXCIhPT1pJiYobltpXT1lW2ldKTtyZXR1cm4gdC5kZWZhdWx0JDE4LmZvckVhY2goZnVuY3Rpb24odCl7dCBpbiByJiYoblt0XT1yW3RdKX0pLG59ZnVuY3Rpb24gdGUodCl7dD10LnNsaWNlKCk7Zm9yKHZhciBlPU9iamVjdC5jcmVhdGUobnVsbCkscj0wO3I8dC5sZW5ndGg7cisrKWVbdFtyXS5pZF09dFtyXTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylcInJlZlwiaW4gdFtuXSYmKHRbbl09UXQodFtuXSxlW3Rbbl0ucmVmXSkpO3JldHVybiB0fUt0LnByb3RvdHlwZS5hY3F1aXJlPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLndvcmtlcnMpe3ZhciBlPUVuLndvcmtlckNvdW50O2Zvcih0aGlzLndvcmtlcnM9W107dGhpcy53b3JrZXJzLmxlbmd0aDxlOyl0aGlzLndvcmtlcnMucHVzaChuZXcgJHQpfXJldHVybiB0aGlzLmFjdGl2ZVt0XT0hMCx0aGlzLndvcmtlcnMuc2xpY2UoKX0sS3QucHJvdG90eXBlLnJlbGVhc2U9ZnVuY3Rpb24odCl7ZGVsZXRlIHRoaXMuYWN0aXZlW3RdLDA9PT1PYmplY3Qua2V5cyh0aGlzLmFjdGl2ZSkubGVuZ3RoJiYodGhpcy53b3JrZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dC50ZXJtaW5hdGUoKX0pLHRoaXMud29ya2Vycz1udWxsKX07dmFyIGVlPXtzZXRTdHlsZTpcInNldFN0eWxlXCIsYWRkTGF5ZXI6XCJhZGRMYXllclwiLHJlbW92ZUxheWVyOlwicmVtb3ZlTGF5ZXJcIixzZXRQYWludFByb3BlcnR5Olwic2V0UGFpbnRQcm9wZXJ0eVwiLHNldExheW91dFByb3BlcnR5Olwic2V0TGF5b3V0UHJvcGVydHlcIixzZXRGaWx0ZXI6XCJzZXRGaWx0ZXJcIixhZGRTb3VyY2U6XCJhZGRTb3VyY2VcIixyZW1vdmVTb3VyY2U6XCJyZW1vdmVTb3VyY2VcIixzZXRHZW9KU09OU291cmNlRGF0YTpcInNldEdlb0pTT05Tb3VyY2VEYXRhXCIsc2V0TGF5ZXJab29tUmFuZ2U6XCJzZXRMYXllclpvb21SYW5nZVwiLHNldExheWVyUHJvcGVydHk6XCJzZXRMYXllclByb3BlcnR5XCIsc2V0Q2VudGVyOlwic2V0Q2VudGVyXCIsc2V0Wm9vbTpcInNldFpvb21cIixzZXRCZWFyaW5nOlwic2V0QmVhcmluZ1wiLHNldFBpdGNoOlwic2V0UGl0Y2hcIixzZXRTcHJpdGU6XCJzZXRTcHJpdGVcIixzZXRHbHlwaHM6XCJzZXRHbHlwaHNcIixzZXRUcmFuc2l0aW9uOlwic2V0VHJhbnNpdGlvblwiLHNldExpZ2h0Olwic2V0TGlnaHRcIn07ZnVuY3Rpb24gcmUodCxlLHIpe3IucHVzaCh7Y29tbWFuZDplZS5hZGRTb3VyY2UsYXJnczpbdCxlW3RdXX0pfWZ1bmN0aW9uIG5lKHQsZSxyKXtlLnB1c2goe2NvbW1hbmQ6ZWUucmVtb3ZlU291cmNlLGFyZ3M6W3RdfSksclt0XT0hMH1mdW5jdGlvbiBpZSh0LGUscixuKXtuZSh0LHIsbikscmUodCxlLHIpfWZ1bmN0aW9uIGFlKGUscixuKXt2YXIgaTtmb3IoaSBpbiBlW25dKWlmKGVbbl0uaGFzT3duUHJvcGVydHkoaSkmJlwiZGF0YVwiIT09aSYmIXQuZGVmYXVsdCQxMChlW25dW2ldLHJbbl1baV0pKXJldHVybiExO2ZvcihpIGluIHJbbl0paWYocltuXS5oYXNPd25Qcm9wZXJ0eShpKSYmXCJkYXRhXCIhPT1pJiYhdC5kZWZhdWx0JDEwKGVbbl1baV0scltuXVtpXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gb2UoZSxyLG4saSxhLG8pe3ZhciBzO2ZvcihzIGluIHI9cnx8e30sZT1lfHx7fSllLmhhc093blByb3BlcnR5KHMpJiYodC5kZWZhdWx0JDEwKGVbc10scltzXSl8fG4ucHVzaCh7Y29tbWFuZDpvLGFyZ3M6W2kscyxyW3NdLGFdfSkpO2ZvcihzIGluIHIpci5oYXNPd25Qcm9wZXJ0eShzKSYmIWUuaGFzT3duUHJvcGVydHkocykmJih0LmRlZmF1bHQkMTAoZVtzXSxyW3NdKXx8bi5wdXNoKHtjb21tYW5kOm8sYXJnczpbaSxzLHJbc10sYV19KSl9ZnVuY3Rpb24gc2UodCl7cmV0dXJuIHQuaWR9ZnVuY3Rpb24gbGUodCxlKXtyZXR1cm4gdFtlLmlkXT1lLHR9dmFyIGNlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmJveENlbGxzPVtdLGk9dGhpcy5jaXJjbGVDZWxscz1bXTt0aGlzLnhDZWxsQ291bnQ9TWF0aC5jZWlsKHQvciksdGhpcy55Q2VsbENvdW50PU1hdGguY2VpbChlL3IpO2Zvcih2YXIgYT0wO2E8dGhpcy54Q2VsbENvdW50KnRoaXMueUNlbGxDb3VudDthKyspbi5wdXNoKFtdKSxpLnB1c2goW10pO3RoaXMuY2lyY2xlS2V5cz1bXSx0aGlzLmJveEtleXM9W10sdGhpcy5iYm94ZXM9W10sdGhpcy5jaXJjbGVzPVtdLHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMueFNjYWxlPXRoaXMueENlbGxDb3VudC90LHRoaXMueVNjYWxlPXRoaXMueUNlbGxDb3VudC9lLHRoaXMuYm94VWlkPTAsdGhpcy5jaXJjbGVVaWQ9MH07Y2UucHJvdG90eXBlLmtleXNMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ib3hLZXlzLmxlbmd0aCt0aGlzLmNpcmNsZUtleXMubGVuZ3RofSxjZS5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5fZm9yRWFjaENlbGwoZSxyLG4saSx0aGlzLl9pbnNlcnRCb3hDZWxsLHRoaXMuYm94VWlkKyspLHRoaXMuYm94S2V5cy5wdXNoKHQpLHRoaXMuYmJveGVzLnB1c2goZSksdGhpcy5iYm94ZXMucHVzaChyKSx0aGlzLmJib3hlcy5wdXNoKG4pLHRoaXMuYmJveGVzLnB1c2goaSl9LGNlLnByb3RvdHlwZS5pbnNlcnRDaXJjbGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5fZm9yRWFjaENlbGwoZS1uLHItbixlK24scituLHRoaXMuX2luc2VydENpcmNsZUNlbGwsdGhpcy5jaXJjbGVVaWQrKyksdGhpcy5jaXJjbGVLZXlzLnB1c2godCksdGhpcy5jaXJjbGVzLnB1c2goZSksdGhpcy5jaXJjbGVzLnB1c2gociksdGhpcy5jaXJjbGVzLnB1c2gobil9LGNlLnByb3RvdHlwZS5faW5zZXJ0Qm94Q2VsbD1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5ib3hDZWxsc1tpXS5wdXNoKGEpfSxjZS5wcm90b3R5cGUuX2luc2VydENpcmNsZUNlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuY2lyY2xlQ2VsbHNbaV0ucHVzaChhKX0sY2UucHJvdG90eXBlLl9xdWVyeT1mdW5jdGlvbih0LGUscixuLGkpe2lmKHI8MHx8dD50aGlzLndpZHRofHxuPDB8fGU+dGhpcy5oZWlnaHQpcmV0dXJuIWkmJltdO3ZhciBhPVtdO2lmKHQ8PTAmJmU8PTAmJnRoaXMud2lkdGg8PXImJnRoaXMuaGVpZ2h0PD1uKXtpZihpKXJldHVybiEwO2Zvcih2YXIgbz0wO288dGhpcy5ib3hLZXlzLmxlbmd0aDtvKyspYS5wdXNoKHtrZXk6dGhpcy5ib3hLZXlzW29dLHgxOnRoaXMuYmJveGVzWzQqb10seTE6dGhpcy5iYm94ZXNbNCpvKzFdLHgyOnRoaXMuYmJveGVzWzQqbysyXSx5Mjp0aGlzLmJib3hlc1s0Km8rM119KTtmb3IodmFyIHM9MDtzPHRoaXMuY2lyY2xlS2V5cy5sZW5ndGg7cysrKXt2YXIgbD10aGlzLmNpcmNsZXNbMypzXSxjPXRoaXMuY2lyY2xlc1szKnMrMV0sdT10aGlzLmNpcmNsZXNbMypzKzJdO2EucHVzaCh7a2V5OnRoaXMuY2lyY2xlS2V5c1tzXSx4MTpsLXUseTE6Yy11LHgyOmwrdSx5MjpjK3V9KX19ZWxzZXt2YXIgaD17aGl0VGVzdDppLHNlZW5VaWRzOntib3g6e30sY2lyY2xlOnt9fX07dGhpcy5fZm9yRWFjaENlbGwodCxlLHIsbix0aGlzLl9xdWVyeUNlbGwsYSxoKX1yZXR1cm4gaT9hLmxlbmd0aD4wOmF9LGNlLnByb3RvdHlwZS5fcXVlcnlDaXJjbGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC1yLGE9dCtyLG89ZS1yLHM9ZStyO2lmKGE8MHx8aT50aGlzLndpZHRofHxzPDB8fG8+dGhpcy5oZWlnaHQpcmV0dXJuIW4mJltdO3ZhciBsPVtdLGM9e2hpdFRlc3Q6bixjaXJjbGU6e3g6dCx5OmUscmFkaXVzOnJ9LHNlZW5VaWRzOntib3g6e30sY2lyY2xlOnt9fX07cmV0dXJuIHRoaXMuX2ZvckVhY2hDZWxsKGksbyxhLHMsdGhpcy5fcXVlcnlDZWxsQ2lyY2xlLGwsYyksbj9sLmxlbmd0aD4wOmx9LGNlLnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdGhpcy5fcXVlcnkodCxlLHIsbiwhMSl9LGNlLnByb3RvdHlwZS5oaXRUZXN0PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLl9xdWVyeSh0LGUscixuLCEwKX0sY2UucHJvdG90eXBlLmhpdFRlc3RDaXJjbGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9xdWVyeUNpcmNsZSh0LGUsciwhMCl9LGNlLnByb3RvdHlwZS5fcXVlcnlDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPW8uc2VlblVpZHMsbD10aGlzLmJveENlbGxzW2ldO2lmKG51bGwhPT1sKWZvcih2YXIgYz10aGlzLmJib3hlcyx1PTAsaD1sO3U8aC5sZW5ndGg7dSs9MSl7dmFyIGY9aFt1XTtpZighcy5ib3hbZl0pe3MuYm94W2ZdPSEwO3ZhciBwPTQqZjtpZih0PD1jW3ArMl0mJmU8PWNbcCszXSYmcj49Y1twKzBdJiZuPj1jW3ArMV0pe2lmKG8uaGl0VGVzdClyZXR1cm4gYS5wdXNoKCEwKSwhMDthLnB1c2goe2tleTp0aGlzLmJveEtleXNbZl0seDE6Y1twXSx5MTpjW3ArMV0seDI6Y1twKzJdLHkyOmNbcCszXX0pfX19dmFyIGQ9dGhpcy5jaXJjbGVDZWxsc1tpXTtpZihudWxsIT09ZClmb3IodmFyIGc9dGhpcy5jaXJjbGVzLHY9MCxtPWQ7djxtLmxlbmd0aDt2Kz0xKXt2YXIgeT1tW3ZdO2lmKCFzLmNpcmNsZVt5XSl7cy5jaXJjbGVbeV09ITA7dmFyIHg9Myp5O2lmKHRoaXMuX2NpcmNsZUFuZFJlY3RDb2xsaWRlKGdbeF0sZ1t4KzFdLGdbeCsyXSx0LGUscixuKSl7aWYoby5oaXRUZXN0KXJldHVybiBhLnB1c2goITApLCEwO3ZhciBiPWdbeF0sXz1nW3grMV0sdz1nW3grMl07YS5wdXNoKHtrZXk6dGhpcy5jaXJjbGVLZXlzW3ldLHgxOmItdyx5MTpfLXcseDI6Yit3LHkyOl8rd30pfX19fSxjZS5wcm90b3R5cGUuX3F1ZXJ5Q2VsbENpcmNsZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz1vLmNpcmNsZSxsPW8uc2VlblVpZHMsYz10aGlzLmJveENlbGxzW2ldO2lmKG51bGwhPT1jKWZvcih2YXIgdT10aGlzLmJib3hlcyxoPTAsZj1jO2g8Zi5sZW5ndGg7aCs9MSl7dmFyIHA9ZltoXTtpZighbC5ib3hbcF0pe2wuYm94W3BdPSEwO3ZhciBkPTQqcDtpZih0aGlzLl9jaXJjbGVBbmRSZWN0Q29sbGlkZShzLngscy55LHMucmFkaXVzLHVbZCswXSx1W2QrMV0sdVtkKzJdLHVbZCszXSkpcmV0dXJuIGEucHVzaCghMCksITB9fXZhciBnPXRoaXMuY2lyY2xlQ2VsbHNbaV07aWYobnVsbCE9PWcpZm9yKHZhciB2PXRoaXMuY2lyY2xlcyxtPTAseT1nO208eS5sZW5ndGg7bSs9MSl7dmFyIHg9eVttXTtpZighbC5jaXJjbGVbeF0pe2wuY2lyY2xlW3hdPSEwO3ZhciBiPTMqeDtpZih0aGlzLl9jaXJjbGVzQ29sbGlkZSh2W2JdLHZbYisxXSx2W2IrMl0scy54LHMueSxzLnJhZGl1cykpcmV0dXJuIGEucHVzaCghMCksITB9fX0sY2UucHJvdG90eXBlLl9mb3JFYWNoQ2VsbD1mdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9dGhpcy5fY29udmVydFRvWENlbGxDb29yZCh0KSxsPXRoaXMuX2NvbnZlcnRUb1lDZWxsQ29vcmQoZSksYz10aGlzLl9jb252ZXJ0VG9YQ2VsbENvb3JkKHIpLHU9dGhpcy5fY29udmVydFRvWUNlbGxDb29yZChuKSxoPXM7aDw9YztoKyspZm9yKHZhciBmPWw7Zjw9dTtmKyspe3ZhciBwPXRoaXMueENlbGxDb3VudCpmK2g7aWYoaS5jYWxsKHRoaXMsdCxlLHIsbixwLGEsbykpcmV0dXJufX0sY2UucHJvdG90eXBlLl9jb252ZXJ0VG9YQ2VsbENvb3JkPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKHRoaXMueENlbGxDb3VudC0xLE1hdGguZmxvb3IodCp0aGlzLnhTY2FsZSkpKX0sY2UucHJvdG90eXBlLl9jb252ZXJ0VG9ZQ2VsbENvb3JkPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKHRoaXMueUNlbGxDb3VudC0xLE1hdGguZmxvb3IodCp0aGlzLnlTY2FsZSkpKX0sY2UucHJvdG90eXBlLl9jaXJjbGVzQ29sbGlkZT1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89bi10LHM9aS1lLGw9cithO3JldHVybiBsKmw+bypvK3Mqc30sY2UucHJvdG90eXBlLl9jaXJjbGVBbmRSZWN0Q29sbGlkZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz0oYS1uKS8yLGw9TWF0aC5hYnModC0obitzKSk7aWYobD5zK3IpcmV0dXJuITE7dmFyIGM9KG8taSkvMix1PU1hdGguYWJzKGUtKGkrYykpO2lmKHU+YytyKXJldHVybiExO2lmKGw8PXN8fHU8PWMpcmV0dXJuITA7dmFyIGg9bC1zLGY9dS1jO3JldHVybiBoKmgrZipmPD1yKnJ9O3ZhciB1ZT10LmRlZmF1bHQkMTkubGF5b3V0O2Z1bmN0aW9uIGhlKGUscixuLGksYSl7dmFyIG89dC5tYXQ0LmlkZW50aXR5KG5ldyBGbG9hdDMyQXJyYXkoMTYpKTtyZXR1cm4gcj8odC5tYXQ0LmlkZW50aXR5KG8pLHQubWF0NC5zY2FsZShvLG8sWzEvYSwxL2EsMV0pLG58fHQubWF0NC5yb3RhdGVaKG8sbyxpLmFuZ2xlKSk6KHQubWF0NC5zY2FsZShvLG8sW2kud2lkdGgvMiwtaS5oZWlnaHQvMiwxXSksdC5tYXQ0LnRyYW5zbGF0ZShvLG8sWzEsLTEsMF0pLHQubWF0NC5tdWx0aXBseShvLG8sZSkpLG99ZnVuY3Rpb24gZmUoZSxyLG4saSxhKXt2YXIgbz10Lm1hdDQuaWRlbnRpdHkobmV3IEZsb2F0MzJBcnJheSgxNikpO3JldHVybiByPyh0Lm1hdDQubXVsdGlwbHkobyxvLGUpLHQubWF0NC5zY2FsZShvLG8sW2EsYSwxXSksbnx8dC5tYXQ0LnJvdGF0ZVoobyxvLC1pLmFuZ2xlKSk6KHQubWF0NC5zY2FsZShvLG8sWzEsLTEsMV0pLHQubWF0NC50cmFuc2xhdGUobyxvLFstMSwtMSwwXSksdC5tYXQ0LnNjYWxlKG8sbyxbMi9pLndpZHRoLDIvaS5oZWlnaHQsMV0pKSxvfWZ1bmN0aW9uIHBlKGUscil7dmFyIG49W2UueCxlLnksMCwxXTtrZShuLG4scik7dmFyIGk9blszXTtyZXR1cm57cG9pbnQ6bmV3IHQuZGVmYXVsdCQxKG5bMF0vaSxuWzFdL2kpLHNpZ25lZERpc3RhbmNlRnJvbUNhbWVyYTppfX1mdW5jdGlvbiBkZSh0LGUpe3ZhciByPXRbMF0vdFszXSxuPXRbMV0vdFszXTtyZXR1cm4gcj49LWVbMF0mJnI8PWVbMF0mJm4+PS1lWzFdJiZuPD1lWzFdfWZ1bmN0aW9uIGdlKGUscixuLGksYSxvLHMsbCl7dmFyIGM9aT9lLnRleHRTaXplRGF0YTplLmljb25TaXplRGF0YSx1PXQuZXZhbHVhdGVTaXplRm9yWm9vbShjLG4udHJhbnNmb3JtLnpvb20sdWUucHJvcGVydGllc1tpP1widGV4dC1zaXplXCI6XCJpY29uLXNpemVcIl0pLGg9WzI1Ni9uLndpZHRoKjIrMSwyNTYvbi5oZWlnaHQqMisxXSxmPWk/ZS50ZXh0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheTplLmljb24uZHluYW1pY0xheW91dFZlcnRleEFycmF5O2YuY2xlYXIoKTtmb3IodmFyIHA9ZS5saW5lVmVydGV4QXJyYXksZD1pP2UudGV4dC5wbGFjZWRTeW1ib2xBcnJheTplLmljb24ucGxhY2VkU3ltYm9sQXJyYXksZz1uLnRyYW5zZm9ybS53aWR0aC9uLnRyYW5zZm9ybS5oZWlnaHQsdj0hMSxtPTA7bTxkLmxlbmd0aDttKyspe3ZhciB5PWQuZ2V0KG0pO2lmKHkuaGlkZGVufHx5LndyaXRpbmdNb2RlPT09dC5Xcml0aW5nTW9kZS52ZXJ0aWNhbCYmIXYpd2UoeS5udW1HbHlwaHMsZik7ZWxzZXt2PSExO3ZhciB4PVt5LmFuY2hvclgseS5hbmNob3JZLDAsMV07aWYodC52ZWM0LnRyYW5zZm9ybU1hdDQoeCx4LHIpLGRlKHgsaCkpe3ZhciBiPS41K3hbM10vbi50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSouNSxfPXQuZXZhbHVhdGVTaXplRm9yRmVhdHVyZShjLHUseSksdz1zP18qYjpfL2Isaz1uZXcgdC5kZWZhdWx0JDEoeS5hbmNob3JYLHkuYW5jaG9yWSksQT1wZShrLGEpLnBvaW50LFQ9e30sTT15ZSh5LHcsITEsbCxyLGEsbyxlLmdseXBoT2Zmc2V0QXJyYXkscCxmLEEsayxULGcpO3Y9TS51c2VWZXJ0aWNhbCwoTS5ub3RFbm91Z2hSb29tfHx2fHxNLm5lZWRzRmxpcHBpbmcmJnllKHksdywhMCxsLHIsYSxvLGUuZ2x5cGhPZmZzZXRBcnJheSxwLGYsQSxrLFQsZykubm90RW5vdWdoUm9vbSkmJndlKHkubnVtR2x5cGhzLGYpfWVsc2Ugd2UoeS5udW1HbHlwaHMsZil9fWk/ZS50ZXh0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShmKTplLmljb24uZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGYpfWZ1bmN0aW9uIHZlKHQsZSxyLG4saSxhLG8scyxsLGMsdSxoKXt2YXIgZj1zLmdseXBoU3RhcnRJbmRleCtzLm51bUdseXBocyxwPXMubGluZVN0YXJ0SW5kZXgsZD1zLmxpbmVTdGFydEluZGV4K3MubGluZUxlbmd0aCxnPWUuZ2V0b2Zmc2V0WChzLmdseXBoU3RhcnRJbmRleCksdj1lLmdldG9mZnNldFgoZi0xKSxtPWJlKHQqZyxyLG4saSxhLG8scy5zZWdtZW50LHAsZCxsLGMsdSxoKTtpZighbSlyZXR1cm4gbnVsbDt2YXIgeT1iZSh0KnYscixuLGksYSxvLHMuc2VnbWVudCxwLGQsbCxjLHUsaCk7cmV0dXJuIHk/e2ZpcnN0Om0sbGFzdDp5fTpudWxsfWZ1bmN0aW9uIG1lKGUscixuLGkpe3JldHVybiBlPT09dC5Xcml0aW5nTW9kZS5ob3Jpem9udGFsJiZNYXRoLmFicyhuLnktci55KT5NYXRoLmFicyhuLngtci54KSppP3t1c2VWZXJ0aWNhbDohMH06KGU9PT10LldyaXRpbmdNb2RlLnZlcnRpY2FsP3IueTxuLnk6ci54Pm4ueCk/e25lZWRzRmxpcHBpbmc6ITB9Om51bGx9ZnVuY3Rpb24geWUoZSxyLG4saSxhLG8scyxsLGMsdSxoLGYscCxkKXt2YXIgZyx2PXIvMjQsbT1lLmxpbmVPZmZzZXRYKnIseT1lLmxpbmVPZmZzZXRZKnI7aWYoZS5udW1HbHlwaHM+MSl7dmFyIHg9ZS5nbHlwaFN0YXJ0SW5kZXgrZS5udW1HbHlwaHMsYj1lLmxpbmVTdGFydEluZGV4LF89ZS5saW5lU3RhcnRJbmRleCtlLmxpbmVMZW5ndGgsdz12ZSh2LGwsbSx5LG4saCxmLGUsYyxvLHAsITEpO2lmKCF3KXJldHVybntub3RFbm91Z2hSb29tOiEwfTt2YXIgaz1wZSh3LmZpcnN0LnBvaW50LHMpLnBvaW50LEE9cGUody5sYXN0LnBvaW50LHMpLnBvaW50O2lmKGkmJiFuKXt2YXIgVD1tZShlLndyaXRpbmdNb2RlLGssQSxkKTtpZihUKXJldHVybiBUfWc9W3cuZmlyc3RdO2Zvcih2YXIgTT1lLmdseXBoU3RhcnRJbmRleCsxO008eC0xO00rKylnLnB1c2goYmUodipsLmdldG9mZnNldFgoTSksbSx5LG4saCxmLGUuc2VnbWVudCxiLF8sYyxvLHAsITEpKTtnLnB1c2gody5sYXN0KX1lbHNle2lmKGkmJiFuKXt2YXIgUz1wZShmLGEpLnBvaW50LEU9ZS5saW5lU3RhcnRJbmRleCtlLnNlZ21lbnQrMSxDPW5ldyB0LmRlZmF1bHQkMShjLmdldHgoRSksYy5nZXR5KEUpKSxMPXBlKEMsYSksej1MLnNpZ25lZERpc3RhbmNlRnJvbUNhbWVyYT4wP0wucG9pbnQ6eGUoZixDLFMsMSxhKSxPPW1lKGUud3JpdGluZ01vZGUsUyx6LGQpO2lmKE8pcmV0dXJuIE99dmFyIEk9YmUodipsLmdldG9mZnNldFgoZS5nbHlwaFN0YXJ0SW5kZXgpLG0seSxuLGgsZixlLnNlZ21lbnQsZS5saW5lU3RhcnRJbmRleCxlLmxpbmVTdGFydEluZGV4K2UubGluZUxlbmd0aCxjLG8scCwhMSk7aWYoIUkpcmV0dXJue25vdEVub3VnaFJvb206ITB9O2c9W0ldfWZvcih2YXIgRD0wLFA9ZztEPFAubGVuZ3RoO0QrPTEpe3ZhciBSPVBbRF07dC5hZGREeW5hbWljQXR0cmlidXRlcyh1LFIucG9pbnQsUi5hbmdsZSl9cmV0dXJue319ZnVuY3Rpb24geGUodCxlLHIsbixpKXt2YXIgYT1wZSh0LmFkZCh0LnN1YihlKS5fdW5pdCgpKSxpKS5wb2ludCxvPXIuc3ViKGEpO3JldHVybiByLmFkZChvLl9tdWx0KG4vby5tYWcoKSkpfWZ1bmN0aW9uIGJlKGUscixuLGksYSxvLHMsbCxjLHUsaCxmLHApe3ZhciBkPWk/ZS1yOmUrcixnPWQ+MD8xOi0xLHY9MDtpJiYoZyo9LTEsdj1NYXRoLlBJKSxnPDAmJih2Kz1NYXRoLlBJKTtmb3IodmFyIG09Zz4wP2wrczpsK3MrMSx5PW0seD1hLGI9YSxfPTAsdz0wLGs9TWF0aC5hYnMoZCk7Xyt3PD1rOyl7aWYoKG0rPWcpPGx8fG0+PWMpcmV0dXJuIG51bGw7aWYoYj14LHZvaWQgMD09PSh4PWZbbV0pKXt2YXIgQT1uZXcgdC5kZWZhdWx0JDEodS5nZXR4KG0pLHUuZ2V0eShtKSksVD1wZShBLGgpO2lmKFQuc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhPjApeD1mW21dPVQucG9pbnQ7ZWxzZXt2YXIgTT1tLWc7eD14ZSgwPT09Xz9vOm5ldyB0LmRlZmF1bHQkMSh1LmdldHgoTSksdS5nZXR5KE0pKSxBLGIsay1fKzEsaCl9fV8rPXcsdz1iLmRpc3QoeCl9dmFyIFM9KGstXykvdyxFPXguc3ViKGIpLEM9RS5tdWx0KFMpLl9hZGQoYik7cmV0dXJuIEMuX2FkZChFLl91bml0KCkuX3BlcnAoKS5fbXVsdChuKmcpKSx7cG9pbnQ6QyxhbmdsZTp2K01hdGguYXRhbjIoeC55LWIueSx4LngtYi54KSx0aWxlRGlzdGFuY2U6cD97cHJldlRpbGVEaXN0YW5jZTptLWc9PT15PzA6dS5nZXR0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcihtLWcpLGxhc3RTZWdtZW50Vmlld3BvcnREaXN0YW5jZTprLV99Om51bGx9fXZhciBfZT1uZXcgRmxvYXQzMkFycmF5KFstMS8wLC0xLzAsMCwtMS8wLC0xLzAsMCwtMS8wLC0xLzAsMCwtMS8wLC0xLzAsMF0pO2Z1bmN0aW9uIHdlKHQsZSl7Zm9yKHZhciByPTA7cjx0O3IrKyl7dmFyIG49ZS5sZW5ndGg7ZS5yZXNpemUobis0KSxlLmZsb2F0MzIuc2V0KF9lLDMqbil9fWZ1bmN0aW9uIGtlKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXTtyZXR1cm4gdFswXT1yWzBdKm4rcls0XSppK3JbMTJdLHRbMV09clsxXSpuK3JbNV0qaStyWzEzXSx0WzNdPXJbM10qbityWzddKmkrclsxNV0sdH10LmRlZmF1bHQkMjAubWF0NDt2YXIgQWU9ZnVuY3Rpb24odCxlLHIpe3ZvaWQgMD09PWUmJihlPW5ldyBjZSh0LndpZHRoKzIwMCx0LmhlaWdodCsyMDAsMjUpKSx2b2lkIDA9PT1yJiYocj1uZXcgY2UodC53aWR0aCsyMDAsdC5oZWlnaHQrMjAwLDI1KSksdGhpcy50cmFuc2Zvcm09dCx0aGlzLmdyaWQ9ZSx0aGlzLmlnbm9yZWRHcmlkPXIsdGhpcy5waXRjaGZhY3Rvcj1NYXRoLmNvcyh0Ll9waXRjaCkqdC5jYW1lcmFUb0NlbnRlckRpc3RhbmNlLHRoaXMuc2NyZWVuUmlnaHRCb3VuZGFyeT10LndpZHRoKzEwMCx0aGlzLnNjcmVlbkJvdHRvbUJvdW5kYXJ5PXQuaGVpZ2h0KzEwMH07ZnVuY3Rpb24gVGUodCxlLHIpe3RbZSs0XT1yPzE6MH1mdW5jdGlvbiBNZShlLHIsbil7cmV0dXJuIHIqKHQuZGVmYXVsdCQ4LyhlLnRpbGVTaXplKk1hdGgucG93KDIsbi1lLnRpbGVJRC5vdmVyc2NhbGVkWikpKX1BZS5wcm90b3R5cGUucGxhY2VDb2xsaXNpb25Cb3g9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5wcm9qZWN0QW5kR2V0UGVyc3BlY3RpdmVSYXRpbyhuLHQuYW5jaG9yUG9pbnRYLHQuYW5jaG9yUG9pbnRZKSxhPXIqaS5wZXJzcGVjdGl2ZVJhdGlvLG89dC54MSphK2kucG9pbnQueCxzPXQueTEqYStpLnBvaW50LnksbD10LngyKmEraS5wb2ludC54LGM9dC55MiphK2kucG9pbnQueTtyZXR1cm4hZSYmdGhpcy5ncmlkLmhpdFRlc3QobyxzLGwsYyk/e2JveDpbXSxvZmZzY3JlZW46ITF9Ontib3g6W28scyxsLGNdLG9mZnNjcmVlbjp0aGlzLmlzT2Zmc2NyZWVuKG8scyxsLGMpfX0sQWUucHJvdG90eXBlLmFwcHJveGltYXRlVGlsZURpc3RhbmNlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9aT8xOm4vdGhpcy5waXRjaGZhY3RvcixvPXQubGFzdFNlZ21lbnRWaWV3cG9ydERpc3RhbmNlKnI7cmV0dXJuIHQucHJldlRpbGVEaXN0YW5jZStvKyhhLTEpKm8qTWF0aC5hYnMoTWF0aC5zaW4oZSkpfSxBZS5wcm90b3R5cGUucGxhY2VDb2xsaXNpb25DaXJjbGVzPWZ1bmN0aW9uKGUscixuLGksYSxvLHMsbCxjLHUsaCxmLHApe3ZhciBkPVtdLGc9dGhpcy5wcm9qZWN0QW5jaG9yKHUsby5hbmNob3JYLG8uYW5jaG9yWSksdj1jLzI0LG09by5saW5lT2Zmc2V0WCpjLHk9by5saW5lT2Zmc2V0WSpjLHg9bmV3IHQuZGVmYXVsdCQxKG8uYW5jaG9yWCxvLmFuY2hvclkpLGI9dmUodixsLG0seSwhMSxwZSh4LGgpLnBvaW50LHgsbyxzLGgse30sITApLF89ITEsdz0hMCxrPWcucGVyc3BlY3RpdmVSYXRpbyppLEE9MS8oaSpuKSxUPTAsTT0wO2ImJihUPXRoaXMuYXBwcm94aW1hdGVUaWxlRGlzdGFuY2UoYi5maXJzdC50aWxlRGlzdGFuY2UsYi5maXJzdC5hbmdsZSxBLGcuY2FtZXJhRGlzdGFuY2UscCksTT10aGlzLmFwcHJveGltYXRlVGlsZURpc3RhbmNlKGIubGFzdC50aWxlRGlzdGFuY2UsYi5sYXN0LmFuZ2xlLEEsZy5jYW1lcmFEaXN0YW5jZSxwKSk7Zm9yKHZhciBTPTA7UzxlLmxlbmd0aDtTKz01KXt2YXIgRT1lW1NdLEM9ZVtTKzFdLEw9ZVtTKzJdLHo9ZVtTKzNdO2lmKCFifHx6PC1UfHx6Pk0pVGUoZSxTLCExKTtlbHNle3ZhciBPPXRoaXMucHJvamVjdFBvaW50KHUsRSxDKSxJPUwqaztpZihkLmxlbmd0aD4wKXt2YXIgRD1PLngtZFtkLmxlbmd0aC00XSxQPU8ueS1kW2QubGVuZ3RoLTNdO2lmKEkqSSoyPkQqRCtQKlAmJlMrODxlLmxlbmd0aCl7dmFyIFI9ZVtTKzhdO2lmKFI+LVQmJlI8TSl7VGUoZSxTLCExKTtjb250aW51ZX19fXZhciBGPVMvNTtpZihkLnB1c2goTy54LE8ueSxJLEYpLFRlKGUsUywhMCksdz13JiZ0aGlzLmlzT2Zmc2NyZWVuKE8ueC1JLE8ueS1JLE8ueCtJLE8ueStJKSwhciYmdGhpcy5ncmlkLmhpdFRlc3RDaXJjbGUoTy54LE8ueSxJKSl7aWYoIWYpcmV0dXJue2NpcmNsZXM6W10sb2Zmc2NyZWVuOiExfTtfPSEwfX19cmV0dXJue2NpcmNsZXM6Xz9bXTpkLG9mZnNjcmVlbjp3fX0sQWUucHJvdG90eXBlLnF1ZXJ5UmVuZGVyZWRTeW1ib2xzPWZ1bmN0aW9uKGUpe2lmKDA9PT1lLmxlbmd0aHx8MD09PXRoaXMuZ3JpZC5rZXlzTGVuZ3RoKCkmJjA9PT10aGlzLmlnbm9yZWRHcmlkLmtleXNMZW5ndGgoKSlyZXR1cm57fTtmb3IodmFyIHI9W10sbj0xLzAsaT0xLzAsYT0tMS8wLG89LTEvMCxzPTAsbD1lO3M8bC5sZW5ndGg7cys9MSl7dmFyIGM9bFtzXSx1PW5ldyB0LmRlZmF1bHQkMShjLngrMTAwLGMueSsxMDApO249TWF0aC5taW4obix1LngpLGk9TWF0aC5taW4oaSx1LnkpLGE9TWF0aC5tYXgoYSx1LngpLG89TWF0aC5tYXgobyx1LnkpLHIucHVzaCh1KX1mb3IodmFyIGg9e30sZj17fSxwPTAsZD10aGlzLmdyaWQucXVlcnkobixpLGEsbykuY29uY2F0KHRoaXMuaWdub3JlZEdyaWQucXVlcnkobixpLGEsbykpO3A8ZC5sZW5ndGg7cCs9MSl7dmFyIGc9ZFtwXSx2PWcua2V5O2lmKHZvaWQgMD09PWhbdi5idWNrZXRJbnN0YW5jZUlkXSYmKGhbdi5idWNrZXRJbnN0YW5jZUlkXT17fSksIWhbdi5idWNrZXRJbnN0YW5jZUlkXVt2LmZlYXR1cmVJbmRleF0pe3ZhciBtPVtuZXcgdC5kZWZhdWx0JDEoZy54MSxnLnkxKSxuZXcgdC5kZWZhdWx0JDEoZy54MixnLnkxKSxuZXcgdC5kZWZhdWx0JDEoZy54MixnLnkyKSxuZXcgdC5kZWZhdWx0JDEoZy54MSxnLnkyKV07dC5wb2x5Z29uSW50ZXJzZWN0c1BvbHlnb24ocixtKSYmKGhbdi5idWNrZXRJbnN0YW5jZUlkXVt2LmZlYXR1cmVJbmRleF09ITAsdm9pZCAwPT09Zlt2LmJ1Y2tldEluc3RhbmNlSWRdJiYoZlt2LmJ1Y2tldEluc3RhbmNlSWRdPVtdKSxmW3YuYnVja2V0SW5zdGFuY2VJZF0ucHVzaCh2LmZlYXR1cmVJbmRleCkpfX1yZXR1cm4gZn0sQWUucHJvdG90eXBlLmluc2VydENvbGxpc2lvbkJveD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT17YnVja2V0SW5zdGFuY2VJZDpyLGZlYXR1cmVJbmRleDpufTsoZT90aGlzLmlnbm9yZWRHcmlkOnRoaXMuZ3JpZCkuaW5zZXJ0KGksdFswXSx0WzFdLHRbMl0sdFszXSl9LEFlLnByb3RvdHlwZS5pbnNlcnRDb2xsaXNpb25DaXJjbGVzPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1lP3RoaXMuaWdub3JlZEdyaWQ6dGhpcy5ncmlkLGE9e2J1Y2tldEluc3RhbmNlSWQ6cixmZWF0dXJlSW5kZXg6bn0sbz0wO288dC5sZW5ndGg7bys9NClpLmluc2VydENpcmNsZShhLHRbb10sdFtvKzFdLHRbbysyXSl9LEFlLnByb3RvdHlwZS5wcm9qZWN0QW5jaG9yPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1bZSxyLDAsMV07cmV0dXJuIGtlKG4sbix0KSx7cGVyc3BlY3RpdmVSYXRpbzouNSt0aGlzLnRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlL25bM10qLjUsY2FtZXJhRGlzdGFuY2U6blszXX19LEFlLnByb3RvdHlwZS5wcm9qZWN0UG9pbnQ9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPVtyLG4sMCwxXTtyZXR1cm4ga2UoaSxpLGUpLG5ldyB0LmRlZmF1bHQkMSgoaVswXS9pWzNdKzEpLzIqdGhpcy50cmFuc2Zvcm0ud2lkdGgrMTAwLCgtaVsxXS9pWzNdKzEpLzIqdGhpcy50cmFuc2Zvcm0uaGVpZ2h0KzEwMCl9LEFlLnByb3RvdHlwZS5wcm9qZWN0QW5kR2V0UGVyc3BlY3RpdmVSYXRpbz1mdW5jdGlvbihlLHIsbil7dmFyIGk9W3IsbiwwLDFdO3JldHVybiBrZShpLGksZSkse3BvaW50Om5ldyB0LmRlZmF1bHQkMSgoaVswXS9pWzNdKzEpLzIqdGhpcy50cmFuc2Zvcm0ud2lkdGgrMTAwLCgtaVsxXS9pWzNdKzEpLzIqdGhpcy50cmFuc2Zvcm0uaGVpZ2h0KzEwMCkscGVyc3BlY3RpdmVSYXRpbzouNSt0aGlzLnRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlL2lbM10qLjV9fSxBZS5wcm90b3R5cGUuaXNPZmZzY3JlZW49ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHI8MTAwfHx0Pj10aGlzLnNjcmVlblJpZ2h0Qm91bmRhcnl8fG48MTAwfHxlPnRoaXMuc2NyZWVuQm90dG9tQm91bmRhcnl9O3ZhciBTZT10LmRlZmF1bHQkMTkubGF5b3V0LEVlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMub3BhY2l0eT10P01hdGgubWF4KDAsTWF0aC5taW4oMSx0Lm9wYWNpdHkrKHQucGxhY2VkP2U6LWUpKSk6biYmcj8xOjAsdGhpcy5wbGFjZWQ9cn07RWUucHJvdG90eXBlLmlzSGlkZGVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLm9wYWNpdHkmJiF0aGlzLnBsYWNlZH07dmFyIENlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy50ZXh0PW5ldyBFZSh0P3QudGV4dDpudWxsLGUscixpKSx0aGlzLmljb249bmV3IEVlKHQ/dC5pY29uOm51bGwsZSxuLGkpfTtDZS5wcm90b3R5cGUuaXNIaWRkZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0LmlzSGlkZGVuKCkmJnRoaXMuaWNvbi5pc0hpZGRlbigpfTt2YXIgTGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMudGV4dD10LHRoaXMuaWNvbj1lLHRoaXMuc2tpcEZhZGU9cn0semU9ZnVuY3Rpb24odCxlKXt0aGlzLnRyYW5zZm9ybT10LmNsb25lKCksdGhpcy5jb2xsaXNpb25JbmRleD1uZXcgQWUodGhpcy50cmFuc2Zvcm0pLHRoaXMucGxhY2VtZW50cz17fSx0aGlzLm9wYWNpdGllcz17fSx0aGlzLnN0YWxlPSExLHRoaXMuZmFkZUR1cmF0aW9uPWUsdGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YT17fX07ZnVuY3Rpb24gT2UodCxlLHIpe3QuZW1wbGFjZUJhY2soZT8xOjAscj8xOjApLHQuZW1wbGFjZUJhY2soZT8xOjAscj8xOjApLHQuZW1wbGFjZUJhY2soZT8xOjAscj8xOjApLHQuZW1wbGFjZUJhY2soZT8xOjAscj8xOjApfXplLnByb3RvdHlwZS5wbGFjZUxheWVyVGlsZT1mdW5jdGlvbihlLHIsbixpKXt2YXIgYT1yLmdldEJ1Y2tldChlKSxvPXIubGF0ZXN0RmVhdHVyZUluZGV4O2lmKGEmJm8mJmUuaWQ9PT1hLmxheWVySWRzWzBdKXt2YXIgcz1yLmNvbGxpc2lvbkJveEFycmF5LGw9YS5sYXllcnNbMF0ubGF5b3V0LGM9TWF0aC5wb3coMix0aGlzLnRyYW5zZm9ybS56b29tLXIudGlsZUlELm92ZXJzY2FsZWRaKSx1PXIudGlsZVNpemUvdC5kZWZhdWx0JDgsaD10aGlzLnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgoci50aWxlSUQudG9VbndyYXBwZWQoKSksZj1oZShoLFwibWFwXCI9PT1sLmdldChcInRleHQtcGl0Y2gtYWxpZ25tZW50XCIpLFwibWFwXCI9PT1sLmdldChcInRleHQtcm90YXRpb24tYWxpZ25tZW50XCIpLHRoaXMudHJhbnNmb3JtLE1lKHIsMSx0aGlzLnRyYW5zZm9ybS56b29tKSkscD1oZShoLFwibWFwXCI9PT1sLmdldChcImljb24tcGl0Y2gtYWxpZ25tZW50XCIpLFwibWFwXCI9PT1sLmdldChcImljb24tcm90YXRpb24tYWxpZ25tZW50XCIpLHRoaXMudHJhbnNmb3JtLE1lKHIsMSx0aGlzLnRyYW5zZm9ybS56b29tKSk7dGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YVthLmJ1Y2tldEluc3RhbmNlSWRdPW5ldyBmdW5jdGlvbih0LGUscixuLGkpe3RoaXMuYnVja2V0SW5zdGFuY2VJZD10LHRoaXMuZmVhdHVyZUluZGV4PWUsdGhpcy5zb3VyY2VMYXllckluZGV4PXIsdGhpcy5idWNrZXRJbmRleD1uLHRoaXMudGlsZUlEPWl9KGEuYnVja2V0SW5zdGFuY2VJZCxvLGEuc291cmNlTGF5ZXJJbmRleCxhLmluZGV4LHIudGlsZUlEKSx0aGlzLnBsYWNlTGF5ZXJCdWNrZXQoYSxoLGYscCxjLHUsbixpLHMpfX0semUucHJvdG90eXBlLnBsYWNlTGF5ZXJCdWNrZXQ9ZnVuY3Rpb24oZSxyLG4saSxhLG8scyxsLGMpe2Zvcih2YXIgdT1lLmxheWVyc1swXS5sYXlvdXQsaD10LmV2YWx1YXRlU2l6ZUZvclpvb20oZS50ZXh0U2l6ZURhdGEsdGhpcy50cmFuc2Zvcm0uem9vbSxTZS5wcm9wZXJ0aWVzW1widGV4dC1zaXplXCJdKSxmPSFlLmhhc1RleHREYXRhKCl8fHUuZ2V0KFwidGV4dC1vcHRpb25hbFwiKSxwPSFlLmhhc0ljb25EYXRhKCl8fHUuZ2V0KFwiaWNvbi1vcHRpb25hbFwiKSxkPTAsZz1lLnN5bWJvbEluc3RhbmNlcztkPGcubGVuZ3RoO2QrPTEpe3ZhciB2PWdbZF07aWYoIWxbdi5jcm9zc1RpbGVJRF0pe3ZhciBtPXZvaWQgMCE9PXYuZmVhdHVyZS50ZXh0LHk9dm9pZCAwIT09di5mZWF0dXJlLmljb24seD0hMCxiPW51bGwsXz1udWxsLHc9bnVsbCxrPTAsQT0wO3YuY29sbGlzaW9uQXJyYXlzfHwodi5jb2xsaXNpb25BcnJheXM9ZS5kZXNlcmlhbGl6ZUNvbGxpc2lvbkJveGVzKGMsdi50ZXh0Qm94U3RhcnRJbmRleCx2LnRleHRCb3hFbmRJbmRleCx2Lmljb25Cb3hTdGFydEluZGV4LHYuaWNvbkJveEVuZEluZGV4KSksdi5jb2xsaXNpb25BcnJheXMudGV4dEZlYXR1cmVJbmRleCYmKGs9di5jb2xsaXNpb25BcnJheXMudGV4dEZlYXR1cmVJbmRleCksdi5jb2xsaXNpb25BcnJheXMudGV4dEJveCYmKG09KGI9dGhpcy5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkJveCh2LmNvbGxpc2lvbkFycmF5cy50ZXh0Qm94LHUuZ2V0KFwidGV4dC1hbGxvdy1vdmVybGFwXCIpLG8scikpLmJveC5sZW5ndGg+MCx4PXgmJmIub2Zmc2NyZWVuKTt2YXIgVD12LmNvbGxpc2lvbkFycmF5cy50ZXh0Q2lyY2xlcztpZihUKXt2YXIgTT1lLnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KHYucGxhY2VkVGV4dFN5bWJvbEluZGljZXNbMF0pLFM9dC5ldmFsdWF0ZVNpemVGb3JGZWF0dXJlKGUudGV4dFNpemVEYXRhLGgsTSk7Xz10aGlzLmNvbGxpc2lvbkluZGV4LnBsYWNlQ29sbGlzaW9uQ2lyY2xlcyhULHUuZ2V0KFwidGV4dC1hbGxvdy1vdmVybGFwXCIpLGEsbyx2LmtleSxNLGUubGluZVZlcnRleEFycmF5LGUuZ2x5cGhPZmZzZXRBcnJheSxTLHIsbixzLFwibWFwXCI9PT11LmdldChcInRleHQtcGl0Y2gtYWxpZ25tZW50XCIpKSxtPXUuZ2V0KFwidGV4dC1hbGxvdy1vdmVybGFwXCIpfHxfLmNpcmNsZXMubGVuZ3RoPjAseD14JiZfLm9mZnNjcmVlbn12LmNvbGxpc2lvbkFycmF5cy5pY29uRmVhdHVyZUluZGV4JiYoQT12LmNvbGxpc2lvbkFycmF5cy5pY29uRmVhdHVyZUluZGV4KSx2LmNvbGxpc2lvbkFycmF5cy5pY29uQm94JiYoeT0odz10aGlzLmNvbGxpc2lvbkluZGV4LnBsYWNlQ29sbGlzaW9uQm94KHYuY29sbGlzaW9uQXJyYXlzLmljb25Cb3gsdS5nZXQoXCJpY29uLWFsbG93LW92ZXJsYXBcIiksbyxyKSkuYm94Lmxlbmd0aD4wLHg9eCYmdy5vZmZzY3JlZW4pLGZ8fHA/cD9mfHwoeT15JiZtKTptPXkmJm06eT1tPXkmJm0sbSYmYiYmdGhpcy5jb2xsaXNpb25JbmRleC5pbnNlcnRDb2xsaXNpb25Cb3goYi5ib3gsdS5nZXQoXCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnRcIiksZS5idWNrZXRJbnN0YW5jZUlkLGspLHkmJncmJnRoaXMuY29sbGlzaW9uSW5kZXguaW5zZXJ0Q29sbGlzaW9uQm94KHcuYm94LHUuZ2V0KFwiaWNvbi1pZ25vcmUtcGxhY2VtZW50XCIpLGUuYnVja2V0SW5zdGFuY2VJZCxBKSxtJiZfJiZ0aGlzLmNvbGxpc2lvbkluZGV4Lmluc2VydENvbGxpc2lvbkNpcmNsZXMoXy5jaXJjbGVzLHUuZ2V0KFwidGV4dC1pZ25vcmUtcGxhY2VtZW50XCIpLGUuYnVja2V0SW5zdGFuY2VJZCxrKSx0aGlzLnBsYWNlbWVudHNbdi5jcm9zc1RpbGVJRF09bmV3IExlKG0seSx4fHxlLmp1c3RSZWxvYWRlZCksbFt2LmNyb3NzVGlsZUlEXT0hMH19ZS5qdXN0UmVsb2FkZWQ9ITF9LHplLnByb3RvdHlwZS5jb21taXQ9ZnVuY3Rpb24odCxlKXt0aGlzLmNvbW1pdFRpbWU9ZTt2YXIgcj0hMSxuPXQmJjAhPT10aGlzLmZhZGVEdXJhdGlvbj8odGhpcy5jb21taXRUaW1lLXQuY29tbWl0VGltZSkvdGhpcy5mYWRlRHVyYXRpb246MSxpPXQ/dC5vcGFjaXRpZXM6e307Zm9yKHZhciBhIGluIHRoaXMucGxhY2VtZW50cyl7dmFyIG89dGhpcy5wbGFjZW1lbnRzW2FdLHM9aVthXTtzPyh0aGlzLm9wYWNpdGllc1thXT1uZXcgQ2UocyxuLG8udGV4dCxvLmljb24pLHI9cnx8by50ZXh0IT09cy50ZXh0LnBsYWNlZHx8by5pY29uIT09cy5pY29uLnBsYWNlZCk6KHRoaXMub3BhY2l0aWVzW2FdPW5ldyBDZShudWxsLG4sby50ZXh0LG8uaWNvbixvLnNraXBGYWRlKSxyPXJ8fG8udGV4dHx8by5pY29uKX1mb3IodmFyIGwgaW4gaSl7dmFyIGM9aVtsXTtpZighdGhpcy5vcGFjaXRpZXNbbF0pe3ZhciB1PW5ldyBDZShjLG4sITEsITEpO3UuaXNIaWRkZW4oKXx8KHRoaXMub3BhY2l0aWVzW2xdPXUscj1yfHxjLnRleHQucGxhY2VkfHxjLmljb24ucGxhY2VkKX19cj90aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lPWU6XCJudW1iZXJcIiE9dHlwZW9mIHRoaXMubGFzdFBsYWNlbWVudENoYW5nZVRpbWUmJih0aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lPXQ/dC5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZTplKX0semUucHJvdG90eXBlLnVwZGF0ZUxheWVyT3BhY2l0aWVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dLG89YS5nZXRCdWNrZXQodCk7byYmYS5sYXRlc3RGZWF0dXJlSW5kZXgmJnQuaWQ9PT1vLmxheWVySWRzWzBdJiZ0aGlzLnVwZGF0ZUJ1Y2tldE9wYWNpdGllcyhvLHIsYS5jb2xsaXNpb25Cb3hBcnJheSl9fSx6ZS5wcm90b3R5cGUudXBkYXRlQnVja2V0T3BhY2l0aWVzPWZ1bmN0aW9uKHQsZSxyKXt0Lmhhc1RleHREYXRhKCkmJnQudGV4dC5vcGFjaXR5VmVydGV4QXJyYXkuY2xlYXIoKSx0Lmhhc0ljb25EYXRhKCkmJnQuaWNvbi5vcGFjaXR5VmVydGV4QXJyYXkuY2xlYXIoKSx0Lmhhc0NvbGxpc2lvbkJveERhdGEoKSYmdC5jb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXkuY2xlYXIoKSx0Lmhhc0NvbGxpc2lvbkNpcmNsZURhdGEoKSYmdC5jb2xsaXNpb25DaXJjbGUuY29sbGlzaW9uVmVydGV4QXJyYXkuY2xlYXIoKTtmb3IodmFyIG49dC5sYXllcnNbMF0ubGF5b3V0LGk9bmV3IENlKG51bGwsMCwhMSwhMSwhMCksYT1uZXcgQ2UobnVsbCwwLG4uZ2V0KFwidGV4dC1hbGxvdy1vdmVybGFwXCIpLG4uZ2V0KFwiaWNvbi1hbGxvdy1vdmVybGFwXCIpLCEwKSxvPTA7bzx0LnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7bysrKXt2YXIgcz10LnN5bWJvbEluc3RhbmNlc1tvXSxsPWVbcy5jcm9zc1RpbGVJRF0sYz10aGlzLm9wYWNpdGllc1tzLmNyb3NzVGlsZUlEXTtsP2M9aTpjfHwoYz1hLHRoaXMub3BhY2l0aWVzW3MuY3Jvc3NUaWxlSURdPWMpLGVbcy5jcm9zc1RpbGVJRF09ITA7dmFyIHU9cy5udW1HbHlwaFZlcnRpY2VzPjB8fHMubnVtVmVydGljYWxHbHlwaFZlcnRpY2VzPjAsaD1zLm51bUljb25WZXJ0aWNlcz4wO2lmKHUpe2Zvcih2YXIgZj1qZShjLnRleHQpLHA9KHMubnVtR2x5cGhWZXJ0aWNlcytzLm51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcykvNCxkPTA7ZDxwO2QrKyl0LnRleHQub3BhY2l0eVZlcnRleEFycmF5LmVtcGxhY2VCYWNrKGYpO2Zvcih2YXIgZz0wLHY9cy5wbGFjZWRUZXh0U3ltYm9sSW5kaWNlcztnPHYubGVuZ3RoO2crPTEpe3ZhciBtPXZbZ107dC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChtKS5oaWRkZW49Yy50ZXh0LmlzSGlkZGVuKCl9fWlmKGgpe2Zvcih2YXIgeT1qZShjLmljb24pLHg9MDt4PHMubnVtSWNvblZlcnRpY2VzLzQ7eCsrKXQuaWNvbi5vcGFjaXR5VmVydGV4QXJyYXkuZW1wbGFjZUJhY2soeSk7dC5pY29uLnBsYWNlZFN5bWJvbEFycmF5LmdldChvKS5oaWRkZW49Yy5pY29uLmlzSGlkZGVuKCl9cy5jb2xsaXNpb25BcnJheXN8fChzLmNvbGxpc2lvbkFycmF5cz10LmRlc2VyaWFsaXplQ29sbGlzaW9uQm94ZXMocixzLnRleHRCb3hTdGFydEluZGV4LHMudGV4dEJveEVuZEluZGV4LHMuaWNvbkJveFN0YXJ0SW5kZXgscy5pY29uQm94RW5kSW5kZXgpKTt2YXIgYj1zLmNvbGxpc2lvbkFycmF5cztpZihiKXtiLnRleHRCb3gmJnQuaGFzQ29sbGlzaW9uQm94RGF0YSgpJiZPZSh0LmNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSxjLnRleHQucGxhY2VkLCExKSxiLmljb25Cb3gmJnQuaGFzQ29sbGlzaW9uQm94RGF0YSgpJiZPZSh0LmNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSxjLmljb24ucGxhY2VkLCExKTt2YXIgXz1iLnRleHRDaXJjbGVzO2lmKF8mJnQuaGFzQ29sbGlzaW9uQ2lyY2xlRGF0YSgpKWZvcih2YXIgdz0wO3c8Xy5sZW5ndGg7dys9NSl7dmFyIGs9bHx8MD09PV9bdys0XTtPZSh0LmNvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhBcnJheSxjLnRleHQucGxhY2VkLGspfX19dC5zb3J0RmVhdHVyZXModGhpcy50cmFuc2Zvcm0uYW5nbGUpLHRoaXMucmV0YWluZWRRdWVyeURhdGFbdC5idWNrZXRJbnN0YW5jZUlkXSYmKHRoaXMucmV0YWluZWRRdWVyeURhdGFbdC5idWNrZXRJbnN0YW5jZUlkXS5mZWF0dXJlU29ydE9yZGVyPXQuZmVhdHVyZVNvcnRPcmRlciksdC5oYXNUZXh0RGF0YSgpJiZ0LnRleHQub3BhY2l0eVZlcnRleEJ1ZmZlciYmdC50ZXh0Lm9wYWNpdHlWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YSh0LnRleHQub3BhY2l0eVZlcnRleEFycmF5KSx0Lmhhc0ljb25EYXRhKCkmJnQuaWNvbi5vcGFjaXR5VmVydGV4QnVmZmVyJiZ0Lmljb24ub3BhY2l0eVZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKHQuaWNvbi5vcGFjaXR5VmVydGV4QXJyYXkpLHQuaGFzQ29sbGlzaW9uQm94RGF0YSgpJiZ0LmNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhCdWZmZXImJnQuY29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKHQuY29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5KSx0Lmhhc0NvbGxpc2lvbkNpcmNsZURhdGEoKSYmdC5jb2xsaXNpb25DaXJjbGUuY29sbGlzaW9uVmVydGV4QnVmZmVyJiZ0LmNvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YSh0LmNvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhBcnJheSl9LHplLnByb3RvdHlwZS5zeW1ib2xGYWRlQ2hhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5mYWRlRHVyYXRpb24/MToodC10aGlzLmNvbW1pdFRpbWUpL3RoaXMuZmFkZUR1cmF0aW9ufSx6ZS5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3RhbGV8fHQtdGhpcy5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZTx0aGlzLmZhZGVEdXJhdGlvbn0semUucHJvdG90eXBlLnN0aWxsUmVjZW50PWZ1bmN0aW9uKHQpe3JldHVyblwidW5kZWZpbmVkXCIhPT10aGlzLmNvbW1pdFRpbWUmJnRoaXMuY29tbWl0VGltZSt0aGlzLmZhZGVEdXJhdGlvbj50fSx6ZS5wcm90b3R5cGUuc2V0U3RhbGU9ZnVuY3Rpb24oKXt0aGlzLnN0YWxlPSEwfTt2YXIgSWU9TWF0aC5wb3coMiwyNSksRGU9TWF0aC5wb3coMiwyNCksUGU9TWF0aC5wb3coMiwxNyksUmU9TWF0aC5wb3coMiwxNiksRmU9TWF0aC5wb3coMiw5KSxCZT1NYXRoLnBvdygyLDgpLE5lPU1hdGgucG93KDIsMSk7ZnVuY3Rpb24gamUodCl7aWYoMD09PXQub3BhY2l0eSYmIXQucGxhY2VkKXJldHVybiAwO2lmKDE9PT10Lm9wYWNpdHkmJnQucGxhY2VkKXJldHVybiA0Mjk0OTY3Mjk1O3ZhciBlPXQucGxhY2VkPzE6MCxyPU1hdGguZmxvb3IoMTI3KnQub3BhY2l0eSk7cmV0dXJuIHIqSWUrZSpEZStyKlBlK2UqUmUrcipGZStlKkJlK3IqTmUrZX12YXIgVmU9ZnVuY3Rpb24oKXt0aGlzLl9jdXJyZW50VGlsZUluZGV4PTAsdGhpcy5fc2VlbkNyb3NzVGlsZUlEcz17fX07VmUucHJvdG90eXBlLmNvbnRpbnVlUGxhY2VtZW50PWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKDt0aGlzLl9jdXJyZW50VGlsZUluZGV4PHQubGVuZ3RoOyl7dmFyIGE9dFt0aGlzLl9jdXJyZW50VGlsZUluZGV4XTtpZihlLnBsYWNlTGF5ZXJUaWxlKG4sYSxyLHRoaXMuX3NlZW5Dcm9zc1RpbGVJRHMpLHRoaXMuX2N1cnJlbnRUaWxlSW5kZXgrKyxpKCkpcmV0dXJuITB9fTt2YXIgVWU9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLnBsYWNlbWVudD1uZXcgemUodCxpKSx0aGlzLl9jdXJyZW50UGxhY2VtZW50SW5kZXg9ZS5sZW5ndGgtMSx0aGlzLl9mb3JjZUZ1bGxQbGFjZW1lbnQ9cix0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXM9bix0aGlzLl9kb25lPSExfTtVZS5wcm90b3R5cGUuaXNEb25lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvbmV9LFVlLnByb3RvdHlwZS5jb250aW51ZVBsYWNlbWVudD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXRoaXMsaT1hLm5vdygpLG89ZnVuY3Rpb24oKXt2YXIgdD1hLm5vdygpLWk7cmV0dXJuIW4uX2ZvcmNlRnVsbFBsYWNlbWVudCYmdD4yfTt0aGlzLl9jdXJyZW50UGxhY2VtZW50SW5kZXg+PTA7KXt2YXIgcz1lW3Rbbi5fY3VycmVudFBsYWNlbWVudEluZGV4XV0sbD1uLnBsYWNlbWVudC5jb2xsaXNpb25JbmRleC50cmFuc2Zvcm0uem9vbTtpZihcInN5bWJvbFwiPT09cy50eXBlJiYoIXMubWluem9vbXx8cy5taW56b29tPD1sKSYmKCFzLm1heHpvb218fHMubWF4em9vbT5sKSl7aWYobi5faW5Qcm9ncmVzc0xheWVyfHwobi5faW5Qcm9ncmVzc0xheWVyPW5ldyBWZSksbi5faW5Qcm9ncmVzc0xheWVyLmNvbnRpbnVlUGxhY2VtZW50KHJbcy5zb3VyY2VdLG4ucGxhY2VtZW50LG4uX3Nob3dDb2xsaXNpb25Cb3hlcyxzLG8pKXJldHVybjtkZWxldGUgbi5faW5Qcm9ncmVzc0xheWVyfW4uX2N1cnJlbnRQbGFjZW1lbnRJbmRleC0tfXRoaXMuX2RvbmU9ITB9LFVlLnByb3RvdHlwZS5jb21taXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5wbGFjZW1lbnQuY29tbWl0KHQsZSksdGhpcy5wbGFjZW1lbnR9O3ZhciBxZT01MTIvdC5kZWZhdWx0JDgvMixIZT1mdW5jdGlvbih0LGUscil7dGhpcy50aWxlSUQ9dCx0aGlzLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXM9e30sdGhpcy5idWNrZXRJbnN0YW5jZUlkPXI7Zm9yKHZhciBuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXSxvPWEua2V5O3RoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1tvXXx8KHRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1tvXT1bXSksdGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW29dLnB1c2goe2Nyb3NzVGlsZUlEOmEuY3Jvc3NUaWxlSUQsY29vcmQ6dGhpcy5nZXRTY2FsZWRDb29yZGluYXRlcyhhLHQpfSl9fTtIZS5wcm90b3R5cGUuZ2V0U2NhbGVkQ29vcmRpbmF0ZXM9ZnVuY3Rpb24oZSxyKXt2YXIgbj1yLmNhbm9uaWNhbC56LXRoaXMudGlsZUlELmNhbm9uaWNhbC56LGk9cWUvTWF0aC5wb3coMixuKSxhPWUuYW5jaG9yO3JldHVybnt4Ok1hdGguZmxvb3IoKHIuY2Fub25pY2FsLngqdC5kZWZhdWx0JDgrYS54KSppKSx5Ok1hdGguZmxvb3IoKHIuY2Fub25pY2FsLnkqdC5kZWZhdWx0JDgrYS55KSppKX19LEhlLnByb3RvdHlwZS5maW5kTWF0Y2hlcz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXRoaXMudGlsZUlELmNhbm9uaWNhbC56PGUuY2Fub25pY2FsLno/MTpNYXRoLnBvdygyLHRoaXMudGlsZUlELmNhbm9uaWNhbC56LWUuY2Fub25pY2FsLnopLGk9MCxhPXQ7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO2lmKCFvLmNyb3NzVGlsZUlEKXt2YXIgcz10aGlzLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNbby5rZXldO2lmKHMpZm9yKHZhciBsPXRoaXMuZ2V0U2NhbGVkQ29vcmRpbmF0ZXMobyxlKSxjPTAsdT1zO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGg9dVtjXTtpZihNYXRoLmFicyhoLmNvb3JkLngtbC54KTw9biYmTWF0aC5hYnMoaC5jb29yZC55LWwueSk8PW4mJiFyW2guY3Jvc3NUaWxlSURdKXtyW2guY3Jvc3NUaWxlSURdPSEwLG8uY3Jvc3NUaWxlSUQ9aC5jcm9zc1RpbGVJRDticmVha319fX19O3ZhciBHZT1mdW5jdGlvbigpe3RoaXMubWF4Q3Jvc3NUaWxlSUQ9MH07R2UucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLm1heENyb3NzVGlsZUlEfTt2YXIgWWU9ZnVuY3Rpb24oKXt0aGlzLmluZGV4ZXM9e30sdGhpcy51c2VkQ3Jvc3NUaWxlSURzPXt9LHRoaXMubG5nPTB9O1llLnByb3RvdHlwZS5oYW5kbGVXcmFwSnVtcD1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLnJvdW5kKCh0LXRoaXMubG5nKS8zNjApO2lmKDAhPT1lKWZvcih2YXIgciBpbiB0aGlzLmluZGV4ZXMpe3ZhciBuPXRoaXMuaW5kZXhlc1tyXSxpPXt9O2Zvcih2YXIgYSBpbiBuKXt2YXIgbz1uW2FdO28udGlsZUlEPW8udGlsZUlELnVud3JhcFRvKG8udGlsZUlELndyYXArZSksaVtvLnRpbGVJRC5rZXldPW99dGhpcy5pbmRleGVzW3JdPWl9dGhpcy5sbmc9dH0sWWUucHJvdG90eXBlLmFkZEJ1Y2tldD1mdW5jdGlvbih0LGUscil7aWYodGhpcy5pbmRleGVzW3Qub3ZlcnNjYWxlZFpdJiZ0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl1bdC5rZXldKXtpZih0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl1bdC5rZXldLmJ1Y2tldEluc3RhbmNlSWQ9PT1lLmJ1Y2tldEluc3RhbmNlSWQpcmV0dXJuITE7dGhpcy5yZW1vdmVCdWNrZXRDcm9zc1RpbGVJRHModC5vdmVyc2NhbGVkWix0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl1bdC5rZXldKX1mb3IodmFyIG49MCxpPWUuc3ltYm9sSW5zdGFuY2VzO248aS5sZW5ndGg7bis9MSlpW25dLmNyb3NzVGlsZUlEPTA7dGhpcy51c2VkQ3Jvc3NUaWxlSURzW3Qub3ZlcnNjYWxlZFpdfHwodGhpcy51c2VkQ3Jvc3NUaWxlSURzW3Qub3ZlcnNjYWxlZFpdPXt9KTt2YXIgYT10aGlzLnVzZWRDcm9zc1RpbGVJRHNbdC5vdmVyc2NhbGVkWl07Zm9yKHZhciBvIGluIHRoaXMuaW5kZXhlcyl7dmFyIHM9dGhpcy5pbmRleGVzW29dO2lmKE51bWJlcihvKT50Lm92ZXJzY2FsZWRaKWZvcih2YXIgbCBpbiBzKXt2YXIgYz1zW2xdO2MudGlsZUlELmlzQ2hpbGRPZih0KSYmYy5maW5kTWF0Y2hlcyhlLnN5bWJvbEluc3RhbmNlcyx0LGEpfWVsc2V7dmFyIHU9c1t0LnNjYWxlZFRvKE51bWJlcihvKSkua2V5XTt1JiZ1LmZpbmRNYXRjaGVzKGUuc3ltYm9sSW5zdGFuY2VzLHQsYSl9fWZvcih2YXIgaD0wLGY9ZS5zeW1ib2xJbnN0YW5jZXM7aDxmLmxlbmd0aDtoKz0xKXt2YXIgcD1mW2hdO3AuY3Jvc3NUaWxlSUR8fChwLmNyb3NzVGlsZUlEPXIuZ2VuZXJhdGUoKSxhW3AuY3Jvc3NUaWxlSURdPSEwKX1yZXR1cm4gdm9pZCAwPT09dGhpcy5pbmRleGVzW3Qub3ZlcnNjYWxlZFpdJiYodGhpcy5pbmRleGVzW3Qub3ZlcnNjYWxlZFpdPXt9KSx0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl1bdC5rZXldPW5ldyBIZSh0LGUuc3ltYm9sSW5zdGFuY2VzLGUuYnVja2V0SW5zdGFuY2VJZCksITB9LFllLnByb3RvdHlwZS5yZW1vdmVCdWNrZXRDcm9zc1RpbGVJRHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gZS5pbmRleGVkU3ltYm9sSW5zdGFuY2VzKWZvcih2YXIgbj0wLGk9ZS5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW3JdO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtkZWxldGUgdGhpcy51c2VkQ3Jvc3NUaWxlSURzW3RdW2EuY3Jvc3NUaWxlSURdfX0sWWUucHJvdG90eXBlLnJlbW92ZVN0YWxlQnVja2V0cz1mdW5jdGlvbih0KXt2YXIgZT0hMTtmb3IodmFyIHIgaW4gdGhpcy5pbmRleGVzKXt2YXIgbj10aGlzLmluZGV4ZXNbcl07Zm9yKHZhciBpIGluIG4pdFtuW2ldLmJ1Y2tldEluc3RhbmNlSWRdfHwodGhpcy5yZW1vdmVCdWNrZXRDcm9zc1RpbGVJRHMocixuW2ldKSxkZWxldGUgbltpXSxlPSEwKX1yZXR1cm4gZX07dmFyIFdlPWZ1bmN0aW9uKCl7dGhpcy5sYXllckluZGV4ZXM9e30sdGhpcy5jcm9zc1RpbGVJRHM9bmV3IEdlLHRoaXMubWF4QnVja2V0SW5zdGFuY2VJZD0wLHRoaXMuYnVja2V0c0luQ3VycmVudFBsYWNlbWVudD17fX07V2UucHJvdG90eXBlLmFkZExheWVyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmxheWVySW5kZXhlc1t0LmlkXTt2b2lkIDA9PT1uJiYobj10aGlzLmxheWVySW5kZXhlc1t0LmlkXT1uZXcgWWUpO3ZhciBpPSExLGE9e307bi5oYW5kbGVXcmFwSnVtcChyKTtmb3IodmFyIG89MCxzPWU7bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dLGM9bC5nZXRCdWNrZXQodCk7YyYmdC5pZD09PWMubGF5ZXJJZHNbMF0mJihjLmJ1Y2tldEluc3RhbmNlSWR8fChjLmJ1Y2tldEluc3RhbmNlSWQ9Kyt0aGlzLm1heEJ1Y2tldEluc3RhbmNlSWQpLG4uYWRkQnVja2V0KGwudGlsZUlELGMsdGhpcy5jcm9zc1RpbGVJRHMpJiYoaT0hMCksYVtjLmJ1Y2tldEluc3RhbmNlSWRdPSEwKX1yZXR1cm4gbi5yZW1vdmVTdGFsZUJ1Y2tldHMoYSkmJihpPSEwKSxpfSxXZS5wcm90b3R5cGUucHJ1bmVVbnVzZWRMYXllcnM9ZnVuY3Rpb24odCl7dmFyIGU9e307Zm9yKHZhciByIGluIHQuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPSEwfSksdGhpcy5sYXllckluZGV4ZXMpZVtyXXx8ZGVsZXRlIHRoaXMubGF5ZXJJbmRleGVzW3JdfTt2YXIgWGU9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5lbWl0VmFsaWRhdGlvbkVycm9ycyhlLHImJnIuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVyblwic291cmNlLmNhbnZhc1wiIT09dC5pZGVudGlmaWVyfSkpfSxaZT10LnBpY2soZWUsW1wiYWRkTGF5ZXJcIixcInJlbW92ZUxheWVyXCIsXCJzZXRQYWludFByb3BlcnR5XCIsXCJzZXRMYXlvdXRQcm9wZXJ0eVwiLFwic2V0RmlsdGVyXCIsXCJhZGRTb3VyY2VcIixcInJlbW92ZVNvdXJjZVwiLFwic2V0TGF5ZXJab29tUmFuZ2VcIixcInNldExpZ2h0XCIsXCJzZXRUcmFuc2l0aW9uXCIsXCJzZXRHZW9KU09OU291cmNlRGF0YVwiXSksJGU9dC5waWNrKGVlLFtcInNldENlbnRlclwiLFwic2V0Wm9vbVwiLFwic2V0QmVhcmluZ1wiLFwic2V0UGl0Y2hcIl0pLEplPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIobixpKXt2YXIgYT10aGlzO3ZvaWQgMD09PWkmJihpPXt9KSxlLmNhbGwodGhpcyksdGhpcy5tYXA9bix0aGlzLmRpc3BhdGNoZXI9bmV3IHEoKEp0fHwoSnQ9bmV3IEt0KSxKdCksdGhpcyksdGhpcy5pbWFnZU1hbmFnZXI9bmV3IE8sdGhpcy5nbHlwaE1hbmFnZXI9bmV3IEIobi5fdHJhbnNmb3JtUmVxdWVzdCxpLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseSksdGhpcy5saW5lQXRsYXM9bmV3IFUoMjU2LDUxMiksdGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleD1uZXcgV2UsdGhpcy5fbGF5ZXJzPXt9LHRoaXMuX29yZGVyPVtdLHRoaXMuc291cmNlQ2FjaGVzPXt9LHRoaXMuem9vbUhpc3Rvcnk9bmV3IHQuZGVmYXVsdCQyMyx0aGlzLl9sb2FkZWQ9ITEsdGhpcy5fcmVzZXRVcGRhdGVzKCk7dmFyIG89dGhpczt0aGlzLl9ydGxUZXh0UGx1Z2luQ2FsbGJhY2s9ci5yZWdpc3RlckZvclBsdWdpbkF2YWlsYWJpbGl0eShmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gby5kaXNwYXRjaGVyLmJyb2FkY2FzdChcImxvYWRSVExUZXh0UGx1Z2luXCIsdC5wbHVnaW5VUkwsdC5jb21wbGV0aW9uQ2FsbGJhY2spLG8uc291cmNlQ2FjaGVzKW8uc291cmNlQ2FjaGVzW2VdLnJlbG9hZCgpfSksdGhpcy5vbihcImRhdGFcIixmdW5jdGlvbih0KXtpZihcInNvdXJjZVwiPT09dC5kYXRhVHlwZSYmXCJtZXRhZGF0YVwiPT09dC5zb3VyY2VEYXRhVHlwZSl7dmFyIGU9YS5zb3VyY2VDYWNoZXNbdC5zb3VyY2VJZF07aWYoZSl7dmFyIHI9ZS5nZXRTb3VyY2UoKTtpZihyJiZyLnZlY3RvckxheWVySWRzKWZvcih2YXIgbiBpbiBhLl9sYXllcnMpe3ZhciBpPWEuX2xheWVyc1tuXTtpLnNvdXJjZT09PXIuaWQmJmEuX3ZhbGlkYXRlTGF5ZXIoaSl9fX19KX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZFVSTD1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7dm9pZCAwPT09ciYmKHI9e30pLHRoaXMuZmlyZShuZXcgdC5FdmVudChcImRhdGFsb2FkaW5nXCIse2RhdGFUeXBlOlwic3R5bGVcIn0pKTt2YXIgaT1cImJvb2xlYW5cIj09dHlwZW9mIHIudmFsaWRhdGU/ci52YWxpZGF0ZToheChlKTtlPWZ1bmN0aW9uKHQsZSl7aWYoIXgodCkpcmV0dXJuIHQ7dmFyIHI9VCh0KTtyZXR1cm4gci5wYXRoPVwiL3N0eWxlcy92MVwiK3IucGF0aCx5KHIsZSl9KGUsci5hY2Nlc3NUb2tlbik7dmFyIGE9dGhpcy5tYXAuX3RyYW5zZm9ybVJlcXVlc3QoZSx0LlJlc291cmNlVHlwZS5TdHlsZSk7dC5nZXRKU09OKGEsZnVuY3Rpb24oZSxyKXtlP24uZmlyZShuZXcgdC5FcnJvckV2ZW50KGUpKTpyJiZuLl9sb2FkKHIsaSl9KX0sci5wcm90b3R5cGUubG9hZEpTT049ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO3ZvaWQgMD09PXImJihyPXt9KSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhbG9hZGluZ1wiLHtkYXRhVHlwZTpcInN0eWxlXCJ9KSksYS5mcmFtZShmdW5jdGlvbigpe24uX2xvYWQoZSwhMSE9PXIudmFsaWRhdGUpfSl9LHIucHJvdG90eXBlLl9sb2FkPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcztpZighcnx8IVhlKHRoaXMsdC52YWxpZGF0ZVN0eWxlKGUpKSl7Zm9yKHZhciBpIGluIHRoaXMuX2xvYWRlZD0hMCx0aGlzLnN0eWxlc2hlZXQ9ZSxlLnNvdXJjZXMpbi5hZGRTb3VyY2UoaSxlLnNvdXJjZXNbaV0se3ZhbGlkYXRlOiExfSk7ZS5zcHJpdGU/ZnVuY3Rpb24oZSxyLG4pe3ZhciBpLG8scyxsPWEuZGV2aWNlUGl4ZWxSYXRpbz4xP1wiQDJ4XCI6XCJcIjtmdW5jdGlvbiBjKCl7aWYocyluKHMpO2Vsc2UgaWYoaSYmbyl7dmFyIGU9YS5nZXRJbWFnZURhdGEobykscj17fTtmb3IodmFyIGwgaW4gaSl7dmFyIGM9aVtsXSx1PWMud2lkdGgsaD1jLmhlaWdodCxmPWMueCxwPWMueSxkPWMuc2RmLGc9Yy5waXhlbFJhdGlvLHY9bmV3IHQuUkdCQUltYWdlKHt3aWR0aDp1LGhlaWdodDpofSk7dC5SR0JBSW1hZ2UuY29weShlLHYse3g6Zix5OnB9LHt4OjAseTowfSx7d2lkdGg6dSxoZWlnaHQ6aH0pLHJbbF09e2RhdGE6dixwaXhlbFJhdGlvOmcsc2RmOmR9fW4obnVsbCxyKX19dC5nZXRKU09OKHIoXyhlLGwsXCIuanNvblwiKSx0LlJlc291cmNlVHlwZS5TcHJpdGVKU09OKSxmdW5jdGlvbih0LGUpe3N8fChzPXQsaT1lLGMoKSl9KSx0LmdldEltYWdlKHIoXyhlLGwsXCIucG5nXCIpLHQuUmVzb3VyY2VUeXBlLlNwcml0ZUltYWdlKSxmdW5jdGlvbih0LGUpe3N8fChzPXQsbz1lLGMoKSl9KX0oZS5zcHJpdGUsdGhpcy5tYXAuX3RyYW5zZm9ybVJlcXVlc3QsZnVuY3Rpb24oZSxyKXtpZihlKW4uZmlyZShuZXcgdC5FcnJvckV2ZW50KGUpKTtlbHNlIGlmKHIpZm9yKHZhciBpIGluIHIpbi5pbWFnZU1hbmFnZXIuYWRkSW1hZ2UoaSxyW2ldKTtuLmltYWdlTWFuYWdlci5zZXRMb2FkZWQoITApLG4uZmlyZShuZXcgdC5FdmVudChcImRhdGFcIix7ZGF0YVR5cGU6XCJzdHlsZVwifSkpfSk6dGhpcy5pbWFnZU1hbmFnZXIuc2V0TG9hZGVkKCEwKSx0aGlzLmdseXBoTWFuYWdlci5zZXRVUkwoZS5nbHlwaHMpO3ZhciBvPXRlKHRoaXMuc3R5bGVzaGVldC5sYXllcnMpO3RoaXMuX29yZGVyPW8ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSksdGhpcy5fbGF5ZXJzPXt9O2Zvcih2YXIgcz0wLGw9bztzPGwubGVuZ3RoO3MrPTEpe3ZhciBjPWxbc107KGM9dC5kZWZhdWx0JDIyKGMpKS5zZXRFdmVudGVkUGFyZW50KG4se2xheWVyOntpZDpjLmlkfX0pLG4uX2xheWVyc1tjLmlkXT1jfXRoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QoXCJzZXRMYXllcnNcIix0aGlzLl9zZXJpYWxpemVMYXllcnModGhpcy5fb3JkZXIpKSx0aGlzLmxpZ2h0PW5ldyBWKHRoaXMuc3R5bGVzaGVldC5saWdodCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YVwiLHtkYXRhVHlwZTpcInN0eWxlXCJ9KSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwic3R5bGUubG9hZFwiKSl9fSxyLnByb3RvdHlwZS5fdmFsaWRhdGVMYXllcj1mdW5jdGlvbihlKXt2YXIgcj10aGlzLnNvdXJjZUNhY2hlc1tlLnNvdXJjZV07aWYocil7dmFyIG49ZS5zb3VyY2VMYXllcjtpZihuKXt2YXIgaT1yLmdldFNvdXJjZSgpOyhcImdlb2pzb25cIj09PWkudHlwZXx8aS52ZWN0b3JMYXllcklkcyYmLTE9PT1pLnZlY3RvckxheWVySWRzLmluZGV4T2YobikpJiZ0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ1NvdXJjZSBsYXllciBcIicrbisnXCIgZG9lcyBub3QgZXhpc3Qgb24gc291cmNlIFwiJytpLmlkKydcIiBhcyBzcGVjaWZpZWQgYnkgc3R5bGUgbGF5ZXIgXCInK2UuaWQrJ1wiJykpKX19fSxyLnByb3RvdHlwZS5sb2FkZWQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkKXJldHVybiExO2lmKE9iamVjdC5rZXlzKHRoaXMuX3VwZGF0ZWRTb3VyY2VzKS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciB0IGluIHRoaXMuc291cmNlQ2FjaGVzKWlmKCF0aGlzLnNvdXJjZUNhY2hlc1t0XS5sb2FkZWQoKSlyZXR1cm4hMTtyZXR1cm4hIXRoaXMuaW1hZ2VNYW5hZ2VyLmlzTG9hZGVkKCl9LHIucHJvdG90eXBlLl9zZXJpYWxpemVMYXllcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xheWVyc1t0XS5zZXJpYWxpemUoKX0pfSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9ucz1mdW5jdGlvbigpe2lmKHRoaXMubGlnaHQmJnRoaXMubGlnaHQuaGFzVHJhbnNpdGlvbigpKXJldHVybiEwO2Zvcih2YXIgdCBpbiB0aGlzLnNvdXJjZUNhY2hlcylpZih0aGlzLnNvdXJjZUNhY2hlc1t0XS5oYXNUcmFuc2l0aW9uKCkpcmV0dXJuITA7Zm9yKHZhciBlIGluIHRoaXMuX2xheWVycylpZih0aGlzLl9sYXllcnNbZV0uaGFzVHJhbnNpdGlvbigpKXJldHVybiEwO3JldHVybiExfSxyLnByb3RvdHlwZS5fY2hlY2tMb2FkZWQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkKXRocm93IG5ldyBFcnJvcihcIlN0eWxlIGlzIG5vdCBkb25lIGxvYWRpbmdcIil9LHIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlKXtpZih0aGlzLl9sb2FkZWQpe2lmKHRoaXMuX2NoYW5nZWQpe3ZhciByPU9iamVjdC5rZXlzKHRoaXMuX3VwZGF0ZWRMYXllcnMpLG49T2JqZWN0LmtleXModGhpcy5fcmVtb3ZlZExheWVycyk7Zm9yKHZhciBpIGluKHIubGVuZ3RofHxuLmxlbmd0aCkmJnRoaXMuX3VwZGF0ZVdvcmtlckxheWVycyhyLG4pLHRoaXMuX3VwZGF0ZWRTb3VyY2VzKXt2YXIgYT10aGlzLl91cGRhdGVkU291cmNlc1tpXTtcInJlbG9hZFwiPT09YT90aGlzLl9yZWxvYWRTb3VyY2UoaSk6XCJjbGVhclwiPT09YSYmdGhpcy5fY2xlYXJTb3VyY2UoaSl9Zm9yKHZhciBvIGluIHRoaXMuX3VwZGF0ZWRQYWludFByb3BzKXRoaXMuX2xheWVyc1tvXS51cGRhdGVUcmFuc2l0aW9ucyhlKTt0aGlzLmxpZ2h0LnVwZGF0ZVRyYW5zaXRpb25zKGUpLHRoaXMuX3Jlc2V0VXBkYXRlcygpLHRoaXMuZmlyZShuZXcgdC5FdmVudChcImRhdGFcIix7ZGF0YVR5cGU6XCJzdHlsZVwifSkpfWZvcih2YXIgcyBpbiB0aGlzLnNvdXJjZUNhY2hlcyl0aGlzLnNvdXJjZUNhY2hlc1tzXS51c2VkPSExO2Zvcih2YXIgbD0wLGM9dGhpcy5fb3JkZXI7bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdLGg9dGhpcy5fbGF5ZXJzW3VdO2gucmVjYWxjdWxhdGUoZSksIWguaXNIaWRkZW4oZS56b29tKSYmaC5zb3VyY2UmJih0aGlzLnNvdXJjZUNhY2hlc1toLnNvdXJjZV0udXNlZD0hMCl9dGhpcy5saWdodC5yZWNhbGN1bGF0ZShlKSx0aGlzLno9ZS56b29tfX0sci5wcm90b3R5cGUuX3VwZGF0ZVdvcmtlckxheWVycz1mdW5jdGlvbih0LGUpe3RoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QoXCJ1cGRhdGVMYXllcnNcIix7bGF5ZXJzOnRoaXMuX3NlcmlhbGl6ZUxheWVycyh0KSxyZW1vdmVkSWRzOmV9KX0sci5wcm90b3R5cGUuX3Jlc2V0VXBkYXRlcz1mdW5jdGlvbigpe3RoaXMuX2NoYW5nZWQ9ITEsdGhpcy5fdXBkYXRlZExheWVycz17fSx0aGlzLl9yZW1vdmVkTGF5ZXJzPXt9LHRoaXMuX3VwZGF0ZWRTb3VyY2VzPXt9LHRoaXMuX3VwZGF0ZWRQYWludFByb3BzPXt9fSxyLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzO2lmKHRoaXMuX2NoZWNrTG9hZGVkKCksWGUodGhpcyx0LnZhbGlkYXRlU3R5bGUoZSkpKXJldHVybiExOyhlPXQuY2xvbmUoZSkpLmxheWVycz10ZShlLmxheWVycyk7dmFyIG49ZnVuY3Rpb24oZSxyKXtpZighZSlyZXR1cm5be2NvbW1hbmQ6ZWUuc2V0U3R5bGUsYXJnczpbcl19XTt2YXIgbj1bXTt0cnl7aWYoIXQuZGVmYXVsdCQxMChlLnZlcnNpb24sci52ZXJzaW9uKSlyZXR1cm5be2NvbW1hbmQ6ZWUuc2V0U3R5bGUsYXJnczpbcl19XTt0LmRlZmF1bHQkMTAoZS5jZW50ZXIsci5jZW50ZXIpfHxuLnB1c2goe2NvbW1hbmQ6ZWUuc2V0Q2VudGVyLGFyZ3M6W3IuY2VudGVyXX0pLHQuZGVmYXVsdCQxMChlLnpvb20sci56b29tKXx8bi5wdXNoKHtjb21tYW5kOmVlLnNldFpvb20sYXJnczpbci56b29tXX0pLHQuZGVmYXVsdCQxMChlLmJlYXJpbmcsci5iZWFyaW5nKXx8bi5wdXNoKHtjb21tYW5kOmVlLnNldEJlYXJpbmcsYXJnczpbci5iZWFyaW5nXX0pLHQuZGVmYXVsdCQxMChlLnBpdGNoLHIucGl0Y2gpfHxuLnB1c2goe2NvbW1hbmQ6ZWUuc2V0UGl0Y2gsYXJnczpbci5waXRjaF19KSx0LmRlZmF1bHQkMTAoZS5zcHJpdGUsci5zcHJpdGUpfHxuLnB1c2goe2NvbW1hbmQ6ZWUuc2V0U3ByaXRlLGFyZ3M6W3Iuc3ByaXRlXX0pLHQuZGVmYXVsdCQxMChlLmdseXBocyxyLmdseXBocyl8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRHbHlwaHMsYXJnczpbci5nbHlwaHNdfSksdC5kZWZhdWx0JDEwKGUudHJhbnNpdGlvbixyLnRyYW5zaXRpb24pfHxuLnB1c2goe2NvbW1hbmQ6ZWUuc2V0VHJhbnNpdGlvbixhcmdzOltyLnRyYW5zaXRpb25dfSksdC5kZWZhdWx0JDEwKGUubGlnaHQsci5saWdodCl8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRMaWdodCxhcmdzOltyLmxpZ2h0XX0pO3ZhciBpPXt9LGE9W107IWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhO2ZvcihhIGluIHI9cnx8e30sZT1lfHx7fSllLmhhc093blByb3BlcnR5KGEpJiYoci5oYXNPd25Qcm9wZXJ0eShhKXx8bmUoYSxuLGkpKTtmb3IoYSBpbiByKXIuaGFzT3duUHJvcGVydHkoYSkmJihlLmhhc093blByb3BlcnR5KGEpP3QuZGVmYXVsdCQxMChlW2FdLHJbYV0pfHwoXCJnZW9qc29uXCI9PT1lW2FdLnR5cGUmJlwiZ2VvanNvblwiPT09clthXS50eXBlJiZhZShlLHIsYSk/bi5wdXNoKHtjb21tYW5kOmVlLnNldEdlb0pTT05Tb3VyY2VEYXRhLGFyZ3M6W2EsclthXS5kYXRhXX0pOmllKGEscixuLGkpKTpyZShhLHIsbikpfShlLnNvdXJjZXMsci5zb3VyY2VzLGEsaSk7dmFyIG89W107ZS5sYXllcnMmJmUubGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7aVt0LnNvdXJjZV0/bi5wdXNoKHtjb21tYW5kOmVlLnJlbW92ZUxheWVyLGFyZ3M6W3QuaWRdfSk6by5wdXNoKHQpfSksbj1uLmNvbmNhdChhKSxmdW5jdGlvbihlLHIsbil7cj1yfHxbXTt2YXIgaSxhLG8scyxsLGMsdSxoPShlPWV8fFtdKS5tYXAoc2UpLGY9ci5tYXAoc2UpLHA9ZS5yZWR1Y2UobGUse30pLGQ9ci5yZWR1Y2UobGUse30pLGc9aC5zbGljZSgpLHY9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IoaT0wLGE9MDtpPGgubGVuZ3RoO2krKylvPWhbaV0sZC5oYXNPd25Qcm9wZXJ0eShvKT9hKys6KG4ucHVzaCh7Y29tbWFuZDplZS5yZW1vdmVMYXllcixhcmdzOltvXX0pLGcuc3BsaWNlKGcuaW5kZXhPZihvLGEpLDEpKTtmb3IoaT0wLGE9MDtpPGYubGVuZ3RoO2krKylvPWZbZi5sZW5ndGgtMS1pXSxnW2cubGVuZ3RoLTEtaV0hPT1vJiYocC5oYXNPd25Qcm9wZXJ0eShvKT8obi5wdXNoKHtjb21tYW5kOmVlLnJlbW92ZUxheWVyLGFyZ3M6W29dfSksZy5zcGxpY2UoZy5sYXN0SW5kZXhPZihvLGcubGVuZ3RoLWEpLDEpKTphKyssYz1nW2cubGVuZ3RoLWldLG4ucHVzaCh7Y29tbWFuZDplZS5hZGRMYXllcixhcmdzOltkW29dLGNdfSksZy5zcGxpY2UoZy5sZW5ndGgtaSwwLG8pLHZbb109ITApO2ZvcihpPTA7aTxmLmxlbmd0aDtpKyspaWYocz1wW289ZltpXV0sbD1kW29dLCF2W29dJiYhdC5kZWZhdWx0JDEwKHMsbCkpaWYodC5kZWZhdWx0JDEwKHMuc291cmNlLGwuc291cmNlKSYmdC5kZWZhdWx0JDEwKHNbXCJzb3VyY2UtbGF5ZXJcIl0sbFtcInNvdXJjZS1sYXllclwiXSkmJnQuZGVmYXVsdCQxMChzLnR5cGUsbC50eXBlKSl7Zm9yKHUgaW4gb2Uocy5sYXlvdXQsbC5sYXlvdXQsbixvLG51bGwsZWUuc2V0TGF5b3V0UHJvcGVydHkpLG9lKHMucGFpbnQsbC5wYWludCxuLG8sbnVsbCxlZS5zZXRQYWludFByb3BlcnR5KSx0LmRlZmF1bHQkMTAocy5maWx0ZXIsbC5maWx0ZXIpfHxuLnB1c2goe2NvbW1hbmQ6ZWUuc2V0RmlsdGVyLGFyZ3M6W28sbC5maWx0ZXJdfSksdC5kZWZhdWx0JDEwKHMubWluem9vbSxsLm1pbnpvb20pJiZ0LmRlZmF1bHQkMTAocy5tYXh6b29tLGwubWF4em9vbSl8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRMYXllclpvb21SYW5nZSxhcmdzOltvLGwubWluem9vbSxsLm1heHpvb21dfSkscylzLmhhc093blByb3BlcnR5KHUpJiZcImxheW91dFwiIT09dSYmXCJwYWludFwiIT09dSYmXCJmaWx0ZXJcIiE9PXUmJlwibWV0YWRhdGFcIiE9PXUmJlwibWluem9vbVwiIT09dSYmXCJtYXh6b29tXCIhPT11JiYoMD09PXUuaW5kZXhPZihcInBhaW50LlwiKT9vZShzW3VdLGxbdV0sbixvLHUuc2xpY2UoNiksZWUuc2V0UGFpbnRQcm9wZXJ0eSk6dC5kZWZhdWx0JDEwKHNbdV0sbFt1XSl8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRMYXllclByb3BlcnR5LGFyZ3M6W28sdSxsW3VdXX0pKTtmb3IodSBpbiBsKWwuaGFzT3duUHJvcGVydHkodSkmJiFzLmhhc093blByb3BlcnR5KHUpJiZcImxheW91dFwiIT09dSYmXCJwYWludFwiIT09dSYmXCJmaWx0ZXJcIiE9PXUmJlwibWV0YWRhdGFcIiE9PXUmJlwibWluem9vbVwiIT09dSYmXCJtYXh6b29tXCIhPT11JiYoMD09PXUuaW5kZXhPZihcInBhaW50LlwiKT9vZShzW3VdLGxbdV0sbixvLHUuc2xpY2UoNiksZWUuc2V0UGFpbnRQcm9wZXJ0eSk6dC5kZWZhdWx0JDEwKHNbdV0sbFt1XSl8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRMYXllclByb3BlcnR5LGFyZ3M6W28sdSxsW3VdXX0pKX1lbHNlIG4ucHVzaCh7Y29tbWFuZDplZS5yZW1vdmVMYXllcixhcmdzOltvXX0pLGM9Z1tnLmxhc3RJbmRleE9mKG8pKzFdLG4ucHVzaCh7Y29tbWFuZDplZS5hZGRMYXllcixhcmdzOltsLGNdfSl9KG8sci5sYXllcnMsbil9Y2F0Y2godCl7Y29uc29sZS53YXJuKFwiVW5hYmxlIHRvIGNvbXB1dGUgc3R5bGUgZGlmZjpcIix0KSxuPVt7Y29tbWFuZDplZS5zZXRTdHlsZSxhcmdzOltyXX1dfXJldHVybiBufSh0aGlzLnNlcmlhbGl6ZSgpLGUpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hKHQuY29tbWFuZCBpbiAkZSl9KTtpZigwPT09bi5sZW5ndGgpcmV0dXJuITE7dmFyIGk9bi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuISh0LmNvbW1hbmQgaW4gWmUpfSk7aWYoaS5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoXCJVbmltcGxlbWVudGVkOiBcIitpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb21tYW5kfSkuam9pbihcIiwgXCIpK1wiLlwiKTtyZXR1cm4gbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe1wic2V0VHJhbnNpdGlvblwiIT09dC5jb21tYW5kJiZyW3QuY29tbWFuZF0uYXBwbHkocix0LmFyZ3MpfSksdGhpcy5zdHlsZXNoZWV0PWUsITB9LHIucHJvdG90eXBlLmFkZEltYWdlPWZ1bmN0aW9uKGUscil7aWYodGhpcy5nZXRJbWFnZShlKSlyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKFwiQW4gaW1hZ2Ugd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMuXCIpKSk7dGhpcy5pbWFnZU1hbmFnZXIuYWRkSW1hZ2UoZSxyKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJkYXRhXCIse2RhdGFUeXBlOlwic3R5bGVcIn0pKX0sci5wcm90b3R5cGUuZ2V0SW1hZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW1hZ2VNYW5hZ2VyLmdldEltYWdlKHQpfSxyLnByb3RvdHlwZS5yZW1vdmVJbWFnZT1mdW5jdGlvbihlKXtpZighdGhpcy5nZXRJbWFnZShlKSlyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKFwiTm8gaW1hZ2Ugd2l0aCB0aGlzIG5hbWUgZXhpc3RzLlwiKSkpO3RoaXMuaW1hZ2VNYW5hZ2VyLnJlbW92ZUltYWdlKGUpLHRoaXMuZmlyZShuZXcgdC5FdmVudChcImRhdGFcIix7ZGF0YVR5cGU6XCJzdHlsZVwifSkpfSxyLnByb3RvdHlwZS5hZGRTb3VyY2U9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXRoaXM7aWYodGhpcy5fY2hlY2tMb2FkZWQoKSx2b2lkIDAhPT10aGlzLnNvdXJjZUNhY2hlc1tlXSl0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBhbHJlYWR5IGEgc291cmNlIHdpdGggdGhpcyBJRFwiKTtpZighci50eXBlKXRocm93IG5ldyBFcnJvcihcIlRoZSB0eXBlIHByb3BlcnR5IG11c3QgYmUgZGVmaW5lZCwgYnV0IHRoZSBvbmx5IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyB3ZXJlIGdpdmVuOiBcIitPYmplY3Qua2V5cyhyKS5qb2luKFwiLCBcIikrXCIuXCIpO2lmKCEoW1widmVjdG9yXCIsXCJyYXN0ZXJcIixcImdlb2pzb25cIixcInZpZGVvXCIsXCJpbWFnZVwiXS5pbmRleE9mKHIudHlwZSk+PTAmJnRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVTdHlsZS5zb3VyY2UsXCJzb3VyY2VzLlwiK2UscixudWxsLG4pKSl7dGhpcy5tYXAmJnRoaXMubWFwLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcmJihyLmNvbGxlY3RSZXNvdXJjZVRpbWluZz0hMCk7dmFyIGE9dGhpcy5zb3VyY2VDYWNoZXNbZV09bmV3IFd0KGUscix0aGlzLmRpc3BhdGNoZXIpO2Euc3R5bGU9dGhpcyxhLnNldEV2ZW50ZWRQYXJlbnQodGhpcyxmdW5jdGlvbigpe3JldHVybntpc1NvdXJjZUxvYWRlZDppLmxvYWRlZCgpLHNvdXJjZTphLnNlcmlhbGl6ZSgpLHNvdXJjZUlkOmV9fSksYS5vbkFkZCh0aGlzLm1hcCksdGhpcy5fY2hhbmdlZD0hMH19LHIucHJvdG90eXBlLnJlbW92ZVNvdXJjZT1mdW5jdGlvbihlKXtpZih0aGlzLl9jaGVja0xvYWRlZCgpLHZvaWQgMD09PXRoaXMuc291cmNlQ2FjaGVzW2VdKXRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIHNvdXJjZSB3aXRoIHRoaXMgSURcIik7Zm9yKHZhciByIGluIHRoaXMuX2xheWVycylpZih0aGlzLl9sYXllcnNbcl0uc291cmNlPT09ZSlyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCdTb3VyY2UgXCInK2UrJ1wiIGNhbm5vdCBiZSByZW1vdmVkIHdoaWxlIGxheWVyIFwiJytyKydcIiBpcyB1c2luZyBpdC4nKSkpO3ZhciBuPXRoaXMuc291cmNlQ2FjaGVzW2VdO2RlbGV0ZSB0aGlzLnNvdXJjZUNhY2hlc1tlXSxkZWxldGUgdGhpcy5fdXBkYXRlZFNvdXJjZXNbZV0sbi5maXJlKG5ldyB0LkV2ZW50KFwiZGF0YVwiLHtzb3VyY2VEYXRhVHlwZTpcIm1ldGFkYXRhXCIsZGF0YVR5cGU6XCJzb3VyY2VcIixzb3VyY2VJZDplfSkpLG4uc2V0RXZlbnRlZFBhcmVudChudWxsKSxuLmNsZWFyVGlsZXMoKSxuLm9uUmVtb3ZlJiZuLm9uUmVtb3ZlKHRoaXMubWFwKSx0aGlzLl9jaGFuZ2VkPSEwfSxyLnByb3RvdHlwZS5zZXRHZW9KU09OU291cmNlRGF0YT1mdW5jdGlvbih0LGUpe3RoaXMuX2NoZWNrTG9hZGVkKCksdGhpcy5zb3VyY2VDYWNoZXNbdF0uZ2V0U291cmNlKCkuc2V0RGF0YShlKSx0aGlzLl9jaGFuZ2VkPSEwfSxyLnByb3RvdHlwZS5nZXRTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc291cmNlQ2FjaGVzW3RdJiZ0aGlzLnNvdXJjZUNhY2hlc1t0XS5nZXRTb3VyY2UoKX0sci5wcm90b3R5cGUuYWRkTGF5ZXI9ZnVuY3Rpb24oZSxyLG4pe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIGk9ZS5pZDtpZih0aGlzLmdldExheWVyKGkpKXRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignTGF5ZXIgd2l0aCBpZCBcIicraSsnXCIgYWxyZWFkeSBleGlzdHMgb24gdGhpcyBtYXAnKSkpO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIGUuc291cmNlJiYodGhpcy5hZGRTb3VyY2UoaSxlLnNvdXJjZSksZT10LmNsb25lKGUpLGU9dC5leHRlbmQoZSx7c291cmNlOml9KSksIXRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVTdHlsZS5sYXllcixcImxheWVycy5cIitpLGUse2FycmF5SW5kZXg6LTF9LG4pKXt2YXIgYT10LmRlZmF1bHQkMjIoZSk7dGhpcy5fdmFsaWRhdGVMYXllcihhKSxhLnNldEV2ZW50ZWRQYXJlbnQodGhpcyx7bGF5ZXI6e2lkOml9fSk7dmFyIG89cj90aGlzLl9vcmRlci5pbmRleE9mKHIpOnRoaXMuX29yZGVyLmxlbmd0aDtpZihyJiYtMT09PW8pdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCdMYXllciB3aXRoIGlkIFwiJytyKydcIiBkb2VzIG5vdCBleGlzdCBvbiB0aGlzIG1hcC4nKSkpO2Vsc2V7aWYodGhpcy5fb3JkZXIuc3BsaWNlKG8sMCxpKSx0aGlzLl9sYXllck9yZGVyQ2hhbmdlZD0hMCx0aGlzLl9sYXllcnNbaV09YSx0aGlzLl9yZW1vdmVkTGF5ZXJzW2ldJiZhLnNvdXJjZSl7dmFyIHM9dGhpcy5fcmVtb3ZlZExheWVyc1tpXTtkZWxldGUgdGhpcy5fcmVtb3ZlZExheWVyc1tpXSxzLnR5cGUhPT1hLnR5cGU/dGhpcy5fdXBkYXRlZFNvdXJjZXNbYS5zb3VyY2VdPVwiY2xlYXJcIjoodGhpcy5fdXBkYXRlZFNvdXJjZXNbYS5zb3VyY2VdPVwicmVsb2FkXCIsdGhpcy5zb3VyY2VDYWNoZXNbYS5zb3VyY2VdLnBhdXNlKCkpfXRoaXMuX3VwZGF0ZUxheWVyKGEpfX19LHIucHJvdG90eXBlLm1vdmVMYXllcj1mdW5jdGlvbihlLHIpe2lmKHRoaXMuX2NoZWNrTG9hZGVkKCksdGhpcy5fY2hhbmdlZD0hMCx0aGlzLl9sYXllcnNbZV0pe2lmKGUhPT1yKXt2YXIgbj10aGlzLl9vcmRlci5pbmRleE9mKGUpO3RoaXMuX29yZGVyLnNwbGljZShuLDEpO3ZhciBpPXI/dGhpcy5fb3JkZXIuaW5kZXhPZihyKTp0aGlzLl9vcmRlci5sZW5ndGg7ciYmLTE9PT1pP3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignTGF5ZXIgd2l0aCBpZCBcIicrcisnXCIgZG9lcyBub3QgZXhpc3Qgb24gdGhpcyBtYXAuJykpKToodGhpcy5fb3JkZXIuc3BsaWNlKGksMCxlKSx0aGlzLl9sYXllck9yZGVyQ2hhbmdlZD0hMCl9fWVsc2UgdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKFwiVGhlIGxheWVyICdcIitlK1wiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBtb3ZlZC5cIikpKX0sci5wcm90b3R5cGUucmVtb3ZlTGF5ZXI9ZnVuY3Rpb24oZSl7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgcj10aGlzLl9sYXllcnNbZV07aWYocil7ci5zZXRFdmVudGVkUGFyZW50KG51bGwpO3ZhciBuPXRoaXMuX29yZGVyLmluZGV4T2YoZSk7dGhpcy5fb3JkZXIuc3BsaWNlKG4sMSksdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQ9ITAsdGhpcy5fY2hhbmdlZD0hMCx0aGlzLl9yZW1vdmVkTGF5ZXJzW2VdPXIsZGVsZXRlIHRoaXMuX2xheWVyc1tlXSxkZWxldGUgdGhpcy5fdXBkYXRlZExheWVyc1tlXSxkZWxldGUgdGhpcy5fdXBkYXRlZFBhaW50UHJvcHNbZV19ZWxzZSB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoXCJUaGUgbGF5ZXIgJ1wiK2UrXCInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIHJlbW92ZWQuXCIpKSl9LHIucHJvdG90eXBlLmdldExheWVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sYXllcnNbdF19LHIucHJvdG90eXBlLnNldExheWVyWm9vbVJhbmdlPWZ1bmN0aW9uKGUscixuKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBpPXRoaXMuZ2V0TGF5ZXIoZSk7aT9pLm1pbnpvb209PT1yJiZpLm1heHpvb209PT1ufHwobnVsbCE9ciYmKGkubWluem9vbT1yKSxudWxsIT1uJiYoaS5tYXh6b29tPW4pLHRoaXMuX3VwZGF0ZUxheWVyKGkpKTp0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoXCJUaGUgbGF5ZXIgJ1wiK2UrXCInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGhhdmUgem9vbSBleHRlbnQuXCIpKSl9LHIucHJvdG90eXBlLnNldEZpbHRlcj1mdW5jdGlvbihlLHIpe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIG49dGhpcy5nZXRMYXllcihlKTtpZihuKXtpZighdC5kZWZhdWx0JDEwKG4uZmlsdGVyLHIpKXJldHVybiBudWxsPT1yPyhuLmZpbHRlcj12b2lkIDAsdm9pZCB0aGlzLl91cGRhdGVMYXllcihuKSk6dm9pZCh0aGlzLl92YWxpZGF0ZSh0LnZhbGlkYXRlU3R5bGUuZmlsdGVyLFwibGF5ZXJzLlwiK24uaWQrXCIuZmlsdGVyXCIscil8fChuLmZpbHRlcj10LmNsb25lKHIpLHRoaXMuX3VwZGF0ZUxheWVyKG4pKSl9ZWxzZSB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoXCJUaGUgbGF5ZXIgJ1wiK2UrXCInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIGZpbHRlcmVkLlwiKSkpfSxyLnByb3RvdHlwZS5nZXRGaWx0ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuY2xvbmUodGhpcy5nZXRMYXllcihlKS5maWx0ZXIpfSxyLnByb3RvdHlwZS5zZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbihlLHIsbil7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgaT10aGlzLmdldExheWVyKGUpO2k/dC5kZWZhdWx0JDEwKGkuZ2V0TGF5b3V0UHJvcGVydHkociksbil8fChpLnNldExheW91dFByb3BlcnR5KHIsbiksdGhpcy5fdXBkYXRlTGF5ZXIoaSkpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcihcIlRoZSBsYXllciAnXCIrZStcIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgc3R5bGVkLlwiKSkpfSxyLnByb3RvdHlwZS5nZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmdldExheWVyKHQpLmdldExheW91dFByb3BlcnR5KGUpfSxyLnByb3RvdHlwZS5zZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKGUscixuKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBpPXRoaXMuZ2V0TGF5ZXIoZSk7aWYoaSl7aWYoIXQuZGVmYXVsdCQxMChpLmdldFBhaW50UHJvcGVydHkociksbikpe3ZhciBhPWkuX3RyYW5zaXRpb25hYmxlUGFpbnQuX3ZhbHVlc1tyXS52YWx1ZS5pc0RhdGFEcml2ZW4oKTtpLnNldFBhaW50UHJvcGVydHkocixuKSwoaS5fdHJhbnNpdGlvbmFibGVQYWludC5fdmFsdWVzW3JdLnZhbHVlLmlzRGF0YURyaXZlbigpfHxhKSYmdGhpcy5fdXBkYXRlTGF5ZXIoaSksdGhpcy5fY2hhbmdlZD0hMCx0aGlzLl91cGRhdGVkUGFpbnRQcm9wc1tlXT0hMH19ZWxzZSB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoXCJUaGUgbGF5ZXIgJ1wiK2UrXCInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIHN0eWxlZC5cIikpKX0sci5wcm90b3R5cGUuZ2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmdldExheWVyKHQpLmdldFBhaW50UHJvcGVydHkoZSl9LHIucHJvdG90eXBlLmdldFRyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdC5leHRlbmQoe2R1cmF0aW9uOjMwMCxkZWxheTowfSx0aGlzLnN0eWxlc2hlZXQmJnRoaXMuc3R5bGVzaGVldC50cmFuc2l0aW9uKX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gdC5maWx0ZXJPYmplY3Qoe3ZlcnNpb246dGhpcy5zdHlsZXNoZWV0LnZlcnNpb24sbmFtZTp0aGlzLnN0eWxlc2hlZXQubmFtZSxtZXRhZGF0YTp0aGlzLnN0eWxlc2hlZXQubWV0YWRhdGEsbGlnaHQ6dGhpcy5zdHlsZXNoZWV0LmxpZ2h0LGNlbnRlcjp0aGlzLnN0eWxlc2hlZXQuY2VudGVyLHpvb206dGhpcy5zdHlsZXNoZWV0Lnpvb20sYmVhcmluZzp0aGlzLnN0eWxlc2hlZXQuYmVhcmluZyxwaXRjaDp0aGlzLnN0eWxlc2hlZXQucGl0Y2gsc3ByaXRlOnRoaXMuc3R5bGVzaGVldC5zcHJpdGUsZ2x5cGhzOnRoaXMuc3R5bGVzaGVldC5nbHlwaHMsdHJhbnNpdGlvbjp0aGlzLnN0eWxlc2hlZXQudHJhbnNpdGlvbixzb3VyY2VzOnQubWFwT2JqZWN0KHRoaXMuc291cmNlQ2FjaGVzLGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlcmlhbGl6ZSgpfSksbGF5ZXJzOnRoaXMuX29yZGVyLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5fbGF5ZXJzW3RdLnNlcmlhbGl6ZSgpfSl9LGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10fSl9LHIucHJvdG90eXBlLl91cGRhdGVMYXllcj1mdW5jdGlvbih0KXt0aGlzLl91cGRhdGVkTGF5ZXJzW3QuaWRdPSEwLHQuc291cmNlJiYhdGhpcy5fdXBkYXRlZFNvdXJjZXNbdC5zb3VyY2VdJiYodGhpcy5fdXBkYXRlZFNvdXJjZXNbdC5zb3VyY2VdPVwicmVsb2FkXCIsdGhpcy5zb3VyY2VDYWNoZXNbdC5zb3VyY2VdLnBhdXNlKCkpLHRoaXMuX2NoYW5nZWQ9ITB9LHIucHJvdG90eXBlLl9mbGF0dGVuUmVuZGVyZWRGZWF0dXJlcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj10aGlzLl9vcmRlci5sZW5ndGgtMTtyPj0wO3ItLSlmb3IodmFyIG49dGhpcy5fb3JkZXJbcl0saT0wLGE9dDtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV1bbl07aWYobylmb3IodmFyIHM9MCxsPW87czxsLmxlbmd0aDtzKz0xKXt2YXIgYz1sW3NdO2UucHVzaChjKX19cmV0dXJuIGV9LHIucHJvdG90eXBlLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcz1mdW5jdGlvbihlLHIsbil7ciYmci5maWx0ZXImJnRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVTdHlsZS5maWx0ZXIsXCJxdWVyeVJlbmRlcmVkRmVhdHVyZXMuZmlsdGVyXCIsci5maWx0ZXIpO3ZhciBpPXt9O2lmKHImJnIubGF5ZXJzKXtpZighQXJyYXkuaXNBcnJheShyLmxheWVycykpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcihcInBhcmFtZXRlcnMubGF5ZXJzIG11c3QgYmUgYW4gQXJyYXkuXCIpKSksW107Zm9yKHZhciBhPTAsbz1yLmxheWVyczthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV0sbD10aGlzLl9sYXllcnNbc107aWYoIWwpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcihcIlRoZSBsYXllciAnXCIrcytcIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgcXVlcmllZCBmb3IgZmVhdHVyZXMuXCIpKSksW107aVtsLnNvdXJjZV09ITB9fXZhciBjPVtdO2Zvcih2YXIgdSBpbiB0aGlzLnNvdXJjZUNhY2hlcylyLmxheWVycyYmIWlbdV18fGMucHVzaChhdCh0aGlzLnNvdXJjZUNhY2hlc1t1XSx0aGlzLl9sYXllcnMsZS53b3JsZENvb3JkaW5hdGUscixuKSk7cmV0dXJuIHRoaXMucGxhY2VtZW50JiZjLnB1c2goZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9e30sbz1uLnF1ZXJ5UmVuZGVyZWRTeW1ib2xzKGUpLHM9W10sbD0wLGM9T2JqZWN0LmtleXMobykubWFwKE51bWJlcik7bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdO3MucHVzaChpW3VdKX1zLnNvcnQob3QpO2Zvcih2YXIgaD1mdW5jdGlvbigpe3ZhciBlPXBbZl0sbj1lLmZlYXR1cmVJbmRleC5sb29rdXBTeW1ib2xGZWF0dXJlcyhvW2UuYnVja2V0SW5zdGFuY2VJZF0sZS5idWNrZXRJbmRleCxlLnNvdXJjZUxheWVySW5kZXgsci5maWx0ZXIsci5sYXllcnMsdCk7Zm9yKHZhciBpIGluIG4pe3ZhciBzPWFbaV09YVtpXXx8W10sbD1uW2ldO2wuc29ydChmdW5jdGlvbih0LHIpe3ZhciBuPWUuZmVhdHVyZVNvcnRPcmRlcjtpZihuKXt2YXIgaT1uLmluZGV4T2YodC5mZWF0dXJlSW5kZXgpO3JldHVybiBuLmluZGV4T2Yoci5mZWF0dXJlSW5kZXgpLWl9cmV0dXJuIHIuZmVhdHVyZUluZGV4LXQuZmVhdHVyZUluZGV4fSk7Zm9yKHZhciBjPTAsdT1sO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGg9dVtjXTtzLnB1c2goaC5mZWF0dXJlKX19fSxmPTAscD1zO2Y8cC5sZW5ndGg7Zis9MSloKCk7cmV0dXJuIGF9KHRoaXMuX2xheWVycyxlLnZpZXdwb3J0LHIsdGhpcy5wbGFjZW1lbnQuY29sbGlzaW9uSW5kZXgsdGhpcy5wbGFjZW1lbnQucmV0YWluZWRRdWVyeURhdGEpKSx0aGlzLl9mbGF0dGVuUmVuZGVyZWRGZWF0dXJlcyhjKX0sci5wcm90b3R5cGUucXVlcnlTb3VyY2VGZWF0dXJlcz1mdW5jdGlvbihlLHIpe3ImJnIuZmlsdGVyJiZ0aGlzLl92YWxpZGF0ZSh0LnZhbGlkYXRlU3R5bGUuZmlsdGVyLFwicXVlcnlTb3VyY2VGZWF0dXJlcy5maWx0ZXJcIixyLmZpbHRlcik7dmFyIG49dGhpcy5zb3VyY2VDYWNoZXNbZV07cmV0dXJuIG4/ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5nZXRSZW5kZXJhYmxlSWRzKCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0LmdldFRpbGVCeUlEKGUpfSksbj1bXSxpPXt9LGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIG89clthXSxzPW8udGlsZUlELmNhbm9uaWNhbC5rZXk7aVtzXXx8KGlbc109ITAsby5xdWVyeVNvdXJjZUZlYXR1cmVzKG4sZSkpfXJldHVybiBufShuLHIpOltdfSxyLnByb3RvdHlwZS5hZGRTb3VyY2VUeXBlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gci5nZXRTb3VyY2VUeXBlKHQpP24obmV3IEVycm9yKCdBIHNvdXJjZSB0eXBlIGNhbGxlZCBcIicrdCsnXCIgYWxyZWFkeSBleGlzdHMuJykpOihyLnNldFNvdXJjZVR5cGUodCxlKSxlLndvcmtlclNvdXJjZVVSTD92b2lkIHRoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QoXCJsb2FkV29ya2VyU291cmNlXCIse25hbWU6dCx1cmw6ZS53b3JrZXJTb3VyY2VVUkx9LG4pOm4obnVsbCxudWxsKSl9LHIucHJvdG90eXBlLmdldExpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGlnaHQuZ2V0TGlnaHQoKX0sci5wcm90b3R5cGUuc2V0TGlnaHQ9ZnVuY3Rpb24oZSl7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgcj10aGlzLmxpZ2h0LmdldExpZ2h0KCksbj0hMTtmb3IodmFyIGkgaW4gZSlpZighdC5kZWZhdWx0JDEwKGVbaV0scltpXSkpe249ITA7YnJlYWt9aWYobil7dmFyIG89e25vdzphLm5vdygpLHRyYW5zaXRpb246dC5leHRlbmQoe2R1cmF0aW9uOjMwMCxkZWxheTowfSx0aGlzLnN0eWxlc2hlZXQudHJhbnNpdGlvbil9O3RoaXMubGlnaHQuc2V0TGlnaHQoZSksdGhpcy5saWdodC51cGRhdGVUcmFuc2l0aW9ucyhvKX19LHIucHJvdG90eXBlLl92YWxpZGF0ZT1mdW5jdGlvbihlLHIsbixpLGEpe3JldHVybighYXx8ITEhPT1hLnZhbGlkYXRlKSYmWGUodGhpcyxlLmNhbGwodC52YWxpZGF0ZVN0eWxlLHQuZXh0ZW5kKHtrZXk6cixzdHlsZTp0aGlzLnNlcmlhbGl6ZSgpLHZhbHVlOm4sc3R5bGVTcGVjOnQuZGVmYXVsdCQ1fSxpKSkpfSxyLnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHQuZXZlbnRlZC5vZmYoXCJwbHVnaW5BdmFpbGFibGVcIix0aGlzLl9ydGxUZXh0UGx1Z2luQ2FsbGJhY2spLHRoaXMuc291cmNlQ2FjaGVzKXRoaXMuc291cmNlQ2FjaGVzW2VdLmNsZWFyVGlsZXMoKTt0aGlzLmRpc3BhdGNoZXIucmVtb3ZlKCl9LHIucHJvdG90eXBlLl9jbGVhclNvdXJjZT1mdW5jdGlvbih0KXt0aGlzLnNvdXJjZUNhY2hlc1t0XS5jbGVhclRpbGVzKCl9LHIucHJvdG90eXBlLl9yZWxvYWRTb3VyY2U9ZnVuY3Rpb24odCl7dGhpcy5zb3VyY2VDYWNoZXNbdF0ucmVzdW1lKCksdGhpcy5zb3VyY2VDYWNoZXNbdF0ucmVsb2FkKCl9LHIucHJvdG90eXBlLl91cGRhdGVTb3VyY2VzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLnNvdXJjZUNhY2hlcyl0aGlzLnNvdXJjZUNhY2hlc1tlXS51cGRhdGUodCl9LHIucHJvdG90eXBlLl9nZW5lcmF0ZUNvbGxpc2lvbkJveGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuc291cmNlQ2FjaGVzKXRoaXMuX3JlbG9hZFNvdXJjZSh0KX0sci5wcm90b3R5cGUuX3VwZGF0ZVBsYWNlbWVudD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPSExLGk9ITEsbz17fSxzPTAsbD10aGlzLl9vcmRlcjtzPGwubGVuZ3RoO3MrPTEpe3ZhciBjPWxbc10sdT10aGlzLl9sYXllcnNbY107aWYoXCJzeW1ib2xcIj09PXUudHlwZSl7aWYoIW9bdS5zb3VyY2VdKXt2YXIgaD10aGlzLnNvdXJjZUNhY2hlc1t1LnNvdXJjZV07b1t1LnNvdXJjZV09aC5nZXRSZW5kZXJhYmxlSWRzKCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBoLmdldFRpbGVCeUlEKHQpfSkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBlLnRpbGVJRC5vdmVyc2NhbGVkWi10LnRpbGVJRC5vdmVyc2NhbGVkWnx8KHQudGlsZUlELmlzTGVzc1RoYW4oZS50aWxlSUQpPy0xOjEpfSl9dmFyIGY9dGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleC5hZGRMYXllcih1LG9bdS5zb3VyY2VdLHQuY2VudGVyLmxuZyk7bj1ufHxmfX10aGlzLmNyb3NzVGlsZVN5bWJvbEluZGV4LnBydW5lVW51c2VkTGF5ZXJzKHRoaXMuX29yZGVyKTt2YXIgcD10aGlzLl9sYXllck9yZGVyQ2hhbmdlZDtpZigocHx8IXRoaXMucGF1c2VhYmxlUGxhY2VtZW50fHx0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKSYmIXRoaXMucGxhY2VtZW50LnN0aWxsUmVjZW50KGEubm93KCkpKSYmKHRoaXMucGF1c2VhYmxlUGxhY2VtZW50PW5ldyBVZSh0LHRoaXMuX29yZGVyLHAsZSxyKSx0aGlzLl9sYXllck9yZGVyQ2hhbmdlZD0hMSksdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuaXNEb25lKCk/dGhpcy5wbGFjZW1lbnQuc2V0U3RhbGUoKToodGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuY29udGludWVQbGFjZW1lbnQodGhpcy5fb3JkZXIsdGhpcy5fbGF5ZXJzLG8pLHRoaXMucGF1c2VhYmxlUGxhY2VtZW50LmlzRG9uZSgpJiYodGhpcy5wbGFjZW1lbnQ9dGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuY29tbWl0KHRoaXMucGxhY2VtZW50LGEubm93KCkpLGk9ITApLG4mJnRoaXMucGF1c2VhYmxlUGxhY2VtZW50LnBsYWNlbWVudC5zZXRTdGFsZSgpKSxpfHxuKWZvcih2YXIgZD0wLGc9dGhpcy5fb3JkZXI7ZDxnLmxlbmd0aDtkKz0xKXt2YXIgdj1nW2RdLG09dGhpcy5fbGF5ZXJzW3ZdO1wic3ltYm9sXCI9PT1tLnR5cGUmJnRoaXMucGxhY2VtZW50LnVwZGF0ZUxheWVyT3BhY2l0aWVzKG0sb1ttLnNvdXJjZV0pfXJldHVybiF0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKXx8dGhpcy5wbGFjZW1lbnQuaGFzVHJhbnNpdGlvbnMoYS5ub3coKSl9LHIucHJvdG90eXBlLmdldEltYWdlcz1mdW5jdGlvbih0LGUscil7dGhpcy5pbWFnZU1hbmFnZXIuZ2V0SW1hZ2VzKGUuaWNvbnMscil9LHIucHJvdG90eXBlLmdldEdseXBocz1mdW5jdGlvbih0LGUscil7dGhpcy5nbHlwaE1hbmFnZXIuZ2V0R2x5cGhzKGUuc3RhY2tzLHIpfSxyfSh0LkV2ZW50ZWQpO0plLmdldFNvdXJjZVR5cGU9ZnVuY3Rpb24odCl7cmV0dXJuIG50W3RdfSxKZS5zZXRTb3VyY2VUeXBlPWZ1bmN0aW9uKHQsZSl7bnRbdF09ZX0sSmUucmVnaXN0ZXJGb3JQbHVnaW5BdmFpbGFiaWxpdHk9dC5yZWdpc3RlckZvclBsdWdpbkF2YWlsYWJpbGl0eTt2YXIgS2U9dC5jcmVhdGVMYXlvdXQoW3tuYW1lOlwiYV9wb3NcIix0eXBlOlwiSW50MTZcIixjb21wb25lbnRzOjJ9XSksUWU9e3ByZWx1ZGU6e2ZyYWdtZW50U291cmNlOlwiI2lmZGVmIEdMX0VTXFxucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuI2Vsc2VcXG5cXG4jaWYgIWRlZmluZWQobG93cClcXG4jZGVmaW5lIGxvd3BcXG4jZW5kaWZcXG5cXG4jaWYgIWRlZmluZWQobWVkaXVtcClcXG4jZGVmaW5lIG1lZGl1bXBcXG4jZW5kaWZcXG5cXG4jaWYgIWRlZmluZWQoaGlnaHApXFxuI2RlZmluZSBoaWdocFxcbiNlbmRpZlxcblxcbiNlbmRpZlxcblwiLHZlcnRleFNvdXJjZTpcIiNpZmRlZiBHTF9FU1xcbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZWxzZVxcblxcbiNpZiAhZGVmaW5lZChsb3dwKVxcbiNkZWZpbmUgbG93cFxcbiNlbmRpZlxcblxcbiNpZiAhZGVmaW5lZChtZWRpdW1wKVxcbiNkZWZpbmUgbWVkaXVtcFxcbiNlbmRpZlxcblxcbiNpZiAhZGVmaW5lZChoaWdocClcXG4jZGVmaW5lIGhpZ2hwXFxuI2VuZGlmXFxuXFxuI2VuZGlmXFxuXFxuLy8gVW5wYWNrIGEgcGFpciBvZiB2YWx1ZXMgdGhhdCBoYXZlIGJlZW4gcGFja2VkIGludG8gYSBzaW5nbGUgZmxvYXQuXFxuLy8gVGhlIHBhY2tlZCB2YWx1ZXMgYXJlIGFzc3VtZWQgdG8gYmUgOC1iaXQgdW5zaWduZWQgaW50ZWdlcnMsIGFuZCBhcmVcXG4vLyBwYWNrZWQgbGlrZSBzbzpcXG4vLyBwYWNrZWRWYWx1ZSA9IGZsb29yKGlucHV0WzBdKSAqIDI1NiArIGlucHV0WzFdLFxcbnZlYzIgdW5wYWNrX2Zsb2F0KGNvbnN0IGZsb2F0IHBhY2tlZFZhbHVlKSB7XFxuICAgIGludCBwYWNrZWRJbnRWYWx1ZSA9IGludChwYWNrZWRWYWx1ZSk7XFxuICAgIGludCB2MCA9IHBhY2tlZEludFZhbHVlIC8gMjU2O1xcbiAgICByZXR1cm4gdmVjMih2MCwgcGFja2VkSW50VmFsdWUgLSB2MCAqIDI1Nik7XFxufVxcblxcbnZlYzIgdW5wYWNrX29wYWNpdHkoY29uc3QgZmxvYXQgcGFja2VkT3BhY2l0eSkge1xcbiAgICBpbnQgaW50T3BhY2l0eSA9IGludChwYWNrZWRPcGFjaXR5KSAvIDI7XFxuICAgIHJldHVybiB2ZWMyKGZsb2F0KGludE9wYWNpdHkpIC8gMTI3LjAsIG1vZChwYWNrZWRPcGFjaXR5LCAyLjApKTtcXG59XFxuXFxuLy8gVG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzIG5lZWRlZCwgd2UgZW5jb2RlIGEgNC1jb21wb25lbnRcXG4vLyBjb2xvciBpbnRvIGEgcGFpciBvZiBmbG9hdHMgKGkuZS4gYSB2ZWMyKSBhcyBmb2xsb3dzOlxcbi8vIFsgZmxvb3IoY29sb3IuciAqIDI1NSkgKiAyNTYgKyBjb2xvci5nICogMjU1LFxcbi8vICAgZmxvb3IoY29sb3IuYiAqIDI1NSkgKiAyNTYgKyBjb2xvci5nICogMjU1IF1cXG52ZWM0IGRlY29kZV9jb2xvcihjb25zdCB2ZWMyIGVuY29kZWRDb2xvcikge1xcbiAgICByZXR1cm4gdmVjNChcXG4gICAgICAgIHVucGFja19mbG9hdChlbmNvZGVkQ29sb3JbMF0pIC8gMjU1LjAsXFxuICAgICAgICB1bnBhY2tfZmxvYXQoZW5jb2RlZENvbG9yWzFdKSAvIDI1NS4wXFxuICAgICk7XFxufVxcblxcbi8vIFVucGFjayBhIHBhaXIgb2YgcGFpbnQgdmFsdWVzIGFuZCBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHRoZW0uXFxuZmxvYXQgdW5wYWNrX21peF92ZWMyKGNvbnN0IHZlYzIgcGFja2VkVmFsdWUsIGNvbnN0IGZsb2F0IHQpIHtcXG4gICAgcmV0dXJuIG1peChwYWNrZWRWYWx1ZVswXSwgcGFja2VkVmFsdWVbMV0sIHQpO1xcbn1cXG5cXG4vLyBVbnBhY2sgYSBwYWlyIG9mIHBhaW50IHZhbHVlcyBhbmQgaW50ZXJwb2xhdGUgYmV0d2VlbiB0aGVtLlxcbnZlYzQgdW5wYWNrX21peF92ZWM0KGNvbnN0IHZlYzQgcGFja2VkQ29sb3JzLCBjb25zdCBmbG9hdCB0KSB7XFxuICAgIHZlYzQgbWluQ29sb3IgPSBkZWNvZGVfY29sb3IodmVjMihwYWNrZWRDb2xvcnNbMF0sIHBhY2tlZENvbG9yc1sxXSkpO1xcbiAgICB2ZWM0IG1heENvbG9yID0gZGVjb2RlX2NvbG9yKHZlYzIocGFja2VkQ29sb3JzWzJdLCBwYWNrZWRDb2xvcnNbM10pKTtcXG4gICAgcmV0dXJuIG1peChtaW5Db2xvciwgbWF4Q29sb3IsIHQpO1xcbn1cXG5cXG4vLyBUaGUgb2Zmc2V0IGRlcGVuZHMgb24gaG93IG1hbnkgcGl4ZWxzIGFyZSBiZXR3ZWVuIHRoZSB3b3JsZCBvcmlnaW4gYW5kIHRoZSBlZGdlIG9mIHRoZSB0aWxlOlxcbi8vIHZlYzIgb2Zmc2V0ID0gbW9kKHBpeGVsX2Nvb3JkLCBzaXplKVxcbi8vXFxuLy8gQXQgaGlnaCB6b29tIGxldmVscyB0aGVyZSBhcmUgYSB0b24gb2YgcGl4ZWxzIGJldHdlZW4gdGhlIHdvcmxkIG9yaWdpbiBhbmQgdGhlIGVkZ2Ugb2YgdGhlIHRpbGUuXFxuLy8gVGhlIGdsc2wgc3BlYyBvbmx5IGd1YXJhbnRlZXMgMTYgYml0cyBvZiBwcmVjaXNpb24gZm9yIGhpZ2hwIGZsb2F0cy4gV2UgbmVlZCBtb3JlIHRoYW4gdGhhdC5cXG4vL1xcbi8vIFRoZSBwaXhlbF9jb29yZCBpcyBwYXNzZWQgaW4gYXMgdHdvIDE2IGJpdCB2YWx1ZXM6XFxuLy8gcGl4ZWxfY29vcmRfdXBwZXIgPSBmbG9vcihwaXhlbF9jb29yZCAvIDJeMTYpXFxuLy8gcGl4ZWxfY29vcmRfbG93ZXIgPSBtb2QocGl4ZWxfY29vcmQsIDJeMTYpXFxuLy9cXG4vLyBUaGUgb2Zmc2V0IGlzIGNhbGN1bGF0ZWQgaW4gYSBzZXJpZXMgb2Ygc3RlcHMgdGhhdCBzaG91bGQgcHJlc2VydmUgdGhpcyBwcmVjaXNpb246XFxudmVjMiBnZXRfcGF0dGVybl9wb3MoY29uc3QgdmVjMiBwaXhlbF9jb29yZF91cHBlciwgY29uc3QgdmVjMiBwaXhlbF9jb29yZF9sb3dlcixcXG4gICAgY29uc3QgdmVjMiBwYXR0ZXJuX3NpemUsIGNvbnN0IGZsb2F0IHRpbGVfdW5pdHNfdG9fcGl4ZWxzLCBjb25zdCB2ZWMyIHBvcykge1xcblxcbiAgICB2ZWMyIG9mZnNldCA9IG1vZChtb2QobW9kKHBpeGVsX2Nvb3JkX3VwcGVyLCBwYXR0ZXJuX3NpemUpICogMjU2LjAsIHBhdHRlcm5fc2l6ZSkgKiAyNTYuMCArIHBpeGVsX2Nvb3JkX2xvd2VyLCBwYXR0ZXJuX3NpemUpO1xcbiAgICByZXR1cm4gKHRpbGVfdW5pdHNfdG9fcGl4ZWxzICogcG9zICsgb2Zmc2V0KSAvIHBhdHRlcm5fc2l6ZTtcXG59XFxuXCJ9LGJhY2tncm91bmQ6e2ZyYWdtZW50U291cmNlOlwidW5pZm9ybSB2ZWM0IHVfY29sb3I7XFxudW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICBnbF9GcmFnQ29sb3IgPSB1X2NvbG9yICogdV9vcGFjaXR5O1xcblxcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xcbiNlbmRpZlxcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCJhdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG5cXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XFxufVxcblwifSxiYWNrZ3JvdW5kUGF0dGVybjp7ZnJhZ21lbnRTb3VyY2U6XCJ1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2E7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9icl9hO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYjtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2I7XFxudW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTtcXG51bmlmb3JtIGZsb2F0IHVfbWl4O1xcbnVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5O1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XFxuXFxudmFyeWluZyB2ZWMyIHZfcG9zX2E7XFxudmFyeWluZyB2ZWMyIHZfcG9zX2I7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICB2ZWMyIGltYWdlY29vcmQgPSBtb2Qodl9wb3NfYSwgMS4wKTtcXG4gICAgdmVjMiBwb3MgPSBtaXgodV9wYXR0ZXJuX3RsX2EgLyB1X3RleHNpemUsIHVfcGF0dGVybl9icl9hIC8gdV90ZXhzaXplLCBpbWFnZWNvb3JkKTtcXG4gICAgdmVjNCBjb2xvcjEgPSB0ZXh0dXJlMkQodV9pbWFnZSwgcG9zKTtcXG5cXG4gICAgdmVjMiBpbWFnZWNvb3JkX2IgPSBtb2Qodl9wb3NfYiwgMS4wKTtcXG4gICAgdmVjMiBwb3MyID0gbWl4KHVfcGF0dGVybl90bF9iIC8gdV90ZXhzaXplLCB1X3BhdHRlcm5fYnJfYiAvIHVfdGV4c2l6ZSwgaW1hZ2Vjb29yZF9iKTtcXG4gICAgdmVjNCBjb2xvcjIgPSB0ZXh0dXJlMkQodV9pbWFnZSwgcG9zMik7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IG1peChjb2xvcjEsIGNvbG9yMiwgdV9taXgpICogdV9vcGFjaXR5O1xcblxcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xcbiNlbmRpZlxcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2E7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2I7XFxudW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfdXBwZXI7XFxudW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfbG93ZXI7XFxudW5pZm9ybSBmbG9hdCB1X3NjYWxlX2E7XFxudW5pZm9ybSBmbG9hdCB1X3NjYWxlX2I7XFxudW5pZm9ybSBmbG9hdCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzO1xcblxcbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xcblxcbnZhcnlpbmcgdmVjMiB2X3Bvc19hO1xcbnZhcnlpbmcgdmVjMiB2X3Bvc19iO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xcblxcbiAgICB2X3Bvc19hID0gZ2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsIHVfcGl4ZWxfY29vcmRfbG93ZXIsIHVfc2NhbGVfYSAqIHVfcGF0dGVybl9zaXplX2EsIHVfdGlsZV91bml0c190b19waXhlbHMsIGFfcG9zKTtcXG4gICAgdl9wb3NfYiA9IGdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLCB1X3BpeGVsX2Nvb3JkX2xvd2VyLCB1X3NjYWxlX2IgKiB1X3BhdHRlcm5fc2l6ZV9iLCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLCBhX3Bvcyk7XFxufVxcblwifSxjaXJjbGU6e2ZyYWdtZW50U291cmNlOlwiI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgc3Ryb2tlX2NvbG9yXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHN0cm9rZV93aWR0aFxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBzdHJva2Vfb3BhY2l0eVxcblxcbnZhcnlpbmcgdmVjMyB2X2RhdGE7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgcmFkaXVzXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBzdHJva2VfY29sb3JcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBzdHJva2Vfd2lkdGhcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBzdHJva2Vfb3BhY2l0eVxcblxcbiAgICB2ZWMyIGV4dHJ1ZGUgPSB2X2RhdGEueHk7XFxuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoID0gbGVuZ3RoKGV4dHJ1ZGUpO1xcblxcbiAgICBsb3dwIGZsb2F0IGFudGlhbGlhc2JsdXIgPSB2X2RhdGEuejtcXG4gICAgZmxvYXQgYW50aWFsaWFzZWRfYmx1ciA9IC1tYXgoYmx1ciwgYW50aWFsaWFzYmx1cik7XFxuXFxuICAgIGZsb2F0IG9wYWNpdHlfdCA9IHNtb290aHN0ZXAoMC4wLCBhbnRpYWxpYXNlZF9ibHVyLCBleHRydWRlX2xlbmd0aCAtIDEuMCk7XFxuXFxuICAgIGZsb2F0IGNvbG9yX3QgPSBzdHJva2Vfd2lkdGggPCAwLjAxID8gMC4wIDogc21vb3Roc3RlcChcXG4gICAgICAgIGFudGlhbGlhc2VkX2JsdXIsXFxuICAgICAgICAwLjAsXFxuICAgICAgICBleHRydWRlX2xlbmd0aCAtIHJhZGl1cyAvIChyYWRpdXMgKyBzdHJva2Vfd2lkdGgpXFxuICAgICk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IG9wYWNpdHlfdCAqIG1peChjb2xvciAqIG9wYWNpdHksIHN0cm9rZV9jb2xvciAqIHN0cm9rZV9vcGFjaXR5LCBjb2xvcl90KTtcXG5cXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcXG4jZW5kaWZcXG59XFxuXCIsdmVydGV4U291cmNlOlwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcbnVuaWZvcm0gYm9vbCB1X3NjYWxlX3dpdGhfbWFwO1xcbnVuaWZvcm0gYm9vbCB1X3BpdGNoX3dpdGhfbWFwO1xcbnVuaWZvcm0gdmVjMiB1X2V4dHJ1ZGVfc2NhbGU7XFxudW5pZm9ybSBoaWdocCBmbG9hdCB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U7XFxuXFxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XFxuXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgc3Ryb2tlX2NvbG9yXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHN0cm9rZV93aWR0aFxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBzdHJva2Vfb3BhY2l0eVxcblxcbnZhcnlpbmcgdmVjMyB2X2RhdGE7XFxuXFxudm9pZCBtYWluKHZvaWQpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgc3Ryb2tlX2NvbG9yXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgc3Ryb2tlX3dpZHRoXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgc3Ryb2tlX29wYWNpdHlcXG5cXG4gICAgLy8gdW5lbmNvZGUgdGhlIGV4dHJ1c2lvbiB2ZWN0b3IgdGhhdCB3ZSBzbnVjayBpbnRvIHRoZSBhX3BvcyB2ZWN0b3JcXG4gICAgdmVjMiBleHRydWRlID0gdmVjMihtb2QoYV9wb3MsIDIuMCkgKiAyLjAgLSAxLjApO1xcblxcbiAgICAvLyBtdWx0aXBseSBhX3BvcyBieSAwLjUsIHNpbmNlIHdlIGhhZCBpdCAqIDIgaW4gb3JkZXIgdG8gc25lYWtcXG4gICAgLy8gaW4gZXh0cnVzaW9uIGRhdGFcXG4gICAgdmVjMiBjaXJjbGVfY2VudGVyID0gZmxvb3IoYV9wb3MgKiAwLjUpO1xcbiAgICBpZiAodV9waXRjaF93aXRoX21hcCkge1xcbiAgICAgICAgdmVjMiBjb3JuZXJfcG9zaXRpb24gPSBjaXJjbGVfY2VudGVyO1xcbiAgICAgICAgaWYgKHVfc2NhbGVfd2l0aF9tYXApIHtcXG4gICAgICAgICAgICBjb3JuZXJfcG9zaXRpb24gKz0gZXh0cnVkZSAqIChyYWRpdXMgKyBzdHJva2Vfd2lkdGgpICogdV9leHRydWRlX3NjYWxlO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAvLyBQaXRjaGluZyB0aGUgY2lyY2xlIHdpdGggdGhlIG1hcCBlZmZlY3RpdmVseSBzY2FsZXMgaXQgd2l0aCB0aGUgbWFwXFxuICAgICAgICAgICAgLy8gVG8gY291bnRlcmFjdCB0aGUgZWZmZWN0IGZvciBwaXRjaC1zY2FsZTogdmlld3BvcnQsIHdlIHJlc2NhbGUgdGhlXFxuICAgICAgICAgICAgLy8gd2hvbGUgY2lyY2xlIGJhc2VkIG9uIHRoZSBwaXRjaCBzY2FsaW5nIGVmZmVjdCBhdCBpdHMgY2VudHJhbCBwb2ludFxcbiAgICAgICAgICAgIHZlYzQgcHJvamVjdGVkX2NlbnRlciA9IHVfbWF0cml4ICogdmVjNChjaXJjbGVfY2VudGVyLCAwLCAxKTtcXG4gICAgICAgICAgICBjb3JuZXJfcG9zaXRpb24gKz0gZXh0cnVkZSAqIChyYWRpdXMgKyBzdHJva2Vfd2lkdGgpICogdV9leHRydWRlX3NjYWxlICogKHByb2plY3RlZF9jZW50ZXIudyAvIHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChjb3JuZXJfcG9zaXRpb24sIDAsIDEpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoY2lyY2xlX2NlbnRlciwgMCwgMSk7XFxuXFxuICAgICAgICBpZiAodV9zY2FsZV93aXRoX21hcCkge1xcbiAgICAgICAgICAgIGdsX1Bvc2l0aW9uLnh5ICs9IGV4dHJ1ZGUgKiAocmFkaXVzICsgc3Ryb2tlX3dpZHRoKSAqIHVfZXh0cnVkZV9zY2FsZSAqIHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgZ2xfUG9zaXRpb24ueHkgKz0gZXh0cnVkZSAqIChyYWRpdXMgKyBzdHJva2Vfd2lkdGgpICogdV9leHRydWRlX3NjYWxlICogZ2xfUG9zaXRpb24udztcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICAvLyBUaGlzIGlzIGEgbWluaW11bSBibHVyIGRpc3RhbmNlIHRoYXQgc2VydmVzIGFzIGEgZmF1eC1hbnRpYWxpYXNpbmcgZm9yXFxuICAgIC8vIHRoZSBjaXJjbGUuIHNpbmNlIGJsdXIgaXMgYSByYXRpbyBvZiB0aGUgY2lyY2xlJ3Mgc2l6ZSBhbmQgdGhlIGludGVudCBpc1xcbiAgICAvLyB0byBrZWVwIHRoZSBibHVyIGF0IHJvdWdobHkgMXB4LCB0aGUgdHdvIGFyZSBpbnZlcnNlbHkgcmVsYXRlZC5cXG4gICAgbG93cCBmbG9hdCBhbnRpYWxpYXNibHVyID0gMS4wIC8gREVWSUNFX1BJWEVMX1JBVElPIC8gKHJhZGl1cyArIHN0cm9rZV93aWR0aCk7XFxuXFxuICAgIHZfZGF0YSA9IHZlYzMoZXh0cnVkZS54LCBleHRydWRlLnksIGFudGlhbGlhc2JsdXIpO1xcbn1cXG5cIn0sY2xpcHBpbmdNYXNrOntmcmFnbWVudFNvdXJjZTpcInZvaWQgbWFpbigpIHtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCJhdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG5cXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XFxufVxcblwifSxoZWF0bWFwOntmcmFnbWVudFNvdXJjZTpcIiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgZmxvYXQgd2VpZ2h0XFxuXFxudW5pZm9ybSBoaWdocCBmbG9hdCB1X2ludGVuc2l0eTtcXG52YXJ5aW5nIHZlYzIgdl9leHRydWRlO1xcblxcbi8vIEdhdXNzaWFuIGtlcm5lbCBjb2VmZmljaWVudDogMSAvIHNxcnQoMiAqIFBJKVxcbiNkZWZpbmUgR0FVU1NfQ09FRiAwLjM5ODk0MjI4MDQwMTQzMjdcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIGZsb2F0IHdlaWdodFxcblxcbiAgICAvLyBLZXJuZWwgZGVuc2l0eSBlc3RpbWF0aW9uIHdpdGggYSBHYXVzc2lhbiBrZXJuZWwgb2Ygc2l6ZSA1eDVcXG4gICAgZmxvYXQgZCA9IC0wLjUgKiAzLjAgKiAzLjAgKiBkb3Qodl9leHRydWRlLCB2X2V4dHJ1ZGUpO1xcbiAgICBmbG9hdCB2YWwgPSB3ZWlnaHQgKiB1X2ludGVuc2l0eSAqIEdBVVNTX0NPRUYgKiBleHAoZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodmFsLCAxLjAsIDEuMCwgMS4wKTtcXG5cXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcXG4jZW5kaWZcXG59XFxuXCIsdmVydGV4U291cmNlOlwiI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCBmbG9hdCB3ZWlnaHRcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgcmFkaXVzXFxuXFxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcbnVuaWZvcm0gZmxvYXQgdV9leHRydWRlX3NjYWxlO1xcbnVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5O1xcbnVuaWZvcm0gZmxvYXQgdV9pbnRlbnNpdHk7XFxuXFxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XFxuXFxudmFyeWluZyB2ZWMyIHZfZXh0cnVkZTtcXG5cXG4vLyBFZmZlY3RpdmUgXFxcIjBcXFwiIGluIHRoZSBrZXJuZWwgZGVuc2l0eSB0ZXh0dXJlIHRvIGFkanVzdCB0aGUga2VybmVsIHNpemUgdG87XFxuLy8gdGhpcyBlbXBpcmljYWxseSBjaG9zZW4gbnVtYmVyIG1pbmltaXplcyBhcnRpZmFjdHMgb24gb3ZlcmxhcHBpbmcga2VybmVsc1xcbi8vIGZvciB0eXBpY2FsIGhlYXRtYXAgY2FzZXMgKGFzc3VtaW5nIGNsdXN0ZXJlZCBzb3VyY2UpXFxuY29uc3QgaGlnaHAgZmxvYXQgWkVSTyA9IDEuMCAvIDI1NS4wIC8gMTYuMDtcXG5cXG4vLyBHYXVzc2lhbiBrZXJuZWwgY29lZmZpY2llbnQ6IDEgLyBzcXJ0KDIgKiBQSSlcXG4jZGVmaW5lIEdBVVNTX0NPRUYgMC4zOTg5NDIyODA0MDE0MzI3XFxuXFxudm9pZCBtYWluKHZvaWQpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgZmxvYXQgd2VpZ2h0XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgcmFkaXVzXFxuXFxuICAgIC8vIHVuZW5jb2RlIHRoZSBleHRydXNpb24gdmVjdG9yIHRoYXQgd2Ugc251Y2sgaW50byB0aGUgYV9wb3MgdmVjdG9yXFxuICAgIHZlYzIgdW5zY2FsZWRfZXh0cnVkZSA9IHZlYzIobW9kKGFfcG9zLCAyLjApICogMi4wIC0gMS4wKTtcXG5cXG4gICAgLy8gVGhpcyAnZXh0cnVkZScgY29tZXMgaW4gcmFuZ2luZyBmcm9tIFstMSwgLTFdLCB0byBbMSwgMV0uICBXZSdsbCB1c2VcXG4gICAgLy8gaXQgdG8gcHJvZHVjZSB0aGUgdmVydGljZXMgb2YgYSBzcXVhcmUgbWVzaCBmcmFtaW5nIHRoZSBwb2ludCBmZWF0dXJlXFxuICAgIC8vIHdlJ3JlIGFkZGluZyB0byB0aGUga2VybmVsIGRlbnNpdHkgdGV4dHVyZS4gIFdlJ2xsIGFsc28gcGFzcyBpdCBhc1xcbiAgICAvLyBhIHZhcnlpbmcsIHNvIHRoYXQgdGhlIGZyYWdtZW50IHNoYWRlciBjYW4gZGV0ZXJtaW5lIHRoZSBkaXN0YW5jZSBvZlxcbiAgICAvLyBlYWNoIGZyYWdtZW50IGZyb20gdGhlIHBvaW50IGZlYXR1cmUuXFxuICAgIC8vIEJlZm9yZSB3ZSBkbyBzbywgd2UgbmVlZCB0byBzY2FsZSBpdCB1cCBzdWZmaWNpZW50bHkgc28gdGhhdCB0aGVcXG4gICAgLy8ga2VybmVsIGZhbGxzIGVmZmVjdGl2ZWx5IHRvIHplcm8gYXQgdGhlIGVkZ2Ugb2YgdGhlIG1lc2guXFxuICAgIC8vIFRoYXQgaXMsIHdlIHdhbnQgdG8ga25vdyBTIHN1Y2ggdGhhdFxcbiAgICAvLyB3ZWlnaHQgKiB1X2ludGVuc2l0eSAqIEdBVVNTX0NPRUYgKiBleHAoLTAuNSAqIDMuMF4yICogU14yKSA9PSBaRVJPXFxuICAgIC8vIFdoaWNoIHNvbHZlcyB0bzpcXG4gICAgLy8gUyA9IHNxcnQoLTIuMCAqIGxvZyhaRVJPIC8gKHdlaWdodCAqIHVfaW50ZW5zaXR5ICogR0FVU1NfQ09FRikpKSAvIDMuMFxcbiAgICBmbG9hdCBTID0gc3FydCgtMi4wICogbG9nKFpFUk8gLyB3ZWlnaHQgLyB1X2ludGVuc2l0eSAvIEdBVVNTX0NPRUYpKSAvIDMuMDtcXG5cXG4gICAgLy8gUGFzcyB0aGUgdmFyeWluZyBpbiB1bml0cyBvZiByYWRpdXNcXG4gICAgdl9leHRydWRlID0gUyAqIHVuc2NhbGVkX2V4dHJ1ZGU7XFxuXFxuICAgIC8vIFNjYWxlIGJ5IHJhZGl1cyBhbmQgdGhlIHpvb20tYmFzZWQgc2NhbGUgZmFjdG9yIHRvIHByb2R1Y2UgYWN0dWFsXFxuICAgIC8vIG1lc2ggcG9zaXRpb25cXG4gICAgdmVjMiBleHRydWRlID0gdl9leHRydWRlICogcmFkaXVzICogdV9leHRydWRlX3NjYWxlO1xcblxcbiAgICAvLyBtdWx0aXBseSBhX3BvcyBieSAwLjUsIHNpbmNlIHdlIGhhZCBpdCAqIDIgaW4gb3JkZXIgdG8gc25lYWtcXG4gICAgLy8gaW4gZXh0cnVzaW9uIGRhdGFcXG4gICAgdmVjNCBwb3MgPSB2ZWM0KGZsb29yKGFfcG9zICogMC41KSArIGV4dHJ1ZGUsIDAsIDEpO1xcblxcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogcG9zO1xcbn1cXG5cIn0saGVhdG1hcFRleHR1cmU6e2ZyYWdtZW50U291cmNlOlwidW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1X2NvbG9yX3JhbXA7XFxudW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7XFxudmFyeWluZyB2ZWMyIHZfcG9zO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgZmxvYXQgdCA9IHRleHR1cmUyRCh1X2ltYWdlLCB2X3BvcykucjtcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1X2NvbG9yX3JhbXAsIHZlYzIodCwgMC41KSk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yICogdV9vcGFjaXR5O1xcblxcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcbiNlbmRpZlxcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHVfd29ybGQ7XFxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XFxudmFyeWluZyB2ZWMyIHZfcG9zO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MgKiB1X3dvcmxkLCAwLCAxKTtcXG5cXG4gICAgdl9wb3MueCA9IGFfcG9zLng7XFxuICAgIHZfcG9zLnkgPSAxLjAgLSBhX3Bvcy55O1xcbn1cXG5cIn0sY29sbGlzaW9uQm94OntmcmFnbWVudFNvdXJjZTpcIlxcbnZhcnlpbmcgZmxvYXQgdl9wbGFjZWQ7XFxudmFyeWluZyBmbG9hdCB2X25vdFVzZWQ7XFxuXFxudm9pZCBtYWluKCkge1xcblxcbiAgICBmbG9hdCBhbHBoYSA9IDAuNTtcXG5cXG4gICAgLy8gUmVkID0gY29sbGlzaW9uLCBoaWRlIGxhYmVsXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wLCAwLjAsIDAuMCwgMS4wKSAqIGFscGhhO1xcblxcbiAgICAvLyBCbHVlID0gbm8gY29sbGlzaW9uLCBsYWJlbCBpcyBzaG93aW5nXFxuICAgIGlmICh2X3BsYWNlZCA+IDAuNSkge1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMS4wLCAwLjUpICogYWxwaGE7XFxuICAgIH1cXG5cXG4gICAgaWYgKHZfbm90VXNlZCA+IDAuNSkge1xcbiAgICAgICAgLy8gVGhpcyBib3ggbm90IHVzZWQsIGZhZGUgaXQgb3V0XFxuICAgICAgICBnbF9GcmFnQ29sb3IgKj0gLjE7XFxuICAgIH1cXG59XCIsdmVydGV4U291cmNlOlwiYXR0cmlidXRlIHZlYzIgYV9wb3M7XFxuYXR0cmlidXRlIHZlYzIgYV9hbmNob3JfcG9zO1xcbmF0dHJpYnV0ZSB2ZWMyIGFfZXh0cnVkZTtcXG5hdHRyaWJ1dGUgdmVjMiBhX3BsYWNlZDtcXG5cXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHVfZXh0cnVkZV9zY2FsZTtcXG51bmlmb3JtIGZsb2F0IHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTtcXG5cXG52YXJ5aW5nIGZsb2F0IHZfcGxhY2VkO1xcbnZhcnlpbmcgZmxvYXQgdl9ub3RVc2VkO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgdmVjNCBwcm9qZWN0ZWRQb2ludCA9IHVfbWF0cml4ICogdmVjNChhX2FuY2hvcl9wb3MsIDAsIDEpO1xcbiAgICBoaWdocCBmbG9hdCBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlID0gcHJvamVjdGVkUG9pbnQudztcXG4gICAgaGlnaHAgZmxvYXQgY29sbGlzaW9uX3BlcnNwZWN0aXZlX3JhdGlvID0gY2xhbXAoXFxuICAgICAgICAwLjUgKyAwLjUgKiAodV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlIC8gY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZSksXFxuICAgICAgICAwLjAsIC8vIFByZXZlbnRzIG92ZXJzaXplZCBuZWFyLWZpZWxkIGJveGVzIGluIHBpdGNoZWQvb3Zlcnpvb21lZCB0aWxlc1xcbiAgICAgICAgNC4wKTtcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAuMCwgMS4wKTtcXG4gICAgZ2xfUG9zaXRpb24ueHkgKz0gYV9leHRydWRlICogdV9leHRydWRlX3NjYWxlICogZ2xfUG9zaXRpb24udyAqIGNvbGxpc2lvbl9wZXJzcGVjdGl2ZV9yYXRpbztcXG5cXG4gICAgdl9wbGFjZWQgPSBhX3BsYWNlZC54O1xcbiAgICB2X25vdFVzZWQgPSBhX3BsYWNlZC55O1xcbn1cXG5cIn0sY29sbGlzaW9uQ2lyY2xlOntmcmFnbWVudFNvdXJjZTpcInVuaWZvcm0gZmxvYXQgdV9vdmVyc2NhbGVfZmFjdG9yO1xcblxcbnZhcnlpbmcgZmxvYXQgdl9wbGFjZWQ7XFxudmFyeWluZyBmbG9hdCB2X25vdFVzZWQ7XFxudmFyeWluZyBmbG9hdCB2X3JhZGl1cztcXG52YXJ5aW5nIHZlYzIgdl9leHRydWRlO1xcbnZhcnlpbmcgdmVjMiB2X2V4dHJ1ZGVfc2NhbGU7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICBmbG9hdCBhbHBoYSA9IDAuNTtcXG5cXG4gICAgLy8gUmVkID0gY29sbGlzaW9uLCBoaWRlIGxhYmVsXFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDEuMCwgMC4wLCAwLjAsIDEuMCkgKiBhbHBoYTtcXG5cXG4gICAgLy8gQmx1ZSA9IG5vIGNvbGxpc2lvbiwgbGFiZWwgaXMgc2hvd2luZ1xcbiAgICBpZiAodl9wbGFjZWQgPiAwLjUpIHtcXG4gICAgICAgIGNvbG9yID0gdmVjNCgwLjAsIDAuMCwgMS4wLCAwLjUpICogYWxwaGE7XFxuICAgIH1cXG5cXG4gICAgaWYgKHZfbm90VXNlZCA+IDAuNSkge1xcbiAgICAgICAgLy8gVGhpcyBib3ggbm90IHVzZWQsIGZhZGUgaXQgb3V0XFxuICAgICAgICBjb2xvciAqPSAuMjtcXG4gICAgfVxcblxcbiAgICBmbG9hdCBleHRydWRlX3NjYWxlX2xlbmd0aCA9IGxlbmd0aCh2X2V4dHJ1ZGVfc2NhbGUpO1xcbiAgICBmbG9hdCBleHRydWRlX2xlbmd0aCA9IGxlbmd0aCh2X2V4dHJ1ZGUpICogZXh0cnVkZV9zY2FsZV9sZW5ndGg7XFxuICAgIGZsb2F0IHN0cm9rZV93aWR0aCA9IDE1LjAgKiBleHRydWRlX3NjYWxlX2xlbmd0aCAvIHVfb3ZlcnNjYWxlX2ZhY3RvcjtcXG4gICAgZmxvYXQgcmFkaXVzID0gdl9yYWRpdXMgKiBleHRydWRlX3NjYWxlX2xlbmd0aDtcXG5cXG4gICAgZmxvYXQgZGlzdGFuY2VfdG9fZWRnZSA9IGFicyhleHRydWRlX2xlbmd0aCAtIHJhZGl1cyk7XFxuICAgIGZsb2F0IG9wYWNpdHlfdCA9IHNtb290aHN0ZXAoLXN0cm9rZV93aWR0aCwgMC4wLCAtZGlzdGFuY2VfdG9fZWRnZSk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IG9wYWNpdHlfdCAqIGNvbG9yO1xcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCJhdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG5hdHRyaWJ1dGUgdmVjMiBhX2FuY2hvcl9wb3M7XFxuYXR0cmlidXRlIHZlYzIgYV9leHRydWRlO1xcbmF0dHJpYnV0ZSB2ZWMyIGFfcGxhY2VkO1xcblxcbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG51bmlmb3JtIHZlYzIgdV9leHRydWRlX3NjYWxlO1xcbnVuaWZvcm0gZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO1xcblxcbnZhcnlpbmcgZmxvYXQgdl9wbGFjZWQ7XFxudmFyeWluZyBmbG9hdCB2X25vdFVzZWQ7XFxudmFyeWluZyBmbG9hdCB2X3JhZGl1cztcXG5cXG52YXJ5aW5nIHZlYzIgdl9leHRydWRlO1xcbnZhcnlpbmcgdmVjMiB2X2V4dHJ1ZGVfc2NhbGU7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICB2ZWM0IHByb2plY3RlZFBvaW50ID0gdV9tYXRyaXggKiB2ZWM0KGFfYW5jaG9yX3BvcywgMCwgMSk7XFxuICAgIGhpZ2hwIGZsb2F0IGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2UgPSBwcm9qZWN0ZWRQb2ludC53O1xcbiAgICBoaWdocCBmbG9hdCBjb2xsaXNpb25fcGVyc3BlY3RpdmVfcmF0aW8gPSBjbGFtcChcXG4gICAgICAgIDAuNSArIDAuNSAqICh1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UgLyBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlKSxcXG4gICAgICAgIDAuMCwgLy8gUHJldmVudHMgb3ZlcnNpemVkIG5lYXItZmllbGQgY2lyY2xlcyBpbiBwaXRjaGVkL292ZXJ6b29tZWQgdGlsZXNcXG4gICAgICAgIDQuMCk7XFxuXFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLjAsIDEuMCk7XFxuXFxuICAgIGhpZ2hwIGZsb2F0IHBhZGRpbmdfZmFjdG9yID0gMS4yOyAvLyBQYWQgdGhlIHZlcnRpY2VzIHNsaWdodGx5IHRvIG1ha2Ugcm9vbSBmb3IgYW50aS1hbGlhcyBibHVyXFxuICAgIGdsX1Bvc2l0aW9uLnh5ICs9IGFfZXh0cnVkZSAqIHVfZXh0cnVkZV9zY2FsZSAqIHBhZGRpbmdfZmFjdG9yICogZ2xfUG9zaXRpb24udyAqIGNvbGxpc2lvbl9wZXJzcGVjdGl2ZV9yYXRpbztcXG5cXG4gICAgdl9wbGFjZWQgPSBhX3BsYWNlZC54O1xcbiAgICB2X25vdFVzZWQgPSBhX3BsYWNlZC55O1xcbiAgICB2X3JhZGl1cyA9IGFicyhhX2V4dHJ1ZGUueSk7IC8vIFdlIGRvbid0IHBpdGNoIHRoZSBjaXJjbGVzLCBzbyBib3RoIHVuaXRzIG9mIHRoZSBleHRydXNpb24gdmVjdG9yIGFyZSBlcXVhbCBpbiBtYWduaXR1ZGUgdG8gdGhlIHJhZGl1c1xcblxcbiAgICB2X2V4dHJ1ZGUgPSBhX2V4dHJ1ZGUgKiBwYWRkaW5nX2ZhY3RvcjtcXG4gICAgdl9leHRydWRlX3NjYWxlID0gdV9leHRydWRlX3NjYWxlICogdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlICogY29sbGlzaW9uX3BlcnNwZWN0aXZlX3JhdGlvO1xcbn1cXG5cIn0sZGVidWc6e2ZyYWdtZW50U291cmNlOlwidW5pZm9ybSBoaWdocCB2ZWM0IHVfY29sb3I7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICBnbF9GcmFnQ29sb3IgPSB1X2NvbG9yO1xcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCJhdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG5cXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XFxufVxcblwifSxmaWxsOntmcmFnbWVudFNvdXJjZTpcIiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAqIG9wYWNpdHk7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xcblxcbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xcbn1cXG5cIn0sZmlsbE91dGxpbmU6e2ZyYWdtZW50U291cmNlOlwiI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IG91dGxpbmVfY29sb3JcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbnZhcnlpbmcgdmVjMiB2X3BvcztcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgb3V0bGluZV9jb2xvclxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG4gICAgZmxvYXQgZGlzdCA9IGxlbmd0aCh2X3BvcyAtIGdsX0ZyYWdDb29yZC54eSk7XFxuICAgIGZsb2F0IGFscGhhID0gMS4wIC0gc21vb3Roc3RlcCgwLjAsIDEuMCwgZGlzdCk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IG91dGxpbmVfY29sb3IgKiAoYWxwaGEgKiBvcGFjaXR5KTtcXG5cXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcXG4jZW5kaWZcXG59XFxuXCIsdmVydGV4U291cmNlOlwiYXR0cmlidXRlIHZlYzIgYV9wb3M7XFxuXFxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcbnVuaWZvcm0gdmVjMiB1X3dvcmxkO1xcblxcbnZhcnlpbmcgdmVjMiB2X3BvcztcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgb3V0bGluZV9jb2xvclxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IG91dGxpbmVfY29sb3JcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcXG4gICAgdl9wb3MgPSAoZ2xfUG9zaXRpb24ueHkgLyBnbF9Qb3NpdGlvbi53ICsgMS4wKSAvIDIuMCAqIHVfd29ybGQ7XFxufVxcblwifSxmaWxsT3V0bGluZVBhdHRlcm46e2ZyYWdtZW50U291cmNlOlwidW5pZm9ybSB2ZWMyIHVfcGF0dGVybl90bF9hO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYTtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2I7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9icl9iO1xcbnVuaWZvcm0gdmVjMiB1X3RleHNpemU7XFxudW5pZm9ybSBmbG9hdCB1X21peDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO1xcblxcbnZhcnlpbmcgdmVjMiB2X3Bvc19hO1xcbnZhcnlpbmcgdmVjMiB2X3Bvc19iO1xcbnZhcnlpbmcgdmVjMiB2X3BvcztcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxuICAgIHZlYzIgaW1hZ2Vjb29yZCA9IG1vZCh2X3Bvc19hLCAxLjApO1xcbiAgICB2ZWMyIHBvcyA9IG1peCh1X3BhdHRlcm5fdGxfYSAvIHVfdGV4c2l6ZSwgdV9wYXR0ZXJuX2JyX2EgLyB1X3RleHNpemUsIGltYWdlY29vcmQpO1xcbiAgICB2ZWM0IGNvbG9yMSA9IHRleHR1cmUyRCh1X2ltYWdlLCBwb3MpO1xcblxcbiAgICB2ZWMyIGltYWdlY29vcmRfYiA9IG1vZCh2X3Bvc19iLCAxLjApO1xcbiAgICB2ZWMyIHBvczIgPSBtaXgodV9wYXR0ZXJuX3RsX2IgLyB1X3RleHNpemUsIHVfcGF0dGVybl9icl9iIC8gdV90ZXhzaXplLCBpbWFnZWNvb3JkX2IpO1xcbiAgICB2ZWM0IGNvbG9yMiA9IHRleHR1cmUyRCh1X2ltYWdlLCBwb3MyKTtcXG5cXG4gICAgLy8gZmluZCBkaXN0YW5jZSB0byBvdXRsaW5lIGZvciBhbHBoYSBpbnRlcnBvbGF0aW9uXFxuXFxuICAgIGZsb2F0IGRpc3QgPSBsZW5ndGgodl9wb3MgLSBnbF9GcmFnQ29vcmQueHkpO1xcbiAgICBmbG9hdCBhbHBoYSA9IDEuMCAtIHNtb290aHN0ZXAoMC4wLCAxLjAsIGRpc3QpO1xcblxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBtaXgoY29sb3IxLCBjb2xvcjIsIHVfbWl4KSAqIGFscGhhICogb3BhY2l0eTtcXG5cXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcXG4jZW5kaWZcXG59XFxuXCIsdmVydGV4U291cmNlOlwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcbnVuaWZvcm0gdmVjMiB1X3dvcmxkO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9hO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9iO1xcbnVuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX3VwcGVyO1xcbnVuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX2xvd2VyO1xcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZV9hO1xcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZV9iO1xcbnVuaWZvcm0gZmxvYXQgdV90aWxlX3VuaXRzX3RvX3BpeGVscztcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG5cXG52YXJ5aW5nIHZlYzIgdl9wb3NfYTtcXG52YXJ5aW5nIHZlYzIgdl9wb3NfYjtcXG52YXJ5aW5nIHZlYzIgdl9wb3M7XFxuXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XFxuXFxuICAgIHZfcG9zX2EgPSBnZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlciwgdV9waXhlbF9jb29yZF9sb3dlciwgdV9zY2FsZV9hICogdV9wYXR0ZXJuX3NpemVfYSwgdV90aWxlX3VuaXRzX3RvX3BpeGVscywgYV9wb3MpO1xcbiAgICB2X3Bvc19iID0gZ2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsIHVfcGl4ZWxfY29vcmRfbG93ZXIsIHVfc2NhbGVfYiAqIHVfcGF0dGVybl9zaXplX2IsIHVfdGlsZV91bml0c190b19waXhlbHMsIGFfcG9zKTtcXG5cXG4gICAgdl9wb3MgPSAoZ2xfUG9zaXRpb24ueHkgLyBnbF9Qb3NpdGlvbi53ICsgMS4wKSAvIDIuMCAqIHVfd29ybGQ7XFxufVxcblwifSxmaWxsUGF0dGVybjp7ZnJhZ21lbnRTb3VyY2U6XCJ1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2E7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9icl9hO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYjtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2I7XFxudW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTtcXG51bmlmb3JtIGZsb2F0IHVfbWl4O1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XFxuXFxudmFyeWluZyB2ZWMyIHZfcG9zX2E7XFxudmFyeWluZyB2ZWMyIHZfcG9zX2I7XFxuXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbiAgICB2ZWMyIGltYWdlY29vcmQgPSBtb2Qodl9wb3NfYSwgMS4wKTtcXG4gICAgdmVjMiBwb3MgPSBtaXgodV9wYXR0ZXJuX3RsX2EgLyB1X3RleHNpemUsIHVfcGF0dGVybl9icl9hIC8gdV90ZXhzaXplLCBpbWFnZWNvb3JkKTtcXG4gICAgdmVjNCBjb2xvcjEgPSB0ZXh0dXJlMkQodV9pbWFnZSwgcG9zKTtcXG5cXG4gICAgdmVjMiBpbWFnZWNvb3JkX2IgPSBtb2Qodl9wb3NfYiwgMS4wKTtcXG4gICAgdmVjMiBwb3MyID0gbWl4KHVfcGF0dGVybl90bF9iIC8gdV90ZXhzaXplLCB1X3BhdHRlcm5fYnJfYiAvIHVfdGV4c2l6ZSwgaW1hZ2Vjb29yZF9iKTtcXG4gICAgdmVjNCBjb2xvcjIgPSB0ZXh0dXJlMkQodV9pbWFnZSwgcG9zMik7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IG1peChjb2xvcjEsIGNvbG9yMiwgdV9taXgpICogb3BhY2l0eTtcXG5cXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcXG4jZW5kaWZcXG59XFxuXCIsdmVydGV4U291cmNlOlwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9hO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9iO1xcbnVuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX3VwcGVyO1xcbnVuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX2xvd2VyO1xcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZV9hO1xcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZV9iO1xcbnVuaWZvcm0gZmxvYXQgdV90aWxlX3VuaXRzX3RvX3BpeGVscztcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG5cXG52YXJ5aW5nIHZlYzIgdl9wb3NfYTtcXG52YXJ5aW5nIHZlYzIgdl9wb3NfYjtcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcXG5cXG4gICAgdl9wb3NfYSA9IGdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLCB1X3BpeGVsX2Nvb3JkX2xvd2VyLCB1X3NjYWxlX2EgKiB1X3BhdHRlcm5fc2l6ZV9hLCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLCBhX3Bvcyk7XFxuICAgIHZfcG9zX2IgPSBnZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlciwgdV9waXhlbF9jb29yZF9sb3dlciwgdV9zY2FsZV9iICogdV9wYXR0ZXJuX3NpemVfYiwgdV90aWxlX3VuaXRzX3RvX3BpeGVscywgYV9wb3MpO1xcbn1cXG5cIn0sZmlsbEV4dHJ1c2lvbjp7ZnJhZ21lbnRTb3VyY2U6XCJ2YXJ5aW5nIHZlYzQgdl9jb2xvcjtcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmFzZVxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoZWlnaHRcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmFzZVxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhlaWdodFxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZfY29sb3I7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcInVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG51bmlmb3JtIHZlYzMgdV9saWdodGNvbG9yO1xcbnVuaWZvcm0gbG93cCB2ZWMzIHVfbGlnaHRwb3M7XFxudW5pZm9ybSBsb3dwIGZsb2F0IHVfbGlnaHRpbnRlbnNpdHk7XFxuXFxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XFxuYXR0cmlidXRlIHZlYzQgYV9ub3JtYWxfZWQ7XFxuXFxudmFyeWluZyB2ZWM0IHZfY29sb3I7XFxuXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJhc2VcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGVpZ2h0XFxuXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJhc2VcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoZWlnaHRcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxcblxcbiAgICB2ZWMzIG5vcm1hbCA9IGFfbm9ybWFsX2VkLnh5ejtcXG5cXG4gICAgYmFzZSA9IG1heCgwLjAsIGJhc2UpO1xcbiAgICBoZWlnaHQgPSBtYXgoMC4wLCBoZWlnaHQpO1xcblxcbiAgICBmbG9hdCB0ID0gbW9kKG5vcm1hbC54LCAyLjApO1xcblxcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgdCA+IDAuMCA/IGhlaWdodCA6IGJhc2UsIDEpO1xcblxcbiAgICAvLyBSZWxhdGl2ZSBsdW1pbmFuY2UgKGhvdyBkYXJrL2JyaWdodCBpcyB0aGUgc3VyZmFjZSBjb2xvcj8pXFxuICAgIGZsb2F0IGNvbG9ydmFsdWUgPSBjb2xvci5yICogMC4yMTI2ICsgY29sb3IuZyAqIDAuNzE1MiArIGNvbG9yLmIgKiAwLjA3MjI7XFxuXFxuICAgIHZfY29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuXFxuICAgIC8vIEFkZCBzbGlnaHQgYW1iaWVudCBsaWdodGluZyBzbyBubyBleHRydXNpb25zIGFyZSB0b3RhbGx5IGJsYWNrXFxuICAgIHZlYzQgYW1iaWVudGxpZ2h0ID0gdmVjNCgwLjAzLCAwLjAzLCAwLjAzLCAxLjApO1xcbiAgICBjb2xvciArPSBhbWJpZW50bGlnaHQ7XFxuXFxuICAgIC8vIENhbGN1bGF0ZSBjb3ModGhldGEpLCB3aGVyZSB0aGV0YSBpcyB0aGUgYW5nbGUgYmV0d2VlbiBzdXJmYWNlIG5vcm1hbCBhbmQgZGlmZnVzZSBsaWdodCByYXlcXG4gICAgZmxvYXQgZGlyZWN0aW9uYWwgPSBjbGFtcChkb3Qobm9ybWFsIC8gMTYzODQuMCwgdV9saWdodHBvcyksIDAuMCwgMS4wKTtcXG5cXG4gICAgLy8gQWRqdXN0IGRpcmVjdGlvbmFsIHNvIHRoYXRcXG4gICAgLy8gdGhlIHJhbmdlIG9mIHZhbHVlcyBmb3IgaGlnaGxpZ2h0L3NoYWRpbmcgaXMgbmFycm93ZXJcXG4gICAgLy8gd2l0aCBsb3dlciBsaWdodCBpbnRlbnNpdHlcXG4gICAgLy8gYW5kIHdpdGggbGlnaHRlci9icmlnaHRlciBzdXJmYWNlIGNvbG9yc1xcbiAgICBkaXJlY3Rpb25hbCA9IG1peCgoMS4wIC0gdV9saWdodGludGVuc2l0eSksIG1heCgoMS4wIC0gY29sb3J2YWx1ZSArIHVfbGlnaHRpbnRlbnNpdHkpLCAxLjApLCBkaXJlY3Rpb25hbCk7XFxuXFxuICAgIC8vIEFkZCBncmFkaWVudCBhbG9uZyB6IGF4aXMgb2Ygc2lkZSBzdXJmYWNlc1xcbiAgICBpZiAobm9ybWFsLnkgIT0gMC4wKSB7XFxuICAgICAgICBkaXJlY3Rpb25hbCAqPSBjbGFtcCgodCArIGJhc2UpICogcG93KGhlaWdodCAvIDE1MC4wLCAwLjUpLCBtaXgoMC43LCAwLjk4LCAxLjAgLSB1X2xpZ2h0aW50ZW5zaXR5KSwgMS4wKTtcXG4gICAgfVxcblxcbiAgICAvLyBBc3NpZ24gZmluYWwgY29sb3IgYmFzZWQgb24gc3VyZmFjZSArIGFtYmllbnQgbGlnaHQgY29sb3IsIGRpZmZ1c2UgbGlnaHQgZGlyZWN0aW9uYWwsIGFuZCBsaWdodCBjb2xvclxcbiAgICAvLyB3aXRoIGxvd2VyIGJvdW5kcyBhZGp1c3RlZCB0byBodWUgb2YgbGlnaHRcXG4gICAgLy8gc28gdGhhdCBzaGFkaW5nIGlzIHRpbnRlZCB3aXRoIHRoZSBjb21wbGVtZW50YXJ5IChvcHBvc2l0ZSkgY29sb3IgdG8gdGhlIGxpZ2h0IGNvbG9yXFxuICAgIHZfY29sb3IuciArPSBjbGFtcChjb2xvci5yICogZGlyZWN0aW9uYWwgKiB1X2xpZ2h0Y29sb3IuciwgbWl4KDAuMCwgMC4zLCAxLjAgLSB1X2xpZ2h0Y29sb3IuciksIDEuMCk7XFxuICAgIHZfY29sb3IuZyArPSBjbGFtcChjb2xvci5nICogZGlyZWN0aW9uYWwgKiB1X2xpZ2h0Y29sb3IuZywgbWl4KDAuMCwgMC4zLCAxLjAgLSB1X2xpZ2h0Y29sb3IuZyksIDEuMCk7XFxuICAgIHZfY29sb3IuYiArPSBjbGFtcChjb2xvci5iICogZGlyZWN0aW9uYWwgKiB1X2xpZ2h0Y29sb3IuYiwgbWl4KDAuMCwgMC4zLCAxLjAgLSB1X2xpZ2h0Y29sb3IuYiksIDEuMCk7XFxufVxcblwifSxmaWxsRXh0cnVzaW9uUGF0dGVybjp7ZnJhZ21lbnRTb3VyY2U6XCJ1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2E7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9icl9hO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYjtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2I7XFxudW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTtcXG51bmlmb3JtIGZsb2F0IHVfbWl4O1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XFxuXFxudmFyeWluZyB2ZWMyIHZfcG9zX2E7XFxudmFyeWluZyB2ZWMyIHZfcG9zX2I7XFxudmFyeWluZyB2ZWM0IHZfbGlnaHRpbmc7XFxuXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJhc2VcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGVpZ2h0XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJhc2VcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoZWlnaHRcXG5cXG4gICAgdmVjMiBpbWFnZWNvb3JkID0gbW9kKHZfcG9zX2EsIDEuMCk7XFxuICAgIHZlYzIgcG9zID0gbWl4KHVfcGF0dGVybl90bF9hIC8gdV90ZXhzaXplLCB1X3BhdHRlcm5fYnJfYSAvIHVfdGV4c2l6ZSwgaW1hZ2Vjb29yZCk7XFxuICAgIHZlYzQgY29sb3IxID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHBvcyk7XFxuXFxuICAgIHZlYzIgaW1hZ2Vjb29yZF9iID0gbW9kKHZfcG9zX2IsIDEuMCk7XFxuICAgIHZlYzIgcG9zMiA9IG1peCh1X3BhdHRlcm5fdGxfYiAvIHVfdGV4c2l6ZSwgdV9wYXR0ZXJuX2JyX2IgLyB1X3RleHNpemUsIGltYWdlY29vcmRfYik7XFxuICAgIHZlYzQgY29sb3IyID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHBvczIpO1xcblxcbiAgICB2ZWM0IG1peGVkQ29sb3IgPSBtaXgoY29sb3IxLCBjb2xvcjIsIHVfbWl4KTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gbWl4ZWRDb2xvciAqIHZfbGlnaHRpbmc7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcInVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3NpemVfYTtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3NpemVfYjtcXG51bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF91cHBlcjtcXG51bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF9sb3dlcjtcXG51bmlmb3JtIGZsb2F0IHVfc2NhbGVfYTtcXG51bmlmb3JtIGZsb2F0IHVfc2NhbGVfYjtcXG51bmlmb3JtIGZsb2F0IHVfdGlsZV91bml0c190b19waXhlbHM7XFxudW5pZm9ybSBmbG9hdCB1X2hlaWdodF9mYWN0b3I7XFxuXFxudW5pZm9ybSB2ZWMzIHVfbGlnaHRjb2xvcjtcXG51bmlmb3JtIGxvd3AgdmVjMyB1X2xpZ2h0cG9zO1xcbnVuaWZvcm0gbG93cCBmbG9hdCB1X2xpZ2h0aW50ZW5zaXR5O1xcblxcbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xcbmF0dHJpYnV0ZSB2ZWM0IGFfbm9ybWFsX2VkO1xcblxcbnZhcnlpbmcgdmVjMiB2X3Bvc19hO1xcbnZhcnlpbmcgdmVjMiB2X3Bvc19iO1xcbnZhcnlpbmcgdmVjNCB2X2xpZ2h0aW5nO1xcbnZhcnlpbmcgZmxvYXQgdl9kaXJlY3Rpb25hbDtcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmFzZVxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoZWlnaHRcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmFzZVxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhlaWdodFxcblxcbiAgICB2ZWMzIG5vcm1hbCA9IGFfbm9ybWFsX2VkLnh5ejtcXG4gICAgZmxvYXQgZWRnZWRpc3RhbmNlID0gYV9ub3JtYWxfZWQudztcXG5cXG4gICAgYmFzZSA9IG1heCgwLjAsIGJhc2UpO1xcbiAgICBoZWlnaHQgPSBtYXgoMC4wLCBoZWlnaHQpO1xcblxcbiAgICBmbG9hdCB0ID0gbW9kKG5vcm1hbC54LCAyLjApO1xcbiAgICBmbG9hdCB6ID0gdCA+IDAuMCA/IGhlaWdodCA6IGJhc2U7XFxuXFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCB6LCAxKTtcXG5cXG4gICAgdmVjMiBwb3MgPSBub3JtYWwueCA9PSAxLjAgJiYgbm9ybWFsLnkgPT0gMC4wICYmIG5vcm1hbC56ID09IDE2Mzg0LjBcXG4gICAgICAgID8gYV9wb3MgLy8gZXh0cnVzaW9uIHRvcFxcbiAgICAgICAgOiB2ZWMyKGVkZ2VkaXN0YW5jZSwgeiAqIHVfaGVpZ2h0X2ZhY3Rvcik7IC8vIGV4dHJ1c2lvbiBzaWRlXFxuXFxuICAgIHZfcG9zX2EgPSBnZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlciwgdV9waXhlbF9jb29yZF9sb3dlciwgdV9zY2FsZV9hICogdV9wYXR0ZXJuX3NpemVfYSwgdV90aWxlX3VuaXRzX3RvX3BpeGVscywgcG9zKTtcXG4gICAgdl9wb3NfYiA9IGdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLCB1X3BpeGVsX2Nvb3JkX2xvd2VyLCB1X3NjYWxlX2IgKiB1X3BhdHRlcm5fc2l6ZV9iLCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLCBwb3MpO1xcblxcbiAgICB2X2xpZ2h0aW5nID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICBmbG9hdCBkaXJlY3Rpb25hbCA9IGNsYW1wKGRvdChub3JtYWwgLyAxNjM4My4wLCB1X2xpZ2h0cG9zKSwgMC4wLCAxLjApO1xcbiAgICBkaXJlY3Rpb25hbCA9IG1peCgoMS4wIC0gdV9saWdodGludGVuc2l0eSksIG1heCgoMC41ICsgdV9saWdodGludGVuc2l0eSksIDEuMCksIGRpcmVjdGlvbmFsKTtcXG5cXG4gICAgaWYgKG5vcm1hbC55ICE9IDAuMCkge1xcbiAgICAgICAgZGlyZWN0aW9uYWwgKj0gY2xhbXAoKHQgKyBiYXNlKSAqIHBvdyhoZWlnaHQgLyAxNTAuMCwgMC41KSwgbWl4KDAuNywgMC45OCwgMS4wIC0gdV9saWdodGludGVuc2l0eSksIDEuMCk7XFxuICAgIH1cXG5cXG4gICAgdl9saWdodGluZy5yZ2IgKz0gY2xhbXAoZGlyZWN0aW9uYWwgKiB1X2xpZ2h0Y29sb3IsIG1peCh2ZWMzKDAuMCksIHZlYzMoMC4zKSwgMS4wIC0gdV9saWdodGNvbG9yKSwgdmVjMygxLjApKTtcXG59XFxuXCJ9LGV4dHJ1c2lvblRleHR1cmU6e2ZyYWdtZW50U291cmNlOlwidW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcXG51bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTtcXG52YXJ5aW5nIHZlYzIgdl9wb3M7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodV9pbWFnZSwgdl9wb3MpICogdV9vcGFjaXR5O1xcblxcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcbiNlbmRpZlxcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHVfd29ybGQ7XFxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XFxudmFyeWluZyB2ZWMyIHZfcG9zO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MgKiB1X3dvcmxkLCAwLCAxKTtcXG5cXG4gICAgdl9wb3MueCA9IGFfcG9zLng7XFxuICAgIHZfcG9zLnkgPSAxLjAgLSBhX3Bvcy55O1xcbn1cXG5cIn0saGlsbHNoYWRlUHJlcGFyZTp7ZnJhZ21lbnRTb3VyY2U6XCIjaWZkZWYgR0xfRVNcXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2VuZGlmXFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcXG52YXJ5aW5nIHZlYzIgdl9wb3M7XFxudW5pZm9ybSB2ZWMyIHVfZGltZW5zaW9uO1xcbnVuaWZvcm0gZmxvYXQgdV96b29tO1xcbnVuaWZvcm0gZmxvYXQgdV9tYXh6b29tO1xcblxcbmZsb2F0IGdldEVsZXZhdGlvbih2ZWMyIGNvb3JkLCBmbG9hdCBiaWFzKSB7XFxuICAgIC8vIENvbnZlcnQgZW5jb2RlZCBlbGV2YXRpb24gdmFsdWUgdG8gbWV0ZXJzXFxuICAgIHZlYzQgZGF0YSA9IHRleHR1cmUyRCh1X2ltYWdlLCBjb29yZCkgKiAyNTUuMDtcXG4gICAgcmV0dXJuIChkYXRhLnIgKyBkYXRhLmcgKiAyNTYuMCArIGRhdGEuYiAqIDI1Ni4wICogMjU2LjApIC8gNC4wO1xcbn1cXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIHZlYzIgZXBzaWxvbiA9IDEuMCAvIHVfZGltZW5zaW9uO1xcblxcbiAgICAvLyBxdWVyaWVkIHBpeGVsczpcXG4gICAgLy8gKy0tLS0tLS0tLS0tK1xcbiAgICAvLyB8ICAgfCAgIHwgICB8XFxuICAgIC8vIHwgYSB8IGIgfCBjIHxcXG4gICAgLy8gfCAgIHwgICB8ICAgfFxcbiAgICAvLyArLS0tLS0tLS0tLS0rXFxuICAgIC8vIHwgICB8ICAgfCAgIHxcXG4gICAgLy8gfCBkIHwgZSB8IGYgfFxcbiAgICAvLyB8ICAgfCAgIHwgICB8XFxuICAgIC8vICstLS0tLS0tLS0tLStcXG4gICAgLy8gfCAgIHwgICB8ICAgfFxcbiAgICAvLyB8IGcgfCBoIHwgaSB8XFxuICAgIC8vIHwgICB8ICAgfCAgIHxcXG4gICAgLy8gKy0tLS0tLS0tLS0tK1xcblxcbiAgICBmbG9hdCBhID0gZ2V0RWxldmF0aW9uKHZfcG9zICsgdmVjMigtZXBzaWxvbi54LCAtZXBzaWxvbi55KSwgMC4wKTtcXG4gICAgZmxvYXQgYiA9IGdldEVsZXZhdGlvbih2X3BvcyArIHZlYzIoMCwgLWVwc2lsb24ueSksIDAuMCk7XFxuICAgIGZsb2F0IGMgPSBnZXRFbGV2YXRpb24odl9wb3MgKyB2ZWMyKGVwc2lsb24ueCwgLWVwc2lsb24ueSksIDAuMCk7XFxuICAgIGZsb2F0IGQgPSBnZXRFbGV2YXRpb24odl9wb3MgKyB2ZWMyKC1lcHNpbG9uLngsIDApLCAwLjApO1xcbiAgICBmbG9hdCBlID0gZ2V0RWxldmF0aW9uKHZfcG9zLCAwLjApO1xcbiAgICBmbG9hdCBmID0gZ2V0RWxldmF0aW9uKHZfcG9zICsgdmVjMihlcHNpbG9uLngsIDApLCAwLjApO1xcbiAgICBmbG9hdCBnID0gZ2V0RWxldmF0aW9uKHZfcG9zICsgdmVjMigtZXBzaWxvbi54LCBlcHNpbG9uLnkpLCAwLjApO1xcbiAgICBmbG9hdCBoID0gZ2V0RWxldmF0aW9uKHZfcG9zICsgdmVjMigwLCBlcHNpbG9uLnkpLCAwLjApO1xcbiAgICBmbG9hdCBpID0gZ2V0RWxldmF0aW9uKHZfcG9zICsgdmVjMihlcHNpbG9uLngsIGVwc2lsb24ueSksIDAuMCk7XFxuXFxuICAgIC8vIGhlcmUgd2UgZGl2aWRlIHRoZSB4IGFuZCB5IHNsb3BlcyBieSA4ICogcGl4ZWwgc2l6ZVxcbiAgICAvLyB3aGVyZSBwaXhlbCBzaXplIChha2EgbWV0ZXJzL3BpeGVsKSBpczpcXG4gICAgLy8gY2lyY3VtZmVyZW5jZSBvZiB0aGUgd29ybGQgLyAocGl4ZWxzIHBlciB0aWxlICogbnVtYmVyIG9mIHRpbGVzKVxcbiAgICAvLyB3aGljaCBpcyBlcXVpdmFsZW50IHRvOiA4ICogNDAwNzUwMTYuNjg1NTc4NSAvICg1MTIgKiBwb3coMiwgdV96b29tKSlcXG4gICAgLy8gd2hpY2ggY2FuIGJlIHJlZHVjZWQgdG86IHBvdygyLCAxOS4yNTYxOTk3ODUyNyAtIHVfem9vbSlcXG4gICAgLy8gd2Ugd2FudCB0byB2ZXJ0aWNhbGx5IGV4YWdnZXJhdGUgdGhlIGhpbGxzaGFkaW5nIHRob3VnaCwgYmVjYXVzZSBvdGhlcndpc2VcXG4gICAgLy8gaXQgaXMgYmFyZWx5IG5vdGljZWFibGUgYXQgbG93IHpvb21zLiB0byBkbyB0aGlzLCB3ZSBtdWx0aXBseSB0aGlzIGJ5IHNvbWVcXG4gICAgLy8gc2NhbGUgZmFjdG9yIHBvdygyLCAodV96b29tIC0gdV9tYXh6b29tKSAqIGEpIHdoZXJlIGEgaXMgYW4gYXJiaXRyYXJ5IHZhbHVlXFxuICAgIC8vIEhlcmUgd2UgdXNlIGE9MC4zIHdoaWNoIHdvcmtzIG91dCB0byB0aGUgZXhwcmVzc2lvbiBiZWxvdy4gc2VlIFxcbiAgICAvLyBuaWNraWRsdWdhc2gncyBhd2Vzb21lIGJyZWFrZG93biBmb3IgbW9yZSBpbmZvXFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL3B1bGwvNTI4NiNkaXNjdXNzaW9uX3IxNDg0MTk1NTZcXG4gICAgZmxvYXQgZXhhZ2dlcmF0aW9uID0gdV96b29tIDwgMi4wID8gMC40IDogdV96b29tIDwgNC41ID8gMC4zNSA6IDAuMztcXG5cXG4gICAgdmVjMiBkZXJpdiA9IHZlYzIoXFxuICAgICAgICAoYyArIGYgKyBmICsgaSkgLSAoYSArIGQgKyBkICsgZyksXFxuICAgICAgICAoZyArIGggKyBoICsgaSkgLSAoYSArIGIgKyBiICsgYylcXG4gICAgKSAvICBwb3coMi4wLCAodV96b29tIC0gdV9tYXh6b29tKSAqIGV4YWdnZXJhdGlvbiArIDE5LjI1NjIgLSB1X3pvb20pO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjbGFtcCh2ZWM0KFxcbiAgICAgICAgZGVyaXYueCAvIDIuMCArIDAuNSxcXG4gICAgICAgIGRlcml2LnkgLyAyLjAgKyAwLjUsXFxuICAgICAgICAxLjAsXFxuICAgICAgICAxLjApLCAwLjAsIDEuMCk7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcInVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG5hdHRyaWJ1dGUgdmVjMiBhX3RleHR1cmVfcG9zO1xcblxcbnZhcnlpbmcgdmVjMiB2X3BvcztcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcXG4gICAgdl9wb3MgPSAoYV90ZXh0dXJlX3BvcyAvIDgxOTIuMCkgLyAyLjAgKyAwLjI1O1xcbn1cXG5cIn0saGlsbHNoYWRlOntmcmFnbWVudFNvdXJjZTpcInVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XFxudmFyeWluZyB2ZWMyIHZfcG9zO1xcblxcbnVuaWZvcm0gdmVjMiB1X2xhdHJhbmdlO1xcbnVuaWZvcm0gdmVjMiB1X2xpZ2h0O1xcbnVuaWZvcm0gdmVjNCB1X3NoYWRvdztcXG51bmlmb3JtIHZlYzQgdV9oaWdobGlnaHQ7XFxudW5pZm9ybSB2ZWM0IHVfYWNjZW50O1xcblxcbiNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OTNcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIHZlYzQgcGl4ZWwgPSB0ZXh0dXJlMkQodV9pbWFnZSwgdl9wb3MpO1xcblxcbiAgICB2ZWMyIGRlcml2ID0gKChwaXhlbC5yZyAqIDIuMCkgLSAxLjApO1xcblxcbiAgICAvLyBXZSBkaXZpZGUgdGhlIHNsb3BlIGJ5IGEgc2NhbGUgZmFjdG9yIGJhc2VkIG9uIHRoZSBjb3NpbiBvZiB0aGUgcGl4ZWwncyBhcHByb3hpbWF0ZSBsYXRpdHVkZVxcbiAgICAvLyB0byBhY2NvdW50IGZvciBtZXJjYXRvciBwcm9qZWN0aW9uIGRpc3RvcnRpb24uIHNlZSAjNDgwNyBmb3IgZGV0YWlsc1xcbiAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGNvcyhyYWRpYW5zKCh1X2xhdHJhbmdlWzBdIC0gdV9sYXRyYW5nZVsxXSkgKiAoMS4wIC0gdl9wb3MueSkgKyB1X2xhdHJhbmdlWzFdKSk7XFxuICAgIC8vIFdlIGFsc28gbXVsdGlwbHkgdGhlIHNsb3BlIGJ5IGFuIGFyYml0cmFyeSB6LWZhY3RvciBvZiAxLjI1XFxuICAgIGZsb2F0IHNsb3BlID0gYXRhbigxLjI1ICogbGVuZ3RoKGRlcml2KSAvIHNjYWxlRmFjdG9yKTtcXG4gICAgZmxvYXQgYXNwZWN0ID0gZGVyaXYueCAhPSAwLjAgPyBhdGFuKGRlcml2LnksIC1kZXJpdi54KSA6IFBJIC8gMi4wICogKGRlcml2LnkgPiAwLjAgPyAxLjAgOiAtMS4wKTtcXG5cXG4gICAgZmxvYXQgaW50ZW5zaXR5ID0gdV9saWdodC54O1xcbiAgICAvLyBXZSBhZGQgUEkgdG8gbWFrZSB0aGlzIHByb3BlcnR5IG1hdGNoIHRoZSBnbG9iYWwgbGlnaHQgb2JqZWN0LCB3aGljaCBhZGRzIFBJLzIgdG8gdGhlIGxpZ2h0J3MgYXppbXV0aGFsXFxuICAgIC8vIHBvc2l0aW9uIHByb3BlcnR5IHRvIGFjY291bnQgZm9yIDBkZWcgY29ycmVzcG9uZGluZyB0byBub3J0aC90aGUgdG9wIG9mIHRoZSB2aWV3cG9ydCBpbiB0aGUgc3R5bGUgc3BlY1xcbiAgICAvLyBhbmQgdGhlIG9yaWdpbmFsIHNoYWRlciB3YXMgd3JpdHRlbiB0byBhY2NlcHQgKC1pbGx1bWluYXRpb25EaXJlY3Rpb24gLSA5MCkgYXMgdGhlIGF6aW11dGhhbC5cXG4gICAgZmxvYXQgYXppbXV0aCA9IHVfbGlnaHQueSArIFBJO1xcblxcbiAgICAvLyBXZSBzY2FsZSB0aGUgc2xvcGUgZXhwb25lbnRpYWxseSBiYXNlZCBvbiBpbnRlbnNpdHksIHVzaW5nIGEgY2FsY3VsYXRpb24gc2ltaWxhciB0b1xcbiAgICAvLyB0aGUgZXhwb25lbnRpYWwgaW50ZXJwb2xhdGlvbiBmdW5jdGlvbiBpbiB0aGUgc3R5bGUgc3BlYzpcXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvYmxvYi9tYXN0ZXIvc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9pbnRlcnBvbGF0ZS5qcyNMMjE3LUwyMjhcXG4gICAgLy8gc28gdGhhdCBoaWdoZXIgaW50ZW5zaXR5IHZhbHVlcyBjcmVhdGUgbW9yZSBvcGFxdWUgaGlsbHNoYWRpbmcuXFxuICAgIGZsb2F0IGJhc2UgPSAxLjg3NSAtIGludGVuc2l0eSAqIDEuNzU7XFxuICAgIGZsb2F0IG1heFZhbHVlID0gMC41ICogUEk7XFxuICAgIGZsb2F0IHNjYWxlZFNsb3BlID0gaW50ZW5zaXR5ICE9IDAuNSA/ICgocG93KGJhc2UsIHNsb3BlKSAtIDEuMCkgLyAocG93KGJhc2UsIG1heFZhbHVlKSAtIDEuMCkpICogbWF4VmFsdWUgOiBzbG9wZTtcXG5cXG4gICAgLy8gVGhlIGFjY2VudCBjb2xvciBpcyBjYWxjdWxhdGVkIHdpdGggdGhlIGNvc2luZSBvZiB0aGUgc2xvcGUgd2hpbGUgdGhlIHNoYWRlIGNvbG9yIGlzIGNhbGN1bGF0ZWQgd2l0aCB0aGUgc2luZVxcbiAgICAvLyBzbyB0aGF0IHRoZSBhY2NlbnQgY29sb3IncyByYXRlIG9mIGNoYW5nZSBlYXNlcyBpbiB3aGlsZSB0aGUgc2hhZGUgY29sb3IncyBlYXNlcyBvdXQuXFxuICAgIGZsb2F0IGFjY2VudCA9IGNvcyhzY2FsZWRTbG9wZSk7XFxuICAgIC8vIFdlIG11bHRpcGx5IGJvdGggdGhlIGFjY2VudCBhbmQgc2hhZGUgY29sb3IgYnkgYSBjbGFtcGVkIGludGVuc2l0eSB2YWx1ZVxcbiAgICAvLyBzbyB0aGF0IGludGVuc2l0aWVzID49IDAuNSBkbyBub3QgYWRkaXRpb25hbGx5IGFmZmVjdCB0aGUgY29sb3IgdmFsdWVzXFxuICAgIC8vIHdoaWxlIGludGVuc2l0eSB2YWx1ZXMgPCAwLjUgbWFrZSB0aGUgb3ZlcmFsbCBjb2xvciBtb3JlIHRyYW5zcGFyZW50LlxcbiAgICB2ZWM0IGFjY2VudF9jb2xvciA9ICgxLjAgLSBhY2NlbnQpICogdV9hY2NlbnQgKiBjbGFtcChpbnRlbnNpdHkgKiAyLjAsIDAuMCwgMS4wKTtcXG4gICAgZmxvYXQgc2hhZGUgPSBhYnMobW9kKChhc3BlY3QgKyBhemltdXRoKSAvIFBJICsgMC41LCAyLjApIC0gMS4wKTtcXG4gICAgdmVjNCBzaGFkZV9jb2xvciA9IG1peCh1X3NoYWRvdywgdV9oaWdobGlnaHQsIHNoYWRlKSAqIHNpbihzY2FsZWRTbG9wZSkgKiBjbGFtcChpbnRlbnNpdHkgKiAyLjAsIDAuMCwgMS4wKTtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gYWNjZW50X2NvbG9yICogKDEuMCAtIHNoYWRlX2NvbG9yLmEpICsgc2hhZGVfY29sb3I7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcInVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG5hdHRyaWJ1dGUgdmVjMiBhX3RleHR1cmVfcG9zO1xcblxcbnZhcnlpbmcgdmVjMiB2X3BvcztcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcXG4gICAgdl9wb3MgPSBhX3RleHR1cmVfcG9zIC8gODE5Mi4wO1xcbn1cXG5cIn0sbGluZTp7ZnJhZ21lbnRTb3VyY2U6XCIjcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxudmFyeWluZyB2ZWMyIHZfd2lkdGgyO1xcbnZhcnlpbmcgdmVjMiB2X25vcm1hbDtcXG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBvZiB0aGUgcGl4ZWwgZnJvbSB0aGUgbGluZSBpbiBwaXhlbHMuXFxuICAgIGZsb2F0IGRpc3QgPSBsZW5ndGgodl9ub3JtYWwpICogdl93aWR0aDIucztcXG5cXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhbnRpYWxpYXNpbmcgZmFkZSBmYWN0b3IuIFRoaXMgaXMgZWl0aGVyIHdoZW4gZmFkaW5nIGluXFxuICAgIC8vIHRoZSBsaW5lIGluIGNhc2Ugb2YgYW4gb2Zmc2V0IGxpbmUgKHZfd2lkdGgyLnQpIG9yIHdoZW4gZmFkaW5nIG91dFxcbiAgICAvLyAodl93aWR0aDIucylcXG4gICAgZmxvYXQgYmx1cjIgPSAoYmx1ciArIDEuMCAvIERFVklDRV9QSVhFTF9SQVRJTykgKiB2X2dhbW1hX3NjYWxlO1xcbiAgICBmbG9hdCBhbHBoYSA9IGNsYW1wKG1pbihkaXN0IC0gKHZfd2lkdGgyLnQgLSBibHVyMiksIHZfd2lkdGgyLnMgLSBkaXN0KSAvIGJsdXIyLCAwLjAsIDEuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yICogKGFscGhhICogb3BhY2l0eSk7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcIlxcblxcbi8vIHRoZSBkaXN0YW5jZSBvdmVyIHdoaWNoIHRoZSBsaW5lIGVkZ2UgZmFkZXMgb3V0Llxcbi8vIFJldGluYSBkZXZpY2VzIG5lZWQgYSBzbWFsbGVyIGRpc3RhbmNlIHRvIGF2b2lkIGFsaWFzaW5nLlxcbiNkZWZpbmUgQU5USUFMSUFTSU5HIDEuMCAvIERFVklDRV9QSVhFTF9SQVRJTyAvIDIuMFxcblxcbi8vIGZsb29yKDEyNyAvIDIpID09IDYzLjBcXG4vLyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pdGVyIGxpbWl0IGlzIDIuMCBhdCB0aGUgbW9tZW50LiB0aGUgZXh0cnVkZSBub3JtYWwgaXNcXG4vLyBzdG9yZWQgaW4gYSBieXRlICgtMTI4Li4xMjcpLiB3ZSBzY2FsZSByZWd1bGFyIG5vcm1hbHMgdXAgdG8gbGVuZ3RoIDYzLCBidXRcXG4vLyB0aGVyZSBhcmUgYWxzbyBcXFwic3BlY2lhbFxcXCIgbm9ybWFscyB0aGF0IGhhdmUgYSBiaWdnZXIgbGVuZ3RoIChvZiB1cCB0byAxMjYgaW5cXG4vLyB0aGlzIGNhc2UpLlxcbi8vICNkZWZpbmUgc2NhbGUgNjMuMFxcbiNkZWZpbmUgc2NhbGUgMC4wMTU4NzMwMTZcXG5cXG5hdHRyaWJ1dGUgdmVjNCBhX3Bvc19ub3JtYWw7XFxuYXR0cmlidXRlIHZlYzQgYV9kYXRhO1xcblxcbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9yYXRpbztcXG51bmlmb3JtIHZlYzIgdV9nbF91bml0c190b19waXhlbHM7XFxuXFxudmFyeWluZyB2ZWMyIHZfbm9ybWFsO1xcbnZhcnlpbmcgdmVjMiB2X3dpZHRoMjtcXG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XFxudmFyeWluZyBoaWdocCBmbG9hdCB2X2xpbmVzb2ZhcjtcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9mZnNldFxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCB3aWR0aFxcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvZmZzZXRcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCB3aWR0aFxcblxcbiAgICB2ZWMyIGFfZXh0cnVkZSA9IGFfZGF0YS54eSAtIDEyOC4wO1xcbiAgICBmbG9hdCBhX2RpcmVjdGlvbiA9IG1vZChhX2RhdGEueiwgNC4wKSAtIDEuMDtcXG5cXG4gICAgdl9saW5lc29mYXIgPSAoZmxvb3IoYV9kYXRhLnogLyA0LjApICsgYV9kYXRhLncgKiA2NC4wKSAqIDIuMDtcXG5cXG4gICAgdmVjMiBwb3MgPSBhX3Bvc19ub3JtYWwueHk7XFxuXFxuICAgIC8vIHggaXMgMSBpZiBpdCdzIGEgcm91bmQgY2FwLCAwIG90aGVyd2lzZVxcbiAgICAvLyB5IGlzIDEgaWYgdGhlIG5vcm1hbCBwb2ludHMgdXAsIGFuZCAtMSBpZiBpdCBwb2ludHMgZG93blxcbiAgICBtZWRpdW1wIHZlYzIgbm9ybWFsID0gYV9wb3Nfbm9ybWFsLnp3O1xcbiAgICB2X25vcm1hbCA9IG5vcm1hbDtcXG5cXG4gICAgLy8gdGhlc2UgdHJhbnNmb3JtYXRpb25zIHVzZWQgdG8gYmUgYXBwbGllZCBpbiB0aGUgSlMgYW5kIG5hdGl2ZSBjb2RlIGJhc2VzLlxcbiAgICAvLyBtb3ZlZCB0aGVtIGludG8gdGhlIHNoYWRlciBmb3IgY2xhcml0eSBhbmQgc2ltcGxpY2l0eS5cXG4gICAgZ2Fwd2lkdGggPSBnYXB3aWR0aCAvIDIuMDtcXG4gICAgZmxvYXQgaGFsZndpZHRoID0gd2lkdGggLyAyLjA7XFxuICAgIG9mZnNldCA9IC0xLjAgKiBvZmZzZXQ7XFxuXFxuICAgIGZsb2F0IGluc2V0ID0gZ2Fwd2lkdGggKyAoZ2Fwd2lkdGggPiAwLjAgPyBBTlRJQUxJQVNJTkcgOiAwLjApO1xcbiAgICBmbG9hdCBvdXRzZXQgPSBnYXB3aWR0aCArIGhhbGZ3aWR0aCAqIChnYXB3aWR0aCA+IDAuMCA/IDIuMCA6IDEuMCkgKyBBTlRJQUxJQVNJTkc7XFxuXFxuICAgIC8vIFNjYWxlIHRoZSBleHRydXNpb24gdmVjdG9yIGRvd24gdG8gYSBub3JtYWwgYW5kIHRoZW4gdXAgYnkgdGhlIGxpbmUgd2lkdGhcXG4gICAgLy8gb2YgdGhpcyB2ZXJ0ZXguXFxuICAgIG1lZGl1bXAgdmVjMiBkaXN0ID0gb3V0c2V0ICogYV9leHRydWRlICogc2NhbGU7XFxuXFxuICAgIC8vIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IHdoZW4gZHJhd2luZyBhIGxpbmUgdGhhdCBpcyB0byB0aGUgc2lkZSBvZiB0aGUgYWN0dWFsIGxpbmUuXFxuICAgIC8vIFdlIGRvIHRoaXMgYnkgY3JlYXRpbmcgYSB2ZWN0b3IgdGhhdCBwb2ludHMgdG93YXJkcyB0aGUgZXh0cnVkZSwgYnV0IHJvdGF0ZVxcbiAgICAvLyBpdCB3aGVuIHdlJ3JlIGRyYXdpbmcgcm91bmQgZW5kIHBvaW50cyAoYV9kaXJlY3Rpb24gPSAtMSBvciAxKSBzaW5jZSB0aGVpclxcbiAgICAvLyBleHRydWRlIHZlY3RvciBwb2ludHMgaW4gYW5vdGhlciBkaXJlY3Rpb24uXFxuICAgIG1lZGl1bXAgZmxvYXQgdSA9IDAuNSAqIGFfZGlyZWN0aW9uO1xcbiAgICBtZWRpdW1wIGZsb2F0IHQgPSAxLjAgLSBhYnModSk7XFxuICAgIG1lZGl1bXAgdmVjMiBvZmZzZXQyID0gb2Zmc2V0ICogYV9leHRydWRlICogc2NhbGUgKiBub3JtYWwueSAqIG1hdDIodCwgLXUsIHUsIHQpO1xcblxcbiAgICB2ZWM0IHByb2plY3RlZF9leHRydWRlID0gdV9tYXRyaXggKiB2ZWM0KGRpc3QgLyB1X3JhdGlvLCAwLjAsIDAuMCk7XFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KHBvcyArIG9mZnNldDIgLyB1X3JhdGlvLCAwLjAsIDEuMCkgKyBwcm9qZWN0ZWRfZXh0cnVkZTtcXG5cXG4gICAgLy8gY2FsY3VsYXRlIGhvdyBtdWNoIHRoZSBwZXJzcGVjdGl2ZSB2aWV3IHNxdWlzaGVzIG9yIHN0cmV0Y2hlcyB0aGUgZXh0cnVkZVxcbiAgICBmbG9hdCBleHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlID0gbGVuZ3RoKGRpc3QpO1xcbiAgICBmbG9hdCBleHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlID0gbGVuZ3RoKHByb2plY3RlZF9leHRydWRlLnh5IC8gZ2xfUG9zaXRpb24udyAqIHVfZ2xfdW5pdHNfdG9fcGl4ZWxzKTtcXG4gICAgdl9nYW1tYV9zY2FsZSA9IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmUgLyBleHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlO1xcblxcbiAgICB2X3dpZHRoMiA9IHZlYzIob3V0c2V0LCBpbnNldCk7XFxufVxcblwifSxsaW5lR3JhZGllbnQ6e2ZyYWdtZW50U291cmNlOlwiXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XFxuXFxudmFyeWluZyB2ZWMyIHZfd2lkdGgyO1xcbnZhcnlpbmcgdmVjMiB2X25vcm1hbDtcXG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XFxudmFyeWluZyBoaWdocCBmbG9hdCB2X2xpbmVwcm9ncmVzcztcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG5cXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBvZiB0aGUgcGl4ZWwgZnJvbSB0aGUgbGluZSBpbiBwaXhlbHMuXFxuICAgIGZsb2F0IGRpc3QgPSBsZW5ndGgodl9ub3JtYWwpICogdl93aWR0aDIucztcXG5cXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhbnRpYWxpYXNpbmcgZmFkZSBmYWN0b3IuIFRoaXMgaXMgZWl0aGVyIHdoZW4gZmFkaW5nIGluXFxuICAgIC8vIHRoZSBsaW5lIGluIGNhc2Ugb2YgYW4gb2Zmc2V0IGxpbmUgKHZfd2lkdGgyLnQpIG9yIHdoZW4gZmFkaW5nIG91dFxcbiAgICAvLyAodl93aWR0aDIucylcXG4gICAgZmxvYXQgYmx1cjIgPSAoYmx1ciArIDEuMCAvIERFVklDRV9QSVhFTF9SQVRJTykgKiB2X2dhbW1hX3NjYWxlO1xcbiAgICBmbG9hdCBhbHBoYSA9IGNsYW1wKG1pbihkaXN0IC0gKHZfd2lkdGgyLnQgLSBibHVyMiksIHZfd2lkdGgyLnMgLSBkaXN0KSAvIGJsdXIyLCAwLjAsIDEuMCk7XFxuXFxuICAgIC8vIEZvciBncmFkaWVudCBsaW5lcywgdl9saW5lcHJvZ3Jlc3MgaXMgdGhlIHJhdGlvIGFsb25nIHRoZSBlbnRpcmUgbGluZSxcXG4gICAgLy8gc2NhbGVkIHRvIFswLCAyXjE1KSwgYW5kIHRoZSBncmFkaWVudCByYW1wIGlzIHN0b3JlZCBpbiBhIHRleHR1cmUuXFxuICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodV9pbWFnZSwgdmVjMih2X2xpbmVwcm9ncmVzcywgMC41KSk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yICogKGFscGhhICogb3BhY2l0eSk7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcIlxcbi8vIHRoZSBhdHRyaWJ1dGUgY29udmV5aW5nIHByb2dyZXNzIGFsb25nIGEgbGluZSBpcyBzY2FsZWQgdG8gWzAsIDJeMTUpXFxuI2RlZmluZSBNQVhfTElORV9ESVNUQU5DRSAzMjc2Ny4wXFxuXFxuLy8gdGhlIGRpc3RhbmNlIG92ZXIgd2hpY2ggdGhlIGxpbmUgZWRnZSBmYWRlcyBvdXQuXFxuLy8gUmV0aW5hIGRldmljZXMgbmVlZCBhIHNtYWxsZXIgZGlzdGFuY2UgdG8gYXZvaWQgYWxpYXNpbmcuXFxuI2RlZmluZSBBTlRJQUxJQVNJTkcgMS4wIC8gREVWSUNFX1BJWEVMX1JBVElPIC8gMi4wXFxuXFxuLy8gZmxvb3IoMTI3IC8gMikgPT0gNjMuMFxcbi8vIHRoZSBtYXhpbXVtIGFsbG93ZWQgbWl0ZXIgbGltaXQgaXMgMi4wIGF0IHRoZSBtb21lbnQuIHRoZSBleHRydWRlIG5vcm1hbCBpc1xcbi8vIHN0b3JlZCBpbiBhIGJ5dGUgKC0xMjguLjEyNykuIHdlIHNjYWxlIHJlZ3VsYXIgbm9ybWFscyB1cCB0byBsZW5ndGggNjMsIGJ1dFxcbi8vIHRoZXJlIGFyZSBhbHNvIFxcXCJzcGVjaWFsXFxcIiBub3JtYWxzIHRoYXQgaGF2ZSBhIGJpZ2dlciBsZW5ndGggKG9mIHVwIHRvIDEyNiBpblxcbi8vIHRoaXMgY2FzZSkuXFxuLy8gI2RlZmluZSBzY2FsZSA2My4wXFxuI2RlZmluZSBzY2FsZSAwLjAxNTg3MzAxNlxcblxcbmF0dHJpYnV0ZSB2ZWM0IGFfcG9zX25vcm1hbDtcXG5hdHRyaWJ1dGUgdmVjNCBhX2RhdGE7XFxuXFxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcbnVuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X3JhdGlvO1xcbnVuaWZvcm0gdmVjMiB1X2dsX3VuaXRzX3RvX3BpeGVscztcXG5cXG52YXJ5aW5nIHZlYzIgdl9ub3JtYWw7XFxudmFyeWluZyB2ZWMyIHZfd2lkdGgyO1xcbnZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcXG52YXJ5aW5nIGhpZ2hwIGZsb2F0IHZfbGluZXByb2dyZXNzO1xcblxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb2Zmc2V0XFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHdpZHRoXFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvZmZzZXRcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCB3aWR0aFxcblxcbiAgICB2ZWMyIGFfZXh0cnVkZSA9IGFfZGF0YS54eSAtIDEyOC4wO1xcbiAgICBmbG9hdCBhX2RpcmVjdGlvbiA9IG1vZChhX2RhdGEueiwgNC4wKSAtIDEuMDtcXG5cXG4gICAgdl9saW5lcHJvZ3Jlc3MgPSAoZmxvb3IoYV9kYXRhLnogLyA0LjApICsgYV9kYXRhLncgKiA2NC4wKSAqIDIuMCAvIE1BWF9MSU5FX0RJU1RBTkNFO1xcblxcbiAgICB2ZWMyIHBvcyA9IGFfcG9zX25vcm1hbC54eTtcXG5cXG4gICAgLy8geCBpcyAxIGlmIGl0J3MgYSByb3VuZCBjYXAsIDAgb3RoZXJ3aXNlXFxuICAgIC8vIHkgaXMgMSBpZiB0aGUgbm9ybWFsIHBvaW50cyB1cCwgYW5kIC0xIGlmIGl0IHBvaW50cyBkb3duXFxuICAgIG1lZGl1bXAgdmVjMiBub3JtYWwgPSBhX3Bvc19ub3JtYWwuenc7XFxuICAgIHZfbm9ybWFsID0gbm9ybWFsO1xcblxcbiAgICAvLyB0aGVzZSB0cmFuc2Zvcm1hdGlvbnMgdXNlZCB0byBiZSBhcHBsaWVkIGluIHRoZSBKUyBhbmQgbmF0aXZlIGNvZGUgYmFzZXMuXFxuICAgIC8vIG1vdmVkIHRoZW0gaW50byB0aGUgc2hhZGVyIGZvciBjbGFyaXR5IGFuZCBzaW1wbGljaXR5LlxcbiAgICBnYXB3aWR0aCA9IGdhcHdpZHRoIC8gMi4wO1xcbiAgICBmbG9hdCBoYWxmd2lkdGggPSB3aWR0aCAvIDIuMDtcXG4gICAgb2Zmc2V0ID0gLTEuMCAqIG9mZnNldDtcXG5cXG4gICAgZmxvYXQgaW5zZXQgPSBnYXB3aWR0aCArIChnYXB3aWR0aCA+IDAuMCA/IEFOVElBTElBU0lORyA6IDAuMCk7XFxuICAgIGZsb2F0IG91dHNldCA9IGdhcHdpZHRoICsgaGFsZndpZHRoICogKGdhcHdpZHRoID4gMC4wID8gMi4wIDogMS4wKSArIEFOVElBTElBU0lORztcXG5cXG4gICAgLy8gU2NhbGUgdGhlIGV4dHJ1c2lvbiB2ZWN0b3IgZG93biB0byBhIG5vcm1hbCBhbmQgdGhlbiB1cCBieSB0aGUgbGluZSB3aWR0aFxcbiAgICAvLyBvZiB0aGlzIHZlcnRleC5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpc3QgPSBvdXRzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZTtcXG5cXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBvZmZzZXQgd2hlbiBkcmF3aW5nIGEgbGluZSB0aGF0IGlzIHRvIHRoZSBzaWRlIG9mIHRoZSBhY3R1YWwgbGluZS5cXG4gICAgLy8gV2UgZG8gdGhpcyBieSBjcmVhdGluZyBhIHZlY3RvciB0aGF0IHBvaW50cyB0b3dhcmRzIHRoZSBleHRydWRlLCBidXQgcm90YXRlXFxuICAgIC8vIGl0IHdoZW4gd2UncmUgZHJhd2luZyByb3VuZCBlbmQgcG9pbnRzIChhX2RpcmVjdGlvbiA9IC0xIG9yIDEpIHNpbmNlIHRoZWlyXFxuICAgIC8vIGV4dHJ1ZGUgdmVjdG9yIHBvaW50cyBpbiBhbm90aGVyIGRpcmVjdGlvbi5cXG4gICAgbWVkaXVtcCBmbG9hdCB1ID0gMC41ICogYV9kaXJlY3Rpb247XFxuICAgIG1lZGl1bXAgZmxvYXQgdCA9IDEuMCAtIGFicyh1KTtcXG4gICAgbWVkaXVtcCB2ZWMyIG9mZnNldDIgPSBvZmZzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZSAqIG5vcm1hbC55ICogbWF0Mih0LCAtdSwgdSwgdCk7XFxuXFxuICAgIHZlYzQgcHJvamVjdGVkX2V4dHJ1ZGUgPSB1X21hdHJpeCAqIHZlYzQoZGlzdCAvIHVfcmF0aW8sIDAuMCwgMC4wKTtcXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQocG9zICsgb2Zmc2V0MiAvIHVfcmF0aW8sIDAuMCwgMS4wKSArIHByb2plY3RlZF9leHRydWRlO1xcblxcbiAgICAvLyBjYWxjdWxhdGUgaG93IG11Y2ggdGhlIHBlcnNwZWN0aXZlIHZpZXcgc3F1aXNoZXMgb3Igc3RyZXRjaGVzIHRoZSBleHRydWRlXFxuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmUgPSBsZW5ndGgoZGlzdCk7XFxuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmUgPSBsZW5ndGgocHJvamVjdGVkX2V4dHJ1ZGUueHkgLyBnbF9Qb3NpdGlvbi53ICogdV9nbF91bml0c190b19waXhlbHMpO1xcbiAgICB2X2dhbW1hX3NjYWxlID0gZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZSAvIGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU7XFxuXFxuICAgIHZfd2lkdGgyID0gdmVjMihvdXRzZXQsIGluc2V0KTtcXG59XFxuXCJ9LGxpbmVQYXR0ZXJuOntmcmFnbWVudFNvdXJjZTpcInVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9hO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9iO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYTtcXG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2E7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl90bF9iO1xcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYjtcXG51bmlmb3JtIHZlYzIgdV90ZXhzaXplO1xcbnVuaWZvcm0gZmxvYXQgdV9mYWRlO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XFxuXFxudmFyeWluZyB2ZWMyIHZfbm9ybWFsO1xcbnZhcnlpbmcgdmVjMiB2X3dpZHRoMjtcXG52YXJ5aW5nIGZsb2F0IHZfbGluZXNvZmFyO1xcbnZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxuICAgIC8vIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2Ugb2YgdGhlIHBpeGVsIGZyb20gdGhlIGxpbmUgaW4gcGl4ZWxzLlxcbiAgICBmbG9hdCBkaXN0ID0gbGVuZ3RoKHZfbm9ybWFsKSAqIHZfd2lkdGgyLnM7XFxuXFxuICAgIC8vIENhbGN1bGF0ZSB0aGUgYW50aWFsaWFzaW5nIGZhZGUgZmFjdG9yLiBUaGlzIGlzIGVpdGhlciB3aGVuIGZhZGluZyBpblxcbiAgICAvLyB0aGUgbGluZSBpbiBjYXNlIG9mIGFuIG9mZnNldCBsaW5lICh2X3dpZHRoMi50KSBvciB3aGVuIGZhZGluZyBvdXRcXG4gICAgLy8gKHZfd2lkdGgyLnMpXFxuICAgIGZsb2F0IGJsdXIyID0gKGJsdXIgKyAxLjAgLyBERVZJQ0VfUElYRUxfUkFUSU8pICogdl9nYW1tYV9zY2FsZTtcXG4gICAgZmxvYXQgYWxwaGEgPSBjbGFtcChtaW4oZGlzdCAtICh2X3dpZHRoMi50IC0gYmx1cjIpLCB2X3dpZHRoMi5zIC0gZGlzdCkgLyBibHVyMiwgMC4wLCAxLjApO1xcblxcbiAgICBmbG9hdCB4X2EgPSBtb2Qodl9saW5lc29mYXIgLyB1X3BhdHRlcm5fc2l6ZV9hLngsIDEuMCk7XFxuICAgIGZsb2F0IHhfYiA9IG1vZCh2X2xpbmVzb2ZhciAvIHVfcGF0dGVybl9zaXplX2IueCwgMS4wKTtcXG5cXG4gICAgLy8gdl9ub3JtYWwueSBpcyAwIGF0IHRoZSBtaWRwb2ludCBvZiB0aGUgbGluZSwgLTEgYXQgdGhlIGxvd2VyIGVkZ2UsIDEgYXQgdGhlIHVwcGVyIGVkZ2VcXG4gICAgLy8gd2UgY2xhbXAgdGhlIGxpbmUgd2lkdGggb3V0c2V0IHRvIGJlIGJldHdlZW4gMCBhbmQgaGFsZiB0aGUgcGF0dGVybiBoZWlnaHQgcGx1cyBwYWRkaW5nICgyLjApXFxuICAgIC8vIHRvIGVuc3VyZSB3ZSBkb24ndCBzYW1wbGUgb3V0c2lkZSB0aGUgZGVzaWduYXRlZCBzeW1ib2wgb24gdGhlIHNwcml0ZSBzaGVldC5cXG4gICAgLy8gMC41IGlzIGFkZGVkIHRvIHNoaWZ0IHRoZSBjb21wb25lbnQgdG8gYmUgYm91bmRlZCBiZXR3ZWVuIDAgYW5kIDEgZm9yIGludGVycG9sYXRpb24gb2ZcXG4gICAgLy8gdGhlIHRleHR1cmUgY29vcmRpbmF0ZVxcbiAgICBmbG9hdCB5X2EgPSAwLjUgKyAodl9ub3JtYWwueSAqIGNsYW1wKHZfd2lkdGgyLnMsIDAuMCwgKHVfcGF0dGVybl9zaXplX2EueSArIDIuMCkgLyAyLjApIC8gdV9wYXR0ZXJuX3NpemVfYS55KTtcXG4gICAgZmxvYXQgeV9iID0gMC41ICsgKHZfbm9ybWFsLnkgKiBjbGFtcCh2X3dpZHRoMi5zLCAwLjAsICh1X3BhdHRlcm5fc2l6ZV9iLnkgKyAyLjApIC8gMi4wKSAvIHVfcGF0dGVybl9zaXplX2IueSk7XFxuICAgIHZlYzIgcG9zX2EgPSBtaXgodV9wYXR0ZXJuX3RsX2EgLyB1X3RleHNpemUsIHVfcGF0dGVybl9icl9hIC8gdV90ZXhzaXplLCB2ZWMyKHhfYSwgeV9hKSk7XFxuICAgIHZlYzIgcG9zX2IgPSBtaXgodV9wYXR0ZXJuX3RsX2IgLyB1X3RleHNpemUsIHVfcGF0dGVybl9icl9iIC8gdV90ZXhzaXplLCB2ZWMyKHhfYiwgeV9iKSk7XFxuXFxuICAgIHZlYzQgY29sb3IgPSBtaXgodGV4dHVyZTJEKHVfaW1hZ2UsIHBvc19hKSwgdGV4dHVyZTJEKHVfaW1hZ2UsIHBvc19iKSwgdV9mYWRlKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgKiBhbHBoYSAqIG9wYWNpdHk7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcIi8vIGZsb29yKDEyNyAvIDIpID09IDYzLjBcXG4vLyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pdGVyIGxpbWl0IGlzIDIuMCBhdCB0aGUgbW9tZW50LiB0aGUgZXh0cnVkZSBub3JtYWwgaXNcXG4vLyBzdG9yZWQgaW4gYSBieXRlICgtMTI4Li4xMjcpLiB3ZSBzY2FsZSByZWd1bGFyIG5vcm1hbHMgdXAgdG8gbGVuZ3RoIDYzLCBidXRcXG4vLyB0aGVyZSBhcmUgYWxzbyBcXFwic3BlY2lhbFxcXCIgbm9ybWFscyB0aGF0IGhhdmUgYSBiaWdnZXIgbGVuZ3RoIChvZiB1cCB0byAxMjYgaW5cXG4vLyB0aGlzIGNhc2UpLlxcbi8vICNkZWZpbmUgc2NhbGUgNjMuMFxcbiNkZWZpbmUgc2NhbGUgMC4wMTU4NzMwMTZcXG5cXG4vLyBXZSBzY2FsZSB0aGUgZGlzdGFuY2UgYmVmb3JlIGFkZGluZyBpdCB0byB0aGUgYnVmZmVycyBzbyB0aGF0IHdlIGNhbiBzdG9yZVxcbi8vIGxvbmcgZGlzdGFuY2VzIGZvciBsb25nIHNlZ21lbnRzLiBVc2UgdGhpcyB2YWx1ZSB0byB1bnNjYWxlIHRoZSBkaXN0YW5jZS5cXG4jZGVmaW5lIExJTkVfRElTVEFOQ0VfU0NBTEUgMi4wXFxuXFxuLy8gdGhlIGRpc3RhbmNlIG92ZXIgd2hpY2ggdGhlIGxpbmUgZWRnZSBmYWRlcyBvdXQuXFxuLy8gUmV0aW5hIGRldmljZXMgbmVlZCBhIHNtYWxsZXIgZGlzdGFuY2UgdG8gYXZvaWQgYWxpYXNpbmcuXFxuI2RlZmluZSBBTlRJQUxJQVNJTkcgMS4wIC8gREVWSUNFX1BJWEVMX1JBVElPIC8gMi4wXFxuXFxuYXR0cmlidXRlIHZlYzQgYV9wb3Nfbm9ybWFsO1xcbmF0dHJpYnV0ZSB2ZWM0IGFfZGF0YTtcXG5cXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfcmF0aW87XFxudW5pZm9ybSB2ZWMyIHVfZ2xfdW5pdHNfdG9fcGl4ZWxzO1xcblxcbnZhcnlpbmcgdmVjMiB2X25vcm1hbDtcXG52YXJ5aW5nIHZlYzIgdl93aWR0aDI7XFxudmFyeWluZyBmbG9hdCB2X2xpbmVzb2ZhcjtcXG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XFxuXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvZmZzZXRcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgd2lkdGhcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvZmZzZXRcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHdpZHRoXFxuXFxuICAgIHZlYzIgYV9leHRydWRlID0gYV9kYXRhLnh5IC0gMTI4LjA7XFxuICAgIGZsb2F0IGFfZGlyZWN0aW9uID0gbW9kKGFfZGF0YS56LCA0LjApIC0gMS4wO1xcbiAgICBmbG9hdCBhX2xpbmVzb2ZhciA9IChmbG9vcihhX2RhdGEueiAvIDQuMCkgKyBhX2RhdGEudyAqIDY0LjApICogTElORV9ESVNUQU5DRV9TQ0FMRTtcXG5cXG4gICAgdmVjMiBwb3MgPSBhX3Bvc19ub3JtYWwueHk7XFxuXFxuICAgIC8vIHggaXMgMSBpZiBpdCdzIGEgcm91bmQgY2FwLCAwIG90aGVyd2lzZVxcbiAgICAvLyB5IGlzIDEgaWYgdGhlIG5vcm1hbCBwb2ludHMgdXAsIGFuZCAtMSBpZiBpdCBwb2ludHMgZG93blxcbiAgICBtZWRpdW1wIHZlYzIgbm9ybWFsID0gYV9wb3Nfbm9ybWFsLnp3O1xcbiAgICB2X25vcm1hbCA9IG5vcm1hbDtcXG5cXG4gICAgLy8gdGhlc2UgdHJhbnNmb3JtYXRpb25zIHVzZWQgdG8gYmUgYXBwbGllZCBpbiB0aGUgSlMgYW5kIG5hdGl2ZSBjb2RlIGJhc2VzLlxcbiAgICAvLyBtb3ZlZCB0aGVtIGludG8gdGhlIHNoYWRlciBmb3IgY2xhcml0eSBhbmQgc2ltcGxpY2l0eS5cXG4gICAgZ2Fwd2lkdGggPSBnYXB3aWR0aCAvIDIuMDtcXG4gICAgZmxvYXQgaGFsZndpZHRoID0gd2lkdGggLyAyLjA7XFxuICAgIG9mZnNldCA9IC0xLjAgKiBvZmZzZXQ7XFxuXFxuICAgIGZsb2F0IGluc2V0ID0gZ2Fwd2lkdGggKyAoZ2Fwd2lkdGggPiAwLjAgPyBBTlRJQUxJQVNJTkcgOiAwLjApO1xcbiAgICBmbG9hdCBvdXRzZXQgPSBnYXB3aWR0aCArIGhhbGZ3aWR0aCAqIChnYXB3aWR0aCA+IDAuMCA/IDIuMCA6IDEuMCkgKyBBTlRJQUxJQVNJTkc7XFxuXFxuICAgIC8vIFNjYWxlIHRoZSBleHRydXNpb24gdmVjdG9yIGRvd24gdG8gYSBub3JtYWwgYW5kIHRoZW4gdXAgYnkgdGhlIGxpbmUgd2lkdGhcXG4gICAgLy8gb2YgdGhpcyB2ZXJ0ZXguXFxuICAgIG1lZGl1bXAgdmVjMiBkaXN0ID0gb3V0c2V0ICogYV9leHRydWRlICogc2NhbGU7XFxuXFxuICAgIC8vIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IHdoZW4gZHJhd2luZyBhIGxpbmUgdGhhdCBpcyB0byB0aGUgc2lkZSBvZiB0aGUgYWN0dWFsIGxpbmUuXFxuICAgIC8vIFdlIGRvIHRoaXMgYnkgY3JlYXRpbmcgYSB2ZWN0b3IgdGhhdCBwb2ludHMgdG93YXJkcyB0aGUgZXh0cnVkZSwgYnV0IHJvdGF0ZVxcbiAgICAvLyBpdCB3aGVuIHdlJ3JlIGRyYXdpbmcgcm91bmQgZW5kIHBvaW50cyAoYV9kaXJlY3Rpb24gPSAtMSBvciAxKSBzaW5jZSB0aGVpclxcbiAgICAvLyBleHRydWRlIHZlY3RvciBwb2ludHMgaW4gYW5vdGhlciBkaXJlY3Rpb24uXFxuICAgIG1lZGl1bXAgZmxvYXQgdSA9IDAuNSAqIGFfZGlyZWN0aW9uO1xcbiAgICBtZWRpdW1wIGZsb2F0IHQgPSAxLjAgLSBhYnModSk7XFxuICAgIG1lZGl1bXAgdmVjMiBvZmZzZXQyID0gb2Zmc2V0ICogYV9leHRydWRlICogc2NhbGUgKiBub3JtYWwueSAqIG1hdDIodCwgLXUsIHUsIHQpO1xcblxcbiAgICB2ZWM0IHByb2plY3RlZF9leHRydWRlID0gdV9tYXRyaXggKiB2ZWM0KGRpc3QgLyB1X3JhdGlvLCAwLjAsIDAuMCk7XFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KHBvcyArIG9mZnNldDIgLyB1X3JhdGlvLCAwLjAsIDEuMCkgKyBwcm9qZWN0ZWRfZXh0cnVkZTtcXG5cXG4gICAgLy8gY2FsY3VsYXRlIGhvdyBtdWNoIHRoZSBwZXJzcGVjdGl2ZSB2aWV3IHNxdWlzaGVzIG9yIHN0cmV0Y2hlcyB0aGUgZXh0cnVkZVxcbiAgICBmbG9hdCBleHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlID0gbGVuZ3RoKGRpc3QpO1xcbiAgICBmbG9hdCBleHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlID0gbGVuZ3RoKHByb2plY3RlZF9leHRydWRlLnh5IC8gZ2xfUG9zaXRpb24udyAqIHVfZ2xfdW5pdHNfdG9fcGl4ZWxzKTtcXG4gICAgdl9nYW1tYV9zY2FsZSA9IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmUgLyBleHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlO1xcblxcbiAgICB2X2xpbmVzb2ZhciA9IGFfbGluZXNvZmFyO1xcbiAgICB2X3dpZHRoMiA9IHZlYzIob3V0c2V0LCBpbnNldCk7XFxufVxcblwifSxsaW5lU0RGOntmcmFnbWVudFNvdXJjZTpcIlxcbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XFxudW5pZm9ybSBmbG9hdCB1X3NkZmdhbW1hO1xcbnVuaWZvcm0gZmxvYXQgdV9taXg7XFxuXFxudmFyeWluZyB2ZWMyIHZfbm9ybWFsO1xcbnZhcnlpbmcgdmVjMiB2X3dpZHRoMjtcXG52YXJ5aW5nIHZlYzIgdl90ZXhfYTtcXG52YXJ5aW5nIHZlYzIgdl90ZXhfYjtcXG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XFxuXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCB3aWR0aFxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBmbG9vcndpZHRoXFxuXFxudm9pZCBtYWluKCkge1xcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCB3aWR0aFxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGZsb29yd2lkdGhcXG5cXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBvZiB0aGUgcGl4ZWwgZnJvbSB0aGUgbGluZSBpbiBwaXhlbHMuXFxuICAgIGZsb2F0IGRpc3QgPSBsZW5ndGgodl9ub3JtYWwpICogdl93aWR0aDIucztcXG5cXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhbnRpYWxpYXNpbmcgZmFkZSBmYWN0b3IuIFRoaXMgaXMgZWl0aGVyIHdoZW4gZmFkaW5nIGluXFxuICAgIC8vIHRoZSBsaW5lIGluIGNhc2Ugb2YgYW4gb2Zmc2V0IGxpbmUgKHZfd2lkdGgyLnQpIG9yIHdoZW4gZmFkaW5nIG91dFxcbiAgICAvLyAodl93aWR0aDIucylcXG4gICAgZmxvYXQgYmx1cjIgPSAoYmx1ciArIDEuMCAvIERFVklDRV9QSVhFTF9SQVRJTykgKiB2X2dhbW1hX3NjYWxlO1xcbiAgICBmbG9hdCBhbHBoYSA9IGNsYW1wKG1pbihkaXN0IC0gKHZfd2lkdGgyLnQgLSBibHVyMiksIHZfd2lkdGgyLnMgLSBkaXN0KSAvIGJsdXIyLCAwLjAsIDEuMCk7XFxuXFxuICAgIGZsb2F0IHNkZmRpc3RfYSA9IHRleHR1cmUyRCh1X2ltYWdlLCB2X3RleF9hKS5hO1xcbiAgICBmbG9hdCBzZGZkaXN0X2IgPSB0ZXh0dXJlMkQodV9pbWFnZSwgdl90ZXhfYikuYTtcXG4gICAgZmxvYXQgc2RmZGlzdCA9IG1peChzZGZkaXN0X2EsIHNkZmRpc3RfYiwgdV9taXgpO1xcbiAgICBhbHBoYSAqPSBzbW9vdGhzdGVwKDAuNSAtIHVfc2RmZ2FtbWEgLyBmbG9vcndpZHRoLCAwLjUgKyB1X3NkZmdhbW1hIC8gZmxvb3J3aWR0aCwgc2RmZGlzdCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yICogKGFscGhhICogb3BhY2l0eSk7XFxuXFxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XFxuI2VuZGlmXFxufVxcblwiLHZlcnRleFNvdXJjZTpcIi8vIGZsb29yKDEyNyAvIDIpID09IDYzLjBcXG4vLyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pdGVyIGxpbWl0IGlzIDIuMCBhdCB0aGUgbW9tZW50LiB0aGUgZXh0cnVkZSBub3JtYWwgaXNcXG4vLyBzdG9yZWQgaW4gYSBieXRlICgtMTI4Li4xMjcpLiB3ZSBzY2FsZSByZWd1bGFyIG5vcm1hbHMgdXAgdG8gbGVuZ3RoIDYzLCBidXRcXG4vLyB0aGVyZSBhcmUgYWxzbyBcXFwic3BlY2lhbFxcXCIgbm9ybWFscyB0aGF0IGhhdmUgYSBiaWdnZXIgbGVuZ3RoIChvZiB1cCB0byAxMjYgaW5cXG4vLyB0aGlzIGNhc2UpLlxcbi8vICNkZWZpbmUgc2NhbGUgNjMuMFxcbiNkZWZpbmUgc2NhbGUgMC4wMTU4NzMwMTZcXG5cXG4vLyBXZSBzY2FsZSB0aGUgZGlzdGFuY2UgYmVmb3JlIGFkZGluZyBpdCB0byB0aGUgYnVmZmVycyBzbyB0aGF0IHdlIGNhbiBzdG9yZVxcbi8vIGxvbmcgZGlzdGFuY2VzIGZvciBsb25nIHNlZ21lbnRzLiBVc2UgdGhpcyB2YWx1ZSB0byB1bnNjYWxlIHRoZSBkaXN0YW5jZS5cXG4jZGVmaW5lIExJTkVfRElTVEFOQ0VfU0NBTEUgMi4wXFxuXFxuLy8gdGhlIGRpc3RhbmNlIG92ZXIgd2hpY2ggdGhlIGxpbmUgZWRnZSBmYWRlcyBvdXQuXFxuLy8gUmV0aW5hIGRldmljZXMgbmVlZCBhIHNtYWxsZXIgZGlzdGFuY2UgdG8gYXZvaWQgYWxpYXNpbmcuXFxuI2RlZmluZSBBTlRJQUxJQVNJTkcgMS4wIC8gREVWSUNFX1BJWEVMX1JBVElPIC8gMi4wXFxuXFxuYXR0cmlidXRlIHZlYzQgYV9wb3Nfbm9ybWFsO1xcbmF0dHJpYnV0ZSB2ZWM0IGFfZGF0YTtcXG5cXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfcmF0aW87XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybnNjYWxlX2E7XFxudW5pZm9ybSBmbG9hdCB1X3RleF95X2E7XFxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybnNjYWxlX2I7XFxudW5pZm9ybSBmbG9hdCB1X3RleF95X2I7XFxudW5pZm9ybSB2ZWMyIHVfZ2xfdW5pdHNfdG9fcGl4ZWxzO1xcblxcbnZhcnlpbmcgdmVjMiB2X25vcm1hbDtcXG52YXJ5aW5nIHZlYzIgdl93aWR0aDI7XFxudmFyeWluZyB2ZWMyIHZfdGV4X2E7XFxudmFyeWluZyB2ZWMyIHZfdGV4X2I7XFxudmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xcblxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb2Zmc2V0XFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHdpZHRoXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGZsb29yd2lkdGhcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb2Zmc2V0XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgd2lkdGhcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBmbG9vcndpZHRoXFxuXFxuICAgIHZlYzIgYV9leHRydWRlID0gYV9kYXRhLnh5IC0gMTI4LjA7XFxuICAgIGZsb2F0IGFfZGlyZWN0aW9uID0gbW9kKGFfZGF0YS56LCA0LjApIC0gMS4wO1xcbiAgICBmbG9hdCBhX2xpbmVzb2ZhciA9IChmbG9vcihhX2RhdGEueiAvIDQuMCkgKyBhX2RhdGEudyAqIDY0LjApICogTElORV9ESVNUQU5DRV9TQ0FMRTtcXG5cXG4gICAgdmVjMiBwb3MgPSBhX3Bvc19ub3JtYWwueHk7XFxuXFxuICAgIC8vIHggaXMgMSBpZiBpdCdzIGEgcm91bmQgY2FwLCAwIG90aGVyd2lzZVxcbiAgICAvLyB5IGlzIDEgaWYgdGhlIG5vcm1hbCBwb2ludHMgdXAsIGFuZCAtMSBpZiBpdCBwb2ludHMgZG93blxcbiAgICBtZWRpdW1wIHZlYzIgbm9ybWFsID0gYV9wb3Nfbm9ybWFsLnp3O1xcbiAgICB2X25vcm1hbCA9IG5vcm1hbDtcXG5cXG4gICAgLy8gdGhlc2UgdHJhbnNmb3JtYXRpb25zIHVzZWQgdG8gYmUgYXBwbGllZCBpbiB0aGUgSlMgYW5kIG5hdGl2ZSBjb2RlIGJhc2VzLlxcbiAgICAvLyBtb3ZlZCB0aGVtIGludG8gdGhlIHNoYWRlciBmb3IgY2xhcml0eSBhbmQgc2ltcGxpY2l0eS5cXG4gICAgZ2Fwd2lkdGggPSBnYXB3aWR0aCAvIDIuMDtcXG4gICAgZmxvYXQgaGFsZndpZHRoID0gd2lkdGggLyAyLjA7XFxuICAgIG9mZnNldCA9IC0xLjAgKiBvZmZzZXQ7XFxuXFxuICAgIGZsb2F0IGluc2V0ID0gZ2Fwd2lkdGggKyAoZ2Fwd2lkdGggPiAwLjAgPyBBTlRJQUxJQVNJTkcgOiAwLjApO1xcbiAgICBmbG9hdCBvdXRzZXQgPSBnYXB3aWR0aCArIGhhbGZ3aWR0aCAqIChnYXB3aWR0aCA+IDAuMCA/IDIuMCA6IDEuMCkgKyBBTlRJQUxJQVNJTkc7XFxuXFxuICAgIC8vIFNjYWxlIHRoZSBleHRydXNpb24gdmVjdG9yIGRvd24gdG8gYSBub3JtYWwgYW5kIHRoZW4gdXAgYnkgdGhlIGxpbmUgd2lkdGhcXG4gICAgLy8gb2YgdGhpcyB2ZXJ0ZXguXFxuICAgIG1lZGl1bXAgdmVjMiBkaXN0ID1vdXRzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZTtcXG5cXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBvZmZzZXQgd2hlbiBkcmF3aW5nIGEgbGluZSB0aGF0IGlzIHRvIHRoZSBzaWRlIG9mIHRoZSBhY3R1YWwgbGluZS5cXG4gICAgLy8gV2UgZG8gdGhpcyBieSBjcmVhdGluZyBhIHZlY3RvciB0aGF0IHBvaW50cyB0b3dhcmRzIHRoZSBleHRydWRlLCBidXQgcm90YXRlXFxuICAgIC8vIGl0IHdoZW4gd2UncmUgZHJhd2luZyByb3VuZCBlbmQgcG9pbnRzIChhX2RpcmVjdGlvbiA9IC0xIG9yIDEpIHNpbmNlIHRoZWlyXFxuICAgIC8vIGV4dHJ1ZGUgdmVjdG9yIHBvaW50cyBpbiBhbm90aGVyIGRpcmVjdGlvbi5cXG4gICAgbWVkaXVtcCBmbG9hdCB1ID0gMC41ICogYV9kaXJlY3Rpb247XFxuICAgIG1lZGl1bXAgZmxvYXQgdCA9IDEuMCAtIGFicyh1KTtcXG4gICAgbWVkaXVtcCB2ZWMyIG9mZnNldDIgPSBvZmZzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZSAqIG5vcm1hbC55ICogbWF0Mih0LCAtdSwgdSwgdCk7XFxuXFxuICAgIHZlYzQgcHJvamVjdGVkX2V4dHJ1ZGUgPSB1X21hdHJpeCAqIHZlYzQoZGlzdCAvIHVfcmF0aW8sIDAuMCwgMC4wKTtcXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQocG9zICsgb2Zmc2V0MiAvIHVfcmF0aW8sIDAuMCwgMS4wKSArIHByb2plY3RlZF9leHRydWRlO1xcblxcbiAgICAvLyBjYWxjdWxhdGUgaG93IG11Y2ggdGhlIHBlcnNwZWN0aXZlIHZpZXcgc3F1aXNoZXMgb3Igc3RyZXRjaGVzIHRoZSBleHRydWRlXFxuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmUgPSBsZW5ndGgoZGlzdCk7XFxuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmUgPSBsZW5ndGgocHJvamVjdGVkX2V4dHJ1ZGUueHkgLyBnbF9Qb3NpdGlvbi53ICogdV9nbF91bml0c190b19waXhlbHMpO1xcbiAgICB2X2dhbW1hX3NjYWxlID0gZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZSAvIGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU7XFxuXFxuICAgIHZfdGV4X2EgPSB2ZWMyKGFfbGluZXNvZmFyICogdV9wYXR0ZXJuc2NhbGVfYS54IC8gZmxvb3J3aWR0aCwgbm9ybWFsLnkgKiB1X3BhdHRlcm5zY2FsZV9hLnkgKyB1X3RleF95X2EpO1xcbiAgICB2X3RleF9iID0gdmVjMihhX2xpbmVzb2ZhciAqIHVfcGF0dGVybnNjYWxlX2IueCAvIGZsb29yd2lkdGgsIG5vcm1hbC55ICogdV9wYXR0ZXJuc2NhbGVfYi55ICsgdV90ZXhfeV9iKTtcXG5cXG4gICAgdl93aWR0aDIgPSB2ZWMyKG91dHNldCwgaW5zZXQpO1xcbn1cXG5cIn0scmFzdGVyOntmcmFnbWVudFNvdXJjZTpcInVuaWZvcm0gZmxvYXQgdV9mYWRlX3Q7XFxudW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7XFxudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTA7XFxudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTE7XFxudmFyeWluZyB2ZWMyIHZfcG9zMDtcXG52YXJ5aW5nIHZlYzIgdl9wb3MxO1xcblxcbnVuaWZvcm0gZmxvYXQgdV9icmlnaHRuZXNzX2xvdztcXG51bmlmb3JtIGZsb2F0IHVfYnJpZ2h0bmVzc19oaWdoO1xcblxcbnVuaWZvcm0gZmxvYXQgdV9zYXR1cmF0aW9uX2ZhY3RvcjtcXG51bmlmb3JtIGZsb2F0IHVfY29udHJhc3RfZmFjdG9yO1xcbnVuaWZvcm0gdmVjMyB1X3NwaW5fd2VpZ2h0cztcXG5cXG52b2lkIG1haW4oKSB7XFxuXFxuICAgIC8vIHJlYWQgYW5kIGNyb3NzLWZhZGUgY29sb3JzIGZyb20gdGhlIG1haW4gYW5kIHBhcmVudCB0aWxlc1xcbiAgICB2ZWM0IGNvbG9yMCA9IHRleHR1cmUyRCh1X2ltYWdlMCwgdl9wb3MwKTtcXG4gICAgdmVjNCBjb2xvcjEgPSB0ZXh0dXJlMkQodV9pbWFnZTEsIHZfcG9zMSk7XFxuICAgIGlmIChjb2xvcjAuYSA+IDAuMCkge1xcbiAgICAgICAgY29sb3IwLnJnYiA9IGNvbG9yMC5yZ2IgLyBjb2xvcjAuYTtcXG4gICAgfVxcbiAgICBpZiAoY29sb3IxLmEgPiAwLjApIHtcXG4gICAgICAgIGNvbG9yMS5yZ2IgPSBjb2xvcjEucmdiIC8gY29sb3IxLmE7XFxuICAgIH1cXG4gICAgdmVjNCBjb2xvciA9IG1peChjb2xvcjAsIGNvbG9yMSwgdV9mYWRlX3QpO1xcbiAgICBjb2xvci5hICo9IHVfb3BhY2l0eTtcXG4gICAgdmVjMyByZ2IgPSBjb2xvci5yZ2I7XFxuXFxuICAgIC8vIHNwaW5cXG4gICAgcmdiID0gdmVjMyhcXG4gICAgICAgIGRvdChyZ2IsIHVfc3Bpbl93ZWlnaHRzLnh5eiksXFxuICAgICAgICBkb3QocmdiLCB1X3NwaW5fd2VpZ2h0cy56eHkpLFxcbiAgICAgICAgZG90KHJnYiwgdV9zcGluX3dlaWdodHMueXp4KSk7XFxuXFxuICAgIC8vIHNhdHVyYXRpb25cXG4gICAgZmxvYXQgYXZlcmFnZSA9IChjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmIpIC8gMy4wO1xcbiAgICByZ2IgKz0gKGF2ZXJhZ2UgLSByZ2IpICogdV9zYXR1cmF0aW9uX2ZhY3RvcjtcXG5cXG4gICAgLy8gY29udHJhc3RcXG4gICAgcmdiID0gKHJnYiAtIDAuNSkgKiB1X2NvbnRyYXN0X2ZhY3RvciArIDAuNTtcXG5cXG4gICAgLy8gYnJpZ2h0bmVzc1xcbiAgICB2ZWMzIHVfaGlnaF92ZWMgPSB2ZWMzKHVfYnJpZ2h0bmVzc19sb3csIHVfYnJpZ2h0bmVzc19sb3csIHVfYnJpZ2h0bmVzc19sb3cpO1xcbiAgICB2ZWMzIHVfbG93X3ZlYyA9IHZlYzModV9icmlnaHRuZXNzX2hpZ2gsIHVfYnJpZ2h0bmVzc19oaWdoLCB1X2JyaWdodG5lc3NfaGlnaCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQobWl4KHVfaGlnaF92ZWMsIHVfbG93X3ZlYywgcmdiKSAqIGNvbG9yLmEsIGNvbG9yLmEpO1xcblxcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xcbiNlbmRpZlxcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHVfdGxfcGFyZW50O1xcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZV9wYXJlbnQ7XFxudW5pZm9ybSBmbG9hdCB1X2J1ZmZlcl9zY2FsZTtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcXG5hdHRyaWJ1dGUgdmVjMiBhX3RleHR1cmVfcG9zO1xcblxcbnZhcnlpbmcgdmVjMiB2X3BvczA7XFxudmFyeWluZyB2ZWMyIHZfcG9zMTtcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcXG4gICAgLy8gV2UgYXJlIHVzaW5nIEludDE2IGZvciB0ZXh0dXJlIHBvc2l0aW9uIGNvb3JkaW5hdGVzIHRvIGdpdmUgdXMgZW5vdWdoIHByZWNpc2lvbiBmb3JcXG4gICAgLy8gZnJhY3Rpb25hbCBjb29yZGluYXRlcy4gV2UgdXNlIDgxOTIgdG8gc2NhbGUgdGhlIHRleHR1cmUgY29vcmRpbmF0ZXMgaW4gdGhlIGJ1ZmZlclxcbiAgICAvLyBhcyBhbiBhcmJpdHJhcmlseSBoaWdoIG51bWJlciB0byBwcmVzZXJ2ZSBhZGVxdWF0ZSBwcmVjaXNpb24gd2hlbiByZW5kZXJpbmcuXFxuICAgIC8vIFRoaXMgaXMgYWxzbyB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgRVhURU5UIHdlIGFyZSB1c2luZyBmb3Igb3VyIHRpbGUgYnVmZmVyIHBvcyBjb29yZGluYXRlcyxcXG4gICAgLy8gc28gbWF0aCBmb3IgbW9kaWZ5aW5nIGVpdGhlciBpcyBjb25zaXN0ZW50LlxcbiAgICB2X3BvczAgPSAoKChhX3RleHR1cmVfcG9zIC8gODE5Mi4wKSAtIDAuNSkgLyB1X2J1ZmZlcl9zY2FsZSApICsgMC41O1xcbiAgICB2X3BvczEgPSAodl9wb3MwICogdV9zY2FsZV9wYXJlbnQpICsgdV90bF9wYXJlbnQ7XFxufVxcblwifSxzeW1ib2xJY29uOntmcmFnbWVudFNvdXJjZTpcInVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTtcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbnZhcnlpbmcgdmVjMiB2X3RleDtcXG52YXJ5aW5nIGZsb2F0IHZfZmFkZV9vcGFjaXR5O1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XFxuXFxuICAgIGxvd3AgZmxvYXQgYWxwaGEgPSBvcGFjaXR5ICogdl9mYWRlX29wYWNpdHk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1X3RleHR1cmUsIHZfdGV4KSAqIGFscGhhO1xcblxcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xcbiNlbmRpZlxcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCJjb25zdCBmbG9hdCBQSSA9IDMuMTQxNTkyNjUzNTg5NzkzO1xcblxcbmF0dHJpYnV0ZSB2ZWM0IGFfcG9zX29mZnNldDtcXG5hdHRyaWJ1dGUgdmVjNCBhX2RhdGE7XFxuYXR0cmlidXRlIHZlYzMgYV9wcm9qZWN0ZWRfcG9zO1xcbmF0dHJpYnV0ZSBmbG9hdCBhX2ZhZGVfb3BhY2l0eTtcXG5cXG51bmlmb3JtIGJvb2wgdV9pc19zaXplX3pvb21fY29uc3RhbnQ7XFxudW5pZm9ybSBib29sIHVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50O1xcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9zaXplX3Q7IC8vIHVzZWQgdG8gaW50ZXJwb2xhdGUgYmV0d2VlbiB6b29tIHN0b3BzIHdoZW4gc2l6ZSBpcyBhIGNvbXBvc2l0ZSBmdW5jdGlvblxcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9zaXplOyAvLyB1c2VkIHdoZW4gc2l6ZSBpcyBib3RoIHpvb20gYW5kIGZlYXR1cmUgY29uc3RhbnRcXG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTtcXG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfcGl0Y2g7XFxudW5pZm9ybSBib29sIHVfcm90YXRlX3N5bWJvbDtcXG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfYXNwZWN0X3JhdGlvO1xcbnVuaWZvcm0gZmxvYXQgdV9mYWRlX2NoYW5nZTtcXG5cXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcXG51bmlmb3JtIG1hdDQgdV9sYWJlbF9wbGFuZV9tYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVfZ2xfY29vcmRfbWF0cml4O1xcblxcbnVuaWZvcm0gYm9vbCB1X2lzX3RleHQ7XFxudW5pZm9ybSBib29sIHVfcGl0Y2hfd2l0aF9tYXA7XFxuXFxudW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTtcXG5cXG52YXJ5aW5nIHZlYzIgdl90ZXg7XFxudmFyeWluZyBmbG9hdCB2X2ZhZGVfb3BhY2l0eTtcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxcblxcbiAgICB2ZWMyIGFfcG9zID0gYV9wb3Nfb2Zmc2V0Lnh5O1xcbiAgICB2ZWMyIGFfb2Zmc2V0ID0gYV9wb3Nfb2Zmc2V0Lnp3O1xcblxcbiAgICB2ZWMyIGFfdGV4ID0gYV9kYXRhLnh5O1xcbiAgICB2ZWMyIGFfc2l6ZSA9IGFfZGF0YS56dztcXG5cXG4gICAgaGlnaHAgZmxvYXQgc2VnbWVudF9hbmdsZSA9IC1hX3Byb2plY3RlZF9wb3NbMl07XFxuXFxuICAgIGZsb2F0IHNpemU7XFxuICAgIGlmICghdV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgIXVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSB7XFxuICAgICAgICBzaXplID0gbWl4KGFfc2l6ZVswXSwgYV9zaXplWzFdLCB1X3NpemVfdCkgLyAxMC4wO1xcbiAgICB9IGVsc2UgaWYgKHVfaXNfc2l6ZV96b29tX2NvbnN0YW50ICYmICF1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge1xcbiAgICAgICAgc2l6ZSA9IGFfc2l6ZVswXSAvIDEwLjA7XFxuICAgIH0gZWxzZSBpZiAoIXVfaXNfc2l6ZV96b29tX2NvbnN0YW50ICYmIHVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSB7XFxuICAgICAgICBzaXplID0gdV9zaXplO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgc2l6ZSA9IHVfc2l6ZTtcXG4gICAgfVxcblxcbiAgICB2ZWM0IHByb2plY3RlZFBvaW50ID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcXG4gICAgaGlnaHAgZmxvYXQgY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZSA9IHByb2plY3RlZFBvaW50Lnc7XFxuICAgIC8vIFNlZSBjb21tZW50cyBpbiBzeW1ib2xfc2RmLnZlcnRleFxcbiAgICBoaWdocCBmbG9hdCBkaXN0YW5jZV9yYXRpbyA9IHVfcGl0Y2hfd2l0aF9tYXAgP1xcbiAgICAgICAgY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZSAvIHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSA6XFxuICAgICAgICB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UgLyBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlO1xcbiAgICBoaWdocCBmbG9hdCBwZXJzcGVjdGl2ZV9yYXRpbyA9IGNsYW1wKFxcbiAgICAgICAgICAgIDAuNSArIDAuNSAqIGRpc3RhbmNlX3JhdGlvLFxcbiAgICAgICAgICAgIDAuMCwgLy8gUHJldmVudHMgb3ZlcnNpemVkIG5lYXItZmllbGQgc3ltYm9scyBpbiBwaXRjaGVkL292ZXJ6b29tZWQgdGlsZXNcXG4gICAgICAgICAgICA0LjApO1xcblxcbiAgICBzaXplICo9IHBlcnNwZWN0aXZlX3JhdGlvO1xcblxcbiAgICBmbG9hdCBmb250U2NhbGUgPSB1X2lzX3RleHQgPyBzaXplIC8gMjQuMCA6IHNpemU7XFxuXFxuICAgIGhpZ2hwIGZsb2F0IHN5bWJvbF9yb3RhdGlvbiA9IDAuMDtcXG4gICAgaWYgKHVfcm90YXRlX3N5bWJvbCkge1xcbiAgICAgICAgLy8gU2VlIGNvbW1lbnRzIGluIHN5bWJvbF9zZGYudmVydGV4XFxuICAgICAgICB2ZWM0IG9mZnNldFByb2plY3RlZFBvaW50ID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zICsgdmVjMigxLCAwKSwgMCwgMSk7XFxuXFxuICAgICAgICB2ZWMyIGEgPSBwcm9qZWN0ZWRQb2ludC54eSAvIHByb2plY3RlZFBvaW50Lnc7XFxuICAgICAgICB2ZWMyIGIgPSBvZmZzZXRQcm9qZWN0ZWRQb2ludC54eSAvIG9mZnNldFByb2plY3RlZFBvaW50Lnc7XFxuXFxuICAgICAgICBzeW1ib2xfcm90YXRpb24gPSBhdGFuKChiLnkgLSBhLnkpIC8gdV9hc3BlY3RfcmF0aW8sIGIueCAtIGEueCk7XFxuICAgIH1cXG5cXG4gICAgaGlnaHAgZmxvYXQgYW5nbGVfc2luID0gc2luKHNlZ21lbnRfYW5nbGUgKyBzeW1ib2xfcm90YXRpb24pO1xcbiAgICBoaWdocCBmbG9hdCBhbmdsZV9jb3MgPSBjb3Moc2VnbWVudF9hbmdsZSArIHN5bWJvbF9yb3RhdGlvbik7XFxuICAgIG1hdDIgcm90YXRpb25fbWF0cml4ID0gbWF0MihhbmdsZV9jb3MsIC0xLjAgKiBhbmdsZV9zaW4sIGFuZ2xlX3NpbiwgYW5nbGVfY29zKTtcXG5cXG4gICAgdmVjNCBwcm9qZWN0ZWRfcG9zID0gdV9sYWJlbF9wbGFuZV9tYXRyaXggKiB2ZWM0KGFfcHJvamVjdGVkX3Bvcy54eSwgMC4wLCAxLjApO1xcbiAgICBnbF9Qb3NpdGlvbiA9IHVfZ2xfY29vcmRfbWF0cml4ICogdmVjNChwcm9qZWN0ZWRfcG9zLnh5IC8gcHJvamVjdGVkX3Bvcy53ICsgcm90YXRpb25fbWF0cml4ICogKGFfb2Zmc2V0IC8gMzIuMCAqIGZvbnRTY2FsZSksIDAuMCwgMS4wKTtcXG5cXG4gICAgdl90ZXggPSBhX3RleCAvIHVfdGV4c2l6ZTtcXG4gICAgdmVjMiBmYWRlX29wYWNpdHkgPSB1bnBhY2tfb3BhY2l0eShhX2ZhZGVfb3BhY2l0eSk7XFxuICAgIGZsb2F0IGZhZGVfY2hhbmdlID0gZmFkZV9vcGFjaXR5WzFdID4gMC41ID8gdV9mYWRlX2NoYW5nZSA6IC11X2ZhZGVfY2hhbmdlO1xcbiAgICB2X2ZhZGVfb3BhY2l0eSA9IG1heCgwLjAsIG1pbigxLjAsIGZhZGVfb3BhY2l0eVswXSArIGZhZGVfY2hhbmdlKSk7XFxufVxcblwifSxzeW1ib2xTREY6e2ZyYWdtZW50U291cmNlOlwiI2RlZmluZSBTREZfUFggOC4wXFxuI2RlZmluZSBFREdFX0dBTU1BIDAuMTA1L0RFVklDRV9QSVhFTF9SQVRJT1xcblxcbnVuaWZvcm0gYm9vbCB1X2lzX2hhbG87XFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb19ibHVyXFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlO1xcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9nYW1tYV9zY2FsZTtcXG51bmlmb3JtIGJvb2wgdV9pc190ZXh0O1xcblxcbnZhcnlpbmcgdmVjMiB2X2RhdGEwO1xcbnZhcnlpbmcgdmVjMyB2X2RhdGExO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBmaWxsX2NvbG9yXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoYWxvX3dpZHRoXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb19ibHVyXFxuXFxuICAgIHZlYzIgdGV4ID0gdl9kYXRhMC54eTtcXG4gICAgZmxvYXQgZ2FtbWFfc2NhbGUgPSB2X2RhdGExLng7XFxuICAgIGZsb2F0IHNpemUgPSB2X2RhdGExLnk7XFxuICAgIGZsb2F0IGZhZGVfb3BhY2l0eSA9IHZfZGF0YTFbMl07XFxuXFxuICAgIGZsb2F0IGZvbnRTY2FsZSA9IHVfaXNfdGV4dCA/IHNpemUgLyAyNC4wIDogc2l6ZTtcXG5cXG4gICAgbG93cCB2ZWM0IGNvbG9yID0gZmlsbF9jb2xvcjtcXG4gICAgaGlnaHAgZmxvYXQgZ2FtbWEgPSBFREdFX0dBTU1BIC8gKGZvbnRTY2FsZSAqIHVfZ2FtbWFfc2NhbGUpO1xcbiAgICBsb3dwIGZsb2F0IGJ1ZmYgPSAoMjU2LjAgLSA2NC4wKSAvIDI1Ni4wO1xcbiAgICBpZiAodV9pc19oYWxvKSB7XFxuICAgICAgICBjb2xvciA9IGhhbG9fY29sb3I7XFxuICAgICAgICBnYW1tYSA9IChoYWxvX2JsdXIgKiAxLjE5IC8gU0RGX1BYICsgRURHRV9HQU1NQSkgLyAoZm9udFNjYWxlICogdV9nYW1tYV9zY2FsZSk7XFxuICAgICAgICBidWZmID0gKDYuMCAtIGhhbG9fd2lkdGggLyBmb250U2NhbGUpIC8gU0RGX1BYO1xcbiAgICB9XFxuXFxuICAgIGxvd3AgZmxvYXQgZGlzdCA9IHRleHR1cmUyRCh1X3RleHR1cmUsIHRleCkuYTtcXG4gICAgaGlnaHAgZmxvYXQgZ2FtbWFfc2NhbGVkID0gZ2FtbWEgKiBnYW1tYV9zY2FsZTtcXG4gICAgaGlnaHAgZmxvYXQgYWxwaGEgPSBzbW9vdGhzdGVwKGJ1ZmYgLSBnYW1tYV9zY2FsZWQsIGJ1ZmYgKyBnYW1tYV9zY2FsZWQsIGRpc3QpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAqIChhbHBoYSAqIG9wYWNpdHkgKiBmYWRlX29wYWNpdHkpO1xcblxcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xcbiNlbmRpZlxcbn1cXG5cIix2ZXJ0ZXhTb3VyY2U6XCJjb25zdCBmbG9hdCBQSSA9IDMuMTQxNTkyNjUzNTg5NzkzO1xcblxcbmF0dHJpYnV0ZSB2ZWM0IGFfcG9zX29mZnNldDtcXG5hdHRyaWJ1dGUgdmVjNCBhX2RhdGE7XFxuYXR0cmlidXRlIHZlYzMgYV9wcm9qZWN0ZWRfcG9zO1xcbmF0dHJpYnV0ZSBmbG9hdCBhX2ZhZGVfb3BhY2l0eTtcXG5cXG4vLyBjb250ZW50cyBvZiBhX3NpemUgdmFyeSBiYXNlZCBvbiB0aGUgdHlwZSBvZiBwcm9wZXJ0eSB2YWx1ZVxcbi8vIHVzZWQgZm9yIHt0ZXh0LGljb259LXNpemUuXFxuLy8gRm9yIGNvbnN0YW50cywgYV9zaXplIGlzIGRpc2FibGVkLlxcbi8vIEZvciBzb3VyY2UgZnVuY3Rpb25zLCB3ZSBiaW5kIG9ubHkgb25lIHZhbHVlIHBlciB2ZXJ0ZXg6IHRoZSB2YWx1ZSBvZiB7dGV4dCxpY29ufS1zaXplIGV2YWx1YXRlZCBmb3IgdGhlIGN1cnJlbnQgZmVhdHVyZS5cXG4vLyBGb3IgY29tcG9zaXRlIGZ1bmN0aW9uczpcXG4vLyBbIHRleHQtc2l6ZShsb3dlclpvb21TdG9wLCBmZWF0dXJlKSxcXG4vLyAgIHRleHQtc2l6ZSh1cHBlclpvb21TdG9wLCBmZWF0dXJlKSBdXFxudW5pZm9ybSBib29sIHVfaXNfc2l6ZV96b29tX2NvbnN0YW50O1xcbnVuaWZvcm0gYm9vbCB1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudDtcXG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfc2l6ZV90OyAvLyB1c2VkIHRvIGludGVycG9sYXRlIGJldHdlZW4gem9vbSBzdG9wcyB3aGVuIHNpemUgaXMgYSBjb21wb3NpdGUgZnVuY3Rpb25cXG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfc2l6ZTsgLy8gdXNlZCB3aGVuIHNpemUgaXMgYm90aCB6b29tIGFuZCBmZWF0dXJlIGNvbnN0YW50XFxuXFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb19ibHVyXFxuXFxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1X2xhYmVsX3BsYW5lX21hdHJpeDtcXG51bmlmb3JtIG1hdDQgdV9nbF9jb29yZF9tYXRyaXg7XFxuXFxudW5pZm9ybSBib29sIHVfaXNfdGV4dDtcXG51bmlmb3JtIGJvb2wgdV9waXRjaF93aXRoX21hcDtcXG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfcGl0Y2g7XFxudW5pZm9ybSBib29sIHVfcm90YXRlX3N5bWJvbDtcXG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfYXNwZWN0X3JhdGlvO1xcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO1xcbnVuaWZvcm0gZmxvYXQgdV9mYWRlX2NoYW5nZTtcXG5cXG51bmlmb3JtIHZlYzIgdV90ZXhzaXplO1xcblxcbnZhcnlpbmcgdmVjMiB2X2RhdGEwO1xcbnZhcnlpbmcgdmVjMyB2X2RhdGExO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBmaWxsX2NvbG9yXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoYWxvX3dpZHRoXFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb19ibHVyXFxuXFxuICAgIHZlYzIgYV9wb3MgPSBhX3Bvc19vZmZzZXQueHk7XFxuICAgIHZlYzIgYV9vZmZzZXQgPSBhX3Bvc19vZmZzZXQuenc7XFxuXFxuICAgIHZlYzIgYV90ZXggPSBhX2RhdGEueHk7XFxuICAgIHZlYzIgYV9zaXplID0gYV9kYXRhLnp3O1xcblxcbiAgICBoaWdocCBmbG9hdCBzZWdtZW50X2FuZ2xlID0gLWFfcHJvamVjdGVkX3Bvc1syXTtcXG4gICAgZmxvYXQgc2l6ZTtcXG5cXG4gICAgaWYgKCF1X2lzX3NpemVfem9vbV9jb25zdGFudCAmJiAhdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtcXG4gICAgICAgIHNpemUgPSBtaXgoYV9zaXplWzBdLCBhX3NpemVbMV0sIHVfc2l6ZV90KSAvIDEwLjA7XFxuICAgIH0gZWxzZSBpZiAodV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgIXVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSB7XFxuICAgICAgICBzaXplID0gYV9zaXplWzBdIC8gMTAuMDtcXG4gICAgfSBlbHNlIGlmICghdV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtcXG4gICAgICAgIHNpemUgPSB1X3NpemU7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBzaXplID0gdV9zaXplO1xcbiAgICB9XFxuXFxuICAgIHZlYzQgcHJvamVjdGVkUG9pbnQgPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xcbiAgICBoaWdocCBmbG9hdCBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlID0gcHJvamVjdGVkUG9pbnQudztcXG4gICAgLy8gSWYgdGhlIGxhYmVsIGlzIHBpdGNoZWQgd2l0aCB0aGUgbWFwLCBsYXlvdXQgaXMgZG9uZSBpbiBwaXRjaGVkIHNwYWNlLFxcbiAgICAvLyB3aGljaCBtYWtlcyBsYWJlbHMgaW4gdGhlIGRpc3RhbmNlIHNtYWxsZXIgcmVsYXRpdmUgdG8gdmlld3BvcnQgc3BhY2UuXFxuICAgIC8vIFdlIGNvdW50ZXJhY3QgcGFydCBvZiB0aGF0IGVmZmVjdCBieSBtdWx0aXBseWluZyBieSB0aGUgcGVyc3BlY3RpdmUgcmF0aW8uXFxuICAgIC8vIElmIHRoZSBsYWJlbCBpc24ndCBwaXRjaGVkIHdpdGggdGhlIG1hcCwgd2UgZG8gbGF5b3V0IGluIHZpZXdwb3J0IHNwYWNlLFxcbiAgICAvLyB3aGljaCBtYWtlcyBsYWJlbHMgaW4gdGhlIGRpc3RhbmNlIGxhcmdlciByZWxhdGl2ZSB0byB0aGUgZmVhdHVyZXMgYXJvdW5kXFxuICAgIC8vIHRoZW0uIFdlIGNvdW50ZXJhY3QgcGFydCBvZiB0aGF0IGVmZmVjdCBieSBkaXZpZGluZyBieSB0aGUgcGVyc3BlY3RpdmUgcmF0aW8uXFxuICAgIGhpZ2hwIGZsb2F0IGRpc3RhbmNlX3JhdGlvID0gdV9waXRjaF93aXRoX21hcCA/XFxuICAgICAgICBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlIC8gdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlIDpcXG4gICAgICAgIHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSAvIGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2U7XFxuICAgIGhpZ2hwIGZsb2F0IHBlcnNwZWN0aXZlX3JhdGlvID0gY2xhbXAoXFxuICAgICAgICAwLjUgKyAwLjUgKiBkaXN0YW5jZV9yYXRpbyxcXG4gICAgICAgIDAuMCwgLy8gUHJldmVudHMgb3ZlcnNpemVkIG5lYXItZmllbGQgc3ltYm9scyBpbiBwaXRjaGVkL292ZXJ6b29tZWQgdGlsZXNcXG4gICAgICAgIDQuMCk7XFxuXFxuICAgIHNpemUgKj0gcGVyc3BlY3RpdmVfcmF0aW87XFxuXFxuICAgIGZsb2F0IGZvbnRTY2FsZSA9IHVfaXNfdGV4dCA/IHNpemUgLyAyNC4wIDogc2l6ZTtcXG5cXG4gICAgaGlnaHAgZmxvYXQgc3ltYm9sX3JvdGF0aW9uID0gMC4wO1xcbiAgICBpZiAodV9yb3RhdGVfc3ltYm9sKSB7XFxuICAgICAgICAvLyBQb2ludCBsYWJlbHMgd2l0aCAncm90YXRpb24tYWxpZ25tZW50OiBtYXAnIGFyZSBob3Jpem9udGFsIHdpdGggcmVzcGVjdCB0byB0aWxlIHVuaXRzXFxuICAgICAgICAvLyBUbyBmaWd1cmUgb3V0IHRoYXQgYW5nbGUgaW4gcHJvamVjdGVkIHNwYWNlLCB3ZSBkcmF3IGEgc2hvcnQgaG9yaXpvbnRhbCBsaW5lIGluIHRpbGVcXG4gICAgICAgIC8vIHNwYWNlLCBwcm9qZWN0IGl0LCBhbmQgbWVhc3VyZSBpdHMgYW5nbGUgaW4gcHJvamVjdGVkIHNwYWNlLlxcbiAgICAgICAgdmVjNCBvZmZzZXRQcm9qZWN0ZWRQb2ludCA9IHVfbWF0cml4ICogdmVjNChhX3BvcyArIHZlYzIoMSwgMCksIDAsIDEpO1xcblxcbiAgICAgICAgdmVjMiBhID0gcHJvamVjdGVkUG9pbnQueHkgLyBwcm9qZWN0ZWRQb2ludC53O1xcbiAgICAgICAgdmVjMiBiID0gb2Zmc2V0UHJvamVjdGVkUG9pbnQueHkgLyBvZmZzZXRQcm9qZWN0ZWRQb2ludC53O1xcblxcbiAgICAgICAgc3ltYm9sX3JvdGF0aW9uID0gYXRhbigoYi55IC0gYS55KSAvIHVfYXNwZWN0X3JhdGlvLCBiLnggLSBhLngpO1xcbiAgICB9XFxuXFxuICAgIGhpZ2hwIGZsb2F0IGFuZ2xlX3NpbiA9IHNpbihzZWdtZW50X2FuZ2xlICsgc3ltYm9sX3JvdGF0aW9uKTtcXG4gICAgaGlnaHAgZmxvYXQgYW5nbGVfY29zID0gY29zKHNlZ21lbnRfYW5nbGUgKyBzeW1ib2xfcm90YXRpb24pO1xcbiAgICBtYXQyIHJvdGF0aW9uX21hdHJpeCA9IG1hdDIoYW5nbGVfY29zLCAtMS4wICogYW5nbGVfc2luLCBhbmdsZV9zaW4sIGFuZ2xlX2Nvcyk7XFxuXFxuICAgIHZlYzQgcHJvamVjdGVkX3BvcyA9IHVfbGFiZWxfcGxhbmVfbWF0cml4ICogdmVjNChhX3Byb2plY3RlZF9wb3MueHksIDAuMCwgMS4wKTtcXG4gICAgZ2xfUG9zaXRpb24gPSB1X2dsX2Nvb3JkX21hdHJpeCAqIHZlYzQocHJvamVjdGVkX3Bvcy54eSAvIHByb2plY3RlZF9wb3MudyArIHJvdGF0aW9uX21hdHJpeCAqIChhX29mZnNldCAvIDMyLjAgKiBmb250U2NhbGUpLCAwLjAsIDEuMCk7XFxuICAgIGZsb2F0IGdhbW1hX3NjYWxlID0gZ2xfUG9zaXRpb24udztcXG5cXG4gICAgdmVjMiB0ZXggPSBhX3RleCAvIHVfdGV4c2l6ZTtcXG4gICAgdmVjMiBmYWRlX29wYWNpdHkgPSB1bnBhY2tfb3BhY2l0eShhX2ZhZGVfb3BhY2l0eSk7XFxuICAgIGZsb2F0IGZhZGVfY2hhbmdlID0gZmFkZV9vcGFjaXR5WzFdID4gMC41ID8gdV9mYWRlX2NoYW5nZSA6IC11X2ZhZGVfY2hhbmdlO1xcbiAgICBmbG9hdCBpbnRlcnBvbGF0ZWRfZmFkZV9vcGFjaXR5ID0gbWF4KDAuMCwgbWluKDEuMCwgZmFkZV9vcGFjaXR5WzBdICsgZmFkZV9jaGFuZ2UpKTtcXG5cXG4gICAgdl9kYXRhMCA9IHZlYzIodGV4LngsIHRleC55KTtcXG4gICAgdl9kYXRhMSA9IHZlYzMoZ2FtbWFfc2NhbGUsIHNpemUsIGludGVycG9sYXRlZF9mYWRlX29wYWNpdHkpO1xcbn1cXG5cIn19LHRyPS8jcHJhZ21hIG1hcGJveDogKFtcXHddKykgKFtcXHddKykgKFtcXHddKykgKFtcXHddKykvZyxlcj1mdW5jdGlvbih0KXt2YXIgZT1RZVt0XSxyPXt9O2UuZnJhZ21lbnRTb3VyY2U9ZS5mcmFnbWVudFNvdXJjZS5yZXBsYWNlKHRyLGZ1bmN0aW9uKHQsZSxuLGksYSl7cmV0dXJuIHJbYV09ITAsXCJkZWZpbmVcIj09PWU/XCJcXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfXCIrYStcIlxcbnZhcnlpbmcgXCIrbitcIiBcIitpK1wiIFwiK2ErXCI7XFxuI2Vsc2VcXG51bmlmb3JtIFwiK24rXCIgXCIraStcIiB1X1wiK2ErXCI7XFxuI2VuZGlmXFxuXCI6XCJcXG4jaWZkZWYgSEFTX1VOSUZPUk1fdV9cIithK1wiXFxuICAgIFwiK24rXCIgXCIraStcIiBcIithK1wiID0gdV9cIithK1wiO1xcbiNlbmRpZlxcblwifSksZS52ZXJ0ZXhTb3VyY2U9ZS52ZXJ0ZXhTb3VyY2UucmVwbGFjZSh0cixmdW5jdGlvbih0LGUsbixpLGEpe3ZhciBvPVwiZmxvYXRcIj09PWk/XCJ2ZWMyXCI6XCJ2ZWM0XCI7cmV0dXJuIHJbYV0/XCJkZWZpbmVcIj09PWU/XCJcXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfXCIrYStcIlxcbnVuaWZvcm0gbG93cCBmbG9hdCBhX1wiK2ErXCJfdDtcXG5hdHRyaWJ1dGUgXCIrbitcIiBcIitvK1wiIGFfXCIrYStcIjtcXG52YXJ5aW5nIFwiK24rXCIgXCIraStcIiBcIithK1wiO1xcbiNlbHNlXFxudW5pZm9ybSBcIituK1wiIFwiK2krXCIgdV9cIithK1wiO1xcbiNlbmRpZlxcblwiOlwiXFxuI2lmbmRlZiBIQVNfVU5JRk9STV91X1wiK2ErXCJcXG4gICAgXCIrYStcIiA9IHVucGFja19taXhfXCIrbytcIihhX1wiK2ErXCIsIGFfXCIrYStcIl90KTtcXG4jZWxzZVxcbiAgICBcIituK1wiIFwiK2krXCIgXCIrYStcIiA9IHVfXCIrYStcIjtcXG4jZW5kaWZcXG5cIjpcImRlZmluZVwiPT09ZT9cIlxcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV9cIithK1wiXFxudW5pZm9ybSBsb3dwIGZsb2F0IGFfXCIrYStcIl90O1xcbmF0dHJpYnV0ZSBcIituK1wiIFwiK28rXCIgYV9cIithK1wiO1xcbiNlbHNlXFxudW5pZm9ybSBcIituK1wiIFwiK2krXCIgdV9cIithK1wiO1xcbiNlbmRpZlxcblwiOlwiXFxuI2lmbmRlZiBIQVNfVU5JRk9STV91X1wiK2ErXCJcXG4gICAgXCIrbitcIiBcIitpK1wiIFwiK2ErXCIgPSB1bnBhY2tfbWl4X1wiK28rXCIoYV9cIithK1wiLCBhX1wiK2ErXCJfdCk7XFxuI2Vsc2VcXG4gICAgXCIrbitcIiBcIitpK1wiIFwiK2ErXCIgPSB1X1wiK2ErXCI7XFxuI2VuZGlmXFxuXCJ9KX07Zm9yKHZhciByciBpbiBRZSllcihycik7dmFyIG5yPVFlLGlyPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuZ2w7dGhpcy5wcm9ncmFtPWkuY3JlYXRlUHJvZ3JhbSgpO3ZhciBvPXIuZGVmaW5lcygpLmNvbmNhdChcIiNkZWZpbmUgREVWSUNFX1BJWEVMX1JBVElPIFwiK2EuZGV2aWNlUGl4ZWxSYXRpby50b0ZpeGVkKDEpKTtuJiZvLnB1c2goXCIjZGVmaW5lIE9WRVJEUkFXX0lOU1BFQ1RPUjtcIik7dmFyIHM9by5jb25jYXQobnIucHJlbHVkZS5mcmFnbWVudFNvdXJjZSxlLmZyYWdtZW50U291cmNlKS5qb2luKFwiXFxuXCIpLGw9by5jb25jYXQobnIucHJlbHVkZS52ZXJ0ZXhTb3VyY2UsZS52ZXJ0ZXhTb3VyY2UpLmpvaW4oXCJcXG5cIiksYz1pLmNyZWF0ZVNoYWRlcihpLkZSQUdNRU5UX1NIQURFUik7aS5zaGFkZXJTb3VyY2UoYyxzKSxpLmNvbXBpbGVTaGFkZXIoYyksaS5hdHRhY2hTaGFkZXIodGhpcy5wcm9ncmFtLGMpO3ZhciB1PWkuY3JlYXRlU2hhZGVyKGkuVkVSVEVYX1NIQURFUik7aS5zaGFkZXJTb3VyY2UodSxsKSxpLmNvbXBpbGVTaGFkZXIodSksaS5hdHRhY2hTaGFkZXIodGhpcy5wcm9ncmFtLHUpO2Zvcih2YXIgaD1yLmxheW91dEF0dHJpYnV0ZXN8fFtdLGY9MDtmPGgubGVuZ3RoO2YrKylpLmJpbmRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sZixoW2ZdLm5hbWUpO2kubGlua1Byb2dyYW0odGhpcy5wcm9ncmFtKSx0aGlzLm51bUF0dHJpYnV0ZXM9aS5nZXRQcm9ncmFtUGFyYW1ldGVyKHRoaXMucHJvZ3JhbSxpLkFDVElWRV9BVFRSSUJVVEVTKSx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy51bmlmb3Jtcz17fTtmb3IodmFyIHA9MDtwPHRoaXMubnVtQXR0cmlidXRlcztwKyspe3ZhciBkPWkuZ2V0QWN0aXZlQXR0cmliKHRoaXMucHJvZ3JhbSxwKTtkJiYodGhpcy5hdHRyaWJ1dGVzW2QubmFtZV09aS5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sZC5uYW1lKSl9Zm9yKHZhciBnPWkuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLnByb2dyYW0saS5BQ1RJVkVfVU5JRk9STVMpLHY9MDt2PGc7disrKXt2YXIgbT1pLmdldEFjdGl2ZVVuaWZvcm0odGhpcy5wcm9ncmFtLHYpO20mJih0aGlzLnVuaWZvcm1zW20ubmFtZV09aS5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLG0ubmFtZSkpfX07ZnVuY3Rpb24gYXIoZSxyLG4saSxhKXtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKyl7dmFyIHM9bltvXTtpZihpLmlzTGVzc1RoYW4ocy50aWxlSUQpKWJyZWFrO2lmKHIua2V5PT09cy50aWxlSUQua2V5KXJldHVybjtpZihzLnRpbGVJRC5pc0NoaWxkT2Yocikpe2Zvcih2YXIgbD1yLmNoaWxkcmVuKDEvMCksYz0wO2M8bC5sZW5ndGg7YysrKWFyKGUsbFtjXSxuLnNsaWNlKG8pLGksYSk7cmV0dXJufX12YXIgdT1yLm92ZXJzY2FsZWRaLWUub3ZlcnNjYWxlZFosaD1uZXcgdC5DYW5vbmljYWxUaWxlSUQodSxyLmNhbm9uaWNhbC54LShlLmNhbm9uaWNhbC54PDx1KSxyLmNhbm9uaWNhbC55LShlLmNhbm9uaWNhbC55PDx1KSk7YVtoLmtleV09YVtoLmtleV18fGh9ZnVuY3Rpb24gb3IodCxlLHIsbixpKXt2YXIgYT10LmNvbnRleHQsbz1hLmdsLHM9aT90LnVzZVByb2dyYW0oXCJjb2xsaXNpb25DaXJjbGVcIik6dC51c2VQcm9ncmFtKFwiY29sbGlzaW9uQm94XCIpO2Euc2V0RGVwdGhNb2RlKHF0LmRpc2FibGVkKSxhLnNldFN0ZW5jaWxNb2RlKEh0LmRpc2FibGVkKSxhLnNldENvbG9yTW9kZSh0LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSk7Zm9yKHZhciBsPTA7bDxuLmxlbmd0aDtsKyspe3ZhciBjPW5bbF0sdT1lLmdldFRpbGUoYyksaD11LmdldEJ1Y2tldChyKTtpZihoKXt2YXIgZj1pP2guY29sbGlzaW9uQ2lyY2xlOmguY29sbGlzaW9uQm94O2lmKGYpe28udW5pZm9ybU1hdHJpeDRmdihzLnVuaWZvcm1zLnVfbWF0cml4LCExLGMucG9zTWF0cml4KSxpfHxhLmxpbmVXaWR0aC5zZXQoMSksby51bmlmb3JtMWYocy51bmlmb3Jtcy51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UsdC50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSk7dmFyIHA9TWUodSwxLHQudHJhbnNmb3JtLnpvb20pLGQ9TWF0aC5wb3coMix0LnRyYW5zZm9ybS56b29tLXUudGlsZUlELm92ZXJzY2FsZWRaKTtvLnVuaWZvcm0xZihzLnVuaWZvcm1zLnVfcGl4ZWxzX3RvX3RpbGVfdW5pdHMscCksby51bmlmb3JtMmYocy51bmlmb3Jtcy51X2V4dHJ1ZGVfc2NhbGUsdC50cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzWzBdLyhwKmQpLHQudHJhbnNmb3JtLnBpeGVsc1RvR0xVbml0c1sxXS8ocCpkKSksby51bmlmb3JtMWYocy51bmlmb3Jtcy51X292ZXJzY2FsZV9mYWN0b3IsdS50aWxlSUQub3ZlcnNjYWxlRmFjdG9yKCkpLHMuZHJhdyhhLGk/by5UUklBTkdMRVM6by5MSU5FUyxyLmlkLGYubGF5b3V0VmVydGV4QnVmZmVyLGYuaW5kZXhCdWZmZXIsZi5zZWdtZW50cyxudWxsLGYuY29sbGlzaW9uVmVydGV4QnVmZmVyLG51bGwpfX19fWlyLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsKXtmb3IodmFyIGMsdT10LmdsLGg9KGM9e30sY1t1LkxJTkVTXT0yLGNbdS5UUklBTkdMRVNdPTMsYylbZV0sZj0wLHA9YS5nZXQoKTtmPHAubGVuZ3RoO2YrPTEpe3ZhciBkPXBbZl0sZz1kLnZhb3N8fChkLnZhb3M9e30pOyhnW3JdfHwoZ1tyXT1uZXcgUSkpLmJpbmQodCx0aGlzLG4sbz9vLmdldFBhaW50VmVydGV4QnVmZmVycygpOltdLGksZC52ZXJ0ZXhPZmZzZXQscyxsKSx1LmRyYXdFbGVtZW50cyhlLGQucHJpbWl0aXZlTGVuZ3RoKmgsdS5VTlNJR05FRF9TSE9SVCxkLnByaW1pdGl2ZU9mZnNldCpoKjIpfX07dmFyIHNyPXQubWF0NC5pZGVudGl0eShuZXcgRmxvYXQzMkFycmF5KDE2KSksbHI9dC5kZWZhdWx0JDE5LmxheW91dDtmdW5jdGlvbiBjcih0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdSxoPXQuY29udGV4dCxmPWguZ2wscD10LnRyYW5zZm9ybSxkPVwibWFwXCI9PT1zLGc9XCJtYXBcIj09PWwsdj1kJiZcImxpbmVcIj09PXIubGF5b3V0LmdldChcInN5bWJvbC1wbGFjZW1lbnRcIiksbT1kJiYhZyYmIXYseT1nO2guc2V0RGVwdGhNb2RlKHk/dC5kZXB0aE1vZGVGb3JTdWJsYXllcigwLHF0LlJlYWRPbmx5KTpxdC5kaXNhYmxlZCk7Zm9yKHZhciB4PTAsYj1uO3g8Yi5sZW5ndGg7eCs9MSl7dmFyIF89Ylt4XSx3PWUuZ2V0VGlsZShfKSxrPXcuZ2V0QnVja2V0KHIpO2lmKGspe3ZhciBBPWk/ay50ZXh0OmsuaWNvbjtpZihBJiZBLnNlZ21lbnRzLmdldCgpLmxlbmd0aCl7dmFyIFQ9QS5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KHIuaWQpLE09aXx8ay5zZGZJY29ucyxTPWk/ay50ZXh0U2l6ZURhdGE6ay5pY29uU2l6ZURhdGE7aWYodXx8KHU9dC51c2VQcm9ncmFtKE0/XCJzeW1ib2xTREZcIjpcInN5bWJvbEljb25cIixUKSxULnNldFVuaWZvcm1zKHQuY29udGV4dCx1LHIucGFpbnQse3pvb206dC50cmFuc2Zvcm0uem9vbX0pLHVyKHUsdCxyLGksbSxnLFMpKSxoLmFjdGl2ZVRleHR1cmUuc2V0KGYuVEVYVFVSRTApLGYudW5pZm9ybTFpKHUudW5pZm9ybXMudV90ZXh0dXJlLDApLGkpdy5nbHlwaEF0bGFzVGV4dHVyZS5iaW5kKGYuTElORUFSLGYuQ0xBTVBfVE9fRURHRSksZi51bmlmb3JtMmZ2KHUudW5pZm9ybXMudV90ZXhzaXplLHcuZ2x5cGhBdGxhc1RleHR1cmUuc2l6ZSk7ZWxzZXt2YXIgRT0xIT09ci5sYXlvdXQuZ2V0KFwiaWNvbi1zaXplXCIpLmNvbnN0YW50T3IoMCl8fGsuaWNvbnNOZWVkTGluZWFyLEM9Z3x8MCE9PXAucGl0Y2g7dy5pY29uQXRsYXNUZXh0dXJlLmJpbmQoTXx8dC5vcHRpb25zLnJvdGF0aW5nfHx0Lm9wdGlvbnMuem9vbWluZ3x8RXx8Qz9mLkxJTkVBUjpmLk5FQVJFU1QsZi5DTEFNUF9UT19FREdFKSxmLnVuaWZvcm0yZnYodS51bmlmb3Jtcy51X3RleHNpemUsdy5pY29uQXRsYXNUZXh0dXJlLnNpemUpfWYudW5pZm9ybU1hdHJpeDRmdih1LnVuaWZvcm1zLnVfbWF0cml4LCExLHQudHJhbnNsYXRlUG9zTWF0cml4KF8ucG9zTWF0cml4LHcsYSxvKSk7dmFyIEw9TWUodywxLHQudHJhbnNmb3JtLnpvb20pLHo9aGUoXy5wb3NNYXRyaXgsZyxkLHQudHJhbnNmb3JtLEwpLE89ZmUoXy5wb3NNYXRyaXgsZyxkLHQudHJhbnNmb3JtLEwpO2YudW5pZm9ybU1hdHJpeDRmdih1LnVuaWZvcm1zLnVfZ2xfY29vcmRfbWF0cml4LCExLHQudHJhbnNsYXRlUG9zTWF0cml4KE8sdyxhLG8sITApKSx2PyhmLnVuaWZvcm1NYXRyaXg0ZnYodS51bmlmb3Jtcy51X2xhYmVsX3BsYW5lX21hdHJpeCwhMSxzciksZ2UoayxfLnBvc01hdHJpeCx0LGkseixPLGcsYykpOmYudW5pZm9ybU1hdHJpeDRmdih1LnVuaWZvcm1zLnVfbGFiZWxfcGxhbmVfbWF0cml4LCExLHopLGYudW5pZm9ybTFmKHUudW5pZm9ybXMudV9mYWRlX2NoYW5nZSx0Lm9wdGlvbnMuZmFkZUR1cmF0aW9uP3Quc3ltYm9sRmFkZUNoYW5nZToxKSxocih1LFQsdCxyLHcsQSxpLE0sZyl9fX19ZnVuY3Rpb24gdXIoZSxyLG4saSxhLG8scyl7dmFyIGw9ci5jb250ZXh0LmdsLGM9ci50cmFuc2Zvcm07bC51bmlmb3JtMWkoZS51bmlmb3Jtcy51X3BpdGNoX3dpdGhfbWFwLG8/MTowKSxsLnVuaWZvcm0xZihlLnVuaWZvcm1zLnVfaXNfdGV4dCxpPzE6MCksbC51bmlmb3JtMWYoZS51bmlmb3Jtcy51X3BpdGNoLGMucGl0Y2gvMzYwKjIqTWF0aC5QSSk7dmFyIHU9XCJjb25zdGFudFwiPT09cy5mdW5jdGlvblR5cGV8fFwic291cmNlXCI9PT1zLmZ1bmN0aW9uVHlwZSxoPVwiY29uc3RhbnRcIj09PXMuZnVuY3Rpb25UeXBlfHxcImNhbWVyYVwiPT09cy5mdW5jdGlvblR5cGU7bC51bmlmb3JtMWkoZS51bmlmb3Jtcy51X2lzX3NpemVfem9vbV9jb25zdGFudCx1PzE6MCksbC51bmlmb3JtMWkoZS51bmlmb3Jtcy51X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCxoPzE6MCksbC51bmlmb3JtMWYoZS51bmlmb3Jtcy51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UsYy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlKTt2YXIgZj10LmV2YWx1YXRlU2l6ZUZvclpvb20ocyxjLnpvb20sbHIucHJvcGVydGllc1tpP1widGV4dC1zaXplXCI6XCJpY29uLXNpemVcIl0pO3ZvaWQgMCE9PWYudVNpemVUJiZsLnVuaWZvcm0xZihlLnVuaWZvcm1zLnVfc2l6ZV90LGYudVNpemVUKSx2b2lkIDAhPT1mLnVTaXplJiZsLnVuaWZvcm0xZihlLnVuaWZvcm1zLnVfc2l6ZSxmLnVTaXplKSxsLnVuaWZvcm0xZihlLnVuaWZvcm1zLnVfYXNwZWN0X3JhdGlvLGMud2lkdGgvYy5oZWlnaHQpLGwudW5pZm9ybTFpKGUudW5pZm9ybXMudV9yb3RhdGVfc3ltYm9sLGE/MTowKX1mdW5jdGlvbiBocih0LGUscixuLGksYSxvLHMsbCl7dmFyIGM9ci5jb250ZXh0LHU9Yy5nbCxoPXIudHJhbnNmb3JtO2lmKHMpe3ZhciBmPTAhPT1uLnBhaW50LmdldChvP1widGV4dC1oYWxvLXdpZHRoXCI6XCJpY29uLWhhbG8td2lkdGhcIikuY29uc3RhbnRPcigxKSxwPWw/TWF0aC5jb3MoaC5fcGl0Y2gpKmguY2FtZXJhVG9DZW50ZXJEaXN0YW5jZToxO3UudW5pZm9ybTFmKHQudW5pZm9ybXMudV9nYW1tYV9zY2FsZSxwKSxmJiYodS51bmlmb3JtMWYodC51bmlmb3Jtcy51X2lzX2hhbG8sMSksZnIoYSxuLGMsdCkpLHUudW5pZm9ybTFmKHQudW5pZm9ybXMudV9pc19oYWxvLDApfWZyKGEsbixjLHQpfWZ1bmN0aW9uIGZyKHQsZSxyLG4pe24uZHJhdyhyLHIuZ2wuVFJJQU5HTEVTLGUuaWQsdC5sYXlvdXRWZXJ0ZXhCdWZmZXIsdC5pbmRleEJ1ZmZlcix0LnNlZ21lbnRzLHQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChlLmlkKSx0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIsdC5vcGFjaXR5VmVydGV4QnVmZmVyKX1mdW5jdGlvbiBwcih0LGUscixuLGksbyxzLGwsYyl7dmFyIHUsaCxmLHAsZD1lLmNvbnRleHQsZz1kLmdsLHY9aS5wYWludC5nZXQoXCJsaW5lLWRhc2hhcnJheVwiKSxtPWkucGFpbnQuZ2V0KFwibGluZS1wYXR0ZXJuXCIpO2lmKGx8fGMpe3ZhciB5PTEvTWUociwxLGUudHJhbnNmb3JtLnRpbGVab29tKTtpZih2KXt1PWUubGluZUF0bGFzLmdldERhc2godi5mcm9tLFwicm91bmRcIj09PWkubGF5b3V0LmdldChcImxpbmUtY2FwXCIpKSxoPWUubGluZUF0bGFzLmdldERhc2godi50byxcInJvdW5kXCI9PT1pLmxheW91dC5nZXQoXCJsaW5lLWNhcFwiKSk7dmFyIHg9dS53aWR0aCp2LmZyb21TY2FsZSxiPWgud2lkdGgqdi50b1NjYWxlO2cudW5pZm9ybTJmKHQudW5pZm9ybXMudV9wYXR0ZXJuc2NhbGVfYSx5L3gsLXUuaGVpZ2h0LzIpLGcudW5pZm9ybTJmKHQudW5pZm9ybXMudV9wYXR0ZXJuc2NhbGVfYix5L2IsLWguaGVpZ2h0LzIpLGcudW5pZm9ybTFmKHQudW5pZm9ybXMudV9zZGZnYW1tYSxlLmxpbmVBdGxhcy53aWR0aC8oMjU2Kk1hdGgubWluKHgsYikqYS5kZXZpY2VQaXhlbFJhdGlvKS8yKX1lbHNlIGlmKG0pe2lmKGY9ZS5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybihtLmZyb20pLHA9ZS5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybihtLnRvKSwhZnx8IXApcmV0dXJuO2cudW5pZm9ybTJmKHQudW5pZm9ybXMudV9wYXR0ZXJuX3NpemVfYSxmLmRpc3BsYXlTaXplWzBdKm0uZnJvbVNjYWxlL3ksZi5kaXNwbGF5U2l6ZVsxXSksZy51bmlmb3JtMmYodC51bmlmb3Jtcy51X3BhdHRlcm5fc2l6ZV9iLHAuZGlzcGxheVNpemVbMF0qbS50b1NjYWxlL3kscC5kaXNwbGF5U2l6ZVsxXSk7dmFyIF89ZS5pbWFnZU1hbmFnZXIuZ2V0UGl4ZWxTaXplKCksdz1fLndpZHRoLGs9Xy5oZWlnaHQ7Zy51bmlmb3JtMmZ2KHQudW5pZm9ybXMudV90ZXhzaXplLFt3LGtdKX1nLnVuaWZvcm0yZih0LnVuaWZvcm1zLnVfZ2xfdW5pdHNfdG9fcGl4ZWxzLDEvZS50cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzWzBdLDEvZS50cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzWzFdKX1sJiYodj8oZy51bmlmb3JtMWkodC51bmlmb3Jtcy51X2ltYWdlLDApLGQuYWN0aXZlVGV4dHVyZS5zZXQoZy5URVhUVVJFMCksZS5saW5lQXRsYXMuYmluZChkKSxnLnVuaWZvcm0xZih0LnVuaWZvcm1zLnVfdGV4X3lfYSx1LnkpLGcudW5pZm9ybTFmKHQudW5pZm9ybXMudV90ZXhfeV9iLGgueSksZy51bmlmb3JtMWYodC51bmlmb3Jtcy51X21peCx2LnQpKTptJiYoZy51bmlmb3JtMWkodC51bmlmb3Jtcy51X2ltYWdlLDApLGQuYWN0aXZlVGV4dHVyZS5zZXQoZy5URVhUVVJFMCksZS5pbWFnZU1hbmFnZXIuYmluZChkKSxnLnVuaWZvcm0yZnYodC51bmlmb3Jtcy51X3BhdHRlcm5fdGxfYSxmLnRsKSxnLnVuaWZvcm0yZnYodC51bmlmb3Jtcy51X3BhdHRlcm5fYnJfYSxmLmJyKSxnLnVuaWZvcm0yZnYodC51bmlmb3Jtcy51X3BhdHRlcm5fdGxfYixwLnRsKSxnLnVuaWZvcm0yZnYodC51bmlmb3Jtcy51X3BhdHRlcm5fYnJfYixwLmJyKSxnLnVuaWZvcm0xZih0LnVuaWZvcm1zLnVfZmFkZSxtLnQpKSksZC5zZXRTdGVuY2lsTW9kZShlLnN0ZW5jaWxNb2RlRm9yQ2xpcHBpbmcobykpO3ZhciBBPWUudHJhbnNsYXRlUG9zTWF0cml4KG8ucG9zTWF0cml4LHIsaS5wYWludC5nZXQoXCJsaW5lLXRyYW5zbGF0ZVwiKSxpLnBhaW50LmdldChcImxpbmUtdHJhbnNsYXRlLWFuY2hvclwiKSk7aWYoZy51bmlmb3JtTWF0cml4NGZ2KHQudW5pZm9ybXMudV9tYXRyaXgsITEsQSksZy51bmlmb3JtMWYodC51bmlmb3Jtcy51X3JhdGlvLDEvTWUociwxLGUudHJhbnNmb3JtLnpvb20pKSxpLnBhaW50LmdldChcImxpbmUtZ3JhZGllbnRcIikpe2QuYWN0aXZlVGV4dHVyZS5zZXQoZy5URVhUVVJFMCk7dmFyIFQ9aS5ncmFkaWVudFRleHR1cmU7aWYoIWkuZ3JhZGllbnQpcmV0dXJuO1R8fChUPWkuZ3JhZGllbnRUZXh0dXJlPW5ldyB6KGQsaS5ncmFkaWVudCxnLlJHQkEpKSxULmJpbmQoZy5MSU5FQVIsZy5DTEFNUF9UT19FREdFKSxnLnVuaWZvcm0xaSh0LnVuaWZvcm1zLnVfaW1hZ2UsMCl9dC5kcmF3KGQsZy5UUklBTkdMRVMsaS5pZCxuLmxheW91dFZlcnRleEJ1ZmZlcixuLmluZGV4QnVmZmVyLG4uc2VnbWVudHMscyl9dmFyIGRyPWZ1bmN0aW9uKHQsZSl7aWYoIXQpcmV0dXJuITE7dmFyIHI9ZS5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybih0LmZyb20pLG49ZS5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybih0LnRvKTtyZXR1cm4hcnx8IW59LGdyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLmNvbnRleHQsaT1uLmdsLGE9ZS5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybih0LmZyb20pLG89ZS5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybih0LnRvKTtpLnVuaWZvcm0xaShyLnVuaWZvcm1zLnVfaW1hZ2UsMCksaS51bmlmb3JtMmZ2KHIudW5pZm9ybXMudV9wYXR0ZXJuX3RsX2EsYS50bCksaS51bmlmb3JtMmZ2KHIudW5pZm9ybXMudV9wYXR0ZXJuX2JyX2EsYS5iciksaS51bmlmb3JtMmZ2KHIudW5pZm9ybXMudV9wYXR0ZXJuX3RsX2Isby50bCksaS51bmlmb3JtMmZ2KHIudW5pZm9ybXMudV9wYXR0ZXJuX2JyX2Isby5icik7dmFyIHM9ZS5pbWFnZU1hbmFnZXIuZ2V0UGl4ZWxTaXplKCksbD1zLndpZHRoLGM9cy5oZWlnaHQ7aS51bmlmb3JtMmZ2KHIudW5pZm9ybXMudV90ZXhzaXplLFtsLGNdKSxpLnVuaWZvcm0xZihyLnVuaWZvcm1zLnVfbWl4LHQudCksaS51bmlmb3JtMmZ2KHIudW5pZm9ybXMudV9wYXR0ZXJuX3NpemVfYSxhLmRpc3BsYXlTaXplKSxpLnVuaWZvcm0yZnYoci51bmlmb3Jtcy51X3BhdHRlcm5fc2l6ZV9iLG8uZGlzcGxheVNpemUpLGkudW5pZm9ybTFmKHIudW5pZm9ybXMudV9zY2FsZV9hLHQuZnJvbVNjYWxlKSxpLnVuaWZvcm0xZihyLnVuaWZvcm1zLnVfc2NhbGVfYix0LnRvU2NhbGUpLG4uYWN0aXZlVGV4dHVyZS5zZXQoaS5URVhUVVJFMCksZS5pbWFnZU1hbmFnZXIuYmluZChlLmNvbnRleHQpfSx2cj1mdW5jdGlvbih0LGUscil7dmFyIG49ZS5jb250ZXh0LmdsO24udW5pZm9ybTFmKHIudW5pZm9ybXMudV90aWxlX3VuaXRzX3RvX3BpeGVscywxL01lKHQsMSxlLnRyYW5zZm9ybS50aWxlWm9vbSkpO3ZhciBpPU1hdGgucG93KDIsdC50aWxlSUQub3ZlcnNjYWxlZFopLGE9dC50aWxlU2l6ZSpNYXRoLnBvdygyLGUudHJhbnNmb3JtLnRpbGVab29tKS9pLG89YSoodC50aWxlSUQuY2Fub25pY2FsLngrdC50aWxlSUQud3JhcCppKSxzPWEqdC50aWxlSUQuY2Fub25pY2FsLnk7bi51bmlmb3JtMmYoci51bmlmb3Jtcy51X3BpeGVsX2Nvb3JkX3VwcGVyLG8+PjE2LHM+PjE2KSxuLnVuaWZvcm0yZihyLnVuaWZvcm1zLnVfcGl4ZWxfY29vcmRfbG93ZXIsNjU1MzUmbyw2NTUzNSZzKX07ZnVuY3Rpb24gbXIodCxlLHIsbixpKXtpZighZHIoci5wYWludC5nZXQoXCJmaWxsLXBhdHRlcm5cIiksdCkpZm9yKHZhciBhPSEwLG89MCxzPW47bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dLGM9ZS5nZXRUaWxlKGwpLHU9Yy5nZXRCdWNrZXQocik7dSYmKHQuY29udGV4dC5zZXRTdGVuY2lsTW9kZSh0LnN0ZW5jaWxNb2RlRm9yQ2xpcHBpbmcobCkpLGkodCxlLHIsYyxsLHUsYSksYT0hMSl9fWZ1bmN0aW9uIHlyKHQsZSxyLG4saSxhLG8pe3ZhciBzPXQuY29udGV4dC5nbCxsPWEucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChyLmlkKTticihcImZpbGxcIixyLnBhaW50LmdldChcImZpbGwtcGF0dGVyblwiKSx0LGwscixuLGksbykuZHJhdyh0LmNvbnRleHQscy5UUklBTkdMRVMsci5pZCxhLmxheW91dFZlcnRleEJ1ZmZlcixhLmluZGV4QnVmZmVyLGEuc2VnbWVudHMsbCl9ZnVuY3Rpb24geHIodCxlLHIsbixpLGEsbyl7dmFyIHM9dC5jb250ZXh0LmdsLGw9YS5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KHIuaWQpLGM9YnIoXCJmaWxsT3V0bGluZVwiLHIuZ2V0UGFpbnRQcm9wZXJ0eShcImZpbGwtb3V0bGluZS1jb2xvclwiKT9udWxsOnIucGFpbnQuZ2V0KFwiZmlsbC1wYXR0ZXJuXCIpLHQsbCxyLG4saSxvKTtzLnVuaWZvcm0yZihjLnVuaWZvcm1zLnVfd29ybGQscy5kcmF3aW5nQnVmZmVyV2lkdGgscy5kcmF3aW5nQnVmZmVySGVpZ2h0KSxjLmRyYXcodC5jb250ZXh0LHMuTElORVMsci5pZCxhLmxheW91dFZlcnRleEJ1ZmZlcixhLmluZGV4QnVmZmVyMixhLnNlZ21lbnRzMixsKX1mdW5jdGlvbiBicih0LGUscixuLGksYSxvLHMpe3ZhciBsLGM9ci5jb250ZXh0LnByb2dyYW0uZ2V0KCk7cmV0dXJuIGU/KGw9ci51c2VQcm9ncmFtKHQrXCJQYXR0ZXJuXCIsbiksKHN8fGwucHJvZ3JhbSE9PWMpJiYobi5zZXRVbmlmb3JtcyhyLmNvbnRleHQsbCxpLnBhaW50LHt6b29tOnIudHJhbnNmb3JtLnpvb219KSxncihlLHIsbCkpLHZyKGEscixsKSk6KGw9ci51c2VQcm9ncmFtKHQsbiksKHN8fGwucHJvZ3JhbSE9PWMpJiZuLnNldFVuaWZvcm1zKHIuY29udGV4dCxsLGkucGFpbnQse3pvb206ci50cmFuc2Zvcm0uem9vbX0pKSxyLmNvbnRleHQuZ2wudW5pZm9ybU1hdHJpeDRmdihsLnVuaWZvcm1zLnVfbWF0cml4LCExLHIudHJhbnNsYXRlUG9zTWF0cml4KG8ucG9zTWF0cml4LGEsaS5wYWludC5nZXQoXCJmaWxsLXRyYW5zbGF0ZVwiKSxpLnBhaW50LmdldChcImZpbGwtdHJhbnNsYXRlLWFuY2hvclwiKSkpLGx9dmFyIF9yPXQuZGVmYXVsdCQyMC5tYXQzLHdyPXQuZGVmYXVsdCQyMC5tYXQ0LGtyPXQuZGVmYXVsdCQyMC52ZWMzO2Z1bmN0aW9uIEFyKHQsZSxyLG4saSxhLG8pe3ZhciBzPXQuY29udGV4dCxsPXMuZ2wsYz1yLnBhaW50LmdldChcImZpbGwtZXh0cnVzaW9uLXBhdHRlcm5cIiksdT10LmNvbnRleHQucHJvZ3JhbS5nZXQoKSxoPWEucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChyLmlkKSxmPXQudXNlUHJvZ3JhbShjP1wiZmlsbEV4dHJ1c2lvblBhdHRlcm5cIjpcImZpbGxFeHRydXNpb25cIixoKTtpZigob3x8Zi5wcm9ncmFtIT09dSkmJmguc2V0VW5pZm9ybXMocyxmLHIucGFpbnQse3pvb206dC50cmFuc2Zvcm0uem9vbX0pLGMpe2lmKGRyKGMsdCkpcmV0dXJuO2dyKGMsdCxmKSx2cihuLHQsZiksbC51bmlmb3JtMWYoZi51bmlmb3Jtcy51X2hlaWdodF9mYWN0b3IsLU1hdGgucG93KDIsaS5vdmVyc2NhbGVkWikvbi50aWxlU2l6ZS84KX10LmNvbnRleHQuZ2wudW5pZm9ybU1hdHJpeDRmdihmLnVuaWZvcm1zLnVfbWF0cml4LCExLHQudHJhbnNsYXRlUG9zTWF0cml4KGkucG9zTWF0cml4LG4sci5wYWludC5nZXQoXCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGVcIiksci5wYWludC5nZXQoXCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yXCIpKSksZnVuY3Rpb24odCxlKXt2YXIgcj1lLmNvbnRleHQuZ2wsbj1lLnN0eWxlLmxpZ2h0LGk9bi5wcm9wZXJ0aWVzLmdldChcInBvc2l0aW9uXCIpLGE9W2kueCxpLnksaS56XSxvPV9yLmNyZWF0ZSgpO1widmlld3BvcnRcIj09PW4ucHJvcGVydGllcy5nZXQoXCJhbmNob3JcIikmJl9yLmZyb21Sb3RhdGlvbihvLC1lLnRyYW5zZm9ybS5hbmdsZSksa3IudHJhbnNmb3JtTWF0MyhhLGEsbyk7dmFyIHM9bi5wcm9wZXJ0aWVzLmdldChcImNvbG9yXCIpO3IudW5pZm9ybTNmdih0LnVuaWZvcm1zLnVfbGlnaHRwb3MsYSksci51bmlmb3JtMWYodC51bmlmb3Jtcy51X2xpZ2h0aW50ZW5zaXR5LG4ucHJvcGVydGllcy5nZXQoXCJpbnRlbnNpdHlcIikpLHIudW5pZm9ybTNmKHQudW5pZm9ybXMudV9saWdodGNvbG9yLHMucixzLmcscy5iKX0oZix0KSxmLmRyYXcocyxsLlRSSUFOR0xFUyxyLmlkLGEubGF5b3V0VmVydGV4QnVmZmVyLGEuaW5kZXhCdWZmZXIsYS5zZWdtZW50cyxoKX1mdW5jdGlvbiBUcihlLHIsbil7dmFyIGk9ZS5jb250ZXh0LGE9aS5nbCxvPXIuZmJvO2lmKG8pe3ZhciBzPWUudXNlUHJvZ3JhbShcImhpbGxzaGFkZVwiKSxsPWUudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeChyLnRpbGVJRC50b1Vud3JhcHBlZCgpLCEwKTshZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIucGFpbnQuZ2V0KFwiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1kaXJlY3Rpb25cIikqKE1hdGguUEkvMTgwKTtcInZpZXdwb3J0XCI9PT1yLnBhaW50LmdldChcImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yXCIpJiYobi09ZS50cmFuc2Zvcm0uYW5nbGUpLGUuY29udGV4dC5nbC51bmlmb3JtMmYodC51bmlmb3Jtcy51X2xpZ2h0LHIucGFpbnQuZ2V0KFwiaGlsbHNoYWRlLWV4YWdnZXJhdGlvblwiKSxuKX0ocyxlLG4pO3ZhciBjPWZ1bmN0aW9uKGUscil7dmFyIG49ci50b0Nvb3JkaW5hdGUoKSxpPW5ldyB0LmRlZmF1bHQkMTcobi5jb2x1bW4sbi5yb3crMSxuLnpvb20pO3JldHVybltlLnRyYW5zZm9ybS5jb29yZGluYXRlTG9jYXRpb24obikubGF0LGUudHJhbnNmb3JtLmNvb3JkaW5hdGVMb2NhdGlvbihpKS5sYXRdfShlLHIudGlsZUlEKTtpLmFjdGl2ZVRleHR1cmUuc2V0KGEuVEVYVFVSRTApLGEuYmluZFRleHR1cmUoYS5URVhUVVJFXzJELG8uY29sb3JBdHRhY2htZW50LmdldCgpKSxhLnVuaWZvcm1NYXRyaXg0ZnYocy51bmlmb3Jtcy51X21hdHJpeCwhMSxsKSxhLnVuaWZvcm0yZnYocy51bmlmb3Jtcy51X2xhdHJhbmdlLGMpLGEudW5pZm9ybTFpKHMudW5pZm9ybXMudV9pbWFnZSwwKTt2YXIgdT1uLnBhaW50LmdldChcImhpbGxzaGFkZS1zaGFkb3ctY29sb3JcIik7YS51bmlmb3JtNGYocy51bmlmb3Jtcy51X3NoYWRvdyx1LnIsdS5nLHUuYix1LmEpO3ZhciBoPW4ucGFpbnQuZ2V0KFwiaGlsbHNoYWRlLWhpZ2hsaWdodC1jb2xvclwiKTthLnVuaWZvcm00ZihzLnVuaWZvcm1zLnVfaGlnaGxpZ2h0LGgucixoLmcsaC5iLGguYSk7dmFyIGY9bi5wYWludC5nZXQoXCJoaWxsc2hhZGUtYWNjZW50LWNvbG9yXCIpO2lmKGEudW5pZm9ybTRmKHMudW5pZm9ybXMudV9hY2NlbnQsZi5yLGYuZyxmLmIsZi5hKSxyLm1hc2tlZEJvdW5kc0J1ZmZlciYmci5tYXNrZWRJbmRleEJ1ZmZlciYmci5zZWdtZW50cylzLmRyYXcoaSxhLlRSSUFOR0xFUyxuLmlkLHIubWFza2VkQm91bmRzQnVmZmVyLHIubWFza2VkSW5kZXhCdWZmZXIsci5zZWdtZW50cyk7ZWxzZXt2YXIgcD1lLnJhc3RlckJvdW5kc0J1ZmZlcjtlLnJhc3RlckJvdW5kc1ZBTy5iaW5kKGkscyxwLFtdKSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRV9TVFJJUCwwLHAubGVuZ3RoKX19fWZ1bmN0aW9uIE1yKGUscixuKXt2YXIgaT1lLmNvbnRleHQsYT1pLmdsO2lmKHIuZGVtJiZyLmRlbS5sZXZlbCl7dmFyIG89ci5kZW0ubGV2ZWwuZGltLHM9ci5kZW0uZ2V0UGl4ZWxzKCk7aWYoaS5hY3RpdmVUZXh0dXJlLnNldChhLlRFWFRVUkUxKSxpLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLnNldCghMSksci5kZW1UZXh0dXJlPXIuZGVtVGV4dHVyZXx8ZS5nZXRUaWxlVGV4dHVyZShyLnRpbGVTaXplKSxyLmRlbVRleHR1cmUpe3ZhciBsPXIuZGVtVGV4dHVyZTtsLnVwZGF0ZShzLHtwcmVtdWx0aXBseTohMX0pLGwuYmluZChhLk5FQVJFU1QsYS5DTEFNUF9UT19FREdFKX1lbHNlIHIuZGVtVGV4dHVyZT1uZXcgeihpLHMsYS5SR0JBLHtwcmVtdWx0aXBseTohMX0pLHIuZGVtVGV4dHVyZS5iaW5kKGEuTkVBUkVTVCxhLkNMQU1QX1RPX0VER0UpO2kuYWN0aXZlVGV4dHVyZS5zZXQoYS5URVhUVVJFMCk7dmFyIGM9ci5mYm87aWYoIWMpe3ZhciB1PW5ldyB6KGkse3dpZHRoOm8saGVpZ2h0Om8sZGF0YTpudWxsfSxhLlJHQkEpO3UuYmluZChhLkxJTkVBUixhLkNMQU1QX1RPX0VER0UpLChjPXIuZmJvPWkuY3JlYXRlRnJhbWVidWZmZXIobyxvKSkuY29sb3JBdHRhY2htZW50LnNldCh1LnRleHR1cmUpfWkuYmluZEZyYW1lYnVmZmVyLnNldChjLmZyYW1lYnVmZmVyKSxpLnZpZXdwb3J0LnNldChbMCwwLG8sb10pO3ZhciBoPXQubWF0NC5jcmVhdGUoKTt0Lm1hdDQub3J0aG8oaCwwLHQuZGVmYXVsdCQ4LC10LmRlZmF1bHQkOCwwLDAsMSksdC5tYXQ0LnRyYW5zbGF0ZShoLGgsWzAsLXQuZGVmYXVsdCQ4LDBdKTt2YXIgZj1lLnVzZVByb2dyYW0oXCJoaWxsc2hhZGVQcmVwYXJlXCIpO2EudW5pZm9ybU1hdHJpeDRmdihmLnVuaWZvcm1zLnVfbWF0cml4LCExLGgpLGEudW5pZm9ybTFmKGYudW5pZm9ybXMudV96b29tLHIudGlsZUlELm92ZXJzY2FsZWRaKSxhLnVuaWZvcm0yZnYoZi51bmlmb3Jtcy51X2RpbWVuc2lvbixbMipvLDIqb10pLGEudW5pZm9ybTFpKGYudW5pZm9ybXMudV9pbWFnZSwxKSxhLnVuaWZvcm0xZihmLnVuaWZvcm1zLnVfbWF4em9vbSxuKTt2YXIgcD1lLnJhc3RlckJvdW5kc0J1ZmZlcjtlLnJhc3RlckJvdW5kc1ZBTy5iaW5kKGksZixwLFtdKSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRV9TVFJJUCwwLHAubGVuZ3RoKSxyLm5lZWRzSGlsbHNoYWRlUHJlcGFyZT0hMX19ZnVuY3Rpb24gU3IoZSxyLG4saSxvKXt2YXIgcz1pLnBhaW50LmdldChcInJhc3Rlci1mYWRlLWR1cmF0aW9uXCIpO2lmKHM+MCl7dmFyIGw9YS5ub3coKSxjPShsLWUudGltZUFkZGVkKS9zLHU9cj8obC1yLnRpbWVBZGRlZCkvczotMSxoPW4uZ2V0U291cmNlKCksZj1vLmNvdmVyaW5nWm9vbUxldmVsKHt0aWxlU2l6ZTpoLnRpbGVTaXplLHJvdW5kWm9vbTpoLnJvdW5kWm9vbX0pLHA9IXJ8fE1hdGguYWJzKHIudGlsZUlELm92ZXJzY2FsZWRaLWYpPk1hdGguYWJzKGUudGlsZUlELm92ZXJzY2FsZWRaLWYpLGQ9cCYmZS5yZWZyZXNoZWRVcG9uRXhwaXJhdGlvbj8xOnQuY2xhbXAocD9jOjEtdSwwLDEpO3JldHVybiBlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uJiZjPj0xJiYoZS5yZWZyZXNoZWRVcG9uRXhwaXJhdGlvbj0hMSkscj97b3BhY2l0eToxLG1peDoxLWR9OntvcGFjaXR5OmQsbWl4OjB9fXJldHVybntvcGFjaXR5OjEsbWl4OjB9fWZ1bmN0aW9uIEVyKGUscixuKXt2YXIgaT1lLmNvbnRleHQsbz1pLmdsO2kubGluZVdpZHRoLnNldCgxKmEuZGV2aWNlUGl4ZWxSYXRpbyk7dmFyIHM9bi5wb3NNYXRyaXgsbD1lLnVzZVByb2dyYW0oXCJkZWJ1Z1wiKTtpLnNldERlcHRoTW9kZShxdC5kaXNhYmxlZCksaS5zZXRTdGVuY2lsTW9kZShIdC5kaXNhYmxlZCksaS5zZXRDb2xvck1vZGUoZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpLG8udW5pZm9ybU1hdHJpeDRmdihsLnVuaWZvcm1zLnVfbWF0cml4LCExLHMpLG8udW5pZm9ybTRmKGwudW5pZm9ybXMudV9jb2xvciwxLDAsMCwxKSxlLmRlYnVnVkFPLmJpbmQoaSxsLGUuZGVidWdCdWZmZXIsW10pLG8uZHJhd0FycmF5cyhvLkxJTkVfU1RSSVAsMCxlLmRlYnVnQnVmZmVyLmxlbmd0aCk7Zm9yKHZhciBjPWZ1bmN0aW9uKHQsZSxyLG4pe249bnx8MTt2YXIgaSxhLG8scyxsLGMsdSxoLGY9W107Zm9yKGk9MCxhPXQubGVuZ3RoO2k8YTtpKyspaWYobD1Dclt0W2ldXSl7Zm9yKGg9bnVsbCxvPTAscz1sWzFdLmxlbmd0aDtvPHM7bys9MiktMT09PWxbMV1bb10mJi0xPT09bFsxXVtvKzFdP2g9bnVsbDooYz1lK2xbMV1bb10qbix1PTIwMC1sWzFdW28rMV0qbixoJiZmLnB1c2goaC54LGgueSxjLHUpLGg9e3g6Yyx5OnV9KTtlKz1sWzBdKm59cmV0dXJuIGZ9KG4udG9TdHJpbmcoKSw1MCwwLDUpLHU9bmV3IHQuUG9zQXJyYXksaD0wO2g8Yy5sZW5ndGg7aCs9Mil1LmVtcGxhY2VCYWNrKGNbaF0sY1toKzFdKTt2YXIgZj1pLmNyZWF0ZVZlcnRleEJ1ZmZlcih1LEtlLm1lbWJlcnMpOyhuZXcgUSkuYmluZChpLGwsZixbXSksby51bmlmb3JtNGYobC51bmlmb3Jtcy51X2NvbG9yLDEsMSwxLDEpO2Zvcih2YXIgcD1yLmdldFRpbGUobikudGlsZVNpemUsZD10LmRlZmF1bHQkOC8oTWF0aC5wb3coMixlLnRyYW5zZm9ybS56b29tLW4ub3ZlcnNjYWxlZFopKnApLGc9W1stMSwtMV0sWy0xLDFdLFsxLC0xXSxbMSwxXV0sdj0wO3Y8Zy5sZW5ndGg7disrKXt2YXIgbT1nW3ZdO28udW5pZm9ybU1hdHJpeDRmdihsLnVuaWZvcm1zLnVfbWF0cml4LCExLHQubWF0NC50cmFuc2xhdGUoW10scyxbZCptWzBdLGQqbVsxXSwwXSkpLG8uZHJhd0FycmF5cyhvLkxJTkVTLDAsZi5sZW5ndGgpfW8udW5pZm9ybTRmKGwudW5pZm9ybXMudV9jb2xvciwwLDAsMCwxKSxvLnVuaWZvcm1NYXRyaXg0ZnYobC51bmlmb3Jtcy51X21hdHJpeCwhMSxzKSxvLmRyYXdBcnJheXMoby5MSU5FUywwLGYubGVuZ3RoKX12YXIgQ3I9e1wiIFwiOlsxNixbXV0sXCIhXCI6WzEwLFs1LDIxLDUsNywtMSwtMSw1LDIsNCwxLDUsMCw2LDEsNSwyXV0sJ1wiJzpbMTYsWzQsMjEsNCwxNCwtMSwtMSwxMiwyMSwxMiwxNF1dLFwiI1wiOlsyMSxbMTEsMjUsNCwtNywtMSwtMSwxNywyNSwxMCwtNywtMSwtMSw0LDEyLDE4LDEyLC0xLC0xLDMsNiwxNyw2XV0sJDpbMjAsWzgsMjUsOCwtNCwtMSwtMSwxMiwyNSwxMiwtNCwtMSwtMSwxNywxOCwxNSwyMCwxMiwyMSw4LDIxLDUsMjAsMywxOCwzLDE2LDQsMTQsNSwxMyw3LDEyLDEzLDEwLDE1LDksMTYsOCwxNyw2LDE3LDMsMTUsMSwxMiwwLDgsMCw1LDEsMywzXV0sXCIlXCI6WzI0LFsyMSwyMSwzLDAsLTEsLTEsOCwyMSwxMCwxOSwxMCwxNyw5LDE1LDcsMTQsNSwxNCwzLDE2LDMsMTgsNCwyMCw2LDIxLDgsMjEsMTAsMjAsMTMsMTksMTYsMTksMTksMjAsMjEsMjEsLTEsLTEsMTcsNywxNSw2LDE0LDQsMTQsMiwxNiwwLDE4LDAsMjAsMSwyMSwzLDIxLDUsMTksNywxNyw3XV0sXCImXCI6WzI2LFsyMywxMiwyMywxMywyMiwxNCwyMSwxNCwyMCwxMywxOSwxMSwxNyw2LDE1LDMsMTMsMSwxMSwwLDcsMCw1LDEsNCwyLDMsNCwzLDYsNCw4LDUsOSwxMiwxMywxMywxNCwxNCwxNiwxNCwxOCwxMywyMCwxMSwyMSw5LDIwLDgsMTgsOCwxNiw5LDEzLDExLDEwLDE2LDMsMTgsMSwyMCwwLDIyLDAsMjMsMSwyMywyXV0sXCInXCI6WzEwLFs1LDE5LDQsMjAsNSwyMSw2LDIwLDYsMTgsNSwxNiw0LDE1XV0sXCIoXCI6WzE0LFsxMSwyNSw5LDIzLDcsMjAsNSwxNiw0LDExLDQsNyw1LDIsNywtMiw5LC01LDExLC03XV0sXCIpXCI6WzE0LFszLDI1LDUsMjMsNywyMCw5LDE2LDEwLDExLDEwLDcsOSwyLDcsLTIsNSwtNSwzLC03XV0sXCIqXCI6WzE2LFs4LDIxLDgsOSwtMSwtMSwzLDE4LDEzLDEyLC0xLC0xLDEzLDE4LDMsMTJdXSxcIitcIjpbMjYsWzEzLDE4LDEzLDAsLTEsLTEsNCw5LDIyLDldXSxcIixcIjpbMTAsWzYsMSw1LDAsNCwxLDUsMiw2LDEsNiwtMSw1LC0zLDQsLTRdXSxcIi1cIjpbMjYsWzQsOSwyMiw5XV0sXCIuXCI6WzEwLFs1LDIsNCwxLDUsMCw2LDEsNSwyXV0sXCIvXCI6WzIyLFsyMCwyNSwyLC03XV0sMDpbMjAsWzksMjEsNiwyMCw0LDE3LDMsMTIsMyw5LDQsNCw2LDEsOSwwLDExLDAsMTQsMSwxNiw0LDE3LDksMTcsMTIsMTYsMTcsMTQsMjAsMTEsMjEsOSwyMV1dLDE6WzIwLFs2LDE3LDgsMTgsMTEsMjEsMTEsMF1dLDI6WzIwLFs0LDE2LDQsMTcsNSwxOSw2LDIwLDgsMjEsMTIsMjEsMTQsMjAsMTUsMTksMTYsMTcsMTYsMTUsMTUsMTMsMTMsMTAsMywwLDE3LDBdXSwzOlsyMCxbNSwyMSwxNiwyMSwxMCwxMywxMywxMywxNSwxMiwxNiwxMSwxNyw4LDE3LDYsMTYsMywxNCwxLDExLDAsOCwwLDUsMSw0LDIsMyw0XV0sNDpbMjAsWzEzLDIxLDMsNywxOCw3LC0xLC0xLDEzLDIxLDEzLDBdXSw1OlsyMCxbMTUsMjEsNSwyMSw0LDEyLDUsMTMsOCwxNCwxMSwxNCwxNCwxMywxNiwxMSwxNyw4LDE3LDYsMTYsMywxNCwxLDExLDAsOCwwLDUsMSw0LDIsMyw0XV0sNjpbMjAsWzE2LDE4LDE1LDIwLDEyLDIxLDEwLDIxLDcsMjAsNSwxNyw0LDEyLDQsNyw1LDMsNywxLDEwLDAsMTEsMCwxNCwxLDE2LDMsMTcsNiwxNyw3LDE2LDEwLDE0LDEyLDExLDEzLDEwLDEzLDcsMTIsNSwxMCw0LDddXSw3OlsyMCxbMTcsMjEsNywwLC0xLC0xLDMsMjEsMTcsMjFdXSw4OlsyMCxbOCwyMSw1LDIwLDQsMTgsNCwxNiw1LDE0LDcsMTMsMTEsMTIsMTQsMTEsMTYsOSwxNyw3LDE3LDQsMTYsMiwxNSwxLDEyLDAsOCwwLDUsMSw0LDIsMyw0LDMsNyw0LDksNiwxMSw5LDEyLDEzLDEzLDE1LDE0LDE2LDE2LDE2LDE4LDE1LDIwLDEyLDIxLDgsMjFdXSw5OlsyMCxbMTYsMTQsMTUsMTEsMTMsOSwxMCw4LDksOCw2LDksNCwxMSwzLDE0LDMsMTUsNCwxOCw2LDIwLDksMjEsMTAsMjEsMTMsMjAsMTUsMTgsMTYsMTQsMTYsOSwxNSw0LDEzLDEsMTAsMCw4LDAsNSwxLDQsM11dLFwiOlwiOlsxMCxbNSwxNCw0LDEzLDUsMTIsNiwxMyw1LDE0LC0xLC0xLDUsMiw0LDEsNSwwLDYsMSw1LDJdXSxcIjtcIjpbMTAsWzUsMTQsNCwxMyw1LDEyLDYsMTMsNSwxNCwtMSwtMSw2LDEsNSwwLDQsMSw1LDIsNiwxLDYsLTEsNSwtMyw0LC00XV0sXCI8XCI6WzI0LFsyMCwxOCw0LDksMjAsMF1dLFwiPVwiOlsyNixbNCwxMiwyMiwxMiwtMSwtMSw0LDYsMjIsNl1dLFwiPlwiOlsyNCxbNCwxOCwyMCw5LDQsMF1dLFwiP1wiOlsxOCxbMywxNiwzLDE3LDQsMTksNSwyMCw3LDIxLDExLDIxLDEzLDIwLDE0LDE5LDE1LDE3LDE1LDE1LDE0LDEzLDEzLDEyLDksMTAsOSw3LC0xLC0xLDksMiw4LDEsOSwwLDEwLDEsOSwyXV0sXCJAXCI6WzI3LFsxOCwxMywxNywxNSwxNSwxNiwxMiwxNiwxMCwxNSw5LDE0LDgsMTEsOCw4LDksNiwxMSw1LDE0LDUsMTYsNiwxNyw4LC0xLC0xLDEyLDE2LDEwLDE0LDksMTEsOSw4LDEwLDYsMTEsNSwtMSwtMSwxOCwxNiwxNyw4LDE3LDYsMTksNSwyMSw1LDIzLDcsMjQsMTAsMjQsMTIsMjMsMTUsMjIsMTcsMjAsMTksMTgsMjAsMTUsMjEsMTIsMjEsOSwyMCw3LDE5LDUsMTcsNCwxNSwzLDEyLDMsOSw0LDYsNSw0LDcsMiw5LDEsMTIsMCwxNSwwLDE4LDEsMjAsMiwyMSwzLC0xLC0xLDE5LDE2LDE4LDgsMTgsNiwxOSw1XV0sQTpbMTgsWzksMjEsMSwwLC0xLC0xLDksMjEsMTcsMCwtMSwtMSw0LDcsMTQsN11dLEI6WzIxLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDEzLDIxLDE2LDIwLDE3LDE5LDE4LDE3LDE4LDE1LDE3LDEzLDE2LDEyLDEzLDExLC0xLC0xLDQsMTEsMTMsMTEsMTYsMTAsMTcsOSwxOCw3LDE4LDQsMTcsMiwxNiwxLDEzLDAsNCwwXV0sQzpbMjEsWzE4LDE2LDE3LDE4LDE1LDIwLDEzLDIxLDksMjEsNywyMCw1LDE4LDQsMTYsMywxMywzLDgsNCw1LDUsMyw3LDEsOSwwLDEzLDAsMTUsMSwxNywzLDE4LDVdXSxEOlsyMSxbNCwyMSw0LDAsLTEsLTEsNCwyMSwxMSwyMSwxNCwyMCwxNiwxOCwxNywxNiwxOCwxMywxOCw4LDE3LDUsMTYsMywxNCwxLDExLDAsNCwwXV0sRTpbMTksWzQsMjEsNCwwLC0xLC0xLDQsMjEsMTcsMjEsLTEsLTEsNCwxMSwxMiwxMSwtMSwtMSw0LDAsMTcsMF1dLEY6WzE4LFs0LDIxLDQsMCwtMSwtMSw0LDIxLDE3LDIxLC0xLC0xLDQsMTEsMTIsMTFdXSxHOlsyMSxbMTgsMTYsMTcsMTgsMTUsMjAsMTMsMjEsOSwyMSw3LDIwLDUsMTgsNCwxNiwzLDEzLDMsOCw0LDUsNSwzLDcsMSw5LDAsMTMsMCwxNSwxLDE3LDMsMTgsNSwxOCw4LC0xLC0xLDEzLDgsMTgsOF1dLEg6WzIyLFs0LDIxLDQsMCwtMSwtMSwxOCwyMSwxOCwwLC0xLC0xLDQsMTEsMTgsMTFdXSxJOls4LFs0LDIxLDQsMF1dLEo6WzE2LFsxMiwyMSwxMiw1LDExLDIsMTAsMSw4LDAsNiwwLDQsMSwzLDIsMiw1LDIsN11dLEs6WzIxLFs0LDIxLDQsMCwtMSwtMSwxOCwyMSw0LDcsLTEsLTEsOSwxMiwxOCwwXV0sTDpbMTcsWzQsMjEsNCwwLC0xLC0xLDQsMCwxNiwwXV0sTTpbMjQsWzQsMjEsNCwwLC0xLC0xLDQsMjEsMTIsMCwtMSwtMSwyMCwyMSwxMiwwLC0xLC0xLDIwLDIxLDIwLDBdXSxOOlsyMixbNCwyMSw0LDAsLTEsLTEsNCwyMSwxOCwwLC0xLC0xLDE4LDIxLDE4LDBdXSxPOlsyMixbOSwyMSw3LDIwLDUsMTgsNCwxNiwzLDEzLDMsOCw0LDUsNSwzLDcsMSw5LDAsMTMsMCwxNSwxLDE3LDMsMTgsNSwxOSw4LDE5LDEzLDE4LDE2LDE3LDE4LDE1LDIwLDEzLDIxLDksMjFdXSxQOlsyMSxbNCwyMSw0LDAsLTEsLTEsNCwyMSwxMywyMSwxNiwyMCwxNywxOSwxOCwxNywxOCwxNCwxNywxMiwxNiwxMSwxMywxMCw0LDEwXV0sUTpbMjIsWzksMjEsNywyMCw1LDE4LDQsMTYsMywxMywzLDgsNCw1LDUsMyw3LDEsOSwwLDEzLDAsMTUsMSwxNywzLDE4LDUsMTksOCwxOSwxMywxOCwxNiwxNywxOCwxNSwyMCwxMywyMSw5LDIxLC0xLC0xLDEyLDQsMTgsLTJdXSxSOlsyMSxbNCwyMSw0LDAsLTEsLTEsNCwyMSwxMywyMSwxNiwyMCwxNywxOSwxOCwxNywxOCwxNSwxNywxMywxNiwxMiwxMywxMSw0LDExLC0xLC0xLDExLDExLDE4LDBdXSxTOlsyMCxbMTcsMTgsMTUsMjAsMTIsMjEsOCwyMSw1LDIwLDMsMTgsMywxNiw0LDE0LDUsMTMsNywxMiwxMywxMCwxNSw5LDE2LDgsMTcsNiwxNywzLDE1LDEsMTIsMCw4LDAsNSwxLDMsM11dLFQ6WzE2LFs4LDIxLDgsMCwtMSwtMSwxLDIxLDE1LDIxXV0sVTpbMjIsWzQsMjEsNCw2LDUsMyw3LDEsMTAsMCwxMiwwLDE1LDEsMTcsMywxOCw2LDE4LDIxXV0sVjpbMTgsWzEsMjEsOSwwLC0xLC0xLDE3LDIxLDksMF1dLFc6WzI0LFsyLDIxLDcsMCwtMSwtMSwxMiwyMSw3LDAsLTEsLTEsMTIsMjEsMTcsMCwtMSwtMSwyMiwyMSwxNywwXV0sWDpbMjAsWzMsMjEsMTcsMCwtMSwtMSwxNywyMSwzLDBdXSxZOlsxOCxbMSwyMSw5LDExLDksMCwtMSwtMSwxNywyMSw5LDExXV0sWjpbMjAsWzE3LDIxLDMsMCwtMSwtMSwzLDIxLDE3LDIxLC0xLC0xLDMsMCwxNywwXV0sXCJbXCI6WzE0LFs0LDI1LDQsLTcsLTEsLTEsNSwyNSw1LC03LC0xLC0xLDQsMjUsMTEsMjUsLTEsLTEsNCwtNywxMSwtN11dLFwiXFxcXFwiOlsxNCxbMCwyMSwxNCwtM11dLFwiXVwiOlsxNCxbOSwyNSw5LC03LC0xLC0xLDEwLDI1LDEwLC03LC0xLC0xLDMsMjUsMTAsMjUsLTEsLTEsMywtNywxMCwtN11dLFwiXlwiOlsxNixbNiwxNSw4LDE4LDEwLDE1LC0xLC0xLDMsMTIsOCwxNywxMywxMiwtMSwtMSw4LDE3LDgsMF1dLF86WzE2LFswLC0yLDE2LC0yXV0sXCJgXCI6WzEwLFs2LDIxLDUsMjAsNCwxOCw0LDE2LDUsMTUsNiwxNiw1LDE3XV0sYTpbMTksWzE1LDE0LDE1LDAsLTEsLTEsMTUsMTEsMTMsMTMsMTEsMTQsOCwxNCw2LDEzLDQsMTEsMyw4LDMsNiw0LDMsNiwxLDgsMCwxMSwwLDEzLDEsMTUsM11dLGI6WzE5LFs0LDIxLDQsMCwtMSwtMSw0LDExLDYsMTMsOCwxNCwxMSwxNCwxMywxMywxNSwxMSwxNiw4LDE2LDYsMTUsMywxMywxLDExLDAsOCwwLDYsMSw0LDNdXSxjOlsxOCxbMTUsMTEsMTMsMTMsMTEsMTQsOCwxNCw2LDEzLDQsMTEsMyw4LDMsNiw0LDMsNiwxLDgsMCwxMSwwLDEzLDEsMTUsM11dLGQ6WzE5LFsxNSwyMSwxNSwwLC0xLC0xLDE1LDExLDEzLDEzLDExLDE0LDgsMTQsNiwxMyw0LDExLDMsOCwzLDYsNCwzLDYsMSw4LDAsMTEsMCwxMywxLDE1LDNdXSxlOlsxOCxbMyw4LDE1LDgsMTUsMTAsMTQsMTIsMTMsMTMsMTEsMTQsOCwxNCw2LDEzLDQsMTEsMyw4LDMsNiw0LDMsNiwxLDgsMCwxMSwwLDEzLDEsMTUsM11dLGY6WzEyLFsxMCwyMSw4LDIxLDYsMjAsNSwxNyw1LDAsLTEsLTEsMiwxNCw5LDE0XV0sZzpbMTksWzE1LDE0LDE1LC0yLDE0LC01LDEzLC02LDExLC03LDgsLTcsNiwtNiwtMSwtMSwxNSwxMSwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0saDpbMTksWzQsMjEsNCwwLC0xLC0xLDQsMTAsNywxMyw5LDE0LDEyLDE0LDE0LDEzLDE1LDEwLDE1LDBdXSxpOls4LFszLDIxLDQsMjAsNSwyMSw0LDIyLDMsMjEsLTEsLTEsNCwxNCw0LDBdXSxqOlsxMCxbNSwyMSw2LDIwLDcsMjEsNiwyMiw1LDIxLC0xLC0xLDYsMTQsNiwtMyw1LC02LDMsLTcsMSwtN11dLGs6WzE3LFs0LDIxLDQsMCwtMSwtMSwxNCwxNCw0LDQsLTEsLTEsOCw4LDE1LDBdXSxsOls4LFs0LDIxLDQsMF1dLG06WzMwLFs0LDE0LDQsMCwtMSwtMSw0LDEwLDcsMTMsOSwxNCwxMiwxNCwxNCwxMywxNSwxMCwxNSwwLC0xLC0xLDE1LDEwLDE4LDEzLDIwLDE0LDIzLDE0LDI1LDEzLDI2LDEwLDI2LDBdXSxuOlsxOSxbNCwxNCw0LDAsLTEsLTEsNCwxMCw3LDEzLDksMTQsMTIsMTQsMTQsMTMsMTUsMTAsMTUsMF1dLG86WzE5LFs4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzLDE2LDYsMTYsOCwxNSwxMSwxMywxMywxMSwxNCw4LDE0XV0scDpbMTksWzQsMTQsNCwtNywtMSwtMSw0LDExLDYsMTMsOCwxNCwxMSwxNCwxMywxMywxNSwxMSwxNiw4LDE2LDYsMTUsMywxMywxLDExLDAsOCwwLDYsMSw0LDNdXSxxOlsxOSxbMTUsMTQsMTUsLTcsLTEsLTEsMTUsMTEsMTMsMTMsMTEsMTQsOCwxNCw2LDEzLDQsMTEsMyw4LDMsNiw0LDMsNiwxLDgsMCwxMSwwLDEzLDEsMTUsM11dLHI6WzEzLFs0LDE0LDQsMCwtMSwtMSw0LDgsNSwxMSw3LDEzLDksMTQsMTIsMTRdXSxzOlsxNyxbMTQsMTEsMTMsMTMsMTAsMTQsNywxNCw0LDEzLDMsMTEsNCw5LDYsOCwxMSw3LDEzLDYsMTQsNCwxNCwzLDEzLDEsMTAsMCw3LDAsNCwxLDMsM11dLHQ6WzEyLFs1LDIxLDUsNCw2LDEsOCwwLDEwLDAsLTEsLTEsMiwxNCw5LDE0XV0sdTpbMTksWzQsMTQsNCw0LDUsMSw3LDAsMTAsMCwxMiwxLDE1LDQsLTEsLTEsMTUsMTQsMTUsMF1dLHY6WzE2LFsyLDE0LDgsMCwtMSwtMSwxNCwxNCw4LDBdXSx3OlsyMixbMywxNCw3LDAsLTEsLTEsMTEsMTQsNywwLC0xLC0xLDExLDE0LDE1LDAsLTEsLTEsMTksMTQsMTUsMF1dLHg6WzE3LFszLDE0LDE0LDAsLTEsLTEsMTQsMTQsMywwXV0seTpbMTYsWzIsMTQsOCwwLC0xLC0xLDE0LDE0LDgsMCw2LC00LDQsLTYsMiwtNywxLC03XV0sejpbMTcsWzE0LDE0LDMsMCwtMSwtMSwzLDE0LDE0LDE0LC0xLC0xLDMsMCwxNCwwXV0sXCJ7XCI6WzE0LFs5LDI1LDcsMjQsNiwyMyw1LDIxLDUsMTksNiwxNyw3LDE2LDgsMTQsOCwxMiw2LDEwLC0xLC0xLDcsMjQsNiwyMiw2LDIwLDcsMTgsOCwxNyw5LDE1LDksMTMsOCwxMSw0LDksOCw3LDksNSw5LDMsOCwxLDcsMCw2LC0yLDYsLTQsNywtNiwtMSwtMSw2LDgsOCw2LDgsNCw3LDIsNiwxLDUsLTEsNSwtMyw2LC01LDcsLTYsOSwtN11dLFwifFwiOls4LFs0LDI1LDQsLTddXSxcIn1cIjpbMTQsWzUsMjUsNywyNCw4LDIzLDksMjEsOSwxOSw4LDE3LDcsMTYsNiwxNCw2LDEyLDgsMTAsLTEsLTEsNywyNCw4LDIyLDgsMjAsNywxOCw2LDE3LDUsMTUsNSwxMyw2LDExLDEwLDksNiw3LDUsNSw1LDMsNiwxLDcsMCw4LC0yLDgsLTQsNywtNiwtMSwtMSw4LDgsNiw2LDYsNCw3LDIsOCwxLDksLTEsOSwtMyw4LC01LDcsLTYsNSwtN11dLFwiflwiOlsyNCxbMyw2LDMsOCw0LDExLDYsMTIsOCwxMiwxMCwxMSwxNCw4LDE2LDcsMTgsNywyMCw4LDIxLDEwLC0xLC0xLDMsOCw0LDEwLDYsMTEsOCwxMSwxMCwxMCwxNCw3LDE2LDYsMTgsNiwyMCw3LDIxLDEwLDIxLDEyXV19LExyPXtzeW1ib2w6ZnVuY3Rpb24odCxlLHIsbil7aWYoXCJ0cmFuc2x1Y2VudFwiPT09dC5yZW5kZXJQYXNzKXt2YXIgaT10LmNvbnRleHQ7aS5zZXRTdGVuY2lsTW9kZShIdC5kaXNhYmxlZCksaS5zZXRDb2xvck1vZGUodC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpLDAhPT1yLnBhaW50LmdldChcImljb24tb3BhY2l0eVwiKS5jb25zdGFudE9yKDEpJiZjcih0LGUscixuLCExLHIucGFpbnQuZ2V0KFwiaWNvbi10cmFuc2xhdGVcIiksci5wYWludC5nZXQoXCJpY29uLXRyYW5zbGF0ZS1hbmNob3JcIiksci5sYXlvdXQuZ2V0KFwiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnRcIiksci5sYXlvdXQuZ2V0KFwiaWNvbi1waXRjaC1hbGlnbm1lbnRcIiksci5sYXlvdXQuZ2V0KFwiaWNvbi1rZWVwLXVwcmlnaHRcIikpLDAhPT1yLnBhaW50LmdldChcInRleHQtb3BhY2l0eVwiKS5jb25zdGFudE9yKDEpJiZjcih0LGUscixuLCEwLHIucGFpbnQuZ2V0KFwidGV4dC10cmFuc2xhdGVcIiksci5wYWludC5nZXQoXCJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3JcIiksci5sYXlvdXQuZ2V0KFwidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnRcIiksci5sYXlvdXQuZ2V0KFwidGV4dC1waXRjaC1hbGlnbm1lbnRcIiksci5sYXlvdXQuZ2V0KFwidGV4dC1rZWVwLXVwcmlnaHRcIikpLGUubWFwLnNob3dDb2xsaXNpb25Cb3hlcyYmZnVuY3Rpb24odCxlLHIsbil7b3IodCxlLHIsbiwhMSksb3IodCxlLHIsbiwhMCl9KHQsZSxyLG4pfX0sY2lyY2xlOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKFwidHJhbnNsdWNlbnRcIj09PXQucmVuZGVyUGFzcyl7dmFyIGk9ci5wYWludC5nZXQoXCJjaXJjbGUtb3BhY2l0eVwiKSxhPXIucGFpbnQuZ2V0KFwiY2lyY2xlLXN0cm9rZS13aWR0aFwiKSxvPXIucGFpbnQuZ2V0KFwiY2lyY2xlLXN0cm9rZS1vcGFjaXR5XCIpO2lmKDAhPT1pLmNvbnN0YW50T3IoMSl8fDAhPT1hLmNvbnN0YW50T3IoMSkmJjAhPT1vLmNvbnN0YW50T3IoMSkpe3ZhciBzPXQuY29udGV4dCxsPXMuZ2w7cy5zZXREZXB0aE1vZGUodC5kZXB0aE1vZGVGb3JTdWJsYXllcigwLHF0LlJlYWRPbmx5KSkscy5zZXRTdGVuY2lsTW9kZShIdC5kaXNhYmxlZCkscy5zZXRDb2xvck1vZGUodC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpO2Zvcih2YXIgYz0hMCx1PTA7dTxuLmxlbmd0aDt1Kyspe3ZhciBoPW5bdV0sZj1lLmdldFRpbGUoaCkscD1mLmdldEJ1Y2tldChyKTtpZihwKXt2YXIgZD10LmNvbnRleHQucHJvZ3JhbS5nZXQoKSxnPXAucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChyLmlkKSx2PXQudXNlUHJvZ3JhbShcImNpcmNsZVwiLGcpO2lmKChjfHx2LnByb2dyYW0hPT1kKSYmKGcuc2V0VW5pZm9ybXMocyx2LHIucGFpbnQse3pvb206dC50cmFuc2Zvcm0uem9vbX0pLGM9ITEpLGwudW5pZm9ybTFmKHYudW5pZm9ybXMudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlLHQudHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UpLGwudW5pZm9ybTFpKHYudW5pZm9ybXMudV9zY2FsZV93aXRoX21hcCxcIm1hcFwiPT09ci5wYWludC5nZXQoXCJjaXJjbGUtcGl0Y2gtc2NhbGVcIik/MTowKSxcIm1hcFwiPT09ci5wYWludC5nZXQoXCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50XCIpKXtsLnVuaWZvcm0xaSh2LnVuaWZvcm1zLnVfcGl0Y2hfd2l0aF9tYXAsMSk7dmFyIG09TWUoZiwxLHQudHJhbnNmb3JtLnpvb20pO2wudW5pZm9ybTJmKHYudW5pZm9ybXMudV9leHRydWRlX3NjYWxlLG0sbSl9ZWxzZSBsLnVuaWZvcm0xaSh2LnVuaWZvcm1zLnVfcGl0Y2hfd2l0aF9tYXAsMCksbC51bmlmb3JtMmZ2KHYudW5pZm9ybXMudV9leHRydWRlX3NjYWxlLHQudHJhbnNmb3JtLnBpeGVsc1RvR0xVbml0cyk7bC51bmlmb3JtTWF0cml4NGZ2KHYudW5pZm9ybXMudV9tYXRyaXgsITEsdC50cmFuc2xhdGVQb3NNYXRyaXgoaC5wb3NNYXRyaXgsZixyLnBhaW50LmdldChcImNpcmNsZS10cmFuc2xhdGVcIiksci5wYWludC5nZXQoXCJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvclwiKSkpLHYuZHJhdyhzLGwuVFJJQU5HTEVTLHIuaWQscC5sYXlvdXRWZXJ0ZXhCdWZmZXIscC5pbmRleEJ1ZmZlcixwLnNlZ21lbnRzLGcpfX19fX0saGVhdG1hcDpmdW5jdGlvbihlLHIsbixpKXtpZigwIT09bi5wYWludC5nZXQoXCJoZWF0bWFwLW9wYWNpdHlcIikpaWYoXCJvZmZzY3JlZW5cIj09PWUucmVuZGVyUGFzcyl7dmFyIGE9ZS5jb250ZXh0LG89YS5nbDthLnNldERlcHRoTW9kZShlLmRlcHRoTW9kZUZvclN1YmxheWVyKDAscXQuUmVhZE9ubHkpKSxhLnNldFN0ZW5jaWxNb2RlKEh0LmRpc2FibGVkKSxmdW5jdGlvbih0LGUscil7dmFyIG49dC5nbDt0LmFjdGl2ZVRleHR1cmUuc2V0KG4uVEVYVFVSRTEpLHQudmlld3BvcnQuc2V0KFswLDAsZS53aWR0aC80LGUuaGVpZ2h0LzRdKTt2YXIgaT1yLmhlYXRtYXBGYm87aWYoaSluLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCxpLmNvbG9yQXR0YWNobWVudC5nZXQoKSksdC5iaW5kRnJhbWVidWZmZXIuc2V0KGkuZnJhbWVidWZmZXIpO2Vsc2V7dmFyIGE9bi5jcmVhdGVUZXh0dXJlKCk7bi5iaW5kVGV4dHVyZShuLlRFWFRVUkVfMkQsYSksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9TLG4uQ0xBTVBfVE9fRURHRSksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9ULG4uQ0xBTVBfVE9fRURHRSksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfTUlOX0ZJTFRFUixuLkxJTkVBUiksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfTUFHX0ZJTFRFUixuLkxJTkVBUiksaT1yLmhlYXRtYXBGYm89dC5jcmVhdGVGcmFtZWJ1ZmZlcihlLndpZHRoLzQsZS5oZWlnaHQvNCksZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgYT1lLmdsO2EudGV4SW1hZ2UyRChhLlRFWFRVUkVfMkQsMCxhLlJHQkEsci53aWR0aC80LHIuaGVpZ2h0LzQsMCxhLlJHQkEsZS5leHRUZXh0dXJlSGFsZkZsb2F0P2UuZXh0VGV4dHVyZUhhbGZGbG9hdC5IQUxGX0ZMT0FUX09FUzphLlVOU0lHTkVEX0JZVEUsbnVsbCksaS5jb2xvckF0dGFjaG1lbnQuc2V0KG4pLGUuZXh0VGV4dHVyZUhhbGZGbG9hdCYmYS5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGEuRlJBTUVCVUZGRVIpIT09YS5GUkFNRUJVRkZFUl9DT01QTEVURSYmKGUuZXh0VGV4dHVyZUhhbGZGbG9hdD1udWxsLGkuY29sb3JBdHRhY2htZW50LnNldERpcnR5KCksdChlLHIsbixpKSl9KHQsZSxhLGkpfX0oYSxlLG4pLGEuY2xlYXIoe2NvbG9yOnQuZGVmYXVsdCQ2LnRyYW5zcGFyZW50fSksYS5zZXRDb2xvck1vZGUobmV3IEd0KFtvLk9ORSxvLk9ORV0sdC5kZWZhdWx0JDYudHJhbnNwYXJlbnQsWyEwLCEwLCEwLCEwXSkpO2Zvcih2YXIgcz0hMCxsPTA7bDxpLmxlbmd0aDtsKyspe3ZhciBjPWlbbF07aWYoIXIuaGFzUmVuZGVyYWJsZVBhcmVudChjKSl7dmFyIHU9ci5nZXRUaWxlKGMpLGg9dS5nZXRCdWNrZXQobik7aWYoaCl7dmFyIGY9ZS5jb250ZXh0LnByb2dyYW0uZ2V0KCkscD1oLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQobi5pZCksZD1lLnVzZVByb2dyYW0oXCJoZWF0bWFwXCIscCksZz1lLnRyYW5zZm9ybS56b29tOyhzfHxkLnByb2dyYW0hPT1mKSYmKHAuc2V0VW5pZm9ybXMoZS5jb250ZXh0LGQsbi5wYWludCx7em9vbTpnfSkscz0hMSksby51bmlmb3JtMWYoZC51bmlmb3Jtcy51X2V4dHJ1ZGVfc2NhbGUsTWUodSwxLGcpKSxvLnVuaWZvcm0xZihkLnVuaWZvcm1zLnVfaW50ZW5zaXR5LG4ucGFpbnQuZ2V0KFwiaGVhdG1hcC1pbnRlbnNpdHlcIikpLG8udW5pZm9ybU1hdHJpeDRmdihkLnVuaWZvcm1zLnVfbWF0cml4LCExLGMucG9zTWF0cml4KSxkLmRyYXcoYSxvLlRSSUFOR0xFUyxuLmlkLGgubGF5b3V0VmVydGV4QnVmZmVyLGguaW5kZXhCdWZmZXIsaC5zZWdtZW50cyxwKX19fWEudmlld3BvcnQuc2V0KFswLDAsZS53aWR0aCxlLmhlaWdodF0pfWVsc2VcInRyYW5zbHVjZW50XCI9PT1lLnJlbmRlclBhc3MmJihlLmNvbnRleHQuc2V0Q29sb3JNb2RlKGUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKSxmdW5jdGlvbihlLHIpe3ZhciBuPWUuY29udGV4dCxpPW4uZ2wsYT1yLmhlYXRtYXBGYm87aWYoYSl7bi5hY3RpdmVUZXh0dXJlLnNldChpLlRFWFRVUkUwKSxpLmJpbmRUZXh0dXJlKGkuVEVYVFVSRV8yRCxhLmNvbG9yQXR0YWNobWVudC5nZXQoKSksbi5hY3RpdmVUZXh0dXJlLnNldChpLlRFWFRVUkUxKTt2YXIgbz1yLmNvbG9yUmFtcFRleHR1cmU7b3x8KG89ci5jb2xvclJhbXBUZXh0dXJlPW5ldyB6KG4sci5jb2xvclJhbXAsaS5SR0JBKSksby5iaW5kKGkuTElORUFSLGkuQ0xBTVBfVE9fRURHRSksbi5zZXREZXB0aE1vZGUocXQuZGlzYWJsZWQpO3ZhciBzPWUudXNlUHJvZ3JhbShcImhlYXRtYXBUZXh0dXJlXCIpLGw9ci5wYWludC5nZXQoXCJoZWF0bWFwLW9wYWNpdHlcIik7aS51bmlmb3JtMWYocy51bmlmb3Jtcy51X29wYWNpdHksbCksaS51bmlmb3JtMWkocy51bmlmb3Jtcy51X2ltYWdlLDApLGkudW5pZm9ybTFpKHMudW5pZm9ybXMudV9jb2xvcl9yYW1wLDEpO3ZhciBjPXQubWF0NC5jcmVhdGUoKTt0Lm1hdDQub3J0aG8oYywwLGUud2lkdGgsZS5oZWlnaHQsMCwwLDEpLGkudW5pZm9ybU1hdHJpeDRmdihzLnVuaWZvcm1zLnVfbWF0cml4LCExLGMpLGkudW5pZm9ybTJmKHMudW5pZm9ybXMudV93b3JsZCxpLmRyYXdpbmdCdWZmZXJXaWR0aCxpLmRyYXdpbmdCdWZmZXJIZWlnaHQpLGUudmlld3BvcnRWQU8uYmluZChlLmNvbnRleHQscyxlLnZpZXdwb3J0QnVmZmVyLFtdKSxpLmRyYXdBcnJheXMoaS5UUklBTkdMRV9TVFJJUCwwLDQpfX0oZSxuKSl9LGxpbmU6ZnVuY3Rpb24odCxlLHIsbil7aWYoXCJ0cmFuc2x1Y2VudFwiPT09dC5yZW5kZXJQYXNzJiYwIT09ci5wYWludC5nZXQoXCJsaW5lLW9wYWNpdHlcIikuY29uc3RhbnRPcigxKSl7dmFyIGk9dC5jb250ZXh0O2kuc2V0RGVwdGhNb2RlKHQuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCxxdC5SZWFkT25seSkpLGkuc2V0Q29sb3JNb2RlKHQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKTtmb3IodmFyIGEsbz1yLnBhaW50LmdldChcImxpbmUtZGFzaGFycmF5XCIpP1wibGluZVNERlwiOnIucGFpbnQuZ2V0KFwibGluZS1wYXR0ZXJuXCIpP1wibGluZVBhdHRlcm5cIjpyLnBhaW50LmdldChcImxpbmUtZ3JhZGllbnRcIik/XCJsaW5lR3JhZGllbnRcIjpcImxpbmVcIixzPSEwLGw9MCxjPW47bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdLGg9ZS5nZXRUaWxlKHUpLGY9aC5nZXRCdWNrZXQocik7aWYoZil7dmFyIHA9Zi5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KHIuaWQpLGQ9dC5jb250ZXh0LnByb2dyYW0uZ2V0KCksZz10LnVzZVByb2dyYW0obyxwKSx2PXN8fGcucHJvZ3JhbSE9PWQsbT1hIT09aC50aWxlSUQub3ZlcnNjYWxlZFo7diYmcC5zZXRVbmlmb3Jtcyh0LmNvbnRleHQsZyxyLnBhaW50LHt6b29tOnQudHJhbnNmb3JtLnpvb219KSxwcihnLHQsaCxmLHIsdSxwLHYsbSksYT1oLnRpbGVJRC5vdmVyc2NhbGVkWixzPSExfX19fSxmaWxsOmZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPW4ucGFpbnQuZ2V0KFwiZmlsbC1jb2xvclwiKSxvPW4ucGFpbnQuZ2V0KFwiZmlsbC1vcGFjaXR5XCIpO2lmKDAhPT1vLmNvbnN0YW50T3IoMSkpe3ZhciBzPWUuY29udGV4dDtzLnNldENvbG9yTW9kZShlLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSk7dmFyIGw9bi5wYWludC5nZXQoXCJmaWxsLXBhdHRlcm5cIil8fDEhPT1hLmNvbnN0YW50T3IodC5kZWZhdWx0JDYudHJhbnNwYXJlbnQpLmF8fDEhPT1vLmNvbnN0YW50T3IoMCk/XCJ0cmFuc2x1Y2VudFwiOlwib3BhcXVlXCI7ZS5yZW5kZXJQYXNzPT09bCYmKHMuc2V0RGVwdGhNb2RlKGUuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMSxcIm9wYXF1ZVwiPT09ZS5yZW5kZXJQYXNzP3F0LlJlYWRXcml0ZTpxdC5SZWFkT25seSkpLG1yKGUscixuLGkseXIpKSxcInRyYW5zbHVjZW50XCI9PT1lLnJlbmRlclBhc3MmJm4ucGFpbnQuZ2V0KFwiZmlsbC1hbnRpYWxpYXNcIikmJihzLmxpbmVXaWR0aC5zZXQoMikscy5zZXREZXB0aE1vZGUoZS5kZXB0aE1vZGVGb3JTdWJsYXllcihuLmdldFBhaW50UHJvcGVydHkoXCJmaWxsLW91dGxpbmUtY29sb3JcIik/MjowLHF0LlJlYWRPbmx5KSksbXIoZSxyLG4saSx4cikpfX0sXCJmaWxsLWV4dHJ1c2lvblwiOmZ1bmN0aW9uKGUscixuLGkpe2lmKDAhPT1uLnBhaW50LmdldChcImZpbGwtZXh0cnVzaW9uLW9wYWNpdHlcIikpaWYoXCJvZmZzY3JlZW5cIj09PWUucmVuZGVyUGFzcyl7IWZ1bmN0aW9uKGUscil7dmFyIG49ZS5jb250ZXh0LGk9bi5nbCxhPXIudmlld3BvcnRGcmFtZTtpZihlLmRlcHRoUmJvTmVlZHNDbGVhciYmZS5zZXR1cE9mZnNjcmVlbkRlcHRoUmVuZGVyYnVmZmVyKCksIWEpe3ZhciBvPW5ldyB6KG4se3dpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0LGRhdGE6bnVsbH0saS5SR0JBKTtvLmJpbmQoaS5MSU5FQVIsaS5DTEFNUF9UT19FREdFKSwoYT1yLnZpZXdwb3J0RnJhbWU9bi5jcmVhdGVGcmFtZWJ1ZmZlcihlLndpZHRoLGUuaGVpZ2h0KSkuY29sb3JBdHRhY2htZW50LnNldChvLnRleHR1cmUpfW4uYmluZEZyYW1lYnVmZmVyLnNldChhLmZyYW1lYnVmZmVyKSxhLmRlcHRoQXR0YWNobWVudC5zZXQoZS5kZXB0aFJibyksZS5kZXB0aFJib05lZWRzQ2xlYXImJihuLmNsZWFyKHtkZXB0aDoxfSksZS5kZXB0aFJib05lZWRzQ2xlYXI9ITEpLG4uY2xlYXIoe2NvbG9yOnQuZGVmYXVsdCQ2LnRyYW5zcGFyZW50fSksbi5zZXRTdGVuY2lsTW9kZShIdC5kaXNhYmxlZCksbi5zZXREZXB0aE1vZGUobmV3IHF0KGkuTEVRVUFMLHF0LlJlYWRXcml0ZSxbMCwxXSkpLG4uc2V0Q29sb3JNb2RlKGUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKX0oZSxuKTtmb3IodmFyIGE9ITAsbz0wLHM9aTtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb10sYz1yLmdldFRpbGUobCksdT1jLmdldEJ1Y2tldChuKTt1JiYoQXIoZSwwLG4sYyxsLHUsYSksYT0hMSl9fWVsc2VcInRyYW5zbHVjZW50XCI9PT1lLnJlbmRlclBhc3MmJmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS52aWV3cG9ydEZyYW1lO2lmKHIpe3ZhciBuPXQuY29udGV4dCxpPW4uZ2wsYT10LnVzZVByb2dyYW0oXCJleHRydXNpb25UZXh0dXJlXCIpO24uc2V0U3RlbmNpbE1vZGUoSHQuZGlzYWJsZWQpLG4uc2V0RGVwdGhNb2RlKHF0LmRpc2FibGVkKSxuLnNldENvbG9yTW9kZSh0LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSksbi5hY3RpdmVUZXh0dXJlLnNldChpLlRFWFRVUkUwKSxpLmJpbmRUZXh0dXJlKGkuVEVYVFVSRV8yRCxyLmNvbG9yQXR0YWNobWVudC5nZXQoKSksaS51bmlmb3JtMWYoYS51bmlmb3Jtcy51X29wYWNpdHksZS5wYWludC5nZXQoXCJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5XCIpKSxpLnVuaWZvcm0xaShhLnVuaWZvcm1zLnVfaW1hZ2UsMCk7dmFyIG89d3IuY3JlYXRlKCk7d3Iub3J0aG8obywwLHQud2lkdGgsdC5oZWlnaHQsMCwwLDEpLGkudW5pZm9ybU1hdHJpeDRmdihhLnVuaWZvcm1zLnVfbWF0cml4LCExLG8pLGkudW5pZm9ybTJmKGEudW5pZm9ybXMudV93b3JsZCxpLmRyYXdpbmdCdWZmZXJXaWR0aCxpLmRyYXdpbmdCdWZmZXJIZWlnaHQpLHQudmlld3BvcnRWQU8uYmluZChuLGEsdC52aWV3cG9ydEJ1ZmZlcixbXSksaS5kcmF3QXJyYXlzKGkuVFJJQU5HTEVfU1RSSVAsMCw0KX19KGUsbil9LGhpbGxzaGFkZTpmdW5jdGlvbih0LGUscixuKXtpZihcIm9mZnNjcmVlblwiPT09dC5yZW5kZXJQYXNzfHxcInRyYW5zbHVjZW50XCI9PT10LnJlbmRlclBhc3Mpe3ZhciBpPXQuY29udGV4dCxhPWUuZ2V0U291cmNlKCkubWF4em9vbTtpLnNldERlcHRoTW9kZSh0LmRlcHRoTW9kZUZvclN1YmxheWVyKDAscXQuUmVhZE9ubHkpKSxpLnNldFN0ZW5jaWxNb2RlKEh0LmRpc2FibGVkKSxpLnNldENvbG9yTW9kZSh0LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSk7Zm9yKHZhciBvPTAscz1uO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXSxjPWUuZ2V0VGlsZShsKTtjLm5lZWRzSGlsbHNoYWRlUHJlcGFyZSYmXCJvZmZzY3JlZW5cIj09PXQucmVuZGVyUGFzcz9Ncih0LGMsYSk6XCJ0cmFuc2x1Y2VudFwiPT09dC5yZW5kZXJQYXNzJiZUcih0LGMscil9aS52aWV3cG9ydC5zZXQoWzAsMCx0LndpZHRoLHQuaGVpZ2h0XSl9fSxyYXN0ZXI6ZnVuY3Rpb24odCxlLHIsbil7aWYoXCJ0cmFuc2x1Y2VudFwiPT09dC5yZW5kZXJQYXNzJiYwIT09ci5wYWludC5nZXQoXCJyYXN0ZXItb3BhY2l0eVwiKSl7dmFyIGksYSxvPXQuY29udGV4dCxzPW8uZ2wsbD1lLmdldFNvdXJjZSgpLGM9dC51c2VQcm9ncmFtKFwicmFzdGVyXCIpO28uc2V0U3RlbmNpbE1vZGUoSHQuZGlzYWJsZWQpLG8uc2V0Q29sb3JNb2RlKHQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKSxzLnVuaWZvcm0xZihjLnVuaWZvcm1zLnVfYnJpZ2h0bmVzc19sb3csci5wYWludC5nZXQoXCJyYXN0ZXItYnJpZ2h0bmVzcy1taW5cIikpLHMudW5pZm9ybTFmKGMudW5pZm9ybXMudV9icmlnaHRuZXNzX2hpZ2gsci5wYWludC5nZXQoXCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXhcIikpLHMudW5pZm9ybTFmKGMudW5pZm9ybXMudV9zYXR1cmF0aW9uX2ZhY3RvciwoaT1yLnBhaW50LmdldChcInJhc3Rlci1zYXR1cmF0aW9uXCIpKT4wPzEtMS8oMS4wMDEtaSk6LWkpLHMudW5pZm9ybTFmKGMudW5pZm9ybXMudV9jb250cmFzdF9mYWN0b3IsKGE9ci5wYWludC5nZXQoXCJyYXN0ZXItY29udHJhc3RcIikpPjA/MS8oMS1hKToxK2EpLHMudW5pZm9ybTNmdihjLnVuaWZvcm1zLnVfc3Bpbl93ZWlnaHRzLGZ1bmN0aW9uKHQpe3QqPU1hdGguUEkvMTgwO3ZhciBlPU1hdGguc2luKHQpLHI9TWF0aC5jb3ModCk7cmV0dXJuWygyKnIrMSkvMywoLU1hdGguc3FydCgzKSplLXIrMSkvMywoTWF0aC5zcXJ0KDMpKmUtcisxKS8zXX0oci5wYWludC5nZXQoXCJyYXN0ZXItaHVlLXJvdGF0ZVwiKSkpLHMudW5pZm9ybTFmKGMudW5pZm9ybXMudV9idWZmZXJfc2NhbGUsMSkscy51bmlmb3JtMWkoYy51bmlmb3Jtcy51X2ltYWdlMCwwKSxzLnVuaWZvcm0xaShjLnVuaWZvcm1zLnVfaW1hZ2UxLDEpO2Zvcih2YXIgdT1uLmxlbmd0aCYmblswXS5vdmVyc2NhbGVkWixoPTAsZj1uO2g8Zi5sZW5ndGg7aCs9MSl7dmFyIHA9ZltoXTtvLnNldERlcHRoTW9kZSh0LmRlcHRoTW9kZUZvclN1YmxheWVyKHAub3ZlcnNjYWxlZFotdSwxPT09ci5wYWludC5nZXQoXCJyYXN0ZXItb3BhY2l0eVwiKT9xdC5SZWFkV3JpdGU6cXQuUmVhZE9ubHkscy5MRVNTKSk7dmFyIGQ9ZS5nZXRUaWxlKHApLGc9dC50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KHAudG9VbndyYXBwZWQoKSwhMCk7ZC5yZWdpc3RlckZhZGVEdXJhdGlvbihyLnBhaW50LmdldChcInJhc3Rlci1mYWRlLWR1cmF0aW9uXCIpKSxzLnVuaWZvcm1NYXRyaXg0ZnYoYy51bmlmb3Jtcy51X21hdHJpeCwhMSxnKTt2YXIgdj1lLmZpbmRMb2FkZWRQYXJlbnQocCwwLHt9KSxtPVNyKGQsdixlLHIsdC50cmFuc2Zvcm0pLHk9dm9pZCAwLHg9dm9pZCAwO2lmKG8uYWN0aXZlVGV4dHVyZS5zZXQocy5URVhUVVJFMCksZC50ZXh0dXJlLmJpbmQocy5MSU5FQVIscy5DTEFNUF9UT19FREdFLHMuTElORUFSX01JUE1BUF9ORUFSRVNUKSxvLmFjdGl2ZVRleHR1cmUuc2V0KHMuVEVYVFVSRTEpLHY/KHYudGV4dHVyZS5iaW5kKHMuTElORUFSLHMuQ0xBTVBfVE9fRURHRSxzLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCkseT1NYXRoLnBvdygyLHYudGlsZUlELm92ZXJzY2FsZWRaLWQudGlsZUlELm92ZXJzY2FsZWRaKSx4PVtkLnRpbGVJRC5jYW5vbmljYWwueCp5JTEsZC50aWxlSUQuY2Fub25pY2FsLnkqeSUxXSk6ZC50ZXh0dXJlLmJpbmQocy5MSU5FQVIscy5DTEFNUF9UT19FREdFLHMuTElORUFSX01JUE1BUF9ORUFSRVNUKSxzLnVuaWZvcm0yZnYoYy51bmlmb3Jtcy51X3RsX3BhcmVudCx4fHxbMCwwXSkscy51bmlmb3JtMWYoYy51bmlmb3Jtcy51X3NjYWxlX3BhcmVudCx5fHwxKSxzLnVuaWZvcm0xZihjLnVuaWZvcm1zLnVfZmFkZV90LG0ubWl4KSxzLnVuaWZvcm0xZihjLnVuaWZvcm1zLnVfb3BhY2l0eSxtLm9wYWNpdHkqci5wYWludC5nZXQoXCJyYXN0ZXItb3BhY2l0eVwiKSksbCBpbnN0YW5jZW9mIHR0KXt2YXIgYj1sLmJvdW5kc0J1ZmZlcjtsLmJvdW5kc1ZBTy5iaW5kKG8sYyxiLFtdKSxzLmRyYXdBcnJheXMocy5UUklBTkdMRV9TVFJJUCwwLGIubGVuZ3RoKX1lbHNlIGlmKGQubWFza2VkQm91bmRzQnVmZmVyJiZkLm1hc2tlZEluZGV4QnVmZmVyJiZkLnNlZ21lbnRzKWMuZHJhdyhvLHMuVFJJQU5HTEVTLHIuaWQsZC5tYXNrZWRCb3VuZHNCdWZmZXIsZC5tYXNrZWRJbmRleEJ1ZmZlcixkLnNlZ21lbnRzKTtlbHNle3ZhciBfPXQucmFzdGVyQm91bmRzQnVmZmVyO3QucmFzdGVyQm91bmRzVkFPLmJpbmQobyxjLF8sW10pLHMuZHJhd0FycmF5cyhzLlRSSUFOR0xFX1NUUklQLDAsXy5sZW5ndGgpfX19fSxiYWNrZ3JvdW5kOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yLnBhaW50LmdldChcImJhY2tncm91bmQtY29sb3JcIiksaT1yLnBhaW50LmdldChcImJhY2tncm91bmQtb3BhY2l0eVwiKTtpZigwIT09aSl7dmFyIGE9dC5jb250ZXh0LG89YS5nbCxzPXQudHJhbnNmb3JtLGw9cy50aWxlU2l6ZSxjPXIucGFpbnQuZ2V0KFwiYmFja2dyb3VuZC1wYXR0ZXJuXCIpLHU9Y3x8MSE9PW4uYXx8MSE9PWk/XCJ0cmFuc2x1Y2VudFwiOlwib3BhcXVlXCI7aWYodC5yZW5kZXJQYXNzPT09dSl7dmFyIGg7aWYoYS5zZXRTdGVuY2lsTW9kZShIdC5kaXNhYmxlZCksYS5zZXREZXB0aE1vZGUodC5kZXB0aE1vZGVGb3JTdWJsYXllcigwLFwib3BhcXVlXCI9PT11P3F0LlJlYWRXcml0ZTpxdC5SZWFkT25seSkpLGEuc2V0Q29sb3JNb2RlKHQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKSxjKXtpZihkcihjLHQpKXJldHVybjtoPXQudXNlUHJvZ3JhbShcImJhY2tncm91bmRQYXR0ZXJuXCIpLGdyKGMsdCxoKSx0LnRpbGVFeHRlbnRQYXR0ZXJuVkFPLmJpbmQoYSxoLHQudGlsZUV4dGVudEJ1ZmZlcixbXSl9ZWxzZSBoPXQudXNlUHJvZ3JhbShcImJhY2tncm91bmRcIiksby51bmlmb3JtNGZ2KGgudW5pZm9ybXMudV9jb2xvcixbbi5yLG4uZyxuLmIsbi5hXSksdC50aWxlRXh0ZW50VkFPLmJpbmQoYSxoLHQudGlsZUV4dGVudEJ1ZmZlcixbXSk7by51bmlmb3JtMWYoaC51bmlmb3Jtcy51X29wYWNpdHksaSk7Zm9yKHZhciBmPTAscD1zLmNvdmVyaW5nVGlsZXMoe3RpbGVTaXplOmx9KTtmPHAubGVuZ3RoO2YrPTEpe3ZhciBkPXBbZl07YyYmdnIoe3RpbGVJRDpkLHRpbGVTaXplOmx9LHQsaCksby51bmlmb3JtTWF0cml4NGZ2KGgudW5pZm9ybXMudV9tYXRyaXgsITEsdC50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KGQudG9VbndyYXBwZWQoKSkpLG8uZHJhd0FycmF5cyhvLlRSSUFOR0xFX1NUUklQLDAsdC50aWxlRXh0ZW50QnVmZmVyLmxlbmd0aCl9fX19LGRlYnVnOmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKylFcih0LGUscltuXSl9fSx6cj1mdW5jdGlvbihlLHIpe3RoaXMuY29udGV4dD1uZXcgWXQoZSksdGhpcy50cmFuc2Zvcm09cix0aGlzLl90aWxlVGV4dHVyZXM9e30sdGhpcy5zZXR1cCgpLHRoaXMubnVtU3VibGF5ZXJzPVd0Lm1heFVuZGVyem9vbWluZytXdC5tYXhPdmVyem9vbWluZysxLHRoaXMuZGVwdGhFcHNpbG9uPTEvTWF0aC5wb3coMiwxNiksdGhpcy5kZXB0aFJib05lZWRzQ2xlYXI9ITAsdGhpcy5lbXB0eVByb2dyYW1Db25maWd1cmF0aW9uPW5ldyB0LmRlZmF1bHQkMjQsdGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleD1uZXcgV2V9O2Z1bmN0aW9uIE9yKHQsZSl7aWYodC5yb3c+ZS5yb3cpe3ZhciByPXQ7dD1lLGU9cn1yZXR1cm57eDA6dC5jb2x1bW4seTA6dC5yb3cseDE6ZS5jb2x1bW4seTE6ZS5yb3csZHg6ZS5jb2x1bW4tdC5jb2x1bW4sZHk6ZS5yb3ctdC5yb3d9fWZ1bmN0aW9uIElyKHQsZSxyLG4saSl7dmFyIGE9TWF0aC5tYXgocixNYXRoLmZsb29yKGUueTApKSxvPU1hdGgubWluKG4sTWF0aC5jZWlsKGUueTEpKTtpZih0LngwPT09ZS54MCYmdC55MD09PWUueTA/dC54MCtlLmR5L3QuZHkqdC5keDxlLngxOnQueDEtZS5keS90LmR5KnQuZHg8ZS54MCl7dmFyIHM9dDt0PWUsZT1zfWZvcih2YXIgbD10LmR4L3QuZHksYz1lLmR4L2UuZHksdT10LmR4PjAsaD1lLmR4PDAsZj1hO2Y8bztmKyspe3ZhciBwPWwqTWF0aC5tYXgoMCxNYXRoLm1pbih0LmR5LGYrdS10LnkwKSkrdC54MCxkPWMqTWF0aC5tYXgoMCxNYXRoLm1pbihlLmR5LGYraC1lLnkwKSkrZS54MDtpKE1hdGguZmxvb3IoZCksTWF0aC5jZWlsKHApLGYpfX1mdW5jdGlvbiBEcih0LGUscixuLGksYSl7dmFyIG8scz1Pcih0LGUpLGw9T3IoZSxyKSxjPU9yKHIsdCk7cy5keT5sLmR5JiYobz1zLHM9bCxsPW8pLHMuZHk+Yy5keSYmKG89cyxzPWMsYz1vKSxsLmR5PmMuZHkmJihvPWwsbD1jLGM9bykscy5keSYmSXIoYyxzLG4saSxhKSxsLmR5JiZJcihjLGwsbixpLGEpfXpyLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmNvbnRleHQuZ2w7aWYodGhpcy53aWR0aD10KmEuZGV2aWNlUGl4ZWxSYXRpbyx0aGlzLmhlaWdodD1lKmEuZGV2aWNlUGl4ZWxSYXRpbyx0aGlzLmNvbnRleHQudmlld3BvcnQuc2V0KFswLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodF0pLHRoaXMuc3R5bGUpZm9yKHZhciBuPTAsaT10aGlzLnN0eWxlLl9vcmRlcjtuPGkubGVuZ3RoO24rPTEpe3ZhciBvPWlbbl07dGhpcy5zdHlsZS5fbGF5ZXJzW29dLnJlc2l6ZSgpfXRoaXMuZGVwdGhSYm8mJihyLmRlbGV0ZVJlbmRlcmJ1ZmZlcih0aGlzLmRlcHRoUmJvKSx0aGlzLmRlcHRoUmJvPW51bGwpfSx6ci5wcm90b3R5cGUuc2V0dXA9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbnRleHQscj1uZXcgdC5Qb3NBcnJheTtyLmVtcGxhY2VCYWNrKDAsMCksci5lbXBsYWNlQmFjayh0LmRlZmF1bHQkOCwwKSxyLmVtcGxhY2VCYWNrKDAsdC5kZWZhdWx0JDgpLHIuZW1wbGFjZUJhY2sodC5kZWZhdWx0JDgsdC5kZWZhdWx0JDgpLHRoaXMudGlsZUV4dGVudEJ1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcihyLEtlLm1lbWJlcnMpLHRoaXMudGlsZUV4dGVudFZBTz1uZXcgUSx0aGlzLnRpbGVFeHRlbnRQYXR0ZXJuVkFPPW5ldyBRO3ZhciBuPW5ldyB0LlBvc0FycmF5O24uZW1wbGFjZUJhY2soMCwwKSxuLmVtcGxhY2VCYWNrKHQuZGVmYXVsdCQ4LDApLG4uZW1wbGFjZUJhY2sodC5kZWZhdWx0JDgsdC5kZWZhdWx0JDgpLG4uZW1wbGFjZUJhY2soMCx0LmRlZmF1bHQkOCksbi5lbXBsYWNlQmFjaygwLDApLHRoaXMuZGVidWdCdWZmZXI9ZS5jcmVhdGVWZXJ0ZXhCdWZmZXIobixLZS5tZW1iZXJzKSx0aGlzLmRlYnVnVkFPPW5ldyBRO3ZhciBpPW5ldyB0LlJhc3RlckJvdW5kc0FycmF5O2kuZW1wbGFjZUJhY2soMCwwLDAsMCksaS5lbXBsYWNlQmFjayh0LmRlZmF1bHQkOCwwLHQuZGVmYXVsdCQ4LDApLGkuZW1wbGFjZUJhY2soMCx0LmRlZmF1bHQkOCwwLHQuZGVmYXVsdCQ4KSxpLmVtcGxhY2VCYWNrKHQuZGVmYXVsdCQ4LHQuZGVmYXVsdCQ4LHQuZGVmYXVsdCQ4LHQuZGVmYXVsdCQ4KSx0aGlzLnJhc3RlckJvdW5kc0J1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcihpLEsubWVtYmVycyksdGhpcy5yYXN0ZXJCb3VuZHNWQU89bmV3IFE7dmFyIGE9bmV3IHQuUG9zQXJyYXk7YS5lbXBsYWNlQmFjaygwLDApLGEuZW1wbGFjZUJhY2soMSwwKSxhLmVtcGxhY2VCYWNrKDAsMSksYS5lbXBsYWNlQmFjaygxLDEpLHRoaXMudmlld3BvcnRCdWZmZXI9ZS5jcmVhdGVWZXJ0ZXhCdWZmZXIoYSxLZS5tZW1iZXJzKSx0aGlzLnZpZXdwb3J0VkFPPW5ldyBRfSx6ci5wcm90b3R5cGUuY2xlYXJTdGVuY2lsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0LHI9ZS5nbDtlLnNldENvbG9yTW9kZShHdC5kaXNhYmxlZCksZS5zZXREZXB0aE1vZGUocXQuZGlzYWJsZWQpLGUuc2V0U3RlbmNpbE1vZGUobmV3IEh0KHtmdW5jOnIuQUxXQVlTLG1hc2s6MH0sMCwyNTUsci5aRVJPLHIuWkVSTyxyLlpFUk8pKTt2YXIgbj10Lm1hdDQuY3JlYXRlKCk7dC5tYXQ0Lm9ydGhvKG4sMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LDAsMCwxKSx0Lm1hdDQuc2NhbGUobixuLFtyLmRyYXdpbmdCdWZmZXJXaWR0aCxyLmRyYXdpbmdCdWZmZXJIZWlnaHQsMF0pO3ZhciBpPXRoaXMudXNlUHJvZ3JhbShcImNsaXBwaW5nTWFza1wiKTtyLnVuaWZvcm1NYXRyaXg0ZnYoaS51bmlmb3Jtcy51X21hdHJpeCwhMSxuKSx0aGlzLnZpZXdwb3J0VkFPLmJpbmQoZSxpLHRoaXMudmlld3BvcnRCdWZmZXIsW10pLHIuZHJhd0FycmF5cyhyLlRSSUFOR0xFX1NUUklQLDAsNCl9LHpyLnByb3RvdHlwZS5fcmVuZGVyVGlsZUNsaXBwaW5nTWFza3M9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb250ZXh0LHI9ZS5nbDtlLnNldENvbG9yTW9kZShHdC5kaXNhYmxlZCksZS5zZXREZXB0aE1vZGUocXQuZGlzYWJsZWQpO3ZhciBuPTE7dGhpcy5fdGlsZUNsaXBwaW5nTWFza0lEcz17fTtmb3IodmFyIGk9MCxhPXQ7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldLHM9dGhpcy5fdGlsZUNsaXBwaW5nTWFza0lEc1tvLmtleV09bisrO2Uuc2V0U3RlbmNpbE1vZGUobmV3IEh0KHtmdW5jOnIuQUxXQVlTLG1hc2s6MH0scywyNTUsci5LRUVQLHIuS0VFUCxyLlJFUExBQ0UpKTt2YXIgbD10aGlzLnVzZVByb2dyYW0oXCJjbGlwcGluZ01hc2tcIik7ci51bmlmb3JtTWF0cml4NGZ2KGwudW5pZm9ybXMudV9tYXRyaXgsITEsby5wb3NNYXRyaXgpLHRoaXMudGlsZUV4dGVudFZBTy5iaW5kKHRoaXMuY29udGV4dCxsLHRoaXMudGlsZUV4dGVudEJ1ZmZlcixbXSksci5kcmF3QXJyYXlzKHIuVFJJQU5HTEVfU1RSSVAsMCx0aGlzLnRpbGVFeHRlbnRCdWZmZXIubGVuZ3RoKX19LHpyLnByb3RvdHlwZS5zdGVuY2lsTW9kZUZvckNsaXBwaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDtyZXR1cm4gbmV3IEh0KHtmdW5jOmUuRVFVQUwsbWFzazoyNTV9LHRoaXMuX3RpbGVDbGlwcGluZ01hc2tJRHNbdC5rZXldLDAsZS5LRUVQLGUuS0VFUCxlLlJFUExBQ0UpfSx6ci5wcm90b3R5cGUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGV4dC5nbDtyZXR1cm4gdGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yP25ldyBHdChbZS5DT05TVEFOVF9DT0xPUixlLk9ORV0sbmV3IHQuZGVmYXVsdCQ2KDEvOCwxLzgsMS84LDApLFshMCwhMCwhMCwhMF0pOlwib3BhcXVlXCI9PT10aGlzLnJlbmRlclBhc3M/R3QudW5ibGVuZGVkOkd0LmFscGhhQmxlbmRlZH0senIucHJvdG90eXBlLmRlcHRoTW9kZUZvclN1YmxheWVyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0xLSgoMSt0aGlzLmN1cnJlbnRMYXllcikqdGhpcy5udW1TdWJsYXllcnMrdCkqdGhpcy5kZXB0aEVwc2lsb24saT1uLTErdGhpcy5kZXB0aFJhbmdlO3JldHVybiBuZXcgcXQocnx8dGhpcy5jb250ZXh0LmdsLkxFUVVBTCxlLFtpLG5dKX0senIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7Zm9yKHZhciBpIGluIHRoaXMuc3R5bGU9ZSx0aGlzLm9wdGlvbnM9cix0aGlzLmxpbmVBdGxhcz1lLmxpbmVBdGxhcyx0aGlzLmltYWdlTWFuYWdlcj1lLmltYWdlTWFuYWdlcix0aGlzLmdseXBoTWFuYWdlcj1lLmdseXBoTWFuYWdlcix0aGlzLnN5bWJvbEZhZGVDaGFuZ2U9ZS5wbGFjZW1lbnQuc3ltYm9sRmFkZUNoYW5nZShhLm5vdygpKSxlLnNvdXJjZUNhY2hlcyl7dmFyIG89bi5zdHlsZS5zb3VyY2VDYWNoZXNbaV07by51c2VkJiZvLnByZXBhcmUobi5jb250ZXh0KX12YXIgcz10aGlzLnN0eWxlLl9vcmRlcixsPXQuZmlsdGVyT2JqZWN0KHRoaXMuc3R5bGUuc291cmNlQ2FjaGVzLGZ1bmN0aW9uKHQpe3JldHVyblwicmFzdGVyXCI9PT10LmdldFNvdXJjZSgpLnR5cGV8fFwicmFzdGVyLWRlbVwiPT09dC5nZXRTb3VyY2UoKS50eXBlfSksYz1mdW5jdGlvbihlKXt2YXIgcj1sW2VdOyFmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1lLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50aWxlSUQuaXNMZXNzVGhhbihlLnRpbGVJRCk/LTE6ZS50aWxlSUQuaXNMZXNzVGhhbih0LnRpbGVJRCk/MTowfSksaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT17fSxvPW5baV0scz1uLnNsaWNlKGkrMSk7YXIoby50aWxlSUQud3JhcHBlZCgpLG8udGlsZUlELHMsbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRCgwLG8udGlsZUlELndyYXArMSwwLDAsMCksYSksby5zZXRNYXNrKGEscil9fShyLmdldFZpc2libGVDb29yZGluYXRlcygpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gci5nZXRUaWxlKHQpfSksbi5jb250ZXh0KX07Zm9yKHZhciB1IGluIGwpYyh1KTt0aGlzLnJlbmRlclBhc3M9XCJvZmZzY3JlZW5cIjt2YXIgaCxmPVtdO3RoaXMuZGVwdGhSYm9OZWVkc0NsZWFyPSEwO2Zvcih2YXIgcD0wO3A8cy5sZW5ndGg7cCsrKXt2YXIgZD1uLnN0eWxlLl9sYXllcnNbc1twXV07ZC5oYXNPZmZzY3JlZW5QYXNzKCkmJiFkLmlzSGlkZGVuKG4udHJhbnNmb3JtLnpvb20pJiYoZC5zb3VyY2UhPT0oaCYmaC5pZCkmJihmPVtdLChoPW4uc3R5bGUuc291cmNlQ2FjaGVzW2Quc291cmNlXSkmJihmPWguZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCkpLnJldmVyc2UoKSksZi5sZW5ndGgmJm4ucmVuZGVyTGF5ZXIobixoLGQsZikpfXRoaXMuY29udGV4dC5iaW5kRnJhbWVidWZmZXIuc2V0KG51bGwpLHRoaXMuY29udGV4dC5jbGVhcih7Y29sb3I6ci5zaG93T3ZlcmRyYXdJbnNwZWN0b3I/dC5kZWZhdWx0JDYuYmxhY2s6dC5kZWZhdWx0JDYudHJhbnNwYXJlbnQsZGVwdGg6MX0pLHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcj1yLnNob3dPdmVyZHJhd0luc3BlY3Rvcix0aGlzLmRlcHRoUmFuZ2U9KGUuX29yZGVyLmxlbmd0aCsyKSp0aGlzLm51bVN1YmxheWVycyp0aGlzLmRlcHRoRXBzaWxvbix0aGlzLnJlbmRlclBhc3M9XCJvcGFxdWVcIjt2YXIgZyx2PVtdO2Zvcih0aGlzLmN1cnJlbnRMYXllcj1zLmxlbmd0aC0xLHRoaXMuY3VycmVudExheWVyO3RoaXMuY3VycmVudExheWVyPj0wO3RoaXMuY3VycmVudExheWVyLS0pe3ZhciBtPW4uc3R5bGUuX2xheWVyc1tzW24uY3VycmVudExheWVyXV07bS5zb3VyY2UhPT0oZyYmZy5pZCkmJih2PVtdLChnPW4uc3R5bGUuc291cmNlQ2FjaGVzW20uc291cmNlXSkmJihuLmNsZWFyU3RlbmNpbCgpLHY9Zy5nZXRWaXNpYmxlQ29vcmRpbmF0ZXMoKSxnLmdldFNvdXJjZSgpLmlzVGlsZUNsaXBwZWQmJm4uX3JlbmRlclRpbGVDbGlwcGluZ01hc2tzKHYpKSksbi5yZW5kZXJMYXllcihuLGcsbSx2KX10aGlzLnJlbmRlclBhc3M9XCJ0cmFuc2x1Y2VudFwiO3ZhciB5LHg9W107Zm9yKHRoaXMuY3VycmVudExheWVyPTAsdGhpcy5jdXJyZW50TGF5ZXI7dGhpcy5jdXJyZW50TGF5ZXI8cy5sZW5ndGg7dGhpcy5jdXJyZW50TGF5ZXIrKyl7dmFyIGI9bi5zdHlsZS5fbGF5ZXJzW3Nbbi5jdXJyZW50TGF5ZXJdXTtiLnNvdXJjZSE9PSh5JiZ5LmlkKSYmKHg9W10sKHk9bi5zdHlsZS5zb3VyY2VDYWNoZXNbYi5zb3VyY2VdKSYmKG4uY2xlYXJTdGVuY2lsKCkseD15LmdldFZpc2libGVDb29yZGluYXRlcygpLHkuZ2V0U291cmNlKCkuaXNUaWxlQ2xpcHBlZCYmbi5fcmVuZGVyVGlsZUNsaXBwaW5nTWFza3MoeCkpLHgucmV2ZXJzZSgpKSxuLnJlbmRlckxheWVyKG4seSxiLHgpfWlmKHRoaXMub3B0aW9ucy5zaG93VGlsZUJvdW5kYXJpZXMpe3ZhciBfPXRoaXMuc3R5bGUuc291cmNlQ2FjaGVzW09iamVjdC5rZXlzKHRoaXMuc3R5bGUuc291cmNlQ2FjaGVzKVswXV07XyYmTHIuZGVidWcodGhpcyxfLF8uZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCkpfX0senIucHJvdG90eXBlLnNldHVwT2Zmc2NyZWVuRGVwdGhSZW5kZXJidWZmZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnRleHQ7dGhpcy5kZXB0aFJib3x8KHRoaXMuZGVwdGhSYm89dC5jcmVhdGVSZW5kZXJidWZmZXIodC5nbC5ERVBUSF9DT01QT05FTlQxNix0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSl9LHpyLnByb3RvdHlwZS5yZW5kZXJMYXllcj1mdW5jdGlvbih0LGUscixuKXtyLmlzSGlkZGVuKHRoaXMudHJhbnNmb3JtLnpvb20pfHwoXCJiYWNrZ3JvdW5kXCI9PT1yLnR5cGV8fG4ubGVuZ3RoKSYmKHRoaXMuaWQ9ci5pZCxMcltyLnR5cGVdKHQsZSxyLG4pKX0senIucHJvdG90eXBlLnRyYW5zbGF0ZVBvc01hdHJpeD1mdW5jdGlvbihlLHIsbixpLGEpe2lmKCFuWzBdJiYhblsxXSlyZXR1cm4gZTt2YXIgbz1hP1wibWFwXCI9PT1pP3RoaXMudHJhbnNmb3JtLmFuZ2xlOjA6XCJ2aWV3cG9ydFwiPT09aT8tdGhpcy50cmFuc2Zvcm0uYW5nbGU6MDtpZihvKXt2YXIgcz1NYXRoLnNpbihvKSxsPU1hdGguY29zKG8pO249W25bMF0qbC1uWzFdKnMsblswXSpzK25bMV0qbF19dmFyIGM9W2E/blswXTpNZShyLG5bMF0sdGhpcy50cmFuc2Zvcm0uem9vbSksYT9uWzFdOk1lKHIsblsxXSx0aGlzLnRyYW5zZm9ybS56b29tKSwwXSx1PW5ldyBGbG9hdDMyQXJyYXkoMTYpO3JldHVybiB0Lm1hdDQudHJhbnNsYXRlKHUsZSxjKSx1fSx6ci5wcm90b3R5cGUuc2F2ZVRpbGVUZXh0dXJlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbGVUZXh0dXJlc1t0LnNpemVbMF1dO2U/ZS5wdXNoKHQpOnRoaXMuX3RpbGVUZXh0dXJlc1t0LnNpemVbMF1dPVt0XX0senIucHJvdG90eXBlLmdldFRpbGVUZXh0dXJlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbGVUZXh0dXJlc1t0XTtyZXR1cm4gZSYmZS5sZW5ndGg+MD9lLnBvcCgpOm51bGx9LHpyLnByb3RvdHlwZS5fY3JlYXRlUHJvZ3JhbUNhY2hlZD1mdW5jdGlvbih0LGUpe3RoaXMuY2FjaGU9dGhpcy5jYWNoZXx8e307dmFyIHI9XCJcIit0KyhlLmNhY2hlS2V5fHxcIlwiKSsodGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yP1wiL292ZXJkcmF3XCI6XCJcIik7cmV0dXJuIHRoaXMuY2FjaGVbcl18fCh0aGlzLmNhY2hlW3JdPW5ldyBpcih0aGlzLmNvbnRleHQsbnJbdF0sZSx0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3IpKSx0aGlzLmNhY2hlW3JdfSx6ci5wcm90b3R5cGUudXNlUHJvZ3JhbT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2NyZWF0ZVByb2dyYW1DYWNoZWQodCxlfHx0aGlzLmVtcHR5UHJvZ3JhbUNvbmZpZ3VyYXRpb24pO3JldHVybiB0aGlzLmNvbnRleHQucHJvZ3JhbS5zZXQoci5wcm9ncmFtKSxyfTt2YXIgUHI9dC5kZWZhdWx0JDIwLnZlYzQsUnI9dC5kZWZhdWx0JDIwLm1hdDQsRnI9dC5kZWZhdWx0JDIwLm1hdDIsQnI9ZnVuY3Rpb24odCxlLHIpe3RoaXMudGlsZVNpemU9NTEyLHRoaXMuX3JlbmRlcldvcmxkQ29waWVzPXZvaWQgMD09PXJ8fHIsdGhpcy5fbWluWm9vbT10fHwwLHRoaXMuX21heFpvb209ZXx8MjIsdGhpcy5sYXRSYW5nZT1bLTg1LjA1MTEzLDg1LjA1MTEzXSx0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MCx0aGlzLl9jZW50ZXI9bmV3IEcoMCwwKSx0aGlzLnpvb209MCx0aGlzLmFuZ2xlPTAsdGhpcy5fZm92PS42NDM1MDExMDg3OTMyODQ0LHRoaXMuX3BpdGNoPTAsdGhpcy5fdW5tb2RpZmllZD0hMCx0aGlzLl9wb3NNYXRyaXhDYWNoZT17fSx0aGlzLl9hbGlnbmVkUG9zTWF0cml4Q2FjaGU9e319LE5yPXttaW5ab29tOntjb25maWd1cmFibGU6ITB9LG1heFpvb206e2NvbmZpZ3VyYWJsZTohMH0scmVuZGVyV29ybGRDb3BpZXM6e2NvbmZpZ3VyYWJsZTohMH0sd29ybGRTaXplOntjb25maWd1cmFibGU6ITB9LGNlbnRlclBvaW50Ontjb25maWd1cmFibGU6ITB9LHNpemU6e2NvbmZpZ3VyYWJsZTohMH0sYmVhcmluZzp7Y29uZmlndXJhYmxlOiEwfSxwaXRjaDp7Y29uZmlndXJhYmxlOiEwfSxmb3Y6e2NvbmZpZ3VyYWJsZTohMH0sem9vbTp7Y29uZmlndXJhYmxlOiEwfSxjZW50ZXI6e2NvbmZpZ3VyYWJsZTohMH0sdW5tb2RpZmllZDp7Y29uZmlndXJhYmxlOiEwfSx4Ontjb25maWd1cmFibGU6ITB9LHk6e2NvbmZpZ3VyYWJsZTohMH0scG9pbnQ6e2NvbmZpZ3VyYWJsZTohMH19O0JyLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBCcih0aGlzLl9taW5ab29tLHRoaXMuX21heFpvb20sdGhpcy5fcmVuZGVyV29ybGRDb3BpZXMpO3JldHVybiB0LnRpbGVTaXplPXRoaXMudGlsZVNpemUsdC5sYXRSYW5nZT10aGlzLmxhdFJhbmdlLHQud2lkdGg9dGhpcy53aWR0aCx0LmhlaWdodD10aGlzLmhlaWdodCx0Ll9jZW50ZXI9dGhpcy5fY2VudGVyLHQuem9vbT10aGlzLnpvb20sdC5hbmdsZT10aGlzLmFuZ2xlLHQuX2Zvdj10aGlzLl9mb3YsdC5fcGl0Y2g9dGhpcy5fcGl0Y2gsdC5fdW5tb2RpZmllZD10aGlzLl91bm1vZGlmaWVkLHQuX2NhbGNNYXRyaWNlcygpLHR9LE5yLm1pblpvb20uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21pblpvb219LE5yLm1pblpvb20uc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX21pblpvb20hPT10JiYodGhpcy5fbWluWm9vbT10LHRoaXMuem9vbT1NYXRoLm1heCh0aGlzLnpvb20sdCkpfSxOci5tYXhab29tLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhab29tfSxOci5tYXhab29tLnNldD1mdW5jdGlvbih0KXt0aGlzLl9tYXhab29tIT09dCYmKHRoaXMuX21heFpvb209dCx0aGlzLnpvb209TWF0aC5taW4odGhpcy56b29tLHQpKX0sTnIucmVuZGVyV29ybGRDb3BpZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcldvcmxkQ29waWVzfSxOci5yZW5kZXJXb3JsZENvcGllcy5zZXQ9ZnVuY3Rpb24odCl7dm9pZCAwPT09dD90PSEwOm51bGw9PT10JiYodD0hMSksdGhpcy5fcmVuZGVyV29ybGRDb3BpZXM9dH0sTnIud29ybGRTaXplLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRpbGVTaXplKnRoaXMuc2NhbGV9LE5yLmNlbnRlclBvaW50LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemUuX2RpdigyKX0sTnIuc2l6ZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQuZGVmYXVsdCQxKHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpfSxOci5iZWFyaW5nLmdldD1mdW5jdGlvbigpe3JldHVybi10aGlzLmFuZ2xlL01hdGguUEkqMTgwfSxOci5iZWFyaW5nLnNldD1mdW5jdGlvbihlKXt2YXIgcj0tdC53cmFwKGUsLTE4MCwxODApKk1hdGguUEkvMTgwO3RoaXMuYW5nbGUhPT1yJiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLmFuZ2xlPXIsdGhpcy5fY2FsY01hdHJpY2VzKCksdGhpcy5yb3RhdGlvbk1hdHJpeD1Gci5jcmVhdGUoKSxGci5yb3RhdGUodGhpcy5yb3RhdGlvbk1hdHJpeCx0aGlzLnJvdGF0aW9uTWF0cml4LHRoaXMuYW5nbGUpKX0sTnIucGl0Y2guZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BpdGNoL01hdGguUEkqMTgwfSxOci5waXRjaC5zZXQ9ZnVuY3Rpb24oZSl7dmFyIHI9dC5jbGFtcChlLDAsNjApLzE4MCpNYXRoLlBJO3RoaXMuX3BpdGNoIT09ciYmKHRoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5fcGl0Y2g9cix0aGlzLl9jYWxjTWF0cmljZXMoKSl9LE5yLmZvdi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm92L01hdGguUEkqMTgwfSxOci5mb3Yuc2V0PWZ1bmN0aW9uKHQpe3Q9TWF0aC5tYXgoLjAxLE1hdGgubWluKDYwLHQpKSx0aGlzLl9mb3YhPT10JiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLl9mb3Y9dC8xODAqTWF0aC5QSSx0aGlzLl9jYWxjTWF0cmljZXMoKSl9LE5yLnpvb20uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pvb219LE5yLnpvb20uc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWluKE1hdGgubWF4KHQsdGhpcy5taW5ab29tKSx0aGlzLm1heFpvb20pO3RoaXMuX3pvb20hPT1lJiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLl96b29tPWUsdGhpcy5zY2FsZT10aGlzLnpvb21TY2FsZShlKSx0aGlzLnRpbGVab29tPU1hdGguZmxvb3IoZSksdGhpcy56b29tRnJhY3Rpb249ZS10aGlzLnRpbGVab29tLHRoaXMuX2NvbnN0cmFpbigpLHRoaXMuX2NhbGNNYXRyaWNlcygpKX0sTnIuY2VudGVyLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jZW50ZXJ9LE5yLmNlbnRlci5zZXQ9ZnVuY3Rpb24odCl7dC5sYXQ9PT10aGlzLl9jZW50ZXIubGF0JiZ0LmxuZz09PXRoaXMuX2NlbnRlci5sbmd8fCh0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuX2NlbnRlcj10LHRoaXMuX2NvbnN0cmFpbigpLHRoaXMuX2NhbGNNYXRyaWNlcygpKX0sQnIucHJvdG90eXBlLmNvdmVyaW5nWm9vbUxldmVsPWZ1bmN0aW9uKHQpe3JldHVybih0LnJvdW5kWm9vbT9NYXRoLnJvdW5kOk1hdGguZmxvb3IpKHRoaXMuem9vbSt0aGlzLnNjYWxlWm9vbSh0aGlzLnRpbGVTaXplL3QudGlsZVNpemUpKX0sQnIucHJvdG90eXBlLmdldFZpc2libGVVbndyYXBwZWRDb29yZGluYXRlcz1mdW5jdGlvbihlKXt2YXIgcj10aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgdC5kZWZhdWx0JDEoMCwwKSwwKSxuPXRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LmRlZmF1bHQkMSh0aGlzLndpZHRoLDApLDApLGk9TWF0aC5mbG9vcihyLmNvbHVtbiksYT1NYXRoLmZsb29yKG4uY29sdW1uKSxvPVtuZXcgdC5VbndyYXBwZWRUaWxlSUQoMCxlKV07aWYodGhpcy5fcmVuZGVyV29ybGRDb3BpZXMpZm9yKHZhciBzPWk7czw9YTtzKyspMCE9PXMmJm8ucHVzaChuZXcgdC5VbndyYXBwZWRUaWxlSUQocyxlKSk7cmV0dXJuIG99LEJyLnByb3RvdHlwZS5jb3ZlcmluZ1RpbGVzPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuY292ZXJpbmdab29tTGV2ZWwoZSksbj1yO2lmKHZvaWQgMCE9PWUubWluem9vbSYmcjxlLm1pbnpvb20pcmV0dXJuW107dm9pZCAwIT09ZS5tYXh6b29tJiZyPmUubWF4em9vbSYmKHI9ZS5tYXh6b29tKTt2YXIgaT10aGlzLnBvaW50Q29vcmRpbmF0ZSh0aGlzLmNlbnRlclBvaW50LHIpLGE9bmV3IHQuZGVmYXVsdCQxKGkuY29sdW1uLS41LGkucm93LS41KTtyZXR1cm4gZnVuY3Rpb24oZSxyLG4saSl7dm9pZCAwPT09aSYmKGk9ITApO3ZhciBhPTE8PGUsbz17fTtmdW5jdGlvbiBzKHIscyxsKXt2YXIgYyx1LGgsZjtpZihsPj0wJiZsPD1hKWZvcihjPXI7YzxzO2MrKyl1PU1hdGguZmxvb3IoYy9hKSxoPShjJWErYSklYSwwIT09dSYmITAhPT1pfHwoZj1uZXcgdC5PdmVyc2NhbGVkVGlsZUlEKG4sdSxlLGgsbCksb1tmLmtleV09Zil9cmV0dXJuIERyKHJbMF0sclsxXSxyWzJdLDAsYSxzKSxEcihyWzJdLHJbM10sclswXSwwLGEscyksT2JqZWN0LmtleXMobykubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBvW3RdfSl9KHIsW3RoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LmRlZmF1bHQkMSgwLDApLHIpLHRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LmRlZmF1bHQkMSh0aGlzLndpZHRoLDApLHIpLHRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LmRlZmF1bHQkMSh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSxyKSx0aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgdC5kZWZhdWx0JDEoMCx0aGlzLmhlaWdodCkscildLGUucmVwYXJzZU92ZXJzY2FsZWQ/bjpyLHRoaXMuX3JlbmRlcldvcmxkQ29waWVzKS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEuZGlzdCh0LmNhbm9uaWNhbCktYS5kaXN0KGUuY2Fub25pY2FsKX0pfSxCci5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQsZSl7dGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5waXhlbHNUb0dMVW5pdHM9WzIvdCwtMi9lXSx0aGlzLl9jb25zdHJhaW4oKSx0aGlzLl9jYWxjTWF0cmljZXMoKX0sTnIudW5tb2RpZmllZC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdW5tb2RpZmllZH0sQnIucHJvdG90eXBlLnpvb21TY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3coMix0KX0sQnIucHJvdG90eXBlLnNjYWxlWm9vbT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5MTjJ9LEJyLnByb3RvdHlwZS5wcm9qZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdC5kZWZhdWx0JDEodGhpcy5sbmdYKGUubG5nKSx0aGlzLmxhdFkoZS5sYXQpKX0sQnIucHJvdG90eXBlLnVucHJvamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEcodGhpcy54TG5nKHQueCksdGhpcy55TGF0KHQueSkpfSxOci54LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxuZ1godGhpcy5jZW50ZXIubG5nKX0sTnIueS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXRZKHRoaXMuY2VudGVyLmxhdCl9LE5yLnBvaW50LmdldD1mdW5jdGlvbigpe3JldHVybiBuZXcgdC5kZWZhdWx0JDEodGhpcy54LHRoaXMueSl9LEJyLnByb3RvdHlwZS5sbmdYPWZ1bmN0aW9uKHQpe3JldHVybigxODArdCkqdGhpcy53b3JsZFNpemUvMzYwfSxCci5wcm90b3R5cGUubGF0WT1mdW5jdGlvbih0KXtyZXR1cm4oMTgwLTE4MC9NYXRoLlBJKk1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCt0Kk1hdGguUEkvMzYwKSkpKnRoaXMud29ybGRTaXplLzM2MH0sQnIucHJvdG90eXBlLnhMbmc9ZnVuY3Rpb24odCl7cmV0dXJuIDM2MCp0L3RoaXMud29ybGRTaXplLTE4MH0sQnIucHJvdG90eXBlLnlMYXQ9ZnVuY3Rpb24odCl7dmFyIGU9MTgwLTM2MCp0L3RoaXMud29ybGRTaXplO3JldHVybiAzNjAvTWF0aC5QSSpNYXRoLmF0YW4oTWF0aC5leHAoZSpNYXRoLlBJLzE4MCkpLTkwfSxCci5wcm90b3R5cGUuc2V0TG9jYXRpb25BdFBvaW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5wb2ludENvb3JkaW5hdGUoZSkuX3N1Yih0aGlzLnBvaW50Q29vcmRpbmF0ZSh0aGlzLmNlbnRlclBvaW50KSk7dGhpcy5jZW50ZXI9dGhpcy5jb29yZGluYXRlTG9jYXRpb24odGhpcy5sb2NhdGlvbkNvb3JkaW5hdGUodCkuX3N1YihyKSksdGhpcy5fcmVuZGVyV29ybGRDb3BpZXMmJih0aGlzLmNlbnRlcj10aGlzLmNlbnRlci53cmFwKCkpfSxCci5wcm90b3R5cGUubG9jYXRpb25Qb2ludD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb29yZGluYXRlUG9pbnQodGhpcy5sb2NhdGlvbkNvb3JkaW5hdGUodCkpfSxCci5wcm90b3R5cGUucG9pbnRMb2NhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb29yZGluYXRlTG9jYXRpb24odGhpcy5wb2ludENvb3JkaW5hdGUodCkpfSxCci5wcm90b3R5cGUubG9jYXRpb25Db29yZGluYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdC5kZWZhdWx0JDE3KHRoaXMubG5nWChlLmxuZykvdGhpcy50aWxlU2l6ZSx0aGlzLmxhdFkoZS5sYXQpL3RoaXMudGlsZVNpemUsdGhpcy56b29tKS56b29tVG8odGhpcy50aWxlWm9vbSl9LEJyLnByb3RvdHlwZS5jb29yZGluYXRlTG9jYXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dC56b29tVG8odGhpcy56b29tKTtyZXR1cm4gbmV3IEcodGhpcy54TG5nKGUuY29sdW1uKnRoaXMudGlsZVNpemUpLHRoaXMueUxhdChlLnJvdyp0aGlzLnRpbGVTaXplKSl9LEJyLnByb3RvdHlwZS5wb2ludENvb3JkaW5hdGU9ZnVuY3Rpb24oZSxyKXt2b2lkIDA9PT1yJiYocj10aGlzLnRpbGVab29tKTt2YXIgbj1bZS54LGUueSwwLDFdLGk9W2UueCxlLnksMSwxXTtQci50cmFuc2Zvcm1NYXQ0KG4sbix0aGlzLnBpeGVsTWF0cml4SW52ZXJzZSksUHIudHJhbnNmb3JtTWF0NChpLGksdGhpcy5waXhlbE1hdHJpeEludmVyc2UpO3ZhciBhPW5bM10sbz1pWzNdLHM9blswXS9hLGw9aVswXS9vLGM9blsxXS9hLHU9aVsxXS9vLGg9blsyXS9hLGY9aVsyXS9vLHA9aD09PWY/MDooMC1oKS8oZi1oKTtyZXR1cm4gbmV3IHQuZGVmYXVsdCQxNyh0Lm51bWJlcihzLGwscCkvdGhpcy50aWxlU2l6ZSx0Lm51bWJlcihjLHUscCkvdGhpcy50aWxlU2l6ZSx0aGlzLnpvb20pLl96b29tVG8ocil9LEJyLnByb3RvdHlwZS5jb29yZGluYXRlUG9pbnQ9ZnVuY3Rpb24oZSl7dmFyIHI9ZS56b29tVG8odGhpcy56b29tKSxuPVtyLmNvbHVtbip0aGlzLnRpbGVTaXplLHIucm93KnRoaXMudGlsZVNpemUsMCwxXTtyZXR1cm4gUHIudHJhbnNmb3JtTWF0NChuLG4sdGhpcy5waXhlbE1hdHJpeCksbmV3IHQuZGVmYXVsdCQxKG5bMF0vblszXSxuWzFdL25bM10pfSxCci5wcm90b3R5cGUuY2FsY3VsYXRlUG9zTWF0cml4PWZ1bmN0aW9uKGUscil7dm9pZCAwPT09ciYmKHI9ITEpO3ZhciBuPWUua2V5LGk9cj90aGlzLl9hbGlnbmVkUG9zTWF0cml4Q2FjaGU6dGhpcy5fcG9zTWF0cml4Q2FjaGU7aWYoaVtuXSlyZXR1cm4gaVtuXTt2YXIgYT1lLmNhbm9uaWNhbCxvPXRoaXMud29ybGRTaXplL3RoaXMuem9vbVNjYWxlKGEueikscz1hLngrTWF0aC5wb3coMixhLnopKmUud3JhcCxsPVJyLmlkZW50aXR5KG5ldyBGbG9hdDY0QXJyYXkoMTYpKTtyZXR1cm4gUnIudHJhbnNsYXRlKGwsbCxbcypvLGEueSpvLDBdKSxSci5zY2FsZShsLGwsW28vdC5kZWZhdWx0JDgsby90LmRlZmF1bHQkOCwxXSksUnIubXVsdGlwbHkobCxyP3RoaXMuYWxpZ25lZFByb2pNYXRyaXg6dGhpcy5wcm9qTWF0cml4LGwpLGlbbl09bmV3IEZsb2F0MzJBcnJheShsKSxpW25dfSxCci5wcm90b3R5cGUuX2NvbnN0cmFpbj1mdW5jdGlvbigpe2lmKHRoaXMuY2VudGVyJiZ0aGlzLndpZHRoJiZ0aGlzLmhlaWdodCYmIXRoaXMuX2NvbnN0cmFpbmluZyl7dGhpcy5fY29uc3RyYWluaW5nPSEwO3ZhciBlLHIsbixpLGE9LTkwLG89OTAscz0tMTgwLGw9MTgwLGM9dGhpcy5zaXplLHU9dGhpcy5fdW5tb2RpZmllZDtpZih0aGlzLmxhdFJhbmdlKXt2YXIgaD10aGlzLmxhdFJhbmdlO2E9dGhpcy5sYXRZKGhbMV0pLGU9KG89dGhpcy5sYXRZKGhbMF0pKS1hPGMueT9jLnkvKG8tYSk6MH1pZih0aGlzLmxuZ1JhbmdlKXt2YXIgZj10aGlzLmxuZ1JhbmdlO3M9dGhpcy5sbmdYKGZbMF0pLHI9KGw9dGhpcy5sbmdYKGZbMV0pKS1zPGMueD9jLngvKGwtcyk6MH12YXIgcD1NYXRoLm1heChyfHwwLGV8fDApO2lmKHApcmV0dXJuIHRoaXMuY2VudGVyPXRoaXMudW5wcm9qZWN0KG5ldyB0LmRlZmF1bHQkMShyPyhsK3MpLzI6dGhpcy54LGU/KG8rYSkvMjp0aGlzLnkpKSx0aGlzLnpvb20rPXRoaXMuc2NhbGVab29tKHApLHRoaXMuX3VubW9kaWZpZWQ9dSx2b2lkKHRoaXMuX2NvbnN0cmFpbmluZz0hMSk7aWYodGhpcy5sYXRSYW5nZSl7dmFyIGQ9dGhpcy55LGc9Yy55LzI7ZC1nPGEmJihpPWErZyksZCtnPm8mJihpPW8tZyl9aWYodGhpcy5sbmdSYW5nZSl7dmFyIHY9dGhpcy54LG09Yy54LzI7di1tPHMmJihuPXMrbSksdittPmwmJihuPWwtbSl9dm9pZCAwPT09biYmdm9pZCAwPT09aXx8KHRoaXMuY2VudGVyPXRoaXMudW5wcm9qZWN0KG5ldyB0LmRlZmF1bHQkMSh2b2lkIDAhPT1uP246dGhpcy54LHZvaWQgMCE9PWk/aTp0aGlzLnkpKSksdGhpcy5fdW5tb2RpZmllZD11LHRoaXMuX2NvbnN0cmFpbmluZz0hMX19LEJyLnByb3RvdHlwZS5fY2FsY01hdHJpY2VzPWZ1bmN0aW9uKCl7aWYodGhpcy5oZWlnaHQpe3RoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZT0uNS9NYXRoLnRhbih0aGlzLl9mb3YvMikqdGhpcy5oZWlnaHQ7dmFyIHQ9dGhpcy5fZm92LzIsZT1NYXRoLlBJLzIrdGhpcy5fcGl0Y2gscj1NYXRoLnNpbih0KSp0aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UvTWF0aC5zaW4oTWF0aC5QSS1lLXQpLG49dGhpcy54LGk9dGhpcy55LGE9MS4wMSooTWF0aC5jb3MoTWF0aC5QSS8yLXRoaXMuX3BpdGNoKSpyK3RoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSksbz1uZXcgRmxvYXQ2NEFycmF5KDE2KTtSci5wZXJzcGVjdGl2ZShvLHRoaXMuX2Zvdix0aGlzLndpZHRoL3RoaXMuaGVpZ2h0LDEsYSksUnIuc2NhbGUobyxvLFsxLC0xLDFdKSxSci50cmFuc2xhdGUobyxvLFswLDAsLXRoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZV0pLFJyLnJvdGF0ZVgobyxvLHRoaXMuX3BpdGNoKSxSci5yb3RhdGVaKG8sbyx0aGlzLmFuZ2xlKSxSci50cmFuc2xhdGUobyxvLFstbiwtaSwwXSk7dmFyIHM9dGhpcy53b3JsZFNpemUvKDIqTWF0aC5QSSo2Mzc4MTM3Kk1hdGguYWJzKE1hdGguY29zKHRoaXMuY2VudGVyLmxhdCooTWF0aC5QSS8xODApKSkpO1JyLnNjYWxlKG8sbyxbMSwxLHMsMV0pLHRoaXMucHJvak1hdHJpeD1vO3ZhciBsPXRoaXMud2lkdGglMi8yLGM9dGhpcy5oZWlnaHQlMi8yLHU9TWF0aC5jb3ModGhpcy5hbmdsZSksaD1NYXRoLnNpbih0aGlzLmFuZ2xlKSxmPW4tTWF0aC5yb3VuZChuKSt1KmwraCpjLHA9aS1NYXRoLnJvdW5kKGkpK3UqYytoKmwsZD1uZXcgRmxvYXQ2NEFycmF5KG8pO2lmKFJyLnRyYW5zbGF0ZShkLGQsW2Y+LjU/Zi0xOmYscD4uNT9wLTE6cCwwXSksdGhpcy5hbGlnbmVkUHJvak1hdHJpeD1kLG89UnIuY3JlYXRlKCksUnIuc2NhbGUobyxvLFt0aGlzLndpZHRoLzIsLXRoaXMuaGVpZ2h0LzIsMV0pLFJyLnRyYW5zbGF0ZShvLG8sWzEsLTEsMF0pLHRoaXMucGl4ZWxNYXRyaXg9UnIubXVsdGlwbHkobmV3IEZsb2F0NjRBcnJheSgxNiksbyx0aGlzLnByb2pNYXRyaXgpLCEobz1Sci5pbnZlcnQobmV3IEZsb2F0NjRBcnJheSgxNiksdGhpcy5waXhlbE1hdHJpeCkpKXRocm93IG5ldyBFcnJvcihcImZhaWxlZCB0byBpbnZlcnQgbWF0cml4XCIpO3RoaXMucGl4ZWxNYXRyaXhJbnZlcnNlPW8sdGhpcy5fcG9zTWF0cml4Q2FjaGU9e30sdGhpcy5fYWxpZ25lZFBvc01hdHJpeENhY2hlPXt9fX0sQnIucHJvdG90eXBlLm1heFBpdGNoU2NhbGVGYWN0b3I9ZnVuY3Rpb24oKXtpZighdGhpcy5waXhlbE1hdHJpeEludmVyc2UpcmV0dXJuIDE7dmFyIGU9dGhpcy5wb2ludENvb3JkaW5hdGUobmV3IHQuZGVmYXVsdCQxKDAsMCkpLnpvb21Ubyh0aGlzLnpvb20pLHI9W2UuY29sdW1uKnRoaXMudGlsZVNpemUsZS5yb3cqdGhpcy50aWxlU2l6ZSwwLDFdO3JldHVybiBQci50cmFuc2Zvcm1NYXQ0KHIscix0aGlzLnBpeGVsTWF0cml4KVszXS90aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2V9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJyLnByb3RvdHlwZSxOcik7dmFyIGpyPWZ1bmN0aW9uKCl7dmFyIGUscixuLGk7dC5iaW5kQWxsKFtcIl9vbkhhc2hDaGFuZ2VcIixcIl91cGRhdGVIYXNoXCJdLHRoaXMpLHRoaXMuX3VwZGF0ZUhhc2g9KGU9dGhpcy5fdXBkYXRlSGFzaFVudGhyb3R0bGVkLmJpbmQodGhpcyksMzAwLHI9ITEsbj0wLGk9ZnVuY3Rpb24oKXtuPTAsciYmKGUoKSxuPXNldFRpbWVvdXQoaSwzMDApLHI9ITEpfSxmdW5jdGlvbigpe3JldHVybiByPSEwLG58fGkoKSxufSl9O2pyLnByb3RvdHlwZS5hZGRUbz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbWFwPWUsdC5kZWZhdWx0LmFkZEV2ZW50TGlzdGVuZXIoXCJoYXNoY2hhbmdlXCIsdGhpcy5fb25IYXNoQ2hhbmdlLCExKSx0aGlzLl9tYXAub24oXCJtb3ZlZW5kXCIsdGhpcy5fdXBkYXRlSGFzaCksdGhpc30sanIucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0LmRlZmF1bHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImhhc2hjaGFuZ2VcIix0aGlzLl9vbkhhc2hDaGFuZ2UsITEpLHRoaXMuX21hcC5vZmYoXCJtb3ZlZW5kXCIsdGhpcy5fdXBkYXRlSGFzaCksY2xlYXJUaW1lb3V0KHRoaXMuX3VwZGF0ZUhhc2goKSksZGVsZXRlIHRoaXMuX21hcCx0aGlzfSxqci5wcm90b3R5cGUuZ2V0SGFzaFN0cmluZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tYXAuZ2V0Q2VudGVyKCkscj1NYXRoLnJvdW5kKDEwMCp0aGlzLl9tYXAuZ2V0Wm9vbSgpKS8xMDAsbj1NYXRoLmNlaWwoKHIqTWF0aC5MTjIrTWF0aC5sb2coNTEyLzM2MC8uNSkpL01hdGguTE4xMCksaT1NYXRoLnBvdygxMCxuKSxhPU1hdGgucm91bmQoZS5sbmcqaSkvaSxvPU1hdGgucm91bmQoZS5sYXQqaSkvaSxzPXRoaXMuX21hcC5nZXRCZWFyaW5nKCksbD10aGlzLl9tYXAuZ2V0UGl0Y2goKSxjPVwiXCI7cmV0dXJuIGMrPXQ/XCIjL1wiK2ErXCIvXCIrbytcIi9cIityOlwiI1wiK3IrXCIvXCIrbytcIi9cIithLChzfHxsKSYmKGMrPVwiL1wiK01hdGgucm91bmQoMTAqcykvMTApLGwmJihjKz1cIi9cIitNYXRoLnJvdW5kKGwpKSxjfSxqci5wcm90b3R5cGUuX29uSGFzaENoYW5nZT1mdW5jdGlvbigpe3ZhciBlPXQuZGVmYXVsdC5sb2NhdGlvbi5oYXNoLnJlcGxhY2UoXCIjXCIsXCJcIikuc3BsaXQoXCIvXCIpO3JldHVybiBlLmxlbmd0aD49MyYmKHRoaXMuX21hcC5qdW1wVG8oe2NlbnRlcjpbK2VbMl0sK2VbMV1dLHpvb206K2VbMF0sYmVhcmluZzorKGVbM118fDApLHBpdGNoOisoZVs0XXx8MCl9KSwhMCl9LGpyLnByb3RvdHlwZS5fdXBkYXRlSGFzaFVudGhyb3R0bGVkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRIYXNoU3RyaW5nKCk7dC5kZWZhdWx0Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHQuZGVmYXVsdC5oaXN0b3J5LnN0YXRlLFwiXCIsZSl9O3ZhciBWcj1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpLGEpe3ZvaWQgMD09PWEmJihhPXt9KTt2YXIgbz1zLm1vdXNlUG9zKG4uZ2V0Q2FudmFzQ29udGFpbmVyKCksaSksbD1uLnVucHJvamVjdChvKTtlLmNhbGwodGhpcyxyLHQuZXh0ZW5kKHtwb2ludDpvLGxuZ0xhdDpsLG9yaWdpbmFsRXZlbnQ6aX0sYSkpLHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy50YXJnZXQ9bn1lJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cjt2YXIgbj17ZGVmYXVsdFByZXZlbnRlZDp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIHIucHJvdG90eXBlLnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKCl7dGhpcy5fZGVmYXVsdFByZXZlbnRlZD0hMH0sbi5kZWZhdWx0UHJldmVudGVkLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0UHJldmVudGVkfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhyLnByb3RvdHlwZSxuKSxyfSh0LkV2ZW50KSxVcj1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpKXt2YXIgYT1zLnRvdWNoUG9zKG4uZ2V0Q2FudmFzQ29udGFpbmVyKCksaSksbz1hLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbi51bnByb2plY3QodCl9KSxsPWEucmVkdWNlKGZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0LmFkZChlLmRpdihuLmxlbmd0aCkpfSxuZXcgdC5kZWZhdWx0JDEoMCwwKSksYz1uLnVucHJvamVjdChsKTtlLmNhbGwodGhpcyxyLHtwb2ludHM6YSxwb2ludDpsLGxuZ0xhdHM6byxsbmdMYXQ6YyxvcmlnaW5hbEV2ZW50Oml9KSx0aGlzLl9kZWZhdWx0UHJldmVudGVkPSExfWUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yO3ZhciBuPXtkZWZhdWx0UHJldmVudGVkOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5wcm90b3R5cGUucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oKXt0aGlzLl9kZWZhdWx0UHJldmVudGVkPSEwfSxuLmRlZmF1bHRQcmV2ZW50ZWQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHIucHJvdG90eXBlLG4pLHJ9KHQuRXZlbnQpLHFyPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyLG4pe3QuY2FsbCh0aGlzLGUse29yaWdpbmFsRXZlbnQ6bn0pLHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITF9dCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWU7dmFyIHI9e2RlZmF1bHRQcmV2ZW50ZWQ6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiBlLnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITB9LHIuZGVmYXVsdFByZXZlbnRlZC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdFByZXZlbnRlZH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsciksZX0odC5FdmVudCksSHI9ZnVuY3Rpb24oZSl7dGhpcy5fbWFwPWUsdGhpcy5fZWw9ZS5nZXRDYW52YXNDb250YWluZXIoKSx0aGlzLl9kZWx0YT0wLHQuYmluZEFsbChbXCJfb25XaGVlbFwiLFwiX29uVGltZW91dFwiLFwiX29uU2Nyb2xsRnJhbWVcIixcIl9vblNjcm9sbEZpbmlzaGVkXCJdLHRoaXMpfTtIci5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9lbmFibGVkfSxIci5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2FjdGl2ZX0sSHIucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbih0KXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fZW5hYmxlZD0hMCx0aGlzLl9hcm91bmRDZW50ZXI9dCYmXCJjZW50ZXJcIj09PXQuYXJvdW5kKX0sSHIucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpJiYodGhpcy5fZW5hYmxlZD0hMSl9LEhyLnByb3RvdHlwZS5vbldoZWVsPWZ1bmN0aW9uKGUpe2lmKHRoaXMuaXNFbmFibGVkKCkpe3ZhciByPWUuZGVsdGFNb2RlPT09dC5kZWZhdWx0LldoZWVsRXZlbnQuRE9NX0RFTFRBX0xJTkU/NDAqZS5kZWx0YVk6ZS5kZWx0YVksbj1hLm5vdygpLGk9bi0odGhpcy5fbGFzdFdoZWVsRXZlbnRUaW1lfHwwKTt0aGlzLl9sYXN0V2hlZWxFdmVudFRpbWU9biwwIT09ciYmciU0LjAwMDI0NDE0MDYyNT09MD90aGlzLl90eXBlPVwid2hlZWxcIjowIT09ciYmTWF0aC5hYnMocik8ND90aGlzLl90eXBlPVwidHJhY2twYWRcIjppPjQwMD8odGhpcy5fdHlwZT1udWxsLHRoaXMuX2xhc3RWYWx1ZT1yLHRoaXMuX3RpbWVvdXQ9c2V0VGltZW91dCh0aGlzLl9vblRpbWVvdXQsNDAsZSkpOnRoaXMuX3R5cGV8fCh0aGlzLl90eXBlPU1hdGguYWJzKGkqcik8MjAwP1widHJhY2twYWRcIjpcIndoZWVsXCIsdGhpcy5fdGltZW91dCYmKGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KSx0aGlzLl90aW1lb3V0PW51bGwscis9dGhpcy5fbGFzdFZhbHVlKSksZS5zaGlmdEtleSYmciYmKHIvPTQpLHRoaXMuX3R5cGUmJih0aGlzLl9sYXN0V2hlZWxFdmVudD1lLHRoaXMuX2RlbHRhLT1yLHRoaXMuaXNBY3RpdmUoKXx8dGhpcy5fc3RhcnQoZSkpLGUucHJldmVudERlZmF1bHQoKX19LEhyLnByb3RvdHlwZS5fb25UaW1lb3V0PWZ1bmN0aW9uKHQpe3RoaXMuX3R5cGU9XCJ3aGVlbFwiLHRoaXMuX2RlbHRhLT10aGlzLl9sYXN0VmFsdWUsdGhpcy5pc0FjdGl2ZSgpfHx0aGlzLl9zdGFydCh0KX0sSHIucHJvdG90eXBlLl9zdGFydD1mdW5jdGlvbihlKXtpZih0aGlzLl9kZWx0YSl7dGhpcy5fZnJhbWVJZCYmKHRoaXMuX21hcC5fY2FuY2VsUmVuZGVyRnJhbWUodGhpcy5fZnJhbWVJZCksdGhpcy5fZnJhbWVJZD1udWxsKSx0aGlzLl9hY3RpdmU9ITAsdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoXCJtb3Zlc3RhcnRcIix7b3JpZ2luYWxFdmVudDplfSkpLHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KFwiem9vbXN0YXJ0XCIse29yaWdpbmFsRXZlbnQ6ZX0pKSx0aGlzLl9maW5pc2hUaW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy5fZmluaXNoVGltZW91dCk7dmFyIHI9cy5tb3VzZVBvcyh0aGlzLl9lbCxlKTt0aGlzLl9hcm91bmQ9Ry5jb252ZXJ0KHRoaXMuX2Fyb3VuZENlbnRlcj90aGlzLl9tYXAuZ2V0Q2VudGVyKCk6dGhpcy5fbWFwLnVucHJvamVjdChyKSksdGhpcy5fYXJvdW5kUG9pbnQ9dGhpcy5fbWFwLnRyYW5zZm9ybS5sb2NhdGlvblBvaW50KHRoaXMuX2Fyb3VuZCksdGhpcy5fZnJhbWVJZHx8KHRoaXMuX2ZyYW1lSWQ9dGhpcy5fbWFwLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fb25TY3JvbGxGcmFtZSkpfX0sSHIucHJvdG90eXBlLl9vblNjcm9sbEZyYW1lPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZih0aGlzLl9mcmFtZUlkPW51bGwsdGhpcy5pc0FjdGl2ZSgpKXt2YXIgcj10aGlzLl9tYXAudHJhbnNmb3JtO2lmKDAhPT10aGlzLl9kZWx0YSl7dmFyIG49XCJ3aGVlbFwiPT09dGhpcy5fdHlwZSYmTWF0aC5hYnModGhpcy5fZGVsdGEpPjQuMDAwMjQ0MTQwNjI1PzEvNDUwOi4wMSxpPTIvKDErTWF0aC5leHAoLU1hdGguYWJzKHRoaXMuX2RlbHRhKm4pKSk7dGhpcy5fZGVsdGE8MCYmMCE9PWkmJihpPTEvaSk7dmFyIG89XCJudW1iZXJcIj09dHlwZW9mIHRoaXMuX3RhcmdldFpvb20/ci56b29tU2NhbGUodGhpcy5fdGFyZ2V0Wm9vbSk6ci5zY2FsZTt0aGlzLl90YXJnZXRab29tPU1hdGgubWluKHIubWF4Wm9vbSxNYXRoLm1heChyLm1pblpvb20sci5zY2FsZVpvb20obyppKSkpLFwid2hlZWxcIj09PXRoaXMuX3R5cGUmJih0aGlzLl9zdGFydFpvb209ci56b29tLHRoaXMuX2Vhc2luZz10aGlzLl9zbW9vdGhPdXRFYXNpbmcoMjAwKSksdGhpcy5fZGVsdGE9MH12YXIgcz0hMTtpZihcIndoZWVsXCI9PT10aGlzLl90eXBlKXt2YXIgbD1NYXRoLm1pbigoYS5ub3coKS10aGlzLl9sYXN0V2hlZWxFdmVudFRpbWUpLzIwMCwxKSxjPXRoaXMuX2Vhc2luZyhsKTtyLnpvb209dC5udW1iZXIodGhpcy5fc3RhcnRab29tLHRoaXMuX3RhcmdldFpvb20sYyksbDwxP3RoaXMuX2ZyYW1lSWR8fCh0aGlzLl9mcmFtZUlkPXRoaXMuX21hcC5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX29uU2Nyb2xsRnJhbWUpKTpzPSEwfWVsc2Ugci56b29tPXRoaXMuX3RhcmdldFpvb20scz0hMDtyLnNldExvY2F0aW9uQXRQb2ludCh0aGlzLl9hcm91bmQsdGhpcy5fYXJvdW5kUG9pbnQpLHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KFwibW92ZVwiLHtvcmlnaW5hbEV2ZW50OnRoaXMuX2xhc3RXaGVlbEV2ZW50fSkpLHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KFwiem9vbVwiLHtvcmlnaW5hbEV2ZW50OnRoaXMuX2xhc3RXaGVlbEV2ZW50fSkpLHMmJih0aGlzLl9hY3RpdmU9ITEsdGhpcy5fZmluaXNoVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5fbWFwLmZpcmUobmV3IHQuRXZlbnQoXCJ6b29tZW5kXCIse29yaWdpbmFsRXZlbnQ6ZS5fbGFzdFdoZWVsRXZlbnR9KSksZS5fbWFwLmZpcmUobmV3IHQuRXZlbnQoXCJtb3ZlZW5kXCIse29yaWdpbmFsRXZlbnQ6ZS5fbGFzdFdoZWVsRXZlbnR9KSksZGVsZXRlIGUuX3RhcmdldFpvb219LDIwMCkpfX0sSHIucHJvdG90eXBlLl9zbW9vdGhPdXRFYXNpbmc9ZnVuY3Rpb24oZSl7dmFyIHI9dC5lYXNlO2lmKHRoaXMuX3ByZXZFYXNlKXt2YXIgbj10aGlzLl9wcmV2RWFzZSxpPShhLm5vdygpLW4uc3RhcnQpL24uZHVyYXRpb24sbz1uLmVhc2luZyhpKy4wMSktbi5lYXNpbmcoaSkscz0uMjcvTWF0aC5zcXJ0KG8qbysxZS00KSouMDEsbD1NYXRoLnNxcnQoLjA3MjktcypzKTtyPXQuYmV6aWVyKHMsbCwuMjUsMSl9cmV0dXJuIHRoaXMuX3ByZXZFYXNlPXtzdGFydDphLm5vdygpLGR1cmF0aW9uOmUsZWFzaW5nOnJ9LHJ9O3ZhciBHcj1mdW5jdGlvbihlKXt0aGlzLl9tYXA9ZSx0aGlzLl9lbD1lLmdldENhbnZhc0NvbnRhaW5lcigpLHRoaXMuX2NvbnRhaW5lcj1lLmdldENvbnRhaW5lcigpLHQuYmluZEFsbChbXCJfb25Nb3VzZU1vdmVcIixcIl9vbk1vdXNlVXBcIixcIl9vbktleURvd25cIl0sdGhpcyl9O0dyLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2VuYWJsZWR9LEdyLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fYWN0aXZlfSxHci5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKXx8KHRoaXMuX2VuYWJsZWQ9ITApfSxHci5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCkmJih0aGlzLl9lbmFibGVkPSExKX0sR3IucHJvdG90eXBlLm9uTW91c2VEb3duPWZ1bmN0aW9uKGUpe3RoaXMuaXNFbmFibGVkKCkmJmUuc2hpZnRLZXkmJjA9PT1lLmJ1dHRvbiYmKHQuZGVmYXVsdC5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsdGhpcy5fb25Nb3VzZU1vdmUsITEpLHQuZGVmYXVsdC5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLHRoaXMuX29uS2V5RG93biwhMSksdC5kZWZhdWx0LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsdGhpcy5fb25Nb3VzZVVwLCExKSxzLmRpc2FibGVEcmFnKCksdGhpcy5fc3RhcnRQb3M9cy5tb3VzZVBvcyh0aGlzLl9lbCxlKSx0aGlzLl9hY3RpdmU9ITApfSxHci5wcm90b3R5cGUuX29uTW91c2VNb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3N0YXJ0UG9zLHI9cy5tb3VzZVBvcyh0aGlzLl9lbCx0KTt0aGlzLl9ib3h8fCh0aGlzLl9ib3g9cy5jcmVhdGUoXCJkaXZcIixcIm1hcGJveGdsLWJveHpvb21cIix0aGlzLl9jb250YWluZXIpLHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtY3Jvc3NoYWlyXCIpLHRoaXMuX2ZpcmVFdmVudChcImJveHpvb21zdGFydFwiLHQpKTt2YXIgbj1NYXRoLm1pbihlLngsci54KSxpPU1hdGgubWF4KGUueCxyLngpLGE9TWF0aC5taW4oZS55LHIueSksbz1NYXRoLm1heChlLnksci55KTtzLnNldFRyYW5zZm9ybSh0aGlzLl9ib3gsXCJ0cmFuc2xhdGUoXCIrbitcInB4LFwiK2ErXCJweClcIiksdGhpcy5fYm94LnN0eWxlLndpZHRoPWktbitcInB4XCIsdGhpcy5fYm94LnN0eWxlLmhlaWdodD1vLWErXCJweFwifSxHci5wcm90b3R5cGUuX29uTW91c2VVcD1mdW5jdGlvbihlKXtpZigwPT09ZS5idXR0b24pe3ZhciByPXRoaXMuX3N0YXJ0UG9zLG49cy5tb3VzZVBvcyh0aGlzLl9lbCxlKSxpPShuZXcgWSkuZXh0ZW5kKHRoaXMuX21hcC51bnByb2plY3QocikpLmV4dGVuZCh0aGlzLl9tYXAudW5wcm9qZWN0KG4pKTt0aGlzLl9maW5pc2goKSxzLnN1cHByZXNzQ2xpY2soKSxyLng9PT1uLngmJnIueT09PW4ueT90aGlzLl9maXJlRXZlbnQoXCJib3h6b29tY2FuY2VsXCIsZSk6dGhpcy5fbWFwLmZpdEJvdW5kcyhpLHtsaW5lYXI6ITB9KS5maXJlKG5ldyB0LkV2ZW50KFwiYm94em9vbWVuZFwiLHtvcmlnaW5hbEV2ZW50OmUsYm94Wm9vbUJvdW5kczppfSkpfX0sR3IucHJvdG90eXBlLl9vbktleURvd249ZnVuY3Rpb24odCl7Mjc9PT10LmtleUNvZGUmJih0aGlzLl9maW5pc2goKSx0aGlzLl9maXJlRXZlbnQoXCJib3h6b29tY2FuY2VsXCIsdCkpfSxHci5wcm90b3R5cGUuX2ZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMSx0LmRlZmF1bHQuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHRoaXMuX29uTW91c2VNb3ZlLCExKSx0LmRlZmF1bHQuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIix0aGlzLl9vbktleURvd24sITEpLHQuZGVmYXVsdC5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLHRoaXMuX29uTW91c2VVcCwhMSksdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1jcm9zc2hhaXJcIiksdGhpcy5fYm94JiYocy5yZW1vdmUodGhpcy5fYm94KSx0aGlzLl9ib3g9bnVsbCkscy5lbmFibGVEcmFnKCl9LEdyLnByb3RvdHlwZS5fZmlyZUV2ZW50PWZ1bmN0aW9uKGUscil7cmV0dXJuIHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KGUse29yaWdpbmFsRXZlbnQ6cn0pKX07dmFyIFlyPXQuYmV6aWVyKDAsMCwuMjUsMSksV3I9ZnVuY3Rpb24oZSxyKXt0aGlzLl9tYXA9ZSx0aGlzLl9lbD1yLmVsZW1lbnR8fGUuZ2V0Q2FudmFzQ29udGFpbmVyKCksdGhpcy5fc3RhdGU9XCJkaXNhYmxlZFwiLHRoaXMuX2J1dHRvbj1yLmJ1dHRvbnx8XCJyaWdodFwiLHRoaXMuX2JlYXJpbmdTbmFwPXIuYmVhcmluZ1NuYXB8fDAsdGhpcy5fcGl0Y2hXaXRoUm90YXRlPSExIT09ci5waXRjaFdpdGhSb3RhdGUsdC5iaW5kQWxsKFtcIl9vbk1vdXNlTW92ZVwiLFwiX29uTW91c2VVcFwiLFwiX29uQmx1clwiLFwiX29uRHJhZ0ZyYW1lXCJdLHRoaXMpfTtXci5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuXCJkaXNhYmxlZFwiIT09dGhpcy5fc3RhdGV9LFdyLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVyblwiYWN0aXZlXCI9PT10aGlzLl9zdGF0ZX0sV3IucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9zdGF0ZT1cImVuYWJsZWRcIil9LFdyLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7aWYodGhpcy5pc0VuYWJsZWQoKSlzd2l0Y2godGhpcy5fc3RhdGUpe2Nhc2VcImFjdGl2ZVwiOnRoaXMuX3N0YXRlPVwiZGlzYWJsZWRcIix0aGlzLl91bmJpbmQoKSx0aGlzLl9kZWFjdGl2YXRlKCksdGhpcy5fZmlyZUV2ZW50KFwicm90YXRlZW5kXCIpLHRoaXMuX3BpdGNoV2l0aFJvdGF0ZSYmdGhpcy5fZmlyZUV2ZW50KFwicGl0Y2hlbmRcIiksdGhpcy5fZmlyZUV2ZW50KFwibW92ZWVuZFwiKTticmVhaztjYXNlXCJwZW5kaW5nXCI6dGhpcy5fc3RhdGU9XCJkaXNhYmxlZFwiLHRoaXMuX3VuYmluZCgpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fc3RhdGU9XCJkaXNhYmxlZFwifX0sV3IucHJvdG90eXBlLm9uTW91c2VEb3duPWZ1bmN0aW9uKGUpe2lmKFwiZW5hYmxlZFwiPT09dGhpcy5fc3RhdGUpe2lmKFwicmlnaHRcIj09PXRoaXMuX2J1dHRvbil7aWYodGhpcy5fZXZlbnRCdXR0b249cy5tb3VzZUJ1dHRvbihlKSx0aGlzLl9ldmVudEJ1dHRvbiE9PShlLmN0cmxLZXk/MDoyKSlyZXR1cm59ZWxzZXtpZihlLmN0cmxLZXl8fDAhPT1zLm1vdXNlQnV0dG9uKGUpKXJldHVybjt0aGlzLl9ldmVudEJ1dHRvbj0wfXMuZGlzYWJsZURyYWcoKSx0LmRlZmF1bHQuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHRoaXMuX29uTW91c2VNb3ZlLHtjYXB0dXJlOiEwfSksdC5kZWZhdWx0LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsdGhpcy5fb25Nb3VzZVVwKSx0LmRlZmF1bHQuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIix0aGlzLl9vbkJsdXIpLHRoaXMuX3N0YXRlPVwicGVuZGluZ1wiLHRoaXMuX2luZXJ0aWE9W1thLm5vdygpLHRoaXMuX21hcC5nZXRCZWFyaW5nKCldXSx0aGlzLl9wcmV2aW91c1Bvcz1zLm1vdXNlUG9zKHRoaXMuX2VsLGUpLHRoaXMuX2NlbnRlcj10aGlzLl9tYXAudHJhbnNmb3JtLmNlbnRlclBvaW50LGUucHJldmVudERlZmF1bHQoKX19LFdyLnByb3RvdHlwZS5fb25Nb3VzZU1vdmU9ZnVuY3Rpb24odCl7dGhpcy5fbGFzdE1vdmVFdmVudD10LHRoaXMuX3Bvcz1zLm1vdXNlUG9zKHRoaXMuX2VsLHQpLFwicGVuZGluZ1wiPT09dGhpcy5fc3RhdGUmJih0aGlzLl9zdGF0ZT1cImFjdGl2ZVwiLHRoaXMuX2ZpcmVFdmVudChcInJvdGF0ZXN0YXJ0XCIsdCksdGhpcy5fZmlyZUV2ZW50KFwibW92ZXN0YXJ0XCIsdCksdGhpcy5fcGl0Y2hXaXRoUm90YXRlJiZ0aGlzLl9maXJlRXZlbnQoXCJwaXRjaHN0YXJ0XCIsdCkpLHRoaXMuX2ZyYW1lSWR8fCh0aGlzLl9mcmFtZUlkPXRoaXMuX21hcC5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX29uRHJhZ0ZyYW1lKSl9LFdyLnByb3RvdHlwZS5fb25EcmFnRnJhbWU9ZnVuY3Rpb24oKXt0aGlzLl9mcmFtZUlkPW51bGw7dmFyIHQ9dGhpcy5fbGFzdE1vdmVFdmVudDtpZih0KXt2YXIgZT10aGlzLl9tYXAudHJhbnNmb3JtLHI9dGhpcy5fcHJldmlvdXNQb3Msbj10aGlzLl9wb3MsaT0uOCooci54LW4ueCksbz0tLjUqKHIueS1uLnkpLHM9ZS5iZWFyaW5nLWksbD1lLnBpdGNoLW8sYz10aGlzLl9pbmVydGlhLHU9Y1tjLmxlbmd0aC0xXTt0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKSxjLnB1c2goW2Eubm93KCksdGhpcy5fbWFwLl9ub3JtYWxpemVCZWFyaW5nKHMsdVsxXSldKSxlLmJlYXJpbmc9cyx0aGlzLl9waXRjaFdpdGhSb3RhdGUmJih0aGlzLl9maXJlRXZlbnQoXCJwaXRjaFwiLHQpLGUucGl0Y2g9bCksdGhpcy5fZmlyZUV2ZW50KFwicm90YXRlXCIsdCksdGhpcy5fZmlyZUV2ZW50KFwibW92ZVwiLHQpLGRlbGV0ZSB0aGlzLl9sYXN0TW92ZUV2ZW50LHRoaXMuX3ByZXZpb3VzUG9zPXRoaXMuX3Bvc319LFdyLnByb3RvdHlwZS5fb25Nb3VzZVVwPWZ1bmN0aW9uKHQpe2lmKHMubW91c2VCdXR0b24odCk9PT10aGlzLl9ldmVudEJ1dHRvbilzd2l0Y2godGhpcy5fc3RhdGUpe2Nhc2VcImFjdGl2ZVwiOnRoaXMuX3N0YXRlPVwiZW5hYmxlZFwiLHMuc3VwcHJlc3NDbGljaygpLHRoaXMuX3VuYmluZCgpLHRoaXMuX2RlYWN0aXZhdGUoKSx0aGlzLl9pbmVydGlhbFJvdGF0ZSh0KTticmVhaztjYXNlXCJwZW5kaW5nXCI6dGhpcy5fc3RhdGU9XCJlbmFibGVkXCIsdGhpcy5fdW5iaW5kKCl9fSxXci5wcm90b3R5cGUuX29uQmx1cj1mdW5jdGlvbih0KXtzd2l0Y2godGhpcy5fc3RhdGUpe2Nhc2VcImFjdGl2ZVwiOnRoaXMuX3N0YXRlPVwiZW5hYmxlZFwiLHRoaXMuX3VuYmluZCgpLHRoaXMuX2RlYWN0aXZhdGUoKSx0aGlzLl9maXJlRXZlbnQoXCJyb3RhdGVlbmRcIix0KSx0aGlzLl9waXRjaFdpdGhSb3RhdGUmJnRoaXMuX2ZpcmVFdmVudChcInBpdGNoZW5kXCIsdCksdGhpcy5fZmlyZUV2ZW50KFwibW92ZWVuZFwiLHQpO2JyZWFrO2Nhc2VcInBlbmRpbmdcIjp0aGlzLl9zdGF0ZT1cImVuYWJsZWRcIix0aGlzLl91bmJpbmQoKX19LFdyLnByb3RvdHlwZS5fdW5iaW5kPWZ1bmN0aW9uKCl7dC5kZWZhdWx0LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIix0aGlzLl9vbk1vdXNlTW92ZSx7Y2FwdHVyZTohMH0pLHQuZGVmYXVsdC5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLHRoaXMuX29uTW91c2VVcCksdC5kZWZhdWx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJibHVyXCIsdGhpcy5fb25CbHVyKSxzLmVuYWJsZURyYWcoKX0sV3IucHJvdG90eXBlLl9kZWFjdGl2YXRlPWZ1bmN0aW9uKCl7dGhpcy5fZnJhbWVJZCYmKHRoaXMuX21hcC5fY2FuY2VsUmVuZGVyRnJhbWUodGhpcy5fZnJhbWVJZCksdGhpcy5fZnJhbWVJZD1udWxsKSxkZWxldGUgdGhpcy5fbGFzdE1vdmVFdmVudCxkZWxldGUgdGhpcy5fcHJldmlvdXNQb3N9LFdyLnByb3RvdHlwZS5faW5lcnRpYWxSb3RhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9maXJlRXZlbnQoXCJyb3RhdGVlbmRcIix0KSx0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKTt2YXIgcj10aGlzLl9tYXAsbj1yLmdldEJlYXJpbmcoKSxpPXRoaXMuX2luZXJ0aWEsYT1mdW5jdGlvbigpe01hdGguYWJzKG4pPGUuX2JlYXJpbmdTbmFwP3IucmVzZXROb3J0aCh7bm9Nb3ZlU3RhcnQ6ITB9LHtvcmlnaW5hbEV2ZW50OnR9KTplLl9maXJlRXZlbnQoXCJtb3ZlZW5kXCIsdCksZS5fcGl0Y2hXaXRoUm90YXRlJiZlLl9maXJlRXZlbnQoXCJwaXRjaGVuZFwiLHQpfTtpZihpLmxlbmd0aDwyKWEoKTtlbHNle3ZhciBvPWlbMF0scz1pW2kubGVuZ3RoLTFdLGw9aVtpLmxlbmd0aC0yXSxjPXIuX25vcm1hbGl6ZUJlYXJpbmcobixsWzFdKSx1PXNbMV0tb1sxXSxoPXU8MD8tMToxLGY9KHNbMF0tb1swXSkvMWUzO2lmKDAhPT11JiYwIT09Zil7dmFyIHA9TWF0aC5hYnModSooLjI1L2YpKTtwPjE4MCYmKHA9MTgwKTt2YXIgZD1wLzE4MDtjKz1oKnAqKGQvMiksTWF0aC5hYnMoci5fbm9ybWFsaXplQmVhcmluZyhjLDApKTx0aGlzLl9iZWFyaW5nU25hcCYmKGM9ci5fbm9ybWFsaXplQmVhcmluZygwLGMpKSxyLnJvdGF0ZVRvKGMse2R1cmF0aW9uOjFlMypkLGVhc2luZzpZcixub01vdmVTdGFydDohMH0se29yaWdpbmFsRXZlbnQ6dH0pfWVsc2UgYSgpfX0sV3IucHJvdG90eXBlLl9maXJlRXZlbnQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoZSxyP3tvcmlnaW5hbEV2ZW50OnJ9Ont9KSl9LFdyLnByb3RvdHlwZS5fZHJhaW5JbmVydGlhQnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2luZXJ0aWEsZT1hLm5vdygpO3QubGVuZ3RoPjAmJmUtdFswXVswXT4xNjA7KXQuc2hpZnQoKX07dmFyIFhyPXQuYmV6aWVyKDAsMCwuMywxKSxacj1mdW5jdGlvbihlKXt0aGlzLl9tYXA9ZSx0aGlzLl9lbD1lLmdldENhbnZhc0NvbnRhaW5lcigpLHRoaXMuX3N0YXRlPVwiZGlzYWJsZWRcIix0LmJpbmRBbGwoW1wiX29uTW92ZVwiLFwiX29uTW91c2VVcFwiLFwiX29uVG91Y2hFbmRcIixcIl9vbkJsdXJcIixcIl9vbkRyYWdGcmFtZVwiXSx0aGlzKX07WnIucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVyblwiZGlzYWJsZWRcIiE9PXRoaXMuX3N0YXRlfSxaci5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm5cImFjdGl2ZVwiPT09dGhpcy5fc3RhdGV9LFpyLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fZWwuY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLXRvdWNoLWRyYWctcGFuXCIpLHRoaXMuX3N0YXRlPVwiZW5hYmxlZFwiKX0sWnIucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXtpZih0aGlzLmlzRW5hYmxlZCgpKXN3aXRjaCh0aGlzLl9lbC5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtdG91Y2gtZHJhZy1wYW5cIiksdGhpcy5fc3RhdGUpe2Nhc2VcImFjdGl2ZVwiOnRoaXMuX3N0YXRlPVwiZGlzYWJsZWRcIix0aGlzLl91bmJpbmQoKSx0aGlzLl9kZWFjdGl2YXRlKCksdGhpcy5fZmlyZUV2ZW50KFwiZHJhZ2VuZFwiKSx0aGlzLl9maXJlRXZlbnQoXCJtb3ZlZW5kXCIpO2JyZWFrO2Nhc2VcInBlbmRpbmdcIjp0aGlzLl9zdGF0ZT1cImRpc2FibGVkXCIsdGhpcy5fdW5iaW5kKCk7YnJlYWs7ZGVmYXVsdDp0aGlzLl9zdGF0ZT1cImRpc2FibGVkXCJ9fSxaci5wcm90b3R5cGUub25Nb3VzZURvd249ZnVuY3Rpb24oZSl7XCJlbmFibGVkXCI9PT10aGlzLl9zdGF0ZSYmKGUuY3RybEtleXx8MCE9PXMubW91c2VCdXR0b24oZSl8fChzLmFkZEV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LmRvY3VtZW50LFwibW91c2Vtb3ZlXCIsdGhpcy5fb25Nb3ZlLHtjYXB0dXJlOiEwfSkscy5hZGRFdmVudExpc3RlbmVyKHQuZGVmYXVsdC5kb2N1bWVudCxcIm1vdXNldXBcIix0aGlzLl9vbk1vdXNlVXApLHRoaXMuX3N0YXJ0KGUpKSl9LFpyLnByb3RvdHlwZS5vblRvdWNoU3RhcnQ9ZnVuY3Rpb24oZSl7XCJlbmFibGVkXCI9PT10aGlzLl9zdGF0ZSYmKGUudG91Y2hlcy5sZW5ndGg+MXx8KHMuYWRkRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsXCJ0b3VjaG1vdmVcIix0aGlzLl9vbk1vdmUse2NhcHR1cmU6ITAscGFzc2l2ZTohMX0pLHMuYWRkRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsXCJ0b3VjaGVuZFwiLHRoaXMuX29uVG91Y2hFbmQpLHRoaXMuX3N0YXJ0KGUpKSl9LFpyLnByb3RvdHlwZS5fc3RhcnQ9ZnVuY3Rpb24oZSl7dC5kZWZhdWx0LmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsdGhpcy5fb25CbHVyKSx0aGlzLl9zdGF0ZT1cInBlbmRpbmdcIix0aGlzLl9wcmV2aW91c1Bvcz1zLm1vdXNlUG9zKHRoaXMuX2VsLGUpLHRoaXMuX2luZXJ0aWE9W1thLm5vdygpLHRoaXMuX3ByZXZpb3VzUG9zXV19LFpyLnByb3RvdHlwZS5fb25Nb3ZlPWZ1bmN0aW9uKHQpe3RoaXMuX2xhc3RNb3ZlRXZlbnQ9dCx0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fcG9zPXMubW91c2VQb3ModGhpcy5fZWwsdCksdGhpcy5fZHJhaW5JbmVydGlhQnVmZmVyKCksdGhpcy5faW5lcnRpYS5wdXNoKFthLm5vdygpLHRoaXMuX3Bvc10pLFwicGVuZGluZ1wiPT09dGhpcy5fc3RhdGUmJih0aGlzLl9zdGF0ZT1cImFjdGl2ZVwiLHRoaXMuX2ZpcmVFdmVudChcImRyYWdzdGFydFwiLHQpLHRoaXMuX2ZpcmVFdmVudChcIm1vdmVzdGFydFwiLHQpKSx0aGlzLl9mcmFtZUlkfHwodGhpcy5fZnJhbWVJZD10aGlzLl9tYXAuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9vbkRyYWdGcmFtZSkpfSxaci5wcm90b3R5cGUuX29uRHJhZ0ZyYW1lPWZ1bmN0aW9uKCl7dGhpcy5fZnJhbWVJZD1udWxsO3ZhciB0PXRoaXMuX2xhc3RNb3ZlRXZlbnQ7aWYodCl7dmFyIGU9dGhpcy5fbWFwLnRyYW5zZm9ybTtlLnNldExvY2F0aW9uQXRQb2ludChlLnBvaW50TG9jYXRpb24odGhpcy5fcHJldmlvdXNQb3MpLHRoaXMuX3BvcyksdGhpcy5fZmlyZUV2ZW50KFwiZHJhZ1wiLHQpLHRoaXMuX2ZpcmVFdmVudChcIm1vdmVcIix0KSx0aGlzLl9wcmV2aW91c1Bvcz10aGlzLl9wb3MsZGVsZXRlIHRoaXMuX2xhc3RNb3ZlRXZlbnR9fSxaci5wcm90b3R5cGUuX29uTW91c2VVcD1mdW5jdGlvbih0KXtpZigwPT09cy5tb3VzZUJ1dHRvbih0KSlzd2l0Y2godGhpcy5fc3RhdGUpe2Nhc2VcImFjdGl2ZVwiOnRoaXMuX3N0YXRlPVwiZW5hYmxlZFwiLHMuc3VwcHJlc3NDbGljaygpLHRoaXMuX3VuYmluZCgpLHRoaXMuX2RlYWN0aXZhdGUoKSx0aGlzLl9pbmVydGlhbFBhbih0KTticmVhaztjYXNlXCJwZW5kaW5nXCI6dGhpcy5fc3RhdGU9XCJlbmFibGVkXCIsdGhpcy5fdW5iaW5kKCl9fSxaci5wcm90b3R5cGUuX29uVG91Y2hFbmQ9ZnVuY3Rpb24odCl7c3dpdGNoKHRoaXMuX3N0YXRlKXtjYXNlXCJhY3RpdmVcIjp0aGlzLl9zdGF0ZT1cImVuYWJsZWRcIix0aGlzLl91bmJpbmQoKSx0aGlzLl9kZWFjdGl2YXRlKCksdGhpcy5faW5lcnRpYWxQYW4odCk7YnJlYWs7Y2FzZVwicGVuZGluZ1wiOnRoaXMuX3N0YXRlPVwiZW5hYmxlZFwiLHRoaXMuX3VuYmluZCgpfX0sWnIucHJvdG90eXBlLl9vbkJsdXI9ZnVuY3Rpb24odCl7c3dpdGNoKHRoaXMuX3N0YXRlKXtjYXNlXCJhY3RpdmVcIjp0aGlzLl9zdGF0ZT1cImVuYWJsZWRcIix0aGlzLl91bmJpbmQoKSx0aGlzLl9kZWFjdGl2YXRlKCksdGhpcy5fZmlyZUV2ZW50KFwiZHJhZ2VuZFwiLHQpLHRoaXMuX2ZpcmVFdmVudChcIm1vdmVlbmRcIix0KTticmVhaztjYXNlXCJwZW5kaW5nXCI6dGhpcy5fc3RhdGU9XCJlbmFibGVkXCIsdGhpcy5fdW5iaW5kKCl9fSxaci5wcm90b3R5cGUuX3VuYmluZD1mdW5jdGlvbigpe3MucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsXCJ0b3VjaG1vdmVcIix0aGlzLl9vbk1vdmUse2NhcHR1cmU6ITAscGFzc2l2ZTohMX0pLHMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsXCJ0b3VjaGVuZFwiLHRoaXMuX29uVG91Y2hFbmQpLHMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsXCJtb3VzZW1vdmVcIix0aGlzLl9vbk1vdmUse2NhcHR1cmU6ITB9KSxzLnJlbW92ZUV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LmRvY3VtZW50LFwibW91c2V1cFwiLHRoaXMuX29uTW91c2VVcCkscy5yZW1vdmVFdmVudExpc3RlbmVyKHQuZGVmYXVsdCxcImJsdXJcIix0aGlzLl9vbkJsdXIpfSxaci5wcm90b3R5cGUuX2RlYWN0aXZhdGU9ZnVuY3Rpb24oKXt0aGlzLl9mcmFtZUlkJiYodGhpcy5fbWFwLl9jYW5jZWxSZW5kZXJGcmFtZSh0aGlzLl9mcmFtZUlkKSx0aGlzLl9mcmFtZUlkPW51bGwpLGRlbGV0ZSB0aGlzLl9sYXN0TW92ZUV2ZW50LGRlbGV0ZSB0aGlzLl9wcmV2aW91c1BvcyxkZWxldGUgdGhpcy5fcG9zfSxaci5wcm90b3R5cGUuX2luZXJ0aWFsUGFuPWZ1bmN0aW9uKHQpe3RoaXMuX2ZpcmVFdmVudChcImRyYWdlbmRcIix0KSx0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKTt2YXIgZT10aGlzLl9pbmVydGlhO2lmKGUubGVuZ3RoPDIpdGhpcy5fZmlyZUV2ZW50KFwibW92ZWVuZFwiLHQpO2Vsc2V7dmFyIHI9ZVtlLmxlbmd0aC0xXSxuPWVbMF0saT1yWzFdLnN1YihuWzFdKSxhPShyWzBdLW5bMF0pLzFlMztpZigwPT09YXx8clsxXS5lcXVhbHMoblsxXSkpdGhpcy5fZmlyZUV2ZW50KFwibW92ZWVuZFwiLHQpO2Vsc2V7dmFyIG89aS5tdWx0KC4zL2EpLHM9by5tYWcoKTtzPjE0MDAmJihzPTE0MDAsby5fdW5pdCgpLl9tdWx0KHMpKTt2YXIgbD1zLzc1MCxjPW8ubXVsdCgtbC8yKTt0aGlzLl9tYXAucGFuQnkoYyx7ZHVyYXRpb246MWUzKmwsZWFzaW5nOlhyLG5vTW92ZVN0YXJ0OiEwfSx7b3JpZ2luYWxFdmVudDp0fSl9fX0sWnIucHJvdG90eXBlLl9maXJlRXZlbnQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoZSxyP3tvcmlnaW5hbEV2ZW50OnJ9Ont9KSl9LFpyLnByb3RvdHlwZS5fZHJhaW5JbmVydGlhQnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2luZXJ0aWEsZT1hLm5vdygpO3QubGVuZ3RoPjAmJmUtdFswXVswXT4xNjA7KXQuc2hpZnQoKX07dmFyICRyPWZ1bmN0aW9uKGUpe3RoaXMuX21hcD1lLHRoaXMuX2VsPWUuZ2V0Q2FudmFzQ29udGFpbmVyKCksdC5iaW5kQWxsKFtcIl9vbktleURvd25cIl0sdGhpcyl9O2Z1bmN0aW9uIEpyKHQpe3JldHVybiB0KigyLXQpfSRyLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2VuYWJsZWR9LCRyLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fZWwuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIix0aGlzLl9vbktleURvd24sITEpLHRoaXMuX2VuYWJsZWQ9ITApfSwkci5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCkmJih0aGlzLl9lbC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLHRoaXMuX29uS2V5RG93biksdGhpcy5fZW5hYmxlZD0hMSl9LCRyLnByb3RvdHlwZS5fb25LZXlEb3duPWZ1bmN0aW9uKHQpe2lmKCEodC5hbHRLZXl8fHQuY3RybEtleXx8dC5tZXRhS2V5KSl7dmFyIGU9MCxyPTAsbj0wLGk9MCxhPTA7c3dpdGNoKHQua2V5Q29kZSl7Y2FzZSA2MTpjYXNlIDEwNzpjYXNlIDE3MTpjYXNlIDE4NzplPTE7YnJlYWs7Y2FzZSAxODk6Y2FzZSAxMDk6Y2FzZSAxNzM6ZT0tMTticmVhaztjYXNlIDM3OnQuc2hpZnRLZXk/cj0tMToodC5wcmV2ZW50RGVmYXVsdCgpLGk9LTEpO2JyZWFrO2Nhc2UgMzk6dC5zaGlmdEtleT9yPTE6KHQucHJldmVudERlZmF1bHQoKSxpPTEpO2JyZWFrO2Nhc2UgMzg6dC5zaGlmdEtleT9uPTE6KHQucHJldmVudERlZmF1bHQoKSxhPS0xKTticmVhaztjYXNlIDQwOnQuc2hpZnRLZXk/bj0tMTooYT0xLHQucHJldmVudERlZmF1bHQoKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59dmFyIG89dGhpcy5fbWFwLHM9by5nZXRab29tKCksbD17ZHVyYXRpb246MzAwLGRlbGF5RW5kRXZlbnRzOjUwMCxlYXNpbmc6SnIsem9vbTplP01hdGgucm91bmQocykrZSoodC5zaGlmdEtleT8yOjEpOnMsYmVhcmluZzpvLmdldEJlYXJpbmcoKSsxNSpyLHBpdGNoOm8uZ2V0UGl0Y2goKSsxMCpuLG9mZnNldDpbMTAwKi1pLDEwMCotYV0sY2VudGVyOm8uZ2V0Q2VudGVyKCl9O28uZWFzZVRvKGwse29yaWdpbmFsRXZlbnQ6dH0pfX07dmFyIEtyPWZ1bmN0aW9uKGUpe3RoaXMuX21hcD1lLHQuYmluZEFsbChbXCJfb25EYmxDbGlja1wiLFwiX29uWm9vbUVuZFwiXSx0aGlzKX07S3IucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZW5hYmxlZH0sS3IucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9hY3RpdmV9LEtyLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fZW5hYmxlZD0hMCl9LEtyLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VuYWJsZWQ9ITEpfSxLci5wcm90b3R5cGUub25Ub3VjaFN0YXJ0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5pc0VuYWJsZWQoKSYmKHQucG9pbnRzLmxlbmd0aD4xfHwodGhpcy5fdGFwcGVkPyhjbGVhclRpbWVvdXQodGhpcy5fdGFwcGVkKSx0aGlzLl90YXBwZWQ9bnVsbCx0aGlzLl96b29tKHQpKTp0aGlzLl90YXBwZWQ9c2V0VGltZW91dChmdW5jdGlvbigpe2UuX3RhcHBlZD1udWxsfSwzMDApKSl9LEtyLnByb3RvdHlwZS5vbkRibENsaWNrPWZ1bmN0aW9uKHQpe3RoaXMuaXNFbmFibGVkKCkmJih0Lm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKSx0aGlzLl96b29tKHQpKX0sS3IucHJvdG90eXBlLl96b29tPWZ1bmN0aW9uKHQpe3RoaXMuX2FjdGl2ZT0hMCx0aGlzLl9tYXAub24oXCJ6b29tZW5kXCIsdGhpcy5fb25ab29tRW5kKSx0aGlzLl9tYXAuem9vbVRvKHRoaXMuX21hcC5nZXRab29tKCkrKHQub3JpZ2luYWxFdmVudC5zaGlmdEtleT8tMToxKSx7YXJvdW5kOnQubG5nTGF0fSx0KX0sS3IucHJvdG90eXBlLl9vblpvb21FbmQ9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITEsdGhpcy5fbWFwLm9mZihcInpvb21lbmRcIix0aGlzLl9vblpvb21FbmQpfTt2YXIgUXI9dC5iZXppZXIoMCwwLC4xNSwxKSx0bj1mdW5jdGlvbihlKXt0aGlzLl9tYXA9ZSx0aGlzLl9lbD1lLmdldENhbnZhc0NvbnRhaW5lcigpLHQuYmluZEFsbChbXCJfb25Nb3ZlXCIsXCJfb25FbmRcIixcIl9vblRvdWNoRnJhbWVcIl0sdGhpcyl9O3RuLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2VuYWJsZWR9LHRuLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24odCl7dGhpcy5pc0VuYWJsZWQoKXx8KHRoaXMuX2VsLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC10b3VjaC16b29tLXJvdGF0ZVwiKSx0aGlzLl9lbmFibGVkPSEwLHRoaXMuX2Fyb3VuZENlbnRlcj0hIXQmJlwiY2VudGVyXCI9PT10LmFyb3VuZCl9LHRuLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VsLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC10b3VjaC16b29tLXJvdGF0ZVwiKSx0aGlzLl9lbmFibGVkPSExKX0sdG4ucHJvdG90eXBlLmRpc2FibGVSb3RhdGlvbj1mdW5jdGlvbigpe3RoaXMuX3JvdGF0aW9uRGlzYWJsZWQ9ITB9LHRuLnByb3RvdHlwZS5lbmFibGVSb3RhdGlvbj1mdW5jdGlvbigpe3RoaXMuX3JvdGF0aW9uRGlzYWJsZWQ9ITF9LHRuLnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKGUpe2lmKHRoaXMuaXNFbmFibGVkKCkmJjI9PT1lLnRvdWNoZXMubGVuZ3RoKXt2YXIgcj1zLm1vdXNlUG9zKHRoaXMuX2VsLGUudG91Y2hlc1swXSksbj1zLm1vdXNlUG9zKHRoaXMuX2VsLGUudG91Y2hlc1sxXSk7dGhpcy5fc3RhcnRWZWM9ci5zdWIobiksdGhpcy5fZ2VzdHVyZUludGVudD12b2lkIDAsdGhpcy5faW5lcnRpYT1bXSxzLmFkZEV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LmRvY3VtZW50LFwidG91Y2htb3ZlXCIsdGhpcy5fb25Nb3ZlLHtwYXNzaXZlOiExfSkscy5hZGRFdmVudExpc3RlbmVyKHQuZGVmYXVsdC5kb2N1bWVudCxcInRvdWNoZW5kXCIsdGhpcy5fb25FbmQpfX0sdG4ucHJvdG90eXBlLl9nZXRUb3VjaEV2ZW50RGF0YT1mdW5jdGlvbih0KXt2YXIgZT1zLm1vdXNlUG9zKHRoaXMuX2VsLHQudG91Y2hlc1swXSkscj1zLm1vdXNlUG9zKHRoaXMuX2VsLHQudG91Y2hlc1sxXSksbj1lLnN1YihyKTtyZXR1cm57dmVjOm4sY2VudGVyOmUuYWRkKHIpLmRpdigyKSxzY2FsZTpuLm1hZygpL3RoaXMuX3N0YXJ0VmVjLm1hZygpLGJlYXJpbmc6dGhpcy5fcm90YXRpb25EaXNhYmxlZD8wOjE4MCpuLmFuZ2xlV2l0aCh0aGlzLl9zdGFydFZlYykvTWF0aC5QSX19LHRuLnByb3RvdHlwZS5fb25Nb3ZlPWZ1bmN0aW9uKGUpe2lmKDI9PT1lLnRvdWNoZXMubGVuZ3RoKXt2YXIgcj10aGlzLl9nZXRUb3VjaEV2ZW50RGF0YShlKSxuPXIudmVjLGk9ci5zY2FsZSxhPXIuYmVhcmluZztpZighdGhpcy5fZ2VzdHVyZUludGVudCl7dmFyIG89TWF0aC5hYnMoMS1pKT4uMTU7TWF0aC5hYnMoYSk+MTA/dGhpcy5fZ2VzdHVyZUludGVudD1cInJvdGF0ZVwiOm8mJih0aGlzLl9nZXN0dXJlSW50ZW50PVwiem9vbVwiKSx0aGlzLl9nZXN0dXJlSW50ZW50JiYodGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQodGhpcy5fZ2VzdHVyZUludGVudCtcInN0YXJ0XCIse29yaWdpbmFsRXZlbnQ6ZX0pKSx0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudChcIm1vdmVzdGFydFwiLHtvcmlnaW5hbEV2ZW50OmV9KSksdGhpcy5fc3RhcnRWZWM9bil9dGhpcy5fbGFzdFRvdWNoRXZlbnQ9ZSx0aGlzLl9mcmFtZUlkfHwodGhpcy5fZnJhbWVJZD10aGlzLl9tYXAuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9vblRvdWNoRnJhbWUpKSxlLnByZXZlbnREZWZhdWx0KCl9fSx0bi5wcm90b3R5cGUuX29uVG91Y2hGcmFtZT1mdW5jdGlvbigpe3RoaXMuX2ZyYW1lSWQ9bnVsbDt2YXIgZT10aGlzLl9nZXN0dXJlSW50ZW50O2lmKGUpe3ZhciByPXRoaXMuX21hcC50cmFuc2Zvcm07dGhpcy5fc3RhcnRTY2FsZXx8KHRoaXMuX3N0YXJ0U2NhbGU9ci5zY2FsZSx0aGlzLl9zdGFydEJlYXJpbmc9ci5iZWFyaW5nKTt2YXIgbj10aGlzLl9nZXRUb3VjaEV2ZW50RGF0YSh0aGlzLl9sYXN0VG91Y2hFdmVudCksaT1uLmNlbnRlcixvPW4uYmVhcmluZyxzPW4uc2NhbGUsbD1yLnBvaW50TG9jYXRpb24oaSksYz1yLmxvY2F0aW9uUG9pbnQobCk7XCJyb3RhdGVcIj09PWUmJihyLmJlYXJpbmc9dGhpcy5fc3RhcnRCZWFyaW5nK28pLHIuem9vbT1yLnNjYWxlWm9vbSh0aGlzLl9zdGFydFNjYWxlKnMpLHIuc2V0TG9jYXRpb25BdFBvaW50KGwsYyksdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoZSx7b3JpZ2luYWxFdmVudDp0aGlzLl9sYXN0VG91Y2hFdmVudH0pKSx0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudChcIm1vdmVcIix7b3JpZ2luYWxFdmVudDp0aGlzLl9sYXN0VG91Y2hFdmVudH0pKSx0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKSx0aGlzLl9pbmVydGlhLnB1c2goW2Eubm93KCkscyxpXSl9fSx0bi5wcm90b3R5cGUuX29uRW5kPWZ1bmN0aW9uKGUpe3MucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsXCJ0b3VjaG1vdmVcIix0aGlzLl9vbk1vdmUse3Bhc3NpdmU6ITF9KSxzLnJlbW92ZUV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LmRvY3VtZW50LFwidG91Y2hlbmRcIix0aGlzLl9vbkVuZCk7dmFyIHI9dGhpcy5fZ2VzdHVyZUludGVudCxuPXRoaXMuX3N0YXJ0U2NhbGU7aWYodGhpcy5fZnJhbWVJZCYmKHRoaXMuX21hcC5fY2FuY2VsUmVuZGVyRnJhbWUodGhpcy5fZnJhbWVJZCksdGhpcy5fZnJhbWVJZD1udWxsKSxkZWxldGUgdGhpcy5fZ2VzdHVyZUludGVudCxkZWxldGUgdGhpcy5fc3RhcnRTY2FsZSxkZWxldGUgdGhpcy5fc3RhcnRCZWFyaW5nLGRlbGV0ZSB0aGlzLl9sYXN0VG91Y2hFdmVudCxyKXt0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudChyK1wiZW5kXCIse29yaWdpbmFsRXZlbnQ6ZX0pKSx0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKTt2YXIgaT10aGlzLl9pbmVydGlhLGE9dGhpcy5fbWFwO2lmKGkubGVuZ3RoPDIpYS5zbmFwVG9Ob3J0aCh7fSx7b3JpZ2luYWxFdmVudDplfSk7ZWxzZXt2YXIgbz1pW2kubGVuZ3RoLTFdLGw9aVswXSxjPWEudHJhbnNmb3JtLnNjYWxlWm9vbShuKm9bMV0pLHU9YS50cmFuc2Zvcm0uc2NhbGVab29tKG4qbFsxXSksaD1jLXUsZj0ob1swXS1sWzBdKS8xZTMscD1vWzJdO2lmKDAhPT1mJiZjIT09dSl7dmFyIGQ9LjE1KmgvZjtNYXRoLmFicyhkKT4yLjUmJihkPWQ+MD8yLjU6LTIuNSk7dmFyIGc9MWUzKk1hdGguYWJzKGQvKDEyKi4xNSkpLHY9YytkKmcvMmUzO3Y8MCYmKHY9MCksYS5lYXNlVG8oe3pvb206dixkdXJhdGlvbjpnLGVhc2luZzpRcixhcm91bmQ6dGhpcy5fYXJvdW5kQ2VudGVyP2EuZ2V0Q2VudGVyKCk6YS51bnByb2plY3QocCksbm9Nb3ZlU3RhcnQ6ITB9LHtvcmlnaW5hbEV2ZW50OmV9KX1lbHNlIGEuc25hcFRvTm9ydGgoe30se29yaWdpbmFsRXZlbnQ6ZX0pfX19LHRuLnByb3RvdHlwZS5fZHJhaW5JbmVydGlhQnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2luZXJ0aWEsZT1hLm5vdygpO3QubGVuZ3RoPjImJmUtdFswXVswXT4xNjA7KXQuc2hpZnQoKX07dmFyIGVuPXtzY3JvbGxab29tOkhyLGJveFpvb206R3IsZHJhZ1JvdGF0ZTpXcixkcmFnUGFuOlpyLGtleWJvYXJkOiRyLGRvdWJsZUNsaWNrWm9vbTpLcix0b3VjaFpvb21Sb3RhdGU6dG59LHJuPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuKXtlLmNhbGwodGhpcyksdGhpcy5fbW92aW5nPSExLHRoaXMuX3pvb21pbmc9ITEsdGhpcy50cmFuc2Zvcm09cix0aGlzLl9iZWFyaW5nU25hcD1uLmJlYXJpbmdTbmFwLHQuYmluZEFsbChbXCJfcmVuZGVyRnJhbWVDYWxsYmFja1wiXSx0aGlzKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUuZ2V0Q2VudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLmNlbnRlcn0sci5wcm90b3R5cGUuc2V0Q2VudGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuanVtcFRvKHtjZW50ZXI6dH0sZSl9LHIucHJvdG90eXBlLnBhbkJ5PWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT10LmRlZmF1bHQkMS5jb252ZXJ0KGUpLm11bHQoLTEpLHRoaXMucGFuVG8odGhpcy50cmFuc2Zvcm0uY2VudGVyLHQuZXh0ZW5kKHtvZmZzZXQ6ZX0sciksbil9LHIucHJvdG90eXBlLnBhblRvPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdGhpcy5lYXNlVG8odC5leHRlbmQoe2NlbnRlcjplfSxyKSxuKX0sci5wcm90b3R5cGUuZ2V0Wm9vbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS56b29tfSxyLnByb3RvdHlwZS5zZXRab29tPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuanVtcFRvKHt6b29tOnR9LGUpLHRoaXN9LHIucHJvdG90eXBlLnpvb21Ubz1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHRoaXMuZWFzZVRvKHQuZXh0ZW5kKHt6b29tOmV9LHIpLG4pfSxyLnByb3RvdHlwZS56b29tSW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy56b29tVG8odGhpcy5nZXRab29tKCkrMSx0LGUpLHRoaXN9LHIucHJvdG90eXBlLnpvb21PdXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy56b29tVG8odGhpcy5nZXRab29tKCktMSx0LGUpLHRoaXN9LHIucHJvdG90eXBlLmdldEJlYXJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0uYmVhcmluZ30sci5wcm90b3R5cGUuc2V0QmVhcmluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmp1bXBUbyh7YmVhcmluZzp0fSxlKSx0aGlzfSxyLnByb3RvdHlwZS5yb3RhdGVUbz1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHRoaXMuZWFzZVRvKHQuZXh0ZW5kKHtiZWFyaW5nOmV9LHIpLG4pfSxyLnByb3RvdHlwZS5yZXNldE5vcnRoPWZ1bmN0aW9uKGUscil7cmV0dXJuIHRoaXMucm90YXRlVG8oMCx0LmV4dGVuZCh7ZHVyYXRpb246MWUzfSxlKSxyKSx0aGlzfSxyLnByb3RvdHlwZS5zbmFwVG9Ob3J0aD1mdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmFicyh0aGlzLmdldEJlYXJpbmcoKSk8dGhpcy5fYmVhcmluZ1NuYXA/dGhpcy5yZXNldE5vcnRoKHQsZSk6dGhpc30sci5wcm90b3R5cGUuZ2V0UGl0Y2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ucGl0Y2h9LHIucHJvdG90eXBlLnNldFBpdGNoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuanVtcFRvKHtwaXRjaDp0fSxlKSx0aGlzfSxyLnByb3RvdHlwZS5maXRCb3VuZHM9ZnVuY3Rpb24oZSxyLG4pe2lmKFwibnVtYmVyXCI9PXR5cGVvZihyPXQuZXh0ZW5kKHtwYWRkaW5nOnt0b3A6MCxib3R0b206MCxyaWdodDowLGxlZnQ6MH0sb2Zmc2V0OlswLDBdLG1heFpvb206dGhpcy50cmFuc2Zvcm0ubWF4Wm9vbX0scikpLnBhZGRpbmcpe3ZhciBpPXIucGFkZGluZztyLnBhZGRpbmc9e3RvcDppLGJvdHRvbTppLHJpZ2h0OmksbGVmdDppfX1pZighdC5kZWZhdWx0JDEwKE9iamVjdC5rZXlzKHIucGFkZGluZykuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6MH0pLFtcImJvdHRvbVwiLFwibGVmdFwiLFwicmlnaHRcIixcInRvcFwiXSkpcmV0dXJuIHQud2Fybk9uY2UoXCJvcHRpb25zLnBhZGRpbmcgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciwgb3IgYW4gT2JqZWN0IHdpdGgga2V5cyAnYm90dG9tJywgJ2xlZnQnLCAncmlnaHQnLCAndG9wJ1wiKSx0aGlzO2U9WS5jb252ZXJ0KGUpO3ZhciBhPVsoci5wYWRkaW5nLmxlZnQtci5wYWRkaW5nLnJpZ2h0KS8yLChyLnBhZGRpbmcudG9wLXIucGFkZGluZy5ib3R0b20pLzJdLG89TWF0aC5taW4oci5wYWRkaW5nLnJpZ2h0LHIucGFkZGluZy5sZWZ0KSxzPU1hdGgubWluKHIucGFkZGluZy50b3Asci5wYWRkaW5nLmJvdHRvbSk7ci5vZmZzZXQ9W3Iub2Zmc2V0WzBdK2FbMF0sci5vZmZzZXRbMV0rYVsxXV07dmFyIGw9dC5kZWZhdWx0JDEuY29udmVydChyLm9mZnNldCksYz10aGlzLnRyYW5zZm9ybSx1PWMucHJvamVjdChlLmdldE5vcnRoV2VzdCgpKSxoPWMucHJvamVjdChlLmdldFNvdXRoRWFzdCgpKSxmPWguc3ViKHUpLHA9KGMud2lkdGgtMipvLTIqTWF0aC5hYnMobC54KSkvZi54LGQ9KGMuaGVpZ2h0LTIqcy0yKk1hdGguYWJzKGwueSkpL2YueTtyZXR1cm4gZDwwfHxwPDA/KHQud2Fybk9uY2UoXCJNYXAgY2Fubm90IGZpdCB3aXRoaW4gY2FudmFzIHdpdGggdGhlIGdpdmVuIGJvdW5kcywgcGFkZGluZywgYW5kL29yIG9mZnNldC5cIiksdGhpcyk6KHIuY2VudGVyPWMudW5wcm9qZWN0KHUuYWRkKGgpLmRpdigyKSksci56b29tPU1hdGgubWluKGMuc2NhbGVab29tKGMuc2NhbGUqTWF0aC5taW4ocCxkKSksci5tYXhab29tKSxyLmJlYXJpbmc9MCxyLmxpbmVhcj90aGlzLmVhc2VUbyhyLG4pOnRoaXMuZmx5VG8ocixuKSl9LHIucHJvdG90eXBlLmp1bXBUbz1mdW5jdGlvbihlLHIpe3RoaXMuc3RvcCgpO3ZhciBuPXRoaXMudHJhbnNmb3JtLGk9ITEsYT0hMSxvPSExO3JldHVyblwiem9vbVwiaW4gZSYmbi56b29tIT09K2Uuem9vbSYmKGk9ITAsbi56b29tPStlLnpvb20pLHZvaWQgMCE9PWUuY2VudGVyJiYobi5jZW50ZXI9Ry5jb252ZXJ0KGUuY2VudGVyKSksXCJiZWFyaW5nXCJpbiBlJiZuLmJlYXJpbmchPT0rZS5iZWFyaW5nJiYoYT0hMCxuLmJlYXJpbmc9K2UuYmVhcmluZyksXCJwaXRjaFwiaW4gZSYmbi5waXRjaCE9PStlLnBpdGNoJiYobz0hMCxuLnBpdGNoPStlLnBpdGNoKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJtb3Zlc3RhcnRcIixyKSkuZmlyZShuZXcgdC5FdmVudChcIm1vdmVcIixyKSksaSYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiem9vbXN0YXJ0XCIscikpLmZpcmUobmV3IHQuRXZlbnQoXCJ6b29tXCIscikpLmZpcmUobmV3IHQuRXZlbnQoXCJ6b29tZW5kXCIscikpLGEmJnRoaXMuZmlyZShuZXcgdC5FdmVudChcInJvdGF0ZXN0YXJ0XCIscikpLmZpcmUobmV3IHQuRXZlbnQoXCJyb3RhdGVcIixyKSkuZmlyZShuZXcgdC5FdmVudChcInJvdGF0ZWVuZFwiLHIpKSxvJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJwaXRjaHN0YXJ0XCIscikpLmZpcmUobmV3IHQuRXZlbnQoXCJwaXRjaFwiLHIpKS5maXJlKG5ldyB0LkV2ZW50KFwicGl0Y2hlbmRcIixyKSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwibW92ZWVuZFwiLHIpKX0sci5wcm90b3R5cGUuZWFzZVRvPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpczt0aGlzLnN0b3AoKSwhMT09PShlPXQuZXh0ZW5kKHtvZmZzZXQ6WzAsMF0sZHVyYXRpb246NTAwLGVhc2luZzp0LmVhc2V9LGUpKS5hbmltYXRlJiYoZS5kdXJhdGlvbj0wKTt2YXIgaT10aGlzLnRyYW5zZm9ybSxhPXRoaXMuZ2V0Wm9vbSgpLG89dGhpcy5nZXRCZWFyaW5nKCkscz10aGlzLmdldFBpdGNoKCksbD1cInpvb21cImluIGU/K2Uuem9vbTphLGM9XCJiZWFyaW5nXCJpbiBlP3RoaXMuX25vcm1hbGl6ZUJlYXJpbmcoZS5iZWFyaW5nLG8pOm8sdT1cInBpdGNoXCJpbiBlPytlLnBpdGNoOnMsaD1pLmNlbnRlclBvaW50LmFkZCh0LmRlZmF1bHQkMS5jb252ZXJ0KGUub2Zmc2V0KSksZj1pLnBvaW50TG9jYXRpb24oaCkscD1HLmNvbnZlcnQoZS5jZW50ZXJ8fGYpO3RoaXMuX25vcm1hbGl6ZUNlbnRlcihwKTt2YXIgZCxnLHY9aS5wcm9qZWN0KGYpLG09aS5wcm9qZWN0KHApLnN1Yih2KSx5PWkuem9vbVNjYWxlKGwtYSk7cmV0dXJuIGUuYXJvdW5kJiYoZD1HLmNvbnZlcnQoZS5hcm91bmQpLGc9aS5sb2NhdGlvblBvaW50KGQpKSx0aGlzLl96b29taW5nPWwhPT1hLHRoaXMuX3JvdGF0aW5nPW8hPT1jLHRoaXMuX3BpdGNoaW5nPXUhPT1zLHRoaXMuX3ByZXBhcmVFYXNlKHIsZS5ub01vdmVTdGFydCksY2xlYXJUaW1lb3V0KHRoaXMuX2Vhc2VFbmRUaW1lb3V0SUQpLHRoaXMuX2Vhc2UoZnVuY3Rpb24oZSl7aWYobi5fem9vbWluZyYmKGkuem9vbT10Lm51bWJlcihhLGwsZSkpLG4uX3JvdGF0aW5nJiYoaS5iZWFyaW5nPXQubnVtYmVyKG8sYyxlKSksbi5fcGl0Y2hpbmcmJihpLnBpdGNoPXQubnVtYmVyKHMsdSxlKSksZClpLnNldExvY2F0aW9uQXRQb2ludChkLGcpO2Vsc2V7dmFyIGY9aS56b29tU2NhbGUoaS56b29tLWEpLHA9bD5hP01hdGgubWluKDIseSk6TWF0aC5tYXgoLjUseSkseD1NYXRoLnBvdyhwLDEtZSksYj1pLnVucHJvamVjdCh2LmFkZChtLm11bHQoZSp4KSkubXVsdChmKSk7aS5zZXRMb2NhdGlvbkF0UG9pbnQoaS5yZW5kZXJXb3JsZENvcGllcz9iLndyYXAoKTpiLGgpfW4uX2ZpcmVNb3ZlRXZlbnRzKHIpfSxmdW5jdGlvbigpe2UuZGVsYXlFbmRFdmVudHM/bi5fZWFzZUVuZFRpbWVvdXRJRD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2FmdGVyRWFzZShyKX0sZS5kZWxheUVuZEV2ZW50cyk6bi5fYWZ0ZXJFYXNlKHIpfSxlKSx0aGlzfSxyLnByb3RvdHlwZS5fcHJlcGFyZUVhc2U9ZnVuY3Rpb24oZSxyKXt0aGlzLl9tb3Zpbmc9ITAscnx8dGhpcy5maXJlKG5ldyB0LkV2ZW50KFwibW92ZXN0YXJ0XCIsZSkpLHRoaXMuX3pvb21pbmcmJnRoaXMuZmlyZShuZXcgdC5FdmVudChcInpvb21zdGFydFwiLGUpKSx0aGlzLl9yb3RhdGluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwicm90YXRlc3RhcnRcIixlKSksdGhpcy5fcGl0Y2hpbmcmJnRoaXMuZmlyZShuZXcgdC5FdmVudChcInBpdGNoc3RhcnRcIixlKSl9LHIucHJvdG90eXBlLl9maXJlTW92ZUV2ZW50cz1mdW5jdGlvbihlKXt0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJtb3ZlXCIsZSkpLHRoaXMuX3pvb21pbmcmJnRoaXMuZmlyZShuZXcgdC5FdmVudChcInpvb21cIixlKSksdGhpcy5fcm90YXRpbmcmJnRoaXMuZmlyZShuZXcgdC5FdmVudChcInJvdGF0ZVwiLGUpKSx0aGlzLl9waXRjaGluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwicGl0Y2hcIixlKSl9LHIucHJvdG90eXBlLl9hZnRlckVhc2U9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fem9vbWluZyxuPXRoaXMuX3JvdGF0aW5nLGk9dGhpcy5fcGl0Y2hpbmc7dGhpcy5fbW92aW5nPSExLHRoaXMuX3pvb21pbmc9ITEsdGhpcy5fcm90YXRpbmc9ITEsdGhpcy5fcGl0Y2hpbmc9ITEsciYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwiem9vbWVuZFwiLGUpKSxuJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJyb3RhdGVlbmRcIixlKSksaSYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwicGl0Y2hlbmRcIixlKSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwibW92ZWVuZFwiLGUpKX0sci5wcm90b3R5cGUuZmx5VG89ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO3RoaXMuc3RvcCgpLGU9dC5leHRlbmQoe29mZnNldDpbMCwwXSxzcGVlZDoxLjIsY3VydmU6MS40MixlYXNpbmc6dC5lYXNlfSxlKTt2YXIgaT10aGlzLnRyYW5zZm9ybSxhPXRoaXMuZ2V0Wm9vbSgpLG89dGhpcy5nZXRCZWFyaW5nKCkscz10aGlzLmdldFBpdGNoKCksbD1cInpvb21cImluIGU/dC5jbGFtcCgrZS56b29tLGkubWluWm9vbSxpLm1heFpvb20pOmEsYz1cImJlYXJpbmdcImluIGU/dGhpcy5fbm9ybWFsaXplQmVhcmluZyhlLmJlYXJpbmcsbyk6byx1PVwicGl0Y2hcImluIGU/K2UucGl0Y2g6cyxoPWkuem9vbVNjYWxlKGwtYSksZj1pLmNlbnRlclBvaW50LmFkZCh0LmRlZmF1bHQkMS5jb252ZXJ0KGUub2Zmc2V0KSkscD1pLnBvaW50TG9jYXRpb24oZiksZD1HLmNvbnZlcnQoZS5jZW50ZXJ8fHApO3RoaXMuX25vcm1hbGl6ZUNlbnRlcihkKTt2YXIgZz1pLnByb2plY3QocCksdj1pLnByb2plY3QoZCkuc3ViKGcpLG09ZS5jdXJ2ZSx5PU1hdGgubWF4KGkud2lkdGgsaS5oZWlnaHQpLHg9eS9oLGI9di5tYWcoKTtpZihcIm1pblpvb21cImluIGUpe3ZhciBfPXQuY2xhbXAoTWF0aC5taW4oZS5taW5ab29tLGEsbCksaS5taW5ab29tLGkubWF4Wm9vbSksdz15L2kuem9vbVNjYWxlKF8tYSk7bT1NYXRoLnNxcnQody9iKjIpfXZhciBrPW0qbTtmdW5jdGlvbiBBKHQpe3ZhciBlPSh4KngteSp5Kyh0Py0xOjEpKmsqaypiKmIpLygyKih0P3g6eSkqaypiKTtyZXR1cm4gTWF0aC5sb2coTWF0aC5zcXJ0KGUqZSsxKS1lKX1mdW5jdGlvbiBUKHQpe3JldHVybihNYXRoLmV4cCh0KS1NYXRoLmV4cCgtdCkpLzJ9ZnVuY3Rpb24gTSh0KXtyZXR1cm4oTWF0aC5leHAodCkrTWF0aC5leHAoLXQpKS8yfXZhciBTPUEoMCksRT1mdW5jdGlvbih0KXtyZXR1cm4gTShTKS9NKFMrbSp0KX0sQz1mdW5jdGlvbih0KXtyZXR1cm4geSooKE0oUykqKFQoZT1TK20qdCkvTShlKSktVChTKSkvaykvYjt2YXIgZX0sTD0oQSgxKS1TKS9tO2lmKE1hdGguYWJzKGIpPDFlLTZ8fCFpc0Zpbml0ZShMKSl7aWYoTWF0aC5hYnMoeS14KTwxZS02KXJldHVybiB0aGlzLmVhc2VUbyhlLHIpO3ZhciB6PXg8eT8tMToxO0w9TWF0aC5hYnMoTWF0aC5sb2coeC95KSkvbSxDPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LEU9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguZXhwKHoqbSp0KX19aWYoXCJkdXJhdGlvblwiaW4gZSllLmR1cmF0aW9uPStlLmR1cmF0aW9uO2Vsc2V7dmFyIE89XCJzY3JlZW5TcGVlZFwiaW4gZT8rZS5zY3JlZW5TcGVlZC9tOitlLnNwZWVkO2UuZHVyYXRpb249MWUzKkwvT31yZXR1cm4gZS5tYXhEdXJhdGlvbiYmZS5kdXJhdGlvbj5lLm1heER1cmF0aW9uJiYoZS5kdXJhdGlvbj0wKSx0aGlzLl96b29taW5nPSEwLHRoaXMuX3JvdGF0aW5nPW8hPT1jLHRoaXMuX3BpdGNoaW5nPXUhPT1zLHRoaXMuX3ByZXBhcmVFYXNlKHIsITEpLHRoaXMuX2Vhc2UoZnVuY3Rpb24oZSl7dmFyIGw9ZSpMLGg9MS9FKGwpO2kuem9vbT1hK2kuc2NhbGVab29tKGgpLG4uX3JvdGF0aW5nJiYoaS5iZWFyaW5nPXQubnVtYmVyKG8sYyxlKSksbi5fcGl0Y2hpbmcmJihpLnBpdGNoPXQubnVtYmVyKHMsdSxlKSk7dmFyIHA9aS51bnByb2plY3QoZy5hZGQodi5tdWx0KEMobCkpKS5tdWx0KGgpKTtpLnNldExvY2F0aW9uQXRQb2ludChpLnJlbmRlcldvcmxkQ29waWVzP3Aud3JhcCgpOnAsZiksbi5fZmlyZU1vdmVFdmVudHMocil9LGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2FmdGVyRWFzZShyKX0sZSksdGhpc30sci5wcm90b3R5cGUuaXNFYXNpbmc9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2Vhc2VGcmFtZUlkfSxyLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7aWYodGhpcy5fZWFzZUZyYW1lSWQmJih0aGlzLl9jYW5jZWxSZW5kZXJGcmFtZSh0aGlzLl9lYXNlRnJhbWVJZCksZGVsZXRlIHRoaXMuX2Vhc2VGcmFtZUlkLGRlbGV0ZSB0aGlzLl9vbkVhc2VGcmFtZSksdGhpcy5fb25FYXNlRW5kKXt2YXIgdD10aGlzLl9vbkVhc2VFbmQ7ZGVsZXRlIHRoaXMuX29uRWFzZUVuZCx0LmNhbGwodGhpcyl9cmV0dXJuIHRoaXN9LHIucHJvdG90eXBlLl9lYXNlPWZ1bmN0aW9uKHQsZSxyKXshMT09PXIuYW5pbWF0ZXx8MD09PXIuZHVyYXRpb24/KHQoMSksZSgpKToodGhpcy5fZWFzZVN0YXJ0PWEubm93KCksdGhpcy5fZWFzZU9wdGlvbnM9cix0aGlzLl9vbkVhc2VGcmFtZT10LHRoaXMuX29uRWFzZUVuZD1lLHRoaXMuX2Vhc2VGcmFtZUlkPXRoaXMuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9yZW5kZXJGcmFtZUNhbGxiYWNrKSl9LHIucHJvdG90eXBlLl9yZW5kZXJGcmFtZUNhbGxiYWNrPWZ1bmN0aW9uKCl7dmFyIHQ9TWF0aC5taW4oKGEubm93KCktdGhpcy5fZWFzZVN0YXJ0KS90aGlzLl9lYXNlT3B0aW9ucy5kdXJhdGlvbiwxKTt0aGlzLl9vbkVhc2VGcmFtZSh0aGlzLl9lYXNlT3B0aW9ucy5lYXNpbmcodCkpLHQ8MT90aGlzLl9lYXNlRnJhbWVJZD10aGlzLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fcmVuZGVyRnJhbWVDYWxsYmFjayk6dGhpcy5zdG9wKCl9LHIucHJvdG90eXBlLl9ub3JtYWxpemVCZWFyaW5nPWZ1bmN0aW9uKGUscil7ZT10LndyYXAoZSwtMTgwLDE4MCk7dmFyIG49TWF0aC5hYnMoZS1yKTtyZXR1cm4gTWF0aC5hYnMoZS0zNjAtcik8biYmKGUtPTM2MCksTWF0aC5hYnMoZSszNjAtcik8biYmKGUrPTM2MCksZX0sci5wcm90b3R5cGUuX25vcm1hbGl6ZUNlbnRlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnRyYW5zZm9ybTtpZihlLnJlbmRlcldvcmxkQ29waWVzJiYhZS5sbmdSYW5nZSl7dmFyIHI9dC5sbmctZS5jZW50ZXIubG5nO3QubG5nKz1yPjE4MD8tMzYwOnI8LTE4MD8zNjA6MH19LHJ9KHQuRXZlbnRlZCksbm49ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9e30pLHRoaXMub3B0aW9ucz1lLHQuYmluZEFsbChbXCJfdXBkYXRlRWRpdExpbmtcIixcIl91cGRhdGVEYXRhXCIsXCJfdXBkYXRlQ29tcGFjdFwiXSx0aGlzKX07bm4ucHJvdG90eXBlLmdldERlZmF1bHRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVyblwiYm90dG9tLXJpZ2h0XCJ9LG5uLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5jb21wYWN0O3JldHVybiB0aGlzLl9tYXA9dCx0aGlzLl9jb250YWluZXI9cy5jcmVhdGUoXCJkaXZcIixcIm1hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1hdHRyaWJcIiksZSYmdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jb21wYWN0XCIpLHRoaXMuX3VwZGF0ZUF0dHJpYnV0aW9ucygpLHRoaXMuX3VwZGF0ZUVkaXRMaW5rKCksdGhpcy5fbWFwLm9uKFwic291cmNlZGF0YVwiLHRoaXMuX3VwZGF0ZURhdGEpLHRoaXMuX21hcC5vbihcIm1vdmVlbmRcIix0aGlzLl91cGRhdGVFZGl0TGluayksdm9pZCAwPT09ZSYmKHRoaXMuX21hcC5vbihcInJlc2l6ZVwiLHRoaXMuX3VwZGF0ZUNvbXBhY3QpLHRoaXMuX3VwZGF0ZUNvbXBhY3QoKSksdGhpcy5fY29udGFpbmVyfSxubi5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXtzLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLHRoaXMuX21hcC5vZmYoXCJzb3VyY2VkYXRhXCIsdGhpcy5fdXBkYXRlRGF0YSksdGhpcy5fbWFwLm9mZihcIm1vdmVlbmRcIix0aGlzLl91cGRhdGVFZGl0TGluayksdGhpcy5fbWFwLm9mZihcInJlc2l6ZVwiLHRoaXMuX3VwZGF0ZUNvbXBhY3QpLHRoaXMuX21hcD12b2lkIDB9LG5uLnByb3RvdHlwZS5fdXBkYXRlRWRpdExpbms9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9lZGl0TGluazt0fHwodD10aGlzLl9lZGl0TGluaz10aGlzLl9jb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5tYXBib3gtaW1wcm92ZS1tYXBcIikpO3ZhciBlPVt7a2V5Olwib3duZXJcIix2YWx1ZTp0aGlzLnN0eWxlT3duZXJ9LHtrZXk6XCJpZFwiLHZhbHVlOnRoaXMuc3R5bGVJZH0se2tleTpcImFjY2Vzc190b2tlblwiLHZhbHVlOnYuQUNDRVNTX1RPS0VOfV07aWYodCl7dmFyIHI9ZS5yZWR1Y2UoZnVuY3Rpb24odCxyLG4pe3JldHVybiByLnZhbHVlJiYodCs9ci5rZXkrXCI9XCIrci52YWx1ZSsobjxlLmxlbmd0aC0xP1wiJlwiOlwiXCIpKSx0fSxcIj9cIik7dC5ocmVmPVwiaHR0cHM6Ly93d3cubWFwYm94LmNvbS9mZWVkYmFjay9cIityKyh0aGlzLl9tYXAuX2hhc2g/dGhpcy5fbWFwLl9oYXNoLmdldEhhc2hTdHJpbmcoITApOlwiXCIpfX0sbm4ucHJvdG90eXBlLl91cGRhdGVEYXRhPWZ1bmN0aW9uKHQpe3QmJlwibWV0YWRhdGFcIj09PXQuc291cmNlRGF0YVR5cGUmJih0aGlzLl91cGRhdGVBdHRyaWJ1dGlvbnMoKSx0aGlzLl91cGRhdGVFZGl0TGluaygpKX0sbm4ucHJvdG90eXBlLl91cGRhdGVBdHRyaWJ1dGlvbnM9ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXAuc3R5bGUpe3ZhciB0PVtdO2lmKHRoaXMuX21hcC5zdHlsZS5zdHlsZXNoZWV0KXt2YXIgZT10aGlzLl9tYXAuc3R5bGUuc3R5bGVzaGVldDt0aGlzLnN0eWxlT3duZXI9ZS5vd25lcix0aGlzLnN0eWxlSWQ9ZS5pZH12YXIgcj10aGlzLl9tYXAuc3R5bGUuc291cmNlQ2FjaGVzO2Zvcih2YXIgbiBpbiByKXt2YXIgaT1yW25dLmdldFNvdXJjZSgpO2kuYXR0cmlidXRpb24mJnQuaW5kZXhPZihpLmF0dHJpYnV0aW9uKTwwJiZ0LnB1c2goaS5hdHRyaWJ1dGlvbil9dC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoLWUubGVuZ3RofSksKHQ9dC5maWx0ZXIoZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49cisxO248dC5sZW5ndGg7bisrKWlmKHRbbl0uaW5kZXhPZihlKT49MClyZXR1cm4hMTtyZXR1cm4hMH0pKS5sZW5ndGg/KHRoaXMuX2NvbnRhaW5lci5pbm5lckhUTUw9dC5qb2luKFwiIHwgXCIpLHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtYXR0cmliLWVtcHR5XCIpKTp0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLWF0dHJpYi1lbXB0eVwiKSx0aGlzLl9lZGl0TGluaz1udWxsfX0sbm4ucHJvdG90eXBlLl91cGRhdGVDb21wYWN0PWZ1bmN0aW9uKCl7dGhpcy5fbWFwLmdldENhbnZhc0NvbnRhaW5lcigpLm9mZnNldFdpZHRoPD02NDA/dGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jb21wYWN0XCIpOnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY29tcGFjdFwiKX07dmFyIGFuPWZ1bmN0aW9uKCl7dC5iaW5kQWxsKFtcIl91cGRhdGVMb2dvXCJdLHRoaXMpfTthbi5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQsdGhpcy5fY29udGFpbmVyPXMuY3JlYXRlKFwiZGl2XCIsXCJtYXBib3hnbC1jdHJsXCIpO3ZhciBlPXMuY3JlYXRlKFwiYVwiLFwibWFwYm94Z2wtY3RybC1sb2dvXCIpO3JldHVybiBlLnRhcmdldD1cIl9ibGFua1wiLGUuaHJlZj1cImh0dHBzOi8vd3d3Lm1hcGJveC5jb20vXCIsZS5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsXCJNYXBib3ggbG9nb1wiKSx0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQoZSksdGhpcy5fY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9XCJub25lXCIsdGhpcy5fbWFwLm9uKFwic291cmNlZGF0YVwiLHRoaXMuX3VwZGF0ZUxvZ28pLHRoaXMuX3VwZGF0ZUxvZ28oKSx0aGlzLl9jb250YWluZXJ9LGFuLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3MucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwLm9mZihcInNvdXJjZWRhdGFcIix0aGlzLl91cGRhdGVMb2dvKX0sYW4ucHJvdG90eXBlLmdldERlZmF1bHRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVyblwiYm90dG9tLWxlZnRcIn0sYW4ucHJvdG90eXBlLl91cGRhdGVMb2dvPWZ1bmN0aW9uKHQpe3QmJlwibWV0YWRhdGFcIiE9PXQuc291cmNlRGF0YVR5cGV8fCh0aGlzLl9jb250YWluZXIuc3R5bGUuZGlzcGxheT10aGlzLl9sb2dvUmVxdWlyZWQoKT9cImJsb2NrXCI6XCJub25lXCIpfSxhbi5wcm90b3R5cGUuX2xvZ29SZXF1aXJlZD1mdW5jdGlvbigpe2lmKHRoaXMuX21hcC5zdHlsZSl7dmFyIHQ9dGhpcy5fbWFwLnN0eWxlLnNvdXJjZUNhY2hlcztmb3IodmFyIGUgaW4gdClpZih0W2VdLmdldFNvdXJjZSgpLm1hcGJveF9sb2dvKXJldHVybiEwO3JldHVybiExfX07dmFyIG9uPWZ1bmN0aW9uKCl7dGhpcy5fcXVldWU9W10sdGhpcy5faWQ9MCx0aGlzLl9jbGVhcmVkPSExLHRoaXMuX2N1cnJlbnRseVJ1bm5pbmc9ITF9O29uLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7dmFyIGU9Kyt0aGlzLl9pZDtyZXR1cm4gdGhpcy5fcXVldWUucHVzaCh7Y2FsbGJhY2s6dCxpZDplLGNhbmNlbGxlZDohMX0pLGV9LG9uLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2N1cnJlbnRseVJ1bm5pbmcscj0wLG49ZT90aGlzLl9xdWV1ZS5jb25jYXQoZSk6dGhpcy5fcXVldWU7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdO2lmKGkuaWQ9PT10KXJldHVybiB2b2lkKGkuY2FuY2VsbGVkPSEwKX19LG9uLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jdXJyZW50bHlSdW5uaW5nPXRoaXMuX3F1ZXVlO3RoaXMuX3F1ZXVlPVtdO2Zvcih2YXIgZT0wLHI9dDtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV07aWYoIW4uY2FuY2VsbGVkJiYobi5jYWxsYmFjaygpLHRoaXMuX2NsZWFyZWQpKWJyZWFrfXRoaXMuX2NsZWFyZWQ9ITEsdGhpcy5fY3VycmVudGx5UnVubmluZz0hMX0sb24ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fY3VycmVudGx5UnVubmluZyYmKHRoaXMuX2NsZWFyZWQ9ITApLHRoaXMuX3F1ZXVlPVtdfTt2YXIgc249dC5kZWZhdWx0LkhUTUxJbWFnZUVsZW1lbnQsbG49dC5kZWZhdWx0LkhUTUxFbGVtZW50LGNuPXtjZW50ZXI6WzAsMF0sem9vbTowLGJlYXJpbmc6MCxwaXRjaDowLG1pblpvb206MCxtYXhab29tOjIyLGludGVyYWN0aXZlOiEwLHNjcm9sbFpvb206ITAsYm94Wm9vbTohMCxkcmFnUm90YXRlOiEwLGRyYWdQYW46ITAsa2V5Ym9hcmQ6ITAsZG91YmxlQ2xpY2tab29tOiEwLHRvdWNoWm9vbVJvdGF0ZTohMCxiZWFyaW5nU25hcDo3LGhhc2g6ITEsYXR0cmlidXRpb25Db250cm9sOiEwLGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6ITEscHJlc2VydmVEcmF3aW5nQnVmZmVyOiExLHRyYWNrUmVzaXplOiEwLHJlbmRlcldvcmxkQ29waWVzOiEwLHJlZnJlc2hFeHBpcmVkVGlsZXM6ITAsbWF4VGlsZUNhY2hlU2l6ZTpudWxsLHRyYW5zZm9ybVJlcXVlc3Q6bnVsbCxmYWRlRHVyYXRpb246MzAwfSx1bj1mdW5jdGlvbihyKXtmdW5jdGlvbiBuKGUpe2lmKG51bGwhPShlPXQuZXh0ZW5kKHt9LGNuLGUpKS5taW5ab29tJiZudWxsIT1lLm1heFpvb20mJmUubWluWm9vbT5lLm1heFpvb20pdGhyb3cgbmV3IEVycm9yKFwibWF4Wm9vbSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBtaW5ab29tXCIpO3ZhciBuPW5ldyBCcihlLm1pblpvb20sZS5tYXhab29tLGUucmVuZGVyV29ybGRDb3BpZXMpO3IuY2FsbCh0aGlzLG4sZSksdGhpcy5faW50ZXJhY3RpdmU9ZS5pbnRlcmFjdGl2ZSx0aGlzLl9tYXhUaWxlQ2FjaGVTaXplPWUubWF4VGlsZUNhY2hlU2l6ZSx0aGlzLl9mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0PWUuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCx0aGlzLl9wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZS5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIsdGhpcy5fdHJhY2tSZXNpemU9ZS50cmFja1Jlc2l6ZSx0aGlzLl9iZWFyaW5nU25hcD1lLmJlYXJpbmdTbmFwLHRoaXMuX3JlZnJlc2hFeHBpcmVkVGlsZXM9ZS5yZWZyZXNoRXhwaXJlZFRpbGVzLHRoaXMuX2ZhZGVEdXJhdGlvbj1lLmZhZGVEdXJhdGlvbix0aGlzLl9jcm9zc0ZhZGluZ0ZhY3Rvcj0xLHRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZz1lLmNvbGxlY3RSZXNvdXJjZVRpbWluZyx0aGlzLl9yZW5kZXJUYXNrUXVldWU9bmV3IG9uO3ZhciBpPWUudHJhbnNmb3JtUmVxdWVzdDtpZih0aGlzLl90cmFuc2Zvcm1SZXF1ZXN0PWk/ZnVuY3Rpb24odCxlKXtyZXR1cm4gaSh0LGUpfHx7dXJsOnR9fTpmdW5jdGlvbih0KXtyZXR1cm57dXJsOnR9fSxcInN0cmluZ1wiPT10eXBlb2YgZS5jb250YWluZXIpe3ZhciBhPXQuZGVmYXVsdC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlLmNvbnRhaW5lcik7aWYoIWEpdGhyb3cgbmV3IEVycm9yKFwiQ29udGFpbmVyICdcIitlLmNvbnRhaW5lcitcIicgbm90IGZvdW5kLlwiKTt0aGlzLl9jb250YWluZXI9YX1lbHNle2lmKCEoZS5jb250YWluZXIgaW5zdGFuY2VvZiBsbikpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB0eXBlOiAnY29udGFpbmVyJyBtdXN0IGJlIGEgU3RyaW5nIG9yIEhUTUxFbGVtZW50LlwiKTt0aGlzLl9jb250YWluZXI9ZS5jb250YWluZXJ9ZS5tYXhCb3VuZHMmJnRoaXMuc2V0TWF4Qm91bmRzKGUubWF4Qm91bmRzKSx0LmJpbmRBbGwoW1wiX29uV2luZG93T25saW5lXCIsXCJfb25XaW5kb3dSZXNpemVcIixcIl9jb250ZXh0TG9zdFwiLFwiX2NvbnRleHRSZXN0b3JlZFwiLFwiX3VwZGF0ZVwiLFwiX3JlbmRlclwiLFwiX29uRGF0YVwiLFwiX29uRGF0YUxvYWRpbmdcIl0sdGhpcyksdGhpcy5fc2V0dXBDb250YWluZXIoKSx0aGlzLl9zZXR1cFBhaW50ZXIoKSx0aGlzLm9uKFwibW92ZVwiLHRoaXMuX3VwZGF0ZS5iaW5kKHRoaXMsITEpKSx0aGlzLm9uKFwiem9vbVwiLHRoaXMuX3VwZGF0ZS5iaW5kKHRoaXMsITApKSx2b2lkIDAhPT10LmRlZmF1bHQmJih0LmRlZmF1bHQuYWRkRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLHRoaXMuX29uV2luZG93T25saW5lLCExKSx0LmRlZmF1bHQuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHRoaXMuX29uV2luZG93UmVzaXplLCExKSksZnVuY3Rpb24odCxlKXt2YXIgcj10LmdldENhbnZhc0NvbnRhaW5lcigpLG49bnVsbCxpPSExO2Zvcih2YXIgYSBpbiBlbil0W2FdPW5ldyBlblthXSh0LGUpLGUuaW50ZXJhY3RpdmUmJmVbYV0mJnRbYV0uZW5hYmxlKGVbYV0pO3MuYWRkRXZlbnRMaXN0ZW5lcihyLFwibW91c2VvdXRcIixmdW5jdGlvbihlKXt0LmZpcmUobmV3IFZyKFwibW91c2VvdXRcIix0LGUpKX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLFwibW91c2Vkb3duXCIsZnVuY3Rpb24ocil7aT0hMDt2YXIgbj1uZXcgVnIoXCJtb3VzZWRvd25cIix0LHIpO3QuZmlyZShuKSxuLmRlZmF1bHRQcmV2ZW50ZWR8fChlLmludGVyYWN0aXZlJiYhdC5kb3VibGVDbGlja1pvb20uaXNBY3RpdmUoKSYmdC5zdG9wKCksdC5ib3hab29tLm9uTW91c2VEb3duKHIpLHQuYm94Wm9vbS5pc0FjdGl2ZSgpfHx0LmRyYWdQYW4uaXNBY3RpdmUoKXx8dC5kcmFnUm90YXRlLm9uTW91c2VEb3duKHIpLHQuYm94Wm9vbS5pc0FjdGl2ZSgpfHx0LmRyYWdSb3RhdGUuaXNBY3RpdmUoKXx8dC5kcmFnUGFuLm9uTW91c2VEb3duKHIpKX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLFwibW91c2V1cFwiLGZ1bmN0aW9uKGUpe3ZhciByPXQuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpO24mJiFyJiZ0LmZpcmUobmV3IFZyKFwiY29udGV4dG1lbnVcIix0LG4pKSxuPW51bGwsaT0hMSx0LmZpcmUobmV3IFZyKFwibW91c2V1cFwiLHQsZSkpfSkscy5hZGRFdmVudExpc3RlbmVyKHIsXCJtb3VzZW1vdmVcIixmdW5jdGlvbihlKXtpZighdC5kcmFnUGFuLmlzQWN0aXZlKCkmJiF0LmRyYWdSb3RhdGUuaXNBY3RpdmUoKSl7Zm9yKHZhciBuPWUudG9FbGVtZW50fHxlLnRhcmdldDtuJiZuIT09cjspbj1uLnBhcmVudE5vZGU7bj09PXImJnQuZmlyZShuZXcgVnIoXCJtb3VzZW1vdmVcIix0LGUpKX19KSxzLmFkZEV2ZW50TGlzdGVuZXIocixcIm1vdXNlb3ZlclwiLGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj1lLnRvRWxlbWVudHx8ZS50YXJnZXQ7biYmbiE9PXI7KW49bi5wYXJlbnROb2RlO249PT1yJiZ0LmZpcmUobmV3IFZyKFwibW91c2VvdmVyXCIsdCxlKSl9KSxzLmFkZEV2ZW50TGlzdGVuZXIocixcInRvdWNoc3RhcnRcIixmdW5jdGlvbihyKXt2YXIgbj1uZXcgVXIoXCJ0b3VjaHN0YXJ0XCIsdCxyKTt0LmZpcmUobiksbi5kZWZhdWx0UHJldmVudGVkfHwoZS5pbnRlcmFjdGl2ZSYmdC5zdG9wKCksdC5ib3hab29tLmlzQWN0aXZlKCl8fHQuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpfHx0LmRyYWdQYW4ub25Ub3VjaFN0YXJ0KHIpLHQudG91Y2hab29tUm90YXRlLm9uU3RhcnQociksdC5kb3VibGVDbGlja1pvb20ub25Ub3VjaFN0YXJ0KG4pKX0se3Bhc3NpdmU6ITF9KSxzLmFkZEV2ZW50TGlzdGVuZXIocixcInRvdWNobW92ZVwiLGZ1bmN0aW9uKGUpe3QuZmlyZShuZXcgVXIoXCJ0b3VjaG1vdmVcIix0LGUpKX0se3Bhc3NpdmU6ITF9KSxzLmFkZEV2ZW50TGlzdGVuZXIocixcInRvdWNoZW5kXCIsZnVuY3Rpb24oZSl7dC5maXJlKG5ldyBVcihcInRvdWNoZW5kXCIsdCxlKSl9KSxzLmFkZEV2ZW50TGlzdGVuZXIocixcInRvdWNoY2FuY2VsXCIsZnVuY3Rpb24oZSl7dC5maXJlKG5ldyBVcihcInRvdWNoY2FuY2VsXCIsdCxlKSl9KSxzLmFkZEV2ZW50TGlzdGVuZXIocixcImNsaWNrXCIsZnVuY3Rpb24oZSl7dC5maXJlKG5ldyBWcihcImNsaWNrXCIsdCxlKSl9KSxzLmFkZEV2ZW50TGlzdGVuZXIocixcImRibGNsaWNrXCIsZnVuY3Rpb24oZSl7dmFyIHI9bmV3IFZyKFwiZGJsY2xpY2tcIix0LGUpO3QuZmlyZShyKSxyLmRlZmF1bHRQcmV2ZW50ZWR8fHQuZG91YmxlQ2xpY2tab29tLm9uRGJsQ2xpY2socil9KSxzLmFkZEV2ZW50TGlzdGVuZXIocixcImNvbnRleHRtZW51XCIsZnVuY3Rpb24oZSl7dmFyIHI9dC5kcmFnUm90YXRlLmlzQWN0aXZlKCk7aXx8cj9pJiYobj1lKTp0LmZpcmUobmV3IFZyKFwiY29udGV4dG1lbnVcIix0LGUpKSxlLnByZXZlbnREZWZhdWx0KCl9KSxzLmFkZEV2ZW50TGlzdGVuZXIocixcIndoZWVsXCIsZnVuY3Rpb24oZSl7dmFyIHI9bmV3IHFyKFwid2hlZWxcIix0LGUpO3QuZmlyZShyKSxyLmRlZmF1bHRQcmV2ZW50ZWR8fHQuc2Nyb2xsWm9vbS5vbldoZWVsKGUpfSx7cGFzc2l2ZTohMX0pfSh0aGlzLGUpLHRoaXMuX2hhc2g9ZS5oYXNoJiYobmV3IGpyKS5hZGRUbyh0aGlzKSx0aGlzLl9oYXNoJiZ0aGlzLl9oYXNoLl9vbkhhc2hDaGFuZ2UoKXx8dGhpcy5qdW1wVG8oe2NlbnRlcjplLmNlbnRlcix6b29tOmUuem9vbSxiZWFyaW5nOmUuYmVhcmluZyxwaXRjaDplLnBpdGNofSksdGhpcy5yZXNpemUoKSxlLnN0eWxlJiZ0aGlzLnNldFN0eWxlKGUuc3R5bGUse2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseTplLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseX0pLGUuYXR0cmlidXRpb25Db250cm9sJiZ0aGlzLmFkZENvbnRyb2wobmV3IG5uKSx0aGlzLmFkZENvbnRyb2wobmV3IGFuLGUubG9nb1Bvc2l0aW9uKSx0aGlzLm9uKFwic3R5bGUubG9hZFwiLGZ1bmN0aW9uKCl7dGhpcy50cmFuc2Zvcm0udW5tb2RpZmllZCYmdGhpcy5qdW1wVG8odGhpcy5zdHlsZS5zdHlsZXNoZWV0KX0pLHRoaXMub24oXCJkYXRhXCIsdGhpcy5fb25EYXRhKSx0aGlzLm9uKFwiZGF0YWxvYWRpbmdcIix0aGlzLl9vbkRhdGFMb2FkaW5nKX1yJiYobi5fX3Byb3RvX189ciksbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShyJiZyLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bjt2YXIgaT17c2hvd1RpbGVCb3VuZGFyaWVzOntjb25maWd1cmFibGU6ITB9LHNob3dDb2xsaXNpb25Cb3hlczp7Y29uZmlndXJhYmxlOiEwfSxzaG93T3ZlcmRyYXdJbnNwZWN0b3I6e2NvbmZpZ3VyYWJsZTohMH0scmVwYWludDp7Y29uZmlndXJhYmxlOiEwfSx2ZXJ0aWNlczp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIG4ucHJvdG90eXBlLmFkZENvbnRyb2w9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiZ0LmdldERlZmF1bHRQb3NpdGlvbiYmKGU9dC5nZXREZWZhdWx0UG9zaXRpb24oKSksdm9pZCAwPT09ZSYmKGU9XCJ0b3AtcmlnaHRcIik7dmFyIHI9dC5vbkFkZCh0aGlzKSxuPXRoaXMuX2NvbnRyb2xQb3NpdGlvbnNbZV07cmV0dXJuLTEhPT1lLmluZGV4T2YoXCJib3R0b21cIik/bi5pbnNlcnRCZWZvcmUocixuLmZpcnN0Q2hpbGQpOm4uYXBwZW5kQ2hpbGQociksdGhpc30sbi5wcm90b3R5cGUucmVtb3ZlQ29udHJvbD1mdW5jdGlvbih0KXtyZXR1cm4gdC5vblJlbW92ZSh0aGlzKSx0aGlzfSxuLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fY29udGFpbmVyRGltZW5zaW9ucygpLG49clswXSxpPXJbMV07cmV0dXJuIHRoaXMuX3Jlc2l6ZUNhbnZhcyhuLGkpLHRoaXMudHJhbnNmb3JtLnJlc2l6ZShuLGkpLHRoaXMucGFpbnRlci5yZXNpemUobixpKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJtb3Zlc3RhcnRcIixlKSkuZmlyZShuZXcgdC5FdmVudChcIm1vdmVcIixlKSkuZmlyZShuZXcgdC5FdmVudChcInJlc2l6ZVwiLGUpKS5maXJlKG5ldyB0LkV2ZW50KFwibW92ZWVuZFwiLGUpKX0sbi5wcm90b3R5cGUuZ2V0Qm91bmRzPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IFkodGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbihuZXcgdC5kZWZhdWx0JDEoMCx0aGlzLnRyYW5zZm9ybS5oZWlnaHQpKSx0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKG5ldyB0LmRlZmF1bHQkMSh0aGlzLnRyYW5zZm9ybS53aWR0aCwwKSkpO3JldHVybih0aGlzLnRyYW5zZm9ybS5hbmdsZXx8dGhpcy50cmFuc2Zvcm0ucGl0Y2gpJiYoZS5leHRlbmQodGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbihuZXcgdC5kZWZhdWx0JDEodGhpcy50cmFuc2Zvcm0uc2l6ZS54LDApKSksZS5leHRlbmQodGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbihuZXcgdC5kZWZhdWx0JDEoMCx0aGlzLnRyYW5zZm9ybS5zaXplLnkpKSkpLGV9LG4ucHJvdG90eXBlLmdldE1heEJvdW5kcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5sYXRSYW5nZSYmMj09PXRoaXMudHJhbnNmb3JtLmxhdFJhbmdlLmxlbmd0aCYmdGhpcy50cmFuc2Zvcm0ubG5nUmFuZ2UmJjI9PT10aGlzLnRyYW5zZm9ybS5sbmdSYW5nZS5sZW5ndGg/bmV3IFkoW3RoaXMudHJhbnNmb3JtLmxuZ1JhbmdlWzBdLHRoaXMudHJhbnNmb3JtLmxhdFJhbmdlWzBdXSxbdGhpcy50cmFuc2Zvcm0ubG5nUmFuZ2VbMV0sdGhpcy50cmFuc2Zvcm0ubGF0UmFuZ2VbMV1dKTpudWxsfSxuLnByb3RvdHlwZS5zZXRNYXhCb3VuZHM9ZnVuY3Rpb24odCl7aWYodCl7dmFyIGU9WS5jb252ZXJ0KHQpO3RoaXMudHJhbnNmb3JtLmxuZ1JhbmdlPVtlLmdldFdlc3QoKSxlLmdldEVhc3QoKV0sdGhpcy50cmFuc2Zvcm0ubGF0UmFuZ2U9W2UuZ2V0U291dGgoKSxlLmdldE5vcnRoKCldLHRoaXMudHJhbnNmb3JtLl9jb25zdHJhaW4oKSx0aGlzLl91cGRhdGUoKX1lbHNlIG51bGw9PXQmJih0aGlzLnRyYW5zZm9ybS5sbmdSYW5nZT1udWxsLHRoaXMudHJhbnNmb3JtLmxhdFJhbmdlPW51bGwsdGhpcy5fdXBkYXRlKCkpO3JldHVybiB0aGlzfSxuLnByb3RvdHlwZS5zZXRNaW5ab29tPWZ1bmN0aW9uKHQpe2lmKCh0PW51bGw9PXQ/MDp0KT49MCYmdDw9dGhpcy50cmFuc2Zvcm0ubWF4Wm9vbSlyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWluWm9vbT10LHRoaXMuX3VwZGF0ZSgpLHRoaXMuZ2V0Wm9vbSgpPHQmJnRoaXMuc2V0Wm9vbSh0KSx0aGlzO3Rocm93IG5ldyBFcnJvcihcIm1pblpvb20gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIHRoZSBjdXJyZW50IG1heFpvb20sIGluY2x1c2l2ZVwiKX0sbi5wcm90b3R5cGUuZ2V0TWluWm9vbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5taW5ab29tfSxuLnByb3RvdHlwZS5zZXRNYXhab29tPWZ1bmN0aW9uKHQpe2lmKCh0PW51bGw9PXQ/MjI6dCk+PXRoaXMudHJhbnNmb3JtLm1pblpvb20pcmV0dXJuIHRoaXMudHJhbnNmb3JtLm1heFpvb209dCx0aGlzLl91cGRhdGUoKSx0aGlzLmdldFpvb20oKT50JiZ0aGlzLnNldFpvb20odCksdGhpczt0aHJvdyBuZXcgRXJyb3IoXCJtYXhab29tIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG1pblpvb21cIil9LG4ucHJvdG90eXBlLmdldFJlbmRlcldvcmxkQ29waWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnJlbmRlcldvcmxkQ29waWVzfSxuLnByb3RvdHlwZS5zZXRSZW5kZXJXb3JsZENvcGllcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXM9dCx0aGlzLl91cGRhdGUoKSx0aGlzfSxuLnByb3RvdHlwZS5nZXRNYXhab29tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLm1heFpvb219LG4ucHJvdG90eXBlLnByb2plY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLmxvY2F0aW9uUG9pbnQoRy5jb252ZXJ0KHQpKX0sbi5wcm90b3R5cGUudW5wcm9qZWN0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKHQuZGVmYXVsdCQxLmNvbnZlcnQoZSkpfSxuLnByb3RvdHlwZS5pc01vdmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3Zpbmd8fHRoaXMuZHJhZ1Bhbi5pc0FjdGl2ZSgpfHx0aGlzLmRyYWdSb3RhdGUuaXNBY3RpdmUoKXx8dGhpcy5zY3JvbGxab29tLmlzQWN0aXZlKCl9LG4ucHJvdG90eXBlLmlzWm9vbWluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl96b29taW5nfHx0aGlzLnNjcm9sbFpvb20uaXNBY3RpdmUoKX0sbi5wcm90b3R5cGUuaXNSb3RhdGluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3RhdGluZ3x8dGhpcy5kcmFnUm90YXRlLmlzQWN0aXZlKCl9LG4ucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhPXRoaXM7aWYodm9pZCAwPT09bilyZXR1cm4gci5wcm90b3R5cGUub24uY2FsbCh0aGlzLHQsZSk7dmFyIG89ZnVuY3Rpb24oKXtpZihcIm1vdXNlZW50ZXJcIj09PXR8fFwibW91c2VvdmVyXCI9PT10KXt2YXIgcj0hMTtyZXR1cm57bGF5ZXI6ZSxsaXN0ZW5lcjpuLGRlbGVnYXRlczp7bW91c2Vtb3ZlOmZ1bmN0aW9uKGkpe3ZhciBvPWEuZ2V0TGF5ZXIoZSk/YS5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoaS5wb2ludCx7bGF5ZXJzOltlXX0pOltdO28ubGVuZ3RoP3J8fChyPSEwLG4uY2FsbChhLG5ldyBWcih0LGEsaS5vcmlnaW5hbEV2ZW50LHtmZWF0dXJlczpvfSkpKTpyPSExfSxtb3VzZW91dDpmdW5jdGlvbigpe3I9ITF9fX19aWYoXCJtb3VzZWxlYXZlXCI9PT10fHxcIm1vdXNlb3V0XCI9PT10KXt2YXIgbz0hMTtyZXR1cm57bGF5ZXI6ZSxsaXN0ZW5lcjpuLGRlbGVnYXRlczp7bW91c2Vtb3ZlOmZ1bmN0aW9uKHIpeyhhLmdldExheWVyKGUpP2EucXVlcnlSZW5kZXJlZEZlYXR1cmVzKHIucG9pbnQse2xheWVyczpbZV19KTpbXSkubGVuZ3RoP289ITA6byYmKG89ITEsbi5jYWxsKGEsbmV3IFZyKHQsYSxyLm9yaWdpbmFsRXZlbnQpKSl9LG1vdXNlb3V0OmZ1bmN0aW9uKGUpe28mJihvPSExLG4uY2FsbChhLG5ldyBWcih0LGEsZS5vcmlnaW5hbEV2ZW50KSkpfX19fXJldHVybntsYXllcjplLGxpc3RlbmVyOm4sZGVsZWdhdGVzOihpPXt9LGlbdF09ZnVuY3Rpb24odCl7dmFyIHI9YS5nZXRMYXllcihlKT9hLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyh0LnBvaW50LHtsYXllcnM6W2VdfSk6W107ci5sZW5ndGgmJih0LmZlYXR1cmVzPXIsbi5jYWxsKGEsdCksZGVsZXRlIHQuZmVhdHVyZXMpfSxpKX19KCk7Zm9yKHZhciBzIGluIHRoaXMuX2RlbGVnYXRlZExpc3RlbmVycz10aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnN8fHt9LHRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0XT10aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdF18fFtdLHRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0XS5wdXNoKG8pLG8uZGVsZWdhdGVzKWEub24ocyxvLmRlbGVnYXRlc1tzXSk7cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLm9mZj1mdW5jdGlvbih0LGUsbil7aWYodm9pZCAwPT09bilyZXR1cm4gci5wcm90b3R5cGUub2ZmLmNhbGwodGhpcyx0LGUpO2lmKHRoaXMuX2RlbGVnYXRlZExpc3RlbmVycyYmdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3RdKWZvcih2YXIgaT10aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdF0sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdO2lmKG8ubGF5ZXI9PT1lJiZvLmxpc3RlbmVyPT09bil7Zm9yKHZhciBzIGluIG8uZGVsZWdhdGVzKXRoaXMub2ZmKHMsby5kZWxlZ2F0ZXNbc10pO3JldHVybiBpLnNwbGljZShhLDEpLHRoaXN9fXJldHVybiB0aGlzfSxuLnByb3RvdHlwZS5xdWVyeVJlbmRlcmVkRmVhdHVyZXM9ZnVuY3Rpb24oZSxyKXt2YXIgbjtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGg/KGU9YXJndW1lbnRzWzBdLHI9YXJndW1lbnRzWzFdKToxPT09YXJndW1lbnRzLmxlbmd0aCYmKChuPWFyZ3VtZW50c1swXSlpbnN0YW5jZW9mIHQuZGVmYXVsdCQxfHxBcnJheS5pc0FycmF5KG4pKT8oZT1hcmd1bWVudHNbMF0scj17fSk6MT09PWFyZ3VtZW50cy5sZW5ndGg/KGU9dm9pZCAwLHI9YXJndW1lbnRzWzBdKTooZT12b2lkIDAscj17fSksdGhpcy5zdHlsZT90aGlzLnN0eWxlLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyh0aGlzLl9tYWtlUXVlcnlHZW9tZXRyeShlKSxyLHRoaXMudHJhbnNmb3JtKTpbXX0sbi5wcm90b3R5cGUuX21ha2VRdWVyeUdlb21ldHJ5PWZ1bmN0aW9uKGUpe3ZhciByLG49dGhpcztpZih2b2lkIDA9PT1lJiYoZT1bdC5kZWZhdWx0JDEuY29udmVydChbMCwwXSksdC5kZWZhdWx0JDEuY29udmVydChbdGhpcy50cmFuc2Zvcm0ud2lkdGgsdGhpcy50cmFuc2Zvcm0uaGVpZ2h0XSldKSxlIGluc3RhbmNlb2YgdC5kZWZhdWx0JDF8fFwibnVtYmVyXCI9PXR5cGVvZiBlWzBdKXI9W3QuZGVmYXVsdCQxLmNvbnZlcnQoZSldO2Vsc2V7dmFyIGk9W3QuZGVmYXVsdCQxLmNvbnZlcnQoZVswXSksdC5kZWZhdWx0JDEuY29udmVydChlWzFdKV07cj1baVswXSxuZXcgdC5kZWZhdWx0JDEoaVsxXS54LGlbMF0ueSksaVsxXSxuZXcgdC5kZWZhdWx0JDEoaVswXS54LGlbMV0ueSksaVswXV19cmV0dXJue3ZpZXdwb3J0OnIsd29ybGRDb29yZGluYXRlOnIubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBuLnRyYW5zZm9ybS5wb2ludENvb3JkaW5hdGUodCl9KX19LG4ucHJvdG90eXBlLnF1ZXJ5U291cmNlRmVhdHVyZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5xdWVyeVNvdXJjZUZlYXR1cmVzKHQsZSl9LG4ucHJvdG90eXBlLnNldFN0eWxlPWZ1bmN0aW9uKGUscil7aWYoKCFyfHwhMSE9PXIuZGlmZiYmIXIubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5KSYmdGhpcy5zdHlsZSYmZSYmXCJvYmplY3RcIj09dHlwZW9mIGUpdHJ5e3JldHVybiB0aGlzLnN0eWxlLnNldFN0YXRlKGUpJiZ0aGlzLl91cGRhdGUoITApLHRoaXN9Y2F0Y2goZSl7dC53YXJuT25jZShcIlVuYWJsZSB0byBwZXJmb3JtIHN0eWxlIGRpZmY6IFwiKyhlLm1lc3NhZ2V8fGUuZXJyb3J8fGUpK1wiLiAgUmVidWlsZGluZyB0aGUgc3R5bGUgZnJvbSBzY3JhdGNoLlwiKX1yZXR1cm4gdGhpcy5zdHlsZSYmKHRoaXMuc3R5bGUuc2V0RXZlbnRlZFBhcmVudChudWxsKSx0aGlzLnN0eWxlLl9yZW1vdmUoKSksZT8odGhpcy5zdHlsZT1uZXcgSmUodGhpcyxyfHx7fSksdGhpcy5zdHlsZS5zZXRFdmVudGVkUGFyZW50KHRoaXMse3N0eWxlOnRoaXMuc3R5bGV9KSxcInN0cmluZ1wiPT10eXBlb2YgZT90aGlzLnN0eWxlLmxvYWRVUkwoZSk6dGhpcy5zdHlsZS5sb2FkSlNPTihlKSx0aGlzKTooZGVsZXRlIHRoaXMuc3R5bGUsdGhpcyl9LG4ucHJvdG90eXBlLmdldFN0eWxlPWZ1bmN0aW9uKCl7aWYodGhpcy5zdHlsZSlyZXR1cm4gdGhpcy5zdHlsZS5zZXJpYWxpemUoKX0sbi5wcm90b3R5cGUuaXNTdHlsZUxvYWRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0eWxlP3RoaXMuc3R5bGUubG9hZGVkKCk6dC53YXJuT25jZShcIlRoZXJlIGlzIG5vIHN0eWxlIGFkZGVkIHRvIHRoZSBtYXAuXCIpfSxuLnByb3RvdHlwZS5hZGRTb3VyY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5hZGRTb3VyY2UodCxlKSx0aGlzLl91cGRhdGUoITApLHRoaXN9LG4ucHJvdG90eXBlLmlzU291cmNlTG9hZGVkPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuc3R5bGUmJnRoaXMuc3R5bGUuc291cmNlQ2FjaGVzW2VdO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHIubG9hZGVkKCk7dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gc291cmNlIHdpdGggSUQgJ1wiK2UrXCInXCIpKSl9LG4ucHJvdG90eXBlLmFyZVRpbGVzTG9hZGVkPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zdHlsZSYmdGhpcy5zdHlsZS5zb3VyY2VDYWNoZXM7Zm9yKHZhciBlIGluIHQpe3ZhciByPXRbZV0uX3RpbGVzO2Zvcih2YXIgbiBpbiByKXt2YXIgaT1yW25dO2lmKFwibG9hZGVkXCIhPT1pLnN0YXRlJiZcImVycm9yZWRcIiE9PWkuc3RhdGUpcmV0dXJuITF9fXJldHVybiEwfSxuLnByb3RvdHlwZS5hZGRTb3VyY2VUeXBlPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5zdHlsZS5hZGRTb3VyY2VUeXBlKHQsZSxyKX0sbi5wcm90b3R5cGUucmVtb3ZlU291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLnJlbW92ZVNvdXJjZSh0KSx0aGlzLl91cGRhdGUoITApLHRoaXN9LG4ucHJvdG90eXBlLmdldFNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRTb3VyY2UodCl9LG4ucHJvdG90eXBlLmFkZEltYWdlPWZ1bmN0aW9uKGUscixuKXt2b2lkIDA9PT1uJiYobj17fSk7dmFyIGk9bi5waXhlbFJhdGlvO3ZvaWQgMD09PWkmJihpPTEpO3ZhciBvPW4uc2RmO2lmKHZvaWQgMD09PW8mJihvPSExKSxyIGluc3RhbmNlb2Ygc24pe3ZhciBzPWEuZ2V0SW1hZ2VEYXRhKHIpLGw9cy53aWR0aCxjPXMuaGVpZ2h0LHU9cy5kYXRhO3RoaXMuc3R5bGUuYWRkSW1hZ2UoZSx7ZGF0YTpuZXcgdC5SR0JBSW1hZ2Uoe3dpZHRoOmwsaGVpZ2h0OmN9LHUpLHBpeGVsUmF0aW86aSxzZGY6b30pfWVsc2V7aWYodm9pZCAwPT09ci53aWR0aHx8dm9pZCAwPT09ci5oZWlnaHQpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnRzIHRvIG1hcC5hZGRJbWFnZSgpLiBUaGUgc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgYW4gYEhUTUxJbWFnZUVsZW1lbnRgLCBgSW1hZ2VEYXRhYCwgb3Igb2JqZWN0IHdpdGggYHdpZHRoYCwgYGhlaWdodGAsIGFuZCBgZGF0YWAgcHJvcGVydGllcyB3aXRoIHRoZSBzYW1lIGZvcm1hdCBhcyBgSW1hZ2VEYXRhYFwiKSkpO3ZhciBoPXIud2lkdGgsZj1yLmhlaWdodCxwPXIuZGF0YTt0aGlzLnN0eWxlLmFkZEltYWdlKGUse2RhdGE6bmV3IHQuUkdCQUltYWdlKHt3aWR0aDpoLGhlaWdodDpmfSxwLnNsaWNlKDApKSxwaXhlbFJhdGlvOmksc2RmOm99KX19LG4ucHJvdG90eXBlLmhhc0ltYWdlPWZ1bmN0aW9uKGUpe3JldHVybiBlPyEhdGhpcy5zdHlsZS5nZXRJbWFnZShlKToodGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKFwiTWlzc2luZyByZXF1aXJlZCBpbWFnZSBpZFwiKSkpLCExKX0sbi5wcm90b3R5cGUucmVtb3ZlSW1hZ2U9ZnVuY3Rpb24odCl7dGhpcy5zdHlsZS5yZW1vdmVJbWFnZSh0KX0sbi5wcm90b3R5cGUubG9hZEltYWdlPWZ1bmN0aW9uKGUscil7dC5nZXRJbWFnZSh0aGlzLl90cmFuc2Zvcm1SZXF1ZXN0KGUsdC5SZXNvdXJjZVR5cGUuSW1hZ2UpLHIpfSxuLnByb3RvdHlwZS5hZGRMYXllcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLmFkZExheWVyKHQsZSksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxuLnByb3RvdHlwZS5tb3ZlTGF5ZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5tb3ZlTGF5ZXIodCxlKSx0aGlzLl91cGRhdGUoITApLHRoaXN9LG4ucHJvdG90eXBlLnJlbW92ZUxheWVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLnJlbW92ZUxheWVyKHQpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sbi5wcm90b3R5cGUuZ2V0TGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0TGF5ZXIodCl9LG4ucHJvdG90eXBlLnNldEZpbHRlcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLnNldEZpbHRlcih0LGUpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sbi5wcm90b3R5cGUuc2V0TGF5ZXJab29tUmFuZ2U9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLnN0eWxlLnNldExheWVyWm9vbVJhbmdlKHQsZSxyKSx0aGlzLl91cGRhdGUoITApLHRoaXN9LG4ucHJvdG90eXBlLmdldEZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRGaWx0ZXIodCl9LG4ucHJvdG90eXBlLnNldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLnN0eWxlLnNldFBhaW50UHJvcGVydHkodCxlLHIpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sbi5wcm90b3R5cGUuZ2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLmdldFBhaW50UHJvcGVydHkodCxlKX0sbi5wcm90b3R5cGUuc2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLnN0eWxlLnNldExheW91dFByb3BlcnR5KHQsZSxyKSx0aGlzLl91cGRhdGUoITApLHRoaXN9LG4ucHJvdG90eXBlLmdldExheW91dFByb3BlcnR5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0TGF5b3V0UHJvcGVydHkodCxlKX0sbi5wcm90b3R5cGUuc2V0TGlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUuc2V0TGlnaHQodCksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxuLnByb3RvdHlwZS5nZXRMaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0eWxlLmdldExpZ2h0KCl9LG4ucHJvdG90eXBlLmdldENvbnRhaW5lcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXJ9LG4ucHJvdG90eXBlLmdldENhbnZhc0NvbnRhaW5lcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYW52YXNDb250YWluZXJ9LG4ucHJvdG90eXBlLmdldENhbnZhcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYW52YXN9LG4ucHJvdG90eXBlLl9jb250YWluZXJEaW1lbnNpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9MCxlPTA7cmV0dXJuIHRoaXMuX2NvbnRhaW5lciYmKHQ9dGhpcy5fY29udGFpbmVyLm9mZnNldFdpZHRofHw0MDAsZT10aGlzLl9jb250YWluZXIub2Zmc2V0SGVpZ2h0fHwzMDApLFt0LGVdfSxuLnByb3RvdHlwZS5fc2V0dXBDb250YWluZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250YWluZXI7dC5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtbWFwXCIpLCh0aGlzLl9taXNzaW5nQ1NTQ29udGFpbmVyPXMuY3JlYXRlKFwiZGl2XCIsXCJtYXBib3hnbC1taXNzaW5nLWNzc1wiLHQpKS5pbm5lckhUTUw9XCJNaXNzaW5nIE1hcGJveCBHTCBKUyBDU1NcIjt2YXIgZT10aGlzLl9jYW52YXNDb250YWluZXI9cy5jcmVhdGUoXCJkaXZcIixcIm1hcGJveGdsLWNhbnZhcy1jb250YWluZXJcIix0KTt0aGlzLl9pbnRlcmFjdGl2ZSYmZS5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtaW50ZXJhY3RpdmVcIiksdGhpcy5fY2FudmFzPXMuY3JlYXRlKFwiY2FudmFzXCIsXCJtYXBib3hnbC1jYW52YXNcIixlKSx0aGlzLl9jYW52YXMuc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwiLHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKFwid2ViZ2xjb250ZXh0bG9zdFwiLHRoaXMuX2NvbnRleHRMb3N0LCExKSx0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcIndlYmdsY29udGV4dHJlc3RvcmVkXCIsdGhpcy5fY29udGV4dFJlc3RvcmVkLCExKSx0aGlzLl9jYW52YXMuc2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIixcIjBcIiksdGhpcy5fY2FudmFzLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIixcIk1hcFwiKTt2YXIgcj10aGlzLl9jb250YWluZXJEaW1lbnNpb25zKCk7dGhpcy5fcmVzaXplQ2FudmFzKHJbMF0sclsxXSk7dmFyIG49dGhpcy5fY29udHJvbENvbnRhaW5lcj1zLmNyZWF0ZShcImRpdlwiLFwibWFwYm94Z2wtY29udHJvbC1jb250YWluZXJcIix0KSxpPXRoaXMuX2NvbnRyb2xQb3NpdGlvbnM9e307W1widG9wLWxlZnRcIixcInRvcC1yaWdodFwiLFwiYm90dG9tLWxlZnRcIixcImJvdHRvbS1yaWdodFwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lbdF09cy5jcmVhdGUoXCJkaXZcIixcIm1hcGJveGdsLWN0cmwtXCIrdCxuKX0pfSxuLnByb3RvdHlwZS5fcmVzaXplQ2FudmFzPWZ1bmN0aW9uKGUscil7dmFyIG49dC5kZWZhdWx0LmRldmljZVBpeGVsUmF0aW98fDE7dGhpcy5fY2FudmFzLndpZHRoPW4qZSx0aGlzLl9jYW52YXMuaGVpZ2h0PW4qcix0aGlzLl9jYW52YXMuc3R5bGUud2lkdGg9ZStcInB4XCIsdGhpcy5fY2FudmFzLnN0eWxlLmhlaWdodD1yK1wicHhcIn0sbi5wcm90b3R5cGUuX3NldHVwUGFpbnRlcj1mdW5jdGlvbigpe3ZhciByPXQuZXh0ZW5kKHtmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OnRoaXMuX2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQscHJlc2VydmVEcmF3aW5nQnVmZmVyOnRoaXMuX3ByZXNlcnZlRHJhd2luZ0J1ZmZlcn0sZS53ZWJHTENvbnRleHRBdHRyaWJ1dGVzKSxuPXRoaXMuX2NhbnZhcy5nZXRDb250ZXh0KFwid2ViZ2xcIixyKXx8dGhpcy5fY2FudmFzLmdldENvbnRleHQoXCJleHBlcmltZW50YWwtd2ViZ2xcIixyKTtuP3RoaXMucGFpbnRlcj1uZXcgenIobix0aGlzLnRyYW5zZm9ybSk6dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKFwiRmFpbGVkIHRvIGluaXRpYWxpemUgV2ViR0xcIikpKX0sbi5wcm90b3R5cGUuX2NvbnRleHRMb3N0PWZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSx0aGlzLl9mcmFtZUlkJiYoYS5jYW5jZWxGcmFtZSh0aGlzLl9mcmFtZUlkKSx0aGlzLl9mcmFtZUlkPW51bGwpLHRoaXMuZmlyZShuZXcgdC5FdmVudChcIndlYmdsY29udGV4dGxvc3RcIix7b3JpZ2luYWxFdmVudDplfSkpfSxuLnByb3RvdHlwZS5fY29udGV4dFJlc3RvcmVkPWZ1bmN0aW9uKGUpe3RoaXMuX3NldHVwUGFpbnRlcigpLHRoaXMucmVzaXplKCksdGhpcy5fdXBkYXRlKCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwid2ViZ2xjb250ZXh0cmVzdG9yZWRcIix7b3JpZ2luYWxFdmVudDplfSkpfSxuLnByb3RvdHlwZS5sb2FkZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fc3R5bGVEaXJ0eSYmIXRoaXMuX3NvdXJjZXNEaXJ0eSYmISghdGhpcy5zdHlsZXx8IXRoaXMuc3R5bGUubG9hZGVkKCkpfSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuc3R5bGUmJih0aGlzLl9zdHlsZURpcnR5PXRoaXMuX3N0eWxlRGlydHl8fHQsdGhpcy5fc291cmNlc0RpcnR5PSEwLHRoaXMuX3JlcmVuZGVyKCkpfSxuLnByb3RvdHlwZS5fcmVxdWVzdFJlbmRlckZyYW1lPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl91cGRhdGUoKSx0aGlzLl9yZW5kZXJUYXNrUXVldWUuYWRkKHQpfSxuLnByb3RvdHlwZS5fY2FuY2VsUmVuZGVyRnJhbWU9ZnVuY3Rpb24odCl7dGhpcy5fcmVuZGVyVGFza1F1ZXVlLnJlbW92ZSh0KX0sbi5wcm90b3R5cGUuX3JlbmRlcj1mdW5jdGlvbigpe3RoaXMuX3JlbmRlclRhc2tRdWV1ZS5ydW4oKTt2YXIgZT0hMTtpZih0aGlzLnN0eWxlJiZ0aGlzLl9zdHlsZURpcnR5KXt0aGlzLl9zdHlsZURpcnR5PSExO3ZhciByPXRoaXMudHJhbnNmb3JtLnpvb20sbj1hLm5vdygpO3RoaXMuc3R5bGUuem9vbUhpc3RvcnkudXBkYXRlKHIsbik7dmFyIGk9bmV3IHQuZGVmYXVsdCQxNihyLHtub3c6bixmYWRlRHVyYXRpb246dGhpcy5fZmFkZUR1cmF0aW9uLHpvb21IaXN0b3J5OnRoaXMuc3R5bGUuem9vbUhpc3RvcnksdHJhbnNpdGlvbjp0aGlzLnN0eWxlLmdldFRyYW5zaXRpb24oKX0pLG89aS5jcm9zc0ZhZGluZ0ZhY3RvcigpOzE9PT1vJiZvPT09dGhpcy5fY3Jvc3NGYWRpbmdGYWN0b3J8fChlPSEwLHRoaXMuX2Nyb3NzRmFkaW5nRmFjdG9yPW8pLHRoaXMuc3R5bGUudXBkYXRlKGkpfXJldHVybiB0aGlzLnN0eWxlJiZ0aGlzLl9zb3VyY2VzRGlydHkmJih0aGlzLl9zb3VyY2VzRGlydHk9ITEsdGhpcy5zdHlsZS5fdXBkYXRlU291cmNlcyh0aGlzLnRyYW5zZm9ybSkpLHRoaXMuX3BsYWNlbWVudERpcnR5PXRoaXMuc3R5bGUmJnRoaXMuc3R5bGUuX3VwZGF0ZVBsYWNlbWVudCh0aGlzLnBhaW50ZXIudHJhbnNmb3JtLHRoaXMuc2hvd0NvbGxpc2lvbkJveGVzLHRoaXMuX2ZhZGVEdXJhdGlvbiksdGhpcy5wYWludGVyLnJlbmRlcih0aGlzLnN0eWxlLHtzaG93VGlsZUJvdW5kYXJpZXM6dGhpcy5zaG93VGlsZUJvdW5kYXJpZXMsc2hvd092ZXJkcmF3SW5zcGVjdG9yOnRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcixyb3RhdGluZzp0aGlzLmlzUm90YXRpbmcoKSx6b29taW5nOnRoaXMuaXNab29taW5nKCksZmFkZUR1cmF0aW9uOnRoaXMuX2ZhZGVEdXJhdGlvbn0pLHRoaXMuZmlyZShuZXcgdC5FdmVudChcInJlbmRlclwiKSksdGhpcy5sb2FkZWQoKSYmIXRoaXMuX2xvYWRlZCYmKHRoaXMuX2xvYWRlZD0hMCx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJsb2FkXCIpKSksdGhpcy5zdHlsZSYmKHRoaXMuc3R5bGUuaGFzVHJhbnNpdGlvbnMoKXx8ZSkmJih0aGlzLl9zdHlsZURpcnR5PSEwKSwodGhpcy5fc291cmNlc0RpcnR5fHx0aGlzLl9yZXBhaW50fHx0aGlzLl9zdHlsZURpcnR5fHx0aGlzLl9wbGFjZW1lbnREaXJ0eSkmJnRoaXMuX3JlcmVuZGVyKCksdGhpc30sbi5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5faGFzaCYmdGhpcy5faGFzaC5yZW1vdmUoKSxhLmNhbmNlbEZyYW1lKHRoaXMuX2ZyYW1lSWQpLHRoaXMuX3JlbmRlclRhc2tRdWV1ZS5jbGVhcigpLHRoaXMuX2ZyYW1lSWQ9bnVsbCx0aGlzLnNldFN0eWxlKG51bGwpLHZvaWQgMCE9PXQuZGVmYXVsdCYmKHQuZGVmYXVsdC5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdGhpcy5fb25XaW5kb3dSZXNpemUsITEpLHQuZGVmYXVsdC5yZW1vdmVFdmVudExpc3RlbmVyKFwib25saW5lXCIsdGhpcy5fb25XaW5kb3dPbmxpbmUsITEpKTt2YXIgZT10aGlzLnBhaW50ZXIuY29udGV4dC5nbC5nZXRFeHRlbnNpb24oXCJXRUJHTF9sb3NlX2NvbnRleHRcIik7ZSYmZS5sb3NlQ29udGV4dCgpLGhuKHRoaXMuX2NhbnZhc0NvbnRhaW5lciksaG4odGhpcy5fY29udHJvbENvbnRhaW5lciksaG4odGhpcy5fbWlzc2luZ0NTU0NvbnRhaW5lciksdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1tYXBcIiksdGhpcy5maXJlKG5ldyB0LkV2ZW50KFwicmVtb3ZlXCIpKX0sbi5wcm90b3R5cGUuX3JlcmVuZGVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLnN0eWxlJiYhdGhpcy5fZnJhbWVJZCYmKHRoaXMuX2ZyYW1lSWQ9YS5mcmFtZShmdW5jdGlvbigpe3QuX2ZyYW1lSWQ9bnVsbCx0Ll9yZW5kZXIoKX0pKX0sbi5wcm90b3R5cGUuX29uV2luZG93T25saW5lPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlKCl9LG4ucHJvdG90eXBlLl9vbldpbmRvd1Jlc2l6ZT1mdW5jdGlvbigpe3RoaXMuX3RyYWNrUmVzaXplJiZ0aGlzLnN0b3AoKS5yZXNpemUoKS5fdXBkYXRlKCl9LGkuc2hvd1RpbGVCb3VuZGFyaWVzLmdldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fc2hvd1RpbGVCb3VuZGFyaWVzfSxpLnNob3dUaWxlQm91bmRhcmllcy5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc2hvd1RpbGVCb3VuZGFyaWVzIT09dCYmKHRoaXMuX3Nob3dUaWxlQm91bmRhcmllcz10LHRoaXMuX3VwZGF0ZSgpKX0saS5zaG93Q29sbGlzaW9uQm94ZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXN9LGkuc2hvd0NvbGxpc2lvbkJveGVzLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXMhPT10JiYodGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzPXQsdD90aGlzLnN0eWxlLl9nZW5lcmF0ZUNvbGxpc2lvbkJveGVzKCk6dGhpcy5fdXBkYXRlKCkpfSxpLnNob3dPdmVyZHJhd0luc3BlY3Rvci5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcn0saS5zaG93T3ZlcmRyYXdJbnNwZWN0b3Iuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3RvciE9PXQmJih0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3I9dCx0aGlzLl91cGRhdGUoKSl9LGkucmVwYWludC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3JlcGFpbnR9LGkucmVwYWludC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fcmVwYWludD10LHRoaXMuX3VwZGF0ZSgpfSxpLnZlcnRpY2VzLmdldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fdmVydGljZXN9LGkudmVydGljZXMuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3ZlcnRpY2VzPXQsdGhpcy5fdXBkYXRlKCl9LG4ucHJvdG90eXBlLl9vbkRhdGE9ZnVuY3Rpb24oZSl7dGhpcy5fdXBkYXRlKFwic3R5bGVcIj09PWUuZGF0YVR5cGUpLHRoaXMuZmlyZShuZXcgdC5FdmVudChlLmRhdGFUeXBlK1wiZGF0YVwiLGUpKX0sbi5wcm90b3R5cGUuX29uRGF0YUxvYWRpbmc9ZnVuY3Rpb24oZSl7dGhpcy5maXJlKG5ldyB0LkV2ZW50KGUuZGF0YVR5cGUrXCJkYXRhbG9hZGluZ1wiLGUpKX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobi5wcm90b3R5cGUsaSksbn0ocm4pO2Z1bmN0aW9uIGhuKHQpe3QucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfXZhciBmbj17c2hvd0NvbXBhc3M6ITAsc2hvd1pvb206ITB9LHBuPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7dGhpcy5vcHRpb25zPXQuZXh0ZW5kKHt9LGZuLGUpLHRoaXMuX2NvbnRhaW5lcj1zLmNyZWF0ZShcImRpdlwiLFwibWFwYm94Z2wtY3RybCBtYXBib3hnbC1jdHJsLWdyb3VwXCIpLHRoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpfSksdGhpcy5vcHRpb25zLnNob3dab29tJiYodGhpcy5fem9vbUluQnV0dG9uPXRoaXMuX2NyZWF0ZUJ1dHRvbihcIm1hcGJveGdsLWN0cmwtaWNvbiBtYXBib3hnbC1jdHJsLXpvb20taW5cIixcIlpvb20gSW5cIixmdW5jdGlvbigpe3JldHVybiByLl9tYXAuem9vbUluKCl9KSx0aGlzLl96b29tT3V0QnV0dG9uPXRoaXMuX2NyZWF0ZUJ1dHRvbihcIm1hcGJveGdsLWN0cmwtaWNvbiBtYXBib3hnbC1jdHJsLXpvb20tb3V0XCIsXCJab29tIE91dFwiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuX21hcC56b29tT3V0KCl9KSksdGhpcy5vcHRpb25zLnNob3dDb21wYXNzJiYodC5iaW5kQWxsKFtcIl9yb3RhdGVDb21wYXNzQXJyb3dcIl0sdGhpcyksdGhpcy5fY29tcGFzcz10aGlzLl9jcmVhdGVCdXR0b24oXCJtYXBib3hnbC1jdHJsLWljb24gbWFwYm94Z2wtY3RybC1jb21wYXNzXCIsXCJSZXNldCBOb3J0aFwiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuX21hcC5yZXNldE5vcnRoKCl9KSx0aGlzLl9jb21wYXNzQXJyb3c9cy5jcmVhdGUoXCJzcGFuXCIsXCJtYXBib3hnbC1jdHJsLWNvbXBhc3MtYXJyb3dcIix0aGlzLl9jb21wYXNzKSl9O2Z1bmN0aW9uIGRuKHQsZSxyKXtpZih0PW5ldyBHKHQubG5nLHQubGF0KSxlKXt2YXIgbj1uZXcgRyh0LmxuZy0zNjAsdC5sYXQpLGk9bmV3IEcodC5sbmcrMzYwLHQubGF0KSxhPXIubG9jYXRpb25Qb2ludCh0KS5kaXN0U3FyKGUpO3IubG9jYXRpb25Qb2ludChuKS5kaXN0U3FyKGUpPGE/dD1uOnIubG9jYXRpb25Qb2ludChpKS5kaXN0U3FyKGUpPGEmJih0PWkpfWZvcig7TWF0aC5hYnModC5sbmctci5jZW50ZXIubG5nKT4xODA7KXt2YXIgbz1yLmxvY2F0aW9uUG9pbnQodCk7aWYoby54Pj0wJiZvLnk+PTAmJm8ueDw9ci53aWR0aCYmby55PD1yLmhlaWdodClicmVhazt0LmxuZz5yLmNlbnRlci5sbmc/dC5sbmctPTM2MDp0LmxuZys9MzYwfXJldHVybiB0fXBuLnByb3RvdHlwZS5fcm90YXRlQ29tcGFzc0Fycm93PWZ1bmN0aW9uKCl7dmFyIHQ9XCJyb3RhdGUoXCIrdGhpcy5fbWFwLnRyYW5zZm9ybS5hbmdsZSooMTgwL01hdGguUEkpK1wiZGVnKVwiO3RoaXMuX2NvbXBhc3NBcnJvdy5zdHlsZS50cmFuc2Zvcm09dH0scG4ucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tYXA9dCx0aGlzLm9wdGlvbnMuc2hvd0NvbXBhc3MmJih0aGlzLl9tYXAub24oXCJyb3RhdGVcIix0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cpLHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdygpLHRoaXMuX2hhbmRsZXI9bmV3IFdyKHQse2J1dHRvbjpcImxlZnRcIixlbGVtZW50OnRoaXMuX2NvbXBhc3N9KSx0aGlzLl9oYW5kbGVyLmVuYWJsZSgpKSx0aGlzLl9jb250YWluZXJ9LHBuLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3MucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5vcHRpb25zLnNob3dDb21wYXNzJiYodGhpcy5fbWFwLm9mZihcInJvdGF0ZVwiLHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdyksdGhpcy5faGFuZGxlci5kaXNhYmxlKCksZGVsZXRlIHRoaXMuX2hhbmRsZXIpLGRlbGV0ZSB0aGlzLl9tYXB9LHBuLnByb3RvdHlwZS5fY3JlYXRlQnV0dG9uPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1zLmNyZWF0ZShcImJ1dHRvblwiLHQsdGhpcy5fY29udGFpbmVyKTtyZXR1cm4gbi50eXBlPVwiYnV0dG9uXCIsbi5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsZSksbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIixyKSxufTt2YXIgZ249e2NlbnRlcjpcInRyYW5zbGF0ZSgtNTAlLC01MCUpXCIsdG9wOlwidHJhbnNsYXRlKC01MCUsMClcIixcInRvcC1sZWZ0XCI6XCJ0cmFuc2xhdGUoMCwwKVwiLFwidG9wLXJpZ2h0XCI6XCJ0cmFuc2xhdGUoLTEwMCUsMClcIixib3R0b206XCJ0cmFuc2xhdGUoLTUwJSwtMTAwJSlcIixcImJvdHRvbS1sZWZ0XCI6XCJ0cmFuc2xhdGUoMCwtMTAwJSlcIixcImJvdHRvbS1yaWdodFwiOlwidHJhbnNsYXRlKC0xMDAlLC0xMDAlKVwiLGxlZnQ6XCJ0cmFuc2xhdGUoMCwtNTAlKVwiLHJpZ2h0OlwidHJhbnNsYXRlKC0xMDAlLC01MCUpXCJ9O2Z1bmN0aW9uIHZuKHQsZSxyKXt2YXIgbj10LmNsYXNzTGlzdDtmb3IodmFyIGkgaW4gZ24pbi5yZW1vdmUoXCJtYXBib3hnbC1cIityK1wiLWFuY2hvci1cIitpKTtuLmFkZChcIm1hcGJveGdsLVwiK3IrXCItYW5jaG9yLVwiK2UpfXZhciBtbj1mdW5jdGlvbihlKXtpZigoYXJndW1lbnRzWzBdaW5zdGFuY2VvZiB0LmRlZmF1bHQuSFRNTEVsZW1lbnR8fDI9PT1hcmd1bWVudHMubGVuZ3RoKSYmKGU9dC5leHRlbmQoe2VsZW1lbnQ6ZX0sYXJndW1lbnRzWzFdKSksdC5iaW5kQWxsKFtcIl91cGRhdGVcIixcIl9vbk1hcENsaWNrXCJdLHRoaXMpLHRoaXMuX2FuY2hvcj1lJiZlLmFuY2hvcnx8XCJjZW50ZXJcIix0aGlzLl9jb2xvcj1lJiZlLmNvbG9yfHxcIiMzRkIxQ0VcIixlJiZlLmVsZW1lbnQpdGhpcy5fZWxlbWVudD1lLmVsZW1lbnQsdGhpcy5fb2Zmc2V0PXQuZGVmYXVsdCQxLmNvbnZlcnQoZSYmZS5vZmZzZXR8fFswLDBdKTtlbHNle3RoaXMuX2RlZmF1bHRNYXJrZXI9ITAsdGhpcy5fZWxlbWVudD1zLmNyZWF0ZShcImRpdlwiKTt2YXIgcj1zLmNyZWF0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcInN2Z1wiKTtyLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJoZWlnaHRcIixcIjQxcHhcIiksci5zZXRBdHRyaWJ1dGVOUyhudWxsLFwid2lkdGhcIixcIjI3cHhcIiksci5zZXRBdHRyaWJ1dGVOUyhudWxsLFwidmlld0JveFwiLFwiMCAwIDI3IDQxXCIpO3ZhciBuPXMuY3JlYXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwiZ1wiKTtuLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJzdHJva2VcIixcIm5vbmVcIiksbi5zZXRBdHRyaWJ1dGVOUyhudWxsLFwic3Ryb2tlLXdpZHRoXCIsXCIxXCIpLG4uc2V0QXR0cmlidXRlTlMobnVsbCxcImZpbGxcIixcIm5vbmVcIiksbi5zZXRBdHRyaWJ1dGVOUyhudWxsLFwiZmlsbC1ydWxlXCIsXCJldmVub2RkXCIpO3ZhciBpPXMuY3JlYXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwiZ1wiKTtpLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJmaWxsLXJ1bGVcIixcIm5vbnplcm9cIik7dmFyIGE9cy5jcmVhdGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXCJnXCIpO2Euc2V0QXR0cmlidXRlTlMobnVsbCxcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKDMuMCwgMjkuMClcIiksYS5zZXRBdHRyaWJ1dGVOUyhudWxsLFwiZmlsbFwiLFwiIzAwMDAwMFwiKTtmb3IodmFyIG89MCxsPVt7cng6XCIxMC41XCIscnk6XCI1LjI1MDAyMjczXCJ9LHtyeDpcIjEwLjVcIixyeTpcIjUuMjUwMDIyNzNcIn0se3J4OlwiOS41XCIscnk6XCI0Ljc3Mjc1MDA3XCJ9LHtyeDpcIjguNVwiLHJ5OlwiNC4yOTU0OTkzNlwifSx7cng6XCI3LjVcIixyeTpcIjMuODE4MjIzMDhcIn0se3J4OlwiNi41XCIscnk6XCIzLjM0MDk0Njc5XCJ9LHtyeDpcIjUuNVwiLHJ5OlwiMi44NjM2NzA1MVwifSx7cng6XCI0LjVcIixyeTpcIjIuMzg2MzY4NjRcIn1dO288bC5sZW5ndGg7bys9MSl7dmFyIGM9bFtvXSx1PXMuY3JlYXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwiZWxsaXBzZVwiKTt1LnNldEF0dHJpYnV0ZU5TKG51bGwsXCJvcGFjaXR5XCIsXCIwLjA0XCIpLHUuc2V0QXR0cmlidXRlTlMobnVsbCxcImN4XCIsXCIxMC41XCIpLHUuc2V0QXR0cmlidXRlTlMobnVsbCxcImN5XCIsXCI1LjgwMDI5MDA4XCIpLHUuc2V0QXR0cmlidXRlTlMobnVsbCxcInJ4XCIsYy5yeCksdS5zZXRBdHRyaWJ1dGVOUyhudWxsLFwicnlcIixjLnJ5KSxhLmFwcGVuZENoaWxkKHUpfXZhciBoPXMuY3JlYXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwiZ1wiKTtoLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJmaWxsXCIsdGhpcy5fY29sb3IpO3ZhciBmPXMuY3JlYXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwicGF0aFwiKTtmLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJkXCIsXCJNMjcsMTMuNSBDMjcsMTkuMDc0NjQ0IDIwLjI1MDAwMSwyNy4wMDAwMDIgMTQuNzUsMzQuNTAwMDAyIEMxNC4wMTY2NjUsMzUuNTAwMDA0IDEyLjk4MzMzNSwzNS41MDAwMDQgMTIuMjUsMzQuNTAwMDAyIEM2Ljc0OTk5OTMsMjcuMDAwMDAyIDAsMTkuMjIyNTYyIDAsMTMuNSBDMCw2LjA0NDE1NTkgNi4wNDQxNTU5LDAgMTMuNSwwIEMyMC45NTU4NDQsMCAyNyw2LjA0NDE1NTkgMjcsMTMuNSBaXCIpLGguYXBwZW5kQ2hpbGQoZik7dmFyIHA9cy5jcmVhdGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXCJnXCIpO3Auc2V0QXR0cmlidXRlTlMobnVsbCxcIm9wYWNpdHlcIixcIjAuMjVcIikscC5zZXRBdHRyaWJ1dGVOUyhudWxsLFwiZmlsbFwiLFwiIzAwMDAwMFwiKTt2YXIgZD1zLmNyZWF0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcInBhdGhcIik7ZC5zZXRBdHRyaWJ1dGVOUyhudWxsLFwiZFwiLFwiTTEzLjUsMCBDNi4wNDQxNTU5LDAgMCw2LjA0NDE1NTkgMCwxMy41IEMwLDE5LjIyMjU2MiA2Ljc0OTk5OTMsMjcgMTIuMjUsMzQuNSBDMTMsMzUuNTIyNzI3IDE0LjAxNjY2NCwzNS41MDAwMDQgMTQuNzUsMzQuNSBDMjAuMjUwMDAxLDI3IDI3LDE5LjA3NDY0NCAyNywxMy41IEMyNyw2LjA0NDE1NTkgMjAuOTU1ODQ0LDAgMTMuNSwwIFogTTEzLjUsMSBDMjAuNDE1NDA0LDEgMjYsNi41ODQ1OTYgMjYsMTMuNSBDMjYsMTUuODk4NjU3IDI0LjQ5NTU4NCwxOS4xODE0MzEgMjIuMjIwNzAzLDIyLjczODI4MSBDMTkuOTQ1ODIzLDI2LjI5NTEzMiAxNi43MDUxMTksMzAuMTQyMTY3IDEzLjk0MzM1OSwzMy45MDgyMDMgQzEzLjc0MzQ0NSwzNC4xODA4MTQgMTMuNjEyNzE1LDM0LjMyMjczOCAxMy41LDM0LjQ0MTQwNiBDMTMuMzg3Mjg1LDM0LjMyMjczOCAxMy4yNTY1NTUsMzQuMTgwODE0IDEzLjA1NjY0MSwzMy45MDgyMDMgQzEwLjI4NDQ4MSwzMC4xMjc5ODUgNy40MTQ4Njg0LDI2LjMxNDE1OSA1LjAxNTYyNSwyMi43NzM0MzggQzIuNjE2MzgxNiwxOS4yMzI3MTUgMSwxNS45NTM1MzggMSwxMy41IEMxLDYuNTg0NTk2IDYuNTg0NTk2LDEgMTMuNSwxIFpcIikscC5hcHBlbmRDaGlsZChkKTt2YXIgZz1zLmNyZWF0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcImdcIik7Zy5zZXRBdHRyaWJ1dGVOUyhudWxsLFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoNi4wLCA3LjApXCIpLGcuc2V0QXR0cmlidXRlTlMobnVsbCxcImZpbGxcIixcIiNGRkZGRkZcIik7dmFyIHY9cy5jcmVhdGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXCJnXCIpO3Yuc2V0QXR0cmlidXRlTlMobnVsbCxcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKDguMCwgOC4wKVwiKTt2YXIgbT1zLmNyZWF0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcImNpcmNsZVwiKTttLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJmaWxsXCIsXCIjMDAwMDAwXCIpLG0uc2V0QXR0cmlidXRlTlMobnVsbCxcIm9wYWNpdHlcIixcIjAuMjVcIiksbS5zZXRBdHRyaWJ1dGVOUyhudWxsLFwiY3hcIixcIjUuNVwiKSxtLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJjeVwiLFwiNS41XCIpLG0uc2V0QXR0cmlidXRlTlMobnVsbCxcInJcIixcIjUuNDk5OTk2MlwiKTt2YXIgeT1zLmNyZWF0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcImNpcmNsZVwiKTt5LnNldEF0dHJpYnV0ZU5TKG51bGwsXCJmaWxsXCIsXCIjRkZGRkZGXCIpLHkuc2V0QXR0cmlidXRlTlMobnVsbCxcImN4XCIsXCI1LjVcIikseS5zZXRBdHRyaWJ1dGVOUyhudWxsLFwiY3lcIixcIjUuNVwiKSx5LnNldEF0dHJpYnV0ZU5TKG51bGwsXCJyXCIsXCI1LjQ5OTk5NjJcIiksdi5hcHBlbmRDaGlsZChtKSx2LmFwcGVuZENoaWxkKHkpLGkuYXBwZW5kQ2hpbGQoYSksaS5hcHBlbmRDaGlsZChoKSxpLmFwcGVuZENoaWxkKHApLGkuYXBwZW5kQ2hpbGQoZyksaS5hcHBlbmRDaGlsZCh2KSxyLmFwcGVuZENoaWxkKGkpLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQociksdGhpcy5fb2Zmc2V0PXQuZGVmYXVsdCQxLmNvbnZlcnQoZSYmZS5vZmZzZXR8fFswLC0xNF0pfXRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLW1hcmtlclwiKSx0aGlzLl9wb3B1cD1udWxsfTttbi5wcm90b3R5cGUuYWRkVG89ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVtb3ZlKCksdGhpcy5fbWFwPXQsdC5nZXRDYW52YXNDb250YWluZXIoKS5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KSx0Lm9uKFwibW92ZVwiLHRoaXMuX3VwZGF0ZSksdC5vbihcIm1vdmVlbmRcIix0aGlzLl91cGRhdGUpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX21hcC5vbihcImNsaWNrXCIsdGhpcy5fb25NYXBDbGljayksdGhpc30sbW4ucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJih0aGlzLl9tYXAub2ZmKFwiY2xpY2tcIix0aGlzLl9vbk1hcENsaWNrKSx0aGlzLl9tYXAub2ZmKFwibW92ZVwiLHRoaXMuX3VwZGF0ZSksdGhpcy5fbWFwLm9mZihcIm1vdmVlbmRcIix0aGlzLl91cGRhdGUpLGRlbGV0ZSB0aGlzLl9tYXApLHMucmVtb3ZlKHRoaXMuX2VsZW1lbnQpLHRoaXMuX3BvcHVwJiZ0aGlzLl9wb3B1cC5yZW1vdmUoKSx0aGlzfSxtbi5wcm90b3R5cGUuZ2V0TG5nTGF0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xuZ0xhdH0sbW4ucHJvdG90eXBlLnNldExuZ0xhdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbG5nTGF0PUcuY29udmVydCh0KSx0aGlzLl9wb3M9bnVsbCx0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuc2V0TG5nTGF0KHRoaXMuX2xuZ0xhdCksdGhpcy5fdXBkYXRlKCksdGhpc30sbW4ucHJvdG90eXBlLmdldEVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudH0sbW4ucHJvdG90eXBlLnNldFBvcHVwPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX3BvcHVwJiYodGhpcy5fcG9wdXAucmVtb3ZlKCksdGhpcy5fcG9wdXA9bnVsbCksdCl7aWYoIShcIm9mZnNldFwiaW4gdC5vcHRpb25zKSl7dmFyIGU9TWF0aC5zcXJ0KE1hdGgucG93KDEzLjUsMikvMik7dC5vcHRpb25zLm9mZnNldD10aGlzLl9kZWZhdWx0TWFya2VyP3t0b3A6WzAsMF0sXCJ0b3AtbGVmdFwiOlswLDBdLFwidG9wLXJpZ2h0XCI6WzAsMF0sYm90dG9tOlswLC0zOC4xXSxcImJvdHRvbS1sZWZ0XCI6W2UsLTEqKDI0LjYrZSldLFwiYm90dG9tLXJpZ2h0XCI6Wy1lLC0xKigyNC42K2UpXSxsZWZ0OlsxMy41LC0yNC42XSxyaWdodDpbLTEzLjUsLTI0LjZdfTp0aGlzLl9vZmZzZXR9dGhpcy5fcG9wdXA9dCx0aGlzLl9sbmdMYXQmJnRoaXMuX3BvcHVwLnNldExuZ0xhdCh0aGlzLl9sbmdMYXQpfXJldHVybiB0aGlzfSxtbi5wcm90b3R5cGUuX29uTWFwQ2xpY2s9ZnVuY3Rpb24odCl7dmFyIGU9dC5vcmlnaW5hbEV2ZW50LnRhcmdldCxyPXRoaXMuX2VsZW1lbnQ7dGhpcy5fcG9wdXAmJihlPT09cnx8ci5jb250YWlucyhlKSkmJnRoaXMudG9nZ2xlUG9wdXAoKX0sbW4ucHJvdG90eXBlLmdldFBvcHVwPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcHVwfSxtbi5wcm90b3R5cGUudG9nZ2xlUG9wdXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wb3B1cDtyZXR1cm4gdD8odC5pc09wZW4oKT90LnJlbW92ZSgpOnQuYWRkVG8odGhpcy5fbWFwKSx0aGlzKTp0aGlzfSxtbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLl9tYXAmJih0aGlzLl9tYXAudHJhbnNmb3JtLnJlbmRlcldvcmxkQ29waWVzJiYodGhpcy5fbG5nTGF0PWRuKHRoaXMuX2xuZ0xhdCx0aGlzLl9wb3MsdGhpcy5fbWFwLnRyYW5zZm9ybSkpLHRoaXMuX3Bvcz10aGlzLl9tYXAucHJvamVjdCh0aGlzLl9sbmdMYXQpLl9hZGQodGhpcy5fb2Zmc2V0KSx0JiZcIm1vdmVlbmRcIiE9PXQudHlwZXx8KHRoaXMuX3Bvcz10aGlzLl9wb3Mucm91bmQoKSkscy5zZXRUcmFuc2Zvcm0odGhpcy5fZWxlbWVudCxnblt0aGlzLl9hbmNob3JdK1wiIHRyYW5zbGF0ZShcIit0aGlzLl9wb3MueCtcInB4LCBcIit0aGlzLl9wb3MueStcInB4KVwiKSx2bih0aGlzLl9lbGVtZW50LHRoaXMuX2FuY2hvcixcIm1hcmtlclwiKSl9LG1uLnByb3RvdHlwZS5nZXRPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb2Zmc2V0fSxtbi5wcm90b3R5cGUuc2V0T2Zmc2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9vZmZzZXQ9dC5kZWZhdWx0JDEuY29udmVydChlKSx0aGlzLl91cGRhdGUoKSx0aGlzfTt2YXIgeW4seG49e3Bvc2l0aW9uT3B0aW9uczp7ZW5hYmxlSGlnaEFjY3VyYWN5OiExLG1heGltdW1BZ2U6MCx0aW1lb3V0OjZlM30sZml0Qm91bmRzT3B0aW9uczp7bWF4Wm9vbToxNX0sdHJhY2tVc2VyTG9jYXRpb246ITEsc2hvd1VzZXJMb2NhdGlvbjohMH0sYm49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyKXtlLmNhbGwodGhpcyksdGhpcy5vcHRpb25zPXQuZXh0ZW5kKHt9LHhuLHIpLHQuYmluZEFsbChbXCJfb25TdWNjZXNzXCIsXCJfb25FcnJvclwiLFwiX2ZpbmlzaFwiLFwiX3NldHVwVUlcIixcIl91cGRhdGVDYW1lcmFcIixcIl91cGRhdGVNYXJrZXJcIl0sdGhpcyl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKGUpe3ZhciByO3JldHVybiB0aGlzLl9tYXA9ZSx0aGlzLl9jb250YWluZXI9cy5jcmVhdGUoXCJkaXZcIixcIm1hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1ncm91cFwiKSxyPXRoaXMuX3NldHVwVUksdm9pZCAwIT09eW4/cih5bik6dm9pZCAwIT09dC5kZWZhdWx0Lm5hdmlnYXRvci5wZXJtaXNzaW9ucz90LmRlZmF1bHQubmF2aWdhdG9yLnBlcm1pc3Npb25zLnF1ZXJ5KHtuYW1lOlwiZ2VvbG9jYXRpb25cIn0pLnRoZW4oZnVuY3Rpb24odCl7eW49XCJkZW5pZWRcIiE9PXQuc3RhdGUscih5bil9KTooeW49ISF0LmRlZmF1bHQubmF2aWdhdG9yLmdlb2xvY2F0aW9uLHIoeW4pKSx0aGlzLl9jb250YWluZXJ9LHIucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7dm9pZCAwIT09dGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEJiYodC5kZWZhdWx0Lm5hdmlnYXRvci5nZW9sb2NhdGlvbi5jbGVhcldhdGNoKHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCksdGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEPXZvaWQgMCksdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJnRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlci5yZW1vdmUoKSxzLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLHRoaXMuX21hcD12b2lkIDB9LHIucHJvdG90eXBlLl9vblN1Y2Nlc3M9ZnVuY3Rpb24oZSl7aWYodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKXN3aXRjaCh0aGlzLl9sYXN0S25vd25Qb3NpdGlvbj1lLHRoaXMuX3dhdGNoU3RhdGUpe2Nhc2VcIldBSVRJTkdfQUNUSVZFXCI6Y2FzZVwiQUNUSVZFX0xPQ0tcIjpjYXNlXCJBQ1RJVkVfRVJST1JcIjp0aGlzLl93YXRjaFN0YXRlPVwiQUNUSVZFX0xPQ0tcIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmdcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3JcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmVcIik7YnJlYWs7Y2FzZVwiQkFDS0dST1VORFwiOmNhc2VcIkJBQ0tHUk9VTkRfRVJST1JcIjp0aGlzLl93YXRjaFN0YXRlPVwiQkFDS0dST1VORFwiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZ1wiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3JcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kXCIpfXRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiZcIk9GRlwiIT09dGhpcy5fd2F0Y2hTdGF0ZSYmdGhpcy5fdXBkYXRlTWFya2VyKGUpLHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbiYmXCJBQ1RJVkVfTE9DS1wiIT09dGhpcy5fd2F0Y2hTdGF0ZXx8dGhpcy5fdXBkYXRlQ2FtZXJhKGUpLHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiZ0aGlzLl9kb3RFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC11c2VyLWxvY2F0aW9uLWRvdC1zdGFsZVwiKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJnZW9sb2NhdGVcIixlKSksdGhpcy5fZmluaXNoKCl9LHIucHJvdG90eXBlLl91cGRhdGVDYW1lcmE9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEcodC5jb29yZHMubG9uZ2l0dWRlLHQuY29vcmRzLmxhdGl0dWRlKSxyPXQuY29vcmRzLmFjY3VyYWN5O3RoaXMuX21hcC5maXRCb3VuZHMoZS50b0JvdW5kcyhyKSx0aGlzLm9wdGlvbnMuZml0Qm91bmRzT3B0aW9ucyx7Z2VvbG9jYXRlU291cmNlOiEwfSl9LHIucHJvdG90eXBlLl91cGRhdGVNYXJrZXI9ZnVuY3Rpb24odCl7dD90aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXIuc2V0TG5nTGF0KFt0LmNvb3Jkcy5sb25naXR1ZGUsdC5jb29yZHMubGF0aXR1ZGVdKS5hZGRUbyh0aGlzLl9tYXApOnRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlci5yZW1vdmUoKX0sci5wcm90b3R5cGUuX29uRXJyb3I9ZnVuY3Rpb24oZSl7aWYodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKWlmKDE9PT1lLmNvZGUpdGhpcy5fd2F0Y2hTdGF0ZT1cIk9GRlwiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZ1wiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZVwiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvclwiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmRcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kLWVycm9yXCIpLHZvaWQgMCE9PXRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCYmdGhpcy5fY2xlYXJXYXRjaCgpO2Vsc2Ugc3dpdGNoKHRoaXMuX3dhdGNoU3RhdGUpe2Nhc2VcIldBSVRJTkdfQUNUSVZFXCI6dGhpcy5fd2F0Y2hTdGF0ZT1cIkFDVElWRV9FUlJPUlwiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlXCIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yXCIpO2JyZWFrO2Nhc2VcIkFDVElWRV9MT0NLXCI6dGhpcy5fd2F0Y2hTdGF0ZT1cIkFDVElWRV9FUlJPUlwiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlXCIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yXCIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZ1wiKTticmVhaztjYXNlXCJCQUNLR1JPVU5EXCI6dGhpcy5fd2F0Y2hTdGF0ZT1cIkJBQ0tHUk9VTkRfRVJST1JcIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmRcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kLWVycm9yXCIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZ1wiKX1cIk9GRlwiIT09dGhpcy5fd2F0Y2hTdGF0ZSYmdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJnRoaXMuX2RvdEVsZW1lbnQuY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLXVzZXItbG9jYXRpb24tZG90LXN0YWxlXCIpLHRoaXMuZmlyZShuZXcgdC5FdmVudChcImVycm9yXCIsZSkpLHRoaXMuX2ZpbmlzaCgpfSxyLnByb3RvdHlwZS5fZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fdGltZW91dElkJiZjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dElkKSx0aGlzLl90aW1lb3V0SWQ9dm9pZCAwfSxyLnByb3RvdHlwZS5fc2V0dXBVST1mdW5jdGlvbihlKXt2YXIgcj10aGlzOyExIT09ZSYmKHRoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpfSksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uPXMuY3JlYXRlKFwiYnV0dG9uXCIsXCJtYXBib3hnbC1jdHJsLWljb24gbWFwYm94Z2wtY3RybC1nZW9sb2NhdGVcIix0aGlzLl9jb250YWluZXIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi50eXBlPVwiYnV0dG9uXCIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIixcIkdlb2xvY2F0ZVwiKSx0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24mJih0aGlzLl9nZW9sb2NhdGVCdXR0b24uc2V0QXR0cmlidXRlKFwiYXJpYS1wcmVzc2VkXCIsXCJmYWxzZVwiKSx0aGlzLl93YXRjaFN0YXRlPVwiT0ZGXCIpLHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiYodGhpcy5fZG90RWxlbWVudD1zLmNyZWF0ZShcImRpdlwiLFwibWFwYm94Z2wtdXNlci1sb2NhdGlvbi1kb3RcIiksdGhpcy5fdXNlckxvY2F0aW9uRG90TWFya2VyPW5ldyBtbih0aGlzLl9kb3RFbGVtZW50KSx0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24mJih0aGlzLl93YXRjaFN0YXRlPVwiT0ZGXCIpKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdGhpcy50cmlnZ2VyLmJpbmQodGhpcykpLHRoaXMuX3NldHVwPSEwLHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbiYmdGhpcy5fbWFwLm9uKFwibW92ZXN0YXJ0XCIsZnVuY3Rpb24oZSl7ZS5nZW9sb2NhdGVTb3VyY2V8fFwiQUNUSVZFX0xPQ0tcIiE9PXIuX3dhdGNoU3RhdGV8fChyLl93YXRjaFN0YXRlPVwiQkFDS0dST1VORFwiLHIuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZFwiKSxyLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZVwiKSxyLmZpcmUobmV3IHQuRXZlbnQoXCJ0cmFja3VzZXJsb2NhdGlvbmVuZFwiKSkpfSkpfSxyLnByb3RvdHlwZS50cmlnZ2VyPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX3NldHVwKXJldHVybiB0Lndhcm5PbmNlKFwiR2VvbG9jYXRlIGNvbnRyb2wgdHJpZ2dlcmVkIGJlZm9yZSBhZGRlZCB0byBhIG1hcFwiKSwhMTtpZih0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24pe3N3aXRjaCh0aGlzLl93YXRjaFN0YXRlKXtjYXNlXCJPRkZcIjp0aGlzLl93YXRjaFN0YXRlPVwiV0FJVElOR19BQ1RJVkVcIix0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJ0cmFja3VzZXJsb2NhdGlvbnN0YXJ0XCIpKTticmVhaztjYXNlXCJXQUlUSU5HX0FDVElWRVwiOmNhc2VcIkFDVElWRV9MT0NLXCI6Y2FzZVwiQUNUSVZFX0VSUk9SXCI6Y2FzZVwiQkFDS0dST1VORF9FUlJPUlwiOnRoaXMuX3dhdGNoU3RhdGU9XCJPRkZcIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmdcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmVcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3JcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kXCIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvclwiKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJ0cmFja3VzZXJsb2NhdGlvbmVuZFwiKSk7YnJlYWs7Y2FzZVwiQkFDS0dST1VORFwiOnRoaXMuX3dhdGNoU3RhdGU9XCJBQ1RJVkVfTE9DS1wiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZFwiKSx0aGlzLl9sYXN0S25vd25Qb3NpdGlvbiYmdGhpcy5fdXBkYXRlQ2FtZXJhKHRoaXMuX2xhc3RLbm93blBvc2l0aW9uKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJ0cmFja3VzZXJsb2NhdGlvbnN0YXJ0XCIpKX1zd2l0Y2godGhpcy5fd2F0Y2hTdGF0ZSl7Y2FzZVwiV0FJVElOR19BQ1RJVkVcIjp0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmdcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmVcIik7YnJlYWs7Y2FzZVwiQUNUSVZFX0xPQ0tcIjp0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZVwiKTticmVhaztjYXNlXCJBQ1RJVkVfRVJST1JcIjp0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmdcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3JcIik7YnJlYWs7Y2FzZVwiQkFDS0dST1VORFwiOnRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZFwiKTticmVhaztjYXNlXCJCQUNLR1JPVU5EX0VSUk9SXCI6dGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nXCIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvclwiKX1cIk9GRlwiPT09dGhpcy5fd2F0Y2hTdGF0ZSYmdm9pZCAwIT09dGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEP3RoaXMuX2NsZWFyV2F0Y2goKTp2b2lkIDA9PT10aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQmJih0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZChcIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmdcIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZShcImFyaWEtcHJlc3NlZFwiLFwidHJ1ZVwiKSx0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQ9dC5kZWZhdWx0Lm5hdmlnYXRvci5nZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uKHRoaXMuX29uU3VjY2Vzcyx0aGlzLl9vbkVycm9yLHRoaXMub3B0aW9ucy5wb3NpdGlvbk9wdGlvbnMpKX1lbHNlIHQuZGVmYXVsdC5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHRoaXMuX29uU3VjY2Vzcyx0aGlzLl9vbkVycm9yLHRoaXMub3B0aW9ucy5wb3NpdGlvbk9wdGlvbnMpLHRoaXMuX3RpbWVvdXRJZD1zZXRUaW1lb3V0KHRoaXMuX2ZpbmlzaCwxZTQpO3JldHVybiEwfSxyLnByb3RvdHlwZS5fY2xlYXJXYXRjaD1mdW5jdGlvbigpe3QuZGVmYXVsdC5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCh0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQpLHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRD12b2lkIDAsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoXCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nXCIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoXCJhcmlhLXByZXNzZWRcIixcImZhbHNlXCIpLHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiZ0aGlzLl91cGRhdGVNYXJrZXIobnVsbCl9LHJ9KHQuRXZlbnRlZCksX249e21heFdpZHRoOjEwMCx1bml0OlwibWV0cmljXCJ9LHduPWZ1bmN0aW9uKGUpe3RoaXMub3B0aW9ucz10LmV4dGVuZCh7fSxfbixlKSx0LmJpbmRBbGwoW1wiX29uTW92ZVwiLFwic2V0VW5pdFwiXSx0aGlzKX07ZnVuY3Rpb24ga24odCxlLHIpe3ZhciBuLGksYSxvLHMsbCxjPXImJnIubWF4V2lkdGh8fDEwMCx1PXQuX2NvbnRhaW5lci5jbGllbnRIZWlnaHQvMixoPShuPXQudW5wcm9qZWN0KFswLHVdKSxpPXQudW5wcm9qZWN0KFtjLHVdKSxhPU1hdGguUEkvMTgwLG89bi5sYXQqYSxzPWkubGF0KmEsbD1NYXRoLnNpbihvKSpNYXRoLnNpbihzKStNYXRoLmNvcyhvKSpNYXRoLmNvcyhzKSpNYXRoLmNvcygoaS5sbmctbi5sbmcpKmEpLDYzNzFlMypNYXRoLmFjb3MoTWF0aC5taW4obCwxKSkpO2lmKHImJlwiaW1wZXJpYWxcIj09PXIudW5pdCl7dmFyIGY9My4yODA4Kmg7Zj41MjgwP0FuKGUsYyxmLzUyODAsXCJtaVwiKTpBbihlLGMsZixcImZ0XCIpfWVsc2UgciYmXCJuYXV0aWNhbFwiPT09ci51bml0P0FuKGUsYyxoLzE4NTIsXCJubVwiKTpBbihlLGMsaCxcIm1cIil9ZnVuY3Rpb24gQW4odCxlLHIsbil7dmFyIGksYSxvLHM9KGk9ciwoYT1NYXRoLnBvdygxMCwoXCJcIitNYXRoLmZsb29yKGkpKS5sZW5ndGgtMSkpKihvPShvPWkvYSk+PTEwPzEwOm8+PTU/NTpvPj0zPzM6bz49Mj8yOjEpKSxsPXMvcjtcIm1cIj09PW4mJnM+PTFlMyYmKHMvPTFlMyxuPVwia21cIiksdC5zdHlsZS53aWR0aD1lKmwrXCJweFwiLHQuaW5uZXJIVE1MPXMrbn13bi5wcm90b3R5cGUuZ2V0RGVmYXVsdFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuXCJib3R0b20tbGVmdFwifSx3bi5wcm90b3R5cGUuX29uTW92ZT1mdW5jdGlvbigpe2tuKHRoaXMuX21hcCx0aGlzLl9jb250YWluZXIsdGhpcy5vcHRpb25zKX0sd24ucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tYXA9dCx0aGlzLl9jb250YWluZXI9cy5jcmVhdGUoXCJkaXZcIixcIm1hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1zY2FsZVwiLHQuZ2V0Q29udGFpbmVyKCkpLHRoaXMuX21hcC5vbihcIm1vdmVcIix0aGlzLl9vbk1vdmUpLHRoaXMuX29uTW92ZSgpLHRoaXMuX2NvbnRhaW5lcn0sd24ucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7cy5yZW1vdmUodGhpcy5fY29udGFpbmVyKSx0aGlzLl9tYXAub2ZmKFwibW92ZVwiLHRoaXMuX29uTW92ZSksdGhpcy5fbWFwPXZvaWQgMH0sd24ucHJvdG90eXBlLnNldFVuaXQ9ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zLnVuaXQ9dCxrbih0aGlzLl9tYXAsdGhpcy5fY29udGFpbmVyLHRoaXMub3B0aW9ucyl9O3ZhciBUbj1mdW5jdGlvbigpe3RoaXMuX2Z1bGxzY3JlZW49ITEsdC5iaW5kQWxsKFtcIl9vbkNsaWNrRnVsbHNjcmVlblwiLFwiX2NoYW5nZUljb25cIl0sdGhpcyksXCJvbmZ1bGxzY3JlZW5jaGFuZ2VcImluIHQuZGVmYXVsdC5kb2N1bWVudD90aGlzLl9mdWxsc2NyZWVuY2hhbmdlPVwiZnVsbHNjcmVlbmNoYW5nZVwiOlwib25tb3pmdWxsc2NyZWVuY2hhbmdlXCJpbiB0LmRlZmF1bHQuZG9jdW1lbnQ/dGhpcy5fZnVsbHNjcmVlbmNoYW5nZT1cIm1vemZ1bGxzY3JlZW5jaGFuZ2VcIjpcIm9ud2Via2l0ZnVsbHNjcmVlbmNoYW5nZVwiaW4gdC5kZWZhdWx0LmRvY3VtZW50P3RoaXMuX2Z1bGxzY3JlZW5jaGFuZ2U9XCJ3ZWJraXRmdWxsc2NyZWVuY2hhbmdlXCI6XCJvbm1zZnVsbHNjcmVlbmNoYW5nZVwiaW4gdC5kZWZhdWx0LmRvY3VtZW50JiYodGhpcy5fZnVsbHNjcmVlbmNoYW5nZT1cIk1TRnVsbHNjcmVlbkNoYW5nZVwiKSx0aGlzLl9jbGFzc05hbWU9XCJtYXBib3hnbC1jdHJsXCJ9O1RuLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbWFwPWUsdGhpcy5fbWFwQ29udGFpbmVyPXRoaXMuX21hcC5nZXRDb250YWluZXIoKSx0aGlzLl9jb250YWluZXI9cy5jcmVhdGUoXCJkaXZcIix0aGlzLl9jbGFzc05hbWUrXCIgbWFwYm94Z2wtY3RybC1ncm91cFwiKSx0aGlzLl9jaGVja0Z1bGxzY3JlZW5TdXBwb3J0KCk/dGhpcy5fc2V0dXBVSSgpOih0aGlzLl9jb250YWluZXIuc3R5bGUuZGlzcGxheT1cIm5vbmVcIix0Lndhcm5PbmNlKFwiVGhpcyBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBmdWxsc2NyZWVuIG1vZGUuXCIpKSx0aGlzLl9jb250YWluZXJ9LFRuLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3MucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwPW51bGwsdC5kZWZhdWx0LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5fZnVsbHNjcmVlbmNoYW5nZSx0aGlzLl9jaGFuZ2VJY29uKX0sVG4ucHJvdG90eXBlLl9jaGVja0Z1bGxzY3JlZW5TdXBwb3J0PWZ1bmN0aW9uKCl7cmV0dXJuISEodC5kZWZhdWx0LmRvY3VtZW50LmZ1bGxzY3JlZW5FbmFibGVkfHx0LmRlZmF1bHQuZG9jdW1lbnQubW96RnVsbFNjcmVlbkVuYWJsZWR8fHQuZGVmYXVsdC5kb2N1bWVudC5tc0Z1bGxzY3JlZW5FbmFibGVkfHx0LmRlZmF1bHQuZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVuYWJsZWQpfSxUbi5wcm90b3R5cGUuX3NldHVwVUk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9mdWxsc2NyZWVuQnV0dG9uPXMuY3JlYXRlKFwiYnV0dG9uXCIsdGhpcy5fY2xhc3NOYW1lK1wiLWljb24gXCIrdGhpcy5fY2xhc3NOYW1lK1wiLWZ1bGxzY3JlZW5cIix0aGlzLl9jb250YWluZXIpO2Uuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLFwiVG9nZ2xlIGZ1bGxzY3JlZW5cIiksZS50eXBlPVwiYnV0dG9uXCIsdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLl9vbkNsaWNrRnVsbHNjcmVlbiksdC5kZWZhdWx0LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5fZnVsbHNjcmVlbmNoYW5nZSx0aGlzLl9jaGFuZ2VJY29uKX0sVG4ucHJvdG90eXBlLl9pc0Z1bGxzY3JlZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZnVsbHNjcmVlbn0sVG4ucHJvdG90eXBlLl9jaGFuZ2VJY29uPWZ1bmN0aW9uKCl7KHQuZGVmYXVsdC5kb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudHx8dC5kZWZhdWx0LmRvY3VtZW50Lm1vekZ1bGxTY3JlZW5FbGVtZW50fHx0LmRlZmF1bHQuZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVsZW1lbnR8fHQuZGVmYXVsdC5kb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50KT09PXRoaXMuX21hcENvbnRhaW5lciE9PXRoaXMuX2Z1bGxzY3JlZW4mJih0aGlzLl9mdWxsc2NyZWVuPSF0aGlzLl9mdWxsc2NyZWVuLHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24uY2xhc3NMaXN0LnRvZ2dsZSh0aGlzLl9jbGFzc05hbWUrXCItc2hyaW5rXCIpLHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24uY2xhc3NMaXN0LnRvZ2dsZSh0aGlzLl9jbGFzc05hbWUrXCItZnVsbHNjcmVlblwiKSl9LFRuLnByb3RvdHlwZS5fb25DbGlja0Z1bGxzY3JlZW49ZnVuY3Rpb24oKXt0aGlzLl9pc0Z1bGxzY3JlZW4oKT90LmRlZmF1bHQuZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4/dC5kZWZhdWx0LmRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKCk6dC5kZWZhdWx0LmRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4/dC5kZWZhdWx0LmRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4oKTp0LmRlZmF1bHQuZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbj90LmRlZmF1bHQuZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbigpOnQuZGVmYXVsdC5kb2N1bWVudC53ZWJraXRDYW5jZWxGdWxsU2NyZWVuJiZ0LmRlZmF1bHQuZG9jdW1lbnQud2Via2l0Q2FuY2VsRnVsbFNjcmVlbigpOnRoaXMuX21hcENvbnRhaW5lci5yZXF1ZXN0RnVsbHNjcmVlbj90aGlzLl9tYXBDb250YWluZXIucmVxdWVzdEZ1bGxzY3JlZW4oKTp0aGlzLl9tYXBDb250YWluZXIubW96UmVxdWVzdEZ1bGxTY3JlZW4/dGhpcy5fbWFwQ29udGFpbmVyLm1velJlcXVlc3RGdWxsU2NyZWVuKCk6dGhpcy5fbWFwQ29udGFpbmVyLm1zUmVxdWVzdEZ1bGxzY3JlZW4/dGhpcy5fbWFwQ29udGFpbmVyLm1zUmVxdWVzdEZ1bGxzY3JlZW4oKTp0aGlzLl9tYXBDb250YWluZXIud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4mJnRoaXMuX21hcENvbnRhaW5lci53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbigpfTt2YXIgTW49e2Nsb3NlQnV0dG9uOiEwLGNsb3NlT25DbGljazohMH0sU249ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyKXtlLmNhbGwodGhpcyksdGhpcy5vcHRpb25zPXQuZXh0ZW5kKE9iamVjdC5jcmVhdGUoTW4pLHIpLHQuYmluZEFsbChbXCJfdXBkYXRlXCIsXCJfb25DbGlja0Nsb3NlXCJdLHRoaXMpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5hZGRUbz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbWFwPWUsdGhpcy5fbWFwLm9uKFwibW92ZVwiLHRoaXMuX3VwZGF0ZSksdGhpcy5vcHRpb25zLmNsb3NlT25DbGljayYmdGhpcy5fbWFwLm9uKFwiY2xpY2tcIix0aGlzLl9vbkNsaWNrQ2xvc2UpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuZmlyZShuZXcgdC5FdmVudChcIm9wZW5cIikpLHRoaXN9LHIucHJvdG90eXBlLmlzT3Blbj1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fbWFwfSxyLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGVudCYmcy5yZW1vdmUodGhpcy5fY29udGVudCksdGhpcy5fY29udGFpbmVyJiYocy5yZW1vdmUodGhpcy5fY29udGFpbmVyKSxkZWxldGUgdGhpcy5fY29udGFpbmVyKSx0aGlzLl9tYXAmJih0aGlzLl9tYXAub2ZmKFwibW92ZVwiLHRoaXMuX3VwZGF0ZSksdGhpcy5fbWFwLm9mZihcImNsaWNrXCIsdGhpcy5fb25DbGlja0Nsb3NlKSxkZWxldGUgdGhpcy5fbWFwKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoXCJjbG9zZVwiKSksdGhpc30sci5wcm90b3R5cGUuZ2V0TG5nTGF0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xuZ0xhdH0sci5wcm90b3R5cGUuc2V0TG5nTGF0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sbmdMYXQ9Ry5jb252ZXJ0KHQpLHRoaXMuX3Bvcz1udWxsLHRoaXMuX3VwZGF0ZSgpLHRoaXN9LHIucHJvdG90eXBlLnNldFRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2V0RE9NQ29udGVudCh0LmRlZmF1bHQuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSkpfSxyLnByb3RvdHlwZS5zZXRIVE1MPWZ1bmN0aW9uKGUpe3ZhciByLG49dC5kZWZhdWx0LmRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxpPXQuZGVmYXVsdC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYm9keVwiKTtmb3IoaS5pbm5lckhUTUw9ZTtyPWkuZmlyc3RDaGlsZDspbi5hcHBlbmRDaGlsZChyKTtyZXR1cm4gdGhpcy5zZXRET01Db250ZW50KG4pfSxyLnByb3RvdHlwZS5zZXRET01Db250ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jcmVhdGVDb250ZW50KCksdGhpcy5fY29udGVudC5hcHBlbmRDaGlsZCh0KSx0aGlzLl91cGRhdGUoKSx0aGlzfSxyLnByb3RvdHlwZS5fY3JlYXRlQ29udGVudD1mdW5jdGlvbigpe3RoaXMuX2NvbnRlbnQmJnMucmVtb3ZlKHRoaXMuX2NvbnRlbnQpLHRoaXMuX2NvbnRlbnQ9cy5jcmVhdGUoXCJkaXZcIixcIm1hcGJveGdsLXBvcHVwLWNvbnRlbnRcIix0aGlzLl9jb250YWluZXIpLHRoaXMub3B0aW9ucy5jbG9zZUJ1dHRvbiYmKHRoaXMuX2Nsb3NlQnV0dG9uPXMuY3JlYXRlKFwiYnV0dG9uXCIsXCJtYXBib3hnbC1wb3B1cC1jbG9zZS1idXR0b25cIix0aGlzLl9jb250ZW50KSx0aGlzLl9jbG9zZUJ1dHRvbi50eXBlPVwiYnV0dG9uXCIsdGhpcy5fY2xvc2VCdXR0b24uc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLFwiQ2xvc2UgcG9wdXBcIiksdGhpcy5fY2xvc2VCdXR0b24uaW5uZXJIVE1MPVwiJiMyMTU7XCIsdGhpcy5fY2xvc2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdGhpcy5fb25DbGlja0Nsb3NlKSl9LHIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXAmJnRoaXMuX2xuZ0xhdCYmdGhpcy5fY29udGVudCl7dGhpcy5fY29udGFpbmVyfHwodGhpcy5fY29udGFpbmVyPXMuY3JlYXRlKFwiZGl2XCIsXCJtYXBib3hnbC1wb3B1cFwiLHRoaXMuX21hcC5nZXRDb250YWluZXIoKSksdGhpcy5fdGlwPXMuY3JlYXRlKFwiZGl2XCIsXCJtYXBib3hnbC1wb3B1cC10aXBcIix0aGlzLl9jb250YWluZXIpLHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9jb250ZW50KSksdGhpcy5fbWFwLnRyYW5zZm9ybS5yZW5kZXJXb3JsZENvcGllcyYmKHRoaXMuX2xuZ0xhdD1kbih0aGlzLl9sbmdMYXQsdGhpcy5fcG9zLHRoaXMuX21hcC50cmFuc2Zvcm0pKTt2YXIgZT10aGlzLl9wb3M9dGhpcy5fbWFwLnByb2plY3QodGhpcy5fbG5nTGF0KSxyPXRoaXMub3B0aW9ucy5hbmNob3Isbj1mdW5jdGlvbiBlKHIpe2lmKHIpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiByKXt2YXIgbj1NYXRoLnJvdW5kKE1hdGguc3FydCguNSpNYXRoLnBvdyhyLDIpKSk7cmV0dXJue2NlbnRlcjpuZXcgdC5kZWZhdWx0JDEoMCwwKSx0b3A6bmV3IHQuZGVmYXVsdCQxKDAsciksXCJ0b3AtbGVmdFwiOm5ldyB0LmRlZmF1bHQkMShuLG4pLFwidG9wLXJpZ2h0XCI6bmV3IHQuZGVmYXVsdCQxKC1uLG4pLGJvdHRvbTpuZXcgdC5kZWZhdWx0JDEoMCwtciksXCJib3R0b20tbGVmdFwiOm5ldyB0LmRlZmF1bHQkMShuLC1uKSxcImJvdHRvbS1yaWdodFwiOm5ldyB0LmRlZmF1bHQkMSgtbiwtbiksbGVmdDpuZXcgdC5kZWZhdWx0JDEociwwKSxyaWdodDpuZXcgdC5kZWZhdWx0JDEoLXIsMCl9fWlmKHIgaW5zdGFuY2VvZiB0LmRlZmF1bHQkMXx8QXJyYXkuaXNBcnJheShyKSl7dmFyIGk9dC5kZWZhdWx0JDEuY29udmVydChyKTtyZXR1cm57Y2VudGVyOmksdG9wOmksXCJ0b3AtbGVmdFwiOmksXCJ0b3AtcmlnaHRcIjppLGJvdHRvbTppLFwiYm90dG9tLWxlZnRcIjppLFwiYm90dG9tLXJpZ2h0XCI6aSxsZWZ0OmkscmlnaHQ6aX19cmV0dXJue2NlbnRlcjp0LmRlZmF1bHQkMS5jb252ZXJ0KHIuY2VudGVyfHxbMCwwXSksdG9wOnQuZGVmYXVsdCQxLmNvbnZlcnQoci50b3B8fFswLDBdKSxcInRvcC1sZWZ0XCI6dC5kZWZhdWx0JDEuY29udmVydChyW1widG9wLWxlZnRcIl18fFswLDBdKSxcInRvcC1yaWdodFwiOnQuZGVmYXVsdCQxLmNvbnZlcnQocltcInRvcC1yaWdodFwiXXx8WzAsMF0pLGJvdHRvbTp0LmRlZmF1bHQkMS5jb252ZXJ0KHIuYm90dG9tfHxbMCwwXSksXCJib3R0b20tbGVmdFwiOnQuZGVmYXVsdCQxLmNvbnZlcnQocltcImJvdHRvbS1sZWZ0XCJdfHxbMCwwXSksXCJib3R0b20tcmlnaHRcIjp0LmRlZmF1bHQkMS5jb252ZXJ0KHJbXCJib3R0b20tcmlnaHRcIl18fFswLDBdKSxsZWZ0OnQuZGVmYXVsdCQxLmNvbnZlcnQoci5sZWZ0fHxbMCwwXSkscmlnaHQ6dC5kZWZhdWx0JDEuY29udmVydChyLnJpZ2h0fHxbMCwwXSl9fXJldHVybiBlKG5ldyB0LmRlZmF1bHQkMSgwLDApKX0odGhpcy5vcHRpb25zLm9mZnNldCk7aWYoIXIpe3ZhciBpLGE9dGhpcy5fY29udGFpbmVyLm9mZnNldFdpZHRoLG89dGhpcy5fY29udGFpbmVyLm9mZnNldEhlaWdodDtpPWUueStuLmJvdHRvbS55PG8/W1widG9wXCJdOmUueT50aGlzLl9tYXAudHJhbnNmb3JtLmhlaWdodC1vP1tcImJvdHRvbVwiXTpbXSxlLng8YS8yP2kucHVzaChcImxlZnRcIik6ZS54PnRoaXMuX21hcC50cmFuc2Zvcm0ud2lkdGgtYS8yJiZpLnB1c2goXCJyaWdodFwiKSxyPTA9PT1pLmxlbmd0aD9cImJvdHRvbVwiOmkuam9pbihcIi1cIil9dmFyIGw9ZS5hZGQobltyXSkucm91bmQoKTtzLnNldFRyYW5zZm9ybSh0aGlzLl9jb250YWluZXIsZ25bcl0rXCIgdHJhbnNsYXRlKFwiK2wueCtcInB4LFwiK2wueStcInB4KVwiKSx2bih0aGlzLl9jb250YWluZXIscixcInBvcHVwXCIpfX0sci5wcm90b3R5cGUuX29uQ2xpY2tDbG9zZT1mdW5jdGlvbigpe3RoaXMucmVtb3ZlKCl9LHJ9KHQuRXZlbnRlZCksRW49e3ZlcnNpb246XCIwLjQ1LjBcIixzdXBwb3J0ZWQ6ZSx3b3JrZXJDb3VudDpNYXRoLm1heChNYXRoLmZsb29yKGEuaGFyZHdhcmVDb25jdXJyZW5jeS8yKSwxKSxzZXRSVExUZXh0UGx1Z2luOnQuc2V0UlRMVGV4dFBsdWdpbixNYXA6dW4sTmF2aWdhdGlvbkNvbnRyb2w6cG4sR2VvbG9jYXRlQ29udHJvbDpibixBdHRyaWJ1dGlvbkNvbnRyb2w6bm4sU2NhbGVDb250cm9sOnduLEZ1bGxzY3JlZW5Db250cm9sOlRuLFBvcHVwOlNuLE1hcmtlcjptbixTdHlsZTpKZSxMbmdMYXQ6RyxMbmdMYXRCb3VuZHM6WSxQb2ludDp0LmRlZmF1bHQkMSxFdmVudGVkOnQuRXZlbnRlZCxjb25maWc6dixnZXQgYWNjZXNzVG9rZW4oKXtyZXR1cm4gdi5BQ0NFU1NfVE9LRU59LHNldCBhY2Nlc3NUb2tlbih0KXt2LkFDQ0VTU19UT0tFTj10fSx3b3JrZXJVcmw6XCJcIn07cmV0dXJuIEVufSksbn0pfSkuY2FsbCh0aGlzLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7fV0sNDIwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xPDx0KzEscj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT1hKHQsbik7cmV0dXJuIHJ9O3ZhciBuPXQoXCJjb252ZXgtaHVsbFwiKTtmdW5jdGlvbiBpKHQsZSxyKXtmb3IodmFyIG49bmV3IEFycmF5KHQpLGk9MDtpPHQ7KytpKW5baV09MCxpPT09ZSYmKG5baV0rPS41KSxpPT09ciYmKG5baV0rPS41KTtyZXR1cm4gbn1mdW5jdGlvbiBhKHQsZSl7aWYoMD09PWV8fGU9PT0oMTw8dCsxKS0xKXJldHVybltdO2Zvcih2YXIgcj1bXSxhPVtdLG89MDtvPD10OysrbylpZihlJjE8PG8pe3IucHVzaChpKHQsby0xLG8tMSkpLGEucHVzaChudWxsKTtmb3IodmFyIHM9MDtzPD10Oysrcyl+ZSYxPDxzJiYoci5wdXNoKGkodCxvLTEscy0xKSksYS5wdXNoKFtvLHNdKSl9dmFyIGw9bihyKSxjPVtdO3Q6Zm9yKG89MDtvPGwubGVuZ3RoOysrbyl7dmFyIHU9bFtvXSxoPVtdO2ZvcihzPTA7czx1Lmxlbmd0aDsrK3Mpe2lmKCFhW3Vbc11dKWNvbnRpbnVlIHQ7aC5wdXNoKGFbdVtzXV0uc2xpY2UoKSl9Yy5wdXNoKGgpfXJldHVybiBjfX0se1wiY29udmV4LWh1bGxcIjoxMjF9XSw0MjE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi9ub3JtYWxpemVcIiksaT10KFwiZ2wtbWF0NC9jcmVhdGVcIiksYT10KFwiZ2wtbWF0NC9jbG9uZVwiKSxvPXQoXCJnbC1tYXQ0L2RldGVybWluYW50XCIpLHM9dChcImdsLW1hdDQvaW52ZXJ0XCIpLGw9dChcImdsLW1hdDQvdHJhbnNwb3NlXCIpLGM9e2xlbmd0aDp0KFwiZ2wtdmVjMy9sZW5ndGhcIiksbm9ybWFsaXplOnQoXCJnbC12ZWMzL25vcm1hbGl6ZVwiKSxkb3Q6dChcImdsLXZlYzMvZG90XCIpLGNyb3NzOnQoXCJnbC12ZWMzL2Nyb3NzXCIpfSx1PWkoKSxoPWkoKSxmPVswLDAsMCwwXSxwPVtbMCwwLDBdLFswLDAsMF0sWzAsMCwwXV0sZD1bMCwwLDBdO2Z1bmN0aW9uIGcodCxlLHIsbixpKXt0WzBdPWVbMF0qbityWzBdKmksdFsxXT1lWzFdKm4rclsxXSppLHRbMl09ZVsyXSpuK3JbMl0qaX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSx2LG0pe2lmKGV8fChlPVswLDAsMF0pLHJ8fChyPVswLDAsMF0pLGl8fChpPVswLDAsMF0pLHZ8fCh2PVswLDAsMCwxXSksbXx8KG09WzAsMCwwLDFdKSwhbih1LHQpKXJldHVybiExO2lmKGEoaCx1KSxoWzNdPTAsaFs3XT0wLGhbMTFdPTAsaFsxNV09MSxNYXRoLmFicyhvKGgpPDFlLTgpKXJldHVybiExO3ZhciB5LHgsYixfLHcsayxBLFQ9dVszXSxNPXVbN10sUz11WzExXSxFPXVbMTJdLEM9dVsxM10sTD11WzE0XSx6PXVbMTVdO2lmKDAhPT1UfHwwIT09TXx8MCE9PVMpe2lmKGZbMF09VCxmWzFdPU0sZlsyXT1TLGZbM109eiwhcyhoLGgpKXJldHVybiExO2woaCxoKSx5PXYsYj1oLF89KHg9ZilbMF0sdz14WzFdLGs9eFsyXSxBPXhbM10seVswXT1iWzBdKl8rYls0XSp3K2JbOF0qaytiWzEyXSpBLHlbMV09YlsxXSpfK2JbNV0qdytiWzldKmsrYlsxM10qQSx5WzJdPWJbMl0qXytiWzZdKncrYlsxMF0qaytiWzE0XSpBLHlbM109YlszXSpfK2JbN10qdytiWzExXSprK2JbMTVdKkF9ZWxzZSB2WzBdPXZbMV09dlsyXT0wLHZbM109MTtpZihlWzBdPUUsZVsxXT1DLGVbMl09TCxmdW5jdGlvbih0LGUpe3RbMF1bMF09ZVswXSx0WzBdWzFdPWVbMV0sdFswXVsyXT1lWzJdLHRbMV1bMF09ZVs0XSx0WzFdWzFdPWVbNV0sdFsxXVsyXT1lWzZdLHRbMl1bMF09ZVs4XSx0WzJdWzFdPWVbOV0sdFsyXVsyXT1lWzEwXX0ocCx1KSxyWzBdPWMubGVuZ3RoKHBbMF0pLGMubm9ybWFsaXplKHBbMF0scFswXSksaVswXT1jLmRvdChwWzBdLHBbMV0pLGcocFsxXSxwWzFdLHBbMF0sMSwtaVswXSksclsxXT1jLmxlbmd0aChwWzFdKSxjLm5vcm1hbGl6ZShwWzFdLHBbMV0pLGlbMF0vPXJbMV0saVsxXT1jLmRvdChwWzBdLHBbMl0pLGcocFsyXSxwWzJdLHBbMF0sMSwtaVsxXSksaVsyXT1jLmRvdChwWzFdLHBbMl0pLGcocFsyXSxwWzJdLHBbMV0sMSwtaVsyXSksclsyXT1jLmxlbmd0aChwWzJdKSxjLm5vcm1hbGl6ZShwWzJdLHBbMl0pLGlbMV0vPXJbMl0saVsyXS89clsyXSxjLmNyb3NzKGQscFsxXSxwWzJdKSxjLmRvdChwWzBdLGQpPDApZm9yKHZhciBPPTA7TzwzO08rKylyW09dKj0tMSxwW09dWzBdKj0tMSxwW09dWzFdKj0tMSxwW09dWzJdKj0tMTtyZXR1cm4gbVswXT0uNSpNYXRoLnNxcnQoTWF0aC5tYXgoMStwWzBdWzBdLXBbMV1bMV0tcFsyXVsyXSwwKSksbVsxXT0uNSpNYXRoLnNxcnQoTWF0aC5tYXgoMS1wWzBdWzBdK3BbMV1bMV0tcFsyXVsyXSwwKSksbVsyXT0uNSpNYXRoLnNxcnQoTWF0aC5tYXgoMS1wWzBdWzBdLXBbMV1bMV0rcFsyXVsyXSwwKSksbVszXT0uNSpNYXRoLnNxcnQoTWF0aC5tYXgoMStwWzBdWzBdK3BbMV1bMV0rcFsyXVsyXSwwKSkscFsyXVsxXT5wWzFdWzJdJiYobVswXT0tbVswXSkscFswXVsyXT5wWzJdWzBdJiYobVsxXT0tbVsxXSkscFsxXVswXT5wWzBdWzFdJiYobVsyXT0tbVsyXSksITB9fSx7XCIuL25vcm1hbGl6ZVwiOjQyMixcImdsLW1hdDQvY2xvbmVcIjoyNTYsXCJnbC1tYXQ0L2NyZWF0ZVwiOjI1NyxcImdsLW1hdDQvZGV0ZXJtaW5hbnRcIjoyNTgsXCJnbC1tYXQ0L2ludmVydFwiOjI2MixcImdsLW1hdDQvdHJhbnNwb3NlXCI6MjczLFwiZ2wtdmVjMy9jcm9zc1wiOjMyNyxcImdsLXZlYzMvZG90XCI6MzMyLFwiZ2wtdmVjMy9sZW5ndGhcIjozNDIsXCJnbC12ZWMzL25vcm1hbGl6ZVwiOjM0OX1dLDQyMjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMTVdO2lmKDA9PT1yKXJldHVybiExO2Zvcih2YXIgbj0xL3IsaT0wO2k8MTY7aSsrKXRbaV09ZVtpXSpuO3JldHVybiEwfX0se31dLDQyMzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCJnbC12ZWMzL2xlcnBcIiksaT10KFwibWF0NC1yZWNvbXBvc2VcIiksYT10KFwibWF0NC1kZWNvbXBvc2VcIiksbz10KFwiZ2wtbWF0NC9kZXRlcm1pbmFudFwiKSxzPXQoXCJxdWF0LXNsZXJwXCIpLGw9aCgpLGM9aCgpLHU9aCgpO2Z1bmN0aW9uIGgoKXtyZXR1cm57dHJhbnNsYXRlOmYoKSxzY2FsZTpmKDEpLHNrZXc6ZigpLHBlcnNwZWN0aXZlOlswLDAsMCwxXSxxdWF0ZXJuaW9uOlswLDAsMCwxXX19ZnVuY3Rpb24gZih0KXtyZXR1cm5bdHx8MCx0fHwwLHR8fDBdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXtpZigwPT09byhlKXx8MD09PW8ocikpcmV0dXJuITE7dmFyIGY9YShlLGwudHJhbnNsYXRlLGwuc2NhbGUsbC5za2V3LGwucGVyc3BlY3RpdmUsbC5xdWF0ZXJuaW9uKSxwPWEocixjLnRyYW5zbGF0ZSxjLnNjYWxlLGMuc2tldyxjLnBlcnNwZWN0aXZlLGMucXVhdGVybmlvbik7cmV0dXJuISghZnx8IXB8fChuKHUudHJhbnNsYXRlLGwudHJhbnNsYXRlLGMudHJhbnNsYXRlLGgpLG4odS5za2V3LGwuc2tldyxjLnNrZXcsaCksbih1LnNjYWxlLGwuc2NhbGUsYy5zY2FsZSxoKSxuKHUucGVyc3BlY3RpdmUsbC5wZXJzcGVjdGl2ZSxjLnBlcnNwZWN0aXZlLGgpLHModS5xdWF0ZXJuaW9uLGwucXVhdGVybmlvbixjLnF1YXRlcm5pb24saCksaSh0LHUudHJhbnNsYXRlLHUuc2NhbGUsdS5za2V3LHUucGVyc3BlY3RpdmUsdS5xdWF0ZXJuaW9uKSwwKSl9fSx7XCJnbC1tYXQ0L2RldGVybWluYW50XCI6MjU4LFwiZ2wtdmVjMy9sZXJwXCI6MzQzLFwibWF0NC1kZWNvbXBvc2VcIjo0MjEsXCJtYXQ0LXJlY29tcG9zZVwiOjQyNCxcInF1YXQtc2xlcnBcIjo0NzZ9XSw0MjQ6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj17aWRlbnRpdHk6dChcImdsLW1hdDQvaWRlbnRpdHlcIiksdHJhbnNsYXRlOnQoXCJnbC1tYXQ0L3RyYW5zbGF0ZVwiKSxtdWx0aXBseTp0KFwiZ2wtbWF0NC9tdWx0aXBseVwiKSxjcmVhdGU6dChcImdsLW1hdDQvY3JlYXRlXCIpLHNjYWxlOnQoXCJnbC1tYXQ0L3NjYWxlXCIpLGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uOnQoXCJnbC1tYXQ0L2Zyb21Sb3RhdGlvblRyYW5zbGF0aW9uXCIpfSxpPShuLmNyZWF0ZSgpLG4uY3JlYXRlKCkpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8scyl7cmV0dXJuIG4uaWRlbnRpdHkodCksbi5mcm9tUm90YXRpb25UcmFuc2xhdGlvbih0LHMsZSksdFszXT1vWzBdLHRbN109b1sxXSx0WzExXT1vWzJdLHRbMTVdPW9bM10sbi5pZGVudGl0eShpKSwwIT09YVsyXSYmKGlbOV09YVsyXSxuLm11bHRpcGx5KHQsdCxpKSksMCE9PWFbMV0mJihpWzldPTAsaVs4XT1hWzFdLG4ubXVsdGlwbHkodCx0LGkpKSwwIT09YVswXSYmKGlbOF09MCxpWzRdPWFbMF0sbi5tdWx0aXBseSh0LHQsaSkpLG4uc2NhbGUodCx0LHIpLHR9fSx7XCJnbC1tYXQ0L2NyZWF0ZVwiOjI1NyxcImdsLW1hdDQvZnJvbVJvdGF0aW9uVHJhbnNsYXRpb25cIjoyNjAsXCJnbC1tYXQ0L2lkZW50aXR5XCI6MjYxLFwiZ2wtbWF0NC9tdWx0aXBseVwiOjI2NCxcImdsLW1hdDQvc2NhbGVcIjoyNzEsXCJnbC1tYXQ0L3RyYW5zbGF0ZVwiOjI3Mn1dLDQyNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1NYXRoLmxvZzJ8fGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KSpNYXRoLkxPRzJFfX0se31dLDQyNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJiaW5hcnktc2VhcmNoLWJvdW5kc1wiKSxpPXQoXCJtYXQ0LWludGVycG9sYXRlXCIpLGE9dChcImdsLW1hdDQvaW52ZXJ0XCIpLG89dChcImdsLW1hdDQvcm90YXRlWFwiKSxzPXQoXCJnbC1tYXQ0L3JvdGF0ZVlcIiksbD10KFwiZ2wtbWF0NC9yb3RhdGVaXCIpLGM9dChcImdsLW1hdDQvbG9va0F0XCIpLHU9dChcImdsLW1hdDQvdHJhbnNsYXRlXCIpLGg9KHQoXCJnbC1tYXQ0L3NjYWxlXCIpLHQoXCJnbC12ZWMzL25vcm1hbGl6ZVwiKSksZj1bMCwwLDBdO2Z1bmN0aW9uIHAodCl7dGhpcy5fY29tcG9uZW50cz10LnNsaWNlKCksdGhpcy5fdGltZT1bMF0sdGhpcy5wcmV2TWF0cml4PXQuc2xpY2UoKSx0aGlzLm5leHRNYXRyaXg9dC5zbGljZSgpLHRoaXMuY29tcHV0ZWRNYXRyaXg9dC5zbGljZSgpLHRoaXMuY29tcHV0ZWRJbnZlcnNlPXQuc2xpY2UoKSx0aGlzLmNvbXB1dGVkRXllPVswLDAsMF0sdGhpcy5jb21wdXRlZFVwPVswLDAsMF0sdGhpcy5jb21wdXRlZENlbnRlcj1bMCwwLDBdLHRoaXMuY29tcHV0ZWRSYWRpdXM9WzBdLHRoaXMuX2xpbWl0cz1bLTEvMCwxLzBdfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHAoKHQ9dHx8e30pLm1hdHJpeHx8WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdKX07dmFyIGQ9cC5wcm90b3R5cGU7ZC5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGltZSxyPW4ubGUoZSx0KSxvPXRoaXMuY29tcHV0ZWRNYXRyaXg7aWYoIShyPDApKXt2YXIgcz10aGlzLl9jb21wb25lbnRzO2lmKHI9PT1lLmxlbmd0aC0xKWZvcih2YXIgbD0xNipyLGM9MDtjPDE2OysrYylvW2NdPXNbbCsrXTtlbHNle3ZhciB1PWVbcisxXS1lW3JdLGY9KGw9MTYqcix0aGlzLnByZXZNYXRyaXgpLHA9ITA7Zm9yKGM9MDtjPDE2OysrYylmW2NdPXNbbCsrXTt2YXIgZD10aGlzLm5leHRNYXRyaXg7Zm9yKGM9MDtjPDE2OysrYylkW2NdPXNbbCsrXSxwPXAmJmZbY109PT1kW2NdO2lmKHU8MWUtNnx8cClmb3IoYz0wO2M8MTY7KytjKW9bY109ZltjXTtlbHNlIGkobyxmLGQsKHQtZVtyXSkvdSl9dmFyIGc9dGhpcy5jb21wdXRlZFVwO2dbMF09b1sxXSxnWzFdPW9bNV0sZ1syXT1vWzldLGgoZyxnKTt2YXIgdj10aGlzLmNvbXB1dGVkSW52ZXJzZTthKHYsbyk7dmFyIG09dGhpcy5jb21wdXRlZEV5ZSx5PXZbMTVdO21bMF09dlsxMl0veSxtWzFdPXZbMTNdL3ksbVsyXT12WzE0XS95O3ZhciB4PXRoaXMuY29tcHV0ZWRDZW50ZXIsYj1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKTtmb3IoYz0wO2M8MzsrK2MpeFtjXT1tW2NdLW9bMis0KmNdKmJ9fSxkLmlkbGU9ZnVuY3Rpb24odCl7aWYoISh0PHRoaXMubGFzdFQoKSkpe2Zvcih2YXIgZT10aGlzLl9jb21wb25lbnRzLHI9ZS5sZW5ndGgtMTYsbj0wO248MTY7KytuKWUucHVzaChlW3IrK10pO3RoaXMuX3RpbWUucHVzaCh0KX19LGQuZmx1c2g9ZnVuY3Rpb24odCl7dmFyIGU9bi5ndCh0aGlzLl90aW1lLHQpLTI7ZTwwfHwodGhpcy5fdGltZS5zcGxpY2UoMCxlKSx0aGlzLl9jb21wb25lbnRzLnNwbGljZSgwLDE2KmUpKX0sZC5sYXN0VD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90aW1lW3RoaXMuX3RpbWUubGVuZ3RoLTFdfSxkLmxvb2tBdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxlPWV8fHRoaXMuY29tcHV0ZWRFeWUscj1yfHxmLG49bnx8dGhpcy5jb21wdXRlZFVwLHRoaXMuc2V0TWF0cml4KHQsYyh0aGlzLmNvbXB1dGVkTWF0cml4LGUscixuKSk7Zm9yKHZhciBpPTAsYT0wO2E8MzsrK2EpaSs9TWF0aC5wb3coclthXS1lW2FdLDIpO2k9TWF0aC5sb2coTWF0aC5zcXJ0KGkpKSx0aGlzLmNvbXB1dGVkUmFkaXVzWzBdPWl9LGQucm90YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRJbnZlcnNlO2UmJnMoaSxpLGUpLHImJm8oaSxpLHIpLG4mJmwoaSxpLG4pLHRoaXMuc2V0TWF0cml4KHQsYSh0aGlzLmNvbXB1dGVkTWF0cml4LGkpKX07dmFyIGc9WzAsMCwwXTtkLnBhbj1mdW5jdGlvbih0LGUscixuKXtnWzBdPS0oZXx8MCksZ1sxXT0tKHJ8fDApLGdbMl09LShufHwwKSx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgaT10aGlzLmNvbXB1dGVkSW52ZXJzZTt1KGksaSxnKSx0aGlzLnNldE1hdHJpeCh0LGEoaSxpKSl9LGQudHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2dbMF09ZXx8MCxnWzFdPXJ8fDAsZ1syXT1ufHwwLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXg7dShpLGksZyksdGhpcy5zZXRNYXRyaXgodCxpKX0sZC5zZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXtpZighKHQ8dGhpcy5sYXN0VCgpKSl7dGhpcy5fdGltZS5wdXNoKHQpO2Zvcih2YXIgcj0wO3I8MTY7KytyKXRoaXMuX2NvbXBvbmVudHMucHVzaChlW3JdKX19LGQuc2V0RGlzdGFuY2U9ZnVuY3Rpb24odCxlKXt0aGlzLmNvbXB1dGVkUmFkaXVzWzBdPWV9LGQuc2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9saW1pdHM7clswXT10LHJbMV09ZX0sZC5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9saW1pdHM7cmV0dXJuIHQ/KHRbMF09ZVswXSx0WzFdPWVbMV0sdCk6ZX19LHtcImJpbmFyeS1zZWFyY2gtYm91bmRzXCI6ODIsXCJnbC1tYXQ0L2ludmVydFwiOjI2MixcImdsLW1hdDQvbG9va0F0XCI6MjYzLFwiZ2wtbWF0NC9yb3RhdGVYXCI6MjY4LFwiZ2wtbWF0NC9yb3RhdGVZXCI6MjY5LFwiZ2wtbWF0NC9yb3RhdGVaXCI6MjcwLFwiZ2wtbWF0NC9zY2FsZVwiOjI3MSxcImdsLW1hdDQvdHJhbnNsYXRlXCI6MjcyLFwiZ2wtdmVjMy9ub3JtYWxpemVcIjozNDksXCJtYXQ0LWludGVycG9sYXRlXCI6NDIzfV0sNDI3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGU8Myl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSlyW2ldPWk7cmV0dXJuIDI9PT1lJiZ0WzBdWzBdPT09dFsxXVswXSYmdFswXVsxXT09PXRbMV1bMV0/WzBdOnJ9Zm9yKHZhciBhPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSlhW2ldPWk7YS5zb3J0KGZ1bmN0aW9uKGUscil7dmFyIG49dFtlXVswXS10W3JdWzBdO3JldHVybiBufHx0W2VdWzFdLXRbcl1bMV19KTtmb3IodmFyIG89W2FbMF0sYVsxXV0scz1bYVswXSxhWzFdXSxpPTI7aTxlOysraSl7Zm9yKHZhciBsPWFbaV0sYz10W2xdLHU9by5sZW5ndGg7dT4xJiZuKHRbb1t1LTJdXSx0W29bdS0xXV0sYyk8PTA7KXUtPTEsby5wb3AoKTtmb3Ioby5wdXNoKGwpLHU9cy5sZW5ndGg7dT4xJiZuKHRbc1t1LTJdXSx0W3NbdS0xXV0sYyk+PTA7KXUtPTEscy5wb3AoKTtzLnB1c2gobCl9Zm9yKHZhciByPW5ldyBBcnJheShzLmxlbmd0aCtvLmxlbmd0aC0yKSxoPTAsaT0wLGY9by5sZW5ndGg7aTxmOysraSlyW2grK109b1tpXTtmb3IodmFyIHA9cy5sZW5ndGgtMjtwPjA7LS1wKXJbaCsrXT1zW3BdO3JldHVybiByfTt2YXIgbj10KFwicm9idXN0LW9yaWVudGF0aW9uXCIpWzNdfSx7XCJyb2J1c3Qtb3JpZW50YXRpb25cIjo0OTV9XSw0Mjg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlfHwoZT10LHQ9d2luZG93KTt2YXIgcj0wLGk9MCxhPTAsbz17c2hpZnQ6ITEsYWx0OiExLGNvbnRyb2w6ITEsbWV0YTohMX0scz0hMTtmdW5jdGlvbiBsKHQpe3ZhciBlPSExO3JldHVyblwiYWx0S2V5XCJpbiB0JiYoZT1lfHx0LmFsdEtleSE9PW8uYWx0LG8uYWx0PSEhdC5hbHRLZXkpLFwic2hpZnRLZXlcImluIHQmJihlPWV8fHQuc2hpZnRLZXkhPT1vLnNoaWZ0LG8uc2hpZnQ9ISF0LnNoaWZ0S2V5KSxcImN0cmxLZXlcImluIHQmJihlPWV8fHQuY3RybEtleSE9PW8uY29udHJvbCxvLmNvbnRyb2w9ISF0LmN0cmxLZXkpLFwibWV0YUtleVwiaW4gdCYmKGU9ZXx8dC5tZXRhS2V5IT09by5tZXRhLG8ubWV0YT0hIXQubWV0YUtleSksZX1mdW5jdGlvbiBjKHQscyl7dmFyIGM9bi54KHMpLHU9bi55KHMpO1wiYnV0dG9uc1wiaW4gcyYmKHQ9MHxzLmJ1dHRvbnMpLCh0IT09cnx8YyE9PWl8fHUhPT1hfHxsKHMpKSYmKHI9MHx0LGk9Y3x8MCxhPXV8fDAsZSYmZShyLGksYSxvKSl9ZnVuY3Rpb24gdSh0KXtjKDAsdCl9ZnVuY3Rpb24gaCgpeyhyfHxpfHxhfHxvLnNoaWZ0fHxvLmFsdHx8by5tZXRhfHxvLmNvbnRyb2wpJiYoaT1hPTAscj0wLG8uc2hpZnQ9by5hbHQ9by5jb250cm9sPW8ubWV0YT0hMSxlJiZlKDAsMCwwLG8pKX1mdW5jdGlvbiBmKHQpe2wodCkmJmUmJmUocixpLGEsbyl9ZnVuY3Rpb24gcCh0KXswPT09bi5idXR0b25zKHQpP2MoMCx0KTpjKHIsdCl9ZnVuY3Rpb24gZCh0KXtjKHJ8bi5idXR0b25zKHQpLHQpfWZ1bmN0aW9uIGcodCl7YyhyJn5uLmJ1dHRvbnModCksdCl9ZnVuY3Rpb24gdigpe3N8fChzPSEwLHQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHApLHQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLGQpLHQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixnKSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsdSksdC5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLHUpLHQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3V0XCIsdSksdC5hZGRFdmVudExpc3RlbmVyKFwibW91c2VvdmVyXCIsdSksdC5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLGgpLHQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsZiksdC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGYpLHQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXByZXNzXCIsZiksdCE9PXdpbmRvdyYmKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLGgpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIixmKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixmKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleXByZXNzXCIsZikpKX12KCk7dmFyIG09e2VsZW1lbnQ6dH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG0se2VuYWJsZWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBzfSxzZXQ6ZnVuY3Rpb24oZSl7ZT92KCk6cyYmKHM9ITEsdC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIscCksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsZCksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLGcpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIix1KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsdSksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2VvdXRcIix1KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIix1KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJibHVyXCIsaCksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIixmKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsZiksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5cHJlc3NcIixmKSx0IT09d2luZG93JiYod2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJibHVyXCIsaCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLGYpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGYpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5cHJlc3NcIixmKSkpfSxlbnVtZXJhYmxlOiEwfSxidXR0b25zOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcn0sZW51bWVyYWJsZTohMH0seDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGl9LGVudW1lcmFibGU6ITB9LHk6e2dldDpmdW5jdGlvbigpe3JldHVybiBhfSxlbnVtZXJhYmxlOiEwfSxtb2RzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gb30sZW51bWVyYWJsZTohMH19KSxtfTt2YXIgbj10KFwibW91c2UtZXZlbnRcIil9LHtcIm1vdXNlLWV2ZW50XCI6NDMwfV0sNDI5OltmdW5jdGlvbih0LGUscil7dmFyIG49e2xlZnQ6MCx0b3A6MH07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtlPWV8fHQuY3VycmVudFRhcmdldHx8dC5zcmNFbGVtZW50LEFycmF5LmlzQXJyYXkocil8fChyPVswLDBdKTt2YXIgaT10LmNsaWVudFh8fDAsYT10LmNsaWVudFl8fDAsbz0ocz1lLHM9PT13aW5kb3d8fHM9PT1kb2N1bWVudHx8cz09PWRvY3VtZW50LmJvZHk/bjpzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTt2YXIgcztyZXR1cm4gclswXT1pLW8ubGVmdCxyWzFdPWEtby50b3Ascn19LHt9XSw0MzA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe3JldHVybiB0LnRhcmdldHx8dC5zcmNFbGVtZW50fHx3aW5kb3d9ci5idXR0b25zPWZ1bmN0aW9uKHQpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KXtpZihcImJ1dHRvbnNcImluIHQpcmV0dXJuIHQuYnV0dG9ucztpZihcIndoaWNoXCJpbiB0KXtpZigyPT09KGU9dC53aGljaCkpcmV0dXJuIDQ7aWYoMz09PWUpcmV0dXJuIDI7aWYoZT4wKXJldHVybiAxPDxlLTF9ZWxzZSBpZihcImJ1dHRvblwiaW4gdCl7dmFyIGU7aWYoMT09PShlPXQuYnV0dG9uKSlyZXR1cm4gNDtpZigyPT09ZSlyZXR1cm4gMjtpZihlPj0wKXJldHVybiAxPDxlfX1yZXR1cm4gMH0sci5lbGVtZW50PW4sci54PWZ1bmN0aW9uKHQpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KXtpZihcIm9mZnNldFhcImluIHQpcmV0dXJuIHQub2Zmc2V0WDt2YXIgZT1uKHQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiB0LmNsaWVudFgtZS5sZWZ0fXJldHVybiAwfSxyLnk9ZnVuY3Rpb24odCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHQpe2lmKFwib2Zmc2V0WVwiaW4gdClyZXR1cm4gdC5vZmZzZXRZO3ZhciBlPW4odCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIHQuY2xpZW50WS1lLnRvcH1yZXR1cm4gMH19LHt9XSw0MzE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwidG8tcHhcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiYocj0hIWUsZT10LHQ9d2luZG93KTt2YXIgaT1uKFwiZXhcIix0KSxhPWZ1bmN0aW9uKHQpe3ImJnQucHJldmVudERlZmF1bHQoKTt2YXIgbj10LmRlbHRhWHx8MCxhPXQuZGVsdGFZfHwwLG89dC5kZWx0YVp8fDAscz10LmRlbHRhTW9kZSxsPTE7c3dpdGNoKHMpe2Nhc2UgMTpsPWk7YnJlYWs7Y2FzZSAyOmw9d2luZG93LmlubmVySGVpZ2h0fWlmKGEqPWwsbyo9bCwobio9bCl8fGF8fG8pcmV0dXJuIGUobixhLG8sdCl9O3JldHVybiB0LmFkZEV2ZW50TGlzdGVuZXIoXCJ3aGVlbFwiLGEpLGF9fSx7XCJ0by1weFwiOjUyNH1dLDQzMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJ0eXBlZGFycmF5LXBvb2xcIik7ZnVuY3Rpb24gaSh0KXtyZXR1cm5cImFcIit0fWZ1bmN0aW9uIGEodCl7cmV0dXJuXCJkXCIrdH1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuXCJjXCIrdCtcIl9cIitlfWZ1bmN0aW9uIHModCl7cmV0dXJuXCJzXCIrdH1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuXCJ0XCIrdCtcIl9cIitlfWZ1bmN0aW9uIGModCl7cmV0dXJuXCJvXCIrdH1mdW5jdGlvbiB1KHQpe3JldHVyblwieFwiK3R9ZnVuY3Rpb24gaCh0KXtyZXR1cm5cInBcIit0fWZ1bmN0aW9uIGYodCxlKXtyZXR1cm5cImRcIit0K1wiX1wiK2V9ZnVuY3Rpb24gcCh0KXtyZXR1cm5cImlcIit0fWZ1bmN0aW9uIGQodCxlKXtyZXR1cm5cInVcIit0K1wiX1wiK2V9ZnVuY3Rpb24gZyh0KXtyZXR1cm5cImJcIit0fWZ1bmN0aW9uIHYodCl7cmV0dXJuXCJ5XCIrdH1mdW5jdGlvbiBtKHQpe3JldHVyblwiZVwiK3R9ZnVuY3Rpb24geSh0KXtyZXR1cm5cInZcIit0fWUuZXhwb3J0cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3Rocm93IG5ldyBFcnJvcihcIm5kYXJyYXktZXh0cmFjdC1jb250b3VyOiBcIit0KX1cIm9iamVjdFwiIT10eXBlb2YgdCYmZShcIk11c3Qgc3BlY2lmeSBhcmd1bWVudHNcIik7dmFyIHI9dC5vcmRlcjtBcnJheS5pc0FycmF5KHIpfHxlKFwiTXVzdCBzcGVjaWZ5IG9yZGVyXCIpO3ZhciBNPXQuYXJyYXlBcmd1bWVudHN8fDE7TTwxJiZlKFwiTXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBhcnJheSBhcmd1bWVudFwiKTt2YXIgUz10LnNjYWxhckFyZ3VtZW50c3x8MDtTPDAmJmUoXCJTY2FsYXIgYXJnIGNvdW50IG11c3QgYmUgPiAwXCIpO1wiZnVuY3Rpb25cIiE9dHlwZW9mIHQudmVydGV4JiZlKFwiTXVzdCBzcGVjaWZ5IHZlcnRleCBjcmVhdGlvbiBmdW5jdGlvblwiKTtcImZ1bmN0aW9uXCIhPXR5cGVvZiB0LmNlbGwmJmUoXCJNdXN0IHNwZWNpZnkgY2VsbCBjcmVhdGlvbiBmdW5jdGlvblwiKTtcImZ1bmN0aW9uXCIhPXR5cGVvZiB0LnBoYXNlJiZlKFwiTXVzdCBzcGVjaWZ5IHBoYXNlIGZ1bmN0aW9uXCIpO2Zvcih2YXIgRT10LmdldHRlcnN8fFtdLEM9bmV3IEFycmF5KE0pLEw9MDtMPE07KytMKUUuaW5kZXhPZihMKT49MD9DW0xdPSEwOkNbTF09ITE7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLE0sUyxFKXt2YXIgQz1FLmxlbmd0aCxMPVMubGVuZ3RoO2lmKEw8Mil0aHJvdyBuZXcgRXJyb3IoXCJuZGFycmF5LWV4dHJhY3QtY29udG91cjogRGltZW5zaW9uIG11c3QgYmUgYXQgbGVhc3QgMlwiKTtmb3IodmFyIHo9XCJleHRyYWN0Q29udG91clwiK1Muam9pbihcIl9cIiksTz1bXSxJPVtdLEQ9W10sUD0wO1A8QzsrK1ApRC5wdXNoKGkoUCkpO2Zvcih2YXIgUD0wO1A8TTsrK1ApRC5wdXNoKHUoUCkpO2Zvcih2YXIgUD0wO1A8TDsrK1ApSS5wdXNoKHMoUCkrXCI9XCIraSgwKStcIi5zaGFwZVtcIitQK1wiXXwwXCIpO2Zvcih2YXIgUD0wO1A8QzsrK1Ape0kucHVzaChhKFApK1wiPVwiK2koUCkrXCIuZGF0YVwiLGMoUCkrXCI9XCIraShQKStcIi5vZmZzZXR8MFwiKTtmb3IodmFyIFI9MDtSPEw7KytSKUkucHVzaChsKFAsUikrXCI9XCIraShQKStcIi5zdHJpZGVbXCIrUitcIl18MFwiKX1mb3IodmFyIFA9MDtQPEM7KytQKXtJLnB1c2goaChQKStcIj1cIitjKFApKSxJLnB1c2gobyhQLDApKTtmb3IodmFyIFI9MTtSPDE8PEw7KytSKXtmb3IodmFyIEY9W10sQj0wO0I8TDsrK0IpUiYxPDxCJiZGLnB1c2goXCItXCIrbChQLEIpKTtJLnB1c2goZihQLFIpK1wiPShcIitGLmpvaW4oXCJcIikrXCIpfDBcIiksSS5wdXNoKG8oUCxSKStcIj0wXCIpfX1mb3IodmFyIFA9MDtQPEM7KytQKWZvcih2YXIgUj0wO1I8TDsrK1Ipe3ZhciBOPVtsKFAsU1tSXSldO1I+MCYmTi5wdXNoKGwoUCxTW1ItMV0pK1wiKlwiK3MoU1tSLTFdKSksSS5wdXNoKGQoUCxTW1JdKStcIj0oXCIrTi5qb2luKFwiLVwiKStcIil8MFwiKX1mb3IodmFyIFA9MDtQPEw7KytQKUkucHVzaChwKFApK1wiPTBcIik7SS5wdXNoKF8rXCI9MFwiKTtmb3IodmFyIGo9W1wiMlwiXSxQPUwtMjtQPj0wOy0tUClqLnB1c2gocyhTW1BdKSk7SS5wdXNoKHcrXCI9KFwiK2ouam9pbihcIipcIikrXCIpfDBcIixiK1wiPW1hbGxvY1VpbnQzMihcIit3K1wiKVwiLHgrXCI9bWFsbG9jVWludDMyKFwiK3crXCIpXCIsaytcIj0wXCIpLEkucHVzaChnKDApK1wiPTBcIik7Zm9yKHZhciBSPTE7UjwxPDxMOysrUil7Zm9yKHZhciBWPVtdLFU9W10sQj0wO0I8TDsrK0IpUiYxPDxCJiYoMD09PVUubGVuZ3RoP1YucHVzaChcIjFcIik6Vi51bnNoaWZ0KFUuam9pbihcIipcIikpKSxVLnB1c2gocyhTW0JdKSk7dmFyIHE9XCJcIjtWWzBdLmluZGV4T2YocyhTW0wtMl0pKTwwJiYocT1cIi1cIik7dmFyIEg9VChMLFIsUyk7SS5wdXNoKG0oSCkrXCI9KC1cIitWLmpvaW4oXCItXCIpK1wiKXwwXCIsdihIKStcIj0oXCIrcStWLmpvaW4oXCItXCIpK1wiKXwwXCIsZyhIKStcIj0wXCIpfWZ1bmN0aW9uIEcodCxlKXtPLnB1c2goXCJmb3IoXCIscChTW3RdKSxcIj1cIixlLFwiO1wiLHAoU1t0XSksXCI8XCIscyhTW3RdKSxcIjtcIixcIisrXCIscChTW3RdKSxcIil7XCIpfWZ1bmN0aW9uIFkodCl7Zm9yKHZhciBlPTA7ZTxDOysrZSlPLnB1c2goaChlKSxcIis9XCIsZChlLFNbdF0pLFwiO1wiKTtPLnB1c2goXCJ9XCIpfWZ1bmN0aW9uIFcoKXtmb3IodmFyIHQ9MTt0PDE8PEw7Kyt0KU8ucHVzaChBLFwiPVwiLG0odCksXCI7XCIsbSh0KSxcIj1cIix2KHQpLFwiO1wiLHYodCksXCI9XCIsQSxcIjtcIil9SS5wdXNoKHkoMCkrXCI9MFwiLEErXCI9MFwiKSxmdW5jdGlvbiB0KGUscil7aWYoZTwwKXJldHVybiB2b2lkIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8QzsrK2UpRVtlXT9PLnB1c2gobyhlLDApLFwiPVwiLGEoZSksXCIuZ2V0KFwiLGgoZSksXCIpO1wiKTpPLnB1c2gobyhlLDApLFwiPVwiLGEoZSksXCJbXCIsaChlKSxcIl07XCIpO2Zvcih2YXIgcj1bXSxlPTA7ZTxDOysrZSlyLnB1c2gobyhlLDApKTtmb3IodmFyIGU9MDtlPE07KytlKXIucHVzaCh1KGUpKTtPLnB1c2goZygwKSxcIj1cIixiLFwiW1wiLGssXCJdPXBoYXNlKFwiLHIuam9pbigpLFwiKTtcIik7Zm9yKHZhciBuPTE7bjwxPDxMOysrbilPLnB1c2goZyhuKSxcIj1cIixiLFwiW1wiLGssXCIrXCIsbShuKSxcIl07XCIpO2Zvcih2YXIgaT1bXSxuPTE7bjwxPDxMOysrbilpLnB1c2goXCIoXCIrZygwKStcIiE9PVwiK2cobikrXCIpXCIpO08ucHVzaChcImlmKFwiLGkuam9pbihcInx8XCIpLFwiKXtcIik7Zm9yKHZhciBzPVtdLGU9MDtlPEw7KytlKXMucHVzaChwKGUpKTtmb3IodmFyIGU9MDtlPEM7KytlKXtzLnB1c2gobyhlLDApKTtmb3IodmFyIG49MTtuPDE8PEw7KytuKUVbZV0/Ty5wdXNoKG8oZSxuKSxcIj1cIixhKGUpLFwiLmdldChcIixoKGUpLFwiK1wiLGYoZSxuKSxcIik7XCIpOk8ucHVzaChvKGUsbiksXCI9XCIsYShlKSxcIltcIixoKGUpLFwiK1wiLGYoZSxuKSxcIl07XCIpLHMucHVzaChvKGUsbikpfWZvcih2YXIgZT0wO2U8MTw8TDsrK2Upcy5wdXNoKGcoZSkpO2Zvcih2YXIgZT0wO2U8TTsrK2Upcy5wdXNoKHUoZSkpO08ucHVzaChcInZlcnRleChcIixzLmpvaW4oKSxcIik7XCIseSgwKSxcIj1cIix4LFwiW1wiLGssXCJdPVwiLF8sXCIrKztcIik7Zm9yKHZhciBsPSgxPDxMKS0xLGM9ZyhsKSxuPTA7bjxMOysrbilpZigwPT0odCZ+KDE8PG4pKSl7Zm9yKHZhciBkPWxeMTw8bix2PWcoZCksdz1bXSxBPWQ7QT4wO0E9QS0xJmQpdy5wdXNoKHgrXCJbXCIraytcIitcIittKEEpK1wiXVwiKTt3LnB1c2goeSgwKSk7Zm9yKHZhciBBPTA7QTxDOysrQSkxJm4/dy5wdXNoKG8oQSxsKSxvKEEsZCkpOncucHVzaChvKEEsZCksbyhBLGwpKTsxJm4/dy5wdXNoKGMsdik6dy5wdXNoKHYsYyk7Zm9yKHZhciBBPTA7QTxNOysrQSl3LnB1c2godShBKSk7Ty5wdXNoKFwiaWYoXCIsYyxcIiE9PVwiLHYsXCIpe1wiLFwiZmFjZShcIix3LmpvaW4oKSxcIil9XCIpfU8ucHVzaChcIn1cIixrLFwiKz0xO1wiKX0ocik7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LTE7ZT49MDstLWUpRyhlLDApO2Zvcih2YXIgcj1bXSxlPTA7ZTxDOysrZSlFW2VdP3IucHVzaChhKGUpK1wiLmdldChcIitoKGUpK1wiKVwiKTpyLnB1c2goYShlKStcIltcIitoKGUpK1wiXVwiKTtmb3IodmFyIGU9MDtlPE07KytlKXIucHVzaCh1KGUpKTtPLnB1c2goYixcIltcIixrLFwiKytdPXBoYXNlKFwiLHIuam9pbigpLFwiKTtcIik7Zm9yKHZhciBlPTA7ZTx0OysrZSlZKGUpO2Zvcih2YXIgbj0wO248QzsrK24pTy5wdXNoKGgobiksXCIrPVwiLGQobixTW3RdKSxcIjtcIil9KGUpO08ucHVzaChcImlmKFwiLHMoU1tlXSksXCI+MCl7XCIscChTW2VdKSxcIj0xO1wiKTt0KGUtMSxyfDE8PFNbZV0pO2Zvcih2YXIgbj0wO248QzsrK24pTy5wdXNoKGgobiksXCIrPVwiLGQobixTW2VdKSxcIjtcIik7ZT09PUwtMSYmKE8ucHVzaChrLFwiPTA7XCIpLFcoKSk7RyhlLDIpO3QoZS0xLHIpO2U9PT1MLTEmJihPLnB1c2goXCJpZihcIixwKFNbTC0xXSksXCImMSl7XCIsayxcIj0wO31cIiksVygpKTtZKGUpO08ucHVzaChcIn1cIil9KEwtMSwwKSxPLnB1c2goXCJmcmVlVWludDMyKFwiLHgsXCIpO2ZyZWVVaW50MzIoXCIsYixcIik7XCIpO3ZhciBYPVtcIid1c2Ugc3RyaWN0JztcIixcImZ1bmN0aW9uIFwiLHosXCIoXCIsRC5qb2luKCksXCIpe1wiLFwidmFyIFwiLEkuam9pbigpLFwiO1wiLE8uam9pbihcIlwiKSxcIn1cIixcInJldHVybiBcIix6XS5qb2luKFwiXCIpO3JldHVybiBuZXcgRnVuY3Rpb24oXCJ2ZXJ0ZXhcIixcImZhY2VcIixcInBoYXNlXCIsXCJtYWxsb2NVaW50MzJcIixcImZyZWVVaW50MzJcIixYKSh0LGUscixuLm1hbGxvY1VpbnQzMixuLmZyZWVVaW50MzIpfSh0LnZlcnRleCx0LmNlbGwsdC5waGFzZSxTLHIsQyl9O3ZhciB4PVwiVlwiLGI9XCJQXCIsXz1cIk5cIix3PVwiUVwiLGs9XCJYXCIsQT1cIlRcIjtmdW5jdGlvbiBUKHQsZSxyKXtmb3IodmFyIG49MCxpPTA7aTx0OysraSllJjE8PGkmJihufD0xPDxyW2ldKTtyZXR1cm4gbn19LHtcInR5cGVkYXJyYXktcG9vbFwiOjUzMH1dLDQzMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJjd2lzZS9saWIvd3JhcHBlclwiKSh7YXJnczpbXCJpbmRleFwiLFwiYXJyYXlcIixcInNjYWxhclwiXSxwcmU6e2JvZHk6XCJ7fVwiLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5Olwie19pbmxpbmVfMV9hcmcxXz1faW5saW5lXzFfYXJnMl8uYXBwbHkodm9pZCAwLF9pbmxpbmVfMV9hcmcwXyl9XCIsYXJnczpbe25hbWU6XCJfaW5saW5lXzFfYXJnMF9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xX2FyZzFfXCIsbHZhbHVlOiEwLHJ2YWx1ZTohMSxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfMV9hcmcyX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keTpcInt9XCIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGRlYnVnOiExLGZ1bmNOYW1lOlwiY3dpc2VcIixibG9ja1NpemU6NjR9KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LGUpLHR9fSx7XCJjd2lzZS9saWIvd3JhcHBlclwiOjE0MH1dLDQzNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoQXJyYXkuaXNBcnJheShyKSl7aWYoci5sZW5ndGghPT1lLmRpbWVuc2lvbil0aHJvdyBuZXcgRXJyb3IoXCJuZGFycmF5LWdyYWRpZW50OiBpbnZhbGlkIGJvdW5kYXJ5IGNvbmRpdGlvbnNcIil9ZWxzZSByPW4oZS5kaW1lbnNpb24sXCJzdHJpbmdcIj09dHlwZW9mIHI/cjpcImNsYW1wXCIpO2lmKHQuZGltZW5zaW9uIT09ZS5kaW1lbnNpb24rMSl0aHJvdyBuZXcgRXJyb3IoXCJuZGFycmF5LWdyYWRpZW50OiBvdXRwdXQgZGltZW5zaW9uIG11c3QgYmUgKzEgaW5wdXQgZGltZW5zaW9uXCIpO2lmKHQuc2hhcGVbZS5kaW1lbnNpb25dIT09ZS5kaW1lbnNpb24pdGhyb3cgbmV3IEVycm9yKFwibmRhcnJheS1ncmFkaWVudDogb3V0cHV0IHNoYXBlIG11c3QgbWF0Y2ggaW5wdXQgc2hhcGVcIik7Zm9yKHZhciBpPTA7aTxlLmRpbWVuc2lvbjsrK2kpaWYodC5zaGFwZVtpXSE9PWUuc2hhcGVbaV0pdGhyb3cgbmV3IEVycm9yKFwibmRhcnJheS1ncmFkaWVudDogc2hhcGUgbWlzbWF0Y2hcIik7aWYoMD09PWUuc2l6ZSlyZXR1cm4gdDtpZihlLmRpbWVuc2lvbjw9MClyZXR1cm4gdC5zZXQoMCksdDtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5qb2luKCk7aWYobT1vW2VdKXJldHVybiBtO3ZhciByPXQubGVuZ3RoLG49W1wiZnVuY3Rpb24gZ3JhZGllbnQoZHN0LHNyYyl7dmFyIHM9c3JjLnNoYXBlLnNsaWNlKCk7XCJdO2Z1bmN0aW9uIGkoZSl7Zm9yKHZhciBpPXItZS5sZW5ndGgsYT1bXSxvPVtdLHM9W10sbD0wO2w8cjsrK2wpZS5pbmRleE9mKGwrMSk+PTA/cy5wdXNoKFwiMFwiKTplLmluZGV4T2YoLShsKzEpKT49MD9zLnB1c2goXCJzW1wiK2wrXCJdLTFcIik6KHMucHVzaChcIi0xXCIpLGEucHVzaChcIjFcIiksby5wdXNoKFwic1tcIitsK1wiXS0yXCIpKTt2YXIgYz1cIi5sbyhcIithLmpvaW4oKStcIikuaGkoXCIrby5qb2luKCkrXCIpXCI7aWYoMD09PWEubGVuZ3RoJiYoYz1cIlwiKSxpPjApe24ucHVzaChcImlmKDFcIik7Zm9yKHZhciBsPTA7bDxyOysrbCllLmluZGV4T2YobCsxKT49MHx8ZS5pbmRleE9mKC0obCsxKSk+PTB8fG4ucHVzaChcIiYmc1tcIixsLFwiXT4yXCIpO24ucHVzaChcIil7Z3JhZFwiLGksXCIoc3JjLnBpY2soXCIscy5qb2luKCksXCIpXCIsYyk7Zm9yKHZhciBsPTA7bDxyOysrbCllLmluZGV4T2YobCsxKT49MHx8ZS5pbmRleE9mKC0obCsxKSk+PTB8fG4ucHVzaChcIixkc3QucGljayhcIixzLmpvaW4oKSxcIixcIixsLFwiKVwiLGMpO24ucHVzaChcIik7XCIpfWZvcih2YXIgbD0wO2w8ZS5sZW5ndGg7KytsKXt2YXIgdT1NYXRoLmFicyhlW2xdKS0xLGg9XCJkc3QucGljayhcIitzLmpvaW4oKStcIixcIit1K1wiKVwiK2M7c3dpdGNoKHRbdV0pe2Nhc2VcImNsYW1wXCI6dmFyIGY9cy5zbGljZSgpLHA9cy5zbGljZSgpO2VbbF08MD9mW3VdPVwic1tcIit1K1wiXS0yXCI6cFt1XT1cIjFcIiwwPT09aT9uLnB1c2goXCJpZihzW1wiLHUsXCJdPjEpe2RzdC5zZXQoXCIscy5qb2luKCksXCIsXCIsdSxcIiwwLjUqKHNyYy5nZXQoXCIsZi5qb2luKCksXCIpLXNyYy5nZXQoXCIscC5qb2luKCksXCIpKSl9ZWxzZXtkc3Quc2V0KFwiLHMuam9pbigpLFwiLFwiLHUsXCIsMCl9O1wiKTpuLnB1c2goXCJpZihzW1wiLHUsXCJdPjEpe2RpZmYoXCIsaCxcIixzcmMucGljayhcIixmLmpvaW4oKSxcIilcIixjLFwiLHNyYy5waWNrKFwiLHAuam9pbigpLFwiKVwiLGMsXCIpO31lbHNle3plcm8oXCIsaCxcIik7fTtcIik7YnJlYWs7Y2FzZVwibWlycm9yXCI6MD09PWk/bi5wdXNoKFwiZHN0LnNldChcIixzLmpvaW4oKSxcIixcIix1LFwiLDApO1wiKTpuLnB1c2goXCJ6ZXJvKFwiLGgsXCIpO1wiKTticmVhaztjYXNlXCJ3cmFwXCI6dmFyIGQ9cy5zbGljZSgpLGc9cy5zbGljZSgpO2VbbF08MD8oZFt1XT1cInNbXCIrdStcIl0tMlwiLGdbdV09XCIwXCIpOihkW3VdPVwic1tcIit1K1wiXS0xXCIsZ1t1XT1cIjFcIiksMD09PWk/bi5wdXNoKFwiaWYoc1tcIix1LFwiXT4yKXtkc3Quc2V0KFwiLHMuam9pbigpLFwiLFwiLHUsXCIsMC41KihzcmMuZ2V0KFwiLGQuam9pbigpLFwiKS1zcmMuZ2V0KFwiLGcuam9pbigpLFwiKSkpfWVsc2V7ZHN0LnNldChcIixzLmpvaW4oKSxcIixcIix1LFwiLDApfTtcIik6bi5wdXNoKFwiaWYoc1tcIix1LFwiXT4yKXtkaWZmKFwiLGgsXCIsc3JjLnBpY2soXCIsZC5qb2luKCksXCIpXCIsYyxcIixzcmMucGljayhcIixnLmpvaW4oKSxcIilcIixjLFwiKTt9ZWxzZXt6ZXJvKFwiLGgsXCIpO307XCIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwibmRhcnJheS1ncmFkaWVudDogSW52YWxpZCBib3VuZGFyeSBjb25kaXRpb25cIil9fWk+MCYmbi5wdXNoKFwifTtcIil9Zm9yKHZhciBzPTA7czwxPDxyOysrcyl7Zm9yKHZhciBoPVtdLGY9MDtmPHI7KytmKXMmMTw8ZiYmaC5wdXNoKGYrMSk7Zm9yKHZhciBwPTA7cDwxPDxoLmxlbmd0aDsrK3Ape2Zvcih2YXIgZD1oLnNsaWNlKCksZj0wO2Y8aC5sZW5ndGg7KytmKXAmMTw8ZiYmKGRbZl09LWRbZl0pO2koZCl9fW4ucHVzaChcInJldHVybiBkc3Q7fTtyZXR1cm4gZ3JhZGllbnRcIik7Zm9yKHZhciBnPVtcImRpZmZcIixcInplcm9cIl0sdj1bbCxjXSxzPTE7czw9cjsrK3MpZy5wdXNoKFwiZ3JhZFwiK3MpLHYucHVzaCh1KHMpKTtnLnB1c2gobi5qb2luKFwiXCIpKTt2YXIgbT1GdW5jdGlvbi5hcHBseSh2b2lkIDAsZykuYXBwbHkodm9pZCAwLHYpO3JldHVybiBhW2VdPW0sbX0ocikodCxlKX07dmFyIG49dChcImR1cFwiKSxpPXQoXCJjd2lzZS1jb21waWxlclwiKSxhPXt9LG89e30scz17Ym9keTpcIlwiLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxsPWkoe2FyZ3M6W1wiYXJyYXlcIixcImFycmF5XCIsXCJhcnJheVwiXSxwcmU6cyxwb3N0OnMsYm9keTp7YXJnczpbe25hbWU6XCJvdXRcIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOlwibGVmdFwiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJyaWdodFwiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6XCJvdXQ9MC41KihsZWZ0LXJpZ2h0KVwiLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZnVuY05hbWU6XCJjZGlmZlwifSksYz1pKHthcmdzOltcImFycmF5XCJdLHByZTpzLHBvc3Q6cyxib2R5OnthcmdzOlt7bmFtZTpcIm91dFwiLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX1dLGJvZHk6XCJvdXQ9MFwiLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZnVuY05hbWU6XCJ6ZXJvXCJ9KTtmdW5jdGlvbiB1KHQpe2lmKHQgaW4gYSlyZXR1cm4gYVt0XTtmb3IodmFyIGU9W10scj0wO3I8dDsrK3IpZS5wdXNoKFwib3V0XCIscixcInM9MC41KihpbnBcIixyLFwibC1pbnBcIixyLFwicik7XCIpO3ZhciBvPVtcImFycmF5XCJdLGw9W1wianVua1wiXTtmb3Iocj0wO3I8dDsrK3Ipe28ucHVzaChcImFycmF5XCIpLGwucHVzaChcIm91dFwiK3IrXCJzXCIpO3ZhciBjPW4odCk7Y1tyXT0tMSxvLnB1c2goe2FycmF5OjAsb2Zmc2V0OmMuc2xpY2UoKX0pLGNbcl09MSxvLnB1c2goe2FycmF5OjAsb2Zmc2V0OmMuc2xpY2UoKX0pLGwucHVzaChcImlucFwiK3IrXCJsXCIsXCJpbnBcIityK1wiclwiKX1yZXR1cm4gYVt0XT1pKHthcmdzOm8scHJlOnMscG9zdDpzLGJvZHk6e2JvZHk6ZS5qb2luKFwiXCIpLGFyZ3M6bC5tYXAoZnVuY3Rpb24odCl7cmV0dXJue25hbWU6dCxsdmFsdWU6MD09PXQuaW5kZXhPZihcIm91dFwiKSxydmFsdWU6MD09PXQuaW5kZXhPZihcImlucFwiKSxjb3VudDpcImp1bmtcIiE9PXR8MH19KSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGZ1bmNOYW1lOlwiZmRUZW1wbGF0ZVwiK3R9KX19LHtcImN3aXNlLWNvbXBpbGVyXCI6MTM3LGR1cDoxNjJ9XSw0MzU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwibmRhcnJheS13YXJwXCIpLGk9dChcImdsLW1hdHJpeC1pbnZlcnRcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1lLmRpbWVuc2lvbixvPWkoW10scik7cmV0dXJuIG4odCxlLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjxhOysrcil7dFtyXT1vWyhhKzEpKmErcl07Zm9yKHZhciBuPTA7bjxhOysrbil0W3JdKz1vWyhhKzEpKm4rcl0qZVtuXX12YXIgaT1vWyhhKzEpKihhKzEpLTFdO2ZvcihuPTA7bjxhOysrbilpKz1vWyhhKzEpKm4rYV0qZVtuXTt2YXIgcz0xL2k7Zm9yKHI9MDtyPGE7KytyKXRbcl0qPXM7cmV0dXJuIHR9KSx0fX0se1wiZ2wtbWF0cml4LWludmVydFwiOjI3NCxcIm5kYXJyYXktd2FycFwiOjQ0Mn1dLDQzNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1NYXRoLmZsb29yKGUpLG49ZS1yLGk9MDw9ciYmcjx0LnNoYXBlWzBdLGE9MDw9cisxJiZyKzE8dC5zaGFwZVswXTtyZXR1cm4oMS1uKSooaT8rdC5nZXQocik6MCkrbiooYT8rdC5nZXQocisxKTowKX1mdW5jdGlvbiBpKHQsZSxyKXt2YXIgbj1NYXRoLmZsb29yKGUpLGk9ZS1uLGE9MDw9biYmbjx0LnNoYXBlWzBdLG89MDw9bisxJiZuKzE8dC5zaGFwZVswXSxzPU1hdGguZmxvb3IociksbD1yLXMsYz0wPD1zJiZzPHQuc2hhcGVbMV0sdT0wPD1zKzEmJnMrMTx0LnNoYXBlWzFdLGg9YSYmYz90LmdldChuLHMpOjAsZj1hJiZ1P3QuZ2V0KG4scysxKTowO3JldHVybigxLWwpKigoMS1pKSpoK2kqKG8mJmM/dC5nZXQobisxLHMpOjApKStsKigoMS1pKSpmK2kqKG8mJnU/dC5nZXQobisxLHMrMSk6MCkpfWZ1bmN0aW9uIGEodCxlLHIsbil7dmFyIGk9TWF0aC5mbG9vcihlKSxhPWUtaSxvPTA8PWkmJmk8dC5zaGFwZVswXSxzPTA8PWkrMSYmaSsxPHQuc2hhcGVbMF0sbD1NYXRoLmZsb29yKHIpLGM9ci1sLHU9MDw9bCYmbDx0LnNoYXBlWzFdLGg9MDw9bCsxJiZsKzE8dC5zaGFwZVsxXSxmPU1hdGguZmxvb3IobikscD1uLWYsZD0wPD1mJiZmPHQuc2hhcGVbMl0sZz0wPD1mKzEmJmYrMTx0LnNoYXBlWzJdLHY9byYmdSYmZD90LmdldChpLGwsZik6MCxtPW8mJmgmJmQ/dC5nZXQoaSxsKzEsZik6MCx5PXMmJnUmJmQ/dC5nZXQoaSsxLGwsZik6MCx4PXMmJmgmJmQ/dC5nZXQoaSsxLGwrMSxmKTowLGI9byYmdSYmZz90LmdldChpLGwsZisxKTowLF89byYmaCYmZz90LmdldChpLGwrMSxmKzEpOjA7cmV0dXJuKDEtcCkqKCgxLWMpKigoMS1hKSp2K2EqeSkrYyooKDEtYSkqbSthKngpKStwKigoMS1jKSooKDEtYSkqYithKihzJiZ1JiZnP3QuZ2V0KGkrMSxsLGYrMSk6MCkpK2MqKCgxLWEpKl8rYSoocyYmaCYmZz90LmdldChpKzEsbCsxLGYrMSk6MCkpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7c3dpdGNoKHQuc2hhcGUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIDA7Y2FzZSAxOnJldHVybiBuKHQsZSk7Y2FzZSAyOnJldHVybiBpKHQsZSxyKTtjYXNlIDM6cmV0dXJuIGEodCxlLHIsbyk7ZGVmYXVsdDpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGUscixuPTB8dC5zaGFwZS5sZW5ndGgsaT1uZXcgQXJyYXkobiksYT1uZXcgQXJyYXkobiksbz1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobik7Zm9yKGU9MDtlPG47KytlKXI9K2FyZ3VtZW50c1tlKzFdLGlbZV09TWF0aC5mbG9vcihyKSxhW2VdPXItaVtlXSxvW2VdPTA8PWlbZV0mJmlbZV08dC5zaGFwZVtlXSxzW2VdPTA8PWlbZV0rMSYmaVtlXSsxPHQuc2hhcGVbZV07dmFyIGwsYyx1LGg9MDt0OmZvcihlPTA7ZTwxPDxuOysrZSl7Zm9yKGM9MSx1PXQub2Zmc2V0LGw9MDtsPG47KytsKWlmKGUmMTw8bCl7aWYoIXNbbF0pY29udGludWUgdDtjKj1hW2xdLHUrPXQuc3RyaWRlW2xdKihpW2xdKzEpfWVsc2V7aWYoIW9bbF0pY29udGludWUgdDtjKj0xLWFbbF0sdSs9dC5zdHJpZGVbbF0qaVtsXX1oKz1jKnQuZGF0YVt1XX1yZXR1cm4gaH0uYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fSxlLmV4cG9ydHMuZDE9bixlLmV4cG9ydHMuZDI9aSxlLmV4cG9ydHMuZDM9YX0se31dLDQzNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJjd2lzZS1jb21waWxlclwiKSxpPXtib2R5OlwiXCIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119O2Z1bmN0aW9uIGEodCl7aWYoIXQpcmV0dXJuIGk7Zm9yKHZhciBlPTA7ZTx0LmFyZ3MubGVuZ3RoOysrZSl7dmFyIHI9dC5hcmdzW2VdO3QuYXJnc1tlXT0wPT09ZT97bmFtZTpyLGx2YWx1ZTohMCxydmFsdWU6ISF0LnJ2YWx1ZSxjb3VudDp0LmNvdW50fHwxfTp7bmFtZTpyLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX19cmV0dXJuIHQudGhpc1ZhcnN8fCh0LnRoaXNWYXJzPVtdKSx0LmxvY2FsVmFyc3x8KHQubG9jYWxWYXJzPVtdKSx0fWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPVtdLHI9MDtyPHQuYXJncy5sZW5ndGg7KytyKWUucHVzaChcImFcIityKTtyZXR1cm4gbmV3IEZ1bmN0aW9uKFwiUFwiLFtcInJldHVybiBmdW5jdGlvbiBcIix0LmZ1bmNOYW1lLFwiX25kYXJyYXlvcHMoXCIsZS5qb2luKFwiLFwiKSxcIikge1AoXCIsZS5qb2luKFwiLFwiKSxcIik7cmV0dXJuIGEwfVwiXS5qb2luKFwiXCIpKShmdW5jdGlvbih0KXtyZXR1cm4gbih7YXJnczp0LmFyZ3MscHJlOmEodC5wcmUpLGJvZHk6YSh0LmJvZHkpLHBvc3Q6YSh0LnByb2MpLGZ1bmNOYW1lOnQuZnVuY05hbWV9KX0odCkpfXZhciBzPXthZGQ6XCIrXCIsc3ViOlwiLVwiLG11bDpcIipcIixkaXY6XCIvXCIsbW9kOlwiJVwiLGJhbmQ6XCImXCIsYm9yOlwifFwiLGJ4b3I6XCJeXCIsbHNoaWZ0OlwiPDxcIixyc2hpZnQ6XCI+PlwiLHJyc2hpZnQ6XCI+Pj5cIn07IWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHMpe3ZhciBlPXNbdF07clt0XT1vKHthcmdzOltcImFycmF5XCIsXCJhcnJheVwiLFwiYXJyYXlcIl0sYm9keTp7YXJnczpbXCJhXCIsXCJiXCIsXCJjXCJdLGJvZHk6XCJhPWJcIitlK1wiY1wifSxmdW5jTmFtZTp0fSksclt0K1wiZXFcIl09byh7YXJnczpbXCJhcnJheVwiLFwiYXJyYXlcIl0sYm9keTp7YXJnczpbXCJhXCIsXCJiXCJdLGJvZHk6XCJhXCIrZStcIj1iXCJ9LHJ2YWx1ZTohMCxmdW5jTmFtZTp0K1wiZXFcIn0pLHJbdCtcInNcIl09byh7YXJnczpbXCJhcnJheVwiLFwiYXJyYXlcIixcInNjYWxhclwiXSxib2R5OnthcmdzOltcImFcIixcImJcIixcInNcIl0sYm9keTpcImE9YlwiK2UrXCJzXCJ9LGZ1bmNOYW1lOnQrXCJzXCJ9KSxyW3QrXCJzZXFcIl09byh7YXJnczpbXCJhcnJheVwiLFwic2NhbGFyXCJdLGJvZHk6e2FyZ3M6W1wiYVwiLFwic1wiXSxib2R5OlwiYVwiK2UrXCI9c1wifSxydmFsdWU6ITAsZnVuY05hbWU6dCtcInNlcVwifSl9fSgpO3ZhciBsPXtub3Q6XCIhXCIsYm5vdDpcIn5cIixuZWc6XCItXCIscmVjaXA6XCIxLjAvXCJ9OyFmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBsKXt2YXIgZT1sW3RdO3JbdF09byh7YXJnczpbXCJhcnJheVwiLFwiYXJyYXlcIl0sYm9keTp7YXJnczpbXCJhXCIsXCJiXCJdLGJvZHk6XCJhPVwiK2UrXCJiXCJ9LGZ1bmNOYW1lOnR9KSxyW3QrXCJlcVwiXT1vKHthcmdzOltcImFycmF5XCJdLGJvZHk6e2FyZ3M6W1wiYVwiXSxib2R5OlwiYT1cIitlK1wiYVwifSxydmFsdWU6ITAsY291bnQ6MixmdW5jTmFtZTp0K1wiZXFcIn0pfX0oKTt2YXIgYz17YW5kOlwiJiZcIixvcjpcInx8XCIsZXE6XCI9PT1cIixuZXE6XCIhPT1cIixsdDpcIjxcIixndDpcIj5cIixsZXE6XCI8PVwiLGdlcTpcIj49XCJ9OyFmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBjKXt2YXIgZT1jW3RdO3JbdF09byh7YXJnczpbXCJhcnJheVwiLFwiYXJyYXlcIixcImFycmF5XCJdLGJvZHk6e2FyZ3M6W1wiYVwiLFwiYlwiLFwiY1wiXSxib2R5OlwiYT1iXCIrZStcImNcIn0sZnVuY05hbWU6dH0pLHJbdCtcInNcIl09byh7YXJnczpbXCJhcnJheVwiLFwiYXJyYXlcIixcInNjYWxhclwiXSxib2R5OnthcmdzOltcImFcIixcImJcIixcInNcIl0sYm9keTpcImE9YlwiK2UrXCJzXCJ9LGZ1bmNOYW1lOnQrXCJzXCJ9KSxyW3QrXCJlcVwiXT1vKHthcmdzOltcImFycmF5XCIsXCJhcnJheVwiXSxib2R5OnthcmdzOltcImFcIixcImJcIl0sYm9keTpcImE9YVwiK2UrXCJiXCJ9LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOnQrXCJlcVwifSksclt0K1wic2VxXCJdPW8oe2FyZ3M6W1wiYXJyYXlcIixcInNjYWxhclwiXSxib2R5OnthcmdzOltcImFcIixcInNcIl0sYm9keTpcImE9YVwiK2UrXCJzXCJ9LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOnQrXCJzZXFcIn0pfX0oKTt2YXIgdT1bXCJhYnNcIixcImFjb3NcIixcImFzaW5cIixcImF0YW5cIixcImNlaWxcIixcImNvc1wiLFwiZXhwXCIsXCJmbG9vclwiLFwibG9nXCIsXCJyb3VuZFwiLFwic2luXCIsXCJzcXJ0XCIsXCJ0YW5cIl07IWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDx1Lmxlbmd0aDsrK3Qpe3ZhciBlPXVbdF07cltlXT1vKHthcmdzOltcImFycmF5XCIsXCJhcnJheVwiXSxwcmU6e2FyZ3M6W10sYm9keTpcInRoaXNfZj1NYXRoLlwiK2UsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxib2R5OnthcmdzOltcImFcIixcImJcIl0sYm9keTpcImE9dGhpc19mKGIpXCIsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxmdW5jTmFtZTplfSkscltlK1wiZXFcIl09byh7YXJnczpbXCJhcnJheVwiXSxwcmU6e2FyZ3M6W10sYm9keTpcInRoaXNfZj1NYXRoLlwiK2UsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxib2R5OnthcmdzOltcImFcIl0sYm9keTpcImE9dGhpc19mKGEpXCIsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxydmFsdWU6ITAsY291bnQ6MixmdW5jTmFtZTplK1wiZXFcIn0pfX0oKTt2YXIgaD1bXCJtYXhcIixcIm1pblwiLFwiYXRhbjJcIixcInBvd1wiXTshZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGgubGVuZ3RoOysrdCl7dmFyIGU9aFt0XTtyW2VdPW8oe2FyZ3M6W1wiYXJyYXlcIixcImFycmF5XCIsXCJhcnJheVwiXSxwcmU6e2FyZ3M6W10sYm9keTpcInRoaXNfZj1NYXRoLlwiK2UsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxib2R5OnthcmdzOltcImFcIixcImJcIixcImNcIl0sYm9keTpcImE9dGhpc19mKGIsYylcIix0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LGZ1bmNOYW1lOmV9KSxyW2UrXCJzXCJdPW8oe2FyZ3M6W1wiYXJyYXlcIixcImFycmF5XCIsXCJzY2FsYXJcIl0scHJlOnthcmdzOltdLGJvZHk6XCJ0aGlzX2Y9TWF0aC5cIitlLHRoaXNWYXJzOltcInRoaXNfZlwiXX0sYm9keTp7YXJnczpbXCJhXCIsXCJiXCIsXCJjXCJdLGJvZHk6XCJhPXRoaXNfZihiLGMpXCIsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxmdW5jTmFtZTplK1wic1wifSkscltlK1wiZXFcIl09byh7YXJnczpbXCJhcnJheVwiLFwiYXJyYXlcIl0scHJlOnthcmdzOltdLGJvZHk6XCJ0aGlzX2Y9TWF0aC5cIitlLHRoaXNWYXJzOltcInRoaXNfZlwiXX0sYm9keTp7YXJnczpbXCJhXCIsXCJiXCJdLGJvZHk6XCJhPXRoaXNfZihhLGIpXCIsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxydmFsdWU6ITAsY291bnQ6MixmdW5jTmFtZTplK1wiZXFcIn0pLHJbZStcInNlcVwiXT1vKHthcmdzOltcImFycmF5XCIsXCJzY2FsYXJcIl0scHJlOnthcmdzOltdLGJvZHk6XCJ0aGlzX2Y9TWF0aC5cIitlLHRoaXNWYXJzOltcInRoaXNfZlwiXX0sYm9keTp7YXJnczpbXCJhXCIsXCJiXCJdLGJvZHk6XCJhPXRoaXNfZihhLGIpXCIsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxydmFsdWU6ITAsY291bnQ6MixmdW5jTmFtZTplK1wic2VxXCJ9KX19KCk7dmFyIGY9W1wiYXRhbjJcIixcInBvd1wiXTshZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGYubGVuZ3RoOysrdCl7dmFyIGU9Zlt0XTtyW2UrXCJvcFwiXT1vKHthcmdzOltcImFycmF5XCIsXCJhcnJheVwiLFwiYXJyYXlcIl0scHJlOnthcmdzOltdLGJvZHk6XCJ0aGlzX2Y9TWF0aC5cIitlLHRoaXNWYXJzOltcInRoaXNfZlwiXX0sYm9keTp7YXJnczpbXCJhXCIsXCJiXCIsXCJjXCJdLGJvZHk6XCJhPXRoaXNfZihjLGIpXCIsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxmdW5jTmFtZTplK1wib3BcIn0pLHJbZStcIm9wc1wiXT1vKHthcmdzOltcImFycmF5XCIsXCJhcnJheVwiLFwic2NhbGFyXCJdLHByZTp7YXJnczpbXSxib2R5OlwidGhpc19mPU1hdGguXCIrZSx0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LGJvZHk6e2FyZ3M6W1wiYVwiLFwiYlwiLFwiY1wiXSxib2R5OlwiYT10aGlzX2YoYyxiKVwiLHRoaXNWYXJzOltcInRoaXNfZlwiXX0sZnVuY05hbWU6ZStcIm9wc1wifSkscltlK1wib3BlcVwiXT1vKHthcmdzOltcImFycmF5XCIsXCJhcnJheVwiXSxwcmU6e2FyZ3M6W10sYm9keTpcInRoaXNfZj1NYXRoLlwiK2UsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxib2R5OnthcmdzOltcImFcIixcImJcIl0sYm9keTpcImE9dGhpc19mKGIsYSlcIix0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOmUrXCJvcGVxXCJ9KSxyW2UrXCJvcHNlcVwiXT1vKHthcmdzOltcImFycmF5XCIsXCJzY2FsYXJcIl0scHJlOnthcmdzOltdLGJvZHk6XCJ0aGlzX2Y9TWF0aC5cIitlLHRoaXNWYXJzOltcInRoaXNfZlwiXX0sYm9keTp7YXJnczpbXCJhXCIsXCJiXCJdLGJvZHk6XCJhPXRoaXNfZihiLGEpXCIsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxydmFsdWU6ITAsY291bnQ6MixmdW5jTmFtZTplK1wib3BzZXFcIn0pfX0oKSxyLmFueT1uKHthcmdzOltcImFycmF5XCJdLHByZTppLGJvZHk6e2FyZ3M6W3tuYW1lOlwiYVwiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6XCJpZihhKXtyZXR1cm4gdHJ1ZX1cIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W119LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOltdLGJvZHk6XCJyZXR1cm4gZmFsc2VcIn0sZnVuY05hbWU6XCJhbnlcIn0pLHIuYWxsPW4oe2FyZ3M6W1wiYXJyYXlcIl0scHJlOmksYm9keTp7YXJnczpbe25hbWU6XCJ4XCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sYm9keTpcImlmKCF4KXtyZXR1cm4gZmFsc2V9XCIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOltdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXSxib2R5OlwicmV0dXJuIHRydWVcIn0sZnVuY05hbWU6XCJhbGxcIn0pLHIuc3VtPW4oe2FyZ3M6W1wiYXJyYXlcIl0scHJlOnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXCJ0aGlzX3NcIl0sYm9keTpcInRoaXNfcz0wXCJ9LGJvZHk6e2FyZ3M6W3tuYW1lOlwiYVwiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6XCJ0aGlzX3MrPWFcIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W1widGhpc19zXCJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXCJ0aGlzX3NcIl0sYm9keTpcInJldHVybiB0aGlzX3NcIn0sZnVuY05hbWU6XCJzdW1cIn0pLHIucHJvZD1uKHthcmdzOltcImFycmF5XCJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W1widGhpc19zXCJdLGJvZHk6XCJ0aGlzX3M9MVwifSxib2R5OnthcmdzOlt7bmFtZTpcImFcIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSxib2R5OlwidGhpc19zKj1hXCIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOltcInRoaXNfc1wiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W1widGhpc19zXCJdLGJvZHk6XCJyZXR1cm4gdGhpc19zXCJ9LGZ1bmNOYW1lOlwicHJvZFwifSksci5ub3JtMnNxdWFyZWQ9bih7YXJnczpbXCJhcnJheVwiXSxwcmU6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOltcInRoaXNfc1wiXSxib2R5OlwidGhpc19zPTBcIn0sYm9keTp7YXJnczpbe25hbWU6XCJhXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfV0sYm9keTpcInRoaXNfcys9YSphXCIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOltcInRoaXNfc1wiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W1widGhpc19zXCJdLGJvZHk6XCJyZXR1cm4gdGhpc19zXCJ9LGZ1bmNOYW1lOlwibm9ybTJzcXVhcmVkXCJ9KSxyLm5vcm0yPW4oe2FyZ3M6W1wiYXJyYXlcIl0scHJlOnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXCJ0aGlzX3NcIl0sYm9keTpcInRoaXNfcz0wXCJ9LGJvZHk6e2FyZ3M6W3tuYW1lOlwiYVwiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn1dLGJvZHk6XCJ0aGlzX3MrPWEqYVwiLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXCJ0aGlzX3NcIl19LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOltcInRoaXNfc1wiXSxib2R5OlwicmV0dXJuIE1hdGguc3FydCh0aGlzX3MpXCJ9LGZ1bmNOYW1lOlwibm9ybTJcIn0pLHIubm9ybWluZj1uKHthcmdzOltcImFycmF5XCJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W1widGhpc19zXCJdLGJvZHk6XCJ0aGlzX3M9MFwifSxib2R5OnthcmdzOlt7bmFtZTpcImFcIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjR9XSxib2R5OlwiaWYoLWE+dGhpc19zKXt0aGlzX3M9LWF9ZWxzZSBpZihhPnRoaXNfcyl7dGhpc19zPWF9XCIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOltcInRoaXNfc1wiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W1widGhpc19zXCJdLGJvZHk6XCJyZXR1cm4gdGhpc19zXCJ9LGZ1bmNOYW1lOlwibm9ybWluZlwifSksci5ub3JtMT1uKHthcmdzOltcImFycmF5XCJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W1widGhpc19zXCJdLGJvZHk6XCJ0aGlzX3M9MFwifSxib2R5OnthcmdzOlt7bmFtZTpcImFcIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjN9XSxib2R5OlwidGhpc19zKz1hPDA/LWE6YVwiLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXCJ0aGlzX3NcIl19LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOltcInRoaXNfc1wiXSxib2R5OlwicmV0dXJuIHRoaXNfc1wifSxmdW5jTmFtZTpcIm5vcm0xXCJ9KSxyLnN1cD1uKHthcmdzOltcImFycmF5XCJdLHByZTp7Ym9keTpcInRoaXNfaD0tSW5maW5pdHlcIixhcmdzOltdLHRoaXNWYXJzOltcInRoaXNfaFwiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6XCJpZihfaW5saW5lXzFfYXJnMF8+dGhpc19oKXRoaXNfaD1faW5saW5lXzFfYXJnMF9cIixhcmdzOlt7bmFtZTpcIl9pbmxpbmVfMV9hcmcwX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn1dLHRoaXNWYXJzOltcInRoaXNfaFwiXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6XCJyZXR1cm4gdGhpc19oXCIsYXJnczpbXSx0aGlzVmFyczpbXCJ0aGlzX2hcIl0sbG9jYWxWYXJzOltdfX0pLHIuaW5mPW4oe2FyZ3M6W1wiYXJyYXlcIl0scHJlOntib2R5OlwidGhpc19oPUluZmluaXR5XCIsYXJnczpbXSx0aGlzVmFyczpbXCJ0aGlzX2hcIl0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OlwiaWYoX2lubGluZV8xX2FyZzBfPHRoaXNfaCl0aGlzX2g9X2lubGluZV8xX2FyZzBfXCIsYXJnczpbe25hbWU6XCJfaW5saW5lXzFfYXJnMF9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9XSx0aGlzVmFyczpbXCJ0aGlzX2hcIl0sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5OlwicmV0dXJuIHRoaXNfaFwiLGFyZ3M6W10sdGhpc1ZhcnM6W1widGhpc19oXCJdLGxvY2FsVmFyczpbXX19KSxyLmFyZ21pbj1uKHthcmdzOltcImluZGV4XCIsXCJhcnJheVwiLFwic2hhcGVcIl0scHJlOntib2R5Olwie3RoaXNfdj1JbmZpbml0eTt0aGlzX2k9X2lubGluZV8wX2FyZzJfLnNsaWNlKDApfVwiLGFyZ3M6W3tuYW1lOlwiX2lubGluZV8wX2FyZzBfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZTpcIl9pbmxpbmVfMF9hcmcxX1wiLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6XCJfaW5saW5lXzBfYXJnMl9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbXCJ0aGlzX2lcIixcInRoaXNfdlwiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6XCJ7aWYoX2lubGluZV8xX2FyZzFfPHRoaXNfdil7dGhpc192PV9pbmxpbmVfMV9hcmcxXztmb3IodmFyIF9pbmxpbmVfMV9rPTA7X2lubGluZV8xX2s8X2lubGluZV8xX2FyZzBfLmxlbmd0aDsrK19pbmxpbmVfMV9rKXt0aGlzX2lbX2lubGluZV8xX2tdPV9pbmxpbmVfMV9hcmcwX1tfaW5saW5lXzFfa119fX1cIixhcmdzOlt7bmFtZTpcIl9pbmxpbmVfMV9hcmcwX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn0se25hbWU6XCJfaW5saW5lXzFfYXJnMV9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9XSx0aGlzVmFyczpbXCJ0aGlzX2lcIixcInRoaXNfdlwiXSxsb2NhbFZhcnM6W1wiX2lubGluZV8xX2tcIl19LHBvc3Q6e2JvZHk6XCJ7cmV0dXJuIHRoaXNfaX1cIixhcmdzOltdLHRoaXNWYXJzOltcInRoaXNfaVwiXSxsb2NhbFZhcnM6W119fSksci5hcmdtYXg9bih7YXJnczpbXCJpbmRleFwiLFwiYXJyYXlcIixcInNoYXBlXCJdLHByZTp7Ym9keTpcInt0aGlzX3Y9LUluZmluaXR5O3RoaXNfaT1faW5saW5lXzBfYXJnMl8uc2xpY2UoMCl9XCIsYXJnczpbe25hbWU6XCJfaW5saW5lXzBfYXJnMF9cIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOlwiX2lubGluZV8wX2FyZzFfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZTpcIl9pbmxpbmVfMF9hcmcyX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOltcInRoaXNfaVwiLFwidGhpc192XCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keTpcIntpZihfaW5saW5lXzFfYXJnMV8+dGhpc192KXt0aGlzX3Y9X2lubGluZV8xX2FyZzFfO2Zvcih2YXIgX2lubGluZV8xX2s9MDtfaW5saW5lXzFfazxfaW5saW5lXzFfYXJnMF8ubGVuZ3RoOysrX2lubGluZV8xX2spe3RoaXNfaVtfaW5saW5lXzFfa109X2lubGluZV8xX2FyZzBfW19pbmxpbmVfMV9rXX19fVwiLGFyZ3M6W3tuYW1lOlwiX2lubGluZV8xX2FyZzBfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfSx7bmFtZTpcIl9pbmxpbmVfMV9hcmcxX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn1dLHRoaXNWYXJzOltcInRoaXNfaVwiLFwidGhpc192XCJdLGxvY2FsVmFyczpbXCJfaW5saW5lXzFfa1wiXX0scG9zdDp7Ym9keTpcIntyZXR1cm4gdGhpc19pfVwiLGFyZ3M6W10sdGhpc1ZhcnM6W1widGhpc19pXCJdLGxvY2FsVmFyczpbXX19KSxyLnJhbmRvbT1vKHthcmdzOltcImFycmF5XCJdLHByZTp7YXJnczpbXSxib2R5OlwidGhpc19mPU1hdGgucmFuZG9tXCIsdGhpc1ZhcnM6W1widGhpc19mXCJdfSxib2R5OnthcmdzOltcImFcIl0sYm9keTpcImE9dGhpc19mKClcIix0aGlzVmFyczpbXCJ0aGlzX2ZcIl19LGZ1bmNOYW1lOlwicmFuZG9tXCJ9KSxyLmFzc2lnbj1vKHthcmdzOltcImFycmF5XCIsXCJhcnJheVwiXSxib2R5OnthcmdzOltcImFcIixcImJcIl0sYm9keTpcImE9YlwifSxmdW5jTmFtZTpcImFzc2lnblwifSksci5hc3NpZ25zPW8oe2FyZ3M6W1wiYXJyYXlcIixcInNjYWxhclwiXSxib2R5OnthcmdzOltcImFcIixcImJcIl0sYm9keTpcImE9YlwifSxmdW5jTmFtZTpcImFzc2lnbnNcIn0pLHIuZXF1YWxzPW4oe2FyZ3M6W1wiYXJyYXlcIixcImFycmF5XCJdLHByZTppLGJvZHk6e2FyZ3M6W3tuYW1lOlwieFwiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJ5XCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sYm9keTpcImlmKHghPT15KXtyZXR1cm4gZmFsc2V9XCIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOltdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXSxib2R5OlwicmV0dXJuIHRydWVcIn0sZnVuY05hbWU6XCJlcXVhbHNcIn0pfSx7XCJjd2lzZS1jb21waWxlclwiOjEzN31dLDQzODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJuZGFycmF5XCIpLGk9dChcIi4vZG9Db252ZXJ0LmpzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxhPXQsbz0xO0FycmF5LmlzQXJyYXkoYSk7KXIucHVzaChhLmxlbmd0aCksbyo9YS5sZW5ndGgsYT1hWzBdO3JldHVybiAwPT09ci5sZW5ndGg/bigpOihlfHwoZT1uKG5ldyBGbG9hdDY0QXJyYXkobykscikpLGkoZSx0KSxlKX19LHtcIi4vZG9Db252ZXJ0LmpzXCI6NDM5LG5kYXJyYXk6NDQzfV0sNDM5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoXCJjd2lzZS1jb21waWxlclwiKSh7YXJnczpbXCJhcnJheVwiLFwic2NhbGFyXCIsXCJpbmRleFwiXSxwcmU6e2JvZHk6XCJ7fVwiLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5Olwie1xcbnZhciBfaW5saW5lXzFfdj1faW5saW5lXzFfYXJnMV8sX2lubGluZV8xX2lcXG5mb3IoX2lubGluZV8xX2k9MDtfaW5saW5lXzFfaTxfaW5saW5lXzFfYXJnMl8ubGVuZ3RoLTE7KytfaW5saW5lXzFfaSkge1xcbl9pbmxpbmVfMV92PV9pbmxpbmVfMV92W19pbmxpbmVfMV9hcmcyX1tfaW5saW5lXzFfaV1dXFxufVxcbl9pbmxpbmVfMV9hcmcwXz1faW5saW5lXzFfdltfaW5saW5lXzFfYXJnMl9bX2lubGluZV8xX2FyZzJfLmxlbmd0aC0xXV1cXG59XCIsYXJnczpbe25hbWU6XCJfaW5saW5lXzFfYXJnMF9cIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xX2FyZzFfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfMV9hcmcyX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6NH1dLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXCJfaW5saW5lXzFfaVwiLFwiX2lubGluZV8xX3ZcIl19LHBvc3Q6e2JvZHk6XCJ7fVwiLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxmdW5jTmFtZTpcImNvbnZlcnRcIixibG9ja1NpemU6NjR9KX0se1wiY3dpc2UtY29tcGlsZXJcIjoxMzd9XSw0NDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwidHlwZWRhcnJheS1wb29sXCIpLGk9MzI7ZnVuY3Rpb24gYSh0KXtzd2l0Y2godCl7Y2FzZVwidWludDhcIjpyZXR1cm5bbi5tYWxsb2NVaW50OCxuLmZyZWVVaW50OF07Y2FzZVwidWludDE2XCI6cmV0dXJuW24ubWFsbG9jVWludDE2LG4uZnJlZVVpbnQxNl07Y2FzZVwidWludDMyXCI6cmV0dXJuW24ubWFsbG9jVWludDMyLG4uZnJlZVVpbnQzMl07Y2FzZVwiaW50OFwiOnJldHVybltuLm1hbGxvY0ludDgsbi5mcmVlSW50OF07Y2FzZVwiaW50MTZcIjpyZXR1cm5bbi5tYWxsb2NJbnQxNixuLmZyZWVJbnQxNl07Y2FzZVwiaW50MzJcIjpyZXR1cm5bbi5tYWxsb2NJbnQzMixuLmZyZWVJbnQzMl07Y2FzZVwiZmxvYXQzMlwiOnJldHVybltuLm1hbGxvY0Zsb2F0LG4uZnJlZUZsb2F0XTtjYXNlXCJmbG9hdDY0XCI6cmV0dXJuW24ubWFsbG9jRG91YmxlLG4uZnJlZURvdWJsZV07ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9W10scj0wO3I8dDsrK3IpZS5wdXNoKFwic1wiK3IpO2ZvcihyPTA7cjx0OysrcillLnB1c2goXCJuXCIrcik7Zm9yKHI9MTtyPHQ7KytyKWUucHVzaChcImRcIityKTtmb3Iocj0xO3I8dDsrK3IpZS5wdXNoKFwiZVwiK3IpO2ZvcihyPTE7cjx0OysrcillLnB1c2goXCJmXCIrcik7cmV0dXJuIGV9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W1wiJ3VzZSBzdHJpY3QnXCJdLG49W1wibmRhcnJheVNvcnRXcmFwcGVyXCIsdC5qb2luKFwiZFwiKSxlXS5qb2luKFwiXCIpO3IucHVzaChbXCJmdW5jdGlvbiBcIixuLFwiKFwiLFtcImFycmF5XCJdLmpvaW4oXCIsXCIpLFwiKXtcIl0uam9pbihcIlwiKSk7Zm9yKHZhciBzPVtcImRhdGE9YXJyYXkuZGF0YSxvZmZzZXQ9YXJyYXkub2Zmc2V0fDAsc2hhcGU9YXJyYXkuc2hhcGUsc3RyaWRlPWFycmF5LnN0cmlkZVwiXSxsPTA7bDx0Lmxlbmd0aDsrK2wpcy5wdXNoKFtcInNcIixsLFwiPXN0cmlkZVtcIixsLFwiXXwwLG5cIixsLFwiPXNoYXBlW1wiLGwsXCJdfDBcIl0uam9pbihcIlwiKSk7dmFyIGM9bmV3IEFycmF5KHQubGVuZ3RoKSx1PVtdO2ZvcihsPTA7bDx0Lmxlbmd0aDsrK2wpMCE9PShwPXRbbF0pJiYoMD09PXUubGVuZ3RoP2NbcF09XCIxXCI6Y1twXT11LmpvaW4oXCIqXCIpLHUucHVzaChcIm5cIitwKSk7dmFyIGg9LTEsZj0tMTtmb3IobD0wO2w8dC5sZW5ndGg7KytsKXt2YXIgcCxkPXRbbF07MCE9PWQmJihoPjA/cy5wdXNoKFtcImRcIixkLFwiPXNcIixkLFwiLWRcIixoLFwiKm5cIixoXS5qb2luKFwiXCIpKTpzLnB1c2goW1wiZFwiLGQsXCI9c1wiLGRdLmpvaW4oXCJcIikpLGg9ZCksMCE9KHA9dC5sZW5ndGgtMS1sKSYmKGY+MD9zLnB1c2goW1wiZVwiLHAsXCI9c1wiLHAsXCItZVwiLGYsXCIqblwiLGYsXCIsZlwiLHAsXCI9XCIsY1twXSxcIi1mXCIsZixcIipuXCIsZl0uam9pbihcIlwiKSk6cy5wdXNoKFtcImVcIixwLFwiPXNcIixwLFwiLGZcIixwLFwiPVwiLGNbcF1dLmpvaW4oXCJcIikpLGY9cCl9ci5wdXNoKFwidmFyIFwiK3Muam9pbihcIixcIikpO3ZhciBnPVtcIjBcIixcIm4wLTFcIixcImRhdGFcIixcIm9mZnNldFwiXS5jb25jYXQobyh0Lmxlbmd0aCkpO3IucHVzaChbXCJpZihuMDw9XCIsaSxcIil7XCIsXCJpbnNlcnRpb25Tb3J0KFwiLGcuam9pbihcIixcIiksXCIpfWVsc2V7XCIsXCJxdWlja1NvcnQoXCIsZy5qb2luKFwiLFwiKSxcIil9XCJdLmpvaW4oXCJcIikpLHIucHVzaChcIn1yZXR1cm4gXCIrbik7dmFyIHY9bmV3IEZ1bmN0aW9uKFwiaW5zZXJ0aW9uU29ydFwiLFwicXVpY2tTb3J0XCIsci5qb2luKFwiXFxuXCIpKSxtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W1wiJ3VzZSBzdHJpY3QnXCJdLG49W1wibmRhcnJheUluc2VydGlvblNvcnRcIix0LmpvaW4oXCJkXCIpLGVdLmpvaW4oXCJcIiksaT1bXCJsZWZ0XCIsXCJyaWdodFwiLFwiZGF0YVwiLFwib2Zmc2V0XCJdLmNvbmNhdChvKHQubGVuZ3RoKSkscz1hKGUpLGw9W1wiaSxqLGNwdHIscHRyPWxlZnQqczArb2Zmc2V0XCJdO2lmKHQubGVuZ3RoPjEpe2Zvcih2YXIgYz1bXSx1PTE7dTx0Lmxlbmd0aDsrK3UpbC5wdXNoKFwiaVwiK3UpLGMucHVzaChcIm5cIit1KTtzP2wucHVzaChcInNjcmF0Y2g9bWFsbG9jKFwiK2Muam9pbihcIipcIikrXCIpXCIpOmwucHVzaChcInNjcmF0Y2g9bmV3IEFycmF5KFwiK2Muam9pbihcIipcIikrXCIpXCIpLGwucHVzaChcImRwdHJcIixcInNwdHJcIixcImFcIixcImJcIil9ZWxzZSBsLnB1c2goXCJzY3JhdGNoXCIpO2Z1bmN0aW9uIGgodCl7cmV0dXJuXCJnZW5lcmljXCI9PT1lP1tcImRhdGEuZ2V0KFwiLHQsXCIpXCJdLmpvaW4oXCJcIik6W1wiZGF0YVtcIix0LFwiXVwiXS5qb2luKFwiXCIpfWZ1bmN0aW9uIGYodCxyKXtyZXR1cm5cImdlbmVyaWNcIj09PWU/W1wiZGF0YS5zZXQoXCIsdCxcIixcIixyLFwiKVwiXS5qb2luKFwiXCIpOltcImRhdGFbXCIsdCxcIl09XCIscl0uam9pbihcIlwiKX1pZihyLnB1c2goW1wiZnVuY3Rpb24gXCIsbixcIihcIixpLmpvaW4oXCIsXCIpLFwiKXt2YXIgXCIsbC5qb2luKFwiLFwiKV0uam9pbihcIlwiKSxcImZvcihpPWxlZnQrMTtpPD1yaWdodDsrK2kpe1wiLFwiaj1pO3B0cis9czBcIixcImNwdHI9cHRyXCIpLHQubGVuZ3RoPjEpe2ZvcihyLnB1c2goXCJkcHRyPTA7c3B0cj1wdHJcIiksdT10Lmxlbmd0aC0xO3U+PTA7LS11KTAhPT0ocD10W3VdKSYmci5wdXNoKFtcImZvcihpXCIscCxcIj0wO2lcIixwLFwiPG5cIixwLFwiOysraVwiLHAsXCIpe1wiXS5qb2luKFwiXCIpKTtmb3Ioci5wdXNoKFwic2NyYXRjaFtkcHRyKytdPVwiLGgoXCJzcHRyXCIpKSx1PTA7dTx0Lmxlbmd0aDsrK3UpMCE9PShwPXRbdV0pJiZyLnB1c2goXCJzcHRyKz1kXCIrcCxcIn1cIik7Zm9yKHIucHVzaChcIl9fZzp3aGlsZShqLS1cXHgzZWxlZnQpe1wiLFwiZHB0cj0wXCIsXCJzcHRyPWNwdHItczBcIiksdT0xO3U8dC5sZW5ndGg7Kyt1KTE9PT11JiZyLnB1c2goXCJfX2w6XCIpLHIucHVzaChbXCJmb3IoaVwiLHUsXCI9MDtpXCIsdSxcIjxuXCIsdSxcIjsrK2lcIix1LFwiKXtcIl0uam9pbihcIlwiKSk7Zm9yKHIucHVzaChbXCJhPVwiLGgoXCJzcHRyXCIpLFwiXFxuYj1zY3JhdGNoW2RwdHJdXFxuaWYoYTxiKXticmVhayBfX2d9XFxuaWYoYT5iKXticmVhayBfX2x9XCJdLmpvaW4oXCJcIikpLHU9dC5sZW5ndGgtMTt1Pj0xOy0tdSlyLnB1c2goXCJzcHRyKz1lXCIrdSxcImRwdHIrPWZcIit1LFwifVwiKTtmb3Ioci5wdXNoKFwiZHB0cj1jcHRyO3NwdHI9Y3B0ci1zMFwiKSx1PXQubGVuZ3RoLTE7dT49MDstLXUpMCE9PShwPXRbdV0pJiZyLnB1c2goW1wiZm9yKGlcIixwLFwiPTA7aVwiLHAsXCI8blwiLHAsXCI7KytpXCIscCxcIil7XCJdLmpvaW4oXCJcIikpO2ZvcihyLnB1c2goZihcImRwdHJcIixoKFwic3B0clwiKSkpLHU9MDt1PHQubGVuZ3RoOysrdSkwIT09KHA9dFt1XSkmJnIucHVzaChbXCJkcHRyKz1kXCIscCxcIjtzcHRyKz1kXCIscF0uam9pbihcIlwiKSxcIn1cIik7Zm9yKHIucHVzaChcImNwdHItPXMwXFxufVwiKSxyLnB1c2goXCJkcHRyPWNwdHI7c3B0cj0wXCIpLHU9dC5sZW5ndGgtMTt1Pj0wOy0tdSkwIT09KHA9dFt1XSkmJnIucHVzaChbXCJmb3IoaVwiLHAsXCI9MDtpXCIscCxcIjxuXCIscCxcIjsrK2lcIixwLFwiKXtcIl0uam9pbihcIlwiKSk7Zm9yKHIucHVzaChmKFwiZHB0clwiLFwic2NyYXRjaFtzcHRyKytdXCIpKSx1PTA7dTx0Lmxlbmd0aDsrK3Upe3ZhciBwOzAhPT0ocD10W3VdKSYmci5wdXNoKFwiZHB0cis9ZFwiK3AsXCJ9XCIpfX1lbHNlIHIucHVzaChcInNjcmF0Y2g9XCIraChcInB0clwiKSxcIndoaWxlKChqLS1cXHgzZWxlZnQpJiYoXCIraChcImNwdHItczBcIikrXCI+c2NyYXRjaCkpe1wiLGYoXCJjcHRyXCIsaChcImNwdHItczBcIikpLFwiY3B0ci09czBcIixcIn1cIixmKFwiY3B0clwiLFwic2NyYXRjaFwiKSk7cmV0dXJuIHIucHVzaChcIn1cIiksdC5sZW5ndGg+MSYmcyYmci5wdXNoKFwiZnJlZShzY3JhdGNoKVwiKSxyLnB1c2goXCJ9IHJldHVybiBcIituKSxzP25ldyBGdW5jdGlvbihcIm1hbGxvY1wiLFwiZnJlZVwiLHIuam9pbihcIlxcblwiKSkoc1swXSxzWzFdKTpuZXcgRnVuY3Rpb24oci5qb2luKFwiXFxuXCIpKSgpfSh0LGUpLHk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVtcIid1c2Ugc3RyaWN0J1wiXSxzPVtcIm5kYXJyYXlRdWlja1NvcnRcIix0LmpvaW4oXCJkXCIpLGVdLmpvaW4oXCJcIiksbD1bXCJsZWZ0XCIsXCJyaWdodFwiLFwiZGF0YVwiLFwib2Zmc2V0XCJdLmNvbmNhdChvKHQubGVuZ3RoKSksYz1hKGUpLHU9MDtuLnB1c2goW1wiZnVuY3Rpb24gXCIscyxcIihcIixsLmpvaW4oXCIsXCIpLFwiKXtcIl0uam9pbihcIlwiKSk7dmFyIGg9W1wic2l4dGg9KChyaWdodC1sZWZ0KzEpLzYpfDBcIixcImluZGV4MT1sZWZ0K3NpeHRoXCIsXCJpbmRleDU9cmlnaHQtc2l4dGhcIixcImluZGV4Mz0obGVmdCtyaWdodCk+PjFcIixcImluZGV4Mj1pbmRleDMtc2l4dGhcIixcImluZGV4ND1pbmRleDMrc2l4dGhcIixcImVsMT1pbmRleDFcIixcImVsMj1pbmRleDJcIixcImVsMz1pbmRleDNcIixcImVsND1pbmRleDRcIixcImVsNT1pbmRleDVcIixcImxlc3M9bGVmdCsxXCIsXCJncmVhdD1yaWdodC0xXCIsXCJwaXZvdHNfYXJlX2VxdWFsPXRydWVcIixcInRtcFwiLFwidG1wMFwiLFwieFwiLFwieVwiLFwielwiLFwia1wiLFwicHRyMFwiLFwicHRyMVwiLFwicHRyMlwiLFwiY29tcF9waXZvdDE9MFwiLFwiY29tcF9waXZvdDI9MFwiLFwiY29tcD0wXCJdO2lmKHQubGVuZ3RoPjEpe2Zvcih2YXIgZj1bXSxwPTE7cDx0Lmxlbmd0aDsrK3ApZi5wdXNoKFwiblwiK3ApLGgucHVzaChcImlcIitwKTtmb3IocD0wO3A8ODsrK3ApaC5wdXNoKFwiYl9wdHJcIitwKTtoLnB1c2goXCJwdHIzXCIsXCJwdHI0XCIsXCJwdHI1XCIsXCJwdHI2XCIsXCJwdHI3XCIsXCJwaXZvdF9wdHJcIixcInB0cl9zaGlmdFwiLFwiZWxlbWVudFNpemU9XCIrZi5qb2luKFwiKlwiKSksYz9oLnB1c2goXCJwaXZvdDE9bWFsbG9jKGVsZW1lbnRTaXplKVwiLFwicGl2b3QyPW1hbGxvYyhlbGVtZW50U2l6ZSlcIik6aC5wdXNoKFwicGl2b3QxPW5ldyBBcnJheShlbGVtZW50U2l6ZSkscGl2b3QyPW5ldyBBcnJheShlbGVtZW50U2l6ZSlcIil9ZWxzZSBoLnB1c2goXCJwaXZvdDFcIixcInBpdm90MlwiKTtmdW5jdGlvbiBkKHQpe3JldHVybltcIihvZmZzZXQrXCIsdCxcIipzMClcIl0uam9pbihcIlwiKX1mdW5jdGlvbiBnKHQpe3JldHVyblwiZ2VuZXJpY1wiPT09ZT9bXCJkYXRhLmdldChcIix0LFwiKVwiXS5qb2luKFwiXCIpOltcImRhdGFbXCIsdCxcIl1cIl0uam9pbihcIlwiKX1mdW5jdGlvbiB2KHQscil7cmV0dXJuXCJnZW5lcmljXCI9PT1lP1tcImRhdGEuc2V0KFwiLHQsXCIsXCIscixcIilcIl0uam9pbihcIlwiKTpbXCJkYXRhW1wiLHQsXCJdPVwiLHJdLmpvaW4oXCJcIil9ZnVuY3Rpb24gbShlLHIsaSl7aWYoMT09PWUubGVuZ3RoKW4ucHVzaChcInB0cjA9XCIrZChlWzBdKSk7ZWxzZSBmb3IodmFyIGE9MDthPGUubGVuZ3RoOysrYSluLnB1c2goW1wiYl9wdHJcIixhLFwiPXMwKlwiLGVbYV1dLmpvaW4oXCJcIikpO2ZvcihyJiZuLnB1c2goXCJwaXZvdF9wdHI9MFwiKSxuLnB1c2goXCJwdHJfc2hpZnQ9b2Zmc2V0XCIpLGE9dC5sZW5ndGgtMTthPj0wOy0tYSkwIT09KG89dFthXSkmJm4ucHVzaChbXCJmb3IoaVwiLG8sXCI9MDtpXCIsbyxcIjxuXCIsbyxcIjsrK2lcIixvLFwiKXtcIl0uam9pbihcIlwiKSk7aWYoZS5sZW5ndGg+MSlmb3IoYT0wO2E8ZS5sZW5ndGg7KythKW4ucHVzaChbXCJwdHJcIixhLFwiPWJfcHRyXCIsYSxcIitwdHJfc2hpZnRcIl0uam9pbihcIlwiKSk7Zm9yKG4ucHVzaChpKSxyJiZuLnB1c2goXCIrK3Bpdm90X3B0clwiKSxhPTA7YTx0Lmxlbmd0aDsrK2Epe3ZhciBvOzAhPT0obz10W2FdKSYmKGUubGVuZ3RoPjE/bi5wdXNoKFwicHRyX3NoaWZ0Kz1kXCIrbyk6bi5wdXNoKFwicHRyMCs9ZFwiK28pLG4ucHVzaChcIn1cIikpfX1mdW5jdGlvbiB5KGUscixpLGEpe2lmKDE9PT1yLmxlbmd0aCluLnB1c2goXCJwdHIwPVwiK2QoclswXSkpO2Vsc2V7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDsrK28pbi5wdXNoKFtcImJfcHRyXCIsbyxcIj1zMCpcIixyW29dXS5qb2luKFwiXCIpKTtuLnB1c2goXCJwdHJfc2hpZnQ9b2Zmc2V0XCIpfWZvcihpJiZuLnB1c2goXCJwaXZvdF9wdHI9MFwiKSxlJiZuLnB1c2goZStcIjpcIiksbz0xO288dC5sZW5ndGg7KytvKW4ucHVzaChbXCJmb3IoaVwiLG8sXCI9MDtpXCIsbyxcIjxuXCIsbyxcIjsrK2lcIixvLFwiKXtcIl0uam9pbihcIlwiKSk7aWYoci5sZW5ndGg+MSlmb3Iobz0wO288ci5sZW5ndGg7KytvKW4ucHVzaChbXCJwdHJcIixvLFwiPWJfcHRyXCIsbyxcIitwdHJfc2hpZnRcIl0uam9pbihcIlwiKSk7Zm9yKG4ucHVzaChhKSxvPXQubGVuZ3RoLTE7bz49MTstLW8paSYmbi5wdXNoKFwicGl2b3RfcHRyKz1mXCIrbyksci5sZW5ndGg+MT9uLnB1c2goXCJwdHJfc2hpZnQrPWVcIitvKTpuLnB1c2goXCJwdHIwKz1lXCIrbyksbi5wdXNoKFwifVwiKX1mdW5jdGlvbiB4KCl7dC5sZW5ndGg+MSYmYyYmbi5wdXNoKFwiZnJlZShwaXZvdDEpXCIsXCJmcmVlKHBpdm90MilcIil9ZnVuY3Rpb24gYihlLHIpe3ZhciBpPVwiZWxcIitlLGE9XCJlbFwiK3I7aWYodC5sZW5ndGg+MSl7dmFyIG89XCJfX2xcIisgKyt1O3kobyxbaSxhXSwhMSxbXCJjb21wPVwiLGcoXCJwdHIwXCIpLFwiLVwiLGcoXCJwdHIxXCIpLFwiXFxuXCIsXCJpZihjb21wPjApe3RtcDA9XCIsaSxcIjtcIixpLFwiPVwiLGEsXCI7XCIsYSxcIj10bXAwO2JyZWFrIFwiLG8sXCJ9XFxuXCIsXCJpZihjb21wPDApe2JyZWFrIFwiLG8sXCJ9XCJdLmpvaW4oXCJcIikpfWVsc2Ugbi5wdXNoKFtcImlmKFwiLGcoZChpKSksXCI+XCIsZyhkKGEpKSxcIil7dG1wMD1cIixpLFwiO1wiLGksXCI9XCIsYSxcIjtcIixhLFwiPXRtcDB9XCJdLmpvaW4oXCJcIikpfWZ1bmN0aW9uIF8oZSxyKXt0Lmxlbmd0aD4xP20oW2Uscl0sITEsdihcInB0cjBcIixnKFwicHRyMVwiKSkpOm4ucHVzaCh2KGQoZSksZyhkKHIpKSkpfWZ1bmN0aW9uIHcoZSxyLGkpe2lmKHQubGVuZ3RoPjEpe3ZhciBhPVwiX19sXCIrICsrdTt5KGEsW3JdLCEwLFtlLFwiPVwiLGcoXCJwdHIwXCIpLFwiLXBpdm90XCIsaSxcIltwaXZvdF9wdHJdXFxuXCIsXCJpZihcIixlLFwiIT09MCl7YnJlYWsgXCIsYSxcIn1cIl0uam9pbihcIlwiKSl9ZWxzZSBuLnB1c2goW2UsXCI9XCIsZyhkKHIpKSxcIi1waXZvdFwiLGldLmpvaW4oXCJcIikpfWZ1bmN0aW9uIGsoZSxyKXt0Lmxlbmd0aD4xP20oW2Uscl0sITEsW1widG1wPVwiLGcoXCJwdHIwXCIpLFwiXFxuXCIsdihcInB0cjBcIixnKFwicHRyMVwiKSksXCJcXG5cIix2KFwicHRyMVwiLFwidG1wXCIpXS5qb2luKFwiXCIpKTpuLnB1c2goW1wicHRyMD1cIixkKGUpLFwiXFxuXCIsXCJwdHIxPVwiLGQociksXCJcXG5cIixcInRtcD1cIixnKFwicHRyMFwiKSxcIlxcblwiLHYoXCJwdHIwXCIsZyhcInB0cjFcIikpLFwiXFxuXCIsdihcInB0cjFcIixcInRtcFwiKV0uam9pbihcIlwiKSl9ZnVuY3Rpb24gQShlLHIsaSl7dC5sZW5ndGg+MT8obShbZSxyLGldLCExLFtcInRtcD1cIixnKFwicHRyMFwiKSxcIlxcblwiLHYoXCJwdHIwXCIsZyhcInB0cjFcIikpLFwiXFxuXCIsdihcInB0cjFcIixnKFwicHRyMlwiKSksXCJcXG5cIix2KFwicHRyMlwiLFwidG1wXCIpXS5qb2luKFwiXCIpKSxuLnB1c2goXCIrK1wiK3IsXCItLVwiK2kpKTpuLnB1c2goW1wicHRyMD1cIixkKGUpLFwiXFxuXCIsXCJwdHIxPVwiLGQociksXCJcXG5cIixcInB0cjI9XCIsZChpKSxcIlxcblwiLFwiKytcIixyLFwiXFxuXCIsXCItLVwiLGksXCJcXG5cIixcInRtcD1cIixnKFwicHRyMFwiKSxcIlxcblwiLHYoXCJwdHIwXCIsZyhcInB0cjFcIikpLFwiXFxuXCIsdihcInB0cjFcIixnKFwicHRyMlwiKSksXCJcXG5cIix2KFwicHRyMlwiLFwidG1wXCIpXS5qb2luKFwiXCIpKX1mdW5jdGlvbiBUKHQsZSl7ayh0LGUpLG4ucHVzaChcIi0tXCIrZSl9ZnVuY3Rpb24gTShlLHIsaSl7dC5sZW5ndGg+MT9tKFtlLHJdLCEwLFt2KFwicHRyMFwiLGcoXCJwdHIxXCIpKSxcIlxcblwiLHYoXCJwdHIxXCIsW1wicGl2b3RcIixpLFwiW3Bpdm90X3B0cl1cIl0uam9pbihcIlwiKSldLmpvaW4oXCJcIikpOm4ucHVzaCh2KGQoZSksZyhkKHIpKSksdihkKHIpLFwicGl2b3RcIitpKSl9ZnVuY3Rpb24gUyhlLHIpe24ucHVzaChbXCJpZigoXCIscixcIi1cIixlLFwiKTw9XCIsaSxcIil7XFxuXCIsXCJpbnNlcnRpb25Tb3J0KFwiLGUsXCIsXCIscixcIixkYXRhLG9mZnNldCxcIixvKHQubGVuZ3RoKS5qb2luKFwiLFwiKSxcIilcXG5cIixcIn1lbHNle1xcblwiLHMsXCIoXCIsZSxcIixcIixyLFwiLGRhdGEsb2Zmc2V0LFwiLG8odC5sZW5ndGgpLmpvaW4oXCIsXCIpLFwiKVxcblwiLFwifVwiXS5qb2luKFwiXCIpKX1mdW5jdGlvbiBFKGUscixpKXt0Lmxlbmd0aD4xPyhuLnB1c2goW1wiX19sXCIsKyt1LFwiOndoaWxlKHRydWUpe1wiXS5qb2luKFwiXCIpKSxtKFtlXSwhMCxbXCJpZihcIixnKFwicHRyMFwiKSxcIiE9PXBpdm90XCIscixcIltwaXZvdF9wdHJdKXticmVhayBfX2xcIix1LFwifVwiXS5qb2luKFwiXCIpKSxuLnB1c2goaSxcIn1cIikpOm4ucHVzaChbXCJ3aGlsZShcIixnKGQoZSkpLFwiPT09cGl2b3RcIixyLFwiKXtcIixpLFwifVwiXS5qb2luKFwiXCIpKX1yZXR1cm4gbi5wdXNoKFwidmFyIFwiK2guam9pbihcIixcIikpLGIoMSwyKSxiKDQsNSksYigxLDMpLGIoMiwzKSxiKDEsNCksYigzLDQpLGIoMiw1KSxiKDIsMyksYig0LDUpLHQubGVuZ3RoPjE/bShbXCJlbDFcIixcImVsMlwiLFwiZWwzXCIsXCJlbDRcIixcImVsNVwiLFwiaW5kZXgxXCIsXCJpbmRleDNcIixcImluZGV4NVwiXSwhMCxbXCJwaXZvdDFbcGl2b3RfcHRyXT1cIixnKFwicHRyMVwiKSxcIlxcblwiLFwicGl2b3QyW3Bpdm90X3B0cl09XCIsZyhcInB0cjNcIiksXCJcXG5cIixcInBpdm90c19hcmVfZXF1YWw9cGl2b3RzX2FyZV9lcXVhbCYmKHBpdm90MVtwaXZvdF9wdHJdPT09cGl2b3QyW3Bpdm90X3B0cl0pXFxuXCIsXCJ4PVwiLGcoXCJwdHIwXCIpLFwiXFxuXCIsXCJ5PVwiLGcoXCJwdHIyXCIpLFwiXFxuXCIsXCJ6PVwiLGcoXCJwdHI0XCIpLFwiXFxuXCIsdihcInB0cjVcIixcInhcIiksXCJcXG5cIix2KFwicHRyNlwiLFwieVwiKSxcIlxcblwiLHYoXCJwdHI3XCIsXCJ6XCIpXS5qb2luKFwiXCIpKTpuLnB1c2goW1wicGl2b3QxPVwiLGcoZChcImVsMlwiKSksXCJcXG5cIixcInBpdm90Mj1cIixnKGQoXCJlbDRcIikpLFwiXFxuXCIsXCJwaXZvdHNfYXJlX2VxdWFsPXBpdm90MT09PXBpdm90MlxcblwiLFwieD1cIixnKGQoXCJlbDFcIikpLFwiXFxuXCIsXCJ5PVwiLGcoZChcImVsM1wiKSksXCJcXG5cIixcIno9XCIsZyhkKFwiZWw1XCIpKSxcIlxcblwiLHYoZChcImluZGV4MVwiKSxcInhcIiksXCJcXG5cIix2KGQoXCJpbmRleDNcIiksXCJ5XCIpLFwiXFxuXCIsdihkKFwiaW5kZXg1XCIpLFwielwiKV0uam9pbihcIlwiKSksXyhcImluZGV4MlwiLFwibGVmdFwiKSxfKFwiaW5kZXg0XCIsXCJyaWdodFwiKSxuLnB1c2goXCJpZihwaXZvdHNfYXJlX2VxdWFsKXtcIiksbi5wdXNoKFwiZm9yKGs9bGVzcztrPD1ncmVhdDsrK2spe1wiKSx3KFwiY29tcFwiLFwia1wiLDEpLG4ucHVzaChcImlmKGNvbXA9PT0wKXtjb250aW51ZX1cIiksbi5wdXNoKFwiaWYoY29tcDwwKXtcIiksbi5wdXNoKFwiaWYoayE9PWxlc3Mpe1wiKSxrKFwia1wiLFwibGVzc1wiKSxuLnB1c2goXCJ9XCIpLG4ucHVzaChcIisrbGVzc1wiKSxuLnB1c2goXCJ9ZWxzZXtcIiksbi5wdXNoKFwid2hpbGUodHJ1ZSl7XCIpLHcoXCJjb21wXCIsXCJncmVhdFwiLDEpLG4ucHVzaChcImlmKGNvbXA+MCl7XCIpLG4ucHVzaChcImdyZWF0LS1cIiksbi5wdXNoKFwifWVsc2UgaWYoY29tcDwwKXtcIiksQShcImtcIixcImxlc3NcIixcImdyZWF0XCIpLG4ucHVzaChcImJyZWFrXCIpLG4ucHVzaChcIn1lbHNle1wiKSxUKFwia1wiLFwiZ3JlYXRcIiksbi5wdXNoKFwiYnJlYWtcIiksbi5wdXNoKFwifVwiKSxuLnB1c2goXCJ9XCIpLG4ucHVzaChcIn1cIiksbi5wdXNoKFwifVwiKSxuLnB1c2goXCJ9ZWxzZXtcIiksbi5wdXNoKFwiZm9yKGs9bGVzcztrPD1ncmVhdDsrK2spe1wiKSx3KFwiY29tcF9waXZvdDFcIixcImtcIiwxKSxuLnB1c2goXCJpZihjb21wX3Bpdm90MTwwKXtcIiksbi5wdXNoKFwiaWYoayE9PWxlc3Mpe1wiKSxrKFwia1wiLFwibGVzc1wiKSxuLnB1c2goXCJ9XCIpLG4ucHVzaChcIisrbGVzc1wiKSxuLnB1c2goXCJ9ZWxzZXtcIiksdyhcImNvbXBfcGl2b3QyXCIsXCJrXCIsMiksbi5wdXNoKFwiaWYoY29tcF9waXZvdDI+MCl7XCIpLG4ucHVzaChcIndoaWxlKHRydWUpe1wiKSx3KFwiY29tcFwiLFwiZ3JlYXRcIiwyKSxuLnB1c2goXCJpZihjb21wPjApe1wiKSxuLnB1c2goXCJpZigtLWdyZWF0PGspe2JyZWFrfVwiKSxuLnB1c2goXCJjb250aW51ZVwiKSxuLnB1c2goXCJ9ZWxzZXtcIiksdyhcImNvbXBcIixcImdyZWF0XCIsMSksbi5wdXNoKFwiaWYoY29tcDwwKXtcIiksQShcImtcIixcImxlc3NcIixcImdyZWF0XCIpLG4ucHVzaChcIn1lbHNle1wiKSxUKFwia1wiLFwiZ3JlYXRcIiksbi5wdXNoKFwifVwiKSxuLnB1c2goXCJicmVha1wiKSxuLnB1c2goXCJ9XCIpLG4ucHVzaChcIn1cIiksbi5wdXNoKFwifVwiKSxuLnB1c2goXCJ9XCIpLG4ucHVzaChcIn1cIiksbi5wdXNoKFwifVwiKSxNKFwibGVmdFwiLFwiKGxlc3MtMSlcIiwxKSxNKFwicmlnaHRcIixcIihncmVhdCsxKVwiLDIpLFMoXCJsZWZ0XCIsXCIobGVzcy0yKVwiKSxTKFwiKGdyZWF0KzIpXCIsXCJyaWdodFwiKSxuLnB1c2goXCJpZihwaXZvdHNfYXJlX2VxdWFsKXtcIikseCgpLG4ucHVzaChcInJldHVyblwiKSxuLnB1c2goXCJ9XCIpLG4ucHVzaChcImlmKGxlc3M8aW5kZXgxJiZncmVhdD5pbmRleDUpe1wiKSxFKFwibGVzc1wiLDEsXCIrK2xlc3NcIiksRShcImdyZWF0XCIsMixcIi0tZ3JlYXRcIiksbi5wdXNoKFwiZm9yKGs9bGVzcztrPD1ncmVhdDsrK2spe1wiKSx3KFwiY29tcF9waXZvdDFcIixcImtcIiwxKSxuLnB1c2goXCJpZihjb21wX3Bpdm90MT09PTApe1wiKSxuLnB1c2goXCJpZihrIT09bGVzcyl7XCIpLGsoXCJrXCIsXCJsZXNzXCIpLG4ucHVzaChcIn1cIiksbi5wdXNoKFwiKytsZXNzXCIpLG4ucHVzaChcIn1lbHNle1wiKSx3KFwiY29tcF9waXZvdDJcIixcImtcIiwyKSxuLnB1c2goXCJpZihjb21wX3Bpdm90Mj09PTApe1wiKSxuLnB1c2goXCJ3aGlsZSh0cnVlKXtcIiksdyhcImNvbXBcIixcImdyZWF0XCIsMiksbi5wdXNoKFwiaWYoY29tcD09PTApe1wiKSxuLnB1c2goXCJpZigtLWdyZWF0PGspe2JyZWFrfVwiKSxuLnB1c2goXCJjb250aW51ZVwiKSxuLnB1c2goXCJ9ZWxzZXtcIiksdyhcImNvbXBcIixcImdyZWF0XCIsMSksbi5wdXNoKFwiaWYoY29tcDwwKXtcIiksQShcImtcIixcImxlc3NcIixcImdyZWF0XCIpLG4ucHVzaChcIn1lbHNle1wiKSxUKFwia1wiLFwiZ3JlYXRcIiksbi5wdXNoKFwifVwiKSxuLnB1c2goXCJicmVha1wiKSxuLnB1c2goXCJ9XCIpLG4ucHVzaChcIn1cIiksbi5wdXNoKFwifVwiKSxuLnB1c2goXCJ9XCIpLG4ucHVzaChcIn1cIiksbi5wdXNoKFwifVwiKSx4KCksUyhcImxlc3NcIixcImdyZWF0XCIpLG4ucHVzaChcIn1yZXR1cm4gXCIrcyksdC5sZW5ndGg+MSYmYz9uZXcgRnVuY3Rpb24oXCJpbnNlcnRpb25Tb3J0XCIsXCJtYWxsb2NcIixcImZyZWVcIixuLmpvaW4oXCJcXG5cIikpKHIsY1swXSxjWzFdKTpuZXcgRnVuY3Rpb24oXCJpbnNlcnRpb25Tb3J0XCIsbi5qb2luKFwiXFxuXCIpKShyKX0odCxlLG0pO3JldHVybiB2KG0seSl9fSx7XCJ0eXBlZGFycmF5LXBvb2xcIjo1MzB9XSw0NDE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9saWIvY29tcGlsZV9zb3J0LmpzXCIpLGk9e307ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQub3JkZXIscj10LmR0eXBlLGE9W2Uscl0uam9pbihcIjpcIiksbz1pW2FdO3JldHVybiBvfHwoaVthXT1vPW4oZSxyKSksbyh0KSx0fX0se1wiLi9saWIvY29tcGlsZV9zb3J0LmpzXCI6NDQwfV0sNDQyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIm5kYXJyYXktbGluZWFyLWludGVycG9sYXRlXCIpLGk9dChcImN3aXNlL2xpYi93cmFwcGVyXCIpKHthcmdzOltcImluZGV4XCIsXCJhcnJheVwiLFwic2NhbGFyXCIsXCJzY2FsYXJcIixcInNjYWxhclwiXSxwcmU6e2JvZHk6XCJ7dGhpc193YXJwZWQ9bmV3IEFycmF5KF9pbmxpbmVfM19hcmc0Xyl9XCIsYXJnczpbe25hbWU6XCJfaW5saW5lXzNfYXJnMF9cIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOlwiX2lubGluZV8zX2FyZzFfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZTpcIl9pbmxpbmVfM19hcmcyX1wiLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6XCJfaW5saW5lXzNfYXJnM19cIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOlwiX2lubGluZV8zX2FyZzRfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sdGhpc1ZhcnM6W1widGhpc193YXJwZWRcIl0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5Olwie19pbmxpbmVfNF9hcmcyXyh0aGlzX3dhcnBlZCxfaW5saW5lXzRfYXJnMF8pLF9pbmxpbmVfNF9hcmcxXz1faW5saW5lXzRfYXJnM18uYXBwbHkodm9pZCAwLHRoaXNfd2FycGVkKX1cIixhcmdzOlt7bmFtZTpcIl9pbmxpbmVfNF9hcmcwX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzRfYXJnMV9cIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV80X2FyZzJfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfNF9hcmczX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzRfYXJnNF9cIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9XSx0aGlzVmFyczpbXCJ0aGlzX3dhcnBlZFwiXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6XCJ7fVwiLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxkZWJ1ZzohMSxmdW5jTmFtZTpcIndhcnBORFwiLGJsb2NrU2l6ZTo2NH0pLGE9dChcImN3aXNlL2xpYi93cmFwcGVyXCIpKHthcmdzOltcImluZGV4XCIsXCJhcnJheVwiLFwic2NhbGFyXCIsXCJzY2FsYXJcIixcInNjYWxhclwiXSxwcmU6e2JvZHk6XCJ7dGhpc193YXJwZWQ9WzBdfVwiLGFyZ3M6W10sdGhpc1ZhcnM6W1widGhpc193YXJwZWRcIl0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5Olwie19pbmxpbmVfN19hcmcyXyh0aGlzX3dhcnBlZCxfaW5saW5lXzdfYXJnMF8pLF9pbmxpbmVfN19hcmcxXz1faW5saW5lXzdfYXJnM18oX2lubGluZV83X2FyZzRfLHRoaXNfd2FycGVkWzBdKX1cIixhcmdzOlt7bmFtZTpcIl9pbmxpbmVfN19hcmcwX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzdfYXJnMV9cIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV83X2FyZzJfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfN19hcmczX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzdfYXJnNF9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbXCJ0aGlzX3dhcnBlZFwiXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6XCJ7fVwiLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxkZWJ1ZzohMSxmdW5jTmFtZTpcIndhcnAxRFwiLGJsb2NrU2l6ZTo2NH0pLG89dChcImN3aXNlL2xpYi93cmFwcGVyXCIpKHthcmdzOltcImluZGV4XCIsXCJhcnJheVwiLFwic2NhbGFyXCIsXCJzY2FsYXJcIixcInNjYWxhclwiXSxwcmU6e2JvZHk6XCJ7dGhpc193YXJwZWQ9WzAsMF19XCIsYXJnczpbXSx0aGlzVmFyczpbXCJ0aGlzX3dhcnBlZFwiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6XCJ7X2lubGluZV8xMF9hcmcyXyh0aGlzX3dhcnBlZCxfaW5saW5lXzEwX2FyZzBfKSxfaW5saW5lXzEwX2FyZzFfPV9pbmxpbmVfMTBfYXJnM18oX2lubGluZV8xMF9hcmc0Xyx0aGlzX3dhcnBlZFswXSx0aGlzX3dhcnBlZFsxXSl9XCIsYXJnczpbe25hbWU6XCJfaW5saW5lXzEwX2FyZzBfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfMTBfYXJnMV9cIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xMF9hcmcyX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzEwX2FyZzNfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfMTBfYXJnNF9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbXCJ0aGlzX3dhcnBlZFwiXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6XCJ7fVwiLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxkZWJ1ZzohMSxmdW5jTmFtZTpcIndhcnAyRFwiLGJsb2NrU2l6ZTo2NH0pLHM9dChcImN3aXNlL2xpYi93cmFwcGVyXCIpKHthcmdzOltcImluZGV4XCIsXCJhcnJheVwiLFwic2NhbGFyXCIsXCJzY2FsYXJcIixcInNjYWxhclwiXSxwcmU6e2JvZHk6XCJ7dGhpc193YXJwZWQ9WzAsMCwwXX1cIixhcmdzOltdLHRoaXNWYXJzOltcInRoaXNfd2FycGVkXCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keTpcIntfaW5saW5lXzEzX2FyZzJfKHRoaXNfd2FycGVkLF9pbmxpbmVfMTNfYXJnMF8pLF9pbmxpbmVfMTNfYXJnMV89X2lubGluZV8xM19hcmczXyhfaW5saW5lXzEzX2FyZzRfLHRoaXNfd2FycGVkWzBdLHRoaXNfd2FycGVkWzFdLHRoaXNfd2FycGVkWzJdKX1cIixhcmdzOlt7bmFtZTpcIl9pbmxpbmVfMTNfYXJnMF9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xM19hcmcxX1wiLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzEzX2FyZzJfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfMTNfYXJnM19cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xM19hcmc0X1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOltcInRoaXNfd2FycGVkXCJdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keTpcInt9XCIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGRlYnVnOiExLGZ1bmNOYW1lOlwid2FycDNEXCIsYmxvY2tTaXplOjY0fSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtzd2l0Y2goZS5zaGFwZS5sZW5ndGgpe2Nhc2UgMTphKHQscixuLmQxLGUpO2JyZWFrO2Nhc2UgMjpvKHQscixuLmQyLGUpO2JyZWFrO2Nhc2UgMzpzKHQscixuLmQzLGUpO2JyZWFrO2RlZmF1bHQ6aSh0LHIsbi5iaW5kKHZvaWQgMCxlKSxlLnNoYXBlLmxlbmd0aCl9cmV0dXJuIHR9fSx7XCJjd2lzZS9saWIvd3JhcHBlclwiOjE0MCxcIm5kYXJyYXktbGluZWFyLWludGVycG9sYXRlXCI6NDM2fV0sNDQzOltmdW5jdGlvbih0LGUscil7dmFyIG49dChcImlvdGEtYXJyYXlcIiksaT10KFwiaXMtYnVmZmVyXCIpLGE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIEZsb2F0NjRBcnJheTtmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHRbMF0tZVswXX1mdW5jdGlvbiBzKCl7dmFyIHQsZT10aGlzLnN0cmlkZSxyPW5ldyBBcnJheShlLmxlbmd0aCk7Zm9yKHQ9MDt0PHIubGVuZ3RoOysrdClyW3RdPVtNYXRoLmFicyhlW3RdKSx0XTtyLnNvcnQobyk7dmFyIG49bmV3IEFycmF5KHIubGVuZ3RoKTtmb3IodD0wO3Q8bi5sZW5ndGg7Kyt0KW5bdF09clt0XVsxXTtyZXR1cm4gbn1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9W1wiVmlld1wiLGUsXCJkXCIsdF0uam9pbihcIlwiKTtlPDAmJihyPVwiVmlld19OaWxcIit0KTt2YXIgaT1cImdlbmVyaWNcIj09PXQ7aWYoLTE9PT1lKXt2YXIgYT1cImZ1bmN0aW9uIFwiK3IrXCIoYSl7dGhpcy5kYXRhPWE7fTt2YXIgcHJvdG89XCIrcitcIi5wcm90b3R5cGU7cHJvdG8uZHR5cGU9J1wiK3QrXCInO3Byb3RvLmluZGV4PWZ1bmN0aW9uKCl7cmV0dXJuIC0xfTtwcm90by5zaXplPTA7cHJvdG8uZGltZW5zaW9uPS0xO3Byb3RvLnNoYXBlPXByb3RvLnN0cmlkZT1wcm90by5vcmRlcj1bXTtwcm90by5sbz1wcm90by5oaT1wcm90by50cmFuc3Bvc2U9cHJvdG8uc3RlcD1mdW5jdGlvbigpe3JldHVybiBuZXcgXCIrcitcIih0aGlzLmRhdGEpO307cHJvdG8uZ2V0PXByb3RvLnNldD1mdW5jdGlvbigpe307cHJvdG8ucGljaz1mdW5jdGlvbigpe3JldHVybiBudWxsfTtyZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0X1wiK3IrXCIoYSl7cmV0dXJuIG5ldyBcIityK1wiKGEpO31cIjtyZXR1cm4gbmV3IEZ1bmN0aW9uKGEpKCl9aWYoMD09PWUpe2E9XCJmdW5jdGlvbiBcIityK1wiKGEsZCkge3RoaXMuZGF0YSA9IGE7dGhpcy5vZmZzZXQgPSBkfTt2YXIgcHJvdG89XCIrcitcIi5wcm90b3R5cGU7cHJvdG8uZHR5cGU9J1wiK3QrXCInO3Byb3RvLmluZGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2Zmc2V0fTtwcm90by5kaW1lbnNpb249MDtwcm90by5zaXplPTE7cHJvdG8uc2hhcGU9cHJvdG8uc3RyaWRlPXByb3RvLm9yZGVyPVtdO3Byb3RvLmxvPXByb3RvLmhpPXByb3RvLnRyYW5zcG9zZT1wcm90by5zdGVwPWZ1bmN0aW9uIFwiK3IrXCJfY29weSgpIHtyZXR1cm4gbmV3IFwiK3IrXCIodGhpcy5kYXRhLHRoaXMub2Zmc2V0KX07cHJvdG8ucGljaz1mdW5jdGlvbiBcIityK1wiX3BpY2soKXtyZXR1cm4gVHJpdmlhbEFycmF5KHRoaXMuZGF0YSk7fTtwcm90by52YWx1ZU9mPXByb3RvLmdldD1mdW5jdGlvbiBcIityK1wiX2dldCgpe3JldHVybiBcIisoaT9cInRoaXMuZGF0YS5nZXQodGhpcy5vZmZzZXQpXCI6XCJ0aGlzLmRhdGFbdGhpcy5vZmZzZXRdXCIpK1wifTtwcm90by5zZXQ9ZnVuY3Rpb24gXCIrcitcIl9zZXQodil7cmV0dXJuIFwiKyhpP1widGhpcy5kYXRhLnNldCh0aGlzLm9mZnNldCx2KVwiOlwidGhpcy5kYXRhW3RoaXMub2Zmc2V0XT12XCIpK1wifTtyZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0X1wiK3IrXCIoYSxiLGMsZCl7cmV0dXJuIG5ldyBcIityK1wiKGEsZCl9XCI7cmV0dXJuIG5ldyBGdW5jdGlvbihcIlRyaXZpYWxBcnJheVwiLGEpKGNbdF1bMF0pfWE9W1wiJ3VzZSBzdHJpY3QnXCJdO3ZhciBvPW4oZSksbD1vLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cImlcIit0fSksdT1cInRoaXMub2Zmc2V0K1wiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwidGhpcy5zdHJpZGVbXCIrdCtcIl0qaVwiK3R9KS5qb2luKFwiK1wiKSxoPW8ubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiYlwiK3R9KS5qb2luKFwiLFwiKSxmPW8ubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiY1wiK3R9KS5qb2luKFwiLFwiKTthLnB1c2goXCJmdW5jdGlvbiBcIityK1wiKGEsXCIraCtcIixcIitmK1wiLGQpe3RoaXMuZGF0YT1hXCIsXCJ0aGlzLnNoYXBlPVtcIitoK1wiXVwiLFwidGhpcy5zdHJpZGU9W1wiK2YrXCJdXCIsXCJ0aGlzLm9mZnNldD1kfDB9XCIsXCJ2YXIgcHJvdG89XCIrcitcIi5wcm90b3R5cGVcIixcInByb3RvLmR0eXBlPSdcIit0K1wiJ1wiLFwicHJvdG8uZGltZW5zaW9uPVwiK2UpLGEucHVzaChcIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywnc2l6ZScse2dldDpmdW5jdGlvbiBcIityK1wiX3NpemUoKXtyZXR1cm4gXCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJ0aGlzLnNoYXBlW1wiK3QrXCJdXCJ9KS5qb2luKFwiKlwiKSxcIn19KVwiKSwxPT09ZT9hLnB1c2goXCJwcm90by5vcmRlcj1bMF1cIik6KGEucHVzaChcIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywnb3JkZXInLHtnZXQ6XCIpLGU8ND8oYS5wdXNoKFwiZnVuY3Rpb24gXCIrcitcIl9vcmRlcigpe1wiKSwyPT09ZT9hLnB1c2goXCJyZXR1cm4gKE1hdGguYWJzKHRoaXMuc3RyaWRlWzBdKT5NYXRoLmFicyh0aGlzLnN0cmlkZVsxXSkpP1sxLDBdOlswLDFdfX0pXCIpOjM9PT1lJiZhLnB1c2goXCJ2YXIgczA9TWF0aC5hYnModGhpcy5zdHJpZGVbMF0pLHMxPU1hdGguYWJzKHRoaXMuc3RyaWRlWzFdKSxzMj1NYXRoLmFicyh0aGlzLnN0cmlkZVsyXSk7aWYoczA+czEpe2lmKHMxPnMyKXtyZXR1cm4gWzIsMSwwXTt9ZWxzZSBpZihzMD5zMil7cmV0dXJuIFsxLDIsMF07fWVsc2V7cmV0dXJuIFsxLDAsMl07fX1lbHNlIGlmKHMwPnMyKXtyZXR1cm4gWzIsMCwxXTt9ZWxzZSBpZihzMj5zMSl7cmV0dXJuIFswLDEsMl07fWVsc2V7cmV0dXJuIFswLDIsMV07fX19KVwiKSk6YS5wdXNoKFwiT1JERVJ9KVwiKSksYS5wdXNoKFwicHJvdG8uc2V0PWZ1bmN0aW9uIFwiK3IrXCJfc2V0KFwiK2wuam9pbihcIixcIikrXCIsdil7XCIpLGk/YS5wdXNoKFwicmV0dXJuIHRoaXMuZGF0YS5zZXQoXCIrdStcIix2KX1cIik6YS5wdXNoKFwicmV0dXJuIHRoaXMuZGF0YVtcIit1K1wiXT12fVwiKSxhLnB1c2goXCJwcm90by5nZXQ9ZnVuY3Rpb24gXCIrcitcIl9nZXQoXCIrbC5qb2luKFwiLFwiKStcIil7XCIpLGk/YS5wdXNoKFwicmV0dXJuIHRoaXMuZGF0YS5nZXQoXCIrdStcIil9XCIpOmEucHVzaChcInJldHVybiB0aGlzLmRhdGFbXCIrdStcIl19XCIpLGEucHVzaChcInByb3RvLmluZGV4PWZ1bmN0aW9uIFwiK3IrXCJfaW5kZXgoXCIsbC5qb2luKCksXCIpe3JldHVybiBcIit1K1wifVwiKSxhLnB1c2goXCJwcm90by5oaT1mdW5jdGlvbiBcIityK1wiX2hpKFwiK2wuam9pbihcIixcIikrXCIpe3JldHVybiBuZXcgXCIrcitcIih0aGlzLmRhdGEsXCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW1wiKHR5cGVvZiBpXCIsdCxcIiE9PSdudW1iZXInfHxpXCIsdCxcIjwwKT90aGlzLnNoYXBlW1wiLHQsXCJdOmlcIix0LFwifDBcIl0uam9pbihcIlwiKX0pLmpvaW4oXCIsXCIpK1wiLFwiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwidGhpcy5zdHJpZGVbXCIrdCtcIl1cIn0pLmpvaW4oXCIsXCIpK1wiLHRoaXMub2Zmc2V0KX1cIik7dmFyIHA9by5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJhXCIrdCtcIj10aGlzLnNoYXBlW1wiK3QrXCJdXCJ9KSxkPW8ubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiY1wiK3QrXCI9dGhpcy5zdHJpZGVbXCIrdCtcIl1cIn0pO2EucHVzaChcInByb3RvLmxvPWZ1bmN0aW9uIFwiK3IrXCJfbG8oXCIrbC5qb2luKFwiLFwiKStcIil7dmFyIGI9dGhpcy5vZmZzZXQsZD0wLFwiK3Auam9pbihcIixcIikrXCIsXCIrZC5qb2luKFwiLFwiKSk7Zm9yKHZhciBnPTA7ZzxlOysrZylhLnB1c2goXCJpZih0eXBlb2YgaVwiK2crXCI9PT0nbnVtYmVyJyYmaVwiK2crXCI+PTApe2Q9aVwiK2crXCJ8MDtiKz1jXCIrZytcIipkO2FcIitnK1wiLT1kfVwiKTthLnB1c2goXCJyZXR1cm4gbmV3IFwiK3IrXCIodGhpcy5kYXRhLFwiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiYVwiK3R9KS5qb2luKFwiLFwiKStcIixcIitvLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cImNcIit0fSkuam9pbihcIixcIikrXCIsYil9XCIpLGEucHVzaChcInByb3RvLnN0ZXA9ZnVuY3Rpb24gXCIrcitcIl9zdGVwKFwiK2wuam9pbihcIixcIikrXCIpe3ZhciBcIitvLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cImFcIit0K1wiPXRoaXMuc2hhcGVbXCIrdCtcIl1cIn0pLmpvaW4oXCIsXCIpK1wiLFwiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiYlwiK3QrXCI9dGhpcy5zdHJpZGVbXCIrdCtcIl1cIn0pLmpvaW4oXCIsXCIpK1wiLGM9dGhpcy5vZmZzZXQsZD0wLGNlaWw9TWF0aC5jZWlsXCIpO2ZvcihnPTA7ZzxlOysrZylhLnB1c2goXCJpZih0eXBlb2YgaVwiK2crXCI9PT0nbnVtYmVyJyl7ZD1pXCIrZytcInwwO2lmKGQ8MCl7Yys9YlwiK2crXCIqKGFcIitnK1wiLTEpO2FcIitnK1wiPWNlaWwoLWFcIitnK1wiL2QpfWVsc2V7YVwiK2crXCI9Y2VpbChhXCIrZytcIi9kKX1iXCIrZytcIio9ZH1cIik7YS5wdXNoKFwicmV0dXJuIG5ldyBcIityK1wiKHRoaXMuZGF0YSxcIitvLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cImFcIit0fSkuam9pbihcIixcIikrXCIsXCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJiXCIrdH0pLmpvaW4oXCIsXCIpK1wiLGMpfVwiKTt2YXIgdj1uZXcgQXJyYXkoZSksbT1uZXcgQXJyYXkoZSk7Zm9yKGc9MDtnPGU7KytnKXZbZ109XCJhW2lcIitnK1wiXVwiLG1bZ109XCJiW2lcIitnK1wiXVwiO2EucHVzaChcInByb3RvLnRyYW5zcG9zZT1mdW5jdGlvbiBcIityK1wiX3RyYW5zcG9zZShcIitsK1wiKXtcIitsLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0K1wiPShcIit0K1wiPT09dW5kZWZpbmVkP1wiK2UrXCI6XCIrdCtcInwwKVwifSkuam9pbihcIjtcIiksXCJ2YXIgYT10aGlzLnNoYXBlLGI9dGhpcy5zdHJpZGU7cmV0dXJuIG5ldyBcIityK1wiKHRoaXMuZGF0YSxcIit2LmpvaW4oXCIsXCIpK1wiLFwiK20uam9pbihcIixcIikrXCIsdGhpcy5vZmZzZXQpfVwiKSxhLnB1c2goXCJwcm90by5waWNrPWZ1bmN0aW9uIFwiK3IrXCJfcGljayhcIitsK1wiKXt2YXIgYT1bXSxiPVtdLGM9dGhpcy5vZmZzZXRcIik7Zm9yKGc9MDtnPGU7KytnKWEucHVzaChcImlmKHR5cGVvZiBpXCIrZytcIj09PSdudW1iZXInJiZpXCIrZytcIj49MCl7Yz0oYyt0aGlzLnN0cmlkZVtcIitnK1wiXSppXCIrZytcIil8MH1lbHNle2EucHVzaCh0aGlzLnNoYXBlW1wiK2crXCJdKTtiLnB1c2godGhpcy5zdHJpZGVbXCIrZytcIl0pfVwiKTtyZXR1cm4gYS5wdXNoKFwidmFyIGN0b3I9Q1RPUl9MSVNUW2EubGVuZ3RoKzFdO3JldHVybiBjdG9yKHRoaXMuZGF0YSxhLGIsYyl9XCIpLGEucHVzaChcInJldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RfXCIrcitcIihkYXRhLHNoYXBlLHN0cmlkZSxvZmZzZXQpe3JldHVybiBuZXcgXCIrcitcIihkYXRhLFwiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwic2hhcGVbXCIrdCtcIl1cIn0pLmpvaW4oXCIsXCIpK1wiLFwiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwic3RyaWRlW1wiK3QrXCJdXCJ9KS5qb2luKFwiLFwiKStcIixvZmZzZXQpfVwiKSxuZXcgRnVuY3Rpb24oXCJDVE9SX0xJU1RcIixcIk9SREVSXCIsYS5qb2luKFwiXFxuXCIpKShjW3RdLHMpfXZhciBjPXtmbG9hdDMyOltdLGZsb2F0NjQ6W10saW50ODpbXSxpbnQxNjpbXSxpbnQzMjpbXSx1aW50ODpbXSx1aW50MTY6W10sdWludDMyOltdLGFycmF5OltdLHVpbnQ4X2NsYW1wZWQ6W10sYnVmZmVyOltdLGdlbmVyaWM6W119O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtpZih2b2lkIDA9PT10KXJldHVybigwLGMuYXJyYXlbMF0pKFtdKTtcIm51bWJlclwiPT10eXBlb2YgdCYmKHQ9W3RdKSx2b2lkIDA9PT1lJiYoZT1bdC5sZW5ndGhdKTt2YXIgbz1lLmxlbmd0aDtpZih2b2lkIDA9PT1yKXtyPW5ldyBBcnJheShvKTtmb3IodmFyIHM9by0xLHU9MTtzPj0wOy0tcylyW3NdPXUsdSo9ZVtzXX1pZih2b2lkIDA9PT1uKWZvcihuPTAscz0wO3M8bzsrK3MpcltzXTwwJiYobi09KGVbc10tMSkqcltzXSk7Zm9yKHZhciBoPWZ1bmN0aW9uKHQpe2lmKGkodCkpcmV0dXJuXCJidWZmZXJcIjtpZihhKXN3aXRjaChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpe2Nhc2VcIltvYmplY3QgRmxvYXQ2NEFycmF5XVwiOnJldHVyblwiZmxvYXQ2NFwiO2Nhc2VcIltvYmplY3QgRmxvYXQzMkFycmF5XVwiOnJldHVyblwiZmxvYXQzMlwiO2Nhc2VcIltvYmplY3QgSW50OEFycmF5XVwiOnJldHVyblwiaW50OFwiO2Nhc2VcIltvYmplY3QgSW50MTZBcnJheV1cIjpyZXR1cm5cImludDE2XCI7Y2FzZVwiW29iamVjdCBJbnQzMkFycmF5XVwiOnJldHVyblwiaW50MzJcIjtjYXNlXCJbb2JqZWN0IFVpbnQ4QXJyYXldXCI6cmV0dXJuXCJ1aW50OFwiO2Nhc2VcIltvYmplY3QgVWludDE2QXJyYXldXCI6cmV0dXJuXCJ1aW50MTZcIjtjYXNlXCJbb2JqZWN0IFVpbnQzMkFycmF5XVwiOnJldHVyblwidWludDMyXCI7Y2FzZVwiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV1cIjpyZXR1cm5cInVpbnQ4X2NsYW1wZWRcIn1yZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9cImFycmF5XCI6XCJnZW5lcmljXCJ9KHQpLGY9Y1toXTtmLmxlbmd0aDw9bysxOylmLnB1c2gobChoLGYubGVuZ3RoLTEpKTtyZXR1cm4oMCxmW28rMV0pKHQsZSxyLG4pfX0se1wiaW90YS1hcnJheVwiOjQwOSxcImlzLWJ1ZmZlclwiOjQxMX1dLDQ0NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkb3VibGUtYml0c1wiKSxpPU1hdGgucG93KDIsLTEwNzQpLGE9LTE+Pj4wO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKGlzTmFOKHQpfHxpc05hTihlKSlyZXR1cm4gTmFOO2lmKHQ9PT1lKXJldHVybiB0O2lmKDA9PT10KXJldHVybiBlPDA/LWk6aTt2YXIgcj1uLmhpKHQpLG89bi5sbyh0KTtlPnQ9PXQ+MD9vPT09YT8ocis9MSxvPTApOm8rPTE6MD09PW8/KG89YSxyLT0xKTpvLT0xO3JldHVybiBuLnBhY2sobyxyKX19LHtcImRvdWJsZS1iaXRzXCI6MTU5fV0sNDQ1OltmdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5QSSxpPWMoMTIwKTtmdW5jdGlvbiBhKHQsZSxyLG4pe3JldHVybltcIkNcIix0LGUscixuLHIsbl19ZnVuY3Rpb24gbyh0LGUscixuLGksYSl7cmV0dXJuW1wiQ1wiLHQvMysyLzMqcixlLzMrMi8zKm4saS8zKzIvMypyLGEvMysyLzMqbixpLGFdfWZ1bmN0aW9uIHModCxlLHIsYSxvLGMsdSxoLGYscCl7aWYocClrPXBbMF0sQT1wWzFdLF89cFsyXSx3PXBbM107ZWxzZXt2YXIgZD1sKHQsZSwtbyk7dD1kLngsZT1kLnk7dmFyIGc9KHQtKGg9KGQ9bChoLGYsLW8pKS54KSkvMix2PShlLShmPWQueSkpLzIsbT1nKmcvKHIqcikrdip2LyhhKmEpO20+MSYmKHIqPW09TWF0aC5zcXJ0KG0pLGEqPW0pO3ZhciB5PXIqcix4PWEqYSxiPShjPT11Py0xOjEpKk1hdGguc3FydChNYXRoLmFicygoeSp4LXkqdip2LXgqZypnKS8oeSp2KnYreCpnKmcpKSk7Yj09MS8wJiYoYj0xKTt2YXIgXz1iKnIqdi9hKyh0K2gpLzIsdz1iKi1hKmcvcisoZStmKS8yLGs9TWF0aC5hc2luKCgoZS13KS9hKS50b0ZpeGVkKDkpKSxBPU1hdGguYXNpbigoKGYtdykvYSkudG9GaXhlZCg5KSk7KGs9dDxfP24tazprKTwwJiYoaz0yKm4rayksKEE9aDxfP24tQTpBKTwwJiYoQT0yKm4rQSksdSYmaz5BJiYoay09MipuKSwhdSYmQT5rJiYoQS09MipuKX1pZihNYXRoLmFicyhBLWspPmkpe3ZhciBUPUEsTT1oLFM9ZjtBPWsraSoodSYmQT5rPzE6LTEpO3ZhciBFPXMoaD1fK3IqTWF0aC5jb3MoQSksZj13K2EqTWF0aC5zaW4oQSkscixhLG8sMCx1LE0sUyxbQSxULF8sd10pfXZhciBDPU1hdGgudGFuKChBLWspLzQpLEw9NC8zKnIqQyx6PTQvMyphKkMsTz1bMip0LSh0K0wqTWF0aC5zaW4oaykpLDIqZS0oZS16Kk1hdGguY29zKGspKSxoK0wqTWF0aC5zaW4oQSksZi16Kk1hdGguY29zKEEpLGgsZl07aWYocClyZXR1cm4gTztFJiYoTz1PLmNvbmNhdChFKSk7Zm9yKHZhciBJPTA7STxPLmxlbmd0aDspe3ZhciBEPWwoT1tJXSxPW0krMV0sbyk7T1tJKytdPUQueCxPW0krK109RC55fXJldHVybiBPfWZ1bmN0aW9uIGwodCxlLHIpe3JldHVybnt4OnQqTWF0aC5jb3MociktZSpNYXRoLnNpbihyKSx5OnQqTWF0aC5zaW4ocikrZSpNYXRoLmNvcyhyKX19ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdCoobi8xODApfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscj1bXSxuPTAsaT0wLGw9MCx1PTAsaD1udWxsLGY9bnVsbCxwPTAsZD0wLGc9MCx2PXQubGVuZ3RoO2c8djtnKyspe3ZhciBtPXRbZ10seT1tWzBdO3N3aXRjaCh5KXtjYXNlXCJNXCI6bD1tWzFdLHU9bVsyXTticmVhaztjYXNlXCJBXCI6KG09cyhwLGQsbVsxXSxtWzJdLGMobVszXSksbVs0XSxtWzVdLG1bNl0sbVs3XSkpLnVuc2hpZnQoXCJDXCIpLG0ubGVuZ3RoPjcmJihyLnB1c2gobS5zcGxpY2UoMCw3KSksbS51bnNoaWZ0KFwiQ1wiKSk7YnJlYWs7Y2FzZVwiU1wiOnZhciB4PXAsYj1kO1wiQ1wiIT1lJiZcIlNcIiE9ZXx8KHgrPXgtbixiKz1iLWkpLG09W1wiQ1wiLHgsYixtWzFdLG1bMl0sbVszXSxtWzRdXTticmVhaztjYXNlXCJUXCI6XCJRXCI9PWV8fFwiVFwiPT1lPyhoPTIqcC1oLGY9MipkLWYpOihoPXAsZj1kKSxtPW8ocCxkLGgsZixtWzFdLG1bMl0pO2JyZWFrO2Nhc2VcIlFcIjpoPW1bMV0sZj1tWzJdLG09byhwLGQsbVsxXSxtWzJdLG1bM10sbVs0XSk7YnJlYWs7Y2FzZVwiTFwiOm09YShwLGQsbVsxXSxtWzJdKTticmVhaztjYXNlXCJIXCI6bT1hKHAsZCxtWzFdLGQpO2JyZWFrO2Nhc2VcIlZcIjptPWEocCxkLHAsbVsxXSk7YnJlYWs7Y2FzZVwiWlwiOm09YShwLGQsbCx1KX1lPXkscD1tW20ubGVuZ3RoLTJdLGQ9bVttLmxlbmd0aC0xXSxtLmxlbmd0aD40PyhuPW1bbS5sZW5ndGgtNF0saT1tW20ubGVuZ3RoLTNdKToobj1wLGk9ZCksci5wdXNoKG0pfXJldHVybiByfX0se31dLDQ0NjpbZnVuY3Rpb24odCxlLHIpe3IudmVydGV4Tm9ybWFscz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLGE9dm9pZCAwPT09cj8xZS02OnIsbz0wO288bjsrK28paVtvXT1bMCwwLDBdO2ZvcihvPTA7bzx0Lmxlbmd0aDsrK28pZm9yKHZhciBzPXRbb10sbD0wLGM9c1tzLmxlbmd0aC0xXSx1PXNbMF0saD0wO2g8cy5sZW5ndGg7KytoKXtsPWMsYz11LHU9c1soaCsxKSVzLmxlbmd0aF07Zm9yKHZhciBmPWVbbF0scD1lW2NdLGQ9ZVt1XSxnPW5ldyBBcnJheSgzKSx2PTAsbT1uZXcgQXJyYXkoMykseT0wLHg9MDt4PDM7Kyt4KWdbeF09Zlt4XS1wW3hdLHYrPWdbeF0qZ1t4XSxtW3hdPWRbeF0tcFt4XSx5Kz1tW3hdKm1beF07aWYodip5PmEpe3ZhciBiPWlbY10sXz0xL01hdGguc3FydCh2KnkpO2Zvcih4PTA7eDwzOysreCl7dmFyIHc9KHgrMSklMyxrPSh4KzIpJTM7Ylt4XSs9XyoobVt3XSpnW2tdLW1ba10qZ1t3XSl9fX1mb3Iobz0wO288bjsrK28pe2I9aVtvXTt2YXIgQT0wO2Zvcih4PTA7eDwzOysreClBKz1iW3hdKmJbeF07aWYoQT5hKWZvcihfPTEvTWF0aC5zcXJ0KEEpLHg9MDt4PDM7Kyt4KWJbeF0qPV87ZWxzZSBmb3IoeD0wO3g8MzsrK3gpYlt4XT0wfXJldHVybiBpfSxyLmZhY2VOb3JtYWxzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC5sZW5ndGgsaT1uZXcgQXJyYXkobiksYT12b2lkIDA9PT1yPzFlLTY6cixvPTA7bzxuOysrbyl7Zm9yKHZhciBzPXRbb10sbD1uZXcgQXJyYXkoMyksYz0wO2M8MzsrK2MpbFtjXT1lW3NbY11dO3ZhciB1PW5ldyBBcnJheSgzKSxoPW5ldyBBcnJheSgzKTtmb3IoYz0wO2M8MzsrK2MpdVtjXT1sWzFdW2NdLWxbMF1bY10saFtjXT1sWzJdW2NdLWxbMF1bY107dmFyIGY9bmV3IEFycmF5KDMpLHA9MDtmb3IoYz0wO2M8MzsrK2Mpe3ZhciBkPShjKzEpJTMsZz0oYysyKSUzO2ZbY109dVtkXSpoW2ddLXVbZ10qaFtkXSxwKz1mW2NdKmZbY119cD1wPmE/MS9NYXRoLnNxcnQocCk6MDtmb3IoYz0wO2M8MzsrK2MpZltjXSo9cDtpW29dPWZ9cmV0dXJuIGl9fSx7fV0sNDQ3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksYT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO2UuZXhwb3J0cz1mdW5jdGlvbigpe3RyeXtpZighT2JqZWN0LmFzc2lnbilyZXR1cm4hMTt2YXIgdD1uZXcgU3RyaW5nKFwiYWJjXCIpO2lmKHRbNV09XCJkZVwiLFwiNVwiPT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModClbMF0pcmV0dXJuITE7Zm9yKHZhciBlPXt9LHI9MDtyPDEwO3IrKyllW1wiX1wiK1N0cmluZy5mcm9tQ2hhckNvZGUocildPXI7aWYoXCIwMTIzNDU2Nzg5XCIhPT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KS5qb2luKFwiXCIpKXJldHVybiExO3ZhciBuPXt9O3JldHVyblwiYWJjZGVmZ2hpamtsbW5vcHFyc3RcIi5zcGxpdChcIlwiKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe25bdF09dH0pLFwiYWJjZGVmZ2hpamtsbW5vcHFyc3RcIj09PU9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sbikpLmpvaW4oXCJcIil9Y2F0Y2godCl7cmV0dXJuITF9fSgpP09iamVjdC5hc3NpZ246ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbyxzPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkXCIpO3JldHVybiBPYmplY3QodCl9KHQpLGw9MTtsPGFyZ3VtZW50cy5sZW5ndGg7bCsrKXtmb3IodmFyIGMgaW4gcj1PYmplY3QoYXJndW1lbnRzW2xdKSlpLmNhbGwocixjKSYmKHNbY109cltjXSk7aWYobil7bz1uKHIpO2Zvcih2YXIgdT0wO3U8by5sZW5ndGg7dSsrKWEuY2FsbChyLG9bdV0pJiYoc1tvW3VdXT1yW29bdV1dKX19cmV0dXJuIHN9fSx7fV0sNDQ4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMpe3ZhciB1PWUrYStjO2lmKGg+MCl7dmFyIGg9TWF0aC5zcXJ0KHUrMSk7dFswXT0uNSooby1sKS9oLHRbMV09LjUqKHMtbikvaCx0WzJdPS41KihyLWEpL2gsdFszXT0uNSpofWVsc2V7dmFyIGY9TWF0aC5tYXgoZSxhLGMpLGg9TWF0aC5zcXJ0KDIqZi11KzEpO2U+PWY/KHRbMF09LjUqaCx0WzFdPS41KihpK3IpL2gsdFsyXT0uNSoocytuKS9oLHRbM109LjUqKG8tbCkvaCk6YT49Zj8odFswXT0uNSoocitpKS9oLHRbMV09LjUqaCx0WzJdPS41KihsK28pL2gsdFszXT0uNSoocy1uKS9oKToodFswXT0uNSoobitzKS9oLHRbMV09LjUqKG8rbCkvaCx0WzJdPS41KmgsdFszXT0uNSooci1pKS9oKX1yZXR1cm4gdH19LHt9XSw0NDk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9KHQ9dHx8e30pLmNlbnRlcnx8WzAsMCwwXSxyPXQucm90YXRpb258fFswLDAsMCwxXSxuPXQucmFkaXVzfHwxO2U9W10uc2xpY2UuY2FsbChlLDAsMyksdShyPVtdLnNsaWNlLmNhbGwociwwLDQpLHIpO3ZhciBpPW5ldyBoKHIsZSxNYXRoLmxvZyhuKSk7aS5zZXREaXN0YW5jZUxpbWl0cyh0Lnpvb21NaW4sdC56b29tTWF4KSwoXCJleWVcImluIHR8fFwidXBcImluIHQpJiZpLmxvb2tBdCgwLHQuZXllLHQuY2VudGVyLHQudXApO3JldHVybiBpfTt2YXIgbj10KFwiZmlsdGVyZWQtdmVjdG9yXCIpLGk9dChcImdsLW1hdDQvbG9va0F0XCIpLGE9dChcImdsLW1hdDQvZnJvbVF1YXRcIiksbz10KFwiZ2wtbWF0NC9pbnZlcnRcIikscz10KFwiLi9saWIvcXVhdEZyb21GcmFtZVwiKTtmdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHQsMikrTWF0aC5wb3coZSwyKStNYXRoLnBvdyhyLDIpKX1mdW5jdGlvbiBjKHQsZSxyLG4pe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codCwyKStNYXRoLnBvdyhlLDIpK01hdGgucG93KHIsMikrTWF0aC5wb3cobiwyKSl9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1jKHIsbixpLGEpO28+MWUtNj8odFswXT1yL28sdFsxXT1uL28sdFsyXT1pL28sdFszXT1hL28pOih0WzBdPXRbMV09dFsyXT0wLHRbM109MSl9ZnVuY3Rpb24gaCh0LGUscil7dGhpcy5yYWRpdXM9bihbcl0pLHRoaXMuY2VudGVyPW4oZSksdGhpcy5yb3RhdGlvbj1uKHQpLHRoaXMuY29tcHV0ZWRSYWRpdXM9dGhpcy5yYWRpdXMuY3VydmUoMCksdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLmNlbnRlci5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkUm90YXRpb249dGhpcy5yb3RhdGlvbi5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVXA9Wy4xLDAsMF0sdGhpcy5jb21wdXRlZEV5ZT1bLjEsMCwwXSx0aGlzLmNvbXB1dGVkTWF0cml4PVsuMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0sdGhpcy5yZWNhbGNNYXRyaXgoMCl9dmFyIGY9aC5wcm90b3R5cGU7Zi5sYXN0VD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1heCh0aGlzLnJhZGl1cy5sYXN0VCgpLHRoaXMuY2VudGVyLmxhc3RUKCksdGhpcy5yb3RhdGlvbi5sYXN0VCgpKX0sZi5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dGhpcy5yYWRpdXMuY3VydmUodCksdGhpcy5jZW50ZXIuY3VydmUodCksdGhpcy5yb3RhdGlvbi5jdXJ2ZSh0KTt2YXIgZT10aGlzLmNvbXB1dGVkUm90YXRpb247dShlLGUpO3ZhciByPXRoaXMuY29tcHV0ZWRNYXRyaXg7YShyLGUpO3ZhciBuPXRoaXMuY29tcHV0ZWRDZW50ZXIsaT10aGlzLmNvbXB1dGVkRXllLG89dGhpcy5jb21wdXRlZFVwLHM9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7aVswXT1uWzBdK3MqclsyXSxpWzFdPW5bMV0rcypyWzZdLGlbMl09blsyXStzKnJbMTBdLG9bMF09clsxXSxvWzFdPXJbNV0sb1syXT1yWzldO2Zvcih2YXIgbD0wO2w8MzsrK2wpe2Zvcih2YXIgYz0wLGg9MDtoPDM7KytoKWMrPXJbbCs0KmhdKmlbaF07clsxMitsXT0tY319LGYuZ2V0TWF0cml4PWZ1bmN0aW9uKHQsZSl7dGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIHI9dGhpcy5jb21wdXRlZE1hdHJpeDtpZihlKXtmb3IodmFyIG49MDtuPDE2OysrbillW25dPXJbbl07cmV0dXJuIGV9cmV0dXJuIHJ9LGYuaWRsZT1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5pZGxlKHQpLHRoaXMucmFkaXVzLmlkbGUodCksdGhpcy5yb3RhdGlvbi5pZGxlKHQpfSxmLmZsdXNoPWZ1bmN0aW9uKHQpe3RoaXMuY2VudGVyLmZsdXNoKHQpLHRoaXMucmFkaXVzLmZsdXNoKHQpLHRoaXMucm90YXRpb24uZmx1c2godCl9LGYucGFuPWZ1bmN0aW9uKHQsZSxyLG4pe2U9ZXx8MCxyPXJ8fDAsbj1ufHwwLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXgsYT1pWzFdLG89aVs1XSxzPWlbOV0sYz1sKGEsbyxzKTthLz1jLG8vPWMscy89Yzt2YXIgdT1pWzBdLGg9aVs0XSxmPWlbOF0scD11KmEraCpvK2YqcyxkPWwodS09YSpwLGgtPW8qcCxmLT1zKnApO3UvPWQsaC89ZCxmLz1kO3ZhciBnPWlbMl0sdj1pWzZdLG09aVsxMF0seT1nKmErdipvK20qcyx4PWcqdSt2KmgrbSpmLGI9bChnLT15KmEreCp1LHYtPXkqbyt4KmgsbS09eSpzK3gqZik7Zy89Yix2Lz1iLG0vPWI7dmFyIF89dSplK2Eqcix3PWgqZStvKnIsaz1mKmUrcypyO3RoaXMuY2VudGVyLm1vdmUodCxfLHcsayk7dmFyIEE9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7QT1NYXRoLm1heCgxZS00LEErbiksdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coQSkpfSxmLnJvdGF0ZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxlPWV8fDAscj1yfHwwO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXgsYT1pWzBdLG89aVs0XSxzPWlbOF0sdT1pWzFdLGg9aVs1XSxmPWlbOV0scD1pWzJdLGQ9aVs2XSxnPWlbMTBdLHY9ZSphK3IqdSxtPWUqbytyKmgseT1lKnMrcipmLHg9LShkKnktZyptKSxiPS0oZyp2LXAqeSksXz0tKHAqbS1kKnYpLHc9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMS1NYXRoLnBvdyh4LDIpLU1hdGgucG93KGIsMiktTWF0aC5wb3coXywyKSkpLGs9Yyh4LGIsXyx3KTtrPjFlLTY/KHgvPWssYi89ayxfLz1rLHcvPWspOih4PWI9Xz0wLHc9MSk7dmFyIEE9dGhpcy5jb21wdXRlZFJvdGF0aW9uLFQ9QVswXSxNPUFbMV0sUz1BWzJdLEU9QVszXSxDPVQqdytFKngrTSpfLVMqYixMPU0qdytFKmIrUyp4LVQqXyx6PVMqdytFKl8rVCpiLU0qeCxPPUUqdy1UKngtTSpiLVMqXztpZihuKXt4PXAsYj1kLF89Zzt2YXIgST1NYXRoLnNpbihuKS9sKHgsYixfKTt4Kj1JLGIqPUksXyo9SSxPPU8qKHc9TWF0aC5jb3MoZSkpLShDPUMqdytPKngrTCpfLXoqYikqeC0oTD1MKncrTypiK3oqeC1DKl8pKmItKHo9eip3K08qXytDKmItTCp4KSpffXZhciBEPWMoQyxMLHosTyk7RD4xZS02PyhDLz1ELEwvPUQsei89RCxPLz1EKTooQz1MPXo9MCxPPTEpLHRoaXMucm90YXRpb24uc2V0KHQsQyxMLHosTyl9LGYubG9va0F0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpLHI9cnx8dGhpcy5jb21wdXRlZENlbnRlcixlPWV8fHRoaXMuY29tcHV0ZWRFeWUsbj1ufHx0aGlzLmNvbXB1dGVkVXA7dmFyIGE9dGhpcy5jb21wdXRlZE1hdHJpeDtpKGEsZSxyLG4pO3ZhciBvPXRoaXMuY29tcHV0ZWRSb3RhdGlvbjtzKG8sYVswXSxhWzFdLGFbMl0sYVs0XSxhWzVdLGFbNl0sYVs4XSxhWzldLGFbMTBdKSx1KG8sbyksdGhpcy5yb3RhdGlvbi5zZXQodCxvWzBdLG9bMV0sb1syXSxvWzNdKTtmb3IodmFyIGw9MCxjPTA7YzwzOysrYylsKz1NYXRoLnBvdyhyW2NdLWVbY10sMik7dGhpcy5yYWRpdXMuc2V0KHQsLjUqTWF0aC5sb2coTWF0aC5tYXgobCwxZS02KSkpLHRoaXMuY2VudGVyLnNldCh0LHJbMF0sclsxXSxyWzJdKX0sZi50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5jZW50ZXIubW92ZSh0LGV8fDAscnx8MCxufHwwKX0sZi5zZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmNvbXB1dGVkUm90YXRpb247cyhyLGVbMF0sZVsxXSxlWzJdLGVbNF0sZVs1XSxlWzZdLGVbOF0sZVs5XSxlWzEwXSksdShyLHIpLHRoaXMucm90YXRpb24uc2V0KHQsclswXSxyWzFdLHJbMl0sclszXSk7dmFyIG49dGhpcy5jb21wdXRlZE1hdHJpeDtvKG4sZSk7dmFyIGk9blsxNV07aWYoTWF0aC5hYnMoaSk+MWUtNil7dmFyIGE9blsxMl0vaSxsPW5bMTNdL2ksYz1uWzE0XS9pO3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBoPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO3RoaXMuY2VudGVyLnNldCh0LGEtblsyXSpoLGwtbls2XSpoLGMtblsxMF0qaCksdGhpcy5yYWRpdXMuaWRsZSh0KX1lbHNlIHRoaXMuY2VudGVyLmlkbGUodCksdGhpcy5yYWRpdXMuaWRsZSh0KX0sZi5zZXREaXN0YW5jZT1mdW5jdGlvbih0LGUpe2U+MCYmdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coZSkpfSxmLnNldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQsZSl7dD10PjA/TWF0aC5sb2codCk6LTEvMCxlPWU+MD9NYXRoLmxvZyhlKToxLzAsZT1NYXRoLm1heChlLHQpLHRoaXMucmFkaXVzLmJvdW5kc1swXVswXT10LHRoaXMucmFkaXVzLmJvdW5kc1sxXVswXT1lfSxmLmdldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucmFkaXVzLmJvdW5kcztyZXR1cm4gdD8odFswXT1NYXRoLmV4cChlWzBdWzBdKSx0WzFdPU1hdGguZXhwKGVbMV1bMF0pLHQpOltNYXRoLmV4cChlWzBdWzBdKSxNYXRoLmV4cChlWzFdWzBdKV19LGYudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjYWxjTWF0cml4KHRoaXMubGFzdFQoKSkse2NlbnRlcjp0aGlzLmNvbXB1dGVkQ2VudGVyLnNsaWNlKCkscm90YXRpb246dGhpcy5jb21wdXRlZFJvdGF0aW9uLnNsaWNlKCksZGlzdGFuY2U6TWF0aC5sb2codGhpcy5jb21wdXRlZFJhZGl1c1swXSksem9vbU1pbjp0aGlzLnJhZGl1cy5ib3VuZHNbMF1bMF0sem9vbU1heDp0aGlzLnJhZGl1cy5ib3VuZHNbMV1bMF19fSxmLmZyb21KU09OPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXQuY2VudGVyO3ImJnRoaXMuY2VudGVyLnNldChlLHJbMF0sclsxXSxyWzJdKTt2YXIgbj10LnJvdGF0aW9uO24mJnRoaXMucm90YXRpb24uc2V0KGUsblswXSxuWzFdLG5bMl0sblszXSk7dmFyIGk9dC5kaXN0YW5jZTtpJiZpPjAmJnRoaXMucmFkaXVzLnNldChlLE1hdGgubG9nKGkpKSx0aGlzLnNldERpc3RhbmNlTGltaXRzKHQuem9vbU1pbix0Lnpvb21NYXgpfX0se1wiLi9saWIvcXVhdEZyb21GcmFtZVwiOjQ0OCxcImZpbHRlcmVkLXZlY3RvclwiOjIyMyxcImdsLW1hdDQvZnJvbVF1YXRcIjoyNTksXCJnbC1tYXQ0L2ludmVydFwiOjI2MixcImdsLW1hdDQvbG9va0F0XCI6MjYzfV0sNDUwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInJlcGVhdC1zdHJpbmdcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbihyPVwidW5kZWZpbmVkXCIhPXR5cGVvZiByP3IrXCJcIjpcIiBcIixlKSt0fX0se1wicmVwZWF0LXN0cmluZ1wiOjQ4OH1dLDQ1MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZihcInN0cmluZ1wiIT10eXBlb2YgdClyZXR1cm5bdF07dmFyIHI9W3RdO1wic3RyaW5nXCI9PXR5cGVvZiBlfHxBcnJheS5pc0FycmF5KGUpP2U9e2JyYWNrZXRzOmV9OmV8fChlPXt9KTt2YXIgbj1lLmJyYWNrZXRzP0FycmF5LmlzQXJyYXkoZS5icmFja2V0cyk/ZS5icmFja2V0czpbZS5icmFja2V0c106W1wie31cIixcIltdXCIsXCIoKVwiXSxpPWUuZXNjYXBlfHxcIl9fX1wiLGE9ISFlLmZsYXQ7bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBSZWdFeHAoW1wiXFxcXFwiLHRbMF0sXCJbXlxcXFxcIix0WzBdLFwiXFxcXFwiLHRbMV0sXCJdKlxcXFxcIix0WzFdXS5qb2luKFwiXCIpKSxuPVtdO2Z1bmN0aW9uIGEoZSxhLG8pe3ZhciBzPXIucHVzaChlLnNsaWNlKHRbMF0ubGVuZ3RoLC10WzFdLmxlbmd0aCkpLTE7cmV0dXJuIG4ucHVzaChzKSxpK3N9ci5mb3JFYWNoKGZ1bmN0aW9uKHQsbil7Zm9yKHZhciBpLG89MDt0IT1pOylpZihpPXQsdD10LnJlcGxhY2UoZSxhKSxvKys+MWU0KXRocm93IEVycm9yKFwiUmVmZXJlbmNlcyBoYXZlIGNpcmN1bGFyIGRlcGVuZGVuY3kuIFBsZWFzZSwgY2hlY2sgdGhlbS5cIik7cltuXT10fSksbj1uLnJldmVyc2UoKSxyPXIubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24ocil7ZT1lLnJlcGxhY2UobmV3IFJlZ0V4cChcIihcXFxcXCIraStyK1wiKD8hWzAtOV0pKVwiLFwiZ1wiKSx0WzBdK1wiJDFcIit0WzFdKX0pLGV9KX0pO3ZhciBvPW5ldyBSZWdFeHAoXCJcXFxcXCIraStcIihbMC05XSspXCIpO3JldHVybiBhP3I6ZnVuY3Rpb24gdChlLHIsbil7Zm9yKHZhciBpLGE9W10scz0wO2k9by5leGVjKGUpOyl7aWYocysrPjFlNCl0aHJvdyBFcnJvcihcIkNpcmN1bGFyIHJlZmVyZW5jZXMgaW4gcGFyZW50aGVzaXNcIik7YS5wdXNoKGUuc2xpY2UoMCxpLmluZGV4KSksYS5wdXNoKHQocltpWzFdXSxyKSksZT1lLnNsaWNlKGkuaW5kZXgraVswXS5sZW5ndGgpfXJldHVybiBhLnB1c2goZSksYX0oclswXSxyKX1mdW5jdGlvbiBpKHQsZSl7aWYoZSYmZS5mbGF0KXt2YXIgcixuPWUmJmUuZXNjYXBlfHxcIl9fX1wiLGk9dFswXTtpZighaSlyZXR1cm5cIlwiO2Zvcih2YXIgYT1uZXcgUmVnRXhwKFwiXFxcXFwiK24rXCIoWzAtOV0rKVwiKSxvPTA7aSE9cjspe2lmKG8rKz4xZTQpdGhyb3cgRXJyb3IoXCJDaXJjdWxhciByZWZlcmVuY2VzIGluIFwiK3QpO3I9aSxpPWkucmVwbGFjZShhLHMpfXJldHVybiBpfXJldHVybiB0LnJlZHVjZShmdW5jdGlvbiB0KGUscil7cmV0dXJuIEFycmF5LmlzQXJyYXkocikmJihyPXIucmVkdWNlKHQsXCJcIikpLGUrcn0sXCJcIik7ZnVuY3Rpb24gcyhlLHIpe2lmKG51bGw9PXRbcl0pdGhyb3cgRXJyb3IoXCJSZWZlcmVuY2UgXCIrcitcImlzIHVuZGVmaW5lZFwiKTtyZXR1cm4gdFtyXX19ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP2kodCxlKTpuKHQsZSl9YS5wYXJzZT1uLGEuc3RyaW5naWZ5PWksZS5leHBvcnRzPWF9LHt9XSw0NTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicGljay1ieS1hbGlhc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU7YXJndW1lbnRzLmxlbmd0aD4xJiYodD1hcmd1bWVudHMpO1wic3RyaW5nXCI9PXR5cGVvZiB0P3Q9dC5zcGxpdCgvXFxzLykubWFwKHBhcnNlRmxvYXQpOlwibnVtYmVyXCI9PXR5cGVvZiB0JiYodD1bdF0pO3QubGVuZ3RoJiZcIm51bWJlclwiPT10eXBlb2YgdFswXT9lPTE9PT10Lmxlbmd0aD97d2lkdGg6dFswXSxoZWlnaHQ6dFswXSx4OjAseTowfToyPT09dC5sZW5ndGg/e3dpZHRoOnRbMF0saGVpZ2h0OnRbMV0seDowLHk6MH06e3g6dFswXSx5OnRbMV0sd2lkdGg6dFsyXS10WzBdfHwwLGhlaWdodDp0WzNdLXRbMV18fDB9OnQmJih0PW4odCx7bGVmdDpcInggbCBsZWZ0IExlZnRcIix0b3A6XCJ5IHQgdG9wIFRvcFwiLHdpZHRoOlwidyB3aWR0aCBXIFdpZHRoXCIsaGVpZ2h0OlwiaCBoZWlnaHQgVyBXaWR0aFwiLGJvdHRvbTpcImIgYm90dG9tIEJvdHRvbVwiLHJpZ2h0OlwiciByaWdodCBSaWdodFwifSksZT17eDp0LmxlZnR8fDAseTp0LnRvcHx8MH0sbnVsbD09dC53aWR0aD90LnJpZ2h0P2Uud2lkdGg9dC5yaWdodC1lLng6ZS53aWR0aD0wOmUud2lkdGg9dC53aWR0aCxudWxsPT10LmhlaWdodD90LmJvdHRvbT9lLmhlaWdodD10LmJvdHRvbS1lLnk6ZS5oZWlnaHQ9MDplLmhlaWdodD10LmhlaWdodCk7cmV0dXJuIGV9fSx7XCJwaWNrLWJ5LWFsaWFzXCI6NDU4fV0sNDUzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiB0LnJlcGxhY2UoaSxmdW5jdGlvbih0LHIsaSl7dmFyIG89ci50b0xvd2VyQ2FzZSgpO2ZvcihpPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWF0Y2goYSk7cmV0dXJuIGU/ZS5tYXAoTnVtYmVyKTpbXX0oaSksXCJtXCI9PW8mJmkubGVuZ3RoPjImJihlLnB1c2goW3JdLmNvbmNhdChpLnNwbGljZSgwLDIpKSksbz1cImxcIixyPVwibVwiPT1yP1wibFwiOlwiTFwiKTs7KXtpZihpLmxlbmd0aD09bltvXSlyZXR1cm4gaS51bnNoaWZ0KHIpLGUucHVzaChpKTtpZihpLmxlbmd0aDxuW29dKXRocm93IG5ldyBFcnJvcihcIm1hbGZvcm1lZCBwYXRoIGRhdGFcIik7ZS5wdXNoKFtyXS5jb25jYXQoaS5zcGxpY2UoMCxuW29dKSkpfX0pLGV9O3ZhciBuPXthOjcsYzo2LGg6MSxsOjIsbToyLHE6NCxzOjQsdDoyLHY6MSx6OjB9LGk9LyhbYXN0dnpxbWhsY10pKFteYXN0dnpxbWhsY10qKS9naTt2YXIgYT0vLT9bMC05XSpcXC4/WzAtOV0rKD86ZVstK10/XFxkKyk/L2dpfSx7fV0sNDU0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9WzAsXCJcIl0pLHQ9U3RyaW5nKHQpO3ZhciByPXBhcnNlRmxvYXQodCwxMCk7cmV0dXJuIGVbMF09cixlWzFdPXQubWF0Y2goL1tcXGQuXFwtXFwrXSpcXHMqKC4qKS8pWzFdfHxcIlwiLGV9fSx7fV0sNDU1OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpeyhmdW5jdGlvbigpe3ZhciByLG4saSxhLG8scztcInVuZGVmaW5lZFwiIT10eXBlb2YgcGVyZm9ybWFuY2UmJm51bGwhPT1wZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P2UuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX06XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHQmJm51bGwhPT10JiZ0LmhydGltZT8oZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuKHIoKS1vKS8xZTZ9LG49dC5ocnRpbWUsYT0ocj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiAxZTkqKHQ9bigpKVswXSt0WzFdfSkoKSxzPTFlOSp0LnVwdGltZSgpLG89YS1zKTpEYXRlLm5vdz8oZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCktaX0saT1EYXRlLm5vdygpKTooZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCktaX0saT0obmV3IERhdGUpLmdldFRpbWUoKSl9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHQoXCJfcHJvY2Vzc1wiKSl9LHtfcHJvY2Vzczo0NzV9XSw0NTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoZTxuKXtmb3IodmFyIHI9MSxhPTA7YTxlOysrYSlmb3IodmFyIG89MDtvPGE7KytvKWlmKHRbYV08dFtvXSlyPS1yO2Vsc2UgaWYodFthXT09PXRbb10pcmV0dXJuIDA7cmV0dXJuIHJ9Zm9yKHZhciBzPWkubWFsbG9jVWludDgoZSksYT0wO2E8ZTsrK2Epc1thXT0wO2Zvcih2YXIgcj0xLGE9MDthPGU7KythKWlmKCFzW2FdKXt2YXIgbD0xO3NbYV09MTtmb3IodmFyIG89dFthXTtvIT09YTtvPXRbb10pe2lmKHNbb10pcmV0dXJuIGkuZnJlZVVpbnQ4KHMpLDA7bCs9MSxzW29dPTF9MSZsfHwocj0tcil9cmV0dXJuIGkuZnJlZVVpbnQ4KHMpLHJ9O3ZhciBuPTMyLGk9dChcInR5cGVkYXJyYXktcG9vbFwiKX0se1widHlwZWRhcnJheS1wb29sXCI6NTMwfV0sNDU3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInR5cGVkYXJyYXktcG9vbFwiKSxpPXQoXCJpbnZlcnQtcGVybXV0YXRpb25cIik7ci5yYW5rPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3N3aXRjaChlKXtjYXNlIDA6Y2FzZSAxOnJldHVybiAwO2Nhc2UgMjpyZXR1cm4gdFsxXX12YXIgcixhLG8scz1uLm1hbGxvY1VpbnQzMihlKSxsPW4ubWFsbG9jVWludDMyKGUpLGM9MDtmb3IoaSh0LGwpLG89MDtvPGU7KytvKXNbb109dFtvXTtmb3Iobz1lLTE7bz4wOy0tbylhPWxbb10scj1zW29dLHNbb109c1thXSxzW2FdPXIsbFtvXT1sW3JdLGxbcl09YSxjPShjK3IpKm87cmV0dXJuIG4uZnJlZVVpbnQzMihsKSxuLmZyZWVVaW50MzIocyksY30sci51bnJhbms9ZnVuY3Rpb24odCxlLHIpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHJ8fFtdO2Nhc2UgMTpyZXR1cm4gcj8oclswXT0wLHIpOlswXTtjYXNlIDI6cmV0dXJuIHI/KGU/KHJbMF09MCxyWzFdPTEpOihyWzBdPTEsclsxXT0wKSxyKTplP1swLDFdOlsxLDBdfXZhciBuLGksYSxvPTE7Zm9yKChyPXJ8fG5ldyBBcnJheSh0KSlbMF09MCxhPTE7YTx0OysrYSlyW2FdPWEsbz1vKmF8MDtmb3IoYT10LTE7YT4wOy0tYSllPWUtKG49ZS9vfDApKm98MCxvPW8vYXwwLGk9MHxyW2FdLHJbYV09MHxyW25dLHJbbl09MHxpO3JldHVybiByfX0se1wiaW52ZXJ0LXBlcm11dGF0aW9uXCI6NDA4LFwidHlwZWRhcnJheS1wb29sXCI6NTMwfV0sNDU4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixhLG89e307aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPWkoZSkpLEFycmF5LmlzQXJyYXkoZSkpe3ZhciBzPXt9O2ZvcihhPTA7YTxlLmxlbmd0aDthKyspc1tlW2FdXT0hMDtlPXN9Zm9yKG4gaW4gZSllW25dPWkoZVtuXSk7dmFyIGw9e307Zm9yKG4gaW4gZSl7dmFyIGM9ZVtuXTtpZihBcnJheS5pc0FycmF5KGMpKWZvcihhPTA7YTxjLmxlbmd0aDthKyspe3ZhciB1PWNbYV07aWYociYmKGxbdV09ITApLHUgaW4gdCl7aWYob1tuXT10W3VdLHIpZm9yKHZhciBoPWE7aDxjLmxlbmd0aDtoKyspbFtjW2hdXT0hMDticmVha319ZWxzZSBuIGluIHQmJihlW25dJiYob1tuXT10W25dKSxyJiYobFtuXT0hMCkpfWlmKHIpZm9yKG4gaW4gdClsW25dfHwob1tuXT10W25dKTtyZXR1cm4gb307dmFyIG49e307ZnVuY3Rpb24gaSh0KXtyZXR1cm4gblt0XT9uW3RdOihcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9blt0XT10LnNwbGl0KC9cXHMqLFxccyp8XFxzKy8pKSx0KX19LHt9XSw0NTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MHxlLmxlbmd0aCxpPXQubGVuZ3RoLGE9W25ldyBBcnJheShyKSxuZXcgQXJyYXkocildLG89MDtvPHI7KytvKWFbMF1bb109W10sYVsxXVtvXT1bXTtmb3IodmFyIG89MDtvPGk7KytvKXt2YXIgcz10W29dO2FbMF1bc1swXV0ucHVzaChzKSxhWzFdW3NbMV1dLnB1c2gocyl9Zm9yKHZhciBsPVtdLG89MDtvPHI7KytvKWFbMF1bb10ubGVuZ3RoK2FbMV1bb10ubGVuZ3RoPT09MCYmbC5wdXNoKFtvXSk7ZnVuY3Rpb24gYyh0LGUpe3ZhciByPWFbZV1bdFtlXV07ci5zcGxpY2Uoci5pbmRleE9mKHQpLDEpfWZ1bmN0aW9uIHUodCxyLGkpe2Zvcih2YXIgbyxzLGwsdT0wO3U8MjsrK3UpaWYoYVt1XVtyXS5sZW5ndGg+MCl7bz1hW3VdW3JdWzBdLGw9dTticmVha31zPW9bMV5sXTtmb3IodmFyIGg9MDtoPDI7KytoKWZvcih2YXIgZj1hW2hdW3JdLHA9MDtwPGYubGVuZ3RoOysrcCl7dmFyIGQ9ZltwXSxnPWRbMV5oXSx2PW4oZVt0XSxlW3JdLGVbc10sZVtnXSk7dj4wJiYobz1kLHM9ZyxsPWgpfXJldHVybiBpP3M6KG8mJmMobyxsKSxzKX1mdW5jdGlvbiBoKHQscil7dmFyIGk9YVtyXVt0XVswXSxvPVt0XTtjKGkscik7Zm9yKHZhciBzPWlbMV5yXTs7KXtmb3IoO3MhPT10OylvLnB1c2gocykscz11KG9bby5sZW5ndGgtMl0scywhMSk7aWYoYVswXVt0XS5sZW5ndGgrYVsxXVt0XS5sZW5ndGg9PT0wKWJyZWFrO3ZhciBsPW9bby5sZW5ndGgtMV0saD10LGY9b1sxXSxwPXUobCxoLCEwKTtpZihuKGVbbF0sZVtoXSxlW2ZdLGVbcF0pPDApYnJlYWs7by5wdXNoKHQpLHM9dShsLGgpfXJldHVybiBvfWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gZVsxXT09PWVbZS5sZW5ndGgtMV19Zm9yKHZhciBvPTA7bzxyOysrbylmb3IodmFyIHA9MDtwPDI7KytwKXtmb3IodmFyIGQ9W107YVtwXVtvXS5sZW5ndGg+MDspe2FbMF1bb10ubGVuZ3RoO3ZhciBnPWgobyxwKTtmKGQsZyk/ZC5wdXNoLmFwcGx5KGQsZyk6KGQubGVuZ3RoPjAmJmwucHVzaChkKSxkPWcpfWQubGVuZ3RoPjAmJmwucHVzaChkKX1yZXR1cm4gbH07dmFyIG49dChcImNvbXBhcmUtYW5nbGVcIil9LHtcImNvbXBhcmUtYW5nbGVcIjoxMTh9XSw0NjA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bih0LGUubGVuZ3RoKSxpPW5ldyBBcnJheShlLmxlbmd0aCksYT1uZXcgQXJyYXkoZS5sZW5ndGgpLG89W10scz0wO3M8ZS5sZW5ndGg7KytzKXt2YXIgbD1yW3NdLmxlbmd0aDthW3NdPWwsaVtzXT0hMCxsPD0xJiZvLnB1c2gocyl9Zm9yKDtvLmxlbmd0aD4wOyl7dmFyIGM9by5wb3AoKTtpW2NdPSExO2Zvcih2YXIgdT1yW2NdLHM9MDtzPHUubGVuZ3RoOysrcyl7dmFyIGg9dVtzXTswPT0tLWFbaF0mJm8ucHVzaChoKX19Zm9yKHZhciBmPW5ldyBBcnJheShlLmxlbmd0aCkscD1bXSxzPTA7czxlLmxlbmd0aDsrK3MpaWYoaVtzXSl7dmFyIGM9cC5sZW5ndGg7ZltzXT1jLHAucHVzaChlW3NdKX1lbHNlIGZbc109LTE7Zm9yKHZhciBkPVtdLHM9MDtzPHQubGVuZ3RoOysrcyl7dmFyIGc9dFtzXTtpW2dbMF1dJiZpW2dbMV1dJiZkLnB1c2goW2ZbZ1swXV0sZltnWzFdXV0pfXJldHVybltkLHBdfTt2YXIgbj10KFwiZWRnZXMtdG8tYWRqYWNlbmN5LWxpc3RcIil9LHtcImVkZ2VzLXRvLWFkamFjZW5jeS1saXN0XCI6MTY0fV0sNDYxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9Yyh0LGUpO3Q9clswXTtmb3IodmFyIGg9KGU9clsxXSkubGVuZ3RoLGY9KHQubGVuZ3RoLG4odCxlLmxlbmd0aCkpLHA9MDtwPGg7KytwKWlmKGZbcF0ubGVuZ3RoJTI9PTEpdGhyb3cgbmV3IEVycm9yKFwicGxhbmFyLWdyYXBoLXRvLXBvbHlsaW5lOiBncmFwaCBtdXN0IGJlIG1hbmlmb2xkXCIpO3ZhciBkPWkodCxlKTtmb3IodmFyIGc9KGQ9ZC5maWx0ZXIoZnVuY3Rpb24odCl7Zm9yKHZhciByPXQubGVuZ3RoLG49WzBdLGk9MDtpPHI7KytpKXt2YXIgYT1lW3RbaV1dLGw9ZVt0WyhpKzEpJXJdXSxjPW8oLWFbMF0sYVsxXSksdT1vKC1hWzBdLGxbMV0pLGg9byhsWzBdLGFbMV0pLGY9byhsWzBdLGxbMV0pO249cyhuLHMocyhjLHUpLHMoaCxmKSkpfXJldHVybiBuW24ubGVuZ3RoLTFdPjB9KSkubGVuZ3RoLHY9bmV3IEFycmF5KGcpLG09bmV3IEFycmF5KGcpLHA9MDtwPGc7KytwKXt2W3BdPXA7dmFyIHk9bmV3IEFycmF5KGcpLHg9ZFtwXS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KSxiPWEoW3hdKSxfPTA7dDpmb3IodmFyIHc9MDt3PGc7Kyt3KWlmKHlbd109MCxwIT09dyl7Zm9yKHZhciBrPWRbd10sQT1rLmxlbmd0aCxUPTA7VDxBOysrVCl7dmFyIE09YihlW2tbVF1dKTtpZigwIT09TSl7TTwwJiYoeVt3XT0xLF8rPTEpO2NvbnRpbnVlIHR9fXlbd109MSxfKz0xfW1bcF09W18scCx5XX1tLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS10WzBdfSk7Zm9yKHZhciBwPTA7cDxnOysrcClmb3IodmFyIHk9bVtwXSxTPXlbMV0sRT15WzJdLHc9MDt3PGc7Kyt3KUVbd10mJih2W3ddPVMpO2Zvcih2YXIgQz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKWVbcl09W107cmV0dXJuIGV9KGcpLHA9MDtwPGc7KytwKUNbcF0ucHVzaCh2W3BdKSxDW3ZbcF1dLnB1c2gocCk7Zm9yKHZhciBMPXt9LHo9dShoLCExKSxwPTA7cDxnOysrcClmb3IodmFyIGs9ZFtwXSxBPWsubGVuZ3RoLHc9MDt3PEE7Kyt3KXt2YXIgTz1rW3ddLEk9a1sodysxKSVBXSxEPU1hdGgubWluKE8sSSkrXCI6XCIrTWF0aC5tYXgoTyxJKTtpZihEIGluIEwpe3ZhciBQPUxbRF07Q1tQXS5wdXNoKHApLENbcF0ucHVzaChQKSx6W09dPXpbSV09ITB9ZWxzZSBMW0RdPXB9ZnVuY3Rpb24gUih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj0wO3I8ZTsrK3IpaWYoIXpbdFtyXV0pcmV0dXJuITE7cmV0dXJuITB9Zm9yKHZhciBGPVtdLEI9dShnLC0xKSxwPTA7cDxnOysrcCl2W3BdIT09cHx8UihkW3BdKT9CW3BdPS0xOihGLnB1c2gocCksQltwXT0wKTt2YXIgcj1bXTtmb3IoO0YubGVuZ3RoPjA7KXt2YXIgTj1GLnBvcCgpLGo9Q1tOXTtsKGosZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSk7dmFyIFYsVT1qLmxlbmd0aCxxPUJbTl07aWYoMD09PXEpe3ZhciBrPWRbTl07Vj1ba119Zm9yKHZhciBwPTA7cDxVOysrcCl7dmFyIEg9altwXTtpZighKEJbSF0+PTApJiYoQltIXT0xXnEsRi5wdXNoKEgpLDA9PT1xKSl7dmFyIGs9ZFtIXTtSKGspfHwoay5yZXZlcnNlKCksVi5wdXNoKGspKX19MD09PXEmJnIucHVzaChWKX1yZXR1cm4gcn07dmFyIG49dChcImVkZ2VzLXRvLWFkamFjZW5jeS1saXN0XCIpLGk9dChcInBsYW5hci1kdWFsXCIpLGE9dChcInBvaW50LWluLWJpZy1wb2x5Z29uXCIpLG89dChcInR3by1wcm9kdWN0XCIpLHM9dChcInJvYnVzdC1zdW1cIiksbD10KFwidW5pcVwiKSxjPXQoXCIuL2xpYi90cmltLWxlYXZlc1wiKTtmdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWU7cmV0dXJuIHJ9fSx7XCIuL2xpYi90cmltLWxlYXZlc1wiOjQ2MCxcImVkZ2VzLXRvLWFkamFjZW5jeS1saXN0XCI6MTY0LFwicGxhbmFyLWR1YWxcIjo0NTksXCJwb2ludC1pbi1iaWctcG9seWdvblwiOjQ2NSxcInJvYnVzdC1zdW1cIjo1MDAsXCJ0d28tcHJvZHVjdFwiOjUyOCx1bmlxOjUzMn1dLDQ2MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi9xdWFkXCIpfSx7XCIuL3F1YWRcIjo0NjR9XSw0NjM6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMTAyXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MTAyfV0sNDY0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImJpbmFyeS1zZWFyY2gtYm91bmRzXCIpLGk9dChcImNsYW1wXCIpLGE9dChcInBhcnNlLXJlY3RcIiksbz10KFwiYXJyYXktYm91bmRzXCIpLHM9dChcInBpY2stYnktYWxpYXNcIiksbD10KFwiZGVmaW5lZFwiKSxjPXQoXCJmbGF0dGVuLXZlcnRleC1kYXRhXCIpLHU9dChcImlzLW9ialwiKSxoPXQoXCJkdHlwZVwiKSxmPXQoXCJtYXRoLWxvZzJcIik7ZnVuY3Rpb24gcCh0LGUpe2Zvcih2YXIgcj1lWzBdLG49ZVsxXSxhPTEvKGVbMl0tciksbz0xLyhlWzNdLW4pLHM9bmV3IEFycmF5KHQubGVuZ3RoKSxsPTAsYz10Lmxlbmd0aC8yO2w8YztsKyspc1syKmxdPWkoKHRbMipsXS1yKSphLDAsMSksc1syKmwrMV09aSgodFsyKmwrMV0tbikqbywwLDEpO3JldHVybiBzfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2V8fChlPXt9KSx0PWModCxcImZsb2F0NjRcIiksZT1zKGUse2JvdW5kczpcInJhbmdlIGJvdW5kcyBkYXRhQm94IGRhdGFib3hcIixtYXhEZXB0aDpcImRlcHRoIG1heERlcHRoIG1heGRlcHRoIGxldmVsIG1heExldmVsIG1heGxldmVsIGxldmVsc1wiLGR0eXBlOlwidHlwZSBkdHlwZSBmb3JtYXQgb3V0IGRzdCBvdXRwdXQgZGVzdGluYXRpb25cIn0pO3ZhciByPWwoZS5tYXhEZXB0aCwyNTUpLGk9bChlLmJvdW5kcyxvKHQsMikpO2lbMF09PT1pWzJdJiZpWzJdKyssaVsxXT09PWlbM10mJmlbM10rKzt2YXIgZCxnPXAodCxpKSx2PXQubGVuZ3RoPj4+MTtlLmR0eXBlfHwoZS5kdHlwZT1cImFycmF5XCIpLFwic3RyaW5nXCI9PXR5cGVvZiBlLmR0eXBlP2Q9bmV3KGgoZS5kdHlwZSkpKHYpOmUuZHR5cGUmJihkPWUuZHR5cGUsQXJyYXkuaXNBcnJheShkKSYmKGQubGVuZ3RoPXYpKTtmb3IodmFyIG09MDttPHY7KyttKWRbbV09bTt2YXIgeT1bXSx4PVtdLGI9W10sXz1bXTshZnVuY3Rpb24gdChlLG4saSxhLG8scyl7aWYoIWEubGVuZ3RoKXJldHVybiBudWxsO3ZhciBsPXlbb118fCh5W29dPVtdKTt2YXIgYz1iW29dfHwoYltvXT1bXSk7dmFyIHU9eFtvXXx8KHhbb109W10pO3ZhciBoPWwubGVuZ3RoO28rKztpZihvPnIpe2Zvcih2YXIgZj0wO2Y8YS5sZW5ndGg7ZisrKWwucHVzaChhW2ZdKSxjLnB1c2gocyksdS5wdXNoKG51bGwsbnVsbCxudWxsLG51bGwpO3JldHVybiBofWwucHVzaChhWzBdKTtjLnB1c2gocyk7aWYoYS5sZW5ndGg8PTEpcmV0dXJuIHUucHVzaChudWxsLG51bGwsbnVsbCxudWxsKSxoO3ZhciBwPS41Kmk7dmFyIGQ9ZStwLHY9bitwO3ZhciBtPVtdLF89W10sdz1bXSxrPVtdO2Zvcih2YXIgQT0xLFQ9YS5sZW5ndGg7QTxUO0ErKyl7dmFyIE09YVtBXSxTPWdbMipNXSxFPWdbMipNKzFdO1M8ZD9FPHY/bS5wdXNoKE0pOl8ucHVzaChNKTpFPHY/dy5wdXNoKE0pOmsucHVzaChNKX1zPDw9Mjt1LnB1c2godChlLG4scCxtLG8scyksdChlLHYscCxfLG8scysxKSx0KGQsbixwLHcsbyxzKzIpLHQoZCx2LHAsayxvLHMrMykpO3JldHVybiBofSgwLDAsMSxkLDAsMSk7Zm9yKHZhciB3PTAsaz0wO2s8eS5sZW5ndGg7aysrKXt2YXIgQT15W2tdO2lmKGQuc2V0KWQuc2V0KEEsdyk7ZWxzZSBmb3IodmFyIFQ9MCxNPUEubGVuZ3RoO1Q8TTtUKyspZFtUK3ddPUFbVF07dmFyIFM9dyt5W2tdLmxlbmd0aDtfW2tdPVt3LFNdLHc9U31yZXR1cm4gZC5yYW5nZT1mdW5jdGlvbigpe3ZhciBlLHI9W10sbz1hcmd1bWVudHMubGVuZ3RoO2Zvcig7by0tOylyW29dPWFyZ3VtZW50c1tvXTtpZih1KHJbci5sZW5ndGgtMV0pKXt2YXIgYz1yLnBvcCgpO3IubGVuZ3RofHxudWxsPT1jLngmJm51bGw9PWMubCYmbnVsbD09Yy5sZWZ0fHwocj1bY10sZT17fSksZT1zKGMse2xldmVsOlwibGV2ZWwgbWF4TGV2ZWxcIixkOlwiZCBkaWFtIGRpYW1ldGVyIHIgcmFkaXVzIHB4IHB4U2l6ZSBwaXhlbCBwaXhlbFNpemUgbWF4RCBzaXplIG1pblNpemVcIixsb2Q6XCJsb2QgZGV0YWlscyByYW5nZXMgb2Zmc2V0c1wifSl9ZWxzZSBlPXt9O3IubGVuZ3RofHwocj1pKTt2YXIgaD1hLmFwcGx5KHZvaWQgMCxyKSxkPVtNYXRoLm1pbihoLngsaC54K2gud2lkdGgpLE1hdGgubWluKGgueSxoLnkraC5oZWlnaHQpLE1hdGgubWF4KGgueCxoLngraC53aWR0aCksTWF0aC5tYXgoaC55LGgueStoLmhlaWdodCldLGc9ZFswXSx2PWRbMV0sbT1kWzJdLHc9ZFszXSxrPXAoW2csdixtLHddLGkpLEE9a1swXSxUPWtbMV0sTT1rWzJdLFM9a1szXSxDPWwoZS5sZXZlbCx5Lmxlbmd0aCk7aWYobnVsbCE9ZS5kKXt2YXIgTDtcIm51bWJlclwiPT10eXBlb2YgZS5kP0w9W2UuZCxlLmRdOmUuZC5sZW5ndGgmJihMPWUuZCksQz1NYXRoLm1pbihNYXRoLm1heChNYXRoLmNlaWwoLWYoTWF0aC5hYnMoTFswXSkvKGlbMl0taVswXSkpKSxNYXRoLmNlaWwoLWYoTWF0aC5hYnMoTFsxXSkvKGlbM10taVsxXSkpKSksQyl9aWYoQz1NYXRoLm1pbihDLHkubGVuZ3RoKSxlLmxvZClyZXR1cm4gZnVuY3Rpb24odCxlLHIsaSxhKXtmb3IodmFyIG89W10scz0wO3M8YTtzKyspe3ZhciBsPWJbc10sYz1fW3NdWzBdLHU9RSh0LGUscyksaD1FKHIsaSxzKSxmPW4uZ2UobCx1KSxwPW4uZ3QobCxoLGYsbC5sZW5ndGgtMSk7b1tzXT1bZitjLHArY119cmV0dXJuIG99KEEsVCxNLFMsQyk7dmFyIHo9W107cmV0dXJuIGZ1bmN0aW9uIGUocixuLGksYSxvLHMpe2lmKG51bGwhPT1vJiZudWxsIT09cyl7dmFyIGw9citpLGM9bitpO2lmKCEoQT5sfHxUPmN8fE08cnx8UzxufHxhPj1DfHxvPT09cykpe3ZhciB1PXlbYV07dm9pZCAwPT09cyYmKHM9dS5sZW5ndGgpO2Zvcih2YXIgaD1vO2g8cztoKyspe3ZhciBmPXVbaF0scD10WzIqZl0sZD10WzIqZisxXTtwPj1nJiZwPD1tJiZkPj12JiZkPD13JiZ6LnB1c2goZil9dmFyIGI9eFthXSxfPWJbNCpvKzBdLGs9Yls0Km8rMV0sRT1iWzQqbysyXSxMPWJbNCpvKzNdLE89ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bnVsbCxuPTA7bnVsbD09PXI7KWlmKHI9dFs0KmUrbl0sKytuPnQubGVuZ3RoKXJldHVybiBudWxsO3JldHVybiByfShiLG8rMSksST0uNSppLEQ9YSsxO2UocixuLEksRCxfLGt8fEV8fEx8fE8pLGUocixuK0ksSSxELGssRXx8THx8TyksZShyK0ksbixJLEQsRSxMfHxPKSxlKHIrSSxuK0ksSSxELEwsTyl9fX0oMCwwLDEsMCwwLDEpLHp9LGQ7ZnVuY3Rpb24gRSh0LGUscil7Zm9yKHZhciBuPTEsaT0uNSxhPS41LG89LjUscz0wO3M8cjtzKyspbjw8PTIsbis9dDxpP2U8YT8wOjE6ZTxhPzI6MyxvKj0uNSxpKz10PGk/LW86byxhKz1lPGE/LW86bztyZXR1cm4gbn19fSx7XCJhcnJheS1ib3VuZHNcIjo1NixcImJpbmFyeS1zZWFyY2gtYm91bmRzXCI6NDYzLGNsYW1wOjEwNixkZWZpbmVkOjE1NixkdHlwZToxNjEsXCJmbGF0dGVuLXZlcnRleC1kYXRhXCI6MjI0LFwiaXMtb2JqXCI6NDE0LFwibWF0aC1sb2cyXCI6NDI1LFwicGFyc2UtcmVjdFwiOjQ1MixcInBpY2stYnktYWxpYXNcIjo0NTh9XSw0NjU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9W10sYT1bXSxzPTA7czxlOysrcylmb3IodmFyIHU9dFtzXSxoPXUubGVuZ3RoLGY9aC0xLHA9MDtwPGg7Zj1wKyspe3ZhciBkPXVbZl0sZz11W3BdO2RbMF09PT1nWzBdP2EucHVzaChbZCxnXSk6ci5wdXNoKFtkLGddKX1pZigwPT09ci5sZW5ndGgpcmV0dXJuIDA9PT1hLmxlbmd0aD9jOih2PWwoYSksZnVuY3Rpb24odCl7cmV0dXJuIHYodFswXSx0WzFdKT8wOjF9KTt2YXIgdjt2YXIgbT1pKHIpLHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIGk9by5sZShlLHJbMF0pO2lmKGk8MClyZXR1cm4gMTt2YXIgYT10W2ldO2lmKCFhKXtpZighKGk+MCYmZVtpXT09PXJbMF0pKXJldHVybiAxO2E9dFtpLTFdfWZvcih2YXIgcz0xO2E7KXt2YXIgbD1hLmtleSxjPW4ocixsWzBdLGxbMV0pO2lmKGxbMF1bMF08bFsxXVswXSlpZihjPDApYT1hLmxlZnQ7ZWxzZXtpZighKGM+MCkpcmV0dXJuIDA7cz0tMSxhPWEucmlnaHR9ZWxzZSBpZihjPjApYT1hLmxlZnQ7ZWxzZXtpZighKGM8MCkpcmV0dXJuIDA7cz0xLGE9YS5yaWdodH19cmV0dXJuIHN9fShtLnNsYWJzLG0uY29vcmRpbmF0ZXMpO3JldHVybiAwPT09YS5sZW5ndGg/eTpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdChyWzBdLHJbMV0pPzA6ZShyKX19KGwoYSkseSl9O3ZhciBuPXQoXCJyb2J1c3Qtb3JpZW50YXRpb25cIilbM10saT10KFwic2xhYi1kZWNvbXBvc2l0aW9uXCIpLGE9dChcImludGVydmFsLXRyZWUtMWRcIiksbz10KFwiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIik7ZnVuY3Rpb24gcygpe3JldHVybiEwfWZ1bmN0aW9uIGwodCl7Zm9yKHZhciBlPXt9LHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG49dFtyXSxpPW5bMF1bMF0sbz1uWzBdWzFdLGw9blsxXVsxXSxjPVtNYXRoLm1pbihvLGwpLE1hdGgubWF4KG8sbCldO2kgaW4gZT9lW2ldLnB1c2goYyk6ZVtpXT1bY119dmFyIHU9e30saD1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8aC5sZW5ndGg7KytyKXt2YXIgZj1lW2hbcl1dO3VbaFtyXV09YShmKX1yZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIG49dFtlXTtyZXR1cm4hIW4mJiEhbi5xdWVyeVBvaW50KHIscyl9fSh1KX1mdW5jdGlvbiBjKHQpe3JldHVybiAxfX0se1wiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIjo4MixcImludGVydmFsLXRyZWUtMWRcIjo0MDcsXCJyb2J1c3Qtb3JpZW50YXRpb25cIjo0OTUsXCJzbGFiLWRlY29tcG9zaXRpb25cIjo1MTF9XSw0NjY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbixpPXQoXCIuL2xpYi9idWlsZC1sb2dcIiksYT10KFwiLi9saWIvZXBzaWxvblwiKSxvPXQoXCIuL2xpYi9pbnRlcnNlY3RlclwiKSxzPXQoXCIuL2xpYi9zZWdtZW50LWNoYWluZXJcIiksbD10KFwiLi9saWIvc2VnbWVudC1zZWxlY3RvclwiKSxjPXQoXCIuL2xpYi9nZW9qc29uXCIpLHU9ITEsaD1hKCk7ZnVuY3Rpb24gZih0LGUscil7dmFyIGk9bi5zZWdtZW50cyh0KSxhPW4uc2VnbWVudHMoZSksbz1yKG4uY29tYmluZShpLGEpKTtyZXR1cm4gbi5wb2x5Z29uKG8pfW49e2J1aWxkTG9nOmZ1bmN0aW9uKHQpe3JldHVybiEwPT09dD91PWkoKTohMT09PXQmJih1PSExKSwhMSE9PXUmJnUubGlzdH0sZXBzaWxvbjpmdW5jdGlvbih0KXtyZXR1cm4gaC5lcHNpbG9uKHQpfSxzZWdtZW50czpmdW5jdGlvbih0KXt2YXIgZT1vKCEwLGgsdSk7cmV0dXJuIHQucmVnaW9ucy5mb3JFYWNoKGUuYWRkUmVnaW9uKSx7c2VnbWVudHM6ZS5jYWxjdWxhdGUodC5pbnZlcnRlZCksaW52ZXJ0ZWQ6dC5pbnZlcnRlZH19LGNvbWJpbmU6ZnVuY3Rpb24odCxlKXtyZXR1cm57Y29tYmluZWQ6byghMSxoLHUpLmNhbGN1bGF0ZSh0LnNlZ21lbnRzLHQuaW52ZXJ0ZWQsZS5zZWdtZW50cyxlLmludmVydGVkKSxpbnZlcnRlZDE6dC5pbnZlcnRlZCxpbnZlcnRlZDI6ZS5pbnZlcnRlZH19LHNlbGVjdFVuaW9uOmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLnVuaW9uKHQuY29tYmluZWQsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZDF8fHQuaW52ZXJ0ZWQyfX0sc2VsZWN0SW50ZXJzZWN0OmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLmludGVyc2VjdCh0LmNvbWJpbmVkLHUpLGludmVydGVkOnQuaW52ZXJ0ZWQxJiZ0LmludmVydGVkMn19LHNlbGVjdERpZmZlcmVuY2U6ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwuZGlmZmVyZW5jZSh0LmNvbWJpbmVkLHUpLGludmVydGVkOnQuaW52ZXJ0ZWQxJiYhdC5pbnZlcnRlZDJ9fSxzZWxlY3REaWZmZXJlbmNlUmV2OmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLmRpZmZlcmVuY2VSZXYodC5jb21iaW5lZCx1KSxpbnZlcnRlZDohdC5pbnZlcnRlZDEmJnQuaW52ZXJ0ZWQyfX0sc2VsZWN0WG9yOmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLnhvcih0LmNvbWJpbmVkLHUpLGludmVydGVkOnQuaW52ZXJ0ZWQxIT09dC5pbnZlcnRlZDJ9fSxwb2x5Z29uOmZ1bmN0aW9uKHQpe3JldHVybntyZWdpb25zOnModC5zZWdtZW50cyxoLHUpLGludmVydGVkOnQuaW52ZXJ0ZWR9fSxwb2x5Z29uRnJvbUdlb0pTT046ZnVuY3Rpb24odCl7cmV0dXJuIGMudG9Qb2x5Z29uKG4sdCl9LHBvbHlnb25Ub0dlb0pTT046ZnVuY3Rpb24odCl7cmV0dXJuIGMuZnJvbVBvbHlnb24obixoLHQpfSx1bmlvbjpmdW5jdGlvbih0LGUpe3JldHVybiBmKHQsZSxuLnNlbGVjdFVuaW9uKX0saW50ZXJzZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYodCxlLG4uc2VsZWN0SW50ZXJzZWN0KX0sZGlmZmVyZW5jZTpmdW5jdGlvbih0LGUpe3JldHVybiBmKHQsZSxuLnNlbGVjdERpZmZlcmVuY2UpfSxkaWZmZXJlbmNlUmV2OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYodCxlLG4uc2VsZWN0RGlmZmVyZW5jZVJldil9LHhvcjpmdW5jdGlvbih0LGUpe3JldHVybiBmKHQsZSxuLnNlbGVjdFhvcil9fSxcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiYod2luZG93LlBvbHlCb29sPW4pLGUuZXhwb3J0cz1ufSx7XCIuL2xpYi9idWlsZC1sb2dcIjo0NjcsXCIuL2xpYi9lcHNpbG9uXCI6NDY4LFwiLi9saWIvZ2VvanNvblwiOjQ2OSxcIi4vbGliL2ludGVyc2VjdGVyXCI6NDcwLFwiLi9saWIvc2VnbWVudC1jaGFpbmVyXCI6NDcyLFwiLi9saWIvc2VnbWVudC1zZWxlY3RvclwiOjQ3M31dLDQ2NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGU9MCxyPSExO2Z1bmN0aW9uIG4oZSxyKXtyZXR1cm4gdC5saXN0LnB1c2goe3R5cGU6ZSxkYXRhOnI/SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyKSk6dm9pZCAwfSksdH1yZXR1cm4gdD17bGlzdDpbXSxzZWdtZW50SWQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSsrfSxjaGVja0ludGVyc2VjdGlvbjpmdW5jdGlvbih0LGUpe3JldHVybiBuKFwiY2hlY2tcIix7c2VnMTp0LHNlZzI6ZX0pfSxzZWdtZW50Q2hvcDpmdW5jdGlvbih0LGUpe3JldHVybiBuKFwiZGl2X3NlZ1wiLHtzZWc6dCxwdDplfSksbihcImNob3BcIix7c2VnOnQscHQ6ZX0pfSxzdGF0dXNSZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJwb3Bfc2VnXCIse3NlZzp0fSl9LHNlZ21lbnRVcGRhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJzZWdfdXBkYXRlXCIse3NlZzp0fSl9LHNlZ21lbnROZXc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihcIm5ld19zZWdcIix7c2VnOnQscHJpbWFyeTplfSl9LHNlZ21lbnRSZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJyZW1fc2VnXCIse3NlZzp0fSl9LHRlbXBTdGF0dXM6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKFwidGVtcF9zdGF0dXNcIix7c2VnOnQsYWJvdmU6ZSxiZWxvdzpyfSl9LHJld2luZDpmdW5jdGlvbih0KXtyZXR1cm4gbihcInJld2luZFwiLHtzZWc6dH0pfSxzdGF0dXM6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKFwic3RhdHVzXCIse3NlZzp0LGFib3ZlOmUsYmVsb3c6cn0pfSx2ZXJ0OmZ1bmN0aW9uKGUpe3JldHVybiBlPT09cj90OihyPWUsbihcInZlcnRcIix7eDplfSkpfSxsb2c6ZnVuY3Rpb24odCl7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIHQmJih0PUpTT04uc3RyaW5naWZ5KHQsITEsXCIgIFwiKSksbihcImxvZ1wiLHt0eHQ6dH0pfSxyZXNldDpmdW5jdGlvbigpe3JldHVybiBuKFwicmVzZXRcIil9LHNlbGVjdGVkOmZ1bmN0aW9uKHQpe3JldHVybiBuKFwic2VsZWN0ZWRcIix7c2Vnczp0fSl9LGNoYWluU3RhcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJjaGFpbl9zdGFydFwiLHtzZWc6dH0pfSxjaGFpblJlbW92ZUhlYWQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihcImNoYWluX3JlbV9oZWFkXCIse2luZGV4OnQscHQ6ZX0pfSxjaGFpblJlbW92ZVRhaWw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihcImNoYWluX3JlbV90YWlsXCIse2luZGV4OnQscHQ6ZX0pfSxjaGFpbk5ldzpmdW5jdGlvbih0LGUpe3JldHVybiBuKFwiY2hhaW5fbmV3XCIse3B0MTp0LHB0MjplfSl9LGNoYWluTWF0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJjaGFpbl9tYXRjaFwiLHtpbmRleDp0fSl9LGNoYWluQ2xvc2U6ZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJjaGFpbl9jbG9zZVwiLHtpbmRleDp0fSl9LGNoYWluQWRkSGVhZDpmdW5jdGlvbih0LGUpe3JldHVybiBuKFwiY2hhaW5fYWRkX2hlYWRcIix7aW5kZXg6dCxwdDplfSl9LGNoYWluQWRkVGFpbDpmdW5jdGlvbih0LGUpe3JldHVybiBuKFwiY2hhaW5fYWRkX3RhaWxcIix7aW5kZXg6dCxwdDplfSl9LGNoYWluQ29ubmVjdDpmdW5jdGlvbih0LGUpe3JldHVybiBuKFwiY2hhaW5fY29uXCIse2luZGV4MTp0LGluZGV4MjplfSl9LGNoYWluUmV2ZXJzZTpmdW5jdGlvbih0KXtyZXR1cm4gbihcImNoYWluX3JldlwiLHtpbmRleDp0fSl9LGNoYWluSm9pbjpmdW5jdGlvbih0LGUpe3JldHVybiBuKFwiY2hhaW5fam9pblwiLHtpbmRleDE6dCxpbmRleDI6ZX0pfSxkb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG4oXCJkb25lXCIpfX19fSx7fV0sNDY4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe1wibnVtYmVyXCIhPXR5cGVvZiB0JiYodD0xZS0xMCk7dmFyIGU9e2Vwc2lsb246ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUmJih0PWUpLHR9LHBvaW50QWJvdmVPck9uTGluZTpmdW5jdGlvbihlLHIsbil7dmFyIGk9clswXSxhPXJbMV0sbz1uWzBdLHM9blsxXSxsPWVbMF07cmV0dXJuKG8taSkqKGVbMV0tYSktKHMtYSkqKGwtaSk+PS10fSxwb2ludEJldHdlZW46ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWVbMV0tclsxXSxhPW5bMF0tclswXSxvPWVbMF0tclswXSxzPW5bMV0tclsxXSxsPW8qYStpKnM7cmV0dXJuIShsPHR8fGwtKGEqYStzKnMpPi10KX0scG9pbnRzU2FtZVg6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gTWF0aC5hYnMoZVswXS1yWzBdKTx0fSxwb2ludHNTYW1lWTpmdW5jdGlvbihlLHIpe3JldHVybiBNYXRoLmFicyhlWzFdLXJbMV0pPHR9LHBvaW50c1NhbWU6ZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5wb2ludHNTYW1lWCh0LHIpJiZlLnBvaW50c1NhbWVZKHQscil9LHBvaW50c0NvbXBhcmU6ZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5wb2ludHNTYW1lWCh0LHIpP2UucG9pbnRzU2FtZVkodCxyKT8wOnRbMV08clsxXT8tMToxOnRbMF08clswXT8tMToxfSxwb2ludHNDb2xsaW5lYXI6ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWVbMF0tclswXSxhPWVbMV0tclsxXSxvPXJbMF0tblswXSxzPXJbMV0tblsxXTtyZXR1cm4gTWF0aC5hYnMoaSpzLW8qYSk8dH0sbGluZXNJbnRlcnNlY3Q6ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9clswXS1lWzBdLG89clsxXS1lWzFdLHM9aVswXS1uWzBdLGw9aVsxXS1uWzFdLGM9YSpsLW8qcztpZihNYXRoLmFicyhjKTx0KXJldHVybiExO3ZhciB1PWVbMF0tblswXSxoPWVbMV0tblsxXSxmPShzKmgtbCp1KS9jLHA9KGEqaC1vKnUpL2MsZD17YWxvbmdBOjAsYWxvbmdCOjAscHQ6W2VbMF0rZiphLGVbMV0rZipvXX07cmV0dXJuIGQuYWxvbmdBPWY8PS10Py0yOmY8dD8tMTpmLTE8PS10PzA6Zi0xPHQ/MToyLGQuYWxvbmdCPXA8PS10Py0yOnA8dD8tMTpwLTE8PS10PzA6cC0xPHQ/MToyLGR9LHBvaW50SW5zaWRlUmVnaW9uOmZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPWVbMF0saT1lWzFdLGE9cltyLmxlbmd0aC0xXVswXSxvPXJbci5sZW5ndGgtMV1bMV0scz0hMSxsPTA7bDxyLmxlbmd0aDtsKyspe3ZhciBjPXJbbF1bMF0sdT1yW2xdWzFdO3UtaT50IT1vLWk+dCYmKGEtYykqKGktdSkvKG8tdSkrYy1uPnQmJihzPSFzKSxhPWMsbz11fXJldHVybiBzfX07cmV0dXJuIGV9fSx7fV0sNDY5OltmdW5jdGlvbih0LGUscil7dmFyIG49e3RvUG9seWdvbjpmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoZSl7aWYoZS5sZW5ndGg8PTApcmV0dXJuIHQuc2VnbWVudHMoe2ludmVydGVkOiExLHJlZ2lvbnM6W119KTtmdW5jdGlvbiByKGUpe3ZhciByPWUuc2xpY2UoMCxlLmxlbmd0aC0xKTtyZXR1cm4gdC5zZWdtZW50cyh7aW52ZXJ0ZWQ6ITEscmVnaW9uczpbcl19KX1mb3IodmFyIG49cihlWzBdKSxpPTE7aTxlLmxlbmd0aDtpKyspbj10LnNlbGVjdERpZmZlcmVuY2UodC5jb21iaW5lKG4scihlW2ldKSkpO3JldHVybiBufWlmKFwiUG9seWdvblwiPT09ZS50eXBlKXJldHVybiB0LnBvbHlnb24ocihlLmNvb3JkaW5hdGVzKSk7aWYoXCJNdWx0aVBvbHlnb25cIj09PWUudHlwZSl7Zm9yKHZhciBuPXQuc2VnbWVudHMoe2ludmVydGVkOiExLHJlZ2lvbnM6W119KSxpPTA7aTxlLmNvb3JkaW5hdGVzLmxlbmd0aDtpKyspbj10LnNlbGVjdFVuaW9uKHQuY29tYmluZShuLHIoZS5jb29yZGluYXRlc1tpXSkpKTtyZXR1cm4gdC5wb2x5Z29uKG4pfXRocm93IG5ldyBFcnJvcihcIlBvbHlCb29sOiBDYW5ub3QgY29udmVydCBHZW9KU09OIG9iamVjdCB0byBQb2x5Qm9vbCBwb2x5Z29uXCIpfSxmcm9tUG9seWdvbjpmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LHIpe3JldHVybiBlLnBvaW50SW5zaWRlUmVnaW9uKFsuNSoodFswXVswXSt0WzFdWzBdKSwuNSoodFswXVsxXSt0WzFdWzFdKV0scil9ZnVuY3Rpb24gaSh0KXtyZXR1cm57cmVnaW9uOnQsY2hpbGRyZW46W119fXI9dC5wb2x5Z29uKHQuc2VnbWVudHMocikpO3ZhciBhPWkobnVsbCk7ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5jaGlsZHJlbi5sZW5ndGg7cisrKXtpZihuKGUsKHM9dC5jaGlsZHJlbltyXSkucmVnaW9uKSlyZXR1cm4gdm9pZCBvKHMsZSl9dmFyIGE9aShlKTtmb3Iocj0wO3I8dC5jaGlsZHJlbi5sZW5ndGg7cisrKXt2YXIgcztuKChzPXQuY2hpbGRyZW5bcl0pLnJlZ2lvbixlKSYmKGEuY2hpbGRyZW4ucHVzaChzKSx0LmNoaWxkcmVuLnNwbGljZShyLDEpLHItLSl9dC5jaGlsZHJlbi5wdXNoKGEpfWZvcih2YXIgcz0wO3M8ci5yZWdpb25zLmxlbmd0aDtzKyspe3ZhciBsPXIucmVnaW9uc1tzXTtsLmxlbmd0aDwzfHxvKGEsbCl9ZnVuY3Rpb24gYyh0LGUpe2Zvcih2YXIgcj0wLG49dFt0Lmxlbmd0aC0xXVswXSxpPXRbdC5sZW5ndGgtMV1bMV0sYT1bXSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb11bMF0sbD10W29dWzFdO2EucHVzaChbcyxsXSkscis9bCpuLXMqaSxuPXMsaT1sfXJldHVybiByPDAhPT1lJiZhLnJldmVyc2UoKSxhLnB1c2goW2FbMF1bMF0sYVswXVsxXV0pLGF9dmFyIHU9W107ZnVuY3Rpb24gaCh0KXt2YXIgZT1bYyh0LnJlZ2lvbiwhMSldO3UucHVzaChlKTtmb3IodmFyIHI9MDtyPHQuY2hpbGRyZW4ubGVuZ3RoO3IrKyllLnB1c2goZih0LmNoaWxkcmVuW3JdKSl9ZnVuY3Rpb24gZih0KXtmb3IodmFyIGU9MDtlPHQuY2hpbGRyZW4ubGVuZ3RoO2UrKyloKHQuY2hpbGRyZW5bZV0pO3JldHVybiBjKHQucmVnaW9uLCEwKX1mb3Iocz0wO3M8YS5jaGlsZHJlbi5sZW5ndGg7cysrKWgoYS5jaGlsZHJlbltzXSk7cmV0dXJuIHUubGVuZ3RoPD0wP3t0eXBlOlwiUG9seWdvblwiLGNvb3JkaW5hdGVzOltdfToxPT11Lmxlbmd0aD97dHlwZTpcIlBvbHlnb25cIixjb29yZGluYXRlczp1WzBdfTp7dHlwZTpcIk11bHRpUG9seWdvblwiLGNvb3JkaW5hdGVzOnV9fX07ZS5leHBvcnRzPW59LHt9XSw0NzA6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi9saW5rZWQtbGlzdFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGkodCxlLG4pe3JldHVybntpZDpyP3Iuc2VnbWVudElkKCk6LTEsc3RhcnQ6dCxlbmQ6ZSxteUZpbGw6e2Fib3ZlOm4ubXlGaWxsLmFib3ZlLGJlbG93Om4ubXlGaWxsLmJlbG93fSxvdGhlckZpbGw6bnVsbH19dmFyIGE9bi5jcmVhdGUoKTtmdW5jdGlvbiBvKHQscil7YS5pbnNlcnRCZWZvcmUodCxmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24odCxyLG4saSxhLG8pe3ZhciBzPWUucG9pbnRzQ29tcGFyZShyLGEpO3JldHVybiAwIT09cz9zOmUucG9pbnRzU2FtZShuLG8pPzA6dCE9PWk/dD8xOi0xOmUucG9pbnRBYm92ZU9yT25MaW5lKG4saT9hOm8saT9vOmEpPzE6LTF9KHQuaXNTdGFydCx0LnB0LHIsbi5pc1N0YXJ0LG4ucHQsbi5vdGhlci5wdCk8MH0pfWZ1bmN0aW9uIHModCxlKXt2YXIgcj1mdW5jdGlvbih0LGUpe3ZhciByPW4ubm9kZSh7aXNTdGFydDohMCxwdDp0LnN0YXJ0LHNlZzp0LHByaW1hcnk6ZSxvdGhlcjpudWxsLHN0YXR1czpudWxsfSk7cmV0dXJuIG8ocix0LmVuZCkscn0odCxlKTtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3ZhciBpPW4ubm9kZSh7aXNTdGFydDohMSxwdDplLmVuZCxzZWc6ZSxwcmltYXJ5OnIsb3RoZXI6dCxzdGF0dXM6bnVsbH0pO3Qub3RoZXI9aSxvKGksdC5wdCl9KHIsdCxlKSxyfWZ1bmN0aW9uIGwodCxlKXt2YXIgbj1pKGUsdC5zZWcuZW5kLHQuc2VnKTtyZXR1cm4gZnVuY3Rpb24odCxlKXtyJiZyLnNlZ21lbnRDaG9wKHQuc2VnLGUpLHQub3RoZXIucmVtb3ZlKCksdC5zZWcuZW5kPWUsdC5vdGhlci5wdD1lLG8odC5vdGhlcix0LnB0KX0odCxlKSxzKG4sdC5wcmltYXJ5KX1mdW5jdGlvbiBjKGksbyl7dmFyIHM9bi5jcmVhdGUoKTtmdW5jdGlvbiBjKHQpe3JldHVybiBzLmZpbmRUcmFuc2l0aW9uKGZ1bmN0aW9uKHIpe3ZhciBuLGksYSxvLHMsbDtyZXR1cm4gbj10LGk9ci5ldixhPW4uc2VnLnN0YXJ0LG89bi5zZWcuZW5kLHM9aS5zZWcuc3RhcnQsbD1pLnNlZy5lbmQsKGUucG9pbnRzQ29sbGluZWFyKGEscyxsKT9lLnBvaW50c0NvbGxpbmVhcihvLHMsbCk/MTplLnBvaW50QWJvdmVPck9uTGluZShvLHMsbCk/MTotMTplLnBvaW50QWJvdmVPck9uTGluZShhLHMsbCk/MTotMSk+MH0pfWZ1bmN0aW9uIHUodCxuKXt2YXIgaT10LnNlZyxhPW4uc2VnLG89aS5zdGFydCxzPWkuZW5kLGM9YS5zdGFydCx1PWEuZW5kO3ImJnIuY2hlY2tJbnRlcnNlY3Rpb24oaSxhKTt2YXIgaD1lLmxpbmVzSW50ZXJzZWN0KG8scyxjLHUpO2lmKCExPT09aCl7aWYoIWUucG9pbnRzQ29sbGluZWFyKG8scyxjKSlyZXR1cm4hMTtpZihlLnBvaW50c1NhbWUobyx1KXx8ZS5wb2ludHNTYW1lKHMsYykpcmV0dXJuITE7dmFyIGY9ZS5wb2ludHNTYW1lKG8sYykscD1lLnBvaW50c1NhbWUocyx1KTtpZihmJiZwKXJldHVybiBuO3ZhciBkPSFmJiZlLnBvaW50QmV0d2VlbihvLGMsdSksZz0hcCYmZS5wb2ludEJldHdlZW4ocyxjLHUpO2lmKGYpcmV0dXJuIGc/bChuLHMpOmwodCx1KSxuO2QmJihwfHwoZz9sKG4scyk6bCh0LHUpKSxsKG4sbykpfWVsc2UgMD09PWguYWxvbmdBJiYoLTE9PT1oLmFsb25nQj9sKHQsYyk6MD09PWguYWxvbmdCP2wodCxoLnB0KToxPT09aC5hbG9uZ0ImJmwodCx1KSksMD09PWguYWxvbmdCJiYoLTE9PT1oLmFsb25nQT9sKG4sbyk6MD09PWguYWxvbmdBP2wobixoLnB0KToxPT09aC5hbG9uZ0EmJmwobixzKSk7cmV0dXJuITF9Zm9yKHZhciBoPVtdOyFhLmlzRW1wdHkoKTspe3ZhciBmPWEuZ2V0SGVhZCgpO2lmKHImJnIudmVydChmLnB0WzBdKSxmLmlzU3RhcnQpe3ImJnIuc2VnbWVudE5ldyhmLnNlZyxmLnByaW1hcnkpO3ZhciBwPWMoZiksZD1wLmJlZm9yZT9wLmJlZm9yZS5ldjpudWxsLGc9cC5hZnRlcj9wLmFmdGVyLmV2Om51bGw7ZnVuY3Rpb24gdigpe2lmKGQpe3ZhciB0PXUoZixkKTtpZih0KXJldHVybiB0fXJldHVybiEhZyYmdShmLGcpfXImJnIudGVtcFN0YXR1cyhmLnNlZywhIWQmJmQuc2VnLCEhZyYmZy5zZWcpO3ZhciBtLHkseD12KCk7aWYoeCl0Pyh5PW51bGw9PT1mLnNlZy5teUZpbGwuYmVsb3d8fGYuc2VnLm15RmlsbC5hYm92ZSE9PWYuc2VnLm15RmlsbC5iZWxvdykmJih4LnNlZy5teUZpbGwuYWJvdmU9IXguc2VnLm15RmlsbC5hYm92ZSk6eC5zZWcub3RoZXJGaWxsPWYuc2VnLm15RmlsbCxyJiZyLnNlZ21lbnRVcGRhdGUoeC5zZWcpLGYub3RoZXIucmVtb3ZlKCksZi5yZW1vdmUoKTtpZihhLmdldEhlYWQoKSE9PWYpe3ImJnIucmV3aW5kKGYuc2VnKTtjb250aW51ZX10Pyh5PW51bGw9PT1mLnNlZy5teUZpbGwuYmVsb3d8fGYuc2VnLm15RmlsbC5hYm92ZSE9PWYuc2VnLm15RmlsbC5iZWxvdyxmLnNlZy5teUZpbGwuYmVsb3c9Zz9nLnNlZy5teUZpbGwuYWJvdmU6aSxmLnNlZy5teUZpbGwuYWJvdmU9eT8hZi5zZWcubXlGaWxsLmJlbG93OmYuc2VnLm15RmlsbC5iZWxvdyk6bnVsbD09PWYuc2VnLm90aGVyRmlsbCYmKG09Zz9mLnByaW1hcnk9PT1nLnByaW1hcnk/Zy5zZWcub3RoZXJGaWxsLmFib3ZlOmcuc2VnLm15RmlsbC5hYm92ZTpmLnByaW1hcnk/bzppLGYuc2VnLm90aGVyRmlsbD17YWJvdmU6bSxiZWxvdzptfSksciYmci5zdGF0dXMoZi5zZWcsISFkJiZkLnNlZywhIWcmJmcuc2VnKSxmLm90aGVyLnN0YXR1cz1wLmluc2VydChuLm5vZGUoe2V2OmZ9KSl9ZWxzZXt2YXIgYj1mLnN0YXR1cztpZihudWxsPT09Yil0aHJvdyBuZXcgRXJyb3IoXCJQb2x5Qm9vbDogWmVyby1sZW5ndGggc2VnbWVudCBkZXRlY3RlZDsgeW91ciBlcHNpbG9uIGlzIHByb2JhYmx5IHRvbyBzbWFsbCBvciB0b28gbGFyZ2VcIik7aWYocy5leGlzdHMoYi5wcmV2KSYmcy5leGlzdHMoYi5uZXh0KSYmdShiLnByZXYuZXYsYi5uZXh0LmV2KSxyJiZyLnN0YXR1c1JlbW92ZShiLmV2LnNlZyksYi5yZW1vdmUoKSwhZi5wcmltYXJ5KXt2YXIgXz1mLnNlZy5teUZpbGw7Zi5zZWcubXlGaWxsPWYuc2VnLm90aGVyRmlsbCxmLnNlZy5vdGhlckZpbGw9X31oLnB1c2goZi5zZWcpfWEuZ2V0SGVhZCgpLnJlbW92ZSgpfXJldHVybiByJiZyLmRvbmUoKSxofXJldHVybiB0P3thZGRSZWdpb246ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGksYSxvPXRbdC5sZW5ndGgtMV0sbD0wO2w8dC5sZW5ndGg7bCsrKXtuPW8sbz10W2xdO3ZhciBjPWUucG9pbnRzQ29tcGFyZShuLG8pOzAhPT1jJiZzKChpPWM8MD9uOm8sYT1jPDA/bzpuLHtpZDpyP3Iuc2VnbWVudElkKCk6LTEsc3RhcnQ6aSxlbmQ6YSxteUZpbGw6e2Fib3ZlOm51bGwsYmVsb3c6bnVsbH0sb3RoZXJGaWxsOm51bGx9KSwhMCl9fSxjYWxjdWxhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwhMSl9fTp7Y2FsY3VsYXRlOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7cyhpKHQuc3RhcnQsdC5lbmQsdCksITApfSksci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3MoaSh0LnN0YXJ0LHQuZW5kLHQpLCExKX0pLGMoZSxuKX19fX0se1wiLi9saW5rZWQtbGlzdFwiOjQ3MX1dLDQ3MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17Y3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9e3Jvb3Q6e3Jvb3Q6ITAsbmV4dDpudWxsfSxleGlzdHM6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lJiZlIT09dC5yb290fSxpc0VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10LnJvb3QubmV4dH0sZ2V0SGVhZDpmdW5jdGlvbigpe3JldHVybiB0LnJvb3QubmV4dH0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPXQucm9vdCxpPXQucm9vdC5uZXh0O251bGwhPT1pOyl7aWYocihpKSlyZXR1cm4gZS5wcmV2PWkucHJldixlLm5leHQ9aSxpLnByZXYubmV4dD1lLHZvaWQoaS5wcmV2PWUpO249aSxpPWkubmV4dH1uLm5leHQ9ZSxlLnByZXY9bixlLm5leHQ9bnVsbH0sZmluZFRyYW5zaXRpb246ZnVuY3Rpb24oZSl7Zm9yKHZhciByPXQucm9vdCxuPXQucm9vdC5uZXh0O251bGwhPT1uJiYhZShuKTspcj1uLG49bi5uZXh0O3JldHVybntiZWZvcmU6cj09PXQucm9vdD9udWxsOnIsYWZ0ZXI6bixpbnNlcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldj1yLHQubmV4dD1uLHIubmV4dD10LG51bGwhPT1uJiYobi5wcmV2PXQpLHR9fX19O3JldHVybiB0fSxub2RlOmZ1bmN0aW9uKHQpe3JldHVybiB0LnByZXY9bnVsbCx0Lm5leHQ9bnVsbCx0LnJlbW92ZT1mdW5jdGlvbigpe3QucHJldi5uZXh0PXQubmV4dCx0Lm5leHQmJih0Lm5leHQucHJldj10LnByZXYpLHQucHJldj1udWxsLHQubmV4dD1udWxsfSx0fX19LHt9XSw0NzI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVtdLGk9W107cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgYT10LnN0YXJ0LG89dC5lbmQ7aWYoZS5wb2ludHNTYW1lKGEsbykpY29uc29sZS53YXJuKFwiUG9seUJvb2w6IFdhcm5pbmc6IFplcm8tbGVuZ3RoIHNlZ21lbnQgZGV0ZWN0ZWQ7IHlvdXIgZXBzaWxvbiBpcyBwcm9iYWJseSB0b28gc21hbGwgb3IgdG9vIGxhcmdlXCIpO2Vsc2V7ciYmci5jaGFpblN0YXJ0KHQpO2Zvcih2YXIgcz17aW5kZXg6MCxtYXRjaGVzX2hlYWQ6ITEsbWF0Y2hlc19wdDE6ITF9LGw9e2luZGV4OjAsbWF0Y2hlc19oZWFkOiExLG1hdGNoZXNfcHQxOiExfSxjPXMsdT0wO3U8bi5sZW5ndGg7dSsrKXt2YXIgaD0odj1uW3VdKVswXSxmPSh2WzFdLHZbdi5sZW5ndGgtMV0pO2lmKHZbdi5sZW5ndGgtMl0sZS5wb2ludHNTYW1lKGgsYSkpe2lmKEEodSwhMCwhMCkpYnJlYWt9ZWxzZSBpZihlLnBvaW50c1NhbWUoaCxvKSl7aWYoQSh1LCEwLCExKSlicmVha31lbHNlIGlmKGUucG9pbnRzU2FtZShmLGEpKXtpZihBKHUsITEsITApKWJyZWFrfWVsc2UgaWYoZS5wb2ludHNTYW1lKGYsbykmJkEodSwhMSwhMSkpYnJlYWt9aWYoYz09PXMpcmV0dXJuIG4ucHVzaChbYSxvXSksdm9pZChyJiZyLmNoYWluTmV3KGEsbykpO2lmKGM9PT1sKXtyJiZyLmNoYWluTWF0Y2gocy5pbmRleCk7dmFyIHA9cy5pbmRleCxkPXMubWF0Y2hlc19wdDE/bzphLGc9cy5tYXRjaGVzX2hlYWQsdj1uW3BdLG09Zz92WzBdOnZbdi5sZW5ndGgtMV0seT1nP3ZbMV06dlt2Lmxlbmd0aC0yXSx4PWc/dlt2Lmxlbmd0aC0xXTp2WzBdLGI9Zz92W3YubGVuZ3RoLTJdOnZbMV07cmV0dXJuIGUucG9pbnRzQ29sbGluZWFyKHksbSxkKSYmKGc/KHImJnIuY2hhaW5SZW1vdmVIZWFkKHMuaW5kZXgsZCksdi5zaGlmdCgpKToociYmci5jaGFpblJlbW92ZVRhaWwocy5pbmRleCxkKSx2LnBvcCgpKSxtPXkpLGUucG9pbnRzU2FtZSh4LGQpPyhuLnNwbGljZShwLDEpLGUucG9pbnRzQ29sbGluZWFyKGIseCxtKSYmKGc/KHImJnIuY2hhaW5SZW1vdmVUYWlsKHMuaW5kZXgsbSksdi5wb3AoKSk6KHImJnIuY2hhaW5SZW1vdmVIZWFkKHMuaW5kZXgsbSksdi5zaGlmdCgpKSksciYmci5jaGFpbkNsb3NlKHMuaW5kZXgpLHZvaWQgaS5wdXNoKHYpKTp2b2lkKGc/KHImJnIuY2hhaW5BZGRIZWFkKHMuaW5kZXgsZCksdi51bnNoaWZ0KGQpKToociYmci5jaGFpbkFkZFRhaWwocy5pbmRleCxkKSx2LnB1c2goZCkpKX12YXIgXz1zLmluZGV4LHc9bC5pbmRleDtyJiZyLmNoYWluQ29ubmVjdChfLHcpO3ZhciBrPW5bX10ubGVuZ3RoPG5bd10ubGVuZ3RoO3MubWF0Y2hlc19oZWFkP2wubWF0Y2hlc19oZWFkP2s/KFQoXyksTShfLHcpKTooVCh3KSxNKHcsXykpOk0odyxfKTpsLm1hdGNoZXNfaGVhZD9NKF8sdyk6az8oVChfKSxNKHcsXykpOihUKHcpLE0oXyx3KSl9ZnVuY3Rpb24gQSh0LGUscil7cmV0dXJuIGMuaW5kZXg9dCxjLm1hdGNoZXNfaGVhZD1lLGMubWF0Y2hlc19wdDE9cixjPT09cz8oYz1sLCExKTooYz1udWxsLCEwKX1mdW5jdGlvbiBUKHQpe3ImJnIuY2hhaW5SZXZlcnNlKHQpLG5bdF0ucmV2ZXJzZSgpfWZ1bmN0aW9uIE0odCxpKXt2YXIgYT1uW3RdLG89bltpXSxzPWFbYS5sZW5ndGgtMV0sbD1hW2EubGVuZ3RoLTJdLGM9b1swXSx1PW9bMV07ZS5wb2ludHNDb2xsaW5lYXIobCxzLGMpJiYociYmci5jaGFpblJlbW92ZVRhaWwodCxzKSxhLnBvcCgpLHM9bCksZS5wb2ludHNDb2xsaW5lYXIocyxjLHUpJiYociYmci5jaGFpblJlbW92ZUhlYWQoaSxjKSxvLnNoaWZ0KCkpLHImJnIuY2hhaW5Kb2luKHQsaSksblt0XT1hLmNvbmNhdChvKSxuLnNwbGljZShpLDEpfX0pLGl9fSx7fV0sNDczOltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49W107cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgaT0odC5teUZpbGwuYWJvdmU/ODowKSsodC5teUZpbGwuYmVsb3c/NDowKSsodC5vdGhlckZpbGwmJnQub3RoZXJGaWxsLmFib3ZlPzI6MCkrKHQub3RoZXJGaWxsJiZ0Lm90aGVyRmlsbC5iZWxvdz8xOjApOzAhPT1lW2ldJiZuLnB1c2goe2lkOnI/ci5zZWdtZW50SWQoKTotMSxzdGFydDp0LnN0YXJ0LGVuZDp0LmVuZCxteUZpbGw6e2Fib3ZlOjE9PT1lW2ldLGJlbG93OjI9PT1lW2ldfSxvdGhlckZpbGw6bnVsbH0pfSksciYmci5zZWxlY3RlZChuKSxufXZhciBpPXt1bmlvbjpmdW5jdGlvbih0LGUpe3JldHVybiBuKHQsWzAsMiwxLDAsMiwyLDAsMCwxLDAsMSwwLDAsMCwwLDBdLGUpfSxpbnRlcnNlY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LFswLDAsMCwwLDAsMiwwLDIsMCwwLDEsMSwwLDIsMSwwXSxlKX0sZGlmZmVyZW5jZTpmdW5jdGlvbih0LGUpe3JldHVybiBuKHQsWzAsMCwwLDAsMiwwLDIsMCwxLDEsMCwwLDAsMSwyLDBdLGUpfSxkaWZmZXJlbmNlUmV2OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxbMCwyLDEsMCwwLDAsMSwxLDAsMiwwLDIsMCwwLDAsMF0sZSl9LHhvcjpmdW5jdGlvbih0LGUpe3JldHVybiBuKHQsWzAsMiwxLDAsMiwwLDAsMSwxLDAsMCwyLDAsMSwyLDBdLGUpfX07ZS5leHBvcnRzPWl9LHt9XSw0NzQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1uZXcgRmxvYXQ2NEFycmF5KDQpLGk9bmV3IEZsb2F0NjRBcnJheSg0KSxhPW5ldyBGbG9hdDY0QXJyYXkoNCk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyl7bi5sZW5ndGg8by5sZW5ndGgmJihuPW5ldyBGbG9hdDY0QXJyYXkoby5sZW5ndGgpLGk9bmV3IEZsb2F0NjRBcnJheShvLmxlbmd0aCksYT1uZXcgRmxvYXQ2NEFycmF5KG8ubGVuZ3RoKSk7Zm9yKHZhciBsPTA7bDxvLmxlbmd0aDsrK2wpbltsXT10W2xdLW9bbF0saVtsXT1lW2xdLXRbbF0sYVtsXT1yW2xdLXRbbF07dmFyIGM9MCx1PTAsaD0wLGY9MCxwPTAsZD0wO2ZvcihsPTA7bDxvLmxlbmd0aDsrK2wpe3ZhciBnPWlbbF0sdj1hW2xdLG09bltsXTtjKz1nKmcsdSs9Zyp2LGgrPXYqdixmKz1tKmcscCs9bSp2LGQrPW0qbX12YXIgeSx4LGIsXyx3LGs9TWF0aC5hYnMoYypoLXUqdSksQT11KnAtaCpmLFQ9dSpmLWMqcDtpZihBK1Q8PWspaWYoQTwwKVQ8MCYmZjwwPyhUPTAsLWY+PWM/KEE9MSx5PWMrMipmK2QpOnk9ZiooQT0tZi9jKStkKTooQT0wLHA+PTA/KFQ9MCx5PWQpOi1wPj1oPyhUPTEseT1oKzIqcCtkKTp5PXAqKFQ9LXAvaCkrZCk7ZWxzZSBpZihUPDApVD0wLGY+PTA/KEE9MCx5PWQpOi1mPj1jPyhBPTEseT1jKzIqZitkKTp5PWYqKEE9LWYvYykrZDtlbHNle3ZhciBNPTEvazt5PShBKj1NKSooYypBK3UqKFQqPU0pKzIqZikrVCoodSpBK2gqVCsyKnApK2R9ZWxzZSBBPDA/KGI9aCtwKT4oeD11K2YpPyhfPWIteCk+PSh3PWMtMip1K2gpPyhBPTEsVD0wLHk9YysyKmYrZCk6eT0oQT1fL3cpKihjKkErdSooVD0xLUEpKzIqZikrVCoodSpBK2gqVCsyKnApK2Q6KEE9MCxiPD0wPyhUPTEseT1oKzIqcCtkKTpwPj0wPyhUPTAseT1kKTp5PXAqKFQ9LXAvaCkrZCk6VDwwPyhiPWMrZik+KHg9dStwKT8oXz1iLXgpPj0odz1jLTIqdStoKT8oVD0xLEE9MCx5PWgrMipwK2QpOnk9KEE9MS0oVD1fL3cpKSooYypBK3UqVCsyKmYpK1QqKHUqQStoKlQrMipwKStkOihUPTAsYjw9MD8oQT0xLHk9YysyKmYrZCk6Zj49MD8oQT0wLHk9ZCk6eT1mKihBPS1mL2MpK2QpOihfPWgrcC11LWYpPD0wPyhBPTAsVD0xLHk9aCsyKnArZCk6Xz49KHc9Yy0yKnUraCk/KEE9MSxUPTAseT1jKzIqZitkKTp5PShBPV8vdykqKGMqQSt1KihUPTEtQSkrMipmKStUKih1KkEraCpUKzIqcCkrZDt2YXIgUz0xLUEtVDtmb3IobD0wO2w8by5sZW5ndGg7KytsKXNbbF09Uyp0W2xdK0EqZVtsXStUKnJbbF07cmV0dXJuIHk8MD8wOnl9fSx7fV0sNDc1OltmdW5jdGlvbih0LGUscil7dmFyIG4saSxhPWUuZXhwb3J0cz17fTtmdW5jdGlvbiBvKCl7dGhyb3cgbmV3IEVycm9yKFwic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZFwiKX1mdW5jdGlvbiBzKCl7dGhyb3cgbmV3IEVycm9yKFwiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfWZ1bmN0aW9uIGwodCl7aWYobj09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQodCwwKTtpZigobj09PW98fCFuKSYmc2V0VGltZW91dClyZXR1cm4gbj1zZXRUaW1lb3V0LHNldFRpbWVvdXQodCwwKTt0cnl7cmV0dXJuIG4odCwwKX1jYXRjaChlKXt0cnl7cmV0dXJuIG4uY2FsbChudWxsLHQsMCl9Y2F0Y2goZSl7cmV0dXJuIG4uY2FsbCh0aGlzLHQsMCl9fX0hZnVuY3Rpb24oKXt0cnl7bj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6b31jYXRjaCh0KXtuPW99dHJ5e2k9XCJmdW5jdGlvblwiPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDpzfWNhdGNoKHQpe2k9c319KCk7dmFyIGMsdT1bXSxoPSExLGY9LTE7ZnVuY3Rpb24gcCgpe2gmJmMmJihoPSExLGMubGVuZ3RoP3U9Yy5jb25jYXQodSk6Zj0tMSx1Lmxlbmd0aCYmZCgpKX1mdW5jdGlvbiBkKCl7aWYoIWgpe3ZhciB0PWwocCk7aD0hMDtmb3IodmFyIGU9dS5sZW5ndGg7ZTspe2ZvcihjPXUsdT1bXTsrK2Y8ZTspYyYmY1tmXS5ydW4oKTtmPS0xLGU9dS5sZW5ndGh9Yz1udWxsLGg9ITEsZnVuY3Rpb24odCl7aWYoaT09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KHQpO2lmKChpPT09c3x8IWkpJiZjbGVhclRpbWVvdXQpcmV0dXJuIGk9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dCh0KTt0cnl7aSh0KX1jYXRjaChlKXt0cnl7cmV0dXJuIGkuY2FsbChudWxsLHQpfWNhdGNoKGUpe3JldHVybiBpLmNhbGwodGhpcyx0KX19fSh0KX19ZnVuY3Rpb24gZyh0LGUpe3RoaXMuZnVuPXQsdGhpcy5hcnJheT1lfWZ1bmN0aW9uIHYoKXt9YS5uZXh0VGljaz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciByPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyllW3ItMV09YXJndW1lbnRzW3JdO3UucHVzaChuZXcgZyh0LGUpKSwxIT09dS5sZW5ndGh8fGh8fGwoZCl9LGcucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LGEudGl0bGU9XCJicm93c2VyXCIsYS5icm93c2VyPSEwLGEuZW52PXt9LGEuYXJndj1bXSxhLnZlcnNpb249XCJcIixhLnZlcnNpb25zPXt9LGEub249dixhLmFkZExpc3RlbmVyPXYsYS5vbmNlPXYsYS5vZmY9dixhLnJlbW92ZUxpc3RlbmVyPXYsYS5yZW1vdmVBbGxMaXN0ZW5lcnM9dixhLmVtaXQ9dixhLnByZXBlbmRMaXN0ZW5lcj12LGEucHJlcGVuZE9uY2VMaXN0ZW5lcj12LGEubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybltdfSxhLmJpbmRpbmc9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKFwicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWRcIil9LGEuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuXCIvXCJ9LGEuY2hkaXI9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKFwicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkXCIpfSxhLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSx7fV0sNDc2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoXCJnbC1xdWF0L3NsZXJwXCIpfSx7XCJnbC1xdWF0L3NsZXJwXCI6MjkwfV0sNDc3OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpe2Zvcih2YXIgbj10KFwicGVyZm9ybWFuY2Utbm93XCIpLGk9XCJ1bmRlZmluZWRcIj09dHlwZW9mIHdpbmRvdz9yOndpbmRvdyxhPVtcIm1velwiLFwid2Via2l0XCJdLG89XCJBbmltYXRpb25GcmFtZVwiLHM9aVtcInJlcXVlc3RcIitvXSxsPWlbXCJjYW5jZWxcIitvXXx8aVtcImNhbmNlbFJlcXVlc3RcIitvXSxjPTA7IXMmJmM8YS5sZW5ndGg7YysrKXM9aVthW2NdK1wiUmVxdWVzdFwiK29dLGw9aVthW2NdK1wiQ2FuY2VsXCIrb118fGlbYVtjXStcIkNhbmNlbFJlcXVlc3RcIitvXTtpZighc3x8IWwpe3ZhciB1PTAsaD0wLGY9W107cz1mdW5jdGlvbih0KXtpZigwPT09Zi5sZW5ndGgpe3ZhciBlPW4oKSxyPU1hdGgubWF4KDAsMWUzLzYwLShlLXUpKTt1PXIrZSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIHQ9Zi5zbGljZSgwKTtmLmxlbmd0aD0wO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKCF0W2VdLmNhbmNlbGxlZCl0cnl7dFtlXS5jYWxsYmFjayh1KX1jYXRjaCh0KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgdH0sMCl9fSxNYXRoLnJvdW5kKHIpKX1yZXR1cm4gZi5wdXNoKHtoYW5kbGU6KytoLGNhbGxiYWNrOnQsY2FuY2VsbGVkOiExfSksaH0sbD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPGYubGVuZ3RoO2UrKylmW2VdLmhhbmRsZT09PXQmJihmW2VdLmNhbmNlbGxlZD0hMCl9fWUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcy5jYWxsKGksdCl9LGUuZXhwb3J0cy5jYW5jZWw9ZnVuY3Rpb24oKXtsLmFwcGx5KGksYXJndW1lbnRzKX0sZS5leHBvcnRzLnBvbHlmaWxsPWZ1bmN0aW9uKHQpe3R8fCh0PWkpLHQucmVxdWVzdEFuaW1hdGlvbkZyYW1lPXMsdC5jYW5jZWxBbmltYXRpb25GcmFtZT1sfX0pLmNhbGwodGhpcyxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se1wicGVyZm9ybWFuY2Utbm93XCI6NDU1fV0sNDc4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImJpZy1yYXQvYWRkXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyOysrYSlpW2FdPW4odFthXSxlW2FdKTtyZXR1cm4gaX19LHtcImJpZy1yYXQvYWRkXCI6NjZ9XSw0Nzk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wO3I8dC5sZW5ndGg7KytyKWVbcl09bih0W3JdKTtyZXR1cm4gZX07dmFyIG49dChcImJpZy1yYXRcIil9LHtcImJpZy1yYXRcIjo2OX1dLDQ4MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJiaWctcmF0XCIpLGk9dChcImJpZy1yYXQvbXVsXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uKGUpLGE9dC5sZW5ndGgsbz1uZXcgQXJyYXkoYSkscz0wO3M8YTsrK3Mpb1tzXT1pKHRbc10scik7cmV0dXJuIG99fSx7XCJiaWctcmF0XCI6NjksXCJiaWctcmF0L211bFwiOjc4fV0sNDgxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImJpZy1yYXQvc3ViXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyOysrYSlpW2FdPW4odFthXSxlW2FdKTtyZXR1cm4gaX19LHtcImJpZy1yYXQvc3ViXCI6ODB9XSw0ODI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiY29tcGFyZS1jZWxsXCIpLGk9dChcImNvbXBhcmUtb3JpZW50ZWQtY2VsbFwiKSxhPXQoXCJjZWxsLW9yaWVudGF0aW9uXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt0LnNvcnQoaSk7Zm9yKHZhciBlPXQubGVuZ3RoLHI9MCxvPTA7bzxlOysrbyl7dmFyIHM9dFtvXSxsPWEocyk7aWYoMCE9PWwpe2lmKHI+MCl7dmFyIGM9dFtyLTFdO2lmKDA9PT1uKHMsYykmJmEoYykhPT1sKXtyLT0xO2NvbnRpbnVlfX10W3IrK109c319cmV0dXJuIHQubGVuZ3RoPXIsdH19LHtcImNlbGwtb3JpZW50YXRpb25cIjoxMDMsXCJjb21wYXJlLWNlbGxcIjoxMTksXCJjb21wYXJlLW9yaWVudGVkLWNlbGxcIjoxMjB9XSw0ODM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiYXJyYXktYm91bmRzXCIpLGk9dChcImNvbG9yLW5vcm1hbGl6ZVwiKSxhPXQoXCJ1cGRhdGUtZGlmZlwiKSxvPXQoXCJwaWNrLWJ5LWFsaWFzXCIpLHM9dChcIm9iamVjdC1hc3NpZ25cIiksbD10KFwiZmxhdHRlbi12ZXJ0ZXgtZGF0YVwiKSxjPXQoXCJ0by1mbG9hdDMyXCIpLHU9Yy5mbG9hdDMyLGg9Yy5mcmFjdDMyO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe1wiZnVuY3Rpb25cIj09dHlwZW9mIHQ/KGV8fChlPXt9KSxlLnJlZ2w9dCk6ZT10O2UubGVuZ3RoJiYoZS5wb3NpdGlvbnM9ZSk7aWYoISh0PWUucmVnbCkuaGFzRXh0ZW5zaW9uKFwiQU5HTEVfaW5zdGFuY2VkX2FycmF5c1wiKSl0aHJvdyBFcnJvcihcInJlZ2wtZXJyb3IyZDogYEFOR0xFX2luc3RhbmNlZF9hcnJheXNgIGV4dGVuc2lvbiBzaG91bGQgYmUgZW5hYmxlZFwiKTt2YXIgcixjLHAsZCxnLHYsbT10Ll9nbCx5PXtjb2xvcjpcImJsYWNrXCIsY2FwU2l6ZTo1LGxpbmVXaWR0aDoxLG9wYWNpdHk6MSx2aWV3cG9ydDpudWxsLHJhbmdlOm51bGwsb2Zmc2V0OjAsY291bnQ6MCxib3VuZHM6bnVsbCxwb3NpdGlvbnM6W10sZXJyb3JzOltdfSx4PVtdO3JldHVybiBkPXQuYnVmZmVyKHt1c2FnZTpcImR5bmFtaWNcIix0eXBlOlwidWludDhcIixkYXRhOm5ldyBVaW50OEFycmF5KDApfSksYz10LmJ1ZmZlcih7dXNhZ2U6XCJkeW5hbWljXCIsdHlwZTpcImZsb2F0XCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pLHA9dC5idWZmZXIoe3VzYWdlOlwiZHluYW1pY1wiLHR5cGU6XCJmbG9hdFwiLGRhdGE6bmV3IFVpbnQ4QXJyYXkoMCl9KSxnPXQuYnVmZmVyKHt1c2FnZTpcImR5bmFtaWNcIix0eXBlOlwiZmxvYXRcIixkYXRhOm5ldyBVaW50OEFycmF5KDApfSksdj10LmJ1ZmZlcih7dXNhZ2U6XCJzdGF0aWNcIix0eXBlOlwiZmxvYXRcIixkYXRhOmZ9KSxrKGUpLHI9dCh7dmVydDpcIlxcblxcdFxcdHByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG5cXHRcXHRhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbiwgcG9zaXRpb25GcmFjdDtcXG5cXHRcXHRhdHRyaWJ1dGUgdmVjNCBlcnJvcjtcXG5cXHRcXHRhdHRyaWJ1dGUgdmVjNCBjb2xvcjtcXG5cXG5cXHRcXHRhdHRyaWJ1dGUgdmVjMiBkaXJlY3Rpb24sIGxpbmVPZmZzZXQsIGNhcE9mZnNldDtcXG5cXG5cXHRcXHR1bmlmb3JtIHZlYzQgdmlld3BvcnQ7XFxuXFx0XFx0dW5pZm9ybSBmbG9hdCBsaW5lV2lkdGgsIGNhcFNpemU7XFxuXFx0XFx0dW5pZm9ybSB2ZWMyIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0O1xcblxcblxcdFxcdHZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxuXFxuXFx0XFx0dm9pZCBtYWluKCkge1xcblxcdFxcdFxcdGZyYWdDb2xvciA9IGNvbG9yIC8gMjU1LjtcXG5cXG5cXHRcXHRcXHR2ZWMyIHBpeGVsT2Zmc2V0ID0gbGluZVdpZHRoICogbGluZU9mZnNldCArIChjYXBTaXplICsgbGluZVdpZHRoKSAqIGNhcE9mZnNldDtcXG5cXG5cXHRcXHRcXHR2ZWMyIGR4eSA9IC1zdGVwKC41LCBkaXJlY3Rpb24ueHkpICogZXJyb3IueHogKyBzdGVwKGRpcmVjdGlvbi54eSwgdmVjMigtLjUpKSAqIGVycm9yLnl3O1xcblxcblxcdFxcdFxcdHZlYzIgcG9zaXRpb24gPSBwb3NpdGlvbiArIGR4eTtcXG5cXG5cXHRcXHRcXHR2ZWMyIHBvcyA9IChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZVxcblxcdFxcdFxcdFxcdCsgKHBvc2l0aW9uRnJhY3QgKyB0cmFuc2xhdGVGcmFjdCkgKiBzY2FsZVxcblxcdFxcdFxcdFxcdCsgKHBvc2l0aW9uICsgdHJhbnNsYXRlKSAqIHNjYWxlRnJhY3RcXG5cXHRcXHRcXHRcXHQrIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVGcmFjdDtcXG5cXG5cXHRcXHRcXHRwb3MgKz0gcGl4ZWxPZmZzZXQgLyB2aWV3cG9ydC56dztcXG5cXG5cXHRcXHRcXHRnbF9Qb3NpdGlvbiA9IHZlYzQocG9zICogMi4gLSAxLiwgMCwgMSk7XFxuXFx0XFx0fVxcblxcdFxcdFwiLGZyYWc6XCJcXG5cXHRcXHRwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuXFxuXFx0XFx0dmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcXG5cXG5cXHRcXHR1bmlmb3JtIGZsb2F0IG9wYWNpdHk7XFxuXFxuXFx0XFx0dm9pZCBtYWluKCkge1xcblxcdFxcdFxcdGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjtcXG5cXHRcXHRcXHRnbF9GcmFnQ29sb3IuYSAqPSBvcGFjaXR5O1xcblxcdFxcdH1cXG5cXHRcXHRcIix1bmlmb3Jtczp7cmFuZ2U6dC5wcm9wKFwicmFuZ2VcIiksbGluZVdpZHRoOnQucHJvcChcImxpbmVXaWR0aFwiKSxjYXBTaXplOnQucHJvcChcImNhcFNpemVcIiksb3BhY2l0eTp0LnByb3AoXCJvcGFjaXR5XCIpLHNjYWxlOnQucHJvcChcInNjYWxlXCIpLHRyYW5zbGF0ZTp0LnByb3AoXCJ0cmFuc2xhdGVcIiksc2NhbGVGcmFjdDp0LnByb3AoXCJzY2FsZUZyYWN0XCIpLHRyYW5zbGF0ZUZyYWN0OnQucHJvcChcInRyYW5zbGF0ZUZyYWN0XCIpLHZpZXdwb3J0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuW2Uudmlld3BvcnQueCxlLnZpZXdwb3J0LnksdC52aWV3cG9ydFdpZHRoLHQudmlld3BvcnRIZWlnaHRdfX0sYXR0cmlidXRlczp7Y29sb3I6e2J1ZmZlcjpkLG9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiA0KmUub2Zmc2V0fSxkaXZpc29yOjF9LHBvc2l0aW9uOntidWZmZXI6YyxvZmZzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gOCplLm9mZnNldH0sZGl2aXNvcjoxfSxwb3NpdGlvbkZyYWN0OntidWZmZXI6cCxvZmZzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gOCplLm9mZnNldH0sZGl2aXNvcjoxfSxlcnJvcjp7YnVmZmVyOmcsb2Zmc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDE2KmUub2Zmc2V0fSxkaXZpc29yOjF9LGRpcmVjdGlvbjp7YnVmZmVyOnYsc3RyaWRlOjI0LG9mZnNldDowfSxsaW5lT2Zmc2V0OntidWZmZXI6dixzdHJpZGU6MjQsb2Zmc2V0Ojh9LGNhcE9mZnNldDp7YnVmZmVyOnYsc3RyaWRlOjI0LG9mZnNldDoxNn19LHByaW1pdGl2ZTpcInRyaWFuZ2xlc1wiLGJsZW5kOntlbmFibGU6ITAsY29sb3I6WzAsMCwwLDBdLGVxdWF0aW9uOntyZ2I6XCJhZGRcIixhbHBoYTpcImFkZFwifSxmdW5jOntzcmNSR0I6XCJzcmMgYWxwaGFcIixkc3RSR0I6XCJvbmUgbWludXMgc3JjIGFscGhhXCIsc3JjQWxwaGE6XCJvbmUgbWludXMgZHN0IGFscGhhXCIsZHN0QWxwaGE6XCJvbmVcIn19LGRlcHRoOntlbmFibGU6ITF9LHNjaXNzb3I6e2VuYWJsZTohMCxib3g6dC5wcm9wKFwidmlld3BvcnRcIil9LHZpZXdwb3J0OnQucHJvcChcInZpZXdwb3J0XCIpLHN0ZW5jaWw6ITEsaW5zdGFuY2VzOnQucHJvcChcImNvdW50XCIpLGNvdW50OmYubGVuZ3RofSkscyhiLHt1cGRhdGU6ayxkcmF3Ol8sZGVzdHJveTpBLHJlZ2w6dCxnbDptLGNhbnZhczptLmNhbnZhcyxncm91cHM6eH0pLGI7ZnVuY3Rpb24gYih0KXt0P2sodCk6bnVsbD09PXQmJkEoKSxfKCl9ZnVuY3Rpb24gXyhlKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSlyZXR1cm4gdyhlKTtlJiYhQXJyYXkuaXNBcnJheShlKSYmKGU9W2VdKSx0Ll9yZWZyZXNoKCkseC5mb3JFYWNoKGZ1bmN0aW9uKHQscil7dCYmKGUmJihlW3JdP3QuZHJhdz0hMDp0LmRyYXc9ITEpLHQuZHJhdz93KHIpOnQuZHJhdz0hMCl9KX1mdW5jdGlvbiB3KHQpe1wibnVtYmVyXCI9PXR5cGVvZiB0JiYodD14W3RdKSxudWxsIT10JiZ0JiZ0LmNvdW50JiZ0LmNvbG9yJiZ0Lm9wYWNpdHkmJnQucG9zaXRpb25zJiZ0LnBvc2l0aW9ucy5sZW5ndGg+MSYmKHQuc2NhbGVSYXRpbz1bdC5zY2FsZVswXSp0LnZpZXdwb3J0LndpZHRoLHQuc2NhbGVbMV0qdC52aWV3cG9ydC5oZWlnaHRdLHIodCksdC5hZnRlciYmdC5hZnRlcih0KSl9ZnVuY3Rpb24gayh0KXtpZih0KXtudWxsIT10Lmxlbmd0aD9cIm51bWJlclwiPT10eXBlb2YgdFswXSYmKHQ9W3twb3NpdGlvbnM6dH1dKTpBcnJheS5pc0FycmF5KHQpfHwodD1bdF0pO3ZhciBlPTAscj0wO2lmKGIuZ3JvdXBzPXg9dC5tYXAoZnVuY3Rpb24odCxjKXt2YXIgdT14W2NdO3JldHVybiB0PyhcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q9e2FmdGVyOnR9OlwibnVtYmVyXCI9PXR5cGVvZiB0WzBdJiYodD17cG9zaXRpb25zOnR9KSx0PW8odCx7Y29sb3I6XCJjb2xvciBjb2xvcnMgZmlsbFwiLGNhcFNpemU6XCJjYXBTaXplIGNhcCBjYXBzaXplIGNhcC1zaXplXCIsbGluZVdpZHRoOlwibGluZVdpZHRoIGxpbmUtd2lkdGggd2lkdGggbGluZSB0aGlja25lc3NcIixvcGFjaXR5Olwib3BhY2l0eSBhbHBoYVwiLHJhbmdlOlwicmFuZ2UgZGF0YUJveFwiLHZpZXdwb3J0Olwidmlld3BvcnQgdmlld0JveFwiLGVycm9yczpcImVycm9ycyBlcnJvclwiLHBvc2l0aW9uczpcInBvc2l0aW9ucyBwb3NpdGlvbiBkYXRhIHBvaW50c1wifSksdXx8KHhbY109dT17aWQ6YyxzY2FsZTpudWxsLHRyYW5zbGF0ZTpudWxsLHNjYWxlRnJhY3Q6bnVsbCx0cmFuc2xhdGVGcmFjdDpudWxsLGRyYXc6ITB9LHQ9cyh7fSx5LHQpKSxhKHUsdCxbe2xpbmVXaWR0aDpmdW5jdGlvbih0KXtyZXR1cm4uNSordH0sY2FwU2l6ZTpmdW5jdGlvbih0KXtyZXR1cm4uNSordH0sb3BhY2l0eTpwYXJzZUZsb2F0LGVycm9yczpmdW5jdGlvbih0KXtyZXR1cm4gdD1sKHQpLHIrPXQubGVuZ3RoLHR9LHBvc2l0aW9uczpmdW5jdGlvbih0LHIpe3JldHVybiB0PWwodCxcImZsb2F0NjRcIiksci5jb3VudD1NYXRoLmZsb29yKHQubGVuZ3RoLzIpLHIuYm91bmRzPW4odCwyKSxyLm9mZnNldD1lLGUrPXIuY291bnQsdH19LHtjb2xvcjpmdW5jdGlvbih0LGUpe3ZhciByPWUuY291bnQ7aWYodHx8KHQ9XCJ0cmFuc3BhcmVudFwiKSwhQXJyYXkuaXNBcnJheSh0KXx8XCJudW1iZXJcIj09dHlwZW9mIHRbMF0pe3ZhciBuPXQ7dD1BcnJheShyKTtmb3IodmFyIGE9MDthPHI7YSsrKXRbYV09bn1pZih0Lmxlbmd0aDxyKXRocm93IEVycm9yKFwiTm90IGVub3VnaCBjb2xvcnNcIik7Zm9yKHZhciBvPW5ldyBVaW50OEFycmF5KDQqcikscz0wO3M8cjtzKyspe3ZhciBsPWkodFtzXSxcInVpbnQ4XCIpO28uc2V0KGwsNCpzKX1yZXR1cm4gb30scmFuZ2U6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuYm91bmRzO3JldHVybiB0fHwodD1uKSxlLnNjYWxlPVsxLyh0WzJdLXRbMF0pLDEvKHRbM10tdFsxXSldLGUudHJhbnNsYXRlPVstdFswXSwtdFsxXV0sZS5zY2FsZUZyYWN0PWgoZS5zY2FsZSksZS50cmFuc2xhdGVGcmFjdD1oKGUudHJhbnNsYXRlKSx0fSx2aWV3cG9ydDpmdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9lPXt4OnRbMF0seTp0WzFdLHdpZHRoOnRbMl0tdFswXSxoZWlnaHQ6dFszXS10WzFdfTp0PyhlPXt4OnQueHx8dC5sZWZ0fHwwLHk6dC55fHx0LnRvcHx8MH0sdC5yaWdodD9lLndpZHRoPXQucmlnaHQtZS54OmUud2lkdGg9dC53fHx0LndpZHRofHwwLHQuYm90dG9tP2UuaGVpZ2h0PXQuYm90dG9tLWUueTplLmhlaWdodD10Lmh8fHQuaGVpZ2h0fHwwKTplPXt4OjAseTowLHdpZHRoOm0uZHJhd2luZ0J1ZmZlcldpZHRoLGhlaWdodDptLmRyYXdpbmdCdWZmZXJIZWlnaHR9LGV9fV0pLHUpOnV9KSxlfHxyKXt2YXIgZj14LnJlZHVjZShmdW5jdGlvbih0LGUscil7cmV0dXJuIHQrKGU/ZS5jb3VudDowKX0sMCksdj1uZXcgRmxvYXQ2NEFycmF5KDIqZiksXz1uZXcgVWludDhBcnJheSg0KmYpLHc9bmV3IEZsb2F0MzJBcnJheSg0KmYpO3guZm9yRWFjaChmdW5jdGlvbih0LGUpe2lmKHQpe3ZhciByPXQucG9zaXRpb25zLG49dC5jb3VudCxpPXQub2Zmc2V0LGE9dC5jb2xvcixvPXQuZXJyb3JzO24mJihfLnNldChhLDQqaSksdy5zZXQobyw0KmkpLHYuc2V0KHIsMippKSl9fSksYyh1KHYpKSxwKGgodikpLGQoXyksZyh3KX19fWZ1bmN0aW9uIEEoKXtjLmRlc3Ryb3koKSxwLmRlc3Ryb3koKSxkLmRlc3Ryb3koKSxnLmRlc3Ryb3koKSx2LmRlc3Ryb3koKX19O3ZhciBmPVtbMSwwLDAsMSwwLDBdLFsxLDAsMCwtMSwwLDBdLFstMSwwLDAsLTEsMCwwXSxbLTEsMCwwLC0xLDAsMF0sWy0xLDAsMCwxLDAsMF0sWzEsMCwwLDEsMCwwXSxbMSwwLC0xLDAsMCwxXSxbMSwwLC0xLDAsMCwtMV0sWzEsMCwxLDAsMCwtMV0sWzEsMCwxLDAsMCwtMV0sWzEsMCwxLDAsMCwxXSxbMSwwLC0xLDAsMCwxXSxbLTEsMCwtMSwwLDAsMV0sWy0xLDAsLTEsMCwwLC0xXSxbLTEsMCwxLDAsMCwtMV0sWy0xLDAsMSwwLDAsLTFdLFstMSwwLDEsMCwwLDFdLFstMSwwLC0xLDAsMCwxXSxbMCwxLDEsMCwwLDBdLFswLDEsLTEsMCwwLDBdLFswLC0xLC0xLDAsMCwwXSxbMCwtMSwtMSwwLDAsMF0sWzAsMSwxLDAsMCwwXSxbMCwtMSwxLDAsMCwwXSxbMCwxLDAsLTEsMSwwXSxbMCwxLDAsLTEsLTEsMF0sWzAsMSwwLDEsLTEsMF0sWzAsMSwwLDEsMSwwXSxbMCwxLDAsLTEsMSwwXSxbMCwxLDAsMSwtMSwwXSxbMCwtMSwwLC0xLDEsMF0sWzAsLTEsMCwtMSwtMSwwXSxbMCwtMSwwLDEsLTEsMF0sWzAsLTEsMCwxLDEsMF0sWzAsLTEsMCwtMSwxLDBdLFswLC0xLDAsMSwtMSwwXV19LHtcImFycmF5LWJvdW5kc1wiOjU2LFwiY29sb3Itbm9ybWFsaXplXCI6MTExLFwiZmxhdHRlbi12ZXJ0ZXgtZGF0YVwiOjIyNCxcIm9iamVjdC1hc3NpZ25cIjo0NDcsXCJwaWNrLWJ5LWFsaWFzXCI6NDU4LFwidG8tZmxvYXQzMlwiOjUyMyxcInVwZGF0ZS1kaWZmXCI6NTM0fV0sNDg0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImNvbG9yLW5vcm1hbGl6ZVwiKSxpPXQoXCJhcnJheS1ib3VuZHNcIiksYT10KFwib2JqZWN0LWFzc2lnblwiKSxvPXQoXCJnbHNsaWZ5XCIpLHM9dChcInBpY2stYnktYWxpYXNcIiksbD10KFwiZmxhdHRlbi12ZXJ0ZXgtZGF0YVwiKSxjPXQoXCJlYXJjdXRcIiksdT10KFwiYXJyYXktbm9ybWFsaXplXCIpLGg9dChcInRvLWZsb2F0MzJcIiksZj1oLmZsb2F0MzIscD1oLmZyYWN0MzIsZD10KFwiZXM2LXdlYWstbWFwXCIpLGc9dChcInBhcnNlLXJlY3RcIik7ZnVuY3Rpb24gdih0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHYpKXJldHVybiBuZXcgdih0LGUpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/KGV8fChlPXt9KSxlLnJlZ2w9dCk6ZT10LGUubGVuZ3RoJiYoZS5wb3NpdGlvbnM9ZSksISh0PWUucmVnbCkuaGFzRXh0ZW5zaW9uKFwiQU5HTEVfaW5zdGFuY2VkX2FycmF5c1wiKSl0aHJvdyBFcnJvcihcInJlZ2wtZXJyb3IyZDogYEFOR0xFX2luc3RhbmNlZF9hcnJheXNgIGV4dGVuc2lvbiBzaG91bGQgYmUgZW5hYmxlZFwiKTt0aGlzLmdsPXQuX2dsLHRoaXMucmVnbD10LHRoaXMucGFzc2VzPVtdLHRoaXMuc2hhZGVycz12LnNoYWRlcnMuaGFzKHQpP3Yuc2hhZGVycy5nZXQodCk6di5zaGFkZXJzLnNldCh0LHYuY3JlYXRlU2hhZGVycyh0KSkuZ2V0KHQpLHRoaXMudXBkYXRlKGUpfWUuZXhwb3J0cz12LHYuZGFzaE11bHQ9Mix2Lm1heFBhdHRlcm5MZW5ndGg9MjU2LHYucHJlY2lzaW9uVGhyZXNob2xkPTNlNix2Lm1heFBvaW50cz0xZTQsdi5tYXhMaW5lcz0yMDQ4LHYuc2hhZGVycz1uZXcgZCx2LmNyZWF0ZVNoYWRlcnM9ZnVuY3Rpb24odCl7dmFyIGUscj10LmJ1ZmZlcih7dXNhZ2U6XCJzdGF0aWNcIix0eXBlOlwiZmxvYXRcIixkYXRhOlswLDEsMCwwLDEsMSwxLDBdfSksbj17cHJpbWl0aXZlOlwidHJpYW5nbGUgc3RyaXBcIixpbnN0YW5jZXM6dC5wcm9wKFwiY291bnRcIiksY291bnQ6NCxvZmZzZXQ6MCx1bmlmb3Jtczp7bWl0ZXJNb2RlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJyb3VuZFwiPT09ZS5qb2luPzI6MX0sbWl0ZXJMaW1pdDp0LnByb3AoXCJtaXRlckxpbWl0XCIpLHNjYWxlOnQucHJvcChcInNjYWxlXCIpLHNjYWxlRnJhY3Q6dC5wcm9wKFwic2NhbGVGcmFjdFwiKSx0cmFuc2xhdGVGcmFjdDp0LnByb3AoXCJ0cmFuc2xhdGVGcmFjdFwiKSx0cmFuc2xhdGU6dC5wcm9wKFwidHJhbnNsYXRlXCIpLHRoaWNrbmVzczp0LnByb3AoXCJ0aGlja25lc3NcIiksZGFzaFBhdHRlcm46dC5wcm9wKFwiZGFzaFRleHR1cmVcIiksb3BhY2l0eTp0LnByb3AoXCJvcGFjaXR5XCIpLHBpeGVsUmF0aW86dC5jb250ZXh0KFwicGl4ZWxSYXRpb1wiKSxpZDp0LnByb3AoXCJpZFwiKSxkYXNoU2l6ZTp0LnByb3AoXCJkYXNoTGVuZ3RoXCIpLHZpZXdwb3J0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuW2Uudmlld3BvcnQueCxlLnZpZXdwb3J0LnksdC52aWV3cG9ydFdpZHRoLHQudmlld3BvcnRIZWlnaHRdfSxkZXB0aDp0LnByb3AoXCJkZXB0aFwiKX0sYmxlbmQ6e2VuYWJsZTohMCxjb2xvcjpbMCwwLDAsMF0sZXF1YXRpb246e3JnYjpcImFkZFwiLGFscGhhOlwiYWRkXCJ9LGZ1bmM6e3NyY1JHQjpcInNyYyBhbHBoYVwiLGRzdFJHQjpcIm9uZSBtaW51cyBzcmMgYWxwaGFcIixzcmNBbHBoYTpcIm9uZSBtaW51cyBkc3QgYWxwaGFcIixkc3RBbHBoYTpcIm9uZVwifX0sZGVwdGg6e2VuYWJsZTpmdW5jdGlvbih0LGUpe3JldHVybiFlLm92ZXJsYXl9fSxzdGVuY2lsOntlbmFibGU6ITF9LHNjaXNzb3I6e2VuYWJsZTohMCxib3g6dC5wcm9wKFwidmlld3BvcnRcIil9LHZpZXdwb3J0OnQucHJvcChcInZpZXdwb3J0XCIpfSxpPXQoYSh7dmVydDpvKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbmF0dHJpYnV0ZSB2ZWMyIGFDb29yZCwgYkNvb3JkLCBhQ29vcmRGcmFjdCwgYkNvb3JkRnJhY3Q7XFxuYXR0cmlidXRlIHZlYzQgY29sb3I7XFxuYXR0cmlidXRlIGZsb2F0IGxpbmVFbmQsIGxpbmVUb3A7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0O1xcbnVuaWZvcm0gZmxvYXQgdGhpY2tuZXNzLCBwaXhlbFJhdGlvLCBpZCwgZGVwdGg7XFxudW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxudmFyeWluZyB2ZWMyIHRhbmdlbnQ7XFxuXFxudmVjMiBwcm9qZWN0KHZlYzIgcG9zaXRpb24sIHZlYzIgcG9zaXRpb25GcmFjdCwgdmVjMiBzY2FsZSwgdmVjMiBzY2FsZUZyYWN0LCB2ZWMyIHRyYW5zbGF0ZSwgdmVjMiB0cmFuc2xhdGVGcmFjdCkge1xcblxcdC8vIHRoZSBvcmRlciBpcyBpbXBvcnRhbnRcXG5cXHRyZXR1cm4gcG9zaXRpb24gKiBzY2FsZSArIHRyYW5zbGF0ZVxcbiAgICAgICArIHBvc2l0aW9uRnJhY3QgKiBzY2FsZSArIHRyYW5zbGF0ZUZyYWN0XFxuICAgICAgICsgcG9zaXRpb24gKiBzY2FsZUZyYWN0XFxuICAgICAgICsgcG9zaXRpb25GcmFjdCAqIHNjYWxlRnJhY3Q7XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG5cXHRmbG9hdCBsaW5lU3RhcnQgPSAxLiAtIGxpbmVFbmQ7XFxuXFx0ZmxvYXQgbGluZU9mZnNldCA9IGxpbmVUb3AgKiAyLiAtIDEuO1xcblxcblxcdHZlYzIgZGlmZiA9IChiQ29vcmQgKyBiQ29vcmRGcmFjdCAtIGFDb29yZCAtIGFDb29yZEZyYWN0KTtcXG5cXHR0YW5nZW50ID0gbm9ybWFsaXplKGRpZmYgKiBzY2FsZSAqIHZpZXdwb3J0Lnp3KTtcXG5cXHR2ZWMyIG5vcm1hbCA9IHZlYzIoLXRhbmdlbnQueSwgdGFuZ2VudC54KTtcXG5cXG5cXHR2ZWMyIHBvc2l0aW9uID0gcHJvamVjdChhQ29vcmQsIGFDb29yZEZyYWN0LCBzY2FsZSwgc2NhbGVGcmFjdCwgdHJhbnNsYXRlLCB0cmFuc2xhdGVGcmFjdCkgKiBsaW5lU3RhcnRcXG5cXHRcXHQrIHByb2plY3QoYkNvb3JkLCBiQ29vcmRGcmFjdCwgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3QpICogbGluZUVuZFxcblxcblxcdFxcdCsgdGhpY2tuZXNzICogbm9ybWFsICogLjUgKiBsaW5lT2Zmc2V0IC8gdmlld3BvcnQuenc7XFxuXFxuXFx0Z2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uICogMi4wIC0gMS4wLCBkZXB0aCwgMSk7XFxuXFxuXFx0ZnJhZ0NvbG9yID0gY29sb3IgLyAyNTUuO1xcbn1cXG5cIl0pLGZyYWc6byhbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCBkYXNoUGF0dGVybjtcXG5cXG51bmlmb3JtIGZsb2F0IGRhc2hTaXplLCBwaXhlbFJhdGlvLCB0aGlja25lc3MsIG9wYWNpdHksIGlkO1xcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxudmFyeWluZyB2ZWMyIHRhbmdlbnQ7XFxuXFxudm9pZCBtYWluKCkge1xcblxcdGZsb2F0IGFscGhhID0gMS47XFxuXFxuXFx0ZmxvYXQgdCA9IGZyYWN0KGRvdCh0YW5nZW50LCBnbF9GcmFnQ29vcmQueHkpIC8gZGFzaFNpemUpICogLjUgKyAuMjU7XFxuXFx0ZmxvYXQgZGFzaCA9IHRleHR1cmUyRChkYXNoUGF0dGVybiwgdmVjMih0LCAuNSkpLnI7XFxuXFxuXFx0Z2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xcblxcdGdsX0ZyYWdDb2xvci5hICo9IGFscGhhICogb3BhY2l0eSAqIGRhc2g7XFxufVxcblwiXSksYXR0cmlidXRlczp7bGluZUVuZDp7YnVmZmVyOnIsZGl2aXNvcjowLHN0cmlkZTo4LG9mZnNldDowfSxsaW5lVG9wOntidWZmZXI6cixkaXZpc29yOjAsc3RyaWRlOjgsb2Zmc2V0OjR9LGFDb29yZDp7YnVmZmVyOnQucHJvcChcInBvc2l0aW9uQnVmZmVyXCIpLHN0cmlkZTo4LG9mZnNldDo4LGRpdmlzb3I6MX0sYkNvb3JkOntidWZmZXI6dC5wcm9wKFwicG9zaXRpb25CdWZmZXJcIiksc3RyaWRlOjgsb2Zmc2V0OjE2LGRpdmlzb3I6MX0sYUNvb3JkRnJhY3Q6e2J1ZmZlcjp0LnByb3AoXCJwb3NpdGlvbkZyYWN0QnVmZmVyXCIpLHN0cmlkZTo4LG9mZnNldDo4LGRpdmlzb3I6MX0sYkNvb3JkRnJhY3Q6e2J1ZmZlcjp0LnByb3AoXCJwb3NpdGlvbkZyYWN0QnVmZmVyXCIpLHN0cmlkZTo4LG9mZnNldDoxNixkaXZpc29yOjF9LGNvbG9yOntidWZmZXI6dC5wcm9wKFwiY29sb3JCdWZmZXJcIiksc3RyaWRlOjQsb2Zmc2V0OjAsZGl2aXNvcjoxfX19LG4pKTt0cnl7ZT10KGEoe2N1bGw6e2VuYWJsZTohMCxmYWNlOlwiYmFja1wifSx2ZXJ0Om8oW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIHZlYzIgYUNvb3JkLCBiQ29vcmQsIG5leHRDb29yZCwgcHJldkNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvciwgYkNvbG9yO1xcbmF0dHJpYnV0ZSBmbG9hdCBsaW5lRW5kLCBsaW5lVG9wO1xcblxcbnVuaWZvcm0gdmVjMiBzY2FsZSwgdHJhbnNsYXRlO1xcbnVuaWZvcm0gZmxvYXQgdGhpY2tuZXNzLCBwaXhlbFJhdGlvLCBpZCwgZGVwdGg7XFxudW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xcbnVuaWZvcm0gZmxvYXQgbWl0ZXJMaW1pdCwgbWl0ZXJNb2RlO1xcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxudmFyeWluZyB2ZWM0IHN0YXJ0Q3V0b2ZmLCBlbmRDdXRvZmY7XFxudmFyeWluZyB2ZWMyIHRhbmdlbnQ7XFxudmFyeWluZyB2ZWMyIHN0YXJ0Q29vcmQsIGVuZENvb3JkO1xcbnZhcnlpbmcgZmxvYXQgZW5hYmxlU3RhcnRNaXRlciwgZW5hYmxlRW5kTWl0ZXI7XFxuXFxuY29uc3QgZmxvYXQgUkVWRVJTRV9USFJFU0hPTEQgPSAtLjg3NTtcXG5jb25zdCBmbG9hdCBNSU5fRElGRiA9IDFlLTY7XFxuXFxuLy8gVE9ETzogcG9zc2libGUgb3B0aW1pemF0aW9uczogYXZvaWQgb3ZlcmNhbGN1bGF0aW5nIGFsbCBmb3IgdmVydGljZXMgYW5kIGNhbGMganVzdCBvbmUgaW5zdGVhZFxcbi8vIFRPRE86IHByZWNhbGN1bGF0ZSBkb3QgcHJvZHVjdHMsIG5vcm1hbGl6ZSB0aGluZ3MgYmVmb3JlaGVhZCBldGMuXFxuLy8gVE9ETzogcmVmYWN0b3IgdG8gcmVjdGFuZ3VsYXIgYWxnb3JpdGhtXFxuXFxuZmxvYXQgZGlzdFRvTGluZSh2ZWMyIHAsIHZlYzIgYSwgdmVjMiBiKSB7XFxuXFx0dmVjMiBkaWZmID0gYiAtIGE7XFxuXFx0dmVjMiBwZXJwID0gbm9ybWFsaXplKHZlYzIoLWRpZmYueSwgZGlmZi54KSk7XFxuXFx0cmV0dXJuIGRvdChwIC0gYSwgcGVycCk7XFxufVxcblxcbmJvb2wgaXNOYU4oIGZsb2F0IHZhbCApe1xcbiAgcmV0dXJuICggdmFsIDwgMC4wIHx8IDAuMCA8IHZhbCB8fCB2YWwgPT0gMC4wICkgPyBmYWxzZSA6IHRydWU7XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG5cXHR2ZWMyIGFDb29yZCA9IGFDb29yZCwgYkNvb3JkID0gYkNvb3JkLCBwcmV2Q29vcmQgPSBwcmV2Q29vcmQsIG5leHRDb29yZCA9IG5leHRDb29yZDtcXG5cXG4gIHZlYzIgYWRqdXN0ZWRTY2FsZTtcXG4gIGFkanVzdGVkU2NhbGUueCA9IChhYnMoc2NhbGUueCkgPCBNSU5fRElGRikgPyBNSU5fRElGRiA6IHNjYWxlLng7XFxuICBhZGp1c3RlZFNjYWxlLnkgPSAoYWJzKHNjYWxlLnkpIDwgTUlOX0RJRkYpID8gTUlOX0RJRkYgOiBzY2FsZS55O1xcblxcbiAgdmVjMiBzY2FsZVJhdGlvID0gYWRqdXN0ZWRTY2FsZSAqIHZpZXdwb3J0Lnp3O1xcblxcdHZlYzIgbm9ybWFsV2lkdGggPSB0aGlja25lc3MgLyBzY2FsZVJhdGlvO1xcblxcblxcdGZsb2F0IGxpbmVTdGFydCA9IDEuIC0gbGluZUVuZDtcXG5cXHRmbG9hdCBsaW5lQm90ID0gMS4gLSBsaW5lVG9wO1xcblxcblxcdGZyYWdDb2xvciA9IChsaW5lU3RhcnQgKiBhQ29sb3IgKyBsaW5lRW5kICogYkNvbG9yKSAvIDI1NS47XFxuXFxuXFx0aWYgKGlzTmFOKGFDb29yZC54KSB8fCBpc05hTihhQ29vcmQueSkgfHwgaXNOYU4oYkNvb3JkLngpIHx8IGlzTmFOKGJDb29yZC55KSkgcmV0dXJuO1xcblxcblxcdGlmIChhQ29vcmQgPT0gcHJldkNvb3JkKSBwcmV2Q29vcmQgPSBhQ29vcmQgKyBub3JtYWxpemUoYkNvb3JkIC0gYUNvb3JkKTtcXG5cXHRpZiAoYkNvb3JkID09IG5leHRDb29yZCkgbmV4dENvb3JkID0gYkNvb3JkIC0gbm9ybWFsaXplKGJDb29yZCAtIGFDb29yZCk7XFxuXFxuXFx0dmVjMiBwcmV2RGlmZiA9IGFDb29yZCAtIHByZXZDb29yZDtcXG5cXHR2ZWMyIGN1cnJEaWZmID0gYkNvb3JkIC0gYUNvb3JkO1xcblxcdHZlYzIgbmV4dERpZmYgPSBuZXh0Q29vcmQgLSBiQ29vcmQ7XFxuXFxuXFx0dmVjMiBwcmV2VGFuZ2VudCA9IG5vcm1hbGl6ZShwcmV2RGlmZiAqIHNjYWxlUmF0aW8pO1xcblxcdHZlYzIgY3VyclRhbmdlbnQgPSBub3JtYWxpemUoY3VyckRpZmYgKiBzY2FsZVJhdGlvKTtcXG5cXHR2ZWMyIG5leHRUYW5nZW50ID0gbm9ybWFsaXplKG5leHREaWZmICogc2NhbGVSYXRpbyk7XFxuXFxuXFx0dmVjMiBwcmV2Tm9ybWFsID0gdmVjMigtcHJldlRhbmdlbnQueSwgcHJldlRhbmdlbnQueCk7XFxuXFx0dmVjMiBjdXJyTm9ybWFsID0gdmVjMigtY3VyclRhbmdlbnQueSwgY3VyclRhbmdlbnQueCk7XFxuXFx0dmVjMiBuZXh0Tm9ybWFsID0gdmVjMigtbmV4dFRhbmdlbnQueSwgbmV4dFRhbmdlbnQueCk7XFxuXFxuXFx0dmVjMiBzdGFydEpvaW5EaXJlY3Rpb24gPSBub3JtYWxpemUocHJldlRhbmdlbnQgLSBjdXJyVGFuZ2VudCk7XFxuXFx0dmVjMiBlbmRKb2luRGlyZWN0aW9uID0gbm9ybWFsaXplKGN1cnJUYW5nZW50IC0gbmV4dFRhbmdlbnQpO1xcblxcblxcdC8vIGNvbGxhcHNlZC91bmlkaXJlY3Rpb25hbCBzZWdtZW50IGNhc2VzXFxuXFx0Ly8gRklYTUU6IHRoZXJlIHNob3VsZCBiZSBtb3JlIGVsZWdhbnQgc29sdXRpb25cXG5cXHR2ZWMyIHByZXZUYW5EaWZmID0gYWJzKHByZXZUYW5nZW50IC0gY3VyclRhbmdlbnQpO1xcblxcdHZlYzIgbmV4dFRhbkRpZmYgPSBhYnMobmV4dFRhbmdlbnQgLSBjdXJyVGFuZ2VudCk7XFxuXFx0aWYgKG1heChwcmV2VGFuRGlmZi54LCBwcmV2VGFuRGlmZi55KSA8IE1JTl9ESUZGKSB7XFxuXFx0XFx0c3RhcnRKb2luRGlyZWN0aW9uID0gY3Vyck5vcm1hbDtcXG5cXHR9XFxuXFx0aWYgKG1heChuZXh0VGFuRGlmZi54LCBuZXh0VGFuRGlmZi55KSA8IE1JTl9ESUZGKSB7XFxuXFx0XFx0ZW5kSm9pbkRpcmVjdGlvbiA9IGN1cnJOb3JtYWw7XFxuXFx0fVxcblxcdGlmIChhQ29vcmQgPT0gYkNvb3JkKSB7XFxuXFx0XFx0ZW5kSm9pbkRpcmVjdGlvbiA9IHN0YXJ0Sm9pbkRpcmVjdGlvbjtcXG5cXHRcXHRjdXJyTm9ybWFsID0gcHJldk5vcm1hbDtcXG5cXHRcXHRjdXJyVGFuZ2VudCA9IHByZXZUYW5nZW50O1xcblxcdH1cXG5cXG5cXHR0YW5nZW50ID0gY3VyclRhbmdlbnQ7XFxuXFxuXFx0Ly9jYWxjdWxhdGUgam9pbiBzaGlmdHMgcmVsYXRpdmUgdG8gbm9ybWFsc1xcblxcdGZsb2F0IHN0YXJ0Sm9pblNoaWZ0ID0gZG90KGN1cnJOb3JtYWwsIHN0YXJ0Sm9pbkRpcmVjdGlvbik7XFxuXFx0ZmxvYXQgZW5kSm9pblNoaWZ0ID0gZG90KGN1cnJOb3JtYWwsIGVuZEpvaW5EaXJlY3Rpb24pO1xcblxcblxcdGZsb2F0IHN0YXJ0TWl0ZXJSYXRpbyA9IGFicygxLiAvIHN0YXJ0Sm9pblNoaWZ0KTtcXG5cXHRmbG9hdCBlbmRNaXRlclJhdGlvID0gYWJzKDEuIC8gZW5kSm9pblNoaWZ0KTtcXG5cXG5cXHR2ZWMyIHN0YXJ0Sm9pbiA9IHN0YXJ0Sm9pbkRpcmVjdGlvbiAqIHN0YXJ0TWl0ZXJSYXRpbztcXG5cXHR2ZWMyIGVuZEpvaW4gPSBlbmRKb2luRGlyZWN0aW9uICogZW5kTWl0ZXJSYXRpbztcXG5cXG5cXHR2ZWMyIHN0YXJ0VG9wSm9pbiwgc3RhcnRCb3RKb2luLCBlbmRUb3BKb2luLCBlbmRCb3RKb2luO1xcblxcdHN0YXJ0VG9wSm9pbiA9IHNpZ24oc3RhcnRKb2luU2hpZnQpICogc3RhcnRKb2luICogLjU7XFxuXFx0c3RhcnRCb3RKb2luID0gLXN0YXJ0VG9wSm9pbjtcXG5cXG5cXHRlbmRUb3BKb2luID0gc2lnbihlbmRKb2luU2hpZnQpICogZW5kSm9pbiAqIC41O1xcblxcdGVuZEJvdEpvaW4gPSAtZW5kVG9wSm9pbjtcXG5cXG5cXHR2ZWMyIGFUb3BDb29yZCA9IGFDb29yZCArIG5vcm1hbFdpZHRoICogc3RhcnRUb3BKb2luO1xcblxcdHZlYzIgYlRvcENvb3JkID0gYkNvb3JkICsgbm9ybWFsV2lkdGggKiBlbmRUb3BKb2luO1xcblxcdHZlYzIgYUJvdENvb3JkID0gYUNvb3JkICsgbm9ybWFsV2lkdGggKiBzdGFydEJvdEpvaW47XFxuXFx0dmVjMiBiQm90Q29vcmQgPSBiQ29vcmQgKyBub3JtYWxXaWR0aCAqIGVuZEJvdEpvaW47XFxuXFxuXFx0Ly9taXRlciBhbnRpLWNsaXBwaW5nXFxuXFx0ZmxvYXQgYmFDbGlwcGluZyA9IGRpc3RUb0xpbmUoYkNvb3JkLCBhQ29vcmQsIGFCb3RDb29yZCkgLyBkb3Qobm9ybWFsaXplKG5vcm1hbFdpZHRoICogZW5kQm90Sm9pbiksIG5vcm1hbGl6ZShub3JtYWxXaWR0aC55eCAqIHZlYzIoLXN0YXJ0Qm90Sm9pbi55LCBzdGFydEJvdEpvaW4ueCkpKTtcXG5cXHRmbG9hdCBhYkNsaXBwaW5nID0gZGlzdFRvTGluZShhQ29vcmQsIGJDb29yZCwgYlRvcENvb3JkKSAvIGRvdChub3JtYWxpemUobm9ybWFsV2lkdGggKiBzdGFydEJvdEpvaW4pLCBub3JtYWxpemUobm9ybWFsV2lkdGgueXggKiB2ZWMyKC1lbmRCb3RKb2luLnksIGVuZEJvdEpvaW4ueCkpKTtcXG5cXG5cXHQvL3ByZXZlbnQgY2xvc2UgdG8gcmV2ZXJzZSBkaXJlY3Rpb24gc3dpdGNoXFxuXFx0Ym9vbCBwcmV2UmV2ZXJzZSA9IGRvdChjdXJyVGFuZ2VudCwgcHJldlRhbmdlbnQpIDw9IFJFVkVSU0VfVEhSRVNIT0xEICYmIGFicyhkb3QoY3VyclRhbmdlbnQsIHByZXZOb3JtYWwpKSAqIG1pbihsZW5ndGgocHJldkRpZmYpLCBsZW5ndGgoY3VyckRpZmYpKSA8ICBsZW5ndGgobm9ybWFsV2lkdGggKiBjdXJyTm9ybWFsKTtcXG5cXHRib29sIG5leHRSZXZlcnNlID0gZG90KGN1cnJUYW5nZW50LCBuZXh0VGFuZ2VudCkgPD0gUkVWRVJTRV9USFJFU0hPTEQgJiYgYWJzKGRvdChjdXJyVGFuZ2VudCwgbmV4dE5vcm1hbCkpICogbWluKGxlbmd0aChuZXh0RGlmZiksIGxlbmd0aChjdXJyRGlmZikpIDwgIGxlbmd0aChub3JtYWxXaWR0aCAqIGN1cnJOb3JtYWwpO1xcblxcblxcdGlmIChwcmV2UmV2ZXJzZSkge1xcblxcdFxcdC8vbWFrZSBqb2luIHJlY3Rhbmd1bGFyXFxuXFx0XFx0dmVjMiBtaXRlclNoaWZ0ID0gbm9ybWFsV2lkdGggKiBzdGFydEpvaW5EaXJlY3Rpb24gKiBtaXRlckxpbWl0ICogLjU7XFxuXFx0XFx0ZmxvYXQgbm9ybWFsQWRqdXN0ID0gMS4gLSBtaW4obWl0ZXJMaW1pdCAvIHN0YXJ0TWl0ZXJSYXRpbywgMS4pO1xcblxcdFxcdGFCb3RDb29yZCA9IGFDb29yZCArIG1pdGVyU2hpZnQgLSBub3JtYWxBZGp1c3QgKiBub3JtYWxXaWR0aCAqIGN1cnJOb3JtYWwgKiAuNTtcXG5cXHRcXHRhVG9wQ29vcmQgPSBhQ29vcmQgKyBtaXRlclNoaWZ0ICsgbm9ybWFsQWRqdXN0ICogbm9ybWFsV2lkdGggKiBjdXJyTm9ybWFsICogLjU7XFxuXFx0fVxcblxcdGVsc2UgaWYgKCFuZXh0UmV2ZXJzZSAmJiBiYUNsaXBwaW5nID4gMC4gJiYgYmFDbGlwcGluZyA8IGxlbmd0aChub3JtYWxXaWR0aCAqIGVuZEJvdEpvaW4pKSB7XFxuXFx0XFx0Ly9oYW5kbGUgbWl0ZXIgY2xpcHBpbmdcXG5cXHRcXHRiVG9wQ29vcmQgLT0gbm9ybWFsV2lkdGggKiBlbmRUb3BKb2luO1xcblxcdFxcdGJUb3BDb29yZCArPSBub3JtYWxpemUoZW5kVG9wSm9pbiAqIG5vcm1hbFdpZHRoKSAqIGJhQ2xpcHBpbmc7XFxuXFx0fVxcblxcblxcdGlmIChuZXh0UmV2ZXJzZSkge1xcblxcdFxcdC8vbWFrZSBqb2luIHJlY3Rhbmd1bGFyXFxuXFx0XFx0dmVjMiBtaXRlclNoaWZ0ID0gbm9ybWFsV2lkdGggKiBlbmRKb2luRGlyZWN0aW9uICogbWl0ZXJMaW1pdCAqIC41O1xcblxcdFxcdGZsb2F0IG5vcm1hbEFkanVzdCA9IDEuIC0gbWluKG1pdGVyTGltaXQgLyBlbmRNaXRlclJhdGlvLCAxLik7XFxuXFx0XFx0YkJvdENvb3JkID0gYkNvb3JkICsgbWl0ZXJTaGlmdCAtIG5vcm1hbEFkanVzdCAqIG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCAqIC41O1xcblxcdFxcdGJUb3BDb29yZCA9IGJDb29yZCArIG1pdGVyU2hpZnQgKyBub3JtYWxBZGp1c3QgKiBub3JtYWxXaWR0aCAqIGN1cnJOb3JtYWwgKiAuNTtcXG5cXHR9XFxuXFx0ZWxzZSBpZiAoIXByZXZSZXZlcnNlICYmIGFiQ2xpcHBpbmcgPiAwLiAmJiBhYkNsaXBwaW5nIDwgbGVuZ3RoKG5vcm1hbFdpZHRoICogc3RhcnRCb3RKb2luKSkge1xcblxcdFxcdC8vaGFuZGxlIG1pdGVyIGNsaXBwaW5nXFxuXFx0XFx0YUJvdENvb3JkIC09IG5vcm1hbFdpZHRoICogc3RhcnRCb3RKb2luO1xcblxcdFxcdGFCb3RDb29yZCArPSBub3JtYWxpemUoc3RhcnRCb3RKb2luICogbm9ybWFsV2lkdGgpICogYWJDbGlwcGluZztcXG5cXHR9XFxuXFxuXFx0dmVjMiBhVG9wUG9zaXRpb24gPSAoYVRvcENvb3JkKSAqIGFkanVzdGVkU2NhbGUgKyB0cmFuc2xhdGU7XFxuXFx0dmVjMiBhQm90UG9zaXRpb24gPSAoYUJvdENvb3JkKSAqIGFkanVzdGVkU2NhbGUgKyB0cmFuc2xhdGU7XFxuXFxuXFx0dmVjMiBiVG9wUG9zaXRpb24gPSAoYlRvcENvb3JkKSAqIGFkanVzdGVkU2NhbGUgKyB0cmFuc2xhdGU7XFxuXFx0dmVjMiBiQm90UG9zaXRpb24gPSAoYkJvdENvb3JkKSAqIGFkanVzdGVkU2NhbGUgKyB0cmFuc2xhdGU7XFxuXFxuXFx0Ly9wb3NpdGlvbiBpcyBub3JtYWxpemVkIDAuLjEgY29vcmQgb24gdGhlIHNjcmVlblxcblxcdHZlYzIgcG9zaXRpb24gPSAoYVRvcFBvc2l0aW9uICogbGluZVRvcCArIGFCb3RQb3NpdGlvbiAqIGxpbmVCb3QpICogbGluZVN0YXJ0ICsgKGJUb3BQb3NpdGlvbiAqIGxpbmVUb3AgKyBiQm90UG9zaXRpb24gKiBsaW5lQm90KSAqIGxpbmVFbmQ7XFxuXFxuXFx0c3RhcnRDb29yZCA9IGFDb29yZCAqIHNjYWxlUmF0aW8gKyB0cmFuc2xhdGUgKiB2aWV3cG9ydC56dyArIHZpZXdwb3J0Lnh5O1xcblxcdGVuZENvb3JkID0gYkNvb3JkICogc2NhbGVSYXRpbyArIHRyYW5zbGF0ZSAqIHZpZXdwb3J0Lnp3ICsgdmlld3BvcnQueHk7XFxuXFxuXFx0Z2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uICAqIDIuMCAtIDEuMCwgZGVwdGgsIDEpO1xcblxcblxcdGVuYWJsZVN0YXJ0TWl0ZXIgPSBzdGVwKGRvdChjdXJyVGFuZ2VudCwgcHJldlRhbmdlbnQpLCAuNSk7XFxuXFx0ZW5hYmxlRW5kTWl0ZXIgPSBzdGVwKGRvdChjdXJyVGFuZ2VudCwgbmV4dFRhbmdlbnQpLCAuNSk7XFxuXFxuXFx0Ly9iZXZlbCBtaXRlciBjdXRvZmZzXFxuXFx0aWYgKG1pdGVyTW9kZSA9PSAxLikge1xcblxcdFxcdGlmIChlbmFibGVTdGFydE1pdGVyID09IDEuKSB7XFxuXFx0XFx0XFx0dmVjMiBzdGFydE1pdGVyV2lkdGggPSB2ZWMyKHN0YXJ0Sm9pbkRpcmVjdGlvbikgKiB0aGlja25lc3MgKiBtaXRlckxpbWl0ICogLjU7XFxuXFx0XFx0XFx0c3RhcnRDdXRvZmYgPSB2ZWM0KGFDb29yZCwgYUNvb3JkKTtcXG5cXHRcXHRcXHRzdGFydEN1dG9mZi56dyArPSB2ZWMyKC1zdGFydEpvaW5EaXJlY3Rpb24ueSwgc3RhcnRKb2luRGlyZWN0aW9uLngpIC8gc2NhbGVSYXRpbztcXG5cXHRcXHRcXHRzdGFydEN1dG9mZiA9IHN0YXJ0Q3V0b2ZmICogc2NhbGVSYXRpby54eXh5ICsgdHJhbnNsYXRlLnh5eHkgKiB2aWV3cG9ydC56d3p3O1xcblxcdFxcdFxcdHN0YXJ0Q3V0b2ZmICs9IHZpZXdwb3J0Lnh5eHk7XFxuXFx0XFx0XFx0c3RhcnRDdXRvZmYgKz0gc3RhcnRNaXRlcldpZHRoLnh5eHk7XFxuXFx0XFx0fVxcblxcblxcdFxcdGlmIChlbmFibGVFbmRNaXRlciA9PSAxLikge1xcblxcdFxcdFxcdHZlYzIgZW5kTWl0ZXJXaWR0aCA9IHZlYzIoZW5kSm9pbkRpcmVjdGlvbikgKiB0aGlja25lc3MgKiBtaXRlckxpbWl0ICogLjU7XFxuXFx0XFx0XFx0ZW5kQ3V0b2ZmID0gdmVjNChiQ29vcmQsIGJDb29yZCk7XFxuXFx0XFx0XFx0ZW5kQ3V0b2ZmLnp3ICs9IHZlYzIoLWVuZEpvaW5EaXJlY3Rpb24ueSwgZW5kSm9pbkRpcmVjdGlvbi54KSAgLyBzY2FsZVJhdGlvO1xcblxcdFxcdFxcdGVuZEN1dG9mZiA9IGVuZEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcXG5cXHRcXHRcXHRlbmRDdXRvZmYgKz0gdmlld3BvcnQueHl4eTtcXG5cXHRcXHRcXHRlbmRDdXRvZmYgKz0gZW5kTWl0ZXJXaWR0aC54eXh5O1xcblxcdFxcdH1cXG5cXHR9XFxuXFxuXFx0Ly9yb3VuZCBtaXRlciBjdXRvZmZzXFxuXFx0ZWxzZSBpZiAobWl0ZXJNb2RlID09IDIuKSB7XFxuXFx0XFx0aWYgKGVuYWJsZVN0YXJ0TWl0ZXIgPT0gMS4pIHtcXG5cXHRcXHRcXHR2ZWMyIHN0YXJ0TWl0ZXJXaWR0aCA9IHZlYzIoc3RhcnRKb2luRGlyZWN0aW9uKSAqIHRoaWNrbmVzcyAqIGFicyhkb3Qoc3RhcnRKb2luRGlyZWN0aW9uLCBjdXJyTm9ybWFsKSkgKiAuNTtcXG5cXHRcXHRcXHRzdGFydEN1dG9mZiA9IHZlYzQoYUNvb3JkLCBhQ29vcmQpO1xcblxcdFxcdFxcdHN0YXJ0Q3V0b2ZmLnp3ICs9IHZlYzIoLXN0YXJ0Sm9pbkRpcmVjdGlvbi55LCBzdGFydEpvaW5EaXJlY3Rpb24ueCkgLyBzY2FsZVJhdGlvO1xcblxcdFxcdFxcdHN0YXJ0Q3V0b2ZmID0gc3RhcnRDdXRvZmYgKiBzY2FsZVJhdGlvLnh5eHkgKyB0cmFuc2xhdGUueHl4eSAqIHZpZXdwb3J0Lnp3enc7XFxuXFx0XFx0XFx0c3RhcnRDdXRvZmYgKz0gdmlld3BvcnQueHl4eTtcXG5cXHRcXHRcXHRzdGFydEN1dG9mZiArPSBzdGFydE1pdGVyV2lkdGgueHl4eTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0aWYgKGVuYWJsZUVuZE1pdGVyID09IDEuKSB7XFxuXFx0XFx0XFx0dmVjMiBlbmRNaXRlcldpZHRoID0gdmVjMihlbmRKb2luRGlyZWN0aW9uKSAqIHRoaWNrbmVzcyAqIGFicyhkb3QoZW5kSm9pbkRpcmVjdGlvbiwgY3Vyck5vcm1hbCkpICogLjU7XFxuXFx0XFx0XFx0ZW5kQ3V0b2ZmID0gdmVjNChiQ29vcmQsIGJDb29yZCk7XFxuXFx0XFx0XFx0ZW5kQ3V0b2ZmLnp3ICs9IHZlYzIoLWVuZEpvaW5EaXJlY3Rpb24ueSwgZW5kSm9pbkRpcmVjdGlvbi54KSAgLyBzY2FsZVJhdGlvO1xcblxcdFxcdFxcdGVuZEN1dG9mZiA9IGVuZEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcXG5cXHRcXHRcXHRlbmRDdXRvZmYgKz0gdmlld3BvcnQueHl4eTtcXG5cXHRcXHRcXHRlbmRDdXRvZmYgKz0gZW5kTWl0ZXJXaWR0aC54eXh5O1xcblxcdFxcdH1cXG5cXHR9XFxufVxcblwiXSksZnJhZzpvKFtcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG4jZGVmaW5lIEdMU0xJRlkgMVxcblxcbnVuaWZvcm0gc2FtcGxlcjJEIGRhc2hQYXR0ZXJuO1xcbnVuaWZvcm0gZmxvYXQgZGFzaFNpemUsIHBpeGVsUmF0aW8sIHRoaWNrbmVzcywgb3BhY2l0eSwgaWQsIG1pdGVyTW9kZTtcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xcbnZhcnlpbmcgdmVjMiB0YW5nZW50O1xcbnZhcnlpbmcgdmVjNCBzdGFydEN1dG9mZiwgZW5kQ3V0b2ZmO1xcbnZhcnlpbmcgdmVjMiBzdGFydENvb3JkLCBlbmRDb29yZDtcXG52YXJ5aW5nIGZsb2F0IGVuYWJsZVN0YXJ0TWl0ZXIsIGVuYWJsZUVuZE1pdGVyO1xcblxcbmZsb2F0IGRpc3RUb0xpbmUodmVjMiBwLCB2ZWMyIGEsIHZlYzIgYikge1xcblxcdHZlYzIgZGlmZiA9IGIgLSBhO1xcblxcdHZlYzIgcGVycCA9IG5vcm1hbGl6ZSh2ZWMyKC1kaWZmLnksIGRpZmYueCkpO1xcblxcdHJldHVybiBkb3QocCAtIGEsIHBlcnApO1xcbn1cXG5cXG52b2lkIG1haW4oKSB7XFxuXFx0ZmxvYXQgYWxwaGEgPSAxLiwgZGlzdFRvU3RhcnQsIGRpc3RUb0VuZDtcXG5cXHRmbG9hdCBjdXRvZmYgPSB0aGlja25lc3MgKiAuNTtcXG5cXG5cXHQvL2JldmVsIG1pdGVyXFxuXFx0aWYgKG1pdGVyTW9kZSA9PSAxLikge1xcblxcdFxcdGlmIChlbmFibGVTdGFydE1pdGVyID09IDEuKSB7XFxuXFx0XFx0XFx0ZGlzdFRvU3RhcnQgPSBkaXN0VG9MaW5lKGdsX0ZyYWdDb29yZC54eSwgc3RhcnRDdXRvZmYueHksIHN0YXJ0Q3V0b2ZmLnp3KTtcXG5cXHRcXHRcXHRpZiAoZGlzdFRvU3RhcnQgPCAtMS4pIHtcXG5cXHRcXHRcXHRcXHRkaXNjYXJkO1xcblxcdFxcdFxcdFxcdHJldHVybjtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0XFx0YWxwaGEgKj0gbWluKG1heChkaXN0VG9TdGFydCArIDEuLCAwLiksIDEuKTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0aWYgKGVuYWJsZUVuZE1pdGVyID09IDEuKSB7XFxuXFx0XFx0XFx0ZGlzdFRvRW5kID0gZGlzdFRvTGluZShnbF9GcmFnQ29vcmQueHksIGVuZEN1dG9mZi54eSwgZW5kQ3V0b2ZmLnp3KTtcXG5cXHRcXHRcXHRpZiAoZGlzdFRvRW5kIDwgLTEuKSB7XFxuXFx0XFx0XFx0XFx0ZGlzY2FyZDtcXG5cXHRcXHRcXHRcXHRyZXR1cm47XFxuXFx0XFx0XFx0fVxcblxcdFxcdFxcdGFscGhhICo9IG1pbihtYXgoZGlzdFRvRW5kICsgMS4sIDAuKSwgMS4pO1xcblxcdFxcdH1cXG5cXHR9XFxuXFxuXFx0Ly8gcm91bmQgbWl0ZXJcXG5cXHRlbHNlIGlmIChtaXRlck1vZGUgPT0gMi4pIHtcXG5cXHRcXHRpZiAoZW5hYmxlU3RhcnRNaXRlciA9PSAxLikge1xcblxcdFxcdFxcdGRpc3RUb1N0YXJ0ID0gZGlzdFRvTGluZShnbF9GcmFnQ29vcmQueHksIHN0YXJ0Q3V0b2ZmLnh5LCBzdGFydEN1dG9mZi56dyk7XFxuXFx0XFx0XFx0aWYgKGRpc3RUb1N0YXJ0IDwgMC4pIHtcXG5cXHRcXHRcXHRcXHRmbG9hdCByYWRpdXMgPSBsZW5ndGgoZ2xfRnJhZ0Nvb3JkLnh5IC0gc3RhcnRDb29yZCk7XFxuXFxuXFx0XFx0XFx0XFx0aWYocmFkaXVzID4gY3V0b2ZmICsgLjUpIHtcXG5cXHRcXHRcXHRcXHRcXHRkaXNjYXJkO1xcblxcdFxcdFxcdFxcdFxcdHJldHVybjtcXG5cXHRcXHRcXHRcXHR9XFxuXFxuXFx0XFx0XFx0XFx0YWxwaGEgLT0gc21vb3Roc3RlcChjdXRvZmYgLSAuNSwgY3V0b2ZmICsgLjUsIHJhZGl1cyk7XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXG5cXHRcXHRpZiAoZW5hYmxlRW5kTWl0ZXIgPT0gMS4pIHtcXG5cXHRcXHRcXHRkaXN0VG9FbmQgPSBkaXN0VG9MaW5lKGdsX0ZyYWdDb29yZC54eSwgZW5kQ3V0b2ZmLnh5LCBlbmRDdXRvZmYuencpO1xcblxcdFxcdFxcdGlmIChkaXN0VG9FbmQgPCAwLikge1xcblxcdFxcdFxcdFxcdGZsb2F0IHJhZGl1cyA9IGxlbmd0aChnbF9GcmFnQ29vcmQueHkgLSBlbmRDb29yZCk7XFxuXFxuXFx0XFx0XFx0XFx0aWYocmFkaXVzID4gY3V0b2ZmICsgLjUpIHtcXG5cXHRcXHRcXHRcXHRcXHRkaXNjYXJkO1xcblxcdFxcdFxcdFxcdFxcdHJldHVybjtcXG5cXHRcXHRcXHRcXHR9XFxuXFxuXFx0XFx0XFx0XFx0YWxwaGEgLT0gc21vb3Roc3RlcChjdXRvZmYgLSAuNSwgY3V0b2ZmICsgLjUsIHJhZGl1cyk7XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXHR9XFxuXFxuXFx0ZmxvYXQgdCA9IGZyYWN0KGRvdCh0YW5nZW50LCBnbF9GcmFnQ29vcmQueHkpIC8gZGFzaFNpemUpICogLjUgKyAuMjU7XFxuXFx0ZmxvYXQgZGFzaCA9IHRleHR1cmUyRChkYXNoUGF0dGVybiwgdmVjMih0LCAuNSkpLnI7XFxuXFxuXFx0Z2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xcblxcdGdsX0ZyYWdDb2xvci5hICo9IGFscGhhICogb3BhY2l0eSAqIGRhc2g7XFxufVxcblwiXSksYXR0cmlidXRlczp7bGluZUVuZDp7YnVmZmVyOnIsZGl2aXNvcjowLHN0cmlkZTo4LG9mZnNldDowfSxsaW5lVG9wOntidWZmZXI6cixkaXZpc29yOjAsc3RyaWRlOjgsb2Zmc2V0OjR9LGFDb2xvcjp7YnVmZmVyOnQucHJvcChcImNvbG9yQnVmZmVyXCIpLHN0cmlkZTo0LG9mZnNldDowLGRpdmlzb3I6MX0sYkNvbG9yOntidWZmZXI6dC5wcm9wKFwiY29sb3JCdWZmZXJcIiksc3RyaWRlOjQsb2Zmc2V0OjQsZGl2aXNvcjoxfSxwcmV2Q29vcmQ6e2J1ZmZlcjp0LnByb3AoXCJwb3NpdGlvbkJ1ZmZlclwiKSxzdHJpZGU6OCxvZmZzZXQ6MCxkaXZpc29yOjF9LGFDb29yZDp7YnVmZmVyOnQucHJvcChcInBvc2l0aW9uQnVmZmVyXCIpLHN0cmlkZTo4LG9mZnNldDo4LGRpdmlzb3I6MX0sYkNvb3JkOntidWZmZXI6dC5wcm9wKFwicG9zaXRpb25CdWZmZXJcIiksc3RyaWRlOjgsb2Zmc2V0OjE2LGRpdmlzb3I6MX0sbmV4dENvb3JkOntidWZmZXI6dC5wcm9wKFwicG9zaXRpb25CdWZmZXJcIiksc3RyaWRlOjgsb2Zmc2V0OjI0LGRpdmlzb3I6MX19fSxuKSl9Y2F0Y2godCl7ZT1pfXJldHVybntmaWxsOnQoe3ByaW1pdGl2ZTpcInRyaWFuZ2xlXCIsZWxlbWVudHM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS50cmlhbmdsZXN9LG9mZnNldDowLHZlcnQ6byhbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbiwgcG9zaXRpb25GcmFjdDtcXG5cXG51bmlmb3JtIHZlYzQgY29sb3I7XFxudW5pZm9ybSB2ZWMyIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0O1xcbnVuaWZvcm0gZmxvYXQgcGl4ZWxSYXRpbywgaWQ7XFxudW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xcblxcbmNvbnN0IGZsb2F0IE1BWF9MSU5FUyA9IDI1Ni47XFxuXFxudm9pZCBtYWluKCkge1xcblxcdGZsb2F0IGRlcHRoID0gKE1BWF9MSU5FUyAtIDQuIC0gaWQpIC8gKE1BWF9MSU5FUyk7XFxuXFxuXFx0dmVjMiBwb3NpdGlvbiA9IHBvc2l0aW9uICogc2NhbGUgKyB0cmFuc2xhdGVcXG4gICAgICAgKyBwb3NpdGlvbkZyYWN0ICogc2NhbGUgKyB0cmFuc2xhdGVGcmFjdFxcbiAgICAgICArIHBvc2l0aW9uICogc2NhbGVGcmFjdFxcbiAgICAgICArIHBvc2l0aW9uRnJhY3QgKiBzY2FsZUZyYWN0O1xcblxcblxcdGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiAqIDIuMCAtIDEuMCwgZGVwdGgsIDEpO1xcblxcblxcdGZyYWdDb2xvciA9IGNvbG9yIC8gMjU1LjtcXG5cXHRmcmFnQ29sb3IuYSAqPSBvcGFjaXR5O1xcbn1cXG5cIl0pLGZyYWc6byhbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xcblxcbnZvaWQgbWFpbigpIHtcXG5cXHRnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XFxufVxcblwiXSksdW5pZm9ybXM6e3NjYWxlOnQucHJvcChcInNjYWxlXCIpLGNvbG9yOnQucHJvcChcImZpbGxcIiksc2NhbGVGcmFjdDp0LnByb3AoXCJzY2FsZUZyYWN0XCIpLHRyYW5zbGF0ZUZyYWN0OnQucHJvcChcInRyYW5zbGF0ZUZyYWN0XCIpLHRyYW5zbGF0ZTp0LnByb3AoXCJ0cmFuc2xhdGVcIiksb3BhY2l0eTp0LnByb3AoXCJvcGFjaXR5XCIpLHBpeGVsUmF0aW86dC5jb250ZXh0KFwicGl4ZWxSYXRpb1wiKSxpZDp0LnByb3AoXCJpZFwiKSx2aWV3cG9ydDpmdW5jdGlvbih0LGUpe3JldHVybltlLnZpZXdwb3J0LngsZS52aWV3cG9ydC55LHQudmlld3BvcnRXaWR0aCx0LnZpZXdwb3J0SGVpZ2h0XX19LGF0dHJpYnV0ZXM6e3Bvc2l0aW9uOntidWZmZXI6dC5wcm9wKFwicG9zaXRpb25CdWZmZXJcIiksc3RyaWRlOjgsb2Zmc2V0Ojh9LHBvc2l0aW9uRnJhY3Q6e2J1ZmZlcjp0LnByb3AoXCJwb3NpdGlvbkZyYWN0QnVmZmVyXCIpLHN0cmlkZTo4LG9mZnNldDo4fX0sYmxlbmQ6bi5ibGVuZCxkZXB0aDp7ZW5hYmxlOiExfSxzY2lzc29yOm4uc2Npc3NvcixzdGVuY2lsOm4uc3RlbmNpbCx2aWV3cG9ydDpuLnZpZXdwb3J0fSkscmVjdDppLG1pdGVyOmV9fSx2LmRlZmF1bHRzPXtkYXNoZXM6bnVsbCxqb2luOlwibWl0ZXJcIixtaXRlckxpbWl0OjEsdGhpY2tuZXNzOjEwLGNhcDpcInNxdWFyZVwiLGNvbG9yOlwiYmxhY2tcIixvcGFjaXR5OjEsb3ZlcmxheTohMSx2aWV3cG9ydDpudWxsLHJhbmdlOm51bGwsY2xvc2U6ITEsZmlsbDpudWxsfSx2LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGg7ci0tOyllW3JdPWFyZ3VtZW50c1tyXTtlLmxlbmd0aCYmKHQ9dGhpcykudXBkYXRlLmFwcGx5KHQsZSksdGhpcy5kcmF3KCl9LHYucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVtdLHI9YXJndW1lbnRzLmxlbmd0aDtyLS07KWVbcl09YXJndW1lbnRzW3JdO3JldHVybihlLmxlbmd0aD9lOnRoaXMucGFzc2VzKS5mb3JFYWNoKGZ1bmN0aW9uKGUscil7dmFyIG47aWYoZSYmQXJyYXkuaXNBcnJheShlKSlyZXR1cm4obj10KS5kcmF3LmFwcGx5KG4sZSk7XCJudW1iZXJcIj09dHlwZW9mIGUmJihlPXQucGFzc2VzW2VdKSxlJiZlLmNvdW50PjEmJmUub3BhY2l0eSYmKHQucmVnbC5fcmVmcmVzaCgpLGUuZmlsbCYmZS50cmlhbmdsZXMmJmUudHJpYW5nbGVzLmxlbmd0aD4yJiZ0LnNoYWRlcnMuZmlsbChlKSxlLnRoaWNrbmVzcyYmKGUuc2NhbGVbMF0qZS52aWV3cG9ydC53aWR0aD52LnByZWNpc2lvblRocmVzaG9sZHx8ZS5zY2FsZVsxXSplLnZpZXdwb3J0LmhlaWdodD52LnByZWNpc2lvblRocmVzaG9sZD90LnNoYWRlcnMucmVjdChlKTpcInJlY3RcIj09PWUuam9pbnx8IWUuam9pbiYmKGUudGhpY2tuZXNzPD0yfHxlLmNvdW50Pj12Lm1heFBvaW50cyk/dC5zaGFkZXJzLnJlY3QoZSk6dC5zaGFkZXJzLm1pdGVyKGUpKSl9KSx0aGlzfSx2LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0KXtudWxsIT10Lmxlbmd0aD9cIm51bWJlclwiPT10eXBlb2YgdFswXSYmKHQ9W3twb3NpdGlvbnM6dH1dKTpBcnJheS5pc0FycmF5KHQpfHwodD1bdF0pO3ZhciByPXRoaXMucmVnbCxvPXRoaXMuZ2w7aWYodC5mb3JFYWNoKGZ1bmN0aW9uKHQsaCl7dmFyIGQ9ZS5wYXNzZXNbaF07aWYodm9pZCAwIT09dClpZihudWxsIT09dCl7aWYoXCJudW1iZXJcIj09dHlwZW9mIHRbMF0mJih0PXtwb3NpdGlvbnM6dH0pLHQ9cyh0LHtwb3NpdGlvbnM6XCJwb3NpdGlvbnMgcG9pbnRzIGRhdGEgY29vcmRzXCIsdGhpY2tuZXNzOlwidGhpY2tuZXNzIGxpbmVXaWR0aCBsaW5lV2lkdGhzIGxpbmUtd2lkdGggbGluZXdpZHRoIHdpZHRoIHN0cm9rZS13aWR0aCBzdHJva2V3aWR0aCBzdHJva2VXaWR0aFwiLGpvaW46XCJsaW5lSm9pbiBsaW5lam9pbiBqb2luIHR5cGUgbW9kZVwiLG1pdGVyTGltaXQ6XCJtaXRlcmxpbWl0IG1pdGVyTGltaXRcIixkYXNoZXM6XCJkYXNoIGRhc2hlcyBkYXNoYXJyYXkgZGFzaC1hcnJheSBkYXNoQXJyYXlcIixjb2xvcjpcImNvbG9yIGNvbG91ciBzdHJva2UgY29sb3JzIGNvbG91cnMgc3Ryb2tlLWNvbG9yIHN0cm9rZUNvbG9yXCIsZmlsbDpcImZpbGwgZmlsbC1jb2xvciBmaWxsQ29sb3JcIixvcGFjaXR5OlwiYWxwaGEgb3BhY2l0eVwiLG92ZXJsYXk6XCJvdmVybGF5IGNyZWFzZSBvdmVybGFwIGludGVyc2VjdFwiLGNsb3NlOlwiY2xvc2VkIGNsb3NlIGNsb3NlZC1wYXRoIGNsb3NlUGF0aFwiLHJhbmdlOlwicmFuZ2UgZGF0YUJveFwiLHZpZXdwb3J0Olwidmlld3BvcnQgdmlld0JveFwiLGhvbGU6XCJob2xlcyBob2xlIGhvbGxvd1wifSksZHx8KGUucGFzc2VzW2hdPWQ9e2lkOmgsc2NhbGU6bnVsbCxzY2FsZUZyYWN0Om51bGwsdHJhbnNsYXRlOm51bGwsdHJhbnNsYXRlRnJhY3Q6bnVsbCxjb3VudDowLGhvbGU6W10sZGVwdGg6MCxkYXNoTGVuZ3RoOjEsZGFzaFRleHR1cmU6ci50ZXh0dXJlKHtjaGFubmVsczoxLGRhdGE6bmV3IFVpbnQ4QXJyYXkoWzI1NV0pLHdpZHRoOjEsaGVpZ2h0OjEsbWFnOlwibGluZWFyXCIsbWluOlwibGluZWFyXCJ9KSxjb2xvckJ1ZmZlcjpyLmJ1ZmZlcih7dXNhZ2U6XCJkeW5hbWljXCIsdHlwZTpcInVpbnQ4XCIsZGF0YTpuZXcgVWludDhBcnJheX0pLHBvc2l0aW9uQnVmZmVyOnIuYnVmZmVyKHt1c2FnZTpcImR5bmFtaWNcIix0eXBlOlwiZmxvYXRcIixkYXRhOm5ldyBVaW50OEFycmF5fSkscG9zaXRpb25GcmFjdEJ1ZmZlcjpyLmJ1ZmZlcih7dXNhZ2U6XCJkeW5hbWljXCIsdHlwZTpcImZsb2F0XCIsZGF0YTpuZXcgVWludDhBcnJheX0pfSx0PWEoe30sdi5kZWZhdWx0cyx0KSksbnVsbCE9dC50aGlja25lc3MmJihkLnRoaWNrbmVzcz1wYXJzZUZsb2F0KHQudGhpY2tuZXNzKSksbnVsbCE9dC5vcGFjaXR5JiYoZC5vcGFjaXR5PXBhcnNlRmxvYXQodC5vcGFjaXR5KSksbnVsbCE9dC5taXRlckxpbWl0JiYoZC5taXRlckxpbWl0PXBhcnNlRmxvYXQodC5taXRlckxpbWl0KSksbnVsbCE9dC5vdmVybGF5JiYoZC5vdmVybGF5PSEhdC5vdmVybGF5LGg8di5tYXhMaW5lcyYmKGQuZGVwdGg9Mioodi5tYXhMaW5lcy0xLWgldi5tYXhMaW5lcykvdi5tYXhMaW5lcy0xKSksbnVsbCE9dC5qb2luJiYoZC5qb2luPXQuam9pbiksbnVsbCE9dC5ob2xlJiYoZC5ob2xlPXQuaG9sZSksbnVsbCE9dC5maWxsJiYoZC5maWxsPXQuZmlsbD9uKHQuZmlsbCxcInVpbnQ4XCIpOm51bGwpLG51bGwhPXQudmlld3BvcnQmJihkLnZpZXdwb3J0PWcodC52aWV3cG9ydCkpLGQudmlld3BvcnR8fChkLnZpZXdwb3J0PWcoW28uZHJhd2luZ0J1ZmZlcldpZHRoLG8uZHJhd2luZ0J1ZmZlckhlaWdodF0pKSxudWxsIT10LmNsb3NlJiYoZC5jbG9zZT10LmNsb3NlKSxudWxsPT09dC5wb3NpdGlvbnMmJih0LnBvc2l0aW9ucz1bXSksdC5wb3NpdGlvbnMpe3ZhciBtLHk7aWYodC5wb3NpdGlvbnMueCYmdC5wb3NpdGlvbnMueSl7dmFyIHg9dC5wb3NpdGlvbnMueCxiPXQucG9zaXRpb25zLnk7eT1kLmNvdW50PU1hdGgubWF4KHgubGVuZ3RoLGIubGVuZ3RoKSxtPW5ldyBGbG9hdDY0QXJyYXkoMip5KTtmb3IodmFyIF89MDtfPHk7XysrKW1bMipfXT14W19dLG1bMipfKzFdPWJbX119ZWxzZSBtPWwodC5wb3NpdGlvbnMsXCJmbG9hdDY0XCIpLHk9ZC5jb3VudD1NYXRoLmZsb29yKG0ubGVuZ3RoLzIpO3ZhciB3PWQuYm91bmRzPWkobSwyKTtpZihkLmZpbGwpe2Zvcih2YXIgaz1bXSxBPXt9LFQ9MCxNPTAsUz0wLEU9ZC5jb3VudDtNPEU7TSsrKXt2YXIgQz1tWzIqTV0sTD1tWzIqTSsxXTtpc05hTihDKXx8aXNOYU4oTCl8fG51bGw9PUN8fG51bGw9PUw/KEM9bVsyKlRdLEw9bVsyKlQrMV0sQVtNXT1UKTpUPU0sa1tTKytdPUMsa1tTKytdPUx9Zm9yKHZhciB6PWMoayxkLmhvbGV8fFtdKSxPPTAsST16Lmxlbmd0aDtPPEk7TysrKW51bGwhPUFbeltPXV0mJih6W09dPUFbeltPXV0pO2QudHJpYW5nbGVzPXp9dmFyIEQ9bmV3IEZsb2F0NjRBcnJheShtKTt1KEQsMix3KTt2YXIgUD1uZXcgRmxvYXQ2NEFycmF5KDIqeSs2KTtkLmNsb3NlP21bMF09PT1tWzIqeS0yXSYmbVsxXT09PW1bMip5LTFdPyhQWzBdPURbMip5LTRdLFBbMV09RFsyKnktM10pOihQWzBdPURbMip5LTJdLFBbMV09RFsyKnktMV0pOihQWzBdPURbMF0sUFsxXT1EWzFdKSxQLnNldChELDIpLGQuY2xvc2U/bVswXT09PW1bMip5LTJdJiZtWzFdPT09bVsyKnktMV0/KFBbMip5KzJdPURbMl0sUFsyKnkrM109RFszXSxkLmNvdW50LT0xKTooUFsyKnkrMl09RFswXSxQWzIqeSszXT1EWzFdLFBbMip5KzRdPURbMl0sUFsyKnkrNV09RFszXSk6KFBbMip5KzJdPURbMip5LTJdLFBbMip5KzNdPURbMip5LTFdLFBbMip5KzRdPURbMip5LTJdLFBbMip5KzVdPURbMip5LTFdKSxkLnBvc2l0aW9uQnVmZmVyKGYoUCkpLGQucG9zaXRpb25GcmFjdEJ1ZmZlcihwKFApKX1pZih0LnJhbmdlP2QucmFuZ2U9dC5yYW5nZTpkLnJhbmdlfHwoZC5yYW5nZT1kLmJvdW5kcyksKHQucmFuZ2V8fHQucG9zaXRpb25zKSYmZC5jb3VudCl7dmFyIFI9ZC5ib3VuZHMsRj1SWzJdLVJbMF0sQj1SWzNdLVJbMV0sTj1kLnJhbmdlWzJdLWQucmFuZ2VbMF0saj1kLnJhbmdlWzNdLWQucmFuZ2VbMV07ZC5zY2FsZT1bRi9OLEIval0sZC50cmFuc2xhdGU9Wy1kLnJhbmdlWzBdL04rUlswXS9OfHwwLC1kLnJhbmdlWzFdL2orUlsxXS9qfHwwXSxkLnNjYWxlRnJhY3Q9cChkLnNjYWxlKSxkLnRyYW5zbGF0ZUZyYWN0PXAoZC50cmFuc2xhdGUpfWlmKHQuZGFzaGVzKXt2YXIgVixVPTA7aWYoIXQuZGFzaGVzfHx0LmRhc2hlcy5sZW5ndGg8MilVPTEsVj1uZXcgVWludDhBcnJheShbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0pO2Vsc2V7VT0wO2Zvcih2YXIgcT0wO3E8dC5kYXNoZXMubGVuZ3RoOysrcSlVKz10LmRhc2hlc1txXTtWPW5ldyBVaW50OEFycmF5KFUqdi5kYXNoTXVsdCk7Zm9yKHZhciBIPTAsRz0yNTUsWT0wO1k8MjtZKyspZm9yKHZhciBXPTA7Vzx0LmRhc2hlcy5sZW5ndGg7KytXKXtmb3IodmFyIFg9MCxaPXQuZGFzaGVzW1ddKnYuZGFzaE11bHQqLjU7WDxaOysrWClWW0grK109RztHXj0yNTV9fWQuZGFzaExlbmd0aD1VLGQuZGFzaFRleHR1cmUoe2NoYW5uZWxzOjEsZGF0YTpWLHdpZHRoOlYubGVuZ3RoLGhlaWdodDoxLG1hZzpcImxpbmVhclwiLG1pbjpcImxpbmVhclwifSwwLDApfWlmKHQuY29sb3Ipe3ZhciAkPWQuY291bnQsSj10LmNvbG9yO0p8fChKPVwidHJhbnNwYXJlbnRcIik7dmFyIEs9bmV3IFVpbnQ4QXJyYXkoNCokKzQpO2lmKEFycmF5LmlzQXJyYXkoSikmJlwibnVtYmVyXCIhPXR5cGVvZiBKWzBdKXtmb3IodmFyIFE9MDtRPCQ7USsrKXt2YXIgdHQ9bihKW1FdLFwidWludDhcIik7Sy5zZXQodHQsNCpRKX1LLnNldChuKEpbMF0sXCJ1aW50OFwiKSw0KiQpfWVsc2UgZm9yKHZhciBldD1uKEosXCJ1aW50OFwiKSxydD0wO3J0PCQrMTtydCsrKUsuc2V0KGV0LDQqcnQpO2QuY29sb3JCdWZmZXIoe3VzYWdlOlwiZHluYW1pY1wiLHR5cGU6XCJ1aW50OFwiLGRhdGE6S30pfX1lbHNlIGUucGFzc2VzW2hdPW51bGx9KSx0Lmxlbmd0aDx0aGlzLnBhc3Nlcy5sZW5ndGgpe2Zvcih2YXIgaD10Lmxlbmd0aDtoPHRoaXMucGFzc2VzLmxlbmd0aDtoKyspe3ZhciBkPWUucGFzc2VzW2hdO2QmJihkLmNvbG9yQnVmZmVyLmRlc3Ryb3koKSxkLnBvc2l0aW9uQnVmZmVyLmRlc3Ryb3koKSxkLmRhc2hUZXh0dXJlLmRlc3Ryb3koKSl9dGhpcy5wYXNzZXMubGVuZ3RoPXQubGVuZ3RofWZvcih2YXIgbT1bXSx5PTA7eTx0aGlzLnBhc3Nlcy5sZW5ndGg7eSsrKW51bGwhPT1lLnBhc3Nlc1t5XSYmbS5wdXNoKGUucGFzc2VzW3ldKTtyZXR1cm4gdGhpcy5wYXNzZXM9bSx0aGlzfX0sdi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY29sb3JCdWZmZXIuZGVzdHJveSgpLHQucG9zaXRpb25CdWZmZXIuZGVzdHJveSgpLHQuZGFzaFRleHR1cmUuZGVzdHJveSgpfSksdGhpcy5wYXNzZXMubGVuZ3RoPTAsdGhpc319LHtcImFycmF5LWJvdW5kc1wiOjU2LFwiYXJyYXktbm9ybWFsaXplXCI6NTcsXCJjb2xvci1ub3JtYWxpemVcIjoxMTEsZWFyY3V0OjE2MyxcImVzNi13ZWFrLW1hcFwiOjIxNyxcImZsYXR0ZW4tdmVydGV4LWRhdGFcIjoyMjQsZ2xzbGlmeTo0MDIsXCJvYmplY3QtYXNzaWduXCI6NDQ3LFwicGFyc2UtcmVjdFwiOjQ1MixcInBpY2stYnktYWxpYXNcIjo0NTgsXCJ0by1mbG9hdDMyXCI6NTIzfV0sNDg1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1bXSxuPSEwLGk9ITEsYT12b2lkIDA7dHJ5e2Zvcih2YXIgbyxzPXRbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz1zLm5leHQoKSkuZG9uZSkmJihyLnB1c2goby52YWx1ZSksIWV8fHIubGVuZ3RoIT09ZSk7bj0hMCk7fWNhdGNoKHQpe2k9ITAsYT10fWZpbmFsbHl7dHJ5e258fG51bGw9PXMucmV0dXJufHxzLnJldHVybigpfWZpbmFsbHl7aWYoaSl0aHJvdyBhfX1yZXR1cm4gcn0odCxlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKX0oKX1mdW5jdGlvbiBpKHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIGU9MCxyPW5ldyBBcnJheSh0Lmxlbmd0aCk7ZTx0Lmxlbmd0aDtlKyspcltlXT10W2VdO3JldHVybiByfX0odCl8fGZ1bmN0aW9uKHQpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QodCl8fFwiW29iamVjdCBBcmd1bWVudHNdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKX0oKX12YXIgYT10KFwiY29sb3Itbm9ybWFsaXplXCIpLG89dChcImFycmF5LWJvdW5kc1wiKSxzPXQoXCJjb2xvci1pZFwiKSxsPXQoXCJwb2ludC1jbHVzdGVyXCIpLGM9dChcIm9iamVjdC1hc3NpZ25cIiksdT10KFwiZ2xzbGlmeVwiKSxoPXQoXCJwaWNrLWJ5LWFsaWFzXCIpLGY9dChcInVwZGF0ZS1kaWZmXCIpLHA9dChcImZsYXR0ZW4tdmVydGV4LWRhdGFcIiksZD10KFwiaXMtaWV4cGxvcmVyXCIpLGc9dChcInRvLWZsb2F0MzJcIiksdj10KFwicGFyc2UtcmVjdFwiKSxtPXk7ZnVuY3Rpb24geSh0LGUpe3ZhciByPXRoaXM7aWYoISh0aGlzIGluc3RhbmNlb2YgeSkpcmV0dXJuIG5ldyB5KHQsZSk7XCJmdW5jdGlvblwiPT10eXBlb2YgdD8oZXx8KGU9e30pLGUucmVnbD10KTooZT10LHQ9bnVsbCksZSYmZS5sZW5ndGgmJihlLnBvc2l0aW9ucz1lKTt2YXIgbixpPSh0PWUucmVnbCkuX2dsLGE9W107dGhpcy50b29NYW55Q29sb3JzPWQsbj10LnRleHR1cmUoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMTAyMCksd2lkdGg6MjU1LGhlaWdodDoxLHR5cGU6XCJ1aW50OFwiLGZvcm1hdDpcInJnYmFcIix3cmFwUzpcImNsYW1wXCIsd3JhcFQ6XCJjbGFtcFwiLG1hZzpcIm5lYXJlc3RcIixtaW46XCJuZWFyZXN0XCJ9KSxjKHRoaXMse3JlZ2w6dCxnbDppLGdyb3VwczpbXSxtYXJrZXJDYWNoZTpbbnVsbF0sbWFya2VyVGV4dHVyZXM6W251bGxdLHBhbGV0dGU6YSxwYWxldHRlSWRzOnt9LHBhbGV0dGVUZXh0dXJlOm4sbWF4Q29sb3JzOjI1NSxtYXhTaXplOjEwMCxjYW52YXM6aS5jYW52YXN9KSx0aGlzLnVwZGF0ZShlKTt2YXIgbz17dW5pZm9ybXM6e3BpeGVsUmF0aW86dC5jb250ZXh0KFwicGl4ZWxSYXRpb1wiKSxwYWxldHRlOm4scGFsZXR0ZVNpemU6ZnVuY3Rpb24odCxlKXtyZXR1cm5bci50b29NYW55Q29sb3JzPzA6MjU1LG4uaGVpZ2h0XX0sc2NhbGU6dC5wcm9wKFwic2NhbGVcIiksc2NhbGVGcmFjdDp0LnByb3AoXCJzY2FsZUZyYWN0XCIpLHRyYW5zbGF0ZTp0LnByb3AoXCJ0cmFuc2xhdGVcIiksdHJhbnNsYXRlRnJhY3Q6dC5wcm9wKFwidHJhbnNsYXRlRnJhY3RcIiksb3BhY2l0eTp0LnByb3AoXCJvcGFjaXR5XCIpLG1hcmtlcjp0LnByb3AoXCJtYXJrZXJUZXh0dXJlXCIpfSxhdHRyaWJ1dGVzOnt4OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUueEF0dHJ8fHtidWZmZXI6ZS5wb3NpdGlvbkJ1ZmZlcixzdHJpZGU6OCxvZmZzZXQ6MH19LHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS55QXR0cnx8e2J1ZmZlcjplLnBvc2l0aW9uQnVmZmVyLHN0cmlkZTo4LG9mZnNldDo0fX0seEZyYWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUueEF0dHI/e2NvbnN0YW50OlswLDBdfTp7YnVmZmVyOmUucG9zaXRpb25GcmFjdEJ1ZmZlcixzdHJpZGU6OCxvZmZzZXQ6MH19LHlGcmFjdDpmdW5jdGlvbih0LGUpe3JldHVybiBlLnlBdHRyP3tjb25zdGFudDpbMCwwXX06e2J1ZmZlcjplLnBvc2l0aW9uRnJhY3RCdWZmZXIsc3RyaWRlOjgsb2Zmc2V0OjR9fSxzaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc2l6ZS5sZW5ndGg/e2J1ZmZlcjplLnNpemVCdWZmZXIsc3RyaWRlOjIsb2Zmc2V0OjB9Ontjb25zdGFudDpbTWF0aC5yb3VuZCgyNTUqZS5zaXplL3IubWF4U2l6ZSldfX0sYm9yZGVyU2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybiBlLmJvcmRlclNpemUubGVuZ3RoP3tidWZmZXI6ZS5zaXplQnVmZmVyLHN0cmlkZToyLG9mZnNldDoxfTp7Y29uc3RhbnQ6W01hdGgucm91bmQoMjU1KmUuYm9yZGVyU2l6ZS9yLm1heFNpemUpXX19LGNvbG9ySWQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5jb2xvci5sZW5ndGg/e2J1ZmZlcjplLmNvbG9yQnVmZmVyLHN0cmlkZTpyLnRvb01hbnlDb2xvcnM/ODo0LG9mZnNldDowfTp7Y29uc3RhbnQ6ci50b29NYW55Q29sb3JzP2Euc2xpY2UoNCplLmNvbG9yLDQqZS5jb2xvcis0KTpbZS5jb2xvcl19fSxib3JkZXJDb2xvcklkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuYm9yZGVyQ29sb3IubGVuZ3RoP3tidWZmZXI6ZS5jb2xvckJ1ZmZlcixzdHJpZGU6ci50b29NYW55Q29sb3JzPzg6NCxvZmZzZXQ6ci50b29NYW55Q29sb3JzPzQ6Mn06e2NvbnN0YW50OnIudG9vTWFueUNvbG9ycz9hLnNsaWNlKDQqZS5ib3JkZXJDb2xvciw0KmUuYm9yZGVyQ29sb3IrNCk6W2UuYm9yZGVyQ29sb3JdfX0saXNBY3RpdmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4hMD09PWUuYWN0aXZhdGlvbj97Y29uc3RhbnQ6WzFdfTplLmFjdGl2YXRpb24/ZS5hY3RpdmF0aW9uOntjb25zdGFudDpbMF19fX0sYmxlbmQ6e2VuYWJsZTohMCxjb2xvcjpbMCwwLDAsMV0sZnVuYzp7c3JjUkdCOlwic3JjIGFscGhhXCIsZHN0UkdCOlwib25lIG1pbnVzIHNyYyBhbHBoYVwiLHNyY0FscGhhOlwib25lIG1pbnVzIGRzdCBhbHBoYVwiLGRzdEFscGhhOlwib25lXCJ9fSxzY2lzc29yOntlbmFibGU6ITAsYm94OnQucHJvcChcInZpZXdwb3J0XCIpfSx2aWV3cG9ydDp0LnByb3AoXCJ2aWV3cG9ydFwiKSxzdGVuY2lsOntlbmFibGU6ITF9LGRlcHRoOntlbmFibGU6ITF9LGVsZW1lbnRzOnQucHJvcChcImVsZW1lbnRzXCIpLGNvdW50OnQucHJvcChcImNvdW50XCIpLG9mZnNldDp0LnByb3AoXCJvZmZzZXRcIikscHJpbWl0aXZlOlwicG9pbnRzXCJ9LHM9Yyh7fSxvKTtzLmZyYWc9dShbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yLCBmcmFnQm9yZGVyQ29sb3I7XFxudmFyeWluZyBmbG9hdCBmcmFnV2lkdGgsIGZyYWdCb3JkZXJDb2xvckxldmVsLCBmcmFnQ29sb3JMZXZlbDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCBtYXJrZXI7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFJhdGlvLCBvcGFjaXR5O1xcblxcbmZsb2F0IHNtb290aFN0ZXAoZmxvYXQgeCwgZmxvYXQgeSkge1xcbiAgcmV0dXJuIDEuMCAvICgxLjAgKyBleHAoNTAuMCooeCAtIHkpKSk7XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG4gIGZsb2F0IGRpc3QgPSB0ZXh0dXJlMkQobWFya2VyLCBnbF9Qb2ludENvb3JkKS5yLCBkZWx0YSA9IGZyYWdXaWR0aDtcXG5cXG4gIC8vIG1heC1kaXN0YW5jZSBhbHBoYVxcbiAgaWYgKGRpc3QgPCAwLjAwMykgZGlzY2FyZDtcXG5cXG4gIC8vIG51bGwtYm9yZGVyIGNhc2VcXG4gIGlmIChmcmFnQm9yZGVyQ29sb3JMZXZlbCA9PSBmcmFnQ29sb3JMZXZlbCB8fCBmcmFnQm9yZGVyQ29sb3IuYSA9PSAwLikge1xcbiAgICBmbG9hdCBjb2xvckFtdCA9IHNtb290aHN0ZXAoLjUgLSBkZWx0YSwgLjUgKyBkZWx0YSwgZGlzdCk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoZnJhZ0NvbG9yLnJnYiwgY29sb3JBbXQgKiBmcmFnQ29sb3IuYSAqIG9wYWNpdHkpO1xcbiAgfVxcbiAgZWxzZSB7XFxuICAgIGZsb2F0IGJvcmRlckNvbG9yQW10ID0gc21vb3Roc3RlcChmcmFnQm9yZGVyQ29sb3JMZXZlbCAtIGRlbHRhLCBmcmFnQm9yZGVyQ29sb3JMZXZlbCArIGRlbHRhLCBkaXN0KTtcXG4gICAgZmxvYXQgY29sb3JBbXQgPSBzbW9vdGhzdGVwKGZyYWdDb2xvckxldmVsIC0gZGVsdGEsIGZyYWdDb2xvckxldmVsICsgZGVsdGEsIGRpc3QpO1xcblxcbiAgICB2ZWM0IGNvbG9yID0gZnJhZ0JvcmRlckNvbG9yO1xcbiAgICBjb2xvci5hICo9IGJvcmRlckNvbG9yQW10O1xcbiAgICBjb2xvciA9IG1peChjb2xvciwgZnJhZ0NvbG9yLCBjb2xvckFtdCk7XFxuICAgIGNvbG9yLmEgKj0gb3BhY2l0eTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxuICB9XFxuXFxufVxcblwiXSkscy52ZXJ0PXUoW1wicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcbiNkZWZpbmUgR0xTTElGWSAxXFxuXFxuYXR0cmlidXRlIGZsb2F0IHgsIHksIHhGcmFjdCwgeUZyYWN0O1xcbmF0dHJpYnV0ZSBmbG9hdCBzaXplLCBib3JkZXJTaXplO1xcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9ySWQsIGJvcmRlckNvbG9ySWQ7XFxuYXR0cmlidXRlIGZsb2F0IGlzQWN0aXZlO1xcblxcbnVuaWZvcm0gdmVjMiBzY2FsZSwgc2NhbGVGcmFjdCwgdHJhbnNsYXRlLCB0cmFuc2xhdGVGcmFjdCwgcGFsZXR0ZVNpemU7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFJhdGlvO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHBhbGV0dGU7XFxuXFxuY29uc3QgZmxvYXQgbWF4U2l6ZSA9IDEwMC47XFxuY29uc3QgZmxvYXQgYm9yZGVyTGV2ZWwgPSAuNTtcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yLCBmcmFnQm9yZGVyQ29sb3I7XFxudmFyeWluZyBmbG9hdCBmcmFnUG9pbnRTaXplLCBmcmFnQm9yZGVyUmFkaXVzLCBmcmFnV2lkdGgsIGZyYWdCb3JkZXJDb2xvckxldmVsLCBmcmFnQ29sb3JMZXZlbDtcXG5cXG5ib29sIGlzRGlyZWN0ID0gKHBhbGV0dGVTaXplLnggPCAxLik7XFxuXFxudmVjNCBnZXRDb2xvcih2ZWM0IGlkKSB7XFxuICByZXR1cm4gaXNEaXJlY3QgPyBpZCAvIDI1NS4gOiB0ZXh0dXJlMkQocGFsZXR0ZSxcXG4gICAgdmVjMihcXG4gICAgICAoaWQueCArIC41KSAvIHBhbGV0dGVTaXplLngsXFxuICAgICAgKGlkLnkgKyAuNSkgLyBwYWxldHRlU2l6ZS55XFxuICAgIClcXG4gICk7XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG4gIGlmIChpc0FjdGl2ZSA9PSAwLikgcmV0dXJuO1xcblxcbiAgdmVjMiBwb3NpdGlvbiA9IHZlYzIoeCwgeSk7XFxuICB2ZWMyIHBvc2l0aW9uRnJhY3QgPSB2ZWMyKHhGcmFjdCwgeUZyYWN0KTtcXG5cXG4gIHZlYzQgY29sb3IgPSBnZXRDb2xvcihjb2xvcklkKTtcXG4gIHZlYzQgYm9yZGVyQ29sb3IgPSBnZXRDb2xvcihib3JkZXJDb2xvcklkKTtcXG5cXG4gIGZsb2F0IHNpemUgPSBzaXplICogbWF4U2l6ZSAvIDI1NS47XFxuICBmbG9hdCBib3JkZXJTaXplID0gYm9yZGVyU2l6ZSAqIG1heFNpemUgLyAyNTUuO1xcblxcbiAgZ2xfUG9pbnRTaXplID0gMi4gKiBzaXplICogcGl4ZWxSYXRpbztcXG4gIGZyYWdQb2ludFNpemUgPSBzaXplICogcGl4ZWxSYXRpbztcXG5cXG4gIHZlYzIgcG9zID0gKHBvc2l0aW9uICsgdHJhbnNsYXRlKSAqIHNjYWxlXFxuICAgICAgKyAocG9zaXRpb25GcmFjdCArIHRyYW5zbGF0ZUZyYWN0KSAqIHNjYWxlXFxuICAgICAgKyAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVGcmFjdFxcbiAgICAgICsgKHBvc2l0aW9uRnJhY3QgKyB0cmFuc2xhdGVGcmFjdCkgKiBzY2FsZUZyYWN0O1xcblxcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcyAqIDIuIC0gMS4sIDAsIDEpO1xcblxcbiAgZnJhZ0NvbG9yID0gY29sb3I7XFxuICBmcmFnQm9yZGVyQ29sb3IgPSBib3JkZXJDb2xvcjtcXG4gIGZyYWdXaWR0aCA9IDEuIC8gZ2xfUG9pbnRTaXplO1xcblxcbiAgZnJhZ0JvcmRlckNvbG9yTGV2ZWwgPSBjbGFtcChib3JkZXJMZXZlbCAtIGJvcmRlckxldmVsICogYm9yZGVyU2l6ZSAvIHNpemUsIDAuLCAxLik7XFxuICBmcmFnQ29sb3JMZXZlbCA9IGNsYW1wKGJvcmRlckxldmVsICsgKDEuIC0gYm9yZGVyTGV2ZWwpICogYm9yZGVyU2l6ZSAvIHNpemUsIDAuLCAxLik7XFxufVwiXSksdGhpcy5kcmF3TWFya2VyPXQocyk7dmFyIGw9Yyh7fSxvKTtsLmZyYWc9dShbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yLCBmcmFnQm9yZGVyQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xcbnZhcnlpbmcgZmxvYXQgZnJhZ0JvcmRlclJhZGl1cywgZnJhZ1dpZHRoO1xcblxcbmZsb2F0IHNtb290aFN0ZXAoZmxvYXQgZWRnZTAsIGZsb2F0IGVkZ2UxLCBmbG9hdCB4KSB7XFxuXFx0ZmxvYXQgdDtcXG5cXHR0ID0gY2xhbXAoKHggLSBlZGdlMCkgLyAoZWRnZTEgLSBlZGdlMCksIDAuMCwgMS4wKTtcXG5cXHRyZXR1cm4gdCAqIHQgKiAoMy4wIC0gMi4wICogdCk7XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG5cXHRmbG9hdCByYWRpdXMsIGFscGhhID0gMS4wLCBkZWx0YSA9IGZyYWdXaWR0aDtcXG5cXG5cXHRyYWRpdXMgPSBsZW5ndGgoMi4wICogZ2xfUG9pbnRDb29yZC54eSAtIDEuMCk7XFxuXFxuXFx0aWYgKHJhZGl1cyA+IDEuMCArIGRlbHRhKSB7XFxuXFx0XFx0ZGlzY2FyZDtcXG5cXHR9XFxuXFxuXFx0YWxwaGEgLT0gc21vb3Roc3RlcCgxLjAgLSBkZWx0YSwgMS4wICsgZGVsdGEsIHJhZGl1cyk7XFxuXFxuXFx0ZmxvYXQgYm9yZGVyUmFkaXVzID0gZnJhZ0JvcmRlclJhZGl1cztcXG5cXHRmbG9hdCByYXRpbyA9IHNtb290aHN0ZXAoYm9yZGVyUmFkaXVzIC0gZGVsdGEsIGJvcmRlclJhZGl1cyArIGRlbHRhLCByYWRpdXMpO1xcblxcdHZlYzQgY29sb3IgPSBtaXgoZnJhZ0NvbG9yLCBmcmFnQm9yZGVyQ29sb3IsIHJhdGlvKTtcXG5cXHRjb2xvci5hICo9IGFscGhhICogb3BhY2l0eTtcXG5cXHRnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCJdKSxsLnZlcnQ9dShbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgZmxvYXQgeCwgeSwgeEZyYWN0LCB5RnJhY3Q7XFxuYXR0cmlidXRlIGZsb2F0IHNpemUsIGJvcmRlclNpemU7XFxuYXR0cmlidXRlIHZlYzQgY29sb3JJZCwgYm9yZGVyQ29sb3JJZDtcXG5hdHRyaWJ1dGUgZmxvYXQgaXNBY3RpdmU7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0O1xcbnVuaWZvcm0gZmxvYXQgcGl4ZWxSYXRpbztcXG51bmlmb3JtIHNhbXBsZXIyRCBwYWxldHRlO1xcbnVuaWZvcm0gdmVjMiBwYWxldHRlU2l6ZTtcXG5cXG5jb25zdCBmbG9hdCBtYXhTaXplID0gMTAwLjtcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yLCBmcmFnQm9yZGVyQ29sb3I7XFxudmFyeWluZyBmbG9hdCBmcmFnQm9yZGVyUmFkaXVzLCBmcmFnV2lkdGg7XFxuXFxuYm9vbCBpc0RpcmVjdCA9IChwYWxldHRlU2l6ZS54IDwgMS4pO1xcblxcbnZlYzQgZ2V0Q29sb3IodmVjNCBpZCkge1xcbiAgcmV0dXJuIGlzRGlyZWN0ID8gaWQgLyAyNTUuIDogdGV4dHVyZTJEKHBhbGV0dGUsXFxuICAgIHZlYzIoXFxuICAgICAgKGlkLnggKyAuNSkgLyBwYWxldHRlU2l6ZS54LFxcbiAgICAgIChpZC55ICsgLjUpIC8gcGFsZXR0ZVNpemUueVxcbiAgICApXFxuICApO1xcbn1cXG5cXG52b2lkIG1haW4oKSB7XFxuICAvLyBpZ25vcmUgaW5hY3RpdmUgcG9pbnRzXFxuICBpZiAoaXNBY3RpdmUgPT0gMC4pIHJldHVybjtcXG5cXG4gIHZlYzIgcG9zaXRpb24gPSB2ZWMyKHgsIHkpO1xcbiAgdmVjMiBwb3NpdGlvbkZyYWN0ID0gdmVjMih4RnJhY3QsIHlGcmFjdCk7XFxuXFxuICB2ZWM0IGNvbG9yID0gZ2V0Q29sb3IoY29sb3JJZCk7XFxuICB2ZWM0IGJvcmRlckNvbG9yID0gZ2V0Q29sb3IoYm9yZGVyQ29sb3JJZCk7XFxuXFxuICBmbG9hdCBzaXplID0gc2l6ZSAqIG1heFNpemUgLyAyNTUuO1xcbiAgZmxvYXQgYm9yZGVyU2l6ZSA9IGJvcmRlclNpemUgKiBtYXhTaXplIC8gMjU1LjtcXG5cXG4gIGdsX1BvaW50U2l6ZSA9IChzaXplICsgYm9yZGVyU2l6ZSkgKiBwaXhlbFJhdGlvO1xcblxcbiAgdmVjMiBwb3MgPSAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVcXG4gICAgICArIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVcXG4gICAgICArIChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZUZyYWN0XFxuICAgICAgKyAocG9zaXRpb25GcmFjdCArIHRyYW5zbGF0ZUZyYWN0KSAqIHNjYWxlRnJhY3Q7XFxuXFxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zICogMi4gLSAxLiwgMCwgMSk7XFxuXFxuICBmcmFnQm9yZGVyUmFkaXVzID0gMS4gLSAyLiAqIGJvcmRlclNpemUgLyAoc2l6ZSArIGJvcmRlclNpemUpO1xcbiAgZnJhZ0NvbG9yID0gY29sb3I7XFxuICBmcmFnQm9yZGVyQ29sb3IgPSBib3JkZXJDb2xvci5hID09IDAuIHx8IGJvcmRlclNpemUgPT0gMC4gPyB2ZWM0KGNvbG9yLnJnYiwgMC4pIDogYm9yZGVyQ29sb3I7XFxuICBmcmFnV2lkdGggPSAxLiAvIGdsX1BvaW50U2l6ZTtcXG59XFxuXCJdKSxkJiYobC5mcmFnPWwuZnJhZy5yZXBsYWNlKFwic21vb3Roc3RlcFwiLFwic21vb3RoU3RlcFwiKSxzLmZyYWc9cy5mcmFnLnJlcGxhY2UoXCJzbW9vdGhzdGVwXCIsXCJzbW9vdGhTdGVwXCIpKSx0aGlzLmRyYXdDaXJjbGU9dChsKX15LmRlZmF1bHRzPXtjb2xvcjpcImJsYWNrXCIsYm9yZGVyQ29sb3I6XCJ0cmFuc3BhcmVudFwiLGJvcmRlclNpemU6MCxzaXplOjEyLG9wYWNpdHk6MSxtYXJrZXI6dm9pZCAwLHZpZXdwb3J0Om51bGwscmFuZ2U6bnVsbCxwaXhlbFNpemU6bnVsbCxjb3VudDowLG9mZnNldDowLGJvdW5kczpudWxsLHBvc2l0aW9uczpbXSxzbmFwOjFlNH0seS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJnRoaXMudXBkYXRlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLmRyYXcoKSx0aGlzfSx5LnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXJbbl09YXJndW1lbnRzW25dO3ZhciBpPXRoaXMuZ3JvdXBzO2lmKDE9PT1yLmxlbmd0aCYmQXJyYXkuaXNBcnJheShyWzBdKSYmKG51bGw9PT1yWzBdWzBdfHxBcnJheS5pc0FycmF5KHJbMF1bMF0pKSYmKHI9clswXSksdGhpcy5yZWdsLl9yZWZyZXNoKCksci5sZW5ndGgpZm9yKHZhciBhPTA7YTxyLmxlbmd0aDthKyspdGhpcy5kcmF3SXRlbShhLHJbYV0pO2Vsc2UgaS5mb3JFYWNoKGZ1bmN0aW9uKGUscil7dC5kcmF3SXRlbShyKX0pO3JldHVybiB0aGlzfSx5LnByb3RvdHlwZS5kcmF3SXRlbT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ3JvdXBzLG49clt0XTtpZihcIm51bWJlclwiPT10eXBlb2YgZSYmKHQ9ZSxuPXJbZV0sZT1udWxsKSxuJiZuLmNvdW50JiZuLm9wYWNpdHkpe24uYWN0aXZhdGlvblswXSYmdGhpcy5kcmF3Q2lyY2xlKHRoaXMuZ2V0TWFya2VyRHJhd09wdGlvbnMoMCxuLGUpKTtmb3IodmFyIGE9W10sbz0xO288bi5hY3RpdmF0aW9uLmxlbmd0aDtvKyspbi5hY3RpdmF0aW9uW29dJiYoITA9PT1uLmFjdGl2YXRpb25bb118fG4uYWN0aXZhdGlvbltvXS5kYXRhLmxlbmd0aCkmJmEucHVzaC5hcHBseShhLGkodGhpcy5nZXRNYXJrZXJEcmF3T3B0aW9ucyhvLG4sZSkpKTthLmxlbmd0aCYmdGhpcy5kcmF3TWFya2VyKGEpfX0seS5wcm90b3R5cGUuZ2V0TWFya2VyRHJhd09wdGlvbnM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUucmFuZ2UsYT1lLnRyZWUsbz1lLnZpZXdwb3J0LHM9ZS5hY3RpdmF0aW9uLGw9ZS5zZWxlY3Rpb25CdWZmZXIsdT1lLmNvdW50O3RoaXMucmVnbDtpZighYSlyZXR1cm4gcj9bYyh7fSxlLHttYXJrZXJUZXh0dXJlOnRoaXMubWFya2VyVGV4dHVyZXNbdF0sYWN0aXZhdGlvbjpzW3RdLGNvdW50OnIubGVuZ3RoLGVsZW1lbnRzOnIsb2Zmc2V0OjB9KV06W2Moe30sZSx7bWFya2VyVGV4dHVyZTp0aGlzLm1hcmtlclRleHR1cmVzW3RdLGFjdGl2YXRpb246c1t0XSxvZmZzZXQ6MH0pXTt2YXIgaD1bXSxmPWEucmFuZ2UoaSx7bG9kOiEwLHB4OlsoaVsyXS1pWzBdKS9vLndpZHRoLChpWzNdLWlbMV0pL28uaGVpZ2h0XX0pO2lmKHIpe2Zvcih2YXIgcD1zW3RdLmRhdGEsZD1uZXcgVWludDhBcnJheSh1KSxnPTA7ZzxyLmxlbmd0aDtnKyspe3ZhciB2PXJbZ107ZFt2XT1wP3Bbdl06MX1sLnN1YmRhdGEoZCl9Zm9yKHZhciBtPWYubGVuZ3RoO20tLTspe3ZhciB5PW4oZlttXSwyKSx4PXlbMF0sYj15WzFdO2gucHVzaChjKHt9LGUse21hcmtlclRleHR1cmU6dGhpcy5tYXJrZXJUZXh0dXJlc1t0XSxhY3RpdmF0aW9uOnI/bDpzW3RdLG9mZnNldDp4LGNvdW50OmIteH0pKX1yZXR1cm4gaH0seS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXJbbl09YXJndW1lbnRzW25dO2lmKHIubGVuZ3RoKXsxPT09ci5sZW5ndGgmJkFycmF5LmlzQXJyYXkoclswXSkmJihyPXJbMF0pO3ZhciBpPXRoaXMuZ3JvdXBzLGE9dGhpcy5nbCxzPXRoaXMucmVnbCx1PXRoaXMubWF4U2l6ZSxkPXRoaXMubWF4Q29sb3JzLG09dGhpcy5wYWxldHRlO3RoaXMuZ3JvdXBzPWk9ci5tYXAoZnVuY3Rpb24oZSxyKXt2YXIgbj1pW3JdO2lmKHZvaWQgMD09PWUpcmV0dXJuIG47bnVsbD09PWU/ZT17cG9zaXRpb25zOm51bGx9OlwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZT17b25kcmF3OmV9OlwibnVtYmVyXCI9PXR5cGVvZiBlWzBdJiYoZT17cG9zaXRpb25zOmV9KSxudWxsPT09KGU9aChlLHtwb3NpdGlvbnM6XCJwb3NpdGlvbnMgZGF0YSBwb2ludHNcIixzbmFwOlwic25hcCBjbHVzdGVyIGxvZCB0cmVlXCIsc2l6ZTpcInNpemVzIHNpemUgcmFkaXVzXCIsYm9yZGVyU2l6ZTpcImJvcmRlclNpemVzIGJvcmRlclNpemUgYm9yZGVyLXNpemUgYm9yZGVyc2l6ZSBib3JkZXJXaWR0aCBib3JkZXJXaWR0aHMgYm9yZGVyLXdpZHRoIGJvcmRlcndpZHRoIHN0cm9rZS13aWR0aCBzdHJva2VXaWR0aCBzdHJva2V3aWR0aCBvdXRsaW5lXCIsY29sb3I6XCJjb2xvcnMgY29sb3IgZmlsbCBmaWxsLWNvbG9yIGZpbGxDb2xvclwiLGJvcmRlckNvbG9yOlwiYm9yZGVyQ29sb3JzIGJvcmRlckNvbG9yIHN0cm9rZSBzdHJva2UtY29sb3Igc3Ryb2tlQ29sb3JcIixtYXJrZXI6XCJtYXJrZXJzIG1hcmtlciBzaGFwZVwiLHJhbmdlOlwicmFuZ2UgZGF0YUJveCBkYXRhYm94XCIsdmlld3BvcnQ6XCJ2aWV3cG9ydCB2aWV3UG9ydCB2aWV3Qm94IHZpZXdib3hcIixvcGFjaXR5Olwib3BhY2l0eSBhbHBoYSB0cmFuc3BhcmVuY3lcIixib3VuZHM6XCJib3VuZCBib3VuZHMgYm91bmRhcmllcyBsaW1pdHNcIix0b29NYW55Q29sb3JzOlwidG9vTWFueUNvbG9ycyBwYWxldHRlIHBhbGV0dGVNb2RlIG9wdGltaXplUGFsZXR0ZSBlbmFibGVQYWxldHRlXCJ9KSkucG9zaXRpb25zJiYoZS5wb3NpdGlvbnM9W10pLG51bGwhPWUudG9vTWFueUNvbG9ycyYmKHQudG9vTWFueUNvbG9ycz1lLnRvb01hbnlDb2xvcnMpLG58fChpW3JdPW49e2lkOnIsc2NhbGU6bnVsbCx0cmFuc2xhdGU6bnVsbCxzY2FsZUZyYWN0Om51bGwsdHJhbnNsYXRlRnJhY3Q6bnVsbCxhY3RpdmF0aW9uOltdLHNlbGVjdGlvbkJ1ZmZlcjpzLmJ1ZmZlcih7ZGF0YTpuZXcgVWludDhBcnJheSgwKSx1c2FnZTpcInN0cmVhbVwiLHR5cGU6XCJ1aW50OFwifSksc2l6ZUJ1ZmZlcjpzLmJ1ZmZlcih7ZGF0YTpuZXcgVWludDhBcnJheSgwKSx1c2FnZTpcImR5bmFtaWNcIix0eXBlOlwidWludDhcIn0pLGNvbG9yQnVmZmVyOnMuYnVmZmVyKHtkYXRhOm5ldyBVaW50OEFycmF5KDApLHVzYWdlOlwiZHluYW1pY1wiLHR5cGU6XCJ1aW50OFwifSkscG9zaXRpb25CdWZmZXI6cy5idWZmZXIoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMCksdXNhZ2U6XCJkeW5hbWljXCIsdHlwZTpcImZsb2F0XCJ9KSxwb3NpdGlvbkZyYWN0QnVmZmVyOnMuYnVmZmVyKHtkYXRhOm5ldyBVaW50OEFycmF5KDApLHVzYWdlOlwiZHluYW1pY1wiLHR5cGU6XCJmbG9hdFwifSl9LGU9Yyh7fSx5LmRlZmF1bHRzLGUpKSwhZS5wb3NpdGlvbnN8fFwibWFya2VyXCJpbiBlfHwoZS5tYXJrZXI9bi5tYXJrZXIsZGVsZXRlIG4ubWFya2VyKSwhZS5tYXJrZXJ8fFwicG9zaXRpb25zXCJpbiBlfHwoZS5wb3NpdGlvbnM9bi5wb3NpdGlvbnMsZGVsZXRlIG4ucG9zaXRpb25zKTt2YXIgeD0wLGI9MDtpZihmKG4sZSxbe3NuYXA6ITAsc2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10JiYodD15LmRlZmF1bHRzLnNpemUpLHgrPXQmJnQubGVuZ3RoPzE6MCx0fSxib3JkZXJTaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PXQmJih0PXkuZGVmYXVsdHMuYm9yZGVyU2l6ZSkseCs9dCYmdC5sZW5ndGg/MTowLHR9LG9wYWNpdHk6cGFyc2VGbG9hdCxjb2xvcjpmdW5jdGlvbihlLHIpe3JldHVybiBudWxsPT1lJiYoZT15LmRlZmF1bHRzLmNvbG9yKSxlPXQudXBkYXRlQ29sb3IoZSksYisrLGV9LGJvcmRlckNvbG9yOmZ1bmN0aW9uKGUscil7cmV0dXJuIG51bGw9PWUmJihlPXkuZGVmYXVsdHMuYm9yZGVyQ29sb3IpLGU9dC51cGRhdGVDb2xvcihlKSxiKyssZX0sYm91bmRzOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5cInJhbmdlXCJpbiByfHwoci5yYW5nZT1udWxsKSx0fSxwb3NpdGlvbnM6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuc25hcCxpPWUucG9zaXRpb25CdWZmZXIsYT1lLnBvc2l0aW9uRnJhY3RCdWZmZXIsYz1lLnNlbGVjdGlvbkJ1ZmZlcjtpZih0Lnh8fHQueSlyZXR1cm4gdC54Lmxlbmd0aD9lLnhBdHRyPXtidWZmZXI6cy5idWZmZXIodC54KSxvZmZzZXQ6MCxzdHJpZGU6NCxjb3VudDp0LngubGVuZ3RofTplLnhBdHRyPXtidWZmZXI6dC54LmJ1ZmZlcixvZmZzZXQ6NCp0Lngub2Zmc2V0fHwwLHN0cmlkZTo0Kih0Lnguc3RyaWRlfHwxKSxjb3VudDp0LnguY291bnR9LHQueS5sZW5ndGg/ZS55QXR0cj17YnVmZmVyOnMuYnVmZmVyKHQueSksb2Zmc2V0OjAsc3RyaWRlOjQsY291bnQ6dC55Lmxlbmd0aH06ZS55QXR0cj17YnVmZmVyOnQueS5idWZmZXIsb2Zmc2V0OjQqdC55Lm9mZnNldHx8MCxzdHJpZGU6NCoodC55LnN0cmlkZXx8MSksY291bnQ6dC55LmNvdW50fSxlLmNvdW50PU1hdGgubWF4KGUueEF0dHIuY291bnQsZS55QXR0ci5jb3VudCksdDt0PXAodCxcImZsb2F0NjRcIik7dmFyIHU9ZS5jb3VudD1NYXRoLmZsb29yKHQubGVuZ3RoLzIpLGg9ZS5ib3VuZHM9dT9vKHQsMik6bnVsbDtpZihyLnJhbmdlfHxlLnJhbmdlfHwoZGVsZXRlIGUucmFuZ2Usci5yYW5nZT1oKSxyLm1hcmtlcnx8ZS5tYXJrZXJ8fChkZWxldGUgZS5tYXJrZXIsci5tYXJrZXI9bnVsbCksbiYmKCEwPT09bnx8dT5uKT9lLnRyZWU9bCh0LHtib3VuZHM6aH0pOm4mJm4ubGVuZ3RoJiYoZS50cmVlPW4pLGUudHJlZSl7dmFyIGY9e3ByaW1pdGl2ZTpcInBvaW50c1wiLHVzYWdlOlwic3RhdGljXCIsZGF0YTplLnRyZWUsdHlwZTpcInVpbnQzMlwifTtlLmVsZW1lbnRzP2UuZWxlbWVudHMoZik6ZS5lbGVtZW50cz1zLmVsZW1lbnRzKGYpfXJldHVybiBpKHtkYXRhOmcuZmxvYXQodCksdXNhZ2U6XCJkeW5hbWljXCJ9KSxhKHtkYXRhOmcuZnJhY3QodCksdXNhZ2U6XCJkeW5hbWljXCJ9KSxjKHtkYXRhOm5ldyBVaW50OEFycmF5KHUpLHR5cGU6XCJ1aW50OFwiLHVzYWdlOlwic3RyZWFtXCJ9KSx0fX0se21hcmtlcjpmdW5jdGlvbihlLHIsbil7dmFyIGk9ci5hY3RpdmF0aW9uO2lmKGkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5kZXN0cm95JiZ0LmRlc3Ryb3koKX0pLGkubGVuZ3RoPTAsZSYmXCJudW1iZXJcIiE9dHlwZW9mIGVbMF0pe2Zvcih2YXIgYT1bXSxvPTAsbD1NYXRoLm1pbihlLmxlbmd0aCxyLmNvdW50KTtvPGw7bysrKXt2YXIgYz10LmFkZE1hcmtlcihlW29dKTthW2NdfHwoYVtjXT1uZXcgVWludDhBcnJheShyLmNvdW50KSksYVtjXVtvXT0xfWZvcih2YXIgdT0wO3U8YS5sZW5ndGg7dSsrKWlmKGFbdV0pe3ZhciBoPXtkYXRhOmFbdV0sdHlwZTpcInVpbnQ4XCIsdXNhZ2U6XCJzdGF0aWNcIn07aVt1XT9pW3VdKGgpOmlbdV09cy5idWZmZXIoaCksaVt1XS5kYXRhPWFbdV19fWVsc2V7aVt0LmFkZE1hcmtlcihlKV09ITB9cmV0dXJuIGV9LHJhbmdlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLmJvdW5kcztpZihuKXJldHVybiB0fHwodD1uKSxlLnNjYWxlPVsxLyh0WzJdLXRbMF0pLDEvKHRbM10tdFsxXSldLGUudHJhbnNsYXRlPVstdFswXSwtdFsxXV0sZS5zY2FsZUZyYWN0PWcuZnJhY3QoZS5zY2FsZSksZS50cmFuc2xhdGVGcmFjdD1nLmZyYWN0KGUudHJhbnNsYXRlKSx0fSx2aWV3cG9ydDpmdW5jdGlvbih0KXtyZXR1cm4gdih0fHxbYS5kcmF3aW5nQnVmZmVyV2lkdGgsYS5kcmF3aW5nQnVmZmVySGVpZ2h0XSl9fV0pLHgpe3ZhciBfPW4sdz1fLmNvdW50LGs9Xy5zaXplLEE9Xy5ib3JkZXJTaXplLFQ9Xy5zaXplQnVmZmVyLE09bmV3IFVpbnQ4QXJyYXkoMip3KTtpZihrLmxlbmd0aHx8QS5sZW5ndGgpZm9yKHZhciBTPTA7Uzx3O1MrKylNWzIqU109TWF0aC5yb3VuZCgyNTUqKG51bGw9PWtbU10/azprW1NdKS91KSxNWzIqUysxXT1NYXRoLnJvdW5kKDI1NSoobnVsbD09QVtTXT9BOkFbU10pL3UpO1Qoe2RhdGE6TSx1c2FnZTpcImR5bmFtaWNcIn0pfWlmKGIpe3ZhciBFLEM9bixMPUMuY291bnQsej1DLmNvbG9yLE89Qy5ib3JkZXJDb2xvcixJPUMuY29sb3JCdWZmZXI7aWYodC50b29NYW55Q29sb3JzKXtpZih6Lmxlbmd0aHx8Ty5sZW5ndGgpe0U9bmV3IFVpbnQ4QXJyYXkoOCpMKTtmb3IodmFyIEQ9MDtEPEw7RCsrKXt2YXIgUD16W0RdO0VbOCpEXT1tWzQqUF0sRVs4KkQrMV09bVs0KlArMV0sRVs4KkQrMl09bVs0KlArMl0sRVs4KkQrM109bVs0KlArM107dmFyIFI9T1tEXTtFWzgqRCs0XT1tWzQqUl0sRVs4KkQrNV09bVs0KlIrMV0sRVs4KkQrNl09bVs0KlIrMl0sRVs4KkQrN109bVs0KlIrM119fX1lbHNlIGlmKHoubGVuZ3RofHxPLmxlbmd0aCl7RT1uZXcgVWludDhBcnJheSg0KkwrMik7Zm9yKHZhciBGPTA7RjxMO0YrKyludWxsIT16W0ZdJiYoRVs0KkZdPXpbRl0lZCxFWzQqRisxXT1NYXRoLmZsb29yKHpbRl0vZCkpLG51bGwhPU9bRl0mJihFWzQqRisyXT1PW0ZdJWQsRVs0KkYrM109TWF0aC5mbG9vcihPW0ZdL2QpKX1JKHtkYXRhOkV8fG5ldyBVaW50OEFycmF5KDApLHR5cGU6XCJ1aW50OFwiLHVzYWdlOlwiZHluYW1pY1wifSl9cmV0dXJuIG59KX19LHkucHJvdG90eXBlLmFkZE1hcmtlcj1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMubWFya2VyVGV4dHVyZXMsbj10aGlzLnJlZ2wsaT10aGlzLm1hcmtlckNhY2hlLGE9bnVsbD09dD8wOmkuaW5kZXhPZih0KTtpZihhPj0wKXJldHVybiBhO2lmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpZT10O2Vsc2V7ZT1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCk7Zm9yKHZhciBvPTAscz10Lmxlbmd0aDtvPHM7bysrKWVbb109MjU1KnRbb119dmFyIGw9TWF0aC5mbG9vcihNYXRoLnNxcnQoZS5sZW5ndGgpKTtyZXR1cm4gYT1yLmxlbmd0aCxpLnB1c2godCksci5wdXNoKG4udGV4dHVyZSh7Y2hhbm5lbHM6MSxkYXRhOmUscmFkaXVzOmwsbWFnOlwibGluZWFyXCIsbWluOlwibGluZWFyXCJ9KSksYX0seS5wcm90b3R5cGUudXBkYXRlQ29sb3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wYWxldHRlSWRzLHI9dGhpcy5wYWxldHRlLG49dGhpcy5tYXhDb2xvcnM7QXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKTt2YXIgaT1bXTtpZihcIm51bWJlclwiPT10eXBlb2YgdFswXSl7dmFyIG89W107aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIGw9MDtsPHQubGVuZ3RoO2wrPTQpby5wdXNoKHQuc2xpY2UobCxsKzQpKTtlbHNlIGZvcih2YXIgYz0wO2M8dC5sZW5ndGg7Yys9NClvLnB1c2godC5zdWJhcnJheShjLGMrNCkpO3Q9b31mb3IodmFyIHU9MDt1PHQubGVuZ3RoO3UrKyl7dmFyIGg9dFt1XTtoPWEoaCxcInVpbnQ4XCIpO3ZhciBmPXMoaCwhMSk7aWYobnVsbD09ZVtmXSl7dmFyIHA9ci5sZW5ndGg7ZVtmXT1NYXRoLmZsb29yKHAvNCkscltwXT1oWzBdLHJbcCsxXT1oWzFdLHJbcCsyXT1oWzJdLHJbcCszXT1oWzNdfWlbdV09ZVtmXX1yZXR1cm4hdGhpcy50b29NYW55Q29sb3JzJiZyLmxlbmd0aD40Km4mJih0aGlzLnRvb01hbnlDb2xvcnM9ITApLHRoaXMudXBkYXRlUGFsZXR0ZShyKSwxPT09aS5sZW5ndGg/aVswXTppfSx5LnByb3RvdHlwZS51cGRhdGVQYWxldHRlPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLnRvb01hbnlDb2xvcnMpe3ZhciBlPXRoaXMubWF4Q29sb3JzLHI9dGhpcy5wYWxldHRlVGV4dHVyZSxuPU1hdGguY2VpbCguMjUqdC5sZW5ndGgvZSk7aWYobj4xKWZvcih2YXIgaT0uMjUqKHQ9dC5zbGljZSgpKS5sZW5ndGglZTtpPG4qZTtpKyspdC5wdXNoKDAsMCwwLDApO3IuaGVpZ2h0PG4mJnIucmVzaXplKGUsbiksci5zdWJpbWFnZSh7d2lkdGg6TWF0aC5taW4oLjI1KnQubGVuZ3RoLGUpLGhlaWdodDpuLGRhdGE6dH0sMCwwKX19LHkucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncm91cHMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnNpemVCdWZmZXIuZGVzdHJveSgpLHQucG9zaXRpb25CdWZmZXIuZGVzdHJveSgpLHQucG9zaXRpb25GcmFjdEJ1ZmZlci5kZXN0cm95KCksdC5jb2xvckJ1ZmZlci5kZXN0cm95KCksdC5hY3RpdmF0aW9uLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuZGVzdHJveSYmdC5kZXN0cm95KCl9KSx0LnNlbGVjdGlvbkJ1ZmZlci5kZXN0cm95KCksdC5lbGVtZW50cyYmdC5lbGVtZW50cy5kZXN0cm95KCl9KSx0aGlzLmdyb3Vwcy5sZW5ndGg9MCx0aGlzLnBhbGV0dGVUZXh0dXJlLmRlc3Ryb3koKSx0aGlzLm1hcmtlclRleHR1cmVzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuZGVzdHJveSYmdC5kZXN0cm95KCl9KSx0aGlzfTt2YXIgeD10KFwib2JqZWN0LWFzc2lnblwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgbSh0LGUpLG49ci5yZW5kZXIuYmluZChyKTtyZXR1cm4geChuLHtyZW5kZXI6bix1cGRhdGU6ci51cGRhdGUuYmluZChyKSxkcmF3OnIuZHJhdy5iaW5kKHIpLGRlc3Ryb3k6ci5kZXN0cm95LmJpbmQocikscmVnbDpyLnJlZ2wsZ2w6ci5nbCxjYW52YXM6ci5nbC5jYW52YXMsZ3JvdXBzOnIuZ3JvdXBzLG1hcmtlcnM6ci5tYXJrZXJDYWNoZSxwYWxldHRlOnIucGFsZXR0ZX0pLG59fSx7XCJhcnJheS1ib3VuZHNcIjo1NixcImNvbG9yLWlkXCI6MTA5LFwiY29sb3Itbm9ybWFsaXplXCI6MTExLFwiZmxhdHRlbi12ZXJ0ZXgtZGF0YVwiOjIyNCxnbHNsaWZ5OjQwMixcImlzLWlleHBsb3JlclwiOjQxMixcIm9iamVjdC1hc3NpZ25cIjo0NDcsXCJwYXJzZS1yZWN0XCI6NDUyLFwicGljay1ieS1hbGlhc1wiOjQ1OCxcInBvaW50LWNsdXN0ZXJcIjo0NjIsXCJ0by1mbG9hdDMyXCI6NTIzLFwidXBkYXRlLWRpZmZcIjo1MzR9XSw0ODY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicmVnbC1zY2F0dGVyMmRcIiksaT10KFwicGljay1ieS1hbGlhc1wiKSxhPXQoXCJhcnJheS1ib3VuZHNcIiksbz10KFwicmFmXCIpLHM9dChcImFycmF5LXJhbmdlXCIpLGw9dChcInBhcnNlLXJlY3RcIiksYz10KFwiZmxhdHRlbi12ZXJ0ZXgtZGF0YVwiKTtmdW5jdGlvbiB1KHQsZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgdSkpcmV0dXJuIG5ldyB1KHQsZSk7dGhpcy50cmFjZXM9W10sdGhpcy5wYXNzZXM9e30sdGhpcy5yZWdsPXQsdGhpcy5zY2F0dGVyPW4odCksdGhpcy5jYW52YXM9dGhpcy5zY2F0dGVyLmNhbnZhc31mdW5jdGlvbiBoKHQsZSxyKXtyZXR1cm4obnVsbCE9dC5pZD90LmlkOnQpPDwxNnwoMjU1JmUpPDw4fDI1NSZyfWZ1bmN0aW9uIGYodCxlLHIpe3ZhciBuLGksYSxvLHM9dFtlXSxsPXRbcl07cmV0dXJuIHMubGVuZ3RoPjI/KHNbMF0sc1syXSxuPXNbMV0saT1zWzNdKTpzLmxlbmd0aD8obj1zWzBdLGk9c1sxXSk6KHMueCxuPXMueSxzLngrcy53aWR0aCxpPXMueStzLmhlaWdodCksbC5sZW5ndGg+Mj8oYT1sWzBdLG89bFsyXSxsWzFdLGxbM10pOmwubGVuZ3RoPyhhPWxbMF0sbz1sWzFdKTooYT1sLngsbC55LG89bC54K2wud2lkdGgsbC55K2wuaGVpZ2h0KSxbYSxuLG8saV19ZnVuY3Rpb24gcCh0KXtpZihcIm51bWJlclwiPT10eXBlb2YgdClyZXR1cm5bdCx0LHQsdF07aWYoMj09PXQubGVuZ3RoKXJldHVyblt0WzBdLHRbMV0sdFswXSx0WzFdXTt2YXIgZT1sKHQpO3JldHVybltlLngsZS55LGUueCtlLndpZHRoLGUueStlLmhlaWdodF19ZS5leHBvcnRzPXUsdS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9dGhpcyxyPVtdLG49YXJndW1lbnRzLmxlbmd0aDtuLS07KXJbbl09YXJndW1lbnRzW25dO3JldHVybiByLmxlbmd0aCYmKHQ9dGhpcykudXBkYXRlLmFwcGx5KHQsciksdGhpcy5yZWdsLmF0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyP3RoaXMuZHJhdygpOih0aGlzLmRpcnR5P251bGw9PXRoaXMucGxhbm5lZCYmKHRoaXMucGxhbm5lZD1vKGZ1bmN0aW9uKCl7ZS5kcmF3KCksZS5kaXJ0eT0hMCxlLnBsYW5uZWQ9bnVsbH0pKToodGhpcy5kcmF3KCksdGhpcy5kaXJ0eT0hMCxvKGZ1bmN0aW9uKCl7ZS5kaXJ0eT0hMX0pKSx0aGlzKX0sdS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9W10scj1hcmd1bWVudHMubGVuZ3RoO3ItLTspZVtyXT1hcmd1bWVudHNbcl07aWYoZS5sZW5ndGgpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRoaXMudXBkYXRlSXRlbShuLGVbbl0pO3RoaXMudHJhY2VzPXRoaXMudHJhY2VzLmZpbHRlcihCb29sZWFuKTtmb3IodmFyIGk9W10sYT0wLG89MDtvPHRoaXMudHJhY2VzLmxlbmd0aDtvKyspe2Zvcih2YXIgcz10aGlzLnRyYWNlc1tvXSxsPXRoaXMudHJhY2VzW29dLnBhc3NlcyxjPTA7YzxsLmxlbmd0aDtjKyspaS5wdXNoKHRoaXMucGFzc2VzW2xbY11dKTtzLnBhc3NPZmZzZXQ9YSxhKz1zLnBhc3Nlcy5sZW5ndGh9cmV0dXJuKHQ9dGhpcy5zY2F0dGVyKS51cGRhdGUuYXBwbHkodCxpKSx0aGlzfX0sdS5wcm90b3R5cGUudXBkYXRlSXRlbT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMucmVnbDtpZihudWxsPT09ZSlyZXR1cm4gdGhpcy50cmFjZXNbdF09bnVsbCx0aGlzO2lmKCFlKXJldHVybiB0aGlzO3ZhciBuLG89aShlLHtkYXRhOlwiZGF0YSBpdGVtcyBjb2x1bW5zIHJvd3MgdmFsdWVzIGRpbWVuc2lvbnMgc2FtcGxlcyB4XCIsc25hcDpcInNuYXAgY2x1c3RlclwiLHNpemU6XCJzaXplcyBzaXplIHJhZGl1c1wiLGNvbG9yOlwiY29sb3JzIGNvbG9yIGZpbGwgZmlsbC1jb2xvciBmaWxsQ29sb3JcIixvcGFjaXR5Olwib3BhY2l0eSBhbHBoYSB0cmFuc3BhcmVuY3kgb3BhcXVlXCIsYm9yZGVyU2l6ZTpcImJvcmRlclNpemVzIGJvcmRlclNpemUgYm9yZGVyLXNpemUgYm9yZGVyc2l6ZSBib3JkZXJXaWR0aCBib3JkZXJXaWR0aHMgYm9yZGVyLXdpZHRoIGJvcmRlcndpZHRoIHN0cm9rZS13aWR0aCBzdHJva2VXaWR0aCBzdHJva2V3aWR0aCBvdXRsaW5lXCIsYm9yZGVyQ29sb3I6XCJib3JkZXJDb2xvcnMgYm9yZGVyQ29sb3IgYm9yZGVyY29sb3Igc3Ryb2tlIHN0cm9rZS1jb2xvciBzdHJva2VDb2xvclwiLG1hcmtlcjpcIm1hcmtlcnMgbWFya2VyIHNoYXBlXCIscmFuZ2U6XCJyYW5nZSByYW5nZXMgZGF0YWJveCBkYXRhQm94XCIsdmlld3BvcnQ6XCJ2aWV3cG9ydCB2aWV3Qm94IHZpZXdib3hcIixkb21haW46XCJkb21haW4gZG9tYWlucyBhcmVhIGFyZWFzXCIscGFkZGluZzpcInBhZCBwYWRkaW5nIHBhZGRpbmdzIHBhZHMgbWFyZ2luIG1hcmdpbnNcIix0cmFuc3Bvc2U6XCJ0cmFuc3Bvc2UgdHJhbnNwb3NlZFwiLGRpYWdvbmFsOlwiZGlhZ29uYWwgZGlhZyBzaG93RGlhZ29uYWxcIix1cHBlcjpcInVwcGVyIHVwIHRvcCB1cHBlcmhhbGYgdXBwZXJIYWxmIHNob3d1cHBlcmhhbGYgc2hvd1VwcGVyIHNob3dVcHBlckhhbGZcIixsb3dlcjpcImxvd2VyIGxvdyBib3R0b20gbG93ZXJoYWxmIGxvd2VySGFsZiBzaG93bG93ZXJoYWxmIHNob3dMb3dlckhhbGYgc2hvd0xvd2VyXCJ9KSxzPXRoaXMudHJhY2VzW3RdfHwodGhpcy50cmFjZXNbdF09e2lkOnQsYnVmZmVyOnIuYnVmZmVyKHt1c2FnZTpcImR5bmFtaWNcIix0eXBlOlwiZmxvYXRcIixkYXRhOm5ldyBVaW50OEFycmF5fSksY29sb3I6XCJibGFja1wiLG1hcmtlcjpudWxsLHNpemU6MTIsYm9yZGVyQ29sb3I6XCJ0cmFuc3BhcmVudFwiLGJvcmRlclNpemU6MSx2aWV3cG9ydDpsKFtyLl9nbC5kcmF3aW5nQnVmZmVyV2lkdGgsci5fZ2wuZHJhd2luZ0J1ZmZlckhlaWdodF0pLHBhZGRpbmc6WzAsMCwwLDBdLG9wYWNpdHk6MSxkaWFnb25hbDohMCx1cHBlcjohMCxsb3dlcjohMH0pO2lmKG51bGwhPW8uY29sb3ImJihzLmNvbG9yPW8uY29sb3IpLG51bGwhPW8uc2l6ZSYmKHMuc2l6ZT1vLnNpemUpLG51bGwhPW8ubWFya2VyJiYocy5tYXJrZXI9by5tYXJrZXIpLG51bGwhPW8uYm9yZGVyQ29sb3ImJihzLmJvcmRlckNvbG9yPW8uYm9yZGVyQ29sb3IpLG51bGwhPW8uYm9yZGVyU2l6ZSYmKHMuYm9yZGVyU2l6ZT1vLmJvcmRlclNpemUpLG51bGwhPW8ub3BhY2l0eSYmKHMub3BhY2l0eT1vLm9wYWNpdHkpLG8udmlld3BvcnQmJihzLnZpZXdwb3J0PWwoby52aWV3cG9ydCkpLG51bGwhPW8uZGlhZ29uYWwmJihzLmRpYWdvbmFsPW8uZGlhZ29uYWwpLG51bGwhPW8udXBwZXImJihzLnVwcGVyPW8udXBwZXIpLG51bGwhPW8ubG93ZXImJihzLmxvd2VyPW8ubG93ZXIpLG8uZGF0YSl7cy5idWZmZXIoYyhvLmRhdGEpKSxzLmNvbHVtbnM9by5kYXRhLmxlbmd0aCxzLmNvdW50PW8uZGF0YVswXS5sZW5ndGgscy5ib3VuZHM9W107Zm9yKHZhciB1PTA7dTxzLmNvbHVtbnM7dSsrKXMuYm91bmRzW3VdPWEoby5kYXRhW3VdLDEpfW8ucmFuZ2UmJihzLnJhbmdlPW8ucmFuZ2Usbj1zLnJhbmdlJiZcIm51bWJlclwiIT10eXBlb2Ygcy5yYW5nZVswXSksby5kb21haW4mJihzLmRvbWFpbj1vLmRvbWFpbik7dmFyIGQ9ITE7bnVsbCE9by5wYWRkaW5nJiYoQXJyYXkuaXNBcnJheShvLnBhZGRpbmcpJiZvLnBhZGRpbmcubGVuZ3RoPT09cy5jb2x1bW5zJiZcIm51bWJlclwiPT10eXBlb2Ygby5wYWRkaW5nW28ucGFkZGluZy5sZW5ndGgtMV0/KHMucGFkZGluZz1vLnBhZGRpbmcubWFwKHApLGQ9ITApOnMucGFkZGluZz1wKG8ucGFkZGluZykpO3ZhciBnPXMuY29sdW1ucyx2PXMuY291bnQsbT1zLnZpZXdwb3J0LndpZHRoLHk9cy52aWV3cG9ydC5oZWlnaHQseD1zLnZpZXdwb3J0LngsYj1zLnZpZXdwb3J0LnksXz1tL2csdz15L2c7cy5wYXNzZXM9W107Zm9yKHZhciBrPTA7azxnO2srKylmb3IodmFyIEE9MDtBPGc7QSsrKWlmKChzLmRpYWdvbmFsfHxBIT09aykmJihzLnVwcGVyfHwhKGs+QSkpJiYocy5sb3dlcnx8IShrPEEpKSl7dmFyIFQ9aChzLmlkLGssQSksTT10aGlzLnBhc3Nlc1tUXXx8KHRoaXMucGFzc2VzW1RdPXt9KTtpZihvLmRhdGEmJihvLnRyYW5zcG9zZT9NLnBvc2l0aW9ucz17eDp7YnVmZmVyOnMuYnVmZmVyLG9mZnNldDpBLGNvdW50OnYsc3RyaWRlOmd9LHk6e2J1ZmZlcjpzLmJ1ZmZlcixvZmZzZXQ6ayxjb3VudDp2LHN0cmlkZTpnfX06TS5wb3NpdGlvbnM9e3g6e2J1ZmZlcjpzLmJ1ZmZlcixvZmZzZXQ6QSp2LGNvdW50OnZ9LHk6e2J1ZmZlcjpzLmJ1ZmZlcixvZmZzZXQ6ayp2LGNvdW50OnZ9fSxNLmJvdW5kcz1mKHMuYm91bmRzLGssQSkpLG8uZG9tYWlufHxvLnZpZXdwb3J0fHxvLmRhdGEpe3ZhciBTPWQ/ZihzLnBhZGRpbmcsayxBKTpzLnBhZGRpbmc7aWYocy5kb21haW4pe3ZhciBFPWYocy5kb21haW4sayxBKSxDPUVbMF0sTD1FWzFdLHo9RVsyXSxPPUVbM107TS52aWV3cG9ydD1beCtDKm0rU1swXSxiK0wqeStTWzFdLHgreiptLVNbMl0sYitPKnktU1szXV19ZWxzZSBNLnZpZXdwb3J0PVt4K0EqXytfKlNbMF0sYitrKncrdypTWzFdLHgrKEErMSkqXy1fKlNbMl0sYisoaysxKSp3LXcqU1szXV19by5jb2xvciYmKE0uY29sb3I9cy5jb2xvciksby5zaXplJiYoTS5zaXplPXMuc2l6ZSksby5tYXJrZXImJihNLm1hcmtlcj1zLm1hcmtlciksby5ib3JkZXJTaXplJiYoTS5ib3JkZXJTaXplPXMuYm9yZGVyU2l6ZSksby5ib3JkZXJDb2xvciYmKE0uYm9yZGVyQ29sb3I9cy5ib3JkZXJDb2xvciksby5vcGFjaXR5JiYoTS5vcGFjaXR5PXMub3BhY2l0eSksby5yYW5nZSYmKE0ucmFuZ2U9bj9mKHMucmFuZ2UsayxBKTpzLnJhbmdlfHxNLmJvdW5kcykscy5wYXNzZXMucHVzaChUKX1yZXR1cm4gdGhpc30sdS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPVtdLHI9YXJndW1lbnRzLmxlbmd0aDtyLS07KWVbcl09YXJndW1lbnRzW3JdO2lmKGUubGVuZ3RoKXtmb3IodmFyIG49W10saT0wO2k8ZS5sZW5ndGg7aSsrKWlmKFwibnVtYmVyXCI9PXR5cGVvZiBlW2ldKXt2YXIgYT10aGlzLnRyYWNlc1tlW2ldXSxvPWEucGFzc2VzLGw9YS5wYXNzT2Zmc2V0O24ucHVzaC5hcHBseShuLHMobCxsK28ubGVuZ3RoKSl9ZWxzZSBpZihlW2ldLmxlbmd0aCl7dmFyIGM9ZVtpXSx1PXRoaXMudHJhY2VzW2ldLGg9dS5wYXNzZXMsZj11LnBhc3NPZmZzZXQ7aD1oLm1hcChmdW5jdGlvbih0LGUpe25bZitlXT1jfSl9KHQ9dGhpcy5zY2F0dGVyKS5kcmF3LmFwcGx5KHQsbil9ZWxzZSB0aGlzLnNjYXR0ZXIuZHJhdygpO3JldHVybiB0aGlzfSx1LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhY2VzLmZvckVhY2goZnVuY3Rpb24odCl7dC5idWZmZXImJnQuYnVmZmVyLmRlc3Ryb3kmJnQuYnVmZmVyLmRlc3Ryb3koKX0pLHRoaXMudHJhY2VzPW51bGwsdGhpcy5wYXNzZXM9bnVsbCx0aGlzLnNjYXR0ZXIuZGVzdHJveSgpLHRoaXN9fSx7XCJhcnJheS1ib3VuZHNcIjo1NixcImFycmF5LXJhbmdlXCI6NTgsXCJmbGF0dGVuLXZlcnRleC1kYXRhXCI6MjI0LFwicGFyc2UtcmVjdFwiOjQ1MixcInBpY2stYnktYWxpYXNcIjo0NTgscmFmOjQ3NyxcInJlZ2wtc2NhdHRlcjJkXCI6NDg1fV0sNDg3OltmdW5jdGlvbih0LGUscil7dmFyIG4saTtuPXRoaXMsaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLmlkPVYrKyx0aGlzLnR5cGU9dCx0aGlzLmRhdGE9ZX1mdW5jdGlvbiBlKHQpe3JldHVyblwiW1wiK2Z1bmN0aW9uIHQoZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybltdO3ZhciByPWUuY2hhckF0KDApLG49ZS5jaGFyQXQoZS5sZW5ndGgtMSk7aWYoMTxlLmxlbmd0aCYmcj09PW4mJignXCInPT09cnx8XCInXCI9PT1yKSlyZXR1cm5bJ1wiJytlLnN1YnN0cigxLGUubGVuZ3RoLTIpLnJlcGxhY2UoL1xcXFwvZyxcIlxcXFxcXFxcXCIpLnJlcGxhY2UoL1wiL2csJ1xcXFxcIicpKydcIiddO2lmKHI9L1xcWyhmYWxzZXx0cnVlfG51bGx8XFxkK3wnW14nXSonfFwiW15cIl0qXCIpXFxdLy5leGVjKGUpKXJldHVybiB0KGUuc3Vic3RyKDAsci5pbmRleCkpLmNvbmNhdCh0KHJbMV0pKS5jb25jYXQodChlLnN1YnN0cihyLmluZGV4K3JbMF0ubGVuZ3RoKSkpO2lmKDE9PT0ocj1lLnNwbGl0KFwiLlwiKSkubGVuZ3RoKXJldHVyblsnXCInK2UucmVwbGFjZSgvXFxcXC9nLFwiXFxcXFxcXFxcIikucmVwbGFjZSgvXCIvZywnXFxcXFwiJykrJ1wiJ107Zm9yKGU9W10sbj0wO248ci5sZW5ndGg7KytuKWU9ZS5jb25jYXQodChyW25dKSk7cmV0dXJuIGV9KHQpLmpvaW4oXCJdW1wiKStcIl1cIn1mdW5jdGlvbiByKHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0P3Quc3BsaXQoKTp0fWZ1bmN0aW9uIG4odCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQ/ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KTp0fWZ1bmN0aW9uIGkodCl7dmFyIGUsaSxhLG8scz10fHx7fTt0PXt9O3ZhciBsPVtdLGM9W10sdT1cInVuZGVmaW5lZFwiPT10eXBlb2Ygd2luZG93PzE6d2luZG93LmRldmljZVBpeGVsUmF0aW8saD0hMSxmPWZ1bmN0aW9uKHQpe30scD1mdW5jdGlvbigpe307aWYoXCJzdHJpbmdcIj09dHlwZW9mIHM/ZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHMpOlwib2JqZWN0XCI9PXR5cGVvZiBzJiYoXCJzdHJpbmdcIj09dHlwZW9mIHMubm9kZU5hbWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHMuYXBwZW5kQ2hpbGQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0P2U9czpcImZ1bmN0aW9uXCI9PXR5cGVvZiBzLmRyYXdBcnJheXN8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHMuZHJhd0VsZW1lbnRzP2E9KG89cykuY2FudmFzOihcImdsXCJpbiBzP289cy5nbDpcImNhbnZhc1wiaW4gcz9hPW4ocy5jYW52YXMpOlwiY29udGFpbmVyXCJpbiBzJiYoaT1uKHMuY29udGFpbmVyKSksXCJhdHRyaWJ1dGVzXCJpbiBzJiYodD1zLmF0dHJpYnV0ZXMpLFwiZXh0ZW5zaW9uc1wiaW4gcyYmKGw9cihzLmV4dGVuc2lvbnMpKSxcIm9wdGlvbmFsRXh0ZW5zaW9uc1wiaW4gcyYmKGM9cihzLm9wdGlvbmFsRXh0ZW5zaW9ucykpLFwib25Eb25lXCJpbiBzJiYoZj1zLm9uRG9uZSksXCJwcm9maWxlXCJpbiBzJiYoaD0hIXMucHJvZmlsZSksXCJwaXhlbFJhdGlvXCJpbiBzJiYodT0rcy5waXhlbFJhdGlvKSkpLGUmJihcImNhbnZhc1wiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP2E9ZTppPWUpLCFvKXtpZighYSl7aWYoIShlPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKCl7dmFyIGU9d2luZG93LmlubmVyV2lkdGgsbj13aW5kb3cuaW5uZXJIZWlnaHQ7dCE9PWRvY3VtZW50LmJvZHkmJihlPShuPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLnJpZ2h0LW4ubGVmdCxuPW4uYm90dG9tLW4udG9wKSxpLndpZHRoPXIqZSxpLmhlaWdodD1yKm4saihpLnN0eWxlLHt3aWR0aDplK1wicHhcIixoZWlnaHQ6bitcInB4XCJ9KX12YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO3JldHVybiBqKGkuc3R5bGUse2JvcmRlcjowLG1hcmdpbjowLHBhZGRpbmc6MCx0b3A6MCxsZWZ0OjB9KSx0LmFwcGVuZENoaWxkKGkpLHQ9PT1kb2N1bWVudC5ib2R5JiYoaS5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsaih0LnN0eWxlLHttYXJnaW46MCxwYWRkaW5nOjB9KSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIixuLCExKSxuKCkse2NhbnZhczppLG9uRGVzdHJveTpmdW5jdGlvbigpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsbiksdC5yZW1vdmVDaGlsZChpKX19fShpfHxkb2N1bWVudC5ib2R5LDAsdSkpKXJldHVybiBudWxsO2E9ZS5jYW52YXMscD1lLm9uRGVzdHJveX1vPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyKXt0cnl7cmV0dXJuIHQuZ2V0Q29udGV4dChyLGUpfWNhdGNoKHQpe3JldHVybiBudWxsfX1yZXR1cm4gcihcIndlYmdsXCIpfHxyKFwiZXhwZXJpbWVudGFsLXdlYmdsXCIpfHxyKFwid2ViZ2wtZXhwZXJpbWVudGFsXCIpfShhLHQpfXJldHVybiBvP3tnbDpvLGNhbnZhczphLGNvbnRhaW5lcjppLGV4dGVuc2lvbnM6bCxvcHRpb25hbEV4dGVuc2lvbnM6YyxwaXhlbFJhdGlvOnUscHJvZmlsZTpoLG9uRG9uZTpmLG9uRGVzdHJveTpwfToocCgpLGYoXCJ3ZWJnbCBub3Qgc3VwcG9ydGVkLCB0cnkgdXBncmFkaW5nIHlvdXIgYnJvd3NlciBvciBncmFwaGljcyBkcml2ZXJzIGh0dHA6Ly9nZXQud2ViZ2wub3JnXCIpLG51bGwpfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9QXJyYXkodCksbj0wO248dDsrK24pcltuXT1lKG4pO3JldHVybiByfWZ1bmN0aW9uIG8odCl7dmFyIGUscjtyZXR1cm4gZT0oNjU1MzU8dCk8PDQsZXw9cj0oMjU1PCh0Pj4+PWUpKTw8MywoZXw9cj0oMTU8KHQ+Pj49cikpPDwyKXwocj0oMzwodD4+Pj1yKSk8PDEpfHQ+Pj5yPj4xfWZ1bmN0aW9uIHMoKXtmdW5jdGlvbiB0KHQpe3Q6e2Zvcih2YXIgZT0xNjsyNjg0MzU0NTY+PWU7ZSo9MTYpaWYodDw9ZSl7dD1lO2JyZWFrIHR9dD0wfXJldHVybiAwPChlPXJbbyh0KT4+Ml0pLmxlbmd0aD9lLnBvcCgpOm5ldyBBcnJheUJ1ZmZlcih0KX1mdW5jdGlvbiBlKHQpe3Jbbyh0LmJ5dGVMZW5ndGgpPj4yXS5wdXNoKHQpfXZhciByPWEoOCxmdW5jdGlvbigpe3JldHVybltdfSk7cmV0dXJue2FsbG9jOnQsZnJlZTplLGFsbG9jVHlwZTpmdW5jdGlvbihlLHIpe3ZhciBuPW51bGw7c3dpdGNoKGUpe2Nhc2UgNTEyMDpuPW5ldyBJbnQ4QXJyYXkodChyKSwwLHIpO2JyZWFrO2Nhc2UgNTEyMTpuPW5ldyBVaW50OEFycmF5KHQociksMCxyKTticmVhaztjYXNlIDUxMjI6bj1uZXcgSW50MTZBcnJheSh0KDIqciksMCxyKTticmVhaztjYXNlIDUxMjM6bj1uZXcgVWludDE2QXJyYXkodCgyKnIpLDAscik7YnJlYWs7Y2FzZSA1MTI0Om49bmV3IEludDMyQXJyYXkodCg0KnIpLDAscik7YnJlYWs7Y2FzZSA1MTI1Om49bmV3IFVpbnQzMkFycmF5KHQoNCpyKSwwLHIpO2JyZWFrO2Nhc2UgNTEyNjpuPW5ldyBGbG9hdDMyQXJyYXkodCg0KnIpLDAscik7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gbnVsbH1yZXR1cm4gbi5sZW5ndGghPT1yP24uc3ViYXJyYXkoMCxyKTpufSxmcmVlVHlwZTpmdW5jdGlvbih0KXtlKHQuYnVmZmVyKX19fWZ1bmN0aW9uIGwodCl7cmV0dXJuISF0JiZcIm9iamVjdFwiPT10eXBlb2YgdCYmQXJyYXkuaXNBcnJheSh0LnNoYXBlKSYmQXJyYXkuaXNBcnJheSh0LnN0cmlkZSkmJlwibnVtYmVyXCI9PXR5cGVvZiB0Lm9mZnNldCYmdC5zaGFwZS5sZW5ndGg9PT10LnN0cmlkZS5sZW5ndGgmJihBcnJheS5pc0FycmF5KHQuZGF0YSl8fFcodC5kYXRhKSl9ZnVuY3Rpb24gYyh0LGUscixuLGksYSl7Zm9yKHZhciBvPTA7bzxlOysrbylmb3IodmFyIHM9dFtvXSxsPTA7bDxyOysrbClmb3IodmFyIGM9c1tsXSx1PTA7dTxuOysrdSlpW2ErK109Y1t1XX1mdW5jdGlvbiB1KHQpe3JldHVybiAwfCRbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpXX1mdW5jdGlvbiBoKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpdFtyXT1lW3JdfWZ1bmN0aW9uIGYodCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPTAsbD0wO2w8cjsrK2wpZm9yKHZhciBjPTA7YzxuOysrYyl0W3MrK109ZVtpKmwrYSpjK29dfWZ1bmN0aW9uIHAodCxlLHIsbil7ZnVuY3Rpb24gaShlKXt0aGlzLmlkPWMrKyx0aGlzLmJ1ZmZlcj10LmNyZWF0ZUJ1ZmZlcigpLHRoaXMudHlwZT1lLHRoaXMudXNhZ2U9MzUwNDQsdGhpcy5ieXRlTGVuZ3RoPTAsdGhpcy5kaW1lbnNpb249MSx0aGlzLmR0eXBlPTUxMjEsdGhpcy5wZXJzaXN0ZW50RGF0YT1udWxsLHIucHJvZmlsZSYmKHRoaXMuc3RhdHM9e3NpemU6MH0pfWZ1bmN0aW9uIGEoZSxyLG4pe2UuYnl0ZUxlbmd0aD1yLmJ5dGVMZW5ndGgsdC5idWZmZXJEYXRhKGUudHlwZSxyLG4pfWZ1bmN0aW9uIG8odCxlLHIsbixpLG8pe2lmKHQudXNhZ2U9cixBcnJheS5pc0FycmF5KGUpKXtpZih0LmR0eXBlPW58fDUxMjYsMDxlLmxlbmd0aClpZihBcnJheS5pc0FycmF5KGVbMF0pKXtpPXR0KGUpO2Zvcih2YXIgcz1uPTE7czxpLmxlbmd0aDsrK3Mpbio9aVtzXTt0LmRpbWVuc2lvbj1uLGEodCxlPVEoZSxpLHQuZHR5cGUpLHIpLG8/dC5wZXJzaXN0ZW50RGF0YT1lOkcuZnJlZVR5cGUoZSl9ZWxzZVwibnVtYmVyXCI9PXR5cGVvZiBlWzBdPyh0LmRpbWVuc2lvbj1pLGgoaT1HLmFsbG9jVHlwZSh0LmR0eXBlLGUubGVuZ3RoKSxlKSxhKHQsaSxyKSxvP3QucGVyc2lzdGVudERhdGE9aTpHLmZyZWVUeXBlKGkpKTpXKGVbMF0pJiYodC5kaW1lbnNpb249ZVswXS5sZW5ndGgsdC5kdHlwZT1ufHx1KGVbMF0pfHw1MTI2LGEodCxlPVEoZSxbZS5sZW5ndGgsZVswXS5sZW5ndGhdLHQuZHR5cGUpLHIpLG8/dC5wZXJzaXN0ZW50RGF0YT1lOkcuZnJlZVR5cGUoZSkpfWVsc2UgaWYoVyhlKSl0LmR0eXBlPW58fHUoZSksdC5kaW1lbnNpb249aSxhKHQsZSxyKSxvJiYodC5wZXJzaXN0ZW50RGF0YT1uZXcgVWludDhBcnJheShuZXcgVWludDhBcnJheShlLmJ1ZmZlcikpKTtlbHNlIGlmKGwoZSkpe2k9ZS5zaGFwZTt2YXIgYz1lLnN0cmlkZSxwPShzPWUub2Zmc2V0LDApLGQ9MCxnPTAsdj0wOzE9PT1pLmxlbmd0aD8ocD1pWzBdLGQ9MSxnPWNbMF0sdj0wKToyPT09aS5sZW5ndGgmJihwPWlbMF0sZD1pWzFdLGc9Y1swXSx2PWNbMV0pLHQuZHR5cGU9bnx8dShlLmRhdGEpfHw1MTI2LHQuZGltZW5zaW9uPWQsZihpPUcuYWxsb2NUeXBlKHQuZHR5cGUscCpkKSxlLmRhdGEscCxkLGcsdixzKSxhKHQsaSxyKSxvP3QucGVyc2lzdGVudERhdGE9aTpHLmZyZWVUeXBlKGkpfX1mdW5jdGlvbiBzKHIpe2UuYnVmZmVyQ291bnQtLTtmb3IodmFyIGk9MDtpPG4uc3RhdGUubGVuZ3RoOysraSl7dmFyIGE9bi5zdGF0ZVtpXTthLmJ1ZmZlcj09PXImJih0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKSxhLmJ1ZmZlcj1udWxsKX10LmRlbGV0ZUJ1ZmZlcihyLmJ1ZmZlciksci5idWZmZXI9bnVsbCxkZWxldGUgcFtyLmlkXX12YXIgYz0wLHA9e307aS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe3QuYmluZEJ1ZmZlcih0aGlzLnR5cGUsdGhpcy5idWZmZXIpfSxpLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cyh0aGlzKX07dmFyIGQ9W107cmV0dXJuIHIucHJvZmlsZSYmKGUuZ2V0VG90YWxCdWZmZXJTaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gT2JqZWN0LmtleXMocCkuZm9yRWFjaChmdW5jdGlvbihlKXt0Kz1wW2VdLnN0YXRzLnNpemV9KSx0fSkse2NyZWF0ZTpmdW5jdGlvbihuLGEsYyxkKXtmdW5jdGlvbiBnKGUpe3ZhciBuPTM1MDQ0LGk9bnVsbCxhPTAscz0wLGM9MTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKXx8VyhlKXx8bChlKT9pPWU6XCJudW1iZXJcIj09dHlwZW9mIGU/YT0wfGU6ZSYmKFwiZGF0YVwiaW4gZSYmKGk9ZS5kYXRhKSxcInVzYWdlXCJpbiBlJiYobj1LW2UudXNhZ2VdKSxcInR5cGVcImluIGUmJihzPUpbZS50eXBlXSksXCJkaW1lbnNpb25cImluIGUmJihjPTB8ZS5kaW1lbnNpb24pLFwibGVuZ3RoXCJpbiBlJiYoYT0wfGUubGVuZ3RoKSksdi5iaW5kKCksaT9vKHYsaSxuLHMsYyxkKTooYSYmdC5idWZmZXJEYXRhKHYudHlwZSxhLG4pLHYuZHR5cGU9c3x8NTEyMSx2LnVzYWdlPW4sdi5kaW1lbnNpb249Yyx2LmJ5dGVMZW5ndGg9YSksci5wcm9maWxlJiYodi5zdGF0cy5zaXplPXYuYnl0ZUxlbmd0aCpldFt2LmR0eXBlXSksZ31lLmJ1ZmZlckNvdW50Kys7dmFyIHY9bmV3IGkoYSk7cmV0dXJuIHBbdi5pZF09dixjfHxnKG4pLGcuX3JlZ2xUeXBlPVwiYnVmZmVyXCIsZy5fYnVmZmVyPXYsZy5zdWJkYXRhPWZ1bmN0aW9uKGUscil7dmFyIG4saT0wfChyfHwwKTtpZih2LmJpbmQoKSxXKGUpKXQuYnVmZmVyU3ViRGF0YSh2LnR5cGUsaSxlKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpe2lmKDA8ZS5sZW5ndGgpaWYoXCJudW1iZXJcIj09dHlwZW9mIGVbMF0pe3ZhciBhPUcuYWxsb2NUeXBlKHYuZHR5cGUsZS5sZW5ndGgpO2goYSxlKSx0LmJ1ZmZlclN1YkRhdGEodi50eXBlLGksYSksRy5mcmVlVHlwZShhKX1lbHNlKEFycmF5LmlzQXJyYXkoZVswXSl8fFcoZVswXSkpJiYobj10dChlKSxhPVEoZSxuLHYuZHR5cGUpLHQuYnVmZmVyU3ViRGF0YSh2LnR5cGUsaSxhKSxHLmZyZWVUeXBlKGEpKX1lbHNlIGlmKGwoZSkpe249ZS5zaGFwZTt2YXIgbz1lLnN0cmlkZSxzPWE9MCxjPTAscD0wOzE9PT1uLmxlbmd0aD8oYT1uWzBdLHM9MSxjPW9bMF0scD0wKToyPT09bi5sZW5ndGgmJihhPW5bMF0scz1uWzFdLGM9b1swXSxwPW9bMV0pLG49QXJyYXkuaXNBcnJheShlLmRhdGEpP3YuZHR5cGU6dShlLmRhdGEpLGYobj1HLmFsbG9jVHlwZShuLGEqcyksZS5kYXRhLGEscyxjLHAsZS5vZmZzZXQpLHQuYnVmZmVyU3ViRGF0YSh2LnR5cGUsaSxuKSxHLmZyZWVUeXBlKG4pfXJldHVybiBnfSxyLnByb2ZpbGUmJihnLnN0YXRzPXYuc3RhdHMpLGcuZGVzdHJveT1mdW5jdGlvbigpe3Modil9LGd9LGNyZWF0ZVN0cmVhbTpmdW5jdGlvbih0LGUpe3ZhciByPWQucG9wKCk7cmV0dXJuIHJ8fChyPW5ldyBpKHQpKSxyLmJpbmQoKSxvKHIsZSwzNTA0MCwwLDEsITEpLHJ9LGRlc3Ryb3lTdHJlYW06ZnVuY3Rpb24odCl7ZC5wdXNoKHQpfSxjbGVhcjpmdW5jdGlvbigpe1gocCkuZm9yRWFjaChzKSxkLmZvckVhY2gocyl9LGdldEJ1ZmZlcjpmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5fYnVmZmVyIGluc3RhbmNlb2YgaT90Ll9idWZmZXI6bnVsbH0scmVzdG9yZTpmdW5jdGlvbigpe1gocCkuZm9yRWFjaChmdW5jdGlvbihlKXtlLmJ1ZmZlcj10LmNyZWF0ZUJ1ZmZlcigpLHQuYmluZEJ1ZmZlcihlLnR5cGUsZS5idWZmZXIpLHQuYnVmZmVyRGF0YShlLnR5cGUsZS5wZXJzaXN0ZW50RGF0YXx8ZS5ieXRlTGVuZ3RoLGUudXNhZ2UpfSl9LF9pbml0QnVmZmVyOm99fWZ1bmN0aW9uIGQodCxlLHIsbil7ZnVuY3Rpb24gaSh0KXt0aGlzLmlkPWMrKyxzW3RoaXMuaWRdPXRoaXMsdGhpcy5idWZmZXI9dCx0aGlzLnByaW1UeXBlPTQsdGhpcy50eXBlPXRoaXMudmVydENvdW50PTB9ZnVuY3Rpb24gYShuLGksYSxvLHMsYyx1KXtpZihuLmJ1ZmZlci5iaW5kKCksaSl7dmFyIGg9dTt1fHxXKGkpJiYoIWwoaSl8fFcoaS5kYXRhKSl8fChoPWUub2VzX2VsZW1lbnRfaW5kZXhfdWludD81MTI1OjUxMjMpLHIuX2luaXRCdWZmZXIobi5idWZmZXIsaSxhLGgsMyl9ZWxzZSB0LmJ1ZmZlckRhdGEoMzQ5NjMsYyxhKSxuLmJ1ZmZlci5kdHlwZT1ofHw1MTIxLG4uYnVmZmVyLnVzYWdlPWEsbi5idWZmZXIuZGltZW5zaW9uPTMsbi5idWZmZXIuYnl0ZUxlbmd0aD1jO2lmKGg9dSwhdSl7c3dpdGNoKG4uYnVmZmVyLmR0eXBlKXtjYXNlIDUxMjE6Y2FzZSA1MTIwOmg9NTEyMTticmVhaztjYXNlIDUxMjM6Y2FzZSA1MTIyOmg9NTEyMzticmVhaztjYXNlIDUxMjU6Y2FzZSA1MTI0Omg9NTEyNX1uLmJ1ZmZlci5kdHlwZT1ofW4udHlwZT1oLDA+KGk9cykmJihpPW4uYnVmZmVyLmJ5dGVMZW5ndGgsNTEyMz09PWg/aT4+PTE6NTEyNT09PWgmJihpPj49MikpLG4udmVydENvdW50PWksaT1vLDA+byYmKGk9NCwxPT09KG89bi5idWZmZXIuZGltZW5zaW9uKSYmKGk9MCksMj09PW8mJihpPTEpLDM9PT1vJiYoaT00KSksbi5wcmltVHlwZT1pfWZ1bmN0aW9uIG8odCl7bi5lbGVtZW50c0NvdW50LS0sZGVsZXRlIHNbdC5pZF0sdC5idWZmZXIuZGVzdHJveSgpLHQuYnVmZmVyPW51bGx9dmFyIHM9e30sYz0wLHU9e3VpbnQ4OjUxMjEsdWludDE2OjUxMjN9O2Uub2VzX2VsZW1lbnRfaW5kZXhfdWludCYmKHUudWludDMyPTUxMjUpLGkucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmJ1ZmZlci5iaW5kKCl9O3ZhciBoPVtdO3JldHVybntjcmVhdGU6ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBzKHQpe2lmKHQpaWYoXCJudW1iZXJcIj09dHlwZW9mIHQpYyh0KSxoLnByaW1UeXBlPTQsaC52ZXJ0Q291bnQ9MHx0LGgudHlwZT01MTIxO2Vsc2V7dmFyIGU9bnVsbCxyPTM1MDQ0LG49LTEsaT0tMSxvPTAsZj0wO0FycmF5LmlzQXJyYXkodCl8fFcodCl8fGwodCk/ZT10OihcImRhdGFcImluIHQmJihlPXQuZGF0YSksXCJ1c2FnZVwiaW4gdCYmKHI9S1t0LnVzYWdlXSksXCJwcmltaXRpdmVcImluIHQmJihuPXJ0W3QucHJpbWl0aXZlXSksXCJjb3VudFwiaW4gdCYmKGk9MHx0LmNvdW50KSxcInR5cGVcImluIHQmJihmPXVbdC50eXBlXSksXCJsZW5ndGhcImluIHQ/bz0wfHQubGVuZ3RoOihvPWksNTEyMz09PWZ8fDUxMjI9PT1mP28qPTI6NTEyNSE9PWYmJjUxMjQhPT1mfHwobyo9NCkpKSxhKGgsZSxyLG4saSxvLGYpfWVsc2UgYygpLGgucHJpbVR5cGU9NCxoLnZlcnRDb3VudD0wLGgudHlwZT01MTIxO3JldHVybiBzfXZhciBjPXIuY3JlYXRlKG51bGwsMzQ5NjMsITApLGg9bmV3IGkoYy5fYnVmZmVyKTtyZXR1cm4gbi5lbGVtZW50c0NvdW50Kysscyh0KSxzLl9yZWdsVHlwZT1cImVsZW1lbnRzXCIscy5fZWxlbWVudHM9aCxzLnN1YmRhdGE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYy5zdWJkYXRhKHQsZSksc30scy5kZXN0cm95PWZ1bmN0aW9uKCl7byhoKX0sc30sY3JlYXRlU3RyZWFtOmZ1bmN0aW9uKHQpe3ZhciBlPWgucG9wKCk7cmV0dXJuIGV8fChlPW5ldyBpKHIuY3JlYXRlKG51bGwsMzQ5NjMsITAsITEpLl9idWZmZXIpKSxhKGUsdCwzNTA0MCwtMSwtMSwwLDApLGV9LGRlc3Ryb3lTdHJlYW06ZnVuY3Rpb24odCl7aC5wdXNoKHQpfSxnZXRFbGVtZW50czpmdW5jdGlvbih0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiZ0Ll9lbGVtZW50cyBpbnN0YW5jZW9mIGk/dC5fZWxlbWVudHM6bnVsbH0sY2xlYXI6ZnVuY3Rpb24oKXtYKHMpLmZvckVhY2gobyl9fX1mdW5jdGlvbiBnKHQpe2Zvcih2YXIgZT1HLmFsbG9jVHlwZSg1MTIzLHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDsrK3IpaWYoaXNOYU4odFtyXSkpZVtyXT02NTUzNTtlbHNlIGlmKDEvMD09PXRbcl0pZVtyXT0zMTc0NDtlbHNlIGlmKC0xLzA9PT10W3JdKWVbcl09NjQ1MTI7ZWxzZXtudFswXT10W3JdO3ZhciBuPShhPWl0WzBdKT4+PjMxPDwxNSxpPShhPDwxPj4+MjQpLTEyNyxhPWE+PjEzJjEwMjM7ZVtyXT0tMjQ+aT9uOi0xND5pP24rKGErMTAyND4+LTE0LWkpOjE1PGk/biszMTc0NDpuKyhpKzE1PDwxMCkrYX1yZXR1cm4gZX1mdW5jdGlvbiB2KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfHxXKHQpfWZ1bmN0aW9uIG0odCl7cmV0dXJuXCJbb2JqZWN0IFwiK3QrXCJdXCJ9ZnVuY3Rpb24geSh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmKDA9PT10Lmxlbmd0aHx8XCJudW1iZXJcIj09dHlwZW9mIHRbMF0pfWZ1bmN0aW9uIHgodCl7cmV0dXJuISghQXJyYXkuaXNBcnJheSh0KXx8MD09PXQubGVuZ3RofHwhdih0WzBdKSl9ZnVuY3Rpb24gYih0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIF8odCl7aWYoIXQpcmV0dXJuITE7dmFyIGU9Yih0KTtyZXR1cm4gMDw9cHQuaW5kZXhPZihlKXx8KHkodCl8fHgodCl8fGwodCkpfWZ1bmN0aW9uIHcodCxlKXszNjE5Mz09PXQudHlwZT8odC5kYXRhPWcoZSksRy5mcmVlVHlwZShlKSk6dC5kYXRhPWV9ZnVuY3Rpb24gayh0LGUscixuLGksYSl7aWYodD1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ3RbdF0/Z3RbdF06c3RbdF0qZHRbZV0sYSYmKHQqPTYpLGkpe2ZvcihuPTA7MTw9cjspbis9dCpyKnIsci89MjtyZXR1cm4gbn1yZXR1cm4gdCpyKm59ZnVuY3Rpb24gQSh0LGUscixuLGksYSxvKXtmdW5jdGlvbiBzKCl7dGhpcy5mb3JtYXQ9dGhpcy5pbnRlcm5hbGZvcm1hdD02NDA4LHRoaXMudHlwZT01MTIxLHRoaXMuZmxpcFk9dGhpcy5wcmVtdWx0aXBseUFscGhhPXRoaXMuY29tcHJlc3NlZD0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xLHRoaXMuY29sb3JTcGFjZT0zNzQ0NCx0aGlzLmNoYW5uZWxzPXRoaXMuaGVpZ2h0PXRoaXMud2lkdGg9MH1mdW5jdGlvbiBjKHQsZSl7dC5pbnRlcm5hbGZvcm1hdD1lLmludGVybmFsZm9ybWF0LHQuZm9ybWF0PWUuZm9ybWF0LHQudHlwZT1lLnR5cGUsdC5jb21wcmVzc2VkPWUuY29tcHJlc3NlZCx0LnByZW11bHRpcGx5QWxwaGE9ZS5wcmVtdWx0aXBseUFscGhhLHQuZmxpcFk9ZS5mbGlwWSx0LnVucGFja0FsaWdubWVudD1lLnVucGFja0FsaWdubWVudCx0LmNvbG9yU3BhY2U9ZS5jb2xvclNwYWNlLHQud2lkdGg9ZS53aWR0aCx0LmhlaWdodD1lLmhlaWdodCx0LmNoYW5uZWxzPWUuY2hhbm5lbHN9ZnVuY3Rpb24gdSh0LGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlJiZlKXtcInByZW11bHRpcGx5QWxwaGFcImluIGUmJih0LnByZW11bHRpcGx5QWxwaGE9ZS5wcmVtdWx0aXBseUFscGhhKSxcImZsaXBZXCJpbiBlJiYodC5mbGlwWT1lLmZsaXBZKSxcImFsaWdubWVudFwiaW4gZSYmKHQudW5wYWNrQWxpZ25tZW50PWUuYWxpZ25tZW50KSxcImNvbG9yU3BhY2VcImluIGUmJih0LmNvbG9yU3BhY2U9cVtlLmNvbG9yU3BhY2VdKSxcInR5cGVcImluIGUmJih0LnR5cGU9SFtlLnR5cGVdKTt2YXIgcj10LndpZHRoLG49dC5oZWlnaHQsaT10LmNoYW5uZWxzLGE9ITE7XCJzaGFwZVwiaW4gZT8ocj1lLnNoYXBlWzBdLG49ZS5zaGFwZVsxXSwzPT09ZS5zaGFwZS5sZW5ndGgmJihpPWUuc2hhcGVbMl0sYT0hMCkpOihcInJhZGl1c1wiaW4gZSYmKHI9bj1lLnJhZGl1cyksXCJ3aWR0aFwiaW4gZSYmKHI9ZS53aWR0aCksXCJoZWlnaHRcImluIGUmJihuPWUuaGVpZ2h0KSxcImNoYW5uZWxzXCJpbiBlJiYoaT1lLmNoYW5uZWxzLGE9ITApKSx0LndpZHRoPTB8cix0LmhlaWdodD0wfG4sdC5jaGFubmVscz0wfGkscj0hMSxcImZvcm1hdFwiaW4gZSYmKHI9ZS5mb3JtYXQsbj10LmludGVybmFsZm9ybWF0PVlbcl0sdC5mb3JtYXQ9cHRbbl0sciBpbiBIJiYhKFwidHlwZVwiaW4gZSkmJih0LnR5cGU9SFtyXSksciBpbiBKJiYodC5jb21wcmVzc2VkPSEwKSxyPSEwKSwhYSYmcj90LmNoYW5uZWxzPXN0W3QuZm9ybWF0XTphJiYhciYmdC5jaGFubmVscyE9PW90W3QuZm9ybWF0XSYmKHQuZm9ybWF0PXQuaW50ZXJuYWxmb3JtYXQ9b3RbdC5jaGFubmVsc10pfX1mdW5jdGlvbiBoKGUpe3QucGl4ZWxTdG9yZWkoMzc0NDAsZS5mbGlwWSksdC5waXhlbFN0b3JlaSgzNzQ0MSxlLnByZW11bHRpcGx5QWxwaGEpLHQucGl4ZWxTdG9yZWkoMzc0NDMsZS5jb2xvclNwYWNlKSx0LnBpeGVsU3RvcmVpKDMzMTcsZS51bnBhY2tBbGlnbm1lbnQpfWZ1bmN0aW9uIGYoKXtzLmNhbGwodGhpcyksdGhpcy55T2Zmc2V0PXRoaXMueE9mZnNldD0wLHRoaXMuZGF0YT1udWxsLHRoaXMubmVlZHNGcmVlPSExLHRoaXMuZWxlbWVudD1udWxsLHRoaXMubmVlZHNDb3B5PSExfWZ1bmN0aW9uIHAodCxlKXt2YXIgcj1udWxsO2lmKF8oZSk/cj1lOmUmJih1KHQsZSksXCJ4XCJpbiBlJiYodC54T2Zmc2V0PTB8ZS54KSxcInlcImluIGUmJih0LnlPZmZzZXQ9MHxlLnkpLF8oZS5kYXRhKSYmKHI9ZS5kYXRhKSksZS5jb3B5KXt2YXIgbj1pLnZpZXdwb3J0V2lkdGgsYT1pLnZpZXdwb3J0SGVpZ2h0O3Qud2lkdGg9dC53aWR0aHx8bi10LnhPZmZzZXQsdC5oZWlnaHQ9dC5oZWlnaHR8fGEtdC55T2Zmc2V0LHQubmVlZHNDb3B5PSEwfWVsc2UgaWYocil7aWYoVyhyKSl0LmNoYW5uZWxzPXQuY2hhbm5lbHN8fDQsdC5kYXRhPXIsXCJ0eXBlXCJpbiBlfHw1MTIxIT09dC50eXBlfHwodC50eXBlPTB8JFtPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocildKTtlbHNlIGlmKHkocikpe3N3aXRjaCh0LmNoYW5uZWxzPXQuY2hhbm5lbHN8fDQsYT0obj1yKS5sZW5ndGgsdC50eXBlKXtjYXNlIDUxMjE6Y2FzZSA1MTIzOmNhc2UgNTEyNTpjYXNlIDUxMjY6KGE9Ry5hbGxvY1R5cGUodC50eXBlLGEpKS5zZXQobiksdC5kYXRhPWE7YnJlYWs7Y2FzZSAzNjE5Mzp0LmRhdGE9ZyhuKX10LmFsaWdubWVudD0xLHQubmVlZHNGcmVlPSEwfWVsc2UgaWYobChyKSl7bj1yLmRhdGEsQXJyYXkuaXNBcnJheShuKXx8NTEyMSE9PXQudHlwZXx8KHQudHlwZT0wfCRbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pXSk7YT1yLnNoYXBlO3ZhciBvLHMsYyxoLGY9ci5zdHJpZGU7Mz09PWEubGVuZ3RoPyhjPWFbMl0saD1mWzJdKTpoPWM9MSxvPWFbMF0scz1hWzFdLGE9ZlswXSxmPWZbMV0sdC5hbGlnbm1lbnQ9MSx0LndpZHRoPW8sdC5oZWlnaHQ9cyx0LmNoYW5uZWxzPWMsdC5mb3JtYXQ9dC5pbnRlcm5hbGZvcm1hdD1vdFtjXSx0Lm5lZWRzRnJlZT0hMCxvPWgscj1yLm9mZnNldCxjPXQud2lkdGgsaD10LmhlaWdodCxzPXQuY2hhbm5lbHM7Zm9yKHZhciBwPUcuYWxsb2NUeXBlKDM2MTkzPT09dC50eXBlPzUxMjY6dC50eXBlLGMqaCpzKSxkPTAsbT0wO208aDsrK20pZm9yKHZhciBrPTA7azxjOysraylmb3IodmFyIEE9MDtBPHM7KytBKXBbZCsrXT1uW2EqaytmKm0rbypBK3JdO3codCxwKX1lbHNlIGlmKGIocik9PT1sdHx8YihyKT09PWN0KWIocik9PT1sdD90LmVsZW1lbnQ9cjp0LmVsZW1lbnQ9ci5jYW52YXMsdC53aWR0aD10LmVsZW1lbnQud2lkdGgsdC5oZWlnaHQ9dC5lbGVtZW50LmhlaWdodCx0LmNoYW5uZWxzPTQ7ZWxzZSBpZihiKHIpPT09dXQpdC5lbGVtZW50PXIsdC53aWR0aD1yLndpZHRoLHQuaGVpZ2h0PXIuaGVpZ2h0LHQuY2hhbm5lbHM9NDtlbHNlIGlmKGIocik9PT1odCl0LmVsZW1lbnQ9cix0LndpZHRoPXIubmF0dXJhbFdpZHRoLHQuaGVpZ2h0PXIubmF0dXJhbEhlaWdodCx0LmNoYW5uZWxzPTQ7ZWxzZSBpZihiKHIpPT09ZnQpdC5lbGVtZW50PXIsdC53aWR0aD1yLnZpZGVvV2lkdGgsdC5oZWlnaHQ9ci52aWRlb0hlaWdodCx0LmNoYW5uZWxzPTQ7ZWxzZSBpZih4KHIpKXtmb3Iobj10LndpZHRofHxyWzBdLmxlbmd0aCxhPXQuaGVpZ2h0fHxyLmxlbmd0aCxmPXQuY2hhbm5lbHMsZj12KHJbMF1bMF0pP2Z8fHJbMF1bMF0ubGVuZ3RoOmZ8fDEsbz1aLnNoYXBlKHIpLGM9MSxoPTA7aDxvLmxlbmd0aDsrK2gpYyo9b1toXTtjPUcuYWxsb2NUeXBlKDM2MTkzPT09dC50eXBlPzUxMjY6dC50eXBlLGMpLFouZmxhdHRlbihyLG8sXCJcIixjKSx3KHQsYyksdC5hbGlnbm1lbnQ9MSx0LndpZHRoPW4sdC5oZWlnaHQ9YSx0LmNoYW5uZWxzPWYsdC5mb3JtYXQ9dC5pbnRlcm5hbGZvcm1hdD1vdFtmXSx0Lm5lZWRzRnJlZT0hMH19ZWxzZSB0LndpZHRoPXQud2lkdGh8fDEsdC5oZWlnaHQ9dC5oZWlnaHR8fDEsdC5jaGFubmVscz10LmNoYW5uZWxzfHw0fWZ1bmN0aW9uIGQoZSxyLGksYSxvKXt2YXIgcz1lLmVsZW1lbnQsbD1lLmRhdGEsYz1lLmludGVybmFsZm9ybWF0LHU9ZS5mb3JtYXQsZj1lLnR5cGUscD1lLndpZHRoLGQ9ZS5oZWlnaHQ7aChlKSxzP3QudGV4U3ViSW1hZ2UyRChyLG8saSxhLHUsZixzKTplLmNvbXByZXNzZWQ/dC5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChyLG8saSxhLGMscCxkLGwpOmUubmVlZHNDb3B5PyhuKCksdC5jb3B5VGV4U3ViSW1hZ2UyRChyLG8saSxhLGUueE9mZnNldCxlLnlPZmZzZXQscCxkKSk6dC50ZXhTdWJJbWFnZTJEKHIsbyxpLGEscCxkLHUsZixsKX1mdW5jdGlvbiBtKCl7cmV0dXJuIGR0LnBvcCgpfHxuZXcgZn1mdW5jdGlvbiBBKHQpe3QubmVlZHNGcmVlJiZHLmZyZWVUeXBlKHQuZGF0YSksZi5jYWxsKHQpLGR0LnB1c2godCl9ZnVuY3Rpb24gVCgpe3MuY2FsbCh0aGlzKSx0aGlzLmdlbk1pcG1hcHM9ITEsdGhpcy5taXBtYXBIaW50PTQzNTIsdGhpcy5taXBtYXNrPTAsdGhpcy5pbWFnZXM9QXJyYXkoMTYpfWZ1bmN0aW9uIE0odCxlLHIpe3ZhciBuPXQuaW1hZ2VzWzBdPW0oKTt0Lm1pcG1hc2s9MSxuLndpZHRoPXQud2lkdGg9ZSxuLmhlaWdodD10LmhlaWdodD1yLG4uY2hhbm5lbHM9dC5jaGFubmVscz00fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1udWxsO2lmKF8oZSkpYyhyPXQuaW1hZ2VzWzBdPW0oKSx0KSxwKHIsZSksdC5taXBtYXNrPTE7ZWxzZSBpZih1KHQsZSksQXJyYXkuaXNBcnJheShlLm1pcG1hcCkpZm9yKHZhciBuPWUubWlwbWFwLGk9MDtpPG4ubGVuZ3RoOysraSljKHI9dC5pbWFnZXNbaV09bSgpLHQpLHIud2lkdGg+Pj1pLHIuaGVpZ2h0Pj49aSxwKHIsbltpXSksdC5taXBtYXNrfD0xPDxpO2Vsc2UgYyhyPXQuaW1hZ2VzWzBdPW0oKSx0KSxwKHIsZSksdC5taXBtYXNrPTE7Yyh0LHQuaW1hZ2VzWzBdKX1mdW5jdGlvbiBFKGUscil7Zm9yKHZhciBpPWUuaW1hZ2VzLGE9MDthPGkubGVuZ3RoJiZpW2FdOysrYSl7dmFyIG89aVthXSxzPXIsbD1hLGM9by5lbGVtZW50LHU9by5kYXRhLGY9by5pbnRlcm5hbGZvcm1hdCxwPW8uZm9ybWF0LGQ9by50eXBlLGc9by53aWR0aCx2PW8uaGVpZ2h0LG09by5jaGFubmVscztoKG8pLGM/dC50ZXhJbWFnZTJEKHMsbCxwLHAsZCxjKTpvLmNvbXByZXNzZWQ/dC5jb21wcmVzc2VkVGV4SW1hZ2UyRChzLGwsZixnLHYsMCx1KTpvLm5lZWRzQ29weT8obigpLHQuY29weVRleEltYWdlMkQocyxsLHAsby54T2Zmc2V0LG8ueU9mZnNldCxnLHYsMCkpOigobz0hdSkmJih1PUcuemVyby5hbGxvY1R5cGUoZCxnKnYqbSkpLHQudGV4SW1hZ2UyRChzLGwscCxnLHYsMCxwLGQsdSksbyYmdSYmRy56ZXJvLmZyZWVUeXBlKHUpKX19ZnVuY3Rpb24gQygpe3ZhciB0PWd0LnBvcCgpfHxuZXcgVDtzLmNhbGwodCk7Zm9yKHZhciBlPXQubWlwbWFzaz0wOzE2PmU7KytlKXQuaW1hZ2VzW2VdPW51bGw7cmV0dXJuIHR9ZnVuY3Rpb24gTCh0KXtmb3IodmFyIGU9dC5pbWFnZXMscj0wO3I8ZS5sZW5ndGg7KytyKWVbcl0mJkEoZVtyXSksZVtyXT1udWxsO2d0LnB1c2godCl9ZnVuY3Rpb24geigpe3RoaXMubWFnRmlsdGVyPXRoaXMubWluRmlsdGVyPTk3MjgsdGhpcy53cmFwVD10aGlzLndyYXBTPTMzMDcxLHRoaXMuYW5pc290cm9waWM9MSx0aGlzLmdlbk1pcG1hcHM9ITEsdGhpcy5taXBtYXBIaW50PTQzNTJ9ZnVuY3Rpb24gTyh0LGUpe1wibWluXCJpbiBlJiYodC5taW5GaWx0ZXI9VVtlLm1pbl0sMDw9YXQuaW5kZXhPZih0Lm1pbkZpbHRlcikmJiEoXCJmYWNlc1wiaW4gZSkmJih0Lmdlbk1pcG1hcHM9ITApKSxcIm1hZ1wiaW4gZSYmKHQubWFnRmlsdGVyPVZbZS5tYWddKTt2YXIgcj10LndyYXBTLG49dC53cmFwVDtpZihcIndyYXBcImluIGUpe3ZhciBpPWUud3JhcDtcInN0cmluZ1wiPT10eXBlb2YgaT9yPW49TltpXTpBcnJheS5pc0FycmF5KGkpJiYocj1OW2lbMF1dLG49TltpWzFdXSl9ZWxzZVwid3JhcFNcImluIGUmJihyPU5bZS53cmFwU10pLFwid3JhcFRcImluIGUmJihuPU5bZS53cmFwVF0pO2lmKHQud3JhcFM9cix0LndyYXBUPW4sXCJhbmlzb3Ryb3BpY1wiaW4gZSYmKHQuYW5pc290cm9waWM9ZS5hbmlzb3Ryb3BpYyksXCJtaXBtYXBcImluIGUpe3N3aXRjaChyPSExLHR5cGVvZiBlLm1pcG1hcCl7Y2FzZVwic3RyaW5nXCI6dC5taXBtYXBIaW50PUJbZS5taXBtYXBdLHI9dC5nZW5NaXBtYXBzPSEwO2JyZWFrO2Nhc2VcImJvb2xlYW5cIjpyPXQuZ2VuTWlwbWFwcz1lLm1pcG1hcDticmVhaztjYXNlXCJvYmplY3RcIjp0Lmdlbk1pcG1hcHM9ITEscj0hMH0hcnx8XCJtaW5cImluIGV8fCh0Lm1pbkZpbHRlcj05OTg0KX19ZnVuY3Rpb24gSShyLG4pe3QudGV4UGFyYW1ldGVyaShuLDEwMjQxLHIubWluRmlsdGVyKSx0LnRleFBhcmFtZXRlcmkobiwxMDI0MCxyLm1hZ0ZpbHRlciksdC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDIsci53cmFwUyksdC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDMsci53cmFwVCksZS5leHRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMmJnQudGV4UGFyYW1ldGVyaShuLDM0MDQ2LHIuYW5pc290cm9waWMpLHIuZ2VuTWlwbWFwcyYmKHQuaGludCgzMzE3MCxyLm1pcG1hcEhpbnQpLHQuZ2VuZXJhdGVNaXBtYXAobikpfWZ1bmN0aW9uIEQoZSl7cy5jYWxsKHRoaXMpLHRoaXMubWlwbWFzaz0wLHRoaXMuaW50ZXJuYWxmb3JtYXQ9NjQwOCx0aGlzLmlkPXZ0KyssdGhpcy5yZWZDb3VudD0xLHRoaXMudGFyZ2V0PWUsdGhpcy50ZXh0dXJlPXQuY3JlYXRlVGV4dHVyZSgpLHRoaXMudW5pdD0tMSx0aGlzLmJpbmRDb3VudD0wLHRoaXMudGV4SW5mbz1uZXcgeixvLnByb2ZpbGUmJih0aGlzLnN0YXRzPXtzaXplOjB9KX1mdW5jdGlvbiBQKGUpe3QuYWN0aXZlVGV4dHVyZSgzMzk4NCksdC5iaW5kVGV4dHVyZShlLnRhcmdldCxlLnRleHR1cmUpfWZ1bmN0aW9uIFIoKXt2YXIgZT14dFswXTtlP3QuYmluZFRleHR1cmUoZS50YXJnZXQsZS50ZXh0dXJlKTp0LmJpbmRUZXh0dXJlKDM1NTMsbnVsbCl9ZnVuY3Rpb24gRihlKXt2YXIgcj1lLnRleHR1cmUsbj1lLnVuaXQsaT1lLnRhcmdldDswPD1uJiYodC5hY3RpdmVUZXh0dXJlKDMzOTg0K24pLHQuYmluZFRleHR1cmUoaSxudWxsKSx4dFtuXT1udWxsKSx0LmRlbGV0ZVRleHR1cmUociksZS50ZXh0dXJlPW51bGwsZS5wYXJhbXM9bnVsbCxlLnBpeGVscz1udWxsLGUucmVmQ291bnQ9MCxkZWxldGUgbXRbZS5pZF0sYS50ZXh0dXJlQ291bnQtLX12YXIgQj17XCJkb24ndCBjYXJlXCI6NDM1MixcImRvbnQgY2FyZVwiOjQzNTIsbmljZTo0MzU0LGZhc3Q6NDM1M30sTj17cmVwZWF0OjEwNDk3LGNsYW1wOjMzMDcxLG1pcnJvcjozMzY0OH0sVj17bmVhcmVzdDo5NzI4LGxpbmVhcjo5NzI5fSxVPWooe21pcG1hcDo5OTg3LFwibmVhcmVzdCBtaXBtYXAgbmVhcmVzdFwiOjk5ODQsXCJsaW5lYXIgbWlwbWFwIG5lYXJlc3RcIjo5OTg1LFwibmVhcmVzdCBtaXBtYXAgbGluZWFyXCI6OTk4NixcImxpbmVhciBtaXBtYXAgbGluZWFyXCI6OTk4N30sVikscT17bm9uZTowLGJyb3dzZXI6Mzc0NDR9LEg9e3VpbnQ4OjUxMjEscmdiYTQ6MzI4MTkscmdiNTY1OjMzNjM1LFwicmdiNSBhMVwiOjMyODIwfSxZPXthbHBoYTo2NDA2LGx1bWluYW5jZTo2NDA5LFwibHVtaW5hbmNlIGFscGhhXCI6NjQxMCxyZ2I6NjQwNyxyZ2JhOjY0MDgscmdiYTQ6MzI4NTQsXCJyZ2I1IGExXCI6MzI4NTUscmdiNTY1OjM2MTk0fSxKPXt9O2UuZXh0X3NyZ2ImJihZLnNyZ2I9MzU5MDQsWS5zcmdiYT0zNTkwNiksZS5vZXNfdGV4dHVyZV9mbG9hdCYmKEguZmxvYXQzMj1ILmZsb2F0PTUxMjYpLGUub2VzX3RleHR1cmVfaGFsZl9mbG9hdCYmKEguZmxvYXQxNj1IW1wiaGFsZiBmbG9hdFwiXT0zNjE5MyksZS53ZWJnbF9kZXB0aF90ZXh0dXJlJiYoaihZLHtkZXB0aDo2NDAyLFwiZGVwdGggc3RlbmNpbFwiOjM0MDQxfSksaihILHt1aW50MTY6NTEyMyx1aW50MzI6NTEyNSxcImRlcHRoIHN0ZW5jaWxcIjozNDA0Mn0pKSxlLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJiZqKEose1wicmdiIHMzdGMgZHh0MVwiOjMzNzc2LFwicmdiYSBzM3RjIGR4dDFcIjozMzc3NyxcInJnYmEgczN0YyBkeHQzXCI6MzM3NzgsXCJyZ2JhIHMzdGMgZHh0NVwiOjMzNzc5fSksZS53ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfYXRjJiZqKEose1wicmdiIGF0Y1wiOjM1OTg2LFwicmdiYSBhdGMgZXhwbGljaXQgYWxwaGFcIjozNTk4NyxcInJnYmEgYXRjIGludGVycG9sYXRlZCBhbHBoYVwiOjM0Nzk4fSksZS53ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMmJmooSix7XCJyZ2IgcHZydGMgNGJwcHYxXCI6MzU4NDAsXCJyZ2IgcHZydGMgMmJwcHYxXCI6MzU4NDEsXCJyZ2JhIHB2cnRjIDRicHB2MVwiOjM1ODQyLFwicmdiYSBwdnJ0YyAyYnBwdjFcIjozNTg0M30pLGUud2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEmJihKW1wicmdiIGV0YzFcIl09MzYxOTYpO3ZhciBLPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQuZ2V0UGFyYW1ldGVyKDM0NDY3KSk7T2JqZWN0LmtleXMoSikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1KW3RdOzA8PUsuaW5kZXhPZihlKSYmKFlbdF09ZSl9KTt2YXIgUT1PYmplY3Qua2V5cyhZKTtyLnRleHR1cmVGb3JtYXRzPVE7dmFyIHR0PVtdO09iamVjdC5rZXlzKFkpLmZvckVhY2goZnVuY3Rpb24odCl7dHRbWVt0XV09dH0pO3ZhciBldD1bXTtPYmplY3Qua2V5cyhIKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2V0W0hbdF1dPXR9KTt2YXIgcnQ9W107T2JqZWN0LmtleXMoVikuZm9yRWFjaChmdW5jdGlvbih0KXtydFtWW3RdXT10fSk7dmFyIG50PVtdO09iamVjdC5rZXlzKFUpLmZvckVhY2goZnVuY3Rpb24odCl7bnRbVVt0XV09dH0pO3ZhciBpdD1bXTtPYmplY3Qua2V5cyhOKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2l0W05bdF1dPXR9KTt2YXIgcHQ9US5yZWR1Y2UoZnVuY3Rpb24odCxlKXt2YXIgcj1ZW2VdO3JldHVybiA2NDA5PT09cnx8NjQwNj09PXJ8fDY0MDk9PT1yfHw2NDEwPT09cnx8NjQwMj09PXJ8fDM0MDQxPT09cj90W3JdPXI6MzI4NTU9PT1yfHwwPD1lLmluZGV4T2YoXCJyZ2JhXCIpP3Rbcl09NjQwODp0W3JdPTY0MDcsdH0se30pLGR0PVtdLGd0PVtdLHZ0PTAsbXQ9e30seXQ9ci5tYXhUZXh0dXJlVW5pdHMseHQ9QXJyYXkoeXQpLm1hcChmdW5jdGlvbigpe3JldHVybiBudWxsfSk7cmV0dXJuIGooRC5wcm90b3R5cGUse2JpbmQ6ZnVuY3Rpb24oKXt0aGlzLmJpbmRDb3VudCs9MTt2YXIgZT10aGlzLnVuaXQ7aWYoMD5lKXtmb3IodmFyIHI9MDtyPHl0Oysrcil7dmFyIG49eHRbcl07aWYobil7aWYoMDxuLmJpbmRDb3VudCljb250aW51ZTtuLnVuaXQ9LTF9eHRbcl09dGhpcyxlPXI7YnJlYWt9by5wcm9maWxlJiZhLm1heFRleHR1cmVVbml0czxlKzEmJihhLm1heFRleHR1cmVVbml0cz1lKzEpLHRoaXMudW5pdD1lLHQuYWN0aXZlVGV4dHVyZSgzMzk4NCtlKSx0LmJpbmRUZXh0dXJlKHRoaXMudGFyZ2V0LHRoaXMudGV4dHVyZSl9cmV0dXJuIGV9LHVuYmluZDpmdW5jdGlvbigpey0tdGhpcy5iaW5kQ291bnR9LGRlY1JlZjpmdW5jdGlvbigpezA+PS0tdGhpcy5yZWZDb3VudCYmRih0aGlzKX19KSxvLnByb2ZpbGUmJihhLmdldFRvdGFsVGV4dHVyZVNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBPYmplY3Qua2V5cyhtdCkuZm9yRWFjaChmdW5jdGlvbihlKXt0Kz1tdFtlXS5zdGF0cy5zaXplfSksdH0pLHtjcmVhdGUyRDpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1pLnRleEluZm87ei5jYWxsKHIpO3ZhciBhPUMoKTtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdD9NKGEsMHx0LFwibnVtYmVyXCI9PXR5cGVvZiBlPzB8ZTowfHQpOnQ/KE8ocix0KSxTKGEsdCkpOk0oYSwxLDEpLHIuZ2VuTWlwbWFwcyYmKGEubWlwbWFzaz0oYS53aWR0aDw8MSktMSksaS5taXBtYXNrPWEubWlwbWFzayxjKGksYSksaS5pbnRlcm5hbGZvcm1hdD1hLmludGVybmFsZm9ybWF0LG4ud2lkdGg9YS53aWR0aCxuLmhlaWdodD1hLmhlaWdodCxQKGkpLEUoYSwzNTUzKSxJKHIsMzU1MyksUigpLEwoYSksby5wcm9maWxlJiYoaS5zdGF0cy5zaXplPWsoaS5pbnRlcm5hbGZvcm1hdCxpLnR5cGUsYS53aWR0aCxhLmhlaWdodCxyLmdlbk1pcG1hcHMsITEpKSxuLmZvcm1hdD10dFtpLmludGVybmFsZm9ybWF0XSxuLnR5cGU9ZXRbaS50eXBlXSxuLm1hZz1ydFtyLm1hZ0ZpbHRlcl0sbi5taW49bnRbci5taW5GaWx0ZXJdLG4ud3JhcFM9aXRbci53cmFwU10sbi53cmFwVD1pdFtyLndyYXBUXSxufXZhciBpPW5ldyBEKDM1NTMpO3JldHVybiBtdFtpLmlkXT1pLGEudGV4dHVyZUNvdW50KyssbihlLHIpLG4uc3ViaW1hZ2U9ZnVuY3Rpb24odCxlLHIsYSl7ZXw9MCxyfD0wLGF8PTA7dmFyIG89bSgpO3JldHVybiBjKG8saSksby53aWR0aD0wLG8uaGVpZ2h0PTAscChvLHQpLG8ud2lkdGg9by53aWR0aHx8KGkud2lkdGg+PmEpLWUsby5oZWlnaHQ9by5oZWlnaHR8fChpLmhlaWdodD4+YSktcixQKGkpLGQobywzNTUzLGUscixhKSxSKCksQShvKSxufSxuLnJlc2l6ZT1mdW5jdGlvbihlLHIpe3ZhciBhPTB8ZSxzPTB8cnx8YTtpZihhPT09aS53aWR0aCYmcz09PWkuaGVpZ2h0KXJldHVybiBuO24ud2lkdGg9aS53aWR0aD1hLG4uaGVpZ2h0PWkuaGVpZ2h0PXMsUChpKTtmb3IodmFyIGwsYz1pLmNoYW5uZWxzLHU9aS50eXBlLGg9MDtpLm1pcG1hc2s+Pmg7KytoKXt2YXIgZj1hPj5oLHA9cz4+aDtpZighZnx8IXApYnJlYWs7bD1HLnplcm8uYWxsb2NUeXBlKHUsZipwKmMpLHQudGV4SW1hZ2UyRCgzNTUzLGgsaS5mb3JtYXQsZixwLDAsaS5mb3JtYXQsaS50eXBlLGwpLGwmJkcuemVyby5mcmVlVHlwZShsKX1yZXR1cm4gUigpLG8ucHJvZmlsZSYmKGkuc3RhdHMuc2l6ZT1rKGkuaW50ZXJuYWxmb3JtYXQsaS50eXBlLGEscywhMSwhMSkpLG59LG4uX3JlZ2xUeXBlPVwidGV4dHVyZTJkXCIsbi5fdGV4dHVyZT1pLG8ucHJvZmlsZSYmKG4uc3RhdHM9aS5zdGF0cyksbi5kZXN0cm95PWZ1bmN0aW9uKCl7aS5kZWNSZWYoKX0sbn0sY3JlYXRlQ3ViZTpmdW5jdGlvbihlLHIsbixpLHMsbCl7ZnVuY3Rpb24gaCh0LGUscixuLGksYSl7dmFyIHMsbD1mLnRleEluZm87Zm9yKHouY2FsbChsKSxzPTA7Nj5zOysrcylnW3NdPUMoKTtpZihcIm51bWJlclwiIT10eXBlb2YgdCYmdCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHQpaWYoZSlTKGdbMF0sdCksUyhnWzFdLGUpLFMoZ1syXSxyKSxTKGdbM10sbiksUyhnWzRdLGkpLFMoZ1s1XSxhKTtlbHNlIGlmKE8obCx0KSx1KGYsdCksXCJmYWNlc1wiaW4gdClmb3IodD10LmZhY2VzLHM9MDs2PnM7KytzKWMoZ1tzXSxmKSxTKGdbc10sdFtzXSk7ZWxzZSBmb3Iocz0wOzY+czsrK3MpUyhnW3NdLHQpfWVsc2UgZm9yKHQ9MHx0fHwxLHM9MDs2PnM7KytzKU0oZ1tzXSx0LHQpO2ZvcihjKGYsZ1swXSksZi5taXBtYXNrPWwuZ2VuTWlwbWFwcz8oZ1swXS53aWR0aDw8MSktMTpnWzBdLm1pcG1hc2ssZi5pbnRlcm5hbGZvcm1hdD1nWzBdLmludGVybmFsZm9ybWF0LGgud2lkdGg9Z1swXS53aWR0aCxoLmhlaWdodD1nWzBdLmhlaWdodCxQKGYpLHM9MDs2PnM7KytzKUUoZ1tzXSwzNDA2OStzKTtmb3IoSShsLDM0MDY3KSxSKCksby5wcm9maWxlJiYoZi5zdGF0cy5zaXplPWsoZi5pbnRlcm5hbGZvcm1hdCxmLnR5cGUsaC53aWR0aCxoLmhlaWdodCxsLmdlbk1pcG1hcHMsITApKSxoLmZvcm1hdD10dFtmLmludGVybmFsZm9ybWF0XSxoLnR5cGU9ZXRbZi50eXBlXSxoLm1hZz1ydFtsLm1hZ0ZpbHRlcl0saC5taW49bnRbbC5taW5GaWx0ZXJdLGgud3JhcFM9aXRbbC53cmFwU10saC53cmFwVD1pdFtsLndyYXBUXSxzPTA7Nj5zOysrcylMKGdbc10pO3JldHVybiBofXZhciBmPW5ldyBEKDM0MDY3KTttdFtmLmlkXT1mLGEuY3ViZUNvdW50Kys7dmFyIGc9QXJyYXkoNik7cmV0dXJuIGgoZSxyLG4saSxzLGwpLGguc3ViaW1hZ2U9ZnVuY3Rpb24odCxlLHIsbixpKXtyfD0wLG58PTAsaXw9MDt2YXIgYT1tKCk7cmV0dXJuIGMoYSxmKSxhLndpZHRoPTAsYS5oZWlnaHQ9MCxwKGEsZSksYS53aWR0aD1hLndpZHRofHwoZi53aWR0aD4+aSktcixhLmhlaWdodD1hLmhlaWdodHx8KGYuaGVpZ2h0Pj5pKS1uLFAoZiksZChhLDM0MDY5K3QscixuLGkpLFIoKSxBKGEpLGh9LGgucmVzaXplPWZ1bmN0aW9uKGUpe2lmKChlfD0wKSE9PWYud2lkdGgpe2gud2lkdGg9Zi53aWR0aD1lLGguaGVpZ2h0PWYuaGVpZ2h0PWUsUChmKTtmb3IodmFyIHI9MDs2PnI7KytyKWZvcih2YXIgbj0wO2YubWlwbWFzaz4+bjsrK24pdC50ZXhJbWFnZTJEKDM0MDY5K3IsbixmLmZvcm1hdCxlPj5uLGU+Pm4sMCxmLmZvcm1hdCxmLnR5cGUsbnVsbCk7cmV0dXJuIFIoKSxvLnByb2ZpbGUmJihmLnN0YXRzLnNpemU9ayhmLmludGVybmFsZm9ybWF0LGYudHlwZSxoLndpZHRoLGguaGVpZ2h0LCExLCEwKSksaH19LGguX3JlZ2xUeXBlPVwidGV4dHVyZUN1YmVcIixoLl90ZXh0dXJlPWYsby5wcm9maWxlJiYoaC5zdGF0cz1mLnN0YXRzKSxoLmRlc3Ryb3k9ZnVuY3Rpb24oKXtmLmRlY1JlZigpfSxofSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8eXQ7KytlKXQuYWN0aXZlVGV4dHVyZSgzMzk4NCtlKSx0LmJpbmRUZXh0dXJlKDM1NTMsbnVsbCkseHRbZV09bnVsbDtYKG10KS5mb3JFYWNoKEYpLGEuY3ViZUNvdW50PTAsYS50ZXh0dXJlQ291bnQ9MH0sZ2V0VGV4dHVyZTpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0scmVzdG9yZTpmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8eXQ7KytlKXt2YXIgcj14dFtlXTtyJiYoci5iaW5kQ291bnQ9MCxyLnVuaXQ9LTEseHRbZV09bnVsbCl9WChtdCkuZm9yRWFjaChmdW5jdGlvbihlKXtlLnRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksdC5iaW5kVGV4dHVyZShlLnRhcmdldCxlLnRleHR1cmUpO2Zvcih2YXIgcj0wOzMyPnI7KytyKWlmKDAhPShlLm1pcG1hc2smMTw8cikpaWYoMzU1Mz09PWUudGFyZ2V0KXQudGV4SW1hZ2UyRCgzNTUzLHIsZS5pbnRlcm5hbGZvcm1hdCxlLndpZHRoPj5yLGUuaGVpZ2h0Pj5yLDAsZS5pbnRlcm5hbGZvcm1hdCxlLnR5cGUsbnVsbCk7ZWxzZSBmb3IodmFyIG49MDs2Pm47KytuKXQudGV4SW1hZ2UyRCgzNDA2OStuLHIsZS5pbnRlcm5hbGZvcm1hdCxlLndpZHRoPj5yLGUuaGVpZ2h0Pj5yLDAsZS5pbnRlcm5hbGZvcm1hdCxlLnR5cGUsbnVsbCk7SShlLnRleEluZm8sZS50YXJnZXQpfSl9fX1mdW5jdGlvbiBUKHQsZSxyLG4saSxhKXtmdW5jdGlvbiBvKHQsZSxyKXt0aGlzLnRhcmdldD10LHRoaXMudGV4dHVyZT1lLHRoaXMucmVuZGVyYnVmZmVyPXI7dmFyIG49dD0wO2U/KHQ9ZS53aWR0aCxuPWUuaGVpZ2h0KTpyJiYodD1yLndpZHRoLG49ci5oZWlnaHQpLHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1ufWZ1bmN0aW9uIHModCl7dCYmKHQudGV4dHVyZSYmdC50ZXh0dXJlLl90ZXh0dXJlLmRlY1JlZigpLHQucmVuZGVyYnVmZmVyJiZ0LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLmRlY1JlZigpKX1mdW5jdGlvbiBsKHQsZSxyKXt0JiYodC50ZXh0dXJlP3QudGV4dHVyZS5fdGV4dHVyZS5yZWZDb3VudCs9MTp0LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLnJlZkNvdW50Kz0xKX1mdW5jdGlvbiBjKGUscil7ciYmKHIudGV4dHVyZT90LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLGUsci50YXJnZXQsci50ZXh0dXJlLl90ZXh0dXJlLnRleHR1cmUsMCk6dC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCxlLDM2MTYxLHIucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIucmVuZGVyYnVmZmVyKSl9ZnVuY3Rpb24gdSh0KXt2YXIgZT0zNTUzLHI9bnVsbCxuPW51bGwsaT10O3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0JiYoaT10LmRhdGEsXCJ0YXJnZXRcImluIHQmJihlPTB8dC50YXJnZXQpKSxcInRleHR1cmUyZFwiPT09KHQ9aS5fcmVnbFR5cGUpP3I9aTpcInRleHR1cmVDdWJlXCI9PT10P3I9aTpcInJlbmRlcmJ1ZmZlclwiPT09dCYmKG49aSxlPTM2MTYxKSxuZXcgbyhlLHIsbil9ZnVuY3Rpb24gaCh0LGUscixhLHMpe3JldHVybiByPygodD1uLmNyZWF0ZTJEKHt3aWR0aDp0LGhlaWdodDplLGZvcm1hdDphLHR5cGU6c30pKS5fdGV4dHVyZS5yZWZDb3VudD0wLG5ldyBvKDM1NTMsdCxudWxsKSk6KCh0PWkuY3JlYXRlKHt3aWR0aDp0LGhlaWdodDplLGZvcm1hdDphfSkpLl9yZW5kZXJidWZmZXIucmVmQ291bnQ9MCxuZXcgbygzNjE2MSxudWxsLHQpKX1mdW5jdGlvbiBmKHQpe3JldHVybiB0JiYodC50ZXh0dXJlfHx0LnJlbmRlcmJ1ZmZlcil9ZnVuY3Rpb24gcCh0LGUscil7dCYmKHQudGV4dHVyZT90LnRleHR1cmUucmVzaXplKGUscik6dC5yZW5kZXJidWZmZXImJnQucmVuZGVyYnVmZmVyLnJlc2l6ZShlLHIpLHQud2lkdGg9ZSx0LmhlaWdodD1yKX1mdW5jdGlvbiBkKCl7dGhpcy5pZD1rKyssQVt0aGlzLmlkXT10aGlzLHRoaXMuZnJhbWVidWZmZXI9dC5jcmVhdGVGcmFtZWJ1ZmZlcigpLHRoaXMuaGVpZ2h0PXRoaXMud2lkdGg9MCx0aGlzLmNvbG9yQXR0YWNobWVudHM9W10sdGhpcy5kZXB0aFN0ZW5jaWxBdHRhY2htZW50PXRoaXMuc3RlbmNpbEF0dGFjaG1lbnQ9dGhpcy5kZXB0aEF0dGFjaG1lbnQ9bnVsbH1mdW5jdGlvbiBnKHQpe3QuY29sb3JBdHRhY2htZW50cy5mb3JFYWNoKHMpLHModC5kZXB0aEF0dGFjaG1lbnQpLHModC5zdGVuY2lsQXR0YWNobWVudCkscyh0LmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQpfWZ1bmN0aW9uIHYoZSl7dC5kZWxldGVGcmFtZWJ1ZmZlcihlLmZyYW1lYnVmZmVyKSxlLmZyYW1lYnVmZmVyPW51bGwsYS5mcmFtZWJ1ZmZlckNvdW50LS0sZGVsZXRlIEFbZS5pZF19ZnVuY3Rpb24gbShlKXt2YXIgbjt0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxlLmZyYW1lYnVmZmVyKTt2YXIgaT1lLmNvbG9yQXR0YWNobWVudHM7Zm9yKG49MDtuPGkubGVuZ3RoOysrbiljKDM2MDY0K24saVtuXSk7Zm9yKG49aS5sZW5ndGg7bjxyLm1heENvbG9yQXR0YWNobWVudHM7KytuKXQuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwNjQrbiwzNTUzLG51bGwsMCk7dC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzMzMwNiwzNTUzLG51bGwsMCksdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA5NiwzNTUzLG51bGwsMCksdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjEyOCwzNTUzLG51bGwsMCksYygzNjA5NixlLmRlcHRoQXR0YWNobWVudCksYygzNjEyOCxlLnN0ZW5jaWxBdHRhY2htZW50KSxjKDMzMzA2LGUuZGVwdGhTdGVuY2lsQXR0YWNobWVudCksdC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKDM2MTYwKSx0LmlzQ29udGV4dExvc3QoKSx0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCx4Lm5leHQ/eC5uZXh0LmZyYW1lYnVmZmVyOm51bGwpLHguY3VyPXgubmV4dCx0LmdldEVycm9yKCl9ZnVuY3Rpb24geSh0LGUpe2Z1bmN0aW9uIHIodCxlKXt2YXIgaSxhPTAsbz0wLHM9ITAsYz0hMDtpPW51bGw7dmFyIHA9ITAsZD1cInJnYmFcIix2PVwidWludDhcIix5PTEseD1udWxsLHc9bnVsbCxrPW51bGwsQT0hMTtcIm51bWJlclwiPT10eXBlb2YgdD8oYT0wfHQsbz0wfGV8fGEpOnQ/KFwic2hhcGVcImluIHQ/KGE9KG89dC5zaGFwZSlbMF0sbz1vWzFdKTooXCJyYWRpdXNcImluIHQmJihhPW89dC5yYWRpdXMpLFwid2lkdGhcImluIHQmJihhPXQud2lkdGgpLFwiaGVpZ2h0XCJpbiB0JiYobz10LmhlaWdodCkpLChcImNvbG9yXCJpbiB0fHxcImNvbG9yc1wiaW4gdCkmJihpPXQuY29sb3J8fHQuY29sb3JzLEFycmF5LmlzQXJyYXkoaSkpLGl8fChcImNvbG9yQ291bnRcImluIHQmJih5PTB8dC5jb2xvckNvdW50KSxcImNvbG9yVGV4dHVyZVwiaW4gdCYmKHA9ISF0LmNvbG9yVGV4dHVyZSxkPVwicmdiYTRcIiksXCJjb2xvclR5cGVcImluIHQmJih2PXQuY29sb3JUeXBlLCFwKSYmKFwiaGFsZiBmbG9hdFwiPT09dnx8XCJmbG9hdDE2XCI9PT12P2Q9XCJyZ2JhMTZmXCI6XCJmbG9hdFwiIT09diYmXCJmbG9hdDMyXCIhPT12fHwoZD1cInJnYmEzMmZcIikpLFwiY29sb3JGb3JtYXRcImluIHQmJihkPXQuY29sb3JGb3JtYXQsMDw9Yi5pbmRleE9mKGQpP3A9ITA6MDw9Xy5pbmRleE9mKGQpJiYocD0hMSkpKSwoXCJkZXB0aFRleHR1cmVcImluIHR8fFwiZGVwdGhTdGVuY2lsVGV4dHVyZVwiaW4gdCkmJihBPSEoIXQuZGVwdGhUZXh0dXJlJiYhdC5kZXB0aFN0ZW5jaWxUZXh0dXJlKSksXCJkZXB0aFwiaW4gdCYmKFwiYm9vbGVhblwiPT10eXBlb2YgdC5kZXB0aD9zPXQuZGVwdGg6KHg9dC5kZXB0aCxjPSExKSksXCJzdGVuY2lsXCJpbiB0JiYoXCJib29sZWFuXCI9PXR5cGVvZiB0LnN0ZW5jaWw/Yz10LnN0ZW5jaWw6KHc9dC5zdGVuY2lsLHM9ITEpKSxcImRlcHRoU3RlbmNpbFwiaW4gdCYmKFwiYm9vbGVhblwiPT10eXBlb2YgdC5kZXB0aFN0ZW5jaWw/cz1jPXQuZGVwdGhTdGVuY2lsOihrPXQuZGVwdGhTdGVuY2lsLGM9cz0hMSkpKTphPW89MTt2YXIgVD1udWxsLE09bnVsbCxTPW51bGwsRT1udWxsO2lmKEFycmF5LmlzQXJyYXkoaSkpVD1pLm1hcCh1KTtlbHNlIGlmKGkpVD1bdShpKV07ZWxzZSBmb3IoVD1BcnJheSh5KSxpPTA7aTx5OysraSlUW2ldPWgoYSxvLHAsZCx2KTtmb3IoYT1hfHxUWzBdLndpZHRoLG89b3x8VFswXS5oZWlnaHQseD9NPXUoeCk6cyYmIWMmJihNPWgoYSxvLEEsXCJkZXB0aFwiLFwidWludDMyXCIpKSx3P1M9dSh3KTpjJiYhcyYmKFM9aChhLG8sITEsXCJzdGVuY2lsXCIsXCJ1aW50OFwiKSksaz9FPXUoayk6IXgmJiF3JiZjJiZzJiYoRT1oKGEsbyxBLFwiZGVwdGggc3RlbmNpbFwiLFwiZGVwdGggc3RlbmNpbFwiKSkscz1udWxsLGk9MDtpPFQubGVuZ3RoOysraSlsKFRbaV0pLFRbaV0mJlRbaV0udGV4dHVyZSYmKGM9eXRbVFtpXS50ZXh0dXJlLl90ZXh0dXJlLmZvcm1hdF0qeHRbVFtpXS50ZXh0dXJlLl90ZXh0dXJlLnR5cGVdLG51bGw9PT1zJiYocz1jKSk7cmV0dXJuIGwoTSksbChTKSxsKEUpLGcobiksbi53aWR0aD1hLG4uaGVpZ2h0PW8sbi5jb2xvckF0dGFjaG1lbnRzPVQsbi5kZXB0aEF0dGFjaG1lbnQ9TSxuLnN0ZW5jaWxBdHRhY2htZW50PVMsbi5kZXB0aFN0ZW5jaWxBdHRhY2htZW50PUUsci5jb2xvcj1ULm1hcChmKSxyLmRlcHRoPWYoTSksci5zdGVuY2lsPWYoUyksci5kZXB0aFN0ZW5jaWw9ZihFKSxyLndpZHRoPW4ud2lkdGgsci5oZWlnaHQ9bi5oZWlnaHQsbShuKSxyfXZhciBuPW5ldyBkO3JldHVybiBhLmZyYW1lYnVmZmVyQ291bnQrKyxyKHQsZSksaihyLHtyZXNpemU6ZnVuY3Rpb24odCxlKXt2YXIgaT1NYXRoLm1heCgwfHQsMSksYT1NYXRoLm1heCgwfGV8fGksMSk7aWYoaT09PW4ud2lkdGgmJmE9PT1uLmhlaWdodClyZXR1cm4gcjtmb3IodmFyIG89bi5jb2xvckF0dGFjaG1lbnRzLHM9MDtzPG8ubGVuZ3RoOysrcylwKG9bc10saSxhKTtyZXR1cm4gcChuLmRlcHRoQXR0YWNobWVudCxpLGEpLHAobi5zdGVuY2lsQXR0YWNobWVudCxpLGEpLHAobi5kZXB0aFN0ZW5jaWxBdHRhY2htZW50LGksYSksbi53aWR0aD1yLndpZHRoPWksbi5oZWlnaHQ9ci5oZWlnaHQ9YSxtKG4pLHJ9LF9yZWdsVHlwZTpcImZyYW1lYnVmZmVyXCIsX2ZyYW1lYnVmZmVyOm4sZGVzdHJveTpmdW5jdGlvbigpe3YobiksZyhuKX0sdXNlOmZ1bmN0aW9uKHQpe3guc2V0RkJPKHtmcmFtZWJ1ZmZlcjpyfSx0KX19KX12YXIgeD17Y3VyOm51bGwsbmV4dDpudWxsLGRpcnR5OiExLHNldEZCTzpudWxsfSxiPVtcInJnYmFcIl0sXz1bXCJyZ2JhNFwiLFwicmdiNTY1XCIsXCJyZ2I1IGExXCJdO2UuZXh0X3NyZ2ImJl8ucHVzaChcInNyZ2JhXCIpLGUuZXh0X2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0JiZfLnB1c2goXCJyZ2JhMTZmXCIsXCJyZ2IxNmZcIiksZS53ZWJnbF9jb2xvcl9idWZmZXJfZmxvYXQmJl8ucHVzaChcInJnYmEzMmZcIik7dmFyIHc9W1widWludDhcIl07ZS5vZXNfdGV4dHVyZV9oYWxmX2Zsb2F0JiZ3LnB1c2goXCJoYWxmIGZsb2F0XCIsXCJmbG9hdDE2XCIpLGUub2VzX3RleHR1cmVfZmxvYXQmJncucHVzaChcImZsb2F0XCIsXCJmbG9hdDMyXCIpO3ZhciBrPTAsQT17fTtyZXR1cm4gaih4LHtnZXRGcmFtZWJ1ZmZlcjpmdW5jdGlvbih0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiZcImZyYW1lYnVmZmVyXCI9PT10Ll9yZWdsVHlwZSYmKHQ9dC5fZnJhbWVidWZmZXIpaW5zdGFuY2VvZiBkP3Q6bnVsbH0sY3JlYXRlOnksY3JlYXRlQ3ViZTpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3ZhciBpLGE9e2NvbG9yOm51bGx9LG89MCxzPW51bGw7aT1cInJnYmFcIjt2YXIgbD1cInVpbnQ4XCIsYz0xO2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0P289MHx0OnQ/KFwic2hhcGVcImluIHQ/bz10LnNoYXBlWzBdOihcInJhZGl1c1wiaW4gdCYmKG89MHx0LnJhZGl1cyksXCJ3aWR0aFwiaW4gdD9vPTB8dC53aWR0aDpcImhlaWdodFwiaW4gdCYmKG89MHx0LmhlaWdodCkpLChcImNvbG9yXCJpbiB0fHxcImNvbG9yc1wiaW4gdCkmJihzPXQuY29sb3J8fHQuY29sb3JzLEFycmF5LmlzQXJyYXkocykpLHN8fChcImNvbG9yQ291bnRcImluIHQmJihjPTB8dC5jb2xvckNvdW50KSxcImNvbG9yVHlwZVwiaW4gdCYmKGw9dC5jb2xvclR5cGUpLFwiY29sb3JGb3JtYXRcImluIHQmJihpPXQuY29sb3JGb3JtYXQpKSxcImRlcHRoXCJpbiB0JiYoYS5kZXB0aD10LmRlcHRoKSxcInN0ZW5jaWxcImluIHQmJihhLnN0ZW5jaWw9dC5zdGVuY2lsKSxcImRlcHRoU3RlbmNpbFwiaW4gdCYmKGEuZGVwdGhTdGVuY2lsPXQuZGVwdGhTdGVuY2lsKSk6bz0xLHMpaWYoQXJyYXkuaXNBcnJheShzKSlmb3IodD1bXSxpPTA7aTxzLmxlbmd0aDsrK2kpdFtpXT1zW2ldO2Vsc2UgdD1bc107ZWxzZSBmb3IodD1BcnJheShjKSxzPXtyYWRpdXM6byxmb3JtYXQ6aSx0eXBlOmx9LGk9MDtpPGM7KytpKXRbaV09bi5jcmVhdGVDdWJlKHMpO2ZvcihhLmNvbG9yPUFycmF5KHQubGVuZ3RoKSxpPTA7aTx0Lmxlbmd0aDsrK2kpYz10W2ldLG89b3x8Yy53aWR0aCxhLmNvbG9yW2ldPXt0YXJnZXQ6MzQwNjksZGF0YTp0W2ldfTtmb3IoaT0wOzY+aTsrK2kpe2ZvcihjPTA7Yzx0Lmxlbmd0aDsrK2MpYS5jb2xvcltjXS50YXJnZXQ9MzQwNjkraTswPGkmJihhLmRlcHRoPXJbMF0uZGVwdGgsYS5zdGVuY2lsPXJbMF0uc3RlbmNpbCxhLmRlcHRoU3RlbmNpbD1yWzBdLmRlcHRoU3RlbmNpbCkscltpXT9yW2ldKGEpOnJbaV09eShhKX1yZXR1cm4gaihlLHt3aWR0aDpvLGhlaWdodDpvLGNvbG9yOnR9KX12YXIgcj1BcnJheSg2KTtyZXR1cm4gZSh0KSxqKGUse2ZhY2VzOnIscmVzaXplOmZ1bmN0aW9uKHQpe3ZhciBuPTB8dDtpZihuPT09ZS53aWR0aClyZXR1cm4gZTt2YXIgaT1lLmNvbG9yO2Zvcih0PTA7dDxpLmxlbmd0aDsrK3QpaVt0XS5yZXNpemUobik7Zm9yKHQ9MDs2PnQ7Kyt0KXJbdF0ucmVzaXplKG4pO3JldHVybiBlLndpZHRoPWUuaGVpZ2h0PW4sZX0sX3JlZ2xUeXBlOlwiZnJhbWVidWZmZXJDdWJlXCIsZGVzdHJveTpmdW5jdGlvbigpe3IuZm9yRWFjaChmdW5jdGlvbih0KXt0LmRlc3Ryb3koKX0pfX0pfSxjbGVhcjpmdW5jdGlvbigpe1goQSkuZm9yRWFjaCh2KX0scmVzdG9yZTpmdW5jdGlvbigpe3guY3VyPW51bGwseC5uZXh0PW51bGwseC5kaXJ0eT0hMCxYKEEpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5mcmFtZWJ1ZmZlcj10LmNyZWF0ZUZyYW1lYnVmZmVyKCksbShlKX0pfX0pfWZ1bmN0aW9uIE0oKXt0aGlzLnc9dGhpcy56PXRoaXMueT10aGlzLng9dGhpcy5zdGF0ZT0wLHRoaXMuYnVmZmVyPW51bGwsdGhpcy5zaXplPTAsdGhpcy5ub3JtYWxpemVkPSExLHRoaXMudHlwZT01MTI2LHRoaXMuZGl2aXNvcj10aGlzLnN0cmlkZT10aGlzLm9mZnNldD0wfWZ1bmN0aW9uIFModCxlLHIsbil7ZnVuY3Rpb24gaSh0LGUscixuKXt0aGlzLm5hbWU9dCx0aGlzLmlkPWUsdGhpcy5sb2NhdGlvbj1yLHRoaXMuaW5mbz1ufWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcilpZih0W3JdLmlkPT09ZS5pZClyZXR1cm4gdm9pZCh0W3JdLmxvY2F0aW9uPWUubG9jYXRpb24pO3QucHVzaChlKX1mdW5jdGlvbiBvKHIsbixpKXtpZighKG89KGk9MzU2MzI9PT1yP2M6dSlbbl0pKXt2YXIgYT1lLnN0cihuKSxvPXQuY3JlYXRlU2hhZGVyKHIpO3Quc2hhZGVyU291cmNlKG8sYSksdC5jb21waWxlU2hhZGVyKG8pLGlbbl09b31yZXR1cm4gb31mdW5jdGlvbiBzKHQsZSl7dGhpcy5pZD1wKyssdGhpcy5mcmFnSWQ9dCx0aGlzLnZlcnRJZD1lLHRoaXMucHJvZ3JhbT1udWxsLHRoaXMudW5pZm9ybXM9W10sdGhpcy5hdHRyaWJ1dGVzPVtdLG4ucHJvZmlsZSYmKHRoaXMuc3RhdHM9e3VuaWZvcm1zQ291bnQ6MCxhdHRyaWJ1dGVzQ291bnQ6MH0pfWZ1bmN0aW9uIGwocixzKXt2YXIgbCxjO2w9bygzNTYzMixyLmZyYWdJZCksYz1vKDM1NjMzLHIudmVydElkKTt2YXIgdT1yLnByb2dyYW09dC5jcmVhdGVQcm9ncmFtKCk7dC5hdHRhY2hTaGFkZXIodSxsKSx0LmF0dGFjaFNoYWRlcih1LGMpLHQubGlua1Byb2dyYW0odSk7dmFyIGg9dC5nZXRQcm9ncmFtUGFyYW1ldGVyKHUsMzU3MTgpO24ucHJvZmlsZSYmKHIuc3RhdHMudW5pZm9ybXNDb3VudD1oKTt2YXIgZj1yLnVuaWZvcm1zO2ZvcihsPTA7bDxoOysrbClpZihjPXQuZ2V0QWN0aXZlVW5pZm9ybSh1LGwpKWlmKDE8Yy5zaXplKWZvcih2YXIgcD0wO3A8Yy5zaXplOysrcCl7dmFyIGQ9Yy5uYW1lLnJlcGxhY2UoXCJbMF1cIixcIltcIitwK1wiXVwiKTthKGYsbmV3IGkoZCxlLmlkKGQpLHQuZ2V0VW5pZm9ybUxvY2F0aW9uKHUsZCksYykpfWVsc2UgYShmLG5ldyBpKGMubmFtZSxlLmlkKGMubmFtZSksdC5nZXRVbmlmb3JtTG9jYXRpb24odSxjLm5hbWUpLGMpKTtmb3IoaD10LmdldFByb2dyYW1QYXJhbWV0ZXIodSwzNTcyMSksbi5wcm9maWxlJiYoci5zdGF0cy5hdHRyaWJ1dGVzQ291bnQ9aCksZj1yLmF0dHJpYnV0ZXMsbD0wO2w8aDsrK2wpKGM9dC5nZXRBY3RpdmVBdHRyaWIodSxsKSkmJmEoZixuZXcgaShjLm5hbWUsZS5pZChjLm5hbWUpLHQuZ2V0QXR0cmliTG9jYXRpb24odSxjLm5hbWUpLGMpKX12YXIgYz17fSx1PXt9LGg9e30sZj1bXSxwPTA7cmV0dXJuIG4ucHJvZmlsZSYmKHIuZ2V0TWF4VW5pZm9ybXNDb3VudD1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIGYuZm9yRWFjaChmdW5jdGlvbihlKXtlLnN0YXRzLnVuaWZvcm1zQ291bnQ+dCYmKHQ9ZS5zdGF0cy51bmlmb3Jtc0NvdW50KX0pLHR9LHIuZ2V0TWF4QXR0cmlidXRlc0NvdW50PWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gZi5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uuc3RhdHMuYXR0cmlidXRlc0NvdW50PnQmJih0PWUuc3RhdHMuYXR0cmlidXRlc0NvdW50KX0pLHR9KSx7Y2xlYXI6ZnVuY3Rpb24oKXt2YXIgZT10LmRlbGV0ZVNoYWRlci5iaW5kKHQpO1goYykuZm9yRWFjaChlKSxjPXt9LFgodSkuZm9yRWFjaChlKSx1PXt9LGYuZm9yRWFjaChmdW5jdGlvbihlKXt0LmRlbGV0ZVByb2dyYW0oZS5wcm9ncmFtKX0pLGYubGVuZ3RoPTAsaD17fSxyLnNoYWRlckNvdW50PTB9LHByb2dyYW06ZnVuY3Rpb24odCxlLG4pe3ZhciBpPWhbZV07aXx8KGk9aFtlXT17fSk7dmFyIGE9aVt0XTtyZXR1cm4gYXx8KGE9bmV3IHMoZSx0KSxyLnNoYWRlckNvdW50KyssbChhKSxpW3RdPWEsZi5wdXNoKGEpKSxhfSxyZXN0b3JlOmZ1bmN0aW9uKCl7Yz17fSx1PXt9O2Zvcih2YXIgdD0wO3Q8Zi5sZW5ndGg7Kyt0KWwoZlt0XSl9LHNoYWRlcjpvLGZyYWc6LTEsdmVydDotMX19ZnVuY3Rpb24gRSh0LGUscixuLGksYSxvKXtmdW5jdGlvbiBzKGkpe3ZhciBhO2E9bnVsbD09PWUubmV4dD81MTIxOmUubmV4dC5jb2xvckF0dGFjaG1lbnRzWzBdLnRleHR1cmUuX3RleHR1cmUudHlwZTt2YXIgbz0wLHM9MCxsPW4uZnJhbWVidWZmZXJXaWR0aCxjPW4uZnJhbWVidWZmZXJIZWlnaHQsdT1udWxsO3JldHVybiBXKGkpP3U9aTppJiYobz0wfGkueCxzPTB8aS55LGw9MHwoaS53aWR0aHx8bi5mcmFtZWJ1ZmZlcldpZHRoLW8pLGM9MHwoaS5oZWlnaHR8fG4uZnJhbWVidWZmZXJIZWlnaHQtcyksdT1pLmRhdGF8fG51bGwpLHIoKSxpPWwqYyo0LHV8fCg1MTIxPT09YT91PW5ldyBVaW50OEFycmF5KGkpOjUxMjY9PT1hJiYodT11fHxuZXcgRmxvYXQzMkFycmF5KGkpKSksdC5waXhlbFN0b3JlaSgzMzMzLDQpLHQucmVhZFBpeGVscyhvLHMsbCxjLDY0MDgsYSx1KSx1fXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCYmXCJmcmFtZWJ1ZmZlclwiaW4gdD9mdW5jdGlvbih0KXt2YXIgcjtyZXR1cm4gZS5zZXRGQk8oe2ZyYW1lYnVmZmVyOnQuZnJhbWVidWZmZXJ9LGZ1bmN0aW9uKCl7cj1zKHQpfSkscn0odCk6cyh0KX19ZnVuY3Rpb24gQyh0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCl9ZnVuY3Rpb24gTCh0KXtyZXR1cm4gQyh0KS5qb2luKFwiXCIpfWZ1bmN0aW9uIHooKXtmdW5jdGlvbiB0KCl7dmFyIHQ9W10sZT1bXTtyZXR1cm4gaihmdW5jdGlvbigpe3QucHVzaC5hcHBseSh0LEMoYXJndW1lbnRzKSl9LHtkZWY6ZnVuY3Rpb24oKXt2YXIgbj1cInZcIityKys7cmV0dXJuIGUucHVzaChuKSwwPGFyZ3VtZW50cy5sZW5ndGgmJih0LnB1c2gobixcIj1cIiksdC5wdXNoLmFwcGx5KHQsQyhhcmd1bWVudHMpKSx0LnB1c2goXCI7XCIpKSxufSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBMKFswPGUubGVuZ3RoP1widmFyIFwiK2UrXCI7XCI6XCJcIixMKHQpXSl9fSl9ZnVuY3Rpb24gZSgpe2Z1bmN0aW9uIGUodCxlKXtuKHQsZSxcIj1cIixyLmRlZih0LGUpLFwiO1wiKX12YXIgcj10KCksbj10KCksaT1yLnRvU3RyaW5nLGE9bi50b1N0cmluZztyZXR1cm4gaihmdW5jdGlvbigpe3IuYXBwbHkocixDKGFyZ3VtZW50cykpfSx7ZGVmOnIuZGVmLGVudHJ5OnIsZXhpdDpuLHNhdmU6ZSxzZXQ6ZnVuY3Rpb24odCxuLGkpe2UodCxuKSxyKHQsbixcIj1cIixpLFwiO1wiKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gaSgpK2EoKX19KX12YXIgcj0wLG49W10saT1bXSxhPXQoKSxvPXt9O3JldHVybntnbG9iYWw6YSxsaW5rOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8aS5sZW5ndGg7KytlKWlmKGlbZV09PT10KXJldHVybiBuW2VdO3JldHVybiBlPVwiZ1wiK3IrKyxuLnB1c2goZSksaS5wdXNoKHQpLGV9LGJsb2NrOnQscHJvYzpmdW5jdGlvbih0LHIpe2Z1bmN0aW9uIG4oKXt2YXIgdD1cImFcIitpLmxlbmd0aDtyZXR1cm4gaS5wdXNoKHQpLHR9dmFyIGk9W107cj1yfHwwO2Zvcih2YXIgYT0wO2E8cjsrK2EpbigpO3ZhciBzPShhPWUoKSkudG9TdHJpbmc7cmV0dXJuIG9bdF09aihhLHthcmc6bix0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBMKFtcImZ1bmN0aW9uKFwiLGkuam9pbigpLFwiKXtcIixzKCksXCJ9XCJdKX19KX0sc2NvcGU6ZSxjb25kOmZ1bmN0aW9uKCl7dmFyIHQ9TChhcmd1bWVudHMpLHI9ZSgpLG49ZSgpLGk9ci50b1N0cmluZyxhPW4udG9TdHJpbmc7cmV0dXJuIGoocix7dGhlbjpmdW5jdGlvbigpe3JldHVybiByLmFwcGx5KHIsQyhhcmd1bWVudHMpKSx0aGlzfSxlbHNlOmZ1bmN0aW9uKCl7cmV0dXJuIG4uYXBwbHkobixDKGFyZ3VtZW50cykpLHRoaXN9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9YSgpO3JldHVybiBlJiYoZT1cImVsc2V7XCIrZStcIn1cIiksTChbXCJpZihcIix0LFwiKXtcIixpKCksXCJ9XCIsZV0pfX0pfSxjb21waWxlOmZ1bmN0aW9uKCl7dmFyIHQ9WydcInVzZSBzdHJpY3RcIjsnLGEsXCJyZXR1cm4ge1wiXTtPYmplY3Qua2V5cyhvKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QucHVzaCgnXCInLGUsJ1wiOicsb1tlXS50b1N0cmluZygpLFwiLFwiKX0pLHQucHVzaChcIn1cIik7dmFyIGU9TCh0KS5yZXBsYWNlKC87L2csXCI7XFxuXCIpLnJlcGxhY2UoL30vZyxcIn1cXG5cIikucmVwbGFjZSgvey9nLFwie1xcblwiKTtyZXR1cm4gRnVuY3Rpb24uYXBwbHkobnVsbCxuLmNvbmNhdChlKSkuYXBwbHkobnVsbCxpKX19fWZ1bmN0aW9uIE8odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl8fFcodCl8fGwodCl9ZnVuY3Rpb24gSSh0KXtyZXR1cm4gdC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJ2aWV3cG9ydFwiPT09dD8tMTpcInZpZXdwb3J0XCI9PT1lPzE6dDxlPy0xOjF9KX1mdW5jdGlvbiBEKHQsZSxyLG4pe3RoaXMudGhpc0RlcD10LHRoaXMuY29udGV4dERlcD1lLHRoaXMucHJvcERlcD1yLHRoaXMuYXBwZW5kPW59ZnVuY3Rpb24gUCh0KXtyZXR1cm4gdCYmISh0LnRoaXNEZXB8fHQuY29udGV4dERlcHx8dC5wcm9wRGVwKX1mdW5jdGlvbiBSKHQpe3JldHVybiBuZXcgRCghMSwhMSwhMSx0KX1mdW5jdGlvbiBGKHQsZSl7dmFyIHI9dC50eXBlO3JldHVybiAwPT09cj9uZXcgRCghMCwxPD0ocj10LmRhdGEubGVuZ3RoKSwyPD1yLGUpOjQ9PT1yP25ldyBEKChyPXQuZGF0YSkudGhpc0RlcCxyLmNvbnRleHREZXAsci5wcm9wRGVwLGUpOm5ldyBEKDM9PT1yLDI9PT1yLDE9PT1yLGUpfWZ1bmN0aW9uIEIodCxlLHIsbixpLG8scyxsLGMsdSxoLGYscCxkLGcpe2Z1bmN0aW9uIG0odCl7cmV0dXJuIHQucmVwbGFjZShcIi5cIixcIl9cIil9ZnVuY3Rpb24geSh0LGUscil7dmFyIG49bSh0KTtudC5wdXNoKHQpLGV0W25dPXR0W25dPSEhcixpdFtuXT1lfWZ1bmN0aW9uIHgodCxlLHIpe3ZhciBuPW0odCk7bnQucHVzaCh0KSxBcnJheS5pc0FycmF5KHIpPyh0dFtuXT1yLnNsaWNlKCksZXRbbl09ci5zbGljZSgpKTp0dFtuXT1ldFtuXT1yLGF0W25dPWV9ZnVuY3Rpb24gYigpe3ZhciB0PXooKSxyPXQubGluayxuPXQuZ2xvYmFsO3QuaWQ9bHQrKyx0LmJhdGNoSWQ9XCIwXCI7dmFyIGk9cihvdCksYT10LnNoYXJlZD17cHJvcHM6XCJhMFwifTtPYmplY3Qua2V5cyhvdCkuZm9yRWFjaChmdW5jdGlvbih0KXthW3RdPW4uZGVmKGksXCIuXCIsdCl9KTt2YXIgbz10Lm5leHQ9e30scz10LmN1cnJlbnQ9e307T2JqZWN0LmtleXMoYXQpLmZvckVhY2goZnVuY3Rpb24odCl7QXJyYXkuaXNBcnJheSh0dFt0XSkmJihvW3RdPW4uZGVmKGEubmV4dCxcIi5cIix0KSxzW3RdPW4uZGVmKGEuY3VycmVudCxcIi5cIix0KSl9KTt2YXIgbD10LmNvbnN0YW50cz17fTtPYmplY3Qua2V5cyhzdCkuZm9yRWFjaChmdW5jdGlvbih0KXtsW3RdPW4uZGVmKEpTT04uc3RyaW5naWZ5KHN0W3RdKSl9KSx0Lmludm9rZT1mdW5jdGlvbihlLG4pe3N3aXRjaChuLnR5cGUpe2Nhc2UgMDp2YXIgaT1bXCJ0aGlzXCIsYS5jb250ZXh0LGEucHJvcHMsdC5iYXRjaElkXTtyZXR1cm4gZS5kZWYocihuLmRhdGEpLFwiLmNhbGwoXCIsaS5zbGljZSgwLE1hdGgubWF4KG4uZGF0YS5sZW5ndGgrMSw0KSksXCIpXCIpO2Nhc2UgMTpyZXR1cm4gZS5kZWYoYS5wcm9wcyxuLmRhdGEpO2Nhc2UgMjpyZXR1cm4gZS5kZWYoYS5jb250ZXh0LG4uZGF0YSk7Y2FzZSAzOnJldHVybiBlLmRlZihcInRoaXNcIixuLmRhdGEpO2Nhc2UgNDpyZXR1cm4gbi5kYXRhLmFwcGVuZCh0LGUpLG4uZGF0YS5yZWZ9fSx0LmF0dHJpYkNhY2hlPXt9O3ZhciBjPXt9O3JldHVybiB0LnNjb3BlQXR0cmliPWZ1bmN0aW9uKHQpe2lmKCh0PWUuaWQodCkpaW4gYylyZXR1cm4gY1t0XTt2YXIgbj11LnNjb3BlW3RdO3JldHVybiBufHwobj11LnNjb3BlW3RdPW5ldyBaKSxjW3RdPXIobil9LHR9ZnVuY3Rpb24gXyh0LGUpe3ZhciByPXQuc3RhdGljLG49dC5keW5hbWljO2lmKFwiZnJhbWVidWZmZXJcImluIHIpe3ZhciBpPXIuZnJhbWVidWZmZXI7cmV0dXJuIGk/KGk9bC5nZXRGcmFtZWJ1ZmZlcihpKSxSKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5saW5rKGkpLG49dC5zaGFyZWQ7cmV0dXJuIGUuc2V0KG4uZnJhbWVidWZmZXIsXCIubmV4dFwiLHIpLG49bi5jb250ZXh0LGUuc2V0KG4sXCIuZnJhbWVidWZmZXJXaWR0aFwiLHIrXCIud2lkdGhcIiksZS5zZXQobixcIi5mcmFtZWJ1ZmZlckhlaWdodFwiLHIrXCIuaGVpZ2h0XCIpLHJ9KSk6UihmdW5jdGlvbih0LGUpe3ZhciByPXQuc2hhcmVkO3JldHVybiBlLnNldChyLmZyYW1lYnVmZmVyLFwiLm5leHRcIixcIm51bGxcIikscj1yLmNvbnRleHQsZS5zZXQocixcIi5mcmFtZWJ1ZmZlcldpZHRoXCIscitcIi5kcmF3aW5nQnVmZmVyV2lkdGhcIiksZS5zZXQocixcIi5mcmFtZWJ1ZmZlckhlaWdodFwiLHIrXCIuZHJhd2luZ0J1ZmZlckhlaWdodFwiKSxcIm51bGxcIn0pfWlmKFwiZnJhbWVidWZmZXJcImluIG4pe3ZhciBhPW4uZnJhbWVidWZmZXI7cmV0dXJuIEYoYSxmdW5jdGlvbih0LGUpe3ZhciByPXQuaW52b2tlKGUsYSksbj10LnNoYXJlZCxpPW4uZnJhbWVidWZmZXI7cj1lLmRlZihpLFwiLmdldEZyYW1lYnVmZmVyKFwiLHIsXCIpXCIpO3JldHVybiBlLnNldChpLFwiLm5leHRcIixyKSxuPW4uY29udGV4dCxlLnNldChuLFwiLmZyYW1lYnVmZmVyV2lkdGhcIixyK1wiP1wiK3IrXCIud2lkdGg6XCIrbitcIi5kcmF3aW5nQnVmZmVyV2lkdGhcIiksZS5zZXQobixcIi5mcmFtZWJ1ZmZlckhlaWdodFwiLHIrXCI/XCIrcitcIi5oZWlnaHQ6XCIrbitcIi5kcmF3aW5nQnVmZmVySGVpZ2h0XCIpLHJ9KX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB3KHQpe2Z1bmN0aW9uIHIodCl7aWYodCBpbiBuKXt2YXIgcj1lLmlkKG5bdF0pO3JldHVybih0PVIoZnVuY3Rpb24oKXtyZXR1cm4gcn0pKS5pZD1yLHR9aWYodCBpbiBpKXt2YXIgYT1pW3RdO3JldHVybiBGKGEsZnVuY3Rpb24odCxlKXt2YXIgcj10Lmludm9rZShlLGEpO3JldHVybiBlLmRlZih0LnNoYXJlZC5zdHJpbmdzLFwiLmlkKFwiLHIsXCIpXCIpfSl9cmV0dXJuIG51bGx9dmFyIG49dC5zdGF0aWMsaT10LmR5bmFtaWMsYT1yKFwiZnJhZ1wiKSxvPXIoXCJ2ZXJ0XCIpLHM9bnVsbDtyZXR1cm4gUChhKSYmUChvKT8ocz1oLnByb2dyYW0oby5pZCxhLmlkKSx0PVIoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5saW5rKHMpfSkpOnQ9bmV3IEQoYSYmYS50aGlzRGVwfHxvJiZvLnRoaXNEZXAsYSYmYS5jb250ZXh0RGVwfHxvJiZvLmNvbnRleHREZXAsYSYmYS5wcm9wRGVwfHxvJiZvLnByb3BEZXAsZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dC5zaGFyZWQuc2hhZGVyO3JldHVybiByPWE/YS5hcHBlbmQodCxlKTplLmRlZihpLFwiLlwiLFwiZnJhZ1wiKSxuPW8/by5hcHBlbmQodCxlKTplLmRlZihpLFwiLlwiLFwidmVydFwiKSxlLmRlZihpK1wiLnByb2dyYW0oXCIrbitcIixcIityK1wiKVwiKX0pLHtmcmFnOmEsdmVydDpvLHByb2dWYXI6dCxwcm9ncmFtOnN9fWZ1bmN0aW9uIGsodCxlKXtmdW5jdGlvbiByKHQsZSl7aWYodCBpbiBuKXt2YXIgcj0wfG5bdF07cmV0dXJuIFIoZnVuY3Rpb24odCxuKXtyZXR1cm4gZSYmKHQuT0ZGU0VUPXIpLHJ9KX1pZih0IGluIGkpe3ZhciBvPWlbdF07cmV0dXJuIEYobyxmdW5jdGlvbih0LHIpe3ZhciBuPXQuaW52b2tlKHIsbyk7cmV0dXJuIGUmJih0Lk9GRlNFVD1uKSxufSl9cmV0dXJuIGUmJmE/UihmdW5jdGlvbih0LGUpe3JldHVybiB0Lk9GRlNFVD1cIjBcIiwwfSk6bnVsbH12YXIgbj10LnN0YXRpYyxpPXQuZHluYW1pYyxhPWZ1bmN0aW9uKCl7aWYoXCJlbGVtZW50c1wiaW4gbil7dmFyIHQ9bi5lbGVtZW50cztPKHQpP3Q9by5nZXRFbGVtZW50cyhvLmNyZWF0ZSh0LCEwKSk6dCYmKHQ9by5nZXRFbGVtZW50cyh0KSk7dmFyIGU9UihmdW5jdGlvbihlLHIpe2lmKHQpe3ZhciBuPWUubGluayh0KTtyZXR1cm4gZS5FTEVNRU5UUz1ufXJldHVybiBlLkVMRU1FTlRTPW51bGx9KTtyZXR1cm4gZS52YWx1ZT10LGV9aWYoXCJlbGVtZW50c1wiaW4gaSl7dmFyIHI9aS5lbGVtZW50cztyZXR1cm4gRihyLGZ1bmN0aW9uKHQsZSl7dmFyIG49KGk9dC5zaGFyZWQpLmlzQnVmZmVyQXJncyxpPWkuZWxlbWVudHMsYT10Lmludm9rZShlLHIpLG89ZS5kZWYoXCJudWxsXCIpO249ZS5kZWYobixcIihcIixhLFwiKVwiKSxhPXQuY29uZChuKS50aGVuKG8sXCI9XCIsaSxcIi5jcmVhdGVTdHJlYW0oXCIsYSxcIik7XCIpLmVsc2UobyxcIj1cIixpLFwiLmdldEVsZW1lbnRzKFwiLGEsXCIpO1wiKTtyZXR1cm4gZS5lbnRyeShhKSxlLmV4aXQodC5jb25kKG4pLnRoZW4oaSxcIi5kZXN0cm95U3RyZWFtKFwiLG8sXCIpO1wiKSksdC5FTEVNRU5UUz1vfSl9cmV0dXJuIG51bGx9KCkscz1yKFwib2Zmc2V0XCIsITApO3JldHVybntlbGVtZW50czphLHByaW1pdGl2ZTpmdW5jdGlvbigpe2lmKFwicHJpbWl0aXZlXCJpbiBuKXt2YXIgdD1uLnByaW1pdGl2ZTtyZXR1cm4gUihmdW5jdGlvbihlLHIpe3JldHVybiBydFt0XX0pfWlmKFwicHJpbWl0aXZlXCJpbiBpKXt2YXIgZT1pLnByaW1pdGl2ZTtyZXR1cm4gRihlLGZ1bmN0aW9uKHQscil7dmFyIG49dC5jb25zdGFudHMucHJpbVR5cGVzLGk9dC5pbnZva2UocixlKTtyZXR1cm4gci5kZWYobixcIltcIixpLFwiXVwiKX0pfXJldHVybiBhP1AoYSk/YS52YWx1ZT9SKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGVmKHQuRUxFTUVOVFMsXCIucHJpbVR5cGVcIil9KTpSKGZ1bmN0aW9uKCl7cmV0dXJuIDR9KTpuZXcgRChhLnRoaXNEZXAsYS5jb250ZXh0RGVwLGEucHJvcERlcCxmdW5jdGlvbih0LGUpe3ZhciByPXQuRUxFTUVOVFM7cmV0dXJuIGUuZGVmKHIsXCI/XCIscixcIi5wcmltVHlwZTpcIiw0KX0pOm51bGx9KCksY291bnQ6ZnVuY3Rpb24oKXtpZihcImNvdW50XCJpbiBuKXt2YXIgdD0wfG4uY291bnQ7cmV0dXJuIFIoZnVuY3Rpb24oKXtyZXR1cm4gdH0pfWlmKFwiY291bnRcImluIGkpe3ZhciBlPWkuY291bnQ7cmV0dXJuIEYoZSxmdW5jdGlvbih0LHIpe3JldHVybiB0Lmludm9rZShyLGUpfSl9cmV0dXJuIGE/UChhKT9hP3M/bmV3IEQocy50aGlzRGVwLHMuY29udGV4dERlcCxzLnByb3BEZXAsZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZWYodC5FTEVNRU5UUyxcIi52ZXJ0Q291bnQtXCIsdC5PRkZTRVQpfSk6UihmdW5jdGlvbih0LGUpe3JldHVybiBlLmRlZih0LkVMRU1FTlRTLFwiLnZlcnRDb3VudFwiKX0pOlIoZnVuY3Rpb24oKXtyZXR1cm4tMX0pOm5ldyBEKGEudGhpc0RlcHx8cy50aGlzRGVwLGEuY29udGV4dERlcHx8cy5jb250ZXh0RGVwLGEucHJvcERlcHx8cy5wcm9wRGVwLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5FTEVNRU5UUztyZXR1cm4gdC5PRkZTRVQ/ZS5kZWYocixcIj9cIixyLFwiLnZlcnRDb3VudC1cIix0Lk9GRlNFVCxcIjotMVwiKTplLmRlZihyLFwiP1wiLHIsXCIudmVydENvdW50Oi0xXCIpfSk6bnVsbH0oKSxpbnN0YW5jZXM6cihcImluc3RhbmNlc1wiLCExKSxvZmZzZXQ6c319ZnVuY3Rpb24gQSh0LHIpe3ZhciBuPXQuc3RhdGljLGE9dC5keW5hbWljLG89e307cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHI9blt0XSxhPWUuaWQodCkscz1uZXcgWjtpZihPKHIpKXMuc3RhdGU9MSxzLmJ1ZmZlcj1pLmdldEJ1ZmZlcihpLmNyZWF0ZShyLDM0OTYyLCExLCEwKSkscy50eXBlPTA7ZWxzZSBpZihjPWkuZ2V0QnVmZmVyKHIpKXMuc3RhdGU9MSxzLmJ1ZmZlcj1jLHMudHlwZT0wO2Vsc2UgaWYoXCJjb25zdGFudFwiaW4gcil7dmFyIGw9ci5jb25zdGFudDtzLmJ1ZmZlcj1cIm51bGxcIixzLnN0YXRlPTIsXCJudW1iZXJcIj09dHlwZW9mIGw/cy54PWw6YnQuZm9yRWFjaChmdW5jdGlvbih0LGUpe2U8bC5sZW5ndGgmJihzW3RdPWxbZV0pfSl9ZWxzZXt2YXIgYz1PKHIuYnVmZmVyKT9pLmdldEJ1ZmZlcihpLmNyZWF0ZShyLmJ1ZmZlciwzNDk2MiwhMSwhMCkpOmkuZ2V0QnVmZmVyKHIuYnVmZmVyKSx1PTB8ci5vZmZzZXQsaD0wfHIuc3RyaWRlLGY9MHxyLnNpemUscD0hIXIubm9ybWFsaXplZCxkPTA7XCJ0eXBlXCJpbiByJiYoZD1KW3IudHlwZV0pLHI9MHxyLmRpdmlzb3Iscy5idWZmZXI9YyxzLnN0YXRlPTEscy5zaXplPWYscy5ub3JtYWxpemVkPXAscy50eXBlPWR8fGMuZHR5cGUscy5vZmZzZXQ9dSxzLnN0cmlkZT1oLHMuZGl2aXNvcj1yfW9bdF09UihmdW5jdGlvbih0LGUpe3ZhciByPXQuYXR0cmliQ2FjaGU7aWYoYSBpbiByKXJldHVybiByW2FdO3ZhciBuPXtpc1N0cmVhbTohMX07cmV0dXJuIE9iamVjdC5rZXlzKHMpLmZvckVhY2goZnVuY3Rpb24odCl7blt0XT1zW3RdfSkscy5idWZmZXImJihuLmJ1ZmZlcj10Lmxpbmsocy5idWZmZXIpLG4udHlwZT1uLnR5cGV8fG4uYnVmZmVyK1wiLmR0eXBlXCIpLHJbYV09bn0pfSksT2JqZWN0LmtleXMoYSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1hW3RdO29bdF09RihlLGZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbih0KXtyKGxbdF0sXCI9XCIsaSxcIi5cIix0LFwifDA7XCIpfXZhciBpPXQuaW52b2tlKHIsZSksYT10LnNoYXJlZCxvPWEuaXNCdWZmZXJBcmdzLHM9YS5idWZmZXIsbD17aXNTdHJlYW06ci5kZWYoITEpfSxjPW5ldyBaO2Muc3RhdGU9MSxPYmplY3Qua2V5cyhjKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2xbdF09ci5kZWYoXCJcIitjW3RdKX0pO3ZhciB1PWwuYnVmZmVyLGg9bC50eXBlO3JldHVybiByKFwiaWYoXCIsbyxcIihcIixpLFwiKSl7XCIsbC5pc1N0cmVhbSxcIj10cnVlO1wiLHUsXCI9XCIscyxcIi5jcmVhdGVTdHJlYW0oXCIsMzQ5NjIsXCIsXCIsaSxcIik7XCIsaCxcIj1cIix1LFwiLmR0eXBlO1wiLFwifWVsc2V7XCIsdSxcIj1cIixzLFwiLmdldEJ1ZmZlcihcIixpLFwiKTtcIixcImlmKFwiLHUsXCIpe1wiLGgsXCI9XCIsdSxcIi5kdHlwZTtcIiwnfWVsc2UgaWYoXCJjb25zdGFudFwiIGluICcsaSxcIil7XCIsbC5zdGF0ZSxcIj1cIiwyLFwiO1wiLFwiaWYodHlwZW9mIFwiK2krJy5jb25zdGFudCA9PT0gXCJudW1iZXJcIil7JyxsW2J0WzBdXSxcIj1cIixpLFwiLmNvbnN0YW50O1wiLGJ0LnNsaWNlKDEpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbFt0XX0pLmpvaW4oXCI9XCIpLFwiPTA7XCIsXCJ9ZWxzZXtcIixidC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gbFt0XStcIj1cIitpK1wiLmNvbnN0YW50Lmxlbmd0aD5cIitlK1wiP1wiK2krXCIuY29uc3RhbnRbXCIrZStcIl06MDtcIn0pLmpvaW4oXCJcIiksXCJ9fWVsc2V7XCIsXCJpZihcIixvLFwiKFwiLGksXCIuYnVmZmVyKSl7XCIsdSxcIj1cIixzLFwiLmNyZWF0ZVN0cmVhbShcIiwzNDk2MixcIixcIixpLFwiLmJ1ZmZlcik7XCIsXCJ9ZWxzZXtcIix1LFwiPVwiLHMsXCIuZ2V0QnVmZmVyKFwiLGksXCIuYnVmZmVyKTtcIixcIn1cIixoLCc9XCJ0eXBlXCIgaW4gJyxpLFwiP1wiLGEuZ2xUeXBlcyxcIltcIixpLFwiLnR5cGVdOlwiLHUsXCIuZHR5cGU7XCIsbC5ub3JtYWxpemVkLFwiPSEhXCIsaSxcIi5ub3JtYWxpemVkO1wiKSxuKFwic2l6ZVwiKSxuKFwib2Zmc2V0XCIpLG4oXCJzdHJpZGVcIiksbihcImRpdmlzb3JcIikscihcIn19XCIpLHIuZXhpdChcImlmKFwiLGwuaXNTdHJlYW0sXCIpe1wiLHMsXCIuZGVzdHJveVN0cmVhbShcIix1LFwiKTtcIixcIn1cIiksbH0pfSksb31mdW5jdGlvbiBUKHQsZSxyLG4saSl7dmFyIG89Xyh0KSxzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe2lmKHQgaW4gaSl7dmFyIHI9aVt0XTt0PSEwO3ZhciBuLG8scz0wfHIueCxsPTB8ci55O3JldHVyblwid2lkdGhcImluIHI/bj0wfHIud2lkdGg6dD0hMSxcImhlaWdodFwiaW4gcj9vPTB8ci5oZWlnaHQ6dD0hMSxuZXcgRCghdCYmZSYmZS50aGlzRGVwLCF0JiZlJiZlLmNvbnRleHREZXAsIXQmJmUmJmUucHJvcERlcCxmdW5jdGlvbih0LGUpe3ZhciBpPXQuc2hhcmVkLmNvbnRleHQsYT1uO1wid2lkdGhcImluIHJ8fChhPWUuZGVmKGksXCIuXCIsXCJmcmFtZWJ1ZmZlcldpZHRoXCIsXCItXCIscykpO3ZhciBjPW87cmV0dXJuXCJoZWlnaHRcImluIHJ8fChjPWUuZGVmKGksXCIuXCIsXCJmcmFtZWJ1ZmZlckhlaWdodFwiLFwiLVwiLGwpKSxbcyxsLGEsY119KX1pZih0IGluIGEpe3ZhciBjPWFbdF07cmV0dXJuIHQ9RihjLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pbnZva2UoZSxjKSxuPXQuc2hhcmVkLmNvbnRleHQsaT1lLmRlZihyLFwiLnh8MFwiKSxhPWUuZGVmKHIsXCIueXwwXCIpO3JldHVybltpLGEsZS5kZWYoJ1wid2lkdGhcIiBpbiAnLHIsXCI/XCIscixcIi53aWR0aHwwOlwiLFwiKFwiLG4sXCIuXCIsXCJmcmFtZWJ1ZmZlcldpZHRoXCIsXCItXCIsaSxcIilcIikscj1lLmRlZignXCJoZWlnaHRcIiBpbiAnLHIsXCI/XCIscixcIi5oZWlnaHR8MDpcIixcIihcIixuLFwiLlwiLFwiZnJhbWVidWZmZXJIZWlnaHRcIixcIi1cIixhLFwiKVwiKV19KSxlJiYodC50aGlzRGVwPXQudGhpc0RlcHx8ZS50aGlzRGVwLHQuY29udGV4dERlcD10LmNvbnRleHREZXB8fGUuY29udGV4dERlcCx0LnByb3BEZXA9dC5wcm9wRGVwfHxlLnByb3BEZXApLHR9cmV0dXJuIGU/bmV3IEQoZS50aGlzRGVwLGUuY29udGV4dERlcCxlLnByb3BEZXAsZnVuY3Rpb24odCxlKXt2YXIgcj10LnNoYXJlZC5jb250ZXh0O3JldHVyblswLDAsZS5kZWYocixcIi5cIixcImZyYW1lYnVmZmVyV2lkdGhcIiksZS5kZWYocixcIi5cIixcImZyYW1lYnVmZmVySGVpZ2h0XCIpXX0pOm51bGx9dmFyIGk9dC5zdGF0aWMsYT10LmR5bmFtaWM7aWYodD1uKFwidmlld3BvcnRcIikpe3ZhciBvPXQ7dD1uZXcgRCh0LnRoaXNEZXAsdC5jb250ZXh0RGVwLHQucHJvcERlcCxmdW5jdGlvbih0LGUpe3ZhciByPW8uYXBwZW5kKHQsZSksbj10LnNoYXJlZC5jb250ZXh0O3JldHVybiBlLnNldChuLFwiLnZpZXdwb3J0V2lkdGhcIixyWzJdKSxlLnNldChuLFwiLnZpZXdwb3J0SGVpZ2h0XCIsclszXSkscn0pfXJldHVybnt2aWV3cG9ydDp0LHNjaXNzb3JfYm94Om4oXCJzY2lzc29yLmJveFwiKX19KHQsbyksbD1rKHQpLGM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnN0YXRpYyxuPXQuZHluYW1pYyxpPXt9O3JldHVybiBudC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxhKXtpZih0IGluIHIpe3ZhciBzPWUoclt0XSk7aVtvXT1SKGZ1bmN0aW9uKCl7cmV0dXJuIHN9KX1lbHNlIGlmKHQgaW4gbil7dmFyIGw9blt0XTtpW29dPUYobCxmdW5jdGlvbih0LGUpe3JldHVybiBhKHQsZSx0Lmludm9rZShlLGwpKX0pfX12YXIgbz1tKHQpO3N3aXRjaCh0KXtjYXNlXCJjdWxsLmVuYWJsZVwiOmNhc2VcImJsZW5kLmVuYWJsZVwiOmNhc2VcImRpdGhlclwiOmNhc2VcInN0ZW5jaWwuZW5hYmxlXCI6Y2FzZVwiZGVwdGguZW5hYmxlXCI6Y2FzZVwic2Npc3Nvci5lbmFibGVcIjpjYXNlXCJwb2x5Z29uT2Zmc2V0LmVuYWJsZVwiOmNhc2VcInNhbXBsZS5hbHBoYVwiOmNhc2VcInNhbXBsZS5lbmFibGVcIjpjYXNlXCJkZXB0aC5tYXNrXCI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuIHR9LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gcn0pO2Nhc2VcImRlcHRoLmZ1bmNcIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm4ga3RbdF19LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5kZWYodC5jb25zdGFudHMuY29tcGFyZUZ1bmNzLFwiW1wiLHIsXCJdXCIpfSk7Y2FzZVwiZGVwdGgucmFuZ2VcIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm4gdH0sZnVuY3Rpb24odCxlLHIpe3JldHVybltlLmRlZihcIitcIixyLFwiWzBdXCIpLGU9ZS5kZWYoXCIrXCIscixcIlsxXVwiKV19KTtjYXNlXCJibGVuZC5mdW5jXCI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuW3d0W1wic3JjUkdCXCJpbiB0P3Quc3JjUkdCOnQuc3JjXSx3dFtcImRzdFJHQlwiaW4gdD90LmRzdFJHQjp0LmRzdF0sd3RbXCJzcmNBbHBoYVwiaW4gdD90LnNyY0FscGhhOnQuc3JjXSx3dFtcImRzdEFscGhhXCJpbiB0P3QuZHN0QWxwaGE6dC5kc3RdXX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxuKXtyZXR1cm4gZS5kZWYoJ1wiJyx0LG4sJ1wiIGluICcscixcIj9cIixyLFwiLlwiLHQsbixcIjpcIixyLFwiLlwiLHQpfXQ9dC5jb25zdGFudHMuYmxlbmRGdW5jczt2YXIgaT1uKFwic3JjXCIsXCJSR0JcIiksYT1uKFwiZHN0XCIsXCJSR0JcIiksbz0oaT1lLmRlZih0LFwiW1wiLGksXCJdXCIpLGUuZGVmKHQsXCJbXCIsbihcInNyY1wiLFwiQWxwaGFcIiksXCJdXCIpKTtyZXR1cm5baSxhPWUuZGVmKHQsXCJbXCIsYSxcIl1cIiksbyx0PWUuZGVmKHQsXCJbXCIsbihcImRzdFwiLFwiQWxwaGFcIiksXCJdXCIpXX0pO2Nhc2VcImJsZW5kLmVxdWF0aW9uXCI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQ/WyRbdF0sJFt0XV06XCJvYmplY3RcIj09dHlwZW9mIHQ/WyRbdC5yZ2JdLCRbdC5hbHBoYV1dOnZvaWQgMH0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuY29uc3RhbnRzLmJsZW5kRXF1YXRpb25zLGk9ZS5kZWYoKSxhPWUuZGVmKCk7cmV0dXJuKHQ9dC5jb25kKFwidHlwZW9mIFwiLHIsJz09PVwic3RyaW5nXCInKSkudGhlbihpLFwiPVwiLGEsXCI9XCIsbixcIltcIixyLFwiXTtcIiksdC5lbHNlKGksXCI9XCIsbixcIltcIixyLFwiLnJnYl07XCIsYSxcIj1cIixuLFwiW1wiLHIsXCIuYWxwaGFdO1wiKSxlKHQpLFtpLGFdfSk7Y2FzZVwiYmxlbmQuY29sb3JcIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm4gYSg0LGZ1bmN0aW9uKGUpe3JldHVybit0W2VdfSl9LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gYSg0LGZ1bmN0aW9uKHQpe3JldHVybiBlLmRlZihcIitcIixyLFwiW1wiLHQsXCJdXCIpfSl9KTtjYXNlXCJzdGVuY2lsLm1hc2tcIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm4gMHx0fSxmdW5jdGlvbih0LGUscil7cmV0dXJuIGUuZGVmKHIsXCJ8MFwiKX0pO2Nhc2VcInN0ZW5jaWwuZnVuY1wiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVybltrdFt0LmNtcHx8XCJrZWVwXCJdLHQucmVmfHwwLFwibWFza1wiaW4gdD90Lm1hc2s6LTFdfSxmdW5jdGlvbih0LGUscil7cmV0dXJuW3Q9ZS5kZWYoJ1wiY21wXCIgaW4gJyxyLFwiP1wiLHQuY29uc3RhbnRzLmNvbXBhcmVGdW5jcyxcIltcIixyLFwiLmNtcF1cIixcIjpcIiw3NjgwKSxlLmRlZihyLFwiLnJlZnwwXCIpLGU9ZS5kZWYoJ1wibWFza1wiIGluICcscixcIj9cIixyLFwiLm1hc2t8MDotMVwiKV19KTtjYXNlXCJzdGVuY2lsLm9wRnJvbnRcIjpjYXNlXCJzdGVuY2lsLm9wQmFja1wiOnJldHVybiBlKGZ1bmN0aW9uKGUpe3JldHVybltcInN0ZW5jaWwub3BCYWNrXCI9PT10PzEwMjk6MTAyOCxBdFtlLmZhaWx8fFwia2VlcFwiXSxBdFtlLnpmYWlsfHxcImtlZXBcIl0sQXRbZS56cGFzc3x8XCJrZWVwXCJdXX0sZnVuY3Rpb24oZSxyLG4pe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHIuZGVmKCdcIicsdCwnXCIgaW4gJyxuLFwiP1wiLGEsXCJbXCIsbixcIi5cIix0LFwiXTpcIiw3NjgwKX12YXIgYT1lLmNvbnN0YW50cy5zdGVuY2lsT3BzO3JldHVybltcInN0ZW5jaWwub3BCYWNrXCI9PT10PzEwMjk6MTAyOCxpKFwiZmFpbFwiKSxpKFwiemZhaWxcIiksaShcInpwYXNzXCIpXX0pO2Nhc2VcInBvbHlnb25PZmZzZXQub2Zmc2V0XCI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuWzB8dC5mYWN0b3IsMHx0LnVuaXRzXX0sZnVuY3Rpb24odCxlLHIpe3JldHVybltlLmRlZihyLFwiLmZhY3RvcnwwXCIpLGU9ZS5kZWYocixcIi51bml0c3wwXCIpXX0pO2Nhc2VcImN1bGwuZmFjZVwiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3ZhciBlPTA7cmV0dXJuXCJmcm9udFwiPT09dD9lPTEwMjg6XCJiYWNrXCI9PT10JiYoZT0xMDI5KSxlfSxmdW5jdGlvbih0LGUscil7cmV0dXJuIGUuZGVmKHIsJz09PVwiZnJvbnRcIj8nLDEwMjgsXCI6XCIsMTAyOSl9KTtjYXNlXCJsaW5lV2lkdGhcIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm4gdH0sZnVuY3Rpb24odCxlLHIpe3JldHVybiByfSk7Y2FzZVwiZnJvbnRGYWNlXCI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuIFR0W3RdfSxmdW5jdGlvbih0LGUscil7cmV0dXJuIGUuZGVmKHIrJz09PVwiY3dcIj8yMzA0OjIzMDUnKX0pO2Nhc2VcImNvbG9yTWFza1wiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4hIXR9KX0sZnVuY3Rpb24odCxlLHIpe3JldHVybiBhKDQsZnVuY3Rpb24odCl7cmV0dXJuXCIhIVwiK3IrXCJbXCIrdCtcIl1cIn0pfSk7Y2FzZVwic2FtcGxlLmNvdmVyYWdlXCI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuW1widmFsdWVcImluIHQ/dC52YWx1ZToxLCEhdC5pbnZlcnRdfSxmdW5jdGlvbih0LGUscil7cmV0dXJuW2UuZGVmKCdcInZhbHVlXCIgaW4gJyxyLFwiPytcIixyLFwiLnZhbHVlOjFcIiksZT1lLmRlZihcIiEhXCIscixcIi5pbnZlcnRcIildfSl9fSksaX0odCksdT13KHQpLGg9cy52aWV3cG9ydDtyZXR1cm4gaCYmKGMudmlld3BvcnQ9aCksKHM9c1toPW0oXCJzY2lzc29yLmJveFwiKV0pJiYoY1toXT1zKSwobz17ZnJhbWVidWZmZXI6byxkcmF3Omwsc2hhZGVyOnUsc3RhdGU6YyxkaXJ0eTpzPTA8T2JqZWN0LmtleXMoYykubGVuZ3RofSkucHJvZmlsZT1mdW5jdGlvbih0KXt2YXIgZSxyPXQuc3RhdGljO2lmKHQ9dC5keW5hbWljLFwicHJvZmlsZVwiaW4gcil7dmFyIG49ISFyLnByb2ZpbGU7KGU9UihmdW5jdGlvbih0LGUpe3JldHVybiBufSkpLmVuYWJsZT1ufWVsc2UgaWYoXCJwcm9maWxlXCJpbiB0KXt2YXIgaT10LnByb2ZpbGU7ZT1GKGksZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbnZva2UoZSxpKX0pfXJldHVybiBlfSh0KSxvLnVuaWZvcm1zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGF0aWMsbj10LmR5bmFtaWMsaT17fTtyZXR1cm4gT2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZSxuPXJbdF07aWYoXCJudW1iZXJcIj09dHlwZW9mIG58fFwiYm9vbGVhblwiPT10eXBlb2YgbillPVIoZnVuY3Rpb24oKXtyZXR1cm4gbn0pO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygbil7dmFyIG89bi5fcmVnbFR5cGU7XCJ0ZXh0dXJlMmRcIj09PW98fFwidGV4dHVyZUN1YmVcIj09PW8/ZT1SKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxpbmsobil9KTpcImZyYW1lYnVmZmVyXCIhPT1vJiZcImZyYW1lYnVmZmVyQ3ViZVwiIT09b3x8KGU9UihmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5rKG4uY29sb3JbMF0pfSkpfWVsc2UgdihuKSYmKGU9UihmdW5jdGlvbih0KXtyZXR1cm4gdC5nbG9iYWwuZGVmKFwiW1wiLGEobi5sZW5ndGgsZnVuY3Rpb24odCl7cmV0dXJuIG5bdF19KSxcIl1cIil9KSk7ZS52YWx1ZT1uLGlbdF09ZX0pLE9iamVjdC5rZXlzKG4pLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9blt0XTtpW3RdPUYoZSxmdW5jdGlvbih0LHIpe3JldHVybiB0Lmludm9rZShyLGUpfSl9KSxpfShyKSxvLmF0dHJpYnV0ZXM9QShlKSxvLmNvbnRleHQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5zdGF0aWMscj10LmR5bmFtaWMsbj17fTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcj1lW3RdO25bdF09UihmdW5jdGlvbih0LGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiByfHxcImJvb2xlYW5cIj09dHlwZW9mIHI/XCJcIityOnQubGluayhyKX0pfSksT2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1yW3RdO25bdF09RihlLGZ1bmN0aW9uKHQscil7cmV0dXJuIHQuaW52b2tlKHIsZSl9KX0pLG59KG4pLG99ZnVuY3Rpb24gTSh0LGUscil7dmFyIG49dC5zaGFyZWQuY29udGV4dCxpPXQuc2NvcGUoKTtPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Uuc2F2ZShuLFwiLlwiK2EpLGkobixcIi5cIixhLFwiPVwiLHJbYV0uYXBwZW5kKHQsZSksXCI7XCIpfSksZShpKX1mdW5jdGlvbiBTKHQsZSxyLG4pe3ZhciBpLGE9KHM9dC5zaGFyZWQpLmdsLG89cy5mcmFtZWJ1ZmZlcjtRJiYoaT1lLmRlZihzLmV4dGVuc2lvbnMsXCIud2ViZ2xfZHJhd19idWZmZXJzXCIpKTt2YXIgcz0obD10LmNvbnN0YW50cykuZHJhd0J1ZmZlcixsPWwuYmFja0J1ZmZlcjt0PXI/ci5hcHBlbmQodCxlKTplLmRlZihvLFwiLm5leHRcIiksbnx8ZShcImlmKFwiLHQsXCIhPT1cIixvLFwiLmN1cil7XCIpLGUoXCJpZihcIix0LFwiKXtcIixhLFwiLmJpbmRGcmFtZWJ1ZmZlcihcIiwzNjE2MCxcIixcIix0LFwiLmZyYW1lYnVmZmVyKTtcIiksUSYmZShpLFwiLmRyYXdCdWZmZXJzV0VCR0woXCIscyxcIltcIix0LFwiLmNvbG9yQXR0YWNobWVudHMubGVuZ3RoXSk7XCIpLGUoXCJ9ZWxzZXtcIixhLFwiLmJpbmRGcmFtZWJ1ZmZlcihcIiwzNjE2MCxcIixudWxsKTtcIiksUSYmZShpLFwiLmRyYXdCdWZmZXJzV0VCR0woXCIsbCxcIik7XCIpLGUoXCJ9XCIsbyxcIi5jdXI9XCIsdCxcIjtcIiksbnx8ZShcIn1cIil9ZnVuY3Rpb24gRSh0LGUscil7dmFyIG49dC5zaGFyZWQsaT1uLmdsLG89dC5jdXJyZW50LHM9dC5uZXh0LGw9bi5jdXJyZW50LGM9bi5uZXh0LHU9dC5jb25kKGwsXCIuZGlydHlcIik7bnQuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbixoO2lmKCEoKGU9bShlKSlpbiByLnN0YXRlKSlpZihlIGluIHMpe249c1tlXSxoPW9bZV07dmFyIGY9YSh0dFtlXS5sZW5ndGgsZnVuY3Rpb24odCl7cmV0dXJuIHUuZGVmKG4sXCJbXCIsdCxcIl1cIil9KTt1KHQuY29uZChmLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0K1wiIT09XCIraCtcIltcIitlK1wiXVwifSkuam9pbihcInx8XCIpKS50aGVuKGksXCIuXCIsYXRbZV0sXCIoXCIsZixcIik7XCIsZi5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gaCtcIltcIitlK1wiXT1cIit0fSkuam9pbihcIjtcIiksXCI7XCIpKX1lbHNlIG49dS5kZWYoYyxcIi5cIixlKSxmPXQuY29uZChuLFwiIT09XCIsbCxcIi5cIixlKSx1KGYpLGUgaW4gaXQ/Zih0LmNvbmQobikudGhlbihpLFwiLmVuYWJsZShcIixpdFtlXSxcIik7XCIpLmVsc2UoaSxcIi5kaXNhYmxlKFwiLGl0W2VdLFwiKTtcIiksbCxcIi5cIixlLFwiPVwiLG4sXCI7XCIpOmYoaSxcIi5cIixhdFtlXSxcIihcIixuLFwiKTtcIixsLFwiLlwiLGUsXCI9XCIsbixcIjtcIil9KSwwPT09T2JqZWN0LmtleXMoci5zdGF0ZSkubGVuZ3RoJiZ1KGwsXCIuZGlydHk9ZmFsc2U7XCIpLGUodSl9ZnVuY3Rpb24gQyh0LGUscixuKXt2YXIgaT10LnNoYXJlZCxhPXQuY3VycmVudCxvPWkuY3VycmVudCxzPWkuZ2w7SShPYmplY3Qua2V5cyhyKSkuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgbD1yW2ldO2lmKCFufHxuKGwpKXt2YXIgYz1sLmFwcGVuZCh0LGUpO2lmKGl0W2ldKXt2YXIgdT1pdFtpXTtQKGwpP2UocyxjP1wiLmVuYWJsZShcIjpcIi5kaXNhYmxlKFwiLHUsXCIpO1wiKTplKHQuY29uZChjKS50aGVuKHMsXCIuZW5hYmxlKFwiLHUsXCIpO1wiKS5lbHNlKHMsXCIuZGlzYWJsZShcIix1LFwiKTtcIikpLGUobyxcIi5cIixpLFwiPVwiLGMsXCI7XCIpfWVsc2UgaWYodihjKSl7dmFyIGg9YVtpXTtlKHMsXCIuXCIsYXRbaV0sXCIoXCIsYyxcIik7XCIsYy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gaCtcIltcIitlK1wiXT1cIit0fSkuam9pbihcIjtcIiksXCI7XCIpfWVsc2UgZShzLFwiLlwiLGF0W2ldLFwiKFwiLGMsXCIpO1wiLG8sXCIuXCIsaSxcIj1cIixjLFwiO1wiKX19KX1mdW5jdGlvbiBMKHQsZSl7SyYmKHQuaW5zdGFuY2luZz1lLmRlZih0LnNoYXJlZC5leHRlbnNpb25zLFwiLmFuZ2xlX2luc3RhbmNlZF9hcnJheXNcIikpfWZ1bmN0aW9uIEIodCxlLHIsbixpKXtmdW5jdGlvbiBhKCl7cmV0dXJuXCJ1bmRlZmluZWRcIj09dHlwZW9mIHBlcmZvcm1hbmNlP1wiRGF0ZS5ub3coKVwiOlwicGVyZm9ybWFuY2Uubm93KClcIn1mdW5jdGlvbiBvKHQpe3QoYz1lLmRlZigpLFwiPVwiLGEoKSxcIjtcIiksXCJzdHJpbmdcIj09dHlwZW9mIGk/dChmLFwiLmNvdW50Kz1cIixpLFwiO1wiKTp0KGYsXCIuY291bnQrKztcIiksZCYmKG4/dCh1PWUuZGVmKCksXCI9XCIsZyxcIi5nZXROdW1QZW5kaW5nUXVlcmllcygpO1wiKTp0KGcsXCIuYmVnaW5RdWVyeShcIixmLFwiKTtcIikpfWZ1bmN0aW9uIHModCl7dChmLFwiLmNwdVRpbWUrPVwiLGEoKSxcIi1cIixjLFwiO1wiKSxkJiYobj90KGcsXCIucHVzaFNjb3BlU3RhdHMoXCIsdSxcIixcIixnLFwiLmdldE51bVBlbmRpbmdRdWVyaWVzKCksXCIsZixcIik7XCIpOnQoZyxcIi5lbmRRdWVyeSgpO1wiKSl9ZnVuY3Rpb24gbCh0KXt2YXIgcj1lLmRlZihwLFwiLnByb2ZpbGVcIik7ZShwLFwiLnByb2ZpbGU9XCIsdCxcIjtcIiksZS5leGl0KHAsXCIucHJvZmlsZT1cIixyLFwiO1wiKX12YXIgYyx1LGg9dC5zaGFyZWQsZj10LnN0YXRzLHA9aC5jdXJyZW50LGc9aC50aW1lcjtpZihyPXIucHJvZmlsZSl7aWYoUChyKSlyZXR1cm4gdm9pZChyLmVuYWJsZT8obyhlKSxzKGUuZXhpdCksbChcInRydWVcIikpOmwoXCJmYWxzZVwiKSk7bChyPXIuYXBwZW5kKHQsZSkpfWVsc2Ugcj1lLmRlZihwLFwiLnByb2ZpbGVcIik7byhoPXQuYmxvY2soKSksZShcImlmKFwiLHIsXCIpe1wiLGgsXCJ9XCIpLHModD10LmJsb2NrKCkpLGUuZXhpdChcImlmKFwiLHIsXCIpe1wiLHQsXCJ9XCIpfWZ1bmN0aW9uIE4odCxlLHIsbixpKXtmdW5jdGlvbiBhKHIsbixpKXtmdW5jdGlvbiBhKCl7ZShcImlmKCFcIix1LFwiLmJ1ZmZlcil7XCIsbCxcIi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShcIixjLFwiKTt9XCIpO3ZhciByLGE9aS50eXBlO3I9aS5zaXplP2UuZGVmKGkuc2l6ZSxcInx8XCIsbik6bixlKFwiaWYoXCIsdSxcIi50eXBlIT09XCIsYSxcInx8XCIsdSxcIi5zaXplIT09XCIscixcInx8XCIscC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHUrXCIuXCIrdCtcIiE9PVwiK2lbdF19KS5qb2luKFwifHxcIiksXCIpe1wiLGwsXCIuYmluZEJ1ZmZlcihcIiwzNDk2MixcIixcIixoLFwiLmJ1ZmZlcik7XCIsbCxcIi52ZXJ0ZXhBdHRyaWJQb2ludGVyKFwiLFtjLHIsYSxpLm5vcm1hbGl6ZWQsaS5zdHJpZGUsaS5vZmZzZXRdLFwiKTtcIix1LFwiLnR5cGU9XCIsYSxcIjtcIix1LFwiLnNpemU9XCIscixcIjtcIixwLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdStcIi5cIit0K1wiPVwiK2lbdF0rXCI7XCJ9KS5qb2luKFwiXCIpLFwifVwiKSxLJiYoYT1pLmRpdmlzb3IsZShcImlmKFwiLHUsXCIuZGl2aXNvciE9PVwiLGEsXCIpe1wiLHQuaW5zdGFuY2luZyxcIi52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoXCIsW2MsYV0sXCIpO1wiLHUsXCIuZGl2aXNvcj1cIixhLFwiO31cIikpfWZ1bmN0aW9uIHMoKXtlKFwiaWYoXCIsdSxcIi5idWZmZXIpe1wiLGwsXCIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KFwiLGMsXCIpO1wiLFwifWlmKFwiLGJ0Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB1K1wiLlwiK3QrXCIhPT1cIitmW2VdfSkuam9pbihcInx8XCIpLFwiKXtcIixsLFwiLnZlcnRleEF0dHJpYjRmKFwiLGMsXCIsXCIsZixcIik7XCIsYnQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUrXCIuXCIrdCtcIj1cIitmW2VdK1wiO1wifSkuam9pbihcIlwiKSxcIn1cIil9dmFyIGw9by5nbCxjPWUuZGVmKHIsXCIubG9jYXRpb25cIiksdT1lLmRlZihvLmF0dHJpYnV0ZXMsXCJbXCIsYyxcIl1cIik7cj1pLnN0YXRlO3ZhciBoPWkuYnVmZmVyLGY9W2kueCxpLnksaS56LGkud10scD1bXCJidWZmZXJcIixcIm5vcm1hbGl6ZWRcIixcIm9mZnNldFwiLFwic3RyaWRlXCJdOzE9PT1yP2EoKToyPT09cj9zKCk6KGUoXCJpZihcIixyLFwiPT09XCIsMSxcIil7XCIpLGEoKSxlKFwifWVsc2V7XCIpLHMoKSxlKFwifVwiKSl9dmFyIG89dC5zaGFyZWQ7bi5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBvLHM9bi5uYW1lLGw9ci5hdHRyaWJ1dGVzW3NdO2lmKGwpe2lmKCFpKGwpKXJldHVybjtvPWwuYXBwZW5kKHQsZSl9ZWxzZXtpZighaShNdCkpcmV0dXJuO3ZhciBjPXQuc2NvcGVBdHRyaWIocyk7bz17fSxPYmplY3Qua2V5cyhuZXcgWikuZm9yRWFjaChmdW5jdGlvbih0KXtvW3RdPWUuZGVmKGMsXCIuXCIsdCl9KX1hKHQubGluayhuKSxmdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAzNTY2NDpjYXNlIDM1NjY3OmNhc2UgMzU2NzE6cmV0dXJuIDI7Y2FzZSAzNTY2NTpjYXNlIDM1NjY4OmNhc2UgMzU2NzI6cmV0dXJuIDM7Y2FzZSAzNTY2NjpjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cmV0dXJuIDQ7ZGVmYXVsdDpyZXR1cm4gMX19KG4uaW5mby50eXBlKSxvKX0pfWZ1bmN0aW9uIGoodCxyLG4saSxvKXtmb3IodmFyIHMsbD10LnNoYXJlZCxjPWwuZ2wsdT0wO3U8aS5sZW5ndGg7Kyt1KXt2YXIgaCxmPShnPWlbdV0pLm5hbWUscD1nLmluZm8udHlwZSxkPW4udW5pZm9ybXNbZl0sZz10LmxpbmsoZykrXCIubG9jYXRpb25cIjtpZihkKXtpZighbyhkKSljb250aW51ZTtpZihQKGQpKXtpZihmPWQudmFsdWUsMzU2Nzg9PT1wfHwzNTY4MD09PXApcihjLFwiLnVuaWZvcm0xaShcIixnLFwiLFwiLChwPXQubGluayhmLl90ZXh0dXJlfHxmLmNvbG9yWzBdLl90ZXh0dXJlKSkrXCIuYmluZCgpKTtcIiksci5leGl0KHAsXCIudW5iaW5kKCk7XCIpO2Vsc2UgaWYoMzU2NzQ9PT1wfHwzNTY3NT09PXB8fDM1Njc2PT09cClkPTIsMzU2NzU9PT1wP2Q9MzozNTY3Nj09PXAmJihkPTQpLHIoYyxcIi51bmlmb3JtTWF0cml4XCIsZCxcImZ2KFwiLGcsXCIsZmFsc2UsXCIsZj10Lmdsb2JhbC5kZWYoXCJuZXcgRmxvYXQzMkFycmF5KFtcIitBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmKStcIl0pXCIpLFwiKTtcIik7ZWxzZXtzd2l0Y2gocCl7Y2FzZSA1MTI2OnM9XCIxZlwiO2JyZWFrO2Nhc2UgMzU2NjQ6cz1cIjJmXCI7YnJlYWs7Y2FzZSAzNTY2NTpzPVwiM2ZcIjticmVhaztjYXNlIDM1NjY2OnM9XCI0ZlwiO2JyZWFrO2Nhc2UgMzU2NzA6Y2FzZSA1MTI0OnM9XCIxaVwiO2JyZWFrO2Nhc2UgMzU2NzE6Y2FzZSAzNTY2NzpzPVwiMmlcIjticmVhaztjYXNlIDM1NjcyOmNhc2UgMzU2Njg6cz1cIjNpXCI7YnJlYWs7Y2FzZSAzNTY3MzpzPVwiNGlcIjticmVhaztjYXNlIDM1NjY5OnM9XCI0aVwifXIoYyxcIi51bmlmb3JtXCIscyxcIihcIixnLFwiLFwiLHYoZik/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZik6ZixcIik7XCIpfWNvbnRpbnVlfWg9ZC5hcHBlbmQodCxyKX1lbHNle2lmKCFvKE10KSljb250aW51ZTtoPXIuZGVmKGwudW5pZm9ybXMsXCJbXCIsZS5pZChmKSxcIl1cIil9c3dpdGNoKDM1Njc4PT09cD9yKFwiaWYoXCIsaCxcIiYmXCIsaCwnLl9yZWdsVHlwZT09PVwiZnJhbWVidWZmZXJcIil7JyxoLFwiPVwiLGgsXCIuY29sb3JbMF07XCIsXCJ9XCIpOjM1NjgwPT09cCYmcihcImlmKFwiLGgsXCImJlwiLGgsJy5fcmVnbFR5cGU9PT1cImZyYW1lYnVmZmVyQ3ViZVwiKXsnLGgsXCI9XCIsaCxcIi5jb2xvclswXTtcIixcIn1cIiksZj0xLHApe2Nhc2UgMzU2Nzg6Y2FzZSAzNTY4MDpwPXIuZGVmKGgsXCIuX3RleHR1cmVcIikscihjLFwiLnVuaWZvcm0xaShcIixnLFwiLFwiLHAsXCIuYmluZCgpKTtcIiksci5leGl0KHAsXCIudW5iaW5kKCk7XCIpO2NvbnRpbnVlO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnM9XCIxaVwiO2JyZWFrO2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpzPVwiMmlcIixmPTI7YnJlYWs7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnM9XCIzaVwiLGY9MzticmVhaztjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cz1cIjRpXCIsZj00O2JyZWFrO2Nhc2UgNTEyNjpzPVwiMWZcIjticmVhaztjYXNlIDM1NjY0OnM9XCIyZlwiLGY9MjticmVhaztjYXNlIDM1NjY1OnM9XCIzZlwiLGY9MzticmVhaztjYXNlIDM1NjY2OnM9XCI0ZlwiLGY9NDticmVhaztjYXNlIDM1Njc0OnM9XCJNYXRyaXgyZnZcIjticmVhaztjYXNlIDM1Njc1OnM9XCJNYXRyaXgzZnZcIjticmVhaztjYXNlIDM1Njc2OnM9XCJNYXRyaXg0ZnZcIn1pZihyKGMsXCIudW5pZm9ybVwiLHMsXCIoXCIsZyxcIixcIiksXCJNXCI9PT1zLmNoYXJBdCgwKSl7Zz1NYXRoLnBvdyhwLTM1Njc0KzIsMik7dmFyIG09dC5nbG9iYWwuZGVmKFwibmV3IEZsb2F0MzJBcnJheShcIixnLFwiKVwiKTtyKFwiZmFsc2UsKEFycmF5LmlzQXJyYXkoXCIsaCxcIil8fFwiLGgsXCIgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpP1wiLGgsXCI6KFwiLGEoZyxmdW5jdGlvbih0KXtyZXR1cm4gbStcIltcIit0K1wiXT1cIitoK1wiW1wiK3QrXCJdXCJ9KSxcIixcIixtLFwiKVwiKX1lbHNlIHIoMTxmP2EoZixmdW5jdGlvbih0KXtyZXR1cm4gaCtcIltcIit0K1wiXVwifSk6aCk7cihcIik7XCIpfX1mdW5jdGlvbiBWKHQsZSxyLG4pe2Z1bmN0aW9uIGkoaSl7dmFyIGE9ZltpXTtyZXR1cm4gYT9hLmNvbnRleHREZXAmJm4uY29udGV4dER5bmFtaWN8fGEucHJvcERlcD9hLmFwcGVuZCh0LHIpOmEuYXBwZW5kKHQsZSk6ZS5kZWYoaCxcIi5cIixpKX1mdW5jdGlvbiBhKCl7ZnVuY3Rpb24gdCgpe3IobCxcIi5kcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShcIixbZCx2LG0sZytcIjw8KChcIittK1wiLTUxMjEpPj4xKVwiLHNdLFwiKTtcIil9ZnVuY3Rpb24gZSgpe3IobCxcIi5kcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoXCIsW2QsZyx2LHNdLFwiKTtcIil9cD95P3QoKToocihcImlmKFwiLHAsXCIpe1wiKSx0KCkscihcIn1lbHNle1wiKSxlKCkscihcIn1cIikpOmUoKX1mdW5jdGlvbiBvKCl7ZnVuY3Rpb24gdCgpe3IodStcIi5kcmF3RWxlbWVudHMoXCIrW2QsdixtLGcrXCI8PCgoXCIrbStcIi01MTIxKT4+MSlcIl0rXCIpO1wiKX1mdW5jdGlvbiBlKCl7cih1K1wiLmRyYXdBcnJheXMoXCIrW2QsZyx2XStcIik7XCIpfXA/eT90KCk6KHIoXCJpZihcIixwLFwiKXtcIiksdCgpLHIoXCJ9ZWxzZXtcIiksZSgpLHIoXCJ9XCIpKTplKCl9dmFyIHMsbCxjPXQuc2hhcmVkLHU9Yy5nbCxoPWMuZHJhdyxmPW4uZHJhdyxwPWZ1bmN0aW9uKCl7dmFyIGk9Zi5lbGVtZW50cyxhPWU7cmV0dXJuIGk/KChpLmNvbnRleHREZXAmJm4uY29udGV4dER5bmFtaWN8fGkucHJvcERlcCkmJihhPXIpLGk9aS5hcHBlbmQodCxhKSk6aT1hLmRlZihoLFwiLlwiLFwiZWxlbWVudHNcIiksaSYmYShcImlmKFwiK2krXCIpXCIrdStcIi5iaW5kQnVmZmVyKDM0OTYzLFwiK2krXCIuYnVmZmVyLmJ1ZmZlcik7XCIpLGl9KCksZD1pKFwicHJpbWl0aXZlXCIpLGc9aShcIm9mZnNldFwiKSx2PWZ1bmN0aW9uKCl7dmFyIGk9Zi5jb3VudCxhPWU7cmV0dXJuIGk/KChpLmNvbnRleHREZXAmJm4uY29udGV4dER5bmFtaWN8fGkucHJvcERlcCkmJihhPXIpLGk9aS5hcHBlbmQodCxhKSk6aT1hLmRlZihoLFwiLlwiLFwiY291bnRcIiksaX0oKTtpZihcIm51bWJlclwiPT10eXBlb2Ygdil7aWYoMD09PXYpcmV0dXJufWVsc2UgcihcImlmKFwiLHYsXCIpe1wiKSxyLmV4aXQoXCJ9XCIpO0smJihzPWkoXCJpbnN0YW5jZXNcIiksbD10Lmluc3RhbmNpbmcpO3ZhciBtPXArXCIudHlwZVwiLHk9Zi5lbGVtZW50cyYmUChmLmVsZW1lbnRzKTtLJiYoXCJudW1iZXJcIiE9dHlwZW9mIHN8fDA8PXMpP1wic3RyaW5nXCI9PXR5cGVvZiBzPyhyKFwiaWYoXCIscyxcIj4wKXtcIiksYSgpLHIoXCJ9ZWxzZSBpZihcIixzLFwiPDApe1wiKSxvKCkscihcIn1cIikpOmEoKTpvKCl9ZnVuY3Rpb24gcSh0LGUscixuLGkpe3JldHVybiBpPShlPWIoKSkucHJvYyhcImJvZHlcIixpKSxLJiYoZS5pbnN0YW5jaW5nPWkuZGVmKGUuc2hhcmVkLmV4dGVuc2lvbnMsXCIuYW5nbGVfaW5zdGFuY2VkX2FycmF5c1wiKSksdChlLGkscixuKSxlLmNvbXBpbGUoKS5ib2R5fWZ1bmN0aW9uIEgodCxlLHIsbil7TCh0LGUpLE4odCxlLHIsbi5hdHRyaWJ1dGVzLGZ1bmN0aW9uKCl7cmV0dXJuITB9KSxqKHQsZSxyLG4udW5pZm9ybXMsZnVuY3Rpb24oKXtyZXR1cm4hMH0pLFYodCxlLGUscil9ZnVuY3Rpb24gRyh0LGUscixuKXtmdW5jdGlvbiBpKCl7cmV0dXJuITB9dC5iYXRjaElkPVwiYTFcIixMKHQsZSksTih0LGUscixuLmF0dHJpYnV0ZXMsaSksaih0LGUscixuLnVuaWZvcm1zLGkpLFYodCxlLGUscil9ZnVuY3Rpb24gWSh0LGUscixuKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0LmNvbnRleHREZXAmJm98fHQucHJvcERlcH1mdW5jdGlvbiBhKHQpe3JldHVybiFpKHQpfUwodCxlKTt2YXIgbz1yLmNvbnRleHREZXAscz1lLmRlZigpLGw9ZS5kZWYoKTt0LnNoYXJlZC5wcm9wcz1sLHQuYmF0Y2hJZD1zO3ZhciBjPXQuc2NvcGUoKSx1PXQuc2NvcGUoKTtlKGMuZW50cnksXCJmb3IoXCIscyxcIj0wO1wiLHMsXCI8XCIsXCJhMVwiLFwiOysrXCIscyxcIil7XCIsbCxcIj1cIixcImEwXCIsXCJbXCIscyxcIl07XCIsdSxcIn1cIixjLmV4aXQpLHIubmVlZHNDb250ZXh0JiZNKHQsdSxyLmNvbnRleHQpLHIubmVlZHNGcmFtZWJ1ZmZlciYmUyh0LHUsci5mcmFtZWJ1ZmZlciksQyh0LHUsci5zdGF0ZSxpKSxyLnByb2ZpbGUmJmkoci5wcm9maWxlKSYmQih0LHUsciwhMSwhMCksbj8oTih0LGMscixuLmF0dHJpYnV0ZXMsYSksTih0LHUscixuLmF0dHJpYnV0ZXMsaSksaih0LGMscixuLnVuaWZvcm1zLGEpLGoodCx1LHIsbi51bmlmb3JtcyxpKSxWKHQsYyx1LHIpKTooZT10Lmdsb2JhbC5kZWYoXCJ7fVwiKSxuPXIuc2hhZGVyLnByb2dWYXIuYXBwZW5kKHQsdSksbD11LmRlZihuLFwiLmlkXCIpLGM9dS5kZWYoZSxcIltcIixsLFwiXVwiKSx1KHQuc2hhcmVkLmdsLFwiLnVzZVByb2dyYW0oXCIsbixcIi5wcm9ncmFtKTtcIixcImlmKCFcIixjLFwiKXtcIixjLFwiPVwiLGUsXCJbXCIsbCxcIl09XCIsdC5saW5rKGZ1bmN0aW9uKGUpe3JldHVybiBxKEcsdCxyLGUsMil9KSxcIihcIixuLFwiKTt9XCIsYyxcIi5jYWxsKHRoaXMsYTBbXCIscyxcIl0sXCIscyxcIik7XCIpKX1mdW5jdGlvbiBXKHQscil7ZnVuY3Rpb24gbihlKXt2YXIgbj1yLnNoYWRlcltlXTtuJiZpLnNldChhLnNoYWRlcixcIi5cIitlLG4uYXBwZW5kKHQsaSkpfXZhciBpPXQucHJvYyhcInNjb3BlXCIsMyk7dC5iYXRjaElkPVwiYTJcIjt2YXIgYT10LnNoYXJlZCxvPWEuY3VycmVudDtNKHQsaSxyLmNvbnRleHQpLHIuZnJhbWVidWZmZXImJnIuZnJhbWVidWZmZXIuYXBwZW5kKHQsaSksSShPYmplY3Qua2V5cyhyLnN0YXRlKSkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj1yLnN0YXRlW2VdLmFwcGVuZCh0LGkpO3Yobik/bi5mb3JFYWNoKGZ1bmN0aW9uKHIsbil7aS5zZXQodC5uZXh0W2VdLFwiW1wiK24rXCJdXCIscil9KTppLnNldChhLm5leHQsXCIuXCIrZSxuKX0pLEIodCxpLHIsITAsITApLFtcImVsZW1lbnRzXCIsXCJvZmZzZXRcIixcImNvdW50XCIsXCJpbnN0YW5jZXNcIixcInByaW1pdGl2ZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXIuZHJhd1tlXTtuJiZpLnNldChhLmRyYXcsXCIuXCIrZSxcIlwiK24uYXBwZW5kKHQsaSkpfSksT2JqZWN0LmtleXMoci51bmlmb3JtcykuZm9yRWFjaChmdW5jdGlvbihuKXtpLnNldChhLnVuaWZvcm1zLFwiW1wiK2UuaWQobikrXCJdXCIsci51bmlmb3Jtc1tuXS5hcHBlbmQodCxpKSl9KSxPYmplY3Qua2V5cyhyLmF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49ci5hdHRyaWJ1dGVzW2VdLmFwcGVuZCh0LGkpLGE9dC5zY29wZUF0dHJpYihlKTtPYmplY3Qua2V5cyhuZXcgWikuZm9yRWFjaChmdW5jdGlvbih0KXtpLnNldChhLFwiLlwiK3Qsblt0XSl9KX0pLG4oXCJ2ZXJ0XCIpLG4oXCJmcmFnXCIpLDA8T2JqZWN0LmtleXMoci5zdGF0ZSkubGVuZ3RoJiYoaShvLFwiLmRpcnR5PXRydWU7XCIpLGkuZXhpdChvLFwiLmRpcnR5PXRydWU7XCIpKSxpKFwiYTEoXCIsdC5zaGFyZWQuY29udGV4dCxcIixhMCxcIix0LmJhdGNoSWQsXCIpO1wiKX1mdW5jdGlvbiBYKHQsZSxyKXt2YXIgbj1lLnN0YXRpY1tyXTtpZihuJiZmdW5jdGlvbih0KXtpZihcIm9iamVjdFwiPT10eXBlb2YgdCYmIXYodCkpe2Zvcih2YXIgZT1PYmplY3Qua2V5cyh0KSxyPTA7cjxlLmxlbmd0aDsrK3IpaWYoVS5pc0R5bmFtaWModFtlW3JdXSkpcmV0dXJuITA7cmV0dXJuITF9fShuKSl7dmFyIGk9dC5nbG9iYWwsYT1PYmplY3Qua2V5cyhuKSxvPSExLHM9ITEsbD0hMSxjPXQuZ2xvYmFsLmRlZihcInt9XCIpO2EuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcj1uW2VdO2lmKFUuaXNEeW5hbWljKHIpKVwiZnVuY3Rpb25cIj09dHlwZW9mIHImJihyPW5bZV09VS51bmJveChyKSksZT1GKHIsbnVsbCksbz1vfHxlLnRoaXNEZXAsbD1sfHxlLnByb3BEZXAscz1zfHxlLmNvbnRleHREZXA7ZWxzZXtzd2l0Y2goaShjLFwiLlwiLGUsXCI9XCIpLHR5cGVvZiByKXtjYXNlXCJudW1iZXJcIjppKHIpO2JyZWFrO2Nhc2VcInN0cmluZ1wiOmkoJ1wiJyxyLCdcIicpO2JyZWFrO2Nhc2VcIm9iamVjdFwiOkFycmF5LmlzQXJyYXkocikmJmkoXCJbXCIsci5qb2luKCksXCJdXCIpO2JyZWFrO2RlZmF1bHQ6aSh0LmxpbmsocikpfWkoXCI7XCIpfX0pLGUuZHluYW1pY1tyXT1uZXcgVS5EeW5hbWljVmFyaWFibGUoNCx7dGhpc0RlcDpvLGNvbnRleHREZXA6cyxwcm9wRGVwOmwscmVmOmMsYXBwZW5kOmZ1bmN0aW9uKHQsZSl7YS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBpPW5bcl07VS5pc0R5bmFtaWMoaSkmJihpPXQuaW52b2tlKGUsaSksZShjLFwiLlwiLHIsXCI9XCIsaSxcIjtcIikpfSl9fSksZGVsZXRlIGUuc3RhdGljW3JdfX12YXIgWj11LlJlY29yZCwkPXthZGQ6MzI3NzQsc3VidHJhY3Q6MzI3NzgsXCJyZXZlcnNlIHN1YnRyYWN0XCI6MzI3Nzl9O3IuZXh0X2JsZW5kX21pbm1heCYmKCQubWluPTMyNzc1LCQubWF4PTMyNzc2KTt2YXIgSz1yLmFuZ2xlX2luc3RhbmNlZF9hcnJheXMsUT1yLndlYmdsX2RyYXdfYnVmZmVycyx0dD17ZGlydHk6ITAscHJvZmlsZTpnLnByb2ZpbGV9LGV0PXt9LG50PVtdLGl0PXt9LGF0PXt9O3koXCJkaXRoZXJcIiwzMDI0KSx5KFwiYmxlbmQuZW5hYmxlXCIsMzA0MikseChcImJsZW5kLmNvbG9yXCIsXCJibGVuZENvbG9yXCIsWzAsMCwwLDBdKSx4KFwiYmxlbmQuZXF1YXRpb25cIixcImJsZW5kRXF1YXRpb25TZXBhcmF0ZVwiLFszMjc3NCwzMjc3NF0pLHgoXCJibGVuZC5mdW5jXCIsXCJibGVuZEZ1bmNTZXBhcmF0ZVwiLFsxLDAsMSwwXSkseShcImRlcHRoLmVuYWJsZVwiLDI5MjksITApLHgoXCJkZXB0aC5mdW5jXCIsXCJkZXB0aEZ1bmNcIiw1MTMpLHgoXCJkZXB0aC5yYW5nZVwiLFwiZGVwdGhSYW5nZVwiLFswLDFdKSx4KFwiZGVwdGgubWFza1wiLFwiZGVwdGhNYXNrXCIsITApLHgoXCJjb2xvck1hc2tcIixcImNvbG9yTWFza1wiLFshMCwhMCwhMCwhMF0pLHkoXCJjdWxsLmVuYWJsZVwiLDI4ODQpLHgoXCJjdWxsLmZhY2VcIixcImN1bGxGYWNlXCIsMTAyOSkseChcImZyb250RmFjZVwiLFwiZnJvbnRGYWNlXCIsMjMwNSkseChcImxpbmVXaWR0aFwiLFwibGluZVdpZHRoXCIsMSkseShcInBvbHlnb25PZmZzZXQuZW5hYmxlXCIsMzI4MjMpLHgoXCJwb2x5Z29uT2Zmc2V0Lm9mZnNldFwiLFwicG9seWdvbk9mZnNldFwiLFswLDBdKSx5KFwic2FtcGxlLmFscGhhXCIsMzI5MjYpLHkoXCJzYW1wbGUuZW5hYmxlXCIsMzI5MjgpLHgoXCJzYW1wbGUuY292ZXJhZ2VcIixcInNhbXBsZUNvdmVyYWdlXCIsWzEsITFdKSx5KFwic3RlbmNpbC5lbmFibGVcIiwyOTYwKSx4KFwic3RlbmNpbC5tYXNrXCIsXCJzdGVuY2lsTWFza1wiLC0xKSx4KFwic3RlbmNpbC5mdW5jXCIsXCJzdGVuY2lsRnVuY1wiLFs1MTksMCwtMV0pLHgoXCJzdGVuY2lsLm9wRnJvbnRcIixcInN0ZW5jaWxPcFNlcGFyYXRlXCIsWzEwMjgsNzY4MCw3NjgwLDc2ODBdKSx4KFwic3RlbmNpbC5vcEJhY2tcIixcInN0ZW5jaWxPcFNlcGFyYXRlXCIsWzEwMjksNzY4MCw3NjgwLDc2ODBdKSx5KFwic2Npc3Nvci5lbmFibGVcIiwzMDg5KSx4KFwic2Npc3Nvci5ib3hcIixcInNjaXNzb3JcIixbMCwwLHQuZHJhd2luZ0J1ZmZlcldpZHRoLHQuZHJhd2luZ0J1ZmZlckhlaWdodF0pLHgoXCJ2aWV3cG9ydFwiLFwidmlld3BvcnRcIixbMCwwLHQuZHJhd2luZ0J1ZmZlcldpZHRoLHQuZHJhd2luZ0J1ZmZlckhlaWdodF0pO3ZhciBvdD17Z2w6dCxjb250ZXh0OnAsc3RyaW5nczplLG5leHQ6ZXQsY3VycmVudDp0dCxkcmF3OmYsZWxlbWVudHM6byxidWZmZXI6aSxzaGFkZXI6aCxhdHRyaWJ1dGVzOnUuc3RhdGUsdW5pZm9ybXM6YyxmcmFtZWJ1ZmZlcjpsLGV4dGVuc2lvbnM6cix0aW1lcjpkLGlzQnVmZmVyQXJnczpPfSxzdD17cHJpbVR5cGVzOnJ0LGNvbXBhcmVGdW5jczprdCxibGVuZEZ1bmNzOnd0LGJsZW5kRXF1YXRpb25zOiQsc3RlbmNpbE9wczpBdCxnbFR5cGVzOkosb3JpZW50YXRpb25UeXBlOlR0fTtRJiYoc3QuYmFja0J1ZmZlcj1bMTAyOV0sc3QuZHJhd0J1ZmZlcj1hKG4ubWF4RHJhd2J1ZmZlcnMsZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10P1swXTphKHQsZnVuY3Rpb24odCl7cmV0dXJuIDM2MDY0K3R9KX0pKTt2YXIgbHQ9MDtyZXR1cm57bmV4dDpldCxjdXJyZW50OnR0LHByb2NzOmZ1bmN0aW9uKCl7dmFyIHQ9YigpLGU9dC5wcm9jKFwicG9sbFwiKSxyPXQucHJvYyhcInJlZnJlc2hcIiksaT10LmJsb2NrKCk7ZShpKSxyKGkpO3ZhciBvLHM9dC5zaGFyZWQsbD1zLmdsLGM9cy5uZXh0LHU9cy5jdXJyZW50O2kodSxcIi5kaXJ0eT1mYWxzZTtcIiksUyh0LGUpLFModCxyLG51bGwsITApLEsmJihvPXQubGluayhLKSk7Zm9yKHZhciBoPTA7aDxuLm1heEF0dHJpYnV0ZXM7KytoKXt2YXIgZj1yLmRlZihzLmF0dHJpYnV0ZXMsXCJbXCIsaCxcIl1cIikscD10LmNvbmQoZixcIi5idWZmZXJcIik7cC50aGVuKGwsXCIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoXCIsaCxcIik7XCIsbCxcIi5iaW5kQnVmZmVyKFwiLDM0OTYyLFwiLFwiLGYsXCIuYnVmZmVyLmJ1ZmZlcik7XCIsbCxcIi52ZXJ0ZXhBdHRyaWJQb2ludGVyKFwiLGgsXCIsXCIsZixcIi5zaXplLFwiLGYsXCIudHlwZSxcIixmLFwiLm5vcm1hbGl6ZWQsXCIsZixcIi5zdHJpZGUsXCIsZixcIi5vZmZzZXQpO1wiKS5lbHNlKGwsXCIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KFwiLGgsXCIpO1wiLGwsXCIudmVydGV4QXR0cmliNGYoXCIsaCxcIixcIixmLFwiLngsXCIsZixcIi55LFwiLGYsXCIueixcIixmLFwiLncpO1wiLGYsXCIuYnVmZmVyPW51bGw7XCIpLHIocCksSyYmcihvLFwiLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShcIixoLFwiLFwiLGYsXCIuZGl2aXNvcik7XCIpfXJldHVybiBPYmplY3Qua2V5cyhpdCkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgYT1pdFtuXSxvPWkuZGVmKGMsXCIuXCIsbikscz10LmJsb2NrKCk7cyhcImlmKFwiLG8sXCIpe1wiLGwsXCIuZW5hYmxlKFwiLGEsXCIpfWVsc2V7XCIsbCxcIi5kaXNhYmxlKFwiLGEsXCIpfVwiLHUsXCIuXCIsbixcIj1cIixvLFwiO1wiKSxyKHMpLGUoXCJpZihcIixvLFwiIT09XCIsdSxcIi5cIixuLFwiKXtcIixzLFwifVwiKX0pLE9iamVjdC5rZXlzKGF0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBvLHMsaD1hdFtuXSxmPXR0W25dLHA9dC5ibG9jaygpO3AobCxcIi5cIixoLFwiKFwiKSx2KGYpPyhoPWYubGVuZ3RoLG89dC5nbG9iYWwuZGVmKGMsXCIuXCIsbikscz10Lmdsb2JhbC5kZWYodSxcIi5cIixuKSxwKGEoaCxmdW5jdGlvbih0KXtyZXR1cm4gbytcIltcIit0K1wiXVwifSksXCIpO1wiLGEoaCxmdW5jdGlvbih0KXtyZXR1cm4gcytcIltcIit0K1wiXT1cIitvK1wiW1wiK3QrXCJdO1wifSkuam9pbihcIlwiKSksZShcImlmKFwiLGEoaCxmdW5jdGlvbih0KXtyZXR1cm4gbytcIltcIit0K1wiXSE9PVwiK3MrXCJbXCIrdCtcIl1cIn0pLmpvaW4oXCJ8fFwiKSxcIil7XCIscCxcIn1cIikpOihvPWkuZGVmKGMsXCIuXCIsbikscz1pLmRlZih1LFwiLlwiLG4pLHAobyxcIik7XCIsdSxcIi5cIixuLFwiPVwiLG8sXCI7XCIpLGUoXCJpZihcIixvLFwiIT09XCIscyxcIil7XCIscCxcIn1cIikpLHIocCl9KSx0LmNvbXBpbGUoKX0oKSxjb21waWxlOmZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9YigpO3JldHVybiBhLnN0YXRzPWEubGluayhpKSxPYmplY3Qua2V5cyhlLnN0YXRpYykuZm9yRWFjaChmdW5jdGlvbih0KXtYKGEsZSx0KX0pLF90LmZvckVhY2goZnVuY3Rpb24oZSl7WChhLHQsZSl9KSxyPVQodCxlLHIsbiksZnVuY3Rpb24odCxlKXt2YXIgcj10LnByb2MoXCJkcmF3XCIsMSk7TCh0LHIpLE0odCxyLGUuY29udGV4dCksUyh0LHIsZS5mcmFtZWJ1ZmZlciksRSh0LHIsZSksQyh0LHIsZS5zdGF0ZSksQih0LHIsZSwhMSwhMCk7dmFyIG49ZS5zaGFkZXIucHJvZ1Zhci5hcHBlbmQodCxyKTtpZihyKHQuc2hhcmVkLmdsLFwiLnVzZVByb2dyYW0oXCIsbixcIi5wcm9ncmFtKTtcIiksZS5zaGFkZXIucHJvZ3JhbSlIKHQscixlLGUuc2hhZGVyLnByb2dyYW0pO2Vsc2V7dmFyIGk9dC5nbG9iYWwuZGVmKFwie31cIiksYT1yLmRlZihuLFwiLmlkXCIpLG89ci5kZWYoaSxcIltcIixhLFwiXVwiKTtyKHQuY29uZChvKS50aGVuKG8sXCIuY2FsbCh0aGlzLGEwKTtcIikuZWxzZShvLFwiPVwiLGksXCJbXCIsYSxcIl09XCIsdC5saW5rKGZ1bmN0aW9uKHIpe3JldHVybiBxKEgsdCxlLHIsMSl9KSxcIihcIixuLFwiKTtcIixvLFwiLmNhbGwodGhpcyxhMCk7XCIpKX0wPE9iamVjdC5rZXlzKGUuc3RhdGUpLmxlbmd0aCYmcih0LnNoYXJlZC5jdXJyZW50LFwiLmRpcnR5PXRydWU7XCIpfShhLHIpLFcoYSxyKSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIHQuY29udGV4dERlcCYmaXx8dC5wcm9wRGVwfXZhciBuPXQucHJvYyhcImJhdGNoXCIsMik7dC5iYXRjaElkPVwiMFwiLEwodCxuKTt2YXIgaT0hMSxhPSEwO09iamVjdC5rZXlzKGUuY29udGV4dCkuZm9yRWFjaChmdW5jdGlvbih0KXtpPWl8fGUuY29udGV4dFt0XS5wcm9wRGVwfSksaXx8KE0odCxuLGUuY29udGV4dCksYT0hMSk7dmFyIG89ITE7aWYoKHM9ZS5mcmFtZWJ1ZmZlcik/KHMucHJvcERlcD9pPW89ITA6cy5jb250ZXh0RGVwJiZpJiYobz0hMCksb3x8Uyh0LG4scykpOlModCxuLG51bGwpLGUuc3RhdGUudmlld3BvcnQmJmUuc3RhdGUudmlld3BvcnQucHJvcERlcCYmKGk9ITApLEUodCxuLGUpLEModCxuLGUuc3RhdGUsZnVuY3Rpb24odCl7cmV0dXJuIXIodCl9KSxlLnByb2ZpbGUmJnIoZS5wcm9maWxlKXx8Qih0LG4sZSwhMSxcImExXCIpLGUuY29udGV4dERlcD1pLGUubmVlZHNDb250ZXh0PWEsZS5uZWVkc0ZyYW1lYnVmZmVyPW8sKGE9ZS5zaGFkZXIucHJvZ1ZhcikuY29udGV4dERlcCYmaXx8YS5wcm9wRGVwKVkodCxuLGUsbnVsbCk7ZWxzZSBpZihhPWEuYXBwZW5kKHQsbiksbih0LnNoYXJlZC5nbCxcIi51c2VQcm9ncmFtKFwiLGEsXCIucHJvZ3JhbSk7XCIpLGUuc2hhZGVyLnByb2dyYW0pWSh0LG4sZSxlLnNoYWRlci5wcm9ncmFtKTtlbHNle3ZhciBzPXQuZ2xvYmFsLmRlZihcInt9XCIpLGw9KG89bi5kZWYoYSxcIi5pZFwiKSxuLmRlZihzLFwiW1wiLG8sXCJdXCIpKTtuKHQuY29uZChsKS50aGVuKGwsXCIuY2FsbCh0aGlzLGEwLGExKTtcIikuZWxzZShsLFwiPVwiLHMsXCJbXCIsbyxcIl09XCIsdC5saW5rKGZ1bmN0aW9uKHIpe3JldHVybiBxKFksdCxlLHIsMil9KSxcIihcIixhLFwiKTtcIixsLFwiLmNhbGwodGhpcyxhMCxhMSk7XCIpKX0wPE9iamVjdC5rZXlzKGUuc3RhdGUpLmxlbmd0aCYmbih0LnNoYXJlZC5jdXJyZW50LFwiLmRpcnR5PXRydWU7XCIpfShhLHIpLGEuY29tcGlsZSgpfX19ZnVuY3Rpb24gTih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKWlmKHRbcl09PT1lKXJldHVybiByO3JldHVybi0xfXZhciBqPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPU9iamVjdC5rZXlzKGUpLG49MDtuPHIubGVuZ3RoOysrbil0W3Jbbl1dPWVbcltuXV07cmV0dXJuIHR9LFY9MCxVPXtEeW5hbWljVmFyaWFibGU6dCxkZWZpbmU6ZnVuY3Rpb24ocixuKXtyZXR1cm4gbmV3IHQocixlKG4rXCJcIikpfSxpc0R5bmFtaWM6ZnVuY3Rpb24oZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmIWUuX3JlZ2xUeXBlfHxlIGluc3RhbmNlb2YgdH0sdW5ib3g6ZnVuY3Rpb24oZSxyKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP25ldyB0KDAsZSk6ZX0sYWNjZXNzb3I6ZX0scT17bmV4dDpcImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU/ZnVuY3Rpb24odCl7cmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0KX06ZnVuY3Rpb24odCl7cmV0dXJuIHNldFRpbWVvdXQodCwxNil9LGNhbmNlbDpcImZ1bmN0aW9uXCI9PXR5cGVvZiBjYW5jZWxBbmltYXRpb25GcmFtZT9mdW5jdGlvbih0KXtyZXR1cm4gY2FuY2VsQW5pbWF0aW9uRnJhbWUodCl9OmNsZWFyVGltZW91dH0sSD1cInVuZGVmaW5lZFwiIT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX06ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9LEc9cygpO0cuemVybz1zKCk7dmFyIFk9ZnVuY3Rpb24odCxlKXt2YXIgcj0xO2UuZXh0X3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJiYocj10LmdldFBhcmFtZXRlcigzNDA0NykpO3ZhciBuPTEsaT0xO2Uud2ViZ2xfZHJhd19idWZmZXJzJiYobj10LmdldFBhcmFtZXRlcigzNDg1MiksaT10LmdldFBhcmFtZXRlcigzNjA2MykpO3ZhciBhPSEhZS5vZXNfdGV4dHVyZV9mbG9hdDtpZihhKXthPXQuY3JlYXRlVGV4dHVyZSgpLHQuYmluZFRleHR1cmUoMzU1MyxhKSx0LnRleEltYWdlMkQoMzU1MywwLDY0MDgsMSwxLDAsNjQwOCw1MTI2LG51bGwpO3ZhciBvPXQuY3JlYXRlRnJhbWVidWZmZXIoKTtpZih0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxvKSx0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDY0LDM1NTMsYSwwKSx0LmJpbmRUZXh0dXJlKDM1NTMsbnVsbCksMzYwNTMhPT10LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoMzYxNjApKWE9ITE7ZWxzZXt0LnZpZXdwb3J0KDAsMCwxLDEpLHQuY2xlYXJDb2xvcigxLDAsMCwxKSx0LmNsZWFyKDE2Mzg0KTt2YXIgcz1HLmFsbG9jVHlwZSg1MTI2LDQpO3QucmVhZFBpeGVscygwLDAsMSwxLDY0MDgsNTEyNixzKSx0LmdldEVycm9yKCk/YT0hMToodC5kZWxldGVGcmFtZWJ1ZmZlcihvKSx0LmRlbGV0ZVRleHR1cmUoYSksYT0xPT09c1swXSksRy5mcmVlVHlwZShzKX19cmV0dXJuIHM9ITAsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvciYmKC9NU0lFLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpfHwvVHJpZGVudFxcLy8udGVzdChuYXZpZ2F0b3IuYXBwVmVyc2lvbil8fC9FZGdlLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKXx8KHM9dC5jcmVhdGVUZXh0dXJlKCksbz1HLmFsbG9jVHlwZSg1MTIxLDM2KSx0LmFjdGl2ZVRleHR1cmUoMzM5ODQpLHQuYmluZFRleHR1cmUoMzQwNjcscyksdC50ZXhJbWFnZTJEKDM0MDY5LDAsNjQwOCwzLDMsMCw2NDA4LDUxMjEsbyksRy5mcmVlVHlwZShvKSx0LmJpbmRUZXh0dXJlKDM0MDY3LG51bGwpLHQuZGVsZXRlVGV4dHVyZShzKSxzPSF0LmdldEVycm9yKCkpLHtjb2xvckJpdHM6W3QuZ2V0UGFyYW1ldGVyKDM0MTApLHQuZ2V0UGFyYW1ldGVyKDM0MTEpLHQuZ2V0UGFyYW1ldGVyKDM0MTIpLHQuZ2V0UGFyYW1ldGVyKDM0MTMpXSxkZXB0aEJpdHM6dC5nZXRQYXJhbWV0ZXIoMzQxNCksc3RlbmNpbEJpdHM6dC5nZXRQYXJhbWV0ZXIoMzQxNSksc3VicGl4ZWxCaXRzOnQuZ2V0UGFyYW1ldGVyKDM0MDgpLGV4dGVuc2lvbnM6T2JqZWN0LmtleXMoZSkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEhZVt0XX0pLG1heEFuaXNvdHJvcGljOnIsbWF4RHJhd2J1ZmZlcnM6bixtYXhDb2xvckF0dGFjaG1lbnRzOmkscG9pbnRTaXplRGltczp0LmdldFBhcmFtZXRlcigzMzkwMSksbGluZVdpZHRoRGltczp0LmdldFBhcmFtZXRlcigzMzkwMiksbWF4Vmlld3BvcnREaW1zOnQuZ2V0UGFyYW1ldGVyKDMzODYpLG1heENvbWJpbmVkVGV4dHVyZVVuaXRzOnQuZ2V0UGFyYW1ldGVyKDM1NjYxKSxtYXhDdWJlTWFwU2l6ZTp0LmdldFBhcmFtZXRlcigzNDA3NiksbWF4UmVuZGVyYnVmZmVyU2l6ZTp0LmdldFBhcmFtZXRlcigzNDAyNCksbWF4VGV4dHVyZVVuaXRzOnQuZ2V0UGFyYW1ldGVyKDM0OTMwKSxtYXhUZXh0dXJlU2l6ZTp0LmdldFBhcmFtZXRlcigzMzc5KSxtYXhBdHRyaWJ1dGVzOnQuZ2V0UGFyYW1ldGVyKDM0OTIxKSxtYXhWZXJ0ZXhVbmlmb3Jtczp0LmdldFBhcmFtZXRlcigzNjM0NyksbWF4VmVydGV4VGV4dHVyZVVuaXRzOnQuZ2V0UGFyYW1ldGVyKDM1NjYwKSxtYXhWYXJ5aW5nVmVjdG9yczp0LmdldFBhcmFtZXRlcigzNjM0OCksbWF4RnJhZ21lbnRVbmlmb3Jtczp0LmdldFBhcmFtZXRlcigzNjM0OSksZ2xzbDp0LmdldFBhcmFtZXRlcigzNTcyNCkscmVuZGVyZXI6dC5nZXRQYXJhbWV0ZXIoNzkzNyksdmVuZG9yOnQuZ2V0UGFyYW1ldGVyKDc5MzYpLHZlcnNpb246dC5nZXRQYXJhbWV0ZXIoNzkzOCkscmVhZEZsb2F0OmEsbnBvdFRleHR1cmVDdWJlOnN9fSxXPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgVWludDhBcnJheXx8dCBpbnN0YW5jZW9mIFVpbnQxNkFycmF5fHx0IGluc3RhbmNlb2YgVWludDMyQXJyYXl8fHQgaW5zdGFuY2VvZiBJbnQ4QXJyYXl8fHQgaW5zdGFuY2VvZiBJbnQxNkFycmF5fHx0IGluc3RhbmNlb2YgSW50MzJBcnJheXx8dCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheXx8dCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheXx8dCBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5fSxYPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KX0sWj17c2hhcGU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdO3QubGVuZ3RoO3Q9dFswXSllLnB1c2godC5sZW5ndGgpO3JldHVybiBlfSxmbGF0dGVuOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTE7aWYoZS5sZW5ndGgpZm9yKHZhciBhPTA7YTxlLmxlbmd0aDsrK2EpaSo9ZVthXTtlbHNlIGk9MDtzd2l0Y2gocj1ufHxHLmFsbG9jVHlwZShyLGkpLGUubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmZvcihuPWVbMF0sZT0wO2U8bjsrK2UpcltlXT10W2VdO2JyZWFrO2Nhc2UgMjpmb3Iobj1lWzBdLGU9ZVsxXSxhPWk9MDthPG47KythKWZvcih2YXIgbz10W2FdLHM9MDtzPGU7KytzKXJbaSsrXT1vW3NdO2JyZWFrO2Nhc2UgMzpjKHQsZVswXSxlWzFdLGVbMl0sciwwKTticmVhaztkZWZhdWx0OiFmdW5jdGlvbiB0KGUscixuLGksYSl7Zm9yKHZhciBvPTEscz1uKzE7czxyLmxlbmd0aDsrK3Mpbyo9cltzXTt2YXIgbD1yW25dO2lmKDQ9PXIubGVuZ3RoLW4pe3ZhciB1PXJbbisxXSxoPXJbbisyXTtmb3Iocj1yW24rM10scz0wO3M8bDsrK3MpYyhlW3NdLHUsaCxyLGksYSksYSs9b31lbHNlIGZvcihzPTA7czxsOysrcyl0KGVbc10scixuKzEsaSxhKSxhKz1vfSh0LGUsMCxyLDApfXJldHVybiByfX0sJD17XCJbb2JqZWN0IEludDhBcnJheV1cIjo1MTIwLFwiW29iamVjdCBJbnQxNkFycmF5XVwiOjUxMjIsXCJbb2JqZWN0IEludDMyQXJyYXldXCI6NTEyNCxcIltvYmplY3QgVWludDhBcnJheV1cIjo1MTIxLFwiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV1cIjo1MTIxLFwiW29iamVjdCBVaW50MTZBcnJheV1cIjo1MTIzLFwiW29iamVjdCBVaW50MzJBcnJheV1cIjo1MTI1LFwiW29iamVjdCBGbG9hdDMyQXJyYXldXCI6NTEyNixcIltvYmplY3QgRmxvYXQ2NEFycmF5XVwiOjUxMjEsXCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiOjUxMjF9LEo9e2ludDg6NTEyMCxpbnQxNjo1MTIyLGludDMyOjUxMjQsdWludDg6NTEyMSx1aW50MTY6NTEyMyx1aW50MzI6NTEyNSxmbG9hdDo1MTI2LGZsb2F0MzI6NTEyNn0sSz17ZHluYW1pYzozNTA0OCxzdHJlYW06MzUwNDAsc3RhdGljOjM1MDQ0fSxRPVouZmxhdHRlbix0dD1aLnNoYXBlLGV0PVtdO2V0WzUxMjBdPTEsZXRbNTEyMl09MixldFs1MTI0XT00LGV0WzUxMjFdPTEsZXRbNTEyM109MixldFs1MTI1XT00LGV0WzUxMjZdPTQ7dmFyIHJ0PXtwb2ludHM6MCxwb2ludDowLGxpbmVzOjEsbGluZToxLHRyaWFuZ2xlczo0LHRyaWFuZ2xlOjQsXCJsaW5lIGxvb3BcIjoyLFwibGluZSBzdHJpcFwiOjMsXCJ0cmlhbmdsZSBzdHJpcFwiOjUsXCJ0cmlhbmdsZSBmYW5cIjo2fSxudD1uZXcgRmxvYXQzMkFycmF5KDEpLGl0PW5ldyBVaW50MzJBcnJheShudC5idWZmZXIpLGF0PVs5OTg0LDk5ODYsOTk4NSw5OTg3XSxvdD1bMCw2NDA5LDY0MTAsNjQwNyw2NDA4XSxzdD17fTtzdFs2NDA5XT1zdFs2NDA2XT1zdFs2NDAyXT0xLHN0WzM0MDQxXT1zdFs2NDEwXT0yLHN0WzY0MDddPXN0WzM1OTA0XT0zLHN0WzY0MDhdPXN0WzM1OTA2XT00O3ZhciBsdD1tKFwiSFRNTENhbnZhc0VsZW1lbnRcIiksY3Q9bShcIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFwiKSx1dD1tKFwiSW1hZ2VCaXRtYXBcIiksaHQ9bShcIkhUTUxJbWFnZUVsZW1lbnRcIiksZnQ9bShcIkhUTUxWaWRlb0VsZW1lbnRcIikscHQ9T2JqZWN0LmtleXMoJCkuY29uY2F0KFtsdCxjdCx1dCxodCxmdF0pLGR0PVtdO2R0WzUxMjFdPTEsZHRbNTEyNl09NCxkdFszNjE5M109MixkdFs1MTIzXT0yLGR0WzUxMjVdPTQ7dmFyIGd0PVtdO2d0WzMyODU0XT0yLGd0WzMyODU1XT0yLGd0WzM2MTk0XT0yLGd0WzM0MDQxXT00LGd0WzMzNzc2XT0uNSxndFszMzc3N109LjUsZ3RbMzM3NzhdPTEsZ3RbMzM3NzldPTEsZ3RbMzU5ODZdPS41LGd0WzM1OTg3XT0xLGd0WzM0Nzk4XT0xLGd0WzM1ODQwXT0uNSxndFszNTg0MV09LjI1LGd0WzM1ODQyXT0uNSxndFszNTg0M109LjI1LGd0WzM2MTk2XT0uNTt2YXIgdnQ9W107dnRbMzI4NTRdPTIsdnRbMzI4NTVdPTIsdnRbMzYxOTRdPTIsdnRbMzMxODldPTIsdnRbMzYxNjhdPTEsdnRbMzQwNDFdPTQsdnRbMzU5MDddPTQsdnRbMzQ4MzZdPTE2LHZ0WzM0ODQyXT04LHZ0WzM0ODQzXT02O3ZhciBtdD1mdW5jdGlvbih0LGUscixuLGkpe2Z1bmN0aW9uIGEodCl7dGhpcy5pZD1jKyssdGhpcy5yZWZDb3VudD0xLHRoaXMucmVuZGVyYnVmZmVyPXQsdGhpcy5mb3JtYXQ9MzI4NTQsdGhpcy5oZWlnaHQ9dGhpcy53aWR0aD0wLGkucHJvZmlsZSYmKHRoaXMuc3RhdHM9e3NpemU6MH0pfWZ1bmN0aW9uIG8oZSl7dmFyIHI9ZS5yZW5kZXJidWZmZXI7dC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpLHQuZGVsZXRlUmVuZGVyYnVmZmVyKHIpLGUucmVuZGVyYnVmZmVyPW51bGwsZS5yZWZDb3VudD0wLGRlbGV0ZSB1W2UuaWRdLG4ucmVuZGVyYnVmZmVyQ291bnQtLX12YXIgcz17cmdiYTQ6MzI4NTQscmdiNTY1OjM2MTk0LFwicmdiNSBhMVwiOjMyODU1LGRlcHRoOjMzMTg5LHN0ZW5jaWw6MzYxNjgsXCJkZXB0aCBzdGVuY2lsXCI6MzQwNDF9O2UuZXh0X3NyZ2ImJihzLnNyZ2JhPTM1OTA3KSxlLmV4dF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCYmKHMucmdiYTE2Zj0zNDg0MixzLnJnYjE2Zj0zNDg0MyksZS53ZWJnbF9jb2xvcl9idWZmZXJfZmxvYXQmJihzLnJnYmEzMmY9MzQ4MzYpO3ZhciBsPVtdO09iamVjdC5rZXlzKHMpLmZvckVhY2goZnVuY3Rpb24odCl7bFtzW3RdXT10fSk7dmFyIGM9MCx1PXt9O3JldHVybiBhLnByb3RvdHlwZS5kZWNSZWY9ZnVuY3Rpb24oKXswPj0tLXRoaXMucmVmQ291bnQmJm8odGhpcyl9LGkucHJvZmlsZSYmKG4uZ2V0VG90YWxSZW5kZXJidWZmZXJTaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gT2JqZWN0LmtleXModSkuZm9yRWFjaChmdW5jdGlvbihlKXt0Kz11W2VdLnN0YXRzLnNpemV9KSx0fSkse2NyZWF0ZTpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG8oZSxyKXt2YXIgbj0wLGE9MCx1PTMyODU0O2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlJiZlPyhcInNoYXBlXCJpbiBlPyhuPTB8KGE9ZS5zaGFwZSlbMF0sYT0wfGFbMV0pOihcInJhZGl1c1wiaW4gZSYmKG49YT0wfGUucmFkaXVzKSxcIndpZHRoXCJpbiBlJiYobj0wfGUud2lkdGgpLFwiaGVpZ2h0XCJpbiBlJiYoYT0wfGUuaGVpZ2h0KSksXCJmb3JtYXRcImluIGUmJih1PXNbZS5mb3JtYXRdKSk6XCJudW1iZXJcIj09dHlwZW9mIGU/KG49MHxlLGE9XCJudW1iZXJcIj09dHlwZW9mIHI/MHxyOm4pOmV8fChuPWE9MSksbiE9PWMud2lkdGh8fGEhPT1jLmhlaWdodHx8dSE9PWMuZm9ybWF0KXJldHVybiBvLndpZHRoPWMud2lkdGg9bixvLmhlaWdodD1jLmhlaWdodD1hLGMuZm9ybWF0PXUsdC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLGMucmVuZGVyYnVmZmVyKSx0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsdSxuLGEpLGkucHJvZmlsZSYmKGMuc3RhdHMuc2l6ZT12dFtjLmZvcm1hdF0qYy53aWR0aCpjLmhlaWdodCksby5mb3JtYXQ9bFtjLmZvcm1hdF0sb312YXIgYz1uZXcgYSh0LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpKTtyZXR1cm4gdVtjLmlkXT1jLG4ucmVuZGVyYnVmZmVyQ291bnQrKyxvKGUsciksby5yZXNpemU9ZnVuY3Rpb24oZSxyKXt2YXIgbj0wfGUsYT0wfHJ8fG47cmV0dXJuIG49PT1jLndpZHRoJiZhPT09Yy5oZWlnaHQ/bzooby53aWR0aD1jLndpZHRoPW4sby5oZWlnaHQ9Yy5oZWlnaHQ9YSx0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsYy5yZW5kZXJidWZmZXIpLHQucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxjLmZvcm1hdCxuLGEpLGkucHJvZmlsZSYmKGMuc3RhdHMuc2l6ZT12dFtjLmZvcm1hdF0qYy53aWR0aCpjLmhlaWdodCksbyl9LG8uX3JlZ2xUeXBlPVwicmVuZGVyYnVmZmVyXCIsby5fcmVuZGVyYnVmZmVyPWMsaS5wcm9maWxlJiYoby5zdGF0cz1jLnN0YXRzKSxvLmRlc3Ryb3k9ZnVuY3Rpb24oKXtjLmRlY1JlZigpfSxvfSxjbGVhcjpmdW5jdGlvbigpe1godSkuZm9yRWFjaChvKX0scmVzdG9yZTpmdW5jdGlvbigpe1godSkuZm9yRWFjaChmdW5jdGlvbihlKXtlLnJlbmRlcmJ1ZmZlcj10LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLHQuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxlLnJlbmRlcmJ1ZmZlciksdC5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLGUuZm9ybWF0LGUud2lkdGgsZS5oZWlnaHQpfSksdC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpfX19LHl0PVtdO3l0WzY0MDhdPTQseXRbNjQwN109Mzt2YXIgeHQ9W107eHRbNTEyMV09MSx4dFs1MTI2XT00LHh0WzM2MTkzXT0yO3ZhciBidD1bXCJ4XCIsXCJ5XCIsXCJ6XCIsXCJ3XCJdLF90PVwiYmxlbmQuZnVuYyBibGVuZC5lcXVhdGlvbiBzdGVuY2lsLmZ1bmMgc3RlbmNpbC5vcEZyb250IHN0ZW5jaWwub3BCYWNrIHNhbXBsZS5jb3ZlcmFnZSB2aWV3cG9ydCBzY2lzc29yLmJveCBwb2x5Z29uT2Zmc2V0Lm9mZnNldFwiLnNwbGl0KFwiIFwiKSx3dD17MDowLDE6MSx6ZXJvOjAsb25lOjEsXCJzcmMgY29sb3JcIjo3NjgsXCJvbmUgbWludXMgc3JjIGNvbG9yXCI6NzY5LFwic3JjIGFscGhhXCI6NzcwLFwib25lIG1pbnVzIHNyYyBhbHBoYVwiOjc3MSxcImRzdCBjb2xvclwiOjc3NCxcIm9uZSBtaW51cyBkc3QgY29sb3JcIjo3NzUsXCJkc3QgYWxwaGFcIjo3NzIsXCJvbmUgbWludXMgZHN0IGFscGhhXCI6NzczLFwiY29uc3RhbnQgY29sb3JcIjozMjc2OSxcIm9uZSBtaW51cyBjb25zdGFudCBjb2xvclwiOjMyNzcwLFwiY29uc3RhbnQgYWxwaGFcIjozMjc3MSxcIm9uZSBtaW51cyBjb25zdGFudCBhbHBoYVwiOjMyNzcyLFwic3JjIGFscGhhIHNhdHVyYXRlXCI6Nzc2fSxrdD17bmV2ZXI6NTEyLGxlc3M6NTEzLFwiPFwiOjUxMyxlcXVhbDo1MTQsXCI9XCI6NTE0LFwiPT1cIjo1MTQsXCI9PT1cIjo1MTQsbGVxdWFsOjUxNSxcIjw9XCI6NTE1LGdyZWF0ZXI6NTE2LFwiPlwiOjUxNixub3RlcXVhbDo1MTcsXCIhPVwiOjUxNyxcIiE9PVwiOjUxNyxnZXF1YWw6NTE4LFwiPj1cIjo1MTgsYWx3YXlzOjUxOX0sQXQ9ezA6MCx6ZXJvOjAsa2VlcDo3NjgwLHJlcGxhY2U6NzY4MSxpbmNyZW1lbnQ6NzY4MixkZWNyZW1lbnQ6NzY4MyxcImluY3JlbWVudCB3cmFwXCI6MzQwNTUsXCJkZWNyZW1lbnQgd3JhcFwiOjM0MDU2LGludmVydDo1Mzg2fSxUdD17Y3c6MjMwNCxjY3c6MjMwNX0sTXQ9bmV3IEQoITEsITEsITEsZnVuY3Rpb24oKXt9KTtyZXR1cm4gZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe2lmKDA9PT1aLmxlbmd0aCl3JiZ3LnVwZGF0ZSgpLFE9bnVsbDtlbHNle1E9cS5uZXh0KGUpLGgoKTtmb3IodmFyIHQ9Wi5sZW5ndGgtMTswPD10Oy0tdCl7dmFyIHI9Wlt0XTtyJiZyKHosbnVsbCwwKX12LmZsdXNoKCksdyYmdy51cGRhdGUoKX19ZnVuY3Rpb24gcigpeyFRJiYwPFoubGVuZ3RoJiYoUT1xLm5leHQoZSkpfWZ1bmN0aW9uIG4oKXtRJiYocS5jYW5jZWwoZSksUT1udWxsKX1mdW5jdGlvbiBhKHQpe3QucHJldmVudERlZmF1bHQoKSxuKCksJC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QoKX0pfWZ1bmN0aW9uIG8odCl7di5nZXRFcnJvcigpLHkucmVzdG9yZSgpLFAucmVzdG9yZSgpLEkucmVzdG9yZSgpLFIucmVzdG9yZSgpLEYucmVzdG9yZSgpLFYucmVzdG9yZSgpLHcmJncucmVzdG9yZSgpLEcucHJvY3MucmVmcmVzaCgpLHIoKSxKLmZvckVhY2goZnVuY3Rpb24odCl7dCgpfSl9ZnVuY3Rpb24gcyh0KXtmdW5jdGlvbiBlKHQpe3ZhciBlPXt9LHI9e307cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIGk9dFtuXTtVLmlzRHluYW1pYyhpKT9yW25dPVUudW5ib3goaSxuKTplW25dPWl9KSx7ZHluYW1pYzpyLHN0YXRpYzplfX12YXIgcj1lKHQuY29udGV4dHx8e30pLG49ZSh0LnVuaWZvcm1zfHx7fSksaT1lKHQuYXR0cmlidXRlc3x8e30pLGE9ZShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe2lmKHQgaW4gcil7dmFyIGU9clt0XTtkZWxldGUgclt0XSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JbdCtcIi5cIituXT1lW25dfSl9fXZhciByPWooe30sdCk7cmV0dXJuIGRlbGV0ZSByLnVuaWZvcm1zLGRlbGV0ZSByLmF0dHJpYnV0ZXMsZGVsZXRlIHIuY29udGV4dCxcInN0ZW5jaWxcImluIHImJnIuc3RlbmNpbC5vcCYmKHIuc3RlbmNpbC5vcEJhY2s9ci5zdGVuY2lsLm9wRnJvbnQ9ci5zdGVuY2lsLm9wLGRlbGV0ZSByLnN0ZW5jaWwub3ApLGUoXCJibGVuZFwiKSxlKFwiZGVwdGhcIiksZShcImN1bGxcIiksZShcInN0ZW5jaWxcIiksZShcInBvbHlnb25PZmZzZXRcIiksZShcInNjaXNzb3JcIiksZShcInNhbXBsZVwiKSxyfSh0KSk7dD17Z3B1VGltZTowLGNwdVRpbWU6MCxjb3VudDowfTt2YXIgbz0ocj1HLmNvbXBpbGUoYSxpLG4scix0KSkuZHJhdyxzPXIuYmF0Y2gsbD1yLnNjb3BlLGM9W107cmV0dXJuIGooZnVuY3Rpb24odCxlKXt2YXIgcjtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KXJldHVybiBsLmNhbGwodGhpcyxudWxsLHQsMCk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZSlpZihcIm51bWJlclwiPT10eXBlb2YgdClmb3Iocj0wO3I8dDsrK3IpbC5jYWxsKHRoaXMsbnVsbCxlLHIpO2Vsc2V7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGwuY2FsbCh0aGlzLHQsZSwwKTtmb3Iocj0wO3I8dC5sZW5ndGg7KytyKWwuY2FsbCh0aGlzLHRbcl0sZSxyKX1lbHNlIGlmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXtpZigwPHQpcmV0dXJuIHMuY2FsbCh0aGlzLGZ1bmN0aW9uKHQpe2Zvcig7Yy5sZW5ndGg8dDspYy5wdXNoKG51bGwpO3JldHVybiBjfSgwfHQpLDB8dCl9ZWxzZXtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gby5jYWxsKHRoaXMsdCk7aWYodC5sZW5ndGgpcmV0dXJuIHMuY2FsbCh0aGlzLHQsdC5sZW5ndGgpfX0se3N0YXRzOnR9KX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9MDtHLnByb2NzLnBvbGwoKTt2YXIgbj1lLmNvbG9yO24mJih2LmNsZWFyQ29sb3IoK25bMF18fDAsK25bMV18fDAsK25bMl18fDAsK25bM118fDApLHJ8PTE2Mzg0KSxcImRlcHRoXCJpbiBlJiYodi5jbGVhckRlcHRoKCtlLmRlcHRoKSxyfD0yNTYpLFwic3RlbmNpbFwiaW4gZSYmKHYuY2xlYXJTdGVuY2lsKDB8ZS5zdGVuY2lsKSxyfD0xMDI0KSx2LmNsZWFyKHIpfWZ1bmN0aW9uIGModCl7cmV0dXJuIFoucHVzaCh0KSxyKCkse2NhbmNlbDpmdW5jdGlvbigpe3ZhciBlPU4oWix0KTtaW2VdPWZ1bmN0aW9uIHQoKXt2YXIgZT1OKFosdCk7WltlXT1aW1oubGVuZ3RoLTFdLC0tWi5sZW5ndGgsMD49Wi5sZW5ndGgmJm4oKX19fX1mdW5jdGlvbiB1KCl7dmFyIHQ9Vy52aWV3cG9ydCxlPVcuc2Npc3Nvcl9ib3g7dFswXT10WzFdPWVbMF09ZVsxXT0wLHoudmlld3BvcnRXaWR0aD16LmZyYW1lYnVmZmVyV2lkdGg9ei5kcmF3aW5nQnVmZmVyV2lkdGg9dFsyXT1lWzJdPXYuZHJhd2luZ0J1ZmZlcldpZHRoLHoudmlld3BvcnRIZWlnaHQ9ei5mcmFtZWJ1ZmZlckhlaWdodD16LmRyYXdpbmdCdWZmZXJIZWlnaHQ9dFszXT1lWzNdPXYuZHJhd2luZ0J1ZmZlckhlaWdodH1mdW5jdGlvbiBoKCl7ei50aWNrKz0xLHoudGltZT1nKCksdSgpLEcucHJvY3MucG9sbCgpfWZ1bmN0aW9uIGYoKXt1KCksRy5wcm9jcy5yZWZyZXNoKCksdyYmdy51cGRhdGUoKX1mdW5jdGlvbiBnKCl7cmV0dXJuKEgoKS1rKS8xZTN9aWYoISh0PWkodCkpKXJldHVybiBudWxsO3ZhciB2PXQuZ2wsbT12LmdldENvbnRleHRBdHRyaWJ1dGVzKCk7di5pc0NvbnRleHRMb3N0KCk7dmFyIHk9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKGUpe3ZhciByO2U9ZS50b0xvd2VyQ2FzZSgpO3RyeXtyPW5bZV09dC5nZXRFeHRlbnNpb24oZSl9Y2F0Y2godCl7fXJldHVybiEhcn1mb3IodmFyIG49e30saT0wO2k8ZS5leHRlbnNpb25zLmxlbmd0aDsrK2kpe3ZhciBhPWUuZXh0ZW5zaW9uc1tpXTtpZighcihhKSlyZXR1cm4gZS5vbkRlc3Ryb3koKSxlLm9uRG9uZSgnXCInK2ErJ1wiIGV4dGVuc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IFdlYkdMIGNvbnRleHQsIHRyeSB1cGdyYWRpbmcgeW91ciBzeXN0ZW0gb3IgYSBkaWZmZXJlbnQgYnJvd3NlcicpLG51bGx9cmV0dXJuIGUub3B0aW9uYWxFeHRlbnNpb25zLmZvckVhY2gocikse2V4dGVuc2lvbnM6bixyZXN0b3JlOmZ1bmN0aW9uKCl7T2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbih0KXtpZihuW3RdJiYhcih0KSl0aHJvdyBFcnJvcihcIihyZWdsKTogZXJyb3IgcmVzdG9yaW5nIGV4dGVuc2lvbiBcIit0KX0pfX19KHYsdCk7aWYoIXkpcmV0dXJuIG51bGw7dmFyIHg9ZnVuY3Rpb24oKXt2YXIgdD17XCJcIjowfSxlPVtcIlwiXTtyZXR1cm57aWQ6ZnVuY3Rpb24ocil7dmFyIG49dFtyXTtyZXR1cm4gbnx8KG49dFtyXT1lLmxlbmd0aCxlLnB1c2gociksbil9LHN0cjpmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX19fSgpLGI9e2J1ZmZlckNvdW50OjAsZWxlbWVudHNDb3VudDowLGZyYW1lYnVmZmVyQ291bnQ6MCxzaGFkZXJDb3VudDowLHRleHR1cmVDb3VudDowLGN1YmVDb3VudDowLHJlbmRlcmJ1ZmZlckNvdW50OjAsbWF4VGV4dHVyZVVuaXRzOjB9LF89eS5leHRlbnNpb25zLHc9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKCl7dGhpcy5lbmRRdWVyeUluZGV4PXRoaXMuc3RhcnRRdWVyeUluZGV4PS0xLHRoaXMuc3VtPTAsdGhpcy5zdGF0cz1udWxsfWZ1bmN0aW9uIG4odCxlLG4pe3ZhciBpPW8ucG9wKCl8fG5ldyByO2kuc3RhcnRRdWVyeUluZGV4PXQsaS5lbmRRdWVyeUluZGV4PWUsaS5zdW09MCxpLnN0YXRzPW4scy5wdXNoKGkpfWlmKCFlLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeSlyZXR1cm4gbnVsbDt2YXIgaT1bXSxhPVtdLG89W10scz1bXSxsPVtdLGM9W107cmV0dXJue2JlZ2luUXVlcnk6ZnVuY3Rpb24odCl7dmFyIHI9aS5wb3AoKXx8ZS5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuY3JlYXRlUXVlcnlFWFQoKTtlLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5iZWdpblF1ZXJ5RVhUKDM1MDA3LHIpLGEucHVzaChyKSxuKGEubGVuZ3RoLTEsYS5sZW5ndGgsdCl9LGVuZFF1ZXJ5OmZ1bmN0aW9uKCl7ZS5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuZW5kUXVlcnlFWFQoMzUwMDcpfSxwdXNoU2NvcGVTdGF0czpuLHVwZGF0ZTpmdW5jdGlvbigpe3ZhciB0LHI7aWYoMCE9PSh0PWEubGVuZ3RoKSl7Yy5sZW5ndGg9TWF0aC5tYXgoYy5sZW5ndGgsdCsxKSxsLmxlbmd0aD1NYXRoLm1heChsLmxlbmd0aCx0KzEpLGxbMF09MDt2YXIgbj1jWzBdPTA7Zm9yKHI9dD0wO3I8YS5sZW5ndGg7KytyKXt2YXIgdT1hW3JdO2UuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmdldFF1ZXJ5T2JqZWN0RVhUKHUsMzQ5MTkpPyhuKz1lLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5nZXRRdWVyeU9iamVjdEVYVCh1LDM0OTE4KSxpLnB1c2godSkpOmFbdCsrXT11LGxbcisxXT1uLGNbcisxXT10fWZvcihhLmxlbmd0aD10LHI9dD0wO3I8cy5sZW5ndGg7KytyKXt2YXIgaD0obj1zW3JdKS5zdGFydFF1ZXJ5SW5kZXg7dT1uLmVuZFF1ZXJ5SW5kZXgsbi5zdW0rPWxbdV0tbFtoXSxoPWNbaF0sKHU9Y1t1XSk9PT1oPyhuLnN0YXRzLmdwdVRpbWUrPW4uc3VtLzFlNixvLnB1c2gobikpOihuLnN0YXJ0UXVlcnlJbmRleD1oLG4uZW5kUXVlcnlJbmRleD11LHNbdCsrXT1uKX1zLmxlbmd0aD10fX0sZ2V0TnVtUGVuZGluZ1F1ZXJpZXM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5sZW5ndGh9LGNsZWFyOmZ1bmN0aW9uKCl7aS5wdXNoLmFwcGx5KGksYSk7Zm9yKHZhciB0PTA7dDxpLmxlbmd0aDt0KyspZS5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuZGVsZXRlUXVlcnlFWFQoaVt0XSk7YS5sZW5ndGg9MCxpLmxlbmd0aD0wfSxyZXN0b3JlOmZ1bmN0aW9uKCl7YS5sZW5ndGg9MCxpLmxlbmd0aD0wfX19KDAsXyksaz1IKCksQz12LmRyYXdpbmdCdWZmZXJXaWR0aCxMPXYuZHJhd2luZ0J1ZmZlckhlaWdodCx6PXt0aWNrOjAsdGltZTowLHZpZXdwb3J0V2lkdGg6Qyx2aWV3cG9ydEhlaWdodDpMLGZyYW1lYnVmZmVyV2lkdGg6QyxmcmFtZWJ1ZmZlckhlaWdodDpMLGRyYXdpbmdCdWZmZXJXaWR0aDpDLGRyYXdpbmdCdWZmZXJIZWlnaHQ6TCxwaXhlbFJhdGlvOnQucGl4ZWxSYXRpb30sTz1ZKHYsXyksST0oQz1mdW5jdGlvbih0LGUscixuKXtmb3IodD1yLm1heEF0dHJpYnV0ZXMsZT1BcnJheSh0KSxyPTA7cjx0OysrcillW3JdPW5ldyBNO3JldHVybntSZWNvcmQ6TSxzY29wZTp7fSxzdGF0ZTplfX0odixfLE8pLHAodixiLHQsQykpLEQ9ZCh2LF8sSSxiKSxQPVModix4LGIsdCksUj1BKHYsXyxPLGZ1bmN0aW9uKCl7Ry5wcm9jcy5wb2xsKCl9LHosYix0KSxGPW10KHYsXywwLGIsdCksVj1UKHYsXyxPLFIsRixiKSxHPUIodix4LF8sTyxJLEQsMCxWLHt9LEMsUCx7ZWxlbWVudHM6bnVsbCxwcmltaXRpdmU6NCxjb3VudDotMSxvZmZzZXQ6MCxpbnN0YW5jZXM6LTF9LHosdyx0KSxXPSh4PUUodixWLEcucHJvY3MucG9sbCx6KSxHLm5leHQpLFg9di5jYW52YXMsWj1bXSwkPVtdLEo9W10sSz1bdC5vbkRlc3Ryb3ldLFE9bnVsbDtYJiYoWC5hZGRFdmVudExpc3RlbmVyKFwid2ViZ2xjb250ZXh0bG9zdFwiLGEsITEpLFguYWRkRXZlbnRMaXN0ZW5lcihcIndlYmdsY29udGV4dHJlc3RvcmVkXCIsbywhMSkpO3ZhciB0dD1WLnNldEZCTz1zKHtmcmFtZWJ1ZmZlcjpVLmRlZmluZS5jYWxsKG51bGwsMSxcImZyYW1lYnVmZmVyXCIpfSk7cmV0dXJuIGYoKSxtPWoocyx7Y2xlYXI6ZnVuY3Rpb24odCl7aWYoXCJmcmFtZWJ1ZmZlclwiaW4gdClpZih0LmZyYW1lYnVmZmVyJiZcImZyYW1lYnVmZmVyQ3ViZVwiPT09dC5mcmFtZWJ1ZmZlcl9yZWdsVHlwZSlmb3IodmFyIGU9MDs2PmU7KytlKXR0KGooe2ZyYW1lYnVmZmVyOnQuZnJhbWVidWZmZXIuZmFjZXNbZV19LHQpLGwpO2Vsc2UgdHQodCxsKTtlbHNlIGwoMCx0KX0scHJvcDpVLmRlZmluZS5iaW5kKG51bGwsMSksY29udGV4dDpVLmRlZmluZS5iaW5kKG51bGwsMiksdGhpczpVLmRlZmluZS5iaW5kKG51bGwsMyksZHJhdzpzKHt9KSxidWZmZXI6ZnVuY3Rpb24odCl7cmV0dXJuIEkuY3JlYXRlKHQsMzQ5NjIsITEsITEpfSxlbGVtZW50czpmdW5jdGlvbih0KXtyZXR1cm4gRC5jcmVhdGUodCwhMSl9LHRleHR1cmU6Ui5jcmVhdGUyRCxjdWJlOlIuY3JlYXRlQ3ViZSxyZW5kZXJidWZmZXI6Ri5jcmVhdGUsZnJhbWVidWZmZXI6Vi5jcmVhdGUsZnJhbWVidWZmZXJDdWJlOlYuY3JlYXRlQ3ViZSxhdHRyaWJ1dGVzOm0sZnJhbWU6YyxvbjpmdW5jdGlvbih0LGUpe3ZhciByO3N3aXRjaCh0KXtjYXNlXCJmcmFtZVwiOnJldHVybiBjKGUpO2Nhc2VcImxvc3RcIjpyPSQ7YnJlYWs7Y2FzZVwicmVzdG9yZVwiOnI9SjticmVhaztjYXNlXCJkZXN0cm95XCI6cj1LfXJldHVybiByLnB1c2goZSkse2NhbmNlbDpmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8ci5sZW5ndGg7Kyt0KWlmKHJbdF09PT1lKXtyW3RdPXJbci5sZW5ndGgtMV0sci5wb3AoKTticmVha319fX0sbGltaXRzOk8saGFzRXh0ZW5zaW9uOmZ1bmN0aW9uKHQpe3JldHVybiAwPD1PLmV4dGVuc2lvbnMuaW5kZXhPZih0LnRvTG93ZXJDYXNlKCkpfSxyZWFkOngsZGVzdHJveTpmdW5jdGlvbigpe1oubGVuZ3RoPTAsbigpLFgmJihYLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ3ZWJnbGNvbnRleHRsb3N0XCIsYSksWC5yZW1vdmVFdmVudExpc3RlbmVyKFwid2ViZ2xjb250ZXh0cmVzdG9yZWRcIixvKSksUC5jbGVhcigpLFYuY2xlYXIoKSxGLmNsZWFyKCksUi5jbGVhcigpLEQuY2xlYXIoKSxJLmNsZWFyKCksdyYmdy5jbGVhcigpLEsuZm9yRWFjaChmdW5jdGlvbih0KXt0KCl9KX0sX2dsOnYsX3JlZnJlc2g6Zixwb2xsOmZ1bmN0aW9uKCl7aCgpLHcmJncudXBkYXRlKCl9LG5vdzpnLHN0YXRzOmJ9KSx0Lm9uRG9uZShudWxsLG0pLG19fSxcIm9iamVjdFwiPT10eXBlb2YgciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGU/ZS5leHBvcnRzPWkoKTpuLmNyZWF0ZVJFR0w9aSgpfSx7fV0sNDg4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saT1cIlwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJleHBlY3RlZCBhIHN0cmluZ1wiKTtpZigxPT09ZSlyZXR1cm4gdDtpZigyPT09ZSlyZXR1cm4gdCt0O3ZhciByPXQubGVuZ3RoKmU7aWYobiE9PXR8fFwidW5kZWZpbmVkXCI9PXR5cGVvZiBuKW49dCxpPVwiXCI7ZWxzZSBpZihpLmxlbmd0aD49cilyZXR1cm4gaS5zdWJzdHIoMCxyKTtmb3IoO3I+aS5sZW5ndGgmJmU+MTspMSZlJiYoaSs9dCksZT4+PTEsdCs9dDtyZXR1cm4gaT0oaSs9dCkuc3Vic3RyKDAscil9fSx7fV0sNDg5OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2UuZXhwb3J0cz10LnBlcmZvcm1hbmNlJiZ0LnBlcmZvcm1hbmNlLm5vdz9mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX06RGF0ZS5ub3d8fGZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfX0pLmNhbGwodGhpcyxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDQ5MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj10W3QubGVuZ3RoLTFdLG49ZSxpPWUtMjtpPj0wOy0taSl7dmFyIGE9cixvPXRbaV0scz0ocj1hK28pLWEsbD1vLXM7bCYmKHRbLS1uXT1yLHI9bCl9Zm9yKHZhciBjPTAsaT1uO2k8ZTsrK2kpe3ZhciBhPXRbaV0sbz1yLHM9KHI9YStvKS1hLGw9by1zO2wmJih0W2MrK109bCl9cmV0dXJuIHRbYysrXT1yLHQubGVuZ3RoPWMsdH19LHt9XSw0OTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwidHdvLXByb2R1Y3RcIiksaT10KFwicm9idXN0LXN1bVwiKSxhPXQoXCJyb2J1c3Qtc2NhbGVcIiksbz10KFwicm9idXN0LWNvbXByZXNzXCIpLHM9NjtmdW5jdGlvbiBsKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxuPTE7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXJbbi0xXT1uZXcgQXJyYXkodC5sZW5ndGgtMSksYT0wLG89MDthPHQubGVuZ3RoOysrYSlhIT09ZSYmKGlbbysrXT10W25dW2FdKTtyZXR1cm4gcn1mdW5jdGlvbiBjKHQpe2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bXCJzdW0ocHJvZChcIix0WzBdWzBdLFwiLFwiLHRbMV1bMV0sXCIpLHByb2QoLVwiLHRbMF1bMV0sXCIsXCIsdFsxXVswXSxcIikpXCJdLmpvaW4oXCJcIik7Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2goW1wic2NhbGUoXCIsYyhsKHQscikpLFwiLFwiLChuPXIsMSZuP1wiLVwiOlwiXCIpLHRbMF1bcl0sXCIpXCJdLmpvaW4oXCJcIikpO3JldHVybiBmdW5jdGlvbiB0KGUpe2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gZVswXTtpZigyPT09ZS5sZW5ndGgpcmV0dXJuW1wic3VtKFwiLGVbMF0sXCIsXCIsZVsxXSxcIilcIl0uam9pbihcIlwiKTt2YXIgcj1lLmxlbmd0aD4+MTtyZXR1cm5bXCJzdW0oXCIsdChlLnNsaWNlKDAscikpLFwiLFwiLHQoZS5zbGljZShyKSksXCIpXCJdLmpvaW4oXCJcIil9KGUpO3ZhciBufWZ1bmN0aW9uIHUodCl7cmV0dXJuIG5ldyBGdW5jdGlvbihcInN1bVwiLFwic2NhbGVcIixcInByb2RcIixcImNvbXByZXNzXCIsW1wiZnVuY3Rpb24gcm9idXN0RGV0ZXJtaW5hbnRcIix0LFwiKG0pe3JldHVybiBjb21wcmVzcyhcIixjKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3Ipe2Vbcl09bmV3IEFycmF5KHQpO2Zvcih2YXIgbj0wO248dDsrK24pZVtyXVtuXT1bXCJtW1wiLHIsXCJdW1wiLG4sXCJdXCJdLmpvaW4oXCJcIil9cmV0dXJuIGV9KHQpKSxcIil9O3JldHVybiByb2J1c3REZXRlcm1pbmFudFwiLHRdLmpvaW4oXCJcIikpKGksYSxuLG8pfXZhciBoPVtmdW5jdGlvbigpe3JldHVyblswXX0sZnVuY3Rpb24odCl7cmV0dXJuW3RbMF1bMF1dfV07IWZ1bmN0aW9uKCl7Zm9yKDtoLmxlbmd0aDxzOyloLnB1c2godShoLmxlbmd0aCkpO2Zvcih2YXIgdD1bXSxyPVtcImZ1bmN0aW9uIHJvYnVzdERldGVybWluYW50KG0pe3N3aXRjaChtLmxlbmd0aCl7XCJdLG49MDtuPHM7KytuKXQucHVzaChcImRldFwiK24pLHIucHVzaChcImNhc2UgXCIsbixcIjpyZXR1cm4gZGV0XCIsbixcIihtKTtcIik7ci5wdXNoKFwifXZhciBkZXQ9Q0FDSEVbbS5sZW5ndGhdO2lmKCFkZXQpZGV0PUNBQ0hFW20ubGVuZ3RoXT1nZW4obS5sZW5ndGgpO3JldHVybiBkZXQobSk7fXJldHVybiByb2J1c3REZXRlcm1pbmFudFwiKSx0LnB1c2goXCJDQUNIRVwiLFwiZ2VuXCIsci5qb2luKFwiXCIpKTt2YXIgaT1GdW5jdGlvbi5hcHBseSh2b2lkIDAsdCk7Zm9yKGUuZXhwb3J0cz1pLmFwcGx5KHZvaWQgMCxoLmNvbmNhdChbaCx1XSkpLG49MDtuPGgubGVuZ3RoOysrbillLmV4cG9ydHNbbl09aFtuXX0oKX0se1wicm9idXN0LWNvbXByZXNzXCI6NDkwLFwicm9idXN0LXNjYWxlXCI6NDk3LFwicm9idXN0LXN1bVwiOjUwMCxcInR3by1wcm9kdWN0XCI6NTI4fV0sNDkyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInR3by1wcm9kdWN0XCIpLGk9dChcInJvYnVzdC1zdW1cIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW4odFswXSxlWzBdKSxhPTE7YTx0Lmxlbmd0aDsrK2Epcj1pKHIsbih0W2FdLGVbYV0pKTtyZXR1cm4gcn19LHtcInJvYnVzdC1zdW1cIjo1MDAsXCJ0d28tcHJvZHVjdFwiOjUyOH1dLDQ5MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJ0d28tcHJvZHVjdFwiKSxpPXQoXCJyb2J1c3Qtc3VtXCIpLGE9dChcInJvYnVzdC1zdWJ0cmFjdFwiKSxvPXQoXCJyb2J1c3Qtc2NhbGVcIikscz02O2Z1bmN0aW9uIGwodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoLTEpLG49MTtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9cltuLTFdPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxhPTAsbz0wO2E8dC5sZW5ndGg7KythKWEhPT1lJiYoaVtvKytdPXRbbl1bYV0pO3JldHVybiByfWZ1bmN0aW9uIGModCl7aWYoMT09PXQubGVuZ3RoKXJldHVybiB0WzBdO2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bXCJzdW0oXCIsdFswXSxcIixcIix0WzFdLFwiKVwiXS5qb2luKFwiXCIpO3ZhciBlPXQubGVuZ3RoPj4xO3JldHVybltcInN1bShcIixjKHQuc2xpY2UoMCxlKSksXCIsXCIsYyh0LnNsaWNlKGUpKSxcIilcIl0uam9pbihcIlwiKX1mdW5jdGlvbiB1KHQsZSl7aWYoXCJtXCI9PT10LmNoYXJBdCgwKSl7aWYoXCJ3XCI9PT1lLmNoYXJBdCgwKSl7dmFyIHI9dC5zcGxpdChcIltcIik7cmV0dXJuW1wid1wiLGUuc3Vic3RyKDEpLFwibVwiLHJbMF0uc3Vic3RyKDEpXS5qb2luKFwiXCIpfXJldHVybltcInByb2QoXCIsdCxcIixcIixlLFwiKVwiXS5qb2luKFwiXCIpfXJldHVybiB1KGUsdCl9ZnVuY3Rpb24gaCh0KXtpZigyPT09dC5sZW5ndGgpcmV0dXJuW1tcImRpZmYoXCIsdSh0WzBdWzBdLHRbMV1bMV0pLFwiLFwiLHUodFsxXVswXSx0WzBdWzFdKSxcIilcIl0uam9pbihcIlwiKV07Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2goW1wic2NhbGUoXCIsYyhoKGwodCxyKSkpLFwiLFwiLChuPXIsITAmbj9cIi1cIjpcIlwiKSx0WzBdW3JdLFwiKVwiXS5qb2luKFwiXCIpKTtyZXR1cm4gZTt2YXIgbn1mdW5jdGlvbiBmKHQsZSl7Zm9yKHZhciByPVtdLG49MDtuPGUtMjsrK24pci5wdXNoKFtcInByb2QobVwiLHQsXCJbXCIsbixcIl0sbVwiLHQsXCJbXCIsbixcIl0pXCJdLmpvaW4oXCJcIikpO3JldHVybiBjKHIpfWZ1bmN0aW9uIHAodCl7Zm9yKHZhciBlPVtdLHI9W10scz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKXtlW3JdPW5ldyBBcnJheSh0KTtmb3IodmFyIG49MDtuPHQ7KytuKWVbcl1bbl09W1wibVwiLG4sXCJbXCIsdC1yLTIsXCJdXCJdLmpvaW4oXCJcIil9cmV0dXJuIGV9KHQpLHU9MDt1PHQ7Kyt1KXNbMF1bdV09XCIxXCIsc1t0LTFdW3VdPVwid1wiK3U7Zm9yKHU9MDt1PHQ7Kyt1KTA9PSgxJnUpP2UucHVzaC5hcHBseShlLGgobChzLHUpKSk6ci5wdXNoLmFwcGx5KHIsaChsKHMsdSkpKTt2YXIgcD1jKGUpLGQ9YyhyKSxnPVwiZXhhY3RJblNwaGVyZVwiK3Qsdj1bXTtmb3IodT0wO3U8dDsrK3Updi5wdXNoKFwibVwiK3UpO3ZhciBtPVtcImZ1bmN0aW9uIFwiLGcsXCIoXCIsdi5qb2luKCksXCIpe1wiXTtmb3IodT0wO3U8dDsrK3Upe20ucHVzaChcInZhciB3XCIsdSxcIj1cIixmKHUsdCksXCI7XCIpO2Zvcih2YXIgeT0wO3k8dDsrK3kpeSE9PXUmJm0ucHVzaChcInZhciB3XCIsdSxcIm1cIix5LFwiPXNjYWxlKHdcIix1LFwiLG1cIix5LFwiWzBdKTtcIil9cmV0dXJuIG0ucHVzaChcInZhciBwPVwiLHAsXCIsbj1cIixkLFwiLGQ9ZGlmZihwLG4pO3JldHVybiBkW2QubGVuZ3RoLTFdO31yZXR1cm4gXCIsZyksbmV3IEZ1bmN0aW9uKFwic3VtXCIsXCJkaWZmXCIsXCJwcm9kXCIsXCJzY2FsZVwiLG0uam9pbihcIlwiKSkoaSxhLG4sbyl9dmFyIGQ9W2Z1bmN0aW9uKCl7cmV0dXJuIDB9LGZ1bmN0aW9uKCl7cmV0dXJuIDB9LGZ1bmN0aW9uKCl7cmV0dXJuIDB9XTshZnVuY3Rpb24oKXtmb3IoO2QubGVuZ3RoPD1zOylkLnB1c2gocChkLmxlbmd0aCkpO2Zvcih2YXIgdD1bXSxyPVtcInNsb3dcIl0sbj0wO248PXM7KytuKXQucHVzaChcImFcIituKSxyLnB1c2goXCJvXCIrbik7dmFyIGk9W1wiZnVuY3Rpb24gdGVzdEluU3BoZXJlKFwiLHQuam9pbigpLFwiKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gMDtcIl07Zm9yKG49MjtuPD1zOysrbilpLnB1c2goXCJjYXNlIFwiLG4sXCI6cmV0dXJuIG9cIixuLFwiKFwiLHQuc2xpY2UoMCxuKS5qb2luKCksXCIpO1wiKTtpLnB1c2goXCJ9dmFyIHM9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8YXJndW1lbnRzLmxlbmd0aDsrK2kpe3NbaV09YXJndW1lbnRzW2ldfTtyZXR1cm4gc2xvdyhzKTt9cmV0dXJuIHRlc3RJblNwaGVyZVwiKSxyLnB1c2goaS5qb2luKFwiXCIpKTt2YXIgYT1GdW5jdGlvbi5hcHBseSh2b2lkIDAscik7Zm9yKGUuZXhwb3J0cz1hLmFwcGx5KHZvaWQgMCxbZnVuY3Rpb24odCl7dmFyIGU9ZFt0Lmxlbmd0aF07cmV0dXJuIGV8fChlPWRbdC5sZW5ndGhdPXAodC5sZW5ndGgpKSxlLmFwcGx5KHZvaWQgMCx0KX1dLmNvbmNhdChkKSksbj0wO248PXM7KytuKWUuZXhwb3J0c1tuXT1kW25dfSgpfSx7XCJyb2J1c3Qtc2NhbGVcIjo0OTcsXCJyb2J1c3Qtc3VidHJhY3RcIjo0OTksXCJyb2J1c3Qtc3VtXCI6NTAwLFwidHdvLXByb2R1Y3RcIjo1Mjh9XSw0OTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicm9idXN0LWRldGVybWluYW50XCIpLGk9NjtmdW5jdGlvbiBhKHQpe2Zvcih2YXIgZT1cInJvYnVzdExpbmVhclNvbHZlXCIrdCtcImRcIixyPVtcImZ1bmN0aW9uIFwiLGUsXCIoQSxiKXtyZXR1cm4gW1wiXSxpPTA7aTx0OysraSl7ci5wdXNoKFwiZGV0KFtcIik7Zm9yKHZhciBhPTA7YTx0OysrYSl7YT4wJiZyLnB1c2goXCIsXCIpLHIucHVzaChcIltcIik7Zm9yKHZhciBvPTA7bzx0OysrbylvPjAmJnIucHVzaChcIixcIiksbz09PWk/ci5wdXNoKFwiK2JbXCIsYSxcIl1cIik6ci5wdXNoKFwiK0FbXCIsYSxcIl1bXCIsbyxcIl1cIik7ci5wdXNoKFwiXVwiKX1yLnB1c2goXCJdKSxcIil9ci5wdXNoKFwiZGV0KEEpXX1yZXR1cm4gXCIsZSk7dmFyIHM9bmV3IEZ1bmN0aW9uKFwiZGV0XCIsci5qb2luKFwiXCIpKTtyZXR1cm4gcyh0PDY/blt0XTpuKX12YXIgbz1bZnVuY3Rpb24oKXtyZXR1cm5bMF19LGZ1bmN0aW9uKHQsZSl7cmV0dXJuW1tlWzBdXSxbdFswXVswXV1dfV07IWZ1bmN0aW9uKCl7Zm9yKDtvLmxlbmd0aDxpOylvLnB1c2goYShvLmxlbmd0aCkpO2Zvcih2YXIgdD1bXSxyPVtcImZ1bmN0aW9uIGRpc3BhdGNoTGluZWFyU29sdmUoQSxiKXtzd2l0Y2goQS5sZW5ndGgpe1wiXSxuPTA7bjxpOysrbil0LnB1c2goXCJzXCIrbiksci5wdXNoKFwiY2FzZSBcIixuLFwiOnJldHVybiBzXCIsbixcIihBLGIpO1wiKTtyLnB1c2goXCJ9dmFyIHM9Q0FDSEVbQS5sZW5ndGhdO2lmKCFzKXM9Q0FDSEVbQS5sZW5ndGhdPWcoQS5sZW5ndGgpO3JldHVybiBzKEEsYil9cmV0dXJuIGRpc3BhdGNoTGluZWFyU29sdmVcIiksdC5wdXNoKFwiQ0FDSEVcIixcImdcIixyLmpvaW4oXCJcIikpO3ZhciBzPUZ1bmN0aW9uLmFwcGx5KHZvaWQgMCx0KTtmb3IoZS5leHBvcnRzPXMuYXBwbHkodm9pZCAwLG8uY29uY2F0KFtvLGFdKSksbj0wO248aTsrK24pZS5leHBvcnRzW25dPW9bbl19KCl9LHtcInJvYnVzdC1kZXRlcm1pbmFudFwiOjQ5MX1dLDQ5NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJ0d28tcHJvZHVjdFwiKSxpPXQoXCJyb2J1c3Qtc3VtXCIpLGE9dChcInJvYnVzdC1zY2FsZVwiKSxvPXQoXCJyb2J1c3Qtc3VidHJhY3RcIikscz01O2Z1bmN0aW9uIGwodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoLTEpLG49MTtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9cltuLTFdPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxhPTAsbz0wO2E8dC5sZW5ndGg7KythKWEhPT1lJiYoaVtvKytdPXRbbl1bYV0pO3JldHVybiByfWZ1bmN0aW9uIGModCl7aWYoMT09PXQubGVuZ3RoKXJldHVybiB0WzBdO2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bXCJzdW0oXCIsdFswXSxcIixcIix0WzFdLFwiKVwiXS5qb2luKFwiXCIpO3ZhciBlPXQubGVuZ3RoPj4xO3JldHVybltcInN1bShcIixjKHQuc2xpY2UoMCxlKSksXCIsXCIsYyh0LnNsaWNlKGUpKSxcIilcIl0uam9pbihcIlwiKX1mdW5jdGlvbiB1KHQpe2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bW1wic3VtKHByb2QoXCIsdFswXVswXSxcIixcIix0WzFdWzFdLFwiKSxwcm9kKC1cIix0WzBdWzFdLFwiLFwiLHRbMV1bMF0sXCIpKVwiXS5qb2luKFwiXCIpXTtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaChbXCJzY2FsZShcIixjKHUobCh0LHIpKSksXCIsXCIsKG49ciwxJm4/XCItXCI6XCJcIiksdFswXVtyXSxcIilcIl0uam9pbihcIlwiKSk7cmV0dXJuIGU7dmFyIG59ZnVuY3Rpb24gaCh0KXtmb3IodmFyIGU9W10scj1bXSxzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3Ipe2Vbcl09bmV3IEFycmF5KHQpO2Zvcih2YXIgbj0wO248dDsrK24pZVtyXVtuXT1bXCJtXCIsbixcIltcIix0LXItMSxcIl1cIl0uam9pbihcIlwiKX1yZXR1cm4gZX0odCksaD1bXSxmPTA7Zjx0OysrZikwPT0oMSZmKT9lLnB1c2guYXBwbHkoZSx1KGwocyxmKSkpOnIucHVzaC5hcHBseShyLHUobChzLGYpKSksaC5wdXNoKFwibVwiK2YpO3ZhciBwPWMoZSksZD1jKHIpLGc9XCJvcmllbnRhdGlvblwiK3QrXCJFeGFjdFwiLHY9W1wiZnVuY3Rpb24gXCIsZyxcIihcIixoLmpvaW4oKSxcIil7dmFyIHA9XCIscCxcIixuPVwiLGQsXCIsZD1zdWIocCxuKTtyZXR1cm4gZFtkLmxlbmd0aC0xXTt9O3JldHVybiBcIixnXS5qb2luKFwiXCIpO3JldHVybiBuZXcgRnVuY3Rpb24oXCJzdW1cIixcInByb2RcIixcInNjYWxlXCIsXCJzdWJcIix2KShpLG4sYSxvKX12YXIgZj1oKDMpLHA9aCg0KSxkPVtmdW5jdGlvbigpe3JldHVybiAwfSxmdW5jdGlvbigpe3JldHVybiAwfSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLXRbMF19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPSh0WzFdLXJbMV0pKihlWzBdLXJbMF0pLGE9KHRbMF0tclswXSkqKGVbMV0tclsxXSksbz1pLWE7aWYoaT4wKXtpZihhPD0wKXJldHVybiBvO249aSthfWVsc2V7aWYoIShpPDApKXJldHVybiBvO2lmKGE+PTApcmV0dXJuIG87bj0tKGkrYSl9dmFyIHM9My4zMzA2NjkwNzM4NzU0NzE2ZS0xNipuO3JldHVybiBvPj1zfHxvPD0tcz9vOmYodCxlLHIpfSxmdW5jdGlvbih0LGUscixuKXt2YXIgaT10WzBdLW5bMF0sYT1lWzBdLW5bMF0sbz1yWzBdLW5bMF0scz10WzFdLW5bMV0sbD1lWzFdLW5bMV0sYz1yWzFdLW5bMV0sdT10WzJdLW5bMl0saD1lWzJdLW5bMl0sZj1yWzJdLW5bMl0sZD1hKmMsZz1vKmwsdj1vKnMsbT1pKmMseT1pKmwseD1hKnMsYj11KihkLWcpK2gqKHYtbSkrZiooeS14KSxfPTcuNzcxNTYxMTcyMzc2MTAzZS0xNiooKE1hdGguYWJzKGQpK01hdGguYWJzKGcpKSpNYXRoLmFicyh1KSsoTWF0aC5hYnModikrTWF0aC5hYnMobSkpKk1hdGguYWJzKGgpKyhNYXRoLmFicyh5KStNYXRoLmFicyh4KSkqTWF0aC5hYnMoZikpO3JldHVybiBiPl98fC1iPl8/YjpwKHQsZSxyLG4pfV07IWZ1bmN0aW9uKCl7Zm9yKDtkLmxlbmd0aDw9czspZC5wdXNoKGgoZC5sZW5ndGgpKTtmb3IodmFyIHQ9W10scj1bXCJzbG93XCJdLG49MDtuPD1zOysrbil0LnB1c2goXCJhXCIrbiksci5wdXNoKFwib1wiK24pO3ZhciBpPVtcImZ1bmN0aW9uIGdldE9yaWVudGF0aW9uKFwiLHQuam9pbigpLFwiKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gMDtcIl07Zm9yKG49MjtuPD1zOysrbilpLnB1c2goXCJjYXNlIFwiLG4sXCI6cmV0dXJuIG9cIixuLFwiKFwiLHQuc2xpY2UoMCxuKS5qb2luKCksXCIpO1wiKTtpLnB1c2goXCJ9dmFyIHM9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8YXJndW1lbnRzLmxlbmd0aDsrK2kpe3NbaV09YXJndW1lbnRzW2ldfTtyZXR1cm4gc2xvdyhzKTt9cmV0dXJuIGdldE9yaWVudGF0aW9uXCIpLHIucHVzaChpLmpvaW4oXCJcIikpO3ZhciBhPUZ1bmN0aW9uLmFwcGx5KHZvaWQgMCxyKTtmb3IoZS5leHBvcnRzPWEuYXBwbHkodm9pZCAwLFtmdW5jdGlvbih0KXt2YXIgZT1kW3QubGVuZ3RoXTtyZXR1cm4gZXx8KGU9ZFt0Lmxlbmd0aF09aCh0Lmxlbmd0aCkpLGUuYXBwbHkodm9pZCAwLHQpfV0uY29uY2F0KGQpKSxuPTA7bjw9czsrK24pZS5leHBvcnRzW25dPWRbbl19KCl9LHtcInJvYnVzdC1zY2FsZVwiOjQ5NyxcInJvYnVzdC1zdWJ0cmFjdFwiOjQ5OSxcInJvYnVzdC1zdW1cIjo1MDAsXCJ0d28tcHJvZHVjdFwiOjUyOH1dLDQ5NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJyb2J1c3Qtc3VtXCIpLGk9dChcInJvYnVzdC1zY2FsZVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZigxPT09dC5sZW5ndGgpcmV0dXJuIGkoZSx0WzBdKTtpZigxPT09ZS5sZW5ndGgpcmV0dXJuIGkodCxlWzBdKTtpZigwPT09dC5sZW5ndGh8fDA9PT1lLmxlbmd0aClyZXR1cm5bMF07dmFyIHI9WzBdO2lmKHQubGVuZ3RoPGUubGVuZ3RoKWZvcih2YXIgYT0wO2E8dC5sZW5ndGg7KythKXI9bihyLGkoZSx0W2FdKSk7ZWxzZSBmb3IodmFyIGE9MDthPGUubGVuZ3RoOysrYSlyPW4ocixpKHQsZVthXSkpO3JldHVybiByfX0se1wicm9idXN0LXNjYWxlXCI6NDk3LFwicm9idXN0LXN1bVwiOjUwMH1dLDQ5NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJ0d28tcHJvZHVjdFwiKSxpPXQoXCJ0d28tc3VtXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoO2lmKDE9PT1yKXt2YXIgYT1uKHRbMF0sZSk7cmV0dXJuIGFbMF0/YTpbYVsxXV19dmFyIG89bmV3IEFycmF5KDIqcikscz1bLjEsLjFdLGw9Wy4xLC4xXSxjPTA7bih0WzBdLGUscyksc1swXSYmKG9bYysrXT1zWzBdKTtmb3IodmFyIHU9MTt1PHI7Kyt1KXtuKHRbdV0sZSxsKTt2YXIgaD1zWzFdO2koaCxsWzBdLHMpLHNbMF0mJihvW2MrK109c1swXSk7dmFyIGY9bFsxXSxwPXNbMV0sZD1mK3AsZz1kLWYsdj1wLWc7c1sxXT1kLHYmJihvW2MrK109dil9c1sxXSYmKG9bYysrXT1zWzFdKTswPT09YyYmKG9bYysrXT0wKTtyZXR1cm4gby5sZW5ndGg9YyxvfX0se1widHdvLXByb2R1Y3RcIjo1MjgsXCJ0d28tc3VtXCI6NTI5fV0sNDk4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPW4odCxyLGkpLG89bihlLHIsaSk7aWYoYT4wJiZvPjB8fGE8MCYmbzwwKXJldHVybiExO3ZhciBzPW4ocix0LGUpLGw9bihpLHQsZSk7aWYocz4wJiZsPjB8fHM8MCYmbDwwKXJldHVybiExO2lmKDA9PT1hJiYwPT09byYmMD09PXMmJjA9PT1sKXJldHVybiBmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9MDtpPDI7KytpKXt2YXIgYT10W2ldLG89ZVtpXSxzPU1hdGgubWluKGEsbyksbD1NYXRoLm1heChhLG8pLGM9cltpXSx1PW5baV0saD1NYXRoLm1pbihjLHUpLGY9TWF0aC5tYXgoYyx1KTtpZihmPHN8fGw8aClyZXR1cm4hMX1yZXR1cm4hMH0odCxlLHIsaSk7cmV0dXJuITB9O3ZhciBuPXQoXCJyb2J1c3Qtb3JpZW50YXRpb25cIilbM119LHtcInJvYnVzdC1vcmllbnRhdGlvblwiOjQ5NX1dLDQ5OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPTB8dC5sZW5ndGgsbj0wfGUubGVuZ3RoO2lmKDE9PT1yJiYxPT09bilyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj10K2Usbj1yLXQsaT10LShyLW4pKyhlLW4pO2lmKGkpcmV0dXJuW2kscl07cmV0dXJuW3JdfSh0WzBdLC1lWzBdKTt2YXIgaSxhLG89bmV3IEFycmF5KHIrbikscz0wLGw9MCxjPTAsdT1NYXRoLmFicyxoPXRbbF0sZj11KGgpLHA9LWVbY10sZD11KHApO2Y8ZD8oYT1oLChsKz0xKTxyJiYoaD10W2xdLGY9dShoKSkpOihhPXAsKGMrPTEpPG4mJihwPS1lW2NdLGQ9dShwKSkpO2w8ciYmZjxkfHxjPj1uPyhpPWgsKGwrPTEpPHImJihoPXRbbF0sZj11KGgpKSk6KGk9cCwoYys9MSk8biYmKHA9LWVbY10sZD11KHApKSk7dmFyIGcsdixtPWkrYSx5PW0taSx4PWEteSxiPXgsXz1tO2Zvcig7bDxyJiZjPG47KWY8ZD8oaT1oLChsKz0xKTxyJiYoaD10W2xdLGY9dShoKSkpOihpPXAsKGMrPTEpPG4mJihwPS1lW2NdLGQ9dShwKSkpLCh4PShhPWIpLSh5PShtPWkrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKGc9XyttKS0odj1nLV8pKSsobS12KSxfPWc7Zm9yKDtsPHI7KSh4PShhPWIpLSh5PShtPShpPWgpK2EpLWkpKSYmKG9bcysrXT14KSxiPV8tKChnPV8rbSktKHY9Zy1fKSkrKG0tdiksXz1nLChsKz0xKTxyJiYoaD10W2xdKTtmb3IoO2M8bjspKHg9KGE9YiktKHk9KG09KGk9cCkrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKGc9XyttKS0odj1nLV8pKSsobS12KSxfPWcsKGMrPTEpPG4mJihwPS1lW2NdKTtiJiYob1tzKytdPWIpO18mJihvW3MrK109Xyk7c3x8KG9bcysrXT0wKTtyZXR1cm4gby5sZW5ndGg9cyxvfX0se31dLDUwMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPTB8dC5sZW5ndGgsbj0wfGUubGVuZ3RoO2lmKDE9PT1yJiYxPT09bilyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj10K2Usbj1yLXQsaT10LShyLW4pKyhlLW4pO2lmKGkpcmV0dXJuW2kscl07cmV0dXJuW3JdfSh0WzBdLGVbMF0pO3ZhciBpLGEsbz1uZXcgQXJyYXkocituKSxzPTAsbD0wLGM9MCx1PU1hdGguYWJzLGg9dFtsXSxmPXUoaCkscD1lW2NdLGQ9dShwKTtmPGQ/KGE9aCwobCs9MSk8ciYmKGg9dFtsXSxmPXUoaCkpKTooYT1wLChjKz0xKTxuJiYocD1lW2NdLGQ9dShwKSkpO2w8ciYmZjxkfHxjPj1uPyhpPWgsKGwrPTEpPHImJihoPXRbbF0sZj11KGgpKSk6KGk9cCwoYys9MSk8biYmKHA9ZVtjXSxkPXUocCkpKTt2YXIgZyx2LG09aSthLHk9bS1pLHg9YS15LGI9eCxfPW07Zm9yKDtsPHImJmM8bjspZjxkPyhpPWgsKGwrPTEpPHImJihoPXRbbF0sZj11KGgpKSk6KGk9cCwoYys9MSk8biYmKHA9ZVtjXSxkPXUocCkpKSwoeD0oYT1iKS0oeT0obT1pK2EpLWkpKSYmKG9bcysrXT14KSxiPV8tKChnPV8rbSktKHY9Zy1fKSkrKG0tdiksXz1nO2Zvcig7bDxyOykoeD0oYT1iKS0oeT0obT0oaT1oKSthKS1pKSkmJihvW3MrK109eCksYj1fLSgoZz1fK20pLSh2PWctXykpKyhtLXYpLF89ZywobCs9MSk8ciYmKGg9dFtsXSk7Zm9yKDtjPG47KSh4PShhPWIpLSh5PShtPShpPXApK2EpLWkpKSYmKG9bcysrXT14KSxiPV8tKChnPV8rbSktKHY9Zy1fKSkrKG0tdiksXz1nLChjKz0xKTxuJiYocD1lW2NdKTtiJiYob1tzKytdPWIpO18mJihvW3MrK109Xyk7c3x8KG9bcysrXT0wKTtyZXR1cm4gby5sZW5ndGg9cyxvfX0se31dLDUwMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdDwwPy0xOnQ+MD8xOjB9fSx7fV0sNTAyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKG4odCkpfTt2YXIgbj10KFwiYm91bmRhcnktY2VsbHNcIiksaT10KFwicmVkdWNlLXNpbXBsaWNpYWwtY29tcGxleFwiKX0se1wiYm91bmRhcnktY2VsbHNcIjo4NixcInJlZHVjZS1zaW1wbGljaWFsLWNvbXBsZXhcIjo0ODJ9XSw1MDM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7cj1yfHwwLFwidW5kZWZpbmVkXCI9PXR5cGVvZiBzJiYocz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj0wLG49MDtuPGU7KytuKXI9MHxNYXRoLm1heChyLHRbbl0ubGVuZ3RoKTtyZXR1cm4gci0xfSh0KSk7aWYoMD09PXQubGVuZ3RofHxzPDEpcmV0dXJue2NlbGxzOltdLHZlcnRleElkczpbXSx2ZXJ0ZXhXZWlnaHRzOltdfTt2YXIgbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPWkubWFsbG9jVWludDgociksYT0wO2E8cjsrK2EpblthXT10W2FdPGV8MDtyZXR1cm4gbn0oZSwrciksYz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxvPWUqKGUrMSkvMipyfDAscz1pLm1hbGxvY1VpbnQzMigyKm8pLGw9MCxjPTA7YzxyOysrYylmb3IodmFyIHU9dFtjXSxlPXUubGVuZ3RoLGg9MDtoPGU7KytoKWZvcih2YXIgZj0wO2Y8aDsrK2Ype3ZhciBwPXVbZl0sZD11W2hdO3NbbCsrXT0wfE1hdGgubWluKHAsZCksc1tsKytdPTB8TWF0aC5tYXgocCxkKX1hKG4ocyxbbC8yfDAsMl0pKTtmb3IodmFyIGc9MixjPTI7YzxsO2MrPTIpc1tjLTJdPT09c1tjXSYmc1tjLTFdPT09c1tjKzFdfHwoc1tnKytdPXNbY10sc1tnKytdPXNbYysxXSk7cmV0dXJuIG4ocyxbZy8yfDAsMl0pfSh0LHMpLHU9ZnVuY3Rpb24odCxlLHIsYSl7Zm9yKHZhciBvPXQuZGF0YSxzPXQuc2hhcGVbMF0sbD1pLm1hbGxvY0RvdWJsZShzKSxjPTAsdT0wO3U8czsrK3Upe3ZhciBoPW9bMip1XSxmPW9bMip1KzFdO2lmKHJbaF0hPT1yW2ZdKXt2YXIgcD1lW2hdLGQ9ZVtmXTtvWzIqY109aCxvWzIqYysxXT1mLGxbYysrXT0oZC1hKS8oZC1wKX19cmV0dXJuIHQuc2hhcGVbMF09YyxuKGwsW2NdKX0oYyxlLGwsK3IpLGg9ZnVuY3Rpb24odCxlKXt2YXIgcj1pLm1hbGxvY0ludDMyKDIqZSksbj10LnNoYXBlWzBdLGE9dC5kYXRhO3JbMF09MDtmb3IodmFyIG89MCxzPTA7czxuOysrcyl7dmFyIGw9YVsyKnNdO2lmKGwhPT1vKXtmb3IoclsyKm8rMV09czsrK288bDspclsyKm9dPXMsclsyKm8rMV09cztyWzIqb109c319clsyKm8rMV09bjtmb3IoOysrbzxlOylyWzIqb109clsyKm8rMV09bjtyZXR1cm4gcn0oYywwfGUubGVuZ3RoKSxmPW8ocykodCxjLmRhdGEsaCxsKSxwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wfHQuc2hhcGVbMF0scj10LmRhdGEsbj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpbltpXT1bclsyKmldLHJbMippKzFdXTtyZXR1cm4gbn0oYyksZD1bXS5zbGljZS5jYWxsKHUuZGF0YSwwLHUuc2hhcGVbMF0pO3JldHVybiBpLmZyZWUobCksaS5mcmVlKGMuZGF0YSksaS5mcmVlKHUuZGF0YSksaS5mcmVlKGgpLHtjZWxsczpmLHZlcnRleElkczpwLHZlcnRleFdlaWdodHM6ZH19O3ZhciBuPXQoXCJuZGFycmF5XCIpLGk9dChcInR5cGVkYXJyYXktcG9vbFwiKSxhPXQoXCJuZGFycmF5LXNvcnRcIiksbz10KFwiLi9saWIvY29kZWdlblwiKX0se1wiLi9saWIvY29kZWdlblwiOjUwNCxuZGFycmF5OjQ0MyxcIm5kYXJyYXktc29ydFwiOjQ0MSxcInR5cGVkYXJyYXktcG9vbFwiOjUzMH1dLDUwNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1hW3RdO2V8fChlPWFbdF09ZnVuY3Rpb24odCl7dmFyIGU9MCxyPW5ldyBBcnJheSh0KzEpO3JbMF09W1tdXTtmb3IodmFyIGE9MTthPD10OysrYSlmb3IodmFyIG89clthXT1pKGEpLHM9MDtzPG8ubGVuZ3RoOysrcyllPU1hdGgubWF4KGUsb1thXS5sZW5ndGgpO3ZhciBsPVtcImZ1bmN0aW9uIEIoQyxFLGksail7XCIsXCJ2YXIgYT1NYXRoLm1pbihpLGopfDAsYj1NYXRoLm1heChpLGopfDAsbD1DWzIqYV0saD1DWzIqYSsxXTtcIixcIndoaWxlKGw8aCl7XCIsXCJ2YXIgbT0obCtoKT4+MSx2PUVbMiptKzFdO1wiLFwiaWYodj09PWIpe3JldHVybiBtfVwiLFwiaWYoYjx2KXtoPW19ZWxzZXtsPW0rMX1cIixcIn1cIixcInJldHVybiBsO1wiLFwifTtcIixcImZ1bmN0aW9uIGdldENvbnRvdXJcIix0LFwiZChGLEUsQyxTKXtcIixcInZhciBuPUYubGVuZ3RoLFI9W107XCIsXCJmb3IodmFyIGk9MDtpPG47KytpKXt2YXIgYz1GW2ldLGw9Yy5sZW5ndGg7XCJdO2Z1bmN0aW9uIGModCl7aWYoISh0Lmxlbmd0aDw9MCkpe2wucHVzaChcIlIucHVzaChcIik7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDsrK2Upe3ZhciByPXRbZV07ZT4wJiZsLnB1c2goXCIsXCIpLGwucHVzaChcIltcIik7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24pe3ZhciBpPXJbbl07bj4wJiZsLnB1c2goXCIsXCIpLGwucHVzaChcIkIoQyxFLGNbXCIsaVswXSxcIl0sY1tcIixpWzFdLFwiXSlcIil9bC5wdXNoKFwiXVwiKX1sLnB1c2goXCIpO1wiKX19Zm9yKHZhciBhPXQrMTthPjE7LS1hKXthPHQrMSYmbC5wdXNoKFwiZWxzZSBcIiksbC5wdXNoKFwiaWYobD09PVwiLGEsXCIpe1wiKTtmb3IodmFyIHU9W10scz0wO3M8YTsrK3MpdS5wdXNoKFwiKFNbY1tcIitzK1wiXV08PFwiK3MrXCIpXCIpO2wucHVzaChcInZhciBNPVwiLHUuam9pbihcIitcIiksXCI7aWYoTT09PTB8fE09PT1cIiwoMTw8YSktMSxcIil7Y29udGludWV9c3dpdGNoKE0pe1wiKTtmb3IodmFyIG89clthLTFdLHM9MDtzPG8ubGVuZ3RoOysrcylsLnB1c2goXCJjYXNlIFwiLHMsXCI6XCIpLGMob1tzXSksbC5wdXNoKFwiYnJlYWs7XCIpO2wucHVzaChcIn19XCIpfXJldHVybiBsLnB1c2goXCJ9cmV0dXJuIFI7fTtyZXR1cm4gZ2V0Q29udG91clwiLHQsXCJkXCIpLG5ldyBGdW5jdGlvbihcInBvb2xcIixsLmpvaW4oXCJcIikpKG4pfSh0KSk7cmV0dXJuIGV9O3ZhciBuPXQoXCJ0eXBlZGFycmF5LXBvb2xcIiksaT10KFwibWFyY2hpbmctc2ltcGxleC10YWJsZVwiKSxhPXt9fSx7XCJtYXJjaGluZy1zaW1wbGV4LXRhYmxlXCI6NDIwLFwidHlwZWRhcnJheS1wb29sXCI6NTMwfV0sNTA1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImJpdC10d2lkZGxlXCIpLGk9dChcInVuaW9uLWZpbmRcIik7ZnVuY3Rpb24gYSh0LGUpe3ZhciByPXQubGVuZ3RoLG49dC5sZW5ndGgtZS5sZW5ndGgsaT1NYXRoLm1pbjtpZihuKXJldHVybiBuO3N3aXRjaChyKXtjYXNlIDA6cmV0dXJuIDA7Y2FzZSAxOnJldHVybiB0WzBdLWVbMF07Y2FzZSAyOnJldHVybihzPXRbMF0rdFsxXS1lWzBdLWVbMV0pfHxpKHRbMF0sdFsxXSktaShlWzBdLGVbMV0pO2Nhc2UgMzp2YXIgYT10WzBdK3RbMV0sbz1lWzBdK2VbMV07aWYocz1hK3RbMl0tKG8rZVsyXSkpcmV0dXJuIHM7dmFyIHMsbD1pKHRbMF0sdFsxXSksYz1pKGVbMF0sZVsxXSk7cmV0dXJuKHM9aShsLHRbMl0pLWkoYyxlWzJdKSl8fGkobCt0WzJdLGEpLWkoYytlWzJdLG8pO2RlZmF1bHQ6dmFyIHU9dC5zbGljZSgwKTt1LnNvcnQoKTt2YXIgaD1lLnNsaWNlKDApO2guc29ydCgpO2Zvcih2YXIgZj0wO2Y8cjsrK2YpaWYobj11W2ZdLWhbZl0pcmV0dXJuIG47cmV0dXJuIDB9fWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gYSh0WzBdLGVbMF0pfWZ1bmN0aW9uIHModCxlKXtpZihlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpbltpXT1bdFtpXSxlW2ldXTtuLnNvcnQobyk7Zm9yKGk9MDtpPHI7KytpKXRbaV09bltpXVswXSxlW2ldPW5baV1bMV07cmV0dXJuIHR9cmV0dXJuIHQuc29ydChhKSx0fWZ1bmN0aW9uIGwodCl7aWYoMD09PXQubGVuZ3RoKXJldHVybltdO2Zvcih2YXIgZT0xLHI9dC5sZW5ndGgsbj0xO248cjsrK24pe3ZhciBpPXRbbl07aWYoYShpLHRbbi0xXSkpe2lmKG49PT1lKXtlKys7Y29udGludWV9dFtlKytdPWl9fXJldHVybiB0Lmxlbmd0aD1lLHR9ZnVuY3Rpb24gYyh0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGgtMSxpPS0xO3I8PW47KXt2YXIgbz1yK24+PjEscz1hKHRbb10sZSk7czw9MD8oMD09PXMmJihpPW8pLHI9bysxKTpzPjAmJihuPW8tMSl9cmV0dXJuIGl9ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodC5sZW5ndGgpLGk9MCxvPXIubGVuZ3RoO2k8bzsrK2kpcltpXT1bXTtmb3IodmFyIHM9W10sbD0oaT0wLGUubGVuZ3RoKTtpPGw7KytpKWZvcih2YXIgdT1lW2ldLGg9dS5sZW5ndGgsZj0xLHA9MTw8aDtmPHA7KytmKXtzLmxlbmd0aD1uLnBvcENvdW50KGYpO2Zvcih2YXIgZD0wLGc9MDtnPGg7KytnKWYmMTw8ZyYmKHNbZCsrXT11W2ddKTt2YXIgdj1jKHQscyk7aWYoISh2PDApKWZvcig7clt2KytdLnB1c2goaSksISh2Pj10Lmxlbmd0aHx8MCE9PWEodFt2XSxzKSk7KTt9cmV0dXJuIHJ9ZnVuY3Rpb24gaCh0LGUpe2lmKGU8MClyZXR1cm5bXTtmb3IodmFyIHI9W10saT0oMTw8ZSsxKS0xLGE9MDthPHQubGVuZ3RoOysrYSlmb3IodmFyIG89dFthXSxsPWk7bDwxPDxvLmxlbmd0aDtsPW4ubmV4dENvbWJpbmF0aW9uKGwpKXtmb3IodmFyIGM9bmV3IEFycmF5KGUrMSksdT0wLGg9MDtoPG8ubGVuZ3RoOysraClsJjE8PGgmJihjW3UrK109b1toXSk7ci5wdXNoKGMpfXJldHVybiBzKHIpfXIuZGltZW5zaW9uPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9TWF0aC5tYXgsbj0wLGk9dC5sZW5ndGg7bjxpOysrbillPXIoZSx0W25dLmxlbmd0aCk7cmV0dXJuIGUtMX0sci5jb3VudFZlcnRpY2VzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0tMSxyPU1hdGgubWF4LG49MCxpPXQubGVuZ3RoO248aTsrK24pZm9yKHZhciBhPXRbbl0sbz0wLHM9YS5sZW5ndGg7bzxzOysrbyllPXIoZSxhW29dKTtyZXR1cm4gZSsxfSxyLmNsb25lQ2VsbHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wLG49dC5sZW5ndGg7cjxuOysrcillW3JdPXRbcl0uc2xpY2UoMCk7cmV0dXJuIGV9LHIuY29tcGFyZUNlbGxzPWEsci5ub3JtYWxpemU9cyxyLnVuaXF1ZT1sLHIuZmluZENlbGw9YyxyLmluY2lkZW5jZT11LHIuZHVhbD1mdW5jdGlvbih0LGUpe2lmKCFlKXJldHVybiB1KGwoaCh0LDApKSx0KTtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09W107bj0wO2Zvcih2YXIgaT10Lmxlbmd0aDtuPGk7KytuKWZvcih2YXIgYT10W25dLG89MCxzPWEubGVuZ3RoO288czsrK28pclthW29dXS5wdXNoKG4pO3JldHVybiByfSxyLmV4cGxvZGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sYT0wfGkubGVuZ3RoLG89MSxsPTE8PGE7bzxsOysrbyl7Zm9yKHZhciBjPVtdLHU9MDt1PGE7Kyt1KW8+Pj51JjEmJmMucHVzaChpW3VdKTtlLnB1c2goYyl9cmV0dXJuIHMoZSl9LHIuc2tlbGV0b249aCxyLmJvdW5kYXJ5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWZvcih2YXIgaT10W3JdLGE9MCxvPWkubGVuZ3RoO2E8bzsrK2Epe2Zvcih2YXIgbD1uZXcgQXJyYXkoaS5sZW5ndGgtMSksYz0wLHU9MDtjPG87KytjKWMhPT1hJiYobFt1KytdPWlbY10pO2UucHVzaChsKX1yZXR1cm4gcyhlKX0sci5jb25uZWN0ZWRDb21wb25lbnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IGkoZSksbj0wO248dC5sZW5ndGg7KytuKWZvcih2YXIgYT10W25dLG89MDtvPGEubGVuZ3RoOysrbylmb3IodmFyIHM9bysxO3M8YS5sZW5ndGg7KytzKXIubGluayhhW29dLGFbc10pO3ZhciBsPVtdLGM9ci5yYW5rcztmb3Iobj0wO248Yy5sZW5ndGg7KytuKWNbbl09LTE7Zm9yKG49MDtuPHQubGVuZ3RoOysrbil7dmFyIHU9ci5maW5kKHRbbl1bMF0pO2NbdV08MD8oY1t1XT1sLmxlbmd0aCxsLnB1c2goW3Rbbl0uc2xpY2UoMCldKSk6bFtjW3VdXS5wdXNoKHRbbl0uc2xpY2UoMCkpfXJldHVybiBsfSh0LGUpOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1sKHMoaCh0LDApKSkscj1uZXcgaShlLmxlbmd0aCksbj0wO248dC5sZW5ndGg7KytuKWZvcih2YXIgYT10W25dLG89MDtvPGEubGVuZ3RoOysrbylmb3IodmFyIHU9YyhlLFthW29dXSksZj1vKzE7ZjxhLmxlbmd0aDsrK2Ypci5saW5rKHUsYyhlLFthW2ZdXSkpO3ZhciBwPVtdLGQ9ci5yYW5rcztmb3Iobj0wO248ZC5sZW5ndGg7KytuKWRbbl09LTE7Zm9yKG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGc9ci5maW5kKGMoZSxbdFtuXVswXV0pKTtkW2ddPDA/KGRbZ109cC5sZW5ndGgscC5wdXNoKFt0W25dLnNsaWNlKDApXSkpOnBbZFtnXV0ucHVzaCh0W25dLnNsaWNlKDApKX1yZXR1cm4gcH0odCl9fSx7XCJiaXQtdHdpZGRsZVwiOjgzLFwidW5pb24tZmluZFwiOjUzMX1dLDUwNjpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVs4M11bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjgzfV0sNTA3OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzUwNV1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7XCJiaXQtdHdpZGRsZVwiOjUwNixkdXA6NTA1LFwidW5pb24tZmluZFwiOjUwOH1dLDUwODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7dGhpcy5yb290cz1uZXcgQXJyYXkodCksdGhpcy5yYW5rcz1uZXcgQXJyYXkodCk7Zm9yKHZhciBlPTA7ZTx0OysrZSl0aGlzLnJvb3RzW2VdPWUsdGhpcy5yYW5rc1tlXT0wfWUuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3RzLmxlbmd0aH0sbi5wcm90b3R5cGUubWFrZVNldD1mdW5jdGlvbigpe3ZhciB0PXRoaXMucm9vdHMubGVuZ3RoO3JldHVybiB0aGlzLnJvb3RzLnB1c2godCksdGhpcy5yYW5rcy5wdXNoKDApLHR9LG4ucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMucm9vdHM7ZVt0XSE9PXQ7KXt2YXIgcj1lW3RdO2VbdF09ZVtyXSx0PXJ9cmV0dXJuIHR9LG4ucHJvdG90eXBlLmxpbms9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmZpbmQodCksbj10aGlzLmZpbmQoZSk7aWYociE9PW4pe3ZhciBpPXRoaXMucmFua3MsYT10aGlzLnJvb3RzLG89aVtyXSxzPWlbbl07bzxzP2Fbcl09bjpzPG8/YVtuXT1yOihhW25dPXIsKytpW3JdKX19fSx7fV0sNTA5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGE9ZS5sZW5ndGgsbz10Lmxlbmd0aCxzPW5ldyBBcnJheShhKSxsPW5ldyBBcnJheShhKSxjPW5ldyBBcnJheShhKSx1PW5ldyBBcnJheShhKSxoPTA7aDxhOysraClzW2hdPWxbaF09LTEsY1toXT0xLzAsdVtoXT0hMTtmb3IodmFyIGg9MDtoPG87KytoKXt2YXIgZj10W2hdO2lmKDIhPT1mLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJJbnB1dCBtdXN0IGJlIGEgZ3JhcGhcIik7dmFyIHA9ZlsxXSxkPWZbMF07LTEhPT1sW2RdP2xbZF09LTI6bFtkXT1wLC0xIT09c1twXT9zW3BdPS0yOnNbcF09ZH1mdW5jdGlvbiBnKHQpe2lmKHVbdF0pcmV0dXJuIDEvMDt2YXIgcixpLGEsbyxjLGg9c1t0XSxmPWxbdF07cmV0dXJuIGg8MHx8ZjwwPzEvMDoocj1lW3RdLGk9ZVtoXSxhPWVbZl0sbz1NYXRoLmFicyhuKHIsaSxhKSksYz1NYXRoLnNxcnQoTWF0aC5wb3coaVswXS1hWzBdLDIpK01hdGgucG93KGlbMV0tYVsxXSwyKSksby9jKX1mdW5jdGlvbiB2KHQsZSl7dmFyIHI9QVt0XSxuPUFbZV07QVt0XT1uLEFbZV09cixUW3JdPWUsVFtuXT10fWZ1bmN0aW9uIG0odCl7cmV0dXJuIGNbQVt0XV19ZnVuY3Rpb24geSh0KXtyZXR1cm4gMSZ0P3QtMT4+MToodD4+MSktMX1mdW5jdGlvbiB4KHQpe2Zvcih2YXIgZT1tKHQpOzspe3ZhciByPWUsbj0yKnQrMSxpPTIqKHQrMSksYT10O2lmKG48Uyl7dmFyIG89bShuKTtvPHImJihhPW4scj1vKX1pZihpPFMpe3ZhciBzPW0oaSk7czxyJiYoYT1pKX1pZihhPT09dClyZXR1cm4gdDt2KHQsYSksdD1hfX1mdW5jdGlvbiBiKHQpe2Zvcih2YXIgZT1tKHQpO3Q+MDspe3ZhciByPXkodCk7aWYocj49MCl7dmFyIG49bShyKTtpZihlPG4pe3YodCxyKSx0PXI7Y29udGludWV9fXJldHVybiB0fX1mdW5jdGlvbiBfKCl7aWYoUz4wKXt2YXIgdD1BWzBdO3JldHVybiB2KDAsUy0xKSxTLT0xLHgoMCksdH1yZXR1cm4tMX1mdW5jdGlvbiB3KHQsZSl7dmFyIHI9QVt0XTtyZXR1cm4gY1tyXT09PWU/dDooY1tyXT0tMS8wLGIodCksXygpLGNbcl09ZSxiKChTKz0xKS0xKSl9ZnVuY3Rpb24gayh0KXtpZighdVt0XSl7dVt0XT0hMDt2YXIgZT1zW3RdLHI9bFt0XTtzW3JdPj0wJiYoc1tyXT1lKSxsW2VdPj0wJiYobFtlXT1yKSxUW2VdPj0wJiZ3KFRbZV0sZyhlKSksVFtyXT49MCYmdyhUW3JdLGcocikpfX1mb3IodmFyIEE9W10sVD1uZXcgQXJyYXkoYSksaD0wO2g8YTsrK2gpe3ZhciBNPWNbaF09ZyhoKTtNPDEvMD8oVFtoXT1BLmxlbmd0aCxBLnB1c2goaCkpOlRbaF09LTF9Zm9yKHZhciBTPUEubGVuZ3RoLGg9Uz4+MTtoPj0wOy0taCl4KGgpO2Zvcig7Oyl7dmFyIEU9XygpO2lmKEU8MHx8Y1tFXT5yKWJyZWFrO2soRSl9Zm9yKHZhciBDPVtdLGg9MDtoPGE7KytoKXVbaF18fChUW2hdPUMubGVuZ3RoLEMucHVzaChlW2hdLnNsaWNlKCkpKTtDLmxlbmd0aDtmdW5jdGlvbiBMKHQsZSl7aWYodFtlXTwwKXJldHVybiBlO3ZhciByPWUsbj1lO2Rve3ZhciBpPXRbbl07aWYoIXVbbl18fGk8MHx8aT09PW4pYnJlYWs7aWYoaT10W249aV0sIXVbbl18fGk8MHx8aT09PW4pYnJlYWs7bj1pLHI9dFtyXX13aGlsZShyIT09bik7Zm9yKHZhciBhPWU7YSE9PW47YT10W2FdKXRbYV09bjtyZXR1cm4gbn12YXIgej1bXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPUwocyx0WzBdKSxyPUwobCx0WzFdKTtpZihlPj0wJiZyPj0wJiZlIT09cil7dmFyIG49VFtlXSxpPVRbcl07biE9PWkmJnoucHVzaChbbixpXSl9fSksaS51bmlxdWUoaS5ub3JtYWxpemUoeikpLHtwb3NpdGlvbnM6QyxlZGdlczp6fX07dmFyIG49dChcInJvYnVzdC1vcmllbnRhdGlvblwiKSxpPXQoXCJzaW1wbGljaWFsLWNvbXBsZXhcIil9LHtcInJvYnVzdC1vcmllbnRhdGlvblwiOjQ5NSxcInNpbXBsaWNpYWwtY29tcGxleFwiOjUwN31dLDUxMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGEsbyxzO2lmKGVbMF1bMF08ZVsxXVswXSlyPWVbMF0sYT1lWzFdO2Vsc2V7aWYoIShlWzBdWzBdPmVbMV1bMF0pKXJldHVybiBpKGUsdCk7cj1lWzFdLGE9ZVswXX1pZih0WzBdWzBdPHRbMV1bMF0pbz10WzBdLHM9dFsxXTtlbHNle2lmKCEodFswXVswXT50WzFdWzBdKSlyZXR1cm4taSh0LGUpO289dFsxXSxzPXRbMF19dmFyIGw9bihyLGEscyksYz1uKHIsYSxvKTtpZihsPDApe2lmKGM8PTApcmV0dXJuIGx9ZWxzZSBpZihsPjApe2lmKGM+PTApcmV0dXJuIGx9ZWxzZSBpZihjKXJldHVybiBjO2lmKGw9bihzLG8sYSksYz1uKHMsbyxyKSxsPDApe2lmKGM8PTApcmV0dXJuIGx9ZWxzZSBpZihsPjApe2lmKGM+PTApcmV0dXJuIGx9ZWxzZSBpZihjKXJldHVybiBjO3JldHVybiBhWzBdLXNbMF19O3ZhciBuPXQoXCJyb2J1c3Qtb3JpZW50YXRpb25cIik7ZnVuY3Rpb24gaSh0LGUpe3ZhciByLGksYSxvO2lmKGVbMF1bMF08ZVsxXVswXSlyPWVbMF0saT1lWzFdO2Vsc2V7aWYoIShlWzBdWzBdPmVbMV1bMF0pKXt2YXIgcz1NYXRoLm1pbih0WzBdWzFdLHRbMV1bMV0pLGw9TWF0aC5tYXgodFswXVsxXSx0WzFdWzFdKSxjPU1hdGgubWluKGVbMF1bMV0sZVsxXVsxXSksdT1NYXRoLm1heChlWzBdWzFdLGVbMV1bMV0pO3JldHVybiBsPGM/bC1jOnM+dT9zLXU6bC11fXI9ZVsxXSxpPWVbMF19dFswXVsxXTx0WzFdWzFdPyhhPXRbMF0sbz10WzFdKTooYT10WzFdLG89dFswXSk7dmFyIGg9bihpLHIsYSk7cmV0dXJuIGh8fCgoaD1uKGkscixvKSl8fG8taSl9fSx7XCJyb2J1c3Qtb3JpZW50YXRpb25cIjo0OTV9XSw1MTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9MiplLG49bmV3IEFycmF5KHIpLGE9MDthPGU7KythKXt2YXIgbD10W2FdLGM9bFswXVswXTxsWzFdWzBdO25bMiphXT1uZXcgaChsWzBdWzBdLGwsYyxhKSxuWzIqYSsxXT1uZXcgaChsWzFdWzBdLGwsIWMsYSl9bi5zb3J0KGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC54LWUueDtyZXR1cm4gcnx8KChyPXQuY3JlYXRlLWUuY3JlYXRlKXx8TWF0aC5taW4odC5zZWdtZW50WzBdWzFdLHQuc2VnbWVudFsxXVsxXSktTWF0aC5taW4oZS5zZWdtZW50WzBdWzFdLGUuc2VnbWVudFsxXVsxXSkpfSk7Zm9yKHZhciBmPWkobykscD1bXSxkPVtdLGc9W10sYT0wO2E8cjspe2Zvcih2YXIgdj1uW2FdLngsbT1bXTthPHI7KXt2YXIgeT1uW2FdO2lmKHkueCE9PXYpYnJlYWs7YSs9MSx5LnNlZ21lbnRbMF1bMF09PT15LngmJnkuc2VnbWVudFsxXVswXT09PXkueD95LmNyZWF0ZSYmKHkuc2VnbWVudFswXVsxXTx5LnNlZ21lbnRbMV1bMV0/KG0ucHVzaChuZXcgdSh5LnNlZ21lbnRbMF1bMV0seS5pbmRleCwhMCwhMCkpLG0ucHVzaChuZXcgdSh5LnNlZ21lbnRbMV1bMV0seS5pbmRleCwhMSwhMSkpKToobS5wdXNoKG5ldyB1KHkuc2VnbWVudFsxXVsxXSx5LmluZGV4LCEwLCExKSksbS5wdXNoKG5ldyB1KHkuc2VnbWVudFswXVsxXSx5LmluZGV4LCExLCEwKSkpKTpmPXkuY3JlYXRlP2YuaW5zZXJ0KHkuc2VnbWVudCx5LmluZGV4KTpmLnJlbW92ZSh5LnNlZ21lbnQpfXAucHVzaChmLnJvb3QpLGQucHVzaCh2KSxnLnB1c2gobSl9cmV0dXJuIG5ldyBzKHAsZCxnKX07dmFyIG49dChcImJpbmFyeS1zZWFyY2gtYm91bmRzXCIpLGk9dChcImZ1bmN0aW9uYWwtcmVkLWJsYWNrLXRyZWVcIiksYT10KFwicm9idXN0LW9yaWVudGF0aW9uXCIpLG89dChcIi4vbGliL29yZGVyLXNlZ21lbnRzXCIpO2Z1bmN0aW9uIHModCxlLHIpe3RoaXMuc2xhYnM9dCx0aGlzLmNvb3JkaW5hdGVzPWUsdGhpcy5ob3Jpem9udGFsPXJ9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0LnktZX1mdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciByPW51bGw7dDspe3ZhciBuLGksbz10LmtleTtvWzBdWzBdPG9bMV1bMF0/KG49b1swXSxpPW9bMV0pOihuPW9bMV0saT1vWzBdKTt2YXIgcz1hKG4saSxlKTtpZihzPDApdD10LmxlZnQ7ZWxzZSBpZihzPjApaWYoZVswXSE9PW9bMV1bMF0pcj10LHQ9dC5yaWdodDtlbHNle2lmKGw9Yyh0LnJpZ2h0LGUpKXJldHVybiBsO3Q9dC5sZWZ0fWVsc2V7aWYoZVswXSE9PW9bMV1bMF0pcmV0dXJuIHQ7dmFyIGw7aWYobD1jKHQucmlnaHQsZSkpcmV0dXJuIGw7dD10LmxlZnR9fXJldHVybiByfWZ1bmN0aW9uIHUodCxlLHIsbil7dGhpcy55PXQsdGhpcy5pbmRleD1lLHRoaXMuc3RhcnQ9cix0aGlzLmNsb3NlZD1ufWZ1bmN0aW9uIGgodCxlLHIsbil7dGhpcy54PXQsdGhpcy5zZWdtZW50PWUsdGhpcy5jcmVhdGU9cix0aGlzLmluZGV4PW59cy5wcm90b3R5cGUuY2FzdFVwPWZ1bmN0aW9uKHQpe3ZhciBlPW4ubGUodGhpcy5jb29yZGluYXRlcyx0WzBdKTtpZihlPDApcmV0dXJuLTE7dGhpcy5zbGFic1tlXTt2YXIgcj1jKHRoaXMuc2xhYnNbZV0sdCksaT0tMTtpZihyJiYoaT1yLnZhbHVlKSx0aGlzLmNvb3JkaW5hdGVzW2VdPT09dFswXSl7dmFyIHM9bnVsbDtpZihyJiYocz1yLmtleSksZT4wKXt2YXIgdT1jKHRoaXMuc2xhYnNbZS0xXSx0KTt1JiYocz9vKHUua2V5LHMpPjAmJihzPXUua2V5LGk9dS52YWx1ZSk6KGk9dS52YWx1ZSxzPXUua2V5KSl9dmFyIGg9dGhpcy5ob3Jpem9udGFsW2VdO2lmKGgubGVuZ3RoPjApe3ZhciBmPW4uZ2UoaCx0WzFdLGwpO2lmKGY8aC5sZW5ndGgpe3ZhciBwPWhbZl07aWYodFsxXT09PXAueSl7aWYocC5jbG9zZWQpcmV0dXJuIHAuaW5kZXg7Zm9yKDtmPGgubGVuZ3RoLTEmJmhbZisxXS55PT09dFsxXTspaWYoKHA9aFtmKz0xXSkuY2xvc2VkKXJldHVybiBwLmluZGV4O2lmKHAueT09PXRbMV0mJiFwLnN0YXJ0KXtpZigoZis9MSk+PWgubGVuZ3RoKXJldHVybiBpO3A9aFtmXX19aWYocC5zdGFydClpZihzKXt2YXIgZD1hKHNbMF0sc1sxXSxbdFswXSxwLnldKTtzWzBdWzBdPnNbMV1bMF0mJihkPS1kKSxkPjAmJihpPXAuaW5kZXgpfWVsc2UgaT1wLmluZGV4O2Vsc2UgcC55IT09dFsxXSYmKGk9cC5pbmRleCl9fX1yZXR1cm4gaX19LHtcIi4vbGliL29yZGVyLXNlZ21lbnRzXCI6NTEwLFwiYmluYXJ5LXNlYXJjaC1ib3VuZHNcIjo4MixcImZ1bmN0aW9uYWwtcmVkLWJsYWNrLXRyZWVcIjoyMjcsXCJyb2J1c3Qtb3JpZW50YXRpb25cIjo0OTV9XSw1MTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicm9idXN0LWRvdC1wcm9kdWN0XCIpLGk9dChcInJvYnVzdC1zdW1cIik7ZnVuY3Rpb24gYSh0LGUpe3ZhciByPWkobih0LGUpLFtlW2UubGVuZ3RoLTFdXSk7cmV0dXJuIHJbci5sZW5ndGgtMV19ZnVuY3Rpb24gbyh0LGUscixuKXt2YXIgaT0tZS8obi1lKTtpPDA/aT0wOmk+MSYmKGk9MSk7Zm9yKHZhciBhPTEtaSxvPXQubGVuZ3RoLHM9bmV3IEFycmF5KG8pLGw9MDtsPG87KytsKXNbbF09aSp0W2xdK2EqcltsXTtyZXR1cm4gc31lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj1bXSxpPWEodFt0Lmxlbmd0aC0xXSxlKSxzPXRbdC5sZW5ndGgtMV0sbD10WzBdLGM9MDtjPHQubGVuZ3RoOysrYyxzPWwpe3ZhciB1PWEobD10W2NdLGUpO2lmKGk8MCYmdT4wfHxpPjAmJnU8MCl7dmFyIGg9byhzLHUsbCxpKTtyLnB1c2goaCksbi5wdXNoKGguc2xpY2UoKSl9dTwwP24ucHVzaChsLnNsaWNlKCkpOnU+MD9yLnB1c2gobC5zbGljZSgpKTooci5wdXNoKGwuc2xpY2UoKSksbi5wdXNoKGwuc2xpY2UoKSkpLGk9dX1yZXR1cm57cG9zaXRpdmU6cixuZWdhdGl2ZTpufX0sZS5leHBvcnRzLnBvc2l0aXZlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49YSh0W3QubGVuZ3RoLTFdLGUpLGk9dFt0Lmxlbmd0aC0xXSxzPXRbMF0sbD0wO2w8dC5sZW5ndGg7KytsLGk9cyl7dmFyIGM9YShzPXRbbF0sZSk7KG48MCYmYz4wfHxuPjAmJmM8MCkmJnIucHVzaChvKGksYyxzLG4pKSxjPj0wJiZyLnB1c2gocy5zbGljZSgpKSxuPWN9cmV0dXJuIHJ9LGUuZXhwb3J0cy5uZWdhdGl2ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPWEodFt0Lmxlbmd0aC0xXSxlKSxpPXRbdC5sZW5ndGgtMV0scz10WzBdLGw9MDtsPHQubGVuZ3RoOysrbCxpPXMpe3ZhciBjPWEocz10W2xdLGUpOyhuPDAmJmM+MHx8bj4wJiZjPDApJiZyLnB1c2gobyhpLGMscyxuKSksYzw9MCYmci5wdXNoKHMuc2xpY2UoKSksbj1jfXJldHVybiByfX0se1wicm9idXN0LWRvdC1wcm9kdWN0XCI6NDkyLFwicm9idXN0LXN1bVwiOjUwMH1dLDUxMzpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciB0PXtub3Rfc3RyaW5nOi9bXnNdLyxub3RfYm9vbDovW150XS8sbm90X3R5cGU6L1teVF0vLG5vdF9wcmltaXRpdmU6L1tedl0vLG51bWJlcjovW2RpZWZnXS8sbnVtZXJpY19hcmc6L1tiY2RpZWZndXhYXS8sanNvbjovW2pdLyxub3RfanNvbjovW15qXS8sdGV4dDovXlteXFx4MjVdKy8sbW9kdWxvOi9eXFx4MjV7Mn0vLHBsYWNlaG9sZGVyOi9eXFx4MjUoPzooWzEtOV1cXGQqKVxcJHxcXCgoW14pXSspXFwpKT8oXFwrKT8oMHwnW14kXSk/KC0pPyhcXGQrKT8oPzpcXC4oXFxkKykpPyhbYi1naWpvc3RUdXZ4WF0pLyxrZXk6L14oW2Etel9dW2Etel9cXGRdKikvaSxrZXlfYWNjZXNzOi9eXFwuKFthLXpfXVthLXpfXFxkXSopL2ksaW5kZXhfYWNjZXNzOi9eXFxbKFxcZCspXFxdLyxzaWduOi9eWystXS99O2Z1bmN0aW9uIGUocil7cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGksYSxvLHMsbCxjLHUsaCxmLHA9MSxkPXIubGVuZ3RoLGc9XCJcIjtmb3IoYT0wO2E8ZDthKyspaWYoXCJzdHJpbmdcIj09dHlwZW9mIHJbYV0pZys9clthXTtlbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiByW2FdKXtpZigocz1yW2FdKS5rZXlzKWZvcihpPW5bcF0sbz0wO288cy5rZXlzLmxlbmd0aDtvKyspe2lmKG51bGw9PWkpdGhyb3cgbmV3IEVycm9yKGUoJ1tzcHJpbnRmXSBDYW5ub3QgYWNjZXNzIHByb3BlcnR5IFwiJXNcIiBvZiB1bmRlZmluZWQgdmFsdWUgXCIlc1wiJyxzLmtleXNbb10scy5rZXlzW28tMV0pKTtpPWlbcy5rZXlzW29dXX1lbHNlIGk9cy5wYXJhbV9ubz9uW3MucGFyYW1fbm9dOm5bcCsrXTtpZih0Lm5vdF90eXBlLnRlc3Qocy50eXBlKSYmdC5ub3RfcHJpbWl0aXZlLnRlc3Qocy50eXBlKSYmaSBpbnN0YW5jZW9mIEZ1bmN0aW9uJiYoaT1pKCkpLHQubnVtZXJpY19hcmcudGVzdChzLnR5cGUpJiZcIm51bWJlclwiIT10eXBlb2YgaSYmaXNOYU4oaSkpdGhyb3cgbmV3IFR5cGVFcnJvcihlKFwiW3NwcmludGZdIGV4cGVjdGluZyBudW1iZXIgYnV0IGZvdW5kICVUXCIsaSkpO3N3aXRjaCh0Lm51bWJlci50ZXN0KHMudHlwZSkmJihoPWk+PTApLHMudHlwZSl7Y2FzZVwiYlwiOmk9cGFyc2VJbnQoaSwxMCkudG9TdHJpbmcoMik7YnJlYWs7Y2FzZVwiY1wiOmk9U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChpLDEwKSk7YnJlYWs7Y2FzZVwiZFwiOmNhc2VcImlcIjppPXBhcnNlSW50KGksMTApO2JyZWFrO2Nhc2VcImpcIjppPUpTT04uc3RyaW5naWZ5KGksbnVsbCxzLndpZHRoP3BhcnNlSW50KHMud2lkdGgpOjApO2JyZWFrO2Nhc2VcImVcIjppPXMucHJlY2lzaW9uP3BhcnNlRmxvYXQoaSkudG9FeHBvbmVudGlhbChzLnByZWNpc2lvbik6cGFyc2VGbG9hdChpKS50b0V4cG9uZW50aWFsKCk7YnJlYWs7Y2FzZVwiZlwiOmk9cy5wcmVjaXNpb24/cGFyc2VGbG9hdChpKS50b0ZpeGVkKHMucHJlY2lzaW9uKTpwYXJzZUZsb2F0KGkpO2JyZWFrO2Nhc2VcImdcIjppPXMucHJlY2lzaW9uP1N0cmluZyhOdW1iZXIoaS50b1ByZWNpc2lvbihzLnByZWNpc2lvbikpKTpwYXJzZUZsb2F0KGkpO2JyZWFrO2Nhc2VcIm9cIjppPShwYXJzZUludChpLDEwKT4+PjApLnRvU3RyaW5nKDgpO2JyZWFrO2Nhc2VcInNcIjppPVN0cmluZyhpKSxpPXMucHJlY2lzaW9uP2kuc3Vic3RyaW5nKDAscy5wcmVjaXNpb24pOmk7YnJlYWs7Y2FzZVwidFwiOmk9U3RyaW5nKCEhaSksaT1zLnByZWNpc2lvbj9pLnN1YnN0cmluZygwLHMucHJlY2lzaW9uKTppO2JyZWFrO2Nhc2VcIlRcIjppPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKS5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpLGk9cy5wcmVjaXNpb24/aS5zdWJzdHJpbmcoMCxzLnByZWNpc2lvbik6aTticmVhaztjYXNlXCJ1XCI6aT1wYXJzZUludChpLDEwKT4+PjA7YnJlYWs7Y2FzZVwidlwiOmk9aS52YWx1ZU9mKCksaT1zLnByZWNpc2lvbj9pLnN1YnN0cmluZygwLHMucHJlY2lzaW9uKTppO2JyZWFrO2Nhc2VcInhcIjppPShwYXJzZUludChpLDEwKT4+PjApLnRvU3RyaW5nKDE2KTticmVhaztjYXNlXCJYXCI6aT0ocGFyc2VJbnQoaSwxMCk+Pj4wKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX10Lmpzb24udGVzdChzLnR5cGUpP2crPWk6KCF0Lm51bWJlci50ZXN0KHMudHlwZSl8fGgmJiFzLnNpZ24/Zj1cIlwiOihmPWg/XCIrXCI6XCItXCIsaT1pLnRvU3RyaW5nKCkucmVwbGFjZSh0LnNpZ24sXCJcIikpLGM9cy5wYWRfY2hhcj9cIjBcIj09PXMucGFkX2NoYXI/XCIwXCI6cy5wYWRfY2hhci5jaGFyQXQoMSk6XCIgXCIsdT1zLndpZHRoLShmK2kpLmxlbmd0aCxsPXMud2lkdGgmJnU+MD9jLnJlcGVhdCh1KTpcIlwiLGcrPXMuYWxpZ24/ZitpK2w6XCIwXCI9PT1jP2YrbCtpOmwrZitpKX1yZXR1cm4gZ30oZnVuY3Rpb24oZSl7aWYoaVtlXSlyZXR1cm4gaVtlXTt2YXIgcixuPWUsYT1bXSxvPTA7Zm9yKDtuOyl7aWYobnVsbCE9PShyPXQudGV4dC5leGVjKG4pKSlhLnB1c2goclswXSk7ZWxzZSBpZihudWxsIT09KHI9dC5tb2R1bG8uZXhlYyhuKSkpYS5wdXNoKFwiJVwiKTtlbHNle2lmKG51bGw9PT0ocj10LnBsYWNlaG9sZGVyLmV4ZWMobikpKXRocm93IG5ldyBTeW50YXhFcnJvcihcIltzcHJpbnRmXSB1bmV4cGVjdGVkIHBsYWNlaG9sZGVyXCIpO2lmKHJbMl0pe298PTE7dmFyIHM9W10sbD1yWzJdLGM9W107aWYobnVsbD09PShjPXQua2V5LmV4ZWMobCkpKXRocm93IG5ldyBTeW50YXhFcnJvcihcIltzcHJpbnRmXSBmYWlsZWQgdG8gcGFyc2UgbmFtZWQgYXJndW1lbnQga2V5XCIpO2ZvcihzLnB1c2goY1sxXSk7XCJcIiE9PShsPWwuc3Vic3RyaW5nKGNbMF0ubGVuZ3RoKSk7KWlmKG51bGwhPT0oYz10LmtleV9hY2Nlc3MuZXhlYyhsKSkpcy5wdXNoKGNbMV0pO2Vsc2V7aWYobnVsbD09PShjPXQuaW5kZXhfYWNjZXNzLmV4ZWMobCkpKXRocm93IG5ldyBTeW50YXhFcnJvcihcIltzcHJpbnRmXSBmYWlsZWQgdG8gcGFyc2UgbmFtZWQgYXJndW1lbnQga2V5XCIpO3MucHVzaChjWzFdKX1yWzJdPXN9ZWxzZSBvfD0yO2lmKDM9PT1vKXRocm93IG5ldyBFcnJvcihcIltzcHJpbnRmXSBtaXhpbmcgcG9zaXRpb25hbCBhbmQgbmFtZWQgcGxhY2Vob2xkZXJzIGlzIG5vdCAoeWV0KSBzdXBwb3J0ZWRcIik7YS5wdXNoKHtwbGFjZWhvbGRlcjpyWzBdLHBhcmFtX25vOnJbMV0sa2V5czpyWzJdLHNpZ246clszXSxwYWRfY2hhcjpyWzRdLGFsaWduOnJbNV0sd2lkdGg6cls2XSxwcmVjaXNpb246cls3XSx0eXBlOnJbOF19KX1uPW4uc3Vic3RyaW5nKHJbMF0ubGVuZ3RoKX1yZXR1cm4gaVtlXT1hfShyKSxhcmd1bWVudHMpfWZ1bmN0aW9uIG4odCxyKXtyZXR1cm4gZS5hcHBseShudWxsLFt0XS5jb25jYXQocnx8W10pKX12YXIgaT1PYmplY3QuY3JlYXRlKG51bGwpO1widW5kZWZpbmVkXCIhPXR5cGVvZiByJiYoci5zcHJpbnRmPWUsci52c3ByaW50Zj1uKSxcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiYod2luZG93LnNwcmludGY9ZSx3aW5kb3cudnNwcmludGY9bil9KCl9LHt9XSw1MTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicGFyZW50aGVzaXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZihudWxsPT10KXRocm93IEVycm9yKFwiRmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIGEgc3RyaW5nXCIpO2lmKG51bGw9PWUpdGhyb3cgRXJyb3IoXCJTZXBhcmF0b3Igc2hvdWxkIGJlIGEgc3RyaW5nIG9yIGEgUmVnRXhwXCIpO3I/KFwic3RyaW5nXCI9PXR5cGVvZiByfHxBcnJheS5pc0FycmF5KHIpKSYmKHI9e2lnbm9yZTpyfSk6cj17fSxudWxsPT1yLmVzY2FwZSYmKHIuZXNjYXBlPSEwKSxudWxsPT1yLmlnbm9yZT9yLmlnbm9yZT1bXCJbXVwiLFwiKClcIixcInt9XCIsXCI8PlwiLCdcIlwiJyxcIicnXCIsXCJgYFwiLFwiXFx1MjAxY1xcdTIwMWRcIixcIlxceGFiXFx4YmJcIl06KFwic3RyaW5nXCI9PXR5cGVvZiByLmlnbm9yZSYmKHIuaWdub3JlPVtyLmlnbm9yZV0pLHIuaWdub3JlPXIuaWdub3JlLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQubGVuZ3RoJiYodCs9dCksdH0pKTt2YXIgaT1uLnBhcnNlKHQse2ZsYXQ6ITAsYnJhY2tldHM6ci5pZ25vcmV9KSxhPWlbMF0uc3BsaXQoZSk7aWYoci5lc2NhcGUpe2Zvcih2YXIgbz1bXSxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc10sYz1hW3MrMV07XCJcXFxcXCI9PT1sW2wubGVuZ3RoLTFdJiZcIlxcXFxcIiE9PWxbbC5sZW5ndGgtMl0/KG8ucHVzaChsK2UrYykscysrKTpvLnB1c2gobCl9YT1vfWZvcihzPTA7czxhLmxlbmd0aDtzKyspaVswXT1hW3NdLGFbc109bi5zdHJpbmdpZnkoaSx7ZmxhdDohMH0pO3JldHVybiBhfX0se3BhcmVudGhlc2lzOjQ1MX1dLDUxNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj1uZXcgQXJyYXkoZSksaT1uZXcgQXJyYXkoZSksYT1uZXcgQXJyYXkoZSksbz1uZXcgQXJyYXkoZSkscz1uZXcgQXJyYXkoZSksbD0wO2w8ZTsrK2wpcltsXT0tMSxuW2xdPTAsaVtsXT0hMSxhW2xdPTAsb1tsXT0tMSxzW2xdPVtdO3ZhciBjLHU9MCxoPVtdLGY9W107ZnVuY3Rpb24gcChlKXt2YXIgbD1bZV0sYz1bZV07Zm9yKHJbZV09bltlXT11LGlbZV09ITAsdSs9MTtjLmxlbmd0aD4wOyl7ZT1jW2MubGVuZ3RoLTFdO3ZhciBwPXRbZV07aWYoYVtlXTxwLmxlbmd0aCl7Zm9yKHZhciBkPWFbZV07ZDxwLmxlbmd0aDsrK2Qpe3ZhciBnPXBbZF07aWYocltnXTwwKXtyW2ddPW5bZ109dSxpW2ddPSEwLHUrPTEsbC5wdXNoKGcpLGMucHVzaChnKTticmVha31pW2ddJiYobltlXT0wfE1hdGgubWluKG5bZV0sbltnXSkpLG9bZ10+PTAmJnNbZV0ucHVzaChvW2ddKX1hW2VdPWR9ZWxzZXtpZihuW2VdPT09cltlXSl7Zm9yKHZhciB2PVtdLG09W10seT0wLGQ9bC5sZW5ndGgtMTtkPj0wOy0tZCl7dmFyIHg9bFtkXTtpZihpW3hdPSExLHYucHVzaCh4KSxtLnB1c2goc1t4XSkseSs9c1t4XS5sZW5ndGgsb1t4XT1oLmxlbmd0aCx4PT09ZSl7bC5sZW5ndGg9ZDticmVha319aC5wdXNoKHYpO2Zvcih2YXIgYj1uZXcgQXJyYXkoeSksZD0wO2Q8bS5sZW5ndGg7ZCsrKWZvcih2YXIgXz0wO188bVtkXS5sZW5ndGg7XysrKWJbLS15XT1tW2RdW19dO2YucHVzaChiKX1jLnBvcCgpfX19Zm9yKHZhciBsPTA7bDxlOysrbClyW2xdPDAmJnAobCk7Zm9yKHZhciBsPTA7bDxmLmxlbmd0aDtsKyspe3ZhciBkPWZbbF07aWYoMCE9PWQubGVuZ3RoKXtkLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSksYz1bZFswXV07Zm9yKHZhciBnPTE7ZzxkLmxlbmd0aDtnKyspZFtnXSE9PWRbZy0xXSYmYy5wdXNoKGRbZ10pO2ZbbF09Y319cmV0dXJue2NvbXBvbmVudHM6aCxhZGphY2VuY3lMaXN0OmZ9fX0se31dLDUxNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHQuZGltZW5zaW9uPD0wKXJldHVybntwb3NpdGlvbnM6W10sY2VsbHM6W119O2lmKDE9PT10LmRpbWVuc2lvbilyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9YSh0LGUpLG49ci5sZW5ndGgsaT1uZXcgQXJyYXkobiksbz1uZXcgQXJyYXkobikscz0wO3M8bjsrK3MpaVtzXT1bcltzXV0sb1tzXT1bc107cmV0dXJue3Bvc2l0aW9uczppLGNlbGxzOm99fSh0LGUpO3ZhciByPXQub3JkZXIuam9pbigpK1wiLVwiK3QuZHR5cGUscz1vW3JdLGU9K2V8fDA7c3x8KHM9b1tyXT1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoLGE9W1wiJ3VzZSBzdHJpY3QnO1wiXSxvPVwic3VyZmFjZU5ldHNcIit0LmpvaW4oXCJfXCIpK1wiZFwiK2U7YS5wdXNoKFwidmFyIGNvbnRvdXI9Z2VuQ29udG91cih7XCIsXCJvcmRlcjpbXCIsdC5qb2luKCksXCJdLFwiLFwic2NhbGFyQXJndW1lbnRzOiAzLFwiLFwicGhhc2U6ZnVuY3Rpb24gcGhhc2VGdW5jKHAsYSxiLGMpIHsgcmV0dXJuIChwID4gYyl8MCB9LFwiKSxcImdlbmVyaWNcIj09PWUmJmEucHVzaChcImdldHRlcnM6WzBdLFwiKTtmb3IodmFyIHM9W10sbD1bXSxjPTA7YzxyOysrYylzLnB1c2goXCJkXCIrYyksbC5wdXNoKFwiZFwiK2MpO2Zvcih2YXIgYz0wO2M8MTw8cjsrK2Mpcy5wdXNoKFwidlwiK2MpLGwucHVzaChcInZcIitjKTtmb3IodmFyIGM9MDtjPDE8PHI7KytjKXMucHVzaChcInBcIitjKSxsLnB1c2goXCJwXCIrYyk7cy5wdXNoKFwiYVwiLFwiYlwiLFwiY1wiKSxsLnB1c2goXCJhXCIsXCJjXCIpLGEucHVzaChcInZlcnRleDpmdW5jdGlvbiB2ZXJ0ZXhGdW5jKFwiLHMuam9pbigpLFwiKXtcIik7Zm9yKHZhciB1PVtdLGM9MDtjPDE8PHI7KytjKXUucHVzaChcIihwXCIrYytcIjw8XCIrYytcIilcIik7YS5wdXNoKFwidmFyIG09KFwiLHUuam9pbihcIitcIiksXCIpfDA7aWYobT09PTB8fG09PT1cIiwoMTw8KDE8PHIpKS0xLFwiKXtyZXR1cm59XCIpO3ZhciBoPVtdLGY9W107MTw8KDE8PHIpPD0xMjg/KGEucHVzaChcInN3aXRjaChtKXtcIiksZj1hKTphLnB1c2goXCJzd2l0Y2gobT4+Pjcpe1wiKTtmb3IodmFyIGM9MDtjPDE8PCgxPDxyKTsrK2Mpe2lmKDE8PCgxPDxyKT4xMjgmJmMlMTI4PT0wKXtoLmxlbmd0aD4wJiZmLnB1c2goXCJ9fVwiKTt2YXIgcD1cInZFeHRyYVwiK2gubGVuZ3RoO2EucHVzaChcImNhc2UgXCIsYz4+PjcsXCI6XCIscCxcIihtJjB4N2YsXCIsbC5qb2luKCksXCIpO2JyZWFrO1wiKSxmPVtcImZ1bmN0aW9uIFwiLHAsXCIobSxcIixsLmpvaW4oKSxcIil7c3dpdGNoKG0pe1wiXSxoLnB1c2goZil9Zi5wdXNoKFwiY2FzZSBcIiwxMjcmYyxcIjpcIik7Zm9yKHZhciBkPW5ldyBBcnJheShyKSxnPW5ldyBBcnJheShyKSx2PW5ldyBBcnJheShyKSxtPW5ldyBBcnJheShyKSx5PTAseD0wO3g8cjsrK3gpZFt4XT1bXSxnW3hdPVtdLHZbeF09MCxtW3hdPTA7Zm9yKHZhciB4PTA7eDwxPDxyOysreClmb3IodmFyIGI9MDtiPHI7KytiKXt2YXIgXz14XjE8PGI7aWYoIShfPngpJiYhKGMmMTw8XykhPSEoYyYxPDx4KSl7dmFyIHc9MTtjJjE8PF8/Z1tiXS5wdXNoKFwidlwiK18rXCItdlwiK3gpOihnW2JdLnB1c2goXCJ2XCIreCtcIi12XCIrXyksdz0tdyksdzwwPyhkW2JdLnB1c2goXCItdlwiK3grXCItdlwiK18pLHZbYl0rPTIpOihkW2JdLnB1c2goXCJ2XCIreCtcIit2XCIrXyksdltiXS09MikseSs9MTtmb3IodmFyIGs9MDtrPHI7KytrKWshPT1iJiYoXyYxPDxrP21ba10rPTE6bVtrXS09MSl9fWZvcih2YXIgQT1bXSxiPTA7YjxyOysrYilpZigwPT09ZFtiXS5sZW5ndGgpQS5wdXNoKFwiZFwiK2IrXCItMC41XCIpO2Vsc2V7dmFyIFQ9XCJcIjt2W2JdPDA/VD12W2JdK1wiKmNcIjp2W2JdPjAmJihUPVwiK1wiK3ZbYl0rXCIqY1wiKTt2YXIgTT1kW2JdLmxlbmd0aC95Ki41LFM9LjUrbVtiXS95Ki41O0EucHVzaChcImRcIitiK1wiLVwiK1MrXCItXCIrTStcIiooXCIrZFtiXS5qb2luKFwiK1wiKStUK1wiKS8oXCIrZ1tiXS5qb2luKFwiK1wiKStcIilcIil9Zi5wdXNoKFwiYS5wdXNoKFtcIixBLmpvaW4oKSxcIl0pO1wiLFwiYnJlYWs7XCIpfWEucHVzaChcIn19LFwiKSxoLmxlbmd0aD4wJiZmLnB1c2goXCJ9fVwiKTtmb3IodmFyIEU9W10sYz0wO2M8MTw8ci0xOysrYylFLnB1c2goXCJ2XCIrYyk7RS5wdXNoKFwiYzBcIixcImMxXCIsXCJwMFwiLFwicDFcIixcImFcIixcImJcIixcImNcIiksYS5wdXNoKFwiY2VsbDpmdW5jdGlvbiBjZWxsRnVuYyhcIixFLmpvaW4oKSxcIil7XCIpO3ZhciBDPWkoci0xKTthLnB1c2goXCJpZihwMCl7Yi5wdXNoKFwiLEMubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiW1wiK3QubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwidlwiK3R9KStcIl1cIn0pLmpvaW4oKSxcIil9ZWxzZXtiLnB1c2goXCIsQy5tYXAoZnVuY3Rpb24odCl7dmFyIGU9dC5zbGljZSgpO3JldHVybiBlLnJldmVyc2UoKSxcIltcIitlLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cInZcIit0fSkrXCJdXCJ9KS5qb2luKCksXCIpfX19KTtmdW5jdGlvbiBcIixvLFwiKGFycmF5LGxldmVsKXt2YXIgdmVydHM9W10sY2VsbHM9W107Y29udG91cihhcnJheSx2ZXJ0cyxjZWxscyxsZXZlbCk7cmV0dXJuIHtwb3NpdGlvbnM6dmVydHMsY2VsbHM6Y2VsbHN9O30gcmV0dXJuIFwiLG8sXCI7XCIpO2Zvcih2YXIgYz0wO2M8aC5sZW5ndGg7KytjKWEucHVzaChoW2NdLmpvaW4oXCJcIikpO3JldHVybiBuZXcgRnVuY3Rpb24oXCJnZW5Db250b3VyXCIsYS5qb2luKFwiXCIpKShuKX0odC5vcmRlcix0LmR0eXBlKSk7cmV0dXJuIHModCxlKX07dmFyIG49dChcIm5kYXJyYXktZXh0cmFjdC1jb250b3VyXCIpLGk9dChcInRyaWFuZ3VsYXRlLWh5cGVyY3ViZVwiKSxhPXQoXCJ6ZXJvLWNyb3NzaW5nc1wiKTt2YXIgbz17fX0se1wibmRhcnJheS1leHRyYWN0LWNvbnRvdXJcIjo0MzIsXCJ0cmlhbmd1bGF0ZS1oeXBlcmN1YmVcIjo1MjYsXCJ6ZXJvLWNyb3NzaW5nc1wiOjU1OX1dLDUxNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdDtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KHQpKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPVtdLG49ITAsaT0hMSxhPXZvaWQgMDt0cnl7Zm9yKHZhciBvLHM9dFtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShvPXMubmV4dCgpKS5kb25lKSYmKHIucHVzaChvLnZhbHVlKSwhZXx8ci5sZW5ndGghPT1lKTtuPSEwKTt9Y2F0Y2godCl7aT0hMCxhPXR9ZmluYWxseXt0cnl7IW4mJnMucmV0dXJuJiZzLnJldHVybigpfWZpbmFsbHl7aWYoaSl0aHJvdyBhfX1yZXR1cm4gcn0odCxlKTt0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKX19KCksaT0yKk1hdGguUEksYT1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz10LngsbD10Lnk7cmV0dXJue3g6bioocyo9ZSktaSoobCo9cikrYSx5OmkqcytuKmwrb319LG89ZnVuY3Rpb24odCxlKXt2YXIgcj0uNTUxOTE1MDI0NDk0LG49TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KSxhPU1hdGguY29zKHQrZSksbz1NYXRoLnNpbih0K2UpO3JldHVyblt7eDpuLWkqcix5OmkrbipyfSx7eDphK28qcix5Om8tYSpyfSx7eDphLHk6b31dfSxzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQqbi1lKnI8MD8tMToxLGE9KHQqcitlKm4pLyhNYXRoLnNxcnQodCp0K2UqZSkqTWF0aC5zcXJ0KHQqdCtlKmUpKTtyZXR1cm4gYT4xJiYoYT0xKSxhPC0xJiYoYT0tMSksaSpNYXRoLmFjb3MoYSl9O3IuZGVmYXVsdD1mdW5jdGlvbih0KXt2YXIgZT10LnB4LHI9dC5weSxsPXQuY3gsYz10LmN5LHU9dC5yeCxoPXQucnksZj10LnhBeGlzUm90YXRpb24scD12b2lkIDA9PT1mPzA6ZixkPXQubGFyZ2VBcmNGbGFnLGc9dm9pZCAwPT09ZD8wOmQsdj10LnN3ZWVwRmxhZyxtPXZvaWQgMD09PXY/MDp2LHk9W107aWYoMD09PXV8fDA9PT1oKXJldHVybltdO3ZhciB4PU1hdGguc2luKHAqaS8zNjApLGI9TWF0aC5jb3MocCppLzM2MCksXz1iKihlLWwpLzIreCooci1jKS8yLHc9LXgqKGUtbCkvMitiKihyLWMpLzI7aWYoMD09PV8mJjA9PT13KXJldHVybltdO3U9TWF0aC5hYnModSksaD1NYXRoLmFicyhoKTt2YXIgaz1NYXRoLnBvdyhfLDIpL01hdGgucG93KHUsMikrTWF0aC5wb3codywyKS9NYXRoLnBvdyhoLDIpO2s+MSYmKHUqPU1hdGguc3FydChrKSxoKj1NYXRoLnNxcnQoaykpO3ZhciBBPWZ1bmN0aW9uKHQsZSxyLG4sYSxvLGwsYyx1LGgsZixwKXt2YXIgZD1NYXRoLnBvdyhhLDIpLGc9TWF0aC5wb3cobywyKSx2PU1hdGgucG93KGYsMiksbT1NYXRoLnBvdyhwLDIpLHk9ZCpnLWQqbS1nKnY7eTwwJiYoeT0wKSx5Lz1kKm0rZyp2O3ZhciB4PSh5PU1hdGguc3FydCh5KSoobD09PWM/LTE6MSkpKmEvbypwLGI9eSotby9hKmYsXz1oKngtdSpiKyh0K3IpLzIsdz11KngraCpiKyhlK24pLzIsaz0oZi14KS9hLEE9KHAtYikvbyxUPSgtZi14KS9hLE09KC1wLWIpL28sUz1zKDEsMCxrLEEpLEU9cyhrLEEsVCxNKTtyZXR1cm4gMD09PWMmJkU+MCYmKEUtPWkpLDE9PT1jJiZFPDAmJihFKz1pKSxbXyx3LFMsRV19KGUscixsLGMsdSxoLGcsbSx4LGIsXyx3KSxUPW4oQSw0KSxNPVRbMF0sUz1UWzFdLEU9VFsyXSxDPVRbM10sTD1NYXRoLmFicyhDKS8oaS80KTtNYXRoLmFicygxLUwpPDFlLTcmJihMPTEpO3ZhciB6PU1hdGgubWF4KE1hdGguY2VpbChMKSwxKTtDLz16O2Zvcih2YXIgTz0wO088ejtPKyspeS5wdXNoKG8oRSxDKSksRSs9QztyZXR1cm4geS5tYXAoZnVuY3Rpb24odCl7dmFyIGU9YSh0WzBdLHUsaCxiLHgsTSxTKSxyPWUueCxuPWUueSxpPWEodFsxXSx1LGgsYix4LE0sUyksbz1pLngscz1pLnksbD1hKHRbMl0sdSxoLGIseCxNLFMpO3JldHVybnt4MTpyLHkxOm4seDI6byx5MjpzLHg6bC54LHk6bC55fX0pfSxlLmV4cG9ydHM9ci5kZWZhdWx0fSx7fV0sNTE4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInBhcnNlLXN2Zy1wYXRoXCIpLGk9dChcImFicy1zdmctcGF0aFwiKSxhPXQoXCJub3JtYWxpemUtc3ZnLXBhdGhcIiksbz10KFwiaXMtc3ZnLXBhdGhcIikscz10KFwiYXNzZXJ0XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtBcnJheS5pc0FycmF5KHQpJiYxPT09dC5sZW5ndGgmJlwic3RyaW5nXCI9PXR5cGVvZiB0WzBdJiYodD10WzBdKTtcInN0cmluZ1wiPT10eXBlb2YgdCYmKHMobyh0KSxcIlN0cmluZyBpcyBub3QgYW4gU1ZHIHBhdGguXCIpLHQ9bih0KSk7aWYocyhBcnJheS5pc0FycmF5KHQpLFwiQXJndW1lbnQgc2hvdWxkIGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHBhdGggc2VnbWVudHMuXCIpLHQ9aSh0KSwhKHQ9YSh0KSkubGVuZ3RoKXJldHVyblswLDAsMCwwXTtmb3IodmFyIGU9WzEvMCwxLzAsLTEvMCwtMS8wXSxyPTAsbD10Lmxlbmd0aDtyPGw7cisrKWZvcih2YXIgYz10W3JdLnNsaWNlKDEpLHU9MDt1PGMubGVuZ3RoO3UrPTIpY1t1KzBdPGVbMF0mJihlWzBdPWNbdSswXSksY1t1KzFdPGVbMV0mJihlWzFdPWNbdSsxXSksY1t1KzBdPmVbMl0mJihlWzJdPWNbdSswXSksY1t1KzFdPmVbM10mJihlWzNdPWNbdSsxXSk7cmV0dXJuIGV9fSx7XCJhYnMtc3ZnLXBhdGhcIjo1MSxhc3NlcnQ6NTksXCJpcy1zdmctcGF0aFwiOjQxNyxcIm5vcm1hbGl6ZS1zdmctcGF0aFwiOjUxOSxcInBhcnNlLXN2Zy1wYXRoXCI6NDUzfV0sNTE5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPVtdLG89MCxzPTAsbD0wLGM9MCx1PW51bGwsaD1udWxsLGY9MCxwPTAsZD0wLGc9dC5sZW5ndGg7ZDxnO2QrKyl7dmFyIHY9dFtkXSxtPXZbMF07c3dpdGNoKG0pe2Nhc2VcIk1cIjpsPXZbMV0sYz12WzJdO2JyZWFrO2Nhc2VcIkFcIjp2YXIgeT1uKHtweDpmLHB5OnAsY3g6dls2XSxjeTp2WzddLHJ4OnZbMV0scnk6dlsyXSx4QXhpc1JvdGF0aW9uOnZbM10sbGFyZ2VBcmNGbGFnOnZbNF0sc3dlZXBGbGFnOnZbNV19KTtpZigheS5sZW5ndGgpY29udGludWU7Zm9yKHZhciB4LGI9MDtiPHkubGVuZ3RoO2IrKyl4PXlbYl0sdj1bXCJDXCIseC54MSx4LnkxLHgueDIseC55Mix4LngseC55XSxiPHkubGVuZ3RoLTEmJnIucHVzaCh2KTticmVhaztjYXNlXCJTXCI6dmFyIF89Zix3PXA7XCJDXCIhPWUmJlwiU1wiIT1lfHwoXys9Xy1vLHcrPXctcyksdj1bXCJDXCIsXyx3LHZbMV0sdlsyXSx2WzNdLHZbNF1dO2JyZWFrO2Nhc2VcIlRcIjpcIlFcIj09ZXx8XCJUXCI9PWU/KHU9MipmLXUsaD0yKnAtaCk6KHU9ZixoPXApLHY9YShmLHAsdSxoLHZbMV0sdlsyXSk7YnJlYWs7Y2FzZVwiUVwiOnU9dlsxXSxoPXZbMl0sdj1hKGYscCx2WzFdLHZbMl0sdlszXSx2WzRdKTticmVhaztjYXNlXCJMXCI6dj1pKGYscCx2WzFdLHZbMl0pO2JyZWFrO2Nhc2VcIkhcIjp2PWkoZixwLHZbMV0scCk7YnJlYWs7Y2FzZVwiVlwiOnY9aShmLHAsZix2WzFdKTticmVhaztjYXNlXCJaXCI6dj1pKGYscCxsLGMpfWU9bSxmPXZbdi5sZW5ndGgtMl0scD12W3YubGVuZ3RoLTFdLHYubGVuZ3RoPjQ/KG89dlt2Lmxlbmd0aC00XSxzPXZbdi5sZW5ndGgtM10pOihvPWYscz1wKSxyLnB1c2godil9cmV0dXJuIHJ9O3ZhciBuPXQoXCJzdmctYXJjLXRvLWN1YmljLWJlemllclwiKTtmdW5jdGlvbiBpKHQsZSxyLG4pe3JldHVybltcIkNcIix0LGUscixuLHIsbl19ZnVuY3Rpb24gYSh0LGUscixuLGksYSl7cmV0dXJuW1wiQ1wiLHQvMysyLzMqcixlLzMrMi8zKm4saS8zKzIvMypyLGEvMysyLzMqbixpLGFdfX0se1wic3ZnLWFyYy10by1jdWJpYy1iZXppZXJcIjo1MTd9XSw1MjA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbixpPXQoXCJzdmctcGF0aC1ib3VuZHNcIiksYT10KFwicGFyc2Utc3ZnLXBhdGhcIiksbz10KFwiZHJhdy1zdmctcGF0aFwiKSxzPXQoXCJpcy1zdmctcGF0aFwiKSxsPXQoXCJiaXRtYXAtc2RmXCIpLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSx1PWMuZ2V0Q29udGV4dChcIjJkXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCFzKHQpKXRocm93IEVycm9yKFwiQXJndW1lbnQgc2hvdWxkIGJlIHZhbGlkIHN2ZyBwYXRoIHN0cmluZ1wiKTtlfHwoZT17fSk7dmFyIHIsaDtlLnNoYXBlPyhyPWUuc2hhcGVbMF0saD1lLnNoYXBlWzFdKToocj1jLndpZHRoPWUud3x8ZS53aWR0aHx8MjAwLGg9Yy5oZWlnaHQ9ZS5ofHxlLmhlaWdodHx8MjAwKTt2YXIgZj1NYXRoLm1pbihyLGgpLHA9ZS5zdHJva2V8fDAsZD1lLnZpZXdib3h8fGUudmlld0JveHx8aSh0KSxnPVtyLyhkWzJdLWRbMF0pLGgvKGRbM10tZFsxXSldLHY9TWF0aC5taW4oZ1swXXx8MCxnWzFdfHwwKS8yO3UuZmlsbFN0eWxlPVwiYmxhY2tcIix1LmZpbGxSZWN0KDAsMCxyLGgpLHUuZmlsbFN0eWxlPVwid2hpdGVcIixwJiYoXCJudW1iZXJcIiE9dHlwZW9mIHAmJihwPTEpLHUuc3Ryb2tlU3R5bGU9cD4wP1wid2hpdGVcIjpcImJsYWNrXCIsdS5saW5lV2lkdGg9TWF0aC5hYnMocCkpO2lmKHUudHJhbnNsYXRlKC41KnIsLjUqaCksdS5zY2FsZSh2LHYpLGZ1bmN0aW9uKCl7aWYobnVsbCE9bilyZXR1cm4gbjt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLmdldENvbnRleHQoXCIyZFwiKTtpZih0LmNhbnZhcy53aWR0aD10LmNhbnZhcy5oZWlnaHQ9MSwhd2luZG93LlBhdGgyRClyZXR1cm4gbj0hMTt2YXIgZT1uZXcgUGF0aDJEKFwiTTAsMGgxdjFoLTF2LTFaXCIpO3QuZmlsbFN0eWxlPVwiYmxhY2tcIix0LmZpbGwoZSk7dmFyIHI9dC5nZXRJbWFnZURhdGEoMCwwLDEsMSk7cmV0dXJuIG49ciYmci5kYXRhJiYyNTU9PT1yLmRhdGFbM119KCkpe3ZhciBtPW5ldyBQYXRoMkQodCk7dS5maWxsKG0pLHAmJnUuc3Ryb2tlKG0pfWVsc2V7dmFyIHk9YSh0KTtvKHUseSksdS5maWxsKCkscCYmdS5zdHJva2UoKX1yZXR1cm4gdS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGwodSx7Y3V0b2ZmOm51bGwhPWUuY3V0b2ZmP2UuY3V0b2ZmOi41LHJhZGl1czpudWxsIT1lLnJhZGl1cz9lLnJhZGl1czouNSpmfSl9fSx7XCJiaXRtYXAtc2RmXCI6ODQsXCJkcmF3LXN2Zy1wYXRoXCI6MTYwLFwiaXMtc3ZnLXBhdGhcIjo0MTcsXCJwYXJzZS1zdmctcGF0aFwiOjQ1MyxcInN2Zy1wYXRoLWJvdW5kc1wiOjUxOH1dLDUyMTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24gdChlLHIsaSl7dmFyIGk9aXx8e307dmFyIG89YVtlXTtvfHwobz1hW2VdPXtcIiBcIjp7ZGF0YTpuZXcgRmxvYXQzMkFycmF5KDApLHNoYXBlOi4yfX0pO3ZhciBzPW9bcl07aWYoIXMpaWYoci5sZW5ndGg8PTF8fCEvXFxkLy50ZXN0KHIpKXM9b1tyXT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jZWxscyxyPXQucG9zaXRpb25zLG49bmV3IEZsb2F0MzJBcnJheSg2KmUubGVuZ3RoKSxpPTAsYT0wLG89MDtvPGUubGVuZ3RoOysrbylmb3IodmFyIHM9ZVtvXSxsPTA7bDwzOysrbCl7dmFyIGM9cltzW2xdXTtuW2krK109Y1swXSxuW2krK109Y1sxXSsxLjQsYT1NYXRoLm1heChjWzBdLGEpfXJldHVybntkYXRhOm4sc2hhcGU6YX19KG4ocix7dHJpYW5nbGVzOiEwLGZvbnQ6ZSx0ZXh0QWxpZ246aS50ZXh0QWxpZ258fFwibGVmdFwiLHRleHRCYXNlbGluZTpcImFscGhhYmV0aWNcIixzdHlsZXRhZ3M6e2JyZWFrbGluZXM6ITAsYm9sZHM6ITAsaXRhbGljczohMCxzdWJzY3JpcHRzOiEwLHN1cGVyc2NyaXB0czohMH19KSk7ZWxzZXtmb3IodmFyIGw9ci5zcGxpdCgvKFxcZHxcXHMpLyksYz1uZXcgQXJyYXkobC5sZW5ndGgpLHU9MCxoPTAsZj0wO2Y8bC5sZW5ndGg7KytmKWNbZl09dChlLGxbZl0pLHUrPWNbZl0uZGF0YS5sZW5ndGgsaCs9Y1tmXS5zaGFwZSxmPjAmJihoKz0uMDIpO2Zvcih2YXIgcD1uZXcgRmxvYXQzMkFycmF5KHUpLGQ9MCxnPS0uNSpoLGY9MDtmPGMubGVuZ3RoOysrZil7Zm9yKHZhciB2PWNbZl0uZGF0YSxtPTA7bTx2Lmxlbmd0aDttKz0yKXBbZCsrXT12W21dK2cscFtkKytdPXZbbSsxXTtnKz1jW2ZdLnNoYXBlKy4wMn1zPW9bcl09e2RhdGE6cCxzaGFwZTpofX1yZXR1cm4gc307dmFyIG49dChcInZlY3Rvcml6ZS10ZXh0XCIpLGk9d2luZG93fHxyLmdsb2JhbHx8e30sYT1pLl9fVEVYVF9DQUNIRXx8e307aS5fX1RFWFRfQ0FDSEU9e319KS5jYWxsKHRoaXMsdChcIl9wcm9jZXNzXCIpKX0se19wcm9jZXNzOjQ3NSxcInZlY3Rvcml6ZS10ZXh0XCI6NTM1fV0sNTIyOltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQpe3ZhciByPS9eXFxzKy8sbj0vXFxzKyQvLGk9MCxhPXQucm91bmQsbz10Lm1pbixzPXQubWF4LGw9dC5yYW5kb207ZnVuY3Rpb24gYyhlLGwpe2lmKGw9bHx8e30sKGU9ZXx8XCJcIilpbnN0YW5jZW9mIGMpcmV0dXJuIGU7aWYoISh0aGlzIGluc3RhbmNlb2YgYykpcmV0dXJuIG5ldyBjKGUsbCk7dmFyIHU9ZnVuY3Rpb24oZSl7dmFyIGk9e3I6MCxnOjAsYjowfSxhPTEsbD1udWxsLGM9bnVsbCx1PW51bGwsaD0hMSxmPSExO1wic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1mdW5jdGlvbih0KXt0PXQucmVwbGFjZShyLFwiXCIpLnJlcGxhY2UobixcIlwiKS50b0xvd2VyQ2FzZSgpO3ZhciBlLGk9ITE7aWYoU1t0XSl0PVNbdF0saT0hMDtlbHNlIGlmKFwidHJhbnNwYXJlbnRcIj09dClyZXR1cm57cjowLGc6MCxiOjAsYTowLGZvcm1hdDpcIm5hbWVcIn07aWYoZT1qLnJnYi5leGVjKHQpKXJldHVybntyOmVbMV0sZzplWzJdLGI6ZVszXX07aWYoZT1qLnJnYmEuZXhlYyh0KSlyZXR1cm57cjplWzFdLGc6ZVsyXSxiOmVbM10sYTplWzRdfTtpZihlPWouaHNsLmV4ZWModCkpcmV0dXJue2g6ZVsxXSxzOmVbMl0sbDplWzNdfTtpZihlPWouaHNsYS5leGVjKHQpKXJldHVybntoOmVbMV0sczplWzJdLGw6ZVszXSxhOmVbNF19O2lmKGU9ai5oc3YuZXhlYyh0KSlyZXR1cm57aDplWzFdLHM6ZVsyXSx2OmVbM119O2lmKGU9ai5oc3ZhLmV4ZWModCkpcmV0dXJue2g6ZVsxXSxzOmVbMl0sdjplWzNdLGE6ZVs0XX07aWYoZT1qLmhleDguZXhlYyh0KSlyZXR1cm57cjpPKGVbMV0pLGc6TyhlWzJdKSxiOk8oZVszXSksYTpSKGVbNF0pLGZvcm1hdDppP1wibmFtZVwiOlwiaGV4OFwifTtpZihlPWouaGV4Ni5leGVjKHQpKXJldHVybntyOk8oZVsxXSksZzpPKGVbMl0pLGI6TyhlWzNdKSxmb3JtYXQ6aT9cIm5hbWVcIjpcImhleFwifTtpZihlPWouaGV4NC5leGVjKHQpKXJldHVybntyOk8oZVsxXStcIlwiK2VbMV0pLGc6TyhlWzJdK1wiXCIrZVsyXSksYjpPKGVbM10rXCJcIitlWzNdKSxhOlIoZVs0XStcIlwiK2VbNF0pLGZvcm1hdDppP1wibmFtZVwiOlwiaGV4OFwifTtpZihlPWouaGV4My5leGVjKHQpKXJldHVybntyOk8oZVsxXStcIlwiK2VbMV0pLGc6TyhlWzJdK1wiXCIrZVsyXSksYjpPKGVbM10rXCJcIitlWzNdKSxmb3JtYXQ6aT9cIm5hbWVcIjpcImhleFwifTtyZXR1cm4hMX0oZSkpO1wib2JqZWN0XCI9PXR5cGVvZiBlJiYoVihlLnIpJiZWKGUuZykmJlYoZS5iKT8ocD1lLnIsZD1lLmcsZz1lLmIsaT17cjoyNTUqTChwLDI1NSksZzoyNTUqTChkLDI1NSksYjoyNTUqTChnLDI1NSl9LGg9ITAsZj1cIiVcIj09PVN0cmluZyhlLnIpLnN1YnN0cigtMSk/XCJwcmdiXCI6XCJyZ2JcIik6VihlLmgpJiZWKGUucykmJlYoZS52KT8obD1EKGUucyksYz1EKGUudiksaT1mdW5jdGlvbihlLHIsbil7ZT02KkwoZSwzNjApLHI9TChyLDEwMCksbj1MKG4sMTAwKTt2YXIgaT10LmZsb29yKGUpLGE9ZS1pLG89biooMS1yKSxzPW4qKDEtYSpyKSxsPW4qKDEtKDEtYSkqciksYz1pJTY7cmV0dXJue3I6MjU1KltuLHMsbyxvLGwsbl1bY10sZzoyNTUqW2wsbixuLHMsbyxvXVtjXSxiOjI1NSpbbyxvLGwsbixuLHNdW2NdfX0oZS5oLGwsYyksaD0hMCxmPVwiaHN2XCIpOlYoZS5oKSYmVihlLnMpJiZWKGUubCkmJihsPUQoZS5zKSx1PUQoZS5sKSxpPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE7ZnVuY3Rpb24gbyh0LGUscil7cmV0dXJuIHI8MCYmKHIrPTEpLHI+MSYmKHItPTEpLHI8MS82P3QrNiooZS10KSpyOnI8LjU/ZTpyPDIvMz90KyhlLXQpKigyLzMtcikqNjp0fWlmKHQ9TCh0LDM2MCksZT1MKGUsMTAwKSxyPUwociwxMDApLDA9PT1lKW49aT1hPXI7ZWxzZXt2YXIgcz1yPC41P3IqKDErZSk6citlLXIqZSxsPTIqci1zO249byhsLHMsdCsxLzMpLGk9byhsLHMsdCksYT1vKGwscyx0LTEvMyl9cmV0dXJue3I6MjU1Km4sZzoyNTUqaSxiOjI1NSphfX0oZS5oLGwsdSksaD0hMCxmPVwiaHNsXCIpLGUuaGFzT3duUHJvcGVydHkoXCJhXCIpJiYoYT1lLmEpKTt2YXIgcCxkLGc7cmV0dXJuIGE9QyhhKSx7b2s6aCxmb3JtYXQ6ZS5mb3JtYXR8fGYscjpvKDI1NSxzKGkuciwwKSksZzpvKDI1NSxzKGkuZywwKSksYjpvKDI1NSxzKGkuYiwwKSksYTphfX0oZSk7dGhpcy5fb3JpZ2luYWxJbnB1dD1lLHRoaXMuX3I9dS5yLHRoaXMuX2c9dS5nLHRoaXMuX2I9dS5iLHRoaXMuX2E9dS5hLHRoaXMuX3JvdW5kQT1hKDEwMCp0aGlzLl9hKS8xMDAsdGhpcy5fZm9ybWF0PWwuZm9ybWF0fHx1LmZvcm1hdCx0aGlzLl9ncmFkaWVudFR5cGU9bC5ncmFkaWVudFR5cGUsdGhpcy5fcjwxJiYodGhpcy5fcj1hKHRoaXMuX3IpKSx0aGlzLl9nPDEmJih0aGlzLl9nPWEodGhpcy5fZykpLHRoaXMuX2I8MSYmKHRoaXMuX2I9YSh0aGlzLl9iKSksdGhpcy5fb2s9dS5vayx0aGlzLl90Y19pZD1pKyt9ZnVuY3Rpb24gdSh0LGUscil7dD1MKHQsMjU1KSxlPUwoZSwyNTUpLHI9TChyLDI1NSk7dmFyIG4saSxhPXModCxlLHIpLGw9byh0LGUsciksYz0oYStsKS8yO2lmKGE9PWwpbj1pPTA7ZWxzZXt2YXIgdT1hLWw7c3dpdGNoKGk9Yz4uNT91LygyLWEtbCk6dS8oYStsKSxhKXtjYXNlIHQ6bj0oZS1yKS91KyhlPHI/NjowKTticmVhaztjYXNlIGU6bj0oci10KS91KzI7YnJlYWs7Y2FzZSByOm49KHQtZSkvdSs0fW4vPTZ9cmV0dXJue2g6bixzOmksbDpjfX1mdW5jdGlvbiBoKHQsZSxyKXt0PUwodCwyNTUpLGU9TChlLDI1NSkscj1MKHIsMjU1KTt2YXIgbixpLGE9cyh0LGUsciksbD1vKHQsZSxyKSxjPWEsdT1hLWw7aWYoaT0wPT09YT8wOnUvYSxhPT1sKW49MDtlbHNle3N3aXRjaChhKXtjYXNlIHQ6bj0oZS1yKS91KyhlPHI/NjowKTticmVhaztjYXNlIGU6bj0oci10KS91KzI7YnJlYWs7Y2FzZSByOm49KHQtZSkvdSs0fW4vPTZ9cmV0dXJue2g6bixzOmksdjpjfX1mdW5jdGlvbiBmKHQsZSxyLG4pe3ZhciBpPVtJKGEodCkudG9TdHJpbmcoMTYpKSxJKGEoZSkudG9TdHJpbmcoMTYpKSxJKGEocikudG9TdHJpbmcoMTYpKV07cmV0dXJuIG4mJmlbMF0uY2hhckF0KDApPT1pWzBdLmNoYXJBdCgxKSYmaVsxXS5jaGFyQXQoMCk9PWlbMV0uY2hhckF0KDEpJiZpWzJdLmNoYXJBdCgwKT09aVsyXS5jaGFyQXQoMSk/aVswXS5jaGFyQXQoMCkraVsxXS5jaGFyQXQoMCkraVsyXS5jaGFyQXQoMCk6aS5qb2luKFwiXCIpfWZ1bmN0aW9uIHAodCxlLHIsbil7cmV0dXJuW0koUChuKSksSShhKHQpLnRvU3RyaW5nKDE2KSksSShhKGUpLnRvU3RyaW5nKDE2KSksSShhKHIpLnRvU3RyaW5nKDE2KSldLmpvaW4oXCJcIil9ZnVuY3Rpb24gZCh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1jKHQpLnRvSHNsKCk7cmV0dXJuIHIucy09ZS8xMDAsci5zPXooci5zKSxjKHIpfWZ1bmN0aW9uIGcodCxlKXtlPTA9PT1lPzA6ZXx8MTA7dmFyIHI9Yyh0KS50b0hzbCgpO3JldHVybiByLnMrPWUvMTAwLHIucz16KHIucyksYyhyKX1mdW5jdGlvbiB2KHQpe3JldHVybiBjKHQpLmRlc2F0dXJhdGUoMTAwKX1mdW5jdGlvbiBtKHQsZSl7ZT0wPT09ZT8wOmV8fDEwO3ZhciByPWModCkudG9Ic2woKTtyZXR1cm4gci5sKz1lLzEwMCxyLmw9eihyLmwpLGMocil9ZnVuY3Rpb24geSh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1jKHQpLnRvUmdiKCk7cmV0dXJuIHIucj1zKDAsbygyNTUsci5yLWEoLWUvMTAwKjI1NSkpKSxyLmc9cygwLG8oMjU1LHIuZy1hKC1lLzEwMCoyNTUpKSksci5iPXMoMCxvKDI1NSxyLmItYSgtZS8xMDAqMjU1KSkpLGMocil9ZnVuY3Rpb24geCh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1jKHQpLnRvSHNsKCk7cmV0dXJuIHIubC09ZS8xMDAsci5sPXooci5sKSxjKHIpfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj1jKHQpLnRvSHNsKCksbj0oci5oK2UpJTM2MDtyZXR1cm4gci5oPW48MD8zNjArbjpuLGMocil9ZnVuY3Rpb24gXyh0KXt2YXIgZT1jKHQpLnRvSHNsKCk7cmV0dXJuIGUuaD0oZS5oKzE4MCklMzYwLGMoZSl9ZnVuY3Rpb24gdyh0KXt2YXIgZT1jKHQpLnRvSHNsKCkscj1lLmg7cmV0dXJuW2ModCksYyh7aDoocisxMjApJTM2MCxzOmUucyxsOmUubH0pLGMoe2g6KHIrMjQwKSUzNjAsczplLnMsbDplLmx9KV19ZnVuY3Rpb24gayh0KXt2YXIgZT1jKHQpLnRvSHNsKCkscj1lLmg7cmV0dXJuW2ModCksYyh7aDoocis5MCklMzYwLHM6ZS5zLGw6ZS5sfSksYyh7aDoocisxODApJTM2MCxzOmUucyxsOmUubH0pLGMoe2g6KHIrMjcwKSUzNjAsczplLnMsbDplLmx9KV19ZnVuY3Rpb24gQSh0KXt2YXIgZT1jKHQpLnRvSHNsKCkscj1lLmg7cmV0dXJuW2ModCksYyh7aDoocis3MiklMzYwLHM6ZS5zLGw6ZS5sfSksYyh7aDoocisyMTYpJTM2MCxzOmUucyxsOmUubH0pXX1mdW5jdGlvbiBUKHQsZSxyKXtlPWV8fDYscj1yfHwzMDt2YXIgbj1jKHQpLnRvSHNsKCksaT0zNjAvcixhPVtjKHQpXTtmb3Iobi5oPShuLmgtKGkqZT4+MSkrNzIwKSUzNjA7LS1lOyluLmg9KG4uaCtpKSUzNjAsYS5wdXNoKGMobikpO3JldHVybiBhfWZ1bmN0aW9uIE0odCxlKXtlPWV8fDY7Zm9yKHZhciByPWModCkudG9Ic3YoKSxuPXIuaCxpPXIucyxhPXIudixvPVtdLHM9MS9lO2UtLTspby5wdXNoKGMoe2g6bixzOmksdjphfSkpLGE9KGErcyklMTtyZXR1cm4gb31jLnByb3RvdHlwZT17aXNEYXJrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnJpZ2h0bmVzcygpPDEyOH0saXNMaWdodDpmdW5jdGlvbigpe3JldHVybiF0aGlzLmlzRGFyaygpfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29rfSxnZXRPcmlnaW5hbElucHV0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWdpbmFsSW5wdXR9LGdldEZvcm1hdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb3JtYXR9LGdldEFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F9LGdldEJyaWdodG5lc3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRvUmdiKCk7cmV0dXJuKDI5OSp0LnIrNTg3KnQuZysxMTQqdC5iKS8xZTN9LGdldEx1bWluYW5jZTpmdW5jdGlvbigpe3ZhciBlLHIsbixpPXRoaXMudG9SZ2IoKTtyZXR1cm4gZT1pLnIvMjU1LHI9aS5nLzI1NSxuPWkuYi8yNTUsLjIxMjYqKGU8PS4wMzkyOD9lLzEyLjkyOnQucG93KChlKy4wNTUpLzEuMDU1LDIuNCkpKy43MTUyKihyPD0uMDM5Mjg/ci8xMi45Mjp0LnBvdygocisuMDU1KS8xLjA1NSwyLjQpKSsuMDcyMioobjw9LjAzOTI4P24vMTIuOTI6dC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KSl9LHNldEFscGhhOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hPUModCksdGhpcy5fcm91bmRBPWEoMTAwKnRoaXMuX2EpLzEwMCx0aGlzfSx0b0hzdjpmdW5jdGlvbigpe3ZhciB0PWgodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpO3JldHVybntoOjM2MCp0Lmgsczp0LnMsdjp0LnYsYTp0aGlzLl9hfX0sdG9Ic3ZTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD1oKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKSxlPWEoMzYwKnQuaCkscj1hKDEwMCp0LnMpLG49YSgxMDAqdC52KTtyZXR1cm4gMT09dGhpcy5fYT9cImhzdihcIitlK1wiLCBcIityK1wiJSwgXCIrbitcIiUpXCI6XCJoc3ZhKFwiK2UrXCIsIFwiK3IrXCIlLCBcIituK1wiJSwgXCIrdGhpcy5fcm91bmRBK1wiKVwifSx0b0hzbDpmdW5jdGlvbigpe3ZhciB0PXUodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpO3JldHVybntoOjM2MCp0Lmgsczp0LnMsbDp0LmwsYTp0aGlzLl9hfX0sdG9Ic2xTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD11KHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKSxlPWEoMzYwKnQuaCkscj1hKDEwMCp0LnMpLG49YSgxMDAqdC5sKTtyZXR1cm4gMT09dGhpcy5fYT9cImhzbChcIitlK1wiLCBcIityK1wiJSwgXCIrbitcIiUpXCI6XCJoc2xhKFwiK2UrXCIsIFwiK3IrXCIlLCBcIituK1wiJSwgXCIrdGhpcy5fcm91bmRBK1wiKVwifSx0b0hleDpmdW5jdGlvbih0KXtyZXR1cm4gZih0aGlzLl9yLHRoaXMuX2csdGhpcy5fYix0KX0sdG9IZXhTdHJpbmc6ZnVuY3Rpb24odCl7cmV0dXJuXCIjXCIrdGhpcy50b0hleCh0KX0sdG9IZXg4OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGkpe3ZhciBvPVtJKGEodCkudG9TdHJpbmcoMTYpKSxJKGEoZSkudG9TdHJpbmcoMTYpKSxJKGEocikudG9TdHJpbmcoMTYpKSxJKFAobikpXTtpZihpJiZvWzBdLmNoYXJBdCgwKT09b1swXS5jaGFyQXQoMSkmJm9bMV0uY2hhckF0KDApPT1vWzFdLmNoYXJBdCgxKSYmb1syXS5jaGFyQXQoMCk9PW9bMl0uY2hhckF0KDEpJiZvWzNdLmNoYXJBdCgwKT09b1szXS5jaGFyQXQoMSkpcmV0dXJuIG9bMF0uY2hhckF0KDApK29bMV0uY2hhckF0KDApK29bMl0uY2hhckF0KDApK29bM10uY2hhckF0KDApO3JldHVybiBvLmpvaW4oXCJcIil9KHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLHRoaXMuX2EsdCl9LHRvSGV4OFN0cmluZzpmdW5jdGlvbih0KXtyZXR1cm5cIiNcIit0aGlzLnRvSGV4OCh0KX0sdG9SZ2I6ZnVuY3Rpb24oKXtyZXR1cm57cjphKHRoaXMuX3IpLGc6YSh0aGlzLl9nKSxiOmEodGhpcy5fYiksYTp0aGlzLl9hfX0sdG9SZ2JTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMT09dGhpcy5fYT9cInJnYihcIithKHRoaXMuX3IpK1wiLCBcIithKHRoaXMuX2cpK1wiLCBcIithKHRoaXMuX2IpK1wiKVwiOlwicmdiYShcIithKHRoaXMuX3IpK1wiLCBcIithKHRoaXMuX2cpK1wiLCBcIithKHRoaXMuX2IpK1wiLCBcIit0aGlzLl9yb3VuZEErXCIpXCJ9LHRvUGVyY2VudGFnZVJnYjpmdW5jdGlvbigpe3JldHVybntyOmEoMTAwKkwodGhpcy5fciwyNTUpKStcIiVcIixnOmEoMTAwKkwodGhpcy5fZywyNTUpKStcIiVcIixiOmEoMTAwKkwodGhpcy5fYiwyNTUpKStcIiVcIixhOnRoaXMuX2F9fSx0b1BlcmNlbnRhZ2VSZ2JTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMT09dGhpcy5fYT9cInJnYihcIithKDEwMCpMKHRoaXMuX3IsMjU1KSkrXCIlLCBcIithKDEwMCpMKHRoaXMuX2csMjU1KSkrXCIlLCBcIithKDEwMCpMKHRoaXMuX2IsMjU1KSkrXCIlKVwiOlwicmdiYShcIithKDEwMCpMKHRoaXMuX3IsMjU1KSkrXCIlLCBcIithKDEwMCpMKHRoaXMuX2csMjU1KSkrXCIlLCBcIithKDEwMCpMKHRoaXMuX2IsMjU1KSkrXCIlLCBcIit0aGlzLl9yb3VuZEErXCIpXCJ9LHRvTmFtZTpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5fYT9cInRyYW5zcGFyZW50XCI6ISh0aGlzLl9hPDEpJiYoRVtmKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLCEwKV18fCExKX0sdG9GaWx0ZXI6ZnVuY3Rpb24odCl7dmFyIGU9XCIjXCIrcCh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYix0aGlzLl9hKSxyPWUsbj10aGlzLl9ncmFkaWVudFR5cGU/XCJHcmFkaWVudFR5cGUgPSAxLCBcIjpcIlwiO2lmKHQpe3ZhciBpPWModCk7cj1cIiNcIitwKGkuX3IsaS5fZyxpLl9iLGkuX2EpfXJldHVyblwicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KFwiK24rXCJzdGFydENvbG9yc3RyPVwiK2UrXCIsZW5kQ29sb3JzdHI9XCIrcitcIilcIn0sdG9TdHJpbmc6ZnVuY3Rpb24odCl7dmFyIGU9ISF0O3Q9dHx8dGhpcy5fZm9ybWF0O3ZhciByPSExLG49dGhpcy5fYTwxJiZ0aGlzLl9hPj0wO3JldHVybiBlfHwhbnx8XCJoZXhcIiE9PXQmJlwiaGV4NlwiIT09dCYmXCJoZXgzXCIhPT10JiZcImhleDRcIiE9PXQmJlwiaGV4OFwiIT09dCYmXCJuYW1lXCIhPT10PyhcInJnYlwiPT09dCYmKHI9dGhpcy50b1JnYlN0cmluZygpKSxcInByZ2JcIj09PXQmJihyPXRoaXMudG9QZXJjZW50YWdlUmdiU3RyaW5nKCkpLFwiaGV4XCIhPT10JiZcImhleDZcIiE9PXR8fChyPXRoaXMudG9IZXhTdHJpbmcoKSksXCJoZXgzXCI9PT10JiYocj10aGlzLnRvSGV4U3RyaW5nKCEwKSksXCJoZXg0XCI9PT10JiYocj10aGlzLnRvSGV4OFN0cmluZyghMCkpLFwiaGV4OFwiPT09dCYmKHI9dGhpcy50b0hleDhTdHJpbmcoKSksXCJuYW1lXCI9PT10JiYocj10aGlzLnRvTmFtZSgpKSxcImhzbFwiPT09dCYmKHI9dGhpcy50b0hzbFN0cmluZygpKSxcImhzdlwiPT09dCYmKHI9dGhpcy50b0hzdlN0cmluZygpKSxyfHx0aGlzLnRvSGV4U3RyaW5nKCkpOlwibmFtZVwiPT09dCYmMD09PXRoaXMuX2E/dGhpcy50b05hbWUoKTp0aGlzLnRvUmdiU3RyaW5nKCl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIGModGhpcy50b1N0cmluZygpKX0sX2FwcGx5TW9kaWZpY2F0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5hcHBseShudWxsLFt0aGlzXS5jb25jYXQoW10uc2xpY2UuY2FsbChlKSkpO3JldHVybiB0aGlzLl9yPXIuX3IsdGhpcy5fZz1yLl9nLHRoaXMuX2I9ci5fYix0aGlzLnNldEFscGhhKHIuX2EpLHRoaXN9LGxpZ2h0ZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24obSxhcmd1bWVudHMpfSxicmlnaHRlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbih5LGFyZ3VtZW50cyl9LGRhcmtlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbih4LGFyZ3VtZW50cyl9LGRlc2F0dXJhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oZCxhcmd1bWVudHMpfSxzYXR1cmF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihnLGFyZ3VtZW50cyl9LGdyZXlzY2FsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbih2LGFyZ3VtZW50cyl9LHNwaW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oYixhcmd1bWVudHMpfSxfYXBwbHlDb21iaW5hdGlvbjpmdW5jdGlvbih0LGUpe3JldHVybiB0LmFwcGx5KG51bGwsW3RoaXNdLmNvbmNhdChbXS5zbGljZS5jYWxsKGUpKSl9LGFuYWxvZ291czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKFQsYXJndW1lbnRzKX0sY29tcGxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKF8sYXJndW1lbnRzKX0sbW9ub2Nocm9tYXRpYzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKE0sYXJndW1lbnRzKX0sc3BsaXRjb21wbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oQSxhcmd1bWVudHMpfSx0cmlhZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKHcsYXJndW1lbnRzKX0sdGV0cmFkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oayxhcmd1bWVudHMpfX0sYy5mcm9tUmF0aW89ZnVuY3Rpb24odCxlKXtpZihcIm9iamVjdFwiPT10eXBlb2YgdCl7dmFyIHI9e307Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKHJbbl09XCJhXCI9PT1uP3Rbbl06RCh0W25dKSk7dD1yfXJldHVybiBjKHQsZSl9LGMuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuISghdHx8IWUpJiZjKHQpLnRvUmdiU3RyaW5nKCk9PWMoZSkudG9SZ2JTdHJpbmcoKX0sYy5yYW5kb209ZnVuY3Rpb24oKXtyZXR1cm4gYy5mcm9tUmF0aW8oe3I6bCgpLGc6bCgpLGI6bCgpfSl9LGMubWl4PWZ1bmN0aW9uKHQsZSxyKXtyPTA9PT1yPzA6cnx8NTA7dmFyIG49Yyh0KS50b1JnYigpLGk9YyhlKS50b1JnYigpLGE9ci8xMDA7cmV0dXJuIGMoe3I6KGkuci1uLnIpKmErbi5yLGc6KGkuZy1uLmcpKmErbi5nLGI6KGkuYi1uLmIpKmErbi5iLGE6KGkuYS1uLmEpKmErbi5hfSl9LGMucmVhZGFiaWxpdHk9ZnVuY3Rpb24oZSxyKXt2YXIgbj1jKGUpLGk9YyhyKTtyZXR1cm4odC5tYXgobi5nZXRMdW1pbmFuY2UoKSxpLmdldEx1bWluYW5jZSgpKSsuMDUpLyh0Lm1pbihuLmdldEx1bWluYW5jZSgpLGkuZ2V0THVtaW5hbmNlKCkpKy4wNSl9LGMuaXNSZWFkYWJsZT1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhPWMucmVhZGFiaWxpdHkodCxlKTtzd2l0Y2goaT0hMSwobj1mdW5jdGlvbih0KXt2YXIgZSxyO2U9KCh0PXR8fHtsZXZlbDpcIkFBXCIsc2l6ZTpcInNtYWxsXCJ9KS5sZXZlbHx8XCJBQVwiKS50b1VwcGVyQ2FzZSgpLHI9KHQuc2l6ZXx8XCJzbWFsbFwiKS50b0xvd2VyQ2FzZSgpLFwiQUFcIiE9PWUmJlwiQUFBXCIhPT1lJiYoZT1cIkFBXCIpO1wic21hbGxcIiE9PXImJlwibGFyZ2VcIiE9PXImJihyPVwic21hbGxcIik7cmV0dXJue2xldmVsOmUsc2l6ZTpyfX0ocikpLmxldmVsK24uc2l6ZSl7Y2FzZVwiQUFzbWFsbFwiOmNhc2VcIkFBQWxhcmdlXCI6aT1hPj00LjU7YnJlYWs7Y2FzZVwiQUFsYXJnZVwiOmk9YT49MzticmVhaztjYXNlXCJBQUFzbWFsbFwiOmk9YT49N31yZXR1cm4gaX0sYy5tb3N0UmVhZGFibGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHM9bnVsbCxsPTA7aT0ocj1yfHx7fSkuaW5jbHVkZUZhbGxiYWNrQ29sb3JzLGE9ci5sZXZlbCxvPXIuc2l6ZTtmb3IodmFyIHU9MDt1PGUubGVuZ3RoO3UrKykobj1jLnJlYWRhYmlsaXR5KHQsZVt1XSkpPmwmJihsPW4scz1jKGVbdV0pKTtyZXR1cm4gYy5pc1JlYWRhYmxlKHQscyx7bGV2ZWw6YSxzaXplOm99KXx8IWk/czooci5pbmNsdWRlRmFsbGJhY2tDb2xvcnM9ITEsYy5tb3N0UmVhZGFibGUodCxbXCIjZmZmXCIsXCIjMDAwXCJdLHIpKX07dmFyIFM9Yy5uYW1lcz17YWxpY2VibHVlOlwiZjBmOGZmXCIsYW50aXF1ZXdoaXRlOlwiZmFlYmQ3XCIsYXF1YTpcIjBmZlwiLGFxdWFtYXJpbmU6XCI3ZmZmZDRcIixhenVyZTpcImYwZmZmZlwiLGJlaWdlOlwiZjVmNWRjXCIsYmlzcXVlOlwiZmZlNGM0XCIsYmxhY2s6XCIwMDBcIixibGFuY2hlZGFsbW9uZDpcImZmZWJjZFwiLGJsdWU6XCIwMGZcIixibHVldmlvbGV0OlwiOGEyYmUyXCIsYnJvd246XCJhNTJhMmFcIixidXJseXdvb2Q6XCJkZWI4ODdcIixidXJudHNpZW5uYTpcImVhN2U1ZFwiLGNhZGV0Ymx1ZTpcIjVmOWVhMFwiLGNoYXJ0cmV1c2U6XCI3ZmZmMDBcIixjaG9jb2xhdGU6XCJkMjY5MWVcIixjb3JhbDpcImZmN2Y1MFwiLGNvcm5mbG93ZXJibHVlOlwiNjQ5NWVkXCIsY29ybnNpbGs6XCJmZmY4ZGNcIixjcmltc29uOlwiZGMxNDNjXCIsY3lhbjpcIjBmZlwiLGRhcmtibHVlOlwiMDAwMDhiXCIsZGFya2N5YW46XCIwMDhiOGJcIixkYXJrZ29sZGVucm9kOlwiYjg4NjBiXCIsZGFya2dyYXk6XCJhOWE5YTlcIixkYXJrZ3JlZW46XCIwMDY0MDBcIixkYXJrZ3JleTpcImE5YTlhOVwiLGRhcmtraGFraTpcImJkYjc2YlwiLGRhcmttYWdlbnRhOlwiOGIwMDhiXCIsZGFya29saXZlZ3JlZW46XCI1NTZiMmZcIixkYXJrb3JhbmdlOlwiZmY4YzAwXCIsZGFya29yY2hpZDpcIjk5MzJjY1wiLGRhcmtyZWQ6XCI4YjAwMDBcIixkYXJrc2FsbW9uOlwiZTk5NjdhXCIsZGFya3NlYWdyZWVuOlwiOGZiYzhmXCIsZGFya3NsYXRlYmx1ZTpcIjQ4M2Q4YlwiLGRhcmtzbGF0ZWdyYXk6XCIyZjRmNGZcIixkYXJrc2xhdGVncmV5OlwiMmY0ZjRmXCIsZGFya3R1cnF1b2lzZTpcIjAwY2VkMVwiLGRhcmt2aW9sZXQ6XCI5NDAwZDNcIixkZWVwcGluazpcImZmMTQ5M1wiLGRlZXBza3libHVlOlwiMDBiZmZmXCIsZGltZ3JheTpcIjY5Njk2OVwiLGRpbWdyZXk6XCI2OTY5NjlcIixkb2RnZXJibHVlOlwiMWU5MGZmXCIsZmlyZWJyaWNrOlwiYjIyMjIyXCIsZmxvcmFsd2hpdGU6XCJmZmZhZjBcIixmb3Jlc3RncmVlbjpcIjIyOGIyMlwiLGZ1Y2hzaWE6XCJmMGZcIixnYWluc2Jvcm86XCJkY2RjZGNcIixnaG9zdHdoaXRlOlwiZjhmOGZmXCIsZ29sZDpcImZmZDcwMFwiLGdvbGRlbnJvZDpcImRhYTUyMFwiLGdyYXk6XCI4MDgwODBcIixncmVlbjpcIjAwODAwMFwiLGdyZWVueWVsbG93OlwiYWRmZjJmXCIsZ3JleTpcIjgwODA4MFwiLGhvbmV5ZGV3OlwiZjBmZmYwXCIsaG90cGluazpcImZmNjliNFwiLGluZGlhbnJlZDpcImNkNWM1Y1wiLGluZGlnbzpcIjRiMDA4MlwiLGl2b3J5OlwiZmZmZmYwXCIsa2hha2k6XCJmMGU2OGNcIixsYXZlbmRlcjpcImU2ZTZmYVwiLGxhdmVuZGVyYmx1c2g6XCJmZmYwZjVcIixsYXduZ3JlZW46XCI3Y2ZjMDBcIixsZW1vbmNoaWZmb246XCJmZmZhY2RcIixsaWdodGJsdWU6XCJhZGQ4ZTZcIixsaWdodGNvcmFsOlwiZjA4MDgwXCIsbGlnaHRjeWFuOlwiZTBmZmZmXCIsbGlnaHRnb2xkZW5yb2R5ZWxsb3c6XCJmYWZhZDJcIixsaWdodGdyYXk6XCJkM2QzZDNcIixsaWdodGdyZWVuOlwiOTBlZTkwXCIsbGlnaHRncmV5OlwiZDNkM2QzXCIsbGlnaHRwaW5rOlwiZmZiNmMxXCIsbGlnaHRzYWxtb246XCJmZmEwN2FcIixsaWdodHNlYWdyZWVuOlwiMjBiMmFhXCIsbGlnaHRza3libHVlOlwiODdjZWZhXCIsbGlnaHRzbGF0ZWdyYXk6XCI3ODlcIixsaWdodHNsYXRlZ3JleTpcIjc4OVwiLGxpZ2h0c3RlZWxibHVlOlwiYjBjNGRlXCIsbGlnaHR5ZWxsb3c6XCJmZmZmZTBcIixsaW1lOlwiMGYwXCIsbGltZWdyZWVuOlwiMzJjZDMyXCIsbGluZW46XCJmYWYwZTZcIixtYWdlbnRhOlwiZjBmXCIsbWFyb29uOlwiODAwMDAwXCIsbWVkaXVtYXF1YW1hcmluZTpcIjY2Y2RhYVwiLG1lZGl1bWJsdWU6XCIwMDAwY2RcIixtZWRpdW1vcmNoaWQ6XCJiYTU1ZDNcIixtZWRpdW1wdXJwbGU6XCI5MzcwZGJcIixtZWRpdW1zZWFncmVlbjpcIjNjYjM3MVwiLG1lZGl1bXNsYXRlYmx1ZTpcIjdiNjhlZVwiLG1lZGl1bXNwcmluZ2dyZWVuOlwiMDBmYTlhXCIsbWVkaXVtdHVycXVvaXNlOlwiNDhkMWNjXCIsbWVkaXVtdmlvbGV0cmVkOlwiYzcxNTg1XCIsbWlkbmlnaHRibHVlOlwiMTkxOTcwXCIsbWludGNyZWFtOlwiZjVmZmZhXCIsbWlzdHlyb3NlOlwiZmZlNGUxXCIsbW9jY2FzaW46XCJmZmU0YjVcIixuYXZham93aGl0ZTpcImZmZGVhZFwiLG5hdnk6XCIwMDAwODBcIixvbGRsYWNlOlwiZmRmNWU2XCIsb2xpdmU6XCI4MDgwMDBcIixvbGl2ZWRyYWI6XCI2YjhlMjNcIixvcmFuZ2U6XCJmZmE1MDBcIixvcmFuZ2VyZWQ6XCJmZjQ1MDBcIixvcmNoaWQ6XCJkYTcwZDZcIixwYWxlZ29sZGVucm9kOlwiZWVlOGFhXCIscGFsZWdyZWVuOlwiOThmYjk4XCIscGFsZXR1cnF1b2lzZTpcImFmZWVlZVwiLHBhbGV2aW9sZXRyZWQ6XCJkYjcwOTNcIixwYXBheWF3aGlwOlwiZmZlZmQ1XCIscGVhY2hwdWZmOlwiZmZkYWI5XCIscGVydTpcImNkODUzZlwiLHBpbms6XCJmZmMwY2JcIixwbHVtOlwiZGRhMGRkXCIscG93ZGVyYmx1ZTpcImIwZTBlNlwiLHB1cnBsZTpcIjgwMDA4MFwiLHJlYmVjY2FwdXJwbGU6XCI2NjMzOTlcIixyZWQ6XCJmMDBcIixyb3N5YnJvd246XCJiYzhmOGZcIixyb3lhbGJsdWU6XCI0MTY5ZTFcIixzYWRkbGVicm93bjpcIjhiNDUxM1wiLHNhbG1vbjpcImZhODA3MlwiLHNhbmR5YnJvd246XCJmNGE0NjBcIixzZWFncmVlbjpcIjJlOGI1N1wiLHNlYXNoZWxsOlwiZmZmNWVlXCIsc2llbm5hOlwiYTA1MjJkXCIsc2lsdmVyOlwiYzBjMGMwXCIsc2t5Ymx1ZTpcIjg3Y2VlYlwiLHNsYXRlYmx1ZTpcIjZhNWFjZFwiLHNsYXRlZ3JheTpcIjcwODA5MFwiLHNsYXRlZ3JleTpcIjcwODA5MFwiLHNub3c6XCJmZmZhZmFcIixzcHJpbmdncmVlbjpcIjAwZmY3ZlwiLHN0ZWVsYmx1ZTpcIjQ2ODJiNFwiLHRhbjpcImQyYjQ4Y1wiLHRlYWw6XCIwMDgwODBcIix0aGlzdGxlOlwiZDhiZmQ4XCIsdG9tYXRvOlwiZmY2MzQ3XCIsdHVycXVvaXNlOlwiNDBlMGQwXCIsdmlvbGV0OlwiZWU4MmVlXCIsd2hlYXQ6XCJmNWRlYjNcIix3aGl0ZTpcImZmZlwiLHdoaXRlc21va2U6XCJmNWY1ZjVcIix5ZWxsb3c6XCJmZjBcIix5ZWxsb3dncmVlbjpcIjlhY2QzMlwifSxFPWMuaGV4TmFtZXM9ZnVuY3Rpb24odCl7dmFyIGU9e307Zm9yKHZhciByIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShyKSYmKGVbdFtyXV09cik7cmV0dXJuIGV9KFMpO2Z1bmN0aW9uIEModCl7cmV0dXJuIHQ9cGFyc2VGbG9hdCh0KSwoaXNOYU4odCl8fHQ8MHx8dD4xKSYmKHQ9MSksdH1mdW5jdGlvbiBMKGUscil7KGZ1bmN0aW9uKHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiYtMSE9dC5pbmRleE9mKFwiLlwiKSYmMT09PXBhcnNlRmxvYXQodCl9KShlKSYmKGU9XCIxMDAlXCIpO3ZhciBuPWZ1bmN0aW9uKHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiYtMSE9dC5pbmRleE9mKFwiJVwiKX0oZSk7cmV0dXJuIGU9byhyLHMoMCxwYXJzZUZsb2F0KGUpKSksbiYmKGU9cGFyc2VJbnQoZSpyLDEwKS8xMDApLHQuYWJzKGUtcik8MWUtNj8xOmUlci9wYXJzZUZsb2F0KHIpfWZ1bmN0aW9uIHoodCl7cmV0dXJuIG8oMSxzKDAsdCkpfWZ1bmN0aW9uIE8odCl7cmV0dXJuIHBhcnNlSW50KHQsMTYpfWZ1bmN0aW9uIEkodCl7cmV0dXJuIDE9PXQubGVuZ3RoP1wiMFwiK3Q6XCJcIit0fWZ1bmN0aW9uIEQodCl7cmV0dXJuIHQ8PTEmJih0PTEwMCp0K1wiJVwiKSx0fWZ1bmN0aW9uIFAoZSl7cmV0dXJuIHQucm91bmQoMjU1KnBhcnNlRmxvYXQoZSkpLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBSKHQpe3JldHVybiBPKHQpLzI1NX12YXIgRixCLE4saj0oQj1cIltcXFxcc3xcXFxcKF0rKFwiKyhGPVwiKD86Wy1cXFxcK10/XFxcXGQqXFxcXC5cXFxcZCslPyl8KD86Wy1cXFxcK10/XFxcXGQrJT8pXCIpK1wiKVssfFxcXFxzXSsoXCIrRitcIilbLHxcXFxcc10rKFwiK0YrXCIpXFxcXHMqXFxcXCk/XCIsTj1cIltcXFxcc3xcXFxcKF0rKFwiK0YrXCIpWyx8XFxcXHNdKyhcIitGK1wiKVssfFxcXFxzXSsoXCIrRitcIilbLHxcXFxcc10rKFwiK0YrXCIpXFxcXHMqXFxcXCk/XCIse0NTU19VTklUOm5ldyBSZWdFeHAoRikscmdiOm5ldyBSZWdFeHAoXCJyZ2JcIitCKSxyZ2JhOm5ldyBSZWdFeHAoXCJyZ2JhXCIrTiksaHNsOm5ldyBSZWdFeHAoXCJoc2xcIitCKSxoc2xhOm5ldyBSZWdFeHAoXCJoc2xhXCIrTiksaHN2Om5ldyBSZWdFeHAoXCJoc3ZcIitCKSxoc3ZhOm5ldyBSZWdFeHAoXCJoc3ZhXCIrTiksaGV4MzovXiM/KFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8saGV4NjovXiM/KFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pJC8saGV4NDovXiM/KFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KSQvLGhleDg6L14jPyhbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkkL30pO2Z1bmN0aW9uIFYodCl7cmV0dXJuISFqLkNTU19VTklULmV4ZWModCl9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGUmJmUuZXhwb3J0cz9lLmV4cG9ydHM9Yzp3aW5kb3cudGlueWNvbG9yPWN9KE1hdGgpfSx7fV0sNTIzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWksZS5leHBvcnRzLmZsb2F0MzI9ZS5leHBvcnRzLmZsb2F0PWksZS5leHBvcnRzLmZyYWN0MzI9ZS5leHBvcnRzLmZyYWN0PWZ1bmN0aW9uKHQpe2lmKHQubGVuZ3RoKXtmb3IodmFyIGU9aSh0KSxyPTAsbj1lLmxlbmd0aDtyPG47cisrKWVbcl09dFtyXS1lW3JdO3JldHVybiBlfXJldHVybiBpKHQtaSh0KSl9O3ZhciBuPW5ldyBGbG9hdDMyQXJyYXkoMSk7ZnVuY3Rpb24gaSh0KXtpZih0Lmxlbmd0aCl7aWYodCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlyZXR1cm4gdDt2YXIgZT1uZXcgRmxvYXQzMkFycmF5KHQpO3JldHVybiBlLnNldCh0KSxlfXJldHVybiBuWzBdPXQsblswXX19LHt9XSw1MjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicGFyc2UtdW5pdFwiKTtlLmV4cG9ydHM9bzt2YXIgaT05NjtmdW5jdGlvbiBhKHQsZSl7dmFyIHI9bihnZXRDb21wdXRlZFN0eWxlKHQpLmdldFByb3BlcnR5VmFsdWUoZSkpO3JldHVybiByWzBdKm8oclsxXSx0KX1mdW5jdGlvbiBvKHQsZSl7c3dpdGNoKGU9ZXx8ZG9jdW1lbnQuYm9keSx0PSh0fHxcInB4XCIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLGUhPT13aW5kb3cmJmUhPT1kb2N1bWVudHx8KGU9ZG9jdW1lbnQuYm9keSksdCl7Y2FzZVwiJVwiOnJldHVybiBlLmNsaWVudEhlaWdodC8xMDA7Y2FzZVwiY2hcIjpjYXNlXCJleFwiOnJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7ci5zdHlsZVtcImZvbnQtc2l6ZVwiXT1cIjEyOFwiK3QsZS5hcHBlbmRDaGlsZChyKTt2YXIgbj1hKHIsXCJmb250LXNpemVcIikvMTI4O3JldHVybiBlLnJlbW92ZUNoaWxkKHIpLG59KHQsZSk7Y2FzZVwiZW1cIjpyZXR1cm4gYShlLFwiZm9udC1zaXplXCIpO2Nhc2VcInJlbVwiOnJldHVybiBhKGRvY3VtZW50LmJvZHksXCJmb250LXNpemVcIik7Y2FzZVwidndcIjpyZXR1cm4gd2luZG93LmlubmVyV2lkdGgvMTAwO2Nhc2VcInZoXCI6cmV0dXJuIHdpbmRvdy5pbm5lckhlaWdodC8xMDA7Y2FzZVwidm1pblwiOnJldHVybiBNYXRoLm1pbih3aW5kb3cuaW5uZXJXaWR0aCx3aW5kb3cuaW5uZXJIZWlnaHQpLzEwMDtjYXNlXCJ2bWF4XCI6cmV0dXJuIE1hdGgubWF4KHdpbmRvdy5pbm5lcldpZHRoLHdpbmRvdy5pbm5lckhlaWdodCkvMTAwO2Nhc2VcImluXCI6cmV0dXJuIGk7Y2FzZVwiY21cIjpyZXR1cm4gaS8yLjU0O2Nhc2VcIm1tXCI6cmV0dXJuIGkvMjUuNDtjYXNlXCJwdFwiOnJldHVybiBpLzcyO2Nhc2VcInBjXCI6cmV0dXJuIGkvNn1yZXR1cm4gMX19LHtcInBhcnNlLXVuaXRcIjo0NTR9XSw1MjU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbjtuPXRoaXMsZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHI9ZnVuY3Rpb24odCl7aWYobnVsbD09KHI9dC50cmFuc2Zvcm0pKXJldHVybiBlO3ZhciByLG4saSxhPXIuc2NhbGVbMF0sbz1yLnNjYWxlWzFdLHM9ci50cmFuc2xhdGVbMF0sbD1yLnRyYW5zbGF0ZVsxXTtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8KG49aT0wKSx0WzBdPShuKz10WzBdKSphK3MsdFsxXT0oaSs9dFsxXSkqbytsLHR9fSxuPWZ1bmN0aW9uKHQpe3ZhciBlPXQuYmJveDtmdW5jdGlvbiBuKHQpe2xbMF09dFswXSxsWzFdPXRbMV0scyhsKSxsWzBdPGMmJihjPWxbMF0pLGxbMF0+aCYmKGg9bFswXSksbFsxXTx1JiYodT1sWzFdKSxsWzFdPmYmJihmPWxbMV0pfWZ1bmN0aW9uIGkodCl7c3dpdGNoKHQudHlwZSl7Y2FzZVwiR2VvbWV0cnlDb2xsZWN0aW9uXCI6dC5nZW9tZXRyaWVzLmZvckVhY2goaSk7YnJlYWs7Y2FzZVwiUG9pbnRcIjpuKHQuY29vcmRpbmF0ZXMpO2JyZWFrO2Nhc2VcIk11bHRpUG9pbnRcIjp0LmNvb3JkaW5hdGVzLmZvckVhY2gobil9fWlmKCFlKXt2YXIgYSxvLHM9cih0KSxsPW5ldyBBcnJheSgyKSxjPTEvMCx1PWMsaD0tYyxmPS1jO2ZvcihvIGluIHQuYXJjcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0tMSxyPXQubGVuZ3RoOysrZTxyOylhPXRbZV0sbFswXT1hWzBdLGxbMV09YVsxXSxzKGwsZSksbFswXTxjJiYoYz1sWzBdKSxsWzBdPmgmJihoPWxbMF0pLGxbMV08dSYmKHU9bFsxXSksbFsxXT5mJiYoZj1sWzFdKX0pLHQub2JqZWN0cylpKHQub2JqZWN0c1tvXSk7ZT10LmJib3g9W2MsdSxoLGZdfXJldHVybiBlfSxpPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC5sZW5ndGgsaT1uLWU7aTwtLW47KXI9dFtpXSx0W2krK109dFtuXSx0W25dPXJ9O2Z1bmN0aW9uIGEodCxlKXt2YXIgcj1lLmlkLG49ZS5iYm94LGk9bnVsbD09ZS5wcm9wZXJ0aWVzP3t9OmUucHJvcGVydGllcyxhPW8odCxlKTtyZXR1cm4gbnVsbD09ciYmbnVsbD09bj97dHlwZTpcIkZlYXR1cmVcIixwcm9wZXJ0aWVzOmksZ2VvbWV0cnk6YX06bnVsbD09bj97dHlwZTpcIkZlYXR1cmVcIixpZDpyLHByb3BlcnRpZXM6aSxnZW9tZXRyeTphfTp7dHlwZTpcIkZlYXR1cmVcIixpZDpyLGJib3g6bixwcm9wZXJ0aWVzOmksZ2VvbWV0cnk6YX19ZnVuY3Rpb24gbyh0LGUpe3ZhciBuPXIodCksYT10LmFyY3M7ZnVuY3Rpb24gbyh0LGUpe2UubGVuZ3RoJiZlLnBvcCgpO2Zvcih2YXIgcj1hW3Q8MD9+dDp0XSxvPTAscz1yLmxlbmd0aDtvPHM7KytvKWUucHVzaChuKHJbb10uc2xpY2UoKSxvKSk7dDwwJiZpKGUscyl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gbih0LnNsaWNlKCkpfWZ1bmN0aW9uIGwodCl7Zm9yKHZhciBlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3Ipbyh0W3JdLGUpO3JldHVybiBlLmxlbmd0aDwyJiZlLnB1c2goZVswXS5zbGljZSgpKSxlfWZ1bmN0aW9uIGModCl7Zm9yKHZhciBlPWwodCk7ZS5sZW5ndGg8NDspZS5wdXNoKGVbMF0uc2xpY2UoKSk7cmV0dXJuIGV9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC5tYXAoYyl9cmV0dXJuIGZ1bmN0aW9uIHQoZSl7dmFyIHIsbj1lLnR5cGU7c3dpdGNoKG4pe2Nhc2VcIkdlb21ldHJ5Q29sbGVjdGlvblwiOnJldHVybnt0eXBlOm4sZ2VvbWV0cmllczplLmdlb21ldHJpZXMubWFwKHQpfTtjYXNlXCJQb2ludFwiOnI9cyhlLmNvb3JkaW5hdGVzKTticmVhaztjYXNlXCJNdWx0aVBvaW50XCI6cj1lLmNvb3JkaW5hdGVzLm1hcChzKTticmVhaztjYXNlXCJMaW5lU3RyaW5nXCI6cj1sKGUuYXJjcyk7YnJlYWs7Y2FzZVwiTXVsdGlMaW5lU3RyaW5nXCI6cj1lLmFyY3MubWFwKGwpO2JyZWFrO2Nhc2VcIlBvbHlnb25cIjpyPXUoZS5hcmNzKTticmVhaztjYXNlXCJNdWx0aVBvbHlnb25cIjpyPWUuYXJjcy5tYXAodSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gbnVsbH1yZXR1cm57dHlwZTpuLGNvb3JkaW5hdGVzOnJ9fShlKX12YXIgcz1mdW5jdGlvbih0LGUpe3ZhciByPXt9LG49e30saT17fSxhPVtdLG89LTE7ZnVuY3Rpb24gcyh0LGUpe2Zvcih2YXIgbiBpbiB0KXt2YXIgaT10W25dO2RlbGV0ZSBlW2kuc3RhcnRdLGRlbGV0ZSBpLnN0YXJ0LGRlbGV0ZSBpLmVuZCxpLmZvckVhY2goZnVuY3Rpb24odCl7clt0PDA/fnQ6dF09MX0pLGEucHVzaChpKX19cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihyLG4pe3ZhciBpLGE9dC5hcmNzW3I8MD9+cjpyXTthLmxlbmd0aDwzJiYhYVsxXVswXSYmIWFbMV1bMV0mJihpPWVbKytvXSxlW29dPXIsZVtuXT1pKX0pLGUuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcixhLG89ZnVuY3Rpb24oZSl7dmFyIHIsbj10LmFyY3NbZTwwP35lOmVdLGk9blswXTt0LnRyYW5zZm9ybT8ocj1bMCwwXSxuLmZvckVhY2goZnVuY3Rpb24odCl7clswXSs9dFswXSxyWzFdKz10WzFdfSkpOnI9bltuLmxlbmd0aC0xXTtyZXR1cm4gZTwwP1tyLGldOltpLHJdfShlKSxzPW9bMF0sbD1vWzFdO2lmKHI9aVtzXSlpZihkZWxldGUgaVtyLmVuZF0sci5wdXNoKGUpLHIuZW5kPWwsYT1uW2xdKXtkZWxldGUgblthLnN0YXJ0XTt2YXIgYz1hPT09cj9yOnIuY29uY2F0KGEpO25bYy5zdGFydD1yLnN0YXJ0XT1pW2MuZW5kPWEuZW5kXT1jfWVsc2UgbltyLnN0YXJ0XT1pW3IuZW5kXT1yO2Vsc2UgaWYocj1uW2xdKWlmKGRlbGV0ZSBuW3Iuc3RhcnRdLHIudW5zaGlmdChlKSxyLnN0YXJ0PXMsYT1pW3NdKXtkZWxldGUgaVthLmVuZF07dmFyIHU9YT09PXI/cjphLmNvbmNhdChyKTtuW3Uuc3RhcnQ9YS5zdGFydF09aVt1LmVuZD1yLmVuZF09dX1lbHNlIG5bci5zdGFydF09aVtyLmVuZF09cjtlbHNlIG5bKHI9W2VdKS5zdGFydD1zXT1pW3IuZW5kPWxdPXJ9KSxzKGksbikscyhuLGkpLGUuZm9yRWFjaChmdW5jdGlvbih0KXtyW3Q8MD9+dDp0XXx8YS5wdXNoKFt0XSl9KSxhfTtmdW5jdGlvbiBsKHQsZSxyKXt2YXIgbixpLGE7aWYoYXJndW1lbnRzLmxlbmd0aD4xKW49ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9W10sYT1bXTtmdW5jdGlvbiBvKHQpe3ZhciBlPXQ8MD9+dDp0OyhhW2VdfHwoYVtlXT1bXSkpLnB1c2goe2k6dCxnOm59KX1mdW5jdGlvbiBzKHQpe3QuZm9yRWFjaChvKX1mdW5jdGlvbiBsKHQpe3QuZm9yRWFjaChzKX1yZXR1cm4gZnVuY3Rpb24gdChlKXtzd2l0Y2gobj1lLGUudHlwZSl7Y2FzZVwiR2VvbWV0cnlDb2xsZWN0aW9uXCI6ZS5nZW9tZXRyaWVzLmZvckVhY2godCk7YnJlYWs7Y2FzZVwiTGluZVN0cmluZ1wiOnMoZS5hcmNzKTticmVhaztjYXNlXCJNdWx0aUxpbmVTdHJpbmdcIjpjYXNlXCJQb2x5Z29uXCI6bChlLmFyY3MpO2JyZWFrO2Nhc2VcIk11bHRpUG9seWdvblwiOmUuYXJjcy5mb3JFYWNoKGwpfX0oZSksYS5mb3JFYWNoKG51bGw9PXI/ZnVuY3Rpb24odCl7aS5wdXNoKHRbMF0uaSl9OmZ1bmN0aW9uKHQpe3IodFswXS5nLHRbdC5sZW5ndGgtMV0uZykmJmkucHVzaCh0WzBdLmkpfSksaX0oMCxlLHIpO2Vsc2UgZm9yKGk9MCxuPW5ldyBBcnJheShhPXQuYXJjcy5sZW5ndGgpO2k8YTsrK2kpbltpXT1pO3JldHVybnt0eXBlOlwiTXVsdGlMaW5lU3RyaW5nXCIsYXJjczpzKHQsbil9fWZ1bmN0aW9uIGModCxlKXt2YXIgcj17fSxuPVtdLGk9W107ZnVuY3Rpb24gYSh0KXt0LmZvckVhY2goZnVuY3Rpb24oZSl7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpeyhyW2U9ZTwwP35lOmVdfHwocltlXT1bXSkpLnB1c2godCl9KX0pLG4ucHVzaCh0KX1mdW5jdGlvbiBsKGUpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGUscj0tMSxuPXQubGVuZ3RoLGk9dFtuLTFdLGE9MDsrK3I8bjspZT1pLGk9dFtyXSxhKz1lWzBdKmlbMV0tZVsxXSppWzBdO3JldHVybiBNYXRoLmFicyhhKX0obyh0LHt0eXBlOlwiUG9seWdvblwiLGFyY3M6W2VdfSkuY29vcmRpbmF0ZXNbMF0pfXJldHVybiBlLmZvckVhY2goZnVuY3Rpb24gdChlKXtzd2l0Y2goZS50eXBlKXtjYXNlXCJHZW9tZXRyeUNvbGxlY3Rpb25cIjplLmdlb21ldHJpZXMuZm9yRWFjaCh0KTticmVhaztjYXNlXCJQb2x5Z29uXCI6YShlLmFyY3MpO2JyZWFrO2Nhc2VcIk11bHRpUG9seWdvblwiOmUuYXJjcy5mb3JFYWNoKGEpfX0pLG4uZm9yRWFjaChmdW5jdGlvbih0KXtpZighdC5fKXt2YXIgZT1bXSxuPVt0XTtmb3IodC5fPTEsaS5wdXNoKGUpO3Q9bi5wb3AoKTspZS5wdXNoKHQpLHQuZm9yRWFjaChmdW5jdGlvbih0KXt0LmZvckVhY2goZnVuY3Rpb24odCl7clt0PDA/fnQ6dF0uZm9yRWFjaChmdW5jdGlvbih0KXt0Ll98fCh0Ll89MSxuLnB1c2godCkpfSl9KX0pfX0pLG4uZm9yRWFjaChmdW5jdGlvbih0KXtkZWxldGUgdC5ffSkse3R5cGU6XCJNdWx0aVBvbHlnb25cIixhcmNzOmkubWFwKGZ1bmN0aW9uKGUpe3ZhciBuLGk9W107aWYoZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaChmdW5jdGlvbih0KXt0LmZvckVhY2goZnVuY3Rpb24odCl7clt0PDA/fnQ6dF0ubGVuZ3RoPDImJmkucHVzaCh0KX0pfSl9KSwobj0oaT1zKHQsaSkpLmxlbmd0aCk+MSlmb3IodmFyIGEsbyxjPTEsdT1sKGlbMF0pO2M8bjsrK2MpKGE9bChpW2NdKSk+dSYmKG89aVswXSxpWzBdPWlbY10saVtjXT1vLHU9YSk7cmV0dXJuIGl9KX19dmFyIHU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjspe3ZhciBpPXIrbj4+PjE7dFtpXTxlP3I9aSsxOm49aX1yZXR1cm4gcn07dC5iYm94PW4sdC5mZWF0dXJlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJHZW9tZXRyeUNvbGxlY3Rpb25cIj09PWUudHlwZT97dHlwZTpcIkZlYXR1cmVDb2xsZWN0aW9uXCIsZmVhdHVyZXM6ZS5nZW9tZXRyaWVzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gYSh0LGUpfSl9OmEodCxlKX0sdC5tZXNoPWZ1bmN0aW9uKHQpe3JldHVybiBvKHQsbC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSx0Lm1lc2hBcmNzPWwsdC5tZXJnZT1mdW5jdGlvbih0KXtyZXR1cm4gbyh0LGMuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sdC5tZXJnZUFyY3M9Yyx0Lm5laWdoYm9ycz1mdW5jdGlvbih0KXt2YXIgZT17fSxyPXQubWFwKGZ1bmN0aW9uKCl7cmV0dXJuW119KTtmdW5jdGlvbiBuKHQscil7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Q8MCYmKHQ9fnQpO3ZhciBuPWVbdF07bj9uLnB1c2gocik6ZVt0XT1bcl19KX1mdW5jdGlvbiBpKHQsZSl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe24odCxlKX0pfXZhciBhPXtMaW5lU3RyaW5nOm4sTXVsdGlMaW5lU3RyaW5nOmksUG9seWdvbjppLE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe3QuZm9yRWFjaChmdW5jdGlvbih0KXtpKHQsZSl9KX19O2Zvcih2YXIgbyBpbiB0LmZvckVhY2goZnVuY3Rpb24gdChlLHIpe1wiR2VvbWV0cnlDb2xsZWN0aW9uXCI9PT1lLnR5cGU/ZS5nZW9tZXRyaWVzLmZvckVhY2goZnVuY3Rpb24oZSl7dChlLHIpfSk6ZS50eXBlIGluIGEmJmFbZS50eXBlXShlLmFyY3Mscil9KSxlKWZvcih2YXIgcz1lW29dLGw9cy5sZW5ndGgsYz0wO2M8bDsrK2MpZm9yKHZhciBoPWMrMTtoPGw7KytoKXt2YXIgZixwPXNbY10sZD1zW2hdOyhmPXJbcF0pW289dShmLGQpXSE9PWQmJmYuc3BsaWNlKG8sMCxkKSwoZj1yW2RdKVtvPXUoZixwKV0hPT1wJiZmLnNwbGljZShvLDAscCl9cmV0dXJuIHJ9LHQucXVhbnRpemU9ZnVuY3Rpb24odCxlKXtpZighKChlPU1hdGguZmxvb3IoZSkpPj0yKSl0aHJvdyBuZXcgRXJyb3IoXCJuIG11c3QgYmUgXFx1MjI2NTJcIik7aWYodC50cmFuc2Zvcm0pdGhyb3cgbmV3IEVycm9yKFwiYWxyZWFkeSBxdWFudGl6ZWRcIik7dmFyIHIsaT1uKHQpLGE9aVswXSxvPShpWzJdLWEpLyhlLTEpfHwxLHM9aVsxXSxsPShpWzNdLXMpLyhlLTEpfHwxO2Z1bmN0aW9uIGModCl7dFswXT1NYXRoLnJvdW5kKCh0WzBdLWEpL28pLHRbMV09TWF0aC5yb3VuZCgodFsxXS1zKS9sKX1mdW5jdGlvbiB1KHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2VcIkdlb21ldHJ5Q29sbGVjdGlvblwiOnQuZ2VvbWV0cmllcy5mb3JFYWNoKHUpO2JyZWFrO2Nhc2VcIlBvaW50XCI6Yyh0LmNvb3JkaW5hdGVzKTticmVhaztjYXNlXCJNdWx0aVBvaW50XCI6dC5jb29yZGluYXRlcy5mb3JFYWNoKGMpfX1mb3IociBpbiB0LmFyY3MuZm9yRWFjaChmdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGk9MSxjPTEsdT10Lmxlbmd0aCxoPXRbMF0sZj1oWzBdPU1hdGgucm91bmQoKGhbMF0tYSkvbykscD1oWzFdPU1hdGgucm91bmQoKGhbMV0tcykvbCk7aTx1OysraSloPXRbaV0scj1NYXRoLnJvdW5kKChoWzBdLWEpL28pLG49TWF0aC5yb3VuZCgoaFsxXS1zKS9sKSxyPT09ZiYmbj09PXB8fCgoZT10W2MrK10pWzBdPXItZixmPXIsZVsxXT1uLXAscD1uKTtjPDImJigoZT10W2MrK10pWzBdPTAsZVsxXT0wKSx0Lmxlbmd0aD1jfSksdC5vYmplY3RzKXUodC5vYmplY3RzW3JdKTtyZXR1cm4gdC50cmFuc2Zvcm09e3NjYWxlOltvLGxdLHRyYW5zbGF0ZTpbYSxzXX0sdH0sdC50cmFuc2Zvcm09cix0LnVudHJhbnNmb3JtPWZ1bmN0aW9uKHQpe2lmKG51bGw9PShyPXQudHJhbnNmb3JtKSlyZXR1cm4gZTt2YXIgcixuLGksYT1yLnNjYWxlWzBdLG89ci5zY2FsZVsxXSxzPXIudHJhbnNsYXRlWzBdLGw9ci50cmFuc2xhdGVbMV07cmV0dXJuIGZ1bmN0aW9uKHQsZSl7ZXx8KG49aT0wKTt2YXIgcj1NYXRoLnJvdW5kKCh0WzBdLXMpL2EpLGM9TWF0aC5yb3VuZCgodFsxXS1sKS9vKTtyZXR1cm4gdFswXT1yLW4sbj1yLHRbMV09Yy1pLGk9Yyx0fX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9KFwib2JqZWN0XCI9PXR5cGVvZiByJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZT9yOm4udG9wb2pzb249bi50b3BvanNvbnx8e30pfSx7fV0sNTI2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKHQ8MClyZXR1cm5bXTtpZigwPT09dClyZXR1cm5bWzBdXTtmb3IodmFyIGU9MHxNYXRoLnJvdW5kKGEodCsxKSkscj1bXSxvPTA7bzxlOysrbyl7Zm9yKHZhciBzPW4udW5yYW5rKHQsbyksbD1bMF0sYz0wLHU9MDt1PHMubGVuZ3RoOysrdSljKz0xPDxzW3VdLGwucHVzaChjKTtpKHMpPDEmJihsWzBdPWMsbFt0XT0wKSxyLnB1c2gobCl9cmV0dXJuIHJ9O3ZhciBuPXQoXCJwZXJtdXRhdGlvbi1yYW5rXCIpLGk9dChcInBlcm11dGF0aW9uLXBhcml0eVwiKSxhPXQoXCJnYW1tYVwiKX0se2dhbW1hOjIyOCxcInBlcm11dGF0aW9uLXBhcml0eVwiOjQ1NixcInBlcm11dGF0aW9uLXJhbmtcIjo0NTd9XSw1Mjc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9KHQ9dHx8e30pLmNlbnRlcnx8WzAsMCwwXSxyPXQudXB8fFswLDEsMF0sbj10LnJpZ2h0fHxoKHIpLGk9dC5yYWRpdXN8fDEsYT10LnRoZXRhfHwwLHU9dC5waGl8fDA7aWYoZT1bXS5zbGljZS5jYWxsKGUsMCwzKSxyPVtdLnNsaWNlLmNhbGwociwwLDMpLHMocixyKSxuPVtdLnNsaWNlLmNhbGwobiwwLDMpLHMobixuKSxcImV5ZVwiaW4gdCl7dmFyIHA9dC5leWUsZD1bcFswXS1lWzBdLHBbMV0tZVsxXSxwWzJdLWVbMl1dO28obixkLHIpLGMoblswXSxuWzFdLG5bMl0pPDFlLTY/bj1oKHIpOnMobixuKSxpPWMoZFswXSxkWzFdLGRbMl0pO3ZhciBnPWwocixkKS9pLHY9bChuLGQpL2k7dT1NYXRoLmFjb3MoZyksYT1NYXRoLmFjb3Modil9cmV0dXJuIGk9TWF0aC5sb2coaSksbmV3IGYodC56b29tTWluLHQuem9vbU1heCxlLHIsbixpLGEsdSl9O3ZhciBuPXQoXCJmaWx0ZXJlZC12ZWN0b3JcIiksaT10KFwiZ2wtbWF0NC9pbnZlcnRcIiksYT10KFwiZ2wtbWF0NC9yb3RhdGVcIiksbz10KFwiZ2wtdmVjMy9jcm9zc1wiKSxzPXQoXCJnbC12ZWMzL25vcm1hbGl6ZVwiKSxsPXQoXCJnbC12ZWMzL2RvdFwiKTtmdW5jdGlvbiBjKHQsZSxyKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHQsMikrTWF0aC5wb3coZSwyKStNYXRoLnBvdyhyLDIpKX1mdW5jdGlvbiB1KHQpe3JldHVybiBNYXRoLm1pbigxLE1hdGgubWF4KC0xLHQpKX1mdW5jdGlvbiBoKHQpe3ZhciBlPU1hdGguYWJzKHRbMF0pLHI9TWF0aC5hYnModFsxXSksbj1NYXRoLmFicyh0WzJdKSxpPVswLDAsMF07ZT5NYXRoLm1heChyLG4pP2lbMl09MTpyPk1hdGgubWF4KGUsbik/aVswXT0xOmlbMV09MTtmb3IodmFyIGE9MCxvPTAsbD0wO2w8MzsrK2wpYSs9dFtsXSp0W2xdLG8rPWlbbF0qdFtsXTtmb3IobD0wO2w8MzsrK2wpaVtsXS09by9hKnRbbF07cmV0dXJuIHMoaSxpKSxpfWZ1bmN0aW9uIGYodCxlLHIsaSxhLG8scyxsKXt0aGlzLmNlbnRlcj1uKHIpLHRoaXMudXA9bihpKSx0aGlzLnJpZ2h0PW4oYSksdGhpcy5yYWRpdXM9bihbb10pLHRoaXMuYW5nbGU9bihbcyxsXSksdGhpcy5hbmdsZS5ib3VuZHM9W1stMS8wLC1NYXRoLlBJLzJdLFsxLzAsTWF0aC5QSS8yXV0sdGhpcy5zZXREaXN0YW5jZUxpbWl0cyh0LGUpLHRoaXMuY29tcHV0ZWRDZW50ZXI9dGhpcy5jZW50ZXIuY3VydmUoMCksdGhpcy5jb21wdXRlZFVwPXRoaXMudXAuY3VydmUoMCksdGhpcy5jb21wdXRlZFJpZ2h0PXRoaXMucmlnaHQuY3VydmUoMCksdGhpcy5jb21wdXRlZFJhZGl1cz10aGlzLnJhZGl1cy5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkQW5nbGU9dGhpcy5hbmdsZS5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVG93YXJkPVswLDAsMF0sdGhpcy5jb21wdXRlZEV5ZT1bMCwwLDBdLHRoaXMuY29tcHV0ZWRNYXRyaXg9bmV3IEFycmF5KDE2KTtmb3IodmFyIGM9MDtjPDE2OysrYyl0aGlzLmNvbXB1dGVkTWF0cml4W2NdPS41O3RoaXMucmVjYWxjTWF0cml4KDApfXZhciBwPWYucHJvdG90eXBlO3Auc2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCxlKXt0PXQ+MD9NYXRoLmxvZyh0KTotMS8wLGU9ZT4wP01hdGgubG9nKGUpOjEvMCxlPU1hdGgubWF4KGUsdCksdGhpcy5yYWRpdXMuYm91bmRzWzBdWzBdPXQsdGhpcy5yYWRpdXMuYm91bmRzWzFdWzBdPWV9LHAuZ2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5yYWRpdXMuYm91bmRzWzBdO3JldHVybiB0Pyh0WzBdPU1hdGguZXhwKGVbMF1bMF0pLHRbMV09TWF0aC5leHAoZVsxXVswXSksdCk6W01hdGguZXhwKGVbMF1bMF0pLE1hdGguZXhwKGVbMV1bMF0pXX0scC5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dGhpcy5jZW50ZXIuY3VydmUodCksdGhpcy51cC5jdXJ2ZSh0KSx0aGlzLnJpZ2h0LmN1cnZlKHQpLHRoaXMucmFkaXVzLmN1cnZlKHQpLHRoaXMuYW5nbGUuY3VydmUodCk7Zm9yKHZhciBlPXRoaXMuY29tcHV0ZWRVcCxyPXRoaXMuY29tcHV0ZWRSaWdodCxuPTAsaT0wLGE9MDthPDM7KythKWkrPWVbYV0qclthXSxuKz1lW2FdKmVbYV07dmFyIGw9TWF0aC5zcXJ0KG4pLHU9MDtmb3IoYT0wO2E8MzsrK2EpclthXS09ZVthXSppL24sdSs9clthXSpyW2FdLGVbYV0vPWw7dmFyIGg9TWF0aC5zcXJ0KHUpO2ZvcihhPTA7YTwzOysrYSlyW2FdLz1oO3ZhciBmPXRoaXMuY29tcHV0ZWRUb3dhcmQ7byhmLGUscikscyhmLGYpO3ZhciBwPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pLGQ9dGhpcy5jb21wdXRlZEFuZ2xlWzBdLGc9dGhpcy5jb21wdXRlZEFuZ2xlWzFdLHY9TWF0aC5jb3MoZCksbT1NYXRoLnNpbihkKSx5PU1hdGguY29zKGcpLHg9TWF0aC5zaW4oZyksYj10aGlzLmNvbXB1dGVkQ2VudGVyLF89dip5LHc9bSp5LGs9eCxBPS12KngsVD0tbSp4LE09eSxTPXRoaXMuY29tcHV0ZWRFeWUsRT10aGlzLmNvbXB1dGVkTWF0cml4O2ZvcihhPTA7YTwzOysrYSl7dmFyIEM9XypyW2FdK3cqZlthXStrKmVbYV07RVs0KmErMV09QSpyW2FdK1QqZlthXStNKmVbYV0sRVs0KmErMl09QyxFWzQqYSszXT0wfXZhciBMPUVbMV0sej1FWzVdLE89RVs5XSxJPUVbMl0sRD1FWzZdLFA9RVsxMF0sUj16KlAtTypELEY9TypJLUwqUCxCPUwqRC16KkksTj1jKFIsRixCKTtSLz1OLEYvPU4sQi89TixFWzBdPVIsRVs0XT1GLEVbOF09Qjtmb3IoYT0wO2E8MzsrK2EpU1thXT1iW2FdK0VbMis0KmFdKnA7Zm9yKGE9MDthPDM7KythKXt1PTA7Zm9yKHZhciBqPTA7ajwzOysrail1Kz1FW2ErNCpqXSpTW2pdO0VbMTIrYV09LXV9RVsxNV09MX0scC5nZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXt0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgcj10aGlzLmNvbXB1dGVkTWF0cml4O2lmKGUpe2Zvcih2YXIgbj0wO248MTY7KytuKWVbbl09cltuXTtyZXR1cm4gZX1yZXR1cm4gcn07dmFyIGQ9WzAsMCwwXTtwLnJvdGF0ZT1mdW5jdGlvbih0LGUscixuKXtpZih0aGlzLmFuZ2xlLm1vdmUodCxlLHIpLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXg7ZFswXT1pWzJdLGRbMV09aVs2XSxkWzJdPWlbMTBdO2Zvcih2YXIgbz10aGlzLmNvbXB1dGVkVXAscz10aGlzLmNvbXB1dGVkUmlnaHQsbD10aGlzLmNvbXB1dGVkVG93YXJkLGM9MDtjPDM7KytjKWlbNCpjXT1vW2NdLGlbNCpjKzFdPXNbY10saVs0KmMrMl09bFtjXTthKGksaSxuLGQpO2ZvcihjPTA7YzwzOysrYylvW2NdPWlbNCpjXSxzW2NdPWlbNCpjKzFdO3RoaXMudXAuc2V0KHQsb1swXSxvWzFdLG9bMl0pLHRoaXMucmlnaHQuc2V0KHQsc1swXSxzWzFdLHNbMl0pfX0scC5wYW49ZnVuY3Rpb24odCxlLHIsbil7ZT1lfHwwLHI9cnx8MCxuPW58fDAsdGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZE1hdHJpeCxhPShNYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKSxpWzFdKSxvPWlbNV0scz1pWzldLGw9YyhhLG8scyk7YS89bCxvLz1sLHMvPWw7dmFyIHU9aVswXSxoPWlbNF0sZj1pWzhdLHA9dSphK2gqbytmKnMsZD1jKHUtPWEqcCxoLT1vKnAsZi09cypwKSxnPSh1Lz1kKSplK2Eqcix2PShoLz1kKSplK28qcixtPShmLz1kKSplK3Mqcjt0aGlzLmNlbnRlci5tb3ZlKHQsZyx2LG0pO3ZhciB5PU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO3k9TWF0aC5tYXgoMWUtNCx5K24pLHRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKHkpKX0scC50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5jZW50ZXIubW92ZSh0LGV8fDAscnx8MCxufHwwKX0scC5zZXRNYXRyaXg9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9MTtcIm51bWJlclwiPT10eXBlb2YgciYmKGE9MHxyKSwoYTwwfHxhPjMpJiYoYT0xKTt2YXIgbz0oYSsyKSUzO2V8fCh0aGlzLnJlY2FsY01hdHJpeCh0KSxlPXRoaXMuY29tcHV0ZWRNYXRyaXgpO3ZhciBzPWVbYV0sbD1lW2ErNF0saD1lW2ErOF07aWYobil7dmFyIGY9TWF0aC5hYnMocykscD1NYXRoLmFicyhsKSxkPU1hdGguYWJzKGgpLGc9TWF0aC5tYXgoZixwLGQpO2Y9PT1nPyhzPXM8MD8tMToxLGw9aD0wKTpkPT09Zz8oaD1oPDA/LTE6MSxzPWw9MCk6KGw9bDwwPy0xOjEscz1oPTApfWVsc2V7dmFyIHY9YyhzLGwsaCk7cy89dixsLz12LGgvPXZ9dmFyIG0seSx4PWVbb10sYj1lW28rNF0sXz1lW28rOF0sdz14KnMrYipsK18qaCxrPWMoeC09cyp3LGItPWwqdyxfLT1oKncpLEE9bCooXy89ayktaCooYi89ayksVD1oKih4Lz1rKS1zKl8sTT1zKmItbCp4LFM9YyhBLFQsTSk7aWYoQS89UyxULz1TLE0vPVMsdGhpcy5jZW50ZXIuanVtcCh0LEgsRyxZKSx0aGlzLnJhZGl1cy5pZGxlKHQpLHRoaXMudXAuanVtcCh0LHMsbCxoKSx0aGlzLnJpZ2h0Lmp1bXAodCx4LGIsXyksMj09PWEpe3ZhciBFPWVbMV0sQz1lWzVdLEw9ZVs5XSx6PUUqeCtDKmIrTCpfLE89RSpBK0MqVCtMKk07bT1SPDA/LU1hdGguUEkvMjpNYXRoLlBJLzIseT1NYXRoLmF0YW4yKE8seil9ZWxzZXt2YXIgST1lWzJdLEQ9ZVs2XSxQPWVbMTBdLFI9SSpzK0QqbCtQKmgsRj1JKngrRCpiK1AqXyxCPUkqQStEKlQrUCpNO209TWF0aC5hc2luKHUoUikpLHk9TWF0aC5hdGFuMihCLEYpfXRoaXMuYW5nbGUuanVtcCh0LHksbSksdGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIE49ZVsyXSxqPWVbNl0sVj1lWzEwXSxVPXRoaXMuY29tcHV0ZWRNYXRyaXg7aShVLGUpO3ZhciBxPVVbMTVdLEg9VVsxMl0vcSxHPVVbMTNdL3EsWT1VWzE0XS9xLFc9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7dGhpcy5jZW50ZXIuanVtcCh0LEgtTipXLEctaipXLFktVipXKX0scC5sYXN0VD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1heCh0aGlzLmNlbnRlci5sYXN0VCgpLHRoaXMudXAubGFzdFQoKSx0aGlzLnJpZ2h0Lmxhc3RUKCksdGhpcy5yYWRpdXMubGFzdFQoKSx0aGlzLmFuZ2xlLmxhc3RUKCkpfSxwLmlkbGU9ZnVuY3Rpb24odCl7dGhpcy5jZW50ZXIuaWRsZSh0KSx0aGlzLnVwLmlkbGUodCksdGhpcy5yaWdodC5pZGxlKHQpLHRoaXMucmFkaXVzLmlkbGUodCksdGhpcy5hbmdsZS5pZGxlKHQpfSxwLmZsdXNoPWZ1bmN0aW9uKHQpe3RoaXMuY2VudGVyLmZsdXNoKHQpLHRoaXMudXAuZmx1c2godCksdGhpcy5yaWdodC5mbHVzaCh0KSx0aGlzLnJhZGl1cy5mbHVzaCh0KSx0aGlzLmFuZ2xlLmZsdXNoKHQpfSxwLnNldERpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7ZT4wJiZ0aGlzLnJhZGl1cy5zZXQodCxNYXRoLmxvZyhlKSl9LHAubG9va0F0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpLGU9ZXx8dGhpcy5jb21wdXRlZEV5ZSxyPXJ8fHRoaXMuY29tcHV0ZWRDZW50ZXI7dmFyIGk9KG49bnx8dGhpcy5jb21wdXRlZFVwKVswXSxhPW5bMV0sbz1uWzJdLHM9YyhpLGEsbyk7aWYoIShzPDFlLTYpKXtpLz1zLGEvPXMsby89czt2YXIgbD1lWzBdLXJbMF0saD1lWzFdLXJbMV0sZj1lWzJdLXJbMl0scD1jKGwsaCxmKTtpZighKHA8MWUtNikpe2wvPXAsaC89cCxmLz1wO3ZhciBkPXRoaXMuY29tcHV0ZWRSaWdodCxnPWRbMF0sdj1kWzFdLG09ZFsyXSx5PWkqZythKnYrbyptLHg9YyhnLT15Kmksdi09eSphLG0tPXkqbyk7aWYoISh4PC4wMSYmKHg9YyhnPWEqZi1vKmgsdj1vKmwtaSpmLG09aSpoLWEqbCkpPDFlLTYpKXtnLz14LHYvPXgsbS89eCx0aGlzLnVwLnNldCh0LGksYSxvKSx0aGlzLnJpZ2h0LnNldCh0LGcsdixtKSx0aGlzLmNlbnRlci5zZXQodCxyWzBdLHJbMV0sclsyXSksdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2cocCkpO3ZhciBiPWEqbS1vKnYsXz1vKmctaSptLHc9aSp2LWEqZyxrPWMoYixfLHcpLEE9aSpsK2EqaCtvKmYsVD1nKmwrdipoK20qZixNPShiLz1rKSpsKyhfLz1rKSpoKyh3Lz1rKSpmLFM9TWF0aC5hc2luKHUoQSkpLEU9TWF0aC5hdGFuMihNLFQpLEM9dGhpcy5hbmdsZS5fc3RhdGUsTD1DW0MubGVuZ3RoLTFdLHo9Q1tDLmxlbmd0aC0yXTtMJT0yKk1hdGguUEk7dmFyIE89TWF0aC5hYnMoTCsyKk1hdGguUEktRSksST1NYXRoLmFicyhMLUUpLEQ9TWF0aC5hYnMoTC0yKk1hdGguUEktRSk7TzxJJiYoTCs9MipNYXRoLlBJKSxEPEkmJihMLT0yKk1hdGguUEkpLHRoaXMuYW5nbGUuanVtcCh0aGlzLmFuZ2xlLmxhc3RUKCksTCx6KSx0aGlzLmFuZ2xlLnNldCh0LEUsUyl9fX19fSx7XCJmaWx0ZXJlZC12ZWN0b3JcIjoyMjMsXCJnbC1tYXQ0L2ludmVydFwiOjI2MixcImdsLW1hdDQvcm90YXRlXCI6MjY3LFwiZ2wtdmVjMy9jcm9zc1wiOjMyNyxcImdsLXZlYzMvZG90XCI6MzMyLFwiZ2wtdmVjMy9ub3JtYWxpemVcIjozNDl9XSw1Mjg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQqZSxhPW4qdCxvPWEtKGEtdCkscz10LW8sbD1uKmUsYz1sLShsLWUpLHU9ZS1jLGg9cyp1LShpLW8qYy1zKmMtbyp1KTtpZihyKXJldHVybiByWzBdPWgsclsxXT1pLHI7cmV0dXJuW2gsaV19O3ZhciBuPSsoTWF0aC5wb3coMiwyNykrMSl9LHt9XSw1Mjk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQrZSxpPW4tdCxhPWUtaSxvPXQtKG4taSk7aWYocilyZXR1cm4gclswXT1vK2EsclsxXT1uLHI7cmV0dXJuW28rYSxuXX19LHt9XSw1MzA6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgaT10KFwiYml0LXR3aWRkbGVcIiksYT10KFwiZHVwXCIpO2UuX19UWVBFREFSUkFZX1BPT0x8fChlLl9fVFlQRURBUlJBWV9QT09MPXtVSU5UODphKFszMiwwXSksVUlOVDE2OmEoWzMyLDBdKSxVSU5UMzI6YShbMzIsMF0pLElOVDg6YShbMzIsMF0pLElOVDE2OmEoWzMyLDBdKSxJTlQzMjphKFszMiwwXSksRkxPQVQ6YShbMzIsMF0pLERPVUJMRTphKFszMiwwXSksREFUQTphKFszMiwwXSksVUlOVDhDOmEoWzMyLDBdKSxCVUZGRVI6YShbMzIsMF0pfSk7dmFyIG89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5LHM9ZS5fX1RZUEVEQVJSQVlfUE9PTDtzLlVJTlQ4Q3x8KHMuVUlOVDhDPWEoWzMyLDBdKSkscy5CVUZGRVJ8fChzLkJVRkZFUj1hKFszMiwwXSkpO3ZhciBsPXMuREFUQSxjPXMuQlVGRkVSO2Z1bmN0aW9uIHUodCl7aWYodCl7dmFyIGU9dC5sZW5ndGh8fHQuYnl0ZUxlbmd0aCxyPWkubG9nMihlKTtsW3JdLnB1c2godCl9fWZ1bmN0aW9uIGgodCl7dD1pLm5leHRQb3cyKHQpO3ZhciBlPWkubG9nMih0KSxyPWxbZV07cmV0dXJuIHIubGVuZ3RoPjA/ci5wb3AoKTpuZXcgQXJyYXlCdWZmZXIodCl9ZnVuY3Rpb24gZih0KXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoaCh0KSwwLHQpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIG5ldyBVaW50MTZBcnJheShoKDIqdCksMCx0KX1mdW5jdGlvbiBkKHQpe3JldHVybiBuZXcgVWludDMyQXJyYXkoaCg0KnQpLDAsdCl9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gbmV3IEludDhBcnJheShoKHQpLDAsdCl9ZnVuY3Rpb24gdih0KXtyZXR1cm4gbmV3IEludDE2QXJyYXkoaCgyKnQpLDAsdCl9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gbmV3IEludDMyQXJyYXkoaCg0KnQpLDAsdCl9ZnVuY3Rpb24geSh0KXtyZXR1cm4gbmV3IEZsb2F0MzJBcnJheShoKDQqdCksMCx0KX1mdW5jdGlvbiB4KHQpe3JldHVybiBuZXcgRmxvYXQ2NEFycmF5KGgoOCp0KSwwLHQpfWZ1bmN0aW9uIGIodCl7cmV0dXJuIG8/bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGgodCksMCx0KTpmKHQpfWZ1bmN0aW9uIF8odCl7cmV0dXJuIG5ldyBEYXRhVmlldyhoKHQpLDAsdCl9ZnVuY3Rpb24gdyh0KXt0PWkubmV4dFBvdzIodCk7dmFyIGU9aS5sb2cyKHQpLHI9Y1tlXTtyZXR1cm4gci5sZW5ndGg+MD9yLnBvcCgpOm5ldyBuKHQpfXIuZnJlZT1mdW5jdGlvbih0KXtpZihuLmlzQnVmZmVyKHQpKWNbaS5sb2cyKHQubGVuZ3RoKV0ucHVzaCh0KTtlbHNle2lmKFwiW29iamVjdCBBcnJheUJ1ZmZlcl1cIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSYmKHQ9dC5idWZmZXIpLCF0KXJldHVybjt2YXIgZT10Lmxlbmd0aHx8dC5ieXRlTGVuZ3RoLHI9MHxpLmxvZzIoZSk7bFtyXS5wdXNoKHQpfX0sci5mcmVlVWludDg9ci5mcmVlVWludDE2PXIuZnJlZVVpbnQzMj1yLmZyZWVJbnQ4PXIuZnJlZUludDE2PXIuZnJlZUludDMyPXIuZnJlZUZsb2F0MzI9ci5mcmVlRmxvYXQ9ci5mcmVlRmxvYXQ2ND1yLmZyZWVEb3VibGU9ci5mcmVlVWludDhDbGFtcGVkPXIuZnJlZURhdGFWaWV3PWZ1bmN0aW9uKHQpe3UodC5idWZmZXIpfSxyLmZyZWVBcnJheUJ1ZmZlcj11LHIuZnJlZUJ1ZmZlcj1mdW5jdGlvbih0KXtjW2kubG9nMih0Lmxlbmd0aCldLnB1c2godCl9LHIubWFsbG9jPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09ZXx8XCJhcnJheWJ1ZmZlclwiPT09ZSlyZXR1cm4gaCh0KTtzd2l0Y2goZSl7Y2FzZVwidWludDhcIjpyZXR1cm4gZih0KTtjYXNlXCJ1aW50MTZcIjpyZXR1cm4gcCh0KTtjYXNlXCJ1aW50MzJcIjpyZXR1cm4gZCh0KTtjYXNlXCJpbnQ4XCI6cmV0dXJuIGcodCk7Y2FzZVwiaW50MTZcIjpyZXR1cm4gdih0KTtjYXNlXCJpbnQzMlwiOnJldHVybiBtKHQpO2Nhc2VcImZsb2F0XCI6Y2FzZVwiZmxvYXQzMlwiOnJldHVybiB5KHQpO2Nhc2VcImRvdWJsZVwiOmNhc2VcImZsb2F0NjRcIjpyZXR1cm4geCh0KTtjYXNlXCJ1aW50OF9jbGFtcGVkXCI6cmV0dXJuIGIodCk7Y2FzZVwiYnVmZmVyXCI6cmV0dXJuIHcodCk7Y2FzZVwiZGF0YVwiOmNhc2VcImRhdGF2aWV3XCI6cmV0dXJuIF8odCk7ZGVmYXVsdDpyZXR1cm4gbnVsbH1yZXR1cm4gbnVsbH0sci5tYWxsb2NBcnJheUJ1ZmZlcj1oLHIubWFsbG9jVWludDg9ZixyLm1hbGxvY1VpbnQxNj1wLHIubWFsbG9jVWludDMyPWQsci5tYWxsb2NJbnQ4PWcsci5tYWxsb2NJbnQxNj12LHIubWFsbG9jSW50MzI9bSxyLm1hbGxvY0Zsb2F0MzI9ci5tYWxsb2NGbG9hdD15LHIubWFsbG9jRmxvYXQ2ND1yLm1hbGxvY0RvdWJsZT14LHIubWFsbG9jVWludDhDbGFtcGVkPWIsci5tYWxsb2NEYXRhVmlldz1fLHIubWFsbG9jQnVmZmVyPXcsci5jbGVhckNhY2hlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDwzMjsrK3Qpcy5VSU5UOFt0XS5sZW5ndGg9MCxzLlVJTlQxNlt0XS5sZW5ndGg9MCxzLlVJTlQzMlt0XS5sZW5ndGg9MCxzLklOVDhbdF0ubGVuZ3RoPTAscy5JTlQxNlt0XS5sZW5ndGg9MCxzLklOVDMyW3RdLmxlbmd0aD0wLHMuRkxPQVRbdF0ubGVuZ3RoPTAscy5ET1VCTEVbdF0ubGVuZ3RoPTAscy5VSU5UOENbdF0ubGVuZ3RoPTAsbFt0XS5sZW5ndGg9MCxjW3RdLmxlbmd0aD0wfX0pLmNhbGwodGhpcyxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9LHQoXCJidWZmZXJcIikuQnVmZmVyKX0se1wiYml0LXR3aWRkbGVcIjo4MyxidWZmZXI6OTYsZHVwOjE2Mn1dLDUzMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7dGhpcy5yb290cz1uZXcgQXJyYXkodCksdGhpcy5yYW5rcz1uZXcgQXJyYXkodCk7Zm9yKHZhciBlPTA7ZTx0OysrZSl0aGlzLnJvb3RzW2VdPWUsdGhpcy5yYW5rc1tlXT0wfWUuZXhwb3J0cz1uO3ZhciBpPW4ucHJvdG90eXBlO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFwibGVuZ3RoXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3RzLmxlbmd0aH19KSxpLm1ha2VTZXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJvb3RzLmxlbmd0aDtyZXR1cm4gdGhpcy5yb290cy5wdXNoKHQpLHRoaXMucmFua3MucHVzaCgwKSx0fSxpLmZpbmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQscj10aGlzLnJvb3RzO3JbdF0hPT10Oyl0PXJbdF07Zm9yKDtyW2VdIT09dDspe3ZhciBuPXJbZV07cltlXT10LGU9bn1yZXR1cm4gdH0saS5saW5rPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5maW5kKHQpLG49dGhpcy5maW5kKGUpO2lmKHIhPT1uKXt2YXIgaT10aGlzLnJhbmtzLGE9dGhpcy5yb290cyxvPWlbcl0scz1pW25dO288cz9hW3JdPW46czxvP2Fbbl09cjooYVtuXT1yLCsraVtyXSl9fX0se31dLDUzMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIDA9PT10Lmxlbmd0aD90OmU/KHJ8fHQuc29ydChlKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xLG49dC5sZW5ndGgsaT10WzBdLGE9dFswXSxvPTE7bzxuOysrbylpZihhPWksZShpPXRbb10sYSkpe2lmKG89PT1yKXtyKys7Y29udGludWV9dFtyKytdPWl9cmV0dXJuIHQubGVuZ3RoPXIsdH0odCxlKSk6KHJ8fHQuc29ydCgpLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xLHI9dC5sZW5ndGgsbj10WzBdLGk9dFswXSxhPTE7YTxyOysrYSxpPW4paWYoaT1uLChuPXRbYV0pIT09aSl7aWYoYT09PWUpe2UrKztjb250aW51ZX10W2UrK109bn1yZXR1cm4gdC5sZW5ndGg9ZSx0fSh0KSl9fSx7fV0sNTMzOltmdW5jdGlvbih0LGUscil7dmFyIG49L1tcXCdcXFwiXS87ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PyhuLnRlc3QodC5jaGFyQXQoMCkpJiYodD10LnN1YnN0cigxKSksbi50ZXN0KHQuY2hhckF0KHQubGVuZ3RoLTEpKSYmKHQ9dC5zdWJzdHIoMCx0Lmxlbmd0aC0xKSksdCk6XCJcIn19LHt9XSw1MzQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe0FycmF5LmlzQXJyYXkocil8fChyPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpKTtmb3IodmFyIG49MCxpPXIubGVuZ3RoO248aTtuKyspe3ZhciBhPXJbbl07Zm9yKHZhciBvIGluIGEpaWYoKHZvaWQgMD09PWVbb118fEFycmF5LmlzQXJyYXkoZVtvXSl8fHRbb10hPT1lW29dKSYmbyBpbiBlKXt2YXIgcztpZighMD09PWFbb10pcz1lW29dO2Vsc2V7aWYoITE9PT1hW29dKWNvbnRpbnVlO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGFbb10mJnZvaWQgMD09PShzPWFbb10oZVtvXSx0LGUpKSljb250aW51ZX10W29dPXN9fXJldHVybiB0fX0se31dLDUzNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZXx8KGU9e30pO3JldHVybiBuKHQsZS5jYW52YXN8fGksZS5jb250ZXh0fHxhLGUpfTt2YXIgbj10KFwiLi9saWIvdnRleHRcIiksaT1udWxsLGE9bnVsbDtcInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQmJigoaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpKS53aWR0aD04MTkyLGkuaGVpZ2h0PTEwMjQsYT1pLmdldENvbnRleHQoXCIyZFwiKSl9LHtcIi4vbGliL3Z0ZXh0XCI6NTM2fV0sNTM2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPTY0LG89MS4yNSxzPXticmVha2xpbmVzOiExLGJvbGRzOiExLGl0YWxpY3M6ITEsc3Vic2NyaXB0czohMSxzdXBlcnNjcmlwdHM6ITF9O24mJihuLnNpemUmJm4uc2l6ZT4wJiYoYT1uLnNpemUpLG4ubGluZVNwYWNpbmcmJm4ubGluZVNwYWNpbmc+MCYmKG89bi5saW5lU3BhY2luZyksbi5zdHlsZXRhZ3MmJm4uc3R5bGV0YWdzLmJyZWFrbGluZXMmJihzLmJyZWFrbGluZXM9ISFuLnN0eWxldGFncy5icmVha2xpbmVzKSxuLnN0eWxldGFncyYmbi5zdHlsZXRhZ3MuYm9sZHMmJihzLmJvbGRzPSEhbi5zdHlsZXRhZ3MuYm9sZHMpLG4uc3R5bGV0YWdzJiZuLnN0eWxldGFncy5pdGFsaWNzJiYocy5pdGFsaWNzPSEhbi5zdHlsZXRhZ3MuaXRhbGljcyksbi5zdHlsZXRhZ3MmJm4uc3R5bGV0YWdzLnN1YnNjcmlwdHMmJihzLnN1YnNjcmlwdHM9ISFuLnN0eWxldGFncy5zdWJzY3JpcHRzKSxuLnN0eWxldGFncyYmbi5zdHlsZXRhZ3Muc3VwZXJzY3JpcHRzJiYocy5zdXBlcnNjcmlwdHM9ISFuLnN0eWxldGFncy5zdXBlcnNjcmlwdHMpKTtyZXR1cm4gci5mb250PVtuLmZvbnRTdHlsZSxuLmZvbnRWYXJpYW50LG4uZm9udFdlaWdodCxhK1wicHhcIixuLmZvbnRdLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdH0pLmpvaW4oXCIgXCIpLHIudGV4dEFsaWduPVwic3RhcnRcIixyLnRleHRCYXNlbGluZT1cImFscGhhYmV0aWNcIixyLmRpcmVjdGlvbj1cImx0clwiLHcoZnVuY3Rpb24odCxlLHIsbixhLG8pe3I9ci5yZXBsYWNlKC9cXG4vZyxcIlwiKSxyPSEwPT09by5icmVha2xpbmVzP3IucmVwbGFjZSgvXFw8YnJcXD4vZyxcIlxcblwiKTpyLnJlcGxhY2UoL1xcPGJyXFw+L2csXCIgXCIpO3ZhciBzPVwiXCIsbD1bXTtmb3Ioaz0wO2s8ci5sZW5ndGg7KytrKWxba109czshMD09PW8uYm9sZHMmJihsPXgoYyx1LHIsbCkpLCEwPT09by5pdGFsaWNzJiYobD14KGgsZixyLGwpKSwhMD09PW8uc3VwZXJzY3JpcHRzJiYobD14KHAsZyxyLGwpKSwhMD09PW8uc3Vic2NyaXB0cyYmKGw9eCh2LHkscixsKSk7dmFyIGI9W10sXz1cIlwiO2ZvcihrPTA7azxyLmxlbmd0aDsrK2spbnVsbCE9PWxba10mJihfKz1yW2tdLGIucHVzaChsW2tdKSk7dmFyIHcsayxBLFQsTSxTPV8uc3BsaXQoXCJcXG5cIiksRT1TLmxlbmd0aCxDPU1hdGgucm91bmQoYSpuKSxMPW4sej0yKm4sTz0wLEk9RSpDK3o7dC5oZWlnaHQ8SSYmKHQuaGVpZ2h0PUkpLGUuZmlsbFN0eWxlPVwiIzAwMFwiLGUuZmlsbFJlY3QoMCwwLHQud2lkdGgsdC5oZWlnaHQpLGUuZmlsbFN0eWxlPVwiI2ZmZlwiO3ZhciBEPTAsUD1cIlwiO2Z1bmN0aW9uIFIoKXtpZihcIlwiIT09UCl7dmFyIHQ9ZS5tZWFzdXJlVGV4dChQKS53aWR0aDtlLmZpbGxUZXh0KFAsTCtBLHorVCksQSs9dH19ZnVuY3Rpb24gRigpe3JldHVybiBNYXRoLnJvdW5kKE0pK1wicHggXCJ9ZnVuY3Rpb24gQih0LHIpe3ZhciBuPVwiXCIrZS5mb250O2lmKCEwPT09by5zdWJzY3JpcHRzKXt2YXIgaT10LmluZGV4T2YobSksYT1yLmluZGV4T2YobSkscz1pPi0xP3BhcnNlSW50KHRbMStpXSk6MCxsPWE+LTE/cGFyc2VJbnQoclsxK2FdKTowO3MhPT1sJiYobj1uLnJlcGxhY2UoRigpLFwiP3B4IFwiKSxNKj1NYXRoLnBvdyguNzUsbC1zKSxuPW4ucmVwbGFjZShcIj9weCBcIixGKCkpKSxUKz0uMjUqQyoobC1zKX1pZighMD09PW8uc3VwZXJzY3JpcHRzKXt2YXIgYz10LmluZGV4T2YoZCksaD1yLmluZGV4T2YoZCkscD1jPi0xP3BhcnNlSW50KHRbMStjXSk6MCxnPWg+LTE/cGFyc2VJbnQoclsxK2hdKTowO3AhPT1nJiYobj1uLnJlcGxhY2UoRigpLFwiP3B4IFwiKSxNKj1NYXRoLnBvdyguNzUsZy1wKSxuPW4ucmVwbGFjZShcIj9weCBcIixGKCkpKSxULT0uMjUqQyooZy1wKX1pZighMD09PW8uYm9sZHMpe3ZhciB2PXQuaW5kZXhPZih1KT4tMSx5PXIuaW5kZXhPZih1KT4tMTshdiYmeSYmKG49eD9uLnJlcGxhY2UoXCJpdGFsaWMgXCIsXCJpdGFsaWMgYm9sZCBcIik6XCJib2xkIFwiK24pLHYmJiF5JiYobj1uLnJlcGxhY2UoXCJib2xkIFwiLFwiXCIpKX1pZighMD09PW8uaXRhbGljcyl7dmFyIHg9dC5pbmRleE9mKGYpPi0xLGI9ci5pbmRleE9mKGYpPi0xOyF4JiZiJiYobj1cIml0YWxpYyBcIituKSx4JiYhYiYmKG49bi5yZXBsYWNlKFwiaXRhbGljIFwiLFwiXCIpKX1lLmZvbnQ9bn1mb3Iodz0wO3c8RTsrK3cpe3ZhciBOPVNbd10rXCJcXG5cIjtmb3IoQT0wLFQ9dypDLE09bixQPVwiXCIsaz0wO2s8Ti5sZW5ndGg7KytrKXt2YXIgaj1rK0Q8Yi5sZW5ndGg/YltrK0RdOmJbYi5sZW5ndGgtMV07cz09PWo/UCs9TltrXTooUigpLFA9TltrXSx2b2lkIDAhPT1qJiYoQihzLGopLHM9aikpfVIoKSxEKz1OLmxlbmd0aDt2YXIgVj0wfE1hdGgucm91bmQoQSsyKkwpO088ViYmKE89Vil9dmFyIFU9TyxxPXorQypFO3JldHVybiBpKGUuZ2V0SW1hZ2VEYXRhKDAsMCxVLHEpLmRhdGEsW3EsVSw0XSkucGljaygtMSwtMSwwKS50cmFuc3Bvc2UoMSwwKX0oZSxyLHQsYSxvLHMpLG4sYSl9LGUuZXhwb3J0cy5wcm9jZXNzUGl4ZWxzPXc7dmFyIG49dChcInN1cmZhY2UtbmV0c1wiKSxpPXQoXCJuZGFycmF5XCIpLGE9dChcInNpbXBsaWZ5LXBsYW5hci1ncmFwaFwiKSxvPXQoXCJjbGVhbi1wc2xnXCIpLHM9dChcImNkdDJkXCIpLGw9dChcInBsYW5hci1ncmFwaC10by1wb2x5bGluZVwiKSxjPVwiYlwiLHU9XCJifFwiLGg9XCJpXCIsZj1cIml8XCIscD1cInN1cFwiLGQ9XCIrXCIsZz1cIisxXCIsdj1cInN1YlwiLG09XCItXCIseT1cIi0xXCI7ZnVuY3Rpb24geCh0LGUscixuKXtmb3IodmFyIGk9XCI8XCIrdCtcIj5cIixhPVwiPC9cIit0K1wiPlwiLG89aS5sZW5ndGgscz1hLmxlbmd0aCxsPWVbMF09PT1kfHxlWzBdPT09bSxjPTAsdT0tcztjPi0xJiYtMSE9PShjPXIuaW5kZXhPZihpLGMpKSYmLTEhPT0odT1yLmluZGV4T2YoYSxjK28pKSYmISh1PD1jKTspe2Zvcih2YXIgaD1jO2g8dStzOysraClpZihoPGMrb3x8aD49dSluW2hdPW51bGwscj1yLnN1YnN0cigwLGgpK1wiIFwiK3Iuc3Vic3RyKGgrMSk7ZWxzZSBpZihudWxsIT09bltoXSl7dmFyIGY9bltoXS5pbmRleE9mKGVbMF0pOy0xPT09Zj9uW2hdKz1lOmwmJihuW2hdPW5baF0uc3Vic3RyKDAsZisxKSsoMStwYXJzZUludChuW2hdW2YrMV0pKStuW2hdLnN1YnN0cihmKzIpKX12YXIgcD1jK28sZz1yLnN1YnN0cihwLHUtcCkuaW5kZXhPZihpKTtjPS0xIT09Zz9nOnUrc31yZXR1cm4gbn1mdW5jdGlvbiBiKHQsZSl7dmFyIHI9bih0LDEyOCk7cmV0dXJuIGU/YShyLmNlbGxzLHIucG9zaXRpb25zLC4yNSk6e2VkZ2VzOnIuY2VsbHMscG9zaXRpb25zOnIucG9zaXRpb25zfX1mdW5jdGlvbiBfKHQsZSxyLG4pe3ZhciBpPWIodCxuKSxhPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ZS50ZXh0QWxpZ258fFwic3RhcnRcIixpPWUudGV4dEJhc2VsaW5lfHxcImFscGhhYmV0aWNcIixhPVsxPDwzMCwxPDwzMF0sbz1bMCwwXSxzPXQubGVuZ3RoLGw9MDtsPHM7KytsKWZvcih2YXIgYz10W2xdLHU9MDt1PDI7Kyt1KWFbdV09MHxNYXRoLm1pbihhW3VdLGNbdV0pLG9bdV09MHxNYXRoLm1heChvW3VdLGNbdV0pO3ZhciBoPTA7c3dpdGNoKG4pe2Nhc2VcImNlbnRlclwiOmg9LS41KihhWzBdK29bMF0pO2JyZWFrO2Nhc2VcInJpZ2h0XCI6Y2FzZVwiZW5kXCI6aD0tb1swXTticmVhaztjYXNlXCJsZWZ0XCI6Y2FzZVwic3RhcnRcIjpoPS1hWzBdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwidmVjdG9yaXplLXRleHQ6IFVucmVjb2duaXplZCB0ZXh0QWxpZ246ICdcIituK1wiJ1wiKX12YXIgZj0wO3N3aXRjaChpKXtjYXNlXCJoYW5naW5nXCI6Y2FzZVwidG9wXCI6Zj0tYVsxXTticmVhaztjYXNlXCJtaWRkbGVcIjpmPS0uNSooYVsxXStvWzFdKTticmVhaztjYXNlXCJhbHBoYWJldGljXCI6Y2FzZVwiaWRlb2dyYXBoaWNcIjpmPS0zKnI7YnJlYWs7Y2FzZVwiYm90dG9tXCI6Zj0tb1sxXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcInZlY3Rvcml6ZS10ZXh0OiBVbnJlY29naW5pemVkIHRleHRCYXNlbGluZTogJ1wiK2krXCInXCIpfXZhciBwPTEvcjtyZXR1cm5cImxpbmVIZWlnaHRcImluIGU/cCo9K2UubGluZUhlaWdodDpcIndpZHRoXCJpbiBlP3A9ZS53aWR0aC8ob1swXS1hWzBdKTpcImhlaWdodFwiaW4gZSYmKHA9ZS5oZWlnaHQvKG9bMV0tYVsxXSkpLHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybltwKih0WzBdK2gpLHAqKHRbMV0rZildfSl9KGkucG9zaXRpb25zLGUsciksYz1pLmVkZ2VzLHU9XCJjY3dcIj09PWUub3JpZW50YXRpb247aWYobyhhLGMpLGUucG9seWdvbnN8fGUucG9seWdvbnx8ZS5wb2x5bGluZSl7Zm9yKHZhciBoPWwoYyxhKSxmPW5ldyBBcnJheShoLmxlbmd0aCkscD0wO3A8aC5sZW5ndGg7KytwKXtmb3IodmFyIGQ9aFtwXSxnPW5ldyBBcnJheShkLmxlbmd0aCksdj0wO3Y8ZC5sZW5ndGg7Kyt2KXtmb3IodmFyIG09ZFt2XSx5PW5ldyBBcnJheShtLmxlbmd0aCkseD0wO3g8bS5sZW5ndGg7Kyt4KXlbeF09YVttW3hdXS5zbGljZSgpO3UmJnkucmV2ZXJzZSgpLGdbdl09eX1mW3BdPWd9cmV0dXJuIGZ9cmV0dXJuIGUudHJpYW5nbGVzfHxlLnRyaWFuZ3VsYXRlfHxlLnRyaWFuZ2xlP3tjZWxsczpzKGEsYyx7ZGVsYXVuYXk6ITEsZXh0ZXJpb3I6ITEsaW50ZXJpb3I6ITB9KSxwb3NpdGlvbnM6YX06e2VkZ2VzOmMscG9zaXRpb25zOmF9fWZ1bmN0aW9uIHcodCxlLHIpe3RyeXtyZXR1cm4gXyh0LGUsciwhMCl9Y2F0Y2godCl7fXRyeXtyZXR1cm4gXyh0LGUsciwhMSl9Y2F0Y2godCl7fXJldHVybiBlLnBvbHlnb25zfHxlLnBvbHlsaW5lfHxlLnBvbHlnb24/W106ZS50cmlhbmdsZXN8fGUudHJpYW5ndWxhdGV8fGUudHJpYW5nbGU/e2NlbGxzOltdLHBvc2l0aW9uczpbXX06e2VkZ2VzOltdLHBvc2l0aW9uczpbXX19fSx7Y2R0MmQ6OTcsXCJjbGVhbi1wc2xnXCI6MTA3LG5kYXJyYXk6NDQzLFwicGxhbmFyLWdyYXBoLXRvLXBvbHlsaW5lXCI6NDYxLFwic2ltcGxpZnktcGxhbmFyLWdyYXBoXCI6NTA5LFwic3VyZmFjZS1uZXRzXCI6NTE2fV0sNTM3OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIHNlc3x8IXNlcy5va3x8c2VzLm9rKCkpe1widW5kZWZpbmVkXCIhPXR5cGVvZiBzZXMmJihzZXMud2Vha01hcFBlcm1pdEhvc3RPYmplY3RzPXYpO3ZhciB0PSExO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIFdlYWtNYXApe3ZhciByPVdlYWtNYXA7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvciYmL0ZpcmVmb3gvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpO2Vsc2V7dmFyIG49bmV3IHIsaT1PYmplY3QuZnJlZXplKHt9KTtpZihuLnNldChpLDEpLDE9PT1uLmdldChpKSlyZXR1cm4gdm9pZChlLmV4cG9ydHM9V2Vha01hcCk7dD0hMH19T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyxvPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxzPU9iamVjdC5pc0V4dGVuc2libGUsbD1cIndlYWttYXA6XCIsYz1sK1wiaWRlbnQ6XCIrTWF0aC5yYW5kb20oKStcIl9fX1wiO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBjcnlwdG8mJlwiZnVuY3Rpb25cIj09dHlwZW9mIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMmJlwiZnVuY3Rpb25cIj09dHlwZW9mIEFycmF5QnVmZmVyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBVaW50OEFycmF5KXt2YXIgdT1uZXcgQXJyYXlCdWZmZXIoMjUpLGg9bmV3IFVpbnQ4QXJyYXkodSk7Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyhoKSxjPWwrXCJyYW5kOlwiK0FycmF5LnByb3RvdHlwZS5tYXAuY2FsbChoLGZ1bmN0aW9uKHQpe3JldHVybih0JTM2KS50b1N0cmluZygzNil9KS5qb2luKFwiXCIpK1wiX19fXCJ9aWYobyhPYmplY3QsXCJnZXRPd25Qcm9wZXJ0eU5hbWVzXCIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBhKHQpLmZpbHRlcihtKX19KSxcImdldFByb3BlcnR5TmFtZXNcImluIE9iamVjdCl7dmFyIGY9T2JqZWN0LmdldFByb3BlcnR5TmFtZXM7byhPYmplY3QsXCJnZXRQcm9wZXJ0eU5hbWVzXCIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBmKHQpLmZpbHRlcihtKX19KX0hZnVuY3Rpb24oKXt2YXIgdD1PYmplY3QuZnJlZXplO28oT2JqZWN0LFwiZnJlZXplXCIse3ZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB5KGUpLHQoZSl9fSk7dmFyIGU9T2JqZWN0LnNlYWw7byhPYmplY3QsXCJzZWFsXCIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB5KHQpLGUodCl9fSk7dmFyIHI9T2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO28oT2JqZWN0LFwicHJldmVudEV4dGVuc2lvbnNcIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHkodCkscih0KX19KX0oKTt2YXIgcD0hMSxkPTAsZz1mdW5jdGlvbigpe3RoaXMgaW5zdGFuY2VvZiBnfHxiKCk7dmFyIHQ9W10sZT1bXSxyPWQrKztyZXR1cm4gT2JqZWN0LmNyZWF0ZShnLnByb3RvdHlwZSx7Z2V0X19fOnt2YWx1ZTp4KGZ1bmN0aW9uKG4saSl7dmFyIGEsbz15KG4pO3JldHVybiBvP3IgaW4gbz9vW3JdOmk6KGE9dC5pbmRleE9mKG4pKT49MD9lW2FdOml9KX0saGFzX19fOnt2YWx1ZTp4KGZ1bmN0aW9uKGUpe3ZhciBuPXkoZSk7cmV0dXJuIG4/ciBpbiBuOnQuaW5kZXhPZihlKT49MH0pfSxzZXRfX186e3ZhbHVlOngoZnVuY3Rpb24obixpKXt2YXIgYSxvPXkobik7cmV0dXJuIG8/b1tyXT1pOihhPXQuaW5kZXhPZihuKSk+PTA/ZVthXT1pOihhPXQubGVuZ3RoLGVbYV09aSx0W2FdPW4pLHRoaXN9KX0sZGVsZXRlX19fOnt2YWx1ZTp4KGZ1bmN0aW9uKG4pe3ZhciBpLGEsbz15KG4pO3JldHVybiBvP3IgaW4gbyYmZGVsZXRlIG9bcl06ISgoaT10LmluZGV4T2YobikpPDB8fChhPXQubGVuZ3RoLTEsdFtpXT12b2lkIDAsZVtpXT1lW2FdLHRbaV09dFthXSx0Lmxlbmd0aD1hLGUubGVuZ3RoPWEsMCkpfSl9fSl9O2cucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoT2JqZWN0LnByb3RvdHlwZSx7Z2V0Ont2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmdldF9fXyh0LGUpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9LGhhczp7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGFzX19fKHQpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9LHNldDp7dmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zZXRfX18odCxlKX0sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxkZWxldGU6e3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGV0ZV9fXyh0KX0sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLFwiZnVuY3Rpb25cIj09dHlwZW9mIHI/ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7dGhpcyBpbnN0YW5jZW9mIGd8fGIoKTt2YXIgZSxuPW5ldyByLGk9dm9pZCAwLGE9ITE7cmV0dXJuIGU9dD9mdW5jdGlvbih0LGUpe3JldHVybiBuLnNldCh0LGUpLG4uaGFzKHQpfHwoaXx8KGk9bmV3IGcpLGkuc2V0KHQsZSkpLHRoaXN9OmZ1bmN0aW9uKHQsZSl7aWYoYSl0cnl7bi5zZXQodCxlKX1jYXRjaChyKXtpfHwoaT1uZXcgZyksaS5zZXRfX18odCxlKX1lbHNlIG4uc2V0KHQsZSk7cmV0dXJuIHRoaXN9LE9iamVjdC5jcmVhdGUoZy5wcm90b3R5cGUse2dldF9fXzp7dmFsdWU6eChmdW5jdGlvbih0LGUpe3JldHVybiBpP24uaGFzKHQpP24uZ2V0KHQpOmkuZ2V0X19fKHQsZSk6bi5nZXQodCxlKX0pfSxoYXNfX186e3ZhbHVlOngoZnVuY3Rpb24odCl7cmV0dXJuIG4uaGFzKHQpfHwhIWkmJmkuaGFzX19fKHQpfSl9LHNldF9fXzp7dmFsdWU6eChlKX0sZGVsZXRlX19fOnt2YWx1ZTp4KGZ1bmN0aW9uKHQpe3ZhciBlPSEhbi5kZWxldGUodCk7cmV0dXJuIGkmJmkuZGVsZXRlX19fKHQpfHxlfSl9LHBlcm1pdEhvc3RPYmplY3RzX19fOnt2YWx1ZTp4KGZ1bmN0aW9uKHQpe2lmKHQhPT12KXRocm93IG5ldyBFcnJvcihcImJvZ3VzIGNhbGwgdG8gcGVybWl0SG9zdE9iamVjdHNfX19cIik7YT0hMH0pfX0pfXQmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBQcm94eSYmKFByb3h5PXZvaWQgMCksbi5wcm90b3R5cGU9Zy5wcm90b3R5cGUsZS5leHBvcnRzPW4sT2JqZWN0LmRlZmluZVByb3BlcnR5KFdlYWtNYXAucHJvdG90eXBlLFwiY29uc3RydWN0b3JcIix7dmFsdWU6V2Vha01hcCxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfSgpOihcInVuZGVmaW5lZFwiIT10eXBlb2YgUHJveHkmJihQcm94eT12b2lkIDApLGUuZXhwb3J0cz1nKX1mdW5jdGlvbiB2KHQpe3QucGVybWl0SG9zdE9iamVjdHNfX18mJnQucGVybWl0SG9zdE9iamVjdHNfX18odil9ZnVuY3Rpb24gbSh0KXtyZXR1cm4hKHQuc3Vic3RyKDAsbC5sZW5ndGgpPT1sJiZcIl9fX1wiPT09dC5zdWJzdHIodC5sZW5ndGgtMykpfWZ1bmN0aW9uIHkodCl7aWYodCE9PU9iamVjdCh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm90IGFuIG9iamVjdDogXCIrdCk7dmFyIGU9dFtjXTtpZihlJiZlLmtleT09PXQpcmV0dXJuIGU7aWYocyh0KSl7ZT17a2V5OnR9O3RyeXtyZXR1cm4gbyh0LGMse3ZhbHVlOmUsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITF9KSxlfWNhdGNoKHQpe3JldHVybn19fWZ1bmN0aW9uIHgodCl7cmV0dXJuIHQucHJvdG90eXBlPW51bGwsT2JqZWN0LmZyZWV6ZSh0KX1mdW5jdGlvbiBiKCl7cHx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIGNvbnNvbGV8fChwPSEwLGNvbnNvbGUud2FybihcIldlYWtNYXAgc2hvdWxkIGJlIGludm9rZWQgYXMgbmV3IFdlYWtNYXAoKSwgbm90IFdlYWtNYXAoKS4gVGhpcyB3aWxsIGJlIGFuIGVycm9yIGluIHRoZSBmdXR1cmUuXCIpKX19KCl9LHt9XSw1Mzg6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi9oaWRkZW4tc3RvcmUuanNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9e307cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKChcIm9iamVjdFwiIT10eXBlb2YgZXx8bnVsbD09PWUpJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcihcIldlYWttYXAtc2hpbTogS2V5IG11c3QgYmUgb2JqZWN0XCIpO3ZhciByPWUudmFsdWVPZih0KTtyZXR1cm4gciYmci5pZGVudGl0eT09PXQ/cjpuKGUsdCl9fX0se1wiLi9oaWRkZW4tc3RvcmUuanNcIjo1Mzl9XSw1Mzk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17aWRlbnRpdHk6ZX0sbj10LnZhbHVlT2Y7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwidmFsdWVPZlwiLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdCE9PWU/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6cn0sd3JpdGFibGU6ITB9KSxyfX0se31dLDU0MDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuL2NyZWF0ZS1zdG9yZS5qc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1uKCk7cmV0dXJue2dldDpmdW5jdGlvbihlLHIpe3ZhciBuPXQoZSk7cmV0dXJuIG4uaGFzT3duUHJvcGVydHkoXCJ2YWx1ZVwiKT9uLnZhbHVlOnJ9LHNldDpmdW5jdGlvbihlLHIpe3JldHVybiB0KGUpLnZhbHVlPXIsdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVyblwidmFsdWVcImluIHQoZSl9LGRlbGV0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZGVsZXRlIHQoZSkudmFsdWV9fX19LHtcIi4vY3JlYXRlLXN0b3JlLmpzXCI6NTM4fV0sNTQxOltmdW5jdGlvbih0LGUscil7dmFyIG49dChcImdldC1jYW52YXMtY29udGV4dFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJ3ZWJnbFwiLHQpfX0se1wiZ2V0LWNhbnZhcy1jb250ZXh0XCI6MjI5fV0sNTQyOltmdW5jdGlvbih0LGUscil7dmFyIG49dChcIi4uL21haW5cIiksaT10KFwib2JqZWN0LWFzc2lnblwiKSxhPW4uaW5zdGFuY2UoKTtmdW5jdGlvbiBvKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8XCJcIl18fHRoaXMucmVnaW9uYWxPcHRpb25zW1wiXCJdfW8ucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKG8ucHJvdG90eXBlLHtuYW1lOlwiQ2hpbmVzZVwiLGpkRXBvY2g6MTcyMTQyNS41LGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjAsZmlyc3RNb250aDowLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7XCJcIjp7bmFtZTpcIkNoaW5lc2VcIixlcG9jaHM6W1wiQkVDXCIsXCJFQ1wiXSxtb250aE51bWJlcnM6ZnVuY3Rpb24odCxlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7dmFyIHI9dC5tYXRjaChsKTtyZXR1cm4gcj9yWzBdOlwiXCJ9dmFyIG49dGhpcy5fdmFsaWRhdGVZZWFyKHQpLGk9dC5tb250aCgpLGE9XCJcIit0aGlzLnRvQ2hpbmVzZU1vbnRoKG4saSk7cmV0dXJuIGUmJmEubGVuZ3RoPDImJihhPVwiMFwiK2EpLHRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKG4saSkmJihhKz1cImlcIiksYX0sbW9udGhOYW1lczpmdW5jdGlvbih0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7dmFyIGU9dC5tYXRjaChjKTtyZXR1cm4gZT9lWzBdOlwiXCJ9dmFyIHI9dGhpcy5fdmFsaWRhdGVZZWFyKHQpLG49dC5tb250aCgpLGk9W1wiXFx1NGUwMFxcdTY3MDhcIixcIlxcdTRlOGNcXHU2NzA4XCIsXCJcXHU0ZTA5XFx1NjcwOFwiLFwiXFx1NTZkYlxcdTY3MDhcIixcIlxcdTRlOTRcXHU2NzA4XCIsXCJcXHU1MTZkXFx1NjcwOFwiLFwiXFx1NGUwM1xcdTY3MDhcIixcIlxcdTUxNmJcXHU2NzA4XCIsXCJcXHU0ZTVkXFx1NjcwOFwiLFwiXFx1NTM0MVxcdTY3MDhcIixcIlxcdTUzNDFcXHU0ZTAwXFx1NjcwOFwiLFwiXFx1NTM0MVxcdTRlOGNcXHU2NzA4XCJdW3RoaXMudG9DaGluZXNlTW9udGgocixuKS0xXTtyZXR1cm4gdGhpcy5pc0ludGVyY2FsYXJ5TW9udGgocixuKSYmKGk9XCJcXHU5NWYwXCIraSksaX0sbW9udGhOYW1lc1Nob3J0OmZ1bmN0aW9uKHQpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXt2YXIgZT10Lm1hdGNoKHUpO3JldHVybiBlP2VbMF06XCJcIn12YXIgcj10aGlzLl92YWxpZGF0ZVllYXIodCksbj10Lm1vbnRoKCksaT1bXCJcXHU0ZTAwXCIsXCJcXHU0ZThjXCIsXCJcXHU0ZTA5XCIsXCJcXHU1NmRiXCIsXCJcXHU0ZTk0XCIsXCJcXHU1MTZkXCIsXCJcXHU0ZTAzXCIsXCJcXHU1MTZiXCIsXCJcXHU0ZTVkXCIsXCJcXHU1MzQxXCIsXCJcXHU1MzQxXFx1NGUwMFwiLFwiXFx1NTM0MVxcdTRlOGNcIl1bdGhpcy50b0NoaW5lc2VNb250aChyLG4pLTFdO3JldHVybiB0aGlzLmlzSW50ZXJjYWxhcnlNb250aChyLG4pJiYoaT1cIlxcdTk1ZjBcIitpKSxpfSxwYXJzZU1vbnRoOmZ1bmN0aW9uKHQsZSl7dD10aGlzLl92YWxpZGF0ZVllYXIodCk7dmFyIHIsbj1wYXJzZUludChlKTtpZihpc05hTihuKSlcIlxcdTk1ZjBcIj09PWVbMF0mJihyPSEwLGU9ZS5zdWJzdHJpbmcoMSkpLFwiXFx1NjcwOFwiPT09ZVtlLmxlbmd0aC0xXSYmKGU9ZS5zdWJzdHJpbmcoMCxlLmxlbmd0aC0xKSksbj0xK1tcIlxcdTRlMDBcIixcIlxcdTRlOGNcIixcIlxcdTRlMDlcIixcIlxcdTU2ZGJcIixcIlxcdTRlOTRcIixcIlxcdTUxNmRcIixcIlxcdTRlMDNcIixcIlxcdTUxNmJcIixcIlxcdTRlNWRcIixcIlxcdTUzNDFcIixcIlxcdTUzNDFcXHU0ZTAwXCIsXCJcXHU1MzQxXFx1NGU4Y1wiXS5pbmRleE9mKGUpO2Vsc2V7dmFyIGk9ZVtlLmxlbmd0aC0xXTtyPVwiaVwiPT09aXx8XCJJXCI9PT1pfXJldHVybiB0aGlzLnRvTW9udGhJbmRleCh0LG4scil9LGRheU5hbWVzOltcIlN1bmRheVwiLFwiTW9uZGF5XCIsXCJUdWVzZGF5XCIsXCJXZWRuZXNkYXlcIixcIlRodXJzZGF5XCIsXCJGcmlkYXlcIixcIlNhdHVyZGF5XCJdLGRheU5hbWVzU2hvcnQ6W1wiU3VuXCIsXCJNb25cIixcIlR1ZVwiLFwiV2VkXCIsXCJUaHVcIixcIkZyaVwiLFwiU2F0XCJdLGRheU5hbWVzTWluOltcIlN1XCIsXCJNb1wiLFwiVHVcIixcIldlXCIsXCJUaFwiLFwiRnJcIixcIlNhXCJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6XCJ5eXl5L21tL2RkXCIsZmlyc3REYXk6MSxpc1JUTDohMX19LF92YWxpZGF0ZVllYXI6ZnVuY3Rpb24odCxlKXtpZih0LnllYXImJih0PXQueWVhcigpKSxcIm51bWJlclwiIT10eXBlb2YgdHx8dDwxODg4fHx0PjIxMTEpdGhyb3cgZS5yZXBsYWNlKC9cXHswXFx9Lyx0aGlzLmxvY2FsLm5hbWUpO3JldHVybiB0fSx0b01vbnRoSW5kZXg6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuaW50ZXJjYWxhcnlNb250aCh0KTtpZihyJiZlIT09aXx8ZTwxfHxlPjEyKXRocm93IG4ubG9jYWwuaW52YWxpZE1vbnRoLnJlcGxhY2UoL1xcezBcXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIGk/IXImJmU8PWk/ZS0xOmU6ZS0xfSx0b0NoaW5lc2VNb250aDpmdW5jdGlvbih0LGUpe3QueWVhciYmKGU9KHQ9dC55ZWFyKCkpLm1vbnRoKCkpO3ZhciByPXRoaXMuaW50ZXJjYWxhcnlNb250aCh0KTtpZihlPDB8fGU+KHI/MTI6MTEpKXRocm93IG4ubG9jYWwuaW52YWxpZE1vbnRoLnJlcGxhY2UoL1xcezBcXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIHI/ZTxyP2UrMTplOmUrMX0saW50ZXJjYWxhcnlNb250aDpmdW5jdGlvbih0KXtyZXR1cm4gdD10aGlzLl92YWxpZGF0ZVllYXIodCksaFt0LWhbMF1dPj4xM30saXNJbnRlcmNhbGFyeU1vbnRoOmZ1bmN0aW9uKHQsZSl7dC55ZWFyJiYoZT0odD10LnllYXIoKSkubW9udGgoKSk7dmFyIHI9dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpO3JldHVybiEhciYmcj09PWV9LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiAwIT09dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxvPXRoaXMuX3ZhbGlkYXRlWWVhcih0LG4ubG9jYWwuaW52YWxpZHllYXIpLHM9ZltvLWZbMF1dLGw9cz4+OSY0MDk1LGM9cz4+NSYxNSx1PTMxJnM7KGk9YS5uZXdEYXRlKGwsYyx1KSkuYWRkKDQtKGkuZGF5T2ZXZWVrKCl8fDcpLFwiZFwiKTt2YXIgaD10aGlzLnRvSkQodCxlLHIpLWkudG9KRCgpO3JldHVybiAxK01hdGguZmxvb3IoaC83KX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlYXBZZWFyKHQpPzEzOjEyfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3QueWVhciYmKGU9dC5tb250aCgpLHQ9dC55ZWFyKCkpLHQ9dGhpcy5fdmFsaWRhdGVZZWFyKHQpO3ZhciByPWhbdC1oWzBdXTtpZihlPihyPj4xMz8xMjoxMSkpdGhyb3cgbi5sb2NhbC5pbnZhbGlkTW9udGgucmVwbGFjZSgvXFx7MFxcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gciYxPDwxMi1lPzMwOjI5fSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LHMscixuLmxvY2FsLmludmFsaWREYXRlKTt0PXRoaXMuX3ZhbGlkYXRlWWVhcihpLnllYXIoKSksZT1pLm1vbnRoKCkscj1pLmRheSgpO3ZhciBvPXRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKHQsZSkscz10aGlzLnRvQ2hpbmVzZU1vbnRoKHQsZSksbD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLG8scztpZihcIm9iamVjdFwiPT10eXBlb2YgdClvPXQsYT1lfHx7fTtlbHNle3ZhciBsPVwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0xODg4JiZ0PD0yMTExO2lmKCFsKXRocm93IG5ldyBFcnJvcihcIkx1bmFyIHllYXIgb3V0c2lkZSByYW5nZSAxODg4LTIxMTFcIik7dmFyIGM9XCJudW1iZXJcIj09dHlwZW9mIGUmJmU+PTEmJmU8PTEyO2lmKCFjKXRocm93IG5ldyBFcnJvcihcIkx1bmFyIG1vbnRoIG91dHNpZGUgcmFuZ2UgMSAtIDEyXCIpO3ZhciB1LHA9XCJudW1iZXJcIj09dHlwZW9mIHImJnI+PTEmJnI8PTMwO2lmKCFwKXRocm93IG5ldyBFcnJvcihcIkx1bmFyIGRheSBvdXRzaWRlIHJhbmdlIDEgLSAzMFwiKTtcIm9iamVjdFwiPT10eXBlb2Ygbj8odT0hMSxhPW4pOih1PSEhbixhPWl8fHt9KSxvPXt5ZWFyOnQsbW9udGg6ZSxkYXk6cixpc0ludGVyY2FsYXJ5OnV9fXM9by5kYXktMTt2YXIgZCxnPWhbby55ZWFyLWhbMF1dLHY9Zz4+MTM7ZD12P28ubW9udGg+dj9vLm1vbnRoOm8uaXNJbnRlcmNhbGFyeT9vLm1vbnRoOm8ubW9udGgtMTpvLm1vbnRoLTE7Zm9yKHZhciBtPTA7bTxkO20rKyl7dmFyIHk9ZyYxPDwxMi1tPzMwOjI5O3MrPXl9dmFyIHg9ZltvLnllYXItZlswXV0sYj1uZXcgRGF0ZSh4Pj45JjQwOTUsKHg+PjUmMTUpLTEsKDMxJngpK3MpO3JldHVybiBhLnllYXI9Yi5nZXRGdWxsWWVhcigpLGEubW9udGg9MStiLmdldE1vbnRoKCksYS5kYXk9Yi5nZXREYXRlKCksYX0odCxzLHIsbyk7cmV0dXJuIGEudG9KRChsLnllYXIsbC5tb250aCxsLmRheSl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1hLmZyb21KRCh0KSxyPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE7aWYoXCJvYmplY3RcIj09dHlwZW9mIHQpaT10LGE9ZXx8e307ZWxzZXt2YXIgbz1cIm51bWJlclwiPT10eXBlb2YgdCYmdD49MTg4OCYmdDw9MjExMTtpZighbyl0aHJvdyBuZXcgRXJyb3IoXCJTb2xhciB5ZWFyIG91dHNpZGUgcmFuZ2UgMTg4OC0yMTExXCIpO3ZhciBzPVwibnVtYmVyXCI9PXR5cGVvZiBlJiZlPj0xJiZlPD0xMjtpZighcyl0aHJvdyBuZXcgRXJyb3IoXCJTb2xhciBtb250aCBvdXRzaWRlIHJhbmdlIDEgLSAxMlwiKTt2YXIgbD1cIm51bWJlclwiPT10eXBlb2YgciYmcj49MSYmcjw9MzE7aWYoIWwpdGhyb3cgbmV3IEVycm9yKFwiU29sYXIgZGF5IG91dHNpZGUgcmFuZ2UgMSAtIDMxXCIpO2k9e3llYXI6dCxtb250aDplLGRheTpyfSxhPW58fHt9fXZhciBjPWZbaS55ZWFyLWZbMF1dLHU9aS55ZWFyPDw5fGkubW9udGg8PDV8aS5kYXk7YS55ZWFyPXU+PWM/aS55ZWFyOmkueWVhci0xLGM9ZlthLnllYXItZlswXV07dmFyIHAsZD1uZXcgRGF0ZShjPj45JjQwOTUsKGM+PjUmMTUpLTEsMzEmYyksZz1uZXcgRGF0ZShpLnllYXIsaS5tb250aC0xLGkuZGF5KTtwPU1hdGgucm91bmQoKGctZCkvODY0ZTUpO3ZhciB2LG09aFthLnllYXItaFswXV07Zm9yKHY9MDt2PDEzO3YrKyl7dmFyIHk9bSYxPDwxMi12PzMwOjI5O2lmKHA8eSlicmVhaztwLT15fXZhciB4PW0+PjEzOyF4fHx2PHg/KGEuaXNJbnRlcmNhbGFyeT0hMSxhLm1vbnRoPTErdik6dj09PXg/KGEuaXNJbnRlcmNhbGFyeT0hMCxhLm1vbnRoPXYpOihhLmlzSW50ZXJjYWxhcnk9ITEsYS5tb250aD12KTtyZXR1cm4gYS5kYXk9MStwLGF9KGUueWVhcigpLGUubW9udGgoKSxlLmRheSgpKSxuPXRoaXMudG9Nb250aEluZGV4KHIueWVhcixyLm1vbnRoLHIuaXNJbnRlcmNhbGFyeSk7cmV0dXJuIHRoaXMubmV3RGF0ZShyLnllYXIsbixyLmRheSl9LGZyb21TdHJpbmc6ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaChzKSxyPXRoaXMuX3ZhbGlkYXRlWWVhcigrZVsxXSksbj0rZVsyXSxpPSEhZVszXSxhPXRoaXMudG9Nb250aEluZGV4KHIsbixpKSxvPStlWzRdO3JldHVybiB0aGlzLm5ld0RhdGUocixhLG8pfSxhZGQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQueWVhcigpLGk9dC5tb250aCgpLGE9dGhpcy5pc0ludGVyY2FsYXJ5TW9udGgobixpKSxzPXRoaXMudG9DaGluZXNlTW9udGgobixpKSxsPU9iamVjdC5nZXRQcm90b3R5cGVPZihvLnByb3RvdHlwZSkuYWRkLmNhbGwodGhpcyx0LGUscik7aWYoXCJ5XCI9PT1yKXt2YXIgYz1sLnllYXIoKSx1PWwubW9udGgoKSxoPXRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKGMscyksZj1hJiZoP3RoaXMudG9Nb250aEluZGV4KGMscywhMCk6dGhpcy50b01vbnRoSW5kZXgoYyxzLCExKTtmIT09dSYmbC5tb250aChmKX1yZXR1cm4gbH19KTt2YXIgcz0vXlxccyooLT9cXGRcXGRcXGRcXGR8XFxkXFxkKVstXFwvXShcXGQ/XFxkKShbaUldPylbLVxcL10oXFxkP1xcZCkvbSxsPS9eXFxkP1xcZFtpSV0/L20sYz0vXlxcdTk1ZjA/XFx1NTM0MT9bXFx1NGUwMFxcdTRlOGNcXHU0ZTA5XFx1NTZkYlxcdTRlOTRcXHU1MTZkXFx1NGUwM1xcdTUxNmJcXHU0ZTVkXT9cXHU2NzA4L20sdT0vXlxcdTk1ZjA/XFx1NTM0MT9bXFx1NGUwMFxcdTRlOGNcXHU0ZTA5XFx1NTZkYlxcdTRlOTRcXHU1MTZkXFx1NGUwM1xcdTUxNmJcXHU0ZTVkXT8vbTtuLmNhbGVuZGFycy5jaGluZXNlPW87dmFyIGg9WzE4ODcsNTc4MCw1ODAyLDE5MTU3LDI3NDIsNTAzNTksMTE5OCwyNjQ2LDQ2Mzc4LDc0NjYsMzQxMiwzMDEyMiw1NDgyLDY3OTQ5LDIzOTYsNTI5NCw0MzU5Nyw2NzMyLDY5NTQsMzYxODEsMjc3Miw0OTU0LDE4NzgxLDIzOTYsNTQ0MjcsNTI3NCw2NzMwLDQ3NzgxLDU4MDAsNjg2OCwyMTIxMCw0NzkwLDU5NzAzLDIzNTAsNTI3MCw0NjY2NywzNDAyLDM0OTYsMzgzMjUsMTM4OCw0NzgyLDE4NzM1LDIzNTAsNTIzNzQsNjgwNCw3NDk4LDQ0NDU3LDI5MDYsMTM4OCwyOTI5NCw0NzAwLDYzNzg5LDY0NDIsNjgwNCw1NjEzOCw1ODAyLDI3NzIsMzgyMzUsMTIxMCw0Njk4LDIyODI3LDU0MTgsNjMxMjUsMzQ3Niw1ODAyLDQzNzAxLDI0ODQsNTMwMiwyNzIyMywyNjQ2LDcwOTU0LDc0NjYsMzQxMiw1NDY5OCw1NDgyLDI0MTIsMzgwNjIsNTI5NCwyNjM2LDMyMDM4LDY5NTQsNjAyNDUsMjc3Miw0ODI2LDQzMzU3LDIzOTQsNTI3NCwzOTUwMSw2NzMwLDcyMzU3LDU4MDAsNTg0NCw1Mzk3OCw0NzkwLDIzNTgsMzgwMzksNTI3MCw4NzYyNywzNDAyLDM0OTYsNTQ3MDgsNTQ4NCw0NzgyLDQzMzExLDIzNTAsMzIyMiwyNzk3OCw3NDk4LDY4OTY1LDI5MDQsNTQ4NCw0NTY3Nyw0NzAwLDY0NDQsMzk1NzMsNjgwNCw2OTg2LDE5Mjg1LDI3NzIsNjI4MTEsMTIxMCw0Njk4LDQ3NDAzLDU0MTgsNTc4MCwzODU3MCw1NTQ2LDc2NDY5LDI0MjAsNTMwMiw1MTc5OSwyNjQ2LDU0MTQsMzY1MDEsMzQxMiw1NTQ2LDE4ODY5LDI0MTIsNTQ0NDYsNTI3Niw2NzMyLDQ4NDIyLDY4MjIsMjkwMCwyODAxMCw0ODI2LDkyNTA5LDIzOTQsNTI3NCw1NTg4Myw2NzMwLDY4MjAsNDc5NTYsNTgxMiwyNzc4LDE4Nzc5LDIzNTgsNjI2MTUsNTI3MCw1NDUwLDQ2NzU3LDM0OTIsNTU1NiwyNzMxOCw0NzE4LDY3ODg3LDIzNTAsMzIyMiw1MjU1NCw3NDk4LDM0MjgsMzgyNTIsNTQ2OCw0NzAwLDMxMDIyLDY0NDQsNjQxNDksNjgwNCw2OTg2LDQzODYxLDI3NzIsNTMzOCwzNTQyMSwyNjUwLDcwOTU1LDU0MTgsNTc4MCw1NDk1NCw1NTQ2LDI3NDAsMzgwNzQsNTMwMiwyNjQ2LDI5OTkxLDMzNjYsNjEwMTEsMzQxMiw1NTQ2LDQzNDQ1LDI0MTIsNTI5NCwzNTQwNiw2NzMyLDcyOTk4LDY4MjAsNjk5Niw1MjU4NiwyNzc4LDIzOTYsMzgwNDUsNTI3NCw2Njk4LDIzMzMzLDY4MjAsNjQzMzgsNTgxMiwyNzQ2LDQzMzU1LDIzNTgsNTI3MCwzOTQ5OSw1NDUwLDc5NTI1LDM0OTIsNTU0OF0sZj1bMTg4Nyw5NjY3MzIsOTY3MjMxLDk2NzczMyw5NjgyNjUsOTY4NzY2LDk2OTI5Nyw5Njk3OTgsOTcwMjk4LDk3MDgyOSw5NzEzMzAsOTcxODMwLDk3MjM2Miw5NzI4NjMsOTczMzk1LDk3Mzg5Niw5NzQzOTcsOTc0OTI4LDk3NTQyOCw5NzU5MjksOTc2NDYxLDk3Njk2Miw5Nzc0NjIsOTc3OTk0LDk3ODQ5NCw5NzkwMjYsOTc5NTI2LDk4MDAyNiw5ODA1NTgsOTgxMDU5LDk4MTU1OSw5ODIwOTEsOTgyNTkzLDk4MzEyNCw5ODM2MjQsOTg0MTI0LDk4NDY1Niw5ODUxNTcsOTg1NjU2LDk4NjE4OSw5ODY2OTAsOTg3MTkxLDk4NzcyMiw5ODgyMjIsOTg4NzUzLDk4OTI1NCw5ODk3NTQsOTkwMjg2LDk5MDc4OCw5OTEyODgsOTkxODE5LDk5MjMxOSw5OTI4NTEsOTkzMzUyLDk5Mzg1MSw5OTQzODMsOTk0ODg1LDk5NTM4NSw5OTU5MTcsOTk2NDE4LDk5NjkxOCw5OTc0NTAsOTk3OTQ5LDk5ODQ4MSw5OTg5ODIsOTk5NDgzLDEwMDAwMTQsMTAwMDUxNSwxMDAxMDE2LDEwMDE1NDgsMTAwMjA0NywxMDAyNTc4LDEwMDMwODAsMTAwMzU4MCwxMDA0MTExLDEwMDQ2MTMsMTAwNTExMywxMDA1NjQ1LDEwMDYxNDYsMTAwNjY0NSwxMDA3MTc3LDEwMDc2NzgsMTAwODIwOSwxMDA4NzEwLDEwMDkyMTEsMTAwOTc0MywxMDEwMjQzLDEwMTA3NDMsMTAxMTI3NSwxMDExNzc1LDEwMTIzMDYsMTAxMjgwNywxMDEzMzA4LDEwMTM4NDAsMTAxNDM0MSwxMDE0ODQxLDEwMTUzNzMsMTAxNTg3NCwxMDE2NDA0LDEwMTY5MDUsMTAxNzQwNSwxMDE3OTM3LDEwMTg0MzgsMTAxODkzOSwxMDE5NDcxLDEwMTk5NzIsMTAyMDQ3MSwxMDIxMDAyLDEwMjE1MDMsMTAyMjAzNSwxMDIyNTM1LDEwMjMwMzYsMTAyMzU2OCwxMDI0MDY5LDEwMjQ1NjgsMTAyNTEwMCwxMDI1NjAxLDEwMjYxMDIsMTAyNjYzMywxMDI3MTMzLDEwMjc2NjYsMTAyODE2NywxMDI4NjY2LDEwMjkxOTgsMTAyOTY5OSwxMDMwMTk5LDEwMzA3MzAsMTAzMTIzMSwxMDMxNzYzLDEwMzIyNjQsMTAzMjc2NCwxMDMzMjk2LDEwMzM3OTcsMTAzNDI5NywxMDM0ODI4LDEwMzUzMjksMTAzNTgzMCwxMDM2MzYyLDEwMzY4NjEsMTAzNzM5MywxMDM3ODk0LDEwMzgzOTQsMTAzODkyNSwxMDM5NDI3LDEwMzk5MjcsMTA0MDQ1OSwxMDQwOTU5LDEwNDE0OTEsMTA0MTk5MiwxMDQyNDkyLDEwNDMwMjMsMTA0MzUyNCwxMDQ0MDI0LDEwNDQ1NTYsMTA0NTA1NywxMDQ1NTU4LDEwNDYwOTAsMTA0NjU5MCwxMDQ3MTIxLDEwNDc2MjIsMTA0ODEyMiwxMDQ4NjU0LDEwNDkxNTQsMTA0OTY1NSwxMDUwMTg3LDEwNTA2ODksMTA1MTIxOSwxMDUxNzIwLDEwNTIyMjAsMTA1Mjc1MSwxMDUzMjUyLDEwNTM3NTIsMTA1NDI4NCwxMDU0Nzg2LDEwNTUyODUsMTA1NTgxNywxMDU2MzE3LDEwNTY4NDksMTA1NzM0OSwxMDU3ODUwLDEwNTgzODIsMTA1ODg4MywxMDU5MzgzLDEwNTk5MTUsMTA2MDQxNSwxMDYwOTQ3LDEwNjE0NDcsMTA2MTk0NywxMDYyNDc5LDEwNjI5ODEsMTA2MzQ4MCwxMDY0MDEyLDEwNjQ1MTQsMTA2NTAxNCwxMDY1NTQ1LDEwNjYwNDUsMTA2NjU3NywxMDY3MDc4LDEwNjc1NzgsMTA2ODExMCwxMDY4NjExLDEwNjkxMTIsMTA2OTY0MiwxMDcwMTQyLDEwNzA2NzQsMTA3MTE3NSwxMDcxNjc1LDEwNzIyMDcsMTA3MjcwOSwxMDczMjA5LDEwNzM3NDAsMTA3NDI0MSwxMDc0NzQxLDEwNzUyNzMsMTA3NTc3MywxMDc2MzA1LDEwNzY4MDcsMTA3NzMwOCwxMDc3ODM5LDEwNzgzNDAsMTA3ODg0MCwxMDc5MzcyLDEwNzk4NzEsMTA4MDQwMywxMDgwOTA0XX0se1wiLi4vbWFpblwiOjU1NixcIm9iamVjdC1hc3NpZ25cIjo0NDd9XSw1NDM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi4vbWFpblwiKSxpPXQoXCJvYmplY3QtYXNzaWduXCIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHxcIlwiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbXCJcIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6XCJDb3B0aWNcIixqZEVwb2NoOjE4MjUwMjkuNSxkYXlzUGVyTW9udGg6WzMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDVdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7XCJcIjp7bmFtZTpcIkNvcHRpY1wiLGVwb2NoczpbXCJCQU1cIixcIkFNXCJdLG1vbnRoTmFtZXM6W1wiVGhvdXRcIixcIlBhb3BpXCIsXCJIYXRob3JcIixcIktvaWFrXCIsXCJUb2JpXCIsXCJNZXNoaXJcIixcIlBhcmVtaGF0XCIsXCJQYXJlbW91ZGVcIixcIlBhc2hvbnNcIixcIlBhb25pXCIsXCJFcGlwXCIsXCJNZXNvcmlcIixcIlBpIEtvZ2kgRW5hdm90XCJdLG1vbnRoTmFtZXNTaG9ydDpbXCJUaG9cIixcIlBhb1wiLFwiSGF0aFwiLFwiS29pXCIsXCJUb2JcIixcIk1lc2hcIixcIlBhdFwiLFwiUGFkXCIsXCJQYXNoXCIsXCJQYW9cIixcIkVwaVwiLFwiTWVzb1wiLFwiUGlLXCJdLGRheU5hbWVzOltcIlRreXJpYWthXCIsXCJQZXNuYXVcIixcIlBzaG9tZW50XCIsXCJQZWZ0b291XCIsXCJQdGlvdVwiLFwiUHNvb3VcIixcIlBzYWJiYXRvblwiXSxkYXlOYW1lc1Nob3J0OltcIlRreVwiLFwiUGVzXCIsXCJQc2hcIixcIlBlZlwiLFwiUHRpXCIsXCJQc29cIixcIlBzYVwiXSxkYXlOYW1lc01pbjpbXCJUa1wiLFwiUGVzXCIsXCJQc2hcIixcIlBlZlwiLFwiUHRcIixcIlBzb1wiLFwiUHNhXCJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6XCJkZC9tbS95eXl5XCIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4odD1lLnllYXIoKSsoZS55ZWFyKCk8MD8xOjApKSU0PT0zfHx0JTQ9PS0xfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyfHxuLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkWWVhciksMTN9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLFwiZFwiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMz09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuKHQ9aS55ZWFyKCkpPDAmJnQrKyxpLmRheSgpKzMwKihpLm1vbnRoKCktMSkrMzY1Kih0LTEpK01hdGguZmxvb3IodC80KSt0aGlzLmpkRXBvY2gtMX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodCkrLjUtdGhpcy5qZEVwb2NoLHI9TWF0aC5mbG9vcigoZS1NYXRoLmZsb29yKChlKzM2NikvMTQ2MSkpLzM2NSkrMTtyPD0wJiZyLS0sZT1NYXRoLmZsb29yKHQpKy41LXRoaXMubmV3RGF0ZShyLDEsMSkudG9KRCgpO3ZhciBuPU1hdGguZmxvb3IoZS8zMCkrMSxpPWUtMzAqKG4tMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIsbixpKX19KSxuLmNhbGVuZGFycy5jb3B0aWM9YX0se1wiLi4vbWFpblwiOjU1NixcIm9iamVjdC1hc3NpZ25cIjo0NDd9XSw1NDQ6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi4vbWFpblwiKSxpPXQoXCJvYmplY3QtYXNzaWduXCIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHxcIlwiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbXCJcIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6XCJEaXNjd29ybGRcIixqZEVwb2NoOjE3MjE0MjUuNSxkYXlzUGVyTW9udGg6WzE2LDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6e1wiXCI6e25hbWU6XCJEaXNjd29ybGRcIixlcG9jaHM6W1wiQlVDXCIsXCJVQ1wiXSxtb250aE5hbWVzOltcIklja1wiLFwiT2ZmbGVcIixcIkZlYnJ1YXJ5XCIsXCJNYXJjaFwiLFwiQXByaWxcIixcIk1heVwiLFwiSnVuZVwiLFwiR3J1bmVcIixcIkF1Z3VzdFwiLFwiU3B1bmVcIixcIlNla3RvYmVyXCIsXCJFbWJlclwiLFwiRGVjZW1iZXJcIl0sbW9udGhOYW1lc1Nob3J0OltcIklja1wiLFwiT2ZmXCIsXCJGZWJcIixcIk1hclwiLFwiQXByXCIsXCJNYXlcIixcIkp1blwiLFwiR3J1XCIsXCJBdWdcIixcIlNwdVwiLFwiU2VrXCIsXCJFbWJcIixcIkRlY1wiXSxkYXlOYW1lczpbXCJTdW5kYXlcIixcIk9jdGVkYXlcIixcIk1vbmRheVwiLFwiVHVlc2RheVwiLFwiV2VkbmVzZGF5XCIsXCJUaHVyc2RheVwiLFwiRnJpZGF5XCIsXCJTYXR1cmRheVwiXSxkYXlOYW1lc1Nob3J0OltcIlN1blwiLFwiT2N0XCIsXCJNb25cIixcIlR1ZVwiLFwiV2VkXCIsXCJUaHVcIixcIkZyaVwiLFwiU2F0XCJdLGRheU5hbWVzTWluOltcIlN1XCIsXCJPY1wiLFwiTW9cIixcIlR1XCIsXCJXZVwiLFwiVGhcIixcIkZyXCIsXCJTYVwiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OlwieXl5eS9tbS9kZFwiLGZpcnN0RGF5OjIsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLCExfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKSwxM30sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLDQwMH0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksXCJkXCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvOCkrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV19LGRheXNJbldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gOH0sZGF5T2ZXZWVrOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSkuZGF5KCkrMSklOH0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5kYXlPZldlZWsodCxlLHIpO3JldHVybiBuPj0yJiZuPD02fSxleHRyYUluZm86ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybntjZW50dXJ5Om9bTWF0aC5mbG9vcigoaS55ZWFyKCktMSkvMTAwKSsxXXx8XCJcIn19LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybiB0PWkueWVhcigpKyhpLnllYXIoKTwwPzE6MCksZT1pLm1vbnRoKCksKHI9aS5kYXkoKSkrKGU+MT8xNjowKSsoZT4yPzMyKihlLTIpOjApKzQwMCoodC0xKSt0aGlzLmpkRXBvY2gtMX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3Q9TWF0aC5mbG9vcih0Ky41KS1NYXRoLmZsb29yKHRoaXMuamRFcG9jaCktMTt2YXIgZT1NYXRoLmZsb29yKHQvNDAwKSsxO3QtPTQwMCooZS0xKSx0Kz10PjE1PzE2OjA7dmFyIHI9TWF0aC5mbG9vcih0LzMyKSsxLG49dC0zMiooci0xKSsxO3JldHVybiB0aGlzLm5ld0RhdGUoZTw9MD9lLTE6ZSxyLG4pfX0pO3ZhciBvPXsyMDpcIkZydWl0YmF0XCIsMjE6XCJBbmNob3Z5XCJ9O24uY2FsZW5kYXJzLmRpc2N3b3JsZD1hfSx7XCIuLi9tYWluXCI6NTU2LFwib2JqZWN0LWFzc2lnblwiOjQ0N31dLDU0NTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuLi9tYWluXCIpLGk9dChcIm9iamVjdC1hc3NpZ25cIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fFwiXCJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZTpcIkV0aGlvcGlhblwiLGpkRXBvY2g6MTcyNDIyMC41LGRheXNQZXJNb250aDpbMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsNV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOntcIlwiOntuYW1lOlwiRXRoaW9waWFuXCIsZXBvY2hzOltcIkJFRVwiLFwiRUVcIl0sbW9udGhOYW1lczpbXCJNZXNrZXJlbVwiLFwiVGlrZW1ldFwiLFwiSGlkYXJcIixcIlRhaGVzYXNcIixcIlRpclwiLFwiWWVrYXRpdFwiLFwiTWVnYWJpdFwiLFwiTWlhemlhXCIsXCJHZW5ib3RcIixcIlNlbmVcIixcIkhhbWxlXCIsXCJOZWhhc2VcIixcIlBhZ3VtZVwiXSxtb250aE5hbWVzU2hvcnQ6W1wiTWVzXCIsXCJUaWtcIixcIkhpZFwiLFwiVGFoXCIsXCJUaXJcIixcIllla1wiLFwiTWVnXCIsXCJNaWFcIixcIkdlblwiLFwiU2VuXCIsXCJIYW1cIixcIk5laFwiLFwiUGFnXCJdLGRheU5hbWVzOltcIkVodWRcIixcIlNlZ25vXCIsXCJNYWtzZWdub1wiLFwiSXJvYlwiLFwiSGFtdXNcIixcIkFyYlwiLFwiS2lkYW1lXCJdLGRheU5hbWVzU2hvcnQ6W1wiRWh1XCIsXCJTZWdcIixcIk1ha1wiLFwiSXJvXCIsXCJIYW1cIixcIkFyYlwiLFwiS2lkXCJdLGRheU5hbWVzTWluOltcIkVoXCIsXCJTZVwiLFwiTWFcIixcIklyXCIsXCJIYVwiLFwiQXJcIixcIktpXCJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6XCJkZC9tbS95eXl5XCIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4odD1lLnllYXIoKSsoZS55ZWFyKCk8MD8xOjApKSU0PT0zfHx0JTQ9PS0xfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyfHxuLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkWWVhciksMTN9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLFwiZFwiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMz09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuKHQ9aS55ZWFyKCkpPDAmJnQrKyxpLmRheSgpKzMwKihpLm1vbnRoKCktMSkrMzY1Kih0LTEpK01hdGguZmxvb3IodC80KSt0aGlzLmpkRXBvY2gtMX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodCkrLjUtdGhpcy5qZEVwb2NoLHI9TWF0aC5mbG9vcigoZS1NYXRoLmZsb29yKChlKzM2NikvMTQ2MSkpLzM2NSkrMTtyPD0wJiZyLS0sZT1NYXRoLmZsb29yKHQpKy41LXRoaXMubmV3RGF0ZShyLDEsMSkudG9KRCgpO3ZhciBuPU1hdGguZmxvb3IoZS8zMCkrMSxpPWUtMzAqKG4tMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIsbixpKX19KSxuLmNhbGVuZGFycy5ldGhpb3BpYW49YX0se1wiLi4vbWFpblwiOjU1NixcIm9iamVjdC1hc3NpZ25cIjo0NDd9XSw1NDY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi4vbWFpblwiKSxpPXQoXCJvYmplY3QtYXNzaWduXCIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHxcIlwiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbXCJcIl19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0LWUqTWF0aC5mbG9vcih0L2UpfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOlwiSGVicmV3XCIsamRFcG9jaDozNDc5OTUuNSxkYXlzUGVyTW9udGg6WzMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5LDI5XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6NyxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6e1wiXCI6e25hbWU6XCJIZWJyZXdcIixlcG9jaHM6W1wiQkFNXCIsXCJBTVwiXSxtb250aE5hbWVzOltcIk5pc2FuXCIsXCJJeWFyXCIsXCJTaXZhblwiLFwiVGFtbXV6XCIsXCJBdlwiLFwiRWx1bFwiLFwiVGlzaHJlaVwiLFwiQ2hlc2h2YW5cIixcIktpc2xldlwiLFwiVGV2ZXRcIixcIlNoZXZhdFwiLFwiQWRhclwiLFwiQWRhciBJSVwiXSxtb250aE5hbWVzU2hvcnQ6W1wiTmlzXCIsXCJJeWFcIixcIlNpdlwiLFwiVGFtXCIsXCJBdlwiLFwiRWx1XCIsXCJUaXNcIixcIkNoZVwiLFwiS2lzXCIsXCJUZXZcIixcIlNoZVwiLFwiQWRhXCIsXCJBZDJcIl0sZGF5TmFtZXM6W1wiWW9tIFJpc2hvblwiLFwiWW9tIFNoZW5pXCIsXCJZb20gU2hsaXNoaVwiLFwiWW9tIFJldmknaVwiLFwiWW9tIENoYW1pc2hpXCIsXCJZb20gU2hpc2hpXCIsXCJZb20gU2hhYmJhdFwiXSxkYXlOYW1lc1Nob3J0OltcIlJpc1wiLFwiU2hlXCIsXCJTaGxcIixcIlJldlwiLFwiQ2hhXCIsXCJTaGlcIixcIlNoYVwiXSxkYXlOYW1lc01pbjpbXCJSaVwiLFwiU2hlXCIsXCJTaGxcIixcIlJlXCIsXCJDaFwiLFwiU2hpXCIsXCJTaGFcIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDpcImRkL21tL3l5eXlcIixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybiB0aGlzLl9sZWFwWWVhcihlLnllYXIoKSl9LF9sZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gbyg3Kih0PXQ8MD90KzE6dCkrMSwxOSk8N30sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksdGhpcy5fbGVhcFllYXIodC55ZWFyP3QueWVhcigpOnQpPzEzOjEyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSxcImRcIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0PXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCksdGhpcy50b0pEKC0xPT09dD8xOnQrMSw3LDEpLXRoaXMudG9KRCh0LDcsMSl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueWVhciYmKGU9dC5tb250aCgpLHQ9dC55ZWFyKCkpLHRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCksMTI9PT1lJiZ0aGlzLmxlYXBZZWFyKHQpPzMwOjg9PT1lJiY1PT09byh0aGlzLmRheXNJblllYXIodCksMTApPzMwOjk9PT1lJiYzPT09byh0aGlzLmRheXNJblllYXIodCksMTApPzI5OnRoaXMuZGF5c1Blck1vbnRoW2UtMV19LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiA2IT09dGhpcy5kYXlPZldlZWsodCxlLHIpfSxleHRyYUluZm86ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybnt5ZWFyVHlwZToodGhpcy5sZWFwWWVhcihpKT9cImVtYm9saXNtaWNcIjpcImNvbW1vblwiKStcIiBcIitbXCJkZWZpY2llbnRcIixcInJlZ3VsYXJcIixcImNvbXBsZXRlXCJdW3RoaXMuZGF5c0luWWVhcihpKSUxMC0zXX19LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3Q9aS55ZWFyKCksZT1pLm1vbnRoKCkscj1pLmRheSgpO3ZhciBhPXQ8PTA/dCsxOnQsbz10aGlzLmpkRXBvY2grdGhpcy5fZGVsYXkxKGEpK3RoaXMuX2RlbGF5MihhKStyKzE7aWYoZTw3KXtmb3IodmFyIHM9NztzPD10aGlzLm1vbnRoc0luWWVhcih0KTtzKyspbys9dGhpcy5kYXlzSW5Nb250aCh0LHMpO2ZvcihzPTE7czxlO3MrKylvKz10aGlzLmRheXNJbk1vbnRoKHQscyl9ZWxzZSBmb3Iocz03O3M8ZTtzKyspbys9dGhpcy5kYXlzSW5Nb250aCh0LHMpO3JldHVybiBvfSxfZGVsYXkxOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IoKDIzNSp0LTIzNCkvMTkpLHI9MTIwODQrMTM3NTMqZSxuPTI5KmUrTWF0aC5mbG9vcihyLzI1OTIwKTtyZXR1cm4gbygzKihuKzEpLDcpPDMmJm4rKyxufSxfZGVsYXkyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2RlbGF5MSh0LTEpLHI9dGhpcy5fZGVsYXkxKHQpO3JldHVybiB0aGlzLl9kZWxheTEodCsxKS1yPT0zNTY/MjpyLWU9PTM4Mj8xOjB9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCkrLjU7Zm9yKHZhciBlPU1hdGguZmxvb3IoOTg0OTYqKHQtdGhpcy5qZEVwb2NoKS8zNTk3NTM1MSktMTt0Pj10aGlzLnRvSkQoLTE9PT1lPzE6ZSsxLDcsMSk7KWUrKztmb3IodmFyIHI9dDx0aGlzLnRvSkQoZSwxLDEpPzc6MTt0PnRoaXMudG9KRChlLHIsdGhpcy5kYXlzSW5Nb250aChlLHIpKTspcisrO3ZhciBuPXQtdGhpcy50b0pEKGUsciwxKSsxO3JldHVybiB0aGlzLm5ld0RhdGUoZSxyLG4pfX0pLG4uY2FsZW5kYXJzLmhlYnJldz1hfSx7XCIuLi9tYWluXCI6NTU2LFwib2JqZWN0LWFzc2lnblwiOjQ0N31dLDU0NzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuLi9tYWluXCIpLGk9dChcIm9iamVjdC1hc3NpZ25cIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fFwiXCJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZTpcIklzbGFtaWNcIixqZEVwb2NoOjE5NDg0MzkuNSxkYXlzUGVyTW9udGg6WzMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6e1wiXCI6e25hbWU6XCJJc2xhbWljXCIsZXBvY2hzOltcIkJIXCIsXCJBSFwiXSxtb250aE5hbWVzOltcIk11aGFycmFtXCIsXCJTYWZhclwiLFwiUmFiaScgYWwtYXd3YWxcIixcIlJhYmknIGFsLXRoYW5pXCIsXCJKdW1hZGEgYWwtYXd3YWxcIixcIkp1bWFkYSBhbC10aGFuaVwiLFwiUmFqYWJcIixcIlNoYSdhYmFuXCIsXCJSYW1hZGFuXCIsXCJTaGF3d2FsXCIsXCJEaHUgYWwtUWknZGFoXCIsXCJEaHUgYWwtSGlqamFoXCJdLG1vbnRoTmFtZXNTaG9ydDpbXCJNdWhcIixcIlNhZlwiLFwiUmFiMVwiLFwiUmFiMlwiLFwiSnVtMVwiLFwiSnVtMlwiLFwiUmFqXCIsXCJTaGEnXCIsXCJSYW1cIixcIlNoYXdcIixcIkRodVFcIixcIkRodUhcIl0sZGF5TmFtZXM6W1wiWWF3bSBhbC1haGFkXCIsXCJZYXdtIGFsLWl0aG5heW5cIixcIllhd20gYXRoLXRodWxhYXRoYWEnXCIsXCJZYXdtIGFsLWFyYmknYWEnXCIsXCJZYXdtIGFsLWtoYW1cXHUwMTJic1wiLFwiWWF3bSBhbC1qdW0nYVwiLFwiWWF3bSBhcy1zYWJ0XCJdLGRheU5hbWVzU2hvcnQ6W1wiQWhhXCIsXCJJdGhcIixcIlRodVwiLFwiQXJiXCIsXCJLaGFcIixcIkp1bVwiLFwiU2FiXCJdLGRheU5hbWVzTWluOltcIkFoXCIsXCJJdFwiLFwiVGhcIixcIkFyXCIsXCJLaFwiLFwiSnVcIixcIlNhXCJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6XCJ5eXl5L21tL2RkXCIsZmlyc3REYXk6Nixpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybigxMSp0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcikueWVhcigpKzE0KSUzMDwxMX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksXCJkXCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZWFwWWVhcih0KT8zNTU6MzU0fSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMTI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiA1IT09dGhpcy5kYXlPZldlZWsodCxlLHIpfSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4gdD1pLnllYXIoKSxlPWkubW9udGgoKSx0PXQ8PTA/dCsxOnQsKHI9aS5kYXkoKSkrTWF0aC5jZWlsKDI5LjUqKGUtMSkpKzM1NCoodC0xKStNYXRoLmZsb29yKCgzKzExKnQpLzMwKSt0aGlzLmpkRXBvY2gtMX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3Q9TWF0aC5mbG9vcih0KSsuNTt2YXIgZT1NYXRoLmZsb29yKCgzMCoodC10aGlzLmpkRXBvY2gpKzEwNjQ2KS8xMDYzMSk7ZT1lPD0wP2UtMTplO3ZhciByPU1hdGgubWluKDEyLE1hdGguY2VpbCgodC0yOS10aGlzLnRvSkQoZSwxLDEpKS8yOS41KSsxKSxuPXQtdGhpcy50b0pEKGUsciwxKSsxO3JldHVybiB0aGlzLm5ld0RhdGUoZSxyLG4pfX0pLG4uY2FsZW5kYXJzLmlzbGFtaWM9YX0se1wiLi4vbWFpblwiOjU1NixcIm9iamVjdC1hc3NpZ25cIjo0NDd9XSw1NDg6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi4vbWFpblwiKSxpPXQoXCJvYmplY3QtYXNzaWduXCIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHxcIlwiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbXCJcIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6XCJKdWxpYW5cIixqZEVwb2NoOjE3MjE0MjMuNSxkYXlzUGVyTW9udGg6WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6e1wiXCI6e25hbWU6XCJKdWxpYW5cIixlcG9jaHM6W1wiQkNcIixcIkFEXCJdLG1vbnRoTmFtZXM6W1wiSmFudWFyeVwiLFwiRmVicnVhcnlcIixcIk1hcmNoXCIsXCJBcHJpbFwiLFwiTWF5XCIsXCJKdW5lXCIsXCJKdWx5XCIsXCJBdWd1c3RcIixcIlNlcHRlbWJlclwiLFwiT2N0b2JlclwiLFwiTm92ZW1iZXJcIixcIkRlY2VtYmVyXCJdLG1vbnRoTmFtZXNTaG9ydDpbXCJKYW5cIixcIkZlYlwiLFwiTWFyXCIsXCJBcHJcIixcIk1heVwiLFwiSnVuXCIsXCJKdWxcIixcIkF1Z1wiLFwiU2VwXCIsXCJPY3RcIixcIk5vdlwiLFwiRGVjXCJdLGRheU5hbWVzOltcIlN1bmRheVwiLFwiTW9uZGF5XCIsXCJUdWVzZGF5XCIsXCJXZWRuZXNkYXlcIixcIlRodXJzZGF5XCIsXCJGcmlkYXlcIixcIlNhdHVyZGF5XCJdLGRheU5hbWVzU2hvcnQ6W1wiU3VuXCIsXCJNb25cIixcIlR1ZVwiLFwiV2VkXCIsXCJUaHVcIixcIkZyaVwiLFwiU2F0XCJdLGRheU5hbWVzTWluOltcIlN1XCIsXCJNb1wiLFwiVHVcIixcIldlXCIsXCJUaFwiLFwiRnJcIixcIlNhXCJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6XCJtbS9kZC95eXl5XCIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4odD1lLnllYXIoKTwwP2UueWVhcigpKzE6ZS55ZWFyKCkpJTQ9PTB9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKDQtKG4uZGF5T2ZXZWVrKCl8fDcpLFwiZFwiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4gdD1pLnllYXIoKSxlPWkubW9udGgoKSxyPWkuZGF5KCksdDwwJiZ0KyssZTw9MiYmKHQtLSxlKz0xMiksTWF0aC5mbG9vcigzNjUuMjUqKHQrNDcxNikpK01hdGguZmxvb3IoMzAuNjAwMSooZSsxKSkrci0xNTI0LjV9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKHQrLjUpKzE1MjQscj1NYXRoLmZsb29yKChlLTEyMi4xKS8zNjUuMjUpLG49TWF0aC5mbG9vcigzNjUuMjUqciksaT1NYXRoLmZsb29yKChlLW4pLzMwLjYwMDEpLGE9aS1NYXRoLmZsb29yKGk8MTQ/MToxMyksbz1yLU1hdGguZmxvb3IoYT4yPzQ3MTY6NDcxNSkscz1lLW4tTWF0aC5mbG9vcigzMC42MDAxKmkpO3JldHVybiBvPD0wJiZvLS0sdGhpcy5uZXdEYXRlKG8sYSxzKX19KSxuLmNhbGVuZGFycy5qdWxpYW49YX0se1wiLi4vbWFpblwiOjU1NixcIm9iamVjdC1hc3NpZ25cIjo0NDd9XSw1NDk6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi4vbWFpblwiKSxpPXQoXCJvYmplY3QtYXNzaWduXCIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHxcIlwiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbXCJcIl19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0LWUqTWF0aC5mbG9vcih0L2UpfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gbyh0LTEsZSkrMX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZTpcIk1heWFuXCIsamRFcG9jaDo1ODQyODIuNSxoYXNZZWFyWmVybzohMCxtaW5Nb250aDowLGZpcnN0TW9udGg6MCxtaW5EYXk6MCxyZWdpb25hbE9wdGlvbnM6e1wiXCI6e25hbWU6XCJNYXlhblwiLGVwb2NoczpbXCJcIixcIlwiXSxtb250aE5hbWVzOltcIjBcIixcIjFcIixcIjJcIixcIjNcIixcIjRcIixcIjVcIixcIjZcIixcIjdcIixcIjhcIixcIjlcIixcIjEwXCIsXCIxMVwiLFwiMTJcIixcIjEzXCIsXCIxNFwiLFwiMTVcIixcIjE2XCIsXCIxN1wiXSxtb250aE5hbWVzU2hvcnQ6W1wiMFwiLFwiMVwiLFwiMlwiLFwiM1wiLFwiNFwiLFwiNVwiLFwiNlwiLFwiN1wiLFwiOFwiLFwiOVwiLFwiMTBcIixcIjExXCIsXCIxMlwiLFwiMTNcIixcIjE0XCIsXCIxNVwiLFwiMTZcIixcIjE3XCJdLGRheU5hbWVzOltcIjBcIixcIjFcIixcIjJcIixcIjNcIixcIjRcIixcIjVcIixcIjZcIixcIjdcIixcIjhcIixcIjlcIixcIjEwXCIsXCIxMVwiLFwiMTJcIixcIjEzXCIsXCIxNFwiLFwiMTVcIixcIjE2XCIsXCIxN1wiLFwiMThcIixcIjE5XCJdLGRheU5hbWVzU2hvcnQ6W1wiMFwiLFwiMVwiLFwiMlwiLFwiM1wiLFwiNFwiLFwiNVwiLFwiNlwiLFwiN1wiLFwiOFwiLFwiOVwiLFwiMTBcIixcIjExXCIsXCIxMlwiLFwiMTNcIixcIjE0XCIsXCIxNVwiLFwiMTZcIixcIjE3XCIsXCIxOFwiLFwiMTlcIl0sZGF5TmFtZXNNaW46W1wiMFwiLFwiMVwiLFwiMlwiLFwiM1wiLFwiNFwiLFwiNVwiLFwiNlwiLFwiN1wiLFwiOFwiLFwiOVwiLFwiMTBcIixcIjExXCIsXCIxMlwiLFwiMTNcIixcIjE0XCIsXCIxNVwiLFwiMTZcIixcIjE3XCIsXCIxOFwiLFwiMTlcIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDpcIllZWVkubS5kXCIsZmlyc3REYXk6MCxpc1JUTDohMSxoYWFiTW9udGhzOltcIlBvcFwiLFwiVW9cIixcIlppcFwiLFwiWm90elwiLFwiVHplY1wiLFwiWHVsXCIsXCJZYXhraW5cIixcIk1vbFwiLFwiQ2hlblwiLFwiWWF4XCIsXCJaYWNcIixcIkNlaFwiLFwiTWFjXCIsXCJLYW5raW5cIixcIk11YW5cIixcIlBheFwiLFwiS2F5YWJcIixcIkN1bWt1XCIsXCJVYXllYlwiXSx0em9sa2luTW9udGhzOltcIkltaXhcIixcIklrXCIsXCJBa2JhbFwiLFwiS2FuXCIsXCJDaGljY2hhblwiLFwiQ2ltaVwiLFwiTWFuaWtcIixcIkxhbWF0XCIsXCJNdWx1Y1wiLFwiT2NcIixcIkNodWVuXCIsXCJFYlwiLFwiQmVuXCIsXCJJeFwiLFwiTWVuXCIsXCJDaWJcIixcIkNhYmFuXCIsXCJFdHpuYWJcIixcIkNhdWFjXCIsXCJBaGF1XCJdfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKSwhMX0sZm9ybWF0WWVhcjpmdW5jdGlvbih0KXt0PXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCk7dmFyIGU9TWF0aC5mbG9vcih0LzQwMCk7cmV0dXJuIHQlPTQwMCx0Kz10PDA/NDAwOjAsZStcIi5cIitNYXRoLmZsb29yKHQvMjApK1wiLlwiK3QlMjB9LGZvclllYXI6ZnVuY3Rpb24odCl7aWYoKHQ9dC5zcGxpdChcIi5cIikpLmxlbmd0aDwzKXRocm93XCJJbnZhbGlkIE1heWFuIHllYXJcIjtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXBhcnNlSW50KHRbcl0sMTApO2lmKE1hdGguYWJzKG4pPjE5fHxyPjAmJm48MCl0aHJvd1wiSW52YWxpZCBNYXlhbiB5ZWFyXCI7ZT0yMCplK259cmV0dXJuIGV9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLDE4fSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSksMH0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLDM2MH0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKSwyMH0sZGF5c0luV2VlazpmdW5jdGlvbigpe3JldHVybiA1fSxkYXlPZldlZWs6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKS5kYXkoKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpLCEwfSxleHRyYUluZm86ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpLnRvSkQoKSxhPXRoaXMuX3RvSGFhYihpKSxvPXRoaXMuX3RvVHpvbGtpbihpKTtyZXR1cm57aGFhYk1vbnRoTmFtZTp0aGlzLmxvY2FsLmhhYWJNb250aHNbYVswXS0xXSxoYWFiTW9udGg6YVswXSxoYWFiRGF5OmFbMV0sdHpvbGtpbkRheU5hbWU6dGhpcy5sb2NhbC50em9sa2luTW9udGhzW29bMF0tMV0sdHpvbGtpbkRheTpvWzBdLHR6b2xraW5UcmVjZW5hOm9bMV19fSxfdG9IYWFiOmZ1bmN0aW9uKHQpe3ZhciBlPW8oKHQtPXRoaXMuamRFcG9jaCkrOCszNDAsMzY1KTtyZXR1cm5bTWF0aC5mbG9vcihlLzIwKSsxLG8oZSwyMCldfSxfdG9Uem9sa2luOmZ1bmN0aW9uKHQpe3JldHVybltzKCh0LT10aGlzLmpkRXBvY2gpKzIwLDIwKSxzKHQrNCwxMyldfSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4gaS5kYXkoKSsyMCppLm1vbnRoKCkrMzYwKmkueWVhcigpK3RoaXMuamRFcG9jaH0sZnJvbUpEOmZ1bmN0aW9uKHQpe3Q9TWF0aC5mbG9vcih0KSsuNS10aGlzLmpkRXBvY2g7dmFyIGU9TWF0aC5mbG9vcih0LzM2MCk7dCU9MzYwLHQrPXQ8MD8zNjA6MDt2YXIgcj1NYXRoLmZsb29yKHQvMjApLG49dCUyMDtyZXR1cm4gdGhpcy5uZXdEYXRlKGUscixuKX19KSxuLmNhbGVuZGFycy5tYXlhbj1hfSx7XCIuLi9tYWluXCI6NTU2LFwib2JqZWN0LWFzc2lnblwiOjQ0N31dLDU1MDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuLi9tYWluXCIpLGk9dChcIm9iamVjdC1hc3NpZ25cIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fFwiXCJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXI7dmFyIG89bi5pbnN0YW5jZShcImdyZWdvcmlhblwiKTtpKGEucHJvdG90eXBlLHtuYW1lOlwiTmFuYWtzaGFoaVwiLGpkRXBvY2g6MjI1NzY3My41LGRheXNQZXJNb250aDpbMzEsMzEsMzEsMzEsMzEsMzAsMzAsMzAsMzAsMzAsMzAsMzBdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7XCJcIjp7bmFtZTpcIk5hbmFrc2hhaGlcIixlcG9jaHM6W1wiQk5cIixcIkFOXCJdLG1vbnRoTmFtZXM6W1wiQ2hldFwiLFwiVmFpc2FraFwiLFwiSmV0aFwiLFwiSGFyaFwiLFwiU2F3YW5cIixcIkJoYWRvblwiLFwiQXNzdVwiLFwiS2F0YWtcIixcIk1hZ2hhclwiLFwiUG9oXCIsXCJNYWdoXCIsXCJQaGFndW5cIl0sbW9udGhOYW1lc1Nob3J0OltcIkNoZVwiLFwiVmFpXCIsXCJKZXRcIixcIkhhclwiLFwiU2F3XCIsXCJCaGFcIixcIkFzc1wiLFwiS2F0XCIsXCJNZ3JcIixcIlBvaFwiLFwiTWdoXCIsXCJQaGFcIl0sZGF5TmFtZXM6W1wiU29tdmFhclwiLFwiTWFuZ2FsdmFyXCIsXCJCdWRodmFhclwiLFwiVmVlcnZhYXJcIixcIlNodWthcnZhYXJcIixcIlNhbmljaGFydmFhclwiLFwiRXR2YWFyXCJdLGRheU5hbWVzU2hvcnQ6W1wiU29tXCIsXCJNYW5nYWxcIixcIkJ1ZGhcIixcIlZlZXJcIixcIlNodWthclwiLFwiU2FuaWNoYXJcIixcIkV0XCJdLGRheU5hbWVzTWluOltcIlNvXCIsXCJNYVwiLFwiQnVcIixcIlZlXCIsXCJTaFwiLFwiU2FcIixcIkV0XCJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6XCJkZC1tbS15eXl5XCIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyfHxuLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkWWVhcik7cmV0dXJuIG8ubGVhcFllYXIoZS55ZWFyKCkrKGUueWVhcigpPDE/MTowKSsxNDY5KX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoMS0obi5kYXlPZldlZWsoKXx8NyksXCJkXCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDEyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWRNb250aCk7KHQ9aS55ZWFyKCkpPDAmJnQrKztmb3IodmFyIGE9aS5kYXkoKSxzPTE7czxpLm1vbnRoKCk7cysrKWErPXRoaXMuZGF5c1Blck1vbnRoW3MtMV07cmV0dXJuIGErby50b0pEKHQrMTQ2OCwzLDEzKX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3Q9TWF0aC5mbG9vcih0Ky41KTtmb3IodmFyIGU9TWF0aC5mbG9vcigodC0odGhpcy5qZEVwb2NoLTEpKS8zNjYpO3Q+PXRoaXMudG9KRChlKzEsMSwxKTspZSsrO2Zvcih2YXIgcj10LU1hdGguZmxvb3IodGhpcy50b0pEKGUsMSwxKSsuNSkrMSxuPTE7cj50aGlzLmRheXNJbk1vbnRoKGUsbik7KXItPXRoaXMuZGF5c0luTW9udGgoZSxuKSxuKys7cmV0dXJuIHRoaXMubmV3RGF0ZShlLG4scil9fSksbi5jYWxlbmRhcnMubmFuYWtzaGFoaT1hfSx7XCIuLi9tYWluXCI6NTU2LFwib2JqZWN0LWFzc2lnblwiOjQ0N31dLDU1MTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuLi9tYWluXCIpLGk9dChcIm9iamVjdC1hc3NpZ25cIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fFwiXCJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZTpcIk5lcGFsaVwiLGpkRXBvY2g6MTcwMDcwOS41LGRheXNQZXJNb250aDpbMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLGRheXNQZXJZZWFyOjM2NSxyZWdpb25hbE9wdGlvbnM6e1wiXCI6e25hbWU6XCJOZXBhbGlcIixlcG9jaHM6W1wiQkJTXCIsXCJBQlNcIl0sbW9udGhOYW1lczpbXCJCYWlzYWtoXCIsXCJKZXN0aGFcIixcIkFzaGFkaFwiLFwiU2hyYXdhblwiLFwiQmhhZHJhXCIsXCJBc2h3aW5cIixcIkthcnRpa1wiLFwiTWFuZ3NpclwiLFwiUGF1c2hcIixcIk1hbmdoXCIsXCJGYWxndW5cIixcIkNoYWl0cmFcIl0sbW9udGhOYW1lc1Nob3J0OltcIkJhaVwiLFwiSmVcIixcIkFzXCIsXCJTaHJhXCIsXCJCaGFcIixcIkFzaFwiLFwiS2FyXCIsXCJNYW5nXCIsXCJQYXVcIixcIk1hXCIsXCJGYWxcIixcIkNoYWlcIl0sZGF5TmFtZXM6W1wiQWFpdGFiYWFyXCIsXCJTb21iYWFyXCIsXCJNYW5nbGJhYXJcIixcIkJ1ZGhhYmFhclwiLFwiQmloaWJhYXJcIixcIlNodWtyYWJhYXJcIixcIlNoYW5pYmFhclwiXSxkYXlOYW1lc1Nob3J0OltcIkFhaXRhXCIsXCJTb21cIixcIk1hbmdsXCIsXCJCdWRoYVwiLFwiQmloaVwiLFwiU2h1a3JhXCIsXCJTaGFuaVwiXSxkYXlOYW1lc01pbjpbXCJBYWlcIixcIlNvXCIsXCJNYW5cIixcIkJ1XCIsXCJCaVwiLFwiU2h1XCIsXCJTaGFcIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDpcImRkL21tL3l5eXlcIixmaXJzdERheToxLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGF5c0luWWVhcih0KSE9PXRoaXMuZGF5c1BlclllYXJ9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLFwiZFwiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7aWYodD10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcikueWVhcigpLFwidW5kZWZpbmVkXCI9PXR5cGVvZiB0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3RdKXJldHVybiB0aGlzLmRheXNQZXJZZWFyO2Zvcih2YXIgZT0wLHI9dGhpcy5taW5Nb250aDtyPD0xMjtyKyspZSs9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVt0XVtyXTtyZXR1cm4gZX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC55ZWFyJiYoZT10Lm1vbnRoKCksdD10LnllYXIoKSksdGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKSxcInVuZGVmaW5lZFwiPT10eXBlb2YgdGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVt0XT90aGlzLmRheXNQZXJNb250aFtlLTFdOnRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbdF1bZV19LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiA2IT09dGhpcy5kYXlPZldlZWsodCxlLHIpfSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTt0PWkueWVhcigpLGU9aS5tb250aCgpLHI9aS5kYXkoKTt2YXIgYT1uLmluc3RhbmNlKCksbz0wLHM9ZSxsPXQ7dGhpcy5fY3JlYXRlTWlzc2luZ0NhbGVuZGFyRGF0YSh0KTt2YXIgYz10LShzPjl8fDk9PT1zJiZyPj10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdWzBdPzU2OjU3KTtmb3IoOSE9PWUmJihvPXIscy0tKTs5IT09czspczw9MCYmKHM9MTIsbC0tKSxvKz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdW3NdLHMtLTtyZXR1cm4gOT09PWU/KG8rPXItdGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtsXVswXSk8MCYmKG8rPWEuZGF5c0luWWVhcihjKSk6bys9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtsXVs5XS10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdWzBdLGEubmV3RGF0ZShjLDEsMSkuYWRkKG8sXCJkXCIpLnRvSkQoKX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPW4uaW5zdGFuY2UoKS5mcm9tSkQodCkscj1lLnllYXIoKSxpPWUuZGF5T2ZZZWFyKCksYT1yKzU2O3RoaXMuX2NyZWF0ZU1pc3NpbmdDYWxlbmRhckRhdGEoYSk7Zm9yKHZhciBvPTkscz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2FdWzBdLGw9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVthXVtvXS1zKzE7aT5sOykrK28+MTImJihvPTEsYSsrKSxsKz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2FdW29dO3ZhciBjPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbYV1bb10tKGwtaSk7cmV0dXJuIHRoaXMubmV3RGF0ZShhLG8sYyl9LF9jcmVhdGVNaXNzaW5nQ2FsZW5kYXJEYXRhOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGF5c1Blck1vbnRoLnNsaWNlKDApO2UudW5zaGlmdCgxNyk7Zm9yKHZhciByPXQtMTtyPHQrMjtyKyspXCJ1bmRlZmluZWRcIj09dHlwZW9mIHRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbcl0mJih0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3JdPWUpfSxORVBBTElfQ0FMRU5EQVJfREFUQTp7MTk3MDpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5NzE6WzE4LDMxLDMxLDMyLDMxLDMyLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTcyOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMTk3MzpbMTksMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDE5NzQ6WzE5LDMxLDMxLDMyLDMwLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTc1OlsxOCwzMSwzMSwzMiwzMiwzMCwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3NjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDE5Nzc6WzE4LDMxLDMyLDMxLDMyLDMxLDMxLDI5LDMwLDI5LDMwLDI5LDMxXSwxOTc4OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3OTpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5ODA6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwxOTgxOlsxOCwzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwzMCwzMF0sMTk4MjpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5ODM6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTg0OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMTk4NTpbMTgsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDE5ODY6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTg3OlsxOCwzMSwzMiwzMSwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMTk4ODpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDE5ODk6WzE4LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTkwOlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5MTpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5OTI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwxOTkzOlsxOCwzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5NDpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTU6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwxOTk2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMTk5NzpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTg6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTk5OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAwMDpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMDE6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDAyOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwMzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMDQ6WzE3LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDA1OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwNjpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMDc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDA4OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwyOSwzMV0sMjAwOTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMTA6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDExOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAxMjpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwMTM6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDE0OlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxNTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMTY6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDE3OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxODpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMTk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDIwOlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAyMTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDIzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjAyNDpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjU6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDI2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAyNzpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMjg6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDI5OlsxOCwzMSwzMSwzMiwzMSwzMiwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAzMDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMzAsMzAsMzAsMzFdLDIwMzE6WzE3LDMxLDMyLDMxLDMyLDMxLDMxLDMxLDMxLDMxLDMxLDMxLDMxXSwyMDMyOlsxNywzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMl0sMjAzMzpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMzQ6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDM1OlsxNywzMCwzMiwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwyOSwzMV0sMjAzNjpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMzc6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDM4OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAzOTpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwNDA6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDQxOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNDM6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDQ0OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0NTpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNDY6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDQ3OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0ODpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNDk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDUwOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA1MTpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNTI6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDUzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjA1NDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwNTU6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDMwLDI5LDMwXSwyMDU2OlsxNywzMSwzMSwzMiwzMSwzMiwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA1NzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNTg6WzE3LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDU5OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2MDpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNjE6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDYyOlsxNywzMCwzMiwzMSwzMiwzMSwzMSwyOSwzMCwyOSwzMCwyOSwzMV0sMjA2MzpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNjQ6WzE3LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY1OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA2NjpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMjksMzFdLDIwNjc6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY4OlsxNywzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2OTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNzA6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDcxOlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNzM6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDc0OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3NTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNzY6WzE2LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDc3OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA3ODpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNzk6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDgwOlsxNiwzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjA4MTpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDgzOlsxNywzMSwzMSwzMiwzMSwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NDpbMTcsMzEsMzEsMzIsMzEsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODU6WzE3LDMxLDMyLDMxLDMyLDMxLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NzpbMTYsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMzAsMjksMzAsMzAsMzBdLDIwODg6WzE2LDMwLDMxLDMyLDMyLDMwLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg5OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTE6WzE2LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDkyOlsxNiwzMSwzMSwzMiwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTQ6WzE3LDMxLDMxLDMyLDMxLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDk1OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwzMCwzMCwzMF0sMjA5NjpbMTcsMzAsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwOTc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDk4OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwyOSwzMCwyOSwzMCwzMCwzMV0sMjA5OTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMjksMzAsMzAsMzBdLDIxMDA6WzE3LDMxLDMyLDMxLDMyLDMwLDMxLDMwLDI5LDMwLDI5LDMwLDMwXX19KSxuLmNhbGVuZGFycy5uZXBhbGk9YX0se1wiLi4vbWFpblwiOjU1NixcIm9iamVjdC1hc3NpZ25cIjo0NDd9XSw1NTI6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi4vbWFpblwiKSxpPXQoXCJvYmplY3QtYXNzaWduXCIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHxcIlwiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbXCJcIl19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0LWUqTWF0aC5mbG9vcih0L2UpfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOlwiUGVyc2lhblwiLGpkRXBvY2g6MTk0ODMyMC41LGRheXNQZXJNb250aDpbMzEsMzEsMzEsMzEsMzEsMzEsMzAsMzAsMzAsMzAsMzAsMjldLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7XCJcIjp7bmFtZTpcIlBlcnNpYW5cIixlcG9jaHM6W1wiQlBcIixcIkFQXCJdLG1vbnRoTmFtZXM6W1wiRmFydmFyZGluXCIsXCJPcmRpYmVoZXNodFwiLFwiS2hvcmRhZFwiLFwiVGlyXCIsXCJNb3JkYWRcIixcIlNoYWhyaXZhclwiLFwiTWVoclwiLFwiQWJhblwiLFwiQXphclwiLFwiRGF5XCIsXCJCYWhtYW5cIixcIkVzZmFuZFwiXSxtb250aE5hbWVzU2hvcnQ6W1wiRmFyXCIsXCJPcmRcIixcIktob1wiLFwiVGlyXCIsXCJNb3JcIixcIlNoYVwiLFwiTWVoXCIsXCJBYmFcIixcIkF6YVwiLFwiRGF5XCIsXCJCYWhcIixcIkVzZlwiXSxkYXlOYW1lczpbXCJZZWtzaGFtYmVcIixcIkRvc2hhbWJlXCIsXCJTZXNoYW1iZVwiLFwiQ2hcXHhlNmhhcnNoYW1iZVwiLFwiUGFuanNoYW1iZVwiLFwiSm9tJ2VcIixcIlNoYW1iZVwiXSxkYXlOYW1lc1Nob3J0OltcIllla1wiLFwiRG9cIixcIlNlXCIsXCJDaFxceGU2XCIsXCJQYW5qXCIsXCJKb21cIixcIlNoYVwiXSxkYXlOYW1lc01pbjpbXCJZZVwiLFwiRG9cIixcIlNlXCIsXCJDaFwiLFwiUGFcIixcIkpvXCIsXCJTaFwiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OlwieXl5eS9tbS9kZFwiLGZpcnN0RGF5OjYsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7cmV0dXJuIDY4MiooKGUueWVhcigpLShlLnllYXIoKT4wPzQ3NDo0NzMpKSUyODIwKzQ3NCszOCklMjgxNjw2ODJ9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC0obi5kYXlPZldlZWsoKSsxKSU3LFwiZFwiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIDUhPT10aGlzLmRheU9mV2Vlayh0LGUscil9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3Q9aS55ZWFyKCksZT1pLm1vbnRoKCkscj1pLmRheSgpO3ZhciBhPXQtKHQ+PTA/NDc0OjQ3Mykscz00NzQrbyhhLDI4MjApO3JldHVybiByKyhlPD03PzMxKihlLTEpOjMwKihlLTEpKzYpK01hdGguZmxvb3IoKDY4MipzLTExMCkvMjgxNikrMzY1KihzLTEpKzEwMjk5ODMqTWF0aC5mbG9vcihhLzI4MjApK3RoaXMuamRFcG9jaC0xfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9KHQ9TWF0aC5mbG9vcih0KSsuNSktdGhpcy50b0pEKDQ3NSwxLDEpLHI9TWF0aC5mbG9vcihlLzEwMjk5ODMpLG49byhlLDEwMjk5ODMpLGk9MjgyMDtpZigxMDI5OTgyIT09bil7dmFyIGE9TWF0aC5mbG9vcihuLzM2Nikscz1vKG4sMzY2KTtpPU1hdGguZmxvb3IoKDIxMzQqYSsyODE2KnMrMjgxNSkvMTAyODUyMikrYSsxfXZhciBsPWkrMjgyMCpyKzQ3NDtsPWw8PTA/bC0xOmw7dmFyIGM9dC10aGlzLnRvSkQobCwxLDEpKzEsdT1jPD0xODY/TWF0aC5jZWlsKGMvMzEpOk1hdGguY2VpbCgoYy02KS8zMCksaD10LXRoaXMudG9KRChsLHUsMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKGwsdSxoKX19KSxuLmNhbGVuZGFycy5wZXJzaWFuPWEsbi5jYWxlbmRhcnMuamFsYWxpPWF9LHtcIi4uL21haW5cIjo1NTYsXCJvYmplY3QtYXNzaWduXCI6NDQ3fV0sNTUzOltmdW5jdGlvbih0LGUscil7dmFyIG49dChcIi4uL21haW5cIiksaT10KFwib2JqZWN0LWFzc2lnblwiKSxhPW4uaW5zdGFuY2UoKTtmdW5jdGlvbiBvKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8XCJcIl18fHRoaXMucmVnaW9uYWxPcHRpb25zW1wiXCJdfW8ucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKG8ucHJvdG90eXBlLHtuYW1lOlwiVGFpd2FuXCIsamRFcG9jaDoyNDE5NDAyLjUseWVhcnNPZmZzZXQ6MTkxMSxkYXlzUGVyTW9udGg6WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6e1wiXCI6e25hbWU6XCJUYWl3YW5cIixlcG9jaHM6W1wiQlJPQ1wiLFwiUk9DXCJdLG1vbnRoTmFtZXM6W1wiSmFudWFyeVwiLFwiRmVicnVhcnlcIixcIk1hcmNoXCIsXCJBcHJpbFwiLFwiTWF5XCIsXCJKdW5lXCIsXCJKdWx5XCIsXCJBdWd1c3RcIixcIlNlcHRlbWJlclwiLFwiT2N0b2JlclwiLFwiTm92ZW1iZXJcIixcIkRlY2VtYmVyXCJdLG1vbnRoTmFtZXNTaG9ydDpbXCJKYW5cIixcIkZlYlwiLFwiTWFyXCIsXCJBcHJcIixcIk1heVwiLFwiSnVuXCIsXCJKdWxcIixcIkF1Z1wiLFwiU2VwXCIsXCJPY3RcIixcIk5vdlwiLFwiRGVjXCJdLGRheU5hbWVzOltcIlN1bmRheVwiLFwiTW9uZGF5XCIsXCJUdWVzZGF5XCIsXCJXZWRuZXNkYXlcIixcIlRodXJzZGF5XCIsXCJGcmlkYXlcIixcIlNhdHVyZGF5XCJdLGRheU5hbWVzU2hvcnQ6W1wiU3VuXCIsXCJNb25cIixcIlR1ZVwiLFwiV2VkXCIsXCJUaHVcIixcIkZyaVwiLFwiU2F0XCJdLGRheU5hbWVzTWluOltcIlN1XCIsXCJNb1wiLFwiVHVcIixcIldlXCIsXCJUaFwiLFwiRnJcIixcIlNhXCJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6XCJ5eXl5L21tL2RkXCIsZmlyc3REYXk6MSxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTt0PXRoaXMuX3QyZ1llYXIoZS55ZWFyKCkpO3JldHVybiBhLmxlYXBZZWFyKHQpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7dD10aGlzLl90MmdZZWFyKGkueWVhcigpKTtyZXR1cm4gYS53ZWVrT2ZZZWFyKHQsaS5tb250aCgpLGkuZGF5KCkpfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7dD10aGlzLl90MmdZZWFyKGkueWVhcigpKTtyZXR1cm4gYS50b0pEKHQsaS5tb250aCgpLGkuZGF5KCkpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9YS5mcm9tSkQodCkscj10aGlzLl9nMnRZZWFyKGUueWVhcigpKTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIsZS5tb250aCgpLGUuZGF5KCkpfSxfdDJnWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdCt0aGlzLnllYXJzT2Zmc2V0Kyh0Pj0tdGhpcy55ZWFyc09mZnNldCYmdDw9LTE/MTowKX0sX2cydFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQtdGhpcy55ZWFyc09mZnNldC0odD49MSYmdDw9dGhpcy55ZWFyc09mZnNldD8xOjApfX0pLG4uY2FsZW5kYXJzLnRhaXdhbj1vfSx7XCIuLi9tYWluXCI6NTU2LFwib2JqZWN0LWFzc2lnblwiOjQ0N31dLDU1NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCIuLi9tYWluXCIpLGk9dChcIm9iamVjdC1hc3NpZ25cIiksYT1uLmluc3RhbmNlKCk7ZnVuY3Rpb24gbyh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fFwiXCJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXX1vLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShvLnByb3RvdHlwZSx7bmFtZTpcIlRoYWlcIixqZEVwb2NoOjE1MjMwOTguNSx5ZWFyc09mZnNldDo1NDMsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOntcIlwiOntuYW1lOlwiVGhhaVwiLGVwb2NoczpbXCJCQkVcIixcIkJFXCJdLG1vbnRoTmFtZXM6W1wiSmFudWFyeVwiLFwiRmVicnVhcnlcIixcIk1hcmNoXCIsXCJBcHJpbFwiLFwiTWF5XCIsXCJKdW5lXCIsXCJKdWx5XCIsXCJBdWd1c3RcIixcIlNlcHRlbWJlclwiLFwiT2N0b2JlclwiLFwiTm92ZW1iZXJcIixcIkRlY2VtYmVyXCJdLG1vbnRoTmFtZXNTaG9ydDpbXCJKYW5cIixcIkZlYlwiLFwiTWFyXCIsXCJBcHJcIixcIk1heVwiLFwiSnVuXCIsXCJKdWxcIixcIkF1Z1wiLFwiU2VwXCIsXCJPY3RcIixcIk5vdlwiLFwiRGVjXCJdLGRheU5hbWVzOltcIlN1bmRheVwiLFwiTW9uZGF5XCIsXCJUdWVzZGF5XCIsXCJXZWRuZXNkYXlcIixcIlRodXJzZGF5XCIsXCJGcmlkYXlcIixcIlNhdHVyZGF5XCJdLGRheU5hbWVzU2hvcnQ6W1wiU3VuXCIsXCJNb25cIixcIlR1ZVwiLFwiV2VkXCIsXCJUaHVcIixcIkZyaVwiLFwiU2F0XCJdLGRheU5hbWVzTWluOltcIlN1XCIsXCJNb1wiLFwiVHVcIixcIldlXCIsXCJUaFwiLFwiRnJcIixcIlNhXCJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6XCJkZC9tbS95eXl5XCIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTt0PXRoaXMuX3QyZ1llYXIoZS55ZWFyKCkpO3JldHVybiBhLmxlYXBZZWFyKHQpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7dD10aGlzLl90MmdZZWFyKGkueWVhcigpKTtyZXR1cm4gYS53ZWVrT2ZZZWFyKHQsaS5tb250aCgpLGkuZGF5KCkpfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7dD10aGlzLl90MmdZZWFyKGkueWVhcigpKTtyZXR1cm4gYS50b0pEKHQsaS5tb250aCgpLGkuZGF5KCkpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9YS5mcm9tSkQodCkscj10aGlzLl9nMnRZZWFyKGUueWVhcigpKTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIsZS5tb250aCgpLGUuZGF5KCkpfSxfdDJnWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdC10aGlzLnllYXJzT2Zmc2V0LSh0Pj0xJiZ0PD10aGlzLnllYXJzT2Zmc2V0PzE6MCl9LF9nMnRZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0K3RoaXMueWVhcnNPZmZzZXQrKHQ+PS10aGlzLnllYXJzT2Zmc2V0JiZ0PD0tMT8xOjApfX0pLG4uY2FsZW5kYXJzLnRoYWk9b30se1wiLi4vbWFpblwiOjU1NixcIm9iamVjdC1hc3NpZ25cIjo0NDd9XSw1NTU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KFwiLi4vbWFpblwiKSxpPXQoXCJvYmplY3QtYXNzaWduXCIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHxcIlwiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbXCJcIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6XCJVbW1BbFF1cmFcIixoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6e1wiXCI6e25hbWU6XCJVbW0gYWwtUXVyYVwiLGVwb2NoczpbXCJCSFwiLFwiQUhcIl0sbW9udGhOYW1lczpbXCJBbC1NdWhhcnJhbVwiLFwiU2FmYXJcIixcIlJhYmknIGFsLWF3d2FsXCIsXCJSYWJpJyBBbC1UaGFuaVwiLFwiSnVtYWRhIEFsLUF3d2FsXCIsXCJKdW1hZGEgQWwtVGhhbmlcIixcIlJhamFiXCIsXCJTaGEnYWJhblwiLFwiUmFtYWRhblwiLFwiU2hhd3dhbFwiLFwiRGh1IGFsLVFpJ2RhaFwiLFwiRGh1IGFsLUhpamphaFwiXSxtb250aE5hbWVzU2hvcnQ6W1wiTXVoXCIsXCJTYWZcIixcIlJhYjFcIixcIlJhYjJcIixcIkp1bTFcIixcIkp1bTJcIixcIlJhalwiLFwiU2hhJ1wiLFwiUmFtXCIsXCJTaGF3XCIsXCJEaHVRXCIsXCJEaHVIXCJdLGRheU5hbWVzOltcIllhd20gYWwtQWhhZFwiLFwiWWF3bSBhbC1JdGhuYWluXCIsXCJZYXdtIGFsLVRoYWxcXHUwMTAxdGhcXHUwMTAxXFx1MjAxOVwiLFwiWWF3bSBhbC1BcmJhXFx1MjAxOFxcdTAxMDFcXHUyMDE5XCIsXCJZYXdtIGFsLUtoYW1cXHUwMTJic1wiLFwiWWF3bSBhbC1KdW1cXHUyMDE4YVwiLFwiWWF3bSBhbC1TYWJ0XCJdLGRheU5hbWVzTWluOltcIkFoXCIsXCJJdGhcIixcIlRoXCIsXCJBclwiLFwiS2hcIixcIkp1XCIsXCJTYVwiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OlwieXl5eS9tbS9kZFwiLGZpcnN0RGF5OjYsaXNSVEw6ITB9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7cmV0dXJuIDM1NT09PXRoaXMuZGF5c0luWWVhcihlLnllYXIoKSl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLFwiZFwiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0xO3I8PTEyO3IrKyllKz10aGlzLmRheXNJbk1vbnRoKHQscik7cmV0dXJuIGV9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCkudG9KRCgpLTI0ZTUrLjUsaT0wLGE9MDthPG8ubGVuZ3RoO2ErKyl7aWYob1thXT5yKXJldHVybiBvW2ldLW9baS0xXTtpKyt9cmV0dXJuIDMwfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNSE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSksYT0xMiooaS55ZWFyKCktMSkraS5tb250aCgpLTE1MjkyO3JldHVybiBpLmRheSgpK29bYS0xXS0xKzI0ZTUtLjV9LGZyb21KRDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC0yNGU1Ky41LHI9MCxuPTA7bjxvLmxlbmd0aCYmIShvW25dPmUpO24rKylyKys7dmFyIGk9cisxNTI5MixhPU1hdGguZmxvb3IoKGktMSkvMTIpLHM9YSsxLGw9aS0xMiphLGM9ZS1vW3ItMV0rMTtyZXR1cm4gdGhpcy5uZXdEYXRlKHMsbCxjKX0saXNWYWxpZDpmdW5jdGlvbih0LGUscil7dmFyIGk9bi5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLmlzVmFsaWQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpJiYoaT0odD1udWxsIT10LnllYXI/dC55ZWFyOnQpPj0xMjc2JiZ0PD0xNTAwKSxpfSxfdmFsaWRhdGU6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9bi5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLl92YWxpZGF0ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoYS55ZWFyPDEyNzZ8fGEueWVhcj4xNTAwKXRocm93IGkucmVwbGFjZSgvXFx7MFxcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gYX19KSxuLmNhbGVuZGFycy51bW1hbHF1cmE9YTt2YXIgbz1bMjAsNTAsNzksMTA5LDEzOCwxNjgsMTk3LDIyNywyNTYsMjg2LDMxNSwzNDUsMzc0LDQwNCw0MzMsNDYzLDQ5Miw1MjIsNTUxLDU4MSw2MTEsNjQxLDY3MCw3MDAsNzI5LDc1OSw3ODgsODE4LDg0Nyw4NzcsOTA2LDkzNiw5NjUsOTk1LDEwMjQsMTA1NCwxMDgzLDExMTMsMTE0MiwxMTcyLDEyMDEsMTIzMSwxMjYwLDEyOTAsMTMyMCwxMzUwLDEzNzksMTQwOSwxNDM4LDE0NjgsMTQ5NywxNTI3LDE1NTYsMTU4NiwxNjE1LDE2NDUsMTY3NCwxNzA0LDE3MzMsMTc2MywxNzkyLDE4MjIsMTg1MSwxODgxLDE5MTAsMTk0MCwxOTY5LDE5OTksMjAyOCwyMDU4LDIwODcsMjExNywyMTQ2LDIxNzYsMjIwNSwyMjM1LDIyNjQsMjI5NCwyMzIzLDIzNTMsMjM4MywyNDEzLDI0NDIsMjQ3MiwyNTAxLDI1MzEsMjU2MCwyNTkwLDI2MTksMjY0OSwyNjc4LDI3MDgsMjczNywyNzY3LDI3OTYsMjgyNiwyODU1LDI4ODUsMjkxNCwyOTQ0LDI5NzMsMzAwMywzMDMyLDMwNjIsMzA5MSwzMTIxLDMxNTAsMzE4MCwzMjA5LDMyMzksMzI2OCwzMjk4LDMzMjcsMzM1NywzMzg2LDM0MTYsMzQ0NiwzNDc2LDM1MDUsMzUzNSwzNTY0LDM1OTQsMzYyMywzNjUzLDM2ODIsMzcxMiwzNzQxLDM3NzEsMzgwMCwzODMwLDM4NTksMzg4OSwzOTE4LDM5NDgsMzk3Nyw0MDA3LDQwMzYsNDA2Niw0MDk1LDQxMjUsNDE1NSw0MTg1LDQyMTQsNDI0NCw0MjczLDQzMDMsNDMzMiw0MzYyLDQzOTEsNDQyMSw0NDUwLDQ0ODAsNDUwOSw0NTM5LDQ1NjgsNDU5OCw0NjI3LDQ2NTcsNDY4Niw0NzE2LDQ3NDUsNDc3NSw0ODA0LDQ4MzQsNDg2Myw0ODkzLDQ5MjIsNDk1Miw0OTgxLDUwMTEsNTA0MCw1MDcwLDUwOTksNTEyOSw1MTU4LDUxODgsNTIxOCw1MjQ4LDUyNzcsNTMwNyw1MzM2LDUzNjYsNTM5NSw1NDI1LDU0NTQsNTQ4NCw1NTEzLDU1NDMsNTU3Miw1NjAyLDU2MzEsNTY2MSw1NjkwLDU3MjAsNTc0OSw1Nzc5LDU4MDgsNTgzOCw1ODY3LDU4OTcsNTkyNiw1OTU2LDU5ODUsNjAxNSw2MDQ0LDYwNzQsNjEwMyw2MTMzLDYxNjIsNjE5Miw2MjIxLDYyNTEsNjI4MSw2MzExLDYzNDAsNjM3MCw2Mzk5LDY0MjksNjQ1OCw2NDg4LDY1MTcsNjU0Nyw2NTc2LDY2MDYsNjYzNSw2NjY1LDY2OTQsNjcyNCw2NzUzLDY3ODMsNjgxMiw2ODQyLDY4NzEsNjkwMSw2OTMwLDY5NjAsNjk4OSw3MDE5LDcwNDgsNzA3OCw3MTA3LDcxMzcsNzE2Niw3MTk2LDcyMjUsNzI1NSw3Mjg0LDczMTQsNzM0NCw3Mzc0LDc0MDMsNzQzMyw3NDYyLDc0OTIsNzUyMSw3NTUxLDc1ODAsNzYxMCw3NjM5LDc2NjksNzY5OCw3NzI4LDc3NTcsNzc4Nyw3ODE2LDc4NDYsNzg3NSw3OTA1LDc5MzQsNzk2NCw3OTkzLDgwMjMsODA1Myw4MDgzLDgxMTIsODE0Miw4MTcxLDgyMDEsODIzMCw4MjYwLDgyODksODMxOSw4MzQ4LDgzNzgsODQwNyw4NDM3LDg0NjYsODQ5Niw4NTI1LDg1NTUsODU4NCw4NjE0LDg2NDMsODY3Myw4NzAyLDg3MzIsODc2MSw4NzkxLDg4MjEsODg1MCw4ODgwLDg5MDksODkzOCw4OTY4LDg5OTcsOTAyNyw5MDU2LDkwODYsOTExNSw5MTQ1LDkxNzUsOTIwNSw5MjM0LDkyNjQsOTI5Myw5MzIyLDkzNTIsOTM4MSw5NDEwLDk0NDAsOTQ3MCw5NDk5LDk1MjksOTU1OSw5NTg5LDk2MTgsOTY0OCw5Njc3LDk3MDYsOTczNiw5NzY1LDk3OTQsOTgyNCw5ODUzLDk4ODMsOTkxMyw5OTQzLDk5NzIsMTAwMDIsMTAwMzIsMTAwNjEsMTAwOTAsMTAxMjAsMTAxNDksMTAxNzgsMTAyMDgsMTAyMzcsMTAyNjcsMTAyOTcsMTAzMjYsMTAzNTYsMTAzODYsMTA0MTUsMTA0NDUsMTA0NzQsMTA1MDQsMTA1MzMsMTA1NjIsMTA1OTIsMTA2MjEsMTA2NTEsMTA2ODAsMTA3MTAsMTA3NDAsMTA3NzAsMTA3OTksMTA4MjksMTA4NTgsMTA4ODgsMTA5MTcsMTA5NDcsMTA5NzYsMTEwMDUsMTEwMzUsMTEwNjQsMTEwOTQsMTExMjQsMTExNTMsMTExODMsMTEyMTMsMTEyNDIsMTEyNzIsMTEzMDEsMTEzMzEsMTEzNjAsMTEzODksMTE0MTksMTE0NDgsMTE0NzgsMTE1MDcsMTE1MzcsMTE1NjcsMTE1OTYsMTE2MjYsMTE2NTUsMTE2ODUsMTE3MTUsMTE3NDQsMTE3NzQsMTE4MDMsMTE4MzIsMTE4NjIsMTE4OTEsMTE5MjEsMTE5NTAsMTE5ODAsMTIwMTAsMTIwMzksMTIwNjksMTIwOTksMTIxMjgsMTIxNTgsMTIxODcsMTIyMTYsMTIyNDYsMTIyNzUsMTIzMDQsMTIzMzQsMTIzNjQsMTIzOTMsMTI0MjMsMTI0NTMsMTI0ODMsMTI1MTIsMTI1NDIsMTI1NzEsMTI2MDAsMTI2MzAsMTI2NTksMTI2ODgsMTI3MTgsMTI3NDcsMTI3NzcsMTI4MDcsMTI4MzcsMTI4NjYsMTI4OTYsMTI5MjYsMTI5NTUsMTI5ODQsMTMwMTQsMTMwNDMsMTMwNzIsMTMxMDIsMTMxMzEsMTMxNjEsMTMxOTEsMTMyMjAsMTMyNTAsMTMyODAsMTMzMTAsMTMzMzksMTMzNjgsMTMzOTgsMTM0MjcsMTM0NTYsMTM0ODYsMTM1MTUsMTM1NDUsMTM1NzQsMTM2MDQsMTM2MzQsMTM2NjQsMTM2OTMsMTM3MjMsMTM3NTIsMTM3ODIsMTM4MTEsMTM4NDAsMTM4NzAsMTM4OTksMTM5MjksMTM5NTgsMTM5ODgsMTQwMTgsMTQwNDcsMTQwNzcsMTQxMDcsMTQxMzYsMTQxNjYsMTQxOTUsMTQyMjQsMTQyNTQsMTQyODMsMTQzMTMsMTQzNDIsMTQzNzIsMTQ0MDEsMTQ0MzEsMTQ0NjEsMTQ0OTAsMTQ1MjAsMTQ1NTAsMTQ1NzksMTQ2MDksMTQ2MzgsMTQ2NjcsMTQ2OTcsMTQ3MjYsMTQ3NTYsMTQ3ODUsMTQ4MTUsMTQ4NDQsMTQ4NzQsMTQ5MDQsMTQ5MzMsMTQ5NjMsMTQ5OTMsMTUwMjEsMTUwNTEsMTUwODEsMTUxMTAsMTUxNDAsMTUxNjksMTUxOTksMTUyMjgsMTUyNTgsMTUyODcsMTUzMTcsMTUzNDcsMTUzNzcsMTU0MDYsMTU0MzYsMTU0NjUsMTU0OTQsMTU1MjQsMTU1NTMsMTU1ODIsMTU2MTIsMTU2NDEsMTU2NzEsMTU3MDEsMTU3MzEsMTU3NjAsMTU3OTAsMTU4MjAsMTU4NDksMTU4NzgsMTU5MDgsMTU5MzcsMTU5NjYsMTU5OTYsMTYwMjUsMTYwNTUsMTYwODUsMTYxMTQsMTYxNDQsMTYxNzQsMTYyMDQsMTYyMzMsMTYyNjIsMTYyOTIsMTYzMjEsMTYzNTAsMTYzODAsMTY0MDksMTY0MzksMTY0NjgsMTY0OTgsMTY1MjgsMTY1NTgsMTY1ODcsMTY2MTcsMTY2NDYsMTY2NzYsMTY3MDUsMTY3MzQsMTY3NjQsMTY3OTMsMTY4MjMsMTY4NTIsMTY4ODIsMTY5MTIsMTY5NDEsMTY5NzEsMTcwMDEsMTcwMzAsMTcwNjAsMTcwODksMTcxMTgsMTcxNDgsMTcxNzcsMTcyMDcsMTcyMzYsMTcyNjYsMTcyOTUsMTczMjUsMTczNTUsMTczODQsMTc0MTQsMTc0NDQsMTc0NzMsMTc1MDIsMTc1MzIsMTc1NjEsMTc1OTEsMTc2MjAsMTc2NTAsMTc2NzksMTc3MDksMTc3MzgsMTc3NjgsMTc3OTgsMTc4MjcsMTc4NTcsMTc4ODYsMTc5MTYsMTc5NDUsMTc5NzUsMTgwMDQsMTgwMzQsMTgwNjMsMTgwOTMsMTgxMjIsMTgxNTIsMTgxODEsMTgyMTEsMTgyNDEsMTgyNzAsMTgzMDAsMTgzMzAsMTgzNTksMTgzODgsMTg0MTgsMTg0NDcsMTg0NzYsMTg1MDYsMTg1MzUsMTg1NjUsMTg1OTUsMTg2MjUsMTg2NTQsMTg2ODQsMTg3MTQsMTg3NDMsMTg3NzIsMTg4MDIsMTg4MzEsMTg4NjAsMTg4OTAsMTg5MTksMTg5NDksMTg5NzksMTkwMDgsMTkwMzgsMTkwNjgsMTkwOTgsMTkxMjcsMTkxNTYsMTkxODYsMTkyMTUsMTkyNDQsMTkyNzQsMTkzMDMsMTkzMzMsMTkzNjIsMTkzOTIsMTk0MjIsMTk0NTIsMTk0ODEsMTk1MTEsMTk1NDAsMTk1NzAsMTk1OTksMTk2MjgsMTk2NTgsMTk2ODcsMTk3MTcsMTk3NDYsMTk3NzYsMTk4MDYsMTk4MzYsMTk4NjUsMTk4OTUsMTk5MjQsMTk5NTQsMTk5ODMsMjAwMTIsMjAwNDIsMjAwNzEsMjAxMDEsMjAxMzAsMjAxNjAsMjAxOTAsMjAyMTksMjAyNDksMjAyNzksMjAzMDgsMjAzMzgsMjAzNjcsMjAzOTYsMjA0MjYsMjA0NTUsMjA0ODUsMjA1MTQsMjA1NDQsMjA1NzMsMjA2MDMsMjA2MzMsMjA2NjIsMjA2OTIsMjA3MjEsMjA3NTEsMjA3ODAsMjA4MTAsMjA4MzksMjA4NjksMjA4OTgsMjA5MjgsMjA5NTcsMjA5ODcsMjEwMTYsMjEwNDYsMjEwNzYsMjExMDUsMjExMzUsMjExNjQsMjExOTQsMjEyMjMsMjEyNTMsMjEyODIsMjEzMTIsMjEzNDEsMjEzNzEsMjE0MDAsMjE0MzAsMjE0NTksMjE0ODksMjE1MTksMjE1NDgsMjE1NzgsMjE2MDcsMjE2MzcsMjE2NjYsMjE2OTYsMjE3MjUsMjE3NTQsMjE3ODQsMjE4MTMsMjE4NDMsMjE4NzMsMjE5MDIsMjE5MzIsMjE5NjIsMjE5OTEsMjIwMjEsMjIwNTAsMjIwODAsMjIxMDksMjIxMzgsMjIxNjgsMjIxOTcsMjIyMjcsMjIyNTYsMjIyODYsMjIzMTYsMjIzNDYsMjIzNzUsMjI0MDUsMjI0MzQsMjI0NjQsMjI0OTMsMjI1MjIsMjI1NTIsMjI1ODEsMjI2MTEsMjI2NDAsMjI2NzAsMjI3MDAsMjI3MzAsMjI3NTksMjI3ODksMjI4MTgsMjI4NDgsMjI4NzcsMjI5MDYsMjI5MzYsMjI5NjUsMjI5OTQsMjMwMjQsMjMwNTQsMjMwODMsMjMxMTMsMjMxNDMsMjMxNzMsMjMyMDIsMjMyMzIsMjMyNjEsMjMyOTAsMjMzMjAsMjMzNDksMjMzNzksMjM0MDgsMjM0MzgsMjM0NjcsMjM0OTcsMjM1MjcsMjM1NTYsMjM1ODYsMjM2MTYsMjM2NDUsMjM2NzQsMjM3MDQsMjM3MzMsMjM3NjMsMjM3OTIsMjM4MjIsMjM4NTEsMjM4ODEsMjM5MTAsMjM5NDAsMjM5NzAsMjM5OTksMjQwMjksMjQwNTgsMjQwODgsMjQxMTcsMjQxNDcsMjQxNzYsMjQyMDYsMjQyMzUsMjQyNjUsMjQyOTQsMjQzMjQsMjQzNTMsMjQzODMsMjQ0MTMsMjQ0NDIsMjQ0NzIsMjQ1MDEsMjQ1MzEsMjQ1NjAsMjQ1OTAsMjQ2MTksMjQ2NDgsMjQ2NzgsMjQ3MDcsMjQ3MzcsMjQ3NjcsMjQ3OTYsMjQ4MjYsMjQ4NTYsMjQ4ODUsMjQ5MTUsMjQ5NDQsMjQ5NzQsMjUwMDMsMjUwMzIsMjUwNjIsMjUwOTEsMjUxMjEsMjUxNTAsMjUxODAsMjUyMTAsMjUyNDAsMjUyNjksMjUyOTksMjUzMjgsMjUzNTgsMjUzODcsMjU0MTYsMjU0NDYsMjU0NzUsMjU1MDUsMjU1MzQsMjU1NjQsMjU1OTQsMjU2MjQsMjU2NTMsMjU2ODMsMjU3MTIsMjU3NDIsMjU3NzEsMjU4MDAsMjU4MzAsMjU4NTksMjU4ODgsMjU5MTgsMjU5NDgsMjU5NzcsMjYwMDcsMjYwMzcsMjYwNjcsMjYwOTYsMjYxMjYsMjYxNTUsMjYxODQsMjYyMTQsMjYyNDMsMjYyNzIsMjYzMDIsMjYzMzIsMjYzNjEsMjYzOTEsMjY0MjEsMjY0NTEsMjY0ODAsMjY1MTAsMjY1MzksMjY1NjgsMjY1OTgsMjY2MjcsMjY2NTYsMjY2ODYsMjY3MTUsMjY3NDUsMjY3NzUsMjY4MDUsMjY4MzQsMjY4NjQsMjY4OTMsMjY5MjMsMjY5NTIsMjY5ODIsMjcwMTEsMjcwNDEsMjcwNzAsMjcwOTksMjcxMjksMjcxNTksMjcxODgsMjcyMTgsMjcyNDgsMjcyNzcsMjczMDcsMjczMzYsMjczNjYsMjczOTUsMjc0MjUsMjc0NTQsMjc0ODQsMjc1MTMsMjc1NDIsMjc1NzIsMjc2MDIsMjc2MzEsMjc2NjEsMjc2OTEsMjc3MjAsMjc3NTAsMjc3NzksMjc4MDksMjc4MzgsMjc4NjgsMjc4OTcsMjc5MjYsMjc5NTYsMjc5ODUsMjgwMTUsMjgwNDUsMjgwNzQsMjgxMDQsMjgxMzQsMjgxNjMsMjgxOTMsMjgyMjIsMjgyNTIsMjgyODEsMjgzMTAsMjgzNDAsMjgzNjksMjgzOTksMjg0MjgsMjg0NTgsMjg0ODgsMjg1MTcsMjg1NDcsMjg1NzcsMjg2MDcsMjg2MzYsMjg2NjUsMjg2OTUsMjg3MjQsMjg3NTQsMjg3ODMsMjg4MTMsMjg4NDMsMjg4NzIsMjg5MDEsMjg5MzEsMjg5NjAsMjg5OTAsMjkwMTksMjkwNDksMjkwNzgsMjkxMDgsMjkxMzcsMjkxNjcsMjkxOTYsMjkyMjYsMjkyNTUsMjkyODUsMjkzMTUsMjkzNDUsMjkzNzUsMjk0MDQsMjk0MzQsMjk0NjMsMjk0OTIsMjk1MjIsMjk1NTEsMjk1ODAsMjk2MTAsMjk2NDAsMjk2NjksMjk2OTksMjk3MjksMjk3NTksMjk3ODgsMjk4MTgsMjk4NDcsMjk4NzYsMjk5MDYsMjk5MzUsMjk5NjQsMjk5OTQsMzAwMjMsMzAwNTMsMzAwODIsMzAxMTIsMzAxNDEsMzAxNzEsMzAyMDAsMzAyMzAsMzAyNTksMzAyODksMzAzMTgsMzAzNDgsMzAzNzgsMzA0MDgsMzA0MzcsMzA0NjcsMzA0OTYsMzA1MjYsMzA1NTUsMzA1ODUsMzA2MTQsMzA2NDQsMzA2NzMsMzA3MDMsMzA3MzIsMzA3NjIsMzA3OTEsMzA4MjEsMzA4NTAsMzA4ODAsMzA5MDksMzA5MzksMzA5NjgsMzA5OTgsMzEwMjcsMzEwNTcsMzEwODYsMzExMTYsMzExNDUsMzExNzUsMzEyMDQsMzEyMzQsMzEyNjMsMzEyOTMsMzEzMjIsMzEzNTIsMzEzODEsMzE0MTEsMzE0NDEsMzE0NzEsMzE1MDAsMzE1MzAsMzE1NTksMzE1ODksMzE2MTgsMzE2NDgsMzE2NzYsMzE3MDYsMzE3MzYsMzE3NjYsMzE3OTUsMzE4MjUsMzE4NTQsMzE4ODQsMzE5MTMsMzE5NDMsMzE5NzIsMzIwMDIsMzIwMzEsMzIwNjEsMzIwOTAsMzIxMjAsMzIxNTAsMzIxODAsMzIyMDksMzIyMzksMzIyNjgsMzIyOTgsMzIzMjcsMzIzNTcsMzIzODYsMzI0MTYsMzI0NDUsMzI0NzUsMzI1MDQsMzI1MzQsMzI1NjMsMzI1OTMsMzI2MjIsMzI2NTIsMzI2ODEsMzI3MTEsMzI3NDAsMzI3NzAsMzI3OTksMzI4MjksMzI4NTgsMzI4ODgsMzI5MTcsMzI5NDcsMzI5NzYsMzMwMDYsMzMwMzUsMzMwNjUsMzMwOTQsMzMxMjQsMzMxNTMsMzMxODMsMzMyMTMsMzMyNDMsMzMyNzIsMzMzMDIsMzMzMzEsMzMzNjEsMzMzOTAsMzM0MjAsMzM0NTAsMzM0NzksMzM1MDksMzM1MzksMzM1NjgsMzM1OTgsMzM2MjcsMzM2NTcsMzM2ODYsMzM3MTYsMzM3NDUsMzM3NzUsMzM4MDQsMzM4MzQsMzM4NjMsMzM4OTMsMzM5MjIsMzM5NTIsMzM5ODEsMzQwMTEsMzQwNDAsMzQwNjksMzQwOTksMzQxMjgsMzQxNTgsMzQxODcsMzQyMTcsMzQyNDcsMzQyNzcsMzQzMDYsMzQzMzYsMzQzNjUsMzQzOTUsMzQ0MjQsMzQ0NTQsMzQ0ODMsMzQ1MTIsMzQ1NDIsMzQ1NzEsMzQ2MDEsMzQ2MzEsMzQ2NjAsMzQ2OTAsMzQ3MTksMzQ3NDksMzQ3NzgsMzQ4MDgsMzQ4MzcsMzQ4NjcsMzQ4OTYsMzQ5MjYsMzQ5NTUsMzQ5ODUsMzUwMTUsMzUwNDQsMzUwNzQsMzUxMDMsMzUxMzMsMzUxNjIsMzUxOTIsMzUyMjIsMzUyNTEsMzUyODAsMzUzMTAsMzUzNDAsMzUzNzAsMzUzOTksMzU0MjksMzU0NTgsMzU0ODgsMzU1MTcsMzU1NDcsMzU1NzYsMzU2MDUsMzU2MzUsMzU2NjUsMzU2OTQsMzU3MjMsMzU3NTMsMzU3ODIsMzU4MTEsMzU4NDEsMzU4NzEsMzU5MDEsMzU5MzAsMzU5NjAsMzU5ODksMzYwMTksMzYwNDgsMzYwNzgsMzYxMDcsMzYxMzYsMzYxNjYsMzYxOTUsMzYyMjUsMzYyNTQsMzYyODQsMzYzMTQsMzYzNDMsMzYzNzMsMzY0MDMsMzY0MzMsMzY0NjIsMzY0OTIsMzY1MjEsMzY1NTEsMzY1ODAsMzY2MTAsMzY2MzksMzY2NjksMzY2OTgsMzY3MjgsMzY3NTcsMzY3ODYsMzY4MTYsMzY4NDUsMzY4NzUsMzY5MDQsMzY5MzQsMzY5NjMsMzY5OTMsMzcwMjIsMzcwNTIsMzcwODEsMzcxMTEsMzcxNDEsMzcxNzAsMzcyMDAsMzcyMjksMzcyNTksMzcyODgsMzczMTgsMzczNDcsMzczNzcsMzc0MDYsMzc0MzYsMzc0NjUsMzc0OTUsMzc1MjQsMzc1NTQsMzc1ODQsMzc2MTMsMzc2NDMsMzc2NzIsMzc3MDEsMzc3MzEsMzc3NjAsMzc3OTAsMzc4MTksMzc4NDksMzc4NzgsMzc5MDgsMzc5MzgsMzc5NjcsMzc5OTcsMzgwMjcsMzgwNTYsMzgwODUsMzgxMTUsMzgxNDQsMzgxNzQsMzgyMDMsMzgyMzMsMzgyNjIsMzgyOTIsMzgzMjIsMzgzNTEsMzgzODEsMzg0MTAsMzg0NDAsMzg0NjksMzg0OTksMzg1MjgsMzg1NTgsMzg1ODcsMzg2MTcsMzg2NDYsMzg2NzYsMzg3MDUsMzg3MzUsMzg3NjQsMzg3OTQsMzg4MjMsMzg4NTMsMzg4ODIsMzg5MTIsMzg5NDEsMzg5NzEsMzkwMDEsMzkwMzAsMzkwNTksMzkwODksMzkxMTgsMzkxNDgsMzkxNzgsMzkyMDgsMzkyMzcsMzkyNjcsMzkyOTcsMzkzMjYsMzkzNTUsMzkzODUsMzk0MTQsMzk0NDQsMzk0NzMsMzk1MDMsMzk1MzIsMzk1NjIsMzk1OTIsMzk2MjEsMzk2NTAsMzk2ODAsMzk3MDksMzk3MzksMzk3NjgsMzk3OTgsMzk4MjcsMzk4NTcsMzk4ODYsMzk5MTYsMzk5NDYsMzk5NzUsNDAwMDUsNDAwMzUsNDAwNjQsNDAwOTQsNDAxMjMsNDAxNTMsNDAxODIsNDAyMTIsNDAyNDEsNDAyNzEsNDAzMDAsNDAzMzAsNDAzNTksNDAzODksNDA0MTgsNDA0NDgsNDA0NzcsNDA1MDcsNDA1MzYsNDA1NjYsNDA1OTUsNDA2MjUsNDA2NTUsNDA2ODUsNDA3MTQsNDA3NDQsNDA3NzMsNDA4MDMsNDA4MzIsNDA4NjIsNDA4OTIsNDA5MjEsNDA5NTEsNDA5ODAsNDEwMDksNDEwMzksNDEwNjgsNDEwOTgsNDExMjcsNDExNTcsNDExODYsNDEyMTYsNDEyNDUsNDEyNzUsNDEzMDQsNDEzMzQsNDEzNjQsNDEzOTMsNDE0MjIsNDE0NTIsNDE0ODEsNDE1MTEsNDE1NDAsNDE1NzAsNDE1OTksNDE2MjksNDE2NTgsNDE2ODgsNDE3MTgsNDE3NDgsNDE3NzcsNDE4MDcsNDE4MzYsNDE4NjUsNDE4OTQsNDE5MjQsNDE5NTMsNDE5ODMsNDIwMTIsNDIwNDIsNDIwNzIsNDIxMDIsNDIxMzEsNDIxNjEsNDIxOTAsNDIyMjAsNDIyNDksNDIyNzksNDIzMDgsNDIzMzcsNDIzNjcsNDIzOTcsNDI0MjYsNDI0NTYsNDI0ODUsNDI1MTUsNDI1NDUsNDI1NzQsNDI2MDQsNDI2MzMsNDI2NjIsNDI2OTIsNDI3MjEsNDI3NTEsNDI3ODAsNDI4MTAsNDI4MzksNDI4NjksNDI4OTksNDI5MjksNDI5NTgsNDI5ODgsNDMwMTcsNDMwNDYsNDMwNzYsNDMxMDUsNDMxMzUsNDMxNjQsNDMxOTQsNDMyMjMsNDMyNTMsNDMyODMsNDMzMTIsNDMzNDIsNDMzNzEsNDM0MDEsNDM0MzAsNDM0NjAsNDM0ODksNDM1MTksNDM1NDgsNDM1NzgsNDM2MDcsNDM2MzcsNDM2NjYsNDM2OTYsNDM3MjYsNDM3NTUsNDM3ODUsNDM4MTQsNDM4NDQsNDM4NzMsNDM5MDMsNDM5MzIsNDM5NjIsNDM5OTEsNDQwMjEsNDQwNTAsNDQwODAsNDQxMDksNDQxMzksNDQxNjksNDQxOTgsNDQyMjgsNDQyNTgsNDQyODcsNDQzMTcsNDQzNDYsNDQzNzUsNDQ0MDUsNDQ0MzQsNDQ0NjQsNDQ0OTMsNDQ1MjMsNDQ1NTMsNDQ1ODIsNDQ2MTIsNDQ2NDEsNDQ2NzEsNDQ3MDAsNDQ3MzAsNDQ3NTksNDQ3ODgsNDQ4MTgsNDQ4NDcsNDQ4NzcsNDQ5MDYsNDQ5MzYsNDQ5NjYsNDQ5OTYsNDUwMjUsNDUwNTUsNDUwODQsNDUxMTQsNDUxNDMsNDUxNzIsNDUyMDIsNDUyMzEsNDUyNjEsNDUyOTAsNDUzMjAsNDUzNTAsNDUzODAsNDU0MDksNDU0MzksNDU0NjgsNDU0OTgsNDU1MjcsNDU1NTYsNDU1ODYsNDU2MTUsNDU2NDQsNDU2NzQsNDU3MDQsNDU3MzMsNDU3NjMsNDU3OTMsNDU4MjMsNDU4NTIsNDU4ODIsNDU5MTEsNDU5NDAsNDU5NzAsNDU5OTksNDYwMjgsNDYwNTgsNDYwODgsNDYxMTcsNDYxNDcsNDYxNzcsNDYyMDYsNDYyMzYsNDYyNjUsNDYyOTUsNDYzMjQsNDYzNTQsNDYzODMsNDY0MTMsNDY0NDIsNDY0NzIsNDY1MDEsNDY1MzEsNDY1NjAsNDY1OTAsNDY2MjAsNDY2NDksNDY2NzksNDY3MDgsNDY3MzgsNDY3NjcsNDY3OTcsNDY4MjYsNDY4NTYsNDY4ODUsNDY5MTUsNDY5NDQsNDY5NzQsNDcwMDMsNDcwMzMsNDcwNjMsNDcwOTIsNDcxMjIsNDcxNTEsNDcxODEsNDcyMTAsNDcyNDAsNDcyNjksNDcyOTgsNDczMjgsNDczNTcsNDczODcsNDc0MTcsNDc0NDYsNDc0NzYsNDc1MDYsNDc1MzUsNDc1NjUsNDc1OTQsNDc2MjQsNDc2NTMsNDc2ODIsNDc3MTIsNDc3NDEsNDc3NzEsNDc4MDAsNDc4MzAsNDc4NjAsNDc4OTAsNDc5MTksNDc5NDksNDc5NzgsNDgwMDgsNDgwMzcsNDgwNjYsNDgwOTYsNDgxMjUsNDgxNTUsNDgxODQsNDgyMTQsNDgyNDQsNDgyNzMsNDgzMDMsNDgzMzMsNDgzNjIsNDgzOTIsNDg0MjEsNDg0NTAsNDg0ODAsNDg1MDksNDg1MzgsNDg1NjgsNDg1OTgsNDg2MjcsNDg2NTcsNDg2ODcsNDg3MTcsNDg3NDYsNDg3NzYsNDg4MDUsNDg4MzQsNDg4NjQsNDg4OTMsNDg5MjIsNDg5NTIsNDg5ODIsNDkwMTEsNDkwNDEsNDkwNzEsNDkxMDAsNDkxMzAsNDkxNjAsNDkxODksNDkyMTgsNDkyNDgsNDkyNzcsNDkzMDYsNDkzMzYsNDkzNjUsNDkzOTUsNDk0MjUsNDk0NTUsNDk0ODQsNDk1MTQsNDk1NDMsNDk1NzMsNDk2MDIsNDk2MzIsNDk2NjEsNDk2OTAsNDk3MjAsNDk3NDksNDk3NzksNDk4MDksNDk4MzgsNDk4NjgsNDk4OTgsNDk5MjcsNDk5NTcsNDk5ODYsNTAwMTYsNTAwNDUsNTAwNzUsNTAxMDQsNTAxMzMsNTAxNjMsNTAxOTIsNTAyMjIsNTAyNTIsNTAyODEsNTAzMTEsNTAzNDAsNTAzNzAsNTA0MDAsNTA0MjksNTA0NTksNTA0ODgsNTA1MTgsNTA1NDcsNTA1NzYsNTA2MDYsNTA2MzUsNTA2NjUsNTA2OTQsNTA3MjQsNTA3NTQsNTA3ODQsNTA4MTMsNTA4NDMsNTA4NzIsNTA5MDIsNTA5MzEsNTA5NjAsNTA5OTAsNTEwMTksNTEwNDksNTEwNzgsNTExMDgsNTExMzgsNTExNjcsNTExOTcsNTEyMjcsNTEyNTYsNTEyODYsNTEzMTUsNTEzNDUsNTEzNzQsNTE0MDMsNTE0MzMsNTE0NjIsNTE0OTIsNTE1MjIsNTE1NTIsNTE1ODIsNTE2MTEsNTE2NDEsNTE2NzAsNTE2OTksNTE3MjksNTE3NTgsNTE3ODcsNTE4MTYsNTE4NDYsNTE4NzYsNTE5MDYsNTE5MzYsNTE5NjUsNTE5OTUsNTIwMjUsNTIwNTQsNTIwODMsNTIxMTMsNTIxNDIsNTIxNzEsNTIyMDAsNTIyMzAsNTIyNjAsNTIyOTAsNTIzMTksNTIzNDksNTIzNzksNTI0MDgsNTI0MzgsNTI0NjcsNTI0OTcsNTI1MjYsNTI1NTUsNTI1ODUsNTI2MTQsNTI2NDQsNTI2NzMsNTI3MDMsNTI3MzMsNTI3NjIsNTI3OTIsNTI4MjIsNTI4NTEsNTI4ODEsNTI5MTAsNTI5MzksNTI5NjksNTI5OTgsNTMwMjgsNTMwNTcsNTMwODcsNTMxMTYsNTMxNDYsNTMxNzYsNTMyMDUsNTMyMzUsNTMyNjQsNTMyOTQsNTMzMjQsNTMzNTMsNTMzODMsNTM0MTIsNTM0NDEsNTM0NzEsNTM1MDAsNTM1MzAsNTM1NTksNTM1ODksNTM2MTksNTM2NDgsNTM2NzgsNTM3MDgsNTM3MzcsNTM3NjcsNTM3OTYsNTM4MjUsNTM4NTUsNTM4ODQsNTM5MTMsNTM5NDMsNTM5NzMsNTQwMDMsNTQwMzIsNTQwNjIsNTQwOTIsNTQxMjEsNTQxNTEsNTQxODAsNTQyMDksNTQyMzksNTQyNjgsNTQyOTcsNTQzMjcsNTQzNTcsNTQzODcsNTQ0MTYsNTQ0NDYsNTQ0NzYsNTQ1MDUsNTQ1MzUsNTQ1NjQsNTQ1OTMsNTQ2MjMsNTQ2NTIsNTQ2ODEsNTQ3MTEsNTQ3NDEsNTQ3NzAsNTQ4MDAsNTQ4MzAsNTQ4NTksNTQ4ODksNTQ5MTksNTQ5NDgsNTQ5NzcsNTUwMDcsNTUwMzYsNTUwNjYsNTUwOTUsNTUxMjUsNTUxNTQsNTUxODQsNTUyMTMsNTUyNDMsNTUyNzMsNTUzMDIsNTUzMzIsNTUzNjEsNTUzOTEsNTU0MjAsNTU0NTAsNTU0NzksNTU1MDgsNTU1MzgsNTU1NjcsNTU1OTcsNTU2MjcsNTU2NTcsNTU2ODYsNTU3MTYsNTU3NDUsNTU3NzUsNTU4MDQsNTU4MzQsNTU4NjMsNTU4OTIsNTU5MjIsNTU5NTEsNTU5ODEsNTYwMTEsNTYwNDAsNTYwNzAsNTYxMDAsNTYxMjksNTYxNTksNTYxODgsNTYyMTgsNTYyNDcsNTYyNzYsNTYzMDYsNTYzMzUsNTYzNjUsNTYzOTQsNTY0MjQsNTY0NTQsNTY0ODMsNTY1MTMsNTY1NDMsNTY1NzIsNTY2MDEsNTY2MzEsNTY2NjAsNTY2OTAsNTY3MTksNTY3NDksNTY3NzgsNTY4MDgsNTY4MzcsNTY4NjcsNTY4OTcsNTY5MjYsNTY5NTYsNTY5ODUsNTcwMTUsNTcwNDQsNTcwNzQsNTcxMDMsNTcxMzMsNTcxNjIsNTcxOTIsNTcyMjEsNTcyNTEsNTcyODAsNTczMTAsNTczNDAsNTczNjksNTczOTksNTc0MjksNTc0NTgsNTc0ODcsNTc1MTcsNTc1NDYsNTc1NzYsNTc2MDUsNTc2MzQsNTc2NjQsNTc2OTQsNTc3MjMsNTc3NTMsNTc3ODMsNTc4MTMsNTc4NDIsNTc4NzEsNTc5MDEsNTc5MzAsNTc5NTksNTc5ODksNTgwMTgsNTgwNDgsNTgwNzcsNTgxMDcsNTgxMzcsNTgxNjcsNTgxOTYsNTgyMjYsNTgyNTUsNTgyODUsNTgzMTQsNTgzNDMsNTgzNzMsNTg0MDIsNTg0MzIsNTg0NjEsNTg0OTEsNTg1MjEsNTg1NTEsNTg1ODAsNTg2MTAsNTg2MzksNTg2NjksNTg2OTgsNTg3MjcsNTg3NTcsNTg3ODYsNTg4MTYsNTg4NDUsNTg4NzUsNTg5MDUsNTg5MzQsNTg5NjQsNTg5OTQsNTkwMjMsNTkwNTMsNTkwODIsNTkxMTEsNTkxNDEsNTkxNzAsNTkyMDAsNTkyMjksNTkyNTksNTkyODgsNTkzMTgsNTkzNDgsNTkzNzcsNTk0MDcsNTk0MzYsNTk0NjYsNTk0OTUsNTk1MjUsNTk1NTQsNTk1ODQsNTk2MTMsNTk2NDMsNTk2NzIsNTk3MDIsNTk3MzEsNTk3NjEsNTk3OTEsNTk4MjAsNTk4NTAsNTk4NzksNTk5MDksNTk5MzksNTk5NjgsNTk5OTcsNjAwMjcsNjAwNTYsNjAwODYsNjAxMTUsNjAxNDUsNjAxNzQsNjAyMDQsNjAyMzQsNjAyNjQsNjAyOTMsNjAzMjMsNjAzNTIsNjAzODEsNjA0MTEsNjA0NDAsNjA0NjksNjA0OTksNjA1MjgsNjA1NTgsNjA1ODgsNjA2MTgsNjA2NDgsNjA2NzcsNjA3MDcsNjA3MzYsNjA3NjUsNjA3OTUsNjA4MjQsNjA4NTMsNjA4ODMsNjA5MTIsNjA5NDIsNjA5NzIsNjEwMDIsNjEwMzEsNjEwNjEsNjEwOTAsNjExMjAsNjExNDksNjExNzksNjEyMDgsNjEyMzcsNjEyNjcsNjEyOTYsNjEzMjYsNjEzNTYsNjEzODUsNjE0MTUsNjE0NDUsNjE0NzQsNjE1MDQsNjE1MzMsNjE1NjMsNjE1OTIsNjE2MjEsNjE2NTEsNjE2ODAsNjE3MTAsNjE3MzksNjE3NjksNjE3OTksNjE4MjgsNjE4NTgsNjE4ODgsNjE5MTcsNjE5NDcsNjE5NzYsNjIwMDYsNjIwMzUsNjIwNjQsNjIwOTQsNjIxMjMsNjIxNTMsNjIxODIsNjIyMTIsNjIyNDIsNjIyNzEsNjIzMDEsNjIzMzEsNjIzNjAsNjIzOTAsNjI0MTksNjI0NDgsNjI0NzgsNjI1MDcsNjI1MzcsNjI1NjYsNjI1OTYsNjI2MjUsNjI2NTUsNjI2ODUsNjI3MTUsNjI3NDQsNjI3NzQsNjI4MDMsNjI4MzIsNjI4NjIsNjI4OTEsNjI5MjEsNjI5NTAsNjI5ODAsNjMwMDksNjMwMzksNjMwNjksNjMwOTksNjMxMjgsNjMxNTcsNjMxODcsNjMyMTYsNjMyNDYsNjMyNzUsNjMzMDUsNjMzMzQsNjMzNjMsNjMzOTMsNjM0MjMsNjM0NTMsNjM0ODIsNjM1MTIsNjM1NDEsNjM1NzEsNjM2MDAsNjM2MzAsNjM2NTksNjM2ODksNjM3MTgsNjM3NDcsNjM3NzcsNjM4MDcsNjM4MzYsNjM4NjYsNjM4OTUsNjM5MjUsNjM5NTUsNjM5ODQsNjQwMTQsNjQwNDMsNjQwNzMsNjQxMDIsNjQxMzEsNjQxNjEsNjQxOTAsNjQyMjAsNjQyNDksNjQyNzksNjQzMDksNjQzMzksNjQzNjgsNjQzOTgsNjQ0MjcsNjQ0NTcsNjQ0ODYsNjQ1MTUsNjQ1NDUsNjQ1NzQsNjQ2MDMsNjQ2MzMsNjQ2NjMsNjQ2OTIsNjQ3MjIsNjQ3NTIsNjQ3ODIsNjQ4MTEsNjQ4NDEsNjQ4NzAsNjQ4OTksNjQ5MjksNjQ5NTgsNjQ5ODcsNjUwMTcsNjUwNDcsNjUwNzYsNjUxMDYsNjUxMzYsNjUxNjYsNjUxOTUsNjUyMjUsNjUyNTQsNjUyODMsNjUzMTMsNjUzNDIsNjUzNzEsNjU0MDEsNjU0MzEsNjU0NjAsNjU0OTAsNjU1MjAsNjU1NDksNjU1NzksNjU2MDgsNjU2MzgsNjU2NjcsNjU2OTcsNjU3MjYsNjU3NTUsNjU3ODUsNjU4MTUsNjU4NDQsNjU4NzQsNjU5MDMsNjU5MzMsNjU5NjMsNjU5OTIsNjYwMjIsNjYwNTEsNjYwODEsNjYxMTAsNjYxNDAsNjYxNjksNjYxOTksNjYyMjgsNjYyNTgsNjYyODcsNjYzMTcsNjYzNDYsNjYzNzYsNjY0MDUsNjY0MzUsNjY0NjUsNjY0OTQsNjY1MjQsNjY1NTMsNjY1ODMsNjY2MTIsNjY2NDEsNjY2NzEsNjY3MDAsNjY3MzAsNjY3NjAsNjY3ODksNjY4MTksNjY4NDksNjY4NzgsNjY5MDgsNjY5MzcsNjY5NjcsNjY5OTYsNjcwMjUsNjcwNTUsNjcwODQsNjcxMTQsNjcxNDMsNjcxNzMsNjcyMDMsNjcyMzMsNjcyNjIsNjcyOTIsNjczMjEsNjczNTEsNjczODAsNjc0MDksNjc0MzksNjc0NjgsNjc0OTcsNjc1MjcsNjc1NTcsNjc1ODcsNjc2MTcsNjc2NDYsNjc2NzYsNjc3MDUsNjc3MzUsNjc3NjQsNjc3OTMsNjc4MjMsNjc4NTIsNjc4ODIsNjc5MTEsNjc5NDEsNjc5NzEsNjhlMyw2ODAzMCw2ODA2MCw2ODA4OSw2ODExOSw2ODE0OCw2ODE3Nyw2ODIwNyw2ODIzNiw2ODI2Niw2ODI5NSw2ODMyNSw2ODM1NCw2ODM4NCw2ODQxNCw2ODQ0Myw2ODQ3Myw2ODUwMiw2ODUzMiw2ODU2MSw2ODU5MSw2ODYyMCw2ODY1MCw2ODY3OSw2ODcwOCw2ODczOCw2ODc2OCw2ODc5Nyw2ODgyNyw2ODg1Nyw2ODg4Niw2ODkxNiw2ODk0Niw2ODk3NSw2OTAwNCw2OTAzNCw2OTA2Myw2OTA5Miw2OTEyMiw2OTE1Miw2OTE4MSw2OTIxMSw2OTI0MCw2OTI3MCw2OTMwMCw2OTMzMCw2OTM1OSw2OTM4OCw2OTQxOCw2OTQ0Nyw2OTQ3Niw2OTUwNiw2OTUzNSw2OTU2NSw2OTU5NSw2OTYyNCw2OTY1NCw2OTY4NCw2OTcxMyw2OTc0Myw2OTc3Miw2OTgwMiw2OTgzMSw2OTg2MSw2OTg5MCw2OTkxOSw2OTk0OSw2OTk3OCw3MDAwOCw3MDAzOCw3MDA2Nyw3MDA5Nyw3MDEyNiw3MDE1Niw3MDE4Niw3MDIxNSw3MDI0NSw3MDI3NCw3MDMwMyw3MDMzMyw3MDM2Miw3MDM5Miw3MDQyMSw3MDQ1MSw3MDQ4MSw3MDUxMCw3MDU0MCw3MDU3MCw3MDU5OSw3MDYyOSw3MDY1OCw3MDY4Nyw3MDcxNyw3MDc0Niw3MDc3Niw3MDgwNSw3MDgzNSw3MDg2NCw3MDg5NCw3MDkyNCw3MDk1NCw3MDk4Myw3MTAxMyw3MTA0Miw3MTA3MSw3MTEwMSw3MTEzMCw3MTE1OSw3MTE4OSw3MTIxOCw3MTI0OCw3MTI3OCw3MTMwOCw3MTMzNyw3MTM2Nyw3MTM5Nyw3MTQyNiw3MTQ1NSw3MTQ4NSw3MTUxNCw3MTU0Myw3MTU3Myw3MTYwMiw3MTYzMiw3MTY2Miw3MTY5MSw3MTcyMSw3MTc1MSw3MTc4MSw3MTgxMCw3MTgzOSw3MTg2OSw3MTg5OCw3MTkyNyw3MTk1Nyw3MTk4Niw3MjAxNiw3MjA0Niw3MjA3NSw3MjEwNSw3MjEzNSw3MjE2NCw3MjE5NCw3MjIyMyw3MjI1Myw3MjI4Miw3MjMxMSw3MjM0MSw3MjM3MCw3MjQwMCw3MjQyOSw3MjQ1OSw3MjQ4OSw3MjUxOCw3MjU0OCw3MjU3Nyw3MjYwNyw3MjYzNyw3MjY2Niw3MjY5NSw3MjcyNSw3Mjc1NCw3Mjc4NCw3MjgxMyw3Mjg0Myw3Mjg3Miw3MjkwMiw3MjkzMSw3Mjk2MSw3Mjk5MSw3MzAyMCw3MzA1MCw3MzA4MCw3MzEwOSw3MzEzOSw3MzE2OCw3MzE5Nyw3MzIyNyw3MzI1Niw3MzI4Niw3MzMxNSw3MzM0NSw3MzM3NSw3MzQwNCw3MzQzNCw3MzQ2NCw3MzQ5Myw3MzUyMyw3MzU1Miw3MzU4MSw3MzYxMSw3MzY0MCw3MzY2OSw3MzY5OSw3MzcyOSw3Mzc1OCw3Mzc4OCw3MzgxOCw3Mzg0OCw3Mzg3Nyw3MzkwNyw3MzkzNiw3Mzk2NSw3Mzk5NSw3NDAyNCw3NDA1Myw3NDA4Myw3NDExMyw3NDE0Miw3NDE3Miw3NDIwMiw3NDIzMSw3NDI2MSw3NDI5MSw3NDMyMCw3NDM0OSw3NDM3OSw3NDQwOCw3NDQzNyw3NDQ2Nyw3NDQ5Nyw3NDUyNiw3NDU1Niw3NDU4Niw3NDYxNSw3NDY0NSw3NDY3NSw3NDcwNCw3NDczMyw3NDc2Myw3NDc5Miw3NDgyMiw3NDg1MSw3NDg4MSw3NDkxMCw3NDk0MCw3NDk2OSw3NDk5OSw3NTAyOSw3NTA1OCw3NTA4OCw3NTExNyw3NTE0Nyw3NTE3Niw3NTIwNiw3NTIzNSw3NTI2NCw3NTI5NCw3NTMyMyw3NTM1Myw3NTM4Myw3NTQxMiw3NTQ0Miw3NTQ3Miw3NTUwMSw3NTUzMSw3NTU2MCw3NTU5MCw3NTYxOSw3NTY0OCw3NTY3OCw3NTcwNyw3NTczNyw3NTc2Niw3NTc5Niw3NTgyNiw3NTg1Niw3NTg4NSw3NTkxNSw3NTk0NCw3NTk3NCw3NjAwMyw3NjAzMiw3NjA2Miw3NjA5MSw3NjEyMSw3NjE1MCw3NjE4MCw3NjIxMCw3NjIzOSw3NjI2OSw3NjI5OSw3NjMyOCw3NjM1OCw3NjM4Nyw3NjQxNiw3NjQ0Niw3NjQ3NSw3NjUwNSw3NjUzNCw3NjU2NCw3NjU5Myw3NjYyMyw3NjY1Myw3NjY4Miw3NjcxMiw3Njc0MSw3Njc3MSw3NjgwMSw3NjgzMCw3Njg1OSw3Njg4OSw3NjkxOCw3Njk0OCw3Njk3Nyw3NzAwNyw3NzAzNiw3NzA2Niw3NzA5Niw3NzEyNSw3NzE1NSw3NzE4NSw3NzIxNCw3NzI0Myw3NzI3Myw3NzMwMiw3NzMzMiw3NzM2MSw3NzM5MCw3NzQyMCw3NzQ1MCw3NzQ3OSw3NzUwOSw3NzUzOSw3NzU2OSw3NzU5OCw3NzYyNyw3NzY1Nyw3NzY4Niw3NzcxNSw3Nzc0NSw3Nzc3NCw3NzgwNCw3NzgzMyw3Nzg2Myw3Nzg5Myw3NzkyMyw3Nzk1Miw3Nzk4Miw3ODAxMSw3ODA0MSw3ODA3MCw3ODA5OSw3ODEyOSw3ODE1OCw3ODE4OCw3ODIxNyw3ODI0Nyw3ODI3Nyw3ODMwNyw3ODMzNiw3ODM2Niw3ODM5NSw3ODQyNSw3ODQ1NCw3ODQ4Myw3ODUxMyw3ODU0Miw3ODU3Miw3ODYwMSw3ODYzMSw3ODY2MSw3ODY5MCw3ODcyMCw3ODc1MCw3ODc3OSw3ODgwOCw3ODgzOCw3ODg2Nyw3ODg5Nyw3ODkyNiw3ODk1Niw3ODk4NSw3OTAxNSw3OTA0NCw3OTA3NCw3OTEwNCw3OTEzMyw3OTE2Myw3OTE5Miw3OTIyMiw3OTI1MSw3OTI4MSw3OTMxMCw3OTM0MCw3OTM2OSw3OTM5OSw3OTQyOCw3OTQ1OCw3OTQ4Nyw3OTUxNyw3OTU0Niw3OTU3Niw3OTYwNiw3OTYzNSw3OTY2NSw3OTY5NSw3OTcyNCw3OTc1Myw3OTc4Myw3OTgxMiw3OTg0MSw3OTg3MSw3OTkwMCw3OTkzMCw3OTk2MCw3OTk5MF19LHtcIi4uL21haW5cIjo1NTYsXCJvYmplY3QtYXNzaWduXCI6NDQ3fV0sNTU2OltmdW5jdGlvbih0LGUscil7dmFyIG49dChcIm9iamVjdC1hc3NpZ25cIik7ZnVuY3Rpb24gaSgpe3RoaXMucmVnaW9uYWxPcHRpb25zPVtdLHRoaXMucmVnaW9uYWxPcHRpb25zW1wiXCJdPXtpbnZhbGlkQ2FsZW5kYXI6XCJDYWxlbmRhciB7MH0gbm90IGZvdW5kXCIsaW52YWxpZERhdGU6XCJJbnZhbGlkIHswfSBkYXRlXCIsaW52YWxpZE1vbnRoOlwiSW52YWxpZCB7MH0gbW9udGhcIixpbnZhbGlkWWVhcjpcIkludmFsaWQgezB9IHllYXJcIixkaWZmZXJlbnRDYWxlbmRhcnM6XCJDYW5ub3QgbWl4IHswfSBhbmQgezF9IGRhdGVzXCJ9LHRoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbXCJcIl0sdGhpcy5jYWxlbmRhcnM9e30sdGhpcy5fbG9jYWxDYWxzPXt9fWZ1bmN0aW9uIGEodCxlLHIsbil7aWYodGhpcy5fY2FsZW5kYXI9dCx0aGlzLl95ZWFyPWUsdGhpcy5fbW9udGg9cix0aGlzLl9kYXk9biwwPT09dGhpcy5fY2FsZW5kYXIuX3ZhbGlkYXRlTGV2ZWwmJiF0aGlzLl9jYWxlbmRhci5pc1ZhbGlkKHRoaXMuX3llYXIsdGhpcy5fbW9udGgsdGhpcy5fZGF5KSl0aHJvdyhjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkRGF0ZSkucmVwbGFjZSgvXFx7MFxcfS8sdGhpcy5fY2FsZW5kYXIubG9jYWwubmFtZSl9ZnVuY3Rpb24gbyh0LGUpe3JldHVyblwiMDAwMDAwXCIuc3Vic3RyaW5nKDAsZS0odD1cIlwiK3QpLmxlbmd0aCkrdH1mdW5jdGlvbiBzKCl7dGhpcy5zaG9ydFllYXJDdXRvZmY9XCIrMTBcIn1mdW5jdGlvbiBsKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdF18fHRoaXMucmVnaW9uYWxPcHRpb25zW1wiXCJdfW4oaS5wcm90b3R5cGUse2luc3RhbmNlOmZ1bmN0aW9uKHQsZSl7dD0odHx8XCJncmVnb3JpYW5cIikudG9Mb3dlckNhc2UoKSxlPWV8fFwiXCI7dmFyIHI9dGhpcy5fbG9jYWxDYWxzW3QrXCItXCIrZV07aWYoIXImJnRoaXMuY2FsZW5kYXJzW3RdJiYocj1uZXcgdGhpcy5jYWxlbmRhcnNbdF0oZSksdGhpcy5fbG9jYWxDYWxzW3QrXCItXCIrZV09ciksIXIpdGhyb3codGhpcy5sb2NhbC5pbnZhbGlkQ2FsZW5kYXJ8fHRoaXMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWRDYWxlbmRhcikucmVwbGFjZSgvXFx7MFxcfS8sdCk7cmV0dXJuIHJ9LG5ld0RhdGU6ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4obj0obnVsbCE9dCYmdC55ZWFyP3QuY2FsZW5kYXIoKTpcInN0cmluZ1wiPT10eXBlb2Ygbj90aGlzLmluc3RhbmNlKG4saSk6bil8fHRoaXMuaW5zdGFuY2UoKSkubmV3RGF0ZSh0LGUscil9LHN1YnN0aXR1dGVEaWdpdHM6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybihlK1wiXCIpLnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KX19LHN1YnN0aXR1dGVDaGluZXNlRGlnaXRzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe2Zvcih2YXIgbj1cIlwiLGk9MDtyPjA7KXt2YXIgYT1yJTEwO249KDA9PT1hP1wiXCI6dFthXStlW2ldKStuLGkrKyxyPU1hdGguZmxvb3Ioci8xMCl9cmV0dXJuIDA9PT1uLmluZGV4T2YodFsxXStlWzFdKSYmKG49bi5zdWJzdHIoMSkpLG58fHRbMF19fX0pLG4oYS5wcm90b3R5cGUse25ld0RhdGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9jYWxlbmRhci5uZXdEYXRlKG51bGw9PXQ/dGhpczp0LGUscil9LHllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX3llYXI6dGhpcy5zZXQodCxcInlcIil9LG1vbnRoOmZ1bmN0aW9uKHQpe3JldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLl9tb250aDp0aGlzLnNldCh0LFwibVwiKX0sZGF5OmZ1bmN0aW9uKHQpe3JldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLl9kYXk6dGhpcy5zZXQodCxcImRcIil9LGRhdGU6ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLl9jYWxlbmRhci5pc1ZhbGlkKHQsZSxyKSl0aHJvdyhjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkRGF0ZSkucmVwbGFjZSgvXFx7MFxcfS8sdGhpcy5fY2FsZW5kYXIubG9jYWwubmFtZSk7cmV0dXJuIHRoaXMuX3llYXI9dCx0aGlzLl9tb250aD1lLHRoaXMuX2RheT1yLHRoaXN9LGxlYXBZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmxlYXBZZWFyKHRoaXMpfSxlcG9jaDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5lcG9jaCh0aGlzKX0sZm9ybWF0WWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5mb3JtYXRZZWFyKHRoaXMpfSxtb250aE9mWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5tb250aE9mWWVhcih0aGlzKX0sd2Vla09mWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci53ZWVrT2ZZZWFyKHRoaXMpfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheXNJblllYXIodGhpcyl9LGRheU9mWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5kYXlPZlllYXIodGhpcyl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheXNJbk1vbnRoKHRoaXMpfSxkYXlPZldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5T2ZXZWVrKHRoaXMpfSx3ZWVrRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLndlZWtEYXkodGhpcyl9LGV4dHJhSW5mbzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5leHRyYUluZm8odGhpcyl9LGFkZDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9jYWxlbmRhci5hZGQodGhpcyx0LGUpfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuc2V0KHRoaXMsdCxlKX0sY29tcGFyZVRvOmZ1bmN0aW9uKHQpe2lmKHRoaXMuX2NhbGVuZGFyLm5hbWUhPT10Ll9jYWxlbmRhci5uYW1lKXRocm93KGMubG9jYWwuZGlmZmVyZW50Q2FsZW5kYXJzfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5kaWZmZXJlbnRDYWxlbmRhcnMpLnJlcGxhY2UoL1xcezBcXH0vLHRoaXMuX2NhbGVuZGFyLmxvY2FsLm5hbWUpLnJlcGxhY2UoL1xcezFcXH0vLHQuX2NhbGVuZGFyLmxvY2FsLm5hbWUpO3ZhciBlPXRoaXMuX3llYXIhPT10Ll95ZWFyP3RoaXMuX3llYXItdC5feWVhcjp0aGlzLl9tb250aCE9PXQuX21vbnRoP3RoaXMubW9udGhPZlllYXIoKS10Lm1vbnRoT2ZZZWFyKCk6dGhpcy5fZGF5LXQuX2RheTtyZXR1cm4gMD09PWU/MDplPDA/LTE6MX0sY2FsZW5kYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXJ9LHRvSkQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIudG9KRCh0aGlzKX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jYWxlbmRhci5mcm9tSkQodCl9LHRvSlNEYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLnRvSlNEYXRlKHRoaXMpfSxmcm9tSlNEYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jYWxlbmRhci5mcm9tSlNEYXRlKHQpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybih0aGlzLnllYXIoKTwwP1wiLVwiOlwiXCIpK28oTWF0aC5hYnModGhpcy55ZWFyKCkpLDQpK1wiLVwiK28odGhpcy5tb250aCgpLDIpK1wiLVwiK28odGhpcy5kYXkoKSwyKX19KSxuKHMucHJvdG90eXBlLHtfdmFsaWRhdGVMZXZlbDowLG5ld0RhdGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBudWxsPT10P3RoaXMudG9kYXkoKToodC55ZWFyJiYodGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbXCJcIl0uaW52YWxpZERhdGUpLHI9dC5kYXkoKSxlPXQubW9udGgoKSx0PXQueWVhcigpKSxuZXcgYSh0aGlzLHQsZSxyKSl9LHRvZGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZnJvbUpTRGF0ZShuZXcgRGF0ZSl9LGVwb2NoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbXCJcIl0uaW52YWxpZFllYXIpLnllYXIoKTwwP3RoaXMubG9jYWwuZXBvY2hzWzBdOnRoaXMubG9jYWwuZXBvY2hzWzFdfSxmb3JtYXRZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRZZWFyfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkWWVhcik7cmV0dXJuKGUueWVhcigpPDA/XCItXCI6XCJcIikrbyhNYXRoLmFicyhlLnllYXIoKSksNCl9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZFllYXJ8fGMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWRZZWFyKSwxMn0sbW9udGhPZlllYXI6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkTW9udGh8fGMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWRNb250aCk7cmV0dXJuKHIubW9udGgoKSt0aGlzLm1vbnRoc0luWWVhcihyKS10aGlzLmZpcnN0TW9udGgpJXRoaXMubW9udGhzSW5ZZWFyKHIpK3RoaXMubWluTW9udGh9LGZyb21Nb250aE9mWWVhcjpmdW5jdGlvbih0LGUpe3ZhciByPShlK3RoaXMuZmlyc3RNb250aC0yKnRoaXMubWluTW9udGgpJXRoaXMubW9udGhzSW5ZZWFyKHQpK3RoaXMubWluTW9udGg7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQscix0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRNb250aHx8Yy5yZWdpb25hbE9wdGlvbnNbXCJcIl0uaW52YWxpZE1vbnRoKSxyfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRZZWFyfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkWWVhcik7cmV0dXJuIHRoaXMubGVhcFllYXIoZSk/MzY2OjM2NX0sZGF5T2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkRGF0ZSk7cmV0dXJuIG4udG9KRCgpLXRoaXMubmV3RGF0ZShuLnllYXIoKSx0aGlzLmZyb21Nb250aE9mWWVhcihuLnllYXIoKSx0aGlzLm1pbk1vbnRoKSx0aGlzLm1pbkRheSkudG9KRCgpKzF9LGRheXNJbldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gN30sZGF5T2ZXZWVrOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkRGF0ZSk7cmV0dXJuKE1hdGguZmxvb3IodGhpcy50b0pEKG4pKSsyKSV0aGlzLmRheXNJbldlZWsoKX0sZXh0cmFJbmZvOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbXCJcIl0uaW52YWxpZERhdGUpLHt9fSxhZGQ6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbXCJcIl0uaW52YWxpZERhdGUpLHRoaXMuX2NvcnJlY3RBZGQodCx0aGlzLl9hZGQodCxlLHIpLGUscil9LF9hZGQ6ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuX3ZhbGlkYXRlTGV2ZWwrKyxcImRcIj09PXJ8fFwid1wiPT09cil7dmFyIG49dC50b0pEKCkrZSooXCJ3XCI9PT1yP3RoaXMuZGF5c0luV2VlaygpOjEpLGk9dC5jYWxlbmRhcigpLmZyb21KRChuKTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLFtpLnllYXIoKSxpLm1vbnRoKCksaS5kYXkoKV19dHJ5e3ZhciBhPXQueWVhcigpKyhcInlcIj09PXI/ZTowKSxvPXQubW9udGhPZlllYXIoKSsoXCJtXCI9PT1yP2U6MCk7aT10LmRheSgpO1wieVwiPT09cj8odC5tb250aCgpIT09dGhpcy5mcm9tTW9udGhPZlllYXIoYSxvKSYmKG89dGhpcy5uZXdEYXRlKGEsdC5tb250aCgpLHRoaXMubWluRGF5KS5tb250aE9mWWVhcigpKSxvPU1hdGgubWluKG8sdGhpcy5tb250aHNJblllYXIoYSkpLGk9TWF0aC5taW4oaSx0aGlzLmRheXNJbk1vbnRoKGEsdGhpcy5mcm9tTW9udGhPZlllYXIoYSxvKSkpKTpcIm1cIj09PXImJighZnVuY3Rpb24odCl7Zm9yKDtvPHQubWluTW9udGg7KWEtLSxvKz10Lm1vbnRoc0luWWVhcihhKTtmb3IodmFyIGU9dC5tb250aHNJblllYXIoYSk7bz5lLTErdC5taW5Nb250aDspYSsrLG8tPWUsZT10Lm1vbnRoc0luWWVhcihhKX0odGhpcyksaT1NYXRoLm1pbihpLHRoaXMuZGF5c0luTW9udGgoYSx0aGlzLmZyb21Nb250aE9mWWVhcihhLG8pKSkpO3ZhciBzPVthLHRoaXMuZnJvbU1vbnRoT2ZZZWFyKGEsbyksaV07cmV0dXJuIHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLSxzfWNhdGNoKHQpe3Rocm93IHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLSx0fX0sX2NvcnJlY3RBZGQ6ZnVuY3Rpb24odCxlLHIsbil7aWYoISh0aGlzLmhhc1llYXJaZXJvfHxcInlcIiE9PW4mJlwibVwiIT09bnx8MCE9PWVbMF0mJnQueWVhcigpPjA9PWVbMF0+MCkpe3ZhciBpPXt5OlsxLDEsXCJ5XCJdLG06WzEsdGhpcy5tb250aHNJblllYXIoLTEpLFwibVwiXSx3Olt0aGlzLmRheXNJbldlZWsoKSx0aGlzLmRheXNJblllYXIoLTEpLFwiZFwiXSxkOlsxLHRoaXMuZGF5c0luWWVhcigtMSksXCJkXCJdfVtuXSxhPXI8MD8tMToxO2U9dGhpcy5fYWRkKHQscippWzBdK2EqaVsxXSxpWzJdKX1yZXR1cm4gdC5kYXRlKGVbMF0sZVsxXSxlWzJdKX0sc2V0OmZ1bmN0aW9uKHQsZSxyKXt0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbXCJcIl0uaW52YWxpZERhdGUpO3ZhciBuPVwieVwiPT09cj9lOnQueWVhcigpLGk9XCJtXCI9PT1yP2U6dC5tb250aCgpLGE9XCJkXCI9PT1yP2U6dC5kYXkoKTtyZXR1cm5cInlcIiE9PXImJlwibVwiIT09cnx8KGE9TWF0aC5taW4oYSx0aGlzLmRheXNJbk1vbnRoKG4saSkpKSx0LmRhdGUobixpLGEpfSxpc1ZhbGlkOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLl92YWxpZGF0ZUxldmVsKys7dmFyIG49dGhpcy5oYXNZZWFyWmVyb3x8MCE9PXQ7aWYobil7dmFyIGk9dGhpcy5uZXdEYXRlKHQsZSx0aGlzLm1pbkRheSk7bj1lPj10aGlzLm1pbk1vbnRoJiZlLXRoaXMubWluTW9udGg8dGhpcy5tb250aHNJblllYXIoaSkmJnI+PXRoaXMubWluRGF5JiZyLXRoaXMubWluRGF5PHRoaXMuZGF5c0luTW9udGgoaSl9cmV0dXJuIHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLSxufSx0b0pTRGF0ZTpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbXCJcIl0uaW52YWxpZERhdGUpO3JldHVybiBjLmluc3RhbmNlKCkuZnJvbUpEKHRoaXMudG9KRChuKSkudG9KU0RhdGUoKX0sZnJvbUpTRGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mcm9tSkQoYy5pbnN0YW5jZSgpLmZyb21KU0RhdGUodCkudG9KRCgpKX0sX3ZhbGlkYXRlOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQueWVhcil7aWYoMD09PXRoaXMuX3ZhbGlkYXRlTGV2ZWwmJnRoaXMubmFtZSE9PXQuY2FsZW5kYXIoKS5uYW1lKXRocm93KGMubG9jYWwuZGlmZmVyZW50Q2FsZW5kYXJzfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5kaWZmZXJlbnRDYWxlbmRhcnMpLnJlcGxhY2UoL1xcezBcXH0vLHRoaXMubG9jYWwubmFtZSkucmVwbGFjZSgvXFx7MVxcfS8sdC5jYWxlbmRhcigpLmxvY2FsLm5hbWUpO3JldHVybiB0fXRyeXtpZih0aGlzLl92YWxpZGF0ZUxldmVsKyssMT09PXRoaXMuX3ZhbGlkYXRlTGV2ZWwmJiF0aGlzLmlzVmFsaWQodCxlLHIpKXRocm93IG4ucmVwbGFjZSgvXFx7MFxcfS8sdGhpcy5sb2NhbC5uYW1lKTt2YXIgaT10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiB0aGlzLl92YWxpZGF0ZUxldmVsLS0saX1jYXRjaCh0KXt0aHJvdyB0aGlzLl92YWxpZGF0ZUxldmVsLS0sdH19fSksbC5wcm90b3R5cGU9bmV3IHMsbihsLnByb3RvdHlwZSx7bmFtZTpcIkdyZWdvcmlhblwiLGpkRXBvY2g6MTcyMTQyNS41LGRheXNQZXJNb250aDpbMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7XCJcIjp7bmFtZTpcIkdyZWdvcmlhblwiLGVwb2NoczpbXCJCQ0VcIixcIkNFXCJdLG1vbnRoTmFtZXM6W1wiSmFudWFyeVwiLFwiRmVicnVhcnlcIixcIk1hcmNoXCIsXCJBcHJpbFwiLFwiTWF5XCIsXCJKdW5lXCIsXCJKdWx5XCIsXCJBdWd1c3RcIixcIlNlcHRlbWJlclwiLFwiT2N0b2JlclwiLFwiTm92ZW1iZXJcIixcIkRlY2VtYmVyXCJdLG1vbnRoTmFtZXNTaG9ydDpbXCJKYW5cIixcIkZlYlwiLFwiTWFyXCIsXCJBcHJcIixcIk1heVwiLFwiSnVuXCIsXCJKdWxcIixcIkF1Z1wiLFwiU2VwXCIsXCJPY3RcIixcIk5vdlwiLFwiRGVjXCJdLGRheU5hbWVzOltcIlN1bmRheVwiLFwiTW9uZGF5XCIsXCJUdWVzZGF5XCIsXCJXZWRuZXNkYXlcIixcIlRodXJzZGF5XCIsXCJGcmlkYXlcIixcIlNhdHVyZGF5XCJdLGRheU5hbWVzU2hvcnQ6W1wiU3VuXCIsXCJNb25cIixcIlR1ZVwiLFwiV2VkXCIsXCJUaHVcIixcIkZyaVwiLFwiU2F0XCJdLGRheU5hbWVzTWluOltcIlN1XCIsXCJNb1wiLFwiVHVcIixcIldlXCIsXCJUaFwiLFwiRnJcIixcIlNhXCJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6XCJtbS9kZC95eXl5XCIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRZZWFyfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkWWVhcik7cmV0dXJuKHQ9ZS55ZWFyKCkrKGUueWVhcigpPDA/MTowKSklND09MCYmKHQlMTAwIT0wfHx0JTQwMD09MCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKDQtKG4uZGF5T2ZXZWVrKCl8fDcpLFwiZFwiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZE1vbnRofHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zW1wiXCJdLmludmFsaWREYXRlKTt0PW4ueWVhcigpLGU9bi5tb250aCgpLHI9bi5kYXkoKSx0PDAmJnQrKyxlPDMmJihlKz0xMix0LS0pO3ZhciBpPU1hdGguZmxvb3IodC8xMDApLGE9Mi1pK01hdGguZmxvb3IoaS80KTtyZXR1cm4gTWF0aC5mbG9vcigzNjUuMjUqKHQrNDcxNikpK01hdGguZmxvb3IoMzAuNjAwMSooZSsxKSkrcithLTE1MjQuNX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodCsuNSkscj1NYXRoLmZsb29yKChlLTE4NjcyMTYuMjUpLzM2NTI0LjI1KSxuPShyPWUrMStyLU1hdGguZmxvb3Ioci80KSkrMTUyNCxpPU1hdGguZmxvb3IoKG4tMTIyLjEpLzM2NS4yNSksYT1NYXRoLmZsb29yKDM2NS4yNSppKSxvPU1hdGguZmxvb3IoKG4tYSkvMzAuNjAwMSkscz1uLWEtTWF0aC5mbG9vcigzMC42MDAxKm8pLGw9by0obz4xMy41PzEzOjEpLGM9aS0obD4yLjU/NDcxNjo0NzE1KTtyZXR1cm4gYzw9MCYmYy0tLHRoaXMubmV3RGF0ZShjLGwscyl9LHRvSlNEYXRlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkRGF0ZSksaT1uZXcgRGF0ZShuLnllYXIoKSxuLm1vbnRoKCktMSxuLmRheSgpKTtyZXR1cm4gaS5zZXRIb3VycygwKSxpLnNldE1pbnV0ZXMoMCksaS5zZXRTZWNvbmRzKDApLGkuc2V0TWlsbGlzZWNvbmRzKDApLGkuc2V0SG91cnMoaS5nZXRIb3VycygpPjEyP2kuZ2V0SG91cnMoKSsyOjApLGl9LGZyb21KU0RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubmV3RGF0ZSh0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpKzEsdC5nZXREYXRlKCkpfX0pO3ZhciBjPWUuZXhwb3J0cz1uZXcgaTtjLmNkYXRlPWEsYy5iYXNlQ2FsZW5kYXI9cyxjLmNhbGVuZGFycy5ncmVnb3JpYW49bH0se1wib2JqZWN0LWFzc2lnblwiOjQ0N31dLDU1NzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCJvYmplY3QtYXNzaWduXCIpLGk9dChcIi4vbWFpblwiKTtuKGkucmVnaW9uYWxPcHRpb25zW1wiXCJdLHtpbnZhbGlkQXJndW1lbnRzOlwiSW52YWxpZCBhcmd1bWVudHNcIixpbnZhbGlkRm9ybWF0OlwiQ2Fubm90IGZvcm1hdCBhIGRhdGUgZnJvbSBhbm90aGVyIGNhbGVuZGFyXCIsbWlzc2luZ051bWJlckF0OlwiTWlzc2luZyBudW1iZXIgYXQgcG9zaXRpb24gezB9XCIsdW5rbm93bk5hbWVBdDpcIlVua25vd24gbmFtZSBhdCBwb3NpdGlvbiB7MH1cIix1bmV4cGVjdGVkTGl0ZXJhbEF0OlwiVW5leHBlY3RlZCBsaXRlcmFsIGF0IHBvc2l0aW9uIHswfVwiLHVuZXhwZWN0ZWRUZXh0OlwiQWRkaXRpb25hbCB0ZXh0IGZvdW5kIGF0IGVuZFwifSksaS5sb2NhbD1pLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXSxuKGkuY2RhdGUucHJvdG90eXBlLHtmb3JtYXREYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIHQmJihlPXQsdD1cIlwiKSx0aGlzLl9jYWxlbmRhci5mb3JtYXREYXRlKHR8fFwiXCIsdGhpcyxlKX19KSxuKGkuYmFzZUNhbGVuZGFyLnByb3RvdHlwZSx7VU5JWF9FUE9DSDppLmluc3RhbmNlKCkubmV3RGF0ZSgxOTcwLDEsMSkudG9KRCgpLFNFQ1NfUEVSX0RBWTo4NjQwMCxUSUNLU19FUE9DSDppLmluc3RhbmNlKCkuamRFcG9jaCxUSUNLU19QRVJfREFZOjg2NGU5LEFUT006XCJ5eXl5LW1tLWRkXCIsQ09PS0lFOlwiRCwgZGQgTSB5eXl5XCIsRlVMTDpcIkRELCBNTSBkLCB5eXl5XCIsSVNPXzg2MDE6XCJ5eXl5LW1tLWRkXCIsSlVMSUFOOlwiSlwiLFJGQ184MjI6XCJELCBkIE0geXlcIixSRkNfODUwOlwiREQsIGRkLU0teXlcIixSRkNfMTAzNjpcIkQsIGQgTSB5eVwiLFJGQ18xMTIzOlwiRCwgZCBNIHl5eXlcIixSRkNfMjgyMjpcIkQsIGQgTSB5eXl5XCIsUlNTOlwiRCwgZCBNIHl5XCIsVElDS1M6XCIhXCIsVElNRVNUQU1QOlwiQFwiLFczQzpcInl5eXktbW0tZGRcIixmb3JtYXREYXRlOmZ1bmN0aW9uKHQsZSxyKXtpZihcInN0cmluZ1wiIT10eXBlb2YgdCYmKHI9ZSxlPXQsdD1cIlwiKSwhZSlyZXR1cm5cIlwiO2lmKGUuY2FsZW5kYXIoKSE9PXRoaXMpdGhyb3cgaS5sb2NhbC5pbnZhbGlkRm9ybWF0fHxpLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkRm9ybWF0O3Q9dHx8dGhpcy5sb2NhbC5kYXRlRm9ybWF0O2Zvcih2YXIgbixhLG8scyxsPShyPXJ8fHt9KS5kYXlOYW1lc1Nob3J0fHx0aGlzLmxvY2FsLmRheU5hbWVzU2hvcnQsYz1yLmRheU5hbWVzfHx0aGlzLmxvY2FsLmRheU5hbWVzLHU9ci5tb250aE51bWJlcnN8fHRoaXMubG9jYWwubW9udGhOdW1iZXJzLGg9ci5tb250aE5hbWVzU2hvcnR8fHRoaXMubG9jYWwubW9udGhOYW1lc1Nob3J0LGY9ci5tb250aE5hbWVzfHx0aGlzLmxvY2FsLm1vbnRoTmFtZXMscD0oci5jYWxjdWxhdGVXZWVrfHx0aGlzLmxvY2FsLmNhbGN1bGF0ZVdlZWssZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MTt3K248dC5sZW5ndGgmJnQuY2hhckF0KHcrbik9PT1lOyluKys7cmV0dXJuIHcrPW4tMSxNYXRoLmZsb29yKG4vKHJ8fDEpKT4xfSksZD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1cIlwiK2U7aWYocCh0LG4pKWZvcig7aS5sZW5ndGg8cjspaT1cIjBcIitpO3JldHVybiBpfSxnPXRoaXMsdj1mdW5jdGlvbih0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB1P3UuY2FsbChnLHQscChcIm1cIikpOngoZChcIm1cIix0Lm1vbnRoKCksMikpfSxtPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/XCJmdW5jdGlvblwiPT10eXBlb2YgZj9mLmNhbGwoZyx0KTpmW3QubW9udGgoKS1nLm1pbk1vbnRoXTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBoP2guY2FsbChnLHQpOmhbdC5tb250aCgpLWcubWluTW9udGhdfSx5PXRoaXMubG9jYWwuZGlnaXRzLHg9ZnVuY3Rpb24odCl7cmV0dXJuIHIubG9jYWxOdW1iZXJzJiZ5P3kodCk6dH0sYj1cIlwiLF89ITEsdz0wO3c8dC5sZW5ndGg7dysrKWlmKF8pXCInXCIhPT10LmNoYXJBdCh3KXx8cChcIidcIik/Yis9dC5jaGFyQXQodyk6Xz0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdCh3KSl7Y2FzZVwiZFwiOmIrPXgoZChcImRcIixlLmRheSgpLDIpKTticmVhaztjYXNlXCJEXCI6Yis9KG49XCJEXCIsYT1lLmRheU9mV2VlaygpLG89bCxzPWMscChuKT9zW2FdOm9bYV0pO2JyZWFrO2Nhc2VcIm9cIjpiKz1kKFwib1wiLGUuZGF5T2ZZZWFyKCksMyk7YnJlYWs7Y2FzZVwid1wiOmIrPWQoXCJ3XCIsZS53ZWVrT2ZZZWFyKCksMik7YnJlYWs7Y2FzZVwibVwiOmIrPXYoZSk7YnJlYWs7Y2FzZVwiTVwiOmIrPW0oZSxwKFwiTVwiKSk7YnJlYWs7Y2FzZVwieVwiOmIrPXAoXCJ5XCIsMik/ZS55ZWFyKCk6KGUueWVhcigpJTEwMDwxMD9cIjBcIjpcIlwiKStlLnllYXIoKSUxMDA7YnJlYWs7Y2FzZVwiWVwiOnAoXCJZXCIsMiksYis9ZS5mb3JtYXRZZWFyKCk7YnJlYWs7Y2FzZVwiSlwiOmIrPWUudG9KRCgpO2JyZWFrO2Nhc2VcIkBcIjpiKz0oZS50b0pEKCktdGhpcy5VTklYX0VQT0NIKSp0aGlzLlNFQ1NfUEVSX0RBWTticmVhaztjYXNlXCIhXCI6Yis9KGUudG9KRCgpLXRoaXMuVElDS1NfRVBPQ0gpKnRoaXMuVElDS1NfUEVSX0RBWTticmVhaztjYXNlXCInXCI6cChcIidcIik/Yis9XCInXCI6Xz0hMDticmVhaztkZWZhdWx0OmIrPXQuY2hhckF0KHcpfXJldHVybiBifSxwYXJzZURhdGU6ZnVuY3Rpb24odCxlLHIpe2lmKG51bGw9PWUpdGhyb3cgaS5sb2NhbC5pbnZhbGlkQXJndW1lbnRzfHxpLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS5pbnZhbGlkQXJndW1lbnRzO2lmKFwiXCI9PT0oZT1cIm9iamVjdFwiPT10eXBlb2YgZT9lLnRvU3RyaW5nKCk6ZStcIlwiKSlyZXR1cm4gbnVsbDt0PXR8fHRoaXMubG9jYWwuZGF0ZUZvcm1hdDt2YXIgbj0ocj1yfHx7fSkuc2hvcnRZZWFyQ3V0b2ZmfHx0aGlzLnNob3J0WWVhckN1dG9mZjtuPVwic3RyaW5nXCIhPXR5cGVvZiBuP246dGhpcy50b2RheSgpLnllYXIoKSUxMDArcGFyc2VJbnQobiwxMCk7Zm9yKHZhciBhPXIuZGF5TmFtZXNTaG9ydHx8dGhpcy5sb2NhbC5kYXlOYW1lc1Nob3J0LG89ci5kYXlOYW1lc3x8dGhpcy5sb2NhbC5kYXlOYW1lcyxzPXIucGFyc2VNb250aHx8dGhpcy5sb2NhbC5wYXJzZU1vbnRoLGw9ci5tb250aE51bWJlcnN8fHRoaXMubG9jYWwubW9udGhOdW1iZXJzLGM9ci5tb250aE5hbWVzU2hvcnR8fHRoaXMubG9jYWwubW9udGhOYW1lc1Nob3J0LHU9ci5tb250aE5hbWVzfHx0aGlzLmxvY2FsLm1vbnRoTmFtZXMsaD0tMSxmPS0xLHA9LTEsZD0tMSxnPS0xLHY9ITEsbT0hMSx5PWZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPTE7TStuPHQubGVuZ3RoJiZ0LmNoYXJBdChNK24pPT09ZTspbisrO3JldHVybiBNKz1uLTEsTWF0aC5mbG9vcihuLyhyfHwxKSk+MX0seD1mdW5jdGlvbih0LHIpe3ZhciBuPXkodCxyKSxhPVsyLDMsbj80OjIsbj80OjIsMTAsMTEsMjBdW1wib3lZSkAhXCIuaW5kZXhPZih0KSsxXSxvPW5ldyBSZWdFeHAoXCJeLT9cXFxcZHsxLFwiK2ErXCJ9XCIpLHM9ZS5zdWJzdHJpbmcoVCkubWF0Y2gobyk7aWYoIXMpdGhyb3coaS5sb2NhbC5taXNzaW5nTnVtYmVyQXR8fGkucmVnaW9uYWxPcHRpb25zW1wiXCJdLm1pc3NpbmdOdW1iZXJBdCkucmVwbGFjZSgvXFx7MFxcfS8sVCk7cmV0dXJuIFQrPXNbMF0ubGVuZ3RoLHBhcnNlSW50KHNbMF0sMTApfSxiPXRoaXMsXz1mdW5jdGlvbigpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGwpe3koXCJtXCIpO3ZhciB0PWwuY2FsbChiLGUuc3Vic3RyaW5nKFQpKTtyZXR1cm4gVCs9dC5sZW5ndGgsdH1yZXR1cm4geChcIm1cIil9LHc9ZnVuY3Rpb24odCxyLG4sYSl7Zm9yKHZhciBvPXkodCxhKT9uOnIscz0wO3M8by5sZW5ndGg7cysrKWlmKGUuc3Vic3RyKFQsb1tzXS5sZW5ndGgpLnRvTG93ZXJDYXNlKCk9PT1vW3NdLnRvTG93ZXJDYXNlKCkpcmV0dXJuIFQrPW9bc10ubGVuZ3RoLHMrYi5taW5Nb250aDt0aHJvdyhpLmxvY2FsLnVua25vd25OYW1lQXR8fGkucmVnaW9uYWxPcHRpb25zW1wiXCJdLnVua25vd25OYW1lQXQpLnJlcGxhY2UoL1xcezBcXH0vLFQpfSxrPWZ1bmN0aW9uKCl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdSl7dmFyIHQ9eShcIk1cIik/dS5jYWxsKGIsZS5zdWJzdHJpbmcoVCkpOmMuY2FsbChiLGUuc3Vic3RyaW5nKFQpKTtyZXR1cm4gVCs9dC5sZW5ndGgsdH1yZXR1cm4gdyhcIk1cIixjLHUpfSxBPWZ1bmN0aW9uKCl7aWYoZS5jaGFyQXQoVCkhPT10LmNoYXJBdChNKSl0aHJvdyhpLmxvY2FsLnVuZXhwZWN0ZWRMaXRlcmFsQXR8fGkucmVnaW9uYWxPcHRpb25zW1wiXCJdLnVuZXhwZWN0ZWRMaXRlcmFsQXQpLnJlcGxhY2UoL1xcezBcXH0vLFQpO1QrK30sVD0wLE09MDtNPHQubGVuZ3RoO00rKylpZihtKVwiJ1wiIT09dC5jaGFyQXQoTSl8fHkoXCInXCIpP0EoKTptPSExO2Vsc2Ugc3dpdGNoKHQuY2hhckF0KE0pKXtjYXNlXCJkXCI6ZD14KFwiZFwiKTticmVhaztjYXNlXCJEXCI6dyhcIkRcIixhLG8pO2JyZWFrO2Nhc2VcIm9cIjpnPXgoXCJvXCIpO2JyZWFrO2Nhc2VcIndcIjp4KFwid1wiKTticmVhaztjYXNlXCJtXCI6cD1fKCk7YnJlYWs7Y2FzZVwiTVwiOnA9aygpO2JyZWFrO2Nhc2VcInlcIjp2YXIgUz1NO3Y9IXkoXCJ5XCIsMiksTT1TLGY9eChcInlcIiwyKTticmVhaztjYXNlXCJZXCI6Zj14KFwiWVwiLDIpO2JyZWFrO2Nhc2VcIkpcIjpoPXgoXCJKXCIpKy41LFwiLlwiPT09ZS5jaGFyQXQoVCkmJihUKysseChcIkpcIikpO2JyZWFrO2Nhc2VcIkBcIjpoPXgoXCJAXCIpL3RoaXMuU0VDU19QRVJfREFZK3RoaXMuVU5JWF9FUE9DSDticmVhaztjYXNlXCIhXCI6aD14KFwiIVwiKS90aGlzLlRJQ0tTX1BFUl9EQVkrdGhpcy5USUNLU19FUE9DSDticmVhaztjYXNlXCIqXCI6VD1lLmxlbmd0aDticmVhaztjYXNlXCInXCI6eShcIidcIik/QSgpOm09ITA7YnJlYWs7ZGVmYXVsdDpBKCl9aWYoVDxlLmxlbmd0aCl0aHJvdyBpLmxvY2FsLnVuZXhwZWN0ZWRUZXh0fHxpLnJlZ2lvbmFsT3B0aW9uc1tcIlwiXS51bmV4cGVjdGVkVGV4dDtpZigtMT09PWY/Zj10aGlzLnRvZGF5KCkueWVhcigpOmY8MTAwJiZ2JiYoZis9LTE9PT1uPzE5MDA6dGhpcy50b2RheSgpLnllYXIoKS10aGlzLnRvZGF5KCkueWVhcigpJTEwMC0oZjw9bj8wOjEwMCkpLFwic3RyaW5nXCI9PXR5cGVvZiBwJiYocD1zLmNhbGwodGhpcyxmLHApKSxnPi0xKXtwPTEsZD1nO2Zvcih2YXIgRT10aGlzLmRheXNJbk1vbnRoKGYscCk7ZD5FO0U9dGhpcy5kYXlzSW5Nb250aChmLHApKXArKyxkLT1FfXJldHVybiBoPi0xP3RoaXMuZnJvbUpEKGgpOnRoaXMubmV3RGF0ZShmLHAsZCl9LGRldGVybWluZURhdGU6ZnVuY3Rpb24odCxlLHIsbixpKXtyJiZcIm9iamVjdFwiIT10eXBlb2YgciYmKGk9bixuPXIscj1udWxsKSxcInN0cmluZ1wiIT10eXBlb2YgbiYmKGk9bixuPVwiXCIpO3ZhciBhPXRoaXM7cmV0dXJuIGU9ZT9lLm5ld0RhdGUoKTpudWxsLHQ9bnVsbD09dD9lOlwic3RyaW5nXCI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3RyeXtyZXR1cm4gYS5wYXJzZURhdGUobix0LGkpfWNhdGNoKHQpe31mb3IodmFyIGU9KCh0PXQudG9Mb3dlckNhc2UoKSkubWF0Y2goL15jLykmJnI/ci5uZXdEYXRlKCk6bnVsbCl8fGEudG9kYXkoKSxvPS8oWystXT9bMC05XSspXFxzKihkfHd8bXx5KT8vZyxzPW8uZXhlYyh0KTtzOyllLmFkZChwYXJzZUludChzWzFdLDEwKSxzWzJdfHxcImRcIikscz1vLmV4ZWModCk7cmV0dXJuIGV9KHQpOlwibnVtYmVyXCI9PXR5cGVvZiB0P2lzTmFOKHQpfHx0PT09MS8wfHx0PT09LTEvMD9lOmEudG9kYXkoKS5hZGQodCxcImRcIik6YS5uZXdEYXRlKHQpfX0pfSx7XCIuL21haW5cIjo1NTYsXCJvYmplY3QtYXNzaWduXCI6NDQ3fV0sNTU4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoXCJjd2lzZS1jb21waWxlclwiKSh7YXJnczpbXCJhcnJheVwiLHtvZmZzZXQ6WzFdLGFycmF5OjB9LFwic2NhbGFyXCIsXCJzY2FsYXJcIixcImluZGV4XCJdLHByZTp7Ym9keTpcInt9XCIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6XCJ7fVwiLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5Olwie1xcbiAgICAgICAgdmFyIF9pbmxpbmVfMV9kYSA9IF9pbmxpbmVfMV9hcmcwXyAtIF9pbmxpbmVfMV9hcmczX1xcbiAgICAgICAgdmFyIF9pbmxpbmVfMV9kYiA9IF9pbmxpbmVfMV9hcmcxXyAtIF9pbmxpbmVfMV9hcmczX1xcbiAgICAgICAgaWYoKF9pbmxpbmVfMV9kYSA+PSAwKSAhPT0gKF9pbmxpbmVfMV9kYiA+PSAwKSkge1xcbiAgICAgICAgICBfaW5saW5lXzFfYXJnMl8ucHVzaChfaW5saW5lXzFfYXJnNF9bMF0gKyAwLjUgKyAwLjUgKiAoX2lubGluZV8xX2RhICsgX2lubGluZV8xX2RiKSAvIChfaW5saW5lXzFfZGEgLSBfaW5saW5lXzFfZGIpKVxcbiAgICAgICAgfVxcbiAgICAgIH1cIixhcmdzOlt7bmFtZTpcIl9pbmxpbmVfMV9hcmcwX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6XCJfaW5saW5lXzFfYXJnMV9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOlwiX2lubGluZV8xX2FyZzJfXCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZTpcIl9pbmxpbmVfMV9hcmczX1wiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn0se25hbWU6XCJfaW5saW5lXzFfYXJnNF9cIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W1wiX2lubGluZV8xX2RhXCIsXCJfaW5saW5lXzFfZGJcIl19LGZ1bmNOYW1lOlwiemVyb0Nyb3NzaW5nc1wifSl9LHtcImN3aXNlLWNvbXBpbGVyXCI6MTM3fV0sNTU5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107cmV0dXJuIGU9K2V8fDAsbih0LmhpKHQuc2hhcGVbMF0tMSkscixlKSxyfTt2YXIgbj10KFwiLi9saWIvemMtY29yZVwiKX0se1wiLi9saWIvemMtY29yZVwiOjU1OH1dLDU2MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1be3BhdGg6XCJcIixiYWNrb2ZmOjB9LHtwYXRoOlwiTS0yLjQsLTNWM0wwLjYsMFpcIixiYWNrb2ZmOi42fSx7cGF0aDpcIk0tMy43LC0yLjVWMi41TDEuMywwWlwiLGJhY2tvZmY6MS4zfSx7cGF0aDpcIk0tNC40NSwtM0wtMS42NSwtMC4yVjAuMkwtNC40NSwzTDEuNTUsMFpcIixiYWNrb2ZmOjEuNTV9LHtwYXRoOlwiTS0yLjIsLTIuMkwtMC4yLC0wLjJWMC4yTC0yLjIsMi4yTC0xLjQsM0wxLjYsMEwtMS40LC0zWlwiLGJhY2tvZmY6MS42fSx7cGF0aDpcIk0tNC40LC0yLjFMLTAuNiwtMC4yVjAuMkwtNC40LDIuMUwtNCwzTDIsMEwtNCwtM1pcIixiYWNrb2ZmOjJ9LHtwYXRoOlwiTTIsMEEyLDIgMCAxLDEgMCwtMkEyLDIgMCAwLDEgMiwwWlwiLGJhY2tvZmY6MCxub1JvdGF0ZTohMH0se3BhdGg6XCJNMiwyVi0ySC0yVjJaXCIsYmFja29mZjowLG5vUm90YXRlOiEwfV19LHt9XSw1NjE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9hcnJvd19wYXRoc1wiKSxpPXQoXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50c1wiKSxvPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLnRlbXBsYXRlZEFycmF5O2UuZXhwb3J0cz1vKFwiYW5ub3RhdGlvblwiLHt2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSx0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSx0ZXh0YW5nbGU6e3ZhbFR5cGU6XCJhbmdsZVwiLGRmbHQ6MCxlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LGZvbnQ6aSh7ZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wiLGNvbG9yRWRpdFR5cGU6XCJhcnJheWRyYXdcIn0pLHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjEsZGZsdDpudWxsLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0saGVpZ2h0Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjEsZGZsdDpudWxsLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0sb3BhY2l0eTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZTpcImFycmF5ZHJhd1wifSxhbGlnbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibGVmdFwiLFwiY2VudGVyXCIsXCJyaWdodFwiXSxkZmx0OlwiY2VudGVyXCIsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0sdmFsaWduOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ0b3BcIixcIm1pZGRsZVwiLFwiYm90dG9tXCJdLGRmbHQ6XCJtaWRkbGVcIixlZGl0VHlwZTpcImFycmF5ZHJhd1wifSxiZ2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OlwicmdiYSgwLDAsMCwwKVwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OlwicmdiYSgwLDAsMCwwKVwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGJvcmRlcnBhZDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0sc2hvd2Fycm93Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSxhcnJvd2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcImFycmF5ZHJhd1wifSxhcnJvd2hlYWQ6e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsbWluOjAsbWF4Om4ubGVuZ3RoLGRmbHQ6MSxlZGl0VHlwZTpcImFycmF5ZHJhd1wifSxzdGFydGFycm93aGVhZDp7dmFsVHlwZTpcImludGVnZXJcIixtaW46MCxtYXg6bi5sZW5ndGgsZGZsdDoxLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGFycm93c2lkZTp7dmFsVHlwZTpcImZsYWdsaXN0XCIsZmxhZ3M6W1wiZW5kXCIsXCJzdGFydFwiXSxleHRyYXM6W1wibm9uZVwiXSxkZmx0OlwiZW5kXCIsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0sYXJyb3dzaXplOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOi4zLGRmbHQ6MSxlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LHN0YXJ0YXJyb3dzaXplOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOi4zLGRmbHQ6MSxlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LGFycm93d2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46LjEsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSxzdGFuZG9mZjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LHN0YXJ0c3RhbmRvZmY6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSxheDp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0sYXk6e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LGF4cmVmOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLGRmbHQ6XCJwaXhlbFwiLHZhbHVlczpbXCJwaXhlbFwiLGEuaWRSZWdleC54LnRvU3RyaW5nKCldLGVkaXRUeXBlOlwiY2FsY1wifSxheXJlZjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIixkZmx0OlwicGl4ZWxcIix2YWx1ZXM6W1wicGl4ZWxcIixhLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZTpcImNhbGNcIn0seHJlZjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wicGFwZXJcIixhLmlkUmVnZXgueC50b1N0cmluZygpXSxlZGl0VHlwZTpcImNhbGNcIn0seDp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0seGFuY2hvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYXV0b1wiLFwibGVmdFwiLFwiY2VudGVyXCIsXCJyaWdodFwiXSxkZmx0OlwiYXV0b1wiLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0seHNoaWZ0Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0seXJlZjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wicGFwZXJcIixhLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZTpcImNhbGNcIn0seTp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0seWFuY2hvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYXV0b1wiLFwidG9wXCIsXCJtaWRkbGVcIixcImJvdHRvbVwiXSxkZmx0OlwiYXV0b1wiLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0seXNoaWZ0Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0sY2xpY2t0b3Nob3c6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOlshMSxcIm9ub2ZmXCIsXCJvbm91dFwiXSxkZmx0OiExLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LHhjbGljazp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LHljbGljazp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGhvdmVydGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGhvdmVybGFiZWw6e2JnY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcImFycmF5ZHJhd1wifSxmb250Omkoe2VkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9KSxlZGl0VHlwZTpcImFycmF5ZHJhd1wifSxjYXB0dXJlZXZlbnRzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGVkaXRUeXBlOlwiY2FsY1wiLF9kZXByZWNhdGVkOntyZWY6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcImNhbGNcIn19fSl9LHtcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzXCI6NzU1LFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCI6Nzc1LFwiLi9hcnJvd19wYXRoc1wiOjU2MH1dLDU2MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksYT10KFwiLi9kcmF3XCIpLmRyYXc7ZnVuY3Rpb24gbyh0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O24uZmlsdGVyVmlzaWJsZShlLmFubm90YXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWkuZ2V0RnJvbUlkKHQsZS54cmVmKSxuPWkuZ2V0RnJvbUlkKHQsZS55cmVmKTtlLl9leHRyZW1lcz17fSxyJiZzKGUsciksbiYmcyhlLG4pfSl9ZnVuY3Rpb24gcyh0LGUpe3ZhciByLG49ZS5faWQsYT1uLmNoYXJBdCgwKSxvPXRbYV0scz10W1wiYVwiK2FdLGw9dFthK1wicmVmXCJdLGM9dFtcImFcIithK1wicmVmXCJdLHU9dFtcIl9cIithK1wicGFkcGx1c1wiXSxoPXRbXCJfXCIrYStcInBhZG1pbnVzXCJdLGY9e3g6MSx5Oi0xfVthXSp0W2ErXCJzaGlmdFwiXSxwPTMqdC5hcnJvd3NpemUqdC5hcnJvd3dpZHRofHwwLGQ9cCtmLGc9cC1mLHY9Myp0LnN0YXJ0YXJyb3dzaXplKnQuYXJyb3d3aWR0aHx8MCxtPXYrZix5PXYtZjtpZihjPT09bCl7dmFyIHg9aS5maW5kRXh0cmVtZXMoZSxbZS5yMmMobyldLHtwcGFkcGx1czpkLHBwYWRtaW51czpnfSksYj1pLmZpbmRFeHRyZW1lcyhlLFtlLnIyYyhzKV0se3BwYWRwbHVzOk1hdGgubWF4KHUsbSkscHBhZG1pbnVzOk1hdGgubWF4KGgseSl9KTtyPXttaW46W3gubWluWzBdLGIubWluWzBdXSxtYXg6W3gubWF4WzBdLGIubWF4WzBdXX19ZWxzZSBtPXM/bStzOm0seT1zP3ktczp5LHI9aS5maW5kRXh0cmVtZXMoZSxbZS5yMmMobyldLHtwcGFkcGx1czpNYXRoLm1heCh1LGQsbSkscHBhZG1pbnVzOk1hdGgubWF4KGgsZyx5KX0pO3QuX2V4dHJlbWVzW25dPXJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7aWYobi5maWx0ZXJWaXNpYmxlKGUuYW5ub3RhdGlvbnMpLmxlbmd0aCYmdC5fZnVsbERhdGEubGVuZ3RoKXJldHVybiBuLnN5bmNPckFzeW5jKFthLG9dLHQpfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuL2RyYXdcIjo1Njd9XSw1NjM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGE9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIikuYXJyYXlFZGl0b3I7ZnVuY3Rpb24gbyh0LGUpe3ZhciByLG4saSxhLG8sbCxjLHU9dC5fZnVsbExheW91dC5hbm5vdGF0aW9ucyxoPVtdLGY9W10scD1bXSxkPShlfHxbXSkubGVuZ3RoO2ZvcihyPTA7cjx1Lmxlbmd0aDtyKyspaWYoYT0oaT11W3JdKS5jbGlja3Rvc2hvdyl7Zm9yKG49MDtuPGQ7bisrKWlmKGw9KG89ZVtuXSkueGF4aXMsYz1vLnlheGlzLGwuX2lkPT09aS54cmVmJiZjLl9pZD09PWkueXJlZiYmbC5kMnIoby54KT09PXMoaS5feGNsaWNrLGwpJiZjLmQycihvLnkpPT09cyhpLl95Y2xpY2ssYykpeyhpLnZpc2libGU/XCJvbm91dFwiPT09YT9mOnA6aCkucHVzaChyKTticmVha31uPT09ZCYmaS52aXNpYmxlJiZcIm9ub3V0XCI9PT1hJiZmLnB1c2gocil9cmV0dXJue29uOmgsb2ZmOmYsZXhwbGljaXRPZmY6cH19ZnVuY3Rpb24gcyh0LGUpe3JldHVyblwibG9nXCI9PT1lLnR5cGU/ZS5sMnIodCk6ZS5kMnIodCl9ZS5leHBvcnRzPXtoYXNDbGlja1RvU2hvdzpmdW5jdGlvbih0LGUpe3ZhciByPW8odCxlKTtyZXR1cm4gci5vbi5sZW5ndGg+MHx8ci5leHBsaWNpdE9mZi5sZW5ndGg+MH0sb25DbGljazpmdW5jdGlvbih0LGUpe3ZhciByLHMsbD1vKHQsZSksYz1sLm9uLHU9bC5vZmYuY29uY2F0KGwuZXhwbGljaXRPZmYpLGg9e30sZj10Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zO2lmKCFjLmxlbmd0aCYmIXUubGVuZ3RoKXJldHVybjtmb3Iocj0wO3I8Yy5sZW5ndGg7cisrKShzPWEodC5sYXlvdXQsXCJhbm5vdGF0aW9uc1wiLGZbY1tyXV0pKS5tb2RpZnlJdGVtKFwidmlzaWJsZVwiLCEwKSxuLmV4dGVuZEZsYXQoaCxzLmdldFVwZGF0ZU9iaigpKTtmb3Iocj0wO3I8dS5sZW5ndGg7cisrKShzPWEodC5sYXlvdXQsXCJhbm5vdGF0aW9uc1wiLGZbdVtyXV0pKS5tb2RpZnlJdGVtKFwidmlzaWJsZVwiLCExKSxuLmV4dGVuZEZsYXQoaCxzLmdldFVwZGF0ZU9iaigpKTtyZXR1cm4gaS5jYWxsKFwidXBkYXRlXCIsdCx7fSxoKX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vcmVnaXN0cnlcIjo4Mjl9XSw1NjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uL2NvbG9yXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXthKFwib3BhY2l0eVwiKTt2YXIgbz1hKFwiYmdjb2xvclwiKSxzPWEoXCJib3JkZXJjb2xvclwiKSxsPWkub3BhY2l0eShzKTthKFwiYm9yZGVycGFkXCIpO3ZhciBjPWEoXCJib3JkZXJ3aWR0aFwiKSx1PWEoXCJzaG93YXJyb3dcIik7aWYoYShcInRleHRcIix1P1wiIFwiOnIuX2RmbHRUaXRsZS5hbm5vdGF0aW9uKSxhKFwidGV4dGFuZ2xlXCIpLG4uY29lcmNlRm9udChhLFwiZm9udFwiLHIuZm9udCksYShcIndpZHRoXCIpLGEoXCJhbGlnblwiKSxhKFwiaGVpZ2h0XCIpJiZhKFwidmFsaWduXCIpLHUpe3ZhciBoLGYscD1hKFwiYXJyb3dzaWRlXCIpOy0xIT09cC5pbmRleE9mKFwiZW5kXCIpJiYoaD1hKFwiYXJyb3doZWFkXCIpLGY9YShcImFycm93c2l6ZVwiKSksLTEhPT1wLmluZGV4T2YoXCJzdGFydFwiKSYmKGEoXCJzdGFydGFycm93aGVhZFwiLGgpLGEoXCJzdGFydGFycm93c2l6ZVwiLGYpKSxhKFwiYXJyb3djb2xvclwiLGw/ZS5ib3JkZXJjb2xvcjppLmRlZmF1bHRMaW5lKSxhKFwiYXJyb3d3aWR0aFwiLDIqKGwmJmN8fDEpKSxhKFwic3RhbmRvZmZcIiksYShcInN0YXJ0c3RhbmRvZmZcIil9dmFyIGQ9YShcImhvdmVydGV4dFwiKSxnPXIuaG92ZXJsYWJlbHx8e307aWYoZCl7dmFyIHY9YShcImhvdmVybGFiZWwuYmdjb2xvclwiLGcuYmdjb2xvcnx8KGkub3BhY2l0eShvKT9pLnJnYihvKTppLmRlZmF1bHRMaW5lKSksbT1hKFwiaG92ZXJsYWJlbC5ib3JkZXJjb2xvclwiLGcuYm9yZGVyY29sb3J8fGkuY29udHJhc3QodikpO24uY29lcmNlRm9udChhLFwiaG92ZXJsYWJlbC5mb250XCIse2ZhbWlseTpnLmZvbnQuZmFtaWx5LHNpemU6Zy5mb250LnNpemUsY29sb3I6Zy5mb250LmNvbG9yfHxtfSl9YShcImNhcHR1cmVldmVudHNcIiwhIWQpfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vY29sb3JcIjo1Nzh9XSw1NjU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vLi4vbGliL3RvX2xvZ19yYW5nZVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7ZT1lfHx7fTt2YXIgbz1cImxvZ1wiPT09ciYmXCJsaW5lYXJcIj09PWUudHlwZSxzPVwibGluZWFyXCI9PT1yJiZcImxvZ1wiPT09ZS50eXBlO2lmKG98fHMpZm9yKHZhciBsLGMsdT10Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zLGg9ZS5faWQuY2hhckF0KDApLGY9MDtmPHUubGVuZ3RoO2YrKylsPXVbZl0sYz1cImFubm90YXRpb25zW1wiK2YrXCJdLlwiLGxbaCtcInJlZlwiXT09PWUuX2lkJiZwKGgpLGxbXCJhXCIraCtcInJlZlwiXT09PWUuX2lkJiZwKFwiYVwiK2gpO2Z1bmN0aW9uIHAodCl7dmFyIHI9bFt0XSxzPW51bGw7cz1vP2kocixlLnJhbmdlKTpNYXRoLnBvdygxMCxyKSxuKHMpfHwocz1udWxsKSxhKGMrdCxzKX19fSx7XCIuLi8uLi9saWIvdG9fbG9nX3JhbmdlXCI6NzI3LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw1NjY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0c1wiKSxvPXQoXCIuL2NvbW1vbl9kZWZhdWx0c1wiKSxzPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZnVuY3Rpb24gbCh0LGUscil7ZnVuY3Rpb24gYShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfXZhciBsPWEoXCJ2aXNpYmxlXCIpLGM9YShcImNsaWNrdG9zaG93XCIpO2lmKGx8fGMpe28odCxlLHIsYSk7Zm9yKHZhciB1PWUuc2hvd2Fycm93LGg9W1wieFwiLFwieVwiXSxmPVstMTAsLTMwXSxwPXtfZnVsbExheW91dDpyfSxkPTA7ZDwyO2QrKyl7dmFyIGc9aFtkXSx2PWkuY29lcmNlUmVmKHQsZSxwLGcsXCJcIixcInBhcGVyXCIpO2lmKFwicGFwZXJcIiE9PXYpaS5nZXRGcm9tSWQocCx2KS5fYW5uSW5kaWNlcy5wdXNoKGUuX2luZGV4KTtpZihpLmNvZXJjZVBvc2l0aW9uKGUscCxhLHYsZywuNSksdSl7dmFyIG09XCJhXCIrZyx5PWkuY29lcmNlUmVmKHQsZSxwLG0sXCJwaXhlbFwiKTtcInBpeGVsXCIhPT15JiZ5IT09diYmKHk9ZVttXT1cInBpeGVsXCIpO3ZhciB4PVwicGl4ZWxcIj09PXk/ZltkXTouNDtpLmNvZXJjZVBvc2l0aW9uKGUscCxhLHksbSx4KX1hKGcrXCJhbmNob3JcIiksYShnK1wic2hpZnRcIil9aWYobi5ub25lT3JBbGwodCxlLFtcInhcIixcInlcIl0pLHUmJm4ubm9uZU9yQWxsKHQsZSxbXCJheFwiLFwiYXlcIl0pLGMpe3ZhciBiPWEoXCJ4Y2xpY2tcIiksXz1hKFwieWNsaWNrXCIpO2UuX3hjbGljaz12b2lkIDA9PT1iP2UueDppLmNsZWFuUG9zaXRpb24oYixwLGUueHJlZiksZS5feWNsaWNrPXZvaWQgMD09PV8/ZS55OmkuY2xlYW5Qb3NpdGlvbihfLHAsZS55cmVmKX19fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2EodCxlLHtuYW1lOlwiYW5ub3RhdGlvbnNcIixoYW5kbGVJdGVtRGVmYXVsdHM6bH0pfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCI6NzQ1LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuL2F0dHJpYnV0ZXNcIjo1NjEsXCIuL2NvbW1vbl9kZWZhdWx0c1wiOjU2NH1dLDU2NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxhPXQoXCIuLi8uLi9wbG90cy9wbG90c1wiKSxvPXQoXCIuLi8uLi9saWJcIikscz10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksbD10KFwiLi4vY29sb3JcIiksYz10KFwiLi4vZHJhd2luZ1wiKSx1PXQoXCIuLi9meFwiKSxoPXQoXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIiksZj10KFwiLi4vLi4vbGliL3NldGN1cnNvclwiKSxwPXQoXCIuLi9kcmFnZWxlbWVudFwiKSxkPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLmFycmF5RWRpdG9yLGc9dChcIi4vZHJhd19hcnJvd19oZWFkXCIpO2Z1bmN0aW9uIHYodCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zW2VdfHx7fSxuPXMuZ2V0RnJvbUlkKHQsci54cmVmKSxpPXMuZ2V0RnJvbUlkKHQsci55cmVmKTtuJiZuLnNldFNjYWxlKCksaSYmaS5zZXRTY2FsZSgpLG0odCxyLGUsITEsbixpKX1mdW5jdGlvbiBtKHQsZSxyLGEscyx2KXt2YXIgbSx5LHg9dC5fZnVsbExheW91dCxiPXQuX2Z1bGxMYXlvdXQuX3NpemUsXz10Ll9jb250ZXh0LmVkaXRzO2E/KG09XCJhbm5vdGF0aW9uLVwiK2EseT1hK1wiLmFubm90YXRpb25zXCIpOihtPVwiYW5ub3RhdGlvblwiLHk9XCJhbm5vdGF0aW9uc1wiKTt2YXIgdz1kKHQubGF5b3V0LHksZSksaz13Lm1vZGlmeUJhc2UsQT13Lm1vZGlmeUl0ZW0sVD13LmdldFVwZGF0ZU9iajt4Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKFwiLlwiK20rJ1tkYXRhLWluZGV4PVwiJytyKydcIl0nKS5yZW1vdmUoKTt2YXIgTT1cImNsaXBcIit4Ll91aWQrXCJfYW5uXCIrcjtpZihlLl9pbnB1dCYmITEhPT1lLnZpc2libGUpe3ZhciBTPXt4Ont9LHk6e319LEU9K2UudGV4dGFuZ2xlfHwwLEM9eC5faW5mb2xheWVyLmFwcGVuZChcImdcIikuY2xhc3NlZChtLCEwKS5hdHRyKFwiZGF0YS1pbmRleFwiLFN0cmluZyhyKSkuc3R5bGUoXCJvcGFjaXR5XCIsZS5vcGFjaXR5KSxMPUMuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiYW5ub3RhdGlvbi10ZXh0LWdcIiwhMCksej1fW2Uuc2hvd2Fycm93P1wiYW5ub3RhdGlvblRhaWxcIjpcImFubm90YXRpb25Qb3NpdGlvblwiXSxPPWUuY2FwdHVyZWV2ZW50c3x8Xy5hbm5vdGF0aW9uVGV4dHx8eixJPUwuYXBwZW5kKFwiZ1wiKS5zdHlsZShcInBvaW50ZXItZXZlbnRzXCIsTz9cImFsbFwiOm51bGwpLmNhbGwoZixcInBvaW50ZXJcIikub24oXCJjbGlja1wiLGZ1bmN0aW9uKCl7dC5fZHJhZ2dpbmc9ITE7dmFyIGk9e2luZGV4OnIsYW5ub3RhdGlvbjplLl9pbnB1dCxmdWxsQW5ub3RhdGlvbjplLGV2ZW50Om4uZXZlbnR9O2EmJihpLnN1YnBsb3RJZD1hKSx0LmVtaXQoXCJwbG90bHlfY2xpY2thbm5vdGF0aW9uXCIsaSl9KTtlLmhvdmVydGV4dCYmSS5vbihcIm1vdXNlb3ZlclwiLGZ1bmN0aW9uKCl7dmFyIHI9ZS5ob3ZlcmxhYmVsLG49ci5mb250LGk9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dS5sb25lSG92ZXIoe3gwOmkubGVmdC1hLmxlZnQseDE6aS5yaWdodC1hLmxlZnQseTooaS50b3AraS5ib3R0b20pLzItYS50b3AsdGV4dDplLmhvdmVydGV4dCxjb2xvcjpyLmJnY29sb3IsYm9yZGVyQ29sb3I6ci5ib3JkZXJjb2xvcixmb250RmFtaWx5Om4uZmFtaWx5LGZvbnRTaXplOm4uc2l6ZSxmb250Q29sb3I6bi5jb2xvcn0se2NvbnRhaW5lcjp4Ll9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjp4Ll9wYXBlci5ub2RlKCksZ2Q6dH0pfSkub24oXCJtb3VzZW91dFwiLGZ1bmN0aW9uKCl7dS5sb25lVW5ob3Zlcih4Ll9ob3ZlcmxheWVyLm5vZGUoKSl9KTt2YXIgRD1lLmJvcmRlcndpZHRoLFA9ZS5ib3JkZXJwYWQsUj1EK1AsRj1JLmFwcGVuZChcInJlY3RcIikuYXR0cihcImNsYXNzXCIsXCJiZ1wiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLEQrXCJweFwiKS5jYWxsKGwuc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwobC5maWxsLGUuYmdjb2xvciksQj1lLndpZHRofHxlLmhlaWdodCxOPXguX3RvcGNsaXBzLnNlbGVjdEFsbChcIiNcIitNKS5kYXRhKEI/WzBdOltdKTtOLmVudGVyKCkuYXBwZW5kKFwiY2xpcFBhdGhcIikuY2xhc3NlZChcImFubmNsaXBcIiwhMCkuYXR0cihcImlkXCIsTSkuYXBwZW5kKFwicmVjdFwiKSxOLmV4aXQoKS5yZW1vdmUoKTt2YXIgaj1lLmZvbnQsVj14Lm1ldGE/by50ZW1wbGF0ZVN0cmluZyhlLnRleHQse21ldGE6eC5tZXRhfSk6ZS50ZXh0LFU9SS5hcHBlbmQoXCJ0ZXh0XCIpLmNsYXNzZWQoXCJhbm5vdGF0aW9uLXRleHRcIiwhMCkudGV4dChWKTtfLmFubm90YXRpb25UZXh0P1UuY2FsbChoLm1ha2VFZGl0YWJsZSx7ZGVsZWdhdGU6SSxnZDp0fSkuY2FsbChxKS5vbihcImVkaXRcIixmdW5jdGlvbihyKXtlLnRleHQ9cix0aGlzLmNhbGwocSksQShcInRleHRcIixyKSxzJiZzLmF1dG9yYW5nZSYmayhzLl9uYW1lK1wiLmF1dG9yYW5nZVwiLCEwKSx2JiZ2LmF1dG9yYW5nZSYmayh2Ll9uYW1lK1wiLmF1dG9yYW5nZVwiLCEwKSxpLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix0LFQoKSl9KTpVLmNhbGwocSl9ZWxzZSBuLnNlbGVjdEFsbChcIiNcIitNKS5yZW1vdmUoKTtmdW5jdGlvbiBxKHIpe3JldHVybiByLmNhbGwoYy5mb250LGopLmF0dHIoe1widGV4dC1hbmNob3JcIjp7bGVmdDpcInN0YXJ0XCIscmlnaHQ6XCJlbmRcIn1bZS5hbGlnbl18fFwibWlkZGxlXCJ9KSxoLmNvbnZlcnRUb1RzcGFucyhyLHQsSCkscn1mdW5jdGlvbiBIKCl7dmFyIHI9VS5zZWxlY3RBbGwoXCJhXCIpOzE9PT1yLnNpemUoKSYmci50ZXh0KCk9PT1VLnRleHQoKSYmSS5pbnNlcnQoXCJhXCIsXCI6Zmlyc3QtY2hpbGRcIikuYXR0cih7XCJ4bGluazp4bGluazpocmVmXCI6ci5hdHRyKFwieGxpbms6aHJlZlwiKSxcInhsaW5rOnhsaW5rOnNob3dcIjpyLmF0dHIoXCJ4bGluazpzaG93XCIpfSkuc3R5bGUoe2N1cnNvcjpcInBvaW50ZXJcIn0pLm5vZGUoKS5hcHBlbmRDaGlsZChGLm5vZGUoKSk7dmFyIG49SS5zZWxlY3QoXCIuYW5ub3RhdGlvbi10ZXh0LW1hdGgtZ3JvdXBcIiksdT0hbi5lbXB0eSgpLGQ9Yy5iQm94KCh1P246VSkubm9kZSgpKSxtPWQud2lkdGgseT1kLmhlaWdodCx3PWUud2lkdGh8fG0sTz1lLmhlaWdodHx8eSxQPU1hdGgucm91bmQodysyKlIpLGo9TWF0aC5yb3VuZChPKzIqUik7ZnVuY3Rpb24gVih0LGUpe3JldHVyblwiYXV0b1wiPT09ZSYmKGU9dDwxLzM/XCJsZWZ0XCI6dD4yLzM/XCJyaWdodFwiOlwiY2VudGVyXCIpLHtjZW50ZXI6MCxtaWRkbGU6MCxsZWZ0Oi41LGJvdHRvbTotLjUscmlnaHQ6LS41LHRvcDouNX1bZV19Zm9yKHZhciBxPSExLEg9W1wieFwiLFwieVwiXSxHPTA7RzxILmxlbmd0aDtHKyspe3ZhciBZLFcsWCxaLCQsSj1IW0ddLEs9ZVtKK1wicmVmXCJdfHxKLFE9ZVtcImFcIitKK1wicmVmXCJdLHR0PXt4OnMseTp2fVtKXSxldD0oRSsoXCJ4XCI9PT1KPzA6LTkwKSkqTWF0aC5QSS8xODAscnQ9UCpNYXRoLmNvcyhldCksbnQ9aipNYXRoLnNpbihldCksaXQ9TWF0aC5hYnMocnQpK01hdGguYWJzKG50KSxhdD1lW0orXCJhbmNob3JcIl0sb3Q9ZVtKK1wic2hpZnRcIl0qKFwieFwiPT09Sj8xOi0xKSxzdD1TW0pdO2lmKHR0KXt2YXIgbHQ9dHQucjJmcmFjdGlvbihlW0pdKTsobHQ8MHx8bHQ+MSkmJihRPT09Sz8oKGx0PXR0LnIyZnJhY3Rpb24oZVtcImFcIitKXSkpPDB8fGx0PjEpJiYocT0hMCk6cT0hMCksWT10dC5fb2Zmc2V0K3R0LnIycChlW0pdKSxaPS41fWVsc2VcInhcIj09PUo/KFg9ZVtKXSxZPWIubCtiLncqWCk6KFg9MS1lW0pdLFk9Yi50K2IuaCpYKSxaPWUuc2hvd2Fycm93Py41Olg7aWYoZS5zaG93YXJyb3cpe3N0LmhlYWQ9WTt2YXIgY3Q9ZVtcImFcIitKXTskPXJ0KlYoLjUsZS54YW5jaG9yKS1udCpWKC41LGUueWFuY2hvciksUT09PUs/KHN0LnRhaWw9dHQuX29mZnNldCt0dC5yMnAoY3QpLFc9JCk6KHN0LnRhaWw9WStjdCxXPSQrY3QpLHN0LnRleHQ9c3QudGFpbCskO3ZhciB1dD14W1wieFwiPT09Sj9cIndpZHRoXCI6XCJoZWlnaHRcIl07aWYoXCJwYXBlclwiPT09SyYmKHN0LmhlYWQ9by5jb25zdHJhaW4oc3QuaGVhZCwxLHV0LTEpKSxcInBpeGVsXCI9PT1RKXt2YXIgaHQ9LU1hdGgubWF4KHN0LnRhaWwtMyxzdC50ZXh0KSxmdD1NYXRoLm1pbihzdC50YWlsKzMsc3QudGV4dCktdXQ7aHQ+MD8oc3QudGFpbCs9aHQsc3QudGV4dCs9aHQpOmZ0PjAmJihzdC50YWlsLT1mdCxzdC50ZXh0LT1mdCl9c3QudGFpbCs9b3Qsc3QuaGVhZCs9b3R9ZWxzZSBXPSQ9aXQqVihaLGF0KSxzdC50ZXh0PVkrJDtzdC50ZXh0Kz1vdCwkKz1vdCxXKz1vdCxlW1wiX1wiK0orXCJwYWRwbHVzXCJdPWl0LzIrVyxlW1wiX1wiK0orXCJwYWRtaW51c1wiXT1pdC8yLVcsZVtcIl9cIitKK1wic2l6ZVwiXT1pdCxlW1wiX1wiK0orXCJzaGlmdFwiXT0kfWlmKHQuX2RyYWdnaW5nfHwhcSl7dmFyIHB0PTAsZHQ9MDtpZihcImxlZnRcIiE9PWUuYWxpZ24mJihwdD0ody1tKSooXCJjZW50ZXJcIj09PWUuYWxpZ24/LjU6MSkpLFwidG9wXCIhPT1lLnZhbGlnbiYmKGR0PShPLXkpKihcIm1pZGRsZVwiPT09ZS52YWxpZ24/LjU6MSkpLHUpbi5zZWxlY3QoXCJzdmdcIikuYXR0cih7eDpSK3B0LTEseTpSK2R0fSkuY2FsbChjLnNldENsaXBVcmwsQj9NOm51bGwsdCk7ZWxzZXt2YXIgZ3Q9UitkdC1kLnRvcCx2dD1SK3B0LWQubGVmdDtVLmNhbGwoaC5wb3NpdGlvblRleHQsdnQsZ3QpLmNhbGwoYy5zZXRDbGlwVXJsLEI/TTpudWxsLHQpfU4uc2VsZWN0KFwicmVjdFwiKS5jYWxsKGMuc2V0UmVjdCxSLFIsdyxPKSxGLmNhbGwoYy5zZXRSZWN0LEQvMixELzIsUC1ELGotRCksSS5jYWxsKGMuc2V0VHJhbnNsYXRlLE1hdGgucm91bmQoUy54LnRleHQtUC8yKSxNYXRoLnJvdW5kKFMueS50ZXh0LWovMikpLEwuYXR0cih7dHJhbnNmb3JtOlwicm90YXRlKFwiK0UrXCIsXCIrUy54LnRleHQrXCIsXCIrUy55LnRleHQrXCIpXCJ9KTt2YXIgbXQseXQ9ZnVuY3Rpb24ocixuKXtDLnNlbGVjdEFsbChcIi5hbm5vdGF0aW9uLWFycm93LWdcIikucmVtb3ZlKCk7dmFyIHU9Uy54LmhlYWQsaD1TLnkuaGVhZCxmPVMueC50YWlsK3IsZD1TLnkudGFpbCtuLG09Uy54LnRleHQrcix5PVMueS50ZXh0K24seD1vLnJvdGF0aW9uWFlNYXRyaXgoRSxtLHkpLHc9by5hcHBseTJEVHJhbnNmb3JtKHgpLE09by5hcHBseTJEVHJhbnNmb3JtMih4KSx6PStGLmF0dHIoXCJ3aWR0aFwiKSxPPStGLmF0dHIoXCJoZWlnaHRcIiksRD1tLS41KnosUD1EK3osUj15LS41Kk8sQj1SK08sTj1bW0QsUixELEJdLFtELEIsUCxCXSxbUCxCLFAsUl0sW1AsUixELFJdXS5tYXAoTSk7aWYoIU4ucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHReISFvLnNlZ21lbnRzSW50ZXJzZWN0KHUsaCx1KzFlNixoKzFlNixlWzBdLGVbMV0sZVsyXSxlWzNdKX0sITEpKXtOLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9by5zZWdtZW50c0ludGVyc2VjdChmLGQsdSxoLHRbMF0sdFsxXSx0WzJdLHRbM10pO2UmJihmPWUueCxkPWUueSl9KTt2YXIgaj1lLmFycm93d2lkdGgsVj1lLmFycm93Y29sb3IsVT1lLmFycm93c2lkZSxxPUMuYXBwZW5kKFwiZ1wiKS5zdHlsZSh7b3BhY2l0eTpsLm9wYWNpdHkoVil9KS5jbGFzc2VkKFwiYW5ub3RhdGlvbi1hcnJvdy1nXCIsITApLEg9cS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsXCJNXCIrZitcIixcIitkK1wiTFwiK3UrXCIsXCIraCkuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixqK1wicHhcIikuY2FsbChsLnN0cm9rZSxsLnJnYihWKSk7aWYoZyhILFUsZSksXy5hbm5vdGF0aW9uUG9zaXRpb24mJkgubm9kZSgpLnBhcmVudE5vZGUmJiFhKXt2YXIgRz11LFk9aDtpZihlLnN0YW5kb2ZmKXt2YXIgVz1NYXRoLnNxcnQoTWF0aC5wb3codS1mLDIpK01hdGgucG93KGgtZCwyKSk7Rys9ZS5zdGFuZG9mZiooZi11KS9XLFkrPWUuc3RhbmRvZmYqKGQtaCkvV312YXIgWCxaLCQ9cS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoXCJhbm5vdGF0aW9uLWFycm93XCIsITApLmNsYXNzZWQoXCJhbm5kcmFnXCIsITApLmNsYXNzZWQoXCJjdXJzb3ItbW92ZVwiLCEwKS5hdHRyKHtkOlwiTTMsM0gtM1YtM0gzWk0wLDBMXCIrKGYtRykrXCIsXCIrKGQtWSksdHJhbnNmb3JtOlwidHJhbnNsYXRlKFwiK0crXCIsXCIrWStcIilcIn0pLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsais2K1wicHhcIikuY2FsbChsLnN0cm9rZSxcInJnYmEoMCwwLDAsMClcIikuY2FsbChsLmZpbGwsXCJyZ2JhKDAsMCwwLDApXCIpO3AuaW5pdCh7ZWxlbWVudDokLm5vZGUoKSxnZDp0LHByZXBGbjpmdW5jdGlvbigpe3ZhciB0PWMuZ2V0VHJhbnNsYXRlKEkpO1g9dC54LFo9dC55LHMmJnMuYXV0b3JhbmdlJiZrKHMuX25hbWUrXCIuYXV0b3JhbmdlXCIsITApLHYmJnYuYXV0b3JhbmdlJiZrKHYuX25hbWUrXCIuYXV0b3JhbmdlXCIsITApfSxtb3ZlRm46ZnVuY3Rpb24odCxyKXt2YXIgbj13KFgsWiksaT1uWzBdK3QsYT1uWzFdK3I7SS5jYWxsKGMuc2V0VHJhbnNsYXRlLGksYSksQShcInhcIixzP3MucDJyKHMucjJwKGUueCkrdCk6ZS54K3QvYi53KSxBKFwieVwiLHY/di5wMnIodi5yMnAoZS55KStyKTplLnktci9iLmgpLGUuYXhyZWY9PT1lLnhyZWYmJkEoXCJheFwiLHMucDJyKHMucjJwKGUuYXgpK3QpKSxlLmF5cmVmPT09ZS55cmVmJiZBKFwiYXlcIix2LnAycih2LnIycChlLmF5KStyKSkscS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrdCtcIixcIityK1wiKVwiKSxMLmF0dHIoe3RyYW5zZm9ybTpcInJvdGF0ZShcIitFK1wiLFwiK2krXCIsXCIrYStcIilcIn0pfSxkb25lRm46ZnVuY3Rpb24oKXtpLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix0LFQoKSk7dmFyIGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5qcy1ub3Rlcy1ib3gtcGFuZWxcIik7ZSYmZS5yZWRyYXcoZS5zZWxlY3RlZE9iail9fSl9fX07aWYoZS5zaG93YXJyb3cmJnl0KDAsMCkseilwLmluaXQoe2VsZW1lbnQ6SS5ub2RlKCksZ2Q6dCxwcmVwRm46ZnVuY3Rpb24oKXttdD1MLmF0dHIoXCJ0cmFuc2Zvcm1cIil9LG1vdmVGbjpmdW5jdGlvbih0LHIpe3ZhciBuPVwicG9pbnRlclwiO2lmKGUuc2hvd2Fycm93KWUuYXhyZWY9PT1lLnhyZWY/QShcImF4XCIscy5wMnIocy5yMnAoZS5heCkrdCkpOkEoXCJheFwiLGUuYXgrdCksZS5heXJlZj09PWUueXJlZj9BKFwiYXlcIix2LnAycih2LnIycChlLmF5KStyKSk6QShcImF5XCIsZS5heStyKSx5dCh0LHIpO2Vsc2V7aWYoYSlyZXR1cm47dmFyIGksbztpZihzKWk9cy5wMnIocy5yMnAoZS54KSt0KTtlbHNle3ZhciBsPWUuX3hzaXplL2IudyxjPWUueCsoZS5feHNoaWZ0LWUueHNoaWZ0KS9iLnctbC8yO2k9cC5hbGlnbihjK3QvYi53LGwsMCwxLGUueGFuY2hvcil9aWYodilvPXYucDJyKHYucjJwKGUueSkrcik7ZWxzZXt2YXIgdT1lLl95c2l6ZS9iLmgsaD1lLnktKGUuX3lzaGlmdCtlLnlzaGlmdCkvYi5oLXUvMjtvPXAuYWxpZ24oaC1yL2IuaCx1LDAsMSxlLnlhbmNob3IpfUEoXCJ4XCIsaSksQShcInlcIixvKSxzJiZ2fHwobj1wLmdldEN1cnNvcihzPy41Omksdj8uNTpvLGUueGFuY2hvcixlLnlhbmNob3IpKX1MLmF0dHIoe3RyYW5zZm9ybTpcInRyYW5zbGF0ZShcIit0K1wiLFwiK3IrXCIpXCIrbXR9KSxmKEksbil9LGRvbmVGbjpmdW5jdGlvbigpe2YoSSksaS5jYWxsKFwiX2d1aVJlbGF5b3V0XCIsdCxUKCkpO3ZhciBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuanMtbm90ZXMtYm94LXBhbmVsXCIpO2UmJmUucmVkcmF3KGUuc2VsZWN0ZWRPYmopfX0pfWVsc2UgSS5yZW1vdmUoKX19ZS5leHBvcnRzPXtkcmF3OmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7ZS5faW5mb2xheWVyLnNlbGVjdEFsbChcIi5hbm5vdGF0aW9uXCIpLnJlbW92ZSgpO2Zvcih2YXIgcj0wO3I8ZS5hbm5vdGF0aW9ucy5sZW5ndGg7cisrKWUuYW5ub3RhdGlvbnNbcl0udmlzaWJsZSYmdih0LHIpO3JldHVybiBhLnByZXZpb3VzUHJvbWlzZXModCl9LGRyYXdPbmU6dixkcmF3UmF3Om19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvc2V0Y3Vyc29yXCI6NzIxLFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCI6NzI1LFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vLi4vcGxvdHMvcGxvdHNcIjo4MTAsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL2NvbG9yXCI6NTc4LFwiLi4vZHJhZ2VsZW1lbnRcIjo1OTYsXCIuLi9kcmF3aW5nXCI6NTk5LFwiLi4vZnhcIjo2MTcsXCIuL2RyYXdfYXJyb3dfaGVhZFwiOjU2OCxkMzoxNTV9XSw1Njg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vY29sb3JcIiksYT10KFwiLi9hcnJvd19wYXRoc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvLHMsbCxjLHU9dC5ub2RlKCksaD1hW3IuYXJyb3doZWFkfHwwXSxmPWFbci5zdGFydGFycm93aGVhZHx8MF0scD0oci5hcnJvd3dpZHRofHwxKSooci5hcnJvd3NpemV8fDEpLGQ9KHIuYXJyb3d3aWR0aHx8MSkqKHIuc3RhcnRhcnJvd3NpemV8fDEpLGc9ZS5pbmRleE9mKFwic3RhcnRcIik+PTAsdj1lLmluZGV4T2YoXCJlbmRcIik+PTAsbT1oLmJhY2tvZmYqcCtyLnN0YW5kb2ZmLHk9Zi5iYWNrb2ZmKmQrci5zdGFydHN0YW5kb2ZmO2lmKFwibGluZVwiPT09dS5ub2RlTmFtZSl7bz17eDordC5hdHRyKFwieDFcIikseTordC5hdHRyKFwieTFcIil9LHM9e3g6K3QuYXR0cihcIngyXCIpLHk6K3QuYXR0cihcInkyXCIpfTt2YXIgeD1vLngtcy54LGI9by55LXMueTtpZihjPShsPU1hdGguYXRhbjIoYix4KSkrTWF0aC5QSSxtJiZ5JiZtK3k+TWF0aC5zcXJ0KHgqeCtiKmIpKXJldHVybiB2b2lkIHooKTtpZihtKXtpZihtKm0+eCp4K2IqYilyZXR1cm4gdm9pZCB6KCk7dmFyIF89bSpNYXRoLmNvcyhsKSx3PW0qTWF0aC5zaW4obCk7cy54Kz1fLHMueSs9dyx0LmF0dHIoe3gyOnMueCx5MjpzLnl9KX1pZih5KXtpZih5Knk+eCp4K2IqYilyZXR1cm4gdm9pZCB6KCk7dmFyIGs9eSpNYXRoLmNvcyhsKSxBPXkqTWF0aC5zaW4obCk7by54LT1rLG8ueS09QSx0LmF0dHIoe3gxOm8ueCx5MTpvLnl9KX19ZWxzZSBpZihcInBhdGhcIj09PXUubm9kZU5hbWUpe3ZhciBUPXUuZ2V0VG90YWxMZW5ndGgoKSxNPVwiXCI7aWYoVDxtK3kpcmV0dXJuIHZvaWQgeigpO3ZhciBTPXUuZ2V0UG9pbnRBdExlbmd0aCgwKSxFPXUuZ2V0UG9pbnRBdExlbmd0aCguMSk7bD1NYXRoLmF0YW4yKFMueS1FLnksUy54LUUueCksbz11LmdldFBvaW50QXRMZW5ndGgoTWF0aC5taW4oeSxUKSksTT1cIjBweCxcIit5K1wicHgsXCI7dmFyIEM9dS5nZXRQb2ludEF0TGVuZ3RoKFQpLEw9dS5nZXRQb2ludEF0TGVuZ3RoKFQtLjEpO2M9TWF0aC5hdGFuMihDLnktTC55LEMueC1MLngpLHM9dS5nZXRQb2ludEF0TGVuZ3RoKE1hdGgubWF4KDAsVC1tKSksTSs9VC0oTT95K206bSkrXCJweCxcIitUK1wicHhcIix0LnN0eWxlKFwic3Ryb2tlLWRhc2hhcnJheVwiLE0pfWZ1bmN0aW9uIHooKXt0LnN0eWxlKFwic3Ryb2tlLWRhc2hhcnJheVwiLFwiMHB4LDEwMHB4XCIpfWZ1bmN0aW9uIE8oZSxhLG8scyl7ZS5wYXRoJiYoZS5ub1JvdGF0ZSYmKG89MCksbi5zZWxlY3QodS5wYXJlbnROb2RlKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoe2NsYXNzOnQuYXR0cihcImNsYXNzXCIpLGQ6ZS5wYXRoLHRyYW5zZm9ybTpcInRyYW5zbGF0ZShcIithLngrXCIsXCIrYS55K1wiKVwiKyhvP1wicm90YXRlKFwiKzE4MCpvL01hdGguUEkrXCIpXCI6XCJcIikrXCJzY2FsZShcIitzK1wiKVwifSkuc3R5bGUoe2ZpbGw6aS5yZ2Ioci5hcnJvd2NvbG9yKSxcInN0cm9rZS13aWR0aFwiOjB9KSl9ZyYmTyhmLG8sbCxkKSx2JiZPKGgscyxjLHApfX0se1wiLi4vY29sb3JcIjo1NzgsXCIuL2Fycm93X3BhdGhzXCI6NTYwLGQzOjE1NX1dLDU2OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2RyYXdcIiksaT10KFwiLi9jbGlja1wiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6XCJjb21wb25lbnRcIixuYW1lOlwiYW5ub3RhdGlvbnNcIixsYXlvdXRBdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIiksaW5jbHVkZUJhc2VQbG90OnQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzXCIpKFwiYW5ub3RhdGlvbnNcIiksY2FsY0F1dG9yYW5nZTp0KFwiLi9jYWxjX2F1dG9yYW5nZVwiKSxkcmF3Om4uZHJhdyxkcmF3T25lOm4uZHJhd09uZSxkcmF3UmF3Om4uZHJhd1JhdyxoYXNDbGlja1RvU2hvdzppLmhhc0NsaWNrVG9TaG93LG9uQ2xpY2s6aS5vbkNsaWNrLGNvbnZlcnRDb29yZHM6dChcIi4vY29udmVydF9jb29yZHNcIil9fSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzXCI6NzU5LFwiLi9hdHRyaWJ1dGVzXCI6NTYxLFwiLi9jYWxjX2F1dG9yYW5nZVwiOjU2MixcIi4vY2xpY2tcIjo1NjMsXCIuL2NvbnZlcnRfY29vcmRzXCI6NTY1LFwiLi9kZWZhdWx0c1wiOjU2NixcIi4vZHJhd1wiOjU2N31dLDU3MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGwsYT10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKS50ZW1wbGF0ZWRBcnJheTtlLmV4cG9ydHM9aShhKFwiYW5ub3RhdGlvblwiLHt2aXNpYmxlOm4udmlzaWJsZSx4Ont2YWxUeXBlOlwiYW55XCJ9LHk6e3ZhbFR5cGU6XCJhbnlcIn0sejp7dmFsVHlwZTpcImFueVwifSxheDp7dmFsVHlwZTpcIm51bWJlclwifSxheTp7dmFsVHlwZTpcIm51bWJlclwifSx4YW5jaG9yOm4ueGFuY2hvcix4c2hpZnQ6bi54c2hpZnQseWFuY2hvcjpuLnlhbmNob3IseXNoaWZ0Om4ueXNoaWZ0LHRleHQ6bi50ZXh0LHRleHRhbmdsZTpuLnRleHRhbmdsZSxmb250Om4uZm9udCx3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCxvcGFjaXR5Om4ub3BhY2l0eSxhbGlnbjpuLmFsaWduLHZhbGlnbjpuLnZhbGlnbixiZ2NvbG9yOm4uYmdjb2xvcixib3JkZXJjb2xvcjpuLmJvcmRlcmNvbG9yLGJvcmRlcnBhZDpuLmJvcmRlcnBhZCxib3JkZXJ3aWR0aDpuLmJvcmRlcndpZHRoLHNob3dhcnJvdzpuLnNob3dhcnJvdyxhcnJvd2NvbG9yOm4uYXJyb3djb2xvcixhcnJvd2hlYWQ6bi5hcnJvd2hlYWQsc3RhcnRhcnJvd2hlYWQ6bi5zdGFydGFycm93aGVhZCxhcnJvd3NpZGU6bi5hcnJvd3NpZGUsYXJyb3dzaXplOm4uYXJyb3dzaXplLHN0YXJ0YXJyb3dzaXplOm4uc3RhcnRhcnJvd3NpemUsYXJyb3d3aWR0aDpuLmFycm93d2lkdGgsc3RhbmRvZmY6bi5zdGFuZG9mZixzdGFydHN0YW5kb2ZmOm4uc3RhcnRzdGFuZG9mZixob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJsYWJlbDpuLmhvdmVybGFiZWwsY2FwdHVyZWV2ZW50czpuLmNhcHR1cmVldmVudHN9KSxcImNhbGNcIixcImZyb20tcm9vdFwiKX0se1wiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzXCI6NTYxfV0sNTcxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKTtmdW5jdGlvbiBhKHQsZSl7dmFyIHI9ZS5mdWxsU2NlbmVMYXlvdXQuZG9tYWluLGE9ZS5mdWxsTGF5b3V0Ll9zaXplLG89e3BkYXRhOm51bGwsdHlwZTpcImxpbmVhclwiLGF1dG9yYW5nZTohMSxyYW5nZTpbLTEvMCwxLzBdfTt0Ll94YT17fSxuLmV4dGVuZEZsYXQodC5feGEsbyksaS5zZXRDb252ZXJ0KHQuX3hhKSx0Ll94YS5fb2Zmc2V0PWEubCtyLnhbMF0qYS53LHQuX3hhLmwycD1mdW5jdGlvbigpe3JldHVybi41KigxK3QuX3BkYXRhWzBdL3QuX3BkYXRhWzNdKSphLncqKHIueFsxXS1yLnhbMF0pfSx0Ll95YT17fSxuLmV4dGVuZEZsYXQodC5feWEsbyksaS5zZXRDb252ZXJ0KHQuX3lhKSx0Ll95YS5fb2Zmc2V0PWEudCsoMS1yLnlbMV0pKmEuaCx0Ll95YS5sMnA9ZnVuY3Rpb24oKXtyZXR1cm4uNSooMS10Ll9wZGF0YVsxXS90Ll9wZGF0YVszXSkqYS5oKihyLnlbMV0tci55WzBdKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmZ1bGxTY2VuZUxheW91dC5hbm5vdGF0aW9ucyxyPTA7cjxlLmxlbmd0aDtyKyspYShlW3JdLHQpO3QuZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdEFsbChcIi5hbm5vdGF0aW9uLVwiK3QuaWQpLnJlbW92ZSgpfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDl9XSw1NzI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0c1wiKSxvPXQoXCIuLi9hbm5vdGF0aW9ucy9jb21tb25fZGVmYXVsdHNcIikscz10KFwiLi9hdHRyaWJ1dGVzXCIpO2Z1bmN0aW9uIGwodCxlLHIsYSl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfWZ1bmN0aW9uIGModCl7dmFyIG49dCtcImF4aXNcIixhPXtfZnVsbExheW91dDp7fX07cmV0dXJuIGEuX2Z1bGxMYXlvdXRbbl09cltuXSxpLmNvZXJjZVBvc2l0aW9uKGUsYSxsLHQsdCwuNSl9bChcInZpc2libGVcIikmJihvKHQsZSxhLmZ1bGxMYXlvdXQsbCksYyhcInhcIiksYyhcInlcIiksYyhcInpcIiksbi5ub25lT3JBbGwodCxlLFtcInhcIixcInlcIixcInpcIl0pLGUueHJlZj1cInhcIixlLnlyZWY9XCJ5XCIsZS56cmVmPVwielwiLGwoXCJ4YW5jaG9yXCIpLGwoXCJ5YW5jaG9yXCIpLGwoXCJ4c2hpZnRcIiksbChcInlzaGlmdFwiKSxlLnNob3dhcnJvdyYmKGUuYXhyZWY9XCJwaXhlbFwiLGUuYXlyZWY9XCJwaXhlbFwiLGwoXCJheFwiLC0xMCksbChcImF5XCIsLTMwKSxuLm5vbmVPckFsbCh0LGUsW1wiYXhcIixcImF5XCJdKSkpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7YSh0LGUse25hbWU6XCJhbm5vdGF0aW9uc1wiLGhhbmRsZUl0ZW1EZWZhdWx0czpsLGZ1bGxMYXlvdXQ6ci5mdWxsTGF5b3V0fSl9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIjo3NDUsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL2Fubm90YXRpb25zL2NvbW1vbl9kZWZhdWx0c1wiOjU2NCxcIi4vYXR0cmlidXRlc1wiOjU3MH1dLDU3MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9hbm5vdGF0aW9ucy9kcmF3XCIpLmRyYXdSYXcsaT10KFwiLi4vLi4vcGxvdHMvZ2wzZC9wcm9qZWN0XCIpLGE9W1wieFwiLFwieVwiLFwielwiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuZnVsbFNjZW5lTGF5b3V0LHI9dC5kYXRhU2NhbGUsbz1lLmFubm90YXRpb25zLHM9MDtzPG8ubGVuZ3RoO3MrKyl7Zm9yKHZhciBsPW9bc10sYz0hMSx1PTA7dTwzO3UrKyl7dmFyIGg9YVt1XSxmPWxbaF0scD1lW2grXCJheGlzXCJdLnIyZnJhY3Rpb24oZik7aWYocDwwfHxwPjEpe2M9ITA7YnJlYWt9fWM/dC5mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0KFwiLmFubm90YXRpb24tXCIrdC5pZCsnW2RhdGEtaW5kZXg9XCInK3MrJ1wiXScpLnJlbW92ZSgpOihsLl9wZGF0YT1pKHQuZ2xwbG90LmNhbWVyYVBhcmFtcyxbZS54YXhpcy5yMmwobC54KSpyWzBdLGUueWF4aXMucjJsKGwueSkqclsxXSxlLnpheGlzLnIybChsLnopKnJbMl1dKSxuKHQuZ3JhcGhEaXYsbCxzLHQuaWQsbC5feGEsbC5feWEpKX19fSx7XCIuLi8uLi9wbG90cy9nbDNkL3Byb2plY3RcIjo3OTgsXCIuLi9hbm5vdGF0aW9ucy9kcmF3XCI6NTY3fV0sNTc0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uLy4uL2xpYlwiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6XCJjb21wb25lbnRcIixuYW1lOlwiYW5ub3RhdGlvbnMzZFwiLHNjaGVtYTp7c3VicGxvdHM6e3NjZW5lOnthbm5vdGF0aW9uczp0KFwiLi9hdHRyaWJ1dGVzXCIpfX19LGxheW91dEF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxoYW5kbGVEZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxpbmNsdWRlQmFzZVBsb3Q6ZnVuY3Rpb24odCxlKXt2YXIgcj1uLnN1YnBsb3RzUmVnaXN0cnkuZ2wzZDtpZighcilyZXR1cm47Zm9yKHZhciBhPXIuYXR0clJlZ2V4LG89T2JqZWN0LmtleXModCkscz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdO2EudGVzdChsKSYmKHRbbF0uYW5ub3RhdGlvbnN8fFtdKS5sZW5ndGgmJihpLnB1c2hVbmlxdWUoZS5fYmFzZVBsb3RNb2R1bGVzLHIpLGkucHVzaFVuaXF1ZShlLl9zdWJwbG90cy5nbDNkLGwpKX19LGNvbnZlcnQ6dChcIi4vY29udmVydFwiKSxkcmF3OnQoXCIuL2RyYXdcIil9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vYXR0cmlidXRlc1wiOjU3MCxcIi4vY29udmVydFwiOjU3MSxcIi4vZGVmYXVsdHNcIjo1NzIsXCIuL2RyYXdcIjo1NzN9XSw1NzU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIndvcmxkLWNhbGVuZGFycy9kaXN0L21haW5cIiksdChcIndvcmxkLWNhbGVuZGFycy9kaXN0L3BsdXNcIiksdChcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9jaGluZXNlXCIpLHQoXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvY29wdGljXCIpLHQoXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvZGlzY3dvcmxkXCIpLHQoXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvZXRoaW9waWFuXCIpLHQoXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvaGVicmV3XCIpLHQoXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvaXNsYW1pY1wiKSx0KFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2p1bGlhblwiKSx0KFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL21heWFuXCIpLHQoXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmFuYWtzaGFoaVwiKSx0KFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL25lcGFsaVwiKSx0KFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3BlcnNpYW5cIiksdChcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy90YWl3YW5cIiksdChcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy90aGFpXCIpLHQoXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdW1tYWxxdXJhXCIpfSx7XCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvY2hpbmVzZVwiOjU0MixcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9jb3B0aWNcIjo1NDMsXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvZGlzY3dvcmxkXCI6NTQ0LFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2V0aGlvcGlhblwiOjU0NSxcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9oZWJyZXdcIjo1NDYsXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvaXNsYW1pY1wiOjU0NyxcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9qdWxpYW5cIjo1NDgsXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbWF5YW5cIjo1NDksXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmFuYWtzaGFoaVwiOjU1MCxcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9uZXBhbGlcIjo1NTEsXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvcGVyc2lhblwiOjU1MixcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy90YWl3YW5cIjo1NTMsXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdGhhaVwiOjU1NCxcIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy91bW1hbHF1cmFcIjo1NTUsXCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9tYWluXCI6NTU2LFwid29ybGQtY2FsZW5kYXJzL2Rpc3QvcGx1c1wiOjU1N31dLDU3NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2NhbGVuZGFyc1wiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKSxvPWEuRVBPQ0hKRCxzPWEuT05FREFZLGw9e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOk9iamVjdC5rZXlzKG4uY2FsZW5kYXJzKSxlZGl0VHlwZTpcImNhbGNcIixkZmx0OlwiZ3JlZ29yaWFuXCJ9LGM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9e307cmV0dXJuIGFbcl09bCxpLmNvZXJjZSh0LGUsYSxyLG4pfSx1PVwiIyNcIixoPXtkOnswOlwiZGRcIixcIi1cIjpcImRcIn0sZTp7MDpcImRcIixcIi1cIjpcImRcIn0sYTp7MDpcIkRcIixcIi1cIjpcIkRcIn0sQTp7MDpcIkREXCIsXCItXCI6XCJERFwifSxqOnswOlwib29cIixcIi1cIjpcIm9cIn0sVzp7MDpcInd3XCIsXCItXCI6XCJ3XCJ9LG06ezA6XCJtbVwiLFwiLVwiOlwibVwifSxiOnswOlwiTVwiLFwiLVwiOlwiTVwifSxCOnswOlwiTU1cIixcIi1cIjpcIk1NXCJ9LHk6ezA6XCJ5eVwiLFwiLVwiOlwieXlcIn0sWTp7MDpcInl5eXlcIixcIi1cIjpcInl5eXlcIn0sVTp1LHc6dSxjOnswOlwiRCBNIGQgJVggeXl5eVwiLFwiLVwiOlwiRCBNIGQgJVggeXl5eVwifSx4OnswOlwibW0vZGQveXl5eVwiLFwiLVwiOlwibW0vZGQveXl5eVwifX07dmFyIGY9e307ZnVuY3Rpb24gcCh0KXt2YXIgZT1mW3RdO3JldHVybiBlfHwoZT1mW3RdPW4uaW5zdGFuY2UodCkpfWZ1bmN0aW9uIGQodCl7cmV0dXJuIGkuZXh0ZW5kRmxhdCh7fSxsLHtkZXNjcmlwdGlvbjp0fSl9ZnVuY3Rpb24gZyh0KXtyZXR1cm5cIlNldHMgdGhlIGNhbGVuZGFyIHN5c3RlbSB0byB1c2Ugd2l0aCBgXCIrdCtcImAgZGF0ZSBkYXRhLlwifXZhciB2PXt4Y2FsZW5kYXI6ZChnKFwieFwiKSl9LG09aS5leHRlbmRGbGF0KHt9LHYse3ljYWxlbmRhcjpkKGcoXCJ5XCIpKX0pLHk9aS5leHRlbmRGbGF0KHt9LG0se3pjYWxlbmRhcjpkKGcoXCJ6XCIpKX0pLHg9ZChbXCJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIGZvciBgcmFuZ2VgIGFuZCBgdGljazBgXCIsXCJpZiB0aGlzIGlzIGEgZGF0ZSBheGlzLiBUaGlzIGRvZXMgbm90IHNldCB0aGUgY2FsZW5kYXIgZm9yXCIsXCJpbnRlcnByZXRpbmcgZGF0YSBvbiB0aGlzIGF4aXMsIHRoYXQncyBzcGVjaWZpZWQgaW4gdGhlIHRyYWNlXCIsXCJvciB2aWEgdGhlIGdsb2JhbCBgbGF5b3V0LmNhbGVuZGFyYFwiXS5qb2luKFwiIFwiKSk7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwiY29tcG9uZW50XCIsbmFtZTpcImNhbGVuZGFyc1wiLHNjaGVtYTp7dHJhY2VzOntzY2F0dGVyOm0sYmFyOm0sYm94Om0saGVhdG1hcDptLGNvbnRvdXI6bSxoaXN0b2dyYW06bSxoaXN0b2dyYW0yZDptLGhpc3RvZ3JhbTJkY29udG91cjptLHNjYXR0ZXIzZDp5LHN1cmZhY2U6eSxtZXNoM2Q6eSxzY2F0dGVyZ2w6bSxvaGxjOnYsY2FuZGxlc3RpY2s6dn0sbGF5b3V0OntjYWxlbmRhcjpkKFtcIlNldHMgdGhlIGRlZmF1bHQgY2FsZW5kYXIgc3lzdGVtIHRvIHVzZSBmb3IgaW50ZXJwcmV0aW5nIGFuZFwiLFwiZGlzcGxheWluZyBkYXRlcyB0aHJvdWdob3V0IHRoZSBwbG90LlwiXS5qb2luKFwiIFwiKSl9LHN1YnBsb3RzOnt4YXhpczp7Y2FsZW5kYXI6eH0seWF4aXM6e2NhbGVuZGFyOnh9LHNjZW5lOnt4YXhpczp7Y2FsZW5kYXI6eH0seWF4aXM6e2NhbGVuZGFyOnh9LHpheGlzOntjYWxlbmRhcjp4fX0scG9sYXI6e3JhZGlhbGF4aXM6e2NhbGVuZGFyOnh9fX0sdHJhbnNmb3Jtczp7ZmlsdGVyOnt2YWx1ZWNhbGVuZGFyOmQoW1wiU2V0cyB0aGUgY2FsZW5kYXIgc3lzdGVtIHRvIHVzZSBmb3IgYHZhbHVlYCwgaWYgaXQgaXMgYSBkYXRlLlwiXS5qb2luKFwiIFwiKSksdGFyZ2V0Y2FsZW5kYXI6ZChbXCJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIGZvciBgdGFyZ2V0YCwgaWYgaXQgaXMgYW5cIixcImFycmF5IG9mIGRhdGVzLiBJZiBgdGFyZ2V0YCBpcyBhIHN0cmluZyAoZWcgKngqKSB3ZSB1c2UgdGhlXCIsXCJjb3JyZXNwb25kaW5nIHRyYWNlIGF0dHJpYnV0ZSAoZWcgYHhjYWxlbmRhcmApIGlmIGl0IGV4aXN0cyxcIixcImV2ZW4gaWYgYHRhcmdldGNhbGVuZGFyYCBpcyBwcm92aWRlZC5cIl0uam9pbihcIiBcIikpfX19LGxheW91dEF0dHJpYnV0ZXM6bCxoYW5kbGVEZWZhdWx0czpjLGhhbmRsZVRyYWNlRGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspYyh0LGUscltpXStcImNhbGVuZGFyXCIsbi5jYWxlbmRhcil9LENBTk9OSUNBTF9TVU5EQVk6e2NoaW5lc2U6XCIyMDAwLTAxLTAyXCIsY29wdGljOlwiMjAwMC0wMS0wM1wiLGRpc2N3b3JsZDpcIjIwMDAtMDEtMDNcIixldGhpb3BpYW46XCIyMDAwLTAxLTA1XCIsaGVicmV3OlwiNTAwMC0wMS0wMVwiLGlzbGFtaWM6XCIxMDAwLTAxLTAyXCIsanVsaWFuOlwiMjAwMC0wMS0wM1wiLG1heWFuOlwiNTAwMC0wMS0wMVwiLG5hbmFrc2hhaGk6XCIxMDAwLTAxLTA1XCIsbmVwYWxpOlwiMjAwMC0wMS0wNVwiLHBlcnNpYW46XCIxMDAwLTAxLTAxXCIsamFsYWxpOlwiMTAwMC0wMS0wMVwiLHRhaXdhbjpcIjEwMDAtMDEtMDRcIix0aGFpOlwiMjAwMC0wMS0wNFwiLHVtbWFscXVyYTpcIjE0MDAtMDEtMDZcIn0sQ0FOT05JQ0FMX1RJQ0s6e2NoaW5lc2U6XCIyMDAwLTAxLTAxXCIsY29wdGljOlwiMjAwMC0wMS0wMVwiLGRpc2N3b3JsZDpcIjIwMDAtMDEtMDFcIixldGhpb3BpYW46XCIyMDAwLTAxLTAxXCIsaGVicmV3OlwiNTAwMC0wMS0wMVwiLGlzbGFtaWM6XCIxMDAwLTAxLTAxXCIsanVsaWFuOlwiMjAwMC0wMS0wMVwiLG1heWFuOlwiNTAwMC0wMS0wMVwiLG5hbmFrc2hhaGk6XCIxMDAwLTAxLTAxXCIsbmVwYWxpOlwiMjAwMC0wMS0wMVwiLHBlcnNpYW46XCIxMDAwLTAxLTAxXCIsamFsYWxpOlwiMTAwMC0wMS0wMVwiLHRhaXdhbjpcIjEwMDAtMDEtMDFcIix0aGFpOlwiMjAwMC0wMS0wMVwiLHVtbWFscXVyYTpcIjE0MDAtMDEtMDFcIn0sREZMVFJBTkdFOntjaGluZXNlOltcIjIwMDAtMDEtMDFcIixcIjIwMDEtMDEtMDFcIl0sY29wdGljOltcIjE3MDAtMDEtMDFcIixcIjE3MDEtMDEtMDFcIl0sZGlzY3dvcmxkOltcIjE4MDAtMDEtMDFcIixcIjE4MDEtMDEtMDFcIl0sZXRoaW9waWFuOltcIjIwMDAtMDEtMDFcIixcIjIwMDEtMDEtMDFcIl0saGVicmV3OltcIjU3MDAtMDEtMDFcIixcIjU3MDEtMDEtMDFcIl0saXNsYW1pYzpbXCIxNDAwLTAxLTAxXCIsXCIxNDAxLTAxLTAxXCJdLGp1bGlhbjpbXCIyMDAwLTAxLTAxXCIsXCIyMDAxLTAxLTAxXCJdLG1heWFuOltcIjUyMDAtMDEtMDFcIixcIjUyMDEtMDEtMDFcIl0sbmFuYWtzaGFoaTpbXCIwNTAwLTAxLTAxXCIsXCIwNTAxLTAxLTAxXCJdLG5lcGFsaTpbXCIyMDAwLTAxLTAxXCIsXCIyMDAxLTAxLTAxXCJdLHBlcnNpYW46W1wiMTQwMC0wMS0wMVwiLFwiMTQwMS0wMS0wMVwiXSxqYWxhbGk6W1wiMTQwMC0wMS0wMVwiLFwiMTQwMS0wMS0wMVwiXSx0YWl3YW46W1wiMDEwMC0wMS0wMVwiLFwiMDEwMS0wMS0wMVwiXSx0aGFpOltcIjI1MDAtMDEtMDFcIixcIjI1MDEtMDEtMDFcIl0sdW1tYWxxdXJhOltcIjE0MDAtMDEtMDFcIixcIjE0MDEtMDEtMDFcIl19LGdldENhbDpwLHdvcmxkQ2FsRm10OmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saSxhLGwsYyxmPU1hdGguZmxvb3IoKGUrLjA1KS9zKStvLGQ9cChyKS5mcm9tSkQoZiksZz0wOy0xIT09KGc9dC5pbmRleE9mKFwiJVwiLGcpKTspXCIwXCI9PT0obj10LmNoYXJBdChnKzEpKXx8XCItXCI9PT1ufHxcIl9cIj09PW4/KGE9MyxpPXQuY2hhckF0KGcrMiksXCJfXCI9PT1uJiYobj1cIi1cIikpOihpPW4sbj1cIjBcIixhPTIpLChsPWhbaV0pPyhjPWw9PT11P3U6ZC5mb3JtYXREYXRlKGxbbl0pLHQ9dC5zdWJzdHIoMCxnKStjK3Quc3Vic3RyKGcrYSksZys9Yy5sZW5ndGgpOmcrPWE7cmV0dXJuIHR9fX0se1wiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4vY2FsZW5kYXJzXCI6NTc1fV0sNTc3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ci5kZWZhdWx0cz1bXCIjMWY3N2I0XCIsXCIjZmY3ZjBlXCIsXCIjMmNhMDJjXCIsXCIjZDYyNzI4XCIsXCIjOTQ2N2JkXCIsXCIjOGM1NjRiXCIsXCIjZTM3N2MyXCIsXCIjN2Y3ZjdmXCIsXCIjYmNiZDIyXCIsXCIjMTdiZWNmXCJdLHIuZGVmYXVsdExpbmU9XCIjNDQ0XCIsci5saWdodExpbmU9XCIjZWVlXCIsci5iYWNrZ3JvdW5kPVwiI2ZmZlwiLHIuYm9yZGVyTGluZT1cIiNCRUM4RDlcIixyLmxpZ2h0RnJhY3Rpb249MWUzLzExfSx7fV0sNTc4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInRpbnljb2xvcjJcIiksaT10KFwiZmFzdC1pc251bWVyaWNcIiksYT1lLmV4cG9ydHM9e30sbz10KFwiLi9hdHRyaWJ1dGVzXCIpO2EuZGVmYXVsdHM9by5kZWZhdWx0czt2YXIgcz1hLmRlZmF1bHRMaW5lPW8uZGVmYXVsdExpbmU7YS5saWdodExpbmU9by5saWdodExpbmU7dmFyIGw9YS5iYWNrZ3JvdW5kPW8uYmFja2dyb3VuZDtmdW5jdGlvbiBjKHQpe2lmKGkodCl8fFwic3RyaW5nXCIhPXR5cGVvZiB0KXJldHVybiB0O3ZhciBlPXQudHJpbSgpO2lmKFwicmdiXCIhPT1lLnN1YnN0cigwLDMpKXJldHVybiB0O3ZhciByPWUubWF0Y2goL15yZ2JhP1xccypcXCgoW14oKV0qKVxcKSQvKTtpZighcilyZXR1cm4gdDt2YXIgbj1yWzFdLnRyaW0oKS5zcGxpdCgvXFxzKltcXHMsXVxccyovKSxhPVwiYVwiPT09ZS5jaGFyQXQoMykmJjQ9PT1uLmxlbmd0aDtpZighYSYmMyE9PW4ubGVuZ3RoKXJldHVybiB0O2Zvcih2YXIgbz0wO288bi5sZW5ndGg7bysrKXtpZighbltvXS5sZW5ndGgpcmV0dXJuIHQ7aWYobltvXT1OdW1iZXIobltvXSksIShuW29dPj0wKSlyZXR1cm4gdDtpZigzPT09byluW29dPjEmJihuW29dPTEpO2Vsc2UgaWYobltvXT49MSlyZXR1cm4gdH12YXIgcz1NYXRoLnJvdW5kKDI1NSpuWzBdKStcIiwgXCIrTWF0aC5yb3VuZCgyNTUqblsxXSkrXCIsIFwiK01hdGgucm91bmQoMjU1Km5bMl0pO3JldHVybiBhP1wicmdiYShcIitzK1wiLCBcIituWzNdK1wiKVwiOlwicmdiKFwiK3MrXCIpXCJ9YS50aW55UkdCPWZ1bmN0aW9uKHQpe3ZhciBlPXQudG9SZ2IoKTtyZXR1cm5cInJnYihcIitNYXRoLnJvdW5kKGUucikrXCIsIFwiK01hdGgucm91bmQoZS5nKStcIiwgXCIrTWF0aC5yb3VuZChlLmIpK1wiKVwifSxhLnJnYj1mdW5jdGlvbih0KXtyZXR1cm4gYS50aW55UkdCKG4odCkpfSxhLm9wYWNpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/bih0KS5nZXRBbHBoYSgpOjB9LGEuYWRkT3BhY2l0eT1mdW5jdGlvbih0LGUpe3ZhciByPW4odCkudG9SZ2IoKTtyZXR1cm5cInJnYmEoXCIrTWF0aC5yb3VuZChyLnIpK1wiLCBcIitNYXRoLnJvdW5kKHIuZykrXCIsIFwiK01hdGgucm91bmQoci5iKStcIiwgXCIrZStcIilcIn0sYS5jb21iaW5lPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0KS50b1JnYigpO2lmKDE9PT1yLmEpcmV0dXJuIG4odCkudG9SZ2JTdHJpbmcoKTt2YXIgaT1uKGV8fGwpLnRvUmdiKCksYT0xPT09aS5hP2k6e3I6MjU1KigxLWkuYSkraS5yKmkuYSxnOjI1NSooMS1pLmEpK2kuZyppLmEsYjoyNTUqKDEtaS5hKStpLmIqaS5hfSxvPXtyOmEuciooMS1yLmEpK3IucipyLmEsZzphLmcqKDEtci5hKStyLmcqci5hLGI6YS5iKigxLXIuYSkrci5iKnIuYX07cmV0dXJuIG4obykudG9SZ2JTdHJpbmcoKX0sYS5jb250cmFzdD1mdW5jdGlvbih0LGUscil7dmFyIGk9bih0KTtyZXR1cm4gMSE9PWkuZ2V0QWxwaGEoKSYmKGk9bihhLmNvbWJpbmUodCxsKSkpLChpLmlzRGFyaygpP2U/aS5saWdodGVuKGUpOmw6cj9pLmRhcmtlbihyKTpzKS50b1N0cmluZygpfSxhLnN0cm9rZT1mdW5jdGlvbih0LGUpe3ZhciByPW4oZSk7dC5zdHlsZSh7c3Ryb2tlOmEudGlueVJHQihyKSxcInN0cm9rZS1vcGFjaXR5XCI6ci5nZXRBbHBoYSgpfSl9LGEuZmlsbD1mdW5jdGlvbih0LGUpe3ZhciByPW4oZSk7dC5zdHlsZSh7ZmlsbDphLnRpbnlSR0IociksXCJmaWxsLW9wYWNpdHlcIjpyLmdldEFscGhhKCl9KX0sYS5jbGVhbj1mdW5jdGlvbih0KXtpZih0JiZcIm9iamVjdFwiPT10eXBlb2YgdCl7dmFyIGUscixuLGksbz1PYmplY3Qua2V5cyh0KTtmb3IoZT0wO2U8by5sZW5ndGg7ZSsrKWlmKGk9dFtuPW9bZV1dLFwiY29sb3JcIj09PW4uc3Vic3RyKG4ubGVuZ3RoLTUpKWlmKEFycmF5LmlzQXJyYXkoaSkpZm9yKHI9MDtyPGkubGVuZ3RoO3IrKylpW3JdPWMoaVtyXSk7ZWxzZSB0W25dPWMoaSk7ZWxzZSBpZihcImNvbG9yc2NhbGVcIj09PW4uc3Vic3RyKG4ubGVuZ3RoLTEwKSYmQXJyYXkuaXNBcnJheShpKSlmb3Iocj0wO3I8aS5sZW5ndGg7cisrKUFycmF5LmlzQXJyYXkoaVtyXSkmJihpW3JdWzFdPWMoaVtyXVsxXSkpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShpKSl7dmFyIHM9aVswXTtpZighQXJyYXkuaXNBcnJheShzKSYmcyYmXCJvYmplY3RcIj09dHlwZW9mIHMpZm9yKHI9MDtyPGkubGVuZ3RoO3IrKylhLmNsZWFuKGlbcl0pfWVsc2UgaSYmXCJvYmplY3RcIj09dHlwZW9mIGkmJmEuY2xlYW4oaSl9fX0se1wiLi9hdHRyaWJ1dGVzXCI6NTc3LFwiZmFzdC1pc251bWVyaWNcIjoyMjIsdGlueWNvbG9yMjo1MjJ9XSw1Nzk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsbz10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbDtlLmV4cG9ydHM9byh7dGhpY2tuZXNzbW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiZnJhY3Rpb25cIixcInBpeGVsc1wiXSxkZmx0OlwicGl4ZWxzXCJ9LHRoaWNrbmVzczp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MzB9LGxlbm1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImZyYWN0aW9uXCIsXCJwaXhlbHNcIl0sZGZsdDpcImZyYWN0aW9uXCJ9LGxlbjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MX0seDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MS4wMixtaW46LTIsbWF4OjN9LHhhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImxlZnRcIixcImNlbnRlclwiLFwicmlnaHRcIl0sZGZsdDpcImxlZnRcIn0seHBhZDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MTB9LHk6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0Oi41LG1pbjotMixtYXg6M30seWFuY2hvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1widG9wXCIsXCJtaWRkbGVcIixcImJvdHRvbVwiXSxkZmx0OlwibWlkZGxlXCJ9LHlwYWQ6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjEwfSxvdXRsaW5lY29sb3I6bi5saW5lY29sb3Isb3V0bGluZXdpZHRoOm4ubGluZXdpZHRoLGJvcmRlcmNvbG9yOm4ubGluZWNvbG9yLGJvcmRlcndpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDowfSxiZ2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OlwicmdiYSgwLDAsMCwwKVwifSx0aWNrbW9kZTpuLnRpY2ttb2RlLG50aWNrczpuLm50aWNrcyx0aWNrMDpuLnRpY2swLGR0aWNrOm4uZHRpY2ssdGlja3ZhbHM6bi50aWNrdmFscyx0aWNrdGV4dDpuLnRpY2t0ZXh0LHRpY2tzOmEoe30sbi50aWNrcyx7ZGZsdDpcIlwifSksdGlja2xlbjpuLnRpY2tsZW4sdGlja3dpZHRoOm4udGlja3dpZHRoLHRpY2tjb2xvcjpuLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczpuLnNob3d0aWNrbGFiZWxzLHRpY2tmb250Omkoe30pLHRpY2thbmdsZTpuLnRpY2thbmdsZSx0aWNrZm9ybWF0Om4udGlja2Zvcm1hdCx0aWNrZm9ybWF0c3RvcHM6bi50aWNrZm9ybWF0c3RvcHMsdGlja3ByZWZpeDpuLnRpY2twcmVmaXgsc2hvd3RpY2twcmVmaXg6bi5zaG93dGlja3ByZWZpeCx0aWNrc3VmZml4Om4udGlja3N1ZmZpeCxzaG93dGlja3N1ZmZpeDpuLnNob3d0aWNrc3VmZml4LHNlcGFyYXRldGhvdXNhbmRzOm4uc2VwYXJhdGV0aG91c2FuZHMsZXhwb25lbnRmb3JtYXQ6bi5leHBvbmVudGZvcm1hdCxzaG93ZXhwb25lbnQ6bi5zaG93ZXhwb25lbnQsdGl0bGU6e3RleHQ6e3ZhbFR5cGU6XCJzdHJpbmdcIn0sZm9udDppKHt9KSxzaWRlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJyaWdodFwiLFwidG9wXCIsXCJib3R0b21cIl0sZGZsdDpcInRvcFwifX0sX2RlcHJlY2F0ZWQ6e3RpdGxlOnt2YWxUeXBlOlwic3RyaW5nXCJ9LHRpdGxlZm9udDppKHt9KSx0aXRsZXNpZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInJpZ2h0XCIsXCJ0b3BcIixcImJvdHRvbVwiXSxkZmx0OlwidG9wXCJ9fX0sXCJjb2xvcmJhcnNcIixcImZyb20tcm9vdFwiKX0se1wiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo3NjEsXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIjo3NzV9XSw1ODA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9kcmF3XCIpLGk9dChcIi4uL2NvbG9yc2NhbGUvaGVscGVyc1wiKS5mbGlwU2NhbGU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiByKXJldHVybiByKHQsZSk7dmFyIGE9ZVswXS50cmFjZSxvPVwiY2JcIithLnVpZDtyPUFycmF5LmlzQXJyYXkocik/cjpbcl07Zm9yKHZhciBzPTA7czxyLmxlbmd0aDtzKyspe3ZhciBsPXJbc10uY29udGFpbmVyLGM9bD9hW2xdOmE7aWYodC5fZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdEFsbChcIi5cIitvKS5yZW1vdmUoKSxjJiZjLnNob3dzY2FsZSl7dmFyIHU9ZVswXS50LmNiPW4odCxvKSxoPWMucmV2ZXJzZXNjYWxlP2koYy5jb2xvcnNjYWxlKTpjLmNvbG9yc2NhbGU7cmV0dXJuIHZvaWQgdS5maWxsZ3JhZGllbnQoaCkuenJhbmdlKFtjW3Jbc10ubWluXSxjW3Jbc10ubWF4XV0pLm9wdGlvbnMoYy5jb2xvcmJhcikoKX19fX0se1wiLi4vY29sb3JzY2FsZS9oZWxwZXJzXCI6NTg5LFwiLi9kcmF3XCI6NTgzfV0sNTgxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtjbjp7Y29sb3JiYXI6XCJjb2xvcmJhclwiLGNiYmc6XCJjYmJnXCIsY2JmaWxsOlwiY2JmaWxsXCIsY2JmaWxsczpcImNiZmlsbHNcIixjYmxpbmU6XCJjYmxpbmVcIixjYmxpbmVzOlwiY2JsaW5lc1wiLGNiYXhpczpcImNiYXhpc1wiLGNidGl0bGV1bnNoaWZ0OlwiY2J0aXRsZXVuc2hpZnRcIixjYnRpdGxlOlwiY2J0aXRsZVwiLGNib3V0bGluZTpcImNib3V0bGluZVwiLGNyaXNwOlwiY3Jpc3BcIixqc1BsYWNlaG9sZGVyOlwianMtcGxhY2Vob2xkZXJcIn19fSx7fV0sNTgyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzXCIpLG89dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHNcIikscz10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHNcIiksbD10KFwiLi9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGM9aS5uZXdDb250YWluZXIoZSxcImNvbG9yYmFyXCIpLHU9dC5jb2xvcmJhcnx8e307ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBuLmNvZXJjZSh1LGMsbCx0LGUpfXZhciBmPWgoXCJ0aGlja25lc3Ntb2RlXCIpO2goXCJ0aGlja25lc3NcIixcImZyYWN0aW9uXCI9PT1mPzMwLyhyLndpZHRoLXIubWFyZ2luLmwtci5tYXJnaW4ucik6MzApO3ZhciBwPWgoXCJsZW5tb2RlXCIpO2goXCJsZW5cIixcImZyYWN0aW9uXCI9PT1wPzE6ci5oZWlnaHQtci5tYXJnaW4udC1yLm1hcmdpbi5iKSxoKFwieFwiKSxoKFwieGFuY2hvclwiKSxoKFwieHBhZFwiKSxoKFwieVwiKSxoKFwieWFuY2hvclwiKSxoKFwieXBhZFwiKSxuLm5vbmVPckFsbCh1LGMsW1wieFwiLFwieVwiXSksaChcIm91dGxpbmVjb2xvclwiKSxoKFwib3V0bGluZXdpZHRoXCIpLGgoXCJib3JkZXJjb2xvclwiKSxoKFwiYm9yZGVyd2lkdGhcIiksaChcImJnY29sb3JcIiksYSh1LGMsaCxcImxpbmVhclwiKTt2YXIgZD17b3V0ZXJUaWNrczohMSxmb250OnIuZm9udH07cyh1LGMsaCxcImxpbmVhclwiLGQpLG8odSxjLGgsXCJsaW5lYXJcIixkKSxoKFwidGl0bGUudGV4dFwiLHIuX2RmbHRUaXRsZS5jb2xvcmJhciksbi5jb2VyY2VGb250KGgsXCJ0aXRsZS5mb250XCIsci5mb250KSxoKFwidGl0bGUuc2lkZVwiKX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0c1wiOjc2OCxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHNcIjo3NjksXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0c1wiOjc3MCxcIi4vYXR0cmlidXRlc1wiOjU3OX1dLDU4MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJ0aW55Y29sb3IyXCIpLGE9dChcIi4uLy4uL3Bsb3RzL3Bsb3RzXCIpLG89dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLHM9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGw9dChcIi4uL2RyYWdlbGVtZW50XCIpLGM9dChcIi4uLy4uL2xpYlwiKSx1PXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsaD10KFwiLi4vLi4vbGliL3NldGN1cnNvclwiKSxmPXQoXCIuLi9kcmF3aW5nXCIpLHA9dChcIi4uL2NvbG9yXCIpLGQ9dChcIi4uL3RpdGxlc1wiKSxnPXQoXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIiksdj10KFwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiKSxtPXYuTElORV9TUEFDSU5HLHk9di5GUk9NX1RMLHg9di5GUk9NX0JSLGI9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzXCIpLF89dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9wb3NpdGlvbl9kZWZhdWx0c1wiKSx3PXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksaz10KFwiLi9hdHRyaWJ1dGVzXCIpLEE9dChcIi4vY29uc3RhbnRzXCIpLmNuO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXt9O2Zvcih2YXIgdiBpbiBrKXJbdl09bnVsbDtmdW5jdGlvbiBUKCl7dmFyIHY9dC5fZnVsbExheW91dCxrPXYuX3NpemU7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygci5maWxsY29sb3J8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHIubGluZS5jb2xvcnx8ci5maWxsZ3JhZGllbnQpe3ZhciBFLEMsTD1yLnpyYW5nZXx8bi5leHRlbnQoKFwiZnVuY3Rpb25cIj09dHlwZW9mIHIuZmlsbGNvbG9yP3IuZmlsbGNvbG9yOnIubGluZS5jb2xvcikuZG9tYWluKCkpLHo9W10sTz1bXSxJPVwiZnVuY3Rpb25cIj09dHlwZW9mIHIubGluZS5jb2xvcj9yLmxpbmUuY29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gci5saW5lLmNvbG9yfSxEPVwiZnVuY3Rpb25cIj09dHlwZW9mIHIuZmlsbGNvbG9yP3IuZmlsbGNvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHIuZmlsbGNvbG9yfSxQPXIubGV2ZWxzLmVuZCtyLmxldmVscy5zaXplLzEwMCxSPXIubGV2ZWxzLnNpemUsRj0xLjAwMSpMWzBdLS4wMDEqTFsxXSxCPTEuMDAxKkxbMV0tLjAwMSpMWzBdO2ZvcihDPTA7QzwxZTUmJihFPXIubGV2ZWxzLnN0YXJ0K0MqUiwhKFI+MD9FPj1QOkU8PVApKTtDKyspRT5GJiZFPEImJnoucHVzaChFKTtpZihyLmZpbGxncmFkaWVudClPPVswXTtlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHIuZmlsbGNvbG9yKWlmKHIuZmlsbGxldmVscylmb3IoUD1yLmZpbGxsZXZlbHMuZW5kK3IuZmlsbGxldmVscy5zaXplLzEwMCxSPXIuZmlsbGxldmVscy5zaXplLEM9MDtDPDFlNSYmKEU9ci5maWxsbGV2ZWxzLnN0YXJ0K0MqUiwhKFI+MD9FPj1QOkU8PVApKTtDKyspRT5MWzBdJiZFPExbMV0mJk8ucHVzaChFKTtlbHNlKE89ei5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQtci5sZXZlbHMuc2l6ZS8yfSkpLnB1c2goT1tPLmxlbmd0aC0xXStyLmxldmVscy5zaXplKTtlbHNlIHIuZmlsbGNvbG9yJiZcInN0cmluZ1wiPT10eXBlb2Ygci5maWxsY29sb3ImJihPPVswXSk7ci5sZXZlbHMuc2l6ZTwwJiYoei5yZXZlcnNlKCksTy5yZXZlcnNlKCkpO3ZhciBOLGo9ay5oLFY9ay53LFU9TWF0aC5yb3VuZChyLnRoaWNrbmVzcyooXCJmcmFjdGlvblwiPT09ci50aGlja25lc3Ntb2RlP1Y6MSkpLHE9VS9rLncsSD1NYXRoLnJvdW5kKHIubGVuKihcImZyYWN0aW9uXCI9PT1yLmxlbm1vZGU/ajoxKSksRz1IL2suaCxZPXIueHBhZC9rLncsVz0oci5ib3JkZXJ3aWR0aCtyLm91dGxpbmV3aWR0aCkvMixYPXIueXBhZC9rLmgsWj1NYXRoLnJvdW5kKHIueCprLncrci54cGFkKSwkPXIueC1xKih7bWlkZGxlOi41LHJpZ2h0OjF9W3IueGFuY2hvcl18fDApLEo9ci55K0cqKCh7dG9wOi0uNSxib3R0b206LjV9W3IueWFuY2hvcl18fDApLS41KSxLPU1hdGgucm91bmQoay5oKigxLUopKSxRPUstSCx0dD17dHlwZTpcImxpbmVhclwiLHJhbmdlOkwsdGlja21vZGU6ci50aWNrbW9kZSxudGlja3M6ci5udGlja3MsdGljazA6ci50aWNrMCxkdGljazpyLmR0aWNrLHRpY2t2YWxzOnIudGlja3ZhbHMsdGlja3RleHQ6ci50aWNrdGV4dCx0aWNrczpyLnRpY2tzLHRpY2tsZW46ci50aWNrbGVuLHRpY2t3aWR0aDpyLnRpY2t3aWR0aCx0aWNrY29sb3I6ci50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6ci5zaG93dGlja2xhYmVscyx0aWNrZm9udDpyLnRpY2tmb250LHRpY2thbmdsZTpyLnRpY2thbmdsZSx0aWNrZm9ybWF0OnIudGlja2Zvcm1hdCxleHBvbmVudGZvcm1hdDpyLmV4cG9uZW50Zm9ybWF0LHNlcGFyYXRldGhvdXNhbmRzOnIuc2VwYXJhdGV0aG91c2FuZHMsc2hvd2V4cG9uZW50OnIuc2hvd2V4cG9uZW50LHNob3d0aWNrcHJlZml4OnIuc2hvd3RpY2twcmVmaXgsdGlja3ByZWZpeDpyLnRpY2twcmVmaXgsc2hvd3RpY2tzdWZmaXg6ci5zaG93dGlja3N1ZmZpeCx0aWNrc3VmZml4OnIudGlja3N1ZmZpeCx0aXRsZTpyLnRpdGxlLHNob3dsaW5lOiEwLGFuY2hvcjpcImZyZWVcIixzaWRlOlwicmlnaHRcIixwb3NpdGlvbjoxfSxldD17dHlwZTpcImxpbmVhclwiLF9pZDpcInlcIitlfSxydD17bGV0dGVyOlwieVwiLGZvbnQ6di5mb250LG5vSG92ZXI6ITAsbm9UaWNrc29uOiEwLGNhbGVuZGFyOnYuY2FsZW5kYXJ9O2lmKGIodHQsZXQseXQscnQsdiksXyh0dCxldCx5dCxydCksZXQucG9zaXRpb249ci54K1krcSxULmF4aXM9ZXQsLTEhPT1bXCJ0b3BcIixcImJvdHRvbVwiXS5pbmRleE9mKHIudGl0bGUuc2lkZSkmJihldC50aXRsZS5zaWRlPXIudGl0bGUuc2lkZSxldC50aXRsZXg9ci54K1ksZXQudGl0bGV5PUorKFwidG9wXCI9PT1yLnRpdGxlLnNpZGU/Ry1YOlgpKSxyLmxpbmUuY29sb3ImJlwiYXV0b1wiPT09ci50aWNrbW9kZSl7ZXQudGlja21vZGU9XCJsaW5lYXJcIixldC50aWNrMD1yLmxldmVscy5zdGFydDt2YXIgbnQ9ci5sZXZlbHMuc2l6ZSxpdD1jLmNvbnN0cmFpbigoSy1RKS81MCw0LDE1KSsxLGF0PShMWzFdLUxbMF0pLygoci5udGlja3N8fGl0KSpudCk7aWYoYXQ+MSl7dmFyIG90PU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coYXQpL01hdGguTE4xMCkpO250Kj1vdCpjLnJvdW5kVXAoYXQvb3QsWzIsNSwxMF0pLChNYXRoLmFicyhyLmxldmVscy5zdGFydCkvci5sZXZlbHMuc2l6ZSsxZS02KSUxPDJlLTYmJihldC50aWNrMD0wKX1ldC5kdGljaz1udH1ldC5kb21haW49W0orWCxKK0ctWF0sZXQuc2V0U2NhbGUoKTt2YXIgc3Q9Yy5lbnN1cmVTaW5nbGUodi5faW5mb2xheWVyLFwiZ1wiLGUsZnVuY3Rpb24odCl7dC5jbGFzc2VkKEEuY29sb3JiYXIsITApLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTt0LmFwcGVuZChcInJlY3RcIikuY2xhc3NlZChBLmNiYmcsITApLHQuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKEEuY2JmaWxscywhMCksdC5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoQS5jYmxpbmVzLCEwKSx0LmFwcGVuZChcImdcIikuY2xhc3NlZChBLmNiYXhpcywhMCkuY2xhc3NlZChBLmNyaXNwLCEwKSx0LmFwcGVuZChcImdcIikuY2xhc3NlZChBLmNidGl0bGV1bnNoaWZ0LCEwKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoQS5jYnRpdGxlLCEwKSx0LmFwcGVuZChcInJlY3RcIikuY2xhc3NlZChBLmNib3V0bGluZSwhMCksdC5zZWxlY3QoXCIuY2J0aXRsZVwiKS5kYXR1bSgwKX0pfSk7c3QuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK01hdGgucm91bmQoay5sKStcIixcIitNYXRoLnJvdW5kKGsudCkrXCIpXCIpO3ZhciBsdD1zdC5zZWxlY3QoXCIuY2J0aXRsZXVuc2hpZnRcIikuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKC1cIitNYXRoLnJvdW5kKGsubCkrXCIsLVwiK01hdGgucm91bmQoay50KStcIilcIiksY3Q9c3Quc2VsZWN0KFwiLmNiYXhpc1wiKSx1dD0wO2lmKC0xIT09W1widG9wXCIsXCJib3R0b21cIl0uaW5kZXhPZihyLnRpdGxlLnNpZGUpKXt2YXIgaHQsZnQ9ay5sKyhyLngrWSkqay53LHB0PWV0LnRpdGxlLmZvbnQuc2l6ZTtodD1cInRvcFwiPT09ci50aXRsZS5zaWRlPygxLShKK0ctWCkpKmsuaCtrLnQrMysuNzUqcHQ6KDEtKEorWCkpKmsuaCtrLnQtMy0uMjUqcHQseHQoZXQuX2lkK1widGl0bGVcIix7YXR0cmlidXRlczp7eDpmdCx5Omh0LFwidGV4dC1hbmNob3JcIjpcInN0YXJ0XCJ9fSl9dmFyIGR0LGd0LHZ0LG10PWMuc3luY09yQXN5bmMoW2EucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe2lmKC0xIT09W1widG9wXCIsXCJib3R0b21cIl0uaW5kZXhPZihyLnRpdGxlLnNpZGUpKXt2YXIgYT1zdC5zZWxlY3QoXCIuY2J0aXRsZVwiKSxvPWEuc2VsZWN0KFwidGV4dFwiKSxsPVstci5vdXRsaW5ld2lkdGgvMixyLm91dGxpbmV3aWR0aC8yXSx1PWEuc2VsZWN0KFwiLmhcIitldC5faWQrXCJ0aXRsZS1tYXRoLWdyb3VwXCIpLm5vZGUoKSxoPTE1LjY7aWYoby5ub2RlKCkmJihoPXBhcnNlSW50KG8ubm9kZSgpLnN0eWxlLmZvbnRTaXplLDEwKSptKSx1Pyh1dD1mLmJCb3godSkuaGVpZ2h0KT5oJiYobFsxXS09KHV0LWgpLzIpOm8ubm9kZSgpJiYhby5jbGFzc2VkKEEuanNQbGFjZWhvbGRlcikmJih1dD1mLmJCb3goby5ub2RlKCkpLmhlaWdodCksdXQpe2lmKHV0Kz01LFwidG9wXCI9PT1yLnRpdGxlLnNpZGUpZXQuZG9tYWluWzFdLT11dC9rLmgsbFsxXSo9LTE7ZWxzZXtldC5kb21haW5bMF0rPXV0L2suaDt2YXIgcD1nLmxpbmVDb3VudChvKTtsWzFdKz0oMS1wKSpofWEuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK2wrXCIpXCIpLGV0LnNldFNjYWxlKCl9fXN0LnNlbGVjdEFsbChcIi5jYmZpbGxzLC5jYmxpbmVzXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZSgwLFwiK01hdGgucm91bmQoay5oKigxLWV0LmRvbWFpblsxXSkpK1wiKVwiKSxjdC5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoMCxcIitNYXRoLnJvdW5kKC1rLnQpK1wiKVwiKTt2YXIgZD1zdC5zZWxlY3QoXCIuY2JmaWxsc1wiKS5zZWxlY3RBbGwoXCJyZWN0LmNiZmlsbFwiKS5kYXRhKE8pO2QuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpLmNsYXNzZWQoQS5jYmZpbGwsITApLnN0eWxlKFwic3Ryb2tlXCIsXCJub25lXCIpLGQuZXhpdCgpLnJlbW92ZSgpO3ZhciB5PUwubWFwKGV0LmMycCkubWFwKE1hdGgucm91bmQpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSk7ZC5lYWNoKGZ1bmN0aW9uKGEsbyl7dmFyIHM9WzA9PT1vP0xbMF06KE9bb10rT1tvLTFdKS8yLG89PT1PLmxlbmd0aC0xP0xbMV06KE9bb10rT1tvKzFdKS8yXS5tYXAoZXQuYzJwKS5tYXAoTWF0aC5yb3VuZCk7c1sxXT1jLmNvbnN0cmFpbihzWzFdKyhzWzFdPnNbMF0pPzE6LTEseVswXSx5WzFdKTt2YXIgbD1uLnNlbGVjdCh0aGlzKS5hdHRyKHt4Olosd2lkdGg6TWF0aC5tYXgoVSwyKSx5Om4ubWluKHMpLGhlaWdodDpNYXRoLm1heChuLm1heChzKS1uLm1pbihzKSwyKX0pO2lmKHIuZmlsbGdyYWRpZW50KWYuZ3JhZGllbnQobCx0LGUsXCJ2ZXJ0aWNhbFwiLHIuZmlsbGdyYWRpZW50LFwiZmlsbFwiKTtlbHNle3ZhciB1PUQoYSkucmVwbGFjZShcImUtXCIsXCJcIik7bC5hdHRyKFwiZmlsbFwiLGkodSkudG9IZXhTdHJpbmcoKSl9fSk7dmFyIHg9c3Quc2VsZWN0KFwiLmNibGluZXNcIikuc2VsZWN0QWxsKFwicGF0aC5jYmxpbmVcIikuZGF0YShyLmxpbmUuY29sb3ImJnIubGluZS53aWR0aD96OltdKTtyZXR1cm4geC5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChBLmNibGluZSwhMCkseC5leGl0KCkucmVtb3ZlKCkseC5lYWNoKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmF0dHIoXCJkXCIsXCJNXCIrWitcIixcIisoTWF0aC5yb3VuZChldC5jMnAodCkpK3IubGluZS53aWR0aC8yJTEpK1wiaFwiK1UpLmNhbGwoZi5saW5lR3JvdXBTdHlsZSxyLmxpbmUud2lkdGgsSSh0KSxyLmxpbmUuZGFzaCl9KSxjdC5zZWxlY3RBbGwoXCJnLlwiK2V0Ll9pZCtcInRpY2sscGF0aFwiKS5yZW1vdmUoKSxjLnN5bmNPckFzeW5jKFtmdW5jdGlvbigpe3ZhciBlPVorVSsoci5vdXRsaW5ld2lkdGh8fDApLzItKFwib3V0c2lkZVwiPT09ci50aWNrcz8xOjApLG49cy5jYWxjVGlja3MoZXQpLGk9cy5tYWtlVHJhbnNGbihldCksYT1zLmdldFRpY2tTaWducyhldClbMl07cmV0dXJuIHMuZHJhd1RpY2tzKHQsZXQse3ZhbHM6XCJpbnNpZGVcIj09PWV0LnRpY2tzP3MuY2xpcEVuZHMoZXQsbik6bixsYXllcjpjdCxwYXRoOnMubWFrZVRpY2tQYXRoKGV0LGUsYSksdHJhbnNGbjppfSkscy5kcmF3TGFiZWxzKHQsZXQse3ZhbHM6bixsYXllcjpjdCx0cmFuc0ZuOmksbGFiZWxGbnM6cy5tYWtlTGFiZWxGbnMoZXQsZSl9KX0sZnVuY3Rpb24oKXtpZigtMT09PVtcInRvcFwiLFwiYm90dG9tXCJdLmluZGV4T2Yoci50aXRsZS5zaWRlKSl7dmFyIGU9ZXQudGl0bGUuZm9udC5zaXplLGk9ZXQuX29mZnNldCtldC5fbGVuZ3RoLzIsYT1rLmwrKGV0LnBvc2l0aW9ufHwwKSprLncrKFwicmlnaHRcIj09PWV0LnNpZGU/MTArZSooZXQuc2hvd3RpY2tsYWJlbHM/MTouNSk6LTEwLWUqKGV0LnNob3d0aWNrbGFiZWxzPy41OjApKTt4dChcImhcIitldC5faWQrXCJ0aXRsZVwiLHthdm9pZDp7c2VsZWN0aW9uOm4uc2VsZWN0KHQpLnNlbGVjdEFsbChcImcuXCIrZXQuX2lkK1widGlja1wiKSxzaWRlOnIudGl0bGUuc2lkZSxvZmZzZXRMZWZ0OmsubCxvZmZzZXRUb3A6MCxtYXhTaGlmdDp2LndpZHRofSxhdHRyaWJ1dGVzOnt4OmEseTppLFwidGV4dC1hbmNob3JcIjpcIm1pZGRsZVwifSx0cmFuc2Zvcm06e3JvdGF0ZTpcIi05MFwiLG9mZnNldDowfX0pfX1dKX0sYS5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7dmFyIG49VStyLm91dGxpbmV3aWR0aC8yK2YuYkJveChjdC5ub2RlKCkpLndpZHRoO2lmKChOPWx0LnNlbGVjdChcInRleHRcIikpLm5vZGUoKSYmIU4uY2xhc3NlZChBLmpzUGxhY2Vob2xkZXIpKXt2YXIgaSxvPWx0LnNlbGVjdChcIi5oXCIrZXQuX2lkK1widGl0bGUtbWF0aC1ncm91cFwiKS5ub2RlKCk7aT1vJiYtMSE9PVtcInRvcFwiLFwiYm90dG9tXCJdLmluZGV4T2Yoci50aXRsZS5zaWRlKT9mLmJCb3gobykud2lkdGg6Zi5iQm94KGx0Lm5vZGUoKSkucmlnaHQtWi1rLmwsbj1NYXRoLm1heChuLGkpfXZhciBzPTIqci54cGFkK24rci5ib3JkZXJ3aWR0aCtyLm91dGxpbmV3aWR0aC8yLGw9Sy1RO3N0LnNlbGVjdChcIi5jYmJnXCIpLmF0dHIoe3g6Wi1yLnhwYWQtKHIuYm9yZGVyd2lkdGgrci5vdXRsaW5ld2lkdGgpLzIseTpRLVcsd2lkdGg6TWF0aC5tYXgocywyKSxoZWlnaHQ6TWF0aC5tYXgobCsyKlcsMil9KS5jYWxsKHAuZmlsbCxyLmJnY29sb3IpLmNhbGwocC5zdHJva2Usci5ib3JkZXJjb2xvcikuc3R5bGUoe1wic3Ryb2tlLXdpZHRoXCI6ci5ib3JkZXJ3aWR0aH0pLHN0LnNlbGVjdEFsbChcIi5jYm91dGxpbmVcIikuYXR0cih7eDpaLHk6UStyLnlwYWQrKFwidG9wXCI9PT1yLnRpdGxlLnNpZGU/dXQ6MCksd2lkdGg6TWF0aC5tYXgoVSwyKSxoZWlnaHQ6TWF0aC5tYXgobC0yKnIueXBhZC11dCwyKX0pLmNhbGwocC5zdHJva2Usci5vdXRsaW5lY29sb3IpLnN0eWxlKHtmaWxsOlwiTm9uZVwiLFwic3Ryb2tlLXdpZHRoXCI6ci5vdXRsaW5ld2lkdGh9KTt2YXIgYz0oe2NlbnRlcjouNSxyaWdodDoxfVtyLnhhbmNob3JdfHwwKSpzO3N0LmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIisoay5sLWMpK1wiLFwiK2sudCtcIilcIik7dmFyIHU9e30saD15W3IueWFuY2hvcl0sZD14W3IueWFuY2hvcl07XCJwaXhlbHNcIj09PXIubGVubW9kZT8odS55PXIueSx1LnQ9bCpoLHUuYj1sKmQpOih1LnQ9dS5iPTAsdS55dD1yLnkrci5sZW4qaCx1LnliPXIueS1yLmxlbipkKTt2YXIgZz15W3IueGFuY2hvcl0sdj14W3IueGFuY2hvcl07aWYoXCJwaXhlbHNcIj09PXIudGhpY2tuZXNzbW9kZSl1Lng9ci54LHUubD1zKmcsdS5yPXMqdjtlbHNle3ZhciBtPXMtVTt1Lmw9bSpnLHUucj1tKnYsdS54bD1yLngtci50aGlja25lc3MqZyx1LnhyPXIueCtyLnRoaWNrbmVzcyp2fWEuYXV0b01hcmdpbih0LGUsdSl9XSx0KTtpZihtdCYmbXQudGhlbiYmKHQuX3Byb21pc2VzfHxbXSkucHVzaChtdCksdC5fY29udGV4dC5lZGl0cy5jb2xvcmJhclBvc2l0aW9uKWwuaW5pdCh7ZWxlbWVudDpzdC5ub2RlKCksZ2Q6dCxwcmVwRm46ZnVuY3Rpb24oKXtkdD1zdC5hdHRyKFwidHJhbnNmb3JtXCIpLGgoc3QpfSxtb3ZlRm46ZnVuY3Rpb24odCxlKXtzdC5hdHRyKFwidHJhbnNmb3JtXCIsZHQrXCIgdHJhbnNsYXRlKFwiK3QrXCIsXCIrZStcIilcIiksZ3Q9bC5hbGlnbigkK3Qvay53LHEsMCwxLHIueGFuY2hvciksdnQ9bC5hbGlnbihKLWUvay5oLEcsMCwxLHIueWFuY2hvcik7dmFyIG49bC5nZXRDdXJzb3IoZ3QsdnQsci54YW5jaG9yLHIueWFuY2hvcik7aChzdCxuKX0sZG9uZUZuOmZ1bmN0aW9uKCl7aWYoaChzdCksdm9pZCAwIT09Z3QmJnZvaWQgMCE9PXZ0KXt2YXIgZT17fTtlW1MoXCJ4XCIpXT1ndCxlW1MoXCJ5XCIpXT12dCxvLmNhbGwoXCJfZ3VpUmVzdHlsZVwiLHQsZSxNKCkuaW5kZXgpfX19KTtyZXR1cm4gbXR9ZnVuY3Rpb24geXQodCxlKXtyZXR1cm4gYy5jb2VyY2UodHQsZXQsdyx0LGUpfWZ1bmN0aW9uIHh0KGUscil7dmFyIG49e3Byb3BDb250YWluZXI6ZXQscHJvcE5hbWU6UyhcInRpdGxlXCIpLHRyYWNlSW5kZXg6TSgpLmluZGV4LHBsYWNlaG9sZGVyOnYuX2RmbHRUaXRsZS5jb2xvcmJhcixjb250YWluZXJHcm91cDpzdC5zZWxlY3QoXCIuY2J0aXRsZVwiKX0saT1cImhcIj09PWUuY2hhckF0KDApP2Uuc3Vic3RyKDEpOlwiaFwiK2U7c3Quc2VsZWN0QWxsKFwiLlwiK2krXCIsLlwiK2krXCItbWF0aC1ncm91cFwiKS5yZW1vdmUoKSxkLmRyYXcodCxlLHUobixyfHx7fSkpfXYuX2luZm9sYXllci5zZWxlY3RBbGwoXCJnLlwiK2UpLnJlbW92ZSgpfWZ1bmN0aW9uIE0oKXtmb3IodmFyIHI9ZS5zdWJzdHIoMiksbj0wO248dC5fZnVsbERhdGEubGVuZ3RoO24rKyl7dmFyIGk9dC5fZnVsbERhdGFbbl07aWYoaS51aWQ9PT1yKXJldHVybiBpfX1mdW5jdGlvbiBTKHQpe3ZhciBlPVwiY29sb3JiYXIuXCIscj1NKCkuX21vZHVsZS5jb2xvcmJhci5jb250YWluZXI7cmV0dXJuIHImJihlPXIrXCIuXCIrZSksZSt0fXJldHVybiByLmZpbGxjb2xvcj1udWxsLHIubGluZT17Y29sb3I6bnVsbCx3aWR0aDpudWxsLGRhc2g6bnVsbH0sci5sZXZlbHM9e3N0YXJ0Om51bGwsZW5kOm51bGwsc2l6ZTpudWxsfSxyLmZpbGxsZXZlbHM9bnVsbCxyLmZpbGxncmFkaWVudD1udWxsLHIuenJhbmdlPW51bGwsT2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbih0KXtUW3RdPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyW3RdPWMuaXNQbGFpbk9iamVjdChyW3RdKT9jLmV4dGVuZEZsYXQoclt0XSxlKTplLFQpOnJbdF19fSksVC5vcHRpb25zPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KVwiZnVuY3Rpb25cIj09dHlwZW9mIFRbZV0mJlRbZV0odFtlXSk7cmV0dXJuIFR9LFQuX29wdHM9cixUfX0se1wiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiOjY3MyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9saWIvc2V0Y3Vyc29yXCI6NzIxLFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCI6NzI1LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19kZWZhdWx0c1wiOjc1MSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlc1wiOjc2MSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9wb3NpdGlvbl9kZWZhdWx0c1wiOjc2NCxcIi4uLy4uL3Bsb3RzL3Bsb3RzXCI6ODEwLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9jb2xvclwiOjU3OCxcIi4uL2RyYWdlbGVtZW50XCI6NTk2LFwiLi4vZHJhd2luZ1wiOjU5OSxcIi4uL3RpdGxlc1wiOjY2NixcIi4vYXR0cmlidXRlc1wiOjU3OSxcIi4vY29uc3RhbnRzXCI6NTgxLGQzOjE1NSx0aW55Y29sb3IyOjUyMn1dLDU4NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuLmlzUGxhaW5PYmplY3QodC5jb2xvcmJhcil9fSx7XCIuLi8uLi9saWJcIjo3MDF9XSw1ODU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9zY2FsZXMuanNcIikuc2NhbGVzO09iamVjdC5rZXlzKG4pO2Z1bmN0aW9uIGkodCl7cmV0dXJuXCJgXCIrdCtcImBcIn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0PXR8fFwiXCI7dmFyIHIsYT0oZT1lfHx7fSkuY0xldHRlcnx8XCJjXCIsbz0oXCJvbmx5SWZOdW1lcmljYWxcImluIGU/ZS5vbmx5SWZOdW1lcmljYWw6Qm9vbGVhbih0KSxcIm5vU2NhbGVcImluIGU/ZS5ub1NjYWxlOlwibWFya2VyLmxpbmVcIj09PXQpLHM9XCJzaG93U2NhbGVEZmx0XCJpbiBlP2Uuc2hvd1NjYWxlRGZsdDpcInpcIj09PWEsbD1cInN0cmluZ1wiPT10eXBlb2YgZS5jb2xvcnNjYWxlRGZsdD9uW2UuY29sb3JzY2FsZURmbHRdOm51bGwsYz1lLmVkaXRUeXBlT3ZlcnJpZGV8fFwiXCIsdT10P3QrXCIuXCI6XCJcIjtcImNvbG9yQXR0clwiaW4gZT8ocj1lLmNvbG9yQXR0cixlLmNvbG9yQXR0cik6aSh1KyhyPXt6OlwielwiLGM6XCJjb2xvclwifVthXSkpO3ZhciBoPWErXCJhdXRvXCIsZj1hK1wibWluXCIscD1hK1wibWF4XCIsZD1hK1wibWlkXCIsZz0oaSh1K2gpLGkodStmKSxpKHUrcCkse30pO2dbZl09Z1twXT12b2lkIDA7dmFyIHY9e307dltoXT0hMTt2YXIgbT17fTtyZXR1cm5cImNvbG9yXCI9PT1yJiYobS5jb2xvcj17dmFsVHlwZTpcImNvbG9yXCIsYXJyYXlPazohMCxlZGl0VHlwZTpjfHxcInN0eWxlXCJ9LGUuYW5pbSYmKG0uY29sb3IuYW5pbT0hMCkpLG1baF09e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcImNhbGNcIixpbXBsaWVkRWRpdHM6Z30sbVtmXT17dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6bnVsbCxlZGl0VHlwZTpjfHxcInBsb3RcIixpbXBsaWVkRWRpdHM6dn0sbVtwXT17dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6bnVsbCxlZGl0VHlwZTpjfHxcInBsb3RcIixpbXBsaWVkRWRpdHM6dn0sbVtkXT17dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6bnVsbCxlZGl0VHlwZTpcImNhbGNcIixpbXBsaWVkRWRpdHM6Z30sbS5jb2xvcnNjYWxlPXt2YWxUeXBlOlwiY29sb3JzY2FsZVwiLGVkaXRUeXBlOlwiY2FsY1wiLGRmbHQ6bCxpbXBsaWVkRWRpdHM6e2F1dG9jb2xvcnNjYWxlOiExfX0sbS5hdXRvY29sb3JzY2FsZT17dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExIT09ZS5hdXRvQ29sb3JEZmx0LGVkaXRUeXBlOlwiY2FsY1wiLGltcGxpZWRFZGl0czp7Y29sb3JzY2FsZTp2b2lkIDB9fSxtLnJldmVyc2VzY2FsZT17dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwicGxvdFwifSxvfHwobS5zaG93c2NhbGU9e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDpzLGVkaXRUeXBlOlwiY2FsY1wifSksbX19LHtcIi4vc2NhbGVzLmpzXCI6NTkzfV0sNTg2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQuX2Z1bGxMYXlvdXQsYT1yLnZhbHMsbz1yLmNvbnRhaW5lclN0cixzPXIuY0xldHRlcixsPW8/bi5uZXN0ZWRQcm9wZXJ0eShlLG8pLmdldCgpOmUsYz1zK1wibWluXCIsdT1zK1wibWF4XCIsaD1zK1wibWlkXCIsZj1sW3MrXCJhdXRvXCJdLHA9bFtjXSxkPWxbdV0sZz1sW2hdLHY9bC5jb2xvcnNjYWxlOyExPT09ZiYmdm9pZCAwIT09cHx8KHA9bi5hZ2dOdW1zKE1hdGgubWluLG51bGwsYSkpLCExPT09ZiYmdm9pZCAwIT09ZHx8KGQ9bi5hZ2dOdW1zKE1hdGgubWF4LG51bGwsYSkpLCExIT09ZiYmdm9pZCAwIT09ZyYmKGQtZz5nLXA/cD1nLShkLWcpOmQtZzxnLXAmJihkPWcrKGctcCkpKSxwPT09ZCYmKHAtPS41LGQrPS41KSxsW1wiX1wiK2NdPWxbY109cCxsW1wiX1wiK3VdPWxbdV09ZCxsLmF1dG9jb2xvcnNjYWxlJiYodj1wKmQ8MD9pLmNvbG9yc2NhbGUuZGl2ZXJnaW5nOnA+PTA/aS5jb2xvcnNjYWxlLnNlcXVlbnRpYWw6aS5jb2xvcnNjYWxlLnNlcXVlbnRpYWxtaW51cyxsLl9jb2xvcnNjYWxlPWwuY29sb3JzY2FsZT12KX19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDU4NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9oZWxwZXJzXCIpLmhhc0NvbG9yc2NhbGU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlKXt2YXIgcj10W1wiX1wiK2VdO3ZvaWQgMCE9PXImJih0W2VdPXIpfWZ1bmN0aW9uIHIodCxyKXt2YXIgaT1yLmNvbnRhaW5lcj9uLm5lc3RlZFByb3BlcnR5KHQsci5jb250YWluZXIpLmdldCgpOnQ7aWYoaSl7dmFyIGE9aS56YXV0b3x8aS5jYXV0byxvPXIubWluLHM9ci5tYXg7KGF8fHZvaWQgMD09PWlbb10pJiZlKGksbyksKGF8fHZvaWQgMD09PWlbc10pJiZlKGkscyksaS5hdXRvY29sb3JzY2FsZSYmZShpLFwiY29sb3JzY2FsZVwiKX19Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBvPXRbYV0scz1vLl9tb2R1bGUuY29sb3JiYXI7aWYocylpZihBcnJheS5pc0FycmF5KHMpKWZvcih2YXIgbD0wO2w8cy5sZW5ndGg7bCsrKXIobyxzW2xdKTtlbHNlIHIobyxzKTtpKG8sXCJtYXJrZXIubGluZVwiKSYmcihvLHtjb250YWluZXI6XCJtYXJrZXIubGluZVwiLG1pbjpcImNtaW5cIixtYXg6XCJjbWF4XCJ9KSxpKG8sXCJsaW5lXCIpJiZyKG8se2NvbnRhaW5lcjpcImxpbmVcIixtaW46XCJjbWluXCIsbWF4OlwiY21heFwifSl9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi9oZWxwZXJzXCI6NTg5fV0sNTg4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi9jb2xvcmJhci9oYXNfY29sb3JiYXJcIiksbz10KFwiLi4vY29sb3JiYXIvZGVmYXVsdHNcIikscz10KFwiLi9zY2FsZXNcIikuaXNWYWxpZDtmdW5jdGlvbiBsKHQsZSl7dmFyIHI9ZS5zbGljZSgwLGUubGVuZ3RoLTEpO3JldHVybiBlP2kubmVzdGVkUHJvcGVydHkodCxyKS5nZXQoKXx8e306dH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSxjKXt2YXIgdT1jLnByZWZpeCxoPWMuY0xldHRlcixmPWwodCx1KSxwPWwoZSx1KSxkPWwoZS5fdGVtcGxhdGV8fHt9LHUpfHx7fSxnPWZbaCtcIm1pblwiXSx2PWZbaCtcIm1heFwiXTtpKHUraCtcImF1dG9cIiwhKG4oZykmJm4odikmJmc8dikpP2kodStoK1wibWlkXCIpOihpKHUraCtcIm1pblwiKSxpKHUraCtcIm1heFwiKSk7dmFyIG0seSx4PWYuY29sb3JzY2FsZSxiPWQuY29sb3JzY2FsZTsodm9pZCAwIT09eCYmKG09IXMoeCkpLHZvaWQgMCE9PWImJihtPSFzKGIpKSxpKHUrXCJhdXRvY29sb3JzY2FsZVwiLG0pLGkodStcImNvbG9yc2NhbGVcIiksaSh1K1wicmV2ZXJzZXNjYWxlXCIpLGMubm9TY2FsZXx8XCJtYXJrZXIubGluZS5cIj09PXUpfHwodSYmKHk9YShmKSksaSh1K1wic2hvd3NjYWxlXCIseSkmJm8oZixwLHIpKX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2NvbG9yYmFyL2RlZmF1bHRzXCI6NTgyLFwiLi4vY29sb3JiYXIvaGFzX2NvbG9yYmFyXCI6NTg0LFwiLi9zY2FsZXNcIjo1OTMsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDU4OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJ0aW55Y29sb3IyXCIpLGE9dChcImZhc3QtaXNudW1lcmljXCIpLG89dChcIi4uLy4uL2xpYlwiKSxzPXQoXCIuLi9jb2xvclwiKSxsPXQoXCIuL3NjYWxlc1wiKS5pc1ZhbGlkO2Z1bmN0aW9uIGModCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49ZS0xLGk9MDtuPj0wO24tLSxpKyspe3ZhciBhPXRbbl07cltpXT1bMS1hWzBdLGFbMV1dfXJldHVybiByfWZ1bmN0aW9uIHUodCl7dmFyIGU9e3I6dFswXSxnOnRbMV0sYjp0WzJdLGE6dFszXX07cmV0dXJuIGkoZSkudG9SZ2JTdHJpbmcoKX1lLmV4cG9ydHM9e2hhc0NvbG9yc2NhbGU6ZnVuY3Rpb24odCxlKXt2YXIgcj1lP28ubmVzdGVkUHJvcGVydHkodCxlKS5nZXQoKXx8e306dCxuPXIuY29sb3IsaT0hMTtpZihvLmlzQXJyYXlPclR5cGVkQXJyYXkobikpZm9yKHZhciBzPTA7czxuLmxlbmd0aDtzKyspaWYoYShuW3NdKSl7aT0hMDticmVha31yZXR1cm4gby5pc1BsYWluT2JqZWN0KHIpJiYoaXx8ITA9PT1yLnNob3dzY2FsZXx8YShyLmNtaW4pJiZhKHIuY21heCl8fGwoci5jb2xvcnNjYWxlKXx8by5pc1BsYWluT2JqZWN0KHIuY29sb3JiYXIpKX0sZXh0cmFjdFNjYWxlOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUuY0xldHRlcixuPXQucmV2ZXJzZXNjYWxlP2ModC5jb2xvcnNjYWxlKTp0LmNvbG9yc2NhbGUsaT10W3IrXCJtaW5cIl0sYT10W3IrXCJtYXhcIl0sbz1uLmxlbmd0aCxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSx1PTA7dTxvO3UrKyl7dmFyIGg9blt1XTtzW3VdPWkraFswXSooYS1pKSxsW3VdPWhbMV19cmV0dXJue2RvbWFpbjpzLHJhbmdlOmx9fSxmbGlwU2NhbGU6YyxtYWtlQ29sb3JTY2FsZUZ1bmM6ZnVuY3Rpb24odCxlKXtlPWV8fHt9O2Zvcih2YXIgcj10LmRvbWFpbixvPXQucmFuZ2UsbD1vLmxlbmd0aCxjPW5ldyBBcnJheShsKSxoPTA7aDxsO2grKyl7dmFyIGY9aShvW2hdKS50b1JnYigpO2NbaF09W2YucixmLmcsZi5iLGYuYV19dmFyIHAsZD1uLnNjYWxlLmxpbmVhcigpLmRvbWFpbihyKS5yYW5nZShjKS5jbGFtcCghMCksZz1lLm5vTnVtZXJpY0NoZWNrLHY9ZS5yZXR1cm5BcnJheTtyZXR1cm4ocD1nJiZ2P2Q6Zz9mdW5jdGlvbih0KXtyZXR1cm4gdShkKHQpKX06dj9mdW5jdGlvbih0KXtyZXR1cm4gYSh0KT9kKHQpOmkodCkuaXNWYWxpZCgpP3Q6cy5kZWZhdWx0TGluZX06ZnVuY3Rpb24odCl7cmV0dXJuIGEodCk/dShkKHQpKTppKHQpLmlzVmFsaWQoKT90OnMuZGVmYXVsdExpbmV9KS5kb21haW49ZC5kb21haW4scC5yYW5nZT1mdW5jdGlvbigpe3JldHVybiBvfSxwfX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2NvbG9yXCI6NTc4LFwiLi9zY2FsZXNcIjo1OTMsZDM6MTU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjIsdGlueWNvbG9yMjo1MjJ9XSw1OTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9zY2FsZXNcIiksaT10KFwiLi9oZWxwZXJzXCIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZTpcImNvbXBvbmVudFwiLG5hbWU6XCJjb2xvcnNjYWxlXCIsYXR0cmlidXRlczp0KFwiLi9hdHRyaWJ1dGVzXCIpLGxheW91dEF0dHJpYnV0ZXM6dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dChcIi4vbGF5b3V0X2RlZmF1bHRzXCIpLGhhbmRsZURlZmF1bHRzOnQoXCIuL2RlZmF1bHRzXCIpLGNyb3NzVHJhY2VEZWZhdWx0czp0KFwiLi9jcm9zc190cmFjZV9kZWZhdWx0c1wiKSxjYWxjOnQoXCIuL2NhbGNcIiksc2NhbGVzOm4uc2NhbGVzLGRlZmF1bHRTY2FsZTpuLmRlZmF1bHRTY2FsZSxnZXRTY2FsZTpuLmdldCxpc1ZhbGlkU2NhbGU6bi5pc1ZhbGlkLGhhc0NvbG9yc2NhbGU6aS5oYXNDb2xvcnNjYWxlLGZsaXBTY2FsZTppLmZsaXBTY2FsZSxleHRyYWN0U2NhbGU6aS5leHRyYWN0U2NhbGUsbWFrZUNvbG9yU2NhbGVGdW5jOmkubWFrZUNvbG9yU2NhbGVGdW5jfX0se1wiLi9hdHRyaWJ1dGVzXCI6NTg1LFwiLi9jYWxjXCI6NTg2LFwiLi9jcm9zc190cmFjZV9kZWZhdWx0c1wiOjU4NyxcIi4vZGVmYXVsdHNcIjo1ODgsXCIuL2hlbHBlcnNcIjo1ODksXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6NTkxLFwiLi9sYXlvdXRfZGVmYXVsdHNcIjo1OTIsXCIuL3NjYWxlc1wiOjU5M31dLDU5MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL3NjYWxlc1wiKS5zY2FsZXM7ZS5leHBvcnRzPXtlZGl0VHlwZTpcImNhbGNcIixzZXF1ZW50aWFsOnt2YWxUeXBlOlwiY29sb3JzY2FsZVwiLGRmbHQ6bi5SZWRzLGVkaXRUeXBlOlwiY2FsY1wifSxzZXF1ZW50aWFsbWludXM6e3ZhbFR5cGU6XCJjb2xvcnNjYWxlXCIsZGZsdDpuLkJsdWVzLGVkaXRUeXBlOlwiY2FsY1wifSxkaXZlcmdpbmc6e3ZhbFR5cGU6XCJjb2xvcnNjYWxlXCIsZGZsdDpuLlJkQnUsZWRpdFR5cGU6XCJjYWxjXCJ9fX0se1wiLi9zY2FsZXNcIjo1OTN9XSw1OTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmNvbG9yc2NhbGUsbz1hLm5ld0NvbnRhaW5lcihlLFwiY29sb3JzY2FsZVwiKTtmdW5jdGlvbiBzKHQsZSl7cmV0dXJuIG4uY29lcmNlKHIsbyxpLHQsZSl9cyhcInNlcXVlbnRpYWxcIikscyhcInNlcXVlbnRpYWxtaW51c1wiKSxzKFwiZGl2ZXJnaW5nXCIpfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo1OTF9XSw1OTM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwidGlueWNvbG9yMlwiKSxpPXtHcmV5czpbWzAsXCJyZ2IoMCwwLDApXCJdLFsxLFwicmdiKDI1NSwyNTUsMjU1KVwiXV0sWWxHbkJ1OltbMCxcInJnYig4LDI5LDg4KVwiXSxbLjEyNSxcInJnYigzNyw1MiwxNDgpXCJdLFsuMjUsXCJyZ2IoMzQsOTQsMTY4KVwiXSxbLjM3NSxcInJnYigyOSwxNDUsMTkyKVwiXSxbLjUsXCJyZ2IoNjUsMTgyLDE5NilcIl0sWy42MjUsXCJyZ2IoMTI3LDIwNSwxODcpXCJdLFsuNzUsXCJyZ2IoMTk5LDIzMywxODApXCJdLFsuODc1LFwicmdiKDIzNywyNDgsMjE3KVwiXSxbMSxcInJnYigyNTUsMjU1LDIxNylcIl1dLEdyZWVuczpbWzAsXCJyZ2IoMCw2OCwyNylcIl0sWy4xMjUsXCJyZ2IoMCwxMDksNDQpXCJdLFsuMjUsXCJyZ2IoMzUsMTM5LDY5KVwiXSxbLjM3NSxcInJnYig2NSwxNzEsOTMpXCJdLFsuNSxcInJnYigxMTYsMTk2LDExOClcIl0sWy42MjUsXCJyZ2IoMTYxLDIxNywxNTUpXCJdLFsuNzUsXCJyZ2IoMTk5LDIzMywxOTIpXCJdLFsuODc1LFwicmdiKDIyOSwyNDUsMjI0KVwiXSxbMSxcInJnYigyNDcsMjUyLDI0NSlcIl1dLFlsT3JSZDpbWzAsXCJyZ2IoMTI4LDAsMzgpXCJdLFsuMTI1LFwicmdiKDE4OSwwLDM4KVwiXSxbLjI1LFwicmdiKDIyNywyNiwyOClcIl0sWy4zNzUsXCJyZ2IoMjUyLDc4LDQyKVwiXSxbLjUsXCJyZ2IoMjUzLDE0MSw2MClcIl0sWy42MjUsXCJyZ2IoMjU0LDE3OCw3NilcIl0sWy43NSxcInJnYigyNTQsMjE3LDExOClcIl0sWy44NzUsXCJyZ2IoMjU1LDIzNywxNjApXCJdLFsxLFwicmdiKDI1NSwyNTUsMjA0KVwiXV0sQmx1ZXJlZDpbWzAsXCJyZ2IoMCwwLDI1NSlcIl0sWzEsXCJyZ2IoMjU1LDAsMClcIl1dLFJkQnU6W1swLFwicmdiKDUsMTAsMTcyKVwiXSxbLjM1LFwicmdiKDEwNiwxMzcsMjQ3KVwiXSxbLjUsXCJyZ2IoMTkwLDE5MCwxOTApXCJdLFsuNixcInJnYigyMjAsMTcwLDEzMilcIl0sWy43LFwicmdiKDIzMCwxNDUsOTApXCJdLFsxLFwicmdiKDE3OCwxMCwyOClcIl1dLFJlZHM6W1swLFwicmdiKDIyMCwyMjAsMjIwKVwiXSxbLjIsXCJyZ2IoMjQ1LDE5NSwxNTcpXCJdLFsuNCxcInJnYigyNDUsMTYwLDEwNSlcIl0sWzEsXCJyZ2IoMTc4LDEwLDI4KVwiXV0sQmx1ZXM6W1swLFwicmdiKDUsMTAsMTcyKVwiXSxbLjM1LFwicmdiKDQwLDYwLDE5MClcIl0sWy41LFwicmdiKDcwLDEwMCwyNDUpXCJdLFsuNixcInJnYig5MCwxMjAsMjQ1KVwiXSxbLjcsXCJyZ2IoMTA2LDEzNywyNDcpXCJdLFsxLFwicmdiKDIyMCwyMjAsMjIwKVwiXV0sUGljbmljOltbMCxcInJnYigwLDAsMjU1KVwiXSxbLjEsXCJyZ2IoNTEsMTUzLDI1NSlcIl0sWy4yLFwicmdiKDEwMiwyMDQsMjU1KVwiXSxbLjMsXCJyZ2IoMTUzLDIwNCwyNTUpXCJdLFsuNCxcInJnYigyMDQsMjA0LDI1NSlcIl0sWy41LFwicmdiKDI1NSwyNTUsMjU1KVwiXSxbLjYsXCJyZ2IoMjU1LDIwNCwyNTUpXCJdLFsuNyxcInJnYigyNTUsMTUzLDI1NSlcIl0sWy44LFwicmdiKDI1NSwxMDIsMjA0KVwiXSxbLjksXCJyZ2IoMjU1LDEwMiwxMDIpXCJdLFsxLFwicmdiKDI1NSwwLDApXCJdXSxSYWluYm93OltbMCxcInJnYigxNTAsMCw5MClcIl0sWy4xMjUsXCJyZ2IoMCwwLDIwMClcIl0sWy4yNSxcInJnYigwLDI1LDI1NSlcIl0sWy4zNzUsXCJyZ2IoMCwxNTIsMjU1KVwiXSxbLjUsXCJyZ2IoNDQsMjU1LDE1MClcIl0sWy42MjUsXCJyZ2IoMTUxLDI1NSwwKVwiXSxbLjc1LFwicmdiKDI1NSwyMzQsMClcIl0sWy44NzUsXCJyZ2IoMjU1LDExMSwwKVwiXSxbMSxcInJnYigyNTUsMCwwKVwiXV0sUG9ydGxhbmQ6W1swLFwicmdiKDEyLDUxLDEzMSlcIl0sWy4yNSxcInJnYigxMCwxMzYsMTg2KVwiXSxbLjUsXCJyZ2IoMjQyLDIxMSw1NilcIl0sWy43NSxcInJnYigyNDIsMTQzLDU2KVwiXSxbMSxcInJnYigyMTcsMzAsMzApXCJdXSxKZXQ6W1swLFwicmdiKDAsMCwxMzEpXCJdLFsuMTI1LFwicmdiKDAsNjAsMTcwKVwiXSxbLjM3NSxcInJnYig1LDI1NSwyNTUpXCJdLFsuNjI1LFwicmdiKDI1NSwyNTUsMClcIl0sWy44NzUsXCJyZ2IoMjUwLDAsMClcIl0sWzEsXCJyZ2IoMTI4LDAsMClcIl1dLEhvdDpbWzAsXCJyZ2IoMCwwLDApXCJdLFsuMyxcInJnYigyMzAsMCwwKVwiXSxbLjYsXCJyZ2IoMjU1LDIxMCwwKVwiXSxbMSxcInJnYigyNTUsMjU1LDI1NSlcIl1dLEJsYWNrYm9keTpbWzAsXCJyZ2IoMCwwLDApXCJdLFsuMixcInJnYigyMzAsMCwwKVwiXSxbLjQsXCJyZ2IoMjMwLDIxMCwwKVwiXSxbLjcsXCJyZ2IoMjU1LDI1NSwyNTUpXCJdLFsxLFwicmdiKDE2MCwyMDAsMjU1KVwiXV0sRWFydGg6W1swLFwicmdiKDAsMCwxMzApXCJdLFsuMSxcInJnYigwLDE4MCwxODApXCJdLFsuMixcInJnYig0MCwyMTAsNDApXCJdLFsuNCxcInJnYigyMzAsMjMwLDUwKVwiXSxbLjYsXCJyZ2IoMTIwLDcwLDIwKVwiXSxbMSxcInJnYigyNTUsMjU1LDI1NSlcIl1dLEVsZWN0cmljOltbMCxcInJnYigwLDAsMClcIl0sWy4xNSxcInJnYigzMCwwLDEwMClcIl0sWy40LFwicmdiKDEyMCwwLDEwMClcIl0sWy42LFwicmdiKDE2MCw5MCwwKVwiXSxbLjgsXCJyZ2IoMjMwLDIwMCwwKVwiXSxbMSxcInJnYigyNTUsMjUwLDIyMClcIl1dLFZpcmlkaXM6W1swLFwiIzQ0MDE1NFwiXSxbLjA2Mjc0NTA5ODAzOTIxNTY5LFwiIzQ4MTg2YVwiXSxbLjEyNTQ5MDE5NjA3ODQzMTM3LFwiIzQ3MmQ3YlwiXSxbLjE4ODIzNTI5NDExNzY0NzA2LFwiIzQyNDA4NlwiXSxbLjI1MDk4MDM5MjE1Njg2Mjc0LFwiIzNiNTI4YlwiXSxbLjMxMzcyNTQ5MDE5NjA3ODQsXCIjMzM2MzhkXCJdLFsuMzc2NDcwNTg4MjM1Mjk0MSxcIiMyYzcyOGVcIl0sWy40MzkyMTU2ODYyNzQ1MDk4LFwiIzI2ODI4ZVwiXSxbLjUwMTk2MDc4NDMxMzcyNTUsXCIjMjE5MThjXCJdLFsuNTY0NzA1ODgyMzUyOTQxMixcIiMxZmEwODhcIl0sWy42Mjc0NTA5ODAzOTIxNTY5LFwiIzI4YWU4MFwiXSxbLjY5MDE5NjA3ODQzMTM3MjUsXCIjM2ZiYzczXCJdLFsuNzUyOTQxMTc2NDcwNTg4MixcIiM1ZWM5NjJcIl0sWy44MTU2ODYyNzQ1MDk4MDM5LFwiIzg0ZDQ0YlwiXSxbLjg3ODQzMTM3MjU0OTAxOTYsXCIjYWRkYzMwXCJdLFsuOTQxMTc2NDcwNTg4MjM1MyxcIiNkOGUyMTlcIl0sWzEsXCIjZmRlNzI1XCJdXSxDaXZpZGlzOltbMCxcInJnYigwLDMyLDc2KVwiXSxbLjA1ODgyNCxcInJnYigwLDQyLDEwMilcIl0sWy4xMTc2NDcsXCJyZ2IoMCw1MiwxMTApXCJdLFsuMTc2NDcxLFwicmdiKDM5LDYzLDEwOClcIl0sWy4yMzUyOTQsXCJyZ2IoNjAsNzQsMTA3KVwiXSxbLjI5NDExOCxcInJnYig3Niw4NSwxMDcpXCJdLFsuMzUyOTQxLFwicmdiKDkxLDk1LDEwOSlcIl0sWy40MTE3NjUsXCJyZ2IoMTA0LDEwNiwxMTIpXCJdLFsuNDcwNTg4LFwicmdiKDExNywxMTcsMTE3KVwiXSxbLjUyOTQxMixcInJnYigxMzEsMTI5LDEyMClcIl0sWy41ODgyMzUsXCJyZ2IoMTQ2LDE0MCwxMjApXCJdLFsuNjQ3MDU5LFwicmdiKDE2MSwxNTIsMTE4KVwiXSxbLjcwNTg4MixcInJnYigxNzYsMTY1LDExNClcIl0sWy43NjQ3MDYsXCJyZ2IoMTkyLDE3NywxMDkpXCJdLFsuODIzNTI5LFwicmdiKDIwOSwxOTEsMTAyKVwiXSxbLjg4MjM1MyxcInJnYigyMjUsMjA0LDkyKVwiXSxbLjk0MTE3NixcInJnYigyNDMsMjE5LDc5KVwiXSxbMSxcInJnYigyNTUsMjMzLDY5KVwiXV19LGE9aS5SZEJ1O2Z1bmN0aW9uIG8odCl7dmFyIGU9MDtpZighQXJyYXkuaXNBcnJheSh0KXx8dC5sZW5ndGg8MilyZXR1cm4hMTtpZighdFswXXx8IXRbdC5sZW5ndGgtMV0pcmV0dXJuITE7aWYoMCE9K3RbMF1bMF18fDEhPSt0W3QubGVuZ3RoLTFdWzBdKXJldHVybiExO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgaT10W3JdO2lmKDIhPT1pLmxlbmd0aHx8K2lbMF08ZXx8IW4oaVsxXSkuaXNWYWxpZCgpKXJldHVybiExO2U9K2lbMF19cmV0dXJuITB9ZS5leHBvcnRzPXtzY2FsZXM6aSxkZWZhdWx0U2NhbGU6YSxnZXQ6ZnVuY3Rpb24odCxlKXtpZihlfHwoZT1hKSwhdClyZXR1cm4gZTtmdW5jdGlvbiByKCl7dHJ5e3Q9aVt0XXx8SlNPTi5wYXJzZSh0KX1jYXRjaChyKXt0PWV9fXJldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiYocigpLFwic3RyaW5nXCI9PXR5cGVvZiB0JiZyKCkpLG8odCk/dDplfSxpc1ZhbGlkOmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT1pW3RdfHxvKHQpfX19LHt0aW55Y29sb3IyOjUyMn1dLDU5NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPSh0LXIpLyhuLXIpLG89YStlLyhuLXIpLHM9KGErbykvMjtyZXR1cm5cImxlZnRcIj09PWl8fFwiYm90dG9tXCI9PT1pP2E6XCJjZW50ZXJcIj09PWl8fFwibWlkZGxlXCI9PT1pP3M6XCJyaWdodFwiPT09aXx8XCJ0b3BcIj09PWk/bzphPDIvMy1zP2E6bz40LzMtcz9vOnN9fSx7fV0sNTk1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPVtbXCJzdy1yZXNpemVcIixcInMtcmVzaXplXCIsXCJzZS1yZXNpemVcIl0sW1widy1yZXNpemVcIixcIm1vdmVcIixcImUtcmVzaXplXCJdLFtcIm53LXJlc2l6ZVwiLFwibi1yZXNpemVcIixcIm5lLXJlc2l6ZVwiXV07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3JldHVybiB0PVwibGVmdFwiPT09cj8wOlwiY2VudGVyXCI9PT1yPzE6XCJyaWdodFwiPT09cj8yOm4uY29uc3RyYWluKE1hdGguZmxvb3IoMyp0KSwwLDIpLGU9XCJib3R0b21cIj09PWE/MDpcIm1pZGRsZVwiPT09YT8xOlwidG9wXCI9PT1hPzI6bi5jb25zdHJhaW4oTWF0aC5mbG9vcigzKmUpLDAsMiksaVtlXVt0XX19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDU5NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJtb3VzZS1ldmVudC1vZmZzZXRcIiksaT10KFwiaGFzLWhvdmVyXCIpLGE9dChcImhhcy1wYXNzaXZlLWV2ZW50c1wiKSxvPXQoXCIuLi8uLi9saWJcIikucmVtb3ZlRWxlbWVudCxzPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzXCIpLGw9dChcIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnNcIiksYz1lLmV4cG9ydHM9e307Yy5hbGlnbj10KFwiLi9hbGlnblwiKSxjLmdldEN1cnNvcj10KFwiLi9jdXJzb3JcIik7dmFyIHU9dChcIi4vdW5ob3ZlclwiKTtmdW5jdGlvbiBoKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTt0LmNsYXNzTmFtZT1cImRyYWdjb3ZlclwiO3ZhciBlPXQuc3R5bGU7cmV0dXJuIGUucG9zaXRpb249XCJmaXhlZFwiLGUubGVmdD0wLGUucmlnaHQ9MCxlLnRvcD0wLGUuYm90dG9tPTAsZS56SW5kZXg9OTk5OTk5OTk5LGUuYmFja2dyb3VuZD1cIm5vbmVcIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLHR9ZnVuY3Rpb24gZih0KXtyZXR1cm4gbih0LmNoYW5nZWRUb3VjaGVzP3QuY2hhbmdlZFRvdWNoZXNbMF06dCxkb2N1bWVudC5ib2R5KX1jLnVuaG92ZXI9dS53cmFwcGVkLGMudW5ob3ZlclJhdz11LnJhdyxjLmluaXQ9ZnVuY3Rpb24odCl7dmFyIGUscixuLHUscCxkLGcsdixtPXQuZ2QseT0xLHg9bC5EQkxDTElDS0RFTEFZLGI9dC5lbGVtZW50O20uX21vdXNlRG93blRpbWV8fChtLl9tb3VzZURvd25UaW1lPTApLGIuc3R5bGUucG9pbnRlckV2ZW50cz1cImFsbFwiLGIub25tb3VzZWRvd249dyxhPyhiLl9vbnRvdWNoc3RhcnQmJmIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIixiLl9vbnRvdWNoc3RhcnQpLGIuX29udG91Y2hzdGFydD13LGIuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIix3LHtwYXNzaXZlOiExfSkpOmIub250b3VjaHN0YXJ0PXc7dmFyIF89dC5jbGFtcEZufHxmdW5jdGlvbih0LGUscil7cmV0dXJuIE1hdGguYWJzKHQpPHImJih0PTApLE1hdGguYWJzKGUpPHImJihlPTApLFt0LGVdfTtmdW5jdGlvbiB3KGEpe20uX2RyYWdnZWQ9ITEsbS5fZHJhZ2dpbmc9ITA7dmFyIG89ZihhKTtlPW9bMF0scj1vWzFdLGc9YS50YXJnZXQsZD1hLHY9Mj09PWEuYnV0dG9uc3x8YS5jdHJsS2V5LFwidW5kZWZpbmVkXCI9PXR5cGVvZiBhLmNsaWVudFgmJlwidW5kZWZpbmVkXCI9PXR5cGVvZiBhLmNsaWVudFkmJihhLmNsaWVudFg9ZSxhLmNsaWVudFk9ciksKG49KG5ldyBEYXRlKS5nZXRUaW1lKCkpLW0uX21vdXNlRG93blRpbWU8eD95Kz0xOih5PTEsbS5fbW91c2VEb3duVGltZT1uKSx0LnByZXBGbiYmdC5wcmVwRm4oYSxlLHIpLGkmJiF2PyhwPWgoKSkuc3R5bGUuY3Vyc29yPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGIpLmN1cnNvcjppfHwocD1kb2N1bWVudCx1PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuY3Vyc29yLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5jdXJzb3I9d2luZG93LmdldENvbXB1dGVkU3R5bGUoYikuY3Vyc29yKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLEEpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLEEpLCExIT09dC5kcmFnbW9kZSYmKGEucHJldmVudERlZmF1bHQoKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsayksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLGspKX1mdW5jdGlvbiBrKG4pe24ucHJldmVudERlZmF1bHQoKTt2YXIgaT1mKG4pLGE9dC5taW5EcmFnfHxzLk1JTkRSQUcsbz1fKGlbMF0tZSxpWzFdLXIsYSksbD1vWzBdLHU9b1sxXTsobHx8dSkmJihtLl9kcmFnZ2VkPSEwLGMudW5ob3ZlcihtKSksbS5fZHJhZ2dlZCYmdC5tb3ZlRm4mJiF2JiYobS5fZHJhZ2RhdGE9e2VsZW1lbnQ6YixkeDpsLGR5OnV9LHQubW92ZUZuKGwsdSkpfWZ1bmN0aW9uIEEoZSl7aWYoZGVsZXRlIG0uX2RyYWdkYXRhLCExIT09dC5kcmFnbW9kZSYmKGUucHJldmVudERlZmF1bHQoKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsayksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLGspKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLEEpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLEEpLGk/byhwKTp1JiYocC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuY3Vyc29yPXUsdT1udWxsKSxtLl9kcmFnZ2luZyl7aWYobS5fZHJhZ2dpbmc9ITEsKG5ldyBEYXRlKS5nZXRUaW1lKCktbS5fbW91c2VEb3duVGltZT54JiYoeT1NYXRoLm1heCh5LTEsMSkpLG0uX2RyYWdnZWQpdC5kb25lRm4mJnQuZG9uZUZuKCk7ZWxzZSBpZih0LmNsaWNrRm4mJnQuY2xpY2tGbih5LGQpLCF2KXt2YXIgcjt0cnl7cj1uZXcgTW91c2VFdmVudChcImNsaWNrXCIsZSl9Y2F0Y2godCl7dmFyIG49ZihlKTsocj1kb2N1bWVudC5jcmVhdGVFdmVudChcIk1vdXNlRXZlbnRzXCIpKS5pbml0TW91c2VFdmVudChcImNsaWNrXCIsZS5idWJibGVzLGUuY2FuY2VsYWJsZSxlLnZpZXcsZS5kZXRhaWwsZS5zY3JlZW5YLGUuc2NyZWVuWSxuWzBdLG5bMV0sZS5jdHJsS2V5LGUuYWx0S2V5LGUuc2hpZnRLZXksZS5tZXRhS2V5LGUuYnV0dG9uLGUucmVsYXRlZFRhcmdldCl9Zy5kaXNwYXRjaEV2ZW50KHIpfW0uX2RyYWdnaW5nPSExLG0uX2RyYWdnZWQ9ITF9ZWxzZSBtLl9kcmFnZ2VkPSExfX0sYy5jb3ZlclNsaXA9aH0se1wiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9uc1wiOjY3NyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHNcIjo3NTUsXCIuL2FsaWduXCI6NTk0LFwiLi9jdXJzb3JcIjo1OTUsXCIuL3VuaG92ZXJcIjo1OTcsXCJoYXMtaG92ZXJcIjo0MDMsXCJoYXMtcGFzc2l2ZS1ldmVudHNcIjo0MDQsXCJtb3VzZS1ldmVudC1vZmZzZXRcIjo0Mjl9XSw1OTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliL2V2ZW50c1wiKSxpPXQoXCIuLi8uLi9saWIvdGhyb3R0bGVcIiksYT10KFwiLi4vLi4vbGliL2dldF9ncmFwaF9kaXZcIiksbz10KFwiLi4vZngvY29uc3RhbnRzXCIpLHM9ZS5leHBvcnRzPXt9O3Mud3JhcHBlZD1mdW5jdGlvbih0LGUscil7KHQ9YSh0KSkuX2Z1bGxMYXlvdXQmJmkuY2xlYXIodC5fZnVsbExheW91dC5fdWlkK28uSE9WRVJJRCkscy5yYXcodCxlLHIpfSxzLnJhdz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsaT10Ll9ob3ZlcmRhdGE7ZXx8KGU9e30pLGUudGFyZ2V0JiYhMT09PW4udHJpZ2dlckhhbmRsZXIodCxcInBsb3RseV9iZWZvcmVob3ZlclwiLGUpfHwoci5faG92ZXJsYXllci5zZWxlY3RBbGwoXCJnXCIpLnJlbW92ZSgpLHIuX2hvdmVybGF5ZXIuc2VsZWN0QWxsKFwibGluZVwiKS5yZW1vdmUoKSxyLl9ob3ZlcmxheWVyLnNlbGVjdEFsbChcImNpcmNsZVwiKS5yZW1vdmUoKSx0Ll9ob3ZlcmRhdGE9dm9pZCAwLGUudGFyZ2V0JiZpJiZ0LmVtaXQoXCJwbG90bHlfdW5ob3ZlclwiLHtldmVudDplLHBvaW50czppfSkpfX0se1wiLi4vLi4vbGliL2V2ZW50c1wiOjY5MCxcIi4uLy4uL2xpYi9nZXRfZ3JhcGhfZGl2XCI6Njk3LFwiLi4vLi4vbGliL3Rocm90dGxlXCI6NzI2LFwiLi4vZngvY29uc3RhbnRzXCI6NjExfV0sNTk4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ci5kYXNoPXt2YWxUeXBlOlwic3RyaW5nXCIsdmFsdWVzOltcInNvbGlkXCIsXCJkb3RcIixcImRhc2hcIixcImxvbmdkYXNoXCIsXCJkYXNoZG90XCIsXCJsb25nZGFzaGRvdFwiXSxkZmx0Olwic29saWRcIixlZGl0VHlwZTpcInN0eWxlXCJ9fSx7fV0sNTk5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcImZhc3QtaXNudW1lcmljXCIpLGE9dChcInRpbnljb2xvcjJcIiksbz10KFwiLi4vLi4vcmVnaXN0cnlcIikscz10KFwiLi4vY29sb3JcIiksbD10KFwiLi4vY29sb3JzY2FsZVwiKSxjPXQoXCIuLi8uLi9saWJcIiksdT10KFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCIpLGg9dChcIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzXCIpLGY9dChcIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIikuTElORV9TUEFDSU5HLHA9dChcIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnNcIikuREVTRUxFQ1RESU0sZD10KFwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXNcIiksZz10KFwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jXCIpLHY9ZS5leHBvcnRzPXt9O3YuZm9udD1mdW5jdGlvbih0LGUscixuKXtjLmlzUGxhaW5PYmplY3QoZSkmJihuPWUuY29sb3Iscj1lLnNpemUsZT1lLmZhbWlseSksZSYmdC5zdHlsZShcImZvbnQtZmFtaWx5XCIsZSkscisxJiZ0LnN0eWxlKFwiZm9udC1zaXplXCIscitcInB4XCIpLG4mJnQuY2FsbChzLmZpbGwsbil9LHYuc2V0UG9zaXRpb249ZnVuY3Rpb24odCxlLHIpe3QuYXR0cihcInhcIixlKS5hdHRyKFwieVwiLHIpfSx2LnNldFNpemU9ZnVuY3Rpb24odCxlLHIpe3QuYXR0cihcIndpZHRoXCIsZSkuYXR0cihcImhlaWdodFwiLHIpfSx2LnNldFJlY3Q9ZnVuY3Rpb24odCxlLHIsbixpKXt0LmNhbGwodi5zZXRQb3NpdGlvbixlLHIpLmNhbGwodi5zZXRTaXplLG4saSl9LHYudHJhbnNsYXRlUG9pbnQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9ci5jMnAodC54KSxvPW4uYzJwKHQueSk7cmV0dXJuISEoaShhKSYmaShvKSYmZS5ub2RlKCkpJiYoXCJ0ZXh0XCI9PT1lLm5vZGUoKS5ub2RlTmFtZT9lLmF0dHIoXCJ4XCIsYSkuYXR0cihcInlcIixvKTplLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIithK1wiLFwiK28rXCIpXCIpLCEwKX0sdi50cmFuc2xhdGVQb2ludHM9ZnVuY3Rpb24odCxlLHIpe3QuZWFjaChmdW5jdGlvbih0KXt2YXIgaT1uLnNlbGVjdCh0aGlzKTt2LnRyYW5zbGF0ZVBvaW50KHQsaSxlLHIpfSl9LHYuaGlkZU91dHNpZGVSYW5nZVBvaW50PWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtlLmF0dHIoXCJkaXNwbGF5XCIsci5pc1B0V2l0aGluUmFuZ2UodCxpKSYmbi5pc1B0V2l0aGluUmFuZ2UodCxhKT9udWxsOlwibm9uZVwiKX0sdi5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzPWZ1bmN0aW9uKHQsZSl7aWYoZS5faGFzQ2xpcE9uQXhpc0ZhbHNlKXt2YXIgcj1lLnhheGlzLGk9ZS55YXhpczt0LmVhY2goZnVuY3Rpb24oZSl7dmFyIGE9ZVswXS50cmFjZSxvPWEueGNhbGVuZGFyLHM9YS55Y2FsZW5kYXIsbD1cImJhclwiPT09YS50eXBlP1wiLmJhcnRleHRcIjpcIndhdGVyZmFsbFwiPT09YS50eXBlP1wiLmJhcnRleHQsLmxpbmVcIjpcIi5wb2ludCwudGV4dHBvaW50XCI7dC5zZWxlY3RBbGwobCkuZWFjaChmdW5jdGlvbih0KXt2LmhpZGVPdXRzaWRlUmFuZ2VQb2ludCh0LG4uc2VsZWN0KHRoaXMpLHIsaSxvLHMpfSl9KX19LHYuY3Jpc3BSb3VuZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIGUmJmkoZSk/dC5fY29udGV4dC5zdGF0aWNQbG90P2U6ZTwxPzE6TWF0aC5yb3VuZChlKTpyfHwwfSx2LnNpbmdsZUxpbmVTdHlsZT1mdW5jdGlvbih0LGUscixuLGkpe2Uuc3R5bGUoXCJmaWxsXCIsXCJub25lXCIpO3ZhciBhPSgoKHR8fFtdKVswXXx8e30pLnRyYWNlfHx7fSkubGluZXx8e30sbz1yfHxhLndpZHRofHwwLGw9aXx8YS5kYXNofHxcIlwiO3Muc3Ryb2tlKGUsbnx8YS5jb2xvciksdi5kYXNoTGluZShlLGwsbyl9LHYubGluZUdyb3VwU3R5bGU9ZnVuY3Rpb24odCxlLHIsaSl7dC5zdHlsZShcImZpbGxcIixcIm5vbmVcIikuZWFjaChmdW5jdGlvbih0KXt2YXIgYT0oKCh0fHxbXSlbMF18fHt9KS50cmFjZXx8e30pLmxpbmV8fHt9LG89ZXx8YS53aWR0aHx8MCxsPWl8fGEuZGFzaHx8XCJcIjtuLnNlbGVjdCh0aGlzKS5jYWxsKHMuc3Ryb2tlLHJ8fGEuY29sb3IpLmNhbGwodi5kYXNoTGluZSxsLG8pfSl9LHYuZGFzaExpbmU9ZnVuY3Rpb24odCxlLHIpe3I9K3J8fDAsZT12LmRhc2hTdHlsZShlLHIpLHQuc3R5bGUoe1wic3Ryb2tlLWRhc2hhcnJheVwiOmUsXCJzdHJva2Utd2lkdGhcIjpyK1wicHhcIn0pfSx2LmRhc2hTdHlsZT1mdW5jdGlvbih0LGUpe2U9K2V8fDE7dmFyIHI9TWF0aC5tYXgoZSwzKTtyZXR1cm5cInNvbGlkXCI9PT10P3Q9XCJcIjpcImRvdFwiPT09dD90PXIrXCJweCxcIityK1wicHhcIjpcImRhc2hcIj09PXQ/dD0zKnIrXCJweCxcIiszKnIrXCJweFwiOlwibG9uZ2Rhc2hcIj09PXQ/dD01KnIrXCJweCxcIis1KnIrXCJweFwiOlwiZGFzaGRvdFwiPT09dD90PTMqcitcInB4LFwiK3IrXCJweCxcIityK1wicHgsXCIrcitcInB4XCI6XCJsb25nZGFzaGRvdFwiPT09dCYmKHQ9NSpyK1wicHgsXCIrMipyK1wicHgsXCIrcitcInB4LFwiKzIqcitcInB4XCIpLHR9LHYuc2luZ2xlRmlsbFN0eWxlPWZ1bmN0aW9uKHQpe3ZhciBlPSgoKG4uc2VsZWN0KHQubm9kZSgpKS5kYXRhKClbMF18fFtdKVswXXx8e30pLnRyYWNlfHx7fSkuZmlsbGNvbG9yO2UmJnQuY2FsbChzLmZpbGwsZSl9LHYuZmlsbEdyb3VwU3R5bGU9ZnVuY3Rpb24odCl7dC5zdHlsZShcInN0cm9rZS13aWR0aFwiLDApLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcyk7dFswXS50cmFjZSYmZS5jYWxsKHMuZmlsbCx0WzBdLnRyYWNlLmZpbGxjb2xvcil9KX07dmFyIG09dChcIi4vc3ltYm9sX2RlZnNcIik7di5zeW1ib2xOYW1lcz1bXSx2LnN5bWJvbEZ1bmNzPVtdLHYuc3ltYm9sTmVlZExpbmVzPXt9LHYuc3ltYm9sTm9Eb3Q9e30sdi5zeW1ib2xOb0ZpbGw9e30sdi5zeW1ib2xMaXN0PVtdLE9iamVjdC5rZXlzKG0pLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9bVt0XTt2LnN5bWJvbExpc3Q9di5zeW1ib2xMaXN0LmNvbmNhdChbZS5uLHQsZS5uKzEwMCx0K1wiLW9wZW5cIl0pLHYuc3ltYm9sTmFtZXNbZS5uXT10LHYuc3ltYm9sRnVuY3NbZS5uXT1lLmYsZS5uZWVkTGluZSYmKHYuc3ltYm9sTmVlZExpbmVzW2Uubl09ITApLGUubm9Eb3Q/di5zeW1ib2xOb0RvdFtlLm5dPSEwOnYuc3ltYm9sTGlzdD12LnN5bWJvbExpc3QuY29uY2F0KFtlLm4rMjAwLHQrXCItZG90XCIsZS5uKzMwMCx0K1wiLW9wZW4tZG90XCJdKSxlLm5vRmlsbCYmKHYuc3ltYm9sTm9GaWxsW2Uubl09ITApfSk7dmFyIHk9di5zeW1ib2xOYW1lcy5sZW5ndGgseD1cIk0wLDAuNUwwLjUsMEwwLC0wLjVMLTAuNSwwWlwiO2Z1bmN0aW9uIGIodCxlKXt2YXIgcj10JTEwMDtyZXR1cm4gdi5zeW1ib2xGdW5jc1tyXShlKSsodD49MjAwP3g6XCJcIil9di5zeW1ib2xOdW1iZXI9ZnVuY3Rpb24odCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpe3ZhciBlPTA7dC5pbmRleE9mKFwiLW9wZW5cIik+MCYmKGU9MTAwLHQ9dC5yZXBsYWNlKFwiLW9wZW5cIixcIlwiKSksdC5pbmRleE9mKFwiLWRvdFwiKT4wJiYoZSs9MjAwLHQ9dC5yZXBsYWNlKFwiLWRvdFwiLFwiXCIpKSwodD12LnN5bWJvbE5hbWVzLmluZGV4T2YodCkpPj0wJiYodCs9ZSl9cmV0dXJuIHQlMTAwPj15fHx0Pj00MDA/MDpNYXRoLmZsb29yKE1hdGgubWF4KHQsMCkpfTt2YXIgXz17eDE6MSx4MjowLHkxOjAseTI6MH0sdz17eDE6MCx4MjowLHkxOjEseTI6MH0saz1uLmZvcm1hdChcIn4uMWZcIiksQT17cmFkaWFsOntub2RlOlwicmFkaWFsR3JhZGllbnRcIn0scmFkaWFscmV2ZXJzZWQ6e25vZGU6XCJyYWRpYWxHcmFkaWVudFwiLHJldmVyc2VkOiEwfSxob3Jpem9udGFsOntub2RlOlwibGluZWFyR3JhZGllbnRcIixhdHRyczpffSxob3Jpem9udGFscmV2ZXJzZWQ6e25vZGU6XCJsaW5lYXJHcmFkaWVudFwiLGF0dHJzOl8scmV2ZXJzZWQ6ITB9LHZlcnRpY2FsOntub2RlOlwibGluZWFyR3JhZGllbnRcIixhdHRyczp3fSx2ZXJ0aWNhbHJldmVyc2VkOntub2RlOlwibGluZWFyR3JhZGllbnRcIixhdHRyczp3LHJldmVyc2VkOiEwfX07di5ncmFkaWVudD1mdW5jdGlvbih0LGUscixpLG8sbCl7Zm9yKHZhciB1PW8ubGVuZ3RoLGg9QVtpXSxmPW5ldyBBcnJheSh1KSxwPTA7cDx1O3ArKyloLnJldmVyc2VkP2ZbdS0xLXBdPVtrKDEwMCooMS1vW3BdWzBdKSksb1twXVsxXV06ZltwXT1baygxMDAqb1twXVswXSksb1twXVsxXV07dmFyIGQ9XCJnXCIrZS5fZnVsbExheW91dC5fdWlkK1wiLVwiK3IsZz1lLl9mdWxsTGF5b3V0Ll9kZWZzLnNlbGVjdChcIi5ncmFkaWVudHNcIikuc2VsZWN0QWxsKFwiI1wiK2QpLmRhdGEoW2krZi5qb2luKFwiO1wiKV0sYy5pZGVudGl0eSk7Zy5leGl0KCkucmVtb3ZlKCksZy5lbnRlcigpLmFwcGVuZChoLm5vZGUpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTtoLmF0dHJzJiZ0LmF0dHIoaC5hdHRycyksdC5hdHRyKFwiaWRcIixkKTt2YXIgZT10LnNlbGVjdEFsbChcInN0b3BcIikuZGF0YShmKTtlLmV4aXQoKS5yZW1vdmUoKSxlLmVudGVyKCkuYXBwZW5kKFwic3RvcFwiKSxlLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9YSh0WzFdKTtuLnNlbGVjdCh0aGlzKS5hdHRyKHtvZmZzZXQ6dFswXStcIiVcIixcInN0b3AtY29sb3JcIjpzLnRpbnlSR0IoZSksXCJzdG9wLW9wYWNpdHlcIjplLmdldEFscGhhKCl9KX0pfSksdC5zdHlsZShsLEQoZCxlKSkuc3R5bGUobCtcIi1vcGFjaXR5XCIsbnVsbCl9LHYuaW5pdEdyYWRpZW50cz1mdW5jdGlvbih0KXtjLmVuc3VyZVNpbmdsZSh0Ll9mdWxsTGF5b3V0Ll9kZWZzLFwiZ1wiLFwiZ3JhZGllbnRzXCIpLnNlbGVjdEFsbChcImxpbmVhckdyYWRpZW50LHJhZGlhbEdyYWRpZW50XCIpLnJlbW92ZSgpfSx2LnBvaW50U3R5bGU9ZnVuY3Rpb24odCxlLHIpe2lmKHQuc2l6ZSgpKXt2YXIgaT12Lm1ha2VQb2ludFN0eWxlRm5zKGUpO3QuZWFjaChmdW5jdGlvbih0KXt2LnNpbmdsZVBvaW50U3R5bGUodCxuLnNlbGVjdCh0aGlzKSxlLGkscil9KX19LHYuc2luZ2xlUG9pbnRTdHlsZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXIubWFya2VyLG89YS5saW5lO2lmKGUuc3R5bGUoXCJvcGFjaXR5XCIsbi5zZWxlY3RlZE9wYWNpdHlGbj9uLnNlbGVjdGVkT3BhY2l0eUZuKHQpOnZvaWQgMD09PXQubW8/YS5vcGFjaXR5OnQubW8pLG4ubXMybXJjKXt2YXIgbDtsPVwidmFyaW91c1wiPT09dC5tc3x8XCJ2YXJpb3VzXCI9PT1hLnNpemU/MzpuLm1zMm1yYyh0Lm1zKSx0Lm1yYz1sLG4uc2VsZWN0ZWRTaXplRm4mJihsPXQubXJjPW4uc2VsZWN0ZWRTaXplRm4odCkpO3ZhciB1PXYuc3ltYm9sTnVtYmVyKHQubXh8fGEuc3ltYm9sKXx8MDt0Lm9tPXUlMjAwPj0xMDAsZS5hdHRyKFwiZFwiLGIodSxsKSl9dmFyIGgsZixwLGQ9ITE7aWYodC5zbylwPW8ub3V0bGllcndpZHRoLGY9by5vdXRsaWVyY29sb3IsaD1hLm91dGxpZXJjb2xvcjtlbHNle3ZhciBnPShvfHx7fSkud2lkdGg7cD0odC5tbHcrMXx8ZysxfHwodC50cmFjZT8odC50cmFjZS5tYXJrZXIubGluZXx8e30pLndpZHRoOjApKzEpLTF8fDAsZj1cIm1sY1wiaW4gdD90Lm1sY2M9bi5saW5lU2NhbGUodC5tbGMpOmMuaXNBcnJheU9yVHlwZWRBcnJheShvLmNvbG9yKT9zLmRlZmF1bHRMaW5lOm8uY29sb3IsYy5pc0FycmF5T3JUeXBlZEFycmF5KGEuY29sb3IpJiYoaD1zLmRlZmF1bHRMaW5lLGQ9ITApLGg9XCJtY1wiaW4gdD90Lm1jYz1uLm1hcmtlclNjYWxlKHQubWMpOmEuY29sb3J8fFwicmdiYSgwLDAsMCwwKVwiLG4uc2VsZWN0ZWRDb2xvckZuJiYoaD1uLnNlbGVjdGVkQ29sb3JGbih0KSl9aWYodC5vbSllLmNhbGwocy5zdHJva2UsaCkuc3R5bGUoe1wic3Ryb2tlLXdpZHRoXCI6KHB8fDEpK1wicHhcIixmaWxsOlwibm9uZVwifSk7ZWxzZXtlLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIscCtcInB4XCIpO3ZhciBtPWEuZ3JhZGllbnQseT10Lm1ndDtpZih5P2Q9ITA6eT1tJiZtLnR5cGUsQXJyYXkuaXNBcnJheSh5KSYmKHk9eVswXSxBW3ldfHwoeT0wKSkseSYmXCJub25lXCIhPT15KXt2YXIgeD10Lm1nYzt4P2Q9ITA6eD1tLmNvbG9yO3ZhciBfPXIudWlkO2QmJihfKz1cIi1cIit0LmkpLHYuZ3JhZGllbnQoZSxpLF8seSxbWzAseF0sWzEsaF1dLFwiZmlsbFwiKX1lbHNlIHMuZmlsbChlLGgpO3AmJnMuc3Ryb2tlKGUsZil9fSx2Lm1ha2VQb2ludFN0eWxlRm5zPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LHI9dC5tYXJrZXI7cmV0dXJuIGUubWFya2VyU2NhbGU9di50cnlDb2xvcnNjYWxlKHIsXCJcIiksZS5saW5lU2NhbGU9di50cnlDb2xvcnNjYWxlKHIsXCJsaW5lXCIpLG8udHJhY2VJcyh0LFwic3ltYm9sc1wiKSYmKGUubXMybXJjPWQuaXNCdWJibGUodCk/Zyh0KTpmdW5jdGlvbigpe3JldHVybihyLnNpemV8fDYpLzJ9KSx0LnNlbGVjdGVkcG9pbnRzJiZjLmV4dGVuZEZsYXQoZSx2Lm1ha2VTZWxlY3RlZFBvaW50U3R5bGVGbnModCkpLGV9LHYubWFrZVNlbGVjdGVkUG9pbnRTdHlsZUZucz1mdW5jdGlvbih0KXt2YXIgZT17fSxyPXQuc2VsZWN0ZWR8fHt9LG49dC51bnNlbGVjdGVkfHx7fSxpPXQubWFya2VyfHx7fSxhPXIubWFya2VyfHx7fSxzPW4ubWFya2VyfHx7fSxsPWkub3BhY2l0eSx1PWEub3BhY2l0eSxoPXMub3BhY2l0eSxmPXZvaWQgMCE9PXUsZD12b2lkIDAhPT1oOyhjLmlzQXJyYXlPclR5cGVkQXJyYXkobCl8fGZ8fGQpJiYoZS5zZWxlY3RlZE9wYWNpdHlGbj1mdW5jdGlvbih0KXt2YXIgZT12b2lkIDA9PT10Lm1vP2kub3BhY2l0eTp0Lm1vO3JldHVybiB0LnNlbGVjdGVkP2Y/dTplOmQ/aDpwKmV9KTt2YXIgZz1pLmNvbG9yLHY9YS5jb2xvcixtPXMuY29sb3I7KHZ8fG0pJiYoZS5zZWxlY3RlZENvbG9yRm49ZnVuY3Rpb24odCl7dmFyIGU9dC5tY2N8fGc7cmV0dXJuIHQuc2VsZWN0ZWQ/dnx8ZTptfHxlfSk7dmFyIHk9aS5zaXplLHg9YS5zaXplLGI9cy5zaXplLF89dm9pZCAwIT09eCx3PXZvaWQgMCE9PWI7cmV0dXJuIG8udHJhY2VJcyh0LFwic3ltYm9sc1wiKSYmKF98fHcpJiYoZS5zZWxlY3RlZFNpemVGbj1mdW5jdGlvbih0KXt2YXIgZT10Lm1yY3x8eS8yO3JldHVybiB0LnNlbGVjdGVkP18/eC8yOmU6dz9iLzI6ZX0pLGV9LHYubWFrZVNlbGVjdGVkVGV4dFN0eWxlRm5zPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LHI9dC5zZWxlY3RlZHx8e30sbj10LnVuc2VsZWN0ZWR8fHt9LGk9dC50ZXh0Zm9udHx8e30sYT1yLnRleHRmb250fHx7fSxvPW4udGV4dGZvbnR8fHt9LGw9aS5jb2xvcixjPWEuY29sb3IsdT1vLmNvbG9yO3JldHVybiBlLnNlbGVjdGVkVGV4dENvbG9yRm49ZnVuY3Rpb24odCl7dmFyIGU9dC50Y3x8bDtyZXR1cm4gdC5zZWxlY3RlZD9jfHxlOnV8fChjP2U6cy5hZGRPcGFjaXR5KGUscCkpfSxlfSx2LnNlbGVjdGVkUG9pbnRTdHlsZT1mdW5jdGlvbih0LGUpe2lmKHQuc2l6ZSgpJiZlLnNlbGVjdGVkcG9pbnRzKXt2YXIgcj12Lm1ha2VTZWxlY3RlZFBvaW50U3R5bGVGbnMoZSksaT1lLm1hcmtlcnx8e30sYT1bXTtyLnNlbGVjdGVkT3BhY2l0eUZuJiZhLnB1c2goZnVuY3Rpb24odCxlKXt0LnN0eWxlKFwib3BhY2l0eVwiLHIuc2VsZWN0ZWRPcGFjaXR5Rm4oZSkpfSksci5zZWxlY3RlZENvbG9yRm4mJmEucHVzaChmdW5jdGlvbih0LGUpe3MuZmlsbCh0LHIuc2VsZWN0ZWRDb2xvckZuKGUpKX0pLHIuc2VsZWN0ZWRTaXplRm4mJmEucHVzaChmdW5jdGlvbih0LGUpe3ZhciBuPWUubXh8fGkuc3ltYm9sfHwwLGE9ci5zZWxlY3RlZFNpemVGbihlKTt0LmF0dHIoXCJkXCIsYih2LnN5bWJvbE51bWJlcihuKSxhKSksZS5tcmMyPWF9KSxhLmxlbmd0aCYmdC5lYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPTA7cjxhLmxlbmd0aDtyKyspYVtyXShlLHQpfSl9fSx2LnRyeUNvbG9yc2NhbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lP2MubmVzdGVkUHJvcGVydHkodCxlKS5nZXQoKTp0O2lmKHIpe3ZhciBuPXIuY29sb3JzY2FsZSxpPXIuY29sb3I7aWYobiYmYy5pc0FycmF5T3JUeXBlZEFycmF5KGkpKXJldHVybiBsLm1ha2VDb2xvclNjYWxlRnVuYyhsLmV4dHJhY3RTY2FsZShyLHtjTGV0dGVyOlwiY1wifSkpfXJldHVybiBjLmlkZW50aXR5fTt2YXIgVD17c3RhcnQ6MSxlbmQ6LTEsbWlkZGxlOjAsYm90dG9tOjEsdG9wOi0xfTtmdW5jdGlvbiBNKHQsZSxyLGkpe3ZhciBhPW4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpLG89LTEhPT1lLmluZGV4T2YoXCJ0b3BcIik/XCJ0b3BcIjotMSE9PWUuaW5kZXhPZihcImJvdHRvbVwiKT9cImJvdHRvbVwiOlwibWlkZGxlXCIscz0tMSE9PWUuaW5kZXhPZihcImxlZnRcIik/XCJlbmRcIjotMSE9PWUuaW5kZXhPZihcInJpZ2h0XCIpP1wic3RhcnRcIjpcIm1pZGRsZVwiLGw9aT9pLy44KzE6MCxjPSh1LmxpbmVDb3VudCh0KS0xKSpmKzEsaD1UW3NdKmwscD0uNzUqcitUW29dKmwrKFRbb10tMSkqYypyLzI7dC5hdHRyKFwidGV4dC1hbmNob3JcIixzKSxhLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIitoK1wiLFwiK3ArXCIpXCIpfWZ1bmN0aW9uIFModCxlKXt2YXIgcj10LnRzfHxlLnRleHRmb250LnNpemU7cmV0dXJuIGkocikmJnI+MD9yOjB9di50ZXh0UG9pbnRTdHlsZT1mdW5jdGlvbih0LGUscil7aWYodC5zaXplKCkpe3ZhciBpO2lmKGUuc2VsZWN0ZWRwb2ludHMpe3ZhciBhPXYubWFrZVNlbGVjdGVkVGV4dFN0eWxlRm5zKGUpO2k9YS5zZWxlY3RlZFRleHRDb2xvckZufXQuZWFjaChmdW5jdGlvbih0KXt2YXIgYT1uLnNlbGVjdCh0aGlzKSxvPWMuZXh0cmFjdE9wdGlvbih0LGUsXCJ0eFwiLFwidGV4dFwiKTtpZihvfHwwPT09byl7dmFyIHM9dC50cHx8ZS50ZXh0cG9zaXRpb24sbD1TKHQsZSksaD1pP2kodCk6dC50Y3x8ZS50ZXh0Zm9udC5jb2xvcjthLmNhbGwodi5mb250LHQudGZ8fGUudGV4dGZvbnQuZmFtaWx5LGwsaCkudGV4dChvKS5jYWxsKHUuY29udmVydFRvVHNwYW5zLHIpLmNhbGwoTSxzLGwsdC5tcmMpfWVsc2UgYS5yZW1vdmUoKX0pfX0sdi5zZWxlY3RlZFRleHRTdHlsZT1mdW5jdGlvbih0LGUpe2lmKHQuc2l6ZSgpJiZlLnNlbGVjdGVkcG9pbnRzKXt2YXIgcj12Lm1ha2VTZWxlY3RlZFRleHRTdHlsZUZucyhlKTt0LmVhY2goZnVuY3Rpb24odCl7dmFyIGk9bi5zZWxlY3QodGhpcyksYT1yLnNlbGVjdGVkVGV4dENvbG9yRm4odCksbz10LnRwfHxlLnRleHRwb3NpdGlvbixsPVModCxlKTtzLmZpbGwoaSxhKSxNKGksbyxsLHQubXJjMnx8dC5tcmMpfSl9fTt2YXIgRT0uNTtmdW5jdGlvbiBDKHQsZSxyLGkpe3ZhciBhPXRbMF0tZVswXSxvPXRbMV0tZVsxXSxzPXJbMF0tZVswXSxsPXJbMV0tZVsxXSxjPU1hdGgucG93KGEqYStvKm8sRS8yKSx1PU1hdGgucG93KHMqcytsKmwsRS8yKSxoPSh1KnUqYS1jKmMqcykqaSxmPSh1KnUqby1jKmMqbCkqaSxwPTMqdSooYyt1KSxkPTMqYyooYyt1KTtyZXR1cm5bW24ucm91bmQoZVswXSsocCYmaC9wKSwyKSxuLnJvdW5kKGVbMV0rKHAmJmYvcCksMildLFtuLnJvdW5kKGVbMF0tKGQmJmgvZCksMiksbi5yb3VuZChlWzFdLShkJiZmL2QpLDIpXV19di5zbW9vdGhvcGVuPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MylyZXR1cm5cIk1cIit0LmpvaW4oXCJMXCIpO3ZhciByLG49XCJNXCIrdFswXSxpPVtdO2ZvcihyPTE7cjx0Lmxlbmd0aC0xO3IrKylpLnB1c2goQyh0W3ItMV0sdFtyXSx0W3IrMV0sZSkpO2ZvcihuKz1cIlFcIitpWzBdWzBdK1wiIFwiK3RbMV0scj0yO3I8dC5sZW5ndGgtMTtyKyspbis9XCJDXCIraVtyLTJdWzFdK1wiIFwiK2lbci0xXVswXStcIiBcIit0W3JdO3JldHVybiBuKz1cIlFcIitpW3QubGVuZ3RoLTNdWzFdK1wiIFwiK3RbdC5sZW5ndGgtMV19LHYuc21vb3RoY2xvc2VkPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MylyZXR1cm5cIk1cIit0LmpvaW4oXCJMXCIpK1wiWlwiO3ZhciByLG49XCJNXCIrdFswXSxpPXQubGVuZ3RoLTEsYT1bQyh0W2ldLHRbMF0sdFsxXSxlKV07Zm9yKHI9MTtyPGk7cisrKWEucHVzaChDKHRbci0xXSx0W3JdLHRbcisxXSxlKSk7Zm9yKGEucHVzaChDKHRbaS0xXSx0W2ldLHRbMF0sZSkpLHI9MTtyPD1pO3IrKyluKz1cIkNcIithW3ItMV1bMV0rXCIgXCIrYVtyXVswXStcIiBcIit0W3JdO3JldHVybiBuKz1cIkNcIithW2ldWzFdK1wiIFwiK2FbMF1bMF0rXCIgXCIrdFswXStcIlpcIn07dmFyIEw9e2h2OmZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJIXCIrbi5yb3VuZChlWzBdLDIpK1wiVlwiK24ucm91bmQoZVsxXSwyKX0sdmg6ZnVuY3Rpb24odCxlKXtyZXR1cm5cIlZcIituLnJvdW5kKGVbMV0sMikrXCJIXCIrbi5yb3VuZChlWzBdLDIpfSxodmg6ZnVuY3Rpb24odCxlKXtyZXR1cm5cIkhcIituLnJvdW5kKCh0WzBdK2VbMF0pLzIsMikrXCJWXCIrbi5yb3VuZChlWzFdLDIpK1wiSFwiK24ucm91bmQoZVswXSwyKX0sdmh2OmZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJWXCIrbi5yb3VuZCgodFsxXStlWzFdKS8yLDIpK1wiSFwiK24ucm91bmQoZVswXSwyKStcIlZcIituLnJvdW5kKGVbMV0sMil9fSx6PWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJMXCIrbi5yb3VuZChlWzBdLDIpK1wiLFwiK24ucm91bmQoZVsxXSwyKX07di5zdGVwcz1mdW5jdGlvbih0KXt2YXIgZT1MW3RdfHx6O3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIHI9XCJNXCIrbi5yb3VuZCh0WzBdWzBdLDIpK1wiLFwiK24ucm91bmQodFswXVsxXSwyKSxpPTE7aTx0Lmxlbmd0aDtpKyspcis9ZSh0W2ktMV0sdFtpXSk7cmV0dXJuIHJ9fSx2Lm1ha2VUZXN0ZXI9ZnVuY3Rpb24oKXt2YXIgdD1jLmVuc3VyZVNpbmdsZUJ5SWQobi5zZWxlY3QoXCJib2R5XCIpLFwic3ZnXCIsXCJqcy1wbG90bHktdGVzdGVyXCIsZnVuY3Rpb24odCl7dC5hdHRyKGguc3ZnQXR0cnMpLnN0eWxlKHtwb3NpdGlvbjpcImFic29sdXRlXCIsbGVmdDpcIi0xMDAwMHB4XCIsdG9wOlwiLTEwMDAwcHhcIix3aWR0aDpcIjkwMDBweFwiLGhlaWdodDpcIjkwMDBweFwiLFwiei1pbmRleFwiOlwiMVwifSl9KSxlPWMuZW5zdXJlU2luZ2xlKHQsXCJwYXRoXCIsXCJqcy1yZWZlcmVuY2UtcG9pbnRcIixmdW5jdGlvbih0KXt0LmF0dHIoXCJkXCIsXCJNMCwwSDFWMUgwWlwiKS5zdHlsZSh7XCJzdHJva2Utd2lkdGhcIjowLGZpbGw6XCJibGFja1wifSl9KTt2LnRlc3Rlcj10LHYudGVzdHJlZj1lfSx2LnNhdmVkQkJveGVzPXt9O3ZhciBPPTA7ZnVuY3Rpb24gSSh0KXt2YXIgZT10LmdldEF0dHJpYnV0ZShcImRhdGEtdW5mb3JtYXR0ZWRcIik7aWYobnVsbCE9PWUpcmV0dXJuIGUrdC5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1hdGhcIikrdC5nZXRBdHRyaWJ1dGUoXCJ0ZXh0LWFuY2hvclwiKSt0LmdldEF0dHJpYnV0ZShcInN0eWxlXCIpfWZ1bmN0aW9uIEQodCxlKXtpZighdClyZXR1cm4gbnVsbDt2YXIgcj1lLl9jb250ZXh0O3JldHVyblwidXJsKCdcIisoci5fZXhwb3J0ZWRQbG90P1wiXCI6ci5fYmFzZVVybHx8XCJcIikrXCIjXCIrdCtcIicpXCJ9di5iQm94PWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLG87aWYocnx8KHI9SSh0KSkscil7aWYoaT12LnNhdmVkQkJveGVzW3JdKXJldHVybiBjLmV4dGVuZEZsYXQoe30saSl9ZWxzZSBpZigxPT09dC5jaGlsZE5vZGVzLmxlbmd0aCl7dmFyIHM9dC5jaGlsZE5vZGVzWzBdO2lmKHI9SShzKSl7dmFyIGw9K3MuZ2V0QXR0cmlidXRlKFwieFwiKXx8MCxoPStzLmdldEF0dHJpYnV0ZShcInlcIil8fDAsZj1zLmdldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiKTtpZighZil7dmFyIHA9di5iQm94KHMsITEscik7cmV0dXJuIGwmJihwLmxlZnQrPWwscC5yaWdodCs9bCksaCYmKHAudG9wKz1oLHAuYm90dG9tKz1oKSxwfWlmKHIrPVwiflwiK2wrXCJ+XCIraCtcIn5cIitmLGk9di5zYXZlZEJCb3hlc1tyXSlyZXR1cm4gYy5leHRlbmRGbGF0KHt9LGkpfX1lP2E9dDoobz12LnRlc3Rlci5ub2RlKCksYT10LmNsb25lTm9kZSghMCksby5hcHBlbmRDaGlsZChhKSksbi5zZWxlY3QoYSkuYXR0cihcInRyYW5zZm9ybVwiLG51bGwpLmNhbGwodS5wb3NpdGlvblRleHQsMCwwKTt2YXIgZD1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGc9di50ZXN0cmVmLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlfHxvLnJlbW92ZUNoaWxkKGEpO3ZhciBtPXtoZWlnaHQ6ZC5oZWlnaHQsd2lkdGg6ZC53aWR0aCxsZWZ0OmQubGVmdC1nLmxlZnQsdG9wOmQudG9wLWcudG9wLHJpZ2h0OmQucmlnaHQtZy5sZWZ0LGJvdHRvbTpkLmJvdHRvbS1nLnRvcH07cmV0dXJuIE8+PTFlNCYmKHYuc2F2ZWRCQm94ZXM9e30sTz0wKSxyJiYodi5zYXZlZEJCb3hlc1tyXT1tKSxPKyssYy5leHRlbmRGbGF0KHt9LG0pfSx2LnNldENsaXBVcmw9ZnVuY3Rpb24odCxlLHIpe3QuYXR0cihcImNsaXAtcGF0aFwiLEQoZSxyKSl9LHYuZ2V0VHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPSh0W3QuYXR0cj9cImF0dHJcIjpcImdldEF0dHJpYnV0ZVwiXShcInRyYW5zZm9ybVwiKXx8XCJcIikucmVwbGFjZSgvLipcXGJ0cmFuc2xhdGVcXCgoLT9cXGQqXFwuP1xcZCopW14tXFxkXSooLT9cXGQqXFwuP1xcZCopW15cXGRdLiovLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZSxyXS5qb2luKFwiIFwiKX0pLnNwbGl0KFwiIFwiKTtyZXR1cm57eDorZVswXXx8MCx5OitlWzFdfHwwfX0sdi5zZXRUcmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuYXR0cj9cImF0dHJcIjpcImdldEF0dHJpYnV0ZVwiLGk9dC5hdHRyP1wiYXR0clwiOlwic2V0QXR0cmlidXRlXCIsYT10W25dKFwidHJhbnNmb3JtXCIpfHxcIlwiO3JldHVybiBlPWV8fDAscj1yfHwwLGE9YS5yZXBsYWNlKC8oXFxidHJhbnNsYXRlXFwoLio/XFwpOz8pLyxcIlwiKS50cmltKCksYT0oYSs9XCIgdHJhbnNsYXRlKFwiK2UrXCIsIFwiK3IrXCIpXCIpLnRyaW0oKSx0W2ldKFwidHJhbnNmb3JtXCIsYSksYX0sdi5nZXRTY2FsZT1mdW5jdGlvbih0KXt2YXIgZT0odFt0LmF0dHI/XCJhdHRyXCI6XCJnZXRBdHRyaWJ1dGVcIl0oXCJ0cmFuc2Zvcm1cIil8fFwiXCIpLnJlcGxhY2UoLy4qXFxic2NhbGVcXCgoXFxkKlxcLj9cXGQqKVteXFxkXSooXFxkKlxcLj9cXGQqKVteXFxkXS4qLyxmdW5jdGlvbih0LGUscil7cmV0dXJuW2Uscl0uam9pbihcIiBcIil9KS5zcGxpdChcIiBcIik7cmV0dXJue3g6K2VbMF18fDEseTorZVsxXXx8MX19LHYuc2V0U2NhbGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuYXR0cj9cImF0dHJcIjpcImdldEF0dHJpYnV0ZVwiLGk9dC5hdHRyP1wiYXR0clwiOlwic2V0QXR0cmlidXRlXCIsYT10W25dKFwidHJhbnNmb3JtXCIpfHxcIlwiO3JldHVybiBlPWV8fDEscj1yfHwxLGE9YS5yZXBsYWNlKC8oXFxic2NhbGVcXCguKj9cXCk7PykvLFwiXCIpLnRyaW0oKSxhPShhKz1cIiBzY2FsZShcIitlK1wiLCBcIityK1wiKVwiKS50cmltKCksdFtpXShcInRyYW5zZm9ybVwiLGEpLGF9O3ZhciBQPS9cXHMqc2MuKi87di5zZXRQb2ludEdyb3VwU2NhbGU9ZnVuY3Rpb24odCxlLHIpe2lmKGU9ZXx8MSxyPXJ8fDEsdCl7dmFyIG49MT09PWUmJjE9PT1yP1wiXCI6XCIgc2NhbGUoXCIrZStcIixcIityK1wiKVwiO3QuZWFjaChmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmdldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiKXx8XCJcIikucmVwbGFjZShQLFwiXCIpO3Q9KHQrPW4pLnRyaW0oKSx0aGlzLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLHQpfSl9fTt2YXIgUj0vdHJhbnNsYXRlXFwoW14pXSpcXClcXHMqJC87di5zZXRUZXh0UG9pbnRzU2NhbGU9ZnVuY3Rpb24odCxlLHIpe3QmJnQuZWFjaChmdW5jdGlvbigpe3ZhciB0LGk9bi5zZWxlY3QodGhpcyksYT1pLnNlbGVjdChcInRleHRcIik7aWYoYS5ub2RlKCkpe3ZhciBvPXBhcnNlRmxvYXQoYS5hdHRyKFwieFwiKXx8MCkscz1wYXJzZUZsb2F0KGEuYXR0cihcInlcIil8fDApLGw9KGkuYXR0cihcInRyYW5zZm9ybVwiKXx8XCJcIikubWF0Y2goUik7dD0xPT09ZSYmMT09PXI/W106W1widHJhbnNsYXRlKFwiK28rXCIsXCIrcytcIilcIixcInNjYWxlKFwiK2UrXCIsXCIrcitcIilcIixcInRyYW5zbGF0ZShcIistbytcIixcIistcytcIilcIl0sbCYmdC5wdXNoKGwpLGkuYXR0cihcInRyYW5zZm9ybVwiLHQuam9pbihcIiBcIikpfX0pfX0se1wiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiOjY3MyxcIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnNcIjo2NzcsXCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiOjY3OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiOjcyNSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jXCI6MTA2OSxcIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzXCI6MTA3NixcIi4uL2NvbG9yXCI6NTc4LFwiLi4vY29sb3JzY2FsZVwiOjU5MCxcIi4vc3ltYm9sX2RlZnNcIjo2MDAsZDM6MTU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjIsdGlueWNvbG9yMjo1MjJ9XSw2MDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIik7ZS5leHBvcnRzPXtjaXJjbGU6e246MCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm5cIk1cIitlK1wiLDBBXCIrZStcIixcIitlK1wiIDAgMSwxIDAsLVwiK2UrXCJBXCIrZStcIixcIitlK1wiIDAgMCwxIFwiK2UrXCIsMFpcIn19LHNxdWFyZTp7bjoxLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVyblwiTVwiK2UrXCIsXCIrZStcIkgtXCIrZStcIlYtXCIrZStcIkhcIitlK1wiWlwifX0sZGlhbW9uZDp7bjoyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjMqdCwyKTtyZXR1cm5cIk1cIitlK1wiLDBMMCxcIitlK1wiTC1cIitlK1wiLDBMMCwtXCIrZStcIlpcIn19LGNyb3NzOntuOjMsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC40KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVyblwiTVwiK3IrXCIsXCIrZStcIkhcIitlK1wiVlwiK3IrXCJILVwiK2UrXCJWXCIrZStcIkgtXCIrcitcIlYtXCIrZStcIkgtXCIrZStcIlYtXCIrcitcIkhcIitlK1wiVi1cIitlK1wiSFwiK3IrXCJaXCJ9fSx4OntuOjQsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC44KnQvTWF0aC5zcXJ0KDIpLDIpLHI9XCJsXCIrZStcIixcIitlLGk9XCJsXCIrZStcIiwtXCIrZSxhPVwibC1cIitlK1wiLC1cIitlLG89XCJsLVwiK2UrXCIsXCIrZTtyZXR1cm5cIk0wLFwiK2UrcitpK2EraSthK28rYStvK3IrbytyK1wiWlwifX0sXCJ0cmlhbmdsZS11cFwiOntuOjUsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdC9NYXRoLnNxcnQoMyksMik7cmV0dXJuXCJNLVwiK2UrXCIsXCIrbi5yb3VuZCh0LzIsMikrXCJIXCIrZStcIkwwLC1cIituLnJvdW5kKHQsMikrXCJaXCJ9fSxcInRyaWFuZ2xlLWRvd25cIjp7bjo2LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQvTWF0aC5zcXJ0KDMpLDIpO3JldHVyblwiTS1cIitlK1wiLC1cIituLnJvdW5kKHQvMiwyKStcIkhcIitlK1wiTDAsXCIrbi5yb3VuZCh0LDIpK1wiWlwifX0sXCJ0cmlhbmdsZS1sZWZ0XCI6e246NyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0L01hdGguc3FydCgzKSwyKTtyZXR1cm5cIk1cIituLnJvdW5kKHQvMiwyKStcIiwtXCIrZStcIlZcIitlK1wiTC1cIituLnJvdW5kKHQsMikrXCIsMFpcIn19LFwidHJpYW5nbGUtcmlnaHRcIjp7bjo4LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQvTWF0aC5zcXJ0KDMpLDIpO3JldHVyblwiTS1cIituLnJvdW5kKHQvMiwyKStcIiwtXCIrZStcIlZcIitlK1wiTFwiK24ucm91bmQodCwyKStcIiwwWlwifX0sXCJ0cmlhbmdsZS1uZVwiOntuOjksZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC42KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVyblwiTS1cIityK1wiLC1cIitlK1wiSFwiK2UrXCJWXCIrcitcIlpcIn19LFwidHJpYW5nbGUtc2VcIjp7bjoxMCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjYqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuXCJNXCIrZStcIiwtXCIrcitcIlZcIitlK1wiSC1cIityK1wiWlwifX0sXCJ0cmlhbmdsZS1zd1wiOntuOjExLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNip0LDIpLHI9bi5yb3VuZCgxLjIqdCwyKTtyZXR1cm5cIk1cIityK1wiLFwiK2UrXCJILVwiK2UrXCJWLVwiK3IrXCJaXCJ9fSxcInRyaWFuZ2xlLW53XCI6e246MTIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC42KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVyblwiTS1cIitlK1wiLFwiK3IrXCJWLVwiK2UrXCJIXCIrcitcIlpcIn19LHBlbnRhZ29uOntuOjEzLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguOTUxKnQsMikscj1uLnJvdW5kKC41ODgqdCwyKSxpPW4ucm91bmQoLXQsMiksYT1uLnJvdW5kKC0uMzA5KnQsMik7cmV0dXJuXCJNXCIrZStcIixcIithK1wiTFwiK3IrXCIsXCIrbi5yb3VuZCguODA5KnQsMikrXCJILVwiK3IrXCJMLVwiK2UrXCIsXCIrYStcIkwwLFwiK2krXCJaXCJ9fSxoZXhhZ29uOntuOjE0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpLHI9bi5yb3VuZCh0LzIsMiksaT1uLnJvdW5kKHQqTWF0aC5zcXJ0KDMpLzIsMik7cmV0dXJuXCJNXCIraStcIiwtXCIrcitcIlZcIityK1wiTDAsXCIrZStcIkwtXCIraStcIixcIityK1wiVi1cIityK1wiTDAsLVwiK2UrXCJaXCJ9fSxoZXhhZ29uMjp7bjoxNSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKSxyPW4ucm91bmQodC8yLDIpLGk9bi5yb3VuZCh0Kk1hdGguc3FydCgzKS8yLDIpO3JldHVyblwiTS1cIityK1wiLFwiK2krXCJIXCIrcitcIkxcIitlK1wiLDBMXCIrcitcIiwtXCIraStcIkgtXCIrcitcIkwtXCIrZStcIiwwWlwifX0sb2N0YWdvbjp7bjoxNixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjkyNCp0LDIpLHI9bi5yb3VuZCguMzgzKnQsMik7cmV0dXJuXCJNLVwiK3IrXCIsLVwiK2UrXCJIXCIrcitcIkxcIitlK1wiLC1cIityK1wiVlwiK3IrXCJMXCIrcitcIixcIitlK1wiSC1cIityK1wiTC1cIitlK1wiLFwiK3IrXCJWLVwiK3IrXCJaXCJ9fSxzdGFyOntuOjE3LGY6ZnVuY3Rpb24odCl7dmFyIGU9MS40KnQscj1uLnJvdW5kKC4yMjUqZSwyKSxpPW4ucm91bmQoLjk1MSplLDIpLGE9bi5yb3VuZCguMzYzKmUsMiksbz1uLnJvdW5kKC41ODgqZSwyKSxzPW4ucm91bmQoLWUsMiksbD1uLnJvdW5kKC0uMzA5KmUsMiksYz1uLnJvdW5kKC4xMTgqZSwyKSx1PW4ucm91bmQoLjgwOSplLDIpO3JldHVyblwiTVwiK3IrXCIsXCIrbCtcIkhcIitpK1wiTFwiK2ErXCIsXCIrYytcIkxcIitvK1wiLFwiK3UrXCJMMCxcIituLnJvdW5kKC4zODIqZSwyKStcIkwtXCIrbytcIixcIit1K1wiTC1cIithK1wiLFwiK2MrXCJMLVwiK2krXCIsXCIrbCtcIkgtXCIrcitcIkwwLFwiK3MrXCJaXCJ9fSxoZXhhZ3JhbTp7bjoxOCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjY2KnQsMikscj1uLnJvdW5kKC4zOCp0LDIpLGk9bi5yb3VuZCguNzYqdCwyKTtyZXR1cm5cIk0tXCIraStcIiwwbC1cIityK1wiLC1cIitlK1wiaFwiK2krXCJsXCIrcitcIiwtXCIrZStcImxcIityK1wiLFwiK2UrXCJoXCIraStcImwtXCIrcitcIixcIitlK1wibFwiK3IrXCIsXCIrZStcImgtXCIraStcImwtXCIrcitcIixcIitlK1wibC1cIityK1wiLC1cIitlK1wiaC1cIitpK1wiWlwifX0sXCJzdGFyLXRyaWFuZ2xlLXVwXCI6e246MTksZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQqTWF0aC5zcXJ0KDMpKi44LDIpLHI9bi5yb3VuZCguOCp0LDIpLGk9bi5yb3VuZCgxLjYqdCwyKSxhPW4ucm91bmQoNCp0LDIpLG89XCJBIFwiK2ErXCIsXCIrYStcIiAwIDAgMSBcIjtyZXR1cm5cIk0tXCIrZStcIixcIityK28rZStcIixcIityK28rXCIwLC1cIitpK28rXCItXCIrZStcIixcIityK1wiWlwifX0sXCJzdGFyLXRyaWFuZ2xlLWRvd25cIjp7bjoyMCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCpNYXRoLnNxcnQoMykqLjgsMikscj1uLnJvdW5kKC44KnQsMiksaT1uLnJvdW5kKDEuNip0LDIpLGE9bi5yb3VuZCg0KnQsMiksbz1cIkEgXCIrYStcIixcIithK1wiIDAgMCAxIFwiO3JldHVyblwiTVwiK2UrXCIsLVwiK3IrbytcIi1cIitlK1wiLC1cIityK28rXCIwLFwiK2krbytlK1wiLC1cIityK1wiWlwifX0sXCJzdGFyLXNxdWFyZVwiOntuOjIxLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjEqdCwyKSxyPW4ucm91bmQoMip0LDIpLGk9XCJBIFwiK3IrXCIsXCIrcitcIiAwIDAgMSBcIjtyZXR1cm5cIk0tXCIrZStcIiwtXCIrZStpK1wiLVwiK2UrXCIsXCIrZStpK2UrXCIsXCIrZStpK2UrXCIsLVwiK2UraStcIi1cIitlK1wiLC1cIitlK1wiWlwifX0sXCJzdGFyLWRpYW1vbmRcIjp7bjoyMixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS40KnQsMikscj1uLnJvdW5kKDEuOSp0LDIpLGk9XCJBIFwiK3IrXCIsXCIrcitcIiAwIDAgMSBcIjtyZXR1cm5cIk0tXCIrZStcIiwwXCIraStcIjAsXCIrZStpK2UrXCIsMFwiK2krXCIwLC1cIitlK2krXCItXCIrZStcIiwwWlwifX0sXCJkaWFtb25kLXRhbGxcIjp7bjoyMyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjcqdCwyKSxyPW4ucm91bmQoMS40KnQsMik7cmV0dXJuXCJNMCxcIityK1wiTFwiK2UrXCIsMEwwLC1cIityK1wiTC1cIitlK1wiLDBaXCJ9fSxcImRpYW1vbmQtd2lkZVwiOntuOjI0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjQqdCwyKSxyPW4ucm91bmQoLjcqdCwyKTtyZXR1cm5cIk0wLFwiK3IrXCJMXCIrZStcIiwwTDAsLVwiK3IrXCJMLVwiK2UrXCIsMFpcIn19LGhvdXJnbGFzczp7bjoyNSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm5cIk1cIitlK1wiLFwiK2UrXCJILVwiK2UrXCJMXCIrZStcIiwtXCIrZStcIkgtXCIrZStcIlpcIn0sbm9Eb3Q6ITB9LGJvd3RpZTp7bjoyNixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm5cIk1cIitlK1wiLFwiK2UrXCJWLVwiK2UrXCJMLVwiK2UrXCIsXCIrZStcIlYtXCIrZStcIlpcIn0sbm9Eb3Q6ITB9LFwiY2lyY2xlLWNyb3NzXCI6e246MjcsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuXCJNMCxcIitlK1wiVi1cIitlK1wiTVwiK2UrXCIsMEgtXCIrZStcIk1cIitlK1wiLDBBXCIrZStcIixcIitlK1wiIDAgMSwxIDAsLVwiK2UrXCJBXCIrZStcIixcIitlK1wiIDAgMCwxIFwiK2UrXCIsMFpcIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LFwiY2lyY2xlLXhcIjp7bjoyOCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKSxyPW4ucm91bmQodC9NYXRoLnNxcnQoMiksMik7cmV0dXJuXCJNXCIrcitcIixcIityK1wiTC1cIityK1wiLC1cIityK1wiTVwiK3IrXCIsLVwiK3IrXCJMLVwiK3IrXCIsXCIrcitcIk1cIitlK1wiLDBBXCIrZStcIixcIitlK1wiIDAgMSwxIDAsLVwiK2UrXCJBXCIrZStcIixcIitlK1wiIDAgMCwxIFwiK2UrXCIsMFpcIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LFwic3F1YXJlLWNyb3NzXCI6e246MjksZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuXCJNMCxcIitlK1wiVi1cIitlK1wiTVwiK2UrXCIsMEgtXCIrZStcIk1cIitlK1wiLFwiK2UrXCJILVwiK2UrXCJWLVwiK2UrXCJIXCIrZStcIlpcIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LFwic3F1YXJlLXhcIjp7bjozMCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm5cIk1cIitlK1wiLFwiK2UrXCJMLVwiK2UrXCIsLVwiK2UrXCJNXCIrZStcIiwtXCIrZStcIkwtXCIrZStcIixcIitlK1wiTVwiK2UrXCIsXCIrZStcIkgtXCIrZStcIlYtXCIrZStcIkhcIitlK1wiWlwifSxuZWVkTGluZTohMCxub0RvdDohMH0sXCJkaWFtb25kLWNyb3NzXCI6e246MzEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMyp0LDIpO3JldHVyblwiTVwiK2UrXCIsMEwwLFwiK2UrXCJMLVwiK2UrXCIsMEwwLC1cIitlK1wiWk0wLC1cIitlK1wiVlwiK2UrXCJNLVwiK2UrXCIsMEhcIitlfSxuZWVkTGluZTohMCxub0RvdDohMH0sXCJkaWFtb25kLXhcIjp7bjozMixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4zKnQsMikscj1uLnJvdW5kKC42NSp0LDIpO3JldHVyblwiTVwiK2UrXCIsMEwwLFwiK2UrXCJMLVwiK2UrXCIsMEwwLC1cIitlK1wiWk0tXCIrcitcIiwtXCIrcitcIkxcIityK1wiLFwiK3IrXCJNLVwiK3IrXCIsXCIrcitcIkxcIityK1wiLC1cIityfSxuZWVkTGluZTohMCxub0RvdDohMH0sXCJjcm9zcy10aGluXCI6e246MzMsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpO3JldHVyblwiTTAsXCIrZStcIlYtXCIrZStcIk1cIitlK1wiLDBILVwiK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sXCJ4LXRoaW5cIjp7bjozNCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm5cIk1cIitlK1wiLFwiK2UrXCJMLVwiK2UrXCIsLVwiK2UrXCJNXCIrZStcIiwtXCIrZStcIkwtXCIrZStcIixcIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LGFzdGVyaXNrOntuOjM1LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjIqdCwyKSxyPW4ucm91bmQoLjg1KnQsMik7cmV0dXJuXCJNMCxcIitlK1wiVi1cIitlK1wiTVwiK2UrXCIsMEgtXCIrZStcIk1cIityK1wiLFwiK3IrXCJMLVwiK3IrXCIsLVwiK3IrXCJNXCIrcitcIiwtXCIrcitcIkwtXCIrcitcIixcIityfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LGhhc2g6e246MzYsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQvMiwyKSxyPW4ucm91bmQodCwyKTtyZXR1cm5cIk1cIitlK1wiLFwiK3IrXCJWLVwiK3IrXCJtLVwiK3IrXCIsMFZcIityK1wiTVwiK3IrXCIsXCIrZStcIkgtXCIrcitcIm0wLC1cIityK1wiSFwiK3J9LG5lZWRMaW5lOiEwLG5vRmlsbDohMH0sXCJ5LXVwXCI6e246MzcsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMip0LDIpLHI9bi5yb3VuZCgxLjYqdCwyKSxpPW4ucm91bmQoLjgqdCwyKTtyZXR1cm5cIk0tXCIrZStcIixcIitpK1wiTDAsME1cIitlK1wiLFwiK2krXCJMMCwwTTAsLVwiK3IrXCJMMCwwXCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sXCJ5LWRvd25cIjp7bjozOCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKDEuNip0LDIpLGk9bi5yb3VuZCguOCp0LDIpO3JldHVyblwiTS1cIitlK1wiLC1cIitpK1wiTDAsME1cIitlK1wiLC1cIitpK1wiTDAsME0wLFwiK3IrXCJMMCwwXCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sXCJ5LWxlZnRcIjp7bjozOSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKDEuNip0LDIpLGk9bi5yb3VuZCguOCp0LDIpO3JldHVyblwiTVwiK2krXCIsXCIrZStcIkwwLDBNXCIraStcIiwtXCIrZStcIkwwLDBNLVwiK3IrXCIsMEwwLDBcIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSxcInktcmlnaHRcIjp7bjo0MCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKDEuNip0LDIpLGk9bi5yb3VuZCguOCp0LDIpO3JldHVyblwiTS1cIitpK1wiLFwiK2UrXCJMMCwwTS1cIitpK1wiLC1cIitlK1wiTDAsME1cIityK1wiLDBMMCwwXCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sXCJsaW5lLWV3XCI6e246NDEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpO3JldHVyblwiTVwiK2UrXCIsMEgtXCIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSxcImxpbmUtbnNcIjp7bjo0MixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS40KnQsMik7cmV0dXJuXCJNMCxcIitlK1wiVi1cIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LFwibGluZS1uZVwiOntuOjQzLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVyblwiTVwiK2UrXCIsLVwiK2UrXCJMLVwiK2UrXCIsXCIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSxcImxpbmUtbndcIjp7bjo0NCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm5cIk1cIitlK1wiLFwiK2UrXCJMLVwiK2UrXCIsLVwiK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH19fSx7ZDM6MTU1fV0sNjAxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXt2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGVkaXRUeXBlOlwiY2FsY1wifSx0eXBlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJwZXJjZW50XCIsXCJjb25zdGFudFwiLFwic3FydFwiLFwiZGF0YVwiXSxlZGl0VHlwZTpcImNhbGNcIn0sc3ltbWV0cmljOnt2YWxUeXBlOlwiYm9vbGVhblwiLGVkaXRUeXBlOlwiY2FsY1wifSxhcnJheTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sYXJyYXltaW51czp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sdmFsdWU6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjEwLGVkaXRUeXBlOlwiY2FsY1wifSx2YWx1ZW1pbnVzOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxMCxlZGl0VHlwZTpcImNhbGNcIn0sdHJhY2VyZWY6e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsbWluOjAsZGZsdDowLGVkaXRUeXBlOlwic3R5bGVcIn0sdHJhY2VyZWZtaW51czp7dmFsVHlwZTpcImludGVnZXJcIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6XCJzdHlsZVwifSxjb3B5X3lzdHlsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixlZGl0VHlwZTpcInBsb3RcIn0sY29weV96c3R5bGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZWRpdFR5cGU6XCJzdHlsZVwifSxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJzdHlsZVwifSx0aGlja25lc3M6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjIsZWRpdFR5cGU6XCJzdHlsZVwifSx3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGVkaXRUeXBlOlwicGxvdFwifSxlZGl0VHlwZTpcImNhbGNcIixfZGVwcmVjYXRlZDp7b3BhY2l0eTp7dmFsVHlwZTpcIm51bWJlclwiLGVkaXRUeXBlOlwic3R5bGVcIn19fX0se31dLDYwMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxhPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxvPXQoXCIuLi8uLi9saWJcIikscz10KFwiLi9jb21wdXRlX2Vycm9yXCIpO2Z1bmN0aW9uIGwodCxlLHIsaSl7dmFyIGw9ZVtcImVycm9yX1wiK2ldfHx7fSxjPVtdO2lmKGwudmlzaWJsZSYmLTEhPT1bXCJsaW5lYXJcIixcImxvZ1wiXS5pbmRleE9mKHIudHlwZSkpe2Zvcih2YXIgdT1zKGwpLGg9MDtoPHQubGVuZ3RoO2grKyl7dmFyIGY9dFtoXSxwPWYuaTtpZih2b2lkIDA9PT1wKXA9aDtlbHNlIGlmKG51bGw9PT1wKWNvbnRpbnVlO3ZhciBkPWZbaV07aWYobihyLmMybChkKSkpe3ZhciBnPXUoZCxwKTtpZihuKGdbMF0pJiZuKGdbMV0pKXt2YXIgdj1mW2krXCJzXCJdPWQtZ1swXSxtPWZbaStcImhcIl09ZCtnWzFdO2MucHVzaCh2LG0pfX19dmFyIHk9ci5faWQseD1lLl9leHRyZW1lc1t5XSxiPWEuZmluZEV4dHJlbWVzKHIsYyxvLmV4dGVuZEZsYXQoe3RvemVybzp4Lm9wdHMudG96ZXJvfSx7cGFkZGVkOiEwfSkpO3gubWluPXgubWluLmNvbmNhdChiLm1pbikseC5tYXg9eC5tYXguY29uY2F0KGIubWF4KX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmNhbGNkYXRhLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXSxvPW5bMF0udHJhY2U7aWYoITA9PT1vLnZpc2libGUmJmkudHJhY2VJcyhvLFwiZXJyb3JCYXJzT0tcIikpe3ZhciBzPWEuZ2V0RnJvbUlkKHQsby54YXhpcyksYz1hLmdldEZyb21JZCh0LG8ueWF4aXMpO2wobixvLHMsXCJ4XCIpLGwobixvLGMsXCJ5XCIpfX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9jb21wdXRlX2Vycm9yXCI6NjAzLFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw2MDM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuXCJwZXJjZW50XCI9PT10P2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0KmUvMTAwKX06XCJjb25zdGFudFwiPT09dD9mdW5jdGlvbigpe3JldHVybiBNYXRoLmFicyhlKX06XCJzcXJ0XCI9PT10P2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5hYnModCkpfTp2b2lkIDB9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQudHlwZSxyPXQuc3ltbWV0cmljO2lmKFwiZGF0YVwiPT09ZSl7dmFyIGk9dC5hcnJheXx8W107aWYocilyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj0raVtlXTtyZXR1cm5bcixyXX07dmFyIGE9dC5hcnJheW1pbnVzfHxbXTtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj0raVtlXSxuPSthW2VdO3JldHVybiBpc05hTihyKSYmaXNOYU4obik/W05hTixOYU5dOltufHwwLHJ8fDBdfX12YXIgbz1uKGUsdC52YWx1ZSkscz1uKGUsdC52YWx1ZW1pbnVzKTtyZXR1cm4gcnx8dm9pZCAwPT09dC52YWx1ZW1pbnVzP2Z1bmN0aW9uKHQpe3ZhciBlPW8odCk7cmV0dXJuW2UsZV19OmZ1bmN0aW9uKHQpe3JldHVybltzKHQpLG8odCldfX19LHt9XSw2MDQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vLi4vcmVnaXN0cnlcIiksYT10KFwiLi4vLi4vbGliXCIpLG89dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIikscz10KFwiLi9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXt2YXIgYz1cImVycm9yX1wiK2wuYXhpcyx1PW8ubmV3Q29udGFpbmVyKGUsYyksaD10W2NdfHx7fTtmdW5jdGlvbiBmKHQsZSl7cmV0dXJuIGEuY29lcmNlKGgsdSxzLHQsZSl9aWYoITEhPT1mKFwidmlzaWJsZVwiLHZvaWQgMCE9PWguYXJyYXl8fHZvaWQgMCE9PWgudmFsdWV8fFwic3FydFwiPT09aC50eXBlKSl7dmFyIHA9ZihcInR5cGVcIixcImFycmF5XCJpbiBoP1wiZGF0YVwiOlwicGVyY2VudFwiKSxkPSEwO1wic3FydFwiIT09cCYmKGQ9ZihcInN5bW1ldHJpY1wiLCEoKFwiZGF0YVwiPT09cD9cImFycmF5bWludXNcIjpcInZhbHVlbWludXNcIilpbiBoKSkpLFwiZGF0YVwiPT09cD8oZihcImFycmF5XCIpLGYoXCJ0cmFjZXJlZlwiKSxkfHwoZihcImFycmF5bWludXNcIiksZihcInRyYWNlcmVmbWludXNcIikpKTpcInBlcmNlbnRcIiE9PXAmJlwiY29uc3RhbnRcIiE9PXB8fChmKFwidmFsdWVcIiksZHx8ZihcInZhbHVlbWludXNcIikpO3ZhciBnPVwiY29weV9cIitsLmluaGVyaXQrXCJzdHlsZVwiO2lmKGwuaW5oZXJpdCkoZVtcImVycm9yX1wiK2wuaW5oZXJpdF18fHt9KS52aXNpYmxlJiZmKGcsIShoLmNvbG9yfHxuKGgudGhpY2tuZXNzKXx8bihoLndpZHRoKSkpO2wuaW5oZXJpdCYmdVtnXXx8KGYoXCJjb2xvclwiLHIpLGYoXCJ0aGlja25lc3NcIiksZihcIndpZHRoXCIsaS50cmFjZUlzKGUsXCJnbDNkXCIpPzA6NCkpfX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vYXR0cmlidXRlc1wiOjYwMSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sNjA1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsLGE9dChcIi4vYXR0cmlidXRlc1wiKSxvPXtlcnJvcl94Om4uZXh0ZW5kRmxhdCh7fSxhKSxlcnJvcl95Om4uZXh0ZW5kRmxhdCh7fSxhKX07ZGVsZXRlIG8uZXJyb3JfeC5jb3B5X3pzdHlsZSxkZWxldGUgby5lcnJvcl95LmNvcHlfenN0eWxlLGRlbGV0ZSBvLmVycm9yX3kuY29weV95c3R5bGU7dmFyIHM9e2Vycm9yX3g6bi5leHRlbmRGbGF0KHt9LGEpLGVycm9yX3k6bi5leHRlbmRGbGF0KHt9LGEpLGVycm9yX3o6bi5leHRlbmRGbGF0KHt9LGEpfTtkZWxldGUgcy5lcnJvcl94LmNvcHlfeXN0eWxlLGRlbGV0ZSBzLmVycm9yX3kuY29weV95c3R5bGUsZGVsZXRlIHMuZXJyb3Jfei5jb3B5X3lzdHlsZSxkZWxldGUgcy5lcnJvcl96LmNvcHlfenN0eWxlLGUuZXhwb3J0cz17bW9kdWxlVHlwZTpcImNvbXBvbmVudFwiLG5hbWU6XCJlcnJvcmJhcnNcIixzY2hlbWE6e3RyYWNlczp7c2NhdHRlcjpvLGJhcjpvLGhpc3RvZ3JhbTpvLHNjYXR0ZXIzZDppKHMsXCJjYWxjXCIsXCJuZXN0ZWRcIiksc2NhdHRlcmdsOmkobyxcImNhbGNcIixcIm5lc3RlZFwiKX19LHN1cHBseURlZmF1bHRzOnQoXCIuL2RlZmF1bHRzXCIpLGNhbGM6dChcIi4vY2FsY1wiKSxtYWtlQ29tcHV0ZUVycm9yOnQoXCIuL2NvbXB1dGVfZXJyb3JcIikscGxvdDp0KFwiLi9wbG90XCIpLHN0eWxlOnQoXCIuL3N0eWxlXCIpLGhvdmVySW5mbzpmdW5jdGlvbih0LGUscil7KGUuZXJyb3JfeXx8e30pLnZpc2libGUmJihyLnllcnI9dC55aC10LnksZS5lcnJvcl95LnN5bW1ldHJpY3x8KHIueWVycm5lZz10LnktdC55cykpOyhlLmVycm9yX3h8fHt9KS52aXNpYmxlJiYoci54ZXJyPXQueGgtdC54LGUuZXJyb3JfeC5zeW1tZXRyaWN8fChyLnhlcnJuZWc9dC54LXQueHMpKX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi9hdHRyaWJ1dGVzXCI6NjAxLFwiLi9jYWxjXCI6NjAyLFwiLi9jb21wdXRlX2Vycm9yXCI6NjAzLFwiLi9kZWZhdWx0c1wiOjYwNCxcIi4vcGxvdFwiOjYwNixcIi4vc3R5bGVcIjo2MDd9XSw2MDY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiZmFzdC1pc251bWVyaWNcIiksYT10KFwiLi4vZHJhd2luZ1wiKSxvPXQoXCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7dmFyIGw9ci54YXhpcyxjPXIueWF4aXMsdT1zJiZzLmR1cmF0aW9uPjA7ZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBoLGY9ZVswXS50cmFjZSxwPWYuZXJyb3JfeHx8e30sZD1mLmVycm9yX3l8fHt9O2YuaWRzJiYoaD1mdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pO3ZhciBnPW8uaGFzTWFya2VycyhmKSYmZi5tYXJrZXIubWF4ZGlzcGxheWVkPjA7ZC52aXNpYmxlfHxwLnZpc2libGV8fChlPVtdKTt2YXIgdj1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoXCJnLmVycm9yYmFyXCIpLmRhdGEoZSxoKTtpZih2LmV4aXQoKS5yZW1vdmUoKSxlLmxlbmd0aCl7cC52aXNpYmxlfHx2LnNlbGVjdEFsbChcInBhdGgueGVycm9yXCIpLnJlbW92ZSgpLGQudmlzaWJsZXx8di5zZWxlY3RBbGwoXCJwYXRoLnllcnJvclwiKS5yZW1vdmUoKSx2LnN0eWxlKFwib3BhY2l0eVwiLDEpO3ZhciBtPXYuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJlcnJvcmJhclwiLCEwKTt1JiZtLnN0eWxlKFwib3BhY2l0eVwiLDApLnRyYW5zaXRpb24oKS5kdXJhdGlvbihzLmR1cmF0aW9uKS5zdHlsZShcIm9wYWNpdHlcIiwxKSxhLnNldENsaXBVcmwodixyLmxheWVyQ2xpcElkLHQpLHYuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj17eDplLmMycCh0LngpLHk6ci5jMnAodC55KX07dm9pZCAwIT09dC55aCYmKG4ueWg9ci5jMnAodC55aCksbi55cz1yLmMycCh0LnlzKSxpKG4ueXMpfHwobi5ub1lTPSEwLG4ueXM9ci5jMnAodC55cywhMCkpKTt2b2lkIDAhPT10LnhoJiYobi54aD1lLmMycCh0LnhoKSxuLnhzPWUuYzJwKHQueHMpLGkobi54cyl8fChuLm5vWFM9ITAsbi54cz1lLmMycCh0LnhzLCEwKSkpO3JldHVybiBufSh0LGwsYyk7aWYoIWd8fHQudmlzKXt2YXIgYSxvPWUuc2VsZWN0KFwicGF0aC55ZXJyb3JcIik7aWYoZC52aXNpYmxlJiZpKHIueCkmJmkoci55aCkmJmkoci55cykpe3ZhciBoPWQud2lkdGg7YT1cIk1cIisoci54LWgpK1wiLFwiK3IueWgrXCJoXCIrMipoK1wibS1cIitoK1wiLDBWXCIrci55cyxyLm5vWVN8fChhKz1cIm0tXCIraCtcIiwwaFwiKzIqaCksIW8uc2l6ZSgpP289ZS5hcHBlbmQoXCJwYXRoXCIpLnN0eWxlKFwidmVjdG9yLWVmZmVjdFwiLFwibm9uLXNjYWxpbmctc3Ryb2tlXCIpLmNsYXNzZWQoXCJ5ZXJyb3JcIiwhMCk6dSYmKG89by50cmFuc2l0aW9uKCkuZHVyYXRpb24ocy5kdXJhdGlvbikuZWFzZShzLmVhc2luZykpLG8uYXR0cihcImRcIixhKX1lbHNlIG8ucmVtb3ZlKCk7dmFyIGY9ZS5zZWxlY3QoXCJwYXRoLnhlcnJvclwiKTtpZihwLnZpc2libGUmJmkoci55KSYmaShyLnhoKSYmaShyLnhzKSl7dmFyIHY9KHAuY29weV95c3R5bGU/ZDpwKS53aWR0aDthPVwiTVwiK3IueGgrXCIsXCIrKHIueS12KStcInZcIisyKnYrXCJtMCwtXCIrditcIkhcIityLnhzLHIubm9YU3x8KGErPVwibTAsLVwiK3YrXCJ2XCIrMip2KSwhZi5zaXplKCk/Zj1lLmFwcGVuZChcInBhdGhcIikuc3R5bGUoXCJ2ZWN0b3ItZWZmZWN0XCIsXCJub24tc2NhbGluZy1zdHJva2VcIikuY2xhc3NlZChcInhlcnJvclwiLCEwKTp1JiYoZj1mLnRyYW5zaXRpb24oKS5kdXJhdGlvbihzLmR1cmF0aW9uKS5lYXNlKHMuZWFzaW5nKSksZi5hdHRyKFwiZFwiLGEpfWVsc2UgZi5yZW1vdmUoKX19KX19KX19LHtcIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzXCI6MTA3NixcIi4uL2RyYXdpbmdcIjo1OTksZDM6MTU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw2MDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vY29sb3JcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3QuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9ZS5lcnJvcl95fHx7fSxhPWUuZXJyb3JfeHx8e30sbz1uLnNlbGVjdCh0aGlzKTtvLnNlbGVjdEFsbChcInBhdGgueWVycm9yXCIpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsci50aGlja25lc3MrXCJweFwiKS5jYWxsKGkuc3Ryb2tlLHIuY29sb3IpLGEuY29weV95c3R5bGUmJihhPXIpLG8uc2VsZWN0QWxsKFwicGF0aC54ZXJyb3JcIikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixhLnRoaWNrbmVzcytcInB4XCIpLmNhbGwoaS5zdHJva2UsYS5jb2xvcil9KX19LHtcIi4uL2NvbG9yXCI6NTc4LGQzOjE1NX1dLDYwODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIiksaT10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKS5ob3ZlcmxhYmVsLGE9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2hvdmVybGFiZWw6e2JnY29sb3I6YSh7fSxpLmJnY29sb3Ise2FycmF5T2s6ITB9KSxib3JkZXJjb2xvcjphKHt9LGkuYm9yZGVyY29sb3Ise2FycmF5T2s6ITB9KSxmb250Om4oe2FycmF5T2s6ITAsZWRpdFR5cGU6XCJub25lXCJ9KSxhbGlnbjphKHt9LGkuYWxpZ24se2FycmF5T2s6ITB9KSxuYW1lbGVuZ3RoOmEoe30saS5uYW1lbGVuZ3RoLHthcnJheU9rOiEwfSksZWRpdFR5cGU6XCJub25lXCJ9fX0se1wiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiOjc3NSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo2MTh9XSw2MDk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpO2Z1bmN0aW9uIGEodCxlLHIsaSl7aT1pfHxuLmlkZW50aXR5LEFycmF5LmlzQXJyYXkodCkmJihlWzBdW3JdPWkodCkpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmNhbGNkYXRhLHI9dC5fZnVsbExheW91dDtmdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbi5jb2VyY2VIb3ZlcmluZm8oe2hvdmVyaW5mbzplfSx7X21vZHVsZTp0Ll9tb2R1bGV9LHIpfX1mb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKyl7dmFyIGw9ZVtzXSxjPWxbMF0udHJhY2U7aWYoIWkudHJhY2VJcyhjLFwicGllXCIpKXt2YXIgdT1pLnRyYWNlSXMoYyxcIjJkTWFwXCIpP2E6bi5maWxsQXJyYXk7dShjLmhvdmVyaW5mbyxsLFwiaGlcIixvKGMpKSxjLmhvdmVydGVtcGxhdGUmJnUoYy5ob3ZlcnRlbXBsYXRlLGwsXCJodFwiKSxjLmhvdmVybGFiZWwmJih1KGMuaG92ZXJsYWJlbC5iZ2NvbG9yLGwsXCJoYmdcIiksdShjLmhvdmVybGFiZWwuYm9yZGVyY29sb3IsbCxcImhiY1wiKSx1KGMuaG92ZXJsYWJlbC5mb250LnNpemUsbCxcImh0c1wiKSx1KGMuaG92ZXJsYWJlbC5mb250LmNvbG9yLGwsXCJodGNcIiksdShjLmhvdmVybGFiZWwuZm9udC5mYW1pbHksbCxcImh0ZlwiKSx1KGMuaG92ZXJsYWJlbC5uYW1lbGVuZ3RoLGwsXCJobmxcIiksdShjLmhvdmVybGFiZWwuYWxpZ24sbCxcImh0YVwiKSl9fX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5fV0sNjEwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4vaG92ZXJcIikuaG92ZXI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1uLmdldENvbXBvbmVudE1ldGhvZChcImFubm90YXRpb25zXCIsXCJvbkNsaWNrXCIpKHQsdC5faG92ZXJkYXRhKTtmdW5jdGlvbiBvKCl7dC5lbWl0KFwicGxvdGx5X2NsaWNrXCIse3BvaW50czp0Ll9ob3ZlcmRhdGEsZXZlbnQ6ZX0pfXZvaWQgMCE9PXImJmkodCxlLHIsITApLHQuX2hvdmVyZGF0YSYmZSYmZS50YXJnZXQmJihhJiZhLnRoZW4/YS50aGVuKG8pOm8oKSxlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiYmZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9fSx7XCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vaG92ZXJcIjo2MTR9XSw2MTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e1lBTkdMRTo2MCxIT1ZFUkFSUk9XU0laRTo2LEhPVkVSVEVYVFBBRDozLEhPVkVSRk9OVFNJWkU6MTMsSE9WRVJGT05UOlwiQXJpYWwsIHNhbnMtc2VyaWZcIixIT1ZFUk1JTlRJTUU6NTAsSE9WRVJJRDpcIi1ob3ZlclwifX0se31dLDYxMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9hdHRyaWJ1dGVzXCIpLGE9dChcIi4vaG92ZXJsYWJlbF9kZWZhdWx0c1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHM9bi5leHRlbmRGbGF0KHt9LG8uaG92ZXJsYWJlbCk7ZS5ob3ZlcnRlbXBsYXRlJiYocy5uYW1lbGVuZ3RoPS0xKSxhKHQsZSxmdW5jdGlvbihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfSxzKX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4vYXR0cmlidXRlc1wiOjYwOCxcIi4vaG92ZXJsYWJlbF9kZWZhdWx0c1wiOjYxNX1dLDYxMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIik7ci5nZXRTdWJwbG90PWZ1bmN0aW9uKHQpe3JldHVybiB0LnN1YnBsb3R8fHQueGF4aXMrdC55YXhpc3x8dC5nZW99LHIuaXNUcmFjZUluU3VicGxvdHM9ZnVuY3Rpb24odCxlKXtpZihcInNwbG9tXCI9PT10LnR5cGUpe2Zvcih2YXIgbj10LnhheGVzfHxbXSxpPXQueWF4ZXN8fFtdLGE9MDthPG4ubGVuZ3RoO2ErKylmb3IodmFyIG89MDtvPGkubGVuZ3RoO28rKylpZigtMSE9PWUuaW5kZXhPZihuW2FdK2lbb10pKXJldHVybiEwO3JldHVybiExfXJldHVybi0xIT09ZS5pbmRleE9mKHIuZ2V0U3VicGxvdCh0KSl9LHIuZmxhdD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodC5sZW5ndGgpLG49MDtuPHQubGVuZ3RoO24rKylyW25dPWU7cmV0dXJuIHJ9LHIucDJjPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aCksbj0wO248dC5sZW5ndGg7bisrKXJbbl09dFtuXS5wMmMoZSk7cmV0dXJuIHJ9LHIuZ2V0RGlzdGFuY2VGdW5jdGlvbj1mdW5jdGlvbih0LGUsbixpKXtyZXR1cm5cImNsb3Nlc3RcIj09PXQ/aXx8ci5xdWFkcmF0dXJlKGUsbik6XCJ4XCI9PT10P2U6bn0sci5nZXRDbG9zZXN0PWZ1bmN0aW9uKHQsZSxyKXtpZighMSE9PXIuaW5kZXgpci5pbmRleD49MCYmci5pbmRleDx0Lmxlbmd0aD9yLmRpc3RhbmNlPTA6ci5pbmRleD0hMTtlbHNlIGZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT1lKHRbbl0pO2k8PXIuZGlzdGFuY2UmJihyLmluZGV4PW4sci5kaXN0YW5jZT1pKX1yZXR1cm4gcn0sci5pbmJveD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQqZTwwfHwwPT09dD9yOjEvMH0sci5xdWFkcmF0dXJlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXQociksaT1lKHIpO3JldHVybiBNYXRoLnNxcnQobipuK2kqaSl9fSxyLm1ha2VFdmVudERhdGE9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPVwiaW5kZXhcImluIHQ/dC5pbmRleDp0LnBvaW50TnVtYmVyLGE9e2RhdGE6ZS5faW5wdXQsZnVsbERhdGE6ZSxjdXJ2ZU51bWJlcjplLmluZGV4LHBvaW50TnVtYmVyOml9O2lmKGUuX2luZGV4VG9Qb2ludHMpe3ZhciBvPWUuX2luZGV4VG9Qb2ludHNbaV07MT09PW8ubGVuZ3RoP2EucG9pbnRJbmRleD1vWzBdOmEucG9pbnRJbmRpY2VzPW99ZWxzZSBhLnBvaW50SW5kZXg9aTtyZXR1cm4gZS5fbW9kdWxlLmV2ZW50RGF0YT9hPWUuX21vZHVsZS5ldmVudERhdGEoYSx0LGUsbixpKTooXCJ4VmFsXCJpbiB0P2EueD10LnhWYWw6XCJ4XCJpbiB0JiYoYS54PXQueCksXCJ5VmFsXCJpbiB0P2EueT10LnlWYWw6XCJ5XCJpbiB0JiYoYS55PXQueSksdC54YSYmKGEueGF4aXM9dC54YSksdC55YSYmKGEueWF4aXM9dC55YSksdm9pZCAwIT09dC56TGFiZWxWYWwmJihhLno9dC56TGFiZWxWYWwpKSxyLmFwcGVuZEFycmF5UG9pbnRWYWx1ZShhLGUsaSksYX0sci5hcHBlbmRBcnJheVBvaW50VmFsdWU9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUuX2FycmF5QXR0cnM7aWYoaSlmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXSxjPWEobCk7aWYodm9pZCAwPT09dFtjXSl7dmFyIHU9byhuLm5lc3RlZFByb3BlcnR5KGUsbCkuZ2V0KCkscik7dm9pZCAwIT09dSYmKHRbY109dSl9fX0sci5hcHBlbmRBcnJheU11bHRpUG9pbnRWYWx1ZXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUuX2FycmF5QXR0cnM7aWYoaSlmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXSxjPWEobCk7aWYodm9pZCAwPT09dFtjXSl7Zm9yKHZhciB1PW4ubmVzdGVkUHJvcGVydHkoZSxsKS5nZXQoKSxoPW5ldyBBcnJheShyLmxlbmd0aCksZj0wO2Y8ci5sZW5ndGg7ZisrKWhbZl09byh1LHJbZl0pO3RbY109aH19fTt2YXIgaT17aWRzOlwiaWRcIixsb2NhdGlvbnM6XCJsb2NhdGlvblwiLGxhYmVsczpcImxhYmVsXCIsdmFsdWVzOlwidmFsdWVcIixcIm1hcmtlci5jb2xvcnNcIjpcImNvbG9yXCIscGFyZW50czpcInBhcmVudFwifTtmdW5jdGlvbiBhKHQpe3JldHVybiBpW3RdfHx0fWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9BcnJheS5pc0FycmF5KHQpJiZBcnJheS5pc0FycmF5KHRbZVswXV0pP3RbZVswXV1bZVsxXV06dm9pZCAwOnRbZV19fSx7XCIuLi8uLi9saWJcIjo3MDF9XSw2MTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiZmFzdC1pc251bWVyaWNcIiksYT10KFwidGlueWNvbG9yMlwiKSxvPXQoXCIuLi8uLi9saWJcIikscz10KFwiLi4vLi4vbGliL2V2ZW50c1wiKSxsPXQoXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIiksYz10KFwiLi4vLi4vbGliL292ZXJyaWRlX2N1cnNvclwiKSx1PXQoXCIuLi9kcmF3aW5nXCIpLGg9dChcIi4uL2NvbG9yXCIpLGY9dChcIi4uL2RyYWdlbGVtZW50XCIpLHA9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGQ9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGc9dChcIi4vaGVscGVyc1wiKSx2PXQoXCIuL2NvbnN0YW50c1wiKSxtPXYuWUFOR0xFLHk9TWF0aC5QSSptLzE4MCx4PTEvTWF0aC5zaW4oeSksYj1NYXRoLmNvcyh5KSxfPU1hdGguc2luKHkpLHc9di5IT1ZFUkFSUk9XU0laRSxrPXYuSE9WRVJURVhUUEFEO3IuaG92ZXI9ZnVuY3Rpb24odCxlLHIsYSl7dD1vLmdldEdyYXBoRGl2KHQpLG8udGhyb3R0bGUodC5fZnVsbExheW91dC5fdWlkK3YuSE9WRVJJRCx2LkhPVkVSTUlOVElNRSxmdW5jdGlvbigpeyFmdW5jdGlvbih0LGUscixhKXtyfHwocj1cInh5XCIpO3ZhciBsPUFycmF5LmlzQXJyYXkocik/cjpbcl0sdT10Ll9mdWxsTGF5b3V0LHY9dS5fcGxvdHN8fFtdLG09dltyXSx5PXUuX2hhcyhcImNhcnRlc2lhblwiKTtpZihtKXt2YXIgYj1tLm92ZXJsYXlzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pO2w9bC5jb25jYXQoYil9Zm9yKHZhciBfPWwubGVuZ3RoLHc9bmV3IEFycmF5KF8pLGs9bmV3IEFycmF5KF8pLEE9ITEsTD0wO0w8XztMKyspe3ZhciB6PWxbTF0sTz12W3pdO2lmKE8pQT0hMCx3W0xdPXAuZ2V0RnJvbUlkKHQsTy54YXhpcy5faWQpLGtbTF09cC5nZXRGcm9tSWQodCxPLnlheGlzLl9pZCk7ZWxzZXt2YXIgST11W3pdLl9zdWJwbG90O3dbTF09SS54YXhpcyxrW0xdPUkueWF4aXN9fXZhciBEPWUuaG92ZXJtb2RlfHx1LmhvdmVybW9kZTtEJiYhQSYmKEQ9XCJjbG9zZXN0XCIpO2lmKC0xPT09W1wieFwiLFwieVwiLFwiY2xvc2VzdFwiXS5pbmRleE9mKEQpfHwhdC5jYWxjZGF0YXx8dC5xdWVyeVNlbGVjdG9yKFwiLnpvb21ib3hcIil8fHQuX2RyYWdnaW5nKXJldHVybiBmLnVuaG92ZXJSYXcodCxlKTt2YXIgUCxSLEYsQixOLGosVixVLHEsSCxHLFksVyxYPS0xPT09dS5ob3ZlcmRpc3RhbmNlPzEvMDp1LmhvdmVyZGlzdGFuY2UsWj0tMT09PXUuc3Bpa2VkaXN0YW5jZT8xLzA6dS5zcGlrZWRpc3RhbmNlLCQ9W10sSj1bXSxLPXtoTGluZVBvaW50Om51bGwsdkxpbmVQb2ludDpudWxsfSxRPSExO2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKEQ9XCJhcnJheVwiLEY9MDtGPGUubGVuZ3RoO0YrKykoTj10LmNhbGNkYXRhW2VbRl0uY3VydmVOdW1iZXJ8fDBdKSYmKGo9TlswXS50cmFjZSxcInNraXBcIiE9PU5bMF0udHJhY2UuaG92ZXJpbmZvJiYoSi5wdXNoKE4pLFwiaFwiPT09ai5vcmllbnRhdGlvbiYmKFE9ITApKSk7ZWxzZXtmb3IoQj0wO0I8dC5jYWxjZGF0YS5sZW5ndGg7QisrKU49dC5jYWxjZGF0YVtCXSxcInNraXBcIiE9PShqPU5bMF0udHJhY2UpLmhvdmVyaW5mbyYmZy5pc1RyYWNlSW5TdWJwbG90cyhqLGwpJiYoSi5wdXNoKE4pLFwiaFwiPT09ai5vcmllbnRhdGlvbiYmKFE9ITApKTt2YXIgdHQsZXQscnQ9IWUudGFyZ2V0O2lmKHJ0KXR0PVwieHB4XCJpbiBlP2UueHB4OndbMF0uX2xlbmd0aC8yLGV0PVwieXB4XCJpbiBlP2UueXB4OmtbMF0uX2xlbmd0aC8yO2Vsc2V7aWYoITE9PT1zLnRyaWdnZXJIYW5kbGVyKHQsXCJwbG90bHlfYmVmb3JlaG92ZXJcIixlKSlyZXR1cm47dmFyIG50PWUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKHR0PWUuY2xpZW50WC1udC5sZWZ0LGV0PWUuY2xpZW50WS1udC50b3AsdHQ8MHx8dHQ+d1swXS5fbGVuZ3RofHxldDwwfHxldD5rWzBdLl9sZW5ndGgpcmV0dXJuIGYudW5ob3ZlclJhdyh0LGUpfWlmKGUucG9pbnRlclg9dHQrd1swXS5fb2Zmc2V0LGUucG9pbnRlclk9ZXQra1swXS5fb2Zmc2V0LFA9XCJ4dmFsXCJpbiBlP2cuZmxhdChsLGUueHZhbCk6Zy5wMmModyx0dCksUj1cInl2YWxcImluIGU/Zy5mbGF0KGwsZS55dmFsKTpnLnAyYyhrLGV0KSwhaShQWzBdKXx8IWkoUlswXSkpcmV0dXJuIG8ud2FybihcIkZ4LmhvdmVyIGZhaWxlZFwiLGUsdCksZi51bmhvdmVyUmF3KHQsZSl9dmFyIGl0PTEvMDtmb3IoQj0wO0I8Si5sZW5ndGg7QisrKWlmKChOPUpbQl0pJiZOWzBdJiZOWzBdLnRyYWNlJiYhMD09PU5bMF0udHJhY2UudmlzaWJsZSYmKGo9TlswXS50cmFjZSwtMT09PVtcImNhcnBldFwiLFwiY29udG91cmNhcnBldFwiXS5pbmRleE9mKGouX21vZHVsZS5uYW1lKSkpe2lmKFwic3Bsb21cIj09PWoudHlwZT9WPWxbVT0wXTooVj1nLmdldFN1YnBsb3QoaiksVT1sLmluZGV4T2YoVikpLHE9RCxZPXtjZDpOLHRyYWNlOmoseGE6d1tVXSx5YTprW1VdLG1heEhvdmVyRGlzdGFuY2U6WCxtYXhTcGlrZURpc3RhbmNlOlosaW5kZXg6ITEsZGlzdGFuY2U6TWF0aC5taW4oaXQsWCksc3Bpa2VEaXN0YW5jZToxLzAseFNwaWtlOnZvaWQgMCx5U3Bpa2U6dm9pZCAwLGNvbG9yOmguZGVmYXVsdExpbmUsbmFtZTpqLm5hbWUseDA6dm9pZCAwLHgxOnZvaWQgMCx5MDp2b2lkIDAseTE6dm9pZCAwLHhMYWJlbFZhbDp2b2lkIDAseUxhYmVsVmFsOnZvaWQgMCx6TGFiZWxWYWw6dm9pZCAwLHRleHQ6dm9pZCAwfSx1W1ZdJiYoWS5zdWJwbG90PXVbVl0uX3N1YnBsb3QpLHUuX3NwbG9tU2NlbmVzJiZ1Ll9zcGxvbVNjZW5lc1tqLnVpZF0mJihZLnNjZW5lPXUuX3NwbG9tU2NlbmVzW2oudWlkXSksVz0kLmxlbmd0aCxcImFycmF5XCI9PT1xKXt2YXIgYXQ9ZVtCXTtcInBvaW50TnVtYmVyXCJpbiBhdD8oWS5pbmRleD1hdC5wb2ludE51bWJlcixxPVwiY2xvc2VzdFwiKToocT1cIlwiLFwieHZhbFwiaW4gYXQmJihIPWF0Lnh2YWwscT1cInhcIiksXCJ5dmFsXCJpbiBhdCYmKEc9YXQueXZhbCxxPXE/XCJjbG9zZXN0XCI6XCJ5XCIpKX1lbHNlIEg9UFtVXSxHPVJbVV07aWYoMCE9PVgpaWYoai5fbW9kdWxlJiZqLl9tb2R1bGUuaG92ZXJQb2ludHMpe3ZhciBvdD1qLl9tb2R1bGUuaG92ZXJQb2ludHMoWSxILEcscSx1Ll9ob3ZlcmxheWVyKTtpZihvdClmb3IodmFyIHN0LGx0PTA7bHQ8b3QubGVuZ3RoO2x0Kyspc3Q9b3RbbHRdLGkoc3QueDApJiZpKHN0LnkwKSYmJC5wdXNoKFMoc3QsRCkpfWVsc2Ugby5sb2coXCJVbnJlY29nbml6ZWQgdHJhY2UgdHlwZSBpbiBob3ZlcjpcIixqKTtpZihcImNsb3Nlc3RcIj09PUQmJiQubGVuZ3RoPlcmJigkLnNwbGljZSgwLFcpLGl0PSRbMF0uZGlzdGFuY2UpLHkmJjAhPT1aJiYwPT09JC5sZW5ndGgpe1kuZGlzdGFuY2U9WixZLmluZGV4PSExO3ZhciBjdD1qLl9tb2R1bGUuaG92ZXJQb2ludHMoWSxILEcsXCJjbG9zZXN0XCIsdS5faG92ZXJsYXllcik7aWYoY3QmJihjdD1jdC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3Bpa2VEaXN0YW5jZTw9Wn0pKSxjdCYmY3QubGVuZ3RoKXt2YXIgdXQsaHQ9Y3QuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnhhLnNob3dzcGlrZXN9KTtpZihodC5sZW5ndGgpe3ZhciBmdD1odFswXTtpKGZ0LngwKSYmaShmdC55MCkmJih1dD12dChmdCksKCFLLnZMaW5lUG9pbnR8fEsudkxpbmVQb2ludC5zcGlrZURpc3RhbmNlPnV0LnNwaWtlRGlzdGFuY2UpJiYoSy52TGluZVBvaW50PXV0KSl9dmFyIHB0PWN0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC55YS5zaG93c3Bpa2VzfSk7aWYocHQubGVuZ3RoKXt2YXIgZHQ9cHRbMF07aShkdC54MCkmJmkoZHQueTApJiYodXQ9dnQoZHQpLCghSy5oTGluZVBvaW50fHxLLmhMaW5lUG9pbnQuc3Bpa2VEaXN0YW5jZT51dC5zcGlrZURpc3RhbmNlKSYmKEsuaExpbmVQb2ludD11dCkpfX19fWZ1bmN0aW9uIGd0KHQsZSl7Zm9yKHZhciByLG49bnVsbCxpPTEvMCxhPTA7YTx0Lmxlbmd0aDthKyspKHI9dFthXS5zcGlrZURpc3RhbmNlKTxpJiZyPD1lJiYobj10W2FdLGk9cik7cmV0dXJuIG59ZnVuY3Rpb24gdnQodCl7cmV0dXJuIHQ/e3hhOnQueGEseWE6dC55YSx4OnZvaWQgMCE9PXQueFNwaWtlP3QueFNwaWtlOih0LngwK3QueDEpLzIseTp2b2lkIDAhPT10LnlTcGlrZT90LnlTcGlrZToodC55MCt0LnkxKS8yLGRpc3RhbmNlOnQuZGlzdGFuY2Usc3Bpa2VEaXN0YW5jZTp0LnNwaWtlRGlzdGFuY2UsY3VydmVOdW1iZXI6dC50cmFjZS5pbmRleCxjb2xvcjp0LmNvbG9yLHBvaW50TnVtYmVyOnQuaW5kZXh9Om51bGx9dmFyIG10PXtmdWxsTGF5b3V0OnUsY29udGFpbmVyOnUuX2hvdmVybGF5ZXIsb3V0ZXJDb250YWluZXI6dS5fcGFwZXJkaXYsZXZlbnQ6ZX0seXQ9dC5fc3Bpa2Vwb2ludHMseHQ9e3ZMaW5lUG9pbnQ6Sy52TGluZVBvaW50LGhMaW5lUG9pbnQ6Sy5oTGluZVBvaW50fTtpZih0Ll9zcGlrZXBvaW50cz14dCx5JiYwIT09WiYmMCE9PSQubGVuZ3RoKXt2YXIgYnQ9JC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQueWEuc2hvd3NwaWtlc30pLF90PWd0KGJ0LFopO0suaExpbmVQb2ludD12dChfdCk7dmFyIHd0PSQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnhhLnNob3dzcGlrZXN9KSxrdD1ndCh3dCxaKTtLLnZMaW5lUG9pbnQ9dnQoa3QpfWlmKDA9PT0kLmxlbmd0aCl7dmFyIEF0PWYudW5ob3ZlclJhdyh0LGUpO3JldHVybiF5fHxudWxsPT09Sy5oTGluZVBvaW50JiZudWxsPT09Sy52TGluZVBvaW50fHxDKHl0KSYmRShLLG10KSxBdH15JiZDKHl0KSYmRShLLG10KTskLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kaXN0YW5jZS1lLmRpc3RhbmNlfSk7dmFyIFR0PXQuX2hvdmVyZGF0YSxNdD1bXTtmb3IoRj0wO0Y8JC5sZW5ndGg7RisrKXt2YXIgU3Q9JFtGXSxFdD1nLm1ha2VFdmVudERhdGEoU3QsU3QudHJhY2UsU3QuY2QpO2lmKCExIT09U3QuaG92ZXJ0ZW1wbGF0ZSl7dmFyIEN0PSExO1N0LmNkW1N0LmluZGV4XSYmU3QuY2RbU3QuaW5kZXhdLmh0JiYoQ3Q9U3QuY2RbU3QuaW5kZXhdLmh0KSxTdC5ob3ZlcnRlbXBsYXRlPUN0fHxTdC50cmFjZS5ob3ZlcnRlbXBsYXRlfHwhMX1TdC5ldmVudERhdGE9W0V0XSxNdC5wdXNoKEV0KX10Ll9ob3ZlcmRhdGE9TXQ7dmFyIEx0PVwieVwiPT09RCYmKEoubGVuZ3RoPjF8fCQubGVuZ3RoPjEpfHxcImNsb3Nlc3RcIj09PUQmJlEmJiQubGVuZ3RoPjEsenQ9aC5jb21iaW5lKHUucGxvdF9iZ2NvbG9yfHxoLmJhY2tncm91bmQsdS5wYXBlcl9iZ2NvbG9yKSxPdD17aG92ZXJtb2RlOkQscm90YXRlTGFiZWxzOkx0LGJnQ29sb3I6enQsY29udGFpbmVyOnUuX2hvdmVybGF5ZXIsb3V0ZXJDb250YWluZXI6dS5fcGFwZXJkaXYsY29tbW9uTGFiZWxPcHRzOnUuaG92ZXJsYWJlbCxob3ZlcmRpc3RhbmNlOnUuaG92ZXJkaXN0YW5jZX0sSXQ9VCgkLE90LHQpO2lmKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzLGwsYyx1PTAsaD0xLGY9dC5zaXplKCkscD1uZXcgQXJyYXkoZik7ZnVuY3Rpb24gZCh0KXt2YXIgZT10WzBdLHI9dFt0Lmxlbmd0aC0xXTtpZihpPWUucG1pbi1lLnBvcy1lLmRwK2Uuc2l6ZSxhPXIucG9zK3IuZHArci5zaXplLWUucG1heCxpPi4wMSl7Zm9yKHM9dC5sZW5ndGgtMTtzPj0wO3MtLSl0W3NdLmRwKz1pO249ITF9aWYoIShhPC4wMSkpe2lmKGk8LS4wMSl7Zm9yKHM9dC5sZW5ndGgtMTtzPj0wO3MtLSl0W3NdLmRwLT1hO249ITF9aWYobil7dmFyIGM9MDtmb3Iobz0wO288dC5sZW5ndGg7bysrKShsPXRbb10pLnBvcytsLmRwK2wuc2l6ZT5lLnBtYXgmJmMrKztmb3Iobz10Lmxlbmd0aC0xO28+PTAmJiEoYzw9MCk7by0tKShsPXRbb10pLnBvcz5lLnBtYXgtMSYmKGwuZGVsPSEwLGMtLSk7Zm9yKG89MDtvPHQubGVuZ3RoJiYhKGM8PTApO28rKylpZigobD10W29dKS5wb3M8ZS5wbWluKzEpZm9yKGwuZGVsPSEwLGMtLSxhPTIqbC5zaXplLHM9dC5sZW5ndGgtMTtzPj0wO3MtLSl0W3NdLmRwLT1hO2ZvcihvPXQubGVuZ3RoLTE7bz49MCYmIShjPD0wKTtvLS0pKGw9dFtvXSkucG9zK2wuZHArbC5zaXplPmUucG1heCYmKGwuZGVsPSEwLGMtLSl9fX1mb3IodC5lYWNoKGZ1bmN0aW9uKHQsbil7dmFyIGk9dFtlXSxhPVwieFwiPT09aS5faWQuY2hhckF0KDApLG89aS5yYW5nZTshbiYmbyYmb1swXT5vWzFdIT09YSYmKGg9LTEpLHBbbl09W3tkYXR1bTp0LGk6bix0cmFjZUluZGV4OnQudHJhY2UuaW5kZXgsZHA6MCxwb3M6dC5wb3MscG9zcmVmOnQucG9zcmVmLHNpemU6dC5ieSooYT94OjEpLzIscG1pbjowLHBtYXg6YT9yLndpZHRoOnIuaGVpZ2h0fV19KSxwLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXS5wb3NyZWYtZVswXS5wb3NyZWZ8fGgqKGVbMF0udHJhY2VJbmRleC10WzBdLnRyYWNlSW5kZXgpfSk7IW4mJnU8PWY7KXtmb3IodSsrLG49ITAsbz0wO288cC5sZW5ndGgtMTspe3ZhciBnPXBbb10sdj1wW28rMV0sbT1nW2cubGVuZ3RoLTFdLHk9dlswXTtpZigoaT1tLnBvcyttLmRwK20uc2l6ZS15LnBvcy15LmRwK3kuc2l6ZSk+LjAxJiZtLnBtaW49PT15LnBtaW4mJm0ucG1heD09PXkucG1heCl7Zm9yKHM9di5sZW5ndGgtMTtzPj0wO3MtLSl2W3NdLmRwKz1pO2ZvcihnLnB1c2guYXBwbHkoZyx2KSxwLnNwbGljZShvKzEsMSksYz0wLHM9Zy5sZW5ndGgtMTtzPj0wO3MtLSljKz1nW3NdLmRwO2ZvcihhPWMvZy5sZW5ndGgscz1nLmxlbmd0aC0xO3M+PTA7cy0tKWdbc10uZHAtPWE7bj0hMX1lbHNlIG8rK31wLmZvckVhY2goZCl9Zm9yKG89cC5sZW5ndGgtMTtvPj0wO28tLSl7dmFyIGI9cFtvXTtmb3Iocz1iLmxlbmd0aC0xO3M+PTA7cy0tKXt2YXIgXz1iW3NdLHc9Xy5kYXR1bTt3Lm9mZnNldD1fLmRwLHcuZGVsPV8uZGVsfX19KEl0LEx0P1wieGFcIjpcInlhXCIsdSksTShJdCxMdCksZS50YXJnZXQmJmUudGFyZ2V0LnRhZ05hbWUpe3ZhciBEdD1kLmdldENvbXBvbmVudE1ldGhvZChcImFubm90YXRpb25zXCIsXCJoYXNDbGlja1RvU2hvd1wiKSh0LE10KTtjKG4uc2VsZWN0KGUudGFyZ2V0KSxEdD9cInBvaW50ZXJcIjpcIlwiKX1pZighZS50YXJnZXR8fGF8fCFmdW5jdGlvbih0LGUscil7aWYoIXJ8fHIubGVuZ3RoIT09dC5faG92ZXJkYXRhLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG49ci5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIGk9cltuXSxhPXQuX2hvdmVyZGF0YVtuXTtpZihpLmN1cnZlTnVtYmVyIT09YS5jdXJ2ZU51bWJlcnx8U3RyaW5nKGkucG9pbnROdW1iZXIpIT09U3RyaW5nKGEucG9pbnROdW1iZXIpfHxTdHJpbmcoaS5wb2ludE51bWJlcnMpIT09U3RyaW5nKGEucG9pbnROdW1iZXJzKSlyZXR1cm4hMH1yZXR1cm4hMX0odCwwLFR0KSlyZXR1cm47VHQmJnQuZW1pdChcInBsb3RseV91bmhvdmVyXCIse2V2ZW50OmUscG9pbnRzOlR0fSk7dC5lbWl0KFwicGxvdGx5X2hvdmVyXCIse2V2ZW50OmUscG9pbnRzOnQuX2hvdmVyZGF0YSx4YXhlczp3LHlheGVzOmsseHZhbHM6UCx5dmFsczpSfSl9KHQsZSxyLGEpfSl9LHIubG9uZUhvdmVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e2NvbG9yOnQuY29sb3J8fGguZGVmYXVsdExpbmUseDA6dC54MHx8dC54fHwwLHgxOnQueDF8fHQueHx8MCx5MDp0LnkwfHx0Lnl8fDAseTE6dC55MXx8dC55fHwwLHhMYWJlbDp0LnhMYWJlbCx5TGFiZWw6dC55TGFiZWwsekxhYmVsOnQuekxhYmVsLHRleHQ6dC50ZXh0LG5hbWU6dC5uYW1lLGlkZWFsQWxpZ246dC5pZGVhbEFsaWduLGJvcmRlckNvbG9yOnQuYm9yZGVyQ29sb3IsZm9udEZhbWlseTp0LmZvbnRGYW1pbHksZm9udFNpemU6dC5mb250U2l6ZSxmb250Q29sb3I6dC5mb250Q29sb3IsbmFtZUxlbmd0aDp0Lm5hbWVMZW5ndGgsdGV4dEFsaWduOnQudGV4dEFsaWduLHRyYWNlOnQudHJhY2V8fHtpbmRleDowLGhvdmVyaW5mbzpcIlwifSx4YTp7X29mZnNldDowfSx5YTp7X29mZnNldDowfSxpbmRleDowLGhvdmVydGVtcGxhdGU6dC5ob3ZlcnRlbXBsYXRlfHwhMSxldmVudERhdGE6dC5ldmVudERhdGF8fCExLGhvdmVydGVtcGxhdGVMYWJlbHM6dC5ob3ZlcnRlbXBsYXRlTGFiZWxzfHwhMX0saT1uLnNlbGVjdChlLmNvbnRhaW5lciksYT1lLm91dGVyQ29udGFpbmVyP24uc2VsZWN0KGUub3V0ZXJDb250YWluZXIpOmksbz17aG92ZXJtb2RlOlwiY2xvc2VzdFwiLHJvdGF0ZUxhYmVsczohMSxiZ0NvbG9yOmUuYmdDb2xvcnx8aC5iYWNrZ3JvdW5kLGNvbnRhaW5lcjppLG91dGVyQ29udGFpbmVyOmF9LHM9VChbcl0sbyxlLmdkKTtyZXR1cm4gTShzLG8ucm90YXRlTGFiZWxzKSxzLm5vZGUoKX0sci5tdWx0aUhvdmVycz1mdW5jdGlvbih0LGUpe0FycmF5LmlzQXJyYXkodCl8fCh0PVt0XSk7dmFyIHI9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJue2NvbG9yOnQuY29sb3J8fGguZGVmYXVsdExpbmUseDA6dC54MHx8dC54fHwwLHgxOnQueDF8fHQueHx8MCx5MDp0LnkwfHx0Lnl8fDAseTE6dC55MXx8dC55fHwwLHhMYWJlbDp0LnhMYWJlbCx5TGFiZWw6dC55TGFiZWwsekxhYmVsOnQuekxhYmVsLHRleHQ6dC50ZXh0LG5hbWU6dC5uYW1lLGlkZWFsQWxpZ246dC5pZGVhbEFsaWduLGJvcmRlckNvbG9yOnQuYm9yZGVyQ29sb3IsZm9udEZhbWlseTp0LmZvbnRGYW1pbHksZm9udFNpemU6dC5mb250U2l6ZSxmb250Q29sb3I6dC5mb250Q29sb3IsbmFtZUxlbmd0aDp0Lm5hbWVMZW5ndGgsdGV4dEFsaWduOnQudGV4dEFsaWduLHRyYWNlOnQudHJhY2V8fHtpbmRleDowLGhvdmVyaW5mbzpcIlwifSx4YTp7X29mZnNldDowfSx5YTp7X29mZnNldDowfSxpbmRleDowLGhvdmVydGVtcGxhdGU6dC5ob3ZlcnRlbXBsYXRlfHwhMSxldmVudERhdGE6dC5ldmVudERhdGF8fCExLGhvdmVydGVtcGxhdGVMYWJlbHM6dC5ob3ZlcnRlbXBsYXRlTGFiZWxzfHwhMX19KSxpPW4uc2VsZWN0KGUuY29udGFpbmVyKSxhPWUub3V0ZXJDb250YWluZXI/bi5zZWxlY3QoZS5vdXRlckNvbnRhaW5lcik6aSxvPXtob3Zlcm1vZGU6XCJjbG9zZXN0XCIscm90YXRlTGFiZWxzOiExLGJnQ29sb3I6ZS5iZ0NvbG9yfHxoLmJhY2tncm91bmQsY29udGFpbmVyOmksb3V0ZXJDb250YWluZXI6YX0scz1UKHIsbyxlLmdkKSxsPTAsYz0wO3JldHVybiBzLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC55MC1lLnkwfSkuZWFjaChmdW5jdGlvbih0LHIpe3ZhciBuPXQueTAtdC5ieS8yO3Qub2Zmc2V0PW4tNTxsP2wtbis1OjAsbD1uK3QuYnkrdC5vZmZzZXQscj09PWUuYW5jaG9ySW5kZXgmJihjPXQub2Zmc2V0KX0pLmVhY2goZnVuY3Rpb24odCl7dC5vZmZzZXQtPWN9KSxNKHMsby5yb3RhdGVMYWJlbHMpLHN9O3ZhciBBPS88ZXh0cmE+KFtcXHNcXFNdKik8XFwvZXh0cmE+LztmdW5jdGlvbiBUKHQsZSxyKXt2YXIgaT1yLl9mdWxsTGF5b3V0LGE9ZS5ob3Zlcm1vZGUscz1lLnJvdGF0ZUxhYmVscyxjPWUuYmdDb2xvcixmPWUuY29udGFpbmVyLHA9ZS5vdXRlckNvbnRhaW5lcixkPWUuY29tbW9uTGFiZWxPcHRzfHx7fSxnPWUuZm9udEZhbWlseXx8di5IT1ZFUkZPTlQseT1lLmZvbnRTaXplfHx2LkhPVkVSRk9OVFNJWkUseD10WzBdLGI9eC54YSxfPXgueWEsVD1cInlcIj09PWE/XCJ5TGFiZWxcIjpcInhMYWJlbFwiLE09eFtUXSxTPShTdHJpbmcoTSl8fFwiXCIpLnNwbGl0KFwiIFwiKVswXSxFPXAubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEM9RS50b3Asej1FLndpZHRoLE89RS5oZWlnaHQsST12b2lkIDAhPT1NJiZ4LmRpc3RhbmNlPD1lLmhvdmVyZGlzdGFuY2UmJihcInhcIj09PWF8fFwieVwiPT09YSk7aWYoSSl7dmFyIEQsUCxSPSEwO2ZvcihEPTA7RDx0Lmxlbmd0aDtEKyspaWYoUiYmdm9pZCAwPT09dFtEXS56TGFiZWwmJihSPSExKSxQPXRbRF0uaG92ZXJpbmZvfHx0W0RdLnRyYWNlLmhvdmVyaW5mbyl7dmFyIEY9QXJyYXkuaXNBcnJheShQKT9QOlAuc3BsaXQoXCIrXCIpO2lmKC0xPT09Ri5pbmRleE9mKFwiYWxsXCIpJiYtMT09PUYuaW5kZXhPZihhKSl7ST0hMTticmVha319UiYmKEk9ITEpfXZhciBCPWYuc2VsZWN0QWxsKFwiZy5heGlzdGV4dFwiKS5kYXRhKEk/WzBdOltdKTtCLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiYXhpc3RleHRcIiwhMCksQi5leGl0KCkucmVtb3ZlKCksQi5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9bi5zZWxlY3QodGhpcyksaT1vLmVuc3VyZVNpbmdsZShlLFwicGF0aFwiLFwiXCIsZnVuY3Rpb24odCl7dC5zdHlsZSh7XCJzdHJva2Utd2lkdGhcIjpcIjFweFwifSl9KSxzPW8uZW5zdXJlU2luZ2xlKGUsXCJ0ZXh0XCIsXCJcIixmdW5jdGlvbih0KXt0LmF0dHIoXCJkYXRhLW5vdGV4XCIsMSl9KSxjPWQuYmdjb2xvcnx8aC5kZWZhdWx0TGluZSxmPWQuYm9yZGVyY29sb3J8fGguY29udHJhc3QoYykscD1oLmNvbnRyYXN0KGMpO2kuc3R5bGUoe2ZpbGw6YyxzdHJva2U6Zn0pLHMudGV4dChNKS5jYWxsKHUuZm9udCxkLmZvbnQuZmFtaWx5fHxnLGQuZm9udC5zaXplfHx5LGQuZm9udC5jb2xvcnx8cCkuY2FsbChsLnBvc2l0aW9uVGV4dCwwLDApLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsciksZS5hdHRyKFwidHJhbnNmb3JtXCIsXCJcIik7dmFyIHY9cy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoXCJ4XCI9PT1hKXtzLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLFwibWlkZGxlXCIpLmNhbGwobC5wb3NpdGlvblRleHQsMCxcInRvcFwiPT09Yi5zaWRlP0Mtdi5ib3R0b20tdy1rOkMtdi50b3ArdytrKTt2YXIgbT1cInRvcFwiPT09Yi5zaWRlP1wiLVwiOlwiXCI7aS5hdHRyKFwiZFwiLFwiTTAsMExcIit3K1wiLFwiK20rdytcIkhcIisoayt2LndpZHRoLzIpK1widlwiK20rKDIqayt2LmhlaWdodCkrXCJILVwiKyhrK3Yud2lkdGgvMikrXCJWXCIrbSt3K1wiSC1cIit3K1wiWlwiKSxlLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIisoYi5fb2Zmc2V0Kyh4LngwK3gueDEpLzIpK1wiLFwiKyhfLl9vZmZzZXQrKFwidG9wXCI9PT1iLnNpZGU/MDpfLl9sZW5ndGgpKStcIilcIil9ZWxzZXtzLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLFwicmlnaHRcIj09PV8uc2lkZT9cInN0YXJ0XCI6XCJlbmRcIikuY2FsbChsLnBvc2l0aW9uVGV4dCwoXCJyaWdodFwiPT09Xy5zaWRlPzE6LTEpKihrK3cpLEMtdi50b3Atdi5oZWlnaHQvMik7dmFyIEE9XCJyaWdodFwiPT09Xy5zaWRlP1wiXCI6XCItXCI7aS5hdHRyKFwiZFwiLFwiTTAsMExcIitBK3crXCIsXCIrdytcIlZcIisoayt2LmhlaWdodC8yKStcImhcIitBKygyKmsrdi53aWR0aCkrXCJWLVwiKyhrK3YuaGVpZ2h0LzIpK1wiSFwiK0ErdytcIlYtXCIrdytcIlpcIiksZS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrKGIuX29mZnNldCsoXCJyaWdodFwiPT09Xy5zaWRlP2IuX2xlbmd0aDowKSkrXCIsXCIrKF8uX29mZnNldCsoeC55MCt4LnkxKS8yKStcIilcIil9dD10LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dC56TGFiZWxWYWx8fCh0W1RdfHxcIlwiKS5zcGxpdChcIiBcIilbMF09PT1TfSl9KTt2YXIgTj1mLnNlbGVjdEFsbChcImcuaG92ZXJ0ZXh0XCIpLmRhdGEodCxmdW5jdGlvbih0KXtyZXR1cm5bdC50cmFjZS5pbmRleCx0LmluZGV4LHQueDAsdC55MCx0Lm5hbWUsdC5hdHRyLHQueGEsdC55YXx8XCJcIl0uam9pbihcIixcIil9KTtyZXR1cm4gTi5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcImhvdmVydGV4dFwiLCEwKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7dC5hcHBlbmQoXCJyZWN0XCIpLmNhbGwoaC5maWxsLGguYWRkT3BhY2l0eShjLC44KSksdC5hcHBlbmQoXCJ0ZXh0XCIpLmNsYXNzZWQoXCJuYW1lXCIsITApLHQuYXBwZW5kKFwicGF0aFwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLFwiMXB4XCIpLHQuYXBwZW5kKFwidGV4dFwiKS5jbGFzc2VkKFwibnVtc1wiLCEwKS5jYWxsKHUuZm9udCxnLHkpfSksTi5leGl0KCkucmVtb3ZlKCksTi5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLmF0dHIoXCJ0cmFuc2Zvcm1cIixcIlwiKSxmPVwiXCIscD1cIlwiLGQ9dC5iZ2NvbG9yfHx0LmNvbG9yLHY9aC5jb21iaW5lKGgub3BhY2l0eShkKT9kOmguZGVmYXVsdExpbmUsYykseD1oLmNvbWJpbmUoaC5vcGFjaXR5KHQuY29sb3IpP3QuY29sb3I6aC5kZWZhdWx0TGluZSxjKSxiPXQuYm9yZGVyQ29sb3J8fGguY29udHJhc3Qodik7dm9pZCAwIT09dC5uYW1lT3ZlcnJpZGUmJih0Lm5hbWU9dC5uYW1lT3ZlcnJpZGUpLHQubmFtZSYmKGkubWV0YSYmKHQubmFtZT1vLnRlbXBsYXRlU3RyaW5nKHQubmFtZSx7bWV0YTppLm1ldGF9KSksZj1MKHQubmFtZSx0Lm5hbWVMZW5ndGgpKSx2b2lkIDAhPT10LnpMYWJlbD8odm9pZCAwIT09dC54TGFiZWwmJihwKz1cIng6IFwiK3QueExhYmVsK1wiPGJyPlwiKSx2b2lkIDAhPT10LnlMYWJlbCYmKHArPVwieTogXCIrdC55TGFiZWwrXCI8YnI+XCIpLHArPShwP1wiejogXCI6XCJcIikrdC56TGFiZWwpOkkmJnRbYStcIkxhYmVsXCJdPT09TT9wPXRbKFwieFwiPT09YT9cInlcIjpcInhcIikrXCJMYWJlbFwiXXx8XCJcIjp2b2lkIDA9PT10LnhMYWJlbD92b2lkIDAhPT10LnlMYWJlbCYmXCJzY2F0dGVyY2FycGV0XCIhPT10LnRyYWNlLnR5cGUmJihwPXQueUxhYmVsKTpwPXZvaWQgMD09PXQueUxhYmVsP3QueExhYmVsOlwiKFwiK3QueExhYmVsK1wiLCBcIit0LnlMYWJlbCtcIilcIiwhdC50ZXh0JiYwIT09dC50ZXh0fHxBcnJheS5pc0FycmF5KHQudGV4dCl8fChwKz0ocD9cIjxicj5cIjpcIlwiKSt0LnRleHQpLHZvaWQgMCE9PXQuZXh0cmFUZXh0JiYocCs9KHA/XCI8YnI+XCI6XCJcIikrdC5leHRyYVRleHQpLFwiXCIhPT1wfHx0LmhvdmVydGVtcGxhdGV8fChcIlwiPT09ZiYmZS5yZW1vdmUoKSxwPWYpO3ZhciBfPXIuX2Z1bGxMYXlvdXQuX2QzbG9jYWxlLFQ9dC5ob3ZlcnRlbXBsYXRlfHwhMSxTPXQuaG92ZXJ0ZW1wbGF0ZUxhYmVsc3x8dCxFPXQuZXZlbnREYXRhWzBdfHx7fTtUJiYocD0ocD1vLmhvdmVydGVtcGxhdGVTdHJpbmcoVCxTLF8sRSx7bWV0YTppLm1ldGF9KSkucmVwbGFjZShBLGZ1bmN0aW9uKGUscil7cmV0dXJuIGY9TChyLHQubmFtZUxlbmd0aCksXCJcIn0pKTt2YXIgRD1lLnNlbGVjdChcInRleHQubnVtc1wiKS5jYWxsKHUuZm9udCx0LmZvbnRGYW1pbHl8fGcsdC5mb250U2l6ZXx8eSx0LmZvbnRDb2xvcnx8YikudGV4dChwKS5hdHRyKFwiZGF0YS1ub3RleFwiLDEpLmNhbGwobC5wb3NpdGlvblRleHQsMCwwKS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHIpLFA9ZS5zZWxlY3QoXCJ0ZXh0Lm5hbWVcIiksUj0wLEY9MDtpZihmJiZmIT09cCl7UC5jYWxsKHUuZm9udCx0LmZvbnRGYW1pbHl8fGcsdC5mb250U2l6ZXx8eSx4KS50ZXh0KGYpLmF0dHIoXCJkYXRhLW5vdGV4XCIsMSkuY2FsbChsLnBvc2l0aW9uVGV4dCwwLDApLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMscik7dmFyIEI9UC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Uj1CLndpZHRoKzIqayxGPUIuaGVpZ2h0KzIqa31lbHNlIFAucmVtb3ZlKCksZS5zZWxlY3QoXCJyZWN0XCIpLnJlbW92ZSgpO2Uuc2VsZWN0KFwicGF0aFwiKS5zdHlsZSh7ZmlsbDp2LHN0cm9rZTpifSk7dmFyIE4saixWPUQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFU9dC54YS5fb2Zmc2V0Kyh0LngwK3QueDEpLzIscT10LnlhLl9vZmZzZXQrKHQueTArdC55MSkvMixIPU1hdGguYWJzKHQueDEtdC54MCksRz1NYXRoLmFicyh0LnkxLXQueTApLFk9Vi53aWR0aCt3K2srUjtpZih0LnR5MD1DLVYudG9wLHQuYng9Vi53aWR0aCsyKmssdC5ieT1NYXRoLm1heChWLmhlaWdodCsyKmssRiksdC5hbmNob3I9XCJzdGFydFwiLHQudHh3aWR0aD1WLndpZHRoLHQudHgyd2lkdGg9Uix0Lm9mZnNldD0wLHMpdC5wb3M9VSxOPXErRy8yK1k8PU8saj1xLUcvMi1ZPj0wLFwidG9wXCIhPT10LmlkZWFsQWxpZ24mJk58fCFqP04/KHErPUcvMix0LmFuY2hvcj1cInN0YXJ0XCIpOnQuYW5jaG9yPVwibWlkZGxlXCI6KHEtPUcvMix0LmFuY2hvcj1cImVuZFwiKTtlbHNlIGlmKHQucG9zPXEsTj1VK0gvMitZPD16LGo9VS1ILzItWT49MCxcImxlZnRcIiE9PXQuaWRlYWxBbGlnbiYmTnx8IWopaWYoTilVKz1ILzIsdC5hbmNob3I9XCJzdGFydFwiO2Vsc2V7dC5hbmNob3I9XCJtaWRkbGVcIjt2YXIgVz1ZLzIsWD1VK1cteixaPVUtVztYPjAmJihVLT1YKSxaPDAmJihVKz0tWil9ZWxzZSBVLT1ILzIsdC5hbmNob3I9XCJlbmRcIjtELmF0dHIoXCJ0ZXh0LWFuY2hvclwiLHQuYW5jaG9yKSxSJiZQLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLHQuYW5jaG9yKSxlLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIitVK1wiLFwiK3ErXCIpXCIrKHM/XCJyb3RhdGUoXCIrbStcIilcIjpcIlwiKSl9KSxOfWZ1bmN0aW9uIE0odCxlKXt0LmVhY2goZnVuY3Rpb24odCl7dmFyIHI9bi5zZWxlY3QodGhpcyk7aWYodC5kZWwpcmV0dXJuIHIucmVtb3ZlKCk7dmFyIGk9ci5zZWxlY3QoXCJ0ZXh0Lm51bXNcIiksYT10LmFuY2hvcixvPVwiZW5kXCI9PT1hPy0xOjEscz17c3RhcnQ6MSxlbmQ6LTEsbWlkZGxlOjB9W2FdLGM9cyoodytrKSxoPWMrcyoodC50eHdpZHRoK2spLGY9MCxwPXQub2Zmc2V0O1wibWlkZGxlXCI9PT1hJiYoYy09dC50eDJ3aWR0aC8yLGgrPXQudHh3aWR0aC8yK2spLGUmJihwKj0tXyxmPXQub2Zmc2V0KmIpLHIuc2VsZWN0KFwicGF0aFwiKS5hdHRyKFwiZFwiLFwibWlkZGxlXCI9PT1hP1wiTS1cIisodC5ieC8yK3QudHgyd2lkdGgvMikrXCIsXCIrKHAtdC5ieS8yKStcImhcIit0LmJ4K1widlwiK3QuYnkrXCJoLVwiK3QuYngrXCJaXCI6XCJNMCwwTFwiKyhvKncrZikrXCIsXCIrKHcrcCkrXCJ2XCIrKHQuYnkvMi13KStcImhcIitvKnQuYngrXCJ2LVwiK3QuYnkrXCJIXCIrKG8qdytmKStcIlZcIisocC13KStcIlpcIik7dmFyIGQ9YytmLGc9cCt0LnR5MC10LmJ5LzIrayx2PXQudGV4dEFsaWdufHxcImF1dG9cIjtcImF1dG9cIiE9PXYmJihcImxlZnRcIj09PXYmJlwic3RhcnRcIiE9PWE/KGkuYXR0cihcInRleHQtYW5jaG9yXCIsXCJzdGFydFwiKSxkPS10LmJ4LWspOlwicmlnaHRcIj09PXYmJlwiZW5kXCIhPT1hJiYoaS5hdHRyKFwidGV4dC1hbmNob3JcIixcImVuZFwiKSxkPXQuYngraykpLGkuY2FsbChsLnBvc2l0aW9uVGV4dCxkLGcpLHQudHgyd2lkdGgmJihyLnNlbGVjdChcInRleHQubmFtZVwiKS5jYWxsKGwucG9zaXRpb25UZXh0LGgrcyprK2YscCt0LnR5MC10LmJ5LzIrayksci5zZWxlY3QoXCJyZWN0XCIpLmNhbGwodS5zZXRSZWN0LGgrKHMtMSkqdC50eDJ3aWR0aC8yK2YscC10LmJ5LzItMSx0LnR4MndpZHRoLHQuYnkrMikpfSl9ZnVuY3Rpb24gUyh0LGUpe3ZhciByPXQuaW5kZXgsbj10LnRyYWNlfHx7fSxhPXQuY2RbMF0scz10LmNkW3JdfHx7fTtmdW5jdGlvbiBsKHQpe3JldHVybiB0fHxpKHQpJiYwPT09dH12YXIgYz1BcnJheS5pc0FycmF5KHIpP2Z1bmN0aW9uKHQsZSl7dmFyIGk9by5jYXN0T3B0aW9uKGEscix0KTtyZXR1cm4gbChpKT9pOm8uZXh0cmFjdE9wdGlvbih7fSxuLFwiXCIsZSl9OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8uZXh0cmFjdE9wdGlvbihzLG4sdCxlKX07ZnVuY3Rpb24gdShlLHIsbil7dmFyIGk9YyhyLG4pO2woaSkmJih0W2VdPWkpfWlmKHUoXCJob3ZlcmluZm9cIixcImhpXCIsXCJob3ZlcmluZm9cIiksdShcImJnY29sb3JcIixcImhiZ1wiLFwiaG92ZXJsYWJlbC5iZ2NvbG9yXCIpLHUoXCJib3JkZXJDb2xvclwiLFwiaGJjXCIsXCJob3ZlcmxhYmVsLmJvcmRlcmNvbG9yXCIpLHUoXCJmb250RmFtaWx5XCIsXCJodGZcIixcImhvdmVybGFiZWwuZm9udC5mYW1pbHlcIiksdShcImZvbnRTaXplXCIsXCJodHNcIixcImhvdmVybGFiZWwuZm9udC5zaXplXCIpLHUoXCJmb250Q29sb3JcIixcImh0Y1wiLFwiaG92ZXJsYWJlbC5mb250LmNvbG9yXCIpLHUoXCJuYW1lTGVuZ3RoXCIsXCJobmxcIixcImhvdmVybGFiZWwubmFtZWxlbmd0aFwiKSx1KFwidGV4dEFsaWduXCIsXCJodGFcIixcImhvdmVybGFiZWwuYWxpZ25cIiksdC5wb3NyZWY9XCJ5XCI9PT1lfHxcImNsb3Nlc3RcIj09PWUmJlwiaFwiPT09bi5vcmllbnRhdGlvbj90LnhhLl9vZmZzZXQrKHQueDArdC54MSkvMjp0LnlhLl9vZmZzZXQrKHQueTArdC55MSkvMix0LngwPW8uY29uc3RyYWluKHQueDAsMCx0LnhhLl9sZW5ndGgpLHQueDE9by5jb25zdHJhaW4odC54MSwwLHQueGEuX2xlbmd0aCksdC55MD1vLmNvbnN0cmFpbih0LnkwLDAsdC55YS5fbGVuZ3RoKSx0LnkxPW8uY29uc3RyYWluKHQueTEsMCx0LnlhLl9sZW5ndGgpLHZvaWQgMCE9PXQueExhYmVsVmFsJiYodC54TGFiZWw9XCJ4TGFiZWxcImluIHQ/dC54TGFiZWw6cC5ob3ZlckxhYmVsVGV4dCh0LnhhLHQueExhYmVsVmFsKSx0LnhWYWw9dC54YS5jMmQodC54TGFiZWxWYWwpKSx2b2lkIDAhPT10LnlMYWJlbFZhbCYmKHQueUxhYmVsPVwieUxhYmVsXCJpbiB0P3QueUxhYmVsOnAuaG92ZXJMYWJlbFRleHQodC55YSx0LnlMYWJlbFZhbCksdC55VmFsPXQueWEuYzJkKHQueUxhYmVsVmFsKSksdm9pZCAwIT09dC56TGFiZWxWYWwmJnZvaWQgMD09PXQuekxhYmVsJiYodC56TGFiZWw9U3RyaW5nKHQuekxhYmVsVmFsKSksIShpc05hTih0LnhlcnIpfHxcImxvZ1wiPT09dC54YS50eXBlJiZ0LnhlcnI8PTApKXt2YXIgaD1wLnRpY2tUZXh0KHQueGEsdC54YS5jMmwodC54ZXJyKSxcImhvdmVyXCIpLnRleHQ7dm9pZCAwIT09dC54ZXJybmVnP3QueExhYmVsKz1cIiArXCIraCtcIiAvIC1cIitwLnRpY2tUZXh0KHQueGEsdC54YS5jMmwodC54ZXJybmVnKSxcImhvdmVyXCIpLnRleHQ6dC54TGFiZWwrPVwiIFxceGIxIFwiK2gsXCJ4XCI9PT1lJiYodC5kaXN0YW5jZSs9MSl9aWYoIShpc05hTih0LnllcnIpfHxcImxvZ1wiPT09dC55YS50eXBlJiZ0LnllcnI8PTApKXt2YXIgZj1wLnRpY2tUZXh0KHQueWEsdC55YS5jMmwodC55ZXJyKSxcImhvdmVyXCIpLnRleHQ7dm9pZCAwIT09dC55ZXJybmVnP3QueUxhYmVsKz1cIiArXCIrZitcIiAvIC1cIitwLnRpY2tUZXh0KHQueWEsdC55YS5jMmwodC55ZXJybmVnKSxcImhvdmVyXCIpLnRleHQ6dC55TGFiZWwrPVwiIFxceGIxIFwiK2YsXCJ5XCI9PT1lJiYodC5kaXN0YW5jZSs9MSl9dmFyIGQ9dC5ob3ZlcmluZm98fHQudHJhY2UuaG92ZXJpbmZvO3JldHVybiBkJiZcImFsbFwiIT09ZCYmKC0xPT09KGQ9QXJyYXkuaXNBcnJheShkKT9kOmQuc3BsaXQoXCIrXCIpKS5pbmRleE9mKFwieFwiKSYmKHQueExhYmVsPXZvaWQgMCksLTE9PT1kLmluZGV4T2YoXCJ5XCIpJiYodC55TGFiZWw9dm9pZCAwKSwtMT09PWQuaW5kZXhPZihcInpcIikmJih0LnpMYWJlbD12b2lkIDApLC0xPT09ZC5pbmRleE9mKFwidGV4dFwiKSYmKHQudGV4dD12b2lkIDApLC0xPT09ZC5pbmRleE9mKFwibmFtZVwiKSYmKHQubmFtZT12b2lkIDApKSx0fWZ1bmN0aW9uIEUodCxlKXt2YXIgcixuLGk9ZS5jb250YWluZXIsbz1lLmZ1bGxMYXlvdXQscz1lLmV2ZW50LGw9ISF0LmhMaW5lUG9pbnQsYz0hIXQudkxpbmVQb2ludDtpZihpLnNlbGVjdEFsbChcIi5zcGlrZWxpbmVcIikucmVtb3ZlKCksY3x8bCl7dmFyIGY9aC5jb21iaW5lKG8ucGxvdF9iZ2NvbG9yLG8ucGFwZXJfYmdjb2xvcik7aWYobCl7dmFyIHAsZCxnPXQuaExpbmVQb2ludDtyPWcmJmcueGEsXCJjdXJzb3JcIj09PShuPWcmJmcueWEpLnNwaWtlc25hcD8ocD1zLnBvaW50ZXJYLGQ9cy5wb2ludGVyWSk6KHA9ci5fb2Zmc2V0K2cueCxkPW4uX29mZnNldCtnLnkpO3ZhciB2LG0seT1hLnJlYWRhYmlsaXR5KGcuY29sb3IsZik8MS41P2guY29udHJhc3QoZik6Zy5jb2xvcix4PW4uc3Bpa2Vtb2RlLGI9bi5zcGlrZXRoaWNrbmVzcyxfPW4uc3Bpa2Vjb2xvcnx8eSx3PW4uX2JvdW5kaW5nQm94LGs9KHcubGVmdCt3LnJpZ2h0KS8yPHA/dy5yaWdodDp3LmxlZnQ7LTE9PT14LmluZGV4T2YoXCJ0b2F4aXNcIikmJi0xPT09eC5pbmRleE9mKFwiYWNyb3NzXCIpfHwoLTEhPT14LmluZGV4T2YoXCJ0b2F4aXNcIikmJih2PWssbT1wKSwtMSE9PXguaW5kZXhPZihcImFjcm9zc1wiKSYmKHY9bi5fY291bnRlclNwYW5bMF0sbT1uLl9jb3VudGVyU3BhblsxXSksaS5pbnNlcnQoXCJsaW5lXCIsXCI6Zmlyc3QtY2hpbGRcIikuYXR0cih7eDE6dix4MjptLHkxOmQseTI6ZCxcInN0cm9rZS13aWR0aFwiOmIsc3Ryb2tlOl8sXCJzdHJva2UtZGFzaGFycmF5XCI6dS5kYXNoU3R5bGUobi5zcGlrZWRhc2gsYil9KS5jbGFzc2VkKFwic3Bpa2VsaW5lXCIsITApLmNsYXNzZWQoXCJjcmlzcFwiLCEwKSxpLmluc2VydChcImxpbmVcIixcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKHt4MTp2LHgyOm0seTE6ZCx5MjpkLFwic3Ryb2tlLXdpZHRoXCI6YisyLHN0cm9rZTpmfSkuY2xhc3NlZChcInNwaWtlbGluZVwiLCEwKS5jbGFzc2VkKFwiY3Jpc3BcIiwhMCkpLC0xIT09eC5pbmRleE9mKFwibWFya2VyXCIpJiZpLmluc2VydChcImNpcmNsZVwiLFwiOmZpcnN0LWNoaWxkXCIpLmF0dHIoe2N4OmsrKFwicmlnaHRcIiE9PW4uc2lkZT9iOi1iKSxjeTpkLHI6YixmaWxsOl99KS5jbGFzc2VkKFwic3Bpa2VsaW5lXCIsITApfWlmKGMpe3ZhciBBLFQsTT10LnZMaW5lUG9pbnQ7cj1NJiZNLnhhLG49TSYmTS55YSxcImN1cnNvclwiPT09ci5zcGlrZXNuYXA/KEE9cy5wb2ludGVyWCxUPXMucG9pbnRlclkpOihBPXIuX29mZnNldCtNLngsVD1uLl9vZmZzZXQrTS55KTt2YXIgUyxFLEM9YS5yZWFkYWJpbGl0eShNLmNvbG9yLGYpPDEuNT9oLmNvbnRyYXN0KGYpOk0uY29sb3IsTD1yLnNwaWtlbW9kZSx6PXIuc3Bpa2V0aGlja25lc3MsTz1yLnNwaWtlY29sb3J8fEMsST1yLl9ib3VuZGluZ0JveCxEPShJLnRvcCtJLmJvdHRvbSkvMjxUP0kuYm90dG9tOkkudG9wOy0xPT09TC5pbmRleE9mKFwidG9heGlzXCIpJiYtMT09PUwuaW5kZXhPZihcImFjcm9zc1wiKXx8KC0xIT09TC5pbmRleE9mKFwidG9heGlzXCIpJiYoUz1ELEU9VCksLTEhPT1MLmluZGV4T2YoXCJhY3Jvc3NcIikmJihTPXIuX2NvdW50ZXJTcGFuWzBdLEU9ci5fY291bnRlclNwYW5bMV0pLGkuaW5zZXJ0KFwibGluZVwiLFwiOmZpcnN0LWNoaWxkXCIpLmF0dHIoe3gxOkEseDI6QSx5MTpTLHkyOkUsXCJzdHJva2Utd2lkdGhcIjp6LHN0cm9rZTpPLFwic3Ryb2tlLWRhc2hhcnJheVwiOnUuZGFzaFN0eWxlKHIuc3Bpa2VkYXNoLHopfSkuY2xhc3NlZChcInNwaWtlbGluZVwiLCEwKS5jbGFzc2VkKFwiY3Jpc3BcIiwhMCksaS5pbnNlcnQoXCJsaW5lXCIsXCI6Zmlyc3QtY2hpbGRcIikuYXR0cih7eDE6QSx4MjpBLHkxOlMseTI6RSxcInN0cm9rZS13aWR0aFwiOnorMixzdHJva2U6Zn0pLmNsYXNzZWQoXCJzcGlrZWxpbmVcIiwhMCkuY2xhc3NlZChcImNyaXNwXCIsITApKSwtMSE9PUwuaW5kZXhPZihcIm1hcmtlclwiKSYmaS5pbnNlcnQoXCJjaXJjbGVcIixcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKHtjeDpBLGN5OkQtKFwidG9wXCIhPT1yLnNpZGU/ejoteikscjp6LGZpbGw6T30pLmNsYXNzZWQoXCJzcGlrZWxpbmVcIiwhMCl9fX1mdW5jdGlvbiBDKHQsZSl7cmV0dXJuIWV8fChlLnZMaW5lUG9pbnQhPT10Ll9zcGlrZXBvaW50cy52TGluZVBvaW50fHxlLmhMaW5lUG9pbnQhPT10Ll9zcGlrZXBvaW50cy5oTGluZVBvaW50KX1mdW5jdGlvbiBMKHQsZSl7cmV0dXJuIGwucGxhaW5UZXh0KHR8fFwiXCIse2xlbjplLGFsbG93ZWRUYWdzOltcImJyXCIsXCJzdWJcIixcInN1cFwiLFwiYlwiLFwiaVwiLFwiZW1cIl19KX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9ldmVudHNcIjo2OTAsXCIuLi8uLi9saWIvb3ZlcnJpZGVfY3Vyc29yXCI6NzEyLFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCI6NzI1LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL2NvbG9yXCI6NTc4LFwiLi4vZHJhZ2VsZW1lbnRcIjo1OTYsXCIuLi9kcmF3aW5nXCI6NTk5LFwiLi9jb25zdGFudHNcIjo2MTEsXCIuL2hlbHBlcnNcIjo2MTMsZDM6MTU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjIsdGlueWNvbG9yMjo1MjJ9XSw2MTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXtyKFwiaG92ZXJsYWJlbC5iZ2NvbG9yXCIsKGk9aXx8e30pLmJnY29sb3IpLHIoXCJob3ZlcmxhYmVsLmJvcmRlcmNvbG9yXCIsaS5ib3JkZXJjb2xvcikscihcImhvdmVybGFiZWwubmFtZWxlbmd0aFwiLGkubmFtZWxlbmd0aCksbi5jb2VyY2VGb250KHIsXCJob3ZlcmxhYmVsLmZvbnRcIixpLmZvbnQpLHIoXCJob3ZlcmxhYmVsLmFsaWduXCIsaS5hbGlnbil9fSx7XCIuLi8uLi9saWJcIjo3MDF9XSw2MTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0PXR8fHt9OyhlPWV8fHt9KS5kZXNjcmlwdGlvbiYmZS5kZXNjcmlwdGlvbjt2YXIgcj1lLmtleXN8fFtdO2lmKHIubGVuZ3RoPjApe2Zvcih2YXIgbj1bXSxpPTA7aTxyLmxlbmd0aDtpKyspbltpXT1cImBcIityW2ldK1wiYFwiO1wiRmluYWxseSwgdGhlIHRlbXBsYXRlIHN0cmluZyBoYXMgYWNjZXNzIHRvIFwiLDE9PT1yLmxlbmd0aD9cInZhcmlhYmxlIFwiK25bMF06XCJ2YXJpYWJsZXMgXCIrbi5zbGljZSgwLC0xKS5qb2luKFwiLCBcIikrXCIgYW5kIFwiK24uc2xpY2UoLTEpK1wiLlwifXZhciBhPXt2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOnQuZWRpdFR5cGV8fFwibm9uZVwifTtyZXR1cm4hMSE9PXQuYXJyYXlPayYmKGEuYXJyYXlPaz0hMCksYX19LHt9XSw2MTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uL2RyYWdlbGVtZW50XCIpLG89dChcIi4vaGVscGVyc1wiKSxzPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLGw9dChcIi4vaG92ZXJcIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwiY29tcG9uZW50XCIsbmFtZTpcImZ4XCIsY29uc3RhbnRzOnQoXCIuL2NvbnN0YW50c1wiKSxzY2hlbWE6e2xheW91dDpzfSxhdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksbGF5b3V0QXR0cmlidXRlczpzLHN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzOnQoXCIuL2xheW91dF9nbG9iYWxfZGVmYXVsdHNcIiksc3VwcGx5RGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dChcIi4vbGF5b3V0X2RlZmF1bHRzXCIpLGNhbGM6dChcIi4vY2FsY1wiKSxnZXREaXN0YW5jZUZ1bmN0aW9uOm8uZ2V0RGlzdGFuY2VGdW5jdGlvbixnZXRDbG9zZXN0Om8uZ2V0Q2xvc2VzdCxpbmJveDpvLmluYm94LHF1YWRyYXR1cmU6by5xdWFkcmF0dXJlLGFwcGVuZEFycmF5UG9pbnRWYWx1ZTpvLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSxjYXN0SG92ZXJPcHRpb246ZnVuY3Rpb24odCxlLHIpe3JldHVybiBpLmNhc3RPcHRpb24odCxlLFwiaG92ZXJsYWJlbC5cIityKX0sY2FzdEhvdmVyaW5mbzpmdW5jdGlvbih0LGUscil7cmV0dXJuIGkuY2FzdE9wdGlvbih0LHIsXCJob3ZlcmluZm9cIixmdW5jdGlvbihyKXtyZXR1cm4gaS5jb2VyY2VIb3ZlcmluZm8oe2hvdmVyaW5mbzpyfSx7X21vZHVsZTp0Ll9tb2R1bGV9LGUpfSl9LGhvdmVyOmwuaG92ZXIsdW5ob3ZlcjphLnVuaG92ZXIsbG9uZUhvdmVyOmwubG9uZUhvdmVyLG11bHRpSG92ZXJzOmwubXVsdGlIb3ZlcnMsbG9uZVVuaG92ZXI6ZnVuY3Rpb24odCl7dmFyIGU9aS5pc0QzU2VsZWN0aW9uKHQpP3Q6bi5zZWxlY3QodCk7ZS5zZWxlY3RBbGwoXCJnLmhvdmVydGV4dFwiKS5yZW1vdmUoKSxlLnNlbGVjdEFsbChcIi5zcGlrZWxpbmVcIikucmVtb3ZlKCl9LGNsaWNrOnQoXCIuL2NsaWNrXCIpfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vZHJhZ2VsZW1lbnRcIjo1OTYsXCIuL2F0dHJpYnV0ZXNcIjo2MDgsXCIuL2NhbGNcIjo2MDksXCIuL2NsaWNrXCI6NjEwLFwiLi9jb25zdGFudHNcIjo2MTEsXCIuL2RlZmF1bHRzXCI6NjEyLFwiLi9oZWxwZXJzXCI6NjEzLFwiLi9ob3ZlclwiOjYxNCxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo2MTgsXCIuL2xheW91dF9kZWZhdWx0c1wiOjYxOSxcIi4vbGF5b3V0X2dsb2JhbF9kZWZhdWx0c1wiOjYyMCxkMzoxNTV9XSw2MTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9jb25zdGFudHNcIiksaT10KFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCIpKHtlZGl0VHlwZTpcIm5vbmVcIn0pO2kuZmFtaWx5LmRmbHQ9bi5IT1ZFUkZPTlQsaS5zaXplLmRmbHQ9bi5IT1ZFUkZPTlRTSVpFLGUuZXhwb3J0cz17Y2xpY2ttb2RlOnt2YWxUeXBlOlwiZmxhZ2xpc3RcIixmbGFnczpbXCJldmVudFwiLFwic2VsZWN0XCJdLGRmbHQ6XCJldmVudFwiLGVkaXRUeXBlOlwicGxvdFwiLGV4dHJhczpbXCJub25lXCJdfSxkcmFnbW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiem9vbVwiLFwicGFuXCIsXCJzZWxlY3RcIixcImxhc3NvXCIsXCJvcmJpdFwiLFwidHVybnRhYmxlXCIsITFdLGRmbHQ6XCJ6b29tXCIsZWRpdFR5cGU6XCJtb2RlYmFyXCJ9LGhvdmVybW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wieFwiLFwieVwiLFwiY2xvc2VzdFwiLCExXSxlZGl0VHlwZTpcIm1vZGViYXJcIn0saG92ZXJkaXN0YW5jZTp7dmFsVHlwZTpcImludGVnZXJcIixtaW46LTEsZGZsdDoyMCxlZGl0VHlwZTpcIm5vbmVcIn0sc3Bpa2VkaXN0YW5jZTp7dmFsVHlwZTpcImludGVnZXJcIixtaW46LTEsZGZsdDoyMCxlZGl0VHlwZTpcIm5vbmVcIn0saG92ZXJsYWJlbDp7Ymdjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJub25lXCJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcIm5vbmVcIn0sZm9udDppLGFsaWduOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJsZWZ0XCIsXCJyaWdodFwiLFwiYXV0b1wiXSxkZmx0OlwiYXV0b1wiLGVkaXRUeXBlOlwibm9uZVwifSxuYW1lbGVuZ3RoOnt2YWxUeXBlOlwiaW50ZWdlclwiLG1pbjotMSxkZmx0OjE1LGVkaXRUeXBlOlwibm9uZVwifSxlZGl0VHlwZTpcIm5vbmVcIn0sc2VsZWN0ZGlyZWN0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJoXCIsXCJ2XCIsXCJkXCIsXCJhbnlcIl0sZGZsdDpcImFueVwiLGVkaXRUeXBlOlwibm9uZVwifX19LHtcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiOjc3NSxcIi4vY29uc3RhbnRzXCI6NjExfV0sNjE5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gYShyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXZhciBvLHM9YShcImNsaWNrbW9kZVwiKTtcInNlbGVjdFwiPT09YShcImRyYWdtb2RlXCIpJiZhKFwic2VsZWN0ZGlyZWN0aW9uXCIpLGUuX2hhcyhcImNhcnRlc2lhblwiKT9zLmluZGV4T2YoXCJzZWxlY3RcIik+LTE/bz1cImNsb3Nlc3RcIjooZS5faXNIb3Jpej1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLl9zY2F0dGVyU3RhY2tPcHRzfHx7fSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl0sYT1pLnhheGlzK2kueWF4aXMsbz1yW2FdfHx7fSxzPW9baS5zdGFja2dyb3VwXXx8e307aWYoXCJoXCIhPT1pLm9yaWVudGF0aW9uJiZcImhcIiE9PXMub3JpZW50YXRpb24pcmV0dXJuITF9cmV0dXJuITB9KHIsZSksbz1lLl9pc0hvcml6P1wieVwiOlwieFwiKTpvPVwiY2xvc2VzdFwiLGEoXCJob3Zlcm1vZGVcIixvKSYmKGEoXCJob3ZlcmRpc3RhbmNlXCIpLGEoXCJzcGlrZWRpc3RhbmNlXCIpKTt2YXIgbD1lLl9oYXMoXCJtYXBib3hcIiksYz1lLl9oYXMoXCJnZW9cIiksdT1lLl9iYXNlUGxvdE1vZHVsZXMubGVuZ3RoO1wiem9vbVwiPT09ZS5kcmFnbW9kZSYmKChsfHxjKSYmMT09PXV8fGwmJmMmJjI9PT11KSYmKGUuZHJhZ21vZGU9XCJwYW5cIil9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6NjE4fV0sNjIwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2hvdmVybGFiZWxfZGVmYXVsdHNcIiksYT10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpKHQsZSxmdW5jdGlvbihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfSl9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuL2hvdmVybGFiZWxfZGVmYXVsdHNcIjo2MTUsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6NjE4fV0sNjIxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9saWIvcmVnZXhcIikuY291bnRlcixhPXQoXCIuLi8uLi9wbG90cy9kb21haW5cIikuYXR0cmlidXRlcyxvPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzXCIpLmlkUmVnZXgscz10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKSxsPXtyb3dzOnt2YWxUeXBlOlwiaW50ZWdlclwiLG1pbjoxLGVkaXRUeXBlOlwicGxvdFwifSxyb3dvcmRlcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1widG9wIHRvIGJvdHRvbVwiLFwiYm90dG9tIHRvIHRvcFwiXSxkZmx0OlwidG9wIHRvIGJvdHRvbVwiLGVkaXRUeXBlOlwicGxvdFwifSxjb2x1bW5zOnt2YWxUeXBlOlwiaW50ZWdlclwiLG1pbjoxLGVkaXRUeXBlOlwicGxvdFwifSxzdWJwbG90czp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixmcmVlTGVuZ3RoOiEwLGRpbWVuc2lvbnM6MixpdGVtczp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W2koXCJ4eVwiKS50b1N0cmluZygpLFwiXCJdLGVkaXRUeXBlOlwicGxvdFwifSxlZGl0VHlwZTpcInBsb3RcIn0seGF4ZXM6e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsZnJlZUxlbmd0aDohMCxpdGVtczp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W28ueC50b1N0cmluZygpLFwiXCJdLGVkaXRUeXBlOlwicGxvdFwifSxlZGl0VHlwZTpcInBsb3RcIn0seWF4ZXM6e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsZnJlZUxlbmd0aDohMCxpdGVtczp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W28ueS50b1N0cmluZygpLFwiXCJdLGVkaXRUeXBlOlwicGxvdFwifSxlZGl0VHlwZTpcInBsb3RcIn0scGF0dGVybjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiaW5kZXBlbmRlbnRcIixcImNvdXBsZWRcIl0sZGZsdDpcImNvdXBsZWRcIixlZGl0VHlwZTpcInBsb3RcIn0seGdhcDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGVkaXRUeXBlOlwicGxvdFwifSx5Z2FwOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZWRpdFR5cGU6XCJwbG90XCJ9LGRvbWFpbjphKHtuYW1lOlwiZ3JpZFwiLGVkaXRUeXBlOlwicGxvdFwiLG5vR3JpZENlbGw6ITB9LHt9KSx4c2lkZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYm90dG9tXCIsXCJib3R0b20gcGxvdFwiLFwidG9wIHBsb3RcIixcInRvcFwiXSxkZmx0OlwiYm90dG9tIHBsb3RcIixlZGl0VHlwZTpcInBsb3RcIn0seXNpZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImxlZnRcIixcImxlZnQgcGxvdFwiLFwicmlnaHQgcGxvdFwiLFwicmlnaHRcIl0sZGZsdDpcImxlZnQgcGxvdFwiLGVkaXRUeXBlOlwicGxvdFwifSxlZGl0VHlwZTpcInBsb3RcIn07ZnVuY3Rpb24gYyh0LGUscil7dmFyIG49ZVtyK1wiYXhlc1wiXSxpPU9iamVjdC5rZXlzKCh0Ll9zcGxvbUF4ZXN8fHt9KVtyXXx8e30pO3JldHVybiBBcnJheS5pc0FycmF5KG4pP246aS5sZW5ndGg/aTp2b2lkIDB9ZnVuY3Rpb24gdSh0LGUscixuLGksYSl7dmFyIG89ZSh0K1wiZ2FwXCIscikscz1lKFwiZG9tYWluLlwiK3QpO2UodCtcInNpZGVcIixuKTtmb3IodmFyIGw9bmV3IEFycmF5KGkpLGM9c1swXSx1PShzWzFdLWMpLyhpLW8pLGg9dSooMS1vKSxmPTA7ZjxpO2YrKyl7dmFyIHA9Yyt1KmY7bFthP2ktMS1mOmZdPVtwLHAraF19cmV0dXJuIGx9ZnVuY3Rpb24gaCh0LGUscixuLGkpe3ZhciBhLG89bmV3IEFycmF5KHIpO2Z1bmN0aW9uIHModCxyKXstMSE9PWUuaW5kZXhPZihyKSYmdm9pZCAwPT09bltyXT8ob1t0XT1yLG5bcl09dCk6b1t0XT1cIlwifWlmKEFycmF5LmlzQXJyYXkodCkpZm9yKGE9MDthPHI7YSsrKXMoYSx0W2FdKTtlbHNlIGZvcihzKDAsaSksYT0xO2E8cjthKyspcyhhLGkrKGErMSkpO3JldHVybiBvfWUuZXhwb3J0cz17bW9kdWxlVHlwZTpcImNvbXBvbmVudFwiLG5hbWU6XCJncmlkXCIsc2NoZW1hOntsYXlvdXQ6e2dyaWQ6bH19LGxheW91dEF0dHJpYnV0ZXM6bCxzaXplRGVmYXVsdHM6ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdyaWR8fHt9LGk9YyhlLHIsXCJ4XCIpLGE9YyhlLHIsXCJ5XCIpO2lmKHQuZ3JpZHx8aXx8YSl7dmFyIG8saCxmPUFycmF5LmlzQXJyYXkoci5zdWJwbG90cykmJkFycmF5LmlzQXJyYXkoci5zdWJwbG90c1swXSkscD1BcnJheS5pc0FycmF5KGkpLGQ9QXJyYXkuaXNBcnJheShhKSxnPXAmJmkhPT1yLnhheGVzJiZkJiZhIT09ci55YXhlcztmPyhvPXIuc3VicGxvdHMubGVuZ3RoLGg9ci5zdWJwbG90c1swXS5sZW5ndGgpOihkJiYobz1hLmxlbmd0aCkscCYmKGg9aS5sZW5ndGgpKTt2YXIgdj1zLm5ld0NvbnRhaW5lcihlLFwiZ3JpZFwiKSxtPUEoXCJyb3dzXCIsbykseT1BKFwiY29sdW1uc1wiLGgpO2lmKG0qeT4xKXtmfHxwfHxkfHxcImluZGVwZW5kZW50XCI9PT1BKFwicGF0dGVyblwiKSYmKGY9ITApLHYuX2hhc1N1YnBsb3RHcmlkPWY7dmFyIHgsYixfPVwidG9wIHRvIGJvdHRvbVwiPT09QShcInJvd29yZGVyXCIpLHc9Zj8uMjouMSxrPWY/LjM6LjE7ZyYmZS5fc3Bsb21HcmlkRGZsdCYmKHg9ZS5fc3Bsb21HcmlkRGZsdC54c2lkZSxiPWUuX3NwbG9tR3JpZERmbHQueXNpZGUpLHYuX2RvbWFpbnM9e3g6dShcInhcIixBLHcseCx5KSx5OnUoXCJ5XCIsQSxrLGIsbSxfKX19ZWxzZSBkZWxldGUgZS5ncmlkfWZ1bmN0aW9uIEEodCxlKXtyZXR1cm4gbi5jb2VyY2Uocix2LGwsdCxlKX19LGNvbnRlbnREZWZhdWx0czpmdW5jdGlvbih0LGUpe3ZhciByPWUuZ3JpZDtpZihyJiZyLl9kb21haW5zKXt2YXIgbixpLGEsbyxzLGwsdSxmPXQuZ3JpZHx8e30scD1lLl9zdWJwbG90cyxkPXIuX2hhc1N1YnBsb3RHcmlkLGc9ci5yb3dzLHY9ci5jb2x1bW5zLG09XCJpbmRlcGVuZGVudFwiPT09ci5wYXR0ZXJuLHk9ci5fYXhpc01hcD17fTtpZihkKXt2YXIgeD1mLnN1YnBsb3RzfHxbXTtsPXIuc3VicGxvdHM9bmV3IEFycmF5KGcpO3ZhciBiPTE7Zm9yKG49MDtuPGc7bisrKXt2YXIgXz1sW25dPW5ldyBBcnJheSh2KSx3PXhbbl18fFtdO2ZvcihpPTA7aTx2O2krKylpZihtPyhzPTE9PT1iP1wieHlcIjpcInhcIitiK1wieVwiK2IsYisrKTpzPXdbaV0sX1tpXT1cIlwiLC0xIT09cC5jYXJ0ZXNpYW4uaW5kZXhPZihzKSl7aWYodT1zLmluZGV4T2YoXCJ5XCIpLGE9cy5zbGljZSgwLHUpLG89cy5zbGljZSh1KSx2b2lkIDAhPT15W2FdJiZ5W2FdIT09aXx8dm9pZCAwIT09eVtvXSYmeVtvXSE9PW4pY29udGludWU7X1tpXT1zLHlbYV09aSx5W29dPW59fX1lbHNle3ZhciBrPWMoZSxmLFwieFwiKSxBPWMoZSxmLFwieVwiKTtyLnhheGVzPWgoayxwLnhheGlzLHYseSxcInhcIiksci55YXhlcz1oKEEscC55YXhpcyxnLHksXCJ5XCIpfXZhciBUPXIuX2FuY2hvcnM9e30sTT1cInRvcCB0byBib3R0b21cIj09PXIucm93b3JkZXI7Zm9yKHZhciBTIGluIHkpe3ZhciBFLEMsTCx6PVMuY2hhckF0KDApLE89clt6K1wic2lkZVwiXTtpZihPLmxlbmd0aDw4KVRbU109XCJmcmVlXCI7ZWxzZSBpZihcInhcIj09PXope2lmKFwidFwiPT09Ty5jaGFyQXQoMCk9PT1NPyhFPTAsQz0xLEw9Zyk6KEU9Zy0xLEM9LTEsTD0tMSksZCl7dmFyIEk9eVtTXTtmb3Iobj1FO24hPT1MO24rPUMpaWYoKHM9bFtuXVtJXSkmJih1PXMuaW5kZXhPZihcInlcIikscy5zbGljZSgwLHUpPT09Uykpe1RbU109cy5zbGljZSh1KTticmVha319ZWxzZSBmb3Iobj1FO24hPT1MO24rPUMpaWYobz1yLnlheGVzW25dLC0xIT09cC5jYXJ0ZXNpYW4uaW5kZXhPZihTK28pKXtUW1NdPW87YnJlYWt9fWVsc2UgaWYoXCJsXCI9PT1PLmNoYXJBdCgwKT8oRT0wLEM9MSxMPXYpOihFPXYtMSxDPS0xLEw9LTEpLGQpe3ZhciBEPXlbU107Zm9yKG49RTtuIT09TDtuKz1DKWlmKChzPWxbRF1bbl0pJiYodT1zLmluZGV4T2YoXCJ5XCIpLHMuc2xpY2UodSk9PT1TKSl7VFtTXT1zLnNsaWNlKDAsdSk7YnJlYWt9fWVsc2UgZm9yKG49RTtuIT09TDtuKz1DKWlmKGE9ci54YXhlc1tuXSwtMSE9PXAuY2FydGVzaWFuLmluZGV4T2YoYStTKSl7VFtTXT1hO2JyZWFrfX19fX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9yZWdleFwiOjcxNyxcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzXCI6NzU1LFwiLi4vLi4vcGxvdHMvZG9tYWluXCI6Nzc0fV0sNjIyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHNcIiksaT10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKS50ZW1wbGF0ZWRBcnJheTtlLmV4cG9ydHM9aShcImltYWdlXCIse3Zpc2libGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcImFycmF5ZHJhd1wifSxzb3VyY2U6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcImFycmF5ZHJhd1wifSxsYXllcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYmVsb3dcIixcImFib3ZlXCJdLGRmbHQ6XCJhYm92ZVwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LHNpemV4Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LHNpemV5Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LHNpemluZzp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiZmlsbFwiLFwiY29udGFpblwiLFwic3RyZXRjaFwiXSxkZmx0OlwiY29udGFpblwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LG9wYWNpdHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0seDp7dmFsVHlwZTpcImFueVwiLGRmbHQ6MCxlZGl0VHlwZTpcImFycmF5ZHJhd1wifSx5Ont2YWxUeXBlOlwiYW55XCIsZGZsdDowLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LHhhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImxlZnRcIixcImNlbnRlclwiLFwicmlnaHRcIl0sZGZsdDpcImxlZnRcIixlZGl0VHlwZTpcImFycmF5ZHJhd1wifSx5YW5jaG9yOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ0b3BcIixcIm1pZGRsZVwiLFwiYm90dG9tXCJdLGRmbHQ6XCJ0b3BcIixlZGl0VHlwZTpcImFycmF5ZHJhd1wifSx4cmVmOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJwYXBlclwiLG4uaWRSZWdleC54LnRvU3RyaW5nKCldLGRmbHQ6XCJwYXBlclwiLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LHlyZWY6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInBhcGVyXCIsbi5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZGZsdDpcInBhcGVyXCIsZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0sZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0pfSx7XCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50c1wiOjc1NX1dLDYyMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuLi8uLi9saWIvdG9fbG9nX3JhbmdlXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtlPWV8fHt9O3ZhciBvPVwibG9nXCI9PT1yJiZcImxpbmVhclwiPT09ZS50eXBlLHM9XCJsaW5lYXJcIj09PXImJlwibG9nXCI9PT1lLnR5cGU7aWYob3x8cylmb3IodmFyIGwsYyx1PXQuX2Z1bGxMYXlvdXQuaW1hZ2VzLGg9ZS5faWQuY2hhckF0KDApLGY9MDtmPHUubGVuZ3RoO2YrKylpZihjPVwiaW1hZ2VzW1wiK2YrXCJdLlwiLChsPXVbZl0pW2grXCJyZWZcIl09PT1lLl9pZCl7dmFyIHA9bFtoXSxkPWxbXCJzaXplXCIraF0sZz1udWxsLHY9bnVsbDtpZihvKXtnPWkocCxlLnJhbmdlKTt2YXIgbT1kL01hdGgucG93KDEwLGcpLzI7dj0yKk1hdGgubG9nKG0rTWF0aC5zcXJ0KDErbSptKSkvTWF0aC5MTjEwfWVsc2Ugdj0oZz1NYXRoLnBvdygxMCxwKSkqKE1hdGgucG93KDEwLGQvMiktTWF0aC5wb3coMTAsLWQvMikpO24oZyk/bih2KXx8KHY9bnVsbCk6KGc9bnVsbCx2PW51bGwpLGEoYytoLGcpLGEoYytcInNpemVcIitoLHYpfX19LHtcIi4uLy4uL2xpYi90b19sb2dfcmFuZ2VcIjo3MjcsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDYyNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksYT10KFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCIpLG89dChcIi4vYXR0cmlidXRlc1wiKTtmdW5jdGlvbiBzKHQsZSxyKXtmdW5jdGlvbiBhKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxvLHIsaSl9dmFyIHM9YShcInNvdXJjZVwiKTtpZighYShcInZpc2libGVcIiwhIXMpKXJldHVybiBlO2EoXCJsYXllclwiKSxhKFwieGFuY2hvclwiKSxhKFwieWFuY2hvclwiKSxhKFwic2l6ZXhcIiksYShcInNpemV5XCIpLGEoXCJzaXppbmdcIiksYShcIm9wYWNpdHlcIik7Zm9yKHZhciBsPXtfZnVsbExheW91dDpyfSxjPVtcInhcIixcInlcIl0sdT0wO3U8Mjt1Kyspe3ZhciBoPWNbdV0sZj1pLmNvZXJjZVJlZih0LGUsbCxoLFwicGFwZXJcIik7aWYoXCJwYXBlclwiIT09ZilpLmdldEZyb21JZChsLGYpLl9pbWdJbmRpY2VzLnB1c2goZS5faW5kZXgpO2kuY29lcmNlUG9zaXRpb24oZSxsLGEsZixoLDApfXJldHVybiBlfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2EodCxlLHtuYW1lOlwiaW1hZ2VzXCIsaGFuZGxlSXRlbURlZmF1bHRzOnN9KX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0c1wiOjc0NSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi9hdHRyaWJ1dGVzXCI6NjIyfV0sNjI1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uL2RyYXdpbmdcIiksYT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksbz10KFwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIscz10Ll9mdWxsTGF5b3V0LGw9W10sYz17fSx1PVtdO2ZvcihyPTA7cjxzLmltYWdlcy5sZW5ndGg7cisrKXt2YXIgaD1zLmltYWdlc1tyXTtpZihoLnZpc2libGUpaWYoXCJiZWxvd1wiPT09aC5sYXllciYmXCJwYXBlclwiIT09aC54cmVmJiZcInBhcGVyXCIhPT1oLnlyZWYpe2U9aC54cmVmK2gueXJlZjt2YXIgZj1zLl9wbG90c1tlXTtpZighZil7dS5wdXNoKGgpO2NvbnRpbnVlfWYubWFpbnBsb3QmJihlPWYubWFpbnBsb3QuaWQpLGNbZV18fChjW2VdPVtdKSxjW2VdLnB1c2goaCl9ZWxzZVwiYWJvdmVcIj09PWgubGF5ZXI/bC5wdXNoKGgpOnUucHVzaChoKX12YXIgcD17eDp7bGVmdDp7c2l6aW5nOlwieE1pblwiLG9mZnNldDowfSxjZW50ZXI6e3NpemluZzpcInhNaWRcIixvZmZzZXQ6LS41fSxyaWdodDp7c2l6aW5nOlwieE1heFwiLG9mZnNldDotMX19LHk6e3RvcDp7c2l6aW5nOlwiWU1pblwiLG9mZnNldDowfSxtaWRkbGU6e3NpemluZzpcIllNaWRcIixvZmZzZXQ6LS41fSxib3R0b206e3NpemluZzpcIllNYXhcIixvZmZzZXQ6LTF9fX07ZnVuY3Rpb24gZChlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtpZighdGhpcy5pbWd8fHRoaXMuaW1nLnNyYyE9PWUuc291cmNlKXtyLmF0dHIoXCJ4bWxuc1wiLG8uc3ZnKTt2YXIgaT1uZXcgUHJvbWlzZShmdW5jdGlvbih0KXt2YXIgbj1uZXcgSW1hZ2U7ZnVuY3Rpb24gaSgpe3IucmVtb3ZlKCksdCgpfXRoaXMuaW1nPW4sbi5zZXRBdHRyaWJ1dGUoXCJjcm9zc09yaWdpblwiLFwiYW5vbnltb3VzXCIpLG4ub25lcnJvcj1pLG4ub25sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtlLndpZHRoPXRoaXMud2lkdGgsZS5oZWlnaHQ9dGhpcy5oZWlnaHQsZS5nZXRDb250ZXh0KFwiMmRcIikuZHJhd0ltYWdlKHRoaXMsMCwwKTt2YXIgbj1lLnRvRGF0YVVSTChcImltYWdlL3BuZ1wiKTtyLmF0dHIoXCJ4bGluazpocmVmXCIsbiksdCgpfSxyLm9uKFwiZXJyb3JcIixpKSxuLnNyYz1lLnNvdXJjZX0uYmluZCh0aGlzKSk7dC5fcHJvbWlzZXMucHVzaChpKX19ZnVuY3Rpb24gZyhlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxvPWEuZ2V0RnJvbUlkKHQsZS54cmVmKSxsPWEuZ2V0RnJvbUlkKHQsZS55cmVmKSxjPXMuX3NpemUsdT1vP01hdGguYWJzKG8ubDJwKGUuc2l6ZXgpLW8ubDJwKDApKTplLnNpemV4KmMudyxoPWw/TWF0aC5hYnMobC5sMnAoZS5zaXpleSktbC5sMnAoMCkpOmUuc2l6ZXkqYy5oLGY9dSpwLnhbZS54YW5jaG9yXS5vZmZzZXQsZD1oKnAueVtlLnlhbmNob3JdLm9mZnNldCxnPXAueFtlLnhhbmNob3JdLnNpemluZytwLnlbZS55YW5jaG9yXS5zaXppbmcsdj0obz9vLnIycChlLngpK28uX29mZnNldDplLngqYy53K2MubCkrZixtPShsP2wucjJwKGUueSkrbC5fb2Zmc2V0OmMuaC1lLnkqYy5oK2MudCkrZDtzd2l0Y2goZS5zaXppbmcpe2Nhc2VcImZpbGxcIjpnKz1cIiBzbGljZVwiO2JyZWFrO2Nhc2VcInN0cmV0Y2hcIjpnPVwibm9uZVwifXIuYXR0cih7eDp2LHk6bSx3aWR0aDp1LGhlaWdodDpoLHByZXNlcnZlQXNwZWN0UmF0aW86ZyxvcGFjaXR5OmUub3BhY2l0eX0pO3ZhciB5PShvP28uX2lkOlwiXCIpKyhsP2wuX2lkOlwiXCIpO2kuc2V0Q2xpcFVybChyLHk/XCJjbGlwXCIrcy5fdWlkK3k6bnVsbCx0KX12YXIgdj1zLl9pbWFnZUxvd2VyTGF5ZXIuc2VsZWN0QWxsKFwiaW1hZ2VcIikuZGF0YSh1KSxtPXMuX2ltYWdlVXBwZXJMYXllci5zZWxlY3RBbGwoXCJpbWFnZVwiKS5kYXRhKGwpO3YuZW50ZXIoKS5hcHBlbmQoXCJpbWFnZVwiKSxtLmVudGVyKCkuYXBwZW5kKFwiaW1hZ2VcIiksdi5leGl0KCkucmVtb3ZlKCksbS5leGl0KCkucmVtb3ZlKCksdi5lYWNoKGZ1bmN0aW9uKHQpe2QuYmluZCh0aGlzKSh0KSxnLmJpbmQodGhpcykodCl9KSxtLmVhY2goZnVuY3Rpb24odCl7ZC5iaW5kKHRoaXMpKHQpLGcuYmluZCh0aGlzKSh0KX0pO3ZhciB5PU9iamVjdC5rZXlzKHMuX3Bsb3RzKTtmb3Iocj0wO3I8eS5sZW5ndGg7cisrKXtlPXlbcl07dmFyIHg9cy5fcGxvdHNbZV07aWYoeC5pbWFnZWxheWVyKXt2YXIgYj14LmltYWdlbGF5ZXIuc2VsZWN0QWxsKFwiaW1hZ2VcIikuZGF0YShjW2VdfHxbXSk7Yi5lbnRlcigpLmFwcGVuZChcImltYWdlXCIpLGIuZXhpdCgpLnJlbW92ZSgpLGIuZWFjaChmdW5jdGlvbih0KXtkLmJpbmQodGhpcykodCksZy5iaW5kKHRoaXMpKHQpfSl9fX19LHtcIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzXCI6Njc5LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9kcmF3aW5nXCI6NTk5LGQzOjE1NX1dLDYyNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17bW9kdWxlVHlwZTpcImNvbXBvbmVudFwiLG5hbWU6XCJpbWFnZXNcIixsYXlvdXRBdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIiksaW5jbHVkZUJhc2VQbG90OnQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzXCIpKFwiaW1hZ2VzXCIpLGRyYXc6dChcIi4vZHJhd1wiKSxjb252ZXJ0Q29vcmRzOnQoXCIuL2NvbnZlcnRfY29vcmRzXCIpfX0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2luY2x1ZGVfY29tcG9uZW50c1wiOjc1OSxcIi4vYXR0cmlidXRlc1wiOjYyMixcIi4vY29udmVydF9jb29yZHNcIjo2MjMsXCIuL2RlZmF1bHRzXCI6NjI0LFwiLi9kcmF3XCI6NjI1fV0sNjI3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiKSxpPXQoXCIuLi9jb2xvci9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz17Ymdjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJsZWdlbmRcIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZTpcImxlZ2VuZFwifSxib3JkZXJ3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTpcImxlZ2VuZFwifSxmb250Om4oe2VkaXRUeXBlOlwibGVnZW5kXCJ9KSxvcmllbnRhdGlvbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1widlwiLFwiaFwiXSxkZmx0OlwidlwiLGVkaXRUeXBlOlwibGVnZW5kXCJ9LHRyYWNlb3JkZXI6e3ZhbFR5cGU6XCJmbGFnbGlzdFwiLGZsYWdzOltcInJldmVyc2VkXCIsXCJncm91cGVkXCJdLGV4dHJhczpbXCJub3JtYWxcIl0sZWRpdFR5cGU6XCJsZWdlbmRcIn0sdHJhY2Vncm91cGdhcDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MTAsZWRpdFR5cGU6XCJsZWdlbmRcIn0saXRlbXNpemluZzp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1widHJhY2VcIixcImNvbnN0YW50XCJdLGRmbHQ6XCJ0cmFjZVwiLGVkaXRUeXBlOlwibGVnZW5kXCJ9LHg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46LTIsbWF4OjMsZGZsdDoxLjAyLGVkaXRUeXBlOlwibGVnZW5kXCJ9LHhhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImF1dG9cIixcImxlZnRcIixcImNlbnRlclwiLFwicmlnaHRcIl0sZGZsdDpcImxlZnRcIixlZGl0VHlwZTpcImxlZ2VuZFwifSx5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOi0yLG1heDozLGRmbHQ6MSxlZGl0VHlwZTpcImxlZ2VuZFwifSx5YW5jaG9yOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhdXRvXCIsXCJ0b3BcIixcIm1pZGRsZVwiLFwiYm90dG9tXCJdLGRmbHQ6XCJhdXRvXCIsZWRpdFR5cGU6XCJsZWdlbmRcIn0sdWlyZXZpc2lvbjp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwibm9uZVwifSx2YWxpZ246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInRvcFwiLFwibWlkZGxlXCIsXCJib3R0b21cIl0sZGZsdDpcIm1pZGRsZVwiLGVkaXRUeXBlOlwibGVnZW5kXCJ9LGVkaXRUeXBlOlwibGVnZW5kXCJ9fSx7XCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIjo3NzUsXCIuLi9jb2xvci9hdHRyaWJ1dGVzXCI6NTc3fV0sNjI4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtzY3JvbGxCYXJXaWR0aDo2LHNjcm9sbEJhck1pbkhlaWdodDoyMCxzY3JvbGxCYXJDb2xvcjpcIiM4MDhCQTRcIixzY3JvbGxCYXJNYXJnaW46NCx0ZXh0T2Zmc2V0WDo0MH19LHt9XSw2Mjk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIiksbz10KFwiLi9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzXCIpLGw9dChcIi4vaGVscGVyc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgYyx1LGgsZixwPXQubGVnZW5kfHx7fSxkPTAsZz0hMSx2PVwibm9ybWFsXCIsbT0wO208ci5sZW5ndGg7bSsrKXt2YXIgeT1yW21dO3kudmlzaWJsZSYmKCh5LnNob3dsZWdlbmR8fHkuX2RmbHRTaG93TGVnZW5kKSYmKGQrKyx5LnNob3dsZWdlbmQmJihnPSEwLChuLnRyYWNlSXMoeSxcInBpZVwiKXx8ITA9PT15Ll9pbnB1dC5zaG93bGVnZW5kKSYmZCsrKSksKG4udHJhY2VJcyh5LFwiYmFyXCIpJiZcInN0YWNrXCI9PT1lLmJhcm1vZGV8fC0xIT09W1widG9uZXh0eFwiLFwidG9uZXh0eVwiXS5pbmRleE9mKHkuZmlsbCkpJiYodj1sLmlzR3JvdXBlZCh7dHJhY2VvcmRlcjp2fSk/XCJncm91cGVkK3JldmVyc2VkXCI6XCJyZXZlcnNlZFwiKSx2b2lkIDAhPT15LmxlZ2VuZGdyb3VwJiZcIlwiIT09eS5sZWdlbmRncm91cCYmKHY9bC5pc1JldmVyc2VkKHt0cmFjZW9yZGVyOnZ9KT9cInJldmVyc2VkK2dyb3VwZWRcIjpcImdyb3VwZWRcIikpfXZhciB4PWkuY29lcmNlKHQsZSxzLFwic2hvd2xlZ2VuZFwiLGcmJmQ+MSk7aWYoITEhPT14fHxwLnVpcmV2aXNpb24pe3ZhciBiPWEubmV3Q29udGFpbmVyKGUsXCJsZWdlbmRcIik7aWYodyhcInVpcmV2aXNpb25cIixlLnVpcmV2aXNpb24pLCExIT09eCl7aWYodyhcImJnY29sb3JcIixlLnBhcGVyX2JnY29sb3IpLHcoXCJib3JkZXJjb2xvclwiKSx3KFwiYm9yZGVyd2lkdGhcIiksaS5jb2VyY2VGb250KHcsXCJmb250XCIsZS5mb250KSx3KFwib3JpZW50YXRpb25cIiksXCJoXCI9PT1iLm9yaWVudGF0aW9uKXt2YXIgXz10LnhheGlzO24uZ2V0Q29tcG9uZW50TWV0aG9kKFwicmFuZ2VzbGlkZXJcIixcImlzVmlzaWJsZVwiKShfKT8oYz0wLGg9XCJsZWZ0XCIsdT0xLjEsZj1cImJvdHRvbVwiKTooYz0wLGg9XCJsZWZ0XCIsdT0tLjEsZj1cInRvcFwiKX13KFwidHJhY2VvcmRlclwiLHYpLGwuaXNHcm91cGVkKGUubGVnZW5kKSYmdyhcInRyYWNlZ3JvdXBnYXBcIiksdyhcIml0ZW1zaXppbmdcIiksdyhcInhcIixjKSx3KFwieGFuY2hvclwiLGgpLHcoXCJ5XCIsdSksdyhcInlhbmNob3JcIixmKSx3KFwidmFsaWduXCIpLGkubm9uZU9yQWxsKHAsYixbXCJ4XCIsXCJ5XCJdKX19ZnVuY3Rpb24gdyh0LGUpe3JldHVybiBpLmNvZXJjZShwLGIsbyx0LGUpfX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlc1wiOjgwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9hdHRyaWJ1dGVzXCI6NjI3LFwiLi9oZWxwZXJzXCI6NjMzfV0sNjMwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9wbG90cy9wbG90c1wiKSxvPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxzPXQoXCIuLi8uLi9saWIvZXZlbnRzXCIpLGw9dChcIi4uL2RyYWdlbGVtZW50XCIpLGM9dChcIi4uL2RyYXdpbmdcIiksdT10KFwiLi4vY29sb3JcIiksaD10KFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCIpLGY9dChcIi4vaGFuZGxlX2NsaWNrXCIpLHA9dChcIi4vY29uc3RhbnRzXCIpLGQ9dChcIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnNcIiksZz10KFwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiKSx2PWcuTElORV9TUEFDSU5HLG09Zy5GUk9NX1RMLHk9Zy5GUk9NX0JSLHg9dChcIi4vZ2V0X2xlZ2VuZF9kYXRhXCIpLGI9dChcIi4vc3R5bGVcIiksXz10KFwiLi9oZWxwZXJzXCIpLHc9ZC5EQkxDTElDS0RFTEFZO2Z1bmN0aW9uIGsodCxlLHIsbixpKXt2YXIgYT1yLmRhdGEoKVswXVswXS50cmFjZSxvPXtldmVudDppLG5vZGU6ci5ub2RlKCksY3VydmVOdW1iZXI6YS5pbmRleCxleHBhbmRlZEluZGV4OmEuX2V4cGFuZGVkSW5kZXgsZGF0YTp0LmRhdGEsbGF5b3V0OnQubGF5b3V0LGZyYW1lczp0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLGNvbmZpZzp0Ll9jb250ZXh0LGZ1bGxEYXRhOnQuX2Z1bGxEYXRhLGZ1bGxMYXlvdXQ6dC5fZnVsbExheW91dH07aWYoYS5fZ3JvdXAmJihvLmdyb3VwPWEuX2dyb3VwKSxcInBpZVwiPT09YS50eXBlJiYoby5sYWJlbD1yLmRhdHVtKClbMF0ubGFiZWwpLCExIT09cy50cmlnZ2VySGFuZGxlcih0LFwicGxvdGx5X2xlZ2VuZGNsaWNrXCIsbykpaWYoMT09PW4pZS5fY2xpY2tUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtmKHIsdCxuKX0sdyk7ZWxzZSBpZigyPT09bil7ZS5fY2xpY2tUaW1lb3V0JiZjbGVhclRpbWVvdXQoZS5fY2xpY2tUaW1lb3V0KSx0Ll9sZWdlbmRNb3VzZURvd25UaW1lPTAsITEhPT1zLnRyaWdnZXJIYW5kbGVyKHQsXCJwbG90bHlfbGVnZW5kZG91YmxlY2xpY2tcIixvKSYmZihyLHQsbil9fWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBuPXQuZGF0YSgpWzBdWzBdLGE9ZS5fZnVsbExheW91dCxzPW4udHJhY2UsbD1vLnRyYWNlSXMocyxcInBpZVwiKSx1PXMuaW5kZXgsZj1lLl9jb250ZXh0LmVkaXRzLmxlZ2VuZFRleHQmJiFsLGQ9bD9uLmxhYmVsOnMubmFtZTthLm1ldGEmJihkPWkudGVtcGxhdGVTdHJpbmcoZCx7bWV0YTphLm1ldGF9KSk7dmFyIGc9aS5lbnN1cmVTaW5nbGUodCxcInRleHRcIixcImxlZ2VuZHRleHRcIik7ZnVuY3Rpb24gbShyKXtoLmNvbnZlcnRUb1RzcGFucyhyLGUsZnVuY3Rpb24oKXshZnVuY3Rpb24odCxlKXt2YXIgcj10LmRhdGEoKVswXVswXTtpZighci50cmFjZS5zaG93bGVnZW5kKXJldHVybiB2b2lkIHQucmVtb3ZlKCk7dmFyIG4saSxhPXQuc2VsZWN0KFwiZ1tjbGFzcyo9bWF0aC1ncm91cF1cIiksbz1hLm5vZGUoKSxzPWUuX2Z1bGxMYXlvdXQubGVnZW5kLmZvbnQuc2l6ZSp2O2lmKG8pe3ZhciBsPWMuYkJveChvKTtuPWwuaGVpZ2h0LGk9bC53aWR0aCxjLnNldFRyYW5zbGF0ZShhLDAsbi80KX1lbHNle3ZhciB1PXQuc2VsZWN0KFwiLmxlZ2VuZHRleHRcIiksZj1oLmxpbmVDb3VudCh1KSxkPXUubm9kZSgpO249cypmLGk9ZD9jLmJCb3goZCkud2lkdGg6MDt2YXIgZz1zKiguMysoMS1mKS8yKTtoLnBvc2l0aW9uVGV4dCh1LHAudGV4dE9mZnNldFgsZyl9ci5saW5lSGVpZ2h0PXMsci5oZWlnaHQ9TWF0aC5tYXgobiwxNikrMyxyLndpZHRoPWl9KHQsZSl9KX1nLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLFwic3RhcnRcIikuY2xhc3NlZChcInVzZXItc2VsZWN0LW5vbmVcIiwhMCkuY2FsbChjLmZvbnQsYS5sZWdlbmQuZm9udCkudGV4dChmP1QoZCxyKTpkKSxoLnBvc2l0aW9uVGV4dChnLHAudGV4dE9mZnNldFgsMCksZj9nLmNhbGwoaC5tYWtlRWRpdGFibGUse2dkOmUsdGV4dDpkfSkuY2FsbChtKS5vbihcImVkaXRcIixmdW5jdGlvbih0KXt0aGlzLnRleHQoVCh0LHIpKS5jYWxsKG0pO3ZhciBhPW4udHJhY2UuX2Z1bGxJbnB1dHx8e30scz17fTtpZihvLmhhc1RyYW5zZm9ybShhLFwiZ3JvdXBieVwiKSl7dmFyIGw9by5nZXRUcmFuc2Zvcm1JbmRpY2VzKGEsXCJncm91cGJ5XCIpLGM9bFtsLmxlbmd0aC0xXSxoPWkua2V5ZWRDb250YWluZXIoYSxcInRyYW5zZm9ybXNbXCIrYytcIl0uc3R5bGVzXCIsXCJ0YXJnZXRcIixcInZhbHVlLm5hbWVcIik7aC5zZXQobi50cmFjZS5fZ3JvdXAsdCkscz1oLmNvbnN0cnVjdFVwZGF0ZSgpfWVsc2Ugcy5uYW1lPXQ7cmV0dXJuIG8uY2FsbChcIl9ndWlSZXN0eWxlXCIsZSxzLHUpfSk6bShnKX1mdW5jdGlvbiBUKHQsZSl7dmFyIHI9TWF0aC5tYXgoNCxlKTtpZih0JiZ0LnRyaW0oKS5sZW5ndGg+PXIvMilyZXR1cm4gdDtmb3IodmFyIG49ci0odD10fHxcIlwiKS5sZW5ndGg7bj4wO24tLSl0Kz1cIiBcIjtyZXR1cm4gdH1mdW5jdGlvbiBNKHQsZSl7dmFyIHIsYT0xLG89aS5lbnN1cmVTaW5nbGUodCxcInJlY3RcIixcImxlZ2VuZHRvZ2dsZVwiLGZ1bmN0aW9uKHQpe3Quc3R5bGUoXCJjdXJzb3JcIixcInBvaW50ZXJcIikuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsXCJhbGxcIikuY2FsbCh1LmZpbGwsXCJyZ2JhKDAsMCwwLDApXCIpfSk7by5vbihcIm1vdXNlZG93blwiLGZ1bmN0aW9uKCl7KHI9KG5ldyBEYXRlKS5nZXRUaW1lKCkpLWUuX2xlZ2VuZE1vdXNlRG93blRpbWU8dz9hKz0xOihhPTEsZS5fbGVnZW5kTW91c2VEb3duVGltZT1yKX0pLG8ub24oXCJtb3VzZXVwXCIsZnVuY3Rpb24oKXtpZighZS5fZHJhZ2dlZCYmIWUuX2VkaXRpbmcpe3ZhciByPWUuX2Z1bGxMYXlvdXQubGVnZW5kOyhuZXcgRGF0ZSkuZ2V0VGltZSgpLWUuX2xlZ2VuZE1vdXNlRG93blRpbWU+dyYmKGE9TWF0aC5tYXgoYS0xLDEpKSxrKGUscix0LGEsbi5ldmVudCl9fSl9ZnVuY3Rpb24gUyh0LGUscil7dmFyIGE9dC5fZnVsbExheW91dCxvPWEubGVnZW5kLHM9by5ib3JkZXJ3aWR0aCxsPV8uaXNHcm91cGVkKG8pLHU9MDtpZihvLl93aWR0aD0wLG8uX2hlaWdodD0wLF8uaXNWZXJ0aWNhbChvKSlsJiZlLmVhY2goZnVuY3Rpb24odCxlKXtjLnNldFRyYW5zbGF0ZSh0aGlzLDAsZSpvLnRyYWNlZ3JvdXBnYXApfSksci5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj1lLmhlaWdodCxuPWUud2lkdGg7Yy5zZXRUcmFuc2xhdGUodGhpcyxzLDUrcytvLl9oZWlnaHQrci8yKSxvLl9oZWlnaHQrPXIsby5fd2lkdGg9TWF0aC5tYXgoby5fd2lkdGgsbil9KSxvLl93aWR0aCs9NDUrMipzLG8uX2hlaWdodCs9MTArMipzLGwmJihvLl9oZWlnaHQrPShvLl9sZ3JvdXBzTGVuZ3RoLTEpKm8udHJhY2Vncm91cGdhcCksdT00MDtlbHNlIGlmKGwpe3ZhciBoLGY9MCxwPTAsZD1lLmRhdGEoKSxnPTA7Zm9yKGg9MDtoPGQubGVuZ3RoO2grKyl7dmFyIHY9ZFtoXSxtPXYubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLndpZHRofSkseT1pLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxtKSx4PXYucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZVswXS5oZWlnaHR9LDApO3A9TWF0aC5tYXgocCx5KSxmPU1hdGgubWF4KGYseCksZz1NYXRoLm1heChnLHYubGVuZ3RoKX1wKz01LHArPTQwO3ZhciBiPVtvLl93aWR0aF0sdz1bXSxrPTA7Zm9yKGg9MDtoPGQubGVuZ3RoO2grKyl7YS5fc2l6ZS53PHMrby5fd2lkdGgrNStwPyhiW2IubGVuZ3RoLTFdPWJbMF0sby5fd2lkdGg9cCxrKyspOm8uX3dpZHRoKz1wK3M7dmFyIEE9aypmO0ErPWs+MD9vLnRyYWNlZ3JvdXBnYXA6MCx3LnB1c2goQSksYi5wdXNoKG8uX3dpZHRoKX1lLmVhY2goZnVuY3Rpb24odCxlKXtjLnNldFRyYW5zbGF0ZSh0aGlzLGJbZV0sd1tlXSl9KSxlLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoXCJnLnRyYWNlc1wiKSxlPTA7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPXRbMF0uaGVpZ2h0O2Muc2V0VHJhbnNsYXRlKHRoaXMsMCw1K3MrZStyLzIpLGUrPXJ9KX0pO3ZhciBUPXdbdy5sZW5ndGgtMV0rZjtvLl9oZWlnaHQ9MTArMipzK1Q7dmFyIE09TWF0aC5tYXguYXBwbHkobnVsbCxiKTtvLl93aWR0aD1NK3ArNDAsby5fd2lkdGgrPTIqc31lbHNle3ZhciBTPTAsRT0wLEM9MCxMPTAsej0wO3IuZWFjaChmdW5jdGlvbih0KXtDPU1hdGgubWF4KDQwK3RbMF0ud2lkdGgsQykseis9NDArdFswXS53aWR0aCs1fSk7dmFyIE89YS5fc2l6ZS53PnMrei01O3IuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9Tz80MCt0WzBdLndpZHRoOkM7cytMKzUrcj5hLl9zaXplLncmJihMPTAsUys9RSxvLl9oZWlnaHQrPUUsRT0wKSxjLnNldFRyYW5zbGF0ZSh0aGlzLHMrTCw1K3MrZS5oZWlnaHQvMitTKSxvLl93aWR0aCs9NStyLEwrPTUrcixFPU1hdGgubWF4KGUuaGVpZ2h0LEUpfSksTz9vLl9oZWlnaHQ9RTpvLl9oZWlnaHQrPUUsby5fd2lkdGgrPTIqcyxvLl9oZWlnaHQrPTEwKzIqc31vLl93aWR0aD1NYXRoLmNlaWwoby5fd2lkdGgpLG8uX2hlaWdodD1NYXRoLmNlaWwoby5faGVpZ2h0KTt2YXIgST10Ll9jb250ZXh0LmVkaXRzLmxlZ2VuZFRleHR8fHQuX2NvbnRleHQuZWRpdHMubGVnZW5kUG9zaXRpb247ci5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoXCIubGVnZW5kdG9nZ2xlXCIpO2Muc2V0UmVjdChyLDAsLWUuaGVpZ2h0LzIsKEk/MDpvLl93aWR0aCkrdSxlLmhlaWdodCl9KX1mdW5jdGlvbiBFKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQubGVnZW5kLHI9XCJsZWZ0XCI7aS5pc1JpZ2h0QW5jaG9yKGUpP3I9XCJyaWdodFwiOmkuaXNDZW50ZXJBbmNob3IoZSkmJihyPVwiY2VudGVyXCIpO3ZhciBuPVwidG9wXCI7aS5pc0JvdHRvbUFuY2hvcihlKT9uPVwiYm90dG9tXCI6aS5pc01pZGRsZUFuY2hvcihlKSYmKG49XCJtaWRkbGVcIiksYS5hdXRvTWFyZ2luKHQsXCJsZWdlbmRcIix7eDplLngseTplLnksbDplLl93aWR0aCptW3JdLHI6ZS5fd2lkdGgqeVtyXSxiOmUuX2hlaWdodCp5W25dLHQ6ZS5faGVpZ2h0Km1bbl19KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPVwibGVnZW5kXCIrZS5fdWlkO2lmKGUuX2luZm9sYXllciYmdC5jYWxjZGF0YSl7dC5fbGVnZW5kTW91c2VEb3duVGltZXx8KHQuX2xlZ2VuZE1vdXNlRG93blRpbWU9MCk7dmFyIHM9ZS5sZWdlbmQsaD1lLnNob3dsZWdlbmQmJngodC5jYWxjZGF0YSxzKSxmPWUuaGlkZGVubGFiZWxzfHxbXTtpZighZS5zaG93bGVnZW5kfHwhaC5sZW5ndGgpcmV0dXJuIGUuX2luZm9sYXllci5zZWxlY3RBbGwoXCIubGVnZW5kXCIpLnJlbW92ZSgpLGUuX3RvcGRlZnMuc2VsZWN0KFwiI1wiK3IpLnJlbW92ZSgpLHZvaWQgYS5hdXRvTWFyZ2luKHQsXCJsZWdlbmRcIik7Zm9yKHZhciBkPTAsZz0wO2c8aC5sZW5ndGg7ZysrKWZvcih2YXIgdj0wO3Y8aFtnXS5sZW5ndGg7disrKXt2YXIgXz1oW2ddW3ZdWzBdLHc9Xy50cmFjZSxUPW8udHJhY2VJcyh3LFwicGllXCIpP18ubGFiZWw6dy5uYW1lO2Q9TWF0aC5tYXgoZCxUJiZULmxlbmd0aHx8MCl9dmFyIEM9ITEsTD1pLmVuc3VyZVNpbmdsZShlLl9pbmZvbGF5ZXIsXCJnXCIsXCJsZWdlbmRcIixmdW5jdGlvbih0KXt0LmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpLEM9ITB9KSx6PWkuZW5zdXJlU2luZ2xlQnlJZChlLl90b3BkZWZzLFwiY2xpcFBhdGhcIixyLGZ1bmN0aW9uKHQpe3QuYXBwZW5kKFwicmVjdFwiKX0pLE89aS5lbnN1cmVTaW5nbGUoTCxcInJlY3RcIixcImJnXCIsZnVuY3Rpb24odCl7dC5hdHRyKFwic2hhcGUtcmVuZGVyaW5nXCIsXCJjcmlzcEVkZ2VzXCIpfSk7Ty5jYWxsKHUuc3Ryb2tlLHMuYm9yZGVyY29sb3IpLmNhbGwodS5maWxsLHMuYmdjb2xvcikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixzLmJvcmRlcndpZHRoK1wicHhcIik7dmFyIEk9aS5lbnN1cmVTaW5nbGUoTCxcImdcIixcInNjcm9sbGJveFwiKSxEPWkuZW5zdXJlU2luZ2xlKEwsXCJyZWN0XCIsXCJzY3JvbGxiYXJcIixmdW5jdGlvbih0KXt0LmF0dHIoe3J4OjIwLHJ5OjMsd2lkdGg6MCxoZWlnaHQ6MH0pLmNhbGwodS5maWxsLFwiIzgwOEJBNFwiKX0pLFA9SS5zZWxlY3RBbGwoXCJnLmdyb3Vwc1wiKS5kYXRhKGgpO1AuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLFwiZ3JvdXBzXCIpLFAuZXhpdCgpLnJlbW92ZSgpO3ZhciBSPVAuc2VsZWN0QWxsKFwiZy50cmFjZXNcIikuZGF0YShpLmlkZW50aXR5KTtSLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIixcInRyYWNlc1wiKSxSLmV4aXQoKS5yZW1vdmUoKSxSLnN0eWxlKFwib3BhY2l0eVwiLGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2U7cmV0dXJuIG8udHJhY2VJcyhlLFwicGllXCIpPy0xIT09Zi5pbmRleE9mKHRbMF0ubGFiZWwpPy41OjE6XCJsZWdlbmRvbmx5XCI9PT1lLnZpc2libGU/LjU6MX0pLmVhY2goZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5jYWxsKEEsdCxkKX0pLmNhbGwoYix0KS5lYWNoKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuY2FsbChNLHQpfSksaS5zeW5jT3JBc3luYyhbYS5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7QyYmKFModCxQLFIpLEUodCkpO3ZhciB1PWUud2lkdGgsaD1lLmhlaWdodDtTKHQsUCxSKSxzLl9oZWlnaHQ+aD9mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LmxlZ2VuZCxyPVwibGVmdFwiO2kuaXNSaWdodEFuY2hvcihlKT9yPVwicmlnaHRcIjppLmlzQ2VudGVyQW5jaG9yKGUpJiYocj1cImNlbnRlclwiKTthLmF1dG9NYXJnaW4odCxcImxlZ2VuZFwiLHt4OmUueCx5Oi41LGw6ZS5fd2lkdGgqbVtyXSxyOmUuX3dpZHRoKnlbcl0sYjowLHQ6MH0pfSh0KTpFKHQpO3ZhciBmPWUuX3NpemUsZD1mLmwrZi53KnMueCxnPWYudCtmLmgqKDEtcy55KTtpLmlzUmlnaHRBbmNob3Iocyk/ZC09cy5fd2lkdGg6aS5pc0NlbnRlckFuY2hvcihzKSYmKGQtPXMuX3dpZHRoLzIpLGkuaXNCb3R0b21BbmNob3Iocyk/Zy09cy5faGVpZ2h0OmkuaXNNaWRkbGVBbmNob3IocykmJihnLT1zLl9oZWlnaHQvMik7dmFyIHY9cy5fd2lkdGgseD1mLnc7dj54PyhkPWYubCx2PXgpOihkK3Y+dSYmKGQ9dS12KSxkPDAmJihkPTApLHY9TWF0aC5taW4odS1kLHMuX3dpZHRoKSk7dmFyIGIsXyx3LEEsVD1zLl9oZWlnaHQsTT1mLmg7aWYoVD5NPyhnPWYudCxUPU0pOihnK1Q+aCYmKGc9aC1UKSxnPDAmJihnPTApLFQ9TWF0aC5taW4oaC1nLHMuX2hlaWdodCkpLGMuc2V0VHJhbnNsYXRlKEwsZCxnKSxELm9uKFwiLmRyYWdcIixudWxsKSxMLm9uKFwid2hlZWxcIixudWxsKSxzLl9oZWlnaHQ8PVR8fHQuX2NvbnRleHQuc3RhdGljUGxvdClPLmF0dHIoe3dpZHRoOnYtcy5ib3JkZXJ3aWR0aCxoZWlnaHQ6VC1zLmJvcmRlcndpZHRoLHg6cy5ib3JkZXJ3aWR0aC8yLHk6cy5ib3JkZXJ3aWR0aC8yfSksYy5zZXRUcmFuc2xhdGUoSSwwLDApLHouc2VsZWN0KFwicmVjdFwiKS5hdHRyKHt3aWR0aDp2LTIqcy5ib3JkZXJ3aWR0aCxoZWlnaHQ6VC0yKnMuYm9yZGVyd2lkdGgseDpzLmJvcmRlcndpZHRoLHk6cy5ib3JkZXJ3aWR0aH0pLGMuc2V0Q2xpcFVybChJLHIsdCksYy5zZXRSZWN0KEQsMCwwLDAsMCksZGVsZXRlIHMuX3Njcm9sbFk7ZWxzZXt2YXIgRixCLE49TWF0aC5tYXgocC5zY3JvbGxCYXJNaW5IZWlnaHQsVCpUL3MuX2hlaWdodCksaj1ULU4tMipwLnNjcm9sbEJhck1hcmdpbixWPXMuX2hlaWdodC1ULFU9ai9WLHE9TWF0aC5taW4ocy5fc2Nyb2xsWXx8MCxWKTtPLmF0dHIoe3dpZHRoOnYtMipzLmJvcmRlcndpZHRoK3Auc2Nyb2xsQmFyV2lkdGgrcC5zY3JvbGxCYXJNYXJnaW4saGVpZ2h0OlQtcy5ib3JkZXJ3aWR0aCx4OnMuYm9yZGVyd2lkdGgvMix5OnMuYm9yZGVyd2lkdGgvMn0pLHouc2VsZWN0KFwicmVjdFwiKS5hdHRyKHt3aWR0aDp2LTIqcy5ib3JkZXJ3aWR0aCtwLnNjcm9sbEJhcldpZHRoK3Auc2Nyb2xsQmFyTWFyZ2luLGhlaWdodDpULTIqcy5ib3JkZXJ3aWR0aCx4OnMuYm9yZGVyd2lkdGgseTpzLmJvcmRlcndpZHRoK3F9KSxjLnNldENsaXBVcmwoSSxyLHQpLEcocSxOLFUpLEwub24oXCJ3aGVlbFwiLGZ1bmN0aW9uKCl7RyhxPWkuY29uc3RyYWluKHMuX3Njcm9sbFkrbi5ldmVudC5kZWx0YVkvaipWLDAsViksTixVKSwwIT09cSYmcSE9PVYmJm4uZXZlbnQucHJldmVudERlZmF1bHQoKX0pO3ZhciBIPW4uYmVoYXZpb3IuZHJhZygpLm9uKFwiZHJhZ3N0YXJ0XCIsZnVuY3Rpb24oKXtGPW4uZXZlbnQuc291cmNlRXZlbnQuY2xpZW50WSxCPXF9KS5vbihcImRyYWdcIixmdW5jdGlvbigpe3ZhciB0PW4uZXZlbnQuc291cmNlRXZlbnQ7Mj09PXQuYnV0dG9uc3x8dC5jdHJsS2V5fHxHKHE9aS5jb25zdHJhaW4oKHQuY2xpZW50WS1GKS9VK0IsMCxWKSxOLFUpfSk7RC5jYWxsKEgpfWZ1bmN0aW9uIEcoZSxyLG4pe3MuX3Njcm9sbFk9dC5fZnVsbExheW91dC5sZWdlbmQuX3Njcm9sbFk9ZSxjLnNldFRyYW5zbGF0ZShJLDAsLWUpLGMuc2V0UmVjdChELHYscC5zY3JvbGxCYXJNYXJnaW4rZSpuLHAuc2Nyb2xsQmFyV2lkdGgsciksei5zZWxlY3QoXCJyZWN0XCIpLmF0dHIoe3k6cy5ib3JkZXJ3aWR0aCtlfSl9dC5fY29udGV4dC5lZGl0cy5sZWdlbmRQb3NpdGlvbiYmKEwuY2xhc3NlZChcImN1cnNvci1tb3ZlXCIsITApLGwuaW5pdCh7ZWxlbWVudDpMLm5vZGUoKSxnZDp0LHByZXBGbjpmdW5jdGlvbigpe3ZhciB0PWMuZ2V0VHJhbnNsYXRlKEwpO3c9dC54LEE9dC55fSxtb3ZlRm46ZnVuY3Rpb24odCxlKXt2YXIgcj13K3Qsbj1BK2U7Yy5zZXRUcmFuc2xhdGUoTCxyLG4pLGI9bC5hbGlnbihyLDAsZi5sLGYubCtmLncscy54YW5jaG9yKSxfPWwuYWxpZ24obiwwLGYudCtmLmgsZi50LHMueWFuY2hvcil9LGRvbmVGbjpmdW5jdGlvbigpe3ZvaWQgMCE9PWImJnZvaWQgMCE9PV8mJm8uY2FsbChcIl9ndWlSZWxheW91dFwiLHQse1wibGVnZW5kLnhcIjpiLFwibGVnZW5kLnlcIjpffSl9LGNsaWNrRm46ZnVuY3Rpb24ocixuKXt2YXIgaT1lLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKFwiZy50cmFjZXNcIikuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gbi5jbGllbnRYPj10LmxlZnQmJm4uY2xpZW50WDw9dC5yaWdodCYmbi5jbGllbnRZPj10LnRvcCYmbi5jbGllbnRZPD10LmJvdHRvbX0pO2kuc2l6ZSgpPjAmJmsodCxMLGkscixuKX19KSl9XSx0KX19fSx7XCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCI6NjczLFwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9uc1wiOjY3NyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9ldmVudHNcIjo2OTAsXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIjo3MjUsXCIuLi8uLi9wbG90cy9wbG90c1wiOjgxMCxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vY29sb3JcIjo1NzgsXCIuLi9kcmFnZWxlbWVudFwiOjU5NixcIi4uL2RyYXdpbmdcIjo1OTksXCIuL2NvbnN0YW50c1wiOjYyOCxcIi4vZ2V0X2xlZ2VuZF9kYXRhXCI6NjMxLFwiLi9oYW5kbGVfY2xpY2tcIjo2MzIsXCIuL2hlbHBlcnNcIjo2MzMsXCIuL3N0eWxlXCI6NjM1LGQzOjE1NX1dLDYzMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxpPXQoXCIuL2hlbHBlcnNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvPXt9LHM9W10sbD0hMSxjPXt9LHU9MDtmdW5jdGlvbiBoKHQscil7aWYoXCJcIiE9PXQmJmkuaXNHcm91cGVkKGUpKS0xPT09cy5pbmRleE9mKHQpPyhzLnB1c2godCksbD0hMCxvW3RdPVtbcl1dKTpvW3RdLnB1c2goW3JdKTtlbHNle3ZhciBuPVwifn5pXCIrdTtzLnB1c2gobiksb1tuXT1bW3JdXSx1Kyt9fWZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBmPXRbcl0scD1mWzBdLGQ9cC50cmFjZSxnPWQubGVnZW5kZ3JvdXA7aWYoZC52aXNpYmxlJiZkLnNob3dsZWdlbmQpaWYobi50cmFjZUlzKGQsXCJwaWVcIikpZm9yKGNbZ118fChjW2ddPXt9KSxhPTA7YTxmLmxlbmd0aDthKyspe3ZhciB2PWZbYV0ubGFiZWw7Y1tnXVt2XXx8KGgoZyx7bGFiZWw6dixjb2xvcjpmW2FdLmNvbG9yLGk6ZlthXS5pLHRyYWNlOmQscHRzOmZbYV0ucHRzfSksY1tnXVt2XT0hMCl9ZWxzZSBoKGcscCl9aWYoIXMubGVuZ3RoKXJldHVybltdO3ZhciBtLHkseD1zLmxlbmd0aDtpZihsJiZpLmlzR3JvdXBlZChlKSlmb3IoeT1uZXcgQXJyYXkoeCkscj0wO3I8eDtyKyspbT1vW3Nbcl1dLHlbcl09aS5pc1JldmVyc2VkKGUpP20ucmV2ZXJzZSgpOm07ZWxzZXtmb3IoeT1bbmV3IEFycmF5KHgpXSxyPTA7cjx4O3IrKyltPW9bc1tyXV1bMF0seVswXVtpLmlzUmV2ZXJzZWQoZSk/eC1yLTE6cl09bTt4PTF9cmV0dXJuIGUuX2xncm91cHNMZW5ndGg9eCx5fX0se1wiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2hlbHBlcnNcIjo2MzN9XSw2MzI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGE9ITA7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZighZS5fZHJhZ2dlZCYmIWUuX2VkaXRpbmcpe3ZhciBvLHMsbCxjLHUsaD1lLl9mdWxsTGF5b3V0LmhpZGRlbmxhYmVscz9lLl9mdWxsTGF5b3V0LmhpZGRlbmxhYmVscy5zbGljZSgpOltdLGY9dC5kYXRhKClbMF1bMF0scD1lLl9mdWxsRGF0YSxkPWYudHJhY2UsZz1kLmxlZ2VuZGdyb3VwLHY9e30sbT1bXSx5PVtdLHg9W107aWYoMT09PXImJmEmJmUuZGF0YSYmZS5fY29udGV4dC5zaG93VGlwcz8obi5ub3RpZmllcihuLl8oZSxcIkRvdWJsZS1jbGljayBvbiBsZWdlbmQgdG8gaXNvbGF0ZSBvbmUgdHJhY2VcIiksXCJsb25nXCIpLGE9ITEpOmE9ITEsaS50cmFjZUlzKGQsXCJwaWVcIikpe3ZhciBiPWYubGFiZWwsXz1oLmluZGV4T2YoYik7MT09PXI/LTE9PT1fP2gucHVzaChiKTpoLnNwbGljZShfLDEpOjI9PT1yJiYoaD1bXSxlLmNhbGNkYXRhWzBdLmZvckVhY2goZnVuY3Rpb24odCl7YiE9PXQubGFiZWwmJmgucHVzaCh0LmxhYmVsKX0pLGUuX2Z1bGxMYXlvdXQuaGlkZGVubGFiZWxzJiZlLl9mdWxsTGF5b3V0LmhpZGRlbmxhYmVscy5sZW5ndGg9PT1oLmxlbmd0aCYmLTE9PT1fJiYoaD1bXSkpLGkuY2FsbChcIl9ndWlSZWxheW91dFwiLGUsXCJoaWRkZW5sYWJlbHNcIixoKX1lbHNle3ZhciB3LGs9ZyYmZy5sZW5ndGgsQT1bXTtpZihrKWZvcihvPTA7bzxwLmxlbmd0aDtvKyspKHc9cFtvXSkudmlzaWJsZSYmdy5sZWdlbmRncm91cD09PWcmJkEucHVzaChvKTtpZigxPT09cil7dmFyIFQ7c3dpdGNoKGQudmlzaWJsZSl7Y2FzZSEwOlQ9XCJsZWdlbmRvbmx5XCI7YnJlYWs7Y2FzZSExOlQ9ITE7YnJlYWs7Y2FzZVwibGVnZW5kb25seVwiOlQ9ITB9aWYoaylmb3Iobz0wO288cC5sZW5ndGg7bysrKSExIT09cFtvXS52aXNpYmxlJiZwW29dLmxlZ2VuZGdyb3VwPT09ZyYmTyhwW29dLFQpO2Vsc2UgTyhkLFQpfWVsc2UgaWYoMj09PXIpe3ZhciBNLFMsRT0hMDtmb3Iobz0wO288cC5sZW5ndGg7bysrKWlmKCEocFtvXT09PWQpJiYhKE09ayYmcFtvXS5sZWdlbmRncm91cD09PWcpJiYhMD09PXBbb10udmlzaWJsZSYmIWkudHJhY2VJcyhwW29dLFwibm90TGVnZW5kSXNvbGF0YWJsZVwiKSl7RT0hMTticmVha31mb3Iobz0wO288cC5sZW5ndGg7bysrKWlmKCExIT09cFtvXS52aXNpYmxlJiYhaS50cmFjZUlzKHBbb10sXCJub3RMZWdlbmRJc29sYXRhYmxlXCIpKXN3aXRjaChkLnZpc2libGUpe2Nhc2VcImxlZ2VuZG9ubHlcIjpPKHBbb10sITApO2JyZWFrO2Nhc2UhMDpTPSEhRXx8XCJsZWdlbmRvbmx5XCIsTT1wW29dPT09ZHx8ayYmcFtvXS5sZWdlbmRncm91cD09PWcsTyhwW29dLCEhTXx8Uyl9fWZvcihvPTA7bzx5Lmxlbmd0aDtvKyspaWYobD15W29dKXt2YXIgQz1sLmNvbnN0cnVjdFVwZGF0ZSgpLEw9T2JqZWN0LmtleXMoQyk7Zm9yKHM9MDtzPEwubGVuZ3RoO3MrKyljPUxbc10sKHZbY109dltjXXx8W10pW3hbb11dPUNbY119Zm9yKHU9T2JqZWN0LmtleXModiksbz0wO288dS5sZW5ndGg7bysrKWZvcihjPXVbb10scz0wO3M8bS5sZW5ndGg7cysrKXZbY10uaGFzT3duUHJvcGVydHkocyl8fCh2W2NdW3NdPXZvaWQgMCk7aS5jYWxsKFwiX2d1aVJlc3R5bGVcIixlLHYsbSl9fWZ1bmN0aW9uIHoodCxlLHIpe3ZhciBuPW0uaW5kZXhPZih0KSxpPXZbZV07cmV0dXJuIGl8fChpPXZbZV09W10pLC0xPT09bS5pbmRleE9mKHQpJiYobS5wdXNoKHQpLG49bS5sZW5ndGgtMSksaVtuXT1yLG59ZnVuY3Rpb24gTyh0LGUpe3ZhciByPXQuX2Z1bGxJbnB1dDtpZihpLmhhc1RyYW5zZm9ybShyLFwiZ3JvdXBieVwiKSl7dmFyIGE9eVtyLmluZGV4XTtpZighYSl7dmFyIG89aS5nZXRUcmFuc2Zvcm1JbmRpY2VzKHIsXCJncm91cGJ5XCIpLHM9b1tvLmxlbmd0aC0xXTthPW4ua2V5ZWRDb250YWluZXIocixcInRyYW5zZm9ybXNbXCIrcytcIl0uc3R5bGVzXCIsXCJ0YXJnZXRcIixcInZhbHVlLnZpc2libGVcIikseVtyLmluZGV4XT1hfXZhciBsPWEuZ2V0KHQuX2dyb3VwKTt2b2lkIDA9PT1sJiYobD0hMCksITEhPT1sJiZhLnNldCh0Ll9ncm91cCxlKSx4W3IuaW5kZXhdPXooci5pbmRleCxcInZpc2libGVcIiwhMSE9PXIudmlzaWJsZSl9ZWxzZXt2YXIgYz0hMSE9PXIudmlzaWJsZSYmZTt6KHIuaW5kZXgsXCJ2aXNpYmxlXCIsYyl9fX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5fV0sNjMzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ci5pc0dyb3VwZWQ9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT0odC50cmFjZW9yZGVyfHxcIlwiKS5pbmRleE9mKFwiZ3JvdXBlZFwiKX0sci5pc1ZlcnRpY2FsPWZ1bmN0aW9uKHQpe3JldHVyblwiaFwiIT09dC5vcmllbnRhdGlvbn0sci5pc1JldmVyc2VkPWZ1bmN0aW9uKHQpe3JldHVybi0xIT09KHQudHJhY2VvcmRlcnx8XCJcIikuaW5kZXhPZihcInJldmVyc2VkXCIpfX0se31dLDYzNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17bW9kdWxlVHlwZTpcImNvbXBvbmVudFwiLG5hbWU6XCJsZWdlbmRcIixsYXlvdXRBdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIiksZHJhdzp0KFwiLi9kcmF3XCIpLHN0eWxlOnQoXCIuL3N0eWxlXCIpfX0se1wiLi9hdHRyaWJ1dGVzXCI6NjI3LFwiLi9kZWZhdWx0c1wiOjYyOSxcIi4vZHJhd1wiOjYzMCxcIi4vc3R5bGVcIjo2MzV9XSw2MzU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vcmVnaXN0cnlcIiksYT10KFwiLi4vLi4vbGliXCIpLG89dChcIi4uL2RyYXdpbmdcIikscz10KFwiLi4vY29sb3JcIiksbD10KFwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXNcIiksYz10KFwiLi4vLi4vdHJhY2VzL3BpZS9zdHlsZV9vbmVcIiksdT10KFwiLi4vLi4vdHJhY2VzL3BpZS9oZWxwZXJzXCIpLmNhc3RPcHRpb24saD0xMixmPTUscD0yLGQ9MTAsZz01O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUuX2Z1bGxMYXlvdXQubGVnZW5kLHY9XCJjb25zdGFudFwiPT09ci5pdGVtc2l6aW5nO2Z1bmN0aW9uIG0odCxlLHIsbil7dmFyIGk7aWYodCsxKWk9dDtlbHNle2lmKCEoZSYmZS53aWR0aD4wKSlyZXR1cm4gMDtpPWUud2lkdGh9cmV0dXJuIHY/bjpNYXRoLm1pbihpLHIpfXQuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxpPWEuZW5zdXJlU2luZ2xlKGUsXCJnXCIsXCJsYXllcnNcIik7aS5zdHlsZShcIm9wYWNpdHlcIix0WzBdLnRyYWNlLm9wYWNpdHkpO3ZhciBvPXIudmFsaWduLHM9dFswXS5saW5lSGVpZ2h0LGw9dFswXS5oZWlnaHQ7aWYoXCJtaWRkbGVcIiE9PW8mJnMmJmwpe3ZhciBjPXt0b3A6MSxib3R0b206LTF9W29dKiguNSoocy1sKzMpKTtpLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZSgwLFwiK2MrXCIpXCIpfWVsc2UgaS5hdHRyKFwidHJhbnNmb3JtXCIsbnVsbCk7aS5zZWxlY3RBbGwoXCJnLmxlZ2VuZGZpbGxcIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwibGVnZW5kZmlsbFwiLCEwKSxpLnNlbGVjdEFsbChcImcubGVnZW5kbGluZXNcIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwibGVnZW5kbGluZXNcIiwhMCk7dmFyIHU9aS5zZWxlY3RBbGwoXCJnLmxlZ2VuZHN5bWJvbHNcIikuZGF0YShbdF0pO3UuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJsZWdlbmRzeW1ib2xzXCIsITApLHUuc2VsZWN0QWxsKFwiZy5sZWdlbmRwb2ludHNcIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwibGVnZW5kcG9pbnRzXCIsITApfSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9W107XCJ3YXRlcmZhbGxcIj09PWUudHlwZSYmZS52aXNpYmxlJiYocj10WzBdLmhhc1RvdGFscz9bW1wiaW5jcmVhc2luZ1wiLFwiTS02LC02VjZIMFpcIl0sW1widG90YWxzXCIsXCJNNiw2SDBMLTYsLTZILTBaXCJdLFtcImRlY3JlYXNpbmdcIixcIk02LDZWLTZIMFpcIl1dOltbXCJpbmNyZWFzaW5nXCIsXCJNLTYsLTZWNkg2WlwiXSxbXCJkZWNyZWFzaW5nXCIsXCJNNiw2Vi02SC02WlwiXV0pO3ZhciBpPW4uc2VsZWN0KHRoaXMpLnNlbGVjdChcImcubGVnZW5kcG9pbnRzXCIpLnNlbGVjdEFsbChcInBhdGgubGVnZW5kd2F0ZXJmYWxsXCIpLmRhdGEocik7aS5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChcImxlZ2VuZHdhdGVyZmFsbFwiLCEwKS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoMjAsMClcIikuc3R5bGUoXCJzdHJva2UtbWl0ZXJsaW1pdFwiLDEpLGkuZXhpdCgpLnJlbW92ZSgpLGkuZWFjaChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxpPWVbdFswXV0ubWFya2VyLGE9bSh2b2lkIDAsaS5saW5lLGcscCk7ci5hdHRyKFwiZFwiLHRbMV0pLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsYStcInB4XCIpLmNhbGwocy5maWxsLGkuY29sb3IpLGEmJnIuY2FsbChzLnN0cm9rZSxpLmxpbmUuY29sb3IpfSl9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1lLm1hcmtlcnx8e30sYT1yLmxpbmV8fHt9LG89bi5zZWxlY3QodGhpcykuc2VsZWN0KFwiZy5sZWdlbmRwb2ludHNcIikuc2VsZWN0QWxsKFwicGF0aC5sZWdlbmRiYXJcIikuZGF0YShpLnRyYWNlSXMoZSxcImJhclwiKT9bdF06W10pO28uZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoXCJsZWdlbmRiYXJcIiwhMCkuYXR0cihcImRcIixcIk02LDZILTZWLTZINlpcIikuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKDIwLDApXCIpLG8uZXhpdCgpLnJlbW92ZSgpLG8uZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxpPXRbMF0sbz1tKGkubWx3LHIubGluZSxnLHApO2Uuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixvK1wicHhcIikuY2FsbChzLmZpbGwsaS5tY3x8ci5jb2xvciksbyYmcy5zdHJva2UoZSxpLm1sY3x8YS5jb2xvcil9KX0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPW4uc2VsZWN0KHRoaXMpLnNlbGVjdChcImcubGVnZW5kcG9pbnRzXCIpLnNlbGVjdEFsbChcInBhdGgubGVnZW5kYm94XCIpLmRhdGEoaS50cmFjZUlzKGUsXCJib3gtdmlvbGluXCIpJiZlLnZpc2libGU/W3RdOltdKTtyLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5jbGFzc2VkKFwibGVnZW5kYm94XCIsITApLmF0dHIoXCJkXCIsXCJNNiw2SC02Vi02SDZaXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZSgyMCwwKVwiKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxyPW0odm9pZCAwLGUubGluZSxnLHApO3Quc3R5bGUoXCJzdHJva2Utd2lkdGhcIixyK1wicHhcIikuY2FsbChzLmZpbGwsZS5maWxsY29sb3IpLHImJnMuc3Ryb2tlKHQsZS5saW5lLmNvbG9yKX0pfSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9ZS50cmFjZSxvPW4uc2VsZWN0KHRoaXMpLnNlbGVjdChcImcubGVnZW5kcG9pbnRzXCIpLnNlbGVjdEFsbChcInBhdGgubGVnZW5kcGllXCIpLmRhdGEoaS50cmFjZUlzKHIsXCJwaWVcIikmJnIudmlzaWJsZT9bdF06W10pO2lmKG8uZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoXCJsZWdlbmRwaWVcIiwhMCkuYXR0cihcImRcIixcIk02LDZILTZWLTZINlpcIikuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKDIwLDApXCIpLG8uZXhpdCgpLnJlbW92ZSgpLG8uc2l6ZSgpKXt2YXIgcz0oci5tYXJrZXJ8fHt9KS5saW5lLGw9bSh1KHMud2lkdGgsZS5wdHMpLHMsZyxwKSxoPWEubWluRXh0ZW5kKHIse21hcmtlcjp7bGluZTp7d2lkdGg6bH19fSksZj1hLm1pbkV4dGVuZChlLHt0cmFjZTpofSk7YyhvLGYsaCl9fSkuZWFjaChmdW5jdGlvbih0KXt2YXIgcixpLHM9dFswXSxjPXMudHJhY2UsdT1jLnZpc2libGUmJmMuZmlsbCYmXCJub25lXCIhPT1jLmZpbGwsaD1sLmhhc0xpbmVzKGMpLHA9Yy5jb250b3VycyxnPSExLHY9ITE7aWYocCl7dmFyIHk9cC5jb2xvcmluZztcImxpbmVzXCI9PT15P2c9ITA6aD1cIm5vbmVcIj09PXl8fFwiaGVhdG1hcFwiPT09eXx8cC5zaG93bGluZXMsXCJjb25zdHJhaW50XCI9PT1wLnR5cGU/dT1cIj1cIiE9PXAuX29wZXJhdGlvbjpcImZpbGxcIiE9PXkmJlwiaGVhdG1hcFwiIT09eXx8KHY9ITApfXZhciB4PWwuaGFzTWFya2VycyhjKXx8bC5oYXNUZXh0KGMpLGI9dXx8dixfPWh8fGcsdz14fHwhYj9cIk01LDBcIjpfP1wiTTUsLTJcIjpcIk01LC0zXCIsaz1uLnNlbGVjdCh0aGlzKSxBPWsuc2VsZWN0KFwiLmxlZ2VuZGZpbGxcIikuc2VsZWN0QWxsKFwicGF0aFwiKS5kYXRhKHV8fHY/W3RdOltdKTtpZihBLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5jbGFzc2VkKFwianMtZmlsbFwiLCEwKSxBLmV4aXQoKS5yZW1vdmUoKSxBLmF0dHIoXCJkXCIsdytcImgzMHY2aC0zMHpcIikuY2FsbCh1P28uZmlsbEdyb3VwU3R5bGU6ZnVuY3Rpb24odCl7aWYodC5zaXplKCkpe3ZhciByPVwibGVnZW5kZmlsbC1cIitjLnVpZDtvLmdyYWRpZW50KHQsZSxyLFwiaG9yaXpvbnRhbHJldmVyc2VkXCIsYy5jb2xvcnNjYWxlLFwiZmlsbFwiKX19KSxofHxnKXt2YXIgVD1tKHZvaWQgMCxjLmxpbmUsZCxmKTtpPWEubWluRXh0ZW5kKGMse2xpbmU6e3dpZHRoOlR9fSkscj1bYS5taW5FeHRlbmQocyx7dHJhY2U6aX0pXX12YXIgTT1rLnNlbGVjdChcIi5sZWdlbmRsaW5lc1wiKS5zZWxlY3RBbGwoXCJwYXRoXCIpLmRhdGEoaHx8Zz9bcl06W10pO00uZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoXCJqcy1saW5lXCIsITApLE0uZXhpdCgpLnJlbW92ZSgpLE0uYXR0cihcImRcIix3KyhnP1wibDMwLDAuMDAwMVwiOlwiaDMwXCIpKS5jYWxsKGg/by5saW5lR3JvdXBTdHlsZTpmdW5jdGlvbih0KXtpZih0LnNpemUoKSl7dmFyIHI9XCJsZWdlbmRsaW5lLVwiK2MudWlkO28ubGluZUdyb3VwU3R5bGUodCksby5ncmFkaWVudCh0LGUscixcImhvcml6b250YWxyZXZlcnNlZFwiLGMuY29sb3JzY2FsZSxcInN0cm9rZVwiKX19KX0pLmVhY2goZnVuY3Rpb24odCl7dmFyIHIsaSxzPXRbMF0sYz1zLnRyYWNlLHU9bC5oYXNNYXJrZXJzKGMpLGQ9bC5oYXNUZXh0KGMpLGc9bC5oYXNMaW5lcyhjKTtmdW5jdGlvbiBtKHQsZSxyLG4pe3ZhciBpPWEubmVzdGVkUHJvcGVydHkoYyx0KS5nZXQoKSxvPWEuaXNBcnJheU9yVHlwZWRBcnJheShpKSYmZT9lKGkpOmk7aWYodiYmbyYmdm9pZCAwIT09biYmKG89bikscil7aWYobzxyWzBdKXJldHVybiByWzBdO2lmKG8+clsxXSlyZXR1cm4gclsxXX1yZXR1cm4gb31mdW5jdGlvbiB5KHQpe3JldHVybiB0WzBdfWlmKHV8fGR8fGcpe3ZhciB4PXt9LGI9e307aWYodSl7eC5tYz1tKFwibWFya2VyLmNvbG9yXCIseSkseC5teD1tKFwibWFya2VyLnN5bWJvbFwiLHkpLHgubW89bShcIm1hcmtlci5vcGFjaXR5XCIsYS5tZWFuLFsuMiwxXSkseC5tbGM9bShcIm1hcmtlci5saW5lLmNvbG9yXCIseSkseC5tbHc9bShcIm1hcmtlci5saW5lLndpZHRoXCIsYS5tZWFuLFswLDVdLHApLGIubWFya2VyPXtzaXplcmVmOjEsc2l6ZW1pbjoxLHNpemVtb2RlOlwiZGlhbWV0ZXJcIn07dmFyIF89bShcIm1hcmtlci5zaXplXCIsYS5tZWFuLFsyLDE2XSxoKTt4Lm1zPV8sYi5tYXJrZXIuc2l6ZT1ffWcmJihiLmxpbmU9e3dpZHRoOm0oXCJsaW5lLndpZHRoXCIseSxbMCwxMF0sZil9KSxkJiYoeC50eD1cIkFhXCIseC50cD1tKFwidGV4dHBvc2l0aW9uXCIseSkseC50cz0xMCx4LnRjPW0oXCJ0ZXh0Zm9udC5jb2xvclwiLHkpLHgudGY9bShcInRleHRmb250LmZhbWlseVwiLHkpKSxyPVthLm1pbkV4dGVuZChzLHgpXSwoaT1hLm1pbkV4dGVuZChjLGIpKS5zZWxlY3RlZHBvaW50cz1udWxsfXZhciB3PW4uc2VsZWN0KHRoaXMpLnNlbGVjdChcImcubGVnZW5kcG9pbnRzXCIpLGs9dy5zZWxlY3RBbGwoXCJwYXRoLnNjYXR0ZXJwdHNcIikuZGF0YSh1P3I6W10pO2suZW50ZXIoKS5pbnNlcnQoXCJwYXRoXCIsXCI6Zmlyc3QtY2hpbGRcIikuY2xhc3NlZChcInNjYXR0ZXJwdHNcIiwhMCkuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKDIwLDApXCIpLGsuZXhpdCgpLnJlbW92ZSgpLGsuY2FsbChvLnBvaW50U3R5bGUsaSxlKSx1JiYoclswXS5tcmM9Myk7dmFyIEE9dy5zZWxlY3RBbGwoXCJnLnBvaW50dGV4dFwiKS5kYXRhKGQ/cjpbXSk7QS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcInBvaW50dGV4dFwiLCEwKS5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZSgyMCwwKVwiKSxBLmV4aXQoKS5yZW1vdmUoKSxBLnNlbGVjdEFsbChcInRleHRcIikuY2FsbChvLnRleHRQb2ludFN0eWxlLGksZSl9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoXCJnLmxlZ2VuZHBvaW50c1wiKS5zZWxlY3RBbGwoXCJwYXRoLmxlZ2VuZGNhbmRsZVwiKS5kYXRhKFwiY2FuZGxlc3RpY2tcIj09PWUudHlwZSYmZS52aXNpYmxlP1t0LHRdOltdKTtyLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5jbGFzc2VkKFwibGVnZW5kY2FuZGxlXCIsITApLmF0dHIoXCJkXCIsZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9cIk0tMTUsMEgtOE0tOCw2Vi02SDhaXCI6XCJNMTUsMEg4TTgsLTZWNkgtOFpcIn0pLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZSgyMCwwKVwiKS5zdHlsZShcInN0cm9rZS1taXRlcmxpbWl0XCIsMSksci5leGl0KCkucmVtb3ZlKCksci5lYWNoKGZ1bmN0aW9uKHQscil7dmFyIGk9bi5zZWxlY3QodGhpcyksYT1lW3I/XCJpbmNyZWFzaW5nXCI6XCJkZWNyZWFzaW5nXCJdLG89bSh2b2lkIDAsYS5saW5lLGcscCk7aS5zdHlsZShcInN0cm9rZS13aWR0aFwiLG8rXCJweFwiKS5jYWxsKHMuZmlsbCxhLmZpbGxjb2xvciksbyYmcy5zdHJva2UoaSxhLmxpbmUuY29sb3IpfSl9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoXCJnLmxlZ2VuZHBvaW50c1wiKS5zZWxlY3RBbGwoXCJwYXRoLmxlZ2VuZG9obGNcIikuZGF0YShcIm9obGNcIj09PWUudHlwZSYmZS52aXNpYmxlP1t0LHRdOltdKTtyLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5jbGFzc2VkKFwibGVnZW5kb2hsY1wiLCEwKS5hdHRyKFwiZFwiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/XCJNLTE1LDBIME0tOCwtNlYwXCI6XCJNMTUsMEgwTTgsNlYwXCJ9KS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoMjAsMClcIikuc3R5bGUoXCJzdHJva2UtbWl0ZXJsaW1pdFwiLDEpLHIuZXhpdCgpLnJlbW92ZSgpLHIuZWFjaChmdW5jdGlvbih0LHIpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLGE9ZVtyP1wiaW5jcmVhc2luZ1wiOlwiZGVjcmVhc2luZ1wiXSxsPW0odm9pZCAwLGEubGluZSxnLHApO2kuc3R5bGUoXCJmaWxsXCIsXCJub25lXCIpLmNhbGwoby5kYXNoTGluZSxhLmxpbmUuZGFzaCxsKSxsJiZzLnN0cm9rZShpLGEubGluZS5jb2xvcil9KX0pfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi8uLi90cmFjZXMvcGllL2hlbHBlcnNcIjoxMDMxLFwiLi4vLi4vdHJhY2VzL3BpZS9zdHlsZV9vbmVcIjoxMDM3LFwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi4vY29sb3JcIjo1NzgsXCIuLi9kcmF3aW5nXCI6NTk5LGQzOjE1NX1dLDYzNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxpPXQoXCIuLi8uLi9wbG90cy9wbG90c1wiKSxhPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIiksbz10KFwiLi4vLi4vbGliXCIpLHM9dChcIi4uLy4uLy4uL2J1aWxkL3Bsb3RpY29uXCIpLGw9by5fLGM9ZS5leHBvcnRzPXt9O2Z1bmN0aW9uIHUodCxlKXt2YXIgcixpLG89ZS5jdXJyZW50VGFyZ2V0LHM9by5nZXRBdHRyaWJ1dGUoXCJkYXRhLWF0dHJcIiksbD1vLmdldEF0dHJpYnV0ZShcImRhdGEtdmFsXCIpfHwhMCxjPXQuX2Z1bGxMYXlvdXQsdT17fSxoPWEubGlzdCh0LG51bGwsITApLGY9XCJvblwiO2lmKFwiem9vbVwiPT09cyl7dmFyIHAsZD1cImluXCI9PT1sPy41OjIsZz0oMStkKS8yLHY9KDEtZCkvMjtmb3IoaT0wO2k8aC5sZW5ndGg7aSsrKWlmKCEocj1oW2ldKS5maXhlZHJhbmdlKWlmKHA9ci5fbmFtZSxcImF1dG9cIj09PWwpdVtwK1wiLmF1dG9yYW5nZVwiXT0hMDtlbHNlIGlmKFwicmVzZXRcIj09PWwpe2lmKHZvaWQgMD09PXIuX3JhbmdlSW5pdGlhbCl1W3ArXCIuYXV0b3JhbmdlXCJdPSEwO2Vsc2V7dmFyIG09ci5fcmFuZ2VJbml0aWFsLnNsaWNlKCk7dVtwK1wiLnJhbmdlWzBdXCJdPW1bMF0sdVtwK1wiLnJhbmdlWzFdXCJdPW1bMV19dm9pZCAwIT09ci5fc2hvd1NwaWtlSW5pdGlhbCYmKHVbcCtcIi5zaG93c3Bpa2VzXCJdPXIuX3Nob3dTcGlrZUluaXRpYWwsXCJvblwiIT09Znx8ci5fc2hvd1NwaWtlSW5pdGlhbHx8KGY9XCJvZmZcIikpfWVsc2V7dmFyIHk9W3IucjJsKHIucmFuZ2VbMF0pLHIucjJsKHIucmFuZ2VbMV0pXSx4PVtnKnlbMF0rdip5WzFdLGcqeVsxXSt2KnlbMF1dO3VbcCtcIi5yYW5nZVswXVwiXT1yLmwycih4WzBdKSx1W3ArXCIucmFuZ2VbMV1cIl09ci5sMnIoeFsxXSl9Yy5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD1mfWVsc2V7aWYoXCJob3Zlcm1vZGVcIiE9PXN8fFwieFwiIT09bCYmXCJ5XCIhPT1sKXtpZihcImhvdmVybW9kZVwiPT09cyYmXCJjbG9zZXN0XCI9PT1sKXtmb3IoaT0wO2k8aC5sZW5ndGg7aSsrKXI9aFtpXSxcIm9uXCIhPT1mfHxyLnNob3dzcGlrZXN8fChmPVwib2ZmXCIpO2MuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQ9Zn19ZWxzZSBsPWMuX2lzSG9yaXo/XCJ5XCI6XCJ4XCIsby5zZXRBdHRyaWJ1dGUoXCJkYXRhLXZhbFwiLGwpO3Vbc109bH1uLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix0LHUpfWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHI9ZS5jdXJyZW50VGFyZ2V0LGk9ci5nZXRBdHRyaWJ1dGUoXCJkYXRhLWF0dHJcIiksYT1yLmdldEF0dHJpYnV0ZShcImRhdGEtdmFsXCIpfHwhMCxvPXQuX2Z1bGxMYXlvdXQuX3N1YnBsb3RzLmdsM2Qscz17fSxsPWkuc3BsaXQoXCIuXCIpLGM9MDtjPG8ubGVuZ3RoO2MrKylzW29bY10rXCIuXCIrbFsxXV09YTt2YXIgdT1cInBhblwiPT09YT9hOlwiem9vbVwiO3MuZHJhZ21vZGU9dSxuLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix0LHMpfWZ1bmN0aW9uIGYodCxlKXtmb3IodmFyIHI9ZS5jdXJyZW50VGFyZ2V0LmdldEF0dHJpYnV0ZShcImRhdGEtYXR0clwiKSxpPXQuX2Z1bGxMYXlvdXQsYT1pLl9zdWJwbG90cy5nbDNkLG89e30scz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLGM9bCtcIi5jYW1lcmFcIix1PWlbbF0uX3NjZW5lO1wicmVzZXRMYXN0U2F2ZVwiPT09cj8ob1tjK1wiLnVwXCJdPXUudmlld0luaXRpYWwudXAsb1tjK1wiLmV5ZVwiXT11LnZpZXdJbml0aWFsLmV5ZSxvW2MrXCIuY2VudGVyXCJdPXUudmlld0luaXRpYWwuY2VudGVyKTpcInJlc2V0RGVmYXVsdFwiPT09ciYmKG9bYytcIi51cFwiXT1udWxsLG9bYytcIi5leWVcIl09bnVsbCxvW2MrXCIuY2VudGVyXCJdPW51bGwpfW4uY2FsbChcIl9ndWlSZWxheW91dFwiLHQsbyl9ZnVuY3Rpb24gcCh0LGUpe3ZhciByPWUuY3VycmVudFRhcmdldCxuPXIuX3ByZXZpb3VzVmFsLGk9dC5fZnVsbExheW91dCxhPWkuX3N1YnBsb3RzLmdsM2Qsbz1bXCJ4YXhpc1wiLFwieWF4aXNcIixcInpheGlzXCJdLHM9e30sbD17fTtpZihuKWw9bixyLl9wcmV2aW91c1ZhbD1udWxsO2Vsc2V7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciB1PWFbY10saD1pW3VdLGY9dStcIi5ob3Zlcm1vZGVcIjtzW2ZdPWguaG92ZXJtb2RlLGxbZl09ITE7Zm9yKHZhciBwPTA7cDwzO3ArKyl7dmFyIGQ9b1twXSxnPXUrXCIuXCIrZCtcIi5zaG93c3Bpa2VzXCI7bFtnXT0hMSxzW2ddPWhbZF0uc2hvd3NwaWtlc319ci5fcHJldmlvdXNWYWw9c31yZXR1cm4gbH1mdW5jdGlvbiBkKHQsZSl7Zm9yKHZhciByPWUuY3VycmVudFRhcmdldCxpPXIuZ2V0QXR0cmlidXRlKFwiZGF0YS1hdHRyXCIpLGE9ci5nZXRBdHRyaWJ1dGUoXCJkYXRhLXZhbFwiKXx8ITAsbz10Ll9mdWxsTGF5b3V0LHM9by5fc3VicGxvdHMuZ2VvLGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIGM9c1tsXSx1PW9bY107aWYoXCJ6b29tXCI9PT1pKXt2YXIgaD11LnByb2plY3Rpb24uc2NhbGUsZj1cImluXCI9PT1hPzIqaDouNSpoO24uY2FsbChcIl9ndWlSZWxheW91dFwiLHQsYytcIi5wcm9qZWN0aW9uLnNjYWxlXCIsZil9ZWxzZVwicmVzZXRcIj09PWkmJm0odCxcImdlb1wiKX19ZnVuY3Rpb24gZyh0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O3JldHVybiFlLmhvdmVybW9kZSYmKGUuX2hhcyhcImNhcnRlc2lhblwiKT9lLl9pc0hvcml6P1wieVwiOlwieFwiOlwiY2xvc2VzdFwiKX1mdW5jdGlvbiB2KHQpe3ZhciBlPWcodCk7bi5jYWxsKFwiX2d1aVJlbGF5b3V0XCIsdCxcImhvdmVybW9kZVwiLGUpfWZ1bmN0aW9uIG0odCxlKXtmb3IodmFyIHI9dC5fZnVsbExheW91dCxpPXIuX3N1YnBsb3RzW2VdLGE9e30sbz0wO288aS5sZW5ndGg7bysrKWZvcih2YXIgcz1pW29dLGw9cltzXS5fc3VicGxvdC52aWV3SW5pdGlhbCxjPU9iamVjdC5rZXlzKGwpLHU9MDt1PGMubGVuZ3RoO3UrKyl7dmFyIGg9Y1t1XTthW3MrXCIuXCIraF09bFtoXX1uLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix0LGEpfWMudG9JbWFnZT17bmFtZTpcInRvSW1hZ2VcIix0aXRsZTpmdW5jdGlvbih0KXt2YXIgZT0odC5fY29udGV4dC50b0ltYWdlQnV0dG9uT3B0aW9uc3x8e30pLmZvcm1hdHx8XCJwbmdcIjtyZXR1cm4gbCh0LFwicG5nXCI9PT1lP1wiRG93bmxvYWQgcGxvdCBhcyBhIHBuZ1wiOlwiRG93bmxvYWQgcGxvdFwiKX0saWNvbjpzLmNhbWVyYSxjbGljazpmdW5jdGlvbih0KXt2YXIgZT10Ll9jb250ZXh0LnRvSW1hZ2VCdXR0b25PcHRpb25zLHI9e2Zvcm1hdDplLmZvcm1hdHx8XCJwbmdcIn07by5ub3RpZmllcihsKHQsXCJUYWtpbmcgc25hcHNob3QgLSB0aGlzIG1heSB0YWtlIGEgZmV3IHNlY29uZHNcIiksXCJsb25nXCIpLFwic3ZnXCIhPT1yLmZvcm1hdCYmby5pc0lFKCkmJihvLm5vdGlmaWVyKGwodCxcIklFIG9ubHkgc3VwcG9ydHMgc3ZnLiAgQ2hhbmdpbmcgZm9ybWF0IHRvIHN2Zy5cIiksXCJsb25nXCIpLHIuZm9ybWF0PVwic3ZnXCIpLFtcImZpbGVuYW1lXCIsXCJ3aWR0aFwiLFwiaGVpZ2h0XCIsXCJzY2FsZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QgaW4gZSYmKHJbdF09ZVt0XSl9KSxuLmNhbGwoXCJkb3dubG9hZEltYWdlXCIsdCxyKS50aGVuKGZ1bmN0aW9uKGUpe28ubm90aWZpZXIobCh0LFwiU25hcHNob3Qgc3VjY2VlZGVkXCIpK1wiIC0gXCIrZSxcImxvbmdcIil9KS5jYXRjaChmdW5jdGlvbigpe28ubm90aWZpZXIobCh0LFwiU29ycnksIHRoZXJlIHdhcyBhIHByb2JsZW0gZG93bmxvYWRpbmcgeW91ciBzbmFwc2hvdCFcIiksXCJsb25nXCIpfSl9fSxjLnNlbmREYXRhVG9DbG91ZD17bmFtZTpcInNlbmREYXRhVG9DbG91ZFwiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsXCJFZGl0IGluIENoYXJ0IFN0dWRpb1wiKX0saWNvbjpzLmRpc2ssY2xpY2s6ZnVuY3Rpb24odCl7aS5zZW5kRGF0YVRvQ2xvdWQodCl9fSxjLnpvb20yZD17bmFtZTpcInpvb20yZFwiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsXCJab29tXCIpfSxhdHRyOlwiZHJhZ21vZGVcIix2YWw6XCJ6b29tXCIsaWNvbjpzLnpvb21ib3gsY2xpY2s6dX0sYy5wYW4yZD17bmFtZTpcInBhbjJkXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlBhblwiKX0sYXR0cjpcImRyYWdtb2RlXCIsdmFsOlwicGFuXCIsaWNvbjpzLnBhbixjbGljazp1fSxjLnNlbGVjdDJkPXtuYW1lOlwic2VsZWN0MmRcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiQm94IFNlbGVjdFwiKX0sYXR0cjpcImRyYWdtb2RlXCIsdmFsOlwic2VsZWN0XCIsaWNvbjpzLnNlbGVjdGJveCxjbGljazp1fSxjLmxhc3NvMmQ9e25hbWU6XCJsYXNzbzJkXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIkxhc3NvIFNlbGVjdFwiKX0sYXR0cjpcImRyYWdtb2RlXCIsdmFsOlwibGFzc29cIixpY29uOnMubGFzc28sY2xpY2s6dX0sYy56b29tSW4yZD17bmFtZTpcInpvb21JbjJkXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlpvb20gaW5cIil9LGF0dHI6XCJ6b29tXCIsdmFsOlwiaW5cIixpY29uOnMuem9vbV9wbHVzLGNsaWNrOnV9LGMuem9vbU91dDJkPXtuYW1lOlwiem9vbU91dDJkXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlpvb20gb3V0XCIpfSxhdHRyOlwiem9vbVwiLHZhbDpcIm91dFwiLGljb246cy56b29tX21pbnVzLGNsaWNrOnV9LGMuYXV0b1NjYWxlMmQ9e25hbWU6XCJhdXRvU2NhbGUyZFwiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsXCJBdXRvc2NhbGVcIil9LGF0dHI6XCJ6b29tXCIsdmFsOlwiYXV0b1wiLGljb246cy5hdXRvc2NhbGUsY2xpY2s6dX0sYy5yZXNldFNjYWxlMmQ9e25hbWU6XCJyZXNldFNjYWxlMmRcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiUmVzZXQgYXhlc1wiKX0sYXR0cjpcInpvb21cIix2YWw6XCJyZXNldFwiLGljb246cy5ob21lLGNsaWNrOnV9LGMuaG92ZXJDbG9zZXN0Q2FydGVzaWFuPXtuYW1lOlwiaG92ZXJDbG9zZXN0Q2FydGVzaWFuXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyXCIpfSxhdHRyOlwiaG92ZXJtb2RlXCIsdmFsOlwiY2xvc2VzdFwiLGljb246cy50b29sdGlwX2Jhc2ljLGdyYXZpdHk6XCJuZVwiLGNsaWNrOnV9LGMuaG92ZXJDb21wYXJlQ2FydGVzaWFuPXtuYW1lOlwiaG92ZXJDb21wYXJlQ2FydGVzaWFuXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIkNvbXBhcmUgZGF0YSBvbiBob3ZlclwiKX0sYXR0cjpcImhvdmVybW9kZVwiLHZhbDpmdW5jdGlvbih0KXtyZXR1cm4gdC5fZnVsbExheW91dC5faXNIb3Jpej9cInlcIjpcInhcIn0saWNvbjpzLnRvb2x0aXBfY29tcGFyZSxncmF2aXR5OlwibmVcIixjbGljazp1fSxjLnpvb20zZD17bmFtZTpcInpvb20zZFwiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsXCJab29tXCIpfSxhdHRyOlwic2NlbmUuZHJhZ21vZGVcIix2YWw6XCJ6b29tXCIsaWNvbjpzLnpvb21ib3gsY2xpY2s6aH0sYy5wYW4zZD17bmFtZTpcInBhbjNkXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlBhblwiKX0sYXR0cjpcInNjZW5lLmRyYWdtb2RlXCIsdmFsOlwicGFuXCIsaWNvbjpzLnBhbixjbGljazpofSxjLm9yYml0Um90YXRpb249e25hbWU6XCJvcmJpdFJvdGF0aW9uXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIk9yYml0YWwgcm90YXRpb25cIil9LGF0dHI6XCJzY2VuZS5kcmFnbW9kZVwiLHZhbDpcIm9yYml0XCIsaWNvbjpzW1wiM2Rfcm90YXRlXCJdLGNsaWNrOmh9LGMudGFibGVSb3RhdGlvbj17bmFtZTpcInRhYmxlUm90YXRpb25cIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiVHVybnRhYmxlIHJvdGF0aW9uXCIpfSxhdHRyOlwic2NlbmUuZHJhZ21vZGVcIix2YWw6XCJ0dXJudGFibGVcIixpY29uOnNbXCJ6LWF4aXNcIl0sY2xpY2s6aH0sYy5yZXNldENhbWVyYURlZmF1bHQzZD17bmFtZTpcInJlc2V0Q2FtZXJhRGVmYXVsdDNkXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlJlc2V0IGNhbWVyYSB0byBkZWZhdWx0XCIpfSxhdHRyOlwicmVzZXREZWZhdWx0XCIsaWNvbjpzLmhvbWUsY2xpY2s6Zn0sYy5yZXNldENhbWVyYUxhc3RTYXZlM2Q9e25hbWU6XCJyZXNldENhbWVyYUxhc3RTYXZlM2RcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiUmVzZXQgY2FtZXJhIHRvIGxhc3Qgc2F2ZVwiKX0sYXR0cjpcInJlc2V0TGFzdFNhdmVcIixpY29uOnMubW92aWUsY2xpY2s6Zn0sYy5ob3ZlckNsb3Nlc3QzZD17bmFtZTpcImhvdmVyQ2xvc2VzdDNkXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlclwiKX0sYXR0cjpcImhvdmVybW9kZVwiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOnMudG9vbHRpcF9iYXNpYyxncmF2aXR5OlwibmVcIixjbGljazpmdW5jdGlvbih0LGUpe3ZhciByPXAodCxlKTtuLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix0LHIpfX0sYy56b29tSW5HZW89e25hbWU6XCJ6b29tSW5HZW9cIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiWm9vbSBpblwiKX0sYXR0cjpcInpvb21cIix2YWw6XCJpblwiLGljb246cy56b29tX3BsdXMsY2xpY2s6ZH0sYy56b29tT3V0R2VvPXtuYW1lOlwiem9vbU91dEdlb1wiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsXCJab29tIG91dFwiKX0sYXR0cjpcInpvb21cIix2YWw6XCJvdXRcIixpY29uOnMuem9vbV9taW51cyxjbGljazpkfSxjLnJlc2V0R2VvPXtuYW1lOlwicmVzZXRHZW9cIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiUmVzZXRcIil9LGF0dHI6XCJyZXNldFwiLHZhbDpudWxsLGljb246cy5hdXRvc2NhbGUsY2xpY2s6ZH0sYy5ob3ZlckNsb3Nlc3RHZW89e25hbWU6XCJob3ZlckNsb3Nlc3RHZW9cIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyXCIpfSxhdHRyOlwiaG92ZXJtb2RlXCIsdmFsOm51bGwsdG9nZ2xlOiEwLGljb246cy50b29sdGlwX2Jhc2ljLGdyYXZpdHk6XCJuZVwiLGNsaWNrOnZ9LGMuaG92ZXJDbG9zZXN0R2wyZD17bmFtZTpcImhvdmVyQ2xvc2VzdEdsMmRcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyXCIpfSxhdHRyOlwiaG92ZXJtb2RlXCIsdmFsOm51bGwsdG9nZ2xlOiEwLGljb246cy50b29sdGlwX2Jhc2ljLGdyYXZpdHk6XCJuZVwiLGNsaWNrOnZ9LGMuaG92ZXJDbG9zZXN0UGllPXtuYW1lOlwiaG92ZXJDbG9zZXN0UGllXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlclwiKX0sYXR0cjpcImhvdmVybW9kZVwiLHZhbDpcImNsb3Nlc3RcIixpY29uOnMudG9vbHRpcF9iYXNpYyxncmF2aXR5OlwibmVcIixjbGljazp2fSxjLnJlc2V0Vmlld1NhbmtleT17bmFtZTpcInJlc2V0U2Fua2V5R3JvdXBcIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LFwiUmVzZXQgdmlld1wiKX0saWNvbjpzLmhvbWUsY2xpY2s6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXtcIm5vZGUuZ3JvdXBzXCI6W10sXCJub2RlLnhcIjpbXSxcIm5vZGUueVwiOltdfSxyPTA7cjx0Ll9mdWxsRGF0YS5sZW5ndGg7cisrKXt2YXIgaT10Ll9mdWxsRGF0YVtyXS5fdmlld0luaXRpYWw7ZVtcIm5vZGUuZ3JvdXBzXCJdLnB1c2goaS5ub2RlLmdyb3Vwcy5zbGljZSgpKSxlW1wibm9kZS54XCJdLnB1c2goaS5ub2RlLnguc2xpY2UoKSksZVtcIm5vZGUueVwiXS5wdXNoKGkubm9kZS55LnNsaWNlKCkpfW4uY2FsbChcInJlc3R5bGVcIix0LGUpfX0sYy50b2dnbGVIb3Zlcj17bmFtZTpcInRvZ2dsZUhvdmVyXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlclwiKX0sYXR0cjpcImhvdmVybW9kZVwiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOnMudG9vbHRpcF9iYXNpYyxncmF2aXR5OlwibmVcIixjbGljazpmdW5jdGlvbih0LGUpe3ZhciByPXAodCxlKTtyLmhvdmVybW9kZT1nKHQpLG4uY2FsbChcIl9ndWlSZWxheW91dFwiLHQscil9fSxjLnJlc2V0Vmlld3M9e25hbWU6XCJyZXNldFZpZXdzXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlJlc2V0IHZpZXdzXCIpfSxpY29uOnMuaG9tZSxjbGljazpmdW5jdGlvbih0LGUpe3ZhciByPWUuY3VycmVudFRhcmdldDtyLnNldEF0dHJpYnV0ZShcImRhdGEtYXR0clwiLFwiem9vbVwiKSxyLnNldEF0dHJpYnV0ZShcImRhdGEtdmFsXCIsXCJyZXNldFwiKSx1KHQsZSksci5zZXRBdHRyaWJ1dGUoXCJkYXRhLWF0dHJcIixcInJlc2V0TGFzdFNhdmVcIiksZih0LGUpLG0odCxcImdlb1wiKSxtKHQsXCJtYXBib3hcIil9fSxjLnRvZ2dsZVNwaWtlbGluZXM9e25hbWU6XCJ0b2dnbGVTcGlrZWxpbmVzXCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlRvZ2dsZSBTcGlrZSBMaW5lc1wiKX0saWNvbjpzLnNwaWtlbGluZSxhdHRyOlwiX2NhcnRlc2lhblNwaWtlc0VuYWJsZWRcIix2YWw6XCJvblwiLGNsaWNrOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7ZS5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD1cIm9uXCI9PT1lLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkP1wib2ZmXCI6XCJvblwiO3ZhciByPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG49dC5fZnVsbExheW91dCxpPWEubGlzdCh0LG51bGwsITApLG89e30scz0wO3M8aS5sZW5ndGg7cysrKWU9aVtzXSxyPWUuX25hbWUsb1tyK1wiLnNob3dzcGlrZXNcIl09XCJvblwiPT09bi5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZHx8ZS5fc2hvd1NwaWtlSW5pdGlhbDtyZXR1cm4gb30odCk7bi5jYWxsKFwiX2d1aVJlbGF5b3V0XCIsdCxyKX19LGMucmVzZXRWaWV3TWFwYm94PXtuYW1lOlwicmVzZXRWaWV3TWFwYm94XCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxcIlJlc2V0IHZpZXdcIil9LGF0dHI6XCJyZXNldFwiLGljb246cy5ob21lLGNsaWNrOmZ1bmN0aW9uKHQpe20odCxcIm1hcGJveFwiKX19fSx7XCIuLi8uLi8uLi9idWlsZC9wbG90aWNvblwiOjIsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIjo3NTIsXCIuLi8uLi9wbG90cy9wbG90c1wiOjgxMCxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5fV0sNjM3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ci5tYW5hZ2U9dChcIi4vbWFuYWdlXCIpfSx7XCIuL21hbmFnZVwiOjYzOH1dLDYzODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIiksaT10KFwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXNcIiksYT10KFwiLi4vLi4vcmVnaXN0cnlcIiksbz10KFwiLi9tb2RlYmFyXCIpLHM9dChcIi4vYnV0dG9uc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXQuX2NvbnRleHQsbD1lLl9tb2RlQmFyO2lmKHIuZGlzcGxheU1vZGVCYXJ8fHIud2F0ZXJtYXJrKXtpZighQXJyYXkuaXNBcnJheShyLm1vZGVCYXJCdXR0b25zVG9SZW1vdmUpKXRocm93IG5ldyBFcnJvcihbXCIqbW9kZUJhckJ1dHRvbnNUb1JlbW92ZSogY29uZmlndXJhdGlvbiBvcHRpb25zXCIsXCJtdXN0IGJlIGFuIGFycmF5LlwiXS5qb2luKFwiIFwiKSk7aWYoIUFycmF5LmlzQXJyYXkoci5tb2RlQmFyQnV0dG9uc1RvQWRkKSl0aHJvdyBuZXcgRXJyb3IoW1wiKm1vZGVCYXJCdXR0b25zVG9BZGQqIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1wiLFwibXVzdCBiZSBhbiBhcnJheS5cIl0uam9pbihcIiBcIikpO3ZhciBjLHU9ci5tb2RlQmFyQnV0dG9ucztjPUFycmF5LmlzQXJyYXkodSkmJnUubGVuZ3RoP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWZvcih2YXIgcj10W2VdLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpZihcInN0cmluZ1wiPT10eXBlb2YgaSl7aWYodm9pZCAwPT09c1tpXSl0aHJvdyBuZXcgRXJyb3IoW1wiKm1vZGVCYXJCdXR0b25zKiBjb25maWd1cmF0aW9uIG9wdGlvbnNcIixcImludmFsaWQgYnV0dG9uIG5hbWVcIl0uam9pbihcIiBcIikpO3RbZV1bbl09c1tpXX19cmV0dXJuIHR9KHUpOiFyLmRpc3BsYXlNb2RlQmFyJiZyLndhdGVybWFyaz9bXTpmdW5jdGlvbih0LGUscixvKXt2YXIgbD10Ll9mdWxsTGF5b3V0LGM9dC5fZnVsbERhdGEsdT1sLl9oYXMoXCJjYXJ0ZXNpYW5cIiksaD1sLl9oYXMoXCJnbDNkXCIpLGY9bC5faGFzKFwiZ2VvXCIpLHA9bC5faGFzKFwicGllXCIpLGQ9bC5faGFzKFwiZ2wyZFwiKSxnPWwuX2hhcyhcInRlcm5hcnlcIiksdj1sLl9oYXMoXCJtYXBib3hcIiksbT1sLl9oYXMoXCJwb2xhclwiKSx5PWwuX2hhcyhcInNhbmtleVwiKSx4PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uLmxpc3Qoe19mdWxsTGF5b3V0OnR9LG51bGwsITApLHI9MDtyPGUubGVuZ3RoO3IrKylpZighZVtyXS5maXhlZHJhbmdlKXJldHVybiExO3JldHVybiEwfShsKSxiPVtdO2Z1bmN0aW9uIF8odCl7aWYodC5sZW5ndGgpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl07LTE9PT1lLmluZGV4T2YoaSkmJnIucHVzaChzW2ldKX1iLnB1c2gocil9fXZhciB3PVtcInRvSW1hZ2VcIl07byYmdy5wdXNoKFwic2VuZERhdGFUb0Nsb3VkXCIpO18odyk7dmFyIGs9W10sQT1bXSxUPVtdLE09W107KHV8fGR8fHB8fGcpK2YraCt2K20+MT8oQT1bXCJ0b2dnbGVIb3ZlclwiXSxUPVtcInJlc2V0Vmlld3NcIl0pOmY/KGs9W1wiem9vbUluR2VvXCIsXCJ6b29tT3V0R2VvXCJdLEE9W1wiaG92ZXJDbG9zZXN0R2VvXCJdLFQ9W1wicmVzZXRHZW9cIl0pOmg/KEE9W1wiaG92ZXJDbG9zZXN0M2RcIl0sVD1bXCJyZXNldENhbWVyYURlZmF1bHQzZFwiLFwicmVzZXRDYW1lcmFMYXN0U2F2ZTNkXCJdKTp2PyhBPVtcInRvZ2dsZUhvdmVyXCJdLFQ9W1wicmVzZXRWaWV3TWFwYm94XCJdKTpkP0E9W1wiaG92ZXJDbG9zZXN0R2wyZFwiXTpwP0E9W1wiaG92ZXJDbG9zZXN0UGllXCJdOnk/KEE9W1wiaG92ZXJDbG9zZXN0Q2FydGVzaWFuXCIsXCJob3ZlckNvbXBhcmVDYXJ0ZXNpYW5cIl0sVD1bXCJyZXNldFZpZXdTYW5rZXlcIl0pOkE9W1widG9nZ2xlSG92ZXJcIl07dSYmKEE9W1widG9nZ2xlU3Bpa2VsaW5lc1wiLFwiaG92ZXJDbG9zZXN0Q2FydGVzaWFuXCIsXCJob3ZlckNvbXBhcmVDYXJ0ZXNpYW5cIl0pOyF1JiYhZHx8eHx8KGs9W1wiem9vbUluMmRcIixcInpvb21PdXQyZFwiLFwiYXV0b1NjYWxlMmRcIl0sXCJyZXNldFZpZXdzXCIhPT1UWzBdJiYoVD1bXCJyZXNldFNjYWxlMmRcIl0pKTtoP009W1wiem9vbTNkXCIsXCJwYW4zZFwiLFwib3JiaXRSb3RhdGlvblwiLFwidGFibGVSb3RhdGlvblwiXToodXx8ZCkmJiF4fHxnP009W1wiem9vbTJkXCIsXCJwYW4yZFwiXTp2fHxmP009W1wicGFuMmRcIl06bSYmKE09W1wiem9vbTJkXCJdKTsoZnVuY3Rpb24odCl7Zm9yKHZhciBlPSExLHI9MDtyPHQubGVuZ3RoJiYhZTtyKyspe3ZhciBuPXRbcl07bi5fbW9kdWxlJiZuLl9tb2R1bGUuc2VsZWN0UG9pbnRzJiYoYS50cmFjZUlzKG4sXCJzY2F0dGVyLWxpa2VcIik/KGkuaGFzTWFya2VycyhuKXx8aS5oYXNUZXh0KG4pKSYmKGU9ITApOmEudHJhY2VJcyhuLFwiYm94LXZpb2xpblwiKSYmXCJhbGxcIiE9PW4uYm94cG9pbnRzJiZcImFsbFwiIT09bi5wb2ludHN8fChlPSEwKSl9cmV0dXJuIGV9KShjKSYmTS5wdXNoKFwic2VsZWN0MmRcIixcImxhc3NvMmRcIik7cmV0dXJuIF8oTSksXyhrLmNvbmNhdChUKSksXyhBKSxmdW5jdGlvbih0LGUpe2lmKGUubGVuZ3RoKWlmKEFycmF5LmlzQXJyYXkoZVswXSkpZm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdC5wdXNoKGVbcl0pO2Vsc2UgdC5wdXNoKGUpO3JldHVybiB0fShiLHIpfSh0LHIubW9kZUJhckJ1dHRvbnNUb1JlbW92ZSxyLm1vZGVCYXJCdXR0b25zVG9BZGQsci5zaG93U2VuZFRvQ2xvdWQpLGw/bC51cGRhdGUodCxjKTplLl9tb2RlQmFyPW8odCxjKX1lbHNlIGwmJihsLmRlc3Ryb3koKSxkZWxldGUgZS5fbW9kZUJhcil9fSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIjo3NTIsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzXCI6MTA3NixcIi4vYnV0dG9uc1wiOjYzNixcIi4vbW9kZWJhclwiOjYzOX1dLDYzOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxhPXQoXCIuLi8uLi9saWJcIiksbz10KFwiLi4vLi4vLi4vYnVpbGQvcGxvdGljb25cIikscz1uZXcgRE9NUGFyc2VyO2Z1bmN0aW9uIGwodCl7dGhpcy5jb250YWluZXI9dC5jb250YWluZXIsdGhpcy5lbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksdGhpcy51cGRhdGUodC5ncmFwaEluZm8sdC5idXR0b25zKSx0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpfXZhciBjPWwucHJvdG90eXBlO2MudXBkYXRlPWZ1bmN0aW9uKHQsZSl7dGhpcy5ncmFwaEluZm89dDt2YXIgcj10aGlzLmdyYXBoSW5mby5fY29udGV4dCxuPXRoaXMuZ3JhcGhJbmZvLl9mdWxsTGF5b3V0LGk9XCJtb2RlYmFyLVwiK24uX3VpZDt0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKFwiaWRcIixpKSx0aGlzLl91aWQ9aSx0aGlzLmVsZW1lbnQuY2xhc3NOYW1lPVwibW9kZWJhclwiLFwiaG92ZXJcIj09PXIuZGlzcGxheU1vZGVCYXImJih0aGlzLmVsZW1lbnQuY2xhc3NOYW1lKz1cIiBtb2RlYmFyLS1ob3ZlciBlYXNlLWJnXCIpLFwidlwiPT09bi5tb2RlYmFyLm9yaWVudGF0aW9uJiYodGhpcy5lbGVtZW50LmNsYXNzTmFtZSs9XCIgdmVydGljYWxcIixlPWUucmV2ZXJzZSgpKTt2YXIgbz1uLm1vZGViYXIscz1cImhvdmVyXCI9PT1yLmRpc3BsYXlNb2RlQmFyP1wiLmpzLXBsb3RseS1wbG90IC5wbG90bHk6aG92ZXIgXCI6XCJcIjthLmRlbGV0ZVJlbGF0ZWRTdHlsZVJ1bGUoaSksYS5hZGRSZWxhdGVkU3R5bGVSdWxlKGkscytcIiNcIitpK1wiIC5tb2RlYmFyLWdyb3VwXCIsXCJiYWNrZ3JvdW5kLWNvbG9yOiBcIitvLmJnY29sb3IpLGEuYWRkUmVsYXRlZFN0eWxlUnVsZShpLFwiI1wiK2krXCIgLm1vZGViYXItYnRuIC5pY29uIHBhdGhcIixcImZpbGw6IFwiK28uY29sb3IpLGEuYWRkUmVsYXRlZFN0eWxlUnVsZShpLFwiI1wiK2krXCIgLm1vZGViYXItYnRuOmhvdmVyIC5pY29uIHBhdGhcIixcImZpbGw6IFwiK28uYWN0aXZlY29sb3IpLGEuYWRkUmVsYXRlZFN0eWxlUnVsZShpLFwiI1wiK2krXCIgLm1vZGViYXItYnRuLmFjdGl2ZSAuaWNvbiBwYXRoXCIsXCJmaWxsOiBcIitvLmFjdGl2ZWNvbG9yKTt2YXIgbD0hdGhpcy5oYXNCdXR0b25zKGUpLGM9dGhpcy5oYXNMb2dvIT09ci5kaXNwbGF5bG9nbyx1PXRoaXMubG9jYWxlIT09ci5sb2NhbGU7aWYodGhpcy5sb2NhbGU9ci5sb2NhbGUsKGx8fGN8fHUpJiYodGhpcy5yZW1vdmVBbGxCdXR0b25zKCksdGhpcy51cGRhdGVCdXR0b25zKGUpLHIud2F0ZXJtYXJrfHxyLmRpc3BsYXlsb2dvKSl7dmFyIGg9dGhpcy5nZXRMb2dvKCk7ci53YXRlcm1hcmsmJihoLmNsYXNzTmFtZT1oLmNsYXNzTmFtZStcIiB3YXRlcm1hcmtcIiksXCJ2XCI9PT1uLm1vZGViYXIub3JpZW50YXRpb24/dGhpcy5lbGVtZW50Lmluc2VydEJlZm9yZShoLHRoaXMuZWxlbWVudC5jaGlsZE5vZGVzWzBdKTp0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoaCksdGhpcy5oYXNMb2dvPSEwfXRoaXMudXBkYXRlQWN0aXZlQnV0dG9uKCl9LGMudXBkYXRlQnV0dG9ucz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuYnV0dG9ucz10LHRoaXMuYnV0dG9uRWxlbWVudHM9W10sdGhpcy5idXR0b25zTmFtZXM9W10sdGhpcy5idXR0b25zLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHI9ZS5jcmVhdGVHcm91cCgpO3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj10Lm5hbWU7aWYoIW4pdGhyb3cgbmV3IEVycm9yKFwibXVzdCBwcm92aWRlIGJ1dHRvbiAnbmFtZScgaW4gYnV0dG9uIGNvbmZpZ1wiKTtpZigtMSE9PWUuYnV0dG9uc05hbWVzLmluZGV4T2YobikpdGhyb3cgbmV3IEVycm9yKFwiYnV0dG9uIG5hbWUgJ1wiK24rXCInIGlzIHRha2VuXCIpO2UuYnV0dG9uc05hbWVzLnB1c2gobik7dmFyIGk9ZS5jcmVhdGVCdXR0b24odCk7ZS5idXR0b25FbGVtZW50cy5wdXNoKGkpLHIuYXBwZW5kQ2hpbGQoaSl9KSxlLmVsZW1lbnQuYXBwZW5kQ2hpbGQocil9KX0sYy5jcmVhdGVHcm91cD1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7cmV0dXJuIHQuY2xhc3NOYW1lPVwibW9kZWJhci1ncm91cFwiLHR9LGMuY3JlYXRlQnV0dG9uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtyLnNldEF0dHJpYnV0ZShcInJlbFwiLFwidG9vbHRpcFwiKSxyLmNsYXNzTmFtZT1cIm1vZGViYXItYnRuXCI7dmFyIGk9dC50aXRsZTt2b2lkIDA9PT1pP2k9dC5uYW1lOlwiZnVuY3Rpb25cIj09dHlwZW9mIGkmJihpPWkodGhpcy5ncmFwaEluZm8pKSwoaXx8MD09PWkpJiZyLnNldEF0dHJpYnV0ZShcImRhdGEtdGl0bGVcIixpKSx2b2lkIDAhPT10LmF0dHImJnIuc2V0QXR0cmlidXRlKFwiZGF0YS1hdHRyXCIsdC5hdHRyKTt2YXIgYT10LnZhbDtpZih2b2lkIDAhPT1hJiYoXCJmdW5jdGlvblwiPT10eXBlb2YgYSYmKGE9YSh0aGlzLmdyYXBoSW5mbykpLHIuc2V0QXR0cmlidXRlKFwiZGF0YS12YWxcIixhKSksXCJmdW5jdGlvblwiIT10eXBlb2YgdC5jbGljayl0aHJvdyBuZXcgRXJyb3IoXCJtdXN0IHByb3ZpZGUgYnV0dG9uICdjbGljaycgZnVuY3Rpb24gaW4gYnV0dG9uIGNvbmZpZ1wiKTtyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLGZ1bmN0aW9uKHIpe3QuY2xpY2soZS5ncmFwaEluZm8sciksZS51cGRhdGVBY3RpdmVCdXR0b24oci5jdXJyZW50VGFyZ2V0KX0pLHIuc2V0QXR0cmlidXRlKFwiZGF0YS10b2dnbGVcIix0LnRvZ2dsZXx8ITEpLHQudG9nZ2xlJiZuLnNlbGVjdChyKS5jbGFzc2VkKFwiYWN0aXZlXCIsITApO3ZhciBzPXQuaWNvbjtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBzP3IuYXBwZW5kQ2hpbGQocygpKTpyLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlSWNvbihzfHxvLnF1ZXN0aW9uKSksci5zZXRBdHRyaWJ1dGUoXCJkYXRhLWdyYXZpdHlcIix0LmdyYXZpdHl8fFwiblwiKSxyfSxjLmNyZWF0ZUljb249ZnVuY3Rpb24odCl7dmFyIGUscj1pKHQuaGVpZ2h0KT9OdW1iZXIodC5oZWlnaHQpOnQuYXNjZW50LXQuZGVzY2VudCxuPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtpZih0LnBhdGgpeyhlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuLFwic3ZnXCIpKS5zZXRBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIsWzAsMCx0LndpZHRoLHJdLmpvaW4oXCIgXCIpKSxlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsXCJpY29uXCIpO3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuLFwicGF0aFwiKTthLnNldEF0dHJpYnV0ZShcImRcIix0LnBhdGgpLHQudHJhbnNmb3JtP2Euc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsdC50cmFuc2Zvcm0pOnZvaWQgMCE9PXQuYXNjZW50JiZhLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLFwibWF0cml4KDEgMCAwIC0xIDAgXCIrdC5hc2NlbnQrXCIpXCIpLGUuYXBwZW5kQ2hpbGQoYSl9dC5zdmcmJihlPXMucGFyc2VGcm9tU3RyaW5nKHQuc3ZnLFwiYXBwbGljYXRpb24veG1sXCIpLmNoaWxkTm9kZXNbMF0pO3JldHVybiBlLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLFwiMWVtXCIpLGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIixcIjFlbVwiKSxlfSxjLnVwZGF0ZUFjdGl2ZUJ1dHRvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdyYXBoSW5mby5fZnVsbExheW91dCxyPXZvaWQgMCE9PXQ/dC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWF0dHJcIik6bnVsbDt0aGlzLmJ1dHRvbkVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGk9dC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXZhbFwiKXx8ITAsbz10LmdldEF0dHJpYnV0ZShcImRhdGEtYXR0clwiKSxzPVwidHJ1ZVwiPT09dC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXRvZ2dsZVwiKSxsPW4uc2VsZWN0KHQpO2lmKHMpbz09PXImJmwuY2xhc3NlZChcImFjdGl2ZVwiLCFsLmNsYXNzZWQoXCJhY3RpdmVcIikpO2Vsc2V7dmFyIGM9bnVsbD09PW8/bzphLm5lc3RlZFByb3BlcnR5KGUsbykuZ2V0KCk7bC5jbGFzc2VkKFwiYWN0aXZlXCIsYz09PWkpfX0pfSxjLmhhc0J1dHRvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5idXR0b25zO2lmKCFlKXJldHVybiExO2lmKHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3Ipe2lmKHRbcl0ubGVuZ3RoIT09ZVtyXS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0W3JdLmxlbmd0aDtuKyspaWYodFtyXVtuXS5uYW1lIT09ZVtyXVtuXS5uYW1lKXJldHVybiExfXJldHVybiEwfSxjLmdldExvZ289ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNyZWF0ZUdyb3VwKCksZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtyZXR1cm4gZS5ocmVmPVwiaHR0cHM6Ly9wbG90Lmx5L1wiLGUudGFyZ2V0PVwiX2JsYW5rXCIsZS5zZXRBdHRyaWJ1dGUoXCJkYXRhLXRpdGxlXCIsYS5fKHRoaXMuZ3JhcGhJbmZvLFwiUHJvZHVjZWQgd2l0aCBQbG90bHlcIikpLGUuY2xhc3NOYW1lPVwibW9kZWJhci1idG4gcGxvdGx5anNpY29uIG1vZGViYXItYnRuLS1sb2dvXCIsZS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUljb24oby5uZXdwbG90bHlsb2dvKSksdC5hcHBlbmRDaGlsZChlKSx0fSxjLnJlbW92ZUFsbEJ1dHRvbnM9ZnVuY3Rpb24oKXtmb3IoO3RoaXMuZWxlbWVudC5maXJzdENoaWxkOyl0aGlzLmVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50LmZpcnN0Q2hpbGQpO3RoaXMuaGFzTG9nbz0hMX0sYy5kZXN0cm95PWZ1bmN0aW9uKCl7YS5yZW1vdmVFbGVtZW50KHRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIubW9kZWJhclwiKSksYS5kZWxldGVSZWxhdGVkU3R5bGVSdWxlKHRoaXMuX3VpZCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsaT1uZXcgbCh7Z3JhcGhJbmZvOnQsY29udGFpbmVyOnIuX21vZGViYXJkaXYubm9kZSgpLGJ1dHRvbnM6ZX0pO3JldHVybiByLl9wcml2YXRlcGxvdCYmbi5zZWxlY3QoaS5lbGVtZW50KS5hcHBlbmQoXCJzcGFuXCIpLmNsYXNzZWQoXCJiYWRnZS1wcml2YXRlIGZsb2F0LS1sZWZ0XCIsITApLnRleHQoXCJQUklWQVRFXCIpLGl9fSx7XCIuLi8uLi8uLi9idWlsZC9wbG90aWNvblwiOjIsXCIuLi8uLi9saWJcIjo3MDEsZDM6MTU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw2NDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uL2NvbG9yL2F0dHJpYnV0ZXNcIiksYT0oMCx0KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKS50ZW1wbGF0ZWRBcnJheSkoXCJidXR0b25cIix7dmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwicGxvdFwifSxzdGVwOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJtb250aFwiLFwieWVhclwiLFwiZGF5XCIsXCJob3VyXCIsXCJtaW51dGVcIixcInNlY29uZFwiLFwiYWxsXCJdLGRmbHQ6XCJtb250aFwiLGVkaXRUeXBlOlwicGxvdFwifSxzdGVwbW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYmFja3dhcmRcIixcInRvZGF0ZVwiXSxkZmx0OlwiYmFja3dhcmRcIixlZGl0VHlwZTpcInBsb3RcIn0sY291bnQ6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6XCJwbG90XCJ9LGxhYmVsOnt2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJwbG90XCJ9LGVkaXRUeXBlOlwicGxvdFwifSk7ZS5leHBvcnRzPXt2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGVkaXRUeXBlOlwicGxvdFwifSxidXR0b25zOmEseDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjotMixtYXg6MyxlZGl0VHlwZTpcInBsb3RcIn0seGFuY2hvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYXV0b1wiLFwibGVmdFwiLFwiY2VudGVyXCIsXCJyaWdodFwiXSxkZmx0OlwibGVmdFwiLGVkaXRUeXBlOlwicGxvdFwifSx5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOi0yLG1heDozLGVkaXRUeXBlOlwicGxvdFwifSx5YW5jaG9yOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhdXRvXCIsXCJ0b3BcIixcIm1pZGRsZVwiLFwiYm90dG9tXCJdLGRmbHQ6XCJib3R0b21cIixlZGl0VHlwZTpcInBsb3RcIn0sZm9udDpuKHtlZGl0VHlwZTpcInBsb3RcIn0pLGJnY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6aS5saWdodExpbmUsZWRpdFR5cGU6XCJwbG90XCJ9LGFjdGl2ZWNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcInBsb3RcIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZTpcInBsb3RcIn0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6XCJwbG90XCJ9LGVkaXRUeXBlOlwicGxvdFwifX0se1wiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiOjc3NSxcIi4uL2NvbG9yL2F0dHJpYnV0ZXNcIjo1Nzd9XSw2NDE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e3lQYWQ6LjAyLG1pbkJ1dHRvbldpZHRoOjMwLHJ4OjMscnk6MyxsaWdodEFtb3VudDoyNSxkYXJrQW1vdW50OjEwfX0se31dLDY0MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vY29sb3JcIiksYT10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKSxvPXQoXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIikscz10KFwiLi9hdHRyaWJ1dGVzXCIpLGw9dChcIi4vY29uc3RhbnRzXCIpO2Z1bmN0aW9uIGModCxlLHIsaSl7dmFyIGE9aS5jYWxlbmRhcjtmdW5jdGlvbiBvKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLmJ1dHRvbnMscixpKX1pZihvKFwidmlzaWJsZVwiKSl7dmFyIGw9byhcInN0ZXBcIik7XCJhbGxcIiE9PWwmJighYXx8XCJncmVnb3JpYW5cIj09PWF8fFwibW9udGhcIiE9PWwmJlwieWVhclwiIT09bD9vKFwic3RlcG1vZGVcIik6ZS5zdGVwbW9kZT1cImJhY2t3YXJkXCIsbyhcImNvdW50XCIpKSxvKFwibGFiZWxcIil9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1LGgpe3ZhciBmPXQucmFuZ2VzZWxlY3Rvcnx8e30scD1hLm5ld0NvbnRhaW5lcihlLFwicmFuZ2VzZWxlY3RvclwiKTtmdW5jdGlvbiBkKHQsZSl7cmV0dXJuIG4uY29lcmNlKGYscCxzLHQsZSl9aWYoZChcInZpc2libGVcIixvKGYscCx7bmFtZTpcImJ1dHRvbnNcIixoYW5kbGVJdGVtRGVmYXVsdHM6YyxjYWxlbmRhcjpofSkubGVuZ3RoPjApKXt2YXIgZz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXIuZmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdLmFuY2hvcj09PXQuX2lkfSksaT0wLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89ZVtuW2FdXS5kb21haW47byYmKGk9TWF0aC5tYXgob1sxXSxpKSl9cmV0dXJuW3QuZG9tYWluWzBdLGkrbC55UGFkXX0oZSxyLHUpO2QoXCJ4XCIsZ1swXSksZChcInlcIixnWzFdKSxuLm5vbmVPckFsbCh0LGUsW1wieFwiLFwieVwiXSksZChcInhhbmNob3JcIiksZChcInlhbmNob3JcIiksbi5jb2VyY2VGb250KGQsXCJmb250XCIsci5mb250KTt2YXIgdj1kKFwiYmdjb2xvclwiKTtkKFwiYWN0aXZlY29sb3JcIixpLmNvbnRyYXN0KHYsbC5saWdodEFtb3VudCxsLmRhcmtBbW91bnQpKSxkKFwiYm9yZGVyY29sb3JcIiksZChcImJvcmRlcndpZHRoXCIpfX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIjo3NDUsXCIuLi9jb2xvclwiOjU3OCxcIi4vYXR0cmlidXRlc1wiOjY0MCxcIi4vY29uc3RhbnRzXCI6NjQxfV0sNjQzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGE9dChcIi4uLy4uL3Bsb3RzL3Bsb3RzXCIpLG89dChcIi4uL2NvbG9yXCIpLHM9dChcIi4uL2RyYXdpbmdcIiksbD10KFwiLi4vLi4vbGliXCIpLGM9dChcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiKSx1PXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIiksaD10KFwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiKSxmPWguTElORV9TUEFDSU5HLHA9aC5GUk9NX1RMLGQ9aC5GUk9NX0JSLGc9dChcIi4vY29uc3RhbnRzXCIpLHY9dChcIi4vZ2V0X3VwZGF0ZV9vYmplY3RcIik7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdC5faWR9ZnVuY3Rpb24geSh0LGUscil7dmFyIG49bC5lbnN1cmVTaW5nbGUodCxcInJlY3RcIixcInNlbGVjdG9yLXJlY3RcIixmdW5jdGlvbih0KXt0LmF0dHIoXCJzaGFwZS1yZW5kZXJpbmdcIixcImNyaXNwRWRnZXNcIil9KTtuLmF0dHIoe3J4Omcucngscnk6Zy5yeX0pLG4uY2FsbChvLnN0cm9rZSxlLmJvcmRlcmNvbG9yKS5jYWxsKG8uZmlsbCxmdW5jdGlvbih0LGUpe3JldHVybiBlLl9pc0FjdGl2ZXx8ZS5faXNIb3ZlcmVkP3QuYWN0aXZlY29sb3I6dC5iZ2NvbG9yfShlLHIpKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLGUuYm9yZGVyd2lkdGgrXCJweFwiKX1mdW5jdGlvbiB4KHQsZSxyLG4pe2wuZW5zdXJlU2luZ2xlKHQsXCJ0ZXh0XCIsXCJzZWxlY3Rvci10ZXh0XCIsZnVuY3Rpb24odCl7dC5jbGFzc2VkKFwidXNlci1zZWxlY3Qtbm9uZVwiLCEwKS5hdHRyKFwidGV4dC1hbmNob3JcIixcIm1pZGRsZVwiKX0pLmNhbGwocy5mb250LGUuZm9udCkudGV4dChmdW5jdGlvbih0LGUpe2lmKHQubGFiZWwpcmV0dXJuIGU/bC50ZW1wbGF0ZVN0cmluZyh0LmxhYmVsLHttZXRhOmV9KTp0LmxhYmVsO3JldHVyblwiYWxsXCI9PT10LnN0ZXA/XCJhbGxcIjp0LmNvdW50K3Quc3RlcC5jaGFyQXQoMCl9KHIsbi5fZnVsbExheW91dC5tZXRhKSkuY2FsbChmdW5jdGlvbih0KXtjLmNvbnZlcnRUb1RzcGFucyh0LG4pfSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3RBbGwoXCIucmFuZ2VzZWxlY3RvclwiKS5kYXRhKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT11Lmxpc3QodCxcInhcIiwhMCkscj1bXSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl07aS5yYW5nZXNlbGVjdG9yJiZpLnJhbmdlc2VsZWN0b3IudmlzaWJsZSYmci5wdXNoKGkpfXJldHVybiByfSh0KSxtKTtlLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwicmFuZ2VzZWxlY3RvclwiLCEwKSxlLmV4aXQoKS5yZW1vdmUoKSxlLnN0eWxlKHtjdXJzb3I6XCJwb2ludGVyXCIsXCJwb2ludGVyLWV2ZW50c1wiOlwiYWxsXCJ9KSxlLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksbz1lLHU9by5yYW5nZXNlbGVjdG9yLGg9ci5zZWxlY3RBbGwoXCJnLmJ1dHRvblwiKS5kYXRhKGwuZmlsdGVyVmlzaWJsZSh1LmJ1dHRvbnMpKTtoLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiYnV0dG9uXCIsITApLGguZXhpdCgpLnJlbW92ZSgpLGguZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxhPXYobyxlKTtlLl9pc0FjdGl2ZT1mdW5jdGlvbih0LGUscil7aWYoXCJhbGxcIj09PWUuc3RlcClyZXR1cm4hMD09PXQuYXV0b3JhbmdlO3ZhciBuPU9iamVjdC5rZXlzKHIpO3JldHVybiB0LnJhbmdlWzBdPT09cltuWzBdXSYmdC5yYW5nZVsxXT09PXJbblsxXV19KG8sZSxhKSxyLmNhbGwoeSx1LGUpLHIuY2FsbCh4LHUsZSx0KSxyLm9uKFwiY2xpY2tcIixmdW5jdGlvbigpe3QuX2RyYWdnZWR8fGkuY2FsbChcIl9ndWlSZWxheW91dFwiLHQsYSl9KSxyLm9uKFwibW91c2VvdmVyXCIsZnVuY3Rpb24oKXtlLl9pc0hvdmVyZWQ9ITAsci5jYWxsKHksdSxlKX0pLHIub24oXCJtb3VzZW91dFwiLGZ1bmN0aW9uKCl7ZS5faXNIb3ZlcmVkPSExLHIuY2FsbCh5LHUsZSl9KX0pLGZ1bmN0aW9uKHQsZSxyLGksbyl7dmFyIHU9MCxoPTAsdj1yLmJvcmRlcndpZHRoO2UuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9dC5zZWxlY3QoXCIuc2VsZWN0b3ItdGV4dFwiKSxpPXIuZm9udC5zaXplKmYsYT1NYXRoLm1heChpKmMubGluZUNvdW50KGUpLDE2KSszO2g9TWF0aC5tYXgoaCxhKX0pLGUuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9dC5zZWxlY3QoXCIuc2VsZWN0b3ItcmVjdFwiKSxpPXQuc2VsZWN0KFwiLnNlbGVjdG9yLXRleHRcIiksYT1pLm5vZGUoKSYmcy5iQm94KGkubm9kZSgpKS53aWR0aCxvPXIuZm9udC5zaXplKmYsbD1jLmxpbmVDb3VudChpKSxwPU1hdGgubWF4KGErMTAsZy5taW5CdXR0b25XaWR0aCk7dC5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrKHYrdSkrXCIsXCIrditcIilcIiksZS5hdHRyKHt4OjAseTowLHdpZHRoOnAsaGVpZ2h0Omh9KSxjLnBvc2l0aW9uVGV4dChpLHAvMixoLzItKGwtMSkqby8yKzMpLHUrPXArNX0pO3ZhciBtPXQuX2Z1bGxMYXlvdXQuX3NpemUseT1tLmwrbS53KnIueCx4PW0udCttLmgqKDEtci55KSxiPVwibGVmdFwiO2wuaXNSaWdodEFuY2hvcihyKSYmKHktPXUsYj1cInJpZ2h0XCIpO2wuaXNDZW50ZXJBbmNob3IocikmJih5LT11LzIsYj1cImNlbnRlclwiKTt2YXIgXz1cInRvcFwiO2wuaXNCb3R0b21BbmNob3IocikmJih4LT1oLF89XCJib3R0b21cIik7bC5pc01pZGRsZUFuY2hvcihyKSYmKHgtPWgvMixfPVwibWlkZGxlXCIpO3U9TWF0aC5jZWlsKHUpLGg9TWF0aC5jZWlsKGgpLHk9TWF0aC5yb3VuZCh5KSx4PU1hdGgucm91bmQoeCksYS5hdXRvTWFyZ2luKHQsaStcIi1yYW5nZS1zZWxlY3RvclwiLHt4OnIueCx5OnIueSxsOnUqcFtiXSxyOnUqZFtiXSxiOmgqZFtfXSx0OmgqcFtfXX0pLG8uYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK3krXCIsXCIreCtcIilcIil9KHQsaCx1LG8uX25hbWUscil9KX19LHtcIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIjo2NzMsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIjo3MjUsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIjo3NTIsXCIuLi8uLi9wbG90cy9wbG90c1wiOjgxMCxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vY29sb3JcIjo1NzgsXCIuLi9kcmF3aW5nXCI6NTk5LFwiLi9jb25zdGFudHNcIjo2NDEsXCIuL2dldF91cGRhdGVfb2JqZWN0XCI6NjQ0LGQzOjE1NX1dLDY0NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9uYW1lLGk9e307aWYoXCJhbGxcIj09PWUuc3RlcClpW3IrXCIuYXV0b3JhbmdlXCJdPSEwO2Vsc2V7dmFyIGE9ZnVuY3Rpb24odCxlKXt2YXIgcixpPXQucmFuZ2UsYT1uZXcgRGF0ZSh0LnIybChpWzFdKSksbz1lLnN0ZXAscz1lLmNvdW50O3N3aXRjaChlLnN0ZXBtb2RlKXtjYXNlXCJiYWNrd2FyZFwiOnI9dC5sMnIoK24udGltZVtvXS51dGMub2Zmc2V0KGEsLXMpKTticmVhaztjYXNlXCJ0b2RhdGVcIjp2YXIgbD1uLnRpbWVbb10udXRjLm9mZnNldChhLC1zKTtyPXQubDJyKCtuLnRpbWVbb10udXRjLmNlaWwobCkpfXZhciBjPWlbMV07cmV0dXJuW3IsY119KHQsZSk7aVtyK1wiLnJhbmdlWzBdXCJdPWFbMF0saVtyK1wiLnJhbmdlWzFdXCJdPWFbMV19cmV0dXJuIGl9fSx7ZDM6MTU1fV0sNjQ1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwiY29tcG9uZW50XCIsbmFtZTpcInJhbmdlc2VsZWN0b3JcIixzY2hlbWE6e3N1YnBsb3RzOnt4YXhpczp7cmFuZ2VzZWxlY3Rvcjp0KFwiLi9hdHRyaWJ1dGVzXCIpfX19LGxheW91dEF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxoYW5kbGVEZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxkcmF3OnQoXCIuL2RyYXdcIil9fSx7XCIuL2F0dHJpYnV0ZXNcIjo2NDAsXCIuL2RlZmF1bHRzXCI6NjQyLFwiLi9kcmF3XCI6NjQzfV0sNjQ2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2NvbG9yL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPXtiZ2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0Om4uYmFja2dyb3VuZCxlZGl0VHlwZTpcInBsb3RcIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6bi5kZWZhdWx0TGluZSxlZGl0VHlwZTpcInBsb3RcIn0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsZGZsdDowLG1pbjowLGVkaXRUeXBlOlwicGxvdFwifSxhdXRvcmFuZ2U6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcImNhbGNcIixpbXBsaWVkRWRpdHM6e1wicmFuZ2VbMF1cIjp2b2lkIDAsXCJyYW5nZVsxXVwiOnZvaWQgMH19LHJhbmdlOnt2YWxUeXBlOlwiaW5mb19hcnJheVwiLGl0ZW1zOlt7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsY1wiLGltcGxpZWRFZGl0czp7XCJeYXV0b3JhbmdlXCI6ITF9fSx7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsY1wiLGltcGxpZWRFZGl0czp7XCJeYXV0b3JhbmdlXCI6ITF9fV0sZWRpdFR5cGU6XCJjYWxjXCIsaW1wbGllZEVkaXRzOnthdXRvcmFuZ2U6ITF9fSx0aGlja25lc3M6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0Oi4xNSxtaW46MCxtYXg6MSxlZGl0VHlwZTpcInBsb3RcIn0sdmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn19LHtcIi4uL2NvbG9yL2F0dHJpYnV0ZXNcIjo1Nzd9XSw2NDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCIpLmxpc3QsaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZVwiKS5nZXRBdXRvUmFuZ2UsYT10KFwiLi9jb25zdGFudHNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uKHQsXCJ4XCIsITApLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG89ZVtyXSxzPW9bYS5uYW1lXTtzJiZzLnZpc2libGUmJnMuYXV0b3JhbmdlJiYocy5faW5wdXQuYXV0b3JhbmdlPSEwLHMuX2lucHV0LnJhbmdlPXMucmFuZ2U9aSh0LG8pKX19fSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlXCI6NzQ4LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCI6NzUyLFwiLi9jb25zdGFudHNcIjo2NDh9XSw2NDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e25hbWU6XCJyYW5nZXNsaWRlclwiLGNvbnRhaW5lckNsYXNzTmFtZTpcInJhbmdlc2xpZGVyLWNvbnRhaW5lclwiLGJnQ2xhc3NOYW1lOlwicmFuZ2VzbGlkZXItYmdcIixyYW5nZVBsb3RDbGFzc05hbWU6XCJyYW5nZXNsaWRlci1yYW5nZXBsb3RcIixtYXNrTWluQ2xhc3NOYW1lOlwicmFuZ2VzbGlkZXItbWFzay1taW5cIixtYXNrTWF4Q2xhc3NOYW1lOlwicmFuZ2VzbGlkZXItbWFzay1tYXhcIixzbGlkZUJveENsYXNzTmFtZTpcInJhbmdlc2xpZGVyLXNsaWRlYm94XCIsZ3JhYmJlck1pbkNsYXNzTmFtZTpcInJhbmdlc2xpZGVyLWdyYWJiZXItbWluXCIsZ3JhYkFyZWFNaW5DbGFzc05hbWU6XCJyYW5nZXNsaWRlci1ncmFiYXJlYS1taW5cIixoYW5kbGVNaW5DbGFzc05hbWU6XCJyYW5nZXNsaWRlci1oYW5kbGUtbWluXCIsZ3JhYmJlck1heENsYXNzTmFtZTpcInJhbmdlc2xpZGVyLWdyYWJiZXItbWF4XCIsZ3JhYkFyZWFNYXhDbGFzc05hbWU6XCJyYW5nZXNsaWRlci1ncmFiYXJlYS1tYXhcIixoYW5kbGVNYXhDbGFzc05hbWU6XCJyYW5nZXNsaWRlci1oYW5kbGUtbWF4XCIsbWFza01pbk9wcEF4aXNDbGFzc05hbWU6XCJyYW5nZXNsaWRlci1tYXNrLW1pbi1vcHAtYXhpc1wiLG1hc2tNYXhPcHBBeGlzQ2xhc3NOYW1lOlwicmFuZ2VzbGlkZXItbWFzay1tYXgtb3BwLWF4aXNcIixtYXNrQ29sb3I6XCJyZ2JhKDAsMCwwLDAuNClcIixtYXNrT3BwQXhpc0NvbG9yOlwicmdiYSgwLDAsMCwwLjIpXCIsc2xpZGVCb3hGaWxsOlwidHJhbnNwYXJlbnRcIixzbGlkZUJveEN1cnNvcjpcImV3LXJlc2l6ZVwiLGdyYWJBcmVhRmlsbDpcInRyYW5zcGFyZW50XCIsZ3JhYkFyZWFDdXJzb3I6XCJjb2wtcmVzaXplXCIsZ3JhYkFyZWFXaWR0aDoxMCxoYW5kbGVXaWR0aDo0LGhhbmRsZVJhZGl1czoxLGhhbmRsZVN0cm9rZVdpZHRoOjEsZXh0cmFQYWQ6MTV9fSx7fV0sNjQ5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiKSxvPXQoXCIuL2F0dHJpYnV0ZXNcIikscz10KFwiLi9vcHBheGlzX2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbD10W3JdLGM9ZVtyXTtpZihsLnJhbmdlc2xpZGVyfHxlLl9yZXF1ZXN0UmFuZ2VzbGlkZXJbYy5faWRdKXtuLmlzUGxhaW5PYmplY3QobC5yYW5nZXNsaWRlcil8fChsLnJhbmdlc2xpZGVyPXt9KTt2YXIgdSxoLGY9bC5yYW5nZXNsaWRlcixwPWkubmV3Q29udGFpbmVyKGMsXCJyYW5nZXNsaWRlclwiKTtpZihfKFwidmlzaWJsZVwiKSl7XyhcImJnY29sb3JcIixlLnBsb3RfYmdjb2xvciksXyhcImJvcmRlcmNvbG9yXCIpLF8oXCJib3JkZXJ3aWR0aFwiKSxfKFwidGhpY2tuZXNzXCIpLF8oXCJhdXRvcmFuZ2VcIiwhYy5pc1ZhbGlkUmFuZ2UoZi5yYW5nZSkpLF8oXCJyYW5nZVwiKTt2YXIgZD1lLl9zdWJwbG90cztpZihkKWZvcih2YXIgZz1kLmNhcnRlc2lhbi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3Vic3RyKDAsdC5pbmRleE9mKFwieVwiKSk9PT1hLm5hbWUyaWQocil9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3Vic3RyKHQuaW5kZXhPZihcInlcIiksdC5sZW5ndGgpfSksdj1uLnNpbXBsZU1hcChnLGEuaWQybmFtZSksbT0wO208di5sZW5ndGg7bSsrKXt2YXIgeT12W21dO3U9Zlt5XXx8e30saD1pLm5ld0NvbnRhaW5lcihwLHksXCJ5YXhpc1wiKTt2YXIgeCxiPWVbeV07dS5yYW5nZSYmYi5pc1ZhbGlkUmFuZ2UodS5yYW5nZSkmJih4PVwiZml4ZWRcIiksXCJtYXRjaFwiIT09dyhcInJhbmdlbW9kZVwiLHgpJiZ3KFwicmFuZ2VcIixiLnJhbmdlLnNsaWNlKCkpfXAuX2lucHV0PWZ9fWZ1bmN0aW9uIF8odCxlKXtyZXR1cm4gbi5jb2VyY2UoZixwLG8sdCxlKX1mdW5jdGlvbiB3KHQsZSl7cmV0dXJuIG4uY29lcmNlKHUsaCxzLHQsZSl9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiOjc1MixcIi4vYXR0cmlidXRlc1wiOjY0NixcIi4vb3BwYXhpc19hdHRyaWJ1dGVzXCI6NjUzfV0sNjUwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGE9dChcIi4uLy4uL3Bsb3RzL3Bsb3RzXCIpLG89dChcIi4uLy4uL2xpYlwiKSxzPXQoXCIuLi9kcmF3aW5nXCIpLGw9dChcIi4uL2NvbG9yXCIpLGM9dChcIi4uL3RpdGxlc1wiKSx1PXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIiksaD10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCIpLGY9dChcIi4uL2RyYWdlbGVtZW50XCIpLHA9dChcIi4uLy4uL2xpYi9zZXRjdXJzb3JcIiksZD10KFwiLi9jb25zdGFudHNcIik7ZnVuY3Rpb24gZyh0LGUscixuKXt2YXIgaT1vLmVuc3VyZVNpbmdsZSh0LFwicmVjdFwiLGQuYmdDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHt4OjAseTowLFwic2hhcGUtcmVuZGVyaW5nXCI6XCJjcmlzcEVkZ2VzXCJ9KX0pLGE9bi5ib3JkZXJ3aWR0aCUyPT0wP24uYm9yZGVyd2lkdGg6bi5ib3JkZXJ3aWR0aC0xLGw9LW4uX29mZnNldFNoaWZ0LGM9cy5jcmlzcFJvdW5kKGUsbi5ib3JkZXJ3aWR0aCk7aS5hdHRyKHt3aWR0aDpuLl93aWR0aCthLGhlaWdodDpuLl9oZWlnaHQrYSx0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoXCIrbCtcIixcIitsK1wiKVwiLGZpbGw6bi5iZ2NvbG9yLHN0cm9rZTpuLmJvcmRlcmNvbG9yLFwic3Ryb2tlLXdpZHRoXCI6Y30pfWZ1bmN0aW9uIHYodCxlLHIsbil7dmFyIGk9ZS5fZnVsbExheW91dDtvLmVuc3VyZVNpbmdsZUJ5SWQoaS5fdG9wZGVmcyxcImNsaXBQYXRoXCIsbi5fY2xpcElkLGZ1bmN0aW9uKHQpe3QuYXBwZW5kKFwicmVjdFwiKS5hdHRyKHt4OjAseTowfSl9KS5zZWxlY3QoXCJyZWN0XCIpLmF0dHIoe3dpZHRoOm4uX3dpZHRoLGhlaWdodDpuLl9oZWlnaHR9KX1mdW5jdGlvbiBtKHQsZSxyLGkpe3ZhciBsLGM9ZS5jYWxjZGF0YSxmPXQuc2VsZWN0QWxsKFwiZy5cIitkLnJhbmdlUGxvdENsYXNzTmFtZSkuZGF0YShyLl9zdWJwbG90c1dpdGgsby5pZGVudGl0eSk7Zi5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsZnVuY3Rpb24odCl7cmV0dXJuIGQucmFuZ2VQbG90Q2xhc3NOYW1lK1wiIFwiK3R9KS5jYWxsKHMuc2V0Q2xpcFVybCxpLl9jbGlwSWQsZSksZi5vcmRlcigpLGYuZXhpdCgpLnJlbW92ZSgpLGYuZWFjaChmdW5jdGlvbih0LG8pe3ZhciBzPW4uc2VsZWN0KHRoaXMpLGY9MD09PW8scD1oLmdldEZyb21JZChlLHQsXCJ5XCIpLGQ9cC5fbmFtZSxnPWlbZF0sdj17ZGF0YTpbXSxsYXlvdXQ6e3hheGlzOnt0eXBlOnIudHlwZSxkb21haW46WzAsMV0scmFuZ2U6aS5yYW5nZS5zbGljZSgpLGNhbGVuZGFyOnIuY2FsZW5kYXJ9LHdpZHRoOmkuX3dpZHRoLGhlaWdodDppLl9oZWlnaHQsbWFyZ2luOnt0OjAsYjowLGw6MCxyOjB9fSxfY29udGV4dDplLl9jb250ZXh0fTt2LmxheW91dFtkXT17dHlwZTpwLnR5cGUsZG9tYWluOlswLDFdLHJhbmdlOlwibWF0Y2hcIiE9PWcucmFuZ2Vtb2RlP2cucmFuZ2Uuc2xpY2UoKTpwLnJhbmdlLnNsaWNlKCksY2FsZW5kYXI6cC5jYWxlbmRhcn0sYS5zdXBwbHlEZWZhdWx0cyh2KTt2YXIgbT12Ll9mdWxsTGF5b3V0LnhheGlzLHk9di5fZnVsbExheW91dFtkXTttLmNsZWFyQ2FsYygpLG0uc2V0U2NhbGUoKSx5LmNsZWFyQ2FsYygpLHkuc2V0U2NhbGUoKTt2YXIgeD17aWQ6dCxwbG90Z3JvdXA6cyx4YXhpczptLHlheGlzOnksaXNSYW5nZVBsb3Q6ITB9O2Y/bD14Oih4Lm1haW5wbG90PVwieHlcIix4Lm1haW5wbG90aW5mbz1sKSx1LnJhbmdlUGxvdChlLHgsZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dLGE9aVswXS50cmFjZTthLnhheGlzK2EueWF4aXM9PT1lJiZyLnB1c2goaSl9cmV0dXJuIHJ9KGMsdCkpfSl9ZnVuY3Rpb24geSh0LGUscixuLGkpeyhvLmVuc3VyZVNpbmdsZSh0LFwicmVjdFwiLGQubWFza01pbkNsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIoe3g6MCx5OjAsXCJzaGFwZS1yZW5kZXJpbmdcIjpcImNyaXNwRWRnZXNcIn0pfSkuYXR0cihcImhlaWdodFwiLG4uX2hlaWdodCkuY2FsbChsLmZpbGwsZC5tYXNrQ29sb3IpLG8uZW5zdXJlU2luZ2xlKHQsXCJyZWN0XCIsZC5tYXNrTWF4Q2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuYXR0cih7eTowLFwic2hhcGUtcmVuZGVyaW5nXCI6XCJjcmlzcEVkZ2VzXCJ9KX0pLmF0dHIoXCJoZWlnaHRcIixuLl9oZWlnaHQpLmNhbGwobC5maWxsLGQubWFza0NvbG9yKSxcIm1hdGNoXCIhPT1pLnJhbmdlbW9kZSkmJihvLmVuc3VyZVNpbmdsZSh0LFwicmVjdFwiLGQubWFza01pbk9wcEF4aXNDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHt5OjAsXCJzaGFwZS1yZW5kZXJpbmdcIjpcImNyaXNwRWRnZXNcIn0pfSkuYXR0cihcIndpZHRoXCIsbi5fd2lkdGgpLmNhbGwobC5maWxsLGQubWFza09wcEF4aXNDb2xvciksby5lbnN1cmVTaW5nbGUodCxcInJlY3RcIixkLm1hc2tNYXhPcHBBeGlzQ2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuYXR0cih7eTowLFwic2hhcGUtcmVuZGVyaW5nXCI6XCJjcmlzcEVkZ2VzXCJ9KX0pLmF0dHIoXCJ3aWR0aFwiLG4uX3dpZHRoKS5zdHlsZShcImJvcmRlci10b3BcIixkLm1hc2tPcHBCb3JkZXIpLmNhbGwobC5maWxsLGQubWFza09wcEF4aXNDb2xvcikpfWZ1bmN0aW9uIHgodCxlLHIsbil7ZS5fY29udGV4dC5zdGF0aWNQbG90fHxvLmVuc3VyZVNpbmdsZSh0LFwicmVjdFwiLGQuc2xpZGVCb3hDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHt5OjAsY3Vyc29yOmQuc2xpZGVCb3hDdXJzb3IsXCJzaGFwZS1yZW5kZXJpbmdcIjpcImNyaXNwRWRnZXNcIn0pfSkuYXR0cih7aGVpZ2h0Om4uX2hlaWdodCxmaWxsOmQuc2xpZGVCb3hGaWxsfSl9ZnVuY3Rpb24gYih0LGUscixuKXt2YXIgaT1vLmVuc3VyZVNpbmdsZSh0LFwiZ1wiLGQuZ3JhYmJlck1pbkNsYXNzTmFtZSksYT1vLmVuc3VyZVNpbmdsZSh0LFwiZ1wiLGQuZ3JhYmJlck1heENsYXNzTmFtZSkscz17eDowLHdpZHRoOmQuaGFuZGxlV2lkdGgscng6ZC5oYW5kbGVSYWRpdXMsZmlsbDpsLmJhY2tncm91bmQsc3Ryb2tlOmwuZGVmYXVsdExpbmUsXCJzdHJva2Utd2lkdGhcIjpkLmhhbmRsZVN0cm9rZVdpZHRoLFwic2hhcGUtcmVuZGVyaW5nXCI6XCJjcmlzcEVkZ2VzXCJ9LGM9e3k6TWF0aC5yb3VuZChuLl9oZWlnaHQvNCksaGVpZ2h0Ok1hdGgucm91bmQobi5faGVpZ2h0LzIpfTtpZihvLmVuc3VyZVNpbmdsZShpLFwicmVjdFwiLGQuaGFuZGxlTWluQ2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuYXR0cihzKX0pLmF0dHIoYyksby5lbnN1cmVTaW5nbGUoYSxcInJlY3RcIixkLmhhbmRsZU1heENsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIocyl9KS5hdHRyKGMpLCFlLl9jb250ZXh0LnN0YXRpY1Bsb3Qpe3ZhciB1PXt3aWR0aDpkLmdyYWJBcmVhV2lkdGgseDowLHk6MCxmaWxsOmQuZ3JhYkFyZWFGaWxsLGN1cnNvcjpkLmdyYWJBcmVhQ3Vyc29yfTtvLmVuc3VyZVNpbmdsZShpLFwicmVjdFwiLGQuZ3JhYkFyZWFNaW5DbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHUpfSkuYXR0cihcImhlaWdodFwiLG4uX2hlaWdodCksby5lbnN1cmVTaW5nbGUoYSxcInJlY3RcIixkLmdyYWJBcmVhTWF4Q2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuYXR0cih1KX0pLmF0dHIoXCJoZWlnaHRcIixuLl9oZWlnaHQpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9yYW5nZVNsaWRlckRhdGEsYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgcz1yW2FdW2QubmFtZV07cy5fY2xpcElkPXMuX2lkK1wiLVwiK2UuX3VpZH12YXIgbD1lLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKFwiZy5cIitkLmNvbnRhaW5lckNsYXNzTmFtZSkuZGF0YShyLGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9uYW1lfSk7bC5leGl0KCkuZWFjaChmdW5jdGlvbih0KXt2YXIgcj10W2QubmFtZV07ZS5fdG9wZGVmcy5zZWxlY3QoXCIjXCIrci5fY2xpcElkKS5yZW1vdmUoKX0pLnJlbW92ZSgpLDAhPT1yLmxlbmd0aCYmKGwuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoZC5jb250YWluZXJDbGFzc05hbWUsITApLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpLGwuZWFjaChmdW5jdGlvbihyKXt2YXIgYT1uLnNlbGVjdCh0aGlzKSxzPXJbZC5uYW1lXSxsPWVbaC5pZDJuYW1lKHIuYW5jaG9yKV0sdT1zW2guaWQybmFtZShyLmFuY2hvcildO2lmKHMucmFuZ2Upe3ZhciBfLHc9by5zaW1wbGVNYXAocy5yYW5nZSxyLnIybCksaz1vLnNpbXBsZU1hcChyLnJhbmdlLHIucjJsKTtfPWtbMF08a1sxXT9bTWF0aC5taW4od1swXSxrWzBdKSxNYXRoLm1heCh3WzFdLGtbMV0pXTpbTWF0aC5tYXgod1swXSxrWzBdKSxNYXRoLm1pbih3WzFdLGtbMV0pXSxzLnJhbmdlPXMuX2lucHV0LnJhbmdlPW8uc2ltcGxlTWFwKF8sci5sMnIpfXIuY2xlYW5SYW5nZShcInJhbmdlc2xpZGVyLnJhbmdlXCIpO3ZhciBBPWUubWFyZ2luLFQ9ZS5fc2l6ZSxNPXIuZG9tYWluLFM9cy5fdGlja0hlaWdodCxFPXMuX29wcEJvdHRvbTtzLl93aWR0aD1ULncqKE1bMV0tTVswXSk7dmFyIEM9TWF0aC5yb3VuZChBLmwrVC53Kk1bMF0pLEw9TWF0aC5yb3VuZChULnQrVC5oKigxLUUpK1Mrcy5fb2Zmc2V0U2hpZnQrZC5leHRyYVBhZCk7YS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrQytcIixcIitMK1wiKVwiKTt2YXIgej1yLnIybChzLnJhbmdlWzBdKSxPPXIucjJsKHMucmFuZ2VbMV0pLEk9Ty16O2lmKHMucDJkPWZ1bmN0aW9uKHQpe3JldHVybiB0L3MuX3dpZHRoKkkren0scy5kMnA9ZnVuY3Rpb24odCl7cmV0dXJuKHQteikvSSpzLl93aWR0aH0scy5fcmw9W3osT10sXCJtYXRjaFwiIT09dS5yYW5nZW1vZGUpe3ZhciBEPWwucjJsKHUucmFuZ2VbMF0pLFA9bC5yMmwodS5yYW5nZVsxXSktRDtzLmQycE9wcEF4aXM9ZnVuY3Rpb24odCl7cmV0dXJuKHQtRCkvUCpzLl9oZWlnaHR9fWEuY2FsbChnLHQscixzKS5jYWxsKHYsdCxyLHMpLmNhbGwobSx0LHIscykuY2FsbCh5LHQscixzLHUpLmNhbGwoeCx0LHIscykuY2FsbChiLHQscixzKSxmdW5jdGlvbih0LGUscixhKXt2YXIgcz10LnNlbGVjdChcInJlY3QuXCIrZC5zbGlkZUJveENsYXNzTmFtZSkubm9kZSgpLGw9dC5zZWxlY3QoXCJyZWN0LlwiK2QuZ3JhYkFyZWFNaW5DbGFzc05hbWUpLm5vZGUoKSxjPXQuc2VsZWN0KFwicmVjdC5cIitkLmdyYWJBcmVhTWF4Q2xhc3NOYW1lKS5ub2RlKCk7dC5vbihcIm1vdXNlZG93blwiLGZ1bmN0aW9uKCl7dmFyIHU9bi5ldmVudCxoPXUudGFyZ2V0LGQ9dS5jbGllbnRYLGc9ZC10Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LHY9YS5kMnAoci5fcmxbMF0pLG09YS5kMnAoci5fcmxbMV0pLHk9Zi5jb3ZlclNsaXAoKTtmdW5jdGlvbiB4KHQpe3ZhciB1LGYseCxiPSt0LmNsaWVudFgtZDtzd2l0Y2goaCl7Y2FzZSBzOng9XCJldy1yZXNpemVcIix1PXYrYixmPW0rYjticmVhaztjYXNlIGw6eD1cImNvbC1yZXNpemVcIix1PXYrYixmPW07YnJlYWs7Y2FzZSBjOng9XCJjb2wtcmVzaXplXCIsdT12LGY9bStiO2JyZWFrO2RlZmF1bHQ6eD1cImV3LXJlc2l6ZVwiLHU9ZyxmPWcrYn1pZihmPHUpe3ZhciBfPWY7Zj11LHU9X31hLl9waXhlbE1pbj11LGEuX3BpeGVsTWF4PWYscChuLnNlbGVjdCh5KSx4KSxmdW5jdGlvbih0LGUscixuKXtmdW5jdGlvbiBhKHQpe3JldHVybiByLmwycihvLmNvbnN0cmFpbih0LG4uX3JsWzBdLG4uX3JsWzFdKSl9dmFyIHM9YShuLnAyZChuLl9waXhlbE1pbikpLGw9YShuLnAyZChuLl9waXhlbE1heCkpO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtpLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIixlLHIuX25hbWUrXCIucmFuZ2VcIixbcyxsXSl9KX0oMCxlLHIsYSl9eS5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIseCkseS5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLGZ1bmN0aW9uIHQoKXt5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIix4KTt5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsdCk7by5yZW1vdmVFbGVtZW50KHkpfSl9KX0oYSx0LHIscyksZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBzPWQuaGFuZGxlV2lkdGgvMjtmdW5jdGlvbiBsKHQpe3JldHVybiBvLmNvbnN0cmFpbih0LDAsbi5fd2lkdGgpfWZ1bmN0aW9uIGModCl7cmV0dXJuIG8uY29uc3RyYWluKHQsMCxuLl9oZWlnaHQpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIG8uY29uc3RyYWluKHQsLXMsbi5fd2lkdGgrcyl9dmFyIGg9bChuLmQycChyLl9ybFswXSkpLGY9bChuLmQycChyLl9ybFsxXSkpO2lmKHQuc2VsZWN0KFwicmVjdC5cIitkLnNsaWRlQm94Q2xhc3NOYW1lKS5hdHRyKFwieFwiLGgpLmF0dHIoXCJ3aWR0aFwiLGYtaCksdC5zZWxlY3QoXCJyZWN0LlwiK2QubWFza01pbkNsYXNzTmFtZSkuYXR0cihcIndpZHRoXCIsaCksdC5zZWxlY3QoXCJyZWN0LlwiK2QubWFza01heENsYXNzTmFtZSkuYXR0cihcInhcIixmKS5hdHRyKFwid2lkdGhcIixuLl93aWR0aC1mKSxcIm1hdGNoXCIhPT1hLnJhbmdlbW9kZSl7dmFyIHA9bi5faGVpZ2h0LWMobi5kMnBPcHBBeGlzKGkuX3JsWzFdKSksZz1uLl9oZWlnaHQtYyhuLmQycE9wcEF4aXMoaS5fcmxbMF0pKTt0LnNlbGVjdChcInJlY3QuXCIrZC5tYXNrTWluT3BwQXhpc0NsYXNzTmFtZSkuYXR0cihcInhcIixoKS5hdHRyKFwiaGVpZ2h0XCIscCkuYXR0cihcIndpZHRoXCIsZi1oKSx0LnNlbGVjdChcInJlY3QuXCIrZC5tYXNrTWF4T3BwQXhpc0NsYXNzTmFtZSkuYXR0cihcInhcIixoKS5hdHRyKFwieVwiLGcpLmF0dHIoXCJoZWlnaHRcIixuLl9oZWlnaHQtZykuYXR0cihcIndpZHRoXCIsZi1oKSx0LnNlbGVjdChcInJlY3QuXCIrZC5zbGlkZUJveENsYXNzTmFtZSkuYXR0cihcInlcIixwKS5hdHRyKFwiaGVpZ2h0XCIsZy1wKX12YXIgdj1NYXRoLnJvdW5kKHUoaC1zKSktLjUsbT1NYXRoLnJvdW5kKHUoZi1zKSkrLjU7dC5zZWxlY3QoXCJnLlwiK2QuZ3JhYmJlck1pbkNsYXNzTmFtZSkuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK3YrXCIsMC41KVwiKSx0LnNlbGVjdChcImcuXCIrZC5ncmFiYmVyTWF4Q2xhc3NOYW1lKS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrbStcIiwwLjUpXCIpfShhLDAscixzLGwsdSksXCJib3R0b21cIj09PXIuc2lkZSYmYy5kcmF3KHQsci5faWQrXCJ0aXRsZVwiLHtwcm9wQ29udGFpbmVyOnIscHJvcE5hbWU6ci5fbmFtZStcIi50aXRsZVwiLHBsYWNlaG9sZGVyOmUuX2RmbHRUaXRsZS54LGF0dHJpYnV0ZXM6e3g6ci5fb2Zmc2V0K3IuX2xlbmd0aC8yLHk6TCtzLl9oZWlnaHQrcy5fb2Zmc2V0U2hpZnQrMTArMS41KnIudGl0bGUuZm9udC5zaXplLFwidGV4dC1hbmNob3JcIjpcIm1pZGRsZVwifX0pfSkpfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3NldGN1cnNvclwiOjcyMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiOjc2MCxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiOjc1MixcIi4uLy4uL3Bsb3RzL3Bsb3RzXCI6ODEwLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9jb2xvclwiOjU3OCxcIi4uL2RyYWdlbGVtZW50XCI6NTk2LFwiLi4vZHJhd2luZ1wiOjU5OSxcIi4uL3RpdGxlc1wiOjY2NixcIi4vY29uc3RhbnRzXCI6NjQ4LGQzOjE1NX1dLDY1MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIiksaT10KFwiLi9jb25zdGFudHNcIiksYT1pLm5hbWU7ZnVuY3Rpb24gbyh0KXt2YXIgZT10JiZ0W2FdO3JldHVybiBlJiZlLnZpc2libGV9ci5pc1Zpc2libGU9byxyLm1ha2VEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPW4ubGlzdCh7X2Z1bGxMYXlvdXQ6dH0sXCJ4XCIsITApLHI9dC5tYXJnaW4saT1bXTtpZighdC5faGFzKFwiZ2wyZFwiKSlmb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKyl7dmFyIGw9ZVtzXTtpZihvKGwpKXtpLnB1c2gobCk7dmFyIGM9bFthXTtjLl9pZD1hK2wuX2lkLGMuX2hlaWdodD0odC5oZWlnaHQtci5iLXIudCkqYy50aGlja25lc3MsYy5fb2Zmc2V0U2hpZnQ9TWF0aC5mbG9vcihjLmJvcmRlcndpZHRoLzIpfX10Ll9yYW5nZVNsaWRlckRhdGE9aX0sci5hdXRvTWFyZ2luT3B0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lW2FdLG89MS8wLHM9ZS5fY291bnRlckF4ZXMsbD0wO2w8cy5sZW5ndGg7bCsrKXt2YXIgYz1zW2xdLHU9bi5nZXRGcm9tSWQodCxjKTtvPU1hdGgubWluKG8sdS5kb21haW5bMF0pfXIuX29wcEJvdHRvbT1vO3ZhciBoPVwiYm90dG9tXCI9PT1lLnNpZGUmJmUuX2JvdW5kaW5nQm94LmhlaWdodHx8MDtyZXR1cm4gci5fdGlja0hlaWdodD1oLHt4OjAseTpvLGw6MCxyOjAsdDowLGI6ci5faGVpZ2h0K3QuX2Z1bGxMYXlvdXQubWFyZ2luLmIraCxwYWQ6aS5leHRyYVBhZCsyKnIuX29mZnNldFNoaWZ0fX19LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiOjc1MixcIi4vY29uc3RhbnRzXCI6NjQ4fV0sNjUyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2F0dHJpYnV0ZXNcIiksYT10KFwiLi9vcHBheGlzX2F0dHJpYnV0ZXNcIiksbz10KFwiLi9oZWxwZXJzXCIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZTpcImNvbXBvbmVudFwiLG5hbWU6XCJyYW5nZXNsaWRlclwiLHNjaGVtYTp7c3VicGxvdHM6e3hheGlzOntyYW5nZXNsaWRlcjpuLmV4dGVuZEZsYXQoe30saSx7eWF4aXM6YX0pfX19LGxheW91dEF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxoYW5kbGVEZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxjYWxjQXV0b3JhbmdlOnQoXCIuL2NhbGNfYXV0b3JhbmdlXCIpLGRyYXc6dChcIi4vZHJhd1wiKSxpc1Zpc2libGU6by5pc1Zpc2libGUsbWFrZURhdGE6by5tYWtlRGF0YSxhdXRvTWFyZ2luT3B0czpvLmF1dG9NYXJnaW5PcHRzfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi9hdHRyaWJ1dGVzXCI6NjQ2LFwiLi9jYWxjX2F1dG9yYW5nZVwiOjY0NyxcIi4vZGVmYXVsdHNcIjo2NDksXCIuL2RyYXdcIjo2NTAsXCIuL2hlbHBlcnNcIjo2NTEsXCIuL29wcGF4aXNfYXR0cmlidXRlc1wiOjY1M31dLDY1MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17X2lzU3VicGxvdE9iajohMCxyYW5nZW1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImF1dG9cIixcImZpeGVkXCIsXCJtYXRjaFwiXSxkZmx0OlwibWF0Y2hcIixlZGl0VHlwZTpcImNhbGNcIn0scmFuZ2U6e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsaXRlbXM6W3t2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJwbG90XCJ9LHt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJwbG90XCJ9XSxlZGl0VHlwZTpcInBsb3RcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9fSx7fV0sNjU0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlc1wiKS5saW5lLGE9dChcIi4uL2RyYXdpbmcvYXR0cmlidXRlc1wiKS5kYXNoLG89dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxzPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLnRlbXBsYXRlZEFycmF5O2UuZXhwb3J0cz1zKFwic2hhcGVcIix7dmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0sdHlwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiY2lyY2xlXCIsXCJyZWN0XCIsXCJwYXRoXCIsXCJsaW5lXCJdLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0sbGF5ZXI6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImJlbG93XCIsXCJhYm92ZVwiXSxkZmx0OlwiYWJvdmVcIixlZGl0VHlwZTpcImFycmF5ZHJhd1wifSx4cmVmOm8oe30sbi54cmVmLHt9KSx4c2l6ZW1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInNjYWxlZFwiLFwicGl4ZWxcIl0sZGZsdDpcInNjYWxlZFwiLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0seGFuY2hvcjp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0seDA6e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LHgxOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSx5cmVmOm8oe30sbi55cmVmLHt9KSx5c2l6ZW1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInNjYWxlZFwiLFwicGl4ZWxcIl0sZGZsdDpcInNjYWxlZFwiLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0seWFuY2hvcjp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsYythcnJheWRyYXdcIn0seTA6e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LHkxOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSxwYXRoOnt2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSxvcGFjaXR5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9LGxpbmU6e2NvbG9yOm8oe30saS5jb2xvcix7ZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0pLHdpZHRoOm8oe30saS53aWR0aCx7ZWRpdFR5cGU6XCJjYWxjK2FycmF5ZHJhd1wifSksZGFzaDpvKHt9LGEse2VkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9KSxlZGl0VHlwZTpcImNhbGMrYXJyYXlkcmF3XCJ9LGZpbGxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDpcInJnYmEoMCwwLDAsMClcIixlZGl0VHlwZTpcImFycmF5ZHJhd1wifSxlZGl0VHlwZTpcImFycmF5ZHJhd1wifSl9LHtcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlc1wiOjEwNTIsXCIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzXCI6NTYxLFwiLi4vZHJhd2luZy9hdHRyaWJ1dGVzXCI6NTk4fV0sNjU1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxhPXQoXCIuL2NvbnN0YW50c1wiKSxvPXQoXCIuL2hlbHBlcnNcIik7ZnVuY3Rpb24gcyh0KXtyZXR1cm4gYyh0LmxpbmUud2lkdGgsdC54c2l6ZW1vZGUsdC54MCx0LngxLHQucGF0aCwhMSl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gYyh0LmxpbmUud2lkdGgsdC55c2l6ZW1vZGUsdC55MCx0LnkxLHQucGF0aCwhMCl9ZnVuY3Rpb24gYyh0LGUscixpLHMsbCl7dmFyIGM9dC8yLHU9bDtpZihcInBpeGVsXCI9PT1lKXt2YXIgaD1zP28uZXh0cmFjdFBhdGhDb29yZHMocyxsP2EucGFyYW1Jc1k6YS5wYXJhbUlzWCk6W3IsaV0sZj1uLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxoKSxwPW4uYWdnTnVtcyhNYXRoLm1pbixudWxsLGgpLGQ9cDwwP01hdGguYWJzKHApK2M6YyxnPWY+MD9mK2M6YztyZXR1cm57cHBhZDpjLHBwYWRwbHVzOnU/ZDpnLHBwYWRtaW51czp1P2c6ZH19cmV0dXJue3BwYWQ6Y319ZnVuY3Rpb24gdSh0LGUscixuLGkpe3ZhciBzPVwiY2F0ZWdvcnlcIj09PXQudHlwZXx8XCJtdWx0aWNhdGVnb3J5XCI9PT10LnR5cGU/dC5yMmM6dC5kMmM7aWYodm9pZCAwIT09ZSlyZXR1cm5bcyhlKSxzKHIpXTtpZihuKXt2YXIgbCxjLHUsaCxmPTEvMCxwPS0xLzAsZD1uLm1hdGNoKGEuc2VnbWVudFJFKTtmb3IoXCJkYXRlXCI9PT10LnR5cGUmJihzPW8uZGVjb2RlRGF0ZShzKSksbD0wO2w8ZC5sZW5ndGg7bCsrKXZvaWQgMCE9PShjPWlbZFtsXS5jaGFyQXQoMCldLmRyYXduKSYmKCEodT1kW2xdLnN1YnN0cigxKS5tYXRjaChhLnBhcmFtUkUpKXx8dS5sZW5ndGg8Y3x8KChoPXModVtjXSkpPGYmJihmPWgpLGg+cCYmKHA9aCkpKTtyZXR1cm4gcD49Zj9bZixwXTp2b2lkIDB9fWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9bi5maWx0ZXJWaXNpYmxlKGUuc2hhcGVzKTtpZihyLmxlbmd0aCYmdC5fZnVsbERhdGEubGVuZ3RoKWZvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXt2YXIgYyxoLGY9cltvXTtpZihmLl9leHRyZW1lcz17fSxcInBhcGVyXCIhPT1mLnhyZWYpe3ZhciBwPVwicGl4ZWxcIj09PWYueHNpemVtb2RlP2YueGFuY2hvcjpmLngwLGQ9XCJwaXhlbFwiPT09Zi54c2l6ZW1vZGU/Zi54YW5jaG9yOmYueDE7KGg9dShjPWkuZ2V0RnJvbUlkKHQsZi54cmVmKSxwLGQsZi5wYXRoLGEucGFyYW1Jc1gpKSYmKGYuX2V4dHJlbWVzW2MuX2lkXT1pLmZpbmRFeHRyZW1lcyhjLGgscyhmKSkpfWlmKFwicGFwZXJcIiE9PWYueXJlZil7dmFyIGc9XCJwaXhlbFwiPT09Zi55c2l6ZW1vZGU/Zi55YW5jaG9yOmYueTAsdj1cInBpeGVsXCI9PT1mLnlzaXplbW9kZT9mLnlhbmNob3I6Zi55MTsoaD11KGM9aS5nZXRGcm9tSWQodCxmLnlyZWYpLGcsdixmLnBhdGgsYS5wYXJhbUlzWSkpJiYoZi5fZXh0cmVtZXNbYy5faWRdPWkuZmluZEV4dHJlbWVzKGMsaCxsKGYpKSl9fX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi9jb25zdGFudHNcIjo2NTYsXCIuL2hlbHBlcnNcIjo2NTl9XSw2NTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e3NlZ21lbnRSRTovW01MSFZRQ1RTWl1bXk1MSFZRQ1RTWl0qL2cscGFyYW1SRTovW15cXHMsXSsvZyxwYXJhbUlzWDp7TTp7MDohMCxkcmF3bjowfSxMOnswOiEwLGRyYXduOjB9LEg6ezA6ITAsZHJhd246MH0sVjp7fSxROnswOiEwLDI6ITAsZHJhd246Mn0sQzp7MDohMCwyOiEwLDQ6ITAsZHJhd246NH0sVDp7MDohMCxkcmF3bjowfSxTOnswOiEwLDI6ITAsZHJhd246Mn0sWjp7fX0scGFyYW1Jc1k6e006ezE6ITAsZHJhd246MX0sTDp7MTohMCxkcmF3bjoxfSxIOnt9LFY6ezA6ITAsZHJhd246MH0sUTp7MTohMCwzOiEwLGRyYXduOjN9LEM6ezE6ITAsMzohMCw1OiEwLGRyYXduOjV9LFQ6ezE6ITAsZHJhd246MX0sUzp7MTohMCwzOiEwLGRyYXduOjV9LFo6e319LG51bVBhcmFtczp7TToyLEw6MixIOjEsVjoxLFE6NCxDOjYsVDoyLFM6NCxaOjB9fX0se31dLDY1NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksYT10KFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCIpLG89dChcIi4vYXR0cmlidXRlc1wiKSxzPXQoXCIuL2hlbHBlcnNcIik7ZnVuY3Rpb24gbCh0LGUscil7ZnVuY3Rpb24gYShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWlmKGEoXCJ2aXNpYmxlXCIpKXthKFwibGF5ZXJcIiksYShcIm9wYWNpdHlcIiksYShcImZpbGxjb2xvclwiKSxhKFwibGluZS5jb2xvclwiKSxhKFwibGluZS53aWR0aFwiKSxhKFwibGluZS5kYXNoXCIpO2Zvcih2YXIgbD1hKFwidHlwZVwiLHQucGF0aD9cInBhdGhcIjpcInJlY3RcIiksYz1hKFwieHNpemVtb2RlXCIpLHU9YShcInlzaXplbW9kZVwiKSxoPVtcInhcIixcInlcIl0sZj0wO2Y8MjtmKyspe3ZhciBwLGQsZyx2PWhbZl0sbT12K1wiYW5jaG9yXCIseT1cInhcIj09PXY/Yzp1LHg9e19mdWxsTGF5b3V0OnJ9LGI9aS5jb2VyY2VSZWYodCxlLHgsdixcIlwiLFwicGFwZXJcIik7aWYoXCJwYXBlclwiIT09Yj8oKHA9aS5nZXRGcm9tSWQoeCxiKSkuX3NoYXBlSW5kaWNlcy5wdXNoKGUuX2luZGV4KSxnPXMucmFuZ2VUb1NoYXBlUG9zaXRpb24ocCksZD1zLnNoYXBlUG9zaXRpb25Ub1JhbmdlKHApKTpkPWc9bi5pZGVudGl0eSxcInBhdGhcIiE9PWwpe3ZhciBfPXYrXCIwXCIsdz12K1wiMVwiLGs9dFtfXSxBPXRbd107dFtfXT1kKHRbX10sITApLHRbd109ZCh0W3ddLCEwKSxcInBpeGVsXCI9PT15PyhhKF8sMCksYSh3LDEwKSk6KGkuY29lcmNlUG9zaXRpb24oZSx4LGEsYixfLC4yNSksaS5jb2VyY2VQb3NpdGlvbihlLHgsYSxiLHcsLjc1KSksZVtfXT1nKGVbX10pLGVbd109ZyhlW3ddKSx0W19dPWssdFt3XT1BfWlmKFwicGl4ZWxcIj09PXkpe3ZhciBUPXRbbV07dFttXT1kKHRbbV0sITApLGkuY29lcmNlUG9zaXRpb24oZSx4LGEsYixtLC4yNSksZVttXT1nKGVbbV0pLHRbbV09VH19XCJwYXRoXCI9PT1sP2EoXCJwYXRoXCIpOm4ubm9uZU9yQWxsKHQsZSxbXCJ4MFwiLFwieDFcIixcInkwXCIsXCJ5MVwiXSl9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2EodCxlLHtuYW1lOlwic2hhcGVzXCIsaGFuZGxlSXRlbURlZmF1bHRzOmx9KX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0c1wiOjc0NSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi9hdHRyaWJ1dGVzXCI6NjU0LFwiLi9oZWxwZXJzXCI6NjU5fV0sNjU4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxvPXQoXCIuLi9jb2xvclwiKSxzPXQoXCIuLi9kcmF3aW5nXCIpLGw9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIikuYXJyYXlFZGl0b3IsYz10KFwiLi4vZHJhZ2VsZW1lbnRcIiksdT10KFwiLi4vLi4vbGliL3NldGN1cnNvclwiKSxoPXQoXCIuL2NvbnN0YW50c1wiKSxmPXQoXCIuL2hlbHBlcnNcIik7ZnVuY3Rpb24gcCh0LGUpe3QuX2Z1bGxMYXlvdXQuX3BhcGVyZGl2LnNlbGVjdEFsbCgnLnNoYXBlbGF5ZXIgW2RhdGEtaW5kZXg9XCInK2UrJ1wiXScpLnJlbW92ZSgpO3ZhciByPXQuX2Z1bGxMYXlvdXQuc2hhcGVzW2VdfHx7fTtpZihyLl9pbnB1dCYmITEhPT1yLnZpc2libGUpaWYoXCJiZWxvd1wiIT09ci5sYXllciltKHQuX2Z1bGxMYXlvdXQuX3NoYXBlVXBwZXJMYXllcik7ZWxzZSBpZihcInBhcGVyXCI9PT1yLnhyZWZ8fFwicGFwZXJcIj09PXIueXJlZiltKHQuX2Z1bGxMYXlvdXQuX3NoYXBlTG93ZXJMYXllcik7ZWxzZXt2YXIgcD10Ll9mdWxsTGF5b3V0Ll9wbG90c1tyLnhyZWYrci55cmVmXTtpZihwKW0oKHAubWFpbnBsb3RpbmZvfHxwKS5zaGFwZWxheWVyKTtlbHNlIG0odC5fZnVsbExheW91dC5fc2hhcGVMb3dlckxheWVyKX1mdW5jdGlvbiBtKHApe3ZhciBtPXtcImRhdGEtaW5kZXhcIjplLFwiZmlsbC1ydWxlXCI6XCJldmVub2RkXCIsZDpnKHQscil9LHk9ci5saW5lLndpZHRoP3IubGluZS5jb2xvcjpcInJnYmEoMCwwLDAsMClcIix4PXAuYXBwZW5kKFwicGF0aFwiKS5hdHRyKG0pLnN0eWxlKFwib3BhY2l0eVwiLHIub3BhY2l0eSkuY2FsbChvLnN0cm9rZSx5KS5jYWxsKG8uZmlsbCxyLmZpbGxjb2xvcikuY2FsbChzLmRhc2hMaW5lLHIubGluZS5kYXNoLHIubGluZS53aWR0aCk7ZCh4LHQsciksdC5fY29udGV4dC5lZGl0cy5zaGFwZVBvc2l0aW9uJiZmdW5jdGlvbih0LGUscixvLHApe3ZhciBtLHkseCxiLF8sdyxrLEEsVCxNLFMsRSxDLEwseixPLEk9MTAsRD0xMCxQPVwicGl4ZWxcIj09PXIueHNpemVtb2RlLFI9XCJwaXhlbFwiPT09ci55c2l6ZW1vZGUsRj1cImxpbmVcIj09PXIudHlwZSxCPVwicGF0aFwiPT09ci50eXBlLE49bCh0LmxheW91dCxcInNoYXBlc1wiLHIpLGo9Ti5tb2RpZnlJdGVtLFY9YS5nZXRGcm9tSWQodCxyLnhyZWYpLFU9YS5nZXRGcm9tSWQodCxyLnlyZWYpLHE9Zi5nZXREYXRhVG9QaXhlbCh0LFYpLEg9Zi5nZXREYXRhVG9QaXhlbCh0LFUsITApLEc9Zi5nZXRQaXhlbFRvRGF0YSh0LFYpLFk9Zi5nZXRQaXhlbFRvRGF0YSh0LFUsITApLFc9Rj9mdW5jdGlvbigpe3ZhciB0PU1hdGgubWF4KHIubGluZS53aWR0aCwxMCksbj1wLmFwcGVuZChcImdcIikuYXR0cihcImRhdGEtaW5kZXhcIixvKTtuLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIixlLmF0dHIoXCJkXCIpKS5zdHlsZSh7Y3Vyc29yOlwibW92ZVwiLFwic3Ryb2tlLXdpZHRoXCI6dCxcInN0cm9rZS1vcGFjaXR5XCI6XCIwXCJ9KTt2YXIgaT17XCJmaWxsLW9wYWNpdHlcIjpcIjBcIn0sYT10LzI+MTA/dC8yOjEwO3JldHVybiBuLmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKHtcImRhdGEtbGluZS1wb2ludFwiOlwic3RhcnQtcG9pbnRcIixjeDpQP3Eoci54YW5jaG9yKStyLngwOnEoci54MCksY3k6Uj9IKHIueWFuY2hvciktci55MDpIKHIueTApLHI6YX0pLnN0eWxlKGkpLmNsYXNzZWQoXCJjdXJzb3ItZ3JhYlwiLCEwKSxuLmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKHtcImRhdGEtbGluZS1wb2ludFwiOlwiZW5kLXBvaW50XCIsY3g6UD9xKHIueGFuY2hvcikrci54MTpxKHIueDEpLGN5OlI/SChyLnlhbmNob3IpLXIueTE6SChyLnkxKSxyOmF9KS5zdHlsZShpKS5jbGFzc2VkKFwiY3Vyc29yLWdyYWJcIiwhMCksbn0oKTplLFg9e2VsZW1lbnQ6Vy5ub2RlKCksZ2Q6dCxwcmVwRm46ZnVuY3Rpb24obil7UCYmKF89cShyLnhhbmNob3IpKTtSJiYodz1IKHIueWFuY2hvcikpO1wicGF0aFwiPT09ci50eXBlP3o9ci5wYXRoOihtPVA/ci54MDpxKHIueDApLHk9Uj9yLnkwOkgoci55MCkseD1QP3IueDE6cShyLngxKSxiPVI/ci55MTpIKHIueTEpKTttPHg/KFQ9bSxDPVwieDBcIixNPXgsTD1cIngxXCIpOihUPXgsQz1cIngxXCIsTT1tLEw9XCJ4MFwiKTshUiYmeTxifHxSJiZ5PmI/KGs9eSxTPVwieTBcIixBPWIsRT1cInkxXCIpOihrPWIsUz1cInkxXCIsQT15LEU9XCJ5MFwiKTtaKG4pLEsocCxyKSxmdW5jdGlvbih0LGUscil7dmFyIG49ZS54cmVmLGk9ZS55cmVmLG89YS5nZXRGcm9tSWQocixuKSxsPWEuZ2V0RnJvbUlkKHIsaSksYz1cIlwiO1wicGFwZXJcIj09PW58fG8uYXV0b3JhbmdlfHwoYys9bik7XCJwYXBlclwiPT09aXx8bC5hdXRvcmFuZ2V8fChjKz1pKTtzLnNldENsaXBVcmwodCxjP1wiY2xpcFwiK3IuX2Z1bGxMYXlvdXQuX3VpZCtjOm51bGwscil9KGUscix0KSxYLm1vdmVGbj1cIm1vdmVcIj09PU8/JDpKfSxkb25lRm46ZnVuY3Rpb24oKXt1KGUpLFEocCksZChlLHQsciksbi5jYWxsKFwiX2d1aVJlbGF5b3V0XCIsdCxOLmdldFVwZGF0ZU9iaigpKX0sY2xpY2tGbjpmdW5jdGlvbigpe1EocCl9fTtmdW5jdGlvbiBaKHQpe2lmKEYpTz1cInBhdGhcIj09PXQudGFyZ2V0LnRhZ05hbWU/XCJtb3ZlXCI6XCJzdGFydC1wb2ludFwiPT09dC50YXJnZXQuYXR0cmlidXRlc1tcImRhdGEtbGluZS1wb2ludFwiXS52YWx1ZT9cInJlc2l6ZS1vdmVyLXN0YXJ0LXBvaW50XCI6XCJyZXNpemUtb3Zlci1lbmQtcG9pbnRcIjtlbHNle3ZhciByPVguZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIucmlnaHQtci5sZWZ0LGk9ci5ib3R0b20tci50b3AsYT10LmNsaWVudFgtci5sZWZ0LG89dC5jbGllbnRZLXIudG9wLHM9IUImJm4+SSYmaT5EJiYhdC5zaGlmdEtleT9jLmdldEN1cnNvcihhL24sMS1vL2kpOlwibW92ZVwiO3UoZSxzKSxPPXMuc3BsaXQoXCItXCIpWzBdfX1mdW5jdGlvbiAkKG4saSl7aWYoXCJwYXRoXCI9PT1yLnR5cGUpe3ZhciBhPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxvPWEscz1hO1A/aihcInhhbmNob3JcIixyLnhhbmNob3I9RyhfK24pKToobz1mdW5jdGlvbih0KXtyZXR1cm4gRyhxKHQpK24pfSxWJiZcImRhdGVcIj09PVYudHlwZSYmKG89Zi5lbmNvZGVEYXRlKG8pKSksUj9qKFwieWFuY2hvclwiLHIueWFuY2hvcj1ZKHcraSkpOihzPWZ1bmN0aW9uKHQpe3JldHVybiBZKEgodCkraSl9LFUmJlwiZGF0ZVwiPT09VS50eXBlJiYocz1mLmVuY29kZURhdGUocykpKSxqKFwicGF0aFwiLHIucGF0aD12KHosbyxzKSl9ZWxzZSBQP2ooXCJ4YW5jaG9yXCIsci54YW5jaG9yPUcoXytuKSk6KGooXCJ4MFwiLHIueDA9RyhtK24pKSxqKFwieDFcIixyLngxPUcoeCtuKSkpLFI/aihcInlhbmNob3JcIixyLnlhbmNob3I9WSh3K2kpKTooaihcInkwXCIsci55MD1ZKHkraSkpLGooXCJ5MVwiLHIueTE9WShiK2kpKSk7ZS5hdHRyKFwiZFwiLGcodCxyKSksSyhwLHIpfWZ1bmN0aW9uIEoobixpKXtpZihCKXt2YXIgYT1mdW5jdGlvbih0KXtyZXR1cm4gdH0sbz1hLHM9YTtQP2ooXCJ4YW5jaG9yXCIsci54YW5jaG9yPUcoXytuKSk6KG89ZnVuY3Rpb24odCl7cmV0dXJuIEcocSh0KStuKX0sViYmXCJkYXRlXCI9PT1WLnR5cGUmJihvPWYuZW5jb2RlRGF0ZShvKSkpLFI/aihcInlhbmNob3JcIixyLnlhbmNob3I9WSh3K2kpKToocz1mdW5jdGlvbih0KXtyZXR1cm4gWShIKHQpK2kpfSxVJiZcImRhdGVcIj09PVUudHlwZSYmKHM9Zi5lbmNvZGVEYXRlKHMpKSksaihcInBhdGhcIixyLnBhdGg9dih6LG8scykpfWVsc2UgaWYoRil7aWYoXCJyZXNpemUtb3Zlci1zdGFydC1wb2ludFwiPT09Tyl7dmFyIGw9bStuLGM9Uj95LWk6eStpO2ooXCJ4MFwiLHIueDA9UD9sOkcobCkpLGooXCJ5MFwiLHIueTA9Uj9jOlkoYykpfWVsc2UgaWYoXCJyZXNpemUtb3Zlci1lbmQtcG9pbnRcIj09PU8pe3ZhciB1PXgrbixoPVI/Yi1pOmIraTtqKFwieDFcIixyLngxPVA/dTpHKHUpKSxqKFwieTFcIixyLnkxPVI/aDpZKGgpKX19ZWxzZXt2YXIgZD1+Ty5pbmRleE9mKFwiblwiKT9rK2k6ayxOPX5PLmluZGV4T2YoXCJzXCIpP0EraTpBLFc9fk8uaW5kZXhPZihcIndcIik/VCtuOlQsWD1+Ty5pbmRleE9mKFwiZVwiKT9NK246TTt+Ty5pbmRleE9mKFwiblwiKSYmUiYmKGQ9ay1pKSx+Ty5pbmRleE9mKFwic1wiKSYmUiYmKE49QS1pKSwoIVImJk4tZD5EfHxSJiZkLU4+RCkmJihqKFMscltTXT1SP2Q6WShkKSksaihFLHJbRV09Uj9OOlkoTikpKSxYLVc+SSYmKGooQyxyW0NdPVA/VzpHKFcpKSxqKEwscltMXT1QP1g6RyhYKSkpfWUuYXR0cihcImRcIixnKHQscikpLEsocCxyKX1mdW5jdGlvbiBLKHQsZSl7KFB8fFIpJiZmdW5jdGlvbigpe3ZhciByPVwicGF0aFwiIT09ZS50eXBlLG49dC5zZWxlY3RBbGwoXCIudmlzdWFsLWN1ZVwiKS5kYXRhKFswXSk7bi5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuYXR0cih7ZmlsbDpcIiNmZmZcIixcImZpbGwtcnVsZVwiOlwiZXZlbm9kZFwiLHN0cm9rZTpcIiMwMDBcIixcInN0cm9rZS13aWR0aFwiOjF9KS5jbGFzc2VkKFwidmlzdWFsLWN1ZVwiLCEwKTt2YXIgYT1xKFA/ZS54YW5jaG9yOmkubWlkUmFuZ2Uocj9bZS54MCxlLngxXTpmLmV4dHJhY3RQYXRoQ29vcmRzKGUucGF0aCxoLnBhcmFtSXNYKSkpLG89SChSP2UueWFuY2hvcjppLm1pZFJhbmdlKHI/W2UueTAsZS55MV06Zi5leHRyYWN0UGF0aENvb3JkcyhlLnBhdGgsaC5wYXJhbUlzWSkpKTtpZihhPWYucm91bmRQb3NpdGlvbkZvclNoYXJwU3Ryb2tlUmVuZGVyaW5nKGEsMSksbz1mLnJvdW5kUG9zaXRpb25Gb3JTaGFycFN0cm9rZVJlbmRlcmluZyhvLDEpLFAmJlIpe3ZhciBzPVwiTVwiKyhhLTEtMSkrXCIsXCIrKG8tMS0xKStcImgtOHYyaDggdjhoMnYtOCBoOHYtMmgtOCB2LThoLTIgWlwiO24uYXR0cihcImRcIixzKX1lbHNlIGlmKFApe3ZhciBsPVwiTVwiKyhhLTEtMSkrXCIsXCIrKG8tOS0xKStcInYxOCBoMiB2LTE4IFpcIjtuLmF0dHIoXCJkXCIsbCl9ZWxzZXt2YXIgYz1cIk1cIisoYS05LTEpK1wiLFwiKyhvLTEtMSkrXCJoMTggdjIgaC0xOCBaXCI7bi5hdHRyKFwiZFwiLGMpfX0oKX1mdW5jdGlvbiBRKHQpe3Quc2VsZWN0QWxsKFwiLnZpc3VhbC1jdWVcIikucmVtb3ZlKCl9Yy5pbml0KFgpLFcubm9kZSgpLm9ubW91c2Vtb3ZlPVp9KHQseCxyLGUscCl9fWZ1bmN0aW9uIGQodCxlLHIpe3ZhciBuPShyLnhyZWYrci55cmVmKS5yZXBsYWNlKC9wYXBlci9nLFwiXCIpO3Muc2V0Q2xpcFVybCh0LG4/XCJjbGlwXCIrZS5fZnVsbExheW91dC5fdWlkK246bnVsbCxlKX1mdW5jdGlvbiBnKHQsZSl7dmFyIHIsbixvLHMsbCxjLHUscCxkPWUudHlwZSxnPWEuZ2V0RnJvbUlkKHQsZS54cmVmKSx2PWEuZ2V0RnJvbUlkKHQsZS55cmVmKSxtPXQuX2Z1bGxMYXlvdXQuX3NpemU7aWYoZz8ocj1mLnNoYXBlUG9zaXRpb25Ub1JhbmdlKGcpLG49ZnVuY3Rpb24odCl7cmV0dXJuIGcuX29mZnNldCtnLnIycChyKHQsITApKX0pOm49ZnVuY3Rpb24odCl7cmV0dXJuIG0ubCttLncqdH0sdj8obz1mLnNoYXBlUG9zaXRpb25Ub1JhbmdlKHYpLHM9ZnVuY3Rpb24odCl7cmV0dXJuIHYuX29mZnNldCt2LnIycChvKHQsITApKX0pOnM9ZnVuY3Rpb24odCl7cmV0dXJuIG0udCttLmgqKDEtdCl9LFwicGF0aFwiPT09ZClyZXR1cm4gZyYmXCJkYXRlXCI9PT1nLnR5cGUmJihuPWYuZGVjb2RlRGF0ZShuKSksdiYmXCJkYXRlXCI9PT12LnR5cGUmJihzPWYuZGVjb2RlRGF0ZShzKSksZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQucGF0aCxhPXQueHNpemVtb2RlLG89dC55c2l6ZW1vZGUscz10LnhhbmNob3IsbD10LnlhbmNob3I7cmV0dXJuIG4ucmVwbGFjZShoLnNlZ21lbnRSRSxmdW5jdGlvbih0KXt2YXIgbj0wLGM9dC5jaGFyQXQoMCksdT1oLnBhcmFtSXNYW2NdLGY9aC5wYXJhbUlzWVtjXSxwPWgubnVtUGFyYW1zW2NdLGQ9dC5zdWJzdHIoMSkucmVwbGFjZShoLnBhcmFtUkUsZnVuY3Rpb24odCl7cmV0dXJuIHVbbl0/dD1cInBpeGVsXCI9PT1hP2UocykrTnVtYmVyKHQpOmUodCk6ZltuXSYmKHQ9XCJwaXhlbFwiPT09bz9yKGwpLU51bWJlcih0KTpyKHQpKSwrK24+cCYmKHQ9XCJYXCIpLHR9KTtyZXR1cm4gbj5wJiYoZD1kLnJlcGxhY2UoL1tcXHMsXSpYLiovLFwiXCIpLGkubG9nKFwiSWdub3JpbmcgZXh0cmEgcGFyYW1zIGluIHNlZ21lbnQgXCIrdCkpLGMrZH0pfShlLG4scyk7aWYoXCJwaXhlbFwiPT09ZS54c2l6ZW1vZGUpe3ZhciB5PW4oZS54YW5jaG9yKTtsPXkrZS54MCxjPXkrZS54MX1lbHNlIGw9bihlLngwKSxjPW4oZS54MSk7aWYoXCJwaXhlbFwiPT09ZS55c2l6ZW1vZGUpe3ZhciB4PXMoZS55YW5jaG9yKTt1PXgtZS55MCxwPXgtZS55MX1lbHNlIHU9cyhlLnkwKSxwPXMoZS55MSk7aWYoXCJsaW5lXCI9PT1kKXJldHVyblwiTVwiK2wrXCIsXCIrdStcIkxcIitjK1wiLFwiK3A7aWYoXCJyZWN0XCI9PT1kKXJldHVyblwiTVwiK2wrXCIsXCIrdStcIkhcIitjK1wiVlwiK3ArXCJIXCIrbCtcIlpcIjt2YXIgYj0obCtjKS8yLF89KHUrcCkvMix3PU1hdGguYWJzKGItbCksaz1NYXRoLmFicyhfLXUpLEE9XCJBXCIrdytcIixcIitrLFQ9Yit3K1wiLFwiK187cmV0dXJuXCJNXCIrVCtBK1wiIDAgMSwxIFwiKyhiK1wiLFwiKyhfLWspKStBK1wiIDAgMCwxIFwiK1QrXCJaXCJ9ZnVuY3Rpb24gdih0LGUscil7cmV0dXJuIHQucmVwbGFjZShoLnNlZ21lbnRSRSxmdW5jdGlvbih0KXt2YXIgbj0wLGk9dC5jaGFyQXQoMCksYT1oLnBhcmFtSXNYW2ldLG89aC5wYXJhbUlzWVtpXSxzPWgubnVtUGFyYW1zW2ldO3JldHVybiBpK3Quc3Vic3RyKDEpLnJlcGxhY2UoaC5wYXJhbVJFLGZ1bmN0aW9uKHQpe3JldHVybiBuPj1zP3Q6KGFbbl0/dD1lKHQpOm9bbl0mJih0PXIodCkpLG4rKyx0KX0pfSl9ZS5leHBvcnRzPXtkcmF3OmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7Zm9yKHZhciByIGluIGUuX3NoYXBlVXBwZXJMYXllci5zZWxlY3RBbGwoXCJwYXRoXCIpLnJlbW92ZSgpLGUuX3NoYXBlTG93ZXJMYXllci5zZWxlY3RBbGwoXCJwYXRoXCIpLnJlbW92ZSgpLGUuX3Bsb3RzKXt2YXIgbj1lLl9wbG90c1tyXS5zaGFwZWxheWVyO24mJm4uc2VsZWN0QWxsKFwicGF0aFwiKS5yZW1vdmUoKX1mb3IodmFyIGk9MDtpPGUuc2hhcGVzLmxlbmd0aDtpKyspZS5zaGFwZXNbaV0udmlzaWJsZSYmcCh0LGkpfSxkcmF3T25lOnB9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvc2V0Y3Vyc29yXCI6NzIxLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9jb2xvclwiOjU3OCxcIi4uL2RyYWdlbGVtZW50XCI6NTk2LFwiLi4vZHJhd2luZ1wiOjU5OSxcIi4vY29uc3RhbnRzXCI6NjU2LFwiLi9oZWxwZXJzXCI6NjU5fV0sNjU5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vY29uc3RhbnRzXCIpLGk9dChcIi4uLy4uL2xpYlwiKTtyLnJhbmdlVG9TaGFwZVBvc2l0aW9uPWZ1bmN0aW9uKHQpe3JldHVyblwibG9nXCI9PT10LnR5cGU/dC5yMmQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSxyLnNoYXBlUG9zaXRpb25Ub1JhbmdlPWZ1bmN0aW9uKHQpe3JldHVyblwibG9nXCI9PT10LnR5cGU/dC5kMnI6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSxyLmRlY29kZURhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UmJihlPWUucmVwbGFjZShcIl9cIixcIiBcIikpLHQoZSl9fSxyLmVuY29kZURhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpLnJlcGxhY2UoXCIgXCIsXCJfXCIpfX0sci5leHRyYWN0UGF0aENvb3Jkcz1mdW5jdGlvbih0LGUpe3ZhciByPVtdO3JldHVybiB0Lm1hdGNoKG4uc2VnbWVudFJFKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBhPWVbdC5jaGFyQXQoMCldLmRyYXduO2lmKHZvaWQgMCE9PWEpe3ZhciBvPXQuc3Vic3RyKDEpLm1hdGNoKG4ucGFyYW1SRSk7IW98fG8ubGVuZ3RoPGF8fHIucHVzaChpLmNsZWFuTnVtYmVyKG9bYV0pKX19KSxyfSxyLmdldERhdGFUb1BpeGVsPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhPXQuX2Z1bGxMYXlvdXQuX3NpemU7aWYoZSl7dmFyIG89ci5zaGFwZVBvc2l0aW9uVG9SYW5nZShlKTtpPWZ1bmN0aW9uKHQpe3JldHVybiBlLl9vZmZzZXQrZS5yMnAobyh0LCEwKSl9LFwiZGF0ZVwiPT09ZS50eXBlJiYoaT1yLmRlY29kZURhdGUoaSkpfWVsc2UgaT1uP2Z1bmN0aW9uKHQpe3JldHVybiBhLnQrYS5oKigxLXQpfTpmdW5jdGlvbih0KXtyZXR1cm4gYS5sK2Eudyp0fTtyZXR1cm4gaX0sci5nZXRQaXhlbFRvRGF0YT1mdW5jdGlvbih0LGUsbil7dmFyIGksYT10Ll9mdWxsTGF5b3V0Ll9zaXplO2lmKGUpe3ZhciBvPXIucmFuZ2VUb1NoYXBlUG9zaXRpb24oZSk7aT1mdW5jdGlvbih0KXtyZXR1cm4gbyhlLnAycih0LWUuX29mZnNldCkpfX1lbHNlIGk9bj9mdW5jdGlvbih0KXtyZXR1cm4gMS0odC1hLnQpL2EuaH06ZnVuY3Rpb24odCl7cmV0dXJuKHQtYS5sKS9hLnd9O3JldHVybiBpfSxyLnJvdW5kUG9zaXRpb25Gb3JTaGFycFN0cm9rZVJlbmRlcmluZz1mdW5jdGlvbih0LGUpe3ZhciByPTE9PT1NYXRoLnJvdW5kKGUlMiksbj1NYXRoLnJvdW5kKHQpO3JldHVybiByP24rLjU6bn19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4vY29uc3RhbnRzXCI6NjU2fV0sNjYwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vZHJhd1wiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6XCJjb21wb25lbnRcIixuYW1lOlwic2hhcGVzXCIsbGF5b3V0QXR0cmlidXRlczp0KFwiLi9hdHRyaWJ1dGVzXCIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoXCIuL2RlZmF1bHRzXCIpLGluY2x1ZGVCYXNlUGxvdDp0KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2luY2x1ZGVfY29tcG9uZW50c1wiKShcInNoYXBlc1wiKSxjYWxjQXV0b3JhbmdlOnQoXCIuL2NhbGNfYXV0b3JhbmdlXCIpLGRyYXc6bi5kcmF3LGRyYXdPbmU6bi5kcmF3T25lfX0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2luY2x1ZGVfY29tcG9uZW50c1wiOjc1OSxcIi4vYXR0cmlidXRlc1wiOjY1NCxcIi4vY2FsY19hdXRvcmFuZ2VcIjo2NTUsXCIuL2RlZmF1bHRzXCI6NjU3LFwiLi9kcmF3XCI6NjU4fV0sNjYxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZERlZXBBbGwsbz10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbCxzPXQoXCIuLi8uLi9wbG90cy9hbmltYXRpb25fYXR0cmlidXRlc1wiKSxsPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLnRlbXBsYXRlZEFycmF5LGM9dChcIi4vY29uc3RhbnRzXCIpLHU9bChcInN0ZXBcIix7dmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfSxtZXRob2Q6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInJlc3R5bGVcIixcInJlbGF5b3V0XCIsXCJhbmltYXRlXCIsXCJ1cGRhdGVcIixcInNraXBcIl0sZGZsdDpcInJlc3R5bGVcIn0sYXJnczp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixmcmVlTGVuZ3RoOiEwLGl0ZW1zOlt7dmFsVHlwZTpcImFueVwifSx7dmFsVHlwZTpcImFueVwifSx7dmFsVHlwZTpcImFueVwifV19LGxhYmVsOnt2YWxUeXBlOlwic3RyaW5nXCJ9LHZhbHVlOnt2YWxUeXBlOlwic3RyaW5nXCJ9LGV4ZWN1dGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMH19KTtlLmV4cG9ydHM9byhsKFwic2xpZGVyXCIse3Zpc2libGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMH0sYWN0aXZlOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDowfSxzdGVwczp1LGxlbm1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImZyYWN0aW9uXCIsXCJwaXhlbHNcIl0sZGZsdDpcImZyYWN0aW9uXCJ9LGxlbjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MX0seDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjotMixtYXg6MyxkZmx0OjB9LHBhZDphKGkoe2VkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9KSx7fSx7dDp7ZGZsdDoyMH19KSx4YW5jaG9yOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhdXRvXCIsXCJsZWZ0XCIsXCJjZW50ZXJcIixcInJpZ2h0XCJdLGRmbHQ6XCJsZWZ0XCJ9LHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46LTIsbWF4OjMsZGZsdDowfSx5YW5jaG9yOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhdXRvXCIsXCJ0b3BcIixcIm1pZGRsZVwiLFwiYm90dG9tXCJdLGRmbHQ6XCJ0b3BcIn0sdHJhbnNpdGlvbjp7ZHVyYXRpb246e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjE1MH0sZWFzaW5nOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpzLnRyYW5zaXRpb24uZWFzaW5nLnZhbHVlcyxkZmx0OlwiY3ViaWMtaW4tb3V0XCJ9fSxjdXJyZW50dmFsdWU6e3Zpc2libGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMH0seGFuY2hvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibGVmdFwiLFwiY2VudGVyXCIsXCJyaWdodFwiXSxkZmx0OlwibGVmdFwifSxvZmZzZXQ6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjEwfSxwcmVmaXg6e3ZhbFR5cGU6XCJzdHJpbmdcIn0sc3VmZml4Ont2YWxUeXBlOlwic3RyaW5nXCJ9LGZvbnQ6bih7fSl9LGZvbnQ6bih7fSksYWN0aXZlYmdjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDpjLmdyaXBCZ0FjdGl2ZUNvbG9yfSxiZ2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmMucmFpbEJnQ29sb3J9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmMucmFpbEJvcmRlckNvbG9yfSxib3JkZXJ3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6Yy5yYWlsQm9yZGVyV2lkdGh9LHRpY2tsZW46e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OmMudGlja0xlbmd0aH0sdGlja2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmMudGlja0NvbG9yfSx0aWNrd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjF9LG1pbm9ydGlja2xlbjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6Yy5taW5vclRpY2tMZW5ndGh9fSksXCJhcnJheWRyYXdcIixcImZyb20tcm9vdFwiKX0se1wiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vcGxvdHMvYW5pbWF0aW9uX2F0dHJpYnV0ZXNcIjo3NDQsXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIjo3NzUsXCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlc1wiOjgwOSxcIi4vY29uc3RhbnRzXCI6NjYyfV0sNjYyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtuYW1lOlwic2xpZGVyc1wiLGNvbnRhaW5lckNsYXNzTmFtZTpcInNsaWRlci1jb250YWluZXJcIixncm91cENsYXNzTmFtZTpcInNsaWRlci1ncm91cFwiLGlucHV0QXJlYUNsYXNzOlwic2xpZGVyLWlucHV0LWFyZWFcIixyYWlsUmVjdENsYXNzOlwic2xpZGVyLXJhaWwtcmVjdFwiLHJhaWxUb3VjaFJlY3RDbGFzczpcInNsaWRlci1yYWlsLXRvdWNoLXJlY3RcIixncmlwUmVjdENsYXNzOlwic2xpZGVyLWdyaXAtcmVjdFwiLHRpY2tSZWN0Q2xhc3M6XCJzbGlkZXItdGljay1yZWN0XCIsaW5wdXRQcm94eUNsYXNzOlwic2xpZGVyLWlucHV0LXByb3h5XCIsbGFiZWxzQ2xhc3M6XCJzbGlkZXItbGFiZWxzXCIsbGFiZWxHcm91cENsYXNzOlwic2xpZGVyLWxhYmVsLWdyb3VwXCIsbGFiZWxDbGFzczpcInNsaWRlci1sYWJlbFwiLGN1cnJlbnRWYWx1ZUNsYXNzOlwic2xpZGVyLWN1cnJlbnQtdmFsdWVcIixyYWlsSGVpZ2h0OjUsbWVudUluZGV4QXR0ck5hbWU6XCJzbGlkZXItYWN0aXZlLWluZGV4XCIsYXV0b01hcmdpbklkUm9vdDpcInNsaWRlci1cIixtaW5XaWR0aDozMCxtaW5IZWlnaHQ6MzAsdGV4dFBhZFg6NDAsYXJyb3dPZmZzZXRYOjQscmFpbFJhZGl1czoyLHJhaWxXaWR0aDo1LHJhaWxCb3JkZXI6NCxyYWlsQm9yZGVyV2lkdGg6MSxyYWlsQm9yZGVyQ29sb3I6XCIjYmVjOGQ5XCIscmFpbEJnQ29sb3I6XCIjZjhmYWZjXCIscmFpbEluc2V0Ojgsc3RlcEluc2V0OjEwLGdyaXBSYWRpdXM6MTAsZ3JpcFdpZHRoOjIwLGdyaXBIZWlnaHQ6MjAsZ3JpcEJvcmRlcjoyMCxncmlwQm9yZGVyV2lkdGg6MSxncmlwQm9yZGVyQ29sb3I6XCIjYmVjOGQ5XCIsZ3JpcEJnQ29sb3I6XCIjZjZmOGZhXCIsZ3JpcEJnQWN0aXZlQ29sb3I6XCIjZGJkZGUwXCIsbGFiZWxQYWRkaW5nOjgsbGFiZWxPZmZzZXQ6MCx0aWNrV2lkdGg6MSx0aWNrQ29sb3I6XCIjMzMzXCIsdGlja09mZnNldDoyNSx0aWNrTGVuZ3RoOjcsbWlub3JUaWNrT2Zmc2V0OjI1LG1pbm9yVGlja0NvbG9yOlwiIzMzM1wiLG1pbm9yVGlja0xlbmd0aDo0LGN1cnJlbnRWYWx1ZVBhZGRpbmc6OCxjdXJyZW50VmFsdWVJbnNldDowfX0se31dLDY2MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCIpLGE9dChcIi4vYXR0cmlidXRlc1wiKSxvPXQoXCIuL2NvbnN0YW50c1wiKS5uYW1lLHM9YS5zdGVwcztmdW5jdGlvbiBsKHQsZSxyKXtmdW5jdGlvbiBvKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9Zm9yKHZhciBzPWkodCxlLHtuYW1lOlwic3RlcHNcIixoYW5kbGVJdGVtRGVmYXVsdHM6Y30pLGw9MCx1PTA7dTxzLmxlbmd0aDt1Kyspc1t1XS52aXNpYmxlJiZsKys7aWYobDwyP2UudmlzaWJsZT0hMTpvKFwidmlzaWJsZVwiKSl7ZS5fc3RlcENvdW50PWw7dmFyIGg9ZS5fdmlzaWJsZVN0ZXBzPW4uZmlsdGVyVmlzaWJsZShzKTsoc1tvKFwiYWN0aXZlXCIpXXx8e30pLnZpc2libGV8fChlLmFjdGl2ZT1oWzBdLl9pbmRleCksbyhcInhcIiksbyhcInlcIiksbi5ub25lT3JBbGwodCxlLFtcInhcIixcInlcIl0pLG8oXCJ4YW5jaG9yXCIpLG8oXCJ5YW5jaG9yXCIpLG8oXCJsZW5cIiksbyhcImxlbm1vZGVcIiksbyhcInBhZC50XCIpLG8oXCJwYWQuclwiKSxvKFwicGFkLmJcIiksbyhcInBhZC5sXCIpLG4uY29lcmNlRm9udChvLFwiZm9udFwiLHIuZm9udCksbyhcImN1cnJlbnR2YWx1ZS52aXNpYmxlXCIpJiYobyhcImN1cnJlbnR2YWx1ZS54YW5jaG9yXCIpLG8oXCJjdXJyZW50dmFsdWUucHJlZml4XCIpLG8oXCJjdXJyZW50dmFsdWUuc3VmZml4XCIpLG8oXCJjdXJyZW50dmFsdWUub2Zmc2V0XCIpLG4uY29lcmNlRm9udChvLFwiY3VycmVudHZhbHVlLmZvbnRcIixlLmZvbnQpKSxvKFwidHJhbnNpdGlvbi5kdXJhdGlvblwiKSxvKFwidHJhbnNpdGlvbi5lYXNpbmdcIiksbyhcImJnY29sb3JcIiksbyhcImFjdGl2ZWJnY29sb3JcIiksbyhcImJvcmRlcmNvbG9yXCIpLG8oXCJib3JkZXJ3aWR0aFwiKSxvKFwidGlja2xlblwiKSxvKFwidGlja3dpZHRoXCIpLG8oXCJ0aWNrY29sb3JcIiksbyhcIm1pbm9ydGlja2xlblwiKX19ZnVuY3Rpb24gYyh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1pZihcInNraXBcIj09PXQubWV0aG9kfHxBcnJheS5pc0FycmF5KHQuYXJncyk/cihcInZpc2libGVcIik6ZS52aXNpYmxlPSExKXtyKFwibWV0aG9kXCIpLHIoXCJhcmdzXCIpO3ZhciBpPXIoXCJsYWJlbFwiLFwic3RlcC1cIitlLl9pbmRleCk7cihcInZhbHVlXCIsaSkscihcImV4ZWN1dGVcIil9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2kodCxlLHtuYW1lOm8saGFuZGxlSXRlbURlZmF1bHRzOmx9KX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0c1wiOjc0NSxcIi4vYXR0cmlidXRlc1wiOjY2MSxcIi4vY29uc3RhbnRzXCI6NjYyfV0sNjY0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL3Bsb3RzL3Bsb3RzXCIpLGE9dChcIi4uL2NvbG9yXCIpLG89dChcIi4uL2RyYXdpbmdcIikscz10KFwiLi4vLi4vbGliXCIpLGw9dChcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiKSxjPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLmFycmF5RWRpdG9yLHU9dChcIi4vY29uc3RhbnRzXCIpLGg9dChcIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIiksZj1oLkxJTkVfU1BBQ0lORyxwPWguRlJPTV9UTCxkPWguRlJPTV9CUjtmdW5jdGlvbiBnKHQpe3JldHVybiB1LmF1dG9NYXJnaW5JZFJvb3QrdC5faW5kZXh9ZnVuY3Rpb24gdih0KXtyZXR1cm4gdC5faW5kZXh9ZnVuY3Rpb24gbSh0LGUpe3ZhciByPW8udGVzdGVyLnNlbGVjdEFsbChcImcuXCIrdS5sYWJlbEdyb3VwQ2xhc3MpLmRhdGEoZS5fdmlzaWJsZVN0ZXBzKTtyLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKHUubGFiZWxHcm91cENsYXNzLCEwKTt2YXIgYT0wLGM9MDtyLmVhY2goZnVuY3Rpb24odCl7dmFyIHI9YihuLnNlbGVjdCh0aGlzKSx7c3RlcDp0fSxlKS5ub2RlKCk7aWYocil7dmFyIGk9by5iQm94KHIpO2M9TWF0aC5tYXgoYyxpLmhlaWdodCksYT1NYXRoLm1heChhLGkud2lkdGgpfX0pLHIucmVtb3ZlKCk7dmFyIGg9ZS5fZGltcz17fTtoLmlucHV0QXJlYVdpZHRoPU1hdGgubWF4KHUucmFpbFdpZHRoLHUuZ3JpcEhlaWdodCk7dmFyIGY9dC5fZnVsbExheW91dC5fc2l6ZTtoLmx4PWYubCtmLncqZS54LGgubHk9Zi50K2YuaCooMS1lLnkpLFwiZnJhY3Rpb25cIj09PWUubGVubW9kZT9oLm91dGVyTGVuZ3RoPU1hdGgucm91bmQoZi53KmUubGVuKTpoLm91dGVyTGVuZ3RoPWUubGVuLGguaW5wdXRBcmVhU3RhcnQ9MCxoLmlucHV0QXJlYUxlbmd0aD1NYXRoLnJvdW5kKGgub3V0ZXJMZW5ndGgtZS5wYWQubC1lLnBhZC5yKTt2YXIgdj0oaC5pbnB1dEFyZWFMZW5ndGgtMip1LnN0ZXBJbnNldCkvKGUuX3N0ZXBDb3VudC0xKSxtPWErdS5sYWJlbFBhZGRpbmc7aWYoaC5sYWJlbFN0cmlkZT1NYXRoLm1heCgxLE1hdGguY2VpbChtL3YpKSxoLmxhYmVsSGVpZ2h0PWMsaC5jdXJyZW50VmFsdWVNYXhXaWR0aD0wLGguY3VycmVudFZhbHVlSGVpZ2h0PTAsaC5jdXJyZW50VmFsdWVUb3RhbEhlaWdodD0wLGguY3VycmVudFZhbHVlTWF4TGluZXM9MSxlLmN1cnJlbnR2YWx1ZS52aXNpYmxlKXt2YXIgeD1vLnRlc3Rlci5hcHBlbmQoXCJnXCIpO3IuZWFjaChmdW5jdGlvbih0KXt2YXIgcj15KHgsZSx0LmxhYmVsKSxuPXIubm9kZSgpJiZvLmJCb3goci5ub2RlKCkpfHx7d2lkdGg6MCxoZWlnaHQ6MH0saT1sLmxpbmVDb3VudChyKTtoLmN1cnJlbnRWYWx1ZU1heFdpZHRoPU1hdGgubWF4KGguY3VycmVudFZhbHVlTWF4V2lkdGgsTWF0aC5jZWlsKG4ud2lkdGgpKSxoLmN1cnJlbnRWYWx1ZUhlaWdodD1NYXRoLm1heChoLmN1cnJlbnRWYWx1ZUhlaWdodCxNYXRoLmNlaWwobi5oZWlnaHQpKSxoLmN1cnJlbnRWYWx1ZU1heExpbmVzPU1hdGgubWF4KGguY3VycmVudFZhbHVlTWF4TGluZXMsaSl9KSxoLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0PWguY3VycmVudFZhbHVlSGVpZ2h0K2UuY3VycmVudHZhbHVlLm9mZnNldCx4LnJlbW92ZSgpfWguaGVpZ2h0PWguY3VycmVudFZhbHVlVG90YWxIZWlnaHQrdS50aWNrT2Zmc2V0K2UudGlja2xlbit1LmxhYmVsT2Zmc2V0K2gubGFiZWxIZWlnaHQrZS5wYWQudCtlLnBhZC5iO3ZhciBfPVwibGVmdFwiO3MuaXNSaWdodEFuY2hvcihlKSYmKGgubHgtPWgub3V0ZXJMZW5ndGgsXz1cInJpZ2h0XCIpLHMuaXNDZW50ZXJBbmNob3IoZSkmJihoLmx4LT1oLm91dGVyTGVuZ3RoLzIsXz1cImNlbnRlclwiKTt2YXIgdz1cInRvcFwiO3MuaXNCb3R0b21BbmNob3IoZSkmJihoLmx5LT1oLmhlaWdodCx3PVwiYm90dG9tXCIpLHMuaXNNaWRkbGVBbmNob3IoZSkmJihoLmx5LT1oLmhlaWdodC8yLHc9XCJtaWRkbGVcIiksaC5vdXRlckxlbmd0aD1NYXRoLmNlaWwoaC5vdXRlckxlbmd0aCksaC5oZWlnaHQ9TWF0aC5jZWlsKGguaGVpZ2h0KSxoLmx4PU1hdGgucm91bmQoaC5seCksaC5seT1NYXRoLnJvdW5kKGgubHkpO3ZhciBrPXt5OmUueSxiOmguaGVpZ2h0KmRbd10sdDpoLmhlaWdodCpwW3ddfTtcImZyYWN0aW9uXCI9PT1lLmxlbm1vZGU/KGsubD0wLGsueGw9ZS54LWUubGVuKnBbX10say5yPTAsay54cj1lLngrZS5sZW4qZFtfXSk6KGsueD1lLngsay5sPWgub3V0ZXJMZW5ndGgqcFtfXSxrLnI9aC5vdXRlckxlbmd0aCpkW19dKSxpLmF1dG9NYXJnaW4odCxnKGUpLGspfWZ1bmN0aW9uIHkodCxlLHIpe2lmKGUuY3VycmVudHZhbHVlLnZpc2libGUpe3ZhciBuLGksYT1lLl9kaW1zO3N3aXRjaChlLmN1cnJlbnR2YWx1ZS54YW5jaG9yKXtjYXNlXCJyaWdodFwiOm49YS5pbnB1dEFyZWFMZW5ndGgtdS5jdXJyZW50VmFsdWVJbnNldC1hLmN1cnJlbnRWYWx1ZU1heFdpZHRoLGk9XCJsZWZ0XCI7YnJlYWs7Y2FzZVwiY2VudGVyXCI6bj0uNSphLmlucHV0QXJlYUxlbmd0aCxpPVwibWlkZGxlXCI7YnJlYWs7ZGVmYXVsdDpuPXUuY3VycmVudFZhbHVlSW5zZXQsaT1cImxlZnRcIn12YXIgYz1zLmVuc3VyZVNpbmdsZSh0LFwidGV4dFwiLHUubGFiZWxDbGFzcyxmdW5jdGlvbih0KXt0LmNsYXNzZWQoXCJ1c2VyLXNlbGVjdC1ub25lXCIsITApLmF0dHIoe1widGV4dC1hbmNob3JcIjppLFwiZGF0YS1ub3RleFwiOjF9KX0pLGg9ZS5jdXJyZW50dmFsdWUucHJlZml4P2UuY3VycmVudHZhbHVlLnByZWZpeDpcIlwiO2lmKFwic3RyaW5nXCI9PXR5cGVvZiByKWgrPXI7ZWxzZXt2YXIgcD1lLnN0ZXBzW2UuYWN0aXZlXS5sYWJlbCxkPWUuX2dkLl9mdWxsTGF5b3V0Lm1ldGE7ZCYmKHA9cy50ZW1wbGF0ZVN0cmluZyhwLHttZXRhOmR9KSksaCs9cH1lLmN1cnJlbnR2YWx1ZS5zdWZmaXgmJihoKz1lLmN1cnJlbnR2YWx1ZS5zdWZmaXgpLGMuY2FsbChvLmZvbnQsZS5jdXJyZW50dmFsdWUuZm9udCkudGV4dChoKS5jYWxsKGwuY29udmVydFRvVHNwYW5zLGUuX2dkKTt2YXIgZz1sLmxpbmVDb3VudChjKSx2PShhLmN1cnJlbnRWYWx1ZU1heExpbmVzKzEtZykqZS5jdXJyZW50dmFsdWUuZm9udC5zaXplKmY7cmV0dXJuIGwucG9zaXRpb25UZXh0KGMsbix2KSxjfX1mdW5jdGlvbiB4KHQsZSxyKXtzLmVuc3VyZVNpbmdsZSh0LFwicmVjdFwiLHUuZ3JpcFJlY3RDbGFzcyxmdW5jdGlvbihuKXtuLmNhbGwoQSxlLHQscikuc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpfSkuYXR0cih7d2lkdGg6dS5ncmlwV2lkdGgsaGVpZ2h0OnUuZ3JpcEhlaWdodCxyeDp1LmdyaXBSYWRpdXMscnk6dS5ncmlwUmFkaXVzfSkuY2FsbChhLnN0cm9rZSxyLmJvcmRlcmNvbG9yKS5jYWxsKGEuZmlsbCxyLmJnY29sb3IpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsci5ib3JkZXJ3aWR0aCtcInB4XCIpfWZ1bmN0aW9uIGIodCxlLHIpe3ZhciBuPXMuZW5zdXJlU2luZ2xlKHQsXCJ0ZXh0XCIsdS5sYWJlbENsYXNzLGZ1bmN0aW9uKHQpe3QuY2xhc3NlZChcInVzZXItc2VsZWN0LW5vbmVcIiwhMCkuYXR0cih7XCJ0ZXh0LWFuY2hvclwiOlwibWlkZGxlXCIsXCJkYXRhLW5vdGV4XCI6MX0pfSksaT1lLnN0ZXAubGFiZWwsYT1yLl9nZC5fZnVsbExheW91dC5tZXRhO3JldHVybiBhJiYoaT1zLnRlbXBsYXRlU3RyaW5nKGkse21ldGE6YX0pKSxuLmNhbGwoby5mb250LHIuZm9udCkudGV4dChpKS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHIuX2dkKSxufWZ1bmN0aW9uIF8odCxlKXt2YXIgcj1zLmVuc3VyZVNpbmdsZSh0LFwiZ1wiLHUubGFiZWxzQ2xhc3MpLGk9ZS5fZGltcyxhPXIuc2VsZWN0QWxsKFwiZy5cIit1LmxhYmVsR3JvdXBDbGFzcykuZGF0YShpLmxhYmVsU3RlcHMpO2EuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQodS5sYWJlbEdyb3VwQ2xhc3MsITApLGEuZXhpdCgpLnJlbW92ZSgpLGEuZWFjaChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtyLmNhbGwoYix0LGUpLG8uc2V0VHJhbnNsYXRlKHIsUyhlLHQuZnJhY3Rpb24pLHUudGlja09mZnNldCtlLnRpY2tsZW4rZS5mb250LnNpemUqZit1LmxhYmVsT2Zmc2V0K2kuY3VycmVudFZhbHVlVG90YWxIZWlnaHQpfSl9ZnVuY3Rpb24gdyh0LGUscixuLGkpe3ZhciBhPU1hdGgucm91bmQobiooci5fc3RlcENvdW50LTEpKSxvPXIuX3Zpc2libGVTdGVwc1thXS5faW5kZXg7byE9PXIuYWN0aXZlJiZrKHQsZSxyLG8sITAsaSl9ZnVuY3Rpb24gayh0LGUscixuLGEsbyl7dmFyIHM9ci5hY3RpdmU7ci5hY3RpdmU9bixjKHQubGF5b3V0LHUubmFtZSxyKS5hcHBseVVwZGF0ZShcImFjdGl2ZVwiLG4pO3ZhciBsPXIuc3RlcHNbci5hY3RpdmVdO2UuY2FsbChNLHIsbyksZS5jYWxsKHksciksdC5lbWl0KFwicGxvdGx5X3NsaWRlcmNoYW5nZVwiLHtzbGlkZXI6cixzdGVwOnIuc3RlcHNbci5hY3RpdmVdLGludGVyYWN0aW9uOmEscHJldmlvdXNBY3RpdmU6c30pLGwmJmwubWV0aG9kJiZhJiYoZS5fbmV4dE1ldGhvZD8oZS5fbmV4dE1ldGhvZC5zdGVwPWwsZS5fbmV4dE1ldGhvZC5kb0NhbGxiYWNrPWEsZS5fbmV4dE1ldGhvZC5kb1RyYW5zaXRpb249byk6KGUuX25leHRNZXRob2Q9e3N0ZXA6bCxkb0NhbGxiYWNrOmEsZG9UcmFuc2l0aW9uOm99LGUuX25leHRNZXRob2RSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3ZhciByPWUuX25leHRNZXRob2Quc3RlcDtyLm1ldGhvZCYmKHIuZXhlY3V0ZSYmaS5leGVjdXRlQVBJQ29tbWFuZCh0LHIubWV0aG9kLHIuYXJncyksZS5fbmV4dE1ldGhvZD1udWxsLGUuX25leHRNZXRob2RSYWY9bnVsbCl9KSkpfWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBpPXIubm9kZSgpLG89bi5zZWxlY3QoZSk7ZnVuY3Rpb24gcygpe3JldHVybiByLmRhdGEoKVswXX10Lm9uKFwibW91c2Vkb3duXCIsZnVuY3Rpb24oKXt2YXIgdD1zKCk7ZS5lbWl0KFwicGxvdGx5X3NsaWRlcnN0YXJ0XCIse3NsaWRlcjp0fSk7dmFyIGw9ci5zZWxlY3QoXCIuXCIrdS5ncmlwUmVjdENsYXNzKTtuLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLG4uZXZlbnQucHJldmVudERlZmF1bHQoKSxsLmNhbGwoYS5maWxsLHQuYWN0aXZlYmdjb2xvcik7dmFyIGM9RSh0LG4ubW91c2UoaSlbMF0pO3coZSxyLHQsYywhMCksdC5fZHJhZ2dpbmc9ITAsby5vbihcIm1vdXNlbW92ZVwiLGZ1bmN0aW9uKCl7dmFyIHQ9cygpLGE9RSh0LG4ubW91c2UoaSlbMF0pO3coZSxyLHQsYSwhMSl9KSxvLm9uKFwibW91c2V1cFwiLGZ1bmN0aW9uKCl7dmFyIHQ9cygpO3QuX2RyYWdnaW5nPSExLGwuY2FsbChhLmZpbGwsdC5iZ2NvbG9yKSxvLm9uKFwibW91c2V1cFwiLG51bGwpLG8ub24oXCJtb3VzZW1vdmVcIixudWxsKSxlLmVtaXQoXCJwbG90bHlfc2xpZGVyZW5kXCIse3NsaWRlcjp0LHN0ZXA6dC5zdGVwc1t0LmFjdGl2ZV19KX0pfSl9ZnVuY3Rpb24gVCh0LGUpe3ZhciByPXQuc2VsZWN0QWxsKFwicmVjdC5cIit1LnRpY2tSZWN0Q2xhc3MpLmRhdGEoZS5fdmlzaWJsZVN0ZXBzKSxpPWUuX2RpbXM7ci5lbnRlcigpLmFwcGVuZChcInJlY3RcIikuY2xhc3NlZCh1LnRpY2tSZWN0Q2xhc3MsITApLHIuZXhpdCgpLnJlbW92ZSgpLHIuYXR0cih7d2lkdGg6ZS50aWNrd2lkdGgrXCJweFwiLFwic2hhcGUtcmVuZGVyaW5nXCI6XCJjcmlzcEVkZ2VzXCJ9KSxyLmVhY2goZnVuY3Rpb24odCxyKXt2YXIgcz1yJWkubGFiZWxTdHJpZGU9PTAsbD1uLnNlbGVjdCh0aGlzKTtsLmF0dHIoe2hlaWdodDpzP2UudGlja2xlbjplLm1pbm9ydGlja2xlbn0pLmNhbGwoYS5maWxsLGUudGlja2NvbG9yKSxvLnNldFRyYW5zbGF0ZShsLFMoZSxyLyhlLl9zdGVwQ291bnQtMSkpLS41KmUudGlja3dpZHRoLChzP3UudGlja09mZnNldDp1Lm1pbm9yVGlja09mZnNldCkraS5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCl9KX1mdW5jdGlvbiBNKHQsZSxyKXtmb3IodmFyIG49dC5zZWxlY3QoXCJyZWN0LlwiK3UuZ3JpcFJlY3RDbGFzcyksaT0wLGE9MDthPGUuX3N0ZXBDb3VudDthKyspaWYoZS5fdmlzaWJsZVN0ZXBzW2FdLl9pbmRleD09PWUuYWN0aXZlKXtpPWE7YnJlYWt9dmFyIG89UyhlLGkvKGUuX3N0ZXBDb3VudC0xKSk7aWYoIWUuX2ludm9raW5nQ29tbWFuZCl7dmFyIHM9bjtyJiZlLnRyYW5zaXRpb24uZHVyYXRpb24+MCYmKHM9cy50cmFuc2l0aW9uKCkuZHVyYXRpb24oZS50cmFuc2l0aW9uLmR1cmF0aW9uKS5lYXNlKGUudHJhbnNpdGlvbi5lYXNpbmcpKSxzLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIisoby0uNSp1LmdyaXBXaWR0aCkrXCIsXCIrZS5fZGltcy5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCtcIilcIil9fWZ1bmN0aW9uIFModCxlKXt2YXIgcj10Ll9kaW1zO3JldHVybiByLmlucHV0QXJlYVN0YXJ0K3Uuc3RlcEluc2V0KyhyLmlucHV0QXJlYUxlbmd0aC0yKnUuc3RlcEluc2V0KSpNYXRoLm1pbigxLE1hdGgubWF4KDAsZSkpfWZ1bmN0aW9uIEUodCxlKXt2YXIgcj10Ll9kaW1zO3JldHVybiBNYXRoLm1pbigxLE1hdGgubWF4KDAsKGUtdS5zdGVwSW5zZXQtci5pbnB1dEFyZWFTdGFydCkvKHIuaW5wdXRBcmVhTGVuZ3RoLTIqdS5zdGVwSW5zZXQtMipyLmlucHV0QXJlYVN0YXJ0KSkpfWZ1bmN0aW9uIEModCxlLHIpe3ZhciBuPXIuX2RpbXMsaT1zLmVuc3VyZVNpbmdsZSh0LFwicmVjdFwiLHUucmFpbFRvdWNoUmVjdENsYXNzLGZ1bmN0aW9uKG4pe24uY2FsbChBLGUsdCxyKS5zdHlsZShcInBvaW50ZXItZXZlbnRzXCIsXCJhbGxcIil9KTtpLmF0dHIoe3dpZHRoOm4uaW5wdXRBcmVhTGVuZ3RoLGhlaWdodDpNYXRoLm1heChuLmlucHV0QXJlYVdpZHRoLHUudGlja09mZnNldCtyLnRpY2tsZW4rbi5sYWJlbEhlaWdodCl9KS5jYWxsKGEuZmlsbCxyLmJnY29sb3IpLmF0dHIoXCJvcGFjaXR5XCIsMCksby5zZXRUcmFuc2xhdGUoaSwwLG4uY3VycmVudFZhbHVlVG90YWxIZWlnaHQpfWZ1bmN0aW9uIEwodCxlKXt2YXIgcj1lLl9kaW1zLG49ci5pbnB1dEFyZWFMZW5ndGgtMip1LnJhaWxJbnNldCxpPXMuZW5zdXJlU2luZ2xlKHQsXCJyZWN0XCIsdS5yYWlsUmVjdENsYXNzKTtpLmF0dHIoe3dpZHRoOm4saGVpZ2h0OnUucmFpbFdpZHRoLHJ4OnUucmFpbFJhZGl1cyxyeTp1LnJhaWxSYWRpdXMsXCJzaGFwZS1yZW5kZXJpbmdcIjpcImNyaXNwRWRnZXNcIn0pLmNhbGwoYS5zdHJva2UsZS5ib3JkZXJjb2xvcikuY2FsbChhLmZpbGwsZS5iZ2NvbG9yKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLGUuYm9yZGVyd2lkdGgrXCJweFwiKSxvLnNldFRyYW5zbGF0ZShpLHUucmFpbEluc2V0LC41KihyLmlucHV0QXJlYVdpZHRoLXUucmFpbFdpZHRoKStyLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRbdS5uYW1lXSxuPVtdLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXTthLnZpc2libGUmJihhLl9nZD1lLG4ucHVzaChhKSl9cmV0dXJuIG59KGUsdCksYT1lLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKFwiZy5cIit1LmNvbnRhaW5lckNsYXNzTmFtZSkuZGF0YShyLmxlbmd0aD4wP1swXTpbXSk7ZnVuY3Rpb24gcyhlKXtlLl9jb21tYW5kT2JzZXJ2ZXImJihlLl9jb21tYW5kT2JzZXJ2ZXIucmVtb3ZlKCksZGVsZXRlIGUuX2NvbW1hbmRPYnNlcnZlciksaS5hdXRvTWFyZ2luKHQsZyhlKSl9aWYoYS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZCh1LmNvbnRhaW5lckNsYXNzTmFtZSwhMCkuc3R5bGUoXCJjdXJzb3JcIixcImV3LXJlc2l6ZVwiKSxhLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKFwiZy5cIit1Lmdyb3VwQ2xhc3NOYW1lKS5lYWNoKHMpfSkucmVtb3ZlKCksMCE9PXIubGVuZ3RoKXt2YXIgbD1hLnNlbGVjdEFsbChcImcuXCIrdS5ncm91cENsYXNzTmFtZSkuZGF0YShyLHYpO2wuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQodS5ncm91cENsYXNzTmFtZSwhMCksbC5leGl0KCkuZWFjaChzKS5yZW1vdmUoKTtmb3IodmFyIGM9MDtjPHIubGVuZ3RoO2MrKyl7dmFyIGg9cltjXTttKHQsaCl9bC5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpOyFmdW5jdGlvbih0KXt2YXIgZT10Ll9kaW1zO2UubGFiZWxTdGVwcz1bXTtmb3IodmFyIHI9dC5fc3RlcENvdW50LG49MDtuPHI7bis9ZS5sYWJlbFN0cmlkZSllLmxhYmVsU3RlcHMucHVzaCh7ZnJhY3Rpb246bi8oci0xKSxzdGVwOnQuX3Zpc2libGVTdGVwc1tuXX0pfShlKSxpLm1hbmFnZUNvbW1hbmRPYnNlcnZlcih0LGUsZS5fdmlzaWJsZVN0ZXBzLGZ1bmN0aW9uKGUpe3ZhciBuPXIuZGF0YSgpWzBdO24uYWN0aXZlIT09ZS5pbmRleCYmKG4uX2RyYWdnaW5nfHxrKHQscixuLGUuaW5kZXgsITEsITApKX0pLGZ1bmN0aW9uKHQsZSxyKXsoci5zdGVwc1tyLmFjdGl2ZV18fHt9KS52aXNpYmxlfHwoci5hY3RpdmU9ci5fdmlzaWJsZVN0ZXBzWzBdLl9pbmRleCk7ZS5jYWxsKHkscikuY2FsbChMLHIpLmNhbGwoXyxyKS5jYWxsKFQscikuY2FsbChDLHQscikuY2FsbCh4LHQscik7dmFyIG49ci5fZGltcztvLnNldFRyYW5zbGF0ZShlLG4ubHgrci5wYWQubCxuLmx5K3IucGFkLnQpLGUuY2FsbChNLHIsITEpLGUuY2FsbCh5LHIpfSh0LG4uc2VsZWN0KHRoaXMpLGUpfSl9fX0se1wiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiOjY3MyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiOjcyNSxcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi9wbG90cy9wbG90c1wiOjgxMCxcIi4uL2NvbG9yXCI6NTc4LFwiLi4vZHJhd2luZ1wiOjU5OSxcIi4vY29uc3RhbnRzXCI6NjYyLGQzOjE1NX1dLDY2NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2NvbnN0YW50c1wiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6XCJjb21wb25lbnRcIixuYW1lOm4ubmFtZSxsYXlvdXRBdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIiksZHJhdzp0KFwiLi9kcmF3XCIpfX0se1wiLi9hdHRyaWJ1dGVzXCI6NjYxLFwiLi9jb25zdGFudHNcIjo2NjIsXCIuL2RlZmF1bHRzXCI6NjYzLFwiLi9kcmF3XCI6NjY0fV0sNjY2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcImZhc3QtaXNudW1lcmljXCIpLGE9dChcIi4uLy4uL3Bsb3RzL3Bsb3RzXCIpLG89dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLHM9dChcIi4uLy4uL2xpYlwiKSxsPXQoXCIuLi9kcmF3aW5nXCIpLGM9dChcIi4uL2NvbG9yXCIpLHU9dChcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiKSxoPXQoXCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zXCIpO2UuZXhwb3J0cz17ZHJhdzpmdW5jdGlvbih0LGUscil7dmFyIHAsZD1yLnByb3BDb250YWluZXIsZz1yLnByb3BOYW1lLHY9ci5wbGFjZWhvbGRlcixtPXIudHJhY2VJbmRleCx5PXIuYXZvaWR8fHt9LHg9ci5hdHRyaWJ1dGVzLGI9ci50cmFuc2Zvcm0sXz1yLmNvbnRhaW5lckdyb3VwLHc9dC5fZnVsbExheW91dCxrPTEsQT0hMSxUPWQudGl0bGUsTT0oVCYmVC50ZXh0P1QudGV4dDpcIlwiKS50cmltKCksUz1UJiZULmZvbnQ/VC5mb250Ont9LEU9Uy5mYW1pbHksQz1TLnNpemUsTD1TLmNvbG9yO1widGl0bGUudGV4dFwiPT09Zz9wPVwidGl0bGVUZXh0XCI6LTEhPT1nLmluZGV4T2YoXCJheGlzXCIpP3A9XCJheGlzVGl0bGVUZXh0XCI6Zy5pbmRleE9mKCEwKSYmKHA9XCJjb2xvcmJhclRpdGxlVGV4dFwiKTt2YXIgej10Ll9jb250ZXh0LmVkaXRzW3BdO1wiXCI9PT1NP2s9MDpNLnJlcGxhY2UoZixcIiAlIFwiKT09PXYucmVwbGFjZShmLFwiICUgXCIpJiYoaz0uMixBPSEwLHp8fChNPVwiXCIpKTt3Lm1ldGEmJihNPXMudGVtcGxhdGVTdHJpbmcoTSx7bWV0YTp3Lm1ldGF9KSk7dmFyIE89TXx8ejtffHwoXz1zLmVuc3VyZVNpbmdsZSh3Ll9pbmZvbGF5ZXIsXCJnXCIsXCJnLVwiK2UpKTt2YXIgST1fLnNlbGVjdEFsbChcInRleHRcIikuZGF0YShPP1swXTpbXSk7aWYoSS5lbnRlcigpLmFwcGVuZChcInRleHRcIiksSS50ZXh0KE0pLmF0dHIoXCJjbGFzc1wiLGUpLEkuZXhpdCgpLnJlbW92ZSgpLCFPKXJldHVybiBfO2Z1bmN0aW9uIEQodCl7cy5zeW5jT3JBc3luYyhbUCxSXSx0KX1mdW5jdGlvbiBQKGUpe3ZhciByO3JldHVybiBiPyhyPVwiXCIsYi5yb3RhdGUmJihyKz1cInJvdGF0ZShcIitbYi5yb3RhdGUseC54LHgueV0rXCIpXCIpLGIub2Zmc2V0JiYocis9XCJ0cmFuc2xhdGUoMCwgXCIrYi5vZmZzZXQrXCIpXCIpKTpyPW51bGwsZS5hdHRyKFwidHJhbnNmb3JtXCIsciksZS5zdHlsZSh7XCJmb250LWZhbWlseVwiOkUsXCJmb250LXNpemVcIjpuLnJvdW5kKEMsMikrXCJweFwiLGZpbGw6Yy5yZ2IoTCksb3BhY2l0eTprKmMub3BhY2l0eShMKSxcImZvbnQtd2VpZ2h0XCI6YS5mb250V2VpZ2h0fSkuYXR0cih4KS5jYWxsKHUuY29udmVydFRvVHNwYW5zLHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX1mdW5jdGlvbiBSKHQpe3ZhciBlPW4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpO2lmKHkmJnkuc2VsZWN0aW9uJiZ5LnNpZGUmJk0pe2UuYXR0cihcInRyYW5zZm9ybVwiLG51bGwpO3ZhciByPTAsYT17bGVmdDpcInJpZ2h0XCIscmlnaHQ6XCJsZWZ0XCIsdG9wOlwiYm90dG9tXCIsYm90dG9tOlwidG9wXCJ9W3kuc2lkZV0sbz0tMSE9PVtcImxlZnRcIixcInRvcFwiXS5pbmRleE9mKHkuc2lkZSk/LTE6MSxjPWkoeS5wYWQpP3kucGFkOjIsdT1sLmJCb3goZS5ub2RlKCkpLGg9e2xlZnQ6MCx0b3A6MCxyaWdodDp3LndpZHRoLGJvdHRvbTp3LmhlaWdodH0sZj15Lm1heFNoaWZ0fHwoaFt5LnNpZGVdLXVbeS5zaWRlXSkqKFwibGVmdFwiPT09eS5zaWRlfHxcInRvcFwiPT09eS5zaWRlPy0xOjEpO2lmKGY8MClyPWY7ZWxzZXt2YXIgcD15Lm9mZnNldExlZnR8fDAsZD15Lm9mZnNldFRvcHx8MDt1LmxlZnQtPXAsdS5yaWdodC09cCx1LnRvcC09ZCx1LmJvdHRvbS09ZCx5LnNlbGVjdGlvbi5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bC5iQm94KHRoaXMpO3MuYkJveEludGVyc2VjdCh1LHQsYykmJihyPU1hdGgubWF4KHIsbyoodFt5LnNpZGVdLXVbYV0pK2MpKX0pLHI9TWF0aC5taW4oZixyKX1pZihyPjB8fGY8MCl7dmFyIGc9e2xlZnQ6Wy1yLDBdLHJpZ2h0OltyLDBdLHRvcDpbMCwtcl0sYm90dG9tOlswLHJdfVt5LnNpZGVdO2UuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK2crXCIpXCIpfX19SS5jYWxsKEQpLHomJihNP0kub24oXCIub3BhY2l0eVwiLG51bGwpOihrPTAsQT0hMCxJLnRleHQodikub24oXCJtb3VzZW92ZXIub3BhY2l0eVwiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKGguU0hPV19QTEFDRUhPTERFUikuc3R5bGUoXCJvcGFjaXR5XCIsMSl9KS5vbihcIm1vdXNlb3V0Lm9wYWNpdHlcIixmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihoLkhJREVfUExBQ0VIT0xERVIpLnN0eWxlKFwib3BhY2l0eVwiLDApfSkpLEkuY2FsbCh1Lm1ha2VFZGl0YWJsZSx7Z2Q6dH0pLm9uKFwiZWRpdFwiLGZ1bmN0aW9uKGUpe3ZvaWQgMCE9PW0/by5jYWxsKFwiX2d1aVJlc3R5bGVcIix0LGcsZSxtKTpvLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix0LGcsZSl9KS5vbihcImNhbmNlbFwiLGZ1bmN0aW9uKCl7dGhpcy50ZXh0KHRoaXMuYXR0cihcImRhdGEtdW5mb3JtYXR0ZWRcIikpLmNhbGwoRCl9KS5vbihcImlucHV0XCIsZnVuY3Rpb24odCl7dGhpcy50ZXh0KHR8fFwiIFwiKS5jYWxsKHUucG9zaXRpb25UZXh0LHgueCx4LnkpfSkpO3JldHVybiBJLmNsYXNzZWQoXCJqcy1wbGFjZWhvbGRlclwiLEEpLF99fTt2YXIgZj0vIFtYWV1bMC05XSogL30se1wiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9uc1wiOjY3NyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiOjcyNSxcIi4uLy4uL3Bsb3RzL3Bsb3RzXCI6ODEwLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9jb2xvclwiOjU3OCxcIi4uL2RyYXdpbmdcIjo1OTksZDM6MTU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw2Njc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uL2NvbG9yL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LG89dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGwscz10KFwiLi4vLi4vcGxvdHMvcGFkX2F0dHJpYnV0ZXNcIiksbD10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKS50ZW1wbGF0ZWRBcnJheSxjPWwoXCJidXR0b25cIix7dmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIn0sbWV0aG9kOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJyZXN0eWxlXCIsXCJyZWxheW91dFwiLFwiYW5pbWF0ZVwiLFwidXBkYXRlXCIsXCJza2lwXCJdLGRmbHQ6XCJyZXN0eWxlXCJ9LGFyZ3M6e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsZnJlZUxlbmd0aDohMCxpdGVtczpbe3ZhbFR5cGU6XCJhbnlcIn0se3ZhbFR5cGU6XCJhbnlcIn0se3ZhbFR5cGU6XCJhbnlcIn1dfSxsYWJlbDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIn0sZXhlY3V0ZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfX0pO2UuZXhwb3J0cz1vKGwoXCJ1cGRhdGVtZW51XCIse19hcnJheUF0dHJSZWdleHBzOlsvXnVwZGF0ZW1lbnVzXFxbKDB8WzEtOV1bMC05XSspXFxdXFwuYnV0dG9ucy9dLHZpc2libGU6e3ZhbFR5cGU6XCJib29sZWFuXCJ9LHR5cGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImRyb3Bkb3duXCIsXCJidXR0b25zXCJdLGRmbHQ6XCJkcm9wZG93blwifSxkaXJlY3Rpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImxlZnRcIixcInJpZ2h0XCIsXCJ1cFwiLFwiZG93blwiXSxkZmx0OlwiZG93blwifSxhY3RpdmU6e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsbWluOi0xLGRmbHQ6MH0sc2hvd2FjdGl2ZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfSxidXR0b25zOmMseDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjotMixtYXg6MyxkZmx0Oi0uMDV9LHhhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImF1dG9cIixcImxlZnRcIixcImNlbnRlclwiLFwicmlnaHRcIl0sZGZsdDpcInJpZ2h0XCJ9LHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46LTIsbWF4OjMsZGZsdDoxfSx5YW5jaG9yOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhdXRvXCIsXCJ0b3BcIixcIm1pZGRsZVwiLFwiYm90dG9tXCJdLGRmbHQ6XCJ0b3BcIn0scGFkOmEocyh7ZWRpdFR5cGU6XCJhcnJheWRyYXdcIn0pLHt9KSxmb250Om4oe30pLGJnY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwifSxib3JkZXJjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDppLmJvcmRlckxpbmV9LGJvcmRlcndpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOlwiYXJyYXlkcmF3XCJ9fSksXCJhcnJheWRyYXdcIixcImZyb20tcm9vdFwiKX0se1wiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCI6Nzc1LFwiLi4vLi4vcGxvdHMvcGFkX2F0dHJpYnV0ZXNcIjo4MDksXCIuLi9jb2xvci9hdHRyaWJ1dGVzXCI6NTc3fV0sNjY4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtuYW1lOlwidXBkYXRlbWVudXNcIixjb250YWluZXJDbGFzc05hbWU6XCJ1cGRhdGVtZW51LWNvbnRhaW5lclwiLGhlYWRlckdyb3VwQ2xhc3NOYW1lOlwidXBkYXRlbWVudS1oZWFkZXItZ3JvdXBcIixoZWFkZXJDbGFzc05hbWU6XCJ1cGRhdGVtZW51LWhlYWRlclwiLGhlYWRlckFycm93Q2xhc3NOYW1lOlwidXBkYXRlbWVudS1oZWFkZXItYXJyb3dcIixkcm9wZG93bkJ1dHRvbkdyb3VwQ2xhc3NOYW1lOlwidXBkYXRlbWVudS1kcm9wZG93bi1idXR0b24tZ3JvdXBcIixkcm9wZG93bkJ1dHRvbkNsYXNzTmFtZTpcInVwZGF0ZW1lbnUtZHJvcGRvd24tYnV0dG9uXCIsYnV0dG9uQ2xhc3NOYW1lOlwidXBkYXRlbWVudS1idXR0b25cIixpdGVtUmVjdENsYXNzTmFtZTpcInVwZGF0ZW1lbnUtaXRlbS1yZWN0XCIsaXRlbVRleHRDbGFzc05hbWU6XCJ1cGRhdGVtZW51LWl0ZW0tdGV4dFwiLG1lbnVJbmRleEF0dHJOYW1lOlwidXBkYXRlbWVudS1hY3RpdmUtaW5kZXhcIixhdXRvTWFyZ2luSWRSb290OlwidXBkYXRlbWVudS1cIixibGFua0hlYWRlck9wdHM6e2xhYmVsOlwiICBcIn0sbWluV2lkdGg6MzAsbWluSGVpZ2h0OjMwLHRleHRQYWRYOjI0LGFycm93UGFkWDoxNixyeDoyLHJ5OjIsdGV4dE9mZnNldFg6MTIsdGV4dE9mZnNldFk6MyxhcnJvd09mZnNldFg6NCxnYXBCdXR0b25IZWFkZXI6NSxnYXBCdXR0b246MixhY3RpdmVDb2xvcjpcIiNGNEZBRkZcIixob3ZlckNvbG9yOlwiI0Y0RkFGRlwiLGFycm93U3ltYm9sOntsZWZ0OlwiXFx1MjVjNFwiLHJpZ2h0OlwiXFx1MjViYVwiLHVwOlwiXFx1MjViMlwiLGRvd246XCJcXHUyNWJjXCJ9fX0se31dLDY2OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCIpLGE9dChcIi4vYXR0cmlidXRlc1wiKSxvPXQoXCIuL2NvbnN0YW50c1wiKS5uYW1lLHM9YS5idXR0b25zO2Z1bmN0aW9uIGwodCxlLHIpe2Z1bmN0aW9uIG8ocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX1vKFwidmlzaWJsZVwiLGkodCxlLHtuYW1lOlwiYnV0dG9uc1wiLGhhbmRsZUl0ZW1EZWZhdWx0czpjfSkubGVuZ3RoPjApJiYobyhcImFjdGl2ZVwiKSxvKFwiZGlyZWN0aW9uXCIpLG8oXCJ0eXBlXCIpLG8oXCJzaG93YWN0aXZlXCIpLG8oXCJ4XCIpLG8oXCJ5XCIpLG4ubm9uZU9yQWxsKHQsZSxbXCJ4XCIsXCJ5XCJdKSxvKFwieGFuY2hvclwiKSxvKFwieWFuY2hvclwiKSxvKFwicGFkLnRcIiksbyhcInBhZC5yXCIpLG8oXCJwYWQuYlwiKSxvKFwicGFkLmxcIiksbi5jb2VyY2VGb250KG8sXCJmb250XCIsci5mb250KSxvKFwiYmdjb2xvclwiLHIucGFwZXJfYmdjb2xvciksbyhcImJvcmRlcmNvbG9yXCIpLG8oXCJib3JkZXJ3aWR0aFwiKSl9ZnVuY3Rpb24gYyh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1yKFwidmlzaWJsZVwiLFwic2tpcFwiPT09dC5tZXRob2R8fEFycmF5LmlzQXJyYXkodC5hcmdzKSkmJihyKFwibWV0aG9kXCIpLHIoXCJhcmdzXCIpLHIoXCJsYWJlbFwiKSxyKFwiZXhlY3V0ZVwiKSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aSh0LGUse25hbWU6byxoYW5kbGVJdGVtRGVmYXVsdHM6bH0pfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCI6NzQ1LFwiLi9hdHRyaWJ1dGVzXCI6NjY3LFwiLi9jb25zdGFudHNcIjo2Njh9XSw2NzA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vcGxvdHMvcGxvdHNcIiksYT10KFwiLi4vY29sb3JcIiksbz10KFwiLi4vZHJhd2luZ1wiKSxzPXQoXCIuLi8uLi9saWJcIiksbD10KFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCIpLGM9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIikuYXJyYXlFZGl0b3IsdT10KFwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiKS5MSU5FX1NQQUNJTkcsaD10KFwiLi9jb25zdGFudHNcIiksZj10KFwiLi9zY3JvbGxib3hcIik7ZnVuY3Rpb24gcCh0KXtyZXR1cm4gdC5faW5kZXh9ZnVuY3Rpb24gZCh0LGUpe3JldHVybit0LmF0dHIoaC5tZW51SW5kZXhBdHRyTmFtZSk9PT1lLl9pbmRleH1mdW5jdGlvbiBnKHQsZSxyLG4saSxhLG8scyl7ZS5hY3RpdmU9byxjKHQubGF5b3V0LGgubmFtZSxlKS5hcHBseVVwZGF0ZShcImFjdGl2ZVwiLG8pLFwiYnV0dG9uc1wiPT09ZS50eXBlP20odCxuLG51bGwsbnVsbCxlKTpcImRyb3Bkb3duXCI9PT1lLnR5cGUmJihpLmF0dHIoaC5tZW51SW5kZXhBdHRyTmFtZSxcIi0xXCIpLHYodCxuLGksYSxlKSxzfHxtKHQsbixpLGEsZSkpfWZ1bmN0aW9uIHYodCxlLHIsbixpKXt2YXIgYT1zLmVuc3VyZVNpbmdsZShlLFwiZ1wiLGguaGVhZGVyQ2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3Quc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpfSksbD1pLl9kaW1zLGM9aS5hY3RpdmUsdT1pLmJ1dHRvbnNbY118fGguYmxhbmtIZWFkZXJPcHRzLGY9e3k6aS5wYWQudCx5UGFkOjAseDppLnBhZC5sLHhQYWQ6MCxpbmRleDowfSxwPXt3aWR0aDpsLmhlYWRlcldpZHRoLGhlaWdodDpsLmhlYWRlckhlaWdodH07YS5jYWxsKHksaSx1LHQpLmNhbGwoTSxpLGYscCkscy5lbnN1cmVTaW5nbGUoZSxcInRleHRcIixoLmhlYWRlckFycm93Q2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuY2xhc3NlZChcInVzZXItc2VsZWN0LW5vbmVcIiwhMCkuYXR0cihcInRleHQtYW5jaG9yXCIsXCJlbmRcIikuY2FsbChvLmZvbnQsaS5mb250KS50ZXh0KGguYXJyb3dTeW1ib2xbaS5kaXJlY3Rpb25dKX0pLmF0dHIoe3g6bC5oZWFkZXJXaWR0aC1oLmFycm93T2Zmc2V0WCtpLnBhZC5sLHk6bC5oZWFkZXJIZWlnaHQvMitoLnRleHRPZmZzZXRZK2kucGFkLnR9KSxhLm9uKFwiY2xpY2tcIixmdW5jdGlvbigpe3IuY2FsbChTLFN0cmluZyhkKHIsaSk/LTE6aS5faW5kZXgpKSxtKHQsZSxyLG4saSl9KSxhLm9uKFwibW91c2VvdmVyXCIsZnVuY3Rpb24oKXthLmNhbGwodyl9KSxhLm9uKFwibW91c2VvdXRcIixmdW5jdGlvbigpe2EuY2FsbChrLGkpfSksby5zZXRUcmFuc2xhdGUoZSxsLmx4LGwubHkpfWZ1bmN0aW9uIG0odCxlLHIsYSxvKXtyfHwocj1lKS5hdHRyKFwicG9pbnRlci1ldmVudHNcIixcImFsbFwiKTt2YXIgbD1mdW5jdGlvbih0KXtyZXR1cm4tMT09K3QuYXR0cihoLm1lbnVJbmRleEF0dHJOYW1lKX0ocikmJlwiYnV0dG9uc1wiIT09by50eXBlP1tdOm8uYnV0dG9ucyxjPVwiZHJvcGRvd25cIj09PW8udHlwZT9oLmRyb3Bkb3duQnV0dG9uQ2xhc3NOYW1lOmguYnV0dG9uQ2xhc3NOYW1lLHU9ci5zZWxlY3RBbGwoXCJnLlwiK2MpLmRhdGEocy5maWx0ZXJWaXNpYmxlKGwpKSxmPXUuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoYywhMCkscD11LmV4aXQoKTtcImRyb3Bkb3duXCI9PT1vLnR5cGU/KGYuYXR0cihcIm9wYWNpdHlcIixcIjBcIikudHJhbnNpdGlvbigpLmF0dHIoXCJvcGFjaXR5XCIsXCIxXCIpLHAudHJhbnNpdGlvbigpLmF0dHIoXCJvcGFjaXR5XCIsXCIwXCIpLnJlbW92ZSgpKTpwLnJlbW92ZSgpO3ZhciBkPTAsdj0wLG09by5fZGltcyx4PS0xIT09W1widXBcIixcImRvd25cIl0uaW5kZXhPZihvLmRpcmVjdGlvbik7XCJkcm9wZG93blwiPT09by50eXBlJiYoeD92PW0uaGVhZGVySGVpZ2h0K2guZ2FwQnV0dG9uSGVhZGVyOmQ9bS5oZWFkZXJXaWR0aCtoLmdhcEJ1dHRvbkhlYWRlciksXCJkcm9wZG93blwiPT09by50eXBlJiZcInVwXCI9PT1vLmRpcmVjdGlvbiYmKHY9LWguZ2FwQnV0dG9uSGVhZGVyK2guZ2FwQnV0dG9uLW0ub3BlbkhlaWdodCksXCJkcm9wZG93blwiPT09by50eXBlJiZcImxlZnRcIj09PW8uZGlyZWN0aW9uJiYoZD0taC5nYXBCdXR0b25IZWFkZXIraC5nYXBCdXR0b24tbS5vcGVuV2lkdGgpO3ZhciBiPXt4Om0ubHgrZCtvLnBhZC5sLHk6bS5seSt2K28ucGFkLnQseVBhZDpoLmdhcEJ1dHRvbix4UGFkOmguZ2FwQnV0dG9uLGluZGV4OjB9LEE9e2w6Yi54K28uYm9yZGVyd2lkdGgsdDpiLnkrby5ib3JkZXJ3aWR0aH07dS5lYWNoKGZ1bmN0aW9uKHMsbCl7dmFyIGM9bi5zZWxlY3QodGhpcyk7Yy5jYWxsKHksbyxzLHQpLmNhbGwoTSxvLGIpLGMub24oXCJjbGlja1wiLGZ1bmN0aW9uKCl7bi5ldmVudC5kZWZhdWx0UHJldmVudGVkfHwoZyh0LG8sMCxlLHIsYSxsKSxzLmV4ZWN1dGUmJmkuZXhlY3V0ZUFQSUNvbW1hbmQodCxzLm1ldGhvZCxzLmFyZ3MpLHQuZW1pdChcInBsb3RseV9idXR0b25jbGlja2VkXCIse21lbnU6byxidXR0b246cyxhY3RpdmU6by5hY3RpdmV9KSl9KSxjLm9uKFwibW91c2VvdmVyXCIsZnVuY3Rpb24oKXtjLmNhbGwodyl9KSxjLm9uKFwibW91c2VvdXRcIixmdW5jdGlvbigpe2MuY2FsbChrLG8pLHUuY2FsbChfLG8pfSl9KSx1LmNhbGwoXyxvKSx4PyhBLnc9TWF0aC5tYXgobS5vcGVuV2lkdGgsbS5oZWFkZXJXaWR0aCksQS5oPWIueS1BLnQpOihBLnc9Yi54LUEubCxBLmg9TWF0aC5tYXgobS5vcGVuSGVpZ2h0LG0uaGVhZGVySGVpZ2h0KSksQS5kaXJlY3Rpb249by5kaXJlY3Rpb24sYSYmKHUuc2l6ZSgpP2Z1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbyxzLGwsYz1pLmRpcmVjdGlvbix1PVwidXBcIj09PWN8fFwiZG93blwiPT09YyxmPWkuX2RpbXMscD1pLmFjdGl2ZTtpZih1KWZvcihzPTAsbD0wO2w8cDtsKyspcys9Zi5oZWlnaHRzW2xdK2guZ2FwQnV0dG9uO2Vsc2UgZm9yKG89MCxsPTA7bDxwO2wrKylvKz1mLndpZHRoc1tsXStoLmdhcEJ1dHRvbjtuLmVuYWJsZShhLG8scyksbi5oYmFyJiZuLmhiYXIuYXR0cihcIm9wYWNpdHlcIixcIjBcIikudHJhbnNpdGlvbigpLmF0dHIoXCJvcGFjaXR5XCIsXCIxXCIpO24udmJhciYmbi52YmFyLmF0dHIoXCJvcGFjaXR5XCIsXCIwXCIpLnRyYW5zaXRpb24oKS5hdHRyKFwib3BhY2l0eVwiLFwiMVwiKX0oMCwwLDAsYSxvLEEpOmZ1bmN0aW9uKHQpe3ZhciBlPSEhdC5oYmFyLHI9ISF0LnZiYXI7ZSYmdC5oYmFyLnRyYW5zaXRpb24oKS5hdHRyKFwib3BhY2l0eVwiLFwiMFwiKS5lYWNoKFwiZW5kXCIsZnVuY3Rpb24oKXtlPSExLHJ8fHQuZGlzYWJsZSgpfSk7ciYmdC52YmFyLnRyYW5zaXRpb24oKS5hdHRyKFwib3BhY2l0eVwiLFwiMFwiKS5lYWNoKFwiZW5kXCIsZnVuY3Rpb24oKXtyPSExLGV8fHQuZGlzYWJsZSgpfSl9KGEpKX1mdW5jdGlvbiB5KHQsZSxyLG4pe3QuY2FsbCh4LGUpLmNhbGwoYixlLHIsbil9ZnVuY3Rpb24geCh0LGUpe3MuZW5zdXJlU2luZ2xlKHQsXCJyZWN0XCIsaC5pdGVtUmVjdENsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIoe3J4Omgucngscnk6aC5yeSxcInNoYXBlLXJlbmRlcmluZ1wiOlwiY3Jpc3BFZGdlc1wifSl9KS5jYWxsKGEuc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwoYS5maWxsLGUuYmdjb2xvcikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixlLmJvcmRlcndpZHRoK1wicHhcIil9ZnVuY3Rpb24gYih0LGUscixuKXt2YXIgaT1zLmVuc3VyZVNpbmdsZSh0LFwidGV4dFwiLGguaXRlbVRleHRDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5jbGFzc2VkKFwidXNlci1zZWxlY3Qtbm9uZVwiLCEwKS5hdHRyKHtcInRleHQtYW5jaG9yXCI6XCJzdGFydFwiLFwiZGF0YS1ub3RleFwiOjF9KX0pLGE9ci5sYWJlbCxjPW4uX2Z1bGxMYXlvdXQubWV0YTtjJiYoYT1zLnRlbXBsYXRlU3RyaW5nKGEse21ldGE6Y30pKSxpLmNhbGwoby5mb250LGUuZm9udCkudGV4dChhKS5jYWxsKGwuY29udmVydFRvVHNwYW5zLG4pfWZ1bmN0aW9uIF8odCxlKXt2YXIgcj1lLmFjdGl2ZTt0LmVhY2goZnVuY3Rpb24odCxpKXt2YXIgbz1uLnNlbGVjdCh0aGlzKTtpPT09ciYmZS5zaG93YWN0aXZlJiZvLnNlbGVjdChcInJlY3QuXCIraC5pdGVtUmVjdENsYXNzTmFtZSkuY2FsbChhLmZpbGwsaC5hY3RpdmVDb2xvcil9KX1mdW5jdGlvbiB3KHQpe3Quc2VsZWN0KFwicmVjdC5cIitoLml0ZW1SZWN0Q2xhc3NOYW1lKS5jYWxsKGEuZmlsbCxoLmhvdmVyQ29sb3IpfWZ1bmN0aW9uIGsodCxlKXt0LnNlbGVjdChcInJlY3QuXCIraC5pdGVtUmVjdENsYXNzTmFtZSkuY2FsbChhLmZpbGwsZS5iZ2NvbG9yKX1mdW5jdGlvbiBBKHQsZSl7dmFyIHI9ZS5fZGltcz17d2lkdGgxOjAsaGVpZ2h0MTowLGhlaWdodHM6W10sd2lkdGhzOltdLHRvdGFsV2lkdGg6MCx0b3RhbEhlaWdodDowLG9wZW5XaWR0aDowLG9wZW5IZWlnaHQ6MCxseDowLGx5OjB9LGE9by50ZXN0ZXIuc2VsZWN0QWxsKFwiZy5cIitoLmRyb3Bkb3duQnV0dG9uQ2xhc3NOYW1lKS5kYXRhKHMuZmlsdGVyVmlzaWJsZShlLmJ1dHRvbnMpKTthLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKGguZHJvcGRvd25CdXR0b25DbGFzc05hbWUsITApO3ZhciBjPS0xIT09W1widXBcIixcImRvd25cIl0uaW5kZXhPZihlLmRpcmVjdGlvbik7YS5lYWNoKGZ1bmN0aW9uKGksYSl7dmFyIHM9bi5zZWxlY3QodGhpcyk7cy5jYWxsKHksZSxpLHQpO3ZhciBmPXMuc2VsZWN0KFwiLlwiK2guaXRlbVRleHRDbGFzc05hbWUpLHA9Zi5ub2RlKCkmJm8uYkJveChmLm5vZGUoKSkud2lkdGgsZD1NYXRoLm1heChwK2gudGV4dFBhZFgsaC5taW5XaWR0aCksZz1lLmZvbnQuc2l6ZSp1LHY9bC5saW5lQ291bnQoZiksbT1NYXRoLm1heChnKnYsaC5taW5IZWlnaHQpK2gudGV4dE9mZnNldFk7bT1NYXRoLmNlaWwobSksZD1NYXRoLmNlaWwoZCksci53aWR0aHNbYV09ZCxyLmhlaWdodHNbYV09bSxyLmhlaWdodDE9TWF0aC5tYXgoci5oZWlnaHQxLG0pLHIud2lkdGgxPU1hdGgubWF4KHIud2lkdGgxLGQpLGM/KHIudG90YWxXaWR0aD1NYXRoLm1heChyLnRvdGFsV2lkdGgsZCksci5vcGVuV2lkdGg9ci50b3RhbFdpZHRoLHIudG90YWxIZWlnaHQrPW0raC5nYXBCdXR0b24sci5vcGVuSGVpZ2h0Kz1tK2guZ2FwQnV0dG9uKTooci50b3RhbFdpZHRoKz1kK2guZ2FwQnV0dG9uLHIub3BlbldpZHRoKz1kK2guZ2FwQnV0dG9uLHIudG90YWxIZWlnaHQ9TWF0aC5tYXgoci50b3RhbEhlaWdodCxtKSxyLm9wZW5IZWlnaHQ9ci50b3RhbEhlaWdodCl9KSxjP3IudG90YWxIZWlnaHQtPWguZ2FwQnV0dG9uOnIudG90YWxXaWR0aC09aC5nYXBCdXR0b24sci5oZWFkZXJXaWR0aD1yLndpZHRoMStoLmFycm93UGFkWCxyLmhlYWRlckhlaWdodD1yLmhlaWdodDEsXCJkcm9wZG93blwiPT09ZS50eXBlJiYoYz8oci53aWR0aDErPWguYXJyb3dQYWRYLHIudG90YWxIZWlnaHQ9ci5oZWlnaHQxKTpyLnRvdGFsV2lkdGg9ci53aWR0aDEsci50b3RhbFdpZHRoKz1oLmFycm93UGFkWCksYS5yZW1vdmUoKTt2YXIgZj1yLnRvdGFsV2lkdGgrZS5wYWQubCtlLnBhZC5yLHA9ci50b3RhbEhlaWdodCtlLnBhZC50K2UucGFkLmIsZD10Ll9mdWxsTGF5b3V0Ll9zaXplO3IubHg9ZC5sK2QudyplLngsci5seT1kLnQrZC5oKigxLWUueSk7dmFyIGc9XCJsZWZ0XCI7cy5pc1JpZ2h0QW5jaG9yKGUpJiYoci5seC09ZixnPVwicmlnaHRcIikscy5pc0NlbnRlckFuY2hvcihlKSYmKHIubHgtPWYvMixnPVwiY2VudGVyXCIpO3ZhciB2PVwidG9wXCI7cy5pc0JvdHRvbUFuY2hvcihlKSYmKHIubHktPXAsdj1cImJvdHRvbVwiKSxzLmlzTWlkZGxlQW5jaG9yKGUpJiYoci5seS09cC8yLHY9XCJtaWRkbGVcIiksci50b3RhbFdpZHRoPU1hdGguY2VpbChyLnRvdGFsV2lkdGgpLHIudG90YWxIZWlnaHQ9TWF0aC5jZWlsKHIudG90YWxIZWlnaHQpLHIubHg9TWF0aC5yb3VuZChyLmx4KSxyLmx5PU1hdGgucm91bmQoci5seSksaS5hdXRvTWFyZ2luKHQsVChlKSx7eDplLngseTplLnksbDpmKih7cmlnaHQ6MSxjZW50ZXI6LjV9W2ddfHwwKSxyOmYqKHtsZWZ0OjEsY2VudGVyOi41fVtnXXx8MCksYjpwKih7dG9wOjEsbWlkZGxlOi41fVt2XXx8MCksdDpwKih7Ym90dG9tOjEsbWlkZGxlOi41fVt2XXx8MCl9KX1mdW5jdGlvbiBUKHQpe3JldHVybiBoLmF1dG9NYXJnaW5JZFJvb3QrdC5faW5kZXh9ZnVuY3Rpb24gTSh0LGUscixuKXtuPW58fHt9O3ZhciBpPXQuc2VsZWN0KFwiLlwiK2guaXRlbVJlY3RDbGFzc05hbWUpLGE9dC5zZWxlY3QoXCIuXCIraC5pdGVtVGV4dENsYXNzTmFtZSkscz1lLmJvcmRlcndpZHRoLGM9ci5pbmRleCxmPWUuX2RpbXM7by5zZXRUcmFuc2xhdGUodCxzK3IueCxzK3IueSk7dmFyIHA9LTEhPT1bXCJ1cFwiLFwiZG93blwiXS5pbmRleE9mKGUuZGlyZWN0aW9uKSxkPW4uaGVpZ2h0fHwocD9mLmhlaWdodHNbY106Zi5oZWlnaHQxKTtpLmF0dHIoe3g6MCx5OjAsd2lkdGg6bi53aWR0aHx8KHA/Zi53aWR0aDE6Zi53aWR0aHNbY10pLGhlaWdodDpkfSk7dmFyIGc9ZS5mb250LnNpemUqdSx2PShsLmxpbmVDb3VudChhKS0xKSpnLzI7bC5wb3NpdGlvblRleHQoYSxoLnRleHRPZmZzZXRYLGQvMi12K2gudGV4dE9mZnNldFkpLHA/ci55Kz1mLmhlaWdodHNbY10rci55UGFkOnIueCs9Zi53aWR0aHNbY10rci54UGFkLHIuaW5kZXgrK31mdW5jdGlvbiBTKHQsZSl7dC5hdHRyKGgubWVudUluZGV4QXR0ck5hbWUsZXx8XCItMVwiKS5zZWxlY3RBbGwoXCJnLlwiK2guZHJvcGRvd25CdXR0b25DbGFzc05hbWUpLnJlbW92ZSgpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9cy5maWx0ZXJWaXNpYmxlKGVbaC5uYW1lXSk7ZnVuY3Rpb24gYShlKXtpLmF1dG9NYXJnaW4odCxUKGUpKX12YXIgbz1lLl9tZW51bGF5ZXIuc2VsZWN0QWxsKFwiZy5cIitoLmNvbnRhaW5lckNsYXNzTmFtZSkuZGF0YShyLmxlbmd0aD4wP1swXTpbXSk7aWYoby5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChoLmNvbnRhaW5lckNsYXNzTmFtZSwhMCkuc3R5bGUoXCJjdXJzb3JcIixcInBvaW50ZXJcIiksby5leGl0KCkuZWFjaChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbChcImcuXCIraC5oZWFkZXJHcm91cENsYXNzTmFtZSkuZWFjaChhKX0pLnJlbW92ZSgpLDAhPT1yLmxlbmd0aCl7dmFyIGw9by5zZWxlY3RBbGwoXCJnLlwiK2guaGVhZGVyR3JvdXBDbGFzc05hbWUpLmRhdGEocixwKTtsLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKGguaGVhZGVyR3JvdXBDbGFzc05hbWUsITApO2Zvcih2YXIgYz1zLmVuc3VyZVNpbmdsZShvLFwiZ1wiLGguZHJvcGRvd25CdXR0b25Hcm91cENsYXNzTmFtZSxmdW5jdGlvbih0KXt0LnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixcImFsbFwiKX0pLHU9MDt1PHIubGVuZ3RoO3UrKyl7dmFyIHk9clt1XTtBKHQseSl9dmFyIHg9XCJ1cGRhdGVtZW51c1wiK2UuX3VpZCxiPW5ldyBmKHQsYyx4KTtsLmVudGVyKCkuc2l6ZSgpJiYoYy5ub2RlKCkucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChjLm5vZGUoKSksYy5jYWxsKFMpKSxsLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKHQpe2MuY2FsbChTKSxhKHQpfSkucmVtb3ZlKCksbC5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGE9XCJkcm9wZG93blwiPT09ZS50eXBlP2M6bnVsbDtpLm1hbmFnZUNvbW1hbmRPYnNlcnZlcih0LGUsZS5idXR0b25zLGZ1bmN0aW9uKG4pe2codCxlLGUuYnV0dG9uc1tuLmluZGV4XSxyLGEsYixuLmluZGV4LCEwKX0pLFwiZHJvcGRvd25cIj09PWUudHlwZT8odih0LHIsYyxiLGUpLGQoYyxlKSYmbSh0LHIsYyxiLGUpKTptKHQscixudWxsLG51bGwsZSl9KX19fSx7XCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCI6NjczLFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCI6NzI1LFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3Bsb3RzL3Bsb3RzXCI6ODEwLFwiLi4vY29sb3JcIjo1NzgsXCIuLi9kcmF3aW5nXCI6NTk5LFwiLi9jb25zdGFudHNcIjo2NjgsXCIuL3Njcm9sbGJveFwiOjY3MixkMzoxNTV9XSw2NzE6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bNjY1XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtcIi4vYXR0cmlidXRlc1wiOjY2NyxcIi4vY29uc3RhbnRzXCI6NjY4LFwiLi9kZWZhdWx0c1wiOjY2OSxcIi4vZHJhd1wiOjY3MCxkdXA6NjY1fV0sNjcyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXM7dmFyIG49dChcImQzXCIpLGk9dChcIi4uL2NvbG9yXCIpLGE9dChcIi4uL2RyYXdpbmdcIiksbz10KFwiLi4vLi4vbGliXCIpO2Z1bmN0aW9uIHModCxlLHIpe3RoaXMuZ2Q9dCx0aGlzLmNvbnRhaW5lcj1lLHRoaXMuaWQ9cix0aGlzLnBvc2l0aW9uPW51bGwsdGhpcy50cmFuc2xhdGVYPW51bGwsdGhpcy50cmFuc2xhdGVZPW51bGwsdGhpcy5oYmFyPW51bGwsdGhpcy52YmFyPW51bGwsdGhpcy5iZz10aGlzLmNvbnRhaW5lci5zZWxlY3RBbGwoXCJyZWN0LnNjcm9sbGJveC1iZ1wiKS5kYXRhKFswXSksdGhpcy5iZy5leGl0KCkub24oXCIuZHJhZ1wiLG51bGwpLm9uKFwid2hlZWxcIixudWxsKS5yZW1vdmUoKSx0aGlzLmJnLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKS5jbGFzc2VkKFwic2Nyb2xsYm94LWJnXCIsITApLnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixcImFsbFwiKS5hdHRyKHtvcGFjaXR5OjAseDowLHk6MCx3aWR0aDowLGhlaWdodDowfSl9cy5iYXJXaWR0aD0yLHMuYmFyTGVuZ3RoPTIwLHMuYmFyUmFkaXVzPTIscy5iYXJQYWQ9MSxzLmJhckNvbG9yPVwiIzgwOEJBNFwiLHMucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbih0LGUscil7dmFyIG89dGhpcy5nZC5fZnVsbExheW91dCxsPW8ud2lkdGgsYz1vLmhlaWdodDt0aGlzLnBvc2l0aW9uPXQ7dmFyIHUsaCxmLHAsZD10aGlzLnBvc2l0aW9uLmwsZz10aGlzLnBvc2l0aW9uLncsdj10aGlzLnBvc2l0aW9uLnQsbT10aGlzLnBvc2l0aW9uLmgseT10aGlzLnBvc2l0aW9uLmRpcmVjdGlvbix4PVwiZG93blwiPT09eSxiPVwibGVmdFwiPT09eSxfPVwidXBcIj09PXksdz1nLGs9bTt4fHxifHxcInJpZ2h0XCI9PT15fHxffHwodGhpcy5wb3NpdGlvbi5kaXJlY3Rpb249XCJkb3duXCIseD0hMCkseHx8Xz8oaD0odT1kKSt3LHg/KGY9dixrPShwPU1hdGgubWluKGYrayxjKSktZik6az0ocD12K2spLShmPU1hdGgubWF4KHAtaywwKSkpOihwPShmPXYpK2ssYj93PShoPWQrdyktKHU9TWF0aC5tYXgoaC13LDApKToodT1kLHc9KGg9TWF0aC5taW4odSt3LGwpKS11KSksdGhpcy5fYm94PXtsOnUsdDpmLHc6dyxoOmt9O3ZhciBBPWc+dyxUPXMuYmFyTGVuZ3RoKzIqcy5iYXJQYWQsTT1zLmJhcldpZHRoKzIqcy5iYXJQYWQsUz1kLEU9dittO0UrTT5jJiYoRT1jLU0pO3ZhciBDPXRoaXMuY29udGFpbmVyLnNlbGVjdEFsbChcInJlY3Quc2Nyb2xsYmFyLWhvcml6b250YWxcIikuZGF0YShBP1swXTpbXSk7Qy5leGl0KCkub24oXCIuZHJhZ1wiLG51bGwpLnJlbW92ZSgpLEMuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpLmNsYXNzZWQoXCJzY3JvbGxiYXItaG9yaXpvbnRhbFwiLCEwKS5jYWxsKGkuZmlsbCxzLmJhckNvbG9yKSxBPyh0aGlzLmhiYXI9Qy5hdHRyKHtyeDpzLmJhclJhZGl1cyxyeTpzLmJhclJhZGl1cyx4OlMseTpFLHdpZHRoOlQsaGVpZ2h0Ok19KSx0aGlzLl9oYmFyWE1pbj1TK1QvMix0aGlzLl9oYmFyVHJhbnNsYXRlTWF4PXctVCk6KGRlbGV0ZSB0aGlzLmhiYXIsZGVsZXRlIHRoaXMuX2hiYXJYTWluLGRlbGV0ZSB0aGlzLl9oYmFyVHJhbnNsYXRlTWF4KTt2YXIgTD1tPmssej1zLmJhcldpZHRoKzIqcy5iYXJQYWQsTz1zLmJhckxlbmd0aCsyKnMuYmFyUGFkLEk9ZCtnLEQ9djtJK3o+bCYmKEk9bC16KTt2YXIgUD10aGlzLmNvbnRhaW5lci5zZWxlY3RBbGwoXCJyZWN0LnNjcm9sbGJhci12ZXJ0aWNhbFwiKS5kYXRhKEw/WzBdOltdKTtQLmV4aXQoKS5vbihcIi5kcmFnXCIsbnVsbCkucmVtb3ZlKCksUC5lbnRlcigpLmFwcGVuZChcInJlY3RcIikuY2xhc3NlZChcInNjcm9sbGJhci12ZXJ0aWNhbFwiLCEwKS5jYWxsKGkuZmlsbCxzLmJhckNvbG9yKSxMPyh0aGlzLnZiYXI9UC5hdHRyKHtyeDpzLmJhclJhZGl1cyxyeTpzLmJhclJhZGl1cyx4OkkseTpELHdpZHRoOnosaGVpZ2h0Ok99KSx0aGlzLl92YmFyWU1pbj1EK08vMix0aGlzLl92YmFyVHJhbnNsYXRlTWF4PWstTyk6KGRlbGV0ZSB0aGlzLnZiYXIsZGVsZXRlIHRoaXMuX3ZiYXJZTWluLGRlbGV0ZSB0aGlzLl92YmFyVHJhbnNsYXRlTWF4KTt2YXIgUj10aGlzLmlkLEY9dS0uNSxCPUw/aCt6Ky41OmgrLjUsTj1mLS41LGo9QT9wK00rLjU6cCsuNSxWPW8uX3RvcGRlZnMuc2VsZWN0QWxsKFwiI1wiK1IpLmRhdGEoQXx8TD9bMF06W10pO2lmKFYuZXhpdCgpLnJlbW92ZSgpLFYuZW50ZXIoKS5hcHBlbmQoXCJjbGlwUGF0aFwiKS5hdHRyKFwiaWRcIixSKS5hcHBlbmQoXCJyZWN0XCIpLEF8fEw/KHRoaXMuX2NsaXBSZWN0PVYuc2VsZWN0KFwicmVjdFwiKS5hdHRyKHt4Ok1hdGguZmxvb3IoRikseTpNYXRoLmZsb29yKE4pLHdpZHRoOk1hdGguY2VpbChCKS1NYXRoLmZsb29yKEYpLGhlaWdodDpNYXRoLmNlaWwoaiktTWF0aC5mbG9vcihOKX0pLHRoaXMuY29udGFpbmVyLmNhbGwoYS5zZXRDbGlwVXJsLFIsdGhpcy5nZCksdGhpcy5iZy5hdHRyKHt4OmQseTp2LHdpZHRoOmcsaGVpZ2h0Om19KSk6KHRoaXMuYmcuYXR0cih7d2lkdGg6MCxoZWlnaHQ6MH0pLHRoaXMuY29udGFpbmVyLm9uKFwid2hlZWxcIixudWxsKS5vbihcIi5kcmFnXCIsbnVsbCkuY2FsbChhLnNldENsaXBVcmwsbnVsbCksZGVsZXRlIHRoaXMuX2NsaXBSZWN0KSxBfHxMKXt2YXIgVT1uLmJlaGF2aW9yLmRyYWcoKS5vbihcImRyYWdzdGFydFwiLGZ1bmN0aW9uKCl7bi5ldmVudC5zb3VyY2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSkub24oXCJkcmFnXCIsdGhpcy5fb25Cb3hEcmFnLmJpbmQodGhpcykpO3RoaXMuY29udGFpbmVyLm9uKFwid2hlZWxcIixudWxsKS5vbihcIndoZWVsXCIsdGhpcy5fb25Cb3hXaGVlbC5iaW5kKHRoaXMpKS5vbihcIi5kcmFnXCIsbnVsbCkuY2FsbChVKTt2YXIgcT1uLmJlaGF2aW9yLmRyYWcoKS5vbihcImRyYWdzdGFydFwiLGZ1bmN0aW9uKCl7bi5ldmVudC5zb3VyY2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpLG4uZXZlbnQuc291cmNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9KS5vbihcImRyYWdcIix0aGlzLl9vbkJhckRyYWcuYmluZCh0aGlzKSk7QSYmdGhpcy5oYmFyLm9uKFwiLmRyYWdcIixudWxsKS5jYWxsKHEpLEwmJnRoaXMudmJhci5vbihcIi5kcmFnXCIsbnVsbCkuY2FsbChxKX10aGlzLnNldFRyYW5zbGF0ZShlLHIpfSxzLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7KHRoaXMuaGJhcnx8dGhpcy52YmFyKSYmKHRoaXMuYmcuYXR0cih7d2lkdGg6MCxoZWlnaHQ6MH0pLHRoaXMuY29udGFpbmVyLm9uKFwid2hlZWxcIixudWxsKS5vbihcIi5kcmFnXCIsbnVsbCkuY2FsbChhLnNldENsaXBVcmwsbnVsbCksZGVsZXRlIHRoaXMuX2NsaXBSZWN0KSx0aGlzLmhiYXImJih0aGlzLmhiYXIub24oXCIuZHJhZ1wiLG51bGwpLHRoaXMuaGJhci5yZW1vdmUoKSxkZWxldGUgdGhpcy5oYmFyLGRlbGV0ZSB0aGlzLl9oYmFyWE1pbixkZWxldGUgdGhpcy5faGJhclRyYW5zbGF0ZU1heCksdGhpcy52YmFyJiYodGhpcy52YmFyLm9uKFwiLmRyYWdcIixudWxsKSx0aGlzLnZiYXIucmVtb3ZlKCksZGVsZXRlIHRoaXMudmJhcixkZWxldGUgdGhpcy5fdmJhcllNaW4sZGVsZXRlIHRoaXMuX3ZiYXJUcmFuc2xhdGVNYXgpfSxzLnByb3RvdHlwZS5fb25Cb3hEcmFnPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50cmFuc2xhdGVYLGU9dGhpcy50cmFuc2xhdGVZO3RoaXMuaGJhciYmKHQtPW4uZXZlbnQuZHgpLHRoaXMudmJhciYmKGUtPW4uZXZlbnQuZHkpLHRoaXMuc2V0VHJhbnNsYXRlKHQsZSl9LHMucHJvdG90eXBlLl9vbkJveFdoZWVsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50cmFuc2xhdGVYLGU9dGhpcy50cmFuc2xhdGVZO3RoaXMuaGJhciYmKHQrPW4uZXZlbnQuZGVsdGFZKSx0aGlzLnZiYXImJihlKz1uLmV2ZW50LmRlbHRhWSksdGhpcy5zZXRUcmFuc2xhdGUodCxlKX0scy5wcm90b3R5cGUuX29uQmFyRHJhZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMudHJhbnNsYXRlWCxlPXRoaXMudHJhbnNsYXRlWTtpZih0aGlzLmhiYXIpe3ZhciByPXQrdGhpcy5faGJhclhNaW4saT1yK3RoaXMuX2hiYXJUcmFuc2xhdGVNYXg7dD0oby5jb25zdHJhaW4obi5ldmVudC54LHIsaSktcikvKGktcikqKHRoaXMucG9zaXRpb24udy10aGlzLl9ib3gudyl9aWYodGhpcy52YmFyKXt2YXIgYT1lK3RoaXMuX3ZiYXJZTWluLHM9YSt0aGlzLl92YmFyVHJhbnNsYXRlTWF4O2U9KG8uY29uc3RyYWluKG4uZXZlbnQueSxhLHMpLWEpLyhzLWEpKih0aGlzLnBvc2l0aW9uLmgtdGhpcy5fYm94LmgpfXRoaXMuc2V0VHJhbnNsYXRlKHQsZSl9LHMucHJvdG90eXBlLnNldFRyYW5zbGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMucG9zaXRpb24udy10aGlzLl9ib3gudyxuPXRoaXMucG9zaXRpb24uaC10aGlzLl9ib3guaDtpZih0PW8uY29uc3RyYWluKHR8fDAsMCxyKSxlPW8uY29uc3RyYWluKGV8fDAsMCxuKSx0aGlzLnRyYW5zbGF0ZVg9dCx0aGlzLnRyYW5zbGF0ZVk9ZSx0aGlzLmNvbnRhaW5lci5jYWxsKGEuc2V0VHJhbnNsYXRlLHRoaXMuX2JveC5sLXRoaXMucG9zaXRpb24ubC10LHRoaXMuX2JveC50LXRoaXMucG9zaXRpb24udC1lKSx0aGlzLl9jbGlwUmVjdCYmdGhpcy5fY2xpcFJlY3QuYXR0cih7eDpNYXRoLmZsb29yKHRoaXMucG9zaXRpb24ubCt0LS41KSx5Ok1hdGguZmxvb3IodGhpcy5wb3NpdGlvbi50K2UtLjUpfSksdGhpcy5oYmFyKXt2YXIgaT10L3I7dGhpcy5oYmFyLmNhbGwoYS5zZXRUcmFuc2xhdGUsdCtpKnRoaXMuX2hiYXJUcmFuc2xhdGVNYXgsZSl9aWYodGhpcy52YmFyKXt2YXIgcz1lL247dGhpcy52YmFyLmNhbGwoYS5zZXRUcmFuc2xhdGUsdCxlK3MqdGhpcy5fdmJhclRyYW5zbGF0ZU1heCl9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vY29sb3JcIjo1NzgsXCIuLi9kcmF3aW5nXCI6NTk5LGQzOjE1NX1dLDY3MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17RlJPTV9CTDp7bGVmdDowLGNlbnRlcjouNSxyaWdodDoxLGJvdHRvbTowLG1pZGRsZTouNSx0b3A6MX0sRlJPTV9UTDp7bGVmdDowLGNlbnRlcjouNSxyaWdodDoxLGJvdHRvbToxLG1pZGRsZTouNSx0b3A6MH0sRlJPTV9CUjp7bGVmdDoxLGNlbnRlcjouNSxyaWdodDowLGJvdHRvbTowLG1pZGRsZTouNSx0b3A6MX0sTElORV9TUEFDSU5HOjEuMyxDQVBfU0hJRlQ6LjcsTUlEX1NISUZUOi4zNSxPUFBPU0lURV9TSURFOntsZWZ0OlwicmlnaHRcIixyaWdodDpcImxlZnRcIix0b3A6XCJib3R0b21cIixib3R0b206XCJ0b3BcIn19fSx7fV0sNjc0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtDT01QQVJJU09OX09QUzpbXCI9XCIsXCIhPVwiLFwiPFwiLFwiPj1cIixcIj5cIixcIjw9XCJdLENPTVBBUklTT05fT1BTMjpbXCI9XCIsXCI8XCIsXCI+PVwiLFwiPlwiLFwiPD1cIl0sSU5URVJWQUxfT1BTOltcIltdXCIsXCIoKVwiLFwiWylcIixcIihdXCIsXCJdW1wiLFwiKShcIixcIl0oXCIsXCIpW1wiXSxTRVRfT1BTOltcInt9XCIsXCJ9e1wiXSxDT05TVFJBSU5UX1JFRFVDVElPTjp7XCI9XCI6XCI9XCIsXCI8XCI6XCI8XCIsXCI8PVwiOlwiPFwiLFwiPlwiOlwiPlwiLFwiPj1cIjpcIj5cIixcIltdXCI6XCJbXVwiLFwiKClcIjpcIltdXCIsXCJbKVwiOlwiW11cIixcIihdXCI6XCJbXVwiLFwiXVtcIjpcIl1bXCIsXCIpKFwiOlwiXVtcIixcIl0oXCI6XCJdW1wiLFwiKVtcIjpcIl1bXCJ9fX0se31dLDY3NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17c29saWQ6W1tdLDBdLGRvdDpbWy41LDFdLDIwMF0sZGFzaDpbWy41LDFdLDUwXSxsb25nZGFzaDpbWy41LDFdLDEwXSxkYXNoZG90OltbLjUsLjYyNSwuODc1LDFdLDUwXSxsb25nZGFzaGRvdDpbWy41LC43LC44LDFdLDEwXX19LHt9XSw2NzY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e2NpcmNsZTpcIlxcdTI1Y2ZcIixcImNpcmNsZS1vcGVuXCI6XCJcXHUyNWNiXCIsc3F1YXJlOlwiXFx1MjVhMFwiLFwic3F1YXJlLW9wZW5cIjpcIlxcdTI1YTFcIixkaWFtb25kOlwiXFx1MjVjNlwiLFwiZGlhbW9uZC1vcGVuXCI6XCJcXHUyNWM3XCIsY3Jvc3M6XCIrXCIseDpcIlxcdTI3NGNcIn19LHt9XSw2Nzc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e1NIT1dfUExBQ0VIT0xERVI6MTAwLEhJREVfUExBQ0VIT0xERVI6MWUzLERCTENMSUNLREVMQVk6MzAwLERFU0VMRUNURElNOi4yfX0se31dLDY3ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17QkFETlVNOnZvaWQgMCxGUF9TQUZFOk51bWJlci5NQVhfVkFMVUUvMWU0LE9ORUFWR1lFQVI6MzE1NTc2ZTUsT05FQVZHTU9OVEg6MjYyOThlNSxPTkVEQVk6ODY0ZTUsT05FSE9VUjozNmU1LE9ORU1JTjo2ZTQsT05FU0VDOjFlMyxFUE9DSEpEOjI0NDA1ODcuNSxBTE1PU1RfRVFVQUw6MS0xZS02LExPR19DTElQOjEwLE1JTlVTX1NJR046XCJcXHUyMjEyXCJ9fSx7fV0sNjc5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ci54bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvXCIsci5zdmc9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHIueGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsci5zdmdBdHRycz17eG1sbnM6ci5zdmcsXCJ4bWxuczp4bGlua1wiOnIueGxpbmt9fSx7fV0sNjgwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ci52ZXJzaW9uPVwiMS40Ny4xXCIsdChcImVzNi1wcm9taXNlXCIpLnBvbHlmaWxsKCksdChcIi4uL2J1aWxkL3Bsb3Rjc3NcIiksdChcIi4vZm9udHMvbWF0aGpheF9jb25maWdcIikoKTtmb3IodmFyIG49dChcIi4vcmVnaXN0cnlcIiksaT1yLnJlZ2lzdGVyPW4ucmVnaXN0ZXIsYT10KFwiLi9wbG90X2FwaVwiKSxvPU9iamVjdC5rZXlzKGEpLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTtcIl9cIiE9PWwuY2hhckF0KDApJiYocltsXT1hW2xdKSxpKHttb2R1bGVUeXBlOlwiYXBpTWV0aG9kXCIsbmFtZTpsLGZuOmFbbF19KX1pKHQoXCIuL3RyYWNlcy9zY2F0dGVyXCIpKSxpKFt0KFwiLi9jb21wb25lbnRzL2Z4XCIpLHQoXCIuL2NvbXBvbmVudHMvbGVnZW5kXCIpLHQoXCIuL2NvbXBvbmVudHMvYW5ub3RhdGlvbnNcIiksdChcIi4vY29tcG9uZW50cy9hbm5vdGF0aW9uczNkXCIpLHQoXCIuL2NvbXBvbmVudHMvc2hhcGVzXCIpLHQoXCIuL2NvbXBvbmVudHMvaW1hZ2VzXCIpLHQoXCIuL2NvbXBvbmVudHMvdXBkYXRlbWVudXNcIiksdChcIi4vY29tcG9uZW50cy9zbGlkZXJzXCIpLHQoXCIuL2NvbXBvbmVudHMvcmFuZ2VzbGlkZXJcIiksdChcIi4vY29tcG9uZW50cy9yYW5nZXNlbGVjdG9yXCIpLHQoXCIuL2NvbXBvbmVudHMvZ3JpZFwiKSx0KFwiLi9jb21wb25lbnRzL2Vycm9yYmFyc1wiKSx0KFwiLi9jb21wb25lbnRzL2NvbG9yc2NhbGVcIildKSxpKFt0KFwiLi9sb2NhbGUtZW5cIiksdChcIi4vbG9jYWxlLWVuLXVzXCIpXSksci5JY29ucz10KFwiLi4vYnVpbGQvcGxvdGljb25cIiksci5QbG90cz10KFwiLi9wbG90cy9wbG90c1wiKSxyLkZ4PXQoXCIuL2NvbXBvbmVudHMvZnhcIiksci5TbmFwc2hvdD10KFwiLi9zbmFwc2hvdFwiKSxyLlBsb3RTY2hlbWE9dChcIi4vcGxvdF9hcGkvcGxvdF9zY2hlbWFcIiksci5RdWV1ZT10KFwiLi9saWIvcXVldWVcIiksci5kMz10KFwiZDNcIil9LHtcIi4uL2J1aWxkL3Bsb3Rjc3NcIjoxLFwiLi4vYnVpbGQvcGxvdGljb25cIjoyLFwiLi9jb21wb25lbnRzL2Fubm90YXRpb25zXCI6NTY5LFwiLi9jb21wb25lbnRzL2Fubm90YXRpb25zM2RcIjo1NzQsXCIuL2NvbXBvbmVudHMvY29sb3JzY2FsZVwiOjU5MCxcIi4vY29tcG9uZW50cy9lcnJvcmJhcnNcIjo2MDUsXCIuL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuL2NvbXBvbmVudHMvZ3JpZFwiOjYyMSxcIi4vY29tcG9uZW50cy9pbWFnZXNcIjo2MjYsXCIuL2NvbXBvbmVudHMvbGVnZW5kXCI6NjM0LFwiLi9jb21wb25lbnRzL3Jhbmdlc2VsZWN0b3JcIjo2NDUsXCIuL2NvbXBvbmVudHMvcmFuZ2VzbGlkZXJcIjo2NTIsXCIuL2NvbXBvbmVudHMvc2hhcGVzXCI6NjYwLFwiLi9jb21wb25lbnRzL3NsaWRlcnNcIjo2NjUsXCIuL2NvbXBvbmVudHMvdXBkYXRlbWVudXNcIjo2NzEsXCIuL2ZvbnRzL21hdGhqYXhfY29uZmlnXCI6NjgxLFwiLi9saWIvcXVldWVcIjo3MTYsXCIuL2xvY2FsZS1lblwiOjczMCxcIi4vbG9jYWxlLWVuLXVzXCI6NzI5LFwiLi9wbG90X2FwaVwiOjczNCxcIi4vcGxvdF9hcGkvcGxvdF9zY2hlbWFcIjo3MzgsXCIuL3Bsb3RzL3Bsb3RzXCI6ODEwLFwiLi9yZWdpc3RyeVwiOjgyOSxcIi4vc25hcHNob3RcIjo4MzQsXCIuL3RyYWNlcy9zY2F0dGVyXCI6MTA2NCxkMzoxNTUsXCJlczYtcHJvbWlzZVwiOjIxMX1dLDY4MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbigpe1widW5kZWZpbmVkXCIhPXR5cGVvZiBNYXRoSmF4JiYoXCJsb2NhbFwiIT09KHdpbmRvdy5QbG90bHlDb25maWd8fHt9KS5NYXRoSmF4Q29uZmlnJiYoTWF0aEpheC5IdWIuQ29uZmlnKHttZXNzYWdlU3R5bGU6XCJub25lXCIsc2tpcFN0YXJ0dXBUeXBlc2V0OiEwLGRpc3BsYXlBbGlnbjpcImxlZnRcIix0ZXgyamF4OntpbmxpbmVNYXRoOltbXCIkXCIsXCIkXCJdLFtcIlxcXFwoXCIsXCJcXFxcKVwiXV19fSksTWF0aEpheC5IdWIuQ29uZmlndXJlZCgpKSl9fSx7fV0sNjgyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ci5pc0xlZnRBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuXCJsZWZ0XCI9PT10LnhhbmNob3J8fFwiYXV0b1wiPT09dC54YW5jaG9yJiZ0Lng8PTEvM30sci5pc0NlbnRlckFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm5cImNlbnRlclwiPT09dC54YW5jaG9yfHxcImF1dG9cIj09PXQueGFuY2hvciYmdC54PjEvMyYmdC54PDIvM30sci5pc1JpZ2h0QW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVyblwicmlnaHRcIj09PXQueGFuY2hvcnx8XCJhdXRvXCI9PT10LnhhbmNob3ImJnQueD49Mi8zfSxyLmlzVG9wQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVyblwidG9wXCI9PT10LnlhbmNob3J8fFwiYXV0b1wiPT09dC55YW5jaG9yJiZ0Lnk+PTIvM30sci5pc01pZGRsZUFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm5cIm1pZGRsZVwiPT09dC55YW5jaG9yfHxcImF1dG9cIj09PXQueWFuY2hvciYmdC55PjEvMyYmdC55PDIvM30sci5pc0JvdHRvbUFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm5cImJvdHRvbVwiPT09dC55YW5jaG9yfHxcImF1dG9cIj09PXQueWFuY2hvciYmdC55PD0xLzN9fSx7fV0sNjgzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vbW9kXCIpLGk9bi5tb2QsYT1uLm1vZEhhbGYsbz1NYXRoLlBJLHM9MipvO2Z1bmN0aW9uIGwodCl7cmV0dXJuIE1hdGguYWJzKHRbMV0tdFswXSk+cy0xZS0xNH1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIGEoZS10LHMpfWZ1bmN0aW9uIHUodCxlKXtpZihsKGUpKXJldHVybiEwO3ZhciByLG47ZVswXTxlWzFdPyhyPWVbMF0sbj1lWzFdKToocj1lWzFdLG49ZVswXSksKHI9aShyLHMpKT4obj1pKG4scykpJiYobis9cyk7dmFyIGE9aSh0LHMpLG89YStzO3JldHVybiBhPj1yJiZhPD1ufHxvPj1yJiZvPD1ufWZ1bmN0aW9uIGgodCxlLHIsbixpLGEsYyl7aT1pfHwwLGE9YXx8MDt2YXIgdSxoLGYscCxkLGc9bChbcixuXSk7ZnVuY3Rpb24gdih0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpK2ksYS10Kk1hdGguc2luKGUpXX1nPyh1PTAsaD1vLGY9cyk6cjxuPyh1PXIsZj1uKToodT1uLGY9ciksdDxlPyhwPXQsZD1lKToocD1lLGQ9dCk7dmFyIG0seT1NYXRoLmFicyhmLXUpPD1vPzA6MTtmdW5jdGlvbiB4KHQsZSxyKXtyZXR1cm5cIkFcIitbdCx0XStcIiBcIitbMCx5LHJdK1wiIFwiK3YodCxlKX1yZXR1cm4gZz9tPW51bGw9PT1wP1wiTVwiK3YoZCx1KSt4KGQsaCwwKSt4KGQsZiwwKStcIlpcIjpcIk1cIit2KHAsdSkreChwLGgsMCkreChwLGYsMCkrXCJaTVwiK3YoZCx1KSt4KGQsaCwxKSt4KGQsZiwxKStcIlpcIjpudWxsPT09cD8obT1cIk1cIit2KGQsdSkreChkLGYsMCksYyYmKG0rPVwiTDAsMFpcIikpOm09XCJNXCIrdihwLHUpK1wiTFwiK3YoZCx1KSt4KGQsZiwwKStcIkxcIit2KHAsZikreChwLHUsMSkrXCJaXCIsbX1lLmV4cG9ydHM9e2RlZzJyYWQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQvMTgwKm99LHJhZDJkZWc6ZnVuY3Rpb24odCl7cmV0dXJuIHQvbyoxODB9LGFuZ2xlRGVsdGE6YyxhbmdsZURpc3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hYnMoYyh0LGUpKX0saXNGdWxsQ2lyY2xlOmwsaXNBbmdsZUluc2lkZVNlY3Rvcjp1LGlzUHRJbnNpZGVTZWN0b3I6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuISF1KGUsbikmJihyWzBdPHJbMV0/KGk9clswXSxhPXJbMV0pOihpPXJbMV0sYT1yWzBdKSx0Pj1pJiZ0PD1hKTt2YXIgaSxhfSxwYXRoQXJjOmZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIGgobnVsbCx0LGUscixuLGksMCl9LHBhdGhTZWN0b3I6ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gaChudWxsLHQsZSxyLG4saSwxKX0scGF0aEFubnVsdXM6ZnVuY3Rpb24odCxlLHIsbixpLGEpe3JldHVybiBoKHQsZSxyLG4saSxhLDEpfX19LHtcIi4vbW9kXCI6NzA4fV0sNjg0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49QXJyYXkuaXNBcnJheSxpPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyOntpc1ZpZXc6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LGE9XCJ1bmRlZmluZWRcIj09dHlwZW9mIERhdGFWaWV3P2Z1bmN0aW9uKCl7fTpEYXRhVmlldztmdW5jdGlvbiBvKHQpe3JldHVybiBpLmlzVmlldyh0KSYmISh0IGluc3RhbmNlb2YgYSl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gbih0KXx8byh0KX1mdW5jdGlvbiBsKHQsZSxyKXtpZihzKHQpKXtpZihzKHRbMF0pKXtmb3IodmFyIG49cixpPTA7aTx0Lmxlbmd0aDtpKyspbj1lKG4sdFtpXS5sZW5ndGgpO3JldHVybiBufXJldHVybiB0Lmxlbmd0aH1yZXR1cm4gMH1yLmlzVHlwZWRBcnJheT1vLHIuaXNBcnJheU9yVHlwZWRBcnJheT1zLHIuaXNBcnJheTFEPWZ1bmN0aW9uKHQpe3JldHVybiFzKHRbMF0pfSxyLmVuc3VyZUFycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCl8fCh0PVtdKSx0Lmxlbmd0aD1lLHR9LHIuY29uY2F0PWZ1bmN0aW9uKCl7dmFyIHQsZSxyLGksYSxvLHMsbCxjPVtdLHU9ITAsaD0wO2ZvcihyPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKykobz0oaT1hcmd1bWVudHNbcl0pLmxlbmd0aCkmJihlP2MucHVzaChpKTooZT1pLGE9byksbihpKT90PSExOih1PSExLGg/dCE9PWkuY29uc3RydWN0b3ImJih0PSExKTp0PWkuY29uc3RydWN0b3IpLGgrPW8pO2lmKCFoKXJldHVybltdO2lmKCFjLmxlbmd0aClyZXR1cm4gZTtpZih1KXJldHVybiBlLmNvbmNhdC5hcHBseShlLGMpO2lmKHQpe2Zvcigocz1uZXcgdChoKSkuc2V0KGUpLHI9MDtyPGMubGVuZ3RoO3IrKylpPWNbcl0scy5zZXQoaSxhKSxhKz1pLmxlbmd0aDtyZXR1cm4gc31mb3Iocz1uZXcgQXJyYXkoaCksbD0wO2w8ZS5sZW5ndGg7bCsrKXNbbF09ZVtsXTtmb3Iocj0wO3I8Yy5sZW5ndGg7cisrKXtmb3IoaT1jW3JdLGw9MDtsPGkubGVuZ3RoO2wrKylzW2ErbF09aVtsXTthKz1sfXJldHVybiBzfSxyLm1heFJvd0xlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LE1hdGgubWF4LDApfSxyLm1pblJvd0xlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LE1hdGgubWluLDEvMCl9fSx7fV0sNjg1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNLGE9L15bJ1wiJSwkI1xccyddK3xbLCBdfFsnXCIlLCQjXFxzJ10rJC9nO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9dC5yZXBsYWNlKGEsXCJcIikpLG4odCk/TnVtYmVyKHQpOml9fSx7XCIuLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw2ODY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtlLl9nbGNhbnZhcyYmZS5fZ2xjYW52YXMuc2l6ZSgpJiZlLl9nbGNhbnZhcy5lYWNoKGZ1bmN0aW9uKHQpe3QucmVnbCYmdC5yZWdsLmNsZWFyKHtjb2xvcjohMCxkZXB0aDohMH0pfSl9fSx7fV0sNjg3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3QuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXImJih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHQuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXIpLGRlbGV0ZSB0Ll9yZXNwb25zaXZlQ2hhcnRIYW5kbGVyKX19LHt9XSw2ODg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwidGlueWNvbG9yMlwiKSxhPXQoXCIuLi9wbG90cy9hdHRyaWJ1dGVzXCIpLG89dChcIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9zY2FsZXNcIikscz10KFwiLi4vY29uc3RhbnRzL2ludGVyYWN0aW9uc1wiKS5ERVNFTEVDVERJTSxsPXQoXCIuL25lc3RlZF9wcm9wZXJ0eVwiKSxjPXQoXCIuL3JlZ2V4XCIpLmNvdW50ZXIsdT10KFwiLi9tb2RcIikubW9kSGFsZixoPXQoXCIuL2FycmF5XCIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZnVuY3Rpb24gZih0LGUpe3ZhciBuPXIudmFsT2JqZWN0TWV0YVtlLnZhbFR5cGVdO2lmKGUuYXJyYXlPayYmaCh0KSlyZXR1cm4hMDtpZihuLnZhbGlkYXRlRnVuY3Rpb24pcmV0dXJuIG4udmFsaWRhdGVGdW5jdGlvbih0LGUpO3ZhciBpPXt9LGE9aSxvPXtzZXQ6ZnVuY3Rpb24odCl7YT10fX07cmV0dXJuIG4uY29lcmNlRnVuY3Rpb24odCxvLGksZSksYSE9PWl9ci52YWxPYmplY3RNZXRhPXtkYXRhX2FycmF5Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7aCh0KT9lLnNldCh0KTp2b2lkIDAhPT1yJiZlLnNldChyKX19LGVudW1lcmF0ZWQ6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe24uY29lcmNlTnVtYmVyJiYodD0rdCksLTE9PT1uLnZhbHVlcy5pbmRleE9mKHQpP2Uuc2V0KHIpOmUuc2V0KHQpfSx2YWxpZGF0ZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSl7ZS5jb2VyY2VOdW1iZXImJih0PSt0KTtmb3IodmFyIHI9ZS52YWx1ZXMsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1TdHJpbmcocltuXSk7aWYoXCIvXCI9PT1pLmNoYXJBdCgwKSYmXCIvXCI9PT1pLmNoYXJBdChpLmxlbmd0aC0xKSl7aWYobmV3IFJlZ0V4cChpLnN1YnN0cigxLGkubGVuZ3RoLTIpKS50ZXN0KHQpKXJldHVybiEwfWVsc2UgaWYodD09PXJbbl0pcmV0dXJuITB9cmV0dXJuITF9fSxib29sZWFuOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7ITA9PT10fHwhMT09PXQ/ZS5zZXQodCk6ZS5zZXQocil9fSxudW1iZXI6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLGkpeyFuKHQpfHx2b2lkIDAhPT1pLm1pbiYmdDxpLm1pbnx8dm9pZCAwIT09aS5tYXgmJnQ+aS5tYXg/ZS5zZXQocik6ZS5zZXQoK3QpfX0saW50ZWdlcjp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsaSl7dCUxfHwhbih0KXx8dm9pZCAwIT09aS5taW4mJnQ8aS5taW58fHZvaWQgMCE9PWkubWF4JiZ0PmkubWF4P2Uuc2V0KHIpOmUuc2V0KCt0KX19LHN0cmluZzp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsbil7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpe3ZhciBpPVwibnVtYmVyXCI9PXR5cGVvZiB0OyEwIT09bi5zdHJpY3QmJmk/ZS5zZXQoU3RyaW5nKHQpKTplLnNldChyKX1lbHNlIG4ubm9CbGFuayYmIXQ/ZS5zZXQocik6ZS5zZXQodCl9fSxjb2xvcjp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpe2kodCkuaXNWYWxpZCgpP2Uuc2V0KHQpOmUuc2V0KHIpfX0sY29sb3JsaXN0Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7QXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGgmJnQuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIGkodCkuaXNWYWxpZCgpfSk/ZS5zZXQodCk6ZS5zZXQocil9fSxjb2xvcnNjYWxlOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7ZS5zZXQoby5nZXQodCxyKSl9fSxhbmdsZTp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpe1wiYXV0b1wiPT09dD9lLnNldChcImF1dG9cIik6bih0KT9lLnNldCh1KCt0LDM2MCkpOmUuc2V0KHIpfX0sc3VicGxvdGlkOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLnJlZ2V4fHxjKHIpO1wic3RyaW5nXCI9PXR5cGVvZiB0JiZpLnRlc3QodCk/ZS5zZXQodCk6ZS5zZXQocil9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmRmbHQ7cmV0dXJuIHQ9PT1yfHxcInN0cmluZ1wiPT10eXBlb2YgdCYmISFjKHIpLnRlc3QodCl9fSxmbGFnbGlzdDp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsbil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpaWYoLTE9PT0obi5leHRyYXN8fFtdKS5pbmRleE9mKHQpKXtmb3IodmFyIGk9dC5zcGxpdChcIitcIiksYT0wO2E8aS5sZW5ndGg7KXt2YXIgbz1pW2FdOy0xPT09bi5mbGFncy5pbmRleE9mKG8pfHxpLmluZGV4T2Yobyk8YT9pLnNwbGljZShhLDEpOmErK31pLmxlbmd0aD9lLnNldChpLmpvaW4oXCIrXCIpKTplLnNldChyKX1lbHNlIGUuc2V0KHQpO2Vsc2UgZS5zZXQocil9fSxhbnk6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXt2b2lkIDA9PT10P2Uuc2V0KHIpOmUuc2V0KHQpfX0saW5mb19hcnJheTp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLG4saSl7ZnVuY3Rpb24gYSh0LGUsbil7dmFyIGksYT17c2V0OmZ1bmN0aW9uKHQpe2k9dH19O3JldHVybiB2b2lkIDA9PT1uJiYobj1lLmRmbHQpLHIudmFsT2JqZWN0TWV0YVtlLnZhbFR5cGVdLmNvZXJjZUZ1bmN0aW9uKHQsYSxuLGUpLGl9dmFyIG89Mj09PWkuZGltZW5zaW9uc3x8XCIxLTJcIj09PWkuZGltZW5zaW9ucyYmQXJyYXkuaXNBcnJheSh0KSYmQXJyYXkuaXNBcnJheSh0WzBdKTtpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgcyxsLGMsdSxoLGYscD1pLml0ZW1zLGQ9W10sZz1BcnJheS5pc0FycmF5KHApLHY9ZyYmbyYmQXJyYXkuaXNBcnJheShwWzBdKSxtPW8mJmcmJiF2LHk9ZyYmIW0/cC5sZW5ndGg6dC5sZW5ndGg7aWYobj1BcnJheS5pc0FycmF5KG4pP246W10sbylmb3Iocz0wO3M8eTtzKyspZm9yKGRbc109W10sYz1BcnJheS5pc0FycmF5KHRbc10pP3Rbc106W10saD1tP3AubGVuZ3RoOmc/cFtzXS5sZW5ndGg6Yy5sZW5ndGgsbD0wO2w8aDtsKyspdT1tP3BbbF06Zz9wW3NdW2xdOnAsdm9pZCAwIT09KGY9YShjW2xdLHUsKG5bc118fFtdKVtsXSkpJiYoZFtzXVtsXT1mKTtlbHNlIGZvcihzPTA7czx5O3MrKyl2b2lkIDAhPT0oZj1hKHRbc10sZz9wW3NdOnAsbltzXSkpJiYoZFtzXT1mKTtlLnNldChkKX1lbHNlIGUuc2V0KG4pfSx2YWxpZGF0ZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSl7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuITE7dmFyIHI9ZS5pdGVtcyxuPUFycmF5LmlzQXJyYXkociksaT0yPT09ZS5kaW1lbnNpb25zO2lmKCFlLmZyZWVMZW5ndGgmJnQubGVuZ3RoIT09ci5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspaWYoaSl7aWYoIUFycmF5LmlzQXJyYXkodFthXSl8fCFlLmZyZWVMZW5ndGgmJnRbYV0ubGVuZ3RoIT09clthXS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBvPTA7bzx0W2FdLmxlbmd0aDtvKyspaWYoIWYodFthXVtvXSxuP3JbYV1bb106cikpcmV0dXJuITF9ZWxzZSBpZighZih0W2FdLG4/clthXTpyKSlyZXR1cm4hMTtyZXR1cm4hMH19fSxyLmNvZXJjZT1mdW5jdGlvbih0LGUsbixpLGEpe3ZhciBvPWwobixpKS5nZXQoKSxzPWwodCxpKSxjPWwoZSxpKSx1PXMuZ2V0KCkscD1lLl90ZW1wbGF0ZTtpZih2b2lkIDA9PT11JiZwJiYodT1sKHAsaSkuZ2V0KCkscD0wKSx2b2lkIDA9PT1hJiYoYT1vLmRmbHQpLG8uYXJyYXlPayYmaCh1KSlyZXR1cm4gYy5zZXQodSksdTt2YXIgZD1yLnZhbE9iamVjdE1ldGFbby52YWxUeXBlXS5jb2VyY2VGdW5jdGlvbjtkKHUsYyxhLG8pO3ZhciBnPWMuZ2V0KCk7cmV0dXJuIHAmJmc9PT1hJiYhZih1LG8pJiYoZCh1PWwocCxpKS5nZXQoKSxjLGEsbyksZz1jLmdldCgpKSxnfSxyLmNvZXJjZTI9ZnVuY3Rpb24odCxlLG4saSxhKXt2YXIgbz1sKHQsaSkscz1yLmNvZXJjZSh0LGUsbixpLGEpLGM9by5nZXQoKTtyZXR1cm4gbnVsbCE9YyYmc30sci5jb2VyY2VGb250PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj17fTtyZXR1cm4gcj1yfHx7fSxuLmZhbWlseT10KGUrXCIuZmFtaWx5XCIsci5mYW1pbHkpLG4uc2l6ZT10KGUrXCIuc2l6ZVwiLHIuc2l6ZSksbi5jb2xvcj10KGUrXCIuY29sb3JcIixyLmNvbG9yKSxufSxyLmNvZXJjZUhvdmVyaW5mbz1mdW5jdGlvbih0LGUsbil7dmFyIGksbz1lLl9tb2R1bGUuYXR0cmlidXRlcyxzPW8uaG92ZXJpbmZvP286YSxsPXMuaG92ZXJpbmZvO2lmKDE9PT1uLl9kYXRhTGVuZ3RoKXt2YXIgYz1cImFsbFwiPT09bC5kZmx0P2wuZmxhZ3Muc2xpY2UoKTpsLmRmbHQuc3BsaXQoXCIrXCIpO2Muc3BsaWNlKGMuaW5kZXhPZihcIm5hbWVcIiksMSksaT1jLmpvaW4oXCIrXCIpfXJldHVybiByLmNvZXJjZSh0LGUscyxcImhvdmVyaW5mb1wiLGkpfSxyLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHk9ZnVuY3Rpb24odCxlKXtpZih0Lm1hcmtlcil7dmFyIHIsbixpPXQubWFya2VyLm9wYWNpdHk7aWYodm9pZCAwIT09aSloKGkpfHx0LnNlbGVjdGVkfHx0LnVuc2VsZWN0ZWR8fChyPWksbj1zKmkpLGUoXCJzZWxlY3RlZC5tYXJrZXIub3BhY2l0eVwiLHIpLGUoXCJ1bnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5XCIsbil9fSxyLnZhbGlkYXRlPWZ9LHtcIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9zY2FsZXNcIjo1OTMsXCIuLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zXCI6Njc3LFwiLi4vcGxvdHMvYXR0cmlidXRlc1wiOjc0NixcIi4vYXJyYXlcIjo2ODQsXCIuL21vZFwiOjcwOCxcIi4vbmVzdGVkX3Byb3BlcnR5XCI6NzA5LFwiLi9yZWdleFwiOjcxNyxcImZhc3QtaXNudW1lcmljXCI6MjIyLHRpbnljb2xvcjI6NTIyfV0sNjg5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saSxhPXQoXCJkM1wiKSxvPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxzPXQoXCIuL2xvZ2dlcnNcIiksbD10KFwiLi9tb2RcIikubW9kLGM9dChcIi4uL2NvbnN0YW50cy9udW1lcmljYWxcIiksdT1jLkJBRE5VTSxoPWMuT05FREFZLGY9Yy5PTkVIT1VSLHA9Yy5PTkVNSU4sZD1jLk9ORVNFQyxnPWMuRVBPQ0hKRCx2PXQoXCIuLi9yZWdpc3RyeVwiKSxtPWEudGltZS5mb3JtYXQudXRjLHk9L15cXHMqKC0/XFxkXFxkXFxkXFxkfFxcZFxcZCkoLShcXGQ/XFxkKSgtKFxcZD9cXGQpKFsgVHRdKFswMV0/XFxkfDJbMC0zXSkoOihbMC01XVxcZCkoOihbMC01XVxcZChcXC5cXGQrKT8pKT8oWnx6fFsrXFwtXVxcZFxcZDo/XFxkXFxkKT8pPyk/KT8pP1xccyokL20seD0vXlxccyooLT9cXGRcXGRcXGRcXGR8XFxkXFxkKSgtKFxcZD9cXGRpPykoLShcXGQ/XFxkKShbIFR0XShbMDFdP1xcZHwyWzAtM10pKDooWzAtNV1cXGQpKDooWzAtNV1cXGQoXFwuXFxkKyk/KSk/KFp8enxbK1xcLV1cXGRcXGQ6P1xcZFxcZCk/KT8pPyk/KT9cXHMqJC9tLGI9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLTcwO2Z1bmN0aW9uIF8odCl7cmV0dXJuIHQmJnYuY29tcG9uZW50c1JlZ2lzdHJ5LmNhbGVuZGFycyYmXCJzdHJpbmdcIj09dHlwZW9mIHQmJlwiZ3JlZ29yaWFuXCIhPT10fWZ1bmN0aW9uIHcodCxlKXtyZXR1cm4gU3RyaW5nKHQrTWF0aC5wb3coMTAsZSkpLnN1YnN0cigxKX1yLmRhdGVUaWNrMD1mdW5jdGlvbih0LGUpe3JldHVybiBfKHQpP2U/di5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcIkNBTk9OSUNBTF9TVU5EQVlcIilbdF06di5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcIkNBTk9OSUNBTF9USUNLXCIpW3RdOmU/XCIyMDAwLTAxLTAyXCI6XCIyMDAwLTAxLTAxXCJ9LHIuZGZsdFJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBfKHQpP3YuZ2V0Q29tcG9uZW50TWV0aG9kKFwiY2FsZW5kYXJzXCIsXCJERkxUUkFOR0VcIilbdF06W1wiMjAwMC0wMS0wMVwiLFwiMjAwMS0wMS0wMVwiXX0sci5pc0pTRGF0ZT1mdW5jdGlvbih0KXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgdCYmbnVsbCE9PXQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQuZ2V0VGltZX0sci5kYXRlVGltZTJtcz1mdW5jdGlvbih0LGUpe2lmKHIuaXNKU0RhdGUodCkpe3ZhciBhPXQuZ2V0VGltZXpvbmVPZmZzZXQoKSpwLG89KHQuZ2V0VVRDTWludXRlcygpLXQuZ2V0TWludXRlcygpKSpwKyh0LmdldFVUQ1NlY29uZHMoKS10LmdldFNlY29uZHMoKSkqZCsodC5nZXRVVENNaWxsaXNlY29uZHMoKS10LmdldE1pbGxpc2Vjb25kcygpKTtpZihvKXt2YXIgcz0zKnA7YT1hLXMvMitsKG8tYStzLzIscyl9cmV0dXJuKHQ9TnVtYmVyKHQpLWEpPj1uJiZ0PD1pP3Q6dX1pZihcInN0cmluZ1wiIT10eXBlb2YgdCYmXCJudW1iZXJcIiE9dHlwZW9mIHQpcmV0dXJuIHU7dD1TdHJpbmcodCk7dmFyIGM9XyhlKSxtPXQuY2hhckF0KDApOyFjfHxcIkdcIiE9PW0mJlwiZ1wiIT09bXx8KHQ9dC5zdWJzdHIoMSksZT1cIlwiKTt2YXIgdz1jJiZcImNoaW5lc2VcIj09PWUuc3Vic3RyKDAsNyksaz10Lm1hdGNoKHc/eDp5KTtpZighaylyZXR1cm4gdTt2YXIgQT1rWzFdLFQ9a1szXXx8XCIxXCIsTT1OdW1iZXIoa1s1XXx8MSksUz1OdW1iZXIoa1s3XXx8MCksRT1OdW1iZXIoa1s5XXx8MCksQz1OdW1iZXIoa1sxMV18fDApO2lmKGMpe2lmKDI9PT1BLmxlbmd0aClyZXR1cm4gdTt2YXIgTDtBPU51bWJlcihBKTt0cnl7dmFyIHo9di5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcImdldENhbFwiKShlKTtpZih3KXt2YXIgTz1cImlcIj09PVQuY2hhckF0KFQubGVuZ3RoLTEpO1Q9cGFyc2VJbnQoVCwxMCksTD16Lm5ld0RhdGUoQSx6LnRvTW9udGhJbmRleChBLFQsTyksTSl9ZWxzZSBMPXoubmV3RGF0ZShBLE51bWJlcihUKSxNKX1jYXRjaCh0KXtyZXR1cm4gdX1yZXR1cm4gTD8oTC50b0pEKCktZykqaCtTKmYrRSpwK0MqZDp1fUE9Mj09PUEubGVuZ3RoPyhOdW1iZXIoQSkrMmUzLWIpJTEwMCtiOk51bWJlcihBKSxULT0xO3ZhciBJPW5ldyBEYXRlKERhdGUuVVRDKDJlMyxULE0sUyxFKSk7cmV0dXJuIEkuc2V0VVRDRnVsbFllYXIoQSksSS5nZXRVVENNb250aCgpIT09VD91OkkuZ2V0VVRDRGF0ZSgpIT09TT91OkkuZ2V0VGltZSgpK0MqZH0sbj1yLk1JTl9NUz1yLmRhdGVUaW1lMm1zKFwiLTk5OTlcIiksaT1yLk1BWF9NUz1yLmRhdGVUaW1lMm1zKFwiOTk5OS0xMi0zMSAyMzo1OTo1OS45OTk5XCIpLHIuaXNEYXRlVGltZT1mdW5jdGlvbih0LGUpe3JldHVybiByLmRhdGVUaW1lMm1zKHQsZSkhPT11fTt2YXIgaz05MCpoLEE9MypmLFQ9NSpwO2Z1bmN0aW9uIE0odCxlLHIsbixpKXtpZigoZXx8cnx8bnx8aSkmJih0Kz1cIiBcIit3KGUsMikrXCI6XCIrdyhyLDIpLChufHxpKSYmKHQrPVwiOlwiK3cobiwyKSxpKSkpe2Zvcih2YXIgYT00O2klMTA9PTA7KWEtPTEsaS89MTA7dCs9XCIuXCIrdyhpLGEpfXJldHVybiB0fXIubXMyRGF0ZVRpbWU9ZnVuY3Rpb24odCxlLHIpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0fHwhKHQ+PW4mJnQ8PWkpKXJldHVybiB1O2V8fChlPTApO3ZhciBhLG8scyxjLHkseCxiPU1hdGguZmxvb3IoMTAqbCh0Ky4wNSwxKSksdz1NYXRoLnJvdW5kKHQtYi8xMCk7aWYoXyhyKSl7dmFyIFM9TWF0aC5mbG9vcih3L2gpK2csRT1NYXRoLmZsb29yKGwodCxoKSk7dHJ5e2E9di5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcImdldENhbFwiKShyKS5mcm9tSkQoUykuZm9ybWF0RGF0ZShcInl5eXktbW0tZGRcIil9Y2F0Y2godCl7YT1tKFwiRyVZLSVtLSVkXCIpKG5ldyBEYXRlKHcpKX1pZihcIi1cIj09PWEuY2hhckF0KDApKWZvcig7YS5sZW5ndGg8MTE7KWE9XCItMFwiK2Euc3Vic3RyKDEpO2Vsc2UgZm9yKDthLmxlbmd0aDwxMDspYT1cIjBcIithO289ZTxrP01hdGguZmxvb3IoRS9mKTowLHM9ZTxrP01hdGguZmxvb3IoRSVmL3ApOjAsYz1lPEE/TWF0aC5mbG9vcihFJXAvZCk6MCx5PWU8VD9FJWQqMTArYjowfWVsc2UgeD1uZXcgRGF0ZSh3KSxhPW0oXCIlWS0lbS0lZFwiKSh4KSxvPWU8az94LmdldFVUQ0hvdXJzKCk6MCxzPWU8az94LmdldFVUQ01pbnV0ZXMoKTowLGM9ZTxBP3guZ2V0VVRDU2Vjb25kcygpOjAseT1lPFQ/MTAqeC5nZXRVVENNaWxsaXNlY29uZHMoKStiOjA7cmV0dXJuIE0oYSxvLHMsYyx5KX0sci5tczJEYXRlVGltZUxvY2FsPWZ1bmN0aW9uKHQpe2lmKCEodD49bitoJiZ0PD1pLWgpKXJldHVybiB1O3ZhciBlPU1hdGguZmxvb3IoMTAqbCh0Ky4wNSwxKSkscj1uZXcgRGF0ZShNYXRoLnJvdW5kKHQtZS8xMCkpO3JldHVybiBNKGEudGltZS5mb3JtYXQoXCIlWS0lbS0lZFwiKShyKSxyLmdldEhvdXJzKCksci5nZXRNaW51dGVzKCksci5nZXRTZWNvbmRzKCksMTAqci5nZXRVVENNaWxsaXNlY29uZHMoKStlKX0sci5jbGVhbkRhdGU9ZnVuY3Rpb24odCxlLG4pe2lmKHQ9PT11KXJldHVybiBlO2lmKHIuaXNKU0RhdGUodCl8fFwibnVtYmVyXCI9PXR5cGVvZiB0JiZpc0Zpbml0ZSh0KSl7aWYoXyhuKSlyZXR1cm4gcy5lcnJvcihcIkpTIERhdGVzIGFuZCBtaWxsaXNlY29uZHMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHdvcmxkIGNhbGVuZGFyc1wiLHQpLGU7aWYoISh0PXIubXMyRGF0ZVRpbWVMb2NhbCgrdCkpJiZ2b2lkIDAhPT1lKXJldHVybiBlfWVsc2UgaWYoIXIuaXNEYXRlVGltZSh0LG4pKXJldHVybiBzLmVycm9yKFwidW5yZWNvZ25pemVkIGRhdGVcIix0KSxlO3JldHVybiB0fTt2YXIgUz0vJVxcZD9mL2c7ZnVuY3Rpb24gRSh0LGUscixuKXt0PXQucmVwbGFjZShTLGZ1bmN0aW9uKHQpe3ZhciByPU1hdGgubWluKCt0LmNoYXJBdCgxKXx8Niw2KTtyZXR1cm4oZS8xZTMlMSsyKS50b0ZpeGVkKHIpLnN1YnN0cigyKS5yZXBsYWNlKC8wKyQvLFwiXCIpfHxcIjBcIn0pO3ZhciBpPW5ldyBEYXRlKE1hdGguZmxvb3IoZSsuMDUpKTtpZihfKG4pKXRyeXt0PXYuZ2V0Q29tcG9uZW50TWV0aG9kKFwiY2FsZW5kYXJzXCIsXCJ3b3JsZENhbEZtdFwiKSh0LGUsbil9Y2F0Y2godCl7cmV0dXJuXCJJbnZhbGlkXCJ9cmV0dXJuIHIodCkoaSl9dmFyIEM9WzU5LDU5LjksNTkuOTksNTkuOTk5LDU5Ljk5OTldO3IuZm9ybWF0RGF0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7aWYoaT1fKGkpJiZpLCFlKWlmKFwieVwiPT09cillPWEueWVhcjtlbHNlIGlmKFwibVwiPT09cillPWEubW9udGg7ZWxzZXtpZihcImRcIiE9PXIpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9bCh0Ky4wNSxoKSxuPXcoTWF0aC5mbG9vcihyL2YpLDIpK1wiOlwiK3cobChNYXRoLmZsb29yKHIvcCksNjApLDIpO2lmKFwiTVwiIT09ZSl7byhlKXx8KGU9MCk7dmFyIGk9KDEwMCtNYXRoLm1pbihsKHQvZCw2MCksQ1tlXSkpLnRvRml4ZWQoZSkuc3Vic3RyKDEpO2U+MCYmKGk9aS5yZXBsYWNlKC8wKyQvLFwiXCIpLnJlcGxhY2UoL1tcXC5dJC8sXCJcIikpLG4rPVwiOlwiK2l9cmV0dXJuIG59KHQscikrXCJcXG5cIitFKGEuZGF5TW9udGhZZWFyLHQsbixpKTtlPWEuZGF5TW9udGgrXCJcXG5cIithLnllYXJ9cmV0dXJuIEUoZSx0LG4saSl9O3ZhciBMPTMqaDtyLmluY3JlbWVudE1vbnRoPWZ1bmN0aW9uKHQsZSxyKXtyPV8ocikmJnI7dmFyIG49bCh0LGgpO2lmKHQ9TWF0aC5yb3VuZCh0LW4pLHIpdHJ5e3ZhciBpPU1hdGgucm91bmQodC9oKStnLGE9di5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcImdldENhbFwiKShyKSxvPWEuZnJvbUpEKGkpO3JldHVybiBlJTEyP2EuYWRkKG8sZSxcIm1cIik6YS5hZGQobyxlLzEyLFwieVwiKSwoby50b0pEKCktZykqaCtufWNhdGNoKGUpe3MuZXJyb3IoXCJpbnZhbGlkIG1zIFwiK3QrXCIgaW4gY2FsZW5kYXIgXCIrcil9dmFyIGM9bmV3IERhdGUodCtMKTtyZXR1cm4gYy5zZXRVVENNb250aChjLmdldFVUQ01vbnRoKCkrZSkrbi1MfSxyLmZpbmRFeGFjdERhdGVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG4saT0wLGE9MCxzPTAsbD0wLGM9XyhlKSYmdi5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcImdldENhbFwiKShlKSx1PTA7dTx0Lmxlbmd0aDt1KyspaWYobj10W3VdLG8obikpe2lmKCEobiVoKSlpZihjKXRyeXsxPT09KHI9Yy5mcm9tSkQobi9oK2cpKS5kYXkoKT8xPT09ci5tb250aCgpP2krKzphKys6cysrfWNhdGNoKHQpe31lbHNlIDE9PT0ocj1uZXcgRGF0ZShuKSkuZ2V0VVRDRGF0ZSgpPzA9PT1yLmdldFVUQ01vbnRoKCk/aSsrOmErKzpzKyt9ZWxzZSBsKys7cys9YSs9aTt2YXIgZj10Lmxlbmd0aC1sO3JldHVybntleGFjdFllYXJzOmkvZixleGFjdE1vbnRoczphL2YsZXhhY3REYXlzOnMvZn19fSx7XCIuLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vcmVnaXN0cnlcIjo4MjksXCIuL2xvZ2dlcnNcIjo3MDUsXCIuL21vZFwiOjcwOCxkMzoxNTUsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDY5MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJldmVudHNcIikuRXZlbnRFbWl0dGVyLGk9e2luaXQ6ZnVuY3Rpb24odCl7aWYodC5fZXYgaW5zdGFuY2VvZiBuKXJldHVybiB0O3ZhciBlPW5ldyBuLHI9bmV3IG47cmV0dXJuIHQuX2V2PWUsdC5faW50ZXJuYWxFdj1yLHQub249ZS5vbi5iaW5kKGUpLHQub25jZT1lLm9uY2UuYmluZChlKSx0LnJlbW92ZUxpc3RlbmVyPWUucmVtb3ZlTGlzdGVuZXIuYmluZChlKSx0LnJlbW92ZUFsbExpc3RlbmVycz1lLnJlbW92ZUFsbExpc3RlbmVycy5iaW5kKGUpLHQuX2ludGVybmFsT249ci5vbi5iaW5kKHIpLHQuX2ludGVybmFsT25jZT1yLm9uY2UuYmluZChyKSx0Ll9yZW1vdmVJbnRlcm5hbExpc3RlbmVyPXIucmVtb3ZlTGlzdGVuZXIuYmluZChyKSx0Ll9yZW1vdmVBbGxJbnRlcm5hbExpc3RlbmVycz1yLnJlbW92ZUFsbExpc3RlbmVycy5iaW5kKHIpLHQuZW1pdD1mdW5jdGlvbihuLGkpe1widW5kZWZpbmVkXCIhPXR5cGVvZiBqUXVlcnkmJmpRdWVyeSh0KS50cmlnZ2VyKG4saSksZS5lbWl0KG4saSksci5lbWl0KG4saSl9LHR9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpO1widW5kZWZpbmVkXCIhPXR5cGVvZiBqUXVlcnkmJihuPWpRdWVyeSh0KS50cmlnZ2VySGFuZGxlcihlLHIpKTt2YXIgYT10Ll9ldjtpZighYSlyZXR1cm4gbjt2YXIgbyxzPWEuX2V2ZW50c1tlXTtpZighcylyZXR1cm4gbjtmdW5jdGlvbiBsKHQpe3JldHVybiB0Lmxpc3RlbmVyPyhhLnJlbW92ZUxpc3RlbmVyKGUsdC5saXN0ZW5lciksdC5maXJlZD92b2lkIDA6KHQuZmlyZWQ9ITAsdC5saXN0ZW5lci5hcHBseShhLFtyXSkpKTp0LmFwcGx5KGEsW3JdKX1mb3Iocz1BcnJheS5pc0FycmF5KHMpP3M6W3NdLG89MDtvPHMubGVuZ3RoLTE7bysrKWwoc1tvXSk7cmV0dXJuIGk9bChzW29dKSx2b2lkIDAhPT1uP246aX0scHVyZ2U6ZnVuY3Rpb24odCl7cmV0dXJuIGRlbGV0ZSB0Ll9ldixkZWxldGUgdC5vbixkZWxldGUgdC5vbmNlLGRlbGV0ZSB0LnJlbW92ZUxpc3RlbmVyLGRlbGV0ZSB0LnJlbW92ZUFsbExpc3RlbmVycyxkZWxldGUgdC5lbWl0LGRlbGV0ZSB0Ll9ldixkZWxldGUgdC5faW50ZXJuYWxFdixkZWxldGUgdC5faW50ZXJuYWxPbixkZWxldGUgdC5faW50ZXJuYWxPbmNlLGRlbGV0ZSB0Ll9yZW1vdmVJbnRlcm5hbExpc3RlbmVyLGRlbGV0ZSB0Ll9yZW1vdmVBbGxJbnRlcm5hbExpc3RlbmVycyx0fX07ZS5leHBvcnRzPWl9LHtldmVudHM6OTV9XSw2OTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9pc19wbGFpbl9vYmplY3QuanNcIiksaT1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIGEodCxlLHIsbyl7dmFyIHMsbCxjLHUsaCxmLHA9dFswXSxkPXQubGVuZ3RoO2lmKDI9PT1kJiZpKHApJiZpKHRbMV0pJiYwPT09cC5sZW5ndGgpe2lmKGZ1bmN0aW9uKHQsZSl7dmFyIHIsbjtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXtpZihudWxsIT09KG49dFtyXSkmJlwib2JqZWN0XCI9PXR5cGVvZiBuKXJldHVybiExO3ZvaWQgMCE9PW4mJihlW3JdPW4pfXJldHVybiEwfSh0WzFdLHApKXJldHVybiBwO3Auc3BsaWNlKDAscC5sZW5ndGgpfWZvcih2YXIgZz0xO2c8ZDtnKyspZm9yKGwgaW4gcz10W2ddKWM9cFtsXSx1PXNbbF0sbyYmaSh1KT9wW2xdPXU6ZSYmdSYmKG4odSl8fChoPWkodSkpKT8oaD8oaD0hMSxmPWMmJmkoYyk/YzpbXSk6Zj1jJiZuKGMpP2M6e30scFtsXT1hKFtmLHVdLGUscixvKSk6KFwidW5kZWZpbmVkXCIhPXR5cGVvZiB1fHxyKSYmKHBbbF09dSk7cmV0dXJuIHB9ci5leHRlbmRGbGF0PWZ1bmN0aW9uKCl7cmV0dXJuIGEoYXJndW1lbnRzLCExLCExLCExKX0sci5leHRlbmREZWVwPWZ1bmN0aW9uKCl7cmV0dXJuIGEoYXJndW1lbnRzLCEwLCExLCExKX0sci5leHRlbmREZWVwQWxsPWZ1bmN0aW9uKCl7cmV0dXJuIGEoYXJndW1lbnRzLCEwLCEwLCExKX0sci5leHRlbmREZWVwTm9BcnJheXM9ZnVuY3Rpb24oKXtyZXR1cm4gYShhcmd1bWVudHMsITAsITEsITApfX0se1wiLi9pc19wbGFpbl9vYmplY3QuanNcIjo3MDJ9XSw2OTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LHI9W10sbj0wLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dFtpXTsxIT09ZVthXSYmKGVbYV09MSxyW24rK109YSl9cmV0dXJuIHJ9fSx7fV0sNjkzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4hMD09PXQudmlzaWJsZX1mdW5jdGlvbiBpKHQpe3JldHVybiEwPT09dFswXS50cmFjZS52aXNpYmxlfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscj0oZT10LEFycmF5LmlzQXJyYXkoZSkmJkFycmF5LmlzQXJyYXkoZVswXSkmJmVbMF1bMF0mJmVbMF1bMF0udHJhY2U/aTpuKSxhPVtdLG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9dFtvXTtyKHMpJiZhLnB1c2gocyl9cmV0dXJuIGF9fSx7fV0sNjk0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImNvdW50cnktcmVnZXhcIiksaT10KFwiLi4vbGliXCIpLGE9T2JqZWN0LmtleXMobiksbz17XCJJU08tM1wiOmkuaWRlbnRpdHksXCJVU0Etc3RhdGVzXCI6aS5pZGVudGl0eSxcImNvdW50cnkgbmFtZXNcIjpmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPGEubGVuZ3RoO2UrKyl7dmFyIHI9YVtlXSxvPW5ldyBSZWdFeHAobltyXSk7aWYoby50ZXN0KHQudHJpbSgpLnRvTG93ZXJDYXNlKCkpKXJldHVybiByfXJldHVybiBpLmxvZyhcIlVucmVjb2duaXplZCBjb3VudHJ5IG5hbWU6IFwiK3QrXCIuXCIpLCExfX07ci5sb2NhdGlvblRvRmVhdHVyZT1mdW5jdGlvbih0LGUscil7aWYoIWV8fFwic3RyaW5nXCIhPXR5cGVvZiBlKXJldHVybiExO3ZhciBuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKDAsb1t0XSkoZSl9KHQsZSk7aWYobil7Zm9yKHZhciBhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV07aWYocy5pZD09PW4pcmV0dXJuIHN9aS5sb2coW1wiTG9jYXRpb24gd2l0aCBpZFwiLG4sXCJkb2VzIG5vdCBoYXZlIGEgbWF0Y2hpbmcgdG9wb2pzb24gZmVhdHVyZSBhdCB0aGlzIHJlc29sdXRpb24uXCJdLmpvaW4oXCIgXCIpKX1yZXR1cm4hMX19LHtcIi4uL2xpYlwiOjcwMSxcImNvdW50cnktcmVnZXhcIjoxMjV9XSw2OTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKS5CQUROVU07ci5jYWxjVHJhY2VUb0xpbmVDb29yZHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF0udHJhY2UuY29ubmVjdGdhcHMscj1bXSxpPVtdLGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89dFthXS5sb25sYXQ7b1swXSE9PW4/aS5wdXNoKG8pOiFlJiZpLmxlbmd0aD4wJiYoci5wdXNoKGkpLGk9W10pfXJldHVybiBpLmxlbmd0aD4wJiZyLnB1c2goaSkscn0sci5tYWtlTGluZT1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXQubGVuZ3RoP3t0eXBlOlwiTGluZVN0cmluZ1wiLGNvb3JkaW5hdGVzOnRbMF19Ont0eXBlOlwiTXVsdGlMaW5lU3RyaW5nXCIsY29vcmRpbmF0ZXM6dH19LHIubWFrZVBvbHlnb249ZnVuY3Rpb24odCl7aWYoMT09PXQubGVuZ3RoKXJldHVybnt0eXBlOlwiUG9seWdvblwiLGNvb3JkaW5hdGVzOnR9O2Zvcih2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9MDtyPHQubGVuZ3RoO3IrKyllW3JdPVt0W3JdXTtyZXR1cm57dHlwZTpcIk11bHRpUG9seWdvblwiLGNvb3JkaW5hdGVzOmV9fSxyLm1ha2VCbGFuaz1mdW5jdGlvbigpe3JldHVybnt0eXBlOlwiUG9pbnRcIixjb29yZGluYXRlczpbXX19fSx7XCIuLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4fV0sNjk2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saSxhLG89dChcIi4vbW9kXCIpLm1vZDtmdW5jdGlvbiBzKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9ci10LGM9aS10LHU9by1pLGg9bi1lLGY9YS1lLHA9cy1hLGQ9bCpwLXUqaDtpZigwPT09ZClyZXR1cm4gbnVsbDt2YXIgZz0oYypwLXUqZikvZCx2PShjKmgtbCpmKS9kO3JldHVybiB2PDB8fHY+MXx8ZzwwfHxnPjE/bnVsbDp7eDp0K2wqZyx5OmUraCpnfX1mdW5jdGlvbiBsKHQsZSxyLG4saSl7dmFyIGE9bip0K2kqZTtpZihhPDApcmV0dXJuIG4qbitpKmk7aWYoYT5yKXt2YXIgbz1uLXQscz1pLWU7cmV0dXJuIG8qbytzKnN9dmFyIGw9biplLWkqdDtyZXR1cm4gbCpsL3J9ci5zZWdtZW50c0ludGVyc2VjdD1zLHIuc2VnbWVudERpc3RhbmNlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8sYyl7aWYocyh0LGUscixuLGksYSxvLGMpKXJldHVybiAwO3ZhciB1PXItdCxoPW4tZSxmPW8taSxwPWMtYSxkPXUqdStoKmgsZz1mKmYrcCpwLHY9TWF0aC5taW4obCh1LGgsZCxpLXQsYS1lKSxsKHUsaCxkLG8tdCxjLWUpLGwoZixwLGcsdC1pLGUtYSksbChmLHAsZyxyLWksbi1hKSk7cmV0dXJuIE1hdGguc3FydCh2KX0sci5nZXRUZXh0TG9jYXRpb249ZnVuY3Rpb24odCxlLHIscyl7aWYodD09PWkmJnM9PT1hfHwobj17fSxpPXQsYT1zKSxuW3JdKXJldHVybiBuW3JdO3ZhciBsPXQuZ2V0UG9pbnRBdExlbmd0aChvKHItcy8yLGUpKSxjPXQuZ2V0UG9pbnRBdExlbmd0aChvKHIrcy8yLGUpKSx1PU1hdGguYXRhbigoYy55LWwueSkvKGMueC1sLngpKSxoPXQuZ2V0UG9pbnRBdExlbmd0aChvKHIsZSkpLGY9e3g6KDQqaC54K2wueCtjLngpLzYseTooNCpoLnkrbC55K2MueSkvNix0aGV0YTp1fTtyZXR1cm4gbltyXT1mLGZ9LHIuY2xlYXJMb2NhdGlvbkNhY2hlPWZ1bmN0aW9uKCl7aT1udWxsfSxyLmdldFZpc2libGVTZWdtZW50PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9ZS5sZWZ0LG89ZS5yaWdodCxzPWUudG9wLGw9ZS5ib3R0b20sYz0wLHU9dC5nZXRUb3RhbExlbmd0aCgpLGg9dTtmdW5jdGlvbiBmKGUpe3ZhciByPXQuZ2V0UG9pbnRBdExlbmd0aChlKTswPT09ZT9uPXI6ZT09PXUmJihpPXIpO3ZhciBjPXIueDxhP2Etci54OnIueD5vP3IueC1vOjAsaD1yLnk8cz9zLXIueTpyLnk+bD9yLnktbDowO3JldHVybiBNYXRoLnNxcnQoYypjK2gqaCl9Zm9yKHZhciBwPWYoYyk7cDspe2lmKChjKz1wK3IpPmgpcmV0dXJuO3A9ZihjKX1mb3IocD1mKGgpO3A7KXtpZihjPihoLT1wK3IpKXJldHVybjtwPWYoaCl9cmV0dXJue21pbjpjLG1heDpoLGxlbjpoLWMsdG90YWw6dSxpc0Nsb3NlZDowPT09YyYmaD09PXUmJk1hdGguYWJzKG4ueC1pLngpPC4xJiZNYXRoLmFicyhuLnktaS55KTwuMX19LHIuZmluZFBvaW50T25QYXRoPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaSxhLG8scz0obj1ufHx7fSkucGF0aExlbmd0aHx8dC5nZXRUb3RhbExlbmd0aCgpLGw9bi50b2xlcmFuY2V8fC4wMDEsYz1uLml0ZXJhdGlvbkxpbWl0fHwzMCx1PXQuZ2V0UG9pbnRBdExlbmd0aCgwKVtyXT50LmdldFBvaW50QXRMZW5ndGgocylbcl0/LTE6MSxoPTAsZj0wLHA9cztoPGM7KXtpZihpPShmK3ApLzIsbz0oYT10LmdldFBvaW50QXRMZW5ndGgoaSkpW3JdLWUsTWF0aC5hYnMobyk8bClyZXR1cm4gYTt1Km8+MD9wPWk6Zj1pLGgrK31yZXR1cm4gYX19LHtcIi4vbW9kXCI6NzA4fV0sNjk3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXtpZihudWxsPT09KGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCkpKXRocm93IG5ldyBFcnJvcihcIk5vIERPTSBlbGVtZW50IHdpdGggaWQgJ1wiK3QrXCInIGV4aXN0cyBvbiB0aGUgcGFnZS5cIik7cmV0dXJuIGV9aWYobnVsbD09dCl0aHJvdyBuZXcgRXJyb3IoXCJET00gZWxlbWVudCBwcm92aWRlZCBpcyBudWxsIG9yIHVuZGVmaW5lZFwiKTtyZXR1cm4gdH19LHt9XSw2OTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwidGlueWNvbG9yMlwiKSxhPXQoXCJjb2xvci1ub3JtYWxpemVcIiksbz10KFwiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlXCIpLHM9dChcIi4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiKS5kZWZhdWx0TGluZSxsPXQoXCIuL2FycmF5XCIpLmlzQXJyYXlPclR5cGVkQXJyYXksYz1hKHMpLHU9MTtmdW5jdGlvbiBoKHQsZSl7dmFyIHI9dDtyZXR1cm4gclszXSo9ZSxyfWZ1bmN0aW9uIGYodCl7aWYobih0KSlyZXR1cm4gYzt2YXIgZT1hKHQpO3JldHVybiBlLmxlbmd0aD9lOmN9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gbih0KT90OnV9ZS5leHBvcnRzPXtmb3JtYXRDb2xvcjpmdW5jdGlvbih0LGUscil7dmFyIG4saSxzLGQsZyx2PXQuY29sb3IsbT1sKHYpLHk9bChlKSx4PVtdO2lmKG49dm9pZCAwIT09dC5jb2xvcnNjYWxlP28ubWFrZUNvbG9yU2NhbGVGdW5jKG8uZXh0cmFjdFNjYWxlKHQse2NMZXR0ZXI6XCJjXCJ9KSk6ZixpPW0/ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09dFtlXT9jOmEobih0W2VdKSl9OmYscz15P2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PXRbZV0/dTpwKHRbZV0pfTpwLG18fHkpZm9yKHZhciBiPTA7YjxyO2IrKylkPWkodixiKSxnPXMoZSxiKSx4W2JdPWgoZCxnKTtlbHNlIHg9aChhKHYpLGUpO3JldHVybiB4fSxwYXJzZUNvbG9yU2NhbGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9MSksKHQucmV2ZXJzZXNjYWxlP28uZmxpcFNjYWxlKHQuY29sb3JzY2FsZSk6dC5jb2xvcnNjYWxlKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9dFswXSxuPWkodFsxXSkudG9SZ2IoKTtyZXR1cm57aW5kZXg6cixyZ2I6W24ucixuLmcsbi5iLGVdfX0pfX19LHtcIi4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiOjU3NyxcIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZVwiOjU5MCxcIi4vYXJyYXlcIjo2ODQsXCJjb2xvci1ub3JtYWxpemVcIjoxMTEsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMix0aW55Y29sb3IyOjUyMn1dLDY5OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2lkZW50aXR5XCIpO2Z1bmN0aW9uIGkodCl7cmV0dXJuW3RdfWUuZXhwb3J0cz17a2V5RnVuOmZ1bmN0aW9uKHQpe3JldHVybiB0LmtleX0scmVwZWF0OmksZGVzY2VuZDpuLHdyYXA6aSx1bndyYXA6ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19fX0se1wiLi9pZGVudGl0eVwiOjcwMH1dLDcwMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdH19LHt9XSw3MDE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiZmFzdC1pc251bWVyaWNcIiksYT10KFwiLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKSxvPWEuRlBfU0FGRSxzPWEuQkFETlVNLGw9ZS5leHBvcnRzPXt9O2wubmVzdGVkUHJvcGVydHk9dChcIi4vbmVzdGVkX3Byb3BlcnR5XCIpLGwua2V5ZWRDb250YWluZXI9dChcIi4va2V5ZWRfY29udGFpbmVyXCIpLGwucmVsYXRpdmVBdHRyPXQoXCIuL3JlbGF0aXZlX2F0dHJcIiksbC5pc1BsYWluT2JqZWN0PXQoXCIuL2lzX3BsYWluX29iamVjdFwiKSxsLnRvTG9nUmFuZ2U9dChcIi4vdG9fbG9nX3JhbmdlXCIpLGwucmVsaW5rUHJpdmF0ZUtleXM9dChcIi4vcmVsaW5rX3ByaXZhdGVcIik7dmFyIGM9dChcIi4vYXJyYXlcIik7bC5pc1R5cGVkQXJyYXk9Yy5pc1R5cGVkQXJyYXksbC5pc0FycmF5T3JUeXBlZEFycmF5PWMuaXNBcnJheU9yVHlwZWRBcnJheSxsLmlzQXJyYXkxRD1jLmlzQXJyYXkxRCxsLmVuc3VyZUFycmF5PWMuZW5zdXJlQXJyYXksbC5jb25jYXQ9Yy5jb25jYXQsbC5tYXhSb3dMZW5ndGg9Yy5tYXhSb3dMZW5ndGgsbC5taW5Sb3dMZW5ndGg9Yy5taW5Sb3dMZW5ndGg7dmFyIHU9dChcIi4vbW9kXCIpO2wubW9kPXUubW9kLGwubW9kSGFsZj11Lm1vZEhhbGY7dmFyIGg9dChcIi4vY29lcmNlXCIpO2wudmFsT2JqZWN0TWV0YT1oLnZhbE9iamVjdE1ldGEsbC5jb2VyY2U9aC5jb2VyY2UsbC5jb2VyY2UyPWguY29lcmNlMixsLmNvZXJjZUZvbnQ9aC5jb2VyY2VGb250LGwuY29lcmNlSG92ZXJpbmZvPWguY29lcmNlSG92ZXJpbmZvLGwuY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eT1oLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHksbC52YWxpZGF0ZT1oLnZhbGlkYXRlO3ZhciBmPXQoXCIuL2RhdGVzXCIpO2wuZGF0ZVRpbWUybXM9Zi5kYXRlVGltZTJtcyxsLmlzRGF0ZVRpbWU9Zi5pc0RhdGVUaW1lLGwubXMyRGF0ZVRpbWU9Zi5tczJEYXRlVGltZSxsLm1zMkRhdGVUaW1lTG9jYWw9Zi5tczJEYXRlVGltZUxvY2FsLGwuY2xlYW5EYXRlPWYuY2xlYW5EYXRlLGwuaXNKU0RhdGU9Zi5pc0pTRGF0ZSxsLmZvcm1hdERhdGU9Zi5mb3JtYXREYXRlLGwuaW5jcmVtZW50TW9udGg9Zi5pbmNyZW1lbnRNb250aCxsLmRhdGVUaWNrMD1mLmRhdGVUaWNrMCxsLmRmbHRSYW5nZT1mLmRmbHRSYW5nZSxsLmZpbmRFeGFjdERhdGVzPWYuZmluZEV4YWN0RGF0ZXMsbC5NSU5fTVM9Zi5NSU5fTVMsbC5NQVhfTVM9Zi5NQVhfTVM7dmFyIHA9dChcIi4vc2VhcmNoXCIpO2wuZmluZEJpbj1wLmZpbmRCaW4sbC5zb3J0ZXJBc2M9cC5zb3J0ZXJBc2MsbC5zb3J0ZXJEZXM9cC5zb3J0ZXJEZXMsbC5kaXN0aW5jdFZhbHM9cC5kaXN0aW5jdFZhbHMsbC5yb3VuZFVwPXAucm91bmRVcCxsLnNvcnQ9cC5zb3J0LGwuZmluZEluZGV4T2ZNaW49cC5maW5kSW5kZXhPZk1pbjt2YXIgZD10KFwiLi9zdGF0c1wiKTtsLmFnZ051bXM9ZC5hZ2dOdW1zLGwubGVuPWQubGVuLGwubWVhbj1kLm1lYW4sbC5taWRSYW5nZT1kLm1pZFJhbmdlLGwudmFyaWFuY2U9ZC52YXJpYW5jZSxsLnN0ZGV2PWQuc3RkZXYsbC5pbnRlcnA9ZC5pbnRlcnA7dmFyIGc9dChcIi4vbWF0cml4XCIpO2wuaW5pdDJkQXJyYXk9Zy5pbml0MmRBcnJheSxsLnRyYW5zcG9zZVJhZ2dlZD1nLnRyYW5zcG9zZVJhZ2dlZCxsLmRvdD1nLmRvdCxsLnRyYW5zbGF0aW9uTWF0cml4PWcudHJhbnNsYXRpb25NYXRyaXgsbC5yb3RhdGlvbk1hdHJpeD1nLnJvdGF0aW9uTWF0cml4LGwucm90YXRpb25YWU1hdHJpeD1nLnJvdGF0aW9uWFlNYXRyaXgsbC5hcHBseTJEVHJhbnNmb3JtPWcuYXBwbHkyRFRyYW5zZm9ybSxsLmFwcGx5MkRUcmFuc2Zvcm0yPWcuYXBwbHkyRFRyYW5zZm9ybTI7dmFyIHY9dChcIi4vYW5nbGVzXCIpO2wuZGVnMnJhZD12LmRlZzJyYWQsbC5yYWQyZGVnPXYucmFkMmRlZyxsLmFuZ2xlRGVsdGE9di5hbmdsZURlbHRhLGwuYW5nbGVEaXN0PXYuYW5nbGVEaXN0LGwuaXNGdWxsQ2lyY2xlPXYuaXNGdWxsQ2lyY2xlLGwuaXNBbmdsZUluc2lkZVNlY3Rvcj12LmlzQW5nbGVJbnNpZGVTZWN0b3IsbC5pc1B0SW5zaWRlU2VjdG9yPXYuaXNQdEluc2lkZVNlY3RvcixsLnBhdGhBcmM9di5wYXRoQXJjLGwucGF0aFNlY3Rvcj12LnBhdGhTZWN0b3IsbC5wYXRoQW5udWx1cz12LnBhdGhBbm51bHVzO3ZhciBtPXQoXCIuL2FuY2hvcl91dGlsc1wiKTtsLmlzTGVmdEFuY2hvcj1tLmlzTGVmdEFuY2hvcixsLmlzQ2VudGVyQW5jaG9yPW0uaXNDZW50ZXJBbmNob3IsbC5pc1JpZ2h0QW5jaG9yPW0uaXNSaWdodEFuY2hvcixsLmlzVG9wQW5jaG9yPW0uaXNUb3BBbmNob3IsbC5pc01pZGRsZUFuY2hvcj1tLmlzTWlkZGxlQW5jaG9yLGwuaXNCb3R0b21BbmNob3I9bS5pc0JvdHRvbUFuY2hvcjt2YXIgeT10KFwiLi9nZW9tZXRyeTJkXCIpO2wuc2VnbWVudHNJbnRlcnNlY3Q9eS5zZWdtZW50c0ludGVyc2VjdCxsLnNlZ21lbnREaXN0YW5jZT15LnNlZ21lbnREaXN0YW5jZSxsLmdldFRleHRMb2NhdGlvbj15LmdldFRleHRMb2NhdGlvbixsLmNsZWFyTG9jYXRpb25DYWNoZT15LmNsZWFyTG9jYXRpb25DYWNoZSxsLmdldFZpc2libGVTZWdtZW50PXkuZ2V0VmlzaWJsZVNlZ21lbnQsbC5maW5kUG9pbnRPblBhdGg9eS5maW5kUG9pbnRPblBhdGg7dmFyIHg9dChcIi4vZXh0ZW5kXCIpO2wuZXh0ZW5kRmxhdD14LmV4dGVuZEZsYXQsbC5leHRlbmREZWVwPXguZXh0ZW5kRGVlcCxsLmV4dGVuZERlZXBBbGw9eC5leHRlbmREZWVwQWxsLGwuZXh0ZW5kRGVlcE5vQXJyYXlzPXguZXh0ZW5kRGVlcE5vQXJyYXlzO3ZhciBiPXQoXCIuL2xvZ2dlcnNcIik7bC5sb2c9Yi5sb2csbC53YXJuPWIud2FybixsLmVycm9yPWIuZXJyb3I7dmFyIF89dChcIi4vcmVnZXhcIik7bC5jb3VudGVyUmVnZXg9Xy5jb3VudGVyO3ZhciB3PXQoXCIuL3Rocm90dGxlXCIpO2Z1bmN0aW9uIGsodCl7dmFyIGU9e307Zm9yKHZhciByIGluIHQpZm9yKHZhciBuPXRbcl0saT0wO2k8bi5sZW5ndGg7aSsrKWVbbltpXV09K3I7cmV0dXJuIGV9bC50aHJvdHRsZT13LnRocm90dGxlLGwudGhyb3R0bGVEb25lPXcuZG9uZSxsLmNsZWFyVGhyb3R0bGU9dy5jbGVhcixsLmdldEdyYXBoRGl2PXQoXCIuL2dldF9ncmFwaF9kaXZcIiksbC5jbGVhclJlc3BvbnNpdmU9dChcIi4vY2xlYXJfcmVzcG9uc2l2ZVwiKSxsLm1ha2VUcmFjZUdyb3Vwcz10KFwiLi9tYWtlX3RyYWNlX2dyb3Vwc1wiKSxsLl89dChcIi4vbG9jYWxpemVcIiksbC5ub3RpZmllcj10KFwiLi9ub3RpZmllclwiKSxsLmZpbHRlclVuaXF1ZT10KFwiLi9maWx0ZXJfdW5pcXVlXCIpLGwuZmlsdGVyVmlzaWJsZT10KFwiLi9maWx0ZXJfdmlzaWJsZVwiKSxsLnB1c2hVbmlxdWU9dChcIi4vcHVzaF91bmlxdWVcIiksbC5jbGVhbk51bWJlcj10KFwiLi9jbGVhbl9udW1iZXJcIiksbC5lbnN1cmVOdW1iZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCk/KHQ9TnVtYmVyKHQpKTwtb3x8dD5vP3M6aSh0KT9OdW1iZXIodCk6czpzfSxsLmlzSW5kZXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4hKHZvaWQgMCE9PWUmJnQ+PWUpJiYoaSh0KSYmdD49MCYmdCUxPT0wKX0sbC5ub29wPXQoXCIuL25vb3BcIiksbC5pZGVudGl0eT10KFwiLi9pZGVudGl0eVwiKSxsLnJlcGVhdD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspcltuXT10O3JldHVybiByfSxsLnN3YXBBdHRycz1mdW5jdGlvbih0LGUscixuKXtyfHwocj1cInhcIiksbnx8KG49XCJ5XCIpO2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1lW2ldLG89bC5uZXN0ZWRQcm9wZXJ0eSh0LGEucmVwbGFjZShcIj9cIixyKSkscz1sLm5lc3RlZFByb3BlcnR5KHQsYS5yZXBsYWNlKFwiP1wiLG4pKSxjPW8uZ2V0KCk7by5zZXQocy5nZXQoKSkscy5zZXQoYyl9fSxsLnJhaXNlVG9Ub3A9ZnVuY3Rpb24odCl7dC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHQpfSxsLmNhbmNlbFRyYW5zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHQudHJhbnNpdGlvbigpLmR1cmF0aW9uKDApfSxsLmNvbnN0cmFpbj1mdW5jdGlvbih0LGUscil7cmV0dXJuIGU+cj9NYXRoLm1heChyLE1hdGgubWluKGUsdCkpOk1hdGgubWF4KGUsTWF0aC5taW4ocix0KSl9LGwuYkJveEludGVyc2VjdD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHI9cnx8MCx0LmxlZnQ8PWUucmlnaHQrciYmZS5sZWZ0PD10LnJpZ2h0K3ImJnQudG9wPD1lLmJvdHRvbStyJiZlLnRvcDw9dC5ib3R0b20rcn0sbC5zaW1wbGVNYXA9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPXQubGVuZ3RoLGE9bmV3IEFycmF5KGkpLG89MDtvPGk7bysrKWFbb109ZSh0W29dLHIsbik7cmV0dXJuIGF9LGwucmFuZHN0cj1mdW5jdGlvbiB0KGUscixuLGkpe2lmKG58fChuPTE2KSx2b2lkIDA9PT1yJiYocj0yNCkscjw9MClyZXR1cm5cIjBcIjt2YXIgYSxvLHM9TWF0aC5sb2coTWF0aC5wb3coMixyKSkvTWF0aC5sb2cobiksYz1cIlwiO2ZvcihhPTI7cz09PTEvMDthKj0yKXM9TWF0aC5sb2coTWF0aC5wb3coMixyL2EpKS9NYXRoLmxvZyhuKSphO3ZhciB1PXMtTWF0aC5mbG9vcihzKTtmb3IoYT0wO2E8TWF0aC5mbG9vcihzKTthKyspYz1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbikudG9TdHJpbmcobikrYzt1JiYobz1NYXRoLnBvdyhuLHUpLGM9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm8pLnRvU3RyaW5nKG4pK2MpO3ZhciBoPXBhcnNlSW50KGMsbik7cmV0dXJuIGUmJmVbY118fGghPT0xLzAmJmg+PU1hdGgucG93KDIscik/aT4xMD8obC53YXJuKFwicmFuZHN0ciBmYWlsZWQgdW5pcXVlbmVzc1wiKSxjKTp0KGUscixuLChpfHwwKSsxKTpjfSxsLk9wdGlvbkNvbnRyb2w9ZnVuY3Rpb24odCxlKXt0fHwodD17fSksZXx8KGU9XCJvcHRcIik7dmFyIHI9e29wdGlvbkxpc3Q6W10sX25ld29wdGlvbjpmdW5jdGlvbihuKXtuW2VdPXQscltuLm5hbWVdPW4sci5vcHRpb25MaXN0LnB1c2gobil9fTtyZXR1cm4gcltcIl9cIitlXT10LHJ9LGwuc21vb3RoPWZ1bmN0aW9uKHQsZSl7aWYoKGU9TWF0aC5yb3VuZChlKXx8MCk8MilyZXR1cm4gdDt2YXIgcixuLGksYSxvPXQubGVuZ3RoLHM9MipvLGw9MiplLTEsYz1uZXcgQXJyYXkobCksdT1uZXcgQXJyYXkobyk7Zm9yKHI9MDtyPGw7cisrKWNbcl09KDEtTWF0aC5jb3MoTWF0aC5QSSoocisxKS9lKSkvKDIqZSk7Zm9yKHI9MDtyPG87cisrKXtmb3IoYT0wLG49MDtuPGw7bisrKShpPXIrbisxLWUpPC1vP2ktPXMqTWF0aC5yb3VuZChpL3MpOmk+PXMmJihpLT1zKk1hdGguZmxvb3IoaS9zKSksaTwwP2k9LTEtaTppPj1vJiYoaT1zLTEtaSksYSs9dFtpXSpjW25dO3Vbcl09YX1yZXR1cm4gdX0sbC5zeW5jT3JBc3luYz1mdW5jdGlvbih0LGUscil7dmFyIG47ZnVuY3Rpb24gaSgpe3JldHVybiBsLnN5bmNPckFzeW5jKHQsZSxyKX1mb3IoO3QubGVuZ3RoOylpZigobj0oMCx0LnNwbGljZSgwLDEpWzBdKShlKSkmJm4udGhlbilyZXR1cm4gbi50aGVuKGkpLnRoZW4odm9pZCAwLGwucHJvbWlzZUVycm9yKTtyZXR1cm4gciYmcihlKX0sbC5zdHJpcFRyYWlsaW5nU2xhc2g9ZnVuY3Rpb24odCl7cmV0dXJuXCIvXCI9PT10LnN1YnN0cigtMSk/dC5zdWJzdHIoMCx0Lmxlbmd0aC0xKTp0fSxsLm5vbmVPckFsbD1mdW5jdGlvbih0LGUscil7aWYodCl7dmFyIG4saT0hMSxhPSEwO2ZvcihuPTA7bjxyLmxlbmd0aDtuKyspbnVsbCE9dFtyW25dXT9pPSEwOmE9ITE7aWYoaSYmIWEpZm9yKG49MDtuPHIubGVuZ3RoO24rKyl0W3Jbbl1dPWVbcltuXV19fSxsLm1lcmdlQXJyYXk9ZnVuY3Rpb24odCxlLHIpe2lmKGwuaXNBcnJheU9yVHlwZWRBcnJheSh0KSlmb3IodmFyIG49TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpLGk9MDtpPG47aSsrKWVbaV1bcl09dFtpXX0sbC5maWxsQXJyYXk9ZnVuY3Rpb24odCxlLHIsbil7aWYobj1ufHxsLmlkZW50aXR5LGwuaXNBcnJheU9yVHlwZWRBcnJheSh0KSlmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyllW2ldW3JdPW4odFtpXSl9LGwuY2FzdE9wdGlvbj1mdW5jdGlvbih0LGUscixuKXtuPW58fGwuaWRlbnRpdHk7dmFyIGk9bC5uZXN0ZWRQcm9wZXJ0eSh0LHIpLmdldCgpO3JldHVybiBsLmlzQXJyYXlPclR5cGVkQXJyYXkoaSk/QXJyYXkuaXNBcnJheShlKSYmbC5pc0FycmF5T3JUeXBlZEFycmF5KGlbZVswXV0pP24oaVtlWzBdXVtlWzFdXSk6bihpW2VdKTppfSxsLmV4dHJhY3RPcHRpb249ZnVuY3Rpb24odCxlLHIsbil7aWYociBpbiB0KXJldHVybiB0W3JdO3ZhciBpPWwubmVzdGVkUHJvcGVydHkoZSxuKS5nZXQoKTtyZXR1cm4gQXJyYXkuaXNBcnJheShpKT92b2lkIDA6aX0sbC50YWdTZWxlY3RlZD1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhPWUuc2VsZWN0ZWRwb2ludHMsbz1lLl9pbmRleFRvUG9pbnRzO28mJihuPWsobykpO2Zvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgYz1hW3NdO2lmKGwuaXNJbmRleChjKSl7dmFyIHU9bj9uW2NdOmMsaD1yP3JbdV06dTt2b2lkIDAhPT0oaT1oKSYmaTx0Lmxlbmd0aCYmKHRbaF0uc2VsZWN0ZWQ9MSl9fX0sbC5zZWxJbmRpY2VzMnNlbFBvaW50cz1mdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdGVkcG9pbnRzLHI9dC5faW5kZXhUb1BvaW50cztpZihyKXtmb3IodmFyIG49ayhyKSxpPVtdLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIG89ZVthXTtpZihsLmlzSW5kZXgobykpe3ZhciBzPW5bb107bC5pc0luZGV4KHMpJiZpLnB1c2gocyl9fXJldHVybiBpfXJldHVybiBlfSxsLmdldFRhcmdldEFycmF5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS50YXJnZXQ7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHImJnIpe3ZhciBuPWwubmVzdGVkUHJvcGVydHkodCxyKS5nZXQoKTtyZXR1cm4hIUFycmF5LmlzQXJyYXkobikmJm59cmV0dXJuISFBcnJheS5pc0FycmF5KHIpJiZyfSxsLm1pbkV4dGVuZD1mdW5jdGlvbih0LGUpe3ZhciByPXt9O1wib2JqZWN0XCIhPXR5cGVvZiBlJiYoZT17fSk7dmFyIG4saSxhLG89T2JqZWN0LmtleXModCk7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylhPXRbaT1vW25dXSxcIl9cIiE9PWkuY2hhckF0KDApJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBhJiYoXCJtb2R1bGVcIj09PWk/cltpXT1hOkFycmF5LmlzQXJyYXkoYSk/cltpXT1cImNvbG9yc2NhbGVcIj09PWk/YS5zbGljZSgpOmEuc2xpY2UoMCwzKTpyW2ldPWEmJlwib2JqZWN0XCI9PXR5cGVvZiBhP2wubWluRXh0ZW5kKHRbaV0sZVtpXSk6YSk7Zm9yKG89T2JqZWN0LmtleXMoZSksbj0wO248by5sZW5ndGg7bisrKVwib2JqZWN0XCI9PXR5cGVvZihhPWVbaT1vW25dXSkmJmkgaW4gciYmXCJvYmplY3RcIj09dHlwZW9mIHJbaV18fChyW2ldPWEpO3JldHVybiByfSxsLnRpdGxlQ2FzZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnN1YnN0cigxKX0sbC5jb250YWluc0FueT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKC0xIT09dC5pbmRleE9mKGVbcl0pKXJldHVybiEwO3JldHVybiExfSxsLmlzUGxvdERpdj1mdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KTtyZXR1cm4gZS5ub2RlKClpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZlLnNpemUoKSYmZS5jbGFzc2VkKFwianMtcGxvdGx5LXBsb3RcIil9LGwucmVtb3ZlRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10JiZ0LnBhcmVudE5vZGU7ZSYmZS5yZW1vdmVDaGlsZCh0KX0sbC5hZGRTdHlsZVJ1bGU9ZnVuY3Rpb24odCxlKXtsLmFkZFJlbGF0ZWRTdHlsZVJ1bGUoXCJnbG9iYWxcIix0LGUpfSxsLmFkZFJlbGF0ZWRTdHlsZVJ1bGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVwicGxvdGx5LmpzLXN0eWxlLVwiK3QsaT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChuKTtpfHwoKGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpKS5zZXRBdHRyaWJ1dGUoXCJpZFwiLG4pLGkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIikpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoaSkpO3ZhciBhPWkuc2hlZXQ7YS5pbnNlcnRSdWxlP2EuaW5zZXJ0UnVsZShlK1wie1wiK3IrXCJ9XCIsMCk6YS5hZGRSdWxlP2EuYWRkUnVsZShlLHIsMCk6bC53YXJuKFwiYWRkU3R5bGVSdWxlIGZhaWxlZFwiKX0sbC5kZWxldGVSZWxhdGVkU3R5bGVSdWxlPWZ1bmN0aW9uKHQpe3ZhciBlPVwicGxvdGx5LmpzLXN0eWxlLVwiK3Qscj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTtyJiZsLnJlbW92ZUVsZW1lbnQocil9LGwuaXNJRT1mdW5jdGlvbigpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2J9LGwuaXNEM1NlbGVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgdC5jbGFzc2VkfSxsLmVuc3VyZVNpbmdsZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10LnNlbGVjdChlKyhyP1wiLlwiK3I6XCJcIikpO2lmKGkuc2l6ZSgpKXJldHVybiBpO3ZhciBhPXQuYXBwZW5kKGUpO3JldHVybiByJiZhLmNsYXNzZWQociwhMCksbiYmYS5jYWxsKG4pLGF9LGwuZW5zdXJlU2luZ2xlQnlJZD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10LnNlbGVjdChlK1wiI1wiK3IpO2lmKGkuc2l6ZSgpKXJldHVybiBpO3ZhciBhPXQuYXBwZW5kKGUpLmF0dHIoXCJpZFwiLHIpO3JldHVybiBuJiZhLmNhbGwobiksYX0sbC5vYmplY3RGcm9tUGF0aD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuPXQuc3BsaXQoXCIuXCIpLGk9cj17fSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBvPW5bYV0scz1udWxsLGw9blthXS5tYXRjaCgvKC4qKVxcWyhbMC05XSspXFxdLyk7bD8obz1sWzFdLHM9bFsyXSxyPXJbb109W10sYT09PW4ubGVuZ3RoLTE/cltzXT1lOnJbc109e30scj1yW3NdKTooYT09PW4ubGVuZ3RoLTE/cltvXT1lOnJbb109e30scj1yW29dKX1yZXR1cm4gaX07dmFyIEE9L14oW15cXFtcXC5dKylcXC4oLispPy8sVD0vXihbXlxcLl0rKVxcWyhbMC05XSspXFxdKFxcLik/KC4rKT8vO2wuZXhwYW5kT2JqZWN0UGF0aHM9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHM7aWYoXCJvYmplY3RcIj09dHlwZW9mIHQmJiFBcnJheS5pc0FycmF5KHQpKWZvcihyIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShyKSYmKChlPXIubWF0Y2goQSkpPyhpPXRbcl0sbj1lWzFdLGRlbGV0ZSB0W3JdLHRbbl09bC5leHRlbmREZWVwTm9BcnJheXModFtuXXx8e30sbC5vYmplY3RGcm9tUGF0aChyLGwuZXhwYW5kT2JqZWN0UGF0aHMoaSkpW25dKSk6KGU9ci5tYXRjaChUKSk/KGk9dFtyXSxuPWVbMV0sYT1wYXJzZUludChlWzJdKSxkZWxldGUgdFtyXSx0W25dPXRbbl18fFtdLFwiLlwiPT09ZVszXT8ocz1lWzRdLG89dFtuXVthXT10W25dW2FdfHx7fSxsLmV4dGVuZERlZXBOb0FycmF5cyhvLGwub2JqZWN0RnJvbVBhdGgocyxsLmV4cGFuZE9iamVjdFBhdGhzKGkpKSkpOnRbbl1bYV09bC5leHBhbmRPYmplY3RQYXRocyhpKSk6dFtyXT1sLmV4cGFuZE9iamVjdFBhdGhzKHRbcl0pKTtyZXR1cm4gdH0sbC5udW1TZXBhcmF0ZT1mdW5jdGlvbih0LGUscil7aWYocnx8KHI9ITEpLFwic3RyaW5nXCIhPXR5cGVvZiBlfHwwPT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiU2VwYXJhdG9yIHN0cmluZyByZXF1aXJlZCBmb3IgZm9ybWF0dGluZyFcIik7XCJudW1iZXJcIj09dHlwZW9mIHQmJih0PVN0cmluZyh0KSk7dmFyIG49LyhcXGQrKShcXGR7M30pLyxpPWUuY2hhckF0KDApLGE9ZS5jaGFyQXQoMSksbz10LnNwbGl0KFwiLlwiKSxzPW9bMF0sbD1vLmxlbmd0aD4xP2krb1sxXTpcIlwiO2lmKGEmJihvLmxlbmd0aD4xfHxzLmxlbmd0aD40fHxyKSlmb3IoO24udGVzdChzKTspcz1zLnJlcGxhY2UobixcIiQxXCIrYStcIiQyXCIpO3JldHVybiBzK2x9LGwuVEVNUExBVEVfU1RSSU5HX1JFR0VYPS8leyhbXlxccyV7fTpdKikoOltefV0qKT99L2c7dmFyIE09L15cXHcqJC87bC50ZW1wbGF0ZVN0cmluZz1mdW5jdGlvbih0LGUpe3ZhciByPXt9O3JldHVybiB0LnJlcGxhY2UobC5URU1QTEFURV9TVFJJTkdfUkVHRVgsZnVuY3Rpb24odCxuKXtyZXR1cm4gTS50ZXN0KG4pP2Vbbl18fFwiXCI6KHJbbl09cltuXXx8bC5uZXN0ZWRQcm9wZXJ0eShlLG4pLmdldCxyW25dKCl8fFwiXCIpfSl9O3ZhciBTPS9eOi8sRT0wO2wuaG92ZXJ0ZW1wbGF0ZVN0cmluZz1mdW5jdGlvbih0LGUscil7dmFyIGk9YXJndW1lbnRzLGE9e307cmV0dXJuIHQucmVwbGFjZShsLlRFTVBMQVRFX1NUUklOR19SRUdFWCxmdW5jdGlvbih0LG8scyl7dmFyIGMsdSxoO2ZvcihoPTM7aDxpLmxlbmd0aDtoKyspe2lmKChjPWlbaF0pLmhhc093blByb3BlcnR5KG8pKXt1PWNbb107YnJlYWt9aWYoTS50ZXN0KG8pfHwodT1hW29dfHxsLm5lc3RlZFByb3BlcnR5KGMsbykuZ2V0KCkpJiYoYVtvXT11KSx2b2lkIDAhPT11KWJyZWFrfSh2b2lkIDA9PT11JiYoRTwxMCYmKGwud2FybihcIlZhcmlhYmxlICdcIitvK1wiJyBpbiBob3ZlcnRlbXBsYXRlIGNvdWxkIG5vdCBiZSBmb3VuZCFcIiksdT10KSwxMD09PUUmJmwud2FybihcIlRvbyBtYW55IGhvdmVydGVtcGxhdGUgd2FybmluZ3MgLSBhZGRpdGlvbmFsIHdhcm5pbmdzIHdpbGwgYmUgc3VwcHJlc3NlZFwiKSxFKyspLHMpP3U9KHI/ci5udW1iZXJGb3JtYXQ6bi5mb3JtYXQpKHMucmVwbGFjZShTLFwiXCIpKSh1KTplLmhhc093blByb3BlcnR5KG8rXCJMYWJlbFwiKSYmKHU9ZVtvK1wiTGFiZWxcIl0pO3JldHVybiB1fSl9O2wuc3VicGxvdFNvcnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpKzEsbj0wLGk9MCxhPTA7YTxyO2ErKyl7dmFyIG89dC5jaGFyQ29kZUF0KGEpfHwwLHM9ZS5jaGFyQ29kZUF0KGEpfHwwLGw9bz49NDgmJm88PTU3LGM9cz49NDgmJnM8PTU3O2lmKGwmJihuPTEwKm4rby00OCksYyYmKGk9MTAqaStzLTQ4KSwhbHx8IWMpe2lmKG4hPT1pKXJldHVybiBuLWk7aWYobyE9PXMpcmV0dXJuIG8tc319cmV0dXJuIGktbn07dmFyIEM9MmU5O2wuc2VlZFBzZXVkb1JhbmRvbT1mdW5jdGlvbigpe0M9MmU5fSxsLnBzZXVkb1JhbmRvbT1mdW5jdGlvbigpe3ZhciB0PUM7cmV0dXJuIEM9KDY5MDY5KkMrMSklNDI5NDk2NzI5NixNYXRoLmFicyhDLXQpPDQyOTQ5NjcyOT9sLnBzZXVkb1JhbmRvbSgpOkMvNDI5NDk2NzI5Nn19LHtcIi4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuL2FuY2hvcl91dGlsc1wiOjY4MixcIi4vYW5nbGVzXCI6NjgzLFwiLi9hcnJheVwiOjY4NCxcIi4vY2xlYW5fbnVtYmVyXCI6Njg1LFwiLi9jbGVhcl9yZXNwb25zaXZlXCI6Njg3LFwiLi9jb2VyY2VcIjo2ODgsXCIuL2RhdGVzXCI6Njg5LFwiLi9leHRlbmRcIjo2OTEsXCIuL2ZpbHRlcl91bmlxdWVcIjo2OTIsXCIuL2ZpbHRlcl92aXNpYmxlXCI6NjkzLFwiLi9nZW9tZXRyeTJkXCI6Njk2LFwiLi9nZXRfZ3JhcGhfZGl2XCI6Njk3LFwiLi9pZGVudGl0eVwiOjcwMCxcIi4vaXNfcGxhaW5fb2JqZWN0XCI6NzAyLFwiLi9rZXllZF9jb250YWluZXJcIjo3MDMsXCIuL2xvY2FsaXplXCI6NzA0LFwiLi9sb2dnZXJzXCI6NzA1LFwiLi9tYWtlX3RyYWNlX2dyb3Vwc1wiOjcwNixcIi4vbWF0cml4XCI6NzA3LFwiLi9tb2RcIjo3MDgsXCIuL25lc3RlZF9wcm9wZXJ0eVwiOjcwOSxcIi4vbm9vcFwiOjcxMCxcIi4vbm90aWZpZXJcIjo3MTEsXCIuL3B1c2hfdW5pcXVlXCI6NzE1LFwiLi9yZWdleFwiOjcxNyxcIi4vcmVsYXRpdmVfYXR0clwiOjcxOCxcIi4vcmVsaW5rX3ByaXZhdGVcIjo3MTksXCIuL3NlYXJjaFwiOjcyMCxcIi4vc3RhdHNcIjo3MjMsXCIuL3Rocm90dGxlXCI6NzI2LFwiLi90b19sb2dfcmFuZ2VcIjo3MjcsZDM6MTU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw3MDI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHdpbmRvdyYmd2luZG93LnByb2Nlc3MmJndpbmRvdy5wcm9jZXNzLnZlcnNpb25zP1wiW29iamVjdCBPYmplY3RdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk6XCJbb2JqZWN0IE9iamVjdF1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSYmT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpPT09T2JqZWN0LnByb3RvdHlwZX19LHt9XSw3MDM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9uZXN0ZWRfcHJvcGVydHlcIiksaT0vXlxcdyokLztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG8scyxsO3I9cnx8XCJuYW1lXCIsYT1hfHxcInZhbHVlXCI7dmFyIGM9e307ZSYmZS5sZW5ndGg/KGw9bih0LGUpLHM9bC5nZXQoKSk6cz10LGU9ZXx8XCJcIjt2YXIgdT17fTtpZihzKWZvcihvPTA7bzxzLmxlbmd0aDtvKyspdVtzW29dW3JdXT1vO3ZhciBoPWkudGVzdChhKSxmPXtzZXQ6ZnVuY3Rpb24odCxlKXt2YXIgaT1udWxsPT09ZT80OjA7aWYoIXMpe2lmKCFsfHw0PT09aSlyZXR1cm47cz1bXSxsLnNldChzKX12YXIgbz11W3RdO2lmKHZvaWQgMD09PW8pe2lmKDQ9PT1pKXJldHVybjtpfD0zLG89cy5sZW5ndGgsdVt0XT1vfWVsc2UgZSE9PShoP3Nbb11bYV06bihzW29dLGEpLmdldCgpKSYmKGl8PTIpO3ZhciBwPXNbb109c1tvXXx8e307cmV0dXJuIHBbcl09dCxoP3BbYV09ZTpuKHAsYSkuc2V0KGUpLG51bGwhPT1lJiYoaSY9LTUpLGNbb109Y1tvXXxpLGZ9LGdldDpmdW5jdGlvbih0KXtpZihzKXt2YXIgZT11W3RdO3JldHVybiB2b2lkIDA9PT1lP3ZvaWQgMDpoP3NbZV1bYV06bihzW2VdLGEpLmdldCgpfX0scmVuYW1lOmZ1bmN0aW9uKHQsZSl7dmFyIG49dVt0XTtyZXR1cm4gdm9pZCAwPT09bj9mOihjW25dPTF8Y1tuXSx1W2VdPW4sZGVsZXRlIHVbdF0sc1tuXVtyXT1lLGYpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dVt0XTtpZih2b2lkIDA9PT1lKXJldHVybiBmO3ZhciBpPXNbZV07aWYoT2JqZWN0LmtleXMoaSkubGVuZ3RoPjIpcmV0dXJuIGNbZV09MnxjW2VdLGYuc2V0KHQsbnVsbCk7aWYoaCl7Zm9yKG89ZTtvPHMubGVuZ3RoO28rKyljW29dPTN8Y1tvXTtmb3Iobz1lO288cy5sZW5ndGg7bysrKXVbc1tvXVtyXV0tLTtzLnNwbGljZShlLDEpLGRlbGV0ZSB1W3RdfWVsc2UgbihpLGEpLnNldChudWxsKSxjW2VdPTZ8Y1tlXTtyZXR1cm4gZn0sY29uc3RydWN0VXBkYXRlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0LGksbz17fSxsPU9iamVjdC5rZXlzKGMpLHU9MDt1PGwubGVuZ3RoO3UrKylpPWxbdV0sdD1lK1wiW1wiK2krXCJdXCIsc1tpXT8oMSZjW2ldJiYob1t0K1wiLlwiK3JdPXNbaV1bcl0pLDImY1tpXSYmKG9bdCtcIi5cIithXT1oPzQmY1tpXT9udWxsOnNbaV1bYV06NCZjW2ldP251bGw6bihzW2ldLGEpLmdldCgpKSk6b1t0XT1udWxsO3JldHVybiBvfX07cmV0dXJuIGZ9fSx7XCIuL25lc3RlZF9wcm9wZXJ0eVwiOjcwOX1dLDcwNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9yZWdpc3RyeVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5fY29udGV4dC5sb2NhbGUsaT0wO2k8MjtpKyspe2Zvcih2YXIgYT10Ll9jb250ZXh0LmxvY2FsZXMsbz0wO288MjtvKyspe3ZhciBzPShhW3JdfHx7fSkuZGljdGlvbmFyeTtpZihzKXt2YXIgbD1zW2VdO2lmKGwpcmV0dXJuIGx9YT1uLmxvY2FsZVJlZ2lzdHJ5fXZhciBjPXIuc3BsaXQoXCItXCIpWzBdO2lmKGM9PT1yKWJyZWFrO3I9Y31yZXR1cm4gZX19LHtcIi4uL3JlZ2lzdHJ5XCI6ODI5fV0sNzA1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnXCIpLmRmbHRDb25maWcsaT1lLmV4cG9ydHM9e307ZnVuY3Rpb24gYSh0LGUpe2lmKHQmJnQuYXBwbHkpdHJ5e3JldHVybiB2b2lkIHQuYXBwbHkoY29uc29sZSxlKX1jYXRjaCh0KXt9Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdHJ5e3QoZVtyXSl9Y2F0Y2godCl7Y29uc29sZS5sb2coZVtyXSl9fWkubG9nPWZ1bmN0aW9uKCl7aWYobi5sb2dnaW5nPjEpe2Zvcih2YXIgdD1bXCJMT0c6XCJdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXQucHVzaChhcmd1bWVudHNbZV0pO2EoY29uc29sZS50cmFjZXx8Y29uc29sZS5sb2csdCl9fSxpLndhcm49ZnVuY3Rpb24oKXtpZihuLmxvZ2dpbmc+MCl7Zm9yKHZhciB0PVtcIldBUk46XCJdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXQucHVzaChhcmd1bWVudHNbZV0pO2EoY29uc29sZS50cmFjZXx8Y29uc29sZS5sb2csdCl9fSxpLmVycm9yPWZ1bmN0aW9uKCl7aWYobi5sb2dnaW5nPjApe2Zvcih2YXIgdD1bXCJFUlJPUjpcIl0sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdC5wdXNoKGFyZ3VtZW50c1tlXSk7YShjb25zb2xlLmVycm9yLHQpfX19LHtcIi4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnXCI6NzM3fV0sNzA2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LnNlbGVjdEFsbChcImcuXCIrci5yZXBsYWNlKC9cXHMvZyxcIi5cIikpLmRhdGEoZSxmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS51aWR9KTtyZXR1cm4gbi5leGl0KCkucmVtb3ZlKCksbi5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsciksbi5vcmRlcigpLG59fSx7fV0sNzA3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ci5pbml0MmRBcnJheT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodCksbj0wO248dDtuKyspcltuXT1uZXcgQXJyYXkoZSk7cmV0dXJuIHJ9LHIudHJhbnNwb3NlUmFnZ2VkPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj0wLGk9dC5sZW5ndGg7Zm9yKGU9MDtlPGk7ZSsrKW49TWF0aC5tYXgobix0W2VdLmxlbmd0aCk7dmFyIGE9bmV3IEFycmF5KG4pO2ZvcihlPTA7ZTxuO2UrKylmb3IoYVtlXT1uZXcgQXJyYXkoaSkscj0wO3I8aTtyKyspYVtlXVtyXT10W3JdW2VdO3JldHVybiBhfSxyLmRvdD1mdW5jdGlvbih0LGUpe2lmKCF0Lmxlbmd0aHx8IWUubGVuZ3RofHx0Lmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybiBudWxsO3ZhciBuLGksYT10Lmxlbmd0aDtpZih0WzBdLmxlbmd0aClmb3Iobj1uZXcgQXJyYXkoYSksaT0wO2k8YTtpKyspbltpXT1yLmRvdCh0W2ldLGUpO2Vsc2UgaWYoZVswXS5sZW5ndGgpe3ZhciBvPXIudHJhbnNwb3NlUmFnZ2VkKGUpO2ZvcihuPW5ldyBBcnJheShvLmxlbmd0aCksaT0wO2k8by5sZW5ndGg7aSsrKW5baV09ci5kb3QodCxvW2ldKX1lbHNlIGZvcihuPTAsaT0wO2k8YTtpKyspbis9dFtpXSplW2ldO3JldHVybiBufSxyLnRyYW5zbGF0aW9uTWF0cml4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW1sxLDAsdF0sWzAsMSxlXSxbMCwwLDFdXX0sci5yb3RhdGlvbk1hdHJpeD1mdW5jdGlvbih0KXt2YXIgZT10Kk1hdGguUEkvMTgwO3JldHVybltbTWF0aC5jb3MoZSksLU1hdGguc2luKGUpLDBdLFtNYXRoLnNpbihlKSxNYXRoLmNvcyhlKSwwXSxbMCwwLDFdXX0sci5yb3RhdGlvblhZTWF0cml4PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gci5kb3Qoci5kb3Qoci50cmFuc2xhdGlvbk1hdHJpeChlLG4pLHIucm90YXRpb25NYXRyaXgodCkpLHIudHJhbnNsYXRpb25NYXRyaXgoLWUsLW4pKX0sci5hcHBseTJEVHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50czszPT09ZS5sZW5ndGgmJihlPWVbMF0pO3ZhciBuPTE9PT1hcmd1bWVudHMubGVuZ3RoP2VbMF06W2VbMF0sZVsxXV07cmV0dXJuIHIuZG90KHQsW25bMF0sblsxXSwxXSkuc2xpY2UoMCwyKX19LHIuYXBwbHkyRFRyYW5zZm9ybTI9ZnVuY3Rpb24odCl7dmFyIGU9ci5hcHBseTJEVHJhbnNmb3JtKHQpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0LnNsaWNlKDAsMikpLmNvbmNhdChlKHQuc2xpY2UoMiw0KSkpfX19LHt9XSw3MDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e21vZDpmdW5jdGlvbih0LGUpe3ZhciByPXQlZTtyZXR1cm4gcjwwP3IrZTpyfSxtb2RIYWxmOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguYWJzKHQpPmUvMj90LU1hdGgucm91bmQodC9lKSplOnR9fX0se31dLDcwOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuL2FycmF5XCIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYobihlKSllPVN0cmluZyhlKTtlbHNlIGlmKFwic3RyaW5nXCIhPXR5cGVvZiBlfHxcIlstMV1cIj09PWUuc3Vic3RyKGUubGVuZ3RoLTQpKXRocm93XCJiYWQgcHJvcGVydHkgc3RyaW5nXCI7Zm9yKHZhciByLGEsbyxsPTAsYz1lLnNwbGl0KFwiLlwiKTtsPGMubGVuZ3RoOyl7aWYocj1TdHJpbmcoY1tsXSkubWF0Y2goL14oW15cXFtcXF1dKikoKFxcW1xcLT9bMC05XSpcXF0pKykkLykpe2lmKHJbMV0pY1tsXT1yWzFdO2Vsc2V7aWYoMCE9PWwpdGhyb3dcImJhZCBwcm9wZXJ0eSBzdHJpbmdcIjtjLnNwbGljZSgwLDEpfWZvcihhPXJbMl0uc3Vic3RyKDEsclsyXS5sZW5ndGgtMikuc3BsaXQoXCJdW1wiKSxvPTA7bzxhLmxlbmd0aDtvKyspbCsrLGMuc3BsaWNlKGwsMCxOdW1iZXIoYVtvXSkpfWwrK31yZXR1cm5cIm9iamVjdFwiIT10eXBlb2YgdD9mdW5jdGlvbih0LGUscil7cmV0dXJue3NldDpmdW5jdGlvbigpe3Rocm93XCJiYWQgY29udGFpbmVyXCJ9LGdldDpmdW5jdGlvbigpe30sYXN0cjplLHBhcnRzOnIsb2JqOnR9fSh0LGUsYyk6e3NldDpzKHQsYyxlKSxnZXQ6ZnVuY3Rpb24gdChlLHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuLGEsbyxzLGwsYz1lO2ZvcihzPTA7czxyLmxlbmd0aC0xO3MrKyl7aWYoLTE9PT0obj1yW3NdKSl7Zm9yKGE9ITAsbz1bXSxsPTA7bDxjLmxlbmd0aDtsKyspb1tsXT10KGNbbF0sci5zbGljZShzKzEpKSgpLG9bbF0hPT1vWzBdJiYoYT0hMSk7cmV0dXJuIGE/b1swXTpvfWlmKFwibnVtYmVyXCI9PXR5cGVvZiBuJiYhaShjKSlyZXR1cm47aWYoXCJvYmplY3RcIiE9dHlwZW9mKGM9Y1tuXSl8fG51bGw9PT1jKXJldHVybn1pZihcIm9iamVjdFwiPT10eXBlb2YgYyYmbnVsbCE9PWMmJm51bGwhPT0obz1jW3Jbc11dKSlyZXR1cm4gb319KHQsYyksYXN0cjplLHBhcnRzOmMsb2JqOnR9fTt2YXIgYT0vKF58XFwuKWFyZ3NcXFsvO2Z1bmN0aW9uIG8odCxlKXtyZXR1cm4gdm9pZCAwPT09dHx8bnVsbD09PXQmJiFlLm1hdGNoKGEpfWZ1bmN0aW9uIHModCxlLHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgYSxzLGg9dCxmPVwiXCIscD1bW3QsZl1dLGQ9byhuLHIpO2ZvcihzPTA7czxlLmxlbmd0aC0xO3MrKyl7aWYoXCJudW1iZXJcIj09dHlwZW9mKGE9ZVtzXSkmJiFpKGgpKXRocm93XCJhcnJheSBpbmRleCBidXQgY29udGFpbmVyIGlzIG5vdCBhbiBhcnJheVwiO2lmKC0xPT09YSl7aWYoZD0hYyhoLGUuc2xpY2UocysxKSxuLHIpKWJyZWFrO3JldHVybn1pZighdShoLGEsZVtzKzFdLGQpKWJyZWFrO2lmKFwib2JqZWN0XCIhPXR5cGVvZihoPWhbYV0pfHxudWxsPT09aCl0aHJvd1wiY29udGFpbmVyIGlzIG5vdCBhbiBvYmplY3RcIjtmPWwoZixhKSxwLnB1c2goW2gsZl0pfWlmKGQpe2lmKHM9PT1lLmxlbmd0aC0xJiYoZGVsZXRlIGhbZVtzXV0sQXJyYXkuaXNBcnJheShoKSYmK2Vbc109PWgubGVuZ3RoLTEpKWZvcig7aC5sZW5ndGgmJnZvaWQgMD09PWhbaC5sZW5ndGgtMV07KWgucG9wKCl9ZWxzZSBoW2Vbc11dPW59fWZ1bmN0aW9uIGwodCxlKXt2YXIgcj1lO3JldHVybiBuKGUpP3I9XCJbXCIrZStcIl1cIjp0JiYocj1cIi5cIitlKSx0K3J9ZnVuY3Rpb24gYyh0LGUscixuKXt2YXIgYSxsPWkociksYz0hMCxoPXIsZj1uLnJlcGxhY2UoXCItMVwiLDApLHA9IWwmJm8ocixmKSxkPWVbMF07Zm9yKGE9MDthPHQubGVuZ3RoO2ErKylmPW4ucmVwbGFjZShcIi0xXCIsYSksbCYmKHA9byhoPXJbYSVyLmxlbmd0aF0sZikpLHAmJihjPSExKSx1KHQsYSxkLHApJiZzKHRbYV0sZSxuLnJlcGxhY2UoXCItMVwiLGEpKShoKTtyZXR1cm4gY31mdW5jdGlvbiB1KHQsZSxyLG4pe2lmKHZvaWQgMD09PXRbZV0pe2lmKG4pcmV0dXJuITE7dFtlXT1cIm51bWJlclwiPT10eXBlb2Ygcj9bXTp7fX1yZXR1cm4hMH19LHtcIi4vYXJyYXlcIjo2ODQsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDcxMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbigpe319LHt9XSw3MTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiZmFzdC1pc251bWVyaWNcIiksYT1bXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZigtMT09PWEuaW5kZXhPZih0KSl7YS5wdXNoKHQpO3ZhciByPTFlMztpKGUpP3I9ZTpcImxvbmdcIj09PWUmJihyPTNlMyk7dmFyIG89bi5zZWxlY3QoXCJib2R5XCIpLnNlbGVjdEFsbChcIi5wbG90bHktbm90aWZpZXJcIikuZGF0YShbMF0pO28uZW50ZXIoKS5hcHBlbmQoXCJkaXZcIikuY2xhc3NlZChcInBsb3RseS1ub3RpZmllclwiLCEwKSxvLnNlbGVjdEFsbChcIi5ub3RpZmllci1ub3RlXCIpLmRhdGEoYSkuZW50ZXIoKS5hcHBlbmQoXCJkaXZcIikuY2xhc3NlZChcIm5vdGlmaWVyLW5vdGVcIiwhMCkuc3R5bGUoXCJvcGFjaXR5XCIsMCkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKTtlLmFwcGVuZChcImJ1dHRvblwiKS5jbGFzc2VkKFwibm90aWZpZXItY2xvc2VcIiwhMCkuaHRtbChcIiZ0aW1lcztcIikub24oXCJjbGlja1wiLGZ1bmN0aW9uKCl7ZS50cmFuc2l0aW9uKCkuY2FsbChzKX0pO2Zvcih2YXIgaT1lLmFwcGVuZChcInBcIiksYT10LnNwbGl0KC88YnJcXHMqXFwvPz4vZyksbz0wO288YS5sZW5ndGg7bysrKW8mJmkuYXBwZW5kKFwiYnJcIiksaS5hcHBlbmQoXCJzcGFuXCIpLnRleHQoYVtvXSk7ZS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNzAwKS5zdHlsZShcIm9wYWNpdHlcIiwxKS50cmFuc2l0aW9uKCkuZGVsYXkocikuY2FsbChzKX0pfWZ1bmN0aW9uIHModCl7dC5kdXJhdGlvbig3MDApLnN0eWxlKFwib3BhY2l0eVwiLDApLmVhY2goXCJlbmRcIixmdW5jdGlvbih0KXt2YXIgZT1hLmluZGV4T2YodCk7LTEhPT1lJiZhLnNwbGljZShlLDEpLG4uc2VsZWN0KHRoaXMpLnJlbW92ZSgpfSl9fX0se2QzOjE1NSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sNzEyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vc2V0Y3Vyc29yXCIpLGk9XCJkYXRhLXNhdmVkY3Vyc29yXCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5hdHRyKGkpO2lmKGUpe2lmKCFyKXtmb3IodmFyIGE9KHQuYXR0cihcImNsYXNzXCIpfHxcIlwiKS5zcGxpdChcIiBcIiksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dOzA9PT1zLmluZGV4T2YoXCJjdXJzb3ItXCIpJiZ0LmF0dHIoaSxzLnN1YnN0cig3KSkuY2xhc3NlZChzLCExKX10LmF0dHIoaSl8fHQuYXR0cihpLFwiISFcIil9bih0LGUpfWVsc2UgciYmKHQuYXR0cihpLG51bGwpLFwiISFcIj09PXI/bih0KTpuKHQscikpfX0se1wiLi9zZXRjdXJzb3JcIjo3MjF9XSw3MTM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9tYXRyaXhcIikuZG90LGk9dChcIi4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNLGE9ZS5leHBvcnRzPXt9O2EudGVzdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5zbGljZSgpLG49clswXVswXSxhPW4sbz1yWzBdWzFdLHM9bztmb3Ioci5wdXNoKHJbMF0pLGU9MTtlPHIubGVuZ3RoO2UrKyluPU1hdGgubWluKG4scltlXVswXSksYT1NYXRoLm1heChhLHJbZV1bMF0pLG89TWF0aC5taW4obyxyW2VdWzFdKSxzPU1hdGgubWF4KHMscltlXVsxXSk7dmFyIGwsYz0hMTs1PT09ci5sZW5ndGgmJihyWzBdWzBdPT09clsxXVswXT9yWzJdWzBdPT09clszXVswXSYmclswXVsxXT09PXJbM11bMV0mJnJbMV1bMV09PT1yWzJdWzFdJiYoYz0hMCxsPWZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPT09clswXVswXX0pOnJbMF1bMV09PT1yWzFdWzFdJiZyWzJdWzFdPT09clszXVsxXSYmclswXVswXT09PXJbM11bMF0mJnJbMV1bMF09PT1yWzJdWzBdJiYoYz0hMCxsPWZ1bmN0aW9uKHQpe3JldHVybiB0WzFdPT09clswXVsxXX0pKTt2YXIgdT0hMCxoPXJbMF07Zm9yKGU9MTtlPHIubGVuZ3RoO2UrKylpZihoWzBdIT09cltlXVswXXx8aFsxXSE9PXJbZV1bMV0pe3U9ITE7YnJlYWt9cmV0dXJue3htaW46bix4bWF4OmEseW1pbjpvLHltYXg6cyxwdHM6cixjb250YWluczpjP2Z1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxjPXRbMV07cmV0dXJuIShyPT09aXx8cjxufHxyPmF8fGM9PT1pfHxjPG98fGM+c3x8ZSYmbCh0KSl9OmZ1bmN0aW9uKHQsZSl7dmFyIGw9dFswXSxjPXRbMV07aWYobD09PWl8fGw8bnx8bD5hfHxjPT09aXx8YzxvfHxjPnMpcmV0dXJuITE7dmFyIHUsaCxmLHAsZCxnPXIubGVuZ3RoLHY9clswXVswXSxtPXJbMF1bMV0seT0wO2Zvcih1PTE7dTxnO3UrKylpZihoPXYsZj1tLHY9clt1XVswXSxtPXJbdV1bMV0sIShsPChwPU1hdGgubWluKGgsdikpfHxsPk1hdGgubWF4KGgsdil8fGM+TWF0aC5tYXgoZixtKSkpaWYoYzxNYXRoLm1pbihmLG0pKWwhPT1wJiZ5Kys7ZWxzZXtpZihjPT09KGQ9dj09PWg/YzpmKyhsLWgpKihtLWYpLyh2LWgpKSlyZXR1cm4gMSE9PXV8fCFlO2M8PWQmJmwhPT1wJiZ5Kyt9cmV0dXJuIHklMj09MX0saXNSZWN0OmMsZGVnZW5lcmF0ZTp1fX07dmFyIG89YS5pc1NlZ21lbnRCZW50PWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhLG8scyxsPXRbZV0sYz1bdFtyXVswXS1sWzBdLHRbcl1bMV0tbFsxXV0sdT1uKGMsYyksaD1NYXRoLnNxcnQodSksZj1bLWNbMV0vaCxjWzBdL2hdO2ZvcihhPWUrMTthPHI7YSsrKWlmKG89W3RbYV1bMF0tbFswXSx0W2FdWzFdLWxbMV1dLChzPW4obyxjKSk8MHx8cz51fHxNYXRoLmFicyhuKG8sZikpPmkpcmV0dXJuITA7cmV0dXJuITF9O2EuZmlsdGVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W3RbMF1dLG49MCxpPTA7ZnVuY3Rpb24gYShhKXt0LnB1c2goYSk7dmFyIHM9ci5sZW5ndGgsbD1uO3Iuc3BsaWNlKGkrMSk7Zm9yKHZhciBjPWwrMTtjPHQubGVuZ3RoO2MrKykoYz09PXQubGVuZ3RoLTF8fG8odCxsLGMrMSxlKSkmJihyLnB1c2godFtjXSksci5sZW5ndGg8cy0yJiYobj1jLGk9ci5sZW5ndGgtMSksbD1jKX10Lmxlbmd0aD4xJiZhKHQucG9wKCkpO3JldHVybnthZGRQdDphLHJhdzp0LGZpbHRlcmVkOnJ9fX0se1wiLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4vbWF0cml4XCI6NzA3fV0sNzE0OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL3Nob3dfbm9fd2ViZ2xfbXNnXCIpLGk9dChcInJlZ2xcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIGE9dC5fZnVsbExheW91dCxvPSEwO3JldHVybiBhLl9nbGNhbnZhcy5lYWNoKGZ1bmN0aW9uKG4pe2lmKCFuLnJlZ2wmJighbi5waWNrfHxhLl9oYXMoXCJwYXJjb29yZHNcIikpKXt0cnl7bi5yZWdsPWkoe2NhbnZhczp0aGlzLGF0dHJpYnV0ZXM6e2FudGlhbGlhczohbi5waWNrLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMH0scGl4ZWxSYXRpbzp0Ll9jb250ZXh0LnBsb3RHbFBpeGVsUmF0aW98fHIuZGV2aWNlUGl4ZWxSYXRpbyxleHRlbnNpb25zOmV8fFtdfSl9Y2F0Y2godCl7bz0hMX1vJiZ0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJ3ZWJnbGNvbnRleHRsb3N0XCIsZnVuY3Rpb24oZSl7dCYmdC5lbWl0JiZ0LmVtaXQoXCJwbG90bHlfd2ViZ2xjb250ZXh0bG9zdFwiLHtldmVudDplLGxheWVyOm4ua2V5fSl9LCExKX19KSxvfHxuKHtjb250YWluZXI6YS5fZ2xjb250YWluZXIubm9kZSgpfSksb319KS5jYWxsKHRoaXMsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHtcIi4vc2hvd19ub193ZWJnbF9tc2dcIjo3MjIscmVnbDo0ODd9XSw3MTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihlIGluc3RhbmNlb2YgUmVnRXhwKXtmb3IodmFyIHI9ZS50b1N0cmluZygpLG49MDtuPHQubGVuZ3RoO24rKylpZih0W25daW5zdGFuY2VvZiBSZWdFeHAmJnRbbl0udG9TdHJpbmcoKT09PXIpcmV0dXJuIHQ7dC5wdXNoKGUpfWVsc2UhZSYmMCE9PWV8fC0xIT09dC5pbmRleE9mKGUpfHx0LnB1c2goZSk7cmV0dXJuIHR9fSx7fV0sNzE2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2xpYlwiKSxpPXQoXCIuLi9wbG90X2FwaS9wbG90X2NvbmZpZ1wiKS5kZmx0Q29uZmlnO3ZhciBhPXthZGQ6ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbyxzO3QudW5kb1F1ZXVlPXQudW5kb1F1ZXVlfHx7aW5kZXg6MCxxdWV1ZTpbXSxzZXF1ZW5jZTohMX0scz10LnVuZG9RdWV1ZS5pbmRleCx0LmF1dG9wbGF5P3QudW5kb1F1ZXVlLmluU2VxdWVuY2V8fCh0LmF1dG9wbGF5PSExKTooIXQudW5kb1F1ZXVlLnNlcXVlbmNlfHx0LnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPyhvPXt1bmRvOntjYWxsczpbXSxhcmdzOltdfSxyZWRvOntjYWxsczpbXSxhcmdzOltdfX0sdC51bmRvUXVldWUucXVldWUuc3BsaWNlKHMsdC51bmRvUXVldWUucXVldWUubGVuZ3RoLXMsbyksdC51bmRvUXVldWUuaW5kZXgrPTEpOm89dC51bmRvUXVldWUucXVldWVbcy0xXSx0LnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPSExLG8mJihvLnVuZG8uY2FsbHMudW5zaGlmdChlKSxvLnVuZG8uYXJncy51bnNoaWZ0KHIpLG8ucmVkby5jYWxscy5wdXNoKG4pLG8ucmVkby5hcmdzLnB1c2goYSkpLHQudW5kb1F1ZXVlLnF1ZXVlLmxlbmd0aD5pLnF1ZXVlTGVuZ3RoJiYodC51bmRvUXVldWUucXVldWUuc2hpZnQoKSx0LnVuZG9RdWV1ZS5pbmRleC0tKSl9LHN0YXJ0U2VxdWVuY2U6ZnVuY3Rpb24odCl7dC51bmRvUXVldWU9dC51bmRvUXVldWV8fHtpbmRleDowLHF1ZXVlOltdLHNlcXVlbmNlOiExfSx0LnVuZG9RdWV1ZS5zZXF1ZW5jZT0hMCx0LnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPSEwfSxzdG9wU2VxdWVuY2U6ZnVuY3Rpb24odCl7dC51bmRvUXVldWU9dC51bmRvUXVldWV8fHtpbmRleDowLHF1ZXVlOltdLHNlcXVlbmNlOiExfSx0LnVuZG9RdWV1ZS5zZXF1ZW5jZT0hMSx0LnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPSExfSx1bmRvOmZ1bmN0aW9uKHQpe3ZhciBlLHI7aWYodC5mcmFtZXdvcmsmJnQuZnJhbWV3b3JrLmlzUG9sYXIpdC5mcmFtZXdvcmsudW5kbygpO2Vsc2UgaWYoISh2b2lkIDA9PT10LnVuZG9RdWV1ZXx8aXNOYU4odC51bmRvUXVldWUuaW5kZXgpfHx0LnVuZG9RdWV1ZS5pbmRleDw9MCkpe2Zvcih0LnVuZG9RdWV1ZS5pbmRleC0tLGU9dC51bmRvUXVldWUucXVldWVbdC51bmRvUXVldWUuaW5kZXhdLHQudW5kb1F1ZXVlLmluU2VxdWVuY2U9ITAscj0wO3I8ZS51bmRvLmNhbGxzLmxlbmd0aDtyKyspYS5wbG90RG8odCxlLnVuZG8uY2FsbHNbcl0sZS51bmRvLmFyZ3Nbcl0pO3QudW5kb1F1ZXVlLmluU2VxdWVuY2U9ITEsdC5hdXRvcGxheT0hMX19LHJlZG86ZnVuY3Rpb24odCl7dmFyIGUscjtpZih0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhcil0LmZyYW1ld29yay5yZWRvKCk7ZWxzZSBpZighKHZvaWQgMD09PXQudW5kb1F1ZXVlfHxpc05hTih0LnVuZG9RdWV1ZS5pbmRleCl8fHQudW5kb1F1ZXVlLmluZGV4Pj10LnVuZG9RdWV1ZS5xdWV1ZS5sZW5ndGgpKXtmb3IoZT10LnVuZG9RdWV1ZS5xdWV1ZVt0LnVuZG9RdWV1ZS5pbmRleF0sdC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMCxyPTA7cjxlLnJlZG8uY2FsbHMubGVuZ3RoO3IrKylhLnBsb3REbyh0LGUucmVkby5jYWxsc1tyXSxlLnJlZG8uYXJnc1tyXSk7dC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMSx0LmF1dG9wbGF5PSExLHQudW5kb1F1ZXVlLmluZGV4Kyt9fX07YS5wbG90RG89ZnVuY3Rpb24odCxlLHIpe3QuYXV0b3BsYXk9ITAscj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixpPVtdLGE9MDthPGUubGVuZ3RoO2ErKylyPWVbYV0saVthXT1yPT09dD9yOlwib2JqZWN0XCI9PXR5cGVvZiByP0FycmF5LmlzQXJyYXkocik/bi5leHRlbmREZWVwKFtdLHIpOm4uZXh0ZW5kRGVlcEFsbCh7fSxyKTpyO3JldHVybiBpfSh0LHIpLGUuYXBwbHkobnVsbCxyKX0sZS5leHBvcnRzPWF9LHtcIi4uL2xpYlwiOjcwMSxcIi4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnXCI6NzM3fV0sNzE3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ci5jb3VudGVyPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPShlfHxcIlwiKSsocj9cIlwiOlwiJFwiKSxhPSExPT09bj9cIlwiOlwiXlwiO3JldHVyblwieHlcIj09PXQ/bmV3IFJlZ0V4cChhK1wieChbMi05XXxbMS05XVswLTldKyk/eShbMi05XXxbMS05XVswLTldKyk/XCIraSk6bmV3IFJlZ0V4cChhK3QrXCIoWzItOV18WzEtOV1bMC05XSspP1wiK2kpfX0se31dLDcxODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPS9eKC4qKShcXC5bXlxcLlxcW1xcXV0rfFxcW1xcZFxcXSkkLyxpPS9eW15cXC5cXFtcXF1dKyQvO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcig7ZTspe3ZhciByPXQubWF0Y2gobik7aWYocil0PXJbMV07ZWxzZXtpZighdC5tYXRjaChpKSl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgcmVsYXRpdmVBdHRyIGNhbGw6XCIrW3QsZV0pO3Q9XCJcIn1pZihcIl5cIiE9PWUuY2hhckF0KDApKWJyZWFrO2U9ZS5zbGljZSgxKX1yZXR1cm4gdCYmXCJbXCIhPT1lLmNoYXJBdCgwKT90K1wiLlwiK2U6dCtlfX0se31dLDcxOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2FycmF5XCIpLmlzQXJyYXlPclR5cGVkQXJyYXksaT10KFwiLi9pc19wbGFpbl9vYmplY3RcIik7ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIGEgaW4gcil7dmFyIG89clthXSxzPWVbYV07aWYocyE9PW8paWYoXCJfXCI9PT1hLmNoYXJBdCgwKXx8XCJmdW5jdGlvblwiPT10eXBlb2Ygbyl7aWYoYSBpbiBlKWNvbnRpbnVlO2VbYV09b31lbHNlIGlmKG4obykmJm4ocykmJmkob1swXSkpe2lmKFwiY3VzdG9tZGF0YVwiPT09YXx8XCJpZHNcIj09PWEpY29udGludWU7Zm9yKHZhciBsPU1hdGgubWluKG8ubGVuZ3RoLHMubGVuZ3RoKSxjPTA7YzxsO2MrKylzW2NdIT09b1tjXSYmaShvW2NdKSYmaShzW2NdKSYmdChzW2NdLG9bY10pfWVsc2UgaShvKSYmaShzKSYmKHQocyxvKSxPYmplY3Qua2V5cyhzKS5sZW5ndGh8fGRlbGV0ZSBlW2FdKX19fSx7XCIuL2FycmF5XCI6Njg0LFwiLi9pc19wbGFpbl9vYmplY3RcIjo3MDJ9XSw3MjA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi9sb2dnZXJzXCIpLGE9dChcIi4vaWRlbnRpdHlcIik7ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0PGV9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiB0PD1lfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gdD5lfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gdD49ZX1yLmZpbmRCaW49ZnVuY3Rpb24odCxlLHIpe2lmKG4oZS5zdGFydCkpcmV0dXJuIHI/TWF0aC5jZWlsKCh0LWUuc3RhcnQpL2Uuc2l6ZS0xZS05KS0xOk1hdGguZmxvb3IoKHQtZS5zdGFydCkvZS5zaXplKzFlLTkpO3ZhciBhLHUsaD0wLGY9ZS5sZW5ndGgscD0wLGQ9Zj4xPyhlW2YtMV0tZVswXSkvKGYtMSk6MTtmb3IodT1kPj0wP3I/bzpzOnI/YzpsLHQrPTFlLTkqZCoocj8tMToxKSooZD49MD8xOi0xKTtoPGYmJnArKzwxMDA7KXUoZVthPU1hdGguZmxvb3IoKGgrZikvMildLHQpP2g9YSsxOmY9YTtyZXR1cm4gcD45MCYmaS5sb2coXCJMb25nIGJpbmFyeSBzZWFyY2guLi5cIiksaC0xfSxyLnNvcnRlckFzYz1mdW5jdGlvbih0LGUpe3JldHVybiB0LWV9LHIuc29ydGVyRGVzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtdH0sci5kaXN0aW5jdFZhbHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5zbGljZSgpO2Uuc29ydChyLnNvcnRlckFzYyk7Zm9yKHZhciBuPWUubGVuZ3RoLTEsaT1lW25dLWVbMF18fDEsYT1pLyhufHwxKS8xZTQsbz1bZVswXV0scz0wO3M8bjtzKyspZVtzKzFdPmVbc10rYSYmKGk9TWF0aC5taW4oaSxlW3MrMV0tZVtzXSksby5wdXNoKGVbcysxXSkpO3JldHVybnt2YWxzOm8sbWluRGlmZjppfX0sci5yb3VuZFVwPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saT0wLGE9ZS5sZW5ndGgtMSxvPTAscz1yPzA6MSxsPXI/MTowLGM9cj9NYXRoLmNlaWw6TWF0aC5mbG9vcjtpPGEmJm8rKzwxMDA7KWVbbj1jKChpK2EpLzIpXTw9dD9pPW4rczphPW4tbDtyZXR1cm4gZVtpXX0sci5zb3J0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9MTtpPHQubGVuZ3RoO2krKyl7dmFyIGE9ZSh0W2ldLHRbaS0xXSk7aWYoYTwwP3I9MTphPjAmJihuPTEpLHImJm4pcmV0dXJuIHQuc29ydChlKX1yZXR1cm4gbj90OnQucmV2ZXJzZSgpfSxyLmZpbmRJbmRleE9mTWluPWZ1bmN0aW9uKHQsZSl7ZT1lfHxhO2Zvcih2YXIgcixuPTEvMCxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBvPWUodFtpXSk7bzxuJiYobj1vLHI9aSl9cmV0dXJuIHJ9fSx7XCIuL2lkZW50aXR5XCI6NzAwLFwiLi9sb2dnZXJzXCI6NzA1LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw3MjE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXsodC5hdHRyKFwiY2xhc3NcIil8fFwiXCIpLnNwbGl0KFwiIFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpezA9PT1lLmluZGV4T2YoXCJjdXJzb3ItXCIpJiZ0LmNsYXNzZWQoZSwhMSl9KSxlJiZ0LmNsYXNzZWQoXCJjdXJzb3ItXCIrZSwhMCl9fSx7fV0sNzIyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2NvbXBvbmVudHMvY29sb3JcIiksaT1mdW5jdGlvbigpe307ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KVwiZnVuY3Rpb25cIj09dHlwZW9mIHRbZV0mJih0W2VdPWkpO3QuZGVzdHJveT1mdW5jdGlvbigpe3QuY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodC5jb250YWluZXIpfTt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3IuY2xhc3NOYW1lPVwibm8td2ViZ2xcIixyLnN0eWxlLmN1cnNvcj1cInBvaW50ZXJcIixyLnN0eWxlLmZvbnRTaXplPVwiMjRweFwiLHIuc3R5bGUuY29sb3I9bi5kZWZhdWx0c1swXSxyLnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixyLnN0eWxlLmxlZnQ9ci5zdHlsZS50b3A9XCIwcHhcIixyLnN0eWxlLndpZHRoPXIuc3R5bGUuaGVpZ2h0PVwiMTAwJVwiLHIuc3R5bGVbXCJiYWNrZ3JvdW5kLWNvbG9yXCJdPW4ubGlnaHRMaW5lLHIuc3R5bGVbXCJ6LWluZGV4XCJdPTMwO3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpO3JldHVybiBhLnRleHRDb250ZW50PVwiV2ViR0wgaXMgbm90IHN1cHBvcnRlZCBieSB5b3VyIGJyb3dzZXIgLSB2aXNpdCBodHRwczovL2dldC53ZWJnbC5vcmcgZm9yIG1vcmUgaW5mb1wiLGEuc3R5bGUucG9zaXRpb249XCJyZWxhdGl2ZVwiLGEuc3R5bGUudG9wPVwiNTAlXCIsYS5zdHlsZS5sZWZ0PVwiNTAlXCIsYS5zdHlsZS5oZWlnaHQ9XCIzMCVcIixhLnN0eWxlLndpZHRoPVwiNTAlXCIsYS5zdHlsZS5tYXJnaW49XCItMTUlIDAgMCAtMjUlXCIsci5hcHBlbmRDaGlsZChhKSx0LmNvbnRhaW5lci5hcHBlbmRDaGlsZChyKSx0LmNvbnRhaW5lci5zdHlsZS5iYWNrZ3JvdW5kPVwiI0ZGRkZGRlwiLHQuY29udGFpbmVyLm9uY2xpY2s9ZnVuY3Rpb24oKXt3aW5kb3cub3BlbihcImh0dHBzOi8vZ2V0LndlYmdsLm9yZ1wiKX0sITF9fSx7XCIuLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4fV0sNzIzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4vYXJyYXlcIikuaXNBcnJheU9yVHlwZWRBcnJheTtyLmFnZ051bXM9ZnVuY3Rpb24odCxlLGEsbyl7dmFyIHMsbDtpZigoIW98fG8+YS5sZW5ndGgpJiYobz1hLmxlbmd0aCksbihlKXx8KGU9ITEpLGkoYVswXSkpe2ZvcihsPW5ldyBBcnJheShvKSxzPTA7czxvO3MrKylsW3NdPXIuYWdnTnVtcyh0LGUsYVtzXSk7YT1sfWZvcihzPTA7czxvO3MrKyluKGUpP24oYVtzXSkmJihlPXQoK2UsK2Fbc10pKTplPWFbc107cmV0dXJuIGV9LHIubGVuPWZ1bmN0aW9uKHQpe3JldHVybiByLmFnZ051bXMoZnVuY3Rpb24odCl7cmV0dXJuIHQrMX0sMCx0KX0sci5tZWFuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fChlPXIubGVuKHQpKSxyLmFnZ051bXMoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSwwLHQpL2V9LHIubWlkUmFuZ2U9ZnVuY3Rpb24odCl7aWYodm9pZCAwIT09dCYmMCE9PXQubGVuZ3RoKXJldHVybihyLmFnZ051bXMoTWF0aC5tYXgsbnVsbCx0KStyLmFnZ051bXMoTWF0aC5taW4sbnVsbCx0KSkvMn0sci52YXJpYW5jZT1mdW5jdGlvbih0LGUsaSl7cmV0dXJuIGV8fChlPXIubGVuKHQpKSxuKGkpfHwoaT1yLm1lYW4odCxlKSksci5hZ2dOdW1zKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrTWF0aC5wb3coZS1pLDIpfSwwLHQpL2V9LHIuc3RkZXY9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBNYXRoLnNxcnQoci52YXJpYW5jZSh0LGUsbikpfSxyLmludGVycD1mdW5jdGlvbih0LGUpe2lmKCFuKGUpKXRocm93XCJuIHNob3VsZCBiZSBhIGZpbml0ZSBudW1iZXJcIjtpZigoZT1lKnQubGVuZ3RoLS41KTwwKXJldHVybiB0WzBdO2lmKGU+dC5sZW5ndGgtMSlyZXR1cm4gdFt0Lmxlbmd0aC0xXTt2YXIgcj1lJTE7cmV0dXJuIHIqdFtNYXRoLmNlaWwoZSldKygxLXIpKnRbTWF0aC5mbG9vcihlKV19fSx7XCIuL2FycmF5XCI6Njg0LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw3MjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiY29sb3Itbm9ybWFsaXplXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD9uKHQpOlswLDAsMCwxXX19LHtcImNvbG9yLW5vcm1hbGl6ZVwiOjExMX1dLDcyNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi9saWJcIiksYT10KFwiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIiksbz10KFwiLi4vY29uc3RhbnRzL2FsaWdubWVudFwiKS5MSU5FX1NQQUNJTkc7ZnVuY3Rpb24gcyh0LGUpe3JldHVybiB0Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtlXX12YXIgbD0vKFteJF0qKShbJF0rW14kXSpbJF0rKShbXiRdKikvO3IuY29udmVydFRvVHNwYW5zPWZ1bmN0aW9uKHQsZSxNKXt2YXIgUz10LnRleHQoKSxDPSF0LmF0dHIoXCJkYXRhLW5vdGV4XCIpJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgTWF0aEpheCYmUy5tYXRjaChsKSxMPW4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpO2lmKCFMLmVtcHR5KCkpe3ZhciB6PXQuYXR0cihcImNsYXNzXCIpP3QuYXR0cihcImNsYXNzXCIpLnNwbGl0KFwiIFwiKVswXTpcInRleHRcIjtyZXR1cm4geis9XCItbWF0aFwiLEwuc2VsZWN0QWxsKFwic3ZnLlwiK3opLnJlbW92ZSgpLEwuc2VsZWN0QWxsKFwiZy5cIit6K1wiLWdyb3VwXCIpLnJlbW92ZSgpLHQuc3R5bGUoXCJkaXNwbGF5XCIsbnVsbCkuYXR0cih7XCJkYXRhLXVuZm9ybWF0dGVkXCI6UyxcImRhdGEtbWF0aFwiOlwiTlwifSksQz8oZSYmZS5fcHJvbWlzZXN8fFtdKS5wdXNoKG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3Quc3R5bGUoXCJkaXNwbGF5XCIsXCJub25lXCIpO3ZhciByPXBhcnNlSW50KHQubm9kZSgpLnN0eWxlLmZvbnRTaXplLDEwKSxhPXtmb250U2l6ZTpyfTshZnVuY3Rpb24odCxlLHIpe3ZhciBhLG8scyxsO01hdGhKYXguSHViLlF1ZXVlKGZ1bmN0aW9uKCl7cmV0dXJuIG89aS5leHRlbmREZWVwQWxsKHt9LE1hdGhKYXguSHViLmNvbmZpZykscz1NYXRoSmF4Lkh1Yi5wcm9jZXNzU2VjdGlvbkRlbGF5LHZvaWQgMCE9PU1hdGhKYXguSHViLnByb2Nlc3NTZWN0aW9uRGVsYXkmJihNYXRoSmF4Lkh1Yi5wcm9jZXNzU2VjdGlvbkRlbGF5PTApLE1hdGhKYXguSHViLkNvbmZpZyh7bWVzc2FnZVN0eWxlOlwibm9uZVwiLHRleDJqYXg6e2lubGluZU1hdGg6W1tcIiRcIixcIiRcIl0sW1wiXFxcXChcIixcIlxcXFwpXCJdXX0sZGlzcGxheUFsaWduOlwibGVmdFwifSl9LGZ1bmN0aW9uKCl7aWYoXCJTVkdcIiE9PShhPU1hdGhKYXguSHViLmNvbmZpZy5tZW51U2V0dGluZ3MucmVuZGVyZXIpKXJldHVybiBNYXRoSmF4Lkh1Yi5zZXRSZW5kZXJlcihcIlNWR1wiKX0sZnVuY3Rpb24oKXt2YXIgcj1cIm1hdGgtb3V0cHV0LVwiK2kucmFuZHN0cih7fSw2NCk7cmV0dXJuIGw9bi5zZWxlY3QoXCJib2R5XCIpLmFwcGVuZChcImRpdlwiKS5hdHRyKHtpZDpyfSkuc3R5bGUoe3Zpc2liaWxpdHk6XCJoaWRkZW5cIixwb3NpdGlvbjpcImFic29sdXRlXCJ9KS5zdHlsZSh7XCJmb250LXNpemVcIjplLmZvbnRTaXplK1wicHhcIn0pLnRleHQodC5yZXBsYWNlKGMsXCJcXFxcbHQgXCIpLnJlcGxhY2UodSxcIlxcXFxndCBcIikpLE1hdGhKYXguSHViLlR5cGVzZXQobC5ub2RlKCkpfSxmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KFwiYm9keVwiKS5zZWxlY3QoXCIjTWF0aEpheF9TVkdfZ2x5cGhzXCIpO2lmKGwuc2VsZWN0KFwiLk1hdGhKYXhfU1ZHXCIpLmVtcHR5KCl8fCFsLnNlbGVjdChcInN2Z1wiKS5ub2RlKCkpaS5sb2coXCJUaGVyZSB3YXMgYW4gZXJyb3IgaW4gdGhlIHRleCBzeW50YXguXCIsdCkscigpO2Vsc2V7dmFyIG89bC5zZWxlY3QoXCJzdmdcIikubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3IobC5zZWxlY3QoXCIuTWF0aEpheF9TVkdcIiksZSxvKX1pZihsLnJlbW92ZSgpLFwiU1ZHXCIhPT1hKXJldHVybiBNYXRoSmF4Lkh1Yi5zZXRSZW5kZXJlcihhKX0sZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09cyYmKE1hdGhKYXguSHViLnByb2Nlc3NTZWN0aW9uRGVsYXk9cyksTWF0aEpheC5IdWIuQ29uZmlnKG8pfSl9KENbMl0sYSxmdW5jdGlvbihuLGksYSl7TC5zZWxlY3RBbGwoXCJzdmcuXCIreikucmVtb3ZlKCksTC5zZWxlY3RBbGwoXCJnLlwiK3orXCItZ3JvdXBcIikucmVtb3ZlKCk7dmFyIG89biYmbi5zZWxlY3QoXCJzdmdcIik7aWYoIW98fCFvLm5vZGUoKSlyZXR1cm4gTygpLHZvaWQgZSgpO3ZhciBsPUwuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKHorXCItZ3JvdXBcIiwhMCkuYXR0cih7XCJwb2ludGVyLWV2ZW50c1wiOlwibm9uZVwiLFwiZGF0YS11bmZvcm1hdHRlZFwiOlMsXCJkYXRhLW1hdGhcIjpcIllcIn0pO2wubm9kZSgpLmFwcGVuZENoaWxkKG8ubm9kZSgpKSxpJiZpLm5vZGUoKSYmby5ub2RlKCkuaW5zZXJ0QmVmb3JlKGkubm9kZSgpLmNsb25lTm9kZSghMCksby5ub2RlKCkuZmlyc3RDaGlsZCksby5hdHRyKHtjbGFzczp6LGhlaWdodDphLmhlaWdodCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwieE1pbllNaW4gbWVldFwifSkuc3R5bGUoe292ZXJmbG93OlwidmlzaWJsZVwiLFwicG9pbnRlci1ldmVudHNcIjpcIm5vbmVcIn0pO3ZhciBjPXQubm9kZSgpLnN0eWxlLmZpbGx8fFwiYmxhY2tcIjtvLnNlbGVjdChcImdcIikuYXR0cih7ZmlsbDpjLHN0cm9rZTpjfSk7dmFyIHU9cyhvLFwid2lkdGhcIiksaD1zKG8sXCJoZWlnaHRcIiksZj0rdC5hdHRyKFwieFwiKS11KntzdGFydDowLG1pZGRsZTouNSxlbmQ6MX1bdC5hdHRyKFwidGV4dC1hbmNob3JcIil8fFwic3RhcnRcIl0scD0tKHJ8fHModCxcImhlaWdodFwiKSkvNDtcInlcIj09PXpbMF0/KGwuYXR0cih7dHJhbnNmb3JtOlwicm90YXRlKFwiK1stOTAsK3QuYXR0cihcInhcIiksK3QuYXR0cihcInlcIildK1wiKSB0cmFuc2xhdGUoXCIrWy11LzIscC1oLzJdK1wiKVwifSksby5hdHRyKHt4Oit0LmF0dHIoXCJ4XCIpLHk6K3QuYXR0cihcInlcIil9KSk6XCJsXCI9PT16WzBdP28uYXR0cih7eDp0LmF0dHIoXCJ4XCIpLHk6cC1oLzJ9KTpcImFcIj09PXpbMF0mJjAhPT16LmluZGV4T2YoXCJhdGl0bGVcIik/by5hdHRyKHt4OjAseTpwfSk6by5hdHRyKHt4OmYseTordC5hdHRyKFwieVwiKStwLWgvMn0pLE0mJk0uY2FsbCh0LGwpLGUobCl9KX0pKTpPKCksdH1mdW5jdGlvbiBPKCl7TC5lbXB0eSgpfHwoej10LmF0dHIoXCJjbGFzc1wiKStcIi1tYXRoXCIsTC5zZWxlY3QoXCJzdmcuXCIreikucmVtb3ZlKCkpLHQudGV4dChcIlwiKS5zdHlsZShcIndoaXRlLXNwYWNlXCIsXCJwcmVcIiksZnVuY3Rpb24odCxlKXtlPWUucmVwbGFjZSh2LFwiIFwiKTt2YXIgcixzPSExLGw9W10sYz0tMTtmdW5jdGlvbiB1KCl7YysrO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhhLnN2ZyxcInRzcGFuXCIpO24uc2VsZWN0KGUpLmF0dHIoe2NsYXNzOlwibGluZVwiLGR5OmMqbytcImVtXCJ9KSx0LmFwcGVuZENoaWxkKGUpLHI9ZTt2YXIgaT1sO2lmKGw9W3tub2RlOmV9XSxpLmxlbmd0aD4xKWZvcih2YXIgcz0xO3M8aS5sZW5ndGg7cysrKU0oaVtzXSl9ZnVuY3Rpb24gTSh0KXt2YXIgZSxpPXQudHlwZSxvPXt9O2lmKFwiYVwiPT09aSl7ZT1cImFcIjt2YXIgcz10LnRhcmdldCxjPXQuaHJlZix1PXQucG9wdXA7YyYmKG89e1wieGxpbms6eGxpbms6c2hvd1wiOlwiX2JsYW5rXCI9PT1zfHxcIl9cIiE9PXMuY2hhckF0KDApP1wibmV3XCI6XCJyZXBsYWNlXCIsdGFyZ2V0OnMsXCJ4bGluazp4bGluazpocmVmXCI6Y30sdSYmKG8ub25jbGljaz0nd2luZG93Lm9wZW4odGhpcy5ocmVmLmJhc2VWYWwsdGhpcy50YXJnZXQuYmFzZVZhbCxcIicrdSsnXCIpO3JldHVybiBmYWxzZTsnKSl9ZWxzZSBlPVwidHNwYW5cIjt0LnN0eWxlJiYoby5zdHlsZT10LnN0eWxlKTt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoYS5zdmcsZSk7aWYoXCJzdXBcIj09PWl8fFwic3ViXCI9PT1pKXtTKHIsZCksci5hcHBlbmRDaGlsZChoKTt2YXIgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoYS5zdmcsXCJ0c3BhblwiKTtTKGcsZCksbi5zZWxlY3QoZykuYXR0cihcImR5XCIscFtpXSksby5keT1mW2ldLHIuYXBwZW5kQ2hpbGQoaCksci5hcHBlbmRDaGlsZChnKX1lbHNlIHIuYXBwZW5kQ2hpbGQoaCk7bi5zZWxlY3QoaCkuYXR0cihvKSxyPXQubm9kZT1oLGwucHVzaCh0KX1mdW5jdGlvbiBTKHQsZSl7dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSl9ZnVuY3Rpb24gQyh0KXtpZigxIT09bC5sZW5ndGgpe3ZhciBuPWwucG9wKCk7dCE9PW4udHlwZSYmaS5sb2coXCJTdGFydCB0YWcgPFwiK24udHlwZStcIj4gZG9lc250IG1hdGNoIGVuZCB0YWcgPFwiK3QrXCI+LiBQcmV0ZW5kaW5nIGl0IGRpZCBtYXRjaC5cIixlKSxyPWxbbC5sZW5ndGgtMV0ubm9kZX1lbHNlIGkubG9nKFwiSWdub3JpbmcgdW5leHBlY3RlZCBlbmQgdGFnIDwvXCIrdCtcIj4uXCIsZSl9eC50ZXN0KGUpP3UoKToocj10LGw9W3tub2RlOnR9XSk7Zm9yKHZhciBMPWUuc3BsaXQobSksej0wO3o8TC5sZW5ndGg7eisrKXt2YXIgTz1MW3pdLEk9Ty5tYXRjaCh5KSxEPUkmJklbMl0udG9Mb3dlckNhc2UoKSxQPWhbRF07aWYoXCJiclwiPT09RCl1KCk7ZWxzZSBpZih2b2lkIDA9PT1QKVMocixFKE8pKTtlbHNlIGlmKElbMV0pQyhEKTtlbHNle3ZhciBSPUlbNF0sRj17dHlwZTpEfSxCPUEoUixiKTtpZihCPyhCPUIucmVwbGFjZShULFwiJDEgZmlsbDpcIiksUCYmKEIrPVwiO1wiK1ApKTpQJiYoQj1QKSxCJiYoRi5zdHlsZT1CKSxcImFcIj09PUQpe3M9ITA7dmFyIE49QShSLF8pO2lmKE4pe3ZhciBqPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO2ouaHJlZj1OLC0xIT09Zy5pbmRleE9mKGoucHJvdG9jb2wpJiYoRi5ocmVmPWVuY29kZVVSSShkZWNvZGVVUkkoTikpLEYudGFyZ2V0PUEoUix3KXx8XCJfYmxhbmtcIixGLnBvcHVwPUEoUixrKSl9fU0oRil9fXJldHVybiBzfSh0Lm5vZGUoKSxTKSYmdC5zdHlsZShcInBvaW50ZXItZXZlbnRzXCIsXCJhbGxcIiksci5wb3NpdGlvblRleHQodCksTSYmTS5jYWxsKHQpfX07dmFyIGM9Lyg8fCZsdDt8JiM2MDspL2csdT0vKD58Jmd0O3wmIzYyOykvZzt2YXIgaD17c3VwOlwiZm9udC1zaXplOjcwJVwiLHN1YjpcImZvbnQtc2l6ZTo3MCVcIixiOlwiZm9udC13ZWlnaHQ6Ym9sZFwiLGk6XCJmb250LXN0eWxlOml0YWxpY1wiLGE6XCJjdXJzb3I6cG9pbnRlclwiLHNwYW46XCJcIixlbTpcImZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OmJvbGRcIn0sZj17c3ViOlwiMC4zZW1cIixzdXA6XCItMC42ZW1cIn0scD17c3ViOlwiLTAuMjFlbVwiLHN1cDpcIjAuNDJlbVwifSxkPVwiXFx1MjAwYlwiLGc9W1wiaHR0cDpcIixcImh0dHBzOlwiLFwibWFpbHRvOlwiLFwiXCIsdm9pZCAwLFwiOlwiXSx2PS8oXFxyXFxuP3xcXG4pL2csbT0vKDxbXjw+XSo+KS8seT0vPChcXC8/KShbXiA+XSopKFxccysoLiopKT8+L2kseD0vPGJyKFxccysuKik/Pi9pLGI9LyhefFtcXHNcIiddKXN0eWxlXFxzKj1cXHMqKFwiKFteXCJdKik7P1wifCcoW14nXSopOz8nKS9pLF89LyhefFtcXHNcIiddKWhyZWZcXHMqPVxccyooXCIoW15cIl0qKVwifCcoW14nXSopJykvaSx3PS8oXnxbXFxzXCInXSl0YXJnZXRcXHMqPVxccyooXCIoW15cIlxcc10qKVwifCcoW14nXFxzXSopJykvaSxrPS8oXnxbXFxzXCInXSlwb3B1cFxccyo9XFxzKihcIihbXFx3PSxdKilcInwnKFtcXHc9LF0qKScpL2k7ZnVuY3Rpb24gQSh0LGUpe2lmKCF0KXJldHVybiBudWxsO3ZhciByPXQubWF0Y2goZSksbj1yJiYoclszXXx8cls0XSk7cmV0dXJuIG4mJkUobil9dmFyIFQ9LyhefDspXFxzKmNvbG9yOi87ci5wbGFpblRleHQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dm9pZCAwIT09KGU9ZXx8e30pLmxlbiYmLTEhPT1lLmxlbj9lLmxlbjoxLzAsbj12b2lkIDAhPT1lLmFsbG93ZWRUYWdzP2UuYWxsb3dlZFRhZ3M6W1wiYnJcIl0saT1cIi4uLlwiLmxlbmd0aCxhPXQuc3BsaXQobSksbz1bXSxzPVwiXCIsbD0wLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIHU9YVtjXSxoPXUubWF0Y2goeSksZj1oJiZoWzJdLnRvTG93ZXJDYXNlKCk7aWYoZiktMSE9PW4uaW5kZXhPZihmKSYmKG8ucHVzaCh1KSxzPWYpO2Vsc2V7dmFyIHA9dS5sZW5ndGg7aWYobCtwPHIpby5wdXNoKHUpLGwrPXA7ZWxzZSBpZihsPHIpe3ZhciBkPXItbDtzJiYoXCJiclwiIT09c3x8ZDw9aXx8cDw9aSkmJm8ucG9wKCkscj5pP28ucHVzaCh1LnN1YnN0cigwLGQtaSkrXCIuLi5cIik6by5wdXNoKHUuc3Vic3RyKDAsZCkpO2JyZWFrfXM9XCJcIn19cmV0dXJuIG8uam9pbihcIlwiKX07dmFyIE09e211OlwiXFx1MDNiY1wiLGFtcDpcIiZcIixsdDpcIjxcIixndDpcIj5cIixuYnNwOlwiXFx4YTBcIix0aW1lczpcIlxceGQ3XCIscGx1c21uOlwiXFx4YjFcIixkZWc6XCJcXHhiMFwifSxTPS8mKCNcXGQrfCN4W1xcZGEtZkEtRl0rfFthLXpdKyk7L2c7ZnVuY3Rpb24gRSh0KXtyZXR1cm4gdC5yZXBsYWNlKFMsZnVuY3Rpb24odCxlKXtyZXR1cm4oXCIjXCI9PT1lLmNoYXJBdCgwKT9mdW5jdGlvbih0KXtpZih0PjExMTQxMTEpcmV0dXJuO3ZhciBlPVN0cmluZy5mcm9tQ29kZVBvaW50O2lmKGUpcmV0dXJuIGUodCk7dmFyIHI9U3RyaW5nLmZyb21DaGFyQ29kZTtyZXR1cm4gdDw9NjU1MzU/cih0KTpyKDU1MjMyKyh0Pj4xMCksdCUxMDI0KzU2MzIwKX0oXCJ4XCI9PT1lLmNoYXJBdCgxKT9wYXJzZUludChlLnN1YnN0cigyKSwxNik6cGFyc2VJbnQoZS5zdWJzdHIoMSksMTApKTpNW2VdKXx8dH0pfWZ1bmN0aW9uIEModCxlLHIpe3ZhciBuLGksYSxvPXIuaG9yaXpvbnRhbEFsaWduLHM9ci52ZXJ0aWNhbEFsaWdufHxcInRvcFwiLGw9dC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYz1lLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gaT1cImJvdHRvbVwiPT09cz9mdW5jdGlvbigpe3JldHVybiBsLmJvdHRvbS1uLmhlaWdodH06XCJtaWRkbGVcIj09PXM/ZnVuY3Rpb24oKXtyZXR1cm4gbC50b3ArKGwuaGVpZ2h0LW4uaGVpZ2h0KS8yfTpmdW5jdGlvbigpe3JldHVybiBsLnRvcH0sYT1cInJpZ2h0XCI9PT1vP2Z1bmN0aW9uKCl7cmV0dXJuIGwucmlnaHQtbi53aWR0aH06XCJjZW50ZXJcIj09PW8/ZnVuY3Rpb24oKXtyZXR1cm4gbC5sZWZ0KyhsLndpZHRoLW4ud2lkdGgpLzJ9OmZ1bmN0aW9uKCl7cmV0dXJuIGwubGVmdH0sZnVuY3Rpb24oKXtyZXR1cm4gbj10aGlzLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLnN0eWxlKHt0b3A6aSgpLWMudG9wK1wicHhcIixsZWZ0OmEoKS1jLmxlZnQrXCJweFwiLFwiei1pbmRleFwiOjFlM30pLHRoaXN9fXIuY29udmVydEVudGl0aWVzPUUsci5saW5lQ291bnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VsZWN0QWxsKFwidHNwYW4ubGluZVwiKS5zaXplKCl8fDF9LHIucG9zaXRpb25UZXh0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7ZnVuY3Rpb24gaShlLHIpe3JldHVybiB2b2lkIDA9PT1yP251bGw9PT0ocj10LmF0dHIoZSkpJiYodC5hdHRyKGUsMCkscj0wKTp0LmF0dHIoZSxyKSxyfXZhciBhPWkoXCJ4XCIsZSksbz1pKFwieVwiLHIpO1widGV4dFwiPT09dGhpcy5ub2RlTmFtZSYmdC5zZWxlY3RBbGwoXCJ0c3Bhbi5saW5lXCIpLmF0dHIoe3g6YSx5Om99KX0pfSxyLm1ha2VFZGl0YWJsZT1mdW5jdGlvbih0LGUpe3ZhciByPWUuZ2QsaT1lLmRlbGVnYXRlLGE9bi5kaXNwYXRjaChcImVkaXRcIixcImlucHV0XCIsXCJjYW5jZWxcIiksbz1pfHx0O2lmKHQuc3R5bGUoe1wicG9pbnRlci1ldmVudHNcIjppP1wibm9uZVwiOlwiYWxsXCJ9KSwxIT09dC5zaXplKCkpdGhyb3cgbmV3IEVycm9yKFwiYm9vXCIpO2Z1bmN0aW9uIHMoKXshZnVuY3Rpb24oKXt2YXIgaT1uLnNlbGVjdChyKS5zZWxlY3QoXCIuc3ZnLWNvbnRhaW5lclwiKSxvPWkuYXBwZW5kKFwiZGl2XCIpLHM9dC5ub2RlKCkuc3R5bGUsYz1wYXJzZUZsb2F0KHMuZm9udFNpemV8fDEyKSx1PWUudGV4dDt2b2lkIDA9PT11JiYodT10LmF0dHIoXCJkYXRhLXVuZm9ybWF0dGVkXCIpKTtvLmNsYXNzZWQoXCJwbHVnaW4tZWRpdGFibGUgZWRpdGFibGVcIiwhMCkuc3R5bGUoe3Bvc2l0aW9uOlwiYWJzb2x1dGVcIixcImZvbnQtZmFtaWx5XCI6cy5mb250RmFtaWx5fHxcIkFyaWFsXCIsXCJmb250LXNpemVcIjpjLGNvbG9yOmUuZmlsbHx8cy5maWxsfHxcImJsYWNrXCIsb3BhY2l0eToxLFwiYmFja2dyb3VuZC1jb2xvclwiOmUuYmFja2dyb3VuZHx8XCJ0cmFuc3BhcmVudFwiLG91dGxpbmU6XCIjZmZmZmZmMzMgMXB4IHNvbGlkXCIsbWFyZ2luOlstYy84KzEsMCwwLC0xXS5qb2luKFwicHggXCIpK1wicHhcIixwYWRkaW5nOlwiMFwiLFwiYm94LXNpemluZ1wiOlwiYm9yZGVyLWJveFwifSkuYXR0cih7Y29udGVudGVkaXRhYmxlOiEwfSkudGV4dCh1KS5jYWxsKEModCxpLGUpKS5vbihcImJsdXJcIixmdW5jdGlvbigpe3IuX2VkaXRpbmc9ITEsdC50ZXh0KHRoaXMudGV4dENvbnRlbnQpLnN0eWxlKHtvcGFjaXR5OjF9KTt2YXIgZSxpPW4uc2VsZWN0KHRoaXMpLmF0dHIoXCJjbGFzc1wiKTsoZT1pP1wiLlwiK2kuc3BsaXQoXCIgXCIpWzBdK1wiLW1hdGgtZ3JvdXBcIjpcIltjbGFzcyo9LW1hdGgtZ3JvdXBdXCIpJiZuLnNlbGVjdCh0Lm5vZGUoKS5wYXJlbnROb2RlKS5zZWxlY3QoZSkuc3R5bGUoe29wYWNpdHk6MH0pO3ZhciBvPXRoaXMudGV4dENvbnRlbnQ7bi5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKDApLnJlbW92ZSgpLG4uc2VsZWN0KGRvY3VtZW50KS5vbihcIm1vdXNldXBcIixudWxsKSxhLmVkaXQuY2FsbCh0LG8pfSkub24oXCJmb2N1c1wiLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyLl9lZGl0aW5nPSEwLG4uc2VsZWN0KGRvY3VtZW50KS5vbihcIm1vdXNldXBcIixmdW5jdGlvbigpe2lmKG4uZXZlbnQudGFyZ2V0PT09dClyZXR1cm4hMTtkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09by5ub2RlKCkmJm8ubm9kZSgpLmJsdXIoKX0pfSkub24oXCJrZXl1cFwiLGZ1bmN0aW9uKCl7Mjc9PT1uLmV2ZW50LndoaWNoPyhyLl9lZGl0aW5nPSExLHQuc3R5bGUoe29wYWNpdHk6MX0pLG4uc2VsZWN0KHRoaXMpLnN0eWxlKHtvcGFjaXR5OjB9KS5vbihcImJsdXJcIixmdW5jdGlvbigpe3JldHVybiExfSkudHJhbnNpdGlvbigpLnJlbW92ZSgpLGEuY2FuY2VsLmNhbGwodCx0aGlzLnRleHRDb250ZW50KSk6KGEuaW5wdXQuY2FsbCh0LHRoaXMudGV4dENvbnRlbnQpLG4uc2VsZWN0KHRoaXMpLmNhbGwoQyh0LGksZSkpKX0pLm9uKFwia2V5ZG93blwiLGZ1bmN0aW9uKCl7MTM9PT1uLmV2ZW50LndoaWNoJiZ0aGlzLmJsdXIoKX0pLmNhbGwobCl9KCksdC5zdHlsZSh7b3BhY2l0eTowfSk7dmFyIGkscz1vLmF0dHIoXCJjbGFzc1wiKTsoaT1zP1wiLlwiK3Muc3BsaXQoXCIgXCIpWzBdK1wiLW1hdGgtZ3JvdXBcIjpcIltjbGFzcyo9LW1hdGgtZ3JvdXBdXCIpJiZuLnNlbGVjdCh0Lm5vZGUoKS5wYXJlbnROb2RlKS5zZWxlY3QoaSkuc3R5bGUoe29wYWNpdHk6MH0pfWZ1bmN0aW9uIGwodCl7dmFyIGU9dC5ub2RlKCkscj1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO3Iuc2VsZWN0Tm9kZUNvbnRlbnRzKGUpO3ZhciBuPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtuLnJlbW92ZUFsbFJhbmdlcygpLG4uYWRkUmFuZ2UociksZS5mb2N1cygpfXJldHVybiBlLmltbWVkaWF0ZT9zKCk6by5vbihcImNsaWNrXCIscyksbi5yZWJpbmQodCxhLFwib25cIil9fSx7XCIuLi9jb25zdGFudHMvYWxpZ25tZW50XCI6NjczLFwiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIjo2NzksXCIuLi9saWJcIjo3MDEsZDM6MTU1fV0sNzI2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307ZnVuY3Rpb24gaSh0KXt0JiZudWxsIT09dC50aW1lciYmKGNsZWFyVGltZW91dCh0LnRpbWVyKSx0LnRpbWVyPW51bGwpfXIudGhyb3R0bGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPW5bdF0sbz1EYXRlLm5vdygpO2lmKCFhKXtmb3IodmFyIHMgaW4gbiluW3NdLnRzPG8tNmU0JiZkZWxldGUgbltzXTthPW5bdF09e3RzOjAsdGltZXI6bnVsbH19ZnVuY3Rpb24gbCgpe3IoKSxhLnRzPURhdGUubm93KCksYS5vbkRvbmUmJihhLm9uRG9uZSgpLGEub25Eb25lPW51bGwpfWkoYSksbz5hLnRzK2U/bCgpOmEudGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2woKSxhLnRpbWVyPW51bGx9LGUpfSxyLmRvbmU9ZnVuY3Rpb24odCl7dmFyIGU9blt0XTtyZXR1cm4gZSYmZS50aW1lcj9uZXcgUHJvbWlzZShmdW5jdGlvbih0KXt2YXIgcj1lLm9uRG9uZTtlLm9uRG9uZT1mdW5jdGlvbigpe3ImJnIoKSx0KCksZS5vbkRvbmU9bnVsbH19KTpQcm9taXNlLnJlc29sdmUoKX0sci5jbGVhcj1mdW5jdGlvbih0KXtpZih0KWkoblt0XSksZGVsZXRlIG5bdF07ZWxzZSBmb3IodmFyIGUgaW4gbilyLmNsZWFyKGUpfX0se31dLDcyNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZih0PjApcmV0dXJuIE1hdGgubG9nKHQpL01hdGguTE4xMDt2YXIgcj1NYXRoLmxvZyhNYXRoLm1pbihlWzBdLGVbMV0pKS9NYXRoLkxOMTA7cmV0dXJuIG4ocil8fChyPU1hdGgubG9nKE1hdGgubWF4KGVbMF0sZVsxXSkpL01hdGguTE4xMC02KSxyfX0se1wiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw3Mjg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lLmV4cG9ydHM9e30saT10KFwiLi4vcGxvdHMvZ2VvL2NvbnN0YW50c1wiKS5sb2NhdGlvbm1vZGVUb0xheWVyLGE9dChcInRvcG9qc29uLWNsaWVudFwiKS5mZWF0dXJlO24uZ2V0VG9wb2pzb25OYW1lPWZ1bmN0aW9uKHQpe3JldHVyblt0LnNjb3BlLnJlcGxhY2UoLyAvZyxcIi1cIiksXCJfXCIsdC5yZXNvbHV0aW9uLnRvU3RyaW5nKCksXCJtXCJdLmpvaW4oXCJcIil9LG4uZ2V0VG9wb2pzb25QYXRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZStcIi5qc29uXCJ9LG4uZ2V0VG9wb2pzb25GZWF0dXJlcz1mdW5jdGlvbih0LGUpe3ZhciByPWlbdC5sb2NhdGlvbm1vZGVdLG49ZS5vYmplY3RzW3JdO3JldHVybiBhKGUsbikuZmVhdHVyZXN9fSx7XCIuLi9wbG90cy9nZW8vY29uc3RhbnRzXCI6Nzc3LFwidG9wb2pzb24tY2xpZW50XCI6NTI1fV0sNzI5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwibG9jYWxlXCIsbmFtZTpcImVuLVVTXCIsZGljdGlvbmFyeTp7XCJDbGljayB0byBlbnRlciBDb2xvcnNjYWxlIHRpdGxlXCI6XCJDbGljayB0byBlbnRlciBDb2xvcnNjYWxlIHRpdGxlXCJ9LGZvcm1hdDp7ZGF0ZTpcIiVtLyVkLyVZXCJ9fX0se31dLDczMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17bW9kdWxlVHlwZTpcImxvY2FsZVwiLG5hbWU6XCJlblwiLGRpY3Rpb25hcnk6e1wiQ2xpY2sgdG8gZW50ZXIgQ29sb3JzY2FsZSB0aXRsZVwiOlwiQ2xpY2sgdG8gZW50ZXIgQ29sb3Vyc2NhbGUgdGl0bGVcIn0sZm9ybWF0OntkYXlzOltcIlN1bmRheVwiLFwiTW9uZGF5XCIsXCJUdWVzZGF5XCIsXCJXZWRuZXNkYXlcIixcIlRodXJzZGF5XCIsXCJGcmlkYXlcIixcIlNhdHVyZGF5XCJdLHNob3J0RGF5czpbXCJTdW5cIixcIk1vblwiLFwiVHVlXCIsXCJXZWRcIixcIlRodVwiLFwiRnJpXCIsXCJTYXRcIl0sbW9udGhzOltcIkphbnVhcnlcIixcIkZlYnJ1YXJ5XCIsXCJNYXJjaFwiLFwiQXByaWxcIixcIk1heVwiLFwiSnVuZVwiLFwiSnVseVwiLFwiQXVndXN0XCIsXCJTZXB0ZW1iZXJcIixcIk9jdG9iZXJcIixcIk5vdmVtYmVyXCIsXCJEZWNlbWJlclwiXSxzaG9ydE1vbnRoczpbXCJKYW5cIixcIkZlYlwiLFwiTWFyXCIsXCJBcHJcIixcIk1heVwiLFwiSnVuXCIsXCJKdWxcIixcIkF1Z1wiLFwiU2VwXCIsXCJPY3RcIixcIk5vdlwiLFwiRGVjXCJdLHBlcmlvZHM6W1wiQU1cIixcIlBNXCJdLGRhdGVUaW1lOlwiJWEgJWIgJWUgJVggJVlcIixkYXRlOlwiJWQvJW0vJVlcIix0aW1lOlwiJUg6JU06JVNcIixkZWNpbWFsOlwiLlwiLHRob3VzYW5kczpcIixcIixncm91cGluZzpbM10sY3VycmVuY3k6W1wiJFwiLFwiXCJdLHllYXI6XCIlWVwiLG1vbnRoOlwiJWIgJVlcIixkYXlNb250aDpcIiViICUtZFwiLGRheU1vbnRoWWVhcjpcIiViICUtZCwgJVlcIn19fSx7fV0sNzMxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3JlZ2lzdHJ5XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscixpPW4ubGF5b3V0QXJyYXlDb250YWluZXJzLGE9bi5sYXlvdXRBcnJheVJlZ2V4ZXMsbz10LnNwbGl0KFwiW1wiKVswXSxzPTA7czxhLmxlbmd0aDtzKyspaWYoKHI9dC5tYXRjaChhW3NdKSkmJjA9PT1yLmluZGV4KXtlPXJbMF07YnJlYWt9aWYoZXx8KGU9aVtpLmluZGV4T2YobyldKSwhZSlyZXR1cm4hMTt2YXIgbD10LnN1YnN0cihlLmxlbmd0aCk7cmV0dXJuIGw/ISEocj1sLm1hdGNoKC9eXFxbKDB8WzEtOV1bMC05XSopXFxdKFxcLiguKykpPyQvKSkmJnthcnJheTplLGluZGV4Ok51bWJlcihyWzFdKSxwcm9wZXJ0eTpyWzNdfHxcIlwifTp7YXJyYXk6ZSxpbmRleDpcIlwiLHByb3BlcnR5OlwiXCJ9fX0se1wiLi4vcmVnaXN0cnlcIjo4Mjl9XSw3MzI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vbGliXCIpLGk9bi5leHRlbmRGbGF0LGE9bi5pc1BsYWluT2JqZWN0LG89e3ZhbFR5cGU6XCJmbGFnbGlzdFwiLGV4dHJhczpbXCJub25lXCJdLGZsYWdzOltcImNhbGNcIixcImNsZWFyQXhpc1R5cGVzXCIsXCJwbG90XCIsXCJzdHlsZVwiLFwibWFya2VyU2l6ZVwiLFwiY29sb3JiYXJzXCJdfSxzPXt2YWxUeXBlOlwiZmxhZ2xpc3RcIixleHRyYXM6W1wibm9uZVwiXSxmbGFnczpbXCJjYWxjXCIsXCJwbG90XCIsXCJsZWdlbmRcIixcInRpY2tzXCIsXCJheHJhbmdlXCIsXCJsYXlvdXRzdHlsZVwiLFwibW9kZWJhclwiLFwiY2FtZXJhXCIsXCJhcnJheWRyYXdcIl19LGw9by5mbGFncy5zbGljZSgpLmNvbmNhdChbXCJmdWxsUmVwbG90XCJdKSxjPXMuZmxhZ3Muc2xpY2UoKS5jb25jYXQoXCJsYXlvdXRSZXBsb3RcIik7ZnVuY3Rpb24gdSh0KXtmb3IodmFyIGU9e30scj0wO3I8dC5sZW5ndGg7cisrKWVbdFtyXV09ITE7cmV0dXJuIGV9ZnVuY3Rpb24gaCh0LGUscil7dmFyIG49aSh7fSx0KTtmb3IodmFyIG8gaW4gbil7dmFyIHM9bltvXTthKHMpJiYobltvXT1mKHMsZSxyLG8pKX1yZXR1cm5cImZyb20tcm9vdFwiPT09ciYmKG4uZWRpdFR5cGU9ZSksbn1mdW5jdGlvbiBmKHQsZSxyLG4pe2lmKHQudmFsVHlwZSl7dmFyIGE9aSh7fSx0KTtpZihhLmVkaXRUeXBlPWUsQXJyYXkuaXNBcnJheSh0Lml0ZW1zKSl7YS5pdGVtcz1uZXcgQXJyYXkodC5pdGVtcy5sZW5ndGgpO2Zvcih2YXIgbz0wO288dC5pdGVtcy5sZW5ndGg7bysrKWEuaXRlbXNbb109Zih0Lml0ZW1zW29dLGUsXCJmcm9tLXJvb3RcIil9cmV0dXJuIGF9cmV0dXJuIGgodCxlLFwiX1wiPT09bi5jaGFyQXQoMCk/XCJuZXN0ZWRcIjpcImZyb20tcm9vdFwiKX1lLmV4cG9ydHM9e3RyYWNlczpvLGxheW91dDpzLHRyYWNlRmxhZ3M6ZnVuY3Rpb24oKXtyZXR1cm4gdShsKX0sbGF5b3V0RmxhZ3M6ZnVuY3Rpb24oKXtyZXR1cm4gdShjKX0sdXBkYXRlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5lZGl0VHlwZTtpZihyJiZcIm5vbmVcIiE9PXIpZm9yKHZhciBuPXIuc3BsaXQoXCIrXCIpLGk9MDtpPG4ubGVuZ3RoO2krKyl0W25baV1dPSEwfSxvdmVycmlkZUFsbDpofX0se1wiLi4vbGliXCI6NzAxfV0sNzMzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcImdsLW1hdDQvZnJvbVF1YXRcIiksYT10KFwiLi4vcmVnaXN0cnlcIiksbz10KFwiLi4vbGliXCIpLHM9dChcIi4uL3Bsb3RzL3Bsb3RzXCIpLGw9dChcIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiKSxjPXQoXCIuLi9jb21wb25lbnRzL2NvbG9yXCIpLHU9bC5jbGVhbklkLGg9bC5nZXRGcm9tVHJhY2UsZj1hLnRyYWNlSXM7ZnVuY3Rpb24gcCh0LGUpe3ZhciByPXRbZV0sbj1lLmNoYXJBdCgwKTtyJiZcInBhcGVyXCIhPT1yJiYodFtlXT11KHIsbikpfWZ1bmN0aW9uIGQodCl7ZnVuY3Rpb24gZShlLHIpe3ZhciBuPXRbZV0saT10LnRpdGxlJiZ0LnRpdGxlW3JdO24mJiFpJiYodC50aXRsZXx8KHQudGl0bGU9e30pLHQudGl0bGVbcl09dFtlXSxkZWxldGUgdFtlXSl9dCYmKFwic3RyaW5nXCIhPXR5cGVvZiB0LnRpdGxlJiZcIm51bWJlclwiIT10eXBlb2YgdC50aXRsZXx8KHQudGl0bGU9e3RleHQ6dC50aXRsZX0pLGUoXCJ0aXRsZWZvbnRcIixcImZvbnRcIiksZShcInRpdGxlcG9zaXRpb25cIixcInBvc2l0aW9uXCIpLGUoXCJ0aXRsZXNpZGVcIixcInNpZGVcIiksZShcInRpdGxlb2Zmc2V0XCIsXCJvZmZzZXRcIikpfWZ1bmN0aW9uIGcodCl7aWYoIW8uaXNQbGFpbk9iamVjdCh0KSlyZXR1cm4hMTt2YXIgZT10Lm5hbWU7cmV0dXJuIGRlbGV0ZSB0Lm5hbWUsZGVsZXRlIHQuc2hvd2xlZ2VuZCwoXCJzdHJpbmdcIj09dHlwZW9mIGV8fFwibnVtYmVyXCI9PXR5cGVvZiBlKSYmU3RyaW5nKGUpfWZ1bmN0aW9uIHYodCxlLHIsbil7aWYociYmIW4pcmV0dXJuIHQ7aWYobiYmIXIpcmV0dXJuIGU7aWYoIXQudHJpbSgpKXJldHVybiBlO2lmKCFlLnRyaW0oKSlyZXR1cm4gdDt2YXIgaSxhPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKTtmb3IoaT0wO2k8YSYmdC5jaGFyQXQoaSk9PT1lLmNoYXJBdChpKTtpKyspO3JldHVybiB0LnN1YnN0cigwLGkpLnRyaW0oKX1mdW5jdGlvbiBtKHQpe3ZhciBlPVwibWlkZGxlXCIscj1cImNlbnRlclwiO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiYoLTEhPT10LmluZGV4T2YoXCJ0b3BcIik/ZT1cInRvcFwiOi0xIT09dC5pbmRleE9mKFwiYm90dG9tXCIpJiYoZT1cImJvdHRvbVwiKSwtMSE9PXQuaW5kZXhPZihcImxlZnRcIik/cj1cImxlZnRcIjotMSE9PXQuaW5kZXhPZihcInJpZ2h0XCIpJiYocj1cInJpZ2h0XCIpKSxlK1wiIFwiK3J9ZnVuY3Rpb24geSh0LGUpe3JldHVybiBlIGluIHQmJlwib2JqZWN0XCI9PXR5cGVvZiB0W2VdJiYwPT09T2JqZWN0LmtleXModFtlXSkubGVuZ3RofXIuY2xlYXJQcm9taXNlUXVldWU9ZnVuY3Rpb24odCl7QXJyYXkuaXNBcnJheSh0Ll9wcm9taXNlcykmJnQuX3Byb21pc2VzLmxlbmd0aD4wJiZvLmxvZyhcIkNsZWFyaW5nIHByZXZpb3VzIHJlamVjdGVkIHByb21pc2VzIGZyb20gcXVldWUuXCIpLHQuX3Byb21pc2VzPVtdfSxyLmNsZWFuTGF5b3V0PWZ1bmN0aW9uKHQpe3ZhciBlLG47dHx8KHQ9e30pLHQueGF4aXMxJiYodC54YXhpc3x8KHQueGF4aXM9dC54YXhpczEpLGRlbGV0ZSB0LnhheGlzMSksdC55YXhpczEmJih0LnlheGlzfHwodC55YXhpcz10LnlheGlzMSksZGVsZXRlIHQueWF4aXMxKSx0LnNjZW5lMSYmKHQuc2NlbmV8fCh0LnNjZW5lPXQuc2NlbmUxKSxkZWxldGUgdC5zY2VuZTEpO3ZhciBhPShzLnN1YnBsb3RzUmVnaXN0cnkuY2FydGVzaWFufHx7fSkuYXR0clJlZ2V4LGw9KHMuc3VicGxvdHNSZWdpc3RyeS5wb2xhcnx8e30pLmF0dHJSZWdleCxoPShzLnN1YnBsb3RzUmVnaXN0cnkudGVybmFyeXx8e30pLmF0dHJSZWdleCxmPShzLnN1YnBsb3RzUmVnaXN0cnkuZ2wzZHx8e30pLmF0dHJSZWdleCxnPU9iamVjdC5rZXlzKHQpO2ZvcihlPTA7ZTxnLmxlbmd0aDtlKyspe3ZhciB2PWdbZV07aWYoYSYmYS50ZXN0KHYpKXt2YXIgbT10W3ZdO20uYW5jaG9yJiZcImZyZWVcIiE9PW0uYW5jaG9yJiYobS5hbmNob3I9dShtLmFuY2hvcikpLG0ub3ZlcmxheWluZyYmKG0ub3ZlcmxheWluZz11KG0ub3ZlcmxheWluZykpLG0udHlwZXx8KG0uaXNkYXRlP20udHlwZT1cImRhdGVcIjptLmlzbG9nP20udHlwZT1cImxvZ1wiOiExPT09bS5pc2RhdGUmJiExPT09bS5pc2xvZyYmKG0udHlwZT1cImxpbmVhclwiKSksXCJ3aXRoemVyb1wiIT09bS5hdXRvcmFuZ2UmJlwidG96ZXJvXCIhPT1tLmF1dG9yYW5nZXx8KG0uYXV0b3JhbmdlPSEwLG0ucmFuZ2Vtb2RlPVwidG96ZXJvXCIpLGRlbGV0ZSBtLmlzbG9nLGRlbGV0ZSBtLmlzZGF0ZSxkZWxldGUgbS5jYXRlZ29yaWVzLHkobSxcImRvbWFpblwiKSYmZGVsZXRlIG0uZG9tYWluLHZvaWQgMCE9PW0uYXV0b3RpY2smJih2b2lkIDA9PT1tLnRpY2ttb2RlJiYobS50aWNrbW9kZT1tLmF1dG90aWNrP1wiYXV0b1wiOlwibGluZWFyXCIpLGRlbGV0ZSBtLmF1dG90aWNrKSxkKG0pfWVsc2UgaWYobCYmbC50ZXN0KHYpKXtkKHRbdl0ucmFkaWFsYXhpcyl9ZWxzZSBpZihoJiZoLnRlc3Qodikpe3ZhciB4PXRbdl07ZCh4LmFheGlzKSxkKHguYmF4aXMpLGQoeC5jYXhpcyl9ZWxzZSBpZihmJiZmLnRlc3Qodikpe3ZhciBiPXRbdl0sXz1iLmNhbWVyYXBvc2l0aW9uO2lmKEFycmF5LmlzQXJyYXkoXykmJjQ9PT1fWzBdLmxlbmd0aCl7dmFyIHc9X1swXSxrPV9bMV0sQT1fWzJdLFQ9aShbXSx3KSxNPVtdO2ZvcihuPTA7bjwzOysrbilNW25dPWtbbl0rQSpUWzIrNCpuXTtiLmNhbWVyYT17ZXllOnt4Ok1bMF0seTpNWzFdLHo6TVsyXX0sY2VudGVyOnt4OmtbMF0seTprWzFdLHo6a1syXX0sdXA6e3g6MCx5OjAsejoxfX0sZGVsZXRlIGIuY2FtZXJhcG9zaXRpb259ZChiLnhheGlzKSxkKGIueWF4aXMpLGQoYi56YXhpcyl9fXZhciBTPUFycmF5LmlzQXJyYXkodC5hbm5vdGF0aW9ucyk/dC5hbm5vdGF0aW9ucy5sZW5ndGg6MDtmb3IoZT0wO2U8UztlKyspe3ZhciBFPXQuYW5ub3RhdGlvbnNbZV07by5pc1BsYWluT2JqZWN0KEUpJiYoRS5yZWYmJihcInBhcGVyXCI9PT1FLnJlZj8oRS54cmVmPVwicGFwZXJcIixFLnlyZWY9XCJwYXBlclwiKTpcImRhdGFcIj09PUUucmVmJiYoRS54cmVmPVwieFwiLEUueXJlZj1cInlcIiksZGVsZXRlIEUucmVmKSxwKEUsXCJ4cmVmXCIpLHAoRSxcInlyZWZcIikpfXZhciBDPUFycmF5LmlzQXJyYXkodC5zaGFwZXMpP3Quc2hhcGVzLmxlbmd0aDowO2ZvcihlPTA7ZTxDO2UrKyl7dmFyIEw9dC5zaGFwZXNbZV07by5pc1BsYWluT2JqZWN0KEwpJiYocChMLFwieHJlZlwiKSxwKEwsXCJ5cmVmXCIpKX12YXIgej10LmxlZ2VuZDtyZXR1cm4geiYmKHoueD4zPyh6Lng9MS4wMix6LnhhbmNob3I9XCJsZWZ0XCIpOnoueDwtMiYmKHoueD0tLjAyLHoueGFuY2hvcj1cInJpZ2h0XCIpLHoueT4zPyh6Lnk9MS4wMix6LnlhbmNob3I9XCJib3R0b21cIik6ei55PC0yJiYoei55PS0uMDIsei55YW5jaG9yPVwidG9wXCIpKSxkKHQpLFwicm90YXRlXCI9PT10LmRyYWdtb2RlJiYodC5kcmFnbW9kZT1cIm9yYml0XCIpLGMuY2xlYW4odCksdC50ZW1wbGF0ZSYmdC50ZW1wbGF0ZS5sYXlvdXQmJnIuY2xlYW5MYXlvdXQodC50ZW1wbGF0ZS5sYXlvdXQpLHR9LHIuY2xlYW5EYXRhPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgbixpPXRbZV07aWYoXCJoaXN0b2dyYW15XCI9PT1pLnR5cGUmJlwieGJpbnNcImluIGkmJiEoXCJ5Ymluc1wiaW4gaSkmJihpLnliaW5zPWkueGJpbnMsZGVsZXRlIGkueGJpbnMpLGkuZXJyb3JfeSYmXCJvcGFjaXR5XCJpbiBpLmVycm9yX3kpe3ZhciBsPWMuZGVmYXVsdHMsaD1pLmVycm9yX3kuY29sb3J8fChmKGksXCJiYXJcIik/Yy5kZWZhdWx0TGluZTpsW2UlbC5sZW5ndGhdKTtpLmVycm9yX3kuY29sb3I9Yy5hZGRPcGFjaXR5KGMucmdiKGgpLGMub3BhY2l0eShoKSppLmVycm9yX3kub3BhY2l0eSksZGVsZXRlIGkuZXJyb3JfeS5vcGFjaXR5fWlmKFwiYmFyZGlyXCJpbiBpJiYoXCJoXCIhPT1pLmJhcmRpcnx8IWYoaSxcImJhclwiKSYmXCJoaXN0b2dyYW1cIiE9PWkudHlwZS5zdWJzdHIoMCw5KXx8KGkub3JpZW50YXRpb249XCJoXCIsci5zd2FwWFlEYXRhKGkpKSxkZWxldGUgaS5iYXJkaXIpLFwiaGlzdG9ncmFteVwiPT09aS50eXBlJiZyLnN3YXBYWURhdGEoaSksXCJoaXN0b2dyYW14XCIhPT1pLnR5cGUmJlwiaGlzdG9ncmFteVwiIT09aS50eXBlfHwoaS50eXBlPVwiaGlzdG9ncmFtXCIpLFwic2NsXCJpbiBpJiYhKFwiY29sb3JzY2FsZVwiaW4gaSkmJihpLmNvbG9yc2NhbGU9aS5zY2wsZGVsZXRlIGkuc2NsKSxcInJldmVyc2VzY2xcImluIGkmJiEoXCJyZXZlcnNlc2NhbGVcImluIGkpJiYoaS5yZXZlcnNlc2NhbGU9aS5yZXZlcnNlc2NsLGRlbGV0ZSBpLnJldmVyc2VzY2wpLGkueGF4aXMmJihpLnhheGlzPXUoaS54YXhpcyxcInhcIikpLGkueWF4aXMmJihpLnlheGlzPXUoaS55YXhpcyxcInlcIikpLGYoaSxcImdsM2RcIikmJmkuc2NlbmUmJihpLnNjZW5lPXMuc3VicGxvdHNSZWdpc3RyeS5nbDNkLmNsZWFuSWQoaS5zY2VuZSkpLCFmKGksXCJwaWVcIikmJiFmKGksXCJiYXJcIikmJlwid2F0ZXJmYWxsXCIhPT1pLnR5cGUpaWYoQXJyYXkuaXNBcnJheShpLnRleHRwb3NpdGlvbikpZm9yKG49MDtuPGkudGV4dHBvc2l0aW9uLmxlbmd0aDtuKyspaS50ZXh0cG9zaXRpb25bbl09bShpLnRleHRwb3NpdGlvbltuXSk7ZWxzZSBpLnRleHRwb3NpdGlvbiYmKGkudGV4dHBvc2l0aW9uPW0oaS50ZXh0cG9zaXRpb24pKTt2YXIgcD1hLmdldE1vZHVsZShpKTtpZihwJiZwLmNvbG9yYmFyKXt2YXIgeD1wLmNvbG9yYmFyLmNvbnRhaW5lcixiPXg/aVt4XTppO2ImJmIuY29sb3JzY2FsZSYmKFwiWUlHbkJ1XCI9PT1iLmNvbG9yc2NhbGUmJihiLmNvbG9yc2NhbGU9XCJZbEduQnVcIiksXCJZSU9yUmRcIj09PWIuY29sb3JzY2FsZSYmKGIuY29sb3JzY2FsZT1cIllsT3JSZFwiKSl9aWYoXCJzdXJmYWNlXCI9PT1pLnR5cGUmJm8uaXNQbGFpbk9iamVjdChpLmNvbnRvdXJzKSl7dmFyIF89W1wieFwiLFwieVwiLFwielwiXTtmb3Iobj0wO248Xy5sZW5ndGg7bisrKXt2YXIgdz1pLmNvbnRvdXJzW19bbl1dO28uaXNQbGFpbk9iamVjdCh3KSYmKHcuaGlnaGxpZ2h0Q29sb3ImJih3LmhpZ2hsaWdodGNvbG9yPXcuaGlnaGxpZ2h0Q29sb3IsZGVsZXRlIHcuaGlnaGxpZ2h0Q29sb3IpLHcuaGlnaGxpZ2h0V2lkdGgmJih3LmhpZ2hsaWdodHdpZHRoPXcuaGlnaGxpZ2h0V2lkdGgsZGVsZXRlIHcuaGlnaGxpZ2h0V2lkdGgpKX19aWYoXCJjYW5kbGVzdGlja1wiPT09aS50eXBlfHxcIm9obGNcIj09PWkudHlwZSl7dmFyIGs9ITEhPT0oaS5pbmNyZWFzaW5nfHx7fSkuc2hvd2xlZ2VuZCxBPSExIT09KGkuZGVjcmVhc2luZ3x8e30pLnNob3dsZWdlbmQsVD1nKGkuaW5jcmVhc2luZyksTT1nKGkuZGVjcmVhc2luZyk7aWYoITEhPT1UJiYhMSE9PU0pe3ZhciBTPXYoVCxNLGssQSk7UyYmKGkubmFtZT1TKX1lbHNlIVQmJiFNfHxpLm5hbWV8fChpLm5hbWU9VHx8TSl9aWYoQXJyYXkuaXNBcnJheShpLnRyYW5zZm9ybXMpKXt2YXIgRT1pLnRyYW5zZm9ybXM7Zm9yKG49MDtuPEUubGVuZ3RoO24rKyl7dmFyIEM9RVtuXTtpZihvLmlzUGxhaW5PYmplY3QoQykpc3dpdGNoKEMudHlwZSl7Y2FzZVwiZmlsdGVyXCI6Qy5maWx0ZXJzcmMmJihDLnRhcmdldD1DLmZpbHRlcnNyYyxkZWxldGUgQy5maWx0ZXJzcmMpLEMuY2FsZW5kYXImJihDLnZhbHVlY2FsZW5kYXJ8fChDLnZhbHVlY2FsZW5kYXI9Qy5jYWxlbmRhciksZGVsZXRlIEMuY2FsZW5kYXIpO2JyZWFrO2Nhc2VcImdyb3VwYnlcIjppZihDLnN0eWxlcz1DLnN0eWxlc3x8Qy5zdHlsZSxDLnN0eWxlcyYmIUFycmF5LmlzQXJyYXkoQy5zdHlsZXMpKXt2YXIgTD1DLnN0eWxlcyx6PU9iamVjdC5rZXlzKEwpO0Muc3R5bGVzPVtdO2Zvcih2YXIgTz0wO088ei5sZW5ndGg7TysrKUMuc3R5bGVzLnB1c2goe3RhcmdldDp6W09dLHZhbHVlOkxbeltPXV19KX19fX15KGksXCJsaW5lXCIpJiZkZWxldGUgaS5saW5lLFwibWFya2VyXCJpbiBpJiYoeShpLm1hcmtlcixcImxpbmVcIikmJmRlbGV0ZSBpLm1hcmtlci5saW5lLHkoaSxcIm1hcmtlclwiKSYmZGVsZXRlIGkubWFya2VyKSxjLmNsZWFuKGkpLGkuYXV0b2JpbngmJihkZWxldGUgaS5hdXRvYmlueCxkZWxldGUgaS54YmlucyksaS5hdXRvYmlueSYmKGRlbGV0ZSBpLmF1dG9iaW55LGRlbGV0ZSBpLnliaW5zKSxkKGkpLGkuY29sb3JiYXImJmQoaS5jb2xvcmJhciksaS5tYXJrZXImJmkubWFya2VyLmNvbG9yYmFyJiZkKGkubWFya2VyLmNvbG9yYmFyKSxpLmxpbmUmJmkubGluZS5jb2xvcmJhciYmZChpLmxpbmUuY29sb3JiYXIpLGkuYWF4aXMmJmQoaS5hYXhpcyksaS5iYXhpcyYmZChpLmJheGlzKX19LHIuc3dhcFhZRGF0YT1mdW5jdGlvbih0KXt2YXIgZTtpZihvLnN3YXBBdHRycyh0LFtcIj9cIixcIj8wXCIsXCJkP1wiLFwiP2JpbnNcIixcIm5iaW5zP1wiLFwiYXV0b2Jpbj9cIixcIj9zcmNcIixcImVycm9yXz9cIl0pLEFycmF5LmlzQXJyYXkodC56KSYmQXJyYXkuaXNBcnJheSh0LnpbMF0pJiYodC50cmFuc3Bvc2U/ZGVsZXRlIHQudHJhbnNwb3NlOnQudHJhbnNwb3NlPSEwKSx0LmVycm9yX3gmJnQuZXJyb3JfeSl7dmFyIHI9dC5lcnJvcl95LG49XCJjb3B5X3lzdHlsZVwiaW4gcj9yLmNvcHlfeXN0eWxlOiEoci5jb2xvcnx8ci50aGlja25lc3N8fHIud2lkdGgpO28uc3dhcEF0dHJzKHQsW1wiZXJyb3JfPy5jb3B5X3lzdHlsZVwiXSksbiYmby5zd2FwQXR0cnModCxbXCJlcnJvcl8/LmNvbG9yXCIsXCJlcnJvcl8/LnRoaWNrbmVzc1wiLFwiZXJyb3JfPy53aWR0aFwiXSl9aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQuaG92ZXJpbmZvKXt2YXIgaT10LmhvdmVyaW5mby5zcGxpdChcIitcIik7Zm9yKGU9MDtlPGkubGVuZ3RoO2UrKylcInhcIj09PWlbZV0/aVtlXT1cInlcIjpcInlcIj09PWlbZV0mJihpW2VdPVwieFwiKTt0LmhvdmVyaW5mbz1pLmpvaW4oXCIrXCIpfX0sci5jb2VyY2VUcmFjZUluZGljZXM9ZnVuY3Rpb24odCxlKXtpZihuKGUpKXJldHVybltlXTtpZighQXJyYXkuaXNBcnJheShlKXx8IWUubGVuZ3RoKXJldHVybiB0LmRhdGEubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KTtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHI9W10saT0wO2k8ZS5sZW5ndGg7aSsrKW8uaXNJbmRleChlW2ldLHQuZGF0YS5sZW5ndGgpP3IucHVzaChlW2ldKTpvLndhcm4oXCJ0cmFjZSBpbmRleCAoXCIsZVtpXSxcIikgaXMgbm90IGEgbnVtYmVyIG9yIGlzIG91dCBvZiBib3VuZHNcIik7cmV0dXJuIHJ9cmV0dXJuIGV9LHIubWFuYWdlQXJyYXlDb250YWluZXJzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10Lm9iaixhPXQucGFydHMscz1hLmxlbmd0aCxsPWFbcy0xXSxjPW4obCk7aWYoYyYmbnVsbD09PWUpe3ZhciB1PWEuc2xpY2UoMCxzLTEpLmpvaW4oXCIuXCIpO28ubmVzdGVkUHJvcGVydHkoaSx1KS5nZXQoKS5zcGxpY2UobCwxKX1lbHNlIGMmJnZvaWQgMD09PXQuZ2V0KCk/KHZvaWQgMD09PXQuZ2V0KCkmJihyW3QuYXN0cl09bnVsbCksdC5zZXQoZSkpOnQuc2V0KGUpfTt2YXIgeD0vKFxcLlteXFxbXFxdXFwuXSt8XFxbW15cXFtcXF1cXC5dK1xcXSkkLztmdW5jdGlvbiBiKHQpe3ZhciBlPXQuc2VhcmNoKHgpO2lmKGU+MClyZXR1cm4gdC5zdWJzdHIoMCxlKX1yLmhhc1BhcmVudD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1iKGUpO3I7KXtpZihyIGluIHQpcmV0dXJuITA7cj1iKHIpfXJldHVybiExfTt2YXIgXz1bXCJ4XCIsXCJ5XCIsXCJ6XCJdO3IuY2xlYXJBeGlzVHlwZXM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWZvcih2YXIgaT10Ll9mdWxsRGF0YVtuXSxhPTA7YTwzO2ErKyl7dmFyIHM9aCh0LGksX1thXSk7aWYocyYmXCJsb2dcIiE9PXMudHlwZSl7dmFyIGw9cy5fbmFtZSxjPXMuX2lkLnN1YnN0cigxKTtpZihcInNjZW5lXCI9PT1jLnN1YnN0cigwLDUpKXtpZih2b2lkIDAhPT1yW2NdKWNvbnRpbnVlO2w9YytcIi5cIitsfXZhciB1PWwrXCIudHlwZVwiO3ZvaWQgMD09PXJbbF0mJnZvaWQgMD09PXJbdV0mJm8ubmVzdGVkUHJvcGVydHkodC5sYXlvdXQsdSkuc2V0KG51bGwpfX19fSx7XCIuLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vbGliXCI6NzAxLFwiLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCI6NzUyLFwiLi4vcGxvdHMvcGxvdHNcIjo4MTAsXCIuLi9yZWdpc3RyeVwiOjgyOSxcImZhc3QtaXNudW1lcmljXCI6MjIyLFwiZ2wtbWF0NC9mcm9tUXVhdFwiOjI1OX1dLDczNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL3Bsb3RfYXBpXCIpO3IucGxvdD1uLnBsb3Qsci5uZXdQbG90PW4ubmV3UGxvdCxyLnJlc3R5bGU9bi5yZXN0eWxlLHIucmVsYXlvdXQ9bi5yZWxheW91dCxyLnJlZHJhdz1uLnJlZHJhdyxyLnVwZGF0ZT1uLnVwZGF0ZSxyLl9ndWlSZXN0eWxlPW4uX2d1aVJlc3R5bGUsci5fZ3VpUmVsYXlvdXQ9bi5fZ3VpUmVsYXlvdXQsci5fZ3VpVXBkYXRlPW4uX2d1aVVwZGF0ZSxyLl9zdG9yZURpcmVjdEdVSUVkaXQ9bi5fc3RvcmVEaXJlY3RHVUlFZGl0LHIucmVhY3Q9bi5yZWFjdCxyLmV4dGVuZFRyYWNlcz1uLmV4dGVuZFRyYWNlcyxyLnByZXBlbmRUcmFjZXM9bi5wcmVwZW5kVHJhY2VzLHIuYWRkVHJhY2VzPW4uYWRkVHJhY2VzLHIuZGVsZXRlVHJhY2VzPW4uZGVsZXRlVHJhY2VzLHIubW92ZVRyYWNlcz1uLm1vdmVUcmFjZXMsci5wdXJnZT1uLnB1cmdlLHIuYWRkRnJhbWVzPW4uYWRkRnJhbWVzLHIuZGVsZXRlRnJhbWVzPW4uZGVsZXRlRnJhbWVzLHIuYW5pbWF0ZT1uLmFuaW1hdGUsci5zZXRQbG90Q29uZmlnPW4uc2V0UGxvdENvbmZpZyxyLnRvSW1hZ2U9dChcIi4vdG9faW1hZ2VcIiksci52YWxpZGF0ZT10KFwiLi92YWxpZGF0ZVwiKSxyLmRvd25sb2FkSW1hZ2U9dChcIi4uL3NuYXBzaG90L2Rvd25sb2FkXCIpO3ZhciBpPXQoXCIuL3RlbXBsYXRlX2FwaVwiKTtyLm1ha2VUZW1wbGF0ZT1pLm1ha2VUZW1wbGF0ZSxyLnZhbGlkYXRlVGVtcGxhdGU9aS52YWxpZGF0ZVRlbXBsYXRlfSx7XCIuLi9zbmFwc2hvdC9kb3dubG9hZFwiOjgzMSxcIi4vcGxvdF9hcGlcIjo3MzYsXCIuL3RlbXBsYXRlX2FwaVwiOjc0MSxcIi4vdG9faW1hZ2VcIjo3NDIsXCIuL3ZhbGlkYXRlXCI6NzQzfV0sNzM1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2xpYi9pc19wbGFpbl9vYmplY3RcIiksaT10KFwiLi4vbGliL25vb3BcIiksYT10KFwiLi4vbGliL2xvZ2dlcnNcIiksbz10KFwiLi4vbGliL3NlYXJjaFwiKS5zb3J0ZXJBc2Mscz10KFwiLi4vcmVnaXN0cnlcIik7ci5jb250YWluZXJBcnJheU1hdGNoPXQoXCIuL2NvbnRhaW5lcl9hcnJheV9tYXRjaFwiKTt2YXIgbD1yLmlzQWRkVmFsPWZ1bmN0aW9uKHQpe3JldHVyblwiYWRkXCI9PT10fHxuKHQpfSxjPXIuaXNSZW1vdmVWYWw9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10fHxcInJlbW92ZVwiPT09dH07ci5hcHBseUNvbnRhaW5lckFycmF5Q2hhbmdlcz1mdW5jdGlvbih0LGUscixuLHUpe3ZhciBoPWUuYXN0cixmPXMuZ2V0Q29tcG9uZW50TWV0aG9kKGgsXCJzdXBwbHlMYXlvdXREZWZhdWx0c1wiKSxwPXMuZ2V0Q29tcG9uZW50TWV0aG9kKGgsXCJkcmF3XCIpLGQ9cy5nZXRDb21wb25lbnRNZXRob2QoaCxcImRyYXdPbmVcIiksZz1uLnJlcGxvdHx8bi5yZWNhbGN8fGY9PT1pfHxwPT09aSx2PXQubGF5b3V0LG09dC5fZnVsbExheW91dDtpZihyW1wiXCJdKXtPYmplY3Qua2V5cyhyKS5sZW5ndGg+MSYmYS53YXJuKFwiRnVsbCBhcnJheSBlZGl0cyBhcmUgaW5jb21wYXRpYmxlIHdpdGggb3RoZXIgZWRpdHNcIixoKTt2YXIgeT1yW1wiXCJdW1wiXCJdO2lmKGMoeSkpZS5zZXQobnVsbCk7ZWxzZXtpZighQXJyYXkuaXNBcnJheSh5KSlyZXR1cm4gYS53YXJuKFwiVW5yZWNvZ25pemVkIGZ1bGwgYXJyYXkgZWRpdCB2YWx1ZVwiLGgseSksITA7ZS5zZXQoeSl9cmV0dXJuIWcmJihmKHYsbSkscCh0KSwhMCl9dmFyIHgsYixfLHcsayxBLFQsTSxTPU9iamVjdC5rZXlzKHIpLm1hcChOdW1iZXIpLnNvcnQobyksRT1lLmdldCgpLEM9RXx8W10sTD11KG0saCkuZ2V0KCksej1bXSxPPS0xLEk9Qy5sZW5ndGg7Zm9yKHg9MDt4PFMubGVuZ3RoO3grKylpZih3PXJbXz1TW3hdXSxrPU9iamVjdC5rZXlzKHcpLEE9d1tcIlwiXSxUPWwoQSksXzwwfHxfPkMubGVuZ3RoLShUPzA6MSkpYS53YXJuKFwiaW5kZXggb3V0IG9mIHJhbmdlXCIsaCxfKTtlbHNlIGlmKHZvaWQgMCE9PUEpay5sZW5ndGg+MSYmYS53YXJuKFwiSW5zZXJ0aW9uICYgcmVtb3ZhbCBhcmUgaW5jb21wYXRpYmxlIHdpdGggZWRpdHMgdG8gdGhlIHNhbWUgaW5kZXguXCIsaCxfKSxjKEEpP3oucHVzaChfKTpUPyhcImFkZFwiPT09QSYmKEE9e30pLEMuc3BsaWNlKF8sMCxBKSxMJiZMLnNwbGljZShfLDAse30pKTphLndhcm4oXCJVbnJlY29nbml6ZWQgZnVsbCBvYmplY3QgZWRpdCB2YWx1ZVwiLGgsXyxBKSwtMT09PU8mJihPPV8pO2Vsc2UgZm9yKGI9MDtiPGsubGVuZ3RoO2IrKylNPWgrXCJbXCIrXytcIl0uXCIsdShDW19dLGtbYl0sTSkuc2V0KHdba1tiXV0pO2Zvcih4PXoubGVuZ3RoLTE7eD49MDt4LS0pQy5zcGxpY2Uoelt4XSwxKSxMJiZMLnNwbGljZSh6W3hdLDEpO2lmKEMubGVuZ3RoP0V8fGUuc2V0KEMpOmUuc2V0KG51bGwpLGcpcmV0dXJuITE7aWYoZih2LG0pLGQhPT1pKXt2YXIgRDtpZigtMT09PU8pRD1TO2Vsc2V7Zm9yKEk9TWF0aC5tYXgoQy5sZW5ndGgsSSksRD1bXSx4PTA7eDxTLmxlbmd0aCYmISgoXz1TW3hdKT49Tyk7eCsrKUQucHVzaChfKTtmb3IoeD1PO3g8STt4KyspRC5wdXNoKHgpfWZvcih4PTA7eDxELmxlbmd0aDt4KyspZCh0LERbeF0pfWVsc2UgcCh0KTtyZXR1cm4hMH19LHtcIi4uL2xpYi9pc19wbGFpbl9vYmplY3RcIjo3MDIsXCIuLi9saWIvbG9nZ2Vyc1wiOjcwNSxcIi4uL2xpYi9ub29wXCI6NzEwLFwiLi4vbGliL3NlYXJjaFwiOjcyMCxcIi4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9jb250YWluZXJfYXJyYXlfbWF0Y2hcIjo3MzF9XSw3MzY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiZmFzdC1pc251bWVyaWNcIiksYT10KFwiaGFzLWhvdmVyXCIpLG89dChcIi4uL2xpYlwiKSxzPW8ubmVzdGVkUHJvcGVydHksbD10KFwiLi4vbGliL2V2ZW50c1wiKSxjPXQoXCIuLi9saWIvcXVldWVcIiksdT10KFwiLi4vcmVnaXN0cnlcIiksaD10KFwiLi9wbG90X3NjaGVtYVwiKSxmPXQoXCIuLi9wbG90cy9wbG90c1wiKSxwPXQoXCIuLi9wbG90cy9wb2xhci9sZWdhY3lcIiksZD10KFwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksZz10KFwiLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLHY9dChcIi4uL2NvbXBvbmVudHMvY29sb3JcIiksbT10KFwiLi4vY29tcG9uZW50cy9jb2xvcmJhci9jb25uZWN0XCIpLHk9dChcIi4uL3Bsb3RzL2NhcnRlc2lhbi9ncmFwaF9pbnRlcmFjdFwiKS5pbml0SW50ZXJhY3Rpb25zLHg9dChcIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzXCIpLGI9dChcIi4uL2xpYi9zdmdfdGV4dF91dGlsc1wiKSxfPXQoXCIuLi9wbG90cy9jYXJ0ZXNpYW4vc2VsZWN0XCIpLmNsZWFyU2VsZWN0LHc9dChcIi4vcGxvdF9jb25maWdcIikuZGZsdENvbmZpZyxrPXQoXCIuL21hbmFnZV9hcnJheXNcIiksQT10KFwiLi9oZWxwZXJzXCIpLFQ9dChcIi4vc3Vicm91dGluZXNcIiksTT10KFwiLi9lZGl0X3R5cGVzXCIpLFM9dChcIi4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHNcIikuQVhfTkFNRV9QQVRURVJOLEU9MDtmdW5jdGlvbiBDKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7ZS5fcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudD9lLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50LS06dC5lbWl0KFwicGxvdGx5X2FmdGVycGxvdFwiKX1mdW5jdGlvbiBMKHQsZSl7dHJ5e3QuX2Z1bGxMYXlvdXQuX3BhcGVyLnN0eWxlKFwiYmFja2dyb3VuZFwiLGUpfWNhdGNoKHQpe28uZXJyb3IodCl9fWZ1bmN0aW9uIHoodCxlKXtMKHQsdi5jb21iaW5lKGUsXCJ3aGl0ZVwiKSl9ZnVuY3Rpb24gTyh0LGUpe2lmKCF0Ll9jb250ZXh0KXt0Ll9jb250ZXh0PW8uZXh0ZW5kRGVlcCh7fSx3KTt2YXIgcj1uLnNlbGVjdChcImJhc2VcIik7dC5fY29udGV4dC5fYmFzZVVybD1yLnNpemUoKSYmci5hdHRyKFwiaHJlZlwiKT93aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdChcIiNcIilbMF06XCJcIn12YXIgaSxzLGwsYz10Ll9jb250ZXh0O2lmKGUpe2ZvcihzPU9iamVjdC5rZXlzKGUpLGk9MDtpPHMubGVuZ3RoO2krKylcImVkaXRhYmxlXCIhPT0obD1zW2ldKSYmXCJlZGl0c1wiIT09bCYmbCBpbiBjJiYoXCJzZXRCYWNrZ3JvdW5kXCI9PT1sJiZcIm9wYXF1ZVwiPT09ZVtsXT9jW2xdPXo6Y1tsXT1lW2xdKTtlLnBsb3QzZFBpeGVsUmF0aW8mJiFjLnBsb3RHbFBpeGVsUmF0aW8mJihjLnBsb3RHbFBpeGVsUmF0aW89Yy5wbG90M2RQaXhlbFJhdGlvKTt2YXIgdT1lLmVkaXRhYmxlO2lmKHZvaWQgMCE9PXUpZm9yKGMuZWRpdGFibGU9dSxzPU9iamVjdC5rZXlzKGMuZWRpdHMpLGk9MDtpPHMubGVuZ3RoO2krKyljLmVkaXRzW3NbaV1dPXU7aWYoZS5lZGl0cylmb3Iocz1PYmplY3Qua2V5cyhlLmVkaXRzKSxpPTA7aTxzLmxlbmd0aDtpKyspKGw9c1tpXSlpbiBjLmVkaXRzJiYoYy5lZGl0c1tsXT1lLmVkaXRzW2xdKTtjLl9leHBvcnRlZFBsb3Q9ZS5fZXhwb3J0ZWRQbG90fWMuc3RhdGljUGxvdCYmKGMuZWRpdGFibGU9ITEsYy5lZGl0cz17fSxjLmF1dG9zaXphYmxlPSExLGMuc2Nyb2xsWm9vbT0hMSxjLmRvdWJsZUNsaWNrPSExLGMuc2hvd1RpcHM9ITEsYy5zaG93TGluaz0hMSxjLmRpc3BsYXlNb2RlQmFyPSExKSxcImhvdmVyXCIhPT1jLmRpc3BsYXlNb2RlQmFyfHxhfHwoYy5kaXNwbGF5TW9kZUJhcj0hMCksXCJ0cmFuc3BhcmVudFwiIT09Yy5zZXRCYWNrZ3JvdW5kJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBjLnNldEJhY2tncm91bmR8fChjLnNldEJhY2tncm91bmQ9TCksYy5faGFzWmVyb0hlaWdodD1jLl9oYXNaZXJvSGVpZ2h0fHwwPT09dC5jbGllbnRIZWlnaHQsYy5faGFzWmVyb1dpZHRoPWMuX2hhc1plcm9XaWR0aHx8MD09PXQuY2xpZW50V2lkdGg7dmFyIGg9Yy5zY3JvbGxab29tLGY9Yy5fc2Nyb2xsWm9vbT17fTtpZighMD09PWgpZi5jYXJ0ZXNpYW49MSxmLmdsM2Q9MSxmLmdlbz0xLGYubWFwYm94PTE7ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgaCl7dmFyIHA9aC5zcGxpdChcIitcIik7Zm9yKGk9MDtpPHAubGVuZ3RoO2krKylmW3BbaV1dPTF9ZWxzZSExIT09aCYmKGYuZ2wzZD0xLGYuZ2VvPTEsZi5tYXBib3g9MSl9ZnVuY3Rpb24gSSh0LGUpe3ZhciByLG4saT1lKzEsYT1bXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKShuPXRbcl0pPDA/YS5wdXNoKGkrbik6YS5wdXNoKG4pO3JldHVybiBhfWZ1bmN0aW9uIEQodCxlLHIpe3ZhciBuLGk7Zm9yKG49MDtuPGUubGVuZ3RoO24rKyl7aWYoKGk9ZVtuXSkhPT1wYXJzZUludChpLDEwKSl0aHJvdyBuZXcgRXJyb3IoXCJhbGwgdmFsdWVzIGluIFwiK3IrXCIgbXVzdCBiZSBpbnRlZ2Vyc1wiKTtpZihpPj10LmRhdGEubGVuZ3RofHxpPC10LmRhdGEubGVuZ3RoKXRocm93IG5ldyBFcnJvcihyK1wiIG11c3QgYmUgdmFsaWQgaW5kaWNlcyBmb3IgZ2QuZGF0YS5cIik7aWYoZS5pbmRleE9mKGksbisxKT4tMXx8aT49MCYmZS5pbmRleE9mKC10LmRhdGEubGVuZ3RoK2kpPi0xfHxpPDAmJmUuaW5kZXhPZih0LmRhdGEubGVuZ3RoK2kpPi0xKXRocm93IG5ldyBFcnJvcihcImVhY2ggaW5kZXggaW4gXCIrcitcIiBtdXN0IGJlIHVuaXF1ZS5cIil9fWZ1bmN0aW9uIFAodCxlLHIpe2lmKCFBcnJheS5pc0FycmF5KHQuZGF0YSkpdGhyb3cgbmV3IEVycm9yKFwiZ2QuZGF0YSBtdXN0IGJlIGFuIGFycmF5LlwiKTtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoXCJjdXJyZW50SW5kaWNlcyBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LlwiKTtpZihBcnJheS5pc0FycmF5KGUpfHwoZT1bZV0pLEQodCxlLFwiY3VycmVudEluZGljZXNcIiksXCJ1bmRlZmluZWRcIj09dHlwZW9mIHJ8fEFycmF5LmlzQXJyYXkocil8fChyPVtyXSksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHImJkQodCxyLFwibmV3SW5kaWNlc1wiKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgciYmZS5sZW5ndGghPT1yLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJjdXJyZW50IGFuZCBuZXcgaW5kaWNlcyBtdXN0IGJlIG9mIGVxdWFsIGxlbmd0aC5cIil9ZnVuY3Rpb24gUih0LGUscixuLGEpeyFmdW5jdGlvbih0LGUscixuKXt2YXIgaT1vLmlzUGxhaW5PYmplY3Qobik7aWYoIUFycmF5LmlzQXJyYXkodC5kYXRhKSl0aHJvdyBuZXcgRXJyb3IoXCJnZC5kYXRhIG11c3QgYmUgYW4gYXJyYXlcIik7aWYoIW8uaXNQbGFpbk9iamVjdChlKSl0aHJvdyBuZXcgRXJyb3IoXCJ1cGRhdGUgbXVzdCBiZSBhIGtleTp2YWx1ZSBvYmplY3RcIik7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIHIpdGhyb3cgbmV3IEVycm9yKFwiaW5kaWNlcyBtdXN0IGJlIGFuIGludGVnZXIgb3IgYXJyYXkgb2YgaW50ZWdlcnNcIik7Zm9yKHZhciBhIGluIEQodCxyLFwiaW5kaWNlc1wiKSxlKXtpZighQXJyYXkuaXNBcnJheShlW2FdKXx8ZVthXS5sZW5ndGghPT1yLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJhdHRyaWJ1dGUgXCIrYStcIiBtdXN0IGJlIGFuIGFycmF5IG9mIGxlbmd0aCBlcXVhbCB0byBpbmRpY2VzIGFycmF5IGxlbmd0aFwiKTtpZihpJiYoIShhIGluIG4pfHwhQXJyYXkuaXNBcnJheShuW2FdKXx8blthXS5sZW5ndGghPT1lW2FdLmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKFwid2hlbiBtYXhQb2ludHMgaXMgc2V0IGFzIGEga2V5OnZhbHVlIG9iamVjdCBpdCBtdXN0IGNvbnRhaW4gYSAxOjEgY29ycmlzcG9uZGVuY2Ugd2l0aCB0aGUga2V5cyBhbmQgbnVtYmVyIG9mIHRyYWNlcyBpbiB0aGUgdXBkYXRlIG9iamVjdFwiKX19KHQsZSxyLG4pO2Zvcih2YXIgbD1mdW5jdGlvbih0LGUscixuKXt2YXIgYSxsLGMsdSxoLGY9by5pc1BsYWluT2JqZWN0KG4pLHA9W107Zm9yKHZhciBkIGluIEFycmF5LmlzQXJyYXkocil8fChyPVtyXSkscj1JKHIsdC5kYXRhLmxlbmd0aC0xKSxlKWZvcih2YXIgZz0wO2c8ci5sZW5ndGg7ZysrKXtpZihhPXQuZGF0YVtyW2ddXSxsPShjPXMoYSxkKSkuZ2V0KCksdT1lW2RdW2ddLCFvLmlzQXJyYXlPclR5cGVkQXJyYXkodSkpdGhyb3cgbmV3IEVycm9yKFwiYXR0cmlidXRlOiBcIitkK1wiIGluZGV4OiBcIitnK1wiIG11c3QgYmUgYW4gYXJyYXlcIik7aWYoIW8uaXNBcnJheU9yVHlwZWRBcnJheShsKSl0aHJvdyBuZXcgRXJyb3IoXCJjYW5ub3QgZXh0ZW5kIG1pc3Npbmcgb3Igbm9uLWFycmF5IGF0dHJpYnV0ZTogXCIrZCk7aWYobC5jb25zdHJ1Y3RvciE9PXUuY29uc3RydWN0b3IpdGhyb3cgbmV3IEVycm9yKFwiY2Fubm90IGV4dGVuZCBhcnJheSB3aXRoIGFuIGFycmF5IG9mIGEgZGlmZmVyZW50IHR5cGU6IFwiK2QpO2g9Zj9uW2RdW2ddOm4saShoKXx8KGg9LTEpLHAucHVzaCh7cHJvcDpjLHRhcmdldDpsLGluc2VydDp1LG1heHA6TWF0aC5mbG9vcihoKX0pfXJldHVybiBwfSh0LGUscixuKSxjPXt9LHU9e30saD0wO2g8bC5sZW5ndGg7aCsrKXt2YXIgZj1sW2hdLnByb3AscD1sW2hdLm1heHAsZD1hKGxbaF0udGFyZ2V0LGxbaF0uaW5zZXJ0LHApO2Yuc2V0KGRbMF0pLEFycmF5LmlzQXJyYXkoY1tmLmFzdHJdKXx8KGNbZi5hc3RyXT1bXSksY1tmLmFzdHJdLnB1c2goZFsxXSksQXJyYXkuaXNBcnJheSh1W2YuYXN0cl0pfHwodVtmLmFzdHJdPVtdKSx1W2YuYXN0cl0ucHVzaChsW2hdLnRhcmdldC5sZW5ndGgpfXJldHVybnt1cGRhdGU6YyxtYXhQb2ludHM6dX19ZnVuY3Rpb24gRih0LGUpe3ZhciByPW5ldyB0LmNvbnN0cnVjdG9yKHQubGVuZ3RoK2UubGVuZ3RoKTtyZXR1cm4gci5zZXQodCksci5zZXQoZSx0Lmxlbmd0aCkscn1mdW5jdGlvbiBCKHQsZSxuLGkpe3Q9by5nZXRHcmFwaERpdih0KSxBLmNsZWFyUHJvbWlzZVF1ZXVlKHQpO3ZhciBhPXt9O2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKWFbZV09bjtlbHNle2lmKCFvLmlzUGxhaW5PYmplY3QoZSkpcmV0dXJuIG8ud2FybihcIlJlc3R5bGUgZmFpbC5cIixlLG4saSksUHJvbWlzZS5yZWplY3QoKTthPW8uZXh0ZW5kRmxhdCh7fSxlKSx2b2lkIDA9PT1pJiYoaT1uKX1PYmplY3Qua2V5cyhhKS5sZW5ndGgmJih0LmNoYW5nZWQ9ITApO3ZhciBzPUEuY29lcmNlVHJhY2VJbmRpY2VzKHQsaSksbD1VKHQsYSxzKSx1PWwuZmxhZ3M7dS5jYWxjJiYodC5jYWxjZGF0YT12b2lkIDApLHUuY2xlYXJBeGlzVHlwZXMmJkEuY2xlYXJBeGlzVHlwZXModCxzLHt9KTt2YXIgaD1bXTt1LmZ1bGxSZXBsb3Q/aC5wdXNoKHIucGxvdCk6KGgucHVzaChmLnByZXZpb3VzUHJvbWlzZXMpLGYuc3VwcGx5RGVmYXVsdHModCksdS5tYXJrZXJTaXplJiYoZi5kb0NhbGNkYXRhKHQpLFkoaCkpLHUuc3R5bGUmJmgucHVzaChULmRvVHJhY2VTdHlsZSksdS5jb2xvcmJhcnMmJmgucHVzaChULmRvQ29sb3JCYXJzKSxoLnB1c2goQykpLGgucHVzaChmLnJlaG92ZXIsZi5yZWRyYWcpLGMuYWRkKHQsQixbdCxsLnVuZG9pdCxsLnRyYWNlc10sQixbdCxsLnJlZG9pdCxsLnRyYWNlc10pO3ZhciBwPW8uc3luY09yQXN5bmMoaCx0KTtyZXR1cm4gcCYmcC50aGVufHwocD1Qcm9taXNlLnJlc29sdmUoKSkscC50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdChcInBsb3RseV9yZXN0eWxlXCIsbC5ldmVudERhdGEpLHR9KX1mdW5jdGlvbiBOKHQpe3JldHVybiB2b2lkIDA9PT10P251bGw6dH1mdW5jdGlvbiBqKHQsZSl7cmV0dXJuIGU/ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXMoZSxyKSxhPWkuc2V0O3JldHVybiBpLnNldD1mdW5jdGlvbihlKXtWKChufHxcIlwiKStyLGkuZ2V0KCksZSx0KSxhKGUpfSxpfTpzfWZ1bmN0aW9uIFYodCxlLHIsbil7aWYoQXJyYXkuaXNBcnJheShlKXx8QXJyYXkuaXNBcnJheShyKSlmb3IodmFyIGk9QXJyYXkuaXNBcnJheShlKT9lOltdLGE9QXJyYXkuaXNBcnJheShyKT9yOltdLHM9TWF0aC5tYXgoaS5sZW5ndGgsYS5sZW5ndGgpLGw9MDtsPHM7bCsrKVYodCtcIltcIitsK1wiXVwiLGlbbF0sYVtsXSxuKTtlbHNlIGlmKG8uaXNQbGFpbk9iamVjdChlKXx8by5pc1BsYWluT2JqZWN0KHIpKXt2YXIgYz1vLmlzUGxhaW5PYmplY3QoZSk/ZTp7fSx1PW8uaXNQbGFpbk9iamVjdChyKT9yOnt9LGg9by5leHRlbmRGbGF0KHt9LGMsdSk7Zm9yKHZhciBmIGluIGgpVih0K1wiLlwiK2YsY1tmXSx1W2ZdLG4pfWVsc2Ugdm9pZCAwPT09blt0XSYmKG5bdF09TihlKSl9ZnVuY3Rpb24gVSh0LGUscil7dmFyIG4saT10Ll9mdWxsTGF5b3V0LGE9dC5fZnVsbERhdGEsbD10LmRhdGEsYz1pLl9ndWlFZGl0aW5nLHA9aihpLl9wcmVHVUksYyksZz1vLmV4dGVuZERlZXBBbGwoe30sZSk7cShlKTt2YXIgdixtPU0udHJhY2VGbGFncygpLHk9e30seD17fTtmdW5jdGlvbiBiKCl7cmV0dXJuIHIubWFwKGZ1bmN0aW9uKCl7fSl9ZnVuY3Rpb24gXyh0KXt2YXIgZT1kLmlkMm5hbWUodCk7LTE9PT12LmluZGV4T2YoZSkmJnYucHVzaChlKX1mdW5jdGlvbiB3KHQpe3JldHVyblwiTEFZT1VUXCIrdCtcIi5hdXRvcmFuZ2VcIn1mdW5jdGlvbiBrKHQpe3JldHVyblwiTEFZT1VUXCIrdCtcIi5yYW5nZVwifWZ1bmN0aW9uIFQodCl7Zm9yKHZhciBlPXQ7ZTxhLmxlbmd0aDtlKyspaWYoYVtlXS5faW5wdXQ9PT1sW3RdKXJldHVybiBhW2VdfWZ1bmN0aW9uIFMobixhLG8pe2lmKEFycmF5LmlzQXJyYXkobikpbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe1ModCxhLG8pfSk7ZWxzZSBpZighKG4gaW4gZXx8QS5oYXNQYXJlbnQoZSxuKSkpe3ZhciBzO2lmKFwiTEFZT1VUXCI9PT1uLnN1YnN0cigwLDYpKXM9cCh0LmxheW91dCxuLnJlcGxhY2UoXCJMQVlPVVRcIixcIlwiKSk7ZWxzZXt2YXIgdT1yW29dO3M9aihpLl90cmFjZVByZUdVSVtUKHUpLl9mdWxsSW5wdXQudWlkXSxjKShsW3VdLG4pfW4gaW4geHx8KHhbbl09YigpKSx2b2lkIDA9PT14W25dW29dJiYoeFtuXVtvXT1OKHMuZ2V0KCkpKSx2b2lkIDAhPT1hJiZzLnNldChhKX19ZnVuY3Rpb24gRSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGFbZV1bdF19fWZ1bmN0aW9uIEModCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuITE9PT1lP2FbcltuXV1bdF06bnVsbH19Zm9yKHZhciBMIGluIGUpe2lmKEEuaGFzUGFyZW50KGUsTCkpdGhyb3cgbmV3IEVycm9yKFwiY2Fubm90IHNldCBcIitMK1wiIGFuZCBhIHBhcmVudCBhdHRyaWJ1dGUgc2ltdWx0YW5lb3VzbHlcIik7dmFyIHosTyxJLEQsUCxSLEY9ZVtMXTtpZihcImF1dG9iaW54XCIhPT1MJiZcImF1dG9iaW55XCIhPT1MfHwoTD1MLmNoYXJBdChMLmxlbmd0aC0xKStcImJpbnNcIixGPUFycmF5LmlzQXJyYXkoRik/Ri5tYXAoQyhMKSk6ITE9PT1GP3IubWFwKEUoTCkpOm51bGwpLHlbTF09RixcIkxBWU9VVFwiIT09TC5zdWJzdHIoMCw2KSl7Zm9yKHhbTF09YigpLG49MDtuPHIubGVuZ3RoO24rKyl7aWYoej1sW3Jbbl1dLE89VChyW25dKSxEPShJPWooaS5fdHJhY2VQcmVHVUlbTy5fZnVsbElucHV0LnVpZF0sYykoeixMKSkuZ2V0KCksdm9pZCAwIT09KFA9QXJyYXkuaXNBcnJheShGKT9GW24lRi5sZW5ndGhdOkYpKXt2YXIgQj1JLnBhcnRzW0kucGFydHMubGVuZ3RoLTFdLFY9TC5zdWJzdHIoMCxMLmxlbmd0aC1CLmxlbmd0aC0xKSxVPVY/VitcIi5cIjpcIlwiLEg9Vj9zKE8sVikuZ2V0KCk6TztpZigoUj1oLmdldFRyYWNlVmFsT2JqZWN0KE8sSS5wYXJ0cykpJiZSLmltcGxpZWRFZGl0cyYmbnVsbCE9PVApZm9yKHZhciBHIGluIFIuaW1wbGllZEVkaXRzKVMoby5yZWxhdGl2ZUF0dHIoTCxHKSxSLmltcGxpZWRFZGl0c1tHXSxuKTtlbHNlIGlmKFwidGhpY2tuZXNzbW9kZVwiIT09QiYmXCJsZW5tb2RlXCIhPT1CfHxEPT09UHx8XCJmcmFjdGlvblwiIT09UCYmXCJwaXhlbHNcIiE9PVB8fCFIKXtpZihcInR5cGVcIj09PUwmJlwicGllXCI9PT1QIT0oXCJwaWVcIj09PUQpKXt2YXIgWT1cInhcIixXPVwieVwiO1wiYmFyXCIhPT1QJiZcImJhclwiIT09RHx8XCJoXCIhPT16Lm9yaWVudGF0aW9ufHwoWT1cInlcIixXPVwieFwiKSxvLnN3YXBBdHRycyh6LFtcIj9cIixcIj9zcmNcIl0sXCJsYWJlbHNcIixZKSxvLnN3YXBBdHRycyh6LFtcImQ/XCIsXCI/MFwiXSxcImxhYmVsXCIsWSksby5zd2FwQXR0cnMoeixbXCI/XCIsXCI/c3JjXCJdLFwidmFsdWVzXCIsVyksXCJwaWVcIj09PUQ/KHMoeixcIm1hcmtlci5jb2xvclwiKS5zZXQocyh6LFwibWFya2VyLmNvbG9yc1wiKS5nZXQoKSksaS5fcGllbGF5ZXIuc2VsZWN0QWxsKFwiZy50cmFjZVwiKS5yZW1vdmUoKSk6dS50cmFjZUlzKHosXCJjYXJ0ZXNpYW5cIikmJnMoeixcIm1hcmtlci5jb2xvcnNcIikuc2V0KHMoeixcIm1hcmtlci5jb2xvclwiKS5nZXQoKSl9fWVsc2V7dmFyIFg9aS5fc2l6ZSxaPUgub3JpZW50LCQ9XCJ0b3BcIj09PVp8fFwiYm90dG9tXCI9PT1aO2lmKFwidGhpY2tuZXNzbW9kZVwiPT09Qil7dmFyIEo9JD9YLmg6WC53O1MoVStcInRoaWNrbmVzc1wiLEgudGhpY2tuZXNzKihcImZyYWN0aW9uXCI9PT1QPzEvSjpKKSxuKX1lbHNle3ZhciBLPSQ/WC53OlguaDtTKFUrXCJsZW5cIixILmxlbiooXCJmcmFjdGlvblwiPT09UD8xL0s6Syksbil9fXhbTF1bbl09TihEKTtpZigtMSE9PVtcInN3YXB4eVwiLFwic3dhcHh5YXhlc1wiLFwib3JpZW50YXRpb25cIixcIm9yaWVudGF0aW9uYXhlc1wiXS5pbmRleE9mKEwpKXtpZihcIm9yaWVudGF0aW9uXCI9PT1MKXtJLnNldChQKTt2YXIgUT16LngmJiF6Lnk/XCJoXCI6XCJ2XCI7aWYoKEkuZ2V0KCl8fFEpPT09Ty5vcmllbnRhdGlvbiljb250aW51ZX1lbHNlXCJvcmllbnRhdGlvbmF4ZXNcIj09PUwmJih6Lm9yaWVudGF0aW9uPXt2OlwiaFwiLGg6XCJ2XCJ9W08ub3JpZW50YXRpb25dKTtBLnN3YXBYWURhdGEoeiksbS5jYWxjPW0uY2xlYXJBeGlzVHlwZXM9ITB9ZWxzZS0xIT09Zi5kYXRhQXJyYXlDb250YWluZXJzLmluZGV4T2YoSS5wYXJ0c1swXSk/KEEubWFuYWdlQXJyYXlDb250YWluZXJzKEksUCx4KSxtLmNhbGM9ITApOihSP1IuYXJyYXlPayYmIXUudHJhY2VJcyhPLFwicmVnbFwiKSYmKG8uaXNBcnJheU9yVHlwZWRBcnJheShQKXx8by5pc0FycmF5T3JUeXBlZEFycmF5KEQpKT9tLmNhbGM9ITA6TS51cGRhdGUobSxSKTptLmNhbGM9ITAsSS5zZXQoUCkpfX1pZigtMSE9PVtcInN3YXB4eWF4ZXNcIixcIm9yaWVudGF0aW9uYXhlc1wiXS5pbmRleE9mKEwpJiZkLnN3YXAodCxyKSxcIm9yaWVudGF0aW9uYXhlc1wiPT09TCl7dmFyIHR0PXModC5sYXlvdXQsXCJob3Zlcm1vZGVcIik7XCJ4XCI9PT10dC5nZXQoKT90dC5zZXQoXCJ5XCIpOlwieVwiPT09dHQuZ2V0KCkmJnR0LnNldChcInhcIil9aWYoLTEhPT1bXCJvcmllbnRhdGlvblwiLFwidHlwZVwiXS5pbmRleE9mKEwpKXtmb3Iodj1bXSxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBldD1sW3Jbbl1dO3UudHJhY2VJcyhldCxcImNhcnRlc2lhblwiKSYmKF8oZXQueGF4aXN8fFwieFwiKSxfKGV0LnlheGlzfHxcInlcIikpfVModi5tYXAodyksITAsMCksUyh2Lm1hcChrKSxbMCwxXSwwKX19ZWxzZSBJPXAodC5sYXlvdXQsTC5yZXBsYWNlKFwiTEFZT1VUXCIsXCJcIikpLHhbTF09W04oSS5nZXQoKSldLEkuc2V0KEFycmF5LmlzQXJyYXkoRik/RlswXTpGKSxtLmNhbGM9ITB9cmV0dXJuKG0uY2FsY3x8bS5wbG90KSYmKG0uZnVsbFJlcGxvdD0hMCkse2ZsYWdzOm0sdW5kb2l0OngscmVkb2l0OnksdHJhY2VzOnIsZXZlbnREYXRhOm8uZXh0ZW5kRGVlcE5vQXJyYXlzKFtdLFtnLHJdKX19ZnVuY3Rpb24gcSh0KXt2YXIgZSxyLG4saT1vLmNvdW50ZXJSZWdleChcImF4aXNcIixcIi50aXRsZVwiLCExLCExKSxhPS9jb2xvcmJhclxcLnRpdGxlJC8scz1PYmplY3Qua2V5cyh0KTtmb3IoZT0wO2U8cy5sZW5ndGg7ZSsrKXI9c1tlXSxuPXRbcl0sXCJ0aXRsZVwiIT09ciYmIWkudGVzdChyKSYmIWEudGVzdChyKXx8XCJzdHJpbmdcIiE9dHlwZW9mIG4mJlwibnVtYmVyXCIhPXR5cGVvZiBuP3IuaW5kZXhPZihcInRpdGxlZm9udFwiKT4tMT9sKHIsci5yZXBsYWNlKFwidGl0bGVmb250XCIsXCJ0aXRsZS5mb250XCIpKTpyLmluZGV4T2YoXCJ0aXRsZXBvc2l0aW9uXCIpPi0xP2wocixyLnJlcGxhY2UoXCJ0aXRsZXBvc2l0aW9uXCIsXCJ0aXRsZS5wb3NpdGlvblwiKSk6ci5pbmRleE9mKFwidGl0bGVzaWRlXCIpPi0xP2wocixyLnJlcGxhY2UoXCJ0aXRsZXNpZGVcIixcInRpdGxlLnNpZGVcIikpOnIuaW5kZXhPZihcInRpdGxlb2Zmc2V0XCIpPi0xJiZsKHIsci5yZXBsYWNlKFwidGl0bGVvZmZzZXRcIixcInRpdGxlLm9mZnNldFwiKSk6bChyLHIucmVwbGFjZShcInRpdGxlXCIsXCJ0aXRsZS50ZXh0XCIpKTtmdW5jdGlvbiBsKGUscil7dFtyXT10W2VdLGRlbGV0ZSB0W2VdfX1mdW5jdGlvbiBIKHQsZSxyKXtpZih0PW8uZ2V0R3JhcGhEaXYodCksQS5jbGVhclByb21pc2VRdWV1ZSh0KSx0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHQpO3ZhciBuPXt9O2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKW5bZV09cjtlbHNle2lmKCFvLmlzUGxhaW5PYmplY3QoZSkpcmV0dXJuIG8ud2FybihcIlJlbGF5b3V0IGZhaWwuXCIsZSxyKSxQcm9taXNlLnJlamVjdCgpO249by5leHRlbmRGbGF0KHt9LGUpfU9iamVjdC5rZXlzKG4pLmxlbmd0aCYmKHQuY2hhbmdlZD0hMCk7dmFyIGk9JCh0LG4pLGE9aS5mbGFnczthLmNhbGMmJih0LmNhbGNkYXRhPXZvaWQgMCk7dmFyIHM9W2YucHJldmlvdXNQcm9taXNlc107YS5sYXlvdXRSZXBsb3Q/cy5wdXNoKFQubGF5b3V0UmVwbG90KTpPYmplY3Qua2V5cyhuKS5sZW5ndGgmJihHKHQsYSxpKXx8Zi5zdXBwbHlEZWZhdWx0cyh0KSxhLmxlZ2VuZCYmcy5wdXNoKFQuZG9MZWdlbmQpLGEubGF5b3V0c3R5bGUmJnMucHVzaChULmxheW91dFN0eWxlcyksYS5heHJhbmdlJiZZKHMsaS5yYW5nZXNBbHRlcmVkKSxhLnRpY2tzJiZzLnB1c2goVC5kb1RpY2tzUmVsYXlvdXQpLGEubW9kZWJhciYmcy5wdXNoKFQuZG9Nb2RlQmFyKSxhLmNhbWVyYSYmcy5wdXNoKFQuZG9DYW1lcmEpLHMucHVzaChDKSkscy5wdXNoKGYucmVob3ZlcixmLnJlZHJhZyksYy5hZGQodCxILFt0LGkudW5kb2l0XSxILFt0LGkucmVkb2l0XSk7dmFyIGw9by5zeW5jT3JBc3luYyhzLHQpO3JldHVybiBsJiZsLnRoZW58fChsPVByb21pc2UucmVzb2x2ZSh0KSksbC50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdChcInBsb3RseV9yZWxheW91dFwiLGkuZXZlbnREYXRhKSx0fSl9ZnVuY3Rpb24gRyh0LGUscil7dmFyIG49dC5fZnVsbExheW91dDtpZighZS5heHJhbmdlKXJldHVybiExO2Zvcih2YXIgaSBpbiBlKWlmKFwiYXhyYW5nZVwiIT09aSYmZVtpXSlyZXR1cm4hMTtmb3IodmFyIGEgaW4gci5yYW5nZXNBbHRlcmVkKXt2YXIgbz1kLmlkMm5hbWUoYSkscz10LmxheW91dFtvXSxsPW5bb107aWYobC5hdXRvcmFuZ2U9cy5hdXRvcmFuZ2UsbC5yYW5nZT1zLnJhbmdlLnNsaWNlKCksbC5jbGVhblJhbmdlKCksbC5fbWF0Y2hHcm91cClmb3IodmFyIGMgaW4gbC5fbWF0Y2hHcm91cClpZihjIT09YSl7dmFyIHU9bltkLmlkMm5hbWUoYyldO3UuYXV0b3JhbmdlPWwuYXV0b3JhbmdlLHUucmFuZ2U9bC5yYW5nZS5zbGljZSgpLHUuX2lucHV0LnJhbmdlPWwucmFuZ2Uuc2xpY2UoKX19cmV0dXJuITB9ZnVuY3Rpb24gWSh0LGUpe3ZhciByPWU/ZnVuY3Rpb24odCl7dmFyIHI9W10sbj0hMDtmb3IodmFyIGkgaW4gZSl7dmFyIGE9ZC5nZXRGcm9tSWQodCxpKTtpZihyLnB1c2goaSksYS5fbWF0Y2hHcm91cClmb3IodmFyIG8gaW4gYS5fbWF0Y2hHcm91cCllW29dfHxyLnB1c2gobyk7YS5hdXRvbWFyZ2luJiYobj0hMSl9cmV0dXJuIGQuZHJhdyh0LHIse3NraXBUaXRsZTpufSl9OmZ1bmN0aW9uKHQpe3JldHVybiBkLmRyYXcodCxcInJlZHJhd1wiKX07dC5wdXNoKF8sVC5kb0F1dG9SYW5nZUFuZENvbnN0cmFpbnRzLHIsVC5kcmF3RGF0YSxULmZpbmFsRHJhdyl9ci5wbG90PWZ1bmN0aW9uKHQsZSxpLGEpe3ZhciBzO2lmKHQ9by5nZXRHcmFwaERpdih0KSxsLmluaXQodCksby5pc1BsYWluT2JqZWN0KGUpKXt2YXIgYz1lO2U9Yy5kYXRhLGk9Yy5sYXlvdXQsYT1jLmNvbmZpZyxzPWMuZnJhbWVzfWlmKCExPT09bC50cmlnZ2VySGFuZGxlcih0LFwicGxvdGx5X2JlZm9yZXBsb3RcIixbZSxpLGFdKSlyZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtlfHxpfHxvLmlzUGxvdERpdih0KXx8by53YXJuKFwiQ2FsbGluZyBQbG90bHkucGxvdCBhcyBpZiByZWRyYXdpbmcgYnV0IHRoaXMgY29udGFpbmVyIGRvZXNuJ3QgeWV0IGhhdmUgYSBwbG90LlwiLHQpLE8odCxhKSxpfHwoaT17fSksbi5zZWxlY3QodCkuY2xhc3NlZChcImpzLXBsb3RseS1wbG90XCIsITApLGcubWFrZVRlc3RlcigpLEFycmF5LmlzQXJyYXkodC5fcHJvbWlzZXMpfHwodC5fcHJvbWlzZXM9W10pO3ZhciBoPTA9PT0odC5kYXRhfHxbXSkubGVuZ3RoJiZBcnJheS5pc0FycmF5KGUpO0FycmF5LmlzQXJyYXkoZSkmJihBLmNsZWFuRGF0YShlKSxoP3QuZGF0YT1lOnQuZGF0YS5wdXNoLmFwcGx5KHQuZGF0YSxlKSx0LmVtcHR5PSExKSx0LmxheW91dCYmIWh8fCh0LmxheW91dD1BLmNsZWFuTGF5b3V0KGkpKSxmLnN1cHBseURlZmF1bHRzKHQpO3ZhciB2PXQuX2Z1bGxMYXlvdXQseD12Ll9oYXMoXCJjYXJ0ZXNpYW5cIik7aWYoIXYuX2hhcyhcInBvbGFyXCIpJiZlJiZlWzBdJiZlWzBdLnIpcmV0dXJuIG8ubG9nKFwiTGVnYWN5IHBvbGFyIGNoYXJ0cyBhcmUgZGVwcmVjYXRlZCFcIiksZnVuY3Rpb24odCxlLHIpe3ZhciBpPW4uc2VsZWN0KHQpLnNlbGVjdEFsbChcIi5wbG90LWNvbnRhaW5lclwiKS5kYXRhKFswXSk7aS5lbnRlcigpLmluc2VydChcImRpdlwiLFwiOmZpcnN0LWNoaWxkXCIpLmNsYXNzZWQoXCJwbG90LWNvbnRhaW5lciBwbG90bHlcIiwhMCk7dmFyIGE9aS5zZWxlY3RBbGwoXCIuc3ZnLWNvbnRhaW5lclwiKS5kYXRhKFswXSk7YS5lbnRlcigpLmFwcGVuZChcImRpdlwiKS5jbGFzc2VkKFwic3ZnLWNvbnRhaW5lclwiLCEwKS5zdHlsZShcInBvc2l0aW9uXCIsXCJyZWxhdGl2ZVwiKSxhLmh0bWwoXCJcIiksZSYmKHQuZGF0YT1lKTtyJiYodC5sYXlvdXQ9cik7cC5tYW5hZ2VyLmZpbGxMYXlvdXQodCksYS5zdHlsZSh7d2lkdGg6dC5fZnVsbExheW91dC53aWR0aCtcInB4XCIsaGVpZ2h0OnQuX2Z1bGxMYXlvdXQuaGVpZ2h0K1wicHhcIn0pLHQuZnJhbWV3b3JrPXAubWFuYWdlci5mcmFtZXdvcmsodCksdC5mcmFtZXdvcmsoe2RhdGE6dC5kYXRhLGxheW91dDp0LmxheW91dH0sYS5ub2RlKCkpLHQuZnJhbWV3b3JrLnNldFVuZG9Qb2ludCgpO3ZhciBzPXQuZnJhbWV3b3JrLnN2ZygpLGw9MSxjPXQuX2Z1bGxMYXlvdXQudGl0bGU/dC5fZnVsbExheW91dC50aXRsZS50ZXh0OlwiXCI7XCJcIiE9PWMmJmN8fChsPTApO3ZhciB1PWZ1bmN0aW9uKCl7dGhpcy5jYWxsKGIuY29udmVydFRvVHNwYW5zLHQpfSxoPXMuc2VsZWN0KFwiLnRpdGxlLWdyb3VwIHRleHRcIikuY2FsbCh1KTtpZih0Ll9jb250ZXh0LmVkaXRzLnRpdGxlVGV4dCl7dmFyIGQ9by5fKHQsXCJDbGljayB0byBlbnRlciBQbG90IHRpdGxlXCIpO2MmJmMhPT1kfHwobD0uMixoLmF0dHIoe1wiZGF0YS11bmZvcm1hdHRlZFwiOmR9KS50ZXh0KGQpLnN0eWxlKHtvcGFjaXR5Omx9KS5vbihcIm1vdXNlb3Zlci5vcGFjaXR5XCIsZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMTAwKS5zdHlsZShcIm9wYWNpdHlcIiwxKX0pLm9uKFwibW91c2VvdXQub3BhY2l0eVwiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKDFlMykuc3R5bGUoXCJvcGFjaXR5XCIsMCl9KSk7dmFyIGc9ZnVuY3Rpb24oKXt0aGlzLmNhbGwoYi5tYWtlRWRpdGFibGUse2dkOnR9KS5vbihcImVkaXRcIixmdW5jdGlvbihlKXt0LmZyYW1ld29yayh7bGF5b3V0Ont0aXRsZTp7dGV4dDplfX19KSx0aGlzLnRleHQoZSkuY2FsbCh1KSx0aGlzLmNhbGwoZyl9KS5vbihcImNhbmNlbFwiLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hdHRyKFwiZGF0YS11bmZvcm1hdHRlZFwiKTt0aGlzLnRleHQodCkuY2FsbCh1KX0pfTtoLmNhbGwoZyl9cmV0dXJuIHQuX2NvbnRleHQuc2V0QmFja2dyb3VuZCh0LHQuX2Z1bGxMYXlvdXQucGFwZXJfYmdjb2xvciksZi5hZGRMaW5rcyh0KSxQcm9taXNlLnJlc29sdmUoKX0odCxlLGkpO3YuX3JlcGxvdHRpbmc9ITAsaCYmbHQodCksdC5mcmFtZXdvcmshPT1sdCYmKHQuZnJhbWV3b3JrPWx0LGx0KHQpKSxnLmluaXRHcmFkaWVudHModCksaCYmZC5zYXZlU2hvd1NwaWtlSW5pdGlhbCh0KTt2YXIgXz0hdC5jYWxjZGF0YXx8dC5jYWxjZGF0YS5sZW5ndGghPT0odC5fZnVsbERhdGF8fFtdKS5sZW5ndGg7XyYmZi5kb0NhbGNkYXRhKHQpO2Zvcih2YXIgdz0wO3c8dC5jYWxjZGF0YS5sZW5ndGg7dysrKXQuY2FsY2RhdGFbd11bMF0udHJhY2U9dC5fZnVsbERhdGFbd107dC5fY29udGV4dC5yZXNwb25zaXZlP3QuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXJ8fCh0Ll9yZXNwb25zaXZlQ2hhcnRIYW5kbGVyPWZ1bmN0aW9uKCl7Zi5yZXNpemUodCl9LHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlcikpOm8uY2xlYXJSZXNwb25zaXZlKHQpO3ZhciBrPUpTT04uc3RyaW5naWZ5KHYuX3NpemUpLE09MDtmdW5jdGlvbiBTKCl7dmFyIGUscixuLGk9dC5jYWxjZGF0YTtmb3IoZi5jbGVhckF1dG9NYXJnaW5JZHModCksVC5kcmF3TWFyZ2luUHVzaGVycyh0KSxkLmFsbG93QXV0b01hcmdpbih0KSxlPTA7ZTxpLmxlbmd0aDtlKyspe3ZhciBhPShuPShyPWlbZV0pWzBdLnRyYWNlKS5fbW9kdWxlLmNvbG9yYmFyOyEwPT09bi52aXNpYmxlJiZhP20odCxyLGEpOmYuYXV0b01hcmdpbih0LFwiY2JcIituLnVpZCl9cmV0dXJuIGYuZG9BdXRvTWFyZ2luKHQpLGYucHJldmlvdXNQcm9taXNlcyh0KX1mdW5jdGlvbiBFKCl7dC5fdHJhbnNpdGlvbmluZ3x8KFQuZG9BdXRvUmFuZ2VBbmRDb25zdHJhaW50cyh0KSxoJiZkLnNhdmVSYW5nZUluaXRpYWwodCksdS5nZXRDb21wb25lbnRNZXRob2QoXCJyYW5nZXNsaWRlclwiLFwiY2FsY0F1dG9yYW5nZVwiKSh0KSl9dmFyIEw9W2YucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe2lmKHMpcmV0dXJuIHIuYWRkRnJhbWVzKHQscyl9LGZ1bmN0aW9uIGUoKXtmb3IodmFyIHI9di5fYmFzZVBsb3RNb2R1bGVzLG49MDtuPHIubGVuZ3RoO24rKylyW25dLmRyYXdGcmFtZXdvcmsmJnJbbl0uZHJhd0ZyYW1ld29yayh0KTtpZighdi5fZ2xjYW52YXMmJnYuX2hhcyhcImdsXCIpJiYodi5fZ2xjYW52YXM9di5fZ2xjb250YWluZXIuc2VsZWN0QWxsKFwiLmdsLWNhbnZhc1wiKS5kYXRhKFt7a2V5OlwiY29udGV4dExheWVyXCIsY29udGV4dDohMCxwaWNrOiExfSx7a2V5OlwiZm9jdXNMYXllclwiLGNvbnRleHQ6ITEscGljazohMX0se2tleTpcInBpY2tMYXllclwiLGNvbnRleHQ6ITEscGljazohMH1dLGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleX0pLHYuX2dsY2FudmFzLmVudGVyKCkuYXBwZW5kKFwiY2FudmFzXCIpLmF0dHIoXCJjbGFzc1wiLGZ1bmN0aW9uKHQpe3JldHVyblwiZ2wtY2FudmFzIGdsLWNhbnZhcy1cIit0LmtleS5yZXBsYWNlKFwiTGF5ZXJcIixcIlwiKX0pLnN0eWxlKHtwb3NpdGlvbjpcImFic29sdXRlXCIsdG9wOjAsbGVmdDowLG92ZXJmbG93OlwidmlzaWJsZVwiLFwicG9pbnRlci1ldmVudHNcIjpcIm5vbmVcIn0pKSx2Ll9nbGNhbnZhcyl7di5fZ2xjYW52YXMuYXR0cihcIndpZHRoXCIsdi53aWR0aCkuYXR0cihcImhlaWdodFwiLHYuaGVpZ2h0KTt2YXIgaT12Ll9nbGNhbnZhcy5kYXRhKClbMF0ucmVnbDtpZihpJiYoTWF0aC5mbG9vcih2LndpZHRoKSE9PWkuX2dsLmRyYXdpbmdCdWZmZXJXaWR0aHx8TWF0aC5mbG9vcih2LmhlaWdodCkhPT1pLl9nbC5kcmF3aW5nQnVmZmVySGVpZ2h0KSl7dmFyIGE9XCJXZWJHTCBjb250ZXh0IGJ1ZmZlciBhbmQgY2FudmFzIGRpbWVuc2lvbnMgZG8gbm90IG1hdGNoIGR1ZSB0byBicm93c2VyL1dlYkdMIGJ1Zy5cIjtpZighTSlyZXR1cm4gby5sb2coYStcIiBDbGVhcmluZyBncmFwaCBhbmQgcGxvdHRpbmcgYWdhaW4uXCIpLGYuY2xlYW5QbG90KFtdLHt9LHQuX2Z1bGxEYXRhLHYpLGYuc3VwcGx5RGVmYXVsdHModCksdj10Ll9mdWxsTGF5b3V0LGYuZG9DYWxjZGF0YSh0KSxNKyssZSgpO28uZXJyb3IoYSl9fXJldHVyblwiaFwiPT09di5tb2RlYmFyLm9yaWVudGF0aW9uP3YuX21vZGViYXJkaXYuc3R5bGUoXCJoZWlnaHRcIixudWxsKS5zdHlsZShcIndpZHRoXCIsXCIxMDAlXCIpOnYuX21vZGViYXJkaXYuc3R5bGUoXCJ3aWR0aFwiLG51bGwpLnN0eWxlKFwiaGVpZ2h0XCIsdi5oZWlnaHQrXCJweFwiKSxmLnByZXZpb3VzUHJvbWlzZXModCl9LFMsZnVuY3Rpb24oKXtpZihKU09OLnN0cmluZ2lmeSh2Ll9zaXplKSE9PWspcmV0dXJuIG8uc3luY09yQXN5bmMoW1MsVC5sYXlvdXRTdHlsZXNdLHQpfV07eCYmTC5wdXNoKGZ1bmN0aW9uKCl7aWYoXylyZXR1cm4gby5zeW5jT3JBc3luYyhbdS5nZXRDb21wb25lbnRNZXRob2QoXCJzaGFwZXNcIixcImNhbGNBdXRvcmFuZ2VcIiksdS5nZXRDb21wb25lbnRNZXRob2QoXCJhbm5vdGF0aW9uc1wiLFwiY2FsY0F1dG9yYW5nZVwiKSxFXSx0KTtFKCl9KSxMLnB1c2goVC5sYXlvdXRTdHlsZXMpLHgmJkwucHVzaChmdW5jdGlvbigpe3JldHVybiBkLmRyYXcodCxoP1wiXCI6XCJyZWRyYXdcIil9KSxMLnB1c2goVC5kcmF3RGF0YSxULmZpbmFsRHJhdyx5LGYuYWRkTGlua3MsZi5yZWhvdmVyLGYucmVkcmFnLGYuZG9BdXRvTWFyZ2luLGYucHJldmlvdXNQcm9taXNlcyk7dmFyIHo9by5zeW5jT3JBc3luYyhMLHQpO3JldHVybiB6JiZ6LnRoZW58fCh6PVByb21pc2UucmVzb2x2ZSgpKSx6LnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gQyh0KSx0fSl9LHIuc2V0UGxvdENvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4gby5leHRlbmRGbGF0KHcsdCl9LHIucmVkcmF3PWZ1bmN0aW9uKHQpe2lmKHQ9by5nZXRHcmFwaERpdih0KSwhby5pc1Bsb3REaXYodCkpdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBlbGVtZW50IGlzIG5vdCBhIFBsb3RseSBwbG90OiBcIit0KTtyZXR1cm4gQS5jbGVhbkRhdGEodC5kYXRhKSxBLmNsZWFuTGF5b3V0KHQubGF5b3V0KSx0LmNhbGNkYXRhPXZvaWQgMCxyLnBsb3QodCkudGhlbihmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoXCJwbG90bHlfcmVkcmF3XCIpLHR9KX0sci5uZXdQbG90PWZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiB0PW8uZ2V0R3JhcGhEaXYodCksZi5jbGVhblBsb3QoW10se30sdC5fZnVsbERhdGF8fFtdLHQuX2Z1bGxMYXlvdXR8fHt9KSxmLnB1cmdlKHQpLHIucGxvdCh0LGUsbixpKX0sci5leHRlbmRUcmFjZXM9ZnVuY3Rpb24gdChlLG4saSxhKXt2YXIgcz1SKGU9by5nZXRHcmFwaERpdihlKSxuLGksYSxmdW5jdGlvbih0LGUscil7dmFyIG4saTtpZihvLmlzVHlwZWRBcnJheSh0KSlpZihyPDApe3ZhciBhPW5ldyB0LmNvbnN0cnVjdG9yKDApLHM9Rih0LGUpO3I8MD8obj1zLGk9YSk6KG49YSxpPXMpfWVsc2UgaWYobj1uZXcgdC5jb25zdHJ1Y3RvcihyKSxpPW5ldyB0LmNvbnN0cnVjdG9yKHQubGVuZ3RoK2UubGVuZ3RoLXIpLHI9PT1lLmxlbmd0aCluLnNldChlKSxpLnNldCh0KTtlbHNlIGlmKHI8ZS5sZW5ndGgpe3ZhciBsPWUubGVuZ3RoLXI7bi5zZXQoZS5zdWJhcnJheShsKSksaS5zZXQodCksaS5zZXQoZS5zdWJhcnJheSgwLGwpLHQubGVuZ3RoKX1lbHNle3ZhciBjPXItZS5sZW5ndGgsdT10Lmxlbmd0aC1jO24uc2V0KHQuc3ViYXJyYXkodSkpLG4uc2V0KGUsYyksaS5zZXQodC5zdWJhcnJheSgwLHUpKX1lbHNlIG49dC5jb25jYXQoZSksaT1yPj0wJiZyPG4ubGVuZ3RoP24uc3BsaWNlKDAsbi5sZW5ndGgtcik6W107cmV0dXJuW24saV19KSxsPXIucmVkcmF3KGUpLHU9W2Uscy51cGRhdGUsaSxzLm1heFBvaW50c107cmV0dXJuIGMuYWRkKGUsci5wcmVwZW5kVHJhY2VzLHUsdCxhcmd1bWVudHMpLGx9LHIucHJlcGVuZFRyYWNlcz1mdW5jdGlvbiB0KGUsbixpLGEpe3ZhciBzPVIoZT1vLmdldEdyYXBoRGl2KGUpLG4saSxhLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpO2lmKG8uaXNUeXBlZEFycmF5KHQpKWlmKHI8PTApe3ZhciBhPW5ldyB0LmNvbnN0cnVjdG9yKDApLHM9RihlLHQpO3I8MD8obj1zLGk9YSk6KG49YSxpPXMpfWVsc2UgaWYobj1uZXcgdC5jb25zdHJ1Y3RvcihyKSxpPW5ldyB0LmNvbnN0cnVjdG9yKHQubGVuZ3RoK2UubGVuZ3RoLXIpLHI9PT1lLmxlbmd0aCluLnNldChlKSxpLnNldCh0KTtlbHNlIGlmKHI8ZS5sZW5ndGgpe3ZhciBsPWUubGVuZ3RoLXI7bi5zZXQoZS5zdWJhcnJheSgwLGwpKSxpLnNldChlLnN1YmFycmF5KGwpKSxpLnNldCh0LGwpfWVsc2V7dmFyIGM9ci1lLmxlbmd0aDtuLnNldChlKSxuLnNldCh0LnN1YmFycmF5KDAsYyksZS5sZW5ndGgpLGkuc2V0KHQuc3ViYXJyYXkoYykpfWVsc2Ugbj1lLmNvbmNhdCh0KSxpPXI+PTAmJnI8bi5sZW5ndGg/bi5zcGxpY2UocixuLmxlbmd0aCk6W107cmV0dXJuW24saV19KSxsPXIucmVkcmF3KGUpLHU9W2Uscy51cGRhdGUsaSxzLm1heFBvaW50c107cmV0dXJuIGMuYWRkKGUsci5leHRlbmRUcmFjZXMsdSx0LGFyZ3VtZW50cyksbH0sci5hZGRUcmFjZXM9ZnVuY3Rpb24gdChlLG4saSl7ZT1vLmdldEdyYXBoRGl2KGUpO3ZhciBhLHMsbD1bXSx1PXIuZGVsZXRlVHJhY2VzLGg9dCxmPVtlLGxdLHA9W2Usbl07Zm9yKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpO2lmKCFBcnJheS5pc0FycmF5KHQuZGF0YSkpdGhyb3cgbmV3IEVycm9yKFwiZ2QuZGF0YSBtdXN0IGJlIGFuIGFycmF5LlwiKTtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoXCJ0cmFjZXMgbXVzdCBiZSBkZWZpbmVkLlwiKTtmb3IoQXJyYXkuaXNBcnJheShlKXx8KGU9W2VdKSxuPTA7bjxlLmxlbmd0aDtuKyspaWYoXCJvYmplY3RcIiE9dHlwZW9mKGk9ZVtuXSl8fEFycmF5LmlzQXJyYXkoaSl8fG51bGw9PT1pKXRocm93IG5ldyBFcnJvcihcImFsbCB2YWx1ZXMgaW4gdHJhY2VzIGFycmF5IG11c3QgYmUgbm9uLWFycmF5IG9iamVjdHNcIik7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIHJ8fEFycmF5LmlzQXJyYXkocil8fChyPVtyXSksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHImJnIubGVuZ3RoIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiaWYgaW5kaWNlcyBpcyBzcGVjaWZpZWQsIHRyYWNlcy5sZW5ndGggbXVzdCBlcXVhbCBpbmRpY2VzLmxlbmd0aFwiKX0oZSxuLGkpLEFycmF5LmlzQXJyYXkobil8fChuPVtuXSksbj1uLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gby5leHRlbmRGbGF0KHt9LHQpfSksQS5jbGVhbkRhdGEobiksYT0wO2E8bi5sZW5ndGg7YSsrKWUuZGF0YS5wdXNoKG5bYV0pO2ZvcihhPTA7YTxuLmxlbmd0aDthKyspbC5wdXNoKC1uLmxlbmd0aCthKTtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgaSlyZXR1cm4gcz1yLnJlZHJhdyhlKSxjLmFkZChlLHUsZixoLHApLHM7QXJyYXkuaXNBcnJheShpKXx8KGk9W2ldKTt0cnl7UChlLGwsaSl9Y2F0Y2godCl7dGhyb3cgZS5kYXRhLnNwbGljZShlLmRhdGEubGVuZ3RoLW4ubGVuZ3RoLG4ubGVuZ3RoKSx0fXJldHVybiBjLnN0YXJ0U2VxdWVuY2UoZSksYy5hZGQoZSx1LGYsaCxwKSxzPXIubW92ZVRyYWNlcyhlLGwsaSksYy5zdG9wU2VxdWVuY2UoZSksc30sci5kZWxldGVUcmFjZXM9ZnVuY3Rpb24gdChlLG4pe2U9by5nZXRHcmFwaERpdihlKTt2YXIgaSxhLHM9W10sbD1yLmFkZFRyYWNlcyx1PXQsaD1bZSxzLG5dLGY9W2Usbl07aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yKFwiaW5kaWNlcyBtdXN0IGJlIGFuIGludGVnZXIgb3IgYXJyYXkgb2YgaW50ZWdlcnMuXCIpO2ZvcihBcnJheS5pc0FycmF5KG4pfHwobj1bbl0pLEQoZSxuLFwiaW5kaWNlc1wiKSwobj1JKG4sZS5kYXRhLmxlbmd0aC0xKSkuc29ydChvLnNvcnRlckRlcyksaT0wO2k8bi5sZW5ndGg7aSs9MSlhPWUuZGF0YS5zcGxpY2UobltpXSwxKVswXSxzLnB1c2goYSk7dmFyIHA9ci5yZWRyYXcoZSk7cmV0dXJuIGMuYWRkKGUsbCxoLHUsZikscH0sci5tb3ZlVHJhY2VzPWZ1bmN0aW9uIHQoZSxuLGkpe3ZhciBhLHM9W10sbD1bXSx1PXQsaD10LGY9W2U9by5nZXRHcmFwaERpdihlKSxpLG5dLHA9W2UsbixpXTtpZihQKGUsbixpKSxuPUFycmF5LmlzQXJyYXkobik/bjpbbl0sXCJ1bmRlZmluZWRcIj09dHlwZW9mIGkpZm9yKGk9W10sYT0wO2E8bi5sZW5ndGg7YSsrKWkucHVzaCgtbi5sZW5ndGgrYSk7Zm9yKGk9QXJyYXkuaXNBcnJheShpKT9pOltpXSxuPUkobixlLmRhdGEubGVuZ3RoLTEpLGk9SShpLGUuZGF0YS5sZW5ndGgtMSksYT0wO2E8ZS5kYXRhLmxlbmd0aDthKyspLTE9PT1uLmluZGV4T2YoYSkmJnMucHVzaChlLmRhdGFbYV0pO2ZvcihhPTA7YTxuLmxlbmd0aDthKyspbC5wdXNoKHtuZXdJbmRleDppW2FdLHRyYWNlOmUuZGF0YVtuW2FdXX0pO2ZvcihsLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5uZXdJbmRleC1lLm5ld0luZGV4fSksYT0wO2E8bC5sZW5ndGg7YSs9MSlzLnNwbGljZShsW2FdLm5ld0luZGV4LDAsbFthXS50cmFjZSk7ZS5kYXRhPXM7dmFyIGQ9ci5yZWRyYXcoZSk7cmV0dXJuIGMuYWRkKGUsdSxmLGgscCksZH0sci5yZXN0eWxlPUIsci5fc3RvcmVEaXJlY3RHVUlFZGl0PWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4gaW4gcil7VihuLHModCxuKS5nZXQoKSxyW25dLGUpfX0sci5yZWxheW91dD1IO3ZhciBXPS9eW3h5el1heGlzWzAtOV0qXFwucmFuZ2UoXFxbWzB8MV1cXF0pPyQvLFg9L15beHl6XWF4aXNbMC05XSpcXC5hdXRvcmFuZ2UkLyxaPS9eW3h5el1heGlzWzAtOV0qXFwuZG9tYWluKFxcW1swfDFdXFxdKT8kLztmdW5jdGlvbiAkKHQsZSl7dmFyIHIsbixpLGE9dC5sYXlvdXQsbD10Ll9mdWxsTGF5b3V0LGM9bC5fZ3VpRWRpdGluZyxmPWoobC5fcHJlR1VJLGMpLHA9T2JqZWN0LmtleXMoZSksZz1kLmxpc3QodCksdj1vLmV4dGVuZERlZXBBbGwoe30sZSksbT17fTtmb3IocShlKSxwPU9iamVjdC5rZXlzKGUpLG49MDtuPHAubGVuZ3RoO24rKylpZigwPT09cFtuXS5pbmRleE9mKFwiYWxsYXhlc1wiKSl7Zm9yKGk9MDtpPGcubGVuZ3RoO2krKyl7dmFyIHk9Z1tpXS5faWQuc3Vic3RyKDEpLHg9LTEhPT15LmluZGV4T2YoXCJzY2VuZVwiKT95K1wiLlwiOlwiXCIsYj1wW25dLnJlcGxhY2UoXCJhbGxheGVzXCIseCtnW2ldLl9uYW1lKTtlW2JdfHwoZVtiXT1lW3Bbbl1dKX1kZWxldGUgZVtwW25dXX12YXIgXz1NLmxheW91dEZsYWdzKCksdz17fSxUPXt9O2Z1bmN0aW9uIEUodCxyKXtpZihBcnJheS5pc0FycmF5KHQpKXQuZm9yRWFjaChmdW5jdGlvbih0KXtFKHQscil9KTtlbHNlIGlmKCEodCBpbiBlfHxBLmhhc1BhcmVudChlLHQpKSl7dmFyIG49ZihhLHQpO3QgaW4gVHx8KFRbdF09TihuLmdldCgpKSksdm9pZCAwIT09ciYmbi5zZXQocil9fXZhciBDLEw9e307ZnVuY3Rpb24geih0KXt2YXIgZT1kLm5hbWUyaWQodC5zcGxpdChcIi5cIilbMF0pO3JldHVybiBMW2VdPTEsZX1mb3IodmFyIE8gaW4gZSl7aWYoQS5oYXNQYXJlbnQoZSxPKSl0aHJvdyBuZXcgRXJyb3IoXCJjYW5ub3Qgc2V0IFwiK08rXCIgYW5kIGEgcGFyZW50IGF0dHJpYnV0ZSBzaW11bHRhbmVvdXNseVwiKTtmb3IodmFyIEk9ZihhLE8pLEQ9ZVtPXSxQPUkucGFydHMubGVuZ3RoLTE7UD4wJiZcInN0cmluZ1wiIT10eXBlb2YgSS5wYXJ0c1tQXTspUC0tO3ZhciBSPUkucGFydHNbUF0sRj1JLnBhcnRzW1AtMV0rXCIuXCIrUixCPUkucGFydHMuc2xpY2UoMCxQKS5qb2luKFwiLlwiKSxWPXModC5sYXlvdXQsQikuZ2V0KCksVT1zKGwsQikuZ2V0KCksSD1JLmdldCgpO2lmKHZvaWQgMCE9PUQpe3dbT109RCxUW09dPVwicmV2ZXJzZVwiPT09Uj9EOk4oSCk7dmFyIEc9aC5nZXRMYXlvdXRWYWxPYmplY3QobCxJLnBhcnRzKTtpZihHJiZHLmltcGxpZWRFZGl0cyYmbnVsbCE9PUQpZm9yKHZhciBZIGluIEcuaW1wbGllZEVkaXRzKUUoby5yZWxhdGl2ZUF0dHIoTyxZKSxHLmltcGxpZWRFZGl0c1tZXSk7aWYoLTEhPT1bXCJ3aWR0aFwiLFwiaGVpZ2h0XCJdLmluZGV4T2YoTykpaWYoRCl7RShcImF1dG9zaXplXCIsbnVsbCk7dmFyICQ9XCJoZWlnaHRcIj09PU8/XCJ3aWR0aFwiOlwiaGVpZ2h0XCI7RSgkLGxbJF0pfWVsc2UgbFtPXT10Ll9pbml0aWFsQXV0b1NpemVbT107ZWxzZSBpZihcImF1dG9zaXplXCI9PT1PKUUoXCJ3aWR0aFwiLEQ/bnVsbDpsLndpZHRoKSxFKFwiaGVpZ2h0XCIsRD9udWxsOmwuaGVpZ2h0KTtlbHNlIGlmKEYubWF0Y2goVykpeihGKSxzKGwsQitcIi5faW5wdXRSYW5nZVwiKS5zZXQobnVsbCk7ZWxzZSBpZihGLm1hdGNoKFgpKXt6KEYpLHMobCxCK1wiLl9pbnB1dFJhbmdlXCIpLnNldChudWxsKTt2YXIgSz1zKGwsQikuZ2V0KCk7Sy5faW5wdXREb21haW4mJihLLl9pbnB1dC5kb21haW49Sy5faW5wdXREb21haW4uc2xpY2UoKSl9ZWxzZSBGLm1hdGNoKFopJiZzKGwsQitcIi5faW5wdXREb21haW5cIikuc2V0KG51bGwpO2lmKFwidHlwZVwiPT09Uil7dmFyIFE9Vix0dD1cImxpbmVhclwiPT09VS50eXBlJiZcImxvZ1wiPT09RCxldD1cImxvZ1wiPT09VS50eXBlJiZcImxpbmVhclwiPT09RDtpZih0dHx8ZXQpe2lmKFEmJlEucmFuZ2UpaWYoVS5hdXRvcmFuZ2UpdHQmJihRLnJhbmdlPVEucmFuZ2VbMV0+US5yYW5nZVswXT9bMSwyXTpbMiwxXSk7ZWxzZXt2YXIgcnQ9US5yYW5nZVswXSxudD1RLnJhbmdlWzFdO3R0PyhydDw9MCYmbnQ8PTAmJkUoQitcIi5hdXRvcmFuZ2VcIiwhMCkscnQ8PTA/cnQ9bnQvMWU2Om50PD0wJiYobnQ9cnQvMWU2KSxFKEIrXCIucmFuZ2VbMF1cIixNYXRoLmxvZyhydCkvTWF0aC5MTjEwKSxFKEIrXCIucmFuZ2VbMV1cIixNYXRoLmxvZyhudCkvTWF0aC5MTjEwKSk6KEUoQitcIi5yYW5nZVswXVwiLE1hdGgucG93KDEwLHJ0KSksRShCK1wiLnJhbmdlWzFdXCIsTWF0aC5wb3coMTAsbnQpKSl9ZWxzZSBFKEIrXCIuYXV0b3JhbmdlXCIsITApO0FycmF5LmlzQXJyYXkobC5fc3VicGxvdHMucG9sYXIpJiZsLl9zdWJwbG90cy5wb2xhci5sZW5ndGgmJmxbSS5wYXJ0c1swXV0mJlwicmFkaWFsYXhpc1wiPT09SS5wYXJ0c1sxXSYmZGVsZXRlIGxbSS5wYXJ0c1swXV0uX3N1YnBsb3Qudmlld0luaXRpYWxbXCJyYWRpYWxheGlzLnJhbmdlXCJdLHUuZ2V0Q29tcG9uZW50TWV0aG9kKFwiYW5ub3RhdGlvbnNcIixcImNvbnZlcnRDb29yZHNcIikodCxVLEQsRSksdS5nZXRDb21wb25lbnRNZXRob2QoXCJpbWFnZXNcIixcImNvbnZlcnRDb29yZHNcIikodCxVLEQsRSl9ZWxzZSBFKEIrXCIuYXV0b3JhbmdlXCIsITApLEUoQitcIi5yYW5nZVwiLG51bGwpO3MobCxCK1wiLl9pbnB1dFJhbmdlXCIpLnNldChudWxsKX1lbHNlIGlmKFIubWF0Y2goUykpe3ZhciBpdD1zKGwsTykuZ2V0KCksYXQ9KER8fHt9KS50eXBlO2F0JiZcIi1cIiE9PWF0fHwoYXQ9XCJsaW5lYXJcIiksdS5nZXRDb21wb25lbnRNZXRob2QoXCJhbm5vdGF0aW9uc1wiLFwiY29udmVydENvb3Jkc1wiKSh0LGl0LGF0LEUpLHUuZ2V0Q29tcG9uZW50TWV0aG9kKFwiaW1hZ2VzXCIsXCJjb252ZXJ0Q29vcmRzXCIpKHQsaXQsYXQsRSl9dmFyIG90PWsuY29udGFpbmVyQXJyYXlNYXRjaChPKTtpZihvdCl7cj1vdC5hcnJheSxuPW90LmluZGV4O3ZhciBzdD1vdC5wcm9wZXJ0eSxsdD1HfHx7ZWRpdFR5cGU6XCJjYWxjXCJ9O1wiXCIhPT1uJiZcIlwiPT09c3QmJihrLmlzQWRkVmFsKEQpP1RbT109bnVsbDprLmlzUmVtb3ZlVmFsKEQpP1RbT109KHMoYSxyKS5nZXQoKXx8W10pW25dOm8ud2FybihcInVucmVjb2duaXplZCBmdWxsIG9iamVjdCB2YWx1ZVwiLGUpKSxNLnVwZGF0ZShfLGx0KSxtW3JdfHwobVtyXT17fSk7dmFyIGN0PW1bcl1bbl07Y3R8fChjdD1tW3JdW25dPXt9KSxjdFtzdF09RCxkZWxldGUgZVtPXX1lbHNlXCJyZXZlcnNlXCI9PT1SPyhWLnJhbmdlP1YucmFuZ2UucmV2ZXJzZSgpOihFKEIrXCIuYXV0b3JhbmdlXCIsITApLFYucmFuZ2U9WzEsMF0pLFUuYXV0b3JhbmdlP18uY2FsYz0hMDpfLnBsb3Q9ITApOihsLl9oYXMoXCJzY2F0dGVyLWxpa2VcIikmJmwuX2hhcyhcInJlZ2xcIikmJlwiZHJhZ21vZGVcIj09PU8mJihcImxhc3NvXCI9PT1EfHxcInNlbGVjdFwiPT09RCkmJlwibGFzc29cIiE9PUgmJlwic2VsZWN0XCIhPT1IP18ucGxvdD0hMDpsLl9oYXMoXCJnbDJkXCIpP18ucGxvdD0hMDpHP00udXBkYXRlKF8sRyk6Xy5jYWxjPSEwLEkuc2V0KEQpKX19Zm9yKHIgaW4gbSl7ay5hcHBseUNvbnRhaW5lckFycmF5Q2hhbmdlcyh0LGYoYSxyKSxtW3JdLF8sZil8fChfLnBsb3Q9ITApfXZhciB1dD1sLl9heGlzQ29uc3RyYWludEdyb3Vwc3x8W107Zm9yKEMgaW4gTClmb3Iobj0wO248dXQubGVuZ3RoO24rKyl7dmFyIGh0PXV0W25dO2lmKGh0W0NdKWZvcih2YXIgZnQgaW4gXy5jYWxjPSEwLGh0KUxbZnRdfHwoZC5nZXRGcm9tSWQodCxmdCkuX2NvbnN0cmFpbnRTaHJpbmthYmxlPSEwKX1yZXR1cm4oSih0KXx8ZS5oZWlnaHR8fGUud2lkdGgpJiYoXy5wbG90PSEwKSwoXy5wbG90fHxfLmNhbGMpJiYoXy5sYXlvdXRSZXBsb3Q9ITApLHtmbGFnczpfLHJhbmdlc0FsdGVyZWQ6TCx1bmRvaXQ6VCxyZWRvaXQ6dyxldmVudERhdGE6dn19ZnVuY3Rpb24gSih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS53aWR0aCxuPWUuaGVpZ2h0O3JldHVybiB0LmxheW91dC5hdXRvc2l6ZSYmZi5wbG90QXV0b1NpemUodCx0LmxheW91dCxlKSxlLndpZHRoIT09cnx8ZS5oZWlnaHQhPT1ufWZ1bmN0aW9uIEsodCxlLG4saSl7aWYodD1vLmdldEdyYXBoRGl2KHQpLEEuY2xlYXJQcm9taXNlUXVldWUodCksdC5mcmFtZXdvcmsmJnQuZnJhbWV3b3JrLmlzUG9sYXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0KTtvLmlzUGxhaW5PYmplY3QoZSl8fChlPXt9KSxvLmlzUGxhaW5PYmplY3Qobil8fChuPXt9KSxPYmplY3Qua2V5cyhlKS5sZW5ndGgmJih0LmNoYW5nZWQ9ITApLE9iamVjdC5rZXlzKG4pLmxlbmd0aCYmKHQuY2hhbmdlZD0hMCk7dmFyIGE9QS5jb2VyY2VUcmFjZUluZGljZXModCxpKSxzPVUodCxvLmV4dGVuZEZsYXQoe30sZSksYSksbD1zLmZsYWdzLHU9JCh0LG8uZXh0ZW5kRmxhdCh7fSxuKSksaD11LmZsYWdzOyhsLmNhbGN8fGguY2FsYykmJih0LmNhbGNkYXRhPXZvaWQgMCksbC5jbGVhckF4aXNUeXBlcyYmQS5jbGVhckF4aXNUeXBlcyh0LGEsbik7dmFyIHA9W107aWYobC5mdWxsUmVwbG90JiZoLmxheW91dFJlcGxvdCl7dmFyIGQ9dC5kYXRhLGc9dC5sYXlvdXQ7dC5kYXRhPXZvaWQgMCx0LmxheW91dD12b2lkIDAscC5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIHIucGxvdCh0LGQsZyl9KX1lbHNlIGwuZnVsbFJlcGxvdD9wLnB1c2goci5wbG90KTpoLmxheW91dFJlcGxvdD9wLnB1c2goVC5sYXlvdXRSZXBsb3QpOihwLnB1c2goZi5wcmV2aW91c1Byb21pc2VzKSxHKHQsaCx1KXx8Zi5zdXBwbHlEZWZhdWx0cyh0KSxsLnN0eWxlJiZwLnB1c2goVC5kb1RyYWNlU3R5bGUpLGwuY29sb3JiYXJzJiZwLnB1c2goVC5kb0NvbG9yQmFycyksaC5sZWdlbmQmJnAucHVzaChULmRvTGVnZW5kKSxoLmxheW91dHN0eWxlJiZwLnB1c2goVC5sYXlvdXRTdHlsZXMpLGguYXhyYW5nZSYmWShwLHUucmFuZ2VzQWx0ZXJlZCksaC50aWNrcyYmcC5wdXNoKFQuZG9UaWNrc1JlbGF5b3V0KSxoLm1vZGViYXImJnAucHVzaChULmRvTW9kZUJhciksaC5jYW1lcmEmJnAucHVzaChULmRvQ2FtZXJhKSxwLnB1c2goQykpO3AucHVzaChmLnJlaG92ZXIsZi5yZWRyYWcpLGMuYWRkKHQsSyxbdCxzLnVuZG9pdCx1LnVuZG9pdCxzLnRyYWNlc10sSyxbdCxzLnJlZG9pdCx1LnJlZG9pdCxzLnRyYWNlc10pO3ZhciB2PW8uc3luY09yQXN5bmMocCx0KTtyZXR1cm4gdiYmdi50aGVufHwodj1Qcm9taXNlLnJlc29sdmUodCkpLHYudGhlbihmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoXCJwbG90bHlfdXBkYXRlXCIse2RhdGE6cy5ldmVudERhdGEsbGF5b3V0OnUuZXZlbnREYXRhfSksdH0pfWZ1bmN0aW9uIFEodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2UuX2Z1bGxMYXlvdXQuX2d1aUVkaXRpbmc9ITA7dmFyIHI9dC5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIGUuX2Z1bGxMYXlvdXQuX2d1aUVkaXRpbmc9ITEscn19ci51cGRhdGU9SyxyLl9ndWlSZXN0eWxlPVEoQiksci5fZ3VpUmVsYXlvdXQ9UShIKSxyLl9ndWlVcGRhdGU9UShLKTt2YXIgdHQ9W3twYXR0ZXJuOi9eaGlkZGVubGFiZWxzLyxhdHRyOlwibGVnZW5kLnVpcmV2aXNpb25cIn0se3BhdHRlcm46L14oKHh8eSlheGlzXFxkKilcXC4oKGF1dG8pP3JhbmdlfHRpdGxlXFwudGV4dCkvfSx7cGF0dGVybjovYXhpc1xcZCpcXC5zaG93c3Bpa2VzJC8sYXR0cjpcIm1vZGViYXIudWlyZXZpc2lvblwifSx7cGF0dGVybjovKGhvdmVyfGRyYWcpbW9kZSQvLGF0dHI6XCJtb2RlYmFyLnVpcmV2aXNpb25cIn0se3BhdHRlcm46L14oc2NlbmVcXGQqKVxcLmNhbWVyYS99LHtwYXR0ZXJuOi9eKGdlb1xcZCopXFwuKHByb2plY3Rpb258Y2VudGVyKS99LHtwYXR0ZXJuOi9eKHRlcm5hcnlcXGQqXFwuW2FiY11heGlzKVxcLihtaW58dGl0bGVcXC50ZXh0KSQvfSx7cGF0dGVybjovXihwb2xhclxcZCpcXC5yYWRpYWxheGlzKVxcLigoYXV0byk/cmFuZ2V8YW5nbGV8dGl0bGVcXC50ZXh0KS99LHtwYXR0ZXJuOi9eKHBvbGFyXFxkKlxcLmFuZ3VsYXJheGlzKVxcLnJvdGF0aW9uL30se3BhdHRlcm46L14obWFwYm94XFxkKilcXC4oY2VudGVyfHpvb218YmVhcmluZ3xwaXRjaCkvfSx7cGF0dGVybjovXmxlZ2VuZFxcLih4fHkpJC8sYXR0cjpcImVkaXRyZXZpc2lvblwifSx7cGF0dGVybjovXihzaGFwZXN8YW5ub3RhdGlvbnMpLyxhdHRyOlwiZWRpdHJldmlzaW9uXCJ9LHtwYXR0ZXJuOi9edGl0bGVcXC50ZXh0JC8sYXR0cjpcImVkaXRyZXZpc2lvblwifV0sZXQ9W3twYXR0ZXJuOi9ec2VsZWN0ZWRwb2ludHMkLyxhdHRyOlwic2VsZWN0aW9ucmV2aXNpb25cIn0se3BhdHRlcm46LyhefHZhbHVlXFwuKXZpc2libGUkLyxhdHRyOlwibGVnZW5kLnVpcmV2aXNpb25cIn0se3BhdHRlcm46L15kaW1lbnNpb25zXFxbXFxkK1xcXVxcLmNvbnN0cmFpbnRyYW5nZS99LHtwYXR0ZXJuOi9ebm9kZVxcLih4fHl8Z3JvdXBzKS99LHtwYXR0ZXJuOi9ebGV2ZWwkL30se3BhdHRlcm46LyhefHZhbHVlXFwuKW5hbWUkL30se3BhdHRlcm46L2NvbG9yYmFyXFwudGl0bGVcXC50ZXh0JC99LHtwYXR0ZXJuOi9jb2xvcmJhclxcLih4fHkpJC8sYXR0cjpcImVkaXRyZXZpc2lvblwifV07ZnVuY3Rpb24gcnQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXSxpPXQubWF0Y2gobi5wYXR0ZXJuKTtpZihpKXJldHVybntoZWFkOmlbMV0sYXR0cjpuLmF0dHJ9fX1mdW5jdGlvbiBudCh0LGUpe3ZhciByPXMoZSx0KS5nZXQoKTtpZih2b2lkIDAhPT1yKXJldHVybiByO3ZhciBuPXQuc3BsaXQoXCIuXCIpO2ZvcihuLnBvcCgpO24ubGVuZ3RoPjE7KWlmKG4ucG9wKCksdm9pZCAwIT09KHI9cyhlLG4uam9pbihcIi5cIikrXCIudWlyZXZpc2lvblwiKS5nZXQoKSkpcmV0dXJuIHI7cmV0dXJuIGUudWlyZXZpc2lvbn1mdW5jdGlvbiBpdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKGVbcl0uX2Z1bGxJbnB1dC51aWQ9PT10KXJldHVybiByO3JldHVybi0xfWZ1bmN0aW9uIGF0KHQsZSxyKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihlW25dLnVpZD09PXQpcmV0dXJuIG47cmV0dXJuIWVbcl18fGVbcl0udWlkPy0xOnJ9ZnVuY3Rpb24gb3QodCxlKXt2YXIgcj1vLmlzUGxhaW5PYmplY3QodCksbj1BcnJheS5pc0FycmF5KHQpO3JldHVybiByfHxuPyhyJiZvLmlzUGxhaW5PYmplY3QoZSl8fG4mJkFycmF5LmlzQXJyYXkoZSkpJiZKU09OLnN0cmluZ2lmeSh0KT09PUpTT04uc3RyaW5naWZ5KGUpOnQ9PT1lfWZ1bmN0aW9uIHN0KHQsZSxyLG4pe3ZhciBpLGEsbCxjPW4uZ2V0VmFsT2JqZWN0LHU9bi5mbGFncyxoPW4uaW1tdXRhYmxlLGY9bi5pbkFycmF5LHA9bi5hcnJheUluZGV4O2Z1bmN0aW9uIGQoKXt2YXIgdD1pLmVkaXRUeXBlO2YmJi0xIT09dC5pbmRleE9mKFwiYXJyYXlkcmF3XCIpP28ucHVzaFVuaXF1ZSh1LmFycmF5c1tmXSxwKTooTS51cGRhdGUodSxpKSxcIm5vbmVcIiE9PXQmJnUubkNoYW5nZXMrKyxuLnRyYW5zaXRpb24mJmkuYW5pbSYmdS5uQ2hhbmdlc0FuaW0rKywoVy50ZXN0KGwpfHxYLnRlc3QobCkpJiYodS5yYW5nZXNBbHRlcmVkW3JbMF1dPTEpLFoudGVzdChsKSYmcyhlLFwiX2lucHV0RG9tYWluXCIpLnNldChudWxsKSxcImRhdGFyZXZpc2lvblwiPT09YSYmKHUubmV3RGF0YVJldmlzaW9uPTEpKX1mdW5jdGlvbiBnKHQpe3JldHVyblwiZGF0YV9hcnJheVwiPT09dC52YWxUeXBlfHx0LmFycmF5T2t9Zm9yKGEgaW4gdCl7aWYodS5jYWxjJiYhbi50cmFuc2l0aW9uKXJldHVybjt2YXIgdj10W2FdLG09ZVthXSx5PXIuY29uY2F0KGEpO2lmKGw9eS5qb2luKFwiLlwiKSxcIl9cIiE9PWEuY2hhckF0KDApJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB2JiZ2IT09bSl7aWYoKFwidGljazBcIj09PWF8fFwiZHRpY2tcIj09PWEpJiZcImdlb1wiIT09clswXSl7dmFyIHg9ZS50aWNrbW9kZTtpZihcImF1dG9cIj09PXh8fFwiYXJyYXlcIj09PXh8fCF4KWNvbnRpbnVlfWlmKChcInJhbmdlXCIhPT1hfHwhZS5hdXRvcmFuZ2UpJiYoXCJ6bWluXCIhPT1hJiZcInptYXhcIiE9PWF8fFwiY29udG91cmNhcnBldFwiIT09ZS50eXBlKSYmKGk9Yyh5KSkmJighaS5fY29tcGFyZUFzSlNPTnx8SlNPTi5zdHJpbmdpZnkodikhPT1KU09OLnN0cmluZ2lmeShtKSkpe3ZhciBiLF89aS52YWxUeXBlLHc9ZyhpKSxrPUFycmF5LmlzQXJyYXkodiksQT1BcnJheS5pc0FycmF5KG0pO2lmKGsmJkEpe3ZhciBUPVwiX2lucHV0X1wiK2EsUz10W1RdLEU9ZVtUXTtpZihBcnJheS5pc0FycmF5KFMpJiZTPT09RSljb250aW51ZX1pZih2b2lkIDA9PT1tKXcmJms/dS5jYWxjPSEwOmQoKTtlbHNlIGlmKGkuX2lzTGlua2VkVG9BcnJheSl7dmFyIEM9W10sTD0hMTtmfHwodS5hcnJheXNbYV09Qyk7dmFyIHo9TWF0aC5taW4odi5sZW5ndGgsbS5sZW5ndGgpLE89TWF0aC5tYXgodi5sZW5ndGgsbS5sZW5ndGgpO2lmKHohPT1PKXtpZihcImFycmF5ZHJhd1wiIT09aS5lZGl0VHlwZSl7ZCgpO2NvbnRpbnVlfUw9ITB9Zm9yKGI9MDtiPHo7YisrKXN0KHZbYl0sbVtiXSx5LmNvbmNhdChiKSxvLmV4dGVuZEZsYXQoe2luQXJyYXk6YSxhcnJheUluZGV4OmJ9LG4pKTtpZihMKWZvcihiPXo7YjxPO2IrKylDLnB1c2goYil9ZWxzZSFfJiZvLmlzUGxhaW5PYmplY3Qodik/c3QodixtLHksbik6dz9rJiZBPyhoJiYodS5jYWxjPSEwKSwoaHx8bi5uZXdEYXRhUmV2aXNpb24pJiZkKCkpOmshPT1BP3UuY2FsYz0hMDpkKCk6ayYmQSYmdi5sZW5ndGg9PT1tLmxlbmd0aCYmU3RyaW5nKHYpPT09U3RyaW5nKG0pfHxkKCl9fX1mb3IoYSBpbiBlKWlmKCEoYSBpbiB0fHxcIl9cIj09PWEuY2hhckF0KDApfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlW2FdKSl7aWYoZyhpPWMoci5jb25jYXQoYSkpKSYmQXJyYXkuaXNBcnJheShlW2FdKSlyZXR1cm4gdm9pZCh1LmNhbGM9ITApO2QoKX19ZnVuY3Rpb24gbHQodCl7dmFyIGU9bi5zZWxlY3QodCkscj10Ll9mdWxsTGF5b3V0O2lmKHIuX2NvbnRhaW5lcj1lLnNlbGVjdEFsbChcIi5wbG90LWNvbnRhaW5lclwiKS5kYXRhKFswXSksci5fY29udGFpbmVyLmVudGVyKCkuaW5zZXJ0KFwiZGl2XCIsXCI6Zmlyc3QtY2hpbGRcIikuY2xhc3NlZChcInBsb3QtY29udGFpbmVyXCIsITApLmNsYXNzZWQoXCJwbG90bHlcIiwhMCksci5fcGFwZXJkaXY9ci5fY29udGFpbmVyLnNlbGVjdEFsbChcIi5zdmctY29udGFpbmVyXCIpLmRhdGEoWzBdKSxyLl9wYXBlcmRpdi5lbnRlcigpLmFwcGVuZChcImRpdlwiKS5jbGFzc2VkKFwic3ZnLWNvbnRhaW5lclwiLCEwKS5zdHlsZShcInBvc2l0aW9uXCIsXCJyZWxhdGl2ZVwiKSxyLl9nbGNvbnRhaW5lcj1yLl9wYXBlcmRpdi5zZWxlY3RBbGwoXCIuZ2wtY29udGFpbmVyXCIpLmRhdGEoW3t9XSksci5fZ2xjb250YWluZXIuZW50ZXIoKS5hcHBlbmQoXCJkaXZcIikuY2xhc3NlZChcImdsLWNvbnRhaW5lclwiLCEwKSxyLl9wYXBlcmRpdi5zZWxlY3RBbGwoXCIubWFpbi1zdmdcIikucmVtb3ZlKCksci5fcGFwZXJkaXYuc2VsZWN0KFwiLm1vZGViYXItY29udGFpbmVyXCIpLnJlbW92ZSgpLHIuX3BhcGVyPXIuX3BhcGVyZGl2Lmluc2VydChcInN2Z1wiLFwiOmZpcnN0LWNoaWxkXCIpLmNsYXNzZWQoXCJtYWluLXN2Z1wiLCEwKSxyLl90b3BwYXBlcj1yLl9wYXBlcmRpdi5hcHBlbmQoXCJzdmdcIikuY2xhc3NlZChcIm1haW4tc3ZnXCIsITApLHIuX21vZGViYXJkaXY9ci5fcGFwZXJkaXYuYXBwZW5kKFwiZGl2XCIpLHIuX2hvdmVycGFwZXI9ci5fcGFwZXJkaXYuYXBwZW5kKFwic3ZnXCIpLmNsYXNzZWQoXCJtYWluLXN2Z1wiLCEwKSwhci5fdWlkKXt2YXIgaT17fTtuLnNlbGVjdEFsbChcImRlZnNcIikuZWFjaChmdW5jdGlvbigpe3RoaXMuaWQmJihpW3RoaXMuaWQuc3BsaXQoXCItXCIpWzFdXT0xKX0pLHIuX3VpZD1vLnJhbmRzdHIoaSl9ci5fcGFwZXJkaXYuc2VsZWN0QWxsKFwiLm1haW4tc3ZnXCIpLmF0dHIoeC5zdmdBdHRycyksci5fZGVmcz1yLl9wYXBlci5hcHBlbmQoXCJkZWZzXCIpLmF0dHIoXCJpZFwiLFwiZGVmcy1cIityLl91aWQpLHIuX2NsaXBzPXIuX2RlZnMuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiY2xpcHNcIiwhMCksci5fdG9wZGVmcz1yLl90b3BwYXBlci5hcHBlbmQoXCJkZWZzXCIpLmF0dHIoXCJpZFwiLFwidG9wZGVmcy1cIityLl91aWQpLHIuX3RvcGNsaXBzPXIuX3RvcGRlZnMuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiY2xpcHNcIiwhMCksci5fYmdMYXllcj1yLl9wYXBlci5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJiZ2xheWVyXCIsITApLHIuX2RyYWdnZXJzPXIuX3BhcGVyLmFwcGVuZChcImdcIikuY2xhc3NlZChcImRyYWdsYXllclwiLCEwKTt2YXIgYT1yLl9wYXBlci5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJsYXllci1iZWxvd1wiLCEwKTtyLl9pbWFnZUxvd2VyTGF5ZXI9YS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJpbWFnZWxheWVyXCIsITApLHIuX3NoYXBlTG93ZXJMYXllcj1hLmFwcGVuZChcImdcIikuY2xhc3NlZChcInNoYXBlbGF5ZXJcIiwhMCksci5fY2FydGVzaWFubGF5ZXI9ci5fcGFwZXIuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiY2FydGVzaWFubGF5ZXJcIiwhMCksci5fcG9sYXJsYXllcj1yLl9wYXBlci5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJwb2xhcmxheWVyXCIsITApLHIuX3Rlcm5hcnlsYXllcj1yLl9wYXBlci5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJ0ZXJuYXJ5bGF5ZXJcIiwhMCksci5fZ2VvbGF5ZXI9ci5fcGFwZXIuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiZ2VvbGF5ZXJcIiwhMCksci5fcGllbGF5ZXI9ci5fcGFwZXIuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwicGllbGF5ZXJcIiwhMCksci5fc3VuYnVyc3RsYXllcj1yLl9wYXBlci5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJzdW5idXJzdGxheWVyXCIsITApLHIuX2dsaW1hZ2VzPXIuX3BhcGVyLmFwcGVuZChcImdcIikuY2xhc3NlZChcImdsaW1hZ2VzXCIsITApO3ZhciBzPXIuX3RvcHBhcGVyLmFwcGVuZChcImdcIikuY2xhc3NlZChcImxheWVyLWFib3ZlXCIsITApO3IuX2ltYWdlVXBwZXJMYXllcj1zLmFwcGVuZChcImdcIikuY2xhc3NlZChcImltYWdlbGF5ZXJcIiwhMCksci5fc2hhcGVVcHBlckxheWVyPXMuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwic2hhcGVsYXllclwiLCEwKSxyLl9pbmZvbGF5ZXI9ci5fdG9wcGFwZXIuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiaW5mb2xheWVyXCIsITApLHIuX21lbnVsYXllcj1yLl90b3BwYXBlci5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJtZW51bGF5ZXJcIiwhMCksci5fem9vbWxheWVyPXIuX3RvcHBhcGVyLmFwcGVuZChcImdcIikuY2xhc3NlZChcInpvb21sYXllclwiLCEwKSxyLl9ob3ZlcmxheWVyPXIuX2hvdmVycGFwZXIuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwiaG92ZXJsYXllclwiLCEwKSxyLl9tb2RlYmFyZGl2LmNsYXNzZWQoXCJtb2RlYmFyLWNvbnRhaW5lclwiLCEwKS5zdHlsZShcInBvc2l0aW9uXCIsXCJhYnNvbHV0ZVwiKS5zdHlsZShcInRvcFwiLFwiMHB4XCIpLnN0eWxlKFwicmlnaHRcIixcIjBweFwiKSx0LmVtaXQoXCJwbG90bHlfZnJhbWV3b3JrXCIpfXIucmVhY3Q9ZnVuY3Rpb24odCxlLG4saSl7dmFyIGEsbDt2YXIgYz0odD1vLmdldEdyYXBoRGl2KHQpKS5fZnVsbERhdGEscD10Ll9mdWxsTGF5b3V0O2lmKG8uaXNQbG90RGl2KHQpJiZjJiZwKXtpZihvLmlzUGxhaW5PYmplY3QoZSkpe3ZhciBkPWU7ZT1kLmRhdGEsbj1kLmxheW91dCxpPWQuY29uZmlnLGE9ZC5mcmFtZXN9dmFyIGc9ITE7aWYoaSl7dmFyIHY9by5leHRlbmREZWVwKHt9LHQuX2NvbnRleHQpO3QuX2NvbnRleHQ9dm9pZCAwLE8odCxpKSxnPWZ1bmN0aW9uIHQoZSxyKXt2YXIgbjtmb3IobiBpbiBlKWlmKFwiX1wiIT09bi5jaGFyQXQoMCkpe3ZhciBpPWVbbl0sYT1yW25dO2lmKGkhPT1hKWlmKG8uaXNQbGFpbk9iamVjdChpKSYmby5pc1BsYWluT2JqZWN0KGEpKXtpZih0KGksYSkpcmV0dXJuITB9ZWxzZXtpZighQXJyYXkuaXNBcnJheShpKXx8IUFycmF5LmlzQXJyYXkoYSkpcmV0dXJuITA7aWYoaS5sZW5ndGghPT1hLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKylpZihpW3NdIT09YVtzXSl7aWYoIW8uaXNQbGFpbk9iamVjdChpW3NdKXx8IW8uaXNQbGFpbk9iamVjdChhW3NdKSlyZXR1cm4hMDtpZih0KGlbc10sYVtzXSkpcmV0dXJuITB9fX19KHYsdC5fY29udGV4dCl9dC5kYXRhPWV8fFtdLEEuY2xlYW5EYXRhKHQuZGF0YSksdC5sYXlvdXQ9bnx8e30sQS5jbGVhbkxheW91dCh0LmxheW91dCksZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxsLGMsdSxoLGYscCxkPW4uX3ByZUdVSSxnPVtdLHY9e307Zm9yKGkgaW4gZCl7aWYodT1ydChpLHR0KSl7aWYoYT11LmF0dHJ8fHUuaGVhZCtcIi51aXJldmlzaW9uXCIsKGM9KGw9cyhuLGEpLmdldCgpKSYmbnQoYSxlKSkmJmM9PT1sJiYobnVsbD09PShoPWRbaV0pJiYoaD12b2lkIDApLG90KHA9KGY9cyhlLGkpKS5nZXQoKSxoKSkpe3ZvaWQgMD09PXAmJlwiYXV0b3JhbmdlXCI9PT1pLnN1YnN0cihpLmxlbmd0aC05KSYmZy5wdXNoKGkuc3Vic3RyKDAsaS5sZW5ndGgtMTApKSxmLnNldChOKHMobixpKS5nZXQoKSkpO2NvbnRpbnVlfX1lbHNlIG8ud2FybihcInVucmVjb2duaXplZCBHVUkgZWRpdDogXCIraSk7ZGVsZXRlIGRbaV0sXCJyYW5nZVtcIj09PWkuc3Vic3RyKGkubGVuZ3RoLTgsNikmJih2W2kuc3Vic3RyKDAsaS5sZW5ndGgtOSldPTEpfWZvcih2YXIgbT0wO208Zy5sZW5ndGg7bSsrKXt2YXIgeT1nW21dO2lmKHZbeV0pe3ZhciB4PXMoZSx5KS5nZXQoKTt4JiZkZWxldGUgeC5hdXRvcmFuZ2V9fXZhciBiPW4uX3RyYWNlUHJlR1VJO2Zvcih2YXIgXyBpbiBiKXt2YXIgdyxrPWJbX10sQT1udWxsO2ZvcihpIGluIGspe2lmKCFBKXt2YXIgVD1pdChfLHIpO2lmKFQ8MCl7ZGVsZXRlIGJbX107YnJlYWt9dmFyIE09YXQoXyx0LCh3PXJbVF0uX2Z1bGxJbnB1dCkuaW5kZXgpO2lmKE08MCl7ZGVsZXRlIGJbX107YnJlYWt9QT10W01dfWlmKHU9cnQoaSxldCkpe2lmKHUuYXR0cj9jPShsPXMobix1LmF0dHIpLmdldCgpKSYmbnQodS5hdHRyLGUpOihsPXcudWlyZXZpc2lvbix2b2lkIDA9PT0oYz1BLnVpcmV2aXNpb24pJiYoYz1lLnVpcmV2aXNpb24pKSxjJiZjPT09bCYmKG51bGw9PT0oaD1rW2ldKSYmKGg9dm9pZCAwKSxvdChwPShmPXMoQSxpKSkuZ2V0KCksaCkpKXtmLnNldChOKHModyxpKS5nZXQoKSkpO2NvbnRpbnVlfX1lbHNlIG8ud2FybihcInVucmVjb2duaXplZCBHVUkgZWRpdDogXCIraStcIiBpbiB0cmFjZSB1aWQgXCIrXyk7ZGVsZXRlIGtbaV19fX0odC5kYXRhLHQubGF5b3V0LGMscCksZi5zdXBwbHlEZWZhdWx0cyh0LHtza2lwVXBkYXRlQ2FsYzohMH0pO3ZhciBtPXQuX2Z1bGxEYXRhLHk9dC5fZnVsbExheW91dCx4PXZvaWQgMD09PXkuZGF0YXJldmlzaW9uLGI9eS50cmFuc2l0aW9uLF89ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1NLmxheW91dEZsYWdzKCk7YS5hcnJheXM9e30sYS5yYW5nZXNBbHRlcmVkPXt9LGEubkNoYW5nZXM9MCxhLm5DaGFuZ2VzQW5pbT0wLHN0KGUscixbXSx7Z2V0VmFsT2JqZWN0OmZ1bmN0aW9uKHQpe3JldHVybiBoLmdldExheW91dFZhbE9iamVjdChyLHQpfSxmbGFnczphLGltbXV0YWJsZTpuLHRyYW5zaXRpb246aSxnZDp0fSksKGEucGxvdHx8YS5jYWxjKSYmKGEubGF5b3V0UmVwbG90PSEwKTtpJiZhLm5DaGFuZ2VzJiZhLm5DaGFuZ2VzQW5pbSYmKGEuYW5pbT1hLm5DaGFuZ2VzPT09YS5uQ2hhbmdlc0FuaW0/XCJhbGxcIjpcInNvbWVcIik7cmV0dXJuIGF9KHQscCx5LHgsYiksdz1fLm5ld0RhdGFSZXZpc2lvbixrPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1lLmxlbmd0aD09PXIubGVuZ3RoO2lmKCFpJiYhbylyZXR1cm57ZnVsbFJlcGxvdDohMCxjYWxjOiEwfTt2YXIgcyxsLGM9TS50cmFjZUZsYWdzKCk7Yy5hcnJheXM9e30sYy5uQ2hhbmdlcz0wLGMubkNoYW5nZXNBbmltPTA7dmFyIHU9e2dldFZhbE9iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gaC5nZXRUcmFjZVZhbE9iamVjdChsLHQpfSxmbGFnczpjLGltbXV0YWJsZTpuLHRyYW5zaXRpb246aSxuZXdEYXRhUmV2aXNpb246YSxnZDp0fSxwPXt9O2ZvcihzPTA7czxlLmxlbmd0aDtzKyspaWYocltzXSl7aWYobD1yW3NdLl9mdWxsSW5wdXQsZi5oYXNNYWtlc0RhdGFUcmFuc2Zvcm0obCkmJihsPXJbc10pLHBbbC51aWRdKWNvbnRpbnVlO3BbbC51aWRdPTEsc3QoZVtzXS5fZnVsbElucHV0LGwsW10sdSl9KGMuY2FsY3x8Yy5wbG90KSYmKGMuZnVsbFJlcGxvdD0hMCk7aSYmYy5uQ2hhbmdlcyYmYy5uQ2hhbmdlc0FuaW0mJihjLmFuaW09Yy5uQ2hhbmdlcz09PWMubkNoYW5nZXNBbmltJiZvP1wiYWxsXCI6XCJzb21lXCIpO3JldHVybiBjfSh0LGMsbSx4LGIsdyk7Sih0KSYmKF8ubGF5b3V0UmVwbG90PSEwKSxrLmNhbGN8fF8uY2FsYz90LmNhbGNkYXRhPXZvaWQgMDpmLnN1cHBseURlZmF1bHRzVXBkYXRlQ2FsYyh0LmNhbGNkYXRhLG0pO3ZhciBTPVtdO2lmKGEmJih0Ll90cmFuc2l0aW9uRGF0YT17fSxmLmNyZWF0ZVRyYW5zaXRpb25EYXRhKHQpLFMucHVzaChmdW5jdGlvbigpe3JldHVybiByLmFkZEZyYW1lcyh0LGEpfSkpLHkudHJhbnNpdGlvbiYmIWcmJihrLmFuaW18fF8uYW5pbSkpZi5kb0NhbGNkYXRhKHQpLFQuZG9BdXRvUmFuZ2VBbmRDb25zdHJhaW50cyh0KSxTLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gZi50cmFuc2l0aW9uRnJvbVJlYWN0KHQsayxfLHApfSk7ZWxzZSBpZihrLmZ1bGxSZXBsb3R8fF8ubGF5b3V0UmVwbG90fHxnKXQuX2Z1bGxMYXlvdXQuX3NraXBEZWZhdWx0cz0hMCxTLnB1c2goci5wbG90KTtlbHNle2Zvcih2YXIgRSBpbiBfLmFycmF5cyl7dmFyIEw9Xy5hcnJheXNbRV07aWYoTC5sZW5ndGgpe3ZhciB6PXUuZ2V0Q29tcG9uZW50TWV0aG9kKEUsXCJkcmF3T25lXCIpO2lmKHohPT1vLm5vb3ApZm9yKHZhciBJPTA7STxMLmxlbmd0aDtJKyspeih0LExbSV0pO2Vsc2V7dmFyIEQ9dS5nZXRDb21wb25lbnRNZXRob2QoRSxcImRyYXdcIik7aWYoRD09PW8ubm9vcCl0aHJvdyBuZXcgRXJyb3IoXCJjYW5ub3QgZHJhdyBjb21wb25lbnRzOiBcIitFKTtEKHQpfX19Uy5wdXNoKGYucHJldmlvdXNQcm9taXNlcyksay5zdHlsZSYmUy5wdXNoKFQuZG9UcmFjZVN0eWxlKSxrLmNvbG9yYmFycyYmUy5wdXNoKFQuZG9Db2xvckJhcnMpLF8ubGVnZW5kJiZTLnB1c2goVC5kb0xlZ2VuZCksXy5sYXlvdXRzdHlsZSYmUy5wdXNoKFQubGF5b3V0U3R5bGVzKSxfLmF4cmFuZ2UmJlkoUyksXy50aWNrcyYmUy5wdXNoKFQuZG9UaWNrc1JlbGF5b3V0KSxfLm1vZGViYXImJlMucHVzaChULmRvTW9kZUJhciksXy5jYW1lcmEmJlMucHVzaChULmRvQ2FtZXJhKSxTLnB1c2goQyl9Uy5wdXNoKGYucmVob3ZlcixmLnJlZHJhZyksKGw9by5zeW5jT3JBc3luYyhTLHQpKSYmbC50aGVufHwobD1Qcm9taXNlLnJlc29sdmUodCkpfWVsc2UgbD1yLm5ld1Bsb3QodCxlLG4saSk7cmV0dXJuIGwudGhlbihmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoXCJwbG90bHlfcmVhY3RcIix7ZGF0YTplLGxheW91dDpufSksdH0pfSxyLmFuaW1hdGU9ZnVuY3Rpb24odCxlLHIpe2lmKHQ9by5nZXRHcmFwaERpdih0KSwhby5pc1Bsb3REaXYodCkpdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBlbGVtZW50IGlzIG5vdCBhIFBsb3RseSBwbG90OiBcIit0K1wiLiBJdCdzIGxpa2VseSB0aGF0IHlvdSd2ZSBmYWlsZWQgdG8gY3JlYXRlIGEgcGxvdCBiZWZvcmUgYW5pbWF0aW5nIGl0LiBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9wbG90Lmx5L2phdmFzY3JpcHQvYW5pbWF0aW9ucy9cIik7dmFyIG49dC5fdHJhbnNpdGlvbkRhdGE7bi5fZnJhbWVRdWV1ZXx8KG4uX2ZyYW1lUXVldWU9W10pO3ZhciBpPShyPWYuc3VwcGx5QW5pbWF0aW9uRGVmYXVsdHMocikpLnRyYW5zaXRpb24sYT1yLmZyYW1lO2Z1bmN0aW9uIHModCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/dD49aS5sZW5ndGg/aVswXTppW3RdOml9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT90Pj1hLmxlbmd0aD9hWzBdOmFbdF06YX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9MDtyZXR1cm4gZnVuY3Rpb24oKXtpZih0JiYrK3I9PT1lKXJldHVybiB0KCl9fXJldHVybiB2b2lkIDA9PT1uLl9mcmFtZVdhaXRpbmdDbnQmJihuLl9mcmFtZVdhaXRpbmdDbnQ9MCksbmV3IFByb21pc2UoZnVuY3Rpb24oYSx1KXtmdW5jdGlvbiBoKCl7bi5fY3VycmVudEZyYW1lJiZuLl9jdXJyZW50RnJhbWUub25Db21wbGV0ZSYmbi5fY3VycmVudEZyYW1lLm9uQ29tcGxldGUoKTt2YXIgZT1uLl9jdXJyZW50RnJhbWU9bi5fZnJhbWVRdWV1ZS5zaGlmdCgpO2lmKGUpe3ZhciByPWUubmFtZT9lLm5hbWUudG9TdHJpbmcoKTpudWxsO3QuX2Z1bGxMYXlvdXQuX2N1cnJlbnRGcmFtZT1yLG4uX2xhc3RGcmFtZUF0PURhdGUubm93KCksbi5fdGltZVRvTmV4dD1lLmZyYW1lT3B0cy5kdXJhdGlvbixmLnRyYW5zaXRpb24odCxlLmZyYW1lLmRhdGEsZS5mcmFtZS5sYXlvdXQsQS5jb2VyY2VUcmFjZUluZGljZXModCxlLmZyYW1lLnRyYWNlcyksZS5mcmFtZU9wdHMsZS50cmFuc2l0aW9uT3B0cykudGhlbihmdW5jdGlvbigpe2Uub25Db21wbGV0ZSYmZS5vbkNvbXBsZXRlKCl9KSx0LmVtaXQoXCJwbG90bHlfYW5pbWF0aW5nZnJhbWVcIix7bmFtZTpyLGZyYW1lOmUuZnJhbWUsYW5pbWF0aW9uOntmcmFtZTplLmZyYW1lT3B0cyx0cmFuc2l0aW9uOmUudHJhbnNpdGlvbk9wdHN9fSl9ZWxzZSB0LmVtaXQoXCJwbG90bHlfYW5pbWF0ZWRcIiksd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKG4uX2FuaW1hdGlvblJhZiksbi5fYW5pbWF0aW9uUmFmPW51bGx9ZnVuY3Rpb24gcCgpe3QuZW1pdChcInBsb3RseV9hbmltYXRpbmdcIiksbi5fbGFzdEZyYW1lQXQ9LTEvMCxuLl90aW1lVG9OZXh0PTAsbi5fcnVubmluZ1RyYW5zaXRpb25zPTAsbi5fY3VycmVudEZyYW1lPW51bGw7dmFyIGU9ZnVuY3Rpb24oKXtuLl9hbmltYXRpb25SYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShlKSxEYXRlLm5vdygpLW4uX2xhc3RGcmFtZUF0Pm4uX3RpbWVUb05leHQmJmgoKX07ZSgpfXZhciBkLGcsdj0wO2Z1bmN0aW9uIG0odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/dj49aS5sZW5ndGg/dC50cmFuc2l0aW9uT3B0cz1pW3ZdOnQudHJhbnNpdGlvbk9wdHM9aVswXTp0LnRyYW5zaXRpb25PcHRzPWksdisrLHR9dmFyIHk9W10seD1udWxsPT1lLGI9QXJyYXkuaXNBcnJheShlKTtpZigheCYmIWImJm8uaXNQbGFpbk9iamVjdChlKSl5LnB1c2goe3R5cGU6XCJvYmplY3RcIixkYXRhOm0oby5leHRlbmRGbGF0KHt9LGUpKX0pO2Vsc2UgaWYoeHx8LTEhPT1bXCJzdHJpbmdcIixcIm51bWJlclwiXS5pbmRleE9mKHR5cGVvZiBlKSlmb3IoZD0wO2Q8bi5fZnJhbWVzLmxlbmd0aDtkKyspKGc9bi5fZnJhbWVzW2RdKSYmKHh8fFN0cmluZyhnLmdyb3VwKT09PVN0cmluZyhlKSkmJnkucHVzaCh7dHlwZTpcImJ5bmFtZVwiLG5hbWU6U3RyaW5nKGcubmFtZSksZGF0YTptKHtuYW1lOmcubmFtZX0pfSk7ZWxzZSBpZihiKWZvcihkPTA7ZDxlLmxlbmd0aDtkKyspe3ZhciBfPWVbZF07LTEhPT1bXCJudW1iZXJcIixcInN0cmluZ1wiXS5pbmRleE9mKHR5cGVvZiBfKT8oXz1TdHJpbmcoXykseS5wdXNoKHt0eXBlOlwiYnluYW1lXCIsbmFtZTpfLGRhdGE6bSh7bmFtZTpffSl9KSk6by5pc1BsYWluT2JqZWN0KF8pJiZ5LnB1c2goe3R5cGU6XCJvYmplY3RcIixkYXRhOm0oby5leHRlbmRGbGF0KHt9LF8pKX0pfWZvcihkPTA7ZDx5Lmxlbmd0aDtkKyspaWYoXCJieW5hbWVcIj09PShnPXlbZF0pLnR5cGUmJiFuLl9mcmFtZUhhc2hbZy5kYXRhLm5hbWVdKXJldHVybiBvLndhcm4oJ2FuaW1hdGUgZmFpbHVyZTogZnJhbWUgbm90IGZvdW5kOiBcIicrZy5kYXRhLm5hbWUrJ1wiJyksdm9pZCB1KCk7LTEhPT1bXCJuZXh0XCIsXCJpbW1lZGlhdGVcIl0uaW5kZXhPZihyLm1vZGUpJiZmdW5jdGlvbigpe2lmKDAhPT1uLl9mcmFtZVF1ZXVlLmxlbmd0aCl7Zm9yKDtuLl9mcmFtZVF1ZXVlLmxlbmd0aDspe3ZhciBlPW4uX2ZyYW1lUXVldWUucG9wKCk7ZS5vbkludGVycnVwdCYmZS5vbkludGVycnVwdCgpfXQuZW1pdChcInBsb3RseV9hbmltYXRpb25pbnRlcnJ1cHRlZFwiLFtdKX19KCksXCJyZXZlcnNlXCI9PT1yLmRpcmVjdGlvbiYmeS5yZXZlcnNlKCk7dmFyIHc9dC5fZnVsbExheW91dC5fY3VycmVudEZyYW1lO2lmKHcmJnIuZnJvbWN1cnJlbnQpe3ZhciBrPS0xO2ZvcihkPTA7ZDx5Lmxlbmd0aDtkKyspaWYoXCJieW5hbWVcIj09PShnPXlbZF0pLnR5cGUmJmcubmFtZT09PXcpe2s9ZDticmVha31pZihrPjAmJms8eS5sZW5ndGgtMSl7dmFyIFQ9W107Zm9yKGQ9MDtkPHkubGVuZ3RoO2QrKylnPXlbZF0sKFwiYnluYW1lXCIhPT15W2RdLnR5cGV8fGQ+aykmJlQucHVzaChnKTt5PVR9fXkubGVuZ3RoPjA/ZnVuY3Rpb24oZSl7aWYoMCE9PWUubGVuZ3RoKXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG87bz1cImJ5bmFtZVwiPT09ZVtpXS50eXBlP2YuY29tcHV0ZUZyYW1lKHQsZVtpXS5uYW1lKTplW2ldLmRhdGE7dmFyIGg9bChpKSxkPXMoaSk7ZC5kdXJhdGlvbj1NYXRoLm1pbihkLmR1cmF0aW9uLGguZHVyYXRpb24pO3ZhciBnPXtmcmFtZTpvLG5hbWU6ZVtpXS5uYW1lLGZyYW1lT3B0czpoLHRyYW5zaXRpb25PcHRzOmR9O2k9PT1lLmxlbmd0aC0xJiYoZy5vbkNvbXBsZXRlPWMoYSwyKSxnLm9uSW50ZXJydXB0PXUpLG4uX2ZyYW1lUXVldWUucHVzaChnKX1cImltbWVkaWF0ZVwiPT09ci5tb2RlJiYobi5fbGFzdEZyYW1lQXQ9LTEvMCksbi5fYW5pbWF0aW9uUmFmfHxwKCl9fSh5KToodC5lbWl0KFwicGxvdGx5X2FuaW1hdGVkXCIpLGEoKSl9KX0sci5hZGRGcmFtZXM9ZnVuY3Rpb24odCxlLHIpe2lmKHQ9by5nZXRHcmFwaERpdih0KSxudWxsPT1lKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTtpZighby5pc1Bsb3REaXYodCkpdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBlbGVtZW50IGlzIG5vdCBhIFBsb3RseSBwbG90OiBcIit0K1wiLiBJdCdzIGxpa2VseSB0aGF0IHlvdSd2ZSBmYWlsZWQgdG8gY3JlYXRlIGEgcGxvdCBiZWZvcmUgYWRkaW5nIGZyYW1lcy4gRm9yIG1vcmUgZGV0YWlscywgc2VlIGh0dHBzOi8vcGxvdC5seS9qYXZhc2NyaXB0L2FuaW1hdGlvbnMvXCIpO3ZhciBuLGksYSxzLGw9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyx1PXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g7aWYoIUFycmF5LmlzQXJyYXkoZSkpdGhyb3cgbmV3IEVycm9yKFwiYWRkRnJhbWVzIGZhaWx1cmU6IGZyYW1lTGlzdCBtdXN0IGJlIGFuIEFycmF5IG9mIGZyYW1lIGRlZmluaXRpb25zXCIrZSk7dmFyIGg9bC5sZW5ndGgrMiplLmxlbmd0aCxwPVtdLGQ9e307Zm9yKG49ZS5sZW5ndGgtMTtuPj0wO24tLSlpZihvLmlzUGxhaW5PYmplY3QoZVtuXSkpe3ZhciBnPWVbbl0ubmFtZSx2PSh1W2ddfHxkW2ddfHx7fSkubmFtZSxtPWVbbl0ubmFtZSx5PXVbdl18fGRbdl07diYmbSYmXCJudW1iZXJcIj09dHlwZW9mIG0mJnkmJkU8NSYmKEUrKyxvLndhcm4oJ2FkZEZyYW1lczogb3ZlcndyaXRpbmcgZnJhbWUgXCInKyh1W3ZdfHxkW3ZdKS5uYW1lKydcIiB3aXRoIGEgZnJhbWUgd2hvc2UgbmFtZSBvZiB0eXBlIFwibnVtYmVyXCIgYWxzbyBlcXVhdGVzIHRvIFwiJyt2KydcIi4gVGhpcyBpcyB2YWxpZCBidXQgbWF5IHBvdGVudGlhbGx5IGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBzaW5jZSBhbGwgcGxvdGx5LmpzIGZyYW1lIG5hbWVzIGFyZSBzdG9yZWQgaW50ZXJuYWxseSBhcyBzdHJpbmdzLicpLDU9PT1FJiZvLndhcm4oXCJhZGRGcmFtZXM6IFRoaXMgQVBJIGNhbGwgaGFzIHlpZWxkZWQgdG9vIG1hbnkgb2YgdGhlc2Ugd2FybmluZ3MuIEZvciB0aGUgcmVzdCBvZiB0aGlzIGNhbGwsIGZ1cnRoZXIgd2FybmluZ3MgYWJvdXQgbnVtZXJpYyBmcmFtZSBuYW1lcyB3aWxsIGJlIHN1cHByZXNzZWQuXCIpKSxkW2ddPXtuYW1lOmd9LHAucHVzaCh7ZnJhbWU6Zi5zdXBwbHlGcmFtZURlZmF1bHRzKGVbbl0pLGluZGV4OnImJnZvaWQgMCE9PXJbbl0mJm51bGwhPT1yW25dP3Jbbl06aCtufSl9cC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaW5kZXg+ZS5pbmRleD8tMTp0LmluZGV4PGUuaW5kZXg/MTowfSk7dmFyIHg9W10sYj1bXSxfPWwubGVuZ3RoO2ZvcihuPXAubGVuZ3RoLTE7bj49MDtuLS0pe2lmKFwibnVtYmVyXCI9PXR5cGVvZihpPXBbbl0uZnJhbWUpLm5hbWUmJm8ud2FybihcIldhcm5pbmc6IGFkZEZyYW1lcyBhY2NlcHRzIGZyYW1lcyB3aXRoIG51bWVyaWMgbmFtZXMsIGJ1dCB0aGUgbnVtYmVycyBhcmVpbXBsaWNpdGx5IGNhc3QgdG8gc3RyaW5nc1wiKSwhaS5uYW1lKWZvcig7dVtpLm5hbWU9XCJmcmFtZSBcIit0Ll90cmFuc2l0aW9uRGF0YS5fY291bnRlcisrXTspO2lmKHVbaS5uYW1lXSl7Zm9yKGE9MDthPGwubGVuZ3RoJiYobFthXXx8e30pLm5hbWUhPT1pLm5hbWU7YSsrKTt4LnB1c2goe3R5cGU6XCJyZXBsYWNlXCIsaW5kZXg6YSx2YWx1ZTppfSksYi51bnNoaWZ0KHt0eXBlOlwicmVwbGFjZVwiLGluZGV4OmEsdmFsdWU6bFthXX0pfWVsc2Ugcz1NYXRoLm1heCgwLE1hdGgubWluKHBbbl0uaW5kZXgsXykpLHgucHVzaCh7dHlwZTpcImluc2VydFwiLGluZGV4OnMsdmFsdWU6aX0pLGIudW5zaGlmdCh7dHlwZTpcImRlbGV0ZVwiLGluZGV4OnN9KSxfKyt9dmFyIHc9Zi5tb2RpZnlGcmFtZXMsaz1mLm1vZGlmeUZyYW1lcyxBPVt0LGJdLFQ9W3QseF07cmV0dXJuIGMmJmMuYWRkKHQsdyxBLGssVCksZi5tb2RpZnlGcmFtZXModCx4KX0sci5kZWxldGVGcmFtZXM9ZnVuY3Rpb24odCxlKXtpZih0PW8uZ2V0R3JhcGhEaXYodCksIW8uaXNQbG90RGl2KHQpKXRocm93IG5ldyBFcnJvcihcIlRoaXMgZWxlbWVudCBpcyBub3QgYSBQbG90bHkgcGxvdDogXCIrdCk7dmFyIHIsbixpPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMsYT1bXSxzPVtdO2lmKCFlKWZvcihlPVtdLHI9MDtyPGkubGVuZ3RoO3IrKyllLnB1c2gocik7Zm9yKChlPWUuc2xpY2UoMCkpLnNvcnQoKSxyPWUubGVuZ3RoLTE7cj49MDtyLS0pbj1lW3JdLGEucHVzaCh7dHlwZTpcImRlbGV0ZVwiLGluZGV4Om59KSxzLnVuc2hpZnQoe3R5cGU6XCJpbnNlcnRcIixpbmRleDpuLHZhbHVlOmlbbl19KTt2YXIgbD1mLm1vZGlmeUZyYW1lcyx1PWYubW9kaWZ5RnJhbWVzLGg9W3Qsc10scD1bdCxhXTtyZXR1cm4gYyYmYy5hZGQodCxsLGgsdSxwKSxmLm1vZGlmeUZyYW1lcyh0LGEpfSxyLnB1cmdlPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PW8uZ2V0R3JhcGhEaXYodCkpLl9mdWxsTGF5b3V0fHx7fSxyPXQuX2Z1bGxEYXRhfHxbXTtyZXR1cm4gZi5jbGVhblBsb3QoW10se30scixlKSxmLnB1cmdlKHQpLGwucHVyZ2UodCksZS5fY29udGFpbmVyJiZlLl9jb250YWluZXIucmVtb3ZlKCksZGVsZXRlIHQuX2NvbnRleHQsdH19LHtcIi4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi9jb21wb25lbnRzL2NvbG9yYmFyL2Nvbm5lY3RcIjo1ODAsXCIuLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiOjY3OSxcIi4uL2xpYlwiOjcwMSxcIi4uL2xpYi9ldmVudHNcIjo2OTAsXCIuLi9saWIvcXVldWVcIjo3MTYsXCIuLi9saWIvc3ZnX3RleHRfdXRpbHNcIjo3MjUsXCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHNcIjo3NTUsXCIuLi9wbG90cy9jYXJ0ZXNpYW4vZ3JhcGhfaW50ZXJhY3RcIjo3NTgsXCIuLi9wbG90cy9jYXJ0ZXNpYW4vc2VsZWN0XCI6NzY2LFwiLi4vcGxvdHMvcGxvdHNcIjo4MTAsXCIuLi9wbG90cy9wb2xhci9sZWdhY3lcIjo4MTgsXCIuLi9yZWdpc3RyeVwiOjgyOSxcIi4vZWRpdF90eXBlc1wiOjczMixcIi4vaGVscGVyc1wiOjczMyxcIi4vbWFuYWdlX2FycmF5c1wiOjczNSxcIi4vcGxvdF9jb25maWdcIjo3MzcsXCIuL3Bsb3Rfc2NoZW1hXCI6NzM4LFwiLi9zdWJyb3V0aW5lc1wiOjc0MCxkMzoxNTUsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMixcImhhcy1ob3ZlclwiOjQwM31dLDczNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXtzdGF0aWNQbG90Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LHBsb3RseVNlcnZlclVSTDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJodHRwczovL3Bsb3QubHlcIn0sZWRpdGFibGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sZWRpdHM6e2Fubm90YXRpb25Qb3NpdGlvbjp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxhbm5vdGF0aW9uVGFpbDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxhbm5vdGF0aW9uVGV4dDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxheGlzVGl0bGVUZXh0Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LGNvbG9yYmFyUG9zaXRpb246e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sY29sb3JiYXJUaXRsZVRleHQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sbGVnZW5kUG9zaXRpb246e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sbGVnZW5kVGV4dDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxzaGFwZVBvc2l0aW9uOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LHRpdGxlVGV4dDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfX0sYXV0b3NpemFibGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0scmVzcG9uc2l2ZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxmaWxsRnJhbWU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sZnJhbWVNYXJnaW5zOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLG1pbjowLG1heDouNX0sc2Nyb2xsWm9vbTp7dmFsVHlwZTpcImZsYWdsaXN0XCIsZmxhZ3M6W1wiY2FydGVzaWFuXCIsXCJnbDNkXCIsXCJnZW9cIixcIm1hcGJveFwiXSxleHRyYXM6WyEwLCExXSxkZmx0OlwiZ2wzZCtnZW8rbWFwYm94XCJ9LGRvdWJsZUNsaWNrOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbITEsXCJyZXNldFwiLFwiYXV0b3NpemVcIixcInJlc2V0K2F1dG9zaXplXCJdLGRmbHQ6XCJyZXNldCthdXRvc2l6ZVwifSxzaG93QXhpc0RyYWdIYW5kbGVzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITB9LHNob3dBeGlzUmFuZ2VFbnRyeUJveGVzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITB9LHNob3dUaXBzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITB9LHNob3dMaW5rOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LGxpbmtUZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIkVkaXQgY2hhcnRcIixub0JsYW5rOiEwfSxzZW5kRGF0YTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfSxzaG93U291cmNlczp7dmFsVHlwZTpcImFueVwiLGRmbHQ6ITF9LGRpc3BsYXlNb2RlQmFyOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJob3ZlclwiLCEwLCExXSxkZmx0OlwiaG92ZXJcIn0sc2hvd1NlbmRUb0Nsb3VkOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LG1vZGVCYXJCdXR0b25zVG9SZW1vdmU6e3ZhbFR5cGU6XCJhbnlcIixkZmx0OltdfSxtb2RlQmFyQnV0dG9uc1RvQWRkOnt2YWxUeXBlOlwiYW55XCIsZGZsdDpbXX0sbW9kZUJhckJ1dHRvbnM6e3ZhbFR5cGU6XCJhbnlcIixkZmx0OiExfSx0b0ltYWdlQnV0dG9uT3B0aW9uczp7dmFsVHlwZTpcImFueVwiLGRmbHQ6e319LGRpc3BsYXlsb2dvOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITB9LHdhdGVybWFyazp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxwbG90R2xQaXhlbFJhdGlvOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoyLG1pbjoxLG1heDo0fSxzZXRCYWNrZ3JvdW5kOnt2YWxUeXBlOlwiYW55XCIsZGZsdDpcInRyYW5zcGFyZW50XCJ9LHRvcG9qc29uVVJMOnt2YWxUeXBlOlwic3RyaW5nXCIsbm9CbGFuazohMCxkZmx0OlwiaHR0cHM6Ly9jZG4ucGxvdC5seS9cIn0sbWFwYm94QWNjZXNzVG9rZW46e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0Om51bGx9LGxvZ2dpbmc6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDoxfSxxdWV1ZUxlbmd0aDp7dmFsVHlwZTpcImludGVnZXJcIixtaW46MCxkZmx0OjB9LGdsb2JhbFRyYW5zZm9ybXM6e3ZhbFR5cGU6XCJhbnlcIixkZmx0OltdfSxsb2NhbGU6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiZW4tVVNcIn0sbG9jYWxlczp7dmFsVHlwZTpcImFueVwiLGRmbHQ6e319fSxpPXt9OyFmdW5jdGlvbiB0KGUscil7Zm9yKHZhciBuIGluIGUpe3ZhciBpPWVbbl07aS52YWxUeXBlP3Jbbl09aS5kZmx0OihyW25dfHwocltuXT17fSksdChpLHJbbl0pKX19KG4saSksZS5leHBvcnRzPXtjb25maWdBdHRyaWJ1dGVzOm4sZGZsdENvbmZpZzppfX0se31dLDczODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9yZWdpc3RyeVwiKSxpPXQoXCIuLi9saWJcIiksYT10KFwiLi4vcGxvdHMvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlc1wiKSxzPXQoXCIuLi9wbG90cy9mcmFtZV9hdHRyaWJ1dGVzXCIpLGw9dChcIi4uL3Bsb3RzL2FuaW1hdGlvbl9hdHRyaWJ1dGVzXCIpLGM9dChcIi4vcGxvdF9jb25maWdcIikuY29uZmlnQXR0cmlidXRlcyx1PXQoXCIuLi9wbG90cy9wb2xhci9sZWdhY3kvYXJlYV9hdHRyaWJ1dGVzXCIpLGg9dChcIi4uL3Bsb3RzL3BvbGFyL2xlZ2FjeS9heGlzX2F0dHJpYnV0ZXNcIiksZj10KFwiLi9lZGl0X3R5cGVzXCIpLHA9aS5leHRlbmRGbGF0LGQ9aS5leHRlbmREZWVwQWxsLGc9aS5pc1BsYWluT2JqZWN0LHY9XCJfaXNTdWJwbG90T2JqXCIsbT1cIl9pc0xpbmtlZFRvQXJyYXlcIix5PVt2LG0sXCJfYXJyYXlBdHRyUmVnZXhwc1wiLFwiX2RlcHJlY2F0ZWRcIl07ZnVuY3Rpb24geCh0LGUscil7aWYoIXQpcmV0dXJuITE7aWYodC5faXNMaW5rZWRUb0FycmF5KWlmKGIoZVtyXSkpcisrO2Vsc2UgaWYocjxlLmxlbmd0aClyZXR1cm4hMTtmb3IoO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj10W2Vbcl1dO2lmKCFnKG4pKWJyZWFrO2lmKHQ9bixyPT09ZS5sZW5ndGgtMSlicmVhaztpZih0Ll9pc0xpbmtlZFRvQXJyYXkpe2lmKCFiKGVbKytyXSkpcmV0dXJuITF9ZWxzZSBpZihcImluZm9fYXJyYXlcIj09PXQudmFsVHlwZSl7dmFyIGk9ZVsrK3JdO2lmKCFiKGkpKXJldHVybiExO3ZhciBhPXQuaXRlbXM7aWYoQXJyYXkuaXNBcnJheShhKSl7aWYoaT49YS5sZW5ndGgpcmV0dXJuITE7aWYoMj09PXQuZGltZW5zaW9ucyl7aWYocisrLGUubGVuZ3RoPT09cilyZXR1cm4gdDt2YXIgbz1lW3JdO2lmKCFiKG8pKXJldHVybiExO3Q9YVtpXVtvXX1lbHNlIHQ9YVtpXX1lbHNlIHQ9YX19cmV0dXJuIHR9ZnVuY3Rpb24gYih0KXtyZXR1cm4gdD09PU1hdGgucm91bmQodCkmJnQ+PTB9ZnVuY3Rpb24gXyh0KXtyZXR1cm4gZnVuY3Rpb24odCl7ci5jcmF3bCh0LGZ1bmN0aW9uKHQsZSxuKXtyLmlzVmFsT2JqZWN0KHQpP1wiZGF0YV9hcnJheVwiPT09dC52YWxUeXBlPyh0LnJvbGU9XCJkYXRhXCIsbltlK1wic3JjXCJdPXt2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJub25lXCJ9KTohMD09PXQuYXJyYXlPayYmKG5bZStcInNyY1wiXT17dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwibm9uZVwifSk6Zyh0KSYmKHQucm9sZT1cIm9iamVjdFwiKX0pfSh0KSxmdW5jdGlvbih0KXtyLmNyYXdsKHQsZnVuY3Rpb24odCxlLHIpe2lmKCF0KXJldHVybjt2YXIgbj10W21dO2lmKCFuKXJldHVybjtkZWxldGUgdFttXSxyW2VdPXtpdGVtczp7fX0scltlXS5pdGVtc1tuXT10LHJbZV0ucm9sZT1cIm9iamVjdFwifSl9KHQpLGZ1bmN0aW9uKHQpeyFmdW5jdGlvbiB0KGUpe2Zvcih2YXIgciBpbiBlKWlmKGcoZVtyXSkpdChlW3JdKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZVtyXSkpZm9yKHZhciBuPTA7bjxlW3JdLmxlbmd0aDtuKyspdChlW3JdW25dKTtlbHNlIGVbcl1pbnN0YW5jZW9mIFJlZ0V4cCYmKGVbcl09ZVtyXS50b1N0cmluZygpKX0odCl9KHQpLHR9ZnVuY3Rpb24gdyh0LGUscil7dmFyIG49aS5uZXN0ZWRQcm9wZXJ0eSh0LHIpLGE9ZCh7fSxlLmxheW91dEF0dHJpYnV0ZXMpO2Fbdl09ITAsbi5zZXQoYSl9ZnVuY3Rpb24gayh0LGUscil7dmFyIG49aS5uZXN0ZWRQcm9wZXJ0eSh0LHIpO24uc2V0KGQobi5nZXQoKXx8e30sZSkpfXIuSVNfU1VCUExPVF9PQko9dixyLklTX0xJTktFRF9UT19BUlJBWT1tLHIuREVQUkVDQVRFRD1cIl9kZXByZWNhdGVkXCIsci5VTkRFUlNDT1JFX0FUVFJTPXksci5nZXQ9ZnVuY3Rpb24oKXt2YXIgdD17fTtuLmFsbFR5cGVzLmNvbmNhdChcImFyZWFcIikuZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPWZ1bmN0aW9uKHQpe3ZhciBlLG87XCJhcmVhXCI9PT10PyhlPXthdHRyaWJ1dGVzOnV9LG89e30pOihlPW4ubW9kdWxlc1t0XS5fbW9kdWxlLG89ZS5iYXNlUGxvdE1vZHVsZSk7dmFyIHM9e3R5cGU6bnVsbH0sbD1kKHt9LGEpLGM9ZCh7fSxlLmF0dHJpYnV0ZXMpO3IuY3Jhd2woYyxmdW5jdGlvbih0LGUscixuLGEpe2kubmVzdGVkUHJvcGVydHkobCxhKS5zZXQodm9pZCAwKSx2b2lkIDA9PT10JiZpLm5lc3RlZFByb3BlcnR5KGMsYSkuc2V0KHZvaWQgMCl9KSxkKHMsbCksbi50cmFjZUlzKHQsXCJub09wYWNpdHlcIikmJmRlbGV0ZSBzLm9wYWNpdHk7bi50cmFjZUlzKHQsXCJzaG93TGVnZW5kXCIpfHwoZGVsZXRlIHMuc2hvd2xlZ2VuZCxkZWxldGUgcy5sZWdlbmRncm91cCk7bi50cmFjZUlzKHQsXCJub0hvdmVyXCIpJiYoZGVsZXRlIHMuaG92ZXJpbmZvLGRlbGV0ZSBzLmhvdmVybGFiZWwpO2Uuc2VsZWN0UG9pbnRzfHxkZWxldGUgcy5zZWxlY3RlZHBvaW50cztkKHMsYyksby5hdHRyaWJ1dGVzJiZkKHMsby5hdHRyaWJ1dGVzKTtzLnR5cGU9dDt2YXIgaD17bWV0YTplLm1ldGF8fHt9LGF0dHJpYnV0ZXM6XyhzKX07aWYoZS5sYXlvdXRBdHRyaWJ1dGVzKXt2YXIgZj17fTtkKGYsZS5sYXlvdXRBdHRyaWJ1dGVzKSxoLmxheW91dEF0dHJpYnV0ZXM9XyhmKX1yZXR1cm4gaH0oZSl9KTt2YXIgZSxnPXt9O3JldHVybiBPYmplY3Qua2V5cyhuLnRyYW5zZm9ybXNSZWdpc3RyeSkuZm9yRWFjaChmdW5jdGlvbih0KXtnW3RdPWZ1bmN0aW9uKHQpe3ZhciBlPW4udHJhbnNmb3Jtc1JlZ2lzdHJ5W3RdLHI9ZCh7fSxlLmF0dHJpYnV0ZXMpO3JldHVybiBPYmplY3Qua2V5cyhuLmNvbXBvbmVudHNSZWdpc3RyeSkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgaT1uLmNvbXBvbmVudHNSZWdpc3RyeVtlXTtpLnNjaGVtYSYmaS5zY2hlbWEudHJhbnNmb3JtcyYmaS5zY2hlbWEudHJhbnNmb3Jtc1t0XSYmT2JqZWN0LmtleXMoaS5zY2hlbWEudHJhbnNmb3Jtc1t0XSkuZm9yRWFjaChmdW5jdGlvbihlKXtrKHIsaS5zY2hlbWEudHJhbnNmb3Jtc1t0XVtlXSxlKX0pfSkse2F0dHJpYnV0ZXM6XyhyKX19KHQpfSkse2RlZnM6e3ZhbE9iamVjdHM6aS52YWxPYmplY3RNZXRhLG1ldGFLZXlzOnkuY29uY2F0KFtcImRlc2NyaXB0aW9uXCIsXCJyb2xlXCIsXCJlZGl0VHlwZVwiLFwiaW1wbGllZEVkaXRzXCJdKSxlZGl0VHlwZTp7dHJhY2VzOmYudHJhY2VzLGxheW91dDpmLmxheW91dH0saW1wbGllZEVkaXRzOnt9fSx0cmFjZXM6dCxsYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgdCxlLHI9e307Zm9yKHQgaW4gZChyLG8pLG4uc3VicGxvdHNSZWdpc3RyeSlpZigoZT1uLnN1YnBsb3RzUmVnaXN0cnlbdF0pLmxheW91dEF0dHJpYnV0ZXMpaWYoQXJyYXkuaXNBcnJheShlLmF0dHIpKWZvcih2YXIgaT0wO2k8ZS5hdHRyLmxlbmd0aDtpKyspdyhyLGUsZS5hdHRyW2ldKTtlbHNle3ZhciBhPVwic3VicGxvdFwiPT09ZS5hdHRyP2UubmFtZTplLmF0dHI7dyhyLGUsYSl9Zm9yKHQgaW4gcj1mdW5jdGlvbih0KXtyZXR1cm4gcCh0LHtyYWRpYWxheGlzOmgucmFkaWFsYXhpcyxhbmd1bGFyYXhpczpoLmFuZ3VsYXJheGlzfSkscCh0LGgubGF5b3V0KSx0fShyKSxuLmNvbXBvbmVudHNSZWdpc3RyeSl7dmFyIHM9KGU9bi5jb21wb25lbnRzUmVnaXN0cnlbdF0pLnNjaGVtYTtpZihzJiYocy5zdWJwbG90c3x8cy5sYXlvdXQpKXt2YXIgbD1zLnN1YnBsb3RzO2lmKGwmJmwueGF4aXMmJiFsLnlheGlzKWZvcih2YXIgYyBpbiBsLnhheGlzKWRlbGV0ZSByLnlheGlzW2NdfWVsc2UgZS5sYXlvdXRBdHRyaWJ1dGVzJiZrKHIsZS5sYXlvdXRBdHRyaWJ1dGVzLGUubmFtZSl9cmV0dXJue2xheW91dEF0dHJpYnV0ZXM6XyhyKX19KCksdHJhbnNmb3JtczpnLGZyYW1lczooZT17ZnJhbWVzOmkuZXh0ZW5kRGVlcEFsbCh7fSxzKX0sXyhlKSxlLmZyYW1lcyksYW5pbWF0aW9uOl8obCksY29uZmlnOl8oYyl9fSxyLmNyYXdsPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBhPW58fDA7aT1pfHxcIlwiLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIG89dFtuXTtpZigtMT09PXkuaW5kZXhPZihuKSl7dmFyIHM9KGk/aStcIi5cIjpcIlwiKStuO2UobyxuLHQsYSxzKSxyLmlzVmFsT2JqZWN0KG8pfHxnKG8pJiZcImltcGxpZWRFZGl0c1wiIT09biYmci5jcmF3bChvLGUsYSsxLHMpfX0pfSxyLmlzVmFsT2JqZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ2b2lkIDAhPT10LnZhbFR5cGV9LHIuZmluZEFycmF5QXR0cmlidXRlcz1mdW5jdGlvbih0KXt2YXIgZSxuLG89W10scz1bXSxsPVtdO2Z1bmN0aW9uIGModCxyLGEsYyl7cz1zLnNsaWNlKDAsYykuY29uY2F0KFtyXSksbD1sLnNsaWNlKDAsYykuY29uY2F0KFt0JiZ0Ll9pc0xpbmtlZFRvQXJyYXldKSx0JiYoXCJkYXRhX2FycmF5XCI9PT10LnZhbFR5cGV8fCEwPT09dC5hcnJheU9rKSYmIShcImNvbG9yYmFyXCI9PT1zW2MtMV0mJihcInRpY2t0ZXh0XCI9PT1yfHxcInRpY2t2YWxzXCI9PT1yKSkmJmZ1bmN0aW9uIHQoZSxyLGEpe3ZhciBjPWVbc1tyXV07dmFyIHU9YStzW3JdO2lmKHI9PT1zLmxlbmd0aC0xKWkuaXNBcnJheU9yVHlwZWRBcnJheShjKSYmby5wdXNoKG4rdSk7ZWxzZSBpZihsW3JdKXtpZihBcnJheS5pc0FycmF5KGMpKWZvcih2YXIgaD0wO2g8Yy5sZW5ndGg7aCsrKWkuaXNQbGFpbk9iamVjdChjW2hdKSYmdChjW2hdLHIrMSx1K1wiW1wiK2grXCJdLlwiKX1lbHNlIGkuaXNQbGFpbk9iamVjdChjKSYmdChjLHIrMSx1K1wiLlwiKX0oZSwwLFwiXCIpfWU9dCxuPVwiXCIsci5jcmF3bChhLGMpLHQuX21vZHVsZSYmdC5fbW9kdWxlLmF0dHJpYnV0ZXMmJnIuY3Jhd2wodC5fbW9kdWxlLmF0dHJpYnV0ZXMsYyk7dmFyIHU9dC50cmFuc2Zvcm1zO2lmKHUpZm9yKHZhciBoPTA7aDx1Lmxlbmd0aDtoKyspe3ZhciBmPXVbaF0scD1mLl9tb2R1bGU7cCYmKG49XCJ0cmFuc2Zvcm1zW1wiK2grXCJdLlwiLGU9ZixyLmNyYXdsKHAuYXR0cmlidXRlcyxjKSl9cmV0dXJuIG99LHIuZ2V0VHJhY2VWYWxPYmplY3Q9ZnVuY3Rpb24odCxlKXt2YXIgcixpLG89ZVswXSxzPTE7aWYoXCJ0cmFuc2Zvcm1zXCI9PT1vKXtpZigxPT09ZS5sZW5ndGgpcmV0dXJuIGEudHJhbnNmb3Jtczt2YXIgbD10LnRyYW5zZm9ybXM7aWYoIUFycmF5LmlzQXJyYXkobCl8fCFsLmxlbmd0aClyZXR1cm4hMTt2YXIgYz1lWzFdO2lmKCFiKGMpfHxjPj1sLmxlbmd0aClyZXR1cm4hMTtpPShyPShuLnRyYW5zZm9ybXNSZWdpc3RyeVtsW2NdLnR5cGVdfHx7fSkuYXR0cmlidXRlcykmJnJbZVsyXV0scz0zfWVsc2UgaWYoXCJhcmVhXCI9PT10LnR5cGUpaT11W29dO2Vsc2V7dmFyIGg9dC5fbW9kdWxlO2lmKGh8fChoPShuLm1vZHVsZXNbdC50eXBlfHxhLnR5cGUuZGZsdF18fHt9KS5fbW9kdWxlKSwhaClyZXR1cm4hMTtpZighKGk9KHI9aC5hdHRyaWJ1dGVzKSYmcltvXSkpe3ZhciBmPWguYmFzZVBsb3RNb2R1bGU7ZiYmZi5hdHRyaWJ1dGVzJiYoaT1mLmF0dHJpYnV0ZXNbb10pfWl8fChpPWFbb10pfXJldHVybiB4KGksZSxzKX0sci5nZXRMYXlvdXRWYWxPYmplY3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4geChmdW5jdGlvbih0LGUpe3ZhciByLGksYSxzLGw9dC5fYmFzZVBsb3RNb2R1bGVzO2lmKGwpe3ZhciBjO2ZvcihyPTA7cjxsLmxlbmd0aDtyKyspe2lmKChhPWxbcl0pLmF0dHJSZWdleCYmYS5hdHRyUmVnZXgudGVzdChlKSl7aWYoYS5sYXlvdXRBdHRyT3ZlcnJpZGVzKXJldHVybiBhLmxheW91dEF0dHJPdmVycmlkZXM7IWMmJmEubGF5b3V0QXR0cmlidXRlcyYmKGM9YS5sYXlvdXRBdHRyaWJ1dGVzKX12YXIgdT1hLmJhc2VMYXlvdXRBdHRyT3ZlcnJpZGVzO2lmKHUmJmUgaW4gdSlyZXR1cm4gdVtlXX1pZihjKXJldHVybiBjfXZhciBmPXQuX21vZHVsZXM7aWYoZilmb3Iocj0wO3I8Zi5sZW5ndGg7cisrKWlmKChzPWZbcl0ubGF5b3V0QXR0cmlidXRlcykmJmUgaW4gcylyZXR1cm4gc1tlXTtmb3IoaSBpbiBuLmNvbXBvbmVudHNSZWdpc3RyeSlpZighKGE9bi5jb21wb25lbnRzUmVnaXN0cnlbaV0pLnNjaGVtYSYmZT09PWEubmFtZSlyZXR1cm4gYS5sYXlvdXRBdHRyaWJ1dGVzO2lmKGUgaW4gbylyZXR1cm4gb1tlXTtpZihcInJhZGlhbGF4aXNcIj09PWV8fFwiYW5ndWxhcmF4aXNcIj09PWUpcmV0dXJuIGhbZV07cmV0dXJuIGgubGF5b3V0W2VdfHwhMX0odCxlWzBdKSxlLDEpfX0se1wiLi4vbGliXCI6NzAxLFwiLi4vcGxvdHMvYW5pbWF0aW9uX2F0dHJpYnV0ZXNcIjo3NDQsXCIuLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi4vcGxvdHMvZnJhbWVfYXR0cmlidXRlc1wiOjc3NixcIi4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzXCI6ODAxLFwiLi4vcGxvdHMvcG9sYXIvbGVnYWN5L2FyZWFfYXR0cmlidXRlc1wiOjgxNixcIi4uL3Bsb3RzL3BvbGFyL2xlZ2FjeS9heGlzX2F0dHJpYnV0ZXNcIjo4MTcsXCIuLi9yZWdpc3RyeVwiOjgyOSxcIi4vZWRpdF90eXBlc1wiOjczMixcIi4vcGxvdF9jb25maWdcIjo3Mzd9XSw3Mzk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vbGliXCIpLGk9dChcIi4uL3Bsb3RzL2F0dHJpYnV0ZXNcIiksYT1cInRlbXBsYXRlaXRlbW5hbWVcIixvPXtuYW1lOnt2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJub25lXCJ9fTtmdW5jdGlvbiBzKHQpe3JldHVybiB0JiZcInN0cmluZ1wiPT10eXBlb2YgdH1mdW5jdGlvbiBsKHQpe3ZhciBlPXQubGVuZ3RoLTE7cmV0dXJuXCJzXCIhPT10LmNoYXJBdChlKSYmbi53YXJuKFwiYmFkIGFyZ3VtZW50IHRvIGFycmF5RGVmYXVsdEtleTogXCIrdCksdC5zdWJzdHIoMCx0Lmxlbmd0aC0xKStcImRlZmF1bHRzXCJ9b1thXT17dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwiY2FsY1wifSxyLnRlbXBsYXRlZEFycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuX2lzTGlua2VkVG9BcnJheT10LGUubmFtZT1vLm5hbWUsZVthXT1vW2FdLGV9LHIudHJhY2VUZW1wbGF0ZXI9ZnVuY3Rpb24odCl7dmFyIGUscixhPXt9O2ZvcihlIGluIHQpcj10W2VdLEFycmF5LmlzQXJyYXkocikmJnIubGVuZ3RoJiYoYVtlXT0wKTtyZXR1cm57bmV3VHJhY2U6ZnVuY3Rpb24obyl7dmFyIHM9e3R5cGU6ZT1uLmNvZXJjZShvLHt9LGksXCJ0eXBlXCIpLF90ZW1wbGF0ZTpudWxsfTtpZihlIGluIGEpe3I9dFtlXTt2YXIgbD1hW2VdJXIubGVuZ3RoO2FbZV0rKyxzLl90ZW1wbGF0ZT1yW2xdfXJldHVybiBzfX19LHIubmV3Q29udGFpbmVyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10Ll90ZW1wbGF0ZSxhPWkmJihpW2VdfHxyJiZpW3JdKTtyZXR1cm4gbi5pc1BsYWluT2JqZWN0KGEpfHwoYT1udWxsKSx0W2VdPXtfdGVtcGxhdGU6YX19LHIuYXJyYXlUZW1wbGF0ZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuX3RlbXBsYXRlLGk9biYmbltsKGUpXSxvPW4mJm5bZV07QXJyYXkuaXNBcnJheShvKSYmby5sZW5ndGh8fChvPVtdKTt2YXIgYz17fTtyZXR1cm57bmV3SXRlbTpmdW5jdGlvbih0KXt2YXIgZT17bmFtZTp0Lm5hbWUsX2lucHV0OnR9LG49ZVthXT10W2FdO2lmKCFzKG4pKXJldHVybiBlLl90ZW1wbGF0ZT1pLGU7Zm9yKHZhciBsPTA7bDxvLmxlbmd0aDtsKyspe3ZhciB1PW9bbF07aWYodS5uYW1lPT09bilyZXR1cm4gY1tuXT0xLGUuX3RlbXBsYXRlPXUsZX1yZXR1cm4gZVtyXT10W3JdfHwhMSxlLl90ZW1wbGF0ZT0hMSxlfSxkZWZhdWx0SXRlbXM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8by5sZW5ndGg7ZSsrKXt2YXIgcj1vW2VdLG49ci5uYW1lO2lmKHMobikmJiFjW25dKXt2YXIgaT17X3RlbXBsYXRlOnIsbmFtZTpuLF9pbnB1dDp7X3RlbXBsYXRlaXRlbW5hbWU6bn19O2lbYV09clthXSx0LnB1c2goaSksY1tuXT0xfX1yZXR1cm4gdH19fSxyLmFycmF5RGVmYXVsdEtleT1sLHIuYXJyYXlFZGl0b3I9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPShuLm5lc3RlZFByb3BlcnR5KHQsZSkuZ2V0KCl8fFtdKS5sZW5ndGgsbz1yLl9pbmRleCxzPW8+PWkmJihyLl9pbnB1dHx8e30pLl90ZW1wbGF0ZWl0ZW1uYW1lO3MmJihvPWkpO3ZhciBsLGM9ZStcIltcIitvK1wiXVwiO2Z1bmN0aW9uIHUoKXtsPXt9LHMmJihsW2NdPXt9LGxbY11bYV09cyl9ZnVuY3Rpb24gaCh0LGUpe3M/bi5uZXN0ZWRQcm9wZXJ0eShsW2NdLHQpLnNldChlKTpsW2MrXCIuXCIrdF09ZX1mdW5jdGlvbiBmKCl7dmFyIHQ9bDtyZXR1cm4gdSgpLHR9cmV0dXJuIHUoKSx7bW9kaWZ5QmFzZTpmdW5jdGlvbih0LGUpe2xbdF09ZX0sbW9kaWZ5SXRlbTpoLGdldFVwZGF0ZU9iajpmLGFwcGx5VXBkYXRlOmZ1bmN0aW9uKGUscil7ZSYmaChlLHIpO3ZhciBpPWYoKTtmb3IodmFyIGEgaW4gaSluLm5lc3RlZFByb3BlcnR5KHQsYSkuc2V0KGlbYV0pfX19fSx7XCIuLi9saWJcIjo3MDEsXCIuLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2fV0sNzQwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uL3JlZ2lzdHJ5XCIpLGE9dChcIi4uL3Bsb3RzL3Bsb3RzXCIpLG89dChcIi4uL2xpYlwiKSxzPXQoXCIuLi9saWIvY2xlYXJfZ2xfY2FudmFzZXNcIiksbD10KFwiLi4vY29tcG9uZW50cy9jb2xvclwiKSxjPXQoXCIuLi9jb21wb25lbnRzL2RyYXdpbmdcIiksdT10KFwiLi4vY29tcG9uZW50cy90aXRsZXNcIiksaD10KFwiLi4vY29tcG9uZW50cy9tb2RlYmFyXCIpLGY9dChcIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLHA9dChcIi4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIiksZD10KFwiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzXCIpLGc9ZC5lbmZvcmNlLHY9ZC5jbGVhbixtPXQoXCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlXCIpLmRvQXV0b1JhbmdlLHk9XCJzdGFydFwiLHg9XCJtaWRkbGVcIixiPVwiZW5kXCI7ZnVuY3Rpb24gXyh0LGUscil7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl1bMF0sYT1yW25dWzFdO2lmKCEoaVswXT49dFsxXXx8aVsxXTw9dFswXSkmJihhWzBdPGVbMV0mJmFbMV0+ZVswXSkpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gdyh0KXt2YXIgZSxpLGEscyx1LGQsZz10Ll9mdWxsTGF5b3V0LHY9Zy5fc2l6ZSxtPXYucCx5PWYubGlzdCh0LFwiXCIsITApO2lmKGcuX3BhcGVyZGl2LnN0eWxlKHt3aWR0aDp0Ll9jb250ZXh0LnJlc3BvbnNpdmUmJmcuYXV0b3NpemUmJiF0Ll9jb250ZXh0Ll9oYXNaZXJvV2lkdGgmJiF0LmxheW91dC53aWR0aD9cIjEwMCVcIjpnLndpZHRoK1wicHhcIixoZWlnaHQ6dC5fY29udGV4dC5yZXNwb25zaXZlJiZnLmF1dG9zaXplJiYhdC5fY29udGV4dC5faGFzWmVyb0hlaWdodCYmIXQubGF5b3V0LmhlaWdodD9cIjEwMCVcIjpnLmhlaWdodCtcInB4XCJ9KS5zZWxlY3RBbGwoXCIubWFpbi1zdmdcIikuY2FsbChjLnNldFNpemUsZy53aWR0aCxnLmhlaWdodCksdC5fY29udGV4dC5zZXRCYWNrZ3JvdW5kKHQsZy5wYXBlcl9iZ2NvbG9yKSxyLmRyYXdNYWluVGl0bGUodCksaC5tYW5hZ2UodCksIWcuX2hhcyhcImNhcnRlc2lhblwiKSlyZXR1cm4gdC5fcHJvbWlzZXMubGVuZ3RoJiZQcm9taXNlLmFsbCh0Ll9wcm9taXNlcyk7ZnVuY3Rpb24geCh0LGUscil7dmFyIG49dC5fbHcvMjtyZXR1cm5cInhcIj09PXQuX2lkLmNoYXJBdCgwKT9lP1widG9wXCI9PT1yP2UuX29mZnNldC1tLW46ZS5fb2Zmc2V0K2UuX2xlbmd0aCttK246di50K3YuaCooMS0odC5wb3NpdGlvbnx8MCkpK24lMTplP1wicmlnaHRcIj09PXI/ZS5fb2Zmc2V0K2UuX2xlbmd0aCttK246ZS5fb2Zmc2V0LW0tbjp2Lmwrdi53Kih0LnBvc2l0aW9ufHwwKStuJTF9Zm9yKGU9MDtlPHkubGVuZ3RoO2UrKyl7dmFyIGI9KHM9eVtlXSkuX2FuY2hvckF4aXM7cy5fbGluZXBvc2l0aW9ucz17fSxzLl9sdz1jLmNyaXNwUm91bmQodCxzLmxpbmV3aWR0aCwxKSxzLl9tYWluTGluZVBvc2l0aW9uPXgocyxiLHMuc2lkZSkscy5fbWFpbk1pcnJvclBvc2l0aW9uPXMubWlycm9yJiZiP3gocyxiLHAuT1BQT1NJVEVfU0lERVtzLnNpZGVdKTpudWxsfXZhciB3PVtdLEE9W10sTT1bXSxTPTE9PT1sLm9wYWNpdHkoZy5wYXBlcl9iZ2NvbG9yKSYmMT09PWwub3BhY2l0eShnLnBsb3RfYmdjb2xvcikmJmcucGFwZXJfYmdjb2xvcj09PWcucGxvdF9iZ2NvbG9yO2ZvcihpIGluIGcuX3Bsb3RzKWlmKChhPWcuX3Bsb3RzW2ldKS5tYWlucGxvdClhLmJnJiZhLmJnLnJlbW92ZSgpLGEuYmc9dm9pZCAwO2Vsc2V7dmFyIEU9YS54YXhpcy5kb21haW4sQz1hLnlheGlzLmRvbWFpbixMPWEucGxvdGdyb3VwO2lmKF8oRSxDLE0pKXt2YXIgej1MLm5vZGUoKSxPPWEuYmc9by5lbnN1cmVTaW5nbGUoTCxcInJlY3RcIixcImJnXCIpO3ouaW5zZXJ0QmVmb3JlKE8ubm9kZSgpLHouY2hpbGROb2Rlc1swXSksQS5wdXNoKGkpfWVsc2UgTC5zZWxlY3QoXCJyZWN0LmJnXCIpLnJlbW92ZSgpLE0ucHVzaChbRSxDXSksU3x8KHcucHVzaChpKSxBLnB1c2goaSkpfXZhciBJLEQsUCxSLEYsQixOLGosVixVLHEsSCxHLFk9Zy5fYmdMYXllci5zZWxlY3RBbGwoXCIuYmdcIikuZGF0YSh3KTtmb3IoWS5lbnRlcigpLmFwcGVuZChcInJlY3RcIikuY2xhc3NlZChcImJnXCIsITApLFkuZXhpdCgpLnJlbW92ZSgpLFkuZWFjaChmdW5jdGlvbih0KXtnLl9wbG90c1t0XS5iZz1uLnNlbGVjdCh0aGlzKX0pLGU9MDtlPEEubGVuZ3RoO2UrKylhPWcuX3Bsb3RzW0FbZV1dLHU9YS54YXhpcyxkPWEueWF4aXMsYS5iZyYmYS5iZy5jYWxsKGMuc2V0UmVjdCx1Ll9vZmZzZXQtbSxkLl9vZmZzZXQtbSx1Ll9sZW5ndGgrMiptLGQuX2xlbmd0aCsyKm0pLmNhbGwobC5maWxsLGcucGxvdF9iZ2NvbG9yKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLDApO2lmKCFnLl9oYXNPbmx5TGFyZ2VTcGxvbXMpZm9yKGkgaW4gZy5fcGxvdHMpe2E9Zy5fcGxvdHNbaV0sdT1hLnhheGlzLGQ9YS55YXhpczt2YXIgVyxYLFo9YS5jbGlwSWQ9XCJjbGlwXCIrZy5fdWlkK2krXCJwbG90XCIsJD1vLmVuc3VyZVNpbmdsZUJ5SWQoZy5fY2xpcHMsXCJjbGlwUGF0aFwiLFosZnVuY3Rpb24odCl7dC5jbGFzc2VkKFwicGxvdGNsaXBcIiwhMCkuYXBwZW5kKFwicmVjdFwiKX0pO2EuY2xpcFJlY3Q9JC5zZWxlY3QoXCJyZWN0XCIpLmF0dHIoe3dpZHRoOnUuX2xlbmd0aCxoZWlnaHQ6ZC5fbGVuZ3RofSksYy5zZXRUcmFuc2xhdGUoYS5wbG90LHUuX29mZnNldCxkLl9vZmZzZXQpLGEuX2hhc0NsaXBPbkF4aXNGYWxzZT8oVz1udWxsLFg9Wik6KFc9WixYPW51bGwpLGMuc2V0Q2xpcFVybChhLnBsb3QsVyx0KSxhLmxheWVyQ2xpcElkPVh9ZnVuY3Rpb24gSih0KXtyZXR1cm5cIk1cIitJK1wiLFwiK3QrXCJIXCIrRH1mdW5jdGlvbiBLKHQpe3JldHVyblwiTVwiK3UuX29mZnNldCtcIixcIit0K1wiaFwiK3UuX2xlbmd0aH1mdW5jdGlvbiBRKHQpe3JldHVyblwiTVwiK3QrXCIsXCIraitcIlZcIitOfWZ1bmN0aW9uIHR0KHQpe3JldHVyblwiTVwiK3QrXCIsXCIrZC5fb2Zmc2V0K1widlwiK2QuX2xlbmd0aH1mdW5jdGlvbiBldCh0LGUscil7aWYoIXQuc2hvd2xpbmV8fGkhPT10Ll9tYWluU3VicGxvdClyZXR1cm5cIlwiO2lmKCF0Ll9hbmNob3JBeGlzKXJldHVybiByKHQuX21haW5MaW5lUG9zaXRpb24pO3ZhciBuPWUodC5fbWFpbkxpbmVQb3NpdGlvbik7cmV0dXJuIHQubWlycm9yJiYobis9ZSh0Ll9tYWluTWlycm9yUG9zaXRpb24pKSxufWZvcihpIGluIGcuX3Bsb3RzKXthPWcuX3Bsb3RzW2ldLHU9YS54YXhpcyxkPWEueWF4aXM7dmFyIHJ0PVwiTTAsMFwiO2sodSxpKSYmKEY9VCh1LFwibGVmdFwiLGQseSksST11Ll9vZmZzZXQtKEY/bStGOjApLEI9VCh1LFwicmlnaHRcIixkLHkpLEQ9dS5fb2Zmc2V0K3UuX2xlbmd0aCsoQj9tK0I6MCksUD14KHUsZCxcImJvdHRvbVwiKSxSPXgodSxkLFwidG9wXCIpLCEoRz0hdS5fYW5jaG9yQXhpc3x8aSE9PXUuX21haW5TdWJwbG90KXx8XCJhbGx0aWNrc1wiIT09dS5taXJyb3ImJlwiYWxsXCIhPT11Lm1pcnJvcnx8KHUuX2xpbmVwb3NpdGlvbnNbaV09W1AsUl0pLHJ0PWV0KHUsSixLKSxHJiZ1LnNob3dsaW5lJiYoXCJhbGxcIj09PXUubWlycm9yfHxcImFsbHRpY2tzXCI9PT11Lm1pcnJvcikmJihydCs9SihQKStKKFIpKSxhLnhsaW5lcy5zdHlsZShcInN0cm9rZS13aWR0aFwiLHUuX2x3K1wicHhcIikuY2FsbChsLnN0cm9rZSx1LnNob3dsaW5lP3UubGluZWNvbG9yOlwicmdiYSgwLDAsMCwwKVwiKSksYS54bGluZXMuYXR0cihcImRcIixydCk7dmFyIG50PVwiTTAsMFwiO2soZCxpKSYmKHE9VChkLFwiYm90dG9tXCIsdSx5KSxOPWQuX29mZnNldCtkLl9sZW5ndGgrKHE/bTowKSxIPVQoZCxcInRvcFwiLHUseSksaj1kLl9vZmZzZXQtKEg/bTowKSxWPXgoZCx1LFwibGVmdFwiKSxVPXgoZCx1LFwicmlnaHRcIiksIShHPSFkLl9hbmNob3JBeGlzfHxpIT09ZC5fbWFpblN1YnBsb3QpfHxcImFsbHRpY2tzXCIhPT1kLm1pcnJvciYmXCJhbGxcIiE9PWQubWlycm9yfHwoZC5fbGluZXBvc2l0aW9uc1tpXT1bVixVXSksbnQ9ZXQoZCxRLHR0KSxHJiZkLnNob3dsaW5lJiYoXCJhbGxcIj09PWQubWlycm9yfHxcImFsbHRpY2tzXCI9PT1kLm1pcnJvcikmJihudCs9UShWKStRKFUpKSxhLnlsaW5lcy5zdHlsZShcInN0cm9rZS13aWR0aFwiLGQuX2x3K1wicHhcIikuY2FsbChsLnN0cm9rZSxkLnNob3dsaW5lP2QubGluZWNvbG9yOlwicmdiYSgwLDAsMCwwKVwiKSksYS55bGluZXMuYXR0cihcImRcIixudCl9cmV0dXJuIGYubWFrZUNsaXBQYXRocyh0KSx0Ll9wcm9taXNlcy5sZW5ndGgmJlByb21pc2UuYWxsKHQuX3Byb21pc2VzKX1mdW5jdGlvbiBrKHQsZSl7cmV0dXJuKHQudGlja3N8fHQuc2hvd2xpbmUpJiYoZT09PXQuX21haW5TdWJwbG90fHxcImFsbFwiPT09dC5taXJyb3J8fFwiYWxsdGlja3NcIj09PXQubWlycm9yKX1mdW5jdGlvbiBBKHQsZSxyKXtpZighci5zaG93bGluZXx8IXIuX2x3KXJldHVybiExO2lmKFwiYWxsXCI9PT1yLm1pcnJvcnx8XCJhbGx0aWNrc1wiPT09ci5taXJyb3IpcmV0dXJuITA7dmFyIG49ci5fYW5jaG9yQXhpcztpZighbilyZXR1cm4hMTt2YXIgaT1wLkZST01fQkxbZV07cmV0dXJuIHIuc2lkZT09PWU/bi5kb21haW5baV09PT10LmRvbWFpbltpXTpyLm1pcnJvciYmbi5kb21haW5bMS1pXT09PXQuZG9tYWluWzEtaV19ZnVuY3Rpb24gVCh0LGUscixuKXtpZihBKHQsZSxyKSlyZXR1cm4gci5fbHc7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPW5baV07aWYoYS5fbWFpbkF4aXM9PT1yLl9tYWluQXhpcyYmQSh0LGUsYSkpcmV0dXJuIGEuX2x3fXJldHVybiAwfXIubGF5b3V0U3R5bGVzPWZ1bmN0aW9uKHQpe3JldHVybiBvLnN5bmNPckFzeW5jKFthLmRvQXV0b01hcmdpbix3XSx0KX0sci5kcmF3TWFpblRpdGxlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1mdW5jdGlvbih0KXt2YXIgZT10LnRpdGxlLHI9eDtvLmlzUmlnaHRBbmNob3IoZSk/cj1iOm8uaXNMZWZ0QW5jaG9yKGUpJiYocj15KTtyZXR1cm4gcn0oZSksbj1mdW5jdGlvbih0KXt2YXIgZT10LnRpdGxlLHI9XCIwZW1cIjtvLmlzVG9wQW5jaG9yKGUpP3I9cC5DQVBfU0hJRlQrXCJlbVwiOm8uaXNNaWRkbGVBbmNob3IoZSkmJihyPXAuTUlEX1NISUZUK1wiZW1cIik7cmV0dXJuIHJ9KGUpO3UuZHJhdyh0LFwiZ3RpdGxlXCIse3Byb3BDb250YWluZXI6ZSxwcm9wTmFtZTpcInRpdGxlLnRleHRcIixwbGFjZWhvbGRlcjplLl9kZmx0VGl0bGUucGxvdCxhdHRyaWJ1dGVzOnt4OmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC50aXRsZSxuPXQuX3NpemUsaT0wO2U9PT15P2k9ci5wYWQubDplPT09YiYmKGk9LXIucGFkLnIpO3N3aXRjaChyLnhyZWYpe2Nhc2VcInBhcGVyXCI6cmV0dXJuIG4ubCtuLncqci54K2k7Y2FzZVwiY29udGFpbmVyXCI6ZGVmYXVsdDpyZXR1cm4gdC53aWR0aCpyLngraX19KGUscikseTpmdW5jdGlvbih0LGUpe3ZhciByPXQudGl0bGUsbj10Ll9zaXplLGk9MDtcIjBlbVwiIT09ZSYmZT9lPT09cC5DQVBfU0hJRlQrXCJlbVwiJiYoaT1yLnBhZC50KTppPS1yLnBhZC5iO2lmKFwiYXV0b1wiPT09ci55KXJldHVybiBuLnQvMjtzd2l0Y2goci55cmVmKXtjYXNlXCJwYXBlclwiOnJldHVybiBuLnQrbi5oLW4uaCpyLnkraTtjYXNlXCJjb250YWluZXJcIjpkZWZhdWx0OnJldHVybiB0LmhlaWdodC10LmhlaWdodCpyLnkraX19KGUsbiksXCJ0ZXh0LWFuY2hvclwiOnIsZHk6bn19KX0sci5kb1RyYWNlU3R5bGU9ZnVuY3Rpb24odCl7dmFyIGUsbj10LmNhbGNkYXRhLG89W107Zm9yKGU9MDtlPG4ubGVuZ3RoO2UrKyl7dmFyIGw9bltlXSxjPWxbMF18fHt9LHU9Yy50cmFjZXx8e30saD11Ll9tb2R1bGV8fHt9LGY9aC5hcnJheXNUb0NhbGNkYXRhO2YmJmYobCx1KTt2YXIgcD1oLmVkaXRTdHlsZTtwJiZvLnB1c2goe2ZuOnAsY2QwOmN9KX1pZihvLmxlbmd0aCl7Zm9yKGU9MDtlPG8ubGVuZ3RoO2UrKyl7dmFyIGQ9b1tlXTtkLmZuKHQsZC5jZDApfXModCksci5yZWRyYXdSZWdsVHJhY2VzKHQpfXJldHVybiBhLnN0eWxlKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKFwibGVnZW5kXCIsXCJkcmF3XCIpKHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5kb0NvbG9yQmFycz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQuY2FsY2RhdGEubGVuZ3RoO2UrKyl7dmFyIHI9dC5jYWxjZGF0YVtlXVswXTtpZigoci50fHx7fSkuY2Ipe3ZhciBuPXIudHJhY2Usbz1yLnQuY2I7aS50cmFjZUlzKG4sXCJjb250b3VyXCIpJiZvLmxpbmUoe3dpZHRoOiExIT09bi5jb250b3Vycy5zaG93bGluZXM/bi5saW5lLndpZHRoOjAsZGFzaDpuLmxpbmUuZGFzaCxjb2xvcjpcImxpbmVcIj09PW4uY29udG91cnMuY29sb3Jpbmc/by5fb3B0cy5saW5lLmNvbG9yOm4ubGluZS5jb2xvcn0pO3ZhciBzPW4uX21vZHVsZS5jb2xvcmJhci5jb250YWluZXIsbD0ocz9uW3NdOm4pLmNvbG9yYmFyO28ub3B0aW9ucyhsKSgpfX1yZXR1cm4gYS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmxheW91dFJlcGxvdD1mdW5jdGlvbih0KXt2YXIgZT10LmxheW91dDtyZXR1cm4gdC5sYXlvdXQ9dm9pZCAwLGkuY2FsbChcInBsb3RcIix0LFwiXCIsZSl9LHIuZG9MZWdlbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGkuZ2V0Q29tcG9uZW50TWV0aG9kKFwibGVnZW5kXCIsXCJkcmF3XCIpKHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5kb1RpY2tzUmVsYXlvdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGYuZHJhdyh0LFwicmVkcmF3XCIpLHQuX2Z1bGxMYXlvdXQuX2hhc09ubHlMYXJnZVNwbG9tcyYmKGkuc3VicGxvdHNSZWdpc3RyeS5zcGxvbS51cGRhdGVHcmlkKHQpLHModCksci5yZWRyYXdSZWdsVHJhY2VzKHQpKSxyLmRyYXdNYWluVGl0bGUodCksYS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmRvTW9kZUJhcj1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2gubWFuYWdlKHQpO2Zvcih2YXIgcj0wO3I8ZS5fYmFzZVBsb3RNb2R1bGVzLmxlbmd0aDtyKyspe3ZhciBuPWUuX2Jhc2VQbG90TW9kdWxlc1tyXS51cGRhdGVGeDtuJiZuKHQpfXJldHVybiBhLnByZXZpb3VzUHJvbWlzZXModCl9LHIuZG9DYW1lcmE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDNkLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9ZVtyW25dXSxhPWkuX3NjZW5lLG89aS5jYW1lcmE7YS5zZXRDYW1lcmEobyl9fSxyLmRyYXdEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlLG49dC5fZnVsbExheW91dCxvPXQuY2FsY2RhdGE7Zm9yKGU9MDtlPG8ubGVuZ3RoO2UrKyl7dmFyIGw9b1tlXVswXS50cmFjZTshMD09PWwudmlzaWJsZSYmbC5fbW9kdWxlLmNvbG9yYmFyfHxuLl9pbmZvbGF5ZXIuc2VsZWN0KFwiLmNiXCIrbC51aWQpLnJlbW92ZSgpfXModCk7dmFyIGM9bi5fYmFzZVBsb3RNb2R1bGVzO2ZvcihlPTA7ZTxjLmxlbmd0aDtlKyspY1tlXS5wbG90KHQpO3JldHVybiByLnJlZHJhd1JlZ2xUcmFjZXModCksYS5zdHlsZSh0KSxpLmdldENvbXBvbmVudE1ldGhvZChcInNoYXBlc1wiLFwiZHJhd1wiKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZChcImFubm90YXRpb25zXCIsXCJkcmF3XCIpKHQpLG4uX3JlcGxvdHRpbmc9ITEsYS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLnJlZHJhd1JlZ2xUcmFjZXM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtpZihlLl9oYXMoXCJyZWdsXCIpKXt2YXIgcixuLGk9dC5fZnVsbERhdGEsYT1bXSxzPVtdO2ZvcihlLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJmUuX3NwbG9tR3JpZC5kcmF3KCkscj0wO3I8aS5sZW5ndGg7cisrKXt2YXIgbD1pW3JdOyEwPT09bC52aXNpYmxlJiYoXCJzcGxvbVwiPT09bC50eXBlP2UuX3NwbG9tU2NlbmVzW2wudWlkXS5kcmF3KCk6XCJzY2F0dGVyZ2xcIj09PWwudHlwZT9vLnB1c2hVbmlxdWUoYSxsLnhheGlzK2wueWF4aXMpOlwic2NhdHRlcnBvbGFyZ2xcIj09PWwudHlwZSYmby5wdXNoVW5pcXVlKHMsbC5zdWJwbG90KSl9Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKykobj1lLl9wbG90c1thW3JdXSkuX3NjZW5lJiZuLl9zY2VuZS5kcmF3KCk7Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKykobj1lW3Nbcl1dLl9zdWJwbG90KS5fc2NlbmUmJm4uX3NjZW5lLmRyYXcoKX19LHIuZG9BdXRvUmFuZ2VBbmRDb25zdHJhaW50cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscj10Ll9mdWxsTGF5b3V0LG49Zi5saXN0KHQsXCJcIiwhMCksaT1yLl9heGlzTWF0Y2hHcm91cHN8fFtdLGE9MDthPG4ubGVuZ3RoO2ErKyllPW5bYV0sdih0LGUpLG0odCxlKTtnKHQpO3Q6Zm9yKHZhciBvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBzLGw9aVtvXSxjPW51bGw7Zm9yKHMgaW4gbCl7aWYoITE9PT0oZT1mLmdldEZyb21JZCh0LHMpKS5hdXRvcmFuZ2UpY29udGludWUgdDtjP2NbMF08Y1sxXT8oY1swXT1NYXRoLm1pbihjWzBdLGUucmFuZ2VbMF0pLGNbMV09TWF0aC5tYXgoY1sxXSxlLnJhbmdlWzFdKSk6KGNbMF09TWF0aC5tYXgoY1swXSxlLnJhbmdlWzBdKSxjWzFdPU1hdGgubWluKGNbMV0sZS5yYW5nZVsxXSkpOmM9ZS5yYW5nZX1mb3IocyBpbiBsKShlPWYuZ2V0RnJvbUlkKHQscykpLnJhbmdlPWMuc2xpY2UoKSxlLl9pbnB1dC5yYW5nZT1jLnNsaWNlKCksZS5zZXRTY2FsZSgpfX0sci5maW5hbERyYXc9ZnVuY3Rpb24odCl7aS5nZXRDb21wb25lbnRNZXRob2QoXCJzaGFwZXNcIixcImRyYXdcIikodCksaS5nZXRDb21wb25lbnRNZXRob2QoXCJpbWFnZXNcIixcImRyYXdcIikodCksaS5nZXRDb21wb25lbnRNZXRob2QoXCJhbm5vdGF0aW9uc1wiLFwiZHJhd1wiKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZChcInJhbmdlc2xpZGVyXCIsXCJkcmF3XCIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKFwicmFuZ2VzZWxlY3RvclwiLFwiZHJhd1wiKSh0KX0sci5kcmF3TWFyZ2luUHVzaGVycz1mdW5jdGlvbih0KXtpLmdldENvbXBvbmVudE1ldGhvZChcImxlZ2VuZFwiLFwiZHJhd1wiKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZChcInJhbmdlc2VsZWN0b3JcIixcImRyYXdcIikodCksaS5nZXRDb21wb25lbnRNZXRob2QoXCJzbGlkZXJzXCIsXCJkcmF3XCIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKFwidXBkYXRlbWVudXNcIixcImRyYXdcIikodCl9fSx7XCIuLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vY29tcG9uZW50cy9tb2RlYmFyXCI6NjM3LFwiLi4vY29tcG9uZW50cy90aXRsZXNcIjo2NjYsXCIuLi9jb25zdGFudHMvYWxpZ25tZW50XCI6NjczLFwiLi4vbGliXCI6NzAxLFwiLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzXCI6Njg2LFwiLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZVwiOjc0OCxcIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzXCI6NzU2LFwiLi4vcGxvdHMvcGxvdHNcIjo4MTAsXCIuLi9yZWdpc3RyeVwiOjgyOSxkMzoxNTV9XSw3NDE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vbGliXCIpLGk9bi5pc1BsYWluT2JqZWN0LGE9dChcIi4vcGxvdF9zY2hlbWFcIiksbz10KFwiLi4vcGxvdHMvcGxvdHNcIikscz10KFwiLi4vcGxvdHMvYXR0cmlidXRlc1wiKSxsPXQoXCIuL3Bsb3RfdGVtcGxhdGVcIiksYz10KFwiLi9wbG90X2NvbmZpZ1wiKS5kZmx0Q29uZmlnO2Z1bmN0aW9uIHUodCxlKXt0PW4uZXh0ZW5kRGVlcCh7fSx0KTt2YXIgcixhLG89T2JqZWN0LmtleXModCkuc29ydCgpO2Z1bmN0aW9uIHMoZSxyLG4pe2lmKGkocikmJmkoZSkpdShlLHIpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShyKSYmQXJyYXkuaXNBcnJheShlKSl7dmFyIG89bC5hcnJheVRlbXBsYXRlcih7X3RlbXBsYXRlOnR9LG4pO2ZvcihhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV0sYz1vLm5ld0l0ZW0ocykuX3RlbXBsYXRlO2MmJnUoYyxzKX12YXIgaD1vLmRlZmF1bHRJdGVtcygpO2ZvcihhPTA7YTxoLmxlbmd0aDthKyspci5wdXNoKGhbYV0uX3RlbXBsYXRlKTtmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKWRlbGV0ZSByW2FdLnRlbXBsYXRlaXRlbW5hbWV9fWZvcihyPTA7cjxvLmxlbmd0aDtyKyspe3ZhciBjPW9bcl0sZj10W2NdO2lmKGMgaW4gZT9zKGYsZVtjXSxjKTplW2NdPWYsaChjKT09PWMpZm9yKHZhciBwIGluIGUpe3ZhciBkPWgocCk7cD09PWR8fGQhPT1jfHxwIGluIHR8fHMoZixlW3BdLGMpfX19ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdC5yZXBsYWNlKC9bMC05XSskLyxcIlwiKX1mdW5jdGlvbiBmKHQsZSxyLGEsbyl7dmFyIHM9byYmcihvKTtmb3IodmFyIGMgaW4gdCl7dmFyIHU9dFtjXSxkPXAodCxjLGEpLGc9cCh0LGMsbyksdj1yKGcpO2lmKCF2KXt2YXIgbT1oKGMpO20hPT1jJiYodj1yKGc9cCh0LG0sbykpKX1pZigoIXN8fHMhPT12KSYmISghdnx8di5fbm9UZW1wbGF0aW5nfHxcImRhdGFfYXJyYXlcIj09PXYudmFsVHlwZXx8di5hcnJheU9rJiZBcnJheS5pc0FycmF5KHUpKSlpZighdi52YWxUeXBlJiZpKHUpKWYodSxlLHIsZCxnKTtlbHNlIGlmKHYuX2lzTGlua2VkVG9BcnJheSYmQXJyYXkuaXNBcnJheSh1KSlmb3IodmFyIHk9ITEseD0wLGI9e30sXz0wO188dS5sZW5ndGg7XysrKXt2YXIgdz11W19dO2lmKGkodykpe3ZhciBrPXcubmFtZTtpZihrKWJba118fChmKHcsZSxyLHAodSx4LGQpLHAodSx4LGcpKSx4KyssYltrXT0xKTtlbHNlIGlmKCF5KXt2YXIgQT1wKHQsbC5hcnJheURlZmF1bHRLZXkoYyksYSksVD1wKHUseCxkKTtmKHcsZSxyLFQscCh1LHgsZykpO3ZhciBNPW4ubmVzdGVkUHJvcGVydHkoZSxUKTtuLm5lc3RlZFByb3BlcnR5KGUsQSkuc2V0KE0uZ2V0KCkpLE0uc2V0KG51bGwpLHk9ITB9fX1lbHNle24ubmVzdGVkUHJvcGVydHkoZSxkKS5zZXQodSl9fX1mdW5jdGlvbiBwKHQsZSxyKXtyZXR1cm4gcj9BcnJheS5pc0FycmF5KHQpP3IrXCJbXCIrZStcIl1cIjpyK1wiLlwiK2U6ZX1mdW5jdGlvbiBkKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKGkodFtlXSkpcmV0dXJuITB9ZnVuY3Rpb24gZyh0KXt2YXIgZTtzd2l0Y2godC5jb2RlKXtjYXNlXCJkYXRhXCI6ZT1cIlRoZSB0ZW1wbGF0ZSBoYXMgbm8ga2V5IGRhdGEuXCI7YnJlYWs7Y2FzZVwibGF5b3V0XCI6ZT1cIlRoZSB0ZW1wbGF0ZSBoYXMgbm8ga2V5IGxheW91dC5cIjticmVhaztjYXNlXCJtaXNzaW5nXCI6ZT10LnBhdGg/XCJUaGVyZSBhcmUgbm8gdGVtcGxhdGVzIGZvciBpdGVtIFwiK3QucGF0aCtcIiB3aXRoIG5hbWUgXCIrdC50ZW1wbGF0ZWl0ZW1uYW1lOlwiVGhlcmUgYXJlIG5vIHRlbXBsYXRlcyBmb3IgdHJhY2UgXCIrdC5pbmRleCtcIiwgb2YgdHlwZSBcIit0LnRyYWNlVHlwZStcIi5cIjticmVhaztjYXNlXCJ1bnVzZWRcIjplPXQucGF0aD9cIlRoZSB0ZW1wbGF0ZSBpdGVtIGF0IFwiK3QucGF0aCtcIiB3YXMgbm90IHVzZWQgaW4gY29uc3RydWN0aW5nIHRoZSBwbG90LlwiOnQuZGF0YUNvdW50P1wiU29tZSBvZiB0aGUgdGVtcGxhdGVzIG9mIHR5cGUgXCIrdC50cmFjZVR5cGUrXCIgd2VyZSBub3QgdXNlZC4gVGhlIHRlbXBsYXRlIGhhcyBcIit0LnRlbXBsYXRlQ291bnQrXCIgdHJhY2VzLCB0aGUgZGF0YSBvbmx5IGhhcyBcIit0LmRhdGFDb3VudCtcIiBvZiB0aGlzIHR5cGUuXCI6XCJUaGUgdGVtcGxhdGUgaGFzIFwiK3QudGVtcGxhdGVDb3VudCtcIiB0cmFjZXMgb2YgdHlwZSBcIit0LnRyYWNlVHlwZStcIiBidXQgdGhlcmUgYXJlIG5vbmUgaW4gdGhlIGRhdGEuXCI7YnJlYWs7Y2FzZVwicmV1c2VkXCI6ZT1cIlNvbWUgb2YgdGhlIHRlbXBsYXRlcyBvZiB0eXBlIFwiK3QudHJhY2VUeXBlK1wiIHdlcmUgdXNlZCBtb3JlIHRoYW4gb25jZS4gVGhlIHRlbXBsYXRlIGhhcyBcIit0LnRlbXBsYXRlQ291bnQrXCIgdHJhY2VzLCB0aGUgZGF0YSBoYXMgXCIrdC5kYXRhQ291bnQrXCIgb2YgdGhpcyB0eXBlLlwifXJldHVybiB0Lm1zZz1lLHR9ci5tYWtlVGVtcGxhdGU9ZnVuY3Rpb24odCl7dD1uLmlzUGxhaW5PYmplY3QodCk/dDpuLmdldEdyYXBoRGl2KHQpLHQ9bi5leHRlbmREZWVwKHtfY29udGV4dDpjfSx7ZGF0YTp0LmRhdGEsbGF5b3V0OnQubGF5b3V0fSksby5zdXBwbHlEZWZhdWx0cyh0KTt2YXIgZT10LmRhdGF8fFtdLHI9dC5sYXlvdXR8fHt9O3IuX2Jhc2VQbG90TW9kdWxlcz10Ll9mdWxsTGF5b3V0Ll9iYXNlUGxvdE1vZHVsZXMsci5fbW9kdWxlcz10Ll9mdWxsTGF5b3V0Ll9tb2R1bGVzO3ZhciBsPXtkYXRhOnt9LGxheW91dDp7fX07ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXt9O2YodCxlLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEuZ2V0VHJhY2VWYWxPYmplY3QodCxuLm5lc3RlZFByb3BlcnR5KHt9LGUpLnBhcnRzKX0uYmluZChudWxsLHQpKTt2YXIgcj1uLmNvZXJjZSh0LHt9LHMsXCJ0eXBlXCIpLGk9bC5kYXRhW3JdO2l8fChpPWwuZGF0YVtyXT1bXSksaS5wdXNoKGUpfSksZihyLGwubGF5b3V0LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEuZ2V0TGF5b3V0VmFsT2JqZWN0KHQsbi5uZXN0ZWRQcm9wZXJ0eSh7fSxlKS5wYXJ0cyl9LmJpbmQobnVsbCxyKSksZGVsZXRlIGwubGF5b3V0LnRlbXBsYXRlO3ZhciBoPXIudGVtcGxhdGU7aWYoaShoKSl7dmFyIHAsZCxnLHYsbSx5LHg9aC5sYXlvdXQ7aSh4KSYmdSh4LGwubGF5b3V0KTt2YXIgYj1oLmRhdGE7aWYoaShiKSl7Zm9yKGQgaW4gbC5kYXRhKWlmKGc9YltkXSxBcnJheS5pc0FycmF5KGcpKXtmb3IoeT0obT1sLmRhdGFbZF0pLmxlbmd0aCx2PWcubGVuZ3RoLHA9MDtwPHk7cCsrKXUoZ1twJXZdLG1bcF0pO2ZvcihwPXk7cDx2O3ArKyltLnB1c2gobi5leHRlbmREZWVwKHt9LGdbcF0pKX1mb3IoZCBpbiBiKWQgaW4gbC5kYXRhfHwobC5kYXRhW2RdPW4uZXh0ZW5kRGVlcChbXSxiW2RdKSl9fXJldHVybiBsfSxyLnZhbGlkYXRlVGVtcGxhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1uLmV4dGVuZERlZXAoe30se19jb250ZXh0OmMsZGF0YTp0LmRhdGEsbGF5b3V0OnQubGF5b3V0fSksYT1yLmxheW91dHx8e307aShlKXx8KGU9YS50ZW1wbGF0ZXx8e30pO3ZhciBzPWUubGF5b3V0LGw9ZS5kYXRhLHU9W107ci5sYXlvdXQ9YSxyLmxheW91dC50ZW1wbGF0ZT1lLG8uc3VwcGx5RGVmYXVsdHMocik7dmFyIGY9ci5fZnVsbExheW91dCx2PXIuX2Z1bGxEYXRhLG09e307aWYoaShzKT8oIWZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIG4gaW4gZSlpZihcIl9cIiE9PW4uY2hhckF0KDApJiZpKGVbbl0pKXt2YXIgYSxvPWgobikscz1bXTtmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKXMucHVzaChwKGUsbixyW2FdKSksbyE9PW4mJnMucHVzaChwKGUsbyxyW2FdKSk7Zm9yKGE9MDthPHMubGVuZ3RoO2ErKyltW3NbYV1dPTE7dChlW25dLHMpfX0oZixbXCJsYXlvdXRcIl0pLGZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIG4gaW4gZSlpZigtMT09PW4uaW5kZXhPZihcImRlZmF1bHRzXCIpJiZpKGVbbl0pKXt2YXIgYT1wKGUsbixyKTttW2FdP3QoZVtuXSxhKTp1LnB1c2goe2NvZGU6XCJ1bnVzZWRcIixwYXRoOmF9KX19KHMsXCJsYXlvdXRcIikpOnUucHVzaCh7Y29kZTpcImxheW91dFwifSksaShsKSl7Zm9yKHZhciB5LHg9e30sYj0wO2I8di5sZW5ndGg7YisrKXt2YXIgXz12W2JdO3hbeT1fLnR5cGVdPSh4W3ldfHwwKSsxLF8uX2Z1bGxJbnB1dC5fdGVtcGxhdGV8fHUucHVzaCh7Y29kZTpcIm1pc3NpbmdcIixpbmRleDpfLl9mdWxsSW5wdXQuaW5kZXgsdHJhY2VUeXBlOnl9KX1mb3IoeSBpbiBsKXt2YXIgdz1sW3ldLmxlbmd0aCxrPXhbeV18fDA7dz5rP3UucHVzaCh7Y29kZTpcInVudXNlZFwiLHRyYWNlVHlwZTp5LHRlbXBsYXRlQ291bnQ6dyxkYXRhQ291bnQ6a30pOms+dyYmdS5wdXNoKHtjb2RlOlwicmV1c2VkXCIsdHJhY2VUeXBlOnksdGVtcGxhdGVDb3VudDp3LGRhdGFDb3VudDprfSl9fWVsc2UgdS5wdXNoKHtjb2RlOlwiZGF0YVwifSk7aWYoZnVuY3Rpb24gdChlLHIpe2Zvcih2YXIgbiBpbiBlKWlmKFwiX1wiIT09bi5jaGFyQXQoMCkpe3ZhciBhPWVbbl0sbz1wKGUsbixyKTtpKGEpPyhBcnJheS5pc0FycmF5KGUpJiYhMT09PWEuX3RlbXBsYXRlJiZhLnRlbXBsYXRlaXRlbW5hbWUmJnUucHVzaCh7Y29kZTpcIm1pc3NpbmdcIixwYXRoOm8sdGVtcGxhdGVpdGVtbmFtZTphLnRlbXBsYXRlaXRlbW5hbWV9KSx0KGEsbykpOkFycmF5LmlzQXJyYXkoYSkmJmQoYSkmJnQoYSxvKX19KHtkYXRhOnYsbGF5b3V0OmZ9LFwiXCIpLHUubGVuZ3RoKXJldHVybiB1Lm1hcChnKX19LHtcIi4uL2xpYlwiOjcwMSxcIi4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDYsXCIuLi9wbG90cy9wbG90c1wiOjgxMCxcIi4vcGxvdF9jb25maWdcIjo3MzcsXCIuL3Bsb3Rfc2NoZW1hXCI6NzM4LFwiLi9wbG90X3RlbXBsYXRlXCI6NzM5fV0sNzQyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4vcGxvdF9hcGlcIiksYT10KFwiLi4vbGliXCIpLG89dChcIi4uL3NuYXBzaG90L2hlbHBlcnNcIikscz10KFwiLi4vc25hcHNob3QvdG9zdmdcIiksbD10KFwiLi4vc25hcHNob3Qvc3ZndG9pbWdcIiksYz17Zm9ybWF0Ont2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJwbmdcIixcImpwZWdcIixcIndlYnBcIixcInN2Z1wiXSxkZmx0OlwicG5nXCJ9LHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjF9LGhlaWdodDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjoxfSxzY2FsZTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MX0sc2V0QmFja2dyb3VuZDp7dmFsVHlwZTpcImFueVwiLGRmbHQ6ITF9LGltYWdlRGF0YU9ubHk6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX19LHU9L15kYXRhOmltYWdlXFwvXFx3KztiYXNlNjQsLztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixoLGYscDtmdW5jdGlvbiBkKHQpe3JldHVybiEodCBpbiBlKXx8YS52YWxpZGF0ZShlW3RdLGNbdF0pfWlmKGU9ZXx8e30sYS5pc1BsYWluT2JqZWN0KHQpPyhyPXQuZGF0YXx8W10saD10LmxheW91dHx8e30sZj10LmNvbmZpZ3x8e30scD17fSk6KHQ9YS5nZXRHcmFwaERpdih0KSxyPWEuZXh0ZW5kRGVlcChbXSx0LmRhdGEpLGg9YS5leHRlbmREZWVwKHt9LHQubGF5b3V0KSxmPXQuX2NvbnRleHQscD10Ll9mdWxsTGF5b3V0fHx7fSksIWQoXCJ3aWR0aFwiKSYmbnVsbCE9PWUud2lkdGh8fCFkKFwiaGVpZ2h0XCIpJiZudWxsIT09ZS5oZWlnaHQpdGhyb3cgbmV3IEVycm9yKFwiSGVpZ2h0IGFuZCB3aWR0aCBzaG91bGQgYmUgcGl4ZWwgdmFsdWVzLlwiKTtpZighZChcImZvcm1hdFwiKSl0aHJvdyBuZXcgRXJyb3IoXCJJbWFnZSBmb3JtYXQgaXMgbm90IGpwZWcsIHBuZywgc3ZnIG9yIHdlYnAuXCIpO3ZhciBnPXt9O2Z1bmN0aW9uIHYodCxyKXtyZXR1cm4gYS5jb2VyY2UoZSxnLGMsdCxyKX12YXIgbT12KFwiZm9ybWF0XCIpLHk9dihcIndpZHRoXCIpLHg9dihcImhlaWdodFwiKSxiPXYoXCJzY2FsZVwiKSxfPXYoXCJzZXRCYWNrZ3JvdW5kXCIpLHc9dihcImltYWdlRGF0YU9ubHlcIiksaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO2suc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwiLGsuc3R5bGUubGVmdD1cIi01MDAwcHhcIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGspO3ZhciBBPWEuZXh0ZW5kRmxhdCh7fSxoKTt5P0Eud2lkdGg9eTpudWxsPT09ZS53aWR0aCYmbihwLndpZHRoKSYmKEEud2lkdGg9cC53aWR0aCkseD9BLmhlaWdodD14Om51bGw9PT1lLmhlaWdodCYmbihwLmhlaWdodCkmJihBLmhlaWdodD1wLmhlaWdodCk7dmFyIFQ9YS5leHRlbmRGbGF0KHt9LGYse19leHBvcnRlZFBsb3Q6ITAsc3RhdGljUGxvdDohMCxzZXRCYWNrZ3JvdW5kOl99KSxNPW8uZ2V0UmVkcmF3RnVuYyhrKTtmdW5jdGlvbiBTKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCxvLmdldERlbGF5KGsuX2Z1bGxMYXlvdXQpKX0pfWZ1bmN0aW9uIEUoKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCxlKXt2YXIgcj1zKGssbSxiKSxuPWsuX2Z1bGxMYXlvdXQud2lkdGgsbz1rLl9mdWxsTGF5b3V0LmhlaWdodDtpZihpLnB1cmdlKGspLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoayksXCJzdmdcIj09PW0pcmV0dXJuIHQodz9yOlwiZGF0YTppbWFnZS9zdmcreG1sLFwiK2VuY29kZVVSSUNvbXBvbmVudChyKSk7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtjLmlkPWEucmFuZHN0cigpLGwoe2Zvcm1hdDptLHdpZHRoOm4saGVpZ2h0Om8sc2NhbGU6YixjYW52YXM6Yyxzdmc6cixwcm9taXNlOiEwfSkudGhlbih0KS5jYXRjaChlKX0pfXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LGUpe2kucGxvdChrLHIsQSxUKS50aGVuKE0pLnRoZW4oUykudGhlbihFKS50aGVuKGZ1bmN0aW9uKGUpe3QoZnVuY3Rpb24odCl7cmV0dXJuIHc/dC5yZXBsYWNlKHUsXCJcIik6dH0oZSkpfSkuY2F0Y2goZnVuY3Rpb24odCl7ZSh0KX0pfSl9fSx7XCIuLi9saWJcIjo3MDEsXCIuLi9zbmFwc2hvdC9oZWxwZXJzXCI6ODMzLFwiLi4vc25hcHNob3Qvc3ZndG9pbWdcIjo4MzUsXCIuLi9zbmFwc2hvdC90b3N2Z1wiOjgzNyxcIi4vcGxvdF9hcGlcIjo3MzYsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDc0MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9saWJcIiksaT10KFwiLi4vcGxvdHMvcGxvdHNcIiksYT10KFwiLi9wbG90X3NjaGVtYVwiKSxvPXQoXCIuL3Bsb3RfY29uZmlnXCIpLmRmbHRDb25maWcscz1uLmlzUGxhaW5PYmplY3QsbD1BcnJheS5pc0FycmF5LGM9bi5pc0FycmF5T3JUeXBlZEFycmF5O2Z1bmN0aW9uIHUodCxlLHIsaSxhLG8pe289b3x8W107Zm9yKHZhciBoPU9iamVjdC5rZXlzKHQpLGY9MDtmPGgubGVuZ3RoO2YrKyl7dmFyIHY9aFtmXTtpZihcInRyYW5zZm9ybXNcIiE9PXYpe3ZhciBtPW8uc2xpY2UoKTttLnB1c2godik7dmFyIHk9dFt2XSx4PWVbdl0sYj1nKHIsdiksXz1cImluZm9fYXJyYXlcIj09PShifHx7fSkudmFsVHlwZSx3PVwiY29sb3JzY2FsZVwiPT09KGJ8fHt9KS52YWxUeXBlLGs9KGJ8fHt9KS5pdGVtcztpZihkKHIsdikpaWYocyh5KSYmcyh4KSl1KHkseCxiLGksYSxtKTtlbHNlIGlmKF8mJmwoeSkpe3kubGVuZ3RoPngubGVuZ3RoJiZpLnB1c2gocChcInVudXNlZFwiLGEsbS5jb25jYXQoeC5sZW5ndGgpKSk7dmFyIEEsVCxNLFMsRSxDPXgubGVuZ3RoLEw9QXJyYXkuaXNBcnJheShrKTtpZihMJiYoQz1NYXRoLm1pbihDLGsubGVuZ3RoKSksMj09PWIuZGltZW5zaW9ucylmb3IoVD0wO1Q8QztUKyspaWYobCh5W1RdKSl7eVtUXS5sZW5ndGg+eFtUXS5sZW5ndGgmJmkucHVzaChwKFwidW51c2VkXCIsYSxtLmNvbmNhdChULHhbVF0ubGVuZ3RoKSkpO3ZhciB6PXhbVF0ubGVuZ3RoO2ZvcihBPTA7QTwoTD9NYXRoLm1pbih6LGtbVF0ubGVuZ3RoKTp6KTtBKyspTT1MP2tbVF1bQV06ayxTPXlbVF1bQV0sRT14W1RdW0FdLG4udmFsaWRhdGUoUyxNKT9FIT09UyYmRSE9PStTJiZpLnB1c2gocChcImR5bmFtaWNcIixhLG0uY29uY2F0KFQsQSksUyxFKSk6aS5wdXNoKHAoXCJ2YWx1ZVwiLGEsbS5jb25jYXQoVCxBKSxTKSl9ZWxzZSBpLnB1c2gocChcImFycmF5XCIsYSxtLmNvbmNhdChUKSx5W1RdKSk7ZWxzZSBmb3IoVD0wO1Q8QztUKyspTT1MP2tbVF06ayxTPXlbVF0sRT14W1RdLG4udmFsaWRhdGUoUyxNKT9FIT09UyYmRSE9PStTJiZpLnB1c2gocChcImR5bmFtaWNcIixhLG0uY29uY2F0KFQpLFMsRSkpOmkucHVzaChwKFwidmFsdWVcIixhLG0uY29uY2F0KFQpLFMpKX1lbHNlIGlmKGIuaXRlbXMmJiFfJiZsKHkpKXt2YXIgTyxJLEQ9a1tPYmplY3Qua2V5cyhrKVswXV0sUD1bXTtmb3IoTz0wO088eC5sZW5ndGg7TysrKXt2YXIgUj14W09dLl9pbmRleHx8TztpZigoST1tLnNsaWNlKCkpLnB1c2goUikscyh5W1JdKSYmcyh4W09dKSl7UC5wdXNoKFIpO3ZhciBGPXlbUl0sQj14W09dO3MoRikmJiExIT09Ri52aXNpYmxlJiYhMT09PUIudmlzaWJsZT9pLnB1c2gocChcImludmlzaWJsZVwiLGEsSSkpOnUoRixCLEQsaSxhLEkpfX1mb3IoTz0wO088eS5sZW5ndGg7TysrKShJPW0uc2xpY2UoKSkucHVzaChPKSxzKHlbT10pPy0xPT09UC5pbmRleE9mKE8pJiZpLnB1c2gocChcInVudXNlZFwiLGEsSSkpOmkucHVzaChwKFwib2JqZWN0XCIsYSxJLHlbT10pKX1lbHNlIXMoeSkmJnMoeCk/aS5wdXNoKHAoXCJvYmplY3RcIixhLG0seSkpOmMoeSl8fCFjKHgpfHxffHx3P3YgaW4gZT9uLnZhbGlkYXRlKHksYik/XCJlbnVtZXJhdGVkXCI9PT1iLnZhbFR5cGUmJihiLmNvZXJjZU51bWJlciYmeSE9PSt4fHx5IT09eCkmJmkucHVzaChwKFwiZHluYW1pY1wiLGEsbSx5LHgpKTppLnB1c2gocChcInZhbHVlXCIsYSxtLHkpKTppLnB1c2gocChcInVudXNlZFwiLGEsbSx5KSk6aS5wdXNoKHAoXCJhcnJheVwiLGEsbSx5KSk7ZWxzZSBpLnB1c2gocChcInNjaGVtYVwiLGEsbSkpfX1yZXR1cm4gaX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixjLGg9YS5nZXQoKSxmPVtdLGQ9e19jb250ZXh0Om4uZXh0ZW5kRmxhdCh7fSxvKX07bCh0KT8oZC5kYXRhPW4uZXh0ZW5kRGVlcChbXSx0KSxyPXQpOihkLmRhdGE9W10scj1bXSxmLnB1c2gocChcImFycmF5XCIsXCJkYXRhXCIpKSkscyhlKT8oZC5sYXlvdXQ9bi5leHRlbmREZWVwKHt9LGUpLGM9ZSk6KGQubGF5b3V0PXt9LGM9e30sYXJndW1lbnRzLmxlbmd0aD4xJiZmLnB1c2gocChcIm9iamVjdFwiLFwibGF5b3V0XCIpKSksaS5zdXBwbHlEZWZhdWx0cyhkKTtmb3IodmFyIGc9ZC5fZnVsbERhdGEsdj1yLmxlbmd0aCxtPTA7bTx2O20rKyl7dmFyIHk9clttXSx4PVtcImRhdGFcIixtXTtpZihzKHkpKXt2YXIgYj1nW21dLF89Yi50eXBlLHc9aC50cmFjZXNbX10uYXR0cmlidXRlczt3LnR5cGU9e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltfXX0sITE9PT1iLnZpc2libGUmJiExIT09eS52aXNpYmxlJiZmLnB1c2gocChcImludmlzaWJsZVwiLHgpKSx1KHksYix3LGYseCk7dmFyIGs9eS50cmFuc2Zvcm1zLEE9Yi50cmFuc2Zvcm1zO2lmKGspe2woayl8fGYucHVzaChwKFwiYXJyYXlcIix4LFtcInRyYW5zZm9ybXNcIl0pKSx4LnB1c2goXCJ0cmFuc2Zvcm1zXCIpO2Zvcih2YXIgVD0wO1Q8ay5sZW5ndGg7VCsrKXt2YXIgTT1bXCJ0cmFuc2Zvcm1zXCIsVF0sUz1rW1RdLnR5cGU7aWYocyhrW1RdKSl7dmFyIEU9aC50cmFuc2Zvcm1zW1NdP2gudHJhbnNmb3Jtc1tTXS5hdHRyaWJ1dGVzOnt9O0UudHlwZT17dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6T2JqZWN0LmtleXMoaC50cmFuc2Zvcm1zKX0sdShrW1RdLEFbVF0sRSxmLHgsTSl9ZWxzZSBmLnB1c2gocChcIm9iamVjdFwiLHgsTSkpfX19ZWxzZSBmLnB1c2gocChcIm9iamVjdFwiLHgpKX1yZXR1cm4gdShjLGQuX2Z1bGxMYXlvdXQsZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sYXlvdXQubGF5b3V0QXR0cmlidXRlcyxpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPWVbaV0sbz10LnRyYWNlc1thLnR5cGVdLHM9by5sYXlvdXRBdHRyaWJ1dGVzO3MmJihhLnN1YnBsb3Q/bi5leHRlbmRGbGF0KHJbby5hdHRyaWJ1dGVzLnN1YnBsb3QuZGZsdF0scyk6bi5leHRlbmRGbGF0KHIscykpfXJldHVybiByfShoLGcpLGYsXCJsYXlvdXRcIiksMD09PWYubGVuZ3RoP3ZvaWQgMDpmfTt2YXIgaD17b2JqZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuKFwibGF5b3V0XCI9PT10JiZcIlwiPT09ZT9cIlRoZSBsYXlvdXQgYXJndW1lbnRcIjpcImRhdGFcIj09PXRbMF0mJlwiXCI9PT1lP1wiVHJhY2UgXCIrdFsxXStcIiBpbiB0aGUgZGF0YSBhcmd1bWVudFwiOmYodCkrXCJrZXkgXCIrZSkrXCIgbXVzdCBiZSBsaW5rZWQgdG8gYW4gb2JqZWN0IGNvbnRhaW5lclwifSxhcnJheTpmdW5jdGlvbih0LGUpe3JldHVybihcImRhdGFcIj09PXQ/XCJUaGUgZGF0YSBhcmd1bWVudFwiOmYodCkrXCJrZXkgXCIrZSkrXCIgbXVzdCBiZSBsaW5rZWQgdG8gYW4gYXJyYXkgY29udGFpbmVyXCJ9LHNjaGVtYTpmdW5jdGlvbih0LGUpe3JldHVybiBmKHQpK1wia2V5IFwiK2UrXCIgaXMgbm90IHBhcnQgb2YgdGhlIHNjaGVtYVwifSx1bnVzZWQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXMocik/XCJjb250YWluZXJcIjpcImtleVwiO3JldHVybiBmKHQpK24rXCIgXCIrZStcIiBkaWQgbm90IGdldCBjb2VyY2VkXCJ9LGR5bmFtaWM6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuW2YodCkrXCJrZXlcIixlLFwiKHNldCB0byAnXCIrcitcIicpXCIsXCJnb3QgcmVzZXQgdG9cIixcIidcIituK1wiJ1wiLFwiZHVyaW5nIGRlZmF1bHRzLlwiXS5qb2luKFwiIFwiKX0saW52aXNpYmxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuKGU/Zih0KStcIml0ZW0gXCIrZTpcIlRyYWNlIFwiK3RbMV0pK1wiIGdvdCBkZWZhdWx0ZWQgdG8gYmUgbm90IHZpc2libGVcIn0sdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3JldHVybltmKHQpK1wia2V5IFwiK2UsXCJpcyBzZXQgdG8gYW4gaW52YWxpZCB2YWx1ZSAoXCIrcitcIilcIl0uam9pbihcIiBcIil9fTtmdW5jdGlvbiBmKHQpe3JldHVybiBsKHQpP1wiSW4gZGF0YSB0cmFjZSBcIit0WzFdK1wiLCBcIjpcIkluIFwiK3QrXCIsIFwifWZ1bmN0aW9uIHAodCxlLHIsaSxhKXt2YXIgbyxzO3I9cnx8XCJcIixsKGUpPyhvPWVbMF0scz1lWzFdKToobz1lLHM9bnVsbCk7dmFyIGM9ZnVuY3Rpb24odCl7aWYoIWwodCkpcmV0dXJuIFN0cmluZyh0KTtmb3IodmFyIGU9XCJcIixyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07XCJudW1iZXJcIj09dHlwZW9mIG4/ZT1lLnN1YnN0cigwLGUubGVuZ3RoLTEpK1wiW1wiK24rXCJdXCI6ZSs9bixyPHQubGVuZ3RoLTEmJihlKz1cIi5cIil9cmV0dXJuIGV9KHIpLHU9aFt0XShlLGMsaSxhKTtyZXR1cm4gbi5sb2codSkse2NvZGU6dCxjb250YWluZXI6byx0cmFjZTpzLHBhdGg6cixhc3RyOmMsbXNnOnV9fWZ1bmN0aW9uIGQodCxlKXt2YXIgcj1tKGUpLG49ci5rZXlNaW51c0lkLGk9ci5pZDtyZXR1cm4hIShuIGluIHQmJnRbbl0uX2lzU3VicGxvdE9iaiYmaSl8fGUgaW4gdH1mdW5jdGlvbiBnKHQsZSl7cmV0dXJuIGUgaW4gdD90W2VdOnRbbShlKS5rZXlNaW51c0lkXX12YXIgdj1uLmNvdW50ZXJSZWdleChcIihbYS16XSspXCIpO2Z1bmN0aW9uIG0odCl7dmFyIGU9dC5tYXRjaCh2KTtyZXR1cm57a2V5TWludXNJZDplJiZlWzFdLGlkOmUmJmVbMl19fX0se1wiLi4vbGliXCI6NzAxLFwiLi4vcGxvdHMvcGxvdHNcIjo4MTAsXCIuL3Bsb3RfY29uZmlnXCI6NzM3LFwiLi9wbG90X3NjaGVtYVwiOjczOH1dLDc0NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17bW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIixkZmx0OlwiYWZ0ZXJhbGxcIix2YWx1ZXM6W1wiaW1tZWRpYXRlXCIsXCJuZXh0XCIsXCJhZnRlcmFsbFwiXX0sZGlyZWN0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJmb3J3YXJkXCIsXCJyZXZlcnNlXCJdLGRmbHQ6XCJmb3J3YXJkXCJ9LGZyb21jdXJyZW50Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LGZyYW1lOntkdXJhdGlvbjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6NTAwfSxyZWRyYXc6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMH19LHRyYW5zaXRpb246e2R1cmF0aW9uOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDo1MDAsZWRpdFR5cGU6XCJub25lXCJ9LGVhc2luZzp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIixkZmx0OlwiY3ViaWMtaW4tb3V0XCIsdmFsdWVzOltcImxpbmVhclwiLFwicXVhZFwiLFwiY3ViaWNcIixcInNpblwiLFwiZXhwXCIsXCJjaXJjbGVcIixcImVsYXN0aWNcIixcImJhY2tcIixcImJvdW5jZVwiLFwibGluZWFyLWluXCIsXCJxdWFkLWluXCIsXCJjdWJpYy1pblwiLFwic2luLWluXCIsXCJleHAtaW5cIixcImNpcmNsZS1pblwiLFwiZWxhc3RpYy1pblwiLFwiYmFjay1pblwiLFwiYm91bmNlLWluXCIsXCJsaW5lYXItb3V0XCIsXCJxdWFkLW91dFwiLFwiY3ViaWMtb3V0XCIsXCJzaW4tb3V0XCIsXCJleHAtb3V0XCIsXCJjaXJjbGUtb3V0XCIsXCJlbGFzdGljLW91dFwiLFwiYmFjay1vdXRcIixcImJvdW5jZS1vdXRcIixcImxpbmVhci1pbi1vdXRcIixcInF1YWQtaW4tb3V0XCIsXCJjdWJpYy1pbi1vdXRcIixcInNpbi1pbi1vdXRcIixcImV4cC1pbi1vdXRcIixcImNpcmNsZS1pbi1vdXRcIixcImVsYXN0aWMtaW4tb3V0XCIsXCJiYWNrLWluLW91dFwiLFwiYm91bmNlLWluLW91dFwiXSxlZGl0VHlwZTpcIm5vbmVcIn0sb3JkZXJpbmc6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImxheW91dCBmaXJzdFwiLFwidHJhY2VzIGZpcnN0XCJdLGRmbHQ6XCJsYXlvdXQgZmlyc3RcIixlZGl0VHlwZTpcIm5vbmVcIn19fX0se31dLDc0NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9saWJcIiksaT10KFwiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhLG8scz1yLm5hbWUsbD1yLmluY2x1c2lvbkF0dHJ8fFwidmlzaWJsZVwiLGM9ZVtzXSx1PW4uaXNBcnJheU9yVHlwZWRBcnJheSh0W3NdKT90W3NdOltdLGg9ZVtzXT1bXSxmPWkuYXJyYXlUZW1wbGF0ZXIoZSxzLGwpO2ZvcihhPTA7YTx1Lmxlbmd0aDthKyspe3ZhciBwPXVbYV07bi5pc1BsYWluT2JqZWN0KHApP289Zi5uZXdJdGVtKHApOihvPWYubmV3SXRlbSh7fSkpW2xdPSExLG8uX2luZGV4PWEsITEhPT1vW2xdJiZyLmhhbmRsZUl0ZW1EZWZhdWx0cyhwLG8sZSxyKSxoLnB1c2gobyl9dmFyIGQ9Zi5kZWZhdWx0SXRlbXMoKTtmb3IoYT0wO2E8ZC5sZW5ndGg7YSsrKShvPWRbYV0pLl9pbmRleD1oLmxlbmd0aCxyLmhhbmRsZUl0ZW1EZWZhdWx0cyh7fSxvLGUscix7fSksaC5wdXNoKG8pO2lmKG4uaXNBcnJheU9yVHlwZWRBcnJheShjKSl7dmFyIGc9TWF0aC5taW4oYy5sZW5ndGgsaC5sZW5ndGgpO2ZvcihhPTA7YTxnO2ErKyluLnJlbGlua1ByaXZhdGVLZXlzKGhbYV0sY1thXSl9cmV0dXJuIGh9fSx7XCIuLi9saWJcIjo3MDEsXCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5fV0sNzQ2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2NvbXBvbmVudHMvZngvYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9e3R5cGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltdLGRmbHQ6XCJzY2F0dGVyXCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCIsX25vVGVtcGxhdGluZzohMH0sdmlzaWJsZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6WyEwLCExLFwibGVnZW5kb25seVwiXSxkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSxzaG93bGVnZW5kOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJzdHlsZVwifSxsZWdlbmRncm91cDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcInN0eWxlXCJ9LG9wYWNpdHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6XCJzdHlsZVwifSxuYW1lOnt2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJzdHlsZVwifSx1aWQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcInBsb3RcIixhbmltOiEwfSxpZHM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCIsYW5pbTohMH0sY3VzdG9tZGF0YTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sc2VsZWN0ZWRwb2ludHM6e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImNhbGNcIn0saG92ZXJpbmZvOnt2YWxUeXBlOlwiZmxhZ2xpc3RcIixmbGFnczpbXCJ4XCIsXCJ5XCIsXCJ6XCIsXCJ0ZXh0XCIsXCJuYW1lXCJdLGV4dHJhczpbXCJhbGxcIixcIm5vbmVcIixcInNraXBcIl0sYXJyYXlPazohMCxkZmx0OlwiYWxsXCIsZWRpdFR5cGU6XCJub25lXCJ9LGhvdmVybGFiZWw6bi5ob3ZlcmxhYmVsLHN0cmVhbTp7dG9rZW46e3ZhbFR5cGU6XCJzdHJpbmdcIixub0JsYW5rOiEwLHN0cmljdDohMCxlZGl0VHlwZTpcImNhbGNcIn0sbWF4cG9pbnRzOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjFlNCxkZmx0OjUwMCxlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LHRyYW5zZm9ybXM6e19pc0xpbmtlZFRvQXJyYXk6XCJ0cmFuc2Zvcm1cIixlZGl0VHlwZTpcImNhbGNcIn0sdWlyZXZpc2lvbjp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwibm9uZVwifX19LHtcIi4uL2NvbXBvbmVudHMvZngvYXR0cmlidXRlc1wiOjYwOH1dLDc0NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17eGF4aXM6e3ZhbFR5cGU6XCJzdWJwbG90aWRcIixkZmx0OlwieFwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx5YXhpczp7dmFsVHlwZTpcInN1YnBsb3RpZFwiLGRmbHQ6XCJ5XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9fX0se31dLDc0ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKS5GUF9TQUZFLG89dChcIi4uLy4uL3JlZ2lzdHJ5XCIpO2Z1bmN0aW9uIHModCxlKXt2YXIgcixuLGE9W10sbz1sKGUpLHM9Yyh0LGUpLHU9cy5taW4saD1zLm1heDtpZigwPT09dS5sZW5ndGh8fDA9PT1oLmxlbmd0aClyZXR1cm4gaS5zaW1wbGVNYXAoZS5yYW5nZSxlLnIybCk7dmFyIGY9dVswXS52YWwscD1oWzBdLnZhbDtmb3Iocj0xO3I8dS5sZW5ndGgmJmY9PT1wO3IrKylmPU1hdGgubWluKGYsdVtyXS52YWwpO2ZvcihyPTE7cjxoLmxlbmd0aCYmZj09PXA7cisrKXA9TWF0aC5tYXgocCxoW3JdLnZhbCk7dmFyIGQ9ITE7aWYoZS5yYW5nZSl7dmFyIGc9aS5zaW1wbGVNYXAoZS5yYW5nZSxlLnIybCk7ZD1nWzFdPGdbMF19XCJyZXZlcnNlZFwiPT09ZS5hdXRvcmFuZ2UmJihkPSEwLGUuYXV0b3JhbmdlPSEwKTt2YXIgdixtLHkseCxiLF8sdz1lLnJhbmdlbW9kZSxrPVwidG96ZXJvXCI9PT13LEE9XCJub25uZWdhdGl2ZVwiPT09dyxUPWUuX2xlbmd0aCxNPVQvMTAsUz0wO2ZvcihyPTA7cjx1Lmxlbmd0aDtyKyspZm9yKHY9dVtyXSxuPTA7bjxoLmxlbmd0aDtuKyspKF89KG09aFtuXSkudmFsLXYudmFsKT4wJiYoKGI9VC1vKHYpLW8obSkpPk0/Xy9iPlMmJih5PXYseD1tLFM9Xy9iKTpfL1Q+UyYmKHk9e3ZhbDp2LnZhbCxwYWQ6MH0seD17dmFsOm0udmFsLHBhZDowfSxTPV8vVCkpO2lmKGY9PT1wKXt2YXIgRT1mLTEsQz1mKzE7aWYoaylpZigwPT09ZilhPVswLDFdO2Vsc2V7dmFyIEw9KGY+MD9oOnUpLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCh0LG8oZSkpfSwwKSx6PWYvKDEtTWF0aC5taW4oLjUsTC9UKSk7YT1mPjA/WzAsel06W3osMF19ZWxzZSBhPUE/W01hdGgubWF4KDAsRSksTWF0aC5tYXgoMSxDKV06W0UsQ119ZWxzZSBrPyh5LnZhbD49MCYmKHk9e3ZhbDowLHBhZDowfSkseC52YWw8PTAmJih4PXt2YWw6MCxwYWQ6MH0pKTpBJiYoeS52YWwtUypvKHkpPDAmJih5PXt2YWw6MCxwYWQ6MH0pLHgudmFsPD0wJiYoeD17dmFsOjEscGFkOjB9KSksUz0oeC52YWwteS52YWwpLyhULW8oeSktbyh4KSksYT1beS52YWwtUypvKHkpLHgudmFsK1Mqbyh4KV07cmV0dXJuIGQmJmEucmV2ZXJzZSgpLGkuc2ltcGxlTWFwKGEsZS5sMnJ8fE51bWJlcil9ZnVuY3Rpb24gbCh0KXt2YXIgZT10Ll9sZW5ndGgvMjA7cmV0dXJuXCJkb21haW5cIj09PXQuY29uc3RyYWluJiZ0Ll9pbnB1dERvbWFpbiYmKGUqPSh0Ll9pbnB1dERvbWFpblsxXS10Ll9pbnB1dERvbWFpblswXSkvKHQuZG9tYWluWzFdLXQuZG9tYWluWzBdKSksZnVuY3Rpb24odCl7cmV0dXJuIHQucGFkKyh0LmV4dHJhcGFkP2U6MCl9fWZ1bmN0aW9uIGModCxlKXt2YXIgcixuLGksYT1lLl9pZCxvPXQuX2Z1bGxEYXRhLHM9dC5fZnVsbExheW91dCxsPVtdLGM9W107ZnVuY3Rpb24gZih0LGUpe2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBvPXRbZVtyXV0scz0oby5fZXh0cmVtZXN8fHt9KVthXTtpZighMD09PW8udmlzaWJsZSYmcyl7Zm9yKG49MDtuPHMubWluLmxlbmd0aDtuKyspaT1zLm1pbltuXSx1KGwsaS52YWwsaS5wYWQse2V4dHJhcGFkOmkuZXh0cmFwYWR9KTtmb3Iobj0wO248cy5tYXgubGVuZ3RoO24rKylpPXMubWF4W25dLGgoYyxpLnZhbCxpLnBhZCx7ZXh0cmFwYWQ6aS5leHRyYXBhZH0pfX19cmV0dXJuIGYobyxlLl90cmFjZUluZGljZXMpLGYocy5hbm5vdGF0aW9uc3x8W10sZS5fYW5uSW5kaWNlc3x8W10pLGYocy5zaGFwZXN8fFtdLGUuX3NoYXBlSW5kaWNlc3x8W10pLHttaW46bCxtYXg6Y319ZnVuY3Rpb24gdSh0LGUscixuKXtmKHQsZSxyLG4sZCl9ZnVuY3Rpb24gaCh0LGUscixuKXtmKHQsZSxyLG4sZyl9ZnVuY3Rpb24gZih0LGUscixuLGkpe2Zvcih2YXIgYT1uLnRvemVybyxvPW4uZXh0cmFwYWQscz0hMCxsPTA7bDx0Lmxlbmd0aCYmcztsKyspe3ZhciBjPXRbbF07aWYoaShjLnZhbCxlKSYmYy5wYWQ+PXImJihjLmV4dHJhcGFkfHwhbykpe3M9ITE7YnJlYWt9aShlLGMudmFsKSYmYy5wYWQ8PXImJihvfHwhYy5leHRyYXBhZCkmJih0LnNwbGljZShsLDEpLGwtLSl9aWYocyl7dmFyIHU9YSYmMD09PWU7dC5wdXNoKHt2YWw6ZSxwYWQ6dT8wOnIsZXh0cmFwYWQ6IXUmJm99KX19ZnVuY3Rpb24gcCh0KXtyZXR1cm4gbih0KSYmTWF0aC5hYnModCk8YX1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuIHQ8PWV9ZnVuY3Rpb24gZyh0LGUpe3JldHVybiB0Pj1lfWUuZXhwb3J0cz17Z2V0QXV0b1JhbmdlOnMsbWFrZVBhZEZuOmwsZG9BdXRvUmFuZ2U6ZnVuY3Rpb24odCxlKXtpZihlLnNldFNjYWxlKCksZS5hdXRvcmFuZ2Upe2UucmFuZ2U9cyh0LGUpLGUuX3I9ZS5yYW5nZS5zbGljZSgpLGUuX3JsPWkuc2ltcGxlTWFwKGUuX3IsZS5yMmwpO3ZhciByPWUuX2lucHV0LG49e307bltlLl9hdHRyK1wiLnJhbmdlXCJdPWUucmFuZ2UsbltlLl9hdHRyK1wiLmF1dG9yYW5nZVwiXT1lLmF1dG9yYW5nZSxvLmNhbGwoXCJfc3RvcmVEaXJlY3RHVUlFZGl0XCIsdC5sYXlvdXQsdC5fZnVsbExheW91dC5fcHJlR1VJLG4pLHIucmFuZ2U9ZS5yYW5nZS5zbGljZSgpLHIuYXV0b3JhbmdlPWUuYXV0b3JhbmdlfXZhciBhPWUuX2FuY2hvckF4aXM7aWYoYSYmYS5yYW5nZXNsaWRlcil7dmFyIGw9YS5yYW5nZXNsaWRlcltlLl9uYW1lXTtsJiZcImF1dG9cIj09PWwucmFuZ2Vtb2RlJiYobC5yYW5nZT1zKHQsZSkpLGEuX2lucHV0LnJhbmdlc2xpZGVyW2UuX25hbWVdPWkuZXh0ZW5kRmxhdCh7fSxsKX19LGZpbmRFeHRyZW1lczpmdW5jdGlvbih0LGUscil7cnx8KHI9e30pO3QuX218fHQuc2V0U2NhbGUoKTt2YXIgaSxvLHMsbCxjLGYsZCxnLHYsbT1bXSx5PVtdLHg9ZS5sZW5ndGgsYj1yLnBhZGRlZHx8ITEsXz1yLnRvemVybyYmKFwibGluZWFyXCI9PT10LnR5cGV8fFwiLVwiPT09dC50eXBlKSx3PVwibG9nXCI9PT10LnR5cGUsaz0hMTtmdW5jdGlvbiBBKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGs9ITAsZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubWF4KE51bWJlcih0W2VdfHwwKSwwKX07dmFyIGU9TWF0aC5tYXgoTnVtYmVyKHR8fDApLDApO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgVD1BKCh0Ll9tPjA/ci5wcGFkcGx1czpyLnBwYWRtaW51cyl8fHIucHBhZHx8MCksTT1BKCh0Ll9tPjA/ci5wcGFkbWludXM6ci5wcGFkcGx1cyl8fHIucHBhZHx8MCksUz1BKHIudnBhZHBsdXN8fHIudnBhZCksRT1BKHIudnBhZG1pbnVzfHxyLnZwYWQpO2lmKCFrKXtpZihnPTEvMCx2PS0xLzAsdylmb3IoaT0wO2k8eDtpKyspKG89ZVtpXSk8ZyYmbz4wJiYoZz1vKSxvPnYmJm88YSYmKHY9byk7ZWxzZSBmb3IoaT0wO2k8eDtpKyspKG89ZVtpXSk8ZyYmbz4tYSYmKGc9byksbz52JiZvPGEmJih2PW8pO2U9W2csdl0seD0yfXZhciBDPXt0b3plcm86XyxleHRyYXBhZDpifTtmdW5jdGlvbiBMKHIpe3M9ZVtyXSxuKHMpJiYoZj1UKHIpLGQ9TShyKSxnPXMtRShyKSx2PXMrUyhyKSx3JiZnPHYvMTAmJihnPXYvMTApLGw9dC5jMmwoZyksYz10LmMybCh2KSxfJiYobD1NYXRoLm1pbigwLGwpLGM9TWF0aC5tYXgoMCxjKSkscChsKSYmdShtLGwsZCxDKSxwKGMpJiZoKHksYyxmLEMpKX12YXIgej1NYXRoLm1pbig2LHgpO2ZvcihpPTA7aTx6O2krKylMKGkpO2ZvcihpPXgtMTtpPj16O2ktLSlMKGkpO3JldHVybnttaW46bSxtYXg6eSxvcHRzOnJ9fSxjb25jYXRFeHRyZW1lczpjfX0se1wiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw3NDk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiZmFzdC1pc251bWVyaWNcIiksYT10KFwiLi4vLi4vcGxvdHMvcGxvdHNcIiksbz10KFwiLi4vLi4vcmVnaXN0cnlcIikscz10KFwiLi4vLi4vbGliXCIpLGw9dChcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiKSxjPXQoXCIuLi8uLi9jb21wb25lbnRzL3RpdGxlc1wiKSx1PXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGg9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxmPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLHA9dChcIi4vY2xlYW5fdGlja3NcIiksZD10KFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKSxnPWQuT05FQVZHWUVBUix2PWQuT05FQVZHTU9OVEgsbT1kLk9ORURBWSx5PWQuT05FSE9VUix4PWQuT05FTUlOLGI9ZC5PTkVTRUMsXz1kLk1JTlVTX1NJR04sdz1kLkJBRE5VTSxrPXQoXCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCIpLk1JRF9TSElGVCxBPXQoXCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCIpLkxJTkVfU1BBQ0lORyxUPWUuZXhwb3J0cz17fTtULnNldENvbnZlcnQ9dChcIi4vc2V0X2NvbnZlcnRcIik7dmFyIE09dChcIi4vYXhpc19hdXRvdHlwZVwiKSxTPXQoXCIuL2F4aXNfaWRzXCIpO1QuaWQybmFtZT1TLmlkMm5hbWUsVC5uYW1lMmlkPVMubmFtZTJpZCxULmNsZWFuSWQ9Uy5jbGVhbklkLFQubGlzdD1TLmxpc3QsVC5saXN0SWRzPVMubGlzdElkcyxULmdldEZyb21JZD1TLmdldEZyb21JZCxULmdldEZyb21UcmFjZT1TLmdldEZyb21UcmFjZTt2YXIgRT10KFwiLi9hdXRvcmFuZ2VcIik7VC5nZXRBdXRvUmFuZ2U9RS5nZXRBdXRvUmFuZ2UsVC5maW5kRXh0cmVtZXM9RS5maW5kRXh0cmVtZXMsVC5jb2VyY2VSZWY9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPW4uY2hhckF0KG4ubGVuZ3RoLTEpLGw9ci5fZnVsbExheW91dC5fc3VicGxvdHNbbytcImF4aXNcIl0sYz1uK1wicmVmXCIsdT17fTtyZXR1cm4gaXx8KGk9bFswXXx8YSksYXx8KGE9aSksdVtjXT17dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6bC5jb25jYXQoYT9bYV06W10pLGRmbHQ6aX0scy5jb2VyY2UodCxlLHUsYyl9LFQuY29lcmNlUG9zaXRpb249ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvLGw7aWYoXCJwYXBlclwiPT09bnx8XCJwaXhlbFwiPT09bilvPXMuZW5zdXJlTnVtYmVyLGw9cihpLGEpO2Vsc2V7dmFyIGM9VC5nZXRGcm9tSWQoZSxuKTtsPXIoaSxhPWMuZnJhY3Rpb24ycihhKSksbz1jLmNsZWFuUG9zfXRbaV09byhsKX0sVC5jbGVhblBvc2l0aW9uPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4oXCJwYXBlclwiPT09cnx8XCJwaXhlbFwiPT09cj9zLmVuc3VyZU51bWJlcjpULmdldEZyb21JZChlLHIpLmNsZWFuUG9zKSh0KX0sVC5yZWRyYXdDb21wb25lbnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHxULmxpc3RJZHModCk7dmFyIHI9dC5fZnVsbExheW91dDtmdW5jdGlvbiBuKG4saSxhLHMpe2Zvcih2YXIgbD1vLmdldENvbXBvbmVudE1ldGhvZChuLGkpLGM9e30sdT0wO3U8ZS5sZW5ndGg7dSsrKWZvcih2YXIgaD1yW1QuaWQybmFtZShlW3VdKV1bYV0sZj0wO2Y8aC5sZW5ndGg7ZisrKXt2YXIgcD1oW2ZdO2lmKCFjW3BdJiYobCh0LHApLGNbcF09MSxzKSlyZXR1cm59fW4oXCJhbm5vdGF0aW9uc1wiLFwiZHJhd09uZVwiLFwiX2FubkluZGljZXNcIiksbihcInNoYXBlc1wiLFwiZHJhd09uZVwiLFwiX3NoYXBlSW5kaWNlc1wiKSxuKFwiaW1hZ2VzXCIsXCJkcmF3XCIsXCJfaW1nSW5kaWNlc1wiLCEwKX07dmFyIEM9VC5nZXREYXRhQ29udmVyc2lvbnM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT1cInhcIj09PXJ8fFwieVwiPT09cnx8XCJ6XCI9PT1yP3I6bjtpZihBcnJheS5pc0FycmF5KGEpKXtpZihpPXt0eXBlOk0obiksX2NhdGVnb3JpZXM6W119LFQuc2V0Q29udmVydChpKSxcImNhdGVnb3J5XCI9PT1pLnR5cGUpZm9yKHZhciBvPTA7bzxuLmxlbmd0aDtvKyspaS5kMmMobltvXSl9ZWxzZSBpPVQuZ2V0RnJvbVRyYWNlKHQsZSxhKTtyZXR1cm4gaT97ZDJjOmkuZDJjLGMyZDppLmMyZH06XCJpZHNcIj09PWE/e2QyYzp6LGMyZDp6fTp7ZDJjOkwsYzJkOkx9fTtmdW5jdGlvbiBMKHQpe3JldHVybit0fWZ1bmN0aW9uIHoodCl7cmV0dXJuIFN0cmluZyh0KX1ULmdldERhdGFUb0Nvb3JkRnVuYz1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gQyh0LGUscixuKS5kMmN9LFQuY291bnRlckxldHRlcj1mdW5jdGlvbih0KXt2YXIgZT10LmNoYXJBdCgwKTtyZXR1cm5cInhcIj09PWU/XCJ5XCI6XCJ5XCI9PT1lP1wieFwiOnZvaWQgMH0sVC5taW5EdGljaz1mdW5jdGlvbih0LGUscixuKXstMT09PVtcImxvZ1wiLFwiY2F0ZWdvcnlcIixcIm11bHRpY2F0ZWdvcnlcIl0uaW5kZXhPZih0LnR5cGUpJiZuP3ZvaWQgMD09PXQuX21pbkR0aWNrPyh0Ll9taW5EdGljaz1lLHQuX2ZvcmNlVGljazA9cik6dC5fbWluRHRpY2smJigodC5fbWluRHRpY2svZSsxZS02KSUxPDJlLTYmJigoci10Ll9mb3JjZVRpY2swKS9lJTErMS4wMDAwMDEpJTE8MmUtNj8odC5fbWluRHRpY2s9ZSx0Ll9mb3JjZVRpY2swPXIpOigoZS90Ll9taW5EdGljaysxZS02KSUxPjJlLTZ8fCgoci10Ll9mb3JjZVRpY2swKS90Ll9taW5EdGljayUxKzEuMDAwMDAxKSUxPjJlLTYpJiYodC5fbWluRHRpY2s9MCkpOnQuX21pbkR0aWNrPTB9LFQuc2F2ZVJhbmdlSW5pdGlhbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1ULmxpc3QodCxcIlwiLCEwKSxuPSExLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXSxvPXZvaWQgMD09PWEuX3JhbmdlSW5pdGlhbCxzPW98fCEoYS5yYW5nZVswXT09PWEuX3JhbmdlSW5pdGlhbFswXSYmYS5yYW5nZVsxXT09PWEuX3JhbmdlSW5pdGlhbFsxXSk7KG8mJiExPT09YS5hdXRvcmFuZ2V8fGUmJnMpJiYoYS5fcmFuZ2VJbml0aWFsPWEucmFuZ2Uuc2xpY2UoKSxuPSEwKX1yZXR1cm4gbn0sVC5zYXZlU2hvd1NwaWtlSW5pdGlhbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1ULmxpc3QodCxcIlwiLCEwKSxuPSExLGk9XCJvblwiLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIG89clthXSxzPXZvaWQgMD09PW8uX3Nob3dTcGlrZUluaXRpYWwsbD1zfHwhKG8uc2hvd3NwaWtlcz09PW8uX3Nob3dzcGlrZXMpOyhzfHxlJiZsKSYmKG8uX3Nob3dTcGlrZUluaXRpYWw9by5zaG93c3Bpa2VzLG49ITApLFwib25cIiE9PWl8fG8uc2hvd3NwaWtlc3x8KGk9XCJvZmZcIil9cmV0dXJuIHQuX2Z1bGxMYXlvdXQuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQ9aSxufSxULmF1dG9CaW49ZnVuY3Rpb24odCxlLHIsbixhLG8pe3ZhciBsLGM9cy5hZ2dOdW1zKE1hdGgubWluLG51bGwsdCksdT1zLmFnZ051bXMoTWF0aC5tYXgsbnVsbCx0KTtpZihcImNhdGVnb3J5XCI9PT1lLnR5cGV8fFwibXVsdGljYXRlZ29yeVwiPT09ZS50eXBlKXJldHVybntzdGFydDpjLS41LGVuZDp1Ky41LHNpemU6TWF0aC5tYXgoMSxNYXRoLnJvdW5kKG8pfHwxKSxfZGF0YVNwYW46dS1jfTtpZihhfHwoYT1lLmNhbGVuZGFyKSxsPVwibG9nXCI9PT1lLnR5cGU/e3R5cGU6XCJsaW5lYXJcIixyYW5nZTpbYyx1XX06e3R5cGU6ZS50eXBlLHJhbmdlOnMuc2ltcGxlTWFwKFtjLHVdLGUuYzJyLDAsYSksY2FsZW5kYXI6YX0sVC5zZXRDb252ZXJ0KGwpLG89byYmcC5kdGljayhvLGwudHlwZSkpbC5kdGljaz1vLGwudGljazA9cC50aWNrMCh2b2lkIDAsbC50eXBlLGEpO2Vsc2V7dmFyIGg7aWYociloPSh1LWMpL3I7ZWxzZXt2YXIgZj1zLmRpc3RpbmN0VmFscyh0KSxkPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coZi5taW5EaWZmKS9NYXRoLkxOMTApKSxnPWQqcy5yb3VuZFVwKGYubWluRGlmZi9kLFsuOSwxLjksNC45LDkuOV0sITApO2g9TWF0aC5tYXgoZywyKnMuc3RkZXYodCkvTWF0aC5wb3codC5sZW5ndGgsbj8uMjU6LjQpKSxpKGgpfHwoaD0xKX1ULmF1dG9UaWNrcyhsLGgpfXZhciB2LHk9bC5kdGljayx4PVQudGlja0luY3JlbWVudChULnRpY2tGaXJzdChsKSx5LFwicmV2ZXJzZVwiLGEpO2lmKFwibnVtYmVyXCI9PXR5cGVvZiB5KXY9KHg9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbz0wLHM9MCxsPTAsYz0wO2Z1bmN0aW9uIHUoZSl7cmV0dXJuKDErMTAwKihlLXQpL3IuZHRpY2spJTEwMDwyfWZvcih2YXIgaD0wO2g8ZS5sZW5ndGg7aCsrKWVbaF0lMT09MD9sKys6aShlW2hdKXx8YysrLHUoZVtoXSkmJm8rKyx1KGVbaF0rci5kdGljay8yKSYmcysrO3ZhciBmPWUubGVuZ3RoLWM7aWYobD09PWYmJlwiZGF0ZVwiIT09ci50eXBlKXIuZHRpY2s8MT90PW4tLjUqci5kdGljazoodC09LjUpK3IuZHRpY2s8biYmKHQrPXIuZHRpY2spO2Vsc2UgaWYoczwuMSpmJiYobz4uMypmfHx1KG4pfHx1KGEpKSl7dmFyIHA9ci5kdGljay8yO3QrPXQrcDxuP3A6LXB9cmV0dXJuIHR9KHgsdCxsLGMsdSkpKygxK01hdGguZmxvb3IoKHUteCkveSkpKnk7ZWxzZSBmb3IoXCJNXCI9PT1sLmR0aWNrLmNoYXJBdCgwKSYmKHg9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1zLmZpbmRFeGFjdERhdGVzKGUsaSk7aWYoYS5leGFjdERheXM+Ljgpe3ZhciBvPU51bWJlcihyLnN1YnN0cigxKSk7YS5leGFjdFllYXJzPi44JiZvJTEyPT0wP3Q9VC50aWNrSW5jcmVtZW50KHQsXCJNNlwiLFwicmV2ZXJzZVwiKSsxLjUqbTphLmV4YWN0TW9udGhzPi44P3Q9VC50aWNrSW5jcmVtZW50KHQsXCJNMVwiLFwicmV2ZXJzZVwiKSsxNS41Km06dC09bS8yO3ZhciBsPVQudGlja0luY3JlbWVudCh0LHIpO2lmKGw8PW4pcmV0dXJuIGx9cmV0dXJuIHR9KHgsdCx5LGMsYSkpLHY9eCwwO3Y8PXU7KXY9VC50aWNrSW5jcmVtZW50KHYseSwhMSxhKSwwO3JldHVybntzdGFydDplLmMycih4LDAsYSksZW5kOmUuYzJyKHYsMCxhKSxzaXplOnksX2RhdGFTcGFuOnUtY319LFQucHJlcFRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBlPXMuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpO2lmKFwiYXV0b1wiPT09dC50aWNrbW9kZXx8IXQuZHRpY2spe3ZhciByLG49dC5udGlja3M7bnx8KFwiY2F0ZWdvcnlcIj09PXQudHlwZXx8XCJtdWx0aWNhdGVnb3J5XCI9PT10LnR5cGU/KHI9dC50aWNrZm9udD8xLjIqKHQudGlja2ZvbnQuc2l6ZXx8MTIpOjE1LG49dC5fbGVuZ3RoL3IpOihyPVwieVwiPT09dC5faWQuY2hhckF0KDApPzQwOjgwLG49cy5jb25zdHJhaW4odC5fbGVuZ3RoL3IsNCw5KSsxKSxcInJhZGlhbGF4aXNcIj09PXQuX25hbWUmJihuKj0yKSksXCJhcnJheVwiPT09dC50aWNrbW9kZSYmKG4qPTEwMCksVC5hdXRvVGlja3ModCxNYXRoLmFicyhlWzFdLWVbMF0pL24pLHQuX21pbkR0aWNrPjAmJnQuZHRpY2s8Mip0Ll9taW5EdGljayYmKHQuZHRpY2s9dC5fbWluRHRpY2ssdC50aWNrMD10Lmwycih0Ll9mb3JjZVRpY2swKSl9dC50aWNrMHx8KHQudGljazA9XCJkYXRlXCI9PT10LnR5cGU/XCIyMDAwLTAxLTAxXCI6MCksXCJkYXRlXCI9PT10LnR5cGUmJnQuZHRpY2s8LjEmJih0LmR0aWNrPS4xKSxqKHQpfSxULmNhbGNUaWNrcz1mdW5jdGlvbih0KXtULnByZXBUaWNrcyh0KTt2YXIgZT1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKTtpZihcImFycmF5XCI9PT10LnRpY2ttb2RlKXJldHVybiBmdW5jdGlvbih0KXt2YXIgZT10LnRpY2t2YWxzLHI9dC50aWNrdGV4dCxuPW5ldyBBcnJheShlLmxlbmd0aCksaT1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKSxhPTEuMDAwMSppWzBdLTFlLTQqaVsxXSxvPTEuMDAwMSppWzFdLTFlLTQqaVswXSxsPU1hdGgubWluKGEsbyksYz1NYXRoLm1heChhLG8pLHU9MDtBcnJheS5pc0FycmF5KHIpfHwocj1bXSk7dmFyIGg9XCJjYXRlZ29yeVwiPT09dC50eXBlP3QuZDJsX25vYWRkOnQuZDJsO1wibG9nXCI9PT10LnR5cGUmJlwiTFwiIT09U3RyaW5nKHQuZHRpY2spLmNoYXJBdCgwKSYmKHQuZHRpY2s9XCJMXCIrTWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLm1pbih0LnJhbmdlWzBdLHQucmFuZ2VbMV0pKS0xKSk7Zm9yKHZhciBmPTA7ZjxlLmxlbmd0aDtmKyspe3ZhciBwPWgoZVtmXSk7cD5sJiZwPGMmJih2b2lkIDA9PT1yW2ZdP25bdV09VC50aWNrVGV4dCh0LHApOm5bdV09Vih0LHAsU3RyaW5nKHJbZl0pKSx1KyspfXU8ZS5sZW5ndGgmJm4uc3BsaWNlKHUsZS5sZW5ndGgtdSk7cmV0dXJuIG59KHQpO3QuX3RtaW49VC50aWNrRmlyc3QodCk7dmFyIHI9MS4wMDAxKmVbMF0tMWUtNCplWzFdLG49MS4wMDAxKmVbMV0tMWUtNCplWzBdLGk9ZVsxXTxlWzBdO2lmKHQuX3RtaW48ciE9PWkpcmV0dXJuW107dmFyIGE9W107XCJjYXRlZ29yeVwiIT09dC50eXBlJiZcIm11bHRpY2F0ZWdvcnlcIiE9PXQudHlwZXx8KG49aT9NYXRoLm1heCgtLjUsbik6TWF0aC5taW4odC5fY2F0ZWdvcmllcy5sZW5ndGgtLjUsbikpO2Zvcih2YXIgbz1udWxsLGw9TWF0aC5tYXgoMWUzLHQuX2xlbmd0aHx8MCksYz10Ll90bWluOyhpP2M+PW46Yzw9bikmJiEoYS5sZW5ndGg+bHx8Yz09PW8pO2M9VC50aWNrSW5jcmVtZW50KGMsdC5kdGljayxpLHQuY2FsZW5kYXIpKW89YyxhLnB1c2goYyk7cnQodCkmJjM2MD09PU1hdGguYWJzKGVbMV0tZVswXSkmJmEucG9wKCksdC5fdG1heD1hW2EubGVuZ3RoLTFdLHQuX3ByZXZEYXRlSGVhZD1cIlwiLHQuX2luQ2FsY1RpY2tzPSEwO2Zvcih2YXIgdT1uZXcgQXJyYXkoYS5sZW5ndGgpLGg9MDtoPGEubGVuZ3RoO2grKyl1W2hdPVQudGlja1RleHQodCxhW2hdKTtyZXR1cm4gdC5faW5DYWxjVGlja3M9ITEsdX07dmFyIE89WzIsNSwxMF0sST1bMSwyLDMsNiwxMl0sRD1bMSwyLDUsMTAsMTUsMzBdLFA9WzEsMiwzLDcsMTRdLFI9Wy0uMDQ2LDAsLjMwMSwuNDc3LC42MDIsLjY5OSwuNzc4LC44NDUsLjkwMywuOTU0LDFdLEY9Wy0uMzAxLDAsLjMwMSwuNjk5LDFdLEI9WzE1LDMwLDQ1LDkwLDE4MF07ZnVuY3Rpb24gTih0LGUscil7cmV0dXJuIGUqcy5yb3VuZFVwKHQvZSxyKX1mdW5jdGlvbiBqKHQpe3ZhciBlPXQuZHRpY2s7aWYodC5fdGlja2V4cG9uZW50PTAsaShlKXx8XCJzdHJpbmdcIj09dHlwZW9mIGV8fChlPTEpLFwiY2F0ZWdvcnlcIiE9PXQudHlwZSYmXCJtdWx0aWNhdGVnb3J5XCIhPT10LnR5cGV8fCh0Ll90aWNrcm91bmQ9bnVsbCksXCJkYXRlXCI9PT10LnR5cGUpe3ZhciByPXQucjJsKHQudGljazApLG49dC5sMnIocikucmVwbGFjZSgvKF4tfGkpL2csXCJcIiksYT1uLmxlbmd0aDtpZihcIk1cIj09PVN0cmluZyhlKS5jaGFyQXQoMCkpYT4xMHx8XCIwMS0wMVwiIT09bi5zdWJzdHIoNSk/dC5fdGlja3JvdW5kPVwiZFwiOnQuX3RpY2tyb3VuZD0rZS5zdWJzdHIoMSklMTI9PTA/XCJ5XCI6XCJtXCI7ZWxzZSBpZihlPj1tJiZhPD0xMHx8ZT49MTUqbSl0Ll90aWNrcm91bmQ9XCJkXCI7ZWxzZSBpZihlPj14JiZhPD0xNnx8ZT49eSl0Ll90aWNrcm91bmQ9XCJNXCI7ZWxzZSBpZihlPj1iJiZhPD0xOXx8ZT49eCl0Ll90aWNrcm91bmQ9XCJTXCI7ZWxzZXt2YXIgbz10LmwycihyK2UpLnJlcGxhY2UoL14tLyxcIlwiKS5sZW5ndGg7dC5fdGlja3JvdW5kPU1hdGgubWF4KGEsbyktMjAsdC5fdGlja3JvdW5kPDAmJih0Ll90aWNrcm91bmQ9NCl9fWVsc2UgaWYoaShlKXx8XCJMXCI9PT1lLmNoYXJBdCgwKSl7dmFyIHM9dC5yYW5nZS5tYXAodC5yMmR8fE51bWJlcik7aShlKXx8KGU9TnVtYmVyKGUuc3Vic3RyKDEpKSksdC5fdGlja3JvdW5kPTItTWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMTArLjAxKTt2YXIgbD1NYXRoLm1heChNYXRoLmFicyhzWzBdKSxNYXRoLmFicyhzWzFdKSksYz1NYXRoLmZsb29yKE1hdGgubG9nKGwpL01hdGguTE4xMCsuMDEpO01hdGguYWJzKGMpPjMmJihxKHQuZXhwb25lbnRmb3JtYXQpJiYhSChjKT90Ll90aWNrZXhwb25lbnQ9MypNYXRoLnJvdW5kKChjLTEpLzMpOnQuX3RpY2tleHBvbmVudD1jKX1lbHNlIHQuX3RpY2tyb3VuZD1udWxsfWZ1bmN0aW9uIFYodCxlLHIpe3ZhciBuPXQudGlja2ZvbnR8fHt9O3JldHVybnt4OmUsZHg6MCxkeTowLHRleHQ6cnx8XCJcIixmb250U2l6ZTpuLnNpemUsZm9udDpuLmZhbWlseSxmb250Q29sb3I6bi5jb2xvcn19VC5hdXRvVGlja3M9ZnVuY3Rpb24odCxlKXt2YXIgcjtmdW5jdGlvbiBuKHQpe3JldHVybiBNYXRoLnBvdyh0LE1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjEwKSl9aWYoXCJkYXRlXCI9PT10LnR5cGUpe3QudGljazA9cy5kYXRlVGljazAodC5jYWxlbmRhcik7dmFyIGE9MiplO2E+Zz8oZS89ZyxyPW4oMTApLHQuZHRpY2s9XCJNXCIrMTIqTihlLHIsTykpOmE+dj8oZS89dix0LmR0aWNrPVwiTVwiK04oZSwxLEkpKTphPm0/KHQuZHRpY2s9TihlLG0sUCksdC50aWNrMD1zLmRhdGVUaWNrMCh0LmNhbGVuZGFyLCEwKSk6YT55P3QuZHRpY2s9TihlLHksSSk6YT54P3QuZHRpY2s9TihlLHgsRCk6YT5iP3QuZHRpY2s9TihlLGIsRCk6KHI9bigxMCksdC5kdGljaz1OKGUscixPKSl9ZWxzZSBpZihcImxvZ1wiPT09dC50eXBlKXt0LnRpY2swPTA7dmFyIG89cy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCk7aWYoZT4uNyl0LmR0aWNrPU1hdGguY2VpbChlKTtlbHNlIGlmKE1hdGguYWJzKG9bMV0tb1swXSk8MSl7dmFyIGw9MS41Kk1hdGguYWJzKChvWzFdLW9bMF0pL2UpO2U9TWF0aC5hYnMoTWF0aC5wb3coMTAsb1sxXSktTWF0aC5wb3coMTAsb1swXSkpL2wscj1uKDEwKSx0LmR0aWNrPVwiTFwiK04oZSxyLE8pfWVsc2UgdC5kdGljaz1lPi4zP1wiRDJcIjpcIkQxXCJ9ZWxzZVwiY2F0ZWdvcnlcIj09PXQudHlwZXx8XCJtdWx0aWNhdGVnb3J5XCI9PT10LnR5cGU/KHQudGljazA9MCx0LmR0aWNrPU1hdGguY2VpbChNYXRoLm1heChlLDEpKSk6cnQodCk/KHQudGljazA9MCxyPTEsdC5kdGljaz1OKGUscixCKSk6KHQudGljazA9MCxyPW4oMTApLHQuZHRpY2s9TihlLHIsTykpO2lmKDA9PT10LmR0aWNrJiYodC5kdGljaz0xKSwhaSh0LmR0aWNrKSYmXCJzdHJpbmdcIiE9dHlwZW9mIHQuZHRpY2spe3ZhciBjPXQuZHRpY2s7dGhyb3cgdC5kdGljaz0xLFwiYXguZHRpY2sgZXJyb3I6IFwiK1N0cmluZyhjKX19LFQudGlja0luY3JlbWVudD1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1yPy0xOjE7aWYoaShlKSlyZXR1cm4gdCtvKmU7dmFyIGw9ZS5jaGFyQXQoMCksYz1vKk51bWJlcihlLnN1YnN0cigxKSk7aWYoXCJNXCI9PT1sKXJldHVybiBzLmluY3JlbWVudE1vbnRoKHQsYyxhKTtpZihcIkxcIj09PWwpcmV0dXJuIE1hdGgubG9nKE1hdGgucG93KDEwLHQpK2MpL01hdGguTE4xMDtpZihcIkRcIj09PWwpe3ZhciB1PVwiRDJcIj09PWU/RjpSLGg9dCsuMDEqbyxmPXMucm91bmRVcChzLm1vZChoLDEpLHUscik7cmV0dXJuIE1hdGguZmxvb3IoaCkrTWF0aC5sb2cobi5yb3VuZChNYXRoLnBvdygxMCxmKSwxKSkvTWF0aC5MTjEwfXRocm93XCJ1bnJlY29nbml6ZWQgZHRpY2sgXCIrU3RyaW5nKGUpfSxULnRpY2tGaXJzdD1mdW5jdGlvbih0KXt2YXIgZT10LnIybHx8TnVtYmVyLHI9cy5zaW1wbGVNYXAodC5yYW5nZSxlKSxhPXJbMV08clswXSxvPWE/TWF0aC5mbG9vcjpNYXRoLmNlaWwsbD0xLjAwMDEqclswXS0xZS00KnJbMV0sYz10LmR0aWNrLHU9ZSh0LnRpY2swKTtpZihpKGMpKXt2YXIgaD1vKChsLXUpL2MpKmMrdTtyZXR1cm5cImNhdGVnb3J5XCIhPT10LnR5cGUmJlwibXVsdGljYXRlZ29yeVwiIT09dC50eXBlfHwoaD1zLmNvbnN0cmFpbihoLDAsdC5fY2F0ZWdvcmllcy5sZW5ndGgtMSkpLGh9dmFyIGY9Yy5jaGFyQXQoMCkscD1OdW1iZXIoYy5zdWJzdHIoMSkpO2lmKFwiTVwiPT09Zil7Zm9yKHZhciBkLGcsdixtPTAseT11O208MTA7KXtpZigoKGQ9VC50aWNrSW5jcmVtZW50KHksYyxhLHQuY2FsZW5kYXIpKS1sKSooeS1sKTw9MClyZXR1cm4gYT9NYXRoLm1pbih5LGQpOk1hdGgubWF4KHksZCk7Zz0obC0oeStkKS8yKS8oZC15KSx2PWYrKE1hdGguYWJzKE1hdGgucm91bmQoZykpfHwxKSpwLHk9VC50aWNrSW5jcmVtZW50KHksdixnPDA/IWE6YSx0LmNhbGVuZGFyKSxtKyt9cmV0dXJuIHMuZXJyb3IoXCJ0aWNrRmlyc3QgZGlkIG5vdCBjb252ZXJnZVwiLHQpLHl9aWYoXCJMXCI9PT1mKXJldHVybiBNYXRoLmxvZyhvKChNYXRoLnBvdygxMCxsKS11KS9wKSpwK3UpL01hdGguTE4xMDtpZihcIkRcIj09PWYpe3ZhciB4PVwiRDJcIj09PWM/RjpSLGI9cy5yb3VuZFVwKHMubW9kKGwsMSkseCxhKTtyZXR1cm4gTWF0aC5mbG9vcihsKStNYXRoLmxvZyhuLnJvdW5kKE1hdGgucG93KDEwLGIpLDEpKS9NYXRoLkxOMTB9dGhyb3dcInVucmVjb2duaXplZCBkdGljayBcIitTdHJpbmcoYyl9LFQudGlja1RleHQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGE9Vih0LGUpLG89XCJhcnJheVwiPT09dC50aWNrbW9kZSxsPXJ8fG8sYz10LnR5cGUsdT1cImNhdGVnb3J5XCI9PT1jP3QuZDJsX25vYWRkOnQuZDJsO2lmKG8mJkFycmF5LmlzQXJyYXkodC50aWNrdGV4dCkpe3ZhciBoPXMuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpLGY9TWF0aC5hYnMoaFsxXS1oWzBdKS8xZTQ7Zm9yKG49MDtuPHQudGlja3RleHQubGVuZ3RoJiYhKE1hdGguYWJzKGUtdSh0LnRpY2t2YWxzW25dKSk8Zik7bisrKTtpZihuPHQudGlja3RleHQubGVuZ3RoKXJldHVybiBhLnRleHQ9U3RyaW5nKHQudGlja3RleHRbbl0pLGF9ZnVuY3Rpb24gcChuKXtpZih2b2lkIDA9PT1uKXJldHVybiEwO2lmKHIpcmV0dXJuXCJub25lXCI9PT1uO3ZhciBpPXtmaXJzdDp0Ll90bWluLGxhc3Q6dC5fdG1heH1bbl07cmV0dXJuXCJhbGxcIiE9PW4mJmUhPT1pfXZhciBkPXI/XCJuZXZlclwiOlwibm9uZVwiIT09dC5leHBvbmVudGZvcm1hdCYmcCh0LnNob3dleHBvbmVudCk/XCJoaWRlXCI6XCJcIjtpZihcImRhdGVcIj09PWM/ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9dC5fdGlja3JvdW5kLG89ciYmdC5ob3ZlcmZvcm1hdHx8VC5nZXRUaWNrRm9ybWF0KHQpO24mJihhPWkoYSk/NDp7eTpcIm1cIixtOlwiZFwiLGQ6XCJNXCIsTTpcIlNcIixTOjR9W2FdKTt2YXIgbCxjPXMuZm9ybWF0RGF0ZShlLngsbyxhLHQuX2RhdGVGb3JtYXQsdC5jYWxlbmRhcix0Ll9leHRyYUZvcm1hdCksdT1jLmluZGV4T2YoXCJcXG5cIik7LTEhPT11JiYobD1jLnN1YnN0cih1KzEpLGM9Yy5zdWJzdHIoMCx1KSk7biYmKFwiMDA6MDA6MDBcIj09PWN8fFwiMDA6MDBcIj09PWM/KGM9bCxsPVwiXCIpOjg9PT1jLmxlbmd0aCYmKGM9Yy5yZXBsYWNlKC86MDAkLyxcIlwiKSkpO2wmJihyP1wiZFwiPT09YT9jKz1cIiwgXCIrbDpjPWwrKGM/XCIsIFwiK2M6XCJcIik6dC5faW5DYWxjVGlja3MmJmw9PT10Ll9wcmV2RGF0ZUhlYWR8fChjKz1cIjxicj5cIitsLHQuX3ByZXZEYXRlSGVhZD1sKSk7ZS50ZXh0PWN9KHQsYSxyLGwpOlwibG9nXCI9PT1jP2Z1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIG89dC5kdGljayxsPWUueCxjPXQudGlja2Zvcm1hdCx1PVwic3RyaW5nXCI9PXR5cGVvZiBvJiZvLmNoYXJBdCgwKTtcIm5ldmVyXCI9PT1hJiYoYT1cIlwiKTtuJiZcIkxcIiE9PXUmJihvPVwiTDNcIix1PVwiTFwiKTtpZihjfHxcIkxcIj09PXUpZS50ZXh0PUcoTWF0aC5wb3coMTAsbCksdCxhLG4pO2Vsc2UgaWYoaShvKXx8XCJEXCI9PT11JiZzLm1vZChsKy4wMSwxKTwuMSl7dmFyIGg9TWF0aC5yb3VuZChsKSxmPU1hdGguYWJzKGgpLHA9dC5leHBvbmVudGZvcm1hdDtcInBvd2VyXCI9PT1wfHxxKHApJiZIKGgpPyhlLnRleHQ9MD09PWg/MToxPT09aD9cIjEwXCI6XCIxMDxzdXA+XCIrKGg+MT9cIlwiOl8pK2YrXCI8L3N1cD5cIixlLmZvbnRTaXplKj0xLjI1KTooXCJlXCI9PT1wfHxcIkVcIj09PXApJiZmPjI/ZS50ZXh0PVwiMVwiK3ArKGg+MD9cIitcIjpfKStmOihlLnRleHQ9RyhNYXRoLnBvdygxMCxsKSx0LFwiXCIsXCJmYWtlaG92ZXJcIiksXCJEMVwiPT09byYmXCJ5XCI9PT10Ll9pZC5jaGFyQXQoMCkmJihlLmR5LT1lLmZvbnRTaXplLzYpKX1lbHNle2lmKFwiRFwiIT09dSl0aHJvd1widW5yZWNvZ25pemVkIGR0aWNrIFwiK1N0cmluZyhvKTtlLnRleHQ9U3RyaW5nKE1hdGgucm91bmQoTWF0aC5wb3coMTAscy5tb2QobCwxKSkpKSxlLmZvbnRTaXplKj0uNzV9aWYoXCJEMVwiPT09dC5kdGljayl7dmFyIGQ9U3RyaW5nKGUudGV4dCkuY2hhckF0KDApO1wiMFwiIT09ZCYmXCIxXCIhPT1kfHwoXCJ5XCI9PT10Ll9pZC5jaGFyQXQoMCk/ZS5keC09ZS5mb250U2l6ZS80OihlLmR5Kz1lLmZvbnRTaXplLzIsZS5keCs9KHQucmFuZ2VbMV0+dC5yYW5nZVswXT8xOi0xKSplLmZvbnRTaXplKihsPDA/LjU6LjI1KSkpfX0odCxhLDAsbCxkKTpcImNhdGVnb3J5XCI9PT1jP2Z1bmN0aW9uKHQsZSl7dmFyIHI9dC5fY2F0ZWdvcmllc1tNYXRoLnJvdW5kKGUueCldO3ZvaWQgMD09PXImJihyPVwiXCIpO2UudGV4dD1TdHJpbmcocil9KHQsYSk6XCJtdWx0aWNhdGVnb3J5XCI9PT1jP2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnJvdW5kKGUueCksaT10Ll9jYXRlZ29yaWVzW25dfHxbXSxhPXZvaWQgMD09PWlbMV0/XCJcIjpTdHJpbmcoaVsxXSksbz12b2lkIDA9PT1pWzBdP1wiXCI6U3RyaW5nKGlbMF0pO3I/ZS50ZXh0PW8rXCIgLSBcIithOihlLnRleHQ9YSxlLnRleHQyPW8pfSh0LGEscik6cnQodCk/ZnVuY3Rpb24odCxlLHIsbixpKXtpZihcInJhZGlhbnNcIiE9PXQudGhldGF1bml0fHxyKWUudGV4dD1HKGUueCx0LGksbik7ZWxzZXt2YXIgYT1lLngvMTgwO2lmKDA9PT1hKWUudGV4dD1cIjBcIjtlbHNle3ZhciBvPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlKXtyZXR1cm4gTWF0aC5hYnModC1lKTw9MWUtNn12YXIgcj1mdW5jdGlvbih0KXt2YXIgcj0xO2Zvcig7IWUoTWF0aC5yb3VuZCh0KnIpL3IsdCk7KXIqPTEwO3JldHVybiByfSh0KSxuPXQqcixpPU1hdGguYWJzKGZ1bmN0aW9uIHQocixuKXtyZXR1cm4gZShuLDApP3I6dChuLHIlbil9KG4scikpO3JldHVybltNYXRoLnJvdW5kKG4vaSksTWF0aC5yb3VuZChyL2kpXX0oYSk7aWYob1sxXT49MTAwKWUudGV4dD1HKHMuZGVnMnJhZChlLngpLHQsaSxuKTtlbHNle3ZhciBsPWUueDwwOzE9PT1vWzFdPzE9PT1vWzBdP2UudGV4dD1cIlxcdTAzYzBcIjplLnRleHQ9b1swXStcIlxcdTAzYzBcIjplLnRleHQ9W1wiPHN1cD5cIixvWzBdLFwiPC9zdXA+XCIsXCJcXHUyMDQ0XCIsXCI8c3ViPlwiLG9bMV0sXCI8L3N1Yj5cIixcIlxcdTAzYzBcIl0uam9pbihcIlwiKSxsJiYoZS50ZXh0PV8rZS50ZXh0KX19fX0odCxhLHIsbCxkKTpmdW5jdGlvbih0LGUscixuLGkpe1wibmV2ZXJcIj09PWk/aT1cIlwiOlwiYWxsXCI9PT10LnNob3dleHBvbmVudCYmTWF0aC5hYnMoZS54L3QuZHRpY2spPDFlLTYmJihpPVwiaGlkZVwiKTtlLnRleHQ9RyhlLngsdCxpLG4pfSh0LGEsMCxsLGQpLHQudGlja3ByZWZpeCYmIXAodC5zaG93dGlja3ByZWZpeCkmJihhLnRleHQ9dC50aWNrcHJlZml4K2EudGV4dCksdC50aWNrc3VmZml4JiYhcCh0LnNob3d0aWNrc3VmZml4KSYmKGEudGV4dCs9dC50aWNrc3VmZml4KSxcImJvdW5kYXJpZXNcIj09PXQudGlja3Nvbnx8dC5zaG93ZGl2aWRlcnMpe3ZhciBnPWZ1bmN0aW9uKGUpe3ZhciByPXQubDJwKGUpO3JldHVybiByPj0wJiZyPD10Ll9sZW5ndGg/ZTpudWxsfTthLnhibmQ9W2coYS54LS41KSxnKGEueCt0LmR0aWNrLS41KV19cmV0dXJuIGF9LFQuaG92ZXJMYWJlbFRleHQ9ZnVuY3Rpb24odCxlLHIpe2lmKHIhPT13JiZyIT09ZSlyZXR1cm4gVC5ob3ZlckxhYmVsVGV4dCh0LGUpK1wiIC0gXCIrVC5ob3ZlckxhYmVsVGV4dCh0LHIpO3ZhciBuPVwibG9nXCI9PT10LnR5cGUmJmU8PTAsaT1ULnRpY2tUZXh0KHQsdC5jMmwobj8tZTplKSxcImhvdmVyXCIpLnRleHQ7cmV0dXJuIG4/MD09PWU/XCIwXCI6XytpOml9O3ZhciBVPVtcImZcIixcInBcIixcIm5cIixcIlxcdTAzYmNcIixcIm1cIixcIlwiLFwia1wiLFwiTVwiLFwiR1wiLFwiVFwiXTtmdW5jdGlvbiBxKHQpe3JldHVyblwiU0lcIj09PXR8fFwiQlwiPT09dH1mdW5jdGlvbiBIKHQpe3JldHVybiB0PjE0fHx0PC0xNX1mdW5jdGlvbiBHKHQsZSxyLG4pe3ZhciBhPXQ8MCxvPWUuX3RpY2tyb3VuZCxsPXJ8fGUuZXhwb25lbnRmb3JtYXR8fFwiQlwiLGM9ZS5fdGlja2V4cG9uZW50LHU9VC5nZXRUaWNrRm9ybWF0KGUpLGg9ZS5zZXBhcmF0ZXRob3VzYW5kcztpZihuKXt2YXIgZj17ZXhwb25lbnRmb3JtYXQ6bCxkdGljazpcIm5vbmVcIj09PWUuc2hvd2V4cG9uZW50P2UuZHRpY2s6aSh0KSYmTWF0aC5hYnModCl8fDEscmFuZ2U6XCJub25lXCI9PT1lLnNob3dleHBvbmVudD9lLnJhbmdlLm1hcChlLnIyZCk6WzAsdHx8MV19O2ooZiksbz0oTnVtYmVyKGYuX3RpY2tyb3VuZCl8fDApKzQsYz1mLl90aWNrZXhwb25lbnQsZS5ob3ZlcmZvcm1hdCYmKHU9ZS5ob3ZlcmZvcm1hdCl9aWYodSlyZXR1cm4gZS5fbnVtRm9ybWF0KHUpKHQpLnJlcGxhY2UoLy0vZyxfKTt2YXIgcCxkPU1hdGgucG93KDEwLC1vKS8yO2lmKFwibm9uZVwiPT09bCYmKGM9MCksKHQ9TWF0aC5hYnModCkpPGQpdD1cIjBcIixhPSExO2Vsc2V7aWYodCs9ZCxjJiYodCo9TWF0aC5wb3coMTAsLWMpLG8rPWMpLDA9PT1vKXQ9U3RyaW5nKE1hdGguZmxvb3IodCkpO2Vsc2UgaWYobzwwKXt0PSh0PVN0cmluZyhNYXRoLnJvdW5kKHQpKSkuc3Vic3RyKDAsdC5sZW5ndGgrbyk7Zm9yKHZhciBnPW87ZzwwO2crKyl0Kz1cIjBcIn1lbHNle3ZhciB2PSh0PVN0cmluZyh0KSkuaW5kZXhPZihcIi5cIikrMTt2JiYodD10LnN1YnN0cigwLHYrbykucmVwbGFjZSgvXFwuPzArJC8sXCJcIikpfXQ9cy5udW1TZXBhcmF0ZSh0LGUuX3NlcGFyYXRvcnMsaCl9YyYmXCJoaWRlXCIhPT1sJiYocShsKSYmSChjKSYmKGw9XCJwb3dlclwiKSxwPWM8MD9fKy1jOlwicG93ZXJcIiE9PWw/XCIrXCIrYzpTdHJpbmcoYyksXCJlXCI9PT1sfHxcIkVcIj09PWw/dCs9bCtwOlwicG93ZXJcIj09PWw/dCs9XCJcXHhkNzEwPHN1cD5cIitwK1wiPC9zdXA+XCI6XCJCXCI9PT1sJiY5PT09Yz90Kz1cIkJcIjpxKGwpJiYodCs9VVtjLzMrNV0pKTtyZXR1cm4gYT9fK3Q6dH1mdW5jdGlvbiBZKHQsZSl7dmFyIHI9dC5faWQuY2hhckF0KDApLG49dC5fdGlja0FuZ2xlc1tlXXx8MCxpPXMuZGVnMnJhZChuKSxhPU1hdGguc2luKGkpLG89TWF0aC5jb3MoaSksbD0wLGM9MDtyZXR1cm4gdC5fc2VsZWN0aW9uc1tlXS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9JCh0aGlzKSxlPWguYkJveCh0Lm5vZGUoKSkscj1lLndpZHRoLG49ZS5oZWlnaHQ7bD1NYXRoLm1heChsLG8qcixhKm4pLGM9TWF0aC5tYXgoYyxhKnIsbypuKX0pLHt4OmMseTpsfVtyXX1mdW5jdGlvbiBXKHQpe3JldHVyblt0LnRleHQsdC54LHQuYXhJbmZvLHQuZm9udCx0LmZvbnRTaXplLHQuZm9udENvbG9yXS5qb2luKFwiX1wiKX1mdW5jdGlvbiBYKHQsZSl7dmFyIHIsbj10Ll9mdWxsTGF5b3V0Ll9zaXplLGk9ZS5faWQuY2hhckF0KDApLGE9ZS5zaWRlO3JldHVyblwiZnJlZVwiIT09ZS5hbmNob3I/cj1TLmdldEZyb21JZCh0LGUuYW5jaG9yKTpcInhcIj09PWk/cj17X29mZnNldDpuLnQrKDEtKGUucG9zaXRpb258fDApKSpuLmgsX2xlbmd0aDowfTpcInlcIj09PWkmJihyPXtfb2Zmc2V0Om4ubCsoZS5wb3NpdGlvbnx8MCkqbi53LF9sZW5ndGg6MH0pLFwidG9wXCI9PT1hfHxcImxlZnRcIj09PWE/ci5fb2Zmc2V0OlwiYm90dG9tXCI9PT1hfHxcInJpZ2h0XCI9PT1hP3IuX29mZnNldCtyLl9sZW5ndGg6dm9pZCAwfWZ1bmN0aW9uIFoodCxlKXt2YXIgcj10LmwycChlKTtyZXR1cm4gcj4xJiZyPHQuX2xlbmd0aC0xfWZ1bmN0aW9uICQodCl7dmFyIGU9bi5zZWxlY3QodCkscj1lLnNlbGVjdChcIi50ZXh0LW1hdGgtZ3JvdXBcIik7cmV0dXJuIHIuZW1wdHkoKT9lLnNlbGVjdChcInRleHRcIik6cn1mdW5jdGlvbiBKKHQpe3JldHVybiB0Ll9pZCtcIi5hdXRvbWFyZ2luXCJ9ZnVuY3Rpb24gSyh0KXtyZXR1cm4gdC5faWQrXCIucmFuZ2VzbGlkZXJcIn1mdW5jdGlvbiBRKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspLTE9PT10LmluZGV4T2YoZVtyXSkmJnQucHVzaChlW3JdKX1mdW5jdGlvbiB0dCh0LGUscil7dmFyIG4saSxhPVtdLG89W10sbD10LmxheW91dDtmb3Iobj0wO248ZS5sZW5ndGg7bisrKWEucHVzaChULmdldEZyb21JZCh0LGVbbl0pKTtmb3Iobj0wO248ci5sZW5ndGg7bisrKW8ucHVzaChULmdldEZyb21JZCh0LHJbbl0pKTt2YXIgYz1PYmplY3Qua2V5cyhmKSx1PVtcImFuY2hvclwiLFwiZG9tYWluXCIsXCJvdmVybGF5aW5nXCIsXCJwb3NpdGlvblwiLFwic2lkZVwiLFwidGlja2FuZ2xlXCIsXCJlZGl0VHlwZVwiXSxoPVtcImxpbmVhclwiLFwibG9nXCJdO2ZvcihuPTA7bjxjLmxlbmd0aDtuKyspe3ZhciBwPWNbbl0sZD1hWzBdW3BdLGc9b1swXVtwXSx2PSEwLG09ITEseT0hMTtpZihcIl9cIiE9PXAuY2hhckF0KDApJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBkJiYtMT09PXUuaW5kZXhPZihwKSl7Zm9yKGk9MTtpPGEubGVuZ3RoJiZ2O2krKyl7dmFyIHg9YVtpXVtwXTtcInR5cGVcIj09PXAmJi0xIT09aC5pbmRleE9mKGQpJiYtMSE9PWguaW5kZXhPZih4KSYmZCE9PXg/bT0hMDp4IT09ZCYmKHY9ITEpfWZvcihpPTE7aTxvLmxlbmd0aCYmdjtpKyspe3ZhciBiPW9baV1bcF07XCJ0eXBlXCI9PT1wJiYtMSE9PWguaW5kZXhPZihnKSYmLTEhPT1oLmluZGV4T2YoYikmJmchPT1iP3k9ITA6b1tpXVtwXSE9PWcmJih2PSExKX12JiYobSYmKGxbYVswXS5fbmFtZV0udHlwZT1cImxpbmVhclwiKSx5JiYobFtvWzBdLl9uYW1lXS50eXBlPVwibGluZWFyXCIpLGV0KGwscCxhLG8sdC5fZnVsbExheW91dC5fZGZsdFRpdGxlKSl9fWZvcihuPTA7bjx0Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zLmxlbmd0aDtuKyspe3ZhciBfPXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnNbbl07LTEhPT1lLmluZGV4T2YoXy54cmVmKSYmLTEhPT1yLmluZGV4T2YoXy55cmVmKSYmcy5zd2FwQXR0cnMobC5hbm5vdGF0aW9uc1tuXSxbXCI/XCJdKX19ZnVuY3Rpb24gZXQodCxlLHIsbixpKXt2YXIgYSxvPXMubmVzdGVkUHJvcGVydHksbD1vKHRbclswXS5fbmFtZV0sZSkuZ2V0KCksYz1vKHRbblswXS5fbmFtZV0sZSkuZ2V0KCk7Zm9yKFwidGl0bGVcIj09PWUmJihsJiZsLnRleHQ9PT1pLngmJihsLnRleHQ9aS55KSxjJiZjLnRleHQ9PT1pLnkmJihjLnRleHQ9aS54KSksYT0wO2E8ci5sZW5ndGg7YSsrKW8odCxyW2FdLl9uYW1lK1wiLlwiK2UpLnNldChjKTtmb3IoYT0wO2E8bi5sZW5ndGg7YSsrKW8odCxuW2FdLl9uYW1lK1wiLlwiK2UpLnNldChsKX1mdW5jdGlvbiBydCh0KXtyZXR1cm5cImFuZ3VsYXJheGlzXCI9PT10Ll9pZH1ULmdldFRpY2tGb3JtYXQ9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHMsbDtmdW5jdGlvbiBjKHQpe3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiB0P3Q6TnVtYmVyKHQucmVwbGFjZShcIk1cIixcIlwiKSkqdn1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9W1wiTFwiLFwiRFwiXTtpZih0eXBlb2YgdD09dHlwZW9mIGUpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXJldHVybiB0LWU7dmFyIG49ci5pbmRleE9mKHQuY2hhckF0KDApKSxpPXIuaW5kZXhPZihlLmNoYXJBdCgwKSk7cmV0dXJuIG49PT1pP051bWJlcih0LnJlcGxhY2UoLyhMfEQpL2csXCJcIikpLU51bWJlcihlLnJlcGxhY2UoLyhMfEQpL2csXCJcIikpOm4taX1yZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdD8xOi0xfWZ1bmN0aW9uIGgodCxlKXt2YXIgcj1udWxsPT09ZVswXSxuPW51bGw9PT1lWzFdLGk9dSh0LGVbMF0pPj0wLGE9dSh0LGVbMV0pPD0wO3JldHVybihyfHxpKSYmKG58fGEpfWlmKHQudGlja2Zvcm1hdHN0b3BzJiZ0LnRpY2tmb3JtYXRzdG9wcy5sZW5ndGg+MClzd2l0Y2godC50eXBlKXtjYXNlXCJkYXRlXCI6Y2FzZVwibGluZWFyXCI6Zm9yKGU9MDtlPHQudGlja2Zvcm1hdHN0b3BzLmxlbmd0aDtlKyspaWYoKG49dC50aWNrZm9ybWF0c3RvcHNbZV0pLmVuYWJsZWQmJihpPXQuZHRpY2ssYT1uLmR0aWNrcmFuZ2Usbz12b2lkIDAsdm9pZCAwLHZvaWQgMCxvPWN8fGZ1bmN0aW9uKHQpe3JldHVybiB0fSxzPWFbMF0sbD1hWzFdLCghcyYmXCJudW1iZXJcIiE9dHlwZW9mIHN8fG8ocyk8PW8oaSkpJiYoIWwmJlwibnVtYmVyXCIhPXR5cGVvZiBsfHxvKGwpPj1vKGkpKSkpe3I9bjticmVha31icmVhaztjYXNlXCJsb2dcIjpmb3IoZT0wO2U8dC50aWNrZm9ybWF0c3RvcHMubGVuZ3RoO2UrKylpZigobj10LnRpY2tmb3JtYXRzdG9wc1tlXSkuZW5hYmxlZCYmaCh0LmR0aWNrLG4uZHRpY2tyYW5nZSkpe3I9bjticmVha319cmV0dXJuIHI/ci52YWx1ZTp0LnRpY2tmb3JtYXR9LFQuZ2V0U3VicGxvdHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0Ll9zdWJwbG90cyxuPXIuY2FydGVzaWFuLmNvbmNhdChyLmdsMmR8fFtdKSxpPWU/VC5maW5kU3VicGxvdHNXaXRoQXhpcyhuLGUpOm47cmV0dXJuIGkuc29ydChmdW5jdGlvbih0LGUpe3ZhciByPXQuc3Vic3RyKDEpLnNwbGl0KFwieVwiKSxuPWUuc3Vic3RyKDEpLnNwbGl0KFwieVwiKTtyZXR1cm4gclswXT09PW5bMF0/K3JbMV0tK25bMV06K3JbMF0tK25bMF19KSxpfSxULmZpbmRTdWJwbG90c1dpdGhBeGlzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBSZWdFeHAoXCJ4XCI9PT1lLl9pZC5jaGFyQXQoMCk/XCJeXCIrZS5faWQrXCJ5XCI6ZS5faWQrXCIkXCIpLG49W10saT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT10W2ldO3IudGVzdChhKSYmbi5wdXNoKGEpfXJldHVybiBufSxULm1ha2VDbGlwUGF0aHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtpZighZS5faGFzT25seUxhcmdlU3Bsb21zKXt2YXIgcixpLGE9e19vZmZzZXQ6MCxfbGVuZ3RoOmUud2lkdGgsX2lkOlwiXCJ9LG89e19vZmZzZXQ6MCxfbGVuZ3RoOmUuaGVpZ2h0LF9pZDpcIlwifSxzPVQubGlzdCh0LFwieFwiLCEwKSxsPVQubGlzdCh0LFwieVwiLCEwKSxjPVtdO2ZvcihyPTA7cjxzLmxlbmd0aDtyKyspZm9yKGMucHVzaCh7eDpzW3JdLHk6b30pLGk9MDtpPGwubGVuZ3RoO2krKykwPT09ciYmYy5wdXNoKHt4OmEseTpsW2ldfSksYy5wdXNoKHt4OnNbcl0seTpsW2ldfSk7dmFyIHU9ZS5fY2xpcHMuc2VsZWN0QWxsKFwiLmF4ZXNjbGlwXCIpLmRhdGEoYyxmdW5jdGlvbih0KXtyZXR1cm4gdC54Ll9pZCt0LnkuX2lkfSk7dS5lbnRlcigpLmFwcGVuZChcImNsaXBQYXRoXCIpLmNsYXNzZWQoXCJheGVzY2xpcFwiLCEwKS5hdHRyKFwiaWRcIixmdW5jdGlvbih0KXtyZXR1cm5cImNsaXBcIitlLl91aWQrdC54Ll9pZCt0LnkuX2lkfSkuYXBwZW5kKFwicmVjdFwiKSx1LmV4aXQoKS5yZW1vdmUoKSx1LmVhY2goZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuc2VsZWN0KFwicmVjdFwiKS5hdHRyKHt4OnQueC5fb2Zmc2V0fHwwLHk6dC55Ll9vZmZzZXR8fDAsd2lkdGg6dC54Ll9sZW5ndGh8fDEsaGVpZ2h0OnQueS5fbGVuZ3RofHwxfSl9KX19LFQuZHJhdz1mdW5jdGlvbih0LGUscil7dmFyIG49dC5fZnVsbExheW91dDtcInJlZHJhd1wiPT09ZSYmbi5fcGFwZXIuc2VsZWN0QWxsKFwiZy5zdWJwbG90XCIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPW4uX3Bsb3RzW2VdLGk9ci54YXhpcyxhPXIueWF4aXM7ci54YXhpc2xheWVyLnNlbGVjdEFsbChcIi5cIitpLl9pZCtcInRpY2tcIikucmVtb3ZlKCksci55YXhpc2xheWVyLnNlbGVjdEFsbChcIi5cIithLl9pZCtcInRpY2tcIikucmVtb3ZlKCksci54YXhpc2xheWVyLnNlbGVjdEFsbChcIi5cIitpLl9pZCtcInRpY2syXCIpLnJlbW92ZSgpLHIueWF4aXNsYXllci5zZWxlY3RBbGwoXCIuXCIrYS5faWQrXCJ0aWNrMlwiKS5yZW1vdmUoKSxyLnhheGlzbGF5ZXIuc2VsZWN0QWxsKFwiLlwiK2kuX2lkK1wiZGl2aWRlclwiKS5yZW1vdmUoKSxyLnlheGlzbGF5ZXIuc2VsZWN0QWxsKFwiLlwiK2EuX2lkK1wiZGl2aWRlclwiKS5yZW1vdmUoKSxyLmdyaWRsYXllciYmci5ncmlkbGF5ZXIuc2VsZWN0QWxsKFwicGF0aFwiKS5yZW1vdmUoKSxyLnplcm9saW5lbGF5ZXImJnIuemVyb2xpbmVsYXllci5zZWxlY3RBbGwoXCJwYXRoXCIpLnJlbW92ZSgpLG4uX2luZm9sYXllci5zZWxlY3QoXCIuZy1cIitpLl9pZCtcInRpdGxlXCIpLnJlbW92ZSgpLG4uX2luZm9sYXllci5zZWxlY3QoXCIuZy1cIithLl9pZCtcInRpdGxlXCIpLnJlbW92ZSgpfSk7dmFyIGk9ZSYmXCJyZWRyYXdcIiE9PWU/ZTpULmxpc3RJZHModCk7cmV0dXJuIHMuc3luY09yQXN5bmMoaS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoZSl7dmFyIG49VC5nZXRGcm9tSWQodCxlKSxpPVQuZHJhd09uZSh0LG4scik7cmV0dXJuIG4uX3I9bi5yYW5nZS5zbGljZSgpLG4uX3JsPXMuc2ltcGxlTWFwKG4uX3Isbi5yMmwpLGl9fX0pKX0sVC5kcmF3T25lPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGw7cj1yfHx7fSxlLnNldFNjYWxlKCk7dmFyIGY9dC5fZnVsbExheW91dCxwPWUuX2lkLGQ9cC5jaGFyQXQoMCksZz1ULmNvdW50ZXJMZXR0ZXIocCksdj1lLl9tYWluU3VicGxvdCxtPWUuX21haW5MaW5lUG9zaXRpb24seT1lLl9tYWluTWlycm9yUG9zaXRpb24seD1mLl9wbG90c1t2XVtkK1wiYXhpc2xheWVyXCJdLGI9ZS5fc3VicGxvdHNXaXRoLF89ZS5fdmFscz1ULmNhbGNUaWNrcyhlKSx3PVtlLm1pcnJvcixtLHldLmpvaW4oXCJfXCIpO2ZvcihuPTA7bjxfLmxlbmd0aDtuKyspX1tuXS5heEluZm89dztpZihlLnZpc2libGUpe2UuX3NlbGVjdGlvbnM9e30sZS5fdGlja0FuZ2xlcz17fTt2YXIgayxNLFM9VC5tYWtlVHJhbnNGbihlKTtpZihcImJvdW5kYXJpZXNcIj09PWUudGlja3Nvbil7dmFyIEU9ZnVuY3Rpb24odCxlKXt2YXIgcixuPVtdLGk9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnhibmRbZV07bnVsbCE9PXImJm4ucHVzaChzLmV4dGVuZEZsYXQoe30sdCx7eDpyfSkpfTtpZihlLmxlbmd0aCl7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKylpKGVbcl0sMCk7aShlW3ItMV0sMSl9cmV0dXJuIG59KDAsXyk7TT1ULmNsaXBFbmRzKGUsRSksaz1cImluc2lkZVwiPT09ZS50aWNrcz9NOkV9ZWxzZSBNPVQuY2xpcEVuZHMoZSxfKSxrPVwiaW5zaWRlXCI9PT1lLnRpY2tzP006Xzt2YXIgQz1lLl9ncmlkVmFscz1NLEw9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9W10sYT1mdW5jdGlvbih0LGUpe3ZhciByPXQueGJuZFtlXTtudWxsIT09ciYmaS5wdXNoKHMuZXh0ZW5kRmxhdCh7fSx0LHt4OnJ9KSl9O2lmKHQuc2hvd2RpdmlkZXJzJiZlLmxlbmd0aCl7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG89ZVtyXTtvLnRleHQyIT09biYmYShvLDApLG49by50ZXh0Mn1hKGVbci0xXSwxKX1yZXR1cm4gaX0oZSxfKTtpZighZi5faGFzT25seUxhcmdlU3Bsb21zKXt2YXIgej17fTtmb3Iobj0wO248Yi5sZW5ndGg7bisrKXtpPWJbbl07dmFyIE89KGw9Zi5fcGxvdHNbaV0pW2crXCJheGlzXCJdLEk9Ty5fbWFpbkF4aXMuX2lkO2lmKCF6W0ldKXt6W0ldPTE7dmFyIEQ9XCJ4XCI9PT1kP1wiTTAsXCIrTy5fb2Zmc2V0K1widlwiK08uX2xlbmd0aDpcIk1cIitPLl9vZmZzZXQrXCIsMGhcIitPLl9sZW5ndGg7VC5kcmF3R3JpZCh0LGUse3ZhbHM6Qyxjb3VudGVyQXhpczpPLGxheWVyOmwuZ3JpZGxheWVyLnNlbGVjdChcIi5cIitwKSxwYXRoOkQsdHJhbnNGbjpTfSksVC5kcmF3WmVyb0xpbmUodCxlLHtjb3VudGVyQXhpczpPLGxheWVyOmwuemVyb2xpbmVsYXllcixwYXRoOkQsdHJhbnNGbjpTfSl9fX12YXIgUD1ULmdldFRpY2tTaWducyhlKSxSPVtdO2lmKGUudGlja3Mpe3ZhciBGLEIsTixqPVQubWFrZVRpY2tQYXRoKGUsbSxQWzJdKTtpZihlLl9hbmNob3JBeGlzJiZlLm1pcnJvciYmITAhPT1lLm1pcnJvcj8oRj1ULm1ha2VUaWNrUGF0aChlLHksUFszXSksQj1qK0YpOihGPVwiXCIsQj1qKSxlLnNob3dkaXZpZGVycyYmXCJvdXRzaWRlXCI9PT1lLnRpY2tzJiZcImJvdW5kYXJpZXNcIj09PWUudGlja3Nvbil7dmFyIFU9e307Zm9yKG49MDtuPEwubGVuZ3RoO24rKylVW0xbbl0ueF09MTtOPWZ1bmN0aW9uKHQpe3JldHVybiBVW3QueF0/RjpCfX1lbHNlIE49QjtULmRyYXdUaWNrcyh0LGUse3ZhbHM6ayxsYXllcjp4LHBhdGg6Tix0cmFuc0ZuOlN9KSxSPU9iamVjdC5rZXlzKGUuX2xpbmVwb3NpdGlvbnN8fHt9KX1mb3Iobj0wO248Ui5sZW5ndGg7bisrKXtpPVJbbl0sbD1mLl9wbG90c1tpXTt2YXIgcT1lLl9saW5lcG9zaXRpb25zW2ldfHxbXSxIPVQubWFrZVRpY2tQYXRoKGUscVswXSxQWzBdKStULm1ha2VUaWNrUGF0aChlLHFbMV0sUFsxXSk7VC5kcmF3VGlja3ModCxlLHt2YWxzOmssbGF5ZXI6bFtkK1wiYXhpc2xheWVyXCJdLHBhdGg6SCx0cmFuc0ZuOlN9KX12YXIgRz1bXTtpZihHLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gVC5kcmF3TGFiZWxzKHQsZSx7dmFsczpfLGxheWVyOngsdHJhbnNGbjpTLGxhYmVsRm5zOlQubWFrZUxhYmVsRm5zKGUsbSl9KX0pLFwibXVsdGljYXRlZ29yeVwiPT09ZS50eXBlKXt2YXIgWj0wLCQ9e3g6Mix5OjEwfVtkXSxRPVBbMl0qKFwiaW5zaWRlXCI9PT1lLnRpY2tzPy0xOjEpO0cucHVzaChmdW5jdGlvbigpe3JldHVybiBaKz1ZKGUscCtcInRpY2tcIikrJCxaKz1lLl90aWNrQW5nbGVzW3ArXCJ0aWNrXCJdP2UudGlja2ZvbnQuc2l6ZSpBOjAsVC5kcmF3TGFiZWxzKHQsZSx7dmFsczpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPXt9LGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXTtuW2EudGV4dDJdP25bYS50ZXh0Ml0ucHVzaChhLngpOm5bYS50ZXh0Ml09W2EueF19Zm9yKHZhciBvIGluIG4pci5wdXNoKFYodCxzLmludGVycChuW29dLC41KSxvKSk7cmV0dXJuIHJ9KGUsXyksbGF5ZXI6eCxjbHM6cCtcInRpY2syXCIscmVwb3NpdGlvbk9uVXBkYXRlOiEwLHNlY29uZGFyeTohMCx0cmFuc0ZuOlMsbGFiZWxGbnM6VC5tYWtlTGFiZWxGbnMoZSxtK1oqUSl9KX0pLEcucHVzaChmdW5jdGlvbigpe3JldHVybiBaKz1ZKGUscCtcInRpY2syXCIpLGUuX2xhYmVsTGVuZ3RoPVosZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuX2lkK1wiZGl2aWRlclwiLGk9ci52YWxzLGE9ci5sYXllci5zZWxlY3RBbGwoXCJwYXRoLlwiK24pLmRhdGEoaSxXKTthLmV4aXQoKS5yZW1vdmUoKSxhLmVudGVyKCkuaW5zZXJ0KFwicGF0aFwiLFwiOmZpcnN0LWNoaWxkXCIpLmNsYXNzZWQobiwxKS5jbGFzc2VkKFwiY3Jpc3BcIiwxKS5jYWxsKHUuc3Ryb2tlLGUuZGl2aWRlcmNvbG9yKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLGguY3Jpc3BSb3VuZCh0LGUuZGl2aWRlcndpZHRoLDEpK1wicHhcIiksYS5hdHRyKFwidHJhbnNmb3JtXCIsci50cmFuc0ZuKS5hdHRyKFwiZFwiLHIucGF0aCl9KHQsZSx7dmFsczpMLGxheWVyOngscGF0aDpULm1ha2VUaWNrUGF0aChlLG0sUSxaKSx0cmFuc0ZuOlN9KX0pfXZhciB0dD1vLmdldENvbXBvbmVudE1ldGhvZChcInJhbmdlc2xpZGVyXCIsXCJpc1Zpc2libGVcIikoZSk7cmV0dXJuIEcucHVzaChmdW5jdGlvbigpe2lmKGUuc2hvd3RpY2tsYWJlbHMpe3ZhciByPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj14Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlLl9ib3VuZGluZ0JveD17d2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHQsbGVmdDpuLmxlZnQtci5sZWZ0LHJpZ2h0Om4ucmlnaHQtci5sZWZ0LHRvcDpuLnRvcC1yLnRvcCxib3R0b206bi5ib3R0b20tci50b3B9fWVsc2V7dmFyIGksYT1mLl9zaXplO1wieFwiPT09ZD8oaT1cImZyZWVcIj09PWUuYW5jaG9yP2EudCthLmgqKDEtZS5wb3NpdGlvbik6YS50K2EuaCooMS1lLl9hbmNob3JBeGlzLmRvbWFpblt7Ym90dG9tOjAsdG9wOjF9W2Uuc2lkZV1dKSxlLl9ib3VuZGluZ0JveD17dG9wOmksYm90dG9tOmksbGVmdDplLl9vZmZzZXQscmlnaHQ6ZS5fb2Zmc2V0K2UuX2xlbmd0aCx3aWR0aDplLl9sZW5ndGgsaGVpZ2h0OjB9KTooaT1cImZyZWVcIj09PWUuYW5jaG9yP2EubCthLncqZS5wb3NpdGlvbjphLmwrYS53KmUuX2FuY2hvckF4aXMuZG9tYWluW3tsZWZ0OjAscmlnaHQ6MX1bZS5zaWRlXV0sZS5fYm91bmRpbmdCb3g9e2xlZnQ6aSxyaWdodDppLGJvdHRvbTplLl9vZmZzZXQrZS5fbGVuZ3RoLHRvcDplLl9vZmZzZXQsaGVpZ2h0OmUuX2xlbmd0aCx3aWR0aDowfSl9aWYoYil7Zm9yKHZhciBvPWUuX2NvdW50ZXJTcGFuPVsxLzAsLTEvMF0scz0wO3M8Yi5sZW5ndGg7cysrKXt2YXIgbD1mLl9wbG90c1tiW3NdXVtcInhcIj09PWQ/XCJ5YXhpc1wiOlwieGF4aXNcIl07ZXQobyxbbC5fb2Zmc2V0LGwuX29mZnNldCtsLl9sZW5ndGhdKX1cImZyZWVcIj09PWUuYW5jaG9yJiZldChvLFwieFwiPT09ZD9bZS5fYm91bmRpbmdCb3guYm90dG9tLGUuX2JvdW5kaW5nQm94LnRvcF06W2UuX2JvdW5kaW5nQm94LnJpZ2h0LGUuX2JvdW5kaW5nQm94LmxlZnRdKX19LGZ1bmN0aW9uKCl7dmFyIHIsbixpPWUuc2lkZS5jaGFyQXQoMCk7aWYodHQmJihuPW8uZ2V0Q29tcG9uZW50TWV0aG9kKFwicmFuZ2VzbGlkZXJcIixcImF1dG9NYXJnaW5PcHRzXCIpKHQsZSkpLGEuYXV0b01hcmdpbih0LEsoZSksbiksZS5hdXRvbWFyZ2luJiYoIXR0fHxcImJcIiE9PWkpKXtyPXt4OjAseTowLHI6MCxsOjAsdDowLGI6MH07dmFyIHMsbCxjPWUuX2JvdW5kaW5nQm94LHU9WCh0LGUpO3N3aXRjaChkK2kpe2Nhc2VcInhiXCI6cz0wLGw9Yy50b3AtdSxyW2ldPWMuaGVpZ2h0O2JyZWFrO2Nhc2VcInh0XCI6cz0xLGw9dS1jLmJvdHRvbSxyW2ldPWMuaGVpZ2h0O2JyZWFrO2Nhc2VcInlsXCI6cz0wLGw9dS1jLnJpZ2h0LHJbaV09Yy53aWR0aDticmVhaztjYXNlXCJ5clwiOnM9MSxsPWMubGVmdC11LHJbaV09Yy53aWR0aH1pZihyW2ddPVwiZnJlZVwiPT09ZS5hbmNob3I/ZS5wb3NpdGlvbjplLl9hbmNob3JBeGlzLmRvbWFpbltzXSxyW2ldPjAmJihyW2ldKz1sKSxlLnRpdGxlLnRleHQhPT1mLl9kZmx0VGl0bGVbZF0mJihyW2ldKz1lLnRpdGxlLmZvbnQuc2l6ZSksXCJ4XCI9PT1kJiZjLndpZHRoPjApe3ZhciBoPWMucmlnaHQtKGUuX29mZnNldCtlLl9sZW5ndGgpO2g+MCYmKHIueD0xLHIucj1oKTt2YXIgcD1lLl9vZmZzZXQtYy5sZWZ0O3A+MCYmKHIueD0wLHIubD1wKX1lbHNlIGlmKFwieVwiPT09ZCYmYy5oZWlnaHQ+MCl7dmFyIHY9Yy5ib3R0b20tKGUuX29mZnNldCtlLl9sZW5ndGgpO3Y+MCYmKHIueT0wLHIuYj12KTt2YXIgbT1lLl9vZmZzZXQtYy50b3A7bT4wJiYoci55PTEsci50PW0pfX1hLmF1dG9NYXJnaW4odCxKKGUpLHIpfSksci5za2lwVGl0bGV8fHR0JiZlLl9ib3VuZGluZ0JveCYmXCJib3R0b21cIj09PWUuc2lkZXx8Ry5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10Ll9mdWxsTGF5b3V0LGk9ZS5faWQsYT1pLmNoYXJBdCgwKSxvPWUudGl0bGUuZm9udC5zaXplO2lmKFwibXVsdGljYXRlZ29yeVwiPT09ZS50eXBlKXI9ZS5fbGFiZWxMZW5ndGg7ZWxzZXtyPTEwKzEuNSpvKyhlLmxpbmV3aWR0aD9lLmxpbmV3aWR0aC0xOjApfXZhciBzLGwsdSxmLHA9WCh0LGUpO1wieFwiPT09YT8obD1lLl9vZmZzZXQrZS5fbGVuZ3RoLzIsdT1cInRvcFwiPT09ZS5zaWRlPy1yLW8qKGUuc2hvd3RpY2tsYWJlbHM/MTowKTpyK28qKGUuc2hvd3RpY2tsYWJlbHM/MS41Oi41KSx1Kz1wKToodT1lLl9vZmZzZXQrZS5fbGVuZ3RoLzIsbD1cInJpZ2h0XCI9PT1lLnNpZGU/citvKihlLnNob3d0aWNrbGFiZWxzPzE6LjUpOi1yLW8qKGUuc2hvd3RpY2tsYWJlbHM/LjU6MCksbCs9cCxzPXtyb3RhdGU6XCItOTBcIixvZmZzZXQ6MH0pO2lmKFwibXVsdGljYXRlZ29yeVwiIT09ZS50eXBlKXt2YXIgZD1lLl9zZWxlY3Rpb25zW2UuX2lkK1widGlja1wiXTtpZihmPXtzZWxlY3Rpb246ZCxzaWRlOmUuc2lkZX0sZCYmZC5ub2RlKCkmJmQubm9kZSgpLnBhcmVudE5vZGUpe3ZhciBnPWguZ2V0VHJhbnNsYXRlKGQubm9kZSgpLnBhcmVudE5vZGUpO2Yub2Zmc2V0TGVmdD1nLngsZi5vZmZzZXRUb3A9Zy55fX1yZXR1cm4gYy5kcmF3KHQsaStcInRpdGxlXCIse3Byb3BDb250YWluZXI6ZSxwcm9wTmFtZTplLl9uYW1lK1wiLnRpdGxlLnRleHRcIixwbGFjZWhvbGRlcjpuLl9kZmx0VGl0bGVbYV0sYXZvaWQ6Zix0cmFuc2Zvcm06cyxhdHRyaWJ1dGVzOnt4OmwseTp1LFwidGV4dC1hbmNob3JcIjpcIm1pZGRsZVwifX0pfSh0LGUpfSkscy5zeW5jT3JBc3luYyhHKX1mdW5jdGlvbiBldCh0LGUpe3RbMF09TWF0aC5taW4odFswXSxlWzBdKSx0WzFdPU1hdGgubWF4KHRbMV0sZVsxXSl9fSxULmdldFRpY2tTaWducz1mdW5jdGlvbih0KXt2YXIgZT10Ll9pZC5jaGFyQXQoMCkscj17eDpcInRvcFwiLHk6XCJyaWdodFwifVtlXSxuPXQuc2lkZT09PXI/MTotMSxpPVstMSwxLG4sLW5dO3JldHVyblwiaW5zaWRlXCIhPT10LnRpY2tzPT0oXCJ4XCI9PT1lKSYmKGk9aS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuLXR9KSksaX0sVC5tYWtlVHJhbnNGbj1mdW5jdGlvbih0KXt2YXIgZT10Ll9pZC5jaGFyQXQoMCkscj10Ll9vZmZzZXQ7cmV0dXJuXCJ4XCI9PT1lP2Z1bmN0aW9uKGUpe3JldHVyblwidHJhbnNsYXRlKFwiKyhyK3QubDJwKGUueCkpK1wiLDApXCJ9OmZ1bmN0aW9uKGUpe3JldHVyblwidHJhbnNsYXRlKDAsXCIrKHIrdC5sMnAoZS54KSkrXCIpXCJ9fSxULm1ha2VUaWNrUGF0aD1mdW5jdGlvbih0LGUscixuKXtuPXZvaWQgMCE9PW4/bjp0LnRpY2tsZW47dmFyIGk9dC5faWQuY2hhckF0KDApLGE9KHQubGluZXdpZHRofHwxKS8yO3JldHVyblwieFwiPT09aT9cIk0wLFwiKyhlK2EqcikrXCJ2XCIrbipyOlwiTVwiKyhlK2EqcikrXCIsMGhcIituKnJ9LFQubWFrZUxhYmVsRm5zPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Ll9pZC5jaGFyQXQoMCksYT1cImJvdW5kYXJpZXNcIiE9PXQudGlja3NvbiYmXCJvdXRzaWRlXCI9PT10LnRpY2tzLG89MCxsPTA7aWYoYSYmKG8rPXQudGlja2xlbiksciYmXCJvdXRzaWRlXCI9PT10LnRpY2tzKXt2YXIgYz1zLmRlZzJyYWQocik7bz10LnRpY2tsZW4qTWF0aC5jb3MoYykrMSxsPXQudGlja2xlbipNYXRoLnNpbihjKX10LnNob3d0aWNrbGFiZWxzJiYoYXx8dC5zaG93bGluZSkmJihvKz0uMip0LnRpY2tmb250LnNpemUpO3ZhciB1LGgsZixwLGQ9e2xhYmVsU3RhbmRvZmY6bys9KHQubGluZXdpZHRofHwxKS8yLGxhYmVsU2hpZnQ6bH07cmV0dXJuXCJ4XCI9PT1uPyhwPVwiYm90dG9tXCI9PT10LnNpZGU/MTotMSx1PWwqcCxoPWUrbypwLGY9XCJib3R0b21cIj09PXQuc2lkZT8xOi0uMixkLnhGbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5keCt1fSxkLnlGbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5keStoK3QuZm9udFNpemUqZn0sZC5hbmNob3JGbj1mdW5jdGlvbih0LGUpe3JldHVybiBpKGUpJiYwIT09ZSYmMTgwIT09ZT9lKnA8MD9cImVuZFwiOlwic3RhcnRcIjpcIm1pZGRsZVwifSxkLmhlaWdodEZuPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gcjwtNjB8fHI+NjA/LS41Km46XCJ0b3BcIj09PXQuc2lkZT8tbjowfSk6XCJ5XCI9PT1uJiYocD1cInJpZ2h0XCI9PT10LnNpZGU/MTotMSx1PW8saD0tbCpwLGY9OTA9PT1NYXRoLmFicyh0LnRpY2thbmdsZSk/LjU6MCxkLnhGbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5keCtlKyh1K3QuZm9udFNpemUqZikqcH0sZC55Rm49ZnVuY3Rpb24odCl7cmV0dXJuIHQuZHkraCt0LmZvbnRTaXplKmt9LGQuYW5jaG9yRm49ZnVuY3Rpb24oZSxyKXtyZXR1cm4gaShyKSYmOTA9PT1NYXRoLmFicyhyKT9cIm1pZGRsZVwiOlwicmlnaHRcIj09PXQuc2lkZT9cInN0YXJ0XCI6XCJlbmRcIn0sZC5oZWlnaHRGbj1mdW5jdGlvbihlLHIsbil7cmV0dXJuKHIqPVwibGVmdFwiPT09dC5zaWRlPzE6LTEpPC0zMD8tbjpyPDMwPy0uNSpuOjB9KSxkfSxULmRyYXdUaWNrcz1mdW5jdGlvbih0LGUscil7cj1yfHx7fTt2YXIgbj1lLl9pZCtcInRpY2tcIixpPXIubGF5ZXIuc2VsZWN0QWxsKFwicGF0aC5cIituKS5kYXRhKGUudGlja3M/ci52YWxzOltdLFcpO2kuZXhpdCgpLnJlbW92ZSgpLGkuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQobiwxKS5jbGFzc2VkKFwidGlja3NcIiwxKS5jbGFzc2VkKFwiY3Jpc3BcIiwhMSE9PXIuY3Jpc3ApLmNhbGwodS5zdHJva2UsZS50aWNrY29sb3IpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsaC5jcmlzcFJvdW5kKHQsZS50aWNrd2lkdGgsMSkrXCJweFwiKS5hdHRyKFwiZFwiLHIucGF0aCksaS5hdHRyKFwidHJhbnNmb3JtXCIsci50cmFuc0ZuKX0sVC5kcmF3R3JpZD1mdW5jdGlvbih0LGUscil7cj1yfHx7fTt2YXIgbj1lLl9pZCtcImdyaWRcIixpPXIudmFscyxhPXIuY291bnRlckF4aXM7aWYoITE9PT1lLnNob3dncmlkKWk9W107ZWxzZSBpZihhJiZULnNob3VsZFNob3daZXJvTGluZSh0LGUsYSkpZm9yKHZhciBvPVwiYXJyYXlcIj09PWUudGlja21vZGUscz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbD1pW3NdLng7aWYobz8hbDpNYXRoLmFicyhsKTxlLmR0aWNrLzEwMCl7aWYoaT1pLnNsaWNlKDAscykuY29uY2F0KGkuc2xpY2UocysxKSksIW8pYnJlYWs7cy0tfX12YXIgYz1yLmxheWVyLnNlbGVjdEFsbChcInBhdGguXCIrbikuZGF0YShpLFcpO2MuZXhpdCgpLnJlbW92ZSgpLGMuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQobiwxKS5jbGFzc2VkKFwiY3Jpc3BcIiwhMSE9PXIuY3Jpc3ApLGUuX2d3PWguY3Jpc3BSb3VuZCh0LGUuZ3JpZHdpZHRoLDEpLGMuYXR0cihcInRyYW5zZm9ybVwiLHIudHJhbnNGbikuYXR0cihcImRcIixyLnBhdGgpLmNhbGwodS5zdHJva2UsZS5ncmlkY29sb3J8fFwiI2RkZFwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLGUuX2d3K1wicHhcIiksXCJmdW5jdGlvblwiPT10eXBlb2Ygci5wYXRoJiZjLmF0dHIoXCJkXCIsci5wYXRoKX0sVC5kcmF3WmVyb0xpbmU9ZnVuY3Rpb24odCxlLHIpe3I9cnx8cjt2YXIgbj1lLl9pZCtcInpsXCIsaT1ULnNob3VsZFNob3daZXJvTGluZSh0LGUsci5jb3VudGVyQXhpcyksYT1yLmxheWVyLnNlbGVjdEFsbChcInBhdGguXCIrbikuZGF0YShpP1t7eDowLGlkOmUuX2lkfV06W10pO2EuZXhpdCgpLnJlbW92ZSgpLGEuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQobiwxKS5jbGFzc2VkKFwiemxcIiwxKS5jbGFzc2VkKFwiY3Jpc3BcIiwhMSE9PXIuY3Jpc3ApLmVhY2goZnVuY3Rpb24oKXtyLmxheWVyLnNlbGVjdEFsbChcInBhdGhcIikuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBTLmlkU29ydCh0LmlkLGUuaWQpfSl9KSxhLmF0dHIoXCJ0cmFuc2Zvcm1cIixyLnRyYW5zRm4pLmF0dHIoXCJkXCIsci5wYXRoKS5jYWxsKHUuc3Ryb2tlLGUuemVyb2xpbmVjb2xvcnx8dS5kZWZhdWx0TGluZSkuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixoLmNyaXNwUm91bmQodCxlLnplcm9saW5ld2lkdGgsZS5fZ3d8fDEpK1wicHhcIil9LFQuZHJhd0xhYmVscz1mdW5jdGlvbih0LGUscil7cj1yfHx7fTt2YXIgYT1lLl9pZCxvPWEuY2hhckF0KDApLGM9ci5jbHN8fGErXCJ0aWNrXCIsdT1yLnZhbHMsZj1yLmxhYmVsRm5zLHA9ci5zZWNvbmRhcnk/MDplLnRpY2thbmdsZSxkPShlLl90aWNrQW5nbGVzfHx7fSlbY10sZz1yLmxheWVyLnNlbGVjdEFsbChcImcuXCIrYykuZGF0YShlLnNob3d0aWNrbGFiZWxzP3U6W10sVyksdj1bXTtmdW5jdGlvbiBtKHQsZSl7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBhPW4uc2VsZWN0KHRoaXMpLG89YS5zZWxlY3QoXCIudGV4dC1tYXRoLWdyb3VwXCIpLHM9Zi5hbmNob3JGbih0LGUpLGM9ci50cmFuc0ZuLmNhbGwoYS5ub2RlKCksdCkrKGkoZSkmJjAhPStlP1wiIHJvdGF0ZShcIitlK1wiLFwiK2YueEZuKHQpK1wiLFwiKyhmLnlGbih0KS10LmZvbnRTaXplLzIpK1wiKVwiOlwiXCIpLHU9bC5saW5lQ291bnQoYSkscD1BKnQuZm9udFNpemUsZD1mLmhlaWdodEZuKHQsaShlKT8rZTowLCh1LTEpKnApO2lmKGQmJihjKz1cIiB0cmFuc2xhdGUoMCwgXCIrZCtcIilcIiksby5lbXB0eSgpKWEuc2VsZWN0KFwidGV4dFwiKS5hdHRyKHt0cmFuc2Zvcm06YyxcInRleHQtYW5jaG9yXCI6c30pO2Vsc2V7dmFyIGc9aC5iQm94KG8ubm9kZSgpKS53aWR0aCp7ZW5kOi0uNSxzdGFydDouNX1bc107by5hdHRyKFwidHJhbnNmb3JtXCIsYysoZz9cInRyYW5zbGF0ZShcIitnK1wiLDApXCI6XCJcIikpfX0pfWcuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoYywxKS5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLFwibWlkZGxlXCIpLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksaT10Ll9wcm9taXNlcy5sZW5ndGg7ci5jYWxsKGwucG9zaXRpb25UZXh0LGYueEZuKGUpLGYueUZuKGUpKS5jYWxsKGguZm9udCxlLmZvbnQsZS5mb250U2l6ZSxlLmZvbnRDb2xvcikudGV4dChlLnRleHQpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsdCksdC5fcHJvbWlzZXNbaV0/di5wdXNoKHQuX3Byb21pc2VzLnBvcCgpLnRoZW4oZnVuY3Rpb24oKXttKHIscCl9KSk6bShyLHApfSksZy5leGl0KCkucmVtb3ZlKCksci5yZXBvc2l0aW9uT25VcGRhdGUmJmcuZWFjaChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5zZWxlY3QoXCJ0ZXh0XCIpLmNhbGwobC5wb3NpdGlvblRleHQsZi54Rm4odCksZi55Rm4odCkpfSksbShnLGR8fHApLGUuX3NlbGVjdGlvbnMmJihlLl9zZWxlY3Rpb25zW2NdPWcpO3ZhciB5PXMuc3luY09yQXN5bmMoW2Z1bmN0aW9uKCl7cmV0dXJuIHYubGVuZ3RoJiZQcm9taXNlLmFsbCh2KX0sZnVuY3Rpb24oKXttKGcscCk7dmFyIHQ9bnVsbDtpZih1Lmxlbmd0aCYmXCJ4XCI9PT1vJiYhaShwKSYmKFwibG9nXCIhPT1lLnR5cGV8fFwiRFwiIT09U3RyaW5nKGUuZHRpY2spLmNoYXJBdCgwKSkpe3Q9MDt2YXIgbixhPTAsbD1bXTtpZihnLmVhY2goZnVuY3Rpb24odCl7YT1NYXRoLm1heChhLHQuZm9udFNpemUpO3ZhciByPWUubDJwKHQueCksbj0kKHRoaXMpLGk9aC5iQm94KG4ubm9kZSgpKTtsLnB1c2goe3RvcDowLGJvdHRvbToxMCxoZWlnaHQ6MTAsbGVmdDpyLWkud2lkdGgvMixyaWdodDpyK2kud2lkdGgvMisyLHdpZHRoOmkud2lkdGgrMn0pfSksXCJib3VuZGFyaWVzXCIhPT1lLnRpY2tzb24mJiFlLnNob3dkaXZpZGVyc3x8ci5zZWNvbmRhcnkpe3ZhciBmPXUubGVuZ3RoLGQ9TWF0aC5hYnMoKHVbZi0xXS54LXVbMF0ueCkqZS5fbSkvKGYtMSk8Mi41KmF8fFwibXVsdGljYXRlZ29yeVwiPT09ZS50eXBlO2ZvcihuPTA7bjxsLmxlbmd0aC0xO24rKylpZihzLmJCb3hJbnRlcnNlY3QobFtuXSxsW24rMV0pKXt0PWQ/OTA6MzA7YnJlYWt9fWVsc2V7dmFyIHY9Mjtmb3IoZS50aWNrcyYmKHYrPWUudGlja3dpZHRoLzIpLG49MDtuPGwubGVuZ3RoO24rKyl7dmFyIHk9dVtuXS54Ym5kLHg9bFtuXTtpZihudWxsIT09eVswXSYmeC5sZWZ0LWUubDJwKHlbMF0pPHZ8fG51bGwhPT15WzFdJiZlLmwycCh5WzFdKS14LnJpZ2h0PHYpe3Q9OTA7YnJlYWt9fX10JiZtKGcsdCl9ZS5fdGlja0FuZ2xlcyYmKGUuX3RpY2tBbmdsZXNbY109bnVsbD09PXQ/aShwKT9wOjA6dCl9XSk7cmV0dXJuIHkmJnkudGhlbiYmdC5fcHJvbWlzZXMucHVzaCh5KSx5fSxULnNob3VsZFNob3daZXJvTGluZT1mdW5jdGlvbih0LGUscil7dmFyIG49cy5zaW1wbGVNYXAoZS5yYW5nZSxlLnIybCk7cmV0dXJuIG5bMF0qblsxXTw9MCYmZS56ZXJvbGluZSYmKFwibGluZWFyXCI9PT1lLnR5cGV8fFwiLVwiPT09ZS50eXBlKSYmZS5fZ3JpZFZhbHMubGVuZ3RoJiYoWihlLDApfHwhZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ci5fbWFpbkF4aXM7aWYoIWkpcmV0dXJuO3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz1lLl9pZC5jaGFyQXQoMCkscz1ULmNvdW50ZXJMZXR0ZXIoZS5faWQpLGw9ZS5fb2Zmc2V0KyhNYXRoLmFicyhuWzBdKTxNYXRoLmFicyhuWzFdKT09KFwieFwiPT09byk/MDplLl9sZW5ndGgpO2Z1bmN0aW9uIGModCl7aWYoIXQuc2hvd2xpbmV8fCF0LmxpbmV3aWR0aClyZXR1cm4hMTt2YXIgcj1NYXRoLm1heCgodC5saW5ld2lkdGgrZS56ZXJvbGluZXdpZHRoKS8yLDEpO2Z1bmN0aW9uIG4odCl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIHQmJk1hdGguYWJzKHQtbCk8cn1pZihuKHQuX21haW5MaW5lUG9zaXRpb24pfHxuKHQuX21haW5NaXJyb3JQb3NpdGlvbikpcmV0dXJuITA7dmFyIGk9dC5fbGluZXBvc2l0aW9uc3x8e307Zm9yKHZhciBhIGluIGkpaWYobihpW2FdWzBdKXx8bihpW2FdWzFdKSlyZXR1cm4hMH12YXIgdT1hLl9wbG90c1tyLl9tYWluU3VicGxvdF07aWYoISh1Lm1haW5wbG90aW5mb3x8dSkub3ZlcmxheXMubGVuZ3RoKXJldHVybiBjKHIpO2Zvcih2YXIgaD1ULmxpc3QodCxzKSxmPTA7ZjxoLmxlbmd0aDtmKyspe3ZhciBwPWhbZl07aWYocC5fbWFpbkF4aXM9PT1pJiZjKHApKXJldHVybiEwfX0odCxlLHIsbil8fGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuX2Z1bGxEYXRhLG49ZS5fbWFpblN1YnBsb3QsaT1lLl9pZC5jaGFyQXQoMCksYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgcz1yW2FdO2lmKCEwPT09cy52aXNpYmxlJiZzLnhheGlzK3MueWF4aXM9PT1uKXtpZigoby50cmFjZUlzKHMsXCJiYXJcIil8fFwid2F0ZXJmYWxsXCI9PT1zLnR5cGUpJiZzLm9yaWVudGF0aW9uPT09e3g6XCJoXCIseTpcInZcIn1baV0pcmV0dXJuITA7aWYocy5maWxsJiZzLmZpbGwuY2hhckF0KHMuZmlsbC5sZW5ndGgtMSk9PT1pKXJldHVybiEwfX1yZXR1cm4hMX0odCxlKSl9LFQuY2xpcEVuZHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIFoodCxlLngpfSl9LFQuYWxsb3dBdXRvTWFyZ2luPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1ULmxpc3QodCxcIlwiLCEwKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5hdXRvbWFyZ2luJiZhLmFsbG93QXV0b01hcmdpbih0LEoobikpLG8uZ2V0Q29tcG9uZW50TWV0aG9kKFwicmFuZ2VzbGlkZXJcIixcImlzVmlzaWJsZVwiKShuKSYmYS5hbGxvd0F1dG9NYXJnaW4odCxLKG4pKX19LFQuc3dhcD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1mdW5jdGlvbih0LGUpe3ZhciByLG4saT1bXTtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgYT1bXSxvPXQuX2Z1bGxEYXRhW2Vbcl1dLnhheGlzLHM9dC5fZnVsbERhdGFbZVtyXV0ueWF4aXM7aWYobyYmcyl7Zm9yKG49MDtuPGkubGVuZ3RoO24rKyktMT09PWlbbl0ueC5pbmRleE9mKG8pJiYtMT09PWlbbl0ueS5pbmRleE9mKHMpfHxhLnB1c2gobik7aWYoYS5sZW5ndGgpe3ZhciBsLGM9aVthWzBdXTtpZihhLmxlbmd0aD4xKWZvcihuPTE7bjxhLmxlbmd0aDtuKyspbD1pW2Fbbl1dLFEoYy54LGwueCksUShjLnksbC55KTtRKGMueCxbb10pLFEoYy55LFtzXSl9ZWxzZSBpLnB1c2goe3g6W29dLHk6W3NdfSl9fXJldHVybiBpfSh0LGUpLG49MDtuPHIubGVuZ3RoO24rKyl0dCh0LHJbbl0ueCxyW25dLnkpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzXCI6NjY2LFwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiOjY3MyxcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIjo3MjUsXCIuLi8uLi9wbG90cy9wbG90c1wiOjgxMCxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9hdXRvcmFuZ2VcIjo3NDgsXCIuL2F4aXNfYXV0b3R5cGVcIjo3NTAsXCIuL2F4aXNfaWRzXCI6NzUyLFwiLi9jbGVhbl90aWNrc1wiOjc1NCxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo3NjEsXCIuL3NldF9jb252ZXJ0XCI6NzY3LGQzOjE1NSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sNzUwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiEocj1yfHx7fSkubm9NdWx0aUNhdGVnb3J5JiYobz10LGkuaXNBcnJheU9yVHlwZWRBcnJheShvWzBdKSYmaS5pc0FycmF5T3JUeXBlZEFycmF5KG9bMV0pKT9cIm11bHRpY2F0ZWdvcnlcIjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1NYXRoLm1heCgxLCh0Lmxlbmd0aC0xKS8xZTMpLGE9MCxvPTAscz17fSxsPTA7bDx0Lmxlbmd0aDtsKz1yKXt2YXIgYz10W01hdGgucm91bmQobCldLHU9U3RyaW5nKGMpO3NbdV18fChzW3VdPTEsaS5pc0RhdGVUaW1lKGMsZSkmJihhKz0xKSxuKGMpJiYobys9MSkpfXJldHVybiBhPjIqb30odCxlKT9cImRhdGVcIjpmdW5jdGlvbih0KXtmb3IodmFyIGU9TWF0aC5tYXgoMSwodC5sZW5ndGgtMSkvMWUzKSxyPTAsbj0wLG89e30scz0wO3M8dC5sZW5ndGg7cys9ZSl7dmFyIGw9dFtNYXRoLnJvdW5kKHMpXSxjPVN0cmluZyhsKTtvW2NdfHwob1tjXT0xLFwiYm9vbGVhblwiPT10eXBlb2YgbD9uKys6aS5jbGVhbk51bWJlcihsKSE9PWE/cisrOlwic3RyaW5nXCI9PXR5cGVvZiBsJiZuKyspfXJldHVybiBuPjIqcn0odCk/XCJjYXRlZ29yeVwiOmZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiExO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKG4odFtlXSkpcmV0dXJuITA7cmV0dXJuITF9KHQpP1wibGluZWFyXCI6XCItXCI7dmFyIG99fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vbGliXCI6NzAxLFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw3NTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksbz10KFwiLi90aWNrX3ZhbHVlX2RlZmF1bHRzXCIpLHM9dChcIi4vdGlja19tYXJrX2RlZmF1bHRzXCIpLGw9dChcIi4vdGlja19sYWJlbF9kZWZhdWx0c1wiKSxjPXQoXCIuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzXCIpLHU9dChcIi4vbGluZV9ncmlkX2RlZmF1bHRzXCIpLGg9dChcIi4vc2V0X2NvbnZlcnRcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYscCl7dmFyIGQ9Zi5sZXR0ZXIsZz1mLmZvbnR8fHt9LHY9Zi5zcGxvbVN0YXNofHx7fSxtPXIoXCJ2aXNpYmxlXCIsIWYuY2hlYXRlcm9ubHkpLHk9ZS50eXBlO1wiZGF0ZVwiPT09eSYmbi5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcImhhbmRsZURlZmF1bHRzXCIpKHQsZSxcImNhbGVuZGFyXCIsZi5jYWxlbmRhcik7aWYoaChlLHApLCFyKFwiYXV0b3JhbmdlXCIsIWUuaXNWYWxpZFJhbmdlKHQucmFuZ2UpKXx8XCJsaW5lYXJcIiE9PXkmJlwiLVwiIT09eXx8cihcInJhbmdlbW9kZVwiKSxyKFwicmFuZ2VcIiksZS5jbGVhblJhbmdlKCksYyh0LGUscixmKSxcImNhdGVnb3J5XCI9PT15fHxmLm5vSG92ZXJ8fHIoXCJob3ZlcmZvcm1hdFwiKSwhbSlyZXR1cm4gZTt2YXIgeD1yKFwiY29sb3JcIiksYj14IT09YS5jb2xvci5kZmx0P3g6Zy5jb2xvcjtyKFwidGl0bGUudGV4dFwiLHYubGFiZWx8fHAuX2RmbHRUaXRsZVtkXSksaS5jb2VyY2VGb250KHIsXCJ0aXRsZS5mb250XCIse2ZhbWlseTpnLmZhbWlseSxzaXplOk1hdGgucm91bmQoMS4yKmcuc2l6ZSksY29sb3I6Yn0pLG8odCxlLHIseSksbCh0LGUscix5LGYpLHModCxlLHIsZiksdSh0LGUscix7ZGZsdENvbG9yOngsYmdDb2xvcjpmLmJnQ29sb3Isc2hvd0dyaWQ6Zi5zaG93R3JpZCxhdHRyaWJ1dGVzOmF9KSwoZS5zaG93bGluZXx8ZS50aWNrcykmJnIoXCJtaXJyb3JcIiksZi5hdXRvbWFyZ2luJiZyKFwiYXV0b21hcmdpblwiKTt2YXIgXyx3PVwibXVsdGljYXRlZ29yeVwiPT09ZS50eXBlO2Yubm9UaWNrc29ufHxcImNhdGVnb3J5XCIhPT1lLnR5cGUmJiF3fHwhZS50aWNrcyYmIWUuc2hvd2dyaWR8fCh3JiYoXz1cImJvdW5kYXJpZXNcIikscihcInRpY2tzb25cIixfKSk7dyYmKHIoXCJzaG93ZGl2aWRlcnNcIikmJihyKFwiZGl2aWRlcmNvbG9yXCIpLHIoXCJkaXZpZGVyd2lkdGhcIikpKTtyZXR1cm4gZX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0c1wiOjc1MyxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo3NjEsXCIuL2xpbmVfZ3JpZF9kZWZhdWx0c1wiOjc2MyxcIi4vc2V0X2NvbnZlcnRcIjo3NjcsXCIuL3RpY2tfbGFiZWxfZGVmYXVsdHNcIjo3NjgsXCIuL3RpY2tfbWFya19kZWZhdWx0c1wiOjc2OSxcIi4vdGlja192YWx1ZV9kZWZhdWx0c1wiOjc3MH1dLDc1MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxpPXQoXCIuL2NvbnN0YW50c1wiKTtyLmlkMm5hbWU9ZnVuY3Rpb24odCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQmJnQubWF0Y2goaS5BWF9JRF9QQVRURVJOKSl7dmFyIGU9dC5zdWJzdHIoMSk7cmV0dXJuXCIxXCI9PT1lJiYoZT1cIlwiKSx0LmNoYXJBdCgwKStcImF4aXNcIitlfX0sci5uYW1lMmlkPWZ1bmN0aW9uKHQpe2lmKHQubWF0Y2goaS5BWF9OQU1FX1BBVFRFUk4pKXt2YXIgZT10LnN1YnN0cig1KTtyZXR1cm5cIjFcIj09PWUmJihlPVwiXCIpLHQuY2hhckF0KDApK2V9fSxyLmNsZWFuSWQ9ZnVuY3Rpb24odCxlKXtpZih0Lm1hdGNoKGkuQVhfSURfUEFUVEVSTikmJighZXx8dC5jaGFyQXQoMCk9PT1lKSl7dmFyIHI9dC5zdWJzdHIoMSkucmVwbGFjZSgvXjArLyxcIlwiKTtyZXR1cm5cIjFcIj09PXImJihyPVwiXCIpLHQuY2hhckF0KDApK3J9fSxyLmxpc3Q9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXQuX2Z1bGxMYXlvdXQ7aWYoIWkpcmV0dXJuW107dmFyIGEsbz1yLmxpc3RJZHModCxlKSxzPW5ldyBBcnJheShvLmxlbmd0aCk7Zm9yKGE9MDthPG8ubGVuZ3RoO2ErKyl7dmFyIGw9b1thXTtzW2FdPWlbbC5jaGFyQXQoMCkrXCJheGlzXCIrbC5zdWJzdHIoMSldfWlmKCFuKXt2YXIgYz1pLl9zdWJwbG90cy5nbDNkfHxbXTtmb3IoYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgdT1pW2NbYV1dO2U/cy5wdXNoKHVbZStcImF4aXNcIl0pOnMucHVzaCh1LnhheGlzLHUueWF4aXMsdS56YXhpcyl9fXJldHVybiBzfSxyLmxpc3RJZHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0O2lmKCFyKXJldHVybltdO3ZhciBuPXIuX3N1YnBsb3RzO3JldHVybiBlP25bZStcImF4aXNcIl06bi54YXhpcy5jb25jYXQobi55YXhpcyl9LHIuZ2V0RnJvbUlkPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10Ll9mdWxsTGF5b3V0O3JldHVyblwieFwiPT09bj9lPWUucmVwbGFjZSgveVswLTldKi8sXCJcIik6XCJ5XCI9PT1uJiYoZT1lLnJlcGxhY2UoL3hbMC05XSovLFwiXCIpKSxpW3IuaWQybmFtZShlKV19LHIuZ2V0RnJvbVRyYWNlPWZ1bmN0aW9uKHQsZSxpKXt2YXIgYT10Ll9mdWxsTGF5b3V0LG89bnVsbDtpZihuLnRyYWNlSXMoZSxcImdsM2RcIikpe3ZhciBzPWUuc2NlbmU7XCJzY2VuZVwiPT09cy5zdWJzdHIoMCw1KSYmKG89YVtzXVtpK1wiYXhpc1wiXSl9ZWxzZSBvPXIuZ2V0RnJvbUlkKHQsZVtpK1wiYXhpc1wiXXx8aSk7cmV0dXJuIG99LHIuaWRTb3J0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5jaGFyQXQoMCksbj1lLmNoYXJBdCgwKTtyZXR1cm4gciE9PW4/cj5uPzE6LTE6Kyh0LnN1YnN0cigxKXx8MSktKyhlLnN1YnN0cigxKXx8MSl9LHIuZ2V0QXhpc0dyb3VwPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuX2F4aXNNYXRjaEdyb3VwcyxuPTA7bjxyLmxlbmd0aDtuKyspe2lmKHJbbl1bZV0pcmV0dXJuXCJnXCIrbn1yZXR1cm4gZX19LHtcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9jb25zdGFudHNcIjo3NTV9XSw3NTM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7aWYoXCJjYXRlZ29yeVwiPT09ZS50eXBlKXt2YXIgaSxhPXQuY2F0ZWdvcnlhcnJheSxvPUFycmF5LmlzQXJyYXkoYSkmJmEubGVuZ3RoPjA7byYmKGk9XCJhcnJheVwiKTt2YXIgcyxsPXIoXCJjYXRlZ29yeW9yZGVyXCIsaSk7XCJhcnJheVwiPT09bCYmKHM9cihcImNhdGVnb3J5YXJyYXlcIikpLG98fFwiYXJyYXlcIiE9PWx8fChsPWUuY2F0ZWdvcnlvcmRlcj1cInRyYWNlXCIpLFwidHJhY2VcIj09PWw/ZS5faW5pdGlhbENhdGVnb3JpZXM9W106XCJhcnJheVwiPT09bD9lLl9pbml0aWFsQ2F0ZWdvcmllcz1zLnNsaWNlKCk6KHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT1lLmRhdGFBdHRyfHx0Ll9pZC5jaGFyQXQoMCksbz17fTtpZihlLmF4RGF0YSlyPWUuYXhEYXRhO2Vsc2UgZm9yKHI9W10sbj0wO248ZS5kYXRhLmxlbmd0aDtuKyspe3ZhciBzPWUuZGF0YVtuXTtzW2ErXCJheGlzXCJdPT09dC5faWQmJnIucHVzaChzKX1mb3Iobj0wO248ci5sZW5ndGg7bisrKXt2YXIgbD1yW25dW2FdO2ZvcihpPTA7aTxsLmxlbmd0aDtpKyspe3ZhciBjPWxbaV07bnVsbCE9YyYmKG9bY109MSl9fXJldHVybiBPYmplY3Qua2V5cyhvKX0oZSxuKS5zb3J0KCksXCJjYXRlZ29yeSBhc2NlbmRpbmdcIj09PWw/ZS5faW5pdGlhbENhdGVnb3JpZXM9czpcImNhdGVnb3J5IGRlc2NlbmRpbmdcIj09PWwmJihlLl9pbml0aWFsQ2F0ZWdvcmllcz1zLnJldmVyc2UoKSkpfX19LHt9XSw3NTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuT05FREFZO3IuZHRpY2s9ZnVuY3Rpb24odCxlKXt2YXIgcj1cImxvZ1wiPT09ZSxpPVwiZGF0ZVwiPT09ZSxvPVwiY2F0ZWdvcnlcIj09PWUscz1pP2E6MTtpZighdClyZXR1cm4gcztpZihuKHQpKXJldHVybih0PU51bWJlcih0KSk8PTA/czpvP01hdGgubWF4KDEsTWF0aC5yb3VuZCh0KSk6aT9NYXRoLm1heCguMSx0KTp0O2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0fHwhaSYmIXIpcmV0dXJuIHM7dmFyIGw9dC5jaGFyQXQoMCksYz10LnN1YnN0cigxKTtyZXR1cm4oYz1uKGMpP051bWJlcihjKTowKTw9MHx8IShpJiZcIk1cIj09PWwmJmM9PT1NYXRoLnJvdW5kKGMpfHxyJiZcIkxcIj09PWx8fHImJlwiRFwiPT09bCYmKDE9PT1jfHwyPT09YykpP3M6dH0sci50aWNrMD1mdW5jdGlvbih0LGUscixhKXtyZXR1cm5cImRhdGVcIj09PWU/aS5jbGVhbkRhdGUodCxpLmRhdGVUaWNrMChyKSk6XCJEMVwiIT09YSYmXCJEMlwiIT09YT9uKHQpP051bWJlcih0KTowOnZvaWQgMH19LHtcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDc1NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWIvcmVnZXhcIikuY291bnRlcjtlLmV4cG9ydHM9e2lkUmVnZXg6e3g6bihcInhcIikseTpuKFwieVwiKX0sYXR0clJlZ2V4Om4oXCJbeHldYXhpc1wiKSx4QXhpc01hdGNoOm4oXCJ4YXhpc1wiKSx5QXhpc01hdGNoOm4oXCJ5YXhpc1wiKSxBWF9JRF9QQVRURVJOOi9eW3h5el1bMC05XSokLyxBWF9OQU1FX1BBVFRFUk46L15beHl6XWF4aXNbMC05XSokLyxTVUJQTE9UX1BBVFRFUk46L154KFswLTldKil5KFswLTldKikkLyxNSU5EUkFHOjgsTUlOU0VMRUNUOjEyLE1JTlpPT006MjAsRFJBR0dFUlNJWkU6MjAsQkVORFBYOjEuNSxSRURSQVdERUxBWTo1MCxTRUxFQ1RERUxBWToxMDAsU0VMRUNUSUQ6XCItc2VsZWN0XCIsREZMVFJBTkdFWDpbLTEsNl0sREZMVFJBTkdFWTpbLTEsNF0sdHJhY2VMYXllckNsYXNzZXM6W1wiaGVhdG1hcGxheWVyXCIsXCJjb250b3VyY2FycGV0bGF5ZXJcIixcImNvbnRvdXJsYXllclwiLFwid2F0ZXJmYWxsbGF5ZXJcIixcImJhcmxheWVyXCIsXCJjYXJwZXRsYXllclwiLFwidmlvbGlubGF5ZXJcIixcImJveGxheWVyXCIsXCJvaGxjbGF5ZXJcIixcInNjYXR0ZXJjYXJwZXRsYXllclwiLFwic2NhdHRlcmxheWVyXCJdLGxheWVyVmFsdWUybGF5ZXJDbGFzczp7XCJhYm92ZSB0cmFjZXNcIjpcImFib3ZlXCIsXCJiZWxvdyB0cmFjZXNcIjpcImJlbG93XCJ9fX0se1wiLi4vLi4vbGliL3JlZ2V4XCI6NzE3fV0sNzU2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2F4aXNfaWRzXCIpLmlkMm5hbWUsYT10KFwiLi9zY2FsZV96b29tXCIpLG89dChcIi4vYXV0b3JhbmdlXCIpLm1ha2VQYWRGbixzPXQoXCIuL2F1dG9yYW5nZVwiKS5jb25jYXRFeHRyZW1lcyxsPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkFMTU9TVF9FUVVBTCxjPXQoXCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCIpLkZST01fQkw7ZnVuY3Rpb24gdSh0LGUscixuLGEpe3ZhciBvLHMsbCxjLHU9XCJyYW5nZVwiIT09YSxoPW5baShlKV0udHlwZSxmPVtdO2ZvcihzPTA7czxyLmxlbmd0aDtzKyspaWYoKGw9cltzXSkhPT1lJiYoYz1uW2kobCldKS50eXBlPT09aClpZihjLmZpeGVkcmFuZ2Upe2lmKHUmJmMuYW5jaG9yKXtuW2koYy5hbmNob3IpXS5maXhlZHJhbmdlJiZmLnB1c2gobCl9fWVsc2UgZi5wdXNoKGwpO2ZvcihvPTA7bzx0Lmxlbmd0aDtvKyspaWYodFtvXVtlXSl7dmFyIHA9dFtvXSxkPVtdO2ZvcihzPTA7czxmLmxlbmd0aDtzKyspcFtsPWZbc11dfHxkLnB1c2gobCk7cmV0dXJue2xpbmthYmxlQXhlczpkLHRoaXNHcm91cDpwfX1yZXR1cm57bGlua2FibGVBeGVzOmYsdGhpc0dyb3VwOm51bGx9fWZ1bmN0aW9uIGgodCxlLHIsbixpKXt2YXIgYSxvLHMsbCxjO251bGw9PT1lPygoZT17fSlbcl09MSxjPXQubGVuZ3RoLHQucHVzaChlKSk6Yz10LmluZGV4T2YoZSk7dmFyIHU9T2JqZWN0LmtleXMoZSk7Zm9yKGE9MDthPHQubGVuZ3RoO2ErKylpZihzPXRbYV0sYSE9PWMmJnNbbl0pe3ZhciBoPXNbbl07Zm9yKG89MDtvPHUubGVuZ3RoO28rKylzW2w9dVtvXV09aCppKmVbbF07cmV0dXJuIHZvaWQgdC5zcGxpY2UoYywxKX1pZigxIT09aSlmb3Iobz0wO288dS5sZW5ndGg7bysrKWVbdVtvXV0qPWk7ZVtuXT0xfWZ1bmN0aW9uIGYodCxlKXt2YXIgcj10Ll9pbnB1dERvbWFpbixuPWNbdC5jb25zdHJhaW50b3dhcmRdLGk9clswXSsoclsxXS1yWzBdKSpuO3QuZG9tYWluPXQuX2lucHV0LmRvbWFpbj1baSsoclswXS1pKS9lLGkrKHJbMV0taSkvZV0sdC5zZXRTY2FsZSgpfXIuaGFuZGxlQ29uc3RyYWludERlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyLGksYSl7dmFyIG8scyxsLGMsZj1hLl9heGlzQ29uc3RyYWludEdyb3VwcyxwPWEuX2F4aXNNYXRjaEdyb3VwcyxkPWUuX2lkLGc9ZC5jaGFyQXQoMCksdj0oKGEuX3NwbG9tQXhlc3x8e30pW2ddfHx7fSlbZF18fHt9LG09ZS5faWQseT1tLmNoYXJBdCgwKSx4PXIoXCJjb25zdHJhaW5cIik7aWYobi5jb2VyY2UodCxlLHtjb25zdHJhaW50b3dhcmQ6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOlwieFwiPT09eT9bXCJsZWZ0XCIsXCJjZW50ZXJcIixcInJpZ2h0XCJdOltcImJvdHRvbVwiLFwibWlkZGxlXCIsXCJ0b3BcIl0sZGZsdDpcInhcIj09PXk/XCJjZW50ZXJcIjpcIm1pZGRsZVwifX0sXCJjb25zdHJhaW50b3dhcmRcIiksIXQubWF0Y2hlcyYmIXYubWF0Y2hlc3x8ZS5maXhlZHJhbmdlfHwocz11KHAsbSxpLGEpLG89bi5jb2VyY2UodCxlLHttYXRjaGVzOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpzLmxpbmthYmxlQXhlc3x8W10sZGZsdDp2Lm1hdGNoZXN9fSxcIm1hdGNoZXNcIikpLG98fCF0LnNjYWxlYW5jaG9yfHxlLmZpeGVkcmFuZ2UmJlwiZG9tYWluXCIhPT14fHwoYz11KGYsbSxpLGEseCksbD1uLmNvZXJjZSh0LGUse3NjYWxlYW5jaG9yOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpjLmxpbmthYmxlQXhlc3x8W119fSxcInNjYWxlYW5jaG9yXCIpKSxvPyhkZWxldGUgZS5jb25zdHJhaW4saChwLHMudGhpc0dyb3VwLG0sbywxKSk6LTEhPT1pLmluZGV4T2YodC5tYXRjaGVzKSYmbi53YXJuKFwiaWdub3JlZCBcIitlLl9uYW1lKycubWF0Y2hlczogXCInK3QubWF0Y2hlcysnXCIgdG8gYXZvaWQgZWl0aGVyIGFuIGluZmluaXRlIGxvb3Agb3IgYmVjYXVzZSB0aGUgdGFyZ2V0IGF4aXMgaGFzIGZpeGVkIHJhbmdlLicpLGwpe3ZhciBiPXIoXCJzY2FsZXJhdGlvXCIpO2J8fChiPWUuc2NhbGVyYXRpbz0xKSxoKGYsYy50aGlzR3JvdXAsbSxsLGIpfWVsc2UtMSE9PWkuaW5kZXhPZih0LnNjYWxlYW5jaG9yKSYmbi53YXJuKFwiaWdub3JlZCBcIitlLl9uYW1lKycuc2NhbGVhbmNob3I6IFwiJyt0LnNjYWxlYW5jaG9yKydcIiB0byBhdm9pZCBlaXRoZXIgYW4gaW5maW5pdGUgbG9vcCBhbmQgcG9zc2libHkgaW5jb25zaXN0ZW50IHNjYWxlcmF0aW9zLCBvciBiZWNhdXNlIHRoZSB0YXJnZXQgYXhpcyBoYXMgZml4ZWQgcmFuZ2Ugb3IgdGhpcyBheGlzIGRlY2xhcmVzIGEgKm1hdGNoZXMqIGNvbnN0cmFpbnQuJyl9LHIuZW5mb3JjZT1mdW5jdGlvbih0KXt2YXIgZSxyLG4sYyx1LGgscCxkPXQuX2Z1bGxMYXlvdXQsZz1kLl9heGlzQ29uc3RyYWludEdyb3Vwc3x8W107Zm9yKGU9MDtlPGcubGVuZ3RoO2UrKyl7dmFyIHY9Z1tlXSxtPU9iamVjdC5rZXlzKHYpLHk9MS8wLHg9MCxiPTEvMCxfPXt9LHc9e30saz0hMTtmb3Iocj0wO3I8bS5sZW5ndGg7cisrKXdbbj1tW3JdXT1jPWRbaShuKV0sYy5faW5wdXREb21haW4/Yy5kb21haW49Yy5faW5wdXREb21haW4uc2xpY2UoKTpjLl9pbnB1dERvbWFpbj1jLmRvbWFpbi5zbGljZSgpLGMuX2lucHV0UmFuZ2V8fChjLl9pbnB1dFJhbmdlPWMucmFuZ2Uuc2xpY2UoKSksYy5zZXRTY2FsZSgpLF9bbl09dT1NYXRoLmFicyhjLl9tKS92W25dLHk9TWF0aC5taW4oeSx1KSxcImRvbWFpblwiIT09Yy5jb25zdHJhaW4mJmMuX2NvbnN0cmFpbnRTaHJpbmthYmxlfHwoYj1NYXRoLm1pbihiLHUpKSxkZWxldGUgYy5fY29uc3RyYWludFNocmlua2FibGUseD1NYXRoLm1heCh4LHUpLFwiZG9tYWluXCI9PT1jLmNvbnN0cmFpbiYmKGs9ITApO2lmKCEoeT5sKngpfHxrKWZvcihyPTA7cjxtLmxlbmd0aDtyKyspaWYodT1fW249bVtyXV0saD0oYz13W25dKS5jb25zdHJhaW4sdSE9PWJ8fFwiZG9tYWluXCI9PT1oKWlmKHA9dS9iLFwicmFuZ2VcIj09PWgpYShjLHApO2Vsc2V7dmFyIEE9Yy5faW5wdXREb21haW4sVD0oYy5kb21haW5bMV0tYy5kb21haW5bMF0pLyhBWzFdLUFbMF0pLE09KGMucjJsKGMucmFuZ2VbMV0pLWMucjJsKGMucmFuZ2VbMF0pKS8oYy5yMmwoYy5faW5wdXRSYW5nZVsxXSktYy5yMmwoYy5faW5wdXRSYW5nZVswXSkpO2lmKChwLz1UKSpNPDEpe2MuZG9tYWluPWMuX2lucHV0LmRvbWFpbj1BLnNsaWNlKCksYShjLHApO2NvbnRpbnVlfWlmKE08MSYmKGMucmFuZ2U9Yy5faW5wdXQucmFuZ2U9Yy5faW5wdXRSYW5nZS5zbGljZSgpLHAqPU0pLGMuYXV0b3JhbmdlKXt2YXIgUz1jLnIybChjLnJhbmdlWzBdKSxFPWMucjJsKGMucmFuZ2VbMV0pLEM9KFMrRSkvMixMPUMsej1DLE89TWF0aC5hYnMoRS1DKSxJPUMtTypwKjEuMDAwMSxEPUMrTypwKjEuMDAwMSxQPW8oYyk7ZihjLHApO3ZhciBSLEYsQj1NYXRoLmFicyhjLl9tKSxOPXModCxjKSxqPU4ubWluLFY9Ti5tYXg7Zm9yKEY9MDtGPGoubGVuZ3RoO0YrKykoUj1qW0ZdLnZhbC1QKGpbRl0pL0IpPkkmJlI8TCYmKEw9Uik7Zm9yKEY9MDtGPFYubGVuZ3RoO0YrKykoUj1WW0ZdLnZhbCtQKFZbRl0pL0IpPEQmJlI+eiYmKHo9Uik7cC89KHotTCkvKDIqTyksTD1jLmwycihMKSx6PWMubDJyKHopLGMucmFuZ2U9Yy5faW5wdXQucmFuZ2U9UzxFP1tMLHpdOlt6LExdfWYoYyxwKX19fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSl7aWYoZS5faW5wdXREb21haW4pe2Zvcih2YXIgcj0hMSxuPWUuX2lkLGk9dC5fZnVsbExheW91dC5fYXhpc0NvbnN0cmFpbnRHcm91cHMsYT0wO2E8aS5sZW5ndGg7YSsrKWlmKGlbYV1bbl0pe3I9ITA7YnJlYWt9ciYmXCJkb21haW5cIj09PWUuY29uc3RyYWlufHwoZS5faW5wdXQuZG9tYWluPWUuZG9tYWluPWUuX2lucHV0RG9tYWluLGRlbGV0ZSBlLl9pbnB1dERvbWFpbil9fX0se1wiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiOjY3MyxcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuL2F1dG9yYW5nZVwiOjc0OCxcIi4vYXhpc19pZHNcIjo3NTIsXCIuL3NjYWxlX3pvb21cIjo3NjV9XSw3NTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwidGlueWNvbG9yMlwiKSxhPXQoXCJoYXMtcGFzc2l2ZS1ldmVudHNcIiksbz10KFwiLi4vLi4vcmVnaXN0cnlcIikscz10KFwiLi4vLi4vbGliXCIpLGw9dChcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiKSxjPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLHU9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxoPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4XCIpLGY9dChcIi4vYXhlc1wiKSxwPXQoXCIuLi8uLi9saWIvc2V0Y3Vyc29yXCIpLGQ9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnRcIiksZz10KFwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiKS5GUk9NX1RMLHY9dChcIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlc1wiKSxtPXQoXCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lc1wiKS5yZWRyYXdSZWdsVHJhY2VzLHk9dChcIi4uL3Bsb3RzXCIpLHg9dChcIi4vYXhpc19pZHNcIikuZ2V0RnJvbUlkLGI9dChcIi4vc2VsZWN0XCIpLnByZXBTZWxlY3QsXz10KFwiLi9zZWxlY3RcIikuY2xlYXJTZWxlY3Qsdz10KFwiLi9zZWxlY3RcIikuc2VsZWN0T25DbGljayxrPXQoXCIuL3NjYWxlX3pvb21cIiksQT10KFwiLi9jb25zdGFudHNcIiksVD1BLk1JTkRSQUcsTT1BLk1JTlpPT00sUz0hMDtmdW5jdGlvbiBFKHQsZSxyLG4pe3ZhciBpPXMuZW5zdXJlU2luZ2xlKHQuZHJhZ2xheWVyLGUscixmdW5jdGlvbihlKXtlLmNsYXNzZWQoXCJkcmFnXCIsITApLnN0eWxlKHtmaWxsOlwidHJhbnNwYXJlbnRcIixcInN0cm9rZS13aWR0aFwiOjB9KS5hdHRyKFwiZGF0YS1zdWJwbG90XCIsdC5pZCl9KTtyZXR1cm4gaS5jYWxsKHAsbiksaS5ub2RlKCl9ZnVuY3Rpb24gQyh0LGUscixpLGEsbyxzKXt2YXIgbD1FKHQsXCJyZWN0XCIsZSxyKTtyZXR1cm4gbi5zZWxlY3QobCkuY2FsbCh1LnNldFJlY3QsaSxhLG8scyksbH1mdW5jdGlvbiBMKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspaWYoIXRbcl0uZml4ZWRyYW5nZSlyZXR1cm4gZTtyZXR1cm5cIlwifWZ1bmN0aW9uIHoodCxlLHIsbixpKXtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89dFthXTtpZighby5maXhlZHJhbmdlKXt2YXIgcz1vLl9ybFswXSxsPW8uX3JsWzFdLXM7by5yYW5nZT1bby5sMnIocytsKmUpLG8ubDJyKHMrbCpyKV0sbltvLl9uYW1lK1wiLnJhbmdlWzBdXCJdPW8ucmFuZ2VbMF0sbltvLl9uYW1lK1wiLnJhbmdlWzFdXCJdPW8ucmFuZ2VbMV19fWlmKGkmJmkubGVuZ3RoKXt2YXIgYz0oZSsoMS1yKSkvMjt6KGksYywxLWMsbixbXSl9fWZ1bmN0aW9uIE8odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmZpeGVkcmFuZ2V8fChuLnJhbmdlPVtuLmwycihuLl9ybFswXS1lL24uX20pLG4ubDJyKG4uX3JsWzFdLWUvbi5fbSldKX19ZnVuY3Rpb24gSSh0KXtyZXR1cm4gMS0odD49MD9NYXRoLm1pbih0LC45KToxLygxL01hdGgubWF4KHQsLS4zKSszLjIyMikpfWZ1bmN0aW9uIEQodCxlLHIsbixpKXtyZXR1cm4gdC5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJjbGFzc1wiLFwiem9vbWJveFwiKS5zdHlsZSh7ZmlsbDplPi4yP1wicmdiYSgwLDAsMCwwKVwiOlwicmdiYSgyNTUsMjU1LDI1NSwwKVwiLFwic3Ryb2tlLXdpZHRoXCI6MH0pLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIityK1wiLCBcIituK1wiKVwiKS5hdHRyKFwiZFwiLGkrXCJaXCIpfWZ1bmN0aW9uIFAodCxlLHIpe3JldHVybiB0LmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsXCJ6b29tYm94LWNvcm5lcnNcIikuc3R5bGUoe2ZpbGw6Yy5iYWNrZ3JvdW5kLHN0cm9rZTpjLmRlZmF1bHRMaW5lLFwic3Ryb2tlLXdpZHRoXCI6MSxvcGFjaXR5OjB9KS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrZStcIiwgXCIrcitcIilcIikuYXR0cihcImRcIixcIk0wLDBaXCIpfWZ1bmN0aW9uIFIodCxlLHIsbixpLGEpe3QuYXR0cihcImRcIixuK1wiTVwiK3IubCtcIixcIityLnQrXCJ2XCIrci5oK1wiaFwiK3IudytcInYtXCIrci5oK1wiaC1cIityLncrXCJaXCIpLEYodCxlLGksYSl9ZnVuY3Rpb24gRih0LGUscixuKXtyfHwodC50cmFuc2l0aW9uKCkuc3R5bGUoXCJmaWxsXCIsbj4uMj9cInJnYmEoMCwwLDAsMC40KVwiOlwicmdiYSgyNTUsMjU1LDI1NSwwLjMpXCIpLmR1cmF0aW9uKDIwMCksZS50cmFuc2l0aW9uKCkuc3R5bGUoXCJvcGFjaXR5XCIsMSkuZHVyYXRpb24oMjAwKSl9ZnVuY3Rpb24gQih0KXtuLnNlbGVjdCh0KS5zZWxlY3RBbGwoXCIuem9vbWJveCwuanMtem9vbWJveC1iYWNrZHJvcCwuanMtem9vbWJveC1tZW51LC56b29tYm94LWNvcm5lcnNcIikucmVtb3ZlKCl9ZnVuY3Rpb24gTih0KXtTJiZ0LmRhdGEmJnQuX2NvbnRleHQuc2hvd1RpcHMmJihzLm5vdGlmaWVyKHMuXyh0LFwiRG91YmxlLWNsaWNrIHRvIHpvb20gYmFjayBvdXRcIiksXCJsb25nXCIpLFM9ITEpfWZ1bmN0aW9uIGoodCl7cmV0dXJuXCJsYXNzb1wiPT09dHx8XCJzZWxlY3RcIj09PXR9ZnVuY3Rpb24gVih0KXt2YXIgZT1NYXRoLmZsb29yKE1hdGgubWluKHQuYi10LnQsdC5yLXQubCxNKS8yKTtyZXR1cm5cIk1cIisodC5sLTMuNSkrXCIsXCIrKHQudC0uNStlKStcImgzdlwiKy1lK1wiaFwiK2UrXCJ2LTNoLVwiKyhlKzMpK1wiWk1cIisodC5yKzMuNSkrXCIsXCIrKHQudC0uNStlKStcImgtM3ZcIistZStcImhcIistZStcInYtM2hcIisoZSszKStcIlpNXCIrKHQuciszLjUpK1wiLFwiKyh0LmIrLjUtZSkrXCJoLTN2XCIrZStcImhcIistZStcInYzaFwiKyhlKzMpK1wiWk1cIisodC5sLTMuNSkrXCIsXCIrKHQuYisuNS1lKStcImgzdlwiK2UrXCJoXCIrZStcInYzaC1cIisoZSszKStcIlpcIn1mdW5jdGlvbiBVKHQsZSxyLG4pe2Zvcih2YXIgaSxhLG8sbCxjPSExLHU9e30saD17fSxmPTA7ZjxlLmxlbmd0aDtmKyspe3ZhciBwPWVbZl07Zm9yKGkgaW4gcilpZihwW2ldKXtmb3IobyBpbiBwKShcInhcIj09PW8uY2hhckF0KDApP3I6bilbb118fCh1W29dPWkpO2ZvcihhIGluIG4pcFthXSYmKGM9ITApfWZvcihhIGluIG4paWYocFthXSlmb3IobCBpbiBwKShcInhcIj09PWwuY2hhckF0KDApP3I6bilbbF18fChoW2xdPWEpfWMmJihzLmV4dGVuZEZsYXQodSxoKSxoPXt9KTt2YXIgZD17fSxnPVtdO2ZvcihvIGluIHUpe3ZhciB2PXgodCxvKTtnLnB1c2godiksZFt2Ll9pZF09dn12YXIgbT17fSx5PVtdO2ZvcihsIGluIGgpe3ZhciBiPXgodCxsKTt5LnB1c2goYiksbVtiLl9pZF09Yn1yZXR1cm57eGFIYXNoOmQseWFIYXNoOm0seGF4ZXM6Zyx5YXhlczp5LHhMaW5rczp1LHlMaW5rczpoLGlzU3VicGxvdENvbnN0cmFpbmVkOmN9fWZ1bmN0aW9uIHEodCxlKXtpZihhKXt2YXIgcj12b2lkIDAhPT10Lm9ud2hlZWw/XCJ3aGVlbFwiOlwibW91c2V3aGVlbFwiO3QuX29ud2hlZWwmJnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLHQuX29ud2hlZWwpLHQuX29ud2hlZWw9ZSx0LmFkZEV2ZW50TGlzdGVuZXIocixlLHtwYXNzaXZlOiExfSl9ZWxzZSB2b2lkIDAhPT10Lm9ud2hlZWw/dC5vbndoZWVsPWU6dm9pZCAwIT09dC5vbm1vdXNld2hlZWwmJih0Lm9ubW91c2V3aGVlbD1lKX1mdW5jdGlvbiBIKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh0W3JdKTtyZXR1cm4gZX1lLmV4cG9ydHM9e21ha2VEcmFnQm94OmZ1bmN0aW9uKHQsZSxyLGEsYyxwLFMsRSl7dmFyIEYsRyxZLFcsWCxaLCQsSixLLFEsdHQsZXQscnQsbnQsaXQsYXQsb3Qsc3QsbHQsY3QsdXQsaHQ9dC5fZnVsbExheW91dC5fem9vbWxheWVyLGZ0PVMrRT09PVwibnNld1wiLHB0PTE9PT0oUytFKS5sZW5ndGg7ZnVuY3Rpb24gZHQoKXtpZihGPWUueGF4aXMsRz1lLnlheGlzLEs9Ri5fbGVuZ3RoLFE9Ry5fbGVuZ3RoLCQ9Ri5fb2Zmc2V0LEo9Ry5fb2Zmc2V0LChZPXt9KVtGLl9pZF09RiwoVz17fSlbRy5faWRdPUcsUyYmRSlmb3IodmFyIHI9ZS5vdmVybGF5cyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl0ueGF4aXM7WVtpLl9pZF09aTt2YXIgYT1yW25dLnlheGlzO1dbYS5faWRdPWF9WD1IKFkpLFo9SChXKSxydD1MKFgsRSksbnQ9TChaLFMpLGl0PSFudCYmIXJ0LHR0PVUodCx0Ll9mdWxsTGF5b3V0Ll9heGlzQ29uc3RyYWludEdyb3VwcyxZLFcpLGV0PVUodCx0Ll9mdWxsTGF5b3V0Ll9heGlzTWF0Y2hHcm91cHMsWSxXKSxhdD1FfHx0dC5pc1N1YnBsb3RDb25zdHJhaW5lZHx8ZXQuaXNTdWJwbG90Q29uc3RyYWluZWQsb3Q9U3x8dHQuaXNTdWJwbG90Q29uc3RyYWluZWR8fGV0LmlzU3VicGxvdENvbnN0cmFpbmVkO3ZhciBvPXQuX2Z1bGxMYXlvdXQ7c3Q9by5faGFzKFwic2NhdHRlcmdsXCIpLGx0PW8uX2hhcyhcInNwbG9tXCIpLGN0PW8uX2hhcyhcInN2Z1wiKX1kdCgpO3ZhciBndD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ/XCJuc2V3XCI9PT10P3I/XCJcIjpcInBhblwiPT09ZT9cIm1vdmVcIjpcImNyb3NzaGFpclwiOnQudG9Mb3dlckNhc2UoKStcIi1yZXNpemVcIjpcInBvaW50ZXJcIn0obnQrcnQsdC5fZnVsbExheW91dC5kcmFnbW9kZSxmdCksdnQ9QyhlLFMrRStcImRyYWdcIixndCxyLGEsYyxwKTtpZihpdCYmIWZ0KXJldHVybiB2dC5vbm1vdXNlZG93bj1udWxsLHZ0LnN0eWxlLnBvaW50ZXJFdmVudHM9XCJub25lXCIsdnQ7dmFyIG10LHl0LHh0LGJ0LF90LHd0LGt0LEF0LFR0LE10LFN0PXtlbGVtZW50OnZ0LGdkOnQscGxvdGluZm86ZX07ZnVuY3Rpb24gRXQoKXtTdC5wbG90aW5mby5zZWxlY3Rpb249ITEsXyh0KX1mdW5jdGlvbiBDdChyLGkpe3ZhciBhPXQuX2Z1bGxMYXlvdXQuY2xpY2ttb2RlO2lmKEIodCksMiE9PXJ8fHB0fHxmdW5jdGlvbigpe2lmKCF0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uKXt2YXIgZT10Ll9jb250ZXh0LmRvdWJsZUNsaWNrLHI9W107cnQmJihyPXIuY29uY2F0KFgpKSxudCYmKHI9ci5jb25jYXQoWikpLGV0LnhheGVzJiYocj1yLmNvbmNhdChldC54YXhlcykpLGV0LnlheGVzJiYocj1yLmNvbmNhdChldC55YXhlcykpO3ZhciBuLGksYSxzPXt9O2lmKFwicmVzZXQrYXV0b3NpemVcIj09PWUpZm9yKGU9XCJhdXRvc2l6ZVwiLGk9MDtpPHIubGVuZ3RoO2krKylpZigobj1yW2ldKS5fcmFuZ2VJbml0aWFsJiYobi5yYW5nZVswXSE9PW4uX3JhbmdlSW5pdGlhbFswXXx8bi5yYW5nZVsxXSE9PW4uX3JhbmdlSW5pdGlhbFsxXSl8fCFuLl9yYW5nZUluaXRpYWwmJiFuLmF1dG9yYW5nZSl7ZT1cInJlc2V0XCI7YnJlYWt9aWYoXCJhdXRvc2l6ZVwiPT09ZSlmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKShuPXJbaV0pLmZpeGVkcmFuZ2V8fChzW24uX25hbWUrXCIuYXV0b3JhbmdlXCJdPSEwKTtlbHNlIGlmKFwicmVzZXRcIj09PWUpZm9yKChydHx8dHQuaXNTdWJwbG90Q29uc3RyYWluZWQpJiYocj1yLmNvbmNhdCh0dC54YXhlcykpLG50JiYhdHQuaXNTdWJwbG90Q29uc3RyYWluZWQmJihyPXIuY29uY2F0KHR0LnlheGVzKSksdHQuaXNTdWJwbG90Q29uc3RyYWluZWQmJihydD9udHx8KHI9ci5jb25jYXQoWikpOnI9ci5jb25jYXQoWCkpLGk9MDtpPHIubGVuZ3RoO2krKykobj1yW2ldKS5maXhlZHJhbmdlfHwobi5fcmFuZ2VJbml0aWFsPyhhPW4uX3JhbmdlSW5pdGlhbCxzW24uX25hbWUrXCIucmFuZ2VbMF1cIl09YVswXSxzW24uX25hbWUrXCIucmFuZ2VbMV1cIl09YVsxXSk6c1tuLl9uYW1lK1wiLmF1dG9yYW5nZVwiXT0hMCk7dC5lbWl0KFwicGxvdGx5X2RvdWJsZWNsaWNrXCIsbnVsbCksby5jYWxsKFwiX2d1aVJlbGF5b3V0XCIsdCxzKX19KCksZnQpYS5pbmRleE9mKFwic2VsZWN0XCIpPi0xJiZ3KGksdCxYLFosZS5pZCxTdCksYS5pbmRleE9mKFwiZXZlbnRcIik+LTEmJmguY2xpY2sodCxpLGUuaWQpO2Vsc2UgaWYoMT09PXImJnB0KXt2YXIgcz1TP0c6RixjPVwic1wiPT09U3x8XCJ3XCI9PT1FPzA6MSx1PXMuX25hbWUrXCIucmFuZ2VbXCIrYytcIl1cIixmPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaT10LnJhbmdlW2VdLGE9TWF0aC5hYnMoaS10LnJhbmdlWzEtZV0pO3JldHVyblwiZGF0ZVwiPT09dC50eXBlP2k6XCJsb2dcIj09PXQudHlwZT8ocj1NYXRoLmNlaWwoTWF0aC5tYXgoMCwtTWF0aC5sb2coYSkvTWF0aC5MTjEwKSkrMyxuLmZvcm1hdChcIi5cIityK1wiZ1wiKShNYXRoLnBvdygxMCxpKSkpOihyPU1hdGguZmxvb3IoTWF0aC5sb2coTWF0aC5hYnMoaSkpL01hdGguTE4xMCktTWF0aC5mbG9vcihNYXRoLmxvZyhhKS9NYXRoLkxOMTApKzQsbi5mb3JtYXQoXCIuXCIrU3RyaW5nKHIpK1wiZ1wiKShpKSl9KHMsYykscD1cImxlZnRcIixkPVwibWlkZGxlXCI7aWYocy5maXhlZHJhbmdlKXJldHVybjtTPyhkPVwiblwiPT09Uz9cInRvcFwiOlwiYm90dG9tXCIsXCJyaWdodFwiPT09cy5zaWRlJiYocD1cInJpZ2h0XCIpKTpcImVcIj09PUUmJihwPVwicmlnaHRcIiksdC5fY29udGV4dC5zaG93QXhpc1JhbmdlRW50cnlCb3hlcyYmbi5zZWxlY3QodnQpLmNhbGwobC5tYWtlRWRpdGFibGUse2dkOnQsaW1tZWRpYXRlOiEwLGJhY2tncm91bmQ6dC5fZnVsbExheW91dC5wYXBlcl9iZ2NvbG9yLHRleHQ6U3RyaW5nKGYpLGZpbGw6cy50aWNrZm9udD9zLnRpY2tmb250LmNvbG9yOlwiIzQ0NFwiLGhvcml6b250YWxBbGlnbjpwLHZlcnRpY2FsQWxpZ246ZH0pLm9uKFwiZWRpdFwiLGZ1bmN0aW9uKGUpe3ZhciByPXMuZDJyKGUpO3ZvaWQgMCE9PXImJm8uY2FsbChcIl9ndWlSZWxheW91dFwiLHQsdSxyKX0pfX1mdW5jdGlvbiBMdChlLHIpe2lmKHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pcmV0dXJuITE7dmFyIG49TWF0aC5tYXgoMCxNYXRoLm1pbihLLGUrbXQpKSxpPU1hdGgubWF4KDAsTWF0aC5taW4oUSxyK3l0KSksYT1NYXRoLmFicyhuLW10KSxvPU1hdGguYWJzKGkteXQpO2Z1bmN0aW9uIHMoKXtrdD1cIlwiLHh0LnI9eHQubCx4dC50PXh0LmIsVHQuYXR0cihcImRcIixcIk0wLDBaXCIpfWlmKHh0Lmw9TWF0aC5taW4obXQsbikseHQucj1NYXRoLm1heChtdCxuKSx4dC50PU1hdGgubWluKHl0LGkpLHh0LmI9TWF0aC5tYXgoeXQsaSksdHQuaXNTdWJwbG90Q29uc3RyYWluZWQpYT5NfHxvPk0/KGt0PVwieHlcIixhL0s+by9RPyhvPWEqUS9LLHl0Pmk/eHQudD15dC1vOnh0LmI9eXQrbyk6KGE9bypLL1EsbXQ+bj94dC5sPW10LWE6eHQucj1tdCthKSxUdC5hdHRyKFwiZFwiLFYoeHQpKSk6cygpO2Vsc2UgaWYoZXQuaXNTdWJwbG90Q29uc3RyYWluZWQpaWYoYT5NfHxvPk0pe2t0PVwieHlcIjt2YXIgbD1NYXRoLm1pbih4dC5sL0ssKFEteHQuYikvUSksYz1NYXRoLm1heCh4dC5yL0ssKFEteHQudCkvUSk7eHQubD1sKksseHQucj1jKksseHQuYj0oMS1sKSpRLHh0LnQ9KDEtYykqUSxUdC5hdHRyKFwiZFwiLFYoeHQpKX1lbHNlIHMoKTtlbHNlIW50fHxvPE1hdGgubWluKE1hdGgubWF4KC42KmEsVCksTSk/YTxUfHwhcnQ/cygpOih4dC50PTAseHQuYj1RLGt0PVwieFwiLFR0LmF0dHIoXCJkXCIsZnVuY3Rpb24odCxlKXtyZXR1cm5cIk1cIisodC5sLS41KStcIixcIisoZS1NLS41KStcImgtM3ZcIisoMipNKzEpK1wiaDNaTVwiKyh0LnIrLjUpK1wiLFwiKyhlLU0tLjUpK1wiaDN2XCIrKDIqTSsxKStcImgtM1pcIn0oeHQseXQpKSk6IXJ0fHxhPE1hdGgubWluKC42Km8sTSk/KHh0Lmw9MCx4dC5yPUssa3Q9XCJ5XCIsVHQuYXR0cihcImRcIixmdW5jdGlvbih0LGUpe3JldHVyblwiTVwiKyhlLU0tLjUpK1wiLFwiKyh0LnQtLjUpK1widi0zaFwiKygyKk0rMSkrXCJ2M1pNXCIrKGUtTS0uNSkrXCIsXCIrKHQuYisuNSkrXCJ2M2hcIisoMipNKzEpK1widi0zWlwifSh4dCxtdCkpKTooa3Q9XCJ4eVwiLFR0LmF0dHIoXCJkXCIsVih4dCkpKTt4dC53PXh0LnIteHQubCx4dC5oPXh0LmIteHQudCxrdCYmKE10PSEwKSx0Ll9kcmFnZ2VkPU10LFIoQXQsVHQseHQsX3Qsd3QsYnQpLHd0PSEwfWZ1bmN0aW9uIHp0KCl7aWYodXQ9e30sTWF0aC5taW4oeHQuaCx4dC53KTwyKlQpcmV0dXJuIEIodCk7XCJ4eVwiIT09a3QmJlwieFwiIT09a3R8fCh6KFgseHQubC9LLHh0LnIvSyx1dCx0dC54YXhlcyksRnQoXCJ4XCIsdXQpKSxcInh5XCIhPT1rdCYmXCJ5XCIhPT1rdHx8KHooWiwoUS14dC5iKS9RLChRLXh0LnQpL1EsdXQsdHQueWF4ZXMpLEZ0KFwieVwiLHV0KSksQih0KSxOdCgpLE4odCl9U3QucHJlcEZuPWZ1bmN0aW9uKGUscixuKXt2YXIgYT1TdC5kcmFnbW9kZSxvPXQuX2Z1bGxMYXlvdXQuZHJhZ21vZGU7byE9PWEmJihTdC5kcmFnbW9kZT1vKSxkdCgpLGl0fHwoZnQ/ZS5zaGlmdEtleT9cInBhblwiPT09bz9vPVwiem9vbVwiOmoobyl8fChvPVwicGFuXCIpOmUuY3RybEtleSYmKG89XCJwYW5cIik6bz1cInBhblwiKSxTdC5taW5EcmFnPVwibGFzc29cIj09PW8/MTp2b2lkIDAsaihvKT8oU3QueGF4ZXM9WCxTdC55YXhlcz1aLGIoZSxyLG4sU3QsbykpOihTdC5jbGlja0ZuPUN0LGooYSkmJkV0KCksaXR8fChcInpvb21cIj09PW8/KFN0Lm1vdmVGbj1MdCxTdC5kb25lRm49enQsU3QubWluRHJhZz0xLGZ1bmN0aW9uKGUscixuKXt2YXIgYT12dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTttdD1yLWEubGVmdCx5dD1uLWEudG9wLHh0PXtsOm10LHI6bXQsdzowLHQ6eXQsYjp5dCxoOjB9LGJ0PXQuX2htcGl4Y291bnQ/dC5faG1sdW1jb3VudC90Ll9obXBpeGNvdW50OmkodC5fZnVsbExheW91dC5wbG90X2JnY29sb3IpLmdldEx1bWluYW5jZSgpLHd0PSExLGt0PVwieHlcIixNdD0hMSxBdD1EKGh0LGJ0LCQsSixfdD1cIk0wLDBIXCIrSytcIlZcIitRK1wiSDBWMFwiKSxUdD1QKGh0LCQsSil9KDAscixuKSk6XCJwYW5cIj09PW8mJihTdC5tb3ZlRm49UnQsU3QuZG9uZUZuPU50KSkpLHQuX2Z1bGxMYXlvdXQuX3JlZHJhZz1mdW5jdGlvbigpe3ZhciBlPXQuX2RyYWdkYXRhO2UmJmUuZWxlbWVudD09PXZ0JiYoaih0Ll9mdWxsTGF5b3V0LmRyYWdtb2RlKXx8KGR0KCksanQoWzAsMCxLLFFdKSxTdC5tb3ZlRm4oZS5keCxlLmR5KSkpfX0sZC5pbml0KFN0KTt2YXIgT3Q9WzAsMCxLLFFdLEl0PW51bGwsRHQ9QS5SRURSQVdERUxBWSxQdD1lLm1haW5wbG90P3QuX2Z1bGxMYXlvdXQuX3Bsb3RzW2UubWFpbnBsb3RdOmU7ZnVuY3Rpb24gUnQoZSxyKXtpZighdC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbil7aWYodC5fZnVsbExheW91dC5fcmVwbG90dGluZz0hMCxcImV3XCI9PT1ydHx8XCJuc1wiPT09bnQpcmV0dXJuIHJ0JiYoTyhYLGUpLEZ0KFwieFwiKSksbnQmJihPKFosciksRnQoXCJ5XCIpKSxqdChbcnQ/LWU6MCxudD8tcjowLEssUV0pLHZvaWQgQnQoKTtpZih0dC5pc1N1YnBsb3RDb25zdHJhaW5lZCYmcnQmJm50KXt2YXIgbj1cIndcIj09PXJ0PT0oXCJuXCI9PT1udCk/MTotMSxpPShlL0srbipyL1EpLzI7ZT1pKksscj1uKmkqUX1cIndcIj09PXJ0P2U9bChYLDAsZSk6XCJlXCI9PT1ydD9lPWwoWCwxLC1lKTpydHx8KGU9MCksXCJuXCI9PT1udD9yPWwoWiwxLHIpOlwic1wiPT09bnQ/cj1sKFosMCwtcik6bnR8fChyPTApO3ZhciBhPVwid1wiPT09cnQ/ZTowLG89XCJuXCI9PT1udD9yOjA7aWYodHQuaXNTdWJwbG90Q29uc3RyYWluZWQpe3ZhciBzO2lmKCFydCYmMT09PW50Lmxlbmd0aCl7Zm9yKHM9MDtzPFgubGVuZ3RoO3MrKylYW3NdLnJhbmdlPVhbc10uX3Iuc2xpY2UoKSxrKFhbc10sMS1yL1EpO2E9KGU9cipLL1EpLzJ9aWYoIW50JiYxPT09cnQubGVuZ3RoKXtmb3Iocz0wO3M8Wi5sZW5ndGg7cysrKVpbc10ucmFuZ2U9WltzXS5fci5zbGljZSgpLGsoWltzXSwxLWUvSyk7bz0ocj1lKlEvSykvMn19RnQoXCJ4XCIpLEZ0KFwieVwiKSxqdChbYSxvLEstZSxRLXJdKSxCdCgpfWZ1bmN0aW9uIGwodCxlLHIpe2Zvcih2YXIgbixpLGE9MS1lLG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9dFtvXTtpZighcy5maXhlZHJhbmdlKXtuPXMsaT1zLl9ybFthXSsocy5fcmxbZV0tcy5fcmxbYV0pL0koci9zLl9sZW5ndGgpO3ZhciBsPXMubDJyKGkpOyExIT09bCYmdm9pZCAwIT09bCYmKHMucmFuZ2VbZV09bCl9fXJldHVybiBuLl9sZW5ndGgqKG4uX3JsW2VdLWkpLyhuLl9ybFtlXS1uLl9ybFthXSl9fWZ1bmN0aW9uIEZ0KHQsZSl7Zm9yKHZhciByPWV0LmlzU3VicGxvdENvbnN0cmFpbmVkP3t4OloseTpYfVt0XTpldFt0K1wiYXhlc1wiXSxuPWV0LmlzU3VicGxvdENvbnN0cmFpbmVkP3t4OlgseTpafVt0XTpbXSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV0sbz1hLl9pZCxzPWV0LnhMaW5rc1tvXXx8ZXQueUxpbmtzW29dLGw9blswXXx8WVtzXXx8V1tzXTtpZihsKXt2YXIgYz1sLnJhbmdlO2U/KGVbYS5fbmFtZStcIi5yYW5nZVswXVwiXT1jWzBdLGVbYS5fbmFtZStcIi5yYW5nZVsxXVwiXT1jWzFdKTphLnJhbmdlPWN9fX1mdW5jdGlvbiBCdCgpe3ZhciBlLHI9W107ZnVuY3Rpb24gbih0KXtmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0uZml4ZWRyYW5nZXx8ci5wdXNoKHRbZV0uX2lkKX1mb3IoYXQmJihuKFgpLG4odHQueGF4ZXMpLG4oZXQueGF4ZXMpKSxvdCYmKG4oWiksbih0dC55YXhlcyksbihldC55YXhlcykpLHV0PXt9LGU9MDtlPHIubGVuZ3RoO2UrKyl7dmFyIGk9cltlXSxhPXgodCxpKTtmLmRyYXdPbmUodCxhLHtza2lwVGl0bGU6ITB9KSx1dFthLl9uYW1lK1wiLnJhbmdlWzBdXCJdPWEucmFuZ2VbMF0sdXRbYS5fbmFtZStcIi5yYW5nZVsxXVwiXT1hLnJhbmdlWzFdfWYucmVkcmF3Q29tcG9uZW50cyh0LHIpfWZ1bmN0aW9uIE50KCl7anQoWzAsMCxLLFFdKSxzLnN5bmNPckFzeW5jKFt5LnByZXZpb3VzUHJvbWlzZXMsZnVuY3Rpb24oKXt0Ll9mdWxsTGF5b3V0Ll9yZXBsb3R0aW5nPSExLG8uY2FsbChcIl9ndWlSZWxheW91dFwiLHQsdXQpfV0sdCl9ZnVuY3Rpb24ganQoZSl7dmFyIHIsbixpLGEsbD10Ll9mdWxsTGF5b3V0LGM9bC5fcGxvdHMsaD1sLl9zdWJwbG90cy5jYXJ0ZXNpYW47aWYobHQmJm8uc3VicGxvdHNSZWdpc3RyeS5zcGxvbS5kcmFnKHQpLHN0KWZvcihyPTA7cjxoLmxlbmd0aDtyKyspaWYoaT0obj1jW2hbcl1dKS54YXhpcyxhPW4ueWF4aXMsbi5fc2NlbmUpe3ZhciBmPXMuc2ltcGxlTWFwKGkucmFuZ2UsaS5yMmwpLHA9cy5zaW1wbGVNYXAoYS5yYW5nZSxhLnIybCk7bi5fc2NlbmUudXBkYXRlKHtyYW5nZTpbZlswXSxwWzBdLGZbMV0scFsxXV19KX1pZigobHR8fHN0KSYmKHYodCksbSh0KSksY3Qpe3ZhciBkPWVbMl0vRi5fbGVuZ3RoLGc9ZVszXS9HLl9sZW5ndGg7Zm9yKHI9MDtyPGgubGVuZ3RoO3IrKyl7aT0obj1jW2hbcl1dKS54YXhpcyxhPW4ueWF4aXM7dmFyIHkseCxiLF8sdz1hdCYmIWkuZml4ZWRyYW5nZSYmWVtpLl9pZF0saz1vdCYmIWEuZml4ZWRyYW5nZSYmV1thLl9pZF07aWYodz8oeT1kLGI9RT9lWzBdOnF0KGkseSkpOmV0LnhhSGFzaFtpLl9pZF0/KHk9ZCxiPWVbMF0qaS5fbGVuZ3RoL0YuX2xlbmd0aCk6ZXQueWFIYXNoW2kuX2lkXT8oeT1nLGI9XCJuc1wiPT09bnQ/LWVbMV0qaS5fbGVuZ3RoL0cuX2xlbmd0aDpxdChpLHkse246XCJ0b3BcIixzOlwiYm90dG9tXCJ9W250XSkpOmI9VXQoaSx5PVZ0KGksZCxnKSksaz8oeD1nLF89Uz9lWzFdOnF0KGEseCkpOmV0LnlhSGFzaFthLl9pZF0/KHg9ZyxfPWVbMV0qYS5fbGVuZ3RoL0cuX2xlbmd0aCk6ZXQueGFIYXNoW2EuX2lkXT8oeD1kLF89XCJld1wiPT09cnQ/LWVbMF0qYS5fbGVuZ3RoL0YuX2xlbmd0aDpxdChhLHgse2U6XCJyaWdodFwiLHc6XCJsZWZ0XCJ9W3J0XSkpOl89VXQoYSx4PVZ0KGEsZCxnKSkseXx8eCl7eXx8KHk9MSkseHx8KHg9MSk7dmFyIEE9aS5fb2Zmc2V0LWIveSxUPWEuX29mZnNldC1fL3g7bi5jbGlwUmVjdC5jYWxsKHUuc2V0VHJhbnNsYXRlLGIsXykuY2FsbCh1LnNldFNjYWxlLHkseCksbi5wbG90LmNhbGwodS5zZXRUcmFuc2xhdGUsQSxUKS5jYWxsKHUuc2V0U2NhbGUsMS95LDEveCkseT09PW4ueFNjYWxlRmFjdG9yJiZ4PT09bi55U2NhbGVGYWN0b3J8fCh1LnNldFBvaW50R3JvdXBTY2FsZShuLnpvb21TY2FsZVB0cyx5LHgpLHUuc2V0VGV4dFBvaW50c1NjYWxlKG4uem9vbVNjYWxlVHh0LHkseCkpLHUuaGlkZU91dHNpZGVSYW5nZVBvaW50cyhuLmNsaXBPbkF4aXNGYWxzZVRyYWNlcyxuKSxuLnhTY2FsZUZhY3Rvcj15LG4ueVNjYWxlRmFjdG9yPXh9fX19ZnVuY3Rpb24gVnQodCxlLHIpe3JldHVybiB0LmZpeGVkcmFuZ2U/MDphdCYmdHQueGFIYXNoW3QuX2lkXT9lOm90JiYodHQuaXNTdWJwbG90Q29uc3RyYWluZWQ/dHQueGFIYXNoOnR0LnlhSGFzaClbdC5faWRdP3I6MH1mdW5jdGlvbiBVdCh0LGUpe3JldHVybiBlPyh0LnJhbmdlPXQuX3Iuc2xpY2UoKSxrKHQsZSkscXQodCxlKSk6MH1mdW5jdGlvbiBxdCh0LGUscil7cmV0dXJuIHQuX2xlbmd0aCooMS1lKSpnW3J8fHQuY29uc3RyYWludG93YXJkfHxcIm1pZGRsZVwiXX1yZXR1cm4gUy5sZW5ndGgqRS5sZW5ndGghPTEmJnEodnQsZnVuY3Rpb24oZSl7aWYodC5fY29udGV4dC5fc2Nyb2xsWm9vbS5jYXJ0ZXNpYW58fHQuX2Z1bGxMYXlvdXQuX2VuYWJsZXNjcm9sbHpvb20pe2lmKEV0KCksdC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbilyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLHZvaWQgZS5zdG9wUHJvcGFnYXRpb24oKTtkdCgpLGNsZWFyVGltZW91dChJdCk7dmFyIHI9LWUuZGVsdGFZO2lmKGlzRmluaXRlKHIpfHwocj1lLndoZWVsRGVsdGEvMTApLGlzRmluaXRlKHIpKXt2YXIgbixpPU1hdGguZXhwKC1NYXRoLm1pbihNYXRoLm1heChyLC0yMCksMjApLzIwMCksYT1QdC5kcmFnbGF5ZXIuc2VsZWN0KFwiLm5zZXdkcmFnXCIpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPShlLmNsaWVudFgtYS5sZWZ0KS9hLndpZHRoLGw9KGEuYm90dG9tLWUuY2xpZW50WSkvYS5oZWlnaHQ7aWYoYXQpe2ZvcihFfHwobz0uNSksbj0wO248WC5sZW5ndGg7bisrKWMoWFtuXSxvLGkpO0Z0KFwieFwiKSxPdFsyXSo9aSxPdFswXSs9T3RbMl0qbyooMS9pLTEpfWlmKG90KXtmb3IoU3x8KGw9LjUpLG49MDtuPFoubGVuZ3RoO24rKyljKFpbbl0sbCxpKTtGdChcInlcIiksT3RbM10qPWksT3RbMV0rPU90WzNdKigxLWwpKigxL2ktMSl9anQoT3QpLEJ0KCksSXQ9c2V0VGltZW91dChmdW5jdGlvbigpe090PVswLDAsSyxRXSxOdCgpfSxEdCksZS5wcmV2ZW50RGVmYXVsdCgpfWVsc2Ugcy5sb2coXCJEaWQgbm90IGZpbmQgd2hlZWwgbW90aW9uIGF0dHJpYnV0ZXM6IFwiLGUpfWZ1bmN0aW9uIGModCxlLHIpe2lmKCF0LmZpeGVkcmFuZ2Upe3ZhciBuPXMuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpLGk9blswXSsoblsxXS1uWzBdKSplO3QucmFuZ2U9bi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQubDJyKGkrKGUtaSkqcil9KX19fSksdnR9LG1ha2VEcmFnZ2VyOkUsbWFrZVJlY3REcmFnZ2VyOkMsbWFrZVpvb21ib3g6RCxtYWtlQ29ybmVyczpQLHVwZGF0ZVpvb21ib3g6Uix4eUNvcm5lcnM6Vix0cmFuc2l0aW9uWm9vbWJveDpGLHJlbW92ZVpvb21ib3g6QixzaG93RG91YmxlQ2xpY2tOb3RpZmllcjpOLGF0dGFjaFdoZWVsRXZlbnRIYW5kbGVyOnF9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudFwiOjU5NixcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCI6NjczLFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzXCI6Njg2LFwiLi4vLi4vbGliL3NldGN1cnNvclwiOjcyMSxcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiOjcyNSxcIi4uLy4uL3Bsb3RfYXBpL3N1YnJvdXRpbmVzXCI6NzQwLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9wbG90c1wiOjgxMCxcIi4vYXhlc1wiOjc0OSxcIi4vYXhpc19pZHNcIjo3NTIsXCIuL2NvbnN0YW50c1wiOjc1NSxcIi4vc2NhbGVfem9vbVwiOjc2NSxcIi4vc2VsZWN0XCI6NzY2LGQzOjE1NSxcImhhcy1wYXNzaXZlLWV2ZW50c1wiOjQwNCx0aW55Y29sb3IyOjUyMn1dLDc1ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4XCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnRcIiksbz10KFwiLi4vLi4vbGliL3NldGN1cnNvclwiKSxzPXQoXCIuL2RyYWdib3hcIikubWFrZURyYWdCb3gsbD10KFwiLi9jb25zdGFudHNcIikuRFJBR0dFUlNJWkU7ci5pbml0SW50ZXJhY3Rpb25zPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7aWYodC5fY29udGV4dC5zdGF0aWNQbG90KW4uc2VsZWN0KHQpLnNlbGVjdEFsbChcIi5kcmFnXCIpLnJlbW92ZSgpO2Vsc2UgaWYoZS5faGFzKFwiY2FydGVzaWFuXCIpfHxlLl9oYXMoXCJzcGxvbVwiKSl7T2JqZWN0LmtleXMoZS5fcGxvdHN8fHt9KS5zb3J0KGZ1bmN0aW9uKHQscil7aWYoKGUuX3Bsb3RzW3RdLm1haW5wbG90JiYhMCk9PT0oZS5fcGxvdHNbcl0ubWFpbnBsb3QmJiEwKSl7dmFyIG49dC5zcGxpdChcInlcIiksaT1yLnNwbGl0KFwieVwiKTtyZXR1cm4gblswXT09PWlbMF0/TnVtYmVyKG5bMV18fDEpLU51bWJlcihpWzFdfHwxKTpOdW1iZXIoblswXXx8MSktTnVtYmVyKGlbMF18fDEpfXJldHVybiBlLl9wbG90c1t0XS5tYWlucGxvdD8xOi0xfSkuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgbj1lLl9wbG90c1tyXSxvPW4ueGF4aXMsYz1uLnlheGlzO2lmKCFuLm1haW5wbG90KXt2YXIgdT1zKHQsbixvLl9vZmZzZXQsYy5fb2Zmc2V0LG8uX2xlbmd0aCxjLl9sZW5ndGgsXCJuc1wiLFwiZXdcIik7dS5vbm1vdXNlbW92ZT1mdW5jdGlvbihlKXt0Ll9mdWxsTGF5b3V0Ll9yZWhvdmVyPWZ1bmN0aW9uKCl7dC5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PT09ciYmaS5ob3Zlcih0LGUscil9LGkuaG92ZXIodCxlLHIpLHQuX2Z1bGxMYXlvdXQuX2xhc3Rob3Zlcj11LHQuX2Z1bGxMYXlvdXQuX2hvdmVyc3VicGxvdD1yfSx1Lm9ubW91c2VvdXQ9ZnVuY3Rpb24oZSl7dC5fZHJhZ2dpbmd8fCh0Ll9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9bnVsbCxhLnVuaG92ZXIodCxlKSl9LHQuX2NvbnRleHQuc2hvd0F4aXNEcmFnSGFuZGxlcyYmKHModCxuLG8uX29mZnNldC1sLGMuX29mZnNldC1sLGwsbCxcIm5cIixcIndcIikscyh0LG4sby5fb2Zmc2V0K28uX2xlbmd0aCxjLl9vZmZzZXQtbCxsLGwsXCJuXCIsXCJlXCIpLHModCxuLG8uX29mZnNldC1sLGMuX29mZnNldCtjLl9sZW5ndGgsbCxsLFwic1wiLFwid1wiKSxzKHQsbixvLl9vZmZzZXQrby5fbGVuZ3RoLGMuX29mZnNldCtjLl9sZW5ndGgsbCxsLFwic1wiLFwiZVwiKSl9aWYodC5fY29udGV4dC5zaG93QXhpc0RyYWdIYW5kbGVzKXtpZihyPT09by5fbWFpblN1YnBsb3Qpe3ZhciBoPW8uX21haW5MaW5lUG9zaXRpb247XCJ0b3BcIj09PW8uc2lkZSYmKGgtPWwpLHModCxuLG8uX29mZnNldCsuMSpvLl9sZW5ndGgsaCwuOCpvLl9sZW5ndGgsbCxcIlwiLFwiZXdcIikscyh0LG4sby5fb2Zmc2V0LGgsLjEqby5fbGVuZ3RoLGwsXCJcIixcIndcIikscyh0LG4sby5fb2Zmc2V0Ky45Km8uX2xlbmd0aCxoLC4xKm8uX2xlbmd0aCxsLFwiXCIsXCJlXCIpfWlmKHI9PT1jLl9tYWluU3VicGxvdCl7dmFyIGY9Yy5fbWFpbkxpbmVQb3NpdGlvbjtcInJpZ2h0XCIhPT1jLnNpZGUmJihmLT1sKSxzKHQsbixmLGMuX29mZnNldCsuMSpjLl9sZW5ndGgsbCwuOCpjLl9sZW5ndGgsXCJuc1wiLFwiXCIpLHModCxuLGYsYy5fb2Zmc2V0Ky45KmMuX2xlbmd0aCxsLC4xKmMuX2xlbmd0aCxcInNcIixcIlwiKSxzKHQsbixmLGMuX29mZnNldCxsLC4xKmMuX2xlbmd0aCxcIm5cIixcIlwiKX19fSk7dmFyIG89ZS5faG92ZXJsYXllci5ub2RlKCk7by5vbm1vdXNlbW92ZT1mdW5jdGlvbihyKXtyLnRhcmdldD10Ll9mdWxsTGF5b3V0Ll9sYXN0aG92ZXIsaS5ob3Zlcih0LHIsZS5faG92ZXJzdWJwbG90KX0sby5vbmNsaWNrPWZ1bmN0aW9uKGUpe2UudGFyZ2V0PXQuX2Z1bGxMYXlvdXQuX2xhc3Rob3ZlcixpLmNsaWNrKHQsZSl9LG8ub25tb3VzZWRvd249ZnVuY3Rpb24oZSl7dC5fZnVsbExheW91dC5fbGFzdGhvdmVyLm9ubW91c2Vkb3duKGUpfSxyLnVwZGF0ZUZ4KHQpfX0sci51cGRhdGVGeD1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9XCJwYW5cIj09PWUuZHJhZ21vZGU/XCJtb3ZlXCI6XCJjcm9zc2hhaXJcIjtvKGUuX2RyYWdnZXJzLHIpfX0se1wiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudFwiOjU5NixcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9saWIvc2V0Y3Vyc29yXCI6NzIxLFwiLi9jb25zdGFudHNcIjo3NTUsXCIuL2RyYWdib3hcIjo3NTcsZDM6MTU1fV0sNzU5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uLy4uL2xpYlwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIGE9ZVt0XTtpZihBcnJheS5pc0FycmF5KGEpKWZvcih2YXIgbz1uLnN1YnBsb3RzUmVnaXN0cnkuY2FydGVzaWFuLHM9by5pZFJlZ2V4LGw9ci5fc3VicGxvdHMsYz1sLnhheGlzLHU9bC55YXhpcyxoPWwuY2FydGVzaWFuLGY9ci5faGFzKFwiY2FydGVzaWFuXCIpfHxyLl9oYXMoXCJnbDJkXCIpLHA9MDtwPGEubGVuZ3RoO3ArKyl7dmFyIGQ9YVtwXTtpZihpLmlzUGxhaW5PYmplY3QoZCkpe3ZhciBnPWQueHJlZix2PWQueXJlZixtPXMueC50ZXN0KGcpLHk9cy55LnRlc3Qodik7aWYobXx8eSl7Znx8aS5wdXNoVW5pcXVlKHIuX2Jhc2VQbG90TW9kdWxlcyxvKTt2YXIgeD0hMTttJiYtMT09PWMuaW5kZXhPZihnKSYmKGMucHVzaChnKSx4PSEwKSx5JiYtMT09PXUuaW5kZXhPZih2KSYmKHUucHVzaCh2KSx4PSEwKSx4JiZtJiZ5JiZoLnB1c2goZyt2KX19fX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOX1dLDc2MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxhPXQoXCIuLi8uLi9saWJcIiksbz10KFwiLi4vcGxvdHNcIikscz10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLGw9dChcIi4uL2dldF9kYXRhXCIpLmdldE1vZHVsZUNhbGNEYXRhLGM9dChcIi4vYXhpc19pZHNcIiksdT10KFwiLi9jb25zdGFudHNcIiksaD10KFwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIiksZj1hLmVuc3VyZVNpbmdsZTtmdW5jdGlvbiBwKHQsZSxyKXtyZXR1cm4gYS5lbnN1cmVTaW5nbGUodCxlLHIsZnVuY3Rpb24odCl7dC5kYXR1bShyKX0pfWZ1bmN0aW9uIGQodCxlLHIsYSxvKXtmb3IodmFyIGMsaCxmLHA9dS50cmFjZUxheWVyQ2xhc3NlcyxkPXQuX2Z1bGxMYXlvdXQsZz1kLl9tb2R1bGVzLHY9W10sbT1bXSx5PTA7eTxnLmxlbmd0aDt5Kyspe3ZhciB4PShjPWdbeV0pLm5hbWUsYj1pLm1vZHVsZXNbeF0uY2F0ZWdvcmllcztpZihiLnN2Zyl7dmFyIF89Yy5sYXllck5hbWV8fHgrXCJsYXllclwiLHc9Yy5wbG90O2Y9KGg9bChyLHcpKVswXSxyPWhbMV0sZi5sZW5ndGgmJnYucHVzaCh7aTpwLmluZGV4T2YoXyksY2xhc3NOYW1lOl8scGxvdE1ldGhvZDp3LGNkTW9kdWxlOmZ9KSxiLnpvb21TY2FsZSYmbS5wdXNoKFwiLlwiK18pfX12LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pLWUuaX0pO3ZhciBrPWUucGxvdC5zZWxlY3RBbGwoXCJnLm1sYXllclwiKS5kYXRhKHYsZnVuY3Rpb24odCl7cmV0dXJuIHQuY2xhc3NOYW1lfSk7aWYoay5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuY2xhc3NOYW1lfSkuY2xhc3NlZChcIm1sYXllclwiLCEwKSxrLmV4aXQoKS5yZW1vdmUoKSxrLm9yZGVyKCksay5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLGw9ci5jbGFzc05hbWU7ci5wbG90TWV0aG9kKHQsZSxyLmNkTW9kdWxlLGksYSxvKSxcInNjYXR0ZXJsYXllclwiIT09bCYmXCJiYXJsYXllclwiIT09bCYmXCJ3YXRlcmZhbGxsYXllclwiIT09bCYmcy5zZXRDbGlwVXJsKGksZS5sYXllckNsaXBJZCx0KX0pLGQuX2hhcyhcInNjYXR0ZXJnbFwiKSYmKGM9aS5nZXRNb2R1bGUoXCJzY2F0dGVyZ2xcIiksZj1sKHIsYylbMF0sYy5wbG90KHQsZSxmKSksIXQuX2NvbnRleHQuc3RhdGljUGxvdCYmKGUuX2hhc0NsaXBPbkF4aXNGYWxzZSYmKGUuY2xpcE9uQXhpc0ZhbHNlVHJhY2VzPWUucGxvdC5zZWxlY3RBbGwoXCIuc2NhdHRlcmxheWVyLCAuYmFybGF5ZXIsIC53YXRlcmZhbGxsYXllclwiKS5zZWxlY3RBbGwoXCIudHJhY2VcIikpLG0ubGVuZ3RoKSl7dmFyIEE9ZS5wbG90LnNlbGVjdEFsbChtLmpvaW4oXCIsXCIpKS5zZWxlY3RBbGwoXCIudHJhY2VcIik7ZS56b29tU2NhbGVQdHM9QS5zZWxlY3RBbGwoXCJwYXRoLnBvaW50XCIpLGUuem9vbVNjYWxlVHh0PUEuc2VsZWN0QWxsKFwiLnRleHRwb2ludFwiKX19ZnVuY3Rpb24gZyh0LGUpe3ZhciByPWUucGxvdGdyb3VwLG49ZS5pZCxpPXUubGF5ZXJWYWx1ZTJsYXllckNsYXNzW2UueGF4aXMubGF5ZXJdLGE9dS5sYXllclZhbHVlMmxheWVyQ2xhc3NbZS55YXhpcy5sYXllcl0sbz10Ll9mdWxsTGF5b3V0Ll9oYXNPbmx5TGFyZ2VTcGxvbXM7aWYoZS5tYWlucGxvdCl7dmFyIHM9ZS5tYWlucGxvdGluZm8sbD1zLnBsb3Rncm91cCxoPW4rXCIteFwiLGQ9bitcIi15XCI7ZS5ncmlkbGF5ZXI9cy5ncmlkbGF5ZXIsZS56ZXJvbGluZWxheWVyPXMuemVyb2xpbmVsYXllcixmKHMub3ZlcmxpbmVzQmVsb3csXCJwYXRoXCIsaCksZihzLm92ZXJsaW5lc0JlbG93LFwicGF0aFwiLGQpLGYocy5vdmVyYXhlc0JlbG93LFwiZ1wiLGgpLGYocy5vdmVyYXhlc0JlbG93LFwiZ1wiLGQpLGUucGxvdD1mKHMub3ZlcnBsb3QsXCJnXCIsbiksZihzLm92ZXJsaW5lc0Fib3ZlLFwicGF0aFwiLGgpLGYocy5vdmVybGluZXNBYm92ZSxcInBhdGhcIixkKSxmKHMub3ZlcmF4ZXNBYm92ZSxcImdcIixoKSxmKHMub3ZlcmF4ZXNBYm92ZSxcImdcIixkKSxlLnhsaW5lcz1sLnNlbGVjdChcIi5vdmVybGluZXMtXCIraSkuc2VsZWN0KFwiLlwiK2gpLGUueWxpbmVzPWwuc2VsZWN0KFwiLm92ZXJsaW5lcy1cIithKS5zZWxlY3QoXCIuXCIrZCksZS54YXhpc2xheWVyPWwuc2VsZWN0KFwiLm92ZXJheGVzLVwiK2kpLnNlbGVjdChcIi5cIitoKSxlLnlheGlzbGF5ZXI9bC5zZWxlY3QoXCIub3ZlcmF4ZXMtXCIrYSkuc2VsZWN0KFwiLlwiK2QpfWVsc2UgaWYobyllLnhsaW5lcz1mKHIsXCJwYXRoXCIsXCJ4bGluZXMtYWJvdmVcIiksZS55bGluZXM9ZihyLFwicGF0aFwiLFwieWxpbmVzLWFib3ZlXCIpLGUueGF4aXNsYXllcj1mKHIsXCJnXCIsXCJ4YXhpc2xheWVyLWFib3ZlXCIpLGUueWF4aXNsYXllcj1mKHIsXCJnXCIsXCJ5YXhpc2xheWVyLWFib3ZlXCIpO2Vsc2V7dmFyIGc9ZihyLFwiZ1wiLFwibGF5ZXItc3VicGxvdFwiKTtlLnNoYXBlbGF5ZXI9ZihnLFwiZ1wiLFwic2hhcGVsYXllclwiKSxlLmltYWdlbGF5ZXI9ZihnLFwiZ1wiLFwiaW1hZ2VsYXllclwiKSxlLmdyaWRsYXllcj1mKHIsXCJnXCIsXCJncmlkbGF5ZXJcIiksZS56ZXJvbGluZWxheWVyPWYocixcImdcIixcInplcm9saW5lbGF5ZXJcIiksZihyLFwicGF0aFwiLFwieGxpbmVzLWJlbG93XCIpLGYocixcInBhdGhcIixcInlsaW5lcy1iZWxvd1wiKSxlLm92ZXJsaW5lc0JlbG93PWYocixcImdcIixcIm92ZXJsaW5lcy1iZWxvd1wiKSxmKHIsXCJnXCIsXCJ4YXhpc2xheWVyLWJlbG93XCIpLGYocixcImdcIixcInlheGlzbGF5ZXItYmVsb3dcIiksZS5vdmVyYXhlc0JlbG93PWYocixcImdcIixcIm92ZXJheGVzLWJlbG93XCIpLGUucGxvdD1mKHIsXCJnXCIsXCJwbG90XCIpLGUub3ZlcnBsb3Q9ZihyLFwiZ1wiLFwib3ZlcnBsb3RcIiksZS54bGluZXM9ZihyLFwicGF0aFwiLFwieGxpbmVzLWFib3ZlXCIpLGUueWxpbmVzPWYocixcInBhdGhcIixcInlsaW5lcy1hYm92ZVwiKSxlLm92ZXJsaW5lc0Fib3ZlPWYocixcImdcIixcIm92ZXJsaW5lcy1hYm92ZVwiKSxmKHIsXCJnXCIsXCJ4YXhpc2xheWVyLWFib3ZlXCIpLGYocixcImdcIixcInlheGlzbGF5ZXItYWJvdmVcIiksZS5vdmVyYXhlc0Fib3ZlPWYocixcImdcIixcIm92ZXJheGVzLWFib3ZlXCIpLGUueGxpbmVzPXIuc2VsZWN0KFwiLnhsaW5lcy1cIitpKSxlLnlsaW5lcz1yLnNlbGVjdChcIi55bGluZXMtXCIrYSksZS54YXhpc2xheWVyPXIuc2VsZWN0KFwiLnhheGlzbGF5ZXItXCIraSksZS55YXhpc2xheWVyPXIuc2VsZWN0KFwiLnlheGlzbGF5ZXItXCIrYSl9b3x8KHAoZS5ncmlkbGF5ZXIsXCJnXCIsZS54YXhpcy5faWQpLHAoZS5ncmlkbGF5ZXIsXCJnXCIsZS55YXhpcy5faWQpLGUuZ3JpZGxheWVyLnNlbGVjdEFsbChcImdcIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkuc29ydChjLmlkU29ydCkpLGUueGxpbmVzLnN0eWxlKFwiZmlsbFwiLFwibm9uZVwiKS5jbGFzc2VkKFwiY3Jpc3BcIiwhMCksZS55bGluZXMuc3R5bGUoXCJmaWxsXCIsXCJub25lXCIpLmNsYXNzZWQoXCJjcmlzcFwiLCEwKX1mdW5jdGlvbiB2KHQsZSl7aWYodCl7dmFyIHI9e307Zm9yKHZhciBpIGluIHQuZWFjaChmdW5jdGlvbih0KXt2YXIgaT10WzBdO24uc2VsZWN0KHRoaXMpLnJlbW92ZSgpLG0oaSxlKSxyW2ldPSEwfSksZS5fcGxvdHMpZm9yKHZhciBhPWUuX3Bsb3RzW2ldLm92ZXJsYXlzfHxbXSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107cltzLmlkXSYmcy5wbG90LnNlbGVjdEFsbChcIi50cmFjZVwiKS5yZW1vdmUoKX19fWZ1bmN0aW9uIG0odCxlKXtlLl9kcmFnZ2Vycy5zZWxlY3RBbGwoXCJnLlwiK3QpLnJlbW92ZSgpLGUuX2RlZnMuc2VsZWN0KFwiI2NsaXBcIitlLl91aWQrdCtcInBsb3RcIikucmVtb3ZlKCl9ci5uYW1lPVwiY2FydGVzaWFuXCIsci5hdHRyPVtcInhheGlzXCIsXCJ5YXhpc1wiXSxyLmlkUm9vdD1bXCJ4XCIsXCJ5XCJdLHIuaWRSZWdleD11LmlkUmVnZXgsci5hdHRyUmVnZXg9dS5hdHRyUmVnZXgsci5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksci5sYXlvdXRBdHRyaWJ1dGVzPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9dChcIi4vbGF5b3V0X2RlZmF1bHRzXCIpLHIudHJhbnNpdGlvbkF4ZXM9dChcIi4vdHJhbnNpdGlvbl9heGVzXCIpLHIuZmluYWxpemVTdWJwbG90cz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxvPWUuX3N1YnBsb3RzLHM9by54YXhpcyxsPW8ueWF4aXMsaD1vLmNhcnRlc2lhbixmPWguY29uY2F0KG8uZ2wyZHx8W10pLHA9e30sZD17fTtmb3Iocj0wO3I8Zi5sZW5ndGg7cisrKXt2YXIgZz1mW3JdLnNwbGl0KFwieVwiKTtwW2dbMF1dPTEsZFtcInlcIitnWzFdXT0xfWZvcihyPTA7cjxzLmxlbmd0aDtyKyspcFtuPXNbcl1dfHwoaT0odFtjLmlkMm5hbWUobildfHx7fSkuYW5jaG9yLHUuaWRSZWdleC55LnRlc3QoaSl8fChpPVwieVwiKSxoLnB1c2gobitpKSxmLnB1c2gobitpKSxkW2ldfHwoZFtpXT0xLGEucHVzaFVuaXF1ZShsLGkpKSk7Zm9yKHI9MDtyPGwubGVuZ3RoO3IrKylkW2k9bFtyXV18fChuPSh0W2MuaWQybmFtZShpKV18fHt9KS5hbmNob3IsdS5pZFJlZ2V4LngudGVzdChuKXx8KG49XCJ4XCIpLGgucHVzaChuK2kpLGYucHVzaChuK2kpLHBbbl18fChwW25dPTEsYS5wdXNoVW5pcXVlKHMsbikpKTtpZighZi5sZW5ndGgpe2Zvcih2YXIgdiBpbiBuPVwiXCIsaT1cIlwiLHQpe2lmKHUuYXR0clJlZ2V4LnRlc3QodikpXCJ4XCI9PT12LmNoYXJBdCgwKT8oIW58fCt2LnN1YnN0cig1KTwrbi5zdWJzdHIoNSkpJiYobj12KTooIWl8fCt2LnN1YnN0cig1KTwraS5zdWJzdHIoNSkpJiYoaT12KX1uPW4/Yy5uYW1lMmlkKG4pOlwieFwiLGk9aT9jLm5hbWUyaWQoaSk6XCJ5XCIscy5wdXNoKG4pLGwucHVzaChpKSxoLnB1c2gobitpKX19LHIucGxvdD1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPXQuX2Z1bGxMYXlvdXQsbz1hLl9zdWJwbG90cy5jYXJ0ZXNpYW4scz10LmNhbGNkYXRhO2lmKG51bGwhPT1lKXtpZighQXJyYXkuaXNBcnJheShlKSlmb3IoZT1bXSxpPTA7aTxzLmxlbmd0aDtpKyspZS5wdXNoKGkpO2ZvcihpPTA7aTxvLmxlbmd0aDtpKyspe2Zvcih2YXIgbCxjPW9baV0sdT1hLl9wbG90c1tjXSxoPVtdLGY9MDtmPHMubGVuZ3RoO2YrKyl7dmFyIHA9c1tmXSxnPXBbMF0udHJhY2U7Zy54YXhpcytnLnlheGlzPT09YyYmKCgtMSE9PWUuaW5kZXhPZihnLmluZGV4KXx8Zy5jYXJwZXQpJiYobCYmbFswXS50cmFjZS54YXhpcytsWzBdLnRyYWNlLnlheGlzPT09YyYmLTEhPT1bXCJ0b25leHR4XCIsXCJ0b25leHR5XCIsXCJ0b25leHRcIl0uaW5kZXhPZihnLmZpbGwpJiYtMT09PWguaW5kZXhPZihsKSYmaC5wdXNoKGwpLGgucHVzaChwKSksbD1wKX1kKHQsdSxoLHIsbil9fX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scz1uLl9wbG90c3x8e30sbD1lLl9wbG90c3x8e30sdT1uLl9zdWJwbG90c3x8e307aWYobi5faGFzT25seUxhcmdlU3Bsb21zJiYhZS5faGFzT25seUxhcmdlU3Bsb21zKWZvcihvIGluIHMpKGk9c1tvXSkucGxvdGdyb3VwJiZpLnBsb3Rncm91cC5yZW1vdmUoKTt2YXIgaD1uLl9oYXMmJm4uX2hhcyhcImdsXCIpLGY9ZS5faGFzJiZlLl9oYXMoXCJnbFwiKTtpZihoJiYhZilmb3IobyBpbiBzKShpPXNbb10pLl9zY2VuZSYmaS5fc2NlbmUuZGVzdHJveSgpO2lmKHUueGF4aXMmJnUueWF4aXMpe3ZhciBwPWMubGlzdElkcyh7X2Z1bGxMYXlvdXQ6bn0pO2ZvcihhPTA7YTxwLmxlbmd0aDthKyspe3ZhciBkPXBbYV07ZVtjLmlkMm5hbWUoZCldfHxuLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKFwiLmctXCIrZCtcInRpdGxlXCIpLnJlbW92ZSgpfX12YXIgZz1uLl9oYXMmJm4uX2hhcyhcImNhcnRlc2lhblwiKSx5PWUuX2hhcyYmZS5faGFzKFwiY2FydGVzaWFuXCIpO2lmKGcmJiF5KXYobi5fY2FydGVzaWFubGF5ZXIuc2VsZWN0QWxsKFwiLnN1YnBsb3RcIiksbiksbi5fZGVmcy5zZWxlY3RBbGwoXCIuYXhlc2NsaXBcIikucmVtb3ZlKCksZGVsZXRlIG4uX2F4aXNDb25zdHJhaW50R3JvdXBzO2Vsc2UgaWYodS5jYXJ0ZXNpYW4pZm9yKGE9MDthPHUuY2FydGVzaWFuLmxlbmd0aDthKyspe3ZhciB4PXUuY2FydGVzaWFuW2FdO2lmKCFsW3hdKXt2YXIgYj1cIi5cIit4K1wiLC5cIit4K1wiLXgsLlwiK3grXCIteVwiO24uX2NhcnRlc2lhbmxheWVyLnNlbGVjdEFsbChiKS5yZW1vdmUoKSxtKHgsbil9fX0sci5kcmF3RnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scz10Ll9mdWxsTGF5b3V0LGw9cy5fc3VicGxvdHMuY2FydGVzaWFuLGM9bC5sZW5ndGgsdT1bXSxoPVtdO2ZvcihlPTA7ZTxjO2UrKyl7bj1sW2VdLGk9cy5fcGxvdHNbbl0sYT1pLnhheGlzLG89aS55YXhpczt2YXIgZj1hLl9tYWluQXhpcyxwPW8uX21haW5BeGlzLGQ9Zi5faWQrcC5faWQsZz1zLl9wbG90c1tkXTtpLm92ZXJsYXlzPVtdLGQhPT1uJiZnPyhpLm1haW5wbG90PWQsaS5tYWlucGxvdGluZm89ZyxoLnB1c2gobikpOihpLm1haW5wbG90PXZvaWQgMCxpLm1haW5QbG90aW5mbz12b2lkIDAsdS5wdXNoKG4pKX1mb3IoZT0wO2U8aC5sZW5ndGg7ZSsrKW49aFtlXSwoaT1zLl9wbG90c1tuXSkubWFpbnBsb3RpbmZvLm92ZXJsYXlzLnB1c2goaSk7dmFyIHY9dS5jb25jYXQoaCksbT1uZXcgQXJyYXkoYyk7Zm9yKGU9MDtlPGM7ZSsrKXtuPXZbZV0saT1zLl9wbG90c1tuXSxhPWkueGF4aXMsbz1pLnlheGlzO3ZhciB5PVtuLGEubGF5ZXIsby5sYXllcixhLm92ZXJsYXlpbmd8fFwiXCIsby5vdmVybGF5aW5nfHxcIlwiXTtmb3Iocj0wO3I8aS5vdmVybGF5cy5sZW5ndGg7cisrKXkucHVzaChpLm92ZXJsYXlzW3JdLmlkKTttW2VdPXl9cmV0dXJuIG19KHQpLGk9ZS5fY2FydGVzaWFubGF5ZXIuc2VsZWN0QWxsKFwiLnN1YnBsb3RcIikuZGF0YShyLFN0cmluZyk7aS5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJzdWJwbG90IFwiK3RbMF19KSxpLm9yZGVyKCksaS5leGl0KCkuY2FsbCh2LGUpLGkuZWFjaChmdW5jdGlvbihyKXt2YXIgaT1yWzBdLGE9ZS5fcGxvdHNbaV07YS5wbG90Z3JvdXA9bi5zZWxlY3QodGhpcyksZyh0LGEpLGEuZHJhZ2xheWVyPWYoZS5fZHJhZ2dlcnMsXCJnXCIsaSl9KX0sci5yYW5nZVBsb3Q9ZnVuY3Rpb24odCxlLHIpe2codCxlKSxkKHQsZSxyKSxvLnN0eWxlKHQpfSxyLnRvU1ZHPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2dsaW1hZ2VzLHI9bi5zZWxlY3QodCkuc2VsZWN0QWxsKFwiLnN2Zy1jb250YWluZXJcIik7ci5maWx0ZXIoZnVuY3Rpb24odCxlKXtyZXR1cm4gZT09PXIuc2l6ZSgpLTF9KS5zZWxlY3RBbGwoXCIuZ2wtY2FudmFzLWNvbnRleHQsIC5nbC1jYW52YXMtZm9jdXNcIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PXRoaXMudG9EYXRhVVJMKFwiaW1hZ2UvcG5nXCIpO2UuYXBwZW5kKFwic3ZnOmltYWdlXCIpLmF0dHIoe3htbG5zOmguc3ZnLFwieGxpbms6aHJlZlwiOnQscHJlc2VydmVBc3BlY3RSYXRpbzpcIm5vbmVcIix4OjAseTowLHdpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0fSl9KX0sci51cGRhdGVGeD10KFwiLi9ncmFwaF9pbnRlcmFjdFwiKS51cGRhdGVGeH0se1wiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIjo2NzksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL2dldF9kYXRhXCI6Nzg0LFwiLi4vcGxvdHNcIjo4MTAsXCIuL2F0dHJpYnV0ZXNcIjo3NDcsXCIuL2F4aXNfaWRzXCI6NzUyLFwiLi9jb25zdGFudHNcIjo3NTUsXCIuL2dyYXBoX2ludGVyYWN0XCI6NzU4LFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjc2MSxcIi4vbGF5b3V0X2RlZmF1bHRzXCI6NzYyLFwiLi90cmFuc2l0aW9uX2F4ZXNcIjo3NzEsZDM6MTU1fV0sNzYxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2ZvbnRfYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXNcIikuZGFzaCxvPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQscz10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKS50ZW1wbGF0ZWRBcnJheSxsPXQoXCIuL2NvbnN0YW50c1wiKTtlLmV4cG9ydHM9e3Zpc2libGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZWRpdFR5cGU6XCJwbG90XCJ9LGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6XCJ0aWNrc1wifSx0aXRsZTp7dGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwidGlja3NcIn0sZm9udDpuKHtlZGl0VHlwZTpcInRpY2tzXCJ9KSxlZGl0VHlwZTpcInRpY2tzXCJ9LHR5cGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcIi1cIixcImxpbmVhclwiLFwibG9nXCIsXCJkYXRlXCIsXCJjYXRlZ29yeVwiLFwibXVsdGljYXRlZ29yeVwiXSxkZmx0OlwiLVwiLGVkaXRUeXBlOlwiY2FsY1wiLF9ub1RlbXBsYXRpbmc6ITB9LGF1dG9yYW5nZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6WyEwLCExLFwicmV2ZXJzZWRcIl0sZGZsdDohMCxlZGl0VHlwZTpcImF4cmFuZ2VcIixpbXBsaWVkRWRpdHM6e1wicmFuZ2VbMF1cIjp2b2lkIDAsXCJyYW5nZVsxXVwiOnZvaWQgMH19LHJhbmdlbW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibm9ybWFsXCIsXCJ0b3plcm9cIixcIm5vbm5lZ2F0aXZlXCJdLGRmbHQ6XCJub3JtYWxcIixlZGl0VHlwZTpcInBsb3RcIn0scmFuZ2U6e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsaXRlbXM6W3t2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJheHJhbmdlXCIsaW1wbGllZEVkaXRzOntcIl5hdXRvcmFuZ2VcIjohMX0sYW5pbTohMH0se3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImF4cmFuZ2VcIixpbXBsaWVkRWRpdHM6e1wiXmF1dG9yYW5nZVwiOiExfSxhbmltOiEwfV0sZWRpdFR5cGU6XCJheHJhbmdlXCIsaW1wbGllZEVkaXRzOnthdXRvcmFuZ2U6ITF9LGFuaW06ITB9LGZpeGVkcmFuZ2U6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMSxlZGl0VHlwZTpcImNhbGNcIn0sc2NhbGVhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltsLmlkUmVnZXgueC50b1N0cmluZygpLGwuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOlwicGxvdFwifSxzY2FsZXJhdGlvOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOlwicGxvdFwifSxjb25zdHJhaW46e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInJhbmdlXCIsXCJkb21haW5cIl0sZGZsdDpcInJhbmdlXCIsZWRpdFR5cGU6XCJwbG90XCJ9LGNvbnN0cmFpbnRvd2FyZDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibGVmdFwiLFwiY2VudGVyXCIsXCJyaWdodFwiLFwidG9wXCIsXCJtaWRkbGVcIixcImJvdHRvbVwiXSxlZGl0VHlwZTpcInBsb3RcIn0sbWF0Y2hlczp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W2wuaWRSZWdleC54LnRvU3RyaW5nKCksbC5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6XCJjYWxjXCJ9LHRpY2ttb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhdXRvXCIsXCJsaW5lYXJcIixcImFycmF5XCJdLGVkaXRUeXBlOlwidGlja3NcIixpbXBsaWVkRWRpdHM6e3RpY2swOnZvaWQgMCxkdGljazp2b2lkIDB9fSxudGlja3M6e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsbWluOjAsZGZsdDowLGVkaXRUeXBlOlwidGlja3NcIn0sdGljazA6e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcInRpY2tzXCIsaW1wbGllZEVkaXRzOnt0aWNrbW9kZTpcImxpbmVhclwifX0sZHRpY2s6e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcInRpY2tzXCIsaW1wbGllZEVkaXRzOnt0aWNrbW9kZTpcImxpbmVhclwifX0sdGlja3ZhbHM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJ0aWNrc1wifSx0aWNrdGV4dDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcInRpY2tzXCJ9LHRpY2tzOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJvdXRzaWRlXCIsXCJpbnNpZGVcIixcIlwiXSxlZGl0VHlwZTpcInRpY2tzXCJ9LHRpY2tzb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImxhYmVsc1wiLFwiYm91bmRhcmllc1wiXSxkZmx0OlwibGFiZWxzXCIsZWRpdFR5cGU6XCJ0aWNrc1wifSxtaXJyb3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOlshMCxcInRpY2tzXCIsITEsXCJhbGxcIixcImFsbHRpY2tzXCJdLGRmbHQ6ITEsZWRpdFR5cGU6XCJ0aWNrcytsYXlvdXRzdHlsZVwifSx0aWNrbGVuOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDo1LGVkaXRUeXBlOlwidGlja3NcIn0sdGlja3dpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOlwidGlja3NcIn0sdGlja2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6XCJ0aWNrc1wifSxzaG93dGlja2xhYmVsczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwidGlja3NcIn0sYXV0b21hcmdpbjp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwidGlja3NcIn0sc2hvd3NwaWtlczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwibW9kZWJhclwifSxzcGlrZWNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0Om51bGwsZWRpdFR5cGU6XCJub25lXCJ9LHNwaWtldGhpY2tuZXNzOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDozLGVkaXRUeXBlOlwibm9uZVwifSxzcGlrZWRhc2g6byh7fSxhLHtkZmx0OlwiZGFzaFwiLGVkaXRUeXBlOlwibm9uZVwifSksc3Bpa2Vtb2RlOnt2YWxUeXBlOlwiZmxhZ2xpc3RcIixmbGFnczpbXCJ0b2F4aXNcIixcImFjcm9zc1wiLFwibWFya2VyXCJdLGRmbHQ6XCJ0b2F4aXNcIixlZGl0VHlwZTpcIm5vbmVcIn0sc3Bpa2VzbmFwOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJkYXRhXCIsXCJjdXJzb3JcIl0sZGZsdDpcImRhdGFcIixlZGl0VHlwZTpcIm5vbmVcIn0sdGlja2ZvbnQ6bih7ZWRpdFR5cGU6XCJ0aWNrc1wifSksdGlja2FuZ2xlOnt2YWxUeXBlOlwiYW5nbGVcIixkZmx0OlwiYXV0b1wiLGVkaXRUeXBlOlwidGlja3NcIn0sdGlja3ByZWZpeDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcInRpY2tzXCJ9LHNob3d0aWNrcHJlZml4Ont2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhbGxcIixcImZpcnN0XCIsXCJsYXN0XCIsXCJub25lXCJdLGRmbHQ6XCJhbGxcIixlZGl0VHlwZTpcInRpY2tzXCJ9LHRpY2tzdWZmaXg6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsZWRpdFR5cGU6XCJ0aWNrc1wifSxzaG93dGlja3N1ZmZpeDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYWxsXCIsXCJmaXJzdFwiLFwibGFzdFwiLFwibm9uZVwiXSxkZmx0OlwiYWxsXCIsZWRpdFR5cGU6XCJ0aWNrc1wifSxzaG93ZXhwb25lbnQ6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImFsbFwiLFwiZmlyc3RcIixcImxhc3RcIixcIm5vbmVcIl0sZGZsdDpcImFsbFwiLGVkaXRUeXBlOlwidGlja3NcIn0sZXhwb25lbnRmb3JtYXQ6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcIm5vbmVcIixcImVcIixcIkVcIixcInBvd2VyXCIsXCJTSVwiLFwiQlwiXSxkZmx0OlwiQlwiLGVkaXRUeXBlOlwidGlja3NcIn0sc2VwYXJhdGV0aG91c2FuZHM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMSxlZGl0VHlwZTpcInRpY2tzXCJ9LHRpY2tmb3JtYXQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsZWRpdFR5cGU6XCJ0aWNrc1wifSx0aWNrZm9ybWF0c3RvcHM6cyhcInRpY2tmb3JtYXRzdG9wXCIse2VuYWJsZWQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcInRpY2tzXCJ9LGR0aWNrcmFuZ2U6e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsaXRlbXM6W3t2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJ0aWNrc1wifSx7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwidGlja3NcIn1dLGVkaXRUeXBlOlwidGlja3NcIn0sdmFsdWU6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsZWRpdFR5cGU6XCJ0aWNrc1wifSxlZGl0VHlwZTpcInRpY2tzXCJ9KSxob3ZlcmZvcm1hdDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcIm5vbmVcIn0sc2hvd2xpbmU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMSxlZGl0VHlwZTpcInRpY2tzK2xheW91dHN0eWxlXCJ9LGxpbmVjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOlwibGF5b3V0c3R5bGVcIn0sbGluZXdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOlwidGlja3MrbGF5b3V0c3R5bGVcIn0sc2hvd2dyaWQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZWRpdFR5cGU6XCJ0aWNrc1wifSxncmlkY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6aS5saWdodExpbmUsZWRpdFR5cGU6XCJ0aWNrc1wifSxncmlkd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6XCJ0aWNrc1wifSx6ZXJvbGluZTp7dmFsVHlwZTpcImJvb2xlYW5cIixlZGl0VHlwZTpcInRpY2tzXCJ9LHplcm9saW5lY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZTpcInRpY2tzXCJ9LHplcm9saW5ld2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjEsZWRpdFR5cGU6XCJ0aWNrc1wifSxzaG93ZGl2aWRlcnM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcInRpY2tzXCJ9LGRpdmlkZXJjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOlwidGlja3NcIn0sZGl2aWRlcndpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxLGVkaXRUeXBlOlwidGlja3NcIn0sYW5jaG9yOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJmcmVlXCIsbC5pZFJlZ2V4LngudG9TdHJpbmcoKSxsLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZTpcInBsb3RcIn0sc2lkZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1widG9wXCIsXCJib3R0b21cIixcImxlZnRcIixcInJpZ2h0XCJdLGVkaXRUeXBlOlwicGxvdFwifSxvdmVybGF5aW5nOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJmcmVlXCIsbC5pZFJlZ2V4LngudG9TdHJpbmcoKSxsLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZTpcInBsb3RcIn0sbGF5ZXI6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImFib3ZlIHRyYWNlc1wiLFwiYmVsb3cgdHJhY2VzXCJdLGRmbHQ6XCJhYm92ZSB0cmFjZXNcIixlZGl0VHlwZTpcInBsb3RcIn0sZG9tYWluOnt2YWxUeXBlOlwiaW5mb19hcnJheVwiLGl0ZW1zOlt7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGVkaXRUeXBlOlwicGxvdFwifSx7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGVkaXRUeXBlOlwicGxvdFwifV0sZGZsdDpbMCwxXSxlZGl0VHlwZTpcInBsb3RcIn0scG9zaXRpb246e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6XCJwbG90XCJ9LGNhdGVnb3J5b3JkZXI6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInRyYWNlXCIsXCJjYXRlZ29yeSBhc2NlbmRpbmdcIixcImNhdGVnb3J5IGRlc2NlbmRpbmdcIixcImFycmF5XCJdLGRmbHQ6XCJ0cmFjZVwiLGVkaXRUeXBlOlwiY2FsY1wifSxjYXRlZ29yeWFycmF5Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx1aXJldmlzaW9uOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJub25lXCJ9LGVkaXRUeXBlOlwiY2FsY1wiLF9kZXByZWNhdGVkOnthdXRvdGljazp7dmFsVHlwZTpcImJvb2xlYW5cIixlZGl0VHlwZTpcInRpY2tzXCJ9LHRpdGxlOnt2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJ0aWNrc1wifSx0aXRsZWZvbnQ6bih7ZWRpdFR5cGU6XCJ0aWNrc1wifSl9fX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzXCI6NTc3LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXNcIjo1OTgsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uL2ZvbnRfYXR0cmlidXRlc1wiOjc3NSxcIi4vY29uc3RhbnRzXCI6NzU1fV0sNzYyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGE9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIiksbz10KFwiLi4vbGF5b3V0X2F0dHJpYnV0ZXNcIikscz10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxsPXQoXCIuL3R5cGVfZGVmYXVsdHNcIiksYz10KFwiLi9heGlzX2RlZmF1bHRzXCIpLHU9dChcIi4vY29uc3RyYWludHNcIikuaGFuZGxlQ29uc3RyYWludERlZmF1bHRzLGg9dChcIi4vcG9zaXRpb25fZGVmYXVsdHNcIiksZj10KFwiLi9heGlzX2lkc1wiKSxwPWYuaWQybmFtZSxkPWYubmFtZTJpZCxnPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSx2PWcudHJhY2VJcyxtPWcuZ2V0Q29tcG9uZW50TWV0aG9kO2Z1bmN0aW9uIHkodCxlLHIpe0FycmF5LmlzQXJyYXkodFtlXSk/dFtlXS5wdXNoKHIpOnRbZV09W3JdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGYsZyx4PXt9LGI9e30sXz17fSx3PXt9LGs9e307Zm9yKGY9MDtmPHIubGVuZ3RoO2YrKyl7dmFyIEE9cltmXTtpZih2KEEsXCJjYXJ0ZXNpYW5cIil8fHYoQSxcImdsMmRcIikpe3ZhciBULE07aWYoQS54YXhpcyl5KHgsVD1wKEEueGF4aXMpLEEpO2Vsc2UgaWYoQS54YXhlcylmb3IoZz0wO2c8QS54YXhlcy5sZW5ndGg7ZysrKXkoeCxwKEEueGF4ZXNbZ10pLEEpO2lmKEEueWF4aXMpeSh4LE09cChBLnlheGlzKSxBKTtlbHNlIGlmKEEueWF4ZXMpZm9yKGc9MDtnPEEueWF4ZXMubGVuZ3RoO2crKyl5KHgscChBLnlheGVzW2ddKSxBKTtpZih2KEEsXCJjYXJwZXRcIikmJihcImNhcnBldFwiIT09QS50eXBlfHxBLl9jaGVhdGVyKXx8VCYmKF9bVF09MSksXCJjYXJwZXRcIj09PUEudHlwZSYmQS5fY2hlYXRlciYmVCYmKGJbVF09MSksdihBLFwiMmRNYXBcIikmJih3W1RdPTEsd1tNXT0xKSx2KEEsXCJvcmllbnRlZFwiKSlrW1wiaFwiPT09QS5vcmllbnRhdGlvbj9NOlRdPTF9fXZhciBTPWUuX3N1YnBsb3RzLEU9Uy54YXhpcyxDPVMueWF4aXMsTD1uLnNpbXBsZU1hcChFLHApLHo9bi5zaW1wbGVNYXAoQyxwKSxPPUwuY29uY2F0KHopLEk9aS5iYWNrZ3JvdW5kO0UubGVuZ3RoJiZDLmxlbmd0aCYmKEk9bi5jb2VyY2UodCxlLG8sXCJwbG90X2JnY29sb3JcIikpO3ZhciBELFAsUixGLEI9aS5jb21iaW5lKEksZS5wYXBlcl9iZ2NvbG9yKTtmdW5jdGlvbiBOKHQsZSl7cmV0dXJuIG4uY29lcmNlKFIsRixzLHQsZSl9ZnVuY3Rpb24gaih0LGUpe3JldHVybiBuLmNvZXJjZTIoUixGLHMsdCxlKX1mdW5jdGlvbiBWKHQpe3JldHVyblwieFwiPT09dD9DOkV9dmFyIFU9e3g6VihcInhcIikseTpWKFwieVwiKX0scT1VLnguY29uY2F0KFUueSk7ZnVuY3Rpb24gSChlLHIpe2Zvcih2YXIgbj1cInhcIj09PWU/TDp6LGk9W10sYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1uW2FdO289PT1yfHwodFtvXXx8e30pLm92ZXJsYXlpbmd8fGkucHVzaChkKG8pKX1yZXR1cm4gaX1mb3IoZj0wO2Y8Ty5sZW5ndGg7ZisrKXtQPShEPU9bZl0pLmNoYXJBdCgwKSxuLmlzUGxhaW5PYmplY3QodFtEXSl8fCh0W0RdPXt9KSxSPXRbRF0sRj1hLm5ld0NvbnRhaW5lcihlLEQsUCtcImF4aXNcIik7dmFyIEc9eFtEXXx8W107Ri5fdHJhY2VJbmRpY2VzPUcubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9leHBhbmRlZEluZGV4fSksRi5fYW5uSW5kaWNlcz1bXSxGLl9zaGFwZUluZGljZXM9W10sRi5faW1nSW5kaWNlcz1bXSxGLl9zdWJwbG90c1dpdGg9W10sRi5fY291bnRlckF4ZXM9W10sRi5fbmFtZT1GLl9hdHRyPUQ7dmFyIFk9Ri5faWQ9ZChEKSxXPUgoUCxEKSxYPXtsZXR0ZXI6UCxmb250OmUuZm9udCxvdXRlclRpY2tzOndbRF0sc2hvd0dyaWQ6IWtbRF0sZGF0YTpHLGJnQ29sb3I6QixjYWxlbmRhcjplLmNhbGVuZGFyLGF1dG9tYXJnaW46ITAsY2hlYXRlcm9ubHk6XCJ4XCI9PT1QJiZiW0RdJiYhX1tEXSxzcGxvbVN0YXNoOigoZS5fc3Bsb21BeGVzfHx7fSlbUF18fHt9KVtZXX07TihcInVpcmV2aXNpb25cIixlLnVpcmV2aXNpb24pLGwoUixGLE4sWCksYyhSLEYsTixYLGUpO3ZhciBaPWooXCJzcGlrZWNvbG9yXCIpLCQ9aihcInNwaWtldGhpY2tuZXNzXCIpLEo9aihcInNwaWtlZGFzaFwiKSxLPWooXCJzcGlrZW1vZGVcIiksUT1qKFwic3Bpa2VzbmFwXCIpO04oXCJzaG93c3Bpa2VzXCIsISEoWnx8JHx8Snx8S3x8USkpfHwoZGVsZXRlIEYuc3Bpa2Vjb2xvcixkZWxldGUgRi5zcGlrZXRoaWNrbmVzcyxkZWxldGUgRi5zcGlrZWRhc2gsZGVsZXRlIEYuc3Bpa2Vtb2RlLGRlbGV0ZSBGLnNwaWtlc25hcCksaChSLEYsTix7bGV0dGVyOlAsY291bnRlckF4ZXM6VVtQXSxvdmVybGF5YWJsZUF4ZXM6VyxncmlkOmUuZ3JpZH0pLEYuX2lucHV0PVJ9dmFyIHR0PW0oXCJyYW5nZXNsaWRlclwiLFwiaGFuZGxlRGVmYXVsdHNcIiksZXQ9bShcInJhbmdlc2VsZWN0b3JcIixcImhhbmRsZURlZmF1bHRzXCIpO2ZvcihmPTA7ZjxMLmxlbmd0aDtmKyspRD1MW2ZdLFI9dFtEXSxGPWVbRF0sdHQodCxlLEQpLFwiZGF0ZVwiPT09Ri50eXBlJiZldChSLEYsZSx6LEYuY2FsZW5kYXIpLE4oXCJmaXhlZHJhbmdlXCIpO2ZvcihmPTA7Zjx6Lmxlbmd0aDtmKyspe0Q9eltmXSxSPXRbRF0sRj1lW0RdO3ZhciBydD1lW3AoRi5hbmNob3IpXTtOKFwiZml4ZWRyYW5nZVwiLG0oXCJyYW5nZXNsaWRlclwiLFwiaXNWaXNpYmxlXCIpKHJ0KSl9dmFyIG50PWUuX2F4aXNDb25zdHJhaW50R3JvdXBzPVtdLGl0PWUuX2F4aXNNYXRjaEdyb3Vwcz1bXTtmb3IoZj0wO2Y8Ty5sZW5ndGg7ZisrKVA9KEQ9T1tmXSkuY2hhckF0KDApLFI9dFtEXSxGPWVbRF0sdShSLEYsTixxLGUpO2ZvcihmPTA7ZjxpdC5sZW5ndGg7ZisrKXt2YXIgYXQsb3Q9aXRbZl0sc3Q9bnVsbCxsdD1udWxsO2ZvcihhdCBpbiBvdCkoRj1lW3AoYXQpXSkubWF0Y2hlc3x8KHN0PUYucmFuZ2UsbHQ9Ri5hdXRvcmFuZ2UpO2lmKG51bGw9PT1zdHx8bnVsbD09PWx0KWZvcihhdCBpbiBvdCl7c3Q9KEY9ZVtwKGF0KV0pLnJhbmdlLGx0PUYuYXV0b3JhbmdlO2JyZWFrfWZvcihhdCBpbiBvdCkoRj1lW3AoYXQpXSkubWF0Y2hlcyYmKEYucmFuZ2U9c3Quc2xpY2UoKSxGLmF1dG9yYW5nZT1sdCksRi5fbWF0Y2hHcm91cD1vdDtpZihudC5sZW5ndGgpZm9yKGF0IGluIG90KWZvcihnPTA7ZzxudC5sZW5ndGg7ZysrKXt2YXIgY3Q9bnRbZ107Zm9yKHZhciB1dCBpbiBjdClhdD09PXV0JiYobi53YXJuKFwiQXhpcyBcIit1dCtcIiBpcyBzZXQgd2l0aCBib3RoIGEgKnNjYWxlYW5jaG9yKiBhbmQgKm1hdGNoZXMqIGNvbnN0cmFpbnQ7IGlnbm9yaW5nIHRoZSBzY2FsZSBjb25zdHJhaW50LlwiKSxkZWxldGUgY3RbdXRdLE9iamVjdC5rZXlzKGN0KS5sZW5ndGg8MiYmbnQuc3BsaWNlKGcsMSkpfX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo4MDEsXCIuL2F4aXNfZGVmYXVsdHNcIjo3NTEsXCIuL2F4aXNfaWRzXCI6NzUyLFwiLi9jb25zdHJhaW50c1wiOjc1NixcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo3NjEsXCIuL3Bvc2l0aW9uX2RlZmF1bHRzXCI6NzY0LFwiLi90eXBlX2RlZmF1bHRzXCI6NzcyfV0sNzYzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInRpbnljb2xvcjJcIikubWl4LGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiKS5saWdodEZyYWN0aW9uLGE9dChcIi4uLy4uL2xpYlwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHM9KG89b3x8e30pLmRmbHRDb2xvcjtmdW5jdGlvbiBsKHIsbil7cmV0dXJuIGEuY29lcmNlMih0LGUsby5hdHRyaWJ1dGVzLHIsbil9dmFyIGM9bChcImxpbmVjb2xvclwiLHMpLHU9bChcImxpbmV3aWR0aFwiKTtyKFwic2hvd2xpbmVcIixvLnNob3dMaW5lfHwhIWN8fCEhdSl8fChkZWxldGUgZS5saW5lY29sb3IsZGVsZXRlIGUubGluZXdpZHRoKTt2YXIgaD1sKFwiZ3JpZGNvbG9yXCIsbihzLG8uYmdDb2xvcixvLmJsZW5kfHxpKS50b1JnYlN0cmluZygpKSxmPWwoXCJncmlkd2lkdGhcIik7aWYocihcInNob3dncmlkXCIsby5zaG93R3JpZHx8ISFofHwhIWYpfHwoZGVsZXRlIGUuZ3JpZGNvbG9yLGRlbGV0ZSBlLmdyaWR3aWR0aCksIW8ubm9aZXJvTGluZSl7dmFyIHA9bChcInplcm9saW5lY29sb3JcIixzKSxkPWwoXCJ6ZXJvbGluZXdpZHRoXCIpO3IoXCJ6ZXJvbGluZVwiLG8uc2hvd0dyaWR8fCEhcHx8ISFkKXx8KGRlbGV0ZSBlLnplcm9saW5lY29sb3IsZGVsZXRlIGUuemVyb2xpbmV3aWR0aCl9fX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzXCI6NTc3LFwiLi4vLi4vbGliXCI6NzAxLHRpbnljb2xvcjI6NTIyfV0sNzY0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL2xpYlwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG8scyxsLGMsdT1hLmNvdW50ZXJBeGVzfHxbXSxoPWEub3ZlcmxheWFibGVBeGVzfHxbXSxmPWEubGV0dGVyLHA9YS5ncmlkO3AmJihzPXAuX2RvbWFpbnNbZl1bcC5fYXhpc01hcFtlLl9pZF1dLG89cC5fYW5jaG9yc1tlLl9pZF0scyYmKGw9cFtmK1wic2lkZVwiXS5zcGxpdChcIiBcIilbMF0sYz1wLmRvbWFpbltmXVtcInJpZ2h0XCI9PT1sfHxcInRvcFwiPT09bD8xOjBdKSkscz1zfHxbMCwxXSxvPW98fChuKHQucG9zaXRpb24pP1wiZnJlZVwiOnVbMF18fFwiZnJlZVwiKSxsPWx8fChcInhcIj09PWY/XCJib3R0b21cIjpcImxlZnRcIiksYz1jfHwwLFwiZnJlZVwiPT09aS5jb2VyY2UodCxlLHthbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImZyZWVcIl0uY29uY2F0KHUpLGRmbHQ6b319LFwiYW5jaG9yXCIpJiZyKFwicG9zaXRpb25cIixjKSxpLmNvZXJjZSh0LGUse3NpZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOlwieFwiPT09Zj9bXCJib3R0b21cIixcInRvcFwiXTpbXCJsZWZ0XCIsXCJyaWdodFwiXSxkZmx0Omx9fSxcInNpZGVcIik7dmFyIGQ9ITE7aWYoaC5sZW5ndGgmJihkPWkuY29lcmNlKHQsZSx7b3ZlcmxheWluZzp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6WyExXS5jb25jYXQoaCksZGZsdDohMX19LFwib3ZlcmxheWluZ1wiKSksIWQpe3ZhciBnPXIoXCJkb21haW5cIixzKTtnWzBdPmdbMV0tMS80MDk2JiYoZS5kb21haW49cyksaS5ub25lT3JBbGwodC5kb21haW4sZS5kb21haW4scyl9cmV0dXJuIHIoXCJsYXllclwiKSxlfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw3NjU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiKS5GUk9NX0JMO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dm9pZCAwPT09ciYmKHI9blt0LmNvbnN0cmFpbnRvd2FyZHx8XCJjZW50ZXJcIl0pO3ZhciBpPVt0LnIybCh0LnJhbmdlWzBdKSx0LnIybCh0LnJhbmdlWzFdKV0sYT1pWzBdKyhpWzFdLWlbMF0pKnI7dC5yYW5nZT10Ll9pbnB1dC5yYW5nZT1bdC5sMnIoYSsoaVswXS1hKSplKSx0LmwycihhKyhpWzFdLWEpKmUpXX19LHtcIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIjo2NzN9XSw3NjY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicG9seWJvb2xqc1wiKSxpPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIikscz10KFwiLi4vLi4vbGliXCIpLGw9dChcIi4uLy4uL2xpYi9wb2x5Z29uXCIpLGM9dChcIi4uLy4uL2xpYi90aHJvdHRsZVwiKSx1PXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnNcIikubWFrZUV2ZW50RGF0YSxoPXQoXCIuL2F4aXNfaWRzXCIpLmdldEZyb21JZCxmPXQoXCIuLi8uLi9saWIvY2xlYXJfZ2xfY2FudmFzZXNcIikscD10KFwiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXNcIikucmVkcmF3UmVnbFRyYWNlcyxkPXQoXCIuL2NvbnN0YW50c1wiKSxnPWQuTUlOU0VMRUNULHY9bC5maWx0ZXIsbT1sLnRlc3RlcjtmdW5jdGlvbiB5KHQpe3JldHVybiB0Ll9pZH1mdW5jdGlvbiB4KHQsZSxyLG4saSxhLG8pe3ZhciBzLGwsYyx1LGgsZixwLGQsZyx2PWUuX2hvdmVyZGF0YSxtPWUuX2Z1bGxMYXlvdXQuY2xpY2ttb2RlLmluZGV4T2YoXCJldmVudFwiKT4tMSx5PVtdO2lmKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZBcnJheS5pc0FycmF5KHQpJiYhMCE9PXRbMF0uaG92ZXJPbkJveH0odikpe2sodCxlLGEpO3ZhciB4PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXRbMF0sYT0tMSxvPVtdO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspaWYocj1lW25dLGkuZnVsbERhdGEuX2V4cGFuZGVkSW5kZXg9PT1yLmNkWzBdLnRyYWNlLl9leHBhbmRlZEluZGV4KXtpZighMD09PWkuaG92ZXJPbkJveClicmVhazt2b2lkIDAhPT1pLnBvaW50TnVtYmVyP2E9aS5wb2ludE51bWJlcjp2b2lkIDAhPT1pLmJpbk51bWJlciYmKGE9aS5iaW5OdW1iZXIsbz1pLnBvaW50TnVtYmVycyk7YnJlYWt9cmV0dXJue3BvaW50TnVtYmVyOmEscG9pbnROdW1iZXJzOm8sc2VhcmNoSW5mbzpyfX0odixzPVQoZSxyLG4saSkpO2lmKHgucG9pbnROdW1iZXJzLmxlbmd0aD4wP2Z1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9W107Zm9yKGk9MDtpPHQubGVuZ3RoO2krKykocj10W2ldKS5jZFswXS50cmFjZS5zZWxlY3RlZHBvaW50cyYmci5jZFswXS50cmFjZS5zZWxlY3RlZHBvaW50cy5sZW5ndGg+MCYmYS5wdXNoKHIpO2lmKDE9PT1hLmxlbmd0aCYmYVswXT09PWUuc2VhcmNoSW5mbyYmKG49ZS5zZWFyY2hJbmZvLmNkWzBdLnRyYWNlKS5zZWxlY3RlZHBvaW50cy5sZW5ndGg9PT1lLnBvaW50TnVtYmVycy5sZW5ndGgpe2ZvcihpPTA7aTxlLnBvaW50TnVtYmVycy5sZW5ndGg7aSsrKWlmKG4uc2VsZWN0ZWRwb2ludHMuaW5kZXhPZihlLnBvaW50TnVtYmVyc1tpXSk8MClyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4hMX0ocyx4KTpmdW5jdGlvbih0KXt2YXIgZSxyLG4saT0wO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspaWYoZT10W25dLChyPWUuY2RbMF0udHJhY2UpLnNlbGVjdGVkcG9pbnRzKXtpZihyLnNlbGVjdGVkcG9pbnRzLmxlbmd0aD4xKXJldHVybiExO2lmKChpKz1yLnNlbGVjdGVkcG9pbnRzLmxlbmd0aCk+MSlyZXR1cm4hMX1yZXR1cm4gMT09PWl9KHMpJiYoZj1TKHgpKSl7Zm9yKG8mJm8ucmVtb3ZlKCksZz0wO2c8cy5sZW5ndGg7ZysrKShsPXNbZ10pLl9tb2R1bGUuc2VsZWN0UG9pbnRzKGwsITEpO0UoZSxzKSxBKGEpLG0mJmUuZW1pdChcInBsb3RseV9kZXNlbGVjdFwiLG51bGwpfWVsc2V7Zm9yKHA9dC5zaGlmdEtleSYmKHZvaWQgMCE9PWY/ZjpTKHgpKSxjPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm57cG9pbnROdW1iZXI6dCxzZWFyY2hJbmZvOmUsc3VidHJhY3Q6cn19KHgucG9pbnROdW1iZXIseC5zZWFyY2hJbmZvLHApLHU9dyhhLnNlbGVjdGlvbkRlZnMuY29uY2F0KFtjXSkpLGc9MDtnPHMubGVuZ3RoO2crKylpZihoPUMoc1tnXS5fbW9kdWxlLnNlbGVjdFBvaW50cyhzW2ddLHUpLHNbZ10pLHkubGVuZ3RoKWZvcih2YXIgYj0wO2I8aC5sZW5ndGg7YisrKXkucHVzaChoW2JdKTtlbHNlIHk9aDtFKGUscyxkPXtwb2ludHM6eX0pLGMmJmEmJmEuc2VsZWN0aW9uRGVmcy5wdXNoKGMpLG8mJk0oYS5tZXJnZWRQb2x5Z29ucyxvKSxtJiZlLmVtaXQoXCJwbG90bHlfc2VsZWN0ZWRcIixkKX19fWZ1bmN0aW9uIGIodCl7cmV0dXJuXCJwb2ludE51bWJlclwiaW4gdCYmXCJzZWFyY2hJbmZvXCJpbiB0fWZ1bmN0aW9uIF8odCl7cmV0dXJue3htaW46MCx4bWF4OjAseW1pbjowLHltYXg6MCxwdHM6W10sY29udGFpbnM6ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9dC5zZWFyY2hJbmZvLmNkWzBdLnRyYWNlLl9leHBhbmRlZEluZGV4O3JldHVybiBpLmNkWzBdLnRyYWNlLl9leHBhbmRlZEluZGV4PT09YSYmbj09PXQucG9pbnROdW1iZXJ9LGlzUmVjdDohMSxkZWdlbmVyYXRlOiExLHN1YnRyYWN0OnQuc3VidHJhY3R9fWZ1bmN0aW9uIHcodCl7Zm9yKHZhciBlPVtdLHI9Yih0WzBdKT8wOnRbMF1bMF1bMF0sbj1yLGk9Yih0WzBdKT8wOnRbMF1bMF1bMV0sYT1pLG89MDtvPHQubGVuZ3RoO28rKylpZihiKHRbb10pKWUucHVzaChfKHRbb10pKTtlbHNle3ZhciBzPWwudGVzdGVyKHRbb10pO3Muc3VidHJhY3Q9dFtvXS5zdWJ0cmFjdCxlLnB1c2gocykscj1NYXRoLm1pbihyLHMueG1pbiksbj1NYXRoLm1heChuLHMueG1heCksaT1NYXRoLm1pbihpLHMueW1pbiksYT1NYXRoLm1heChhLHMueW1heCl9cmV0dXJue3htaW46cix4bWF4Om4seW1pbjppLHltYXg6YSxwdHM6W10sY29udGFpbnM6ZnVuY3Rpb24odCxyLG4saSl7Zm9yKHZhciBhPSExLG89MDtvPGUubGVuZ3RoO28rKyllW29dLmNvbnRhaW5zKHQscixuLGkpJiYoYT0hMT09PWVbb10uc3VidHJhY3QpO3JldHVybiBhfSxpc1JlY3Q6ITEsZGVnZW5lcmF0ZTohMX19ZnVuY3Rpb24gayh0LGUscil7dmFyIG49ZS5fZnVsbExheW91dCxpPXIucGxvdGluZm8sYT1uLl9sYXN0U2VsZWN0ZWRTdWJwbG90JiZuLl9sYXN0U2VsZWN0ZWRTdWJwbG90PT09aS5pZCxvPXQuc2hpZnRLZXl8fHQuYWx0S2V5O2EmJm8mJmkuc2VsZWN0aW9uJiZpLnNlbGVjdGlvbi5zZWxlY3Rpb25EZWZzJiYhci5zZWxlY3Rpb25EZWZzPyhyLnNlbGVjdGlvbkRlZnM9aS5zZWxlY3Rpb24uc2VsZWN0aW9uRGVmcyxyLm1lcmdlZFBvbHlnb25zPWkuc2VsZWN0aW9uLm1lcmdlZFBvbHlnb25zKTpvJiZpLnNlbGVjdGlvbnx8QShyKSxhfHwoTChlKSxuLl9sYXN0U2VsZWN0ZWRTdWJwbG90PWkuaWQpfWZ1bmN0aW9uIEEodCl7dmFyIGU9dC5wbG90aW5mbztlLnNlbGVjdGlvbj17fSxlLnNlbGVjdGlvbi5zZWxlY3Rpb25EZWZzPXQuc2VsZWN0aW9uRGVmcz1bXSxlLnNlbGVjdGlvbi5tZXJnZWRQb2x5Z29ucz10Lm1lcmdlZFBvbHlnb25zPVtdfWZ1bmN0aW9uIFQodCxlLHIsbil7dmFyIGksYSxvLHM9W10sbD1lLm1hcCh5KSxjPXIubWFwKHkpO2ZvcihvPTA7bzx0LmNhbGNkYXRhLmxlbmd0aDtvKyspaWYoITA9PT0oYT0oaT10LmNhbGNkYXRhW29dKVswXS50cmFjZSkudmlzaWJsZSYmYS5fbW9kdWxlJiZhLl9tb2R1bGUuc2VsZWN0UG9pbnRzKWlmKCFufHxhLnN1YnBsb3QhPT1uJiZhLmdlbyE9PW4paWYoXCJzcGxvbVwiPT09YS50eXBlJiZhLl94YXhlc1tsWzBdXSYmYS5feWF4ZXNbY1swXV0pe3ZhciB1PXAoYS5fbW9kdWxlLGksZVswXSxyWzBdKTt1LnNjZW5lPXQuX2Z1bGxMYXlvdXQuX3NwbG9tU2NlbmVzW2EudWlkXSxzLnB1c2godSl9ZWxzZSBpZihcInNhbmtleVwiPT09YS50eXBlKXt2YXIgZj1wKGEuX21vZHVsZSxpLGVbMF0sclswXSk7cy5wdXNoKGYpfWVsc2V7aWYoLTE9PT1sLmluZGV4T2YoYS54YXhpcykpY29udGludWU7aWYoLTE9PT1jLmluZGV4T2YoYS55YXhpcykpY29udGludWU7cy5wdXNoKHAoYS5fbW9kdWxlLGksaCh0LGEueGF4aXMpLGgodCxhLnlheGlzKSkpfWVsc2Ugcy5wdXNoKHAoYS5fbW9kdWxlLGksZVswXSxyWzBdKSk7cmV0dXJuIHM7ZnVuY3Rpb24gcCh0LGUscixuKXtyZXR1cm57X21vZHVsZTp0LGNkOmUseGF4aXM6cix5YXhpczpufX19ZnVuY3Rpb24gTSh0LGUpe3ZhciByLG4saT1bXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2kucHVzaChhLmpvaW4oXCJMXCIpK1wiTFwiK2FbMF0pfW49dC5sZW5ndGg+MD9cIk1cIitpLmpvaW4oXCJNXCIpK1wiWlwiOlwiTTAsMFpcIixlLmF0dHIoXCJkXCIsbil9ZnVuY3Rpb24gUyh0KXt2YXIgZT10LnNlYXJjaEluZm8uY2RbMF0udHJhY2Uscj10LnBvaW50TnVtYmVyLG49dC5wb2ludE51bWJlcnMsaT1uLmxlbmd0aD4wP25bMF06cjtyZXR1cm4hIWUuc2VsZWN0ZWRwb2ludHMmJmUuc2VsZWN0ZWRwb2ludHMuaW5kZXhPZihpKT4tMX1mdW5jdGlvbiBFKHQsZSxyKXt2YXIgbixhLG8scztmb3Iobj0wO248ZS5sZW5ndGg7bisrKXt2YXIgbD1lW25dLmNkWzBdLnRyYWNlLl9mdWxsSW5wdXQsYz10Ll9mdWxsTGF5b3V0Ll90cmFjZVByZUdVSVtsLnVpZF18fHt9O3ZvaWQgMD09PWMuc2VsZWN0ZWRwb2ludHMmJihjLnNlbGVjdGVkcG9pbnRzPWwuX2lucHV0LnNlbGVjdGVkcG9pbnRzfHxudWxsKX1pZihyKXt2YXIgdT1yLnBvaW50c3x8W107Zm9yKG49MDtuPGUubGVuZ3RoO24rKykocz1lW25dLmNkWzBdLnRyYWNlKS5faW5wdXQuc2VsZWN0ZWRwb2ludHM9cy5fZnVsbElucHV0LnNlbGVjdGVkcG9pbnRzPVtdLHMuX2Z1bGxJbnB1dCE9PXMmJihzLnNlbGVjdGVkcG9pbnRzPVtdKTtmb3Iobj0wO248dS5sZW5ndGg7bisrKXt2YXIgaD11W25dLGQ9aC5kYXRhLGc9aC5mdWxsRGF0YTtoLnBvaW50SW5kaWNlcz8oW10ucHVzaC5hcHBseShkLnNlbGVjdGVkcG9pbnRzLGgucG9pbnRJbmRpY2VzKSxzLl9mdWxsSW5wdXQhPT1zJiZbXS5wdXNoLmFwcGx5KGcuc2VsZWN0ZWRwb2ludHMsaC5wb2ludEluZGljZXMpKTooZC5zZWxlY3RlZHBvaW50cy5wdXNoKGgucG9pbnRJbmRleCkscy5fZnVsbElucHV0IT09cyYmZy5zZWxlY3RlZHBvaW50cy5wdXNoKGgucG9pbnRJbmRleCkpfX1lbHNlIGZvcihuPTA7bjxlLmxlbmd0aDtuKyspZGVsZXRlKHM9ZVtuXS5jZFswXS50cmFjZSkuc2VsZWN0ZWRwb2ludHMsZGVsZXRlIHMuX2lucHV0LnNlbGVjdGVkcG9pbnRzLHMuX2Z1bGxJbnB1dCE9PXMmJmRlbGV0ZSBzLl9mdWxsSW5wdXQuc2VsZWN0ZWRwb2ludHM7dmFyIHY9ITE7Zm9yKG49MDtuPGUubGVuZ3RoO24rKyl7cz0obz0oYT1lW25dKS5jZClbMF0udHJhY2UsaS50cmFjZUlzKHMsXCJyZWdsXCIpJiYodj0hMCk7dmFyIG09YS5fbW9kdWxlLHk9bS5zdHlsZU9uU2VsZWN0fHxtLnN0eWxlO3kmJnkodCxvKX12JiYoZih0KSxwKHQpKX1mdW5jdGlvbiBDKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIHI9ZS5jZCxuPWUuY2RbMF0udHJhY2UsaT0wO2k8dC5sZW5ndGg7aSsrKXRbaV09dSh0W2ldLG4scik7cmV0dXJuIHR9ZnVuY3Rpb24gTCh0KXt2YXIgZT0odC5fZnVsbExheW91dHx8e30pLl96b29tbGF5ZXI7ZSYmZS5zZWxlY3RBbGwoXCIuc2VsZWN0LW91dGxpbmVcIikucmVtb3ZlKCl9ZS5leHBvcnRzPXtwcmVwU2VsZWN0OmZ1bmN0aW9uKHQsZSxyLGksbCl7dmFyIHUsaCxmLHAseSxiLF8sUz1pLmdkLEw9Uy5fZnVsbExheW91dCx6PUwuX3pvb21sYXllcixPPWkuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxJPWkucGxvdGluZm8sRD1JLnhheGlzLl9vZmZzZXQsUD1JLnlheGlzLl9vZmZzZXQsUj1lLU8ubGVmdCxGPXItTy50b3AsQj1SLE49RixqPVwiTVwiK1IrXCIsXCIrRixWPWkueGF4ZXNbMF0uX2xlbmd0aCxVPWkueWF4ZXNbMF0uX2xlbmd0aCxxPWkueGF4ZXMuY29uY2F0KGkueWF4ZXMpLEg9dC5hbHRLZXk7ayh0LFMsaSksXCJsYXNzb1wiPT09bCYmKHU9dihbW1IsRl1dLGQuQkVORFBYKSk7dmFyIEc9ei5zZWxlY3RBbGwoXCJwYXRoLnNlbGVjdC1vdXRsaW5lLVwiK0kuaWQpLmRhdGEoWzEsMl0pO0cuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJjbGFzc1wiLGZ1bmN0aW9uKHQpe3JldHVyblwic2VsZWN0LW91dGxpbmUgc2VsZWN0LW91dGxpbmUtXCIrdCtcIiBzZWxlY3Qtb3V0bGluZS1cIitJLmlkfSkuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK0QrXCIsIFwiK1ArXCIpXCIpLmF0dHIoXCJkXCIsaitcIlpcIik7dmFyIFksVz16LmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsXCJ6b29tYm94LWNvcm5lcnNcIikuc3R5bGUoe2ZpbGw6YS5iYWNrZ3JvdW5kLHN0cm9rZTphLmRlZmF1bHRMaW5lLFwic3Ryb2tlLXdpZHRoXCI6MX0pLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIitEK1wiLCBcIitQK1wiKVwiKS5hdHRyKFwiZFwiLFwiTTAsMFpcIiksWD1MLl91aWQrZC5TRUxFQ1RJRCxaPVtdLCQ9VChTLGkueGF4ZXMsaS55YXhlcyxpLnN1YnBsb3QpO2Z1bmN0aW9uIEoodCl7dmFyIGU9XCJ5XCI9PT10Ll9pZC5jaGFyQXQoMCk/MTowO3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdC5wMmQocltlXSl9fWZ1bmN0aW9uIEsodCxlKXtyZXR1cm4gdC1lfVk9SS5maWxsUmFuZ2VJdGVtcz9JLmZpbGxSYW5nZUl0ZW1zOlwic2VsZWN0XCI9PT1sP2Z1bmN0aW9uKHQsZSl7dmFyIHI9dC5yYW5nZT17fTtmb3IoeT0wO3k8cS5sZW5ndGg7eSsrKXt2YXIgbj1xW3ldLGk9bi5faWQuY2hhckF0KDApO3Jbbi5faWRdPVtuLnAyZChlW2krXCJtaW5cIl0pLG4ucDJkKGVbaStcIm1heFwiXSldLnNvcnQoSyl9fTpmdW5jdGlvbih0LGUscil7dmFyIG49dC5sYXNzb1BvaW50cz17fTtmb3IoeT0wO3k8cS5sZW5ndGg7eSsrKXt2YXIgaT1xW3ldO25baS5faWRdPXIuZmlsdGVyZWQubWFwKEooaSkpfX0saS5tb3ZlRm49ZnVuY3Rpb24odCxlKXtCPU1hdGgubWF4KDAsTWF0aC5taW4oVix0K1IpKSxOPU1hdGgubWF4KDAsTWF0aC5taW4oVSxlK0YpKTt2YXIgcj1NYXRoLmFicyhCLVIpLGE9TWF0aC5hYnMoTi1GKTtpZihcInNlbGVjdFwiPT09bCl7dmFyIG89TC5zZWxlY3RkaXJlY3Rpb247XCJoXCI9PT0obz1cImFueVwiPT09TC5zZWxlY3RkaXJlY3Rpb24/YTxNYXRoLm1pbiguNipyLGcpP1wiaFwiOnI8TWF0aC5taW4oLjYqYSxnKT9cInZcIjpcImRcIjpMLnNlbGVjdGRpcmVjdGlvbik/KChwPVtbUiwwXSxbUixVXSxbQixVXSxbQiwwXV0pLnhtaW49TWF0aC5taW4oUixCKSxwLnhtYXg9TWF0aC5tYXgoUixCKSxwLnltaW49TWF0aC5taW4oMCxVKSxwLnltYXg9TWF0aC5tYXgoMCxVKSxXLmF0dHIoXCJkXCIsXCJNXCIrcC54bWluK1wiLFwiKyhGLWcpK1wiaC00dlwiKzIqZytcImg0Wk1cIisocC54bWF4LTEpK1wiLFwiKyhGLWcpK1wiaDR2XCIrMipnK1wiaC00WlwiKSk6XCJ2XCI9PT1vPygocD1bWzAsRl0sWzAsTl0sW1YsTl0sW1YsRl1dKS54bWluPU1hdGgubWluKDAsVikscC54bWF4PU1hdGgubWF4KDAsVikscC55bWluPU1hdGgubWluKEYsTikscC55bWF4PU1hdGgubWF4KEYsTiksVy5hdHRyKFwiZFwiLFwiTVwiKyhSLWcpK1wiLFwiK3AueW1pbitcInYtNGhcIisyKmcrXCJ2NFpNXCIrKFItZykrXCIsXCIrKHAueW1heC0xKStcInY0aFwiKzIqZytcInYtNFpcIikpOlwiZFwiPT09byYmKChwPVtbUixGXSxbUixOXSxbQixOXSxbQixGXV0pLnhtaW49TWF0aC5taW4oUixCKSxwLnhtYXg9TWF0aC5tYXgoUixCKSxwLnltaW49TWF0aC5taW4oRixOKSxwLnltYXg9TWF0aC5tYXgoRixOKSxXLmF0dHIoXCJkXCIsXCJNMCwwWlwiKSl9ZWxzZVwibGFzc29cIj09PWwmJih1LmFkZFB0KFtCLE5dKSxwPXUuZmlsdGVyZWQpO2kuc2VsZWN0aW9uRGVmcyYmaS5zZWxlY3Rpb25EZWZzLmxlbmd0aD8oZj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHI/bi5kaWZmZXJlbmNlKHtyZWdpb25zOnQsaW52ZXJ0ZWQ6ITF9LHtyZWdpb25zOltlXSxpbnZlcnRlZDohMX0pLnJlZ2lvbnM6bi51bmlvbih7cmVnaW9uczp0LGludmVydGVkOiExfSx7cmVnaW9uczpbZV0saW52ZXJ0ZWQ6ITF9KS5yZWdpb25zfShpLm1lcmdlZFBvbHlnb25zLHAsSCkscC5zdWJ0cmFjdD1ILGg9dyhpLnNlbGVjdGlvbkRlZnMuY29uY2F0KFtwXSkpKTooZj1bcF0saD1tKHApKSxNKGYsRyksYy50aHJvdHRsZShYLGQuU0VMRUNUREVMQVksZnVuY3Rpb24oKXt2YXIgdDtaPVtdO3ZhciBlLHI9W107Zm9yKHk9MDt5PCQubGVuZ3RoO3krKylpZihlPShiPSRbeV0pLl9tb2R1bGUuc2VsZWN0UG9pbnRzKGIsaCksci5wdXNoKGUpLHQ9QyhlLGIpLFoubGVuZ3RoKWZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKVoucHVzaCh0W25dKTtlbHNlIFo9dDtFKFMsJCxfPXtwb2ludHM6Wn0pLFkoXyxwLHUpLGkuZ2QuZW1pdChcInBsb3RseV9zZWxlY3RpbmdcIixfKX0pfSxpLmNsaWNrRm49ZnVuY3Rpb24odCxlKXt2YXIgcj1MLmNsaWNrbW9kZTtXLnJlbW92ZSgpLGMuZG9uZShYKS50aGVuKGZ1bmN0aW9uKCl7aWYoYy5jbGVhcihYKSwyPT09dCl7Zm9yKEcucmVtb3ZlKCkseT0wO3k8JC5sZW5ndGg7eSsrKShiPSRbeV0pLl9tb2R1bGUuc2VsZWN0UG9pbnRzKGIsITEpO0UoUywkKSxBKGkpLFMuZW1pdChcInBsb3RseV9kZXNlbGVjdFwiLG51bGwpfWVsc2Ugci5pbmRleE9mKFwic2VsZWN0XCIpPi0xJiZ4KGUsUyxpLnhheGVzLGkueWF4ZXMsaS5zdWJwbG90LGksRyksXCJldmVudFwiPT09ciYmUy5lbWl0KFwicGxvdGx5X3NlbGVjdGVkXCIsdm9pZCAwKTtvLmNsaWNrKFMsZSl9KS5jYXRjaChzLmVycm9yKX0saS5kb25lRm49ZnVuY3Rpb24oKXtXLnJlbW92ZSgpLGMuZG9uZShYKS50aGVuKGZ1bmN0aW9uKCl7Yy5jbGVhcihYKSxpLmdkLmVtaXQoXCJwbG90bHlfc2VsZWN0ZWRcIixfKSxwJiZpLnNlbGVjdGlvbkRlZnMmJihwLnN1YnRyYWN0PUgsaS5zZWxlY3Rpb25EZWZzLnB1c2gocCksaS5tZXJnZWRQb2x5Z29ucy5sZW5ndGg9MCxbXS5wdXNoLmFwcGx5KGkubWVyZ2VkUG9seWdvbnMsZikpLGkuZG9uZUZuQ29tcGxldGVkJiZpLmRvbmVGbkNvbXBsZXRlZChaKX0pLmNhdGNoKHMuZXJyb3IpfX0sY2xlYXJTZWxlY3Q6TCxzZWxlY3RPbkNsaWNrOnh9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVyc1wiOjYxMyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlc1wiOjY4NixcIi4uLy4uL2xpYi9wb2x5Z29uXCI6NzEzLFwiLi4vLi4vbGliL3Rocm90dGxlXCI6NzI2LFwiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXNcIjo3NDAsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vYXhpc19pZHNcIjo3NTIsXCIuL2NvbnN0YW50c1wiOjc1NSxwb2x5Ym9vbGpzOjQ2Nn1dLDc2NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxhPXQoXCIuLi8uLi9saWJcIiksbz1hLmNsZWFuTnVtYmVyLHM9YS5tczJEYXRlVGltZSxsPWEuZGF0ZVRpbWUybXMsYz1hLmVuc3VyZU51bWJlcix1PWEuaXNBcnJheU9yVHlwZWRBcnJheSxoPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLGY9aC5GUF9TQUZFLHA9aC5CQUROVU0sZD1oLkxPR19DTElQLGc9dChcIi4vY29uc3RhbnRzXCIpLHY9dChcIi4vYXhpc19pZHNcIik7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gTWF0aC5wb3coMTAsdCl9ZnVuY3Rpb24geSh0KXtyZXR1cm4gbnVsbCE9dH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlPWV8fHt9O3ZhciByPXQuX2lkfHxcInhcIixoPXIuY2hhckF0KDApO2Z1bmN0aW9uIHgoZSxyKXtpZihlPjApcmV0dXJuIE1hdGgubG9nKGUpL01hdGguTE4xMDtpZihlPD0wJiZyJiZ0LnJhbmdlJiYyPT09dC5yYW5nZS5sZW5ndGgpe3ZhciBuPXQucmFuZ2VbMF0saT10LnJhbmdlWzFdO3JldHVybi41KihuK2ktMipkKk1hdGguYWJzKG4taSkpfXJldHVybiBwfWZ1bmN0aW9uIGIoZSxyLG4pe3ZhciBvPWwoZSxufHx0LmNhbGVuZGFyKTtpZihvPT09cCl7aWYoIWkoZSkpcmV0dXJuIHA7ZT0rZTt2YXIgcz1NYXRoLmZsb29yKDEwKmEubW9kKGUrLjA1LDEpKSxjPU1hdGgucm91bmQoZS1zLzEwKTtvPWwobmV3IERhdGUoYykpK3MvMTB9cmV0dXJuIG99ZnVuY3Rpb24gXyhlLHIsbil7cmV0dXJuIHMoZSxyLG58fHQuY2FsZW5kYXIpfWZ1bmN0aW9uIHcoZSl7cmV0dXJuIHQuX2NhdGVnb3JpZXNbTWF0aC5yb3VuZChlKV19ZnVuY3Rpb24gayhlKXtpZih5KGUpKXtpZih2b2lkIDA9PT10Ll9jYXRlZ29yaWVzTWFwJiYodC5fY2F0ZWdvcmllc01hcD17fSksdm9pZCAwIT09dC5fY2F0ZWdvcmllc01hcFtlXSlyZXR1cm4gdC5fY2F0ZWdvcmllc01hcFtlXTt0Ll9jYXRlZ29yaWVzLnB1c2goZSk7dmFyIHI9dC5fY2F0ZWdvcmllcy5sZW5ndGgtMTtyZXR1cm4gdC5fY2F0ZWdvcmllc01hcFtlXT1yLHJ9cmV0dXJuIHB9ZnVuY3Rpb24gQShlKXtpZih0Ll9jYXRlZ29yaWVzTWFwKXJldHVybiB0Ll9jYXRlZ29yaWVzTWFwW2VdfWZ1bmN0aW9uIFQodCl7dmFyIGU9QSh0KTtyZXR1cm4gdm9pZCAwIT09ZT9lOmkodCk/K3Q6dm9pZCAwfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIGkoZSk/bi5yb3VuZCh0Ll9iK3QuX20qZSwyKTpwfWZ1bmN0aW9uIFMoZSl7cmV0dXJuKGUtdC5fYikvdC5fbX10LmMybD1cImxvZ1wiPT09dC50eXBlP3g6Yyx0LmwyYz1cImxvZ1wiPT09dC50eXBlP206Yyx0LmwycD1NLHQucDJsPVMsdC5jMnA9XCJsb2dcIj09PXQudHlwZT9mdW5jdGlvbih0LGUpe3JldHVybiBNKHgodCxlKSl9Ok0sdC5wMmM9XCJsb2dcIj09PXQudHlwZT9mdW5jdGlvbih0KXtyZXR1cm4gbShTKHQpKX06UywtMSE9PVtcImxpbmVhclwiLFwiLVwiXS5pbmRleE9mKHQudHlwZSk/KHQuZDJyPXQucjJkPXQuZDJjPXQucjJjPXQuZDJsPXQucjJsPW8sdC5jMmQ9dC5jMnI9dC5sMmQ9dC5sMnI9Yyx0LmQycD10LnIycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5sMnAobyhlKSl9LHQucDJkPXQucDJyPVMsdC5jbGVhblBvcz1jKTpcImxvZ1wiPT09dC50eXBlPyh0LmQycj10LmQybD1mdW5jdGlvbih0LGUpe3JldHVybiB4KG8odCksZSl9LHQucjJkPXQucjJjPWZ1bmN0aW9uKHQpe3JldHVybiBtKG8odCkpfSx0LmQyYz10LnIybD1vLHQuYzJkPXQubDJyPWMsdC5jMnI9eCx0LmwyZD1tLHQuZDJwPWZ1bmN0aW9uKGUscil7cmV0dXJuIHQubDJwKHQuZDJyKGUscikpfSx0LnAyZD1mdW5jdGlvbih0KXtyZXR1cm4gbShTKHQpKX0sdC5yMnA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQubDJwKG8oZSkpfSx0LnAycj1TLHQuY2xlYW5Qb3M9Yyk6XCJkYXRlXCI9PT10LnR5cGU/KHQuZDJyPXQucjJkPWEuaWRlbnRpdHksdC5kMmM9dC5yMmM9dC5kMmw9dC5yMmw9Yix0LmMyZD10LmMycj10LmwyZD10Lmwycj1fLHQuZDJwPXQucjJwPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdC5sMnAoYihlLDAsbikpfSx0LnAyZD10LnAycj1mdW5jdGlvbih0LGUscil7cmV0dXJuIF8oUyh0KSxlLHIpfSx0LmNsZWFuUG9zPWZ1bmN0aW9uKGUpe3JldHVybiBhLmNsZWFuRGF0ZShlLHAsdC5jYWxlbmRhcil9KTpcImNhdGVnb3J5XCI9PT10LnR5cGU/KHQuZDJjPXQuZDJsPWssdC5yMmQ9dC5jMmQ9dC5sMmQ9dyx0LmQycj10LmQybF9ub2FkZD1ULHQucjJjPWZ1bmN0aW9uKGUpe3ZhciByPVQoZSk7cmV0dXJuIHZvaWQgMCE9PXI/cjp0LmZyYWN0aW9uMnIoLjUpfSx0Lmwycj10LmMycj1jLHQucjJsPVQsdC5kMnA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQubDJwKHQucjJjKGUpKX0sdC5wMmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHcoUyh0KSl9LHQucjJwPXQuZDJwLHQucDJyPVMsdC5jbGVhblBvcz1mdW5jdGlvbih0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdCYmXCJcIiE9PXQ/dDpjKHQpfSk6XCJtdWx0aWNhdGVnb3J5XCI9PT10LnR5cGUmJih0LnIyZD10LmMyZD10LmwyZD13LHQuZDJyPXQuZDJsX25vYWRkPVQsdC5yMmM9ZnVuY3Rpb24oZSl7dmFyIHI9VChlKTtyZXR1cm4gdm9pZCAwIT09cj9yOnQuZnJhY3Rpb24yciguNSl9LHQucjJjX2p1c3RfaW5kaWNlcz1BLHQubDJyPXQuYzJyPWMsdC5yMmw9VCx0LmQycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5sMnAodC5yMmMoZSkpfSx0LnAyZD1mdW5jdGlvbih0KXtyZXR1cm4gdyhTKHQpKX0sdC5yMnA9dC5kMnAsdC5wMnI9Uyx0LmNsZWFuUG9zPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfHxcInN0cmluZ1wiPT10eXBlb2YgdCYmXCJcIiE9PXQ/dDpjKHQpfSx0LnNldHVwTXVsdGlDYXRlZ29yeT1mdW5jdGlvbihuKXt2YXIgaSxvLHM9dC5fdHJhY2VJbmRpY2VzLGw9ZS5fYXhpc01hdGNoR3JvdXBzO2lmKGwmJmwubGVuZ3RoJiYwPT09dC5fY2F0ZWdvcmllcy5sZW5ndGgpZm9yKGk9MDtpPGwubGVuZ3RoO2krKyl7dmFyIGM9bFtpXTtpZihjW3JdKWZvcih2YXIgZiBpbiBjKWlmKGYhPT1yKXt2YXIgcD1lW3YuaWQybmFtZShmKV07cz1zLmNvbmNhdChwLl90cmFjZUluZGljZXMpfX12YXIgZD1bWzAse31dLFswLHt9XV0sZz1bXTtmb3IoaT0wO2k8cy5sZW5ndGg7aSsrKXt2YXIgbT1uW3NbaV1dO2lmKGggaW4gbSl7dmFyIHg9bVtoXSxiPW0uX2xlbmd0aHx8YS5taW5Sb3dMZW5ndGgoeCk7aWYodSh4WzBdKSYmdSh4WzFdKSlmb3Iobz0wO288YjtvKyspe3ZhciBfPXhbMF1bb10sdz14WzFdW29dO3koXykmJnkodykmJihnLnB1c2goW18sd10pLF8gaW4gZFswXVsxXXx8KGRbMF1bMV1bX109ZFswXVswXSsrKSx3IGluIGRbMV1bMV18fChkWzFdWzFdW3ddPWRbMV1bMF0rKykpfX19Zm9yKGcuc29ydChmdW5jdGlvbih0LGUpe3ZhciByPWRbMF1bMV0sbj1yW3RbMF1dLXJbZVswXV07aWYobilyZXR1cm4gbjt2YXIgaT1kWzFdWzFdO3JldHVybiBpW3RbMV1dLWlbZVsxXV19KSxpPTA7aTxnLmxlbmd0aDtpKyspayhnW2ldKX0pLHQuZnJhY3Rpb24ycj1mdW5jdGlvbihlKXt2YXIgcj10LnIybCh0LnJhbmdlWzBdKSxuPXQucjJsKHQucmFuZ2VbMV0pO3JldHVybiB0LmwycihyK2UqKG4tcikpfSx0LnIyZnJhY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHI9dC5yMmwodC5yYW5nZVswXSksbj10LnIybCh0LnJhbmdlWzFdKTtyZXR1cm4odC5yMmwoZSktcikvKG4tcil9LHQuY2xlYW5SYW5nZT1mdW5jdGlvbihlLHIpe3J8fChyPXt9KSxlfHwoZT1cInJhbmdlXCIpO3ZhciBuLG8scz1hLm5lc3RlZFByb3BlcnR5KHQsZSkuZ2V0KCk7aWYobz0obz1cImRhdGVcIj09PXQudHlwZT9hLmRmbHRSYW5nZSh0LmNhbGVuZGFyKTpcInlcIj09PWg/Zy5ERkxUUkFOR0VZOnIuZGZsdFJhbmdlfHxnLkRGTFRSQU5HRVgpLnNsaWNlKCkscyYmMj09PXMubGVuZ3RoKWZvcihcImRhdGVcIj09PXQudHlwZSYmKHNbMF09YS5jbGVhbkRhdGUoc1swXSxwLHQuY2FsZW5kYXIpLHNbMV09YS5jbGVhbkRhdGUoc1sxXSxwLHQuY2FsZW5kYXIpKSxuPTA7bjwyO24rKylpZihcImRhdGVcIj09PXQudHlwZSl7aWYoIWEuaXNEYXRlVGltZShzW25dLHQuY2FsZW5kYXIpKXt0W2VdPW87YnJlYWt9aWYodC5yMmwoc1swXSk9PT10LnIybChzWzFdKSl7dmFyIGw9YS5jb25zdHJhaW4odC5yMmwoc1swXSksYS5NSU5fTVMrMWUzLGEuTUFYX01TLTFlMyk7c1swXT10LmwycihsLTFlMyksc1sxXT10LmwycihsKzFlMyk7YnJlYWt9fWVsc2V7aWYoIWkoc1tuXSkpe2lmKCFpKHNbMS1uXSkpe3RbZV09bzticmVha31zW25dPXNbMS1uXSoobj8xMDouMSl9aWYoc1tuXTwtZj9zW25dPS1mOnNbbl0+ZiYmKHNbbl09Ziksc1swXT09PXNbMV0pe3ZhciBjPU1hdGgubWF4KDEsTWF0aC5hYnMoMWUtNipzWzBdKSk7c1swXS09YyxzWzFdKz1jfX1lbHNlIGEubmVzdGVkUHJvcGVydHkodCxlKS5zZXQobyl9LHQuc2V0U2NhbGU9ZnVuY3Rpb24ocil7dmFyIG49ZS5fc2l6ZTtpZih0Lm92ZXJsYXlpbmcpe3ZhciBpPXYuZ2V0RnJvbUlkKHtfZnVsbExheW91dDplfSx0Lm92ZXJsYXlpbmcpO3QuZG9tYWluPWkuZG9tYWlufXZhciBhPXImJnQuX3I/XCJfclwiOlwicmFuZ2VcIixvPXQuY2FsZW5kYXI7dC5jbGVhblJhbmdlKGEpO3ZhciBzPXQucjJsKHRbYV1bMF0sbyksbD10LnIybCh0W2FdWzFdLG8pO2lmKFwieVwiPT09aD8odC5fb2Zmc2V0PW4udCsoMS10LmRvbWFpblsxXSkqbi5oLHQuX2xlbmd0aD1uLmgqKHQuZG9tYWluWzFdLXQuZG9tYWluWzBdKSx0Ll9tPXQuX2xlbmd0aC8ocy1sKSx0Ll9iPS10Ll9tKmwpOih0Ll9vZmZzZXQ9bi5sK3QuZG9tYWluWzBdKm4udyx0Ll9sZW5ndGg9bi53Kih0LmRvbWFpblsxXS10LmRvbWFpblswXSksdC5fbT10Ll9sZW5ndGgvKGwtcyksdC5fYj0tdC5fbSpzKSwhaXNGaW5pdGUodC5fbSl8fCFpc0Zpbml0ZSh0Ll9iKXx8dC5fbGVuZ3RoPDApdGhyb3cgZS5fcmVwbG90dGluZz0hMSxuZXcgRXJyb3IoXCJTb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIGF4aXMgc2NhbGluZ1wiKX0sdC5tYWtlQ2FsY2RhdGE9ZnVuY3Rpb24oZSxyKXt2YXIgbixpLG8scyxsPXQudHlwZSxjPVwiZGF0ZVwiPT09bCYmZVtyK1wiY2FsZW5kYXJcIl07aWYociBpbiBlKXtpZihuPWVbcl0scz1lLl9sZW5ndGh8fGEubWluUm93TGVuZ3RoKG4pLGEuaXNUeXBlZEFycmF5KG4pJiYoXCJsaW5lYXJcIj09PWx8fFwibG9nXCI9PT1sKSl7aWYocz09PW4ubGVuZ3RoKXJldHVybiBuO2lmKG4uc3ViYXJyYXkpcmV0dXJuIG4uc3ViYXJyYXkoMCxzKX1pZihcIm11bHRpY2F0ZWdvcnlcIj09PWwpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl7dmFyIGk9KHRbMF18fFtdKVtuXSxhPSh0WzFdfHxbXSlbbl07cltuXT1BKFtpLGFdKX1yZXR1cm4gcn0obixzKTtmb3IoaT1uZXcgQXJyYXkocyksbz0wO288cztvKyspaVtvXT10LmQyYyhuW29dLDAsYyl9ZWxzZXt2YXIgdT1yK1wiMFwiaW4gZT90LmQyYyhlW3IrXCIwXCJdLDAsYyk6MCxoPWVbXCJkXCIrcl0/TnVtYmVyKGVbXCJkXCIrcl0pOjE7Zm9yKG49ZVt7eDpcInlcIix5OlwieFwifVtyXV0scz1lLl9sZW5ndGh8fG4ubGVuZ3RoLGk9bmV3IEFycmF5KHMpLG89MDtvPHM7bysrKWlbb109dStvKmh9cmV0dXJuIGl9LHQuaXNWYWxpZFJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpJiYyPT09ZS5sZW5ndGgmJmkodC5yMmwoZVswXSkpJiZpKHQucjJsKGVbMV0pKX0sdC5pc1B0V2l0aGluUmFuZ2U9ZnVuY3Rpb24oZSxyKXt2YXIgbj10LmMybChlW2hdLG51bGwsciksaT10LnIybCh0LnJhbmdlWzBdKSxhPXQucjJsKHQucmFuZ2VbMV0pO3JldHVybiBpPGE/aTw9biYmbjw9YTphPD1uJiZuPD1pfSx0LmNsZWFyQ2FsYz1mdW5jdGlvbigpe3ZhciBuPWZ1bmN0aW9uKCl7dC5fY2F0ZWdvcmllcz1bXSx0Ll9jYXRlZ29yaWVzTWFwPXt9fSxpPWUuX2F4aXNNYXRjaEdyb3VwcztpZihpJiZpLmxlbmd0aCl7Zm9yKHZhciBhPSExLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9aVtvXTtpZihzW3JdKXthPSEwO3ZhciBsPW51bGwsYz1udWxsO2Zvcih2YXIgdSBpbiBzKXt2YXIgaD1lW3YuaWQybmFtZSh1KV07aWYoaC5fY2F0ZWdvcmllcyl7bD1oLl9jYXRlZ29yaWVzLGM9aC5fY2F0ZWdvcmllc01hcDticmVha319bCYmYz8odC5fY2F0ZWdvcmllcz1sLHQuX2NhdGVnb3JpZXNNYXA9Yyk6bigpO2JyZWFrfX1hfHxuKCl9ZWxzZSBuKCk7aWYodC5faW5pdGlhbENhdGVnb3JpZXMpZm9yKHZhciBmPTA7Zjx0Ll9pbml0aWFsQ2F0ZWdvcmllcy5sZW5ndGg7ZisrKWsodC5faW5pdGlhbENhdGVnb3JpZXNbZl0pfTt2YXIgRT1lLl9kM2xvY2FsZTtcImRhdGVcIj09PXQudHlwZSYmKHQuX2RhdGVGb3JtYXQ9RT9FLnRpbWVGb3JtYXQudXRjOm4udGltZS5mb3JtYXQudXRjLHQuX2V4dHJhRm9ybWF0PWUuX2V4dHJhRm9ybWF0KSx0Ll9zZXBhcmF0b3JzPWUuc2VwYXJhdG9ycyx0Ll9udW1Gb3JtYXQ9RT9FLm51bWJlckZvcm1hdDpuLmZvcm1hdCxkZWxldGUgdC5fbWluRHRpY2ssZGVsZXRlIHQuX2ZvcmNlVGljazB9fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi9heGlzX2lkc1wiOjc1MixcIi4vY29uc3RhbnRzXCI6NzU1LGQzOjE1NSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sNzY4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0c1wiKTtmdW5jdGlvbiBvKHQsZSl7ZnVuY3Rpb24gcihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaS50aWNrZm9ybWF0c3RvcHMscixhKX1yKFwiZW5hYmxlZFwiKSYmKHIoXCJkdGlja3JhbmdlXCIpLHIoXCJ2YWx1ZVwiKSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCl7dmFyIGM9ZnVuY3Rpb24odCl7dmFyIGU9W1wic2hvd2V4cG9uZW50XCIsXCJzaG93dGlja3ByZWZpeFwiLFwic2hvd3RpY2tzdWZmaXhcIl0uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT10W2VdfSk7aWYoZS5ldmVyeShmdW5jdGlvbihyKXtyZXR1cm4gdFtyXT09PXRbZVswXV19KXx8MT09PWUubGVuZ3RoKXJldHVybiB0W2VbMF1dfSh0KTtpZihyKFwidGlja3ByZWZpeFwiKSYmcihcInNob3d0aWNrcHJlZml4XCIsYykscihcInRpY2tzdWZmaXhcIixsLnRpY2tTdWZmaXhEZmx0KSYmcihcInNob3d0aWNrc3VmZml4XCIsYykscihcInNob3d0aWNrbGFiZWxzXCIpKXt2YXIgdT1sLmZvbnR8fHt9LGg9ZS5jb2xvcixmPWgmJmghPT1pLmNvbG9yLmRmbHQ/aDp1LmNvbG9yO2lmKG4uY29lcmNlRm9udChyLFwidGlja2ZvbnRcIix7ZmFtaWx5OnUuZmFtaWx5LHNpemU6dS5zaXplLGNvbG9yOmZ9KSxyKFwidGlja2FuZ2xlXCIpLFwiY2F0ZWdvcnlcIiE9PXMpe3ZhciBwPXIoXCJ0aWNrZm9ybWF0XCIpLGQ9dC50aWNrZm9ybWF0c3RvcHM7QXJyYXkuaXNBcnJheShkKSYmZC5sZW5ndGgmJmEodCxlLHtuYW1lOlwidGlja2Zvcm1hdHN0b3BzXCIsaW5jbHVzaW9uQXR0cjpcImVuYWJsZWRcIixoYW5kbGVJdGVtRGVmYXVsdHM6b30pLHB8fFwiZGF0ZVwiPT09c3x8KHIoXCJzaG93ZXhwb25lbnRcIixjKSxyKFwiZXhwb25lbnRmb3JtYXRcIikscihcInNlcGFyYXRldGhvdXNhbmRzXCIpKX19fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCI6NzQ1LFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjc2MX1dLDc2OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89bi5jb2VyY2UyKHQsZSxpLFwidGlja2xlblwiKSxzPW4uY29lcmNlMih0LGUsaSxcInRpY2t3aWR0aFwiKSxsPW4uY29lcmNlMih0LGUsaSxcInRpY2tjb2xvclwiLGUuY29sb3IpO3IoXCJ0aWNrc1wiLGEub3V0ZXJUaWNrc3x8b3x8c3x8bD9cIm91dHNpZGVcIjpcIlwiKXx8KGRlbGV0ZSBlLnRpY2tsZW4sZGVsZXRlIGUudGlja3dpZHRoLGRlbGV0ZSBlLnRpY2tjb2xvcil9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6NzYxfV0sNzcwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vY2xlYW5fdGlja3NcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhO1wiYXJyYXlcIiE9PXQudGlja21vZGV8fFwibG9nXCIhPT1pJiZcImRhdGVcIiE9PWk/YT1yKFwidGlja21vZGVcIixBcnJheS5pc0FycmF5KHQudGlja3ZhbHMpP1wiYXJyYXlcIjp0LmR0aWNrP1wibGluZWFyXCI6XCJhdXRvXCIpOmE9ZS50aWNrbW9kZT1cImF1dG9cIjtpZihcImF1dG9cIj09PWEpcihcIm50aWNrc1wiKTtlbHNlIGlmKFwibGluZWFyXCI9PT1hKXt2YXIgbz1lLmR0aWNrPW4uZHRpY2sodC5kdGljayxpKTtlLnRpY2swPW4udGljazAodC50aWNrMCxpLGUuY2FsZW5kYXIsbyl9ZWxzZSBpZihcIm11bHRpY2F0ZWdvcnlcIiE9PWkpe3ZvaWQgMD09PXIoXCJ0aWNrdmFsc1wiKT9lLnRpY2ttb2RlPVwiYXV0b1wiOnIoXCJ0aWNrdGV4dFwiKX19fSx7XCIuL2NsZWFuX3RpY2tzXCI6NzU0fV0sNzcxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxvPXQoXCIuL2F4ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe3ZhciBsPXQuX2Z1bGxMYXlvdXQ7aWYoMCE9PWUubGVuZ3RoKXt2YXIgYyx1LGgsZjtzJiYoYz1zKCkpO3ZhciBwPW4uZWFzZShyLmVhc2luZyk7cmV0dXJuIHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MucHVzaChmdW5jdGlvbigpe3JldHVybiB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoZiksZj1udWxsLGZ1bmN0aW9uKCl7Zm9yKHZhciByPXt9LG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGE9ZVtuXTthLnhyMCYmKHJbYS5wbG90aW5mby54YXhpcy5fbmFtZStcIi5yYW5nZVwiXT1hLnhyMC5zbGljZSgpKSxhLnlyMCYmKHJbYS5wbG90aW5mby55YXhpcy5fbmFtZStcIi5yYW5nZVwiXT1hLnlyMC5zbGljZSgpKX1yZXR1cm4gaS5jYWxsKFwicmVsYXlvdXRcIix0LHIpLnRoZW4oZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKylkKGVbdF0ucGxvdGluZm8pfSl9KCl9KSx1PURhdGUubm93KCksZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIG4oKXtoPURhdGUubm93KCk7Zm9yKHZhciBhPU1hdGgubWluKDEsKGgtdSkvci5kdXJhdGlvbiksbz1wKGEpLHM9MDtzPGUubGVuZ3RoO3MrKylnKGVbc10sbyk7aC11PnIuZHVyYXRpb24/KGZ1bmN0aW9uKCl7Zm9yKHZhciByPXt9LG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGE9ZVtuXTthLnhyMSYmKHJbYS5wbG90aW5mby54YXhpcy5fbmFtZStcIi5yYW5nZVwiXT1hLnhyMS5zbGljZSgpKSxhLnlyMSYmKHJbYS5wbG90aW5mby55YXhpcy5fbmFtZStcIi5yYW5nZVwiXT1hLnlyMS5zbGljZSgpKX1jJiZjKCksaS5jYWxsKFwicmVsYXlvdXRcIix0LHIpLnRoZW4oZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKylkKGVbdF0ucGxvdGluZm8pfSl9KCksZj13aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUobikpOmY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShuKX0pLFByb21pc2UucmVzb2x2ZSgpfWZ1bmN0aW9uIGQodCl7dmFyIGU9dC54YXhpcyxyPXQueWF4aXM7bC5fZGVmcy5zZWxlY3QoXCIjXCIrdC5jbGlwSWQrXCI+IHJlY3RcIikuY2FsbChhLnNldFRyYW5zbGF0ZSwwLDApLmNhbGwoYS5zZXRTY2FsZSwxLDEpLHQucGxvdC5jYWxsKGEuc2V0VHJhbnNsYXRlLGUuX29mZnNldCxyLl9vZmZzZXQpLmNhbGwoYS5zZXRTY2FsZSwxLDEpO3ZhciBuPXQucGxvdC5zZWxlY3RBbGwoXCIuc2NhdHRlcmxheWVyIC50cmFjZVwiKTtuLnNlbGVjdEFsbChcIi5wb2ludFwiKS5jYWxsKGEuc2V0UG9pbnRHcm91cFNjYWxlLDEsMSksbi5zZWxlY3RBbGwoXCIudGV4dHBvaW50XCIpLmNhbGwoYS5zZXRUZXh0UG9pbnRzU2NhbGUsMSwxKSxuLmNhbGwoYS5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLHQpfWZ1bmN0aW9uIGcoZSxyKXt2YXIgbj1lLnBsb3RpbmZvLGk9bi54YXhpcyxzPW4ueWF4aXMsbD1lLnhyMCxjPWUueHIxLHU9aS5fbGVuZ3RoLGg9ZS55cjAsZj1lLnlyMSxwPXMuX2xlbmd0aCxkPSEhYyxnPSEhZix2PVtdO2lmKGQpe3ZhciBtPWxbMV0tbFswXSx5PWNbMV0tY1swXTt2WzBdPShsWzBdKigxLXIpK3IqY1swXS1sWzBdKS8obFsxXS1sWzBdKSp1LHZbMl09dSooMS1yK3IqeS9tKSxpLnJhbmdlWzBdPWxbMF0qKDEtcikrcipjWzBdLGkucmFuZ2VbMV09bFsxXSooMS1yKStyKmNbMV19ZWxzZSB2WzBdPTAsdlsyXT11O2lmKGcpe3ZhciB4PWhbMV0taFswXSxiPWZbMV0tZlswXTt2WzFdPShoWzFdKigxLXIpK3IqZlsxXS1oWzFdKS8oaFswXS1oWzFdKSpwLHZbM109cCooMS1yK3IqYi94KSxzLnJhbmdlWzBdPWhbMF0qKDEtcikrcipmWzBdLHMucmFuZ2VbMV09aFsxXSooMS1yKStyKmZbMV19ZWxzZSB2WzFdPTAsdlszXT1wO28uZHJhd09uZSh0LGkse3NraXBUaXRsZTohMH0pLG8uZHJhd09uZSh0LHMse3NraXBUaXRsZTohMH0pLG8ucmVkcmF3Q29tcG9uZW50cyh0LFtpLl9pZCxzLl9pZF0pO3ZhciBfPWQ/dS92WzJdOjEsdz1nP3AvdlszXToxLGs9ZD92WzBdOjAsQT1nP3ZbMV06MCxUPWQ/dlswXS92WzJdKnU6MCxNPWc/dlsxXS92WzNdKnA6MCxTPWkuX29mZnNldC1ULEU9cy5fb2Zmc2V0LU07bi5jbGlwUmVjdC5jYWxsKGEuc2V0VHJhbnNsYXRlLGssQSkuY2FsbChhLnNldFNjYWxlLDEvXywxL3cpLG4ucGxvdC5jYWxsKGEuc2V0VHJhbnNsYXRlLFMsRSkuY2FsbChhLnNldFNjYWxlLF8sdyksYS5zZXRQb2ludEdyb3VwU2NhbGUobi56b29tU2NhbGVQdHMsMS9fLDEvdyksYS5zZXRUZXh0UG9pbnRzU2NhbGUobi56b29tU2NhbGVUeHQsMS9fLDEvdyl9by5yZWRyYXdDb21wb25lbnRzKHQpfX0se1wiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2F4ZXNcIjo3NDksZDM6MTU1fV0sNzcyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLnRyYWNlSXMsaT10KFwiLi9heGlzX2F1dG90eXBlXCIpO2Z1bmN0aW9uIGEodCl7cmV0dXJue3Y6XCJ4XCIsaDpcInlcIn1bdC5vcmllbnRhdGlvbnx8XCJ2XCJdfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj1hKHQpLGk9bih0LFwiYm94LXZpb2xpblwiKSxvPW4odC5fZnVsbElucHV0fHx7fSxcImNhbmRsZXN0aWNrXCIpO3JldHVybiBpJiYhbyYmZT09PXImJnZvaWQgMD09PXRbcl0mJnZvaWQgMD09PXRbcitcIjBcIl19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe1wiLVwiPT09cihcInR5cGVcIiwocy5zcGxvbVN0YXNofHx7fSkudHlwZSkmJighZnVuY3Rpb24odCxlKXtpZihcIi1cIiE9PXQudHlwZSlyZXR1cm47dmFyIHI9dC5faWQscz1yLmNoYXJBdCgwKTstMSE9PXIuaW5kZXhPZihcInNjZW5lXCIpJiYocj1zKTt2YXIgbD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl07aWYoXCJzcGxvbVwiPT09aS50eXBlJiZpLl9sZW5ndGg+MCYmKGlbXCJfXCIrcitcImF4ZXNcIl18fHt9KVtlXSlyZXR1cm4gaTtpZigoaVtyK1wiYXhpc1wiXXx8cik9PT1lKXtpZihvKGkscikpcmV0dXJuIGk7aWYoKGlbcl18fFtdKS5sZW5ndGh8fGlbcitcIjBcIl0pcmV0dXJuIGl9fX0oZSxyLHMpO2lmKCFsKXJldHVybjtpZihcImhpc3RvZ3JhbVwiPT09bC50eXBlJiZzPT09e3Y6XCJ5XCIsaDpcInhcIn1bbC5vcmllbnRhdGlvbnx8XCJ2XCJdKXJldHVybiB2b2lkKHQudHlwZT1cImxpbmVhclwiKTt2YXIgYyx1PXMrXCJjYWxlbmRhclwiLGg9bFt1XSxmPXtub011bHRpQ2F0ZWdvcnk6IW4obCxcImNhcnRlc2lhblwiKXx8bihsLFwibm9NdWx0aUNhdGVnb3J5XCIpfTtpZihvKGwscykpe3ZhciBwPWEobCksZD1bXTtmb3IoYz0wO2M8ZS5sZW5ndGg7YysrKXt2YXIgZz1lW2NdO24oZyxcImJveC12aW9saW5cIikmJihnW3MrXCJheGlzXCJdfHxzKT09PXImJih2b2lkIDAhPT1nW3BdP2QucHVzaChnW3BdWzBdKTp2b2lkIDAhPT1nLm5hbWU/ZC5wdXNoKGcubmFtZSk6ZC5wdXNoKFwidGV4dFwiKSxnW3VdIT09aCYmKGg9dm9pZCAwKSl9dC50eXBlPWkoZCxoLGYpfWVsc2UgaWYoXCJzcGxvbVwiPT09bC50eXBlKXt2YXIgdj1sLmRpbWVuc2lvbnMsbT1sLl9kaWFnO2ZvcihjPTA7Yzx2Lmxlbmd0aDtjKyspe3ZhciB5PXZbY107aWYoeS52aXNpYmxlJiYobVtjXVswXT09PXJ8fG1bY11bMV09PT1yKSl7dC50eXBlPWkoeS52YWx1ZXMsaCxmKTticmVha319fWVsc2UgdC50eXBlPWkobFtzXXx8W2xbcytcIjBcIl1dLGgsZil9KGUscy5kYXRhKSxcIi1cIj09PWUudHlwZT9lLnR5cGU9XCJsaW5lYXJcIjp0LnR5cGU9ZS50eXBlKX19LHtcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9heGlzX2F1dG90eXBlXCI6NzUwfV0sNzczOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uL2xpYlwiKTtmdW5jdGlvbiBhKHQsZSxyKXt2YXIgbixhLG8scz0hMTtpZihcImRhdGFcIj09PWUudHlwZSluPXQuX2Z1bGxEYXRhW251bGwhPT1lLnRyYWNlcz9lLnRyYWNlc1swXTowXTtlbHNle2lmKFwibGF5b3V0XCIhPT1lLnR5cGUpcmV0dXJuITE7bj10Ll9mdWxsTGF5b3V0fXJldHVybiBhPWkubmVzdGVkUHJvcGVydHkobixlLnByb3ApLmdldCgpLChvPXJbZS50eXBlXT1yW2UudHlwZV18fHt9KS5oYXNPd25Qcm9wZXJ0eShlLnByb3ApJiZvW2UucHJvcF0hPT1hJiYocz0hMCksb1tlLnByb3BdPWEse2NoYW5nZWQ6cyx2YWx1ZTphfX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9W10sbj1lWzBdLGE9e307aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4pYVtuXT1lWzFdO2Vsc2V7aWYoIWkuaXNQbGFpbk9iamVjdChuKSlyZXR1cm4gcjthPW59cmV0dXJuIGwoYSxmdW5jdGlvbih0LGUsbil7ci5wdXNoKHt0eXBlOlwibGF5b3V0XCIscHJvcDp0LHZhbHVlOm59KX0sXCJcIiwwKSxyfWZ1bmN0aW9uIHModCxlKXt2YXIgcixuLGEsbyxzPVtdO2lmKG49ZVswXSxhPWVbMV0scj1lWzJdLG89e30sXCJzdHJpbmdcIj09dHlwZW9mIG4pb1tuXT1hO2Vsc2V7aWYoIWkuaXNQbGFpbk9iamVjdChuKSlyZXR1cm4gcztvPW4sdm9pZCAwPT09ciYmKHI9YSl9cmV0dXJuIHZvaWQgMD09PXImJihyPW51bGwpLGwobyxmdW5jdGlvbihlLG4saSl7dmFyIGE7aWYoQXJyYXkuaXNBcnJheShpKSl7dmFyIG89TWF0aC5taW4oaS5sZW5ndGgsdC5kYXRhLmxlbmd0aCk7ciYmKG89TWF0aC5taW4obyxyLmxlbmd0aCkpLGE9W107Zm9yKHZhciBsPTA7bDxvO2wrKylhW2xdPXI/cltsXTpsfWVsc2UgYT1yP3Iuc2xpY2UoMCk6bnVsbDtpZihudWxsPT09YSlBcnJheS5pc0FycmF5KGkpJiYoaT1pWzBdKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoYSkpe2lmKCFBcnJheS5pc0FycmF5KGkpKXt2YXIgYz1pO2k9W107Zm9yKHZhciB1PTA7dTxhLmxlbmd0aDt1KyspaVt1XT1jfWkubGVuZ3RoPU1hdGgubWluKGEubGVuZ3RoLGkubGVuZ3RoKX1zLnB1c2goe3R5cGU6XCJkYXRhXCIscHJvcDplLHRyYWNlczphLHZhbHVlOml9KX0sXCJcIiwwKSxzfWZ1bmN0aW9uIGwodCxlLHIsbil7T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgbz10W2FdO2lmKFwiX1wiIT09YVswXSl7dmFyIHM9cisobj4wP1wiLlwiOlwiXCIpK2E7aS5pc1BsYWluT2JqZWN0KG8pP2wobyxlLHMsbisxKTplKHMsYSxvKX19KX1yLm1hbmFnZUNvbW1hbmRPYnNlcnZlcj1mdW5jdGlvbih0LGUsbixvKXt2YXIgcz17fSxsPSEwO2UmJmUuX2NvbW1hbmRPYnNlcnZlciYmKHM9ZS5fY29tbWFuZE9ic2VydmVyKSxzLmNhY2hlfHwocy5jYWNoZT17fSkscy5sb29rdXBUYWJsZT17fTt2YXIgYz1yLmhhc1NpbXBsZUFQSUNvbW1hbmRCaW5kaW5ncyh0LG4scy5sb29rdXBUYWJsZSk7aWYoZSYmZS5fY29tbWFuZE9ic2VydmVyKXtpZihjKXJldHVybiBzO2lmKGUuX2NvbW1hbmRPYnNlcnZlci5yZW1vdmUpcmV0dXJuIGUuX2NvbW1hbmRPYnNlcnZlci5yZW1vdmUoKSxlLl9jb21tYW5kT2JzZXJ2ZXI9bnVsbCxzfWlmKGMpe2EodCxjLHMuY2FjaGUpLHMuY2hlY2s9ZnVuY3Rpb24oKXtpZihsKXt2YXIgZT1hKHQsYyxzLmNhY2hlKTtyZXR1cm4gZS5jaGFuZ2VkJiZvJiZ2b2lkIDAhPT1zLmxvb2t1cFRhYmxlW2UudmFsdWVdJiYocy5kaXNhYmxlKCksUHJvbWlzZS5yZXNvbHZlKG8oe3ZhbHVlOmUudmFsdWUsdHlwZTpjLnR5cGUscHJvcDpjLnByb3AsdHJhY2VzOmMudHJhY2VzLGluZGV4OnMubG9va3VwVGFibGVbZS52YWx1ZV19KSkudGhlbihzLmVuYWJsZSxzLmVuYWJsZSkpLGUuY2hhbmdlZH19O2Zvcih2YXIgdT1bXCJwbG90bHlfcmVsYXlvdXRcIixcInBsb3RseV9yZWRyYXdcIixcInBsb3RseV9yZXN0eWxlXCIsXCJwbG90bHlfdXBkYXRlXCIsXCJwbG90bHlfYW5pbWF0aW5nZnJhbWVcIixcInBsb3RseV9hZnRlcnBsb3RcIl0saD0wO2g8dS5sZW5ndGg7aCsrKXQuX2ludGVybmFsT24odVtoXSxzLmNoZWNrKTtzLnJlbW92ZT1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dS5sZW5ndGg7ZSsrKXQuX3JlbW92ZUludGVybmFsTGlzdGVuZXIodVtlXSxzLmNoZWNrKX19ZWxzZSBpLmxvZyhcIlVuYWJsZSB0byBhdXRvbWF0aWNhbGx5IGJpbmQgcGxvdCB1cGRhdGVzIHRvIEFQSSBjb21tYW5kXCIpLHMubG9va3VwVGFibGU9e30scy5yZW1vdmU9ZnVuY3Rpb24oKXt9O3JldHVybiBzLmRpc2FibGU9ZnVuY3Rpb24oKXtsPSExfSxzLmVuYWJsZT1mdW5jdGlvbigpe2w9ITB9LGUmJihlLl9jb21tYW5kT2JzZXJ2ZXI9cyksc30sci5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3M9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGEsbz1lLmxlbmd0aDtmb3IoaT0wO2k8bztpKyspe3ZhciBzLGw9ZVtpXSxjPWwubWV0aG9kLHU9bC5hcmdzO2lmKEFycmF5LmlzQXJyYXkodSl8fCh1PVtdKSwhYylyZXR1cm4hMTt2YXIgaD1yLmNvbXB1dGVBUElDb21tYW5kQmluZGluZ3ModCxjLHUpO2lmKDEhPT1oLmxlbmd0aClyZXR1cm4hMTtpZihhKXtpZigocz1oWzBdKS50eXBlIT09YS50eXBlKXJldHVybiExO2lmKHMucHJvcCE9PWEucHJvcClyZXR1cm4hMTtpZihBcnJheS5pc0FycmF5KGEudHJhY2VzKSl7aWYoIUFycmF5LmlzQXJyYXkocy50cmFjZXMpKXJldHVybiExO3MudHJhY2VzLnNvcnQoKTtmb3IodmFyIGY9MDtmPGEudHJhY2VzLmxlbmd0aDtmKyspaWYoYS50cmFjZXNbZl0hPT1zLnRyYWNlc1tmXSlyZXR1cm4hMX1lbHNlIGlmKHMucHJvcCE9PWEucHJvcClyZXR1cm4hMX1lbHNlIGE9aFswXSxBcnJheS5pc0FycmF5KGEudHJhY2VzKSYmYS50cmFjZXMuc29ydCgpO3ZhciBwPShzPWhbMF0pLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkocCkpe2lmKDEhPT1wLmxlbmd0aClyZXR1cm4hMTtwPXBbMF19biYmKG5bcF09aSl9cmV0dXJuIGF9LHIuZXhlY3V0ZUFQSUNvbW1hbmQ9ZnVuY3Rpb24odCxlLHIpe2lmKFwic2tpcFwiPT09ZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7dmFyIGE9bi5hcGlNZXRob2RSZWdpc3RyeVtlXSxvPVt0XTtBcnJheS5pc0FycmF5KHIpfHwocj1bXSk7Zm9yKHZhciBzPTA7czxyLmxlbmd0aDtzKyspby5wdXNoKHJbc10pO3JldHVybiBhLmFwcGx5KG51bGwsbykuY2F0Y2goZnVuY3Rpb24odCl7cmV0dXJuIGkud2FybihcIkFQSSBjYWxsIHRvIFBsb3RseS5cIitlK1wiIHJlamVjdGVkLlwiLHQpLFByb21pc2UucmVqZWN0KHQpfSl9LHIuY29tcHV0ZUFQSUNvbW1hbmRCaW5kaW5ncz1mdW5jdGlvbih0LGUscil7dmFyIG47c3dpdGNoKEFycmF5LmlzQXJyYXkocil8fChyPVtdKSxlKXtjYXNlXCJyZXN0eWxlXCI6bj1zKHQscik7YnJlYWs7Y2FzZVwicmVsYXlvdXRcIjpuPW8odCxyKTticmVhaztjYXNlXCJ1cGRhdGVcIjpuPXModCxbclswXSxyWzJdXSkuY29uY2F0KG8odCxbclsxXV0pKTticmVhaztjYXNlXCJhbmltYXRlXCI6bj1mdW5jdGlvbih0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KGVbMF0pJiYxPT09ZVswXS5sZW5ndGgmJi0xIT09W1wic3RyaW5nXCIsXCJudW1iZXJcIl0uaW5kZXhPZih0eXBlb2YgZVswXVswXSk/W3t0eXBlOlwibGF5b3V0XCIscHJvcDpcIl9jdXJyZW50RnJhbWVcIix2YWx1ZTplWzBdWzBdLnRvU3RyaW5nKCl9XTpbXX0oMCxyKTticmVhaztkZWZhdWx0Om49W119cmV0dXJuIG59fSx7XCIuLi9saWJcIjo3MDEsXCIuLi9yZWdpc3RyeVwiOjgyOX1dLDc3NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQ7ci5hdHRyaWJ1dGVzPWZ1bmN0aW9uKHQsZSl7ZT1lfHx7fTt2YXIgcj17dmFsVHlwZTpcImluZm9fYXJyYXlcIixlZGl0VHlwZToodD10fHx7fSkuZWRpdFR5cGUsaXRlbXM6W3t2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZWRpdFR5cGU6dC5lZGl0VHlwZX0se3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxlZGl0VHlwZTp0LmVkaXRUeXBlfV0sZGZsdDpbMCwxXX0saT0odC5uYW1lJiZ0Lm5hbWUsdC50cmFjZSxlLmRlc2NyaXB0aW9uJiZlLmRlc2NyaXB0aW9uLHt4Om4oe30scix7fSkseTpuKHt9LHIse30pLGVkaXRUeXBlOnQuZWRpdFR5cGV9KTtyZXR1cm4gdC5ub0dyaWRDZWxsfHwoaS5yb3c9e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsbWluOjAsZGZsdDowLGVkaXRUeXBlOnQuZWRpdFR5cGV9LGkuY29sdW1uPXt2YWxUeXBlOlwiaW50ZWdlclwiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTp0LmVkaXRUeXBlfSksaX0sci5kZWZhdWx0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uJiZuLnh8fFswLDFdLGE9biYmbi55fHxbMCwxXSxvPWUuZ3JpZDtpZihvKXt2YXIgcz1yKFwiZG9tYWluLmNvbHVtblwiKTt2b2lkIDAhPT1zJiYoczxvLmNvbHVtbnM/aT1vLl9kb21haW5zLnhbc106ZGVsZXRlIHQuZG9tYWluLmNvbHVtbik7dmFyIGw9cihcImRvbWFpbi5yb3dcIik7dm9pZCAwIT09bCYmKGw8by5yb3dzP2E9by5fZG9tYWlucy55W2xdOmRlbGV0ZSB0LmRvbWFpbi5yb3cpfXIoXCJkb21haW4ueFwiLGkpLHIoXCJkb21haW4ueVwiLGEpfX0se1wiLi4vbGliL2V4dGVuZFwiOjY5MX1dLDc3NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmVkaXRUeXBlLHI9dC5jb2xvckVkaXRUeXBlO3ZvaWQgMD09PXImJihyPWUpO3ZhciBuPXtmYW1pbHk6e3ZhbFR5cGU6XCJzdHJpbmdcIixub0JsYW5rOiEwLHN0cmljdDohMCxlZGl0VHlwZTplfSxzaXplOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjEsZWRpdFR5cGU6ZX0sY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOnJ9LGVkaXRUeXBlOmV9O3JldHVybiB0LmFycmF5T2smJihuLmZhbWlseS5hcnJheU9rPSEwLG4uc2l6ZS5hcnJheU9rPSEwLG4uY29sb3IuYXJyYXlPaz0hMCksbn19LHt9XSw3NzY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e19pc0xpbmtlZFRvQXJyYXk6XCJmcmFtZXNfZW50cnlcIixncm91cDp7dmFsVHlwZTpcInN0cmluZ1wifSxuYW1lOnt2YWxUeXBlOlwic3RyaW5nXCJ9LHRyYWNlczp7dmFsVHlwZTpcImFueVwifSxiYXNlZnJhbWU6e3ZhbFR5cGU6XCJzdHJpbmdcIn0sZGF0YTp7dmFsVHlwZTpcImFueVwifSxsYXlvdXQ6e3ZhbFR5cGU6XCJhbnlcIn19fSx7fV0sNzc3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ci5wcm9qTmFtZXM9e2VxdWlyZWN0YW5ndWxhcjpcImVxdWlyZWN0YW5ndWxhclwiLG1lcmNhdG9yOlwibWVyY2F0b3JcIixvcnRob2dyYXBoaWM6XCJvcnRob2dyYXBoaWNcIixcIm5hdHVyYWwgZWFydGhcIjpcIm5hdHVyYWxFYXJ0aFwiLGthdnJheXNraXk3Olwia2F2cmF5c2tpeTdcIixtaWxsZXI6XCJtaWxsZXJcIixyb2JpbnNvbjpcInJvYmluc29uXCIsZWNrZXJ0NDpcImVja2VydDRcIixcImF6aW11dGhhbCBlcXVhbCBhcmVhXCI6XCJhemltdXRoYWxFcXVhbEFyZWFcIixcImF6aW11dGhhbCBlcXVpZGlzdGFudFwiOlwiYXppbXV0aGFsRXF1aWRpc3RhbnRcIixcImNvbmljIGVxdWFsIGFyZWFcIjpcImNvbmljRXF1YWxBcmVhXCIsXCJjb25pYyBjb25mb3JtYWxcIjpcImNvbmljQ29uZm9ybWFsXCIsXCJjb25pYyBlcXVpZGlzdGFudFwiOlwiY29uaWNFcXVpZGlzdGFudFwiLGdub21vbmljOlwiZ25vbW9uaWNcIixzdGVyZW9ncmFwaGljOlwic3RlcmVvZ3JhcGhpY1wiLG1vbGx3ZWlkZTpcIm1vbGx3ZWlkZVwiLGhhbW1lcjpcImhhbW1lclwiLFwidHJhbnN2ZXJzZSBtZXJjYXRvclwiOlwidHJhbnN2ZXJzZU1lcmNhdG9yXCIsXCJhbGJlcnMgdXNhXCI6XCJhbGJlcnNVc2FcIixcIndpbmtlbCB0cmlwZWxcIjpcIndpbmtlbDNcIixhaXRvZmY6XCJhaXRvZmZcIixzaW51c29pZGFsOlwic2ludXNvaWRhbFwifSxyLmF4ZXNOYW1lcz1bXCJsb25heGlzXCIsXCJsYXRheGlzXCJdLHIubG9uYXhpc1NwYW49e29ydGhvZ3JhcGhpYzoxODAsXCJhemltdXRoYWwgZXF1YWwgYXJlYVwiOjM2MCxcImF6aW11dGhhbCBlcXVpZGlzdGFudFwiOjM2MCxcImNvbmljIGNvbmZvcm1hbFwiOjE4MCxnbm9tb25pYzoxNjAsc3RlcmVvZ3JhcGhpYzoxODAsXCJ0cmFuc3ZlcnNlIG1lcmNhdG9yXCI6MTgwLFwiKlwiOjM2MH0sci5sYXRheGlzU3Bhbj17XCJjb25pYyBjb25mb3JtYWxcIjoxNTAsc3RlcmVvZ3JhcGhpYzoxNzkuNSxcIipcIjoxODB9LHIuc2NvcGVEZWZhdWx0cz17d29ybGQ6e2xvbmF4aXNSYW5nZTpbLTE4MCwxODBdLGxhdGF4aXNSYW5nZTpbLTkwLDkwXSxwcm9qVHlwZTpcImVxdWlyZWN0YW5ndWxhclwiLHByb2pSb3RhdGU6WzAsMCwwXX0sdXNhOntsb25heGlzUmFuZ2U6Wy0xODAsLTUwXSxsYXRheGlzUmFuZ2U6WzE1LDgwXSxwcm9qVHlwZTpcImFsYmVycyB1c2FcIn0sZXVyb3BlOntsb25heGlzUmFuZ2U6Wy0zMCw2MF0sbGF0YXhpc1JhbmdlOlszMCw4NV0scHJvalR5cGU6XCJjb25pYyBjb25mb3JtYWxcIixwcm9qUm90YXRlOlsxNSwwLDBdLHByb2pQYXJhbGxlbHM6WzAsNjBdfSxhc2lhOntsb25heGlzUmFuZ2U6WzIyLDE2MF0sbGF0YXhpc1JhbmdlOlstMTUsNTVdLHByb2pUeXBlOlwibWVyY2F0b3JcIixwcm9qUm90YXRlOlswLDAsMF19LGFmcmljYTp7bG9uYXhpc1JhbmdlOlstMzAsNjBdLGxhdGF4aXNSYW5nZTpbLTQwLDQwXSxwcm9qVHlwZTpcIm1lcmNhdG9yXCIscHJvalJvdGF0ZTpbMCwwLDBdfSxcIm5vcnRoIGFtZXJpY2FcIjp7bG9uYXhpc1JhbmdlOlstMTgwLC00NV0sbGF0YXhpc1JhbmdlOls1LDg1XSxwcm9qVHlwZTpcImNvbmljIGNvbmZvcm1hbFwiLHByb2pSb3RhdGU6Wy0xMDAsMCwwXSxwcm9qUGFyYWxsZWxzOlsyOS41LDQ1LjVdfSxcInNvdXRoIGFtZXJpY2FcIjp7bG9uYXhpc1JhbmdlOlstMTAwLC0zMF0sbGF0YXhpc1JhbmdlOlstNjAsMTVdLHByb2pUeXBlOlwibWVyY2F0b3JcIixwcm9qUm90YXRlOlswLDAsMF19fSxyLmNsaXBQYWQ9LjAwMSxyLnByZWNpc2lvbj0uMSxyLmxhbmRDb2xvcj1cIiNGMERDODJcIixyLndhdGVyQ29sb3I9XCIjMzM5OUZGXCIsci5sb2NhdGlvbm1vZGVUb0xheWVyPXtcIklTTy0zXCI6XCJjb3VudHJpZXNcIixcIlVTQS1zdGF0ZXNcIjpcInN1YnVuaXRzXCIsXCJjb3VudHJ5IG5hbWVzXCI6XCJjb3VudHJpZXNcIn0sci5zcGhlcmVTVkc9e3R5cGU6XCJTcGhlcmVcIn0sci5maWxsTGF5ZXJzPXtvY2VhbjoxLGxhbmQ6MSxsYWtlczoxfSxyLmxpbmVMYXllcnM9e3N1YnVuaXRzOjEsY291bnRyaWVzOjEsY29hc3RsaW5lczoxLHJpdmVyczoxLGZyYW1lOjF9LHIubGF5ZXJzPVtcImJnXCIsXCJvY2VhblwiLFwibGFuZFwiLFwibGFrZXNcIixcInN1YnVuaXRzXCIsXCJjb3VudHJpZXNcIixcImNvYXN0bGluZXNcIixcInJpdmVyc1wiLFwibGF0YXhpc1wiLFwibG9uYXhpc1wiLFwiZnJhbWVcIixcImJhY2twbG90XCIsXCJmcm9udHBsb3RcIl0sci5sYXllcnNGb3JDaG9yb3BsZXRoPVtcImJnXCIsXCJvY2VhblwiLFwibGFuZFwiLFwic3VidW5pdHNcIixcImNvdW50cmllc1wiLFwiY29hc3RsaW5lc1wiLFwibGF0YXhpc1wiLFwibG9uYXhpc1wiLFwiZnJhbWVcIixcImJhY2twbG90XCIsXCJyaXZlcnNcIixcImxha2VzXCIsXCJmcm9udHBsb3RcIl0sci5sYXllck5hbWVUb0FkamVjdGl2ZT17b2NlYW46XCJvY2VhblwiLGxhbmQ6XCJsYW5kXCIsbGFrZXM6XCJsYWtlXCIsc3VidW5pdHM6XCJzdWJ1bml0XCIsY291bnRyaWVzOlwiY291bnRyeVwiLGNvYXN0bGluZXM6XCJjb2FzdGxpbmVcIixyaXZlcnM6XCJyaXZlclwiLGZyYW1lOlwiZnJhbWVcIn19LHt9XSw3Nzg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vcmVnaXN0cnlcIiksYT10KFwiLi4vLi4vbGliXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIikscz10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLGw9dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIiksYz10KFwiLi4vcGxvdHNcIiksdT10KFwiLi4vY2FydGVzaWFuL2F4ZXNcIiksaD10KFwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudFwiKSxmPXQoXCIuLi9jYXJ0ZXNpYW4vc2VsZWN0XCIpLnByZXBTZWxlY3QscD10KFwiLi4vY2FydGVzaWFuL3NlbGVjdFwiKS5zZWxlY3RPbkNsaWNrLGQ9dChcIi4vem9vbVwiKSxnPXQoXCIuL2NvbnN0YW50c1wiKSx2PXQoXCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHNcIiksbT10KFwidG9wb2pzb24tY2xpZW50XCIpLmZlYXR1cmU7ZnVuY3Rpb24geSh0KXt0aGlzLmlkPXQuaWQsdGhpcy5ncmFwaERpdj10LmdyYXBoRGl2LHRoaXMuY29udGFpbmVyPXQuY29udGFpbmVyLHRoaXMudG9wb2pzb25VUkw9dC50b3BvanNvblVSTCx0aGlzLmlzU3RhdGljPXQuc3RhdGljUGxvdCx0aGlzLnRvcG9qc29uTmFtZT1udWxsLHRoaXMudG9wb2pzb249bnVsbCx0aGlzLnByb2plY3Rpb249bnVsbCx0aGlzLnZpZXdJbml0aWFsPW51bGwsdGhpcy5maXRTY2FsZT1udWxsLHRoaXMuYm91bmRzPW51bGwsdGhpcy5taWRQdD1udWxsLHRoaXMuaGFzQ2hvcm9wbGV0aD0hMSx0aGlzLnRyYWNlSGFzaD17fSx0aGlzLmxheWVycz17fSx0aGlzLmJhc2VQYXRocz17fSx0aGlzLmRhdGFQYXRocz17fSx0aGlzLmRhdGFQb2ludHM9e30sdGhpcy5jbGlwRGVmPW51bGwsdGhpcy5jbGlwUmVjdD1udWxsLHRoaXMuYmdSZWN0PW51bGwsdGhpcy5tYWtlRnJhbWV3b3JrKCl9dChcIi4vcHJvamVjdGlvbnNcIikobik7dmFyIHg9eS5wcm90b3R5cGU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgeSh0KX0seC5wbG90PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLGk9ZVt0aGlzLmlkXSxhPXYuZ2V0VG9wb2pzb25OYW1lKGkpO251bGw9PT1uLnRvcG9qc29ufHxhIT09bi50b3BvanNvbk5hbWU/KG4udG9wb2pzb25OYW1lPWEsdm9pZCAwPT09UGxvdGx5R2VvQXNzZXRzLnRvcG9qc29uW24udG9wb2pzb25OYW1lXT9yLnB1c2gobi5mZXRjaFRvcG9qc29uKCkudGhlbihmdW5jdGlvbihyKXtQbG90bHlHZW9Bc3NldHMudG9wb2pzb25bbi50b3BvanNvbk5hbWVdPXIsbi50b3BvanNvbj1yLG4udXBkYXRlKHQsZSl9KSk6KG4udG9wb2pzb249UGxvdGx5R2VvQXNzZXRzLnRvcG9qc29uW24udG9wb2pzb25OYW1lXSxuLnVwZGF0ZSh0LGUpKSk6bi51cGRhdGUodCxlKX0seC5mZXRjaFRvcG9qc29uPWZ1bmN0aW9uKCl7dmFyIHQ9di5nZXRUb3BvanNvblBhdGgodGhpcy50b3BvanNvblVSTCx0aGlzLnRvcG9qc29uTmFtZSk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUscil7bi5qc29uKHQsZnVuY3Rpb24obixpKXtpZihuKXJldHVybiA0MDQ9PT1uLnN0YXR1cz9yKG5ldyBFcnJvcihbXCJwbG90bHkuanMgY291bGQgbm90IGZpbmQgdG9wb2pzb24gZmlsZSBhdFwiLHQsXCIuXCIsXCJNYWtlIHN1cmUgdGhlICp0b3BvanNvblVSTCogcGxvdCBjb25maWcgb3B0aW9uXCIsXCJpcyBzZXQgcHJvcGVybHkuXCJdLmpvaW4oXCIgXCIpKSk6cihuZXcgRXJyb3IoW1widW5leHBlY3RlZCBlcnJvciB3aGlsZSBmZXRjaGluZyB0b3BvanNvbiBmaWxlIGF0XCIsdF0uam9pbihcIiBcIikpKTtlKGkpfSl9KX0seC51cGRhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lW3RoaXMuaWRdO2lmKCF0aGlzLnVwZGF0ZVByb2plY3Rpb24oZSxyKSl7dGhpcy5oYXNDaG9yb3BsZXRoPSExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKFwiY2hvcm9wbGV0aFwiPT09dFtuXVswXS50cmFjZS50eXBlKXt0aGlzLmhhc0Nob3JvcGxldGg9ITA7YnJlYWt9dGhpcy52aWV3SW5pdGlhbHx8dGhpcy5zYXZlVmlld0luaXRpYWwociksdGhpcy51cGRhdGVCYXNlTGF5ZXJzKGUsciksdGhpcy51cGRhdGVEaW1zKGUsciksdGhpcy51cGRhdGVGeChlLHIpLGMuZ2VuZXJhbFVwZGF0ZVBlclRyYWNlTW9kdWxlKHRoaXMuZ3JhcGhEaXYsdGhpcyx0LHIpO3ZhciBpPXRoaXMubGF5ZXJzLmZyb250cGxvdC5zZWxlY3QoXCIuc2NhdHRlcmxheWVyXCIpO3RoaXMuZGF0YVBvaW50cy5wb2ludD1pLnNlbGVjdEFsbChcIi5wb2ludFwiKSx0aGlzLmRhdGFQb2ludHMudGV4dD1pLnNlbGVjdEFsbChcInRleHRcIiksdGhpcy5kYXRhUGF0aHMubGluZT1pLnNlbGVjdEFsbChcIi5qcy1saW5lXCIpO3ZhciBhPXRoaXMubGF5ZXJzLmJhY2twbG90LnNlbGVjdChcIi5jaG9yb3BsZXRobGF5ZXJcIik7dGhpcy5kYXRhUGF0aHMuY2hvcm9wbGV0aD1hLnNlbGVjdEFsbChcInBhdGhcIiksdGhpcy5yZW5kZXIoKX19LHgudXBkYXRlUHJvamVjdGlvbj1mdW5jdGlvbih0LGUpe3ZhciByPXQuX3NpemUsbz1lLmRvbWFpbixzPWUucHJvamVjdGlvbixsPXMucm90YXRpb258fHt9LGM9ZS5jZW50ZXJ8fHt9LHU9dGhpcy5wcm9qZWN0aW9uPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LnByb2plY3Rpb24udHlwZSxyPW4uZ2VvW2cucHJvak5hbWVzW2VdXSgpLGk9dC5faXNDbGlwcGVkP2cubG9uYXhpc1NwYW5bZV0vMjpudWxsLGE9W1wiY2VudGVyXCIsXCJyb3RhdGVcIixcInBhcmFsbGVsc1wiLFwiY2xpcEV4dGVudFwiXSxvPWZ1bmN0aW9uKHQpe3JldHVybiB0P3I6W119LHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzXTtcImZ1bmN0aW9uXCIhPXR5cGVvZiByW2xdJiYocltsXT1vKX1yLmlzTG9uTGF0T3ZlckVkZ2VzPWZ1bmN0aW9uKHQpe2lmKG51bGw9PT1yKHQpKXJldHVybiEwO2lmKGkpe3ZhciBlPXIucm90YXRlKCk7cmV0dXJuIG4uZ2VvLmRpc3RhbmNlKHQsWy1lWzBdLC1lWzFdXSk+aSpNYXRoLlBJLzE4MH1yZXR1cm4hMX0sci5nZXRQYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIG4uZ2VvLnBhdGgoKS5wcm9qZWN0aW9uKHIpfSxyLmdldEJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gci5nZXRQYXRoKCkuYm91bmRzKHQpfSxyLmZpdEV4dGVudD1mdW5jdGlvbih0LGUpe3ZhciBuPXRbMV1bMF0tdFswXVswXSxpPXRbMV1bMV0tdFswXVsxXSxhPXIuY2xpcEV4dGVudCYmci5jbGlwRXh0ZW50KCk7ci5zY2FsZSgxNTApLnRyYW5zbGF0ZShbMCwwXSksYSYmci5jbGlwRXh0ZW50KG51bGwpO3ZhciBvPXIuZ2V0Qm91bmRzKGUpLHM9TWF0aC5taW4obi8ob1sxXVswXS1vWzBdWzBdKSxpLyhvWzFdWzFdLW9bMF1bMV0pKSxsPSt0WzBdWzBdKyhuLXMqKG9bMV1bMF0rb1swXVswXSkpLzIsYz0rdFswXVsxXSsoaS1zKihvWzFdWzFdK29bMF1bMV0pKS8yO3JldHVybiBhJiZyLmNsaXBFeHRlbnQoYSksci5zY2FsZSgxNTAqcykudHJhbnNsYXRlKFtsLGNdKX0sci5wcmVjaXNpb24oZy5wcmVjaXNpb24pLGkmJnIuY2xpcEFuZ2xlKGktZy5jbGlwUGFkKTtyZXR1cm4gcn0oZSk7dS5jZW50ZXIoW2MubG9uLWwubG9uLGMubGF0LWwubGF0XSkucm90YXRlKFstbC5sb24sLWwubGF0LGwucm9sbF0pLnBhcmFsbGVscyhzLnBhcmFsbGVscyk7dmFyIGg9W1tyLmwrci53Km8ueFswXSxyLnQrci5oKigxLW8ueVsxXSldLFtyLmwrci53Km8ueFsxXSxyLnQrci5oKigxLW8ueVswXSldXSxmPWUubG9uYXhpcyxwPWUubGF0YXhpcyxkPWZ1bmN0aW9uKHQsZSl7dmFyIHI9Zy5jbGlwUGFkLG49dFswXStyLGk9dFsxXS1yLGE9ZVswXStyLG89ZVsxXS1yO24+MCYmaTwwJiYoaSs9MzYwKTt2YXIgcz0oaS1uKS80O3JldHVybnt0eXBlOlwiUG9seWdvblwiLGNvb3JkaW5hdGVzOltbW24sYV0sW24sb10sW24rcyxvXSxbbisyKnMsb10sW24rMypzLG9dLFtpLG9dLFtpLGFdLFtpLXMsYV0sW2ktMipzLGFdLFtpLTMqcyxhXSxbbixhXV1dfX0oZi5yYW5nZSxwLnJhbmdlKTt1LmZpdEV4dGVudChoLGQpO3ZhciB2PXRoaXMuYm91bmRzPXUuZ2V0Qm91bmRzKGQpLG09dGhpcy5maXRTY2FsZT11LnNjYWxlKCkseT11LnRyYW5zbGF0ZSgpO2lmKCFpc0Zpbml0ZSh2WzBdWzBdKXx8IWlzRmluaXRlKHZbMF1bMV0pfHwhaXNGaW5pdGUodlsxXVswXSl8fCFpc0Zpbml0ZSh2WzFdWzFdKXx8aXNOYU4oeVswXSl8fGlzTmFOKHlbMF0pKXtmb3IodmFyIHg9dGhpcy5ncmFwaERpdixiPVtcInByb2plY3Rpb24ucm90YXRpb25cIixcImNlbnRlclwiLFwibG9uYXhpcy5yYW5nZVwiLFwibGF0YXhpcy5yYW5nZVwiXSxfPVwiSW52YWxpZCBnZW8gc2V0dGluZ3MsIHJlbGF5b3V0J2luZyB0byBkZWZhdWx0IHZpZXcuXCIsdz17fSxrPTA7azxiLmxlbmd0aDtrKyspd1t0aGlzLmlkK1wiLlwiK2Jba11dPW51bGw7cmV0dXJuIHRoaXMudmlld0luaXRpYWw9bnVsbCxhLndhcm4oXykseC5fcHJvbWlzZXMucHVzaChpLmNhbGwoXCJyZWxheW91dFwiLHgsdykpLF99dmFyIEE9dGhpcy5taWRQdD1bKHZbMF1bMF0rdlsxXVswXSkvMiwodlswXVsxXSt2WzFdWzFdKS8yXTtpZih1LnNjYWxlKHMuc2NhbGUqbSkudHJhbnNsYXRlKFt5WzBdKyhBWzBdLXlbMF0pLHlbMV0rKEFbMV0teVsxXSldKS5jbGlwRXh0ZW50KHYpLGUuX2lzQWxiZXJzVXNhKXt2YXIgVD11KFtjLmxvbixjLmxhdF0pLE09dS50cmFuc2xhdGUoKTt1LnRyYW5zbGF0ZShbTVswXS0oVFswXS1NWzBdKSxNWzFdLShUWzFdLU1bMV0pXSl9fSx4LnVwZGF0ZUJhc2VMYXllcnM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLGk9ci50b3BvanNvbixhPXIubGF5ZXJzLGw9ci5iYXNlUGF0aHM7ZnVuY3Rpb24gYyh0KXtyZXR1cm5cImxvbmF4aXNcIj09PXR8fFwibGF0YXhpc1wiPT09dH1mdW5jdGlvbiBoKHQpe3JldHVybiBCb29sZWFuKGcubGluZUxheWVyc1t0XSl9ZnVuY3Rpb24gZih0KXtyZXR1cm4gQm9vbGVhbihnLmZpbGxMYXllcnNbdF0pfXZhciBwPSh0aGlzLmhhc0Nob3JvcGxldGg/Zy5sYXllcnNGb3JDaG9yb3BsZXRoOmcubGF5ZXJzKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGgodCl8fGYodCk/ZVtcInNob3dcIit0XTohYyh0KXx8ZVt0XS5zaG93Z3JpZH0pLGQ9ci5mcmFtZXdvcmsuc2VsZWN0QWxsKFwiLmxheWVyXCIpLmRhdGEocCxTdHJpbmcpO2QuZXhpdCgpLmVhY2goZnVuY3Rpb24odCl7ZGVsZXRlIGFbdF0sZGVsZXRlIGxbdF0sbi5zZWxlY3QodGhpcykucmVtb3ZlKCl9KSxkLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIixmdW5jdGlvbih0KXtyZXR1cm5cImxheWVyIFwiK3R9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWFbdF09bi5zZWxlY3QodGhpcyk7XCJiZ1wiPT09dD9yLmJnUmVjdD1lLmFwcGVuZChcInJlY3RcIikuc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpOmModCk/bFt0XT1lLmFwcGVuZChcInBhdGhcIikuc3R5bGUoXCJmaWxsXCIsXCJub25lXCIpOlwiYmFja3Bsb3RcIj09PXQ/ZS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJjaG9yb3BsZXRobGF5ZXJcIiwhMCk6XCJmcm9udHBsb3RcIj09PXQ/ZS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJzY2F0dGVybGF5ZXJcIiwhMCk6aCh0KT9sW3RdPWUuYXBwZW5kKFwicGF0aFwiKS5zdHlsZShcImZpbGxcIixcIm5vbmVcIikuc3R5bGUoXCJzdHJva2UtbWl0ZXJsaW1pdFwiLDIpOmYodCkmJihsW3RdPWUuYXBwZW5kKFwicGF0aFwiKS5zdHlsZShcInN0cm9rZVwiLFwibm9uZVwiKSl9KSxkLm9yZGVyKCksZC5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBuPWxbcl0sYT1nLmxheWVyTmFtZVRvQWRqZWN0aXZlW3JdO1wiZnJhbWVcIj09PXI/bi5kYXR1bShnLnNwaGVyZVNWRyk6aChyKXx8ZihyKT9uLmRhdHVtKG0oaSxpLm9iamVjdHNbcl0pKTpjKHIpJiZuLmRhdHVtKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbz1lW3RdLHM9Zy5zY29wZURlZmF1bHRzW2Uuc2NvcGVdO1wibG9uYXhpc1wiPT09dD8obj1zLmxvbmF4aXNSYW5nZSxpPXMubGF0YXhpc1JhbmdlLGE9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdCxlXX0pOlwibGF0YXhpc1wiPT09dCYmKG49cy5sYXRheGlzUmFuZ2UsaT1zLmxvbmF4aXNSYW5nZSxhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuW2UsdF19KTt2YXIgbD17dHlwZTpcImxpbmVhclwiLHJhbmdlOltuWzBdLG5bMV0tMWUtNl0sdGljazA6by50aWNrMCxkdGljazpvLmR0aWNrfTt1LnNldENvbnZlcnQobCxyKTt2YXIgYz11LmNhbGNUaWNrcyhsKTtlLmlzU2NvcGVkfHxcImxvbmF4aXNcIiE9PXR8fGMucG9wKCk7Zm9yKHZhciBoPWMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHA9MDtwPGg7cCsrKWZvcih2YXIgZD1jW3BdLngsdj1mW3BdPVtdLG09aVswXTttPGlbMV0rMi41O20rPTIuNSl2LnB1c2goYShkLG0pKTtyZXR1cm57dHlwZTpcIk11bHRpTGluZVN0cmluZ1wiLGNvb3JkaW5hdGVzOmZ9fShyLGUsdCkpLmNhbGwoby5zdHJva2UsZVtyXS5ncmlkY29sb3IpLmNhbGwocy5kYXNoTGluZSxcIlwiLGVbcl0uZ3JpZHdpZHRoKSxoKHIpP24uY2FsbChvLnN0cm9rZSxlW2ErXCJjb2xvclwiXSkuY2FsbChzLmRhc2hMaW5lLFwiXCIsZVthK1wid2lkdGhcIl0pOmYocikmJm4uY2FsbChvLmZpbGwsZVthK1wiY29sb3JcIl0pfSl9LHgudXBkYXRlRGltcz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuYm91bmRzLG49KGUuZnJhbWV3aWR0aHx8MCkvMixpPXJbMF1bMF0tbixhPXJbMF1bMV0tbixsPXJbMV1bMF0taStuLGM9clsxXVsxXS1hK247cy5zZXRSZWN0KHRoaXMuY2xpcFJlY3QsaSxhLGwsYyksdGhpcy5iZ1JlY3QuY2FsbChzLnNldFJlY3QsaSxhLGwsYykuY2FsbChvLmZpbGwsZS5iZ2NvbG9yKSx0aGlzLnhheGlzLl9vZmZzZXQ9aSx0aGlzLnhheGlzLl9sZW5ndGg9bCx0aGlzLnlheGlzLl9vZmZzZXQ9YSx0aGlzLnlheGlzLl9sZW5ndGg9Y30seC51cGRhdGVGeD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsYT1yLmdyYXBoRGl2LG89ci5iZ1JlY3Qscz10LmRyYWdtb2RlLGM9dC5jbGlja21vZGU7aWYoIXIuaXNTdGF0aWMpe3ZhciB1O1wic2VsZWN0XCI9PT1zP3U9ZnVuY3Rpb24odCxlKXsodC5yYW5nZT17fSlbci5pZF09W3YoW2UueG1pbixlLnltaW5dKSx2KFtlLnhtYXgsZS55bWF4XSldfTpcImxhc3NvXCI9PT1zJiYodT1mdW5jdGlvbih0LGUsbil7KHQubGFzc29Qb2ludHM9e30pW3IuaWRdPW4uZmlsdGVyZWQubWFwKHYpfSk7dmFyIGc9e2VsZW1lbnQ6ci5iZ1JlY3Qubm9kZSgpLGdkOmEscGxvdGluZm86e2lkOnIuaWQseGF4aXM6ci54YXhpcyx5YXhpczpyLnlheGlzLGZpbGxSYW5nZUl0ZW1zOnV9LHhheGVzOltyLnhheGlzXSx5YXhlczpbci55YXhpc10sc3VicGxvdDpyLmlkLGNsaWNrRm46ZnVuY3Rpb24oZSl7Mj09PWUmJnQuX3pvb21sYXllci5zZWxlY3RBbGwoXCIuc2VsZWN0LW91dGxpbmVcIikucmVtb3ZlKCl9fTtcInBhblwiPT09cz8oby5ub2RlKCkub25tb3VzZWRvd249bnVsbCxvLmNhbGwoZChyLGUpKSxvLm9uKFwiZGJsY2xpY2suem9vbVwiLGZ1bmN0aW9uKCl7dmFyIHQ9ci52aWV3SW5pdGlhbCxlPXt9O2Zvcih2YXIgbiBpbiB0KWVbci5pZCtcIi5cIituXT10W25dO2kuY2FsbChcIl9ndWlSZWxheW91dFwiLGEsZSksYS5lbWl0KFwicGxvdGx5X2RvdWJsZWNsaWNrXCIsbnVsbCl9KSxhLl9jb250ZXh0Ll9zY3JvbGxab29tLmdlb3x8by5vbihcIndoZWVsLnpvb21cIixudWxsKSk6XCJzZWxlY3RcIiE9PXMmJlwibGFzc29cIiE9PXN8fChvLm9uKFwiLnpvb21cIixudWxsKSxnLnByZXBGbj1mdW5jdGlvbih0LGUscil7Zih0LGUscixnLHMpfSxoLmluaXQoZykpLG8ub24oXCJtb3VzZW1vdmVcIixmdW5jdGlvbigpe3ZhciB0PXIucHJvamVjdGlvbi5pbnZlcnQobi5tb3VzZSh0aGlzKSk7aWYoIXR8fGlzTmFOKHRbMF0pfHxpc05hTih0WzFdKSlyZXR1cm4gaC51bmhvdmVyKGEsbi5ldmVudCk7ci54YXhpcy5wMmM9ZnVuY3Rpb24oKXtyZXR1cm4gdFswXX0sci55YXhpcy5wMmM9ZnVuY3Rpb24oKXtyZXR1cm4gdFsxXX0sbC5ob3ZlcihhLG4uZXZlbnQsci5pZCl9KSxvLm9uKFwibW91c2VvdXRcIixmdW5jdGlvbigpe2EuX2RyYWdnaW5nfHxoLnVuaG92ZXIoYSxuLmV2ZW50KX0pLG8ub24oXCJjbGlja1wiLGZ1bmN0aW9uKCl7XCJzZWxlY3RcIiE9PXMmJlwibGFzc29cIiE9PXMmJihjLmluZGV4T2YoXCJzZWxlY3RcIik+LTEmJnAobi5ldmVudCxhLFtyLnhheGlzXSxbci55YXhpc10sci5pZCxnKSxjLmluZGV4T2YoXCJldmVudFwiKT4tMSYmbC5jbGljayhhLG4uZXZlbnQpKX0pfWZ1bmN0aW9uIHYodCl7cmV0dXJuIHIucHJvamVjdGlvbi5pbnZlcnQoW3RbMF0rci54YXhpcy5fb2Zmc2V0LHRbMV0rci55YXhpcy5fb2Zmc2V0XSl9fSx4Lm1ha2VGcmFtZXdvcms9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dC5ncmFwaERpdixyPWUuX2Z1bGxMYXlvdXQsaT1cImNsaXBcIityLl91aWQrdC5pZDt0LmNsaXBEZWY9ci5fY2xpcHMuYXBwZW5kKFwiY2xpcFBhdGhcIikuYXR0cihcImlkXCIsaSksdC5jbGlwUmVjdD10LmNsaXBEZWYuYXBwZW5kKFwicmVjdFwiKSx0LmZyYW1ld29yaz1uLnNlbGVjdCh0LmNvbnRhaW5lcikuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIixcImdlbyBcIit0LmlkKS5jYWxsKHMuc2V0Q2xpcFVybCxpLGUpLHQucHJvamVjdD1mdW5jdGlvbihlKXt2YXIgcj10LnByb2plY3Rpb24oZSk7cmV0dXJuIHI/W3JbMF0tdC54YXhpcy5fb2Zmc2V0LHJbMV0tdC55YXhpcy5fb2Zmc2V0XTpbbnVsbCxudWxsXX0sdC54YXhpcz17X2lkOlwieFwiLGMycDpmdW5jdGlvbihlKXtyZXR1cm4gdC5wcm9qZWN0KGUpWzBdfX0sdC55YXhpcz17X2lkOlwieVwiLGMycDpmdW5jdGlvbihlKXtyZXR1cm4gdC5wcm9qZWN0KGUpWzFdfX0sdC5tb2NrQXhpcz17dHlwZTpcImxpbmVhclwiLHNob3dleHBvbmVudDpcImFsbFwiLGV4cG9uZW50Zm9ybWF0OlwiQlwifSx1LnNldENvbnZlcnQodC5tb2NrQXhpcyxyKX0seC5zYXZlVmlld0luaXRpYWw9ZnVuY3Rpb24odCl7dmFyIGU9dC5jZW50ZXJ8fHt9LHI9dC5wcm9qZWN0aW9uLG49ci5yb3RhdGlvbnx8e307dC5faXNTY29wZWQ/dGhpcy52aWV3SW5pdGlhbD17XCJjZW50ZXIubG9uXCI6ZS5sb24sXCJjZW50ZXIubGF0XCI6ZS5sYXQsXCJwcm9qZWN0aW9uLnNjYWxlXCI6ci5zY2FsZX06dC5faXNDbGlwcGVkP3RoaXMudmlld0luaXRpYWw9e1wicHJvamVjdGlvbi5zY2FsZVwiOnIuc2NhbGUsXCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvblwiOm4ubG9uLFwicHJvamVjdGlvbi5yb3RhdGlvbi5sYXRcIjpuLmxhdH06dGhpcy52aWV3SW5pdGlhbD17XCJjZW50ZXIubG9uXCI6ZS5sb24sXCJjZW50ZXIubGF0XCI6ZS5sYXQsXCJwcm9qZWN0aW9uLnNjYWxlXCI6ci5zY2FsZSxcInByb2plY3Rpb24ucm90YXRpb24ubG9uXCI6bi5sb259fSx4LnJlbmRlcj1mdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5wcm9qZWN0aW9uLHI9ZS5nZXRQYXRoKCk7ZnVuY3Rpb24gbih0KXt2YXIgcj1lKHQubG9ubGF0KTtyZXR1cm4gcj9cInRyYW5zbGF0ZShcIityWzBdK1wiLFwiK3JbMV0rXCIpXCI6bnVsbH1mdW5jdGlvbiBpKHQpe3JldHVybiBlLmlzTG9uTGF0T3ZlckVkZ2VzKHQubG9ubGF0KT9cIm5vbmVcIjpudWxsfWZvcih0IGluIHRoaXMuYmFzZVBhdGhzKXRoaXMuYmFzZVBhdGhzW3RdLmF0dHIoXCJkXCIscik7Zm9yKHQgaW4gdGhpcy5kYXRhUGF0aHMpdGhpcy5kYXRhUGF0aHNbdF0uYXR0cihcImRcIixmdW5jdGlvbih0KXtyZXR1cm4gcih0Lmdlb2pzb24pfSk7Zm9yKHQgaW4gdGhpcy5kYXRhUG9pbnRzKXRoaXMuZGF0YVBvaW50c1t0XS5hdHRyKFwiZGlzcGxheVwiLGkpLmF0dHIoXCJ0cmFuc2Zvcm1cIixuKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50XCI6NTk2LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi90b3BvanNvbl91dGlsc1wiOjcyOCxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9jYXJ0ZXNpYW4vc2VsZWN0XCI6NzY2LFwiLi4vcGxvdHNcIjo4MTAsXCIuL2NvbnN0YW50c1wiOjc3NyxcIi4vcHJvamVjdGlvbnNcIjo3ODIsXCIuL3pvb21cIjo3ODMsZDM6MTU1LFwidG9wb2pzb24tY2xpZW50XCI6NTI1fV0sNzc5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCIpLmdldFN1YnBsb3RDYWxjRGF0YSxpPXQoXCIuLi8uLi9saWJcIikuY291bnRlclJlZ2V4LGE9dChcIi4vZ2VvXCIpLG89XCJnZW9cIixzPWkobyksbD17fTtsW29dPXt2YWxUeXBlOlwic3VicGxvdGlkXCIsZGZsdDpvLGVkaXRUeXBlOlwiY2FsY1wifSxlLmV4cG9ydHM9e2F0dHI6byxuYW1lOm8saWRSb290Om8saWRSZWdleDpzLGF0dHJSZWdleDpzLGF0dHJpYnV0ZXM6bCxsYXlvdXRBdHRyaWJ1dGVzOnQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoXCIuL2xheW91dF9kZWZhdWx0c1wiKSxwbG90OmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj10LmNhbGNkYXRhLGk9ZS5fc3VicGxvdHNbb107dm9pZCAwPT09d2luZG93LlBsb3RseUdlb0Fzc2V0cyYmKHdpbmRvdy5QbG90bHlHZW9Bc3NldHM9e3RvcG9qc29uOnt9fSk7Zm9yKHZhciBzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBsPWlbc10sYz1uKHIsbyxsKSx1PWVbbF0uX3N1YnBsb3Q7dXx8KHU9YSh7aWQ6bCxncmFwaERpdjp0LGNvbnRhaW5lcjplLl9nZW9sYXllci5ub2RlKCksdG9wb2pzb25VUkw6dC5fY29udGV4dC50b3BvanNvblVSTCxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdH0pLGVbbF0uX3N1YnBsb3Q9dSksdS5wbG90KGMsZSx0Ll9wcm9taXNlcyl9fSx1cGRhdGVGeDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzW29dLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9ZVtyW25dXTtpLl9zdWJwbG90LnVwZGF0ZUZ4KGUsaSl9fSxjbGVhbjpmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9bi5fc3VicGxvdHNbb118fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIHM9aVthXSxsPW5bc10uX3N1YnBsb3Q7IWVbc10mJmwmJihsLmZyYW1ld29yay5yZW1vdmUoKSxsLmNsaXBEZWYucmVtb3ZlKCkpfX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9nZXRfZGF0YVwiOjc4NCxcIi4vZ2VvXCI6Nzc4LFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjc4MCxcIi4vbGF5b3V0X2RlZmF1bHRzXCI6NzgxfV0sNzgwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi9kb21haW5cIikuYXR0cmlidXRlcyxhPXQoXCIuL2NvbnN0YW50c1wiKSxvPXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsLHM9e3JhbmdlOnt2YWxUeXBlOlwiaW5mb19hcnJheVwiLGl0ZW1zOlt7dmFsVHlwZTpcIm51bWJlclwifSx7dmFsVHlwZTpcIm51bWJlclwifV19LHNob3dncmlkOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LHRpY2swOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowfSxkdGljazp7dmFsVHlwZTpcIm51bWJlclwifSxncmlkY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6bi5saWdodExpbmV9LGdyaWR3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MX19OyhlLmV4cG9ydHM9byh7ZG9tYWluOmkoe25hbWU6XCJnZW9cIn0se30pLHJlc29sdXRpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOlsxMTAsNTBdLGRmbHQ6MTEwLGNvZXJjZU51bWJlcjohMH0sc2NvcGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOk9iamVjdC5rZXlzKGEuc2NvcGVEZWZhdWx0cyksZGZsdDpcIndvcmxkXCJ9LHByb2plY3Rpb246e3R5cGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOk9iamVjdC5rZXlzKGEucHJvak5hbWVzKX0scm90YXRpb246e2xvbjp7dmFsVHlwZTpcIm51bWJlclwifSxsYXQ6e3ZhbFR5cGU6XCJudW1iZXJcIn0scm9sbDp7dmFsVHlwZTpcIm51bWJlclwifX0scGFyYWxsZWxzOnt2YWxUeXBlOlwiaW5mb19hcnJheVwiLGl0ZW1zOlt7dmFsVHlwZTpcIm51bWJlclwifSx7dmFsVHlwZTpcIm51bWJlclwifV19LHNjYWxlOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxfX0sY2VudGVyOntsb246e3ZhbFR5cGU6XCJudW1iZXJcIn0sbGF0Ont2YWxUeXBlOlwibnVtYmVyXCJ9fSxzaG93Y29hc3RsaW5lczp7dmFsVHlwZTpcImJvb2xlYW5cIn0sY29hc3RsaW5lY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6bi5kZWZhdWx0TGluZX0sY29hc3RsaW5ld2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjF9LHNob3dsYW5kOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LGxhbmRjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDphLmxhbmRDb2xvcn0sc2hvd29jZWFuOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LG9jZWFuY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6YS53YXRlckNvbG9yfSxzaG93bGFrZXM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sbGFrZWNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmEud2F0ZXJDb2xvcn0sc2hvd3JpdmVyczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxyaXZlcmNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmEud2F0ZXJDb2xvcn0scml2ZXJ3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MX0sc2hvd2NvdW50cmllczp7dmFsVHlwZTpcImJvb2xlYW5cIn0sY291bnRyeWNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0Om4uZGVmYXVsdExpbmV9LGNvdW50cnl3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MX0sc2hvd3N1YnVuaXRzOnt2YWxUeXBlOlwiYm9vbGVhblwifSxzdWJ1bml0Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6bi5kZWZhdWx0TGluZX0sc3VidW5pdHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxfSxzaG93ZnJhbWU6e3ZhbFR5cGU6XCJib29sZWFuXCJ9LGZyYW1lY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6bi5kZWZhdWx0TGluZX0sZnJhbWV3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MX0sYmdjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDpuLmJhY2tncm91bmR9LGxvbmF4aXM6cyxsYXRheGlzOnN9LFwicGxvdFwiLFwiZnJvbS1yb290XCIpKS51aXJldmlzaW9uPXt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJub25lXCJ9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIjo1NzcsXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi4vZG9tYWluXCI6Nzc0LFwiLi9jb25zdGFudHNcIjo3Nzd9XSw3ODE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vc3VicGxvdF9kZWZhdWx0c1wiKSxpPXQoXCIuL2NvbnN0YW50c1wiKSxhPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLG89aS5heGVzTmFtZXM7ZnVuY3Rpb24gcyh0LGUscil7dmFyIG49cihcInJlc29sdXRpb25cIiksYT1yKFwic2NvcGVcIikscz1pLnNjb3BlRGVmYXVsdHNbYV0sbD1yKFwicHJvamVjdGlvbi50eXBlXCIscy5wcm9qVHlwZSksYz1lLl9pc0FsYmVyc1VzYT1cImFsYmVycyB1c2FcIj09PWw7YyYmKGE9ZS5zY29wZT1cInVzYVwiKTt2YXIgdT1lLl9pc1Njb3BlZD1cIndvcmxkXCIhPT1hLGg9ZS5faXNDb25pYz0tMSE9PWwuaW5kZXhPZihcImNvbmljXCIpO2UuX2lzQ2xpcHBlZD0hIWkubG9uYXhpc1NwYW5bbF07Zm9yKHZhciBmPTA7ZjxvLmxlbmd0aDtmKyspe3ZhciBwLGQ9b1tmXSxnPVszMCwxMF1bZl07aWYodSlwPXNbZCtcIlJhbmdlXCJdO2Vsc2V7dmFyIHY9aVtkK1wiU3BhblwiXSxtPSh2W2xdfHx2W1wiKlwiXSkvMix5PXIoXCJwcm9qZWN0aW9uLnJvdGF0aW9uLlwiK2Quc3Vic3RyKDAsMykscy5wcm9qUm90YXRlW2ZdKTtwPVt5LW0seSttXX1yKGQrXCIucmFuZ2VcIixwKSxyKGQrXCIudGljazBcIikscihkK1wiLmR0aWNrXCIsZykscihkK1wiLnNob3dncmlkXCIpJiYocihkK1wiLmdyaWRjb2xvclwiKSxyKGQrXCIuZ3JpZHdpZHRoXCIpKX12YXIgeD1lLmxvbmF4aXMucmFuZ2UsYj1lLmxhdGF4aXMucmFuZ2UsXz14WzBdLHc9eFsxXTtfPjAmJnc8MCYmKHcrPTM2MCk7dmFyIGssQSxULE09KF8rdykvMjtpZighYyl7dmFyIFM9dT9zLnByb2pSb3RhdGU6W00sMCwwXTtrPXIoXCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvblwiLFNbMF0pLHIoXCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxhdFwiLFNbMV0pLHIoXCJwcm9qZWN0aW9uLnJvdGF0aW9uLnJvbGxcIixTWzJdKSxyKFwic2hvd2NvYXN0bGluZXNcIiwhdSkmJihyKFwiY29hc3RsaW5lY29sb3JcIikscihcImNvYXN0bGluZXdpZHRoXCIpKSxyKFwic2hvd29jZWFuXCIpJiZyKFwib2NlYW5jb2xvclwiKX0oYz8oQT0tOTYuNixUPTM4LjcpOihBPXU/TTprLFQ9KGJbMF0rYlsxXSkvMikscihcImNlbnRlci5sb25cIixBKSxyKFwiY2VudGVyLmxhdFwiLFQpLGgpJiZyKFwicHJvamVjdGlvbi5wYXJhbGxlbHNcIixzLnByb2pQYXJhbGxlbHN8fFswLDYwXSk7cihcInByb2plY3Rpb24uc2NhbGVcIikscihcInNob3dsYW5kXCIpJiZyKFwibGFuZGNvbG9yXCIpLHIoXCJzaG93bGFrZXNcIikmJnIoXCJsYWtlY29sb3JcIikscihcInNob3dyaXZlcnNcIikmJihyKFwicml2ZXJjb2xvclwiKSxyKFwicml2ZXJ3aWR0aFwiKSkscihcInNob3djb3VudHJpZXNcIix1JiZcInVzYVwiIT09YSkmJihyKFwiY291bnRyeWNvbG9yXCIpLHIoXCJjb3VudHJ5d2lkdGhcIikpLChcInVzYVwiPT09YXx8XCJub3J0aCBhbWVyaWNhXCI9PT1hJiY1MD09PW4pJiYocihcInNob3dzdWJ1bml0c1wiLCEwKSxyKFwic3VidW5pdGNvbG9yXCIpLHIoXCJzdWJ1bml0d2lkdGhcIikpLHV8fHIoXCJzaG93ZnJhbWVcIiwhMCkmJihyKFwiZnJhbWVjb2xvclwiKSxyKFwiZnJhbWV3aWR0aFwiKSkscihcImJnY29sb3JcIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtuKHQsZSxyLHt0eXBlOlwiZ2VvXCIsYXR0cmlidXRlczphLGhhbmRsZURlZmF1bHRzOnMscGFydGl0aW9uOlwieVwifSl9fSx7XCIuLi9zdWJwbG90X2RlZmF1bHRzXCI6ODI0LFwiLi9jb25zdGFudHNcIjo3NzcsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6NzgwfV0sNzgyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlKXtyZXR1cm57dHlwZTpcIkZlYXR1cmVcIixpZDp0LmlkLHByb3BlcnRpZXM6dC5wcm9wZXJ0aWVzLGdlb21ldHJ5OnIodC5nZW9tZXRyeSxlKX19ZnVuY3Rpb24gcihlLG4pe2lmKCFlKXJldHVybiBudWxsO2lmKFwiR2VvbWV0cnlDb2xsZWN0aW9uXCI9PT1lLnR5cGUpcmV0dXJue3R5cGU6XCJHZW9tZXRyeUNvbGxlY3Rpb25cIixnZW9tZXRyaWVzOm9iamVjdC5nZW9tZXRyaWVzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gcih0LG4pfSl9O2lmKCFjLmhhc093blByb3BlcnR5KGUudHlwZSkpcmV0dXJuIG51bGw7dmFyIGk9Y1tlLnR5cGVdO3JldHVybiB0Lmdlby5zdHJlYW0oZSxuKGkpKSxpLnJlc3VsdCgpfXQuZ2VvLnByb2plY3Q9ZnVuY3Rpb24odCxlKXt2YXIgaT1lLnN0cmVhbTtpZighaSl0aHJvdyBuZXcgRXJyb3IoXCJub3QgeWV0IHN1cHBvcnRlZFwiKTtyZXR1cm4odCYmbi5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP25bdC50eXBlXTpyKSh0LGkpfTt2YXIgbj17RmVhdHVyZTplLEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKHQscil7cmV0dXJue3R5cGU6XCJGZWF0dXJlQ29sbGVjdGlvblwiLGZlYXR1cmVzOnQuZmVhdHVyZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlKHQscil9KX19fSxpPVtdLGE9W10sbz17cG9pbnQ6ZnVuY3Rpb24odCxlKXtpLnB1c2goW3QsZV0pfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1pLmxlbmd0aD9pLmxlbmd0aDwyP3t0eXBlOlwiUG9pbnRcIixjb29yZGluYXRlczppWzBdfTp7dHlwZTpcIk11bHRpUG9pbnRcIixjb29yZGluYXRlczppfTpudWxsO3JldHVybiBpPVtdLHR9fSxzPXtsaW5lU3RhcnQ6dSxwb2ludDpmdW5jdGlvbih0LGUpe2kucHVzaChbdCxlXSl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtpLmxlbmd0aCYmKGEucHVzaChpKSxpPVtdKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9YS5sZW5ndGg/YS5sZW5ndGg8Mj97dHlwZTpcIkxpbmVTdHJpbmdcIixjb29yZGluYXRlczphWzBdfTp7dHlwZTpcIk11bHRpTGluZVN0cmluZ1wiLGNvb3JkaW5hdGVzOmF9Om51bGw7cmV0dXJuIGE9W10sdH19LGw9e3BvbHlnb25TdGFydDp1LGxpbmVTdGFydDp1LHBvaW50OmZ1bmN0aW9uKHQsZSl7aS5wdXNoKFt0LGVdKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PWkubGVuZ3RoO2lmKHQpe2Rve2kucHVzaChpWzBdLnNsaWNlKCkpfXdoaWxlKCsrdDw0KTthLnB1c2goaSksaT1bXX19LHBvbHlnb25FbmQ6dSxyZXN1bHQ6ZnVuY3Rpb24oKXtpZighYS5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIHQ9W10sZT1bXTtyZXR1cm4gYS5mb3JFYWNoKGZ1bmN0aW9uKHIpeyFmdW5jdGlvbih0KXtpZigoZT10Lmxlbmd0aCk8NClyZXR1cm4hMTtmb3IodmFyIGUscj0wLG49dFtlLTFdWzFdKnRbMF1bMF0tdFtlLTFdWzBdKnRbMF1bMV07KytyPGU7KW4rPXRbci0xXVsxXSp0W3JdWzBdLXRbci0xXVswXSp0W3JdWzFdO3JldHVybiBuPD0wfShyKT9lLnB1c2gocik6dC5wdXNoKFtyXSl9KSxlLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHI9ZVswXTt0LnNvbWUoZnVuY3Rpb24odCl7aWYoZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZVswXSxuPWVbMV0saT0hMSxhPTAsbz10Lmxlbmd0aCxzPW8tMTthPG87cz1hKyspe3ZhciBsPXRbYV0sYz1sWzBdLHU9bFsxXSxoPXRbc10sZj1oWzBdLHA9aFsxXTt1Pm5ecD5uJiZyPChmLWMpKihuLXUpLyhwLXUpK2MmJihpPSFpKX1yZXR1cm4gaX0odFswXSxyKSlyZXR1cm4gdC5wdXNoKGUpLCEwfSl8fHQucHVzaChbZV0pfSksYT1bXSx0Lmxlbmd0aD90Lmxlbmd0aD4xP3t0eXBlOlwiTXVsdGlQb2x5Z29uXCIsY29vcmRpbmF0ZXM6dH06e3R5cGU6XCJQb2x5Z29uXCIsY29vcmRpbmF0ZXM6dFswXX06bnVsbH19LGM9e1BvaW50Om8sTXVsdGlQb2ludDpvLExpbmVTdHJpbmc6cyxNdWx0aUxpbmVTdHJpbmc6cyxQb2x5Z29uOmwsTXVsdGlQb2x5Z29uOmwsU3BoZXJlOmx9O2Z1bmN0aW9uIHUoKXt9dmFyIGg9MWUtNixmPWgqaCxwPU1hdGguUEksZD1wLzIsZz0oTWF0aC5zcXJ0KHApLHAvMTgwKSx2PTE4MC9wO2Z1bmN0aW9uIG0odCl7cmV0dXJuIHQ+MT9kOnQ8LTE/LWQ6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIHkodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/cDpNYXRoLmFjb3ModCl9dmFyIHg9dC5nZW8ucHJvamVjdGlvbixiPXQuZ2VvLnByb2plY3Rpb25NdXRhdG9yO2Z1bmN0aW9uIF8odCxlKXt2YXIgcj0oMitkKSpNYXRoLnNpbihlKTtlLz0yO2Zvcih2YXIgbj0wLGk9MS8wO248MTAmJk1hdGguYWJzKGkpPmg7bisrKXt2YXIgYT1NYXRoLmNvcyhlKTtlLT1pPShlK01hdGguc2luKGUpKihhKzIpLXIpLygyKmEqKDErYSkpfXJldHVyblsyL01hdGguc3FydChwKig0K3ApKSp0KigxK01hdGguY29zKGUpKSwyKk1hdGguc3FydChwLyg0K3ApKSpNYXRoLnNpbihlKV19dC5nZW8uaW50ZXJydXB0PWZ1bmN0aW9uKGUpe3ZhciByLG49W1tbWy1wLDBdLFswLGRdLFtwLDBdXV0sW1tbLXAsMF0sWzAsLWRdLFtwLDBdXV1dO2Z1bmN0aW9uIGkodCxyKXtmb3IodmFyIGk9cjwwPy0xOjEsYT1uWysocjwwKV0sbz0wLHM9YS5sZW5ndGgtMTtvPHMmJnQ+YVtvXVsyXVswXTsrK28pO3ZhciBsPWUodC1hW29dWzFdWzBdLHIpO3JldHVybiBsWzBdKz1lKGFbb11bMV1bMF0saSpyPmkqYVtvXVswXVsxXT9hW29dWzBdWzFdOnIpWzBdLGx9ZS5pbnZlcnQmJihpLmludmVydD1mdW5jdGlvbih0LGEpe2Zvcih2YXIgbz1yWysoYTwwKV0scz1uWysoYTwwKV0sYz0wLHU9by5sZW5ndGg7Yzx1OysrYyl7dmFyIGg9b1tjXTtpZihoWzBdWzBdPD10JiZ0PGhbMV1bMF0mJmhbMF1bMV08PWEmJmE8aFsxXVsxXSl7dmFyIGY9ZS5pbnZlcnQodC1lKHNbY11bMV1bMF0sMClbMF0sYSk7cmV0dXJuIGZbMF0rPXNbY11bMV1bMF0sbChpKGZbMF0sZlsxXSksW3QsYV0pP2Y6bnVsbH19fSk7dmFyIGE9dC5nZW8ucHJvamVjdGlvbihpKSxvPWEuc3RyZWFtO2Z1bmN0aW9uIHModCxlKXtmb3IodmFyIHIsbixpLGE9LTEsbz10Lmxlbmd0aCxzPXRbMF0sbD1bXTsrK2E8bzspe249KChyPXRbYV0pWzBdLXNbMF0pL2UsaT0oclsxXS1zWzFdKS9lO2Zvcih2YXIgYz0wO2M8ZTsrK2MpbC5wdXNoKFtzWzBdK2MqbixzWzFdK2MqaV0pO3M9cn1yZXR1cm4gbC5wdXNoKHIpLGx9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBNYXRoLmFicyh0WzBdLWVbMF0pPGgmJk1hdGguYWJzKHRbMV0tZVsxXSk8aH1yZXR1cm4gYS5zdHJlYW09ZnVuY3Rpb24oZSl7dmFyIHI9YS5yb3RhdGUoKSxpPW8oZSksbD0oYS5yb3RhdGUoWzAsMF0pLG8oZSkpO3JldHVybiBhLnJvdGF0ZShyKSxpLnNwaGVyZT1mdW5jdGlvbigpe3QuZ2VvLnN0cmVhbShmdW5jdGlvbigpe2Zvcih2YXIgZT0xZS02LHI9W10saT0wLGE9blswXS5sZW5ndGg7aTxhOysraSl7dmFyIG89blswXVtpXSxsPTE4MCpvWzBdWzBdL3AsYz0xODAqb1swXVsxXS9wLHU9MTgwKm9bMV1bMV0vcCxoPTE4MCpvWzJdWzBdL3AsZj0xODAqb1syXVsxXS9wO3IucHVzaChzKFtbbCtlLGMrZV0sW2wrZSx1LWVdLFtoLWUsdS1lXSxbaC1lLGYrZV1dLDMwKSl9Zm9yKHZhciBpPW5bMV0ubGVuZ3RoLTE7aT49MDstLWkpe3ZhciBvPW5bMV1baV0sbD0xODAqb1swXVswXS9wLGM9MTgwKm9bMF1bMV0vcCx1PTE4MCpvWzFdWzFdL3AsaD0xODAqb1syXVswXS9wLGY9MTgwKm9bMl1bMV0vcDtyLnB1c2gocyhbW2gtZSxmLWVdLFtoLWUsdStlXSxbbCtlLHUrZV0sW2wrZSxjLWVdXSwzMCkpfXJldHVybnt0eXBlOlwiUG9seWdvblwiLGNvb3JkaW5hdGVzOlt0Lm1lcmdlKHIpXX19KCksbCl9LGl9LGEubG9iZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybltbdFswXVswXSpwLzE4MCx0WzBdWzFdKnAvMTgwXSxbdFsxXVswXSpwLzE4MCx0WzFdWzFdKnAvMTgwXSxbdFsyXVswXSpwLzE4MCx0WzJdWzFdKnAvMTgwXV19KX0pLHI9bi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3ZhciByLG49ZSh0WzBdWzBdLHRbMF1bMV0pWzBdLGk9ZSh0WzJdWzBdLHRbMl1bMV0pWzBdLGE9ZSh0WzFdWzBdLHRbMF1bMV0pWzFdLG89ZSh0WzFdWzBdLHRbMV1bMV0pWzFdO3JldHVybiBhPm8mJihyPWEsYT1vLG89ciksW1tuLGFdLFtpLG9dXX0pfSksYSk6bi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybltbMTgwKnRbMF1bMF0vcCwxODAqdFswXVsxXS9wXSxbMTgwKnRbMV1bMF0vcCwxODAqdFsxXVsxXS9wXSxbMTgwKnRbMl1bMF0vcCwxODAqdFsyXVsxXS9wXV19KX0pfSxhfSxfLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPS41KmUqTWF0aC5zcXJ0KCg0K3ApL3ApLG49bShyKSxpPU1hdGguY29zKG4pO3JldHVyblt0LygyL01hdGguc3FydChwKig0K3ApKSooMStpKSksbSgobityKihpKzIpKS8oMitkKSldfSwodC5nZW8uZWNrZXJ0ND1mdW5jdGlvbigpe3JldHVybiB4KF8pfSkucmF3PV87dmFyIHc9dC5nZW8uYXppbXV0aGFsRXF1YWxBcmVhLnJhdztmdW5jdGlvbiBrKHQsZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyJiYoZT10KSwxPT09ZSlyZXR1cm4gdztpZihlPT09MS8wKXJldHVybiBBO2Z1bmN0aW9uIHIocixuKXt2YXIgaT13KHIvZSxuKTtyZXR1cm4gaVswXSo9dCxpfXJldHVybiByLmludmVydD1mdW5jdGlvbihyLG4pe3ZhciBpPXcuaW52ZXJ0KHIvdCxuKTtyZXR1cm4gaVswXSo9ZSxpfSxyfWZ1bmN0aW9uIEEodCxlKXtyZXR1cm5bdCpNYXRoLmNvcyhlKS9NYXRoLmNvcyhlLz0yKSwyKk1hdGguc2luKGUpXX1mdW5jdGlvbiBUKHQsZSl7cmV0dXJuWzMqdC8oMipwKSpNYXRoLnNxcnQocCpwLzMtZSplKSxlXX1mdW5jdGlvbiBNKHQsZSl7cmV0dXJuW3QsMS4yNSpNYXRoLmxvZyhNYXRoLnRhbihwLzQrLjQqZSkpXX1mdW5jdGlvbiBTKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcixuPXQqTWF0aC5zaW4oZSksaT0zMDtkb3tlLT1yPShlK01hdGguc2luKGUpLW4pLygxK01hdGguY29zKGUpKX13aGlsZShNYXRoLmFicyhyKT5oJiYtLWk+MCk7cmV0dXJuIGUvMn19QS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj0yKm0oZS8yKTtyZXR1cm5bdCpNYXRoLmNvcyhyLzIpL01hdGguY29zKHIpLHJdfSwodC5nZW8uaGFtbWVyPWZ1bmN0aW9uKCl7dmFyIHQ9MixlPWIoaykscj1lKHQpO3JldHVybiByLmNvZWZmaWNpZW50PWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UodD0rcik6dH0scn0pLnJhdz1rLFQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuWzIvMypwKnQvTWF0aC5zcXJ0KHAqcC8zLWUqZSksZV19LCh0Lmdlby5rYXZyYXlza2l5Nz1mdW5jdGlvbigpe3JldHVybiB4KFQpfSkucmF3PVQsTS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdCwyLjUqTWF0aC5hdGFuKE1hdGguZXhwKC44KmUpKS0uNjI1KnBdfSwodC5nZW8ubWlsbGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHgoTSl9KS5yYXc9TSxTKHApO3ZhciBFPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1TKHIpO2Z1bmN0aW9uIGkocixpKXtyZXR1cm5bdCpyKk1hdGguY29zKGk9bihpKSksZSpNYXRoLnNpbihpKV19cmV0dXJuIGkuaW52ZXJ0PWZ1bmN0aW9uKG4saSl7dmFyIGE9bShpL2UpO3JldHVybltuLyh0Kk1hdGguY29zKGEpKSxtKCgyKmErTWF0aC5zaW4oMiphKSkvcildfSxpfShNYXRoLlNRUlQyL2QsTWF0aC5TUVJUMixwKTtmdW5jdGlvbiBDKHQsZSl7dmFyIHI9ZSplLG49cipyO3JldHVyblt0KiguODcwNy0uMTMxOTc5KnIrbioobiooLjAwMzk3MSpyLS4wMDE1MjkqbiktLjAxMzc5MSkpLGUqKDEuMDA3MjI2K3IqKC4wMTUwODUrbiooLjAyODg3NCpyLS4wNDQ0NzUtLjAwNTkxNipuKSkpXX0odC5nZW8ubW9sbHdlaWRlPWZ1bmN0aW9uKCl7cmV0dXJuIHgoRSl9KS5yYXc9RSxDLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByLG49ZSxpPTI1O2Rve3ZhciBhPW4qbixvPWEqYTtuLT1yPShuKigxLjAwNzIyNithKiguMDE1MDg1K28qKC4wMjg4NzQqYS0uMDQ0NDc1LS4wMDU5MTYqbykpKS1lKS8oMS4wMDcyMjYrYSooLjA0NTI1NStvKiguMjU5ODY2KmEtLjMxMTMyNS0uMDA1OTE2KjExKm8pKSl9d2hpbGUoTWF0aC5hYnMocik+aCYmLS1pPjApO3JldHVyblt0LyguODcwNysoYT1uKm4pKihhKihhKmEqYSooLjAwMzk3MS0uMDAxNTI5KmEpLS4wMTM3OTEpLS4xMzE5NzkpKSxuXX0sKHQuZ2VvLm5hdHVyYWxFYXJ0aD1mdW5jdGlvbigpe3JldHVybiB4KEMpfSkucmF3PUM7dmFyIEw9W1suOTk4NiwtLjA2Ml0sWzEsMF0sWy45OTg2LC4wNjJdLFsuOTk1NCwuMTI0XSxbLjk5LC4xODZdLFsuOTgyMiwuMjQ4XSxbLjk3MywuMzFdLFsuOTYsLjM3Ml0sWy45NDI3LC40MzRdLFsuOTIxNiwuNDk1OF0sWy44OTYyLC41NTcxXSxbLjg2NzksLjYxNzZdLFsuODM1LC42NzY5XSxbLjc5ODYsLjczNDZdLFsuNzU5NywuNzkwM10sWy43MTg2LC44NDM1XSxbLjY3MzIsLjg5MzZdLFsuNjIxMywuOTM5NF0sWy41NzIyLC45NzYxXSxbLjUzMjIsMV1dO2Z1bmN0aW9uIHoodCxlKXt2YXIgcixuPU1hdGgubWluKDE4LDM2Kk1hdGguYWJzKGUpL3ApLGk9TWF0aC5mbG9vcihuKSxhPW4taSxvPShyPUxbaV0pWzBdLHM9clsxXSxsPShyPUxbKytpXSlbMF0sYz1yWzFdLHU9KHI9TFtNYXRoLm1pbigxOSwrK2kpXSlbMF0saD1yWzFdO3JldHVyblt0KihsK2EqKHUtbykvMithKmEqKHUtMipsK28pLzIpLChlPjA/ZDotZCkqKGMrYSooaC1zKS8yK2EqYSooaC0yKmMrcykvMildfWZ1bmN0aW9uIE8odCxlKXtyZXR1cm5bdCpNYXRoLmNvcyhlKSxlXX1mdW5jdGlvbiBJKHQsZSl7dmFyIHIsbj1NYXRoLmNvcyhlKSxpPShyPXkobipNYXRoLmNvcyh0Lz0yKSkpP3IvTWF0aC5zaW4ocik6MTtyZXR1cm5bMipuKk1hdGguc2luKHQpKmksTWF0aC5zaW4oZSkqaV19ZnVuY3Rpb24gRCh0LGUpe3ZhciByPUkodCxlKTtyZXR1cm5bKHJbMF0rdC9kKS8yLChyWzFdK2UpLzJdfUwuZm9yRWFjaChmdW5jdGlvbih0KXt0WzFdKj0xLjAxNDR9KSx6LmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWUvZCxuPTkwKnIsaT1NYXRoLm1pbigxOCxNYXRoLmFicyhuLzUpKSxhPU1hdGgubWF4KDAsTWF0aC5mbG9vcihpKSk7ZG97dmFyIG89TFthXVsxXSxzPUxbYSsxXVsxXSxsPUxbTWF0aC5taW4oMTksYSsyKV1bMV0sYz1sLW8sdT1sLTIqcytvLGg9MiooTWF0aC5hYnMociktcykvYyxwPXUvYyxtPWgqKDEtcCpoKigxLTIqcCpoKSk7aWYobT49MHx8MT09PWEpe249KGU+PTA/NTotNSkqKG0raSk7dmFyIHkseD01MDtkb3ttPShpPU1hdGgubWluKDE4LE1hdGguYWJzKG4pLzUpKS0oYT1NYXRoLmZsb29yKGkpKSxvPUxbYV1bMV0scz1MW2ErMV1bMV0sbD1MW01hdGgubWluKDE5LGErMildWzFdLG4tPSh5PShlPj0wP2Q6LWQpKihzK20qKGwtbykvMittKm0qKGwtMipzK28pLzIpLWUpKnZ9d2hpbGUoTWF0aC5hYnMoeSk+ZiYmLS14PjApO2JyZWFrfX13aGlsZSgtLWE+PTApO3ZhciBiPUxbYV1bMF0sXz1MW2ErMV1bMF0sdz1MW01hdGgubWluKDE5LGErMildWzBdO3JldHVyblt0LyhfK20qKHctYikvMittKm0qKHctMipfK2IpLzIpLG4qZ119LCh0Lmdlby5yb2JpbnNvbj1mdW5jdGlvbigpe3JldHVybiB4KHopfSkucmF3PXosTy5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdC9NYXRoLmNvcyhlKSxlXX0sKHQuZ2VvLnNpbnVzb2lkYWw9ZnVuY3Rpb24oKXtyZXR1cm4geChPKX0pLnJhdz1PLEkuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7aWYoISh0KnQrNCplKmU+cCpwK2gpKXt2YXIgcj10LG49ZSxpPTI1O2Rve3ZhciBhLG89TWF0aC5zaW4ocikscz1NYXRoLnNpbihyLzIpLGw9TWF0aC5jb3Moci8yKSxjPU1hdGguc2luKG4pLHU9TWF0aC5jb3MobiksZj1NYXRoLnNpbigyKm4pLGQ9YypjLGc9dSp1LHY9cypzLG09MS1nKmwqbCx4PW0/eSh1KmwpKk1hdGguc3FydChhPTEvbSk6YT0wLGI9Mip4KnUqcy10LF89eCpjLWUsdz1hKihnKnYreCp1KmwqZCksaz1hKiguNSpvKmYtMip4KmMqcyksQT0uMjUqYSooZipzLXgqYypnKm8pLFQ9YSooZCpsK3gqdip1KSxNPWsqQS1UKnc7aWYoIU0pYnJlYWs7dmFyIFM9KF8qay1iKlQpL00sRT0oYipBLV8qdykvTTtyLT1TLG4tPUV9d2hpbGUoKE1hdGguYWJzKFMpPmh8fE1hdGguYWJzKEUpPmgpJiYtLWk+MCk7cmV0dXJuW3Isbl19fSwodC5nZW8uYWl0b2ZmPWZ1bmN0aW9uKCl7cmV0dXJuIHgoSSl9KS5yYXc9SSxELmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPXQsbj1lLGk9MjU7ZG97dmFyIGEsbz1NYXRoLmNvcyhuKSxzPU1hdGguc2luKG4pLGw9TWF0aC5zaW4oMipuKSxjPXMqcyx1PW8qbyxmPU1hdGguc2luKHIpLHA9TWF0aC5jb3Moci8yKSxnPU1hdGguc2luKHIvMiksdj1nKmcsbT0xLXUqcCpwLHg9bT95KG8qcCkqTWF0aC5zcXJ0KGE9MS9tKTphPTAsYj0uNSooMip4Km8qZytyL2QpLXQsXz0uNSooeCpzK24pLWUsdz0uNSphKih1KnYreCpvKnAqYykrLjUvZCxrPWEqKGYqbC80LXgqcypnKSxBPS4xMjUqYSoobCpnLXgqcyp1KmYpLFQ9LjUqYSooYypwK3gqdipvKSsuNSxNPWsqQS1UKncsUz0oXyprLWIqVCkvTSxFPShiKkEtXyp3KS9NO3ItPVMsbi09RX13aGlsZSgoTWF0aC5hYnMoUyk+aHx8TWF0aC5hYnMoRSk+aCkmJi0taT4wKTtyZXR1cm5bcixuXX0sKHQuZ2VvLndpbmtlbDM9ZnVuY3Rpb24oKXtyZXR1cm4geChEKX0pLnJhdz1EfX0se31dLDc4MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vLi4vcmVnaXN0cnlcIiksbz1NYXRoLlBJLzE4MCxzPTE4MC9NYXRoLlBJLGw9e2N1cnNvcjpcInBvaW50ZXJcIn0sYz17Y3Vyc29yOlwiYXV0b1wifTtmdW5jdGlvbiB1KHQsZSl7cmV0dXJuIG4uYmVoYXZpb3Iuem9vbSgpLnRyYW5zbGF0ZShlLnRyYW5zbGF0ZSgpKS5zY2FsZShlLnNjYWxlKCkpfWZ1bmN0aW9uIGgodCxlLHIpe3ZhciBuPXQuaWQsbz10LmdyYXBoRGl2LHM9by5sYXlvdXQsbD1zW25dLGM9by5fZnVsbExheW91dCx1PWNbbl0saD17fSxmPXt9O2Z1bmN0aW9uIHAodCxlKXtoW24rXCIuXCIrdF09aS5uZXN0ZWRQcm9wZXJ0eShsLHQpLmdldCgpLGEuY2FsbChcIl9zdG9yZURpcmVjdEdVSUVkaXRcIixzLGMuX3ByZUdVSSxoKTt2YXIgcj1pLm5lc3RlZFByb3BlcnR5KHUsdCk7ci5nZXQoKSE9PWUmJihyLnNldChlKSxpLm5lc3RlZFByb3BlcnR5KGwsdCkuc2V0KGUpLGZbbitcIi5cIit0XT1lKX1yKHApLHAoXCJwcm9qZWN0aW9uLnNjYWxlXCIsZS5zY2FsZSgpL3QuZml0U2NhbGUpLG8uZW1pdChcInBsb3RseV9yZWxheW91dFwiLGYpfWZ1bmN0aW9uIGYodCxlKXt2YXIgcj11KDAsZSk7ZnVuY3Rpb24gaShyKXt2YXIgbj1lLmludmVydCh0Lm1pZFB0KTtyKFwiY2VudGVyLmxvblwiLG5bMF0pLHIoXCJjZW50ZXIubGF0XCIsblsxXSl9cmV0dXJuIHIub24oXCJ6b29tc3RhcnRcIixmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnN0eWxlKGwpfSkub24oXCJ6b29tXCIsZnVuY3Rpb24oKXtlLnNjYWxlKG4uZXZlbnQuc2NhbGUpLnRyYW5zbGF0ZShuLmV2ZW50LnRyYW5zbGF0ZSksdC5yZW5kZXIoKX0pLm9uKFwiem9vbWVuZFwiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUoYyksaCh0LGUsaSl9KSxyfWZ1bmN0aW9uIHAodCxlKXt2YXIgcixpLGEsbyxzLGYscCxkLGcsdj11KDAsZSksbT0yO2Z1bmN0aW9uIHkodCl7cmV0dXJuIGUuaW52ZXJ0KHQpfWZ1bmN0aW9uIHgocil7dmFyIG49ZS5yb3RhdGUoKSxpPWUuaW52ZXJ0KHQubWlkUHQpO3IoXCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvblwiLC1uWzBdKSxyKFwiY2VudGVyLmxvblwiLGlbMF0pLHIoXCJjZW50ZXIubGF0XCIsaVsxXSl9cmV0dXJuIHYub24oXCJ6b29tc3RhcnRcIixmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnN0eWxlKGwpLHI9bi5tb3VzZSh0aGlzKSxpPWUucm90YXRlKCksYT1lLnRyYW5zbGF0ZSgpLG89aSxzPXkocil9KS5vbihcInpvb21cIixmdW5jdGlvbigpe2lmKGY9bi5tb3VzZSh0aGlzKSxmdW5jdGlvbih0KXt2YXIgcj15KHQpO2lmKCFyKXJldHVybiEwO3ZhciBuPWUocik7cmV0dXJuIE1hdGguYWJzKG5bMF0tdFswXSk+bXx8TWF0aC5hYnMoblsxXS10WzFdKT5tfShyKSlyZXR1cm4gdi5zY2FsZShlLnNjYWxlKCkpLHZvaWQgdi50cmFuc2xhdGUoZS50cmFuc2xhdGUoKSk7ZS5zY2FsZShuLmV2ZW50LnNjYWxlKSxlLnRyYW5zbGF0ZShbYVswXSxuLmV2ZW50LnRyYW5zbGF0ZVsxXV0pLHM/eShmKSYmKGQ9eShmKSxwPVtvWzBdKyhkWzBdLXNbMF0pLGlbMV0saVsyXV0sZS5yb3RhdGUocCksbz1wKTpzPXkocj1mKSxnPSEwLHQucmVuZGVyKCl9KS5vbihcInpvb21lbmRcIixmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnN0eWxlKGMpLGcmJmgodCxlLHgpfSksdn1mdW5jdGlvbiBkKHQsZSl7dmFyIHIsaT17cjplLnJvdGF0ZSgpLGs6ZS5zY2FsZSgpfSxhPXUoMCxlKSxmPWZ1bmN0aW9uKHQpe3ZhciBlPTAscj1hcmd1bWVudHMubGVuZ3RoLGk9W107Zm9yKDsrK2U8cjspaS5wdXNoKGFyZ3VtZW50c1tlXSk7dmFyIGE9bi5kaXNwYXRjaC5hcHBseShudWxsLGkpO3JldHVybiBhLm9mPWZ1bmN0aW9uKGUscil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBvO3RyeXtvPWkuc291cmNlRXZlbnQ9bi5ldmVudCxpLnRhcmdldD10LG4uZXZlbnQ9aSxhW2kudHlwZV0uYXBwbHkoZSxyKX1maW5hbGx5e24uZXZlbnQ9b319fSxhfShhLFwiem9vbXN0YXJ0XCIsXCJ6b29tXCIsXCJ6b29tZW5kXCIpLHA9MCxkPWEub247ZnVuY3Rpb24gbSh0KXt2YXIgcj1lLnJvdGF0ZSgpO3QoXCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvblwiLC1yWzBdKSx0KFwicHJvamVjdGlvbi5yb3RhdGlvbi5sYXRcIiwtclsxXSl9cmV0dXJuIGEub24oXCJ6b29tc3RhcnRcIixmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnN0eWxlKGwpO3ZhciB0LGMsdSxoLG0sYixfLHcsayxBLFQsTT1uLm1vdXNlKHRoaXMpLFM9ZS5yb3RhdGUoKSxFPVMsQz1lLnRyYW5zbGF0ZSgpLEw9KGM9LjUqKHQ9UylbMF0qbyx1PS41KnRbMV0qbyxoPS41KnRbMl0qbyxtPU1hdGguc2luKGMpLGI9TWF0aC5jb3MoYyksXz1NYXRoLnNpbih1KSx3PU1hdGguY29zKHUpLGs9TWF0aC5zaW4oaCksQT1NYXRoLmNvcyhoKSxbYip3KkErbSpfKmssbSp3KkEtYipfKmssYipfKkErbSp3KmssYip3KmstbSpfKkFdKTtyPWcoZSxNKSxkLmNhbGwoYSxcInpvb21cIixmdW5jdGlvbigpe3ZhciB0LGEsbyxsLGMsdSxoLHAsZCxtLGI9bi5tb3VzZSh0aGlzKTtpZihlLnNjYWxlKGkuaz1uLmV2ZW50LnNjYWxlKSxyKXtpZihnKGUsYikpe2Uucm90YXRlKFMpLnRyYW5zbGF0ZShDKTt2YXIgXz1nKGUsYiksdz1mdW5jdGlvbih0LGUpe2lmKCF0fHwhZSlyZXR1cm47dmFyIHI9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdFsxXSplWzJdLXRbMl0qZVsxXSx0WzJdKmVbMF0tdFswXSplWzJdLHRbMF0qZVsxXS10WzFdKmVbMF1dfSh0LGUpLG49TWF0aC5zcXJ0KHgocixyKSksaT0uNSpNYXRoLmFjb3MoTWF0aC5tYXgoLTEsTWF0aC5taW4oMSx4KHQsZSkpKSksYT1NYXRoLnNpbihpKS9uO3JldHVybiBuJiZbTWF0aC5jb3MoaSksclsyXSphLC1yWzFdKmEsclswXSphXX0ocixfKSxrPWZ1bmN0aW9uKHQpe3JldHVybltNYXRoLmF0YW4yKDIqKHRbMF0qdFsxXSt0WzJdKnRbM10pLDEtMioodFsxXSp0WzFdK3RbMl0qdFsyXSkpKnMsTWF0aC5hc2luKE1hdGgubWF4KC0xLE1hdGgubWluKDEsMioodFswXSp0WzJdLXRbM10qdFsxXSkpKSkqcyxNYXRoLmF0YW4yKDIqKHRbMF0qdFszXSt0WzFdKnRbMl0pLDEtMioodFsyXSp0WzJdK3RbM10qdFszXSkpKnNdfSgoYT13LG89KHQ9TClbMF0sbD10WzFdLGM9dFsyXSx1PXRbM10saD1hWzBdLHA9YVsxXSxkPWFbMl0sbT1hWzNdLFtvKmgtbCpwLWMqZC11Km0sbypwK2wqaCtjKm0tdSpkLG8qZC1sKm0rYypoK3UqcCxvKm0rbCpkLWMqcCt1KmhdKSksQT1pLnI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXkoZSwyLHRbMF0pO249eShuLDEsdFsxXSksbj15KG4sMCx0WzJdLXJbMl0pO3ZhciBpLGEsbz1lWzBdLGw9ZVsxXSxjPWVbMl0sdT1uWzBdLGg9blsxXSxmPW5bMl0scD1NYXRoLmF0YW4yKGwsbykqcyxkPU1hdGguc3FydChvKm8rbCpsKTtNYXRoLmFicyhoKT5kPyhhPShoPjA/OTA6LTkwKS1wLGk9MCk6KGE9TWF0aC5hc2luKGgvZCkqcy1wLGk9TWF0aC5zcXJ0KGQqZC1oKmgpKTt2YXIgZz0xODAtYS0yKnAsbT0oTWF0aC5hdGFuMihmLHUpLU1hdGguYXRhbjIoYyxpKSkqcyx4PShNYXRoLmF0YW4yKGYsdSktTWF0aC5hdGFuMihjLC1pKSkqcyxiPXYoclswXSxyWzFdLGEsbSksXz12KHJbMF0sclsxXSxnLHgpO3JldHVybiBiPD1fP1thLG0sclsyXV06W2cseCxyWzJdXX0oayxyLEUpO2lzRmluaXRlKEFbMF0pJiZpc0Zpbml0ZShBWzFdKSYmaXNGaW5pdGUoQVsyXSl8fChBPUUpLGUucm90YXRlKEEpLEU9QX19ZWxzZSByPWcoZSxNPWIpO2Yub2YodGhpcyxhcmd1bWVudHMpKHt0eXBlOlwiem9vbVwifSl9KSxUPWYub2YodGhpcyxhcmd1bWVudHMpLHArK3x8VCh7dHlwZTpcInpvb21zdGFydFwifSl9KS5vbihcInpvb21lbmRcIixmdW5jdGlvbigpe3ZhciByO24uc2VsZWN0KHRoaXMpLnN0eWxlKGMpLGQuY2FsbChhLFwiem9vbVwiLG51bGwpLHI9Zi5vZih0aGlzLGFyZ3VtZW50cyksLS1wfHxyKHt0eXBlOlwiem9vbWVuZFwifSksaCh0LGUsbSl9KS5vbihcInpvb20ucmVkcmF3XCIsZnVuY3Rpb24oKXt0LnJlbmRlcigpfSksbi5yZWJpbmQoYSxmLFwib25cIil9ZnVuY3Rpb24gZyh0LGUpe3ZhciByPXQuaW52ZXJ0KGUpO3JldHVybiByJiZpc0Zpbml0ZShyWzBdKSYmaXNGaW5pdGUoclsxXSkmJmZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0qbyxyPXRbMV0qbyxuPU1hdGguY29zKHIpO3JldHVybltuKk1hdGguY29zKGUpLG4qTWF0aC5zaW4oZSksTWF0aC5zaW4ocildfShyKX1mdW5jdGlvbiB2KHQsZSxyLG4pe3ZhciBpPW0oci10KSxhPW0obi1lKTtyZXR1cm4gTWF0aC5zcXJ0KGkqaSthKmEpfWZ1bmN0aW9uIG0odCl7cmV0dXJuKHQlMzYwKzU0MCklMzYwLTE4MH1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj1yKm8saT10LnNsaWNlKCksYT0wPT09ZT8xOjAscz0yPT09ZT8xOjIsbD1NYXRoLmNvcyhuKSxjPU1hdGguc2luKG4pO3JldHVybiBpW2FdPXRbYV0qbC10W3NdKmMsaVtzXT10W3NdKmwrdFthXSpjLGl9ZnVuY3Rpb24geCh0LGUpe2Zvcih2YXIgcj0wLG49MCxpPXQubGVuZ3RoO248aTsrK24pcis9dFtuXSplW25dO3JldHVybiByfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQucHJvamVjdGlvbjtyZXR1cm4oZS5faXNTY29wZWQ/ZjplLl9pc0NsaXBwZWQ/ZDpwKSh0LHIpfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksZDM6MTU1fV0sNzg0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4vY2FydGVzaWFuL2NvbnN0YW50c1wiKS5TVUJQTE9UX1BBVFRFUk47ci5nZXRTdWJwbG90Q2FsY0RhdGE9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPW4uc3VicGxvdHNSZWdpc3RyeVtlXTtpZighaSlyZXR1cm5bXTtmb3IodmFyIGE9aS5hdHRyLG89W10scz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbD10W3NdO2xbMF0udHJhY2VbYV09PT1yJiZvLnB1c2gobCl9cmV0dXJuIG99LHIuZ2V0TW9kdWxlQ2FsY0RhdGE9ZnVuY3Rpb24odCxlKXt2YXIgcixpPVtdLGE9W107aWYoIShyPVwic3RyaW5nXCI9PXR5cGVvZiBlP24uZ2V0TW9kdWxlKGUpLnBsb3Q6XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOmUucGxvdCkpcmV0dXJuW2ksdF07Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb10sbD1zWzBdLnRyYWNlOyEwPT09bC52aXNpYmxlJiYobC5fbW9kdWxlLnBsb3Q9PT1yP2kucHVzaChzKTphLnB1c2gocykpfXJldHVybltpLGFdfSxyLmdldFN1YnBsb3REYXRhPWZ1bmN0aW9uKHQsZSxyKXtpZighbi5zdWJwbG90c1JlZ2lzdHJ5W2VdKXJldHVybltdO3ZhciBhLG8scyxsPW4uc3VicGxvdHNSZWdpc3RyeVtlXS5hdHRyLGM9W107aWYoXCJnbDJkXCI9PT1lKXt2YXIgdT1yLm1hdGNoKGkpO289XCJ4XCIrdVsxXSxzPVwieVwiK3VbMl19Zm9yKHZhciBoPTA7aDx0Lmxlbmd0aDtoKyspYT10W2hdLFwiZ2wyZFwiPT09ZSYmbi50cmFjZUlzKGEsXCJnbDJkXCIpP2FbbFswXV09PT1vJiZhW2xbMV1dPT09cyYmYy5wdXNoKGEpOmFbbF09PT1yJiZjLnB1c2goYSk7cmV0dXJuIGN9fSx7XCIuLi9yZWdpc3RyeVwiOjgyOSxcIi4vY2FydGVzaWFuL2NvbnN0YW50c1wiOjc1NX1dLDc4NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJtb3VzZS1jaGFuZ2VcIiksaT10KFwibW91c2Utd2hlZWxcIiksYT10KFwibW91c2UtZXZlbnQtb2Zmc2V0XCIpLG89dChcIi4uL2NhcnRlc2lhbi9jb25zdGFudHNcIikscz10KFwiaGFzLXBhc3NpdmUtZXZlbnRzXCIpO2Z1bmN0aW9uIGwodCxlKXt0aGlzLmVsZW1lbnQ9dCx0aGlzLnBsb3Q9ZSx0aGlzLm1vdXNlTGlzdGVuZXI9bnVsbCx0aGlzLndoZWVsTGlzdGVuZXI9bnVsbCx0aGlzLmxhc3RJbnB1dFRpbWU9RGF0ZS5ub3coKSx0aGlzLmxhc3RQb3M9WzAsMF0sdGhpcy5ib3hFbmFibGVkPSExLHRoaXMuYm94SW5pdGVkPSExLHRoaXMuYm94U3RhcnQ9WzAsMF0sdGhpcy5ib3hFbmQ9WzAsMF0sdGhpcy5kcmFnU3RhcnQ9WzAsMF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubW91c2VDb250YWluZXIscj10LmdscGxvdCxjPW5ldyBsKGUscik7ZnVuY3Rpb24gdSgpe3QueGF4aXMuYXV0b3JhbmdlPSExLHQueWF4aXMuYXV0b3JhbmdlPSExfWZ1bmN0aW9uIGgoZSxuLGkpe3ZhciBhLHMsbD10LmNhbGNEYXRhQm94KCksaD1yLnZpZXdCb3gsZj1jLmxhc3RQb3NbMF0scD1jLmxhc3RQb3NbMV0sZD1vLk1JTkRSQUcqci5waXhlbFJhdGlvLGc9by5NSU5aT09NKnIucGl4ZWxSYXRpbztmdW5jdGlvbiB2KGUscixuKXt2YXIgaT1NYXRoLm1pbihyLG4pLGE9TWF0aC5tYXgocixuKTtpIT09YT8obFtlXT1pLGxbZSsyXT1hLGMuZGF0YUJveD1sLHQuc2V0UmFuZ2VzKGwpKToodC5zZWxlY3RCb3guc2VsZWN0Qm94PVswLDAsMSwxXSx0LmdscGxvdC5zZXREaXJ0eSgpKX1zd2l0Y2gobio9ci5waXhlbFJhdGlvLGkqPXIucGl4ZWxSYXRpbyxpPWhbM10taFsxXS1pLHQuZnVsbExheW91dC5kcmFnbW9kZSl7Y2FzZVwiem9vbVwiOmlmKGUpe3ZhciBtPW4vKGhbMl0taFswXSkqKGxbMl0tbFswXSkrbFswXSx5PWkvKGhbM10taFsxXSkqKGxbM10tbFsxXSkrbFsxXTtjLmJveEluaXRlZHx8KGMuYm94U3RhcnRbMF09bSxjLmJveFN0YXJ0WzFdPXksYy5kcmFnU3RhcnRbMF09bixjLmRyYWdTdGFydFsxXT1pKSxjLmJveEVuZFswXT1tLGMuYm94RW5kWzFdPXksYy5ib3hJbml0ZWQ9ITAsYy5ib3hFbmFibGVkfHxjLmJveFN0YXJ0WzBdPT09Yy5ib3hFbmRbMF0mJmMuYm94U3RhcnRbMV09PT1jLmJveEVuZFsxXXx8KGMuYm94RW5hYmxlZD0hMCk7dmFyIHg9TWF0aC5hYnMoYy5kcmFnU3RhcnRbMF0tbik8ZyxiPU1hdGguYWJzKGMuZHJhZ1N0YXJ0WzFdLWkpPGc7aWYoIWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXQuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQuX2F4aXNDb25zdHJhaW50R3JvdXBzLHI9dC54YXhpcy5faWQsbj10LnlheGlzLl9pZCxpPTA7aTxlLmxlbmd0aDtpKyspaWYoLTEhPT1lW2ldW3JdKXtpZigtMSE9PWVbaV1bbl0pcmV0dXJuITA7YnJlYWt9cmV0dXJuITF9KCl8fHgmJmIpeCYmKGMuYm94RW5kWzBdPWMuYm94U3RhcnRbMF0pLGImJihjLmJveEVuZFsxXT1jLmJveFN0YXJ0WzFdKTtlbHNle2E9Yy5ib3hFbmRbMF0tYy5ib3hTdGFydFswXSxzPWMuYm94RW5kWzFdLWMuYm94U3RhcnRbMV07dmFyIF89KGxbM10tbFsxXSkvKGxbMl0tbFswXSk7TWF0aC5hYnMoYSpfKT5NYXRoLmFicyhzKT8oYy5ib3hFbmRbMV09Yy5ib3hTdGFydFsxXStNYXRoLmFicyhhKSpfKihzPj0wPzE6LTEpLGMuYm94RW5kWzFdPGxbMV0/KGMuYm94RW5kWzFdPWxbMV0sYy5ib3hFbmRbMF09Yy5ib3hTdGFydFswXSsobFsxXS1jLmJveFN0YXJ0WzFdKS9NYXRoLmFicyhfKSk6Yy5ib3hFbmRbMV0+bFszXSYmKGMuYm94RW5kWzFdPWxbM10sYy5ib3hFbmRbMF09Yy5ib3hTdGFydFswXSsobFszXS1jLmJveFN0YXJ0WzFdKS9NYXRoLmFicyhfKSkpOihjLmJveEVuZFswXT1jLmJveFN0YXJ0WzBdK01hdGguYWJzKHMpL18qKGE+PTA/MTotMSksYy5ib3hFbmRbMF08bFswXT8oYy5ib3hFbmRbMF09bFswXSxjLmJveEVuZFsxXT1jLmJveFN0YXJ0WzFdKyhsWzBdLWMuYm94U3RhcnRbMF0pKk1hdGguYWJzKF8pKTpjLmJveEVuZFswXT5sWzJdJiYoYy5ib3hFbmRbMF09bFsyXSxjLmJveEVuZFsxXT1jLmJveFN0YXJ0WzFdKyhsWzJdLWMuYm94U3RhcnRbMF0pKk1hdGguYWJzKF8pKSl9fWVsc2UgYy5ib3hFbmFibGVkPyhhPWMuYm94U3RhcnRbMF0hPT1jLmJveEVuZFswXSxzPWMuYm94U3RhcnRbMV0hPT1jLmJveEVuZFsxXSxhfHxzPyhhJiYodigwLGMuYm94U3RhcnRbMF0sYy5ib3hFbmRbMF0pLHQueGF4aXMuYXV0b3JhbmdlPSExKSxzJiYodigxLGMuYm94U3RhcnRbMV0sYy5ib3hFbmRbMV0pLHQueWF4aXMuYXV0b3JhbmdlPSExKSx0LnJlbGF5b3V0Q2FsbGJhY2soKSk6dC5nbHBsb3Quc2V0RGlydHkoKSxjLmJveEVuYWJsZWQ9ITEsYy5ib3hJbml0ZWQ9ITEpOmMuYm94SW5pdGVkJiYoYy5ib3hJbml0ZWQ9ITEpO2JyZWFrO2Nhc2VcInBhblwiOmMuYm94RW5hYmxlZD0hMSxjLmJveEluaXRlZD0hMSxlPyhjLnBhbm5pbmd8fChjLmRyYWdTdGFydFswXT1uLGMuZHJhZ1N0YXJ0WzFdPWkpLE1hdGguYWJzKGMuZHJhZ1N0YXJ0WzBdLW4pPGQmJihuPWMuZHJhZ1N0YXJ0WzBdKSxNYXRoLmFicyhjLmRyYWdTdGFydFsxXS1pKTxkJiYoaT1jLmRyYWdTdGFydFsxXSksYT0oZi1uKSoobFsyXS1sWzBdKS8oci52aWV3Qm94WzJdLXIudmlld0JveFswXSkscz0ocC1pKSoobFszXS1sWzFdKS8oci52aWV3Qm94WzNdLXIudmlld0JveFsxXSksbFswXSs9YSxsWzJdKz1hLGxbMV0rPXMsbFszXSs9cyx0LnNldFJhbmdlcyhsKSxjLnBhbm5pbmc9ITAsYy5sYXN0SW5wdXRUaW1lPURhdGUubm93KCksdSgpLHQuY2FtZXJhQ2hhbmdlZCgpLHQuaGFuZGxlQW5ub3RhdGlvbnMoKSk6Yy5wYW5uaW5nJiYoYy5wYW5uaW5nPSExLHQucmVsYXlvdXRDYWxsYmFjaygpKX1jLmxhc3RQb3NbMF09bixjLmxhc3RQb3NbMV09aX1yZXR1cm4gYy5tb3VzZUxpc3RlbmVyPW4oZSxoKSxlLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsZnVuY3Rpb24odCl7dmFyIHI9YSh0LmNoYW5nZWRUb3VjaGVzWzBdLGUpO2goMCxyWzBdLHJbMV0pLGgoMSxyWzBdLHJbMV0pLHQucHJldmVudERlZmF1bHQoKX0sISFzJiZ7cGFzc2l2ZTohMX0pLGUuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKTt2YXIgcj1hKHQuY2hhbmdlZFRvdWNoZXNbMF0sZSk7aCgxLHJbMF0sclsxXSksdC5wcmV2ZW50RGVmYXVsdCgpfSwhIXMmJntwYXNzaXZlOiExfSksZS5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIixmdW5jdGlvbih0KXtoKDAsYy5sYXN0UG9zWzBdLGMubGFzdFBvc1sxXSksdC5wcmV2ZW50RGVmYXVsdCgpfSwhIXMmJntwYXNzaXZlOiExfSksYy53aGVlbExpc3RlbmVyPWkoZSxmdW5jdGlvbihlLG4pe2lmKCF0LnNjcm9sbFpvb20pcmV0dXJuITE7dmFyIGk9dC5jYWxjRGF0YUJveCgpLGE9ci52aWV3Qm94LG89Yy5sYXN0UG9zWzBdLHM9Yy5sYXN0UG9zWzFdLGw9TWF0aC5leHAoNSpuLyhhWzNdLWFbMV0pKSxoPW8vKGFbMl0tYVswXSkqKGlbMl0taVswXSkraVswXSxmPXMvKGFbM10tYVsxXSkqKGlbM10taVsxXSkraVsxXTtyZXR1cm4gaVswXT0oaVswXS1oKSpsK2gsaVsyXT0oaVsyXS1oKSpsK2gsaVsxXT0oaVsxXS1mKSpsK2YsaVszXT0oaVszXS1mKSpsK2YsdC5zZXRSYW5nZXMoaSksYy5sYXN0SW5wdXRUaW1lPURhdGUubm93KCksdSgpLHQuY2FtZXJhQ2hhbmdlZCgpLHQuaGFuZGxlQW5ub3RhdGlvbnMoKSx0LnJlbGF5b3V0Q2FsbGJhY2soKSwhMH0sITApLGN9fSx7XCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzXCI6NzU1LFwiaGFzLXBhc3NpdmUtZXZlbnRzXCI6NDA0LFwibW91c2UtY2hhbmdlXCI6NDI4LFwibW91c2UtZXZlbnQtb2Zmc2V0XCI6NDI5LFwibW91c2Utd2hlZWxcIjo0MzF9XSw3ODY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vY2FydGVzaWFuL2F4ZXNcIiksaT10KFwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiKTtmdW5jdGlvbiBhKHQpe3RoaXMuc2NlbmU9dCx0aGlzLmdsPXQuZ2wsdGhpcy5waXhlbFJhdGlvPXQucGl4ZWxSYXRpbyx0aGlzLnNjcmVlbkJveD1bMCwwLDEsMV0sdGhpcy52aWV3Qm94PVswLDAsMSwxXSx0aGlzLmRhdGFCb3g9Wy0xLC0xLDEsMV0sdGhpcy5ib3JkZXJMaW5lRW5hYmxlPVshMSwhMSwhMSwhMV0sdGhpcy5ib3JkZXJMaW5lV2lkdGg9WzEsMSwxLDFdLHRoaXMuYm9yZGVyTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja3M9W1tdLFtdXSx0aGlzLnRpY2tFbmFibGU9WyEwLCEwLCExLCExXSx0aGlzLnRpY2tQYWQ9WzE1LDE1LDE1LDE1XSx0aGlzLnRpY2tBbmdsZT1bMCwwLDAsMF0sdGhpcy50aWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aWNrTWFya0xlbmd0aD1bMCwwLDAsMF0sdGhpcy50aWNrTWFya1dpZHRoPVswLDAsMCwwXSx0aGlzLnRpY2tNYXJrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5sYWJlbHM9W1wieFwiLFwieVwiXSx0aGlzLmxhYmVsRW5hYmxlPVshMCwhMCwhMSwhMV0sdGhpcy5sYWJlbEFuZ2xlPVswLE1hdGguUEkvMiwwLDMqTWF0aC5QSS8yXSx0aGlzLmxhYmVsUGFkPVsxNSwxNSwxNSwxNV0sdGhpcy5sYWJlbFNpemU9WzEyLDEyXSx0aGlzLmxhYmVsRm9udD1bXCJzYW5zLXNlcmlmXCIsXCJzYW5zLXNlcmlmXCJdLHRoaXMubGFiZWxDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpdGxlPVwiXCIsdGhpcy50aXRsZUVuYWJsZT0hMCx0aGlzLnRpdGxlQ2VudGVyPVswLDAsMCwwXSx0aGlzLnRpdGxlQW5nbGU9MCx0aGlzLnRpdGxlQ29sb3I9WzAsMCwwLDFdLHRoaXMudGl0bGVGb250PVwic2Fucy1zZXJpZlwiLHRoaXMudGl0bGVTaXplPTE4LHRoaXMuZ3JpZExpbmVFbmFibGU9WyEwLCEwXSx0aGlzLmdyaWRMaW5lQ29sb3I9W1swLDAsMCwuNV0sWzAsMCwwLC41XV0sdGhpcy5ncmlkTGluZVdpZHRoPVsxLDFdLHRoaXMuemVyb0xpbmVFbmFibGU9WyEwLCEwXSx0aGlzLnplcm9MaW5lV2lkdGg9WzEsMV0sdGhpcy56ZXJvTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmJvcmRlckNvbG9yPVswLDAsMCwwXSx0aGlzLmJhY2tncm91bmRDb2xvcj1bMCwwLDAsMF0sdGhpcy5zdGF0aWM9dGhpcy5zY2VuZS5zdGF0aWNQbG90fXZhciBvPWEucHJvdG90eXBlLHM9W1wieGF4aXNcIixcInlheGlzXCJdO28ubWVyZ2U9ZnVuY3Rpb24odCl7dmFyIGUscixuLGEsbyxsLGMsdSxoLGYscDtmb3IodGhpcy50aXRsZUVuYWJsZT0hMSx0aGlzLmJhY2tncm91bmRDb2xvcj1pKHQucGxvdF9iZ2NvbG9yKSxmPTA7ZjwyOysrZil7dmFyIGQ9KGU9c1tmXSkuY2hhckF0KDApO2ZvcihuPShyPXRbdGhpcy5zY2VuZVtlXS5fbmFtZV0pLnRpdGxlLnRleHQ9PT10aGlzLnNjZW5lLmZ1bGxMYXlvdXQuX2RmbHRUaXRsZVtkXT9cIlwiOnIudGl0bGUudGV4dCxwPTA7cDw9MjtwKz0yKXRoaXMubGFiZWxFbmFibGVbZitwXT0hMSx0aGlzLmxhYmVsc1tmK3BdPW4sdGhpcy5sYWJlbENvbG9yW2YrcF09aShyLnRpdGxlLmZvbnQuY29sb3IpLHRoaXMubGFiZWxGb250W2YrcF09ci50aXRsZS5mb250LmZhbWlseSx0aGlzLmxhYmVsU2l6ZVtmK3BdPXIudGl0bGUuZm9udC5zaXplLHRoaXMubGFiZWxQYWRbZitwXT10aGlzLmdldExhYmVsUGFkKGUsciksdGhpcy50aWNrRW5hYmxlW2YrcF09ITEsdGhpcy50aWNrQ29sb3JbZitwXT1pKChyLnRpY2tmb250fHx7fSkuY29sb3IpLHRoaXMudGlja0FuZ2xlW2YrcF09XCJhdXRvXCI9PT1yLnRpY2thbmdsZT8wOk1hdGguUEkqLXIudGlja2FuZ2xlLzE4MCx0aGlzLnRpY2tQYWRbZitwXT10aGlzLmdldFRpY2tQYWQociksdGhpcy50aWNrTWFya0xlbmd0aFtmK3BdPTAsdGhpcy50aWNrTWFya1dpZHRoW2YrcF09ci50aWNrd2lkdGh8fDAsdGhpcy50aWNrTWFya0NvbG9yW2YrcF09aShyLnRpY2tjb2xvciksdGhpcy5ib3JkZXJMaW5lRW5hYmxlW2YrcF09ITEsdGhpcy5ib3JkZXJMaW5lQ29sb3JbZitwXT1pKHIubGluZWNvbG9yKSx0aGlzLmJvcmRlckxpbmVXaWR0aFtmK3BdPXIubGluZXdpZHRofHwwO2M9dGhpcy5oYXNTaGFyZWRBeGlzKHIpLG89dGhpcy5oYXNBeGlzSW5EZmx0UG9zKGUscikmJiFjLGw9dGhpcy5oYXNBeGlzSW5BbHRyUG9zKGUscikmJiFjLGE9ci5taXJyb3J8fCExLHU9Yz8tMSE9PVN0cmluZyhhKS5pbmRleE9mKFwiYWxsXCIpOiEhYSxoPWM/XCJhbGx0aWNrc1wiPT09YTotMSE9PVN0cmluZyhhKS5pbmRleE9mKFwidGlja3NcIiksbz90aGlzLmxhYmVsRW5hYmxlW2ZdPSEwOmwmJih0aGlzLmxhYmVsRW5hYmxlW2YrMl09ITApLG8/dGhpcy50aWNrRW5hYmxlW2ZdPXIuc2hvd3RpY2tsYWJlbHM6bCYmKHRoaXMudGlja0VuYWJsZVtmKzJdPXIuc2hvd3RpY2tsYWJlbHMpLChvfHx1KSYmKHRoaXMuYm9yZGVyTGluZUVuYWJsZVtmXT1yLnNob3dsaW5lKSwobHx8dSkmJih0aGlzLmJvcmRlckxpbmVFbmFibGVbZisyXT1yLnNob3dsaW5lKSwob3x8aCkmJih0aGlzLnRpY2tNYXJrTGVuZ3RoW2ZdPXRoaXMuZ2V0VGlja01hcmtMZW5ndGgocikpLChsfHxoKSYmKHRoaXMudGlja01hcmtMZW5ndGhbZisyXT10aGlzLmdldFRpY2tNYXJrTGVuZ3RoKHIpKSx0aGlzLmdyaWRMaW5lRW5hYmxlW2ZdPXIuc2hvd2dyaWQsdGhpcy5ncmlkTGluZUNvbG9yW2ZdPWkoci5ncmlkY29sb3IpLHRoaXMuZ3JpZExpbmVXaWR0aFtmXT1yLmdyaWR3aWR0aCx0aGlzLnplcm9MaW5lRW5hYmxlW2ZdPXIuemVyb2xpbmUsdGhpcy56ZXJvTGluZUNvbG9yW2ZdPWkoci56ZXJvbGluZWNvbG9yKSx0aGlzLnplcm9MaW5lV2lkdGhbZl09ci56ZXJvbGluZXdpZHRofX0sby5oYXNTaGFyZWRBeGlzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUscj1lLmZ1bGxMYXlvdXQuX3N1YnBsb3RzLmdsMmQ7cmV0dXJuIDAhPT1uLmZpbmRTdWJwbG90c1dpdGhBeGlzKHIsdCkuaW5kZXhPZihlLmlkKX0sby5oYXNBeGlzSW5EZmx0UG9zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5zaWRlO3JldHVyblwieGF4aXNcIj09PXQ/XCJib3R0b21cIj09PXI6XCJ5YXhpc1wiPT09dD9cImxlZnRcIj09PXI6dm9pZCAwfSxvLmhhc0F4aXNJbkFsdHJQb3M9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnNpZGU7cmV0dXJuXCJ4YXhpc1wiPT09dD9cInRvcFwiPT09cjpcInlheGlzXCI9PT10P1wicmlnaHRcIj09PXI6dm9pZCAwfSxvLmdldExhYmVsUGFkPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS50aXRsZS5mb250LnNpemUsbj1lLnNob3d0aWNrbGFiZWxzO3JldHVyblwieGF4aXNcIj09PXQ/XCJ0b3BcIj09PWUuc2lkZT9yKigxLjUrKG4/MTowKSktMTA6ciooMS41KyhuPy41OjApKS0xMDpcInlheGlzXCI9PT10P1wicmlnaHRcIj09PWUuc2lkZT8xMCtyKigxLjUrKG4/MTouNSkpOjEwK3IqKDEuNSsobj8uNTowKSk6dm9pZCAwfSxvLmdldFRpY2tQYWQ9ZnVuY3Rpb24odCl7cmV0dXJuXCJvdXRzaWRlXCI9PT10LnRpY2tzPzEwK3QudGlja2xlbjoxNX0sby5nZXRUaWNrTWFya0xlbmd0aD1mdW5jdGlvbih0KXtpZighdC50aWNrcylyZXR1cm4gMDt2YXIgZT10LnRpY2tsZW47cmV0dXJuXCJpbnNpZGVcIj09PXQudGlja3M/LWU6ZX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYSh0KX19LHtcIi4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIjo3MjQsXCIuLi9jYXJ0ZXNpYW4vYXhlc1wiOjc0OX1dLDc4NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsLGk9dChcIi4vc2NlbmUyZFwiKSxhPXQoXCIuLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiKSxzPXQoXCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzXCIpLGw9dChcIi4uL2NhcnRlc2lhblwiKSxjPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzXCIpLHU9dChcIi4uL2dldF9kYXRhXCIpLmdldFN1YnBsb3REYXRhO3IubmFtZT1cImdsMmRcIixyLmF0dHI9W1wieGF4aXNcIixcInlheGlzXCJdLHIuaWRSb290PVtcInhcIixcInlcIl0sci5pZFJlZ2V4PXMuaWRSZWdleCxyLmF0dHJSZWdleD1zLmF0dHJSZWdleCxyLmF0dHJpYnV0ZXM9dChcIi4uL2NhcnRlc2lhbi9hdHRyaWJ1dGVzXCIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIpe2UuX2hhcyhcImNhcnRlc2lhblwiKXx8bC5zdXBwbHlMYXlvdXREZWZhdWx0cyh0LGUscil9LHIubGF5b3V0QXR0ck92ZXJyaWRlcz1uKGwubGF5b3V0QXR0cmlidXRlcyxcInBsb3RcIixcImZyb20tcm9vdFwiKSxyLmJhc2VMYXlvdXRBdHRyT3ZlcnJpZGVzPW4oe3Bsb3RfYmdjb2xvcjphLnBsb3RfYmdjb2xvcixob3ZlcmxhYmVsOmMuaG92ZXJsYWJlbH0sXCJwbG90XCIsXCJuZXN0ZWRcIiksci5wbG90PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5fZnVsbERhdGEsbj1lLl9zdWJwbG90cy5nbDJkLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXSxzPWUuX3Bsb3RzW29dLGw9dShyLFwiZ2wyZFwiLG8pLGM9cy5fc2NlbmUyZDt2b2lkIDA9PT1jJiYoYz1uZXcgaSh7aWQ6byxncmFwaERpdjp0LGNvbnRhaW5lcjp0LnF1ZXJ5U2VsZWN0b3IoXCIuZ2wtY29udGFpbmVyXCIpLHN0YXRpY1Bsb3Q6dC5fY29udGV4dC5zdGF0aWNQbG90LHBsb3RHbFBpeGVsUmF0aW86dC5fY29udGV4dC5wbG90R2xQaXhlbFJhdGlvfSxlKSxzLl9zY2VuZTJkPWMpLGMucGxvdChsLHQuY2FsY2RhdGEsZSx0LmxheW91dCl9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1uLl9zdWJwbG90cy5nbDJkfHxbXSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV0scz1uLl9wbG90c1tvXTtpZihzLl9zY2VuZTJkKTA9PT11KHQsXCJnbDJkXCIsbykubGVuZ3RoJiYocy5fc2NlbmUyZC5kZXN0cm95KCksZGVsZXRlIG4uX3Bsb3RzW29dKX1sLmNsZWFuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sci5kcmF3RnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3QuX2NvbnRleHQuc3RhdGljUGxvdHx8bC5kcmF3RnJhbWV3b3JrKHQpfSxyLnRvU1ZHPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fc3VicGxvdHMuZ2wyZCxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPWUuX3Bsb3RzW3Jbbl1dLl9zY2VuZTJkLGE9aS50b0ltYWdlKFwicG5nXCIpO2UuX2dsaW1hZ2VzLmFwcGVuZChcInN2ZzppbWFnZVwiKS5hdHRyKHt4bWxuczpvLnN2ZyxcInhsaW5rOmhyZWZcIjphLHg6MCx5OjAsd2lkdGg6XCIxMDAlXCIsaGVpZ2h0OlwiMTAwJVwiLHByZXNlcnZlQXNwZWN0UmF0aW86XCJub25lXCJ9KSxpLmRlc3Ryb3koKX19LHIudXBkYXRlRng9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDJkLG49MDtuPHIubGVuZ3RoO24rKyl7ZS5fcGxvdHNbcltuXV0uX3NjZW5lMmQudXBkYXRlRngoZS5kcmFnbW9kZSl9fX0se1wiLi4vLi4vY29tcG9uZW50cy9meC9sYXlvdXRfYXR0cmlidXRlc1wiOjYxOCxcIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzXCI6Njc5LFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uL2NhcnRlc2lhblwiOjc2MCxcIi4uL2NhcnRlc2lhbi9hdHRyaWJ1dGVzXCI6NzQ3LFwiLi4vY2FydGVzaWFuL2NvbnN0YW50c1wiOjc1NSxcIi4uL2dldF9kYXRhXCI6Nzg0LFwiLi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo4MDEsXCIuL3NjZW5lMmRcIjo3ODh9XSw3ODg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbixpLGE9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLG89dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLHM9dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIiksbD10KFwiZ2wtcGxvdDJkXCIpLGM9dChcImdsLXNwaWtlczJkXCIpLHU9dChcImdsLXNlbGVjdC1ib3hcIiksaD10KFwid2ViZ2wtY29udGV4dFwiKSxmPXQoXCIuL2NvbnZlcnRcIikscD10KFwiLi9jYW1lcmFcIiksZD10KFwiLi4vLi4vbGliL3Nob3dfbm9fd2ViZ2xfbXNnXCIpLGc9dChcIi4uL2NhcnRlc2lhbi9jb25zdHJhaW50c1wiKSx2PWcuZW5mb3JjZSxtPWcuY2xlYW4seT10KFwiLi4vY2FydGVzaWFuL2F1dG9yYW5nZVwiKS5kb0F1dG9SYW5nZSx4PVtcInhheGlzXCIsXCJ5YXhpc1wiXSxiPXQoXCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzXCIpLlNVQlBMT1RfUEFUVEVSTjtmdW5jdGlvbiBfKHQsZSl7dGhpcy5jb250YWluZXI9dC5jb250YWluZXIsdGhpcy5ncmFwaERpdj10LmdyYXBoRGl2LHRoaXMucGl4ZWxSYXRpbz10LnBsb3RHbFBpeGVsUmF0aW98fHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLHRoaXMuaWQ9dC5pZCx0aGlzLnN0YXRpY1Bsb3Q9ISF0LnN0YXRpY1Bsb3QsdGhpcy5zY3JvbGxab29tPXRoaXMuZ3JhcGhEaXYuX2NvbnRleHQuX3Njcm9sbFpvb20uY2FydGVzaWFuLHRoaXMuZnVsbERhdGE9bnVsbCx0aGlzLnVwZGF0ZVJlZnMoZSksdGhpcy5tYWtlRnJhbWV3b3JrKCksdGhpcy5zdG9wcGVkfHwodGhpcy5nbHBsb3RPcHRpb25zPWYodGhpcyksdGhpcy5nbHBsb3RPcHRpb25zLm1lcmdlKGUpLHRoaXMuZ2xwbG90PWwodGhpcy5nbHBsb3RPcHRpb25zKSx0aGlzLmNhbWVyYT1wKHRoaXMpLHRoaXMudHJhY2VzPXt9LHRoaXMuc3Bpa2VzPWModGhpcy5nbHBsb3QpLHRoaXMuc2VsZWN0Qm94PXUodGhpcy5nbHBsb3Qse2lubmVyRmlsbDohMSxvdXRlckZpbGw6ITB9KSx0aGlzLmxhc3RCdXR0b25TdGF0ZT0wLHRoaXMucGlja1Jlc3VsdD1udWxsLHRoaXMuaXNNb3VzZU92ZXI9ITAsdGhpcy5zdG9wcGVkPSExLHRoaXMucmVkcmF3PXRoaXMuZHJhdy5iaW5kKHRoaXMpLHRoaXMucmVkcmF3KCkpfWUuZXhwb3J0cz1fO3ZhciB3PV8ucHJvdG90eXBlO3cubWFrZUZyYW1ld29yaz1mdW5jdGlvbigpe2lmKHRoaXMuc3RhdGljUGxvdCl7aWYoIShpfHwobj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLGk9aCh7Y2FudmFzOm4scHJlc2VydmVEcmF3aW5nQnVmZmVyOiExLHByZW11bHRpcGxpZWRBbHBoYTohMCxhbnRpYWxpYXM6ITB9KSkpKXRocm93IG5ldyBFcnJvcihcIkVycm9yIGNyZWF0aW5nIHN0YXRpYyBjYW52YXMvY29udGV4dCBmb3IgaW1hZ2Ugc2VydmVyXCIpO3RoaXMuY2FudmFzPW4sdGhpcy5nbD1pfWVsc2V7dmFyIHQ9dGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5nbC1jYW52YXMtZm9jdXNcIiksZT1oKHtjYW52YXM6dCxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITAscHJlbXVsdGlwbGllZEFscGhhOiEwfSk7aWYoIWUpcmV0dXJuIGQodGhpcyksdm9pZCh0aGlzLnN0b3BwZWQ9ITApO3RoaXMuY2FudmFzPXQsdGhpcy5nbD1lfXZhciByPXRoaXMuY2FudmFzO3Iuc3R5bGUud2lkdGg9XCIxMDAlXCIsci5zdHlsZS5oZWlnaHQ9XCIxMDAlXCIsci5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsci5zdHlsZS50b3A9XCIwcHhcIixyLnN0eWxlLmxlZnQ9XCIwcHhcIixyLnN0eWxlW1wicG9pbnRlci1ldmVudHNcIl09XCJub25lXCIsdGhpcy51cGRhdGVTaXplKHIpLHIuY2xhc3NOYW1lKz1cIiB1c2VyLXNlbGVjdC1ub25lXCI7dmFyIGE9dGhpcy5zdmdDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcInN2Z1wiKTthLnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixhLnN0eWxlLnRvcD1hLnN0eWxlLmxlZnQ9XCIwcHhcIixhLnN0eWxlLndpZHRoPWEuc3R5bGUuaGVpZ2h0PVwiMTAwJVwiLGEuc3R5bGVbXCJ6LWluZGV4XCJdPTIwLGEuc3R5bGVbXCJwb2ludGVyLWV2ZW50c1wiXT1cIm5vbmVcIjt2YXIgbz10aGlzLm1vdXNlQ29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7by5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsby5zdHlsZVtcInBvaW50ZXItZXZlbnRzXCJdPVwiYXV0b1wiLHRoaXMucGlja0NhbnZhcz10aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLmdsLWNhbnZhcy1waWNrXCIpO3ZhciBzPXRoaXMuY29udGFpbmVyO3MuYXBwZW5kQ2hpbGQoYSkscy5hcHBlbmRDaGlsZChvKTt2YXIgbD10aGlzO28uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3V0XCIsZnVuY3Rpb24oKXtsLmlzTW91c2VPdmVyPSExLGwudW5ob3ZlcigpfSksby5hZGRFdmVudExpc3RlbmVyKFwibW91c2VvdmVyXCIsZnVuY3Rpb24oKXtsLmlzTW91c2VPdmVyPSEwfSl9LHcudG9JbWFnZT1mdW5jdGlvbih0KXt0fHwodD1cInBuZ1wiKSx0aGlzLnN0b3BwZWQ9ITAsdGhpcy5zdGF0aWNQbG90JiZ0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChuKSx0aGlzLnVwZGF0ZVNpemUodGhpcy5jYW52YXMpO3ZhciBlPXRoaXMuZ2xwbG90LmdsLHI9ZS5kcmF3aW5nQnVmZmVyV2lkdGgsaT1lLmRyYXdpbmdCdWZmZXJIZWlnaHQ7ZS5jbGVhckNvbG9yKDEsMSwxLDApLGUuY2xlYXIoZS5DT0xPUl9CVUZGRVJfQklUfGUuREVQVEhfQlVGRkVSX0JJVCksdGhpcy5nbHBsb3Quc2V0RGlydHkoKSx0aGlzLmdscGxvdC5kcmF3KCksZS5iaW5kRnJhbWVidWZmZXIoZS5GUkFNRUJVRkZFUixudWxsKTt2YXIgYT1uZXcgVWludDhBcnJheShyKmkqNCk7ZS5yZWFkUGl4ZWxzKDAsMCxyLGksZS5SR0JBLGUuVU5TSUdORURfQllURSxhKTtmb3IodmFyIG89MCxzPWktMTtvPHM7KytvLC0tcylmb3IodmFyIGw9MDtsPHI7KytsKWZvcih2YXIgYz0wO2M8NDsrK2Mpe3ZhciB1PWFbNCoocipvK2wpK2NdO2FbNCoocipvK2wpK2NdPWFbNCoocipzK2wpK2NdLGFbNCoocipzK2wpK2NdPXV9dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtoLndpZHRoPXIsaC5oZWlnaHQ9aTt2YXIgZixwPWguZ2V0Q29udGV4dChcIjJkXCIpLGQ9cC5jcmVhdGVJbWFnZURhdGEocixpKTtzd2l0Y2goZC5kYXRhLnNldChhKSxwLnB1dEltYWdlRGF0YShkLDAsMCksdCl7Y2FzZVwianBlZ1wiOmY9aC50b0RhdGFVUkwoXCJpbWFnZS9qcGVnXCIpO2JyZWFrO2Nhc2VcIndlYnBcIjpmPWgudG9EYXRhVVJMKFwiaW1hZ2Uvd2VicFwiKTticmVhaztkZWZhdWx0OmY9aC50b0RhdGFVUkwoXCJpbWFnZS9wbmdcIil9cmV0dXJuIHRoaXMuc3RhdGljUGxvdCYmdGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQobiksZn0sdy51cGRhdGVTaXplPWZ1bmN0aW9uKHQpe3R8fCh0PXRoaXMuY2FudmFzKTt2YXIgZT10aGlzLnBpeGVsUmF0aW8scj10aGlzLmZ1bGxMYXlvdXQsbj1yLndpZHRoLGk9ci5oZWlnaHQsYT0wfE1hdGguY2VpbChlKm4pLG89MHxNYXRoLmNlaWwoZSppKTtyZXR1cm4gdC53aWR0aD09PWEmJnQuaGVpZ2h0PT09b3x8KHQud2lkdGg9YSx0LmhlaWdodD1vKSx0fSx3LmNvbXB1dGVUaWNrTWFya3M9ZnVuY3Rpb24oKXt0aGlzLnhheGlzLnNldFNjYWxlKCksdGhpcy55YXhpcy5zZXRTY2FsZSgpO2Zvcih2YXIgdD1bby5jYWxjVGlja3ModGhpcy54YXhpcyksby5jYWxjVGlja3ModGhpcy55YXhpcyldLGU9MDtlPDI7KytlKWZvcih2YXIgcj0wO3I8dFtlXS5sZW5ndGg7KytyKXRbZV1bcl0udGV4dD10W2VdW3JdLnRleHQrXCJcIjtyZXR1cm4gdH0sdy51cGRhdGVSZWZzPWZ1bmN0aW9uKHQpe3RoaXMuZnVsbExheW91dD10O3ZhciBlPXRoaXMuaWQubWF0Y2goYikscj1cInhheGlzXCIrZVsxXSxuPVwieWF4aXNcIitlWzJdO3RoaXMueGF4aXM9dGhpcy5mdWxsTGF5b3V0W3JdLHRoaXMueWF4aXM9dGhpcy5mdWxsTGF5b3V0W25dfSx3LnJlbGF5b3V0Q2FsbGJhY2s9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdyYXBoRGl2LGU9dGhpcy54YXhpcyxyPXRoaXMueWF4aXMsbj10LmxheW91dCxpPXt9LG89aVtlLl9uYW1lK1wiLnJhbmdlXCJdPWUucmFuZ2Uuc2xpY2UoKSxzPWlbci5fbmFtZStcIi5yYW5nZVwiXT1yLnJhbmdlLnNsaWNlKCk7aVtlLl9uYW1lK1wiLmF1dG9yYW5nZVwiXT1lLmF1dG9yYW5nZSxpW3IuX25hbWUrXCIuYXV0b3JhbmdlXCJdPXIuYXV0b3JhbmdlLGEuY2FsbChcIl9zdG9yZURpcmVjdEdVSUVkaXRcIix0LmxheW91dCx0Ll9mdWxsTGF5b3V0Ll9wcmVHVUksaSk7dmFyIGw9bltlLl9uYW1lXTtsLnJhbmdlPW8sbC5hdXRvcmFuZ2U9ZS5hdXRvcmFuZ2U7dmFyIGM9bltyLl9uYW1lXTtjLnJhbmdlPXMsYy5hdXRvcmFuZ2U9ci5hdXRvcmFuZ2UsaS5sYXN0SW5wdXRUaW1lPXRoaXMuY2FtZXJhLmxhc3RJbnB1dFRpbWUsdC5lbWl0KFwicGxvdGx5X3JlbGF5b3V0XCIsaSl9LHcuY2FtZXJhQ2hhbmdlZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY2FtZXJhO3RoaXMuZ2xwbG90LnNldERhdGFCb3godGhpcy5jYWxjRGF0YUJveCgpKTt2YXIgZT10aGlzLmNvbXB1dGVUaWNrTWFya3MoKTsoZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPDI7KytyKXt2YXIgbj10W3JdLGk9ZVtyXTtpZihuLmxlbmd0aCE9PWkubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgYT0wO2E8bi5sZW5ndGg7KythKWlmKG5bYV0ueCE9PWlbYV0ueClyZXR1cm4hMH1yZXR1cm4hMX0pKGUsdGhpcy5nbHBsb3RPcHRpb25zLnRpY2tzKSYmKHRoaXMuZ2xwbG90T3B0aW9ucy50aWNrcz1lLHRoaXMuZ2xwbG90T3B0aW9ucy5kYXRhQm94PXQuZGF0YUJveCx0aGlzLmdscGxvdC51cGRhdGUodGhpcy5nbHBsb3RPcHRpb25zKSx0aGlzLmhhbmRsZUFubm90YXRpb25zKCkpfSx3LmhhbmRsZUFubm90YXRpb25zPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuZ3JhcGhEaXYsZT10aGlzLmZ1bGxMYXlvdXQuYW5ub3RhdGlvbnMscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24ueHJlZj09PXRoaXMueGF4aXMuX2lkJiZuLnlyZWY9PT10aGlzLnlheGlzLl9pZCYmYS5nZXRDb21wb25lbnRNZXRob2QoXCJhbm5vdGF0aW9uc1wiLFwiZHJhd09uZVwiKSh0LHIpfX0sdy5kZXN0cm95PWZ1bmN0aW9uKCl7aWYodGhpcy5nbHBsb3Qpe3ZhciB0PXRoaXMudHJhY2VzO3QmJk9iamVjdC5rZXlzKHQpLm1hcChmdW5jdGlvbihlKXt0W2VdLmRpc3Bvc2UoKSxkZWxldGUgdFtlXX0pLHRoaXMuZ2xwbG90LmRpc3Bvc2UoKSx0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLnN2Z0NvbnRhaW5lciksdGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5tb3VzZUNvbnRhaW5lciksdGhpcy5mdWxsRGF0YT1udWxsLHRoaXMuZ2xwbG90PW51bGwsdGhpcy5zdG9wcGVkPSEwLHRoaXMuY2FtZXJhLm1vdXNlTGlzdGVuZXIuZW5hYmxlZD0hMSx0aGlzLm1vdXNlQ29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ3aGVlbFwiLHRoaXMuY2FtZXJhLndoZWVsTGlzdGVuZXIpLHRoaXMuY2FtZXJhPW51bGx9fSx3LnBsb3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuZ2xwbG90O3RoaXMudXBkYXRlUmVmcyhyKSx0aGlzLnhheGlzLmNsZWFyQ2FsYygpLHRoaXMueWF4aXMuY2xlYXJDYWxjKCksdGhpcy51cGRhdGVUcmFjZXModCxlKSx0aGlzLnVwZGF0ZUZ4KHIuZHJhZ21vZGUpO3ZhciBpPXIud2lkdGgsYT1yLmhlaWdodDt0aGlzLnVwZGF0ZVNpemUodGhpcy5jYW52YXMpO3ZhciBvPXRoaXMuZ2xwbG90T3B0aW9ucztvLm1lcmdlKHIpLG8uc2NyZWVuQm94PVswLDAsaSxhXTt2YXIgcz17X2Z1bGxMYXlvdXQ6e19heGlzQ29uc3RyYWludEdyb3Vwczp0aGlzLmdyYXBoRGl2Ll9mdWxsTGF5b3V0Ll9heGlzQ29uc3RyYWludEdyb3Vwcyx4YXhpczp0aGlzLnhheGlzLHlheGlzOnRoaXMueWF4aXN9fTttKHMsdGhpcy54YXhpcyksbShzLHRoaXMueWF4aXMpO3ZhciBsLGMsdT1yLl9zaXplLGg9dGhpcy54YXhpcy5kb21haW4sZj10aGlzLnlheGlzLmRvbWFpbjtmb3Ioby52aWV3Qm94PVt1LmwraFswXSp1LncsdS5iK2ZbMF0qdS5oLGktdS5yLSgxLWhbMV0pKnUudyxhLXUudC0oMS1mWzFdKSp1LmhdLHRoaXMubW91c2VDb250YWluZXIuc3R5bGUud2lkdGg9dS53KihoWzFdLWhbMF0pK1wicHhcIix0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLmhlaWdodD11LmgqKGZbMV0tZlswXSkrXCJweFwiLHRoaXMubW91c2VDb250YWluZXIuaGVpZ2h0PXUuaCooZlsxXS1mWzBdKSx0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLmxlZnQ9dS5sK2hbMF0qdS53K1wicHhcIix0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLnRvcD11LnQrKDEtZlsxXSkqdS5oK1wicHhcIixjPTA7YzwyOysrYykobD10aGlzW3hbY11dKS5fbGVuZ3RoPW8udmlld0JveFtjKzJdLW8udmlld0JveFtjXSx5KHRoaXMuZ3JhcGhEaXYsbCksbC5zZXRTY2FsZSgpO3Yocyksby50aWNrcz10aGlzLmNvbXB1dGVUaWNrTWFya3MoKSxvLmRhdGFCb3g9dGhpcy5jYWxjRGF0YUJveCgpLG8ubWVyZ2Uociksbi51cGRhdGUobyksdGhpcy5nbHBsb3QuZHJhdygpfSx3LmNhbGNEYXRhQm94PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy54YXhpcyxlPXRoaXMueWF4aXMscj10LnJhbmdlLG49ZS5yYW5nZSxpPXQucjJsLGE9ZS5yMmw7cmV0dXJuW2koclswXSksYShuWzBdKSxpKHJbMV0pLGEoblsxXSldfSx3LnNldFJhbmdlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnhheGlzLHI9dGhpcy55YXhpcyxuPWUubDJyLGk9ci5sMnI7ZS5yYW5nZT1bbih0WzBdKSxuKHRbMl0pXSxyLnJhbmdlPVtpKHRbMV0pLGkodFszXSldfSx3LnVwZGF0ZVRyYWNlcz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPU9iamVjdC5rZXlzKHRoaXMudHJhY2VzKTt0aGlzLmZ1bGxEYXRhPXQ7dDpmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXt2YXIgbz1hW3JdLHM9dGhpcy50cmFjZXNbb107Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpZigoaT10W25dKS51aWQ9PT1vJiZpLnR5cGU9PT1zLnR5cGUpY29udGludWUgdDtzLmRpc3Bvc2UoKSxkZWxldGUgdGhpcy50cmFjZXNbb119Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7aT10W3JdO3ZhciBsPWVbcl0sYz10aGlzLnRyYWNlc1tpLnVpZF07Yz9jLnVwZGF0ZShpLGwpOihjPWkuX21vZHVsZS5wbG90KHRoaXMsaSxsKSx0aGlzLnRyYWNlc1tpLnVpZF09Yyl9dGhpcy5nbHBsb3Qub2JqZWN0cy5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX3RyYWNlLmluZGV4LWUuX3RyYWNlLmluZGV4fSl9LHcudXBkYXRlRng9ZnVuY3Rpb24odCl7XCJsYXNzb1wiPT09dHx8XCJzZWxlY3RcIj09PXQ/KHRoaXMucGlja0NhbnZhcy5zdHlsZVtcInBvaW50ZXItZXZlbnRzXCJdPVwibm9uZVwiLHRoaXMubW91c2VDb250YWluZXIuc3R5bGVbXCJwb2ludGVyLWV2ZW50c1wiXT1cIm5vbmVcIik6KHRoaXMucGlja0NhbnZhcy5zdHlsZVtcInBvaW50ZXItZXZlbnRzXCJdPVwiYXV0b1wiLHRoaXMubW91c2VDb250YWluZXIuc3R5bGVbXCJwb2ludGVyLWV2ZW50c1wiXT1cImF1dG9cIiksdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS5jdXJzb3I9XCJwYW5cIj09PXQ/XCJtb3ZlXCI6XCJ6b29tXCI9PT10P1wiY3Jvc3NoYWlyXCI6bnVsbH0sdy5lbWl0UG9pbnRBY3Rpb249ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj10LnRyYWNlLnVpZCxpPXQucG9pbnRJbmRleCxhPTA7YTx0aGlzLmZ1bGxEYXRhLmxlbmd0aDthKyspdGhpcy5mdWxsRGF0YVthXS51aWQ9PT1uJiYocj10aGlzLmZ1bGxEYXRhW2FdKTt2YXIgbz17eDp0LnRyYWNlQ29vcmRbMF0seTp0LnRyYWNlQ29vcmRbMV0sY3VydmVOdW1iZXI6ci5pbmRleCxwb2ludE51bWJlcjppLGRhdGE6ci5faW5wdXQsZnVsbERhdGE6dGhpcy5mdWxsRGF0YSx4YXhpczp0aGlzLnhheGlzLHlheGlzOnRoaXMueWF4aXN9O3MuYXBwZW5kQXJyYXlQb2ludFZhbHVlKG8scixpKSx0aGlzLmdyYXBoRGl2LmVtaXQoZSx7cG9pbnRzOltvXX0pfSx3LmRyYXc9ZnVuY3Rpb24oKXtpZighdGhpcy5zdG9wcGVkKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yZWRyYXcpO3ZhciB0PXRoaXMuZ2xwbG90LGU9dGhpcy5jYW1lcmEscj1lLm1vdXNlTGlzdGVuZXIsbj0xPT09dGhpcy5sYXN0QnV0dG9uU3RhdGUmJjA9PT1yLmJ1dHRvbnMsaT10aGlzLmZ1bGxMYXlvdXQ7dGhpcy5sYXN0QnV0dG9uU3RhdGU9ci5idXR0b25zLHRoaXMuY2FtZXJhQ2hhbmdlZCgpO3ZhciBhLG89ci54KnQucGl4ZWxSYXRpbyxsPXRoaXMuY2FudmFzLmhlaWdodC10LnBpeGVsUmF0aW8qci55O2lmKGUuYm94RW5hYmxlZCYmXCJ6b29tXCI9PT1pLmRyYWdtb2RlKXt0aGlzLnNlbGVjdEJveC5lbmFibGVkPSEwO2Zvcih2YXIgYz10aGlzLnNlbGVjdEJveC5zZWxlY3RCb3g9W01hdGgubWluKGUuYm94U3RhcnRbMF0sZS5ib3hFbmRbMF0pLE1hdGgubWluKGUuYm94U3RhcnRbMV0sZS5ib3hFbmRbMV0pLE1hdGgubWF4KGUuYm94U3RhcnRbMF0sZS5ib3hFbmRbMF0pLE1hdGgubWF4KGUuYm94U3RhcnRbMV0sZS5ib3hFbmRbMV0pXSx1PTA7dTwyO3UrKyllLmJveFN0YXJ0W3VdPT09ZS5ib3hFbmRbdV0mJihjW3VdPXQuZGF0YUJveFt1XSxjW3UrMl09dC5kYXRhQm94W3UrMl0pO3Quc2V0RGlydHkoKX1lbHNlIGlmKCFlLnBhbm5pbmcmJnRoaXMuaXNNb3VzZU92ZXIpe3RoaXMuc2VsZWN0Qm94LmVuYWJsZWQ9ITE7dmFyIGg9aS5fc2l6ZSxmPXRoaXMueGF4aXMuZG9tYWluLHA9dGhpcy55YXhpcy5kb21haW4sZD0oYT10LnBpY2soby90LnBpeGVsUmF0aW8raC5sK2ZbMF0qaC53LGwvdC5waXhlbFJhdGlvLShoLnQrKDEtcFsxXSkqaC5oKSkpJiZhLm9iamVjdC5fdHJhY2UuaGFuZGxlUGljayhhKTtpZihkJiZuJiZ0aGlzLmVtaXRQb2ludEFjdGlvbihkLFwicGxvdGx5X2NsaWNrXCIpLGEmJlwic2tpcFwiIT09YS5vYmplY3QuX3RyYWNlLmhvdmVyaW5mbyYmaS5ob3Zlcm1vZGUmJmQmJighdGhpcy5sYXN0UGlja1Jlc3VsdHx8dGhpcy5sYXN0UGlja1Jlc3VsdC50cmFjZVVpZCE9PWQudHJhY2UudWlkfHx0aGlzLmxhc3RQaWNrUmVzdWx0LmRhdGFDb29yZFswXSE9PWQuZGF0YUNvb3JkWzBdfHx0aGlzLmxhc3RQaWNrUmVzdWx0LmRhdGFDb29yZFsxXSE9PWQuZGF0YUNvb3JkWzFdKSl7dmFyIGc9ZDt0aGlzLmxhc3RQaWNrUmVzdWx0PXt0cmFjZVVpZDpkLnRyYWNlP2QudHJhY2UudWlkOm51bGwsZGF0YUNvb3JkOmQuZGF0YUNvb3JkLnNsaWNlKCl9LHRoaXMuc3Bpa2VzLnVwZGF0ZSh7Y2VudGVyOmEuZGF0YUNvb3JkfSksZy5zY3JlZW5Db29yZD1bKCh0LnZpZXdCb3hbMl0tdC52aWV3Qm94WzBdKSooYS5kYXRhQ29vcmRbMF0tdC5kYXRhQm94WzBdKS8odC5kYXRhQm94WzJdLXQuZGF0YUJveFswXSkrdC52aWV3Qm94WzBdKS90LnBpeGVsUmF0aW8sKHRoaXMuY2FudmFzLmhlaWdodC0odC52aWV3Qm94WzNdLXQudmlld0JveFsxXSkqKGEuZGF0YUNvb3JkWzFdLXQuZGF0YUJveFsxXSkvKHQuZGF0YUJveFszXS10LmRhdGFCb3hbMV0pLXQudmlld0JveFsxXSkvdC5waXhlbFJhdGlvXSx0aGlzLmVtaXRQb2ludEFjdGlvbihkLFwicGxvdGx5X2hvdmVyXCIpO3ZhciB2PXRoaXMuZnVsbERhdGFbZy50cmFjZS5pbmRleF18fHt9LG09Zy5wb2ludEluZGV4LHk9cy5jYXN0SG92ZXJpbmZvKHYsaSxtKTtpZih5JiZcImFsbFwiIT09eSl7dmFyIHg9eS5zcGxpdChcIitcIik7LTE9PT14LmluZGV4T2YoXCJ4XCIpJiYoZy50cmFjZUNvb3JkWzBdPXZvaWQgMCksLTE9PT14LmluZGV4T2YoXCJ5XCIpJiYoZy50cmFjZUNvb3JkWzFdPXZvaWQgMCksLTE9PT14LmluZGV4T2YoXCJ6XCIpJiYoZy50cmFjZUNvb3JkWzJdPXZvaWQgMCksLTE9PT14LmluZGV4T2YoXCJ0ZXh0XCIpJiYoZy50ZXh0TGFiZWw9dm9pZCAwKSwtMT09PXguaW5kZXhPZihcIm5hbWVcIikmJihnLm5hbWU9dm9pZCAwKX1zLmxvbmVIb3Zlcih7eDpnLnNjcmVlbkNvb3JkWzBdLHk6Zy5zY3JlZW5Db29yZFsxXSx4TGFiZWw6dGhpcy5ob3ZlckZvcm1hdHRlcihcInhheGlzXCIsZy50cmFjZUNvb3JkWzBdKSx5TGFiZWw6dGhpcy5ob3ZlckZvcm1hdHRlcihcInlheGlzXCIsZy50cmFjZUNvb3JkWzFdKSx6TGFiZWw6Zy50cmFjZUNvb3JkWzJdLHRleHQ6Zy50ZXh0TGFiZWwsbmFtZTpnLm5hbWUsY29sb3I6cy5jYXN0SG92ZXJPcHRpb24odixtLFwiYmdjb2xvclwiKXx8Zy5jb2xvcixib3JkZXJDb2xvcjpzLmNhc3RIb3Zlck9wdGlvbih2LG0sXCJib3JkZXJjb2xvclwiKSxmb250RmFtaWx5OnMuY2FzdEhvdmVyT3B0aW9uKHYsbSxcImZvbnQuZmFtaWx5XCIpLGZvbnRTaXplOnMuY2FzdEhvdmVyT3B0aW9uKHYsbSxcImZvbnQuc2l6ZVwiKSxmb250Q29sb3I6cy5jYXN0SG92ZXJPcHRpb24odixtLFwiZm9udC5jb2xvclwiKSxuYW1lTGVuZ3RoOnMuY2FzdEhvdmVyT3B0aW9uKHYsbSxcIm5hbWVsZW5ndGhcIiksdGV4dEFsaWduOnMuY2FzdEhvdmVyT3B0aW9uKHYsbSxcImFsaWduXCIpfSx7Y29udGFpbmVyOnRoaXMuc3ZnQ29udGFpbmVyLGdkOnRoaXMuZ3JhcGhEaXZ9KX19YXx8dGhpcy51bmhvdmVyKCksdC5kcmF3KCl9fSx3LnVuaG92ZXI9ZnVuY3Rpb24oKXt0aGlzLmxhc3RQaWNrUmVzdWx0JiYodGhpcy5zcGlrZXMudXBkYXRlKHt9KSx0aGlzLmxhc3RQaWNrUmVzdWx0PW51bGwsdGhpcy5ncmFwaERpdi5lbWl0KFwicGxvdGx5X3VuaG92ZXJcIikscy5sb25lVW5ob3Zlcih0aGlzLnN2Z0NvbnRhaW5lcikpfSx3LmhvdmVyRm9ybWF0dGVyPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwIT09ZSl7dmFyIHI9dGhpc1t0XTtyZXR1cm4gby50aWNrVGV4dChyLHIuYzJsKGUpLFwiaG92ZXJcIikudGV4dH19fSx7XCIuLi8uLi9jb21wb25lbnRzL2Z4XCI6NjE3LFwiLi4vLi4vbGliL3Nob3dfbm9fd2ViZ2xfbXNnXCI6NzIyLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL2NhcnRlc2lhbi9hdXRvcmFuZ2VcIjo3NDgsXCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzXCI6NzU1LFwiLi4vY2FydGVzaWFuL2NvbnN0cmFpbnRzXCI6NzU2LFwiLi9jYW1lcmFcIjo3ODUsXCIuL2NvbnZlcnRcIjo3ODYsXCJnbC1wbG90MmRcIjoyODQsXCJnbC1zZWxlY3QtYm94XCI6Mjk2LFwiZ2wtc3Bpa2VzMmRcIjozMDUsXCJ3ZWJnbC1jb250ZXh0XCI6NTQxfV0sNzg5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGwsaT10KFwiLi4vLi4vY29tcG9uZW50cy9meC9sYXlvdXRfYXR0cmlidXRlc1wiKSxhPXQoXCIuL3NjZW5lXCIpLG89dChcIi4uL2dldF9kYXRhXCIpLmdldFN1YnBsb3REYXRhLHM9dChcIi4uLy4uL2xpYlwiKSxsPXQoXCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiKTtyLm5hbWU9XCJnbDNkXCIsci5hdHRyPVwic2NlbmVcIixyLmlkUm9vdD1cInNjZW5lXCIsci5pZFJlZ2V4PXIuYXR0clJlZ2V4PXMuY291bnRlclJlZ2V4KFwic2NlbmVcIiksci5hdHRyaWJ1dGVzPXQoXCIuL2xheW91dC9hdHRyaWJ1dGVzXCIpLHIubGF5b3V0QXR0cmlidXRlcz10KFwiLi9sYXlvdXQvbGF5b3V0X2F0dHJpYnV0ZXNcIiksci5iYXNlTGF5b3V0QXR0ck92ZXJyaWRlcz1uKHtob3ZlcmxhYmVsOmkuaG92ZXJsYWJlbH0sXCJwbG90XCIsXCJuZXN0ZWRcIiksci5zdXBwbHlMYXlvdXREZWZhdWx0cz10KFwiLi9sYXlvdXQvZGVmYXVsdHNcIiksci5wbG90PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5fZnVsbERhdGEsbj1lLl9zdWJwbG90cy5nbDNkLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIHM9bltpXSxsPW8ocixcImdsM2RcIixzKSxjPWVbc10sdT1jLmNhbWVyYSxoPWMuX3NjZW5lO2h8fChoPW5ldyBhKHtpZDpzLGdyYXBoRGl2OnQsY29udGFpbmVyOnQucXVlcnlTZWxlY3RvcihcIi5nbC1jb250YWluZXJcIiksc3RhdGljUGxvdDp0Ll9jb250ZXh0LnN0YXRpY1Bsb3QscGxvdEdsUGl4ZWxSYXRpbzp0Ll9jb250ZXh0LnBsb3RHbFBpeGVsUmF0aW8sY2FtZXJhOnV9LGUpLGMuX3NjZW5lPWgpLGgudmlld0luaXRpYWx8fChoLnZpZXdJbml0aWFsPXt1cDp7eDp1LnVwLngseTp1LnVwLnksejp1LnVwLnp9LGV5ZTp7eDp1LmV5ZS54LHk6dS5leWUueSx6OnUuZXllLnp9LGNlbnRlcjp7eDp1LmNlbnRlci54LHk6dS5jZW50ZXIueSx6OnUuY2VudGVyLnp9fSksaC5wbG90KGwsZSx0LmxheW91dCl9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1uLl9zdWJwbG90cy5nbDNkfHxbXSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV07IWVbb10mJm5bb10uX3NjZW5lJiYobltvXS5fc2NlbmUuZGVzdHJveSgpLG4uX2luZm9sYXllciYmbi5faW5mb2xheWVyLnNlbGVjdEFsbChcIi5hbm5vdGF0aW9uLVwiK28pLnJlbW92ZSgpKX19LHIudG9TVkc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDNkLG49ZS5fc2l6ZSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPWVbcltpXV0sbz1hLmRvbWFpbixzPWEuX3NjZW5lLGM9cy50b0ltYWdlKFwicG5nXCIpO2UuX2dsaW1hZ2VzLmFwcGVuZChcInN2ZzppbWFnZVwiKS5hdHRyKHt4bWxuczpsLnN2ZyxcInhsaW5rOmhyZWZcIjpjLHg6bi5sK24udypvLnhbMF0seTpuLnQrbi5oKigxLW8ueVsxXSksd2lkdGg6bi53KihvLnhbMV0tby54WzBdKSxoZWlnaHQ6bi5oKihvLnlbMV0tby55WzBdKSxwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwibm9uZVwifSkscy5kZXN0cm95KCl9fSxyLmNsZWFuSWQ9ZnVuY3Rpb24odCl7aWYodC5tYXRjaCgvXnNjZW5lWzAtOV0qJC8pKXt2YXIgZT10LnN1YnN0cig1KTtyZXR1cm5cIjFcIj09PWUmJihlPVwiXCIpLFwic2NlbmVcIitlfX0sci51cGRhdGVGeD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLmdsM2Qsbj0wO248ci5sZW5ndGg7bisrKXtlW3Jbbl1dLl9zY2VuZS51cGRhdGVGeChlLmRyYWdtb2RlLGUuaG92ZXJtb2RlKX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzXCI6NjE4LFwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIjo2NzksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi4vZ2V0X2RhdGFcIjo3ODQsXCIuL2xheW91dC9hdHRyaWJ1dGVzXCI6NzkwLFwiLi9sYXlvdXQvZGVmYXVsdHNcIjo3OTQsXCIuL2xheW91dC9sYXlvdXRfYXR0cmlidXRlc1wiOjc5NSxcIi4vc2NlbmVcIjo3OTl9XSw3OTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e3NjZW5lOnt2YWxUeXBlOlwic3VicGxvdGlkXCIsZGZsdDpcInNjZW5lXCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9fX0se31dLDc5MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGk9dChcIi4uLy4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsbz10KFwiLi4vLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbDtlLmV4cG9ydHM9byh7dmlzaWJsZTppLnZpc2libGUsc2hvd3NwaWtlczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfSxzcGlrZXNpZGVzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITB9LHNwaWtldGhpY2tuZXNzOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoyfSxzcGlrZWNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0Om4uZGVmYXVsdExpbmV9LHNob3diYWNrZ3JvdW5kOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LGJhY2tncm91bmRjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDpcInJnYmEoMjA0LCAyMDQsIDIwNCwgMC41KVwifSxzaG93YXhlc2xhYmVsczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfSxjb2xvcjppLmNvbG9yLGNhdGVnb3J5b3JkZXI6aS5jYXRlZ29yeW9yZGVyLGNhdGVnb3J5YXJyYXk6aS5jYXRlZ29yeWFycmF5LHRpdGxlOmkudGl0bGUsdHlwZTphKHt9LGkudHlwZSx7dmFsdWVzOltcIi1cIixcImxpbmVhclwiLFwibG9nXCIsXCJkYXRlXCIsXCJjYXRlZ29yeVwiXX0pLGF1dG9yYW5nZTppLmF1dG9yYW5nZSxyYW5nZW1vZGU6aS5yYW5nZW1vZGUscmFuZ2U6YSh7fSxpLnJhbmdlLHtpdGVtczpbe3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcInBsb3RcIixpbXBsaWVkRWRpdHM6e1wiXmF1dG9yYW5nZVwiOiExfX0se3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcInBsb3RcIixpbXBsaWVkRWRpdHM6e1wiXmF1dG9yYW5nZVwiOiExfX1dLGFuaW06ITF9KSx0aWNrbW9kZTppLnRpY2ttb2RlLG50aWNrczppLm50aWNrcyx0aWNrMDppLnRpY2swLGR0aWNrOmkuZHRpY2ssdGlja3ZhbHM6aS50aWNrdmFscyx0aWNrdGV4dDppLnRpY2t0ZXh0LHRpY2tzOmkudGlja3MsbWlycm9yOmkubWlycm9yLHRpY2tsZW46aS50aWNrbGVuLHRpY2t3aWR0aDppLnRpY2t3aWR0aCx0aWNrY29sb3I6aS50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6aS5zaG93dGlja2xhYmVscyx0aWNrZm9udDppLnRpY2tmb250LHRpY2thbmdsZTppLnRpY2thbmdsZSx0aWNrcHJlZml4OmkudGlja3ByZWZpeCxzaG93dGlja3ByZWZpeDppLnNob3d0aWNrcHJlZml4LHRpY2tzdWZmaXg6aS50aWNrc3VmZml4LHNob3d0aWNrc3VmZml4Omkuc2hvd3RpY2tzdWZmaXgsc2hvd2V4cG9uZW50Omkuc2hvd2V4cG9uZW50LGV4cG9uZW50Zm9ybWF0OmkuZXhwb25lbnRmb3JtYXQsc2VwYXJhdGV0aG91c2FuZHM6aS5zZXBhcmF0ZXRob3VzYW5kcyx0aWNrZm9ybWF0OmkudGlja2Zvcm1hdCx0aWNrZm9ybWF0c3RvcHM6aS50aWNrZm9ybWF0c3RvcHMsaG92ZXJmb3JtYXQ6aS5ob3ZlcmZvcm1hdCxzaG93bGluZTppLnNob3dsaW5lLGxpbmVjb2xvcjppLmxpbmVjb2xvcixsaW5ld2lkdGg6aS5saW5ld2lkdGgsc2hvd2dyaWQ6aS5zaG93Z3JpZCxncmlkY29sb3I6YSh7fSxpLmdyaWRjb2xvcix7ZGZsdDpcInJnYigyMDQsIDIwNCwgMjA0KVwifSksZ3JpZHdpZHRoOmkuZ3JpZHdpZHRoLHplcm9saW5lOmkuemVyb2xpbmUsemVyb2xpbmVjb2xvcjppLnplcm9saW5lY29sb3IsemVyb2xpbmV3aWR0aDppLnplcm9saW5ld2lkdGgsX2RlcHJlY2F0ZWQ6e3RpdGxlOmkuX2RlcHJlY2F0ZWQudGl0bGUsdGl0bGVmb250OmkuX2RlcHJlY2F0ZWQudGl0bGVmb250fX0sXCJwbG90XCIsXCJmcm9tLXJvb3RcIil9LHtcIi4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uLy4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlc1wiOjc2MX1dLDc5MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJ0aW55Y29sb3IyXCIpLm1peCxpPXQoXCIuLi8uLi8uLi9saWJcIiksYT10KFwiLi4vLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKSxvPXQoXCIuL2F4aXNfYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9jYXJ0ZXNpYW4vdHlwZV9kZWZhdWx0c1wiKSxsPXQoXCIuLi8uLi9jYXJ0ZXNpYW4vYXhpc19kZWZhdWx0c1wiKSxjPVtcInhheGlzXCIsXCJ5YXhpc1wiLFwiemF4aXNcIl07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgdSxoO2Z1bmN0aW9uIGYodCxlKXtyZXR1cm4gaS5jb2VyY2UodSxoLG8sdCxlKX1mb3IodmFyIHA9MDtwPGMubGVuZ3RoO3ArKyl7dmFyIGQ9Y1twXTt1PXRbZF18fHt9LChoPWEubmV3Q29udGFpbmVyKGUsZCkpLl9pZD1kWzBdK3Iuc2NlbmUsaC5fbmFtZT1kLHModSxoLGYsciksbCh1LGgsZix7Zm9udDpyLmZvbnQsbGV0dGVyOmRbMF0sZGF0YTpyLmRhdGEsc2hvd0dyaWQ6ITAsbm9UaWNrc29uOiEwLGJnQ29sb3I6ci5iZ0NvbG9yLGNhbGVuZGFyOnIuY2FsZW5kYXJ9LHIuZnVsbExheW91dCksZihcImdyaWRjb2xvclwiLG4oaC5jb2xvcixyLmJnQ29sb3IsMTM2MDAvMTg3KS50b1JnYlN0cmluZygpKSxmKFwidGl0bGUudGV4dFwiLGRbMF0pLGguc2V0U2NhbGU9aS5ub29wLGYoXCJzaG93c3Bpa2VzXCIpJiYoZihcInNwaWtlc2lkZXNcIiksZihcInNwaWtldGhpY2tuZXNzXCIpLGYoXCJzcGlrZWNvbG9yXCIsaC5jb2xvcikpLGYoXCJzaG93YXhlc2xhYmVsc1wiKSxmKFwic2hvd2JhY2tncm91bmRcIikmJmYoXCJiYWNrZ3JvdW5kY29sb3JcIil9fX0se1wiLi4vLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzXCI6NzUxLFwiLi4vLi4vY2FydGVzaWFuL3R5cGVfZGVmYXVsdHNcIjo3NzIsXCIuL2F4aXNfYXR0cmlidXRlc1wiOjc5MSx0aW55Y29sb3IyOjUyMn1dLDc5MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi8uLi9saWIvc3RyMnJnYmFycmF5XCIpLGk9dChcIi4uLy4uLy4uL2xpYlwiKSxhPVtcInhheGlzXCIsXCJ5YXhpc1wiLFwiemF4aXNcIl07ZnVuY3Rpb24gbygpe3RoaXMuYm91bmRzPVtbLTEwLC0xMCwtMTBdLFsxMCwxMCwxMF1dLHRoaXMudGlja3M9W1tdLFtdLFtdXSx0aGlzLnRpY2tFbmFibGU9WyEwLCEwLCEwXSx0aGlzLnRpY2tGb250PVtcInNhbnMtc2VyaWZcIixcInNhbnMtc2VyaWZcIixcInNhbnMtc2VyaWZcIl0sdGhpcy50aWNrU2l6ZT1bMTIsMTIsMTJdLHRoaXMudGlja0FuZ2xlPVswLDAsMF0sdGhpcy50aWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tQYWQ9WzE4LDE4LDE4XSx0aGlzLmxhYmVscz1bXCJ4XCIsXCJ5XCIsXCJ6XCJdLHRoaXMubGFiZWxFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxhYmVsRm9udD1bXCJPcGVuIFNhbnNcIixcIk9wZW4gU2Fuc1wiLFwiT3BlbiBTYW5zXCJdLHRoaXMubGFiZWxTaXplPVsyMCwyMCwyMF0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5sYWJlbFBhZD1bMzAsMzAsMzBdLHRoaXMubGluZUVuYWJsZT1bITAsITAsITBdLHRoaXMubGluZU1pcnJvcj1bITEsITEsITFdLHRoaXMubGluZVdpZHRoPVsxLDEsMV0sdGhpcy5saW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxpbmVUaWNrRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5saW5lVGlja01pcnJvcj1bITEsITEsITFdLHRoaXMubGluZVRpY2tMZW5ndGg9WzEwLDEwLDEwXSx0aGlzLmxpbmVUaWNrV2lkdGg9WzEsMSwxXSx0aGlzLmxpbmVUaWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmdyaWRFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmdyaWRXaWR0aD1bMSwxLDFdLHRoaXMuZ3JpZENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy56ZXJvRW5hYmxlPVshMCwhMCwhMF0sdGhpcy56ZXJvTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy56ZXJvTGluZVdpZHRoPVsyLDIsMl0sdGhpcy5iYWNrZ3JvdW5kRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5iYWNrZ3JvdW5kQ29sb3I9W1suOCwuOCwuOCwuNV0sWy44LC44LC44LC41XSxbLjgsLjgsLjgsLjVdXSx0aGlzLl9kZWZhdWx0VGlja1BhZD10aGlzLnRpY2tQYWQuc2xpY2UoKSx0aGlzLl9kZWZhdWx0TGFiZWxQYWQ9dGhpcy5sYWJlbFBhZC5zbGljZSgpLHRoaXMuX2RlZmF1bHRMaW5lVGlja0xlbmd0aD10aGlzLmxpbmVUaWNrTGVuZ3RoLnNsaWNlKCl9by5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPDM7KytyKXt2YXIgbz1lW2Fbcl1dO28udmlzaWJsZT8odGhpcy5sYWJlbHNbcl09dC5tZXRhP2kudGVtcGxhdGVTdHJpbmcoby50aXRsZS50ZXh0LHttZXRhOnQubWV0YX0pOm8udGl0bGUudGV4dCxcImZvbnRcImluIG8udGl0bGUmJihvLnRpdGxlLmZvbnQuY29sb3ImJih0aGlzLmxhYmVsQ29sb3Jbcl09bihvLnRpdGxlLmZvbnQuY29sb3IpKSxvLnRpdGxlLmZvbnQuZmFtaWx5JiYodGhpcy5sYWJlbEZvbnRbcl09by50aXRsZS5mb250LmZhbWlseSksby50aXRsZS5mb250LnNpemUmJih0aGlzLmxhYmVsU2l6ZVtyXT1vLnRpdGxlLmZvbnQuc2l6ZSkpLFwic2hvd2xpbmVcImluIG8mJih0aGlzLmxpbmVFbmFibGVbcl09by5zaG93bGluZSksXCJsaW5lY29sb3JcImluIG8mJih0aGlzLmxpbmVDb2xvcltyXT1uKG8ubGluZWNvbG9yKSksXCJsaW5ld2lkdGhcImluIG8mJih0aGlzLmxpbmVXaWR0aFtyXT1vLmxpbmV3aWR0aCksXCJzaG93Z3JpZFwiaW4gbyYmKHRoaXMuZ3JpZEVuYWJsZVtyXT1vLnNob3dncmlkKSxcImdyaWRjb2xvclwiaW4gbyYmKHRoaXMuZ3JpZENvbG9yW3JdPW4oby5ncmlkY29sb3IpKSxcImdyaWR3aWR0aFwiaW4gbyYmKHRoaXMuZ3JpZFdpZHRoW3JdPW8uZ3JpZHdpZHRoKSxcImxvZ1wiPT09by50eXBlP3RoaXMuemVyb0VuYWJsZVtyXT0hMTpcInplcm9saW5lXCJpbiBvJiYodGhpcy56ZXJvRW5hYmxlW3JdPW8uemVyb2xpbmUpLFwiemVyb2xpbmVjb2xvclwiaW4gbyYmKHRoaXMuemVyb0xpbmVDb2xvcltyXT1uKG8uemVyb2xpbmVjb2xvcikpLFwiemVyb2xpbmV3aWR0aFwiaW4gbyYmKHRoaXMuemVyb0xpbmVXaWR0aFtyXT1vLnplcm9saW5ld2lkdGgpLFwidGlja3NcImluIG8mJm8udGlja3M/dGhpcy5saW5lVGlja0VuYWJsZVtyXT0hMDp0aGlzLmxpbmVUaWNrRW5hYmxlW3JdPSExLFwidGlja2xlblwiaW4gbyYmKHRoaXMubGluZVRpY2tMZW5ndGhbcl09dGhpcy5fZGVmYXVsdExpbmVUaWNrTGVuZ3RoW3JdPW8udGlja2xlbiksXCJ0aWNrY29sb3JcImluIG8mJih0aGlzLmxpbmVUaWNrQ29sb3Jbcl09bihvLnRpY2tjb2xvcikpLFwidGlja3dpZHRoXCJpbiBvJiYodGhpcy5saW5lVGlja1dpZHRoW3JdPW8udGlja3dpZHRoKSxcInRpY2thbmdsZVwiaW4gbyYmKHRoaXMudGlja0FuZ2xlW3JdPVwiYXV0b1wiPT09by50aWNrYW5nbGU/LTM2MDA6TWF0aC5QSSotby50aWNrYW5nbGUvMTgwKSxcInNob3d0aWNrbGFiZWxzXCJpbiBvJiYodGhpcy50aWNrRW5hYmxlW3JdPW8uc2hvd3RpY2tsYWJlbHMpLFwidGlja2ZvbnRcImluIG8mJihvLnRpY2tmb250LmNvbG9yJiYodGhpcy50aWNrQ29sb3Jbcl09bihvLnRpY2tmb250LmNvbG9yKSksby50aWNrZm9udC5mYW1pbHkmJih0aGlzLnRpY2tGb250W3JdPW8udGlja2ZvbnQuZmFtaWx5KSxvLnRpY2tmb250LnNpemUmJih0aGlzLnRpY2tTaXplW3JdPW8udGlja2ZvbnQuc2l6ZSkpLFwibWlycm9yXCJpbiBvPy0xIT09W1widGlja3NcIixcImFsbFwiLFwiYWxsdGlja3NcIl0uaW5kZXhPZihvLm1pcnJvcik/KHRoaXMubGluZVRpY2tNaXJyb3Jbcl09ITAsdGhpcy5saW5lTWlycm9yW3JdPSEwKTohMD09PW8ubWlycm9yPyh0aGlzLmxpbmVUaWNrTWlycm9yW3JdPSExLHRoaXMubGluZU1pcnJvcltyXT0hMCk6KHRoaXMubGluZVRpY2tNaXJyb3Jbcl09ITEsdGhpcy5saW5lTWlycm9yW3JdPSExKTp0aGlzLmxpbmVNaXJyb3Jbcl09ITEsXCJzaG93YmFja2dyb3VuZFwiaW4gbyYmITEhPT1vLnNob3diYWNrZ3JvdW5kPyh0aGlzLmJhY2tncm91bmRFbmFibGVbcl09ITAsdGhpcy5iYWNrZ3JvdW5kQ29sb3Jbcl09bihvLmJhY2tncm91bmRjb2xvcikpOnRoaXMuYmFja2dyb3VuZEVuYWJsZVtyXT0hMSk6KHRoaXMudGlja0VuYWJsZVtyXT0hMSx0aGlzLmxhYmVsRW5hYmxlW3JdPSExLHRoaXMubGluZUVuYWJsZVtyXT0hMSx0aGlzLmxpbmVUaWNrRW5hYmxlW3JdPSExLHRoaXMuZ3JpZEVuYWJsZVtyXT0hMSx0aGlzLnplcm9FbmFibGVbcl09ITEsdGhpcy5iYWNrZ3JvdW5kRW5hYmxlW3JdPSExKX19LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBvO3JldHVybiByLm1lcmdlKHQsZSkscn19LHtcIi4uLy4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIjo3MjR9XSw3OTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksYT10KFwiLi4vLi4vLi4vcmVnaXN0cnlcIiksbz10KFwiLi4vLi4vc3VicGxvdF9kZWZhdWx0c1wiKSxzPXQoXCIuL2F4aXNfZGVmYXVsdHNcIiksbD10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxjPXQoXCIuLi8uLi9nZXRfZGF0YVwiKS5nZXRTdWJwbG90RGF0YSx1PVwiZ2wzZFwiO2Z1bmN0aW9uIGgodCxlLHIsbil7Zm9yKHZhciBvPXIoXCJiZ2NvbG9yXCIpLGw9aS5jb21iaW5lKG8sbi5wYXBlcl9iZ2NvbG9yKSxoPVtcInVwXCIsXCJjZW50ZXJcIixcImV5ZVwiXSxmPTA7ZjxoLmxlbmd0aDtmKyspcihcImNhbWVyYS5cIitoW2ZdK1wiLnhcIikscihcImNhbWVyYS5cIitoW2ZdK1wiLnlcIikscihcImNhbWVyYS5cIitoW2ZdK1wiLnpcIik7cihcImNhbWVyYS5wcm9qZWN0aW9uLnR5cGVcIik7dmFyIHA9ISFyKFwiYXNwZWN0cmF0aW8ueFwiKSYmISFyKFwiYXNwZWN0cmF0aW8ueVwiKSYmISFyKFwiYXNwZWN0cmF0aW8uelwiKSxkPXIoXCJhc3BlY3Rtb2RlXCIscD9cIm1hbnVhbFwiOlwiYXV0b1wiKTtwfHwodC5hc3BlY3RyYXRpbz1lLmFzcGVjdHJhdGlvPXt4OjEseToxLHo6MX0sXCJtYW51YWxcIj09PWQmJihlLmFzcGVjdG1vZGU9XCJhdXRvXCIpLHQuYXNwZWN0bW9kZT1lLmFzcGVjdG1vZGUpO3ZhciBnPWMobi5mdWxsRGF0YSx1LG4uaWQpO3ModCxlLHtmb250Om4uZm9udCxzY2VuZTpuLmlkLGRhdGE6ZyxiZ0NvbG9yOmwsY2FsZW5kYXI6bi5jYWxlbmRhcixmdWxsTGF5b3V0Om4uZnVsbExheW91dH0pLGEuZ2V0Q29tcG9uZW50TWV0aG9kKFwiYW5ub3RhdGlvbnMzZFwiLFwiaGFuZGxlRGVmYXVsdHNcIikodCxlLG4pO3ZhciB2PW4uZ2V0RGZsdEZyb21MYXlvdXQoXCJkcmFnbW9kZVwiKTtpZighMSE9PXYmJiF2KWlmKHY9XCJvcmJpdFwiLHQuY2FtZXJhJiZ0LmNhbWVyYS51cCl7dmFyIG09dC5jYW1lcmEudXAueCx5PXQuY2FtZXJhLnVwLnkseD10LmNhbWVyYS51cC56OzAhPT14JiYobSYmeSYmeD94L01hdGguc3FydChtKm0reSp5K3gqeCk+Ljk5OSYmKHY9XCJ0dXJudGFibGVcIik6dj1cInR1cm50YWJsZVwiKX1lbHNlIHY9XCJ0dXJudGFibGVcIjtyKFwiZHJhZ21vZGVcIix2KSxyKFwiaG92ZXJtb2RlXCIsbi5nZXREZmx0RnJvbUxheW91dChcImhvdmVybW9kZVwiKSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1lLl9iYXNlUGxvdE1vZHVsZXMubGVuZ3RoPjE7byh0LGUscix7dHlwZTp1LGF0dHJpYnV0ZXM6bCxoYW5kbGVEZWZhdWx0czpoLGZ1bGxMYXlvdXQ6ZSxmb250OmUuZm9udCxmdWxsRGF0YTpyLGdldERmbHRGcm9tTGF5b3V0OmZ1bmN0aW9uKGUpe2lmKCFpKXJldHVybiBuLnZhbGlkYXRlKHRbZV0sbFtlXSk/dFtlXTp2b2lkIDB9LHBhcGVyX2JnY29sb3I6ZS5wYXBlcl9iZ2NvbG9yLGNhbGVuZGFyOmUuY2FsZW5kYXJ9KX19LHtcIi4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi8uLi9saWJcIjo3MDEsXCIuLi8uLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uLy4uL2dldF9kYXRhXCI6Nzg0LFwiLi4vLi4vc3VicGxvdF9kZWZhdWx0c1wiOjgyNCxcIi4vYXhpc19kZWZhdWx0c1wiOjc5MixcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo3OTV9XSw3OTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9heGlzX2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vZG9tYWluXCIpLmF0dHJpYnV0ZXMsYT10KFwiLi4vLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LG89dChcIi4uLy4uLy4uL2xpYlwiKS5jb3VudGVyUmVnZXg7ZnVuY3Rpb24gcyh0LGUscil7cmV0dXJue3g6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OnQsZWRpdFR5cGU6XCJjYW1lcmFcIn0seTp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6ZSxlZGl0VHlwZTpcImNhbWVyYVwifSx6Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDpyLGVkaXRUeXBlOlwiY2FtZXJhXCJ9LGVkaXRUeXBlOlwiY2FtZXJhXCJ9fWUuZXhwb3J0cz17X2FycmF5QXR0clJlZ2V4cHM6W28oXCJzY2VuZVwiLFwiLmFubm90YXRpb25zXCIsITApXSxiZ2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OlwicmdiYSgwLDAsMCwwKVwiLGVkaXRUeXBlOlwicGxvdFwifSxjYW1lcmE6e3VwOmEocygwLDAsMSkse30pLGNlbnRlcjphKHMoMCwwLDApLHt9KSxleWU6YShzKDEuMjUsMS4yNSwxLjI1KSx7fSkscHJvamVjdGlvbjp7dHlwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wicGVyc3BlY3RpdmVcIixcIm9ydGhvZ3JhcGhpY1wiXSxkZmx0OlwicGVyc3BlY3RpdmVcIixlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LGVkaXRUeXBlOlwiY2FtZXJhXCJ9LGRvbWFpbjppKHtuYW1lOlwic2NlbmVcIixlZGl0VHlwZTpcInBsb3RcIn0pLGFzcGVjdG1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImF1dG9cIixcImN1YmVcIixcImRhdGFcIixcIm1hbnVhbFwiXSxkZmx0OlwiYXV0b1wiLGVkaXRUeXBlOlwicGxvdFwiLGltcGxpZWRFZGl0czp7XCJhc3BlY3RyYXRpby54XCI6dm9pZCAwLFwiYXNwZWN0cmF0aW8ueVwiOnZvaWQgMCxcImFzcGVjdHJhdGlvLnpcIjp2b2lkIDB9fSxhc3BlY3RyYXRpbzp7eDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGVkaXRUeXBlOlwicGxvdFwiLGltcGxpZWRFZGl0czp7XCJeYXNwZWN0bW9kZVwiOlwibWFudWFsXCJ9fSx5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZWRpdFR5cGU6XCJwbG90XCIsaW1wbGllZEVkaXRzOntcIl5hc3BlY3Rtb2RlXCI6XCJtYW51YWxcIn19LHo6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxlZGl0VHlwZTpcInBsb3RcIixpbXBsaWVkRWRpdHM6e1wiXmFzcGVjdG1vZGVcIjpcIm1hbnVhbFwifX0sZWRpdFR5cGU6XCJwbG90XCIsaW1wbGllZEVkaXRzOnthc3BlY3Rtb2RlOlwibWFudWFsXCJ9fSx4YXhpczpuLHlheGlzOm4semF4aXM6bixkcmFnbW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wib3JiaXRcIixcInR1cm50YWJsZVwiLFwiem9vbVwiLFwicGFuXCIsITFdLGVkaXRUeXBlOlwicGxvdFwifSxob3Zlcm1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImNsb3Nlc3RcIiwhMV0sZGZsdDpcImNsb3Nlc3RcIixlZGl0VHlwZTpcIm1vZGViYXJcIn0sdWlyZXZpc2lvbjp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwibm9uZVwifSxlZGl0VHlwZTpcInBsb3RcIixfZGVwcmVjYXRlZDp7Y2FtZXJhcG9zaXRpb246e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsZWRpdFR5cGU6XCJjYW1lcmFcIn19fX0se1wiLi4vLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL2RvbWFpblwiOjc3NCxcIi4vYXhpc19hdHRyaWJ1dGVzXCI6NzkxfV0sNzk2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIiksaT1bXCJ4YXhpc1wiLFwieWF4aXNcIixcInpheGlzXCJdO2Z1bmN0aW9uIGEoKXt0aGlzLmVuYWJsZWQ9WyEwLCEwLCEwXSx0aGlzLmNvbG9ycz1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZHJhd1NpZGVzPVshMCwhMCwhMF0sdGhpcy5saW5lV2lkdGg9WzEsMSwxXX1hLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPDM7KytlKXt2YXIgcj10W2lbZV1dO3IudmlzaWJsZT8odGhpcy5lbmFibGVkW2VdPXIuc2hvd3NwaWtlcyx0aGlzLmNvbG9yc1tlXT1uKHIuc3Bpa2Vjb2xvciksdGhpcy5kcmF3U2lkZXNbZV09ci5zcGlrZXNpZGVzLHRoaXMubGluZVdpZHRoW2VdPXIuc3Bpa2V0aGlja25lc3MpOih0aGlzLmVuYWJsZWRbZV09ITEsdGhpcy5kcmF3U2lkZXNbZV09ITEpfX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBhO3JldHVybiBlLm1lcmdlKHQpLGV9fSx7XCIuLi8uLi8uLi9saWIvc3RyMnJnYmFycmF5XCI6NzI0fV0sNzk3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmF4ZXNPcHRpb25zLHI9dC5nbHBsb3QuYXhlc1BpeGVscyxzPXQuZnVsbFNjZW5lTGF5b3V0LGw9W1tdLFtdLFtdXSxjPTA7YzwzOysrYyl7dmFyIHU9c1thW2NdXTtpZih1Ll9sZW5ndGg9KHJbY10uaGktcltjXS5sbykqcltjXS5waXhlbHNQZXJEYXRhVW5pdC90LmRhdGFTY2FsZVtjXSxNYXRoLmFicyh1Ll9sZW5ndGgpPT09MS8wfHxpc05hTih1Ll9sZW5ndGgpKWxbY109W107ZWxzZXt1Ll9pbnB1dF9yYW5nZT11LnJhbmdlLnNsaWNlKCksdS5yYW5nZVswXT1yW2NdLmxvL3QuZGF0YVNjYWxlW2NdLHUucmFuZ2VbMV09cltjXS5oaS90LmRhdGFTY2FsZVtjXSx1Ll9tPTEvKHQuZGF0YVNjYWxlW2NdKnJbY10ucGl4ZWxzUGVyRGF0YVVuaXQpLHUucmFuZ2VbMF09PT11LnJhbmdlWzFdJiYodS5yYW5nZVswXS09MSx1LnJhbmdlWzFdKz0xKTt2YXIgaD11LnRpY2ttb2RlO2lmKFwiYXV0b1wiPT09dS50aWNrbW9kZSl7dS50aWNrbW9kZT1cImxpbmVhclwiO3ZhciBmPXUubnRpY2tzfHxpLmNvbnN0cmFpbih1Ll9sZW5ndGgvNDAsNCw5KTtuLmF1dG9UaWNrcyh1LE1hdGguYWJzKHUucmFuZ2VbMV0tdS5yYW5nZVswXSkvZil9Zm9yKHZhciBwPW4uY2FsY1RpY2tzKHUpLGQ9MDtkPHAubGVuZ3RoOysrZClwW2RdLng9cFtkXS54KnQuZGF0YVNjYWxlW2NdLFwiZGF0ZVwiPT09dS50eXBlJiYocFtkXS50ZXh0PXBbZF0udGV4dC5yZXBsYWNlKC9cXDxiclxcPi9nLFwiIFwiKSk7bFtjXT1wLHUudGlja21vZGU9aH19ZS50aWNrcz1sO2Zvcih2YXIgYz0wO2M8MzsrK2Mpe29bY109LjUqKHQuZ2xwbG90LmJvdW5kc1swXVtjXSt0LmdscGxvdC5ib3VuZHNbMV1bY10pO2Zvcih2YXIgZD0wO2Q8MjsrK2QpZS5ib3VuZHNbZF1bY109dC5nbHBsb3QuYm91bmRzW2RdW2NdfXQuY29udG91ckxldmVscz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KDMpLHI9MDtyPDM7KytyKXtmb3IodmFyIG49dFtyXSxpPW5ldyBBcnJheShuLmxlbmd0aCksYT0wO2E8bi5sZW5ndGg7KythKWlbYV09blthXS54O2Vbcl09aX1yZXR1cm4gZX0obCl9O3ZhciBuPXQoXCIuLi8uLi9jYXJ0ZXNpYW4vYXhlc1wiKSxpPXQoXCIuLi8uLi8uLi9saWJcIiksYT1bXCJ4YXhpc1wiLFwieWF4aXNcIixcInpheGlzXCJdLG89WzAsMCwwXX0se1wiLi4vLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vY2FydGVzaWFuL2F4ZXNcIjo3NDl9XSw3OTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7dmFyIHIsbixpPVswLDAsMCwwXTtmb3Iocj0wO3I8NDsrK3IpZm9yKG49MDtuPDQ7KytuKWlbbl0rPXRbNCpyK25dKmVbcl07cmV0dXJuIGl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odC5wcm9qZWN0aW9uLG4odC52aWV3LG4odC5tb2RlbCxbZVswXSxlWzFdLGVbMl0sMV0pKSl9fSx7fV0sNzk5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saSxhPXQoXCJnbC1wbG90M2RcIikuY3JlYXRlQ2FtZXJhLG89dChcImdsLXBsb3QzZFwiKS5jcmVhdGVTY2VuZSxzPXQoXCJ3ZWJnbC1jb250ZXh0XCIpLGw9dChcImhhcy1wYXNzaXZlLWV2ZW50c1wiKSxjPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSx1PXQoXCIuLi8uLi9saWJcIiksaD10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksZj10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxwPXQoXCIuLi8uLi9saWIvc3RyMnJnYmFycmF5XCIpLGQ9dChcIi4uLy4uL2xpYi9zaG93X25vX3dlYmdsX21zZ1wiKSxnPXQoXCIuL3Byb2plY3RcIiksdj10KFwiLi9sYXlvdXQvY29udmVydFwiKSxtPXQoXCIuL2xheW91dC9zcGlrZXNcIikseT10KFwiLi9sYXlvdXQvdGlja19tYXJrc1wiKTtmdW5jdGlvbiB4KHQsZSxyLGEpe2lmKHQuaW5pdGlhbGl6ZUdMQ2FtZXJhKCksIWZ1bmN0aW9uKHQsZSxyLGEsbCl7dmFyIGM9e2NhbnZhczphLGdsOmwsY29udGFpbmVyOnQuY29udGFpbmVyLGF4ZXM6dC5heGVzT3B0aW9ucyxzcGlrZXM6dC5zcGlrZU9wdGlvbnMscGlja1JhZGl1czoxMCxzbmFwVG9EYXRhOiEwLGF1dG9TY2FsZTohMCxhdXRvQm91bmRzOiExLGNhbWVyYU9iamVjdDplLHBpeGVsUmF0aW86cn07aWYodC5zdGF0aWNNb2RlKXtpZighKGl8fChuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksaT1zKHtjYW52YXM6bixwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITAscHJlbXVsdGlwbGllZEFscGhhOiEwLGFudGlhbGlhczohMH0pKSkpdGhyb3cgbmV3IEVycm9yKFwiZXJyb3IgY3JlYXRpbmcgc3RhdGljIGNhbnZhcy9jb250ZXh0IGZvciBpbWFnZSBzZXJ2ZXJcIik7Yy5waXhlbFJhdGlvPXQucGl4ZWxSYXRpbyxjLmdsPWksYy5jYW52YXM9bn10cnl7dC5nbHBsb3Q9byhjKX1jYXRjaCh0KXtyZXR1cm4hMX1yZXR1cm4hMH0odCx0LmNhbWVyYSxlLHIsYSkpcmV0dXJuIGQodCk7dmFyIGM9dC5ncmFwaERpdixwPWZ1bmN0aW9uKHQpe2lmKCExIT09dC5mdWxsU2NlbmVMYXlvdXQuZHJhZ21vZGUpe3ZhciBlPXt9O2VbdC5pZCtcIi5jYW1lcmFcIl09QSh0LmNhbWVyYSksdC5zYXZlQ2FtZXJhKGMubGF5b3V0KSx0LmdyYXBoRGl2LmVtaXQoXCJwbG90bHlfcmVsYXlvdXRcIixlKX19O3JldHVybiB0LmdscGxvdC5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixmdW5jdGlvbigpe3AodCl9KSx0LmdscGxvdC5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsZnVuY3Rpb24oKXtjLl9jb250ZXh0Ll9zY3JvbGxab29tLmdsM2QmJnAodCl9LCEhbCYme3Bhc3NpdmU6ITF9KSx0LnN0YXRpY01vZGV8fHQuZ2xwbG90LmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKFwid2ViZ2xjb250ZXh0bG9zdFwiLGZ1bmN0aW9uKGUpe2MmJmMuZW1pdCYmYy5lbWl0KFwicGxvdGx5X3dlYmdsY29udGV4dGxvc3RcIix7ZXZlbnQ6ZSxsYXllcjp0LmlkfSl9LCExKSx0LmdscGxvdC5jYW1lcmE9dC5jYW1lcmEsdC5nbHBsb3Qub25jb250ZXh0bG9zcz1mdW5jdGlvbigpe3QucmVjb3ZlckNvbnRleHQoKX0sdC5nbHBsb3Qub25yZW5kZXI9ZnVuY3Rpb24odCl7dmFyIGUscj10LmdyYXBoRGl2LG49dC5zdmdDb250YWluZXIsaT10LmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPWkud2lkdGgsbz1pLmhlaWdodDtuLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJ2aWV3Qm94XCIsXCIwIDAgXCIrYStcIiBcIitvKSxuLnNldEF0dHJpYnV0ZU5TKG51bGwsXCJ3aWR0aFwiLGEpLG4uc2V0QXR0cmlidXRlTlMobnVsbCxcImhlaWdodFwiLG8pLHkodCksdC5nbHBsb3QuYXhlcy51cGRhdGUodC5heGVzT3B0aW9ucyk7Zm9yKHZhciBzLGw9T2JqZWN0LmtleXModC50cmFjZXMpLGM9bnVsbCxwPXQuZ2xwbG90LnNlbGVjdGlvbixkPTA7ZDxsLmxlbmd0aDsrK2QpXCJza2lwXCIhPT0oZT10LnRyYWNlc1tsW2RdXSkuZGF0YS5ob3ZlcmluZm8mJmUuaGFuZGxlUGljayhwKSYmKGM9ZSksZS5zZXRDb250b3VyTGV2ZWxzJiZlLnNldENvbnRvdXJMZXZlbHMoKTtmdW5jdGlvbiB2KGUscil7dmFyIG49dC5mdWxsU2NlbmVMYXlvdXRbZV07cmV0dXJuIGgudGlja1RleHQobixuLmQybChyKSxcImhvdmVyXCIpLnRleHR9aWYobnVsbCE9PWMpe3ZhciBtPWcodC5nbHBsb3QuY2FtZXJhUGFyYW1zLHAuZGF0YUNvb3JkaW5hdGUpO2U9Yy5kYXRhO3ZhciB4LGI9ci5fZnVsbERhdGFbZS5pbmRleF0sXz1wLmluZGV4LHc9e3hMYWJlbDp2KFwieGF4aXNcIixwLnRyYWNlQ29vcmRpbmF0ZVswXSkseUxhYmVsOnYoXCJ5YXhpc1wiLHAudHJhY2VDb29yZGluYXRlWzFdKSx6TGFiZWw6dihcInpheGlzXCIscC50cmFjZUNvb3JkaW5hdGVbMl0pfSxrPWYuY2FzdEhvdmVyaW5mbyhiLHQuZnVsbExheW91dCxfKSxBPShrfHxcIlwiKS5zcGxpdChcIitcIiksVD1rJiZcImFsbFwiPT09aztiLmhvdmVydGVtcGxhdGV8fFR8fCgtMT09PUEuaW5kZXhPZihcInhcIikmJih3LnhMYWJlbD12b2lkIDApLC0xPT09QS5pbmRleE9mKFwieVwiKSYmKHcueUxhYmVsPXZvaWQgMCksLTE9PT1BLmluZGV4T2YoXCJ6XCIpJiYody56TGFiZWw9dm9pZCAwKSwtMT09PUEuaW5kZXhPZihcInRleHRcIikmJihwLnRleHRMYWJlbD12b2lkIDApLC0xPT09QS5pbmRleE9mKFwibmFtZVwiKSYmKGMubmFtZT12b2lkIDApKTt2YXIgTT1bXTtcImNvbmVcIj09PWUudHlwZXx8XCJzdHJlYW10dWJlXCI9PT1lLnR5cGU/KHcudUxhYmVsPXYoXCJ4YXhpc1wiLHAudHJhY2VDb29yZGluYXRlWzNdKSwoVHx8LTEhPT1BLmluZGV4T2YoXCJ1XCIpKSYmTS5wdXNoKFwidTogXCIrdy51TGFiZWwpLHcudkxhYmVsPXYoXCJ5YXhpc1wiLHAudHJhY2VDb29yZGluYXRlWzRdKSwoVHx8LTEhPT1BLmluZGV4T2YoXCJ2XCIpKSYmTS5wdXNoKFwidjogXCIrdy52TGFiZWwpLHcud0xhYmVsPXYoXCJ6YXhpc1wiLHAudHJhY2VDb29yZGluYXRlWzVdKSwoVHx8LTEhPT1BLmluZGV4T2YoXCJ3XCIpKSYmTS5wdXNoKFwidzogXCIrdy53TGFiZWwpLHcubm9ybUxhYmVsPXAudHJhY2VDb29yZGluYXRlWzZdLnRvUHJlY2lzaW9uKDMpLChUfHwtMSE9PUEuaW5kZXhPZihcIm5vcm1cIikpJiZNLnB1c2goXCJub3JtOiBcIit3Lm5vcm1MYWJlbCksXCJzdHJlYW10dWJlXCI9PT1lLnR5cGUmJih3LmRpdmVyZ2VuY2VMYWJlbD1wLnRyYWNlQ29vcmRpbmF0ZVs3XS50b1ByZWNpc2lvbigzKSwoVHx8LTEhPT1BLmluZGV4T2YoXCJkaXZlcmdlbmNlXCIpKSYmTS5wdXNoKFwiZGl2ZXJnZW5jZTogXCIrdy5kaXZlcmdlbmNlTGFiZWwpKSxwLnRleHRMYWJlbCYmTS5wdXNoKHAudGV4dExhYmVsKSx4PU0uam9pbihcIjxicj5cIikpOlwiaXNvc3VyZmFjZVwiPT09ZS50eXBlfHxcInZvbHVtZVwiPT09ZS50eXBlPyh3LnZhbHVlTGFiZWw9aC50aWNrVGV4dCh0Lm1vY2tBeGlzLHQubW9ja0F4aXMuZDJsKHAudHJhY2VDb29yZGluYXRlWzNdKSxcImhvdmVyXCIpLnRleHQsTS5wdXNoKFwidmFsdWU6IFwiK3cudmFsdWVMYWJlbCkscC50ZXh0TGFiZWwmJk0ucHVzaChwLnRleHRMYWJlbCkseD1NLmpvaW4oXCI8YnI+XCIpKTp4PXAudGV4dExhYmVsO3ZhciBTPXt4OnAudHJhY2VDb29yZGluYXRlWzBdLHk6cC50cmFjZUNvb3JkaW5hdGVbMV0sejpwLnRyYWNlQ29vcmRpbmF0ZVsyXSxkYXRhOmIuX2lucHV0LGZ1bGxEYXRhOmIsY3VydmVOdW1iZXI6Yi5pbmRleCxwb2ludE51bWJlcjpffTtmLmFwcGVuZEFycmF5UG9pbnRWYWx1ZShTLGIsXyksZS5fbW9kdWxlLmV2ZW50RGF0YSYmKFM9Yi5fbW9kdWxlLmV2ZW50RGF0YShTLHAsYix7fSxfKSk7dmFyIEU9e3BvaW50czpbU119O3QuZnVsbFNjZW5lTGF5b3V0LmhvdmVybW9kZSYmZi5sb25lSG92ZXIoe3RyYWNlOmIseDooLjUrLjUqbVswXS9tWzNdKSphLHk6KC41LS41Km1bMV0vbVszXSkqbyx4TGFiZWw6dy54TGFiZWwseUxhYmVsOncueUxhYmVsLHpMYWJlbDp3LnpMYWJlbCx0ZXh0OngsbmFtZTpjLm5hbWUsY29sb3I6Zi5jYXN0SG92ZXJPcHRpb24oYixfLFwiYmdjb2xvclwiKXx8Yy5jb2xvcixib3JkZXJDb2xvcjpmLmNhc3RIb3Zlck9wdGlvbihiLF8sXCJib3JkZXJjb2xvclwiKSxmb250RmFtaWx5OmYuY2FzdEhvdmVyT3B0aW9uKGIsXyxcImZvbnQuZmFtaWx5XCIpLGZvbnRTaXplOmYuY2FzdEhvdmVyT3B0aW9uKGIsXyxcImZvbnQuc2l6ZVwiKSxmb250Q29sb3I6Zi5jYXN0SG92ZXJPcHRpb24oYixfLFwiZm9udC5jb2xvclwiKSxuYW1lTGVuZ3RoOmYuY2FzdEhvdmVyT3B0aW9uKGIsXyxcIm5hbWVsZW5ndGhcIiksdGV4dEFsaWduOmYuY2FzdEhvdmVyT3B0aW9uKGIsXyxcImFsaWduXCIpLGhvdmVydGVtcGxhdGU6dS5jYXN0T3B0aW9uKGIsXyxcImhvdmVydGVtcGxhdGVcIiksaG92ZXJ0ZW1wbGF0ZUxhYmVsczp1LmV4dGVuZEZsYXQoe30sUyx3KSxldmVudERhdGE6W1NdfSx7Y29udGFpbmVyOm4sZ2Q6cn0pLHAuYnV0dG9ucyYmcC5kaXN0YW5jZTw1P3IuZW1pdChcInBsb3RseV9jbGlja1wiLEUpOnIuZW1pdChcInBsb3RseV9ob3ZlclwiLEUpLHM9RX1lbHNlIGYubG9uZVVuaG92ZXIobiksci5lbWl0KFwicGxvdGx5X3VuaG92ZXJcIixzKTt0LmRyYXdBbm5vdGF0aW9ucyh0KX0uYmluZChudWxsLHQpLHQudHJhY2VzPXt9LHQubWFrZTR0aERpbWVuc2lvbigpLCEwfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLG49dC5jb250YWluZXI7dGhpcy5ncmFwaERpdj10LmdyYXBoRGl2O3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXCJzdmdcIik7aS5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsaS5zdHlsZS50b3A9aS5zdHlsZS5sZWZ0PVwiMHB4XCIsaS5zdHlsZS53aWR0aD1pLnN0eWxlLmhlaWdodD1cIjEwMCVcIixpLnN0eWxlW1wiei1pbmRleFwiXT0yMCxpLnN0eWxlW1wicG9pbnRlci1ldmVudHNcIl09XCJub25lXCIsci5hcHBlbmRDaGlsZChpKSx0aGlzLnN2Z0NvbnRhaW5lcj1pLHIuaWQ9dC5pZCxyLnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixyLnN0eWxlLnRvcD1yLnN0eWxlLmxlZnQ9XCIwcHhcIixyLnN0eWxlLndpZHRoPXIuc3R5bGUuaGVpZ2h0PVwiMTAwJVwiLG4uYXBwZW5kQ2hpbGQociksdGhpcy5mdWxsTGF5b3V0PWUsdGhpcy5pZD10LmlkfHxcInNjZW5lXCIsdGhpcy5mdWxsU2NlbmVMYXlvdXQ9ZVt0aGlzLmlkXSx0aGlzLnBsb3RBcmdzPVtbXSx7fSx7fV0sdGhpcy5heGVzT3B0aW9ucz12KGUsZVt0aGlzLmlkXSksdGhpcy5zcGlrZU9wdGlvbnM9bShlW3RoaXMuaWRdKSx0aGlzLmNvbnRhaW5lcj1yLHRoaXMuc3RhdGljTW9kZT0hIXQuc3RhdGljUGxvdCx0aGlzLnBpeGVsUmF0aW89dGhpcy5waXhlbFJhdGlvfHx0LnBsb3RHbFBpeGVsUmF0aW98fDIsdGhpcy5kYXRhU2NhbGU9WzEsMSwxXSx0aGlzLmNvbnRvdXJMZXZlbHM9W1tdLFtdLFtdXSx0aGlzLmNvbnZlcnRBbm5vdGF0aW9ucz1jLmdldENvbXBvbmVudE1ldGhvZChcImFubm90YXRpb25zM2RcIixcImNvbnZlcnRcIiksdGhpcy5kcmF3QW5ub3RhdGlvbnM9Yy5nZXRDb21wb25lbnRNZXRob2QoXCJhbm5vdGF0aW9uczNkXCIsXCJkcmF3XCIpLHgodGhpcyx0aGlzLnBpeGVsUmF0aW8pfXZhciBfPWIucHJvdG90eXBlO18uaW5pdGlhbGl6ZUdMQ2FtZXJhPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5mdWxsU2NlbmVMYXlvdXQuY2FtZXJhLGU9XCJvcnRob2dyYXBoaWNcIj09PXQucHJvamVjdGlvbi50eXBlO3RoaXMuY2FtZXJhPWEodGhpcy5jb250YWluZXIse2NlbnRlcjpbdC5jZW50ZXIueCx0LmNlbnRlci55LHQuY2VudGVyLnpdLGV5ZTpbdC5leWUueCx0LmV5ZS55LHQuZXllLnpdLHVwOlt0LnVwLngsdC51cC55LHQudXAuel0sX29ydGhvOmUsem9vbU1pbjouMDEsem9vbU1heDoxMDAsbW9kZTpcIm9yYml0XCJ9KX0sXy5yZWNvdmVyQ29udGV4dD1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLmdscGxvdC5nbCxyPXRoaXMuZ2xwbG90LmNhbnZhcyxuPXRoaXMuZ2xwbG90LmNhbWVyYSxpPXRoaXMuZ2xwbG90LnBpeGVsUmF0aW87dGhpcy5nbHBsb3QuZGlzcG9zZSgpLHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiBhKCl7ZS5pc0NvbnRleHRMb3N0KCk/cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGEpOngodCxuLGkscik/dC5wbG90LmFwcGx5KHQsdC5wbG90QXJncyk6dS5lcnJvcihcIkNhdGFzdHJvcGhpYyBhbmQgdW5yZWNvdmVyYWJsZSBXZWJHTCBlcnJvci4gQ29udGV4dCBsb3N0LlwiKX0pfTt2YXIgdz1bXCJ4YXhpc1wiLFwieWF4aXNcIixcInpheGlzXCJdO2Z1bmN0aW9uIGsodCxlLHIpe2Zvcih2YXIgbj10LmZ1bGxTY2VuZUxheW91dCxpPTA7aTwzO2krKyl7dmFyIGE9d1tpXSxvPWEuY2hhckF0KDApLHM9blthXSxsPWVbb10sYz1lW28rXCJjYWxlbmRhclwiXSxoPWVbXCJfXCIrbytcImxlbmd0aFwiXTtpZih1LmlzQXJyYXlPclR5cGVkQXJyYXkobCkpZm9yKHZhciBmLHA9MDtwPChofHxsLmxlbmd0aCk7cCsrKWlmKHUuaXNBcnJheU9yVHlwZWRBcnJheShsW3BdKSlmb3IodmFyIGQ9MDtkPGxbcF0ubGVuZ3RoOysrZClmPXMuZDJsKGxbcF1bZF0sMCxjKSwhaXNOYU4oZikmJmlzRmluaXRlKGYpJiYoclswXVtpXT1NYXRoLm1pbihyWzBdW2ldLGYpLHJbMV1baV09TWF0aC5tYXgoclsxXVtpXSxmKSk7ZWxzZSBmPXMuZDJsKGxbcF0sMCxjKSwhaXNOYU4oZikmJmlzRmluaXRlKGYpJiYoclswXVtpXT1NYXRoLm1pbihyWzBdW2ldLGYpLHJbMV1baV09TWF0aC5tYXgoclsxXVtpXSxmKSk7ZWxzZSByWzBdW2ldPU1hdGgubWluKHJbMF1baV0sMCksclsxXVtpXT1NYXRoLm1heChyWzFdW2ldLGgtMSl9fWZ1bmN0aW9uIEEodCl7cmV0dXJue3VwOnt4OnQudXBbMF0seTp0LnVwWzFdLHo6dC51cFsyXX0sY2VudGVyOnt4OnQuY2VudGVyWzBdLHk6dC5jZW50ZXJbMV0sejp0LmNlbnRlclsyXX0sZXllOnt4OnQuZXllWzBdLHk6dC5leWVbMV0sejp0LmV5ZVsyXX0scHJvamVjdGlvbjp7dHlwZTohMD09PXQuX29ydGhvP1wib3J0aG9ncmFwaGljXCI6XCJwZXJzcGVjdGl2ZVwifX19Xy5wbG90PWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLnBsb3RBcmdzPVt0LGUscl0sIXRoaXMuZ2xwbG90LmNvbnRleHRMb3N0KXt2YXIgbixpLGEsbyxzLGwsYz1lW3RoaXMuaWRdLHU9clt0aGlzLmlkXTtjLmJnY29sb3I/dGhpcy5nbHBsb3QuY2xlYXJDb2xvcj1wKGMuYmdjb2xvcik6dGhpcy5nbHBsb3QuY2xlYXJDb2xvcj1bMCwwLDAsMF0sdGhpcy5nbHBsb3Quc25hcFRvRGF0YT0hMCx0aGlzLmZ1bGxMYXlvdXQ9ZSx0aGlzLmZ1bGxTY2VuZUxheW91dD1jLHRoaXMuZ2xwbG90TGF5b3V0PWMsdGhpcy5heGVzT3B0aW9ucy5tZXJnZShlLGMpLHRoaXMuc3Bpa2VPcHRpb25zLm1lcmdlKGMpLHRoaXMuc2V0Q2FtZXJhKGMuY2FtZXJhKSx0aGlzLnVwZGF0ZUZ4KGMuZHJhZ21vZGUsYy5ob3Zlcm1vZGUpLHRoaXMuY2FtZXJhLmVuYWJsZVdoZWVsPXRoaXMuZ3JhcGhEaXYuX2NvbnRleHQuX3Njcm9sbFpvb20uZ2wzZCx0aGlzLmdscGxvdC51cGRhdGUoe30pLHRoaXMuc2V0Q29udmVydChzKSx0P0FycmF5LmlzQXJyYXkodCl8fCh0PVt0XSk6dD1bXTt2YXIgaD1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXTtmb3IoYT0wO2E8dC5sZW5ndGg7KythKSEwPT09KG49dFthXSkudmlzaWJsZSYmayh0aGlzLG4saCk7IWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuZnVsbFNjZW5lTGF5b3V0LG49ci5hbm5vdGF0aW9uc3x8W10saT0wO2k8MztpKyspZm9yKHZhciBhPXdbaV0sbz1hLmNoYXJBdCgwKSxzPXJbYV0sbD0wO2w8bi5sZW5ndGg7bCsrKXt2YXIgYz1uW2xdO2lmKGMudmlzaWJsZSl7dmFyIHU9cy5yMmwoY1tvXSk7IWlzTmFOKHUpJiZpc0Zpbml0ZSh1KSYmKGVbMF1baV09TWF0aC5taW4oZVswXVtpXSx1KSxlWzFdW2ldPU1hdGgubWF4KGVbMV1baV0sdSkpfX19KHRoaXMsaCk7dmFyIGY9WzEsMSwxXTtmb3Iobz0wO288MzsrK28paFsxXVtvXT09PWhbMF1bb10/ZltvXT0xOmZbb109MS8oaFsxXVtvXS1oWzBdW29dKTtmb3IodGhpcy5kYXRhU2NhbGU9Zix0aGlzLmNvbnZlcnRBbm5vdGF0aW9ucyh0aGlzKSxhPTA7YTx0Lmxlbmd0aDsrK2EpITA9PT0obj10W2FdKS52aXNpYmxlJiYoKGk9dGhpcy50cmFjZXNbbi51aWRdKT9pLmRhdGEudHlwZT09PW4udHlwZT9pLnVwZGF0ZShuKTooaS5kaXNwb3NlKCksaT1uLl9tb2R1bGUucGxvdCh0aGlzLG4pLHRoaXMudHJhY2VzW24udWlkXT1pKTooaT1uLl9tb2R1bGUucGxvdCh0aGlzLG4pLHRoaXMudHJhY2VzW24udWlkXT1pKSxpLm5hbWU9bi5uYW1lKTt2YXIgZD1PYmplY3Qua2V5cyh0aGlzLnRyYWNlcyk7dDpmb3IoYT0wO2E8ZC5sZW5ndGg7KythKXtmb3Iobz0wO288dC5sZW5ndGg7KytvKWlmKHRbb10udWlkPT09ZFthXSYmITA9PT10W29dLnZpc2libGUpY29udGludWUgdDsoaT10aGlzLnRyYWNlc1tkW2FdXSkuZGlzcG9zZSgpLGRlbGV0ZSB0aGlzLnRyYWNlc1tkW2FdXX10aGlzLmdscGxvdC5vYmplY3RzLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fdHJhY2UuZGF0YS5pbmRleC1lLl90cmFjZS5kYXRhLmluZGV4fSk7dmFyIGc9W1swLDAsMF0sWzAsMCwwXV0sdj1bXSxtPXt9O2ZvcihhPTA7YTwzOysrYSl7aWYoKGw9KHM9Y1t3W2FdXSkudHlwZSlpbiBtPyhtW2xdLmFjYyo9ZlthXSxtW2xdLmNvdW50Kz0xKTptW2xdPXthY2M6ZlthXSxjb3VudDoxfSxzLmF1dG9yYW5nZSl7Z1swXVthXT0xLzAsZ1sxXVthXT0tMS8wO3ZhciB5PXRoaXMuZ2xwbG90Lm9iamVjdHMseD10aGlzLmZ1bGxTY2VuZUxheW91dC5hbm5vdGF0aW9uc3x8W10sYj1zLl9uYW1lLmNoYXJBdCgwKTtmb3Iobz0wO288eS5sZW5ndGg7bysrKXt2YXIgXz15W29dLEE9Xy5ib3VuZHMsVD1fLl90cmFjZS5kYXRhLl9wYWR8fDA7XCJFcnJvckJhcnNcIj09PV8uY29uc3RydWN0b3IubmFtZSYmcy5fbG93ZXJMb2dFcnJvckJvdW5kP2dbMF1bYV09TWF0aC5taW4oZ1swXVthXSxzLl9sb3dlckxvZ0Vycm9yQm91bmQpOmdbMF1bYV09TWF0aC5taW4oZ1swXVthXSxBWzBdW2FdL2ZbYV0tVCksZ1sxXVthXT1NYXRoLm1heChnWzFdW2FdLEFbMV1bYV0vZlthXStUKX1mb3Iobz0wO288eC5sZW5ndGg7bysrKXt2YXIgTT14W29dO2lmKE0udmlzaWJsZSl7dmFyIFM9cy5yMmwoTVtiXSk7Z1swXVthXT1NYXRoLm1pbihnWzBdW2FdLFMpLGdbMV1bYV09TWF0aC5tYXgoZ1sxXVthXSxTKX19aWYoXCJyYW5nZW1vZGVcImluIHMmJlwidG96ZXJvXCI9PT1zLnJhbmdlbW9kZSYmKGdbMF1bYV09TWF0aC5taW4oZ1swXVthXSwwKSxnWzFdW2FdPU1hdGgubWF4KGdbMV1bYV0sMCkpLGdbMF1bYV0+Z1sxXVthXSlnWzBdW2FdPS0xLGdbMV1bYV09MTtlbHNle3ZhciBFPWdbMV1bYV0tZ1swXVthXTtnWzBdW2FdLT1FLzMyLGdbMV1bYV0rPUUvMzJ9aWYoXCJyZXZlcnNlZFwiPT09cy5hdXRvcmFuZ2Upe3ZhciBDPWdbMF1bYV07Z1swXVthXT1nWzFdW2FdLGdbMV1bYV09Q319ZWxzZXt2YXIgTD1zLnJhbmdlO2dbMF1bYV09cy5yMmwoTFswXSksZ1sxXVthXT1zLnIybChMWzFdKX1nWzBdW2FdPT09Z1sxXVthXSYmKGdbMF1bYV0tPTEsZ1sxXVthXSs9MSksdlthXT1nWzFdW2FdLWdbMF1bYV0sdGhpcy5nbHBsb3QuYm91bmRzWzBdW2FdPWdbMF1bYV0qZlthXSx0aGlzLmdscGxvdC5ib3VuZHNbMV1bYV09Z1sxXVthXSpmW2FdfXZhciB6PVsxLDEsMV07Zm9yKGE9MDthPDM7KythKXt2YXIgTz1tW2w9KHM9Y1t3W2FdXSkudHlwZV07elthXT1NYXRoLnBvdyhPLmFjYywxL08uY291bnQpL2ZbYV19dmFyIEk7aWYoXCJhdXRvXCI9PT1jLmFzcGVjdG1vZGUpST1NYXRoLm1heC5hcHBseShudWxsLHopL01hdGgubWluLmFwcGx5KG51bGwseik8PTQ/ejpbMSwxLDFdO2Vsc2UgaWYoXCJjdWJlXCI9PT1jLmFzcGVjdG1vZGUpST1bMSwxLDFdO2Vsc2UgaWYoXCJkYXRhXCI9PT1jLmFzcGVjdG1vZGUpST16O2Vsc2V7aWYoXCJtYW51YWxcIiE9PWMuYXNwZWN0bW9kZSl0aHJvdyBuZXcgRXJyb3IoXCJzY2VuZS5qcyBhc3BlY3RSYXRpbyB3YXMgbm90IG9uZSBvZiB0aGUgZW51bWVyYXRlZCB0eXBlc1wiKTt2YXIgRD1jLmFzcGVjdHJhdGlvO0k9W0QueCxELnksRC56XX1jLmFzcGVjdHJhdGlvLng9dS5hc3BlY3RyYXRpby54PUlbMF0sYy5hc3BlY3RyYXRpby55PXUuYXNwZWN0cmF0aW8ueT1JWzFdLGMuYXNwZWN0cmF0aW8uej11LmFzcGVjdHJhdGlvLno9SVsyXSx0aGlzLmdscGxvdC5hc3BlY3Q9STt2YXIgUD1jLmRvbWFpbnx8bnVsbCxSPWUuX3NpemV8fG51bGw7aWYoUCYmUil7dmFyIEY9dGhpcy5jb250YWluZXIuc3R5bGU7Ri5wb3NpdGlvbj1cImFic29sdXRlXCIsRi5sZWZ0PVIubCtQLnhbMF0qUi53K1wicHhcIixGLnRvcD1SLnQrKDEtUC55WzFdKSpSLmgrXCJweFwiLEYud2lkdGg9Ui53KihQLnhbMV0tUC54WzBdKStcInB4XCIsRi5oZWlnaHQ9Ui5oKihQLnlbMV0tUC55WzBdKStcInB4XCJ9dGhpcy5nbHBsb3QucmVkcmF3KCl9fSxfLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmdscGxvdCYmKHRoaXMuY2FtZXJhLm1vdXNlTGlzdGVuZXIuZW5hYmxlZD0hMSx0aGlzLmNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKFwid2hlZWxcIix0aGlzLmNhbWVyYS53aGVlbExpc3RlbmVyKSx0aGlzLmNhbWVyYT10aGlzLmdscGxvdC5jYW1lcmE9bnVsbCx0aGlzLmdscGxvdC5kaXNwb3NlKCksdGhpcy5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lciksdGhpcy5nbHBsb3Q9bnVsbCl9LF8uZ2V0Q2FtZXJhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2xwbG90LmNhbWVyYS52aWV3LnJlY2FsY01hdHJpeCh0aGlzLmNhbWVyYS52aWV3Lmxhc3RUKCkpLEEodGhpcy5nbHBsb3QuY2FtZXJhKX0sXy5zZXRDYW1lcmE9ZnVuY3Rpb24odCl7dmFyIGU7dGhpcy5nbHBsb3QuY2FtZXJhLmxvb2tBdC5hcHBseSh0aGlzLFtbKGU9dCkuZXllLngsZS5leWUueSxlLmV5ZS56XSxbZS5jZW50ZXIueCxlLmNlbnRlci55LGUuY2VudGVyLnpdLFtlLnVwLngsZS51cC55LGUudXAuel1dKTt2YXIgcj1cIm9ydGhvZ3JhcGhpY1wiPT09dC5wcm9qZWN0aW9uLnR5cGU7aWYociE9PXRoaXMuZ2xwbG90LmNhbWVyYS5fb3J0aG8pe3RoaXMuZ2xwbG90LnJlZHJhdygpO3ZhciBuPXRoaXMuZ2xwbG90LnBpeGVsUmF0aW8saT10aGlzLmdscGxvdC5jbGVhckNvbG9yO3RoaXMuZ2xwbG90LmdsLmNsZWFyQ29sb3IoaVswXSxpWzFdLGlbMl0saVszXSksdGhpcy5nbHBsb3QuZ2wuY2xlYXIodGhpcy5nbHBsb3QuZ2wuREVQVEhfQlVGRkVSX0JJVHx0aGlzLmdscGxvdC5nbC5DT0xPUl9CVUZGRVJfQklUKSx0aGlzLmdscGxvdC5kaXNwb3NlKCkseCh0aGlzLG4pLHRoaXMuZ2xwbG90LmNhbWVyYS5fb3J0aG89cn19LF8uc2F2ZUNhbWVyYT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZ1bGxMYXlvdXQscj10aGlzLmdldENhbWVyYSgpLG49dS5uZXN0ZWRQcm9wZXJ0eSh0LHRoaXMuaWQrXCIuY2FtZXJhXCIpLGk9bi5nZXQoKSxhPSExO2Z1bmN0aW9uIG8odCxlLHIsbil7dmFyIGk9W1widXBcIixcImNlbnRlclwiLFwiZXllXCJdLGE9W1wieFwiLFwieVwiLFwielwiXTtyZXR1cm4gZVtpW3JdXSYmdFtpW3JdXVthW25dXT09PWVbaVtyXV1bYVtuXV19aWYodm9pZCAwPT09aSlhPSEwO2Vsc2V7Zm9yKHZhciBzPTA7czwzO3MrKylmb3IodmFyIGw9MDtsPDM7bCsrKWlmKCFvKHIsaSxzLGwpKXthPSEwO2JyZWFrfSghaS5wcm9qZWN0aW9ufHxyLnByb2plY3Rpb24mJnIucHJvamVjdGlvbi50eXBlIT09aS5wcm9qZWN0aW9uLnR5cGUpJiYoYT0hMCl9aWYoYSl7dmFyIGg9e307aFt0aGlzLmlkK1wiLmNhbWVyYVwiXT1pLGMuY2FsbChcIl9zdG9yZURpcmVjdEdVSUVkaXRcIix0LGUuX3ByZUdVSSxoKSxuLnNldChyKSx1Lm5lc3RlZFByb3BlcnR5KGUsdGhpcy5pZCtcIi5jYW1lcmFcIikuc2V0KHIpfXJldHVybiBhfSxfLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jYW1lcmE7aWYocilpZihcIm9yYml0XCI9PT10KXIubW9kZT1cIm9yYml0XCIsci5rZXlCaW5kaW5nTW9kZT1cInJvdGF0ZVwiO2Vsc2UgaWYoXCJ0dXJudGFibGVcIj09PXQpe3IudXA9WzAsMCwxXSxyLm1vZGU9XCJ0dXJudGFibGVcIixyLmtleUJpbmRpbmdNb2RlPVwicm90YXRlXCI7dmFyIG49dGhpcy5ncmFwaERpdixpPW4uX2Z1bGxMYXlvdXQsYT10aGlzLmZ1bGxTY2VuZUxheW91dC5jYW1lcmEsbz1hLnVwLngscz1hLnVwLnksbD1hLnVwLno7aWYobC9NYXRoLnNxcnQobypvK3MqcytsKmwpPC45OTkpe3ZhciBoPXRoaXMuaWQrXCIuY2FtZXJhLnVwXCIsZj17eDowLHk6MCx6OjF9LHA9e307cFtoXT1mO3ZhciBkPW4ubGF5b3V0O2MuY2FsbChcIl9zdG9yZURpcmVjdEdVSUVkaXRcIixkLGkuX3ByZUdVSSxwKSxhLnVwPWYsdS5uZXN0ZWRQcm9wZXJ0eShkLGgpLnNldChmKX19ZWxzZSByLmtleUJpbmRpbmdNb2RlPXQ7dGhpcy5mdWxsU2NlbmVMYXlvdXQuaG92ZXJtb2RlPWV9LF8udG9JbWFnZT1mdW5jdGlvbih0KXt0fHwodD1cInBuZ1wiKSx0aGlzLnN0YXRpY01vZGUmJnRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKG4pLHRoaXMuZ2xwbG90LnJlZHJhdygpO3ZhciBlPXRoaXMuZ2xwbG90LmdsLHI9ZS5kcmF3aW5nQnVmZmVyV2lkdGgsaT1lLmRyYXdpbmdCdWZmZXJIZWlnaHQ7ZS5iaW5kRnJhbWVidWZmZXIoZS5GUkFNRUJVRkZFUixudWxsKTt2YXIgYT1uZXcgVWludDhBcnJheShyKmkqNCk7ZS5yZWFkUGl4ZWxzKDAsMCxyLGksZS5SR0JBLGUuVU5TSUdORURfQllURSxhKTtmb3IodmFyIG89MCxzPWktMTtvPHM7KytvLC0tcylmb3IodmFyIGw9MDtsPHI7KytsKWZvcih2YXIgYz0wO2M8NDsrK2Mpe3ZhciB1PWFbNCoocipvK2wpK2NdO2FbNCoocipvK2wpK2NdPWFbNCoocipzK2wpK2NdLGFbNCoocipzK2wpK2NdPXV9dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtoLndpZHRoPXIsaC5oZWlnaHQ9aTt2YXIgZixwPWguZ2V0Q29udGV4dChcIjJkXCIpLGQ9cC5jcmVhdGVJbWFnZURhdGEocixpKTtzd2l0Y2goZC5kYXRhLnNldChhKSxwLnB1dEltYWdlRGF0YShkLDAsMCksdCl7Y2FzZVwianBlZ1wiOmY9aC50b0RhdGFVUkwoXCJpbWFnZS9qcGVnXCIpO2JyZWFrO2Nhc2VcIndlYnBcIjpmPWgudG9EYXRhVVJMKFwiaW1hZ2Uvd2VicFwiKTticmVhaztkZWZhdWx0OmY9aC50b0RhdGFVUkwoXCJpbWFnZS9wbmdcIil9cmV0dXJuIHRoaXMuc3RhdGljTW9kZSYmdGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQobiksZn0sXy5zZXRDb252ZXJ0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDwzO3QrKyl7dmFyIGU9dGhpcy5mdWxsU2NlbmVMYXlvdXRbd1t0XV07aC5zZXRDb252ZXJ0KGUsdGhpcy5mdWxsTGF5b3V0KSxlLnNldFNjYWxlPXUubm9vcH19LF8ubWFrZTR0aERpbWVuc2lvbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQ7dGhpcy5tb2NrQXhpcz17dHlwZTpcImxpbmVhclwiLHNob3dleHBvbmVudDpcImFsbFwiLGV4cG9uZW50Zm9ybWF0OlwiQlwifSxoLnNldENvbnZlcnQodGhpcy5tb2NrQXhpcyx0KX0sZS5leHBvcnRzPWJ9LHtcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvc2hvd19ub193ZWJnbF9tc2dcIjo3MjIsXCIuLi8uLi9saWIvc3RyMnJnYmFycmF5XCI6NzI0LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vbGF5b3V0L2NvbnZlcnRcIjo3OTMsXCIuL2xheW91dC9zcGlrZXNcIjo3OTYsXCIuL2xheW91dC90aWNrX21hcmtzXCI6Nzk3LFwiLi9wcm9qZWN0XCI6Nzk4LFwiZ2wtcGxvdDNkXCI6Mjg3LFwiaGFzLXBhc3NpdmUtZXZlbnRzXCI6NDA0LFwid2ViZ2wtY29udGV4dFwiOjU0MX1dLDgwMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtuPW58fHQubGVuZ3RoO2Zvcih2YXIgaT1uZXcgQXJyYXkobiksYT0wO2E8bjthKyspaVthXT1bdFthXSxlW2FdLHJbYV1dO3JldHVybiBpfX0se31dLDgwMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2ZvbnRfYXR0cmlidXRlc1wiKSxpPXQoXCIuL2FuaW1hdGlvbl9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvbGF5b3V0X2F0dHJpYnV0ZXNcIikscz10KFwiLi9wYWRfYXR0cmlidXRlc1wiKSxsPXQoXCIuLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsYz1uKHtlZGl0VHlwZTpcImNhbGNcIn0pO2MuZmFtaWx5LmRmbHQ9J1wiT3BlbiBTYW5zXCIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxjLnNpemUuZGZsdD0xMixjLmNvbG9yLmRmbHQ9YS5kZWZhdWx0TGluZSxlLmV4cG9ydHM9e2ZvbnQ6Yyx0aXRsZTp7dGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwibGF5b3V0c3R5bGVcIn0sZm9udDpuKHtlZGl0VHlwZTpcImxheW91dHN0eWxlXCJ9KSx4cmVmOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLGRmbHQ6XCJjb250YWluZXJcIix2YWx1ZXM6W1wiY29udGFpbmVyXCIsXCJwYXBlclwiXSxlZGl0VHlwZTpcImxheW91dHN0eWxlXCJ9LHlyZWY6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsZGZsdDpcImNvbnRhaW5lclwiLHZhbHVlczpbXCJjb250YWluZXJcIixcInBhcGVyXCJdLGVkaXRUeXBlOlwibGF5b3V0c3R5bGVcIn0seDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6LjUsZWRpdFR5cGU6XCJsYXlvdXRzdHlsZVwifSx5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDpcImF1dG9cIixlZGl0VHlwZTpcImxheW91dHN0eWxlXCJ9LHhhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsZGZsdDpcImF1dG9cIix2YWx1ZXM6W1wiYXV0b1wiLFwibGVmdFwiLFwiY2VudGVyXCIsXCJyaWdodFwiXSxlZGl0VHlwZTpcImxheW91dHN0eWxlXCJ9LHlhbmNob3I6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsZGZsdDpcImF1dG9cIix2YWx1ZXM6W1wiYXV0b1wiLFwidG9wXCIsXCJtaWRkbGVcIixcImJvdHRvbVwiXSxlZGl0VHlwZTpcImxheW91dHN0eWxlXCJ9LHBhZDpsKHMoe2VkaXRUeXBlOlwibGF5b3V0c3R5bGVcIn0pLHt9KSxlZGl0VHlwZTpcImxheW91dHN0eWxlXCJ9LGF1dG9zaXplOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEsZWRpdFR5cGU6XCJub25lXCJ9LHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjEwLGRmbHQ6NzAwLGVkaXRUeXBlOlwicGxvdFwifSxoZWlnaHQ6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MTAsZGZsdDo0NTAsZWRpdFR5cGU6XCJwbG90XCJ9LG1hcmdpbjp7bDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6ODAsZWRpdFR5cGU6XCJwbG90XCJ9LHI6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjgwLGVkaXRUeXBlOlwicGxvdFwifSx0Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxMDAsZWRpdFR5cGU6XCJwbG90XCJ9LGI6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjgwLGVkaXRUeXBlOlwicGxvdFwifSxwYWQ6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6XCJwbG90XCJ9LGF1dG9leHBhbmQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcInBsb3RcIn0sZWRpdFR5cGU6XCJwbG90XCJ9LHBhcGVyX2JnY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6YS5iYWNrZ3JvdW5kLGVkaXRUeXBlOlwicGxvdFwifSxwbG90X2JnY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6YS5iYWNrZ3JvdW5kLGVkaXRUeXBlOlwibGF5b3V0c3R5bGVcIn0sc2VwYXJhdG9yczp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwicGxvdFwifSxoaWRlc291cmNlczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwicGxvdFwifSxzaG93bGVnZW5kOnt2YWxUeXBlOlwiYm9vbGVhblwiLGVkaXRUeXBlOlwibGVnZW5kXCJ9LGNvbG9yd2F5Ont2YWxUeXBlOlwiY29sb3JsaXN0XCIsZGZsdDphLmRlZmF1bHRzLGVkaXRUeXBlOlwiY2FsY1wifSxjb2xvcnNjYWxlOm8sZGF0YXJldmlzaW9uOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHVpcmV2aXNpb246e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcIm5vbmVcIn0sZWRpdHJldmlzaW9uOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJub25lXCJ9LHNlbGVjdGlvbnJldmlzaW9uOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJub25lXCJ9LHRlbXBsYXRlOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LG1vZGViYXI6e29yaWVudGF0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ2XCIsXCJoXCJdLGRmbHQ6XCJoXCIsZWRpdFR5cGU6XCJtb2RlYmFyXCJ9LGJnY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwibW9kZWJhclwifSxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJtb2RlYmFyXCJ9LGFjdGl2ZWNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcIm1vZGViYXJcIn0sdWlyZXZpc2lvbjp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwibm9uZVwifSxlZGl0VHlwZTpcIm1vZGViYXJcIn0sbWV0YTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcInBsb3RcIn0sdHJhbnNpdGlvbjpsKHt9LGkudHJhbnNpdGlvbix7ZWRpdFR5cGU6XCJub25lXCJ9KSxfZGVwcmVjYXRlZDp7dGl0bGU6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcImxheW91dHN0eWxlXCJ9LHRpdGxlZm9udDpuKHtlZGl0VHlwZTpcImxheW91dHN0eWxlXCJ9KX19fSx7XCIuLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIjo1NzcsXCIuLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvbGF5b3V0X2F0dHJpYnV0ZXNcIjo1OTEsXCIuLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi9hbmltYXRpb25fYXR0cmlidXRlc1wiOjc0NCxcIi4vZm9udF9hdHRyaWJ1dGVzXCI6Nzc1LFwiLi9wYWRfYXR0cmlidXRlc1wiOjgwOX1dLDgwMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17cmVxdWlyZWRWZXJzaW9uOlwiMC40NS4wXCIsc3R5bGVVcmxQcmVmaXg6XCJtYXBib3g6Ly9zdHlsZXMvbWFwYm94L1wiLHN0eWxlVXJsU3VmZml4OlwidjlcIixjb250cm9sQ29udGFpbmVyQ2xhc3NOYW1lOlwibWFwYm94Z2wtY29udHJvbC1jb250YWluZXJcIix3cm9uZ1ZlcnNpb25FcnJvck1zZzpbXCJZb3VyIGN1c3RvbSBwbG90bHkuanMgYnVuZGxlIGlzIG5vdCB1c2luZyB0aGUgY29ycmVjdCBtYXBib3gtZ2wgdmVyc2lvblwiLFwiUGxlYXNlIGluc3RhbGwgbWFwYm94LWdsQDAuNDUuMC5cIl0uam9pbihcIlxcblwiKSxub0FjY2Vzc1Rva2VuRXJyb3JNc2c6W1wiTWlzc2luZyBNYXBib3ggYWNjZXNzIHRva2VuLlwiLFwiTWFwYm94IHRyYWNlIHR5cGUgcmVxdWlyZSBhIE1hcGJveCBhY2Nlc3MgdG9rZW4gdG8gYmUgcmVnaXN0ZXJlZC5cIixcIkZvciBleGFtcGxlOlwiLFwiICBQbG90bHkucGxvdChnZCwgZGF0YSwgbGF5b3V0LCB7IG1hcGJveEFjY2Vzc1Rva2VuOiAnbXktYWNjZXNzLXRva2VuJyB9KTtcIixcIk1vcmUgaW5mbyBoZXJlOiBodHRwczovL3d3dy5tYXBib3guY29tL2hlbHAvZGVmaW5lLWFjY2Vzcy10b2tlbi9cIl0uam9pbihcIlxcblwiKSxtYXBPbkVycm9yTXNnOlwiTWFwYm94IGVycm9yLlwiLHN0eWxlUnVsZXM6e21hcDpcIm92ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTtcIixcIm1pc3NpbmctY3NzXCI6XCJkaXNwbGF5Om5vbmVcIn19fSx7fV0sODAzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnNwbGl0KFwiIFwiKSxpPXJbMF0sYT1yWzFdLG89bi5pc0FycmF5T3JUeXBlZEFycmF5KGUpP24ubWVhbihlKTplLHM9LjUrby8xMDAsbD0xLjUrby8xMDAsYz1bXCJcIixcIlwiXSx1PVswLDBdO3N3aXRjaChpKXtjYXNlXCJ0b3BcIjpjWzBdPVwidG9wXCIsdVsxXT0tbDticmVhaztjYXNlXCJib3R0b21cIjpjWzBdPVwiYm90dG9tXCIsdVsxXT1sfXN3aXRjaChhKXtjYXNlXCJsZWZ0XCI6Y1sxXT1cInJpZ2h0XCIsdVswXT0tczticmVhaztjYXNlXCJyaWdodFwiOmNbMV09XCJsZWZ0XCIsdVswXT1zfXJldHVybnthbmNob3I6Y1swXSYmY1sxXT9jLmpvaW4oXCItXCIpOmNbMF0/Y1swXTpjWzFdP2NbMV06XCJjZW50ZXJcIixvZmZzZXQ6dX19fSx7XCIuLi8uLi9saWJcIjo3MDF9XSw4MDQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwibWFwYm94LWdsXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9wbG90cy9nZXRfZGF0YVwiKS5nZXRTdWJwbG90Q2FsY0RhdGEsbz10KFwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIikscz10KFwiLi9tYXBib3hcIiksbD10KFwiLi9jb25zdGFudHNcIik7Zm9yKHZhciBjIGluIGwuc3R5bGVSdWxlcylpLmFkZFN0eWxlUnVsZShcIi5tYXBib3hnbC1cIitjLGwuc3R5bGVSdWxlc1tjXSk7ci5uYW1lPVwibWFwYm94XCIsci5hdHRyPVwic3VicGxvdFwiLHIuaWRSb290PVwibWFwYm94XCIsci5pZFJlZ2V4PXIuYXR0clJlZ2V4PWkuY291bnRlclJlZ2V4KFwibWFwYm94XCIpLHIuYXR0cmlidXRlcz17c3VicGxvdDp7dmFsVHlwZTpcInN1YnBsb3RpZFwiLGRmbHQ6XCJtYXBib3hcIixlZGl0VHlwZTpcImNhbGNcIn19LHIubGF5b3V0QXR0cmlidXRlcz10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPXQoXCIuL2xheW91dF9kZWZhdWx0c1wiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsbz1lLl9zdWJwbG90cy5tYXBib3g7aWYobi52ZXJzaW9uIT09bC5yZXF1aXJlZFZlcnNpb24pdGhyb3cgbmV3IEVycm9yKGwud3JvbmdWZXJzaW9uRXJyb3JNc2cpO3ZhciBjPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dDtpZihcIlwiPT09dC5fY29udGV4dC5tYXBib3hBY2Nlc3NUb2tlbilyZXR1cm5cIlwiO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1yW2Vbbl1dO2lmKGkuYWNjZXNzdG9rZW4pcmV0dXJuIGkuYWNjZXNzdG9rZW59dGhyb3cgbmV3IEVycm9yKGwubm9BY2Nlc3NUb2tlbkVycm9yTXNnKX0odCxvKTtuLmFjY2Vzc1Rva2VuPWM7Zm9yKHZhciB1PTA7dTxvLmxlbmd0aDt1Kyspe3ZhciBoPW9bdV0sZj1hKHIsXCJtYXBib3hcIixoKSxwPWVbaF0sZD1wLl9zdWJwbG90O2R8fChkPXMoe2dkOnQsY29udGFpbmVyOmUuX2dsY29udGFpbmVyLm5vZGUoKSxpZDpoLGZ1bGxMYXlvdXQ6ZSxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdH0pLGVbaF0uX3N1YnBsb3Q9ZCksZC52aWV3SW5pdGlhbHx8KGQudmlld0luaXRpYWw9e2NlbnRlcjppLmV4dGVuZEZsYXQoe30scC5jZW50ZXIpLHpvb206cC56b29tLGJlYXJpbmc6cC5iZWFyaW5nLHBpdGNoOnAucGl0Y2h9KSxkLnBsb3QoZixlLHQuX3Byb21pc2VzKX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLm1hcGJveHx8W10sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdOyFlW29dJiZuW29dLl9zdWJwbG90JiZuW29dLl9zdWJwbG90LmRlc3Ryb3koKX19LHIudG9TVkc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5tYXBib3gsbj1lLl9zaXplLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9ZVtyW2ldXSxzPWEuZG9tYWluLGw9YS5fc3VicGxvdCxjPWwudG9JbWFnZShcInBuZ1wiKTtlLl9nbGltYWdlcy5hcHBlbmQoXCJzdmc6aW1hZ2VcIikuYXR0cih7eG1sbnM6by5zdmcsXCJ4bGluazpocmVmXCI6Yyx4Om4ubCtuLncqcy54WzBdLHk6bi50K24uaCooMS1zLnlbMV0pLHdpZHRoOm4udyoocy54WzFdLXMueFswXSksaGVpZ2h0Om4uaCoocy55WzFdLXMueVswXSkscHJlc2VydmVBc3BlY3RSYXRpbzpcIm5vbmVcIn0pLGwuZGVzdHJveSgpfX0sci51cGRhdGVGeD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLm1hcGJveCxuPTA7bjxyLmxlbmd0aDtuKyspe2VbcltuXV0uX3N1YnBsb3QudXBkYXRlRngoZSl9fX0se1wiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIjo2NzksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9nZXRfZGF0YVwiOjc4NCxcIi4vY29uc3RhbnRzXCI6ODAyLFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjgwNixcIi4vbGF5b3V0X2RlZmF1bHRzXCI6ODA3LFwiLi9tYXBib3hcIjo4MDgsXCJtYXBib3gtZ2xcIjo0MTl9XSw4MDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vY29udmVydF90ZXh0X29wdHNcIik7ZnVuY3Rpb24gYSh0LGUpe3RoaXMubWFwYm94PXQsdGhpcy5tYXA9dC5tYXAsdGhpcy51aWQ9dC51aWQrXCItbGF5ZXJcIitlLHRoaXMuaWRTb3VyY2U9dGhpcy51aWQrXCItc291cmNlXCIsdGhpcy5pZExheWVyPXRoaXMudWlkK1wiLWxheWVyXCIsdGhpcy5zb3VyY2VUeXBlPW51bGwsdGhpcy5zb3VyY2U9bnVsbCx0aGlzLmxheWVyVHlwZT1udWxsLHRoaXMuYmVsb3c9bnVsbCx0aGlzLnZpc2libGU9ITF9dmFyIG89YS5wcm90b3R5cGU7ZnVuY3Rpb24gcyh0KXt2YXIgZT10LnNvdXJjZTtyZXR1cm4gdC52aXNpYmxlJiYobi5pc1BsYWluT2JqZWN0KGUpfHxcInN0cmluZ1wiPT10eXBlb2YgZSYmZS5sZW5ndGg+MCl9ZnVuY3Rpb24gbCh0KXt2YXIgZT17fSxyPXt9O3N3aXRjaCh0LnR5cGUpe2Nhc2VcImNpcmNsZVwiOm4uZXh0ZW5kRmxhdChyLHtcImNpcmNsZS1yYWRpdXNcIjp0LmNpcmNsZS5yYWRpdXMsXCJjaXJjbGUtY29sb3JcIjp0LmNvbG9yLFwiY2lyY2xlLW9wYWNpdHlcIjp0Lm9wYWNpdHl9KTticmVhaztjYXNlXCJsaW5lXCI6bi5leHRlbmRGbGF0KHIse1wibGluZS13aWR0aFwiOnQubGluZS53aWR0aCxcImxpbmUtY29sb3JcIjp0LmNvbG9yLFwibGluZS1vcGFjaXR5XCI6dC5vcGFjaXR5LFwibGluZS1kYXNoYXJyYXlcIjp0LmxpbmUuZGFzaH0pO2JyZWFrO2Nhc2VcImZpbGxcIjpuLmV4dGVuZEZsYXQocix7XCJmaWxsLWNvbG9yXCI6dC5jb2xvcixcImZpbGwtb3V0bGluZS1jb2xvclwiOnQuZmlsbC5vdXRsaW5lY29sb3IsXCJmaWxsLW9wYWNpdHlcIjp0Lm9wYWNpdHl9KTticmVhaztjYXNlXCJzeW1ib2xcIjp2YXIgYT10LnN5bWJvbCxvPWkoYS50ZXh0cG9zaXRpb24sYS5pY29uc2l6ZSk7bi5leHRlbmRGbGF0KGUse1wiaWNvbi1pbWFnZVwiOmEuaWNvbitcIi0xNVwiLFwiaWNvbi1zaXplXCI6YS5pY29uc2l6ZS8xMCxcInRleHQtZmllbGRcIjphLnRleHQsXCJ0ZXh0LXNpemVcIjphLnRleHRmb250LnNpemUsXCJ0ZXh0LWFuY2hvclwiOm8uYW5jaG9yLFwidGV4dC1vZmZzZXRcIjpvLm9mZnNldCxcInN5bWJvbC1wbGFjZW1lbnRcIjphLnBsYWNlbWVudH0pLG4uZXh0ZW5kRmxhdChyLHtcImljb24tY29sb3JcIjp0LmNvbG9yLFwidGV4dC1jb2xvclwiOmEudGV4dGZvbnQuY29sb3IsXCJ0ZXh0LW9wYWNpdHlcIjp0Lm9wYWNpdHl9KX1yZXR1cm57bGF5b3V0OmUscGFpbnQ6cn19by51cGRhdGU9ZnVuY3Rpb24odCl7dGhpcy52aXNpYmxlP3RoaXMubmVlZHNOZXdTb3VyY2UodCk/KHRoaXMucmVtb3ZlTGF5ZXIoKSx0aGlzLnVwZGF0ZVNvdXJjZSh0KSx0aGlzLnVwZGF0ZUxheWVyKHQpKTp0aGlzLm5lZWRzTmV3TGF5ZXIodCk/dGhpcy51cGRhdGVMYXllcih0KTp0aGlzLnVwZGF0ZVN0eWxlKHQpOih0aGlzLnVwZGF0ZVNvdXJjZSh0KSx0aGlzLnVwZGF0ZUxheWVyKHQpKSx0aGlzLnZpc2libGU9cyh0KX0sby5uZWVkc05ld1NvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zb3VyY2VUeXBlIT09dC5zb3VyY2V0eXBlfHx0aGlzLnNvdXJjZSE9PXQuc291cmNlfHx0aGlzLmxheWVyVHlwZSE9PXQudHlwZX0sby5uZWVkc05ld0xheWVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxheWVyVHlwZSE9PXQudHlwZXx8dGhpcy5iZWxvdyE9PXQuYmVsb3d9LG8udXBkYXRlU291cmNlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWFwO2lmKGUuZ2V0U291cmNlKHRoaXMuaWRTb3VyY2UpJiZlLnJlbW92ZVNvdXJjZSh0aGlzLmlkU291cmNlKSx0aGlzLnNvdXJjZVR5cGU9dC5zb3VyY2V0eXBlLHRoaXMuc291cmNlPXQuc291cmNlLHModCkpe3ZhciByPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5zb3VyY2V0eXBlLG49dC5zb3VyY2UsaT17dHlwZTpyfTtcImdlb2pzb25cIj09PXI/ZT1cImRhdGFcIjpcInZlY3RvclwiPT09ciYmKGU9XCJzdHJpbmdcIj09dHlwZW9mIG4/XCJ1cmxcIjpcInRpbGVzXCIpO3JldHVybiBpW2VdPW4saX0odCk7ZS5hZGRTb3VyY2UodGhpcy5pZFNvdXJjZSxyKX19LG8udXBkYXRlTGF5ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tYXAscj1sKHQpO3RoaXMucmVtb3ZlTGF5ZXIoKSx0aGlzLmxheWVyVHlwZT10LnR5cGUscyh0KSYmZS5hZGRMYXllcih7aWQ6dGhpcy5pZExheWVyLHNvdXJjZTp0aGlzLmlkU291cmNlLFwic291cmNlLWxheWVyXCI6dC5zb3VyY2VsYXllcnx8XCJcIix0eXBlOnQudHlwZSxtaW56b29tOnQubWluem9vbSxtYXh6b29tOnQubWF4em9vbSxsYXlvdXQ6ci5sYXlvdXQscGFpbnQ6ci5wYWludH0sdC5iZWxvdyl9LG8udXBkYXRlU3R5bGU9ZnVuY3Rpb24odCl7aWYocyh0KSl7dmFyIGU9bCh0KTt0aGlzLm1hcGJveC5zZXRPcHRpb25zKHRoaXMuaWRMYXllcixcInNldExheW91dFByb3BlcnR5XCIsZS5sYXlvdXQpLHRoaXMubWFwYm94LnNldE9wdGlvbnModGhpcy5pZExheWVyLFwic2V0UGFpbnRQcm9wZXJ0eVwiLGUucGFpbnQpfX0sby5yZW1vdmVMYXllcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMubWFwO3QuZ2V0TGF5ZXIodGhpcy5pZExheWVyKSYmdC5yZW1vdmVMYXllcih0aGlzLmlkTGF5ZXIpfSxvLmRpc3Bvc2U9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hcDt0LnJlbW92ZUxheWVyKHRoaXMuaWRMYXllciksdC5yZW1vdmVTb3VyY2UodGhpcy5pZFNvdXJjZSl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IGEodCxlKTtyZXR1cm4gbi51cGRhdGUociksbn19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4vY29udmVydF90ZXh0X29wdHNcIjo4MDN9XSw4MDY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIikuZGVmYXVsdExpbmUsYT10KFwiLi4vZG9tYWluXCIpLmF0dHJpYnV0ZXMsbz10KFwiLi4vZm9udF9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXNcIikudGV4dHBvc2l0aW9uLGw9dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGwsYz10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKS50ZW1wbGF0ZWRBcnJheSx1PW8oe30pO3UuZmFtaWx5LmRmbHQ9XCJPcGVuIFNhbnMgUmVndWxhciwgQXJpYWwgVW5pY29kZSBNUyBSZWd1bGFyXCIsKGUuZXhwb3J0cz1sKHtfYXJyYXlBdHRyUmVnZXhwczpbbi5jb3VudGVyUmVnZXgoXCJtYXBib3hcIixcIi5sYXllcnNcIiwhMCldLGRvbWFpbjphKHtuYW1lOlwibWFwYm94XCJ9KSxhY2Nlc3N0b2tlbjp7dmFsVHlwZTpcInN0cmluZ1wiLG5vQmxhbms6ITAsc3RyaWN0OiEwfSxzdHlsZTp7dmFsVHlwZTpcImFueVwiLHZhbHVlczpbXCJiYXNpY1wiLFwic3RyZWV0c1wiLFwib3V0ZG9vcnNcIixcImxpZ2h0XCIsXCJkYXJrXCIsXCJzYXRlbGxpdGVcIixcInNhdGVsbGl0ZS1zdHJlZXRzXCJdLGRmbHQ6XCJiYXNpY1wifSxjZW50ZXI6e2xvbjp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MH0sbGF0Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowfX0sem9vbTp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MX0sYmVhcmluZzp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MH0scGl0Y2g6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjB9LGxheWVyczpjKFwibGF5ZXJcIix7dmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwfSxzb3VyY2V0eXBlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJnZW9qc29uXCIsXCJ2ZWN0b3JcIl0sZGZsdDpcImdlb2pzb25cIn0sc291cmNlOnt2YWxUeXBlOlwiYW55XCJ9LHNvdXJjZWxheWVyOnt2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwifSx0eXBlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJjaXJjbGVcIixcImxpbmVcIixcImZpbGxcIixcInN5bWJvbFwiXSxkZmx0OlwiY2lyY2xlXCJ9LGJlbG93Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwifSxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDppfSxvcGFjaXR5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDoxfSxtaW56b29tOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjI0LGRmbHQ6MH0sbWF4em9vbTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoyNCxkZmx0OjI0fSxjaXJjbGU6e3JhZGl1czp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MTV9fSxsaW5lOnt3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6Mn0sZGFzaDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIn19LGZpbGw6e291dGxpbmVjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDppfX0sc3ltYm9sOntpY29uOnt2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIm1hcmtlclwifSxpY29uc2l6ZTp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MTB9LHRleHQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCJ9LHBsYWNlbWVudDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wicG9pbnRcIixcImxpbmVcIixcImxpbmUtY2VudGVyXCJdLGRmbHQ6XCJwb2ludFwifSx0ZXh0Zm9udDp1LHRleHRwb3NpdGlvbjpuLmV4dGVuZEZsYXQoe30scyx7YXJyYXlPazohMX0pfX0pfSxcInBsb3RcIixcImZyb20tcm9vdFwiKSkudWlyZXZpc2lvbj17dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwibm9uZVwifX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlc1wiOjEwNTIsXCIuLi9kb21haW5cIjo3NzQsXCIuLi9mb250X2F0dHJpYnV0ZXNcIjo3NzV9XSw4MDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uL3N1YnBsb3RfZGVmYXVsdHNcIiksYT10KFwiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCIpLG89dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIik7ZnVuY3Rpb24gcyh0LGUscixuKXtyKFwiYWNjZXNzdG9rZW5cIixuLmFjY2Vzc1Rva2VuKSxyKFwic3R5bGVcIikscihcImNlbnRlci5sb25cIikscihcImNlbnRlci5sYXRcIikscihcInpvb21cIikscihcImJlYXJpbmdcIikscihcInBpdGNoXCIpLGEodCxlLHtuYW1lOlwibGF5ZXJzXCIsaGFuZGxlSXRlbURlZmF1bHRzOmx9KSxlLl9pbnB1dD10fWZ1bmN0aW9uIGwodCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxvLmxheWVycyxyLGkpfWlmKHIoXCJ2aXNpYmxlXCIpKXt2YXIgaT1yKFwic291cmNldHlwZVwiKTtyKFwic291cmNlXCIpLFwidmVjdG9yXCI9PT1pJiZyKFwic291cmNlbGF5ZXJcIik7dmFyIGE9cihcInR5cGVcIik7cihcImJlbG93XCIpLHIoXCJjb2xvclwiKSxyKFwib3BhY2l0eVwiKSxyKFwibWluem9vbVwiKSxyKFwibWF4em9vbVwiKSxcImNpcmNsZVwiPT09YSYmcihcImNpcmNsZS5yYWRpdXNcIiksXCJsaW5lXCI9PT1hJiYocihcImxpbmUud2lkdGhcIikscihcImxpbmUuZGFzaFwiKSksXCJmaWxsXCI9PT1hJiZyKFwiZmlsbC5vdXRsaW5lY29sb3JcIiksXCJzeW1ib2xcIj09PWEmJihyKFwic3ltYm9sLmljb25cIikscihcInN5bWJvbC5pY29uc2l6ZVwiKSxyKFwic3ltYm9sLnRleHRcIiksbi5jb2VyY2VGb250KHIsXCJzeW1ib2wudGV4dGZvbnRcIikscihcInN5bWJvbC50ZXh0cG9zaXRpb25cIikscihcInN5bWJvbC5wbGFjZW1lbnRcIikpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2kodCxlLHIse3R5cGU6XCJtYXBib3hcIixhdHRyaWJ1dGVzOm8saGFuZGxlRGVmYXVsdHM6cyxwYXJ0aXRpb246XCJ5XCIsYWNjZXNzVG9rZW46ZS5fbWFwYm94QWNjZXNzVG9rZW59KX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0c1wiOjc0NSxcIi4uL3N1YnBsb3RfZGVmYXVsdHNcIjo4MjQsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6ODA2fV0sODA4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIm1hcGJveC1nbFwiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4XCIpLGE9dChcIi4uLy4uL2xpYlwiKSxvPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50XCIpLGw9dChcIi4uL2NhcnRlc2lhbi9zZWxlY3RcIikucHJlcFNlbGVjdCxjPXQoXCIuLi9jYXJ0ZXNpYW4vc2VsZWN0XCIpLnNlbGVjdE9uQ2xpY2ssdT10KFwiLi9jb25zdGFudHNcIiksaD10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxmPXQoXCIuL2xheWVyc1wiKTtmdW5jdGlvbiBwKHQpe3RoaXMuaWQ9dC5pZCx0aGlzLmdkPXQuZ2QsdGhpcy5jb250YWluZXI9dC5jb250YWluZXIsdGhpcy5pc1N0YXRpYz10LnN0YXRpY1Bsb3Q7dmFyIGU9dC5mdWxsTGF5b3V0O3RoaXMudWlkPWUuX3VpZCtcIi1cIit0aGlzLmlkLHRoaXMuZGl2PW51bGwsdGhpcy54YXhpcz1udWxsLHRoaXMueWF4aXM9bnVsbCx0aGlzLmNyZWF0ZUZyYW1ld29yayhlKSx0aGlzLm1hcD1udWxsLHRoaXMuYWNjZXNzVG9rZW49bnVsbCx0aGlzLnN0eWxlT2JqPW51bGwsdGhpcy50cmFjZUhhc2g9e30sdGhpcy5sYXllckxpc3Q9W119dmFyIGQ9cC5wcm90b3R5cGU7ZnVuY3Rpb24gZyh0KXt2YXIgZT1oLnN0eWxlLnZhbHVlcyxyPWguc3R5bGUuZGZsdCxuPXt9O3JldHVybiBhLmlzUGxhaW5PYmplY3QodCk/KG4uaWQ9dC5pZCxuLnN0eWxlPXQpOlwic3RyaW5nXCI9PXR5cGVvZiB0PyhuLmlkPXQsbi5zdHlsZT0tMSE9PWUuaW5kZXhPZih0KT92KHQpOnQpOihuLmlkPXIsbi5zdHlsZT12KHIpKSxuLnRyYW5zaXRpb249e2R1cmF0aW9uOjAsZGVsYXk6MH0sbn1mdW5jdGlvbiB2KHQpe3JldHVybiB1LnN0eWxlVXJsUHJlZml4K3QrXCItXCIrdS5zdHlsZVVybFN1ZmZpeH1mdW5jdGlvbiBtKHQpe3JldHVyblt0Lmxvbix0LmxhdF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcCh0KX0sZC5wbG90PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPXRoaXMsYT1lW2kuaWRdO2kubWFwJiZhLmFjY2Vzc3Rva2VuIT09aS5hY2Nlc3NUb2tlbiYmKGkubWFwLnJlbW92ZSgpLGkubWFwPW51bGwsaS5zdHlsZU9iaj1udWxsLGkudHJhY2VIYXNoPVtdLGkubGF5ZXJMaXN0PXt9KSxuPWkubWFwP25ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbil7aS51cGRhdGVNYXAodCxlLHIsbil9KTpuZXcgUHJvbWlzZShmdW5jdGlvbihyLG4pe2kuY3JlYXRlTWFwKHQsZSxyLG4pfSksci5wdXNoKG4pfSxkLmNyZWF0ZU1hcD1mdW5jdGlvbih0LGUscixhKXt2YXIgcz10aGlzLGw9cy5nZCxoPWVbcy5pZF0sZj1zLnN0eWxlT2JqPWcoaC5zdHlsZSk7cy5hY2Nlc3NUb2tlbj1oLmFjY2Vzc3Rva2VuO3ZhciBwPXMubWFwPW5ldyBuLk1hcCh7Y29udGFpbmVyOnMuZGl2LHN0eWxlOmYuc3R5bGUsY2VudGVyOm0oaC5jZW50ZXIpLHpvb206aC56b29tLGJlYXJpbmc6aC5iZWFyaW5nLHBpdGNoOmgucGl0Y2gsaW50ZXJhY3RpdmU6IXMuaXNTdGF0aWMscHJlc2VydmVEcmF3aW5nQnVmZmVyOnMuaXNTdGF0aWMsZG91YmxlQ2xpY2tab29tOiExLGJveFpvb206ITF9KSxkPXUuY29udHJvbENvbnRhaW5lckNsYXNzTmFtZSx2PXMuZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZClbMF07aWYocy5kaXYucmVtb3ZlQ2hpbGQodikscC5fY2FudmFzLnN0eWxlLmxlZnQ9XCIwcHhcIixwLl9jYW52YXMuc3R5bGUudG9wPVwiMHB4XCIscy5yZWplY3RPbkVycm9yKGEpLHAub25jZShcImxvYWRcIixmdW5jdGlvbigpe3MudXBkYXRlRGF0YSh0KSxzLnVwZGF0ZUxheW91dChlKSxzLnJlc29sdmVPblJlbmRlcihyKX0pLCFzLmlzU3RhdGljKXt2YXIgeT0hMTtwLm9uKFwibW92ZWVuZFwiLGZ1bmN0aW9uKHQpe2lmKHMubWFwKXtpZih0Lm9yaWdpbmFsRXZlbnR8fHkpe3ZhciBlPWwuX2Z1bGxMYXlvdXRbcy5pZF07by5jYWxsKFwiX3N0b3JlRGlyZWN0R1VJRWRpdFwiLGwubGF5b3V0LGwuX2Z1bGxMYXlvdXQuX3ByZUdVSSxzLmdldFZpZXdFZGl0cyhlKSk7dmFyIHI9cy5nZXRWaWV3KCk7ZS5faW5wdXQuY2VudGVyPWUuY2VudGVyPXIuY2VudGVyLGUuX2lucHV0Lnpvb209ZS56b29tPXIuem9vbSxlLl9pbnB1dC5iZWFyaW5nPWUuYmVhcmluZz1yLmJlYXJpbmcsZS5faW5wdXQucGl0Y2g9ZS5waXRjaD1yLnBpdGNoLGwuZW1pdChcInBsb3RseV9yZWxheW91dFwiLHMuZ2V0Vmlld0VkaXRzKHIpKX15PSExfX0pLHAub24oXCJ3aGVlbFwiLGZ1bmN0aW9uKCl7eT0hMH0pLHAub24oXCJtb3VzZW1vdmVcIixmdW5jdGlvbih0KXt2YXIgZT1zLmRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0LmNsaWVudFg9dC5wb2ludC54K2UubGVmdCx0LmNsaWVudFk9dC5wb2ludC55K2UudG9wLHQudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdD1mdW5jdGlvbigpe3JldHVybiBlfSxzLnhheGlzLnAyYz1mdW5jdGlvbigpe3JldHVybiB0LmxuZ0xhdC5sbmd9LHMueWF4aXMucDJjPWZ1bmN0aW9uKCl7cmV0dXJuIHQubG5nTGF0LmxhdH0saS5ob3ZlcihsLHQscy5pZCl9KSxwLm9uKFwiZHJhZ3N0YXJ0XCIseCkscC5vbihcInpvb21zdGFydFwiLHgpLHAub24oXCJkYmxjbGlja1wiLGZ1bmN0aW9uKCl7dmFyIHQ9bC5fZnVsbExheW91dFtzLmlkXTtvLmNhbGwoXCJfc3RvcmVEaXJlY3RHVUlFZGl0XCIsbC5sYXlvdXQsbC5fZnVsbExheW91dC5fcHJlR1VJLHMuZ2V0Vmlld0VkaXRzKHQpKTt2YXIgZT1zLnZpZXdJbml0aWFsO3Auc2V0Q2VudGVyKG0oZS5jZW50ZXIpKSxwLnNldFpvb20oZS56b29tKSxwLnNldEJlYXJpbmcoZS5iZWFyaW5nKSxwLnNldFBpdGNoKGUucGl0Y2gpO3ZhciByPXMuZ2V0VmlldygpO3QuX2lucHV0LmNlbnRlcj10LmNlbnRlcj1yLmNlbnRlcix0Ll9pbnB1dC56b29tPXQuem9vbT1yLnpvb20sdC5faW5wdXQuYmVhcmluZz10LmJlYXJpbmc9ci5iZWFyaW5nLHQuX2lucHV0LnBpdGNoPXQucGl0Y2g9ci5waXRjaCxsLmVtaXQoXCJwbG90bHlfZG91YmxlY2xpY2tcIixudWxsKSxsLmVtaXQoXCJwbG90bHlfcmVsYXlvdXRcIixzLmdldFZpZXdFZGl0cyhyKSl9KSxzLmNsZWFyU2VsZWN0PWZ1bmN0aW9uKCl7bC5fZnVsbExheW91dC5fem9vbWxheWVyLnNlbGVjdEFsbChcIi5zZWxlY3Qtb3V0bGluZVwiKS5yZW1vdmUoKX0scy5vbkNsaWNrSW5QYW5Gbj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9bC5fZnVsbExheW91dC5jbGlja21vZGU7ci5pbmRleE9mKFwic2VsZWN0XCIpPi0xJiZjKGUub3JpZ2luYWxFdmVudCxsLFtzLnhheGlzXSxbcy55YXhpc10scy5pZCx0KSxyLmluZGV4T2YoXCJldmVudFwiKT4tMSYmaS5jbGljayhsLGUub3JpZ2luYWxFdmVudCl9fX1mdW5jdGlvbiB4KCl7aS5sb25lVW5ob3ZlcihlLl90b3BwYXBlcil9fSxkLnVwZGF0ZU1hcD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLGE9aS5tYXAsbz1lW3RoaXMuaWRdO2kucmVqZWN0T25FcnJvcihuKTt2YXIgcz1nKG8uc3R5bGUpO2kuc3R5bGVPYmouaWQhPT1zLmlkPyhpLnN0eWxlT2JqPXMsYS5zZXRTdHlsZShzLnN0eWxlKSxhLm9uY2UoXCJzdHlsZWRhdGFcIixmdW5jdGlvbigpe2kudHJhY2VIYXNoPXt9LGkudXBkYXRlRGF0YSh0KSxpLnVwZGF0ZUxheW91dChlKSxpLnJlc29sdmVPblJlbmRlcihyKX0pKTooaS51cGRhdGVEYXRhKHQpLGkudXBkYXRlTGF5b3V0KGUpLGkucmVzb2x2ZU9uUmVuZGVyKHIpKX0sZC51cGRhdGVEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9dGhpcy50cmFjZUhhc2g7Zm9yKG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIG89dFtuXTsoZT1hWyhyPW9bMF0udHJhY2UpLnVpZF0pP2UudXBkYXRlKG8pOnIuX21vZHVsZSYmKGFbci51aWRdPXIuX21vZHVsZS5wbG90KHRoaXMsbykpfXZhciBzPU9iamVjdC5rZXlzKGEpO3Q6Zm9yKG49MDtuPHMubGVuZ3RoO24rKyl7dmFyIGw9c1tuXTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKWlmKGw9PT0ocj10W2ldWzBdLnRyYWNlKS51aWQpY29udGludWUgdDsoZT1hW2xdKS5kaXNwb3NlKCksZGVsZXRlIGFbbF19fSxkLnVwZGF0ZUxheW91dD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm1hcCxyPXRbdGhpcy5pZF07ZS5zZXRDZW50ZXIobShyLmNlbnRlcikpLGUuc2V0Wm9vbShyLnpvb20pLGUuc2V0QmVhcmluZyhyLmJlYXJpbmcpLGUuc2V0UGl0Y2goci5waXRjaCksdGhpcy51cGRhdGVMYXllcnModCksdGhpcy51cGRhdGVGcmFtZXdvcmsodCksdGhpcy51cGRhdGVGeCh0KSx0aGlzLm1hcC5yZXNpemUoKSx0aGlzLmdkLl9jb250ZXh0Ll9zY3JvbGxab29tLm1hcGJveD9lLnNjcm9sbFpvb20uZW5hYmxlKCk6ZS5zY3JvbGxab29tLmRpc2FibGUoKX0sZC5yZXNvbHZlT25SZW5kZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tYXA7ZS5vbihcInJlbmRlclwiLGZ1bmN0aW9uIHIoKXtlLmxvYWRlZCgpJiYoZS5vZmYoXCJyZW5kZXJcIixyKSxzZXRUaW1lb3V0KHQsMCkpfSl9LGQucmVqZWN0T25FcnJvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm1hcDtmdW5jdGlvbiByKCl7dChuZXcgRXJyb3IodS5tYXBPbkVycm9yTXNnKSl9ZS5vbmNlKFwiZXJyb3JcIixyKSxlLm9uY2UoXCJzdHlsZS5lcnJvclwiLHIpLGUub25jZShcInNvdXJjZS5lcnJvclwiLHIpLGUub25jZShcInRpbGUuZXJyb3JcIixyKSxlLm9uY2UoXCJsYXllci5lcnJvclwiLHIpfSxkLmNyZWF0ZUZyYW1ld29yaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5kaXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtyLmlkPWUudWlkLHIuc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwiLGUuY29udGFpbmVyLmFwcGVuZENoaWxkKHIpLGUueGF4aXM9e19pZDpcInhcIixjMnA6ZnVuY3Rpb24odCl7cmV0dXJuIGUucHJvamVjdCh0KS54fX0sZS55YXhpcz17X2lkOlwieVwiLGMycDpmdW5jdGlvbih0KXtyZXR1cm4gZS5wcm9qZWN0KHQpLnl9fSxlLnVwZGF0ZUZyYW1ld29yayh0KX0sZC51cGRhdGVGeD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5tYXAsbj1lLmdkO2lmKCFlLmlzU3RhdGljKXt2YXIgaSxvPXQuZHJhZ21vZGU7aT1cInNlbGVjdFwiPT09bz9mdW5jdGlvbih0LHIpeyh0LnJhbmdlPXt9KVtlLmlkXT1bdShbci54bWluLHIueW1pbl0pLHUoW3IueG1heCxyLnltYXhdKV19OmZ1bmN0aW9uKHQscixuKXsodC5sYXNzb1BvaW50cz17fSlbZS5pZF09bi5maWx0ZXJlZC5tYXAodSl9O3ZhciBjPWUuZHJhZ09wdGlvbnM7ZS5kcmFnT3B0aW9ucz1hLmV4dGVuZERlZXAoY3x8e30se2VsZW1lbnQ6ZS5kaXYsZ2Q6bixwbG90aW5mbzp7aWQ6ZS5pZCx4YXhpczplLnhheGlzLHlheGlzOmUueWF4aXMsZmlsbFJhbmdlSXRlbXM6aX0seGF4ZXM6W2UueGF4aXNdLHlheGVzOltlLnlheGlzXSxzdWJwbG90OmUuaWR9KSxyLm9mZihcImNsaWNrXCIsZS5vbkNsaWNrSW5QYW5IYW5kbGVyKSxcInNlbGVjdFwiPT09b3x8XCJsYXNzb1wiPT09bz8oci5kcmFnUGFuLmRpc2FibGUoKSxyLm9uKFwiem9vbXN0YXJ0XCIsZS5jbGVhclNlbGVjdCksZS5kcmFnT3B0aW9ucy5wcmVwRm49ZnVuY3Rpb24odCxyLG4pe2wodCxyLG4sZS5kcmFnT3B0aW9ucyxvKX0scy5pbml0KGUuZHJhZ09wdGlvbnMpKTooci5kcmFnUGFuLmVuYWJsZSgpLHIub2ZmKFwiem9vbXN0YXJ0XCIsZS5jbGVhclNlbGVjdCksZS5kaXYub25tb3VzZWRvd249bnVsbCxlLm9uQ2xpY2tJblBhbkhhbmRsZXI9ZS5vbkNsaWNrSW5QYW5GbihlLmRyYWdPcHRpb25zKSxyLm9uKFwiY2xpY2tcIixlLm9uQ2xpY2tJblBhbkhhbmRsZXIpKX1mdW5jdGlvbiB1KHQpe3ZhciByPWUubWFwLnVucHJvamVjdCh0KTtyZXR1cm5bci5sbmcsci5sYXRdfX0sZC51cGRhdGVGcmFtZXdvcms9ZnVuY3Rpb24odCl7dmFyIGU9dFt0aGlzLmlkXS5kb21haW4scj10Ll9zaXplLG49dGhpcy5kaXYuc3R5bGU7bi53aWR0aD1yLncqKGUueFsxXS1lLnhbMF0pK1wicHhcIixuLmhlaWdodD1yLmgqKGUueVsxXS1lLnlbMF0pK1wicHhcIixuLmxlZnQ9ci5sK2UueFswXSpyLncrXCJweFwiLG4udG9wPXIudCsoMS1lLnlbMV0pKnIuaCtcInB4XCIsdGhpcy54YXhpcy5fb2Zmc2V0PXIubCtlLnhbMF0qci53LHRoaXMueGF4aXMuX2xlbmd0aD1yLncqKGUueFsxXS1lLnhbMF0pLHRoaXMueWF4aXMuX29mZnNldD1yLnQrKDEtZS55WzFdKSpyLmgsdGhpcy55YXhpcy5fbGVuZ3RoPXIuaCooZS55WzFdLWUueVswXSl9LGQudXBkYXRlTGF5ZXJzPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dFt0aGlzLmlkXS5sYXllcnMsbj10aGlzLmxheWVyTGlzdDtpZihyLmxlbmd0aCE9PW4ubGVuZ3RoKXtmb3IoZT0wO2U8bi5sZW5ndGg7ZSsrKW5bZV0uZGlzcG9zZSgpO2ZvcihuPXRoaXMubGF5ZXJMaXN0PVtdLGU9MDtlPHIubGVuZ3RoO2UrKyluLnB1c2goZih0aGlzLGUscltlXSkpfWVsc2UgZm9yKGU9MDtlPHIubGVuZ3RoO2UrKyluW2VdLnVwZGF0ZShyW2VdKX0sZC5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5tYXAmJih0aGlzLm1hcC5yZW1vdmUoKSx0aGlzLm1hcD1udWxsLHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMuZGl2KSl9LGQudG9JbWFnZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcC5zdG9wKCksdGhpcy5tYXAuZ2V0Q2FudmFzKCkudG9EYXRhVVJMKCl9LGQuc2V0T3B0aW9ucz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuIGluIHIpdGhpcy5tYXBbZV0odCxuLHJbbl0pfSxkLnByb2plY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWFwLnByb2plY3QobmV3IG4uTG5nTGF0KHRbMF0sdFsxXSkpfSxkLmdldFZpZXc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hcCxlPXQuZ2V0Q2VudGVyKCk7cmV0dXJue2NlbnRlcjp7bG9uOmUubG5nLGxhdDplLmxhdH0sem9vbTp0LmdldFpvb20oKSxiZWFyaW5nOnQuZ2V0QmVhcmluZygpLHBpdGNoOnQuZ2V0UGl0Y2goKX19LGQuZ2V0Vmlld0VkaXRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmlkLHI9W1wiY2VudGVyXCIsXCJ6b29tXCIsXCJiZWFyaW5nXCIsXCJwaXRjaFwiXSxuPXt9LGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXTtuW2UrXCIuXCIrYV09dFthXX1yZXR1cm4gbn19LHtcIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnRcIjo1OTYsXCIuLi8uLi9jb21wb25lbnRzL2Z4XCI6NjE3LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9jYXJ0ZXNpYW4vc2VsZWN0XCI6NzY2LFwiLi9jb25zdGFudHNcIjo4MDIsXCIuL2xheWVyc1wiOjgwNSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo4MDYsXCJtYXBib3gtZ2xcIjo0MTl9XSw4MDk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5lZGl0VHlwZTtyZXR1cm57dDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MCxlZGl0VHlwZTplfSxyOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLGVkaXRUeXBlOmV9LGI6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjAsZWRpdFR5cGU6ZX0sbDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MCxlZGl0VHlwZTplfSxlZGl0VHlwZTplfX19LHt9XSw4MTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiZmFzdC1pc251bWVyaWNcIiksYT10KFwiLi4vcmVnaXN0cnlcIiksbz10KFwiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWFcIikscz10KFwiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKSxsPXQoXCIuLi9saWJcIiksYz10KFwiLi4vY29tcG9uZW50cy9jb2xvclwiKSx1PXQoXCIuLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTSxoPXQoXCIuL2NhcnRlc2lhbi9heGlzX2lkc1wiKSxmPXQoXCIuL2FuaW1hdGlvbl9hdHRyaWJ1dGVzXCIpLHA9dChcIi4vZnJhbWVfYXR0cmlidXRlc1wiKSxkPWwucmVsaW5rUHJpdmF0ZUtleXMsZz1sLl8sdj1lLmV4cG9ydHM9e307bC5leHRlbmRGbGF0KHYsYSksdi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksdi5hdHRyaWJ1dGVzLnR5cGUudmFsdWVzPXYuYWxsVHlwZXMsdi5mb250QXR0cnM9dChcIi4vZm9udF9hdHRyaWJ1dGVzXCIpLHYubGF5b3V0QXR0cmlidXRlcz10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSx2LmZvbnRXZWlnaHQ9XCJub3JtYWxcIjt2YXIgbT12LnRyYW5zZm9ybXNSZWdpc3RyeSx5PXQoXCIuL2NvbW1hbmRcIik7di5leGVjdXRlQVBJQ29tbWFuZD15LmV4ZWN1dGVBUElDb21tYW5kLHYuY29tcHV0ZUFQSUNvbW1hbmRCaW5kaW5ncz15LmNvbXB1dGVBUElDb21tYW5kQmluZGluZ3Msdi5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXI9eS5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXIsdi5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3M9eS5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3Msdi5yZWRyYXdUZXh0PWZ1bmN0aW9uKHQpe2lmKCEoKHQ9bC5nZXRHcmFwaERpdih0KSkuZGF0YSYmdC5kYXRhWzBdJiZ0LmRhdGFbMF0ucikpcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXthLmdldENvbXBvbmVudE1ldGhvZChcImFubm90YXRpb25zXCIsXCJkcmF3XCIpKHQpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKFwibGVnZW5kXCIsXCJkcmF3XCIpKHQpLCh0LmNhbGNkYXRhfHxbXSkuZm9yRWFjaChmdW5jdGlvbih0KXt0WzBdJiZ0WzBdLnQmJnRbMF0udC5jYiYmdFswXS50LmNiKCl9KSxlKHYucHJldmlvdXNQcm9taXNlcyh0KSl9LDMwMCl9KX0sdi5yZXNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bC5nZXRHcmFwaERpdih0KSxuZXcgUHJvbWlzZShmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4odCl7dmFyIGU9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCkuZGlzcGxheTtyZXR1cm4hZXx8XCJub25lXCI9PT1lfXQmJiFuKHQpfHxyKG5ldyBFcnJvcihcIlJlc2l6ZSBtdXN0IGJlIHBhc3NlZCBhIGRpc3BsYXllZCBwbG90IGRpdiBlbGVtZW50LlwiKSksdC5fcmVkcmF3VGltZXImJmNsZWFyVGltZW91dCh0Ll9yZWRyYXdUaW1lciksdC5fcmVkcmF3VGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2lmKCF0LmxheW91dHx8dC5sYXlvdXQud2lkdGgmJnQubGF5b3V0LmhlaWdodHx8bih0KSllKHQpO2Vsc2V7ZGVsZXRlIHQubGF5b3V0LndpZHRoLGRlbGV0ZSB0LmxheW91dC5oZWlnaHQ7dmFyIHI9dC5jaGFuZ2VkO3QuYXV0b3BsYXk9ITAsYS5jYWxsKFwicmVsYXlvdXRcIix0LHthdXRvc2l6ZTohMH0pLnRoZW4oZnVuY3Rpb24oKXt0LmNoYW5nZWQ9cixlKHQpfSl9fSwxMDApfSl9LHYucHJldmlvdXNQcm9taXNlcz1mdW5jdGlvbih0KXtpZigodC5fcHJvbWlzZXN8fFtdKS5sZW5ndGgpcmV0dXJuIFByb21pc2UuYWxsKHQuX3Byb21pc2VzKS50aGVuKGZ1bmN0aW9uKCl7dC5fcHJvbWlzZXM9W119KX0sdi5hZGRMaW5rcz1mdW5jdGlvbih0KXtpZih0Ll9jb250ZXh0LnNob3dMaW5rfHx0Ll9jb250ZXh0LnNob3dTb3VyY2VzKXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9bC5lbnN1cmVTaW5nbGUoZS5fcGFwZXIsXCJ0ZXh0XCIsXCJqcy1wbG90LWxpbmstY29udGFpbmVyXCIsZnVuY3Rpb24odCl7dC5zdHlsZSh7XCJmb250LWZhbWlseVwiOidcIk9wZW4gU2Fuc1wiLCBBcmlhbCwgc2Fucy1zZXJpZicsXCJmb250LXNpemVcIjpcIjEycHhcIixmaWxsOmMuZGVmYXVsdExpbmUsXCJwb2ludGVyLWV2ZW50c1wiOlwiYWxsXCJ9KS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7dC5hcHBlbmQoXCJ0c3BhblwiKS5jbGFzc2VkKFwianMtbGluay10by10b29sXCIsITApLHQuYXBwZW5kKFwidHNwYW5cIikuY2xhc3NlZChcImpzLWxpbmstc3BhY2VyXCIsITApLHQuYXBwZW5kKFwidHNwYW5cIikuY2xhc3NlZChcImpzLXNvdXJjZWxpbmtzXCIsITApfSl9KSxpPXIubm9kZSgpLGE9e3k6ZS5fcGFwZXIuYXR0cihcImhlaWdodFwiKS05fTtkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGkpJiZpLmdldENvbXB1dGVkVGV4dExlbmd0aCgpPj1lLndpZHRoLTIwPyhhW1widGV4dC1hbmNob3JcIl09XCJzdGFydFwiLGEueD01KTooYVtcInRleHQtYW5jaG9yXCJdPVwiZW5kXCIsYS54PWUuX3BhcGVyLmF0dHIoXCJ3aWR0aFwiKS03KSxyLmF0dHIoYSk7dmFyIG89ci5zZWxlY3QoXCIuanMtbGluay10by10b29sXCIpLHM9ci5zZWxlY3QoXCIuanMtbGluay1zcGFjZXJcIiksdT1yLnNlbGVjdChcIi5qcy1zb3VyY2VsaW5rc1wiKTt0Ll9jb250ZXh0LnNob3dTb3VyY2VzJiZ0Ll9jb250ZXh0LnNob3dTb3VyY2VzKHQpLHQuX2NvbnRleHQuc2hvd0xpbmsmJmZ1bmN0aW9uKHQsZSl7ZS50ZXh0KFwiXCIpO3ZhciByPWUuYXBwZW5kKFwiYVwiKS5hdHRyKHtcInhsaW5rOnhsaW5rOmhyZWZcIjpcIiNcIixjbGFzczpcImxpbmstLWltcHQgbGluay0tZW1iZWR2aWV3XCIsXCJmb250LXdlaWdodFwiOlwiYm9sZFwifSkudGV4dCh0Ll9jb250ZXh0LmxpbmtUZXh0K1wiIFwiK1N0cmluZy5mcm9tQ2hhckNvZGUoMTg3KSk7aWYodC5fY29udGV4dC5zZW5kRGF0YSlyLm9uKFwiY2xpY2tcIixmdW5jdGlvbigpe3Yuc2VuZERhdGFUb0Nsb3VkKHQpfSk7ZWxzZXt2YXIgbj13aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3BsaXQoXCIvXCIpLGk9d2luZG93LmxvY2F0aW9uLnNlYXJjaDtyLmF0dHIoe1wieGxpbms6eGxpbms6c2hvd1wiOlwibmV3XCIsXCJ4bGluazp4bGluazpocmVmXCI6XCIvXCIrblsyXS5zcGxpdChcIi5cIilbMF0rXCIvXCIrblsxXStpfSl9fSh0LG8pLHMudGV4dChvLnRleHQoKSYmdS50ZXh0KCk/XCIgLSBcIjpcIlwiKX19LHYuc2VuZERhdGFUb0Nsb3VkPWZ1bmN0aW9uKHQpe3QuZW1pdChcInBsb3RseV9iZWZvcmVleHBvcnRcIik7dmFyIGU9KHdpbmRvdy5QTE9UTFlFTlZ8fHt9KS5CQVNFX1VSTHx8dC5fY29udGV4dC5wbG90bHlTZXJ2ZXJVUkwscj1uLnNlbGVjdCh0KS5hcHBlbmQoXCJkaXZcIikuYXR0cihcImlkXCIsXCJoaWRkZW5mb3JtXCIpLnN0eWxlKFwiZGlzcGxheVwiLFwibm9uZVwiKSxpPXIuYXBwZW5kKFwiZm9ybVwiKS5hdHRyKHthY3Rpb246ZStcIi9leHRlcm5hbFwiLG1ldGhvZDpcInBvc3RcIix0YXJnZXQ6XCJfYmxhbmtcIn0pO3JldHVybiBpLmFwcGVuZChcImlucHV0XCIpLmF0dHIoe3R5cGU6XCJ0ZXh0XCIsbmFtZTpcImRhdGFcIn0pLm5vZGUoKS52YWx1ZT12LmdyYXBoSnNvbih0LCExLFwia2VlcGRhdGFcIiksaS5ub2RlKCkuc3VibWl0KCksci5yZW1vdmUoKSx0LmVtaXQoXCJwbG90bHlfYWZ0ZXJleHBvcnRcIiksITF9O3ZhciB4PVtcImRheXNcIixcInNob3J0RGF5c1wiLFwibW9udGhzXCIsXCJzaG9ydE1vbnRoc1wiLFwicGVyaW9kc1wiLFwiZGF0ZVRpbWVcIixcImRhdGVcIixcInRpbWVcIixcImRlY2ltYWxcIixcInRob3VzYW5kc1wiLFwiZ3JvdXBpbmdcIixcImN1cnJlbmN5XCJdLGI9W1wieWVhclwiLFwibW9udGhcIixcImRheU1vbnRoXCIsXCJkYXlNb250aFllYXJcIl07ZnVuY3Rpb24gXyh0LGUpe3ZhciByPXQuX2NvbnRleHQubG9jYWxlLG49ITEsaT17fTtmdW5jdGlvbiBvKHQpe2Zvcih2YXIgcj0hMCxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBvPWVbYV07aVtvXXx8KHRbb10/aVtvXT10W29dOnI9ITEpfXImJihuPSEwKX1mb3IodmFyIHM9MDtzPDI7cysrKXtmb3IodmFyIGw9dC5fY29udGV4dC5sb2NhbGVzLGM9MDtjPDI7YysrKXt2YXIgdT0obFtyXXx8e30pLmZvcm1hdDtpZih1JiYobyh1KSxuKSlicmVhaztsPWEubG9jYWxlUmVnaXN0cnl9dmFyIGg9ci5zcGxpdChcIi1cIilbMF07aWYobnx8aD09PXIpYnJlYWs7cj1ofXJldHVybiBufHxvKGEubG9jYWxlUmVnaXN0cnkuZW4uZm9ybWF0KSxpfWZ1bmN0aW9uIHcodCxlKXt2YXIgcj17X2Z1bGxMYXlvdXQ6ZX0sbj1cInhcIj09PXQuX2lkLmNoYXJBdCgwKSxpPXQuX21haW5BeGlzLl9hbmNob3JBeGlzLGE9XCJcIixvPVwiXCIscz1cIlwiO2lmKGkmJihzPWkuX21haW5BeGlzLl9pZCxhPW4/dC5faWQrczpzK3QuX2lkKSwhYXx8IWUuX3Bsb3RzW2FdKXthPVwiXCI7Zm9yKHZhciBsPXQuX2NvdW50ZXJBeGVzLGM9MDtjPGwubGVuZ3RoO2MrKyl7dmFyIHU9bFtjXSxmPW4/dC5faWQrdTp1K3QuX2lkO298fChvPWYpO3ZhciBwPWguZ2V0RnJvbUlkKHIsdSk7aWYocyYmcC5vdmVybGF5aW5nPT09cyl7YT1mO2JyZWFrfX19cmV0dXJuIGF8fG99ZnVuY3Rpb24gayh0KXt2YXIgZT10LnRyYW5zZm9ybXM7aWYoQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGgpZm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl0saT1uLl9tb2R1bGV8fG1bbi50eXBlXTtpZihpJiZpLm1ha2VzRGF0YSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBBKHQsZSxyLG4pe2Zvcih2YXIgaT10LnRyYW5zZm9ybXMsYT1bdF0sbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz1pW29dLGw9bVtzLnR5cGVdO2wmJmwudHJhbnNmb3JtJiYoYT1sLnRyYW5zZm9ybShhLHt0cmFuc2Zvcm06cyxmdWxsVHJhY2U6dCxmdWxsRGF0YTplLGxheW91dDpyLGZ1bGxMYXlvdXQ6bix0cmFuc2Zvcm1JbmRleDpvfSkpfXJldHVybiBhfWZ1bmN0aW9uIFQodCl7dmFyIGU9dC5tYXJnaW47aWYoIXQuX3NpemUpe3ZhciByPXQuX3NpemU9e2w6TWF0aC5yb3VuZChlLmwpLHI6TWF0aC5yb3VuZChlLnIpLHQ6TWF0aC5yb3VuZChlLnQpLGI6TWF0aC5yb3VuZChlLmIpLHA6TWF0aC5yb3VuZChlLnBhZCl9O3Iudz1NYXRoLnJvdW5kKHQud2lkdGgpLXIubC1yLnIsci5oPU1hdGgucm91bmQodC5oZWlnaHQpLXIudC1yLmJ9dC5fcHVzaG1hcmdpbnx8KHQuX3B1c2htYXJnaW49e30pLHQuX3B1c2htYXJnaW5JZHN8fCh0Ll9wdXNobWFyZ2luSWRzPXt9KX1mdW5jdGlvbiBNKHQsZSxyKXt2YXIgbj0hMTt2YXIgaT1bdi5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7aWYodC5fdHJhbnNpdGlvbkRhdGEpcmV0dXJuIHQuX3RyYW5zaXRpb25pbmc9ITEsZnVuY3Rpb24odCl7dmFyIGU9UHJvbWlzZS5yZXNvbHZlKCk7aWYoIXQpcmV0dXJuIGU7Zm9yKDt0Lmxlbmd0aDspZT1lLnRoZW4odC5zaGlmdCgpKTtyZXR1cm4gZX0odC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcyl9LHIucHJlcGFyZUZuLHYucmVob3ZlcixmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoXCJwbG90bHlfdHJhbnNpdGlvbmluZ1wiLFtdKSxuZXcgUHJvbWlzZShmdW5jdGlvbihpKXt0Ll90cmFuc2l0aW9uaW5nPSEwLGUuZHVyYXRpb24+MCYmKHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb249ITApLHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MucHVzaChmdW5jdGlvbigpe249ITB9KSxyLnJlZHJhdyYmdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIGEuY2FsbChcInJlZHJhd1wiLHQpfSksdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uKCl7dC5lbWl0KFwicGxvdGx5X3RyYW5zaXRpb25pbnRlcnJ1cHRlZFwiLFtdKX0pO3ZhciBvPTAscz0wO2Z1bmN0aW9uIGwoKXtyZXR1cm4gbysrLGZ1bmN0aW9uKCl7dmFyIGU7cysrLG58fHMhPT1vfHwoZT1pLHQuX3RyYW5zaXRpb25EYXRhJiYoZnVuY3Rpb24odCl7aWYodClmb3IoO3QubGVuZ3RoOyl0LnNoaWZ0KCl9KHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtpZihyLnJlZHJhdylyZXR1cm4gYS5jYWxsKFwicmVkcmF3XCIsdCl9KS50aGVuKGZ1bmN0aW9uKCl7dC5fdHJhbnNpdGlvbmluZz0hMSx0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uPSExLHQuZW1pdChcInBsb3RseV90cmFuc2l0aW9uZWRcIixbXSl9KS50aGVuKGUpKSl9fXIucnVuRm4obCksc2V0VGltZW91dChsKCkpfSl9XSxvPWwuc3luY09yQXN5bmMoaSx0KTtyZXR1cm4gbyYmby50aGVufHwobz1Qcm9taXNlLnJlc29sdmUoKSksby50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KX1mdW5jdGlvbiBTKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5jbGVhckNhbGMoKSxcIm11bHRpY2F0ZWdvcnlcIj09PW4udHlwZSYmbi5zZXR1cE11bHRpQ2F0ZWdvcnkoZSl9fXYuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lJiZlLnNraXBVcGRhdGVDYWxjLGk9dC5fZnVsbExheW91dHx8e307aWYoaS5fc2tpcERlZmF1bHRzKWRlbGV0ZSBpLl9za2lwRGVmYXVsdHM7ZWxzZXt2YXIgbyxzPXQuX2Z1bGxMYXlvdXQ9e30sYz10LmxheW91dHx8e30sdT10Ll9mdWxsRGF0YXx8W10saD10Ll9mdWxsRGF0YT1bXSxmPXQuZGF0YXx8W10scD10LmNhbGNkYXRhfHxbXSxtPXQuX2NvbnRleHR8fHt9O3QuX3RyYW5zaXRpb25EYXRhfHx2LmNyZWF0ZVRyYW5zaXRpb25EYXRhKHQpLHMuX2RmbHRUaXRsZT17cGxvdDpnKHQsXCJDbGljayB0byBlbnRlciBQbG90IHRpdGxlXCIpLHg6Zyh0LFwiQ2xpY2sgdG8gZW50ZXIgWCBheGlzIHRpdGxlXCIpLHk6Zyh0LFwiQ2xpY2sgdG8gZW50ZXIgWSBheGlzIHRpdGxlXCIpLGNvbG9yYmFyOmcodCxcIkNsaWNrIHRvIGVudGVyIENvbG9yc2NhbGUgdGl0bGVcIiksYW5ub3RhdGlvbjpnKHQsXCJuZXcgdGV4dFwiKX0scy5fdHJhY2VXb3JkPWcodCxcInRyYWNlXCIpO3ZhciB5PV8odCx4KTtpZihzLl9tYXBib3hBY2Nlc3NUb2tlbj1tLm1hcGJveEFjY2Vzc1Rva2VuLGkuX2luaXRpYWxBdXRvU2l6ZUlzRG9uZSl7dmFyIHc9aS53aWR0aCxrPWkuaGVpZ2h0O3Yuc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHMoYyxzLHkpLGMud2lkdGh8fChzLndpZHRoPXcpLGMuaGVpZ2h0fHwocy5oZWlnaHQ9ayksdi5zYW5pdGl6ZU1hcmdpbnMocyl9ZWxzZXt2LnN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzKGMscyx5KTt2YXIgQT0hYy53aWR0aHx8IWMuaGVpZ2h0LE09cy5hdXRvc2l6ZSxTPW0uYXV0b3NpemFibGU7QSYmKE18fFMpP3YucGxvdEF1dG9TaXplKHQsYyxzKTpBJiZ2LnNhbml0aXplTWFyZ2lucyhzKSwhTSYmQSYmKGMud2lkdGg9cy53aWR0aCxjLmhlaWdodD1zLmhlaWdodCl9cy5fZDNsb2NhbGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kZWNpbWFsPWUuY2hhckF0KDApLHQudGhvdXNhbmRzPWUuY2hhckF0KDEpLG4ubG9jYWxlKHQpfSh5LHMuc2VwYXJhdG9ycykscy5fZXh0cmFGb3JtYXQ9Xyh0LGIpLHMuX2luaXRpYWxBdXRvU2l6ZUlzRG9uZT0hMCxzLl9kYXRhTGVuZ3RoPWYubGVuZ3RoLHMuX21vZHVsZXM9W10scy5fdmlzaWJsZU1vZHVsZXM9W10scy5fYmFzZVBsb3RNb2R1bGVzPVtdO3ZhciBFPXMuX3N1YnBsb3RzPWZ1bmN0aW9uKCl7dmFyIHQsZSxyPWEuY29sbGVjdGFibGVTdWJwbG90VHlwZXMsbj17fTtpZighcil7cj1bXTt2YXIgaT1hLnN1YnBsb3RzUmVnaXN0cnk7Zm9yKHZhciBvIGluIGkpe3ZhciBzPWlbb10sYz1zLmF0dHI7aWYoYyYmKHIucHVzaChvKSxBcnJheS5pc0FycmF5KGMpKSlmb3IoZT0wO2U8Yy5sZW5ndGg7ZSsrKWwucHVzaFVuaXF1ZShyLGNbZV0pfX1mb3IodD0wO3Q8ci5sZW5ndGg7dCsrKW5bclt0XV09W107cmV0dXJuIG59KCksQz1zLl9zcGxvbUF4ZXM9e3g6e30seTp7fX0sTD1zLl9zcGxvbVN1YnBsb3RzPXt9O3MuX3NwbG9tR3JpZERmbHQ9e30scy5fc2NhdHRlclN0YWNrT3B0cz17fSxzLl9maXJzdFNjYXR0ZXI9e30scy5fYWxpZ25tZW50T3B0cz17fSxzLl9yZXF1ZXN0UmFuZ2VzbGlkZXI9e30scy5fdHJhY2VVaWRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPWUubGVuZ3RoLGE9W107Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG89dFtyXS5fZnVsbElucHV0O28hPT1uJiZhLnB1c2gobyksbj1vfXZhciBzPWEubGVuZ3RoLGM9bmV3IEFycmF5KGkpLHU9e307ZnVuY3Rpb24gaCh0LGUpe2NbZV09dCx1W3RdPTF9ZnVuY3Rpb24gZih0LGUpe2lmKHQmJlwic3RyaW5nXCI9PXR5cGVvZiB0JiYhdVt0XSlyZXR1cm4gaCh0LGUpLCEwfWZvcihyPTA7cjxpO3IrKyl7dmFyIHA9ZVtyXS51aWQ7XCJudW1iZXJcIj09dHlwZW9mIHAmJihwPVN0cmluZyhwKSksZihwLHIpfHwocjxzJiZmKGFbcl0udWlkLHIpfHxoKGwucmFuZHN0cih1KSxyKSl9cmV0dXJuIGN9KHUsZikscy5fZ2xvYmFsVHJhbnNmb3Jtcz0odC5fY29udGV4dHx8e30pLmdsb2JhbFRyYW5zZm9ybXMsdi5zdXBwbHlEYXRhRGVmYXVsdHMoZixoLGMscyk7dmFyIHo9T2JqZWN0LmtleXMoQy54KSxPPU9iamVjdC5rZXlzKEMueSk7aWYoei5sZW5ndGg+MSYmTy5sZW5ndGg+MSl7Zm9yKGEuZ2V0Q29tcG9uZW50TWV0aG9kKFwiZ3JpZFwiLFwic2l6ZURlZmF1bHRzXCIpKGMscyksbz0wO288ei5sZW5ndGg7bysrKWwucHVzaFVuaXF1ZShFLnhheGlzLHpbb10pO2ZvcihvPTA7bzxPLmxlbmd0aDtvKyspbC5wdXNoVW5pcXVlKEUueWF4aXMsT1tvXSk7Zm9yKHZhciBJIGluIEwpbC5wdXNoVW5pcXVlKEUuY2FydGVzaWFuLEkpfWlmKHMuX2hhcz12Ll9oYXNQbG90VHlwZS5iaW5kKHMpLHUubGVuZ3RoPT09aC5sZW5ndGgpZm9yKG89MDtvPGgubGVuZ3RoO28rKylkKGhbb10sdVtvXSk7di5zdXBwbHlMYXlvdXRNb2R1bGVEZWZhdWx0cyhjLHMsaCx0Ll90cmFuc2l0aW9uRGF0YSk7dmFyIEQ9cy5fdmlzaWJsZU1vZHVsZXMsUD1bXTtmb3Iobz0wO288RC5sZW5ndGg7bysrKXt2YXIgUj1EW29dLmNyb3NzVHJhY2VEZWZhdWx0cztSJiZsLnB1c2hVbmlxdWUoUCxSKX1mb3Iobz0wO288UC5sZW5ndGg7bysrKVBbb10oaCxzKTthLmdldENvbXBvbmVudE1ldGhvZChcImNvbG9yc2NhbGVcIixcImNyb3NzVHJhY2VEZWZhdWx0c1wiKShoLHMpLHMuX2hhc09ubHlMYXJnZVNwbG9tcz0xPT09cy5fYmFzZVBsb3RNb2R1bGVzLmxlbmd0aCYmXCJzcGxvbVwiPT09cy5fYmFzZVBsb3RNb2R1bGVzWzBdLm5hbWUmJnoubGVuZ3RoPjE1JiZPLmxlbmd0aD4xNSYmMD09PXMuc2hhcGVzLmxlbmd0aCYmMD09PXMuaW1hZ2VzLmxlbmd0aCxzLl9oYXNDYXJ0ZXNpYW49cy5faGFzKFwiY2FydGVzaWFuXCIpLHMuX2hhc0dlbz1zLl9oYXMoXCJnZW9cIikscy5faGFzR0wzRD1zLl9oYXMoXCJnbDNkXCIpLHMuX2hhc0dMMkQ9cy5faGFzKFwiZ2wyZFwiKSxzLl9oYXNUZXJuYXJ5PXMuX2hhcyhcInRlcm5hcnlcIikscy5faGFzUGllPXMuX2hhcyhcInBpZVwiKSx2LmxpbmtTdWJwbG90cyhoLHMsdSxpKSx2LmNsZWFuUGxvdChoLHMsdSxpKSxpLl96b29tbGF5ZXImJiF0Ll9kcmFnZ2luZyYmaS5fem9vbWxheWVyLnNlbGVjdEFsbChcIi5zZWxlY3Qtb3V0bGluZVwiKS5yZW1vdmUoKSxkKHMsaSkscy5fcHJlR1VJfHwocy5fcHJlR1VJPXt9KSxzLl90cmFjZVByZUdVSXx8KHMuX3RyYWNlUHJlR1VJPXt9KTt2YXIgRixCPXMuX3RyYWNlUHJlR1VJLE49e307Zm9yKEYgaW4gQilOW0ZdPVwib2xkXCI7Zm9yKG89MDtvPGgubGVuZ3RoO28rKylOW0Y9aFtvXS5fZnVsbElucHV0LnVpZF18fChCW0ZdPXt9KSxOW0ZdPVwibmV3XCI7Zm9yKEYgaW4gTilcIm9sZFwiPT09TltGXSYmZGVsZXRlIEJbRl07VChzKSxhLmdldENvbXBvbmVudE1ldGhvZChcInJhbmdlc2xpZGVyXCIsXCJtYWtlRGF0YVwiKShzKSxyfHxwLmxlbmd0aCE9PWgubGVuZ3RofHx2LnN1cHBseURlZmF1bHRzVXBkYXRlQ2FsYyhwLGgpfX0sdi5zdXBwbHlEZWZhdWx0c1VwZGF0ZUNhbGM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXSxpPSh0W3JdfHxbXSlbMF07aWYoaSYmaS50cmFjZSl7dmFyIGE9aS50cmFjZTtpZihhLl9oYXNDYWxjVHJhbnNmb3JtKXt2YXIgbyxzLGMsdT1hLl9hcnJheUF0dHJzO2ZvcihvPTA7bzx1Lmxlbmd0aDtvKyspcz11W29dLGM9bC5uZXN0ZWRQcm9wZXJ0eShhLHMpLmdldCgpLnNsaWNlKCksbC5uZXN0ZWRQcm9wZXJ0eShuLHMpLnNldChjKX1pLnRyYWNlPW59fX0sdi5jcmVhdGVUcmFuc2l0aW9uRGF0YT1mdW5jdGlvbih0KXt0Ll90cmFuc2l0aW9uRGF0YXx8KHQuX3RyYW5zaXRpb25EYXRhPXt9KSx0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzfHwodC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcz1bXSksdC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaHx8KHQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g9e30pLHQuX3RyYW5zaXRpb25EYXRhLl9jb3VudGVyfHwodC5fdHJhbnNpdGlvbkRhdGEuX2NvdW50ZXI9MCksdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrc3x8KHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3M9W10pfSx2Ll9oYXNQbG90VHlwZT1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuX2Jhc2VQbG90TW9kdWxlc3x8W107Zm9yKGU9MDtlPHIubGVuZ3RoO2UrKylpZihyW2VdLm5hbWU9PT10KXJldHVybiEwO3ZhciBuPXRoaXMuX21vZHVsZXN8fFtdO2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspe3ZhciBpPW5bZV0ubmFtZTtpZihpPT09dClyZXR1cm4hMDt2YXIgbz1hLm1vZHVsZXNbaV07aWYobyYmby5jYXRlZ29yaWVzW3RdKXJldHVybiEwfXJldHVybiExfSx2LmNsZWFuUGxvdD1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG89bi5fYmFzZVBsb3RNb2R1bGVzfHxbXTtmb3IoaT0wO2k8by5sZW5ndGg7aSsrKXt2YXIgcz1vW2ldO3MuY2xlYW4mJnMuY2xlYW4odCxlLHIsbil9dmFyIGw9bi5faGFzJiZuLl9oYXMoXCJnbFwiKSxjPWUuX2hhcyYmZS5faGFzKFwiZ2xcIik7bCYmIWMmJnZvaWQgMCE9PW4uX2dsY29udGFpbmVyJiYobi5fZ2xjb250YWluZXIuc2VsZWN0QWxsKFwiLmdsLWNhbnZhc1wiKS5yZW1vdmUoKSxuLl9nbGNvbnRhaW5lci5zZWxlY3RBbGwoXCIubm8td2ViZ2xcIikucmVtb3ZlKCksbi5fZ2xjYW52YXM9bnVsbCk7dmFyIHU9ISFuLl9pbmZvbGF5ZXI7dDpmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgaD1yW2ldLnVpZDtmb3IoYT0wO2E8dC5sZW5ndGg7YSsrKXtpZihoPT09dFthXS51aWQpY29udGludWUgdH11JiZuLl9pbmZvbGF5ZXIuc2VsZWN0KFwiLmNiXCIraCkucmVtb3ZlKCl9fSx2LmxpbmtTdWJwbG90cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG89bi5fcGxvdHN8fHt9LHM9ZS5fcGxvdHM9e30sYz1lLl9zdWJwbG90cyx1PXtfZnVsbERhdGE6dCxfZnVsbExheW91dDplfSxmPWMuY2FydGVzaWFuLmNvbmNhdChjLmdsMmR8fFtdKTtmb3IoaT0wO2k8Zi5sZW5ndGg7aSsrKXt2YXIgcCxkPWZbaV0sZz1vW2RdLHY9aC5nZXRGcm9tSWQodSxkLFwieFwiKSxtPWguZ2V0RnJvbUlkKHUsZCxcInlcIik7Zm9yKGc/cD1zW2RdPWc6KHA9c1tkXT17fSkuaWQ9ZCx2Ll9jb3VudGVyQXhlcy5wdXNoKG0uX2lkKSxtLl9jb3VudGVyQXhlcy5wdXNoKHYuX2lkKSx2Ll9zdWJwbG90c1dpdGgucHVzaChkKSxtLl9zdWJwbG90c1dpdGgucHVzaChkKSxwLnhheGlzPXYscC55YXhpcz1tLHAuX2hhc0NsaXBPbkF4aXNGYWxzZT0hMSxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciB5PXRbYV07aWYoeS54YXhpcz09PXAueGF4aXMuX2lkJiZ5LnlheGlzPT09cC55YXhpcy5faWQmJiExPT09eS5jbGlwb25heGlzKXtwLl9oYXNDbGlwT25BeGlzRmFsc2U9ITA7YnJlYWt9fX12YXIgeCxiPWgubGlzdCh1LG51bGwsITApO2ZvcihpPTA7aTxiLmxlbmd0aDtpKyspe3ZhciBfPW51bGw7KHg9YltpXSkub3ZlcmxheWluZyYmKF89aC5nZXRGcm9tSWQodSx4Lm92ZXJsYXlpbmcpKSYmXy5vdmVybGF5aW5nJiYoeC5vdmVybGF5aW5nPSExLF89bnVsbCkseC5fbWFpbkF4aXM9X3x8eCxfJiYoeC5kb21haW49Xy5kb21haW4uc2xpY2UoKSkseC5fYW5jaG9yQXhpcz1cImZyZWVcIj09PXguYW5jaG9yP251bGw6aC5nZXRGcm9tSWQodSx4LmFuY2hvcil9Zm9yKGk9MDtpPGIubGVuZ3RoO2krKykoeD1iW2ldKS5fY291bnRlckF4ZXMuc29ydChoLmlkU29ydCkseC5fc3VicGxvdHNXaXRoLnNvcnQobC5zdWJwbG90U29ydCkseC5fbWFpblN1YnBsb3Q9dyh4LGUpfSx2LmNsZWFyRXhwYW5kZWRUcmFjZURlZmF1bHRDb2xvcnM9ZnVuY3Rpb24odCl7dmFyIGUscixuO2ZvcihyPVtdLChlPXQuX21vZHVsZS5fY29sb3JBdHRycyl8fCh0Ll9tb2R1bGUuX2NvbG9yQXR0cnM9ZT1bXSxvLmNyYXdsKHQuX21vZHVsZS5hdHRyaWJ1dGVzLGZ1bmN0aW9uKHQsbixpLGEpe3JbYV09bixyLmxlbmd0aD1hKzEsXCJjb2xvclwiPT09dC52YWxUeXBlJiZ2b2lkIDA9PT10LmRmbHQmJmUucHVzaChyLmpvaW4oXCIuXCIpKX0pKSxuPTA7bjxlLmxlbmd0aDtuKyspe2wubmVzdGVkUHJvcGVydHkodCxcIl9pbnB1dC5cIitlW25dKS5nZXQoKXx8bC5uZXN0ZWRQcm9wZXJ0eSh0LGVbbl0pLnNldChudWxsKX19LHYuc3VwcGx5RGF0YURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLG8sYyx1PW4uX21vZHVsZXMsaD1uLl92aXNpYmxlTW9kdWxlcyxmPW4uX2Jhc2VQbG90TW9kdWxlcyxwPTAsZz0wO2Z1bmN0aW9uIG0odCl7ZS5wdXNoKHQpO3ZhciByPXQuX21vZHVsZTtyJiYobC5wdXNoVW5pcXVlKHUsciksITA9PT10LnZpc2libGUmJmwucHVzaFVuaXF1ZShoLHIpLGwucHVzaFVuaXF1ZShmLHQuX21vZHVsZS5iYXNlUGxvdE1vZHVsZSkscCsrLCExIT09dC5faW5wdXQudmlzaWJsZSYmZysrKX1uLl90cmFuc2Zvcm1Nb2R1bGVzPVtdO3ZhciB5PXt9LHg9W10sYj0oci50ZW1wbGF0ZXx8e30pLmRhdGF8fHt9LF89cy50cmFjZVRlbXBsYXRlcihiKTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKXtpZihjPXRbaV0sKG89Xy5uZXdUcmFjZShjKSkudWlkPW4uX3RyYWNlVWlkc1tpXSx2LnN1cHBseVRyYWNlRGVmYXVsdHMoYyxvLGcsbixpKSxvLmluZGV4PWksby5faW5wdXQ9YyxvLl9leHBhbmRlZEluZGV4PXAsby50cmFuc2Zvcm1zJiZvLnRyYW5zZm9ybXMubGVuZ3RoKWZvcih2YXIgdz0hMSE9PWMudmlzaWJsZSYmITE9PT1vLnZpc2libGUsaz1BKG8sZSxyLG4pLFQ9MDtUPGsubGVuZ3RoO1QrKyl7dmFyIE09a1tUXSxTPXtfdGVtcGxhdGU6by5fdGVtcGxhdGUsdHlwZTpvLnR5cGUsdWlkOm8udWlkK1R9O3cmJiExPT09TS52aXNpYmxlJiZkZWxldGUgTS52aXNpYmxlLHYuc3VwcGx5VHJhY2VEZWZhdWx0cyhNLFMscCxuLGkpLGQoUyxNKSxTLmluZGV4PWksUy5faW5wdXQ9YyxTLl9mdWxsSW5wdXQ9byxTLl9leHBhbmRlZEluZGV4PXAsUy5fZXhwYW5kZWRJbnB1dD1NLG0oUyl9ZWxzZSBvLl9mdWxsSW5wdXQ9byxvLl9leHBhbmRlZElucHV0PW8sbShvKTthLnRyYWNlSXMobyxcImNhcnBldEF4aXNcIikmJih5W28uY2FycGV0XT1vKSxhLnRyYWNlSXMobyxcImNhcnBldERlcGVuZGVudFwiKSYmeC5wdXNoKGkpfWZvcihpPTA7aTx4Lmxlbmd0aDtpKyspaWYoKG89ZVt4W2ldXSkudmlzaWJsZSl7dmFyIEU9eVtvLmNhcnBldF07by5fY2FycGV0PUUsRSYmRS52aXNpYmxlPyhvLnhheGlzPUUueGF4aXMsby55YXhpcz1FLnlheGlzKTpvLnZpc2libGU9ITF9fSx2LnN1cHBseUFuaW1hdGlvbkRlZmF1bHRzPWZ1bmN0aW9uKHQpe3ZhciBlO3Q9dHx8e307dmFyIHI9e307ZnVuY3Rpb24gbihlLG4pe3JldHVybiBsLmNvZXJjZSh0fHx7fSxyLGYsZSxuKX1pZihuKFwibW9kZVwiKSxuKFwiZGlyZWN0aW9uXCIpLG4oXCJmcm9tY3VycmVudFwiKSxBcnJheS5pc0FycmF5KHQuZnJhbWUpKWZvcihyLmZyYW1lPVtdLGU9MDtlPHQuZnJhbWUubGVuZ3RoO2UrKylyLmZyYW1lW2VdPXYuc3VwcGx5QW5pbWF0aW9uRnJhbWVEZWZhdWx0cyh0LmZyYW1lW2VdfHx7fSk7ZWxzZSByLmZyYW1lPXYuc3VwcGx5QW5pbWF0aW9uRnJhbWVEZWZhdWx0cyh0LmZyYW1lfHx7fSk7aWYoQXJyYXkuaXNBcnJheSh0LnRyYW5zaXRpb24pKWZvcihyLnRyYW5zaXRpb249W10sZT0wO2U8dC50cmFuc2l0aW9uLmxlbmd0aDtlKyspci50cmFuc2l0aW9uW2VdPXYuc3VwcGx5QW5pbWF0aW9uVHJhbnNpdGlvbkRlZmF1bHRzKHQudHJhbnNpdGlvbltlXXx8e30pO2Vsc2Ugci50cmFuc2l0aW9uPXYuc3VwcGx5QW5pbWF0aW9uVHJhbnNpdGlvbkRlZmF1bHRzKHQudHJhbnNpdGlvbnx8e30pO3JldHVybiByfSx2LnN1cHBseUFuaW1hdGlvbkZyYW1lRGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gcihyLG4pe3JldHVybiBsLmNvZXJjZSh0fHx7fSxlLGYuZnJhbWUscixuKX1yZXR1cm4gcihcImR1cmF0aW9uXCIpLHIoXCJyZWRyYXdcIiksZX0sdi5zdXBwbHlBbmltYXRpb25UcmFuc2l0aW9uRGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gcihyLG4pe3JldHVybiBsLmNvZXJjZSh0fHx7fSxlLGYudHJhbnNpdGlvbixyLG4pfXJldHVybiByKFwiZHVyYXRpb25cIikscihcImVhc2luZ1wiKSxlfSx2LnN1cHBseUZyYW1lRGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gcihyLG4pe3JldHVybiBsLmNvZXJjZSh0LGUscCxyLG4pfXJldHVybiByKFwiZ3JvdXBcIikscihcIm5hbWVcIikscihcInRyYWNlc1wiKSxyKFwiYmFzZWZyYW1lXCIpLHIoXCJkYXRhXCIpLHIoXCJsYXlvdXRcIiksZX0sdi5zdXBwbHlUcmFjZURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG8scz1uLmNvbG9yd2F5fHxjLmRlZmF1bHRzLHU9c1tyJXMubGVuZ3RoXTtmdW5jdGlvbiBoKHIsbil7cmV0dXJuIGwuY29lcmNlKHQsZSx2LmF0dHJpYnV0ZXMscixuKX12YXIgZj1oKFwidmlzaWJsZVwiKTtoKFwidHlwZVwiKSxoKFwibmFtZVwiLG4uX3RyYWNlV29yZCtcIiBcIitpKSxoKFwidWlyZXZpc2lvblwiLG4udWlyZXZpc2lvbik7dmFyIHA9di5nZXRNb2R1bGUoZSk7aWYoZS5fbW9kdWxlPXAscCl7dmFyIGQ9cC5iYXNlUGxvdE1vZHVsZSxnPWQuYXR0cixtPWQuYXR0cmlidXRlcztpZihnJiZtKXt2YXIgeT1uLl9zdWJwbG90cyx4PVwiXCI7aWYoXCJnbDJkXCIhPT1kLm5hbWV8fGYpe2lmKEFycmF5LmlzQXJyYXkoZykpZm9yKG89MDtvPGcubGVuZ3RoO28rKyl7dmFyIGI9Z1tvXSxfPWwuY29lcmNlKHQsZSxtLGIpO3lbYl0mJmwucHVzaFVuaXF1ZSh5W2JdLF8pLHgrPV99ZWxzZSB4PWwuY29lcmNlKHQsZSxtLGcpO3lbZC5uYW1lXSYmbC5wdXNoVW5pcXVlKHlbZC5uYW1lXSx4KX19fXJldHVybiBmJiYoaChcImN1c3RvbWRhdGFcIiksaChcImlkc1wiKSxhLnRyYWNlSXMoZSxcInNob3dMZWdlbmRcIik/KGUuX2RmbHRTaG93TGVnZW5kPSEwLGgoXCJzaG93bGVnZW5kXCIpLGgoXCJsZWdlbmRncm91cFwiKSk6ZS5fZGZsdFNob3dMZWdlbmQ9ITEscCYmcC5zdXBwbHlEZWZhdWx0cyh0LGUsdSxuKSxhLnRyYWNlSXMoZSxcIm5vT3BhY2l0eVwiKXx8aChcIm9wYWNpdHlcIiksYS50cmFjZUlzKGUsXCJub3RMZWdlbmRJc29sYXRhYmxlXCIpJiYoZS52aXNpYmxlPSEhZS52aXNpYmxlKSxhLnRyYWNlSXMoZSxcIm5vSG92ZXJcIil8fChlLmhvdmVydGVtcGxhdGV8fGwuY29lcmNlSG92ZXJpbmZvKHQsZSxuKSxcInBhcmNhdHNcIiE9PWUudHlwZSYmYS5nZXRDb21wb25lbnRNZXRob2QoXCJmeFwiLFwic3VwcGx5RGVmYXVsdHNcIikodCxlLHUsbikpLHAmJnAuc2VsZWN0UG9pbnRzJiZoKFwic2VsZWN0ZWRwb2ludHNcIiksdi5zdXBwbHlUcmFuc2Zvcm1EZWZhdWx0cyh0LGUsbikpLGV9LHYuaGFzTWFrZXNEYXRhVHJhbnNmb3JtPWssdi5zdXBwbHlUcmFuc2Zvcm1EZWZhdWx0cz1mdW5jdGlvbih0LGUscil7aWYoZS5fbGVuZ3RofHxrKHQpKXt2YXIgbj1yLl9nbG9iYWxUcmFuc2Zvcm1zfHxbXSxpPXIuX3RyYW5zZm9ybU1vZHVsZXN8fFtdO2lmKEFycmF5LmlzQXJyYXkodC50cmFuc2Zvcm1zKXx8MCE9PW4ubGVuZ3RoKWZvcih2YXIgYT10LnRyYW5zZm9ybXN8fFtdLG89bi5jb25jYXQoYSkscz1lLnRyYW5zZm9ybXM9W10sYz0wO2M8by5sZW5ndGg7YysrKXt2YXIgdSxoPW9bY10sZj1oLnR5cGUscD1tW2ZdLGQ9IShoLl9tb2R1bGUmJmguX21vZHVsZT09PXApLGc9cCYmXCJmdW5jdGlvblwiPT10eXBlb2YgcC50cmFuc2Zvcm07cHx8bC53YXJuKFwiVW5yZWNvZ25pemVkIHRyYW5zZm9ybSB0eXBlIFwiK2YrXCIuXCIpLHAmJnAuc3VwcGx5RGVmYXVsdHMmJihkfHxnKT8oKHU9cC5zdXBwbHlEZWZhdWx0cyhoLGUscix0KSkudHlwZT1mLHUuX21vZHVsZT1wLGwucHVzaFVuaXF1ZShpLHApKTp1PWwuZXh0ZW5kRmxhdCh7fSxoKSxzLnB1c2godSl9fX0sdi5zdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBsLmNvZXJjZSh0LGUsdi5sYXlvdXRBdHRyaWJ1dGVzLHIsbil9dmFyIGk9dC50ZW1wbGF0ZTtsLmlzUGxhaW5PYmplY3QoaSkmJihlLnRlbXBsYXRlPWksZS5fdGVtcGxhdGU9aS5sYXlvdXQsZS5fZGF0YVRlbXBsYXRlPWkuZGF0YSk7dmFyIG89bC5jb2VyY2VGb250KG4sXCJmb250XCIpO24oXCJ0aXRsZS50ZXh0XCIsZS5fZGZsdFRpdGxlLnBsb3QpLGwuY29lcmNlRm9udChuLFwidGl0bGUuZm9udFwiLHtmYW1pbHk6by5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKDEuNCpvLnNpemUpLGNvbG9yOm8uY29sb3J9KSxuKFwidGl0bGUueHJlZlwiKSxuKFwidGl0bGUueXJlZlwiKSxuKFwidGl0bGUueFwiKSxuKFwidGl0bGUueVwiKSxuKFwidGl0bGUueGFuY2hvclwiKSxuKFwidGl0bGUueWFuY2hvclwiKSxuKFwidGl0bGUucGFkLnRcIiksbihcInRpdGxlLnBhZC5yXCIpLG4oXCJ0aXRsZS5wYWQuYlwiKSxuKFwidGl0bGUucGFkLmxcIiksbihcImF1dG9zaXplXCIsISh0LndpZHRoJiZ0LmhlaWdodCkpLG4oXCJ3aWR0aFwiKSxuKFwiaGVpZ2h0XCIpLG4oXCJtYXJnaW4ubFwiKSxuKFwibWFyZ2luLnJcIiksbihcIm1hcmdpbi50XCIpLG4oXCJtYXJnaW4uYlwiKSxuKFwibWFyZ2luLnBhZFwiKSxuKFwibWFyZ2luLmF1dG9leHBhbmRcIiksdC53aWR0aCYmdC5oZWlnaHQmJnYuc2FuaXRpemVNYXJnaW5zKGUpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKFwiZ3JpZFwiLFwic2l6ZURlZmF1bHRzXCIpKHQsZSksbihcInBhcGVyX2JnY29sb3JcIiksbihcInNlcGFyYXRvcnNcIixyLmRlY2ltYWwrci50aG91c2FuZHMpLG4oXCJoaWRlc291cmNlc1wiKSxuKFwiY29sb3J3YXlcIiksbihcImRhdGFyZXZpc2lvblwiKTt2YXIgcz1uKFwidWlyZXZpc2lvblwiKTtuKFwiZWRpdHJldmlzaW9uXCIscyksbihcInNlbGVjdGlvbnJldmlzaW9uXCIscyksbihcIm1vZGViYXIub3JpZW50YXRpb25cIiksbihcIm1vZGViYXIuYmdjb2xvclwiLGMuYWRkT3BhY2l0eShlLnBhcGVyX2JnY29sb3IsLjUpKTt2YXIgdT1jLmNvbnRyYXN0KGMucmdiKGUubW9kZWJhci5iZ2NvbG9yKSk7bihcIm1vZGViYXIuY29sb3JcIixjLmFkZE9wYWNpdHkodSwuMykpLG4oXCJtb2RlYmFyLmFjdGl2ZWNvbG9yXCIsYy5hZGRPcGFjaXR5KHUsLjcpKSxuKFwibW9kZWJhci51aXJldmlzaW9uXCIscyksbihcIm1ldGFcIiksbC5pc1BsYWluT2JqZWN0KHQudHJhbnNpdGlvbikmJihuKFwidHJhbnNpdGlvbi5kdXJhdGlvblwiKSxuKFwidHJhbnNpdGlvbi5lYXNpbmdcIiksbihcInRyYW5zaXRpb24ub3JkZXJpbmdcIikpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKFwiY2FsZW5kYXJzXCIsXCJoYW5kbGVEZWZhdWx0c1wiKSh0LGUsXCJjYWxlbmRhclwiKSxhLmdldENvbXBvbmVudE1ldGhvZChcImZ4XCIsXCJzdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0c1wiKSh0LGUsbil9LHYucGxvdEF1dG9TaXplPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixhLG89dC5fY29udGV4dHx8e30scz1vLmZyYW1lTWFyZ2lucyxjPWwuaXNQbG90RGl2KHQpO2lmKGMmJnQuZW1pdChcInBsb3RseV9hdXRvc2l6ZVwiKSxvLmZpbGxGcmFtZSluPXdpbmRvdy5pbm5lcldpZHRoLGE9d2luZG93LmlubmVySGVpZ2h0LGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9XCJoaWRkZW5cIjtlbHNle3ZhciB1PWM/d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk6e307aWYobj1wYXJzZUZsb2F0KHUud2lkdGgpfHxwYXJzZUZsb2F0KHUubWF4V2lkdGgpfHxyLndpZHRoLGE9cGFyc2VGbG9hdCh1LmhlaWdodCl8fHBhcnNlRmxvYXQodS5tYXhIZWlnaHQpfHxyLmhlaWdodCxpKHMpJiZzPjApe3ZhciBoPTEtMipzO249TWF0aC5yb3VuZChoKm4pLGE9TWF0aC5yb3VuZChoKmEpfX12YXIgZj12LmxheW91dEF0dHJpYnV0ZXMud2lkdGgubWluLHA9di5sYXlvdXRBdHRyaWJ1dGVzLmhlaWdodC5taW47bjxmJiYobj1mKSxhPHAmJihhPXApO3ZhciBkPSFlLndpZHRoJiZNYXRoLmFicyhyLndpZHRoLW4pPjEsZz0hZS5oZWlnaHQmJk1hdGguYWJzKHIuaGVpZ2h0LWEpPjE7KGd8fGQpJiYoZCYmKHIud2lkdGg9biksZyYmKHIuaGVpZ2h0PWEpKSx0Ll9pbml0aWFsQXV0b1NpemV8fCh0Ll9pbml0aWFsQXV0b1NpemU9e3dpZHRoOm4saGVpZ2h0OmF9KSx2LnNhbml0aXplTWFyZ2lucyhyKX0sdi5zdXBwbHlMYXlvdXRNb2R1bGVEZWZhdWx0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxvLHMsYz1hLmNvbXBvbmVudHNSZWdpc3RyeSx1PWUuX2Jhc2VQbG90TW9kdWxlcyxoPWEuc3VicGxvdHNSZWdpc3RyeS5jYXJ0ZXNpYW47Zm9yKGkgaW4gYykocz1jW2ldKS5pbmNsdWRlQmFzZVBsb3QmJnMuaW5jbHVkZUJhc2VQbG90KHQsZSk7Zm9yKHZhciBmIGluIHUubGVuZ3RofHx1LnB1c2goaCksZS5faGFzKFwiY2FydGVzaWFuXCIpJiYoYS5nZXRDb21wb25lbnRNZXRob2QoXCJncmlkXCIsXCJjb250ZW50RGVmYXVsdHNcIikodCxlKSxoLmZpbmFsaXplU3VicGxvdHModCxlKSksZS5fc3VicGxvdHMpZS5fc3VicGxvdHNbZl0uc29ydChsLnN1YnBsb3RTb3J0KTtmb3Iobz0wO288dS5sZW5ndGg7bysrKShzPXVbb10pLnN1cHBseUxheW91dERlZmF1bHRzJiZzLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyKTt2YXIgcD1lLl9tb2R1bGVzO2ZvcihvPTA7bzxwLmxlbmd0aDtvKyspKHM9cFtvXSkuc3VwcGx5TGF5b3V0RGVmYXVsdHMmJnMuc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIpO3ZhciBkPWUuX3RyYW5zZm9ybU1vZHVsZXM7Zm9yKG89MDtvPGQubGVuZ3RoO28rKykocz1kW29dKS5zdXBwbHlMYXlvdXREZWZhdWx0cyYmcy5zdXBwbHlMYXlvdXREZWZhdWx0cyh0LGUscixuKTtmb3IoaSBpbiBjKShzPWNbaV0pLnN1cHBseUxheW91dERlZmF1bHRzJiZzLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyKX0sdi5wdXJnZT1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0fHx7fTt2b2lkIDAhPT1lLl9nbGNvbnRhaW5lciYmKGUuX2dsY29udGFpbmVyLnNlbGVjdEFsbChcIi5nbC1jYW52YXNcIikucmVtb3ZlKCksZS5fZ2xjb250YWluZXIucmVtb3ZlKCksZS5fZ2xjYW52YXM9bnVsbCksdm9pZCAwIT09ZS5fZ2VvY29udGFpbmVyJiZlLl9nZW9jb250YWluZXIucmVtb3ZlKCksZS5fbW9kZUJhciYmZS5fbW9kZUJhci5kZXN0cm95KCksdC5fdHJhbnNpdGlvbkRhdGEmJih0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzJiYodC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5sZW5ndGg9MCksdC5fdHJhbnNpdGlvbkRhdGEuX2FuaW1hdGlvblJhZiYmd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHQuX3RyYW5zaXRpb25EYXRhLl9hbmltYXRpb25SYWYpKSxsLmNsZWFyVGhyb3R0bGUoKSxsLmNsZWFyUmVzcG9uc2l2ZSh0KSxkZWxldGUgdC5kYXRhLGRlbGV0ZSB0LmxheW91dCxkZWxldGUgdC5fZnVsbERhdGEsZGVsZXRlIHQuX2Z1bGxMYXlvdXQsZGVsZXRlIHQuY2FsY2RhdGEsZGVsZXRlIHQuZnJhbWV3b3JrLGRlbGV0ZSB0LmVtcHR5LGRlbGV0ZSB0LmZpZCxkZWxldGUgdC51bmRvcXVldWUsZGVsZXRlIHQudW5kb251bSxkZWxldGUgdC5hdXRvcGxheSxkZWxldGUgdC5jaGFuZ2VkLGRlbGV0ZSB0Ll9wcm9taXNlcyxkZWxldGUgdC5fcmVkcmF3VGltZXIsZGVsZXRlIHQuX2htbHVtY291bnQsZGVsZXRlIHQuX2htcGl4Y291bnQsZGVsZXRlIHQuX3RyYW5zaXRpb25EYXRhLGRlbGV0ZSB0Ll90cmFuc2l0aW9uaW5nLGRlbGV0ZSB0Ll9pbml0aWFsQXV0b1NpemUsZGVsZXRlIHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24sZGVsZXRlIHQuX2RyYWdnaW5nLGRlbGV0ZSB0Ll9kcmFnZ2VkLGRlbGV0ZSB0Ll9kcmFnZGF0YSxkZWxldGUgdC5faG92ZXJkYXRhLGRlbGV0ZSB0Ll9zbmFwc2hvdEluUHJvZ3Jlc3MsZGVsZXRlIHQuX2VkaXRpbmcsZGVsZXRlIHQuX21vdXNlRG93blRpbWUsZGVsZXRlIHQuX2xlZ2VuZE1vdXNlRG93blRpbWUsdC5yZW1vdmVBbGxMaXN0ZW5lcnMmJnQucmVtb3ZlQWxsTGlzdGVuZXJzKCl9LHYuc3R5bGU9ZnVuY3Rpb24odCl7dmFyIGUscj10Ll9mdWxsTGF5b3V0Ll92aXNpYmxlTW9kdWxlcyxuPVtdO2ZvcihlPTA7ZTxyLmxlbmd0aDtlKyspe3ZhciBpPXJbZV07aS5zdHlsZSYmbC5wdXNoVW5pcXVlKG4saS5zdHlsZSl9Zm9yKGU9MDtlPG4ubGVuZ3RoO2UrKyluW2VdKHQpfSx2LnNhbml0aXplTWFyZ2lucz1mdW5jdGlvbih0KXtpZih0JiZ0Lm1hcmdpbil7dmFyIGUscj10LndpZHRoLG49dC5oZWlnaHQsaT10Lm1hcmdpbixhPXItKGkubCtpLnIpLG89bi0oaS50K2kuYik7YTwwJiYoZT0oci0xKS8oaS5sK2kuciksaS5sPU1hdGguZmxvb3IoZSppLmwpLGkucj1NYXRoLmZsb29yKGUqaS5yKSksbzwwJiYoZT0obi0xKS8oaS50K2kuYiksaS50PU1hdGguZmxvb3IoZSppLnQpLGkuYj1NYXRoLmZsb29yKGUqaS5iKSl9fSx2LmNsZWFyQXV0b01hcmdpbklkcz1mdW5jdGlvbih0KXt0Ll9mdWxsTGF5b3V0Ll9wdXNobWFyZ2luSWRzPXt9fSx2LmFsbG93QXV0b01hcmdpbj1mdW5jdGlvbih0LGUpe3QuX2Z1bGxMYXlvdXQuX3B1c2htYXJnaW5JZHNbZV09MX0sdi5hdXRvTWFyZ2luPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Ll9mdWxsTGF5b3V0LGk9bi5fcHVzaG1hcmdpbixhPW4uX3B1c2htYXJnaW5JZHM7aWYoITEhPT1uLm1hcmdpbi5hdXRvZXhwYW5kKXtpZihyKXt2YXIgbz1yLnBhZDtpZih2b2lkIDA9PT1vKXt2YXIgcz1uLm1hcmdpbjtvPU1hdGgubWluKDEyLHMubCxzLnIscy50LHMuYil9ci5sK3Iucj4uNSpuLndpZHRoJiYoci5sPXIucj0wKSxyLmIrci50Pi41Km4uaGVpZ2h0JiYoci5iPXIudD0wKTt2YXIgbD12b2lkIDAhPT1yLnhsP3IueGw6ci54LGM9dm9pZCAwIT09ci54cj9yLnhyOnIueCx1PXZvaWQgMCE9PXIueXQ/ci55dDpyLnksaD12b2lkIDAhPT1yLnliP3IueWI6ci55O2lbZV09e2w6e3ZhbDpsLHNpemU6ci5sK299LHI6e3ZhbDpjLHNpemU6ci5yK299LGI6e3ZhbDpoLHNpemU6ci5iK299LHQ6e3ZhbDp1LHNpemU6ci50K299fSxhW2VdPTF9ZWxzZSBkZWxldGUgaVtlXSxkZWxldGUgYVtlXTtuLl9yZXBsb3R0aW5nfHx2LmRvQXV0b01hcmdpbih0KX19LHYuZG9BdXRvTWFyZ2luPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7ZS5fc2l6ZXx8KGUuX3NpemU9e30pLFQoZSk7dmFyIHI9ZS5fc2l6ZSxuPUpTT04uc3RyaW5naWZ5KHIpLG89ZS5tYXJnaW4scz1vLmwsbD1vLnIsYz1vLnQsdT1vLmIsaD1lLndpZHRoLGY9ZS5oZWlnaHQscD1lLl9wdXNobWFyZ2luLGQ9ZS5fcHVzaG1hcmdpbklkcztpZighMSE9PWUubWFyZ2luLmF1dG9leHBhbmQpe2Zvcih2YXIgZyBpbiBwKWRbZ118fGRlbGV0ZSBwW2ddO2Zvcih2YXIgdiBpbiBwLmJhc2U9e2w6e3ZhbDowLHNpemU6c30scjp7dmFsOjEsc2l6ZTpsfSx0Ont2YWw6MSxzaXplOmN9LGI6e3ZhbDowLHNpemU6dX19LHApe3ZhciBtPXBbdl0ubHx8e30seT1wW3ZdLmJ8fHt9LHg9bS52YWwsYj1tLnNpemUsXz15LnZhbCx3PXkuc2l6ZTtmb3IodmFyIGsgaW4gcCl7aWYoaShiKSYmcFtrXS5yKXt2YXIgQT1wW2tdLnIudmFsLE09cFtrXS5yLnNpemU7aWYoQT54KXt2YXIgUz0oYipBKyhNLWgpKngpLyhBLXgpLEU9KE0qKDEteCkrKGItaCkqKDEtQSkpLyhBLXgpO1M+PTAmJkU+PTAmJmgtKFMrRSk+MCYmUytFPnMrbCYmKHM9UyxsPUUpfX1pZihpKHcpJiZwW2tdLnQpe3ZhciBDPXBba10udC52YWwsTD1wW2tdLnQuc2l6ZTtpZihDPl8pe3ZhciB6PSh3KkMrKEwtZikqXykvKEMtXyksTz0oTCooMS1fKSsody1mKSooMS1DKSkvKEMtXyk7ej49MCYmTz49MCYmZi0oTyt6KT4wJiZ6K08+dStjJiYodT16LGM9Tyl9fX19fWlmKHIubD1NYXRoLnJvdW5kKHMpLHIucj1NYXRoLnJvdW5kKGwpLHIudD1NYXRoLnJvdW5kKGMpLHIuYj1NYXRoLnJvdW5kKHUpLHIucD1NYXRoLnJvdW5kKG8ucGFkKSxyLnc9TWF0aC5yb3VuZChoKS1yLmwtci5yLHIuaD1NYXRoLnJvdW5kKGYpLXIudC1yLmIsIWUuX3JlcGxvdHRpbmcmJlwie31cIiE9PW4mJm4hPT1KU09OLnN0cmluZ2lmeShlLl9zaXplKSlyZXR1cm5cIl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50XCJpbiBlP2UuX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnQrKzplLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50PTEsYS5jYWxsKFwicGxvdFwiLHQpfSx2LmdyYXBoSnNvbj1mdW5jdGlvbih0LGUscixuLGkpeyhpJiZlJiYhdC5fZnVsbERhdGF8fGkmJiFlJiYhdC5fZnVsbExheW91dCkmJnYuc3VwcGx5RGVmYXVsdHModCk7dmFyIGE9aT90Ll9mdWxsRGF0YTp0LmRhdGEsbz1pP3QuX2Z1bGxMYXlvdXQ6dC5sYXlvdXQscz0odC5fdHJhbnNpdGlvbkRhdGF8fHt9KS5fZnJhbWVzO2Z1bmN0aW9uIGModCl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdClyZXR1cm4gbnVsbDtpZihsLmlzUGxhaW5PYmplY3QodCkpe3ZhciBlLG4saT17fTtmb3IoZSBpbiB0KWlmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHRbZV0mJi0xPT09W1wiX1wiLFwiW1wiXS5pbmRleE9mKGUuY2hhckF0KDApKSl7aWYoXCJrZWVwZGF0YVwiPT09cil7aWYoXCJzcmNcIj09PWUuc3Vic3RyKGUubGVuZ3RoLTMpKWNvbnRpbnVlfWVsc2UgaWYoXCJrZWVwc3RyZWFtXCI9PT1yKXtpZihcInN0cmluZ1wiPT10eXBlb2Yobj10W2UrXCJzcmNcIl0pJiZuLmluZGV4T2YoXCI6XCIpPjAmJiFsLmlzUGxhaW5PYmplY3QodC5zdHJlYW0pKWNvbnRpbnVlfWVsc2UgaWYoXCJrZWVwYWxsXCIhPT1yJiZcInN0cmluZ1wiPT10eXBlb2Yobj10W2UrXCJzcmNcIl0pJiZuLmluZGV4T2YoXCI6XCIpPjApY29udGludWU7aVtlXT1jKHRbZV0pfXJldHVybiBpfXJldHVybiBBcnJheS5pc0FycmF5KHQpP3QubWFwKGMpOmwuaXNUeXBlZEFycmF5KHQpP2wuc2ltcGxlTWFwKHQsbC5pZGVudGl0eSk6bC5pc0pTRGF0ZSh0KT9sLm1zMkRhdGVUaW1lTG9jYWwoK3QpOnR9dmFyIHU9e2RhdGE6KGF8fFtdKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9Yyh0KTtyZXR1cm4gZSYmZGVsZXRlIHIuZml0LHJ9KX07cmV0dXJuIGV8fCh1LmxheW91dD1jKG8pKSx0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhciYmKHU9dC5mcmFtZXdvcmsuZ2V0Q29uZmlnKCkpLHMmJih1LmZyYW1lcz1jKHMpKSxcIm9iamVjdFwiPT09bj91OkpTT04uc3RyaW5naWZ5KHUpfSx2Lm1vZGlmeUZyYW1lcz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMsbz10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspc3dpdGNoKChuPWVbcl0pLnR5cGUpe2Nhc2VcInJlcGxhY2VcIjppPW4udmFsdWU7dmFyIHM9KGFbbi5pbmRleF18fHt9KS5uYW1lLGw9aS5uYW1lO2Fbbi5pbmRleF09b1tsXT1pLGwhPT1zJiYoZGVsZXRlIG9bc10sb1tsXT1pKTticmVhaztjYXNlXCJpbnNlcnRcIjpvWyhpPW4udmFsdWUpLm5hbWVdPWksYS5zcGxpY2Uobi5pbmRleCwwLGkpO2JyZWFrO2Nhc2VcImRlbGV0ZVwiOmRlbGV0ZSBvWyhpPWFbbi5pbmRleF0pLm5hbWVdLGEuc3BsaWNlKG4uaW5kZXgsMSl9cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSx2LmNvbXB1dGVGcmFtZT1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG89dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaDtpZighZSl0aHJvdyBuZXcgRXJyb3IoXCJjb21wdXRlRnJhbWUgbXVzdCBiZSBnaXZlbiBhIHN0cmluZyBmcmFtZSBuYW1lXCIpO3ZhciBzPW9bZS50b1N0cmluZygpXTtpZighcylyZXR1cm4hMTtmb3IodmFyIGw9W3NdLGM9W3MubmFtZV07cy5iYXNlZnJhbWUmJihzPW9bcy5iYXNlZnJhbWUudG9TdHJpbmcoKV0pJiYtMT09PWMuaW5kZXhPZihzLm5hbWUpOylsLnB1c2gocyksYy5wdXNoKHMubmFtZSk7Zm9yKHZhciB1PXt9O3M9bC5wb3AoKTspaWYocy5sYXlvdXQmJih1LmxheW91dD12LmV4dGVuZExheW91dCh1LmxheW91dCxzLmxheW91dCkpLHMuZGF0YSl7aWYodS5kYXRhfHwodS5kYXRhPVtdKSwhKG49cy50cmFjZXMpKWZvcihuPVtdLHI9MDtyPHMuZGF0YS5sZW5ndGg7cisrKW5bcl09cjtmb3IodS50cmFjZXN8fCh1LnRyYWNlcz1bXSkscj0wO3I8cy5kYXRhLmxlbmd0aDtyKyspbnVsbCE9KGk9bltyXSkmJigtMT09PShhPXUudHJhY2VzLmluZGV4T2YoaSkpJiYoYT11LmRhdGEubGVuZ3RoLHUudHJhY2VzW2FdPWkpLHUuZGF0YVthXT12LmV4dGVuZFRyYWNlKHUuZGF0YVthXSxzLmRhdGFbcl0pKX1yZXR1cm4gdX0sdi5yZWNvbXB1dGVGcmFtZUhhc2g9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g9e30scj10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpJiZpLm5hbWUmJihlW2kubmFtZV09aSl9fSx2LmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzLGMsdSxoPWwuZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LGV8fHt9KSxmPWwuZXhwYW5kT2JqZWN0UGF0aHMoaCkscD17fTtpZihyJiZyLmxlbmd0aClmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKXZvaWQgMD09PShpPShuPWwubmVzdGVkUHJvcGVydHkoZixyW2FdKSkuZ2V0KCkpP2wubmVzdGVkUHJvcGVydHkocCxyW2FdKS5zZXQobnVsbCk6KG4uc2V0KG51bGwpLGwubmVzdGVkUHJvcGVydHkocCxyW2FdKS5zZXQoaSkpO2lmKHQ9bC5leHRlbmREZWVwTm9BcnJheXModHx8e30sZiksciYmci5sZW5ndGgpZm9yKGE9MDthPHIubGVuZ3RoO2ErKylpZihjPWwubmVzdGVkUHJvcGVydHkocCxyW2FdKS5nZXQoKSl7Zm9yKHU9KHM9bC5uZXN0ZWRQcm9wZXJ0eSh0LHJbYV0pKS5nZXQoKSxBcnJheS5pc0FycmF5KHUpfHwodT1bXSxzLnNldCh1KSksbz0wO288Yy5sZW5ndGg7bysrKXt2YXIgZD1jW29dO3Vbb109bnVsbD09PWQ/bnVsbDp2LmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzKHVbb10sZCl9cy5zZXQodSl9cmV0dXJuIHR9LHYuZGF0YUFycmF5Q29udGFpbmVycz1bXCJ0cmFuc2Zvcm1zXCIsXCJkaW1lbnNpb25zXCJdLHYubGF5b3V0QXJyYXlDb250YWluZXJzPWEubGF5b3V0QXJyYXlDb250YWluZXJzLHYuZXh0ZW5kVHJhY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdi5leHRlbmRPYmplY3RXaXRoQ29udGFpbmVycyh0LGUsdi5kYXRhQXJyYXlDb250YWluZXJzKX0sdi5leHRlbmRMYXlvdXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdi5leHRlbmRPYmplY3RXaXRoQ29udGFpbmVycyh0LGUsdi5sYXlvdXRBcnJheUNvbnRhaW5lcnMpfSx2LnRyYW5zaXRpb249ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPXtyZWRyYXc6aS5yZWRyYXd9LHM9W10sYz1bXTtyZXR1cm4gby5wcmVwYXJlRm49ZnVuY3Rpb24oKXtmb3IodmFyIGk9QXJyYXkuaXNBcnJheShlKT9lLmxlbmd0aDowLGE9bi5zbGljZSgwLGkpLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHU9YVtvXSxoPXQuX2Z1bGxEYXRhW3VdLl9tb2R1bGU7aCYmKGguYW5pbWF0YWJsZSYmcy5wdXNoKHUpLHQuZGF0YVthW29dXT12LmV4dGVuZFRyYWNlKHQuZGF0YVthW29dXSxlW29dKSl9dmFyIGY9bC5leHBhbmRPYmplY3RQYXRocyhsLmV4dGVuZERlZXBOb0FycmF5cyh7fSxyKSkscD0vXlt4eV1heGlzWzAtOV0qJC87Zm9yKHZhciBkIGluIGYpcC50ZXN0KGQpJiZkZWxldGUgZltkXS5yYW5nZTt2LmV4dGVuZExheW91dCh0LmxheW91dCxmKSxkZWxldGUgdC5jYWxjZGF0YSx2LnN1cHBseURlZmF1bHRzKHQpLHYuZG9DYWxjZGF0YSh0KTt2YXIgZz1sLmV4cGFuZE9iamVjdFBhdGhzKHIpO2lmKGcpe3ZhciBtPXQuX2Z1bGxMYXlvdXQuX3Bsb3RzO2Zvcih2YXIgeSBpbiBtKXt2YXIgeCxiLF8sdyxrPW1beV0sQT1rLnhheGlzLFQ9ay55YXhpcyxNPUEucmFuZ2Uuc2xpY2UoKSxTPVQucmFuZ2Uuc2xpY2UoKTtBcnJheS5pc0FycmF5KGdbQS5fbmFtZStcIi5yYW5nZVwiXSk/eD1nW0EuX25hbWUrXCIucmFuZ2VcIl0uc2xpY2UoKTpBcnJheS5pc0FycmF5KChnW0EuX25hbWVdfHx7fSkucmFuZ2UpJiYoeD1nW0EuX25hbWVdLnJhbmdlLnNsaWNlKCkpLEFycmF5LmlzQXJyYXkoZ1tULl9uYW1lK1wiLnJhbmdlXCJdKT9iPWdbVC5fbmFtZStcIi5yYW5nZVwiXS5zbGljZSgpOkFycmF5LmlzQXJyYXkoKGdbVC5fbmFtZV18fHt9KS5yYW5nZSkmJihiPWdbVC5fbmFtZV0ucmFuZ2Uuc2xpY2UoKSksTSYmeCYmKE1bMF0hPT14WzBdfHxNWzFdIT09eFsxXSkmJihfPXt4cjA6TSx4cjE6eH0pLFMmJmImJihTWzBdIT09YlswXXx8U1sxXSE9PWJbMV0pJiYodz17eXIwOlMseXIxOmJ9KSwoX3x8dykmJmMucHVzaChsLmV4dGVuZEZsYXQoe3Bsb3RpbmZvOmt9LF8sdykpfX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9LG8ucnVuRm49ZnVuY3Rpb24oZSl7dmFyIG4saSxvPXQuX2Z1bGxMYXlvdXQuX2Jhc2VQbG90TW9kdWxlcyx1PWMubGVuZ3RoO2lmKHIpZm9yKGk9MDtpPG8ubGVuZ3RoO2krKylvW2ldLnRyYW5zaXRpb25BeGVzJiZvW2ldLnRyYW5zaXRpb25BeGVzKHQsYyxhLGUpO2Zvcih1Pygobj1sLmV4dGVuZEZsYXQoe30sYSkpLmR1cmF0aW9uPTAscz1udWxsKTpuPWEsaT0wO2k8by5sZW5ndGg7aSsrKW9baV0ucGxvdCh0LHMsbixlKX0sTSh0LGEsbyl9LHYudHJhbnNpdGlvbkZyb21SZWFjdD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10Ll9mdWxsTGF5b3V0LGE9aS50cmFuc2l0aW9uLG89e30scz1bXTtyZXR1cm4gby5wcmVwYXJlRm49ZnVuY3Rpb24oKXt2YXIgdD1pLl9wbG90cztmb3IodmFyIGEgaW4gby5yZWRyYXc9ITEsXCJzb21lXCI9PT1lLmFuaW0mJihvLnJlZHJhdz0hMCksXCJzb21lXCI9PT1yLmFuaW0mJihvLnJlZHJhdz0hMCksdCl7dmFyIGMsdSxoPXRbYV0sZj1oLnhheGlzLHA9aC55YXhpcyxkPW5bZi5fbmFtZV0ucmFuZ2Uuc2xpY2UoKSxnPW5bcC5fbmFtZV0ucmFuZ2Uuc2xpY2UoKSx2PWYucmFuZ2Uuc2xpY2UoKSxtPXAucmFuZ2Uuc2xpY2UoKTtmLnNldFNjYWxlKCkscC5zZXRTY2FsZSgpLGRbMF09PT12WzBdJiZkWzFdPT09dlsxXXx8KGM9e3hyMDpkLHhyMTp2fSksZ1swXT09PW1bMF0mJmdbMV09PT1tWzFdfHwodT17eXIwOmcseXIxOm19KSwoY3x8dSkmJnMucHVzaChsLmV4dGVuZEZsYXQoe3Bsb3RpbmZvOmh9LGMsdSkpfXJldHVybiBQcm9taXNlLnJlc29sdmUoKX0sby5ydW5Gbj1mdW5jdGlvbihyKXtmb3IodmFyIG4saSxvLGM9dC5fZnVsbERhdGEsdT10Ll9mdWxsTGF5b3V0Ll9iYXNlUGxvdE1vZHVsZXMsaD1bXSxmPTA7ZjxjLmxlbmd0aDtmKyspaC5wdXNoKGYpO2Z1bmN0aW9uIHAoKXtmb3IodmFyIGU9MDtlPHUubGVuZ3RoO2UrKyl1W2VdLnRyYW5zaXRpb25BeGVzJiZ1W2VdLnRyYW5zaXRpb25BeGVzKHQscyxuLHIpfWZ1bmN0aW9uIGQoKXtmb3IodmFyIGU9MDtlPHUubGVuZ3RoO2UrKyl1W2VdLnBsb3QodCxvLGkscil9cy5sZW5ndGgmJmUuYW5pbT9cInRyYWNlcyBmaXJzdFwiPT09YS5vcmRlcmluZz8obj1sLmV4dGVuZEZsYXQoe30sYSx7ZHVyYXRpb246MH0pLG89aCxpPWEsZCgpLHNldFRpbWVvdXQocCxhLmR1cmF0aW9uKSk6KG49YSxvPW51bGwsaT1sLmV4dGVuZEZsYXQoe30sYSx7ZHVyYXRpb246MH0pLHAoKSxkKCkpOnMubGVuZ3RoPyhuPWEscCgpKTplLmFuaW0mJihvPWgsaT1hLGQoKSl9LE0odCxhLG8pfSx2LmRvQ2FsY2RhdGE9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGkscyxjPWgubGlzdCh0KSxmPXQuX2Z1bGxEYXRhLHA9dC5fZnVsbExheW91dCxkPW5ldyBBcnJheShmLmxlbmd0aCksZz0odC5jYWxjZGF0YXx8W10pLnNsaWNlKDApO2Zvcih0LmNhbGNkYXRhPWQscC5fbnVtQm94ZXM9MCxwLl9udW1WaW9saW5zPTAscC5fdmlvbGluU2NhbGVHcm91cFN0YXRzPXt9LHQuX2htcGl4Y291bnQ9MCx0Ll9obWx1bWNvdW50PTAscC5fcGllY29sb3JtYXA9e30scC5fc3VuYnVyc3Rjb2xvcm1hcD17fSxpPTA7aTxmLmxlbmd0aDtpKyspQXJyYXkuaXNBcnJheShlKSYmLTE9PT1lLmluZGV4T2YoaSkmJihkW2ldPWdbaV0pO2ZvcihpPTA7aTxmLmxlbmd0aDtpKyspKHI9ZltpXSkuX2FycmF5QXR0cnM9by5maW5kQXJyYXlBdHRyaWJ1dGVzKHIpLHIuX2V4dHJlbWVzPXt9O3ZhciB2PXAuX3N1YnBsb3RzLnBvbGFyfHxbXTtmb3IoaT0wO2k8di5sZW5ndGg7aSsrKWMucHVzaChwW3ZbaV1dLnJhZGlhbGF4aXMscFt2W2ldXS5hbmd1bGFyYXhpcyk7UyhjLGYpO3ZhciB5PSExO2ZvcihpPTA7aTxmLmxlbmd0aDtpKyspaWYoITA9PT0ocj1mW2ldKS52aXNpYmxlJiZyLnRyYW5zZm9ybXMpe2lmKChuPXIuX21vZHVsZSkmJm4uY2FsYyl7dmFyIHg9bi5jYWxjKHQscik7eFswXSYmeFswXS50JiZ4WzBdLnQuX3NjZW5lJiZkZWxldGUgeFswXS50Ll9zY2VuZS5kaXJ0eX1mb3Iocz0wO3M8ci50cmFuc2Zvcm1zLmxlbmd0aDtzKyspe3ZhciBiPXIudHJhbnNmb3Jtc1tzXTsobj1tW2IudHlwZV0pJiZuLmNhbGNUcmFuc2Zvcm0mJihyLl9oYXNDYWxjVHJhbnNmb3JtPSEwLHk9ITAsbi5jYWxjVHJhbnNmb3JtKHQscixiKSl9fWZ1bmN0aW9uIF8oZSxpKXtpZihyPWZbZV0sISEobj1yLl9tb2R1bGUpLmlzQ29udGFpbmVyPT09aSl7dmFyIGE9W107aWYoITA9PT1yLnZpc2libGUpe2RlbGV0ZSByLl9pbmRleFRvUG9pbnRzO3ZhciBvPXIudHJhbnNmb3Jtc3x8W107Zm9yKHM9by5sZW5ndGgtMTtzPj0wO3MtLSlpZihvW3NdLmVuYWJsZWQpe3IuX2luZGV4VG9Qb2ludHM9b1tzXS5faW5kZXhUb1BvaW50czticmVha31uJiZuLmNhbGMmJihhPW4uY2FsYyh0LHIpKX1BcnJheS5pc0FycmF5KGEpJiZhWzBdfHwoYT1be3g6dSx5OnV9XSksYVswXS50fHwoYVswXS50PXt9KSxhWzBdLnRyYWNlPXIsZFtlXT1hfX1mb3IoeSYmUyhjLGYpLGk9MDtpPGYubGVuZ3RoO2krKylfKGksITApO2ZvcihpPTA7aTxmLmxlbmd0aDtpKyspXyhpLCExKTshZnVuY3Rpb24odCl7dmFyIGUscixuLGk9dC5fZnVsbExheW91dCxhPWkuX3Zpc2libGVNb2R1bGVzLG89e307Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl7dmFyIHM9YVtyXSxjPXMuY3Jvc3NUcmFjZUNhbGM7aWYoYyl7dmFyIHU9cy5iYXNlUGxvdE1vZHVsZS5uYW1lO29bdV0/bC5wdXNoVW5pcXVlKG9bdV0sYyk6b1t1XT1bY119fWZvcihuIGluIG8pe3ZhciBoPW9bbl0sZj1pLl9zdWJwbG90c1tuXTtpZihBcnJheS5pc0FycmF5KGYpKWZvcihlPTA7ZTxmLmxlbmd0aDtlKyspe3ZhciBwPWZbZV0sZD1cImNhcnRlc2lhblwiPT09bj9pLl9wbG90c1twXTppW3BdO2ZvcihyPTA7cjxoLmxlbmd0aDtyKyspaFtyXSh0LGQscCl9ZWxzZSBmb3Iocj0wO3I8aC5sZW5ndGg7cisrKWhbcl0odCl9fSh0KSxhLmdldENvbXBvbmVudE1ldGhvZChcImZ4XCIsXCJjYWxjXCIpKHQpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKFwiZXJyb3JiYXJzXCIsXCJjYWxjXCIpKHQpfSx2LnJlaG92ZXI9ZnVuY3Rpb24odCl7dC5fZnVsbExheW91dC5fcmVob3ZlciYmdC5fZnVsbExheW91dC5fcmVob3ZlcigpfSx2LnJlZHJhZz1mdW5jdGlvbih0KXt0Ll9mdWxsTGF5b3V0Ll9yZWRyYWcmJnQuX2Z1bGxMYXlvdXQuX3JlZHJhZygpfSx2LmdlbmVyYWxVcGRhdGVQZXJUcmFjZU1vZHVsZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPWUudHJhY2VIYXNoLG89e307Zm9yKGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIHM9cltpXSxjPXNbMF0udHJhY2U7Yy52aXNpYmxlJiYob1tjLnR5cGVdPW9bYy50eXBlXXx8W10sb1tjLnR5cGVdLnB1c2gocykpfWZvcih2YXIgdSBpbiBhKWlmKCFvW3VdKXt2YXIgaD1hW3VdWzBdO2hbMF0udHJhY2UudmlzaWJsZT0hMSxvW3VdPVtoXX1mb3IodmFyIGYgaW4gbyl7dmFyIHA9b1tmXTtwWzBdWzBdLnRyYWNlLl9tb2R1bGUucGxvdCh0LGUsbC5maWx0ZXJWaXNpYmxlKHApLG4pfWUudHJhY2VIYXNoPW99fSx7XCIuLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uL2xpYlwiOjcwMSxcIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hXCI6NzM4LFwiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9hbmltYXRpb25fYXR0cmlidXRlc1wiOjc0NCxcIi4vYXR0cmlidXRlc1wiOjc0NixcIi4vY2FydGVzaWFuL2F4aXNfaWRzXCI6NzUyLFwiLi9jb21tYW5kXCI6NzczLFwiLi9mb250X2F0dHJpYnV0ZXNcIjo3NzUsXCIuL2ZyYW1lX2F0dHJpYnV0ZXNcIjo3NzYsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6ODAxLGQzOjE1NSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sODExOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXthdHRyOlwic3VicGxvdFwiLG5hbWU6XCJwb2xhclwiLGF4aXNOYW1lczpbXCJhbmd1bGFyYXhpc1wiLFwicmFkaWFsYXhpc1wiXSxheGlzTmFtZTJkYXRhQXJyYXk6e2FuZ3VsYXJheGlzOlwidGhldGFcIixyYWRpYWxheGlzOlwiclwifSxsYXllck5hbWVzOltcImRyYWdsYXllclwiLFwicGxvdGJnXCIsXCJiYWNrcGxvdFwiLFwiYW5ndWxhci1ncmlkXCIsXCJyYWRpYWwtZ3JpZFwiLFwiZnJvbnRwbG90XCIsXCJhbmd1bGFyLWxpbmVcIixcInJhZGlhbC1saW5lXCIsXCJhbmd1bGFyLWF4aXNcIixcInJhZGlhbC1heGlzXCJdLHJhZGlhbERyYWdCb3hTaXplOjUwLGFuZ3VsYXJEcmFnQm94U2l6ZTozMCxjb3JuZXJMZW46MjUsY29ybmVySGFsZldpZHRoOjIsTUlORFJBRzo4LE1JTlpPT006MjAsT0ZGRURHRToyMH19LHt9XSw4MTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL2xpYi9wb2x5Z29uXCIpLnRlc3RlcixhPW4uZmluZEluZGV4T2ZNaW4sbz1uLmlzQW5nbGVJbnNpZGVTZWN0b3Iscz1uLmFuZ2xlRGVsdGEsbD1uLmFuZ2xlRGlzdDtmdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBpLGEsbz1uWzBdLHM9blsxXSxsPWgoTWF0aC5zaW4oZSktTWF0aC5zaW4odCkpLGM9aChNYXRoLmNvcyhlKS1NYXRoLmNvcyh0KSksdT1NYXRoLnRhbihyKSxmPWgoMS91KSxwPWwvYyxkPXMtcCpvO3JldHVybiBmP2wmJmM/YT11KihpPWQvKHUtcCkpOmM/KGk9cypmLGE9cyk6KGk9byxhPW8qdSk6bCYmYz8oaT0wLGE9ZCk6Yz8oaT0wLGE9cyk6aT1hPU5hTixbaSxhXX1mdW5jdGlvbiB1KHQsZSxyLGkpe3JldHVybiBuLmlzRnVsbENpcmNsZShbZSxyXSk/ZnVuY3Rpb24odCxlKXt2YXIgcixuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4rMSk7Zm9yKHI9MDtyPG47cisrKXt2YXIgYT1lW3JdO2lbcl09W3QqTWF0aC5jb3MoYSksdCpNYXRoLnNpbihhKV19cmV0dXJuIGlbcl09aVswXS5zbGljZSgpLGl9KHQsaSk6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIHMsdSxoPWkubGVuZ3RoLGY9W107ZnVuY3Rpb24gcChlKXtyZXR1cm5bdCpNYXRoLmNvcyhlKSx0Kk1hdGguc2luKGUpXX1mdW5jdGlvbiBkKHQsZSxyKXtyZXR1cm4gYyh0LGUscixwKHQpKX1mdW5jdGlvbiBnKHQpe3JldHVybiBuLm1vZCh0LGgpfWZ1bmN0aW9uIHYodCl7cmV0dXJuIG8odCxbZSxyXSl9dmFyIG09YShpLGZ1bmN0aW9uKHQpe3JldHVybiB2KHQpP2wodCxlKToxLzB9KSx5PWQoaVttXSxpW2cobS0xKV0sZSk7Zm9yKGYucHVzaCh5KSxzPW0sdT0wO3U8aDtzKyssdSsrKXt2YXIgeD1pW2cocyldO2lmKCF2KHgpKWJyZWFrO2YucHVzaChwKHgpKX12YXIgYj1hKGksZnVuY3Rpb24odCl7cmV0dXJuIHYodCk/bCh0LHIpOjEvMH0pLF89ZChpW2JdLGlbZyhiKzEpXSxyKTtyZXR1cm4gZi5wdXNoKF8pLGYucHVzaChbMCwwXSksZi5wdXNoKGZbMF0uc2xpY2UoKSksZn0odCxlLHIsaSl9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gTWF0aC5hYnModCk+MWUtMTA/dDowfWZ1bmN0aW9uIGYodCxlLHIpe2U9ZXx8MCxyPXJ8fDA7Zm9yKHZhciBuPXQubGVuZ3RoLGk9bmV3IEFycmF5KG4pLGE9MDthPG47YSsrKXt2YXIgbz10W2FdO2lbYV09W2Urb1swXSxyLW9bMV1dfXJldHVybiBpfWUuZXhwb3J0cz17aXNQdEluc2lkZVBvbHlnb246ZnVuY3Rpb24odCxlLHIsbixhKXtpZighbyhlLG4pKXJldHVybiExO3ZhciBzLGw7clswXTxyWzFdPyhzPXJbMF0sbD1yWzFdKToocz1yWzFdLGw9clswXSk7dmFyIGM9aSh1KHMsblswXSxuWzFdLGEpKSxoPWkodShsLG5bMF0sblsxXSxhKSksZj1bdCpNYXRoLmNvcyhlKSx0Kk1hdGguc2luKGUpXTtyZXR1cm4gaC5jb250YWlucyhmKSYmIWMuY29udGFpbnMoZil9LGZpbmRQb2x5Z29uT2Zmc2V0OmZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT0xLzAsYT0xLzAsbz11KHQsZSxyLG4pLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTtpPU1hdGgubWluKGksbFswXSksYT1NYXRoLm1pbihhLC1sWzFdKX1yZXR1cm5baSxhXX0sZmluZEVuY2xvc2luZ1ZlcnRleEFuZ2xlczpmdW5jdGlvbih0LGUpe3ZhciByPWEoZSxmdW5jdGlvbihlKXt2YXIgcj1zKGUsdCk7cmV0dXJuIHI+MD9yOjEvMH0pLGk9bi5tb2QocisxLGUubGVuZ3RoKTtyZXR1cm5bZVtyXSxlW2ldXX0sZmluZEludGVyc2VjdGlvblhZOmMsZmluZFhZYXRMZW5ndGg6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9LWUqcixhPWUqZSsxLG89MiooZSppLXIpLHM9aSppK3Iqci10KnQsbD1NYXRoLnNxcnQobypvLTQqYSpzKSxjPSgtbytsKS8oMiphKSx1PSgtby1sKS8oMiphKTtyZXR1cm5bW2MsZSpjK2krbl0sW3UsZSp1K2krbl1dfSxjbGFtcFRpbnk6aCxwYXRoUG9seWdvbjpmdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuXCJNXCIrZih1KHQsZSxyLG4pLGksYSkuam9pbihcIkxcIil9LHBhdGhQb2x5Z29uQW5udWx1czpmdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcyxsO3Q8ZT8ocz10LGw9ZSk6KHM9ZSxsPXQpO3ZhciBjPWYodShzLHIsbixpKSxhLG8pO3JldHVyblwiTVwiK2YodShsLHIsbixpKSxhLG8pLnJldmVyc2UoKS5qb2luKFwiTFwiKStcIk1cIitjLmpvaW4oXCJMXCIpfX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9wb2x5Z29uXCI6NzEzfV0sODEzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2dldF9kYXRhXCIpLmdldFN1YnBsb3RDYWxjRGF0YSxpPXQoXCIuLi8uLi9saWJcIikuY291bnRlclJlZ2V4LGE9dChcIi4vcG9sYXJcIiksbz10KFwiLi9jb25zdGFudHNcIikscz1vLmF0dHIsbD1vLm5hbWUsYz1pKGwpLHU9e307dVtzXT17dmFsVHlwZTpcInN1YnBsb3RpZFwiLGRmbHQ6bCxlZGl0VHlwZTpcImNhbGNcIn0sZS5leHBvcnRzPXthdHRyOnMsbmFtZTpsLGlkUm9vdDpsLGlkUmVnZXg6YyxhdHRyUmVnZXg6YyxhdHRyaWJ1dGVzOnUsbGF5b3V0QXR0cmlidXRlczp0KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KFwiLi9sYXlvdXRfZGVmYXVsdHNcIikscGxvdDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsaT1lLl9zdWJwbG90c1tsXSxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBzPWlbb10sYz1uKHIsbCxzKSx1PWVbc10uX3N1YnBsb3Q7dXx8KHU9YSh0LHMpLGVbc10uX3N1YnBsb3Q9dSksdS5wbG90KGMsZSx0Ll9wcm9taXNlcyl9fSxjbGVhbjpmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9bi5fc3VicGxvdHNbbF18fFtdLGE9bi5faGFzJiZuLl9oYXMoXCJnbFwiKSxvPWUuX2hhcyYmZS5faGFzKFwiZ2xcIikscz1hJiYhbyxjPTA7YzxpLmxlbmd0aDtjKyspe3ZhciB1PWlbY10saD1uW3VdLl9zdWJwbG90O2lmKCFlW3VdJiZoKWZvcih2YXIgZiBpbiBoLmZyYW1ld29yay5yZW1vdmUoKSxoLmxheWVyc1tcInJhZGlhbC1heGlzLXRpdGxlXCJdLnJlbW92ZSgpLGguY2xpcFBhdGhzKWguY2xpcFBhdGhzW2ZdLnJlbW92ZSgpO3MmJmguX3NjZW5lJiYoaC5fc2NlbmUuZGVzdHJveSgpLGguX3NjZW5lPW51bGwpfX0sdG9TVkc6dChcIi4uL2NhcnRlc2lhblwiKS50b1NWR319LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2NhcnRlc2lhblwiOjc2MCxcIi4uL2dldF9kYXRhXCI6Nzg0LFwiLi9jb25zdGFudHNcIjo4MTEsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6ODE0LFwiLi9sYXlvdXRfZGVmYXVsdHNcIjo4MTUsXCIuL3BvbGFyXCI6ODIyfV0sODE0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vZG9tYWluXCIpLmF0dHJpYnV0ZXMsbz10KFwiLi4vLi4vbGliXCIpLmV4dGVuZEZsYXQscz10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbCxsPXMoe2NvbG9yOmkuY29sb3Isc2hvd2xpbmU6byh7fSxpLnNob3dsaW5lLHtkZmx0OiEwfSksbGluZWNvbG9yOmkubGluZWNvbG9yLGxpbmV3aWR0aDppLmxpbmV3aWR0aCxzaG93Z3JpZDpvKHt9LGkuc2hvd2dyaWQse2RmbHQ6ITB9KSxncmlkY29sb3I6aS5ncmlkY29sb3IsZ3JpZHdpZHRoOmkuZ3JpZHdpZHRofSxcInBsb3RcIixcImZyb20tcm9vdFwiKSxjPXMoe3RpY2ttb2RlOmkudGlja21vZGUsbnRpY2tzOmkubnRpY2tzLHRpY2swOmkudGljazAsZHRpY2s6aS5kdGljayx0aWNrdmFsczppLnRpY2t2YWxzLHRpY2t0ZXh0OmkudGlja3RleHQsdGlja3M6aS50aWNrcyx0aWNrbGVuOmkudGlja2xlbix0aWNrd2lkdGg6aS50aWNrd2lkdGgsdGlja2NvbG9yOmkudGlja2NvbG9yLHNob3d0aWNrbGFiZWxzOmkuc2hvd3RpY2tsYWJlbHMsc2hvd3RpY2twcmVmaXg6aS5zaG93dGlja3ByZWZpeCx0aWNrcHJlZml4OmkudGlja3ByZWZpeCxzaG93dGlja3N1ZmZpeDppLnNob3d0aWNrc3VmZml4LHRpY2tzdWZmaXg6aS50aWNrc3VmZml4LHNob3dleHBvbmVudDppLnNob3dleHBvbmVudCxleHBvbmVudGZvcm1hdDppLmV4cG9uZW50Zm9ybWF0LHNlcGFyYXRldGhvdXNhbmRzOmkuc2VwYXJhdGV0aG91c2FuZHMsdGlja2ZvbnQ6aS50aWNrZm9udCx0aWNrYW5nbGU6aS50aWNrYW5nbGUsdGlja2Zvcm1hdDppLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOmkudGlja2Zvcm1hdHN0b3BzLGxheWVyOmkubGF5ZXJ9LFwicGxvdFwiLFwiZnJvbS1yb290XCIpLHU9e3Zpc2libGU6byh7fSxpLnZpc2libGUse2RmbHQ6ITB9KSx0eXBlOm8oe30saS50eXBlLHt2YWx1ZXM6W1wiLVwiLFwibGluZWFyXCIsXCJsb2dcIixcImRhdGVcIixcImNhdGVnb3J5XCJdfSksYXV0b3JhbmdlOm8oe30saS5hdXRvcmFuZ2Use2VkaXRUeXBlOlwicGxvdFwifSkscmFuZ2Vtb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ0b3plcm9cIixcIm5vbm5lZ2F0aXZlXCIsXCJub3JtYWxcIl0sZGZsdDpcInRvemVyb1wiLGVkaXRUeXBlOlwiY2FsY1wifSxyYW5nZTpvKHt9LGkucmFuZ2Use2l0ZW1zOlt7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwicGxvdFwiLGltcGxpZWRFZGl0czp7XCJeYXV0b3JhbmdlXCI6ITF9fSx7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwicGxvdFwiLGltcGxpZWRFZGl0czp7XCJeYXV0b3JhbmdlXCI6ITF9fV0sZWRpdFR5cGU6XCJwbG90XCJ9KSxjYXRlZ29yeW9yZGVyOmkuY2F0ZWdvcnlvcmRlcixjYXRlZ29yeWFycmF5OmkuY2F0ZWdvcnlhcnJheSxhbmdsZTp7dmFsVHlwZTpcImFuZ2xlXCIsZWRpdFR5cGU6XCJwbG90XCJ9LHNpZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImNsb2Nrd2lzZVwiLFwiY291bnRlcmNsb2Nrd2lzZVwiXSxkZmx0OlwiY2xvY2t3aXNlXCIsZWRpdFR5cGU6XCJwbG90XCJ9LHRpdGxlOnMoaS50aXRsZSxcInBsb3RcIixcImZyb20tcm9vdFwiKSxob3ZlcmZvcm1hdDppLmhvdmVyZm9ybWF0LHVpcmV2aXNpb246e3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcIm5vbmVcIn0sZWRpdFR5cGU6XCJjYWxjXCIsX2RlcHJlY2F0ZWQ6e3RpdGxlOmkuX2RlcHJlY2F0ZWQudGl0bGUsdGl0bGVmb250OmkuX2RlcHJlY2F0ZWQudGl0bGVmb250fX07dS50aXRsZS50ZXh0LmRmbHQ9XCJcIixvKHUsbCxjKTt2YXIgaD17dmlzaWJsZTpvKHt9LGkudmlzaWJsZSx7ZGZsdDohMH0pLHR5cGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcIi1cIixcImxpbmVhclwiLFwiY2F0ZWdvcnlcIl0sZGZsdDpcIi1cIixlZGl0VHlwZTpcImNhbGNcIixfbm9UZW1wbGF0aW5nOiEwfSxjYXRlZ29yeW9yZGVyOmkuY2F0ZWdvcnlvcmRlcixjYXRlZ29yeWFycmF5OmkuY2F0ZWdvcnlhcnJheSx0aGV0YXVuaXQ6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInJhZGlhbnNcIixcImRlZ3JlZXNcIl0sZGZsdDpcImRlZ3JlZXNcIixlZGl0VHlwZTpcImNhbGNcIn0scGVyaW9kOnt2YWxUeXBlOlwibnVtYmVyXCIsZWRpdFR5cGU6XCJjYWxjXCIsbWluOjB9LGRpcmVjdGlvbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiY291bnRlcmNsb2Nrd2lzZVwiLFwiY2xvY2t3aXNlXCJdLGRmbHQ6XCJjb3VudGVyY2xvY2t3aXNlXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHJvdGF0aW9uOnt2YWxUeXBlOlwiYW5nbGVcIixlZGl0VHlwZTpcImNhbGNcIn0saG92ZXJmb3JtYXQ6aS5ob3ZlcmZvcm1hdCx1aXJldmlzaW9uOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJub25lXCJ9LGVkaXRUeXBlOlwiY2FsY1wifTtvKGgsbCxjKSxlLmV4cG9ydHM9e2RvbWFpbjphKHtuYW1lOlwicG9sYXJcIixlZGl0VHlwZTpcInBsb3RcIn0pLHNlY3Rvcjp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixpdGVtczpbe3ZhbFR5cGU6XCJudW1iZXJcIixlZGl0VHlwZTpcInBsb3RcIn0se3ZhbFR5cGU6XCJudW1iZXJcIixlZGl0VHlwZTpcInBsb3RcIn1dLGRmbHQ6WzAsMzYwXSxlZGl0VHlwZTpcInBsb3RcIn0saG9sZTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZTpcInBsb3RcIn0sYmdjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJwbG90XCIsZGZsdDpuLmJhY2tncm91bmR9LHJhZGlhbGF4aXM6dSxhbmd1bGFyYXhpczpoLGdyaWRzaGFwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiY2lyY3VsYXJcIixcImxpbmVhclwiXSxkZmx0OlwiY2lyY3VsYXJcIixlZGl0VHlwZTpcInBsb3RcIn0sdWlyZXZpc2lvbjp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwibm9uZVwifSxlZGl0VHlwZTpcImNhbGNcIn19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiOjU3NyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo3NjEsXCIuLi9kb21haW5cIjo3NzR9XSw4MTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksYT10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKSxvPXQoXCIuLi9zdWJwbG90X2RlZmF1bHRzXCIpLHM9dChcIi4uL2dldF9kYXRhXCIpLmdldFN1YnBsb3REYXRhLGw9dChcIi4uL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzXCIpLGM9dChcIi4uL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHNcIiksdT10KFwiLi4vY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHNcIiksaD10KFwiLi4vY2FydGVzaWFuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzXCIpLGY9dChcIi4uL2NhcnRlc2lhbi9saW5lX2dyaWRfZGVmYXVsdHNcIikscD10KFwiLi4vY2FydGVzaWFuL2F4aXNfYXV0b3R5cGVcIiksZD10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxnPXQoXCIuL3NldF9jb252ZXJ0XCIpLHY9dChcIi4vY29uc3RhbnRzXCIpLG09di5heGlzTmFtZXM7ZnVuY3Rpb24geSh0LGUscixvKXt2YXIgcD1yKFwiYmdjb2xvclwiKTtvLmJnQ29sb3I9aS5jb21iaW5lKHAsby5wYXBlcl9iZ2NvbG9yKTt2YXIgeT1yKFwic2VjdG9yXCIpO3IoXCJob2xlXCIpO3ZhciBiLF89cyhvLmZ1bGxEYXRhLHYubmFtZSxvLmlkKSx3PW8ubGF5b3V0T3V0O2Z1bmN0aW9uIGsodCxlKXtyZXR1cm4gcihiK1wiLlwiK3QsZSl9Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspe2I9bVtBXSxuLmlzUGxhaW5PYmplY3QodFtiXSl8fCh0W2JdPXt9KTt2YXIgVD10W2JdLE09YS5uZXdDb250YWluZXIoZSxiKTtNLl9pZD1NLl9uYW1lPWIsTS5fYXR0cj1vLmlkK1wiLlwiK2IsTS5fdHJhY2VJbmRpY2VzPV8ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9leHBhbmRlZEluZGV4fSk7dmFyIFM9di5heGlzTmFtZTJkYXRhQXJyYXlbYl0sRT14KFQsTSxrLF8sUyk7aChULE0sayx7YXhEYXRhOl8sZGF0YUF0dHI6U30pO3ZhciBDLEwsej1rKFwidmlzaWJsZVwiKTtzd2l0Y2goZyhNLGUsdyksayhcInVpcmV2aXNpb25cIixlLnVpcmV2aXNpb24pLHomJihMPShDPWsoXCJjb2xvclwiKSk9PT1ULmNvbG9yP0M6by5mb250LmNvbG9yKSxNLl9tPTEsYil7Y2FzZVwicmFkaWFsYXhpc1wiOnZhciBPPWsoXCJhdXRvcmFuZ2VcIiwhTS5pc1ZhbGlkUmFuZ2UoVC5yYW5nZSkpO1QuYXV0b3JhbmdlPU8sIU98fFwibGluZWFyXCIhPT1FJiZcIi1cIiE9PUV8fGsoXCJyYW5nZW1vZGVcIiksXCJyZXZlcnNlZFwiPT09TyYmKE0uX209LTEpLGsoXCJyYW5nZVwiKSxNLmNsZWFuUmFuZ2UoXCJyYW5nZVwiLHtkZmx0UmFuZ2U6WzAsMV19KSx6JiYoayhcInNpZGVcIiksayhcImFuZ2xlXCIseVswXSksayhcInRpdGxlLnRleHRcIiksbi5jb2VyY2VGb250KGssXCJ0aXRsZS5mb250XCIse2ZhbWlseTpvLmZvbnQuZmFtaWx5LHNpemU6TWF0aC5yb3VuZCgxLjIqby5mb250LnNpemUpLGNvbG9yOkx9KSk7YnJlYWs7Y2FzZVwiYW5ndWxhcmF4aXNcIjppZihcImRhdGVcIj09PUUpe24ubG9nKFwiUG9sYXIgcGxvdHMgZG8gbm90IHN1cHBvcnQgZGF0ZSBhbmd1bGFyIGF4ZXMgeWV0LlwiKTtmb3IodmFyIEk9MDtJPF8ubGVuZ3RoO0krKylfW0ldLnZpc2libGU9ITE7RT1ULnR5cGU9TS50eXBlPVwibGluZWFyXCJ9ayhcImxpbmVhclwiPT09RT9cInRoZXRhdW5pdFwiOlwicGVyaW9kXCIpO3ZhciBEPWsoXCJkaXJlY3Rpb25cIik7ayhcInJvdGF0aW9uXCIse2NvdW50ZXJjbG9ja3dpc2U6MCxjbG9ja3dpc2U6OTB9W0RdKX1pZih6KWwoVCxNLGssTS50eXBlKSx1KFQsTSxrLE0udHlwZSx7dGlja1N1ZmZpeERmbHQ6XCJkZWdyZWVzXCI9PT1NLnRoZXRhdW5pdD9cIlxceGIwXCI6dm9pZCAwfSksYyhULE0sayx7b3V0ZXJUaWNrczohMH0pLGsoXCJzaG93dGlja2xhYmVsc1wiKSYmKG4uY29lcmNlRm9udChrLFwidGlja2ZvbnRcIix7ZmFtaWx5Om8uZm9udC5mYW1pbHksc2l6ZTpvLmZvbnQuc2l6ZSxjb2xvcjpMfSksayhcInRpY2thbmdsZVwiKSxrKFwidGlja2Zvcm1hdFwiKSksZihULE0sayx7ZGZsdENvbG9yOkMsYmdDb2xvcjpvLmJnQ29sb3IsYmxlbmQ6NjAsc2hvd0xpbmU6ITAsc2hvd0dyaWQ6ITAsbm9aZXJvTGluZTohMCxhdHRyaWJ1dGVzOmRbYl19KSxrKFwibGF5ZXJcIik7XCJjYXRlZ29yeVwiIT09RSYmayhcImhvdmVyZm9ybWF0XCIpLE0uX2lucHV0PVR9XCJjYXRlZ29yeVwiPT09ZS5hbmd1bGFyYXhpcy50eXBlJiZyKFwiZ3JpZHNoYXBlXCIpfWZ1bmN0aW9uIHgodCxlLHIsbixpKXtpZihcIi1cIj09PXIoXCJ0eXBlXCIpKXtmb3IodmFyIGEsbz0wO288bi5sZW5ndGg7bysrKWlmKG5bb10udmlzaWJsZSl7YT1uW29dO2JyZWFrfWEmJmFbaV0mJihlLnR5cGU9cChhW2ldLFwiZ3JlZ29yaWFuXCIpKSxcIi1cIj09PWUudHlwZT9lLnR5cGU9XCJsaW5lYXJcIjp0LnR5cGU9ZS50eXBlfXJldHVybiBlLnR5cGV9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtvKHQsZSxyLHt0eXBlOnYubmFtZSxhdHRyaWJ1dGVzOmQsaGFuZGxlRGVmYXVsdHM6eSxmb250OmUuZm9udCxwYXBlcl9iZ2NvbG9yOmUucGFwZXJfYmdjb2xvcixmdWxsRGF0YTpyLGxheW91dE91dDplfSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlXCI6NzUwLFwiLi4vY2FydGVzaWFuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzXCI6NzUzLFwiLi4vY2FydGVzaWFuL2xpbmVfZ3JpZF9kZWZhdWx0c1wiOjc2MyxcIi4uL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzXCI6NzY4LFwiLi4vY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0c1wiOjc2OSxcIi4uL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzXCI6NzcwLFwiLi4vZ2V0X2RhdGFcIjo3ODQsXCIuLi9zdWJwbG90X2RlZmF1bHRzXCI6ODI0LFwiLi9jb25zdGFudHNcIjo4MTEsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6ODE0LFwiLi9zZXRfY29udmVydFwiOjgyM31dLDgxNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzXCIpLGk9bi5tYXJrZXIsYT10KFwiLi4vLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0O1tcIkFyZWEgdHJhY2VzIGFyZSBkZXByZWNhdGVkIVwiLFwiUGxlYXNlIHN3aXRjaCB0byB0aGUgKmJhcnBvbGFyKiB0cmFjZSB0eXBlLlwiXS5qb2luKFwiIFwiKTtlLmV4cG9ydHM9e3I6YSh7fSxuLnIse30pLHQ6YSh7fSxuLnQse30pLG1hcmtlcjp7Y29sb3I6YSh7fSxpLmNvbG9yLHt9KSxzaXplOmEoe30saS5zaXplLHt9KSxzeW1ib2w6YSh7fSxpLnN5bWJvbCx7fSksb3BhY2l0eTphKHt9LGkub3BhY2l0eSx7fSksZWRpdFR5cGU6XCJjYWxjXCJ9fX0se1wiLi4vLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXNcIjoxMDUyfV0sODE3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsYT10KFwiLi4vLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbCxvPVtcIkxlZ2FjeSBwb2xhciBjaGFydHMgYXJlIGRlcHJlY2F0ZWQhXCIsXCJQbGVhc2Ugc3dpdGNoIHRvICpwb2xhciogc3VicGxvdHMuXCJdLmpvaW4oXCIgXCIpLHM9aSh7fSxuLmRvbWFpbix7fSk7ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBpKHt9LGUse3Nob3dsaW5lOnt2YWxUeXBlOlwiYm9vbGVhblwifSxzaG93dGlja2xhYmVsczp7dmFsVHlwZTpcImJvb2xlYW5cIn0sdGlja29yaWVudGF0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJob3Jpem9udGFsXCIsXCJ2ZXJ0aWNhbFwiXX0sdGlja2xlbjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowfSx0aWNrY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwifSx0aWNrc3VmZml4Ont2YWxUeXBlOlwic3RyaW5nXCJ9LGVuZHBhZGRpbmc6e3ZhbFR5cGU6XCJudW1iZXJcIixkZXNjcmlwdGlvbjpvfSx2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwifX0pfWUuZXhwb3J0cz1hKHtyYWRpYWxheGlzOmwoMCx7cmFuZ2U6e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsaXRlbXM6W3t2YWxUeXBlOlwibnVtYmVyXCJ9LHt2YWxUeXBlOlwibnVtYmVyXCJ9XX0sZG9tYWluOnMsb3JpZW50YXRpb246e3ZhbFR5cGU6XCJudW1iZXJcIn19KSxhbmd1bGFyYXhpczpsKDAse3JhbmdlOnt2YWxUeXBlOlwiaW5mb19hcnJheVwiLGl0ZW1zOlt7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MH0se3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjM2MH1dfSxkb21haW46c30pLGxheW91dDp7ZGlyZWN0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJjbG9ja3dpc2VcIixcImNvdW50ZXJjbG9ja3dpc2VcIl19LG9yaWVudGF0aW9uOnt2YWxUeXBlOlwiYW5nbGVcIn19fSxcInBsb3RcIixcIm5lc3RlZFwiKX0se1wiLi4vLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi8uLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo3NjF9XSw4MTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZS5leHBvcnRzPXQoXCIuL21pY3JvcG9sYXJcIikpLm1hbmFnZXI9dChcIi4vbWljcm9wb2xhcl9tYW5hZ2VyXCIpfSx7XCIuL21pY3JvcG9sYXJcIjo4MTksXCIuL21pY3JvcG9sYXJfbWFuYWdlclwiOjgyMH1dLDgxOTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi8uLi9saWJcIikuZXh0ZW5kRGVlcEFsbCxhPXQoXCIuLi8uLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCIpLk1JRF9TSElGVCxvPWUuZXhwb3J0cz17dmVyc2lvbjpcIjAuMi4yXCJ9O28uQXhpcz1mdW5jdGlvbigpe3ZhciB0LGUscixzLGw9e2RhdGE6W10sbGF5b3V0Ont9fSxjPXt9LHU9e30saD1uLmRpc3BhdGNoKFwiaG92ZXJcIiksZj17fTtyZXR1cm4gZi5yZW5kZXI9ZnVuY3Rpb24oYyl7cmV0dXJuIGZ1bmN0aW9uKGMpe2U9Y3x8ZTt2YXIgaD1sLmRhdGEsZj1sLmxheW91dDsoXCJzdHJpbmdcIj09dHlwZW9mIGV8fGUubm9kZU5hbWUpJiYoZT1uLnNlbGVjdChlKSksZS5kYXR1bShoKS5lYWNoKGZ1bmN0aW9uKGUsbCl7dmFyIGM9ZS5zbGljZSgpO3U9e2RhdGE6by51dGlsLmNsb25lSnNvbihjKSxsYXlvdXQ6by51dGlsLmNsb25lSnNvbihmKX07dmFyIGg9MDtjLmZvckVhY2goZnVuY3Rpb24odCxlKXt0LmNvbG9yfHwodC5jb2xvcj1mLmRlZmF1bHRDb2xvclJhbmdlW2hdLGg9KGgrMSklZi5kZWZhdWx0Q29sb3JSYW5nZS5sZW5ndGgpLHQuc3Ryb2tlQ29sb3J8fCh0LnN0cm9rZUNvbG9yPVwiTGluZVBsb3RcIj09PXQuZ2VvbWV0cnk/dC5jb2xvcjpuLnJnYih0LmNvbG9yKS5kYXJrZXIoKS50b1N0cmluZygpKSx1LmRhdGFbZV0uY29sb3I9dC5jb2xvcix1LmRhdGFbZV0uc3Ryb2tlQ29sb3I9dC5zdHJva2VDb2xvcix1LmRhdGFbZV0uc3Ryb2tlRGFzaD10LnN0cm9rZURhc2gsdS5kYXRhW2VdLnN0cm9rZVNpemU9dC5zdHJva2VTaXplfSk7dmFyIHA9Yy5maWx0ZXIoZnVuY3Rpb24odCxlKXt2YXIgcj10LnZpc2libGU7cmV0dXJuXCJ1bmRlZmluZWRcIj09dHlwZW9mIHJ8fCEwPT09cn0pLGQ9ITEsZz1wLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBkPWR8fFwidW5kZWZpbmVkXCIhPXR5cGVvZiB0Lmdyb3VwSWQsdH0pO2lmKGQpe3ZhciB2PW4ubmVzdCgpLmtleShmdW5jdGlvbih0LGUpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiB0Lmdyb3VwSWQ/dC5ncm91cElkOlwidW5zdGFja2VkXCJ9KS5lbnRyaWVzKGcpLG09W10seT12Lm1hcChmdW5jdGlvbih0LGUpe2lmKFwidW5zdGFja2VkXCI9PT10LmtleSlyZXR1cm4gdC52YWx1ZXM7dmFyIHI9dC52YWx1ZXNbMF0uci5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gMH0pO3JldHVybiB0LnZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSxuKXt0LnlTdGFjaz1bcl0sbS5wdXNoKHIpLHI9by51dGlsLnN1bUFycmF5cyh0LnIscil9KSx0LnZhbHVlc30pO3A9bi5tZXJnZSh5KX1wLmZvckVhY2goZnVuY3Rpb24odCxlKXt0LnQ9QXJyYXkuaXNBcnJheSh0LnRbMF0pP3QudDpbdC50XSx0LnI9QXJyYXkuaXNBcnJheSh0LnJbMF0pP3QucjpbdC5yXX0pO3ZhciB4PU1hdGgubWluKGYud2lkdGgtZi5tYXJnaW4ubGVmdC1mLm1hcmdpbi5yaWdodCxmLmhlaWdodC1mLm1hcmdpbi50b3AtZi5tYXJnaW4uYm90dG9tKS8yO3g9TWF0aC5tYXgoMTAseCk7dmFyIGIsXz1bZi5tYXJnaW4ubGVmdCt4LGYubWFyZ2luLnRvcCt4XTtiPWQ/WzAsbi5tYXgoby51dGlsLnN1bUFycmF5cyhvLnV0aWwuYXJyYXlMYXN0KHApLnJbMF0sby51dGlsLmFycmF5TGFzdChtKSkpXTpuLmV4dGVudChvLnV0aWwuZmxhdHRlbkFycmF5KHAubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucn0pKSksZi5yYWRpYWxBeGlzLmRvbWFpbiE9by5EQVRBRVhURU5UJiYoYlswXT0wKSxyPW4uc2NhbGUubGluZWFyKCkuZG9tYWluKGYucmFkaWFsQXhpcy5kb21haW4hPW8uREFUQUVYVEVOVCYmZi5yYWRpYWxBeGlzLmRvbWFpbj9mLnJhZGlhbEF4aXMuZG9tYWluOmIpLnJhbmdlKFswLHhdKSx1LmxheW91dC5yYWRpYWxBeGlzLmRvbWFpbj1yLmRvbWFpbigpO3ZhciB3LGs9by51dGlsLmZsYXR0ZW5BcnJheShwLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0LnR9KSksQT1cInN0cmluZ1wiPT10eXBlb2Yga1swXTtBJiYoaz1vLnV0aWwuZGVkdXBsaWNhdGUoayksdz1rLnNsaWNlKCksaz1uLnJhbmdlKGsubGVuZ3RoKSxwPXAubWFwKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dDtyZXR1cm4gdC50PVtrXSxkJiYoci55U3RhY2s9dC55U3RhY2spLHJ9KSk7dmFyIFQ9cC5maWx0ZXIoZnVuY3Rpb24odCxlKXtyZXR1cm5cIkxpbmVQbG90XCI9PT10Lmdlb21ldHJ5fHxcIkRvdFBsb3RcIj09PXQuZ2VvbWV0cnl9KS5sZW5ndGg9PT1wLmxlbmd0aCxNPW51bGw9PT1mLm5lZWRzRW5kU3BhY2luZz9BfHwhVDpmLm5lZWRzRW5kU3BhY2luZyxTPWYuYW5ndWxhckF4aXMuZG9tYWluJiZmLmFuZ3VsYXJBeGlzLmRvbWFpbiE9by5EQVRBRVhURU5UJiYhQSYmZi5hbmd1bGFyQXhpcy5kb21haW5bMF0+PTA/Zi5hbmd1bGFyQXhpcy5kb21haW46bi5leHRlbnQoayksRT1NYXRoLmFicyhrWzFdLWtbMF0pO1QmJiFBJiYoRT0wKTt2YXIgQz1TLnNsaWNlKCk7TSYmQSYmKENbMV0rPUUpO3ZhciBMPWYuYW5ndWxhckF4aXMudGlja3NDb3VudHx8NDtMPjgmJihMPUwvKEwvOCkrTCU4KSxmLmFuZ3VsYXJBeGlzLnRpY2tzU3RlcCYmKEw9KENbMV0tQ1swXSkvTCk7dmFyIHo9Zi5hbmd1bGFyQXhpcy50aWNrc1N0ZXB8fChDWzFdLUNbMF0pLyhMKihmLm1pbm9yVGlja3MrMSkpO3cmJih6PU1hdGgubWF4KE1hdGgucm91bmQoeiksMSkpLENbMl18fChDWzJdPXopO3ZhciBPPW4ucmFuZ2UuYXBwbHkodGhpcyxDKTtpZihPPU8ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHBhcnNlRmxvYXQodC50b1ByZWNpc2lvbigxMikpfSkscz1uLnNjYWxlLmxpbmVhcigpLmRvbWFpbihDLnNsaWNlKDAsMikpLnJhbmdlKFwiY2xvY2t3aXNlXCI9PT1mLmRpcmVjdGlvbj9bMCwzNjBdOlszNjAsMF0pLHUubGF5b3V0LmFuZ3VsYXJBeGlzLmRvbWFpbj1zLmRvbWFpbigpLHUubGF5b3V0LmFuZ3VsYXJBeGlzLmVuZFBhZGRpbmc9TT9FOjAsXCJ1bmRlZmluZWRcIj09dHlwZW9mKHQ9bi5zZWxlY3QodGhpcykuc2VsZWN0KFwic3ZnLmNoYXJ0LXJvb3RcIikpfHx0LmVtcHR5KCkpe3ZhciBJPShuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoXCI8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgY2xhc3M9J2NoYXJ0LXJvb3QnPicgKyAnPGcgY2xhc3M9J291dGVyLWdyb3VwJz4nICsgJzxnIGNsYXNzPSdjaGFydC1ncm91cCc+JyArICc8Y2lyY2xlIGNsYXNzPSdiYWNrZ3JvdW5kLWNpcmNsZSc+PC9jaXJjbGU+JyArICc8ZyBjbGFzcz0nZ2VvbWV0cnktZ3JvdXAnPjwvZz4nICsgJzxnIGNsYXNzPSdyYWRpYWwgYXhpcy1ncm91cCc+JyArICc8Y2lyY2xlIGNsYXNzPSdvdXRzaWRlLWNpcmNsZSc+PC9jaXJjbGU+JyArICc8L2c+JyArICc8ZyBjbGFzcz0nYW5ndWxhciBheGlzLWdyb3VwJz48L2c+JyArICc8ZyBjbGFzcz0nZ3VpZGVzLWdyb3VwJz48bGluZT48L2xpbmU+PGNpcmNsZSByPScwJz48L2NpcmNsZT48L2c+JyArICc8L2c+JyArICc8ZyBjbGFzcz0nbGVnZW5kLWdyb3VwJz48L2c+JyArICc8ZyBjbGFzcz0ndG9vbHRpcHMtZ3JvdXAnPjwvZz4nICsgJzxnIGNsYXNzPSd0aXRsZS1ncm91cCc+PHRleHQ+PC90ZXh0PjwvZz4nICsgJzwvZz4nICsgJzwvc3ZnPlwiLFwiYXBwbGljYXRpb24veG1sXCIpLEQ9dGhpcy5hcHBlbmRDaGlsZCh0aGlzLm93bmVyRG9jdW1lbnQuaW1wb3J0Tm9kZShJLmRvY3VtZW50RWxlbWVudCwhMCkpO3Q9bi5zZWxlY3QoRCl9dC5zZWxlY3QoXCIuZ3VpZGVzLWdyb3VwXCIpLnN0eWxlKHtcInBvaW50ZXItZXZlbnRzXCI6XCJub25lXCJ9KSx0LnNlbGVjdChcIi5hbmd1bGFyLmF4aXMtZ3JvdXBcIikuc3R5bGUoe1wicG9pbnRlci1ldmVudHNcIjpcIm5vbmVcIn0pLHQuc2VsZWN0KFwiLnJhZGlhbC5heGlzLWdyb3VwXCIpLnN0eWxlKHtcInBvaW50ZXItZXZlbnRzXCI6XCJub25lXCJ9KTt2YXIgUCxSPXQuc2VsZWN0KFwiLmNoYXJ0LWdyb3VwXCIpLEY9e2ZpbGw6XCJub25lXCIsc3Ryb2tlOmYudGlja0NvbG9yfSxCPXtcImZvbnQtc2l6ZVwiOmYuZm9udC5zaXplLFwiZm9udC1mYW1pbHlcIjpmLmZvbnQuZmFtaWx5LGZpbGw6Zi5mb250LmNvbG9yLFwidGV4dC1zaGFkb3dcIjpbXCItMXB4IDBweFwiLFwiMXB4IC0xcHhcIixcIi0xcHggMXB4XCIsXCIxcHggMXB4XCJdLm1hcChmdW5jdGlvbih0LGUpe3JldHVyblwiIFwiK3QrXCIgMCBcIitmLmZvbnQub3V0bGluZUNvbG9yfSkuam9pbihcIixcIil9O2lmKGYuc2hvd0xlZ2VuZCl7UD10LnNlbGVjdChcIi5sZWdlbmQtZ3JvdXBcIikuYXR0cih7dHJhbnNmb3JtOlwidHJhbnNsYXRlKFwiK1t4LGYubWFyZ2luLnRvcF0rXCIpXCJ9KS5zdHlsZSh7ZGlzcGxheTpcImJsb2NrXCJ9KTt2YXIgTj1wLm1hcChmdW5jdGlvbih0LGUpe3ZhciByPW8udXRpbC5jbG9uZUpzb24odCk7cmV0dXJuIHIuc3ltYm9sPVwiRG90UGxvdFwiPT09dC5nZW9tZXRyeT90LmRvdFR5cGV8fFwiY2lyY2xlXCI6XCJMaW5lUGxvdFwiIT10Lmdlb21ldHJ5P1wic3F1YXJlXCI6XCJsaW5lXCIsci52aXNpYmxlSW5MZWdlbmQ9XCJ1bmRlZmluZWRcIj09dHlwZW9mIHQudmlzaWJsZUluTGVnZW5kfHx0LnZpc2libGVJbkxlZ2VuZCxyLmNvbG9yPVwiTGluZVBsb3RcIj09PXQuZ2VvbWV0cnk/dC5zdHJva2VDb2xvcjp0LmNvbG9yLHJ9KTtvLkxlZ2VuZCgpLmNvbmZpZyh7ZGF0YTpwLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0Lm5hbWV8fFwiRWxlbWVudFwiK2V9KSxsZWdlbmRDb25maWc6aSh7fSxvLkxlZ2VuZC5kZWZhdWx0Q29uZmlnKCkubGVnZW5kQ29uZmlnLHtjb250YWluZXI6UCxlbGVtZW50czpOLHJldmVyc2VPcmRlcjpmLmxlZ2VuZC5yZXZlcnNlT3JkZXJ9KX0pKCk7dmFyIGo9UC5ub2RlKCkuZ2V0QkJveCgpO3g9TWF0aC5taW4oZi53aWR0aC1qLndpZHRoLWYubWFyZ2luLmxlZnQtZi5tYXJnaW4ucmlnaHQsZi5oZWlnaHQtZi5tYXJnaW4udG9wLWYubWFyZ2luLmJvdHRvbSkvMix4PU1hdGgubWF4KDEwLHgpLF89W2YubWFyZ2luLmxlZnQreCxmLm1hcmdpbi50b3AreF0sci5yYW5nZShbMCx4XSksdS5sYXlvdXQucmFkaWFsQXhpcy5kb21haW49ci5kb21haW4oKSxQLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIitbX1swXSt4LF9bMV0teF0rXCIpXCIpfWVsc2UgUD10LnNlbGVjdChcIi5sZWdlbmQtZ3JvdXBcIikuc3R5bGUoe2Rpc3BsYXk6XCJub25lXCJ9KTt0LmF0dHIoe3dpZHRoOmYud2lkdGgsaGVpZ2h0OmYuaGVpZ2h0fSkuc3R5bGUoe29wYWNpdHk6Zi5vcGFjaXR5fSksUi5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrXytcIilcIikuc3R5bGUoe2N1cnNvcjpcImNyb3NzaGFpclwifSk7dmFyIFY9WyhmLndpZHRoLShmLm1hcmdpbi5sZWZ0K2YubWFyZ2luLnJpZ2h0KzIqeCsoaj9qLndpZHRoOjApKSkvMiwoZi5oZWlnaHQtKGYubWFyZ2luLnRvcCtmLm1hcmdpbi5ib3R0b20rMip4KSkvMl07aWYoVlswXT1NYXRoLm1heCgwLFZbMF0pLFZbMV09TWF0aC5tYXgoMCxWWzFdKSx0LnNlbGVjdChcIi5vdXRlci1ncm91cFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrVitcIilcIiksZi50aXRsZSYmZi50aXRsZS50ZXh0KXt2YXIgVT10LnNlbGVjdChcImcudGl0bGUtZ3JvdXAgdGV4dFwiKS5zdHlsZShCKS50ZXh0KGYudGl0bGUudGV4dCkscT1VLm5vZGUoKS5nZXRCQm94KCk7VS5hdHRyKHt4Ol9bMF0tcS53aWR0aC8yLHk6X1sxXS14LTIwfSl9dmFyIEg9dC5zZWxlY3QoXCIucmFkaWFsLmF4aXMtZ3JvdXBcIik7aWYoZi5yYWRpYWxBeGlzLmdyaWRMaW5lc1Zpc2libGUpe3ZhciBHPUguc2VsZWN0QWxsKFwiY2lyY2xlLmdyaWQtY2lyY2xlXCIpLmRhdGEoci50aWNrcyg1KSk7Ry5lbnRlcigpLmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKHtjbGFzczpcImdyaWQtY2lyY2xlXCJ9KS5zdHlsZShGKSxHLmF0dHIoXCJyXCIsciksRy5leGl0KCkucmVtb3ZlKCl9SC5zZWxlY3QoXCJjaXJjbGUub3V0c2lkZS1jaXJjbGVcIikuYXR0cih7cjp4fSkuc3R5bGUoRik7dmFyIFk9dC5zZWxlY3QoXCJjaXJjbGUuYmFja2dyb3VuZC1jaXJjbGVcIikuYXR0cih7cjp4fSkuc3R5bGUoe2ZpbGw6Zi5iYWNrZ3JvdW5kQ29sb3Isc3Ryb2tlOmYuc3Ryb2tlfSk7ZnVuY3Rpb24gVyh0LGUpe3JldHVybiBzKHQpJTM2MCtmLm9yaWVudGF0aW9ufWlmKGYucmFkaWFsQXhpcy52aXNpYmxlKXt2YXIgWD1uLnN2Zy5heGlzKCkuc2NhbGUocikudGlja3MoNSkudGlja1NpemUoNSk7SC5jYWxsKFgpLmF0dHIoe3RyYW5zZm9ybTpcInJvdGF0ZShcIitmLnJhZGlhbEF4aXMub3JpZW50YXRpb24rXCIpXCJ9KSxILnNlbGVjdEFsbChcIi5kb21haW5cIikuc3R5bGUoRiksSC5zZWxlY3RBbGwoXCJnPnRleHRcIikudGV4dChmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnRleHRDb250ZW50K2YucmFkaWFsQXhpcy50aWNrc1N1ZmZpeH0pLnN0eWxlKEIpLnN0eWxlKHtcInRleHQtYW5jaG9yXCI6XCJzdGFydFwifSkuYXR0cih7eDowLHk6MCxkeDowLGR5OjAsdHJhbnNmb3JtOmZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJob3Jpem9udGFsXCI9PT1mLnJhZGlhbEF4aXMudGlja09yaWVudGF0aW9uP1wicm90YXRlKFwiKy1mLnJhZGlhbEF4aXMub3JpZW50YXRpb24rXCIpIHRyYW5zbGF0ZShcIitbMCxCW1wiZm9udC1zaXplXCJdXStcIilcIjpcInRyYW5zbGF0ZShcIitbMCxCW1wiZm9udC1zaXplXCJdXStcIilcIn19KSxILnNlbGVjdEFsbChcImc+bGluZVwiKS5zdHlsZSh7c3Ryb2tlOlwiYmxhY2tcIn0pfXZhciBaPXQuc2VsZWN0KFwiLmFuZ3VsYXIuYXhpcy1ncm91cFwiKS5zZWxlY3RBbGwoXCJnLmFuZ3VsYXItdGlja1wiKS5kYXRhKE8pLCQ9Wi5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcImFuZ3VsYXItdGlja1wiLCEwKTtaLmF0dHIoe3RyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3JldHVyblwicm90YXRlKFwiK1codCkrXCIpXCJ9fSkuc3R5bGUoe2Rpc3BsYXk6Zi5hbmd1bGFyQXhpcy52aXNpYmxlP1wiYmxvY2tcIjpcIm5vbmVcIn0pLFouZXhpdCgpLnJlbW92ZSgpLCQuYXBwZW5kKFwibGluZVwiKS5jbGFzc2VkKFwiZ3JpZC1saW5lXCIsITApLmNsYXNzZWQoXCJtYWpvclwiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUlKGYubWlub3JUaWNrcysxKT09MH0pLmNsYXNzZWQoXCJtaW5vclwiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIShlJShmLm1pbm9yVGlja3MrMSk9PTApfSkuc3R5bGUoRiksJC5zZWxlY3RBbGwoXCIubWlub3JcIikuc3R5bGUoe3N0cm9rZTpmLm1pbm9yVGlja0NvbG9yfSksWi5zZWxlY3QoXCJsaW5lLmdyaWQtbGluZVwiKS5hdHRyKHt4MTpmLnRpY2tMZW5ndGg/eC1mLnRpY2tMZW5ndGg6MCx4Mjp4fSkuc3R5bGUoe2Rpc3BsYXk6Zi5hbmd1bGFyQXhpcy5ncmlkTGluZXNWaXNpYmxlP1wiYmxvY2tcIjpcIm5vbmVcIn0pLCQuYXBwZW5kKFwidGV4dFwiKS5jbGFzc2VkKFwiYXhpcy10ZXh0XCIsITApLnN0eWxlKEIpO3ZhciBKPVouc2VsZWN0KFwidGV4dC5heGlzLXRleHRcIikuYXR0cih7eDp4K2YubGFiZWxPZmZzZXQsZHk6YStcImVtXCIsdHJhbnNmb3JtOmZ1bmN0aW9uKHQsZSl7dmFyIHI9Vyh0KSxuPXgrZi5sYWJlbE9mZnNldCxpPWYuYW5ndWxhckF4aXMudGlja09yaWVudGF0aW9uO3JldHVyblwiaG9yaXpvbnRhbFwiPT1pP1wicm90YXRlKFwiKy1yK1wiIFwiK24rXCIgMClcIjpcInJhZGlhbFwiPT1pP3I8MjcwJiZyPjkwP1wicm90YXRlKDE4MCBcIituK1wiIDApXCI6bnVsbDpcInJvdGF0ZShcIisocjw9MTgwJiZyPjA/LTkwOjkwKStcIiBcIituK1wiIDApXCJ9fSkuc3R5bGUoe1widGV4dC1hbmNob3JcIjpcIm1pZGRsZVwiLGRpc3BsYXk6Zi5hbmd1bGFyQXhpcy5sYWJlbHNWaXNpYmxlP1wiYmxvY2tcIjpcIm5vbmVcIn0pLnRleHQoZnVuY3Rpb24odCxlKXtyZXR1cm4gZSUoZi5taW5vclRpY2tzKzEpIT0wP1wiXCI6dz93W3RdK2YuYW5ndWxhckF4aXMudGlja3NTdWZmaXg6dCtmLmFuZ3VsYXJBeGlzLnRpY2tzU3VmZml4fSkuc3R5bGUoQik7Zi5hbmd1bGFyQXhpcy5yZXdyaXRlVGlja3MmJkoudGV4dChmdW5jdGlvbih0LGUpe3JldHVybiBlJShmLm1pbm9yVGlja3MrMSkhPTA/XCJcIjpmLmFuZ3VsYXJBeGlzLnJld3JpdGVUaWNrcyh0aGlzLnRleHRDb250ZW50LGUpfSk7dmFyIEs9bi5tYXgoUi5zZWxlY3RBbGwoXCIuYW5ndWxhci10aWNrIHRleHRcIilbMF0ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZ2V0Q1RNKCkuZSt0LmdldEJCb3goKS53aWR0aH0pKTtQLmF0dHIoe3RyYW5zZm9ybTpcInRyYW5zbGF0ZShcIitbeCtLLGYubWFyZ2luLnRvcF0rXCIpXCJ9KTt2YXIgUT10LnNlbGVjdChcImcuZ2VvbWV0cnktZ3JvdXBcIikuc2VsZWN0QWxsKFwiZ1wiKS5zaXplKCk+MCx0dD10LnNlbGVjdChcImcuZ2VvbWV0cnktZ3JvdXBcIikuc2VsZWN0QWxsKFwiZy5nZW9tZXRyeVwiKS5kYXRhKHApO2lmKHR0LmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKHtjbGFzczpmdW5jdGlvbih0LGUpe3JldHVyblwiZ2VvbWV0cnkgZ2VvbWV0cnlcIitlfX0pLHR0LmV4aXQoKS5yZW1vdmUoKSxwWzBdfHxRKXt2YXIgZXQ9W107cC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49e307bi5yYWRpYWxTY2FsZT1yLG4uYW5ndWxhclNjYWxlPXMsbi5jb250YWluZXI9dHQuZmlsdGVyKGZ1bmN0aW9uKHQscil7cmV0dXJuIHI9PWV9KSxuLmdlb21ldHJ5PXQuZ2VvbWV0cnksbi5vcmllbnRhdGlvbj1mLm9yaWVudGF0aW9uLG4uZGlyZWN0aW9uPWYuZGlyZWN0aW9uLG4uaW5kZXg9ZSxldC5wdXNoKHtkYXRhOnQsZ2VvbWV0cnlDb25maWc6bn0pfSk7dmFyIHJ0PW4ubmVzdCgpLmtleShmdW5jdGlvbih0LGUpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiB0LmRhdGEuZ3JvdXBJZHx8XCJ1bnN0YWNrZWRcIn0pLmVudHJpZXMoZXQpLG50PVtdO3J0LmZvckVhY2goZnVuY3Rpb24odCxlKXtcInVuc3RhY2tlZFwiPT09dC5rZXk/bnQ9bnQuY29uY2F0KHQudmFsdWVzLm1hcChmdW5jdGlvbih0LGUpe3JldHVyblt0XX0pKTpudC5wdXNoKHQudmFsdWVzKX0pLG50LmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgcjtyPUFycmF5LmlzQXJyYXkodCk/dFswXS5nZW9tZXRyeUNvbmZpZy5nZW9tZXRyeTp0Lmdlb21ldHJ5Q29uZmlnLmdlb21ldHJ5O3ZhciBuPXQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkob1tyXS5kZWZhdWx0Q29uZmlnKCksdCl9KTtvW3JdKCkuY29uZmlnKG4pKCl9KX12YXIgaXQsYXQsb3Q9dC5zZWxlY3QoXCIuZ3VpZGVzLWdyb3VwXCIpLHN0PXQuc2VsZWN0KFwiLnRvb2x0aXBzLWdyb3VwXCIpLGx0PW8udG9vbHRpcFBhbmVsKCkuY29uZmlnKHtjb250YWluZXI6c3QsZm9udFNpemU6OH0pKCksY3Q9by50b29sdGlwUGFuZWwoKS5jb25maWcoe2NvbnRhaW5lcjpzdCxmb250U2l6ZTo4fSkoKSx1dD1vLnRvb2x0aXBQYW5lbCgpLmNvbmZpZyh7Y29udGFpbmVyOnN0LGhhc1RpY2s6ITB9KSgpO2lmKCFBKXt2YXIgaHQ9b3Quc2VsZWN0KFwibGluZVwiKS5hdHRyKHt4MTowLHkxOjAseTI6MH0pLnN0eWxlKHtzdHJva2U6XCJncmV5XCIsXCJwb2ludGVyLWV2ZW50c1wiOlwibm9uZVwifSk7Ui5vbihcIm1vdXNlbW92ZS5hbmd1bGFyLWd1aWRlXCIsZnVuY3Rpb24odCxlKXt2YXIgcj1vLnV0aWwuZ2V0TW91c2VQb3MoWSkuYW5nbGU7aHQuYXR0cih7eDI6LXgsdHJhbnNmb3JtOlwicm90YXRlKFwiK3IrXCIpXCJ9KS5zdHlsZSh7b3BhY2l0eTouNX0pO3ZhciBuPShyKzE4MCszNjAtZi5vcmllbnRhdGlvbiklMzYwO2l0PXMuaW52ZXJ0KG4pO3ZhciBpPW8udXRpbC5jb252ZXJ0VG9DYXJ0ZXNpYW4oeCsxMixyKzE4MCk7bHQudGV4dChvLnV0aWwucm91bmQoaXQpKS5tb3ZlKFtpWzBdK19bMF0saVsxXStfWzFdXSl9KS5vbihcIm1vdXNlb3V0LmFuZ3VsYXItZ3VpZGVcIixmdW5jdGlvbih0LGUpe290LnNlbGVjdChcImxpbmVcIikuc3R5bGUoe29wYWNpdHk6MH0pfSl9dmFyIGZ0PW90LnNlbGVjdChcImNpcmNsZVwiKS5zdHlsZSh7c3Ryb2tlOlwiZ3JleVwiLGZpbGw6XCJub25lXCJ9KTtSLm9uKFwibW91c2Vtb3ZlLnJhZGlhbC1ndWlkZVwiLGZ1bmN0aW9uKHQsZSl7dmFyIG49by51dGlsLmdldE1vdXNlUG9zKFkpLnJhZGl1cztmdC5hdHRyKHtyOm59KS5zdHlsZSh7b3BhY2l0eTouNX0pLGF0PXIuaW52ZXJ0KG8udXRpbC5nZXRNb3VzZVBvcyhZKS5yYWRpdXMpO3ZhciBpPW8udXRpbC5jb252ZXJ0VG9DYXJ0ZXNpYW4obixmLnJhZGlhbEF4aXMub3JpZW50YXRpb24pO2N0LnRleHQoby51dGlsLnJvdW5kKGF0KSkubW92ZShbaVswXStfWzBdLGlbMV0rX1sxXV0pfSkub24oXCJtb3VzZW91dC5yYWRpYWwtZ3VpZGVcIixmdW5jdGlvbih0LGUpe2Z0LnN0eWxlKHtvcGFjaXR5OjB9KSx1dC5oaWRlKCksbHQuaGlkZSgpLGN0LmhpZGUoKX0pLHQuc2VsZWN0QWxsKFwiLmdlb21ldHJ5LWdyb3VwIC5tYXJrXCIpLm9uKFwibW91c2VvdmVyLnRvb2x0aXBcIixmdW5jdGlvbihlLHIpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLGE9dGhpcy5zdHlsZS5maWxsLHM9XCJibGFja1wiLGw9dGhpcy5zdHlsZS5vcGFjaXR5fHwxO2lmKGkuYXR0cih7XCJkYXRhLW9wYWNpdHlcIjpsfSksYSYmXCJub25lXCIhPT1hKXtpLmF0dHIoe1wiZGF0YS1maWxsXCI6YX0pLHM9bi5oc2woYSkuZGFya2VyKCkudG9TdHJpbmcoKSxpLnN0eWxlKHtmaWxsOnMsb3BhY2l0eToxfSk7dmFyIGM9e3Q6by51dGlsLnJvdW5kKGVbMF0pLHI6by51dGlsLnJvdW5kKGVbMV0pfTtBJiYoYy50PXdbZVswXV0pO3ZhciB1PVwidDogXCIrYy50K1wiLCByOiBcIitjLnIsaD10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGY9dC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscD1baC5sZWZ0K2gud2lkdGgvMi1WWzBdLWYubGVmdCxoLnRvcCtoLmhlaWdodC8yLVZbMV0tZi50b3BdO3V0LmNvbmZpZyh7Y29sb3I6c30pLnRleHQodSksdXQubW92ZShwKX1lbHNlIGE9dGhpcy5zdHlsZS5zdHJva2V8fFwiYmxhY2tcIixpLmF0dHIoe1wiZGF0YS1zdHJva2VcIjphfSkscz1uLmhzbChhKS5kYXJrZXIoKS50b1N0cmluZygpLGkuc3R5bGUoe3N0cm9rZTpzLG9wYWNpdHk6MX0pfSkub24oXCJtb3VzZW1vdmUudG9vbHRpcFwiLGZ1bmN0aW9uKHQsZSl7aWYoMCE9bi5ldmVudC53aGljaClyZXR1cm4hMTtuLnNlbGVjdCh0aGlzKS5hdHRyKFwiZGF0YS1maWxsXCIpJiZ1dC5zaG93KCl9KS5vbihcIm1vdXNlb3V0LnRvb2x0aXBcIixmdW5jdGlvbih0LGUpe3V0LmhpZGUoKTt2YXIgcj1uLnNlbGVjdCh0aGlzKSxpPXIuYXR0cihcImRhdGEtZmlsbFwiKTtpP3Iuc3R5bGUoe2ZpbGw6aSxvcGFjaXR5OnIuYXR0cihcImRhdGEtb3BhY2l0eVwiKX0pOnIuc3R5bGUoe3N0cm9rZTpyLmF0dHIoXCJkYXRhLXN0cm9rZVwiKSxvcGFjaXR5OnIuYXR0cihcImRhdGEtb3BhY2l0eVwiKX0pfSl9KX0oYyksdGhpc30sZi5jb25maWc9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGw7dmFyIGU9by51dGlsLmNsb25lSnNvbih0KTtyZXR1cm4gZS5kYXRhLmZvckVhY2goZnVuY3Rpb24odCxlKXtsLmRhdGFbZV18fChsLmRhdGFbZV09e30pLGkobC5kYXRhW2VdLG8uQXhpcy5kZWZhdWx0Q29uZmlnKCkuZGF0YVswXSksaShsLmRhdGFbZV0sdCl9KSxpKGwubGF5b3V0LG8uQXhpcy5kZWZhdWx0Q29uZmlnKCkubGF5b3V0KSxpKGwubGF5b3V0LGUubGF5b3V0KSx0aGlzfSxmLmdldExpdmVDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4gdX0sZi5nZXRpbnB1dENvbmZpZz1mdW5jdGlvbigpe3JldHVybiBjfSxmLnJhZGlhbFNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiByfSxmLmFuZ3VsYXJTY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gc30sZi5zdmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sbi5yZWJpbmQoZixoLFwib25cIiksZn0sby5BeGlzLmRlZmF1bHRDb25maWc9ZnVuY3Rpb24odCxlKXtyZXR1cm57ZGF0YTpbe3Q6WzEsMiwzLDRdLHI6WzEwLDExLDEyLDEzXSxuYW1lOlwiTGluZTFcIixnZW9tZXRyeTpcIkxpbmVQbG90XCIsY29sb3I6bnVsbCxzdHJva2VEYXNoOlwic29saWRcIixzdHJva2VDb2xvcjpudWxsLHN0cm9rZVNpemU6XCIxXCIsdmlzaWJsZUluTGVnZW5kOiEwLG9wYWNpdHk6MX1dLGxheW91dDp7ZGVmYXVsdENvbG9yUmFuZ2U6bi5zY2FsZS5jYXRlZ29yeTEwKCkucmFuZ2UoKSx0aXRsZTpudWxsLGhlaWdodDo0NTAsd2lkdGg6NTAwLG1hcmdpbjp7dG9wOjQwLHJpZ2h0OjQwLGJvdHRvbTo0MCxsZWZ0OjQwfSxmb250OntzaXplOjEyLGNvbG9yOlwiZ3JheVwiLG91dGxpbmVDb2xvcjpcIndoaXRlXCIsZmFtaWx5OlwiVGFob21hLCBzYW5zLXNlcmlmXCJ9LGRpcmVjdGlvbjpcImNsb2Nrd2lzZVwiLG9yaWVudGF0aW9uOjAsbGFiZWxPZmZzZXQ6MTAscmFkaWFsQXhpczp7ZG9tYWluOm51bGwsb3JpZW50YXRpb246LTQ1LHRpY2tzU3VmZml4OlwiXCIsdmlzaWJsZTohMCxncmlkTGluZXNWaXNpYmxlOiEwLHRpY2tPcmllbnRhdGlvbjpcImhvcml6b250YWxcIixyZXdyaXRlVGlja3M6bnVsbH0sYW5ndWxhckF4aXM6e2RvbWFpbjpbMCwzNjBdLHRpY2tzU3VmZml4OlwiXCIsdmlzaWJsZTohMCxncmlkTGluZXNWaXNpYmxlOiEwLGxhYmVsc1Zpc2libGU6ITAsdGlja09yaWVudGF0aW9uOlwiaG9yaXpvbnRhbFwiLHJld3JpdGVUaWNrczpudWxsLHRpY2tzQ291bnQ6bnVsbCx0aWNrc1N0ZXA6bnVsbH0sbWlub3JUaWNrczowLHRpY2tMZW5ndGg6bnVsbCx0aWNrQ29sb3I6XCJzaWx2ZXJcIixtaW5vclRpY2tDb2xvcjpcIiNlZWVcIixiYWNrZ3JvdW5kQ29sb3I6XCJub25lXCIsbmVlZHNFbmRTcGFjaW5nOm51bGwsc2hvd0xlZ2VuZDohMCxsZWdlbmQ6e3JldmVyc2VPcmRlcjohMX0sb3BhY2l0eToxfX19LG8udXRpbD17fSxvLkRBVEFFWFRFTlQ9XCJkYXRhRXh0ZW50XCIsby5BUkVBPVwiQXJlYUNoYXJ0XCIsby5MSU5FPVwiTGluZVBsb3RcIixvLkRPVD1cIkRvdFBsb3RcIixvLkJBUj1cIkJhckNoYXJ0XCIsby51dGlsLl9vdmVycmlkZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiB0KXIgaW4gZSYmKGVbcl09dFtyXSl9LG8udXRpbC5fZXh0ZW5kPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIHQpZVtyXT10W3JdfSxvLnV0aWwuX3JuZFNuZD1mdW5jdGlvbigpe3JldHVybiAyKk1hdGgucmFuZG9tKCktMSsoMipNYXRoLnJhbmRvbSgpLTEpKygyKk1hdGgucmFuZG9tKCktMSl9LG8udXRpbC5kYXRhRnJvbUVxdWF0aW9uMj1mdW5jdGlvbih0LGUpe3ZhciByPWV8fDY7cmV0dXJuIG4ucmFuZ2UoMCwzNjArcixyKS5tYXAoZnVuY3Rpb24oZSxyKXt2YXIgbj1lKk1hdGguUEkvMTgwO3JldHVybltlLHQobildfSl9LG8udXRpbC5kYXRhRnJvbUVxdWF0aW9uPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1lfHw2LGE9W10sbz1bXTtuLnJhbmdlKDAsMzYwK2ksaSkuZm9yRWFjaChmdW5jdGlvbihlLHIpe3ZhciBuPWUqTWF0aC5QSS8xODAsaT10KG4pO2EucHVzaChlKSxvLnB1c2goaSl9KTt2YXIgcz17dDphLHI6b307cmV0dXJuIHImJihzLm5hbWU9ciksc30sby51dGlsLmVuc3VyZUFycmF5PWZ1bmN0aW9uKHQsZSl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIHQpcmV0dXJuIG51bGw7dmFyIHI9W10uY29uY2F0KHQpO3JldHVybiBuLnJhbmdlKGUpLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiByW2VdfHxyWzBdfSl9LG8udXRpbC5maWxsQXJyYXlzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7dFtlXT1vLnV0aWwuZW5zdXJlQXJyYXkodFtlXSxyKX0pLHR9LG8udXRpbC5jbG9uZUpzb249ZnVuY3Rpb24odCl7cmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodCkpfSxvLnV0aWwudmFsaWRhdGVLZXlzPWZ1bmN0aW9uKHQsZSl7XCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPWUuc3BsaXQoXCIuXCIpKTt2YXIgcj1lLnNoaWZ0KCk7cmV0dXJuIHRbcl0mJighZS5sZW5ndGh8fG9iakhhc0tleXModFtyXSxlKSl9LG8udXRpbC5zdW1BcnJheXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbi56aXAodCxlKS5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5zdW0odCl9KX0sby51dGlsLmFycmF5TGFzdD1mdW5jdGlvbih0KXtyZXR1cm4gdFt0Lmxlbmd0aC0xXX0sby51dGlsLmFycmF5RXF1YWw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9TWF0aC5tYXgodC5sZW5ndGgsZS5sZW5ndGgsMSk7ci0tID49MCYmdFtyXT09PWVbcl07KTtyZXR1cm4tMj09PXJ9LG8udXRpbC5mbGF0dGVuQXJyYXk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdOyFvLnV0aWwuYXJyYXlFcXVhbChlLHQpOyllPXQsdD1bXS5jb25jYXQuYXBwbHkoW10sdCk7cmV0dXJuIHR9LG8udXRpbC5kZWR1cGxpY2F0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5maWx0ZXIoZnVuY3Rpb24odCxlLHIpe3JldHVybiByLmluZGV4T2YodCk9PWV9KX0sby51dGlsLmNvbnZlcnRUb0NhcnRlc2lhbj1mdW5jdGlvbih0LGUpe3ZhciByPWUqTWF0aC5QSS8xODA7cmV0dXJuW3QqTWF0aC5jb3MociksdCpNYXRoLnNpbihyKV19LG8udXRpbC5yb3VuZD1mdW5jdGlvbih0LGUpe3ZhciByPWV8fDIsbj1NYXRoLnBvdygxMCxyKTtyZXR1cm4gTWF0aC5yb3VuZCh0Km4pL259LG8udXRpbC5nZXRNb3VzZVBvcz1mdW5jdGlvbih0KXt2YXIgZT1uLm1vdXNlKHQubm9kZSgpKSxyPWVbMF0saT1lWzFdLGE9e307cmV0dXJuIGEueD1yLGEueT1pLGEucG9zPWUsYS5hbmdsZT0xODAqKE1hdGguYXRhbjIoaSxyKStNYXRoLlBJKS9NYXRoLlBJLGEucmFkaXVzPU1hdGguc3FydChyKnIraSppKSxhfSxvLnV0aWwuZHVwbGljYXRlc0NvdW50PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPXt9LG49e30saT0wLGE9dC5sZW5ndGg7aTxhO2krKykoZT10W2ldKWluIHI/KHJbZV0rKyxuW2VdPXJbZV0pOnJbZV09MTtyZXR1cm4gbn0sby51dGlsLmR1cGxpY2F0ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKG8udXRpbC5kdXBsaWNhdGVzQ291bnQodCkpfSxvLnV0aWwudHJhbnNsYXRvcj1mdW5jdGlvbih0LGUscixuKXtpZihuKXt2YXIgaT1yLnNsaWNlKCk7cj1lLGU9aX12YXIgYT1lLnJlZHVjZShmdW5jdGlvbih0LGUpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB0KXJldHVybiB0W2VdfSx0KTtcInVuZGVmaW5lZFwiIT10eXBlb2YgYSYmKGUucmVkdWNlKGZ1bmN0aW9uKHQscixuKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgdClyZXR1cm4gbj09PWUubGVuZ3RoLTEmJmRlbGV0ZSB0W3JdLHRbcl19LHQpLHIucmVkdWNlKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5cInVuZGVmaW5lZFwiPT10eXBlb2YgdFtlXSYmKHRbZV09e30pLG49PT1yLmxlbmd0aC0xJiYodFtlXT1hKSx0W2VdfSx0KSl9LG8uUG9seUNoYXJ0PWZ1bmN0aW9uKCl7dmFyIHQ9W28uUG9seUNoYXJ0LmRlZmF1bHRDb25maWcoKV0sZT1uLmRpc3BhdGNoKFwiaG92ZXJcIikscj17c29saWQ6XCJub25lXCIsZGFzaDpbNSwyXSxkb3Q6WzIsNV19O2Z1bmN0aW9uIGEoKXt2YXIgZT10WzBdLmdlb21ldHJ5Q29uZmlnLGk9ZS5jb250YWluZXI7XCJzdHJpbmdcIj09dHlwZW9mIGkmJihpPW4uc2VsZWN0KGkpKSxpLmRhdHVtKHQpLmVhY2goZnVuY3Rpb24odCxpKXt2YXIgYT0hIXRbMF0uZGF0YS55U3RhY2ssbz10Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBhP24uemlwKHQuZGF0YS50WzBdLHQuZGF0YS5yWzBdLHQuZGF0YS55U3RhY2tbMF0pOm4uemlwKHQuZGF0YS50WzBdLHQuZGF0YS5yWzBdKX0pLHM9ZS5hbmd1bGFyU2NhbGUsbD1lLnJhZGlhbFNjYWxlLmRvbWFpbigpWzBdLGM9e2JhcjpmdW5jdGlvbihyLGksYSl7dmFyIG89dFthXS5kYXRhLGw9ZS5yYWRpYWxTY2FsZShyWzFdKS1lLnJhZGlhbFNjYWxlKDApLGM9ZS5yYWRpYWxTY2FsZShyWzJdfHwwKSx1PW8uYmFyV2lkdGg7bi5zZWxlY3QodGhpcykuYXR0cih7Y2xhc3M6XCJtYXJrIGJhclwiLGQ6XCJNXCIrW1tsK2MsLXUvMl0sW2wrYyx1LzJdLFtjLHUvMl0sW2MsLXUvMl1dLmpvaW4oXCJMXCIpK1wiWlwiLHRyYW5zZm9ybTpmdW5jdGlvbih0LHIpe3JldHVyblwicm90YXRlKFwiKyhlLm9yaWVudGF0aW9uK3ModFswXSkpK1wiKVwifX0pfX07Yy5kb3Q9ZnVuY3Rpb24ocixpLGEpe3ZhciBvPXJbMl0/W3JbMF0sclsxXStyWzJdXTpyLHM9bi5zdmcuc3ltYm9sKCkuc2l6ZSh0W2FdLmRhdGEuZG90U2l6ZSkudHlwZSh0W2FdLmRhdGEuZG90VHlwZSkocixpKTtuLnNlbGVjdCh0aGlzKS5hdHRyKHtjbGFzczpcIm1hcmsgZG90XCIsZDpzLHRyYW5zZm9ybTpmdW5jdGlvbih0LHIpe3ZhciBuLGksYSxzPShuPWZ1bmN0aW9uKHQscil7dmFyIG49ZS5yYWRpYWxTY2FsZSh0WzFdKSxpPShlLmFuZ3VsYXJTY2FsZSh0WzBdKStlLm9yaWVudGF0aW9uKSpNYXRoLlBJLzE4MDtyZXR1cm57cjpuLHQ6aX19KG8pLGk9bi5yKk1hdGguY29zKG4udCksYT1uLnIqTWF0aC5zaW4obi50KSx7eDppLHk6YX0pO3JldHVyblwidHJhbnNsYXRlKFwiK1tzLngscy55XStcIilcIn19KX07dmFyIHU9bi5zdmcubGluZS5yYWRpYWwoKS5pbnRlcnBvbGF0ZSh0WzBdLmRhdGEubGluZUludGVycG9sYXRpb24pLnJhZGl1cyhmdW5jdGlvbih0KXtyZXR1cm4gZS5yYWRpYWxTY2FsZSh0WzFdKX0pLmFuZ2xlKGZ1bmN0aW9uKHQpe3JldHVybiBlLmFuZ3VsYXJTY2FsZSh0WzBdKSpNYXRoLlBJLzE4MH0pO2MubGluZT1mdW5jdGlvbihyLGksYSl7dmFyIHM9clsyXT9vW2FdLm1hcChmdW5jdGlvbih0LGUpe3JldHVyblt0WzBdLHRbMV0rdFsyXV19KTpvW2FdO2lmKG4uc2VsZWN0KHRoaXMpLmVhY2goYy5kb3QpLnN0eWxlKHtvcGFjaXR5OmZ1bmN0aW9uKGUscil7cmV0dXJuK3RbYV0uZGF0YS5kb3RWaXNpYmxlfSxmaWxsOmQuc3Ryb2tlKHIsaSxhKX0pLmF0dHIoe2NsYXNzOlwibWFyayBkb3RcIn0pLCEoaT4wKSl7dmFyIGw9bi5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5zZWxlY3RBbGwoXCJwYXRoLmxpbmVcIikuZGF0YShbMF0pO2wuZW50ZXIoKS5pbnNlcnQoXCJwYXRoXCIpLGwuYXR0cih7Y2xhc3M6XCJsaW5lXCIsZDp1KHMpLHRyYW5zZm9ybTpmdW5jdGlvbih0LHIpe3JldHVyblwicm90YXRlKFwiKyhlLm9yaWVudGF0aW9uKzkwKStcIilcIn0sXCJwb2ludGVyLWV2ZW50c1wiOlwibm9uZVwifSkuc3R5bGUoe2ZpbGw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZC5maWxsKHIsaSxhKX0sXCJmaWxsLW9wYWNpdHlcIjowLHN0cm9rZTpmdW5jdGlvbih0LGUpe3JldHVybiBkLnN0cm9rZShyLGksYSl9LFwic3Ryb2tlLXdpZHRoXCI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZFtcInN0cm9rZS13aWR0aFwiXShyLGksYSl9LFwic3Ryb2tlLWRhc2hhcnJheVwiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGRbXCJzdHJva2UtZGFzaGFycmF5XCJdKHIsaSxhKX0sb3BhY2l0eTpmdW5jdGlvbih0LGUpe3JldHVybiBkLm9wYWNpdHkocixpLGEpfSxkaXNwbGF5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQuZGlzcGxheShyLGksYSl9fSl9fTt2YXIgaD1lLmFuZ3VsYXJTY2FsZS5yYW5nZSgpLGY9TWF0aC5hYnMoaFsxXS1oWzBdKS9vWzBdLmxlbmd0aCpNYXRoLlBJLzE4MCxwPW4uc3ZnLmFyYygpLnN0YXJ0QW5nbGUoZnVuY3Rpb24odCl7cmV0dXJuLWYvMn0pLmVuZEFuZ2xlKGZ1bmN0aW9uKHQpe3JldHVybiBmLzJ9KS5pbm5lclJhZGl1cyhmdW5jdGlvbih0KXtyZXR1cm4gZS5yYWRpYWxTY2FsZShsKyh0WzJdfHwwKSl9KS5vdXRlclJhZGl1cyhmdW5jdGlvbih0KXtyZXR1cm4gZS5yYWRpYWxTY2FsZShsKyh0WzJdfHwwKSkrZS5yYWRpYWxTY2FsZSh0WzFdKX0pO2MuYXJjPWZ1bmN0aW9uKHQscixpKXtuLnNlbGVjdCh0aGlzKS5hdHRyKHtjbGFzczpcIm1hcmsgYXJjXCIsZDpwLHRyYW5zZm9ybTpmdW5jdGlvbih0LHIpe3JldHVyblwicm90YXRlKFwiKyhlLm9yaWVudGF0aW9uK3ModFswXSkrOTApK1wiKVwifX0pfTt2YXIgZD17ZmlsbDpmdW5jdGlvbihlLHIsbil7cmV0dXJuIHRbbl0uZGF0YS5jb2xvcn0sc3Ryb2tlOmZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdFtuXS5kYXRhLnN0cm9rZUNvbG9yfSxcInN0cm9rZS13aWR0aFwiOmZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdFtuXS5kYXRhLnN0cm9rZVNpemUrXCJweFwifSxcInN0cm9rZS1kYXNoYXJyYXlcIjpmdW5jdGlvbihlLG4saSl7cmV0dXJuIHJbdFtpXS5kYXRhLnN0cm9rZURhc2hdfSxvcGFjaXR5OmZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdFtuXS5kYXRhLm9wYWNpdHl9LGRpc3BsYXk6ZnVuY3Rpb24oZSxyLG4pe3JldHVyblwidW5kZWZpbmVkXCI9PXR5cGVvZiB0W25dLmRhdGEudmlzaWJsZXx8dFtuXS5kYXRhLnZpc2libGU/XCJibG9ja1wiOlwibm9uZVwifX0sZz1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoXCJnLmxheWVyXCIpLmRhdGEobyk7Zy5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cih7Y2xhc3M6XCJsYXllclwifSk7dmFyIHY9Zy5zZWxlY3RBbGwoXCJwYXRoLm1hcmtcIikuZGF0YShmdW5jdGlvbih0LGUpe3JldHVybiB0fSk7di5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuYXR0cih7Y2xhc3M6XCJtYXJrXCJ9KSx2LnN0eWxlKGQpLmVhY2goY1tlLmdlb21ldHJ5VHlwZV0pLHYuZXhpdCgpLnJlbW92ZSgpLGcuZXhpdCgpLnJlbW92ZSgpfSl9cmV0dXJuIGEuY29uZmlnPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlLmZvckVhY2goZnVuY3Rpb24oZSxyKXt0W3JdfHwodFtyXT17fSksaSh0W3JdLG8uUG9seUNoYXJ0LmRlZmF1bHRDb25maWcoKSksaSh0W3JdLGUpfSksdGhpcyk6dH0sYS5nZXRDb2xvclNjYWxlPWZ1bmN0aW9uKCl7fSxuLnJlYmluZChhLGUsXCJvblwiKSxhfSxvLlBvbHlDaGFydC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJue2RhdGE6e25hbWU6XCJnZW9tMVwiLHQ6W1sxLDIsMyw0XV0scjpbWzEsMiwzLDRdXSxkb3RUeXBlOlwiY2lyY2xlXCIsZG90U2l6ZTo2NCxkb3RWaXNpYmxlOiExLGJhcldpZHRoOjIwLGNvbG9yOlwiI2ZmYTUwMFwiLHN0cm9rZVNpemU6MSxzdHJva2VDb2xvcjpcInNpbHZlclwiLHN0cm9rZURhc2g6XCJzb2xpZFwiLG9wYWNpdHk6MSxpbmRleDowLHZpc2libGU6ITAsdmlzaWJsZUluTGVnZW5kOiEwfSxnZW9tZXRyeUNvbmZpZzp7Z2VvbWV0cnk6XCJMaW5lUGxvdFwiLGdlb21ldHJ5VHlwZTpcImFyY1wiLGRpcmVjdGlvbjpcImNsb2Nrd2lzZVwiLG9yaWVudGF0aW9uOjAsY29udGFpbmVyOlwiYm9keVwiLHJhZGlhbFNjYWxlOm51bGwsYW5ndWxhclNjYWxlOm51bGwsY29sb3JTY2FsZTpuLnNjYWxlLmNhdGVnb3J5MjAoKX19fSxvLkJhckNoYXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG8uUG9seUNoYXJ0KCl9LG8uQmFyQ2hhcnQuZGVmYXVsdENvbmZpZz1mdW5jdGlvbigpe3JldHVybntnZW9tZXRyeUNvbmZpZzp7Z2VvbWV0cnlUeXBlOlwiYmFyXCJ9fX0sby5BcmVhQ2hhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gby5Qb2x5Q2hhcnQoKX0sby5BcmVhQ2hhcnQuZGVmYXVsdENvbmZpZz1mdW5jdGlvbigpe3JldHVybntnZW9tZXRyeUNvbmZpZzp7Z2VvbWV0cnlUeXBlOlwiYXJjXCJ9fX0sby5Eb3RQbG90PWZ1bmN0aW9uKCl7cmV0dXJuIG8uUG9seUNoYXJ0KCl9LG8uRG90UGxvdC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJue2dlb21ldHJ5Q29uZmlnOntnZW9tZXRyeVR5cGU6XCJkb3RcIixkb3RUeXBlOlwiY2lyY2xlXCJ9fX0sby5MaW5lUGxvdD1mdW5jdGlvbigpe3JldHVybiBvLlBvbHlDaGFydCgpfSxvLkxpbmVQbG90LmRlZmF1bHRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57Z2VvbWV0cnlDb25maWc6e2dlb21ldHJ5VHlwZTpcImxpbmVcIn19fSxvLkxlZ2VuZD1mdW5jdGlvbigpe3ZhciB0PW8uTGVnZW5kLmRlZmF1bHRDb25maWcoKSxlPW4uZGlzcGF0Y2goXCJob3ZlclwiKTtmdW5jdGlvbiByKCl7dmFyIGU9dC5sZWdlbmRDb25maWcsYT10LmRhdGEubWFwKGZ1bmN0aW9uKHQscil7cmV0dXJuW10uY29uY2F0KHQpLm1hcChmdW5jdGlvbih0LG4pe3ZhciBhPWkoe30sZS5lbGVtZW50c1tyXSk7cmV0dXJuIGEubmFtZT10LGEuY29sb3I9W10uY29uY2F0KGUuZWxlbWVudHNbcl0uY29sb3IpW25dLGF9KX0pLG89bi5tZXJnZShhKTtvPW8uZmlsdGVyKGZ1bmN0aW9uKHQscil7cmV0dXJuIGUuZWxlbWVudHNbcl0mJihlLmVsZW1lbnRzW3JdLnZpc2libGVJbkxlZ2VuZHx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIGUuZWxlbWVudHNbcl0udmlzaWJsZUluTGVnZW5kKX0pLGUucmV2ZXJzZU9yZGVyJiYobz1vLnJldmVyc2UoKSk7dmFyIHM9ZS5jb250YWluZXI7KFwic3RyaW5nXCI9PXR5cGVvZiBzfHxzLm5vZGVOYW1lKSYmKHM9bi5zZWxlY3QocykpO3ZhciBsPW8ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY29sb3J9KSxjPWUuZm9udFNpemUsdT1udWxsPT1lLmlzQ29udGludW91cz9cIm51bWJlclwiPT10eXBlb2Ygb1swXTplLmlzQ29udGludW91cyxoPXU/ZS5oZWlnaHQ6YypvLmxlbmd0aCxmPXMuY2xhc3NlZChcImxlZ2VuZC1ncm91cFwiLCEwKS5zZWxlY3RBbGwoXCJzdmdcIikuZGF0YShbMF0pLHA9Zi5lbnRlcigpLmFwcGVuZChcInN2Z1wiKS5hdHRyKHt3aWR0aDozMDAsaGVpZ2h0OmgrYyx4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXCJ4bWxuczp4bGlua1wiOlwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLHZlcnNpb246XCIxLjFcIn0pO3AuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwibGVnZW5kLWF4aXNcIiwhMCkscC5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJsZWdlbmQtbWFya3NcIiwhMCk7dmFyIGQ9bi5yYW5nZShvLmxlbmd0aCksZz1uLnNjYWxlW3U/XCJsaW5lYXJcIjpcIm9yZGluYWxcIl0oKS5kb21haW4oZCkucmFuZ2UobCksdj1uLnNjYWxlW3U/XCJsaW5lYXJcIjpcIm9yZGluYWxcIl0oKS5kb21haW4oZClbdT9cInJhbmdlXCI6XCJyYW5nZVBvaW50c1wiXShbMCxoXSk7aWYodSl7dmFyIG09Zi5zZWxlY3QoXCIubGVnZW5kLW1hcmtzXCIpLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibGluZWFyR3JhZGllbnRcIikuYXR0cih7aWQ6XCJncmFkMVwiLHgxOlwiMCVcIix5MTpcIjAlXCIseDI6XCIwJVwiLHkyOlwiMTAwJVwifSkuc2VsZWN0QWxsKFwic3RvcFwiKS5kYXRhKGwpO20uZW50ZXIoKS5hcHBlbmQoXCJzdG9wXCIpLG0uYXR0cih7b2Zmc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUvKGwubGVuZ3RoLTEpKjEwMCtcIiVcIn19KS5zdHlsZSh7XCJzdG9wLWNvbG9yXCI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdH19KSxmLmFwcGVuZChcInJlY3RcIikuY2xhc3NlZChcImxlZ2VuZC1tYXJrXCIsITApLmF0dHIoe2hlaWdodDplLmhlaWdodCx3aWR0aDplLmNvbG9yQmFuZFdpZHRoLGZpbGw6XCJ1cmwoI2dyYWQxKVwifSl9ZWxzZXt2YXIgeT1mLnNlbGVjdChcIi5sZWdlbmQtbWFya3NcIikuc2VsZWN0QWxsKFwicGF0aC5sZWdlbmQtbWFya1wiKS5kYXRhKG8pO3kuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoXCJsZWdlbmQtbWFya1wiLCEwKSx5LmF0dHIoe3RyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3JldHVyblwidHJhbnNsYXRlKFwiK1tjLzIsdihlKStjLzJdK1wiKVwifSxkOmZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLG89dC5zeW1ib2w7cmV0dXJuIGE9MyooaT1jKSxcImxpbmVcIj09PShyPW8pP1wiTVwiK1tbLWkvMiwtaS8xMl0sW2kvMiwtaS8xMl0sW2kvMixpLzEyXSxbLWkvMixpLzEyXV0rXCJaXCI6LTEhPW4uc3ZnLnN5bWJvbFR5cGVzLmluZGV4T2Yocik/bi5zdmcuc3ltYm9sKCkudHlwZShyKS5zaXplKGEpKCk6bi5zdmcuc3ltYm9sKCkudHlwZShcInNxdWFyZVwiKS5zaXplKGEpKCl9LGZpbGw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZyhlKX19KSx5LmV4aXQoKS5yZW1vdmUoKX12YXIgeD1uLnN2Zy5heGlzKCkuc2NhbGUodikub3JpZW50KFwicmlnaHRcIiksYj1mLnNlbGVjdChcImcubGVnZW5kLWF4aXNcIikuYXR0cih7dHJhbnNmb3JtOlwidHJhbnNsYXRlKFwiK1t1P2UuY29sb3JCYW5kV2lkdGg6YyxjLzJdK1wiKVwifSkuY2FsbCh4KTtyZXR1cm4gYi5zZWxlY3RBbGwoXCIuZG9tYWluXCIpLnN0eWxlKHtmaWxsOlwibm9uZVwiLHN0cm9rZTpcIm5vbmVcIn0pLGIuc2VsZWN0QWxsKFwibGluZVwiKS5zdHlsZSh7ZmlsbDpcIm5vbmVcIixzdHJva2U6dT9lLnRleHRDb2xvcjpcIm5vbmVcIn0pLGIuc2VsZWN0QWxsKFwidGV4dFwiKS5zdHlsZSh7ZmlsbDplLnRleHRDb2xvcixcImZvbnQtc2l6ZVwiOmUuZm9udFNpemV9KS50ZXh0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG9bZV0ubmFtZX0pLHJ9cmV0dXJuIHIuY29uZmlnPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpKHQsZSksdGhpcyk6dH0sbi5yZWJpbmQocixlLFwib25cIikscn0sby5MZWdlbmQuZGVmYXVsdENvbmZpZz1mdW5jdGlvbih0LGUpe3JldHVybntkYXRhOltcImFcIixcImJcIixcImNcIl0sbGVnZW5kQ29uZmlnOntlbGVtZW50czpbe3N5bWJvbDpcImxpbmVcIixjb2xvcjpcInJlZFwifSx7c3ltYm9sOlwic3F1YXJlXCIsY29sb3I6XCJ5ZWxsb3dcIn0se3N5bWJvbDpcImRpYW1vbmRcIixjb2xvcjpcImxpbWVncmVlblwifV0saGVpZ2h0OjE1MCxjb2xvckJhbmRXaWR0aDozMCxmb250U2l6ZToxMixjb250YWluZXI6XCJib2R5XCIsaXNDb250aW51b3VzOm51bGwsdGV4dENvbG9yOlwiZ3JleVwiLHJldmVyc2VPcmRlcjohMX19fSxvLnRvb2x0aXBQYW5lbD1mdW5jdGlvbigpe3ZhciB0LGUscixhPXtjb250YWluZXI6bnVsbCxoYXNUaWNrOiExLGZvbnRTaXplOjEyLGNvbG9yOlwid2hpdGVcIixwYWRkaW5nOjV9LHM9XCJ0b29sdGlwLVwiK28udG9vbHRpcFBhbmVsLnVpZCsrLGw9MTAsYz1mdW5jdGlvbigpe3ZhciBuPSh0PWEuY29udGFpbmVyLnNlbGVjdEFsbChcImcuXCIrcykuZGF0YShbMF0pKS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChzLCEwKS5zdHlsZSh7XCJwb2ludGVyLWV2ZW50c1wiOlwibm9uZVwiLGRpc3BsYXk6XCJub25lXCJ9KTtyZXR1cm4gcj1uLmFwcGVuZChcInBhdGhcIikuc3R5bGUoe2ZpbGw6XCJ3aGl0ZVwiLFwiZmlsbC1vcGFjaXR5XCI6Ljl9KS5hdHRyKHtkOlwiTTAgMFwifSksZT1uLmFwcGVuZChcInRleHRcIikuYXR0cih7ZHg6YS5wYWRkaW5nK2wsZHk6LjMqK2EuZm9udFNpemV9KSxjfTtyZXR1cm4gYy50ZXh0PWZ1bmN0aW9uKGkpe3ZhciBvPW4uaHNsKGEuY29sb3IpLmwscz1vPj0uNT9cIiNhYWFcIjpcIndoaXRlXCIsdT1vPj0uNT9cImJsYWNrXCI6XCJ3aGl0ZVwiLGg9aXx8XCJcIjtlLnN0eWxlKHtmaWxsOnUsXCJmb250LXNpemVcIjphLmZvbnRTaXplK1wicHhcIn0pLnRleHQoaCk7dmFyIGY9YS5wYWRkaW5nLHA9ZS5ub2RlKCkuZ2V0QkJveCgpLGQ9e2ZpbGw6YS5jb2xvcixzdHJva2U6cyxcInN0cm9rZS13aWR0aFwiOlwiMnB4XCJ9LGc9cC53aWR0aCsyKmYrbCx2PXAuaGVpZ2h0KzIqZjtyZXR1cm4gci5hdHRyKHtkOlwiTVwiK1tbbCwtdi8yXSxbbCwtdi80XSxbYS5oYXNUaWNrPzA6bCwwXSxbbCx2LzRdLFtsLHYvMl0sW2csdi8yXSxbZywtdi8yXV0uam9pbihcIkxcIikrXCJaXCJ9KS5zdHlsZShkKSx0LmF0dHIoe3RyYW5zZm9ybTpcInRyYW5zbGF0ZShcIitbbCwtdi8yKzIqZl0rXCIpXCJ9KSx0LnN0eWxlKHtkaXNwbGF5OlwiYmxvY2tcIn0pLGN9LGMubW92ZT1mdW5jdGlvbihlKXtpZih0KXJldHVybiB0LmF0dHIoe3RyYW5zZm9ybTpcInRyYW5zbGF0ZShcIitbZVswXSxlWzFdXStcIilcIn0pLnN0eWxlKHtkaXNwbGF5OlwiYmxvY2tcIn0pLGN9LGMuaGlkZT1mdW5jdGlvbigpe2lmKHQpcmV0dXJuIHQuc3R5bGUoe2Rpc3BsYXk6XCJub25lXCJ9KSxjfSxjLnNob3c9ZnVuY3Rpb24oKXtpZih0KXJldHVybiB0LnN0eWxlKHtkaXNwbGF5OlwiYmxvY2tcIn0pLGN9LGMuY29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybiBpKGEsdCksY30sY30sby50b29sdGlwUGFuZWwudWlkPTEsby5hZGFwdGVyPXt9LG8uYWRhcHRlci5wbG90bHk9ZnVuY3Rpb24oKXt2YXIgdD17Y29udmVydDpmdW5jdGlvbih0LGUpe3ZhciByPXt9O2lmKHQuZGF0YSYmKHIuZGF0YT10LmRhdGEubWFwKGZ1bmN0aW9uKHQscil7dmFyIG49aSh7fSx0KTtyZXR1cm5bW24sW1wibWFya2VyXCIsXCJjb2xvclwiXSxbXCJjb2xvclwiXV0sW24sW1wibWFya2VyXCIsXCJvcGFjaXR5XCJdLFtcIm9wYWNpdHlcIl1dLFtuLFtcIm1hcmtlclwiLFwibGluZVwiLFwiY29sb3JcIl0sW1wic3Ryb2tlQ29sb3JcIl1dLFtuLFtcIm1hcmtlclwiLFwibGluZVwiLFwiZGFzaFwiXSxbXCJzdHJva2VEYXNoXCJdXSxbbixbXCJtYXJrZXJcIixcImxpbmVcIixcIndpZHRoXCJdLFtcInN0cm9rZVNpemVcIl1dLFtuLFtcIm1hcmtlclwiLFwic3ltYm9sXCJdLFtcImRvdFR5cGVcIl1dLFtuLFtcIm1hcmtlclwiLFwic2l6ZVwiXSxbXCJkb3RTaXplXCJdXSxbbixbXCJtYXJrZXJcIixcImJhcldpZHRoXCJdLFtcImJhcldpZHRoXCJdXSxbbixbXCJsaW5lXCIsXCJpbnRlcnBvbGF0aW9uXCJdLFtcImxpbmVJbnRlcnBvbGF0aW9uXCJdXSxbbixbXCJzaG93bGVnZW5kXCJdLFtcInZpc2libGVJbkxlZ2VuZFwiXV1dLmZvckVhY2goZnVuY3Rpb24odCxyKXtvLnV0aWwudHJhbnNsYXRvci5hcHBseShudWxsLHQuY29uY2F0KGUpKX0pLGV8fGRlbGV0ZSBuLm1hcmtlcixlJiZkZWxldGUgbi5ncm91cElkLGU/KFwiTGluZVBsb3RcIj09PW4uZ2VvbWV0cnk/KG4udHlwZT1cInNjYXR0ZXJcIiwhMD09PW4uZG90VmlzaWJsZT8oZGVsZXRlIG4uZG90VmlzaWJsZSxuLm1vZGU9XCJsaW5lcyttYXJrZXJzXCIpOm4ubW9kZT1cImxpbmVzXCIpOlwiRG90UGxvdFwiPT09bi5nZW9tZXRyeT8obi50eXBlPVwic2NhdHRlclwiLG4ubW9kZT1cIm1hcmtlcnNcIik6XCJBcmVhQ2hhcnRcIj09PW4uZ2VvbWV0cnk/bi50eXBlPVwiYXJlYVwiOlwiQmFyQ2hhcnRcIj09PW4uZ2VvbWV0cnkmJihuLnR5cGU9XCJiYXJcIiksZGVsZXRlIG4uZ2VvbWV0cnkpOihcInNjYXR0ZXJcIj09PW4udHlwZT9cImxpbmVzXCI9PT1uLm1vZGU/bi5nZW9tZXRyeT1cIkxpbmVQbG90XCI6XCJtYXJrZXJzXCI9PT1uLm1vZGU/bi5nZW9tZXRyeT1cIkRvdFBsb3RcIjpcImxpbmVzK21hcmtlcnNcIj09PW4ubW9kZSYmKG4uZ2VvbWV0cnk9XCJMaW5lUGxvdFwiLG4uZG90VmlzaWJsZT0hMCk6XCJhcmVhXCI9PT1uLnR5cGU/bi5nZW9tZXRyeT1cIkFyZWFDaGFydFwiOlwiYmFyXCI9PT1uLnR5cGUmJihuLmdlb21ldHJ5PVwiQmFyQ2hhcnRcIiksZGVsZXRlIG4ubW9kZSxkZWxldGUgbi50eXBlKSxufSksIWUmJnQubGF5b3V0JiZcInN0YWNrXCI9PT10LmxheW91dC5iYXJtb2RlKSl7dmFyIGE9by51dGlsLmR1cGxpY2F0ZXMoci5kYXRhLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0Lmdlb21ldHJ5fSkpO3IuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49YS5pbmRleE9mKHQuZ2VvbWV0cnkpOy0xIT1uJiYoci5kYXRhW2VdLmdyb3VwSWQ9bil9KX1pZih0LmxheW91dCl7dmFyIHM9aSh7fSx0LmxheW91dCk7aWYoW1tzLFtcInBsb3RfYmdjb2xvclwiXSxbXCJiYWNrZ3JvdW5kQ29sb3JcIl1dLFtzLFtcInNob3dsZWdlbmRcIl0sW1wic2hvd0xlZ2VuZFwiXV0sW3MsW1wicmFkaWFsYXhpc1wiXSxbXCJyYWRpYWxBeGlzXCJdXSxbcyxbXCJhbmd1bGFyYXhpc1wiXSxbXCJhbmd1bGFyQXhpc1wiXV0sW3MuYW5ndWxhcmF4aXMsW1wic2hvd2xpbmVcIl0sW1wiZ3JpZExpbmVzVmlzaWJsZVwiXV0sW3MuYW5ndWxhcmF4aXMsW1wic2hvd3RpY2tsYWJlbHNcIl0sW1wibGFiZWxzVmlzaWJsZVwiXV0sW3MuYW5ndWxhcmF4aXMsW1wibnRpY2tzXCJdLFtcInRpY2tzQ291bnRcIl1dLFtzLmFuZ3VsYXJheGlzLFtcInRpY2tvcmllbnRhdGlvblwiXSxbXCJ0aWNrT3JpZW50YXRpb25cIl1dLFtzLmFuZ3VsYXJheGlzLFtcInRpY2tzdWZmaXhcIl0sW1widGlja3NTdWZmaXhcIl1dLFtzLmFuZ3VsYXJheGlzLFtcInJhbmdlXCJdLFtcImRvbWFpblwiXV0sW3MuYW5ndWxhcmF4aXMsW1wiZW5kcGFkZGluZ1wiXSxbXCJlbmRQYWRkaW5nXCJdXSxbcy5yYWRpYWxheGlzLFtcInNob3dsaW5lXCJdLFtcImdyaWRMaW5lc1Zpc2libGVcIl1dLFtzLnJhZGlhbGF4aXMsW1widGlja29yaWVudGF0aW9uXCJdLFtcInRpY2tPcmllbnRhdGlvblwiXV0sW3MucmFkaWFsYXhpcyxbXCJ0aWNrc3VmZml4XCJdLFtcInRpY2tzU3VmZml4XCJdXSxbcy5yYWRpYWxheGlzLFtcInJhbmdlXCJdLFtcImRvbWFpblwiXV0sW3MuYW5ndWxhckF4aXMsW1wic2hvd2xpbmVcIl0sW1wiZ3JpZExpbmVzVmlzaWJsZVwiXV0sW3MuYW5ndWxhckF4aXMsW1wic2hvd3RpY2tsYWJlbHNcIl0sW1wibGFiZWxzVmlzaWJsZVwiXV0sW3MuYW5ndWxhckF4aXMsW1wibnRpY2tzXCJdLFtcInRpY2tzQ291bnRcIl1dLFtzLmFuZ3VsYXJBeGlzLFtcInRpY2tvcmllbnRhdGlvblwiXSxbXCJ0aWNrT3JpZW50YXRpb25cIl1dLFtzLmFuZ3VsYXJBeGlzLFtcInRpY2tzdWZmaXhcIl0sW1widGlja3NTdWZmaXhcIl1dLFtzLmFuZ3VsYXJBeGlzLFtcInJhbmdlXCJdLFtcImRvbWFpblwiXV0sW3MuYW5ndWxhckF4aXMsW1wiZW5kcGFkZGluZ1wiXSxbXCJlbmRQYWRkaW5nXCJdXSxbcy5yYWRpYWxBeGlzLFtcInNob3dsaW5lXCJdLFtcImdyaWRMaW5lc1Zpc2libGVcIl1dLFtzLnJhZGlhbEF4aXMsW1widGlja29yaWVudGF0aW9uXCJdLFtcInRpY2tPcmllbnRhdGlvblwiXV0sW3MucmFkaWFsQXhpcyxbXCJ0aWNrc3VmZml4XCJdLFtcInRpY2tzU3VmZml4XCJdXSxbcy5yYWRpYWxBeGlzLFtcInJhbmdlXCJdLFtcImRvbWFpblwiXV0sW3MuZm9udCxbXCJvdXRsaW5lY29sb3JcIl0sW1wib3V0bGluZUNvbG9yXCJdXSxbcy5sZWdlbmQsW1widHJhY2VvcmRlclwiXSxbXCJyZXZlcnNlT3JkZXJcIl1dLFtzLFtcImxhYmVsb2Zmc2V0XCJdLFtcImxhYmVsT2Zmc2V0XCJdXSxbcyxbXCJkZWZhdWx0Y29sb3JyYW5nZVwiXSxbXCJkZWZhdWx0Q29sb3JSYW5nZVwiXV1dLmZvckVhY2goZnVuY3Rpb24odCxyKXtvLnV0aWwudHJhbnNsYXRvci5hcHBseShudWxsLHQuY29uY2F0KGUpKX0pLGU/KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzLnRpY2tMZW5ndGgmJihzLmFuZ3VsYXJheGlzLnRpY2tsZW49cy50aWNrTGVuZ3RoLGRlbGV0ZSBzLnRpY2tMZW5ndGgpLHMudGlja0NvbG9yJiYocy5hbmd1bGFyYXhpcy50aWNrY29sb3I9cy50aWNrQ29sb3IsZGVsZXRlIHMudGlja0NvbG9yKSk6KHMuYW5ndWxhckF4aXMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzLmFuZ3VsYXJBeGlzLnRpY2tsZW4mJihzLnRpY2tMZW5ndGg9cy5hbmd1bGFyQXhpcy50aWNrbGVuKSxzLmFuZ3VsYXJBeGlzJiZcInVuZGVmaW5lZFwiIT10eXBlb2Ygcy5hbmd1bGFyQXhpcy50aWNrY29sb3ImJihzLnRpY2tDb2xvcj1zLmFuZ3VsYXJBeGlzLnRpY2tjb2xvcikpLHMubGVnZW5kJiZcImJvb2xlYW5cIiE9dHlwZW9mIHMubGVnZW5kLnJldmVyc2VPcmRlciYmKHMubGVnZW5kLnJldmVyc2VPcmRlcj1cIm5vcm1hbFwiIT1zLmxlZ2VuZC5yZXZlcnNlT3JkZXIpLHMubGVnZW5kJiZcImJvb2xlYW5cIj09dHlwZW9mIHMubGVnZW5kLnRyYWNlb3JkZXImJihzLmxlZ2VuZC50cmFjZW9yZGVyPXMubGVnZW5kLnRyYWNlb3JkZXI/XCJyZXZlcnNlZFwiOlwibm9ybWFsXCIsZGVsZXRlIHMubGVnZW5kLnJldmVyc2VPcmRlcikscy5tYXJnaW4mJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzLm1hcmdpbi50KXt2YXIgbD1bXCJ0XCIsXCJyXCIsXCJiXCIsXCJsXCIsXCJwYWRcIl0sYz1bXCJ0b3BcIixcInJpZ2h0XCIsXCJib3R0b21cIixcImxlZnRcIixcInBhZFwiXSx1PXt9O24uZW50cmllcyhzLm1hcmdpbikuZm9yRWFjaChmdW5jdGlvbih0LGUpe3VbY1tsLmluZGV4T2YodC5rZXkpXV09dC52YWx1ZX0pLHMubWFyZ2luPXV9ZSYmKGRlbGV0ZSBzLm5lZWRzRW5kU3BhY2luZyxkZWxldGUgcy5taW5vclRpY2tDb2xvcixkZWxldGUgcy5taW5vclRpY2tzLGRlbGV0ZSBzLmFuZ3VsYXJheGlzLnRpY2tzQ291bnQsZGVsZXRlIHMuYW5ndWxhcmF4aXMudGlja3NDb3VudCxkZWxldGUgcy5hbmd1bGFyYXhpcy50aWNrc1N0ZXAsZGVsZXRlIHMuYW5ndWxhcmF4aXMucmV3cml0ZVRpY2tzLGRlbGV0ZSBzLmFuZ3VsYXJheGlzLm50aWNrcyxkZWxldGUgcy5yYWRpYWxheGlzLnRpY2tzQ291bnQsZGVsZXRlIHMucmFkaWFsYXhpcy50aWNrc0NvdW50LGRlbGV0ZSBzLnJhZGlhbGF4aXMudGlja3NTdGVwLGRlbGV0ZSBzLnJhZGlhbGF4aXMucmV3cml0ZVRpY2tzLGRlbGV0ZSBzLnJhZGlhbGF4aXMubnRpY2tzKSxyLmxheW91dD1zfXJldHVybiByfX07cmV0dXJuIHR9fSx7XCIuLi8uLi8uLi9jb25zdGFudHMvYWxpZ25tZW50XCI6NjczLFwiLi4vLi4vLi4vbGliXCI6NzAxLGQzOjE1NX1dLDgyMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi8uLi9saWJcIiksYT10KFwiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxvPXQoXCIuL21pY3JvcG9sYXJcIikscz10KFwiLi91bmRvX21hbmFnZXJcIiksbD1pLmV4dGVuZERlZXBBbGwsYz1lLmV4cG9ydHM9e307Yy5mcmFtZXdvcms9ZnVuY3Rpb24odCl7dmFyIGUscixpLGEsdSxoPW5ldyBzO2Z1bmN0aW9uIGYocixzKXtyZXR1cm4gcyYmKHU9cyksbi5zZWxlY3Qobi5zZWxlY3QodSkubm9kZSgpLnBhcmVudE5vZGUpLnNlbGVjdEFsbChcIi5zdmctY29udGFpbmVyPio6bm90KC5jaGFydC1yb290KVwiKS5yZW1vdmUoKSxlPWU/bChlLHIpOnIsaXx8KGk9by5BeGlzKCkpLGE9by5hZGFwdGVyLnBsb3RseSgpLmNvbnZlcnQoZSksaS5jb25maWcoYSkucmVuZGVyKHUpLHQuZGF0YT1lLmRhdGEsdC5sYXlvdXQ9ZS5sYXlvdXQsYy5maWxsTGF5b3V0KHQpLGV9cmV0dXJuIGYuaXNQb2xhcj0hMCxmLnN2Zz1mdW5jdGlvbigpe3JldHVybiBpLnN2ZygpfSxmLmdldENvbmZpZz1mdW5jdGlvbigpe3JldHVybiBlfSxmLmdldExpdmVDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4gby5hZGFwdGVyLnBsb3RseSgpLmNvbnZlcnQoaS5nZXRMaXZlQ29uZmlnKCksITApfSxmLmdldExpdmVTY2FsZXM9ZnVuY3Rpb24oKXtyZXR1cm57dDppLmFuZ3VsYXJTY2FsZSgpLHI6aS5yYWRpYWxTY2FsZSgpfX0sZi5zZXRVbmRvUG9pbnQ9ZnVuY3Rpb24oKXt2YXIgdCxuLGk9dGhpcyxhPW8udXRpbC5jbG9uZUpzb24oZSk7dD1hLG49cixoLmFkZCh7dW5kbzpmdW5jdGlvbigpe24mJmkobil9LHJlZG86ZnVuY3Rpb24oKXtpKHQpfX0pLHI9by51dGlsLmNsb25lSnNvbihhKX0sZi51bmRvPWZ1bmN0aW9uKCl7aC51bmRvKCl9LGYucmVkbz1mdW5jdGlvbigpe2gucmVkbygpfSxmfSxjLmZpbGxMYXlvdXQ9ZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkuc2VsZWN0QWxsKFwiLnBsb3QtY29udGFpbmVyXCIpLHI9ZS5zZWxlY3RBbGwoXCIuc3ZnLWNvbnRhaW5lclwiKSxpPXQuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5zdmcmJnQuZnJhbWV3b3JrLnN2ZygpLG89e3dpZHRoOjgwMCxoZWlnaHQ6NjAwLHBhcGVyX2JnY29sb3I6YS5iYWNrZ3JvdW5kLF9jb250YWluZXI6ZSxfcGFwZXJkaXY6cixfcGFwZXI6aX07dC5fZnVsbExheW91dD1sKG8sdC5sYXlvdXQpfX0se1wiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uLy4uL2xpYlwiOjcwMSxcIi4vbWljcm9wb2xhclwiOjgxOSxcIi4vdW5kb19tYW5hZ2VyXCI6ODIxLGQzOjE1NX1dLDgyMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGU9W10scj0tMSxuPSExO2Z1bmN0aW9uIGkodCxlKXtyZXR1cm4gdD8obj0hMCx0W2VdKCksbj0hMSx0aGlzKTp0aGlzfXJldHVybnthZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIG4/dGhpczooZS5zcGxpY2UocisxLGUubGVuZ3RoLXIpLGUucHVzaCh0KSxyPWUubGVuZ3RoLTEsdGhpcyl9LHNldENhbGxiYWNrOmZ1bmN0aW9uKGUpe3Q9ZX0sdW5kbzpmdW5jdGlvbigpe3ZhciBuPWVbcl07cmV0dXJuIG4/KGkobixcInVuZG9cIiksci09MSx0JiZ0KG4udW5kbyksdGhpcyk6dGhpc30scmVkbzpmdW5jdGlvbigpe3ZhciBuPWVbcisxXTtyZXR1cm4gbj8oaShuLFwicmVkb1wiKSxyKz0xLHQmJnQobi5yZWRvKSx0aGlzKTp0aGlzfSxjbGVhcjpmdW5jdGlvbigpe2U9W10scj0tMX0saGFzVW5kbzpmdW5jdGlvbigpe3JldHVybi0xIT09cn0saGFzUmVkbzpmdW5jdGlvbigpe3JldHVybiByPGUubGVuZ3RoLTF9LGdldENvbW1hbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIGV9LGdldFByZXZpb3VzQ29tbWFuZDpmdW5jdGlvbigpe3JldHVybiBlW3ItMV19LGdldEluZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHJ9fX19LHt9XSw4MjI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwidGlueWNvbG9yMlwiKSxhPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxvPXQoXCIuLi8uLi9saWJcIikscz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxsPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksYz10KFwiLi4vcGxvdHNcIiksdT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksaD10KFwiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0XCIpLGY9dChcIi4vc2V0X2NvbnZlcnRcIikscD10KFwiLi4vY2FydGVzaWFuL2F1dG9yYW5nZVwiKS5kb0F1dG9SYW5nZSxkPXQoXCIuLi9jYXJ0ZXNpYW4vZHJhZ2JveFwiKSxnPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50XCIpLHY9dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIiksbT10KFwiLi4vLi4vY29tcG9uZW50cy90aXRsZXNcIikseT10KFwiLi4vY2FydGVzaWFuL3NlbGVjdFwiKS5wcmVwU2VsZWN0LHg9dChcIi4uL2NhcnRlc2lhbi9zZWxlY3RcIikuc2VsZWN0T25DbGljayxiPXQoXCIuLi9jYXJ0ZXNpYW4vc2VsZWN0XCIpLmNsZWFyU2VsZWN0LF89dChcIi4uLy4uL2xpYi9zZXRjdXJzb3JcIiksdz10KFwiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzXCIpLGs9dChcIi4uLy4uL3Bsb3RfYXBpL3N1YnJvdXRpbmVzXCIpLnJlZHJhd1JlZ2xUcmFjZXMsQT10KFwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiKS5NSURfU0hJRlQsVD10KFwiLi9jb25zdGFudHNcIiksTT10KFwiLi9oZWxwZXJzXCIpLFM9by5fLEU9by5tb2QsQz1vLmRlZzJyYWQsTD1vLnJhZDJkZWc7ZnVuY3Rpb24geih0LGUpe3RoaXMuaWQ9ZSx0aGlzLmdkPXQsdGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPW51bGwsdGhpcy52YW5nbGVzPW51bGwsdGhpcy5yYWRpYWxBeGlzQW5nbGU9bnVsbCx0aGlzLnRyYWNlSGFzaD17fSx0aGlzLmxheWVycz17fSx0aGlzLmNsaXBQYXRocz17fSx0aGlzLmNsaXBJZHM9e30sdGhpcy52aWV3SW5pdGlhbD17fTt2YXIgcj10Ll9mdWxsTGF5b3V0LG49XCJjbGlwXCIrci5fdWlkK2U7dGhpcy5jbGlwSWRzLmZvclRyYWNlcz1uK1wiLWZvci10cmFjZXNcIix0aGlzLmNsaXBQYXRocy5mb3JUcmFjZXM9ci5fY2xpcHMuYXBwZW5kKFwiY2xpcFBhdGhcIikuYXR0cihcImlkXCIsdGhpcy5jbGlwSWRzLmZvclRyYWNlcyksdGhpcy5jbGlwUGF0aHMuZm9yVHJhY2VzLmFwcGVuZChcInBhdGhcIiksdGhpcy5mcmFtZXdvcms9ci5fcG9sYXJsYXllci5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLGUpLHRoaXMucmFkaWFsVGlja0xheW91dD1udWxsLHRoaXMuYW5ndWxhclRpY2tMYXlvdXQ9bnVsbH12YXIgTz16LnByb3RvdHlwZTtmdW5jdGlvbiBJKHQpe3ZhciBlPXQudGlja3MrU3RyaW5nKHQudGlja2xlbikrU3RyaW5nKHQuc2hvd3RpY2tsYWJlbHMpO3JldHVyblwic2lkZVwiaW4gdCYmKGUrPXQuc2lkZSksZX1mdW5jdGlvbiBEKHQsZSl7cmV0dXJuIGVbby5maW5kSW5kZXhPZk1pbihlLGZ1bmN0aW9uKGUpe3JldHVybiBvLmFuZ2xlRGlzdCh0LGUpfSldfWZ1bmN0aW9uIFAodCxlLHIpe3JldHVybiBlPyh0LmF0dHIoXCJkaXNwbGF5XCIsbnVsbCksdC5hdHRyKHIpKTp0JiZ0LmF0dHIoXCJkaXNwbGF5XCIsXCJub25lXCIpLHR9ZnVuY3Rpb24gUih0LGUpe3JldHVyblwidHJhbnNsYXRlKFwiK3QrXCIsXCIrZStcIilcIn1mdW5jdGlvbiBGKHQpe3JldHVyblwicm90YXRlKFwiK3QrXCIpXCJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyB6KHQsZSl9LE8ucGxvdD1mdW5jdGlvbih0LGUpe3ZhciByPWVbdGhpcy5pZF07dGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPSExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXtpZighMT09PXRbbl1bMF0udHJhY2UuY2xpcG9uYXhpcyl7dGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPSEwO2JyZWFrfX10aGlzLnVwZGF0ZUxheWVycyhlLHIpLHRoaXMudXBkYXRlTGF5b3V0KGUsciksYy5nZW5lcmFsVXBkYXRlUGVyVHJhY2VNb2R1bGUodGhpcy5nZCx0aGlzLHQsciksdGhpcy51cGRhdGVGeChlLHIpfSxPLnVwZGF0ZUxheWVycz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGF5ZXJzLGk9ZS5yYWRpYWxheGlzLGE9ZS5hbmd1bGFyYXhpcyxvPVQubGF5ZXJOYW1lcyxzPW8uaW5kZXhPZihcImZyb250cGxvdFwiKSxsPW8uc2xpY2UoMCxzKSxjPVwiYmVsb3cgdHJhY2VzXCI9PT1hLmxheWVyLHU9XCJiZWxvdyB0cmFjZXNcIj09PWkubGF5ZXI7YyYmbC5wdXNoKFwiYW5ndWxhci1saW5lXCIpLHUmJmwucHVzaChcInJhZGlhbC1saW5lXCIpLGMmJmwucHVzaChcImFuZ3VsYXItYXhpc1wiKSx1JiZsLnB1c2goXCJyYWRpYWwtYXhpc1wiKSxsLnB1c2goXCJmcm9udHBsb3RcIiksY3x8bC5wdXNoKFwiYW5ndWxhci1saW5lXCIpLHV8fGwucHVzaChcInJhZGlhbC1saW5lXCIpLGN8fGwucHVzaChcImFuZ3VsYXItYXhpc1wiKSx1fHxsLnB1c2goXCJyYWRpYWwtYXhpc1wiKTt2YXIgaD10aGlzLmZyYW1ld29yay5zZWxlY3RBbGwoXCIucG9sYXJzdWJsYXllclwiKS5kYXRhKGwsU3RyaW5nKTtoLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIixmdW5jdGlvbih0KXtyZXR1cm5cInBvbGFyc3VibGF5ZXIgXCIrdH0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9clt0XT1uLnNlbGVjdCh0aGlzKTtzd2l0Y2godCl7Y2FzZVwiZnJvbnRwbG90XCI6ZS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJiYXJsYXllclwiLCEwKSxlLmFwcGVuZChcImdcIikuY2xhc3NlZChcInNjYXR0ZXJsYXllclwiLCEwKTticmVhaztjYXNlXCJiYWNrcGxvdFwiOmUuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwibWFwbGF5ZXJcIiwhMCk7YnJlYWs7Y2FzZVwicGxvdGJnXCI6ci5iZz1lLmFwcGVuZChcInBhdGhcIik7YnJlYWs7Y2FzZVwicmFkaWFsLWdyaWRcIjpjYXNlXCJhbmd1bGFyLWdyaWRcIjplLnN0eWxlKFwiZmlsbFwiLFwibm9uZVwiKTticmVhaztjYXNlXCJyYWRpYWwtbGluZVwiOmUuYXBwZW5kKFwibGluZVwiKS5zdHlsZShcImZpbGxcIixcIm5vbmVcIik7YnJlYWs7Y2FzZVwiYW5ndWxhci1saW5lXCI6ZS5hcHBlbmQoXCJwYXRoXCIpLnN0eWxlKFwiZmlsbFwiLFwibm9uZVwiKX19KSxoLm9yZGVyKCl9LE8udXBkYXRlTGF5b3V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sYXllcnMsbj10Ll9zaXplLGk9ZS5yYWRpYWxheGlzLGE9ZS5hbmd1bGFyYXhpcyxvPWUuZG9tYWluLngsYz1lLmRvbWFpbi55O3RoaXMueE9mZnNldD1uLmwrbi53Km9bMF0sdGhpcy55T2Zmc2V0PW4udCtuLmgqKDEtY1sxXSk7dmFyIHU9dGhpcy54TGVuZ3RoPW4udyoob1sxXS1vWzBdKSxoPXRoaXMueUxlbmd0aD1uLmgqKGNbMV0tY1swXSksZj1lLnNlY3Rvcjt0aGlzLnNlY3RvckluUmFkPWYubWFwKEMpO3ZhciBwLGQsZyx2LG0seT10aGlzLnNlY3RvckJCb3g9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYT10WzBdLG89dFsxXS1hLHM9RShhLDM2MCksbD1zK28sYz1NYXRoLmNvcyhDKHMpKSx1PU1hdGguc2luKEMocykpLGg9TWF0aC5jb3MoQyhsKSksZj1NYXRoLnNpbihDKGwpKTtpPXM8PTkwJiZsPj05MHx8cz45MCYmbD49NDUwPzE6dTw9MCYmZjw9MD8wOk1hdGgubWF4KHUsZik7ZT1zPD0xODAmJmw+PTE4MHx8cz4xODAmJmw+PTU0MD8tMTpjPj0wJiZoPj0wPzA6TWF0aC5taW4oYyxoKTtyPXM8PTI3MCYmbD49MjcwfHxzPjI3MCYmbD49NjMwPy0xOnU+PTAmJmY+PTA/MDpNYXRoLm1pbih1LGYpO249bD49MzYwPzE6Yzw9MCYmaDw9MD8wOk1hdGgubWF4KGMsaCk7cmV0dXJuW2UscixuLGldfShmKSx4PXlbMl0teVswXSxiPXlbM10teVsxXSxfPWgvdSx3PU1hdGguYWJzKGIveCk7Xz53PyhwPXUsbT0oaC0oZD11KncpKS9uLmgvMixnPVtvWzBdLG9bMV1dLHY9W2NbMF0rbSxjWzFdLW1dKTooZD1oLG09KHUtKHA9aC93KSkvbi53LzIsZz1bb1swXSttLG9bMV0tbV0sdj1bY1swXSxjWzFdXSksdGhpcy54TGVuZ3RoMj1wLHRoaXMueUxlbmd0aDI9ZCx0aGlzLnhEb21haW4yPWcsdGhpcy55RG9tYWluMj12O3ZhciBrPXRoaXMueE9mZnNldDI9bi5sK24udypnWzBdLEE9dGhpcy55T2Zmc2V0Mj1uLnQrbi5oKigxLXZbMV0pLFQ9dGhpcy5yYWRpdXM9cC94LE09dGhpcy5pbm5lclJhZGl1cz1lLmhvbGUqVCxTPXRoaXMuY3g9ay1UKnlbMF0sTD10aGlzLmN5PUErVCp5WzNdLHo9dGhpcy5jeHg9Uy1rLE89dGhpcy5jeXk9TC1BO3RoaXMucmFkaWFsQXhpcz10aGlzLm1vY2tBeGlzKHQsZSxpLHtfaWQ6XCJ4XCIsc2lkZTp7Y291bnRlcmNsb2Nrd2lzZTpcInRvcFwiLGNsb2Nrd2lzZTpcImJvdHRvbVwifVtpLnNpZGVdLGRvbWFpbjpbTS9uLncsVC9uLnddfSksdGhpcy5hbmd1bGFyQXhpcz10aGlzLm1vY2tBeGlzKHQsZSxhLHtzaWRlOlwicmlnaHRcIixkb21haW46WzAsTWF0aC5QSV0sYXV0b3JhbmdlOiExfSksdGhpcy5kb0F1dG9SYW5nZSh0LGUpLHRoaXMudXBkYXRlQW5ndWxhckF4aXModCxlKSx0aGlzLnVwZGF0ZVJhZGlhbEF4aXModCxlKSx0aGlzLnVwZGF0ZVJhZGlhbEF4aXNUaXRsZSh0LGUpLHRoaXMueGF4aXM9dGhpcy5tb2NrQ2FydGVzaWFuQXhpcyh0LGUse19pZDpcInhcIixkb21haW46Z30pLHRoaXMueWF4aXM9dGhpcy5tb2NrQ2FydGVzaWFuQXhpcyh0LGUse19pZDpcInlcIixkb21haW46dn0pO3ZhciBJPXRoaXMucGF0aFN1YnBsb3QoKTt0aGlzLmNsaXBQYXRocy5mb3JUcmFjZXMuc2VsZWN0KFwicGF0aFwiKS5hdHRyKFwiZFwiLEkpLmF0dHIoXCJ0cmFuc2Zvcm1cIixSKHosTykpLHIuZnJvbnRwbG90LmF0dHIoXCJ0cmFuc2Zvcm1cIixSKGssQSkpLmNhbGwobC5zZXRDbGlwVXJsLHRoaXMuX2hhc0NsaXBPbkF4aXNGYWxzZT9udWxsOnRoaXMuY2xpcElkcy5mb3JUcmFjZXMsdGhpcy5nZCksci5iZy5hdHRyKFwiZFwiLEkpLmF0dHIoXCJ0cmFuc2Zvcm1cIixSKFMsTCkpLmNhbGwocy5maWxsLGUuYmdjb2xvcil9LE8ubW9ja0F4aXM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9by5leHRlbmRGbGF0KHthbmNob3I6XCJmcmVlXCIscG9zaXRpb246MH0scixuKTtyZXR1cm4gZihpLGUsdCksaX0sTy5tb2NrQ2FydGVzaWFuQXhpcz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcyxpPXIuX2lkLGE9by5leHRlbmRGbGF0KHt0eXBlOlwibGluZWFyXCJ9LHIpO2goYSx0KTt2YXIgcz17eDpbMCwyXSx5OlsxLDNdfTtyZXR1cm4gYS5zZXRSYW5nZT1mdW5jdGlvbigpe3ZhciB0PW4uc2VjdG9yQkJveCxyPXNbaV0sbz1uLnJhZGlhbEF4aXMuX3JsLGw9KG9bMV0tb1swXSkvKDEtZS5ob2xlKTthLnJhbmdlPVt0W3JbMF1dKmwsdFtyWzFdXSpsXX0sYS5pc1B0V2l0aGluUmFuZ2U9XCJ4XCI9PT1pP2Z1bmN0aW9uKHQpe3JldHVybiBuLmlzUHRJbnNpZGUodCl9OmZ1bmN0aW9uKCl7cmV0dXJuITB9LGEuc2V0UmFuZ2UoKSxhLnNldFNjYWxlKCksYX0sTy5kb0F1dG9SYW5nZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2Qsbj10aGlzLnJhZGlhbEF4aXMsaT1lLnJhZGlhbGF4aXM7bi5zZXRTY2FsZSgpLHAocixuKTt2YXIgYT1uLnJhbmdlO2kucmFuZ2U9YS5zbGljZSgpLGkuX2lucHV0LnJhbmdlPWEuc2xpY2UoKSxuLl9ybD1bbi5yMmwoYVswXSxudWxsLFwiZ3JlZ29yaWFuXCIpLG4ucjJsKGFbMV0sbnVsbCxcImdyZWdvcmlhblwiKV19LE8udXBkYXRlUmFkaWFsQXhpcz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj1yLmdkLGk9ci5sYXllcnMsYT1yLnJhZGl1cyxsPXIuaW5uZXJSYWRpdXMsYz1yLmN4LGg9ci5jeSxmPWUucmFkaWFsYXhpcyxwPUUoZS5zZWN0b3JbMF0sMzYwKSxkPXIucmFkaWFsQXhpcyxnPWw8YTtyLmZpbGxWaWV3SW5pdGlhbEtleShcInJhZGlhbGF4aXMuYW5nbGVcIixmLmFuZ2xlKSxyLmZpbGxWaWV3SW5pdGlhbEtleShcInJhZGlhbGF4aXMucmFuZ2VcIixkLnJhbmdlLnNsaWNlKCkpLGQuc2V0R2VvbWV0cnkoKSxcImF1dG9cIj09PWQudGlja2FuZ2xlJiZwPjkwJiZwPD0yNzAmJihkLnRpY2thbmdsZT0xODApO3ZhciB2PWZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKFwiKyhkLmwycCh0LngpK2wpK1wiLDApXCJ9LG09SShmKTtpZihyLnJhZGlhbFRpY2tMYXlvdXQhPT1tJiYoaVtcInJhZGlhbC1heGlzXCJdLnNlbGVjdEFsbChcIi54dGlja1wiKS5yZW1vdmUoKSxyLnJhZGlhbFRpY2tMYXlvdXQ9bSksZyl7ZC5zZXRTY2FsZSgpO3ZhciB5PXUuY2FsY1RpY2tzKGQpLHg9dS5jbGlwRW5kcyhkLHkpLGI9dS5nZXRUaWNrU2lnbnMoZClbMl07dS5kcmF3VGlja3MobixkLHt2YWxzOnksbGF5ZXI6aVtcInJhZGlhbC1heGlzXCJdLHBhdGg6dS5tYWtlVGlja1BhdGgoZCwwLGIpLHRyYW5zRm46dixjcmlzcDohMX0pLHUuZHJhd0dyaWQobixkLHt2YWxzOngsbGF5ZXI6aVtcInJhZGlhbC1ncmlkXCJdLHBhdGg6ZnVuY3Rpb24odCl7cmV0dXJuIHIucGF0aEFyYyhkLnIycCh0LngpK2wpfSx0cmFuc0ZuOm8ubm9vcCxjcmlzcDohMX0pLHUuZHJhd0xhYmVscyhuLGQse3ZhbHM6eSxsYXllcjppW1wicmFkaWFsLWF4aXNcIl0sdHJhbnNGbjp2LGxhYmVsRm5zOnUubWFrZUxhYmVsRm5zKGQsMCl9KX12YXIgXz1yLnJhZGlhbEF4aXNBbmdsZT1yLnZhbmdsZXM/TChEKEMoZi5hbmdsZSksci52YW5nbGVzKSk6Zi5hbmdsZSx3PVIoYyxoKSxrPXcrRigtXyk7UChpW1wicmFkaWFsLWF4aXNcIl0sZyYmKGYuc2hvd3RpY2tsYWJlbHN8fGYudGlja3MpLHt0cmFuc2Zvcm06a30pLFAoaVtcInJhZGlhbC1ncmlkXCJdLGcmJmYuc2hvd2dyaWQse3RyYW5zZm9ybTp3fSksUChpW1wicmFkaWFsLWxpbmVcIl0uc2VsZWN0KFwibGluZVwiKSxnJiZmLnNob3dsaW5lLHt4MTpsLHkxOjAseDI6YSx5MjowLHRyYW5zZm9ybTprfSkuYXR0cihcInN0cm9rZS13aWR0aFwiLGYubGluZXdpZHRoKS5jYWxsKHMuc3Ryb2tlLGYubGluZWNvbG9yKX0sTy51cGRhdGVSYWRpYWxBeGlzVGl0bGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuZ2QsaT10aGlzLnJhZGl1cyxhPXRoaXMuY3gsbz10aGlzLmN5LHM9ZS5yYWRpYWxheGlzLGM9dGhpcy5pZCtcInRpdGxlXCIsdT12b2lkIDAhPT1yP3I6dGhpcy5yYWRpYWxBeGlzQW5nbGUsaD1DKHUpLGY9TWF0aC5jb3MoaCkscD1NYXRoLnNpbihoKSxkPTA7aWYocy50aXRsZSl7dmFyIGc9bC5iQm94KHRoaXMubGF5ZXJzW1wicmFkaWFsLWF4aXNcIl0ubm9kZSgpKS5oZWlnaHQsdj1zLnRpdGxlLmZvbnQuc2l6ZTtkPVwiY291bnRlcmNsb2Nrd2lzZVwiPT09cy5zaWRlPy1nLS40KnY6ZysuOCp2fXRoaXMubGF5ZXJzW1wicmFkaWFsLWF4aXMtdGl0bGVcIl09bS5kcmF3KG4sYyx7cHJvcENvbnRhaW5lcjpzLHByb3BOYW1lOnRoaXMuaWQrXCIucmFkaWFsYXhpcy50aXRsZVwiLHBsYWNlaG9sZGVyOlMobixcIkNsaWNrIHRvIGVudGVyIHJhZGlhbCBheGlzIHRpdGxlXCIpLGF0dHJpYnV0ZXM6e3g6YStpLzIqZitkKnAseTpvLWkvMipwK2QqZixcInRleHQtYW5jaG9yXCI6XCJtaWRkbGVcIn0sdHJhbnNmb3JtOntyb3RhdGU6LXV9fSl9LE8udXBkYXRlQW5ndWxhckF4aXM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49ci5nZCxpPXIubGF5ZXJzLGE9ci5yYWRpdXMsbD1yLmlubmVyUmFkaXVzLGM9ci5jeCxoPXIuY3ksZj1lLmFuZ3VsYXJheGlzLHA9ci5hbmd1bGFyQXhpcztyLmZpbGxWaWV3SW5pdGlhbEtleShcImFuZ3VsYXJheGlzLnJvdGF0aW9uXCIsZi5yb3RhdGlvbikscC5zZXRHZW9tZXRyeSgpLHAuc2V0U2NhbGUoKTt2YXIgZD1mdW5jdGlvbih0KXtyZXR1cm4gcC50MmcodC54KX07XCJsaW5lYXJcIj09PXAudHlwZSYmXCJyYWRpYW5zXCI9PT1wLnRoZXRhdW5pdCYmKHAudGljazA9TChwLnRpY2swKSxwLmR0aWNrPUwocC5kdGljaykpO3ZhciBnPWZ1bmN0aW9uKHQpe3JldHVybiBSKGMrYSpNYXRoLmNvcyh0KSxoLWEqTWF0aC5zaW4odCkpfSx2PXUubWFrZUxhYmVsRm5zKHAsMCkubGFiZWxTdGFuZG9mZixtPXt4Rm46ZnVuY3Rpb24odCl7dmFyIGU9ZCh0KTtyZXR1cm4gTWF0aC5jb3MoZSkqdn0seUZuOmZ1bmN0aW9uKHQpe3ZhciBlPWQodCkscj1NYXRoLnNpbihlKT4wPy4yOjE7cmV0dXJuLU1hdGguc2luKGUpKih2K3QuZm9udFNpemUqcikrTWF0aC5hYnMoTWF0aC5jb3MoZSkpKih0LmZvbnRTaXplKkEpfSxhbmNob3JGbjpmdW5jdGlvbih0KXt2YXIgZT1kKHQpLHI9TWF0aC5jb3MoZSk7cmV0dXJuIE1hdGguYWJzKHIpPC4xP1wibWlkZGxlXCI6cj4wP1wic3RhcnRcIjpcImVuZFwifSxoZWlnaHRGbjpmdW5jdGlvbih0LGUscil7dmFyIG49ZCh0KTtyZXR1cm4tLjUqKDErTWF0aC5zaW4obikpKnJ9fSx5PUkoZik7ci5hbmd1bGFyVGlja0xheW91dCE9PXkmJihpW1wiYW5ndWxhci1heGlzXCJdLnNlbGVjdEFsbChcIi5cIitwLl9pZCtcInRpY2tcIikucmVtb3ZlKCksci5hbmd1bGFyVGlja0xheW91dD15KTt2YXIgeCxiPXUuY2FsY1RpY2tzKHApO2lmKFwibGluZWFyXCI9PT1lLmdyaWRzaGFwZT8oeD1iLm1hcChkKSxvLmFuZ2xlRGVsdGEoeFswXSx4WzFdKTwwJiYoeD14LnNsaWNlKCkucmV2ZXJzZSgpKSk6eD1udWxsLHIudmFuZ2xlcz14LFwiY2F0ZWdvcnlcIj09PXAudHlwZSYmKGI9Yi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIG8uaXNBbmdsZUluc2lkZVNlY3RvcihkKHQpLHIuc2VjdG9ySW5SYWQpfSkpLHAudmlzaWJsZSl7dmFyIF89XCJpbnNpZGVcIj09PXAudGlja3M/LTE6MSx3PShwLmxpbmV3aWR0aHx8MSkvMjt1LmRyYXdUaWNrcyhuLHAse3ZhbHM6YixsYXllcjppW1wiYW5ndWxhci1heGlzXCJdLHBhdGg6XCJNXCIrXyp3K1wiLDBoXCIrXypwLnRpY2tsZW4sdHJhbnNGbjpmdW5jdGlvbih0KXt2YXIgZT1kKHQpO3JldHVybiBnKGUpK0YoLUwoZSkpfSxjcmlzcDohMX0pLHUuZHJhd0dyaWQobixwLHt2YWxzOmIsbGF5ZXI6aVtcImFuZ3VsYXItZ3JpZFwiXSxwYXRoOmZ1bmN0aW9uKHQpe3ZhciBlPWQodCkscj1NYXRoLmNvcyhlKSxuPU1hdGguc2luKGUpO3JldHVyblwiTVwiK1tjK2wqcixoLWwqbl0rXCJMXCIrW2MrYSpyLGgtYSpuXX0sdHJhbnNGbjpvLm5vb3AsY3Jpc3A6ITF9KSx1LmRyYXdMYWJlbHMobixwLHt2YWxzOmIsbGF5ZXI6aVtcImFuZ3VsYXItYXhpc1wiXSxyZXBvc2l0aW9uT25VcGRhdGU6ITAsdHJhbnNGbjpmdW5jdGlvbih0KXtyZXR1cm4gZyhkKHQpKX0sbGFiZWxGbnM6bX0pfVAoaVtcImFuZ3VsYXItbGluZVwiXS5zZWxlY3QoXCJwYXRoXCIpLGYuc2hvd2xpbmUse2Q6ci5wYXRoU3VicGxvdCgpLHRyYW5zZm9ybTpSKGMsaCl9KS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsZi5saW5ld2lkdGgpLmNhbGwocy5zdHJva2UsZi5saW5lY29sb3IpfSxPLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQsZSl7dGhpcy5nZC5fY29udGV4dC5zdGF0aWNQbG90fHwodGhpcy51cGRhdGVBbmd1bGFyRHJhZyh0KSx0aGlzLnVwZGF0ZVJhZGlhbERyYWcodCxlLDApLHRoaXMudXBkYXRlUmFkaWFsRHJhZyh0LGUsMSksdGhpcy51cGRhdGVNYWluRHJhZyh0KSl9LE8udXBkYXRlTWFpbkRyYWc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZ2Qsbz1lLmxheWVycyxzPXQuX3pvb21sYXllcixsPVQuTUlOWk9PTSxjPVQuT0ZGRURHRSx1PWUucmFkaXVzLGg9ZS5pbm5lclJhZGl1cyxmPWUuY3gscD1lLmN5LG09ZS5jeHgsXz1lLmN5eSx3PWUuc2VjdG9ySW5SYWQsaz1lLnZhbmdsZXMsQT1lLnJhZGlhbEF4aXMsUz1NLmNsYW1wVGlueSxFPU0uZmluZFhZYXRMZW5ndGgsQz1NLmZpbmRFbmNsb3NpbmdWZXJ0ZXhBbmdsZXMsTD1ULmNvcm5lckhhbGZXaWR0aCx6PVQuY29ybmVyTGVuLzIsTz1kLm1ha2VEcmFnZ2VyKG8sXCJwYXRoXCIsXCJtYWluZHJhZ1wiLFwiY3Jvc3NoYWlyXCIpO24uc2VsZWN0KE8pLmF0dHIoXCJkXCIsZS5wYXRoU3VicGxvdCgpKS5hdHRyKFwidHJhbnNmb3JtXCIsUihmLHApKTt2YXIgSSxELFAsRixCLE4saixWLFUscT17ZWxlbWVudDpPLGdkOnIsc3VicGxvdDplLmlkLHBsb3RpbmZvOntpZDplLmlkLHhheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpc30seGF4ZXM6W2UueGF4aXNdLHlheGVzOltlLnlheGlzXX07ZnVuY3Rpb24gSCh0LGUpe3JldHVybiBNYXRoLnNxcnQodCp0K2UqZSl9ZnVuY3Rpb24gRyh0LGUpe3JldHVybiBIKHQtbSxlLV8pfWZ1bmN0aW9uIFkodCxlKXtyZXR1cm4gTWF0aC5hdGFuMihfLWUsdC1tKX1mdW5jdGlvbiBXKHQsZSl7cmV0dXJuW3QqTWF0aC5jb3MoZSksdCpNYXRoLnNpbigtZSldfWZ1bmN0aW9uIFgodCxyKXtpZigwPT09dClyZXR1cm4gZS5wYXRoU2VjdG9yKDIqTCk7dmFyIG49ei90LGk9ci1uLGE9cituLG89TWF0aC5tYXgoMCxNYXRoLm1pbih0LHUpKSxzPW8tTCxsPW8rTDtyZXR1cm5cIk1cIitXKHMsaSkrXCJBXCIrW3Msc10rXCIgMCwwLDAgXCIrVyhzLGEpK1wiTFwiK1cobCxhKStcIkFcIitbbCxsXStcIiAwLDAsMSBcIitXKGwsaSkrXCJaXCJ9ZnVuY3Rpb24gWih0LHIsbil7aWYoMD09PXQpcmV0dXJuIGUucGF0aFNlY3RvcigyKkwpO3ZhciBpLGEsbz1XKHQscikscz1XKHQsbiksbD1TKChvWzBdK3NbMF0pLzIpLGM9Uygob1sxXStzWzFdKS8yKTtpZihsJiZjKXt2YXIgdT1jL2wsaD0tMS91LGY9RShMLHUsbCxjKTtpPUUoeixoLGZbMF1bMF0sZlswXVsxXSksYT1FKHosaCxmWzFdWzBdLGZbMV1bMV0pfWVsc2V7dmFyIHAsZDtjPyhwPXosZD1MKToocD1MLGQ9eiksaT1bW2wtcCxjLWRdLFtsK3AsYy1kXV0sYT1bW2wtcCxjK2RdLFtsK3AsYytkXV19cmV0dXJuXCJNXCIraS5qb2luKFwiTFwiKStcIkxcIithLnJldmVyc2UoKS5qb2luKFwiTFwiKStcIlpcIn1mdW5jdGlvbiAkKHQsZSl7cmV0dXJuIGU9TWF0aC5tYXgoTWF0aC5taW4oZSx1KSxoKSx0PGM/dD0wOnUtdDxjP3Q9dTplPGM/ZT0wOnUtZTxjJiYoZT11KSxNYXRoLmFicyhlLXQpPmw/KHQ8ZT8oUD10LEY9ZSk6KFA9ZSxGPXQpLCEwKTooUD1udWxsLEY9bnVsbCwhMSl9ZnVuY3Rpb24gSih0LGUpe3Q9dHx8QixlPWV8fFwiTTAsMFpcIixWLmF0dHIoXCJkXCIsdCksVS5hdHRyKFwiZFwiLGUpLGQudHJhbnNpdGlvblpvb21ib3goVixVLE4saiksTj0hMH1mdW5jdGlvbiBLKHQscil7dmFyIG4saSxhPUkrdCxvPUQrcixzPUcoSSxEKSxsPU1hdGgubWluKEcoYSxvKSx1KSxjPVkoSSxEKTskKHMsbCkmJihuPUIrZS5wYXRoU2VjdG9yKEYpLFAmJihuKz1lLnBhdGhTZWN0b3IoUCkpLGk9WChQLGMpK1goRixjKSksSihuLGkpfWZ1bmN0aW9uIFEodCxlLHIsbil7dmFyIGk9TS5maW5kSW50ZXJzZWN0aW9uWFkocixuLHIsW3QtbSxfLWVdKTtyZXR1cm4gSChpWzBdLGlbMV0pfWZ1bmN0aW9uIHR0KHQscil7dmFyIG4saSxhPUkrdCxvPUQrcixzPVkoSSxEKSxsPVkoYSxvKSxjPUMocyxrKSxoPUMobCxrKTskKFEoSSxELGNbMF0sY1sxXSksTWF0aC5taW4oUShhLG8saFswXSxoWzFdKSx1KSkmJihuPUIrZS5wYXRoU2VjdG9yKEYpLFAmJihuKz1lLnBhdGhTZWN0b3IoUCkpLGk9W1ooUCxjWzBdLGNbMV0pLFooRixjWzBdLGNbMV0pXS5qb2luKFwiIFwiKSksSihuLGkpfWZ1bmN0aW9uIGV0KCl7aWYoZC5yZW1vdmVab29tYm94KHIpLG51bGwhPT1QJiZudWxsIT09Ril7ZC5zaG93RG91YmxlQ2xpY2tOb3RpZmllcihyKTt2YXIgdD1BLl9ybCxuPSh0WzFdLXRbMF0pLygxLWgvdSkvdSxpPVt0WzBdKyhQLWgpKm4sdFswXSsoRi1oKSpuXTthLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIixyLGUuaWQrXCIucmFkaWFsYXhpcy5yYW5nZVwiLGkpfX1mdW5jdGlvbiBydCh0LG4pe3ZhciBpPXIuX2Z1bGxMYXlvdXQuY2xpY2ttb2RlO2lmKGQucmVtb3ZlWm9vbWJveChyKSwyPT09dCl7dmFyIG89e307Zm9yKHZhciBzIGluIGUudmlld0luaXRpYWwpb1tlLmlkK1wiLlwiK3NdPWUudmlld0luaXRpYWxbc107ci5lbWl0KFwicGxvdGx5X2RvdWJsZWNsaWNrXCIsbnVsbCksYS5jYWxsKFwiX2d1aVJlbGF5b3V0XCIscixvKX1pLmluZGV4T2YoXCJzZWxlY3RcIik+LTEmJjE9PT10JiZ4KG4scixbZS54YXhpc10sW2UueWF4aXNdLGUuaWQscSksaS5pbmRleE9mKFwiZXZlbnRcIik+LTEmJnYuY2xpY2socixuLGUuaWQpfXEucHJlcEZuPWZ1bmN0aW9uKHQsbixhKXt2YXIgbz1yLl9mdWxsTGF5b3V0LmRyYWdtb2RlLGw9Ty5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihJPW4tbC5sZWZ0LEQ9YS1sLnRvcCxrKXt2YXIgYz1NLmZpbmRQb2x5Z29uT2Zmc2V0KHUsd1swXSx3WzFdLGspO0krPW0rY1swXSxEKz1fK2NbMV19c3dpdGNoKG8pe2Nhc2VcInpvb21cIjpxLm1vdmVGbj1rP3R0OksscS5jbGlja0ZuPXJ0LHEuZG9uZUZuPWV0LGZ1bmN0aW9uKCl7UD1udWxsLEY9bnVsbCxCPWUucGF0aFN1YnBsb3QoKSxOPSExO3ZhciB0PXIuX2Z1bGxMYXlvdXRbZS5pZF07aj1pKHQuYmdjb2xvcikuZ2V0THVtaW5hbmNlKCksKFY9ZC5tYWtlWm9vbWJveChzLGosZixwLEIpKS5hdHRyKFwiZmlsbC1ydWxlXCIsXCJldmVub2RkXCIpLFU9ZC5tYWtlQ29ybmVycyhzLGYscCksYihyKX0oKTticmVhaztjYXNlXCJzZWxlY3RcIjpjYXNlXCJsYXNzb1wiOnkodCxuLGEscSxvKX19LE8ub25tb3VzZW1vdmU9ZnVuY3Rpb24odCl7di5ob3ZlcihyLHQsZS5pZCksci5fZnVsbExheW91dC5fbGFzdGhvdmVyPU8sci5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PWUuaWR9LE8ub25tb3VzZW91dD1mdW5jdGlvbih0KXtyLl9kcmFnZ2luZ3x8Zy51bmhvdmVyKHIsdCl9LGcuaW5pdChxKX0sTy51cGRhdGVSYWRpYWxEcmFnPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLHM9aS5nZCxsPWkubGF5ZXJzLGM9aS5yYWRpdXMsdT1pLmlubmVyUmFkaXVzLGg9aS5jeCxmPWkuY3kscD1pLnJhZGlhbEF4aXMsdj1ULnJhZGlhbERyYWdCb3hTaXplLG09di8yO2lmKHAudmlzaWJsZSl7dmFyIHkseCxfLEE9QyhpLnJhZGlhbEF4aXNBbmdsZSksTT1wLl9ybCxTPU1bMF0sRT1NWzFdLHo9TVtyXSxPPS43NSooTVsxXS1NWzBdKS8oMS1lLmhvbGUpL2M7cj8oeT1oKyhjK20pKk1hdGguY29zKEEpLHg9Zi0oYyttKSpNYXRoLnNpbihBKSxfPVwicmFkaWFsZHJhZ1wiKTooeT1oKyh1LW0pKk1hdGguY29zKEEpLHg9Zi0odS1tKSpNYXRoLnNpbihBKSxfPVwicmFkaWFsZHJhZy1pbm5lclwiKTt2YXIgSSxCLE4saj1kLm1ha2VSZWN0RHJhZ2dlcihsLF8sXCJjcm9zc2hhaXJcIiwtbSwtbSx2LHYpLFY9e2VsZW1lbnQ6aixnZDpzfTtQKG4uc2VsZWN0KGopLHAudmlzaWJsZSYmdTxjLHt0cmFuc2Zvcm06Uih5LHgpfSksVi5wcmVwRm49ZnVuY3Rpb24oKXtJPW51bGwsQj1udWxsLE49bnVsbCxWLm1vdmVGbj1VLFYuZG9uZUZuPXEsYihzKX0sVi5jbGFtcEZuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguc3FydCh0KnQrZSplKTxULk1JTkRSQUcmJih0PTAsZT0wKSxbdCxlXX0sZy5pbml0KFYpfWZ1bmN0aW9uIFUodCxlKXtpZihJKUkodCxlKTtlbHNle3ZhciByPVt0LC1lXSxuPVtNYXRoLmNvcyhBKSxNYXRoLnNpbihBKV0saT1NYXRoLmFicyhvLmRvdChyLG4pL01hdGguc3FydChvLmRvdChyLHIpKSk7aXNOYU4oaSl8fChJPWk8LjU/SDpHKX19ZnVuY3Rpb24gcSgpe251bGwhPT1CP2EuY2FsbChcIl9ndWlSZWxheW91dFwiLHMsaS5pZCtcIi5yYWRpYWxheGlzLmFuZ2xlXCIsQik6bnVsbCE9PU4mJmEuY2FsbChcIl9ndWlSZWxheW91dFwiLHMsaS5pZCtcIi5yYWRpYWxheGlzLnJhbmdlW1wiK3IrXCJdXCIsTil9ZnVuY3Rpb24gSCh0LGUpe2lmKDAhPT1yKXt2YXIgbj15K3QsYT14K2U7Qj1NYXRoLmF0YW4yKGYtYSxuLWgpLGkudmFuZ2xlcyYmKEI9RChCLGkudmFuZ2xlcykpLEI9TChCKTt2YXIgbz1SKGgsZikrRigtQik7bFtcInJhZGlhbC1heGlzXCJdLmF0dHIoXCJ0cmFuc2Zvcm1cIixvKSxsW1wicmFkaWFsLWxpbmVcIl0uc2VsZWN0KFwibGluZVwiKS5hdHRyKFwidHJhbnNmb3JtXCIsbyk7dmFyIHM9aS5nZC5fZnVsbExheW91dCxjPXNbaS5pZF07aS51cGRhdGVSYWRpYWxBeGlzVGl0bGUocyxjLEIpfX1mdW5jdGlvbiBHKHQsZSl7dmFyIG49by5kb3QoW3QsLWVdLFtNYXRoLmNvcyhBKSxNYXRoLnNpbihBKV0pO2lmKE49ei1PKm4sTz4wPT0ocj9OPlM6TjxFKSl7dmFyIGw9cy5fZnVsbExheW91dCxjPWxbaS5pZF07cC5yYW5nZVtyXT1OLHAuX3JsW3JdPU4saS51cGRhdGVSYWRpYWxBeGlzKGwsYyksaS54YXhpcy5zZXRSYW5nZSgpLGkueGF4aXMuc2V0U2NhbGUoKSxpLnlheGlzLnNldFJhbmdlKCksaS55YXhpcy5zZXRTY2FsZSgpO3ZhciB1PSExO2Zvcih2YXIgaCBpbiBpLnRyYWNlSGFzaCl7dmFyIGY9aS50cmFjZUhhc2hbaF0sZD1vLmZpbHRlclZpc2libGUoZik7ZlswXVswXS50cmFjZS5fbW9kdWxlLnBsb3QocyxpLGQsYyksYS50cmFjZUlzKGgsXCJnbFwiKSYmZC5sZW5ndGgmJih1PSEwKX11JiYodyhzKSxrKHMpKX1lbHNlIE49bnVsbH19LE8udXBkYXRlQW5ndWxhckRyYWc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZ2QsaT1lLmxheWVycyxzPWUucmFkaXVzLGM9ZS5hbmd1bGFyQXhpcyx1PWUuY3gsaD1lLmN5LGY9ZS5jeHgscD1lLmN5eSx2PVQuYW5ndWxhckRyYWdCb3hTaXplLG09ZC5tYWtlRHJhZ2dlcihpLFwicGF0aFwiLFwiYW5ndWxhcmRyYWdcIixcIm1vdmVcIikseT17ZWxlbWVudDptLGdkOnJ9O2Z1bmN0aW9uIHgodCxlKXtyZXR1cm4gTWF0aC5hdGFuMihwK3YtZSx0LWYtdil9bi5zZWxlY3QobSkuYXR0cihcImRcIixlLnBhdGhBbm51bHVzKHMscyt2KSkuYXR0cihcInRyYW5zZm9ybVwiLFIodSxoKSkuY2FsbChfLFwibW92ZVwiKTt2YXIgQSxNLFMsRSxDLHosTz1pLmZyb250cGxvdC5zZWxlY3QoXCIuc2NhdHRlcmxheWVyXCIpLnNlbGVjdEFsbChcIi50cmFjZVwiKSxJPU8uc2VsZWN0QWxsKFwiLnBvaW50XCIpLEQ9Ty5zZWxlY3RBbGwoXCIudGV4dHBvaW50XCIpO2Z1bmN0aW9uIFAodCxzKXt2YXIgZD1lLmdkLl9mdWxsTGF5b3V0LGc9ZFtlLmlkXSx2PXgoQSt0LE0rcyksbT1MKHYteik7aWYoRT1TK20saS5mcm9udHBsb3QuYXR0cihcInRyYW5zZm9ybVwiLFIoZS54T2Zmc2V0MixlLnlPZmZzZXQyKStGKFstbSxmLHBdKSksZS52YW5nbGVzKXtDPWUucmFkaWFsQXhpc0FuZ2xlK207dmFyIHk9Uih1LGgpK0YoLW0pLGI9Uih1LGgpK0YoLUMpO2kuYmcuYXR0cihcInRyYW5zZm9ybVwiLHkpLGlbXCJyYWRpYWwtZ3JpZFwiXS5hdHRyKFwidHJhbnNmb3JtXCIseSksaVtcInJhZGlhbC1heGlzXCJdLmF0dHIoXCJ0cmFuc2Zvcm1cIixiKSxpW1wicmFkaWFsLWxpbmVcIl0uc2VsZWN0KFwibGluZVwiKS5hdHRyKFwidHJhbnNmb3JtXCIsYiksZS51cGRhdGVSYWRpYWxBeGlzVGl0bGUoZCxnLEMpfWVsc2UgZS5jbGlwUGF0aHMuZm9yVHJhY2VzLnNlbGVjdChcInBhdGhcIikuYXR0cihcInRyYW5zZm9ybVwiLFIoZixwKStGKG0pKTtJLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxlPWwuZ2V0VHJhbnNsYXRlKHQpO3QuYXR0cihcInRyYW5zZm9ybVwiLFIoZS54LGUueSkrRihbbV0pKX0pLEQuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9dC5zZWxlY3QoXCJ0ZXh0XCIpLHI9bC5nZXRUcmFuc2xhdGUodCk7dC5hdHRyKFwidHJhbnNmb3JtXCIsRihbbSxlLmF0dHIoXCJ4XCIpLGUuYXR0cihcInlcIildKStSKHIueCxyLnkpKX0pLGMucm90YXRpb249by5tb2RIYWxmKEUsMzYwKSxlLnVwZGF0ZUFuZ3VsYXJBeGlzKGQsZyksZS5faGFzQ2xpcE9uQXhpc0ZhbHNlJiYhby5pc0Z1bGxDaXJjbGUoZS5zZWN0b3JJblJhZCkmJk8uY2FsbChsLmhpZGVPdXRzaWRlUmFuZ2VQb2ludHMsZSk7dmFyIF89ITE7Zm9yKHZhciBUIGluIGUudHJhY2VIYXNoKWlmKGEudHJhY2VJcyhULFwiZ2xcIikpe3ZhciBQPWUudHJhY2VIYXNoW1RdLEI9by5maWx0ZXJWaXNpYmxlKFApO1BbMF1bMF0udHJhY2UuX21vZHVsZS5wbG90KHIsZSxCLGcpLEIubGVuZ3RoJiYoXz0hMCl9XyYmKHcociksayhyKSl9ZnVuY3Rpb24gQigpe0Quc2VsZWN0KFwidGV4dFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsbnVsbCk7dmFyIHQ9e307dFtlLmlkK1wiLmFuZ3VsYXJheGlzLnJvdGF0aW9uXCJdPUUsZS52YW5nbGVzJiYodFtlLmlkK1wiLnJhZGlhbGF4aXMuYW5nbGVcIl09QyksYS5jYWxsKFwiX2d1aVJlbGF5b3V0XCIscix0KX15LnByZXBGbj1mdW5jdGlvbihuLGksYSl7dmFyIG89dFtlLmlkXTtTPW8uYW5ndWxhcmF4aXMucm90YXRpb247dmFyIHM9bS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtBPWktcy5sZWZ0LE09YS1zLnRvcCx6PXgoQSxNKSx5Lm1vdmVGbj1QLHkuZG9uZUZuPUIsYihyKX0sZS52YW5nbGVzJiYhby5pc0Z1bGxDaXJjbGUoZS5zZWN0b3JJblJhZCkmJih5LnByZXBGbj1vLm5vb3AsXyhuLnNlbGVjdChtKSxudWxsKSksZy5pbml0KHkpfSxPLmlzUHRJbnNpZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zZWN0b3JJblJhZCxyPXRoaXMudmFuZ2xlcyxuPXRoaXMuYW5ndWxhckF4aXMuYzJnKHQudGhldGEpLGk9dGhpcy5yYWRpYWxBeGlzLGE9aS5jMmwodC5yKSxzPWkuX3JsO3JldHVybihyP00uaXNQdEluc2lkZVBvbHlnb246by5pc1B0SW5zaWRlU2VjdG9yKShhLG4scyxlLHIpfSxPLnBhdGhBcmM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zZWN0b3JJblJhZCxyPXRoaXMudmFuZ2xlcztyZXR1cm4ocj9NLnBhdGhQb2x5Z29uOm8ucGF0aEFyYykodCxlWzBdLGVbMV0scil9LE8ucGF0aFNlY3Rvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNlY3RvckluUmFkLHI9dGhpcy52YW5nbGVzO3JldHVybihyP00ucGF0aFBvbHlnb246by5wYXRoU2VjdG9yKSh0LGVbMF0sZVsxXSxyKX0sTy5wYXRoQW5udWx1cz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuc2VjdG9ySW5SYWQsbj10aGlzLnZhbmdsZXM7cmV0dXJuKG4/TS5wYXRoUG9seWdvbkFubnVsdXM6by5wYXRoQW5udWx1cykodCxlLHJbMF0sclsxXSxuKX0sTy5wYXRoU3VicGxvdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuaW5uZXJSYWRpdXMsZT10aGlzLnJhZGl1cztyZXR1cm4gdD90aGlzLnBhdGhBbm51bHVzKHQsZSk6dGhpcy5wYXRoU2VjdG9yKGUpfSxPLmZpbGxWaWV3SW5pdGlhbEtleT1mdW5jdGlvbih0LGUpe3QgaW4gdGhpcy52aWV3SW5pdGlhbHx8KHRoaXMudmlld0luaXRpYWxbdF09ZSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudFwiOjU5NixcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9jb21wb25lbnRzL3RpdGxlc1wiOjY2NixcIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIjo2NzMsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvY2xlYXJfZ2xfY2FudmFzZXNcIjo2ODYsXCIuLi8uLi9saWIvc2V0Y3Vyc29yXCI6NzIxLFwiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXNcIjo3NDAsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vY2FydGVzaWFuL2F1dG9yYW5nZVwiOjc0OCxcIi4uL2NhcnRlc2lhbi9kcmFnYm94XCI6NzU3LFwiLi4vY2FydGVzaWFuL3NlbGVjdFwiOjc2NixcIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydFwiOjc2NyxcIi4uL3Bsb3RzXCI6ODEwLFwiLi9jb25zdGFudHNcIjo4MTEsXCIuL2hlbHBlcnNcIjo4MTIsXCIuL3NldF9jb252ZXJ0XCI6ODIzLGQzOjE1NSx0aW55Y29sb3IyOjUyMn1dLDgyMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0XCIpLGE9bi5kZWcycmFkLG89bi5yYWQyZGVnO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7c3dpdGNoKGkodCxyKSx0Ll9pZCl7Y2FzZVwieFwiOmNhc2VcInJhZGlhbGF4aXNcIjohZnVuY3Rpb24odCxlKXt2YXIgcj1lLl9zdWJwbG90O3Quc2V0R2VvbWV0cnk9ZnVuY3Rpb24oKXt2YXIgZT10Ll9ybFswXSxuPXQuX3JsWzFdLGk9ci5pbm5lclJhZGl1cyxhPShyLnJhZGl1cy1pKS8obi1lKSxvPWkvYSxzPWU+bj9mdW5jdGlvbih0KXtyZXR1cm4gdDw9MH06ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTB9O3QuYzJnPWZ1bmN0aW9uKHIpe3ZhciBuPXQuYzJsKHIpLWU7cmV0dXJuKHMobik/bjowKStvfSx0LmcyYz1mdW5jdGlvbihyKXtyZXR1cm4gdC5sMmMocitlLW8pfSx0LmcycD1mdW5jdGlvbih0KXtyZXR1cm4gdCphfSx0LmMycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5nMnAodC5jMmcoZSkpfX19KHQsZSk7YnJlYWs7Y2FzZVwiYW5ndWxhcmF4aXNcIjohZnVuY3Rpb24odCxlKXt2YXIgcj10LnR5cGU7aWYoXCJsaW5lYXJcIj09PXIpe3ZhciBpPXQuZDJjLHM9dC5jMmQ7dC5kMmM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm5cImRlZ3JlZXNcIj09PWU/YSh0KTp0fShpKHQpLGUpfSx0LmMyZD1mdW5jdGlvbih0LGUpe3JldHVybiBzKGZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJkZWdyZWVzXCI9PT1lP28odCk6dH0odCxlKSl9fXQubWFrZUNhbGNkYXRhPWZ1bmN0aW9uKGUsaSl7dmFyIGEsbyxzPWVbaV0sbD1lLl9sZW5ndGgsYz1mdW5jdGlvbihyKXtyZXR1cm4gdC5kMmMocixlLnRoZXRhdW5pdCl9O2lmKHMpe2lmKG4uaXNUeXBlZEFycmF5KHMpJiZcImxpbmVhclwiPT09cil7aWYobD09PXMubGVuZ3RoKXJldHVybiBzO2lmKHMuc3ViYXJyYXkpcmV0dXJuIHMuc3ViYXJyYXkoMCxsKX1mb3IoYT1uZXcgQXJyYXkobCksbz0wO288bDtvKyspYVtvXT1jKHNbb10pfWVsc2V7dmFyIHU9aStcIjBcIixoPVwiZFwiK2ksZj11IGluIGU/YyhlW3VdKTowLHA9ZVtoXT9jKGVbaF0pOih0LnBlcmlvZHx8MipNYXRoLlBJKS9sO2ZvcihhPW5ldyBBcnJheShsKSxvPTA7bzxsO28rKylhW29dPWYrbypwfXJldHVybiBhfSx0LnNldEdlb21ldHJ5PWZ1bmN0aW9uKCl7dmFyIGkscyxsLGMsdT1lLnNlY3RvcixoPXUubWFwKGEpLGY9e2Nsb2Nrd2lzZTotMSxjb3VudGVyY2xvY2t3aXNlOjF9W3QuZGlyZWN0aW9uXSxwPWEodC5yb3RhdGlvbiksZD1mdW5jdGlvbih0KXtyZXR1cm4gZip0K3B9LGc9ZnVuY3Rpb24odCl7cmV0dXJuKHQtcCkvZn07c3dpdGNoKHIpe2Nhc2VcImxpbmVhclwiOnM9aT1uLmlkZW50aXR5LGM9YSxsPW8sdC5yYW5nZT1uLmlzRnVsbENpcmNsZShoKT9bdVswXSx1WzBdKzM2MF06aC5tYXAoZykubWFwKG8pO2JyZWFrO2Nhc2VcImNhdGVnb3J5XCI6dmFyIHY9dC5fY2F0ZWdvcmllcy5sZW5ndGgsbT10LnBlcmlvZD9NYXRoLm1heCh0LnBlcmlvZCx2KTp2O3M9Yz1mdW5jdGlvbih0KXtyZXR1cm4gMip0Kk1hdGguUEkvbX0saT1sPWZ1bmN0aW9uKHQpe3JldHVybiB0Km0vTWF0aC5QSS8yfSx0LnJhbmdlPVswLG1dfXQuYzJnPWZ1bmN0aW9uKHQpe3JldHVybiBkKHModCkpfSx0LmcyYz1mdW5jdGlvbih0KXtyZXR1cm4gaShnKHQpKX0sdC50Mmc9ZnVuY3Rpb24odCl7cmV0dXJuIGQoYyh0KSl9LHQuZzJ0PWZ1bmN0aW9uKHQpe3JldHVybiBsKGcodCkpfX19KHQsZSl9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0XCI6NzY3fV0sODI0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2xpYlwiKSxpPXQoXCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLGE9dChcIi4vZG9tYWluXCIpLmRlZmF1bHRzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcyxsLGM9by50eXBlLHU9by5hdHRyaWJ1dGVzLGg9by5oYW5kbGVEZWZhdWx0cyxmPW8ucGFydGl0aW9ufHxcInhcIixwPWUuX3N1YnBsb3RzW2NdLGQ9cC5sZW5ndGgsZz1kJiZwWzBdLnJlcGxhY2UoL1xcZCskLyxcIlwiKTtmdW5jdGlvbiB2KHQsZSl7cmV0dXJuIG4uY29lcmNlKHMsbCx1LHQsZSl9Zm9yKHZhciBtPTA7bTxkO20rKyl7dmFyIHk9cFttXTtzPXRbeV0/dFt5XTp0W3ldPXt9LGw9aS5uZXdDb250YWluZXIoZSx5LGcpLHYoXCJ1aXJldmlzaW9uXCIsZS51aXJldmlzaW9uKTt2YXIgeD17fTt4W2ZdPVttL2QsKG0rMSkvZF0sYShsLGUsdix4KSxvLmlkPXksaChzLGwsdixvKX19fSx7XCIuLi9saWJcIjo3MDEsXCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi9kb21haW5cIjo3NzR9XSw4MjU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi90ZXJuYXJ5XCIpLGk9dChcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCIpLmdldFN1YnBsb3RDYWxjRGF0YSxhPXQoXCIuLi8uLi9saWJcIikuY291bnRlclJlZ2V4O3IubmFtZT1cInRlcm5hcnlcIjt2YXIgbz1yLmF0dHI9XCJzdWJwbG90XCI7ci5pZFJvb3Q9XCJ0ZXJuYXJ5XCIsci5pZFJlZ2V4PXIuYXR0clJlZ2V4PWEoXCJ0ZXJuYXJ5XCIpLChyLmF0dHJpYnV0ZXM9e30pW29dPXt2YWxUeXBlOlwic3VicGxvdGlkXCIsZGZsdDpcInRlcm5hcnlcIixlZGl0VHlwZTpcImNhbGNcIn0sci5sYXlvdXRBdHRyaWJ1dGVzPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9dChcIi4vbGF5b3V0X2RlZmF1bHRzXCIpLHIucGxvdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsYT1lLl9zdWJwbG90cy50ZXJuYXJ5LG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXSxsPWkocixcInRlcm5hcnlcIixzKSxjPWVbc10uX3N1YnBsb3Q7Y3x8KGM9bmV3IG4oe2lkOnMsZ3JhcGhEaXY6dCxjb250YWluZXI6ZS5fdGVybmFyeWxheWVyLm5vZGUoKX0sZSksZVtzXS5fc3VicGxvdD1jKSxjLnBsb3QobCxlLHQuX3Byb21pc2VzKX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLnRlcm5hcnl8fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXSxzPW5bb10uX3N1YnBsb3Q7IWVbb10mJnMmJihzLnBsb3RDb250YWluZXIucmVtb3ZlKCkscy5jbGlwRGVmLnJlbW92ZSgpLHMuY2xpcERlZlJlbGF0aXZlLnJlbW92ZSgpLHMubGF5ZXJzW1wiYS10aXRsZVwiXS5yZW1vdmUoKSxzLmxheWVyc1tcImItdGl0bGVcIl0ucmVtb3ZlKCkscy5sYXllcnNbXCJjLXRpdGxlXCJdLnJlbW92ZSgpKX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9nZXRfZGF0YVwiOjc4NCxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo4MjYsXCIuL2xheW91dF9kZWZhdWx0c1wiOjgyNyxcIi4vdGVybmFyeVwiOjgyOH1dLDgyNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vZG9tYWluXCIpLmF0dHJpYnV0ZXMsYT10KFwiLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGwscz10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LGw9e3RpdGxlOmEudGl0bGUsY29sb3I6YS5jb2xvcix0aWNrbW9kZTphLnRpY2ttb2RlLG50aWNrczpzKHt9LGEubnRpY2tzLHtkZmx0OjYsbWluOjF9KSx0aWNrMDphLnRpY2swLGR0aWNrOmEuZHRpY2ssdGlja3ZhbHM6YS50aWNrdmFscyx0aWNrdGV4dDphLnRpY2t0ZXh0LHRpY2tzOmEudGlja3MsdGlja2xlbjphLnRpY2tsZW4sdGlja3dpZHRoOmEudGlja3dpZHRoLHRpY2tjb2xvcjphLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczphLnNob3d0aWNrbGFiZWxzLHNob3d0aWNrcHJlZml4OmEuc2hvd3RpY2twcmVmaXgsdGlja3ByZWZpeDphLnRpY2twcmVmaXgsc2hvd3RpY2tzdWZmaXg6YS5zaG93dGlja3N1ZmZpeCx0aWNrc3VmZml4OmEudGlja3N1ZmZpeCxzaG93ZXhwb25lbnQ6YS5zaG93ZXhwb25lbnQsZXhwb25lbnRmb3JtYXQ6YS5leHBvbmVudGZvcm1hdCxzZXBhcmF0ZXRob3VzYW5kczphLnNlcGFyYXRldGhvdXNhbmRzLHRpY2tmb250OmEudGlja2ZvbnQsdGlja2FuZ2xlOmEudGlja2FuZ2xlLHRpY2tmb3JtYXQ6YS50aWNrZm9ybWF0LHRpY2tmb3JtYXRzdG9wczphLnRpY2tmb3JtYXRzdG9wcyxob3ZlcmZvcm1hdDphLmhvdmVyZm9ybWF0LHNob3dsaW5lOnMoe30sYS5zaG93bGluZSx7ZGZsdDohMH0pLGxpbmVjb2xvcjphLmxpbmVjb2xvcixsaW5ld2lkdGg6YS5saW5ld2lkdGgsc2hvd2dyaWQ6cyh7fSxhLnNob3dncmlkLHtkZmx0OiEwfSksZ3JpZGNvbG9yOmEuZ3JpZGNvbG9yLGdyaWR3aWR0aDphLmdyaWR3aWR0aCxsYXllcjphLmxheWVyLG1pbjp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MCxtaW46MH0sX2RlcHJlY2F0ZWQ6e3RpdGxlOmEuX2RlcHJlY2F0ZWQudGl0bGUsdGl0bGVmb250OmEuX2RlcHJlY2F0ZWQudGl0bGVmb250fX0sYz1lLmV4cG9ydHM9byh7ZG9tYWluOmkoe25hbWU6XCJ0ZXJuYXJ5XCJ9KSxiZ2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0Om4uYmFja2dyb3VuZH0sc3VtOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxLG1pbjowfSxhYXhpczpsLGJheGlzOmwsY2F4aXM6bH0sXCJwbG90XCIsXCJmcm9tLXJvb3RcIik7Yy51aXJldmlzaW9uPXt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJub25lXCJ9LGMuYWF4aXMudWlyZXZpc2lvbj1jLmJheGlzLnVpcmV2aXNpb249Yy5jYXhpcy51aXJldmlzaW9uPXt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJub25lXCJ9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIjo1NzcsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlc1wiOjc2MSxcIi4uL2RvbWFpblwiOjc3NH1dLDgyNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGk9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIiksYT10KFwiLi4vLi4vbGliXCIpLG89dChcIi4uL3N1YnBsb3RfZGVmYXVsdHNcIikscz10KFwiLi4vY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHNcIiksbD10KFwiLi4vY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0c1wiKSxjPXQoXCIuLi9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0c1wiKSx1PXQoXCIuLi9jYXJ0ZXNpYW4vbGluZV9ncmlkX2RlZmF1bHRzXCIpLGg9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksZj1bXCJhYXhpc1wiLFwiYmF4aXNcIixcImNheGlzXCJdO2Z1bmN0aW9uIHAodCxlLHIsYSl7dmFyIG8scyxsLGM9cihcImJnY29sb3JcIiksdT1yKFwic3VtXCIpO2EuYmdDb2xvcj1uLmNvbWJpbmUoYyxhLnBhcGVyX2JnY29sb3IpO2Zvcih2YXIgaD0wO2g8Zi5sZW5ndGg7aCsrKXM9dFtvPWZbaF1dfHx7fSwobD1pLm5ld0NvbnRhaW5lcihlLG8pKS5fbmFtZT1vLGQocyxsLGEsZSk7dmFyIHA9ZS5hYXhpcyxnPWUuYmF4aXMsdj1lLmNheGlzO3AubWluK2cubWluK3YubWluPj11JiYocC5taW49MCxnLm1pbj0wLHYubWluPTAsdC5hYXhpcyYmZGVsZXRlIHQuYWF4aXMubWluLHQuYmF4aXMmJmRlbGV0ZSB0LmJheGlzLm1pbix0LmNheGlzJiZkZWxldGUgdC5jYXhpcy5taW4pfWZ1bmN0aW9uIGQodCxlLHIsbil7dmFyIGk9aFtlLl9uYW1lXTtmdW5jdGlvbiBvKHIsbil7cmV0dXJuIGEuY29lcmNlKHQsZSxpLHIsbil9byhcInVpcmV2aXNpb25cIixuLnVpcmV2aXNpb24pLGUudHlwZT1cImxpbmVhclwiO3ZhciBmPW8oXCJjb2xvclwiKSxwPWYhPT1pLmNvbG9yLmRmbHQ/ZjpyLmZvbnQuY29sb3IsZD1lLl9uYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpLGc9XCJDb21wb25lbnQgXCIrZCx2PW8oXCJ0aXRsZS50ZXh0XCIsZyk7ZS5faG92ZXJ0aXRsZT12PT09Zz92OmQsYS5jb2VyY2VGb250KG8sXCJ0aXRsZS5mb250XCIse2ZhbWlseTpyLmZvbnQuZmFtaWx5LHNpemU6TWF0aC5yb3VuZCgxLjIqci5mb250LnNpemUpLGNvbG9yOnB9KSxvKFwibWluXCIpLGModCxlLG8sXCJsaW5lYXJcIikscyh0LGUsbyxcImxpbmVhclwiLHt9KSxsKHQsZSxvLHtvdXRlclRpY2tzOiEwfSksbyhcInNob3d0aWNrbGFiZWxzXCIpJiYoYS5jb2VyY2VGb250KG8sXCJ0aWNrZm9udFwiLHtmYW1pbHk6ci5mb250LmZhbWlseSxzaXplOnIuZm9udC5zaXplLGNvbG9yOnB9KSxvKFwidGlja2FuZ2xlXCIpLG8oXCJ0aWNrZm9ybWF0XCIpKSx1KHQsZSxvLHtkZmx0Q29sb3I6ZixiZ0NvbG9yOnIuYmdDb2xvcixibGVuZDo2MCxzaG93TGluZTohMCxzaG93R3JpZDohMCxub1plcm9MaW5lOiEwLGF0dHJpYnV0ZXM6aX0pLG8oXCJob3ZlcmZvcm1hdFwiKSxvKFwibGF5ZXJcIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtvKHQsZSxyLHt0eXBlOlwidGVybmFyeVwiLGF0dHJpYnV0ZXM6aCxoYW5kbGVEZWZhdWx0czpwLGZvbnQ6ZS5mb250LHBhcGVyX2JnY29sb3I6ZS5wYXBlcl9iZ2NvbG9yfSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uL2NhcnRlc2lhbi9saW5lX2dyaWRfZGVmYXVsdHNcIjo3NjMsXCIuLi9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0c1wiOjc2OCxcIi4uL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHNcIjo3NjksXCIuLi9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0c1wiOjc3MCxcIi4uL3N1YnBsb3RfZGVmYXVsdHNcIjo4MjQsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6ODI2fV0sODI4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcInRpbnljb2xvcjJcIiksYT10KFwiLi4vLi4vcmVnaXN0cnlcIiksbz10KFwiLi4vLi4vbGliXCIpLHM9by5fLGw9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksYz10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLHU9dChcIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydFwiKSxoPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsZj10KFwiLi4vcGxvdHNcIikscD10KFwiLi4vY2FydGVzaWFuL2F4ZXNcIiksZD10KFwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudFwiKSxnPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4XCIpLHY9dChcIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzXCIpLG09dChcIi4uL2NhcnRlc2lhbi9zZWxlY3RcIikucHJlcFNlbGVjdCx5PXQoXCIuLi9jYXJ0ZXNpYW4vc2VsZWN0XCIpLnNlbGVjdE9uQ2xpY2sseD10KFwiLi4vY2FydGVzaWFuL3NlbGVjdFwiKS5jbGVhclNlbGVjdCxiPXQoXCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzXCIpO2Z1bmN0aW9uIF8odCxlKXt0aGlzLmlkPXQuaWQsdGhpcy5ncmFwaERpdj10LmdyYXBoRGl2LHRoaXMuaW5pdChlKSx0aGlzLm1ha2VGcmFtZXdvcmsoZSksdGhpcy5hVGlja0xheW91dD1udWxsLHRoaXMuYlRpY2tMYXlvdXQ9bnVsbCx0aGlzLmNUaWNrTGF5b3V0PW51bGx9ZS5leHBvcnRzPV87dmFyIHc9Xy5wcm90b3R5cGU7dy5pbml0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGFpbmVyPXQuX3Rlcm5hcnlsYXllcix0aGlzLmRlZnM9dC5fZGVmcyx0aGlzLmxheW91dElkPXQuX3VpZCx0aGlzLnRyYWNlSGFzaD17fSx0aGlzLmxheWVycz17fX0sdy5wbG90PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVt0aGlzLmlkXSxuPWUuX3NpemU7dGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPSExO2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXtpZighMT09PXRbaV1bMF0udHJhY2UuY2xpcG9uYXhpcyl7dGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPSEwO2JyZWFrfX10aGlzLnVwZGF0ZUxheWVycyhyKSx0aGlzLmFkanVzdExheW91dChyLG4pLGYuZ2VuZXJhbFVwZGF0ZVBlclRyYWNlTW9kdWxlKHRoaXMuZ3JhcGhEaXYsdGhpcyx0LHIpLHRoaXMubGF5ZXJzLnBsb3RiZy5zZWxlY3QoXCJwYXRoXCIpLmNhbGwobC5maWxsLHIuYmdjb2xvcil9LHcubWFrZUZyYW1ld29yaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdyYXBoRGl2LHI9dFt0aGlzLmlkXSxuPXRoaXMuY2xpcElkPVwiY2xpcFwiK3RoaXMubGF5b3V0SWQrdGhpcy5pZCxpPXRoaXMuY2xpcElkUmVsYXRpdmU9XCJjbGlwLXJlbGF0aXZlXCIrdGhpcy5sYXlvdXRJZCt0aGlzLmlkO3RoaXMuY2xpcERlZj1vLmVuc3VyZVNpbmdsZUJ5SWQodC5fY2xpcHMsXCJjbGlwUGF0aFwiLG4sZnVuY3Rpb24odCl7dC5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsXCJNMCwwWlwiKX0pLHRoaXMuY2xpcERlZlJlbGF0aXZlPW8uZW5zdXJlU2luZ2xlQnlJZCh0Ll9jbGlwcyxcImNsaXBQYXRoXCIsaSxmdW5jdGlvbih0KXt0LmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIixcIk0wLDBaXCIpfSksdGhpcy5wbG90Q29udGFpbmVyPW8uZW5zdXJlU2luZ2xlKHRoaXMuY29udGFpbmVyLFwiZ1wiLHRoaXMuaWQpLHRoaXMudXBkYXRlTGF5ZXJzKHIpLGMuc2V0Q2xpcFVybCh0aGlzLmxheWVycy5iYWNrcGxvdCxuLGUpLGMuc2V0Q2xpcFVybCh0aGlzLmxheWVycy5ncmlkcyxuLGUpfSx3LnVwZGF0ZUxheWVycz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxheWVycyxyPVtcImRyYWdsYXllclwiLFwicGxvdGJnXCIsXCJiYWNrcGxvdFwiLFwiZ3JpZHNcIl07XCJiZWxvdyB0cmFjZXNcIj09PXQuYWF4aXMubGF5ZXImJnIucHVzaChcImFheGlzXCIsXCJhbGluZVwiKSxcImJlbG93IHRyYWNlc1wiPT09dC5iYXhpcy5sYXllciYmci5wdXNoKFwiYmF4aXNcIixcImJsaW5lXCIpLFwiYmVsb3cgdHJhY2VzXCI9PT10LmNheGlzLmxheWVyJiZyLnB1c2goXCJjYXhpc1wiLFwiY2xpbmVcIiksci5wdXNoKFwiZnJvbnRwbG90XCIpLFwiYWJvdmUgdHJhY2VzXCI9PT10LmFheGlzLmxheWVyJiZyLnB1c2goXCJhYXhpc1wiLFwiYWxpbmVcIiksXCJhYm92ZSB0cmFjZXNcIj09PXQuYmF4aXMubGF5ZXImJnIucHVzaChcImJheGlzXCIsXCJibGluZVwiKSxcImFib3ZlIHRyYWNlc1wiPT09dC5jYXhpcy5sYXllciYmci5wdXNoKFwiY2F4aXNcIixcImNsaW5lXCIpO3ZhciBpPXRoaXMucGxvdENvbnRhaW5lci5zZWxlY3RBbGwoXCJnLnRvcGxldmVsXCIpLmRhdGEocixTdHJpbmcpLGE9W1wiYWdyaWRcIixcImJncmlkXCIsXCJjZ3JpZFwiXTtpLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIixmdW5jdGlvbih0KXtyZXR1cm5cInRvcGxldmVsIFwiK3R9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2VbdF09cixcImZyb250cGxvdFwiPT09dD9yLmFwcGVuZChcImdcIikuY2xhc3NlZChcInNjYXR0ZXJsYXllclwiLCEwKTpcImJhY2twbG90XCI9PT10P3IuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwibWFwbGF5ZXJcIiwhMCk6XCJwbG90YmdcIj09PXQ/ci5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsXCJNMCwwWlwiKTpcImFsaW5lXCI9PT10fHxcImJsaW5lXCI9PT10fHxcImNsaW5lXCI9PT10P3IuYXBwZW5kKFwicGF0aFwiKTpcImdyaWRzXCI9PT10JiZhLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT1yLmFwcGVuZChcImdcIikuY2xhc3NlZChcImdyaWQgXCIrdCwhMCl9KX0pLGkub3JkZXIoKX07dmFyIGs9TWF0aC5zcXJ0KDQvMyk7dy5hZGp1c3RMYXlvdXQ9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLHMsZj10aGlzLHA9dC5kb21haW4sZD0ocC54WzBdK3AueFsxXSkvMixnPShwLnlbMF0rcC55WzFdKS8yLHY9cC54WzFdLXAueFswXSxtPXAueVsxXS1wLnlbMF0seT12KmUudyx4PW0qZS5oLGI9dC5zdW0sXz10LmFheGlzLm1pbix3PXQuYmF4aXMubWluLEE9dC5jYXhpcy5taW47eT5rKng/aT0oYT14KSprOmE9KGk9eSkvayxvPXYqaS95LHM9bSphL3gscj1lLmwrZS53KmQtaS8yLG49ZS50K2UuaCooMS1nKS1hLzIsZi54MD1yLGYueTA9bixmLnc9aSxmLmg9YSxmLnN1bT1iLGYueGF4aXM9e3R5cGU6XCJsaW5lYXJcIixyYW5nZTpbXysyKkEtYixiLV8tMip3XSxkb21haW46W2Qtby8yLGQrby8yXSxfaWQ6XCJ4XCJ9LHUoZi54YXhpcyxmLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxmLnhheGlzLnNldFNjYWxlKCksZi54YXhpcy5pc1B0V2l0aGluUmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIHQuYT49Zi5hYXhpcy5yYW5nZVswXSYmdC5hPD1mLmFheGlzLnJhbmdlWzFdJiZ0LmI+PWYuYmF4aXMucmFuZ2VbMV0mJnQuYjw9Zi5iYXhpcy5yYW5nZVswXSYmdC5jPj1mLmNheGlzLnJhbmdlWzFdJiZ0LmM8PWYuY2F4aXMucmFuZ2VbMF19LGYueWF4aXM9e3R5cGU6XCJsaW5lYXJcIixyYW5nZTpbXyxiLXctQV0sZG9tYWluOltnLXMvMixnK3MvMl0sX2lkOlwieVwifSx1KGYueWF4aXMsZi5ncmFwaERpdi5fZnVsbExheW91dCksZi55YXhpcy5zZXRTY2FsZSgpLGYueWF4aXMuaXNQdFdpdGhpblJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuITB9O3ZhciBUPWYueWF4aXMuZG9tYWluWzBdLE09Zi5hYXhpcz1oKHt9LHQuYWF4aXMse3JhbmdlOltfLGItdy1BXSxzaWRlOlwibGVmdFwiLHRpY2thbmdsZTooK3QuYWF4aXMudGlja2FuZ2xlfHwwKS0zMCxkb21haW46W1QsVCtzKmtdLGFuY2hvcjpcImZyZWVcIixwb3NpdGlvbjowLF9pZDpcInlcIixfbGVuZ3RoOml9KTt1KE0sZi5ncmFwaERpdi5fZnVsbExheW91dCksTS5zZXRTY2FsZSgpO3ZhciBTPWYuYmF4aXM9aCh7fSx0LmJheGlzLHtyYW5nZTpbYi1fLUEsd10sc2lkZTpcImJvdHRvbVwiLGRvbWFpbjpmLnhheGlzLmRvbWFpbixhbmNob3I6XCJmcmVlXCIscG9zaXRpb246MCxfaWQ6XCJ4XCIsX2xlbmd0aDppfSk7dShTLGYuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQpLFMuc2V0U2NhbGUoKTt2YXIgRT1mLmNheGlzPWgoe30sdC5jYXhpcyx7cmFuZ2U6W2ItXy13LEFdLHNpZGU6XCJyaWdodFwiLHRpY2thbmdsZTooK3QuY2F4aXMudGlja2FuZ2xlfHwwKSszMCxkb21haW46W1QsVCtzKmtdLGFuY2hvcjpcImZyZWVcIixwb3NpdGlvbjowLF9pZDpcInlcIixfbGVuZ3RoOml9KTt1KEUsZi5ncmFwaERpdi5fZnVsbExheW91dCksRS5zZXRTY2FsZSgpO3ZhciBDPVwiTVwiK3IrXCIsXCIrKG4rYSkrXCJoXCIraStcImwtXCIraS8yK1wiLC1cIithK1wiWlwiO2YuY2xpcERlZi5zZWxlY3QoXCJwYXRoXCIpLmF0dHIoXCJkXCIsQyksZi5sYXllcnMucGxvdGJnLnNlbGVjdChcInBhdGhcIikuYXR0cihcImRcIixDKTt2YXIgTD1cIk0wLFwiK2ErXCJoXCIraStcImwtXCIraS8yK1wiLC1cIithK1wiWlwiO2YuY2xpcERlZlJlbGF0aXZlLnNlbGVjdChcInBhdGhcIikuYXR0cihcImRcIixMKTt2YXIgej1cInRyYW5zbGF0ZShcIityK1wiLFwiK24rXCIpXCI7Zi5wbG90Q29udGFpbmVyLnNlbGVjdEFsbChcIi5zY2F0dGVybGF5ZXIsLm1hcGxheWVyXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIix6KSxmLmNsaXBEZWZSZWxhdGl2ZS5zZWxlY3QoXCJwYXRoXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIixudWxsKTt2YXIgTz1cInRyYW5zbGF0ZShcIisoci1TLl9vZmZzZXQpK1wiLFwiKyhuK2EpK1wiKVwiO2YubGF5ZXJzLmJheGlzLmF0dHIoXCJ0cmFuc2Zvcm1cIixPKSxmLmxheWVycy5iZ3JpZC5hdHRyKFwidHJhbnNmb3JtXCIsTyk7dmFyIEk9XCJ0cmFuc2xhdGUoXCIrKHIraS8yKStcIixcIituK1wiKXJvdGF0ZSgzMCl0cmFuc2xhdGUoMCxcIistTS5fb2Zmc2V0K1wiKVwiO2YubGF5ZXJzLmFheGlzLmF0dHIoXCJ0cmFuc2Zvcm1cIixJKSxmLmxheWVycy5hZ3JpZC5hdHRyKFwidHJhbnNmb3JtXCIsSSk7dmFyIEQ9XCJ0cmFuc2xhdGUoXCIrKHIraS8yKStcIixcIituK1wiKXJvdGF0ZSgtMzApdHJhbnNsYXRlKDAsXCIrLUUuX29mZnNldCtcIilcIjtmLmxheWVycy5jYXhpcy5hdHRyKFwidHJhbnNmb3JtXCIsRCksZi5sYXllcnMuY2dyaWQuYXR0cihcInRyYW5zZm9ybVwiLEQpLGYuZHJhd0F4ZXMoITApLGYubGF5ZXJzLmFsaW5lLnNlbGVjdChcInBhdGhcIikuYXR0cihcImRcIixNLnNob3dsaW5lP1wiTVwiK3IrXCIsXCIrKG4rYSkrXCJsXCIraS8yK1wiLC1cIithOlwiTTAsMFwiKS5jYWxsKGwuc3Ryb2tlLE0ubGluZWNvbG9yfHxcIiMwMDBcIikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwoTS5saW5ld2lkdGh8fDApK1wicHhcIiksZi5sYXllcnMuYmxpbmUuc2VsZWN0KFwicGF0aFwiKS5hdHRyKFwiZFwiLFMuc2hvd2xpbmU/XCJNXCIrcitcIixcIisobithKStcImhcIitpOlwiTTAsMFwiKS5jYWxsKGwuc3Ryb2tlLFMubGluZWNvbG9yfHxcIiMwMDBcIikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwoUy5saW5ld2lkdGh8fDApK1wicHhcIiksZi5sYXllcnMuY2xpbmUuc2VsZWN0KFwicGF0aFwiKS5hdHRyKFwiZFwiLEUuc2hvd2xpbmU/XCJNXCIrKHIraS8yKStcIixcIituK1wibFwiK2kvMitcIixcIithOlwiTTAsMFwiKS5jYWxsKGwuc3Ryb2tlLEUubGluZWNvbG9yfHxcIiMwMDBcIikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwoRS5saW5ld2lkdGh8fDApK1wicHhcIiksZi5ncmFwaERpdi5fY29udGV4dC5zdGF0aWNQbG90fHxmLmluaXRJbnRlcmFjdGlvbnMoKSxjLnNldENsaXBVcmwoZi5sYXllcnMuZnJvbnRwbG90LGYuX2hhc0NsaXBPbkF4aXNGYWxzZT9udWxsOmYuY2xpcElkLGYuZ3JhcGhEaXYpfSx3LmRyYXdBeGVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ3JhcGhEaXYscj10aGlzLmlkLnN1YnN0cig3KStcInRpdGxlXCIsbj10aGlzLmxheWVycyxpPXRoaXMuYWF4aXMsYT10aGlzLmJheGlzLG89dGhpcy5jYXhpcztpZih0aGlzLmRyYXdBeChpKSx0aGlzLmRyYXdBeChhKSx0aGlzLmRyYXdBeChvKSx0KXt2YXIgbD1NYXRoLm1heChpLnNob3d0aWNrbGFiZWxzP2kudGlja2ZvbnQuc2l6ZS8yOjAsKG8uc2hvd3RpY2tsYWJlbHM/Ljc1Km8udGlja2ZvbnQuc2l6ZTowKSsoXCJvdXRzaWRlXCI9PT1vLnRpY2tzPy44NypvLnRpY2tsZW46MCkpLGM9KGEuc2hvd3RpY2tsYWJlbHM/YS50aWNrZm9udC5zaXplOjApKyhcIm91dHNpZGVcIj09PWEudGlja3M/YS50aWNrbGVuOjApKzM7bltcImEtdGl0bGVcIl09di5kcmF3KGUsXCJhXCIrcix7cHJvcENvbnRhaW5lcjppLHByb3BOYW1lOnRoaXMuaWQrXCIuYWF4aXMudGl0bGVcIixwbGFjZWhvbGRlcjpzKGUsXCJDbGljayB0byBlbnRlciBDb21wb25lbnQgQSB0aXRsZVwiKSxhdHRyaWJ1dGVzOnt4OnRoaXMueDArdGhpcy53LzIseTp0aGlzLnkwLWkudGl0bGUuZm9udC5zaXplLzMtbCxcInRleHQtYW5jaG9yXCI6XCJtaWRkbGVcIn19KSxuW1wiYi10aXRsZVwiXT12LmRyYXcoZSxcImJcIityLHtwcm9wQ29udGFpbmVyOmEscHJvcE5hbWU6dGhpcy5pZCtcIi5iYXhpcy50aXRsZVwiLHBsYWNlaG9sZGVyOnMoZSxcIkNsaWNrIHRvIGVudGVyIENvbXBvbmVudCBCIHRpdGxlXCIpLGF0dHJpYnV0ZXM6e3g6dGhpcy54MC1jLHk6dGhpcy55MCt0aGlzLmgrLjgzKmEudGl0bGUuZm9udC5zaXplK2MsXCJ0ZXh0LWFuY2hvclwiOlwibWlkZGxlXCJ9fSksbltcImMtdGl0bGVcIl09di5kcmF3KGUsXCJjXCIrcix7cHJvcENvbnRhaW5lcjpvLHByb3BOYW1lOnRoaXMuaWQrXCIuY2F4aXMudGl0bGVcIixwbGFjZWhvbGRlcjpzKGUsXCJDbGljayB0byBlbnRlciBDb21wb25lbnQgQyB0aXRsZVwiKSxhdHRyaWJ1dGVzOnt4OnRoaXMueDArdGhpcy53K2MseTp0aGlzLnkwK3RoaXMuaCsuODMqby50aXRsZS5mb250LnNpemUrYyxcInRleHQtYW5jaG9yXCI6XCJtaWRkbGVcIn19KX19LHcuZHJhd0F4PWZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5ncmFwaERpdixuPXQuX25hbWUsaT1uLmNoYXJBdCgwKSxhPXQuX2lkLHM9dGhpcy5sYXllcnNbbl0sbD1pK1widGlja0xheW91dFwiLGM9KGU9dCkudGlja3MrU3RyaW5nKGUudGlja2xlbikrU3RyaW5nKGUuc2hvd3RpY2tsYWJlbHMpO3RoaXNbbF0hPT1jJiYocy5zZWxlY3RBbGwoXCIuXCIrYStcInRpY2tcIikucmVtb3ZlKCksdGhpc1tsXT1jKSx0LnNldFNjYWxlKCk7dmFyIHU9cC5jYWxjVGlja3ModCksaD1wLmNsaXBFbmRzKHQsdSksZj1wLm1ha2VUcmFuc0ZuKHQpLGQ9cC5nZXRUaWNrU2lnbnModClbMl0sZz1vLmRlZzJyYWQoMzApLHY9ZCoodC5saW5ld2lkdGh8fDEpLzIsbT1kKnQudGlja2xlbix5PXRoaXMudyx4PXRoaXMuaCxiPVwiYlwiPT09aT9cIk0wLFwiK3YrXCJsXCIrTWF0aC5zaW4oZykqbStcIixcIitNYXRoLmNvcyhnKSptOlwiTVwiK3YrXCIsMGxcIitNYXRoLmNvcyhnKSptK1wiLFwiKy1NYXRoLnNpbihnKSptLF89e2E6XCJNMCwwbFwiK3grXCIsLVwiK3kvMixiOlwiTTAsMGwtXCIreS8yK1wiLC1cIit4LGM6XCJNMCwwbC1cIit4K1wiLFwiK3kvMn1baV07cC5kcmF3VGlja3Mocix0LHt2YWxzOlwiaW5zaWRlXCI9PT10LnRpY2tzP2g6dSxsYXllcjpzLHBhdGg6Yix0cmFuc0ZuOmYsY3Jpc3A6ITF9KSxwLmRyYXdHcmlkKHIsdCx7dmFsczpoLGxheWVyOnRoaXMubGF5ZXJzW2krXCJncmlkXCJdLHBhdGg6Xyx0cmFuc0ZuOmYsY3Jpc3A6ITF9KSxwLmRyYXdMYWJlbHMocix0LHt2YWxzOnUsbGF5ZXI6cyx0cmFuc0ZuOmYsbGFiZWxGbnM6cC5tYWtlTGFiZWxGbnModCwwLDMwKX0pfTt2YXIgQT1iLk1JTlpPT00vMisuODcsVD1cIm0tMC44NywuNWhcIitBK1widjNoLVwiKyhBKzUuMikrXCJsXCIrKEEvMisyLjYpK1wiLC1cIisoLjg3KkErNC41KStcImwyLjYsMS41bC1cIitBLzIrXCIsXCIrLjg3KkErXCJaXCIsTT1cIm0wLjg3LC41aC1cIitBK1widjNoXCIrKEErNS4yKStcImwtXCIrKEEvMisyLjYpK1wiLC1cIisoLjg3KkErNC41KStcImwtMi42LDEuNWxcIitBLzIrXCIsXCIrLjg3KkErXCJaXCIsUz1cIm0wLDFsXCIrQS8yK1wiLFwiKy44NypBK1wibDIuNiwtMS41bC1cIisoQS8yKzIuNikrXCIsLVwiKyguODcqQSs0LjUpK1wibC1cIisoQS8yKzIuNikrXCIsXCIrKC44NypBKzQuNSkrXCJsMi42LDEuNWxcIitBLzIrXCIsLVwiKy44NypBK1wiWlwiLEU9XCJtMC41LDAuNWg1di0yaC01di01aC0ydjVoLTV2Mmg1djVoMlpcIixDPSEwO2Z1bmN0aW9uIEwodCl7bi5zZWxlY3QodCkuc2VsZWN0QWxsKFwiLnpvb21ib3gsLmpzLXpvb21ib3gtYmFja2Ryb3AsLmpzLXpvb21ib3gtbWVudSwuem9vbWJveC1jb3JuZXJzXCIpLnJlbW92ZSgpfXcuaW5pdEludGVyYWN0aW9ucz1mdW5jdGlvbigpe3ZhciB0LGUscixuLHUsaCxmLHAsdixfLHc9dGhpcyxBPXcubGF5ZXJzLnBsb3RiZy5zZWxlY3QoXCJwYXRoXCIpLm5vZGUoKSx6PXcuZ3JhcGhEaXYsTz16Ll9mdWxsTGF5b3V0Ll96b29tbGF5ZXIsST17ZWxlbWVudDpBLGdkOnoscGxvdGluZm86e2lkOncuaWQseGF4aXM6dy54YXhpcyx5YXhpczp3LnlheGlzfSxzdWJwbG90OncuaWQscHJlcEZuOmZ1bmN0aW9uKGEsbyxzKXtJLnhheGVzPVt3LnhheGlzXSxJLnlheGVzPVt3LnlheGlzXTt2YXIgYz16Ll9mdWxsTGF5b3V0LmRyYWdtb2RlO0kubWluRHJhZz1cImxhc3NvXCI9PT1jPzE6dm9pZCAwLFwiem9vbVwiPT09Yz8oSS5tb3ZlRm49TixJLmNsaWNrRm49UCxJLmRvbmVGbj1qLGZ1bmN0aW9uKGEsbyxzKXt2YXIgYz1BLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3Q9by1jLmxlZnQsZT1zLWMudG9wLHI9e2E6dy5hYXhpcy5yYW5nZVswXSxiOncuYmF4aXMucmFuZ2VbMV0sYzp3LmNheGlzLnJhbmdlWzFdfSx1PXIsbj13LmFheGlzLnJhbmdlWzFdLXIuYSxoPWkody5ncmFwaERpdi5fZnVsbExheW91dFt3LmlkXS5iZ2NvbG9yKS5nZXRMdW1pbmFuY2UoKSxmPVwiTTAsXCIrdy5oK1wiTFwiK3cudy8yK1wiLCAwTFwiK3cudytcIixcIit3LmgrXCJaXCIscD0hMSx2PU8uYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiY2xhc3NcIixcInpvb21ib3hcIikuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK3cueDArXCIsIFwiK3cueTArXCIpXCIpLnN0eWxlKHtmaWxsOmg+LjI/XCJyZ2JhKDAsMCwwLDApXCI6XCJyZ2JhKDI1NSwyNTUsMjU1LDApXCIsXCJzdHJva2Utd2lkdGhcIjowfSkuYXR0cihcImRcIixmKSxfPU8uYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiY2xhc3NcIixcInpvb21ib3gtY29ybmVyc1wiKS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrdy54MCtcIiwgXCIrdy55MCtcIilcIikuc3R5bGUoe2ZpbGw6bC5iYWNrZ3JvdW5kLHN0cm9rZTpsLmRlZmF1bHRMaW5lLFwic3Ryb2tlLXdpZHRoXCI6MSxvcGFjaXR5OjB9KS5hdHRyKFwiZFwiLFwiTTAsMFpcIikseCh6KX0oMCxvLHMpKTpcInBhblwiPT09Yz8oSS5tb3ZlRm49VixJLmNsaWNrRm49UCxJLmRvbmVGbj1VLHI9e2E6dy5hYXhpcy5yYW5nZVswXSxiOncuYmF4aXMucmFuZ2VbMV0sYzp3LmNheGlzLnJhbmdlWzFdfSx1PXIseCh6KSk6XCJzZWxlY3RcIiE9PWMmJlwibGFzc29cIiE9PWN8fG0oYSxvLHMsSSxjKX19O2Z1bmN0aW9uIEQodCl7dmFyIGU9e307cmV0dXJuIGVbdy5pZCtcIi5hYXhpcy5taW5cIl09dC5hLGVbdy5pZCtcIi5iYXhpcy5taW5cIl09dC5iLGVbdy5pZCtcIi5jYXhpcy5taW5cIl09dC5jLGV9ZnVuY3Rpb24gUCh0LGUpe3ZhciByPXouX2Z1bGxMYXlvdXQuY2xpY2ttb2RlO0woeiksMj09PXQmJih6LmVtaXQoXCJwbG90bHlfZG91YmxlY2xpY2tcIixudWxsKSxhLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix6LEQoe2E6MCxiOjAsYzowfSkpKSxyLmluZGV4T2YoXCJzZWxlY3RcIik+LTEmJjE9PT10JiZ5KGUseixbdy54YXhpc10sW3cueWF4aXNdLHcuaWQsSSksci5pbmRleE9mKFwiZXZlbnRcIik+LTEmJmcuY2xpY2soeixlLHcuaWQpfWZ1bmN0aW9uIFIodCxlKXtyZXR1cm4gMS1lL3cuaH1mdW5jdGlvbiBGKHQsZSl7cmV0dXJuIDEtKHQrKHcuaC1lKS9NYXRoLnNxcnQoMykpL3cud31mdW5jdGlvbiBCKHQsZSl7cmV0dXJuKHQtKHcuaC1lKS9NYXRoLnNxcnQoMykpL3cud31mdW5jdGlvbiBOKGksYSl7dmFyIG89dCtpLHM9ZSthLGw9TWF0aC5tYXgoMCxNYXRoLm1pbigxLFIoMCxlKSxSKDAscykpKSxjPU1hdGgubWF4KDAsTWF0aC5taW4oMSxGKHQsZSksRihvLHMpKSksZD1NYXRoLm1heCgwLE1hdGgubWluKDEsQih0LGUpLEIobyxzKSkpLGc9KGwvMitkKSp3LncsbT0oMS1sLzItYykqdy53LHk9KGcrbSkvMix4PW0tZyxBPSgxLWwpKncuaCxDPUEteC9rO3g8Yi5NSU5aT09NPyh1PXIsdi5hdHRyKFwiZFwiLGYpLF8uYXR0cihcImRcIixcIk0wLDBaXCIpKToodT17YTpyLmErbCpuLGI6ci5iK2MqbixjOnIuYytkKm59LHYuYXR0cihcImRcIixmK1wiTVwiK2crXCIsXCIrQStcIkhcIittK1wiTFwiK3krXCIsXCIrQytcIkxcIitnK1wiLFwiK0ErXCJaXCIpLF8uYXR0cihcImRcIixcIk1cIit0K1wiLFwiK2UrRStcIk1cIitnK1wiLFwiK0ErVCtcIk1cIittK1wiLFwiK0ErTStcIk1cIit5K1wiLFwiK0MrUykpLHB8fCh2LnRyYW5zaXRpb24oKS5zdHlsZShcImZpbGxcIixoPi4yP1wicmdiYSgwLDAsMCwwLjQpXCI6XCJyZ2JhKDI1NSwyNTUsMjU1LDAuMylcIikuZHVyYXRpb24oMjAwKSxfLnRyYW5zaXRpb24oKS5zdHlsZShcIm9wYWNpdHlcIiwxKS5kdXJhdGlvbigyMDApLHA9ITApfWZ1bmN0aW9uIGooKXtMKHopLHUhPT1yJiYoYS5jYWxsKFwiX2d1aVJlbGF5b3V0XCIseixEKHUpKSxDJiZ6LmRhdGEmJnouX2NvbnRleHQuc2hvd1RpcHMmJihvLm5vdGlmaWVyKHMoeixcIkRvdWJsZS1jbGljayB0byB6b29tIGJhY2sgb3V0XCIpLFwibG9uZ1wiKSxDPSExKSl9ZnVuY3Rpb24gVih0LGUpe3ZhciBuPXQvdy54YXhpcy5fbSxpPWUvdy55YXhpcy5fbSxhPVsodT17YTpyLmEtaSxiOnIuYisobitpKS8yLGM6ci5jLShuLWkpLzJ9KS5hLHUuYix1LmNdLnNvcnQoKSxvPWEuaW5kZXhPZih1LmEpLHM9YS5pbmRleE9mKHUuYiksbD1hLmluZGV4T2YodS5jKTthWzBdPDAmJihhWzFdK2FbMF0vMjwwPyhhWzJdKz1hWzBdK2FbMV0sYVswXT1hWzFdPTApOihhWzJdKz1hWzBdLzIsYVsxXSs9YVswXS8yLGFbMF09MCksdT17YTphW29dLGI6YVtzXSxjOmFbbF19LGU9KHIuYS11LmEpKncueWF4aXMuX20sdD0oci5jLXUuYy1yLmIrdS5iKSp3LnhheGlzLl9tKTt2YXIgaD1cInRyYW5zbGF0ZShcIisody54MCt0KStcIixcIisody55MCtlKStcIilcIjt3LnBsb3RDb250YWluZXIuc2VsZWN0QWxsKFwiLnNjYXR0ZXJsYXllciwubWFwbGF5ZXJcIikuYXR0cihcInRyYW5zZm9ybVwiLGgpO3ZhciBmPVwidHJhbnNsYXRlKFwiKy10K1wiLFwiKy1lK1wiKVwiO3cuY2xpcERlZlJlbGF0aXZlLnNlbGVjdChcInBhdGhcIikuYXR0cihcInRyYW5zZm9ybVwiLGYpLHcuYWF4aXMucmFuZ2U9W3UuYSx3LnN1bS11LmItdS5jXSx3LmJheGlzLnJhbmdlPVt3LnN1bS11LmEtdS5jLHUuYl0sdy5jYXhpcy5yYW5nZT1bdy5zdW0tdS5hLXUuYix1LmNdLHcuZHJhd0F4ZXMoITEpLHcuX2hhc0NsaXBPbkF4aXNGYWxzZSYmdy5wbG90Q29udGFpbmVyLnNlbGVjdChcIi5zY2F0dGVybGF5ZXJcIikuc2VsZWN0QWxsKFwiLnRyYWNlXCIpLmNhbGwoYy5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLHcpfWZ1bmN0aW9uIFUoKXthLmNhbGwoXCJfZ3VpUmVsYXlvdXRcIix6LEQodSkpfUEub25tb3VzZW1vdmU9ZnVuY3Rpb24odCl7Zy5ob3Zlcih6LHQsdy5pZCksei5fZnVsbExheW91dC5fbGFzdGhvdmVyPUEsei5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PXcuaWR9LEEub25tb3VzZW91dD1mdW5jdGlvbih0KXt6Ll9kcmFnZ2luZ3x8ZC51bmhvdmVyKHosdCl9LGQuaW5pdChJKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50XCI6NTk2LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzXCI6NjY2LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzXCI6NzU1LFwiLi4vY2FydGVzaWFuL3NlbGVjdFwiOjc2NixcIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydFwiOjc2NyxcIi4uL3Bsb3RzXCI6ODEwLGQzOjE1NSx0aW55Y29sb3IyOjUyMn1dLDgyOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2xpYi9sb2dnZXJzXCIpLGk9dChcIi4vbGliL25vb3BcIiksYT10KFwiLi9saWIvcHVzaF91bmlxdWVcIiksbz10KFwiLi9saWIvaXNfcGxhaW5fb2JqZWN0XCIpLHM9dChcIi4vbGliL2V4dGVuZFwiKSxsPXQoXCIuL3Bsb3RzL2F0dHJpYnV0ZXNcIiksYz10KFwiLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlc1wiKSx1PXMuZXh0ZW5kRmxhdCxoPXMuZXh0ZW5kRGVlcEFsbDtmdW5jdGlvbiBmKHQpe3ZhciBlPXQubmFtZSxpPXQuY2F0ZWdvcmllcyxhPXQubWV0YTtpZihyLm1vZHVsZXNbZV0pbi5sb2coXCJUeXBlIFwiK2UrXCIgYWxyZWFkeSByZWdpc3RlcmVkXCIpO2Vsc2V7ci5zdWJwbG90c1JlZ2lzdHJ5W3QuYmFzZVBsb3RNb2R1bGUubmFtZV18fGZ1bmN0aW9uKHQpe3ZhciBlPXQubmFtZTtpZihyLnN1YnBsb3RzUmVnaXN0cnlbZV0pcmV0dXJuIHZvaWQgbi5sb2coXCJQbG90IHR5cGUgXCIrZStcIiBhbHJlYWR5IHJlZ2lzdGVyZWQuXCIpO2Zvcih2YXIgaSBpbiB2KHQpLHIuc3VicGxvdHNSZWdpc3RyeVtlXT10LHIuY29tcG9uZW50c1JlZ2lzdHJ5KXgoaSx0Lm5hbWUpfSh0LmJhc2VQbG90TW9kdWxlKTtmb3IodmFyIG89e30scz0wO3M8aS5sZW5ndGg7cysrKW9baVtzXV09ITAsci5hbGxDYXRlZ29yaWVzW2lbc11dPSEwO2Zvcih2YXIgbCBpbiByLm1vZHVsZXNbZV09e19tb2R1bGU6dCxjYXRlZ29yaWVzOm99LGEmJk9iamVjdC5rZXlzKGEpLmxlbmd0aCYmKHIubW9kdWxlc1tlXS5tZXRhPWEpLHIuYWxsVHlwZXMucHVzaChlKSxyLmNvbXBvbmVudHNSZWdpc3RyeSltKGwsZSk7dC5sYXlvdXRBdHRyaWJ1dGVzJiZ1KHIudHJhY2VMYXlvdXRBdHRyaWJ1dGVzLHQubGF5b3V0QXR0cmlidXRlcyl9fWZ1bmN0aW9uIHAodCl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQubmFtZSl0aHJvdyBuZXcgRXJyb3IoXCJDb21wb25lbnQgbW9kdWxlICpuYW1lKiBtdXN0IGJlIGEgc3RyaW5nLlwiKTt2YXIgZT10Lm5hbWU7Zm9yKHZhciBuIGluIHIuY29tcG9uZW50c1JlZ2lzdHJ5W2VdPXQsdC5sYXlvdXRBdHRyaWJ1dGVzJiYodC5sYXlvdXRBdHRyaWJ1dGVzLl9pc0xpbmtlZFRvQXJyYXkmJmEoci5sYXlvdXRBcnJheUNvbnRhaW5lcnMsZSksdih0KSksci5tb2R1bGVzKW0oZSxuKTtmb3IodmFyIGkgaW4gci5zdWJwbG90c1JlZ2lzdHJ5KXgoZSxpKTtmb3IodmFyIG8gaW4gci50cmFuc2Zvcm1zUmVnaXN0cnkpeShlLG8pO3Quc2NoZW1hJiZ0LnNjaGVtYS5sYXlvdXQmJmgoYyx0LnNjaGVtYS5sYXlvdXQpfWZ1bmN0aW9uIGQodCl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQubmFtZSl0aHJvdyBuZXcgRXJyb3IoXCJUcmFuc2Zvcm0gbW9kdWxlICpuYW1lKiBtdXN0IGJlIGEgc3RyaW5nLlwiKTt2YXIgZT1cIlRyYW5zZm9ybSBtb2R1bGUgXCIrdC5uYW1lLGk9XCJmdW5jdGlvblwiPT10eXBlb2YgdC50cmFuc2Zvcm0sYT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmNhbGNUcmFuc2Zvcm07aWYoIWkmJiFhKXRocm93IG5ldyBFcnJvcihlK1wiIGlzIG1pc3NpbmcgYSAqdHJhbnNmb3JtKiBvciAqY2FsY1RyYW5zZm9ybSogbWV0aG9kLlwiKTtmb3IodmFyIHMgaW4gaSYmYSYmbi5sb2coW2UrXCIgaGFzIGJvdGggYSAqdHJhbnNmb3JtKiBhbmQgKmNhbGNUcmFuc2Zvcm0qIG1ldGhvZHMuXCIsXCJQbGVhc2Ugbm90ZSB0aGF0IGFsbCAqdHJhbnNmb3JtKiBtZXRob2RzIGFyZSBleGVjdXRlZFwiLFwiYmVmb3JlIGFsbCAqY2FsY1RyYW5zZm9ybSogbWV0aG9kcy5cIl0uam9pbihcIiBcIikpLG8odC5hdHRyaWJ1dGVzKXx8bi5sb2coZStcIiByZWdpc3RlcmVkIHdpdGhvdXQgYW4gKmF0dHJpYnV0ZXMqIG9iamVjdC5cIiksXCJmdW5jdGlvblwiIT10eXBlb2YgdC5zdXBwbHlEZWZhdWx0cyYmbi5sb2coZStcIiByZWdpc3RlcmVkIHdpdGhvdXQgYSAqc3VwcGx5RGVmYXVsdHMqIG1ldGhvZC5cIiksci50cmFuc2Zvcm1zUmVnaXN0cnlbdC5uYW1lXT10LHIuY29tcG9uZW50c1JlZ2lzdHJ5KXkocyx0Lm5hbWUpfWZ1bmN0aW9uIGcodCl7dmFyIGU9dC5uYW1lLG49ZS5zcGxpdChcIi1cIilbMF0saT10LmRpY3Rpb25hcnksYT10LmZvcm1hdCxvPWkmJk9iamVjdC5rZXlzKGkpLmxlbmd0aCxzPWEmJk9iamVjdC5rZXlzKGEpLmxlbmd0aCxsPXIubG9jYWxlUmVnaXN0cnksYz1sW2VdO2lmKGN8fChsW2VdPWM9e30pLG4hPT1lKXt2YXIgdT1sW25dO3V8fChsW25dPXU9e30pLG8mJnUuZGljdGlvbmFyeT09PWMuZGljdGlvbmFyeSYmKHUuZGljdGlvbmFyeT1pKSxzJiZ1LmZvcm1hdD09PWMuZm9ybWF0JiYodS5mb3JtYXQ9YSl9byYmKGMuZGljdGlvbmFyeT1pKSxzJiYoYy5mb3JtYXQ9YSl9ZnVuY3Rpb24gdih0KXtpZih0LmxheW91dEF0dHJpYnV0ZXMpe3ZhciBlPXQubGF5b3V0QXR0cmlidXRlcy5fYXJyYXlBdHRyUmVnZXhwcztpZihlKWZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWEoci5sYXlvdXRBcnJheVJlZ2V4ZXMsZVtuXSl9fWZ1bmN0aW9uIG0odCxlKXt2YXIgbj1yLmNvbXBvbmVudHNSZWdpc3RyeVt0XS5zY2hlbWE7aWYobiYmbi50cmFjZXMpe3ZhciBpPW4udHJhY2VzW2VdO2kmJmgoci5tb2R1bGVzW2VdLl9tb2R1bGUuYXR0cmlidXRlcyxpKX19ZnVuY3Rpb24geSh0LGUpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W3RdLnNjaGVtYTtpZihuJiZuLnRyYW5zZm9ybXMpe3ZhciBpPW4udHJhbnNmb3Jtc1tlXTtpJiZoKHIudHJhbnNmb3Jtc1JlZ2lzdHJ5W2VdLmF0dHJpYnV0ZXMsaSl9fWZ1bmN0aW9uIHgodCxlKXt2YXIgbj1yLmNvbXBvbmVudHNSZWdpc3RyeVt0XS5zY2hlbWE7aWYobiYmbi5zdWJwbG90cyl7dmFyIGk9ci5zdWJwbG90c1JlZ2lzdHJ5W2VdLGE9aS5sYXlvdXRBdHRyaWJ1dGVzLG89XCJzdWJwbG90XCI9PT1pLmF0dHI/aS5uYW1lOmkuYXR0cjtBcnJheS5pc0FycmF5KG8pJiYobz1vWzBdKTt2YXIgcz1uLnN1YnBsb3RzW29dO2EmJnMmJmgoYSxzKX19ZnVuY3Rpb24gYih0KXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgdCYmKHQ9dC50eXBlKSx0fXIubW9kdWxlcz17fSxyLmFsbENhdGVnb3JpZXM9e30sci5hbGxUeXBlcz1bXSxyLnN1YnBsb3RzUmVnaXN0cnk9e30sci50cmFuc2Zvcm1zUmVnaXN0cnk9e30sci5jb21wb25lbnRzUmVnaXN0cnk9e30sci5sYXlvdXRBcnJheUNvbnRhaW5lcnM9W10sci5sYXlvdXRBcnJheVJlZ2V4ZXM9W10sci50cmFjZUxheW91dEF0dHJpYnV0ZXM9e30sci5sb2NhbGVSZWdpc3RyeT17fSxyLmFwaU1ldGhvZFJlZ2lzdHJ5PXt9LHIuY29sbGVjdGFibGVTdWJwbG90VHlwZXM9bnVsbCxyLnJlZ2lzdGVyPWZ1bmN0aW9uKHQpe2lmKHIuY29sbGVjdGFibGVTdWJwbG90VHlwZXM9bnVsbCwhdCl0aHJvdyBuZXcgRXJyb3IoXCJObyBhcmd1bWVudCBwYXNzZWQgdG8gUGxvdGx5LnJlZ2lzdGVyLlwiKTt0JiYhQXJyYXkuaXNBcnJheSh0KSYmKHQ9W3RdKTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG49dFtlXTtpZighbil0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIG1vZHVsZSB3YXMgYXR0ZW1wdGVkIHRvIGJlIHJlZ2lzdGVyZWQhXCIpO3N3aXRjaChuLm1vZHVsZVR5cGUpe2Nhc2VcInRyYWNlXCI6ZihuKTticmVhaztjYXNlXCJ0cmFuc2Zvcm1cIjpkKG4pO2JyZWFrO2Nhc2VcImNvbXBvbmVudFwiOnAobik7YnJlYWs7Y2FzZVwibG9jYWxlXCI6ZyhuKTticmVhaztjYXNlXCJhcGlNZXRob2RcIjp2YXIgaT1uLm5hbWU7ci5hcGlNZXRob2RSZWdpc3RyeVtpXT1uLmZuO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBtb2R1bGUgd2FzIGF0dGVtcHRlZCB0byBiZSByZWdpc3RlcmVkIVwiKX19fSxyLmdldE1vZHVsZT1mdW5jdGlvbih0KXt2YXIgZT1yLm1vZHVsZXNbYih0KV07cmV0dXJuISFlJiZlLl9tb2R1bGV9LHIudHJhY2VJcz1mdW5jdGlvbih0LGUpe2lmKFwidmFyaW91c1wiPT09KHQ9Yih0KSkpcmV0dXJuITE7dmFyIGk9ci5tb2R1bGVzW3RdO3JldHVybiBpfHwodCYmXCJhcmVhXCIhPT10JiZuLmxvZyhcIlVucmVjb2duaXplZCB0cmFjZSB0eXBlIFwiK3QrXCIuXCIpLGk9ci5tb2R1bGVzW2wudHlwZS5kZmx0XSksISFpLmNhdGVnb3JpZXNbZV19LHIuZ2V0VHJhbnNmb3JtSW5kaWNlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPXQudHJhbnNmb3Jtc3x8W10saT0wO2k8bi5sZW5ndGg7aSsrKW5baV0udHlwZT09PWUmJnIucHVzaChpKTtyZXR1cm4gcn0sci5oYXNUcmFuc2Zvcm09ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC50cmFuc2Zvcm1zfHxbXSxuPTA7bjxyLmxlbmd0aDtuKyspaWYocltuXS50eXBlPT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0sci5nZXRDb21wb25lbnRNZXRob2Q9ZnVuY3Rpb24odCxlKXt2YXIgbj1yLmNvbXBvbmVudHNSZWdpc3RyeVt0XTtyZXR1cm4gbiYmbltlXXx8aX0sci5jYWxsPWZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzWzBdLGU9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIHIuYXBpTWV0aG9kUmVnaXN0cnlbdF0uYXBwbHkobnVsbCxlKX19LHtcIi4vbGliL2V4dGVuZFwiOjY5MSxcIi4vbGliL2lzX3BsYWluX29iamVjdFwiOjcwMixcIi4vbGliL2xvZ2dlcnNcIjo3MDUsXCIuL2xpYi9ub29wXCI6NzEwLFwiLi9saWIvcHVzaF91bmlxdWVcIjo3MTUsXCIuL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDYsXCIuL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzXCI6ODAxfV0sODMwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2xpYlwiKSxpPW4uZXh0ZW5kRmxhdCxhPW4uZXh0ZW5kRGVlcDtmdW5jdGlvbiBvKHQpe3ZhciBlO3N3aXRjaCh0KXtjYXNlXCJ0aGVtZXNfX3RodW1iXCI6ZT17YXV0b3NpemU6ITAsd2lkdGg6MTUwLGhlaWdodDoxNTAsdGl0bGU6e3RleHQ6XCJcIn0sc2hvd2xlZ2VuZDohMSxtYXJnaW46e2w6NSxyOjUsdDo1LGI6NSxwYWQ6MH0sYW5ub3RhdGlvbnM6W119O2JyZWFrO2Nhc2VcInRodW1ibmFpbFwiOmU9e3RpdGxlOnt0ZXh0OlwiXCJ9LGhpZGVzb3VyY2VzOiEwLHNob3dsZWdlbmQ6ITEsYm9yZGVyd2lkdGg6MCxib3JkZXJjb2xvcjpcIlwiLG1hcmdpbjp7bDoxLHI6MSx0OjEsYjoxLHBhZDowfSxhbm5vdGF0aW9uczpbXX07YnJlYWs7ZGVmYXVsdDplPXt9fXJldHVybiBlfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByO3QuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5pc1BvbGFyJiYodD10LmZyYW1ld29yay5nZXRDb25maWcoKSk7dmFyIG4scz10LmRhdGEsbD10LmxheW91dCxjPWEoW10scyksdT1hKHt9LGwsbyhlLnRpbGVDbGFzcykpLGg9dC5fY29udGV4dHx8e307aWYoZS53aWR0aCYmKHUud2lkdGg9ZS53aWR0aCksZS5oZWlnaHQmJih1LmhlaWdodD1lLmhlaWdodCksXCJ0aHVtYm5haWxcIj09PWUudGlsZUNsYXNzfHxcInRoZW1lc19fdGh1bWJcIj09PWUudGlsZUNsYXNzKXt1LmFubm90YXRpb25zPVtdO3ZhciBmPU9iamVjdC5rZXlzKHUpO2ZvcihyPTA7cjxmLmxlbmd0aDtyKyspbj1mW3JdLFtcInhheGlzXCIsXCJ5YXhpc1wiLFwiemF4aXNcIl0uaW5kZXhPZihuLnNsaWNlKDAsNSkpPi0xJiYodVtmW3JdXS50aXRsZT17dGV4dDpcIlwifSk7Zm9yKHI9MDtyPGMubGVuZ3RoO3IrKyl7dmFyIHA9Y1tyXTtwLnNob3dzY2FsZT0hMSxwLm1hcmtlciYmKHAubWFya2VyLnNob3dzY2FsZT0hMSksXCJwaWVcIj09PXAudHlwZSYmKHAudGV4dHBvc2l0aW9uPVwibm9uZVwiKX19aWYoQXJyYXkuaXNBcnJheShlLmFubm90YXRpb25zKSlmb3Iocj0wO3I8ZS5hbm5vdGF0aW9ucy5sZW5ndGg7cisrKXUuYW5ub3RhdGlvbnMucHVzaChlLmFubm90YXRpb25zW3JdKTt2YXIgZD1PYmplY3Qua2V5cyh1KS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQubWF0Y2goL15zY2VuZVxcZCokLyl9KTtpZihkLmxlbmd0aCl7dmFyIGc9e307Zm9yKFwidGh1bWJuYWlsXCI9PT1lLnRpbGVDbGFzcyYmKGc9e3RpdGxlOnt0ZXh0OlwiXCJ9LHNob3dheGVzbGFiZWxzOiExLHNob3d0aWNrbGFiZWxzOiExLGxpbmV0aWNrZW5hYmxlOiExfSkscj0wO3I8ZC5sZW5ndGg7cisrKXt2YXIgdj11W2Rbcl1dO3YueGF4aXN8fCh2LnhheGlzPXt9KSx2LnlheGlzfHwodi55YXhpcz17fSksdi56YXhpc3x8KHYuemF4aXM9e30pLGkodi54YXhpcyxnKSxpKHYueWF4aXMsZyksaSh2LnpheGlzLGcpLHYuX3NjZW5lPW51bGx9fXZhciBtPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7ZS50aWxlQ2xhc3MmJihtLmNsYXNzTmFtZT1lLnRpbGVDbGFzcyk7dmFyIHk9e2dkOm0sdGQ6bSxsYXlvdXQ6dSxkYXRhOmMsY29uZmlnOntzdGF0aWNQbG90OnZvaWQgMD09PWUuc3RhdGljUGxvdHx8ZS5zdGF0aWNQbG90LHBsb3RHbFBpeGVsUmF0aW86dm9pZCAwPT09ZS5wbG90R2xQaXhlbFJhdGlvPzI6ZS5wbG90R2xQaXhlbFJhdGlvLGRpc3BsYXlsb2dvOmUuZGlzcGxheWxvZ298fCExLHNob3dMaW5rOmUuc2hvd0xpbmt8fCExLHNob3dUaXBzOmUuc2hvd1RpcHN8fCExLG1hcGJveEFjY2Vzc1Rva2VuOmgubWFwYm94QWNjZXNzVG9rZW59fTtyZXR1cm5cInRyYW5zcGFyZW50XCIhPT1lLnNldEJhY2tncm91bmQmJih5LmNvbmZpZy5zZXRCYWNrZ3JvdW5kPWUuc2V0QmFja2dyb3VuZHx8XCJvcGFxdWVcIikseS5nZC5kZWZhdWx0TGF5b3V0PW8oZS50aWxlQ2xhc3MpLHl9fSx7XCIuLi9saWJcIjo3MDF9XSw4MzE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vcGxvdF9hcGkvdG9faW1hZ2VcIiksaT10KFwiLi4vbGliXCIpLGE9dChcIi4vZmlsZXNhdmVyXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBpLmlzUGxhaW5PYmplY3QodCl8fChyPWkuZ2V0R3JhcGhEaXYodCkpLChlPWV8fHt9KS5mb3JtYXQ9ZS5mb3JtYXR8fFwicG5nXCIsbmV3IFByb21pc2UoZnVuY3Rpb24obyxzKXtyJiZyLl9zbmFwc2hvdEluUHJvZ3Jlc3MmJnMobmV3IEVycm9yKFwiU25hcHNob3R0aW5nIGFscmVhZHkgaW4gcHJvZ3Jlc3MuXCIpKSxpLmlzSUUoKSYmXCJzdmdcIiE9PWUuZm9ybWF0JiZzKG5ldyBFcnJvcihcIlNvcnJ5IElFIGRvZXMgbm90IHN1cHBvcnQgZG93bmxvYWRpbmcgZnJvbSBjYW52YXMuIFRyeSB7Zm9ybWF0OidzdmcnfSBpbnN0ZWFkLlwiKSksciYmKHIuX3NuYXBzaG90SW5Qcm9ncmVzcz0hMCk7dmFyIGw9bih0LGUpLGM9ZS5maWxlbmFtZXx8dC5mbnx8XCJuZXdwbG90XCI7Yys9XCIuXCIrZS5mb3JtYXQsbC50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiByJiYoci5fc25hcHNob3RJblByb2dyZXNzPSExKSxhKHQsYyl9KS50aGVuKGZ1bmN0aW9uKHQpe28odCl9KS5jYXRjaChmdW5jdGlvbih0KXtyJiYoci5fc25hcHNob3RJblByb2dyZXNzPSExKSxzKHQpfSl9KX19LHtcIi4uL2xpYlwiOjcwMSxcIi4uL3Bsb3RfYXBpL3RvX2ltYWdlXCI6NzQyLFwiLi9maWxlc2F2ZXJcIjo4MzJ9XSw4MzI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKSxuPVwiZG93bmxvYWRcImluIHIsaT0vVmVyc2lvblxcL1tcXGRcXC5dKy4qU2FmYXJpLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihhLG8pe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBuYXZpZ2F0b3ImJi9NU0lFIFsxLTldXFwuLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiZvKG5ldyBFcnJvcihcIklFIDwgMTAgdW5zdXBwb3J0ZWRcIikpLGkmJihkb2N1bWVudC5sb2NhdGlvbi5ocmVmPVwiZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIit0LnNsaWNlKHQuc2VhcmNoKC9bLDtdLykpLGEoZSkpLGV8fChlPVwiZG93bmxvYWRcIiksbiYmKHIuaHJlZj10LHIuZG93bmxvYWQ9ZSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHIpLHIuY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHIpLGEoZSkpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvci5tc1NhdmVCbG9iKXt2YXIgcz10LnNwbGl0KC9eZGF0YTppbWFnZVxcL3N2Z1xcK3htbCwvKVsxXSxsPWRlY29kZVVSSUNvbXBvbmVudChzKTtuYXZpZ2F0b3IubXNTYXZlQmxvYihuZXcgQmxvYihbbF0pLGUpLGEoZSl9byhuZXcgRXJyb3IoXCJkb3dubG9hZCBlcnJvclwiKSl9KX19LHt9XSw4MzM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLmdldERlbGF5PWZ1bmN0aW9uKHQpe3JldHVybiB0Ll9oYXMmJih0Ll9oYXMoXCJnbDNkXCIpfHx0Ll9oYXMoXCJnbDJkXCIpfHx0Ll9oYXMoXCJtYXBib3hcIikpPzUwMDowfSxyLmdldFJlZHJhd0Z1bmM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dHx8e307aWYoISghKGUuX2hhcyYmZS5faGFzKFwicG9sYXJcIikpJiZ0LmRhdGEmJnQuZGF0YVswXSYmdC5kYXRhWzBdLnIpKXJldHVybiBmdW5jdGlvbigpeyh0LmNhbGNkYXRhfHxbXSkuZm9yRWFjaChmdW5jdGlvbih0KXt0WzBdJiZ0WzBdLnQmJnRbMF0udC5jYiYmdFswXS50LmNiKCl9KX19fSx7fV0sODM0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vaGVscGVyc1wiKSxpPXtnZXREZWxheTpuLmdldERlbGF5LGdldFJlZHJhd0Z1bmM6bi5nZXRSZWRyYXdGdW5jLGNsb25lOnQoXCIuL2Nsb25lcGxvdFwiKSx0b1NWRzp0KFwiLi90b3N2Z1wiKSxzdmdUb0ltZzp0KFwiLi9zdmd0b2ltZ1wiKSx0b0ltYWdlOnQoXCIuL3RvaW1hZ2VcIiksZG93bmxvYWRJbWFnZTp0KFwiLi9kb3dubG9hZFwiKX07ZS5leHBvcnRzPWl9LHtcIi4vY2xvbmVwbG90XCI6ODMwLFwiLi9kb3dubG9hZFwiOjgzMSxcIi4vaGVscGVyc1wiOjgzMyxcIi4vc3ZndG9pbWdcIjo4MzUsXCIuL3RvaW1hZ2VcIjo4MzYsXCIuL3Rvc3ZnXCI6ODM3fV0sODM1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2xpYlwiKSxpPXQoXCJldmVudHNcIikuRXZlbnRFbWl0dGVyO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmVtaXR0ZXJ8fG5ldyBpLHI9bmV3IFByb21pc2UoZnVuY3Rpb24oaSxhKXt2YXIgbz13aW5kb3cuSW1hZ2Uscz10LnN2ZyxsPXQuZm9ybWF0fHxcInBuZ1wiO2lmKG4uaXNJRSgpJiZcInN2Z1wiIT09bCl7dmFyIGM9bmV3IEVycm9yKFwiU29ycnkgSUUgZG9lcyBub3Qgc3VwcG9ydCBkb3dubG9hZGluZyBmcm9tIGNhbnZhcy4gVHJ5IHtmb3JtYXQ6J3N2Zyd9IGluc3RlYWQuXCIpO3JldHVybiBhKGMpLHQucHJvbWlzZT9yOmUuZW1pdChcImVycm9yXCIsYyl9dmFyIHU9dC5jYW52YXMsaD10LnNjYWxlfHwxLGY9dC53aWR0aHx8MzAwLHA9dC5oZWlnaHR8fDE1MCxkPWgqZixnPWgqcCx2PXUuZ2V0Q29udGV4dChcIjJkXCIpLG09bmV3IG8seT1cImRhdGE6aW1hZ2Uvc3ZnK3htbCxcIitlbmNvZGVVUklDb21wb25lbnQocyk7dS53aWR0aD1kLHUuaGVpZ2h0PWcsbS5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgcjtzd2l0Y2goXCJzdmdcIiE9PWwmJnYuZHJhd0ltYWdlKG0sMCwwLGQsZyksbCl7Y2FzZVwianBlZ1wiOnI9dS50b0RhdGFVUkwoXCJpbWFnZS9qcGVnXCIpO2JyZWFrO2Nhc2VcInBuZ1wiOnI9dS50b0RhdGFVUkwoXCJpbWFnZS9wbmdcIik7YnJlYWs7Y2FzZVwid2VicFwiOnI9dS50b0RhdGFVUkwoXCJpbWFnZS93ZWJwXCIpO2JyZWFrO2Nhc2VcInN2Z1wiOnI9eTticmVhaztkZWZhdWx0OnZhciBuPVwiSW1hZ2UgZm9ybWF0IGlzIG5vdCBqcGVnLCBwbmcsIHN2ZyBvciB3ZWJwLlwiO2lmKGEobmV3IEVycm9yKG4pKSwhdC5wcm9taXNlKXJldHVybiBlLmVtaXQoXCJlcnJvclwiLG4pfWkociksdC5wcm9taXNlfHxlLmVtaXQoXCJzdWNjZXNzXCIscil9LG0ub25lcnJvcj1mdW5jdGlvbihyKXtpZihhKHIpLCF0LnByb21pc2UpcmV0dXJuIGUuZW1pdChcImVycm9yXCIscil9LG0uc3JjPXl9KTtyZXR1cm4gdC5wcm9taXNlP3I6ZX19LHtcIi4uL2xpYlwiOjcwMSxldmVudHM6OTV9XSw4MzY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZXZlbnRzXCIpLkV2ZW50RW1pdHRlcixpPXQoXCIuLi9yZWdpc3RyeVwiKSxhPXQoXCIuLi9saWJcIiksbz10KFwiLi9oZWxwZXJzXCIpLHM9dChcIi4vY2xvbmVwbG90XCIpLGw9dChcIi4vdG9zdmdcIiksYz10KFwiLi9zdmd0b2ltZ1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgbix1PXModCx7Zm9ybWF0OlwicG5nXCJ9KSxoPXUuZ2Q7aC5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsaC5zdHlsZS5sZWZ0PVwiLTUwMDBweFwiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaCk7dmFyIGY9by5nZXRSZWRyYXdGdW5jKGgpO3JldHVybiBpLmNhbGwoXCJwbG90XCIsaCx1LmRhdGEsdS5sYXlvdXQsdS5jb25maWcpLnRoZW4oZikudGhlbihmdW5jdGlvbigpe3ZhciB0PW8uZ2V0RGVsYXkoaC5fZnVsbExheW91dCk7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciB0PWwoaCksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO24uaWQ9YS5yYW5kc3RyKCksKHI9Yyh7Zm9ybWF0OmUuZm9ybWF0LHdpZHRoOmguX2Z1bGxMYXlvdXQud2lkdGgsaGVpZ2h0OmguX2Z1bGxMYXlvdXQuaGVpZ2h0LGNhbnZhczpuLGVtaXR0ZXI6cixzdmc6dH0pKS5jbGVhbj1mdW5jdGlvbigpe2gmJmRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaCl9fSx0KX0pLmNhdGNoKGZ1bmN0aW9uKHQpe3IuZW1pdChcImVycm9yXCIsdCl9KSxyfX0se1wiLi4vbGliXCI6NzAxLFwiLi4vcmVnaXN0cnlcIjo4MjksXCIuL2Nsb25lcGxvdFwiOjgzMCxcIi4vaGVscGVyc1wiOjgzMyxcIi4vc3ZndG9pbWdcIjo4MzUsXCIuL3Rvc3ZnXCI6ODM3LGV2ZW50czo5NX1dLDgzNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi9saWJcIiksYT10KFwiLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLG89dChcIi4uL2NvbXBvbmVudHMvY29sb3JcIikscz10KFwiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIiksbD0vXCIvZyxjPW5ldyBSZWdFeHAoJyhcIlRPQkVTVFJJUFBFRCl8KFRPQkVTVFJJUFBFRFwiKScsXCJnXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIHUsaD10Ll9mdWxsTGF5b3V0LGY9aC5fcGFwZXIscD1oLl90b3BwYXBlcixkPWgud2lkdGgsZz1oLmhlaWdodDtmLmluc2VydChcInJlY3RcIixcIjpmaXJzdC1jaGlsZFwiKS5jYWxsKGEuc2V0UmVjdCwwLDAsZCxnKS5jYWxsKG8uZmlsbCxoLnBhcGVyX2JnY29sb3IpO3ZhciB2PWguX2Jhc2VQbG90TW9kdWxlc3x8W107Zm9yKHU9MDt1PHYubGVuZ3RoO3UrKyl7dmFyIG09dlt1XTttLnRvU1ZHJiZtLnRvU1ZHKHQpfWlmKHApe3ZhciB5PXAubm9kZSgpLmNoaWxkTm9kZXMseD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh5KTtmb3IodT0wO3U8eC5sZW5ndGg7dSsrKXt2YXIgYj14W3VdO2IuY2hpbGROb2Rlcy5sZW5ndGgmJmYubm9kZSgpLmFwcGVuZENoaWxkKGIpfX1oLl9kcmFnZ2VycyYmaC5fZHJhZ2dlcnMucmVtb3ZlKCksZi5ub2RlKCkuc3R5bGUuYmFja2dyb3VuZD1cIlwiLGYuc2VsZWN0QWxsKFwidGV4dFwiKS5hdHRyKHtcImRhdGEtdW5mb3JtYXR0ZWRcIjpudWxsLFwiZGF0YS1tYXRoXCI6bnVsbH0pLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTtpZihcImhpZGRlblwiIT09dGhpcy5zdHlsZS52aXNpYmlsaXR5JiZcIm5vbmVcIiE9PXRoaXMuc3R5bGUuZGlzcGxheSl7dC5zdHlsZSh7dmlzaWJpbGl0eTpudWxsLGRpc3BsYXk6bnVsbH0pO3ZhciBlPXRoaXMuc3R5bGUuZm9udEZhbWlseTtlJiYtMSE9PWUuaW5kZXhPZignXCInKSYmdC5zdHlsZShcImZvbnQtZmFtaWx5XCIsZS5yZXBsYWNlKGwsXCJUT0JFU1RSSVBQRURcIikpfWVsc2UgdC5yZW1vdmUoKX0pLGYuc2VsZWN0QWxsKFwiLnBvaW50LCAuc2NhdHRlcnB0cywgLmxlZ2VuZGZpbGw+cGF0aCwgLmxlZ2VuZGxpbmVzPnBhdGgsIC5jYmZpbGxcIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9dGhpcy5zdHlsZS5maWxsO2UmJi0xIT09ZS5pbmRleE9mKFwidXJsKFwiKSYmdC5zdHlsZShcImZpbGxcIixlLnJlcGxhY2UobCxcIlRPQkVTVFJJUFBFRFwiKSk7dmFyIHI9dGhpcy5zdHlsZS5zdHJva2U7ciYmLTEhPT1yLmluZGV4T2YoXCJ1cmwoXCIpJiZ0LnN0eWxlKFwic3Ryb2tlXCIsci5yZXBsYWNlKGwsXCJUT0JFU1RSSVBQRURcIikpfSksXCJwZGZcIiE9PWUmJlwiZXBzXCIhPT1lfHxmLnNlbGVjdEFsbChcIiNNYXRoSmF4X1NWR19nbHlwaHMgcGF0aFwiKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsMCksZi5ub2RlKCkuc2V0QXR0cmlidXRlTlMocy54bWxucyxcInhtbG5zXCIscy5zdmcpLGYubm9kZSgpLnNldEF0dHJpYnV0ZU5TKHMueG1sbnMsXCJ4bWxuczp4bGlua1wiLHMueGxpbmspLFwic3ZnXCI9PT1lJiZyJiYoZi5hdHRyKFwid2lkdGhcIixyKmQpLGYuYXR0cihcImhlaWdodFwiLHIqZyksZi5hdHRyKFwidmlld0JveFwiLFwiMCAwIFwiK2QrXCIgXCIrZykpO3ZhciBfPShuZXcgd2luZG93LlhNTFNlcmlhbGl6ZXIpLnNlcmlhbGl6ZVRvU3RyaW5nKGYubm9kZSgpKTtyZXR1cm4gXz1mdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdChcImJvZHlcIikuYXBwZW5kKFwiZGl2XCIpLnN0eWxlKHtkaXNwbGF5Olwibm9uZVwifSkuaHRtbChcIlwiKSxyPXQucmVwbGFjZSgvKCZbXjtdKjspL2dpLGZ1bmN0aW9uKHQpe3JldHVyblwiJmx0O1wiPT09dD9cIiYjNjA7XCI6XCImcnQ7XCI9PT10P1wiJiM2MjtcIjotMSE9PXQuaW5kZXhPZihcIjxcIil8fC0xIT09dC5pbmRleE9mKFwiPlwiKT9cIlwiOmUuaHRtbCh0KS50ZXh0KCl9KTtyZXR1cm4gZS5yZW1vdmUoKSxyfShfKSxfPShfPV8ucmVwbGFjZSgvJig/IVxcdys7fFxcI1swLTldKzt8IFxcI3hbMC05QS1GXSs7KS9nLFwiJmFtcDtcIikpLnJlcGxhY2UoYyxcIidcIiksaS5pc0lFKCkmJihfPShfPShfPV8ucmVwbGFjZSgvXCIvZ2ksXCInXCIpKS5yZXBsYWNlKC8oXFwoJyMpKFteJ10qKSgnXFwpKS9naSwnKFwiIyQyXCIpJykpLnJlcGxhY2UoLyhcXFxcJykvZ2ksJ1wiJykpLF99fSx7XCIuLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIjo2NzksXCIuLi9saWJcIjo3MDEsZDM6MTU1fV0sODM4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKS5tZXJnZUFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXRbcl0uaT1yO24oZS50ZXh0LHQsXCJ0eFwiKSxuKGUuaG92ZXJ0ZXh0LHQsXCJodHhcIik7dmFyIGk9ZS5tYXJrZXI7aWYoaSl7bihpLm9wYWNpdHksdCxcIm1vXCIpLG4oaS5jb2xvcix0LFwibWNcIik7dmFyIGE9aS5saW5lO2EmJihuKGEuY29sb3IsdCxcIm1sY1wiKSxuKGEud2lkdGgsdCxcIm1sd1wiKSl9fX0se1wiLi4vLi4vbGliXCI6NzAxfV0sODM5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCIpLGw9dChcIi4vY29uc3RhbnRzLmpzXCIpLGM9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCx1PXMoe2VkaXRUeXBlOlwiY2FsY1wiLGFycmF5T2s6ITAsY29sb3JFZGl0VHlwZTpcInN0eWxlXCJ9KSxoPWMoe30sbi5tYXJrZXIubGluZS53aWR0aCx7ZGZsdDowfSksZj1jKHt3aWR0aDpoLGVkaXRUeXBlOlwiY2FsY1wifSxhKFwibWFya2VyLmxpbmVcIikpLHA9Yyh7bGluZTpmLGVkaXRUeXBlOlwiY2FsY1wifSxhKFwibWFya2VyXCIpLHtjb2xvcmJhcjpvLG9wYWNpdHk6e3ZhbFR5cGU6XCJudW1iZXJcIixhcnJheU9rOiEwLGRmbHQ6MSxtaW46MCxtYXg6MSxlZGl0VHlwZTpcInN0eWxlXCJ9fSk7ZS5leHBvcnRzPXt4Om4ueCx4MDpuLngwLGR4Om4uZHgseTpuLnkseTA6bi55MCxkeTpuLmR5LHRleHQ6bi50ZXh0LGhvdmVydGV4dDpuLmhvdmVydGV4dCxob3ZlcnRlbXBsYXRlOmkoe30se2tleXM6bC5ldmVudERhdGFLZXlzfSksdGV4dHBvc2l0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJpbnNpZGVcIixcIm91dHNpZGVcIixcImF1dG9cIixcIm5vbmVcIl0sZGZsdDpcIm5vbmVcIixhcnJheU9rOiEwLGVkaXRUeXBlOlwiY2FsY1wifSx0ZXh0Zm9udDpjKHt9LHUse30pLGluc2lkZXRleHRmb250OmMoe30sdSx7fSksb3V0c2lkZXRleHRmb250OmMoe30sdSx7fSksY29uc3RyYWludGV4dDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiaW5zaWRlXCIsXCJvdXRzaWRlXCIsXCJib3RoXCIsXCJub25lXCJdLGRmbHQ6XCJib3RoXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGNsaXBvbmF4aXM6Yyh7fSxuLmNsaXBvbmF4aXMse30pLG9yaWVudGF0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ2XCIsXCJoXCJdLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSxiYXNlOnt2YWxUeXBlOlwiYW55XCIsZGZsdDpudWxsLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LG9mZnNldDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6bnVsbCxhcnJheU9rOiEwLGVkaXRUeXBlOlwiY2FsY1wifSx3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6bnVsbCxtaW46MCxhcnJheU9rOiEwLGVkaXRUeXBlOlwiY2FsY1wifSxtYXJrZXI6cCxvZmZzZXRncm91cDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcImNhbGNcIn0sYWxpZ25tZW50Z3JvdXA6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6bi5zZWxlY3RlZC5tYXJrZXIub3BhY2l0eSxjb2xvcjpuLnNlbGVjdGVkLm1hcmtlci5jb2xvcixlZGl0VHlwZTpcInN0eWxlXCJ9LHRleHRmb250Om4uc2VsZWN0ZWQudGV4dGZvbnQsZWRpdFR5cGU6XCJzdHlsZVwifSx1bnNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6bi51bnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LGNvbG9yOm4udW5zZWxlY3RlZC5tYXJrZXIuY29sb3IsZWRpdFR5cGU6XCJzdHlsZVwifSx0ZXh0Zm9udDpuLnVuc2VsZWN0ZWQudGV4dGZvbnQsZWRpdFR5cGU6XCJzdHlsZVwifSxyOm4ucix0Om4udCxfZGVwcmVjYXRlZDp7YmFyZGlyOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLGVkaXRUeXBlOlwiY2FsY1wiLHZhbHVlczpbXCJ2XCIsXCJoXCJdfX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIjo1NzksXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiOjc3NSxcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiOjEwNTIsXCIuL2NvbnN0YW50cy5qc1wiOjg0MX1dLDg0MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVyc1wiKS5oYXNDb2xvcnNjYWxlLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCIpLG89dChcIi4vYXJyYXlzX3RvX2NhbGNkYXRhXCIpLHM9dChcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbCxjPW4uZ2V0RnJvbUlkKHQsZS54YXhpc3x8XCJ4XCIpLHU9bi5nZXRGcm9tSWQodCxlLnlheGlzfHxcInlcIik7XCJoXCI9PT1lLm9yaWVudGF0aW9uPyhyPWMubWFrZUNhbGNkYXRhKGUsXCJ4XCIpLGw9dS5tYWtlQ2FsY2RhdGEoZSxcInlcIikpOihyPXUubWFrZUNhbGNkYXRhKGUsXCJ5XCIpLGw9Yy5tYWtlQ2FsY2RhdGEoZSxcInhcIikpO2Zvcih2YXIgaD1NYXRoLm1pbihsLmxlbmd0aCxyLmxlbmd0aCksZj1uZXcgQXJyYXkoaCkscD0wO3A8aDtwKyspZltwXT17cDpsW3BdLHM6cltwXX0sZS5pZHMmJihmW3BdLmlkPVN0cmluZyhlLmlkc1twXSkpO3JldHVybiBpKGUsXCJtYXJrZXJcIikmJmEodCxlLHt2YWxzOmUubWFya2VyLmNvbG9yLGNvbnRhaW5lclN0cjpcIm1hcmtlclwiLGNMZXR0ZXI6XCJjXCJ9KSxpKGUsXCJtYXJrZXIubGluZVwiKSYmYSh0LGUse3ZhbHM6ZS5tYXJrZXIubGluZS5jb2xvcixjb250YWluZXJTdHI6XCJtYXJrZXIubGluZVwiLGNMZXR0ZXI6XCJjXCJ9KSxvKGYsZSkscyhmLGUpLGZ9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsY1wiOjU4NixcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzXCI6NTg5LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uXCI6MTA1NCxcIi4vYXJyYXlzX3RvX2NhbGNkYXRhXCI6ODM4fV0sODQxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtldmVudERhdGFLZXlzOltdfX0se31dLDg0MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuLi8uLi9saWJcIikuaXNBcnJheU9yVHlwZWRBcnJheSxhPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTSxvPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxzPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxsPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIikuZ2V0QXhpc0dyb3VwLGM9dChcIi4vc2lldmUuanNcIik7ZnVuY3Rpb24gdSh0LGUscixvKXtpZihvLmxlbmd0aCl7dmFyIHUsYixfLHcsaz10Ll9mdWxsTGF5b3V0LmJhcm1vZGU7c3dpdGNoKGZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvLHM7Zm9yKG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIGwsYz1hW29dLHU9Y1swXS50cmFjZSxoPXUuYmFzZSxmPVwiaFwiPT09dS5vcmllbnRhdGlvbj91LnhjYWxlbmRhcjp1LnljYWxlbmRhcixwPVwiY2F0ZWdvcnlcIj09PXIudHlwZXx8XCJtdWx0aWNhdGVnb3J5XCI9PT1yLnR5cGU/ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH06ci5kMmM7aWYoaShoKSl7Zm9yKHM9MDtzPE1hdGgubWluKGgubGVuZ3RoLGMubGVuZ3RoKTtzKyspbD1wKGhbc10sMCxmKSxuKGwpPyhjW3NdLmI9K2wsY1tzXS5oYXNCPTEpOmNbc10uYj0wO2Zvcig7czxjLmxlbmd0aDtzKyspY1tzXS5iPTB9ZWxzZXtsPXAoaCwwLGYpO3ZhciBkPW4obCk7Zm9yKGw9ZD9sOjAscz0wO3M8Yy5sZW5ndGg7cysrKWNbc10uYj1sLGQmJihjW3NdLmhhc0I9MSl9fX0oMCwwLHIsbyksayl7Y2FzZVwib3ZlcmxheVwiOmgodCxlLHIsbyk7YnJlYWs7Y2FzZVwiZ3JvdXBcIjpmb3IodT1bXSxiPVtdLF89MDtfPG8ubGVuZ3RoO18rKyl2b2lkIDA9PT0odz1vW19dKVswXS50cmFjZS5vZmZzZXQ/Yi5wdXNoKHcpOnUucHVzaCh3KTtiLmxlbmd0aCYmZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5fZnVsbExheW91dC5iYXJub3JtLG89bmV3IGMobix7c2VwTmVnVmFsOiExLG92ZXJsYXBOb01lcmdlOiFpfSk7KGZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC5fZnVsbExheW91dCxpPW4uYmFyZ2FwLGE9bi5iYXJncm91cGdhcHx8MCxvPXIucG9zaXRpb25zLHM9ci5kaXN0aW5jdFBvc2l0aW9ucyxjPXIubWluRGlmZix1PXIudHJhY2VzLGg9dS5sZW5ndGgsZj1vLmxlbmd0aCE9PXMubGVuZ3RoLHY9YyooMS1pKSxtPWwobixlLl9pZCkrdVswXVswXS50cmFjZS5vcmllbnRhdGlvbix5PW4uX2FsaWdubWVudE9wdHNbbV18fHt9LHg9MDt4PGg7eCsrKXt2YXIgYixfLHc9dVt4XSxrPXdbMF0udHJhY2UsQT15W2suYWxpZ25tZW50Z3JvdXBdfHx7fSxUPU9iamVjdC5rZXlzKEEub2Zmc2V0R3JvdXBzfHx7fSkubGVuZ3RoLE09KGI9VD92L1Q6Zj92L2g6dikqKDEtYSk7Xz1UPygoMiprLl9vZmZzZXRJbmRleCsxLVQpKmItTSkvMjpmPygoMip4KzEtaCkqYi1NKS8yOi1NLzI7dmFyIFM9d1swXS50O1MuYmFyd2lkdGg9TSxTLnBvZmZzZXQ9XyxTLmJhcmdyb3Vwd2lkdGg9dixTLmJhcmRlbHRhPWN9ci5iaW5XaWR0aD11WzBdWzBdLnQuYmFyd2lkdGgvMTAwLHAociksZCh0LGUsciksZyh0LGUscixmKX0pKHQsZSxvKSxmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXIudHJhY2VzLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIG89bltpXSxzPW9bMF0udHJhY2U7aWYodm9pZCAwPT09cy5iYXNlKWZvcih2YXIgbD1uZXcgYyhbb10se3NlcE5lZ1ZhbDohMCxvdmVybGFwTm9NZXJnZTohMH0pLHU9MDt1PG8ubGVuZ3RoO3UrKyl7dmFyIGg9b1t1XTtpZihoLnAhPT1hKXt2YXIgZj1sLnB1dChoLnAsaC5iK2gucyk7ZiYmKGguYj1mKX19fX0oMCwwLG8pLGk/KG0odCxyLG8pLHkodCxyLG8pKTp2KHQscixvKX0odCxlLHIsYiksdS5sZW5ndGgmJmgodCxlLHIsdSk7YnJlYWs7Y2FzZVwic3RhY2tcIjpjYXNlXCJyZWxhdGl2ZVwiOmZvcih1PVtdLGI9W10sXz0wO188by5sZW5ndGg7XysrKXZvaWQgMD09PSh3PW9bX10pWzBdLnRyYWNlLmJhc2U/Yi5wdXNoKHcpOnUucHVzaCh3KTtiLmxlbmd0aCYmZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5fZnVsbExheW91dCxvPWkuYmFybW9kZSxsPWkuYmFybm9ybSx1PW5ldyBjKG4se3NlcE5lZ1ZhbDpcInJlbGF0aXZlXCI9PT1vLG92ZXJsYXBOb01lcmdlOiEobHx8XCJzdGFja1wiPT09b3x8XCJyZWxhdGl2ZVwiPT09byl9KTtmKHQsZSx1KSxmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQuX2Z1bGxMYXlvdXQuYmFybm9ybSxpPXgoZSksbz1yLnRyYWNlcyxsPTA7bDxvLmxlbmd0aDtsKyspe2Zvcih2YXIgYz1vW2xdLHU9Y1swXS50cmFjZSxoPVtdLGY9MDtmPGMubGVuZ3RoO2YrKyl7dmFyIHA9Y1tmXTtpZihwLnMhPT1hKXt2YXIgZD1yLnB1dChwLnAscC5iK3AucyksZz1kK3AuYitwLnM7cC5iPWQscFtpXT1nLG58fChoLnB1c2goZykscC5oYXNCJiZoLnB1c2goZCkpfX1ufHwodS5fZXh0cmVtZXNbZS5faWRdPXMuZmluZEV4dHJlbWVzKGUsaCx7dG96ZXJvOiEwLHBhZGRlZDohMH0pKX19KHQscix1KTtmb3IodmFyIGg9MDtoPG4ubGVuZ3RoO2grKylmb3IodmFyIHA9bltoXSxkPTA7ZDxwLmxlbmd0aDtkKyspe3ZhciBnPXBbZF07aWYoZy5zIT09YSl7dmFyIHY9Zy5iK2cucz09PXUuZ2V0KGcucCxnLnMpO3YmJihnLl9vdXRtb3N0PSEwKX19bCYmeSh0LHIsdSl9KHQsZSxyLGIpLHUubGVuZ3RoJiZoKHQsZSxyLHUpfSFmdW5jdGlvbih0LGUpe3ZhciByLGksYSxvPXgoZSkscz17fSxsPTEvMCxjPS0xLzA7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKylmb3IoYT10W3JdLGk9MDtpPGEubGVuZ3RoO2krKyl7dmFyIHU9YVtpXS5wO24odSkmJihsPU1hdGgubWluKGwsdSksYz1NYXRoLm1heChjLHUpKX12YXIgaD0xZTQvKGMtbCksZj1zLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcoTWF0aC5yb3VuZChoKih0LWwpKSl9O2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspeyhhPXRbcl0pWzBdLnQuZXh0ZW50cz1zO3ZhciBwPWFbMF0udC5wb2Zmc2V0LGQ9QXJyYXkuaXNBcnJheShwKTtmb3IoaT0wO2k8YS5sZW5ndGg7aSsrKXt2YXIgZz1hW2ldLHY9Z1tvXS1nLncvMjtpZihuKHYpKXt2YXIgbT1nW29dK2cudy8yLHk9ZihnLnApO3NbeV0/c1t5XT1bTWF0aC5taW4odixzW3ldWzBdKSxNYXRoLm1heChtLHNbeV1bMV0pXTpzW3ldPVt2LG1dfWcucDA9Zy5wKyhkP3BbaV06cCksZy5wMT1nLnAwK2cudyxnLnMwPWcuYixnLnMxPWcuczArZy5zfX19KG8sZSl9fWZ1bmN0aW9uIGgodCxlLHIsbil7Zm9yKHZhciBpPXQuX2Z1bGxMYXlvdXQuYmFybm9ybSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBvPW5bYV0scz1uZXcgYyhbb10se3NlcE5lZ1ZhbDohMSxvdmVybGFwTm9NZXJnZTohaX0pO2YodCxlLHMpLGk/KG0odCxyLHMpLHkodCxyLHMpKTp2KHQscixzKX19ZnVuY3Rpb24gZih0LGUscil7Zm9yKHZhciBuPXQuX2Z1bGxMYXlvdXQsaT1uLmJhcmdhcCxhPW4uYmFyZ3JvdXBnYXB8fDAsbz1yLm1pbkRpZmYscz1yLnRyYWNlcyxsPW8qKDEtaSksYz1sKigxLWEpLHU9LWMvMixoPTA7aDxzLmxlbmd0aDtoKyspe3ZhciBmPXNbaF1bMF0udDtmLmJhcndpZHRoPWMsZi5wb2Zmc2V0PXUsZi5iYXJncm91cHdpZHRoPWwsZi5iYXJkZWx0YT1vfXIuYmluV2lkdGg9c1swXVswXS50LmJhcndpZHRoLzEwMCxwKHIpLGQodCxlLHIpLGcodCxlLHIpfWZ1bmN0aW9uIHAodCl7dmFyIGUscixhPXQudHJhY2VzO2ZvcihlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciBvLHM9YVtlXSxsPXNbMF0sYz1sLnRyYWNlLHU9bC50LGg9Yy5fb2Zmc2V0fHxjLm9mZnNldCxmPXUucG9mZnNldDtpZihpKGgpKXtmb3Iobz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChoLDAscy5sZW5ndGgpLHI9MDtyPG8ubGVuZ3RoO3IrKyluKG9bcl0pfHwob1tyXT1mKTtmb3Iocj1vLmxlbmd0aDtyPHMubGVuZ3RoO3IrKylvLnB1c2goZik7dS5wb2Zmc2V0PW99ZWxzZSB2b2lkIDAhPT1oJiYodS5wb2Zmc2V0PWgpO3ZhciBwPWMuX3dpZHRofHxjLndpZHRoLGQ9dS5iYXJ3aWR0aDtpZihpKHApKXt2YXIgZz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChwLDAscy5sZW5ndGgpO2ZvcihyPTA7cjxnLmxlbmd0aDtyKyspbihnW3JdKXx8KGdbcl09ZCk7Zm9yKHI9Zy5sZW5ndGg7cjxzLmxlbmd0aDtyKyspZy5wdXNoKGQpO2lmKHUuYmFyd2lkdGg9Zyx2b2lkIDA9PT1oKXtmb3Iobz1bXSxyPTA7cjxzLmxlbmd0aDtyKyspby5wdXNoKGYrKGQtZ1tyXSkvMik7dS5wb2Zmc2V0PW99fWVsc2Ugdm9pZCAwIT09cCYmKHUuYmFyd2lkdGg9cCx2b2lkIDA9PT1oJiYodS5wb2Zmc2V0PWYrKGQtcCkvMikpfX1mdW5jdGlvbiBkKHQsZSxyKXtmb3IodmFyIG49ci50cmFjZXMsaT14KGUpLGE9MDthPG4ubGVuZ3RoO2ErKylmb3IodmFyIG89blthXSxzPW9bMF0udCxsPXMucG9mZnNldCxjPUFycmF5LmlzQXJyYXkobCksdT1zLmJhcndpZHRoLGg9QXJyYXkuaXNBcnJheSh1KSxmPTA7ZjxvLmxlbmd0aDtmKyspe3ZhciBwPW9bZl0sZD1wLnc9aD91W2ZdOnU7cFtpXT1wLnArKGM/bFtmXTpsKStkLzJ9fWZ1bmN0aW9uIGcodCxlLHIsbil7dmFyIGk9ci50cmFjZXMsYT1yLm1pbkRpZmYvMjtzLm1pbkR0aWNrKGUsci5taW5EaWZmLHIuZGlzdGluY3RQb3NpdGlvbnNbMF0sbik7Zm9yKHZhciBvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBsLGMsdSxoLGY9aVtvXSxwPWZbMF0sZD1wLnRyYWNlLGc9W107Zm9yKGg9MDtoPGYubGVuZ3RoO2grKyljPShsPWZbaF0pLnAtYSx1PWwucCthLGcucHVzaChjLHUpO2lmKGQud2lkdGh8fGQub2Zmc2V0KXt2YXIgdj1wLnQsbT12LnBvZmZzZXQseT12LmJhcndpZHRoLHg9QXJyYXkuaXNBcnJheShtKSxiPUFycmF5LmlzQXJyYXkoeSk7Zm9yKGg9MDtoPGYubGVuZ3RoO2grKyl7bD1mW2hdO3ZhciBfPXg/bVtoXTptLHc9Yj95W2hdOnk7dT0oYz1sLnArXykrdyxnLnB1c2goYyx1KX19ZC5fZXh0cmVtZXNbZS5faWRdPXMuZmluZEV4dHJlbWVzKGUsZyx7cGFkZGVkOiExfSl9fWZ1bmN0aW9uIHYodCxlLHIpe2Zvcih2YXIgbj1yLnRyYWNlcyxpPXgoZSksYT0wO2E8bi5sZW5ndGg7YSsrKXtmb3IodmFyIG89blthXSxsPW9bMF0udHJhY2UsYz1bXSx1PSEwLGg9MDtoPG8ubGVuZ3RoO2grKyl7dmFyIGY9b1toXSxwPWYuYixkPXArZi5zO2ZbaV09ZCxjLnB1c2goZCksZi5oYXNCJiZjLnB1c2gocCksZi5oYXNCJiZmLmI+MCYmZi5zPjB8fCh1PSExKX1sLl9leHRyZW1lc1tlLl9pZF09cy5maW5kRXh0cmVtZXMoZSxjLHt0b3plcm86IXUscGFkZGVkOiEwfSl9fWZ1bmN0aW9uIG0odCxlLHIpe2Zvcih2YXIgbj1yLnRyYWNlcyxpPTA7aTxuLmxlbmd0aDtpKyspZm9yKHZhciBvPW5baV0scz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdO2wucyE9PWEmJnIucHV0KGwucCxsLmIrbC5zKX19ZnVuY3Rpb24geSh0LGUscil7dmFyIGk9dC5fZnVsbExheW91dCxvPXIudHJhY2VzLGw9eChlKSxjPVwiZnJhY3Rpb25cIj09PWkuYmFybm9ybT8xOjEwMCx1PWMvMWU5LGg9ZS5sMmMoZS5jMmwoMCkpLGY9XCJzdGFja1wiPT09aS5iYXJtb2RlP2M6aDtmdW5jdGlvbiBwKHQpe3JldHVybiBuKGUuYzJsKHQpKSYmKHQ8aC11fHx0PmYrdXx8IW4oaCkpfWZvcih2YXIgZD0wO2Q8by5sZW5ndGg7ZCsrKXtmb3IodmFyIGc9b1tkXSx2PWdbMF0udHJhY2UsbT1bXSx5PSEwLGI9ITEsXz0wO188Zy5sZW5ndGg7XysrKXt2YXIgdz1nW19dO2lmKHcucyE9PWEpe3ZhciBrPU1hdGguYWJzKGMvci5nZXQody5wLHcucykpO3cuYio9ayx3LnMqPWs7dmFyIEE9dy5iLFQ9QSt3LnM7d1tsXT1ULG0ucHVzaChUKSxiPWJ8fHAoVCksdy5oYXNCJiYobS5wdXNoKEEpLGI9Ynx8cChBKSksdy5oYXNCJiZ3LmI+MCYmdy5zPjB8fCh5PSExKX19di5fZXh0cmVtZXNbZS5faWRdPXMuZmluZEV4dHJlbWVzKGUsbSx7dG96ZXJvOiF5LHBhZGRlZDpifSl9fWZ1bmN0aW9uIHgodCl7cmV0dXJuIHQuX2lkLmNoYXJBdCgwKX1lLmV4cG9ydHM9e2Nyb3NzVHJhY2VDYWxjOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUueGF4aXMsbj1lLnlheGlzLGk9dC5fZnVsbERhdGEsYT10LmNhbGNkYXRhLHM9W10sbD1bXSxjPTA7YzxpLmxlbmd0aDtjKyspe3ZhciBoPWlbY107ITA9PT1oLnZpc2libGUmJm8udHJhY2VJcyhoLFwiYmFyXCIpJiZoLnhheGlzPT09ci5faWQmJmgueWF4aXM9PT1uLl9pZCYmKFwiaFwiPT09aC5vcmllbnRhdGlvbj9zLnB1c2goYVtjXSk6bC5wdXNoKGFbY10pKX11KHQscixuLGwpLHUodCxuLHIscyl9LHNldEdyb3VwUG9zaXRpb25zOnV9fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIjo3NTIsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vc2lldmUuanNcIjo4NTEsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDg0MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxhPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxvPXQoXCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzXCIpLHM9dChcIi4vc3R5bGVfZGVmYXVsdHNcIiksbD10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCIpLmdldEF4aXNHcm91cCxjPXQoXCIuL2F0dHJpYnV0ZXNcIiksdT1uLmNvZXJjZUZvbnQ7ZnVuY3Rpb24gaCh0LGUscixuKXt2YXIgaT1lLm9yaWVudGF0aW9uLGE9ZVt7djpcInhcIixoOlwieVwifVtpXStcImF4aXNcIl0sbz1sKHIsYSkraSxzPXIuX2FsaWdubWVudE9wdHN8fHt9LGM9bihcImFsaWdubWVudGdyb3VwXCIpLHU9c1tvXTt1fHwodT1zW29dPXt9KTt2YXIgaD11W2NdO2g/aC50cmFjZXMucHVzaChlKTpoPXVbY109e3RyYWNlczpbZV0sYWxpZ25tZW50SW5kZXg6T2JqZWN0LmtleXModSkubGVuZ3RoLG9mZnNldEdyb3Vwczp7fX07dmFyIGY9bihcIm9mZnNldGdyb3VwXCIpLHA9aC5vZmZzZXRHcm91cHMsZD1wW2ZdO2YmJihkfHwoZD1wW2ZdPXtvZmZzZXRJbmRleDpPYmplY3Qua2V5cyhwKS5sZW5ndGh9KSxlLl9vZmZzZXRJbmRleD1kLm9mZnNldEluZGV4KX1mdW5jdGlvbiBmKHQsZSxyLGksYSl7dmFyIG89aShcInRleHRwb3NpdGlvblwiKSxzPUFycmF5LmlzQXJyYXkobyl8fFwiYXV0b1wiPT09byxsPXN8fFwib3V0c2lkZVwiPT09bztpZihzfHxcImluc2lkZVwiPT09b3x8bCl7dmFyIGM9dShpLFwidGV4dGZvbnRcIixyLmZvbnQpLGg9bi5leHRlbmRGbGF0KHt9LGMpOyEodC50ZXh0Zm9udCYmdC50ZXh0Zm9udC5jb2xvcikmJmRlbGV0ZSBoLmNvbG9yLHUoaSxcImluc2lkZXRleHRmb250XCIsaCksbCYmdShpLFwib3V0c2lkZXRleHRmb250XCIsYyksaShcImNvbnN0cmFpbnRleHRcIiksYSYmKGkoXCJzZWxlY3RlZC50ZXh0Zm9udC5jb2xvclwiKSxpKFwidW5zZWxlY3RlZC50ZXh0Zm9udC5jb2xvclwiKSksaShcImNsaXBvbmF4aXNcIil9fWUuZXhwb3J0cz17c3VwcGx5RGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIsbCl7ZnVuY3Rpb24gdShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYyxyLGkpfWlmKG8odCxlLGwsdSkpe3UoXCJvcmllbnRhdGlvblwiLGUueCYmIWUueT9cImhcIjpcInZcIiksdShcImJhc2VcIiksdShcIm9mZnNldFwiKSx1KFwid2lkdGhcIiksdShcInRleHRcIiksdShcImhvdmVydGV4dFwiKSx1KFwiaG92ZXJ0ZW1wbGF0ZVwiKSxmKHQsMCxsLHUsITApLHModCxlLHUscixsKTt2YXIgaD0oZS5tYXJrZXIubGluZXx8e30pLmNvbG9yLHA9YS5nZXRDb21wb25lbnRNZXRob2QoXCJlcnJvcmJhcnNcIixcInN1cHBseURlZmF1bHRzXCIpO3AodCxlLGh8fGkuZGVmYXVsdExpbmUse2F4aXM6XCJ5XCJ9KSxwKHQsZSxofHxpLmRlZmF1bHRMaW5lLHtheGlzOlwieFwiLGluaGVyaXQ6XCJ5XCJ9KSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSx1KX1lbHNlIGUudmlzaWJsZT0hMX0sY3Jvc3NUcmFjZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHI7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbi5jb2VyY2Uoci5faW5wdXQscixjLHQpfWlmKFwiZ3JvdXBcIj09PWUuYmFybW9kZSlmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKylcImJhclwiPT09KHI9dFthXSkudHlwZSYmKHIuX2lucHV0LGgoMCxyLGUsaSkpfSxoYW5kbGVHcm91cGluZ0RlZmF1bHRzOmgsaGFuZGxlVGV4dDpmfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiOjc1MixcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vc2NhdHRlci94eV9kZWZhdWx0c1wiOjEwNzgsXCIuL2F0dHJpYnV0ZXNcIjo4MzksXCIuL3N0eWxlX2RlZmF1bHRzXCI6ODUzfV0sODQ0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcInRpbnljb2xvcjJcIik7ci5jb2VyY2VTdHJpbmc9ZnVuY3Rpb24odCxlLHIpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXtpZihlfHwhdC5ub0JsYW5rKXJldHVybiBlfWVsc2UgaWYoXCJudW1iZXJcIj09dHlwZW9mIGUmJiF0LnN0cmljdClyZXR1cm4gU3RyaW5nKGUpO3JldHVybiB2b2lkIDAhPT1yP3I6dC5kZmx0fSxyLmNvZXJjZU51bWJlcj1mdW5jdGlvbih0LGUscil7aWYobihlKSl7ZT0rZTt2YXIgaT10Lm1pbixhPXQubWF4O2lmKCEodm9pZCAwIT09aSYmZTxpfHx2b2lkIDAhPT1hJiZlPmEpKXJldHVybiBlfXJldHVybiB2b2lkIDAhPT1yP3I6dC5kZmx0fSxyLmNvZXJjZUNvbG9yPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gaShlKS5pc1ZhbGlkKCk/ZTp2b2lkIDAhPT1yP3I6dC5kZmx0fSxyLmNvZXJjZUVudW1lcmF0ZWQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0LmNvZXJjZU51bWJlciYmKGU9K2UpLC0xIT09dC52YWx1ZXMuaW5kZXhPZihlKT9lOnZvaWQgMCE9PXI/cjp0LmRmbHR9LHIuZ2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt2YXIgcjtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9lPHQubGVuZ3RoJiYocj10W2VdKTpyPXQscn19LHtcImZhc3QtaXNudW1lcmljXCI6MjIyLHRpbnljb2xvcjI6NTIyfV0sODQ1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIiksaT10KFwiLi4vLi4vcmVnaXN0cnlcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxvPXQoXCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dFwiKTtmdW5jdGlvbiBzKHQsZSxyLGkpe3ZhciBhLHMsbCxjLHUsaCxmLHA9dC5jZCxkPXBbMF0udHJhY2UsZz1wWzBdLnQsdj1cImNsb3Nlc3RcIj09PWksbT10Lm1heEhvdmVyRGlzdGFuY2UseT10Lm1heFNwaWtlRGlzdGFuY2U7ZnVuY3Rpb24geCh0KXtyZXR1cm4gdFtsXS10LncvMn1mdW5jdGlvbiBiKHQpe3JldHVybiB0W2xdK3Qudy8yfXZhciBfPXY/eDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5taW4oeCh0KSx0LnAtZy5iYXJkZWx0YS8yKX0sdz12P2I6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KGIodCksdC5wK2cuYmFyZGVsdGEvMil9O2Z1bmN0aW9uIGsodCxlKXtyZXR1cm4gbi5pbmJveCh0LWEsZS1hLG0rTWF0aC5taW4oMSxNYXRoLmFicyhlLXQpL2YpLTEpfWZ1bmN0aW9uIEEodCl7cmV0dXJuIGsoXyh0KSx3KHQpKX1mdW5jdGlvbiBUKHQpe3JldHVybiBuLmluYm94KHQuYi1zLHRbY10tcyxtKyh0W2NdLXMpLyh0W2NdLXQuYiktMSl9XCJoXCI9PT1kLm9yaWVudGF0aW9uPyhhPXIscz1lLGw9XCJ5XCIsYz1cInhcIix1PVQsaD1BKTooYT1lLHM9cixsPVwieFwiLGM9XCJ5XCIsaD1ULHU9QSk7dmFyIE09dFtsK1wiYVwiXSxTPXRbYytcImFcIl07Zj1NYXRoLmFicyhNLnIyYyhNLnJhbmdlWzFdKS1NLnIyYyhNLnJhbmdlWzBdKSk7dmFyIEU9bi5nZXREaXN0YW5jZUZ1bmN0aW9uKGksdSxoLGZ1bmN0aW9uKHQpe3JldHVybih1KHQpK2godCkpLzJ9KTtpZihuLmdldENsb3Nlc3QocCxFLHQpLCExIT09dC5pbmRleCl7dnx8KF89ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWluKHgodCksdC5wLWcuYmFyZ3JvdXB3aWR0aC8yKX0sdz1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoYih0KSx0LnArZy5iYXJncm91cHdpZHRoLzIpfSk7dmFyIEM9cFt0LmluZGV4XSxMPWQuYmFzZT9DLmIrQy5zOkMuczt0W2MrXCIwXCJdPXRbYytcIjFcIl09Uy5jMnAoQ1tjXSwhMCksdFtjK1wiTGFiZWxWYWxcIl09TDt2YXIgej1nLmV4dGVudHNbZy5leHRlbnRzLnJvdW5kKEMucCldO3JldHVybiB0W2wrXCIwXCJdPU0uYzJwKHY/XyhDKTp6WzBdLCEwKSx0W2wrXCIxXCJdPU0uYzJwKHY/dyhDKTp6WzFdLCEwKSx0W2wrXCJMYWJlbFZhbFwiXT1DLnAsdC5zcGlrZURpc3RhbmNlPShUKEMpK2Z1bmN0aW9uKHQpe3JldHVybiBrKHgodCksYih0KSl9KEMpKS8yK3ktbSx0W2wrXCJTcGlrZVwiXT1NLmMycChDLnAsITApLG8oQyxkLHQpLHQuaG92ZXJ0ZW1wbGF0ZT1kLmhvdmVydGVtcGxhdGUsdH19ZnVuY3Rpb24gbCh0LGUpe3ZhciByPWUubWNjfHx0Lm1hcmtlci5jb2xvcixuPWUubWxjY3x8dC5tYXJrZXIubGluZS5jb2xvcixpPWUubWx3fHx0Lm1hcmtlci5saW5lLndpZHRoO3JldHVybiBhLm9wYWNpdHkocik/cjphLm9wYWNpdHkobikmJmk/bjp2b2lkIDB9ZS5leHBvcnRzPXtob3ZlclBvaW50czpmdW5jdGlvbih0LGUscixuKXt2YXIgYT1zKHQsZSxyLG4pO2lmKGEpe3ZhciBvPWEuY2QsYz1vWzBdLnRyYWNlLHU9b1thLmluZGV4XTtyZXR1cm4gYS5jb2xvcj1sKGMsdSksaS5nZXRDb21wb25lbnRNZXRob2QoXCJlcnJvcmJhcnNcIixcImhvdmVySW5mb1wiKSh1LGMsYSksW2FdfX0saG92ZXJPbkJhcnM6cyxnZXRUcmFjZUNvbG9yOmx9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHRcIjoxMDYwfV0sODQ2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5sYXlvdXRBdHRyaWJ1dGVzPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIikuc3VwcGx5RGVmYXVsdHMsbi5jcm9zc1RyYWNlRGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIikuY3Jvc3NUcmFjZURlZmF1bHRzLG4uc3VwcGx5TGF5b3V0RGVmYXVsdHM9dChcIi4vbGF5b3V0X2RlZmF1bHRzXCIpLG4uY2FsYz10KFwiLi9jYWxjXCIpLG4uY3Jvc3NUcmFjZUNhbGM9dChcIi4vY3Jvc3NfdHJhY2VfY2FsY1wiKS5jcm9zc1RyYWNlQ2FsYyxuLmNvbG9yYmFyPXQoXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiKSxuLmFycmF5c1RvQ2FsY2RhdGE9dChcIi4vYXJyYXlzX3RvX2NhbGNkYXRhXCIpLG4ucGxvdD10KFwiLi9wbG90XCIpLG4uc3R5bGU9dChcIi4vc3R5bGVcIikuc3R5bGUsbi5zdHlsZU9uU2VsZWN0PXQoXCIuL3N0eWxlXCIpLnN0eWxlT25TZWxlY3Qsbi5ob3ZlclBvaW50cz10KFwiLi9ob3ZlclwiKS5ob3ZlclBvaW50cyxuLnNlbGVjdFBvaW50cz10KFwiLi9zZWxlY3RcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJiYXJcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIiksbi5jYXRlZ29yaWVzPVtcImNhcnRlc2lhblwiLFwic3ZnXCIsXCJiYXJcIixcIm9yaWVudGVkXCIsXCJlcnJvckJhcnNPS1wiLFwic2hvd0xlZ2VuZFwiLFwiem9vbVNjYWxlXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXJcIjoxMDcwLFwiLi9hcnJheXNfdG9fY2FsY2RhdGFcIjo4MzgsXCIuL2F0dHJpYnV0ZXNcIjo4MzksXCIuL2NhbGNcIjo4NDAsXCIuL2Nyb3NzX3RyYWNlX2NhbGNcIjo4NDIsXCIuL2RlZmF1bHRzXCI6ODQzLFwiLi9ob3ZlclwiOjg0NSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo4NDcsXCIuL2xheW91dF9kZWZhdWx0c1wiOjg0OCxcIi4vcGxvdFwiOjg0OSxcIi4vc2VsZWN0XCI6ODUwLFwiLi9zdHlsZVwiOjg1Mn1dLDg0NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17YmFybW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wic3RhY2tcIixcImdyb3VwXCIsXCJvdmVybGF5XCIsXCJyZWxhdGl2ZVwiXSxkZmx0OlwiZ3JvdXBcIixlZGl0VHlwZTpcImNhbGNcIn0sYmFybm9ybTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiXCIsXCJmcmFjdGlvblwiLFwicGVyY2VudFwiXSxkZmx0OlwiXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGJhcmdhcDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGVkaXRUeXBlOlwiY2FsY1wifSxiYXJncm91cGdhcDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZTpcImNhbGNcIn19fSx7fV0sODQ4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGE9dChcIi4uLy4uL2xpYlwiKSxvPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gcyhyLG4pe3JldHVybiBhLmNvZXJjZSh0LGUsbyxyLG4pfWZvcih2YXIgbD0hMSxjPSExLHU9ITEsaD17fSxmPXMoXCJiYXJtb2RlXCIpLHA9MDtwPHIubGVuZ3RoO3ArKyl7dmFyIGQ9cltwXTtpZihuLnRyYWNlSXMoZCxcImJhclwiKSYmZC52aXNpYmxlKXtpZihsPSEwLFwiZ3JvdXBcIj09PWYpe3ZhciBnPWQueGF4aXMrZC55YXhpcztoW2ddJiYodT0hMCksaFtnXT0hMH1pZihkLnZpc2libGUmJlwiaGlzdG9ncmFtXCI9PT1kLnR5cGUpXCJjYXRlZ29yeVwiIT09aS5nZXRGcm9tSWQoe19mdWxsTGF5b3V0OmV9LGRbXCJ2XCI9PT1kLm9yaWVudGF0aW9uP1wieGF4aXNcIjpcInlheGlzXCJdKS50eXBlJiYoYz0hMCl9fWw/KFwib3ZlcmxheVwiIT09ZiYmcyhcImJhcm5vcm1cIikscyhcImJhcmdhcFwiLGMmJiF1PzA6LjIpLHMoXCJiYXJncm91cGdhcFwiKSk6ZGVsZXRlIGUuYmFybW9kZX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6ODQ3fV0sODQ5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcImZhc3QtaXNudW1lcmljXCIpLGE9dChcIi4uLy4uL2xpYlwiKSxvPXQoXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIikscz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxsPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksYz10KFwiLi4vLi4vcmVnaXN0cnlcIiksdT10KFwiLi9hdHRyaWJ1dGVzXCIpLGg9dS50ZXh0LGY9dS50ZXh0cG9zaXRpb24scD10KFwiLi9oZWxwZXJzXCIpLGQ9dChcIi4vc3R5bGVcIiksZz0zO2Z1bmN0aW9uIHYodCxlLHIsbixpLGEpe3ZhciBvO3JldHVybiBpPDE/bz1cInNjYWxlKFwiK2krXCIpIFwiOihpPTEsbz1cIlwiKSxcInRyYW5zbGF0ZShcIisoci1pKnQpK1wiIFwiKyhuLWkqZSkrXCIpXCIrbysoYT9cInJvdGF0ZShcIithK1wiIFwiK3QrXCIgXCIrZStcIikgXCI6XCJcIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUpe3ZhciBtPWUueGF4aXMseT1lLnlheGlzLHg9dC5fZnVsbExheW91dCxiPWEubWFrZVRyYWNlR3JvdXBzKHUscixcInRyYWNlIGJhcnNcIikuZWFjaChmdW5jdGlvbihyKXt2YXIgYyx1PW4uc2VsZWN0KHRoaXMpLGI9clswXSxfPWIudHJhY2Usdz0wO1wid2F0ZXJmYWxsXCI9PT1fLnR5cGUmJl8uY29ubmVjdG9yLnZpc2libGUmJlwiYmV0d2VlblwiPT09Xy5jb25uZWN0b3IubW9kZSYmKHc9Xy5jb25uZWN0b3IubGluZS53aWR0aC8yKTt2YXIgaz1cImhcIj09PV8ub3JpZW50YXRpb247ZS5pc1JhbmdlUGxvdHx8KGIubm9kZTM9dSk7dmFyIEE9YS5lbnN1cmVTaW5nbGUodSxcImdcIixcInBvaW50c1wiKS5zZWxlY3RBbGwoXCJnLnBvaW50XCIpLmRhdGEoYS5pZGVudGl0eSk7QS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcInBvaW50XCIsITApLEEuZXhpdCgpLnJlbW92ZSgpLEEuZWFjaChmdW5jdGlvbih1LGIpe3ZhciBBLFQsTSxTLEU9bi5zZWxlY3QodGhpcyk7az8oTT15LmMycCh1LnAwLCEwKSxTPXkuYzJwKHUucDEsITApLEE9bS5jMnAodS5zMCwhMCksVD1tLmMycCh1LnMxLCEwKSx1LmN0PVtULChNK1MpLzJdKTooQT1tLmMycCh1LnAwLCEwKSxUPW0uYzJwKHUucDEsITApLE09eS5jMnAodS5zMCwhMCksUz15LmMycCh1LnMxLCEwKSx1LmN0PVsoQStUKS8yLFNdKTt2YXIgQyxMLHosTz11LmlzQmxhbms9IShpKEEpJiZpKFQpJiZpKE0pJiZpKFMpJiZBIT09VCYmTSE9PVMpO2lmKHcmJihrPyhBLT0oYz1UPEE/LTE6MSkqdyxUKz1jKncpOihNLT0oYz1TPE0/LTE6MSkqdyxTKz1jKncpKSxcIndhdGVyZmFsbFwiPT09Xy50eXBlKXtpZighTyl7dmFyIEk9X1t1LmRpcl0ubWFya2VyO0M9SS5saW5lLndpZHRoLEw9SS5jb2xvcn16PVwid2F0ZXJmYWxsXCJ9ZWxzZSBDPSh1Lm1sdysxfHxfLm1hcmtlci5saW5lLndpZHRoKzF8fCh1LnRyYWNlP3UudHJhY2UubWFya2VyLmxpbmUud2lkdGg6MCkrMSktMSxMPXUubWN8fF8ubWFya2VyLmNvbG9yLHo9XCJiYXJcIjt2YXIgRD1uLnJvdW5kKEMvMiUxLDIpLFA9eFt6K1wiZ2FwXCJdLFI9eFt6K1wiZ3JvdXBnYXBcIl07ZnVuY3Rpb24gRih0KXtyZXR1cm4gMD09PVAmJjA9PT1SP24ucm91bmQoTWF0aC5yb3VuZCh0KS1ELDIpOnR9aWYoIXQuX2NvbnRleHQuc3RhdGljUGxvdCl7dmFyIEI9cy5vcGFjaXR5KEwpPDF8fEM+LjAxP0Y6ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hYnModC1lKT49Mj9GKHQpOnQ+ZT9NYXRoLmNlaWwodCk6TWF0aC5mbG9vcih0KX07QT1CKEEsVCksVD1CKFQsQSksTT1CKE0sUyksUz1CKFMsTSl9YS5lbnN1cmVTaW5nbGUoRSxcInBhdGhcIikuc3R5bGUoXCJ2ZWN0b3ItZWZmZWN0XCIsXCJub24tc2NhbGluZy1zdHJva2VcIikuYXR0cihcImRcIixPP1wiTTAsMFpcIjpcIk1cIitBK1wiLFwiK00rXCJWXCIrUytcIkhcIitUK1wiVlwiK00rXCJaXCIpLmNhbGwobC5zZXRDbGlwVXJsLGUubGF5ZXJDbGlwSWQsdCksZnVuY3Rpb24odCxlLHIsbixpLHMsYyx1KXt2YXIgbSx5PXQuX2Z1bGxMYXlvdXQ7ZnVuY3Rpb24geChlLHIsbil7dmFyIGk9YS5lbnN1cmVTaW5nbGUoZSxcInRleHRcIikudGV4dChyKS5hdHRyKHtjbGFzczpcImJhcnRleHQgYmFydGV4dC1cIittLHRyYW5zZm9ybTpcIlwiLFwidGV4dC1hbmNob3JcIjpcIm1pZGRsZVwiLFwiZGF0YS1ub3RleFwiOjF9KS5jYWxsKGwuZm9udCxuKS5jYWxsKG8uY29udmVydFRvVHNwYW5zLHQpO3JldHVybiBpfXZhciBiPXJbMF0udHJhY2UsXz1iLm9yaWVudGF0aW9uLHc9ZnVuY3Rpb24odCxlKXt2YXIgcj1wLmdldFZhbHVlKHQudGV4dCxlKTtyZXR1cm4gcC5jb2VyY2VTdHJpbmcoaCxyKX0oYixuKTttPWZ1bmN0aW9uKHQsZSl7dmFyIHI9cC5nZXRWYWx1ZSh0LnRleHRwb3NpdGlvbixlKTtyZXR1cm4gcC5jb2VyY2VFbnVtZXJhdGVkKGYscil9KGIsbik7dmFyIGs9XCJ3YXRlcmZhbGxcIj09PWIudHlwZT9cIndhdGVyZmFsbFwiOlwiYmFyXCIsQT15W2srXCJtb2RlXCJdLFQ9XCJzdGFja1wiPT09QXx8XCJyZWxhdGl2ZVwiPT09QSxNPXJbbl0sUz0hVHx8TS5fb3V0bW9zdDtpZighd3x8XCJub25lXCI9PT1tfHxNLmlzQmxhbmsmJihcImF1dG9cIj09PW18fFwiaW5zaWRlXCI9PT1tKSlyZXR1cm4gdm9pZCBlLnNlbGVjdChcInRleHRcIikucmVtb3ZlKCk7dmFyIEUsQyxMLHosTyxJLEQ9eS5mb250LFA9ZC5nZXRCYXJDb2xvcihyW25dLGIpLFI9ZC5nZXRJbnNpZGVUZXh0Rm9udChiLG4sRCxQKSxGPWQuZ2V0T3V0c2lkZVRleHRGb250KGIsbixEKSxCPU1hdGguYWJzKHMtaSktMipnLE49TWF0aC5hYnModS1jKS0yKmc7XCJvdXRzaWRlXCI9PT1tJiYoU3x8TS5oYXNCfHwobT1cImluc2lkZVwiKSk7aWYoXCJhdXRvXCI9PT1tKWlmKFMpe209XCJpbnNpZGVcIixFPXgoZSx3LFIpLEM9bC5iQm94KEUubm9kZSgpKSxMPUMud2lkdGgsej1DLmhlaWdodDt2YXIgaj1MPjAmJno+MCxWPUw8PUImJno8PU4sVT1MPD1OJiZ6PD1CLHE9XCJoXCI9PT1fP0I+PUwqKE4veik6Tj49eiooQi9MKTtqJiYoVnx8VXx8cSk/bT1cImluc2lkZVwiOihtPVwib3V0c2lkZVwiLEUucmVtb3ZlKCksRT1udWxsKX1lbHNlIG09XCJpbnNpZGVcIjtpZighRSYmKEU9eChlLHcsXCJvdXRzaWRlXCI9PT1tP0Y6UiksQz1sLmJCb3goRS5ub2RlKCkpLEw9Qy53aWR0aCx6PUMuaGVpZ2h0LEw8PTB8fHo8PTApKXJldHVybiB2b2lkIEUucmVtb3ZlKCk7XCJvdXRzaWRlXCI9PT1tPyhJPVwiYm90aFwiPT09Yi5jb25zdHJhaW50ZXh0fHxcIm91dHNpZGVcIj09PWIuY29uc3RyYWludGV4dCxPPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzLGw9XCJoXCI9PT1hP01hdGguYWJzKG4tcik6TWF0aC5hYnMoZS10KTtsPjIqZyYmKHM9Zyk7dmFyIGM9MTtvJiYoYz1cImhcIj09PWE/TWF0aC5taW4oMSxsL2kuaGVpZ2h0KTpNYXRoLm1pbigxLGwvaS53aWR0aCkpO3ZhciB1LGgsZixwLGQ9KGkubGVmdCtpLnJpZ2h0KS8yLG09KGkudG9wK2kuYm90dG9tKS8yO3U9YyppLndpZHRoLGg9YyppLmhlaWdodCxcImhcIj09PWE/ZTx0PyhmPWUtcy11LzIscD0ocituKS8yKTooZj1lK3MrdS8yLHA9KHIrbikvMik6bj5yPyhmPSh0K2UpLzIscD1uK3MraC8yKTooZj0odCtlKS8yLHA9bi1zLWgvMik7cmV0dXJuIHYoZCxtLGYscCxjLCExKX0oaSxzLGMsdSxDLF8sSSkpOihJPVwiYm90aFwiPT09Yi5jb25zdHJhaW50ZXh0fHxcImluc2lkZVwiPT09Yi5jb25zdHJhaW50ZXh0LE89ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHMsbCxjLHUsaCxmLHAsZD1pLndpZHRoLG09aS5oZWlnaHQseT0oaS5sZWZ0K2kucmlnaHQpLzIseD0oaS50b3AraS5ib3R0b20pLzIsYj1NYXRoLmFicyhlLXQpLF89TWF0aC5hYnMobi1yKTtiPjIqZyYmXz4yKmc/KGItPTIqKGg9ZyksXy09MipoKTpoPTA7ZDw9YiYmbTw9Xz8oZj0hMSxwPTEpOmQ8PV8mJm08PWI/KGY9ITAscD0xKTpkPG09PWI8Xz8oZj0hMSxwPW8/TWF0aC5taW4oYi9kLF8vbSk6MSk6KGY9ITAscD1vP01hdGgubWluKF8vZCxiL20pOjEpO2YmJihmPTkwKTtmPyhzPXAqbSxsPXAqZCk6KHM9cCpkLGw9cCptKTtcImhcIj09PWE/ZTx0PyhjPWUraCtzLzIsdT0ocituKS8yKTooYz1lLWgtcy8yLHU9KHIrbikvMik6bj5yPyhjPSh0K2UpLzIsdT1uLWgtbC8yKTooYz0odCtlKS8yLHU9bitoK2wvMik7cmV0dXJuIHYoeSx4LGMsdSxwLGYpfShpLHMsYyx1LEMsXyxJKSk7RS5hdHRyKFwidHJhbnNmb3JtXCIsTyl9KHQsRSxyLGIsQSxULE0sUyksZS5sYXllckNsaXBJZCYmbC5oaWRlT3V0c2lkZVJhbmdlUG9pbnQodSxFLnNlbGVjdChcInRleHRcIiksbSx5LF8ueGNhbGVuZGFyLF8ueWNhbGVuZGFyKX0pO3ZhciBUPSExPT09Yi50cmFjZS5jbGlwb25heGlzO2wuc2V0Q2xpcFVybCh1LFQ/bnVsbDplLmxheWVyQ2xpcElkLHQpfSk7Yy5nZXRDb21wb25lbnRNZXRob2QoXCJlcnJvcmJhcnNcIixcInBsb3RcIikodCxiLGUpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiOjcyNSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9hdHRyaWJ1dGVzXCI6ODM5LFwiLi9oZWxwZXJzXCI6ODQ0LFwiLi9zdHlsZVwiOjg1MixkMzoxNTUsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDg1MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG49dC5jZCxpPXQueGF4aXMsYT10LnlheGlzLG89W107aWYoITE9PT1lKWZvcihyPTA7cjxuLmxlbmd0aDtyKyspbltyXS5zZWxlY3RlZD0wO2Vsc2UgZm9yKHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIHM9bltyXTtlLmNvbnRhaW5zKHMuY3QsITEscix0KT8oby5wdXNoKHtwb2ludE51bWJlcjpyLHg6aS5jMmQocy54KSx5OmEuYzJkKHMueSl9KSxzLnNlbGVjdGVkPTEpOnMuc2VsZWN0ZWQ9MH1yZXR1cm4gb319LHt9XSw4NTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9YTt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNO2Z1bmN0aW9uIGEodCxlKXt0aGlzLnRyYWNlcz10LHRoaXMuc2VwTmVnVmFsPWUuc2VwTmVnVmFsLHRoaXMub3ZlcmxhcE5vTWVyZ2U9ZS5vdmVybGFwTm9NZXJnZTtmb3IodmFyIHI9MS8wLGE9W10sbz0wO288dC5sZW5ndGg7bysrKXtmb3IodmFyIHM9dFtvXSxsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciBjPXNbbF07Yy5wIT09aSYmYS5wdXNoKGMucCl9c1swXSYmc1swXS53aWR0aDEmJihyPU1hdGgubWluKHNbMF0ud2lkdGgxLHIpKX10aGlzLnBvc2l0aW9ucz1hO3ZhciB1PW4uZGlzdGluY3RWYWxzKGEpO3RoaXMuZGlzdGluY3RQb3NpdGlvbnM9dS52YWxzLDE9PT11LnZhbHMubGVuZ3RoJiZyIT09MS8wP3RoaXMubWluRGlmZj1yOnRoaXMubWluRGlmZj1NYXRoLm1pbih1Lm1pbkRpZmYsciksdGhpcy5iaW5XaWR0aD10aGlzLm1pbkRpZmYsdGhpcy5iaW5zPXt9fWEucHJvdG90eXBlLnB1dD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2V0TGFiZWwodCxlKSxuPXRoaXMuYmluc1tyXXx8MDtyZXR1cm4gdGhpcy5iaW5zW3JdPW4rZSxufSxhLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdldExhYmVsKHQsZSk7cmV0dXJuIHRoaXMuYmluc1tyXXx8MH0sYS5wcm90b3R5cGUuZ2V0TGFiZWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4oZTwwJiZ0aGlzLnNlcE5lZ1ZhbD9cInZcIjpcIl5cIikrKHRoaXMub3ZlcmxhcE5vTWVyZ2U/dDpNYXRoLnJvdW5kKHQvdGhpcy5iaW5XaWR0aCkpfX0se1wiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMX1dLDg1MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxvPXQoXCIuLi8uLi9saWJcIikscz10KFwiLi4vLi4vcmVnaXN0cnlcIiksbD10KFwiLi9hdHRyaWJ1dGVzXCIpLGM9bC50ZXh0Zm9udCx1PWwuaW5zaWRldGV4dGZvbnQsaD1sLm91dHNpZGV0ZXh0Zm9udCxmPXQoXCIuL2hlbHBlcnNcIik7ZnVuY3Rpb24gcCh0LGUscil7YS5wb2ludFN0eWxlKHQuc2VsZWN0QWxsKFwicGF0aFwiKSxlLHIpLGQodCxlLHIpfWZ1bmN0aW9uIGQodCxlLHIpe3Quc2VsZWN0QWxsKFwidGV4dFwiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLG89ZyhpLHQsZSxyKTthLmZvbnQoaSxvKX0pfWZ1bmN0aW9uIGcodCxlLHIsbil7dmFyIGk9bi5fZnVsbExheW91dC5mb250LGE9ci50ZXh0Zm9udDtpZih0LmNsYXNzZWQoXCJiYXJ0ZXh0LWluc2lkZVwiKSl7dmFyIG89YihlLHIpO2E9bShyLGUuaSxpLG8pfWVsc2UgdC5jbGFzc2VkKFwiYmFydGV4dC1vdXRzaWRlXCIpJiYoYT15KHIsZS5pLGkpKTtyZXR1cm4gYX1mdW5jdGlvbiB2KHQsZSxyKXtyZXR1cm4geChjLHQudGV4dGZvbnQsZSxyKX1mdW5jdGlvbiBtKHQsZSxyLG4pe3ZhciBhPXYodCxlLHIpO3JldHVybih2b2lkIDA9PT10Ll9pbnB1dC50ZXh0Zm9udHx8dm9pZCAwPT09dC5faW5wdXQudGV4dGZvbnQuY29sb3J8fEFycmF5LmlzQXJyYXkodC50ZXh0Zm9udC5jb2xvcikmJnZvaWQgMD09PXQudGV4dGZvbnQuY29sb3JbZV0pJiYoYT17Y29sb3I6aS5jb250cmFzdChuKSxmYW1pbHk6YS5mYW1pbHksc2l6ZTphLnNpemV9KSx4KHUsdC5pbnNpZGV0ZXh0Zm9udCxlLGEpfWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBuPXYodCxlLHIpO3JldHVybiB4KGgsdC5vdXRzaWRldGV4dGZvbnQsZSxuKX1mdW5jdGlvbiB4KHQsZSxyLG4pe2U9ZXx8e307dmFyIGk9Zi5nZXRWYWx1ZShlLmZhbWlseSxyKSxhPWYuZ2V0VmFsdWUoZS5zaXplLHIpLG89Zi5nZXRWYWx1ZShlLmNvbG9yLHIpO3JldHVybntmYW1pbHk6Zi5jb2VyY2VTdHJpbmcodC5mYW1pbHksaSxuLmZhbWlseSksc2l6ZTpmLmNvZXJjZU51bWJlcih0LnNpemUsYSxuLnNpemUpLGNvbG9yOmYuY29lcmNlQ29sb3IodC5jb2xvcixvLG4uY29sb3IpfX1mdW5jdGlvbiBiKHQsZSl7cmV0dXJuXCJ3YXRlcmZhbGxcIj09PWUudHlwZT9lW3QuZGlyXS5tYXJrZXIuY29sb3I6dC5tY3x8ZS5tYXJrZXIuY29sb3J9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUpe3ZhciByPWU/ZVswXS5ub2RlMzpuLnNlbGVjdCh0KS5zZWxlY3RBbGwoXCJnLmJhcmxheWVyXCIpLnNlbGVjdEFsbChcImcudHJhY2VcIiksaT1yLnNpemUoKSxhPXQuX2Z1bGxMYXlvdXQ7ci5zdHlsZShcIm9wYWNpdHlcIixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSkuZWFjaChmdW5jdGlvbih0KXsoXCJzdGFja1wiPT09YS5iYXJtb2RlJiZpPjF8fDA9PT1hLmJhcmdhcCYmMD09PWEuYmFyZ3JvdXBnYXAmJiF0WzBdLnRyYWNlLm1hcmtlci5saW5lLndpZHRoKSYmbi5zZWxlY3QodGhpcykuYXR0cihcInNoYXBlLXJlbmRlcmluZ1wiLFwiY3Jpc3BFZGdlc1wiKX0pLHIuc2VsZWN0QWxsKFwiZy5wb2ludHNcIikuZWFjaChmdW5jdGlvbihlKXtwKG4uc2VsZWN0KHRoaXMpLGVbMF0udHJhY2UsdCl9KSxzLmdldENvbXBvbmVudE1ldGhvZChcImVycm9yYmFyc1wiLFwic3R5bGVcIikocil9LHN0eWxlVGV4dFBvaW50czpkLHN0eWxlT25TZWxlY3Q6ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLm5vZGUzLGk9ZVswXS50cmFjZTtpLnNlbGVjdGVkcG9pbnRzP2Z1bmN0aW9uKHQsZSxyKXthLnNlbGVjdGVkUG9pbnRTdHlsZSh0LnNlbGVjdEFsbChcInBhdGhcIiksZSksZnVuY3Rpb24odCxlLHIpe3QuZWFjaChmdW5jdGlvbih0KXt2YXIgaSxzPW4uc2VsZWN0KHRoaXMpO2lmKHQuc2VsZWN0ZWQpe2k9by5leHRlbmRGbGF0KHt9LGcocyx0LGUscikpO3ZhciBsPWUuc2VsZWN0ZWQudGV4dGZvbnQmJmUuc2VsZWN0ZWQudGV4dGZvbnQuY29sb3I7bCYmKGkuY29sb3I9bCksYS5mb250KHMsaSl9ZWxzZSBhLnNlbGVjdGVkVGV4dFN0eWxlKHMsZSl9KX0odC5zZWxlY3RBbGwoXCJ0ZXh0XCIpLGUscil9KHIsaSx0KTpwKHIsaSx0KX0sZ2V0SW5zaWRlVGV4dEZvbnQ6bSxnZXRPdXRzaWRlVGV4dEZvbnQ6eSxnZXRCYXJDb2xvcjpifX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9hdHRyaWJ1dGVzXCI6ODM5LFwiLi9oZWxwZXJzXCI6ODQ0LGQzOjE1NX1dLDg1MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzXCIpLmhhc0NvbG9yc2NhbGUsYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMpe3IoXCJtYXJrZXIuY29sb3JcIixvKSxpKHQsXCJtYXJrZXJcIikmJmEodCxlLHMscix7cHJlZml4OlwibWFya2VyLlwiLGNMZXR0ZXI6XCJjXCJ9KSxyKFwibWFya2VyLmxpbmUuY29sb3JcIixuLmRlZmF1bHRMaW5lKSxpKHQsXCJtYXJrZXIubGluZVwiKSYmYSh0LGUscyxyLHtwcmVmaXg6XCJtYXJrZXIubGluZS5cIixjTGV0dGVyOlwiY1wifSkscihcIm1hcmtlci5saW5lLndpZHRoXCIpLHIoXCJtYXJrZXIub3BhY2l0eVwiKSxyKFwic2VsZWN0ZWQubWFya2VyLmNvbG9yXCIpLHIoXCJ1bnNlbGVjdGVkLm1hcmtlci5jb2xvclwiKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIjo1ODgsXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVyc1wiOjU4OX1dLDg1NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsYT10KFwiLi4vc2NhdHRlcnBvbGFyL2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vYmFyL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPXtyOmEucix0aGV0YTphLnRoZXRhLHIwOmEucjAsZHI6YS5kcix0aGV0YTA6YS50aGV0YTAsZHRoZXRhOmEuZHRoZXRhLHRoZXRhdW5pdDphLnRoZXRhdW5pdCxiYXNlOmkoe30sby5iYXNlLHt9KSxvZmZzZXQ6aSh7fSxvLm9mZnNldCx7fSksd2lkdGg6aSh7fSxvLndpZHRoLHt9KSx0ZXh0Omkoe30sby50ZXh0LHt9KSxob3ZlcnRleHQ6aSh7fSxvLmhvdmVydGV4dCx7fSksbWFya2VyOm8ubWFya2VyLGhvdmVyaW5mbzphLmhvdmVyaW5mbyxob3ZlcnRlbXBsYXRlOm4oKSxzZWxlY3RlZDpvLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6by51bnNlbGVjdGVkfX0se1wiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vYmFyL2F0dHJpYnV0ZXNcIjo4MzksXCIuLi9zY2F0dGVycG9sYXIvYXR0cmlidXRlc1wiOjExMTR9XSw4NTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnNcIikuaGFzQ29sb3JzY2FsZSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsY1wiKSxhPXQoXCIuLi9iYXIvYXJyYXlzX3RvX2NhbGNkYXRhXCIpLG89dChcIi4uL2Jhci9jcm9zc190cmFjZV9jYWxjXCIpLnNldEdyb3VwUG9zaXRpb25zLHM9dChcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIiksbD10KFwiLi4vLi4vcmVnaXN0cnlcIikudHJhY2VJcyxjPXQoXCIuLi8uLi9saWJcIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5fZnVsbExheW91dCxvPWUuc3VicGxvdCxsPXJbb10ucmFkaWFsYXhpcyxjPXJbb10uYW5ndWxhcmF4aXMsdT1sLm1ha2VDYWxjZGF0YShlLFwiclwiKSxoPWMubWFrZUNhbGNkYXRhKGUsXCJ0aGV0YVwiKSxmPWUuX2xlbmd0aCxwPW5ldyBBcnJheShmKSxkPXUsZz1oLHY9MDt2PGY7disrKXBbdl09e3A6Z1t2XSxzOmRbdl19O2Z1bmN0aW9uIG0odCl7dmFyIHI9ZVt0XTt2b2lkIDAhPT1yJiYoZVtcIl9cIit0XT1BcnJheS5pc0FycmF5KHIpP2MubWFrZUNhbGNkYXRhKGUsdCk6Yy5kMmMocixlLnRoZXRhdW5pdCkpfXJldHVyblwibGluZWFyXCI9PT1jLnR5cGUmJihtKFwid2lkdGhcIiksbShcIm9mZnNldFwiKSksbihlLFwibWFya2VyXCIpJiZpKHQsZSx7dmFsczplLm1hcmtlci5jb2xvcixjb250YWluZXJTdHI6XCJtYXJrZXJcIixjTGV0dGVyOlwiY1wifSksbihlLFwibWFya2VyLmxpbmVcIikmJmkodCxlLHt2YWxzOmUubWFya2VyLmxpbmUuY29sb3IsY29udGFpbmVyU3RyOlwibWFya2VyLmxpbmVcIixjTGV0dGVyOlwiY1wifSksYShwLGUpLHMocCxlKSxwfSxjcm9zc1RyYWNlQ2FsYzpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQuY2FsY2RhdGEsaT1bXSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBzPW5bYV0sdT1zWzBdLnRyYWNlOyEwPT09dS52aXNpYmxlJiZsKHUsXCJiYXJcIikmJnUuc3VicGxvdD09PXImJmkucHVzaChzKX12YXIgaD1jKHt9LGUucmFkaWFsYXhpcyx7X2lkOlwieFwifSksZj1lLmFuZ3VsYXJheGlzO28oe19mdWxsTGF5b3V0OmV9LGYsaCxpKX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsY1wiOjU4NixcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzXCI6NTg5LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9iYXIvYXJyYXlzX3RvX2NhbGNkYXRhXCI6ODM4LFwiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGNcIjo4NDIsXCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uXCI6MTA1NH1dLDg1NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vc2NhdHRlcnBvbGFyL2RlZmF1bHRzXCIpLmhhbmRsZVJUaGV0YURlZmF1bHRzLGE9dChcIi4uL2Jhci9zdHlsZV9kZWZhdWx0c1wiKSxvPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX1pKHQsZSxzLGwpPyhsKFwidGhldGF1bml0XCIpLGwoXCJiYXNlXCIpLGwoXCJvZmZzZXRcIiksbChcIndpZHRoXCIpLGwoXCJ0ZXh0XCIpLGwoXCJob3ZlcnRleHRcIiksbChcImhvdmVydGVtcGxhdGVcIiksYSh0LGUsbCxyLHMpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGwpKTplLnZpc2libGU9ITF9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9iYXIvc3R5bGVfZGVmYXVsdHNcIjo4NTMsXCIuLi9zY2F0dGVycG9sYXIvZGVmYXVsdHNcIjoxMTE2LFwiLi9hdHRyaWJ1dGVzXCI6ODU0fV0sODU3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uL2Jhci9ob3ZlclwiKS5nZXRUcmFjZUNvbG9yLG89dChcIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0XCIpLHM9dChcIi4uL3NjYXR0ZXJwb2xhci9ob3ZlclwiKS5tYWtlSG92ZXJQb2ludFRleHQsbD10KFwiLi4vLi4vcGxvdHMvcG9sYXIvaGVscGVyc1wiKS5pc1B0SW5zaWRlUG9seWdvbjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBjPXQuY2QsdT1jWzBdLnRyYWNlLGg9dC5zdWJwbG90LGY9aC5yYWRpYWxBeGlzLHA9aC5hbmd1bGFyQXhpcyxkPWgudmFuZ2xlcyxnPWQ/bDppLmlzUHRJbnNpZGVTZWN0b3Isdj10Lm1heEhvdmVyRGlzdGFuY2UsbT1wLl9wZXJpb2R8fDIqTWF0aC5QSSx5PU1hdGguYWJzKGYuZzJwKE1hdGguc3FydChlKmUrcipyKSkpLHg9TWF0aC5hdGFuMihyLGUpO2YucmFuZ2VbMF0+Zi5yYW5nZVsxXSYmKHgrPU1hdGguUEkpO2lmKG4uZ2V0Q2xvc2VzdChjLGZ1bmN0aW9uKHQpe3JldHVybiBnKHkseCxbdC5ycDAsdC5ycDFdLFt0LnRoZXRhZzAsdC50aGV0YWcxXSxkKT92K01hdGgubWluKDEsTWF0aC5hYnModC50aGV0YWcxLXQudGhldGFnMCkvbSktMSsodC5ycDEteSkvKHQucnAxLXQucnAwKS0xOjEvMH0sdCksITEhPT10LmluZGV4KXt2YXIgYj1jW3QuaW5kZXhdO3QueDA9dC54MT1iLmN0WzBdLHQueTA9dC55MT1iLmN0WzFdO3ZhciBfPWkuZXh0ZW5kRmxhdCh7fSxiLHtyOmIucyx0aGV0YTpiLnB9KTtyZXR1cm4gbyhiLHUsdCkscyhfLHUsaCx0KSx0LmhvdmVydGVtcGxhdGU9dS5ob3ZlcnRlbXBsYXRlLHQuY29sb3I9YSh1LGIpLHQueExhYmVsVmFsPXQueUxhYmVsVmFsPXZvaWQgMCxiLnM8MCYmKHQuaWRlYWxBbGlnbj1cImxlZnRcIiksW3RdfX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9wb2xhci9oZWxwZXJzXCI6ODEyLFwiLi4vYmFyL2hvdmVyXCI6ODQ1LFwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHRcIjoxMDYwLFwiLi4vc2NhdHRlcnBvbGFyL2hvdmVyXCI6MTExN31dLDg1ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17bW9kdWxlVHlwZTpcInRyYWNlXCIsbmFtZTpcImJhcnBvbGFyXCIsYmFzZVBsb3RNb2R1bGU6dChcIi4uLy4uL3Bsb3RzL3BvbGFyXCIpLGNhdGVnb3JpZXM6W1wicG9sYXJcIixcImJhclwiLFwic2hvd0xlZ2VuZFwiXSxhdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksbGF5b3V0QXR0cmlidXRlczp0KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxzdXBwbHlEZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KFwiLi9sYXlvdXRfZGVmYXVsdHNcIiksY2FsYzp0KFwiLi9jYWxjXCIpLmNhbGMsY3Jvc3NUcmFjZUNhbGM6dChcIi4vY2FsY1wiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OnQoXCIuL3Bsb3RcIiksY29sb3JiYXI6dChcIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyXCIpLHN0eWxlOnQoXCIuLi9iYXIvc3R5bGVcIikuc3R5bGUsaG92ZXJQb2ludHM6dChcIi4vaG92ZXJcIiksc2VsZWN0UG9pbnRzOnQoXCIuLi9iYXIvc2VsZWN0XCIpLG1ldGE6e319fSx7XCIuLi8uLi9wbG90cy9wb2xhclwiOjgxMyxcIi4uL2Jhci9zZWxlY3RcIjo4NTAsXCIuLi9iYXIvc3R5bGVcIjo4NTIsXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiOjEwNzAsXCIuL2F0dHJpYnV0ZXNcIjo4NTQsXCIuL2NhbGNcIjo4NTUsXCIuL2RlZmF1bHRzXCI6ODU2LFwiLi9ob3ZlclwiOjg1NyxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo4NTksXCIuL2xheW91dF9kZWZhdWx0c1wiOjg2MCxcIi4vcGxvdFwiOjg2MX1dLDg1OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17YmFybW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wic3RhY2tcIixcIm92ZXJsYXlcIl0sZGZsdDpcInN0YWNrXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGJhcmdhcDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6LjEsbWluOjAsbWF4OjEsZWRpdFR5cGU6XCJjYWxjXCJ9fX0se31dLDg2MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhLG89e307ZnVuY3Rpb24gcyhyLG8pe3JldHVybiBuLmNvZXJjZSh0W2FdfHx7fSxlW2FdLGkscixvKX1mb3IodmFyIGw9MDtsPHIubGVuZ3RoO2wrKyl7dmFyIGM9cltsXTtcImJhcnBvbGFyXCI9PT1jLnR5cGUmJiEwPT09Yy52aXNpYmxlJiYob1thPWMuc3VicGxvdF18fChzKFwiYmFybW9kZVwiKSxzKFwiYmFyZ2FwXCIpLG9bYV09MSkpfX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjo4NTl9XSw4NjE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiZmFzdC1pc251bWVyaWNcIiksYT10KFwiLi4vLi4vbGliXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxzPXQoXCIuLi8uLi9wbG90cy9wb2xhci9oZWxwZXJzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGw9ZS54YXhpcyxjPWUueWF4aXMsdT1lLnJhZGlhbEF4aXMsaD1lLmFuZ3VsYXJBeGlzLGY9ZnVuY3Rpb24odCl7dmFyIGU9dC5jeHgscj10LmN5eTtpZih0LnZhbmdsZXMpcmV0dXJuIGZ1bmN0aW9uKG4saSxvLGwpe3ZhciBjLHU7YS5hbmdsZURlbHRhKG8sbCk+MD8oYz1vLHU9bCk6KGM9bCx1PW8pO3ZhciBoPXMuZmluZEVuY2xvc2luZ1ZlcnRleEFuZ2xlcyhjLHQudmFuZ2xlcylbMF0sZj1zLmZpbmRFbmNsb3NpbmdWZXJ0ZXhBbmdsZXModSx0LnZhbmdsZXMpWzFdLHA9W2gsKGMrdSkvMixmXTtyZXR1cm4gcy5wYXRoUG9seWdvbkFubnVsdXMobixpLGMsdSxwLGUscil9O3JldHVybiBmdW5jdGlvbih0LG4saSxvKXtyZXR1cm4gYS5wYXRoQW5udWx1cyh0LG4saSxvLGUscil9fShlKSxwPWUubGF5ZXJzLmZyb250cGxvdC5zZWxlY3QoXCJnLmJhcmxheWVyXCIpO2EubWFrZVRyYWNlR3JvdXBzKHAscixcInRyYWNlIGJhcnNcIikuZWFjaChmdW5jdGlvbihyKXt2YXIgcz1yWzBdLm5vZGUzPW4uc2VsZWN0KHRoaXMpLHA9YS5lbnN1cmVTaW5nbGUocyxcImdcIixcInBvaW50c1wiKS5zZWxlY3RBbGwoXCJnLnBvaW50XCIpLmRhdGEoYS5pZGVudGl0eSk7cC5lbnRlcigpLmFwcGVuZChcImdcIikuc3R5bGUoXCJ2ZWN0b3ItZWZmZWN0XCIsXCJub24tc2NhbGluZy1zdHJva2VcIikuc3R5bGUoXCJzdHJva2UtbWl0ZXJsaW1pdFwiLDIpLmNsYXNzZWQoXCJwb2ludFwiLCEwKSxwLmV4aXQoKS5yZW1vdmUoKSxwLmVhY2goZnVuY3Rpb24odCl7dmFyIGUscj1uLnNlbGVjdCh0aGlzKSxvPXQucnAwPXUuYzJwKHQuczApLHM9dC5ycDE9dS5jMnAodC5zMSkscD10LnRoZXRhZzA9aC5jMmcodC5wMCksZD10LnRoZXRhZzE9aC5jMmcodC5wMSk7aWYoaShvKSYmaShzKSYmaShwKSYmaShkKSYmbyE9PXMmJnAhPT1kKXt2YXIgZz11LmMyZyh0LnMxKSx2PShwK2QpLzI7dC5jdD1bbC5jMnAoZypNYXRoLmNvcyh2KSksYy5jMnAoZypNYXRoLnNpbih2KSldLGU9ZihvLHMscCxkKX1lbHNlIGU9XCJNMCwwWlwiO2EuZW5zdXJlU2luZ2xlKHIsXCJwYXRoXCIpLmF0dHIoXCJkXCIsZSl9KSxvLnNldENsaXBVcmwocyxlLl9oYXNDbGlwT25BeGlzRmFsc2U/ZS5jbGlwSWRzLmZvclRyYWNlczpudWxsLHQpfSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9wb2xhci9oZWxwZXJzXCI6ODEyLGQzOjE1NSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sODYyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi9iYXIvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LGw9bi5tYXJrZXIsYz1sLmxpbmU7ZS5leHBvcnRzPXt5Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx4Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx4MDp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx5MDp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSxuYW1lOnt2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LHRleHQ6cyh7fSxuLnRleHQse30pLGhvdmVydGV4dDpzKHt9LG4uaG92ZXJ0ZXh0LHt9KSxob3ZlcnRlbXBsYXRlOm8oe30pLHdoaXNrZXJ3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6LjUsZWRpdFR5cGU6XCJjYWxjXCJ9LG5vdGNoZWQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LG5vdGNod2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6LjUsZGZsdDouMjUsZWRpdFR5cGU6XCJjYWxjXCJ9LGJveHBvaW50czp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYWxsXCIsXCJvdXRsaWVyc1wiLFwic3VzcGVjdGVkb3V0bGllcnNcIiwhMV0sZGZsdDpcIm91dGxpZXJzXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGJveG1lYW46e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOlshMCxcInNkXCIsITFdLGRmbHQ6ITEsZWRpdFR5cGU6XCJjYWxjXCJ9LGppdHRlcjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGVkaXRUeXBlOlwiY2FsY1wifSxwb2ludHBvczp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjotMixtYXg6MixlZGl0VHlwZTpcImNhbGNcIn0sb3JpZW50YXRpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInZcIixcImhcIl0sZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifSxtYXJrZXI6e291dGxpZXJjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDpcInJnYmEoMCwgMCwgMCwgMClcIixlZGl0VHlwZTpcInN0eWxlXCJ9LHN5bWJvbDpzKHt9LGwuc3ltYm9sLHthcnJheU9rOiExLGVkaXRUeXBlOlwicGxvdFwifSksb3BhY2l0eTpzKHt9LGwub3BhY2l0eSx7YXJyYXlPazohMSxkZmx0OjEsZWRpdFR5cGU6XCJzdHlsZVwifSksc2l6ZTpzKHt9LGwuc2l6ZSx7YXJyYXlPazohMSxlZGl0VHlwZTpcImNhbGNcIn0pLGNvbG9yOnMoe30sbC5jb2xvcix7YXJyYXlPazohMSxlZGl0VHlwZTpcInN0eWxlXCJ9KSxsaW5lOntjb2xvcjpzKHt9LGMuY29sb3Ise2FycmF5T2s6ITEsZGZsdDphLmRlZmF1bHRMaW5lLGVkaXRUeXBlOlwic3R5bGVcIn0pLHdpZHRoOnMoe30sYy53aWR0aCx7YXJyYXlPazohMSxkZmx0OjAsZWRpdFR5cGU6XCJzdHlsZVwifSksb3V0bGllcmNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcInN0eWxlXCJ9LG91dGxpZXJ3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZTpcInN0eWxlXCJ9LGVkaXRUeXBlOlwic3R5bGVcIn0sZWRpdFR5cGU6XCJwbG90XCJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcInN0eWxlXCJ9LHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoyLGVkaXRUeXBlOlwic3R5bGVcIn0sZWRpdFR5cGU6XCJwbG90XCJ9LGZpbGxjb2xvcjpuLmZpbGxjb2xvcixvZmZzZXRncm91cDppLm9mZnNldGdyb3VwLGFsaWdubWVudGdyb3VwOmkuYWxpZ25tZW50Z3JvdXAsc2VsZWN0ZWQ6e21hcmtlcjpuLnNlbGVjdGVkLm1hcmtlcixlZGl0VHlwZTpcInN0eWxlXCJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjpuLnVuc2VsZWN0ZWQubWFya2VyLGVkaXRUeXBlOlwic3R5bGVcIn0saG92ZXJvbjp7dmFsVHlwZTpcImZsYWdsaXN0XCIsZmxhZ3M6W1wiYm94ZXNcIixcInBvaW50c1wiXSxkZmx0OlwiYm94ZXMrcG9pbnRzXCIsZWRpdFR5cGU6XCJzdHlsZVwifX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiOjU3NyxcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uL2Jhci9hdHRyaWJ1dGVzXCI6ODM5LFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCI6MTA1Mn1dLDg2MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuLi8uLi9saWJcIiksYT1pLl8sbz10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIik7ZnVuY3Rpb24gcyh0LGUscil7dmFyIG49e3RleHQ6XCJ0eFwiLGhvdmVydGV4dDpcImh0eFwifTtmb3IodmFyIGkgaW4gbilBcnJheS5pc0FycmF5KGVbaV0pJiYodFtuW2ldXT1lW2ldW3JdKX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQudi1lLnZ9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdC52fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLHUsaCxmLHAsZD10Ll9mdWxsTGF5b3V0LGc9by5nZXRGcm9tSWQodCxlLnhheGlzfHxcInhcIiksdj1vLmdldEZyb21JZCh0LGUueWF4aXN8fFwieVwiKSxtPVtdLHk9XCJ2aW9saW5cIj09PWUudHlwZT9cIl9udW1WaW9saW5zXCI6XCJfbnVtQm94ZXNcIjtcImhcIj09PWUub3JpZW50YXRpb24/KHU9ZyxoPVwieFwiLGY9dixwPVwieVwiKToodT12LGg9XCJ5XCIsZj1nLHA9XCJ4XCIpO3ZhciB4LGI9dS5tYWtlQ2FsY2RhdGEoZSxoKSxfPWZ1bmN0aW9uKHQsZSxyLGEsbyl7aWYoZSBpbiB0KXJldHVybiByLm1ha2VDYWxjZGF0YSh0LGUpO3ZhciBzO3M9ZStcIjBcImluIHQ/dFtlK1wiMFwiXTpcIm5hbWVcImluIHQmJihcImNhdGVnb3J5XCI9PT1yLnR5cGV8fG4odC5uYW1lKSYmLTEhPT1bXCJsaW5lYXJcIixcImxvZ1wiXS5pbmRleE9mKHIudHlwZSl8fGkuaXNEYXRlVGltZSh0Lm5hbWUpJiZcImRhdGVcIj09PXIudHlwZSk/dC5uYW1lOm87dmFyIGw9XCJtdWx0aWNhdGVnb3J5XCI9PT1yLnR5cGU/ci5yMmNfanVzdF9pbmRpY2VzKHMpOnIuZDJjKHMsMCx0W2UrXCJjYWxlbmRhclwiXSk7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGx9KX0oZSxwLGYsYixkW3ldKSx3PWkuZGlzdGluY3RWYWxzKF8pLGs9dy52YWxzLEE9dy5taW5EaWZmLzIsVD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKzEpLGk9MDtpPHI7aSsrKW5baV09dFtpXS1lO3JldHVybiBuW3JdPXRbci0xXStlLG59KGssQSksTT1rLmxlbmd0aCxTPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT1bXTtyZXR1cm4gZX0oTSk7Zm9yKHI9MDtyPGUuX2xlbmd0aDtyKyspe3ZhciBFPWJbcl07aWYobihFKSl7dmFyIEM9aS5maW5kQmluKF9bcl0sVCk7aWYoQz49MCYmQzxNKXt2YXIgTD17djpFLGk6cn07cyhMLGUsciksU1tDXS5wdXNoKEwpfX19dmFyIHo9XCJhbGxcIj09PShlLmJveHBvaW50c3x8ZS5wb2ludHMpP2kuaWRlbnRpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHQudjx4LmxmfHx0LnY+eC51Zn07Zm9yKHI9MDtyPE07cisrKWlmKFNbcl0ubGVuZ3RoPjApe3ZhciBPPVNbcl0uc29ydChsKSxJPU8ubWFwKGMpLEQ9SS5sZW5ndGg7KHg9e30pLnBvcz1rW3JdLHgucHRzPU8seC5taW49SVswXSx4Lm1heD1JW0QtMV0seC5tZWFuPWkubWVhbihJLEQpLHguc2Q9aS5zdGRldihJLEQseC5tZWFuKSx4LnExPWkuaW50ZXJwKEksLjI1KSx4Lm1lZD1pLmludGVycChJLC41KSx4LnEzPWkuaW50ZXJwKEksLjc1KSx4LmxmPU1hdGgubWluKHgucTEsSVtNYXRoLm1pbihpLmZpbmRCaW4oMi41KngucTEtMS41KngucTMsSSwhMCkrMSxELTEpXSkseC51Zj1NYXRoLm1heCh4LnEzLElbTWF0aC5tYXgoaS5maW5kQmluKDIuNSp4LnEzLTEuNSp4LnExLEkpLDApXSkseC5sbz00KngucTEtMyp4LnEzLHgudW89NCp4LnEzLTMqeC5xMTt2YXIgUD0xLjU3Kih4LnEzLXgucTEpL01hdGguc3FydChEKTt4LmxuPXgubWVkLVAseC51bj14Lm1lZCtQLHgucHRzMj1PLmZpbHRlcih6KSxtLnB1c2goeCl9IWZ1bmN0aW9uKHQsZSl7aWYoaS5pc0FycmF5T3JUeXBlZEFycmF5KGUuc2VsZWN0ZWRwb2ludHMpKWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXtmb3IodmFyIG49dFtyXS5wdHN8fFtdLGE9e30sbz0wO288bi5sZW5ndGg7bysrKWFbbltvXS5pXT1vO2kudGFnU2VsZWN0ZWQobixlLGEpfX0obSxlKTt2YXIgUj1vLmZpbmRFeHRyZW1lcyh1LGIse3BhZGRlZDohMH0pO3JldHVybiBlLl9leHRyZW1lc1t1Ll9pZF09UixtLmxlbmd0aD4wPyhtWzBdLnQ9e251bTpkW3ldLGRQb3M6QSxwb3NMZXR0ZXI6cCx2YWxMZXR0ZXI6aCxsYWJlbHM6e21lZDphKHQsXCJtZWRpYW46XCIpLG1pbjphKHQsXCJtaW46XCIpLHExOmEodCxcInExOlwiKSxxMzphKHQsXCJxMzpcIiksbWF4OmEodCxcIm1heDpcIiksbWVhbjpcInNkXCI9PT1lLmJveG1lYW4/YSh0LFwibWVhbiBcXHhiMSBcXHUwM2MzOlwiKTphKHQsXCJtZWFuOlwiKSxsZjphKHQsXCJsb3dlciBmZW5jZTpcIiksdWY6YSh0LFwidXBwZXIgZmVuY2U6XCIpfX0sZFt5XSsrLG0pOlt7dDp7ZW1wdHk6ITB9fV19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sODY0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIikuZ2V0QXhpc0dyb3VwLG89W1widlwiLFwiaFwiXTtmdW5jdGlvbiBzKHQsZSxyLG8pe3ZhciBzLGwsYyx1PWUuY2FsY2RhdGEsaD1lLl9mdWxsTGF5b3V0LGY9by5faWQscD1mLmNoYXJBdCgwKSxkPVtdLGc9MDtmb3Iocz0wO3M8ci5sZW5ndGg7cysrKWZvcihjPXVbcltzXV0sbD0wO2w8Yy5sZW5ndGg7bCsrKWQucHVzaChjW2xdLnBvcyksZys9KGNbbF0ucHRzMnx8W10pLmxlbmd0aDtpZihkLmxlbmd0aCl7dmFyIHY9aS5kaXN0aW5jdFZhbHMoZCksbT12Lm1pbkRpZmYvMjtuLm1pbkR0aWNrKG8sdi5taW5EaWZmLHYudmFsc1swXSwhMCk7dmFyIHk9aFtcInZpb2xpblwiPT09dD9cIl9udW1WaW9saW5zXCI6XCJfbnVtQm94ZXNcIl0seD1cImdyb3VwXCI9PT1oW3QrXCJtb2RlXCJdJiZ5PjEsYj0xLWhbdCtcImdhcFwiXSxfPTEtaFt0K1wiZ3JvdXBnYXBcIl07Zm9yKHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIHcsayxBLFQsTSxTLEU9KGM9dVtyW3NdXSlbMF0udHJhY2UsQz1jWzBdLnQsTD1FLndpZHRoLHo9RS5zaWRlO2lmKEwpdz1rPVQ9TC8yLEE9MDtlbHNlIGlmKHc9bSx4KXt2YXIgTz1hKGgsby5faWQpK0Uub3JpZW50YXRpb24sST0oaC5fYWxpZ25tZW50T3B0c1tPXXx8e30pW0UuYWxpZ25tZW50Z3JvdXBdfHx7fSxEPU9iamVjdC5rZXlzKEkub2Zmc2V0R3JvdXBzfHx7fSkubGVuZ3RoLFA9RHx8eTtrPXcqYipfL1AsQT0yKncqKCgoRD9FLl9vZmZzZXRJbmRleDpDLm51bSkrLjUpL1AtLjUpKmIsVD13KmIvUH1lbHNlIGs9dypiKl8sQT0wLFQ9dztDLmRQb3M9dyxDLmJQb3M9QSxDLmJkUG9zPWssQy53SG92ZXI9VDt2YXIgUixGLEIsTixqLFYsVT1BK2s7XCJwb3NpdGl2ZVwiPT09ej8oTT13KihMPzE6LjUpLFI9VSxTPVI9QSk6XCJuZWdhdGl2ZVwiPT09ej8oTT1SPUEsUz13KihMPzE6LjUpLEY9VSk6KE09Uz13LFI9Rj1VKTt2YXIgcT0hMTtpZigoRS5ib3hwb2ludHN8fEUucG9pbnRzKSYmZz4wKXt2YXIgSD1FLnBvaW50cG9zLEc9RS5qaXR0ZXIsWT1FLm1hcmtlci5zaXplLzIsVz0wO0grRz49MCYmKChXPVUqKEgrRykpPk0/KHE9ITAsaj1ZLEI9Vyk6Vz5SJiYoaj1ZLEI9TSkpLFc8PU0mJihCPU0pO3ZhciBYPTA7SC1HPD0wJiYoKFg9LVUqKEgtRykpPlM/KHE9ITAsVj1ZLE49WCk6WD5GJiYoVj1ZLE49UykpLFg8PVMmJihOPVMpfWVsc2UgQj1NLE49Uzt2YXIgWj1uZXcgQXJyYXkoYy5sZW5ndGgpO2ZvcihsPTA7bDxjLmxlbmd0aDtsKyspWltsXT1jW2xdLnBvcztFLl9leHRyZW1lc1tmXT1uLmZpbmRFeHRyZW1lcyhvLFose3BhZGRlZDpxLHZwYWRtaW51czpOLHZwYWRwbHVzOkIscHBhZG1pbnVzOnt4OlYseTpqfVtwXSxwcGFkcGx1czp7eDpqLHk6Vn1bcF19KX19fWUuZXhwb3J0cz17Y3Jvc3NUcmFjZUNhbGM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jYWxjZGF0YSxuPWUueGF4aXMsaT1lLnlheGlzLGE9MDthPG8ubGVuZ3RoO2ErKyl7Zm9yKHZhciBsPW9bYV0sYz1cImhcIj09PWw/aTpuLHU9W10saD0wO2g8ci5sZW5ndGg7aCsrKXt2YXIgZj1yW2hdLHA9ZlswXS50LGQ9ZlswXS50cmFjZTshMCE9PWQudmlzaWJsZXx8XCJib3hcIiE9PWQudHlwZSYmXCJjYW5kbGVzdGlja1wiIT09ZC50eXBlfHxwLmVtcHR5fHwoZC5vcmllbnRhdGlvbnx8XCJ2XCIpIT09bHx8ZC54YXhpcyE9PW4uX2lkfHxkLnlheGlzIT09aS5faWR8fHUucHVzaChoKX1zKFwiYm94XCIsdCx1LGMpfX0sc2V0UG9zaXRpb25PZmZzZXQ6c319LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCI6NzUyfV0sODY1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLG89dChcIi4uL2Jhci9kZWZhdWx0c1wiKS5oYW5kbGVHcm91cGluZ0RlZmF1bHRzLHM9dChcIi4vYXR0cmlidXRlc1wiKTtmdW5jdGlvbiBsKHQsZSxyLGEpe3ZhciBvLHMsbD1yKFwieVwiKSxjPXIoXCJ4XCIpLHU9YyYmYy5sZW5ndGg7aWYobCYmbC5sZW5ndGgpbz1cInZcIix1P3M9TWF0aC5taW4obi5taW5Sb3dMZW5ndGgoYyksbi5taW5Sb3dMZW5ndGgobCkpOihyKFwieDBcIikscz1uLm1pblJvd0xlbmd0aChsKSk7ZWxzZXtpZighdSlyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO289XCJoXCIscihcInkwXCIpLHM9bi5taW5Sb3dMZW5ndGgoYyl9ZS5fbGVuZ3RoPXMsaS5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcImhhbmRsZVRyYWNlRGVmYXVsdHNcIikodCxlLFtcInhcIixcInlcIl0sYSkscihcIm9yaWVudGF0aW9uXCIsbyl9ZnVuY3Rpb24gYyh0LGUscixpKXt2YXIgYT1pLnByZWZpeCxvPW4uY29lcmNlMih0LGUscyxcIm1hcmtlci5vdXRsaWVyY29sb3JcIiksbD1yKFwibWFya2VyLmxpbmUub3V0bGllcmNvbG9yXCIpLGM9cihhK1wicG9pbnRzXCIsb3x8bD9cInN1c3BlY3RlZG91dGxpZXJzXCI6dm9pZCAwKTtjPyhyKFwiaml0dGVyXCIsXCJhbGxcIj09PWM/LjM6MCkscihcInBvaW50cG9zXCIsXCJhbGxcIj09PWM/LTEuNTowKSxyKFwibWFya2VyLnN5bWJvbFwiKSxyKFwibWFya2VyLm9wYWNpdHlcIikscihcIm1hcmtlci5zaXplXCIpLHIoXCJtYXJrZXIuY29sb3JcIixlLmxpbmUuY29sb3IpLHIoXCJtYXJrZXIubGluZS5jb2xvclwiKSxyKFwibWFya2VyLmxpbmUud2lkdGhcIiksXCJzdXNwZWN0ZWRvdXRsaWVyc1wiPT09YyYmKHIoXCJtYXJrZXIubGluZS5vdXRsaWVyY29sb3JcIixlLm1hcmtlci5jb2xvcikscihcIm1hcmtlci5saW5lLm91dGxpZXJ3aWR0aFwiKSkscihcInNlbGVjdGVkLm1hcmtlci5jb2xvclwiKSxyKFwidW5zZWxlY3RlZC5tYXJrZXIuY29sb3JcIikscihcInNlbGVjdGVkLm1hcmtlci5zaXplXCIpLHIoXCJ1bnNlbGVjdGVkLm1hcmtlci5zaXplXCIpLHIoXCJ0ZXh0XCIpLHIoXCJob3ZlcnRleHRcIikpOmRlbGV0ZSBlLm1hcmtlcjt2YXIgdT1yKFwiaG92ZXJvblwiKTtcImFsbFwiIT09dSYmLTE9PT11LmluZGV4T2YoXCJwb2ludHNcIil8fHIoXCJob3ZlcnRlbXBsYXRlXCIpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHIpfWUuZXhwb3J0cz17c3VwcGx5RGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIsaSl7ZnVuY3Rpb24gbyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfWwodCxlLG8saSksITEhPT1lLnZpc2libGUmJihvKFwibGluZS5jb2xvclwiLCh0Lm1hcmtlcnx8e30pLmNvbG9yfHxyKSxvKFwibGluZS53aWR0aFwiKSxvKFwiZmlsbGNvbG9yXCIsYS5hZGRPcGFjaXR5KGUubGluZS5jb2xvciwuNSkpLG8oXCJ3aGlza2Vyd2lkdGhcIiksbyhcImJveG1lYW5cIiksbyhcIndpZHRoXCIpLG8oXCJub3RjaGVkXCIsdm9pZCAwIT09dC5ub3RjaHdpZHRoKSYmbyhcIm5vdGNod2lkdGhcIiksYyh0LGUsbyx7cHJlZml4OlwiYm94XCJ9KSl9LGNyb3NzVHJhY2VEZWZhdWx0czpmdW5jdGlvbih0LGUpe3ZhciByLGk7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gbi5jb2VyY2UoaS5faW5wdXQsaSxzLHQpfWZvcih2YXIgbD0wO2w8dC5sZW5ndGg7bCsrKXt2YXIgYz0oaT10W2xdKS50eXBlO1wiYm94XCIhPT1jJiZcInZpb2xpblwiIT09Y3x8KHI9aS5faW5wdXQsXCJncm91cFwiPT09ZVtjK1wibW9kZVwiXSYmbyhyLGksZSxhKSl9fSxoYW5kbGVTYW1wbGVEZWZhdWx0czpsLGhhbmRsZVBvaW50c0RlZmF1bHRzOmN9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9iYXIvZGVmYXVsdHNcIjo4NDMsXCIuL2F0dHJpYnV0ZXNcIjo4NjJ9XSw4NjY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5ob3Zlck9uQm94JiYodC5ob3Zlck9uQm94PWUuaG92ZXJPbkJveCksXCJ4VmFsXCJpbiBlJiYodC54PWUueFZhbCksXCJ5VmFsXCJpbiBlJiYodC55PWUueVZhbCksZS54YSYmKHQueGF4aXM9ZS54YSksZS55YSYmKHQueWF4aXM9ZS55YSksdH19LHt9XSw4Njc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxzPXQoXCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dFwiKTtmdW5jdGlvbiBsKHQsZSxyLHMpe3ZhciBsLGMsdSxoLGYscCxkLGcsdixtLHkseCxiPXQuY2QsXz10LnhhLHc9dC55YSxrPWJbMF0udHJhY2UsQT1iWzBdLnQsVD1cInZpb2xpblwiPT09ay50eXBlLE09W10sUz1BLmJkUG9zLEU9QS53SG92ZXIsQz1mdW5jdGlvbih0KXtyZXR1cm4gdC5wb3MrQS5iUG9zLXB9O1QmJlwiYm90aFwiIT09ay5zaWRlPyhcInBvc2l0aXZlXCI9PT1rLnNpZGUmJih2PWZ1bmN0aW9uKHQpe3ZhciBlPUModCk7cmV0dXJuIGEuaW5ib3goZSxlK0UsbSl9KSxcIm5lZ2F0aXZlXCI9PT1rLnNpZGUmJih2PWZ1bmN0aW9uKHQpe3ZhciBlPUModCk7cmV0dXJuIGEuaW5ib3goZS1FLGUsbSl9KSk6dj1mdW5jdGlvbih0KXt2YXIgZT1DKHQpO3JldHVybiBhLmluYm94KGUtRSxlK0UsbSl9LHg9VD9mdW5jdGlvbih0KXtyZXR1cm4gYS5pbmJveCh0LnNwYW5bMF0tZix0LnNwYW5bMV0tZixtKX06ZnVuY3Rpb24odCl7cmV0dXJuIGEuaW5ib3godC5taW4tZix0Lm1heC1mLG0pfSxcImhcIj09PWsub3JpZW50YXRpb24/KGY9ZSxwPXIsZD14LGc9dixsPVwieVwiLHU9dyxjPVwieFwiLGg9Xyk6KGY9cixwPWUsZD12LGc9eCxsPVwieFwiLHU9XyxjPVwieVwiLGg9dyk7dmFyIEw9TWF0aC5taW4oMSxTL01hdGguYWJzKHUucjJjKHUucmFuZ2VbMV0pLXUucjJjKHUucmFuZ2VbMF0pKSk7ZnVuY3Rpb24geih0KXtyZXR1cm4oZCh0KStnKHQpKS8yfW09dC5tYXhIb3ZlckRpc3RhbmNlLUwseT10Lm1heFNwaWtlRGlzdGFuY2UtTDt2YXIgTz1hLmdldERpc3RhbmNlRnVuY3Rpb24ocyxkLGcseik7aWYoYS5nZXRDbG9zZXN0KGIsTyx0KSwhMT09PXQuaW5kZXgpcmV0dXJuW107dmFyIEk9Ylt0LmluZGV4XSxEPWsubGluZS5jb2xvcixQPShrLm1hcmtlcnx8e30pLmNvbG9yO28ub3BhY2l0eShEKSYmay5saW5lLndpZHRoP3QuY29sb3I9RDpvLm9wYWNpdHkoUCkmJmsuYm94cG9pbnRzP3QuY29sb3I9UDp0LmNvbG9yPWsuZmlsbGNvbG9yLHRbbCtcIjBcIl09dS5jMnAoSS5wb3MrQS5iUG9zLVMsITApLHRbbCtcIjFcIl09dS5jMnAoSS5wb3MrQS5iUG9zK1MsITApLHRbbCtcIkxhYmVsVmFsXCJdPUkucG9zO3ZhciBSPWwrXCJTcGlrZVwiO3Quc3Bpa2VEaXN0YW5jZT16KEkpKnkvbSx0W1JdPXUuYzJwKEkucG9zLCEwKTt2YXIgRj17fSxCPVtcIm1lZFwiLFwibWluXCIsXCJxMVwiLFwicTNcIixcIm1heFwiXTsoay5ib3htZWFufHwoay5tZWFubGluZXx8e30pLnZpc2libGUpJiZCLnB1c2goXCJtZWFuXCIpLChrLmJveHBvaW50c3x8ay5wb2ludHMpJiZCLnB1c2goXCJsZlwiLFwidWZcIik7Zm9yKHZhciBOPTA7TjxCLmxlbmd0aDtOKyspe3ZhciBqPUJbTl07aWYoaiBpbiBJJiYhKElbal1pbiBGKSl7RltJW2pdXT0hMDt2YXIgVj1JW2pdLFU9aC5jMnAoViwhMCkscT1pLmV4dGVuZEZsYXQoe30sdCk7cVtjK1wiMFwiXT1xW2MrXCIxXCJdPVUscVtjK1wiTGFiZWxWYWxcIl09VixxW2MrXCJMYWJlbFwiXT0oQS5sYWJlbHM/QS5sYWJlbHNbal0rXCIgXCI6XCJcIikrbi5ob3ZlckxhYmVsVGV4dChoLFYpLHEuaG92ZXJPbkJveD0hMCxcIm1lYW5cIj09PWomJlwic2RcImluIEkmJlwic2RcIj09PWsuYm94bWVhbiYmKHFbYytcImVyclwiXT1JLnNkKSx0Lm5hbWU9XCJcIix0LnNwaWtlRGlzdGFuY2U9dm9pZCAwLHRbUl09dm9pZCAwLHEuaG92ZXJ0ZW1wbGF0ZT0hMSxNLnB1c2gocSl9fXJldHVybiBNfWZ1bmN0aW9uIGModCxlLHIpe2Zvcih2YXIgbixvLGwsYz10LmNkLHU9dC54YSxoPXQueWEsZj1jWzBdLnRyYWNlLHA9dS5jMnAoZSksZD1oLmMycChyKSxnPWEucXVhZHJhdHVyZShmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnModS5jMnAodC54KS1wKS1lLDEtMy9lKX0sZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMyx0Lm1yY3x8MCk7cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKGguYzJwKHQueSktZCktZSwxLTMvZSl9KSx2PSExLG09MDttPGMubGVuZ3RoO20rKyl7bz1jW21dO2Zvcih2YXIgeT0wO3k8KG8ucHRzfHxbXSkubGVuZ3RoO3krKyl7dmFyIHg9ZyhsPW8ucHRzW3ldKTt4PD10LmRpc3RhbmNlJiYodC5kaXN0YW5jZT14LHY9W20seV0pfX1pZighdilyZXR1cm4hMTtsPShvPWNbdlswXV0pLnB0c1t2WzFdXTt2YXIgYixfPXUuYzJwKGwueCwhMCksdz1oLmMycChsLnksITApLGs9bC5tcmN8fDE7cmV0dXJuIG49aS5leHRlbmRGbGF0KHt9LHQse2luZGV4OmwuaSxjb2xvcjooZi5tYXJrZXJ8fHt9KS5jb2xvcixuYW1lOmYubmFtZSx4MDpfLWsseDE6XytrLHkwOnctayx5MTp3K2ssc3Bpa2VEaXN0YW5jZTp0LmRpc3RhbmNlLGhvdmVydGVtcGxhdGU6Zi5ob3ZlcnRlbXBsYXRlfSksXCJoXCI9PT1mLm9yaWVudGF0aW9uPyhiPWgsbi54TGFiZWxWYWw9bC54LG4ueUxhYmVsVmFsPW8ucG9zKTooYj11LG4ueExhYmVsVmFsPW8ucG9zLG4ueUxhYmVsVmFsPWwueSksbltiLl9pZC5jaGFyQXQoMCkrXCJTcGlrZVwiXT1iLmMycChvLnBvcywhMCkscyhsLGYsbiksbn1lLmV4cG9ydHM9e2hvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9dC5jZFswXS50cmFjZS5ob3Zlcm9uLG89W107cmV0dXJuLTEhPT1hLmluZGV4T2YoXCJib3hlc1wiKSYmKG89by5jb25jYXQobCh0LGUscixuKSkpLC0xIT09YS5pbmRleE9mKFwicG9pbnRzXCIpJiYoaT1jKHQsZSxyKSksXCJjbG9zZXN0XCI9PT1uP2k/W2ldOm86aT8oby5wdXNoKGkpLG8pOm99LGhvdmVyT25Cb3hlczpsLGhvdmVyT25Qb2ludHM6Y319LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2Z4XCI6NjE3LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dFwiOjEwNjB9XSw4Njg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLmxheW91dEF0dHJpYnV0ZXM9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKS5zdXBwbHlEZWZhdWx0cyxuLmNyb3NzVHJhY2VEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKS5jcm9zc1RyYWNlRGVmYXVsdHMsbi5zdXBwbHlMYXlvdXREZWZhdWx0cz10KFwiLi9sYXlvdXRfZGVmYXVsdHNcIikuc3VwcGx5TGF5b3V0RGVmYXVsdHMsbi5jYWxjPXQoXCIuL2NhbGNcIiksbi5jcm9zc1RyYWNlQ2FsYz10KFwiLi9jcm9zc190cmFjZV9jYWxjXCIpLmNyb3NzVHJhY2VDYWxjLG4ucGxvdD10KFwiLi9wbG90XCIpLnBsb3Qsbi5zdHlsZT10KFwiLi9zdHlsZVwiKS5zdHlsZSxuLnN0eWxlT25TZWxlY3Q9dChcIi4vc3R5bGVcIikuc3R5bGVPblNlbGVjdCxuLmhvdmVyUG9pbnRzPXQoXCIuL2hvdmVyXCIpLmhvdmVyUG9pbnRzLG4uZXZlbnREYXRhPXQoXCIuL2V2ZW50X2RhdGFcIiksbi5zZWxlY3RQb2ludHM9dChcIi4vc2VsZWN0XCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwiYm94XCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCIpLG4uY2F0ZWdvcmllcz1bXCJjYXJ0ZXNpYW5cIixcInN2Z1wiLFwic3ltYm9sc1wiLFwib3JpZW50ZWRcIixcImJveC12aW9saW5cIixcInNob3dMZWdlbmRcIixcImJveExheW91dFwiLFwiem9vbVNjYWxlXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi9hdHRyaWJ1dGVzXCI6ODYyLFwiLi9jYWxjXCI6ODYzLFwiLi9jcm9zc190cmFjZV9jYWxjXCI6ODY0LFwiLi9kZWZhdWx0c1wiOjg2NSxcIi4vZXZlbnRfZGF0YVwiOjg2NixcIi4vaG92ZXJcIjo4NjcsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6ODY5LFwiLi9sYXlvdXRfZGVmYXVsdHNcIjo4NzAsXCIuL3Bsb3RcIjo4NzEsXCIuL3NlbGVjdFwiOjg3MixcIi4vc3R5bGVcIjo4NzN9XSw4Njk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e2JveG1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImdyb3VwXCIsXCJvdmVybGF5XCJdLGRmbHQ6XCJvdmVybGF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGJveGdhcDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6LjMsZWRpdFR5cGU6XCJjYWxjXCJ9LGJveGdyb3VwZ2FwOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDouMyxlZGl0VHlwZTpcImNhbGNcIn19fSx7fV0sODcwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpO2Z1bmN0aW9uIG8odCxlLHIsaSxhKXtmb3IodmFyIG89YStcIkxheW91dFwiLHM9ITEsbD0wO2w8ci5sZW5ndGg7bCsrKXt2YXIgYz1yW2xdO2lmKG4udHJhY2VJcyhjLG8pKXtzPSEwO2JyZWFrfX1zJiYoaShhK1wibW9kZVwiKSxpKGErXCJnYXBcIiksaShhK1wiZ3JvdXBnYXBcIikpfWUuZXhwb3J0cz17c3VwcGx5TGF5b3V0RGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIpe28oMCwwLHIsZnVuY3Rpb24ocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLGEscixuKX0sXCJib3hcIil9LF9zdXBwbHk6b319LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjg2OX1dLDg3MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLG89NSxzPS4wMTtmdW5jdGlvbiBsKHQsZSxyLGEpe3ZhciBvLHMsbD1lLnBvcyxjPWUudmFsLHU9YS5iUG9zLGg9YS53ZFBvc3x8MCxmPWEuYlBvc1B4T2Zmc2V0fHwwLHA9ci53aGlza2Vyd2lkdGh8fDAsZD1yLm5vdGNoZWR8fCExLGc9ZD8xLTIqci5ub3RjaHdpZHRoOjE7QXJyYXkuaXNBcnJheShhLmJkUG9zKT8obz1hLmJkUG9zWzBdLHM9YS5iZFBvc1sxXSk6KG89YS5iZFBvcyxzPWEuYmRQb3MpO3ZhciB2PXQuc2VsZWN0QWxsKFwicGF0aC5ib3hcIikuZGF0YShcInZpb2xpblwiIT09ci50eXBlfHxyLmJveC52aXNpYmxlP2kuaWRlbnRpdHk6W10pO3YuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLnN0eWxlKFwidmVjdG9yLWVmZmVjdFwiLFwibm9uLXNjYWxpbmctc3Ryb2tlXCIpLmF0dHIoXCJjbGFzc1wiLFwiYm94XCIpLHYuZXhpdCgpLnJlbW92ZSgpLHYuZWFjaChmdW5jdGlvbih0KXtpZih0LmVtcHR5KXJldHVyblwiTTAsMFpcIjt2YXIgZT10LnBvcyxhPWwuYzJwKGUrdSwhMCkrZix2PWwuYzJwKGUrdS1vLCEwKStmLG09bC5jMnAoZSt1K3MsITApK2YseT1sLmMycChlK3UtaCwhMCkrZix4PWwuYzJwKGUrdStoLCEwKStmLGI9bC5jMnAoZSt1LW8qZywhMCkrZixfPWwuYzJwKGUrdStzKmcsITApK2Ysdz1jLmMycCh0LnExLCEwKSxrPWMuYzJwKHQucTMsITApLEE9aS5jb25zdHJhaW4oYy5jMnAodC5tZWQsITApLE1hdGgubWluKHcsaykrMSxNYXRoLm1heCh3LGspLTEpLFQ9dm9pZCAwPT09dC5sZnx8ITE9PT1yLmJveHBvaW50cyxNPWMuYzJwKFQ/dC5taW46dC5sZiwhMCksUz1jLmMycChUP3QubWF4OnQudWYsITApLEU9Yy5jMnAodC5sbiwhMCksQz1jLmMycCh0LnVuLCEwKTtcImhcIj09PXIub3JpZW50YXRpb24/bi5zZWxlY3QodGhpcykuYXR0cihcImRcIixcIk1cIitBK1wiLFwiK2IrXCJWXCIrXytcIk1cIit3K1wiLFwiK3YrXCJWXCIrbSsoZD9cIkhcIitFK1wiTFwiK0ErXCIsXCIrXytcIkxcIitDK1wiLFwiK206XCJcIikrXCJIXCIraytcIlZcIit2KyhkP1wiSFwiK0MrXCJMXCIrQStcIixcIitiK1wiTFwiK0UrXCIsXCIrdjpcIlwiKStcIlpNXCIrdytcIixcIithK1wiSFwiK00rXCJNXCIraytcIixcIithK1wiSFwiK1MrKDA9PT1wP1wiXCI6XCJNXCIrTStcIixcIit5K1wiVlwiK3grXCJNXCIrUytcIixcIit5K1wiVlwiK3gpKTpuLnNlbGVjdCh0aGlzKS5hdHRyKFwiZFwiLFwiTVwiK2IrXCIsXCIrQStcIkhcIitfK1wiTVwiK3YrXCIsXCIrdytcIkhcIittKyhkP1wiVlwiK0UrXCJMXCIrXytcIixcIitBK1wiTFwiK20rXCIsXCIrQzpcIlwiKStcIlZcIitrK1wiSFwiK3YrKGQ/XCJWXCIrQytcIkxcIitiK1wiLFwiK0ErXCJMXCIrditcIixcIitFOlwiXCIpK1wiWk1cIithK1wiLFwiK3crXCJWXCIrTStcIk1cIithK1wiLFwiK2srXCJWXCIrUysoMD09PXA/XCJcIjpcIk1cIit5K1wiLFwiK00rXCJIXCIreCtcIk1cIit5K1wiLFwiK1MrXCJIXCIreCkpfSl9ZnVuY3Rpb24gYyh0LGUscixuKXt2YXIgbD1lLngsYz1lLnksdT1uLmJkUG9zLGg9bi5iUG9zLGY9ci5ib3hwb2ludHN8fHIucG9pbnRzO2kuc2VlZFBzZXVkb1JhbmRvbSgpO3ZhciBwPXQuc2VsZWN0QWxsKFwiZy5wb2ludHNcIikuZGF0YShmP2Z1bmN0aW9uKHQpe3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7dC50PW4sdC50cmFjZT1yfSksdH06W10pO3AuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLFwicG9pbnRzXCIpLHAuZXhpdCgpLnJlbW92ZSgpO3ZhciBkPXAuc2VsZWN0QWxsKFwicGF0aFwiKS5kYXRhKGZ1bmN0aW9uKHQpe3ZhciBlLG4sYT10LnB0czIsbD1NYXRoLm1heCgodC5tYXgtdC5taW4pLzEwLHQucTMtdC5xMSksYz0xZS05KmwscD1sKnMsZD1bXSxnPTA7aWYoci5qaXR0ZXIpe2lmKDA9PT1sKWZvcihnPTEsZD1uZXcgQXJyYXkoYS5sZW5ndGgpLGU9MDtlPGEubGVuZ3RoO2UrKylkW2VdPTE7ZWxzZSBmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgdj1NYXRoLm1heCgwLGUtbyksbT1hW3ZdLnYseT1NYXRoLm1pbihhLmxlbmd0aC0xLGUrbykseD1hW3ldLnY7XCJhbGxcIiE9PWYmJihhW2VdLnY8dC5sZj94PU1hdGgubWluKHgsdC5sZik6bT1NYXRoLm1heChtLHQudWYpKTt2YXIgYj1NYXRoLnNxcnQocCooeS12KS8oeC1tK2MpKXx8MDtiPWkuY29uc3RyYWluKE1hdGguYWJzKGIpLDAsMSksZC5wdXNoKGIpLGc9TWF0aC5tYXgoYixnKX1uPTIqci5qaXR0ZXIvKGd8fDEpfWZvcihlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciBfPWFbZV0sdz1fLnYsaz1yLmppdHRlcj9uKmRbZV0qKGkucHNldWRvUmFuZG9tKCktLjUpOjAsQT10LnBvcytoK3UqKHIucG9pbnRwb3Mrayk7XCJoXCI9PT1yLm9yaWVudGF0aW9uPyhfLnk9QSxfLng9dyk6KF8ueD1BLF8ueT13KSxcInN1c3BlY3RlZG91dGxpZXJzXCI9PT1mJiZ3PHQudW8mJnc+dC5sbyYmKF8uc289ITApfXJldHVybiBhfSk7ZC5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChcInBvaW50XCIsITApLGQuZXhpdCgpLnJlbW92ZSgpLGQuY2FsbChhLnRyYW5zbGF0ZVBvaW50cyxsLGMpfWZ1bmN0aW9uIHUodCxlLHIsYSl7dmFyIG8scyxsPWUucG9zLGM9ZS52YWwsdT1hLmJQb3MsaD1hLmJQb3NQeE9mZnNldHx8MCxmPXIuYm94bWVhbnx8KHIubWVhbmxpbmV8fHt9KS52aXNpYmxlO0FycmF5LmlzQXJyYXkoYS5iZFBvcyk/KG89YS5iZFBvc1swXSxzPWEuYmRQb3NbMV0pOihvPWEuYmRQb3Mscz1hLmJkUG9zKTt2YXIgcD10LnNlbGVjdEFsbChcInBhdGgubWVhblwiKS5kYXRhKFwiYm94XCI9PT1yLnR5cGUmJnIuYm94bWVhbnx8XCJ2aW9saW5cIj09PXIudHlwZSYmci5ib3gudmlzaWJsZSYmci5tZWFubGluZS52aXNpYmxlP2kuaWRlbnRpdHk6W10pO3AuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJjbGFzc1wiLFwibWVhblwiKS5zdHlsZSh7ZmlsbDpcIm5vbmVcIixcInZlY3Rvci1lZmZlY3RcIjpcIm5vbi1zY2FsaW5nLXN0cm9rZVwifSkscC5leGl0KCkucmVtb3ZlKCkscC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWwuYzJwKHQucG9zK3UsITApK2gsaT1sLmMycCh0LnBvcyt1LW8sITApK2gsYT1sLmMycCh0LnBvcyt1K3MsITApK2gscD1jLmMycCh0Lm1lYW4sITApLGQ9Yy5jMnAodC5tZWFuLXQuc2QsITApLGc9Yy5jMnAodC5tZWFuK3Quc2QsITApO1wiaFwiPT09ci5vcmllbnRhdGlvbj9uLnNlbGVjdCh0aGlzKS5hdHRyKFwiZFwiLFwiTVwiK3ArXCIsXCIraStcIlZcIithKyhcInNkXCI9PT1mP1wibTAsMExcIitkK1wiLFwiK2UrXCJMXCIrcCtcIixcIitpK1wiTFwiK2crXCIsXCIrZStcIlpcIjpcIlwiKSk6bi5zZWxlY3QodGhpcykuYXR0cihcImRcIixcIk1cIitpK1wiLFwiK3ArXCJIXCIrYSsoXCJzZFwiPT09Zj9cIm0wLDBMXCIrZStcIixcIitkK1wiTFwiK2krXCIsXCIrcCtcIkxcIitlK1wiLFwiK2crXCJaXCI6XCJcIikpfSl9ZS5leHBvcnRzPXtwbG90OmZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPWUueGF4aXMscz1lLnlheGlzO2kubWFrZVRyYWNlR3JvdXBzKGEscixcInRyYWNlIGJveGVzXCIpLmVhY2goZnVuY3Rpb24odCl7dmFyIHIsaSxhPW4uc2VsZWN0KHRoaXMpLGg9dFswXSxmPWgudCxwPWgudHJhY2U7ZS5pc1JhbmdlUGxvdHx8KGgubm9kZTM9YSksZi53ZFBvcz1mLmJkUG9zKnAud2hpc2tlcndpZHRoLCEwIT09cC52aXNpYmxlfHxmLmVtcHR5P2EucmVtb3ZlKCk6KFwiaFwiPT09cC5vcmllbnRhdGlvbj8ocj1zLGk9byk6KHI9byxpPXMpLGwoYSx7cG9zOnIsdmFsOml9LHAsZiksYyhhLHt4Om8seTpzfSxwLGYpLHUoYSx7cG9zOnIsdmFsOml9LHAsZikpfSl9LHBsb3RCb3hBbmRXaGlza2VyczpsLHBsb3RQb2ludHM6YyxwbG90Qm94TWVhbjp1fX0se1wiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vbGliXCI6NzAxLGQzOjE1NX1dLDg3MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10LmNkLGE9dC54YXhpcyxvPXQueWF4aXMscz1bXTtpZighMT09PWUpZm9yKHI9MDtyPGkubGVuZ3RoO3IrKylmb3Iobj0wO248KGlbcl0ucHRzfHxbXSkubGVuZ3RoO24rKylpW3JdLnB0c1tuXS5zZWxlY3RlZD0wO2Vsc2UgZm9yKHI9MDtyPGkubGVuZ3RoO3IrKylmb3Iobj0wO248KGlbcl0ucHRzfHxbXSkubGVuZ3RoO24rKyl7dmFyIGw9aVtyXS5wdHNbbl0sYz1hLmMycChsLngpLHU9by5jMnAobC55KTtlLmNvbnRhaW5zKFtjLHVdLG51bGwsbC5pLHQpPyhzLnB1c2goe3BvaW50TnVtYmVyOmwuaSx4OmEuYzJkKGwueCkseTpvLmMyZChsLnkpfSksbC5zZWxlY3RlZD0xKTpsLnNlbGVjdGVkPTB9cmV0dXJuIHN9fSx7fV0sODczOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpO2UuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCxlKXt2YXIgcj1lP2VbMF0ubm9kZTM6bi5zZWxlY3QodCkuc2VsZWN0QWxsKFwiZy50cmFjZS5ib3hlc1wiKTtyLnN0eWxlKFwib3BhY2l0eVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSxyLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksbz1lWzBdLnRyYWNlLHM9by5saW5lLndpZHRoO2Z1bmN0aW9uIGwodCxlLHIsbil7dC5zdHlsZShcInN0cm9rZS13aWR0aFwiLGUrXCJweFwiKS5jYWxsKGkuc3Ryb2tlLHIpLmNhbGwoaS5maWxsLG4pfXZhciBjPXIuc2VsZWN0QWxsKFwicGF0aC5ib3hcIik7aWYoXCJjYW5kbGVzdGlja1wiPT09by50eXBlKWMuZWFjaChmdW5jdGlvbih0KXtpZighdC5lbXB0eSl7dmFyIGU9bi5zZWxlY3QodGhpcykscj1vW3QuZGlyXTtsKGUsci5saW5lLndpZHRoLHIubGluZS5jb2xvcixyLmZpbGxjb2xvciksZS5zdHlsZShcIm9wYWNpdHlcIixvLnNlbGVjdGVkcG9pbnRzJiYhdC5zZWxlY3RlZD8uMzoxKX19KTtlbHNle2woYyxzLG8ubGluZS5jb2xvcixvLmZpbGxjb2xvciksci5zZWxlY3RBbGwoXCJwYXRoLm1lYW5cIikuc3R5bGUoe1wic3Ryb2tlLXdpZHRoXCI6cyxcInN0cm9rZS1kYXNoYXJyYXlcIjoyKnMrXCJweCxcIitzK1wicHhcIn0pLmNhbGwoaS5zdHJva2Usby5saW5lLmNvbG9yKTt2YXIgdT1yLnNlbGVjdEFsbChcInBhdGgucG9pbnRcIik7YS5wb2ludFN0eWxlKHUsbyx0KX19KX0sc3R5bGVPblNlbGVjdDpmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0ubm9kZTMsbj1lWzBdLnRyYWNlLGk9ci5zZWxlY3RBbGwoXCJwYXRoLnBvaW50XCIpO24uc2VsZWN0ZWRwb2ludHM/YS5zZWxlY3RlZFBvaW50U3R5bGUoaSxuKTphLnBvaW50U3R5bGUoaSxuLHQpfX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksZDM6MTU1fV0sODc0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKS5leHRlbmRGbGF0LGk9dChcIi4uL29obGMvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi9ib3gvYXR0cmlidXRlc1wiKTtmdW5jdGlvbiBvKHQpe3JldHVybntsaW5lOntjb2xvcjpuKHt9LGEubGluZS5jb2xvcix7ZGZsdDp0fSksd2lkdGg6YS5saW5lLndpZHRoLGVkaXRUeXBlOlwic3R5bGVcIn0sZmlsbGNvbG9yOmEuZmlsbGNvbG9yLGVkaXRUeXBlOlwic3R5bGVcIn19ZS5leHBvcnRzPXt4OmkueCxvcGVuOmkub3BlbixoaWdoOmkuaGlnaCxsb3c6aS5sb3csY2xvc2U6aS5jbG9zZSxsaW5lOnt3aWR0aDpuKHt9LGEubGluZS53aWR0aCx7fSksZWRpdFR5cGU6XCJzdHlsZVwifSxpbmNyZWFzaW5nOm8oaS5pbmNyZWFzaW5nLmxpbmUuY29sb3IuZGZsdCksZGVjcmVhc2luZzpvKGkuZGVjcmVhc2luZy5saW5lLmNvbG9yLmRmbHQpLHRleHQ6aS50ZXh0LGhvdmVydGV4dDppLmhvdmVydGV4dCx3aGlza2Vyd2lkdGg6bih7fSxhLndoaXNrZXJ3aWR0aCx7ZGZsdDowfSksaG92ZXJsYWJlbDppLmhvdmVybGFiZWx9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9ib3gvYXR0cmlidXRlc1wiOjg2MixcIi4uL29obGMvYXR0cmlidXRlc1wiOjk5OX1dLDg3NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksYT10KFwiLi4vb2hsYy9jYWxjXCIpLmNhbGNDb21tb247ZnVuY3Rpb24gbyh0LGUscixuKXtyZXR1cm57bWluOnIscTE6TWF0aC5taW4odCxuKSxtZWQ6bixxMzpNYXRoLm1heCh0LG4pLG1heDplfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LHM9aS5nZXRGcm9tSWQodCxlLnhheGlzKSxsPWkuZ2V0RnJvbUlkKHQsZS55YXhpcyksYz1zLm1ha2VDYWxjZGF0YShlLFwieFwiKSx1PWEodCxlLGMsbCxvKTtyZXR1cm4gdS5sZW5ndGg/KG4uZXh0ZW5kRmxhdCh1WzBdLnQse251bTpyLl9udW1Cb3hlcyxkUG9zOm4uZGlzdGluY3RWYWxzKGMpLm1pbkRpZmYvMixwb3NMZXR0ZXI6XCJ4XCIsdmFsTGV0dGVyOlwieVwifSksci5fbnVtQm94ZXMrKyx1KTpbe3Q6e2VtcHR5OiEwfX1dfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9vaGxjL2NhbGNcIjoxZTN9XSw4NzY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksYT10KFwiLi4vb2hsYy9vaGxjX2RlZmF1bHRzXCIpLG89dChcIi4vYXR0cmlidXRlc1wiKTtmdW5jdGlvbiBzKHQsZSxyLG4pe3ZhciBhPXIobitcIi5saW5lLmNvbG9yXCIpO3IobitcIi5saW5lLndpZHRoXCIsZS5saW5lLndpZHRoKSxyKG4rXCIuZmlsbGNvbG9yXCIsaS5hZGRPcGFjaXR5KGEsLjUpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWEodCxlLGwsaSk/KGwoXCJsaW5lLndpZHRoXCIpLHModCxlLGwsXCJpbmNyZWFzaW5nXCIpLHModCxlLGwsXCJkZWNyZWFzaW5nXCIpLGwoXCJ0ZXh0XCIpLGwoXCJob3ZlcnRleHRcIiksbChcIndoaXNrZXJ3aWR0aFwiKSxpLl9yZXF1ZXN0UmFuZ2VzbGlkZXJbZS54YXhpc109ITApOmUudmlzaWJsZT0hMX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi9vaGxjL29obGNfZGVmYXVsdHNcIjoxMDA0LFwiLi9hdHRyaWJ1dGVzXCI6ODc0fV0sODc3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwidHJhY2VcIixuYW1lOlwiY2FuZGxlc3RpY2tcIixiYXNlUGxvdE1vZHVsZTp0KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCIpLGNhdGVnb3JpZXM6W1wiY2FydGVzaWFuXCIsXCJzdmdcIixcInNob3dMZWdlbmRcIixcImNhbmRsZXN0aWNrXCIsXCJib3hMYXlvdXRcIl0sbWV0YTp7fSxhdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksbGF5b3V0QXR0cmlidXRlczp0KFwiLi4vYm94L2xheW91dF9hdHRyaWJ1dGVzXCIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoXCIuLi9ib3gvbGF5b3V0X2RlZmF1bHRzXCIpLnN1cHBseUxheW91dERlZmF1bHRzLGNyb3NzVHJhY2VDYWxjOnQoXCIuLi9ib3gvY3Jvc3NfdHJhY2VfY2FsY1wiKS5jcm9zc1RyYWNlQ2FsYyxzdXBwbHlEZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxjYWxjOnQoXCIuL2NhbGNcIikscGxvdDp0KFwiLi4vYm94L3Bsb3RcIikucGxvdCxsYXllck5hbWU6XCJib3hsYXllclwiLHN0eWxlOnQoXCIuLi9ib3gvc3R5bGVcIikuc3R5bGUsaG92ZXJQb2ludHM6dChcIi4uL29obGMvaG92ZXJcIikuaG92ZXJQb2ludHMsc2VsZWN0UG9pbnRzOnQoXCIuLi9vaGxjL3NlbGVjdFwiKX19LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiOjc2MCxcIi4uL2JveC9jcm9zc190cmFjZV9jYWxjXCI6ODY0LFwiLi4vYm94L2xheW91dF9hdHRyaWJ1dGVzXCI6ODY5LFwiLi4vYm94L2xheW91dF9kZWZhdWx0c1wiOjg3MCxcIi4uL2JveC9wbG90XCI6ODcxLFwiLi4vYm94L3N0eWxlXCI6ODczLFwiLi4vb2hsYy9ob3ZlclwiOjEwMDIsXCIuLi9vaGxjL3NlbGVjdFwiOjEwMDYsXCIuL2F0dHJpYnV0ZXNcIjo4NzQsXCIuL2NhbGNcIjo4NzUsXCIuL2RlZmF1bHRzXCI6ODc2fV0sODc4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vYXhpc19kZWZhdWx0c1wiKSxpPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8pe2EoXCJhXCIpfHwoYShcImRhXCIpLGEoXCJhMFwiKSksYShcImJcIil8fChhKFwiZGJcIiksYShcImIwXCIpKSxmdW5jdGlvbih0LGUscixhKXtbXCJhYXhpc1wiLFwiYmF4aXNcIl0uZm9yRWFjaChmdW5jdGlvbihvKXt2YXIgcz1vLmNoYXJBdCgwKSxsPXRbb118fHt9LGM9aS5uZXdDb250YWluZXIoZSxvKSx1PXt0aWNrZm9udDpcInhcIixpZDpzK1wiYXhpc1wiLGxldHRlcjpzLGZvbnQ6ZS5mb250LG5hbWU6byxkYXRhOnRbc10sY2FsZW5kYXI6ZS5jYWxlbmRhcixkZmx0Q29sb3I6YSxiZ0NvbG9yOnIucGFwZXJfYmdjb2xvcixmdWxsTGF5b3V0OnJ9O24obCxjLHUpLGMuX2NhdGVnb3JpZXM9Yy5fY2F0ZWdvcmllc3x8W10sdFtvXXx8XCItXCI9PT1sLnR5cGV8fCh0W29dPXt0eXBlOmwudHlwZX0pfSl9KHQsZSxyLG8pfX0se1wiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4vYXhpc19kZWZhdWx0c1wiOjg4M31dLDg3OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyKXtpZighbihlKXx8cj49MTApcmV0dXJuIG51bGw7dmFyIGk9MS8wO3ZhciBhPS0xLzA7dmFyIG89ZS5sZW5ndGg7Zm9yKHZhciBzPTA7czxvO3MrKyl7dmFyIGw9ZVtzXTtpZihuKGwpKXt2YXIgYz10KGwscisxKTtjJiYoaT1NYXRoLm1pbihjWzBdLGkpLGE9TWF0aC5tYXgoY1sxXSxhKSl9ZWxzZSBpPU1hdGgubWluKGwsaSksYT1NYXRoLm1heChsLGEpfXJldHVybltpLGFdfSh0LDApfX0se1wiLi4vLi4vbGliXCI6NzAxfV0sODgwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiKSxpPXQoXCIuL2F4aXNfYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIiksbz1uKHtlZGl0VHlwZTpcImNhbGNcIn0pO28uZmFtaWx5LmRmbHQ9J1wiT3BlbiBTYW5zXCIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxvLnNpemUuZGZsdD0xMixvLmNvbG9yLmRmbHQ9YS5kZWZhdWx0TGluZSxlLmV4cG9ydHM9e2NhcnBldDp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwiY2FsY1wifSx4Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx5Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSxhOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxhMDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MCxlZGl0VHlwZTpcImNhbGNcIn0sZGE6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjEsZWRpdFR5cGU6XCJjYWxjXCJ9LGI6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGIwOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifSxkYjp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MSxlZGl0VHlwZTpcImNhbGNcIn0sY2hlYXRlcnNsb3BlOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxLGVkaXRUeXBlOlwiY2FsY1wifSxhYXhpczppLGJheGlzOmksZm9udDpvLGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmEuZGVmYXVsdExpbmUsZWRpdFR5cGU6XCJwbG90XCJ9LHRyYW5zZm9ybXM6dm9pZCAwfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzXCI6NTc3LFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCI6Nzc1LFwiLi9heGlzX2F0dHJpYnV0ZXNcIjo4ODJ9XSw4ODE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhLG8scyxsLGMsdSxoLGYscCxkLGcsdixtLHk9bihyKT9cImFcIjpcImJcIix4PShcImFcIj09PXk/dC5hYXhpczp0LmJheGlzKS5zbW9vdGhpbmcsYj1cImFcIj09PXk/dC5hMmk6dC5iMmosXz1cImFcIj09PXk/cjppLHc9XCJhXCI9PT15P2k6cixrPVwiYVwiPT09eT9lLmEubGVuZ3RoOmUuYi5sZW5ndGgsQT1cImFcIj09PXk/ZS5iLmxlbmd0aDplLmEubGVuZ3RoLFQ9TWF0aC5mbG9vcihcImFcIj09PXk/dC5iMmoodyk6dC5hMmkodykpLE09XCJhXCI9PT15P2Z1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxlLFQpfTpmdW5jdGlvbihlKXtyZXR1cm4gdC5ldmFseHkoW10sVCxlKX07eCYmKHM9TWF0aC5tYXgoMCxNYXRoLm1pbihBLTIsVCkpLGw9VC1zLG89XCJhXCI9PT15P2Z1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGkoW10sZSxzLHIsbCl9OmZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGooW10scyxlLGwscil9KTt2YXIgUz1iKF9bMF0pLEU9YihfWzFdKSxDPVM8RT8xOi0xLEw9MWUtOCooRS1TKSx6PUM+MD9NYXRoLmZsb29yOk1hdGguY2VpbCxPPUM+MD9NYXRoLmNlaWw6TWF0aC5mbG9vcixJPUM+MD9NYXRoLm1pbjpNYXRoLm1heCxEPUM+MD9NYXRoLm1heDpNYXRoLm1pbixQPXooUytMKSxSPU8oRS1MKSxGPVtbaD1NKFMpXV07Zm9yKGE9UDthKkM8UipDO2ErPUMpYz1bXSxnPUQoUyxhKSxtPSh2PUkoRSxhK0MpKS1nLHU9TWF0aC5tYXgoMCxNYXRoLm1pbihrLTIsTWF0aC5mbG9vciguNSooZyt2KSkpKSxmPU0odikseCYmKHA9byh1LGctdSksZD1vKHUsdi11KSxjLnB1c2goW2hbMF0rcFswXS8zKm0saFsxXStwWzFdLzMqbV0pLGMucHVzaChbZlswXS1kWzBdLzMqbSxmWzFdLWRbMV0vMyptXSkpLGMucHVzaChmKSxGLnB1c2goYyksaD1mO3JldHVybiBGfX0se1wiLi4vLi4vbGliXCI6NzAxfV0sODgyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGw7ZS5leHBvcnRzPXtjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHNtb290aGluZzp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MSxtaW46MCxtYXg6MS4zLGVkaXRUeXBlOlwiY2FsY1wifSx0aXRsZTp7dGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcImNhbGNcIn0sZm9udDpuKHtlZGl0VHlwZTpcImNhbGNcIn0pLG9mZnNldDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MTAsZWRpdFR5cGU6XCJjYWxjXCJ9LGVkaXRUeXBlOlwiY2FsY1wifSx0eXBlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCItXCIsXCJsaW5lYXJcIixcImRhdGVcIixcImNhdGVnb3J5XCJdLGRmbHQ6XCItXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGF1dG9yYW5nZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6WyEwLCExLFwicmV2ZXJzZWRcIl0sZGZsdDohMCxlZGl0VHlwZTpcImNhbGNcIn0scmFuZ2Vtb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJub3JtYWxcIixcInRvemVyb1wiLFwibm9ubmVnYXRpdmVcIl0sZGZsdDpcIm5vcm1hbFwiLGVkaXRUeXBlOlwiY2FsY1wifSxyYW5nZTp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIixpdGVtczpbe3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImNhbGNcIn0se3ZhbFR5cGU6XCJhbnlcIixlZGl0VHlwZTpcImNhbGNcIn1dfSxmaXhlZHJhbmdlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEsZWRpdFR5cGU6XCJjYWxjXCJ9LGNoZWF0ZXJ0eXBlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJpbmRleFwiLFwidmFsdWVcIl0sZGZsdDpcInZhbHVlXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHRpY2ttb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJsaW5lYXJcIixcImFycmF5XCJdLGRmbHQ6XCJhcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxudGlja3M6e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsbWluOjAsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifSx0aWNrdmFsczp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sdGlja3RleHQ6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHNob3d0aWNrbGFiZWxzOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJzdGFydFwiLFwiZW5kXCIsXCJib3RoXCIsXCJub25lXCJdLGRmbHQ6XCJzdGFydFwiLGVkaXRUeXBlOlwiY2FsY1wifSx0aWNrZm9udDpuKHtlZGl0VHlwZTpcImNhbGNcIn0pLHRpY2thbmdsZTp7dmFsVHlwZTpcImFuZ2xlXCIsZGZsdDpcImF1dG9cIixlZGl0VHlwZTpcImNhbGNcIn0sdGlja3ByZWZpeDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcImNhbGNcIn0sc2hvd3RpY2twcmVmaXg6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImFsbFwiLFwiZmlyc3RcIixcImxhc3RcIixcIm5vbmVcIl0sZGZsdDpcImFsbFwiLGVkaXRUeXBlOlwiY2FsY1wifSx0aWNrc3VmZml4Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwiY2FsY1wifSxzaG93dGlja3N1ZmZpeDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYWxsXCIsXCJmaXJzdFwiLFwibGFzdFwiLFwibm9uZVwiXSxkZmx0OlwiYWxsXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHNob3dleHBvbmVudDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYWxsXCIsXCJmaXJzdFwiLFwibGFzdFwiLFwibm9uZVwiXSxkZmx0OlwiYWxsXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGV4cG9uZW50Zm9ybWF0Ont2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJub25lXCIsXCJlXCIsXCJFXCIsXCJwb3dlclwiLFwiU0lcIixcIkJcIl0sZGZsdDpcIkJcIixlZGl0VHlwZTpcImNhbGNcIn0sc2VwYXJhdGV0aG91c2FuZHM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMSxlZGl0VHlwZTpcImNhbGNcIn0sdGlja2Zvcm1hdDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcImNhbGNcIn0sdGlja2Zvcm1hdHN0b3BzOm8oYS50aWNrZm9ybWF0c3RvcHMsXCJjYWxjXCIsXCJmcm9tLXJvb3RcIiksY2F0ZWdvcnlvcmRlcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1widHJhY2VcIixcImNhdGVnb3J5IGFzY2VuZGluZ1wiLFwiY2F0ZWdvcnkgZGVzY2VuZGluZ1wiLFwiYXJyYXlcIl0sZGZsdDpcInRyYWNlXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGNhdGVnb3J5YXJyYXk6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGxhYmVscGFkZGluZzp7dmFsVHlwZTpcImludGVnZXJcIixkZmx0OjEwLGVkaXRUeXBlOlwiY2FsY1wifSxsYWJlbHByZWZpeDp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwiY2FsY1wifSxsYWJlbHN1ZmZpeDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcImNhbGNcIn0sc2hvd2xpbmU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMSxlZGl0VHlwZTpcImNhbGNcIn0sbGluZWNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6XCJjYWxjXCJ9LGxpbmV3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZTpcImNhbGNcIn0sZ3JpZGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcImNhbGNcIn0sZ3JpZHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOlwiY2FsY1wifSxzaG93Z3JpZDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSxtaW5vcmdyaWRjb3VudDp7dmFsVHlwZTpcImludGVnZXJcIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6XCJjYWxjXCJ9LG1pbm9yZ3JpZHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOlwiY2FsY1wifSxtaW5vcmdyaWRjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZGZsdDppLmxpZ2h0TGluZSxlZGl0VHlwZTpcImNhbGNcIn0sc3RhcnRsaW5lOnt2YWxUeXBlOlwiYm9vbGVhblwiLGVkaXRUeXBlOlwiY2FsY1wifSxzdGFydGxpbmVjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHN0YXJ0bGluZXdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxLGVkaXRUeXBlOlwiY2FsY1wifSxlbmRsaW5lOnt2YWxUeXBlOlwiYm9vbGVhblwiLGVkaXRUeXBlOlwiY2FsY1wifSxlbmRsaW5ld2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjEsZWRpdFR5cGU6XCJjYWxjXCJ9LGVuZGxpbmVjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHRpY2swOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifSxkdGljazp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZTpcImNhbGNcIn0sYXJyYXl0aWNrMDp7dmFsVHlwZTpcImludGVnZXJcIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6XCJjYWxjXCJ9LGFycmF5ZHRpY2s6e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsbWluOjEsZGZsdDoxLGVkaXRUeXBlOlwiY2FsY1wifSxfZGVwcmVjYXRlZDp7dGl0bGU6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcImNhbGNcIn0sdGl0bGVmb250Om4oe2VkaXRUeXBlOlwiY2FsY1wifSksdGl0bGVvZmZzZXQ6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjEwLGVkaXRUeXBlOlwiY2FsY1wifX0sZWRpdFR5cGU6XCJjYWxjXCJ9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIjo1NzcsXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzXCI6NzYxLFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCI6Nzc1fV0sODgzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLmFkZE9wYWNpdHksYT10KFwiLi4vLi4vcmVnaXN0cnlcIiksbz10KFwiLi4vLi4vbGliXCIpLHM9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzXCIpLGw9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzXCIpLGM9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0c1wiKSx1PXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnRcIiksaD10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfYXV0b3R5cGVcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgZj1yLmxldHRlcixwPXIuZm9udHx8e30sZD1uW2YrXCJheGlzXCJdO2Z1bmN0aW9uIGcocixuKXtyZXR1cm4gby5jb2VyY2UodCxlLGQscixuKX1mdW5jdGlvbiB2KHIsbil7cmV0dXJuIG8uY29lcmNlMih0LGUsZCxyLG4pfXIubmFtZSYmKGUuX25hbWU9ci5uYW1lLGUuX2lkPXIubmFtZSk7dmFyIG09ZyhcInR5cGVcIik7KFwiLVwiPT09bSYmKHIuZGF0YSYmZnVuY3Rpb24odCxlKXtpZihcIi1cIiE9PXQudHlwZSlyZXR1cm47dmFyIHI9dC5faWQuY2hhckF0KDApLG49dFtyK1wiY2FsZW5kYXJcIl07dC50eXBlPWgoZSxuKX0oZSxyLmRhdGEpLFwiLVwiPT09ZS50eXBlP2UudHlwZT1cImxpbmVhclwiOm09dC50eXBlPWUudHlwZSksZyhcInNtb290aGluZ1wiKSxnKFwiY2hlYXRlcnR5cGVcIiksZyhcInNob3d0aWNrbGFiZWxzXCIpLGcoXCJsYWJlbHByZWZpeFwiLGYrXCIgPSBcIiksZyhcImxhYmVsc3VmZml4XCIpLGcoXCJzaG93dGlja3ByZWZpeFwiKSxnKFwic2hvd3RpY2tzdWZmaXhcIiksZyhcInNlcGFyYXRldGhvdXNhbmRzXCIpLGcoXCJ0aWNrZm9ybWF0XCIpLGcoXCJleHBvbmVudGZvcm1hdFwiKSxnKFwic2hvd2V4cG9uZW50XCIpLGcoXCJjYXRlZ29yeW9yZGVyXCIpLGcoXCJ0aWNrbW9kZVwiKSxnKFwidGlja3ZhbHNcIiksZyhcInRpY2t0ZXh0XCIpLGcoXCJ0aWNrMFwiKSxnKFwiZHRpY2tcIiksXCJhcnJheVwiPT09ZS50aWNrbW9kZSYmKGcoXCJhcnJheXRpY2swXCIpLGcoXCJhcnJheWR0aWNrXCIpKSxnKFwibGFiZWxwYWRkaW5nXCIpLGUuX2hvdmVydGl0bGU9ZixcImRhdGVcIj09PW0pJiZhLmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiaGFuZGxlRGVmYXVsdHNcIikodCxlLFwiY2FsZW5kYXJcIixyLmNhbGVuZGFyKTt1KGUsci5mdWxsTGF5b3V0KSxlLmMycD1vLmlkZW50aXR5O3ZhciB5PWcoXCJjb2xvclwiLHIuZGZsdENvbG9yKSx4PXk9PT10LmNvbG9yP3k6cC5jb2xvcjtnKFwidGl0bGUudGV4dFwiKSYmKG8uY29lcmNlRm9udChnLFwidGl0bGUuZm9udFwiLHtmYW1pbHk6cC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKDEuMipwLnNpemUpLGNvbG9yOnh9KSxnKFwidGl0bGUub2Zmc2V0XCIpKSxnKFwidGlja2FuZ2xlXCIpLGcoXCJhdXRvcmFuZ2VcIiwhZS5pc1ZhbGlkUmFuZ2UodC5yYW5nZSkpJiZnKFwicmFuZ2Vtb2RlXCIpLGcoXCJyYW5nZVwiKSxlLmNsZWFuUmFuZ2UoKSxnKFwiZml4ZWRyYW5nZVwiKSxzKHQsZSxnLG0pLGwodCxlLGcsbSxyKSxjKHQsZSxnLHtkYXRhOnIuZGF0YSxkYXRhQXR0cjpmfSk7dmFyIGI9dihcImdyaWRjb2xvclwiLGkoeSwuMykpLF89dihcImdyaWR3aWR0aFwiKSx3PWcoXCJzaG93Z3JpZFwiKTt3fHwoZGVsZXRlIGUuZ3JpZGNvbG9yLGRlbGV0ZSBlLmdyaWR3aWR0aCk7dmFyIGs9dihcInN0YXJ0bGluZWNvbG9yXCIseSksQT12KFwic3RhcnRsaW5ld2lkdGhcIixfKTtnKFwic3RhcnRsaW5lXCIsZS5zaG93Z3JpZHx8ISFrfHwhIUEpfHwoZGVsZXRlIGUuc3RhcnRsaW5lY29sb3IsZGVsZXRlIGUuc3RhcnRsaW5ld2lkdGgpO3ZhciBUPXYoXCJlbmRsaW5lY29sb3JcIix5KSxNPXYoXCJlbmRsaW5ld2lkdGhcIixfKTtyZXR1cm4gZyhcImVuZGxpbmVcIixlLnNob3dncmlkfHwhIVR8fCEhTSl8fChkZWxldGUgZS5lbmRsaW5lY29sb3IsZGVsZXRlIGUuZW5kbGluZXdpZHRoKSx3PyhnKFwibWlub3JncmlkY291bnRcIiksZyhcIm1pbm9yZ3JpZHdpZHRoXCIsXyksZyhcIm1pbm9yZ3JpZGNvbG9yXCIsaShiLC4wNikpLGUubWlub3JncmlkY291bnR8fChkZWxldGUgZS5taW5vcmdyaWR3aWR0aCxkZWxldGUgZS5taW5vcmdyaWRjb2xvcikpOihkZWxldGUgZS5ncmlkY29sb3IsZGVsZXRlIGUuZ3JpZFdpZHRoKSxcIm5vbmVcIj09PWUuc2hvd3RpY2tsYWJlbHMmJihkZWxldGUgZS50aWNrZm9udCxkZWxldGUgZS50aWNrYW5nbGUsZGVsZXRlIGUuc2hvd2V4cG9uZW50LGRlbGV0ZSBlLmV4cG9uZW50Zm9ybWF0LGRlbGV0ZSBlLnRpY2tmb3JtYXQsZGVsZXRlIGUuc2hvd3RpY2tzdWZmaXgsZGVsZXRlIGUuc2hvd3RpY2twcmVmaXgpLGUuc2hvd3RpY2tzdWZmaXh8fGRlbGV0ZSBlLnRpY2tzdWZmaXgsZS5zaG93dGlja3ByZWZpeHx8ZGVsZXRlIGUudGlja3ByZWZpeCxnKFwidGlja21vZGVcIiksZX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19hdXRvdHlwZVwiOjc1MCxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0c1wiOjc1MyxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZXRfY29udmVydFwiOjc2NyxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzXCI6NzY4LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHNcIjo3NzAsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vYXR0cmlidXRlc1wiOjg4MH1dLDg4NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxpPXQoXCIuLi8uLi9saWJcIikuaXNBcnJheTFELGE9dChcIi4vY2hlYXRlcl9iYXNpc1wiKSxvPXQoXCIuL2FycmF5X21pbm1heFwiKSxzPXQoXCIuL2NhbGNfZ3JpZGxpbmVzXCIpLGw9dChcIi4vY2FsY19sYWJlbHNcIiksYz10KFwiLi9jYWxjX2NsaXBwYXRoXCIpLHU9dChcIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXlcIiksaD10KFwiLi9zbW9vdGhfZmlsbF8yZF9hcnJheVwiKSxmPXQoXCIuLi9oZWF0bWFwL2NvbnZlcnRfY29sdW1uX3h5elwiKSxwPXQoXCIuL3NldF9jb252ZXJ0XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW4uZ2V0RnJvbUlkKHQsZS54YXhpcyksZD1uLmdldEZyb21JZCh0LGUueWF4aXMpLGc9ZS5hYXhpcyx2PWUuYmF4aXMsbT1lLngseT1lLnkseD1bXTttJiZpKG0pJiZ4LnB1c2goXCJ4XCIpLHkmJmkoeSkmJngucHVzaChcInlcIikseC5sZW5ndGgmJmYoZSxnLHYsXCJhXCIsXCJiXCIseCk7dmFyIGI9ZS5fYT1lLl9hfHxlLmEsXz1lLl9iPWUuX2J8fGUuYjttPWUuX3h8fGUueCx5PWUuX3l8fGUueTt2YXIgdz17fTtpZihlLl9jaGVhdGVyKXt2YXIgaz1cImluZGV4XCI9PT1nLmNoZWF0ZXJ0eXBlP2IubGVuZ3RoOmIsQT1cImluZGV4XCI9PT12LmNoZWF0ZXJ0eXBlP18ubGVuZ3RoOl87bT1hKGssQSxlLmNoZWF0ZXJzbG9wZSl9ZS5feD1tPXUobSksZS5feT15PXUoeSksaChtLGIsXyksaCh5LGIsXykscChlKSxlLnNldFNjYWxlKCk7dmFyIFQ9byhtKSxNPW8oeSksUz0uNSooVFsxXS1UWzBdKSxFPS41KihUWzFdK1RbMF0pLEM9LjUqKE1bMV0tTVswXSksTD0uNSooTVsxXStNWzBdKTtyZXR1cm4gVD1bRS0xLjMqUyxFKzEuMypTXSxNPVtMLTEuMypDLEwrMS4zKkNdLGUuX2V4dHJlbWVzW3IuX2lkXT1uLmZpbmRFeHRyZW1lcyhyLFQse3BhZGRlZDohMH0pLGUuX2V4dHJlbWVzW2QuX2lkXT1uLmZpbmRFeHRyZW1lcyhkLE0se3BhZGRlZDohMH0pLHMoZSxcImFcIixcImJcIikscyhlLFwiYlwiLFwiYVwiKSxsKGUsZyksbChlLHYpLHcuY2xpcHNlZ21lbnRzPWMoZS5feGN0cmwsZS5feWN0cmwsZyx2KSx3Lng9bSx3Lnk9eSx3LmE9Yix3LmI9Xyxbd119fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXlcIjo5NTAsXCIuLi9oZWF0bWFwL2NvbnZlcnRfY29sdW1uX3h5elwiOjk1MixcIi4vYXJyYXlfbWlubWF4XCI6ODc5LFwiLi9jYWxjX2NsaXBwYXRoXCI6ODg1LFwiLi9jYWxjX2dyaWRsaW5lc1wiOjg4NixcIi4vY2FsY19sYWJlbHNcIjo4ODcsXCIuL2NoZWF0ZXJfYmFzaXNcIjo4ODksXCIuL3NldF9jb252ZXJ0XCI6OTAyLFwiLi9zbW9vdGhfZmlsbF8yZF9hcnJheVwiOjkwM31dLDg4NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scz1bXSxsPSEhci5zbW9vdGhpbmcsYz0hIW4uc21vb3RoaW5nLHU9dFswXS5sZW5ndGgtMSxoPXQubGVuZ3RoLTE7Zm9yKGk9MCxhPVtdLG89W107aTw9dTtpKyspYVtpXT10WzBdW2ldLG9baV09ZVswXVtpXTtmb3Iocy5wdXNoKHt4OmEseTpvLGJpY3ViaWM6bH0pLGk9MCxhPVtdLG89W107aTw9aDtpKyspYVtpXT10W2ldW3VdLG9baV09ZVtpXVt1XTtmb3Iocy5wdXNoKHt4OmEseTpvLGJpY3ViaWM6Y30pLGk9dSxhPVtdLG89W107aT49MDtpLS0pYVt1LWldPXRbaF1baV0sb1t1LWldPWVbaF1baV07Zm9yKHMucHVzaCh7eDphLHk6byxiaWN1YmljOmx9KSxpPWgsYT1bXSxvPVtdO2k+PTA7aS0tKWFbaC1pXT10W2ldWzBdLG9baC1pXT1lW2ldWzBdO3JldHVybiBzLnB1c2goe3g6YSx5Om8sYmljdWJpYzpjfSksc319LHt9XSw4ODY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksaT10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGEsbyxzLGwsYyx1LGgsZixwLGQsZyx2LG0seSx4PXRbXCJfXCIrZV0sYj10W2UrXCJheGlzXCJdLF89Yi5fZ3JpZGxpbmVzPVtdLHc9Yi5fbWlub3JncmlkbGluZXM9W10saz1iLl9ib3VuZGFyeWxpbmVzPVtdLEE9dFtcIl9cIityXSxUPXRbcitcImF4aXNcIl07XCJhcnJheVwiPT09Yi50aWNrbW9kZSYmKGIudGlja3ZhbHM9eC5zbGljZSgpKTt2YXIgTT10Ll94Y3RybCxTPXQuX3ljdHJsLEU9TVswXS5sZW5ndGgsQz1NLmxlbmd0aCxMPXQuX2EubGVuZ3RoLHo9dC5fYi5sZW5ndGg7bi5wcmVwVGlja3MoYiksXCJhcnJheVwiPT09Yi50aWNrbW9kZSYmZGVsZXRlIGIudGlja3ZhbHM7dmFyIE89Yi5zbW9vdGhpbmc/MzoxO2Z1bmN0aW9uIEkobil7dmFyIGksYSxvLHMsbCxjLHUsaCxwLGQsZyx2LG09W10seT1bXSx4PXt9O2lmKFwiYlwiPT09ZSlmb3IoYT10LmIyaihuKSxvPU1hdGguZmxvb3IoTWF0aC5tYXgoMCxNYXRoLm1pbih6LTIsYSkpKSxzPWEtbyx4Lmxlbmd0aD16LHguY3Jvc3NMZW5ndGg9TCx4Lnh5PWZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxlLGEpfSx4LmR4eT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmR4eWRpKFtdLGUsbyxyLHMpfSxpPTA7aTxMO2krKyljPU1hdGgubWluKEwtMixpKSx1PWktYyxoPXQuZXZhbHh5KFtdLGksYSksVC5zbW9vdGhpbmcmJmk+MCYmKHA9dC5keHlkaShbXSxpLTEsbywwLHMpLG0ucHVzaChsWzBdK3BbMF0vMykseS5wdXNoKGxbMV0rcFsxXS8zKSxkPXQuZHh5ZGkoW10saS0xLG8sMSxzKSxtLnB1c2goaFswXS1kWzBdLzMpLHkucHVzaChoWzFdLWRbMV0vMykpLG0ucHVzaChoWzBdKSx5LnB1c2goaFsxXSksbD1oO2Vsc2UgZm9yKGk9dC5hMmkobiksYz1NYXRoLmZsb29yKE1hdGgubWF4KDAsTWF0aC5taW4oTC0yLGkpKSksdT1pLWMseC5sZW5ndGg9TCx4LmNyb3NzTGVuZ3RoPXoseC54eT1mdW5jdGlvbihlKXtyZXR1cm4gdC5ldmFseHkoW10saSxlKX0seC5keHk9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaihbXSxjLGUsdSxyKX0sYT0wO2E8ejthKyspbz1NYXRoLm1pbih6LTIsYSkscz1hLW8saD10LmV2YWx4eShbXSxpLGEpLFQuc21vb3RoaW5nJiZhPjAmJihnPXQuZHh5ZGooW10sYyxhLTEsdSwwKSxtLnB1c2gobFswXStnWzBdLzMpLHkucHVzaChsWzFdK2dbMV0vMyksdj10LmR4eWRqKFtdLGMsYS0xLHUsMSksbS5wdXNoKGhbMF0tdlswXS8zKSx5LnB1c2goaFsxXS12WzFdLzMpKSxtLnB1c2goaFswXSkseS5wdXNoKGhbMV0pLGw9aDtyZXR1cm4geC5heGlzTGV0dGVyPWUseC5heGlzPWIseC5jcm9zc0F4aXM9VCx4LnZhbHVlPW4seC5jb25zdHZhcj1yLHguaW5kZXg9Zix4Lng9bSx4Lnk9eSx4LnNtb290aGluZz1ULnNtb290aGluZyx4fWZ1bmN0aW9uIEQobil7dmFyIGksYSxvLHMsbCxjPVtdLHU9W10saD17fTtpZihoLmxlbmd0aD14Lmxlbmd0aCxoLmNyb3NzTGVuZ3RoPUEubGVuZ3RoLFwiYlwiPT09ZSlmb3Iobz1NYXRoLm1heCgwLE1hdGgubWluKHotMixuKSksbD1NYXRoLm1pbigxLE1hdGgubWF4KDAsbi1vKSksaC54eT1mdW5jdGlvbihlKXtyZXR1cm4gdC5ldmFseHkoW10sZSxuKX0saC5keHk9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaShbXSxlLG8scixsKX0saT0wO2k8RTtpKyspY1tpXT1NW24qT11baV0sdVtpXT1TW24qT11baV07ZWxzZSBmb3IoYT1NYXRoLm1heCgwLE1hdGgubWluKEwtMixuKSkscz1NYXRoLm1pbigxLE1hdGgubWF4KDAsbi1hKSksaC54eT1mdW5jdGlvbihlKXtyZXR1cm4gdC5ldmFseHkoW10sbixlKX0saC5keHk9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaihbXSxhLGUscyxyKX0saT0wO2k8QztpKyspY1tpXT1NW2ldW24qT10sdVtpXT1TW2ldW24qT107cmV0dXJuIGguYXhpc0xldHRlcj1lLGguYXhpcz1iLGguY3Jvc3NBeGlzPVQsaC52YWx1ZT14W25dLGguY29uc3R2YXI9cixoLmluZGV4PW4saC54PWMsaC55PXUsaC5zbW9vdGhpbmc9VC5zbW9vdGhpbmcsaH1pZihcImFycmF5XCI9PT1iLnRpY2ttb2RlKXtmb3IobD01ZS0xNSx1PShjPVtNYXRoLmZsb29yKCh4Lmxlbmd0aC0xLWIuYXJyYXl0aWNrMCkvYi5hcnJheWR0aWNrKigxK2wpKSxNYXRoLmNlaWwoLWIuYXJyYXl0aWNrMC9iLmFycmF5ZHRpY2svKDErbCkpXS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKVswXS0xLGg9Y1sxXSsxLGY9dTtmPGg7ZisrKShvPWIuYXJyYXl0aWNrMCtiLmFycmF5ZHRpY2sqZik8MHx8bz54Lmxlbmd0aC0xfHxfLnB1c2goaShEKG8pLHtjb2xvcjpiLmdyaWRjb2xvcix3aWR0aDpiLmdyaWR3aWR0aH0pKTtmb3IoZj11O2Y8aDtmKyspaWYocz1iLmFycmF5dGljazArYi5hcnJheWR0aWNrKmYsZz1NYXRoLm1pbihzK2IuYXJyYXlkdGljayx4Lmxlbmd0aC0xKSwhKHM8MHx8cz54Lmxlbmd0aC0xfHxnPDB8fGc+eC5sZW5ndGgtMSkpZm9yKHY9eFtzXSxtPXhbZ10sYT0wO2E8Yi5taW5vcmdyaWRjb3VudDthKyspKHk9Zy1zKTw9MHx8KGQ9disobS12KSooYSsxKS8oYi5taW5vcmdyaWRjb3VudCsxKSooYi5hcnJheWR0aWNrL3kpKTx4WzBdfHxkPnhbeC5sZW5ndGgtMV18fHcucHVzaChpKEkoZCkse2NvbG9yOmIubWlub3JncmlkY29sb3Isd2lkdGg6Yi5taW5vcmdyaWR3aWR0aH0pKTtiLnN0YXJ0bGluZSYmay5wdXNoKGkoRCgwKSx7Y29sb3I6Yi5zdGFydGxpbmVjb2xvcix3aWR0aDpiLnN0YXJ0bGluZXdpZHRofSkpLGIuZW5kbGluZSYmay5wdXNoKGkoRCh4Lmxlbmd0aC0xKSx7Y29sb3I6Yi5lbmRsaW5lY29sb3Isd2lkdGg6Yi5lbmRsaW5ld2lkdGh9KSl9ZWxzZXtmb3IobD01ZS0xNSx1PShjPVtNYXRoLmZsb29yKCh4W3gubGVuZ3RoLTFdLWIudGljazApL2IuZHRpY2sqKDErbCkpLE1hdGguY2VpbCgoeFswXS1iLnRpY2swKS9iLmR0aWNrLygxK2wpKV0uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSlbMF0saD1jWzFdLGY9dTtmPD1oO2YrKylwPWIudGljazArYi5kdGljaypmLF8ucHVzaChpKEkocCkse2NvbG9yOmIuZ3JpZGNvbG9yLHdpZHRoOmIuZ3JpZHdpZHRofSkpO2ZvcihmPXUtMTtmPGgrMTtmKyspZm9yKHA9Yi50aWNrMCtiLmR0aWNrKmYsYT0wO2E8Yi5taW5vcmdyaWRjb3VudDthKyspKGQ9cCtiLmR0aWNrKihhKzEpLyhiLm1pbm9yZ3JpZGNvdW50KzEpKTx4WzBdfHxkPnhbeC5sZW5ndGgtMV18fHcucHVzaChpKEkoZCkse2NvbG9yOmIubWlub3JncmlkY29sb3Isd2lkdGg6Yi5taW5vcmdyaWR3aWR0aH0pKTtiLnN0YXJ0bGluZSYmay5wdXNoKGkoSSh4WzBdKSx7Y29sb3I6Yi5zdGFydGxpbmVjb2xvcix3aWR0aDpiLnN0YXJ0bGluZXdpZHRofSkpLGIuZW5kbGluZSYmay5wdXNoKGkoSSh4W3gubGVuZ3RoLTFdKSx7Y29sb3I6Yi5lbmRsaW5lY29sb3Isd2lkdGg6Yi5lbmRsaW5ld2lkdGh9KSl9fX0se1wiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5fV0sODg3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGk9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhLG8scz1lLl9sYWJlbHM9W10sbD1lLl9ncmlkbGluZXM7Zm9yKHI9MDtyPGwubGVuZ3RoO3IrKylvPWxbcl0sLTEhPT1bXCJzdGFydFwiLFwiYm90aFwiXS5pbmRleE9mKGUuc2hvd3RpY2tsYWJlbHMpJiYoYT1uLnRpY2tUZXh0KGUsby52YWx1ZSksaShhLHtwcmVmaXg6dm9pZCAwLHN1ZmZpeDp2b2lkIDAsZW5kQW5jaG9yOiEwLHh5Om8ueHkoMCksZHh5Om8uZHh5KDAsMCksYXhpczpvLmF4aXMsbGVuZ3RoOm8uY3Jvc3NBeGlzLmxlbmd0aCxmb250Om8uYXhpcy50aWNrZm9udCxpc0ZpcnN0OjA9PT1yLGlzTGFzdDpyPT09bC5sZW5ndGgtMX0pLHMucHVzaChhKSksLTEhPT1bXCJlbmRcIixcImJvdGhcIl0uaW5kZXhPZihlLnNob3d0aWNrbGFiZWxzKSYmKGE9bi50aWNrVGV4dChlLG8udmFsdWUpLGkoYSx7ZW5kQW5jaG9yOiExLHh5Om8ueHkoby5jcm9zc0xlbmd0aC0xKSxkeHk6by5keHkoby5jcm9zc0xlbmd0aC0yLDEpLGF4aXM6by5heGlzLGxlbmd0aDpvLmNyb3NzQXhpcy5sZW5ndGgsZm9udDpvLmF4aXMudGlja2ZvbnQsaXNGaXJzdDowPT09cixpc0xhc3Q6cj09PWwubGVuZ3RoLTF9KSxzLnB1c2goYSkpfX0se1wiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5fV0sODg4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRbMF0tZVswXSxhPXRbMV0tZVsxXSxvPXJbMF0tZVswXSxzPXJbMV0tZVsxXSxsPU1hdGgucG93KGkqaSthKmEsLjI1KSxjPU1hdGgucG93KG8qbytzKnMsLjI1KSx1PShjKmMqaS1sKmwqbykqbixoPShjKmMqYS1sKmwqcykqbixmPWMqKGwrYykqMyxwPWwqKGwrYykqMztyZXR1cm5bW2VbMF0rKGYmJnUvZiksZVsxXSsoZiYmaC9mKV0sW2VbMF0tKHAmJnUvcCksZVsxXS0ocCYmaC9wKV1dfX0se31dLDg4OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEsbyxzLGwsYyx1PVtdLGg9bih0KT90Lmxlbmd0aDp0LGY9bihlKT9lLmxlbmd0aDplLHA9bih0KT90Om51bGwsZD1uKGUpP2U6bnVsbDtwJiYobz0ocC5sZW5ndGgtMSkvKHBbcC5sZW5ndGgtMV0tcFswXSkvKGgtMSkpLGQmJihzPShkLmxlbmd0aC0xKS8oZFtkLmxlbmd0aC0xXS1kWzBdKS8oZi0xKSk7dmFyIGc9MS8wLHY9LTEvMDtmb3IoYT0wO2E8ZjthKyspZm9yKHVbYV09W10sbD1kPyhkW2FdLWRbMF0pKnM6YS8oZi0xKSxpPTA7aTxoO2krKyljPShwPyhwW2ldLXBbMF0pKm86aS8oaC0xKSktbCpyLGc9TWF0aC5taW4oYyxnKSx2PU1hdGgubWF4KGMsdiksdVthXVtpXT1jO3ZhciBtPTEvKHYtZykseT0tZyptO2ZvcihhPTA7YTxmO2ErKylmb3IoaT0wO2k8aDtpKyspdVthXVtpXT1tKnVbYV1baV0reTtyZXR1cm4gdX19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDg5MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2NhdG11bGxfcm9tXCIpLGk9dChcIi4uLy4uL2xpYlwiKS5lbnN1cmVBcnJheTtmdW5jdGlvbiBhKHQsZSxyKXt2YXIgbj0tLjUqclswXSsxLjUqZVswXSxpPS0uNSpyWzFdKzEuNSplWzFdO3JldHVyblsoMipuK3RbMF0pLzMsKDIqaSt0WzFdKS8zXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzLGwpe3ZhciBjLHUsaCxmLHAsZCxnLHYsbSx5LHg9clswXS5sZW5ndGgsYj1yLmxlbmd0aCxfPXM/Myp4LTI6eCx3PWw/MypiLTI6Yjtmb3IodD1pKHQsdyksZT1pKGUsdyksaD0wO2g8dztoKyspdFtoXT1pKHRbaF0sXyksZVtoXT1pKGVbaF0sXyk7Zm9yKHU9MCxmPTA7dTxiO3UrKyxmKz1sPzM6MSlmb3IocD10W2ZdLGQ9ZVtmXSxnPXJbdV0sdj1vW3VdLGM9MCxoPTA7Yzx4O2MrKyxoKz1zPzM6MSlwW2hdPWdbY10sZFtoXT12W2NdO2lmKHMpZm9yKHU9MCxmPTA7dTxiO3UrKyxmKz1sPzM6MSl7Zm9yKGM9MSxoPTM7Yzx4LTE7YysrLGgrPTMpbT1uKFtyW3VdW2MtMV0sb1t1XVtjLTFdXSxbclt1XVtjXSxvW3VdW2NdXSxbclt1XVtjKzFdLG9bdV1bYysxXV0scyksdFtmXVtoLTFdPW1bMF1bMF0sZVtmXVtoLTFdPW1bMF1bMV0sdFtmXVtoKzFdPW1bMV1bMF0sZVtmXVtoKzFdPW1bMV1bMV07eT1hKFt0W2ZdWzBdLGVbZl1bMF1dLFt0W2ZdWzJdLGVbZl1bMl1dLFt0W2ZdWzNdLGVbZl1bM11dKSx0W2ZdWzFdPXlbMF0sZVtmXVsxXT15WzFdLHk9YShbdFtmXVtfLTFdLGVbZl1bXy0xXV0sW3RbZl1bXy0zXSxlW2ZdW18tM11dLFt0W2ZdW18tNF0sZVtmXVtfLTRdXSksdFtmXVtfLTJdPXlbMF0sZVtmXVtfLTJdPXlbMV19aWYobClmb3IoaD0wO2g8XztoKyspe2ZvcihmPTM7Zjx3LTM7Zis9MyltPW4oW3RbZi0zXVtoXSxlW2YtM11baF1dLFt0W2ZdW2hdLGVbZl1baF1dLFt0W2YrM11baF0sZVtmKzNdW2hdXSxsKSx0W2YtMV1baF09bVswXVswXSxlW2YtMV1baF09bVswXVsxXSx0W2YrMV1baF09bVsxXVswXSxlW2YrMV1baF09bVsxXVsxXTt5PWEoW3RbMF1baF0sZVswXVtoXV0sW3RbMl1baF0sZVsyXVtoXV0sW3RbM11baF0sZVszXVtoXV0pLHRbMV1baF09eVswXSxlWzFdW2hdPXlbMV0seT1hKFt0W3ctMV1baF0sZVt3LTFdW2hdXSxbdFt3LTNdW2hdLGVbdy0zXVtoXV0sW3Rbdy00XVtoXSxlW3ctNF1baF1dKSx0W3ctMl1baF09eVswXSxlW3ctMl1baF09eVsxXX1pZihzJiZsKWZvcihmPTE7Zjx3O2YrPShmKzEpJTM9PTA/MjoxKXtmb3IoaD0zO2g8Xy0zO2grPTMpbT1uKFt0W2ZdW2gtM10sZVtmXVtoLTNdXSxbdFtmXVtoXSxlW2ZdW2hdXSxbdFtmXVtoKzNdLGVbZl1baCszXV0scyksdFtmXVtoLTFdPS41Kih0W2ZdW2gtMV0rbVswXVswXSksZVtmXVtoLTFdPS41KihlW2ZdW2gtMV0rbVswXVsxXSksdFtmXVtoKzFdPS41Kih0W2ZdW2grMV0rbVsxXVswXSksZVtmXVtoKzFdPS41KihlW2ZdW2grMV0rbVsxXVsxXSk7eT1hKFt0W2ZdWzBdLGVbZl1bMF1dLFt0W2ZdWzJdLGVbZl1bMl1dLFt0W2ZdWzNdLGVbZl1bM11dKSx0W2ZdWzFdPS41Kih0W2ZdWzFdK3lbMF0pLGVbZl1bMV09LjUqKGVbZl1bMV0reVsxXSkseT1hKFt0W2ZdW18tMV0sZVtmXVtfLTFdXSxbdFtmXVtfLTNdLGVbZl1bXy0zXV0sW3RbZl1bXy00XSxlW2ZdW18tNF1dKSx0W2ZdW18tMl09LjUqKHRbZl1bXy0yXSt5WzBdKSxlW2ZdW18tMl09LjUqKGVbZl1bXy0yXSt5WzFdKX1yZXR1cm5bdCxlXX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4vY2F0bXVsbF9yb21cIjo4ODh9XSw4OTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e1JFTEFUSVZFX0NVTExfVE9MRVJBTkNFOjFlLTZ9fSx7fV0sODkyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSYmcj9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjLHUsaDtlfHwoZT1bXSkscio9MyxuKj0zO3ZhciBmPWkqaSxwPTEtaSxkPXAqcCxnPXAqaSoyLHY9LTMqZCxtPTMqKGQtZykseT0zKihnLWYpLHg9MypmLGI9YSphLF89YiphLHc9MS1hLGs9dyp3LEE9ayp3O2ZvcihoPTA7aDx0Lmxlbmd0aDtoKyspbz12Kih1PXRbaF0pW25dW3JdK20qdVtuXVtyKzFdK3kqdVtuXVtyKzJdK3gqdVtuXVtyKzNdLHM9dip1W24rMV1bcl0rbSp1W24rMV1bcisxXSt5KnVbbisxXVtyKzJdK3gqdVtuKzFdW3IrM10sbD12KnVbbisyXVtyXSttKnVbbisyXVtyKzFdK3kqdVtuKzJdW3IrMl0reCp1W24rMl1bciszXSxjPXYqdVtuKzNdW3JdK20qdVtuKzNdW3IrMV0reSp1W24rM11bcisyXSt4KnVbbiszXVtyKzNdLGVbaF09QSpvKzMqKGsqYSpzK3cqYipsKStfKmM7cmV0dXJuIGV9OmU/ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbyxzLGwsYztlfHwoZT1bXSkscio9Mzt2YXIgdT1pKmksaD0xLWksZj1oKmgscD1oKmkqMixkPS0zKmYsZz0zKihmLXApLHY9MyoocC11KSxtPTMqdSx5PTEtYTtmb3IobD0wO2w8dC5sZW5ndGg7bCsrKW89ZCooYz10W2xdKVtuXVtyXStnKmNbbl1bcisxXSt2KmNbbl1bcisyXSttKmNbbl1bciszXSxzPWQqY1tuKzFdW3JdK2cqY1tuKzFdW3IrMV0rdipjW24rMV1bcisyXSttKmNbbisxXVtyKzNdLGVbbF09eSpvK2EqcztyZXR1cm4gZX06cj9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjLHUsaDtlfHwoZT1bXSksbio9Mzt2YXIgZj1hKmEscD1mKmEsZD0xLWEsZz1kKmQsdj1nKmQ7Zm9yKHU9MDt1PHQubGVuZ3RoO3UrKylvPShoPXRbdV0pW25dW3IrMV0taFtuXVtyXSxzPWhbbisxXVtyKzFdLWhbbisxXVtyXSxsPWhbbisyXVtyKzFdLWhbbisyXVtyXSxjPWhbbiszXVtyKzFdLWhbbiszXVtyXSxlW3VdPXYqbyszKihnKmEqcytkKmYqbCkrcCpjO3JldHVybiBlfTpmdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjO2V8fChlPVtdKTt2YXIgdT0xLWE7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylvPShjPXRbbF0pW25dW3IrMV0tY1tuXVtyXSxzPWNbbisxXVtyKzFdLWNbbisxXVtyXSxlW2xdPXUqbythKnM7cmV0dXJuIGV9fX0se31dLDg5MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIGUmJnI/ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbyxzLGwsYyx1LGg7ZXx8KGU9W10pLHIqPTMsbio9Mzt2YXIgZj1pKmkscD1mKmksZD0xLWksZz1kKmQsdj1nKmQsbT1hKmEseT0xLWEseD15KnksYj15KmEqMixfPS0zKngsdz0zKih4LWIpLGs9MyooYi1tKSxBPTMqbTtmb3IoaD0wO2g8dC5sZW5ndGg7aCsrKW89XyoodT10W2hdKVtuXVtyXSt3KnVbbisxXVtyXStrKnVbbisyXVtyXStBKnVbbiszXVtyXSxzPV8qdVtuXVtyKzFdK3cqdVtuKzFdW3IrMV0rayp1W24rMl1bcisxXStBKnVbbiszXVtyKzFdLGw9Xyp1W25dW3IrMl0rdyp1W24rMV1bcisyXStrKnVbbisyXVtyKzJdK0EqdVtuKzNdW3IrMl0sYz1fKnVbbl1bciszXSt3KnVbbisxXVtyKzNdK2sqdVtuKzJdW3IrM10rQSp1W24rM11bciszXSxlW2hdPXYqbyszKihnKmkqcytkKmYqbCkrcCpjO3JldHVybiBlfTplP2Z1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGMsdSxoO2V8fChlPVtdKSxyKj0zO3ZhciBmPWEqYSxwPWYqYSxkPTEtYSxnPWQqZCx2PWcqZDtmb3IodT0wO3U8dC5sZW5ndGg7dSsrKW89KGg9dFt1XSlbbisxXVtyXS1oW25dW3JdLHM9aFtuKzFdW3IrMV0taFtuXVtyKzFdLGw9aFtuKzFdW3IrMl0taFtuXVtyKzJdLGM9aFtuKzFdW3IrM10taFtuXVtyKzNdLGVbdV09dipvKzMqKGcqYSpzK2QqZipsKStwKmM7cmV0dXJuIGV9OnI/ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbyxzLGwsYztlfHwoZT1bXSksbio9Mzt2YXIgdT0xLWksaD1hKmEsZj0xLWEscD1mKmYsZD1mKmEqMixnPS0zKnAsdj0zKihwLWQpLG09MyooZC1oKSx5PTMqaDtmb3IobD0wO2w8dC5sZW5ndGg7bCsrKW89ZyooYz10W2xdKVtuXVtyXSt2KmNbbisxXVtyXSttKmNbbisyXVtyXSt5KmNbbiszXVtyXSxzPWcqY1tuXVtyKzFdK3YqY1tuKzFdW3IrMV0rbSpjW24rMl1bcisxXSt5KmNbbiszXVtyKzFdLGVbbF09dSpvK2kqcztyZXR1cm4gZX06ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbyxzLGwsYztlfHwoZT1bXSk7dmFyIHU9MS1pO2ZvcihsPTA7bDx0Lmxlbmd0aDtsKyspbz0oYz10W2xdKVtuKzFdW3JdLWNbbl1bcl0scz1jW24rMV1bcisxXS1jW25dW3IrMV0sZVtsXT11Km8raSpzO3JldHVybiBlfX19LHt9XSw4OTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1lLTIsbz1yLTI7cmV0dXJuIG4mJmk/ZnVuY3Rpb24oZSxyLG4pe3ZhciBpLHMsbCxjLHUsaDtlfHwoZT1bXSk7dmFyIGY9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKHIpLGEpKSxwPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihuKSxvKSksZD1NYXRoLm1heCgwLE1hdGgubWluKDEsci1mKSksZz1NYXRoLm1heCgwLE1hdGgubWluKDEsbi1wKSk7Zio9MyxwKj0zO3ZhciB2PWQqZCxtPXYqZCx5PTEtZCx4PXkqeSxiPXgqeSxfPWcqZyx3PV8qZyxrPTEtZyxBPWsqayxUPUEqaztmb3IoaD0wO2g8dC5sZW5ndGg7aCsrKWk9YioodT10W2hdKVtwXVtmXSszKih4KmQqdVtwXVtmKzFdK3kqdip1W3BdW2YrMl0pK20qdVtwXVtmKzNdLHM9Yip1W3ArMV1bZl0rMyooeCpkKnVbcCsxXVtmKzFdK3kqdip1W3ArMV1bZisyXSkrbSp1W3ArMV1bZiszXSxsPWIqdVtwKzJdW2ZdKzMqKHgqZCp1W3ArMl1bZisxXSt5KnYqdVtwKzJdW2YrMl0pK20qdVtwKzJdW2YrM10sYz1iKnVbcCszXVtmXSszKih4KmQqdVtwKzNdW2YrMV0reSp2KnVbcCszXVtmKzJdKSttKnVbcCszXVtmKzNdLGVbaF09VCppKzMqKEEqZypzK2sqXypsKSt3KmM7cmV0dXJuIGV9Om4/ZnVuY3Rpb24oZSxyLG4pe2V8fChlPVtdKTt2YXIgaSxzLGwsYyx1LGgsZj1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IociksYSkpLHA9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKG4pLG8pKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oMSxyLWYpKSxnPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuLXApKTtmKj0zO3ZhciB2PWQqZCxtPXYqZCx5PTEtZCx4PXkqeSxiPXgqeSxfPTEtZztmb3IodT0wO3U8dC5sZW5ndGg7dSsrKWk9XyooaD10W3VdKVtwXVtmXStnKmhbcCsxXVtmXSxzPV8qaFtwXVtmKzFdK2cqaFtwKzFdW2YrMV0sbD1fKmhbcF1bZisyXStnKmhbcCsxXVtmKzFdLGM9XypoW3BdW2YrM10rZypoW3ArMV1bZisxXSxlW3VdPWIqaSszKih4KmQqcyt5KnYqbCkrbSpjO3JldHVybiBlfTppP2Z1bmN0aW9uKGUscixuKXtlfHwoZT1bXSk7dmFyIGkscyxsLGMsdSxoLGY9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKHIpLGEpKSxwPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihuKSxvKSksZD1NYXRoLm1heCgwLE1hdGgubWluKDEsci1mKSksZz1NYXRoLm1heCgwLE1hdGgubWluKDEsbi1wKSk7cCo9Mzt2YXIgdj1nKmcsbT12KmcseT0xLWcseD15KnksYj14KnksXz0xLWQ7Zm9yKHU9MDt1PHQubGVuZ3RoO3UrKylpPV8qKGg9dFt1XSlbcF1bZl0rZCpoW3BdW2YrMV0scz1fKmhbcCsxXVtmXStkKmhbcCsxXVtmKzFdLGw9XypoW3ArMl1bZl0rZCpoW3ArMl1bZisxXSxjPV8qaFtwKzNdW2ZdK2QqaFtwKzNdW2YrMV0sZVt1XT1iKmkrMyooeCpnKnMreSp2KmwpK20qYztyZXR1cm4gZX06ZnVuY3Rpb24oZSxyLG4pe2V8fChlPVtdKTt2YXIgaSxzLGwsYyx1PU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihyKSxhKSksaD1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IobiksbykpLGY9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHItdSkpLHA9TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4taCkpLGQ9MS1wLGc9MS1mO2ZvcihsPTA7bDx0Lmxlbmd0aDtsKyspaT1nKihjPXRbbF0pW2hdW3VdK2YqY1toXVt1KzFdLHM9ZypjW2grMV1bdV0rZipjW2grMV1bdSsxXSxlW2xdPWQqaStwKnM7cmV0dXJuIGV9fX0se31dLDg5NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi94eV9kZWZhdWx0c1wiKSxhPXQoXCIuL2FiX2RlZmF1bHRzXCIpLG89dChcIi4vYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX1lLl9jbGlwUGF0aElkPVwiY2xpcFwiK2UudWlkK1wiY2FycGV0XCI7dmFyIHU9YyhcImNvbG9yXCIscy5kZWZhdWx0TGluZSk7KG4uY29lcmNlRm9udChjLFwiZm9udFwiKSxjKFwiY2FycGV0XCIpLGEodCxlLGwsYyx1KSxlLmEmJmUuYik/KGUuYS5sZW5ndGg8MyYmKGUuYWF4aXMuc21vb3RoaW5nPTApLGUuYi5sZW5ndGg8MyYmKGUuYmF4aXMuc21vb3RoaW5nPTApLGkodCxlLGMpfHwoZS52aXNpYmxlPSExKSxlLl9jaGVhdGVyJiZjKFwiY2hlYXRlcnNsb3BlXCIpKTplLnZpc2libGU9ITF9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIjo1NzcsXCIuLi8uLi9saWJcIjo3MDEsXCIuL2FiX2RlZmF1bHRzXCI6ODc4LFwiLi9hdHRyaWJ1dGVzXCI6ODgwLFwiLi94eV9kZWZhdWx0c1wiOjkwNH1dLDg5NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIiksbi5wbG90PXQoXCIuL3Bsb3RcIiksbi5jYWxjPXQoXCIuL2NhbGNcIiksbi5hbmltYXRhYmxlPSEwLG4uaXNDb250YWluZXI9ITAsbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJjYXJwZXRcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIiksbi5jYXRlZ29yaWVzPVtcImNhcnRlc2lhblwiLFwic3ZnXCIsXCJjYXJwZXRcIixcImNhcnBldEF4aXNcIixcIm5vdExlZ2VuZElzb2xhdGFibGVcIixcIm5vTXVsdGlDYXRlZ29yeVwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiOjc2MCxcIi4vYXR0cmlidXRlc1wiOjg4MCxcIi4vY2FsY1wiOjg4NCxcIi4vZGVmYXVsdHNcIjo4OTUsXCIuL3Bsb3RcIjo5MDF9XSw4OTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj10Ll9mdWxsRGF0YS5sZW5ndGgsaT0wO2k8bjtpKyspe3ZhciBhPXQuX2Z1bGxEYXRhW2ldO2lmKGEuaW5kZXghPT1lLmluZGV4JiYoXCJjYXJwZXRcIj09PWEudHlwZSYmKHJ8fChyPWEpLGEuY2FycGV0PT09ZS5jYXJwZXQpKSlyZXR1cm4gYX1yZXR1cm4gcn19LHt9XSw4OTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm5cIlwiO3ZhciBuLGk9W10sYT1yPzM6MTtmb3Iobj0wO248dC5sZW5ndGg7bis9YSlpLnB1c2godFtuXStcIixcIitlW25dKSxyJiZuPHQubGVuZ3RoLWEmJihpLnB1c2goXCJDXCIpLGkucHVzaChbdFtuKzFdK1wiLFwiK2VbbisxXSx0W24rMl0rXCIsXCIrZVtuKzJdK1wiIFwiXS5qb2luKFwiIFwiKSkpO3JldHVybiBpLmpvaW4ocj9cIlwiOlwiTFwiKX19LHt9XSw4OTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaTtmb3Iobih0KT90Lmxlbmd0aD5lLmxlbmd0aCYmKHQ9dC5zbGljZSgwLGUubGVuZ3RoKSk6dD1bXSxpPTA7aTxlLmxlbmd0aDtpKyspdFtpXT1yKGVbaV0pO3JldHVybiB0fX0se1wiLi4vLi4vbGliXCI6NzAxfV0sOTAwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1pWzBdKnQuZHBkeChlKSxzPWlbMV0qdC5kcGR5KHIpLGw9MSxjPTE7aWYoYSl7dmFyIHU9TWF0aC5zcXJ0KGlbMF0qaVswXStpWzFdKmlbMV0pLGg9TWF0aC5zcXJ0KGFbMF0qYVswXSthWzFdKmFbMV0pLGY9KGlbMF0qYVswXStpWzFdKmFbMV0pL3UvaDtjPU1hdGgubWF4KDAsZil9dmFyIHA9MTgwKk1hdGguYXRhbjIocyxvKS9NYXRoLlBJO3JldHVybiBwPC05MD8ocCs9MTgwLGw9LWwpOnA+OTAmJihwLT0xODAsbD0tbCkse2FuZ2xlOnAsZmxpcDpsLHA6dC5jMnAobixlLHIpLG9mZnNldE11bHRwbGllcjpjfX19LHt9XSw5MDE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLGE9dChcIi4vbWFwXzFkX2FycmF5XCIpLG89dChcIi4vbWFrZXBhdGhcIikscz10KFwiLi9vcmllbnRfdGV4dFwiKSxsPXQoXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIiksYz10KFwiLi4vLi4vbGliXCIpLHU9dChcIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnRcIik7ZnVuY3Rpb24gaCh0LGUscixpLHMsbCl7dmFyIGM9XCJjb25zdC1cIitzK1wiLWxpbmVzXCIsdT1yLnNlbGVjdEFsbChcIi5cIitjKS5kYXRhKGwpO3UuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoYywhMCkuc3R5bGUoXCJ2ZWN0b3ItZWZmZWN0XCIsXCJub24tc2NhbGluZy1zdHJva2VcIiksdS5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBpPXIscz1pLngsbD1pLnksYz1hKFtdLHMsdC5jMnApLHU9YShbXSxsLGUuYzJwKSxoPVwiTVwiK28oYyx1LGkuc21vb3RoaW5nKTtuLnNlbGVjdCh0aGlzKS5hdHRyKFwiZFwiLGgpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsaS53aWR0aCkuc3R5bGUoXCJzdHJva2VcIixpLmNvbG9yKS5zdHlsZShcImZpbGxcIixcIm5vbmVcIil9KSx1LmV4aXQoKS5yZW1vdmUoKX1mdW5jdGlvbiBmKHQsZSxyLGEsbyxjLHUsaCl7dmFyIGY9Yy5zZWxlY3RBbGwoXCJ0ZXh0LlwiK2gpLmRhdGEodSk7Zi5lbnRlcigpLmFwcGVuZChcInRleHRcIikuY2xhc3NlZChoLCEwKTt2YXIgcD0wLGQ9e307cmV0dXJuIGYuZWFjaChmdW5jdGlvbihvLGMpe3ZhciB1O2lmKFwiYXV0b1wiPT09by5heGlzLnRpY2thbmdsZSl1PXMoYSxlLHIsby54eSxvLmR4eSk7ZWxzZXt2YXIgaD0oby5heGlzLnRpY2thbmdsZSsxODApKk1hdGguUEkvMTgwO3U9cyhhLGUscixvLnh5LFtNYXRoLmNvcyhoKSxNYXRoLnNpbihoKV0pfWN8fChkPXthbmdsZTp1LmFuZ2xlLGZsaXA6dS5mbGlwfSk7dmFyIGY9KG8uZW5kQW5jaG9yPy0xOjEpKnUuZmxpcCxnPW4uc2VsZWN0KHRoaXMpLmF0dHIoe1widGV4dC1hbmNob3JcIjpmPjA/XCJzdGFydFwiOlwiZW5kXCIsXCJkYXRhLW5vdGV4XCI6MX0pLmNhbGwoaS5mb250LG8uZm9udCkudGV4dChvLnRleHQpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsdCksdj1pLmJCb3godGhpcyk7Zy5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrdS5wWzBdK1wiLFwiK3UucFsxXStcIikgcm90YXRlKFwiK3UuYW5nbGUrXCIpdHJhbnNsYXRlKFwiK28uYXhpcy5sYWJlbHBhZGRpbmcqZitcIixcIisuMyp2LmhlaWdodCtcIilcIikscD1NYXRoLm1heChwLHYud2lkdGgrby5heGlzLmxhYmVscGFkZGluZyl9KSxmLmV4aXQoKS5yZW1vdmUoKSxkLm1heEV4dGVudD1wLGR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBsPWUueGF4aXMsdT1lLnlheGlzLHA9dC5fZnVsbExheW91dC5fY2xpcHM7Yy5tYWtlVHJhY2VHcm91cHMoaSxyLFwidHJhY2VcIikuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxpPWVbMF0sZD1pLnRyYWNlLHY9ZC5hYXhpcyxtPWQuYmF4aXMseT1jLmVuc3VyZVNpbmdsZShyLFwiZ1wiLFwibWlub3JsYXllclwiKSx4PWMuZW5zdXJlU2luZ2xlKHIsXCJnXCIsXCJtYWpvcmxheWVyXCIpLGI9Yy5lbnN1cmVTaW5nbGUocixcImdcIixcImJvdW5kYXJ5bGF5ZXJcIiksXz1jLmVuc3VyZVNpbmdsZShyLFwiZ1wiLFwibGFiZWxsYXllclwiKTtyLnN0eWxlKFwib3BhY2l0eVwiLGQub3BhY2l0eSksaChsLHUseCx2LFwiYVwiLHYuX2dyaWRsaW5lcyksaChsLHUseCxtLFwiYlwiLG0uX2dyaWRsaW5lcyksaChsLHUseSx2LFwiYVwiLHYuX21pbm9yZ3JpZGxpbmVzKSxoKGwsdSx5LG0sXCJiXCIsbS5fbWlub3JncmlkbGluZXMpLGgobCx1LGIsdixcImEtYm91bmRhcnlcIix2Ll9ib3VuZGFyeWxpbmVzKSxoKGwsdSxiLG0sXCJiLWJvdW5kYXJ5XCIsbS5fYm91bmRhcnlsaW5lcyk7dmFyIHc9Zih0LGwsdSxkLGksXyx2Ll9sYWJlbHMsXCJhLWxhYmVsXCIpLGs9Zih0LGwsdSxkLGksXyxtLl9sYWJlbHMsXCJiLWxhYmVsXCIpOyFmdW5jdGlvbih0LGUscixuLGksYSxvLGwpe3ZhciB1LGgsZixwO3U9LjUqKHIuYVswXStyLmFbci5hLmxlbmd0aC0xXSksaD1yLmJbMF0sZj1yLmFiMnh5KHUsaCwhMCkscD1yLmR4eWRhX3JvdWdoKHUsaCksdm9pZCAwPT09by5hbmdsZSYmYy5leHRlbmRGbGF0KG8scyhyLGksYSxmLHIuZHh5ZGJfcm91Z2godSxoKSkpO2codCxlLHIsbixmLHAsci5hYXhpcyxpLGEsbyxcImEtdGl0bGVcIiksdT1yLmFbMF0saD0uNSooci5iWzBdK3IuYltyLmIubGVuZ3RoLTFdKSxmPXIuYWIyeHkodSxoLCEwKSxwPXIuZHh5ZGJfcm91Z2godSxoKSx2b2lkIDA9PT1sLmFuZ2xlJiZjLmV4dGVuZEZsYXQobCxzKHIsaSxhLGYsci5keHlkYV9yb3VnaCh1LGgpKSk7Zyh0LGUscixuLGYscCxyLmJheGlzLGksYSxsLFwiYi10aXRsZVwiKX0odCxfLGQsaSxsLHUsdyxrKSxmdW5jdGlvbih0LGUscixuLGkpe3ZhciBzLGwsdSxoLGY9ci5zZWxlY3QoXCIjXCIrdC5fY2xpcFBhdGhJZCk7Zi5zaXplKCl8fChmPXIuYXBwZW5kKFwiY2xpcFBhdGhcIikuY2xhc3NlZChcImNhcnBldGNsaXBcIiwhMCkpO3ZhciBwPWMuZW5zdXJlU2luZ2xlKGYsXCJwYXRoXCIsXCJjYXJwZXRib3VuZGFyeVwiKSxkPWUuY2xpcHNlZ21lbnRzLGc9W107Zm9yKGg9MDtoPGQubGVuZ3RoO2grKylzPWRbaF0sbD1hKFtdLHMueCxuLmMycCksdT1hKFtdLHMueSxpLmMycCksZy5wdXNoKG8obCx1LHMuYmljdWJpYykpO3ZhciB2PVwiTVwiK2cuam9pbihcIkxcIikrXCJaXCI7Zi5hdHRyKFwiaWRcIix0Ll9jbGlwUGF0aElkKSxwLmF0dHIoXCJkXCIsdil9KGQsaSxwLGwsdSl9KX07dmFyIHA9dS5MSU5FX1NQQUNJTkcsZD0oMS11Lk1JRF9TSElGVCkvcCsxO2Z1bmN0aW9uIGcodCxlLHIsYSxvLGMsdSxoLGYsZyx2KXt2YXIgbT1bXTt1LnRpdGxlLnRleHQmJm0ucHVzaCh1LnRpdGxlLnRleHQpO3ZhciB5PWUuc2VsZWN0QWxsKFwidGV4dC5cIit2KS5kYXRhKG0pLHg9Zy5tYXhFeHRlbnQ7eS5lbnRlcigpLmFwcGVuZChcInRleHRcIikuY2xhc3NlZCh2LCEwKSx5LmVhY2goZnVuY3Rpb24oKXt2YXIgZT1zKHIsaCxmLG8sYyk7LTE9PT1bXCJzdGFydFwiLFwiYm90aFwiXS5pbmRleE9mKHUuc2hvd3RpY2tsYWJlbHMpJiYoeD0wKTt2YXIgYT11LnRpdGxlLmZvbnQuc2l6ZTt4Kz1hK3UudGl0bGUub2Zmc2V0O3ZhciB2PShnLmFuZ2xlKyhnLmZsaXA8MD8xODA6MCktZS5hbmdsZSs0NTApJTM2MCxtPXY+OTAmJnY8MjcwLHk9bi5zZWxlY3QodGhpcyk7eS50ZXh0KHUudGl0bGUudGV4dCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyx0KSxtJiYoeD0oLWwubGluZUNvdW50KHkpK2QpKnAqYS14KSx5LmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIitlLnBbMF0rXCIsXCIrZS5wWzFdK1wiKSByb3RhdGUoXCIrZS5hbmdsZStcIikgdHJhbnNsYXRlKDAsXCIreCtcIilcIikuY2xhc3NlZChcInVzZXItc2VsZWN0LW5vbmVcIiwhMCkuYXR0cihcInRleHQtYW5jaG9yXCIsXCJtaWRkbGVcIikuY2FsbChpLmZvbnQsdS50aXRsZS5mb250KX0pLHkuZXhpdCgpLnJlbW92ZSgpfX0se1wiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudFwiOjY3MyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiOjcyNSxcIi4vbWFrZXBhdGhcIjo4OTgsXCIuL21hcF8xZF9hcnJheVwiOjg5OSxcIi4vb3JpZW50X3RleHRcIjo5MDAsZDM6MTU1fV0sOTAyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vY29uc3RhbnRzXCIpLGk9dChcIi4uLy4uL2xpYi9zZWFyY2hcIikuZmluZEJpbixhPXQoXCIuL2NvbXB1dGVfY29udHJvbF9wb2ludHNcIiksbz10KFwiLi9jcmVhdGVfc3BsaW5lX2V2YWx1YXRvclwiKSxzPXQoXCIuL2NyZWF0ZV9pX2Rlcml2YXRpdmVfZXZhbHVhdG9yXCIpLGw9dChcIi4vY3JlYXRlX2pfZGVyaXZhdGl2ZV9ldmFsdWF0b3JcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Escj10Ll9iLGM9ZS5sZW5ndGgsdT1yLmxlbmd0aCxoPXQuYWF4aXMsZj10LmJheGlzLHA9ZVswXSxkPWVbYy0xXSxnPXJbMF0sdj1yW3UtMV0sbT1lW2UubGVuZ3RoLTFdLWVbMF0seT1yW3IubGVuZ3RoLTFdLXJbMF0seD1tKm4uUkVMQVRJVkVfQ1VMTF9UT0xFUkFOQ0UsYj15Km4uUkVMQVRJVkVfQ1VMTF9UT0xFUkFOQ0U7cC09eCxkKz14LGctPWIsdis9Yix0LmlzVmlzaWJsZT1mdW5jdGlvbih0LGUpe3JldHVybiB0PnAmJnQ8ZCYmZT5nJiZlPHZ9LHQuaXNPY2NsdWRlZD1mdW5jdGlvbih0LGUpe3JldHVybiB0PHB8fHQ+ZHx8ZTxnfHxlPnZ9LHQuc2V0U2NhbGU9ZnVuY3Rpb24oKXt2YXIgZT10Ll94LHI9dC5feSxuPWEodC5feGN0cmwsdC5feWN0cmwsZSxyLGguc21vb3RoaW5nLGYuc21vb3RoaW5nKTt0Ll94Y3RybD1uWzBdLHQuX3ljdHJsPW5bMV0sdC5ldmFseHk9byhbdC5feGN0cmwsdC5feWN0cmxdLGMsdSxoLnNtb290aGluZyxmLnNtb290aGluZyksdC5keHlkaT1zKFt0Ll94Y3RybCx0Ll95Y3RybF0saC5zbW9vdGhpbmcsZi5zbW9vdGhpbmcpLHQuZHh5ZGo9bChbdC5feGN0cmwsdC5feWN0cmxdLGguc21vb3RoaW5nLGYuc21vb3RoaW5nKX0sdC5pMmE9ZnVuY3Rpb24odCl7dmFyIHI9TWF0aC5tYXgoMCxNYXRoLmZsb29yKHRbMF0pLGMtMiksbj10WzBdLXI7cmV0dXJuKDEtbikqZVtyXStuKmVbcisxXX0sdC5qMmI9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMCxNYXRoLmZsb29yKHRbMV0pLGMtMiksbj10WzFdLWU7cmV0dXJuKDEtbikqcltlXStuKnJbZSsxXX0sdC5pajJhYj1mdW5jdGlvbihlKXtyZXR1cm5bdC5pMmEoZVswXSksdC5qMmIoZVsxXSldfSx0LmEyaT1mdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1heCgwLE1hdGgubWluKGkodCxlKSxjLTIpKSxuPWVbcl0sYT1lW3IrMV07cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oYy0xLHIrKHQtbikvKGEtbikpKX0sdC5iMmo9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMCxNYXRoLm1pbihpKHQsciksdS0yKSksbj1yW2VdLGE9cltlKzFdO3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKHUtMSxlKyh0LW4pLyhhLW4pKSl9LHQuYWIyaWo9ZnVuY3Rpb24oZSl7cmV0dXJuW3QuYTJpKGVbMF0pLHQuYjJqKGVbMV0pXX0sdC5pMmM9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5ldmFseHkoW10sZSxyKX0sdC5hYjJ4eT1mdW5jdGlvbihuLGksYSl7aWYoIWEmJihuPGVbMF18fG4+ZVtjLTFdfGk8clswXXx8aT5yW3UtMV0pKXJldHVyblshMSwhMV07dmFyIG89dC5hMmkobikscz10LmIyaihpKSxsPXQuZXZhbHh5KFtdLG8scyk7aWYoYSl7dmFyIGgsZixwLGQsZz0wLHY9MCxtPVtdO248ZVswXT8oaD0wLGY9MCxnPShuLWVbMF0pLyhlWzFdLWVbMF0pKTpuPmVbYy0xXT8oaD1jLTIsZj0xLGc9KG4tZVtjLTFdKS8oZVtjLTFdLWVbYy0yXSkpOmY9by0oaD1NYXRoLm1heCgwLE1hdGgubWluKGMtMixNYXRoLmZsb29yKG8pKSkpLGk8clswXT8ocD0wLGQ9MCx2PShpLXJbMF0pLyhyWzFdLXJbMF0pKTppPnJbdS0xXT8ocD11LTIsZD0xLHY9KGktclt1LTFdKS8oclt1LTFdLXJbdS0yXSkpOmQ9cy0ocD1NYXRoLm1heCgwLE1hdGgubWluKHUtMixNYXRoLmZsb29yKHMpKSkpLGcmJih0LmR4eWRpKG0saCxwLGYsZCksbFswXSs9bVswXSpnLGxbMV0rPW1bMV0qZyksdiYmKHQuZHh5ZGoobSxoLHAsZixkKSxsWzBdKz1tWzBdKnYsbFsxXSs9bVsxXSp2KX1yZXR1cm4gbH0sdC5jMnA9ZnVuY3Rpb24odCxlLHIpe3JldHVybltlLmMycCh0WzBdKSxyLmMycCh0WzFdKV19LHQucDJ4PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZS5wMmModFswXSksci5wMmModFsxXSldfSx0LmRhZGk9ZnVuY3Rpb24odCl7dmFyIHI9TWF0aC5tYXgoMCxNYXRoLm1pbihlLmxlbmd0aC0yLHQpKTtyZXR1cm4gZVtyKzFdLWVbcl19LHQuZGJkaj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKHIubGVuZ3RoLTIsdCkpO3JldHVybiByW2UrMV0tcltlXX0sdC5keHlkYT1mdW5jdGlvbihlLHIsbixpKXt2YXIgYT10LmR4eWRpKG51bGwsZSxyLG4saSksbz10LmRhZGkoZSxuKTtyZXR1cm5bYVswXS9vLGFbMV0vb119LHQuZHh5ZGI9ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9dC5keHlkaihudWxsLGUscixuLGkpLG89dC5kYmRqKHIsaSk7cmV0dXJuW2FbMF0vbyxhWzFdL29dfSx0LmR4eWRhX3JvdWdoPWZ1bmN0aW9uKGUscixuKXt2YXIgaT1tKihufHwuMSksYT10LmFiMnh5KGUraSxyLCEwKSxvPXQuYWIyeHkoZS1pLHIsITApO3JldHVyblsuNSooYVswXS1vWzBdKS9pLC41KihhWzFdLW9bMV0pL2ldfSx0LmR4eWRiX3JvdWdoPWZ1bmN0aW9uKGUscixuKXt2YXIgaT15KihufHwuMSksYT10LmFiMnh5KGUscitpLCEwKSxvPXQuYWIyeHkoZSxyLWksITApO3JldHVyblsuNSooYVswXS1vWzBdKS9pLC41KihhWzFdLW9bMV0pL2ldfSx0LmRwZHg9ZnVuY3Rpb24odCl7cmV0dXJuIHQuX219LHQuZHBkeT1mdW5jdGlvbih0KXtyZXR1cm4gdC5fbX19fSx7XCIuLi8uLi9saWIvc2VhcmNoXCI6NzIwLFwiLi9jb21wdXRlX2NvbnRyb2xfcG9pbnRzXCI6ODkwLFwiLi9jb25zdGFudHNcIjo4OTEsXCIuL2NyZWF0ZV9pX2Rlcml2YXRpdmVfZXZhbHVhdG9yXCI6ODkyLFwiLi9jcmVhdGVfal9kZXJpdmF0aXZlX2V2YWx1YXRvclwiOjg5MyxcIi4vY3JlYXRlX3NwbGluZV9ldmFsdWF0b3JcIjo4OTR9XSw5MDM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGksYSxvLHM9W10sbD1bXSxjPXRbMF0ubGVuZ3RoLHU9dC5sZW5ndGg7ZnVuY3Rpb24gaChlLHIpe3ZhciBuLGk9MCxhPTA7cmV0dXJuIGU+MCYmdm9pZCAwIT09KG49dFtyXVtlLTFdKSYmKGErKyxpKz1uKSxlPGMtMSYmdm9pZCAwIT09KG49dFtyXVtlKzFdKSYmKGErKyxpKz1uKSxyPjAmJnZvaWQgMCE9PShuPXRbci0xXVtlXSkmJihhKyssaSs9bikscjx1LTEmJnZvaWQgMCE9PShuPXRbcisxXVtlXSkmJihhKyssaSs9biksaS9NYXRoLm1heCgxLGEpfXZhciBmLHAsZCxnLHYsbSx5LHgsYixfLHcsaz0wO2ZvcihpPTA7aTxjO2krKylmb3IoYT0wO2E8dTthKyspdm9pZCAwPT09dFthXVtpXSYmKHMucHVzaChpKSxsLnB1c2goYSksdFthXVtpXT1oKGksYSkpLGs9TWF0aC5tYXgoayxNYXRoLmFicyh0W2FdW2ldKSk7aWYoIXMubGVuZ3RoKXJldHVybiB0O3ZhciBBPTAsVD0wLE09cy5sZW5ndGg7ZG97Zm9yKEE9MCxvPTA7bzxNO28rKyl7aT1zW29dLGE9bFtvXTt2YXIgUyxFLEMsTCx6LE8sST0wLEQ9MDswPT09aT8oQz1lW3o9TWF0aC5taW4oYy0xLDIpXSxMPWVbMV0sUz10W2FdW3pdLEQrPShFPXRbYV1bMV0pKyhFLVMpKihlWzBdLUwpLyhMLUMpLEkrKyk6aT09PWMtMSYmKEM9ZVt6PU1hdGgubWF4KDAsYy0zKV0sTD1lW2MtMl0sUz10W2FdW3pdLEQrPShFPXRbYV1bYy0yXSkrKEUtUykqKGVbYy0xXS1MKS8oTC1DKSxJKyspLCgwPT09aXx8aT09PWMtMSkmJmE+MCYmYTx1LTEmJihmPXJbYSsxXS1yW2FdLEQrPSgocD1yW2FdLXJbYS0xXSkqdFthKzFdW2ldK2YqdFthLTFdW2ldKS8ocCtmKSxJKyspLDA9PT1hPyhDPXJbTz1NYXRoLm1pbih1LTEsMildLEw9clsxXSxTPXRbT11baV0sRCs9KEU9dFsxXVtpXSkrKEUtUykqKHJbMF0tTCkvKEwtQyksSSsrKTphPT09dS0xJiYoQz1yW089TWF0aC5tYXgoMCx1LTMpXSxMPXJbdS0yXSxTPXRbT11baV0sRCs9KEU9dFt1LTJdW2ldKSsoRS1TKSooclt1LTFdLUwpLyhMLUMpLEkrKyksKDA9PT1hfHxhPT09dS0xKSYmaT4wJiZpPGMtMSYmKGY9ZVtpKzFdLWVbaV0sRCs9KChwPWVbaV0tZVtpLTFdKSp0W2FdW2krMV0rZip0W2FdW2ktMV0pLyhwK2YpLEkrKyksST9ELz1JOihkPWVbaSsxXS1lW2ldLGc9ZVtpXS1lW2ktMV0seD0odj1yW2ErMV0tclthXSkqKG09clthXS1yW2EtMV0pKih2K20pLEQ9KCh5PWQqZyooZCtnKSkqKG0qdFthKzFdW2ldK3YqdFthLTFdW2ldKSt4KihnKnRbYV1baSsxXStkKnRbYV1baS0xXSkpLyh4KihnK2QpK3kqKG0rdikpKSxBKz0oXz0oYj1ELXRbYV1baV0pL2spKl8sdz1JPzA6Ljg1LHRbYV1baV0rPWIqKDErdyl9QT1NYXRoLnNxcnQoQSl9d2hpbGUoVCsrPDEwMCYmQT4xZS01KTtyZXR1cm4gbi5sb2coXCJTbW9vdGhlciBjb252ZXJnZWQgdG9cIixBLFwiYWZ0ZXJcIixULFwiaXRlcmF0aW9uc1wiKSx0fX0se1wiLi4vLi4vbGliXCI6NzAxfV0sOTA0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKS5pc0FycmF5MUQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1yKFwieFwiKSxhPWkmJmkubGVuZ3RoLG89cihcInlcIikscz1vJiZvLmxlbmd0aDtpZighYSYmIXMpcmV0dXJuITE7aWYoZS5fY2hlYXRlcj0haSxhJiYhbihpKXx8cyYmIW4obykpZS5fbGVuZ3RoPW51bGw7ZWxzZXt2YXIgbD1hP2kubGVuZ3RoOjEvMDtzJiYobD1NYXRoLm1pbihsLG8ubGVuZ3RoKSksZS5hJiZlLmEubGVuZ3RoJiYobD1NYXRoLm1pbihsLGUuYS5sZW5ndGgpKSxlLmImJmUuYi5sZW5ndGgmJihsPU1hdGgubWluKGwsZS5iLmxlbmd0aCkpLGUuX2xlbmd0aD1sfXJldHVybiEwfX0se1wiLi4vLi4vbGliXCI6NzAxfV0sOTA1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uL3NjYXR0ZXJnZW8vYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiKSxsPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsYz1pLm1hcmtlci5saW5lO2UuZXhwb3J0cz1sKHtsb2NhdGlvbnM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGxvY2F0aW9ubW9kZTppLmxvY2F0aW9ubW9kZSx6Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx0ZXh0Omwoe30saS50ZXh0LHt9KSxob3ZlcnRleHQ6bCh7fSxpLmhvdmVydGV4dCx7fSksbWFya2VyOntsaW5lOntjb2xvcjpjLmNvbG9yLHdpZHRoOmwoe30sYy53aWR0aCx7ZGZsdDoxfSksZWRpdFR5cGU6XCJjYWxjXCJ9LG9wYWNpdHk6e3ZhbFR5cGU6XCJudW1iZXJcIixhcnJheU9rOiEwLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZTpcInN0eWxlXCJ9LGVkaXRUeXBlOlwiY2FsY1wifSxzZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5Omkuc2VsZWN0ZWQubWFya2VyLm9wYWNpdHksZWRpdFR5cGU6XCJwbG90XCJ9LGVkaXRUeXBlOlwicGxvdFwifSx1bnNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6aS51bnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LGVkaXRUeXBlOlwicGxvdFwifSxlZGl0VHlwZTpcInBsb3RcIn0saG92ZXJpbmZvOmwoe30scy5ob3ZlcmluZm8se2VkaXRUeXBlOlwiY2FsY1wiLGZsYWdzOltcImxvY2F0aW9uXCIsXCJ6XCIsXCJ0ZXh0XCIsXCJuYW1lXCJdfSksaG92ZXJ0ZW1wbGF0ZTpuKCl9LGEoXCJcIix7Y0xldHRlcjpcInpcIixlZGl0VHlwZU92ZXJyaWRlOlwiY2FsY1wifSkse2NvbG9yYmFyOm99KX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCI6NTc5LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIjo1ODUsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi4vc2NhdHRlcmdlby9hdHRyaWJ1dGVzXCI6MTA5Mn1dLDkwNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsY1wiKSxvPXQoXCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YVwiKSxzPXQoXCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLl9sZW5ndGgsbD1uZXcgQXJyYXkociksYz0wO2M8cjtjKyspe3ZhciB1PWxbY109e30saD1lLmxvY2F0aW9uc1tjXSxmPWUueltjXTt1LmxvYz1cInN0cmluZ1wiPT10eXBlb2YgaD9oOm51bGwsdS56PW4oZik/ZjppfXJldHVybiBvKGwsZSksYSh0LGUse3ZhbHM6ZS56LGNvbnRhaW5lclN0cjpcIlwiLGNMZXR0ZXI6XCJ6XCJ9KSxzKGwsZSksbH19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCI6NTg2LFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhXCI6MTA1MSxcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIjoxMDU0LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw5MDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiKSxhPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgbD1zKFwibG9jYXRpb25zXCIpLGM9cyhcInpcIik7bCYmbC5sZW5ndGgmJm4uaXNBcnJheU9yVHlwZWRBcnJheShjKSYmYy5sZW5ndGg/KGUuX2xlbmd0aD1NYXRoLm1pbihsLmxlbmd0aCxjLmxlbmd0aCkscyhcImxvY2F0aW9ubW9kZVwiKSxzKFwidGV4dFwiKSxzKFwiaG92ZXJ0ZXh0XCIpLHMoXCJob3ZlcnRlbXBsYXRlXCIpLHMoXCJtYXJrZXIubGluZS5jb2xvclwiKSxzKFwibWFya2VyLmxpbmUud2lkdGhcIikscyhcIm1hcmtlci5vcGFjaXR5XCIpLGkodCxlLG8scyx7cHJlZml4OlwiXCIsY0xldHRlcjpcInpcIn0pLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHMpKTplLnZpc2libGU9ITF9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIjo1ODgsXCIuLi8uLi9saWJcIjo3MDEsXCIuL2F0dHJpYnV0ZXNcIjo5MDV9XSw5MDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sb2NhdGlvbj1lLmxvY2F0aW9uLHQuej1lLnosdH19LHt9XSw5MDk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksaT10KFwiLi9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG8scyxsLGMsdT10LmNkLGg9dVswXS50cmFjZSxmPXQuc3VicGxvdDtmb3Iocz0wO3M8dS5sZW5ndGg7cysrKWlmKGM9ITEsKG89dVtzXSkuX3BvbHlnb25zKXtmb3IobD0wO2w8by5fcG9seWdvbnMubGVuZ3RoO2wrKylvLl9wb2x5Z29uc1tsXS5jb250YWlucyhbZSxyXSkmJihjPSFjKSxvLl9wb2x5Z29uc1tsXS5jb250YWlucyhbZSszNjAscl0pJiYoYz0hYyk7aWYoYylicmVha31pZihjJiZvKXJldHVybiB0LngwPXQueDE9dC54YS5jMnAoby5jdCksdC55MD10LnkxPXQueWEuYzJwKG8uY3QpLHQuaW5kZXg9by5pbmRleCx0LmxvY2F0aW9uPW8ubG9jLHQuej1vLnosdC5ob3ZlcnRlbXBsYXRlPW8uaG92ZXJ0ZW1wbGF0ZSxmdW5jdGlvbih0LGUscixvKXtpZihlLmhvdmVydGVtcGxhdGUpcmV0dXJuO3ZhciBzPXIuaGl8fGUuaG92ZXJpbmZvLGw9XCJhbGxcIj09PXM/aS5ob3ZlcmluZm8uZmxhZ3M6cy5zcGxpdChcIitcIiksYz0tMSE9PWwuaW5kZXhPZihcIm5hbWVcIiksdT0tMSE9PWwuaW5kZXhPZihcImxvY2F0aW9uXCIpLGg9LTEhPT1sLmluZGV4T2YoXCJ6XCIpLGY9LTEhPT1sLmluZGV4T2YoXCJ0ZXh0XCIpLHA9W107IWMmJnU/dC5uYW1lT3ZlcnJpZGU9ci5sb2M6KGMmJih0Lm5hbWVPdmVycmlkZT1lLm5hbWUpLHUmJnAucHVzaChyLmxvYykpO2gmJnAucHVzaCgoZD1yLnosbi50aWNrVGV4dChvLG8uYzJsKGQpLFwiaG92ZXJcIikudGV4dCkpO3ZhciBkO2YmJmEocixlLHApO3QuZXh0cmFUZXh0PXAuam9pbihcIjxicj5cIil9KHQsaCxvLGYubW9ja0F4aXMpLFt0XX19LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHRcIjoxMDYwLFwiLi9hdHRyaWJ1dGVzXCI6OTA1fV0sOTEwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNvbG9yYmFyPXQoXCIuLi9oZWF0bWFwL2NvbG9yYmFyXCIpLG4uY2FsYz10KFwiLi9jYWxjXCIpLG4ucGxvdD10KFwiLi9wbG90XCIpLG4uc3R5bGU9dChcIi4vc3R5bGVcIikuc3R5bGUsbi5zdHlsZU9uU2VsZWN0PXQoXCIuL3N0eWxlXCIpLnN0eWxlT25TZWxlY3Qsbi5ob3ZlclBvaW50cz10KFwiLi9ob3ZlclwiKSxuLmV2ZW50RGF0YT10KFwiLi9ldmVudF9kYXRhXCIpLG4uc2VsZWN0UG9pbnRzPXQoXCIuL3NlbGVjdFwiKSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cImNob3JvcGxldGhcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9nZW9cIiksbi5jYXRlZ29yaWVzPVtcImdlb1wiLFwibm9PcGFjaXR5XCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvZ2VvXCI6Nzc5LFwiLi4vaGVhdG1hcC9jb2xvcmJhclwiOjk1MSxcIi4vYXR0cmlidXRlc1wiOjkwNSxcIi4vY2FsY1wiOjkwNixcIi4vZGVmYXVsdHNcIjo5MDcsXCIuL2V2ZW50X2RhdGFcIjo5MDgsXCIuL2hvdmVyXCI6OTA5LFwiLi9wbG90XCI6OTExLFwiLi9zZWxlY3RcIjo5MTIsXCIuL3N0eWxlXCI6OTEzfV0sOTExOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9saWIvcG9seWdvblwiKSxvPXQoXCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHNcIikuZ2V0VG9wb2pzb25GZWF0dXJlcyxzPXQoXCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzXCIpLmxvY2F0aW9uVG9GZWF0dXJlLGw9dChcIi4vc3R5bGVcIikuc3R5bGU7ZnVuY3Rpb24gYyh0LGUpe2Zvcih2YXIgcj10WzBdLnRyYWNlLG49dC5sZW5ndGgsaT1vKHIsZSksYT0wO2E8bjthKyspe3ZhciBsPXRbYV0sYz1zKHIubG9jYXRpb25tb2RlLGwubG9jLGkpO2M/KGwuZ2VvanNvbj1jLGwuY3Q9Yy5wcm9wZXJ0aWVzLmN0LGwuaW5kZXg9YSxsLl9wb2x5Z29ucz11KGMpKTpsLmdlb2pzb249bnVsbH19ZnVuY3Rpb24gdSh0KXt2YXIgZSxyLG4saSxvPXQuZ2VvbWV0cnkscz1vLmNvb3JkaW5hdGVzLGw9dC5pZCxjPVtdO2Z1bmN0aW9uIHUodCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aC0xO2UrKylpZih0W2VdWzBdPjAmJnRbZSsxXVswXTwwKXJldHVybiBlO3JldHVybiBudWxsfXN3aXRjaChlPVwiUlVTXCI9PT1sfHxcIkZKSVwiPT09bD9mdW5jdGlvbih0KXt2YXIgZTtpZihudWxsPT09dSh0KSllPXQ7ZWxzZSBmb3IoZT1uZXcgQXJyYXkodC5sZW5ndGgpLGk9MDtpPHQubGVuZ3RoO2krKyllW2ldPVt0W2ldWzBdPDA/dFtpXVswXSszNjA6dFtpXVswXSx0W2ldWzFdXTtjLnB1c2goYS50ZXN0ZXIoZSkpfTpcIkFUQVwiPT09bD9mdW5jdGlvbih0KXt2YXIgZT11KHQpO2lmKG51bGw9PT1lKXJldHVybiBjLnB1c2goYS50ZXN0ZXIodCkpO3ZhciByPW5ldyBBcnJheSh0Lmxlbmd0aCsxKSxuPTA7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKylpPmU/cltuKytdPVt0W2ldWzBdKzM2MCx0W2ldWzFdXTppPT09ZT8ocltuKytdPXRbaV0scltuKytdPVt0W2ldWzBdLC05MF0pOnJbbisrXT10W2ldO3ZhciBvPWEudGVzdGVyKHIpO28ucHRzLnBvcCgpLGMucHVzaChvKX06ZnVuY3Rpb24odCl7Yy5wdXNoKGEudGVzdGVyKHQpKX0sby50eXBlKXtjYXNlXCJNdWx0aVBvbHlnb25cIjpmb3Iocj0wO3I8cy5sZW5ndGg7cisrKWZvcihuPTA7bjxzW3JdLmxlbmd0aDtuKyspZShzW3JdW25dKTticmVhaztjYXNlXCJQb2x5Z29uXCI6Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKyllKHNbcl0pfXJldHVybiBjfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBhPTA7YTxyLmxlbmd0aDthKyspYyhyW2FdLGUudG9wb2pzb24pO3ZhciBvPWUubGF5ZXJzLmJhY2twbG90LnNlbGVjdChcIi5jaG9yb3BsZXRobGF5ZXJcIik7aS5tYWtlVHJhY2VHcm91cHMobyxyLFwidHJhY2UgY2hvcm9wbGV0aFwiKS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPShlWzBdLm5vZGUzPW4uc2VsZWN0KHRoaXMpKS5zZWxlY3RBbGwoXCJwYXRoLmNob3JvcGxldGhsb2NhdGlvblwiKS5kYXRhKGkuaWRlbnRpdHkpO3IuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoXCJjaG9yb3BsZXRobG9jYXRpb25cIiwhMCksci5leGl0KCkucmVtb3ZlKCksbCh0LGUpfSl9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzXCI6Njk0LFwiLi4vLi4vbGliL3BvbHlnb25cIjo3MTMsXCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHNcIjo3MjgsXCIuL3N0eWxlXCI6OTEzLGQzOjE1NX1dLDkxMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scz10LmNkLGw9dC54YXhpcyxjPXQueWF4aXMsdT1bXTtpZighMT09PWUpZm9yKHI9MDtyPHMubGVuZ3RoO3IrKylzW3JdLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8cy5sZW5ndGg7cisrKShpPShuPXNbcl0pLmN0KSYmKGE9bC5jMnAoaSksbz1jLmMycChpKSxlLmNvbnRhaW5zKFthLG9dLG51bGwscix0KT8odS5wdXNoKHtwb2ludE51bWJlcjpyLGxvbjppWzBdLGxhdDppWzFdfSksbi5zZWxlY3RlZD0xKTpuLnNlbGVjdGVkPTApO3JldHVybiB1fX0se31dLDkxMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGVcIik7ZnVuY3Rpb24gcyh0LGUpe3ZhciByPWVbMF0udHJhY2Uscz1lWzBdLm5vZGUzLnNlbGVjdEFsbChcIi5jaG9yb3BsZXRobG9jYXRpb25cIiksbD1yLm1hcmtlcnx8e30sYz1sLmxpbmV8fHt9LHU9by5tYWtlQ29sb3JTY2FsZUZ1bmMoby5leHRyYWN0U2NhbGUocix7Y0xldHRlcjpcInpcIn0pKTtzLmVhY2goZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuYXR0cihcImZpbGxcIix1KHQueikpLmNhbGwoaS5zdHJva2UsdC5tbGN8fGMuY29sb3IpLmNhbGwoYS5kYXNoTGluZSxcIlwiLHQubWx3fHxjLndpZHRofHwwKS5zdHlsZShcIm9wYWNpdHlcIixsLm9wYWNpdHkpfSksYS5zZWxlY3RlZFBvaW50U3R5bGUocyxyLHQpfWUuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCxlKXtlJiZzKHQsZSl9LHN0eWxlT25TZWxlY3Q6ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLm5vZGUzLG49ZVswXS50cmFjZTtuLnNlbGVjdGVkcG9pbnRzP2Euc2VsZWN0ZWRQb2ludFN0eWxlKHIuc2VsZWN0QWxsKFwiLmNob3JvcGxldGhsb2NhdGlvblwiKSxuLHQpOnModCxlKX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlXCI6NTkwLFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LGQzOjE1NX1dLDkxNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vbWVzaDNkL2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiKSxsPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsYz17eDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0seTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0sejp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0sdTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sdjp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sdzp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sc2l6ZW1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInNjYWxlZFwiLFwiYWJzb2x1dGVcIl0sZWRpdFR5cGU6XCJjYWxjXCIsZGZsdDpcInNjYWxlZFwifSxzaXplcmVmOnt2YWxUeXBlOlwibnVtYmVyXCIsZWRpdFR5cGU6XCJjYWxjXCIsbWluOjB9LGFuY2hvcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIixlZGl0VHlwZTpcImNhbGNcIix2YWx1ZXM6W1widGlwXCIsXCJ0YWlsXCIsXCJjbVwiLFwiY2VudGVyXCJdLGRmbHQ6XCJjbVwifSx0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LGhvdmVydGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixhcnJheU9rOiEwLGVkaXRUeXBlOlwiY2FsY1wifSxob3ZlcnRlbXBsYXRlOmEoe2VkaXRUeXBlOlwiY2FsY1wifSx7a2V5czpbXCJub3JtXCJdfSl9O2woYyxuKFwiXCIse2NvbG9yQXR0cjpcInUvdi93IG5vcm1cIixzaG93U2NhbGVEZmx0OiEwLGVkaXRUeXBlT3ZlcnJpZGU6XCJjYWxjXCJ9KSx7Y29sb3JiYXI6aX0pO1tcIm9wYWNpdHlcIixcImxpZ2h0cG9zaXRpb25cIixcImxpZ2h0aW5nXCJdLmZvckVhY2goZnVuY3Rpb24odCl7Y1t0XT1vW3RdfSksYy5ob3ZlcmluZm89bCh7fSxzLmhvdmVyaW5mbyx7ZWRpdFR5cGU6XCJjYWxjXCIsZmxhZ3M6W1wieFwiLFwieVwiLFwielwiLFwidVwiLFwidlwiLFwid1wiLFwibm9ybVwiLFwidGV4dFwiLFwibmFtZVwiXSxkZmx0OlwieCt5K3orbm9ybSt0ZXh0K25hbWVcIn0pLGMudHJhbnNmb3Jtcz12b2lkIDAsZS5leHBvcnRzPWN9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiOjc0NixcIi4uL21lc2gzZC9hdHRyaWJ1dGVzXCI6OTk0fV0sOTE1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLnUsaT1lLnYsYT1lLncsbz1NYXRoLm1pbihlLngubGVuZ3RoLGUueS5sZW5ndGgsZS56Lmxlbmd0aCxyLmxlbmd0aCxpLmxlbmd0aCxhLmxlbmd0aCkscz0tMS8wLGw9MS8wLGM9MDtjPG87YysrKXt2YXIgdT1yW2NdLGg9aVtjXSxmPWFbY10scD1NYXRoLnNxcnQodSp1K2gqaCtmKmYpO3M9TWF0aC5tYXgocyxwKSxsPU1hdGgubWluKGwscCl9ZS5fbGVuPW8sZS5fbm9ybU1heD1zLG4odCxlLHt2YWxzOltsLHNdLGNvbnRhaW5lclN0cjpcIlwiLGNMZXR0ZXI6XCJjXCJ9KX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCI6NTg2fV0sOTE2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsLWNvbmUzZFwiKSxpPXQoXCJnbC1jb25lM2RcIikuY3JlYXRlQ29uZU1lc2gsYT10KFwiLi4vLi4vbGliXCIpLnNpbXBsZU1hcCxvPXQoXCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yXCIpLnBhcnNlQ29sb3JTY2FsZSxzPXQoXCIuLi8uLi9wbG90cy9nbDNkL3ppcDNcIik7ZnVuY3Rpb24gbCh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMubWVzaD1udWxsLHRoaXMuZGF0YT1udWxsfXZhciBjPWwucHJvdG90eXBlO2MuaGFuZGxlUGljaz1mdW5jdGlvbih0KXtpZih0Lm9iamVjdD09PXRoaXMubWVzaCl7dmFyIGU9dC5pbmRleD10LmRhdGEuaW5kZXgscj10aGlzLmRhdGEueFtlXSxuPXRoaXMuZGF0YS55W2VdLGk9dGhpcy5kYXRhLnpbZV0sYT10aGlzLmRhdGEudVtlXSxvPXRoaXMuZGF0YS52W2VdLHM9dGhpcy5kYXRhLndbZV07dC50cmFjZUNvb3JkaW5hdGU9W3IsbixpLGEsbyxzLE1hdGguc3FydChhKmErbypvK3MqcyldO3ZhciBsPXRoaXMuZGF0YS5ob3ZlcnRleHR8fHRoaXMuZGF0YS50ZXh0O3JldHVybiBBcnJheS5pc0FycmF5KGwpJiZ2b2lkIDAhPT1sW2VdP3QudGV4dExhYmVsPWxbZV06bCYmKHQudGV4dExhYmVsPWwpLCEwfX07dmFyIHU9e3hheGlzOjAseWF4aXM6MSx6YXhpczoyfSxoPXt0aXA6MSx0YWlsOjAsY206LjI1LGNlbnRlcjouNX0sZj17dGlwOjEsdGFpbDoxLGNtOi43NSxjZW50ZXI6LjV9O2Z1bmN0aW9uIHAodCxlKXt2YXIgcj10LmZ1bGxTY2VuZUxheW91dCxpPXQuZGF0YVNjYWxlLGw9e307ZnVuY3Rpb24gYyh0LGUpe3ZhciBuPXJbZV0sbz1pW3VbZV1dO3JldHVybiBhKHQsZnVuY3Rpb24odCl7cmV0dXJuIG4uZDJsKHQpKm99KX1sLnZlY3RvcnM9cyhjKGUudSxcInhheGlzXCIpLGMoZS52LFwieWF4aXNcIiksYyhlLncsXCJ6YXhpc1wiKSxlLl9sZW4pLGwucG9zaXRpb25zPXMoYyhlLngsXCJ4YXhpc1wiKSxjKGUueSxcInlheGlzXCIpLGMoZS56LFwiemF4aXNcIiksZS5fbGVuKSxsLmNvbG9ybWFwPW8oZSksbC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHM9W2UuY21pbi9lLl9ub3JtTWF4LGUuY21heC9lLl9ub3JtTWF4XSxsLmNvbmVPZmZzZXQ9aFtlLmFuY2hvcl0sXCJzY2FsZWRcIj09PWUuc2l6ZW1vZGU/bC5jb25lU2l6ZT1lLnNpemVyZWZ8fC41OmwuY29uZVNpemU9ZS5zaXplcmVmJiZlLl9ub3JtTWF4P2Uuc2l6ZXJlZi9lLl9ub3JtTWF4Oi41O3ZhciBwPW4obCksZD1lLmxpZ2h0cG9zaXRpb247cmV0dXJuIHAubGlnaHRQb3NpdGlvbj1bZC54LGQueSxkLnpdLHAuYW1iaWVudD1lLmxpZ2h0aW5nLmFtYmllbnQscC5kaWZmdXNlPWUubGlnaHRpbmcuZGlmZnVzZSxwLnNwZWN1bGFyPWUubGlnaHRpbmcuc3BlY3VsYXIscC5yb3VnaG5lc3M9ZS5saWdodGluZy5yb3VnaG5lc3MscC5mcmVzbmVsPWUubGlnaHRpbmcuZnJlc25lbCxwLm9wYWNpdHk9ZS5vcGFjaXR5LGUuX3BhZD1mW2UuYW5jaG9yXSpwLnZlY3RvclNjYWxlKnAuY29uZVNjYWxlKmUuX25vcm1NYXgscH1jLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLmRhdGE9dDt2YXIgZT1wKHRoaXMuc2NlbmUsdCk7dGhpcy5tZXNoLnVwZGF0ZShlKX0sYy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubWVzaCksdGhpcy5tZXNoLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsbj1wKHQsZSksYT1pKHIsbiksbz1uZXcgbCh0LGUudWlkKTtyZXR1cm4gby5tZXNoPWEsby5kYXRhPWUsYS5fdHJhY2U9byx0LmdscGxvdC5hZGQoYSksb319LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3JcIjo2OTgsXCIuLi8uLi9wbG90cy9nbDNkL3ppcDNcIjo4MDAsXCJnbC1jb25lM2RcIjoyMzl9XSw5MTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiKSxhPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgbD1zKFwidVwiKSxjPXMoXCJ2XCIpLHU9cyhcIndcIiksaD1zKFwieFwiKSxmPXMoXCJ5XCIpLHA9cyhcInpcIik7bCYmbC5sZW5ndGgmJmMmJmMubGVuZ3RoJiZ1JiZ1Lmxlbmd0aCYmaCYmaC5sZW5ndGgmJmYmJmYubGVuZ3RoJiZwJiZwLmxlbmd0aD8ocyhcInNpemVyZWZcIikscyhcInNpemVtb2RlXCIpLHMoXCJhbmNob3JcIikscyhcImxpZ2h0aW5nLmFtYmllbnRcIikscyhcImxpZ2h0aW5nLmRpZmZ1c2VcIikscyhcImxpZ2h0aW5nLnNwZWN1bGFyXCIpLHMoXCJsaWdodGluZy5yb3VnaG5lc3NcIikscyhcImxpZ2h0aW5nLmZyZXNuZWxcIikscyhcImxpZ2h0cG9zaXRpb24ueFwiKSxzKFwibGlnaHRwb3NpdGlvbi55XCIpLHMoXCJsaWdodHBvc2l0aW9uLnpcIiksaSh0LGUsbyxzLHtwcmVmaXg6XCJcIixjTGV0dGVyOlwiY1wifSkscyhcInRleHRcIikscyhcImhvdmVydGV4dFwiKSxzKFwiaG92ZXJ0ZW1wbGF0ZVwiKSxlLl9sZW5ndGg9bnVsbCk6ZS52aXNpYmxlPSExfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCI6NTg4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi9hdHRyaWJ1dGVzXCI6OTE0fV0sOTE4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwidHJhY2VcIixuYW1lOlwiY29uZVwiLGJhc2VQbG90TW9kdWxlOnQoXCIuLi8uLi9wbG90cy9nbDNkXCIpLGNhdGVnb3JpZXM6W1wiZ2wzZFwiXSxhdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksc3VwcGx5RGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIiksY29sb3JiYXI6e21pbjpcImNtaW5cIixtYXg6XCJjbWF4XCJ9LGNhbGM6dChcIi4vY2FsY1wiKSxwbG90OnQoXCIuL2NvbnZlcnRcIiksZXZlbnREYXRhOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubm9ybT1lLnRyYWNlQ29vcmRpbmF0ZVs2XSx0fSxtZXRhOnt9fX0se1wiLi4vLi4vcGxvdHMvZ2wzZFwiOjc4OSxcIi4vYXR0cmlidXRlc1wiOjkxNCxcIi4vY2FsY1wiOjkxNSxcIi4vY29udmVydFwiOjkxNixcIi4vZGVmYXVsdHNcIjo5MTd9XSw5MTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXNcIikuZGFzaCxsPXQoXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIiksYz10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LHU9dChcIi4uLy4uL2NvbnN0YW50cy9maWx0ZXJfb3BzXCIpLGg9dS5DT01QQVJJU09OX09QUzIsZj11LklOVEVSVkFMX09QUyxwPWkubGluZTtlLmV4cG9ydHM9Yyh7ejpuLnoseDpuLngseDA6bi54MCxkeDpuLmR4LHk6bi55LHkwOm4ueTAsZHk6bi5keSx0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsdHJhbnNwb3NlOm4udHJhbnNwb3NlLHh0eXBlOm4ueHR5cGUseXR5cGU6bi55dHlwZSx6aG92ZXJmb3JtYXQ6bi56aG92ZXJmb3JtYXQsaG92ZXJ0ZW1wbGF0ZTpuLmhvdmVydGVtcGxhdGUsY29ubmVjdGdhcHM6bi5jb25uZWN0Z2FwcyxmaWxsY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwiY2FsY1wifSxhdXRvY29udG91cjp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wiLGltcGxpZWRFZGl0czp7XCJjb250b3Vycy5zdGFydFwiOnZvaWQgMCxcImNvbnRvdXJzLmVuZFwiOnZvaWQgMCxcImNvbnRvdXJzLnNpemVcIjp2b2lkIDB9fSxuY29udG91cnM6e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsZGZsdDoxNSxtaW46MSxlZGl0VHlwZTpcImNhbGNcIn0sY29udG91cnM6e3R5cGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImxldmVsc1wiLFwiY29uc3RyYWludFwiXSxkZmx0OlwibGV2ZWxzXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHN0YXJ0Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDpudWxsLGVkaXRUeXBlOlwicGxvdFwiLGltcGxpZWRFZGl0czp7XCJeYXV0b2NvbnRvdXJcIjohMX19LGVuZDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6bnVsbCxlZGl0VHlwZTpcInBsb3RcIixpbXBsaWVkRWRpdHM6e1wiXmF1dG9jb250b3VyXCI6ITF9fSxzaXplOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDpudWxsLG1pbjowLGVkaXRUeXBlOlwicGxvdFwiLGltcGxpZWRFZGl0czp7XCJeYXV0b2NvbnRvdXJcIjohMX19LGNvbG9yaW5nOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJmaWxsXCIsXCJoZWF0bWFwXCIsXCJsaW5lc1wiLFwibm9uZVwiXSxkZmx0OlwiZmlsbFwiLGVkaXRUeXBlOlwiY2FsY1wifSxzaG93bGluZXM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcInBsb3RcIn0sc2hvd2xhYmVsczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwicGxvdFwifSxsYWJlbGZvbnQ6bCh7ZWRpdFR5cGU6XCJwbG90XCIsY29sb3JFZGl0VHlwZTpcInN0eWxlXCJ9KSxsYWJlbGZvcm1hdDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcInBsb3RcIn0sb3BlcmF0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXS5jb25jYXQoaCkuY29uY2F0KGYpLGRmbHQ6XCI9XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHZhbHVlOnt2YWxUeXBlOlwiYW55XCIsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIixpbXBsaWVkRWRpdHM6e2F1dG9jb250b3VyOiExfX0sbGluZTp7Y29sb3I6Yyh7fSxwLmNvbG9yLHtlZGl0VHlwZTpcInN0eWxlK2NvbG9yYmFyc1wifSksd2lkdGg6Yyh7fSxwLndpZHRoLHtlZGl0VHlwZTpcInN0eWxlK2NvbG9yYmFyc1wifSksZGFzaDpzLHNtb290aGluZzpjKHt9LHAuc21vb3RoaW5nLHt9KSxlZGl0VHlwZTpcInBsb3RcIn19LGEoXCJcIix7Y0xldHRlcjpcInpcIixhdXRvQ29sb3JEZmx0OiExLGVkaXRUeXBlT3ZlcnJpZGU6XCJjYWxjXCJ9KSx7Y29sb3JiYXI6b30pfSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIjo1NzksXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzXCI6NTk4LFwiLi4vLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHNcIjo2NzQsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCI6Nzc1LFwiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzXCI6OTQ4LFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCI6MTA1Mn1dLDkyMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9oZWF0bWFwL2NhbGNcIiksaT10KFwiLi9zZXRfY29udG91cnNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0LGUpO3JldHVybiBpKGUpLHJ9fSx7XCIuLi9oZWF0bWFwL2NhbGNcIjo5NDksXCIuL3NldF9jb250b3Vyc1wiOjkzOH1dLDkyMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scz10WzBdLGw9cy54Lmxlbmd0aCxjPXMueS5sZW5ndGgsdT1zLnosaD1uLmNvbnRvdXJzLGY9LTEvMCxwPTEvMDtmb3IoaT0wO2k8YztpKyspcD1NYXRoLm1pbihwLHVbaV1bMF0pLHA9TWF0aC5taW4ocCx1W2ldW2wtMV0pLGY9TWF0aC5tYXgoZix1W2ldWzBdKSxmPU1hdGgubWF4KGYsdVtpXVtsLTFdKTtmb3IoaT0xO2k8bC0xO2krKylwPU1hdGgubWluKHAsdVswXVtpXSkscD1NYXRoLm1pbihwLHVbYy0xXVtpXSksZj1NYXRoLm1heChmLHVbMF1baV0pLGY9TWF0aC5tYXgoZix1W2MtMV1baV0pO3N3aXRjaChzLnByZWZpeEJvdW5kYXJ5PSExLGUpe2Nhc2VcIj5cIjpoLnZhbHVlPmYmJihzLnByZWZpeEJvdW5kYXJ5PSEwKTticmVhaztjYXNlXCI8XCI6aC52YWx1ZTxwJiYocy5wcmVmaXhCb3VuZGFyeT0hMCk7YnJlYWs7Y2FzZVwiW11cIjphPU1hdGgubWluLmFwcGx5KG51bGwsaC52YWx1ZSksKChvPU1hdGgubWF4LmFwcGx5KG51bGwsaC52YWx1ZSkpPHB8fGE+ZikmJihzLnByZWZpeEJvdW5kYXJ5PSEwKTticmVhaztjYXNlXCJdW1wiOmE9TWF0aC5taW4uYXBwbHkobnVsbCxoLnZhbHVlKSxvPU1hdGgubWF4LmFwcGx5KG51bGwsaC52YWx1ZSksYTxwJiZvPmYmJihzLnByZWZpeEJvdW5kYXJ5PSEwKX19fSx7fV0sOTIyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvZHJhd1wiKSxpPXQoXCIuL21ha2VfY29sb3JfbWFwXCIpLGE9dChcIi4vZW5kX3BsdXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS50cmFjZSxvPVwiY2JcIityLnVpZDtpZih0Ll9mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKFwiLlwiK28pLnJlbW92ZSgpLHIuc2hvd3NjYWxlKXt2YXIgcz1lWzBdLnQuY2I9bih0LG8pLGw9ci5jb250b3VycyxjPXIubGluZSx1PWwuc2l6ZXx8MSxoPWwuY29sb3JpbmcsZj1pKHIse2lzQ29sb3JiYXI6ITB9KTtzLmZpbGxncmFkaWVudChcImhlYXRtYXBcIj09PWg/ci5jb2xvcnNjYWxlOlwiXCIpLnpyYW5nZShcImhlYXRtYXBcIj09PWg/W3Iuem1pbixyLnptYXhdOlwiXCIpLmZpbGxjb2xvcihcImZpbGxcIj09PWg/ZjpcIlwiKS5saW5lKHtjb2xvcjpcImxpbmVzXCI9PT1oP2Y6Yy5jb2xvcix3aWR0aDohMSE9PWwuc2hvd2xpbmVzP2Mud2lkdGg6MCxkYXNoOmMuZGFzaH0pLmxldmVscyh7c3RhcnQ6bC5zdGFydCxlbmQ6YShsKSxzaXplOnV9KS5vcHRpb25zKHIuY29sb3JiYXIpKCl9fX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9kcmF3XCI6NTgzLFwiLi9lbmRfcGx1c1wiOjkzMCxcIi4vbWFrZV9jb2xvcl9tYXBcIjo5MzV9XSw5MjM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e0JPVFRPTVNUQVJUOlsxLDksMTMsMTA0LDcxM10sVE9QU1RBUlQ6WzQsNiw3LDEwNCw3MTNdLExFRlRTVEFSVDpbOCwxMiwxNCwyMDgsMTExNF0sUklHSFRTVEFSVDpbMiwzLDExLDIwOCwxMTE0XSxORVdERUxUQTpbbnVsbCxbLTEsMF0sWzAsLTFdLFstMSwwXSxbMSwwXSxudWxsLFswLC0xXSxbLTEsMF0sWzAsMV0sWzAsMV0sbnVsbCxbMCwxXSxbMSwwXSxbMSwwXSxbMCwtMV1dLENIT09TRVNBRERMRTp7MTA0Ols0LDFdLDIwODpbMiw4XSw3MTM6WzcsMTNdLDExMTQ6WzExLDE0XX0sU0FERExFUkVNQUlOREVSOnsxOjQsMjo4LDQ6MSw3OjEzLDg6MiwxMToxNCwxMzo3LDE0OjExfSxMQUJFTERJU1RBTkNFOjIsTEFCRUxJTkNSRUFTRToxMCxMQUJFTE1JTjozLExBQkVMTUFYOjEwLExBQkVMT1BUSU1JWkVSOntFREdFQ09TVDoxLEFOR0xFQ09TVDoxLE5FSUdIQk9SQ09TVDo1LFNBTUVMRVZFTEZBQ1RPUjoxMCxTQU1FTEVWRUxESVNUQU5DRTo1LE1BWENPU1Q6MTAwLElOSVRJQUxTRUFSQ0hQT0lOVFM6MTAsSVRFUkFUSU9OUzo1fX19LHt9XSw5MjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi9sYWJlbF9kZWZhdWx0c1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLG89YS5hZGRPcGFjaXR5LHM9YS5vcGFjaXR5LGw9dChcIi4uLy4uL2NvbnN0YW50cy9maWx0ZXJfb3BzXCIpLGM9bC5DT05TVFJBSU5UX1JFRFVDVElPTix1PWwuQ09NUEFSSVNPTl9PUFMyO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLGwsaCl7dmFyIGYscCxkLGc9ZS5jb250b3Vycyx2PXIoXCJjb250b3Vycy5vcGVyYXRpb25cIik7KGcuX29wZXJhdGlvbj1jW3ZdLGZ1bmN0aW9uKHQsZSl7dmFyIHI7LTE9PT11LmluZGV4T2YoZS5vcGVyYXRpb24pPyh0KFwiY29udG91cnMudmFsdWVcIixbMCwxXSksQXJyYXkuaXNBcnJheShlLnZhbHVlKT9lLnZhbHVlLmxlbmd0aD4yP2UudmFsdWU9ZS52YWx1ZS5zbGljZSgyKTowPT09ZS5sZW5ndGg/ZS52YWx1ZT1bMCwxXTplLmxlbmd0aDwyPyhyPXBhcnNlRmxvYXQoZS52YWx1ZVswXSksZS52YWx1ZT1bcixyKzFdKTplLnZhbHVlPVtwYXJzZUZsb2F0KGUudmFsdWVbMF0pLHBhcnNlRmxvYXQoZS52YWx1ZVsxXSldOm4oZS52YWx1ZSkmJihyPXBhcnNlRmxvYXQoZS52YWx1ZSksZS52YWx1ZT1bcixyKzFdKSk6KHQoXCJjb250b3Vycy52YWx1ZVwiLDApLG4oZS52YWx1ZSl8fChBcnJheS5pc0FycmF5KGUudmFsdWUpP2UudmFsdWU9cGFyc2VGbG9hdChlLnZhbHVlWzBdKTplLnZhbHVlPTApKX0ocixnKSxcIj1cIj09PXY/Zj1nLnNob3dsaW5lcz0hMDooZj1yKFwiY29udG91cnMuc2hvd2xpbmVzXCIpLGQ9cihcImZpbGxjb2xvclwiLG8oKHQubGluZXx8e30pLmNvbG9yfHxsLC41KSkpLGYpJiYocD1yKFwibGluZS5jb2xvclwiLGQmJnMoZCk/byhlLmZpbGxjb2xvciwxKTpsKSxyKFwibGluZS53aWR0aFwiLDIpLHIoXCJsaW5lLmRhc2hcIikpO3IoXCJsaW5lLnNtb290aGluZ1wiKSxpKHIsYSxwLGgpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbnN0YW50cy9maWx0ZXJfb3BzXCI6Njc0LFwiLi9sYWJlbF9kZWZhdWx0c1wiOjkzNCxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sOTI1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbnN0YW50cy9maWx0ZXJfb3BzXCIpLGk9dChcImZhc3QtaXNudW1lcmljXCIpO2Z1bmN0aW9uIGEodCxlKXt2YXIgcixhPUFycmF5LmlzQXJyYXkoZSk7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gaSh0KT8rdDpudWxsfXJldHVybi0xIT09bi5DT01QQVJJU09OX09QUzIuaW5kZXhPZih0KT9yPW8oYT9lWzBdOmUpOi0xIT09bi5JTlRFUlZBTF9PUFMuaW5kZXhPZih0KT9yPWE/W28oZVswXSksbyhlWzFdKV06W28oZSksbyhlKV06LTEhPT1uLlNFVF9PUFMuaW5kZXhPZih0KSYmKHI9YT9lLm1hcChvKTpbbyhlKV0pLHJ9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZT1hKHQsZSk7dmFyIHI9TWF0aC5taW4oZVswXSxlWzFdKSxuPU1hdGgubWF4KGVbMF0sZVsxXSk7cmV0dXJue3N0YXJ0OnIsZW5kOm4sc2l6ZTpuLXJ9fX1mdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm57c3RhcnQ6ZT1hKHQsZSksZW5kOjEvMCxzaXplOjEvMH19fWUuZXhwb3J0cz17XCJbXVwiOm8oXCJbXVwiKSxcIl1bXCI6byhcIl1bXCIpLFwiPlwiOnMoXCI+XCIpLFwiPFwiOnMoXCI8XCIpLFwiPVwiOnMoXCI9XCIpfX0se1wiLi4vLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHNcIjo2NzQsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDkyNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uKFwiY29udG91cnMuc3RhcnRcIiksYT1uKFwiY29udG91cnMuZW5kXCIpLG89ITE9PT1pfHwhMT09PWEscz1yKFwiY29udG91cnMuc2l6ZVwiKTshKG8/ZS5hdXRvY29udG91cj0hMDpyKFwiYXV0b2NvbnRvdXJcIiwhMSkpJiZzfHxyKFwibmNvbnRvdXJzXCIpfX0se31dLDkyNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIik7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbi5leHRlbmRGbGF0KHt9LHQse2VkZ2VwYXRoczpuLmV4dGVuZERlZXAoW10sdC5lZGdlcGF0aHMpLHBhdGhzOm4uZXh0ZW5kRGVlcChbXSx0LnBhdGhzKX0pfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGEsbyxzPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJldmVyc2UoKX0sbD1mdW5jdGlvbih0KXtyZXR1cm4gdH07c3dpdGNoKGUpe2Nhc2VcIj1cIjpjYXNlXCI8XCI6cmV0dXJuIHQ7Y2FzZVwiPlwiOmZvcigxIT09dC5sZW5ndGgmJm4ud2FybihcIkNvbnRvdXIgZGF0YSBpbnZhbGlkIGZvciB0aGUgc3BlY2lmaWVkIGluZXF1YWxpdHkgb3BlcmF0aW9uLlwiKSxhPXRbMF0scj0wO3I8YS5lZGdlcGF0aHMubGVuZ3RoO3IrKylhLmVkZ2VwYXRoc1tyXT1zKGEuZWRnZXBhdGhzW3JdKTtmb3Iocj0wO3I8YS5wYXRocy5sZW5ndGg7cisrKWEucGF0aHNbcl09cyhhLnBhdGhzW3JdKTtyZXR1cm4gdDtjYXNlXCJdW1wiOnZhciBjPXM7cz1sLGw9YztjYXNlXCJbXVwiOmZvcigyIT09dC5sZW5ndGgmJm4ud2FybihcIkNvbnRvdXIgZGF0YSBpbnZhbGlkIGZvciB0aGUgc3BlY2lmaWVkIGluZXF1YWxpdHkgcmFuZ2Ugb3BlcmF0aW9uLlwiKSxhPWkodFswXSksbz1pKHRbMV0pLHI9MDtyPGEuZWRnZXBhdGhzLmxlbmd0aDtyKyspYS5lZGdlcGF0aHNbcl09cyhhLmVkZ2VwYXRoc1tyXSk7Zm9yKHI9MDtyPGEucGF0aHMubGVuZ3RoO3IrKylhLnBhdGhzW3JdPXMoYS5wYXRoc1tyXSk7Zm9yKDtvLmVkZ2VwYXRocy5sZW5ndGg7KWEuZWRnZXBhdGhzLnB1c2gobChvLmVkZ2VwYXRocy5zaGlmdCgpKSk7Zm9yKDtvLnBhdGhzLmxlbmd0aDspYS5wYXRocy5wdXNoKGwoby5wYXRocy5zaGlmdCgpKSk7cmV0dXJuW2FdfX19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDkyODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHNcIiksYT10KFwiLi9jb25zdHJhaW50X2RlZmF1bHRzXCIpLG89dChcIi4vY29udG91cnNfZGVmYXVsdHNcIikscz10KFwiLi9zdHlsZV9kZWZhdWx0c1wiKSxsPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwscixpKX1pZihpKHQsZSx1LGMpKXt1KFwidGV4dFwiKSx1KFwiaG92ZXJ0ZXh0XCIpLHUoXCJob3ZlcnRlbXBsYXRlXCIpO3ZhciBoPVwiY29uc3RyYWludFwiPT09dShcImNvbnRvdXJzLnR5cGVcIik7dShcImNvbm5lY3RnYXBzXCIsbi5pc0FycmF5MUQoZS56KSksaD9hKHQsZSx1LGMscik6KG8odCxlLHUsZnVuY3Rpb24ocil7cmV0dXJuIG4uY29lcmNlMih0LGUsbCxyKX0pLHModCxlLHUsYykpfWVsc2UgZS52aXNpYmxlPSExfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHNcIjo5NjIsXCIuL2F0dHJpYnV0ZXNcIjo5MTksXCIuL2NvbnN0cmFpbnRfZGVmYXVsdHNcIjo5MjQsXCIuL2NvbnRvdXJzX2RlZmF1bHRzXCI6OTI2LFwiLi9zdHlsZV9kZWZhdWx0c1wiOjk0MH1dLDkyOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9jb25zdHJhaW50X21hcHBpbmdcIiksYT10KFwiLi9lbmRfcGx1c1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbz1cImNvbnN0cmFpbnRcIj09PXQudHlwZT9pW3QuX29wZXJhdGlvbl0odC52YWx1ZSk6dCxzPW8uc2l6ZSxsPVtdLGM9YShvKSx1PXIudHJhY2UuX2NhcnBldFRyYWNlLGg9dT97eGF4aXM6dS5hYXhpcyx5YXhpczp1LmJheGlzLHg6ci5hLHk6ci5ifTp7eGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLHg6ci54LHk6ci55fSxmPW8uc3RhcnQ7ZjxjO2YrPXMpaWYobC5wdXNoKG4uZXh0ZW5kRmxhdCh7bGV2ZWw6Zixjcm9zc2luZ3M6e30sc3RhcnRzOltdLGVkZ2VwYXRoczpbXSxwYXRoczpbXSx6OnIueixzbW9vdGhpbmc6ci50cmFjZS5saW5lLnNtb290aGluZ30saCkpLGwubGVuZ3RoPjFlMyl7bi53YXJuKFwiVG9vIG1hbnkgY29udG91cnMsIGNsaXBwaW5nIGF0IDEwMDBcIix0KTticmVha31yZXR1cm4gbH19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4vY29uc3RyYWludF9tYXBwaW5nXCI6OTI1LFwiLi9lbmRfcGx1c1wiOjkzMH1dLDkzMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdC5lbmQrdC5zaXplLzFlNn19LHt9XSw5MzE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vY29uc3RhbnRzXCIpO2Z1bmN0aW9uIGEodCxlLHIsbil7cmV0dXJuIE1hdGguYWJzKHRbMF0tZVswXSk8ciYmTWF0aC5hYnModFsxXS1lWzFdKTxufWZ1bmN0aW9uIG8odCxlLHIsbyxsKXt2YXIgYyx1PWUuam9pbihcIixcIiksaD11LGY9dC5jcm9zc2luZ3NbaF0scD1mdW5jdGlvbih0LGUscil7dmFyIG49MCxhPTA7dD4yMCYmZT8yMDg9PT10fHwxMTE0PT09dD9uPTA9PT1yWzBdPzE6LTE6YT0wPT09clsxXT8xOi0xOi0xIT09aS5CT1RUT01TVEFSVC5pbmRleE9mKHQpP2E9MTotMSE9PWkuTEVGVFNUQVJULmluZGV4T2YodCk/bj0xOi0xIT09aS5UT1BTVEFSVC5pbmRleE9mKHQpP2E9LTE6bj0tMTtyZXR1cm5bbixhXX0oZixyLGUpLGQ9W3ModCxlLFstcFswXSwtcFsxXV0pXSxnPXAuam9pbihcIixcIiksdj10LnoubGVuZ3RoLG09dC56WzBdLmxlbmd0aDtmb3IoYz0wO2M8MWU0O2MrKyl7aWYoZj4yMD8oZj1pLkNIT09TRVNBRERMRVtmXVsocFswXXx8cFsxXSk8MD8wOjFdLHQuY3Jvc3NpbmdzW2hdPWkuU0FERExFUkVNQUlOREVSW2ZdKTpkZWxldGUgdC5jcm9zc2luZ3NbaF0sIShwPWkuTkVXREVMVEFbZl0pKXtuLmxvZyhcIkZvdW5kIGJhZCBtYXJjaGluZyBpbmRleDpcIixmLGUsdC5sZXZlbCk7YnJlYWt9ZC5wdXNoKHModCxlLHApKSxlWzBdKz1wWzBdLGVbMV0rPXBbMV0sYShkW2QubGVuZ3RoLTFdLGRbZC5sZW5ndGgtMl0sbyxsKSYmZC5wb3AoKSxoPWUuam9pbihcIixcIik7dmFyIHk9cFswXSYmKGVbMF08MHx8ZVswXT5tLTIpfHxwWzFdJiYoZVsxXTwwfHxlWzFdPnYtMik7aWYoaD09PXUmJnAuam9pbihcIixcIik9PT1nfHxyJiZ5KWJyZWFrO2Y9dC5jcm9zc2luZ3NbaF19MWU0PT09YyYmbi5sb2coXCJJbmZpbml0ZSBsb29wIGluIGNvbnRvdXI/XCIpO3ZhciB4LGIsXyx3LGssQSxULE0sUyxFLEMsTCx6LE8sSSxEPWEoZFswXSxkW2QubGVuZ3RoLTFdLG8sbCksUD0wLFI9LjIqdC5zbW9vdGhpbmcsRj1bXSxCPTA7Zm9yKGM9MTtjPGQubGVuZ3RoO2MrKylMPWRbY10sej1kW2MtMV0sdm9pZCAwLHZvaWQgMCxPPUxbMl0telsyXSxJPUxbM10telszXSxQKz1UPU1hdGguc3FydChPKk8rSSpJKSxGLnB1c2goVCk7dmFyIE49UC9GLmxlbmd0aCpSO2Z1bmN0aW9uIGoodCl7cmV0dXJuIGRbdCVkLmxlbmd0aF19Zm9yKGM9ZC5sZW5ndGgtMjtjPj1CO2MtLSlpZigoeD1GW2NdKTxOKXtmb3IoXz0wLGI9Yy0xO2I+PUImJngrRltiXTxOO2ItLSl4Kz1GW2JdO2lmKEQmJmM9PT1kLmxlbmd0aC0yKWZvcihfPTA7XzxiJiZ4K0ZbX108TjtfKyspeCs9RltfXTtrPWMtYitfKzEsQT1NYXRoLmZsb29yKChjK2IrXysyKS8yKSx3PUR8fGMhPT1kLmxlbmd0aC0yP0R8fC0xIT09Yj9rJTI/aihBKTpbKGooQSlbMF0raihBKzEpWzBdKS8yLChqKEEpWzFdK2ooQSsxKVsxXSkvMl06ZFswXTpkW2QubGVuZ3RoLTFdLGQuc3BsaWNlKGIrMSxjLWIrMSx3KSxjPWIrMSxfJiYoQj1fKSxEJiYoYz09PWQubGVuZ3RoLTI/ZFtfXT1kW2QubGVuZ3RoLTFdOjA9PT1jJiYoZFtkLmxlbmd0aC0xXT1kWzBdKSl9Zm9yKGQuc3BsaWNlKDAsQiksYz0wO2M8ZC5sZW5ndGg7YysrKWRbY10ubGVuZ3RoPTI7aWYoIShkLmxlbmd0aDwyKSlpZihEKWQucG9wKCksdC5wYXRocy5wdXNoKGQpO2Vsc2V7cnx8bi5sb2coXCJVbmNsb3NlZCBpbnRlcmlvciBjb250b3VyP1wiLHQubGV2ZWwsdSxkLmpvaW4oXCJMXCIpKTt2YXIgVj0hMTtmb3IoTT0wO008dC5lZGdlcGF0aHMubGVuZ3RoO00rKylpZihFPXQuZWRnZXBhdGhzW01dLCFWJiZhKEVbMF0sZFtkLmxlbmd0aC0xXSxvLGwpKXtkLnBvcCgpLFY9ITA7dmFyIFU9ITE7Zm9yKFM9MDtTPHQuZWRnZXBhdGhzLmxlbmd0aDtTKyspaWYoYSgoQz10LmVkZ2VwYXRoc1tTXSlbQy5sZW5ndGgtMV0sZFswXSxvLGwpKXtVPSEwLGQuc2hpZnQoKSx0LmVkZ2VwYXRocy5zcGxpY2UoTSwxKSxTPT09TT90LnBhdGhzLnB1c2goZC5jb25jYXQoQykpOihTPk0mJlMtLSx0LmVkZ2VwYXRoc1tTXT1DLmNvbmNhdChkLEUpKTticmVha31VfHwodC5lZGdlcGF0aHNbTV09ZC5jb25jYXQoRSkpfWZvcihNPTA7TTx0LmVkZ2VwYXRocy5sZW5ndGgmJiFWO00rKylhKChFPXQuZWRnZXBhdGhzW01dKVtFLmxlbmd0aC0xXSxkWzBdLG8sbCkmJihkLnNoaWZ0KCksdC5lZGdlcGF0aHNbTV09RS5jb25jYXQoZCksVj0hMCk7Vnx8dC5lZGdlcGF0aHMucHVzaChkKX19ZnVuY3Rpb24gcyh0LGUscil7dmFyIG49ZVswXStNYXRoLm1heChyWzBdLDApLGk9ZVsxXStNYXRoLm1heChyWzFdLDApLGE9dC56W2ldW25dLG89dC54YXhpcyxzPXQueWF4aXM7aWYoclsxXSl7dmFyIGw9KHQubGV2ZWwtYSkvKHQueltpXVtuKzFdLWEpO3JldHVybltvLmMycCgoMS1sKSp0Lnhbbl0rbCp0LnhbbisxXSwhMCkscy5jMnAodC55W2ldLCEwKSxuK2wsaV19dmFyIGM9KHQubGV2ZWwtYSkvKHQueltpKzFdW25dLWEpO3JldHVybltvLmMycCh0Lnhbbl0sITApLHMuYzJwKCgxLWMpKnQueVtpXStjKnQueVtpKzFdLCEwKSxuLGkrY119ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLHMsbDtmb3IoZT1lfHwuMDEscj1yfHwuMDEsYT0wO2E8dC5sZW5ndGg7YSsrKXtmb3Iocz10W2FdLGw9MDtsPHMuc3RhcnRzLmxlbmd0aDtsKyspbyhzLHMuc3RhcnRzW2xdLFwiZWRnZVwiLGUscik7Zm9yKGk9MDtPYmplY3Qua2V5cyhzLmNyb3NzaW5ncykubGVuZ3RoJiZpPDFlNDspaSsrLG8ocyxPYmplY3Qua2V5cyhzLmNyb3NzaW5ncylbMF0uc3BsaXQoXCIsXCIpLm1hcChOdW1iZXIpLHZvaWQgMCxlLHIpOzFlND09PWkmJm4ubG9nKFwiSW5maW5pdGUgbG9vcCBpbiBjb250b3VyP1wiKX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuL2NvbnN0YW50c1wiOjkyM31dLDkzMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGk9dChcIi4uL2hlYXRtYXAvaG92ZXJcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyl7dmFyIHM9aSh0LGUscixhLG8sITApO3JldHVybiBzJiZzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC50cmFjZTtcImNvbnN0cmFpbnRcIj09PWUuY29udG91cnMudHlwZSYmKGUuZmlsbGNvbG9yJiZuLm9wYWNpdHkoZS5maWxsY29sb3IpP3QuY29sb3I9bi5hZGRPcGFjaXR5KGUuZmlsbGNvbG9yLDEpOmUuY29udG91cnMuc2hvd2xpbmVzJiZuLm9wYWNpdHkoZS5saW5lLmNvbG9yKSYmKHQuY29sb3I9bi5hZGRPcGFjaXR5KGUubGluZS5jb2xvciwxKSkpfSksc319LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi9oZWF0bWFwL2hvdmVyXCI6OTU1fV0sOTMzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLnBsb3Q9dChcIi4vcGxvdFwiKS5wbG90LG4uc3R5bGU9dChcIi4vc3R5bGVcIiksbi5jb2xvcmJhcj10KFwiLi9jb2xvcmJhclwiKSxuLmhvdmVyUG9pbnRzPXQoXCIuL2hvdmVyXCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwiY29udG91clwiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiKSxuLmNhdGVnb3JpZXM9W1wiY2FydGVzaWFuXCIsXCJzdmdcIixcIjJkTWFwXCIsXCJjb250b3VyXCIsXCJzaG93TGVnZW5kXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi9hdHRyaWJ1dGVzXCI6OTE5LFwiLi9jYWxjXCI6OTIwLFwiLi9jb2xvcmJhclwiOjkyMixcIi4vZGVmYXVsdHNcIjo5MjgsXCIuL2hvdmVyXCI6OTMyLFwiLi9wbG90XCI6OTM3LFwiLi9zdHlsZVwiOjkzOX1dLDkzNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe2lmKGl8fChpPXt9KSx0KFwiY29udG91cnMuc2hvd2xhYmVsc1wiKSl7dmFyIGE9ZS5mb250O24uY29lcmNlRm9udCh0LFwiY29udG91cnMubGFiZWxmb250XCIse2ZhbWlseTphLmZhbWlseSxzaXplOmEuc2l6ZSxjb2xvcjpyfSksdChcImNvbnRvdXJzLmxhYmVsZm9ybWF0XCIpfSExIT09aS5oYXNIb3ZlciYmdChcInpob3ZlcmZvcm1hdFwiKX19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDkzNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGVcIiksYT10KFwiLi9lbmRfcGx1c1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5jb250b3VycyxyPWUuc3RhcnQsbz1hKGUpLHM9ZS5zaXplfHwxLGw9TWF0aC5mbG9vcigoby1yKS9zKSsxLGM9XCJsaW5lc1wiPT09ZS5jb2xvcmluZz8wOjE7aXNGaW5pdGUocyl8fChzPTEsbD0xKTt2YXIgdSxoLGY9dC5yZXZlcnNlc2NhbGU/aS5mbGlwU2NhbGUodC5jb2xvcnNjYWxlKTp0LmNvbG9yc2NhbGUscD1mLmxlbmd0aCxkPW5ldyBBcnJheShwKSxnPW5ldyBBcnJheShwKTtpZihcImhlYXRtYXBcIj09PWUuY29sb3Jpbmcpe2Zvcih0LnphdXRvJiYhMT09PXQuYXV0b2NvbnRvdXImJih0LnptaW49ci1zLzIsdC56bWF4PXQuem1pbitsKnMpLGg9MDtoPHA7aCsrKXU9ZltoXSxkW2hdPXVbMF0qKHQuem1heC10LnptaW4pK3Quem1pbixnW2hdPXVbMV07dmFyIHY9bi5leHRlbnQoW3Quem1pbix0LnptYXgsZS5zdGFydCxlLnN0YXJ0K3MqKGwtMSldKSxtPXZbdC56bWluPHQuem1heD8wOjFdLHk9dlt0LnptaW48dC56bWF4PzE6MF07bSE9PXQuem1pbiYmKGQuc3BsaWNlKDAsMCxtKSxnLnNwbGljZSgwLDAsUmFuZ2VbMF0pKSx5IT09dC56bWF4JiYoZC5wdXNoKHkpLGcucHVzaChnW2cubGVuZ3RoLTFdKSl9ZWxzZSBmb3IoaD0wO2g8cDtoKyspdT1mW2hdLGRbaF09KHVbMF0qKGwrYy0xKS1jLzIpKnMrcixnW2hdPXVbMV07cmV0dXJuIGkubWFrZUNvbG9yU2NhbGVGdW5jKHtkb21haW46ZCxyYW5nZTpnfSx7bm9OdW1lcmljQ2hlY2s6ITB9KX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZVwiOjU5MCxcIi4vZW5kX3BsdXNcIjo5MzAsZDM6MTU1fV0sOTM2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4vY29uc3RhbnRzXCIpO2Z1bmN0aW9uIGkodCxlKXt2YXIgcj0oZVswXVswXT50PzA6MSkrKGVbMF1bMV0+dD8wOjIpKyhlWzFdWzFdPnQ/MDo0KSsoZVsxXVswXT50PzA6OCk7cmV0dXJuIDU9PT1yfHwxMD09PXI/dD4oZVswXVswXStlWzBdWzFdK2VbMV1bMF0rZVsxXVsxXSkvND81PT09cj83MTM6MTExNDo1PT09cj8xMDQ6MjA4OjE1PT09cj8wOnJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsYSxvLHMsbCxjLHUsaCxmPXRbMF0ueixwPWYubGVuZ3RoLGQ9ZlswXS5sZW5ndGgsZz0yPT09cHx8Mj09PWQ7Zm9yKHI9MDtyPHAtMTtyKyspZm9yKG89W10sMD09PXImJihvPW8uY29uY2F0KG4uQk9UVE9NU1RBUlQpKSxyPT09cC0yJiYobz1vLmNvbmNhdChuLlRPUFNUQVJUKSksZT0wO2U8ZC0xO2UrKylmb3IoYT1vLnNsaWNlKCksMD09PWUmJihhPWEuY29uY2F0KG4uTEVGVFNUQVJUKSksZT09PWQtMiYmKGE9YS5jb25jYXQobi5SSUdIVFNUQVJUKSkscz1lK1wiLFwiK3IsbD1bW2Zbcl1bZV0sZltyXVtlKzFdXSxbZltyKzFdW2VdLGZbcisxXVtlKzFdXV0saD0wO2g8dC5sZW5ndGg7aCsrKShjPWkoKHU9dFtoXSkubGV2ZWwsbCkpJiYodS5jcm9zc2luZ3Nbc109YywtMSE9PWEuaW5kZXhPZihjKSYmKHUuc3RhcnRzLnB1c2goW2Uscl0pLGcmJi0xIT09YS5pbmRleE9mKGMsYS5pbmRleE9mKGMpKzEpJiZ1LnN0YXJ0cy5wdXNoKFtlLHJdKSkpfX0se1wiLi9jb25zdGFudHNcIjo5MjN9XSw5Mzc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxvPXQoXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIikscz10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksbD10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3NldF9jb252ZXJ0XCIpLGM9dChcIi4uL2hlYXRtYXAvcGxvdFwiKSx1PXQoXCIuL21ha2VfY3Jvc3NpbmdzXCIpLGg9dChcIi4vZmluZF9hbGxfcGF0aHNcIiksZj10KFwiLi9lbXB0eV9wYXRoaW5mb1wiKSxwPXQoXCIuL2NvbnZlcnRfdG9fY29uc3RyYWludHNcIiksZD10KFwiLi9jbG9zZV9ib3VuZGFyaWVzXCIpLGc9dChcIi4vY29uc3RhbnRzXCIpLHY9Zy5MQUJFTE9QVElNSVpFUjtmdW5jdGlvbiBtKHQsZSl7dmFyIHIsbixvLHMsbCxjLHUsaD1mdW5jdGlvbih0LGUpe3ZhciByPXQucHJlZml4Qm91bmRhcnk7aWYodm9pZCAwPT09cil7dmFyIG49TWF0aC5taW4odC56WzBdWzBdLHQuelswXVsxXSk7cj0hdC5lZGdlcGF0aHMubGVuZ3RoJiZuPnQubGV2ZWx9cmV0dXJuIHI/XCJNXCIrZS5qb2luKFwiTFwiKStcIlpcIjpcIlwifSh0LGUpLGY9MCxwPXQuZWRnZXBhdGhzLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBlfSksZD0hMDtmdW5jdGlvbiBnKHQpe3JldHVybiBNYXRoLmFicyh0WzFdLWVbMl1bMV0pPC4wMX1mdW5jdGlvbiB2KHQpe3JldHVybiBNYXRoLmFicyh0WzBdLWVbMF1bMF0pPC4wMX1mdW5jdGlvbiBtKHQpe3JldHVybiBNYXRoLmFicyh0WzBdLWVbMl1bMF0pPC4wMX1mb3IoO3AubGVuZ3RoOyl7Zm9yKGM9YS5zbW9vdGhvcGVuKHQuZWRnZXBhdGhzW2ZdLHQuc21vb3RoaW5nKSxoKz1kP2M6Yy5yZXBsYWNlKC9eTS8sXCJMXCIpLHAuc3BsaWNlKHAuaW5kZXhPZihmKSwxKSxyPXQuZWRnZXBhdGhzW2ZdW3QuZWRnZXBhdGhzW2ZdLmxlbmd0aC0xXSxzPS0xLG89MDtvPDQ7bysrKXtpZighcil7aS5sb2coXCJNaXNzaW5nIGVuZD9cIixmLHQpO2JyZWFrfWZvcih1PXIsTWF0aC5hYnModVsxXS1lWzBdWzFdKTwuMDEmJiFtKHIpP249ZVsxXTp2KHIpP249ZVswXTpnKHIpP249ZVszXTptKHIpJiYobj1lWzJdKSxsPTA7bDx0LmVkZ2VwYXRocy5sZW5ndGg7bCsrKXt2YXIgeT10LmVkZ2VwYXRoc1tsXVswXTtNYXRoLmFicyhyWzBdLW5bMF0pPC4wMT9NYXRoLmFicyhyWzBdLXlbMF0pPC4wMSYmKHlbMV0tclsxXSkqKG5bMV0teVsxXSk+PTAmJihuPXkscz1sKTpNYXRoLmFicyhyWzFdLW5bMV0pPC4wMT9NYXRoLmFicyhyWzFdLXlbMV0pPC4wMSYmKHlbMF0tclswXSkqKG5bMF0teVswXSk+PTAmJihuPXkscz1sKTppLmxvZyhcImVuZHB0IHRvIG5ld2VuZHB0IGlzIG5vdCB2ZXJ0LiBvciBob3J6LlwiLHIsbix5KX1pZihyPW4scz49MClicmVhaztoKz1cIkxcIitufWlmKHM9PT10LmVkZ2VwYXRocy5sZW5ndGgpe2kubG9nKFwidW5jbG9zZWQgcGVyaW1ldGVyIHBhdGhcIik7YnJlYWt9Zj1zLChkPS0xPT09cC5pbmRleE9mKGYpKSYmKGY9cFswXSxoKz1cIlpcIil9Zm9yKGY9MDtmPHQucGF0aHMubGVuZ3RoO2YrKyloKz1hLnNtb290aGNsb3NlZCh0LnBhdGhzW2ZdLHQuc21vb3RoaW5nKTtyZXR1cm4gaH1mdW5jdGlvbiB5KHQsZSxyLG4pe3ZhciBhPWUud2lkdGgvMixvPWUuaGVpZ2h0LzIscz10LngsbD10LnksYz10LnRoZXRhLHU9TWF0aC5jb3MoYykqYSxoPU1hdGguc2luKGMpKmEsZj0ocz5uLmNlbnRlcj9uLnJpZ2h0LXM6cy1uLmxlZnQpLyh1K01hdGguYWJzKE1hdGguc2luKGMpKm8pKSxwPShsPm4ubWlkZGxlP24uYm90dG9tLWw6bC1uLnRvcCkvKE1hdGguYWJzKGgpK01hdGguY29zKGMpKm8pO2lmKGY8MXx8cDwxKXJldHVybiAxLzA7dmFyIGQ9di5FREdFQ09TVCooMS8oZi0xKSsxLyhwLTEpKTtkKz12LkFOR0xFQ09TVCpjKmM7Zm9yKHZhciBnPXMtdSxtPWwtaCx5PXMrdSx4PWwraCxiPTA7YjxyLmxlbmd0aDtiKyspe3ZhciBfPXJbYl0sdz1NYXRoLmNvcyhfLnRoZXRhKSpfLndpZHRoLzIsaz1NYXRoLnNpbihfLnRoZXRhKSpfLndpZHRoLzIsQT0yKmkuc2VnbWVudERpc3RhbmNlKGcsbSx5LHgsXy54LXcsXy55LWssXy54K3csXy55K2spLyhlLmhlaWdodCtfLmhlaWdodCksVD1fLmxldmVsPT09ZS5sZXZlbCxNPVQ/di5TQU1FTEVWRUxESVNUQU5DRToxO2lmKEE8PU0pcmV0dXJuIDEvMDtkKz12Lk5FSUdIQk9SQ09TVCooVD92LlNBTUVMRVZFTEZBQ1RPUjoxKS8oQS1NKX1yZXR1cm4gZH1yLnBsb3Q9ZnVuY3Rpb24odCxlLG8scyl7dmFyIGw9ZS54YXhpcyx2PWUueWF4aXM7aS5tYWtlVHJhY2VHcm91cHMocyxvLFwiY29udG91clwiKS5lYWNoKGZ1bmN0aW9uKG8pe3ZhciBzPW4uc2VsZWN0KHRoaXMpLHk9b1swXSx4PXkudHJhY2UsYj15LngsXz15Lnksdz14LmNvbnRvdXJzLGs9Zih3LGUseSksQT1pLmVuc3VyZVNpbmdsZShzLFwiZ1wiLFwiaGVhdG1hcGNvbG9yaW5nXCIpLFQ9W107XCJoZWF0bWFwXCI9PT13LmNvbG9yaW5nJiYoeC56YXV0byYmITE9PT14LmF1dG9jb250b3VyJiYoeC5faW5wdXQuem1pbj14LnptaW49dy5zdGFydC13LnNpemUvMix4Ll9pbnB1dC56bWF4PXguem1heD14LnptaW4ray5sZW5ndGgqdy5zaXplKSxUPVtvXSksYyh0LGUsVCxBKSx1KGspLGgoayk7dmFyIE09bC5jMnAoYlswXSwhMCksUz1sLmMycChiW2IubGVuZ3RoLTFdLCEwKSxFPXYuYzJwKF9bMF0sITApLEM9di5jMnAoX1tfLmxlbmd0aC0xXSwhMCksTD1bW00sQ10sW1MsQ10sW1MsRV0sW00sRV1dLHo9aztcImNvbnN0cmFpbnRcIj09PXcudHlwZSYmKHo9cChrLHcuX29wZXJhdGlvbiksZCh6LHcuX29wZXJhdGlvbixMLHgpKSxmdW5jdGlvbih0LGUscil7dmFyIG49aS5lbnN1cmVTaW5nbGUodCxcImdcIixcImNvbnRvdXJiZ1wiKS5zZWxlY3RBbGwoXCJwYXRoXCIpLmRhdGEoXCJmaWxsXCI9PT1yLmNvbG9yaW5nP1swXTpbXSk7bi5lbnRlcigpLmFwcGVuZChcInBhdGhcIiksbi5leGl0KCkucmVtb3ZlKCksbi5hdHRyKFwiZFwiLFwiTVwiK2Uuam9pbihcIkxcIikrXCJaXCIpLnN0eWxlKFwic3Ryb2tlXCIsXCJub25lXCIpfShzLEwsdyksZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89aS5lbnN1cmVTaW5nbGUodCxcImdcIixcImNvbnRvdXJmaWxsXCIpLnNlbGVjdEFsbChcInBhdGhcIikuZGF0YShcImZpbGxcIj09PWEuY29sb3Jpbmd8fFwiY29uc3RyYWludFwiPT09YS50eXBlJiZcIj1cIiE9PWEuX29wZXJhdGlvbj9lOltdKTtvLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKSxvLmV4aXQoKS5yZW1vdmUoKSxvLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9bSh0LHIpO2U/bi5zZWxlY3QodGhpcykuYXR0cihcImRcIixlKS5zdHlsZShcInN0cm9rZVwiLFwibm9uZVwiKTpuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKX0pfShzLHosTCx3KSxmdW5jdGlvbih0LGUsbyxzLGwsYyl7dmFyIHU9aS5lbnN1cmVTaW5nbGUodCxcImdcIixcImNvbnRvdXJsaW5lc1wiKSxoPSExIT09bC5zaG93bGluZXMsZj1sLnNob3dsYWJlbHMscD1oJiZmLGQ9ci5jcmVhdGVMaW5lcyh1LGh8fGYsZSksdj1yLmNyZWF0ZUxpbmVDbGlwKHUscCxvLHMudHJhY2UudWlkKSxtPXQuc2VsZWN0QWxsKFwiZy5jb250b3VybGFiZWxzXCIpLmRhdGEoZj9bMF06W10pO2lmKG0uZXhpdCgpLnJlbW92ZSgpLG0uZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJjb250b3VybGFiZWxzXCIsITApLGYpe3ZhciB5PVtdLHg9W107aS5jbGVhckxvY2F0aW9uQ2FjaGUoKTt2YXIgYj1yLmxhYmVsRm9ybWF0dGVyKGwscy50LmNiLG8uX2Z1bGxMYXlvdXQpLF89YS50ZXN0ZXIuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwiZGF0YS1ub3RleFwiLDEpLmNhbGwoYS5mb250LGwubGFiZWxmb250KSx3PWVbMF0ueGF4aXMsaz1lWzBdLnlheGlzLEE9dy5fbGVuZ3RoLFQ9ay5fbGVuZ3RoLE09dy5yYW5nZSxTPWsucmFuZ2UsRT1NYXRoLm1heChjWzBdWzBdLDApLEM9TWF0aC5taW4oY1syXVswXSxBKSxMPU1hdGgubWF4KGNbMF1bMV0sMCksej1NYXRoLm1pbihjWzJdWzFdLFQpLE89e307TVswXTxNWzFdPyhPLmxlZnQ9RSxPLnJpZ2h0PUMpOihPLmxlZnQ9QyxPLnJpZ2h0PUUpLFNbMF08U1sxXT8oTy50b3A9TCxPLmJvdHRvbT16KTooTy50b3A9eixPLmJvdHRvbT1MKSxPLm1pZGRsZT0oTy50b3ArTy5ib3R0b20pLzIsTy5jZW50ZXI9KE8ubGVmdCtPLnJpZ2h0KS8yLHkucHVzaChbW08ubGVmdCxPLnRvcF0sW08ucmlnaHQsTy50b3BdLFtPLnJpZ2h0LE8uYm90dG9tXSxbTy5sZWZ0LE8uYm90dG9tXV0pO3ZhciBJPU1hdGguc3FydChBKkErVCpUKSxEPWcuTEFCRUxESVNUQU5DRSpJL01hdGgubWF4KDEsZS5sZW5ndGgvZy5MQUJFTElOQ1JFQVNFKTtkLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9ci5jYWxjVGV4dE9wdHModC5sZXZlbCxiLF8sbyk7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKFwicGF0aFwiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9aS5nZXRWaXNpYmxlU2VnbWVudCh0aGlzLE8sZS5oZWlnaHQvMik7aWYodCYmISh0LmxlbjwoZS53aWR0aCtlLmhlaWdodCkqZy5MQUJFTE1JTikpZm9yKHZhciBuPU1hdGgubWluKE1hdGguY2VpbCh0Lmxlbi9EKSxnLkxBQkVMTUFYKSxhPTA7YTxuO2ErKyl7dmFyIG89ci5maW5kQmVzdFRleHRMb2NhdGlvbih0aGlzLHQsZSx4LE8pO2lmKCFvKWJyZWFrO3IuYWRkTGFiZWxEYXRhKG8sZSx4LHkpfX0pfSksXy5yZW1vdmUoKSxyLmRyYXdMYWJlbHMobSx4LG8sdixwP3k6bnVsbCl9ZiYmIWgmJmQucmVtb3ZlKCl9KHMsayx0LHksdyxMKSxmdW5jdGlvbih0LGUscixuLG8pe3ZhciBzPXIuX2Z1bGxMYXlvdXQuX2NsaXBzLGw9XCJjbGlwXCIrbi50cmFjZS51aWQsYz1zLnNlbGVjdEFsbChcIiNcIitsKS5kYXRhKG4udHJhY2UuY29ubmVjdGdhcHM/W106WzBdKTtpZihjLmVudGVyKCkuYXBwZW5kKFwiY2xpcFBhdGhcIikuY2xhc3NlZChcImNvbnRvdXJjbGlwXCIsITApLmF0dHIoXCJpZFwiLGwpLGMuZXhpdCgpLnJlbW92ZSgpLCExPT09bi50cmFjZS5jb25uZWN0Z2Fwcyl7dmFyIGY9e2xldmVsOi45LGNyb3NzaW5nczp7fSxzdGFydHM6W10sZWRnZXBhdGhzOltdLHBhdGhzOltdLHhheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpcyx4Om4ueCx5Om4ueSx6OmZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10LnRyYWNlLl9lbXB0eXBvaW50cyxpPVtdLGE9dC56Lmxlbmd0aCxvPXQuelswXS5sZW5ndGgscz1bXTtmb3IoZT0wO2U8bztlKyspcy5wdXNoKDEpO2ZvcihlPTA7ZTxhO2UrKylpLnB1c2gocy5zbGljZSgpKTtmb3IoZT0wO2U8bi5sZW5ndGg7ZSsrKXI9bltlXSxpW3JbMF1dW3JbMV1dPTA7cmV0dXJuIHQuem1hc2s9aSxpfShuKSxzbW9vdGhpbmc6MH07dShbZl0pLGgoW2ZdKTt2YXIgcD1tKGYsbyksZD1pLmVuc3VyZVNpbmdsZShjLFwicGF0aFwiLFwiXCIpO2QuYXR0cihcImRcIixwKX1lbHNlIGw9bnVsbDthLnNldENsaXBVcmwodCxsLHIpfShzLGUsdCx5LEwpfSl9LHIuY3JlYXRlTGluZXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXJbMF0uc21vb3RoaW5nLGk9dC5zZWxlY3RBbGwoXCJnLmNvbnRvdXJsZXZlbFwiKS5kYXRhKGU/cjpbXSk7aWYoaS5leGl0KCkucmVtb3ZlKCksaS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcImNvbnRvdXJsZXZlbFwiLCEwKSxlKXt2YXIgbz1pLnNlbGVjdEFsbChcInBhdGgub3BlbmxpbmVcIikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5wZWRnZXBhdGhzfHx0LmVkZ2VwYXRoc30pO28uZXhpdCgpLnJlbW92ZSgpLG8uZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoXCJvcGVubGluZVwiLCEwKSxvLmF0dHIoXCJkXCIsZnVuY3Rpb24odCl7cmV0dXJuIGEuc21vb3Rob3Blbih0LG4pfSkuc3R5bGUoXCJzdHJva2UtbWl0ZXJsaW1pdFwiLDEpLnN0eWxlKFwidmVjdG9yLWVmZmVjdFwiLFwibm9uLXNjYWxpbmctc3Ryb2tlXCIpO3ZhciBzPWkuc2VsZWN0QWxsKFwicGF0aC5jbG9zZWRsaW5lXCIpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQucHBhdGhzfHx0LnBhdGhzfSk7cy5leGl0KCkucmVtb3ZlKCkscy5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChcImNsb3NlZGxpbmVcIiwhMCkscy5hdHRyKFwiZFwiLGZ1bmN0aW9uKHQpe3JldHVybiBhLnNtb290aGNsb3NlZCh0LG4pfSkuc3R5bGUoXCJzdHJva2UtbWl0ZXJsaW1pdFwiLDEpLnN0eWxlKFwidmVjdG9yLWVmZmVjdFwiLFwibm9uLXNjYWxpbmctc3Ryb2tlXCIpfXJldHVybiBpfSxyLmNyZWF0ZUxpbmVDbGlwPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWU/XCJjbGlwbGluZVwiK246bnVsbCxvPXIuX2Z1bGxMYXlvdXQuX2NsaXBzLnNlbGVjdEFsbChcIiNcIitpKS5kYXRhKGU/WzBdOltdKTtyZXR1cm4gby5leGl0KCkucmVtb3ZlKCksby5lbnRlcigpLmFwcGVuZChcImNsaXBQYXRoXCIpLmNsYXNzZWQoXCJjb250b3VybGluZWNsaXBcIiwhMCkuYXR0cihcImlkXCIsaSksYS5zZXRDbGlwVXJsKHQsaSxyKSxvfSxyLmxhYmVsRm9ybWF0dGVyPWZ1bmN0aW9uKHQsZSxyKXtpZih0LmxhYmVsZm9ybWF0KXJldHVybiByLl9kM2xvY2FsZS5udW1iZXJGb3JtYXQodC5sYWJlbGZvcm1hdCk7dmFyIG47aWYoZSluPWUuYXhpcztlbHNle2lmKG49e3R5cGU6XCJsaW5lYXJcIixfaWQ6XCJ5Y29udG91clwiLHNob3dleHBvbmVudDpcImFsbFwiLGV4cG9uZW50Zm9ybWF0OlwiQlwifSxcImNvbnN0cmFpbnRcIj09PXQudHlwZSl7dmFyIGk9dC52YWx1ZTtBcnJheS5pc0FycmF5KGkpP24ucmFuZ2U9W2lbMF0saVtpLmxlbmd0aC0xXV06bi5yYW5nZT1baSxpXX1lbHNlIG4ucmFuZ2U9W3Quc3RhcnQsdC5lbmRdLG4ubnRpY2tzPSh0LmVuZC10LnN0YXJ0KS90LnNpemU7bi5yYW5nZVswXT09PW4ucmFuZ2VbMV0mJihuLnJhbmdlWzFdKz1uLnJhbmdlWzBdfHwxKSxuLm50aWNrc3x8KG4ubnRpY2tzPTFlMyksbChuLHIpLHMucHJlcFRpY2tzKG4pLG4uX3RtaW49bnVsbCxuLl90bWF4PW51bGx9cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBzLnRpY2tUZXh0KG4sdCkudGV4dH19LHIuY2FsY1RleHRPcHRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWUodCk7ci50ZXh0KGkpLmNhbGwoby5jb252ZXJ0VG9Uc3BhbnMsbik7dmFyIHM9YS5iQm94KHIubm9kZSgpLCEwKTtyZXR1cm57dGV4dDppLHdpZHRoOnMud2lkdGgsaGVpZ2h0OnMuaGVpZ2h0LGxldmVsOnQsZHk6KHMudG9wK3MuYm90dG9tKS8yfX0sci5maW5kQmVzdFRleHRMb2NhdGlvbj1mdW5jdGlvbih0LGUscixuLGEpe3ZhciBvLHMsbCxjLHUsaD1yLndpZHRoO2UuaXNDbG9zZWQ/KHM9ZS5sZW4vdi5JTklUSUFMU0VBUkNIUE9JTlRTLG89ZS5taW4rcy8yLGw9ZS5tYXgpOihzPShlLmxlbi1oKS8odi5JTklUSUFMU0VBUkNIUE9JTlRTKzEpLG89ZS5taW4rcytoLzIsbD1lLm1heC0ocytoKS8yKTtmb3IodmFyIGY9MS8wLHA9MDtwPHYuSVRFUkFUSU9OUztwKyspe2Zvcih2YXIgZD1vO2Q8bDtkKz1zKXt2YXIgZz1pLmdldFRleHRMb2NhdGlvbih0LGUudG90YWwsZCxoKSxtPXkoZyxyLG4sYSk7bTxmJiYoZj1tLHU9ZyxjPWQpfWlmKGY+Mip2Lk1BWENPU1QpYnJlYWs7cCYmKHMvPTIpLGw9KG89Yy1zLzIpKzEuNSpzfWlmKGY8PXYuTUFYQ09TVClyZXR1cm4gdX0sci5hZGRMYWJlbERhdGE9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZS53aWR0aC8yLGE9ZS5oZWlnaHQvMixvPXQueCxzPXQueSxsPXQudGhldGEsYz1NYXRoLnNpbihsKSx1PU1hdGguY29zKGwpLGg9aSp1LGY9YSpjLHA9aSpjLGQ9LWEqdSxnPVtbby1oLWYscy1wLWRdLFtvK2gtZixzK3AtZF0sW28raCtmLHMrcCtkXSxbby1oK2Yscy1wK2RdXTtyLnB1c2goe3RleHQ6ZS50ZXh0LHg6byx5OnMsZHk6ZS5keSx0aGV0YTpsLGxldmVsOmUubGV2ZWwsd2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHR9KSxuLnB1c2goZyl9LHIuZHJhd0xhYmVscz1mdW5jdGlvbih0LGUscixhLHMpe3ZhciBsPXQuc2VsZWN0QWxsKFwidGV4dFwiKS5kYXRhKGUsZnVuY3Rpb24odCl7cmV0dXJuIHQudGV4dCtcIixcIit0LngrXCIsXCIrdC55K1wiLFwiK3QudGhldGF9KTtpZihsLmV4aXQoKS5yZW1vdmUoKSxsLmVudGVyKCkuYXBwZW5kKFwidGV4dFwiKS5hdHRyKHtcImRhdGEtbm90ZXhcIjoxLFwidGV4dC1hbmNob3JcIjpcIm1pZGRsZVwifSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10LngrTWF0aC5zaW4odC50aGV0YSkqdC5keSxpPXQueS1NYXRoLmNvcyh0LnRoZXRhKSp0LmR5O24uc2VsZWN0KHRoaXMpLnRleHQodC50ZXh0KS5hdHRyKHt4OmUseTppLHRyYW5zZm9ybTpcInJvdGF0ZShcIisxODAqdC50aGV0YS9NYXRoLlBJK1wiIFwiK2UrXCIgXCIraStcIilcIn0pLmNhbGwoby5jb252ZXJ0VG9Uc3BhbnMscil9KSxzKXtmb3IodmFyIGM9XCJcIix1PTA7dTxzLmxlbmd0aDt1KyspYys9XCJNXCIrc1t1XS5qb2luKFwiTFwiKStcIlpcIjtpLmVuc3VyZVNpbmdsZShhLFwicGF0aFwiLFwiXCIpLmF0dHIoXCJkXCIsYyl9fX0se1wiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCI6NzI1LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnRcIjo3NjcsXCIuLi9oZWF0bWFwL3Bsb3RcIjo5NTksXCIuL2Nsb3NlX2JvdW5kYXJpZXNcIjo5MjEsXCIuL2NvbnN0YW50c1wiOjkyMyxcIi4vY29udmVydF90b19jb25zdHJhaW50c1wiOjkyNyxcIi4vZW1wdHlfcGF0aGluZm9cIjo5MjksXCIuL2ZpbmRfYWxsX3BhdGhzXCI6OTMxLFwiLi9tYWtlX2Nyb3NzaW5nc1wiOjkzNixkMzoxNTV9XSw5Mzg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksaT10KFwiLi4vLi4vbGliXCIpO2Z1bmN0aW9uIGEodCxlLHIpe3ZhciBpPXt0eXBlOlwibGluZWFyXCIscmFuZ2U6W3QsZV19O3JldHVybiBuLmF1dG9UaWNrcyhpLChlLXQpLyhyfHwxNSkpLGl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY29udG91cnM7aWYodC5hdXRvY29udG91cil7dmFyIHI9dC56bWluLG89dC56bWF4O3ZvaWQgMCE9PXImJnZvaWQgMCE9PW98fChyPWkuYWdnTnVtcyhNYXRoLm1pbixudWxsLHQuX3opLG89aS5hZ2dOdW1zKE1hdGgubWF4LG51bGwsdC5feikpO3ZhciBzPWEocixvLHQubmNvbnRvdXJzKTtlLnNpemU9cy5kdGljayxlLnN0YXJ0PW4udGlja0ZpcnN0KHMpLHMucmFuZ2UucmV2ZXJzZSgpLGUuZW5kPW4udGlja0ZpcnN0KHMpLGUuc3RhcnQ9PT1yJiYoZS5zdGFydCs9ZS5zaXplKSxlLmVuZD09PW8mJihlLmVuZC09ZS5zaXplKSxlLnN0YXJ0PmUuZW5kJiYoZS5zdGFydD1lLmVuZD0oZS5zdGFydCtlLmVuZCkvMiksdC5faW5wdXQuY29udG91cnN8fCh0Ll9pbnB1dC5jb250b3Vycz17fSksaS5leHRlbmRGbGF0KHQuX2lucHV0LmNvbnRvdXJzLHtzdGFydDplLnN0YXJ0LGVuZDplLmVuZCxzaXplOmUuc2l6ZX0pLHQuX2lucHV0LmF1dG9jb250b3VyPSEwfWVsc2UgaWYoXCJjb25zdHJhaW50XCIhPT1lLnR5cGUpe3ZhciBsLGM9ZS5zdGFydCx1PWUuZW5kLGg9dC5faW5wdXQuY29udG91cnM7aWYoYz51JiYoZS5zdGFydD1oLnN0YXJ0PXUsdT1lLmVuZD1oLmVuZD1jLGM9ZS5zdGFydCksIShlLnNpemU+MCkpbD1jPT09dT8xOmEoYyx1LHQubmNvbnRvdXJzKS5kdGljayxoLnNpemU9ZS5zaXplPWx9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDl9XSw5Mzk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLGE9dChcIi4uL2hlYXRtYXAvc3R5bGVcIiksbz10KFwiLi9tYWtlX2NvbG9yX21hcFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkuc2VsZWN0QWxsKFwiZy5jb250b3VyXCIpO2Uuc3R5bGUoXCJvcGFjaXR5XCIsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pLGUuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPXRbMF0udHJhY2UsYT1yLmNvbnRvdXJzLHM9ci5saW5lLGw9YS5zaXplfHwxLGM9YS5zdGFydCx1PVwiY29uc3RyYWludFwiPT09YS50eXBlLGg9IXUmJlwibGluZXNcIj09PWEuY29sb3JpbmcsZj0hdSYmXCJmaWxsXCI9PT1hLmNvbG9yaW5nLHA9aHx8Zj9vKHIpOm51bGw7ZS5zZWxlY3RBbGwoXCJnLmNvbnRvdXJsZXZlbFwiKS5lYWNoKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbChcInBhdGhcIikuY2FsbChpLmxpbmVHcm91cFN0eWxlLHMud2lkdGgsaD9wKHQubGV2ZWwpOnMuY29sb3Iscy5kYXNoKX0pO3ZhciBkPWEubGFiZWxmb250O2lmKGUuc2VsZWN0QWxsKFwiZy5jb250b3VybGFiZWxzIHRleHRcIikuZWFjaChmdW5jdGlvbih0KXtpLmZvbnQobi5zZWxlY3QodGhpcykse2ZhbWlseTpkLmZhbWlseSxzaXplOmQuc2l6ZSxjb2xvcjpkLmNvbG9yfHwoaD9wKHQubGV2ZWwpOnMuY29sb3IpfSl9KSx1KWUuc2VsZWN0QWxsKFwiZy5jb250b3VyZmlsbCBwYXRoXCIpLnN0eWxlKFwiZmlsbFwiLHIuZmlsbGNvbG9yKTtlbHNlIGlmKGYpe3ZhciBnO2Uuc2VsZWN0QWxsKFwiZy5jb250b3VyZmlsbCBwYXRoXCIpLnN0eWxlKFwiZmlsbFwiLGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT1nJiYoZz10LmxldmVsKSxwKHQubGV2ZWwrLjUqbCl9KSx2b2lkIDA9PT1nJiYoZz1jKSxlLnNlbGVjdEFsbChcImcuY29udG91cmJnIHBhdGhcIikuc3R5bGUoXCJmaWxsXCIscChnLS41KmwpKX19KSxhKHQpfX0se1wiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vaGVhdG1hcC9zdHlsZVwiOjk2MCxcIi4vbWFrZV9jb2xvcl9tYXBcIjo5MzUsZDM6MTU1fV0sOTQwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiKSxpPXQoXCIuL2xhYmVsX2RlZmF1bHRzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8pe3ZhciBzLGw9cihcImNvbnRvdXJzLmNvbG9yaW5nXCIpLGM9XCJcIjtcImZpbGxcIj09PWwmJihzPXIoXCJjb250b3Vycy5zaG93bGluZXNcIikpLCExIT09cyYmKFwibGluZXNcIiE9PWwmJihjPXIoXCJsaW5lLmNvbG9yXCIsXCIjMDAwXCIpKSxyKFwibGluZS53aWR0aFwiLC41KSxyKFwibGluZS5kYXNoXCIpKSxcIm5vbmVcIiE9PWwmJighMCE9PXQuc2hvd2xlZ2VuZCYmKGUuc2hvd2xlZ2VuZD0hMSksZS5fZGZsdFNob3dMZWdlbmQ9ITEsbih0LGUsYSxyLHtwcmVmaXg6XCJcIixjTGV0dGVyOlwielwifSkpLHIoXCJsaW5lLnNtb290aGluZ1wiKSxpKHIsYSxjLG8pfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCI6NTg4LFwiLi9sYWJlbF9kZWZhdWx0c1wiOjkzNH1dLDk0MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vY29udG91ci9hdHRyaWJ1dGVzXCIpLGE9aS5jb250b3VycyxvPXQoXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIiksbD10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCIpLGM9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCx1PW8ubGluZTtlLmV4cG9ydHM9Yyh7Y2FycGV0Ont2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHo6bi56LGE6bi54LGEwOm4ueDAsZGE6bi5keCxiOm4ueSxiMDpuLnkwLGRiOm4uZHksdGV4dDpuLnRleHQsaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LHRyYW5zcG9zZTpuLnRyYW5zcG9zZSxhdHlwZTpuLnh0eXBlLGJ0eXBlOm4ueXR5cGUsZmlsbGNvbG9yOmkuZmlsbGNvbG9yLGF1dG9jb250b3VyOmkuYXV0b2NvbnRvdXIsbmNvbnRvdXJzOmkubmNvbnRvdXJzLGNvbnRvdXJzOnt0eXBlOmEudHlwZSxzdGFydDphLnN0YXJ0LGVuZDphLmVuZCxzaXplOmEuc2l6ZSxjb2xvcmluZzp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiZmlsbFwiLFwibGluZXNcIixcIm5vbmVcIl0sZGZsdDpcImZpbGxcIixlZGl0VHlwZTpcImNhbGNcIn0sc2hvd2xpbmVzOmEuc2hvd2xpbmVzLHNob3dsYWJlbHM6YS5zaG93bGFiZWxzLGxhYmVsZm9udDphLmxhYmVsZm9udCxsYWJlbGZvcm1hdDphLmxhYmVsZm9ybWF0LG9wZXJhdGlvbjphLm9wZXJhdGlvbix2YWx1ZTphLnZhbHVlLGVkaXRUeXBlOlwiY2FsY1wiLGltcGxpZWRFZGl0czp7YXV0b2NvbnRvdXI6ITF9fSxsaW5lOntjb2xvcjpjKHt9LHUuY29sb3Ise30pLHdpZHRoOnUud2lkdGgsZGFzaDp1LmRhc2gsc21vb3RoaW5nOmMoe30sdS5zbW9vdGhpbmcse30pLGVkaXRUeXBlOlwicGxvdFwifSx0cmFuc2Zvcm1zOnZvaWQgMH0scyhcIlwiLHtjTGV0dGVyOlwielwiLGF1dG9Db2xvckRmbHQ6ITF9KSx7Y29sb3JiYXI6bH0pfSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIjo1NzksXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi9jb250b3VyL2F0dHJpYnV0ZXNcIjo5MTksXCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXNcIjo5NDgsXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIjoxMDUyfV0sOTQyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi9oZWF0bWFwL2NvbnZlcnRfY29sdW1uX3h5elwiKSxvPXQoXCIuLi9oZWF0bWFwL2NsZWFuXzJkX2FycmF5XCIpLHM9dChcIi4uL2hlYXRtYXAvaW50ZXJwMmRcIiksbD10KFwiLi4vaGVhdG1hcC9maW5kX2VtcHRpZXNcIiksYz10KFwiLi4vaGVhdG1hcC9tYWtlX2JvdW5kX2FycmF5XCIpLHU9dChcIi4vZGVmYXVsdHNcIiksaD10KFwiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZFwiKSxmPXQoXCIuLi9jb250b3VyL3NldF9jb250b3Vyc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLl9jYXJwZXRUcmFjZT1oKHQsZSk7aWYociYmci52aXNpYmxlJiZcImxlZ2VuZG9ubHlcIiE9PXIudmlzaWJsZSl7aWYoIWUuYXx8IWUuYil7dmFyIHA9dC5kYXRhW3IuaW5kZXhdLGQ9dC5kYXRhW2UuaW5kZXhdO2QuYXx8KGQuYT1wLmEpLGQuYnx8KGQuYj1wLmIpLHUoZCxlLGUuX2RlZmF1bHRDb2xvcix0Ll9mdWxsTGF5b3V0KX12YXIgZz1mdW5jdGlvbih0LGUpe3ZhciByLHUsaCxmLHAsZCxnLHY9ZS5fY2FycGV0VHJhY2UsbT12LmFheGlzLHk9di5iYXhpczttLl9taW5EdGljaz0wLHkuX21pbkR0aWNrPTAsaS5pc0FycmF5MUQoZS56KSYmYShlLG0seSxcImFcIixcImJcIixbXCJ6XCJdKTtyPWUuX2E9ZS5fYXx8ZS5hLGY9ZS5fYj1lLl9ifHxlLmIscj1yP20ubWFrZUNhbGNkYXRhKGUsXCJfYVwiKTpbXSxmPWY/eS5tYWtlQ2FsY2RhdGEoZSxcIl9iXCIpOltdLHU9ZS5hMHx8MCxoPWUuZGF8fDEscD1lLmIwfHwwLGQ9ZS5kYnx8MSxnPWUuX3o9byhlLl96fHxlLnosZS50cmFuc3Bvc2UpLGUuX2VtcHR5cG9pbnRzPWwoZykscyhnLGUuX2VtcHR5cG9pbnRzKTt2YXIgeD1pLm1heFJvd0xlbmd0aChnKSxiPVwic2NhbGVkXCI9PT1lLnh0eXBlP1wiXCI6cixfPWMoZSxiLHUsaCx4LG0pLHc9XCJzY2FsZWRcIj09PWUueXR5cGU/XCJcIjpmLGs9YyhlLHcscCxkLGcubGVuZ3RoLHkpLEE9e2E6XyxiOmssejpnfTtcImxldmVsc1wiPT09ZS5jb250b3Vycy50eXBlJiZcIm5vbmVcIiE9PWUuY29udG91cnMuY29sb3JpbmcmJm4odCxlLHt2YWxzOmcsY29udGFpbmVyU3RyOlwiXCIsY0xldHRlcjpcInpcIn0pO3JldHVybltBXX0odCxlKTtyZXR1cm4gZihlKSxnfX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCI6NTg2LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZFwiOjg5NyxcIi4uL2NvbnRvdXIvc2V0X2NvbnRvdXJzXCI6OTM4LFwiLi4vaGVhdG1hcC9jbGVhbl8yZF9hcnJheVwiOjk1MCxcIi4uL2hlYXRtYXAvY29udmVydF9jb2x1bW5feHl6XCI6OTUyLFwiLi4vaGVhdG1hcC9maW5kX2VtcHRpZXNcIjo5NTQsXCIuLi9oZWF0bWFwL2ludGVycDJkXCI6OTU3LFwiLi4vaGVhdG1hcC9tYWtlX2JvdW5kX2FycmF5XCI6OTU4LFwiLi9kZWZhdWx0c1wiOjk0M31dLDk0MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHNcIiksYT10KFwiLi9hdHRyaWJ1dGVzXCIpLG89dChcIi4uL2NvbnRvdXIvY29uc3RyYWludF9kZWZhdWx0c1wiKSxzPXQoXCIuLi9jb250b3VyL2NvbnRvdXJzX2RlZmF1bHRzXCIpLGw9dChcIi4uL2NvbnRvdXIvc3R5bGVfZGVmYXVsdHNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX1pZih1KFwiY2FycGV0XCIpLHQuYSYmdC5iKXtpZighaSh0LGUsdSxjLFwiYVwiLFwiYlwiKSlyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO3UoXCJ0ZXh0XCIpLFwiY29uc3RyYWludFwiPT09dShcImNvbnRvdXJzLnR5cGVcIik/byh0LGUsdSxjLHIse2hhc0hvdmVyOiExfSk6KHModCxlLHUsZnVuY3Rpb24ocil7cmV0dXJuIG4uY29lcmNlMih0LGUsYSxyKX0pLGwodCxlLHUsYyx7aGFzSG92ZXI6ITF9KSl9ZWxzZSBlLl9kZWZhdWx0Q29sb3I9cixlLl9sZW5ndGg9bnVsbH19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2NvbnRvdXIvY29uc3RyYWludF9kZWZhdWx0c1wiOjkyNCxcIi4uL2NvbnRvdXIvY29udG91cnNfZGVmYXVsdHNcIjo5MjYsXCIuLi9jb250b3VyL3N0eWxlX2RlZmF1bHRzXCI6OTQwLFwiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHNcIjo5NjIsXCIuL2F0dHJpYnV0ZXNcIjo5NDF9XSw5NDQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLG4uY29sb3JiYXI9dChcIi4uL2NvbnRvdXIvY29sb3JiYXJcIiksbi5jYWxjPXQoXCIuL2NhbGNcIiksbi5wbG90PXQoXCIuL3Bsb3RcIiksbi5zdHlsZT10KFwiLi4vY29udG91ci9zdHlsZVwiKSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cImNvbnRvdXJjYXJwZXRcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIiksbi5jYXRlZ29yaWVzPVtcImNhcnRlc2lhblwiLFwic3ZnXCIsXCJjYXJwZXRcIixcImNvbnRvdXJcIixcInN5bWJvbHNcIixcInNob3dMZWdlbmRcIixcImhhc0xpbmVzXCIsXCJjYXJwZXREZXBlbmRlbnRcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIjo3NjAsXCIuLi9jb250b3VyL2NvbG9yYmFyXCI6OTIyLFwiLi4vY29udG91ci9zdHlsZVwiOjkzOSxcIi4vYXR0cmlidXRlc1wiOjk0MSxcIi4vY2FsY1wiOjk0MixcIi4vZGVmYXVsdHNcIjo5NDMsXCIuL3Bsb3RcIjo5NDd9XSw5NDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLGk9dChcIi4uL2NhcnBldC9heGlzX2FsaWduZWRfbGluZVwiKSxhPXQoXCIuLi8uLi9saWJcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyxsLGMsdSl7dmFyIGgsZixwLGQsZyx2LG0seT1cIlwiLHg9ZS5lZGdlcGF0aHMubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KSxiPSEwLF89MWUtNCpNYXRoLmFicyhyWzBdWzBdLXJbMl1bMF0pLHc9MWUtNCpNYXRoLmFicyhyWzBdWzFdLXJbMl1bMV0pO2Z1bmN0aW9uIGsodCl7cmV0dXJuIE1hdGguYWJzKHRbMV0tclswXVsxXSk8d31mdW5jdGlvbiBBKHQpe3JldHVybiBNYXRoLmFicyh0WzFdLXJbMl1bMV0pPHd9ZnVuY3Rpb24gVCh0KXtyZXR1cm4gTWF0aC5hYnModFswXS1yWzBdWzBdKTxffWZ1bmN0aW9uIE0odCl7cmV0dXJuIE1hdGguYWJzKHRbMF0tclsyXVswXSk8X31mdW5jdGlvbiBTKHQsZSl7dmFyIHIsbixhLG8saD1cIlwiO2ZvcihrKHQpJiYhTSh0KXx8QSh0KSYmIVQodCk/KG89cy5hYXhpcyxhPWkocyxsLFt0WzBdLGVbMF1dLC41Kih0WzFdK2VbMV0pKSk6KG89cy5iYXhpcyxhPWkocyxsLC41Kih0WzBdK2VbMF0pLFt0WzFdLGVbMV1dKSkscj0xO3I8YS5sZW5ndGg7cisrKWZvcihoKz1vLnNtb290aGluZz9cIkNcIjpcIkxcIixuPTA7bjxhW3JdLmxlbmd0aDtuKyspe3ZhciBmPWFbcl1bbl07aCs9W2MuYzJwKGZbMF0pLHUuYzJwKGZbMV0pXStcIiBcIn1yZXR1cm4gaH1mb3IoaD0wLGY9bnVsbDt4Lmxlbmd0aDspe3ZhciBFPWUuZWRnZXBhdGhzW2hdWzBdO2ZvcihmJiYoeSs9UyhmLEUpKSxtPW4uc21vb3Rob3BlbihlLmVkZ2VwYXRoc1toXS5tYXAobyksZS5zbW9vdGhpbmcpLHkrPWI/bTptLnJlcGxhY2UoL15NLyxcIkxcIikseC5zcGxpY2UoeC5pbmRleE9mKGgpLDEpLGY9ZS5lZGdlcGF0aHNbaF1bZS5lZGdlcGF0aHNbaF0ubGVuZ3RoLTFdLGc9LTEsZD0wO2Q8NDtkKyspe2lmKCFmKXthLmxvZyhcIk1pc3NpbmcgZW5kP1wiLGgsZSk7YnJlYWt9Zm9yKGsoZikmJiFNKGYpP3A9clsxXTpUKGYpP3A9clswXTpBKGYpP3A9clszXTpNKGYpJiYocD1yWzJdKSx2PTA7djxlLmVkZ2VwYXRocy5sZW5ndGg7disrKXt2YXIgQz1lLmVkZ2VwYXRoc1t2XVswXTtNYXRoLmFicyhmWzBdLXBbMF0pPF8/TWF0aC5hYnMoZlswXS1DWzBdKTxfJiYoQ1sxXS1mWzFdKSoocFsxXS1DWzFdKT49MCYmKHA9QyxnPXYpOk1hdGguYWJzKGZbMV0tcFsxXSk8dz9NYXRoLmFicyhmWzFdLUNbMV0pPHcmJihDWzBdLWZbMF0pKihwWzBdLUNbMF0pPj0wJiYocD1DLGc9dik6YS5sb2coXCJlbmRwdCB0byBuZXdlbmRwdCBpcyBub3QgdmVydC4gb3IgaG9yei5cIixmLHAsQyl9aWYoZz49MClicmVhazt5Kz1TKGYscCksZj1wfWlmKGc9PT1lLmVkZ2VwYXRocy5sZW5ndGgpe2EubG9nKFwidW5jbG9zZWQgcGVyaW1ldGVyIHBhdGhcIik7YnJlYWt9aD1nLChiPS0xPT09eC5pbmRleE9mKGgpKSYmKGg9eFswXSx5Kz1TKGYscCkrXCJaXCIsZj1udWxsKX1mb3IoaD0wO2g8ZS5wYXRocy5sZW5ndGg7aCsrKXkrPW4uc21vb3RoY2xvc2VkKGUucGF0aHNbaF0ubWFwKG8pLGUuc21vb3RoaW5nKTtyZXR1cm4geX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2NhcnBldC9heGlzX2FsaWduZWRfbGluZVwiOjg4MX1dLDk0NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyxsLGMsdTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXtmb3Iobz0oYT10W3JdKS5wZWRnZXBhdGhzPVtdLHM9YS5wcGF0aHM9W10sbj0wO248YS5lZGdlcGF0aHMubGVuZ3RoO24rKyl7Zm9yKHU9YS5lZGdlcGF0aHNbbl0sbD1bXSxpPTA7aTx1Lmxlbmd0aDtpKyspbFtpXT1lKHVbaV0pO28ucHVzaChsKX1mb3Iobj0wO248YS5wYXRocy5sZW5ndGg7bisrKXtmb3IodT1hLnBhdGhzW25dLGM9W10saT0wO2k8dS5sZW5ndGg7aSsrKWNbaV09ZSh1W2ldKTtzLnB1c2goYyl9fX19LHt9XSw5NDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vY2FycGV0L21hcF8xZF9hcnJheVwiKSxhPXQoXCIuLi9jYXJwZXQvbWFrZXBhdGhcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLHM9dChcIi4uLy4uL2xpYlwiKSxsPXQoXCIuLi9jb250b3VyL21ha2VfY3Jvc3NpbmdzXCIpLGM9dChcIi4uL2NvbnRvdXIvZmluZF9hbGxfcGF0aHNcIiksdT10KFwiLi4vY29udG91ci9wbG90XCIpLGg9dChcIi4uL2NvbnRvdXIvY29uc3RhbnRzXCIpLGY9dChcIi4uL2NvbnRvdXIvY29udmVydF90b19jb25zdHJhaW50c1wiKSxwPXQoXCIuL2pvaW5fYWxsX3BhdGhzXCIpLGQ9dChcIi4uL2NvbnRvdXIvZW1wdHlfcGF0aGluZm9cIiksZz10KFwiLi9tYXBfcGF0aGluZm9cIiksdj10KFwiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZFwiKSxtPXQoXCIuLi9jb250b3VyL2Nsb3NlX2JvdW5kYXJpZXNcIik7ZnVuY3Rpb24geSh0LGUscil7dmFyIG49dC5nZXRQb2ludEF0TGVuZ3RoKGUpLGk9dC5nZXRQb2ludEF0TGVuZ3RoKHIpLGE9aS54LW4ueCxvPWkueS1uLnkscz1NYXRoLnNxcnQoYSphK28qbyk7cmV0dXJuW2EvcyxvL3NdfWZ1bmN0aW9uIHgodCl7dmFyIGU9TWF0aC5zcXJ0KHRbMF0qdFswXSt0WzFdKnRbMV0pO3JldHVyblt0WzBdL2UsdFsxXS9lXX1mdW5jdGlvbiBiKHQsZSl7dmFyIHI9TWF0aC5hYnModFswXSplWzBdK3RbMV0qZVsxXSk7cmV0dXJuIE1hdGguc3FydCgxLXIqcikvcn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsXyl7dmFyIHc9ZS54YXhpcyxrPWUueWF4aXM7cy5tYWtlVHJhY2VHcm91cHMoXyxyLFwiY29udG91clwiKS5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBfPW4uc2VsZWN0KHRoaXMpLEE9clswXSxUPUEudHJhY2UsTT1ULl9jYXJwZXRUcmFjZT12KHQsVCksUz10LmNhbGNkYXRhW00uaW5kZXhdWzBdO2lmKE0udmlzaWJsZSYmXCJsZWdlbmRvbmx5XCIhPT1NLnZpc2libGUpe3ZhciBFPUEuYSxDPUEuYixMPVQuY29udG91cnMsej1kKEwsZSxBKSxPPVwiY29uc3RyYWludFwiPT09TC50eXBlLEk9TC5fb3BlcmF0aW9uLEQ9Tz9cIj1cIj09PUk/XCJsaW5lc1wiOlwiZmlsbFwiOkwuY29sb3JpbmcsUD1bW0VbMF0sQ1tDLmxlbmd0aC0xXV0sW0VbRS5sZW5ndGgtMV0sQ1tDLmxlbmd0aC0xXV0sW0VbRS5sZW5ndGgtMV0sQ1swXV0sW0VbMF0sQ1swXV1dO2woeik7dmFyIFI9MWUtOCooRVtFLmxlbmd0aC0xXS1FWzBdKSxGPTFlLTgqKENbQy5sZW5ndGgtMV0tQ1swXSk7Yyh6LFIsRik7dmFyIEIsTixqLFYsVT16O1wiY29uc3RyYWludFwiPT09TC50eXBlJiYoVT1mKHosSSksbShVLEksUCxUKSksZyh6LEcpO3ZhciBxPVtdO2ZvcihWPVMuY2xpcHNlZ21lbnRzLmxlbmd0aC0xO1Y+PTA7Vi0tKUI9Uy5jbGlwc2VnbWVudHNbVl0sTj1pKFtdLEIueCx3LmMycCksaj1pKFtdLEIueSxrLmMycCksTi5yZXZlcnNlKCksai5yZXZlcnNlKCkscS5wdXNoKGEoTixqLEIuYmljdWJpYykpO3ZhciBIPVwiTVwiK3Euam9pbihcIkxcIikrXCJaXCI7IWZ1bmN0aW9uKHQsZSxyLG4sbyxsKXt2YXIgYyx1LGgsZixwPXMuZW5zdXJlU2luZ2xlKHQsXCJnXCIsXCJjb250b3VyYmdcIikuc2VsZWN0QWxsKFwicGF0aFwiKS5kYXRhKFwiZmlsbFwiIT09bHx8bz9bXTpbMF0pO3AuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLHAuZXhpdCgpLnJlbW92ZSgpO3ZhciBkPVtdO2ZvcihmPTA7ZjxlLmxlbmd0aDtmKyspYz1lW2ZdLHU9aShbXSxjLngsci5jMnApLGg9aShbXSxjLnksbi5jMnApLGQucHVzaChhKHUsaCxjLmJpY3ViaWMpKTtwLmF0dHIoXCJkXCIsXCJNXCIrZC5qb2luKFwiTFwiKStcIlpcIikuc3R5bGUoXCJzdHJva2VcIixcIm5vbmVcIil9KF8sUy5jbGlwc2VnbWVudHMsdyxrLE8sRCksZnVuY3Rpb24odCxlLHIsaSxhLG8sbCxjLHUsaCxmKXt2YXIgZD1zLmVuc3VyZVNpbmdsZShlLFwiZ1wiLFwiY29udG91cmZpbGxcIikuc2VsZWN0QWxsKFwicGF0aFwiKS5kYXRhKFwiZmlsbFwiPT09aD9hOltdKTtkLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKSxkLmV4aXQoKS5yZW1vdmUoKSxkLmVhY2goZnVuY3Rpb24oZSl7dmFyIGE9cCh0LGUsbyxsLGMsdSxyLGkpO2UucHJlZml4Qm91bmRhcnkmJihhPWYrYSksYT9uLnNlbGVjdCh0aGlzKS5hdHRyKFwiZFwiLGEpLnN0eWxlKFwic3Ryb2tlXCIsXCJub25lXCIpOm4uc2VsZWN0KHRoaXMpLnJlbW92ZSgpfSl9KFQsXyx3LGssVSxQLEcsTSxTLEQsSCksZnVuY3Rpb24odCxlLHIsaSxhLGwsYyl7dmFyIGY9cy5lbnN1cmVTaW5nbGUodCxcImdcIixcImNvbnRvdXJsaW5lc1wiKSxwPSExIT09YS5zaG93bGluZXMsZD1hLnNob3dsYWJlbHMsZz1wJiZkLHY9dS5jcmVhdGVMaW5lcyhmLHB8fGQsZSksbT11LmNyZWF0ZUxpbmVDbGlwKGYsZyxyLGkudHJhY2UudWlkKSxfPXQuc2VsZWN0QWxsKFwiZy5jb250b3VybGFiZWxzXCIpLmRhdGEoZD9bMF06W10pO2lmKF8uZXhpdCgpLnJlbW92ZSgpLF8uZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJjb250b3VybGFiZWxzXCIsITApLGQpe3ZhciB3PWwueGF4aXMsaz1sLnlheGlzLEE9dy5fbGVuZ3RoLFQ9ay5fbGVuZ3RoLE09W1tbMCwwXSxbQSwwXSxbQSxUXSxbMCxUXV1dLFM9W107cy5jbGVhckxvY2F0aW9uQ2FjaGUoKTt2YXIgRT11LmxhYmVsRm9ybWF0dGVyKGEsaS50LmNiLHIuX2Z1bGxMYXlvdXQpLEM9by50ZXN0ZXIuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwiZGF0YS1ub3RleFwiLDEpLmNhbGwoby5mb250LGEubGFiZWxmb250KSxMPXtsZWZ0OjAscmlnaHQ6QSxjZW50ZXI6QS8yLHRvcDowLGJvdHRvbTpULG1pZGRsZTpULzJ9LHo9TWF0aC5zcXJ0KEEqQStUKlQpLE89aC5MQUJFTERJU1RBTkNFKnovTWF0aC5tYXgoMSxlLmxlbmd0aC9oLkxBQkVMSU5DUkVBU0UpO3YuZWFjaChmdW5jdGlvbih0KXt2YXIgZT11LmNhbGNUZXh0T3B0cyh0LmxldmVsLEUsQyxyKTtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoXCJwYXRoXCIpLmVhY2goZnVuY3Rpb24ocil7dmFyIG49cy5nZXRWaXNpYmxlU2VnbWVudCh0aGlzLEwsZS5oZWlnaHQvMik7aWYobiYmKGZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG8scz0wO3M8ci5wZWRnZXBhdGhzLmxlbmd0aDtzKyspZT09PXIucGVkZ2VwYXRoc1tzXSYmKG89ci5lZGdlcGF0aHNbc10pO2lmKCFvKXJldHVybjt2YXIgbD1pLmFbMF0sYz1pLmFbaS5hLmxlbmd0aC0xXSx1PWkuYlswXSxoPWkuYltpLmIubGVuZ3RoLTFdO2Z1bmN0aW9uIGYodCxlKXt2YXIgcixuPTA7cmV0dXJuKE1hdGguYWJzKHRbMF0tbCk8LjF8fE1hdGguYWJzKHRbMF0tYyk8LjEpJiYocj14KGkuZHh5ZGJfcm91Z2godFswXSx0WzFdLC4xKSksbj1NYXRoLm1heChuLGEqYihlLHIpLzIpKSwoTWF0aC5hYnModFsxXS11KTwuMXx8TWF0aC5hYnModFsxXS1oKTwuMSkmJihyPXgoaS5keHlkYV9yb3VnaCh0WzBdLHRbMV0sLjEpKSxuPU1hdGgubWF4KG4sYSpiKGUscikvMikpLG59dmFyIHA9eSh0LDAsMSksZD15KHQsbi50b3RhbCxuLnRvdGFsLTEpLGc9ZihvWzBdLHApLHY9bi50b3RhbC1mKG9bby5sZW5ndGgtMV0sZCk7bi5taW48ZyYmKG4ubWluPWcpO24ubWF4PnYmJihuLm1heD12KTtuLmxlbj1uLm1heC1uLm1pbn0odGhpcyxyLHQsbixjLGUuaGVpZ2h0KSwhKG4ubGVuPChlLndpZHRoK2UuaGVpZ2h0KSpoLkxBQkVMTUlOKSkpZm9yKHZhciBpPU1hdGgubWluKE1hdGguY2VpbChuLmxlbi9PKSxoLkxBQkVMTUFYKSxhPTA7YTxpO2ErKyl7dmFyIG89dS5maW5kQmVzdFRleHRMb2NhdGlvbih0aGlzLG4sZSxTLEwpO2lmKCFvKWJyZWFrO3UuYWRkTGFiZWxEYXRhKG8sZSxTLE0pfX0pfSksQy5yZW1vdmUoKSx1LmRyYXdMYWJlbHMoXyxTLHIsbSxnP006bnVsbCl9ZCYmIXAmJnYucmVtb3ZlKCl9KF8seix0LEEsTCxlLE0pLG8uc2V0Q2xpcFVybChfLE0uX2NsaXBQYXRoSWQsdCl9ZnVuY3Rpb24gRyh0KXt2YXIgZT1NLmFiMnh5KHRbMF0sdFsxXSwhMCk7cmV0dXJuW3cuYzJwKGVbMF0pLGsuYzJwKGVbMV0pXX19KX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2NhcnBldC9sb29rdXBfY2FycGV0aWRcIjo4OTcsXCIuLi9jYXJwZXQvbWFrZXBhdGhcIjo4OTgsXCIuLi9jYXJwZXQvbWFwXzFkX2FycmF5XCI6ODk5LFwiLi4vY29udG91ci9jbG9zZV9ib3VuZGFyaWVzXCI6OTIxLFwiLi4vY29udG91ci9jb25zdGFudHNcIjo5MjMsXCIuLi9jb250b3VyL2NvbnZlcnRfdG9fY29uc3RyYWludHNcIjo5MjcsXCIuLi9jb250b3VyL2VtcHR5X3BhdGhpbmZvXCI6OTI5LFwiLi4vY29udG91ci9maW5kX2FsbF9wYXRoc1wiOjkzMSxcIi4uL2NvbnRvdXIvbWFrZV9jcm9zc2luZ3NcIjo5MzYsXCIuLi9jb250b3VyL3Bsb3RcIjo5MzcsXCIuL2pvaW5fYWxsX3BhdGhzXCI6OTQ1LFwiLi9tYXBfcGF0aGluZm9cIjo5NDYsZDM6MTU1fV0sOTQ4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1zKHt6Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx4OnMoe30sbi54LHtpbXBsaWVkRWRpdHM6e3h0eXBlOlwiYXJyYXlcIn19KSx4MDpzKHt9LG4ueDAse2ltcGxpZWRFZGl0czp7eHR5cGU6XCJzY2FsZWRcIn19KSxkeDpzKHt9LG4uZHgse2ltcGxpZWRFZGl0czp7eHR5cGU6XCJzY2FsZWRcIn19KSx5OnMoe30sbi55LHtpbXBsaWVkRWRpdHM6e3l0eXBlOlwiYXJyYXlcIn19KSx5MDpzKHt9LG4ueTAse2ltcGxpZWRFZGl0czp7eXR5cGU6XCJzY2FsZWRcIn19KSxkeTpzKHt9LG4uZHkse2ltcGxpZWRFZGl0czp7eXR5cGU6XCJzY2FsZWRcIn19KSx0ZXh0Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxob3ZlcnRleHQ6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHRyYW5zcG9zZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwiY2FsY1wifSx4dHlwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYXJyYXlcIixcInNjYWxlZFwiXSxlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0seXR5cGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImFycmF5XCIsXCJzY2FsZWRcIl0sZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LHpzbW9vdGg6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImZhc3RcIixcImJlc3RcIiwhMV0sZGZsdDohMSxlZGl0VHlwZTpcImNhbGNcIn0sY29ubmVjdGdhcHM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMSxlZGl0VHlwZTpcImNhbGNcIn0seGdhcDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MCxtaW46MCxlZGl0VHlwZTpcInBsb3RcIn0seWdhcDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MCxtaW46MCxlZGl0VHlwZTpcInBsb3RcIn0semhvdmVyZm9ybWF0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwibm9uZVwifSxob3ZlcnRlbXBsYXRlOmkoKX0se3RyYW5zZm9ybXM6dm9pZCAwfSxhKFwiXCIse2NMZXR0ZXI6XCJ6XCIsYXV0b0NvbG9yRGZsdDohMX0pLHtjb2xvcmJhcjpvfSl9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCI6MTA1Mn1dLDk0OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksbz10KFwiLi4vaGlzdG9ncmFtMmQvY2FsY1wiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsY1wiKSxsPXQoXCIuL2NvbnZlcnRfY29sdW1uX3h5elwiKSxjPXQoXCIuL2NsZWFuXzJkX2FycmF5XCIpLHU9dChcIi4vaW50ZXJwMmRcIiksaD10KFwiLi9maW5kX2VtcHRpZXNcIiksZj10KFwiLi9tYWtlX2JvdW5kX2FycmF5XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLHAsZCxnLHYsbSx5LHgsYixfPWEuZ2V0RnJvbUlkKHQsZS54YXhpc3x8XCJ4XCIpLHc9YS5nZXRGcm9tSWQodCxlLnlheGlzfHxcInlcIiksaz1uLnRyYWNlSXMoZSxcImNvbnRvdXJcIiksQT1uLnRyYWNlSXMoZSxcImhpc3RvZ3JhbVwiKSxUPW4udHJhY2VJcyhlLFwiZ2wyZFwiKSxNPWs/XCJiZXN0XCI6ZS56c21vb3RoO2lmKF8uX21pbkR0aWNrPTAsdy5fbWluRHRpY2s9MCxBKXI9KGI9byh0LGUpKS54LHA9Yi54MCxkPWIuZHgsZz1iLnksdj1iLnkwLG09Yi5keSx5PWIuejtlbHNle3ZhciBTPWUuejtpLmlzQXJyYXkxRChTKT8obChlLF8sdyxcInhcIixcInlcIixbXCJ6XCJdKSxyPWUuX3gsZz1lLl95LFM9ZS5feik6KHI9ZS54P18ubWFrZUNhbGNkYXRhKGUsXCJ4XCIpOltdLGc9ZS55P3cubWFrZUNhbGNkYXRhKGUsXCJ5XCIpOltdKSxwPWUueDAsZD1lLmR4LHY9ZS55MCxtPWUuZHkseT1jKFMsZS50cmFuc3Bvc2UpLChrfHxlLmNvbm5lY3RnYXBzKSYmKGUuX2VtcHR5cG9pbnRzPWgoeSksdSh5LGUuX2VtcHR5cG9pbnRzKSl9ZnVuY3Rpb24gRSh0KXtNPWUuX2lucHV0LnpzbW9vdGg9ZS56c21vb3RoPSExLGkud2FybignY2Fubm90IHVzZSB6c21vb3RoOiBcImZhc3RcIjogJyt0KX1pZihcImZhc3RcIj09PU0paWYoXCJsb2dcIj09PV8udHlwZXx8XCJsb2dcIj09PXcudHlwZSlFKFwibG9nIGF4aXMgZm91bmRcIik7ZWxzZSBpZighQSl7aWYoci5sZW5ndGgpe3ZhciBDPShyW3IubGVuZ3RoLTFdLXJbMF0pLyhyLmxlbmd0aC0xKSxMPU1hdGguYWJzKEMvMTAwKTtmb3IoeD0wO3g8ci5sZW5ndGgtMTt4KyspaWYoTWF0aC5hYnMoclt4KzFdLXJbeF0tQyk+TCl7RShcInggc2NhbGUgaXMgbm90IGxpbmVhclwiKTticmVha319aWYoZy5sZW5ndGgmJlwiZmFzdFwiPT09TSl7dmFyIHo9KGdbZy5sZW5ndGgtMV0tZ1swXSkvKGcubGVuZ3RoLTEpLE89TWF0aC5hYnMoei8xMDApO2Zvcih4PTA7eDxnLmxlbmd0aC0xO3grKylpZihNYXRoLmFicyhnW3grMV0tZ1t4XS16KT5PKXtFKFwieSBzY2FsZSBpcyBub3QgbGluZWFyXCIpO2JyZWFrfX19dmFyIEk9aS5tYXhSb3dMZW5ndGgoeSksRD1cInNjYWxlZFwiPT09ZS54dHlwZT9cIlwiOnIsUD1mKGUsRCxwLGQsSSxfKSxSPVwic2NhbGVkXCI9PT1lLnl0eXBlP1wiXCI6ZyxGPWYoZSxSLHYsbSx5Lmxlbmd0aCx3KTtUfHwoZS5fZXh0cmVtZXNbXy5faWRdPWEuZmluZEV4dHJlbWVzKF8sUCksZS5fZXh0cmVtZXNbdy5faWRdPWEuZmluZEV4dHJlbWVzKHcsRikpO3ZhciBCPXt4OlAseTpGLHo6eSx0ZXh0OmUuX3RleHR8fGUudGV4dCxob3ZlcnRleHQ6ZS5faG92ZXJ0ZXh0fHxlLmhvdmVydGV4dH07aWYoRCYmRC5sZW5ndGg9PT1QLmxlbmd0aC0xJiYoQi54Q2VudGVyPUQpLFImJlIubGVuZ3RoPT09Ri5sZW5ndGgtMSYmKEIueUNlbnRlcj1SKSxBJiYoQi54UmFuZ2VzPWIueFJhbmdlcyxCLnlSYW5nZXM9Yi55UmFuZ2VzLEIucHRzPWIucHRzKSxrJiZcImNvbnN0cmFpbnRcIj09PWUuY29udG91cnMudHlwZXx8cyh0LGUse3ZhbHM6eSxjb250YWluZXJTdHI6XCJcIixjTGV0dGVyOlwielwifSksayYmZS5jb250b3VycyYmXCJoZWF0bWFwXCI9PT1lLmNvbnRvdXJzLmNvbG9yaW5nKXt2YXIgTj17dHlwZTpcImNvbnRvdXJcIj09PWUudHlwZT9cImhlYXRtYXBcIjpcImhpc3RvZ3JhbTJkXCIseGNhbGVuZGFyOmUueGNhbGVuZGFyLHljYWxlbmRhcjplLnljYWxlbmRhcn07Qi54ZmlsbD1mKE4sRCxwLGQsSSxfKSxCLnlmaWxsPWYoTixSLHYsbSx5Lmxlbmd0aCx3KX1yZXR1cm5bQl19fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsY1wiOjU4NixcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9oaXN0b2dyYW0yZC9jYWxjXCI6OTgwLFwiLi9jbGVhbl8yZF9hcnJheVwiOjk1MCxcIi4vY29udmVydF9jb2x1bW5feHl6XCI6OTUyLFwiLi9maW5kX2VtcHRpZXNcIjo5NTQsXCIuL2ludGVycDJkXCI6OTU3LFwiLi9tYWtlX2JvdW5kX2FycmF5XCI6OTU4fV0sOTUwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYSxvLHMsbDtmdW5jdGlvbiBjKHQpe2lmKG4odCkpcmV0dXJuK3R9aWYoZSl7Zm9yKHI9MCxzPTA7czx0Lmxlbmd0aDtzKyspcj1NYXRoLm1heChyLHRbc10ubGVuZ3RoKTtpZigwPT09cilyZXR1cm4hMTthPWZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aH0sbz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbcl1bZV19fWVsc2Ugcj10Lmxlbmd0aCxhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbZV0ubGVuZ3RofSxvPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtlXVtyXX07dmFyIHU9bmV3IEFycmF5KHIpO2ZvcihzPTA7czxyO3MrKylmb3IoaT1hKHQscyksdVtzXT1uZXcgQXJyYXkoaSksbD0wO2w8aTtsKyspdVtzXVtsXT1jKG8odCxzLGwpKTtyZXR1cm4gdX19LHtcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sOTUxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXttaW46XCJ6bWluXCIsbWF4Olwiem1heFwifX0se31dLDk1MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKS5CQUROVU07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyxzKXt2YXIgbCxjLHUsaCxmPXQuX2xlbmd0aCxwPWUubWFrZUNhbGNkYXRhKHQsYSksZD1yLm1ha2VDYWxjZGF0YSh0LG8pLGc9dC50ZXh0LHY9dm9pZCAwIT09ZyYmbi5pc0FycmF5MUQoZyksbT10LmhvdmVydGV4dCx5PXZvaWQgMCE9PW0mJm4uaXNBcnJheTFEKG0pLHg9bi5kaXN0aW5jdFZhbHMocCksYj14LnZhbHMsXz1uLmRpc3RpbmN0VmFscyhkKSx3PV8udmFscyxrPVtdO2ZvcihsPTA7bDxzLmxlbmd0aDtsKyspa1tsXT1uLmluaXQyZEFycmF5KHcubGVuZ3RoLGIubGVuZ3RoKTtmb3IodiYmKHU9bi5pbml0MmRBcnJheSh3Lmxlbmd0aCxiLmxlbmd0aCkpLHkmJihoPW4uaW5pdDJkQXJyYXkody5sZW5ndGgsYi5sZW5ndGgpKSxsPTA7bDxmO2wrKylpZihwW2xdIT09aSYmZFtsXSE9PWkpe3ZhciBBPW4uZmluZEJpbihwW2xdK3gubWluRGlmZi8yLGIpLFQ9bi5maW5kQmluKGRbbF0rXy5taW5EaWZmLzIsdyk7Zm9yKGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIE09dFtzW2NdXTtrW2NdW1RdW0FdPU1bbF19diYmKHVbVF1bQV09Z1tsXSkseSYmKGhbVF1bQV09bVtsXSl9Zm9yKHRbXCJfXCIrYV09Yix0W1wiX1wiK29dPXcsYz0wO2M8cy5sZW5ndGg7YysrKXRbXCJfXCIrc1tjXV09a1tjXTt2JiYodC5fdGV4dD11KSx5JiYodC5faG92ZXJ0ZXh0PWgpfX0se1wiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMX1dLDk1MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi94eXpfZGVmYXVsdHNcIiksYT10KFwiLi9zdHlsZV9kZWZhdWx0c1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIikscz10KFwiLi9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiBjKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9aSh0LGUsYyxsKT8oYyhcInRleHRcIiksYyhcImhvdmVydGV4dFwiKSxjKFwiaG92ZXJ0ZW1wbGF0ZVwiKSxhKHQsZSxjLGwpLGMoXCJjb25uZWN0Z2Fwc1wiLG4uaXNBcnJheTFEKGUueikmJiExIT09ZS56c21vb3RoKSxvKHQsZSxsLGMse3ByZWZpeDpcIlwiLGNMZXR0ZXI6XCJ6XCJ9KSk6ZS52aXNpYmxlPSExfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCI6NTg4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi9hdHRyaWJ1dGVzXCI6OTQ4LFwiLi9zdHlsZV9kZWZhdWx0c1wiOjk2MSxcIi4veHl6X2RlZmF1bHRzXCI6OTYyfV0sOTU0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKS5tYXhSb3dMZW5ndGg7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxhLG8scyxsLGMsdT1bXSxoPXt9LGY9W10scD10WzBdLGQ9W10sZz1bMCwwLDBdLHY9bih0KTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKWZvcihlPWQsZD1wLHA9dFtyKzFdfHxbXSxpPTA7aTx2O2krKyl2b2lkIDA9PT1kW2ldJiYoKHM9KHZvaWQgMCE9PWRbaS0xXT8xOjApKyh2b2lkIDAhPT1kW2krMV0/MTowKSsodm9pZCAwIT09ZVtpXT8xOjApKyh2b2lkIDAhPT1wW2ldPzE6MCkpPygwPT09ciYmcysrLDA9PT1pJiZzKysscj09PXQubGVuZ3RoLTEmJnMrKyxpPT09ZC5sZW5ndGgtMSYmcysrLHM8NCYmKGhbW3IsaV1dPVtyLGksc10pLHUucHVzaChbcixpLHNdKSk6Zi5wdXNoKFtyLGldKSk7Zm9yKDtmLmxlbmd0aDspe2ZvcihsPXt9LGM9ITEsbz1mLmxlbmd0aC0xO28+PTA7by0tKShzPSgoaFtbKHI9KGE9ZltvXSlbMF0pLTEsaT1hWzFdXV18fGcpWzJdKyhoW1tyKzEsaV1dfHxnKVsyXSsoaFtbcixpLTFdXXx8ZylbMl0rKGhbW3IsaSsxXV18fGcpWzJdKS8yMCkmJihsW2FdPVtyLGksc10sZi5zcGxpY2UobywxKSxjPSEwKTtpZighYyl0aHJvd1wiZmluZEVtcHRpZXMgaXRlcmF0ZWQgd2l0aCBubyBuZXcgbmVpZ2hib3JzXCI7Zm9yKGEgaW4gbCloW2FdPWxbYV0sdS5wdXNoKGxbYV0pfXJldHVybiB1LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gZVsyXS10WzJdfSl9fSx7XCIuLi8uLi9saWJcIjo3MDF9XSw5NTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyxsKXt2YXIgYyx1LGgsZixwPXQuY2RbMF0sZD1wLnRyYWNlLGc9dC54YSx2PXQueWEsbT1wLngseT1wLnkseD1wLnosYj1wLnhDZW50ZXIsXz1wLnlDZW50ZXIsdz1wLnptYXNrLGs9W2Quem1pbixkLnptYXhdLEE9ZC56aG92ZXJmb3JtYXQsVD1tLE09eTtpZighMSE9PXQuaW5kZXgpe3RyeXtoPU1hdGgucm91bmQodC5pbmRleFsxXSksZj1NYXRoLnJvdW5kKHQuaW5kZXhbMF0pfWNhdGNoKGUpe3JldHVybiB2b2lkIGkuZXJyb3IoXCJFcnJvciBob3ZlcmluZyBvbiBoZWF0bWFwLCBwb2ludE51bWJlciBtdXN0IGJlIFtyb3csY29sXSwgZm91bmQ6XCIsdC5pbmRleCl9aWYoaDwwfHxoPj14WzBdLmxlbmd0aHx8ZjwwfHxmPngubGVuZ3RoKXJldHVybn1lbHNle2lmKG4uaW5ib3goZS1tWzBdLGUtbVttLmxlbmd0aC0xXSwwKT4wfHxuLmluYm94KHIteVswXSxyLXlbeS5sZW5ndGgtMV0sMCk+MClyZXR1cm47aWYobCl7dmFyIFM7Zm9yKFQ9WzIqbVswXS1tWzFdXSxTPTE7UzxtLmxlbmd0aDtTKyspVC5wdXNoKChtW1NdK21bUy0xXSkvMik7Zm9yKFQucHVzaChbMiptW20ubGVuZ3RoLTFdLW1bbS5sZW5ndGgtMl1dKSxNPVsyKnlbMF0teVsxXV0sUz0xO1M8eS5sZW5ndGg7UysrKU0ucHVzaCgoeVtTXSt5W1MtMV0pLzIpO00ucHVzaChbMip5W3kubGVuZ3RoLTFdLXlbeS5sZW5ndGgtMl1dKX1oPU1hdGgubWF4KDAsTWF0aC5taW4oVC5sZW5ndGgtMixpLmZpbmRCaW4oZSxUKSkpLGY9TWF0aC5tYXgoMCxNYXRoLm1pbihNLmxlbmd0aC0yLGkuZmluZEJpbihyLE0pKSl9dmFyIEU9Zy5jMnAobVtoXSksQz1nLmMycChtW2grMV0pLEw9di5jMnAoeVtmXSksej12LmMycCh5W2YrMV0pO2w/KEM9RSxjPW1baF0sej1MLHU9eVtmXSk6KGM9Yj9iW2hdOihtW2hdK21baCsxXSkvMix1PV8/X1tmXTooeVtmXSt5W2YrMV0pLzIsZC56c21vb3RoJiYoRT1DPWcuYzJwKGMpLEw9ej12LmMycCh1KSkpO3ZhciBPLEksRD14W2ZdW2hdO3cmJiF3W2ZdW2hdJiYoRD12b2lkIDApLEFycmF5LmlzQXJyYXkocC5ob3ZlcnRleHQpJiZBcnJheS5pc0FycmF5KHAuaG92ZXJ0ZXh0W2ZdKT9PPXAuaG92ZXJ0ZXh0W2ZdW2hdOkFycmF5LmlzQXJyYXkocC50ZXh0KSYmQXJyYXkuaXNBcnJheShwLnRleHRbZl0pJiYoTz1wLnRleHRbZl1baF0pO3ZhciBQPXt0eXBlOlwibGluZWFyXCIscmFuZ2U6ayxob3ZlcmZvcm1hdDpBLF9zZXBhcmF0b3JzOmcuX3NlcGFyYXRvcnMsX251bUZvcm1hdDpnLl9udW1Gb3JtYXR9O3JldHVybiBJPWEudGlja1RleHQoUCxELFwiaG92ZXJcIikudGV4dCxbaS5leHRlbmRGbGF0KHQse2luZGV4OltmLGhdLGRpc3RhbmNlOnQubWF4SG92ZXJEaXN0YW5jZSxzcGlrZURpc3RhbmNlOnQubWF4U3Bpa2VEaXN0YW5jZSx4MDpFLHgxOkMseTA6TCx5MTp6LHhMYWJlbFZhbDpjLHlMYWJlbFZhbDp1LHpMYWJlbFZhbDpELHpMYWJlbDpJLHRleHQ6T30pXX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OX1dLDk1NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIiksbi5jYWxjPXQoXCIuL2NhbGNcIiksbi5wbG90PXQoXCIuL3Bsb3RcIiksbi5jb2xvcmJhcj10KFwiLi9jb2xvcmJhclwiKSxuLnN0eWxlPXQoXCIuL3N0eWxlXCIpLG4uaG92ZXJQb2ludHM9dChcIi4vaG92ZXJcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJoZWF0bWFwXCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCIpLG4uY2F0ZWdvcmllcz1bXCJjYXJ0ZXNpYW5cIixcInN2Z1wiLFwiMmRNYXBcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIjo3NjAsXCIuL2F0dHJpYnV0ZXNcIjo5NDgsXCIuL2NhbGNcIjo5NDksXCIuL2NvbG9yYmFyXCI6OTUxLFwiLi9kZWZhdWx0c1wiOjk1MyxcIi4vaG92ZXJcIjo5NTUsXCIuL3Bsb3RcIjo5NTksXCIuL3N0eWxlXCI6OTYwfV0sOTU3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPVtbLTEsMF0sWzEsMF0sWzAsLTFdLFswLDFdXTtmdW5jdGlvbiBhKHQpe3JldHVybi41LS4yNSpNYXRoLm1pbigxLC41KnQpfWZ1bmN0aW9uIG8odCxlLHIpe3ZhciBuLGEsbyxzLGwsYyx1LGgsZixwLGQsZyx2LG09MDtmb3Iocz0wO3M8ZS5sZW5ndGg7cysrKXtmb3IoYT0obj1lW3NdKVswXSxvPW5bMV0sZD10W2FdW29dLHA9MCxmPTAsbD0wO2w8NDtsKyspKHU9dFthKyhjPWlbbF0pWzBdXSkmJnZvaWQgMCE9PShoPXVbbytjWzFdXSkmJigwPT09cD9nPXY9aDooZz1NYXRoLm1pbihnLGgpLHY9TWF0aC5tYXgodixoKSksZisrLHArPWgpO2lmKDA9PT1mKXRocm93XCJpdGVyYXRlSW50ZXJwMmQgb3JkZXIgaXMgd3Jvbmc6IG5vIGRlZmluZWQgbmVpZ2hib3JzXCI7dFthXVtvXT1wL2Ysdm9pZCAwPT09ZD9mPDQmJihtPTEpOih0W2FdW29dPSgxK3IpKnRbYV1bb10tcipkLHY+ZyYmKG09TWF0aC5tYXgobSxNYXRoLmFicyh0W2FdW29dLWQpLyh2LWcpKSkpfXJldHVybiBtfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGk9MTtmb3Iobyh0LGUpLHI9MDtyPGUubGVuZ3RoJiYhKGVbcl1bMl08NCk7cisrKTtmb3IoZT1lLnNsaWNlKHIpLHI9MDtyPDEwMCYmaT4uMDE7cisrKWk9byh0LGUsYShpKSk7cmV0dXJuIGk+LjAxJiZuLmxvZyhcImludGVycDJkIGRpZG4ndCBjb252ZXJnZSBxdWlja2x5XCIsaSksdH19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDk1ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxpPXQoXCIuLi8uLi9saWJcIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxvLHMpe3ZhciBsLGMsdSxoPVtdLGY9bi50cmFjZUlzKHQsXCJjb250b3VyXCIpLHA9bi50cmFjZUlzKHQsXCJoaXN0b2dyYW1cIiksZD1uLnRyYWNlSXModCxcImdsMmRcIik7aWYoaShlKSYmZS5sZW5ndGg+MSYmIXAmJlwiY2F0ZWdvcnlcIiE9PXMudHlwZSl7dmFyIGc9ZS5sZW5ndGg7aWYoIShnPD1vKSlyZXR1cm4gZj9lLnNsaWNlKDAsbyk6ZS5zbGljZSgwLG8rMSk7aWYoZnx8ZCloPWUuc2xpY2UoMCxvKTtlbHNlIGlmKDE9PT1vKWg9W2VbMF0tLjUsZVswXSsuNV07ZWxzZXtmb3IoaD1bMS41KmVbMF0tLjUqZVsxXV0sdT0xO3U8Zzt1KyspaC5wdXNoKC41KihlW3UtMV0rZVt1XSkpO2gucHVzaCgxLjUqZVtnLTFdLS41KmVbZy0yXSl9aWYoZzxvKXt2YXIgdj1oW2gubGVuZ3RoLTFdLG09di1oW2gubGVuZ3RoLTJdO2Zvcih1PWc7dTxvO3UrKyl2Kz1tLGgucHVzaCh2KX19ZWxzZXt2YXIgeT10W3MuX2lkLmNoYXJBdCgwKStcImNhbGVuZGFyXCJdO2ZvcihsPWkoZSkmJjE9PT1lLmxlbmd0aD9lWzBdOnZvaWQgMD09PXI/MDpwfHxcImNhdGVnb3J5XCI9PT1zLnR5cGV8fFwibXVsdGljYXRlZ29yeVwiPT09cy50eXBlP3MucjJjKHIsMCx5KTpzLmQyYyhyLDAseSksYz1hfHwxLHU9Znx8ZD8wOi0uNTt1PG87dSsrKWgucHVzaChsK2MqdSl9cmV0dXJuIGh9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOX1dLDk1OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCJ0aW55Y29sb3IyXCIpLGE9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLG89dChcIi4uLy4uL2xpYlwiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGVcIiksbD10KFwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIik7ZnVuY3Rpb24gYyh0LGUpe3ZhciByPWUubGVuZ3RoLTIsbj1vLmNvbnN0cmFpbihvLmZpbmRCaW4odCxlKSwwLHIpLGk9ZVtuXSxhPWVbbisxXSxzPW8uY29uc3RyYWluKG4rKHQtaSkvKGEtaSktLjUsMCxyKSxsPU1hdGgucm91bmQocyksYz1NYXRoLmFicyhzLWwpO3JldHVybiBzJiZzIT09ciYmYz97YmluMDpsLGZyYWM6YyxiaW4xOk1hdGgucm91bmQobCtjLyhzLWwpKX06e2JpbjA6bCxiaW4xOmwsZnJhYzowfX1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9ZS5sZW5ndGgtMSxuPW8uY29uc3RyYWluKG8uZmluZEJpbih0LGUpLDAsciksaT1lW25dLGE9KHQtaSkvKGVbbisxXS1pKXx8MDtyZXR1cm4gYTw9MD97YmluMDpuLGJpbjE6bixmcmFjOjB9OmE8LjU/e2JpbjA6bixiaW4xOm4rMSxmcmFjOmF9OntiaW4wOm4rMSxiaW4xOm4sZnJhYzoxLWF9fWZ1bmN0aW9uIGgodCxlLHIpe3RbZV09clswXSx0W2UrMV09clsxXSx0W2UrMl09clsyXSx0W2UrM109TWF0aC5yb3VuZCgyNTUqclszXSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYpe3ZhciBwPWUueGF4aXMsZD1lLnlheGlzO28ubWFrZVRyYWNlR3JvdXBzKGYscixcImhtXCIpLmVhY2goZnVuY3Rpb24oZSl7dmFyIHIsZixnLHYsbSx5LHg9bi5zZWxlY3QodGhpcyksYj1lWzBdLF89Yi50cmFjZSx3PWIueixrPWIueCxBPWIueSxUPWIueENlbnRlcixNPWIueUNlbnRlcixTPWEudHJhY2VJcyhfLFwiY29udG91clwiKSxFPVM/XCJiZXN0XCI6Xy56c21vb3RoLEM9dy5sZW5ndGgsTD1vLm1heFJvd0xlbmd0aCh3KSx6PSExLE89ITE7Zm9yKHk9MDt2b2lkIDA9PT1yJiZ5PGsubGVuZ3RoLTE7KXI9cC5jMnAoa1t5XSkseSsrO2Zvcih5PWsubGVuZ3RoLTE7dm9pZCAwPT09ZiYmeT4wOylmPXAuYzJwKGtbeV0pLHktLTtmb3IoZjxyJiYoZz1mLGY9cixyPWcsej0hMCkseT0wO3ZvaWQgMD09PXYmJnk8QS5sZW5ndGgtMTspdj1kLmMycChBW3ldKSx5Kys7Zm9yKHk9QS5sZW5ndGgtMTt2b2lkIDA9PT1tJiZ5PjA7KW09ZC5jMnAoQVt5XSkseS0tO2lmKG08diYmKGc9dix2PW0sbT1nLE89ITApLFMmJihUPWssTT1BLGs9Yi54ZmlsbCxBPWIueWZpbGwpLFwiZmFzdFwiIT09RSl7dmFyIEk9XCJiZXN0XCI9PT1FPzA6LjU7cj1NYXRoLm1heCgtSSpwLl9sZW5ndGgsciksZj1NYXRoLm1pbigoMStJKSpwLl9sZW5ndGgsZiksdj1NYXRoLm1heCgtSSpkLl9sZW5ndGgsdiksbT1NYXRoLm1pbigoMStJKSpkLl9sZW5ndGgsbSl9dmFyIEQ9TWF0aC5yb3VuZChmLXIpLFA9TWF0aC5yb3VuZChtLXYpO2lmKEQ8PTB8fFA8PTApe3guc2VsZWN0QWxsKFwiaW1hZ2VcIikuZGF0YShbXSkuZXhpdCgpLnJlbW92ZSgpfWVsc2V7dmFyIFIsRjtcImZhc3RcIj09PUU/KFI9TCxGPUMpOihSPUQsRj1QKTt2YXIgQj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO0Iud2lkdGg9UixCLmhlaWdodD1GO3ZhciBOLGosVj1CLmdldENvbnRleHQoXCIyZFwiKSxVPXMubWFrZUNvbG9yU2NhbGVGdW5jKHMuZXh0cmFjdFNjYWxlKF8se2NMZXR0ZXI6XCJ6XCJ9KSx7bm9OdW1lcmljQ2hlY2s6ITAscmV0dXJuQXJyYXk6ITB9KTtcImZhc3RcIj09PUU/KE49ej9mdW5jdGlvbih0KXtyZXR1cm4gTC0xLXR9Om8uaWRlbnRpdHksaj1PP2Z1bmN0aW9uKHQpe3JldHVybiBDLTEtdH06by5pZGVudGl0eSk6KE49ZnVuY3Rpb24odCl7cmV0dXJuIG8uY29uc3RyYWluKE1hdGgucm91bmQocC5jMnAoa1t0XSktciksMCxEKX0saj1mdW5jdGlvbih0KXtyZXR1cm4gby5jb25zdHJhaW4oTWF0aC5yb3VuZChkLmMycChBW3RdKS12KSwwLFApfSk7dmFyIHEsSCxHLFksVyxYPWooMCksWj1bWCxYXSwkPXo/MDoxLEo9Tz8wOjEsSz0wLFE9MCx0dD0wLGV0PTA7aWYoRSl7dmFyIHJ0LG50PTA7dHJ5e3J0PW5ldyBVaW50OEFycmF5KEQqUCo0KX1jYXRjaCh0KXtydD1uZXcgQXJyYXkoRCpQKjQpfWlmKFwiYmVzdFwiPT09RSl7dmFyIGl0LGF0LG90LHN0PVR8fGssbHQ9TXx8QSxjdD1uZXcgQXJyYXkoc3QubGVuZ3RoKSx1dD1uZXcgQXJyYXkobHQubGVuZ3RoKSxodD1uZXcgQXJyYXkoRCksZnQ9VD91OmMscHQ9TT91OmM7Zm9yKHk9MDt5PHN0Lmxlbmd0aDt5KyspY3RbeV09TWF0aC5yb3VuZChwLmMycChzdFt5XSktcik7Zm9yKHk9MDt5PGx0Lmxlbmd0aDt5KyspdXRbeV09TWF0aC5yb3VuZChkLmMycChsdFt5XSktdik7Zm9yKHk9MDt5PEQ7eSsrKWh0W3ldPWZ0KHksY3QpO2ZvcihIPTA7SDxQO0grKylmb3IoYXQ9d1soaXQ9cHQoSCx1dCkpLmJpbjBdLG90PXdbaXQuYmluMV0seT0wO3k8RDt5KyssbnQrPTQpaChydCxudCxXPUF0KGF0LG90LGh0W3ldLGl0KSl9ZWxzZSBmb3IoSD0wO0g8QztIKyspZm9yKFk9d1tIXSxaPWooSCkseT0wO3k8RDt5KyspVz1rdChZW3ldLDEpLGgocnQsbnQ9NCooWipEK04oeSkpLFcpO3ZhciBkdD1WLmNyZWF0ZUltYWdlRGF0YShELFApO3RyeXtkdC5kYXRhLnNldChydCl9Y2F0Y2godCl7dmFyIGd0PWR0LmRhdGEsdnQ9Z3QubGVuZ3RoO2ZvcihIPTA7SDx2dDtIKyspZ3RbSF09cnRbSF19Vi5wdXRJbWFnZURhdGEoZHQsMCwwKX1lbHNle3ZhciBtdD1fLnhnYXAseXQ9Xy55Z2FwLHh0PU1hdGguZmxvb3IobXQvMiksYnQ9TWF0aC5mbG9vcih5dC8yKTtmb3IoSD0wO0g8QztIKyspaWYoWT13W0hdLFoucmV2ZXJzZSgpLFpbSl09aihIKzEpLFpbMF0hPT1aWzFdJiZ2b2lkIDAhPT1aWzBdJiZ2b2lkIDAhPT1aWzFdKWZvcihxPVtHPU4oMCksR10seT0wO3k8TDt5KyspcS5yZXZlcnNlKCkscVskXT1OKHkrMSkscVswXSE9PXFbMV0mJnZvaWQgMCE9PXFbMF0mJnZvaWQgMCE9PXFbMV0mJihXPWt0KFlbeV0sKHFbMV0tcVswXSkqKFpbMV0tWlswXSkpLFYuZmlsbFN0eWxlPVwicmdiYShcIitXLmpvaW4oXCIsXCIpK1wiKVwiLFYuZmlsbFJlY3QocVswXSt4dCxaWzBdK2J0LHFbMV0tcVswXS1tdCxaWzFdLVpbMF0teXQpKX1RPU1hdGgucm91bmQoUS9LKSx0dD1NYXRoLnJvdW5kKHR0L0spLGV0PU1hdGgucm91bmQoZXQvSyk7dmFyIF90PWkoXCJyZ2IoXCIrUStcIixcIit0dCtcIixcIitldCtcIilcIik7dC5faG1waXhjb3VudD0odC5faG1waXhjb3VudHx8MCkrSyx0Ll9obWx1bWNvdW50PSh0Ll9obWx1bWNvdW50fHwwKStLKl90LmdldEx1bWluYW5jZSgpO3ZhciB3dD14LnNlbGVjdEFsbChcImltYWdlXCIpLmRhdGEoZSk7d3QuZW50ZXIoKS5hcHBlbmQoXCJzdmc6aW1hZ2VcIikuYXR0cih7eG1sbnM6bC5zdmcscHJlc2VydmVBc3BlY3RSYXRpbzpcIm5vbmVcIn0pLHd0LmF0dHIoe2hlaWdodDpQLHdpZHRoOkQseDpyLHk6dixcInhsaW5rOmhyZWZcIjpCLnRvRGF0YVVSTChcImltYWdlL3BuZ1wiKX0pfWZ1bmN0aW9uIGt0KHQsZSl7aWYodm9pZCAwIT09dCl7dmFyIHI9VSh0KTtyZXR1cm4gclswXT1NYXRoLnJvdW5kKHJbMF0pLHJbMV09TWF0aC5yb3VuZChyWzFdKSxyWzJdPU1hdGgucm91bmQoclsyXSksSys9ZSxRKz1yWzBdKmUsdHQrPXJbMV0qZSxldCs9clsyXSplLHJ9cmV0dXJuWzAsMCwwLDBdfWZ1bmN0aW9uIEF0KHQsZSxyLG4pe3ZhciBpPXRbci5iaW4wXTtpZih2b2lkIDA9PT1pKXJldHVybiBrdCh2b2lkIDAsMSk7dmFyIGEsbz10W3IuYmluMV0scz1lW3IuYmluMF0sbD1lW3IuYmluMV0sYz1vLWl8fDAsdT1zLWl8fDA7cmV0dXJuIGE9dm9pZCAwPT09bz92b2lkIDA9PT1sPzA6dm9pZCAwPT09cz8yKihsLWkpOjIqKDIqbC1zLWkpLzM6dm9pZCAwPT09bD92b2lkIDA9PT1zPzA6MiooMippLW8tcykvMzp2b2lkIDA9PT1zPzIqKDIqbC1vLWkpLzM6bCtpLW8tcyxrdChpK3IuZnJhYypjK24uZnJhYyoodStyLmZyYWMqYSkpfX0pfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlXCI6NTkwLFwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXNcIjo2NzksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxkMzoxNTUsdGlueWNvbG9yMjo1MjJ9XSw5NjA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe24uc2VsZWN0KHQpLnNlbGVjdEFsbChcIi5obSBpbWFnZVwiKS5zdHlsZShcIm9wYWNpdHlcIixmdW5jdGlvbih0KXtyZXR1cm4gdC50cmFjZS5vcGFjaXR5fSl9fSx7ZDM6MTU1fV0sOTYxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXshMT09PXIoXCJ6c21vb3RoXCIpJiYocihcInhnYXBcIikscihcInlnYXBcIikpLHIoXCJ6aG92ZXJmb3JtYXRcIil9fSx7fV0sOTYyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9yZWdpc3RyeVwiKTtmdW5jdGlvbiBvKHQsZSl7dmFyIHI9ZSh0KTtyZXR1cm5cInNjYWxlZFwiPT09KHI/ZSh0K1widHlwZVwiLFwiYXJyYXlcIik6XCJzY2FsZWRcIikmJihlKHQrXCIwXCIpLGUoXCJkXCIrdCkpLHJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCxjKXt2YXIgdSxoLGY9cihcInpcIik7aWYobD1sfHxcInhcIixjPWN8fFwieVwiLHZvaWQgMD09PWZ8fCFmLmxlbmd0aClyZXR1cm4gMDtpZihpLmlzQXJyYXkxRCh0LnopKXt1PXIobCksaD1yKGMpO3ZhciBwPWkubWluUm93TGVuZ3RoKHUpLGQ9aS5taW5Sb3dMZW5ndGgoaCk7aWYoMD09PXB8fDA9PT1kKXJldHVybiAwO2UuX2xlbmd0aD1NYXRoLm1pbihwLGQsZi5sZW5ndGgpfWVsc2V7aWYodT1vKGwsciksaD1vKGMsciksIWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPSEwLGE9ITEsbz0hMSxzPTA7czx0Lmxlbmd0aDtzKyspe2lmKGU9dFtzXSwhaS5pc0FycmF5T3JUeXBlZEFycmF5KGUpKXtyPSExO2JyZWFrfWUubGVuZ3RoPjAmJihhPSEwKTtmb3IodmFyIGw9MDtsPGUubGVuZ3RoO2wrKylpZihuKGVbbF0pKXtvPSEwO2JyZWFrfX1yZXR1cm4gciYmYSYmb30oZikpcmV0dXJuIDA7cihcInRyYW5zcG9zZVwiKSxlLl9sZW5ndGg9bnVsbH1yZXR1cm4gYS5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcImhhbmRsZVRyYWNlRGVmYXVsdHNcIikodCxlLFtsLGNdLHMpLCEwfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDk2MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Zvcih2YXIgbj10KFwiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQscz10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbCxsPVtcInpcIixcInhcIixcIngwXCIsXCJkeFwiLFwieVwiLFwieTBcIixcImR5XCIsXCJ0ZXh0XCIsXCJ0cmFuc3Bvc2VcIixcInh0eXBlXCIsXCJ5dHlwZVwiXSxjPXt9LHU9MDt1PGwubGVuZ3RoO3UrKyl7dmFyIGg9bFt1XTtjW2hdPW5baF19byhjLGkoXCJcIix7Y0xldHRlcjpcInpcIixhdXRvQ29sb3JEZmx0OiExfSkse2NvbG9yYmFyOmF9KSxlLmV4cG9ydHM9cyhjLFwiY2FsY1wiLFwibmVzdGVkXCIpfSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIjo1NzksXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzXCI6OTQ4fV0sOTY0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsLWhlYXRtYXAyZFwiKSxpPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxhPXQoXCIuLi8uLi9saWIvc3RyMnJnYmFycmF5XCIpO2Z1bmN0aW9uIG8odCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLnR5cGU9XCJoZWF0bWFwZ2xcIix0aGlzLm5hbWU9XCJcIix0aGlzLmhvdmVyaW5mbz1cImFsbFwiLHRoaXMueERhdGE9W10sdGhpcy55RGF0YT1bXSx0aGlzLnpEYXRhPVtdLHRoaXMudGV4dExhYmVscz1bXSx0aGlzLmlkVG9JbmRleD1bXSx0aGlzLmJvdW5kcz1bMCwwLDAsMF0sdGhpcy5vcHRpb25zPXt6OltdLHg6W10seTpbXSxzaGFwZTpbMCwwXSxjb2xvckxldmVsczpbMF0sY29sb3JWYWx1ZXM6WzAsMCwwLDFdfSx0aGlzLmhlYXRtYXA9bih0LmdscGxvdCx0aGlzLm9wdGlvbnMpLHRoaXMuaGVhdG1hcC5fdHJhY2U9dGhpc312YXIgcz1vLnByb3RvdHlwZTtzLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5vcHRpb25zLHI9ZS5zaGFwZSxuPXQucG9pbnRJZCxpPW4lclswXSxhPU1hdGguZmxvb3Iobi9yWzBdKSxvPW47cmV0dXJue3RyYWNlOnRoaXMsZGF0YUNvb3JkOnQuZGF0YUNvb3JkLHRyYWNlQ29vcmQ6W2UueFtpXSxlLnlbYV0sZS56W29dXSx0ZXh0TGFiZWw6dGhpcy50ZXh0TGFiZWxzW25dLG5hbWU6dGhpcy5uYW1lLHBvaW50SW5kZXg6W2EsaV0saG92ZXJpbmZvOnRoaXMuaG92ZXJpbmZvfX0scy51cGRhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3RoaXMuaW5kZXg9dC5pbmRleCx0aGlzLm5hbWU9dC5uYW1lLHRoaXMuaG92ZXJpbmZvPXQuaG92ZXJpbmZvO3ZhciBuPXIuejt0aGlzLm9wdGlvbnMuej1bXS5jb25jYXQuYXBwbHkoW10sbik7dmFyIG89blswXS5sZW5ndGgscz1uLmxlbmd0aDt0aGlzLm9wdGlvbnMuc2hhcGU9W28sc10sdGhpcy5vcHRpb25zLng9ci54LHRoaXMub3B0aW9ucy55PXIueTt2YXIgbD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jb2xvcnNjYWxlLHI9dC56bWluLG49dC56bWF4LGk9ZS5sZW5ndGgsbz1uZXcgQXJyYXkoaSkscz1uZXcgQXJyYXkoNCppKSxsPTA7bDxpO2wrKyl7dmFyIGM9ZVtsXSx1PWEoY1sxXSk7b1tsXT1yK2NbMF0qKG4tcik7Zm9yKHZhciBoPTA7aDw0O2grKylzWzQqbCtoXT11W2hdfXJldHVybntjb2xvckxldmVsczpvLGNvbG9yVmFsdWVzOnN9fSh0KTt0aGlzLm9wdGlvbnMuY29sb3JMZXZlbHM9bC5jb2xvckxldmVscyx0aGlzLm9wdGlvbnMuY29sb3JWYWx1ZXM9bC5jb2xvclZhbHVlcyx0aGlzLnRleHRMYWJlbHM9W10uY29uY2F0LmFwcGx5KFtdLHQudGV4dCksdGhpcy5oZWF0bWFwLnVwZGF0ZSh0aGlzLm9wdGlvbnMpO3ZhciBjPXRoaXMuc2NlbmUueGF4aXMsdT10aGlzLnNjZW5lLnlheGlzO3QuX2V4dHJlbWVzW2MuX2lkXT1pLmZpbmRFeHRyZW1lcyhjLHIueCksdC5fZXh0cmVtZXNbdS5faWRdPWkuZmluZEV4dHJlbWVzKHUsci55KX0scy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5oZWF0bWFwLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1uZXcgbyh0LGUudWlkKTtyZXR1cm4gbi51cGRhdGUoZSxyKSxufX0se1wiLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiOjcyNCxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiZ2wtaGVhdG1hcDJkXCI6MjQ4fV0sOTY1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi4vaGVhdG1hcC9kZWZhdWx0c1wiKSxuLmNvbG9yYmFyPXQoXCIuLi9oZWF0bWFwL2NvbG9yYmFyXCIpLG4uY2FsYz10KFwiLi4vaGVhdG1hcC9jYWxjXCIpLG4ucGxvdD10KFwiLi9jb252ZXJ0XCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwiaGVhdG1hcGdsXCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvZ2wyZFwiKSxuLmNhdGVnb3JpZXM9W1wiZ2xcIixcImdsMmRcIixcIjJkTWFwXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvZ2wyZFwiOjc4NyxcIi4uL2hlYXRtYXAvY2FsY1wiOjk0OSxcIi4uL2hlYXRtYXAvY29sb3JiYXJcIjo5NTEsXCIuLi9oZWF0bWFwL2RlZmF1bHRzXCI6OTUzLFwiLi9hdHRyaWJ1dGVzXCI6OTYzLFwiLi9jb252ZXJ0XCI6OTY0fV0sOTY2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2Jhci9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLGE9dChcIi4vYmluX2F0dHJpYnV0ZXNcIiksbz10KFwiLi9jb25zdGFudHNcIikscz10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17eDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0seTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0sdGV4dDpzKHt9LG4udGV4dCx7fSksaG92ZXJ0ZXh0OnMoe30sbi5ob3ZlcnRleHQse30pLG9yaWVudGF0aW9uOm4ub3JpZW50YXRpb24saGlzdGZ1bmM6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImNvdW50XCIsXCJzdW1cIixcImF2Z1wiLFwibWluXCIsXCJtYXhcIl0sZGZsdDpcImNvdW50XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGhpc3Rub3JtOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJcIixcInBlcmNlbnRcIixcInByb2JhYmlsaXR5XCIsXCJkZW5zaXR5XCIsXCJwcm9iYWJpbGl0eSBkZW5zaXR5XCJdLGRmbHQ6XCJcIixlZGl0VHlwZTpcImNhbGNcIn0sY3VtdWxhdGl2ZTp7ZW5hYmxlZDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwiY2FsY1wifSxkaXJlY3Rpb246e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImluY3JlYXNpbmdcIixcImRlY3JlYXNpbmdcIl0sZGZsdDpcImluY3JlYXNpbmdcIixlZGl0VHlwZTpcImNhbGNcIn0sY3VycmVudGJpbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiaW5jbHVkZVwiLFwiZXhjbHVkZVwiLFwiaGFsZlwiXSxkZmx0OlwiaW5jbHVkZVwiLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0sbmJpbnN4Ont2YWxUeXBlOlwiaW50ZWdlclwiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTpcImNhbGNcIn0seGJpbnM6YShcInhcIiwhMCksbmJpbnN5Ont2YWxUeXBlOlwiaW50ZWdlclwiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTpcImNhbGNcIn0seWJpbnM6YShcInlcIiwhMCksYXV0b2Jpbng6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDpudWxsLGVkaXRUeXBlOlwiY2FsY1wifSxhdXRvYmlueTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0Om51bGwsZWRpdFR5cGU6XCJjYWxjXCJ9LGhvdmVydGVtcGxhdGU6aSh7fSx7a2V5czpvLmV2ZW50RGF0YUtleXN9KSxtYXJrZXI6bi5tYXJrZXIsb2Zmc2V0Z3JvdXA6bi5vZmZzZXRncm91cCxhbGlnbm1lbnRncm91cDpuLmFsaWdubWVudGdyb3VwLHNlbGVjdGVkOm4uc2VsZWN0ZWQsdW5zZWxlY3RlZDpuLnVuc2VsZWN0ZWQsX2RlcHJlY2F0ZWQ6e2JhcmRpcjpuLl9kZXByZWNhdGVkLmJhcmRpcn19fSx7XCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi9iYXIvYXR0cmlidXRlc1wiOjgzOSxcIi4vYmluX2F0dHJpYnV0ZXNcIjo5NjgsXCIuL2NvbnN0YW50c1wiOjk3Mn1dLDk2NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPTAsaT0wO2k8cjtpKyspZVtpXT8odFtpXS89ZVtpXSxuKz10W2ldKTp0W2ldPW51bGw7cmV0dXJuIG59fSx7fV0sOTY4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJue3N0YXJ0Ont2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGVuZDp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsY1wifSxzaXplOnt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGVkaXRUeXBlOlwiY2FsY1wifX19LHt9XSw5Njk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIik7ZS5leHBvcnRzPXtjb3VudDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHJbdF0rKywxfSxzdW06ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9aVtlXTtyZXR1cm4gbihhKT8oYT1OdW1iZXIoYSksclt0XSs9YSxhKTowfSxhdmc6ZnVuY3Rpb24odCxlLHIsaSxhKXt2YXIgbz1pW2VdO3JldHVybiBuKG8pJiYobz1OdW1iZXIobyksclt0XSs9byxhW3RdKyspLDB9LG1pbjpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1pW2VdO2lmKG4oYSkpe2lmKGE9TnVtYmVyKGEpLCFuKHJbdF0pKXJldHVybiByW3RdPWEsYTtpZihyW3RdPmEpe3ZhciBvPWEtclt0XTtyZXR1cm4gclt0XT1hLG99fXJldHVybiAwfSxtYXg6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9aVtlXTtpZihuKGEpKXtpZihhPU51bWJlcihhKSwhbihyW3RdKSlyZXR1cm4gclt0XT1hLGE7aWYoclt0XTxhKXt2YXIgbz1hLXJbdF07cmV0dXJuIHJbdF09YSxvfX1yZXR1cm4gMH19fSx7XCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDk3MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLGk9bi5PTkVBVkdZRUFSLGE9bi5PTkVBVkdNT05USCxvPW4uT05FREFZLHM9bi5PTkVIT1VSLGw9bi5PTkVNSU4sYz1uLk9ORVNFQyx1PXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKS50aWNrSW5jcmVtZW50O2Z1bmN0aW9uIGgodCxlLHIsbil7aWYodCplPD0wKXJldHVybiAxLzA7Zm9yKHZhciBpPU1hdGguYWJzKGUtdCksYT1cImRhdGVcIj09PXIudHlwZSxvPWYoaSxhKSxzPTA7czwxMDtzKyspe3ZhciBsPWYoODAqbyxhKTtpZihvPT09bClicmVhaztpZighcChsLHQsZSxhLHIsbikpYnJlYWs7bz1sfXJldHVybiBvfWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gZSYmdD5jP3Q+bz90PjEuMSppP2k6dD4xLjEqYT9hOm86dD5zP3M6dD5sP2w6YzpNYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4xMCkpfWZ1bmN0aW9uIHAodCxlLHIsbixhLHMpe2lmKG4mJnQ+byl7dmFyIGw9ZChlLGEscyksYz1kKHIsYSxzKSx1PXQ9PT1pPzA6MTtyZXR1cm4gbFt1XSE9PWNbdV19cmV0dXJuIE1hdGguZmxvb3Ioci90KS1NYXRoLmZsb29yKGUvdCk+LjF9ZnVuY3Rpb24gZCh0LGUscil7dmFyIG49ZS5jMmQodCxpLHIpLnNwbGl0KFwiLVwiKTtyZXR1cm5cIlwiPT09blswXSYmKG4udW5zaGlmdCgpLG5bMF09XCItXCIrblswXSksbn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgcyxsLGM9LTEuMSplLGY9LS4xKmUscD10LWYsZD1yWzBdLGc9clsxXSx2PU1hdGgubWluKGgoZCtmLGQrcCxuLGEpLGgoZytmLGcrcCxuLGEpKSxtPU1hdGgubWluKGgoZCtjLGQrZixuLGEpLGgoZytjLGcrZixuLGEpKTtpZih2Pm0mJm08TWF0aC5hYnMoZy1kKS80ZTM/KHM9dixsPSExKToocz1NYXRoLm1pbih2LG0pLGw9ITApLFwiZGF0ZVwiPT09bi50eXBlJiZzPm8pe3ZhciB5PXM9PT1pPzE6Nix4PXM9PT1pP1wiTTEyXCI6XCJNMVwiO3JldHVybiBmdW5jdGlvbihlLHIpe3ZhciBvPW4uYzJkKGUsaSxhKSxzPW8uaW5kZXhPZihcIi1cIix5KTtzPjAmJihvPW8uc3Vic3RyKDAscykpO3ZhciBjPW4uZDJjKG8sMCxhKTtpZihjPGUpe3ZhciBoPXUoYyx4LCExLGEpOyhjK2gpLzI8ZSt0JiYoYz1oKX1yZXR1cm4gciYmbD91KGMseCwhMCxhKTpjfX1yZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbj1zKk1hdGgucm91bmQoZS9zKTtyZXR1cm4gbitzLzEwPGUmJm4rLjkqczxlK3QmJihuKz1zKSxyJiZsJiYobi09cyksbn19fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDl9XSw5NzE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLG89dChcIi4uL2Jhci9hcnJheXNfdG9fY2FsY2RhdGFcIikscz10KFwiLi9iaW5fZnVuY3Rpb25zXCIpLGw9dChcIi4vbm9ybV9mdW5jdGlvbnNcIiksYz10KFwiLi9hdmVyYWdlXCIpLHU9dChcIi4vYmluX2xhYmVsX3ZhbHNcIik7ZnVuY3Rpb24gaCh0LGUscixvLHMpe3ZhciBsLGMsdSxmLHAsZCxnLHY9bytcImJpbnNcIixtPXQuX2Z1bGxMYXlvdXQseT1cIm92ZXJsYXlcIj09PW0uYmFybW9kZSx4PVwiZGF0ZVwiPT09ci50eXBlP2Z1bmN0aW9uKHQpe3JldHVybiB0fHwwPT09dD9pLmNsZWFuRGF0ZSh0LG51bGwsci5jYWxlbmRhcik6bnVsbH06ZnVuY3Rpb24odCl7cmV0dXJuIG4odCk/TnVtYmVyKHQpOm51bGx9O2Z1bmN0aW9uIGIodCxlLHIpe2VbdCtcIkZvdW5kXCJdPyhlW3RdPXgoZVt0XSksbnVsbD09PWVbdF0mJihlW3RdPXJbdF0pKTooZFt0XT1lW3RdPXJbdF0saS5uZXN0ZWRQcm9wZXJ0eShjWzBdLHYrXCIuXCIrdCkuc2V0KHJbdF0pKX12YXIgXz1tLl9oaXN0b2dyYW1CaW5PcHRzW2UuX2dyb3VwTmFtZV07aWYoZS5fYXV0b0JpbkZpbmlzaGVkKWRlbGV0ZSBlLl9hdXRvQmluRmluaXNoZWQ7ZWxzZXtjPV8udHJhY2VzO3ZhciB3PV8uc2l6ZUZvdW5kLGs9W107ZD1jWzBdLl9hdXRvQmluPXt9O3ZhciBBPSEwO2ZvcihsPTA7bDxjLmxlbmd0aDtsKyspKHU9Y1tsXSkudmlzaWJsZSYmKHA9dS5fcG9zMD1yLm1ha2VDYWxjZGF0YSh1LG8pLGs9aS5jb25jYXQoayxwKSxkZWxldGUgdS5fYXV0b0JpbkZpbmlzaGVkLCEwPT09ZS52aXNpYmxlJiYoQT9BPSExOihkZWxldGUgdS5fYXV0b0Jpbix1Ll9hdXRvQmluRmluaXNoZWQ9MSkpKTtmPWNbMF1bbytcImNhbGVuZGFyXCJdO3ZhciBUPWEuYXV0b0JpbihrLHIsXy5uYmlucywhMSxmLHcmJl8uc2l6ZSk7aWYoeSYmMD09PVQuX2RhdGFTcGFuJiZcImNhdGVnb3J5XCIhPT1yLnR5cGUmJlwibXVsdGljYXRlZ29yeVwiIT09ci50eXBlKXtpZihzKXJldHVybltULHAsITBdO1Q9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbyxzLGw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS54YXhpcyxuPWUueWF4aXMsaT1lLm9yaWVudGF0aW9uLGE9W10sbz10Ll9mdWxsRGF0YSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107XCJoaXN0b2dyYW1cIj09PWwudHlwZSYmITA9PT1sLnZpc2libGUmJmwub3JpZW50YXRpb249PT1pJiZsLnhheGlzPT09ciYmbC55YXhpcz09PW4mJmEucHVzaChsKX1yZXR1cm4gYX0odCxlKSxjPSExLHU9MS8wLGY9W2VdO2ZvcihvPTA7bzxsLmxlbmd0aDtvKyspaWYoKHM9bFtvXSk9PT1lKWM9ITA7ZWxzZSBpZihjKXt2YXIgcD1oKHQscyxyLG4sITApLGQ9cFswXSxnPXBbMl07cy5fYXV0b0JpbkZpbmlzaGVkPTEscy5fcG9zMD1wWzFdLGc/Zi5wdXNoKHMpOnU9TWF0aC5taW4odSxkLnNpemUpfWVsc2UgdT1NYXRoLm1pbih1LHNbYV0uc2l6ZSk7dmFyIHY9bmV3IEFycmF5KGYubGVuZ3RoKTtmb3Iobz0wO288Zi5sZW5ndGg7bysrKWZvcih2YXIgbT1mW29dLl9wb3MwLHk9MDt5PG0ubGVuZ3RoO3krKylpZih2b2lkIDAhPT1tW3ldKXt2W29dPW1beV07YnJlYWt9aXNGaW5pdGUodSl8fCh1PWkuZGlzdGluY3RWYWxzKHYpLm1pbkRpZmYpO2ZvcihvPTA7bzxmLmxlbmd0aDtvKyspe3ZhciB4PShzPWZbb10pW24rXCJjYWxlbmRhclwiXTtzLl9pbnB1dFthXT1zW2FdPXtzdGFydDpyLmMycih2W29dLXUvMiwwLHgpLGVuZDpyLmMycih2W29dK3UvMiwwLHgpLHNpemU6dX19cmV0dXJuIGVbYV19KHQsZSxyLG8sdil9KGc9dS5jdW11bGF0aXZlKS5lbmFibGVkJiZcImluY2x1ZGVcIiE9PWcuY3VycmVudGJpbiYmKFwiZGVjcmVhc2luZ1wiPT09Zy5kaXJlY3Rpb24/VC5zdGFydD1yLmMycihhLnRpY2tJbmNyZW1lbnQoci5yMmMoVC5zdGFydCwwLGYpLFQuc2l6ZSwhMCxmKSk6VC5lbmQ9ci5jMnIoYS50aWNrSW5jcmVtZW50KHIucjJjKFQuZW5kLDAsZiksVC5zaXplLCExLGYpKSksXy5zaXplPVQuc2l6ZSx3fHwoZC5zaXplPVQuc2l6ZSxpLm5lc3RlZFByb3BlcnR5KGNbMF0sditcIi5zaXplXCIpLnNldChULnNpemUpKSxiKFwic3RhcnRcIixfLFQpLGIoXCJlbmRcIixfLFQpfXA9ZS5fcG9zMCxkZWxldGUgZS5fcG9zMDt2YXIgTT1lLl9pbnB1dFt2XXx8e30sUz1pLmV4dGVuZEZsYXQoe30sXyksRT1fLnN0YXJ0LEM9ci5yMmwoTS5zdGFydCksTD12b2lkIDAhPT1DO2lmKChfLnN0YXJ0Rm91bmR8fEwpJiZDIT09ci5yMmwoRSkpe3ZhciB6PUw/QzppLmFnZ051bXMoTWF0aC5taW4sbnVsbCxwKSxPPXt0eXBlOlwiY2F0ZWdvcnlcIj09PXIudHlwZXx8XCJtdWx0aWNhdGVnb3J5XCI9PT1yLnR5cGU/XCJsaW5lYXJcIjpyLnR5cGUscjJsOnIucjJsLGR0aWNrOl8uc2l6ZSx0aWNrMDpFLGNhbGVuZGFyOmYscmFuZ2U6W3osYS50aWNrSW5jcmVtZW50KHosXy5zaXplLCExLGYpXS5tYXAoci5sMnIpfSxJPWEudGlja0ZpcnN0KE8pO0k+ci5yMmwoeikmJihJPWEudGlja0luY3JlbWVudChJLF8uc2l6ZSwhMCxmKSksUy5zdGFydD1yLmwycihJKSxMfHxpLm5lc3RlZFByb3BlcnR5KGUsditcIi5zdGFydFwiKS5zZXQoUy5zdGFydCl9dmFyIEQ9Xy5lbmQsUD1yLnIybChNLmVuZCksUj12b2lkIDAhPT1QO2lmKChfLmVuZEZvdW5kfHxSKSYmUCE9PXIucjJsKEQpKXt2YXIgRj1SP1A6aS5hZ2dOdW1zKE1hdGgubWF4LG51bGwscCk7Uy5lbmQ9ci5sMnIoRiksUnx8aS5uZXN0ZWRQcm9wZXJ0eShlLHYrXCIuc3RhcnRcIikuc2V0KFMuZW5kKX12YXIgQj1cImF1dG9iaW5cIitvO3JldHVybiExPT09ZS5faW5wdXRbQl0mJihlLl9pbnB1dFt2XT1pLmV4dGVuZEZsYXQoe30sZVt2XXx8e30pLGRlbGV0ZSBlLl9pbnB1dFtCXSxkZWxldGUgZVtCXSksW1MscF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoITA9PT1lLnZpc2libGUpe3ZhciByLGYscCxkLGc9W10sdj1bXSxtPWEuZ2V0RnJvbUlkKHQsXCJoXCI9PT1lLm9yaWVudGF0aW9uP2UueWF4aXN8fFwieVwiOmUueGF4aXN8fFwieFwiKSx5PVwiaFwiPT09ZS5vcmllbnRhdGlvbj9cInlcIjpcInhcIix4PXt4OlwieVwiLHk6XCJ4XCJ9W3ldLGI9ZVt5K1wiY2FsZW5kYXJcIl0sXz1lLmN1bXVsYXRpdmUsdz1oKHQsZSxtLHkpLGs9d1swXSxBPXdbMV0sVD1cInN0cmluZ1wiPT10eXBlb2Ygay5zaXplLE09W10sUz1UP006ayxFPVtdLEM9W10sTD1bXSx6PTAsTz1lLmhpc3Rub3JtLEk9ZS5oaXN0ZnVuYyxEPS0xIT09Ty5pbmRleE9mKFwiZGVuc2l0eVwiKTtfLmVuYWJsZWQmJkQmJihPPU8ucmVwbGFjZSgvID9kZW5zaXR5JC8sXCJcIiksRD0hMSk7dmFyIFAsUj1cIm1heFwiPT09SXx8XCJtaW5cIj09PUk/bnVsbDowLEY9cy5jb3VudCxCPWxbT10sTj0hMSxqPWZ1bmN0aW9uKHQpe3JldHVybiBtLnIyYyh0LDAsYil9O2ZvcihpLmlzQXJyYXlPclR5cGVkQXJyYXkoZVt4XSkmJlwiY291bnRcIiE9PUkmJihQPWVbeF0sTj1cImF2Z1wiPT09SSxGPXNbSV0pLHI9aihrLnN0YXJ0KSxwPWooay5lbmQpKyhyLWEudGlja0luY3JlbWVudChyLGsuc2l6ZSwhMSxiKSkvMWU2O3I8cCYmZy5sZW5ndGg8MWU2JiYoZj1hLnRpY2tJbmNyZW1lbnQocixrLnNpemUsITEsYiksZy5wdXNoKChyK2YpLzIpLHYucHVzaChSKSxMLnB1c2goW10pLE0ucHVzaChyKSxEJiZFLnB1c2goMS8oZi1yKSksTiYmQy5wdXNoKDApLCEoZjw9cikpOylyPWY7TS5wdXNoKHIpLFR8fFwiZGF0ZVwiIT09bS50eXBlfHwoUz17c3RhcnQ6aihTLnN0YXJ0KSxlbmQ6aihTLmVuZCksc2l6ZTpTLnNpemV9KTt2YXIgVixVPXYubGVuZ3RoLHE9ITAsSD0xLzAsRz0xLzAsWT17fTtmb3Iocj0wO3I8QS5sZW5ndGg7cisrKXt2YXIgVz1BW3JdOyhkPWkuZmluZEJpbihXLFMpKT49MCYmZDxVJiYoeis9RihkLHIsdixQLEMpLHEmJkxbZF0ubGVuZ3RoJiZXIT09QVtMW2RdWzBdXSYmKHE9ITEpLExbZF0ucHVzaChyKSxZW3JdPWQsSD1NYXRoLm1pbihILFctTVtkXSksRz1NYXRoLm1pbihHLE1bZCsxXS1XKSl9cXx8KFY9dShILEcsTSxtLGIpKSxOJiYoej1jKHYsQykpLEImJkIodix6LEUpLF8uZW5hYmxlZCYmZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYTtmdW5jdGlvbiBvKGUpe2E9dFtlXSx0W2VdLz0yfWZ1bmN0aW9uIHMoZSl7aT10W2VdLHRbZV09YStpLzIsYSs9aX1pZihcImhhbGZcIj09PXIpaWYoXCJpbmNyZWFzaW5nXCI9PT1lKWZvcihvKDApLG49MTtuPHQubGVuZ3RoO24rKylzKG4pO2Vsc2UgZm9yKG8odC5sZW5ndGgtMSksbj10Lmxlbmd0aC0yO24+PTA7bi0tKXMobik7ZWxzZSBpZihcImluY3JlYXNpbmdcIj09PWUpe2ZvcihuPTE7bjx0Lmxlbmd0aDtuKyspdFtuXSs9dFtuLTFdO1wiZXhjbHVkZVwiPT09ciYmKHQudW5zaGlmdCgwKSx0LnBvcCgpKX1lbHNle2ZvcihuPXQubGVuZ3RoLTI7bj49MDtuLS0pdFtuXSs9dFtuKzFdO1wiZXhjbHVkZVwiPT09ciYmKHQucHVzaCgwKSx0LnNoaWZ0KCkpfX0odixfLmRpcmVjdGlvbixfLmN1cnJlbnRiaW4pO3ZhciBYPU1hdGgubWluKGcubGVuZ3RoLHYubGVuZ3RoKSxaPVtdLCQ9MCxKPVgtMTtmb3Iocj0wO3I8WDtyKyspaWYodltyXSl7JD1yO2JyZWFrfWZvcihyPVgtMTtyPj0kO3ItLSlpZih2W3JdKXtKPXI7YnJlYWt9Zm9yKHI9JDtyPD1KO3IrKylpZihuKGdbcl0pJiZuKHZbcl0pKXt2YXIgSz17cDpnW3JdLHM6dltyXSxiOjB9O18uZW5hYmxlZHx8KEsucHRzPUxbcl0scT9LLnBoMD1LLnBoMT1MW3JdLmxlbmd0aD9BW0xbcl1bMF1dOmdbcl06KEsucGgwPVYoTVtyXSksSy5waDE9VihNW3IrMV0sITApKSksWi5wdXNoKEspfXJldHVybiAxPT09Wi5sZW5ndGgmJihaWzBdLndpZHRoMT1hLnRpY2tJbmNyZW1lbnQoWlswXS5wLGsuc2l6ZSwhMSxiKS1aWzBdLnApLG8oWixlKSxpLmlzQXJyYXlPclR5cGVkQXJyYXkoZS5zZWxlY3RlZHBvaW50cykmJmkudGFnU2VsZWN0ZWQoWixlLFkpLFp9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9iYXIvYXJyYXlzX3RvX2NhbGNkYXRhXCI6ODM4LFwiLi9hdmVyYWdlXCI6OTY3LFwiLi9iaW5fZnVuY3Rpb25zXCI6OTY5LFwiLi9iaW5fbGFiZWxfdmFsc1wiOjk3MCxcIi4vbm9ybV9mdW5jdGlvbnNcIjo5NzgsXCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDk3MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17ZXZlbnREYXRhS2V5czpbXCJiaW5OdW1iZXJcIl19fSx7fV0sOTczOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPW4ubmVzdGVkUHJvcGVydHksYT10KFwiLi4vYmFyL2RlZmF1bHRzXCIpLmhhbmRsZUdyb3VwaW5nRGVmYXVsdHMsbz10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCIpLmdldEF4aXNHcm91cCxzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbD17eDpbe2FTdHI6XCJ4Ymlucy5zdGFydFwiLG5hbWU6XCJzdGFydFwifSx7YVN0cjpcInhiaW5zLmVuZFwiLG5hbWU6XCJlbmRcIn0se2FTdHI6XCJ4Ymlucy5zaXplXCIsbmFtZTpcInNpemVcIn0se2FTdHI6XCJuYmluc3hcIixuYW1lOlwibmJpbnNcIn1dLHk6W3thU3RyOlwieWJpbnMuc3RhcnRcIixuYW1lOlwic3RhcnRcIn0se2FTdHI6XCJ5Ymlucy5lbmRcIixuYW1lOlwiZW5kXCJ9LHthU3RyOlwieWJpbnMuc2l6ZVwiLG5hbWU6XCJzaXplXCJ9LHthU3RyOlwibmJpbnN5XCIsbmFtZTpcIm5iaW5zXCJ9XX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYyx1LGgsZixwLGQsZz1lLl9oaXN0b2dyYW1CaW5PcHRzPXt9LHY9XCJvdmVybGF5XCI9PT1lLmJhcm1vZGU7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gbi5jb2VyY2UodS5faW5wdXQsdSxzLHQpfWZvcihyPTA7cjx0Lmxlbmd0aDtyKyspXCJoaXN0b2dyYW1cIj09PSh1PXRbcl0pLnR5cGUmJihkZWxldGUgdS5fYXV0b0JpbkZpbmlzaGVkLGY9XCJ2XCI9PT11Lm9yaWVudGF0aW9uP1wieFwiOlwieVwiLChkPWdbcD11Ll9ncm91cE5hbWU9dj91LnVpZDpvKGUsdS54YXhpcykrbyhlLHUueWF4aXMpK2ZdKT9kLnRyYWNlcy5wdXNoKHUpOmQ9Z1twXT17dHJhY2VzOlt1XSxkaXJlY3Rpb246Zn0sYSh1Ll9pbnB1dCx1LGUsbSkpO2ZvcihwIGluIGcpe2Y9KGQ9Z1twXSkuZGlyZWN0aW9uO3ZhciB5PWxbZl07Zm9yKGM9MDtjPHkubGVuZ3RoO2MrKyl7dmFyIHg9eVtjXSxiPXgubmFtZTtpZihcIm5iaW5zXCIhPT1ifHwhZC5zaXplRm91bmQpe3ZhciBfPXguYVN0cjtmb3Iocj0wO3I8ZC50cmFjZXMubGVuZ3RoO3IrKyl7aWYoaD0odT1kLnRyYWNlc1tyXSkuX2lucHV0LHZvaWQgMCE9PWkoaCxfKS5nZXQoKSl7ZFtiXT1tKF8pLGRbYitcIkZvdW5kXCJdPSEwO2JyZWFrfXZhciB3PXUuX2F1dG9CaW47dyYmd1tiXSYmaSh1LF8pLnNldCh3W2JdKX1pZihcInN0YXJ0XCI9PT1ifHxcImVuZFwiPT09Yilmb3IoO3I8ZC50cmFjZXMubGVuZ3RoO3IrKyltKF8sKCh1PWQudHJhY2VzW3JdKS5fYXV0b0Jpbnx8e30pW2JdKTtcIm5iaW5zXCIhPT1ifHxkLnNpemVGb3VuZHx8ZC5uYmluc0ZvdW5kfHwodT1kLnRyYWNlc1swXSxkW2JdPW0oXykpfX19fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCI6NzUyLFwiLi4vYmFyL2RlZmF1bHRzXCI6ODQzLFwiLi9hdHRyaWJ1dGVzXCI6OTY2fV0sOTc0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLG89dChcIi4uL2Jhci9zdHlsZV9kZWZhdWx0c1wiKSxzPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLHMscixuKX12YXIgdT1jKFwieFwiKSxoPWMoXCJ5XCIpO2MoXCJjdW11bGF0aXZlLmVuYWJsZWRcIikmJihjKFwiY3VtdWxhdGl2ZS5kaXJlY3Rpb25cIiksYyhcImN1bXVsYXRpdmUuY3VycmVudGJpblwiKSksYyhcInRleHRcIiksYyhcImhvdmVydGV4dFwiKSxjKFwiaG92ZXJ0ZW1wbGF0ZVwiKTt2YXIgZj1jKFwib3JpZW50YXRpb25cIixoJiYhdT9cImhcIjpcInZcIikscD1cInZcIj09PWY/XCJ4XCI6XCJ5XCIsZD1cInZcIj09PWY/XCJ5XCI6XCJ4XCIsZz11JiZoP01hdGgubWluKGkubWluUm93TGVuZ3RoKHUpJiZpLm1pblJvd0xlbmd0aChoKSk6aS5taW5Sb3dMZW5ndGgoZVtwXXx8W10pO2lmKGcpe2UuX2xlbmd0aD1nLG4uZ2V0Q29tcG9uZW50TWV0aG9kKFwiY2FsZW5kYXJzXCIsXCJoYW5kbGVUcmFjZURlZmF1bHRzXCIpKHQsZSxbXCJ4XCIsXCJ5XCJdLGwpLGVbZF0mJmMoXCJoaXN0ZnVuY1wiKSxjKFwiaGlzdG5vcm1cIiksYyhcImF1dG9iaW5cIitwKSxvKHQsZSxjLHIsbCksaS5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsYyk7dmFyIHY9KGUubWFya2VyLmxpbmV8fHt9KS5jb2xvcixtPW4uZ2V0Q29tcG9uZW50TWV0aG9kKFwiZXJyb3JiYXJzXCIsXCJzdXBwbHlEZWZhdWx0c1wiKTttKHQsZSx2fHxhLmRlZmF1bHRMaW5lLHtheGlzOlwieVwifSksbSh0LGUsdnx8YS5kZWZhdWx0TGluZSx7YXhpczpcInhcIixpbmhlcml0OlwieVwifSl9ZWxzZSBlLnZpc2libGU9ITF9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9iYXIvc3R5bGVfZGVmYXVsdHNcIjo4NTMsXCIuL2F0dHJpYnV0ZXNcIjo5NjZ9XSw5NzU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXtpZih0Lng9XCJ4VmFsXCJpbiBlP2UueFZhbDplLngsdC55PVwieVZhbFwiaW4gZT9lLnlWYWw6ZS55LFwiekxhYmVsVmFsXCJpbiBlJiYodC56PWUuekxhYmVsVmFsKSxlLnhhJiYodC54YXhpcz1lLnhhKSxlLnlhJiYodC55YXhpcz1lLnlhKSwhKHIuY3VtdWxhdGl2ZXx8e30pLmVuYWJsZWQpe3ZhciBhLG89QXJyYXkuaXNBcnJheShpKT9uWzBdLnB0c1tpWzBdXVtpWzFdXTpuW2ldLnB0cztpZih0LnBvaW50TnVtYmVycz1vLHQuYmluTnVtYmVyPXQucG9pbnROdW1iZXIsZGVsZXRlIHQucG9pbnROdW1iZXIsZGVsZXRlIHQucG9pbnRJbmRleCxyLl9pbmRleFRvUG9pbnRzKXthPVtdO2Zvcih2YXIgcz0wO3M8by5sZW5ndGg7cysrKWE9YS5jb25jYXQoci5faW5kZXhUb1BvaW50c1tvW3NdXSl9ZWxzZSBhPW87dC5wb2ludEluZGljZXM9YX1yZXR1cm4gdH19LHt9XSw5NzY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vYmFyL2hvdmVyXCIpLmhvdmVyUG9pbnRzLGk9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLmhvdmVyTGFiZWxUZXh0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1uKHQsZSxyLGEpO2lmKG8pe3ZhciBzPSh0PW9bMF0pLmNkW3QuaW5kZXhdLGw9dC5jZFswXS50cmFjZTtpZighbC5jdW11bGF0aXZlLmVuYWJsZWQpe3ZhciBjPVwiaFwiPT09bC5vcmllbnRhdGlvbj9cInlcIjpcInhcIjt0W2MrXCJMYWJlbFwiXT1pKHRbYytcImFcIl0scy5waDAscy5waDEpfXJldHVybiBsLmhvdmVybXBsYXRlJiYodC5ob3ZlcnRlbXBsYXRlPWwuaG92ZXJ0ZW1wbGF0ZSksb319fSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL2Jhci9ob3ZlclwiOjg0NX1dLDk3NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4ubGF5b3V0QXR0cmlidXRlcz10KFwiLi4vYmFyL2xheW91dF9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIiksbi5jcm9zc1RyYWNlRGVmYXVsdHM9dChcIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHNcIiksbi5zdXBwbHlMYXlvdXREZWZhdWx0cz10KFwiLi4vYmFyL2xheW91dF9kZWZhdWx0c1wiKSxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLmNyb3NzVHJhY2VDYWxjPXQoXCIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsY1wiKS5jcm9zc1RyYWNlQ2FsYyxuLnBsb3Q9dChcIi4uL2Jhci9wbG90XCIpLG4ubGF5ZXJOYW1lPVwiYmFybGF5ZXJcIixuLnN0eWxlPXQoXCIuLi9iYXIvc3R5bGVcIikuc3R5bGUsbi5zdHlsZU9uU2VsZWN0PXQoXCIuLi9iYXIvc3R5bGVcIikuc3R5bGVPblNlbGVjdCxuLmNvbG9yYmFyPXQoXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiKSxuLmhvdmVyUG9pbnRzPXQoXCIuL2hvdmVyXCIpLG4uc2VsZWN0UG9pbnRzPXQoXCIuLi9iYXIvc2VsZWN0XCIpLG4uZXZlbnREYXRhPXQoXCIuL2V2ZW50X2RhdGFcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJoaXN0b2dyYW1cIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIiksbi5jYXRlZ29yaWVzPVtcImNhcnRlc2lhblwiLFwic3ZnXCIsXCJiYXJcIixcImhpc3RvZ3JhbVwiLFwib3JpZW50ZWRcIixcImVycm9yQmFyc09LXCIsXCJzaG93TGVnZW5kXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGNcIjo4NDIsXCIuLi9iYXIvbGF5b3V0X2F0dHJpYnV0ZXNcIjo4NDcsXCIuLi9iYXIvbGF5b3V0X2RlZmF1bHRzXCI6ODQ4LFwiLi4vYmFyL3Bsb3RcIjo4NDksXCIuLi9iYXIvc2VsZWN0XCI6ODUwLFwiLi4vYmFyL3N0eWxlXCI6ODUyLFwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXJcIjoxMDcwLFwiLi9hdHRyaWJ1dGVzXCI6OTY2LFwiLi9jYWxjXCI6OTcxLFwiLi9jcm9zc190cmFjZV9kZWZhdWx0c1wiOjk3MyxcIi4vZGVmYXVsdHNcIjo5NzQsXCIuL2V2ZW50X2RhdGFcIjo5NzUsXCIuL2hvdmVyXCI6OTc2fV0sOTc4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtwZXJjZW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49MTAwL2UsaT0wO2k8cjtpKyspdFtpXSo9bn0scHJvYmFiaWxpdHk6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj0wO248cjtuKyspdFtuXS89ZX0sZGVuc2l0eTpmdW5jdGlvbih0LGUscixuKXt2YXIgaT10Lmxlbmd0aDtuPW58fDE7Zm9yKHZhciBhPTA7YTxpO2ErKyl0W2FdKj1yW2FdKm59LFwicHJvYmFiaWxpdHkgZGVuc2l0eVwiOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQubGVuZ3RoO24mJihlLz1uKTtmb3IodmFyIGE9MDthPGk7YSsrKXRbYV0qPXJbYV0vZX19fSx7fV0sOTc5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2hpc3RvZ3JhbS9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uL2hpc3RvZ3JhbS9iaW5fYXR0cmlidXRlc1wiKSxhPXQoXCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIiksbD10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCIpLGM9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9Yyh7eDpuLngseTpuLnksejp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sbWFya2VyOntjb2xvcjp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LGhpc3Rub3JtOm4uaGlzdG5vcm0saGlzdGZ1bmM6bi5oaXN0ZnVuYyxuYmluc3g6bi5uYmluc3gseGJpbnM6aShcInhcIiksbmJpbnN5Om4ubmJpbnN5LHliaW5zOmkoXCJ5XCIpLGF1dG9iaW54Om4uYXV0b2JpbngsYXV0b2Jpbnk6bi5hdXRvYmlueSx4Z2FwOmEueGdhcCx5Z2FwOmEueWdhcCx6c21vb3RoOmEuenNtb290aCx6aG92ZXJmb3JtYXQ6YS56aG92ZXJmb3JtYXQsaG92ZXJ0ZW1wbGF0ZTpvKHt9LHtrZXlzOlwielwifSl9LHMoXCJcIix7Y0xldHRlcjpcInpcIixhdXRvQ29sb3JEZmx0OiExfSkse2NvbG9yYmFyOmx9KX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCI6NTc5LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIjo1ODUsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXNcIjo5NDgsXCIuLi9oaXN0b2dyYW0vYXR0cmlidXRlc1wiOjk2NixcIi4uL2hpc3RvZ3JhbS9iaW5fYXR0cmlidXRlc1wiOjk2OH1dLDk4MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksYT10KFwiLi4vaGlzdG9ncmFtL2Jpbl9mdW5jdGlvbnNcIiksbz10KFwiLi4vaGlzdG9ncmFtL25vcm1fZnVuY3Rpb25zXCIpLHM9dChcIi4uL2hpc3RvZ3JhbS9hdmVyYWdlXCIpLGw9dChcIi4uL2hpc3RvZ3JhbS9iaW5fbGFiZWxfdmFsc1wiKTtmdW5jdGlvbiBjKHQsZSxyLGEsbyxzLGwpe3ZhciBjPWUrXCJiaW5zXCIsdT10W2NdO3V8fCh1PXRbY109e30pO3ZhciBoPXQuX2lucHV0W2NdfHx7fSxmPXQuX2F1dG9CaW49e307aC5zaXplfHxkZWxldGUgdS5zaXplLHZvaWQgMD09PWguc3RhcnQmJmRlbGV0ZSB1LnN0YXJ0LHZvaWQgMD09PWguZW5kJiZkZWxldGUgdS5lbmQ7dmFyIHA9IXUuc2l6ZSxkPXZvaWQgMD09PXUuc3RhcnQsZz12b2lkIDA9PT11LmVuZDtpZihwfHxkfHxnKXt2YXIgdj1pLmF1dG9CaW4ocixhLHRbXCJuYmluc1wiK2VdLFwiMmRcIixsLHUuc2l6ZSk7XCJoaXN0b2dyYW0yZGNvbnRvdXJcIj09PXQudHlwZSYmKGQmJih2LnN0YXJ0PXMoaS50aWNrSW5jcmVtZW50KG8odi5zdGFydCksdi5zaXplLCEwLGwpKSksZyYmKHYuZW5kPXMoaS50aWNrSW5jcmVtZW50KG8odi5lbmQpLHYuc2l6ZSwhMSxsKSkpKSxwJiYodS5zaXplPWYuc2l6ZT12LnNpemUpLGQmJih1LnN0YXJ0PWYuc3RhcnQ9di5zdGFydCksZyYmKHUuZW5kPWYuZW5kPXYuZW5kKX12YXIgbT1cImF1dG9iaW5cIitlOyExPT09dC5faW5wdXRbbV0mJih0Ll9pbnB1dFtjXT1uLmV4dGVuZEZsYXQoe30sdSksZGVsZXRlIHQuX2lucHV0W21dLGRlbGV0ZSB0W21dKX1mdW5jdGlvbiB1KHQsZSxyLG4pe3ZhciBpLGE9bmV3IEFycmF5KHQpO2lmKG4pZm9yKGk9MDtpPHQ7aSsrKWFbaV09MS8oZVtpKzFdLWVbaV0pO2Vsc2V7dmFyIG89MS9yO2ZvcihpPTA7aTx0O2krKylhW2ldPW99cmV0dXJuIGF9ZnVuY3Rpb24gaCh0LGUpe3JldHVybntzdGFydDp0KGUuc3RhcnQpLGVuZDp0KGUuZW5kKSxzaXplOmUuc2l6ZX19ZnVuY3Rpb24gZih0LGUscixuLGksYSl7dmFyIG8scz10Lmxlbmd0aC0xLGM9bmV3IEFycmF5KHMpO2lmKGUpZm9yKG89MDtvPHM7bysrKWNbb109W2Vbb10sZVtvXV07ZWxzZXt2YXIgdT1sKHIsbix0LGksYSk7Zm9yKG89MDtvPHM7bysrKWNbb109W3UodFtvXSksdSh0W28rMV0sITApXX1yZXR1cm4gY31lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixsLHAsZCxnPWkuZ2V0RnJvbUlkKHQsZS54YXhpc3x8XCJ4XCIpLHY9ZS54P2cubWFrZUNhbGNkYXRhKGUsXCJ4XCIpOltdLG09aS5nZXRGcm9tSWQodCxlLnlheGlzfHxcInlcIikseT1lLnk/bS5tYWtlQ2FsY2RhdGEoZSxcInlcIik6W10seD1lLnhjYWxlbmRhcixiPWUueWNhbGVuZGFyLF89ZnVuY3Rpb24odCl7cmV0dXJuIGcucjJjKHQsMCx4KX0sdz1mdW5jdGlvbih0KXtyZXR1cm4gbS5yMmModCwwLGIpfSxrPWZ1bmN0aW9uKHQpe3JldHVybiBnLmMycih0LDAseCl9LEE9ZnVuY3Rpb24odCl7cmV0dXJuIG0uYzJyKHQsMCxiKX0sVD1lLl9sZW5ndGg7di5sZW5ndGg+VCYmdi5zcGxpY2UoVCx2Lmxlbmd0aC1UKSx5Lmxlbmd0aD5UJiZ5LnNwbGljZShULHkubGVuZ3RoLVQpLGMoZSxcInhcIix2LGcsXyxrLHgpLGMoZSxcInlcIix5LG0sdyxBLGIpO3ZhciBNPVtdLFM9W10sRT1bXSxDPVwic3RyaW5nXCI9PXR5cGVvZiBlLnhiaW5zLnNpemUsTD1cInN0cmluZ1wiPT10eXBlb2YgZS55Ymlucy5zaXplLHo9W10sTz1bXSxJPUM/ejplLnhiaW5zLEQ9TD9POmUueWJpbnMsUD0wLFI9W10sRj1bXSxCPWUuaGlzdG5vcm0sTj1lLmhpc3RmdW5jLGo9LTEhPT1CLmluZGV4T2YoXCJkZW5zaXR5XCIpLFY9XCJtYXhcIj09PU58fFwibWluXCI9PT1OP251bGw6MCxVPWEuY291bnQscT1vW0JdLEg9ITEsRz1bXSxZPVtdLFc9XCJ6XCJpbiBlP2UuejpcIm1hcmtlclwiaW4gZSYmQXJyYXkuaXNBcnJheShlLm1hcmtlci5jb2xvcik/ZS5tYXJrZXIuY29sb3I6XCJcIjtXJiZcImNvdW50XCIhPT1OJiYoSD1cImF2Z1wiPT09TixVPWFbTl0pO3ZhciBYPWUueGJpbnMsWj1fKFguc3RhcnQpLCQ9XyhYLmVuZCkrKFotaS50aWNrSW5jcmVtZW50KFosWC5zaXplLCExLHgpKS8xZTY7Zm9yKHI9WjtyPCQ7cj1pLnRpY2tJbmNyZW1lbnQocixYLnNpemUsITEseCkpUy5wdXNoKFYpLHoucHVzaChyKSxIJiZFLnB1c2goMCk7ei5wdXNoKHIpO3ZhciBKPVMubGVuZ3RoLEs9XyhlLnhiaW5zLnN0YXJ0KSxRPShyLUspL0osdHQ9ayhLK1EvMik7Zm9yKFo9dygoWD1lLnliaW5zKS5zdGFydCksJD13KFguZW5kKSsoWi1pLnRpY2tJbmNyZW1lbnQoWixYLnNpemUsITEsYikpLzFlNixyPVo7cjwkO3I9aS50aWNrSW5jcmVtZW50KHIsWC5zaXplLCExLGIpKXtNLnB1c2goUy5zbGljZSgpKSxPLnB1c2gocik7dmFyIGV0PW5ldyBBcnJheShKKTtmb3IobD0wO2w8SjtsKyspZXRbbF09W107Ri5wdXNoKGV0KSxIJiZSLnB1c2goRS5zbGljZSgpKX1PLnB1c2gocik7dmFyIHJ0PU0ubGVuZ3RoLG50PXcoZS55Ymlucy5zdGFydCksaXQ9KHItbnQpL3J0LGF0PUEobnQraXQvMik7aiYmKEc9dShTLmxlbmd0aCxJLFEsQyksWT11KE0ubGVuZ3RoLEQsaXQsTCkpLEN8fFwiZGF0ZVwiIT09Zy50eXBlfHwoST1oKF8sSSkpLEx8fFwiZGF0ZVwiIT09bS50eXBlfHwoRD1oKHcsRCkpO3ZhciBvdD0hMCxzdD0hMCxsdD1uZXcgQXJyYXkoSiksY3Q9bmV3IEFycmF5KHJ0KSx1dD0xLzAsaHQ9MS8wLGZ0PTEvMCxwdD0xLzA7Zm9yKHI9MDtyPFQ7cisrKXt2YXIgZHQ9dltyXSxndD15W3JdO3A9bi5maW5kQmluKGR0LEkpLGQ9bi5maW5kQmluKGd0LEQpLHA+PTAmJnA8SiYmZD49MCYmZDxydCYmKFArPVUocCxyLE1bZF0sVyxSW2RdKSxGW2RdW3BdLnB1c2gociksb3QmJih2b2lkIDA9PT1sdFtwXT9sdFtwXT1kdDpsdFtwXSE9PWR0JiYob3Q9ITEpKSxzdCYmKHZvaWQgMD09PWN0W3BdP2N0W3BdPWd0OmN0W3BdIT09Z3QmJihzdD0hMSkpLHV0PU1hdGgubWluKHV0LGR0LXpbcF0pLGh0PU1hdGgubWluKGh0LHpbcCsxXS1kdCksZnQ9TWF0aC5taW4oZnQsZ3QtT1tkXSkscHQ9TWF0aC5taW4ocHQsT1tkKzFdLWd0KSl9aWYoSClmb3IoZD0wO2Q8cnQ7ZCsrKVArPXMoTVtkXSxSW2RdKTtpZihxKWZvcihkPTA7ZDxydDtkKyspcShNW2RdLFAsRyxZW2RdKTtyZXR1cm57eDp2LHhSYW5nZXM6Zih6LG90JiZsdCx1dCxodCxnLHgpLHgwOnR0LGR4OlEseTp5LHlSYW5nZXM6ZihPLHN0JiZjdCxmdCxwdCxtLGIpLHkwOmF0LGR5Oml0LHo6TSxwdHM6Rn19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL2hpc3RvZ3JhbS9hdmVyYWdlXCI6OTY3LFwiLi4vaGlzdG9ncmFtL2Jpbl9mdW5jdGlvbnNcIjo5NjksXCIuLi9oaXN0b2dyYW0vYmluX2xhYmVsX3ZhbHNcIjo5NzAsXCIuLi9oaXN0b2dyYW0vbm9ybV9mdW5jdGlvbnNcIjo5Nzh9XSw5ODE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKS5CQUROVU0sYT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCIpLG89dChcIi4uLy4uL2xpYlwiKSxzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbD1bXCJ4XCIsXCJ5XCJdO2Z1bmN0aW9uIGModCxlLHIscyl7dmFyIGw9clthLmlkMm5hbWUodFtlK1wiYXhpc1wiXSldLnR5cGUsYz1lK1wiYmluc1wiLHU9dFtjXSxoPXRbZStcImNhbGVuZGFyXCJdO3V8fCh1PXRbY109e30pO3ZhciBmPVwiZGF0ZVwiPT09bD9mdW5jdGlvbih0LGUpe3JldHVybiB0fHwwPT09dD9vLmNsZWFuRGF0ZSh0LGksaCk6ZX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0KT9OdW1iZXIodCk6ZX07dS5zdGFydD1mKHUuc3RhcnQscy5zdGFydCksdS5lbmQ9Zih1LmVuZCxzLmVuZCk7dmFyIHA9cy5zaXplLGQ9dS5zaXplO2lmKG4oZCkpdS5zaXplPWQ+MD9OdW1iZXIoZCk6cDtlbHNlIGlmKFwic3RyaW5nXCIhPXR5cGVvZiBkKXUuc2l6ZT1wO2Vsc2V7dmFyIGc9ZC5jaGFyQXQoMCksdj1kLnN1YnN0cigxKTsoKHY9bih2KT9OdW1iZXIodik6MCk8PTB8fFwiZGF0ZVwiIT09bHx8XCJNXCIhPT1nfHx2IT09TWF0aC5yb3VuZCh2KSkmJih1LnNpemU9cCl9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhO2Z1bmN0aW9uIHUodCl7cmV0dXJuIG8uY29lcmNlKGkuX2lucHV0LGkscyx0KX1mb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgaD0oaT10W3JdKS50eXBlO2lmKFwiaGlzdG9ncmFtMmRcIj09PWh8fFwiaGlzdG9ncmFtMmRjb250b3VyXCI9PT1oKWZvcihuPTA7bjxsLmxlbmd0aDtuKyspe3ZhciBmPShhPWxbbl0pK1wiYmluc1wiLHA9KGkuX2F1dG9CaW58fHt9KVthXXx8e307dShmK1wiLnN0YXJ0XCIscC5zdGFydCksdShmK1wiLmVuZFwiLHAuZW5kKSx1KGYrXCIuc2l6ZVwiLHAuc2l6ZSksYyhpLGEsZSxwKSwoaVtmXXx8e30pLnNpemV8fHUoXCJuYmluc1wiK2EpfX19fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCI6NzUyLFwiLi9hdHRyaWJ1dGVzXCI6OTc5LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSw5ODI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vc2FtcGxlX2RlZmF1bHRzXCIpLGE9dChcIi4uL2hlYXRtYXAvc3R5bGVfZGVmYXVsdHNcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCIpLHM9dChcIi4vYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7ZnVuY3Rpb24gYyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfWkodCxlLGMsbCksITEhPT1lLnZpc2libGUmJihhKHQsZSxjLGwpLG8odCxlLGwsYyx7cHJlZml4OlwiXCIsY0xldHRlcjpcInpcIn0pLGMoXCJob3ZlcnRlbXBsYXRlXCIpKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiOjU4OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL2hlYXRtYXAvc3R5bGVfZGVmYXVsdHNcIjo5NjEsXCIuL2F0dHJpYnV0ZXNcIjo5NzksXCIuL3NhbXBsZV9kZWZhdWx0c1wiOjk4NX1dLDk4MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9oZWF0bWFwL2hvdmVyXCIpLGk9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLmhvdmVyTGFiZWxUZXh0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8scyl7dmFyIGw9bih0LGUscixhLG8scyk7aWYobCl7dmFyIGM9KHQ9bFswXSkuaW5kZXgsdT1jWzBdLGg9Y1sxXSxmPXQuY2RbMF0scD1mLnhSYW5nZXNbaF0sZD1mLnlSYW5nZXNbdV07cmV0dXJuIHQueExhYmVsPWkodC54YSxwWzBdLHBbMV0pLHQueUxhYmVsPWkodC55YSxkWzBdLGRbMV0pLGx9fX0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9oZWF0bWFwL2hvdmVyXCI6OTU1fV0sOTg0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNyb3NzVHJhY2VEZWZhdWx0cz10KFwiLi9jcm9zc190cmFjZV9kZWZhdWx0c1wiKSxuLmNhbGM9dChcIi4uL2hlYXRtYXAvY2FsY1wiKSxuLnBsb3Q9dChcIi4uL2hlYXRtYXAvcGxvdFwiKSxuLmxheWVyTmFtZT1cImhlYXRtYXBsYXllclwiLG4uY29sb3JiYXI9dChcIi4uL2hlYXRtYXAvY29sb3JiYXJcIiksbi5zdHlsZT10KFwiLi4vaGVhdG1hcC9zdHlsZVwiKSxuLmhvdmVyUG9pbnRzPXQoXCIuL2hvdmVyXCIpLG4uZXZlbnREYXRhPXQoXCIuLi9oaXN0b2dyYW0vZXZlbnRfZGF0YVwiKSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cImhpc3RvZ3JhbTJkXCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCIpLG4uY2F0ZWdvcmllcz1bXCJjYXJ0ZXNpYW5cIixcInN2Z1wiLFwiMmRNYXBcIixcImhpc3RvZ3JhbVwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiOjc2MCxcIi4uL2hlYXRtYXAvY2FsY1wiOjk0OSxcIi4uL2hlYXRtYXAvY29sb3JiYXJcIjo5NTEsXCIuLi9oZWF0bWFwL3Bsb3RcIjo5NTksXCIuLi9oZWF0bWFwL3N0eWxlXCI6OTYwLFwiLi4vaGlzdG9ncmFtL2V2ZW50X2RhdGFcIjo5NzUsXCIuL2F0dHJpYnV0ZXNcIjo5NzksXCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzXCI6OTgxLFwiLi9kZWZhdWx0c1wiOjk4MixcIi4vaG92ZXJcIjo5ODN9XSw5ODU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIiksaT10KFwiLi4vLi4vbGliXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1yKFwieFwiKSxzPXIoXCJ5XCIpLGw9aS5taW5Sb3dMZW5ndGgobyksYz1pLm1pblJvd0xlbmd0aChzKTtsJiZjPyhlLl9sZW5ndGg9TWF0aC5taW4obCxjKSxuLmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiaGFuZGxlVHJhY2VEZWZhdWx0c1wiKSh0LGUsW1wieFwiLFwieVwiXSxhKSwocihcInpcIil8fHIoXCJtYXJrZXIuY29sb3JcIikpJiZyKFwiaGlzdGZ1bmNcIikscihcImhpc3Rub3JtXCIpLHIoXCJhdXRvYmlueFwiKSxyKFwiYXV0b2JpbnlcIikpOmUudmlzaWJsZT0hMX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5fV0sOTg2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL2hpc3RvZ3JhbTJkL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vY29udG91ci9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXMoe3g6bi54LHk6bi55LHo6bi56LG1hcmtlcjpuLm1hcmtlcixoaXN0bm9ybTpuLmhpc3Rub3JtLGhpc3RmdW5jOm4uaGlzdGZ1bmMsbmJpbnN4Om4ubmJpbnN4LHhiaW5zOm4ueGJpbnMsbmJpbnN5Om4ubmJpbnN5LHliaW5zOm4ueWJpbnMsYXV0b2Jpbng6bi5hdXRvYmlueCxhdXRvYmlueTpuLmF1dG9iaW55LGF1dG9jb250b3VyOmkuYXV0b2NvbnRvdXIsbmNvbnRvdXJzOmkubmNvbnRvdXJzLGNvbnRvdXJzOmkuY29udG91cnMsbGluZTppLmxpbmUsemhvdmVyZm9ybWF0Om4uemhvdmVyZm9ybWF0LGhvdmVydGVtcGxhdGU6bi5ob3ZlcnRlbXBsYXRlfSxhKFwiXCIse2NMZXR0ZXI6XCJ6XCIsZWRpdFR5cGVPdmVycmlkZTpcImNhbGNcIn0pLHtjb2xvcmJhcjpvfSl9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uL2NvbnRvdXIvYXR0cmlidXRlc1wiOjkxOSxcIi4uL2hpc3RvZ3JhbTJkL2F0dHJpYnV0ZXNcIjo5Nzl9XSw5ODc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uL2hpc3RvZ3JhbTJkL3NhbXBsZV9kZWZhdWx0c1wiKSxhPXQoXCIuLi9jb250b3VyL2NvbnRvdXJzX2RlZmF1bHRzXCIpLG89dChcIi4uL2NvbnRvdXIvc3R5bGVfZGVmYXVsdHNcIikscz10KFwiLi9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiBjKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9aSh0LGUsYyxsKSwhMSE9PWUudmlzaWJsZSYmKGEodCxlLGMsZnVuY3Rpb24ocil7cmV0dXJuIG4uY29lcmNlMih0LGUscyxyKX0pLG8odCxlLGMsbCksYyhcImhvdmVydGVtcGxhdGVcIikpfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vY29udG91ci9jb250b3Vyc19kZWZhdWx0c1wiOjkyNixcIi4uL2NvbnRvdXIvc3R5bGVfZGVmYXVsdHNcIjo5NDAsXCIuLi9oaXN0b2dyYW0yZC9zYW1wbGVfZGVmYXVsdHNcIjo5ODUsXCIuL2F0dHJpYnV0ZXNcIjo5ODZ9XSw5ODg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLG4uY3Jvc3NUcmFjZURlZmF1bHRzPXQoXCIuLi9oaXN0b2dyYW0yZC9jcm9zc190cmFjZV9kZWZhdWx0c1wiKSxuLmNhbGM9dChcIi4uL2NvbnRvdXIvY2FsY1wiKSxuLnBsb3Q9dChcIi4uL2NvbnRvdXIvcGxvdFwiKS5wbG90LG4ubGF5ZXJOYW1lPVwiY29udG91cmxheWVyXCIsbi5zdHlsZT10KFwiLi4vY29udG91ci9zdHlsZVwiKSxuLmNvbG9yYmFyPXQoXCIuLi9jb250b3VyL2NvbG9yYmFyXCIpLG4uaG92ZXJQb2ludHM9dChcIi4uL2NvbnRvdXIvaG92ZXJcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJoaXN0b2dyYW0yZGNvbnRvdXJcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIiksbi5jYXRlZ29yaWVzPVtcImNhcnRlc2lhblwiLFwic3ZnXCIsXCIyZE1hcFwiLFwiY29udG91clwiLFwiaGlzdG9ncmFtXCIsXCJzaG93TGVnZW5kXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi4vY29udG91ci9jYWxjXCI6OTIwLFwiLi4vY29udG91ci9jb2xvcmJhclwiOjkyMixcIi4uL2NvbnRvdXIvaG92ZXJcIjo5MzIsXCIuLi9jb250b3VyL3Bsb3RcIjo5MzcsXCIuLi9jb250b3VyL3N0eWxlXCI6OTM5LFwiLi4vaGlzdG9ncmFtMmQvY3Jvc3NfdHJhY2VfZGVmYXVsdHNcIjo5ODEsXCIuL2F0dHJpYnV0ZXNcIjo5ODYsXCIuL2RlZmF1bHRzXCI6OTg3fV0sOTg5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxvPXQoXCIuLi9tZXNoM2QvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCIpLGw9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxjPXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsO3ZhciB1PWUuZXhwb3J0cz1jKGwoe3g6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCJ9LHk6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCJ9LHo6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCJ9LHZhbHVlOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwifSxpc29taW46e3ZhbFR5cGU6XCJudW1iZXJcIn0saXNvbWF4Ont2YWxUeXBlOlwibnVtYmVyXCJ9LHN1cmZhY2U6e3Nob3c6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMH0sY291bnQ6e3ZhbFR5cGU6XCJpbnRlZ2VyXCIsZGZsdDoyLG1pbjoxfSxmaWxsOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDoxfSxwYXR0ZXJuOnt2YWxUeXBlOlwiZmxhZ2xpc3RcIixmbGFnczpbXCJBXCIsXCJCXCIsXCJDXCIsXCJEXCIsXCJFXCJdLGV4dHJhczpbXCJhbGxcIixcIm9kZFwiLFwiZXZlblwiXSxkZmx0OlwiYWxsXCJ9fSxzcGFjZWZyYW1lOntzaG93Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LGZpbGw6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0Oi4xNX19LHNsaWNlczp7eDp7c2hvdzp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxsb2NhdGlvbnM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZGZsdDpbXX0sZmlsbDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MX19LHk6e3Nob3c6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sbG9jYXRpb25zOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGRmbHQ6W119LGZpbGw6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjF9fSx6OntzaG93Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LGxvY2F0aW9uczp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixkZmx0OltdfSxmaWxsOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDoxfX19LGNhcHM6e3g6e3Nob3c6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMH0sZmlsbDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MX19LHk6e3Nob3c6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMH0sZmlsbDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MX19LHo6e3Nob3c6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMH0sZmlsbDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MX19fSx0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGFycmF5T2s6ITB9LGhvdmVydGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixhcnJheU9rOiEwfSxob3ZlcnRlbXBsYXRlOmEoKX0sbihcIlwiLHtjb2xvckF0dHI6XCJgdmFsdWVgXCIsc2hvd1NjYWxlRGZsdDohMCxlZGl0VHlwZU92ZXJyaWRlOlwiY2FsY1wifSkse2NvbG9yYmFyOmksb3BhY2l0eTpvLm9wYWNpdHksbGlnaHRwb3NpdGlvbjpvLmxpZ2h0cG9zaXRpb24sbGlnaHRpbmc6by5saWdodGluZyxmbGF0c2hhZGluZzpvLmZsYXRzaGFkaW5nLGNvbnRvdXI6by5jb250b3VyLGhvdmVyaW5mbzpsKHt9LHMuaG92ZXJpbmZvKX0pLFwiY2FsY1wiLFwibmVzdGVkXCIpO3UuZmxhdHNoYWRpbmcuZGZsdD0hMCx1LmxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvbi5kZmx0PTAsdS54LmVkaXRUeXBlPXUueS5lZGl0VHlwZT11LnouZWRpdFR5cGU9dS52YWx1ZS5lZGl0VHlwZT1cImNhbGMrY2xlYXJBeGlzVHlwZXNcIix1LnRyYW5zZm9ybXM9dm9pZCAwfSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIjo1NzksXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi4vbWVzaDNkL2F0dHJpYnV0ZXNcIjo5OTR9XSw5OTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZS5fbGVuPU1hdGgubWluKGUueC5sZW5ndGgsZS55Lmxlbmd0aCxlLnoubGVuZ3RoLGUudmFsdWUubGVuZ3RoKTtmb3IodmFyIHI9MS8wLGk9LTEvMCxhPWUudmFsdWUubGVuZ3RoLG89MDtvPGE7bysrKXt2YXIgcz1lLnZhbHVlW29dO3I9TWF0aC5taW4ocixzKSxpPU1hdGgubWF4KGkscyl9ZS5fbWluVmFsdWVzPXIsZS5fbWF4VmFsdWVzPWksZS5fdk1pbj12b2lkIDA9PT1lLmlzb21pbnx8bnVsbD09PWUuaXNvbWluP3I6ZS5pc29taW4sZS5fdk1heD12b2lkIDA9PT1lLmlzb21heHx8bnVsbD09PWUuaXNvbWluP2k6ZS5pc29tYXgsbih0LGUse3ZhbHM6W2UuX3ZNaW4sZS5fdk1heF0sY29udGFpbmVyU3RyOlwiXCIsY0xldHRlcjpcImNcIn0pfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIjo1ODZ9XSw5OTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2wtbWVzaDNkXCIpLGk9dChcIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3JcIikucGFyc2VDb2xvclNjYWxlLGE9dChcIi4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIiksbz10KFwiLi4vLi4vcGxvdHMvZ2wzZC96aXAzXCIpLHM9dChcIi4uLy4uL2xpYlwiKTtmdW5jdGlvbiBsKHQpe3JldHVybiBzLmRpc3RpbmN0VmFscyh0KS52YWxzfXZhciBjPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUubGVuZ3RoLTE7cj4wO3ItLSl7dmFyIG49TWF0aC5taW4oZVtyXSxlW3ItMV0pLGk9TWF0aC5tYXgoZVtyXSxlW3ItMV0pO2lmKGk+biYmbjx0JiZ0PD1pKXJldHVybntpZDpyLGRpc3RSYXRpbzooaS10KS8oaS1uKX19cmV0dXJue2lkOjAsZGlzdFJhdGlvOjB9fTtmdW5jdGlvbiB1KHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLm1lc2g9ZSx0aGlzLm5hbWU9XCJcIix0aGlzLmRhdGE9bnVsbCx0aGlzLnNob3dDb250b3VyPSExfXZhciBoPXUucHJvdG90eXBlO2Z1bmN0aW9uIGYodCl7dC5faT1bXSx0Ll9qPVtdLHQuX2s9W107dmFyIGUscixuPXQuc3VyZmFjZS5zaG93LGk9dC5zcGFjZWZyYW1lLnNob3csYT10LnN1cmZhY2UuZmlsbCxvPXQuc3BhY2VmcmFtZS5maWxsLHM9ITEsdT0hMSxoPTAsZj1sKHQueC5zbGljZSgwLHQuX2xlbikpLHA9bCh0Lnkuc2xpY2UoMCx0Ll9sZW4pKSxkPWwodC56LnNsaWNlKDAsdC5fbGVuKSksZz1mLmxlbmd0aCx2PXAubGVuZ3RoLG09ZC5sZW5ndGg7ZnVuY3Rpb24geSh0LGUscil7cmV0dXJuIHIrbSplK20qdip0fXZhciB4LGIsXyx3LGssQT10Ll9taW5WYWx1ZXMsVD10Ll9tYXhWYWx1ZXMsTT10Ll92TWluLFM9dC5fdk1heDtmdW5jdGlvbiBFKHQsZSxuKXtmb3IodmFyIGk9dy5sZW5ndGgsYT1yO2E8aTthKyspaWYodD09PXhbYV0mJmU9PT1iW2FdJiZuPT09X1thXSlyZXR1cm4gYTtyZXR1cm4tMX1mdW5jdGlvbiBDKCl7cj1lfWZ1bmN0aW9uIEwoKXt4PVtdLGI9W10sXz1bXSx3PVtdLGU9MCxDKCl9ZnVuY3Rpb24geih0LHIsbixpKXtyZXR1cm4geC5wdXNoKHQpLGIucHVzaChyKSxfLnB1c2gobiksdy5wdXNoKGkpLCsrZS0xfWZ1bmN0aW9uIE8odCxlLHIpe2Zvcih2YXIgbj1bXSxpPTA7aTx0Lmxlbmd0aDtpKyspbltpXT10W2ldKigxLXIpK3IqZVtpXTtyZXR1cm4gbn1mdW5jdGlvbiBJKHQpe2s9dH1mdW5jdGlvbiBEKHQsZSl7cmV0dXJuXCJhbGxcIj09PXR8fG51bGw9PT10fHx0LmluZGV4T2YoZSk+LTF9ZnVuY3Rpb24gUCh0LGUpe3JldHVybiBudWxsPT09dD9lOnR9ZnVuY3Rpb24gUihlLHIsbil7QygpO3ZhciBpLGEsbyxzPVtyXSxsPVtuXTtpZihrPj0xKXM9W3JdLGw9W25dO2Vsc2UgaWYoaz4wKXt2YXIgYz1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0sbj10WzFdLGk9dFsyXSxhPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49W10saT0wO2k8dC5sZW5ndGg7aSsrKW5baV09KHRbaV0rZVtpXStyW2ldKS8zO3JldHVybiBufShyLG4saSksbz1NYXRoLnNxcnQoMS1rKSxzPU8oYSxyLG8pLGw9TyhhLG4sbyksYz1PKGEsaSxvKSx1PWVbMF0saD1lWzFdLGY9ZVsyXTtyZXR1cm57eHl6djpbW3IsbixsXSxbbCxzLHJdLFtuLGksY10sW2MsbCxuXSxbaSxyLHNdLFtzLGMsaV1dLGFiYzpbW3UsaCwtMV0sWy0xLC0xLHVdLFtoLGYsLTFdLFstMSwtMSxoXSxbZix1LC0xXSxbLTEsLTEsZl1dfX0ocixuKTtzPWMueHl6dixsPWMuYWJjfWZvcih2YXIgdT0wO3U8cy5sZW5ndGg7dSsrKXtyPXNbdV0sbj1sW3VdO2Zvcih2YXIgZj1bXSxwPTA7cDwzO3ArKyl7dmFyIGQ9cltwXVswXSxnPXJbcF1bMV0sdj1yW3BdWzJdLG09cltwXVszXSx5PW5bcF0+LTE/bltwXTpFKGQsZyx2KTtmW3BdPXk+LTE/eTp6KGQsZyx2LFAoZSxtKSl9aT1mWzBdLGE9ZlsxXSxvPWZbMl0sdC5faS5wdXNoKGkpLHQuX2oucHVzaChhKSx0Ll9rLnB1c2gobyksKytofX1mdW5jdGlvbiBGKHQsZSxyLG4pe3ZhciBpPXRbM107aTxyJiYoaT1yKSxpPm4mJihpPW4pO2Zvcih2YXIgYT0odFszXS1pKS8odFszXS1lWzNdKzFlLTkpLG89W10scz0wO3M8NDtzKyspb1tzXT0oMS1hKSp0W3NdK2EqZVtzXTtyZXR1cm4gb31mdW5jdGlvbiBCKHQsZSxyKXtyZXR1cm4gdD49ZSYmdDw9cn1mdW5jdGlvbiBOKHQpe3ZhciBlPS4wMDEqKFMtTSk7cmV0dXJuIHQ+PU0tZSYmdDw9UytlfWZ1bmN0aW9uIGooZSl7Zm9yKHZhciByPVtdLG49MDtuPDQ7bisrKXt2YXIgaT1lW25dO3IucHVzaChbdC54W2ldLHQueVtpXSx0LnpbaV0sdC52YWx1ZVtpXV0pfXJldHVybiByfXZhciBWPTM7ZnVuY3Rpb24gVSh0LGUscixuLGksYSl7YXx8KGE9MSkscj1bLTEsLTEsLTFdO3ZhciBvPSExLHM9W0IoZVswXVszXSxuLGkpLEIoZVsxXVszXSxuLGkpLEIoZVsyXVszXSxuLGkpXTtpZighc1swXSYmIXNbMV0mJiFzWzJdKXJldHVybiExO3ZhciBsPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gTihlWzBdWzNdKSYmTihlWzFdWzNdKSYmTihlWzJdWzNdKT8oUih0LGUsciksITApOmE8ViYmVSh0LGUscixNLFMsKythKX07aWYoc1swXSYmc1sxXSYmc1syXSlyZXR1cm4gbCh0LGUscil8fG87dmFyIGM9ITE7cmV0dXJuW1swLDEsMl0sWzIsMCwxXSxbMSwyLDBdXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2lmKHNbYVswXV0mJnNbYVsxXV0mJiFzW2FbMl1dKXt2YXIgdT1lW2FbMF1dLGg9ZVthWzFdXSxmPWVbYVsyXV0scD1GKGYsdSxuLGkpLGQ9RihmLGgsbixpKTtvPWwodCxbZCxwLHVdLFstMSwtMSxyW2FbMF1dXSl8fG8sbz1sKHQsW3UsaCxkXSxbclthWzBdXSxyW2FbMV1dLC0xXSl8fG8sYz0hMH19KSxjP286KFtbMCwxLDJdLFsxLDIsMF0sWzIsMCwxXV0uZm9yRWFjaChmdW5jdGlvbihhKXtpZihzW2FbMF1dJiYhc1thWzFdXSYmIXNbYVsyXV0pe3ZhciB1PWVbYVswXV0saD1lW2FbMV1dLGY9ZVthWzJdXSxwPUYoaCx1LG4saSksZD1GKGYsdSxuLGkpO289bCh0LFtkLHAsdV0sWy0xLC0xLHJbYVswXV1dKXx8byxjPSEwfX0pLG8pfWZ1bmN0aW9uIHEodCxlLHIsbil7dmFyIGk9ITEsYT1qKGUpLG89W0IoYVswXVszXSxyLG4pLEIoYVsxXVszXSxyLG4pLEIoYVsyXVszXSxyLG4pLEIoYVszXVszXSxyLG4pXTtpZighKG9bMF18fG9bMV18fG9bMl18fG9bM10pKXJldHVybiBpO2lmKG9bMF0mJm9bMV0mJm9bMl0mJm9bM10pcmV0dXJuIHUmJihpPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1mdW5jdGlvbihuLGksYSl7Uih0LFtlW25dLGVbaV0sZVthXV0sW3Jbbl0scltpXSxyW2FdXSl9O24oMCwxLDIpLG4oMywwLDEpLG4oMiwzLDApLG4oMSwyLDMpfSh0LGEsZSl8fGkpLGk7dmFyIHM9ITE7cmV0dXJuW1swLDEsMiwzXSxbMywwLDEsMl0sWzIsMywwLDFdLFsxLDIsMywwXV0uZm9yRWFjaChmdW5jdGlvbihsKXtpZihvW2xbMF1dJiZvW2xbMV1dJiZvW2xbMl1dJiYhb1tsWzNdXSl7dmFyIGM9YVtsWzBdXSxoPWFbbFsxXV0sZj1hW2xbMl1dLHA9YVtsWzNdXTtpZih1KWk9Uih0LFtjLGgsZl0sW2VbbFswXV0sZVtsWzFdXSxlW2xbMl1dXSl8fGk7ZWxzZXt2YXIgZD1GKHAsYyxyLG4pLGc9RihwLGgscixuKSx2PUYocCxmLHIsbik7aT1SKG51bGwsW2QsZyx2XSxbLTEsLTEsLTFdKXx8aX1zPSEwfX0pLHM/aTooW1swLDEsMiwzXSxbMSwyLDMsMF0sWzIsMywwLDFdLFszLDAsMSwyXSxbMCwyLDMsMV0sWzEsMywyLDBdXS5mb3JFYWNoKGZ1bmN0aW9uKGwpe2lmKG9bbFswXV0mJm9bbFsxXV0mJiFvW2xbMl1dJiYhb1tsWzNdXSl7dmFyIGM9YVtsWzBdXSxoPWFbbFsxXV0sZj1hW2xbMl1dLHA9YVtsWzNdXSxkPUYoZixjLHIsbiksZz1GKGYsaCxyLG4pLHY9RihwLGgscixuKSxtPUYocCxjLHIsbik7dT8oaT1SKHQsW2MsbSxkXSxbZVtsWzBdXSwtMSwtMV0pfHxpLGk9Uih0LFtoLGcsdl0sW2VbbFsxXV0sLTEsLTFdKXx8aSk6aT1mdW5jdGlvbih0LGUscil7dmFyIG49ZnVuY3Rpb24obixpLGEpe1IodCxbZVtuXSxlW2ldLGVbYV1dLFtyW25dLHJbaV0sclthXV0pfTtuKDAsMSwyKSxuKDIsMywwKX0obnVsbCxbZCxnLHYsbV0sWy0xLC0xLC0xLC0xXSl8fGkscz0hMH19KSxzP2k6KFtbMCwxLDIsM10sWzEsMiwzLDBdLFsyLDMsMCwxXSxbMywwLDEsMl1dLmZvckVhY2goZnVuY3Rpb24obCl7aWYob1tsWzBdXSYmIW9bbFsxXV0mJiFvW2xbMl1dJiYhb1tsWzNdXSl7dmFyIGM9YVtsWzBdXSxoPWFbbFsxXV0sZj1hW2xbMl1dLHA9YVtsWzNdXSxkPUYoaCxjLHIsbiksZz1GKGYsYyxyLG4pLHY9RihwLGMscixuKTt1PyhpPVIodCxbYyxkLGddLFtlW2xbMF1dLC0xLC0xXSl8fGksaT1SKHQsW2MsZyx2XSxbZVtsWzBdXSwtMSwtMV0pfHxpLGk9Uih0LFtjLHYsZF0sW2VbbFswXV0sLTEsLTFdKXx8aSk6aT1SKG51bGwsW2QsZyx2XSxbLTEsLTEsLTFdKXx8aSxzPSEwfX0pLGkpKX1mdW5jdGlvbiBIKHQsZSxyLG4saSxhLG8sbCxjLGgsZil7dmFyIHA9ITE7cmV0dXJuIHMmJihEKHQsXCJBXCIpJiYocD1xKG51bGwsW2UscixuLGFdLGgsZil8fHApLEQodCxcIkJcIikmJihwPXEobnVsbCxbcixuLGksY10saCxmKXx8cCksRCh0LFwiQ1wiKSYmKHA9cShudWxsLFtyLGEsbyxjXSxoLGYpfHxwKSxEKHQsXCJEXCIpJiYocD1xKG51bGwsW24sYSxsLGNdLGgsZil8fHApLEQodCxcIkVcIikmJihwPXEobnVsbCxbcixuLGEsY10saCxmKXx8cCkpLHUmJihwPXEodCxbcixuLGEsY10saCxmKXx8cCkscH1mdW5jdGlvbiBHKHQsZSxyLG4saSxhLG8scyl7cmV0dXJuWyEwPT09c1swXXx8VSh0LGooW2UscixuXSksW2UscixuXSxhLG8pLCEwPT09c1sxXXx8VSh0LGooW24saSxlXSksW24saSxlXSxhLG8pXX1mdW5jdGlvbiBZKHQsZSxyLG4saSxhLG8scyxsKXtyZXR1cm4gcz9HKHQsZSxyLGksbixhLG8sbCk6Ryh0LHIsaSxuLGUsYSxvLGwpfWZ1bmN0aW9uIFcodCxlLHIsbixpLGEsbyl7dmFyIHMsbCxjLHUsaD0hMSxmPWZ1bmN0aW9uKCl7aD1VKHQsW3MsbCxjXSxbLTEsLTEsLTFdLGksYSl8fGgsaD1VKHQsW2MsdSxzXSxbLTEsLTEsLTFdLGksYSl8fGh9LHA9b1swXSxkPW9bMV0sZz1vWzJdO3JldHVybiBwJiYocz1PKGooW3koZSxyLTAsbi0wKV0pWzBdLGooW3koZS0xLHItMCxuLTApXSlbMF0scCksbD1PKGooW3koZSxyLTAsbi0xKV0pWzBdLGooW3koZS0xLHItMCxuLTEpXSlbMF0scCksYz1PKGooW3koZSxyLTEsbi0xKV0pWzBdLGooW3koZS0xLHItMSxuLTEpXSlbMF0scCksdT1PKGooW3koZSxyLTEsbi0wKV0pWzBdLGooW3koZS0xLHItMSxuLTApXSlbMF0scCksZigpKSxkJiYocz1PKGooW3koZS0wLHIsbi0wKV0pWzBdLGooW3koZS0wLHItMSxuLTApXSlbMF0sZCksbD1PKGooW3koZS0wLHIsbi0xKV0pWzBdLGooW3koZS0wLHItMSxuLTEpXSlbMF0sZCksYz1PKGooW3koZS0xLHIsbi0xKV0pWzBdLGooW3koZS0xLHItMSxuLTEpXSlbMF0sZCksdT1PKGooW3koZS0xLHIsbi0wKV0pWzBdLGooW3koZS0xLHItMSxuLTApXSlbMF0sZCksZigpKSxnJiYocz1PKGooW3koZS0wLHItMCxuKV0pWzBdLGooW3koZS0wLHItMCxuLTEpXSlbMF0sZyksbD1PKGooW3koZS0wLHItMSxuKV0pWzBdLGooW3koZS0wLHItMSxuLTEpXSlbMF0sZyksYz1PKGooW3koZS0xLHItMSxuKV0pWzBdLGooW3koZS0xLHItMSxuLTEpXSlbMF0sZyksdT1PKGooW3koZS0xLHItMCxuKV0pWzBdLGooW3koZS0xLHItMCxuLTEpXSlbMF0sZyksZigpKSxofWZ1bmN0aW9uIFgodCxlLHIsbixpLGEsbyxsLGMsdSxoLGYpe3ZhciBwPXQ7cmV0dXJuIGY/KHMmJlwiZXZlblwiPT09dCYmKHA9bnVsbCksSChwLGUscixuLGksYSxvLGwsYyx1LGgpKToocyYmXCJvZGRcIj09PXQmJihwPW51bGwpLEgocCxjLGwsbyxhLGksbixyLGUsdSxoKSl9ZnVuY3Rpb24gWih0LGUscixuLGkpe2Zvcih2YXIgYT1bXSxvPTAscz0wO3M8ZS5sZW5ndGg7cysrKWZvcih2YXIgbD1lW3NdLGM9MTtjPG07YysrKWZvcih2YXIgdT0xO3U8djt1KyspYS5wdXNoKFkodCx5KGwsdS0xLGMtMSkseShsLHUtMSxjKSx5KGwsdSxjLTEpLHkobCx1LGMpLHIsbiwobCt1K2MpJTIsaSYmaVtvXT9pW29dOltdKSksbysrO3JldHVybiBhfWZ1bmN0aW9uICQodCxlLHIsbixpKXtmb3IodmFyIGE9W10sbz0wLHM9MDtzPGUubGVuZ3RoO3MrKylmb3IodmFyIGw9ZVtzXSxjPTE7YzxnO2MrKylmb3IodmFyIHU9MTt1PG07dSsrKWEucHVzaChZKHQseShjLTEsbCx1LTEpLHkoYyxsLHUtMSkseShjLTEsbCx1KSx5KGMsbCx1KSxyLG4sKGMrbCt1KSUyLGkmJmlbb10/aVtvXTpbXSkpLG8rKztyZXR1cm4gYX1mdW5jdGlvbiBKKHQsZSxyLG4saSl7Zm9yKHZhciBhPVtdLG89MCxzPTA7czxlLmxlbmd0aDtzKyspZm9yKHZhciBsPWVbc10sYz0xO2M8djtjKyspZm9yKHZhciB1PTE7dTxnO3UrKylhLnB1c2goWSh0LHkodS0xLGMtMSxsKSx5KHUtMSxjLGwpLHkodSxjLTEsbCkseSh1LGMsbCkscixuLCh1K2MrbCklMixpJiZpW29dP2lbb106W10pKSxvKys7cmV0dXJuIGF9ZnVuY3Rpb24gSyh0LGUscil7Zm9yKHZhciBuPTE7bjxtO24rKylmb3IodmFyIGk9MTtpPHY7aSsrKWZvcih2YXIgYT0xO2E8ZzthKyspWCh0LHkoYS0xLGktMSxuLTEpLHkoYS0xLGktMSxuKSx5KGEtMSxpLG4tMSkseShhLTEsaSxuKSx5KGEsaS0xLG4tMSkseShhLGktMSxuKSx5KGEsaSxuLTEpLHkoYSxpLG4pLGUsciwoYStpK24pJTIpfWZ1bmN0aW9uIFEodCxlLHIpe3M9ITAsSyh0LGUscikscz0hMX1mdW5jdGlvbiB0dCh0LGUscixuLGksYSl7Zm9yKHZhciBvPVtdLHM9MCxsPTA7bDxlLmxlbmd0aDtsKyspZm9yKHZhciBjPWVbbF0sdT0xO3U8bTt1KyspZm9yKHZhciBoPTE7aDx2O2grKylvLnB1c2goVyh0LGMsaCx1LHIsbixpW2xdLGEmJmFbc10mJmFbc10pKSxzKys7cmV0dXJuIG99ZnVuY3Rpb24gZXQodCxlLHIsbixpLGEpe2Zvcih2YXIgbz1bXSxzPTAsbD0wO2w8ZS5sZW5ndGg7bCsrKWZvcih2YXIgYz1lW2xdLHU9MTt1PGc7dSsrKWZvcih2YXIgaD0xO2g8bTtoKyspby5wdXNoKFcodCx1LGMsaCxyLG4saVtsXSxhJiZhW3NdJiZhW3NdKSkscysrO3JldHVybiBvfWZ1bmN0aW9uIHJ0KHQsZSxyLG4saSxhKXtmb3IodmFyIG89W10scz0wLGw9MDtsPGUubGVuZ3RoO2wrKylmb3IodmFyIGM9ZVtsXSx1PTE7dTx2O3UrKylmb3IodmFyIGg9MTtoPGc7aCsrKW8ucHVzaChXKHQsaCx1LGMscixuLGlbbF0sYSYmYVtzXSYmYVtzXSkpLHMrKztyZXR1cm4gb31mdW5jdGlvbiBudCh0LGUpe2Zvcih2YXIgcj1bXSxuPXQ7bjxlO24rKylyLnB1c2gobik7cmV0dXJuIHJ9cmV0dXJuIGZ1bmN0aW9uKCl7aWYoTCgpLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxnO2UrKylmb3IodmFyIHI9MDtyPHY7cisrKWZvcih2YXIgbj0wO248bTtuKyspe3ZhciBpPXkoZSxyLG4pO3oodC54W2ldLHQueVtpXSx0LnpbaV0sdC52YWx1ZVtpXSl9fSgpLGkmJm8mJihJKG8pLHU9ITAsSyhudWxsLE0sUyksdT0hMSksbiYmYSl7SShhKTtmb3IodmFyIGU9dC5zdXJmYWNlLnBhdHRlcm4scj10LnN1cmZhY2UuY291bnQscz0wO3M8cjtzKyspe3ZhciBsPTE9PT1yPy41OnMvKHItMSksaz0oMS1sKSpNK2wqUyxFPU1hdGguYWJzKGstQSk+TWF0aC5hYnMoay1UKT9bQSxrXTpbayxUXTtRKGUsRVswXSxFWzFdKX19dmFyIEM9W1tNYXRoLm1pbihNLFQpLE1hdGgubWF4KE0sVCldLFtNYXRoLm1pbihBLFMpLE1hdGgubWF4KEEsUyldXTtbXCJ4XCIsXCJ5XCIsXCJ6XCJdLmZvckVhY2goZnVuY3Rpb24oZSl7Zm9yKHZhciByPVtdLG49MDtuPEMubGVuZ3RoO24rKyl7dmFyIGk9MCxhPUNbbl1bMF0sbz1DW25dWzFdLHM9dC5zbGljZXNbZV07aWYocy5zaG93JiZzLmZpbGwpe0kocy5maWxsKTt2YXIgbD1bXSx1PVtdLGg9W107aWYocy5sb2NhdGlvbnMubGVuZ3RoKWZvcih2YXIgeT0wO3k8cy5sb2NhdGlvbnMubGVuZ3RoO3krKyl7dmFyIHg9YyhzLmxvY2F0aW9uc1t5XSxcInhcIj09PWU/ZjpcInlcIj09PWU/cDpkKTswPT09eC5kaXN0UmF0aW8/bC5wdXNoKHguaWQpOnguaWQ+MCYmKHUucHVzaCh4LmlkKSxcInhcIj09PWU/aC5wdXNoKFt4LmRpc3RSYXRpbywwLDBdKTpcInlcIj09PWU/aC5wdXNoKFswLHguZGlzdFJhdGlvLDBdKTpoLnB1c2goWzAsMCx4LmRpc3RSYXRpb10pKX1lbHNlIGw9bnQoMSxcInhcIj09PWU/Zy0xOlwieVwiPT09ZT92LTE6bS0xKTt1Lmxlbmd0aD4wJiYocltpXT1cInhcIj09PWU/dHQobnVsbCx1LGEsbyxoLHJbaV0pOlwieVwiPT09ZT9ldChudWxsLHUsYSxvLGgscltpXSk6cnQobnVsbCx1LGEsbyxoLHJbaV0pLGkrKyksbC5sZW5ndGg+MCYmKHJbaV09XCJ4XCI9PT1lP1oobnVsbCxsLGEsbyxyW2ldKTpcInlcIj09PWU/JChudWxsLGwsYSxvLHJbaV0pOkoobnVsbCxsLGEsbyxyW2ldKSxpKyspfXZhciBiPXQuY2Fwc1tlXTtiLnNob3cmJmIuZmlsbCYmKEkoYi5maWxsKSxyW2ldPVwieFwiPT09ZT9aKG51bGwsWzAsZy0xXSxhLG8scltpXSk6XCJ5XCI9PT1lPyQobnVsbCxbMCx2LTFdLGEsbyxyW2ldKTpKKG51bGwsWzAsbS0xXSxhLG8scltpXSksaSsrKX19KSwwPT09aCYmTCgpLHQuX3g9eCx0Ll95PWIsdC5fej1fLHQuX2ludGVuc2l0eT13LHQuX1hzPWYsdC5fWXM9cCx0Ll9acz1kfSgpLHR9aC5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0PT09dGhpcy5tZXNoKXt2YXIgZT10LmRhdGEuaW5kZXgscj10aGlzLmRhdGEuX3hbZV0sbj10aGlzLmRhdGEuX3lbZV0saT10aGlzLmRhdGEuX3pbZV0sYT10aGlzLmRhdGEuX1lzLmxlbmd0aCxvPXRoaXMuZGF0YS5fWnMubGVuZ3RoLHM9YyhyLHRoaXMuZGF0YS5fWHMpLmlkLGw9YyhuLHRoaXMuZGF0YS5fWXMpLmlkLHU9YyhpLHRoaXMuZGF0YS5fWnMpLmlkLGg9dC5pbmRleD11K28qbCtvKmEqczt0LnRyYWNlQ29vcmRpbmF0ZT1bdGhpcy5kYXRhLl94W2hdLHRoaXMuZGF0YS5feVtoXSx0aGlzLmRhdGEuX3pbaF0sdGhpcy5kYXRhLnZhbHVlW2hdXTt2YXIgZj10aGlzLmRhdGEuaG92ZXJ0ZXh0fHx0aGlzLmRhdGEudGV4dDtyZXR1cm4gQXJyYXkuaXNBcnJheShmKSYmdm9pZCAwIT09ZltoXT90LnRleHRMYWJlbD1mW2hdOmYmJih0LnRleHRMYWJlbD1mKSwhMH19LGgudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUscj1lLmZ1bGxTY2VuZUxheW91dDtmdW5jdGlvbiBuKHQsZSxyLG4pe3JldHVybiBlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdC5kMmwoZSwwLG4pKnJ9KX10aGlzLmRhdGE9Zih0KTt2YXIgcz17cG9zaXRpb25zOm8obihyLnhheGlzLHQuX3gsZS5kYXRhU2NhbGVbMF0sdC54Y2FsZW5kYXIpLG4oci55YXhpcyx0Ll95LGUuZGF0YVNjYWxlWzFdLHQueWNhbGVuZGFyKSxuKHIuemF4aXMsdC5feixlLmRhdGFTY2FsZVsyXSx0LnpjYWxlbmRhcikpLGNlbGxzOm8odC5faSx0Ll9qLHQuX2spLGxpZ2h0UG9zaXRpb246W3QubGlnaHRwb3NpdGlvbi54LHQubGlnaHRwb3NpdGlvbi55LHQubGlnaHRwb3NpdGlvbi56XSxhbWJpZW50OnQubGlnaHRpbmcuYW1iaWVudCxkaWZmdXNlOnQubGlnaHRpbmcuZGlmZnVzZSxzcGVjdWxhcjp0LmxpZ2h0aW5nLnNwZWN1bGFyLHJvdWdobmVzczp0LmxpZ2h0aW5nLnJvdWdobmVzcyxmcmVzbmVsOnQubGlnaHRpbmcuZnJlc25lbCx2ZXJ0ZXhOb3JtYWxzRXBzaWxvbjp0LmxpZ2h0aW5nLnZlcnRleG5vcm1hbHNlcHNpbG9uLGZhY2VOb3JtYWxzRXBzaWxvbjp0LmxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvbixvcGFjaXR5OnQub3BhY2l0eSxjb250b3VyRW5hYmxlOnQuY29udG91ci5zaG93LGNvbnRvdXJDb2xvcjphKHQuY29udG91ci5jb2xvcikuc2xpY2UoMCwzKSxjb250b3VyV2lkdGg6dC5jb250b3VyLndpZHRoLHVzZUZhY2V0Tm9ybWFsczp0LmZsYXRzaGFkaW5nfTtzLnZlcnRleEludGVuc2l0eT10Ll9pbnRlbnNpdHkscy52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHM9W3QuY21pbix0LmNtYXhdLHMuY29sb3JtYXA9aSh0KSx0aGlzLm1lc2gudXBkYXRlKHMpfSxoLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5tZXNoKSx0aGlzLm1lc2guZGlzcG9zZSgpfSxlLmV4cG9ydHM9e2ZpbmROZWFyZXN0T25BeGlzOmMsZ2VuZXJhdGVJc29NZXNoZXM6ZixjcmVhdGVJc29zdXJmYWNlVHJhY2U6ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxpPW4oe2dsOnJ9KSxhPW5ldyB1KHQsaSxlLnVpZCk7cmV0dXJuIGkuX3RyYWNlPWEsYS51cGRhdGUoZSksdC5nbHBsb3QuYWRkKGkpLGF9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvclwiOjY5OCxcIi4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIjo3MjQsXCIuLi8uLi9wbG90cy9nbDNkL3ppcDNcIjo4MDAsXCJnbC1tZXNoM2RcIjoyNzd9XSw5OTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGE9dChcIi4vYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIik7ZnVuY3Rpb24gcyh0LGUscixuLGEpe3ZhciBzPWEoXCJpc29taW5cIiksbD1hKFwiaXNvbWF4XCIpO251bGwhPWwmJm51bGwhPXMmJnM+bCYmKGUuaXNvbWluPW51bGwsZS5pc29tYXg9bnVsbCk7dmFyIGM9YShcInhcIiksdT1hKFwieVwiKSxoPWEoXCJ6XCIpLGY9YShcInZhbHVlXCIpO2MmJmMubGVuZ3RoJiZ1JiZ1Lmxlbmd0aCYmaCYmaC5sZW5ndGgmJmYmJmYubGVuZ3RoPyhpLmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiaGFuZGxlVHJhY2VEZWZhdWx0c1wiKSh0LGUsW1wieFwiLFwieVwiLFwielwiXSxuKSxbXCJ4XCIsXCJ5XCIsXCJ6XCJdLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9XCJjYXBzLlwiK3Q7YShlK1wiLnNob3dcIikmJmEoZStcIi5maWxsXCIpO3ZhciByPVwic2xpY2VzLlwiK3Q7YShyK1wiLnNob3dcIikmJihhKHIrXCIuZmlsbFwiKSxhKHIrXCIubG9jYXRpb25zXCIpKX0pLGEoXCJzcGFjZWZyYW1lLnNob3dcIikmJmEoXCJzcGFjZWZyYW1lLmZpbGxcIiksYShcInN1cmZhY2Uuc2hvd1wiKSYmKGEoXCJzdXJmYWNlLmNvdW50XCIpLGEoXCJzdXJmYWNlLmZpbGxcIiksYShcInN1cmZhY2UucGF0dGVyblwiKSksYShcImNvbnRvdXIuc2hvd1wiKSYmKGEoXCJjb250b3VyLmNvbG9yXCIpLGEoXCJjb250b3VyLndpZHRoXCIpKSxbXCJ0ZXh0XCIsXCJob3ZlcnRleHRcIixcImhvdmVydGVtcGxhdGVcIixcImxpZ2h0aW5nLmFtYmllbnRcIixcImxpZ2h0aW5nLmRpZmZ1c2VcIixcImxpZ2h0aW5nLnNwZWN1bGFyXCIsXCJsaWdodGluZy5yb3VnaG5lc3NcIixcImxpZ2h0aW5nLmZyZXNuZWxcIixcImxpZ2h0aW5nLnZlcnRleG5vcm1hbHNlcHNpbG9uXCIsXCJsaWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb25cIixcImxpZ2h0cG9zaXRpb24ueFwiLFwibGlnaHRwb3NpdGlvbi55XCIsXCJsaWdodHBvc2l0aW9uLnpcIixcImZsYXRzaGFkaW5nXCIsXCJvcGFjaXR5XCJdLmZvckVhY2goZnVuY3Rpb24odCl7YSh0KX0pLG8odCxlLG4sYSx7cHJlZml4OlwiXCIsY0xldHRlcjpcImNcIn0pLGUuX2xlbmd0aD1udWxsKTplLnZpc2libGU9ITF9ZS5leHBvcnRzPXtzdXBwbHlEZWZhdWx0czpmdW5jdGlvbih0LGUscixpKXtzKHQsZSwwLGksZnVuY3Rpb24ocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX0pfSxzdXBwbHlJc29EZWZhdWx0czpzfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCI6NTg4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2F0dHJpYnV0ZXNcIjo5ODl9XSw5OTM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLnN1cHBseURlZmF1bHRzLG4uY2FsYz10KFwiLi9jYWxjXCIpLG4uY29sb3JiYXI9e21pbjpcImNtaW5cIixtYXg6XCJjbWF4XCJ9LG4ucGxvdD10KFwiLi9jb252ZXJ0XCIpLmNyZWF0ZUlzb3N1cmZhY2VUcmFjZSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cImlzb3N1cmZhY2VcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy9nbDNkXCIpLG4uY2F0ZWdvcmllcz1bXCJnbDNkXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvZ2wzZFwiOjc4OSxcIi4vYXR0cmlidXRlc1wiOjk4OSxcIi4vY2FsY1wiOjk5MCxcIi4vY29udmVydFwiOjk5MSxcIi4vZGVmYXVsdHNcIjo5OTJ9XSw5OTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLG89dChcIi4uL3N1cmZhY2UvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCIpLGw9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9bCh7eDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0seTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0sejp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0saTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sajp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sazp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sdGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixhcnJheU9rOiEwLGVkaXRUeXBlOlwiY2FsY1wifSxob3ZlcnRleHQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsYXJyYXlPazohMCxlZGl0VHlwZTpcImNhbGNcIn0saG92ZXJ0ZW1wbGF0ZTphKHtlZGl0VHlwZTpcImNhbGNcIn0pLGRlbGF1bmF5YXhpczp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wieFwiLFwieVwiLFwielwiXSxkZmx0OlwielwiLGVkaXRUeXBlOlwiY2FsY1wifSxhbHBoYWh1bGw6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0Oi0xLGVkaXRUeXBlOlwiY2FsY1wifSxpbnRlbnNpdHk6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGNvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixlZGl0VHlwZTpcImNhbGNcIn0sdmVydGV4Y29sb3I6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGZhY2Vjb2xvcjp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sdHJhbnNmb3Jtczp2b2lkIDB9LG4oXCJcIix7Y29sb3JBdHRyOlwiYGludGVuc2l0eWBcIixzaG93U2NhbGVEZmx0OiEwLGVkaXRUeXBlT3ZlcnJpZGU6XCJjYWxjXCJ9KSx7Y29sb3JiYXI6aSxvcGFjaXR5Om8ub3BhY2l0eSxmbGF0c2hhZGluZzp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwiY2FsY1wifSxjb250b3VyOntzaG93Omwoe30sby5jb250b3Vycy54LnNob3cse30pLGNvbG9yOm8uY29udG91cnMueC5jb2xvcix3aWR0aDpvLmNvbnRvdXJzLngud2lkdGgsZWRpdFR5cGU6XCJjYWxjXCJ9LGxpZ2h0cG9zaXRpb246e3g6bCh7fSxvLmxpZ2h0cG9zaXRpb24ueCx7ZGZsdDoxZTV9KSx5Omwoe30sby5saWdodHBvc2l0aW9uLnkse2RmbHQ6MWU1fSksejpsKHt9LG8ubGlnaHRwb3NpdGlvbi56LHtkZmx0OjB9KSxlZGl0VHlwZTpcImNhbGNcIn0sbGlnaHRpbmc6bCh7dmVydGV4bm9ybWFsc2Vwc2lsb246e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjFlLTEyLGVkaXRUeXBlOlwiY2FsY1wifSxmYWNlbm9ybWFsc2Vwc2lsb246e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjFlLTYsZWRpdFR5cGU6XCJjYWxjXCJ9LGVkaXRUeXBlOlwiY2FsY1wifSxvLmxpZ2h0aW5nKSxob3ZlcmluZm86bCh7fSxzLmhvdmVyaW5mbyx7ZWRpdFR5cGU6XCJjYWxjXCJ9KX0pfSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIjo1NzksXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDYsXCIuLi9zdXJmYWNlL2F0dHJpYnV0ZXNcIjoxMTQ5fV0sOTk1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2UuaW50ZW5zaXR5JiZuKHQsZSx7dmFsczplLmludGVuc2l0eSxjb250YWluZXJTdHI6XCJcIixjTGV0dGVyOlwiY1wifSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsY1wiOjU4Nn1dLDk5NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbC1tZXNoM2RcIiksaT10KFwiZGVsYXVuYXktdHJpYW5ndWxhdGVcIiksYT10KFwiYWxwaGEtc2hhcGVcIiksbz10KFwiY29udmV4LWh1bGxcIikscz10KFwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvclwiKS5wYXJzZUNvbG9yU2NhbGUsbD10KFwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiKSxjPXQoXCIuLi8uLi9wbG90cy9nbDNkL3ppcDNcIik7ZnVuY3Rpb24gdSh0LGUscil7dGhpcy5zY2VuZT10LHRoaXMudWlkPXIsdGhpcy5tZXNoPWUsdGhpcy5uYW1lPVwiXCIsdGhpcy5jb2xvcj1cIiNmZmZcIix0aGlzLmRhdGE9bnVsbCx0aGlzLnNob3dDb250b3VyPSExfXZhciBoPXUucHJvdG90eXBlO2Z1bmN0aW9uIGYodCl7Zm9yKHZhciBlPVtdLHI9dC5sZW5ndGgsbj0wO248cjtuKyspZVtuXT1sKHRbbl0pO3JldHVybiBlfWZ1bmN0aW9uIHAodCxlLHIsbil7Zm9yKHZhciBpPVtdLGE9ZS5sZW5ndGgsbz0wO288YTtvKyspaVtvXT10LmQybChlW29dLDAsbikqcjtyZXR1cm4gaX1mdW5jdGlvbiBkKHQpe2Zvcih2YXIgZT1bXSxyPXQubGVuZ3RoLG49MDtuPHI7bisrKWVbbl09TWF0aC5yb3VuZCh0W25dKTtyZXR1cm4gZX1mdW5jdGlvbiBnKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49MDtuPHI7bisrKWlmKHRbbl08PS0uNXx8dFtuXT49ZS0uNSlyZXR1cm4hMTtyZXR1cm4hMH1oLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLm1lc2gpe3ZhciBlPXQuaW5kZXg9dC5kYXRhLmluZGV4O3QudHJhY2VDb29yZGluYXRlPVt0aGlzLmRhdGEueFtlXSx0aGlzLmRhdGEueVtlXSx0aGlzLmRhdGEueltlXV07dmFyIHI9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQ7cmV0dXJuIEFycmF5LmlzQXJyYXkocikmJnZvaWQgMCE9PXJbZV0/dC50ZXh0TGFiZWw9cltlXTpyJiYodC50ZXh0TGFiZWw9ciksITB9fSxoLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjZW5lLHI9ZS5mdWxsU2NlbmVMYXlvdXQ7dGhpcy5kYXRhPXQ7dmFyIG4sdT10LngubGVuZ3RoLGg9YyhwKHIueGF4aXMsdC54LGUuZGF0YVNjYWxlWzBdLHQueGNhbGVuZGFyKSxwKHIueWF4aXMsdC55LGUuZGF0YVNjYWxlWzFdLHQueWNhbGVuZGFyKSxwKHIuemF4aXMsdC56LGUuZGF0YVNjYWxlWzJdLHQuemNhbGVuZGFyKSk7aWYodC5pJiZ0LmomJnQuayl7aWYodC5pLmxlbmd0aCE9PXQuai5sZW5ndGh8fHQuai5sZW5ndGghPT10LmsubGVuZ3RofHwhZyh0LmksdSl8fCFnKHQuaix1KXx8IWcodC5rLHUpKXJldHVybjtuPWMoZCh0LmkpLGQodC5qKSxkKHQuaykpfWVsc2Ugbj0wPT09dC5hbHBoYWh1bGw/byhoKTp0LmFscGhhaHVsbD4wP2EodC5hbHBoYWh1bGwsaCk6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W1wieFwiLFwieVwiLFwielwiXS5pbmRleE9mKHQpLG49W10sYT1lLmxlbmd0aCxvPTA7bzxhO28rKyluW29dPVtlW29dWyhyKzEpJTNdLGVbb11bKHIrMiklM11dO3JldHVybiBpKG4pfSh0LmRlbGF1bmF5YXhpcyxoKTt2YXIgdj17cG9zaXRpb25zOmgsY2VsbHM6bixsaWdodFBvc2l0aW9uOlt0LmxpZ2h0cG9zaXRpb24ueCx0LmxpZ2h0cG9zaXRpb24ueSx0LmxpZ2h0cG9zaXRpb24uel0sYW1iaWVudDp0LmxpZ2h0aW5nLmFtYmllbnQsZGlmZnVzZTp0LmxpZ2h0aW5nLmRpZmZ1c2Usc3BlY3VsYXI6dC5saWdodGluZy5zcGVjdWxhcixyb3VnaG5lc3M6dC5saWdodGluZy5yb3VnaG5lc3MsZnJlc25lbDp0LmxpZ2h0aW5nLmZyZXNuZWwsdmVydGV4Tm9ybWFsc0Vwc2lsb246dC5saWdodGluZy52ZXJ0ZXhub3JtYWxzZXBzaWxvbixmYWNlTm9ybWFsc0Vwc2lsb246dC5saWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb24sb3BhY2l0eTp0Lm9wYWNpdHksY29udG91ckVuYWJsZTp0LmNvbnRvdXIuc2hvdyxjb250b3VyQ29sb3I6bCh0LmNvbnRvdXIuY29sb3IpLnNsaWNlKDAsMyksY29udG91cldpZHRoOnQuY29udG91ci53aWR0aCx1c2VGYWNldE5vcm1hbHM6dC5mbGF0c2hhZGluZ307dC5pbnRlbnNpdHk/KHRoaXMuY29sb3I9XCIjZmZmXCIsdi52ZXJ0ZXhJbnRlbnNpdHk9dC5pbnRlbnNpdHksdi52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHM9W3QuY21pbix0LmNtYXhdLHYuY29sb3JtYXA9cyh0KSk6dC52ZXJ0ZXhjb2xvcj8odGhpcy5jb2xvcj10LnZlcnRleGNvbG9yWzBdLHYudmVydGV4Q29sb3JzPWYodC52ZXJ0ZXhjb2xvcikpOnQuZmFjZWNvbG9yPyh0aGlzLmNvbG9yPXQuZmFjZWNvbG9yWzBdLHYuY2VsbENvbG9ycz1mKHQuZmFjZWNvbG9yKSk6KHRoaXMuY29sb3I9dC5jb2xvcix2Lm1lc2hDb2xvcj1sKHQuY29sb3IpKSx0aGlzLm1lc2gudXBkYXRlKHYpfSxoLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5tZXNoKSx0aGlzLm1lc2guZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxpPW4oe2dsOnJ9KSxhPW5ldyB1KHQsaSxlLnVpZCk7cmV0dXJuIGkuX3RyYWNlPWEsYS51cGRhdGUoZSksdC5nbHBsb3QuYWRkKGkpLGF9fSx7XCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yXCI6Njk4LFwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiOjcyNCxcIi4uLy4uL3Bsb3RzL2dsM2QvemlwM1wiOjgwMCxcImFscGhhLXNoYXBlXCI6NTUsXCJjb252ZXgtaHVsbFwiOjEyMSxcImRlbGF1bmF5LXRyaWFuZ3VsYXRlXCI6MTU3LFwiZ2wtbWVzaDNkXCI6Mjc3fV0sOTk3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIiksbz10KFwiLi9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtmdW5jdGlvbiBsKHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxvLHIsbil9ZnVuY3Rpb24gYyh0KXt2YXIgZT10Lm1hcChmdW5jdGlvbih0KXt2YXIgZT1sKHQpO3JldHVybiBlJiZpLmlzQXJyYXlPclR5cGVkQXJyYXkoZSk/ZTpudWxsfSk7cmV0dXJuIGUuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQubGVuZ3RoPT09ZVswXS5sZW5ndGh9KSYmZX1jKFtcInhcIixcInlcIixcInpcIl0pPyhjKFtcImlcIixcImpcIixcImtcIl0pLCghZS5pfHxlLmomJmUuaykmJighZS5qfHxlLmsmJmUuaSkmJighZS5rfHxlLmkmJmUuaik/KG4uZ2V0Q29tcG9uZW50TWV0aG9kKFwiY2FsZW5kYXJzXCIsXCJoYW5kbGVUcmFjZURlZmF1bHRzXCIpKHQsZSxbXCJ4XCIsXCJ5XCIsXCJ6XCJdLHMpLFtcImxpZ2h0aW5nLmFtYmllbnRcIixcImxpZ2h0aW5nLmRpZmZ1c2VcIixcImxpZ2h0aW5nLnNwZWN1bGFyXCIsXCJsaWdodGluZy5yb3VnaG5lc3NcIixcImxpZ2h0aW5nLmZyZXNuZWxcIixcImxpZ2h0aW5nLnZlcnRleG5vcm1hbHNlcHNpbG9uXCIsXCJsaWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb25cIixcImxpZ2h0cG9zaXRpb24ueFwiLFwibGlnaHRwb3NpdGlvbi55XCIsXCJsaWdodHBvc2l0aW9uLnpcIixcImNvbnRvdXIuc2hvd1wiLFwiY29udG91ci5jb2xvclwiLFwiY29udG91ci53aWR0aFwiLFwiY29sb3JzY2FsZVwiLFwicmV2ZXJzZXNjYWxlXCIsXCJmbGF0c2hhZGluZ1wiLFwiYWxwaGFodWxsXCIsXCJkZWxhdW5heWF4aXNcIixcIm9wYWNpdHlcIl0uZm9yRWFjaChmdW5jdGlvbih0KXtsKHQpfSksXCJpbnRlbnNpdHlcImluIHQ/KGwoXCJpbnRlbnNpdHlcIiksYSh0LGUscyxsLHtwcmVmaXg6XCJcIixjTGV0dGVyOlwiY1wifSkpOihlLnNob3dzY2FsZT0hMSxcImZhY2Vjb2xvclwiaW4gdD9sKFwiZmFjZWNvbG9yXCIpOlwidmVydGV4Y29sb3JcImluIHQ/bChcInZlcnRleGNvbG9yXCIpOmwoXCJjb2xvclwiLHIpKSxsKFwidGV4dFwiKSxsKFwiaG92ZXJ0ZXh0XCIpLGwoXCJob3ZlcnRlbXBsYXRlXCIpLGUuX2xlbmd0aD1udWxsKTplLnZpc2libGU9ITEpOmUudmlzaWJsZT0hMX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiOjU4OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9hdHRyaWJ1dGVzXCI6OTk0fV0sOTk4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLmNvbG9yYmFyPXttaW46XCJjbWluXCIsbWF4OlwiY21heFwifSxuLnBsb3Q9dChcIi4vY29udmVydFwiKSxuLm1vZHVsZVR5cGU9XCJ0cmFjZVwiLG4ubmFtZT1cIm1lc2gzZFwiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4uLy4uL3Bsb3RzL2dsM2RcIiksbi5jYXRlZ29yaWVzPVtcImdsM2RcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9nbDNkXCI6Nzg5LFwiLi9hdHRyaWJ1dGVzXCI6OTk0LFwiLi9jYWxjXCI6OTk1LFwiLi9jb252ZXJ0XCI6OTk2LFwiLi9kZWZhdWx0c1wiOjk5N31dLDk5OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIikuZXh0ZW5kRmxhdCxpPXQoXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXNcIikuZGFzaCxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXNcIikscz1pLmxpbmU7ZnVuY3Rpb24gbCh0KXtyZXR1cm57bGluZTp7Y29sb3I6bih7fSxzLmNvbG9yLHtkZmx0OnR9KSx3aWR0aDpzLndpZHRoLGRhc2g6YSxlZGl0VHlwZTpcInN0eWxlXCJ9LGVkaXRUeXBlOlwic3R5bGVcIn19ZS5leHBvcnRzPXt4Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSxvcGVuOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxoaWdoOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxsb3c6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGNsb3NlOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxsaW5lOnt3aWR0aDpuKHt9LHMud2lkdGgse30pLGRhc2g6bih7fSxhLHt9KSxlZGl0VHlwZTpcInN0eWxlXCJ9LGluY3JlYXNpbmc6bChcIiMzRDk5NzBcIiksZGVjcmVhc2luZzpsKFwiI0ZGNDEzNlwiKSx0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LGhvdmVydGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixhcnJheU9rOiEwLGVkaXRUeXBlOlwiY2FsY1wifSx0aWNrd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6LjUsZGZsdDouMyxlZGl0VHlwZTpcImNhbGNcIn0saG92ZXJsYWJlbDpuKHt9LG8uaG92ZXJsYWJlbCx7c3BsaXQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMSxlZGl0VHlwZTpcInN0eWxlXCJ9fSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlc1wiOjU5OCxcIi4uLy4uL2NvbXBvbmVudHMvZngvYXR0cmlidXRlc1wiOjYwOCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiOjEwNTJ9XSwxMDAwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPW4uXyxhPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxvPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTTtmdW5jdGlvbiBzKHQsZSxyLG4pe3JldHVybntvOnQsaDplLGw6cixjOm59fWZ1bmN0aW9uIGwodCxlLHIscyxsKXtmb3IodmFyIGM9cy5tYWtlQ2FsY2RhdGEoZSxcIm9wZW5cIiksdT1zLm1ha2VDYWxjZGF0YShlLFwiaGlnaFwiKSxoPXMubWFrZUNhbGNkYXRhKGUsXCJsb3dcIiksZj1zLm1ha2VDYWxjZGF0YShlLFwiY2xvc2VcIikscD1BcnJheS5pc0FycmF5KGUudGV4dCksZD1BcnJheS5pc0FycmF5KGUuaG92ZXJ0ZXh0KSxnPSEwLHY9bnVsbCxtPVtdLHk9MDt5PHIubGVuZ3RoO3krKyl7dmFyIHg9clt5XSxiPWNbeV0sXz11W3ldLHc9aFt5XSxrPWZbeV07aWYoeCE9PW8mJmIhPT1vJiZfIT09byYmdyE9PW8mJmshPT1vKXtrPT09Yj9udWxsIT09diYmayE9PXYmJihnPWs+dik6Zz1rPmIsdj1rO3ZhciBBPWwoYixfLHcsayk7QS5wb3M9eCxBLnljPShiK2spLzIsQS5pPXksQS5kaXI9Zz9cImluY3JlYXNpbmdcIjpcImRlY3JlYXNpbmdcIixwJiYoQS50eD1lLnRleHRbeV0pLGQmJihBLmh0eD1lLmhvdmVydGV4dFt5XSksbS5wdXNoKEEpfWVsc2UgbS5wdXNoKHtwb3M6eCxlbXB0eTohMH0pfXJldHVybiBlLl9leHRyZW1lc1tzLl9pZF09YS5maW5kRXh0cmVtZXMocyxuLmNvbmNhdChoLHUpLHtwYWRkZWQ6ITB9KSxtLmxlbmd0aCYmKG1bMF0udD17bGFiZWxzOntvcGVuOmkodCxcIm9wZW46XCIpK1wiIFwiLGhpZ2g6aSh0LFwiaGlnaDpcIikrXCIgXCIsbG93OmkodCxcImxvdzpcIikrXCIgXCIsY2xvc2U6aSh0LFwiY2xvc2U6XCIpK1wiIFwifX0pLG19ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHI9YS5nZXRGcm9tSWQodCxlLnhheGlzKSxpPWEuZ2V0RnJvbUlkKHQsZS55YXhpcyksbz1mdW5jdGlvbih0LGUscil7dmFyIGk9ci5fbWluRGlmZjtpZighaSl7dmFyIGEsbz10Ll9mdWxsRGF0YSxzPVtdO2ZvcihpPTEvMCxhPTA7YTxvLmxlbmd0aDthKyspe3ZhciBsPW9bYV07aWYoXCJvaGxjXCI9PT1sLnR5cGUmJiEwPT09bC52aXNpYmxlJiZsLnhheGlzPT09ZS5faWQpe3MucHVzaChsKTt2YXIgYz1lLm1ha2VDYWxjZGF0YShsLFwieFwiKTtsLl94Y2FsYz1jO3ZhciB1PW4uZGlzdGluY3RWYWxzKGMpLm1pbkRpZmY7dSYmaXNGaW5pdGUodSkmJihpPU1hdGgubWluKGksdSkpfX1mb3IoaT09PTEvMCYmKGk9MSksYT0wO2E8cy5sZW5ndGg7YSsrKXNbYV0uX21pbkRpZmY9aX1yZXR1cm4gaSpyLnRpY2t3aWR0aH0odCxyLGUpLGM9ZS5fbWluRGlmZjtlLl9taW5EaWZmPW51bGw7dmFyIHU9ZS5feGNhbGM7ZS5feGNhbGM9bnVsbDt2YXIgaD1sKHQsZSx1LGkscyk7cmV0dXJuIGUuX2V4dHJlbWVzW3IuX2lkXT1hLmZpbmRFeHRyZW1lcyhyLHUse3ZwYWQ6Yy8yfSksaC5sZW5ndGg/KG4uZXh0ZW5kRmxhdChoWzBdLnQse3dIb3ZlcjpjLzIsdGlja0xlbjpvfSksaCk6W3t0OntlbXB0eTohMH19XX0sY2FsY0NvbW1vbjpsfX0se1wiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5fV0sMTAwMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9vaGxjX2RlZmF1bHRzXCIpLGE9dChcIi4vYXR0cmlidXRlc1wiKTtmdW5jdGlvbiBvKHQsZSxyLG4pe3IobitcIi5saW5lLmNvbG9yXCIpLHIobitcIi5saW5lLndpZHRoXCIsZS5saW5lLndpZHRoKSxyKG4rXCIubGluZS5kYXNoXCIsZS5saW5lLmRhc2gpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtmdW5jdGlvbiBsKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9aSh0LGUsbCxzKT8obChcImxpbmUud2lkdGhcIiksbChcImxpbmUuZGFzaFwiKSxvKHQsZSxsLFwiaW5jcmVhc2luZ1wiKSxvKHQsZSxsLFwiZGVjcmVhc2luZ1wiKSxsKFwidGV4dFwiKSxsKFwiaG92ZXJ0ZXh0XCIpLGwoXCJ0aWNrd2lkdGhcIikscy5fcmVxdWVzdFJhbmdlc2xpZGVyW2UueGF4aXNdPSEwKTplLnZpc2libGU9ITF9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuL2F0dHJpYnV0ZXNcIjo5OTksXCIuL29obGNfZGVmYXVsdHNcIjoxMDA0fV0sMTAwMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLHM9dChcIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0XCIpLGw9e2luY3JlYXNpbmc6XCJcXHUyNWIyXCIsZGVjcmVhc2luZzpcIlxcdTI1YmNcIn07ZnVuY3Rpb24gYyh0LGUscixuKXt2YXIgaSxzLGw9dC5jZCxjPXQueGEsdT1sWzBdLnRyYWNlLGg9bFswXS50LGY9dS50eXBlLHA9XCJvaGxjXCI9PT1mP1wibFwiOlwibWluXCIsZD1cIm9obGNcIj09PWY/XCJoXCI6XCJtYXhcIixnPWguYlBvc3x8MCx2PWZ1bmN0aW9uKHQpe3JldHVybiB0LnBvcytnLWV9LG09aC5iZFBvc3x8aC50aWNrTGVuLHk9aC53SG92ZXIseD1NYXRoLm1pbigxLG0vTWF0aC5hYnMoYy5yMmMoYy5yYW5nZVsxXSktYy5yMmMoYy5yYW5nZVswXSkpKTtmdW5jdGlvbiBiKHQpe3ZhciBlPXYodCk7cmV0dXJuIGEuaW5ib3goZS15LGUreSxpKX1mdW5jdGlvbiBfKHQpe3ZhciBlPXRbcF0sbj10W2RdO3JldHVybiBlPT09bnx8YS5pbmJveChlLXIsbi1yLGkpfWZ1bmN0aW9uIHcodCl7cmV0dXJuKGIodCkrXyh0KSkvMn1pPXQubWF4SG92ZXJEaXN0YW5jZS14LHM9dC5tYXhTcGlrZURpc3RhbmNlLXg7dmFyIGs9YS5nZXREaXN0YW5jZUZ1bmN0aW9uKG4sYixfLHcpO2lmKGEuZ2V0Q2xvc2VzdChsLGssdCksITE9PT10LmluZGV4KXJldHVybiBudWxsO3ZhciBBPWxbdC5pbmRleF07aWYoQS5lbXB0eSlyZXR1cm4gbnVsbDt2YXIgVD11W0EuZGlyXSxNPVQubGluZS5jb2xvcjtyZXR1cm4gby5vcGFjaXR5KE0pJiZULmxpbmUud2lkdGg/dC5jb2xvcj1NOnQuY29sb3I9VC5maWxsY29sb3IsdC54MD1jLmMycChBLnBvcytnLW0sITApLHQueDE9Yy5jMnAoQS5wb3MrZyttLCEwKSx0LnhMYWJlbFZhbD1BLnBvcyx0LnNwaWtlRGlzdGFuY2U9dyhBKSpzL2ksdC54U3Bpa2U9Yy5jMnAoQS5wb3MsITApLHR9ZnVuY3Rpb24gdSh0LGUscixhKXt2YXIgbz10LmNkLHM9dC55YSxsPW9bMF0udHJhY2UsdT1vWzBdLnQsaD1bXSxmPWModCxlLHIsYSk7aWYoIWYpcmV0dXJuW107dmFyIHA9b1tmLmluZGV4XS5oaXx8bC5ob3ZlcmluZm8sZD1wLnNwbGl0KFwiK1wiKTtpZighKFwiYWxsXCI9PT1wfHwtMSE9PWQuaW5kZXhPZihcInlcIikpKXJldHVybltdO2Zvcih2YXIgZz1bXCJoaWdoXCIsXCJvcGVuXCIsXCJjbG9zZVwiLFwibG93XCJdLHY9e30sbT0wO208Zy5sZW5ndGg7bSsrKXt2YXIgeSx4PWdbbV0sYj1sW3hdW2YuaW5kZXhdLF89cy5jMnAoYiwhMCk7YiBpbiB2Pyh5PXZbYl0pLnlMYWJlbCs9XCI8YnI+XCIrdS5sYWJlbHNbeF0rbi5ob3ZlckxhYmVsVGV4dChzLGIpOigoeT1pLmV4dGVuZEZsYXQoe30sZikpLnkwPXkueTE9Xyx5LnlMYWJlbFZhbD1iLHkueUxhYmVsPXUubGFiZWxzW3hdK24uaG92ZXJMYWJlbFRleHQocyxiKSx5Lm5hbWU9XCJcIixoLnB1c2goeSksdltiXT15KX1yZXR1cm4gaH1mdW5jdGlvbiBoKHQsZSxyLGkpe3ZhciBhPXQuY2Qsbz10LnlhLHU9YVswXS50cmFjZSxoPWFbMF0udCxmPWModCxlLHIsaSk7aWYoIWYpcmV0dXJuW107dmFyIHA9YVtmLmluZGV4XSxkPWYuaW5kZXg9cC5pLGc9cC5kaXI7ZnVuY3Rpb24gdih0KXtyZXR1cm4gaC5sYWJlbHNbdF0rbi5ob3ZlckxhYmVsVGV4dChvLHVbdF1bZF0pfXZhciBtPXAuaGl8fHUuaG92ZXJpbmZvLHk9bS5zcGxpdChcIitcIikseD1cImFsbFwiPT09bSxiPXh8fC0xIT09eS5pbmRleE9mKFwieVwiKSxfPXh8fC0xIT09eS5pbmRleE9mKFwidGV4dFwiKSx3PWI/W3YoXCJvcGVuXCIpLHYoXCJoaWdoXCIpLHYoXCJsb3dcIiksdihcImNsb3NlXCIpK1wiICBcIitsW2ddXTpbXTtyZXR1cm4gXyYmcyhwLHUsdyksZi5leHRyYVRleHQ9dy5qb2luKFwiPGJyPlwiKSxmLnkwPWYueTE9by5jMnAocC55YywhMCksW2ZdfWUuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHQuY2RbMF0udHJhY2UuaG92ZXJsYWJlbC5zcGxpdD91KHQsZSxyLG4pOmgodCxlLHIsbil9LGhvdmVyU3BsaXQ6dSxob3Zlck9uUG9pbnRzOmh9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHRcIjoxMDYwfV0sMTAwMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17bW9kdWxlVHlwZTpcInRyYWNlXCIsbmFtZTpcIm9obGNcIixiYXNlUGxvdE1vZHVsZTp0KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCIpLGNhdGVnb3JpZXM6W1wiY2FydGVzaWFuXCIsXCJzdmdcIixcInNob3dMZWdlbmRcIl0sbWV0YTp7fSxhdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksc3VwcGx5RGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIiksY2FsYzp0KFwiLi9jYWxjXCIpLmNhbGMscGxvdDp0KFwiLi9wbG90XCIpLHN0eWxlOnQoXCIuL3N0eWxlXCIpLGhvdmVyUG9pbnRzOnQoXCIuL2hvdmVyXCIpLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KFwiLi9zZWxlY3RcIil9fSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIjo3NjAsXCIuL2F0dHJpYnV0ZXNcIjo5OTksXCIuL2NhbGNcIjoxZTMsXCIuL2RlZmF1bHRzXCI6MTAwMSxcIi4vaG92ZXJcIjoxMDAyLFwiLi9wbG90XCI6MTAwNSxcIi4vc2VsZWN0XCI6MTAwNixcIi4vc3R5bGVcIjoxMDA3fV0sMTAwNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxpPXQoXCIuLi8uLi9saWJcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPXIoXCJ4XCIpLHM9cihcIm9wZW5cIiksbD1yKFwiaGlnaFwiKSxjPXIoXCJsb3dcIiksdT1yKFwiY2xvc2VcIik7aWYocihcImhvdmVybGFiZWwuc3BsaXRcIiksbi5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcImhhbmRsZVRyYWNlRGVmYXVsdHNcIikodCxlLFtcInhcIl0sYSkscyYmbCYmYyYmdSl7dmFyIGg9TWF0aC5taW4ocy5sZW5ndGgsbC5sZW5ndGgsYy5sZW5ndGgsdS5sZW5ndGgpO3JldHVybiBvJiYoaD1NYXRoLm1pbihoLGkubWluUm93TGVuZ3RoKG8pKSksZS5fbGVuZ3RoPWgsaH19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOX1dLDEwMDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vbGliXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1lLnhheGlzLHM9ZS55YXhpcztpLm1ha2VUcmFjZUdyb3VwcyhhLHIsXCJ0cmFjZSBvaGxjXCIpLmVhY2goZnVuY3Rpb24odCl7dmFyIHI9bi5zZWxlY3QodGhpcyksYT10WzBdLGw9YS50LGM9YS50cmFjZTtpZihlLmlzUmFuZ2VQbG90fHwoYS5ub2RlMz1yKSwhMCE9PWMudmlzaWJsZXx8bC5lbXB0eSlyLnJlbW92ZSgpO2Vsc2V7dmFyIHU9bC50aWNrTGVuLGg9ci5zZWxlY3RBbGwoXCJwYXRoXCIpLmRhdGEoaS5pZGVudGl0eSk7aC5lbnRlcigpLmFwcGVuZChcInBhdGhcIiksaC5leGl0KCkucmVtb3ZlKCksaC5hdHRyKFwiZFwiLGZ1bmN0aW9uKHQpe2lmKHQuZW1wdHkpcmV0dXJuXCJNMCwwWlwiO3ZhciBlPW8uYzJwKHQucG9zLCEwKSxyPW8uYzJwKHQucG9zLXUsITApLG49by5jMnAodC5wb3MrdSwhMCk7cmV0dXJuXCJNXCIrcitcIixcIitzLmMycCh0Lm8sITApK1wiSFwiK2UrXCJNXCIrZStcIixcIitzLmMycCh0LmgsITApK1wiVlwiK3MuYzJwKHQubCwhMCkrXCJNXCIrbitcIixcIitzLmMycCh0LmMsITApK1wiSFwiK2V9KX19KX19LHtcIi4uLy4uL2xpYlwiOjcwMSxkMzoxNTV9XSwxMDA2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10LmNkLGk9dC54YXhpcyxhPXQueWF4aXMsbz1bXSxzPW5bMF0udC5iUG9zfHwwO2lmKCExPT09ZSlmb3Iocj0wO3I8bi5sZW5ndGg7cisrKW5bcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBsPW5bcl07ZS5jb250YWlucyhbaS5jMnAobC5wb3MrcyksYS5jMnAobC55YyldLG51bGwsbC5pLHQpPyhvLnB1c2goe3BvaW50TnVtYmVyOmwuaSx4OmkuYzJkKGwucG9zKSx5OmEuYzJkKGwueWMpfSksbC5zZWxlY3RlZD0xKTpsLnNlbGVjdGVkPTB9cmV0dXJuIG99fSx7fV0sMTAwNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lP2VbMF0ubm9kZTM6bi5zZWxlY3QodCkuc2VsZWN0QWxsKFwiZy5vaGxjbGF5ZXJcIikuc2VsZWN0QWxsKFwiZy50cmFjZVwiKTtyLnN0eWxlKFwib3BhY2l0eVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSxyLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZTtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoXCJwYXRoXCIpLmVhY2goZnVuY3Rpb24odCl7aWYoIXQuZW1wdHkpe3ZhciByPWVbdC5kaXJdLmxpbmU7bi5zZWxlY3QodGhpcykuc3R5bGUoXCJmaWxsXCIsXCJub25lXCIpLmNhbGwoYS5zdHJva2Usci5jb2xvcikuY2FsbChpLmRhc2hMaW5lLHIuZGFzaCxyLndpZHRoKS5zdHlsZShcIm9wYWNpdHlcIixlLnNlbGVjdGVkcG9pbnRzJiYhdC5zZWxlY3RlZD8uMzoxKX19KX0pfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxkMzoxNTV9XSwxMDA4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxpPXQoXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxsPXQoXCIuLi8uLi9wbG90cy9kb21haW5cIikuYXR0cmlidXRlcyxjPXQoXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIikubGluZSx1PXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIiksaD1uKHtlZGl0VHlwZTpcImNhbGNcIn0sbyhcImxpbmVcIix7ZWRpdFR5cGU6XCJjYWxjXCJ9KSx7c2hvd3NjYWxlOmMuc2hvd3NjYWxlLGNvbG9yYmFyOnUsc2hhcGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImxpbmVhclwiLFwiaHNwbGluZVwiXSxkZmx0OlwibGluZWFyXCIsZWRpdFR5cGU6XCJwbG90XCJ9LGhvdmVydGVtcGxhdGU6cyh7ZWRpdFR5cGU6XCJwbG90XCIsYXJyYXlPazohMX0se2tleXM6W1wiY291bnRcIixcInByb2JhYmlsaXR5XCJdfSl9KTtlLmV4cG9ydHM9e2RvbWFpbjpsKHtuYW1lOlwicGFyY2F0c1wiLHRyYWNlOiEwLGVkaXRUeXBlOlwiY2FsY1wifSksaG92ZXJpbmZvOm4oe30saS5ob3ZlcmluZm8se2ZsYWdzOltcImNvdW50XCIsXCJwcm9iYWJpbGl0eVwiXSxlZGl0VHlwZTpcInBsb3RcIixhcnJheU9rOiExfSksaG92ZXJvbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiY2F0ZWdvcnlcIixcImNvbG9yXCIsXCJkaW1lbnNpb25cIl0sZGZsdDpcImNhdGVnb3J5XCIsZWRpdFR5cGU6XCJwbG90XCJ9LGhvdmVydGVtcGxhdGU6cyh7ZWRpdFR5cGU6XCJwbG90XCIsYXJyYXlPazohMX0se2tleXM6W1wiY291bnRcIixcInByb2JhYmlsaXR5XCIsXCJjYXRlZ29yeVwiLFwiY2F0ZWdvcnljb3VudFwiLFwiY29sb3Jjb3VudFwiLFwiYmFuZGNvbG9yY291bnRcIl19KSxhcnJhbmdlbWVudDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wicGVycGVuZGljdWxhclwiLFwiZnJlZWZvcm1cIixcImZpeGVkXCJdLGRmbHQ6XCJwZXJwZW5kaWN1bGFyXCIsZWRpdFR5cGU6XCJwbG90XCJ9LGJ1bmRsZWNvbG9yczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwicGxvdFwifSxzb3J0cGF0aHM6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImZvcndhcmRcIixcImJhY2t3YXJkXCJdLGRmbHQ6XCJmb3J3YXJkXCIsZWRpdFR5cGU6XCJwbG90XCJ9LGxhYmVsZm9udDphKHtlZGl0VHlwZTpcImNhbGNcIn0pLHRpY2tmb250OmEoe2VkaXRUeXBlOlwiY2FsY1wifSksZGltZW5zaW9uczp7X2lzTGlua2VkVG9BcnJheTpcImRpbWVuc2lvblwiLGxhYmVsOnt2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGNhdGVnb3J5b3JkZXI6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInRyYWNlXCIsXCJjYXRlZ29yeSBhc2NlbmRpbmdcIixcImNhdGVnb3J5IGRlc2NlbmRpbmdcIixcImFycmF5XCJdLGRmbHQ6XCJ0cmFjZVwiLGVkaXRUeXBlOlwiY2FsY1wifSxjYXRlZ29yeWFycmF5Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx0aWNrdGV4dDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sdmFsdWVzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGRmbHQ6W10sZWRpdFR5cGU6XCJjYWxjXCJ9LGRpc3BsYXlpbmRleDp7dmFsVHlwZTpcImludGVnZXJcIixlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCIsdmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifX0sbGluZTpoLGNvdW50czp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MSxhcnJheU9rOiEwLGVkaXRUeXBlOlwiY2FsY1wifSxjdXN0b21kYXRhOnZvaWQgMCxob3ZlcmxhYmVsOnZvaWQgMCxpZHM6dm9pZCAwLGxlZ2VuZGdyb3VwOnZvaWQgMCxvcGFjaXR5OnZvaWQgMCxzZWxlY3RlZHBvaW50czp2b2lkIDAsc2hvd2xlZ2VuZDp2b2lkIDB9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIjo1NzksXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDYsXCIuLi8uLi9wbG90cy9kb21haW5cIjo3NzQsXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIjo3NzUsXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIjoxMDUyfV0sMTAwOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9nZXRfZGF0YVwiKS5nZXRNb2R1bGVDYWxjRGF0YSxpPXQoXCIuL3Bsb3RcIik7ci5uYW1lPVwicGFyY2F0c1wiLHIucGxvdD1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1uKHQuY2FsY2RhdGEsXCJwYXJjYXRzXCIpO2lmKG8ubGVuZ3RoKXt2YXIgcz1vWzBdO2kodCxzLHIsYSl9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4uX2hhcyYmbi5faGFzKFwicGFyY2F0c1wiKSxhPWUuX2hhcyYmZS5faGFzKFwicGFyY2F0c1wiKTtpJiYhYSYmbi5fcGFwZXJkaXYuc2VsZWN0QWxsKFwiLnBhcmNhdHNcIikucmVtb3ZlKCl9fSx7XCIuLi8uLi9wbG90cy9nZXRfZGF0YVwiOjc4NCxcIi4vcGxvdFwiOjEwMTR9XSwxMDEwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYi9ndXBcIikud3JhcCxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVyc1wiKS5oYXNDb2xvcnNjYWxlLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCIpLG89dChcIi4uLy4uL2xpYi9maWx0ZXJfdW5pcXVlLmpzXCIpLHM9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxsPXQoXCIuLi8uLi9saWJcIik7ZnVuY3Rpb24gYyh0LGUscil7dC52YWx1ZUluZHMucHVzaChlKSx0LmNvdW50Kz1yfWZ1bmN0aW9uIHUodCxlLHIpe3QudmFsdWVJbmRzLnB1c2goZSksdC5jb3VudCs9cn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1sLmZpbHRlclZpc2libGUoZS5kaW1lbnNpb25zKTtpZigwPT09ci5sZW5ndGgpcmV0dXJuW107dmFyIGgsZixwLGQ9ci5tYXAoZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuXCJ0cmFjZVwiPT09dC5jYXRlZ29yeW9yZGVyP2U9bnVsbDpcImFycmF5XCI9PT10LmNhdGVnb3J5b3JkZXI/ZT10LmNhdGVnb3J5YXJyYXk6KGU9byh0LnZhbHVlcykuc29ydCgpLFwiY2F0ZWdvcnkgZGVzY2VuZGluZ1wiPT09dC5jYXRlZ29yeW9yZGVyJiYoZT1lLnJldmVyc2UoKSkpLGZ1bmN0aW9uKHQsZSl7ZT1udWxsPT1lP1tdOmUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0fSk7dmFyIHI9e30sbj17fSxpPVtdO2UuZm9yRWFjaChmdW5jdGlvbih0LGUpe3JbdF09MCxuW3RdPWV9KTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG8scz10W2FdO3ZvaWQgMD09PXJbc10/KHJbc109MSxvPWUucHVzaChzKS0xLG5bc109byk6KHJbc10rKyxvPW5bc10pLGkucHVzaChvKX12YXIgbD1lLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gclt0XX0pO3JldHVybnt1bmlxdWVWYWx1ZXM6ZSx1bmlxdWVDb3VudHM6bCxpbmRzOml9fSh0LnZhbHVlcyxlKX0pO2g9bC5pc0FycmF5T3JUeXBlZEFycmF5KGUuY291bnRzKT9lLmNvdW50czpbZS5jb3VudHNdLGZ1bmN0aW9uKHQpe3ZhciBlO2lmKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9MDtyPHQubGVuZ3RoO3IrKyl7aWYodFtyXTwwfHx0W3JdPj10Lmxlbmd0aClyZXR1cm4hMTtpZih2b2lkIDAhPT1lW3Rbcl1dKXJldHVybiExO2VbdFtyXV09ITB9cmV0dXJuITB9KHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3BsYXlpbmRleH0pKSlmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0uX2Rpc3BsYXlpbmRleD10W2VdLmRpc3BsYXlpbmRleDtlbHNlIGZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5fZGlzcGxheWluZGV4PWV9KHIpLHIuZm9yRWFjaChmdW5jdGlvbih0LGUpeyFmdW5jdGlvbih0LGUpe3QuX2NhdGVnb3J5YXJyYXk9ZS51bmlxdWVWYWx1ZXMsbnVsbD09PXQudGlja3RleHR8fHZvaWQgMD09PXQudGlja3RleHQ/dC5fdGlja3RleHQ9W106dC5fdGlja3RleHQ9dC50aWNrdGV4dC5zbGljZSgpO2Zvcih2YXIgcj10Ll90aWNrdGV4dC5sZW5ndGg7cjxlLnVuaXF1ZVZhbHVlcy5sZW5ndGg7cisrKXQuX3RpY2t0ZXh0LnB1c2goZS51bmlxdWVWYWx1ZXNbcl0pfSh0LGRbZV0pfSk7dmFyIGcsdj1lLmxpbmU7dj8oaShlLFwibGluZVwiKSYmYSh0LGUse3ZhbHM6ZS5saW5lLmNvbG9yLGNvbnRhaW5lclN0cjpcImxpbmVcIixjTGV0dGVyOlwiY1wifSksZz1zLnRyeUNvbG9yc2NhbGUodikpOmc9bC5pZGVudGl0eTt2YXIgbSx5LHgsYixfPXJbMF0udmFsdWVzLmxlbmd0aCx3PXt9LGs9ZC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaW5kc30pO2ZvcihwPTAsbT0wO208XzttKyspe3ZhciBBPVtdO2Zvcih5PTA7eTxrLmxlbmd0aDt5KyspQS5wdXNoKGtbeV1bbV0pO2Y9aFttJWgubGVuZ3RoXSxwKz1mO3ZhciBUPSh4PW0sYj12b2lkIDAsYj1sLmlzQXJyYXlPclR5cGVkQXJyYXkodi5jb2xvcik/di5jb2xvclt4JXYuY29sb3IubGVuZ3RoXTp2LmNvbG9yLHtjb2xvcjpnKGIpLHJhd0NvbG9yOmJ9KSxNPUErXCItXCIrVC5yYXdDb2xvcjt2b2lkIDA9PT13W01dJiYod1tNXT17Y2F0ZWdvcnlJbmRzOkEsY29sb3I6VC5jb2xvcixyYXdDb2xvcjpULnJhd0NvbG9yLHZhbHVlSW5kczpbXSxjb3VudDowfSksdSh3W01dLG0sZil9dmFyIFMsRT1yLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiByPWUsbj10Ll9pbmRleCxpPXQuX2Rpc3BsYXlpbmRleCxhPXQubGFiZWwse2RpbWVuc2lvbkluZDpyLGNvbnRhaW5lckluZDpuLGRpc3BsYXlJbmQ6aSxkaW1lbnNpb25MYWJlbDphLGNvdW50OnAsY2F0ZWdvcmllczpbXSxkcmFnWDpudWxsfTt2YXIgcixuLGksYX0pO2ZvcihtPTA7bTxfO20rKylmb3IoZj1oW20laC5sZW5ndGhdLHk9MDt5PEUubGVuZ3RoO3krKyl7dmFyIEM9RVt5XS5jb250YWluZXJJbmQsTD1kW3ldLmluZHNbbV0sej1FW3ldLmNhdGVnb3JpZXM7aWYodm9pZCAwPT09eltMXSl7dmFyIE89ZS5kaW1lbnNpb25zW0NdLl9jYXRlZ29yeWFycmF5W0xdLEk9ZS5kaW1lbnNpb25zW0NdLl90aWNrdGV4dFtMXTt6W0xdPXtkaW1lbnNpb25JbmQ6eSxjYXRlZ29yeUluZDpTPUwsY2F0ZWdvcnlWYWx1ZTpPLGRpc3BsYXlJbmQ6UyxjYXRlZ29yeUxhYmVsOkksdmFsdWVJbmRzOltdLGNvdW50OjAsZHJhZ1k6bnVsbH19Yyh6W0xdLG0sZil9cmV0dXJuIG4oZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3JpZXMubGVuZ3RofSkucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsZSl9KTtyZXR1cm57ZGltZW5zaW9uczp0LHBhdGhzOmUsdHJhY2U6dm9pZCAwLG1heENhdHM6bixjb3VudDpyfX0oRSx3LHApKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCI6NTg2LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnNcIjo1ODksXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvZmlsdGVyX3VuaXF1ZS5qc1wiOjY5MixcIi4uLy4uL2xpYi9ndXBcIjo2OTl9XSwxMDExOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVyc1wiKS5oYXNDb2xvcnNjYWxlLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiKSxvPXQoXCIuLi8uLi9wbG90cy9kb21haW5cIikuZGVmYXVsdHMscz10KFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCIpLGw9dChcIi4vYXR0cmlidXRlc1wiKSxjPXQoXCIuLi9wYXJjb29yZHMvbWVyZ2VfbGVuZ3RoXCIpO2Z1bmN0aW9uIHUodCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxsLmRpbWVuc2lvbnMscixpKX12YXIgaT1yKFwidmFsdWVzXCIpLGE9cihcInZpc2libGVcIik7aWYoaSYmaS5sZW5ndGh8fChhPWUudmlzaWJsZT0hMSksYSl7cihcImxhYmVsXCIpLHIoXCJkaXNwbGF5aW5kZXhcIixlLl9pbmRleCk7dmFyIG8scz10LmNhdGVnb3J5YXJyYXksYz1BcnJheS5pc0FycmF5KHMpJiZzLmxlbmd0aD4wO2MmJihvPVwiYXJyYXlcIik7dmFyIHU9cihcImNhdGVnb3J5b3JkZXJcIixvKTtcImFycmF5XCI9PT11PyhyKFwiY2F0ZWdvcnlhcnJheVwiKSxyKFwidGlja3RleHRcIikpOihkZWxldGUgdC5jYXRlZ29yeWFycmF5LGRlbGV0ZSB0LnRpY2t0ZXh0KSxjfHxcImFycmF5XCIhPT11fHwoZS5jYXRlZ29yeW9yZGVyPVwidHJhY2VcIil9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXtmdW5jdGlvbiBmKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxsLHIsaSl9dmFyIHA9cyh0LGUse25hbWU6XCJkaW1lbnNpb25zXCIsaGFuZGxlSXRlbURlZmF1bHRzOnV9KSxkPWZ1bmN0aW9uKHQsZSxyLG8scyl7cyhcImxpbmUuc2hhcGVcIikscyhcImxpbmUuaG92ZXJ0ZW1wbGF0ZVwiKTt2YXIgbD1zKFwibGluZS5jb2xvclwiLG8uY29sb3J3YXlbMF0pO2lmKGkodCxcImxpbmVcIikmJm4uaXNBcnJheU9yVHlwZWRBcnJheShsKSl7aWYobC5sZW5ndGgpcmV0dXJuIHMoXCJsaW5lLmNvbG9yc2NhbGVcIiksYSh0LGUsbyxzLHtwcmVmaXg6XCJsaW5lLlwiLGNMZXR0ZXI6XCJjXCJ9KSxsLmxlbmd0aDtlLmxpbmUuY29sb3I9cn1yZXR1cm4gMS8wfSh0LGUscixoLGYpO28oZSxoLGYpLEFycmF5LmlzQXJyYXkocCkmJnAubGVuZ3RofHwoZS52aXNpYmxlPSExKSxjKGUscCxcInZhbHVlc1wiLGQpLGYoXCJob3Zlcm9uXCIpLGYoXCJob3ZlcnRlbXBsYXRlXCIpLGYoXCJhcnJhbmdlbWVudFwiKSxmKFwiYnVuZGxlY29sb3JzXCIpLGYoXCJzb3J0cGF0aHNcIiksZihcImNvdW50c1wiKTt2YXIgZz17ZmFtaWx5OmguZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKGguZm9udC5zaXplKSxjb2xvcjpoLmZvbnQuY29sb3J9O24uY29lcmNlRm9udChmLFwibGFiZWxmb250XCIsZyk7dmFyIHY9e2ZhbWlseTpoLmZvbnQuZmFtaWx5LHNpemU6TWF0aC5yb3VuZChoLmZvbnQuc2l6ZS8xLjIpLGNvbG9yOmguZm9udC5jb2xvcn07bi5jb2VyY2VGb250KGYsXCJ0aWNrZm9udFwiLHYpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCI6NTg4LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnNcIjo1ODksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIjo3NDUsXCIuLi8uLi9wbG90cy9kb21haW5cIjo3NzQsXCIuLi9wYXJjb29yZHMvbWVyZ2VfbGVuZ3RoXCI6MTAyMyxcIi4vYXR0cmlidXRlc1wiOjEwMDh9XSwxMDEyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLnBsb3Q9dChcIi4vcGxvdFwiKSxuLmNvbG9yYmFyPXtjb250YWluZXI6XCJsaW5lXCIsbWluOlwiY21pblwiLG1heDpcImNtYXhcIn0sbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJwYXJjYXRzXCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi9iYXNlX3Bsb3RcIiksbi5jYXRlZ29yaWVzPVtcIm5vT3BhY2l0eVwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4vYXR0cmlidXRlc1wiOjEwMDgsXCIuL2Jhc2VfcGxvdFwiOjEwMDksXCIuL2NhbGNcIjoxMDEwLFwiLi9kZWZhdWx0c1wiOjEwMTEsXCIuL3Bsb3RcIjoxMDE0fV0sMTAxMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X2FwaVwiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4XCIpLG89dChcIi4uLy4uL2xpYlwiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksbD10KFwidGlueWNvbG9yMlwiKSxjPXQoXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIik7ZnVuY3Rpb24gdSh0LGUscixpKXt2YXIgYT10Lm1hcChmdW5jdGlvbih0LGUscil7dmFyIG4saT1yWzBdLGE9ZS5tYXJnaW58fHtsOjgwLHI6ODAsdDoxMDAsYjo4MH0sbz1pLnRyYWNlLHM9by5kb21haW4sbD1lLndpZHRoLGM9ZS5oZWlnaHQsdT1NYXRoLmZsb29yKGwqKHMueFsxXS1zLnhbMF0pKSxoPU1hdGguZmxvb3IoYyoocy55WzFdLXMueVswXSkpLGY9cy54WzBdKmwrYS5sLHA9ZS5oZWlnaHQtcy55WzFdKmUuaGVpZ2h0K2EudCxkPW8ubGluZS5zaGFwZTtuPVwiYWxsXCI9PT1vLmhvdmVyaW5mbz9bXCJjb3VudFwiLFwicHJvYmFiaWxpdHlcIl06KG8uaG92ZXJpbmZvfHxcIlwiKS5zcGxpdChcIitcIik7dmFyIGc9e3RyYWNlOm8sa2V5Om8udWlkLG1vZGVsOmkseDpmLHk6cCx3aWR0aDp1LGhlaWdodDpoLGhvdmVyb246by5ob3Zlcm9uLGhvdmVyaW5mb0l0ZW1zOm4sYXJyYW5nZW1lbnQ6by5hcnJhbmdlbWVudCxidW5kbGVjb2xvcnM6by5idW5kbGVjb2xvcnMsc29ydHBhdGhzOm8uc29ydHBhdGhzLGxhYmVsZm9udDpvLmxhYmVsZm9udCxjYXRlZ29yeWxhYmVsZm9udDpvLnRpY2tmb250LHBhdGhTaGFwZTpkLGRyYWdEaW1lbnNpb246bnVsbCxtYXJnaW46YSxwYXRoczpbXSxkaW1lbnNpb25zOltdLGdyYXBoRGl2OnQsdHJhY2VTZWxlY3Rpb246bnVsbCxwYXRoU2VsZWN0aW9uOm51bGwsZGltZW5zaW9uU2VsZWN0aW9uOm51bGx9O2kuZGltZW5zaW9ucyYmKFIoZyksUChnKSk7cmV0dXJuIGd9LmJpbmQoMCxlLHIpKSxsPWkuc2VsZWN0QWxsKFwiZy5wYXJjYXRzbGF5ZXJcIikuZGF0YShbbnVsbF0pO2wuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLFwicGFyY2F0c2xheWVyXCIpLnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixcImFsbFwiKTt2YXIgdT1sLnNlbGVjdEFsbChcImcudHJhY2UucGFyY2F0c1wiKS5kYXRhKGEsaCksdj11LmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIixcInRyYWNlIHBhcmNhdHNcIik7dS5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrdC54K1wiLCBcIit0LnkrXCIpXCJ9KSx2LmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsXCJwYXRoc1wiKTt2YXIgeD11LnNlbGVjdChcImcucGF0aHNcIikuc2VsZWN0QWxsKFwicGF0aC5wYXRoXCIpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQucGF0aHN9LGgpO3guYXR0cihcImZpbGxcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5tb2RlbC5jb2xvcn0pO3ZhciB3PXguZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJjbGFzc1wiLFwicGF0aFwiKS5hdHRyKFwic3Ryb2tlLW9wYWNpdHlcIiwwKS5hdHRyKFwiZmlsbFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmNvbG9yfSkuYXR0cihcImZpbGwtb3BhY2l0eVwiLDApO3kodykseC5hdHRyKFwiZFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnN2Z0R9KSx3LmVtcHR5KCl8fHguc29ydChwKSx4LmV4aXQoKS5yZW1vdmUoKSx4Lm9uKFwibW91c2VvdmVyXCIsZCkub24oXCJtb3VzZW91dFwiLGcpLm9uKFwiY2xpY2tcIixtKSx2LmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsXCJkaW1lbnNpb25zXCIpO3ZhciBrPXUuc2VsZWN0KFwiZy5kaW1lbnNpb25zXCIpLnNlbGVjdEFsbChcImcuZGltZW5zaW9uXCIpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGltZW5zaW9uc30saCk7ay5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsXCJkaW1lbnNpb25cIiksay5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrdC54K1wiLCAwKVwifSksay5leGl0KCkucmVtb3ZlKCk7dmFyIEE9ay5zZWxlY3RBbGwoXCJnLmNhdGVnb3J5XCIpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcmllc30saCksVD1BLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIixcImNhdGVnb3J5XCIpO0EuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKDAsIFwiK3QueStcIilcIn0pLFQuYXBwZW5kKFwicmVjdFwiKS5hdHRyKFwiY2xhc3NcIixcImNhdHJlY3RcIikuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsXCJub25lXCIpLEEuc2VsZWN0KFwicmVjdC5jYXRyZWN0XCIpLmF0dHIoXCJmaWxsXCIsXCJub25lXCIpLmF0dHIoXCJ3aWR0aFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRofSkuYXR0cihcImhlaWdodFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodH0pLGIoVCk7dmFyIHo9QS5zZWxlY3RBbGwoXCJyZWN0LmJhbmRyZWN0XCIpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQuYmFuZHN9LGgpO3ouZWFjaChmdW5jdGlvbigpe28ucmFpc2VUb1RvcCh0aGlzKX0pLHouYXR0cihcImZpbGxcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2xvcn0pO3ZhciBPPXouZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoXCJjbGFzc1wiLFwiYmFuZHJlY3RcIikuYXR0cihcInN0cm9rZS1vcGFjaXR5XCIsMCkuYXR0cihcImZpbGxcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2xvcn0pLmF0dHIoXCJmaWxsLW9wYWNpdHlcIiwwKTt6LmF0dHIoXCJmaWxsXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sb3J9KS5hdHRyKFwid2lkdGhcIixmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aH0pLmF0dHIoXCJoZWlnaHRcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KS5hdHRyKFwieVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KS5hdHRyKFwiY3Vyc29yXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJmaXhlZFwiPT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50P1wiZGVmYXVsdFwiOlwicGVycGVuZGljdWxhclwiPT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50P1wibnMtcmVzaXplXCI6XCJtb3ZlXCJ9KSxfKE8pLHouZXhpdCgpLnJlbW92ZSgpLFQuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwiY2xhc3NcIixcImNhdGxhYmVsXCIpLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLFwibm9uZVwiKTt2YXIgST1lLl9mdWxsTGF5b3V0LnBhcGVyX2JnY29sb3I7QS5zZWxlY3QoXCJ0ZXh0LmNhdGxhYmVsXCIpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpP1wic3RhcnRcIjpcImVuZFwifSkuYXR0cihcImFsaWdubWVudC1iYXNlbGluZVwiLFwibWlkZGxlXCIpLnN0eWxlKFwidGV4dC1zaGFkb3dcIixJK1wiIC0xcHggIDFweCAycHgsIFwiK0krXCIgMXB4ICAxcHggMnB4LCBcIitJK1wiICAxcHggLTFweCAycHgsIFwiK0krXCIgLTFweCAtMXB4IDJweFwiKS5zdHlsZShcImZpbGxcIixcInJnYigwLCAwLCAwKVwiKS5hdHRyKFwieFwiLGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpP3Qud2lkdGgrNTotNX0pLmF0dHIoXCJ5XCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0LzJ9KS50ZXh0KGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmNhdGVnb3J5TGFiZWx9KS5lYWNoKGZ1bmN0aW9uKHQpe3MuZm9udChuLnNlbGVjdCh0aGlzKSx0LnBhcmNhdHNWaWV3TW9kZWwuY2F0ZWdvcnlsYWJlbGZvbnQpLGMuY29udmVydFRvVHNwYW5zKG4uc2VsZWN0KHRoaXMpLGUpfSksVC5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJjbGFzc1wiLFwiZGltbGFiZWxcIiksQS5zZWxlY3QoXCJ0ZXh0LmRpbWxhYmVsXCIpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLFwibWlkZGxlXCIpLmF0dHIoXCJhbGlnbm1lbnQtYmFzZWxpbmVcIixcImJhc2VsaW5lXCIpLmF0dHIoXCJjdXJzb3JcIixmdW5jdGlvbih0KXtyZXR1cm5cImZpeGVkXCI9PT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQ/XCJkZWZhdWx0XCI6XCJldy1yZXNpemVcIn0pLmF0dHIoXCJ4XCIsZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGgvMn0pLmF0dHIoXCJ5XCIsLTUpLnRleHQoZnVuY3Rpb24odCxlKXtyZXR1cm4gMD09PWU/dC5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmRpbWVuc2lvbnNbdC5tb2RlbC5kaW1lbnNpb25JbmRdLmRpbWVuc2lvbkxhYmVsOm51bGx9KS5lYWNoKGZ1bmN0aW9uKHQpe3MuZm9udChuLnNlbGVjdCh0aGlzKSx0LnBhcmNhdHNWaWV3TW9kZWwubGFiZWxmb250KX0pLEEuc2VsZWN0QWxsKFwicmVjdC5iYW5kcmVjdFwiKS5vbihcIm1vdXNlb3ZlclwiLE0pLm9uKFwibW91c2VvdXRcIixTKSxBLmV4aXQoKS5yZW1vdmUoKSxrLmNhbGwobi5iZWhhdmlvci5kcmFnKCkub3JpZ2luKGZ1bmN0aW9uKHQpe3JldHVybnt4OnQueCx5OjB9fSkub24oXCJkcmFnc3RhcnRcIixFKS5vbihcImRyYWdcIixDKS5vbihcImRyYWdlbmRcIixMKSksdS5lYWNoKGZ1bmN0aW9uKHQpe3QudHJhY2VTZWxlY3Rpb249bi5zZWxlY3QodGhpcyksdC5wYXRoU2VsZWN0aW9uPW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbChcImcucGF0aHNcIikuc2VsZWN0QWxsKFwicGF0aC5wYXRoXCIpLHQuZGltZW5zaW9uU2VsZWN0aW9uPW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbChcImcuZGltZW5zaW9uc1wiKS5zZWxlY3RBbGwoXCJnLmRpbWVuc2lvblwiKX0pLHUuZXhpdCgpLnJlbW92ZSgpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQua2V5fWZ1bmN0aW9uIGYodCl7dmFyIGU9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnMubGVuZ3RoLHI9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbZS0xXS5tb2RlbC5kaW1lbnNpb25JbmQ7cmV0dXJuIHQubW9kZWwuZGltZW5zaW9uSW5kPT09cn1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIHQubW9kZWwucmF3Q29sb3I+ZS5tb2RlbC5yYXdDb2xvcj8xOnQubW9kZWwucmF3Q29sb3I8ZS5tb2RlbC5yYXdDb2xvcj8tMTowfWZ1bmN0aW9uIGQodCl7aWYoIXQucGFyY2F0c1ZpZXdNb2RlbC5kcmFnRGltZW5zaW9uJiYtMT09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKFwic2tpcFwiKSl7by5yYWlzZVRvVG9wKHRoaXMpLHgobi5zZWxlY3QodGhpcykpO3ZhciBlPXYodCk7aWYodC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LmVtaXQoXCJwbG90bHlfaG92ZXJcIix7cG9pbnRzOmUsZXZlbnQ6bi5ldmVudH0pLC0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoXCJub25lXCIpKXt2YXIgcixpLHMsYz1uLm1vdXNlKHRoaXMpWzBdLHU9dC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LGg9dC5wYXJjYXRzVmlld01vZGVsLnRyYWNlLGY9dS5fZnVsbExheW91dCxwPWYuX3BhcGVyZGl2Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPXQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtmb3Iocz0wO3M8dC5sZWZ0WHMubGVuZ3RoLTE7cysrKWlmKHQubGVmdFhzW3NdK3QuZGltV2lkdGhzW3NdLTI8PWMmJmM8PXQubGVmdFhzW3MrMV0rMil7dmFyIGc9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbc10sbT10LnBhcmNhdHNWaWV3TW9kZWwuZGltZW5zaW9uc1tzKzFdO3I9KGcueCtnLndpZHRoK20ueCkvMixpPSh0LnRvcFlzW3NdK3QudG9wWXNbcysxXSt0LmhlaWdodCkvMjticmVha312YXIgeT10LnBhcmNhdHNWaWV3TW9kZWwueCtyLGI9dC5wYXJjYXRzVmlld01vZGVsLnkraSxfPWwubW9zdFJlYWRhYmxlKHQubW9kZWwuY29sb3IsW1wiYmxhY2tcIixcIndoaXRlXCJdKSx3PXQubW9kZWwuY291bnQsaz13L3QucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5jb3VudCxBPXtjb3VudExhYmVsOncscHJvYmFiaWxpdHlMYWJlbDprLnRvRml4ZWQoMyl9LFQ9W107LTEhPT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZihcImNvdW50XCIpJiZULnB1c2goW1wiQ291bnQ6XCIsQS5jb3VudExhYmVsXS5qb2luKFwiIFwiKSksLTEhPT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZihcInByb2JhYmlsaXR5XCIpJiZULnB1c2goW1wiUDpcIixBLnByb2JhYmlsaXR5TGFiZWxdLmpvaW4oXCIgXCIpKTt2YXIgTT1ULmpvaW4oXCI8YnI+XCIpLFM9bi5tb3VzZSh1KVswXTthLmxvbmVIb3Zlcih7dHJhY2U6aCx4OnktcC5sZWZ0K2QubGVmdCx5OmItcC50b3ArZC50b3AsdGV4dDpNLGNvbG9yOnQubW9kZWwuY29sb3IsYm9yZGVyQ29sb3I6XCJibGFja1wiLGZvbnRGYW1pbHk6J01vbmFjbywgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2UnLGZvbnRTaXplOjEwLGZvbnRDb2xvcjpfLGlkZWFsQWxpZ246Uzx5P1wicmlnaHRcIjpcImxlZnRcIixob3ZlcnRlbXBsYXRlOihoLmxpbmV8fHt9KS5ob3ZlcnRlbXBsYXRlLGhvdmVydGVtcGxhdGVMYWJlbHM6QSxldmVudERhdGE6W3tkYXRhOmguX2lucHV0LGZ1bGxEYXRhOmgsY291bnQ6dyxwcm9iYWJpbGl0eTprfV19LHtjb250YWluZXI6Zi5faG92ZXJsYXllci5ub2RlKCksb3V0ZXJDb250YWluZXI6Zi5fcGFwZXIubm9kZSgpLGdkOnV9KX19fWZ1bmN0aW9uIGcodCl7aWYoIXQucGFyY2F0c1ZpZXdNb2RlbC5kcmFnRGltZW5zaW9uJiYoeShuLnNlbGVjdCh0aGlzKSksYS5sb25lVW5ob3Zlcih0LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQuX2hvdmVybGF5ZXIubm9kZSgpKSx0LnBhcmNhdHNWaWV3TW9kZWwucGF0aFNlbGVjdGlvbi5zb3J0KHApLC0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoXCJza2lwXCIpKSl7dmFyIGU9dih0KTt0LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYuZW1pdChcInBsb3RseV91bmhvdmVyXCIse3BvaW50czplLGV2ZW50Om4uZXZlbnR9KX19ZnVuY3Rpb24gdih0KXtmb3IodmFyIGU9W10scj16KHQucGFyY2F0c1ZpZXdNb2RlbCksbj0wO248dC5tb2RlbC52YWx1ZUluZHMubGVuZ3RoO24rKyl7dmFyIGk9dC5tb2RlbC52YWx1ZUluZHNbbl07ZS5wdXNoKHtjdXJ2ZU51bWJlcjpyLHBvaW50TnVtYmVyOml9KX1yZXR1cm4gZX1mdW5jdGlvbiBtKHQpe2lmKC0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoXCJza2lwXCIpKXt2YXIgZT12KHQpO3QucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdi5lbWl0KFwicGxvdGx5X2NsaWNrXCIse3BvaW50czplLGV2ZW50Om4uZXZlbnR9KX19ZnVuY3Rpb24geSh0KXt0LmF0dHIoXCJmaWxsXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQubW9kZWwuY29sb3J9KS5hdHRyKFwiZmlsbC1vcGFjaXR5XCIsLjYpLmF0dHIoXCJzdHJva2VcIixcImxpZ2h0Z3JheVwiKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsLjIpLmF0dHIoXCJzdHJva2Utb3BhY2l0eVwiLDEpfWZ1bmN0aW9uIHgodCl7dC5hdHRyKFwiZmlsbC1vcGFjaXR5XCIsLjgpLmF0dHIoXCJzdHJva2VcIixmdW5jdGlvbih0KXtyZXR1cm4gbC5tb3N0UmVhZGFibGUodC5tb2RlbC5jb2xvcixbXCJibGFja1wiLFwid2hpdGVcIl0pfSkuYXR0cihcInN0cm9rZS13aWR0aFwiLC4zKX1mdW5jdGlvbiBiKHQpe3Quc2VsZWN0KFwicmVjdC5jYXRyZWN0XCIpLmF0dHIoXCJzdHJva2VcIixcImJsYWNrXCIpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwxKS5hdHRyKFwic3Ryb2tlLW9wYWNpdHlcIiwxKX1mdW5jdGlvbiBfKHQpe3QuYXR0cihcInN0cm9rZVwiLFwiYmxhY2tcIikuYXR0cihcInN0cm9rZS13aWR0aFwiLC4yKS5hdHRyKFwic3Ryb2tlLW9wYWNpdHlcIiwxKS5hdHRyKFwiZmlsbC1vcGFjaXR5XCIsMSl9ZnVuY3Rpb24gdyh0KXt2YXIgZT10LnBhcmNhdHNWaWV3TW9kZWwucGF0aFNlbGVjdGlvbixyPXQuY2F0ZWdvcnlWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9uSW5kLG49dC5jYXRlZ29yeVZpZXdNb2RlbC5tb2RlbC5jYXRlZ29yeUluZDtyZXR1cm4gZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUubW9kZWwuY2F0ZWdvcnlJbmRzW3JdPT09biYmZS5tb2RlbC5jb2xvcj09PXQuY29sb3J9KX1mdW5jdGlvbiBrKHQsZSxyKXt2YXIgaT1uLnNlbGVjdCh0KS5kYXR1bSgpLnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYsYT1uLnNlbGVjdCh0LnBhcmVudE5vZGUpLnNlbGVjdEFsbChcInJlY3QuYmFuZHJlY3RcIiksbz1bXTthLmVhY2goZnVuY3Rpb24odCl7dyh0KS5lYWNoKGZ1bmN0aW9uKHQpe0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG8sdih0KSl9KX0pLGkuZW1pdChlLHtwb2ludHM6byxldmVudDpyfSl9ZnVuY3Rpb24gQSh0LGUscil7dmFyIGk9bi5zZWxlY3QodCkuZGF0dW0oKSxhPWkucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdixvPXcoaSkscz1bXTtvLmVhY2goZnVuY3Rpb24odCl7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkocyx2KHQpKX0pLGEuZW1pdChlLHtwb2ludHM6cyxldmVudDpyfSl9ZnVuY3Rpb24gVCh0LGUpe3ZhciByLGksYT1uLnNlbGVjdChlLnBhcmVudE5vZGUpLnNlbGVjdChcInJlY3QuY2F0cmVjdFwiKSxvPWEubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9YS5kYXR1bSgpLGw9cy5wYXJjYXRzVmlld01vZGVsLGM9bC5tb2RlbC5kaW1lbnNpb25zW3MubW9kZWwuZGltZW5zaW9uSW5kXSx1PWwudHJhY2UsaD1vLnRvcCtvLmhlaWdodC8yO2wuZGltZW5zaW9ucy5sZW5ndGg+MSYmYy5kaXNwbGF5SW5kPT09bC5kaW1lbnNpb25zLmxlbmd0aC0xPyhyPW8ubGVmdCxpPVwibGVmdFwiKToocj1vLmxlZnQrby53aWR0aCxpPVwicmlnaHRcIik7dmFyIGY9cy5tb2RlbC5jb3VudCxwPXMubW9kZWwuY2F0ZWdvcnlMYWJlbCxkPWYvcy5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmNvdW50LGc9e2NvdW50TGFiZWw6ZixjYXRlZ29yeUxhYmVsOnAscHJvYmFiaWxpdHlMYWJlbDpkLnRvRml4ZWQoMyl9LHY9W107LTEhPT1zLnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZihcImNvdW50XCIpJiZ2LnB1c2goW1wiQ291bnQ6XCIsZy5jb3VudExhYmVsXS5qb2luKFwiIFwiKSksLTEhPT1zLnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZihcInByb2JhYmlsaXR5XCIpJiZ2LnB1c2goW1wiUChcIitnLmNhdGVnb3J5TGFiZWwrXCIpOlwiLGcucHJvYmFiaWxpdHlMYWJlbF0uam9pbihcIiBcIikpO3ZhciBtPXYuam9pbihcIjxicj5cIik7cmV0dXJue3RyYWNlOnUseDpyLXQubGVmdCx5OmgtdC50b3AsdGV4dDptLGNvbG9yOlwibGlnaHRncmF5XCIsYm9yZGVyQ29sb3I6XCJibGFja1wiLGZvbnRGYW1pbHk6J01vbmFjbywgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2UnLGZvbnRTaXplOjEyLGZvbnRDb2xvcjpcImJsYWNrXCIsaWRlYWxBbGlnbjppLGhvdmVydGVtcGxhdGU6dS5ob3ZlcnRlbXBsYXRlLGhvdmVydGVtcGxhdGVMYWJlbHM6ZyxldmVudERhdGE6W3tkYXRhOnUuX2lucHV0LGZ1bGxEYXRhOnUsY291bnQ6ZixjYXRlZ29yeTpwLHByb2JhYmlsaXR5OmR9XX19ZnVuY3Rpb24gTSh0KXtpZighdC5wYXJjYXRzVmlld01vZGVsLmRyYWdEaW1lbnNpb24mJi0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoXCJza2lwXCIpKXtpZihuLm1vdXNlKHRoaXMpWzFdPC0xKXJldHVybjt2YXIgZSxyPXQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdixpPXIuX2Z1bGxMYXlvdXQscz1pLl9wYXBlcmRpdi5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYz10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJvbjtpZihcImNvbG9yXCI9PT1jPyghZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkuZGF0dW0oKSxyPXcoZSk7eChyKSxyLmVhY2goZnVuY3Rpb24oKXtvLnJhaXNlVG9Ub3AodGhpcyl9KSxuLnNlbGVjdCh0LnBhcmVudE5vZGUpLnNlbGVjdEFsbChcInJlY3QuYmFuZHJlY3RcIikuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yPT09ZS5jb2xvcn0pLmVhY2goZnVuY3Rpb24oKXtvLnJhaXNlVG9Ub3AodGhpcyksbi5zZWxlY3QodGhpcykuYXR0cihcInN0cm9rZVwiLFwiYmxhY2tcIikuYXR0cihcInN0cm9rZS13aWR0aFwiLDEuNSl9KX0odGhpcyksQSh0aGlzLFwicGxvdGx5X2hvdmVyXCIsbi5ldmVudCkpOighZnVuY3Rpb24odCl7bi5zZWxlY3QodC5wYXJlbnROb2RlKS5zZWxlY3RBbGwoXCJyZWN0LmJhbmRyZWN0XCIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dyh0KTt4KGUpLGUuZWFjaChmdW5jdGlvbigpe28ucmFpc2VUb1RvcCh0aGlzKX0pfSksbi5zZWxlY3QodC5wYXJlbnROb2RlKS5zZWxlY3QoXCJyZWN0LmNhdHJlY3RcIikuYXR0cihcInN0cm9rZVwiLFwiYmxhY2tcIikuYXR0cihcInN0cm9rZS13aWR0aFwiLDIuNSl9KHRoaXMpLGsodGhpcyxcInBsb3RseV9ob3ZlclwiLG4uZXZlbnQpKSwtMT09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKFwibm9uZVwiKSlcImNhdGVnb3J5XCI9PT1jP2U9VChzLHRoaXMpOlwiY29sb3JcIj09PWM/ZT1mdW5jdGlvbih0LGUpe3ZhciByLGksYT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89bi5zZWxlY3QoZSkuZGF0dW0oKSxzPW8uY2F0ZWdvcnlWaWV3TW9kZWwsYz1zLnBhcmNhdHNWaWV3TW9kZWwsdT1jLm1vZGVsLmRpbWVuc2lvbnNbcy5tb2RlbC5kaW1lbnNpb25JbmRdLGg9Yy50cmFjZSxmPWEueSthLmhlaWdodC8yO2MuZGltZW5zaW9ucy5sZW5ndGg+MSYmdS5kaXNwbGF5SW5kPT09Yy5kaW1lbnNpb25zLmxlbmd0aC0xPyhyPWEubGVmdCxpPVwibGVmdFwiKToocj1hLmxlZnQrYS53aWR0aCxpPVwicmlnaHRcIik7dmFyIHA9cy5tb2RlbC5jYXRlZ29yeUxhYmVsLGQ9by5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmNvdW50LGc9MDtvLmNhdGVnb3J5Vmlld01vZGVsLmJhbmRzLmZvckVhY2goZnVuY3Rpb24odCl7dC5jb2xvcj09PW8uY29sb3ImJihnKz10LmNvdW50KX0pO3ZhciB2PXMubW9kZWwuY291bnQsbT0wO2MucGF0aFNlbGVjdGlvbi5lYWNoKGZ1bmN0aW9uKHQpe3QubW9kZWwuY29sb3I9PT1vLmNvbG9yJiYobSs9dC5tb2RlbC5jb3VudCl9KTt2YXIgeT1nL2QseD1nL20sYj1nL3YsXz17Y291bnRMYWJlbDpkLGNhdGVnb3J5TGFiZWw6cCxwcm9iYWJpbGl0eUxhYmVsOnkudG9GaXhlZCgzKX0sdz1bXTstMSE9PXMucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKFwiY291bnRcIikmJncucHVzaChbXCJDb3VudDpcIixfLmNvdW50TGFiZWxdLmpvaW4oXCIgXCIpKSwtMSE9PXMucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKFwicHJvYmFiaWxpdHlcIikmJih3LnB1c2goXCJQKGNvbG9yIFxcdTIyMjkgXCIrcCtcIik6IFwiK18ucHJvYmFiaWxpdHlMYWJlbCksdy5wdXNoKFwiUChcIitwK1wiIHwgY29sb3IpOiBcIit4LnRvRml4ZWQoMykpLHcucHVzaChcIlAoY29sb3IgfCBcIitwK1wiKTogXCIrYi50b0ZpeGVkKDMpKSk7dmFyIGs9dy5qb2luKFwiPGJyPlwiKSxBPWwubW9zdFJlYWRhYmxlKG8uY29sb3IsW1wiYmxhY2tcIixcIndoaXRlXCJdKTtyZXR1cm57dHJhY2U6aCx4OnItdC5sZWZ0LHk6Zi10LnRvcCx0ZXh0OmssY29sb3I6by5jb2xvcixib3JkZXJDb2xvcjpcImJsYWNrXCIsZm9udEZhbWlseTonTW9uYWNvLCBcIkNvdXJpZXIgTmV3XCIsIG1vbm9zcGFjZScsZm9udENvbG9yOkEsZm9udFNpemU6MTAsaWRlYWxBbGlnbjppLGhvdmVydGVtcGxhdGU6aC5ob3ZlcnRlbXBsYXRlLGhvdmVydGVtcGxhdGVMYWJlbHM6XyxldmVudERhdGE6W3tkYXRhOmguX2lucHV0LGZ1bGxEYXRhOmgsY2F0ZWdvcnk6cCxjb3VudDpkLHByb2JhYmlsaXR5OnksY2F0ZWdvcnljb3VudDp2LGNvbG9yY291bnQ6bSxiYW5kY29sb3Jjb3VudDpnfV19fShzLHRoaXMpOlwiZGltZW5zaW9uXCI9PT1jJiYoZT1mdW5jdGlvbih0LGUpe3ZhciByPVtdO3JldHVybiBuLnNlbGVjdChlLnBhcmVudE5vZGUucGFyZW50Tm9kZSkuc2VsZWN0QWxsKFwiZy5jYXRlZ29yeVwiKS5zZWxlY3QoXCJyZWN0LmNhdHJlY3RcIikuZWFjaChmdW5jdGlvbigpe3IucHVzaChUKHQsdGhpcykpfSkscn0ocyx0aGlzKSksZSYmYS5tdWx0aUhvdmVycyhlLHtjb250YWluZXI6aS5faG92ZXJsYXllci5ub2RlKCksb3V0ZXJDb250YWluZXI6aS5fcGFwZXIubm9kZSgpLGdkOnJ9KX19ZnVuY3Rpb24gUyh0KXt2YXIgZT10LnBhcmNhdHNWaWV3TW9kZWw7aWYoIWUuZHJhZ0RpbWVuc2lvbiYmKHkoZS5wYXRoU2VsZWN0aW9uKSxiKGUuZGltZW5zaW9uU2VsZWN0aW9uLnNlbGVjdEFsbChcImcuY2F0ZWdvcnlcIikpLF8oZS5kaW1lbnNpb25TZWxlY3Rpb24uc2VsZWN0QWxsKFwiZy5jYXRlZ29yeVwiKS5zZWxlY3RBbGwoXCJyZWN0LmJhbmRyZWN0XCIpKSxhLmxvbmVVbmhvdmVyKGUuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQuX2hvdmVybGF5ZXIubm9kZSgpKSxlLnBhdGhTZWxlY3Rpb24uc29ydChwKSwtMT09PWUuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZihcInNraXBcIikpKXtcImNvbG9yXCI9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJvbj9BKHRoaXMsXCJwbG90bHlfdW5ob3ZlclwiLG4uZXZlbnQpOmsodGhpcyxcInBsb3RseV91bmhvdmVyXCIsbi5ldmVudCl9fWZ1bmN0aW9uIEUodCl7XCJmaXhlZFwiIT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50JiYodC5kcmFnRGltZW5zaW9uRGlzcGxheUluZD10Lm1vZGVsLmRpc3BsYXlJbmQsdC5pbml0aWFsRHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmRzPXQucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5SW5kfSksdC5kcmFnSGFzTW92ZWQ9ITEsdC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kPW51bGwsbi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKFwiZy5jYXRlZ29yeVwiKS5zZWxlY3QoXCJyZWN0LmNhdHJlY3RcIikuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLm1vdXNlKHRoaXMpWzBdLGk9bi5tb3VzZSh0aGlzKVsxXTstMjw9ciYmcjw9ZS53aWR0aCsyJiYtMjw9aSYmaTw9ZS5oZWlnaHQrMiYmKHQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZD1lLm1vZGVsLmRpc3BsYXlJbmQsdC5pbml0aWFsRHJhZ0NhdGVnb3J5RGlzcGxheUluZHM9dC5tb2RlbC5jYXRlZ29yaWVzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5SW5kfSksZS5tb2RlbC5kcmFnWT1lLnksby5yYWlzZVRvVG9wKHRoaXMucGFyZW50Tm9kZSksbi5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5zZWxlY3RBbGwoXCJyZWN0LmJhbmRyZWN0XCIpLmVhY2goZnVuY3Rpb24oZSl7ZS55PGkmJmk8PWUueStlLmhlaWdodCYmKHQucG90ZW50aWFsQ2xpY2tCYW5kPXRoaXMpfSkpfSksdC5wYXJjYXRzVmlld01vZGVsLmRyYWdEaW1lbnNpb249dCxhLmxvbmVVbmhvdmVyKHQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdi5fZnVsbExheW91dC5faG92ZXJsYXllci5ub2RlKCkpKX1mdW5jdGlvbiBDKHQpe2lmKFwiZml4ZWRcIiE9PXQucGFyY2F0c1ZpZXdNb2RlbC5hcnJhbmdlbWVudCYmKHQuZHJhZ0hhc01vdmVkPSEwLG51bGwhPT10LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kKSl7dmFyIGU9dC5kcmFnRGltZW5zaW9uRGlzcGxheUluZCxyPWUtMSxpPWUrMSxhPXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW2VdO2lmKG51bGwhPT10LmRyYWdDYXRlZ29yeURpc3BsYXlJbmQpe3ZhciBvPWEuY2F0ZWdvcmllc1t0LmRyYWdDYXRlZ29yeURpc3BsYXlJbmRdO28ubW9kZWwuZHJhZ1krPW4uZXZlbnQuZHk7dmFyIHM9by5tb2RlbC5kcmFnWSxsPW8ubW9kZWwuZGlzcGxheUluZCxjPWEuY2F0ZWdvcmllcyx1PWNbbC0xXSxoPWNbbCsxXTt2b2lkIDAhPT11JiZzPHUueSt1LmhlaWdodC8yJiYoby5tb2RlbC5kaXNwbGF5SW5kPXUubW9kZWwuZGlzcGxheUluZCx1Lm1vZGVsLmRpc3BsYXlJbmQ9bCksdm9pZCAwIT09aCYmcytvLmhlaWdodD5oLnkraC5oZWlnaHQvMiYmKG8ubW9kZWwuZGlzcGxheUluZD1oLm1vZGVsLmRpc3BsYXlJbmQsaC5tb2RlbC5kaXNwbGF5SW5kPWwpLHQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZD1vLm1vZGVsLmRpc3BsYXlJbmR9aWYobnVsbD09PXQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZHx8XCJmcmVlZm9ybVwiPT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50KXthLm1vZGVsLmRyYWdYPW4uZXZlbnQueDt2YXIgZj10LnBhcmNhdHNWaWV3TW9kZWwuZGltZW5zaW9uc1tyXSxwPXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW2ldO3ZvaWQgMCE9PWYmJmEubW9kZWwuZHJhZ1g8Zi54K2Yud2lkdGgmJihhLm1vZGVsLmRpc3BsYXlJbmQ9Zi5tb2RlbC5kaXNwbGF5SW5kLGYubW9kZWwuZGlzcGxheUluZD1lKSx2b2lkIDAhPT1wJiZhLm1vZGVsLmRyYWdYK2Eud2lkdGg+cC54JiYoYS5tb2RlbC5kaXNwbGF5SW5kPXAubW9kZWwuZGlzcGxheUluZCxwLm1vZGVsLmRpc3BsYXlJbmQ9dC5kcmFnRGltZW5zaW9uRGlzcGxheUluZCksdC5kcmFnRGltZW5zaW9uRGlzcGxheUluZD1hLm1vZGVsLmRpc3BsYXlJbmR9Uih0LnBhcmNhdHNWaWV3TW9kZWwpLFAodC5wYXJjYXRzVmlld01vZGVsKSxJKHQucGFyY2F0c1ZpZXdNb2RlbCksTyh0LnBhcmNhdHNWaWV3TW9kZWwpfX1mdW5jdGlvbiBMKHQpe2lmKFwiZml4ZWRcIiE9PXQucGFyY2F0c1ZpZXdNb2RlbC5hcnJhbmdlbWVudCYmbnVsbCE9PXQuZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmQpe24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbChcInRleHRcIikuYXR0cihcImZvbnQtd2VpZ2h0XCIsXCJub3JtYWxcIik7dmFyIGU9e30scj16KHQucGFyY2F0c1ZpZXdNb2RlbCksYT10LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheUluZH0pLG89dC5pbml0aWFsRHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmRzLnNvbWUoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCE9PWFbZV19KTtvJiZhLmZvckVhY2goZnVuY3Rpb24ocixuKXt2YXIgaT10LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9uc1tuXS5jb250YWluZXJJbmQ7ZVtcImRpbWVuc2lvbnNbXCIraStcIl0uZGlzcGxheWluZGV4XCJdPXJ9KTt2YXIgcz0hMTtpZihudWxsIT09dC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kKXt2YXIgbD10Lm1vZGVsLmNhdGVnb3JpZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3BsYXlJbmR9KTtpZihzPXQuaW5pdGlhbERyYWdDYXRlZ29yeURpc3BsYXlJbmRzLnNvbWUoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCE9PWxbZV19KSl7dmFyIGM9dC5tb2RlbC5jYXRlZ29yaWVzLnNsaWNlKCkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmRpc3BsYXlJbmQtZS5kaXNwbGF5SW5kfSksdT1jLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yeVZhbHVlfSksaD1jLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yeUxhYmVsfSk7ZVtcImRpbWVuc2lvbnNbXCIrdC5tb2RlbC5jb250YWluZXJJbmQrXCJdLmNhdGVnb3J5YXJyYXlcIl09W3VdLGVbXCJkaW1lbnNpb25zW1wiK3QubW9kZWwuY29udGFpbmVySW5kK1wiXS50aWNrdGV4dFwiXT1baF0sZVtcImRpbWVuc2lvbnNbXCIrdC5tb2RlbC5jb250YWluZXJJbmQrXCJdLmNhdGVnb3J5b3JkZXJcIl09XCJhcnJheVwifX1pZigtMT09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKFwic2tpcFwiKSYmIXQuZHJhZ0hhc01vdmVkJiZ0LnBvdGVudGlhbENsaWNrQmFuZCYmKFwiY29sb3JcIj09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3Zlcm9uP0EodC5wb3RlbnRpYWxDbGlja0JhbmQsXCJwbG90bHlfY2xpY2tcIixuLmV2ZW50LnNvdXJjZUV2ZW50KTprKHQucG90ZW50aWFsQ2xpY2tCYW5kLFwicGxvdGx5X2NsaWNrXCIsbi5ldmVudC5zb3VyY2VFdmVudCkpLHQubW9kZWwuZHJhZ1g9bnVsbCxudWxsIT09dC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kKXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW3QuZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmRdLmNhdGVnb3JpZXNbdC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kXS5tb2RlbC5kcmFnWT1udWxsLHQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZD1udWxsO3QuZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmQ9bnVsbCx0LnBhcmNhdHNWaWV3TW9kZWwuZHJhZ0RpbWVuc2lvbj1udWxsLHQuZHJhZ0hhc01vdmVkPW51bGwsdC5wb3RlbnRpYWxDbGlja0JhbmQ9bnVsbCxSKHQucGFyY2F0c1ZpZXdNb2RlbCksUCh0LnBhcmNhdHNWaWV3TW9kZWwpLG4udHJhbnNpdGlvbigpLmR1cmF0aW9uKDMwMCkuZWFzZShcImN1YmljLWluLW91dFwiKS5lYWNoKGZ1bmN0aW9uKCl7SSh0LnBhcmNhdHNWaWV3TW9kZWwsITApLE8odC5wYXJjYXRzVmlld01vZGVsLCEwKX0pLmVhY2goXCJlbmRcIixmdW5jdGlvbigpeyhvfHxzKSYmaS5yZXN0eWxlKHQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdixlLFtyXSl9KX19ZnVuY3Rpb24geih0KXtmb3IodmFyIGUscj10LmdyYXBoRGl2Ll9mdWxsRGF0YSxuPTA7bjxyLmxlbmd0aDtuKyspaWYodC5rZXk9PT1yW25dLnVpZCl7ZT1uO2JyZWFrfXJldHVybiBlfWZ1bmN0aW9uIE8odCxlKXt2YXIgcjt2b2lkIDA9PT1lJiYoZT0hMSksdC5wYXRoU2VsZWN0aW9uLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQucGF0aHN9LGgpLChyPXQucGF0aFNlbGVjdGlvbixlP3IudHJhbnNpdGlvbigpOnIpLmF0dHIoXCJkXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuc3ZnRH0pfWZ1bmN0aW9uIEkodCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlP3QudHJhbnNpdGlvbigpOnR9dm9pZCAwPT09ZSYmKGU9ITEpLHQuZGltZW5zaW9uU2VsZWN0aW9uLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGltZW5zaW9uc30saCk7dmFyIGk9dC5kaW1lbnNpb25TZWxlY3Rpb24uc2VsZWN0QWxsKFwiZy5jYXRlZ29yeVwiKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3JpZXN9LGgpO3IodC5kaW1lbnNpb25TZWxlY3Rpb24pLmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXtyZXR1cm5cInRyYW5zbGF0ZShcIit0LngrXCIsIDApXCJ9KSxyKGkpLmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXtyZXR1cm5cInRyYW5zbGF0ZSgwLCBcIit0LnkrXCIpXCJ9KSxpLnNlbGVjdChcIi5kaW1sYWJlbFwiKS50ZXh0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT1lP3QucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25zW3QubW9kZWwuZGltZW5zaW9uSW5kXS5kaW1lbnNpb25MYWJlbDpudWxsfSksaS5zZWxlY3QoXCIuY2F0bGFiZWxcIikuYXR0cihcInRleHQtYW5jaG9yXCIsZnVuY3Rpb24odCl7cmV0dXJuIGYodCk/XCJzdGFydFwiOlwiZW5kXCJ9KS5hdHRyKFwieFwiLGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpP3Qud2lkdGgrNTotNX0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGUscjtmKHQpPyhlPXQud2lkdGgrNSxyPVwic3RhcnRcIik6KGU9LTUscj1cImVuZFwiKSxuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoXCJ0c3BhblwiKS5hdHRyKFwieFwiLGUpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLHIpfSk7dmFyIGE9aS5zZWxlY3RBbGwoXCJyZWN0LmJhbmRyZWN0XCIpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQuYmFuZHN9LGgpLHM9YS5lbnRlcigpLmFwcGVuZChcInJlY3RcIikuYXR0cihcImNsYXNzXCIsXCJiYW5kcmVjdFwiKS5hdHRyKFwiY3Vyc29yXCIsXCJtb3ZlXCIpLmF0dHIoXCJzdHJva2Utb3BhY2l0eVwiLDApLmF0dHIoXCJmaWxsXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sb3J9KS5hdHRyKFwiZmlsbC1vcGFjaXR5XCIsMCk7YS5hdHRyKFwiZmlsbFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yfSkuYXR0cihcIndpZHRoXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGh9KS5hdHRyKFwiaGVpZ2h0XCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkuYXR0cihcInlcIixmdW5jdGlvbih0KXtyZXR1cm4gdC55fSksXyhzKSxhLmVhY2goZnVuY3Rpb24oKXtvLnJhaXNlVG9Ub3AodGhpcyl9KSxhLmV4aXQoKS5yZW1vdmUoKX1mdW5jdGlvbiBEKHQsZSxyLGksYSl7dmFyIG8scyxsPVtdLGM9W107Zm9yKHM9MDtzPHIubGVuZ3RoLTE7cysrKW89bi5pbnRlcnBvbGF0ZU51bWJlcihyW3NdK3Rbc10sdFtzKzFdKSxsLnB1c2gobyhhKSksYy5wdXNoKG8oMS1hKSk7dmFyIHU9XCJNIFwiK3RbMF0rXCIsXCIrZVswXTtmb3IodSs9XCJsXCIrclswXStcIiwwIFwiLHM9MTtzPHIubGVuZ3RoO3MrKyl1Kz1cIkNcIitsW3MtMV0rXCIsXCIrZVtzLTFdK1wiIFwiK2Nbcy0xXStcIixcIitlW3NdK1wiIFwiK3Rbc10rXCIsXCIrZVtzXSx1Kz1cImxcIityW3NdK1wiLDAgXCI7Zm9yKHUrPVwibDAsXCIraStcIiBcIix1Kz1cImwgLVwiK3Jbci5sZW5ndGgtMV0rXCIsMCBcIixzPXIubGVuZ3RoLTI7cz49MDtzLS0pdSs9XCJDXCIrY1tzXStcIixcIisoZVtzKzFdK2kpK1wiIFwiK2xbc10rXCIsXCIrKGVbc10raSkrXCIgXCIrKHRbc10rcltzXSkrXCIsXCIrKGVbc10raSksdSs9XCJsLVwiK3Jbc10rXCIsMCBcIjtyZXR1cm4gdSs9XCJaXCJ9ZnVuY3Rpb24gUCh0KXt2YXIgZT10LmRpbWVuc2lvbnMscj10Lm1vZGVsLG49ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcmllcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pfSksaT10Lm1vZGVsLmRpbWVuc2lvbnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3JpZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3BsYXlJbmR9KX0pLGE9dC5tb2RlbC5kaW1lbnNpb25zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5SW5kfSksbz10LmRpbWVuc2lvbnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmRpbWVuc2lvbkluZH0pLHM9ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQueH0pLGw9ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGh9KSxjPVtdO2Zvcih2YXIgdSBpbiByLnBhdGhzKXIucGF0aHMuaGFzT3duUHJvcGVydHkodSkmJmMucHVzaChyLnBhdGhzW3VdKTtmdW5jdGlvbiBoKHQpe3ZhciBlPXQuY2F0ZWdvcnlJbmRzLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBpW2VdW3RdfSk7cmV0dXJuIG8ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSl9Yy5zb3J0KGZ1bmN0aW9uKGUscil7dmFyIG49aChlKSxpPWgocik7cmV0dXJuXCJiYWNrd2FyZFwiPT09dC5zb3J0cGF0aHMmJihuLnJldmVyc2UoKSxpLnJldmVyc2UoKSksbi5wdXNoKGUudmFsdWVJbmRzWzBdKSxpLnB1c2goci52YWx1ZUluZHNbMF0pLHQuYnVuZGxlY29sb3JzJiYobi51bnNoaWZ0KGUucmF3Q29sb3IpLGkudW5zaGlmdChyLnJhd0NvbG9yKSksbjxpPy0xOm4+aT8xOjB9KTtmb3IodmFyIGY9bmV3IEFycmF5KGMubGVuZ3RoKSxwPWVbMF0ubW9kZWwuY291bnQsZD1lWzBdLmNhdGVnb3JpZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodH0pLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KSxnPTA7ZzxjLmxlbmd0aDtnKyspe3ZhciB2LG09Y1tnXTt2PXA+MD9kKihtLmNvdW50L3ApOjA7Zm9yKHZhciB5LHg9bmV3IEFycmF5KG4ubGVuZ3RoKSxiPTA7YjxtLmNhdGVnb3J5SW5kcy5sZW5ndGg7YisrKXt2YXIgXz1tLmNhdGVnb3J5SW5kc1tiXSx3PWlbYl1bX10saz1hW2JdO3hba109bltrXVt3XSxuW2tdW3ddKz12O3ZhciBBPXQuZGltZW5zaW9uc1trXS5jYXRlZ29yaWVzW3ddLFQ9QS5iYW5kcy5sZW5ndGgsTT1BLmJhbmRzW1QtMV07aWYodm9pZCAwPT09TXx8bS5yYXdDb2xvciE9PU0ucmF3Q29sb3Ipe3ZhciBTPXZvaWQgMD09PU0/MDpNLnkrTS5oZWlnaHQ7QS5iYW5kcy5wdXNoKHtrZXk6Uyxjb2xvcjptLmNvbG9yLHJhd0NvbG9yOm0ucmF3Q29sb3IsaGVpZ2h0OnYsd2lkdGg6QS53aWR0aCxjb3VudDptLmNvdW50LHk6UyxjYXRlZ29yeVZpZXdNb2RlbDpBLHBhcmNhdHNWaWV3TW9kZWw6dH0pfWVsc2V7dmFyIEU9QS5iYW5kc1tULTFdO0UuaGVpZ2h0Kz12LEUuY291bnQrPW0uY291bnR9fXk9XCJoc3BsaW5lXCI9PT10LnBhdGhTaGFwZT9EKHMseCxsLHYsLjUpOkQocyx4LGwsdiwwKSxmW2ddPXtrZXk6bS52YWx1ZUluZHNbMF0sbW9kZWw6bSxoZWlnaHQ6dixsZWZ0WHM6cyx0b3BZczp4LGRpbVdpZHRoczpsLHN2Z0Q6eSxwYXJjYXRzVmlld01vZGVsOnR9fXQucGF0aHM9Zn1mdW5jdGlvbiBSKHQpe3ZhciBlPXQubW9kZWwuZGltZW5zaW9ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJue2Rpc3BsYXlJbmQ6dC5kaXNwbGF5SW5kLGRpbWVuc2lvbkluZDp0LmRpbWVuc2lvbkluZH19KTtlLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kaXNwbGF5SW5kLWUuZGlzcGxheUluZH0pO3ZhciByPVtdO2Zvcih2YXIgbiBpbiBlKXt2YXIgaT1lW25dLmRpbWVuc2lvbkluZCxhPXQubW9kZWwuZGltZW5zaW9uc1tpXTtyLnB1c2goRih0LGEpKX10LmRpbWVuc2lvbnM9cn1mdW5jdGlvbiBGKHQsZSl7dmFyIHIsbj10Lm1vZGVsLmRpbWVuc2lvbnMubGVuZ3RoLGk9ZS5kaXNwbGF5SW5kO3I9NDArKG4+MT8odC53aWR0aC04MC0xNikvKG4tMSk6MCkqaTt2YXIgYSxvLHMsbCxjLHU9W10saD10Lm1vZGVsLm1heENhdHMsZj1lLmNhdGVnb3JpZXMubGVuZ3RoLHA9ZS5jb3VudCxkPXQuaGVpZ2h0LTgqKGgtMSksZz04KihoLWYpLzIsdj1lLmNhdGVnb3JpZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybntkaXNwbGF5SW5kOnQuZGlzcGxheUluZCxjYXRlZ29yeUluZDp0LmNhdGVnb3J5SW5kfX0pO2Zvcih2LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kaXNwbGF5SW5kLWUuZGlzcGxheUluZH0pLGM9MDtjPGY7YysrKWw9dltjXS5jYXRlZ29yeUluZCxvPWUuY2F0ZWdvcmllc1tsXSxhPXA+MD9vLmNvdW50L3AqZDowLHM9e2tleTpvLnZhbHVlSW5kc1swXSxtb2RlbDpvLHdpZHRoOjE2LGhlaWdodDphLHk6bnVsbCE9PW8uZHJhZ1k/by5kcmFnWTpnLGJhbmRzOltdLHBhcmNhdHNWaWV3TW9kZWw6dH0sZz1nK2ErOCx1LnB1c2gocyk7cmV0dXJue2tleTplLmRpbWVuc2lvbkluZCx4Om51bGwhPT1lLmRyYWdYP2UuZHJhZ1g6cix5OjAsd2lkdGg6MTYsbW9kZWw6ZSxjYXRlZ29yaWVzOnUscGFyY2F0c1ZpZXdNb2RlbDp0LGRyYWdDYXRlZ29yeURpc3BsYXlJbmQ6bnVsbCxkcmFnRGltZW5zaW9uRGlzcGxheUluZDpudWxsLGluaXRpYWxEcmFnRGltZW5zaW9uRGlzcGxheUluZHM6bnVsbCxpbml0aWFsRHJhZ0NhdGVnb3J5RGlzcGxheUluZHM6bnVsbCxkcmFnSGFzTW92ZWQ6bnVsbCxwb3RlbnRpYWxDbGlja0JhbmQ6bnVsbH19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3Uocix0LG4sZSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9jb21wb25lbnRzL2Z4XCI6NjE3LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCI6NzI1LFwiLi4vLi4vcGxvdF9hcGkvcGxvdF9hcGlcIjo3MzYsZDM6MTU1LHRpbnljb2xvcjI6NTIyfV0sMTAxNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL3BhcmNhdHNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz1hLl9wYXBlcixzPWEuX3NpemU7bih0LG8sZSx7d2lkdGg6cy53LGhlaWdodDpzLmgsbWFyZ2luOnt0OnMudCxyOnMucixiOnMuYixsOnMubH19LHIsaSl9fSx7XCIuL3BhcmNhdHNcIjoxMDEzfV0sMTAxNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9wbG90cy9kb21haW5cIikuYXR0cmlidXRlcyxsPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsYz10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKS50ZW1wbGF0ZWRBcnJheTtlLmV4cG9ydHM9e2RvbWFpbjpzKHtuYW1lOlwicGFyY29vcmRzXCIsdHJhY2U6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9KSxsYWJlbGZvbnQ6byh7ZWRpdFR5cGU6XCJjYWxjXCJ9KSx0aWNrZm9udDpvKHtlZGl0VHlwZTpcImNhbGNcIn0pLHJhbmdlZm9udDpvKHtlZGl0VHlwZTpcImNhbGNcIn0pLGRpbWVuc2lvbnM6YyhcImRpbWVuc2lvblwiLHtsYWJlbDp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwiY2FsY1wifSx0aWNrdmFsczpsKHt9LGEudGlja3ZhbHMse2VkaXRUeXBlOlwiY2FsY1wifSksdGlja3RleHQ6bCh7fSxhLnRpY2t0ZXh0LHtlZGl0VHlwZTpcImNhbGNcIn0pLHRpY2tmb3JtYXQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiM3NcIixlZGl0VHlwZTpcImNhbGNcIn0sdmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSxyYW5nZTp7dmFsVHlwZTpcImluZm9fYXJyYXlcIixpdGVtczpbe3ZhbFR5cGU6XCJudW1iZXJcIixlZGl0VHlwZTpcImNhbGNcIn0se3ZhbFR5cGU6XCJudW1iZXJcIixlZGl0VHlwZTpcImNhbGNcIn1dLGVkaXRUeXBlOlwiY2FsY1wifSxjb25zdHJhaW50cmFuZ2U6e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsZnJlZUxlbmd0aDohMCxkaW1lbnNpb25zOlwiMS0yXCIsaXRlbXM6W3t2YWxUeXBlOlwibnVtYmVyXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHt2YWxUeXBlOlwibnVtYmVyXCIsZWRpdFR5cGU6XCJjYWxjXCJ9XSxlZGl0VHlwZTpcImNhbGNcIn0sbXVsdGlzZWxlY3Q6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcImNhbGNcIn0sdmFsdWVzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0pLGxpbmU6bChuKFwibGluZVwiLHtjb2xvcnNjYWxlRGZsdDpcIlZpcmlkaXNcIixhdXRvQ29sb3JEZmx0OiExLGVkaXRUeXBlT3ZlcnJpZGU6XCJjYWxjXCJ9KSx7Y29sb3JiYXI6aSxlZGl0VHlwZTpcImNhbGNcIn0pfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCI6NTc5LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIjo1ODUsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiOjczOSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlc1wiOjc2MSxcIi4uLy4uL3Bsb3RzL2RvbWFpblwiOjc3NCxcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiOjc3NX1dLDEwMTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9jb25zdGFudHNcIiksaT10KFwiZDNcIiksYT10KFwiLi4vLi4vbGliL2d1cFwiKS5rZXlGdW4sbz10KFwiLi4vLi4vbGliL2d1cFwiKS5yZXBlYXQscz10KFwiLi4vLi4vbGliXCIpLnNvcnRlckFzYyxsPW4uYmFyLnNuYXBSYXRpbztmdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHQqKDEtbCkrZSpsfXZhciB1PW4uYmFyLnNuYXBDbG9zZTtmdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQqKDEtdSkrZSp1fWZ1bmN0aW9uIGYodCxlLHIpe2lmKGQoZSxyKSlyZXR1cm4gZTtmb3IodmFyIG49dFswXSxpPW4sYT0xO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz10W2FdO2lmKGU8aChuLG8pKXJldHVybiBjKG4saSk7aWYoZTxvfHxhPT09dC5sZW5ndGgtMSlyZXR1cm4gYyhvLG4pO2k9bixuPW99fWZ1bmN0aW9uIHAodCxlLHIpe2lmKGQoZSxyKSlyZXR1cm4gZTtmb3IodmFyIG49dFt0Lmxlbmd0aC0xXSxpPW4sYT10Lmxlbmd0aC0yO2E+PTA7YS0tKXt2YXIgbz10W2FdO2lmKGU+aChuLG8pKXJldHVybiBjKG4saSk7aWYoZT5vfHxhPT09dC5sZW5ndGgtMSlyZXR1cm4gYyhvLG4pO2k9bixuPW99fWZ1bmN0aW9uIGQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylpZih0Pj1lW3JdWzBdJiZ0PD1lW3JdWzFdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGcodCl7dC5hdHRyKFwieFwiLC1uLmJhci5jYXB0dXJlV2lkdGgvMikuYXR0cihcIndpZHRoXCIsbi5iYXIuY2FwdHVyZVdpZHRoKX1mdW5jdGlvbiB2KHQpe3QuYXR0cihcInZpc2liaWxpdHlcIixcInZpc2libGVcIikuc3R5bGUoXCJ2aXNpYmlsaXR5XCIsXCJ2aXNpYmxlXCIpLmF0dHIoXCJmaWxsXCIsXCJ5ZWxsb3dcIikuYXR0cihcIm9wYWNpdHlcIiwwKX1mdW5jdGlvbiBtKHQpe2lmKCF0LmJydXNoLmZpbHRlclNwZWNpZmllZClyZXR1cm5cIjAsXCIrdC5oZWlnaHQ7Zm9yKHZhciBlLHIsbixpPXkodC5icnVzaC5maWx0ZXIuZ2V0Q29uc29saWRhdGVkKCksdC5oZWlnaHQpLGE9WzBdLG89aS5sZW5ndGg/aVswXVswXTpudWxsLHM9MDtzPGkubGVuZ3RoO3MrKylyPShlPWlbc10pWzFdLWVbMF0sYS5wdXNoKG8pLGEucHVzaChyKSwobj1zKzEpPGkubGVuZ3RoJiYobz1pW25dWzBdLWVbMV0pO3JldHVybiBhLnB1c2godC5oZWlnaHQpLGF9ZnVuY3Rpb24geSh0LGUpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQqZX0pLnNvcnQocyl9KX1mdW5jdGlvbiB4KCl7aS5zZWxlY3QoZG9jdW1lbnQuYm9keSkuc3R5bGUoXCJjdXJzb3JcIixudWxsKX1mdW5jdGlvbiBiKHQpe3QuYXR0cihcInN0cm9rZS1kYXNoYXJyYXlcIixtKX1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9aS5zZWxlY3QodCkuc2VsZWN0QWxsKFwiLmhpZ2hsaWdodCwgLmhpZ2hsaWdodC1zaGFkb3dcIik7YihlP3IudHJhbnNpdGlvbigpLmR1cmF0aW9uKG4uYmFyLnNuYXBEdXJhdGlvbikuZWFjaChcImVuZFwiLGUpOnIpfWZ1bmN0aW9uIHcodCxlKXt2YXIgcixpPXQuYnJ1c2gsYT1OYU4sbz17fTtpZihpLmZpbHRlclNwZWNpZmllZCl7dmFyIHM9dC5oZWlnaHQsbD1pLmZpbHRlci5nZXRDb25zb2xpZGF0ZWQoKSxjPXkobCxzKSx1PU5hTixoPU5hTixmPU5hTjtmb3Iocj0wO3I8PWMubGVuZ3RoO3IrKyl7dmFyIHA9Y1tyXTtpZihwJiZwWzBdPD1lJiZlPD1wWzFdKXt1PXI7YnJlYWt9aWYoaD1yP3ItMTpOYU4scCYmcFswXT5lKXtmPXI7YnJlYWt9fWlmKGE9dSxpc05hTihhKSYmKGE9aXNOYU4oaCl8fGlzTmFOKGYpP2lzTmFOKGgpP2Y6aDplLWNbaF1bMV08Y1tmXVswXS1lP2g6ZiksIWlzTmFOKGEpKXt2YXIgZD1jW2FdLGc9ZnVuY3Rpb24odCxlKXt2YXIgcj1uLmJhci5oYW5kbGVIZWlnaHQ7aWYoIShlPnRbMV0rcnx8ZTx0WzBdLXIpKXJldHVybiBlPj0uOSp0WzFdKy4xKnRbMF0/XCJuXCI6ZTw9LjkqdFswXSsuMSp0WzFdP1wic1wiOlwibnNcIn0oZCxlKTtnJiYoby5pbnRlcnZhbD1sW2FdLG8uaW50ZXJ2YWxQaXg9ZCxvLnJlZ2lvbj1nKX19aWYodC5vcmRpbmFsJiYhby5yZWdpb24pe3ZhciB2PXQudW5pdFRpY2t2YWxzLG09dC51bml0VG9QYWRkZWRQeC5pbnZlcnQoZSk7Zm9yKHI9MDtyPHYubGVuZ3RoO3IrKyl7dmFyIHg9Wy4yNSp2W01hdGgubWF4KHItMSwwKV0rLjc1KnZbcl0sLjI1KnZbTWF0aC5taW4ocisxLHYubGVuZ3RoLTEpXSsuNzUqdltyXV07aWYobT49eFswXSYmbTw9eFsxXSl7by5jbGlja2FibGVPcmRpbmFsUmFuZ2U9eDticmVha319fXJldHVybiBvfWZ1bmN0aW9uIGsodCl7dC5vbihcIm1vdXNlbW92ZVwiLGZ1bmN0aW9uKHQpe2lmKGkuZXZlbnQucHJldmVudERlZmF1bHQoKSwhdC5wYXJlbnQuaW5CcnVzaERyYWcpe3ZhciBlPXcodCx0LmhlaWdodC1pLm1vdXNlKHRoaXMpWzFdLTIqbi52ZXJ0aWNhbFBhZGRpbmcpLHI9XCJjcm9zc2hhaXJcIjtlLmNsaWNrYWJsZU9yZGluYWxSYW5nZT9yPVwicG9pbnRlclwiOmUucmVnaW9uJiYocj1lLnJlZ2lvbitcIi1yZXNpemVcIiksaS5zZWxlY3QoZG9jdW1lbnQuYm9keSkuc3R5bGUoXCJjdXJzb3JcIixyKX19KS5vbihcIm1vdXNlbGVhdmVcIixmdW5jdGlvbih0KXt0LnBhcmVudC5pbkJydXNoRHJhZ3x8eCgpfSkuY2FsbChpLmJlaGF2aW9yLmRyYWcoKS5vbihcImRyYWdzdGFydFwiLGZ1bmN0aW9uKHQpe2kuZXZlbnQuc291cmNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7dmFyIGU9dC5oZWlnaHQtaS5tb3VzZSh0aGlzKVsxXS0yKm4udmVydGljYWxQYWRkaW5nLHI9dC51bml0VG9QYWRkZWRQeC5pbnZlcnQoZSksYT10LmJydXNoLG89dyh0LGUpLHM9by5pbnRlcnZhbCxsPWEuc3ZnQnJ1c2g7aWYobC53YXNEcmFnZ2VkPSExLGwuZ3JhYmJpbmdCYXI9XCJuc1wiPT09by5yZWdpb24sbC5ncmFiYmluZ0Jhcil7dmFyIGM9cy5tYXAodC51bml0VG9QYWRkZWRQeCk7bC5ncmFiUG9pbnQ9ZS1jWzBdLW4udmVydGljYWxQYWRkaW5nLGwuYmFyTGVuZ3RoPWNbMV0tY1swXX1sLmNsaWNrYWJsZU9yZGluYWxSYW5nZT1vLmNsaWNrYWJsZU9yZGluYWxSYW5nZSxsLnN0YXlpbmdJbnRlcnZhbHM9dC5tdWx0aXNlbGVjdCYmYS5maWx0ZXJTcGVjaWZpZWQ/YS5maWx0ZXIuZ2V0Q29uc29saWRhdGVkKCk6W10scyYmKGwuc3RheWluZ0ludGVydmFscz1sLnN0YXlpbmdJbnRlcnZhbHMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdIT09c1swXSYmdFsxXSE9PXNbMV19KSksbC5zdGFydEV4dGVudD1vLnJlZ2lvbj9zW1wic1wiPT09by5yZWdpb24/MTowXTpyLHQucGFyZW50LmluQnJ1c2hEcmFnPSEwLGwuYnJ1c2hTdGFydENhbGxiYWNrKCl9KS5vbihcImRyYWdcIixmdW5jdGlvbih0KXtpLmV2ZW50LnNvdXJjZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3ZhciBlPXQuaGVpZ2h0LWkubW91c2UodGhpcylbMV0tMipuLnZlcnRpY2FsUGFkZGluZyxyPXQuYnJ1c2guc3ZnQnJ1c2g7ci53YXNEcmFnZ2VkPSEwLHIuZ3JhYmJpbmdCYXI/ci5uZXdFeHRlbnQ9W2Utci5ncmFiUG9pbnQsZStyLmJhckxlbmd0aC1yLmdyYWJQb2ludF0ubWFwKHQudW5pdFRvUGFkZGVkUHguaW52ZXJ0KTpyLm5ld0V4dGVudD1bci5zdGFydEV4dGVudCx0LnVuaXRUb1BhZGRlZFB4LmludmVydChlKV0uc29ydChzKTt2YXIgYT1NYXRoLm1heCgwLC1yLm5ld0V4dGVudFswXSksbz1NYXRoLm1heCgwLHIubmV3RXh0ZW50WzFdLTEpO3IubmV3RXh0ZW50WzBdKz1hLHIubmV3RXh0ZW50WzFdLT1vLHIuZ3JhYmJpbmdCYXImJihyLm5ld0V4dGVudFsxXSs9YSxyLm5ld0V4dGVudFswXS09byksdC5icnVzaC5maWx0ZXJTcGVjaWZpZWQ9ITAsci5leHRlbnQ9ci5zdGF5aW5nSW50ZXJ2YWxzLmNvbmNhdChbci5uZXdFeHRlbnRdKSxyLmJydXNoQ2FsbGJhY2sodCksXyh0aGlzLnBhcmVudE5vZGUpfSkub24oXCJkcmFnZW5kXCIsZnVuY3Rpb24odCl7aS5ldmVudC5zb3VyY2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKTt2YXIgZT10LmJydXNoLHI9ZS5maWx0ZXIsbj1lLnN2Z0JydXNoLGE9bi5ncmFiYmluZ0JhcjtpZihuLmdyYWJiaW5nQmFyPSExLG4uZ3JhYkxvY2F0aW9uPXZvaWQgMCx0LnBhcmVudC5pbkJydXNoRHJhZz0hMSx4KCksIW4ud2FzRHJhZ2dlZClyZXR1cm4gbi53YXNEcmFnZ2VkPXZvaWQgMCxuLmNsaWNrYWJsZU9yZGluYWxSYW5nZT9lLmZpbHRlclNwZWNpZmllZCYmdC5tdWx0aXNlbGVjdD9uLmV4dGVudC5wdXNoKG4uY2xpY2thYmxlT3JkaW5hbFJhbmdlKToobi5leHRlbnQ9W24uY2xpY2thYmxlT3JkaW5hbFJhbmdlXSxlLmZpbHRlclNwZWNpZmllZD0hMCk6YT8obi5leHRlbnQ9bi5zdGF5aW5nSW50ZXJ2YWxzLDA9PT1uLmV4dGVudC5sZW5ndGgmJlQoZSkpOlQoZSksbi5icnVzaENhbGxiYWNrKHQpLF8odGhpcy5wYXJlbnROb2RlKSx2b2lkIG4uYnJ1c2hFbmRDYWxsYmFjayhlLmZpbHRlclNwZWNpZmllZD9yLmdldENvbnNvbGlkYXRlZCgpOltdKTt2YXIgbz1mdW5jdGlvbigpe3Iuc2V0KHIuZ2V0Q29uc29saWRhdGVkKCkpfTtpZih0Lm9yZGluYWwpe3ZhciBzPXQudW5pdFRpY2t2YWxzO3Nbcy5sZW5ndGgtMV08c1swXSYmcy5yZXZlcnNlKCksbi5uZXdFeHRlbnQ9W2YocyxuLm5ld0V4dGVudFswXSxuLnN0YXlpbmdJbnRlcnZhbHMpLHAocyxuLm5ld0V4dGVudFsxXSxuLnN0YXlpbmdJbnRlcnZhbHMpXTt2YXIgbD1uLm5ld0V4dGVudFsxXT5uLm5ld0V4dGVudFswXTtuLmV4dGVudD1uLnN0YXlpbmdJbnRlcnZhbHMuY29uY2F0KGw/W24ubmV3RXh0ZW50XTpbXSksbi5leHRlbnQubGVuZ3RofHxUKGUpLG4uYnJ1c2hDYWxsYmFjayh0KSxsP18odGhpcy5wYXJlbnROb2RlLG8pOihvKCksXyh0aGlzLnBhcmVudE5vZGUpKX1lbHNlIG8oKTtuLmJydXNoRW5kQ2FsbGJhY2soZS5maWx0ZXJTcGVjaWZpZWQ/ci5nZXRDb25zb2xpZGF0ZWQoKTpbXSl9KSl9ZnVuY3Rpb24gQSh0LGUpe3JldHVybiB0WzBdLWVbMF19ZnVuY3Rpb24gVCh0KXt0LmZpbHRlclNwZWNpZmllZD0hMSx0LnN2Z0JydXNoLmV4dGVudD1bWzAsMV1dfWZ1bmN0aW9uIE0odCl7Zm9yKHZhciBlLHI9dC5zbGljZSgpLG49W10saT1yLnNoaWZ0KCk7aTspe2ZvcihlPWkuc2xpY2UoKTsoaT1yLnNoaWZ0KCkpJiZpWzBdPD1lWzFdOyllWzFdPU1hdGgubWF4KGVbMV0saVsxXSk7bi5wdXNoKGUpfXJldHVybiBufWUuZXhwb3J0cz17bWFrZUJydXNoOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbyxsPWZ1bmN0aW9uKCl7dmFyIHQsZSxyPVtdO3JldHVybntzZXQ6ZnVuY3Rpb24obil7cj1uLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgpLnNvcnQocyl9KS5zb3J0KEEpLHQ9TShyKSxlPXIucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW01hdGgubWluKHRbMF0sZVswXSksTWF0aC5tYXgodFsxXSxlWzFdKV19LFsxLzAsLTEvMF0pfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5zbGljZSgpfSxnZXRDb25zb2xpZGF0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJuIGV9fX0oKTtyZXR1cm4gbC5zZXQocikse2ZpbHRlcjpsLGZpbHRlclNwZWNpZmllZDplLHN2Z0JydXNoOntleHRlbnQ6W10sYnJ1c2hTdGFydENhbGxiYWNrOm4sYnJ1c2hDYWxsYmFjazoobz1pLGZ1bmN0aW9uKHQpe3ZhciBlPXQuYnJ1c2gscj1mdW5jdGlvbih0KXtyZXR1cm4gdC5zdmdCcnVzaC5leHRlbnQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKCl9KX0oZSkuc2xpY2UoKTtlLmZpbHRlci5zZXQociksbygpfSksYnJ1c2hFbmRDYWxsYmFjazphfX19LGVuc3VyZUF4aXNCcnVzaDpmdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbChcIi5cIituLmNuLmF4aXNCcnVzaCkuZGF0YShvLGEpO2UuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQobi5jbi5heGlzQnJ1c2gsITApLGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0QWxsKFwiLmJhY2tncm91bmRcIikuZGF0YShvKTtlLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKS5jbGFzc2VkKFwiYmFja2dyb3VuZFwiLCEwKS5jYWxsKGcpLmNhbGwodikuc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwiYXV0b1wiKS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoMCBcIituLnZlcnRpY2FsUGFkZGluZytcIilcIiksZS5jYWxsKGspLmF0dHIoXCJoZWlnaHRcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHQtbi52ZXJ0aWNhbFBhZGRpbmd9KTt2YXIgcj10LnNlbGVjdEFsbChcIi5oaWdobGlnaHQtc2hhZG93XCIpLmRhdGEobyk7ci5lbnRlcigpLmFwcGVuZChcImxpbmVcIikuY2xhc3NlZChcImhpZ2hsaWdodC1zaGFkb3dcIiwhMCkuYXR0cihcInhcIiwtbi5iYXIud2lkdGgvMikuYXR0cihcInN0cm9rZS13aWR0aFwiLG4uYmFyLndpZHRoK24uYmFyLnN0cm9rZVdpZHRoKS5hdHRyKFwic3Ryb2tlXCIsbi5iYXIuc3Ryb2tlQ29sb3IpLmF0dHIoXCJvcGFjaXR5XCIsbi5iYXIuc3Ryb2tlT3BhY2l0eSkuYXR0cihcInN0cm9rZS1saW5lY2FwXCIsXCJidXR0XCIpLHIuYXR0cihcInkxXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkuY2FsbChiKTt2YXIgaT10LnNlbGVjdEFsbChcIi5oaWdobGlnaHRcIikuZGF0YShvKTtpLmVudGVyKCkuYXBwZW5kKFwibGluZVwiKS5jbGFzc2VkKFwiaGlnaGxpZ2h0XCIsITApLmF0dHIoXCJ4XCIsLW4uYmFyLndpZHRoLzIpLmF0dHIoXCJzdHJva2Utd2lkdGhcIixuLmJhci53aWR0aC1uLmJhci5zdHJva2VXaWR0aCkuYXR0cihcInN0cm9rZVwiLG4uYmFyLmZpbGxDb2xvcikuYXR0cihcIm9wYWNpdHlcIixuLmJhci5maWxsT3BhY2l0eSkuYXR0cihcInN0cm9rZS1saW5lY2FwXCIsXCJidXR0XCIpLGkuYXR0cihcInkxXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkuY2FsbChiKX0oZSl9LGNsZWFuUmFuZ2VzOmZ1bmN0aW9uKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0WzBdKT8odD10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zb3J0KHMpfSksdD1lLm11bHRpc2VsZWN0P00odC5zb3J0KEEpKTpbdFswXV0pOnQ9W3Quc29ydChzKV0sZS50aWNrdmFscyl7dmFyIHI9ZS50aWNrdmFscy5zbGljZSgpLnNvcnQocyk7aWYoISh0PXQubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPVtmKHIsdFswXSxbXSkscChyLHRbMV0sW10pXTtpZihlWzFdPmVbMF0pcmV0dXJuIGV9KS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSkubGVuZ3RoKXJldHVybn1yZXR1cm4gdC5sZW5ndGg+MT90OnRbMF19fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2d1cFwiOjY5OSxcIi4vY29uc3RhbnRzXCI6MTAxOSxkMzoxNTV9XSwxMDE3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCIpLmdldE1vZHVsZUNhbGNEYXRhLGE9dChcIi4vcGxvdFwiKSxvPXQoXCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlc1wiKTtyLm5hbWU9XCJwYXJjb29yZHNcIixyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9aSh0LmNhbGNkYXRhLFwicGFyY29vcmRzXCIpWzBdO2UubGVuZ3RoJiZhKHQsZSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5faGFzJiZuLl9oYXMoXCJwYXJjb29yZHNcIiksYT1lLl9oYXMmJmUuX2hhcyhcInBhcmNvb3Jkc1wiKTtpJiYhYSYmKG4uX3BhcGVyZGl2LnNlbGVjdEFsbChcIi5wYXJjb29yZHNcIikucmVtb3ZlKCksbi5fZ2xpbWFnZXMuc2VsZWN0QWxsKFwiKlwiKS5yZW1vdmUoKSl9LHIudG9TVkc9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5fZ2xpbWFnZXMscj1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoXCIuc3ZnLWNvbnRhaW5lclwiKTtyLmZpbHRlcihmdW5jdGlvbih0LGUpe3JldHVybiBlPT09ci5zaXplKCktMX0pLnNlbGVjdEFsbChcIi5nbC1jYW52YXMtY29udGV4dCwgLmdsLWNhbnZhcy1mb2N1c1wiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50b0RhdGFVUkwoXCJpbWFnZS9wbmdcIik7ZS5hcHBlbmQoXCJzdmc6aW1hZ2VcIikuYXR0cih7eG1sbnM6by5zdmcsXCJ4bGluazpocmVmXCI6dCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwibm9uZVwiLHg6MCx5OjAsd2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHR9KX0pLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5zZWxlY3RBbGwoXCIjZmlsdGVyQmFyUGF0dGVyblwiKS5hdHRyKFwiaWRcIixcImZpbHRlckJhclBhdHRlcm5cIil9LDYwKX19LHtcIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzXCI6Njc5LFwiLi4vLi4vcGxvdHMvZ2V0X2RhdGFcIjo3ODQsXCIuL3Bsb3RcIjoxMDI1LGQzOjE1NX1dLDEwMTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnNcIikuaGFzQ29sb3JzY2FsZSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsY1wiKSxhPXQoXCIuLi8uLi9saWJcIiksbz10KFwiLi4vLi4vbGliL2d1cFwiKS53cmFwO2Z1bmN0aW9uIHModCl7cmV0dXJuIGEuaXNUeXBlZEFycmF5KHQpP0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpOnR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjxlLmRpbWVuc2lvbnMubGVuZ3RoO3IrKyllLmRpbWVuc2lvbnNbcl0udmFsdWVzPXMoZS5kaW1lbnNpb25zW3JdLnZhbHVlcyk7ZS5saW5lLmNvbG9yPXMoZS5saW5lLmNvbG9yKTt2YXIgYT0hIWUubGluZS5jb2xvcnNjYWxlJiZBcnJheS5pc0FycmF5KGUubGluZS5jb2xvciksbD1hP2UubGluZS5jb2xvcjpmdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09LjU7cmV0dXJuIGV9KGUuX2xlbmd0aCksYz1hP2UubGluZS5jb2xvcnNjYWxlOltbMCxlLmxpbmUuY29sb3JdLFsxLGUubGluZS5jb2xvcl1dO3JldHVybiBuKGUsXCJsaW5lXCIpJiZpKHQsZSx7dmFsczpsLGNvbnRhaW5lclN0cjpcImxpbmVcIixjTGV0dGVyOlwiY1wifSksbyh7bGluZUNvbG9yOmwsY3NjYWxlOmN9KX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCI6NTg2LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnNcIjo1ODksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvZ3VwXCI6Njk5fV0sMTAxOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17bWF4RGltZW5zaW9uQ291bnQ6NjAsb3ZlcmRyYWc6NDUsdmVydGljYWxQYWRkaW5nOjIsdGlja0Rpc3RhbmNlOjUwLGNhbnZhc1BpeGVsUmF0aW86MSxibG9ja0xpbmVDb3VudDo1ZTMsbGF5ZXJzOltcImNvbnRleHRMaW5lTGF5ZXJcIixcImZvY3VzTGluZUxheWVyXCIsXCJwaWNrTGluZUxheWVyXCJdLGF4aXNUaXRsZU9mZnNldDoyOCxheGlzRXh0ZW50T2Zmc2V0OjEwLGJhcjp7d2lkdGg6NCxjYXB0dXJlV2lkdGg6MTAsZmlsbENvbG9yOlwibWFnZW50YVwiLGZpbGxPcGFjaXR5OjEsc25hcER1cmF0aW9uOjE1MCxzbmFwUmF0aW86LjI1LHNuYXBDbG9zZTouMDEsc3Ryb2tlQ29sb3I6XCJ3aGl0ZVwiLHN0cm9rZU9wYWNpdHk6MSxzdHJva2VXaWR0aDoxLGhhbmRsZUhlaWdodDo4LGhhbmRsZU9wYWNpdHk6MSxoYW5kbGVPdmVybGFwOjB9LGNuOntheGlzRXh0ZW50VGV4dDpcImF4aXMtZXh0ZW50LXRleHRcIixwYXJjb29yZHNMaW5lTGF5ZXJzOlwicGFyY29vcmRzLWxpbmUtbGF5ZXJzXCIscGFyY29vcmRzTGluZUxheWVyOlwicGFyY29vcmRzLWxpbmVzXCIscGFyY29vcmRzOlwicGFyY29vcmRzXCIscGFyY29vcmRzQ29udHJvbFZpZXc6XCJwYXJjb29yZHMtY29udHJvbC12aWV3XCIseUF4aXM6XCJ5LWF4aXNcIixheGlzT3ZlcmxheXM6XCJheGlzLW92ZXJsYXlzXCIsYXhpczpcImF4aXNcIixheGlzSGVhZGluZzpcImF4aXMtaGVhZGluZ1wiLGF4aXNUaXRsZTpcImF4aXMtdGl0bGVcIixheGlzRXh0ZW50OlwiYXhpcy1leHRlbnRcIixheGlzRXh0ZW50VG9wOlwiYXhpcy1leHRlbnQtdG9wXCIsYXhpc0V4dGVudFRvcFRleHQ6XCJheGlzLWV4dGVudC10b3AtdGV4dFwiLGF4aXNFeHRlbnRCb3R0b206XCJheGlzLWV4dGVudC1ib3R0b21cIixheGlzRXh0ZW50Qm90dG9tVGV4dDpcImF4aXMtZXh0ZW50LWJvdHRvbS10ZXh0XCIsYXhpc0JydXNoOlwiYXhpcy1icnVzaFwifSxpZDp7ZmlsdGVyQmFyUGF0dGVybjpcImZpbHRlci1iYXItcGF0dGVyblwifX19LHt9XSwxMDIwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVyc1wiKS5oYXNDb2xvcnNjYWxlLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiKSxvPXQoXCIuLi8uLi9wbG90cy9kb21haW5cIikuZGVmYXVsdHMscz10KFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCIpLGw9dChcIi4vYXR0cmlidXRlc1wiKSxjPXQoXCIuL2F4aXNicnVzaFwiKSx1PXQoXCIuL2NvbnN0YW50c1wiKS5tYXhEaW1lbnNpb25Db3VudCxoPXQoXCIuL21lcmdlX2xlbmd0aFwiKTtmdW5jdGlvbiBmKHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbC5kaW1lbnNpb25zLHIsaSl9dmFyIGk9cihcInZhbHVlc1wiKSxhPXIoXCJ2aXNpYmxlXCIpO2lmKGkmJmkubGVuZ3RofHwoYT1lLnZpc2libGU9ITEpLGEpe3IoXCJsYWJlbFwiKSxyKFwidGlja3ZhbHNcIikscihcInRpY2t0ZXh0XCIpLHIoXCJ0aWNrZm9ybWF0XCIpLHIoXCJyYW5nZVwiKSxyKFwibXVsdGlzZWxlY3RcIik7dmFyIG89cihcImNvbnN0cmFpbnRyYW5nZVwiKTtvJiYoZS5jb25zdHJhaW50cmFuZ2U9Yy5jbGVhblJhbmdlcyhvLGUpKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe2Z1bmN0aW9uIHAocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwscixpKX12YXIgZD10LmRpbWVuc2lvbnM7QXJyYXkuaXNBcnJheShkKSYmZC5sZW5ndGg+dSYmKG4ubG9nKFwicGFyY29vcmRzIHRyYWNlcyBzdXBwb3J0IHVwIHRvIFwiK3UrXCIgZGltZW5zaW9ucyBhdCB0aGUgbW9tZW50XCIpLGQuc3BsaWNlKHUpKTt2YXIgZz1zKHQsZSx7bmFtZTpcImRpbWVuc2lvbnNcIixoYW5kbGVJdGVtRGVmYXVsdHM6Zn0pLHY9ZnVuY3Rpb24odCxlLHIsbyxzKXt2YXIgbD1zKFwibGluZS5jb2xvclwiLHIpO2lmKGkodCxcImxpbmVcIikmJm4uaXNBcnJheU9yVHlwZWRBcnJheShsKSl7aWYobC5sZW5ndGgpcmV0dXJuIHMoXCJsaW5lLmNvbG9yc2NhbGVcIiksYSh0LGUsbyxzLHtwcmVmaXg6XCJsaW5lLlwiLGNMZXR0ZXI6XCJjXCJ9KSxsLmxlbmd0aDtlLmxpbmUuY29sb3I9cn1yZXR1cm4gMS8wfSh0LGUscixjLHApO28oZSxjLHApLEFycmF5LmlzQXJyYXkoZykmJmcubGVuZ3RofHwoZS52aXNpYmxlPSExKSxoKGUsZyxcInZhbHVlc1wiLHYpO3ZhciBtPXtmYW1pbHk6Yy5mb250LmZhbWlseSxzaXplOk1hdGgucm91bmQoYy5mb250LnNpemUvMS4yKSxjb2xvcjpjLmZvbnQuY29sb3J9O24uY29lcmNlRm9udChwLFwibGFiZWxmb250XCIsbSksbi5jb2VyY2VGb250KHAsXCJ0aWNrZm9udFwiLG0pLG4uY29lcmNlRm9udChwLFwicmFuZ2Vmb250XCIsbSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIjo1ODgsXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVyc1wiOjU4OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0c1wiOjc0NSxcIi4uLy4uL3Bsb3RzL2RvbWFpblwiOjc3NCxcIi4vYXR0cmlidXRlc1wiOjEwMTUsXCIuL2F4aXNicnVzaFwiOjEwMTYsXCIuL2NvbnN0YW50c1wiOjEwMTksXCIuL21lcmdlX2xlbmd0aFwiOjEwMjN9XSwxMDIxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLnBsb3Q9dChcIi4vcGxvdFwiKSxuLmNvbG9yYmFyPXtjb250YWluZXI6XCJsaW5lXCIsbWluOlwiY21pblwiLG1heDpcImNtYXhcIn0sbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJwYXJjb29yZHNcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuL2Jhc2VfcGxvdFwiKSxuLmNhdGVnb3JpZXM9W1wiZ2xcIixcInJlZ2xcIixcIm5vT3BhY2l0eVwiLFwibm9Ib3ZlclwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4vYXR0cmlidXRlc1wiOjEwMTUsXCIuL2Jhc2VfcGxvdFwiOjEwMTcsXCIuL2NhbGNcIjoxMDE4LFwiLi9kZWZhdWx0c1wiOjEwMjAsXCIuL3Bsb3RcIjoxMDI1fV0sMTAyMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJnbHNsaWZ5XCIpLGk9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjNCBwMCwgcDEsIHAyLCBwMyxcXG4gICAgICAgICAgICAgICBwNCwgcDUsIHA2LCBwNyxcXG4gICAgICAgICAgICAgICBwOCwgcDksIHBhLCBwYixcXG4gICAgICAgICAgICAgICBwYywgcGQsIHBlO1xcblxcbmF0dHJpYnV0ZSB2ZWM0IHBmO1xcblxcbnVuaWZvcm0gbWF0NCBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkQsXFxuICAgICAgICAgICAgIGxvQSwgaGlBLCBsb0IsIGhpQiwgbG9DLCBoaUMsIGxvRCwgaGlEO1xcblxcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgICB2aWV3Qm94UG9zaXRpb24sXFxuICAgICAgICAgICAgIHZpZXdCb3hTaXplO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHBhbGV0dGU7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcXG51bmlmb3JtIGZsb2F0IG1hc2tIZWlnaHQ7XFxuXFxudW5pZm9ybSB2ZWMyIGNvbG9yQ2xhbXA7XFxuXFxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcXG5cXG52ZWM0IHVuaXRfMSA9IHZlYzQoMSwgMSwgMSwgMSk7XFxuXFxuZmxvYXQgdmFsKG1hdDQgcCwgbWF0NCB2KSB7XFxuICAgIHJldHVybiBkb3QobWF0cml4Q29tcE11bHQocCwgdikgKiB1bml0XzEsIHVuaXRfMSk7XFxufVxcblxcbmZsb2F0IGF4aXNZKFxcbiAgICAgICAgZmxvYXQgeCxcXG4gICAgICAgIG1hdDQgZFs0XSxcXG4gICAgICAgIG1hdDQgZGltMUEsIG1hdDQgZGltMkEsIG1hdDQgZGltMUIsIG1hdDQgZGltMkIsIG1hdDQgZGltMUMsIG1hdDQgZGltMkMsIG1hdDQgZGltMUQsIG1hdDQgZGltMkRcXG4gICAgKSB7XFxuXFxuICAgIGZsb2F0IHkxID0gdmFsKGRbMF0sIGRpbTFBKSArIHZhbChkWzFdLCBkaW0xQikgKyB2YWwoZFsyXSwgZGltMUMpICsgdmFsKGRbM10sIGRpbTFEKTtcXG4gICAgZmxvYXQgeTIgPSB2YWwoZFswXSwgZGltMkEpICsgdmFsKGRbMV0sIGRpbTJCKSArIHZhbChkWzJdLCBkaW0yQykgKyB2YWwoZFszXSwgZGltMkQpO1xcbiAgICByZXR1cm4geTEgKiAoMS4wIC0geCkgKyB5MiAqIHg7XFxufVxcblxcbmNvbnN0IGludCBiaXRzUGVyQnl0ZSA9IDg7XFxuXFxuaW50IG1vZDIoaW50IGEpIHtcXG4gICAgcmV0dXJuIGEgLSAyICogKGEgLyAyKTtcXG59XFxuXFxuaW50IG1vZDgoaW50IGEpIHtcXG4gICAgcmV0dXJuIGEgLSA4ICogKGEgLyA4KTtcXG59XFxuXFxudmVjNCB6ZXJvID0gdmVjNCgwLCAwLCAwLCAwKTtcXG52ZWM0IHVuaXRfMCA9IHZlYzQoMSwgMSwgMSwgMSk7XFxudmVjMiB4eVByb2plY3Rpb24gPSB2ZWMyKDEsIDEpO1xcblxcbm1hdDQgbWNsYW1wKG1hdDQgbSwgbWF0NCBsbywgbWF0NCBoaSkge1xcbiAgICByZXR1cm4gbWF0NChjbGFtcChtWzBdLCBsb1swXSwgaGlbMF0pLFxcbiAgICAgICAgICAgICAgICBjbGFtcChtWzFdLCBsb1sxXSwgaGlbMV0pLFxcbiAgICAgICAgICAgICAgICBjbGFtcChtWzJdLCBsb1syXSwgaGlbMl0pLFxcbiAgICAgICAgICAgICAgICBjbGFtcChtWzNdLCBsb1szXSwgaGlbM10pKTtcXG59XFxuXFxuYm9vbCBtc2hvdyhtYXQ0IHAsIG1hdDQgbG8sIG1hdDQgaGkpIHtcXG4gICAgcmV0dXJuIG1jbGFtcChwLCBsbywgaGkpID09IHA7XFxufVxcblxcbmJvb2wgd2l0aGluQm91bmRpbmdCb3goXFxuICAgICAgICBtYXQ0IGRbNF0sXFxuICAgICAgICBtYXQ0IGxvQSwgbWF0NCBoaUEsIG1hdDQgbG9CLCBtYXQ0IGhpQiwgbWF0NCBsb0MsIG1hdDQgaGlDLCBtYXQ0IGxvRCwgbWF0NCBoaURcXG4gICAgKSB7XFxuXFxuICAgIHJldHVybiBtc2hvdyhkWzBdLCBsb0EsIGhpQSkgJiZcXG4gICAgICAgICAgIG1zaG93KGRbMV0sIGxvQiwgaGlCKSAmJlxcbiAgICAgICAgICAgbXNob3coZFsyXSwgbG9DLCBoaUMpICYmXFxuICAgICAgICAgICBtc2hvdyhkWzNdLCBsb0QsIGhpRCk7XFxufVxcblxcbmJvb2wgd2l0aGluUmFzdGVyTWFzayhtYXQ0IGRbNF0sIHNhbXBsZXIyRCBtYXNrLCBmbG9hdCBoZWlnaHQpIHtcXG4gICAgYm9vbCByZXN1bHQgPSB0cnVlO1xcbiAgICBpbnQgYml0SW5CeXRlU3RlcHBlcjtcXG4gICAgZmxvYXQgdmFsWSwgdmFsdWVZLCBzY2FsZVg7XFxuICAgIGludCBoaXQsIGJpdG1hc2ssIHZhbFg7XFxuICAgIGZvcihpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHtcXG4gICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCA0OyBqKyspIHtcXG4gICAgICAgICAgICBmb3IoaW50IGsgPSAwOyBrIDwgNDsgaysrKSB7XFxuICAgICAgICAgICAgICAgIGJpdEluQnl0ZVN0ZXBwZXIgPSBtb2Q4KGogKiA0ICsgayk7XFxuICAgICAgICAgICAgICAgIHZhbFggPSBpICogMiArIGogLyAyO1xcbiAgICAgICAgICAgICAgICB2YWxZID0gZFtpXVtqXVtrXTtcXG4gICAgICAgICAgICAgICAgdmFsdWVZID0gdmFsWSAqIChoZWlnaHQgLSAxLjApICsgMC41O1xcbiAgICAgICAgICAgICAgICBzY2FsZVggPSAoZmxvYXQodmFsWCkgKyAwLjUpIC8gOC4wO1xcbiAgICAgICAgICAgICAgICBoaXQgPSBpbnQodGV4dHVyZTJEKG1hc2ssIHZlYzIoc2NhbGVYLCAodmFsdWVZICsgMC41KSAvIGhlaWdodCkpWzNdICogMjU1LjApIC8gaW50KHBvdygyLjAsIGZsb2F0KGJpdEluQnl0ZVN0ZXBwZXIpKSk7XFxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBtb2QyKGhpdCkgPT0gMTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxudmVjNCBwb3NpdGlvbihcXG4gICAgICAgIGZsb2F0IGRlcHRoLFxcbiAgICAgICAgdmVjMiByZXNvbHV0aW9uLCB2ZWMyIHZpZXdCb3hQb3NpdGlvbiwgdmVjMiB2aWV3Qm94U2l6ZSxcXG4gICAgICAgIG1hdDQgZGltc1s0XSxcXG4gICAgICAgIGZsb2F0IHNpZ251bSxcXG4gICAgICAgIG1hdDQgZGltMUEsIG1hdDQgZGltMkEsIG1hdDQgZGltMUIsIG1hdDQgZGltMkIsIG1hdDQgZGltMUMsIG1hdDQgZGltMkMsIG1hdDQgZGltMUQsIG1hdDQgZGltMkQsXFxuICAgICAgICBtYXQ0IGxvQSwgbWF0NCBoaUEsIG1hdDQgbG9CLCBtYXQ0IGhpQiwgbWF0NCBsb0MsIG1hdDQgaGlDLCBtYXQ0IGxvRCwgbWF0NCBoaUQsXFxuICAgICAgICBzYW1wbGVyMkQgbWFzaywgZmxvYXQgbWFza0hlaWdodFxcbiAgICApIHtcXG5cXG4gICAgZmxvYXQgeCA9IDAuNSAqIHNpZ251bSArIDAuNTtcXG4gICAgZmxvYXQgeSA9IGF4aXNZKHgsIGRpbXMsIGRpbTFBLCBkaW0yQSwgZGltMUIsIGRpbTJCLCBkaW0xQywgZGltMkMsIGRpbTFELCBkaW0yRCk7XFxuXFxuICAgIGZsb2F0IHNob3cgPSBmbG9hdChcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluQm91bmRpbmdCb3goZGltcywgbG9BLCBoaUEsIGxvQiwgaGlCLCBsb0MsIGhpQywgbG9ELCBoaUQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICYmIHdpdGhpblJhc3Rlck1hc2soZGltcywgbWFzaywgbWFza0hlaWdodClcXG4gICAgICAgICAgICAgICAgICAgICAgKTtcXG5cXG4gICAgdmVjMiB2aWV3Qm94WFkgPSB2aWV3Qm94UG9zaXRpb24gKyB2aWV3Qm94U2l6ZSAqIHZlYzIoeCwgeSk7XFxuICAgIGZsb2F0IGRlcHRoT3JIaWRlID0gZGVwdGggKyAyLjAgKiAoMS4wIC0gc2hvdyk7XFxuXFxuICAgIHJldHVybiB2ZWM0KFxcbiAgICAgICAgeHlQcm9qZWN0aW9uICogKDIuMCAqIHZpZXdCb3hYWSAvIHJlc29sdXRpb24gLSAxLjApLFxcbiAgICAgICAgZGVwdGhPckhpZGUsXFxuICAgICAgICAxLjBcXG4gICAgKTtcXG59XFxuXFxudm9pZCBtYWluKCkge1xcblxcbiAgICBmbG9hdCBwcm9taW5lbmNlID0gYWJzKHBmWzNdKTtcXG5cXG4gICAgbWF0NCBwWzRdO1xcbiAgICBwWzBdID0gbWF0NChwMCwgcDEsIHAyLCBwMyk7XFxuICAgIHBbMV0gPSBtYXQ0KHA0LCBwNSwgcDYsIHA3KTtcXG4gICAgcFsyXSA9IG1hdDQocDgsIHA5LCBwYSwgcGIpO1xcbiAgICBwWzNdID0gbWF0NChwYywgcGQsIHBlLCBhYnMocGYpKTtcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSBwb3NpdGlvbihcXG4gICAgICAgIDEuMCAtIHByb21pbmVuY2UsXFxuICAgICAgICByZXNvbHV0aW9uLCB2aWV3Qm94UG9zaXRpb24sIHZpZXdCb3hTaXplLFxcbiAgICAgICAgcCxcXG4gICAgICAgIHNpZ24ocGZbM10pLFxcbiAgICAgICAgZGltMUEsIGRpbTJBLCBkaW0xQiwgZGltMkIsIGRpbTFDLCBkaW0yQywgZGltMUQsIGRpbTJELFxcbiAgICAgICAgbG9BLCBoaUEsIGxvQiwgaGlCLCBsb0MsIGhpQywgbG9ELCBoaUQsXFxuICAgICAgICBtYXNrLCBtYXNrSGVpZ2h0XFxuICAgICk7XFxuXFxuICAgIGZsb2F0IGNsYW1wZWRDb2xvckluZGV4ID0gY2xhbXAoKHByb21pbmVuY2UgLSBjb2xvckNsYW1wWzBdKSAvIChjb2xvckNsYW1wWzFdIC0gY29sb3JDbGFtcFswXSksIDAuMCwgMS4wKTtcXG4gICAgZnJhZ0NvbG9yID0gdGV4dHVyZTJEKHBhbGV0dGUsIHZlYzIoKGNsYW1wZWRDb2xvckluZGV4ICogMjU1LjAgKyAwLjUpIC8gMjU2LjAsIDAuNSkpO1xcbn1cXG5cIl0pLGE9bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjNCBwMCwgcDEsIHAyLCBwMyxcXG4gICAgICAgICAgICAgICBwNCwgcDUsIHA2LCBwNyxcXG4gICAgICAgICAgICAgICBwOCwgcDksIHBhLCBwYixcXG4gICAgICAgICAgICAgICBwYywgcGQsIHBlO1xcblxcbmF0dHJpYnV0ZSB2ZWM0IHBmO1xcblxcbnVuaWZvcm0gbWF0NCBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkQ7XFxuXFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb24sXFxuICAgICAgICAgICAgIHZpZXdCb3hQb3NpdGlvbixcXG4gICAgICAgICAgICAgdmlld0JveFNpemU7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgcGFsZXR0ZTtcXG5cXG51bmlmb3JtIHZlYzIgY29sb3JDbGFtcDtcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xcblxcbnZlYzIgeHlQcm9qZWN0aW9uID0gdmVjMigxLCAxKTtcXG5cXG52ZWM0IHVuaXQgPSB2ZWM0KDEsIDEsIDEsIDEpO1xcblxcbmZsb2F0IHZhbChtYXQ0IHAsIG1hdDQgdikge1xcbiAgICByZXR1cm4gZG90KG1hdHJpeENvbXBNdWx0KHAsIHYpICogdW5pdCwgdW5pdCk7XFxufVxcblxcbmZsb2F0IGF4aXNZKFxcbiAgICAgICAgZmxvYXQgeCxcXG4gICAgICAgIG1hdDQgZFs0XSxcXG4gICAgICAgIG1hdDQgZGltMUEsIG1hdDQgZGltMkEsIG1hdDQgZGltMUIsIG1hdDQgZGltMkIsIG1hdDQgZGltMUMsIG1hdDQgZGltMkMsIG1hdDQgZGltMUQsIG1hdDQgZGltMkRcXG4gICAgKSB7XFxuXFxuICAgIGZsb2F0IHkxID0gdmFsKGRbMF0sIGRpbTFBKSArIHZhbChkWzFdLCBkaW0xQikgKyB2YWwoZFsyXSwgZGltMUMpICsgdmFsKGRbM10sIGRpbTFEKTtcXG4gICAgZmxvYXQgeTIgPSB2YWwoZFswXSwgZGltMkEpICsgdmFsKGRbMV0sIGRpbTJCKSArIHZhbChkWzJdLCBkaW0yQykgKyB2YWwoZFszXSwgZGltMkQpO1xcbiAgICByZXR1cm4geTEgKiAoMS4wIC0geCkgKyB5MiAqIHg7XFxufVxcblxcbnZlYzQgcG9zaXRpb24oXFxuICAgICAgICBmbG9hdCBkZXB0aCxcXG4gICAgICAgIHZlYzIgcmVzb2x1dGlvbiwgdmVjMiB2aWV3Qm94UG9zaXRpb24sIHZlYzIgdmlld0JveFNpemUsXFxuICAgICAgICBtYXQ0IGRpbXNbNF0sXFxuICAgICAgICBmbG9hdCBzaWdudW0sXFxuICAgICAgICBtYXQ0IGRpbTFBLCBtYXQ0IGRpbTJBLCBtYXQ0IGRpbTFCLCBtYXQ0IGRpbTJCLCBtYXQ0IGRpbTFDLCBtYXQ0IGRpbTJDLCBtYXQ0IGRpbTFELCBtYXQ0IGRpbTJEXFxuICAgICkge1xcblxcbiAgICBmbG9hdCB4ID0gMC41ICogc2lnbnVtICsgMC41O1xcbiAgICBmbG9hdCB5ID0gYXhpc1koeCwgZGltcywgZGltMUEsIGRpbTJBLCBkaW0xQiwgZGltMkIsIGRpbTFDLCBkaW0yQywgZGltMUQsIGRpbTJEKTtcXG5cXG4gICAgdmVjMiB2aWV3Qm94WFkgPSB2aWV3Qm94UG9zaXRpb24gKyB2aWV3Qm94U2l6ZSAqIHZlYzIoeCwgeSk7XFxuXFxuICAgIHJldHVybiB2ZWM0KFxcbiAgICAgICAgeHlQcm9qZWN0aW9uICogKDIuMCAqIHZpZXdCb3hYWSAvIHJlc29sdXRpb24gLSAxLjApLFxcbiAgICAgICAgZGVwdGgsXFxuICAgICAgICAxLjBcXG4gICAgKTtcXG59XFxuXFxudm9pZCBtYWluKCkge1xcblxcbiAgICBmbG9hdCBwcm9taW5lbmNlID0gYWJzKHBmWzNdKTtcXG5cXG4gICAgbWF0NCBwWzRdO1xcbiAgICBwWzBdID0gbWF0NChwMCwgcDEsIHAyLCBwMyk7XFxuICAgIHBbMV0gPSBtYXQ0KHA0LCBwNSwgcDYsIHA3KTtcXG4gICAgcFsyXSA9IG1hdDQocDgsIHA5LCBwYSwgcGIpO1xcbiAgICBwWzNdID0gbWF0NChwYywgcGQsIHBlLCBhYnMocGYpKTtcXG5cXG4gICAgZ2xfUG9zaXRpb24gPSBwb3NpdGlvbihcXG4gICAgICAgIDEuMCAtIHByb21pbmVuY2UsXFxuICAgICAgICByZXNvbHV0aW9uLCB2aWV3Qm94UG9zaXRpb24sIHZpZXdCb3hTaXplLFxcbiAgICAgICAgcCxcXG4gICAgICAgIHNpZ24ocGZbM10pLFxcbiAgICAgICAgZGltMUEsIGRpbTJBLCBkaW0xQiwgZGltMkIsIGRpbTFDLCBkaW0yQywgZGltMUQsIGRpbTJEXFxuICAgICk7XFxuXFxuICAgIGZsb2F0IGNsYW1wZWRDb2xvckluZGV4ID0gY2xhbXAoKHByb21pbmVuY2UgLSBjb2xvckNsYW1wWzBdKSAvIChjb2xvckNsYW1wWzFdIC0gY29sb3JDbGFtcFswXSksIDAuMCwgMS4wKTtcXG4gICAgZnJhZ0NvbG9yID0gdGV4dHVyZTJEKHBhbGV0dGUsIHZlYzIoKGNsYW1wZWRDb2xvckluZGV4ICogMjU1LjAgKyAwLjUpIC8gMjU2LjAsIDAuNSkpO1xcbn1cXG5cIl0pLG89bihbXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG5hdHRyaWJ1dGUgdmVjNCBwMCwgcDEsIHAyLCBwMyxcXG4gICAgICAgICAgICAgICBwNCwgcDUsIHA2LCBwNyxcXG4gICAgICAgICAgICAgICBwOCwgcDksIHBhLCBwYixcXG4gICAgICAgICAgICAgICBwYywgcGQsIHBlO1xcblxcbmF0dHJpYnV0ZSB2ZWM0IHBmO1xcblxcbnVuaWZvcm0gbWF0NCBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkQsXFxuICAgICAgICAgICAgIGxvQSwgaGlBLCBsb0IsIGhpQiwgbG9DLCBoaUMsIGxvRCwgaGlEO1xcblxcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgICB2aWV3Qm94UG9zaXRpb24sXFxuICAgICAgICAgICAgIHZpZXdCb3hTaXplO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIG1hc2s7XFxudW5pZm9ybSBmbG9hdCBtYXNrSGVpZ2h0O1xcblxcbnVuaWZvcm0gdmVjMiBjb2xvckNsYW1wO1xcblxcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XFxuXFxudmVjNCB1bml0XzEgPSB2ZWM0KDEsIDEsIDEsIDEpO1xcblxcbmZsb2F0IHZhbChtYXQ0IHAsIG1hdDQgdikge1xcbiAgICByZXR1cm4gZG90KG1hdHJpeENvbXBNdWx0KHAsIHYpICogdW5pdF8xLCB1bml0XzEpO1xcbn1cXG5cXG5mbG9hdCBheGlzWShcXG4gICAgICAgIGZsb2F0IHgsXFxuICAgICAgICBtYXQ0IGRbNF0sXFxuICAgICAgICBtYXQ0IGRpbTFBLCBtYXQ0IGRpbTJBLCBtYXQ0IGRpbTFCLCBtYXQ0IGRpbTJCLCBtYXQ0IGRpbTFDLCBtYXQ0IGRpbTJDLCBtYXQ0IGRpbTFELCBtYXQ0IGRpbTJEXFxuICAgICkge1xcblxcbiAgICBmbG9hdCB5MSA9IHZhbChkWzBdLCBkaW0xQSkgKyB2YWwoZFsxXSwgZGltMUIpICsgdmFsKGRbMl0sIGRpbTFDKSArIHZhbChkWzNdLCBkaW0xRCk7XFxuICAgIGZsb2F0IHkyID0gdmFsKGRbMF0sIGRpbTJBKSArIHZhbChkWzFdLCBkaW0yQikgKyB2YWwoZFsyXSwgZGltMkMpICsgdmFsKGRbM10sIGRpbTJEKTtcXG4gICAgcmV0dXJuIHkxICogKDEuMCAtIHgpICsgeTIgKiB4O1xcbn1cXG5cXG5jb25zdCBpbnQgYml0c1BlckJ5dGUgPSA4O1xcblxcbmludCBtb2QyKGludCBhKSB7XFxuICAgIHJldHVybiBhIC0gMiAqIChhIC8gMik7XFxufVxcblxcbmludCBtb2Q4KGludCBhKSB7XFxuICAgIHJldHVybiBhIC0gOCAqIChhIC8gOCk7XFxufVxcblxcbnZlYzQgemVybyA9IHZlYzQoMCwgMCwgMCwgMCk7XFxudmVjNCB1bml0XzAgPSB2ZWM0KDEsIDEsIDEsIDEpO1xcbnZlYzIgeHlQcm9qZWN0aW9uID0gdmVjMigxLCAxKTtcXG5cXG5tYXQ0IG1jbGFtcChtYXQ0IG0sIG1hdDQgbG8sIG1hdDQgaGkpIHtcXG4gICAgcmV0dXJuIG1hdDQoY2xhbXAobVswXSwgbG9bMF0sIGhpWzBdKSxcXG4gICAgICAgICAgICAgICAgY2xhbXAobVsxXSwgbG9bMV0sIGhpWzFdKSxcXG4gICAgICAgICAgICAgICAgY2xhbXAobVsyXSwgbG9bMl0sIGhpWzJdKSxcXG4gICAgICAgICAgICAgICAgY2xhbXAobVszXSwgbG9bM10sIGhpWzNdKSk7XFxufVxcblxcbmJvb2wgbXNob3cobWF0NCBwLCBtYXQ0IGxvLCBtYXQ0IGhpKSB7XFxuICAgIHJldHVybiBtY2xhbXAocCwgbG8sIGhpKSA9PSBwO1xcbn1cXG5cXG5ib29sIHdpdGhpbkJvdW5kaW5nQm94KFxcbiAgICAgICAgbWF0NCBkWzRdLFxcbiAgICAgICAgbWF0NCBsb0EsIG1hdDQgaGlBLCBtYXQ0IGxvQiwgbWF0NCBoaUIsIG1hdDQgbG9DLCBtYXQ0IGhpQywgbWF0NCBsb0QsIG1hdDQgaGlEXFxuICAgICkge1xcblxcbiAgICByZXR1cm4gbXNob3coZFswXSwgbG9BLCBoaUEpICYmXFxuICAgICAgICAgICBtc2hvdyhkWzFdLCBsb0IsIGhpQikgJiZcXG4gICAgICAgICAgIG1zaG93KGRbMl0sIGxvQywgaGlDKSAmJlxcbiAgICAgICAgICAgbXNob3coZFszXSwgbG9ELCBoaUQpO1xcbn1cXG5cXG5ib29sIHdpdGhpblJhc3Rlck1hc2sobWF0NCBkWzRdLCBzYW1wbGVyMkQgbWFzaywgZmxvYXQgaGVpZ2h0KSB7XFxuICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTtcXG4gICAgaW50IGJpdEluQnl0ZVN0ZXBwZXI7XFxuICAgIGZsb2F0IHZhbFksIHZhbHVlWSwgc2NhbGVYO1xcbiAgICBpbnQgaGl0LCBiaXRtYXNrLCB2YWxYO1xcbiAgICBmb3IoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7XFxuICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgNDsgaisrKSB7XFxuICAgICAgICAgICAgZm9yKGludCBrID0gMDsgayA8IDQ7IGsrKykge1xcbiAgICAgICAgICAgICAgICBiaXRJbkJ5dGVTdGVwcGVyID0gbW9kOChqICogNCArIGspO1xcbiAgICAgICAgICAgICAgICB2YWxYID0gaSAqIDIgKyBqIC8gMjtcXG4gICAgICAgICAgICAgICAgdmFsWSA9IGRbaV1bal1ba107XFxuICAgICAgICAgICAgICAgIHZhbHVlWSA9IHZhbFkgKiAoaGVpZ2h0IC0gMS4wKSArIDAuNTtcXG4gICAgICAgICAgICAgICAgc2NhbGVYID0gKGZsb2F0KHZhbFgpICsgMC41KSAvIDguMDtcXG4gICAgICAgICAgICAgICAgaGl0ID0gaW50KHRleHR1cmUyRChtYXNrLCB2ZWMyKHNjYWxlWCwgKHZhbHVlWSArIDAuNSkgLyBoZWlnaHQpKVszXSAqIDI1NS4wKSAvIGludChwb3coMi4wLCBmbG9hdChiaXRJbkJ5dGVTdGVwcGVyKSkpO1xcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgbW9kMihoaXQpID09IDE7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxufVxcblxcbnZlYzQgcG9zaXRpb24oXFxuICAgICAgICBmbG9hdCBkZXB0aCxcXG4gICAgICAgIHZlYzIgcmVzb2x1dGlvbiwgdmVjMiB2aWV3Qm94UG9zaXRpb24sIHZlYzIgdmlld0JveFNpemUsXFxuICAgICAgICBtYXQ0IGRpbXNbNF0sXFxuICAgICAgICBmbG9hdCBzaWdudW0sXFxuICAgICAgICBtYXQ0IGRpbTFBLCBtYXQ0IGRpbTJBLCBtYXQ0IGRpbTFCLCBtYXQ0IGRpbTJCLCBtYXQ0IGRpbTFDLCBtYXQ0IGRpbTJDLCBtYXQ0IGRpbTFELCBtYXQ0IGRpbTJELFxcbiAgICAgICAgbWF0NCBsb0EsIG1hdDQgaGlBLCBtYXQ0IGxvQiwgbWF0NCBoaUIsIG1hdDQgbG9DLCBtYXQ0IGhpQywgbWF0NCBsb0QsIG1hdDQgaGlELFxcbiAgICAgICAgc2FtcGxlcjJEIG1hc2ssIGZsb2F0IG1hc2tIZWlnaHRcXG4gICAgKSB7XFxuXFxuICAgIGZsb2F0IHggPSAwLjUgKiBzaWdudW0gKyAwLjU7XFxuICAgIGZsb2F0IHkgPSBheGlzWSh4LCBkaW1zLCBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkQpO1xcblxcbiAgICBmbG9hdCBzaG93ID0gZmxvYXQoXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbkJvdW5kaW5nQm94KGRpbXMsIGxvQSwgaGlBLCBsb0IsIGhpQiwgbG9DLCBoaUMsIGxvRCwgaGlEKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3aXRoaW5SYXN0ZXJNYXNrKGRpbXMsIG1hc2ssIG1hc2tIZWlnaHQpXFxuICAgICAgICAgICAgICAgICAgICAgICk7XFxuXFxuICAgIHZlYzIgdmlld0JveFhZID0gdmlld0JveFBvc2l0aW9uICsgdmlld0JveFNpemUgKiB2ZWMyKHgsIHkpO1xcbiAgICBmbG9hdCBkZXB0aE9ySGlkZSA9IGRlcHRoICsgMi4wICogKDEuMCAtIHNob3cpO1xcblxcbiAgICByZXR1cm4gdmVjNChcXG4gICAgICAgIHh5UHJvamVjdGlvbiAqICgyLjAgKiB2aWV3Qm94WFkgLyByZXNvbHV0aW9uIC0gMS4wKSxcXG4gICAgICAgIGRlcHRoT3JIaWRlLFxcbiAgICAgICAgMS4wXFxuICAgICk7XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG5cXG4gICAgZmxvYXQgcHJvbWluZW5jZSA9IGFicyhwZlszXSk7XFxuXFxuICAgIG1hdDQgcFs0XTtcXG4gICAgcFswXSA9IG1hdDQocDAsIHAxLCBwMiwgcDMpO1xcbiAgICBwWzFdID0gbWF0NChwNCwgcDUsIHA2LCBwNyk7XFxuICAgIHBbMl0gPSBtYXQ0KHA4LCBwOSwgcGEsIHBiKTtcXG4gICAgcFszXSA9IG1hdDQocGMsIHBkLCBwZSwgYWJzKHBmKSk7XFxuXFxuICAgIGdsX1Bvc2l0aW9uID0gcG9zaXRpb24oXFxuICAgICAgICAxLjAgLSBwcm9taW5lbmNlLFxcbiAgICAgICAgcmVzb2x1dGlvbiwgdmlld0JveFBvc2l0aW9uLCB2aWV3Qm94U2l6ZSxcXG4gICAgICAgIHAsXFxuICAgICAgICBzaWduKHBmWzNdKSxcXG4gICAgICAgIGRpbTFBLCBkaW0yQSwgZGltMUIsIGRpbTJCLCBkaW0xQywgZGltMkMsIGRpbTFELCBkaW0yRCxcXG4gICAgICAgIGxvQSwgaGlBLCBsb0IsIGhpQiwgbG9DLCBoaUMsIGxvRCwgaGlELFxcbiAgICAgICAgbWFzaywgbWFza0hlaWdodFxcbiAgICApO1xcblxcbiAgICBmcmFnQ29sb3IgPSB2ZWM0KHBmLnJnYiwgMS4wKTtcXG59XFxuXCJdKSxzPW4oW1wicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuI2RlZmluZSBHTFNMSUZZIDFcXG5cXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xcbn1cXG5cIl0pLGw9dChcIi4uLy4uL2xpYlwiKSxjPTFlLTYsdT0xZS03LGg9MjA0OCxmPTY0LHA9MixkPTQsZz04LHY9Zi9nLG09WzExOSwxMTksMTE5XSx5PW5ldyBVaW50OEFycmF5KDQpLHg9bmV3IFVpbnQ4QXJyYXkoNCksYj17c2hhcGU6WzI1NiwxXSxmb3JtYXQ6XCJyZ2JhXCIsdHlwZTpcInVpbnQ4XCIsbWFnOlwibmVhcmVzdFwiLG1pbjpcIm5lYXJlc3RcIn07ZnVuY3Rpb24gXyh0LGUscixuLGkpe3ZhciBhPXQuX2dsO2EuZW5hYmxlKGEuU0NJU1NPUl9URVNUKSxhLnNjaXNzb3IoZSxyLG4saSksdC5jbGVhcih7Y29sb3I6WzAsMCwwLDBdLGRlcHRoOjF9KX1mdW5jdGlvbiB3KHQsZSxyLG4saSxhKXt2YXIgbz1hLmtleTtyLmRyYXdDb21wbGV0ZWR8fCghZnVuY3Rpb24odCl7dC5yZWFkKHt4OjAseTowLHdpZHRoOjEsaGVpZ2h0OjEsZGF0YTp5fSl9KHQpLHIuZHJhd0NvbXBsZXRlZD0hMCksZnVuY3Rpb24gcyhsKXt2YXIgYztjPU1hdGgubWluKG4saS1sKm4pLGEub2Zmc2V0PXAqbCpuLGEuY291bnQ9cCpjLDA9PT1sJiYod2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHIuY3VycmVudFJhZnNbb10pLGRlbGV0ZSByLmN1cnJlbnRSYWZzW29dLF8odCxhLnNjaXNzb3JYLGEuc2Npc3NvclksYS5zY2lzc29yV2lkdGgsYS52aWV3Qm94U2l6ZVsxXSkpLHIuY2xlYXJPbmx5fHwoZShhKSxsKm4rYzxpJiYoci5jdXJyZW50UmFmc1tvXT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7cyhsKzEpfSkpLHIuZHJhd0NvbXBsZXRlZD0hMSl9KDApfWZ1bmN0aW9uIGsodCxlKXtyZXR1cm4odD4+PjgqZSklMjU2LzI1NX1mdW5jdGlvbiBBKHQsZSxyKXt2YXIgbixpLGEsbz1bXTtmb3IoaT0wO2k8dDtpKyspZm9yKGE9MDthPHA7YSsrKWZvcihuPTA7bjxkO24rKylvLnB1c2goZVtpKmYrcipkK25dKSxyKmQrbj09PWYtMSYmYSUyPT0wJiYob1tvLmxlbmd0aC0xXSo9LTEpO3JldHVybiBvfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4scCxkLHksVD1lLmNvbnRleHQsTT1lLnBpY2ssUz1lLnJlZ2wsRT17Y3VycmVudFJhZnM6e30sZHJhd0NvbXBsZXRlZDohMCxjbGVhck9ubHk6ITF9LEM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LHI9MDtyPDE2O3IrKyllW1wicFwiK3IudG9TdHJpbmcoMTYpXT10LmJ1ZmZlcih7dXNhZ2U6XCJkeW5hbWljXCIsdHlwZTpcImZsb2F0XCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pO3JldHVybiBlfShTKSxMPVMudGV4dHVyZShiKTtPKGUpO3ZhciB6PVMoe3Byb2ZpbGU6ITEsYmxlbmQ6e2VuYWJsZTpULGZ1bmM6e3NyY1JHQjpcInNyYyBhbHBoYVwiLGRzdFJHQjpcIm9uZSBtaW51cyBzcmMgYWxwaGFcIixzcmNBbHBoYToxLGRzdEFscGhhOjF9LGVxdWF0aW9uOntyZ2I6XCJhZGRcIixhbHBoYTpcImFkZFwifSxjb2xvcjpbMCwwLDAsMF19LGRlcHRoOntlbmFibGU6IVQsbWFzazohMCxmdW5jOlwibGVzc1wiLHJhbmdlOlswLDFdfSxjdWxsOntlbmFibGU6ITAsZmFjZTpcImJhY2tcIn0sc2Npc3Nvcjp7ZW5hYmxlOiEwLGJveDp7eDpTLnByb3AoXCJzY2lzc29yWFwiKSx5OlMucHJvcChcInNjaXNzb3JZXCIpLHdpZHRoOlMucHJvcChcInNjaXNzb3JXaWR0aFwiKSxoZWlnaHQ6Uy5wcm9wKFwic2Npc3NvckhlaWdodFwiKX19LHZpZXdwb3J0Ont4OlMucHJvcChcInZpZXdwb3J0WFwiKSx5OlMucHJvcChcInZpZXdwb3J0WVwiKSx3aWR0aDpTLnByb3AoXCJ2aWV3cG9ydFdpZHRoXCIpLGhlaWdodDpTLnByb3AoXCJ2aWV3cG9ydEhlaWdodFwiKX0sZGl0aGVyOiExLHZlcnQ6TT9vOlQ/YTppLGZyYWc6cyxwcmltaXRpdmU6XCJsaW5lc1wiLGxpbmVXaWR0aDoxLGF0dHJpYnV0ZXM6Qyx1bmlmb3Jtczp7cmVzb2x1dGlvbjpTLnByb3AoXCJyZXNvbHV0aW9uXCIpLHZpZXdCb3hQb3NpdGlvbjpTLnByb3AoXCJ2aWV3Qm94UG9zaXRpb25cIiksdmlld0JveFNpemU6Uy5wcm9wKFwidmlld0JveFNpemVcIiksZGltMUE6Uy5wcm9wKFwiZGltMUFcIiksZGltMkE6Uy5wcm9wKFwiZGltMkFcIiksZGltMUI6Uy5wcm9wKFwiZGltMUJcIiksZGltMkI6Uy5wcm9wKFwiZGltMkJcIiksZGltMUM6Uy5wcm9wKFwiZGltMUNcIiksZGltMkM6Uy5wcm9wKFwiZGltMkNcIiksZGltMUQ6Uy5wcm9wKFwiZGltMURcIiksZGltMkQ6Uy5wcm9wKFwiZGltMkRcIiksbG9BOlMucHJvcChcImxvQVwiKSxoaUE6Uy5wcm9wKFwiaGlBXCIpLGxvQjpTLnByb3AoXCJsb0JcIiksaGlCOlMucHJvcChcImhpQlwiKSxsb0M6Uy5wcm9wKFwibG9DXCIpLGhpQzpTLnByb3AoXCJoaUNcIiksbG9EOlMucHJvcChcImxvRFwiKSxoaUQ6Uy5wcm9wKFwiaGlEXCIpLHBhbGV0dGU6TCxtYXNrOlMucHJvcChcIm1hc2tUZXh0dXJlXCIpLG1hc2tIZWlnaHQ6Uy5wcm9wKFwibWFza0hlaWdodFwiKSxjb2xvckNsYW1wOlMucHJvcChcImNvbG9yQ2xhbXBcIil9LG9mZnNldDpTLnByb3AoXCJvZmZzZXRcIiksY291bnQ6Uy5wcm9wKFwiY291bnRcIil9KTtmdW5jdGlvbiBPKHQpe3I9dC5tb2RlbCxuPXQudmlld01vZGVsLHA9bi5kaW1lbnNpb25zLnNsaWNlKCksZD1wWzBdP3BbMF0udmFsdWVzLmxlbmd0aDowO3ZhciBlPXIubGluZXMsaT1NP2UuY29sb3IubWFwKGZ1bmN0aW9uKHQscil7cmV0dXJuIHIvZS5jb2xvci5sZW5ndGh9KTplLmNvbG9yLGE9TWF0aC5tYXgoMS8yNTUsTWF0aC5wb3coMS9pLmxlbmd0aCwxLzMpKSxvPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saT1lLmxlbmd0aCxhPVtdLG89MDtvPHQ7bysrKWZvcih2YXIgcz0wO3M8ZjtzKyspYS5wdXNoKHM8aT9lW3NdLnBhZGRlZFVuaXRWYWx1ZXNbb106cz09PWYtMT8obj1yW29dLE1hdGgubWF4KGMsTWF0aC5taW4oMS1jLG4pKSk6cz49Zi00P2sobyxmLTItcyk6LjUpO3JldHVybiBhfShkLHAsaSk7IWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPDE2O24rKyl0W1wicFwiK24udG9TdHJpbmcoMTYpXShBKGUscixuKSl9KEMsZCxvKSxMPVMudGV4dHVyZShsLmV4dGVuZEZsYXQoe2RhdGE6ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1bXSxpPTA7aTwyNTY7aSsrKXt2YXIgYT10KGkvMjU1KTtuLnB1c2goKGU/bTphKS5jb25jYXQocikpfXJldHVybiBufShyLnVuaXRUb0NvbG9yLFQsTWF0aC5yb3VuZCgyNTUqKFQ/YToxKSkpfSxiKSl9dmFyIEk9WzAsMV07dmFyIEQ9W107ZnVuY3Rpb24gUCh0LGUsbixpLGEsbyxzLGMsdSxoLGYpe3ZhciBwLGQsZyx2LG09W3QsZV0seT1bMCwxXS5tYXAoZnVuY3Rpb24oKXtyZXR1cm5bMCwxLDIsM10ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMTYpfSl9KTtmb3IocD0wO3A8MjtwKyspZm9yKHY9bVtwXSxkPTA7ZDw0O2QrKylmb3IoZz0wO2c8MTY7ZysrKXlbcF1bZF1bZ109ZysxNipkPT09dj8xOjA7dmFyIHg9ci5saW5lcy5jYW52YXNPdmVyZHJhZyxiPXIuZG9tYWluLF89ci5jYW52YXNXaWR0aCx3PXIuY2FudmFzSGVpZ2h0O3JldHVybiBsLmV4dGVuZEZsYXQoe2tleTpzLHJlc29sdXRpb246W18sd10sdmlld0JveFBvc2l0aW9uOltuK3gsaV0sdmlld0JveFNpemU6W2Esb10saTp0LGlpOmUsZGltMUE6eVswXVswXSxkaW0xQjp5WzBdWzFdLGRpbTFDOnlbMF1bMl0sZGltMUQ6eVswXVszXSxkaW0yQTp5WzFdWzBdLGRpbTJCOnlbMV1bMV0sZGltMkM6eVsxXVsyXSxkaW0yRDp5WzFdWzNdLGNvbG9yQ2xhbXA6SSxzY2lzc29yWDooYz09PXU/MDpuK3gpKyhyLnBhZC5sLXgpK3IubGF5b3V0V2lkdGgqYi54WzBdLHNjaXNzb3JXaWR0aDooYz09PWg/Xy1uK3g6YSsuNSkrKGM9PT11P24reDowKSxzY2lzc29yWTppK3IucGFkLmIrci5sYXlvdXRIZWlnaHQqYi55WzBdLHNjaXNzb3JIZWlnaHQ6byx2aWV3cG9ydFg6ci5wYWQubC14K3IubGF5b3V0V2lkdGgqYi54WzBdLHZpZXdwb3J0WTpyLnBhZC5iK3IubGF5b3V0SGVpZ2h0KmIueVswXSx2aWV3cG9ydFdpZHRoOl8sdmlld3BvcnRIZWlnaHQ6d30sZil9cmV0dXJue3NldENvbG9yRG9tYWluOmZ1bmN0aW9uKHQpe0lbMF09dFswXSxJWzFdPXRbMV19LHJlbmRlcjpmdW5jdGlvbih0LGUsbil7dmFyIGksYSxvLHM9dC5sZW5ndGgsbD0xLzAsYz0tMS8wO2ZvcihpPTA7aTxzO2krKyl0W2ldLmRpbTIuY2FudmFzWD5jJiYoYz10W2ldLmRpbTIuY2FudmFzWCxvPWkpLHRbaV0uZGltMS5jYW52YXNYPGwmJihsPXRbaV0uZGltMS5jYW52YXNYLGE9aSk7MD09PXMmJl8oUywwLDAsci5jYW52YXNXaWR0aCxyLmNhbnZhc0hlaWdodCk7dmFyIGY9VD97fTpmdW5jdGlvbigpe3ZhciB0LGUscixuPVswLDFdLm1hcChmdW5jdGlvbigpe3JldHVyblswLDEsMiwzXS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgxNil9KX0pO2Zvcih0PTA7dDwyO3QrKylmb3IoZT0wO2U8NDtlKyspZm9yKHI9MDtyPDE2O3IrKyl7dmFyIGksYT1yKzE2KmU7aT1hPHAubGVuZ3RoP3BbYV0uYnJ1c2guZmlsdGVyLmdldEJvdW5kcygpW3RdOnQsblt0XVtlXVtyXT1pKygyKnQtMSkqdX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9aC0xO3JldHVybltNYXRoLm1heCgwLE1hdGguZmxvb3IoZVswXSpyKSksTWF0aC5taW4ocixNYXRoLmNlaWwoZVsxXSpyKSldfWZvcih2YXIgcz1BcnJheS5hcHBseShudWxsLG5ldyBBcnJheShoKnYpKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gMjU1fSksbD0wO2w8cC5sZW5ndGg7bCsrKXt2YXIgYz1sJWcsZj0obC1jKS9nLGQ9TWF0aC5wb3coMixjKSxtPXBbbF0seD1tLmJydXNoLmZpbHRlci5nZXQoKTtpZighKHgubGVuZ3RoPDIpKWZvcih2YXIgYj1vKDAseFswXSlbMV0sXz0xO188eC5sZW5ndGg7XysrKXtmb3IodmFyIHc9bygwLHhbX10pLGs9YisxO2s8d1swXTtrKyspc1trKnYrZl0mPX5kO2I9TWF0aC5tYXgoYix3WzFdKX19dmFyIEE9e3NoYXBlOlt2LGhdLGZvcm1hdDpcImFscGhhXCIsdHlwZTpcInVpbnQ4XCIsbWFnOlwibmVhcmVzdFwiLG1pbjpcIm5lYXJlc3RcIixkYXRhOnN9O3JldHVybiB5P3koQSk6eT1TLnRleHR1cmUoQSkse21hc2tUZXh0dXJlOnksbWFza0hlaWdodDpoLGxvQTpuWzBdWzBdLGxvQjpuWzBdWzFdLGxvQzpuWzBdWzJdLGxvRDpuWzBdWzNdLGhpQTpuWzFdWzBdLGhpQjpuWzFdWzFdLGhpQzpuWzFdWzJdLGhpRDpuWzFdWzNdfX0oKTtmb3IoaT0wO2k8cztpKyspe3ZhciBtPXRbaV0seD1tLmRpbTEsYj14LmNyb3NzZmlsdGVyRGltZW5zaW9uSW5kZXgsaz1tLmNhbnZhc1gsQT1tLmNhbnZhc1ksTT1tLmRpbTIuY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleCxDPW0ucGFuZWxTaXplWCxMPW0ucGFuZWxTaXplWSxPPWsrQztpZihlfHwhRFtiXXx8RFtiXVswXSE9PWt8fERbYl1bMV0hPT1PKXtEW2JdPVtrLE9dO3ZhciBJPVAoYixNLGssQSxDLEwseC5jcm9zc2ZpbHRlckRpbWVuc2lvbkluZGV4LGksYSxvLGYpO0UuY2xlYXJPbmx5PW4sdyhTLHosRSxlP3IubGluZXMuYmxvY2tMaW5lQ291bnQ6ZCxkLEkpfX19LHJlYWRQaXhlbDpmdW5jdGlvbih0LGUpe3JldHVybiBTLnJlYWQoe3g6dCx5OmUsd2lkdGg6MSxoZWlnaHQ6MSxkYXRhOnh9KSx4fSxyZWFkUGl4ZWxzOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW5ldyBVaW50OEFycmF5KDQqcipuKTtyZXR1cm4gUy5yZWFkKHt4OnQseTplLHdpZHRoOnIsaGVpZ2h0Om4sZGF0YTppfSksaX0sZGVzdHJveTpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0LnN0eWxlW1wicG9pbnRlci1ldmVudHNcIl09XCJub25lXCIsTC5kZXN0cm95KCkseSYmeS5kZXN0cm95KCksQylDW2VdLmRlc3Ryb3koKX0sdXBkYXRlOk99fX0se1wiLi4vLi4vbGliXCI6NzAxLGdsc2xpZnk6NDAyfV0sMTAyMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhO2ZvcihufHwobj0xLzApLGk9MDtpPGUubGVuZ3RoO2krKykoYT1lW2ldKS52aXNpYmxlJiYobj1NYXRoLm1pbihuLGFbcl0ubGVuZ3RoKSk7Zm9yKG49PT0xLzAmJihuPTApLHQuX2xlbmd0aD1uLGk9MDtpPGUubGVuZ3RoO2krKykoYT1lW2ldKS52aXNpYmxlJiYoYS5fbGVuZ3RoPW4pO3JldHVybiBufX0se31dLDEwMjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGVcIikscz10KFwiLi4vLi4vbGliL2d1cFwiKSxsPXMua2V5RnVuLGM9cy5yZXBlYXQsdT1zLnVud3JhcCxoPXQoXCIuL2NvbnN0YW50c1wiKSxmPXQoXCIuL2F4aXNicnVzaFwiKSxwPXQoXCIuL2xpbmVzXCIpO2Z1bmN0aW9uIGQodCl7cmV0dXJuIShcInZpc2libGVcImluIHQpfHx0LnZpc2libGV9ZnVuY3Rpb24gZyh0KXt2YXIgZT10LnJhbmdlP3QucmFuZ2VbMF06aS5hZ2dOdW1zKE1hdGgubWluLG51bGwsdC52YWx1ZXMsdC5fbGVuZ3RoKSxyPXQucmFuZ2U/dC5yYW5nZVsxXTppLmFnZ051bXMoTWF0aC5tYXgsbnVsbCx0LnZhbHVlcyx0Ll9sZW5ndGgpO3JldHVybiFpc05hTihlKSYmaXNGaW5pdGUoZSl8fChlPTApLCFpc05hTihyKSYmaXNGaW5pdGUocil8fChyPTApLGU9PT1yJiYoMD09PWU/KGUtPTEscis9MSk6KGUqPS45LHIqPTEuMSkpLFtlLHJdfWZ1bmN0aW9uIHYodCl7cmV0dXJuIHQuZGltZW5zaW9ucy5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0LmJydXNoLmZpbHRlclNwZWNpZmllZH0pfWZ1bmN0aW9uIG0odCxlLHIpe3ZhciBhPXUoZSkscz1hLnRyYWNlLGw9YS5saW5lQ29sb3IsYz1zLmxpbmUsZj1jLnJldmVyc2VzY2FsZT9vLmZsaXBTY2FsZShhLmNzY2FsZSk6YS5jc2NhbGUscD1zLmRvbWFpbix2PXMuZGltZW5zaW9ucyxtPXQud2lkdGgseT1zLmxhYmVsZm9udCx4PXMudGlja2ZvbnQsYj1zLnJhbmdlZm9udCxfPWkuZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LGMse2NvbG9yOmwubWFwKG4uc2NhbGUubGluZWFyKCkuZG9tYWluKGcoe3ZhbHVlczpsLHJhbmdlOltjLmNtaW4sYy5jbWF4XSxfbGVuZ3RoOnMuX2xlbmd0aH0pKSksYmxvY2tMaW5lQ291bnQ6aC5ibG9ja0xpbmVDb3VudCxjYW52YXNPdmVyZHJhZzpoLm92ZXJkcmFnKmguY2FudmFzUGl4ZWxSYXRpb30pLHc9TWF0aC5mbG9vcihtKihwLnhbMV0tcC54WzBdKSksaz1NYXRoLmZsb29yKHQuaGVpZ2h0KihwLnlbMV0tcC55WzBdKSksQT10Lm1hcmdpbnx8e2w6ODAscjo4MCx0OjEwMCxiOjgwfSxUPXcsTT1rO3JldHVybntrZXk6cixjb2xDb3VudDp2LmZpbHRlcihkKS5sZW5ndGgsZGltZW5zaW9uczp2LHRpY2tEaXN0YW5jZTpoLnRpY2tEaXN0YW5jZSx1bml0VG9Db2xvcjpmdW5jdGlvbih0KXt2YXIgZT10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pLHI9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIG4ucmdiKHRbMV0pfSksaT1cInJnYlwiLnNwbGl0KFwiXCIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbi5zY2FsZS5saW5lYXIoKS5jbGFtcCghMCkuZG9tYWluKGUpLnJhbmdlKHIubWFwKChpPXQsZnVuY3Rpb24odCl7cmV0dXJuIHRbaV19KSkpO3ZhciBpfSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZSh0KX0pfX0oZiksbGluZXM6XyxsYWJlbEZvbnQ6eSx0aWNrRm9udDp4LHJhbmdlRm9udDpiLGxheW91dFdpZHRoOm0sbGF5b3V0SGVpZ2h0OnQuaGVpZ2h0LGRvbWFpbjpwLHRyYW5zbGF0ZVg6cC54WzBdKm0sdHJhbnNsYXRlWTp0LmhlaWdodC1wLnlbMV0qdC5oZWlnaHQscGFkOkEsY2FudmFzV2lkdGg6VCpoLmNhbnZhc1BpeGVsUmF0aW8rMipfLmNhbnZhc092ZXJkcmFnLGNhbnZhc0hlaWdodDpNKmguY2FudmFzUGl4ZWxSYXRpbyx3aWR0aDpULGhlaWdodDpNLGNhbnZhc1BpeGVsUmF0aW86aC5jYW52YXNQaXhlbFJhdGlvfX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgYT1yLndpZHRoLG89ci5oZWlnaHQscz1yLmRpbWVuc2lvbnMsbD1yLmNhbnZhc1BpeGVsUmF0aW8sYz1mdW5jdGlvbih0KXtyZXR1cm4gYSp0L01hdGgubWF4KDEsci5jb2xDb3VudC0xKX0sdT1oLnZlcnRpY2FsUGFkZGluZy9vLHA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5zY2FsZS5saW5lYXIoKS5yYW5nZShbZSx0LWVdKX0obyxoLnZlcnRpY2FsUGFkZGluZyksbT17a2V5OnIua2V5LHhTY2FsZTpjLG1vZGVsOnIsaW5CcnVzaERyYWc6ITF9LHk9e307cmV0dXJuIG0uZGltZW5zaW9ucz1zLmZpbHRlcihkKS5tYXAoZnVuY3Rpb24oYSxzKXt2YXIgZD1mdW5jdGlvbih0LGUpe3JldHVybiBuLnNjYWxlLmxpbmVhcigpLmRvbWFpbihnKHQpKS5yYW5nZShbZSwxLWVdKX0oYSx1KSx4PXlbYS5sYWJlbF07eVthLmxhYmVsXT0oeHx8MCkrMTt2YXIgYj1hLmxhYmVsKyh4P1wiX19cIit4OlwiXCIpLF89YS5jb25zdHJhaW50cmFuZ2Usdz1fJiZfLmxlbmd0aDt3JiYhQXJyYXkuaXNBcnJheShfWzBdKSYmKF89W19dKTt2YXIgaz13P18ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChkKX0pOltbMCwxXV0sQT1hLnZhbHVlcztBLmxlbmd0aD5hLl9sZW5ndGgmJihBPUEuc2xpY2UoMCxhLl9sZW5ndGgpKTt2YXIgVCxNPWEudGlja3ZhbHM7ZnVuY3Rpb24gUyh0LGUpe3JldHVybnt2YWw6dCx0ZXh0OlRbZV19fWZ1bmN0aW9uIEUodCxlKXtyZXR1cm4gdC52YWwtZS52YWx9aWYoQXJyYXkuaXNBcnJheShNKSYmTS5sZW5ndGgpe1Q9YS50aWNrdGV4dCxBcnJheS5pc0FycmF5KFQpJiZULmxlbmd0aD9ULmxlbmd0aD5NLmxlbmd0aD9UPVQuc2xpY2UoMCxNLmxlbmd0aCk6TS5sZW5ndGg+VC5sZW5ndGgmJihNPU0uc2xpY2UoMCxULmxlbmd0aCkpOlQ9TS5tYXAobi5mb3JtYXQoYS50aWNrZm9ybWF0KSk7Zm9yKHZhciBDPTE7QzxNLmxlbmd0aDtDKyspaWYoTVtDXTxNW0MtMV0pe2Zvcih2YXIgTD1NLm1hcChTKS5zb3J0KEUpLHo9MDt6PE0ubGVuZ3RoO3orKylNW3pdPUxbel0udmFsLFRbel09TFt6XS50ZXh0O2JyZWFrfX1lbHNlIE09dm9pZCAwO3JldHVybntrZXk6YixsYWJlbDphLmxhYmVsLHRpY2tGb3JtYXQ6YS50aWNrZm9ybWF0LHRpY2t2YWxzOk0sdGlja3RleHQ6VCxvcmRpbmFsOiEhTSxtdWx0aXNlbGVjdDphLm11bHRpc2VsZWN0LHhJbmRleDpzLGNyb3NzZmlsdGVyRGltZW5zaW9uSW5kZXg6cyx2aXNpYmxlSW5kZXg6YS5faW5kZXgsaGVpZ2h0Om8sdmFsdWVzOkEscGFkZGVkVW5pdFZhbHVlczpBLm1hcChkKSx1bml0VGlja3ZhbHM6TSYmTS5tYXAoZCkseFNjYWxlOmMseDpjKHMpLGNhbnZhc1g6YyhzKSpsLHVuaXRUb1BhZGRlZFB4OnAsZG9tYWluU2NhbGU6ZnVuY3Rpb24odCxlLHIsaSxhKXt2YXIgbyxzLGw9ZyhyKTtyZXR1cm4gaT9uLnNjYWxlLm9yZGluYWwoKS5kb21haW4oaS5tYXAoKG89bi5mb3JtYXQoci50aWNrZm9ybWF0KSxzPWEscz9mdW5jdGlvbih0LGUpe3ZhciByPXNbZV07cmV0dXJuIG51bGw9PXI/byh0KTpyfTpvKSkpLnJhbmdlKGkubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPShyLWxbMF0pLyhsWzFdLWxbMF0pO3JldHVybiB0LWUrbiooMiplLXQpfSkpOm4uc2NhbGUubGluZWFyKCkuZG9tYWluKGwpLnJhbmdlKFt0LWUsZV0pfShvLGgudmVydGljYWxQYWRkaW5nLGEsTSxUKSxvcmRpbmFsU2NhbGU6ZnVuY3Rpb24odCl7aWYodC50aWNrdmFscyl7dmFyIGU9Zyh0KTtyZXR1cm4gbi5zY2FsZS5vcmRpbmFsKCkuZG9tYWluKHQudGlja3ZhbHMpLnJhbmdlKHQudGlja3ZhbHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybih0LWVbMF0pLyhlWzFdLWVbMF0pfSkpfX0oYSkscGFyZW50Om0sbW9kZWw6cixicnVzaDpmLm1ha2VCcnVzaCh0LHcsayxmdW5jdGlvbigpe3QubGluZVBpY2tBY3RpdmUoITEpfSxmdW5jdGlvbigpe3ZhciBlPW07ZS5mb2N1c0xheWVyJiZlLmZvY3VzTGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwKTt2YXIgcj12KGUpOyF0LmNvbnRleHRTaG93bigpJiZyPyhlLmNvbnRleHRMYXllciYmZS5jb250ZXh0TGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwKSx0LmNvbnRleHRTaG93bighMCkpOnQuY29udGV4dFNob3duKCkmJiFyJiYoZS5jb250ZXh0TGF5ZXImJmUuY29udGV4dExheWVyLnJlbmRlcihlLnBhbmVscywhMCwhMCksdC5jb250ZXh0U2hvd24oITEpKX0sZnVuY3Rpb24ocil7dmFyIG49bTtpZihuLmZvY3VzTGF5ZXIucmVuZGVyKG4ucGFuZWxzLCEwKSxuLnBpY2tMYXllciYmbi5waWNrTGF5ZXIucmVuZGVyKG4ucGFuZWxzLCEwKSx0LmxpbmVQaWNrQWN0aXZlKCEwKSxlJiZlLmZpbHRlckNoYW5nZWQpe3ZhciBvPWQuaW52ZXJ0LHM9ci5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKG8pLnNvcnQoaS5zb3J0ZXJBc2MpfSkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0WzBdLWVbMF19KTtlLmZpbHRlckNoYW5nZWQobi5rZXksYS5faW5kZXgscyl9fSl9fSksbX1mdW5jdGlvbiB4KHQpe3QuY2xhc3NlZChoLmNuLmF4aXNFeHRlbnRUZXh0LCEwKS5hdHRyKFwidGV4dC1hbmNob3JcIixcIm1pZGRsZVwiKS5zdHlsZShcImN1cnNvclwiLFwiZGVmYXVsdFwiKS5zdHlsZShcInVzZXItc2VsZWN0XCIsXCJub25lXCIpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMsZCl7dmFyIGcsYixfPShnPSEwLGI9ITEse2xpbmVQaWNrQWN0aXZlOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2c9ISF0Omd9LGNvbnRleHRTaG93bjpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9iPSEhdDpifX0pLHc9by5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHUodCkudHJhY2UudmlzaWJsZX0pLm1hcChtLmJpbmQoMCxzKSkubWFwKHkuYmluZCgwLF8sZCkpO3IuZWFjaChmdW5jdGlvbih0LGUpe3JldHVybiBpLmV4dGVuZEZsYXQodCx3W2VdKX0pO3ZhciBrPXIuc2VsZWN0QWxsKFwiLmdsLWNhbnZhc1wiKS5lYWNoKGZ1bmN0aW9uKHQpe3Qudmlld01vZGVsPXdbMF0sdC5tb2RlbD10LnZpZXdNb2RlbD90LnZpZXdNb2RlbC5tb2RlbDpudWxsfSksQT1udWxsO2suZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBpY2t9KS5zdHlsZShcInBvaW50ZXItZXZlbnRzXCIsXCJhdXRvXCIpLm9uKFwibW91c2Vtb3ZlXCIsZnVuY3Rpb24odCl7aWYoXy5saW5lUGlja0FjdGl2ZSgpJiZ0LmxpbmVMYXllciYmZCYmZC5ob3Zlcil7dmFyIGU9bi5ldmVudCxyPXRoaXMud2lkdGgsaT10aGlzLmhlaWdodCxhPW4ubW91c2UodGhpcyksbz1hWzBdLHM9YVsxXTtpZihvPDB8fHM8MHx8bz49cnx8cz49aSlyZXR1cm47dmFyIGw9dC5saW5lTGF5ZXIucmVhZFBpeGVsKG8saS0xLXMpLGM9MCE9PWxbM10sdT1jP2xbMl0rMjU2KihsWzFdKzI1NipsWzBdKTpudWxsLGg9e3g6byx5OnMsY2xpZW50WDplLmNsaWVudFgsY2xpZW50WTplLmNsaWVudFksZGF0YUluZGV4OnQubW9kZWwua2V5LGN1cnZlTnVtYmVyOnV9O3UhPT1BJiYoYz9kLmhvdmVyKGgpOmQudW5ob3ZlciYmZC51bmhvdmVyKGgpLEE9dSl9fSksay5zdHlsZShcIm9wYWNpdHlcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5waWNrPy4wMToxfSksZS5zdHlsZShcImJhY2tncm91bmRcIixcInJnYmEoMjU1LCAyNTUsIDI1NSwgMClcIik7dmFyIFQ9ZS5zZWxlY3RBbGwoXCIuXCIraC5jbi5wYXJjb29yZHMpLmRhdGEodyxsKTtULmV4aXQoKS5yZW1vdmUoKSxULmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKGguY24ucGFyY29vcmRzLCEwKS5zdHlsZShcInNoYXBlLXJlbmRlcmluZ1wiLFwiY3Jpc3BFZGdlc1wiKS5zdHlsZShcInBvaW50ZXItZXZlbnRzXCIsXCJub25lXCIpLFQuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKFwiK3QubW9kZWwudHJhbnNsYXRlWCtcIixcIit0Lm1vZGVsLnRyYW5zbGF0ZVkrXCIpXCJ9KTt2YXIgTT1ULnNlbGVjdEFsbChcIi5cIitoLmNuLnBhcmNvb3Jkc0NvbnRyb2xWaWV3KS5kYXRhKGMsbCk7TS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChoLmNuLnBhcmNvb3Jkc0NvbnRyb2xWaWV3LCEwKSxNLmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXtyZXR1cm5cInRyYW5zbGF0ZShcIit0Lm1vZGVsLnBhZC5sK1wiLFwiK3QubW9kZWwucGFkLnQrXCIpXCJ9KTt2YXIgUz1NLnNlbGVjdEFsbChcIi5cIitoLmNuLnlBeGlzKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpbWVuc2lvbnN9LGwpO2Z1bmN0aW9uIEUodCxlKXtmb3IodmFyIHI9ZS5wYW5lbHN8fChlLnBhbmVscz1bXSksbj10LmRhdGEoKSxpPW4ubGVuZ3RoLTEsYT0wO2E8aTthKyspe3ZhciBvPXJbYV18fChyW2FdPXt9KSxzPW5bYV0sbD1uW2ErMV07by5kaW0xPXMsby5kaW0yPWwsby5jYW52YXNYPXMuY2FudmFzWCxvLnBhbmVsU2l6ZVg9bC5jYW52YXNYLXMuY2FudmFzWCxvLnBhbmVsU2l6ZVk9ZS5tb2RlbC5jYW52YXNIZWlnaHQsby55PTAsby5jYW52YXNZPTB9fVMuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoaC5jbi55QXhpcywhMCksTS5lYWNoKGZ1bmN0aW9uKHQpe0UoUyx0KX0pLGsuZWFjaChmdW5jdGlvbih0KXtpZih0LnZpZXdNb2RlbCl7IXQubGluZUxheWVyfHxkP3QubGluZUxheWVyPXAodGhpcyx0KTp0LmxpbmVMYXllci51cGRhdGUodCksKHQua2V5fHwwPT09dC5rZXkpJiYodC52aWV3TW9kZWxbdC5rZXldPXQubGluZUxheWVyKTt2YXIgZT0hdC5jb250ZXh0fHxkO3QubGluZUxheWVyLnJlbmRlcih0LnZpZXdNb2RlbC5wYW5lbHMsZSl9fSksUy5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrdC54U2NhbGUodC54SW5kZXgpK1wiLCAwKVwifSksUy5jYWxsKG4uYmVoYXZpb3IuZHJhZygpLm9yaWdpbihmdW5jdGlvbih0KXtyZXR1cm4gdH0pLm9uKFwiZHJhZ1wiLGZ1bmN0aW9uKHQpe3ZhciBlPXQucGFyZW50O18ubGluZVBpY2tBY3RpdmUoITEpLHQueD1NYXRoLm1heCgtaC5vdmVyZHJhZyxNYXRoLm1pbih0Lm1vZGVsLndpZHRoK2gub3ZlcmRyYWcsbi5ldmVudC54KSksdC5jYW52YXNYPXQueCp0Lm1vZGVsLmNhbnZhc1BpeGVsUmF0aW8sUy5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueC1lLnh9KS5lYWNoKGZ1bmN0aW9uKGUscil7ZS54SW5kZXg9cixlLng9dD09PWU/ZS54OmUueFNjYWxlKGUueEluZGV4KSxlLmNhbnZhc1g9ZS54KmUubW9kZWwuY2FudmFzUGl4ZWxSYXRpb30pLEUoUyxlKSxTLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gMCE9PU1hdGguYWJzKHQueEluZGV4LWUueEluZGV4KX0pLmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXtyZXR1cm5cInRyYW5zbGF0ZShcIit0LnhTY2FsZSh0LnhJbmRleCkrXCIsIDApXCJ9KSxuLnNlbGVjdCh0aGlzKS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrdC54K1wiLCAwKVwiKSxTLmVhY2goZnVuY3Rpb24ocixuLGkpe2k9PT10LnBhcmVudC5rZXkmJihlLmRpbWVuc2lvbnNbbl09cil9KSxlLmNvbnRleHRMYXllciYmZS5jb250ZXh0TGF5ZXIucmVuZGVyKGUucGFuZWxzLCExLCF2KGUpKSxlLmZvY3VzTGF5ZXIucmVuZGVyJiZlLmZvY3VzTGF5ZXIucmVuZGVyKGUucGFuZWxzKX0pLm9uKFwiZHJhZ2VuZFwiLGZ1bmN0aW9uKHQpe3ZhciBlPXQucGFyZW50O3QueD10LnhTY2FsZSh0LnhJbmRleCksdC5jYW52YXNYPXQueCp0Lm1vZGVsLmNhbnZhc1BpeGVsUmF0aW8sRShTLGUpLG4uc2VsZWN0KHRoaXMpLmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXtyZXR1cm5cInRyYW5zbGF0ZShcIit0LngrXCIsIDApXCJ9KSxlLmNvbnRleHRMYXllciYmZS5jb250ZXh0TGF5ZXIucmVuZGVyKGUucGFuZWxzLCExLCF2KGUpKSxlLmZvY3VzTGF5ZXImJmUuZm9jdXNMYXllci5yZW5kZXIoZS5wYW5lbHMpLGUucGlja0xheWVyJiZlLnBpY2tMYXllci5yZW5kZXIoZS5wYW5lbHMsITApLF8ubGluZVBpY2tBY3RpdmUoITApLGQmJmQuYXhlc01vdmVkJiZkLmF4ZXNNb3ZlZChlLmtleSxlLmRpbWVuc2lvbnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNyb3NzZmlsdGVyRGltZW5zaW9uSW5kZXh9KSl9KSksUy5leGl0KCkucmVtb3ZlKCk7dmFyIEM9Uy5zZWxlY3RBbGwoXCIuXCIraC5jbi5heGlzT3ZlcmxheXMpLmRhdGEoYyxsKTtDLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKGguY24uYXhpc092ZXJsYXlzLCEwKSxDLnNlbGVjdEFsbChcIi5cIitoLmNuLmF4aXMpLnJlbW92ZSgpO3ZhciBMPUMuc2VsZWN0QWxsKFwiLlwiK2guY24uYXhpcykuZGF0YShjLGwpO0wuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoaC5jbi5heGlzLCEwKSxMLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5tb2RlbC5oZWlnaHQvdC5tb2RlbC50aWNrRGlzdGFuY2Uscj10LmRvbWFpblNjYWxlLGk9ci5kb21haW4oKTtuLnNlbGVjdCh0aGlzKS5jYWxsKG4uc3ZnLmF4aXMoKS5vcmllbnQoXCJsZWZ0XCIpLnRpY2tTaXplKDQpLm91dGVyVGlja1NpemUoMikudGlja3MoZSx0LnRpY2tGb3JtYXQpLnRpY2tWYWx1ZXModC5vcmRpbmFsP2k6bnVsbCkudGlja0Zvcm1hdCh0Lm9yZGluYWw/ZnVuY3Rpb24odCl7cmV0dXJuIHR9Om51bGwpLnNjYWxlKHIpKSxhLmZvbnQoTC5zZWxlY3RBbGwoXCJ0ZXh0XCIpLHQubW9kZWwudGlja0ZvbnQpfSksTC5zZWxlY3RBbGwoXCIuZG9tYWluLCAudGljaz5saW5lXCIpLmF0dHIoXCJmaWxsXCIsXCJub25lXCIpLmF0dHIoXCJzdHJva2VcIixcImJsYWNrXCIpLmF0dHIoXCJzdHJva2Utb3BhY2l0eVwiLC4yNSkuYXR0cihcInN0cm9rZS13aWR0aFwiLFwiMXB4XCIpLEwuc2VsZWN0QWxsKFwidGV4dFwiKS5zdHlsZShcInRleHQtc2hhZG93XCIsXCIxcHggMXB4IDFweCAjZmZmLCAtMXB4IC0xcHggMXB4ICNmZmYsIDFweCAtMXB4IDFweCAjZmZmLCAtMXB4IDFweCAxcHggI2ZmZlwiKS5zdHlsZShcImN1cnNvclwiLFwiZGVmYXVsdFwiKS5zdHlsZShcInVzZXItc2VsZWN0XCIsXCJub25lXCIpO3ZhciB6PUMuc2VsZWN0QWxsKFwiLlwiK2guY24uYXhpc0hlYWRpbmcpLmRhdGEoYyxsKTt6LmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKGguY24uYXhpc0hlYWRpbmcsITApO3ZhciBPPXouc2VsZWN0QWxsKFwiLlwiK2guY24uYXhpc1RpdGxlKS5kYXRhKGMsbCk7Ty5lbnRlcigpLmFwcGVuZChcInRleHRcIikuY2xhc3NlZChoLmNuLmF4aXNUaXRsZSwhMCkuYXR0cihcInRleHQtYW5jaG9yXCIsXCJtaWRkbGVcIikuc3R5bGUoXCJjdXJzb3JcIixcImV3LXJlc2l6ZVwiKS5zdHlsZShcInVzZXItc2VsZWN0XCIsXCJub25lXCIpLnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixcImF1dG9cIiksTy5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoMCxcIistaC5heGlzVGl0bGVPZmZzZXQrXCIpXCIpLnRleHQoZnVuY3Rpb24odCl7cmV0dXJuIHQubGFiZWx9KS5lYWNoKGZ1bmN0aW9uKHQpe2EuZm9udChuLnNlbGVjdCh0aGlzKSx0Lm1vZGVsLmxhYmVsRm9udCl9KTt2YXIgST1DLnNlbGVjdEFsbChcIi5cIitoLmNuLmF4aXNFeHRlbnQpLmRhdGEoYyxsKTtJLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKGguY24uYXhpc0V4dGVudCwhMCk7dmFyIEQ9SS5zZWxlY3RBbGwoXCIuXCIraC5jbi5heGlzRXh0ZW50VG9wKS5kYXRhKGMsbCk7RC5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChoLmNuLmF4aXNFeHRlbnRUb3AsITApLEQuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKDAsXCIrLWguYXhpc0V4dGVudE9mZnNldCtcIilcIik7dmFyIFA9RC5zZWxlY3RBbGwoXCIuXCIraC5jbi5heGlzRXh0ZW50VG9wVGV4dCkuZGF0YShjLGwpO2Z1bmN0aW9uIFIodCxlKXtpZih0Lm9yZGluYWwpcmV0dXJuXCJcIjt2YXIgcj10LmRvbWFpblNjYWxlLmRvbWFpbigpO3JldHVybiBuLmZvcm1hdCh0LnRpY2tGb3JtYXQpKHJbZT9yLmxlbmd0aC0xOjBdKX1QLmVudGVyKCkuYXBwZW5kKFwidGV4dFwiKS5jbGFzc2VkKGguY24uYXhpc0V4dGVudFRvcFRleHQsITApLmNhbGwoeCksUC50ZXh0KGZ1bmN0aW9uKHQpe3JldHVybiBSKHQsITApfSkuZWFjaChmdW5jdGlvbih0KXthLmZvbnQobi5zZWxlY3QodGhpcyksdC5tb2RlbC5yYW5nZUZvbnQpfSk7dmFyIEY9SS5zZWxlY3RBbGwoXCIuXCIraC5jbi5heGlzRXh0ZW50Qm90dG9tKS5kYXRhKGMsbCk7Ri5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChoLmNuLmF4aXNFeHRlbnRCb3R0b20sITApLEYuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKDAsXCIrKHQubW9kZWwuaGVpZ2h0K2guYXhpc0V4dGVudE9mZnNldCkrXCIpXCJ9KTt2YXIgQj1GLnNlbGVjdEFsbChcIi5cIitoLmNuLmF4aXNFeHRlbnRCb3R0b21UZXh0KS5kYXRhKGMsbCk7Qi5lbnRlcigpLmFwcGVuZChcInRleHRcIikuY2xhc3NlZChoLmNuLmF4aXNFeHRlbnRCb3R0b21UZXh0LCEwKS5hdHRyKFwiZHlcIixcIjAuNzVlbVwiKS5jYWxsKHgpLEIudGV4dChmdW5jdGlvbih0KXtyZXR1cm4gUih0KX0pLmVhY2goZnVuY3Rpb24odCl7YS5mb250KG4uc2VsZWN0KHRoaXMpLHQubW9kZWwucmFuZ2VGb250KX0pLGYuZW5zdXJlQXhpc0JydXNoKEMpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlXCI6NTkwLFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2d1cFwiOjY5OSxcIi4vYXhpc2JydXNoXCI6MTAxNixcIi4vY29uc3RhbnRzXCI6MTAxOSxcIi4vbGluZXNcIjoxMDIyLGQzOjE1NX1dLDEwMjU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9wYXJjb29yZHNcIiksaT10KFwiLi4vLi4vbGliL3ByZXBhcmVfcmVnbFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LGE9ci5fdG9wcGFwZXIsbz1yLl9wYXBlcmRpdixzPXIuX2dsY29udGFpbmVyO2lmKGkodCkpe3ZhciBsPXt9LGM9e30sdT17fSxoPXt9LGY9ci5fc2l6ZTtlLmZvckVhY2goZnVuY3Rpb24oZSxyKXt2YXIgbj1lWzBdLnRyYWNlO3Vbcl09bi5pbmRleDt2YXIgaT1oW3JdPW4uX2Z1bGxJbnB1dC5pbmRleDtsW3JdPXQuZGF0YVtpXS5kaW1lbnNpb25zLGNbcl09dC5kYXRhW2ldLmRpbWVuc2lvbnMuc2xpY2UoKX0pO24obyxhLHMsZSx7d2lkdGg6Zi53LGhlaWdodDpmLmgsbWFyZ2luOnt0OmYudCxyOmYucixiOmYuYixsOmYubH19LHtmaWx0ZXJDaGFuZ2VkOmZ1bmN0aW9uKGUsbixpKXt2YXIgYT1jW2VdW25dLG89aS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoKX0pLHM9XCJkaW1lbnNpb25zW1wiK24rXCJdLmNvbnN0cmFpbnRyYW5nZVwiLGw9ci5fdHJhY2VQcmVHVUlbdC5fZnVsbERhdGFbdVtlXV0uX2Z1bGxJbnB1dC51aWRdO2lmKHZvaWQgMD09PWxbc10pe3ZhciBmPWEuY29uc3RyYWludHJhbmdlO2xbc109Znx8bnVsbH12YXIgcD10Ll9mdWxsRGF0YVt1W2VdXS5kaW1lbnNpb25zW25dO28ubGVuZ3RoPygxPT09by5sZW5ndGgmJihvPW9bMF0pLGEuY29uc3RyYWludHJhbmdlPW8scC5jb25zdHJhaW50cmFuZ2U9by5zbGljZSgpLG89W29dKTooZGVsZXRlIGEuY29uc3RyYWludHJhbmdlLGRlbGV0ZSBwLmNvbnN0cmFpbnRyYW5nZSxvPW51bGwpO3ZhciBkPXt9O2Rbc109byx0LmVtaXQoXCJwbG90bHlfcmVzdHlsZVwiLFtkLFtoW2VdXV0pfSxob3ZlcjpmdW5jdGlvbihlKXt0LmVtaXQoXCJwbG90bHlfaG92ZXJcIixlKX0sdW5ob3ZlcjpmdW5jdGlvbihlKXt0LmVtaXQoXCJwbG90bHlfdW5ob3ZlclwiLGUpfSxheGVzTW92ZWQ6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKHQpe3JldHVybiEoXCJ2aXNpYmxlXCJpbiB0KXx8dC52aXNpYmxlfWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuPWUuaW5kZXhPZihyKSxpPXQuaW5kZXhPZihuKTtyZXR1cm4tMT09PWkmJihpKz1lLmxlbmd0aCksaX12YXIgYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gaShyLHQsZSktaShyLHQsbil9fShjW2VdLmZpbHRlcihuKSk7bFtlXS5zb3J0KGEpLGNbZV0uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiFuKHQpfSkuc29ydChmdW5jdGlvbih0KXtyZXR1cm4gY1tlXS5pbmRleE9mKHQpfSkuZm9yRWFjaChmdW5jdGlvbih0KXtsW2VdLnNwbGljZShsW2VdLmluZGV4T2YodCksMSksbFtlXS5zcGxpY2UoY1tlXS5pbmRleE9mKHQpLDAsdCl9KSx0LmVtaXQoXCJwbG90bHlfcmVzdHlsZVwiLFt7ZGltZW5zaW9uczpbbFtlXV19LFtoW2VdXV0pfX0pfX19LHtcIi4uLy4uL2xpYi9wcmVwYXJlX3JlZ2xcIjo3MTQsXCIuL3BhcmNvb3Jkc1wiOjEwMjR9XSwxMDI2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9wbG90cy9kb21haW5cIikuYXR0cmlidXRlcyxsPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsYz1pKHtlZGl0VHlwZTpcImNhbGNcIixhcnJheU9rOiEwLGNvbG9yRWRpdFR5cGU6XCJwbG90XCJ9KTtlLmV4cG9ydHM9e2xhYmVsczp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sbGFiZWwwOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifSxkbGFiZWw6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjEsZWRpdFR5cGU6XCJjYWxjXCJ9LHZhbHVlczp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sbWFya2VyOntjb2xvcnM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0Om4uZGVmYXVsdExpbmUsYXJyYXlPazohMCxlZGl0VHlwZTpcInN0eWxlXCJ9LHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDowLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJzdHlsZVwifSxlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LHRleHQ6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGhvdmVydGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixhcnJheU9rOiEwLGVkaXRUeXBlOlwic3R5bGVcIn0sc2NhbGVncm91cDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcImNhbGNcIn0sdGV4dGluZm86e3ZhbFR5cGU6XCJmbGFnbGlzdFwiLGZsYWdzOltcImxhYmVsXCIsXCJ0ZXh0XCIsXCJ2YWx1ZVwiLFwicGVyY2VudFwiXSxleHRyYXM6W1wibm9uZVwiXSxlZGl0VHlwZTpcImNhbGNcIn0saG92ZXJpbmZvOmwoe30sYS5ob3ZlcmluZm8se2ZsYWdzOltcImxhYmVsXCIsXCJ0ZXh0XCIsXCJ2YWx1ZVwiLFwicGVyY2VudFwiLFwibmFtZVwiXX0pLGhvdmVydGVtcGxhdGU6byh7fSx7a2V5czpbXCJsYWJlbFwiLFwiY29sb3JcIixcInZhbHVlXCIsXCJwZXJjZW50XCIsXCJ0ZXh0XCJdfSksdGV4dHBvc2l0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJpbnNpZGVcIixcIm91dHNpZGVcIixcImF1dG9cIixcIm5vbmVcIl0sZGZsdDpcImF1dG9cIixhcnJheU9rOiEwLGVkaXRUeXBlOlwiY2FsY1wifSx0ZXh0Zm9udDpsKHt9LGMse30pLGluc2lkZXRleHRmb250Omwoe30sYyx7fSksb3V0c2lkZXRleHRmb250Omwoe30sYyx7fSksdGl0bGU6e3RleHQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGZvbnQ6bCh7fSxjLHt9KSxwb3NpdGlvbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1widG9wIGxlZnRcIixcInRvcCBjZW50ZXJcIixcInRvcCByaWdodFwiLFwibWlkZGxlIGNlbnRlclwiLFwiYm90dG9tIGxlZnRcIixcImJvdHRvbSBjZW50ZXJcIixcImJvdHRvbSByaWdodFwiXSxlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LGRvbWFpbjpzKHtuYW1lOlwicGllXCIsdHJhY2U6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9KSxob2xlOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifSxzb3J0Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LGRpcmVjdGlvbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiY2xvY2t3aXNlXCIsXCJjb3VudGVyY2xvY2t3aXNlXCJdLGRmbHQ6XCJjb3VudGVyY2xvY2t3aXNlXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHJvdGF0aW9uOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOi0zNjAsbWF4OjM2MCxkZmx0OjAsZWRpdFR5cGU6XCJjYWxjXCJ9LHB1bGw6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjAsYXJyYXlPazohMCxlZGl0VHlwZTpcImNhbGNcIn0sX2RlcHJlY2F0ZWQ6e3RpdGxlOnt2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwiY2FsY1wifSx0aXRsZWZvbnQ6bCh7fSxjLHt9KSx0aXRsZXBvc2l0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ0b3AgbGVmdFwiLFwidG9wIGNlbnRlclwiLFwidG9wIHJpZ2h0XCIsXCJtaWRkbGUgY2VudGVyXCIsXCJib3R0b20gbGVmdFwiLFwiYm90dG9tIGNlbnRlclwiLFwiYm90dG9tIHJpZ2h0XCJdLGVkaXRUeXBlOlwiY2FsY1wifX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXNcIjo1NzcsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi4vLi4vcGxvdHMvZG9tYWluXCI6Nzc0LFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCI6Nzc1fV0sMTAyNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxpPXQoXCIuLi8uLi9wbG90cy9nZXRfZGF0YVwiKS5nZXRNb2R1bGVDYWxjRGF0YTtyLm5hbWU9XCJwaWVcIixyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9bi5nZXRNb2R1bGUoXCJwaWVcIikscj1pKHQuY2FsY2RhdGEsZSlbMF07ZS5wbG90KHQscil9LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5faGFzJiZuLl9oYXMoXCJwaWVcIiksYT1lLl9oYXMmJmUuX2hhcyhcInBpZVwiKTtpJiYhYSYmbi5fcGllbGF5ZXIuc2VsZWN0QWxsKFwiZy50cmFjZVwiKS5yZW1vdmUoKX19LHtcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCI6Nzg0LFwiLi4vLi4vcmVnaXN0cnlcIjo4Mjl9XSwxMDI4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL2xpYlwiKS5pc0FycmF5T3JUeXBlZEFycmF5LGE9dChcInRpbnljb2xvcjJcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxzPXQoXCIuL2hlbHBlcnNcIiksbD17fTtmdW5jdGlvbiBjKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVybiEhZSYmKCEhKGU9YShlKSkuaXNWYWxpZCgpJiYoZT1vLmFkZE9wYWNpdHkoZSxlLmdldEFscGhhKCkpLHRbcl18fCh0W3JdPWUpLGUpKX19ZnVuY3Rpb24gdSh0LGUpe3ZhciByLG49SlNPTi5zdHJpbmdpZnkodCksaT1lW25dO2lmKCFpKXtmb3IoaT10LnNsaWNlKCkscj0wO3I8dC5sZW5ndGg7cisrKWkucHVzaChhKHRbcl0pLmxpZ2h0ZW4oMjApLnRvSGV4U3RyaW5nKCkpO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspaS5wdXNoKGEodFtyXSkuZGFya2VuKDIwKS50b0hleFN0cmluZygpKTtlW25dPWl9cmV0dXJuIGl9ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLGwsdSxoPWUudmFsdWVzLGY9aShoKSYmaC5sZW5ndGgscD1lLmxhYmVscyxkPWUubWFya2VyLmNvbG9yc3x8W10sZz1bXSx2PXQuX2Z1bGxMYXlvdXQsbT17fSx5PTAseD12LmhpZGRlbmxhYmVsc3x8W107aWYoZS5kbGFiZWwpZm9yKHA9bmV3IEFycmF5KGgubGVuZ3RoKSxyPTA7cjxoLmxlbmd0aDtyKyspcFtyXT1TdHJpbmcoZS5sYWJlbDArciplLmRsYWJlbCk7dmFyIGI9Yyh2Ll9waWVjb2xvcm1hcCksXz0oZj9oOnApLmxlbmd0aDtmb3Iocj0wO3I8XztyKyspe2lmKGYpe2lmKGE9aFtyXSwhbihhKSljb250aW51ZTtpZigoYT0rYSk8MCljb250aW51ZX1lbHNlIGE9MTt2b2lkIDAhPT0obz1wW3JdKSYmXCJcIiE9PW98fChvPXIpO3ZhciB3PW1bbz1TdHJpbmcobyldO3ZvaWQgMD09PXc/KG1bb109Zy5sZW5ndGgsKGw9LTEhPT14LmluZGV4T2YobykpfHwoeSs9YSksZy5wdXNoKHt2OmEsbGFiZWw6byxjb2xvcjpiKGRbcl0sbyksaTpyLHB0czpbcl0saGlkZGVuOmx9KSk6KCh1PWdbd10pLnYrPWEsdS5wdHMucHVzaChyKSx1LmhpZGRlbnx8KHkrPWEpLCExPT09dS5jb2xvciYmZFtyXSYmKHUuY29sb3I9YihkW3JdLG8pKSl9aWYoZS5zb3J0JiZnLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS52LXQudn0pLGdbMF0mJihnWzBdLnZUb3RhbD15KSxlLnRleHRpbmZvJiZcIm5vbmVcIiE9PWUudGV4dGluZm8pe3ZhciBrLEE9LTEhPT1lLnRleHRpbmZvLmluZGV4T2YoXCJsYWJlbFwiKSxUPS0xIT09ZS50ZXh0aW5mby5pbmRleE9mKFwidGV4dFwiKSxNPS0xIT09ZS50ZXh0aW5mby5pbmRleE9mKFwidmFsdWVcIiksUz0tMSE9PWUudGV4dGluZm8uaW5kZXhPZihcInBlcmNlbnRcIiksRT12LnNlcGFyYXRvcnM7Zm9yKHI9MDtyPGcubGVuZ3RoO3IrKyl7aWYodT1nW3JdLGs9QT9bdS5sYWJlbF06W10sVCl7dmFyIEM9cy5nZXRGaXJzdEZpbGxlZChlLnRleHQsdS5wdHMpO0MmJmsucHVzaChDKX1NJiZrLnB1c2gocy5mb3JtYXRQaWVWYWx1ZSh1LnYsRSkpLFMmJmsucHVzaChzLmZvcm1hdFBpZVBlcmNlbnQodS52L3ksRSkpLHUudGV4dD1rLmpvaW4oXCI8YnI+XCIpfX1yZXR1cm4gZ30sY3Jvc3NUcmFjZUNhbGM6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsbj1lLnBpZWNvbG9yd2F5LGk9ZS5fcGllY29sb3JtYXA7ZS5leHRlbmRwaWVjb2xvcnMmJihuPXUobixsKSk7Zm9yKHZhciBhPTAsbz0wO288ci5sZW5ndGg7bysrKXt2YXIgcz1yW29dO2lmKFwicGllXCI9PT1zWzBdLnRyYWNlLnR5cGUpZm9yKHZhciBjPTA7YzxzLmxlbmd0aDtjKyspe3ZhciBoPXNbY107ITE9PT1oLmNvbG9yJiYoaVtoLmxhYmVsXT9oLmNvbG9yPWlbaC5sYWJlbF06KGlbaC5sYWJlbF09aC5jb2xvcj1uW2Elbi5sZW5ndGhdLGErKykpfX19LG1ha2VQdWxsQ29sb3JGbjpjLGdlbmVyYXRlRXh0ZW5kZWRDb2xvcnM6dX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuL2hlbHBlcnNcIjoxMDMxLFwiZmFzdC1pc251bWVyaWNcIjoyMjIsdGlueWNvbG9yMjo1MjJ9XSwxMDI5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vcGxvdHMvZG9tYWluXCIpLmRlZmF1bHRzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9dmFyIGwsYz1uLmNvZXJjZUZvbnQsdT1zKFwidmFsdWVzXCIpLGg9bi5pc0FycmF5T3JUeXBlZEFycmF5KHUpLGY9cyhcImxhYmVsc1wiKTtpZihBcnJheS5pc0FycmF5KGYpPyhsPWYubGVuZ3RoLGgmJihsPU1hdGgubWluKGwsdS5sZW5ndGgpKSk6aCYmKGw9dS5sZW5ndGgscyhcImxhYmVsMFwiKSxzKFwiZGxhYmVsXCIpKSxsKXtlLl9sZW5ndGg9bCxzKFwibWFya2VyLmxpbmUud2lkdGhcIikmJnMoXCJtYXJrZXIubGluZS5jb2xvclwiKSxzKFwibWFya2VyLmNvbG9yc1wiKSxzKFwic2NhbGVncm91cFwiKTt2YXIgcD1zKFwidGV4dFwiKSxkPXMoXCJ0ZXh0aW5mb1wiLEFycmF5LmlzQXJyYXkocCk/XCJ0ZXh0K3BlcmNlbnRcIjpcInBlcmNlbnRcIik7aWYocyhcImhvdmVydGV4dFwiKSxzKFwiaG92ZXJ0ZW1wbGF0ZVwiKSxkJiZcIm5vbmVcIiE9PWQpe3ZhciBnPXMoXCJ0ZXh0cG9zaXRpb25cIiksdj1BcnJheS5pc0FycmF5KGcpfHxcImF1dG9cIj09PWcsbT12fHxcImluc2lkZVwiPT09Zyx5PXZ8fFwib3V0c2lkZVwiPT09ZztpZihtfHx5KXt2YXIgeD1jKHMsXCJ0ZXh0Zm9udFwiLG8uZm9udCk7aWYobSl7dmFyIGI9bi5leHRlbmRGbGF0KHt9LHgpOyEodC50ZXh0Zm9udCYmdC50ZXh0Zm9udC5jb2xvcikmJmRlbGV0ZSBiLmNvbG9yLGMocyxcImluc2lkZXRleHRmb250XCIsYil9eSYmYyhzLFwib3V0c2lkZXRleHRmb250XCIseCl9fWEoZSxvLHMpO3ZhciBfPXMoXCJob2xlXCIpO2lmKHMoXCJ0aXRsZS50ZXh0XCIpKXt2YXIgdz1zKFwidGl0bGUucG9zaXRpb25cIixfP1wibWlkZGxlIGNlbnRlclwiOlwidG9wIGNlbnRlclwiKTtffHxcIm1pZGRsZSBjZW50ZXJcIiE9PXd8fChlLnRpdGxlLnBvc2l0aW9uPVwidG9wIGNlbnRlclwiKSxjKHMsXCJ0aXRsZS5mb250XCIsby5mb250KX1zKFwic29ydFwiKSxzKFwiZGlyZWN0aW9uXCIpLHMoXCJyb3RhdGlvblwiKSxzKFwicHVsbFwiKX1lbHNlIGUudmlzaWJsZT0hMX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2RvbWFpblwiOjc3NCxcIi4vYXR0cmlidXRlc1wiOjEwMjZ9XSwxMDMwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVyc1wiKS5hcHBlbmRBcnJheU11bHRpUG9pbnRWYWx1ZXM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e2N1cnZlTnVtYmVyOmUuaW5kZXgscG9pbnROdW1iZXJzOnQucHRzLGRhdGE6ZS5faW5wdXQsZnVsbERhdGE6ZSxsYWJlbDp0LmxhYmVsLGNvbG9yOnQuY29sb3IsdmFsdWU6dC52LHBlcmNlbnQ6dC5wZXJjZW50LHRleHQ6dC50ZXh0LHY6dC52fTtyZXR1cm4gMT09PXQucHRzLmxlbmd0aCYmKHIucG9pbnROdW1iZXI9ci5pPXQucHRzWzBdKSxuKHIsZSx0LnB0cykscn19LHtcIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVyc1wiOjYxM31dLDEwMzE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpO3IuZm9ybWF0UGllUGVyY2VudD1mdW5jdGlvbih0LGUpe3ZhciByPSgxMDAqdCkudG9QcmVjaXNpb24oMyk7cmV0dXJuLTEhPT1yLmxhc3RJbmRleE9mKFwiLlwiKSYmKHI9ci5yZXBsYWNlKC9bLl0/MCskLyxcIlwiKSksbi5udW1TZXBhcmF0ZShyLGUpK1wiJVwifSxyLmZvcm1hdFBpZVZhbHVlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC50b1ByZWNpc2lvbigxMCk7cmV0dXJuLTEhPT1yLmxhc3RJbmRleE9mKFwiLlwiKSYmKHI9ci5yZXBsYWNlKC9bLl0/MCskLyxcIlwiKSksbi5udW1TZXBhcmF0ZShyLGUpfSxyLmdldEZpcnN0RmlsbGVkPWZ1bmN0aW9uKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49dFtlW3JdXTtpZihufHwwPT09bilyZXR1cm4gbn19LHIuY2FzdE9wdGlvbj1mdW5jdGlvbih0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3IuZ2V0Rmlyc3RGaWxsZWQodCxlKTp0fHx2b2lkIDB9fSx7XCIuLi8uLi9saWJcIjo3MDF9XSwxMDMyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLnN1cHBseUxheW91dERlZmF1bHRzPXQoXCIuL2xheW91dF9kZWZhdWx0c1wiKSxuLmxheW91dEF0dHJpYnV0ZXM9dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIik7dmFyIGk9dChcIi4vY2FsY1wiKTtuLmNhbGM9aS5jYWxjLG4uY3Jvc3NUcmFjZUNhbGM9aS5jcm9zc1RyYWNlQ2FsYyxuLnBsb3Q9dChcIi4vcGxvdFwiKS5wbG90LG4uc3R5bGU9dChcIi4vc3R5bGVcIiksbi5zdHlsZU9uZT10KFwiLi9zdHlsZV9vbmVcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJwaWVcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuL2Jhc2VfcGxvdFwiKSxuLmNhdGVnb3JpZXM9W1wicGllXCIsXCJzaG93TGVnZW5kXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi9hdHRyaWJ1dGVzXCI6MTAyNixcIi4vYmFzZV9wbG90XCI6MTAyNyxcIi4vY2FsY1wiOjEwMjgsXCIuL2RlZmF1bHRzXCI6MTAyOSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjoxMDMzLFwiLi9sYXlvdXRfZGVmYXVsdHNcIjoxMDM0LFwiLi9wbG90XCI6MTAzNSxcIi4vc3R5bGVcIjoxMDM2LFwiLi9zdHlsZV9vbmVcIjoxMDM3fV0sMTAzMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17aGlkZGVubGFiZWxzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxwaWVjb2xvcndheTp7dmFsVHlwZTpcImNvbG9ybGlzdFwiLGVkaXRUeXBlOlwiY2FsY1wifSxleHRlbmRwaWVjb2xvcnM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcImNhbGNcIn19fSx7fV0sMTAzNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9cihcImhpZGRlbmxhYmVsc1wiKSxyKFwicGllY29sb3J3YXlcIixlLmNvbG9yd2F5KSxyKFwiZXh0ZW5kcGllY29sb3JzXCIpfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjEwMzN9XSwxMDM1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIikscz10KFwiLi4vLi4vbGliXCIpLGw9dChcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiKSxjPXQoXCIuL2hlbHBlcnNcIiksdT10KFwiLi9ldmVudF9kYXRhXCIpO2Z1bmN0aW9uIGgodCxlLHIpe3ZhciBhPXJbMF0sbz1hLnRyYWNlLHM9YS5jeCxsPWEuY3k7XCJfaGFzSG92ZXJMYWJlbFwiaW4gb3x8KG8uX2hhc0hvdmVyTGFiZWw9ITEpLFwiX2hhc0hvdmVyRXZlbnRcImluIG98fChvLl9oYXNIb3ZlckV2ZW50PSExKSx0Lm9uKFwibW91c2VvdmVyXCIsZnVuY3Rpb24odCl7dmFyIHI9ZS5fZnVsbExheW91dCxoPWUuX2Z1bGxEYXRhW28uaW5kZXhdO2lmKCFlLl9kcmFnZ2luZyYmITEhPT1yLmhvdmVybW9kZSl7dmFyIGY9aC5ob3ZlcmluZm87aWYoQXJyYXkuaXNBcnJheShmKSYmKGY9aS5jYXN0SG92ZXJpbmZvKHtob3ZlcmluZm86W2MuY2FzdE9wdGlvbihmLHQucHRzKV0sX21vZHVsZTpvLl9tb2R1bGV9LHIsMCkpLFwiYWxsXCI9PT1mJiYoZj1cImxhYmVsK3RleHQrdmFsdWUrcGVyY2VudCtuYW1lXCIpLGguaG92ZXJ0ZW1wbGF0ZXx8XCJub25lXCIhPT1mJiZcInNraXBcIiE9PWYmJmYpe3ZhciBwPXQuckluc2NyaWJlZCxkPXMrdC5weG1pZFswXSooMS1wKSxnPWwrdC5weG1pZFsxXSooMS1wKSx2PXIuc2VwYXJhdG9ycyxtPVtdO2lmKGYmJi0xIT09Zi5pbmRleE9mKFwibGFiZWxcIikmJm0ucHVzaCh0LmxhYmVsKSx0LnRleHQ9Yy5jYXN0T3B0aW9uKGguaG92ZXJ0ZXh0fHxoLnRleHQsdC5wdHMpLGYmJi0xIT09Zi5pbmRleE9mKFwidGV4dFwiKSl7dmFyIHk9dC50ZXh0O3kmJm0ucHVzaCh5KX10LnZhbHVlPXQudix0LnZhbHVlTGFiZWw9Yy5mb3JtYXRQaWVWYWx1ZSh0LnYsdiksZiYmLTEhPT1mLmluZGV4T2YoXCJ2YWx1ZVwiKSYmbS5wdXNoKHQudmFsdWVMYWJlbCksdC5wZXJjZW50PXQudi9hLnZUb3RhbCx0LnBlcmNlbnRMYWJlbD1jLmZvcm1hdFBpZVBlcmNlbnQodC5wZXJjZW50LHYpLGYmJi0xIT09Zi5pbmRleE9mKFwicGVyY2VudFwiKSYmbS5wdXNoKHQucGVyY2VudExhYmVsKTt2YXIgeD1oLmhvdmVybGFiZWwsYj14LmZvbnQ7aS5sb25lSG92ZXIoe3RyYWNlOm8seDA6ZC1wKmEucix4MTpkK3AqYS5yLHk6Zyx0ZXh0Om0uam9pbihcIjxicj5cIiksbmFtZTpoLmhvdmVydGVtcGxhdGV8fC0xIT09Zi5pbmRleE9mKFwibmFtZVwiKT9oLm5hbWU6dm9pZCAwLGlkZWFsQWxpZ246dC5weG1pZFswXTwwP1wibGVmdFwiOlwicmlnaHRcIixjb2xvcjpjLmNhc3RPcHRpb24oeC5iZ2NvbG9yLHQucHRzKXx8dC5jb2xvcixib3JkZXJDb2xvcjpjLmNhc3RPcHRpb24oeC5ib3JkZXJjb2xvcix0LnB0cyksZm9udEZhbWlseTpjLmNhc3RPcHRpb24oYi5mYW1pbHksdC5wdHMpLGZvbnRTaXplOmMuY2FzdE9wdGlvbihiLnNpemUsdC5wdHMpLGZvbnRDb2xvcjpjLmNhc3RPcHRpb24oYi5jb2xvcix0LnB0cyksbmFtZUxlbmd0aDpjLmNhc3RPcHRpb24oeC5uYW1lbGVuZ3RoLHQucHRzKSx0ZXh0QWxpZ246Yy5jYXN0T3B0aW9uKHguYWxpZ24sdC5wdHMpLGhvdmVydGVtcGxhdGU6Yy5jYXN0T3B0aW9uKGguaG92ZXJ0ZW1wbGF0ZSx0LnB0cyksaG92ZXJ0ZW1wbGF0ZUxhYmVsczp0LGV2ZW50RGF0YTpbdSh0LGgpXX0se2NvbnRhaW5lcjpyLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpyLl9wYXBlci5ub2RlKCksZ2Q6ZX0pLG8uX2hhc0hvdmVyTGFiZWw9ITB9by5faGFzSG92ZXJFdmVudD0hMCxlLmVtaXQoXCJwbG90bHlfaG92ZXJcIix7cG9pbnRzOlt1KHQsaCldLGV2ZW50Om4uZXZlbnR9KX19KSx0Lm9uKFwibW91c2VvdXRcIixmdW5jdGlvbih0KXt2YXIgcj1lLl9mdWxsTGF5b3V0LGE9ZS5fZnVsbERhdGFbby5pbmRleF0scz1uLnNlbGVjdCh0aGlzKS5kYXR1bSgpO28uX2hhc0hvdmVyRXZlbnQmJih0Lm9yaWdpbmFsRXZlbnQ9bi5ldmVudCxlLmVtaXQoXCJwbG90bHlfdW5ob3ZlclwiLHtwb2ludHM6W3UocyxhKV0sZXZlbnQ6bi5ldmVudH0pLG8uX2hhc0hvdmVyRXZlbnQ9ITEpLG8uX2hhc0hvdmVyTGFiZWwmJihpLmxvbmVVbmhvdmVyKHIuX2hvdmVybGF5ZXIubm9kZSgpKSxvLl9oYXNIb3ZlckxhYmVsPSExKX0pLHQub24oXCJjbGlja1wiLGZ1bmN0aW9uKHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQsYT1lLl9mdWxsRGF0YVtvLmluZGV4XTtlLl9kcmFnZ2luZ3x8ITE9PT1yLmhvdmVybW9kZXx8KGUuX2hvdmVyZGF0YT1bdSh0LGEpXSxpLmNsaWNrKGUsbi5ldmVudCkpfSl9ZnVuY3Rpb24gZih0LGUscil7dmFyIG49TWF0aC5zcXJ0KHQud2lkdGgqdC53aWR0aCt0LmhlaWdodCp0LmhlaWdodCksaT10LndpZHRoL3QuaGVpZ2h0LGE9ZS5oYWxmYW5nbGUsbz1lLnJpbmcscz1lLnJJbnNjcmliZWQsbD1yLnJ8fGUucnB4MSxjPXtzY2FsZTpzKmwqMi9uLHJDZW50ZXI6MS1zLHJvdGF0ZTowfTtpZihjLnNjYWxlPj0xKXJldHVybiBjO3ZhciB1PWkrMS8oMipNYXRoLnRhbihhKSksaD1sKk1hdGgubWluKDEvKE1hdGguc3FydCh1KnUrLjUpK3UpLG8vKE1hdGguc3FydChpKmkrby8yKStpKSksZj17c2NhbGU6MipoL3QuaGVpZ2h0LHJDZW50ZXI6TWF0aC5jb3MoaC9sKS1oKmkvbCxyb3RhdGU6KDE4MC9NYXRoLlBJKmUubWlkYW5nbGUrNzIwKSUxODAtOTB9LHA9MS9pLGQ9cCsxLygyKk1hdGgudGFuKGEpKSxnPWwqTWF0aC5taW4oMS8oTWF0aC5zcXJ0KGQqZCsuNSkrZCksby8oTWF0aC5zcXJ0KHAqcCtvLzIpK3ApKSx2PXtzY2FsZToyKmcvdC53aWR0aCxyQ2VudGVyOk1hdGguY29zKGcvbCktZy9pL2wscm90YXRlOigxODAvTWF0aC5QSSplLm1pZGFuZ2xlKzgxMCklMTgwLTkwfSxtPXYuc2NhbGU+Zi5zY2FsZT92OmY7cmV0dXJuIGMuc2NhbGU8MSYmbS5zY2FsZT5jLnNjYWxlP206Y31mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIHQudiE9PWUudlRvdGFsfHxlLnRyYWNlLmhvbGU/TWF0aC5taW4oMS8oMSsxL01hdGguc2luKHQuaGFsZmFuZ2xlKSksdC5yaW5nLzIpOjF9ZnVuY3Rpb24gZCh0LGUpe3ZhciByPWUucHhtaWRbMF0sbj1lLnB4bWlkWzFdLGk9dC53aWR0aC8yLGE9dC5oZWlnaHQvMjtyZXR1cm4gcjwwJiYoaSo9LTEpLG48MCYmKGEqPS0xKSx7c2NhbGU6MSxyQ2VudGVyOjEscm90YXRlOjAseDppK01hdGguYWJzKGEpKihpPjA/MTotMSkvMix5OmEvKDErcipyLyhuKm4pKSxvdXRzaWRlOiEwfX1mdW5jdGlvbiBnKHQsZSl7dmFyIHI9dC50cmFjZSxuPWUuaCooci5kb21haW4ueVsxXS1yLmRvbWFpbi55WzBdKTtyZXR1cm4gTWF0aC5taW4odC50aXRsZUJveC5oZWlnaHQsbi8yKX1mdW5jdGlvbiB2KHQpe3ZhciBlLHI9dC5wdWxsO2lmKEFycmF5LmlzQXJyYXkocikpZm9yKHI9MCxlPTA7ZTx0LnB1bGwubGVuZ3RoO2UrKyl0LnB1bGxbZV0+ciYmKHI9dC5wdWxsW2VdKTtyZXR1cm4gcn1lLmV4cG9ydHM9e3Bsb3Q6ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0OyFmdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLGk9ZS5fZnVsbExheW91dCxhPTA7YTx0Lmxlbmd0aDthKyspaWYocj10W2FdWzBdLChuPXIudHJhY2UpLnRpdGxlLnRleHQpe3ZhciBjPWkubWV0YT9zLnRlbXBsYXRlU3RyaW5nKG4udGl0bGUudGV4dCx7bWV0YTppLm1ldGF9KTpuLnRpdGxlLnRleHQsdT1vLnRlc3Rlci5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJkYXRhLW5vdGV4XCIsMSkudGV4dChjKS5jYWxsKG8uZm9udCxuLnRpdGxlLmZvbnQpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsZSksaD1vLmJCb3godS5ub2RlKCksITApO3IudGl0bGVCb3g9e3dpZHRoOmgud2lkdGgsaGVpZ2h0OmguaGVpZ2h0fSx1LnJlbW92ZSgpfX0oZSx0KSxmdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyxsLGMsdSxoPVtdO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspbz10W2ldWzBdLHM9by50cmFjZSxyPWUudyoocy5kb21haW4ueFsxXS1zLmRvbWFpbi54WzBdKSxuPWUuaCoocy5kb21haW4ueVsxXS1zLmRvbWFpbi55WzBdKSxzLnRpdGxlLnRleHQmJlwibWlkZGxlIGNlbnRlclwiIT09cy50aXRsZS5wb3NpdGlvbiYmKG4tPWcobyxlKSksbD12KHMpLG8ucj1NYXRoLm1pbihyLG4pLygyKzIqbCksby5jeD1lLmwrZS53KihzLmRvbWFpbi54WzFdK3MuZG9tYWluLnhbMF0pLzIsby5jeT1lLnQrZS5oKigxLXMuZG9tYWluLnlbMF0pLW4vMixzLnRpdGxlLnRleHQmJi0xIT09cy50aXRsZS5wb3NpdGlvbi5pbmRleE9mKFwiYm90dG9tXCIpJiYoby5jeS09ZyhvLGUpKSxzLnNjYWxlZ3JvdXAmJi0xPT09aC5pbmRleE9mKHMuc2NhbGVncm91cCkmJmgucHVzaChzLnNjYWxlZ3JvdXApO2ZvcihhPTA7YTxoLmxlbmd0aDthKyspe2Zvcih1PTEvMCxjPWhbYV0saT0wO2k8dC5sZW5ndGg7aSsrKShvPXRbaV1bMF0pLnRyYWNlLnNjYWxlZ3JvdXA9PT1jJiYodT1NYXRoLm1pbih1LG8ucipvLnIvby52VG90YWwpKTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKShvPXRbaV1bMF0pLnRyYWNlLnNjYWxlZ3JvdXA9PT1jJiYoby5yPU1hdGguc3FydCh1Km8udlRvdGFsKSl9fShlLHIuX3NpemUpO3ZhciBpPXMubWFrZVRyYWNlR3JvdXBzKHIuX3BpZWxheWVyLGUsXCJ0cmFjZVwiKS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLHU9ZVswXSxtPXUudHJhY2U7IWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXRbMF0sYT1pLnRyYWNlLG89YS5yb3RhdGlvbipNYXRoLlBJLzE4MCxzPTIqTWF0aC5QSS9pLnZUb3RhbCxsPVwicHgwXCIsYz1cInB4MVwiO2lmKFwiY291bnRlcmNsb2Nrd2lzZVwiPT09YS5kaXJlY3Rpb24pe2ZvcihlPTA7ZTx0Lmxlbmd0aCYmdFtlXS5oaWRkZW47ZSsrKTtpZihlPT09dC5sZW5ndGgpcmV0dXJuO28rPXMqdFtlXS52LHMqPS0xLGw9XCJweDFcIixjPVwicHgwXCJ9ZnVuY3Rpb24gdSh0KXtyZXR1cm5baS5yKk1hdGguc2luKHQpLC1pLnIqTWF0aC5jb3ModCldfWZvcihuPXUobyksZT0wO2U8dC5sZW5ndGg7ZSsrKShyPXRbZV0pLmhpZGRlbnx8KHJbbF09bixvKz1zKnIudi8yLHIucHhtaWQ9dShvKSxyLm1pZGFuZ2xlPW8sbys9cypyLnYvMixuPXUobykscltjXT1uLHIubGFyZ2VBcmM9ci52PmkudlRvdGFsLzI/MTowLHIuaGFsZmFuZ2xlPU1hdGguUEkqTWF0aC5taW4oci52L2kudlRvdGFsLC41KSxyLnJpbmc9MS1hLmhvbGUsci5ySW5zY3JpYmVkPXAocixpKSl9KGUpLGkuYXR0cihcInN0cm9rZS1saW5lam9pblwiLFwicm91bmRcIiksaS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKFwiZy5zbGljZVwiKS5kYXRhKGUpO2kuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJzbGljZVwiLCEwKSxpLmV4aXQoKS5yZW1vdmUoKTt2YXIgcD1bW1tdLFtdXSxbW10sW11dXSx5PSExO2kuZWFjaChmdW5jdGlvbihyKXtpZihyLmhpZGRlbiluLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoXCJwYXRoLGdcIikucmVtb3ZlKCk7ZWxzZXtyLnBvaW50TnVtYmVyPXIuaSxyLmN1cnZlTnVtYmVyPW0uaW5kZXgscFtyLnB4bWlkWzFdPDA/MDoxXVtyLnB4bWlkWzBdPDA/MDoxXS5wdXNoKHIpO3ZhciBpPXUuY3gsZz11LmN5LHY9bi5zZWxlY3QodGhpcykseD12LnNlbGVjdEFsbChcInBhdGguc3VyZmFjZVwiKS5kYXRhKFtyXSk7aWYoeC5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChcInN1cmZhY2VcIiwhMCkuc3R5bGUoe1wicG9pbnRlci1ldmVudHNcIjpcImFsbFwifSksdi5jYWxsKGgsdCxlKSxtLnB1bGwpe3ZhciBiPStjLmNhc3RPcHRpb24obS5wdWxsLHIucHRzKXx8MDtiPjAmJihpKz1iKnIucHhtaWRbMF0sZys9YipyLnB4bWlkWzFdKX1yLmN4RmluYWw9aSxyLmN5RmluYWw9Zzt2YXIgXz1tLmhvbGU7aWYoci52PT09dS52VG90YWwpe3ZhciB3PVwiTVwiKyhpK3IucHgwWzBdKStcIixcIisoZytyLnB4MFsxXSkrUyhyLnB4MCxyLnB4bWlkLCEwLDEpK1Moci5weG1pZCxyLnB4MCwhMCwxKStcIlpcIjtfP3guYXR0cihcImRcIixcIk1cIisoaStfKnIucHgwWzBdKStcIixcIisoZytfKnIucHgwWzFdKStTKHIucHgwLHIucHhtaWQsITEsXykrUyhyLnB4bWlkLHIucHgwLCExLF8pK1wiWlwiK3cpOnguYXR0cihcImRcIix3KX1lbHNle3ZhciBrPVMoci5weDAsci5weDEsITAsMSk7aWYoXyl7dmFyIEE9MS1fO3guYXR0cihcImRcIixcIk1cIisoaStfKnIucHgxWzBdKStcIixcIisoZytfKnIucHgxWzFdKStTKHIucHgxLHIucHgwLCExLF8pK1wibFwiK0Eqci5weDBbMF0rXCIsXCIrQSpyLnB4MFsxXStrK1wiWlwiKX1lbHNlIHguYXR0cihcImRcIixcIk1cIitpK1wiLFwiK2crXCJsXCIrci5weDBbMF0rXCIsXCIrci5weDBbMV0raytcIlpcIil9dmFyIFQ9Yy5jYXN0T3B0aW9uKG0udGV4dHBvc2l0aW9uLHIucHRzKSxNPXYuc2VsZWN0QWxsKFwiZy5zbGljZXRleHRcIikuZGF0YShyLnRleHQmJlwibm9uZVwiIT09VD9bMF06W10pO00uZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJzbGljZXRleHRcIiwhMCksTS5leGl0KCkucmVtb3ZlKCksTS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9cy5lbnN1cmVTaW5nbGUobi5zZWxlY3QodGhpcyksXCJ0ZXh0XCIsXCJcIixmdW5jdGlvbih0KXt0LmF0dHIoXCJkYXRhLW5vdGV4XCIsMSl9KTtlLnRleHQoci50ZXh0KS5hdHRyKHtjbGFzczpcInNsaWNldGV4dFwiLHRyYW5zZm9ybTpcIlwiLFwidGV4dC1hbmNob3JcIjpcIm1pZGRsZVwifSkuY2FsbChvLmZvbnQsXCJvdXRzaWRlXCI9PT1UP2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj1jLmNhc3RPcHRpb24odC5vdXRzaWRldGV4dGZvbnQuY29sb3IsZS5wdHMpfHxjLmNhc3RPcHRpb24odC50ZXh0Zm9udC5jb2xvcixlLnB0cyl8fHIuY29sb3IsaT1jLmNhc3RPcHRpb24odC5vdXRzaWRldGV4dGZvbnQuZmFtaWx5LGUucHRzKXx8Yy5jYXN0T3B0aW9uKHQudGV4dGZvbnQuZmFtaWx5LGUucHRzKXx8ci5mYW1pbHksYT1jLmNhc3RPcHRpb24odC5vdXRzaWRldGV4dGZvbnQuc2l6ZSxlLnB0cyl8fGMuY2FzdE9wdGlvbih0LnRleHRmb250LnNpemUsZS5wdHMpfHxyLnNpemU7cmV0dXJue2NvbG9yOm4sZmFtaWx5Omksc2l6ZTphfX0obSxyLHQuX2Z1bGxMYXlvdXQuZm9udCk6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWMuY2FzdE9wdGlvbih0Lmluc2lkZXRleHRmb250LmNvbG9yLGUucHRzKTshbiYmdC5faW5wdXQudGV4dGZvbnQmJihuPWMuY2FzdE9wdGlvbih0Ll9pbnB1dC50ZXh0Zm9udC5jb2xvcixlLnB0cykpO3ZhciBpPWMuY2FzdE9wdGlvbih0Lmluc2lkZXRleHRmb250LmZhbWlseSxlLnB0cyl8fGMuY2FzdE9wdGlvbih0LnRleHRmb250LmZhbWlseSxlLnB0cyl8fHIuZmFtaWx5LG89Yy5jYXN0T3B0aW9uKHQuaW5zaWRldGV4dGZvbnQuc2l6ZSxlLnB0cyl8fGMuY2FzdE9wdGlvbih0LnRleHRmb250LnNpemUsZS5wdHMpfHxyLnNpemU7cmV0dXJue2NvbG9yOm58fGEuY29udHJhc3QoZS5jb2xvciksZmFtaWx5Omksc2l6ZTpvfX0obSxyLHQuX2Z1bGxMYXlvdXQuZm9udCkpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsdCk7dmFyIGgscD1vLmJCb3goZS5ub2RlKCkpO1wib3V0c2lkZVwiPT09VD9oPWQocCxyKTooaD1mKHAscix1KSxcImF1dG9cIj09PVQmJmguc2NhbGU8MSYmKGUuY2FsbChvLmZvbnQsbS5vdXRzaWRldGV4dGZvbnQpLG0ub3V0c2lkZXRleHRmb250LmZhbWlseT09PW0uaW5zaWRldGV4dGZvbnQuZmFtaWx5JiZtLm91dHNpZGV0ZXh0Zm9udC5zaXplPT09bS5pbnNpZGV0ZXh0Zm9udC5zaXplfHwocD1vLmJCb3goZS5ub2RlKCkpKSxoPWQocCxyKSkpO3ZhciB2PWkrci5weG1pZFswXSpoLnJDZW50ZXIrKGgueHx8MCkseD1nK3IucHhtaWRbMV0qaC5yQ2VudGVyKyhoLnl8fDApO2gub3V0c2lkZSYmKHIueUxhYmVsTWluPXgtcC5oZWlnaHQvMixyLnlMYWJlbE1pZD14LHIueUxhYmVsTWF4PXgrcC5oZWlnaHQvMixyLmxhYmVsRXh0cmFYPTAsci5sYWJlbEV4dHJhWT0wLHk9ITApLGUuYXR0cihcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiK3YrXCIsXCIreCtcIilcIisoaC5zY2FsZTwxP1wic2NhbGUoXCIraC5zY2FsZStcIilcIjpcIlwiKSsoaC5yb3RhdGU/XCJyb3RhdGUoXCIraC5yb3RhdGUrXCIpXCI6XCJcIikrXCJ0cmFuc2xhdGUoXCIrLShwLmxlZnQrcC5yaWdodCkvMitcIixcIistKHAudG9wK3AuYm90dG9tKS8yK1wiKVwiKX0pfWZ1bmN0aW9uIFModCxlLG4saSl7cmV0dXJuXCJhXCIraSp1LnIrXCIsXCIraSp1LnIrXCIgMCBcIityLmxhcmdlQXJjKyhuP1wiIDEgXCI6XCIgMCBcIikraSooZVswXS10WzBdKStcIixcIitpKihlWzFdLXRbMV0pfX0pO3ZhciB4PW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbChcImcudGl0bGV0ZXh0XCIpLmRhdGEobS50aXRsZS50ZXh0P1swXTpbXSk7eC5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcInRpdGxldGV4dFwiLCEwKSx4LmV4aXQoKS5yZW1vdmUoKSx4LmVhY2goZnVuY3Rpb24oKXt2YXIgZSxpPXMuZW5zdXJlU2luZ2xlKG4uc2VsZWN0KHRoaXMpLFwidGV4dFwiLFwiXCIsZnVuY3Rpb24odCl7dC5hdHRyKFwiZGF0YS1ub3RleFwiLDEpfSksYT1yLm1ldGE/cy50ZW1wbGF0ZVN0cmluZyhtLnRpdGxlLnRleHQse21ldGE6ci5tZXRhfSk6bS50aXRsZS50ZXh0O2kudGV4dChhKS5hdHRyKHtjbGFzczpcInRpdGxldGV4dFwiLHRyYW5zZm9ybTpcIlwiLFwidGV4dC1hbmNob3JcIjpcIm1pZGRsZVwifSkuY2FsbChvLmZvbnQsbS50aXRsZS5mb250KS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHQpLGU9XCJtaWRkbGUgY2VudGVyXCI9PT1tLnRpdGxlLnBvc2l0aW9uP2Z1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0LnRpdGxlQm94LndpZHRoKnQudGl0bGVCb3gud2lkdGgrdC50aXRsZUJveC5oZWlnaHQqdC50aXRsZUJveC5oZWlnaHQpO3JldHVybnt4OnQuY3gseTp0LmN5LHNjYWxlOnQudHJhY2UuaG9sZSp0LnIqMi9lLHR4OjAsdHk6LXQudGl0bGVCb3guaGVpZ2h0LzIrdC50cmFjZS50aXRsZS5mb250LnNpemV9fSh1KTpmdW5jdGlvbih0LGUpe3ZhciByLG4saT0xLGE9MSxvPXQudHJhY2Uscz17eDp0LmN4LHk6dC5jeX0sbD17dHg6MCx0eTowfTtyZXR1cm4gbC50eSs9by50aXRsZS5mb250LnNpemUsbj12KG8pLC0xIT09by50aXRsZS5wb3NpdGlvbi5pbmRleE9mKFwidG9wXCIpPyhzLnktPSgxK24pKnQucixsLnR5LT10LnRpdGxlQm94LmhlaWdodCk6LTEhPT1vLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoXCJib3R0b21cIikmJihzLnkrPSgxK24pKnQuciksLTEhPT1vLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoXCJsZWZ0XCIpPyhyPWUudyooby5kb21haW4ueFsxXS1vLmRvbWFpbi54WzBdKS8yK3QucixzLngtPSgxK24pKnQucixsLnR4Kz10LnRpdGxlQm94LndpZHRoLzIpOi0xIT09by50aXRsZS5wb3NpdGlvbi5pbmRleE9mKFwiY2VudGVyXCIpP3I9ZS53KihvLmRvbWFpbi54WzFdLW8uZG9tYWluLnhbMF0pOi0xIT09by50aXRsZS5wb3NpdGlvbi5pbmRleE9mKFwicmlnaHRcIikmJihyPWUudyooby5kb21haW4ueFsxXS1vLmRvbWFpbi54WzBdKS8yK3QucixzLngrPSgxK24pKnQucixsLnR4LT10LnRpdGxlQm94LndpZHRoLzIpLGk9ci90LnRpdGxlQm94LndpZHRoLGE9Zyh0LGUpL3QudGl0bGVCb3guaGVpZ2h0LHt4OnMueCx5OnMueSxzY2FsZTpNYXRoLm1pbihpLGEpLHR4OmwudHgsdHk6bC50eX19KHUsci5fc2l6ZSksaS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrZS54K1wiLFwiK2UueStcIilcIisoZS5zY2FsZTwxP1wic2NhbGUoXCIrZS5zY2FsZStcIilcIjpcIlwiKStcInRyYW5zbGF0ZShcIitlLnR4K1wiLFwiK2UudHkrXCIpXCIpfSkseSYmZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLHMsbCx1LGgsZixwLGQsZztmdW5jdGlvbiB2KHQsZSl7cmV0dXJuIHQucHhtaWRbMV0tZS5weG1pZFsxXX1mdW5jdGlvbiBtKHQsZSl7cmV0dXJuIGUucHhtaWRbMV0tdC5weG1pZFsxXX1mdW5jdGlvbiB5KHQscil7cnx8KHI9e30pO3ZhciBpLHUsaCxwLGQsZyx2PXIubGFiZWxFeHRyYVkrKG4/ci55TGFiZWxNYXg6ci55TGFiZWxNaW4pLG09bj90LnlMYWJlbE1pbjp0LnlMYWJlbE1heCx5PW4/dC55TGFiZWxNYXg6dC55TGFiZWxNaW4seD10LmN5RmluYWwrbyh0LnB4MFsxXSx0LnB4MVsxXSksYj12LW07aWYoYipsPjAmJih0LmxhYmVsRXh0cmFZPWIpLEFycmF5LmlzQXJyYXkoZS5wdWxsKSlmb3IodT0wO3U8Zi5sZW5ndGg7dSsrKShoPWZbdV0pPT09dHx8KGMuY2FzdE9wdGlvbihlLnB1bGwsdC5wdHMpfHwwKT49KGMuY2FzdE9wdGlvbihlLnB1bGwsaC5wdHMpfHwwKXx8KCh0LnB4bWlkWzFdLWgucHhtaWRbMV0pKmw+MD8ocD1oLmN5RmluYWwrbyhoLnB4MFsxXSxoLnB4MVsxXSksKGI9cC1tLXQubGFiZWxFeHRyYVkpKmw+MCYmKHQubGFiZWxFeHRyYVkrPWIpKTooeSt0LmxhYmVsRXh0cmFZLXgpKmw+MCYmKGk9MypzKk1hdGguYWJzKHUtZi5pbmRleE9mKHQpKSxkPWguY3hGaW5hbCthKGgucHgwWzBdLGgucHgxWzBdKSwoZz1kK2ktKHQuY3hGaW5hbCt0LnB4bWlkWzBdKS10LmxhYmVsRXh0cmFYKSpzPjAmJih0LmxhYmVsRXh0cmFYKz1nKSkpfWZvcihuPTA7bjwyO24rKylmb3IoaT1uP3Y6bSxvPW4/TWF0aC5tYXg6TWF0aC5taW4sbD1uPzE6LTEscj0wO3I8MjtyKyspe2ZvcihhPXI/TWF0aC5tYXg6TWF0aC5taW4scz1yPzE6LTEsKHU9dFtuXVtyXSkuc29ydChpKSxoPXRbMS1uXVtyXSxmPWguY29uY2F0KHUpLGQ9W10scD0wO3A8dS5sZW5ndGg7cCsrKXZvaWQgMCE9PXVbcF0ueUxhYmVsTWlkJiZkLnB1c2godVtwXSk7Zm9yKGc9ITEscD0wO24mJnA8aC5sZW5ndGg7cCsrKWlmKHZvaWQgMCE9PWhbcF0ueUxhYmVsTWlkKXtnPWhbcF07YnJlYWt9Zm9yKHA9MDtwPGQubGVuZ3RoO3ArKyl7dmFyIHg9cCYmZFtwLTFdO2cmJiFwJiYoeD1nKSx5KGRbcF0seCl9fX0ocCxtKSxmdW5jdGlvbih0LGUpe3QuZWFjaChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtpZih0LmxhYmVsRXh0cmFYfHx0LmxhYmVsRXh0cmFZKXt2YXIgaT1yLnNlbGVjdChcImcuc2xpY2V0ZXh0IHRleHRcIik7aS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrdC5sYWJlbEV4dHJhWCtcIixcIit0LmxhYmVsRXh0cmFZK1wiKVwiK2kuYXR0cihcInRyYW5zZm9ybVwiKSk7dmFyIG89dC5jeEZpbmFsK3QucHhtaWRbMF0sbD10LmN5RmluYWwrdC5weG1pZFsxXSxjPVwiTVwiK28rXCIsXCIrbCx1PSh0LnlMYWJlbE1heC10LnlMYWJlbE1pbikqKHQucHhtaWRbMF08MD8tMToxKS80O2lmKHQubGFiZWxFeHRyYVgpe3ZhciBoPXQubGFiZWxFeHRyYVgqdC5weG1pZFsxXS90LnB4bWlkWzBdLGY9dC55TGFiZWxNaWQrdC5sYWJlbEV4dHJhWS0odC5jeUZpbmFsK3QucHhtaWRbMV0pO01hdGguYWJzKGgpPk1hdGguYWJzKGYpP2MrPVwibFwiK2YqdC5weG1pZFswXS90LnB4bWlkWzFdK1wiLFwiK2YrXCJIXCIrKG8rdC5sYWJlbEV4dHJhWCt1KTpjKz1cImxcIit0LmxhYmVsRXh0cmFYK1wiLFwiK2grXCJ2XCIrKGYtaCkrXCJoXCIrdX1lbHNlIGMrPVwiVlwiKyh0LnlMYWJlbE1pZCt0LmxhYmVsRXh0cmFZKStcImhcIit1O3MuZW5zdXJlU2luZ2xlKHIsXCJwYXRoXCIsXCJ0ZXh0bGluZVwiKS5jYWxsKGEuc3Ryb2tlLGUub3V0c2lkZXRleHRmb250LmNvbG9yKS5hdHRyKHtcInN0cm9rZS13aWR0aFwiOk1hdGgubWluKDIsZS5vdXRzaWRldGV4dGZvbnQuc2l6ZS84KSxkOmMsZmlsbDpcIm5vbmVcIn0pfWVsc2Ugci5zZWxlY3QoXCJwYXRoLnRleHRsaW5lXCIpLnJlbW92ZSgpfSl9KGksbSl9KX0pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtpLnNlbGVjdEFsbChcInRzcGFuXCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTt0LmF0dHIoXCJkeVwiKSYmdC5hdHRyKFwiZHlcIix0LmF0dHIoXCJkeVwiKSl9KX0sMCl9LHRyYW5zZm9ybUluc2lkZVRleHQ6Zn19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9jb21wb25lbnRzL2Z4XCI6NjE3LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCI6NzI1LFwiLi9ldmVudF9kYXRhXCI6MTAzMCxcIi4vaGVscGVyc1wiOjEwMzEsZDM6MTU1fV0sMTAzNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuL3N0eWxlX29uZVwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dC5fZnVsbExheW91dC5fcGllbGF5ZXIuc2VsZWN0QWxsKFwiLnRyYWNlXCIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPW4uc2VsZWN0KHRoaXMpO3Iuc3R5bGUoe29wYWNpdHk6ZS5vcGFjaXR5fSksci5zZWxlY3RBbGwoXCJwYXRoLnN1cmZhY2VcIikuZWFjaChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5jYWxsKGksdCxlKX0pfSl9fSx7XCIuL3N0eWxlX29uZVwiOjEwMzcsZDM6MTU1fV0sMTAzNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGk9dChcIi4vaGVscGVyc1wiKS5jYXN0T3B0aW9uO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9ci5tYXJrZXIubGluZSxvPWkoYS5jb2xvcixlLnB0cyl8fG4uZGVmYXVsdExpbmUscz1pKGEud2lkdGgsZS5wdHMpfHwwO3Quc3R5bGUoXCJzdHJva2Utd2lkdGhcIixzKS5jYWxsKG4uZmlsbCxlLmNvbG9yKS5jYWxsKG4uc3Ryb2tlLG8pfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4vaGVscGVyc1wiOjEwMzF9XSwxMDM4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9e3g6bi54LHk6bi55LHh5Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxpbmRpY2VzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx4Ym91bmRzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx5Ym91bmRzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx0ZXh0Om4udGV4dCxtYXJrZXI6e2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixhcnJheU9rOiExLGVkaXRUeXBlOlwiY2FsY1wifSxvcGFjaXR5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDoxLGFycmF5T2s6ITEsZWRpdFR5cGU6XCJjYWxjXCJ9LGJsZW5kOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6bnVsbCxlZGl0VHlwZTpcImNhbGNcIn0sc2l6ZW1pbjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjouMSxtYXg6MixkZmx0Oi41LGVkaXRUeXBlOlwiY2FsY1wifSxzaXplbWF4Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOi4xLGRmbHQ6MjAsZWRpdFR5cGU6XCJjYWxjXCJ9LGJvcmRlcjp7Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGFycmF5T2s6ITEsZWRpdFR5cGU6XCJjYWxjXCJ9LGFyZWFyYXRpbzp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LGVkaXRUeXBlOlwiY2FsY1wifSx0cmFuc2Zvcm1zOnZvaWQgMH19LHtcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiOjEwNTJ9XSwxMDM5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsLXBvaW50Y2xvdWQyZFwiKSxpPXQoXCIuLi8uLi9saWIvc3RyMnJnYmFycmF5XCIpLGE9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2VcIikuZmluZEV4dHJlbWVzLG89dChcIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yXCIpO2Z1bmN0aW9uIHModCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLnR5cGU9XCJwb2ludGNsb3VkXCIsdGhpcy5waWNrWERhdGE9W10sdGhpcy5waWNrWURhdGE9W10sdGhpcy54RGF0YT1bXSx0aGlzLnlEYXRhPVtdLHRoaXMudGV4dExhYmVscz1bXSx0aGlzLmNvbG9yPVwicmdiKDAsIDAsIDApXCIsdGhpcy5uYW1lPVwiXCIsdGhpcy5ob3ZlcmluZm89XCJhbGxcIix0aGlzLmlkVG9JbmRleD1uZXcgSW50MzJBcnJheSgwKSx0aGlzLmJvdW5kcz1bMCwwLDAsMF0sdGhpcy5wb2ludGNsb3VkT3B0aW9ucz17cG9zaXRpb25zOm5ldyBGbG9hdDMyQXJyYXkoMCksaWRUb0luZGV4OnRoaXMuaWRUb0luZGV4LHNpemVtaW46LjUsc2l6ZW1heDoxMixjb2xvcjpbMCwwLDAsMV0sYXJlYVJhdGlvOjEsYm9yZGVyQ29sb3I6WzAsMCwwLDFdfSx0aGlzLnBvaW50Y2xvdWQ9bih0LmdscGxvdCx0aGlzLnBvaW50Y2xvdWRPcHRpb25zKSx0aGlzLnBvaW50Y2xvdWQuX3RyYWNlPXRoaXN9dmFyIGw9cy5wcm90b3R5cGU7bC5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaWRUb0luZGV4W3QucG9pbnRJZF07cmV0dXJue3RyYWNlOnRoaXMsZGF0YUNvb3JkOnQuZGF0YUNvb3JkLHRyYWNlQ29vcmQ6dGhpcy5waWNrWFlEYXRhP1t0aGlzLnBpY2tYWURhdGFbMiplXSx0aGlzLnBpY2tYWURhdGFbMiplKzFdXTpbdGhpcy5waWNrWERhdGFbZV0sdGhpcy5waWNrWURhdGFbZV1dLHRleHRMYWJlbDpBcnJheS5pc0FycmF5KHRoaXMudGV4dExhYmVscyk/dGhpcy50ZXh0TGFiZWxzW2VdOnRoaXMudGV4dExhYmVscyxjb2xvcjp0aGlzLmNvbG9yLG5hbWU6dGhpcy5uYW1lLHBvaW50SW5kZXg6ZSxob3ZlcmluZm86dGhpcy5ob3ZlcmluZm99fSxsLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy50ZXh0TGFiZWxzPXQudGV4dCx0aGlzLm5hbWU9dC5uYW1lLHRoaXMuaG92ZXJpbmZvPXQuaG92ZXJpbmZvLHRoaXMuYm91bmRzPVsxLzAsMS8wLC0xLzAsLTEvMF0sdGhpcy51cGRhdGVGYXN0KHQpLHRoaXMuY29sb3I9byh0LHt9KX0sbC51cGRhdGVGYXN0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixvLHMsbCxjPXRoaXMueERhdGE9dGhpcy5waWNrWERhdGE9dC54LHU9dGhpcy55RGF0YT10aGlzLnBpY2tZRGF0YT10LnksaD10aGlzLnBpY2tYWURhdGE9dC54eSxmPXQueGJvdW5kcyYmdC55Ym91bmRzLHA9dC5pbmRpY2VzLGQ9dGhpcy5ib3VuZHM7aWYoaCl7aWYobj1oLGU9aC5sZW5ndGg+Pj4xLGYpZFswXT10Lnhib3VuZHNbMF0sZFsyXT10Lnhib3VuZHNbMV0sZFsxXT10Lnlib3VuZHNbMF0sZFszXT10Lnlib3VuZHNbMV07ZWxzZSBmb3IobD0wO2w8ZTtsKyspbz1uWzIqbF0scz1uWzIqbCsxXSxvPGRbMF0mJihkWzBdPW8pLG8+ZFsyXSYmKGRbMl09byksczxkWzFdJiYoZFsxXT1zKSxzPmRbM10mJihkWzNdPXMpO2lmKHApcj1wO2Vsc2UgZm9yKHI9bmV3IEludDMyQXJyYXkoZSksbD0wO2w8ZTtsKyspcltsXT1sfWVsc2UgZm9yKGU9Yy5sZW5ndGgsbj1uZXcgRmxvYXQzMkFycmF5KDIqZSkscj1uZXcgSW50MzJBcnJheShlKSxsPTA7bDxlO2wrKylvPWNbbF0scz11W2xdLHJbbF09bCxuWzIqbF09byxuWzIqbCsxXT1zLG88ZFswXSYmKGRbMF09byksbz5kWzJdJiYoZFsyXT1vKSxzPGRbMV0mJihkWzFdPXMpLHM+ZFszXSYmKGRbM109cyk7dGhpcy5pZFRvSW5kZXg9cix0aGlzLnBvaW50Y2xvdWRPcHRpb25zLmlkVG9JbmRleD1yLHRoaXMucG9pbnRjbG91ZE9wdGlvbnMucG9zaXRpb25zPW47dmFyIGc9aSh0Lm1hcmtlci5jb2xvciksdj1pKHQubWFya2VyLmJvcmRlci5jb2xvciksbT10Lm9wYWNpdHkqdC5tYXJrZXIub3BhY2l0eTtnWzNdKj1tLHRoaXMucG9pbnRjbG91ZE9wdGlvbnMuY29sb3I9Zzt2YXIgeT10Lm1hcmtlci5ibGVuZDtpZihudWxsPT09eSl7eT1jLmxlbmd0aDwxMDB8fHUubGVuZ3RoPDEwMH10aGlzLnBvaW50Y2xvdWRPcHRpb25zLmJsZW5kPXksdlszXSo9bSx0aGlzLnBvaW50Y2xvdWRPcHRpb25zLmJvcmRlckNvbG9yPXY7dmFyIHg9dC5tYXJrZXIuc2l6ZW1pbixiPU1hdGgubWF4KHQubWFya2VyLnNpemVtYXgsdC5tYXJrZXIuc2l6ZW1pbik7dGhpcy5wb2ludGNsb3VkT3B0aW9ucy5zaXplTWluPXgsdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5zaXplTWF4PWIsdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5hcmVhUmF0aW89dC5tYXJrZXIuYm9yZGVyLmFyZWFyYXRpbyx0aGlzLnBvaW50Y2xvdWQudXBkYXRlKHRoaXMucG9pbnRjbG91ZE9wdGlvbnMpO3ZhciBfPXRoaXMuc2NlbmUueGF4aXMsdz10aGlzLnNjZW5lLnlheGlzLGs9Yi8yfHwuNTt0Ll9leHRyZW1lc1tfLl9pZF09YShfLFtkWzBdLGRbMl1dLHtwcGFkOmt9KSx0Ll9leHRyZW1lc1t3Ll9pZF09YSh3LFtkWzFdLGRbM11dLHtwcGFkOmt9KX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5wb2ludGNsb3VkLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IHModCxlLnVpZCk7cmV0dXJuIHIudXBkYXRlKGUpLHJ9fSx7XCIuLi8uLi9saWIvc3RyMnJnYmFycmF5XCI6NzI0LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZVwiOjc0OCxcIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yXCI6MTA2MixcImdsLXBvaW50Y2xvdWQyZFwiOjI4OX1dLDEwNDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGEocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1hKFwieFwiKSxhKFwieVwiKSxhKFwieGJvdW5kc1wiKSxhKFwieWJvdW5kc1wiKSx0Lnh5JiZ0Lnh5IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5JiYoZS54eT10Lnh5KSx0LmluZGljZXMmJnQuaW5kaWNlcyBpbnN0YW5jZW9mIEludDMyQXJyYXkmJihlLmluZGljZXM9dC5pbmRpY2VzKSxhKFwidGV4dFwiKSxhKFwibWFya2VyLmNvbG9yXCIsciksYShcIm1hcmtlci5vcGFjaXR5XCIpLGEoXCJtYXJrZXIuYmxlbmRcIiksYShcIm1hcmtlci5zaXplbWluXCIpLGEoXCJtYXJrZXIuc2l6ZW1heFwiKSxhKFwibWFya2VyLmJvcmRlci5jb2xvclwiLHIpLGEoXCJtYXJrZXIuYm9yZGVyLmFyZWFyYXRpb1wiKSxlLl9sZW5ndGg9bnVsbH19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4vYXR0cmlidXRlc1wiOjEwMzh9XSwxMDQxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNhbGM9dChcIi4uL3NjYXR0ZXIzZC9jYWxjXCIpLG4ucGxvdD10KFwiLi9jb252ZXJ0XCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwicG9pbnRjbG91ZFwiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4uLy4uL3Bsb3RzL2dsMmRcIiksbi5jYXRlZ29yaWVzPVtcImdsXCIsXCJnbDJkXCIsXCJzaG93TGVnZW5kXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvZ2wyZFwiOjc4NyxcIi4uL3NjYXR0ZXIzZC9jYWxjXCI6MTA4MCxcIi4vYXR0cmlidXRlc1wiOjEwMzgsXCIuL2NvbnZlcnRcIjoxMDM5LFwiLi9kZWZhdWx0c1wiOjEwNDB9XSwxMDQyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vcGxvdHMvZG9tYWluXCIpLmF0dHJpYnV0ZXMsbD10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIiksYz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIiksdT10KFwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZVwiKS50ZW1wbGF0ZWRBcnJheSxoPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsZj10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbDsoZS5leHBvcnRzPWYoe2hvdmVyaW5mbzpoKHt9LGkuaG92ZXJpbmZvLHtmbGFnczpbXSxhcnJheU9rOiExfSksaG92ZXJsYWJlbDpvLmhvdmVybGFiZWwsZG9tYWluOnMoe25hbWU6XCJzYW5rZXlcIix0cmFjZTohMH0pLG9yaWVudGF0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ2XCIsXCJoXCJdLGRmbHQ6XCJoXCJ9LHZhbHVlZm9ybWF0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIi4zc1wifSx2YWx1ZXN1ZmZpeDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIn0sYXJyYW5nZW1lbnQ6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInNuYXBcIixcInBlcnBlbmRpY3VsYXJcIixcImZyZWVmb3JtXCIsXCJmaXhlZFwiXSxkZmx0Olwic25hcFwifSx0ZXh0Zm9udDpuKHt9KSxub2RlOntsYWJlbDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixkZmx0OltdfSxncm91cHM6e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsaW1wbGllZEVkaXRzOnt4OltdLHk6W119LGRpbWVuc2lvbnM6MixmcmVlTGVuZ3RoOiEwLGRmbHQ6W10saXRlbXM6e3ZhbFR5cGU6XCJudW1iZXJcIixlZGl0VHlwZTpcImNhbGNcIn19LHg6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZGZsdDpbXX0seTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixkZmx0OltdfSxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsYXJyYXlPazohMH0sbGluZTp7Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6YS5kZWZhdWx0TGluZSxhcnJheU9rOiEwfSx3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6LjUsYXJyYXlPazohMH19LHBhZDp7dmFsVHlwZTpcIm51bWJlclwiLGFycmF5T2s6ITEsbWluOjAsZGZsdDoyMH0sdGhpY2tuZXNzOnt2YWxUeXBlOlwibnVtYmVyXCIsYXJyYXlPazohMSxtaW46MSxkZmx0OjIwfSxob3ZlcmluZm86e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImFsbFwiLFwibm9uZVwiLFwic2tpcFwiXSxkZmx0OlwiYWxsXCJ9LGhvdmVybGFiZWw6by5ob3ZlcmxhYmVsLGhvdmVydGVtcGxhdGU6bCh7fSx7a2V5czpbXCJ2YWx1ZVwiLFwibGFiZWxcIl19KX0sbGluazp7bGFiZWw6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZGZsdDpbXX0sY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGFycmF5T2s6ITB9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOlwiY29sb3JcIixkZmx0OmEuZGVmYXVsdExpbmUsYXJyYXlPazohMH0sd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjAsYXJyYXlPazohMH19LHNvdXJjZTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixkZmx0OltdfSx0YXJnZXQ6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZGZsdDpbXX0sdmFsdWU6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZGZsdDpbXX0saG92ZXJpbmZvOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJhbGxcIixcIm5vbmVcIixcInNraXBcIl0sZGZsdDpcImFsbFwifSxob3ZlcmxhYmVsOm8uaG92ZXJsYWJlbCxob3ZlcnRlbXBsYXRlOmwoe30se2tleXM6W1widmFsdWVcIixcImxhYmVsXCJdfSksY29sb3JzY2FsZXM6dShcImNvbmNlbnRyYXRpb25zY2FsZXNcIix7ZWRpdFR5cGU6XCJjYWxjXCIsbGFiZWw6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcImNhbGNcIixkZmx0OlwiXCJ9LGNtYXg6e3ZhbFR5cGU6XCJudW1iZXJcIixlZGl0VHlwZTpcImNhbGNcIixkZmx0OjF9LGNtaW46e3ZhbFR5cGU6XCJudW1iZXJcIixlZGl0VHlwZTpcImNhbGNcIixkZmx0OjB9LGNvbG9yc2NhbGU6aChjKCkuY29sb3JzY2FsZSx7ZGZsdDpbWzAsXCJ3aGl0ZVwiXSxbMSxcImJsYWNrXCJdXX0pfSl9fSxcImNhbGNcIixcIm5lc3RlZFwiKSkudHJhbnNmb3Jtcz12b2lkIDB9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlc1wiOjU3NyxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzXCI6NjA4LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi4vLi4vcGxvdHMvZG9tYWluXCI6Nzc0LFwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzXCI6Nzc1fV0sMTA0MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsLGk9dChcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCIpLmdldE1vZHVsZUNhbGNEYXRhLGE9dChcIi4vcGxvdFwiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL2xpYi9zZXRjdXJzb3JcIiksbD10KFwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudFwiKSxjPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2VsZWN0XCIpLnByZXBTZWxlY3QsdT10KFwiLi4vLi4vbGliXCIpLGg9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpO2Z1bmN0aW9uIGYodCxlKXt2YXIgcj10Ll9mdWxsRGF0YVtlXSxuPXQuX2Z1bGxMYXlvdXQsaT1uLmRyYWdtb2RlLGE9XCJwYW5cIj09PW4uZHJhZ21vZGU/XCJtb3ZlXCI6XCJjcm9zc2hhaXJcIixvPXIuX2JnUmVjdDtpZihcInBhblwiIT09aSYmXCJ6b29tXCIhPT1pKXtzKG8sYSk7dmFyIGY9e19pZDpcInhcIixjMnA6dS5pZGVudGl0eSxfb2Zmc2V0OnIuX3NhbmtleS50cmFuc2xhdGVYLF9sZW5ndGg6ci5fc2Fua2V5LndpZHRofSxwPXtfaWQ6XCJ5XCIsYzJwOnUuaWRlbnRpdHksX29mZnNldDpyLl9zYW5rZXkudHJhbnNsYXRlWSxfbGVuZ3RoOnIuX3NhbmtleS5oZWlnaHR9LGQ9e2dkOnQsZWxlbWVudDpvLm5vZGUoKSxwbG90aW5mbzp7aWQ6ZSx4YXhpczpmLHlheGlzOnAsZmlsbFJhbmdlSXRlbXM6dS5ub29wfSxzdWJwbG90OmUseGF4ZXM6W2ZdLHlheGVzOltwXSxkb25lRm5Db21wbGV0ZWQ6ZnVuY3Rpb24ocil7dmFyIG4saT10Ll9mdWxsRGF0YVtlXSxhPWkubm9kZS5ncm91cHMuc2xpY2UoKSxvPVtdO2Z1bmN0aW9uIHModCl7Zm9yKHZhciBlPWkuX3NhbmtleS5ncmFwaC5ub2RlcyxyPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXS5wb2ludE51bWJlcj09PXQpcmV0dXJuIGVbcl19Zm9yKHZhciBsPTA7bDxyLmxlbmd0aDtsKyspe3ZhciBjPXMocltsXS5wb2ludE51bWJlcik7aWYoYylpZihjLmdyb3VwKXtmb3IodmFyIHU9MDt1PGMuY2hpbGRyZW5Ob2Rlcy5sZW5ndGg7dSsrKW8ucHVzaChjLmNoaWxkcmVuTm9kZXNbdV0ucG9pbnROdW1iZXIpO2FbYy5wb2ludE51bWJlci1pLm5vZGUuX2NvdW50XT0hMX1lbHNlIG8ucHVzaChjLnBvaW50TnVtYmVyKX1uPWEuZmlsdGVyKEJvb2xlYW4pLmNvbmNhdChbb10pLGguY2FsbChcIl9ndWlSZXN0eWxlXCIsdCx7XCJub2RlLmdyb3Vwc1wiOltuXX0sZSl9LHByZXBGbjpmdW5jdGlvbih0LGUscil7Yyh0LGUscixkLGkpfX07bC5pbml0KGQpfX1yLm5hbWU9XCJzYW5rZXlcIixyLmJhc2VMYXlvdXRBdHRyT3ZlcnJpZGVzPW4oe2hvdmVybGFiZWw6by5ob3ZlcmxhYmVsfSxcInBsb3RcIixcIm5lc3RlZFwiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9aSh0LmNhbGNkYXRhLFwic2Fua2V5XCIpWzBdO2EodCxlKSxyLnVwZGF0ZUZ4KHQpfSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4uX2hhcyYmbi5faGFzKFwic2Fua2V5XCIpLGE9ZS5faGFzJiZlLl9oYXMoXCJzYW5rZXlcIik7aSYmIWEmJihuLl9wYXBlcmRpdi5zZWxlY3RBbGwoXCIuc2Fua2V5XCIpLnJlbW92ZSgpLG4uX3BhcGVyZGl2LnNlbGVjdEFsbChcIi5iZ3NhbmtleVwiKS5yZW1vdmUoKSl9LHIudXBkYXRlRng9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Ll9mdWxsRGF0YS5sZW5ndGg7ZSsrKWYodCxlKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnRcIjo1OTYsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzXCI6NjE4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL3NldGN1cnNvclwiOjcyMSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2VsZWN0XCI6NzY2LFwiLi4vLi4vcGxvdHMvZ2V0X2RhdGFcIjo3ODQsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4vcGxvdFwiOjEwNDh9XSwxMDQ0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcInN0cm9uZ2x5LWNvbm5lY3RlZC1jb21wb25lbnRzXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9saWIvZ3VwXCIpLndyYXAsbz1pLmlzQXJyYXlPclR5cGVkQXJyYXkscz1pLmlzSW5kZXgsbD10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlXCIpO2Z1bmN0aW9uIGModCl7dmFyIGUscj10Lm5vZGUsYT10LmxpbmssYz1bXSx1PW8oYS5jb2xvciksaD17fSxmPXt9LHA9YS5jb2xvcnNjYWxlcy5sZW5ndGg7Zm9yKGU9MDtlPHA7ZSsrKXt2YXIgZD1hLmNvbG9yc2NhbGVzW2VdLGc9bC5leHRyYWN0U2NhbGUoZCx7Y0xldHRlcjpcImNcIn0pLHY9bC5tYWtlQ29sb3JTY2FsZUZ1bmMoZyk7ZltkLmxhYmVsXT12fXZhciBtPTA7Zm9yKGU9MDtlPGEudmFsdWUubGVuZ3RoO2UrKylhLnNvdXJjZVtlXT5tJiYobT1hLnNvdXJjZVtlXSksYS50YXJnZXRbZV0+bSYmKG09YS50YXJnZXRbZV0pO3ZhciB5LHg9bSsxO3Qubm9kZS5fY291bnQ9eDt2YXIgYj10Lm5vZGUuZ3JvdXBzLF89e307Zm9yKGU9MDtlPGIubGVuZ3RoO2UrKyl7dmFyIHc9YltlXTtmb3IoeT0wO3k8dy5sZW5ndGg7eSsrKXt2YXIgaz13W3ldLEE9eCtlO18uaGFzT3duUHJvcGVydHkoayk/aS53YXJuKFwiTm9kZSBcIitrK1wiIGlzIGFscmVhZHkgcGFydCBvZiBhIGdyb3VwLlwiKTpfW2tdPUF9fXZhciBUPXtzb3VyY2U6W10sdGFyZ2V0OltdfTtmb3IoZT0wO2U8YS52YWx1ZS5sZW5ndGg7ZSsrKXt2YXIgTT1hLnZhbHVlW2VdLFM9YS5zb3VyY2VbZV0sRT1hLnRhcmdldFtlXTtpZihNPjAmJnMoUyx4KSYmcyhFLHgpJiYoIV8uaGFzT3duUHJvcGVydHkoUyl8fCFfLmhhc093blByb3BlcnR5KEUpfHxfW1NdIT09X1tFXSkpe18uaGFzT3duUHJvcGVydHkoRSkmJihFPV9bRV0pLF8uaGFzT3duUHJvcGVydHkoUykmJihTPV9bU10pLEU9K0UsaFtTPStTXT1oW0VdPSEwO3ZhciBDPVwiXCI7YS5sYWJlbCYmYS5sYWJlbFtlXSYmKEM9YS5sYWJlbFtlXSk7dmFyIEw9bnVsbDtDJiZmLmhhc093blByb3BlcnR5KEMpJiYoTD1mW0NdKSxjLnB1c2goe3BvaW50TnVtYmVyOmUsbGFiZWw6Qyxjb2xvcjp1P2EuY29sb3JbZV06YS5jb2xvcixjb25jZW50cmF0aW9uc2NhbGU6TCxzb3VyY2U6Uyx0YXJnZXQ6RSx2YWx1ZTorTX0pLFQuc291cmNlLnB1c2goUyksVC50YXJnZXQucHVzaChFKX19dmFyIHo9eCtiLmxlbmd0aCxPPW8oci5jb2xvciksST1bXTtmb3IoZT0wO2U8ejtlKyspaWYoaFtlXSl7dmFyIEQ9ci5sYWJlbFtlXTtJLnB1c2goe2dyb3VwOmU+eC0xLGNoaWxkcmVuTm9kZXM6W10scG9pbnROdW1iZXI6ZSxsYWJlbDpELGNvbG9yOk8/ci5jb2xvcltlXTpyLmNvbG9yfSl9dmFyIFA9ITE7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGE9aS5pbml0MmRBcnJheSh0LDApLG89MDtvPE1hdGgubWluKGUubGVuZ3RoLHIubGVuZ3RoKTtvKyspaWYoaS5pc0luZGV4KGVbb10sdCkmJmkuaXNJbmRleChyW29dLHQpKXtpZihlW29dPT09cltvXSlyZXR1cm4hMDthW2Vbb11dLnB1c2gocltvXSl9cmV0dXJuIG4oYSkuY29tcG9uZW50cy5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aD4xfSl9KHosVC5zb3VyY2UsVC50YXJnZXQpJiYoUD0hMCkse2NpcmN1bGFyOlAsbGlua3M6Yyxub2RlczpJLGdyb3VwczpiLGdyb3VwTG9va3VwOl99fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWMoZSk7cmV0dXJuIGEoe2NpcmN1bGFyOnIuY2lyY3VsYXIsX25vZGVzOnIubm9kZXMsX2xpbmtzOnIubGlua3MsX2dyb3VwczpyLmdyb3VwcyxfZ3JvdXBMb29rdXA6ci5ncm91cExvb2t1cH0pfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlXCI6NTkwLFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2d1cFwiOjY5OSxcInN0cm9uZ2x5LWNvbm5lY3RlZC1jb21wb25lbnRzXCI6NTE1fV0sMTA0NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17bm9kZVRleHRPZmZzZXRIb3Jpem9udGFsOjQsbm9kZVRleHRPZmZzZXRWZXJ0aWNhbDozLG5vZGVQYWRBY3Jvc3M6MTAsc2Fua2V5SXRlcmF0aW9uczo1MCxmb3JjZUl0ZXJhdGlvbnM6NSxmb3JjZVRpY2tzUGVyRnJhbWU6MTAsZHVyYXRpb246NTAwLGVhc2U6XCJsaW5lYXJcIixjbjp7c2Fua2V5Olwic2Fua2V5XCIsc2Fua2V5TGlua3M6XCJzYW5rZXktbGlua3NcIixzYW5rZXlMaW5rOlwic2Fua2V5LWxpbmtcIixzYW5rZXlOb2RlU2V0Olwic2Fua2V5LW5vZGUtc2V0XCIsc2Fua2V5Tm9kZTpcInNhbmtleS1ub2RlXCIsbm9kZVJlY3Q6XCJub2RlLXJlY3RcIixub2RlQ2FwdHVyZTpcIm5vZGUtY2FwdHVyZVwiLG5vZGVDZW50ZXJlZDpcIm5vZGUtZW50ZXJlZFwiLG5vZGVMYWJlbEd1aWRlOlwibm9kZS1sYWJlbC1ndWlkZVwiLG5vZGVMYWJlbDpcIm5vZGUtbGFiZWxcIixub2RlTGFiZWxUZXh0UGF0aDpcIm5vZGUtbGFiZWwtdGV4dC1wYXRoXCJ9fX0se31dLDEwNDY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLG89dChcInRpbnljb2xvcjJcIikscz10KFwiLi4vLi4vcGxvdHMvZG9tYWluXCIpLmRlZmF1bHRzLGw9dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJsYWJlbF9kZWZhdWx0c1wiKSxjPXQoXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCIpLHU9dChcIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0c1wiKTtmdW5jdGlvbiBoKHQsZSl7ZnVuY3Rpb24gcihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaS5saW5rLmNvbG9yc2NhbGVzLHIsYSl9cihcImxhYmVsXCIpLHIoXCJjbWluXCIpLHIoXCJjbWF4XCIpLHIoXCJjb2xvcnNjYWxlXCIpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixmKXtmdW5jdGlvbiBwKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9dmFyIGQ9bi5leHRlbmREZWVwKGYuaG92ZXJsYWJlbCx0LmhvdmVybGFiZWwpLGc9dC5ub2RlLHY9Yy5uZXdDb250YWluZXIoZSxcIm5vZGVcIik7ZnVuY3Rpb24gbSh0LGUpe3JldHVybiBuLmNvZXJjZShnLHYsaS5ub2RlLHQsZSl9bShcImxhYmVsXCIpLG0oXCJncm91cHNcIiksbShcInhcIiksbShcInlcIiksbShcInBhZFwiKSxtKFwidGhpY2tuZXNzXCIpLG0oXCJsaW5lLmNvbG9yXCIpLG0oXCJsaW5lLndpZHRoXCIpLG0oXCJob3ZlcmluZm9cIix0LmhvdmVyaW5mbyksbChnLHYsbSxkKSxtKFwiaG92ZXJ0ZW1wbGF0ZVwiKTt2YXIgeT1mLmNvbG9yd2F5O20oXCJjb2xvclwiLHYubGFiZWwubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEuYWRkT3BhY2l0eShmdW5jdGlvbih0KXtyZXR1cm4geVt0JXkubGVuZ3RoXX0oZSksLjgpfSkpO3ZhciB4PXQubGlua3x8e30sYj1jLm5ld0NvbnRhaW5lcihlLFwibGlua1wiKTtmdW5jdGlvbiBfKHQsZSl7cmV0dXJuIG4uY29lcmNlKHgsYixpLmxpbmssdCxlKX1fKFwibGFiZWxcIiksXyhcInNvdXJjZVwiKSxfKFwidGFyZ2V0XCIpLF8oXCJ2YWx1ZVwiKSxfKFwibGluZS5jb2xvclwiKSxfKFwibGluZS53aWR0aFwiKSxfKFwiaG92ZXJpbmZvXCIsdC5ob3ZlcmluZm8pLGwoeCxiLF8sZCksXyhcImhvdmVydGVtcGxhdGVcIik7dmFyIHcsaz1vKGYucGFwZXJfYmdjb2xvcikuZ2V0THVtaW5hbmNlKCk8LjMzMz9cInJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KVwiOlwicmdiYSgwLCAwLCAwLCAwLjIpXCI7XyhcImNvbG9yXCIsbi5yZXBlYXQoayxiLnZhbHVlLmxlbmd0aCkpLHUoeCxiLHtuYW1lOlwiY29sb3JzY2FsZXNcIixoYW5kbGVJdGVtRGVmYXVsdHM6aH0pLHMoZSxmLHApLHAoXCJvcmllbnRhdGlvblwiKSxwKFwidmFsdWVmb3JtYXRcIikscChcInZhbHVlc3VmZml4XCIpLHYueC5sZW5ndGgmJnYueS5sZW5ndGgmJih3PVwiZnJlZWZvcm1cIikscChcImFycmFuZ2VtZW50XCIsdyksbi5jb2VyY2VGb250KHAsXCJ0ZXh0Zm9udFwiLG4uZXh0ZW5kRmxhdCh7fSxmLmZvbnQpKSxlLl9sZW5ndGg9bnVsbH19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVybGFiZWxfZGVmYXVsdHNcIjo2MTUsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlXCI6NzM5LFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCI6NzQ1LFwiLi4vLi4vcGxvdHMvZG9tYWluXCI6Nzc0LFwiLi9hdHRyaWJ1dGVzXCI6MTA0Mix0aW55Y29sb3IyOjUyMn1dLDEwNDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLG4uY2FsYz10KFwiLi9jYWxjXCIpLG4ucGxvdD10KFwiLi9wbG90XCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwic2Fua2V5XCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi9iYXNlX3Bsb3RcIiksbi5zZWxlY3RQb2ludHM9dChcIi4vc2VsZWN0LmpzXCIpLG4uY2F0ZWdvcmllcz1bXCJub09wYWNpdHlcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuL2F0dHJpYnV0ZXNcIjoxMDQyLFwiLi9iYXNlX3Bsb3RcIjoxMDQzLFwiLi9jYWxjXCI6MTA0NCxcIi4vZGVmYXVsdHNcIjoxMDQ2LFwiLi9wbG90XCI6MTA0OCxcIi4vc2VsZWN0LmpzXCI6MTA1MH1dLDEwNDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi9yZW5kZXJcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLHM9dChcIi4uLy4uL2xpYlwiKSxsPXQoXCIuL2NvbnN0YW50c1wiKS5jbixjPXMuXztmdW5jdGlvbiB1KHQpe3JldHVyblwiXCIhPT10fWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5PT09ZS50cmFjZUlkfSl9ZnVuY3Rpb24gZih0LGUpe24uc2VsZWN0KHQpLnNlbGVjdChcInBhdGhcIikuc3R5bGUoXCJmaWxsLW9wYWNpdHlcIixlKSxuLnNlbGVjdCh0KS5zZWxlY3QoXCJyZWN0XCIpLnN0eWxlKFwiZmlsbC1vcGFjaXR5XCIsZSl9ZnVuY3Rpb24gcCh0KXtuLnNlbGVjdCh0KS5zZWxlY3QoXCJ0ZXh0Lm5hbWVcIikuc3R5bGUoXCJmaWxsXCIsXCJibGFja1wiKX1mdW5jdGlvbiBkKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4tMSE9PXQubm9kZS5zb3VyY2VMaW5rcy5pbmRleE9mKGUubGluayl8fC0xIT09dC5ub2RlLnRhcmdldExpbmtzLmluZGV4T2YoZS5saW5rKX19ZnVuY3Rpb24gZyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuLTEhPT1lLm5vZGUuc291cmNlTGlua3MuaW5kZXhPZih0LmxpbmspfHwtMSE9PWUubm9kZS50YXJnZXRMaW5rcy5pbmRleE9mKHQubGluayl9fWZ1bmN0aW9uIHYodCxlLHIpe2UmJnImJmgocixlKS5zZWxlY3RBbGwoXCIuXCIrbC5zYW5rZXlMaW5rKS5maWx0ZXIoZChlKSkuY2FsbCh5LmJpbmQoMCxlLHIsITEpKX1mdW5jdGlvbiBtKHQsZSxyKXtlJiZyJiZoKHIsZSkuc2VsZWN0QWxsKFwiLlwiK2wuc2Fua2V5TGluaykuZmlsdGVyKGQoZSkpLmNhbGwoeC5iaW5kKDAsZSxyLCExKSl9ZnVuY3Rpb24geSh0LGUscixuKXt2YXIgaT1uLmRhdHVtKCkubGluay5sYWJlbDtuLnN0eWxlKFwiZmlsbC1vcGFjaXR5XCIsZnVuY3Rpb24odCl7aWYoIXQubGluay5jb25jZW50cmF0aW9uc2NhbGUpcmV0dXJuLjR9KSxpJiZoKGUsdCkuc2VsZWN0QWxsKFwiLlwiK2wuc2Fua2V5TGluaykuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpbmsubGFiZWw9PT1pfSkuc3R5bGUoXCJmaWxsLW9wYWNpdHlcIixmdW5jdGlvbih0KXtpZighdC5saW5rLmNvbmNlbnRyYXRpb25zY2FsZSlyZXR1cm4uNH0pLHImJmgoZSx0KS5zZWxlY3RBbGwoXCIuXCIrbC5zYW5rZXlOb2RlKS5maWx0ZXIoZyh0KSkuY2FsbCh2KX1mdW5jdGlvbiB4KHQsZSxyLG4pe3ZhciBpPW4uZGF0dW0oKS5saW5rLmxhYmVsO24uc3R5bGUoXCJmaWxsLW9wYWNpdHlcIixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JBbHBoYX0pLGkmJmgoZSx0KS5zZWxlY3RBbGwoXCIuXCIrbC5zYW5rZXlMaW5rKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQubGluay5sYWJlbD09PWl9KS5zdHlsZShcImZpbGwtb3BhY2l0eVwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbnlDb2xvckFscGhhfSksciYmaChlLHQpLnNlbGVjdEFsbChsLnNhbmtleU5vZGUpLmZpbHRlcihnKHQpKS5jYWxsKG0pfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj10LmhvdmVybGFiZWx8fHt9LG49cy5uZXN0ZWRQcm9wZXJ0eShyLGUpLmdldCgpO3JldHVybiFBcnJheS5pc0FycmF5KG4pJiZufWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Ll9mdWxsTGF5b3V0LHM9ci5fcGFwZXIsaD1yLl9zaXplLGQ9MDtkPGUubGVuZ3RoO2QrKylpZighdC5fZnVsbERhdGFbZF0uX3ZpZXdJbml0aWFsKXt2YXIgZz10Ll9mdWxsRGF0YVtkXS5ub2RlO3QuX2Z1bGxEYXRhW2RdLl92aWV3SW5pdGlhbD17bm9kZTp7Z3JvdXBzOmcuZ3JvdXBzLnNsaWNlKCkseDpnLnguc2xpY2UoKSx5OmcueS5zbGljZSgpfX19dmFyIF89Yyh0LFwic291cmNlOlwiKStcIiBcIix3PWModCxcInRhcmdldDpcIikrXCIgXCIsaz1jKHQsXCJjb25jZW50cmF0aW9uOlwiKStcIiBcIixBPWModCxcImluY29taW5nIGZsb3cgY291bnQ6XCIpK1wiIFwiLFQ9Yyh0LFwib3V0Z29pbmcgZmxvdyBjb3VudDpcIikrXCIgXCI7aSh0LHMsZSx7d2lkdGg6aC53LGhlaWdodDpoLmgsbWFyZ2luOnt0OmgudCxyOmgucixiOmguYixsOmgubH19LHtsaW5rRXZlbnRzOntob3ZlcjpmdW5jdGlvbihlLHIsaSl7ITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSYmKG4uc2VsZWN0KGUpLmNhbGwoeS5iaW5kKDAscixpLCEwKSksXCJza2lwXCIhPT1yLmxpbmsudHJhY2UubGluay5ob3ZlcmluZm8mJihyLmxpbmsuZnVsbERhdGE9ci5saW5rLnRyYWNlLHQuZW1pdChcInBsb3RseV9ob3ZlclwiLHtldmVudDpuLmV2ZW50LHBvaW50czpbci5saW5rXX0pKSl9LGZvbGxvdzpmdW5jdGlvbihlLGkpe2lmKCExIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGUpe3ZhciBzPWkubGluay50cmFjZS5saW5rO2lmKFwibm9uZVwiIT09cy5ob3ZlcmluZm8mJlwic2tpcFwiIT09cy5ob3ZlcmluZm8pe2Zvcih2YXIgbD1bXSxjPTAsaD0wO2g8aS5mbG93LmxpbmtzLmxlbmd0aDtoKyspe3ZhciBkPWkuZmxvdy5saW5rc1toXTtpZihcImNsb3Nlc3RcIiE9PXQuX2Z1bGxMYXlvdXQuaG92ZXJtb2RlfHxpLmxpbmsucG9pbnROdW1iZXI9PT1kLnBvaW50TnVtYmVyKXtpLmxpbmsucG9pbnROdW1iZXI9PT1kLnBvaW50TnVtYmVyJiYoYz1oKSxkLmZ1bGxEYXRhPWQudHJhY2Uscz1pLmxpbmsudHJhY2UubGluazt2YXIgZz1tKGQpLHY9e3ZhbHVlTGFiZWw6bi5mb3JtYXQoaS52YWx1ZUZvcm1hdCkoZC52YWx1ZSkraS52YWx1ZVN1ZmZpeH07bC5wdXNoKHt4OmdbMF0seTpnWzFdLG5hbWU6di52YWx1ZUxhYmVsLHRleHQ6W2QubGFiZWx8fFwiXCIsXytkLnNvdXJjZS5sYWJlbCx3K2QudGFyZ2V0LmxhYmVsLGQuY29uY2VudHJhdGlvbnNjYWxlP2srbi5mb3JtYXQoXCIlMC4yZlwiKShkLmZsb3cubGFiZWxDb25jZW50cmF0aW9uKTpcIlwiXS5maWx0ZXIodSkuam9pbihcIjxicj5cIiksY29sb3I6YihzLFwiYmdjb2xvclwiKXx8by5hZGRPcGFjaXR5KGQuY29sb3IsMSksYm9yZGVyQ29sb3I6YihzLFwiYm9yZGVyY29sb3JcIiksZm9udEZhbWlseTpiKHMsXCJmb250LmZhbWlseVwiKSxmb250U2l6ZTpiKHMsXCJmb250LnNpemVcIiksZm9udENvbG9yOmIocyxcImZvbnQuY29sb3JcIiksbmFtZUxlbmd0aDpiKHMsXCJuYW1lbGVuZ3RoXCIpLHRleHRBbGlnbjpiKHMsXCJhbGlnblwiKSxpZGVhbEFsaWduOm4uZXZlbnQueDxnWzBdP1wicmlnaHRcIjpcImxlZnRcIixob3ZlcnRlbXBsYXRlOnMuaG92ZXJ0ZW1wbGF0ZSxob3ZlcnRlbXBsYXRlTGFiZWxzOnYsZXZlbnREYXRhOltkXX0pfX1hLm11bHRpSG92ZXJzKGwse2NvbnRhaW5lcjpyLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpyLl9wYXBlci5ub2RlKCksZ2Q6dCxhbmNob3JJbmRleDpjfSkuZWFjaChmdW5jdGlvbigpe2kubGluay5jb25jZW50cmF0aW9uc2NhbGV8fGYodGhpcywuNjUpLHAodGhpcyl9KX19ZnVuY3Rpb24gbSh0KXt2YXIgZSxyO3JldHVybiB0LmNpcmN1bGFyPyhlPSh0LmNpcmN1bGFyUGF0aERhdGEubGVmdElubmVyRXh0ZW50K3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodElubmVyRXh0ZW50KS8yK2kucGFyZW50LnRyYW5zbGF0ZVgscj10LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K2kucGFyZW50LnRyYW5zbGF0ZVkpOihlPSh0LnNvdXJjZS54MSt0LnRhcmdldC54MCkvMitpLnBhcmVudC50cmFuc2xhdGVYLHI9KHQueTArdC55MSkvMitpLnBhcmVudC50cmFuc2xhdGVZKSxbZSxyXX19LHVuaG92ZXI6ZnVuY3Rpb24oZSxpLG8peyExIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGUmJihuLnNlbGVjdChlKS5jYWxsKHguYmluZCgwLGksbywhMCkpLFwic2tpcFwiIT09aS5saW5rLnRyYWNlLmxpbmsuaG92ZXJpbmZvJiYoaS5saW5rLmZ1bGxEYXRhPWkubGluay50cmFjZSx0LmVtaXQoXCJwbG90bHlfdW5ob3ZlclwiLHtldmVudDpuLmV2ZW50LHBvaW50czpbaS5saW5rXX0pKSxhLmxvbmVVbmhvdmVyKHIuX2hvdmVybGF5ZXIubm9kZSgpKSl9LHNlbGVjdDpmdW5jdGlvbihlLHIpe3ZhciBpPXIubGluaztpLm9yaWdpbmFsRXZlbnQ9bi5ldmVudCx0Ll9ob3ZlcmRhdGE9W2ldLGEuY2xpY2sodCx7dGFyZ2V0OiEwfSl9fSxub2RlRXZlbnRzOntob3ZlcjpmdW5jdGlvbihlLHIsaSl7ITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSYmKG4uc2VsZWN0KGUpLmNhbGwodixyLGkpLFwic2tpcFwiIT09ci5ub2RlLnRyYWNlLm5vZGUuaG92ZXJpbmZvJiYoci5ub2RlLmZ1bGxEYXRhPXIubm9kZS50cmFjZSx0LmVtaXQoXCJwbG90bHlfaG92ZXJcIix7ZXZlbnQ6bi5ldmVudCxwb2ludHM6W3Iubm9kZV19KSkpfSxmb2xsb3c6ZnVuY3Rpb24oZSxpKXtpZighMSE9PXQuX2Z1bGxMYXlvdXQuaG92ZXJtb2RlKXt2YXIgbz1pLm5vZGUudHJhY2Uubm9kZTtpZihcIm5vbmVcIiE9PW8uaG92ZXJpbmZvJiZcInNraXBcIiE9PW8uaG92ZXJpbmZvKXt2YXIgcz1uLnNlbGVjdChlKS5zZWxlY3QoXCIuXCIrbC5ub2RlUmVjdCksYz10Ll9mdWxsTGF5b3V0Ll9wYXBlcmRpdi5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaD1zLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPWgubGVmdC0yLWMubGVmdCxnPWgucmlnaHQrMi1jLmxlZnQsdj1oLnRvcCtoLmhlaWdodC80LWMudG9wLG09e3ZhbHVlTGFiZWw6bi5mb3JtYXQoaS52YWx1ZUZvcm1hdCkoaS5ub2RlLnZhbHVlKStpLnZhbHVlU3VmZml4fTtpLm5vZGUuZnVsbERhdGE9aS5ub2RlLnRyYWNlO3ZhciB5PWEubG9uZUhvdmVyKHt4MDpkLHgxOmcseTp2LG5hbWU6bi5mb3JtYXQoaS52YWx1ZUZvcm1hdCkoaS5ub2RlLnZhbHVlKStpLnZhbHVlU3VmZml4LHRleHQ6W2kubm9kZS5sYWJlbCxBK2kubm9kZS50YXJnZXRMaW5rcy5sZW5ndGgsVCtpLm5vZGUuc291cmNlTGlua3MubGVuZ3RoXS5maWx0ZXIodSkuam9pbihcIjxicj5cIiksY29sb3I6YihvLFwiYmdjb2xvclwiKXx8aS50aW55Q29sb3JIdWUsYm9yZGVyQ29sb3I6YihvLFwiYm9yZGVyY29sb3JcIiksZm9udEZhbWlseTpiKG8sXCJmb250LmZhbWlseVwiKSxmb250U2l6ZTpiKG8sXCJmb250LnNpemVcIiksZm9udENvbG9yOmIobyxcImZvbnQuY29sb3JcIiksbmFtZUxlbmd0aDpiKG8sXCJuYW1lbGVuZ3RoXCIpLHRleHRBbGlnbjpiKG8sXCJhbGlnblwiKSxpZGVhbEFsaWduOlwibGVmdFwiLGhvdmVydGVtcGxhdGU6by5ob3ZlcnRlbXBsYXRlLGhvdmVydGVtcGxhdGVMYWJlbHM6bSxldmVudERhdGE6W2kubm9kZV19LHtjb250YWluZXI6ci5faG92ZXJsYXllci5ub2RlKCksb3V0ZXJDb250YWluZXI6ci5fcGFwZXIubm9kZSgpLGdkOnR9KTtmKHksLjg1KSxwKHkpfX19LHVuaG92ZXI6ZnVuY3Rpb24oZSxpLG8peyExIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGUmJihuLnNlbGVjdChlKS5jYWxsKG0saSxvKSxcInNraXBcIiE9PWkubm9kZS50cmFjZS5ub2RlLmhvdmVyaW5mbyYmKGkubm9kZS5mdWxsRGF0YT1pLm5vZGUudHJhY2UsdC5lbWl0KFwicGxvdGx5X3VuaG92ZXJcIix7ZXZlbnQ6bi5ldmVudCxwb2ludHM6W2kubm9kZV19KSksYS5sb25lVW5ob3ZlcihyLl9ob3ZlcmxheWVyLm5vZGUoKSkpfSxzZWxlY3Q6ZnVuY3Rpb24oZSxyLGkpe3ZhciBvPXIubm9kZTtvLm9yaWdpbmFsRXZlbnQ9bi5ldmVudCx0Ll9ob3ZlcmRhdGE9W29dLG4uc2VsZWN0KGUpLmNhbGwobSxyLGkpLGEuY2xpY2sodCx7dGFyZ2V0OiEwfSl9fX0pfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9saWJcIjo3MDEsXCIuL2NvbnN0YW50c1wiOjEwNDUsXCIuL3JlbmRlclwiOjEwNDksZDM6MTU1fV0sMTA0OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2NvbnN0YW50c1wiKSxpPXQoXCJkM1wiKSxhPXQoXCJ0aW55Y29sb3IyXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIikscz10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLGw9dChcIkBwbG90bHkvZDMtc2Fua2V5XCIpLGM9dChcImQzLXNhbmtleS1jaXJjdWxhclwiKSx1PXQoXCJkMy1mb3JjZVwiKSxoPXQoXCIuLi8uLi9saWJcIiksZj10KFwiLi4vLi4vbGliL2d1cFwiKSxwPWYua2V5RnVuLGQ9Zi5yZXBlYXQsZz1mLnVud3JhcCx2PXQoXCJkMy1pbnRlcnBvbGF0ZVwiKS5pbnRlcnBvbGF0ZU51bWJlcixtPXQoXCIuLi8uLi9yZWdpc3RyeVwiKTtmdW5jdGlvbiB5KCl7dmFyIHQ9LjU7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKGUubGluay5jaXJjdWxhcilyZXR1cm4gcj1lLmxpbmssbj1yLndpZHRoLzIsaT1yLmNpcmN1bGFyUGF0aERhdGEsXCJ0b3BcIj09PXIuY2lyY3VsYXJMaW5rVHlwZT9cIk0gXCIraS50YXJnZXRYK1wiIFwiKyhpLnRhcmdldFkrbikrXCIgTFwiK2kucmlnaHRJbm5lckV4dGVudCtcIiBcIisoaS50YXJnZXRZK24pK1wiQVwiKyhpLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrbikrXCIgXCIrKGkucmlnaHRTbWFsbEFyY1JhZGl1cytuKStcIiAwIDAgMSBcIisoaS5yaWdodEZ1bGxFeHRlbnQtbikrXCIgXCIrKGkudGFyZ2V0WS1pLnJpZ2h0U21hbGxBcmNSYWRpdXMpK1wiTFwiKyhpLnJpZ2h0RnVsbEV4dGVudC1uKStcIiBcIitpLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudCtcIkFcIisoaS5yaWdodExhcmdlQXJjUmFkaXVzK24pK1wiIFwiKyhpLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrbikrXCIgMCAwIDEgXCIraS5yaWdodElubmVyRXh0ZW50K1wiIFwiKyhpLnZlcnRpY2FsRnVsbEV4dGVudC1uKStcIkxcIitpLmxlZnRJbm5lckV4dGVudCtcIiBcIisoaS52ZXJ0aWNhbEZ1bGxFeHRlbnQtbikrXCJBXCIrKGkubGVmdExhcmdlQXJjUmFkaXVzK24pK1wiIFwiKyhpLmxlZnRMYXJnZUFyY1JhZGl1cytuKStcIiAwIDAgMSBcIisoaS5sZWZ0RnVsbEV4dGVudCtuKStcIiBcIitpLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50K1wiTFwiKyhpLmxlZnRGdWxsRXh0ZW50K24pK1wiIFwiKyhpLnNvdXJjZVktaS5sZWZ0U21hbGxBcmNSYWRpdXMpK1wiQVwiKyhpLmxlZnRMYXJnZUFyY1JhZGl1cytuKStcIiBcIisoaS5sZWZ0U21hbGxBcmNSYWRpdXMrbikrXCIgMCAwIDEgXCIraS5sZWZ0SW5uZXJFeHRlbnQrXCIgXCIrKGkuc291cmNlWStuKStcIkxcIitpLnNvdXJjZVgrXCIgXCIrKGkuc291cmNlWStuKStcIkxcIitpLnNvdXJjZVgrXCIgXCIrKGkuc291cmNlWS1uKStcIkxcIitpLmxlZnRJbm5lckV4dGVudCtcIiBcIisoaS5zb3VyY2VZLW4pK1wiQVwiKyhpLmxlZnRMYXJnZUFyY1JhZGl1cy1uKStcIiBcIisoaS5sZWZ0U21hbGxBcmNSYWRpdXMtbikrXCIgMCAwIDAgXCIrKGkubGVmdEZ1bGxFeHRlbnQtbikrXCIgXCIrKGkuc291cmNlWS1pLmxlZnRTbWFsbEFyY1JhZGl1cykrXCJMXCIrKGkubGVmdEZ1bGxFeHRlbnQtbikrXCIgXCIraS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudCtcIkFcIisoaS5sZWZ0TGFyZ2VBcmNSYWRpdXMtbikrXCIgXCIrKGkubGVmdExhcmdlQXJjUmFkaXVzLW4pK1wiIDAgMCAwIFwiK2kubGVmdElubmVyRXh0ZW50K1wiIFwiKyhpLnZlcnRpY2FsRnVsbEV4dGVudCtuKStcIkxcIitpLnJpZ2h0SW5uZXJFeHRlbnQrXCIgXCIrKGkudmVydGljYWxGdWxsRXh0ZW50K24pK1wiQVwiKyhpLnJpZ2h0TGFyZ2VBcmNSYWRpdXMtbikrXCIgXCIrKGkucmlnaHRMYXJnZUFyY1JhZGl1cy1uKStcIiAwIDAgMCBcIisoaS5yaWdodEZ1bGxFeHRlbnQrbikrXCIgXCIraS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQrXCJMXCIrKGkucmlnaHRGdWxsRXh0ZW50K24pK1wiIFwiKyhpLnRhcmdldFktaS5yaWdodFNtYWxsQXJjUmFkaXVzKStcIkFcIisoaS5yaWdodExhcmdlQXJjUmFkaXVzLW4pK1wiIFwiKyhpLnJpZ2h0U21hbGxBcmNSYWRpdXMtbikrXCIgMCAwIDAgXCIraS5yaWdodElubmVyRXh0ZW50K1wiIFwiKyhpLnRhcmdldFktbikrXCJMXCIraS50YXJnZXRYK1wiIFwiKyhpLnRhcmdldFktbikrXCJaXCI6XCJNIFwiK2kudGFyZ2V0WCtcIiBcIisoaS50YXJnZXRZLW4pK1wiIExcIitpLnJpZ2h0SW5uZXJFeHRlbnQrXCIgXCIrKGkudGFyZ2V0WS1uKStcIkFcIisoaS5yaWdodExhcmdlQXJjUmFkaXVzK24pK1wiIFwiKyhpLnJpZ2h0U21hbGxBcmNSYWRpdXMrbikrXCIgMCAwIDAgXCIrKGkucmlnaHRGdWxsRXh0ZW50LW4pK1wiIFwiKyhpLnRhcmdldFkraS5yaWdodFNtYWxsQXJjUmFkaXVzKStcIkxcIisoaS5yaWdodEZ1bGxFeHRlbnQtbikrXCIgXCIraS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQrXCJBXCIrKGkucmlnaHRMYXJnZUFyY1JhZGl1cytuKStcIiBcIisoaS5yaWdodExhcmdlQXJjUmFkaXVzK24pK1wiIDAgMCAwIFwiK2kucmlnaHRJbm5lckV4dGVudCtcIiBcIisoaS52ZXJ0aWNhbEZ1bGxFeHRlbnQrbikrXCJMXCIraS5sZWZ0SW5uZXJFeHRlbnQrXCIgXCIrKGkudmVydGljYWxGdWxsRXh0ZW50K24pK1wiQVwiKyhpLmxlZnRMYXJnZUFyY1JhZGl1cytuKStcIiBcIisoaS5sZWZ0TGFyZ2VBcmNSYWRpdXMrbikrXCIgMCAwIDAgXCIrKGkubGVmdEZ1bGxFeHRlbnQrbikrXCIgXCIraS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudCtcIkxcIisoaS5sZWZ0RnVsbEV4dGVudCtuKStcIiBcIisoaS5zb3VyY2VZK2kubGVmdFNtYWxsQXJjUmFkaXVzKStcIkFcIisoaS5sZWZ0TGFyZ2VBcmNSYWRpdXMrbikrXCIgXCIrKGkubGVmdFNtYWxsQXJjUmFkaXVzK24pK1wiIDAgMCAwIFwiK2kubGVmdElubmVyRXh0ZW50K1wiIFwiKyhpLnNvdXJjZVktbikrXCJMXCIraS5zb3VyY2VYK1wiIFwiKyhpLnNvdXJjZVktbikrXCJMXCIraS5zb3VyY2VYK1wiIFwiKyhpLnNvdXJjZVkrbikrXCJMXCIraS5sZWZ0SW5uZXJFeHRlbnQrXCIgXCIrKGkuc291cmNlWStuKStcIkFcIisoaS5sZWZ0TGFyZ2VBcmNSYWRpdXMtbikrXCIgXCIrKGkubGVmdFNtYWxsQXJjUmFkaXVzLW4pK1wiIDAgMCAxIFwiKyhpLmxlZnRGdWxsRXh0ZW50LW4pK1wiIFwiKyhpLnNvdXJjZVkraS5sZWZ0U21hbGxBcmNSYWRpdXMpK1wiTFwiKyhpLmxlZnRGdWxsRXh0ZW50LW4pK1wiIFwiK2kudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQrXCJBXCIrKGkubGVmdExhcmdlQXJjUmFkaXVzLW4pK1wiIFwiKyhpLmxlZnRMYXJnZUFyY1JhZGl1cy1uKStcIiAwIDAgMSBcIitpLmxlZnRJbm5lckV4dGVudCtcIiBcIisoaS52ZXJ0aWNhbEZ1bGxFeHRlbnQtbikrXCJMXCIraS5yaWdodElubmVyRXh0ZW50K1wiIFwiKyhpLnZlcnRpY2FsRnVsbEV4dGVudC1uKStcIkFcIisoaS5yaWdodExhcmdlQXJjUmFkaXVzLW4pK1wiIFwiKyhpLnJpZ2h0TGFyZ2VBcmNSYWRpdXMtbikrXCIgMCAwIDEgXCIrKGkucmlnaHRGdWxsRXh0ZW50K24pK1wiIFwiK2kudmVydGljYWxSaWdodElubmVyRXh0ZW50K1wiTFwiKyhpLnJpZ2h0RnVsbEV4dGVudCtuKStcIiBcIisoaS50YXJnZXRZK2kucmlnaHRTbWFsbEFyY1JhZGl1cykrXCJBXCIrKGkucmlnaHRMYXJnZUFyY1JhZGl1cy1uKStcIiBcIisoaS5yaWdodFNtYWxsQXJjUmFkaXVzLW4pK1wiIDAgMCAxIFwiK2kucmlnaHRJbm5lckV4dGVudCtcIiBcIisoaS50YXJnZXRZK24pK1wiTFwiK2kudGFyZ2V0WCtcIiBcIisoaS50YXJnZXRZK24pK1wiWlwiO3ZhciByLG4saSxhPWUubGluay5zb3VyY2UueDEsbz1lLmxpbmsudGFyZ2V0LngwLHM9dihhLG8pLGw9cyh0KSxjPXMoMS10KSx1PWUubGluay55MC1lLmxpbmsud2lkdGgvMixoPWUubGluay55MCtlLmxpbmsud2lkdGgvMixmPWUubGluay55MS1lLmxpbmsud2lkdGgvMixwPWUubGluay55MStlLmxpbmsud2lkdGgvMjtyZXR1cm5cIk1cIithK1wiLFwiK3UrXCJDXCIrbCtcIixcIit1K1wiIFwiK2MrXCIsXCIrZitcIiBcIitvK1wiLFwiK2YrXCJMXCIrbytcIixcIitwK1wiQ1wiK2MrXCIsXCIrcCtcIiBcIitsK1wiLFwiK2grXCIgXCIrYStcIixcIitoK1wiWlwifX1mdW5jdGlvbiB4KHQpe3QuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKFwiK3Qubm9kZS54MC50b0ZpeGVkKDMpK1wiLCBcIit0Lm5vZGUueTAudG9GaXhlZCgzKStcIilcIn0pfWZ1bmN0aW9uIGIodCl7dC5jYWxsKHgpfWZ1bmN0aW9uIF8odCxlKXt0LmNhbGwoYiksZS5hdHRyKFwiZFwiLHkoKSl9ZnVuY3Rpb24gdyh0KXt0LmF0dHIoXCJ3aWR0aFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGUueDEtdC5ub2RlLngwfSkuYXR0cihcImhlaWdodFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGVIZWlnaHR9KX1mdW5jdGlvbiBrKHQpe3JldHVybiB0Lmxpbmsud2lkdGg+MXx8dC5saW5rTGluZVdpZHRoPjB9ZnVuY3Rpb24gQSh0KXtyZXR1cm5cInRyYW5zbGF0ZShcIit0LnRyYW5zbGF0ZVgrXCIsXCIrdC50cmFuc2xhdGVZK1wiKVwiKyh0Lmhvcml6b250YWw/XCJtYXRyaXgoMSAwIDAgMSAwIDApXCI6XCJtYXRyaXgoMCAxIDEgMCAwIDApXCIpfWZ1bmN0aW9uIFQodCl7cmV0dXJuXCJ0cmFuc2xhdGUoXCIrKHQuaG9yaXpvbnRhbD8wOnQubGFiZWxZKStcIiBcIisodC5ob3Jpem9udGFsP3QubGFiZWxZOjApK1wiKVwifWZ1bmN0aW9uIE0odCl7cmV0dXJuIGkuc3ZnLmxpbmUoKShbW3QuaG9yaXpvbnRhbD90LmxlZnQ/LXQuc2l6ZUFjcm9zczp0LnZpc2libGVXaWR0aCtuLm5vZGVUZXh0T2Zmc2V0SG9yaXpvbnRhbDpuLm5vZGVUZXh0T2Zmc2V0SG9yaXpvbnRhbCwwXSxbdC5ob3Jpem9udGFsP3QubGVmdD8tbi5ub2RlVGV4dE9mZnNldEhvcml6b250YWw6dC5zaXplQWNyb3NzOnQudmlzaWJsZUhlaWdodC1uLm5vZGVUZXh0T2Zmc2V0SG9yaXpvbnRhbCwwXV0pfWZ1bmN0aW9uIFModCl7cmV0dXJuIHQuaG9yaXpvbnRhbD9cIm1hdHJpeCgxIDAgMCAxIDAgMClcIjpcIm1hdHJpeCgwIDEgMSAwIDAgMClcIn1mdW5jdGlvbiBFKHQpe3JldHVybiB0Lmhvcml6b250YWw/XCJzY2FsZSgxIDEpXCI6XCJzY2FsZSgtMSAxKVwifWZ1bmN0aW9uIEModCl7cmV0dXJuIHQuZGFya0JhY2tncm91bmQmJiF0Lmhvcml6b250YWw/XCJyZ2IoMjU1LDI1NSwyNTUpXCI6XCJyZ2IoMCwwLDApXCJ9ZnVuY3Rpb24gTCh0KXtyZXR1cm4gdC5ob3Jpem9udGFsJiZ0LmxlZnQ/XCIxMDAlXCI6XCIwJVwifWZ1bmN0aW9uIHoodCxlLHIpe3Qub24oXCIuYmFzaWNcIixudWxsKS5vbihcIm1vdXNlb3Zlci5iYXNpY1wiLGZ1bmN0aW9uKHQpe3QuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzc3x8dC5wYXJ0T2ZHcm91cHx8KHIuaG92ZXIodGhpcyx0LGUpLHQuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkPVt0aGlzLHRdKX0pLm9uKFwibW91c2Vtb3ZlLmJhc2ljXCIsZnVuY3Rpb24odCl7dC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzfHx0LnBhcnRPZkdyb3VwfHwoci5mb2xsb3codGhpcyx0KSx0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD1bdGhpcyx0XSl9KS5vbihcIm1vdXNlb3V0LmJhc2ljXCIsZnVuY3Rpb24odCl7dC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzfHx0LnBhcnRPZkdyb3VwfHwoci51bmhvdmVyKHRoaXMsdCxlKSx0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD0hMSl9KS5vbihcImNsaWNrLmJhc2ljXCIsZnVuY3Rpb24odCl7dC5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQmJihyLnVuaG92ZXIodGhpcyx0LGUpLHQuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkPSExKSx0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3N8fHQucGFydE9mR3JvdXB8fHIuc2VsZWN0KHRoaXMsdCxlKX0pfWZ1bmN0aW9uIE8odCxlLHIsYSl7dmFyIG89aS5iZWhhdmlvci5kcmFnKCkub3JpZ2luKGZ1bmN0aW9uKHQpe3JldHVybnt4OnQubm9kZS54MCt0LnZpc2libGVXaWR0aC8yLHk6dC5ub2RlLnkwK3QudmlzaWJsZUhlaWdodC8yfX0pLm9uKFwiZHJhZ3N0YXJ0XCIsZnVuY3Rpb24oaSl7aWYoXCJmaXhlZFwiIT09aS5hcnJhbmdlbWVudCYmKGguZW5zdXJlU2luZ2xlKGEuX2Z1bGxMYXlvdXQuX2luZm9sYXllcixcImdcIixcImRyYWdjb3ZlclwiLGZ1bmN0aW9uKHQpe2EuX2Z1bGxMYXlvdXQuX2RyYWdDb3Zlcj10fSksaC5yYWlzZVRvVG9wKHRoaXMpLGkuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzcz1pLm5vZGUsRChpLm5vZGUpLGkuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkJiYoci5ub2RlRXZlbnRzLnVuaG92ZXIuYXBwbHkoMCxpLmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZCksaS5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQ9ITEpLFwic25hcFwiPT09aS5hcnJhbmdlbWVudCkpe3ZhciBvPWkudHJhY2VJZCtcInxcIitpLmtleTtpLmZvcmNlTGF5b3V0c1tvXT9pLmZvcmNlTGF5b3V0c1tvXS5hbHBoYSgxKTpmdW5jdGlvbih0LGUscixpKXshZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS55PSh0W2VdLnkwK3RbZV0ueTEpLzIsdFtlXS54PSh0W2VdLngwK3RbZV0ueDEpLzJ9KHIuZ3JhcGgubm9kZXMpO3ZhciBhPXIuZ3JhcGgubm9kZXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm9yaWdpbmFsWD09PXIubm9kZS5vcmlnaW5hbFh9KS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQucGFydE9mR3JvdXB9KTtyLmZvcmNlTGF5b3V0c1tlXT11LmZvcmNlU2ltdWxhdGlvbihhKS5hbHBoYURlY2F5KDApLmZvcmNlKFwiY29sbGlkZVwiLHUuZm9yY2VDb2xsaWRlKCkucmFkaXVzKGZ1bmN0aW9uKHQpe3JldHVybiB0LmR5LzIrci5ub2RlUGFkLzJ9KS5zdHJlbmd0aCgxKS5pdGVyYXRpb25zKG4uZm9yY2VJdGVyYXRpb25zKSkuZm9yY2UoXCJjb25zdHJhaW5cIixmdW5jdGlvbih0LGUscixpKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBvPXJbYV07bz09PWkuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzcz8oby54PW8ubGFzdERyYWdnZWRYLG8ueT1vLmxhc3REcmFnZ2VkWSk6KG8udng9KG8ub3JpZ2luYWxYLW8ueCkvbi5mb3JjZVRpY2tzUGVyRnJhbWUsby55PU1hdGgubWluKGkuc2l6ZS1vLmR5LzIsTWF0aC5tYXgoby5keS8yLG8ueSkpKSx0PU1hdGgubWF4KHQsTWF0aC5hYnMoby52eCksTWF0aC5hYnMoby52eSkpfSFpLmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3MmJnQ8LjEmJmkuZm9yY2VMYXlvdXRzW2VdLmFscGhhKCk+MCYmaS5mb3JjZUxheW91dHNbZV0uYWxwaGEoMCl9fSgwLGUsYSxyKSkuc3RvcCgpfSgwLG8saSksZnVuY3Rpb24odCxlLHIsaSxhKXt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIG8oKXt2YXIgcztmb3Iocz0wO3M8bi5mb3JjZVRpY2tzUGVyRnJhbWU7cysrKXIuZm9yY2VMYXlvdXRzW2ldLnRpY2soKTt2YXIgbD1yLmdyYXBoLm5vZGVzO2lmKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0ueTA9dFtlXS55LXRbZV0uZHkvMix0W2VdLnkxPXRbZV0ueTArdFtlXS5keSx0W2VdLngwPXRbZV0ueC10W2VdLmR4LzIsdFtlXS54MT10W2VdLngwK3RbZV0uZHh9KGwpLHIuc2Fua2V5LnVwZGF0ZShyLmdyYXBoKSxfKHQuZmlsdGVyKFAocikpLGUpLHIuZm9yY2VMYXlvdXRzW2ldLmFscGhhKCk+MCl3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG8pO2Vsc2V7dmFyIGM9ci5ub2RlLm9yaWdpbmFsWDtyLm5vZGUueDA9Yy1yLnZpc2libGVXaWR0aC8yLHIubm9kZS54MT1jK3IudmlzaWJsZVdpZHRoLzIsSShyLGEpfX0pfSh0LGUsaSxvLGEpfX0pLm9uKFwiZHJhZ1wiLGZ1bmN0aW9uKHIpe2lmKFwiZml4ZWRcIiE9PXIuYXJyYW5nZW1lbnQpe3ZhciBuPWkuZXZlbnQueCxhPWkuZXZlbnQueTtcInNuYXBcIj09PXIuYXJyYW5nZW1lbnQ/KHIubm9kZS54MD1uLXIudmlzaWJsZVdpZHRoLzIsci5ub2RlLngxPW4rci52aXNpYmxlV2lkdGgvMixyLm5vZGUueTA9YS1yLnZpc2libGVIZWlnaHQvMixyLm5vZGUueTE9YStyLnZpc2libGVIZWlnaHQvMik6KFwiZnJlZWZvcm1cIj09PXIuYXJyYW5nZW1lbnQmJihyLm5vZGUueDA9bi1yLnZpc2libGVXaWR0aC8yLHIubm9kZS54MT1uK3IudmlzaWJsZVdpZHRoLzIpLGE9TWF0aC5tYXgoMCxNYXRoLm1pbihyLnNpemUtci52aXNpYmxlSGVpZ2h0LzIsYSkpLHIubm9kZS55MD1hLXIudmlzaWJsZUhlaWdodC8yLHIubm9kZS55MT1hK3IudmlzaWJsZUhlaWdodC8yKSxEKHIubm9kZSksXCJzbmFwXCIhPT1yLmFycmFuZ2VtZW50JiYoci5zYW5rZXkudXBkYXRlKHIuZ3JhcGgpLF8odC5maWx0ZXIoUChyKSksZSkpfX0pLm9uKFwiZHJhZ2VuZFwiLGZ1bmN0aW9uKHQpe2lmKFwiZml4ZWRcIiE9PXQuYXJyYW5nZW1lbnQpe3QuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzcz0hMTtmb3IodmFyIGU9MDtlPHQubm9kZS5jaGlsZHJlbk5vZGVzLmxlbmd0aDtlKyspdC5ub2RlLmNoaWxkcmVuTm9kZXNbZV0ueD10Lm5vZGUueCx0Lm5vZGUuY2hpbGRyZW5Ob2Rlc1tlXS55PXQubm9kZS55O1wic25hcFwiIT09dC5hcnJhbmdlbWVudCYmSSh0LGEpfX0pO3Qub24oXCIuZHJhZ1wiLG51bGwpLmNhbGwobyl9ZnVuY3Rpb24gSSh0LGUpe2Zvcih2YXIgcj1bXSxuPVtdLGk9MDtpPHQuZ3JhcGgubm9kZXMubGVuZ3RoO2krKyl7dmFyIGE9KHQuZ3JhcGgubm9kZXNbaV0ueDArdC5ncmFwaC5ub2Rlc1tpXS54MSkvMixvPSh0LmdyYXBoLm5vZGVzW2ldLnkwK3QuZ3JhcGgubm9kZXNbaV0ueTEpLzI7ci5wdXNoKGEvdC5maWd1cmUud2lkdGgpLG4ucHVzaChvL3QuZmlndXJlLmhlaWdodCl9bS5jYWxsKFwiX2d1aVJlc3R5bGVcIixlLHtcIm5vZGUueFwiOltyXSxcIm5vZGUueVwiOltuXX0sdC50cmFjZS5pbmRleCkudGhlbihmdW5jdGlvbigpe2UuX2Z1bGxMYXlvdXQuX2RyYWdDb3ZlciYmZS5fZnVsbExheW91dC5fZHJhZ0NvdmVyLnJlbW92ZSgpfSl9ZnVuY3Rpb24gRCh0KXt0Lmxhc3REcmFnZ2VkWD10LngwK3QuZHgvMix0Lmxhc3REcmFnZ2VkWT10LnkwK3QuZHkvMn1mdW5jdGlvbiBQKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlLm9yaWdpbmFsWD09PXQubm9kZS5vcmlnaW5hbFh9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1LGYpe3ZhciB2PSExO2guZW5zdXJlU2luZ2xlKHQuX2Z1bGxMYXlvdXQuX2luZm9sYXllcixcImdcIixcImZpcnN0LXJlbmRlclwiLGZ1bmN0aW9uKCl7dj0hMH0pO3ZhciBtPXQuX2Z1bGxMYXlvdXQuX2RyYWdDb3ZlcixiPXIuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBnKHQpLnRyYWNlLnZpc2libGV9KS5tYXAoZnVuY3Rpb24odCxlLHIpe3ZhciBpLG89ZyhlKSxzPW8udHJhY2UsdT1zLmRvbWFpbixmPVwiaFwiPT09cy5vcmllbnRhdGlvbixwPXMubm9kZS5wYWQsZD1zLm5vZGUudGhpY2tuZXNzLHY9dC53aWR0aCoodS54WzFdLXUueFswXSksbT10LmhlaWdodCoodS55WzFdLXUueVswXSkseT1vLl9ub2Rlcyx4PW8uX2xpbmtzLGI9by5jaXJjdWxhcjsoaT1iP2Muc2Fua2V5Q2lyY3VsYXIoKS5jaXJjdWxhckxpbmtHYXAoMCk6bC5zYW5rZXkoKSkuaXRlcmF0aW9ucyhuLnNhbmtleUl0ZXJhdGlvbnMpLnNpemUoZj9bdixtXTpbbSx2XSkubm9kZVdpZHRoKGQpLm5vZGVQYWRkaW5nKHApLm5vZGVJZChmdW5jdGlvbih0KXtyZXR1cm4gdC5wb2ludE51bWJlcn0pLm5vZGVzKHkpLmxpbmtzKHgpO3ZhciBfLHcsayxBPWkoKTtmb3IodmFyIFQgaW4gaS5ub2RlUGFkZGluZygpPHAmJmgud2FybihcIm5vZGUucGFkIHdhcyByZWR1Y2VkIHRvIFwiLGkubm9kZVBhZGRpbmcoKSxcIiB0byBmaXQgd2l0aGluIHRoZSBmaWd1cmUuXCIpLG8uX2dyb3VwTG9va3VwKXt2YXIgTSxTPXBhcnNlSW50KG8uX2dyb3VwTG9va3VwW1RdKTtmb3IoXz0wO188QS5ub2Rlcy5sZW5ndGg7XysrKWlmKEEubm9kZXNbX10ucG9pbnROdW1iZXI9PT1TKXtNPUEubm9kZXNbX107YnJlYWt9aWYoTSl7dmFyIEU9e3BvaW50TnVtYmVyOnBhcnNlSW50KFQpLHgwOk0ueDAseDE6TS54MSx5MDpNLnkwLHkxOk0ueTEscGFydE9mR3JvdXA6ITAsc291cmNlTGlua3M6W10sdGFyZ2V0TGlua3M6W119O0Eubm9kZXMudW5zaGlmdChFKSxNLmNoaWxkcmVuTm9kZXMudW5zaGlmdChFKX19aWYoZnVuY3Rpb24oKXtmb3IoXz0wO188QS5ub2Rlcy5sZW5ndGg7XysrKXt2YXIgdCxlLHI9QS5ub2Rlc1tfXSxuPXt9O2Zvcih3PTA7dzxyLnRhcmdldExpbmtzLmxlbmd0aDt3KyspdD0oZT1yLnRhcmdldExpbmtzW3ddKS5zb3VyY2UucG9pbnROdW1iZXIrXCI6XCIrZS50YXJnZXQucG9pbnROdW1iZXIsbi5oYXNPd25Qcm9wZXJ0eSh0KXx8KG5bdF09W10pLG5bdF0ucHVzaChlKTt2YXIgaT1PYmplY3Qua2V5cyhuKTtmb3Iodz0wO3c8aS5sZW5ndGg7dysrKXt2YXIgbz1uW3Q9aVt3XV0scz0wLGw9e307Zm9yKGs9MDtrPG8ubGVuZ3RoO2srKylsWyhlPW9ba10pLmxhYmVsXXx8KGxbZS5sYWJlbF09MCksbFtlLmxhYmVsXSs9ZS52YWx1ZSxzKz1lLnZhbHVlO2ZvcihrPTA7azxvLmxlbmd0aDtrKyspKGU9b1trXSkuZmxvdz17dmFsdWU6cyxsYWJlbENvbmNlbnRyYXRpb246bFtlLmxhYmVsXS9zLGNvbmNlbnRyYXRpb246ZS52YWx1ZS9zLGxpbmtzOm99LGUuY29uY2VudHJhdGlvbnNjYWxlJiYoZS5jb2xvcj1hKGUuY29uY2VudHJhdGlvbnNjYWxlKGUuZmxvdy5sYWJlbENvbmNlbnRyYXRpb24pKSl9dmFyIGM9MDtmb3Iodz0wO3c8ci5zb3VyY2VMaW5rcy5sZW5ndGg7dysrKWMrPXIuc291cmNlTGlua3Nbd10udmFsdWU7Zm9yKHc9MDt3PHIuc291cmNlTGlua3MubGVuZ3RoO3crKykoZT1yLnNvdXJjZUxpbmtzW3ddKS5jb25jZW50cmF0aW9uT3V0PWUudmFsdWUvYzt2YXIgdT0wO2Zvcih3PTA7dzxyLnRhcmdldExpbmtzLmxlbmd0aDt3KyspdSs9ci50YXJnZXRMaW5rc1t3XS52YWx1ZTtmb3Iodz0wO3c8ci50YXJnZXRMaW5rcy5sZW5ndGg7dysrKShlPXIudGFyZ2V0TGlua3Nbd10pLmNvbmNlbnJhdGlvbkluPWUudmFsdWUvdX19KCkscy5ub2RlLngubGVuZ3RoJiZzLm5vZGUueS5sZW5ndGgpe2ZvcihfPTA7XzxNYXRoLm1pbihzLm5vZGUueC5sZW5ndGgscy5ub2RlLnkubGVuZ3RoLEEubm9kZXMubGVuZ3RoKTtfKyspaWYocy5ub2RlLnhbX10mJnMubm9kZS55W19dKXt2YXIgQz1bcy5ub2RlLnhbX10qdixzLm5vZGUueVtfXSptXTtBLm5vZGVzW19dLngwPUNbMF0tZC8yLEEubm9kZXNbX10ueDE9Q1swXStkLzI7dmFyIEw9QS5ub2Rlc1tfXS55MS1BLm5vZGVzW19dLnkwO0Eubm9kZXNbX10ueTA9Q1sxXS1MLzIsQS5ub2Rlc1tfXS55MT1DWzFdK0wvMn1cInNuYXBcIj09PXMuYXJyYW5nZW1lbnQmJmZ1bmN0aW9uKHQpe3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZSxyLG4saT0wLGE9dC5sZW5ndGg7Zm9yKHQuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LnkwLWUueTB9KSxuPTA7bjxhOysrbikoZT10W25dKS55MD49aXx8KHI9aS1lLnkwKT4xZS02JiYoZS55MCs9cixlLnkxKz1yKSxpPWUueTErcH0pfShmdW5jdGlvbih0KXt2YXIgZSxyLG49dC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm57eDA6dC54MCxpbmRleDplfX0pLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54MC1lLngwfSksaT1bXSxhPS0xLG89LTEvMDtmb3IoXz0wO188bi5sZW5ndGg7XysrKXt2YXIgcz10W25bX10uaW5kZXhdO3MueDA+bytkJiYoYSs9MSxlPXMueDApLG89cy54MCxpW2FdfHwoaVthXT1bXSksaVthXS5wdXNoKHMpLHI9ZS1zLngwLHMueDArPXIscy54MSs9cn1yZXR1cm4gaX0oeT1BLm5vZGVzKSksaS51cGRhdGUoQSl9cmV0dXJue2NpcmN1bGFyOmIsa2V5OnIsdHJhY2U6cyxndWlkOmgucmFuZHN0cigpLGhvcml6b250YWw6Zix3aWR0aDp2LGhlaWdodDptLG5vZGVQYWQ6cy5ub2RlLnBhZCxub2RlTGluZUNvbG9yOnMubm9kZS5saW5lLmNvbG9yLG5vZGVMaW5lV2lkdGg6cy5ub2RlLmxpbmUud2lkdGgsbGlua0xpbmVDb2xvcjpzLmxpbmsubGluZS5jb2xvcixsaW5rTGluZVdpZHRoOnMubGluay5saW5lLndpZHRoLHZhbHVlRm9ybWF0OnMudmFsdWVmb3JtYXQsdmFsdWVTdWZmaXg6cy52YWx1ZXN1ZmZpeCx0ZXh0Rm9udDpzLnRleHRmb250LHRyYW5zbGF0ZVg6dS54WzBdKnQud2lkdGgrdC5tYXJnaW4ubCx0cmFuc2xhdGVZOnQuaGVpZ2h0LXUueVsxXSp0LmhlaWdodCt0Lm1hcmdpbi50LGRyYWdQYXJhbGxlbDpmP206dixkcmFnUGVycGVuZGljdWxhcjpmP3Y6bSxhcnJhbmdlbWVudDpzLmFycmFuZ2VtZW50LHNhbmtleTppLGdyYXBoOkEsZm9yY2VMYXlvdXRzOnt9LGludGVyYWN0aW9uU3RhdGU6e2RyYWdJblByb2dyZXNzOiExLGhvdmVyZWQ6ITF9fX0uYmluZChudWxsLHUpKSxfPWUuc2VsZWN0QWxsKFwiLlwiK24uY24uc2Fua2V5KS5kYXRhKGIscCk7Xy5leGl0KCkucmVtb3ZlKCksXy5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChuLmNuLnNhbmtleSwhMCkuc3R5bGUoXCJib3gtc2l6aW5nXCIsXCJjb250ZW50LWJveFwiKS5zdHlsZShcInBvc2l0aW9uXCIsXCJhYnNvbHV0ZVwiKS5zdHlsZShcImxlZnRcIiwwKS5zdHlsZShcInNoYXBlLXJlbmRlcmluZ1wiLFwiZ2VvbWV0cmljUHJlY2lzaW9uXCIpLnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixcImF1dG9cIikuYXR0cihcInRyYW5zZm9ybVwiLEEpLF8uZWFjaChmdW5jdGlvbihlLHIpe3QuX2Z1bGxEYXRhW3JdLl9zYW5rZXk9ZTt2YXIgbj1cImJnc2Fua2V5LVwiK2UudHJhY2UudWlkK1wiLVwiK3I7aC5lbnN1cmVTaW5nbGUodC5fZnVsbExheW91dC5fZHJhZ2dlcnMsXCJyZWN0XCIsbiksdC5fZnVsbERhdGFbcl0uX2JnUmVjdD1pLnNlbGVjdChcIi5cIituKSx0Ll9mdWxsRGF0YVtyXS5fYmdSZWN0LnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixcImFsbFwiKS5hdHRyKFwid2lkdGhcIixlLndpZHRoKS5hdHRyKFwiaGVpZ2h0XCIsZS5oZWlnaHQpLmF0dHIoXCJ4XCIsZS50cmFuc2xhdGVYKS5hdHRyKFwieVwiLGUudHJhbnNsYXRlWSkuY2xhc3NlZChcImJnc2Fua2V5XCIsITApLnN0eWxlKHtmaWxsOlwidHJhbnNwYXJlbnRcIixcInN0cm9rZS13aWR0aFwiOjB9KX0pLF8udHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5hdHRyKFwidHJhbnNmb3JtXCIsQSk7dmFyIEk9Xy5zZWxlY3RBbGwoXCIuXCIrbi5jbi5zYW5rZXlMaW5rcykuZGF0YShkLHApO0kuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQobi5jbi5zYW5rZXlMaW5rcywhMCkuc3R5bGUoXCJmaWxsXCIsXCJub25lXCIpO3ZhciBEPUkuc2VsZWN0QWxsKFwiLlwiK24uY24uc2Fua2V5TGluaykuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5ncmFwaC5saW5rcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9KS5tYXAoZnVuY3Rpb24odCxlLHIpe3ZhciBuPWEoZS5jb2xvciksaT1lLnNvdXJjZS5sYWJlbCtcInxcIitlLnRhcmdldC5sYWJlbCtcIl9fXCIrcjtyZXR1cm4gZS50cmFjZT10LnRyYWNlLGUuY3VydmVOdW1iZXI9dC50cmFjZS5pbmRleCx7Y2lyY3VsYXI6dC5jaXJjdWxhcixrZXk6aSx0cmFjZUlkOnQua2V5LHBvaW50TnVtYmVyOmUucG9pbnROdW1iZXIsbGluazplLHRpbnlDb2xvckh1ZTpvLnRpbnlSR0IobiksdGlueUNvbG9yQWxwaGE6bi5nZXRBbHBoYSgpLGxpbmtQYXRoOnksbGlua0xpbmVDb2xvcjp0LmxpbmtMaW5lQ29sb3IsbGlua0xpbmVXaWR0aDp0LmxpbmtMaW5lV2lkdGgsdmFsdWVGb3JtYXQ6dC52YWx1ZUZvcm1hdCx2YWx1ZVN1ZmZpeDp0LnZhbHVlU3VmZml4LHNhbmtleTp0LnNhbmtleSxwYXJlbnQ6dCxpbnRlcmFjdGlvblN0YXRlOnQuaW50ZXJhY3Rpb25TdGF0ZSxmbG93OmUuZmxvd319LmJpbmQobnVsbCx0KSl9LHApO0QuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQobi5jbi5zYW5rZXlMaW5rLCEwKS5jYWxsKHosXyxmLmxpbmtFdmVudHMpLEQuc3R5bGUoXCJzdHJva2VcIixmdW5jdGlvbih0KXtyZXR1cm4gayh0KT9vLnRpbnlSR0IoYSh0LmxpbmtMaW5lQ29sb3IpKTp0LnRpbnlDb2xvckh1ZX0pLnN0eWxlKFwic3Ryb2tlLW9wYWNpdHlcIixmdW5jdGlvbih0KXtyZXR1cm4gayh0KT9vLm9wYWNpdHkodC5saW5rTGluZUNvbG9yKTp0LnRpbnlDb2xvckFscGhhfSkuc3R5bGUoXCJmaWxsXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9ySHVlfSkuc3R5bGUoXCJmaWxsLW9wYWNpdHlcIixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JBbHBoYX0pLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsZnVuY3Rpb24odCl7cmV0dXJuIGsodCk/dC5saW5rTGluZVdpZHRoOjF9KS5hdHRyKFwiZFwiLHkoKSksRC5zdHlsZShcIm9wYWNpdHlcIixmdW5jdGlvbigpe3JldHVybiB0Ll9jb250ZXh0LnN0YXRpY1Bsb3R8fHZ8fG0/MTowfSkudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5zdHlsZShcIm9wYWNpdHlcIiwxKSxELmV4aXQoKS50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLnN0eWxlKFwib3BhY2l0eVwiLDApLnJlbW92ZSgpO3ZhciBQPV8uc2VsZWN0QWxsKFwiLlwiK24uY24uc2Fua2V5Tm9kZVNldCkuZGF0YShkLHApO1AuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQobi5jbi5zYW5rZXlOb2RlU2V0LCEwKSxQLnN0eWxlKFwiY3Vyc29yXCIsZnVuY3Rpb24odCl7c3dpdGNoKHQuYXJyYW5nZW1lbnQpe2Nhc2VcImZpeGVkXCI6cmV0dXJuXCJkZWZhdWx0XCI7Y2FzZVwicGVycGVuZGljdWxhclwiOnJldHVyblwibnMtcmVzaXplXCI7ZGVmYXVsdDpyZXR1cm5cIm1vdmVcIn19KTt2YXIgUj1QLnNlbGVjdEFsbChcIi5cIituLmNuLnNhbmtleU5vZGUpLmRhdGEoZnVuY3Rpb24odCl7dmFyIGU9dC5ncmFwaC5ub2RlcztyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGUscj1bXTtmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0ub3JpZ2luYWxYPSh0W2VdLngwK3RbZV0ueDEpLzIsdFtlXS5vcmlnaW5hbFk9KHRbZV0ueTArdFtlXS55MSkvMiwtMT09PXIuaW5kZXhPZih0W2VdLm9yaWdpbmFsWCkmJnIucHVzaCh0W2VdLm9yaWdpbmFsWCk7Zm9yKHIuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSxlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5vcmlnaW5hbExheWVySW5kZXg9ci5pbmRleE9mKHRbZV0ub3JpZ2luYWxYKSx0W2VdLm9yaWdpbmFsTGF5ZXI9dFtlXS5vcmlnaW5hbExheWVySW5kZXgvKHIubGVuZ3RoLTEpfShlKSxlLm1hcChmdW5jdGlvbih0LGUpe3ZhciByPWEoZS5jb2xvciksaT1uLm5vZGVQYWRBY3Jvc3Mscz10Lm5vZGVQYWQvMjtlLmR4PWUueDEtZS54MCxlLmR5PWUueTEtZS55MDt2YXIgbD1lLmR4LGM9TWF0aC5tYXgoLjUsZS5keSksdT1cIm5vZGVfXCIrZS5wb2ludE51bWJlcjtyZXR1cm4gZS5ncm91cCYmKHU9aC5yYW5kc3RyKCkpLGUudHJhY2U9dC50cmFjZSxlLmN1cnZlTnVtYmVyPXQudHJhY2UuaW5kZXgse2luZGV4OmUucG9pbnROdW1iZXIsa2V5OnUscGFydE9mR3JvdXA6ZS5wYXJ0T2ZHcm91cHx8ITEsZ3JvdXA6ZS5ncm91cCx0cmFjZUlkOnQua2V5LHRyYWNlOnQudHJhY2Usbm9kZTplLG5vZGVQYWQ6dC5ub2RlUGFkLG5vZGVMaW5lQ29sb3I6dC5ub2RlTGluZUNvbG9yLG5vZGVMaW5lV2lkdGg6dC5ub2RlTGluZVdpZHRoLHRleHRGb250OnQudGV4dEZvbnQsc2l6ZTp0Lmhvcml6b250YWw/dC5oZWlnaHQ6dC53aWR0aCx2aXNpYmxlV2lkdGg6TWF0aC5jZWlsKGwpLHZpc2libGVIZWlnaHQ6Yyx6b25lWDotaSx6b25lWTotcyx6b25lV2lkdGg6bCsyKmksem9uZUhlaWdodDpjKzIqcyxsYWJlbFk6dC5ob3Jpem9udGFsP2UuZHkvMisxOmUuZHgvMisxLGxlZnQ6MT09PWUub3JpZ2luYWxMYXllcixzaXplQWNyb3NzOnQud2lkdGgsZm9yY2VMYXlvdXRzOnQuZm9yY2VMYXlvdXRzLGhvcml6b250YWw6dC5ob3Jpem9udGFsLGRhcmtCYWNrZ3JvdW5kOnIuZ2V0QnJpZ2h0bmVzcygpPD0xMjgsdGlueUNvbG9ySHVlOm8udGlueVJHQihyKSx0aW55Q29sb3JBbHBoYTpyLmdldEFscGhhKCksdmFsdWVGb3JtYXQ6dC52YWx1ZUZvcm1hdCx2YWx1ZVN1ZmZpeDp0LnZhbHVlU3VmZml4LHNhbmtleTp0LnNhbmtleSxncmFwaDp0LmdyYXBoLGFycmFuZ2VtZW50OnQuYXJyYW5nZW1lbnQsdW5pcXVlTm9kZUxhYmVsUGF0aElkOlt0Lmd1aWQsdC5rZXksdV0uam9pbihcIl9cIiksaW50ZXJhY3Rpb25TdGF0ZTp0LmludGVyYWN0aW9uU3RhdGUsZmlndXJlOnR9fS5iaW5kKG51bGwsdCkpfSxwKTtSLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKG4uY24uc2Fua2V5Tm9kZSwhMCkuY2FsbCh4KS5zdHlsZShcIm9wYWNpdHlcIixmdW5jdGlvbihlKXtyZXR1cm4hdC5fY29udGV4dC5zdGF0aWNQbG90JiYhdnx8ZS5wYXJ0T2ZHcm91cD8wOjF9KSxSLmNhbGwoeixfLGYubm9kZUV2ZW50cykuY2FsbChPLEQsZix0KSxSLnRyYW5zaXRpb24oKS5lYXNlKG4uZWFzZSkuZHVyYXRpb24obi5kdXJhdGlvbikuY2FsbCh4KS5zdHlsZShcIm9wYWNpdHlcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5wYXJ0T2ZHcm91cD8wOjF9KSxSLmV4aXQoKS50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLnN0eWxlKFwib3BhY2l0eVwiLDApLnJlbW92ZSgpO3ZhciBGPVIuc2VsZWN0QWxsKFwiLlwiK24uY24ubm9kZVJlY3QpLmRhdGEoZCk7Ri5lbnRlcigpLmFwcGVuZChcInJlY3RcIikuY2xhc3NlZChuLmNuLm5vZGVSZWN0LCEwKS5jYWxsKHcpLEYuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlTGluZVdpZHRofSkuc3R5bGUoXCJzdHJva2VcIixmdW5jdGlvbih0KXtyZXR1cm4gby50aW55UkdCKGEodC5ub2RlTGluZUNvbG9yKSl9KS5zdHlsZShcInN0cm9rZS1vcGFjaXR5XCIsZnVuY3Rpb24odCl7cmV0dXJuIG8ub3BhY2l0eSh0Lm5vZGVMaW5lQ29sb3IpfSkuc3R5bGUoXCJmaWxsXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9ySHVlfSkuc3R5bGUoXCJmaWxsLW9wYWNpdHlcIixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JBbHBoYX0pLEYudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5jYWxsKHcpO3ZhciBCPVIuc2VsZWN0QWxsKFwiLlwiK24uY24ubm9kZUNhcHR1cmUpLmRhdGEoZCk7Qi5lbnRlcigpLmFwcGVuZChcInJlY3RcIikuY2xhc3NlZChuLmNuLm5vZGVDYXB0dXJlLCEwKS5zdHlsZShcImZpbGwtb3BhY2l0eVwiLDApLEIuYXR0cihcInhcIixmdW5jdGlvbih0KXtyZXR1cm4gdC56b25lWH0pLmF0dHIoXCJ5XCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuem9uZVl9KS5hdHRyKFwid2lkdGhcIixmdW5jdGlvbih0KXtyZXR1cm4gdC56b25lV2lkdGh9KS5hdHRyKFwiaGVpZ2h0XCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuem9uZUhlaWdodH0pO3ZhciBOPVIuc2VsZWN0QWxsKFwiLlwiK24uY24ubm9kZUNlbnRlcmVkKS5kYXRhKGQpO04uZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQobi5jbi5ub2RlQ2VudGVyZWQsITApLmF0dHIoXCJ0cmFuc2Zvcm1cIixUKSxOLnRyYW5zaXRpb24oKS5lYXNlKG4uZWFzZSkuZHVyYXRpb24obi5kdXJhdGlvbikuYXR0cihcInRyYW5zZm9ybVwiLFQpO3ZhciBqPU4uc2VsZWN0QWxsKFwiLlwiK24uY24ubm9kZUxhYmVsR3VpZGUpLmRhdGEoZCk7ai5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChuLmNuLm5vZGVMYWJlbEd1aWRlLCEwKS5hdHRyKFwiaWRcIixmdW5jdGlvbih0KXtyZXR1cm4gdC51bmlxdWVOb2RlTGFiZWxQYXRoSWR9KS5hdHRyKFwiZFwiLE0pLmF0dHIoXCJ0cmFuc2Zvcm1cIixTKSxqLnRyYW5zaXRpb24oKS5lYXNlKG4uZWFzZSkuZHVyYXRpb24obi5kdXJhdGlvbikuYXR0cihcImRcIixNKS5hdHRyKFwidHJhbnNmb3JtXCIsUyk7dmFyIFY9Ti5zZWxlY3RBbGwoXCIuXCIrbi5jbi5ub2RlTGFiZWwpLmRhdGEoZCk7Vi5lbnRlcigpLmFwcGVuZChcInRleHRcIikuY2xhc3NlZChuLmNuLm5vZGVMYWJlbCwhMCkuYXR0cihcInRyYW5zZm9ybVwiLEUpLnN0eWxlKFwidXNlci1zZWxlY3RcIixcIm5vbmVcIikuc3R5bGUoXCJjdXJzb3JcIixcImRlZmF1bHRcIikuc3R5bGUoXCJmaWxsXCIsXCJibGFja1wiKSxWLnN0eWxlKFwidGV4dC1zaGFkb3dcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5ob3Jpem9udGFsP1wiLTFweCAxcHggMXB4ICNmZmYsIDFweCAxcHggMXB4ICNmZmYsIDFweCAtMXB4IDFweCAjZmZmLCAtMXB4IC0xcHggMXB4ICNmZmZcIjpcIm5vbmVcIn0pLmVhY2goZnVuY3Rpb24odCl7cy5mb250KFYsdC50ZXh0Rm9udCl9KSxWLnRyYW5zaXRpb24oKS5lYXNlKG4uZWFzZSkuZHVyYXRpb24obi5kdXJhdGlvbikuYXR0cihcInRyYW5zZm9ybVwiLEUpO3ZhciBVPVYuc2VsZWN0QWxsKFwiLlwiK24uY24ubm9kZUxhYmVsVGV4dFBhdGgpLmRhdGEoZCk7VS5lbnRlcigpLmFwcGVuZChcInRleHRQYXRoXCIpLmNsYXNzZWQobi5jbi5ub2RlTGFiZWxUZXh0UGF0aCwhMCkuYXR0cihcImFsaWdubWVudC1iYXNlbGluZVwiLFwibWlkZGxlXCIpLmF0dHIoXCJ4bGluazpocmVmXCIsZnVuY3Rpb24odCl7cmV0dXJuXCIjXCIrdC51bmlxdWVOb2RlTGFiZWxQYXRoSWR9KS5hdHRyKFwic3RhcnRPZmZzZXRcIixMKS5zdHlsZShcImZpbGxcIixDKSxVLnRleHQoZnVuY3Rpb24odCl7cmV0dXJuIHQuaG9yaXpvbnRhbHx8dC5ub2RlLmR5PjU/dC5ub2RlLmxhYmVsOlwiXCJ9KS5hdHRyKFwidGV4dC1hbmNob3JcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5ob3Jpem9udGFsJiZ0LmxlZnQ/XCJlbmRcIjpcInN0YXJ0XCJ9KSxVLnRyYW5zaXRpb24oKS5lYXNlKG4uZWFzZSkuZHVyYXRpb24obi5kdXJhdGlvbikuYXR0cihcInN0YXJ0T2Zmc2V0XCIsTCkuc3R5bGUoXCJmaWxsXCIsQyl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2d1cFwiOjY5OSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi9jb25zdGFudHNcIjoxMDQ1LFwiQHBsb3RseS9kMy1zYW5rZXlcIjo0OSxkMzoxNTUsXCJkMy1mb3JjZVwiOjE0NyxcImQzLWludGVycG9sYXRlXCI6MTQ5LFwiZDMtc2Fua2V5LWNpcmN1bGFyXCI6MTUyLHRpbnljb2xvcjI6NTIyfV0sMTA1MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPXQuY2RbMF0udHJhY2UsaT1uLl9zYW5rZXkuZ3JhcGgubm9kZXMsYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdO2lmKCFvLnBhcnRPZkdyb3VwKXt2YXIgcz1bKG8ueDArby54MSkvMiwoby55MCtvLnkxKS8yXTtcInZcIj09PW4ub3JpZW50YXRpb24mJnMucmV2ZXJzZSgpLGUmJmUuY29udGFpbnMocywhMSxhLHQpJiZyLnB1c2goe3BvaW50TnVtYmVyOm8ucG9pbnROdW1iZXJ9KX19cmV0dXJuIHJ9fSx7fV0sMTA1MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspdFtyXS5pPXI7bi5tZXJnZUFycmF5KGUudGV4dCx0LFwidHhcIiksbi5tZXJnZUFycmF5KGUuaG92ZXJ0ZXh0LHQsXCJodHhcIiksbi5tZXJnZUFycmF5KGUuY3VzdG9tZGF0YSx0LFwiZGF0YVwiKSxuLm1lcmdlQXJyYXkoZS50ZXh0cG9zaXRpb24sdCxcInRwXCIpLGUudGV4dGZvbnQmJihuLm1lcmdlQXJyYXkoZS50ZXh0Zm9udC5zaXplLHQsXCJ0c1wiKSxuLm1lcmdlQXJyYXkoZS50ZXh0Zm9udC5jb2xvcix0LFwidGNcIiksbi5tZXJnZUFycmF5KGUudGV4dGZvbnQuZmFtaWx5LHQsXCJ0ZlwiKSk7dmFyIGk9ZS5tYXJrZXI7aWYoaSl7bi5tZXJnZUFycmF5KGkuc2l6ZSx0LFwibXNcIiksbi5tZXJnZUFycmF5KGkub3BhY2l0eSx0LFwibW9cIiksbi5tZXJnZUFycmF5KGkuc3ltYm9sLHQsXCJteFwiKSxuLm1lcmdlQXJyYXkoaS5jb2xvcix0LFwibWNcIik7dmFyIGE9aS5saW5lO2kubGluZSYmKG4ubWVyZ2VBcnJheShhLmNvbG9yLHQsXCJtbGNcIiksbi5tZXJnZUFycmF5KGEud2lkdGgsdCxcIm1sd1wiKSk7dmFyIG89aS5ncmFkaWVudDtvJiZcIm5vbmVcIiE9PW8udHlwZSYmKG4ubWVyZ2VBcnJheShvLnR5cGUsdCxcIm1ndFwiKSxuLm1lcmdlQXJyYXkoby5jb2xvcix0LFwibWdjXCIpKX19fSx7XCIuLi8uLi9saWJcIjo3MDF9XSwxMDUyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXNcIikuZGFzaCxsPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksYz10KFwiLi9jb25zdGFudHNcIiksdT10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17eDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIixhbmltOiEwfSx4MDp7dmFsVHlwZTpcImFueVwiLGRmbHQ6MCxlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIixhbmltOiEwfSxkeDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MSxlZGl0VHlwZTpcImNhbGNcIixhbmltOiEwfSx5Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wiLGFuaW06ITB9LHkwOnt2YWxUeXBlOlwiYW55XCIsZGZsdDowLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wiLGFuaW06ITB9LGR5Ont2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDoxLGVkaXRUeXBlOlwiY2FsY1wiLGFuaW06ITB9LHN0YWNrZ3JvdXA6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LG9yaWVudGF0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJ2XCIsXCJoXCJdLGVkaXRUeXBlOlwiY2FsY1wifSxncm91cG5vcm06e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcIlwiLFwiZnJhY3Rpb25cIixcInBlcmNlbnRcIl0sZGZsdDpcIlwiLGVkaXRUeXBlOlwiY2FsY1wifSxzdGFja2dhcHM6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImluZmVyIHplcm9cIixcImludGVycG9sYXRlXCJdLGRmbHQ6XCJpbmZlciB6ZXJvXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHRleHQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsYXJyYXlPazohMCxlZGl0VHlwZTpcImNhbGNcIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJzdHlsZVwifSxtb2RlOnt2YWxUeXBlOlwiZmxhZ2xpc3RcIixmbGFnczpbXCJsaW5lc1wiLFwibWFya2Vyc1wiLFwidGV4dFwiXSxleHRyYXM6W1wibm9uZVwiXSxlZGl0VHlwZTpcImNhbGNcIn0saG92ZXJvbjp7dmFsVHlwZTpcImZsYWdsaXN0XCIsZmxhZ3M6W1wicG9pbnRzXCIsXCJmaWxsc1wiXSxlZGl0VHlwZTpcInN0eWxlXCJ9LGhvdmVydGVtcGxhdGU6bih7fSx7a2V5czpjLmV2ZW50RGF0YUtleXN9KSxsaW5lOntjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJzdHlsZVwiLGFuaW06ITB9LHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZGZsdDoyLGVkaXRUeXBlOlwic3R5bGVcIixhbmltOiEwfSxzaGFwZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wibGluZWFyXCIsXCJzcGxpbmVcIixcImh2XCIsXCJ2aFwiLFwiaHZoXCIsXCJ2aHZcIl0sZGZsdDpcImxpbmVhclwiLGVkaXRUeXBlOlwicGxvdFwifSxzbW9vdGhpbmc6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MS4zLGRmbHQ6MSxlZGl0VHlwZTpcInBsb3RcIn0sZGFzaDp1KHt9LHMse2VkaXRUeXBlOlwic3R5bGVcIn0pLHNpbXBsaWZ5Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJwbG90XCJ9LGVkaXRUeXBlOlwicGxvdFwifSxjb25uZWN0Z2Fwczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwiY2FsY1wifSxjbGlwb25heGlzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJwbG90XCJ9LGZpbGw6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcIm5vbmVcIixcInRvemVyb3lcIixcInRvemVyb3hcIixcInRvbmV4dHlcIixcInRvbmV4dHhcIixcInRvc2VsZlwiLFwidG9uZXh0XCJdLGVkaXRUeXBlOlwiY2FsY1wifSxmaWxsY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwic3R5bGVcIixhbmltOiEwfSxtYXJrZXI6dSh7c3ltYm9sOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpsLnN5bWJvbExpc3QsZGZsdDpcImNpcmNsZVwiLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJzdHlsZVwifSxvcGFjaXR5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsYXJyYXlPazohMCxlZGl0VHlwZTpcInN0eWxlXCIsYW5pbTohMH0sc2l6ZTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6NixhcnJheU9rOiEwLGVkaXRUeXBlOlwiY2FsY1wiLGFuaW06ITB9LG1heGRpc3BsYXllZDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTpcInBsb3RcIn0sc2l6ZXJlZjp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MSxlZGl0VHlwZTpcImNhbGNcIn0sc2l6ZW1pbjp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTpcImNhbGNcIn0sc2l6ZW1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImRpYW1ldGVyXCIsXCJhcmVhXCJdLGRmbHQ6XCJkaWFtZXRlclwiLGVkaXRUeXBlOlwiY2FsY1wifSxjb2xvcmJhcjphLGxpbmU6dSh7d2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxhcnJheU9rOiEwLGVkaXRUeXBlOlwic3R5bGVcIixhbmltOiEwfSxlZGl0VHlwZTpcImNhbGNcIn0saShcIm1hcmtlci5saW5lXCIse2FuaW06ITB9KSksZ3JhZGllbnQ6e3R5cGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInJhZGlhbFwiLFwiaG9yaXpvbnRhbFwiLFwidmVydGljYWxcIixcIm5vbmVcIl0sYXJyYXlPazohMCxkZmx0Olwibm9uZVwiLGVkaXRUeXBlOlwiY2FsY1wifSxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsYXJyYXlPazohMCxlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LGVkaXRUeXBlOlwiY2FsY1wifSxpKFwibWFya2VyXCIse2FuaW06ITB9KSksc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGVkaXRUeXBlOlwic3R5bGVcIn0sY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwic3R5bGVcIn0sc2l6ZTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGVkaXRUeXBlOlwic3R5bGVcIn0sZWRpdFR5cGU6XCJzdHlsZVwifSx0ZXh0Zm9udDp7Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwic3R5bGVcIn0sZWRpdFR5cGU6XCJzdHlsZVwifSxlZGl0VHlwZTpcInN0eWxlXCJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGVkaXRUeXBlOlwic3R5bGVcIn0sY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwic3R5bGVcIn0sc2l6ZTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGVkaXRUeXBlOlwic3R5bGVcIn0sZWRpdFR5cGU6XCJzdHlsZVwifSx0ZXh0Zm9udDp7Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwic3R5bGVcIn0sZWRpdFR5cGU6XCJzdHlsZVwifSxlZGl0VHlwZTpcInN0eWxlXCJ9LHRleHRwb3NpdGlvbjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1widG9wIGxlZnRcIixcInRvcCBjZW50ZXJcIixcInRvcCByaWdodFwiLFwibWlkZGxlIGxlZnRcIixcIm1pZGRsZSBjZW50ZXJcIixcIm1pZGRsZSByaWdodFwiLFwiYm90dG9tIGxlZnRcIixcImJvdHRvbSBjZW50ZXJcIixcImJvdHRvbSByaWdodFwiXSxkZmx0OlwibWlkZGxlIGNlbnRlclwiLGFycmF5T2s6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LHRleHRmb250Om8oe2VkaXRUeXBlOlwiY2FsY1wiLGNvbG9yRWRpdFR5cGU6XCJzdHlsZVwiLGFycmF5T2s6ITB9KSxyOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSx0Ont2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXNcIjo1OTgsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIjo3NzUsXCIuL2NvbnN0YW50c1wiOjEwNTZ9XSwxMDUzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxvPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTSxzPXQoXCIuL3N1YnR5cGVzXCIpLGw9dChcIi4vY29sb3JzY2FsZV9jYWxjXCIpLGM9dChcIi4vYXJyYXlzX3RvX2NhbGNkYXRhXCIpLHU9dChcIi4vY2FsY19zZWxlY3Rpb25cIik7ZnVuY3Rpb24gaCh0LGUscixuLGksbyxsKXt2YXIgYz1lLl9sZW5ndGgsdT10Ll9mdWxsTGF5b3V0LGg9ci5faWQsZj1uLl9pZCxwPXUuX2ZpcnN0U2NhdHRlcltkKGUpXT09PWUudWlkLHY9KGcoZSx1LHIsbil8fHt9KS5vcmllbnRhdGlvbixtPWUuZmlsbDtyLl9taW5EdGljaz0wLG4uX21pbkR0aWNrPTA7dmFyIHk9e3BhZGRlZDohMH0seD17cGFkZGVkOiEwfTtsJiYoeS5wcGFkPXgucHBhZD1sKTt2YXIgYj1jPDJ8fGlbMF0hPT1pW2MtMV18fG9bMF0hPT1vW2MtMV07YiYmKFwidG96ZXJveFwiPT09bXx8XCJ0b25leHR4XCI9PT1tJiYocHx8XCJoXCI9PT12KSk/eS50b3plcm89ITA6KGUuZXJyb3JfeXx8e30pLnZpc2libGV8fFwidG9uZXh0eVwiIT09bSYmXCJ0b3plcm95XCIhPT1tJiYocy5oYXNNYXJrZXJzKGUpfHxzLmhhc1RleHQoZSkpfHwoeS5wYWRkZWQ9ITEseS5wcGFkPTApLGImJihcInRvemVyb3lcIj09PW18fFwidG9uZXh0eVwiPT09bSYmKHB8fFwidlwiPT09dikpP3gudG96ZXJvPSEwOlwidG9uZXh0eFwiIT09bSYmXCJ0b3plcm94XCIhPT1tfHwoeC5wYWRkZWQ9ITEpLGgmJihlLl9leHRyZW1lc1toXT1hLmZpbmRFeHRyZW1lcyhyLGkseSkpLGYmJihlLl9leHRyZW1lc1tmXT1hLmZpbmRFeHRyZW1lcyhuLG8seCkpfWZ1bmN0aW9uIGYodCxlKXtpZihzLmhhc01hcmtlcnModCkpe3ZhciByLG49dC5tYXJrZXIsbz0xLjYqKHQubWFya2VyLnNpemVyZWZ8fDEpO2lmKHI9XCJhcmVhXCI9PT10Lm1hcmtlci5zaXplbW9kZT9mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5zcXJ0KCh0fHwwKS9vKSwzKX06ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KCh0fHwwKS9vLDMpfSxpLmlzQXJyYXlPclR5cGVkQXJyYXkobi5zaXplKSl7dmFyIGw9e3R5cGU6XCJsaW5lYXJcIn07YS5zZXRDb252ZXJ0KGwpO2Zvcih2YXIgYz1sLm1ha2VDYWxjZGF0YSh0Lm1hcmtlcixcInNpemVcIiksdT1uZXcgQXJyYXkoZSksaD0wO2g8ZTtoKyspdVtoXT1yKGNbaF0pO3JldHVybiB1fXJldHVybiByKG4uc2l6ZSl9fWZ1bmN0aW9uIHAodCxlKXt2YXIgcj1kKGUpLG49dC5fZmlyc3RTY2F0dGVyO25bcl18fChuW3JdPWUudWlkKX1mdW5jdGlvbiBkKHQpe3ZhciBlPXQuc3RhY2tncm91cDtyZXR1cm4gdC54YXhpcyt0LnlheGlzK3QudHlwZSsoZT9cIi1cIitlOlwiXCIpfWZ1bmN0aW9uIGcodCxlLHIsbil7dmFyIGk9dC5zdGFja2dyb3VwO2lmKGkpe3ZhciBhPWUuX3NjYXR0ZXJTdGFja09wdHNbci5faWQrbi5faWRdW2ldLG89XCJ2XCI9PT1hLm9yaWVudGF0aW9uP246cjtyZXR1cm5cImxpbmVhclwiPT09by50eXBlfHxcImxvZ1wiPT09by50eXBlP2E6dm9pZCAwfX1lLmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24odCxlKXt2YXIgcixzLGQsdixtLHkseD10Ll9mdWxsTGF5b3V0LGI9YS5nZXRGcm9tSWQodCxlLnhheGlzfHxcInhcIiksXz1hLmdldEZyb21JZCh0LGUueWF4aXN8fFwieVwiKSx3PWIubWFrZUNhbGNkYXRhKGUsXCJ4XCIpLGs9Xy5tYWtlQ2FsY2RhdGEoZSxcInlcIiksQT1lLl9sZW5ndGgsVD1uZXcgQXJyYXkoQSksTT1lLmlkcyxTPWcoZSx4LGIsXyksRT0hMTtwKHgsZSk7dmFyIEMsTD1cInhcIix6PVwieVwiO2ZvcihTPyhpLnB1c2hVbmlxdWUoUy50cmFjZUluZGljZXMsZS5fZXhwYW5kZWRJbmRleCksKHI9XCJ2XCI9PT1TLm9yaWVudGF0aW9uKT8oej1cInNcIixDPVwieFwiKTooTD1cInNcIixDPVwieVwiKSxtPVwiaW50ZXJwb2xhdGVcIj09PVMuc3RhY2tnYXBzKTpoKHQsZSxiLF8sdyxrLGYoZSxBKSkscz0wO3M8QTtzKyspe3ZhciBPPVRbc109e30sST1uKHdbc10pLEQ9bihrW3NdKTtJJiZEPyhPW0xdPXdbc10sT1t6XT1rW3NdKTpTJiYocj9JOkQpPyhPW0NdPXI/d1tzXTprW3NdLE8uZ2FwPSEwLG0/KE8ucz1vLEU9ITApOk8ucz0wKTpPW0xdPU9bel09byxNJiYoTy5pZD1TdHJpbmcoTVtzXSkpfWlmKGMoVCxlKSxsKHQsZSksdShULGUpLFMpe2ZvcihzPTA7czxULmxlbmd0aDspVFtzXVtDXT09PW8/VC5zcGxpY2UocywxKTpzKys7aWYoaS5zb3J0KFQsZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtDXS1lW0NdfHx0LmktZS5pfSksRSl7Zm9yKHM9MDtzPFQubGVuZ3RoLTEmJlRbc10uZ2FwOylzKys7Zm9yKCh5PVRbc10ucyl8fCh5PVRbc10ucz0wKSxkPTA7ZDxzO2QrKylUW2RdLnM9eTtmb3Iodj1ULmxlbmd0aC0xO3Y+cyYmVFt2XS5nYXA7KXYtLTtmb3IoeT1UW3ZdLnMsZD1ULmxlbmd0aC0xO2Q+djtkLS0pVFtkXS5zPXk7Zm9yKDtzPHY7KWlmKFRbKytzXS5nYXApe2ZvcihkPXMrMTtUW2RdLmdhcDspZCsrO2Zvcih2YXIgUD1UW3MtMV1bQ10sUj1UW3MtMV0ucyxGPShUW2RdLnMtUikvKFRbZF1bQ10tUCk7czxkOylUW3NdLnM9UisoVFtzXVtDXS1QKSpGLHMrK319fXJldHVybiBUfSxjYWxjTWFya2VyU2l6ZTpmLGNhbGNBeGlzRXhwYW5zaW9uOmgsc2V0Rmlyc3RTY2F0dGVyOnAsZ2V0U3RhY2tPcHRzOmd9fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuL2FycmF5c190b19jYWxjZGF0YVwiOjEwNTEsXCIuL2NhbGNfc2VsZWN0aW9uXCI6MTA1NCxcIi4vY29sb3JzY2FsZV9jYWxjXCI6MTA1NSxcIi4vc3VidHlwZXNcIjoxMDc2LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSwxMDU0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtuLmlzQXJyYXlPclR5cGVkQXJyYXkoZS5zZWxlY3RlZHBvaW50cykmJm4udGFnU2VsZWN0ZWQodCxlKX19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDEwNTU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnNcIikuaGFzQ29sb3JzY2FsZSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsY1wiKSxhPXQoXCIuL3N1YnR5cGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2EuaGFzTGluZXMoZSkmJm4oZSxcImxpbmVcIikmJmkodCxlLHt2YWxzOmUubGluZS5jb2xvcixjb250YWluZXJTdHI6XCJsaW5lXCIsY0xldHRlcjpcImNcIn0pLGEuaGFzTWFya2VycyhlKSYmKG4oZSxcIm1hcmtlclwiKSYmaSh0LGUse3ZhbHM6ZS5tYXJrZXIuY29sb3IsY29udGFpbmVyU3RyOlwibWFya2VyXCIsY0xldHRlcjpcImNcIn0pLG4oZSxcIm1hcmtlci5saW5lXCIpJiZpKHQsZSx7dmFsczplLm1hcmtlci5saW5lLmNvbG9yLGNvbnRhaW5lclN0cjpcIm1hcmtlci5saW5lXCIsY0xldHRlcjpcImNcIn0pKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCI6NTg2LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnNcIjo1ODksXCIuL3N1YnR5cGVzXCI6MTA3Nn1dLDEwNTY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e1BUU19MSU5FU09OTFk6MjAsbWluVG9sZXJhbmNlOi4yLHRvbGVyYW5jZUdyb3d0aDoxMCxtYXhTY3JlZW5zQXdheToyMCxldmVudERhdGFLZXlzOltdfX0se31dLDEwNTc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9jYWxjXCIpO2Z1bmN0aW9uIGkodCxlLHIsbixpLGEsbyl7aVtuXT0hMDt2YXIgcz17aTpudWxsLGdhcDohMCxzOjB9O2lmKHNbb109cix0LnNwbGljZShlLDAscyksZSYmcj09PXRbZS0xXVtvXSl7dmFyIGw9dFtlLTFdO3Mucz1sLnMscy5pPWwuaSxzLmdhcD1sLmdhcH1lbHNlIGEmJihzLnM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dFtlLTFdLGE9dFtlKzFdO3JldHVybiBhP2k/aS5zKyhhLnMtaS5zKSooci1pW25dKS8oYVtuXS1pW25dKTphLnM6aS5zfSh0LGUscixvKSk7ZXx8KHRbMF0udD10WzFdLnQsdFswXS50cmFjZT10WzFdLnRyYWNlLGRlbGV0ZSB0WzFdLnQsZGVsZXRlIHRbMV0udHJhY2UpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUueGF4aXMsYT1lLnlheGlzLG89ci5faWQrYS5faWQscz10Ll9mdWxsTGF5b3V0Ll9zY2F0dGVyU3RhY2tPcHRzW29dO2lmKHMpe3ZhciBsLGMsdSxoLGYscCxkLGcsdixtLHkseCxiLF8sdyxrPXQuY2FsY2RhdGE7Zm9yKHZhciBBIGluIHMpe3ZhciBUPShtPXNbQV0pLnRyYWNlSW5kaWNlcztpZihULmxlbmd0aCl7Zm9yKHk9XCJpbnRlcnBvbGF0ZVwiPT09bS5zdGFja2dhcHMseD1tLmdyb3Vwbm9ybSxcInZcIj09PW0ub3JpZW50YXRpb24/KGI9XCJ4XCIsXz1cInlcIik6KGI9XCJ5XCIsXz1cInhcIiksdz1uZXcgQXJyYXkoVC5sZW5ndGgpLGw9MDtsPHcubGVuZ3RoO2wrKyl3W2xdPSExO3A9a1tUWzBdXTt2YXIgTT1uZXcgQXJyYXkocC5sZW5ndGgpO2ZvcihsPTA7bDxwLmxlbmd0aDtsKyspTVtsXT1wW2xdW2JdO2ZvcihsPTE7bDxULmxlbmd0aDtsKyspe2ZvcihmPWtbVFtsXV0sYz11PTA7YzxmLmxlbmd0aDtjKyspe2ZvcihkPWZbY11bYl07ZD5NW3VdJiZ1PE0ubGVuZ3RoO3UrKylpKGYsYyxNW3VdLGwsdyx5LGIpLGMrKztpZihkIT09TVt1XSl7Zm9yKGg9MDtoPGw7aCsrKWkoa1tUW2hdXSx1LGQsaCx3LHksYik7TS5zcGxpY2UodSwwLGQpfXUrK31mb3IoO3U8TS5sZW5ndGg7dSsrKWkoZixjLE1bdV0sbCx3LHksYiksYysrfXZhciBTPU0ubGVuZ3RoO2ZvcihjPTA7YzxwLmxlbmd0aDtjKyspe2ZvcihnPXBbY11bX109cFtjXS5zLGw9MTtsPFQubGVuZ3RoO2wrKykoZj1rW1RbbF1dKVswXS50cmFjZS5fcmF3TGVuZ3RoPWZbMF0udHJhY2UuX2xlbmd0aCxmWzBdLnRyYWNlLl9sZW5ndGg9UyxnKz1mW2NdLnMsZltjXVtfXT1nO2lmKHgpZm9yKHY9KFwiZnJhY3Rpb25cIj09PXg/ZzpnLzEwMCl8fDEsbD0wO2w8VC5sZW5ndGg7bCsrKXt2YXIgRT1rW1RbbF1dW2NdO0VbX10vPXYsRS5zTm9ybT1FLnMvdn19Zm9yKGw9MDtsPFQubGVuZ3RoO2wrKyl7dmFyIEM9KGY9a1tUW2xdXSlbMF0udHJhY2UsTD1uLmNhbGNNYXJrZXJTaXplKEMsQy5fcmF3TGVuZ3RoKSx6PUFycmF5LmlzQXJyYXkoTCk7aWYoTCYmd1tsXXx8eil7dmFyIE89TDtmb3IoTD1uZXcgQXJyYXkoUyksYz0wO2M8UztjKyspTFtjXT1mW2NdLmdhcD8wOno/T1tmW2NdLmldOk99dmFyIEk9bmV3IEFycmF5KFMpLEQ9bmV3IEFycmF5KFMpO2ZvcihjPTA7YzxTO2MrKylJW2NdPWZbY10ueCxEW2NdPWZbY10ueTtuLmNhbGNBeGlzRXhwYW5zaW9uKHQsQyxyLGEsSSxELEwpLGZbMF0udC5vcmllbnRhdGlvbj1tLm9yaWVudGF0aW9ufX19fX19LHtcIi4vY2FsY1wiOjEwNTN9XSwxMDU4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10W2VdO2lmKFwic2NhdHRlclwiPT09ci50eXBlKXt2YXIgbj1yLmZpbGw7aWYoXCJub25lXCIhPT1uJiZcInRvc2VsZlwiIT09biYmKHIub3BhY2l0eT12b2lkIDAsXCJ0b25leHR5XCI9PT1ufHxcInRvbmV4dHhcIj09PW4pKWZvcih2YXIgaT1lLTE7aT49MDtpLS0pe3ZhciBhPXRbaV07aWYoXCJzY2F0dGVyXCI9PT1hLnR5cGUmJmEueGF4aXM9PT1yLnhheGlzJiZhLnlheGlzPT09ci55YXhpcyl7YS5vcGFjaXR5PXZvaWQgMDticmVha319fX19fSx7fV0sMTA1OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcmVnaXN0cnlcIiksYT10KFwiLi9hdHRyaWJ1dGVzXCIpLG89dChcIi4vY29uc3RhbnRzXCIpLHM9dChcIi4vc3VidHlwZXNcIiksbD10KFwiLi94eV9kZWZhdWx0c1wiKSxjPXQoXCIuL3N0YWNrX2RlZmF1bHRzXCIpLHU9dChcIi4vbWFya2VyX2RlZmF1bHRzXCIpLGg9dChcIi4vbGluZV9kZWZhdWx0c1wiKSxmPXQoXCIuL2xpbmVfc2hhcGVfZGVmYXVsdHNcIikscD10KFwiLi90ZXh0X2RlZmF1bHRzXCIpLGQ9dChcIi4vZmlsbGNvbG9yX2RlZmF1bHRzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixnKXtmdW5jdGlvbiB2KHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIG09bCh0LGUsZyx2KTtpZihtfHwoZS52aXNpYmxlPSExKSxlLnZpc2libGUpe3ZhciB5PWModCxlLGcsdikseD0heSYmbTxvLlBUU19MSU5FU09OTFk/XCJsaW5lcyttYXJrZXJzXCI6XCJsaW5lc1wiO3YoXCJ0ZXh0XCIpLHYoXCJob3ZlcnRleHRcIiksdihcIm1vZGVcIix4KSxzLmhhc0xpbmVzKGUpJiYoaCh0LGUscixnLHYpLGYodCxlLHYpLHYoXCJjb25uZWN0Z2Fwc1wiKSx2KFwibGluZS5zaW1wbGlmeVwiKSkscy5oYXNNYXJrZXJzKGUpJiZ1KHQsZSxyLGcsdix7Z3JhZGllbnQ6ITB9KSxzLmhhc1RleHQoZSkmJnAodCxlLGcsdik7dmFyIGI9W107KHMuaGFzTWFya2VycyhlKXx8cy5oYXNUZXh0KGUpKSYmKHYoXCJjbGlwb25heGlzXCIpLHYoXCJtYXJrZXIubWF4ZGlzcGxheWVkXCIpLGIucHVzaChcInBvaW50c1wiKSksdihcImZpbGxcIix5P3kuZmlsbERmbHQ6XCJub25lXCIpLFwibm9uZVwiIT09ZS5maWxsJiYoZCh0LGUscix2KSxzLmhhc0xpbmVzKGUpfHxmKHQsZSx2KSk7dmFyIF89KGUubGluZXx8e30pLmNvbG9yLHc9KGUubWFya2VyfHx7fSkuY29sb3I7XCJ0b25leHRcIiE9PWUuZmlsbCYmXCJ0b3NlbGZcIiE9PWUuZmlsbHx8Yi5wdXNoKFwiZmlsbHNcIiksdihcImhvdmVyb25cIixiLmpvaW4oXCIrXCIpfHxcInBvaW50c1wiKSxcImZpbGxzXCIhPT1lLmhvdmVyb24mJnYoXCJob3ZlcnRlbXBsYXRlXCIpO3ZhciBrPWkuZ2V0Q29tcG9uZW50TWV0aG9kKFwiZXJyb3JiYXJzXCIsXCJzdXBwbHlEZWZhdWx0c1wiKTtrKHQsZSxffHx3fHxyLHtheGlzOlwieVwifSksayh0LGUsX3x8d3x8cix7YXhpczpcInhcIixpbmhlcml0OlwieVwifSksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsdil9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2F0dHJpYnV0ZXNcIjoxMDUyLFwiLi9jb25zdGFudHNcIjoxMDU2LFwiLi9maWxsY29sb3JfZGVmYXVsdHNcIjoxMDYxLFwiLi9saW5lX2RlZmF1bHRzXCI6MTA2NSxcIi4vbGluZV9zaGFwZV9kZWZhdWx0c1wiOjEwNjcsXCIuL21hcmtlcl9kZWZhdWx0c1wiOjEwNzEsXCIuL3N0YWNrX2RlZmF1bHRzXCI6MTA3NCxcIi4vc3VidHlwZXNcIjoxMDc2LFwiLi90ZXh0X2RlZmF1bHRzXCI6MTA3NyxcIi4veHlfZGVmYXVsdHNcIjoxMDc4fV0sMTA2MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIik7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdHx8MD09PXR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1BcnJheS5pc0FycmF5KHIpP2Z1bmN0aW9uKHQpe3IucHVzaCh0KX06ZnVuY3Rpb24odCl7ci50ZXh0PXR9LG89bi5leHRyYWN0T3B0aW9uKHQsZSxcImh0eFwiLFwiaG92ZXJ0ZXh0XCIpO2lmKGkobykpcmV0dXJuIGEobyk7dmFyIHM9bi5leHRyYWN0T3B0aW9uKHQsZSxcInR4XCIsXCJ0ZXh0XCIpO3JldHVybiBpKHMpP2Eocyk6dm9pZCAwfX0se1wiLi4vLi4vbGliXCI6NzAxfV0sMTA2MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGk9dChcIi4uLy4uL2xpYlwiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz0hMTtpZihlLm1hcmtlcil7dmFyIHM9ZS5tYXJrZXIuY29sb3IsbD0oZS5tYXJrZXIubGluZXx8e30pLmNvbG9yO3MmJiFpKHMpP289czpsJiYhaShsKSYmKG89bCl9YShcImZpbGxjb2xvclwiLG4uYWRkT3BhY2l0eSgoZS5saW5lfHx7fSkuY29sb3J8fG98fHIsLjUpKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9saWJcIjo3MDF9XSwxMDYyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksaT10KFwiLi9zdWJ0eXBlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhO2lmKFwibGluZXNcIj09PXQubW9kZSlyZXR1cm4ocj10LmxpbmUuY29sb3IpJiZuLm9wYWNpdHkocik/cjp0LmZpbGxjb2xvcjtpZihcIm5vbmVcIj09PXQubW9kZSlyZXR1cm4gdC5maWxsP3QuZmlsbGNvbG9yOlwiXCI7dmFyIG89ZS5tY2N8fCh0Lm1hcmtlcnx8e30pLmNvbG9yLHM9ZS5tbGNjfHwoKHQubWFya2VyfHx7fSkubGluZXx8e30pLmNvbG9yO3JldHVybihhPW8mJm4ub3BhY2l0eShvKT9vOnMmJm4ub3BhY2l0eShzKSYmKGUubWx3fHwoKHQubWFya2VyfHx7fSkubGluZXx8e30pLndpZHRoKT9zOlwiXCIpP24ub3BhY2l0eShhKTwuMz9uLmFkZE9wYWNpdHkoYSwuMyk6YToocj0odC5saW5lfHx7fSkuY29sb3IpJiZuLm9wYWNpdHkocikmJmkuaGFzTGluZXModCkmJnQubGluZS53aWR0aD9yOnQuZmlsbGNvbG9yfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4vc3VidHlwZXNcIjoxMDc2fV0sMTA2MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxhPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxvPXQoXCIuL2dldF90cmFjZV9jb2xvclwiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGw9dChcIi4vZmlsbF9ob3Zlcl90ZXh0XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixjKXt2YXIgdT10LmNkLGg9dVswXS50cmFjZSxmPXQueGEscD10LnlhLGQ9Zi5jMnAoZSksZz1wLmMycChyKSx2PVtkLGddLG09aC5ob3Zlcm9ufHxcIlwiLHk9LTEhPT1oLm1vZGUuaW5kZXhPZihcIm1hcmtlcnNcIik/MzouNTtpZigtMSE9PW0uaW5kZXhPZihcInBvaW50c1wiKSl7dmFyIHg9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoeSx0Lm1yY3x8MCkscj1mLmMycCh0LngpLWQsbj1wLmMycCh0LnkpLWc7cmV0dXJuIE1hdGgubWF4KE1hdGguc3FydChyKnIrbipuKS1lLDEteS9lKX0sYj1pLmdldERpc3RhbmNlRnVuY3Rpb24oYyxmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKSxyPTEtMS9lLG49TWF0aC5hYnMoZi5jMnAodC54KS1kKTtyZXR1cm4gbjxlP3Iqbi9lOm4tZStyfSxmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKSxyPTEtMS9lLG49TWF0aC5hYnMocC5jMnAodC55KS1nKTtyZXR1cm4gbjxlP3Iqbi9lOm4tZStyfSx4KTtpZihpLmdldENsb3Nlc3QodSxiLHQpLCExIT09dC5pbmRleCl7dmFyIF89dVt0LmluZGV4XSx3PWYuYzJwKF8ueCwhMCksaz1wLmMycChfLnksITApLEE9Xy5tcmN8fDE7dC5pbmRleD1fLmk7dmFyIFQ9dVswXS50Lm9yaWVudGF0aW9uLE09VCYmKF8uc05vcm18fF8ucyksUz1cImhcIj09PVQ/TTpfLngsRT1cInZcIj09PVQ/TTpfLnk7cmV0dXJuIG4uZXh0ZW5kRmxhdCh0LHtjb2xvcjpvKGgsXykseDA6dy1BLHgxOncrQSx4TGFiZWxWYWw6Uyx5MDprLUEseTE6aytBLHlMYWJlbFZhbDpFLHNwaWtlRGlzdGFuY2U6eChfKSxob3ZlcnRlbXBsYXRlOmguaG92ZXJ0ZW1wbGF0ZX0pLGwoXyxoLHQpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKFwiZXJyb3JiYXJzXCIsXCJob3ZlckluZm9cIikoXyxoLHQpLFt0XX19aWYoLTEhPT1tLmluZGV4T2YoXCJmaWxsc1wiKSYmaC5fcG9seWdvbnMpe3ZhciBDLEwseixPLEksRCxQLFIsRixCPWguX3BvbHlnb25zLE49W10saj0hMSxWPTEvMCxVPS0xLzAscT0xLzAsSD0tMS8wO2ZvcihDPTA7QzxCLmxlbmd0aDtDKyspKHo9QltDXSkuY29udGFpbnModikmJihqPSFqLE4ucHVzaCh6KSxxPU1hdGgubWluKHEsei55bWluKSxIPU1hdGgubWF4KEgsei55bWF4KSk7aWYoail7dmFyIEc9KChxPU1hdGgubWF4KHEsMCkpKyhIPU1hdGgubWluKEgscC5fbGVuZ3RoKSkpLzI7Zm9yKEM9MDtDPE4ubGVuZ3RoO0MrKylmb3IoTz1OW0NdLnB0cyxMPTE7TDxPLmxlbmd0aDtMKyspKFI9T1tMLTFdWzFdKT5HIT0oRj1PW0xdWzFdKT49RyYmKEQ9T1tMLTFdWzBdLFA9T1tMXVswXSxGLVImJihJPUQrKFAtRCkqKEctUikvKEYtUiksVj1NYXRoLm1pbihWLEkpLFU9TWF0aC5tYXgoVSxJKSkpO1Y9TWF0aC5tYXgoViwwKSxVPU1hdGgubWluKFUsZi5fbGVuZ3RoKTt2YXIgWT1zLmRlZmF1bHRMaW5lO3JldHVybiBzLm9wYWNpdHkoaC5maWxsY29sb3IpP1k9aC5maWxsY29sb3I6cy5vcGFjaXR5KChoLmxpbmV8fHt9KS5jb2xvcikmJihZPWgubGluZS5jb2xvciksbi5leHRlbmRGbGF0KHQse2Rpc3RhbmNlOnQubWF4SG92ZXJEaXN0YW5jZSx4MDpWLHgxOlUseTA6Ryx5MTpHLGNvbG9yOlksaG92ZXJ0ZW1wbGF0ZTohMX0pLGRlbGV0ZSB0LmluZGV4LGgudGV4dCYmIUFycmF5LmlzQXJyYXkoaC50ZXh0KT90LnRleHQ9U3RyaW5nKGgudGV4dCk6dC50ZXh0PWgubmFtZSxbdF19fX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2Z4XCI6NjE3LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2ZpbGxfaG92ZXJfdGV4dFwiOjEwNjAsXCIuL2dldF90cmFjZV9jb2xvclwiOjEwNjJ9XSwxMDY0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e30saT10KFwiLi9zdWJ0eXBlc1wiKTtuLmhhc0xpbmVzPWkuaGFzTGluZXMsbi5oYXNNYXJrZXJzPWkuaGFzTWFya2VycyxuLmhhc1RleHQ9aS5oYXNUZXh0LG4uaXNCdWJibGU9aS5pc0J1YmJsZSxuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLG4uY3Jvc3NUcmFjZURlZmF1bHRzPXQoXCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzXCIpLG4uY2FsYz10KFwiLi9jYWxjXCIpLmNhbGMsbi5jcm9zc1RyYWNlQ2FsYz10KFwiLi9jcm9zc190cmFjZV9jYWxjXCIpLG4uYXJyYXlzVG9DYWxjZGF0YT10KFwiLi9hcnJheXNfdG9fY2FsY2RhdGFcIiksbi5wbG90PXQoXCIuL3Bsb3RcIiksbi5jb2xvcmJhcj10KFwiLi9tYXJrZXJfY29sb3JiYXJcIiksbi5zdHlsZT10KFwiLi9zdHlsZVwiKS5zdHlsZSxuLnN0eWxlT25TZWxlY3Q9dChcIi4vc3R5bGVcIikuc3R5bGVPblNlbGVjdCxuLmhvdmVyUG9pbnRzPXQoXCIuL2hvdmVyXCIpLG4uc2VsZWN0UG9pbnRzPXQoXCIuL3NlbGVjdFwiKSxuLmFuaW1hdGFibGU9ITAsbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJzY2F0dGVyXCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCIpLG4uY2F0ZWdvcmllcz1bXCJjYXJ0ZXNpYW5cIixcInN2Z1wiLFwic3ltYm9sc1wiLFwiZXJyb3JCYXJzT0tcIixcInNob3dMZWdlbmRcIixcInNjYXR0ZXItbGlrZVwiLFwiem9vbVNjYWxlXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi9hcnJheXNfdG9fY2FsY2RhdGFcIjoxMDUxLFwiLi9hdHRyaWJ1dGVzXCI6MTA1MixcIi4vY2FsY1wiOjEwNTMsXCIuL2Nyb3NzX3RyYWNlX2NhbGNcIjoxMDU3LFwiLi9jcm9zc190cmFjZV9kZWZhdWx0c1wiOjEwNTgsXCIuL2RlZmF1bHRzXCI6MTA1OSxcIi4vaG92ZXJcIjoxMDYzLFwiLi9tYXJrZXJfY29sb3JiYXJcIjoxMDcwLFwiLi9wbG90XCI6MTA3MixcIi4vc2VsZWN0XCI6MTA3MyxcIi4vc3R5bGVcIjoxMDc1LFwiLi9zdWJ0eXBlc1wiOjEwNzZ9XSwxMDY1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKS5pc0FycmF5T3JUeXBlZEFycmF5LGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzXCIpLmhhc0NvbG9yc2NhbGUsYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMsbCl7dmFyIGM9KHQubWFya2VyfHx7fSkuY29sb3I7KHMoXCJsaW5lLmNvbG9yXCIsciksaSh0LFwibGluZVwiKSk/YSh0LGUsbyxzLHtwcmVmaXg6XCJsaW5lLlwiLGNMZXR0ZXI6XCJjXCJ9KTpzKFwibGluZS5jb2xvclwiLCFuKGMpJiZjfHxyKTtzKFwibGluZS53aWR0aFwiKSwobHx8e30pLm5vRGFzaHx8cyhcImxpbmUuZGFzaFwiKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0c1wiOjU4OCxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzXCI6NTg5LFwiLi4vLi4vbGliXCI6NzAxfV0sMTA2NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLGk9bi5CQUROVU0sYT1uLkxPR19DTElQLG89YSsuNSxzPWEtLjUsbD10KFwiLi4vLi4vbGliXCIpLGM9bC5zZWdtZW50c0ludGVyc2VjdCx1PWwuY29uc3RyYWluLGg9dChcIi4vY29uc3RhbnRzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4sYSxmLHAsZCxnLHYsbSx5LHgsYixfLHcsayxBLFQsTSxTPWUueGF4aXMsRT1lLnlheGlzLEM9XCJsb2dcIj09PVMudHlwZSxMPVwibG9nXCI9PT1FLnR5cGUsej1TLl9sZW5ndGgsTz1FLl9sZW5ndGgsST1lLmNvbm5lY3RHYXBzLEQ9ZS5iYXNlVG9sZXJhbmNlLFA9ZS5zaGFwZSxSPVwibGluZWFyXCI9PT1QLEY9ZS5maWxsJiZcIm5vbmVcIiE9PWUuZmlsbCxCPVtdLE49aC5taW5Ub2xlcmFuY2Usaj10Lmxlbmd0aCxWPW5ldyBBcnJheShqKSxVPTA7ZnVuY3Rpb24gcShlKXt2YXIgcj10W2VdO2lmKCFyKXJldHVybiExO3ZhciBuPVMuYzJwKHIueCksYT1FLmMycChyLnkpO2lmKG49PT1pKXtpZihDJiYobj1TLmMycChyLngsITApKSxuPT09aSlyZXR1cm4hMTtMJiZhPT09aSYmKG4qPU1hdGguYWJzKFMuX20qTyooUy5fbT4wP286cykvKEUuX20qeiooRS5fbT4wP286cykpKSksbio9MWUzfWlmKGE9PT1pKXtpZihMJiYoYT1FLmMycChyLnksITApKSxhPT09aSlyZXR1cm4hMTthKj0xZTN9cmV0dXJuW24sYV19ZnVuY3Rpb24gSCh0LGUscixuKXt2YXIgaT1yLXQsYT1uLWUsbz0uNS10LHM9LjUtZSxsPWkqaSthKmEsYz1pKm8rYSpzO2lmKGM+MCYmYzxsKXt2YXIgdT1vKmEtcyppO2lmKHUqdTxsKXJldHVybiEwfX1mdW5jdGlvbiBHKHQsZSl7dmFyIHI9dFswXS96LG49dFsxXS9PLGk9TWF0aC5tYXgoMCwtcixyLTEsLW4sbi0xKTtyZXR1cm4gaSYmdm9pZCAwIT09VCYmSChyLG4sVCxNKSYmKGk9MCksaSYmZSYmSChyLG4sZVswXS96LGVbMV0vTykmJihpPTApLCgxK2gudG9sZXJhbmNlR3Jvd3RoKmkpKkR9ZnVuY3Rpb24gWSh0LGUpe3ZhciByPXRbMF0tZVswXSxuPXRbMV0tZVsxXTtyZXR1cm4gTWF0aC5zcXJ0KHIqcituKm4pfXZhciBXLFgsWiwkLEosSyxRLHR0PWgubWF4U2NyZWVuc0F3YXksZXQ9LXoqdHQscnQ9eiooMSt0dCksbnQ9LU8qdHQsaXQ9TyooMSt0dCksYXQ9W1tldCxudCxydCxudF0sW3J0LG50LHJ0LGl0XSxbcnQsaXQsZXQsaXRdLFtldCxpdCxldCxudF1dO2Z1bmN0aW9uIG90KHQpe2lmKHRbMF08ZXR8fHRbMF0+cnR8fHRbMV08bnR8fHRbMV0+aXQpcmV0dXJuW3UodFswXSxldCxydCksdSh0WzFdLG50LGl0KV19ZnVuY3Rpb24gc3QodCxlKXtyZXR1cm4gdFswXT09PWVbMF0mJih0WzBdPT09ZXR8fHRbMF09PT1ydCl8fCh0WzFdPT09ZVsxXSYmKHRbMV09PT1udHx8dFsxXT09PWl0KXx8dm9pZCAwKX1mdW5jdGlvbiBsdCh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKG4saSl7dmFyIGE9b3Qobiksbz1vdChpKSxzPVtdO2lmKGEmJm8mJnN0KGEsbykpcmV0dXJuIHM7YSYmcy5wdXNoKGEpLG8mJnMucHVzaChvKTt2YXIgYz0yKmwuY29uc3RyYWluKChuW3RdK2lbdF0pLzIsZSxyKS0oKGF8fG4pW3RdKyhvfHxpKVt0XSk7YyYmKChhJiZvP2M+MD09YVt0XT5vW3RdP2E6bzphfHxvKVt0XSs9Yyk7cmV0dXJuIHN9fWZ1bmN0aW9uIGN0KHQpe3ZhciBlPXRbMF0scj10WzFdLG49ZT09PVZbVS0xXVswXSxpPXI9PT1WW1UtMV1bMV07aWYoIW58fCFpKWlmKFU+MSl7dmFyIGE9ZT09PVZbVS0yXVswXSxvPXI9PT1WW1UtMl1bMV07biYmKGU9PT1ldHx8ZT09PXJ0KSYmYT9vP1UtLTpWW1UtMV09dDppJiYocj09PW50fHxyPT09aXQpJiZvP2E/VS0tOlZbVS0xXT10OlZbVSsrXT10fWVsc2UgVltVKytdPXR9ZnVuY3Rpb24gdXQodCl7VltVLTFdWzBdIT09dFswXSYmVltVLTFdWzFdIT09dFsxXSYmY3QoW1osJF0pLGN0KHQpLEo9bnVsbCxaPSQ9MH1mdW5jdGlvbiBodCh0KXtpZihUPXRbMF0veixNPXRbMV0vTyxXPXRbMF08ZXQ/ZXQ6dFswXT5ydD9ydDowLFg9dFsxXTxudD9udDp0WzFdPml0P2l0OjAsV3x8WCl7aWYoVSlpZihKKXt2YXIgZT1RKEosdCk7ZS5sZW5ndGg+MSYmKHV0KGVbMF0pLFZbVSsrXT1lWzFdKX1lbHNlIEs9UShWW1UtMV0sdClbMF0sVltVKytdPUs7ZWxzZSBWW1UrK109W1d8fHRbMF0sWHx8dFsxXV07dmFyIHI9VltVLTFdO1cmJlgmJihyWzBdIT09V3x8clsxXSE9PVgpPyhKJiYoWiE9PVcmJiQhPT1YP2N0KFomJiQ/KG49SixhPShpPXQpWzBdLW5bMF0sbz0oaVsxXS1uWzFdKS9hLChuWzFdKmlbMF0taVsxXSpuWzBdKS9hPjA/W28+MD9ldDpydCxpdF06W28+MD9ydDpldCxudF0pOltafHxXLCR8fFhdKTpaJiYkJiZjdChbWiwkXSkpLGN0KFtXLFhdKSk6Wi1XJiYkLVgmJmN0KFtXfHxaLFh8fCRdKSxKPXQsWj1XLCQ9WH1lbHNlIEomJnV0KFEoSix0KVswXSksVltVKytdPXQ7dmFyIG4saSxhLG99Zm9yKFwibGluZWFyXCI9PT1QfHxcInNwbGluZVwiPT09UD9RPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49MCxpPTA7aTw0O2krKyl7dmFyIGE9YXRbaV0sbz1jKHRbMF0sdFsxXSxlWzBdLGVbMV0sYVswXSxhWzFdLGFbMl0sYVszXSk7byYmKCFufHxNYXRoLmFicyhvLngtclswXVswXSk+MXx8TWF0aC5hYnMoby55LXJbMF1bMV0pPjEpJiYobz1bby54LG8ueV0sbiYmWShvLHQpPFkoclswXSx0KT9yLnVuc2hpZnQobyk6ci5wdXNoKG8pLG4rKyl9cmV0dXJuIHJ9OlwiaHZcIj09PVB8fFwidmhcIj09PVA/UT1mdW5jdGlvbih0LGUpe3ZhciByPVtdLG49b3QodCksaT1vdChlKTtyZXR1cm4gbiYmaSYmc3QobixpKT9yOihuJiZyLnB1c2gobiksaSYmci5wdXNoKGkpLHIpfTpcImh2aFwiPT09UD9RPWx0KDAsZXQscnQpOlwidmh2XCI9PT1QJiYoUT1sdCgxLG50LGl0KSkscj0wO3I8ajtyKyspaWYobj1xKHIpKXtmb3IoVT0wLEo9bnVsbCxodChuKSxyKys7cjxqO3IrKyl7aWYoIShmPXEocikpKXtpZihJKWNvbnRpbnVlO2JyZWFrfWlmKFImJmUuc2ltcGxpZnkpe3ZhciBmdD1xKHIrMSk7aWYoeT1ZKGYsbiksRiYmKDA9PT1VfHxVPT09ai0xKXx8ISh5PEcoZixmdCkqTikpe2Zvcih2PVsoZlswXS1uWzBdKS95LChmWzFdLW5bMV0pL3ldLHA9bix4PXksYj13PWs9MCxnPSExLGE9ZixyKys7cjx0Lmxlbmd0aDtyKyspe2lmKGQ9ZnQsZnQ9cShyKzEpLCFkKXtpZihJKWNvbnRpbnVlO2JyZWFrfWlmKEE9KG09W2RbMF0tblswXSxkWzFdLW5bMV1dKVswXSp2WzFdLW1bMV0qdlswXSx3PU1hdGgubWluKHcsQSksKGs9TWF0aC5tYXgoayxBKSktdz5HKGQsZnQpKWJyZWFrO2E9ZCwoXz1tWzBdKnZbMF0rbVsxXSp2WzFdKT54Pyh4PV8sZj1kLGc9ITEpOl88YiYmKGI9XyxwPWQsZz0hMCl9aWYoZz8oaHQoZiksYSE9PXAmJmh0KHApKToocCE9PW4mJmh0KHApLGEhPT1mJiZodChmKSksaHQoYSkscj49dC5sZW5ndGh8fCFkKWJyZWFrO2h0KGQpLG49ZH19ZWxzZSBodChmKX1KJiZjdChbWnx8SlswXSwkfHxKWzFdXSksQi5wdXNoKFYuc2xpY2UoMCxVKSl9cmV0dXJuIEJ9fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi9jb25zdGFudHNcIjoxMDU2fV0sMTA2NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7XCJzcGxpbmVcIj09PXIoXCJsaW5lLnNoYXBlXCIpJiZyKFwibGluZS5zbW9vdGhpbmdcIil9fSx7fV0sMTA2ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt0b25leHR4OjEsdG9uZXh0eToxLHRvbmV4dDoxfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEsbyxzLGwsYz17fSx1PSExLGg9LTEsZj0wLHA9LTE7Zm9yKGE9MDthPHIubGVuZ3RoO2ErKykobz0oaT1yW2FdWzBdLnRyYWNlKS5zdGFja2dyb3VwfHxcIlwiKT9vIGluIGM/bD1jW29dOihsPWNbb109ZixmKyspOmkuZmlsbCBpbiBuJiZwPj0wP2w9cDoobD1wPWYsZisrKSxsPGgmJih1PSEwKSxpLl9ncm91cEluZGV4PWg9bDt2YXIgZD1yLnNsaWNlKCk7dSYmZC5zb3J0KGZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswXS50cmFjZSxuPWVbMF0udHJhY2U7cmV0dXJuIHIuX2dyb3VwSW5kZXgtbi5fZ3JvdXBJbmRleHx8ci5pbmRleC1uLmluZGV4fSk7dmFyIGc9e307Zm9yKGE9MDthPGQubGVuZ3RoO2ErKylvPShpPWRbYV1bMF0udHJhY2UpLnN0YWNrZ3JvdXB8fFwiXCIsITA9PT1pLnZpc2libGU/KGkuX25leHR0cmFjZT1udWxsLGkuZmlsbCBpbiBuJiYocz1nW29dLGkuX3ByZXZ0cmFjZT1zfHxudWxsLHMmJihzLl9uZXh0dHJhY2U9aSkpLGkuX293bmZpbGw9aS5maWxsJiYoXCJ0b3plcm9cIj09PWkuZmlsbC5zdWJzdHIoMCw2KXx8XCJ0b3NlbGZcIj09PWkuZmlsbHx8XCJ0b1wiPT09aS5maWxsLnN1YnN0cigwLDIpJiYhaS5fcHJldnRyYWNlKSxnW29dPWkpOmkuX3ByZXZ0cmFjZT1pLl9uZXh0dHJhY2U9aS5fb3duZmlsbD1udWxsO3JldHVybiBkfX0se31dLDEwNjk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWFya2VyLHI9ZS5zaXplcmVmfHwxLGk9ZS5zaXplbWlufHwwLGE9XCJhcmVhXCI9PT1lLnNpemVtb2RlP2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQodC9yKX06ZnVuY3Rpb24odCl7cmV0dXJuIHQvcn07cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWEodC8yKTtyZXR1cm4gbihlKSYmZT4wP01hdGgubWF4KGUsaSk6MH19fSx7XCJmYXN0LWlzbnVtZXJpY1wiOjIyMn1dLDEwNzA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e2NvbnRhaW5lcjpcIm1hcmtlclwiLG1pbjpcImNtaW5cIixtYXg6XCJjbWF4XCJ9fSx7fV0sMTA3MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzXCIpLmhhc0NvbG9yc2NhbGUsYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCIpLG89dChcIi4vc3VidHlwZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCxjKXt2YXIgdT1vLmlzQnViYmxlKHQpLGg9KHQubGluZXx8e30pLmNvbG9yOyhjPWN8fHt9LGgmJihyPWgpLGwoXCJtYXJrZXIuc3ltYm9sXCIpLGwoXCJtYXJrZXIub3BhY2l0eVwiLHU/Ljc6MSksbChcIm1hcmtlci5zaXplXCIpLGwoXCJtYXJrZXIuY29sb3JcIixyKSxpKHQsXCJtYXJrZXJcIikmJmEodCxlLHMsbCx7cHJlZml4OlwibWFya2VyLlwiLGNMZXR0ZXI6XCJjXCJ9KSxjLm5vU2VsZWN0fHwobChcInNlbGVjdGVkLm1hcmtlci5jb2xvclwiKSxsKFwidW5zZWxlY3RlZC5tYXJrZXIuY29sb3JcIiksbChcInNlbGVjdGVkLm1hcmtlci5zaXplXCIpLGwoXCJ1bnNlbGVjdGVkLm1hcmtlci5zaXplXCIpKSxjLm5vTGluZXx8KGwoXCJtYXJrZXIubGluZS5jb2xvclwiLGgmJiFBcnJheS5pc0FycmF5KGgpJiZlLm1hcmtlci5jb2xvciE9PWg/aDp1P24uYmFja2dyb3VuZDpuLmRlZmF1bHRMaW5lKSxpKHQsXCJtYXJrZXIubGluZVwiKSYmYSh0LGUscyxsLHtwcmVmaXg6XCJtYXJrZXIubGluZS5cIixjTGV0dGVyOlwiY1wifSksbChcIm1hcmtlci5saW5lLndpZHRoXCIsdT8xOjApKSx1JiYobChcIm1hcmtlci5zaXplcmVmXCIpLGwoXCJtYXJrZXIuc2l6ZW1pblwiKSxsKFwibWFya2VyLnNpemVtb2RlXCIpKSxjLmdyYWRpZW50KSYmKFwibm9uZVwiIT09bChcIm1hcmtlci5ncmFkaWVudC50eXBlXCIpJiZsKFwibWFya2VyLmdyYWRpZW50LmNvbG9yXCIpKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIjo1ODgsXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVyc1wiOjU4OSxcIi4vc3VidHlwZXNcIjoxMDc2fV0sMTA3MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxhPXQoXCIuLi8uLi9saWJcIiksbz1hLmVuc3VyZVNpbmdsZSxzPWEuaWRlbnRpdHksbD10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLGM9dChcIi4vc3VidHlwZXNcIiksdT10KFwiLi9saW5lX3BvaW50c1wiKSxoPXQoXCIuL2xpbmtfdHJhY2VzXCIpLGY9dChcIi4uLy4uL2xpYi9wb2x5Z29uXCIpLnRlc3RlcjtmdW5jdGlvbiBwKHQsZSxyLGgscCxkLGcpe3ZhciB2OyFmdW5jdGlvbih0LGUscixpLG8pe3ZhciBzPXIueGF4aXMsbD1yLnlheGlzLHU9bi5leHRlbnQoYS5zaW1wbGVNYXAocy5yYW5nZSxzLnIyYykpLGg9bi5leHRlbnQoYS5zaW1wbGVNYXAobC5yYW5nZSxsLnIyYykpLGY9aVswXS50cmFjZTtpZighYy5oYXNNYXJrZXJzKGYpKXJldHVybjt2YXIgcD1mLm1hcmtlci5tYXhkaXNwbGF5ZWQ7aWYoMD09PXApcmV0dXJuO3ZhciBkPWkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0Lng+PXVbMF0mJnQueDw9dVsxXSYmdC55Pj1oWzBdJiZ0Lnk8PWhbMV19KSxnPU1hdGguY2VpbChkLmxlbmd0aC9wKSx2PTA7by5mb3JFYWNoKGZ1bmN0aW9uKHQscil7dmFyIG49dFswXS50cmFjZTtjLmhhc01hcmtlcnMobikmJm4ubWFya2VyLm1heGRpc3BsYXllZD4wJiZyPGUmJnYrK30pO3ZhciBtPU1hdGgucm91bmQodipnLzMrTWF0aC5mbG9vcih2LzMpKmcvNy4xKTtpLmZvckVhY2goZnVuY3Rpb24odCl7ZGVsZXRlIHQudmlzfSksZC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7MD09PU1hdGgucm91bmQoKGUrbSklZykmJih0LnZpcz0hMCl9KX0oMCxlLHIsaCxwKTt2YXIgbT0hIWcmJmcuZHVyYXRpb24+MDtmdW5jdGlvbiB5KHQpe3JldHVybiBtP3QudHJhbnNpdGlvbigpOnR9dmFyIHg9ci54YXhpcyxiPXIueWF4aXMsXz1oWzBdLnRyYWNlLHc9Xy5saW5lLGs9bi5zZWxlY3QoZCksQT1vKGssXCJnXCIsXCJlcnJvcmJhcnNcIiksVD1vKGssXCJnXCIsXCJsaW5lc1wiKSxNPW8oayxcImdcIixcInBvaW50c1wiKSxTPW8oayxcImdcIixcInRleHRcIik7aWYoaS5nZXRDb21wb25lbnRNZXRob2QoXCJlcnJvcmJhcnNcIixcInBsb3RcIikodCxBLHIsZyksITA9PT1fLnZpc2libGUpe3ZhciBFLEM7eShrKS5zdHlsZShcIm9wYWNpdHlcIixfLm9wYWNpdHkpO3ZhciBMPV8uZmlsbC5jaGFyQXQoXy5maWxsLmxlbmd0aC0xKTtcInhcIiE9PUwmJlwieVwiIT09TCYmKEw9XCJcIiksci5pc1JhbmdlUGxvdHx8KGhbMF0ubm9kZTM9ayk7dmFyIHosTyxJPVwiXCIsRD1bXSxQPV8uX3ByZXZ0cmFjZTtQJiYoST1QLl9wcmV2UmV2cGF0aHx8XCJcIixDPVAuX25leHRGaWxsLEQ9UC5fcG9seWdvbnMpO3ZhciBSLEYsQixOLGosVixVLHE9XCJcIixIPVwiXCIsRz1bXSxZPWEubm9vcDtpZihFPV8uX293bkZpbGwsYy5oYXNMaW5lcyhfKXx8XCJub25lXCIhPT1fLmZpbGwpe2ZvcihDJiZDLmRhdHVtKGgpLC0xIT09W1wiaHZcIixcInZoXCIsXCJodmhcIixcInZodlwiXS5pbmRleE9mKHcuc2hhcGUpPyhSPWwuc3RlcHMody5zaGFwZSksRj1sLnN0ZXBzKHcuc2hhcGUuc3BsaXQoXCJcIikucmV2ZXJzZSgpLmpvaW4oXCJcIikpKTpSPUY9XCJzcGxpbmVcIj09PXcuc2hhcGU/ZnVuY3Rpb24odCl7dmFyIGU9dFt0Lmxlbmd0aC0xXTtyZXR1cm4gdC5sZW5ndGg+MSYmdFswXVswXT09PWVbMF0mJnRbMF1bMV09PT1lWzFdP2wuc21vb3RoY2xvc2VkKHQuc2xpY2UoMSksdy5zbW9vdGhpbmcpOmwuc21vb3Rob3Blbih0LHcuc21vb3RoaW5nKX06ZnVuY3Rpb24odCl7cmV0dXJuXCJNXCIrdC5qb2luKFwiTFwiKX0sQj1mdW5jdGlvbih0KXtyZXR1cm4gRih0LnJldmVyc2UoKSl9LEc9dShoLHt4YXhpczp4LHlheGlzOmIsY29ubmVjdEdhcHM6Xy5jb25uZWN0Z2FwcyxiYXNlVG9sZXJhbmNlOk1hdGgubWF4KHcud2lkdGh8fDEsMykvNCxzaGFwZTp3LnNoYXBlLHNpbXBsaWZ5Oncuc2ltcGxpZnksZmlsbDpfLmZpbGx9KSxVPV8uX3BvbHlnb25zPW5ldyBBcnJheShHLmxlbmd0aCksdj0wO3Y8Ry5sZW5ndGg7disrKV8uX3BvbHlnb25zW3ZdPWYoR1t2XSk7Ry5sZW5ndGgmJihOPUdbMF1bMF0sVj0oaj1HW0cubGVuZ3RoLTFdKVtqLmxlbmd0aC0xXSksWT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoej1SKGUpLE89QihlKSxxP0w/KHErPVwiTFwiK3ouc3Vic3RyKDEpLEg9TytcIkxcIitILnN1YnN0cigxKSk6KHErPVwiWlwiK3osSD1PK1wiWlwiK0gpOihxPXosSD1PKSxjLmhhc0xpbmVzKF8pJiZlLmxlbmd0aD4xKXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtpZihyLmRhdHVtKGgpLHQpeShyLnN0eWxlKFwib3BhY2l0eVwiLDApLmF0dHIoXCJkXCIseikuY2FsbChsLmxpbmVHcm91cFN0eWxlKSkuc3R5bGUoXCJvcGFjaXR5XCIsMSk7ZWxzZXt2YXIgaT15KHIpO2kuYXR0cihcImRcIix6KSxsLnNpbmdsZUxpbmVTdHlsZShoLGkpfX19fX12YXIgVz1ULnNlbGVjdEFsbChcIi5qcy1saW5lXCIpLmRhdGEoRyk7eShXLmV4aXQoKSkuc3R5bGUoXCJvcGFjaXR5XCIsMCkucmVtb3ZlKCksVy5lYWNoKFkoITEpKSxXLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5jbGFzc2VkKFwianMtbGluZVwiLCEwKS5zdHlsZShcInZlY3Rvci1lZmZlY3RcIixcIm5vbi1zY2FsaW5nLXN0cm9rZVwiKS5jYWxsKGwubGluZUdyb3VwU3R5bGUpLmVhY2goWSghMCkpLGwuc2V0Q2xpcFVybChXLHIubGF5ZXJDbGlwSWQsdCksRy5sZW5ndGg/KEU/KEUuZGF0dW0oaCksTiYmViYmKEw/KFwieVwiPT09TD9OWzFdPVZbMV09Yi5jMnAoMCwhMCk6XCJ4XCI9PT1MJiYoTlswXT1WWzBdPXguYzJwKDAsITApKSx5KEUpLmF0dHIoXCJkXCIsXCJNXCIrVitcIkxcIitOK1wiTFwiK3Euc3Vic3RyKDEpKS5jYWxsKGwuc2luZ2xlRmlsbFN0eWxlKSk6eShFKS5hdHRyKFwiZFwiLHErXCJaXCIpLmNhbGwobC5zaW5nbGVGaWxsU3R5bGUpKSk6QyYmKFwidG9uZXh0XCI9PT1fLmZpbGwuc3Vic3RyKDAsNikmJnEmJkk/KFwidG9uZXh0XCI9PT1fLmZpbGw/eShDKS5hdHRyKFwiZFwiLHErXCJaXCIrSStcIlpcIikuY2FsbChsLnNpbmdsZUZpbGxTdHlsZSk6eShDKS5hdHRyKFwiZFwiLHErXCJMXCIrSS5zdWJzdHIoMSkrXCJaXCIpLmNhbGwobC5zaW5nbGVGaWxsU3R5bGUpLF8uX3BvbHlnb25zPV8uX3BvbHlnb25zLmNvbmNhdChEKSk6KFooQyksXy5fcG9seWdvbnM9bnVsbCkpLF8uX3ByZXZSZXZwYXRoPUgsXy5fcHJldlBvbHlnb25zPVUpOihFP1ooRSk6QyYmWihDKSxfLl9wb2x5Z29ucz1fLl9wcmV2UmV2cGF0aD1fLl9wcmV2UG9seWdvbnM9bnVsbCksTS5kYXR1bShoKSxTLmRhdHVtKGgpLGZ1bmN0aW9uKGUsaSxhKXt2YXIgbyx1PWFbMF0udHJhY2UsaD1jLmhhc01hcmtlcnModSksZj1jLmhhc1RleHQodSkscD10dCh1KSxkPWV0LGc9ZXQ7aWYoaHx8Zil7dmFyIHY9cyxfPXUuc3RhY2tncm91cCx3PV8mJlwiaW5mZXIgemVyb1wiPT09dC5fZnVsbExheW91dC5fc2NhdHRlclN0YWNrT3B0c1t4Ll9pZCtiLl9pZF1bX10uc3RhY2tnYXBzO3UubWFya2VyLm1heGRpc3BsYXllZHx8dS5fbmVlZHNDdWxsP3Y9dz9KOiQ6XyYmIXcmJih2PUspLGgmJihkPXYpLGYmJihnPXYpfXZhciBrLEE9KG89ZS5zZWxlY3RBbGwoXCJwYXRoLnBvaW50XCIpLmRhdGEoZCxwKSkuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmNsYXNzZWQoXCJwb2ludFwiLCEwKTttJiZBLmNhbGwobC5wb2ludFN0eWxlLHUsdCkuY2FsbChsLnRyYW5zbGF0ZVBvaW50cyx4LGIpLnN0eWxlKFwib3BhY2l0eVwiLDApLnRyYW5zaXRpb24oKS5zdHlsZShcIm9wYWNpdHlcIiwxKSxvLm9yZGVyKCksaCYmKGs9bC5tYWtlUG9pbnRTdHlsZUZucyh1KSksby5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLGE9eShpKTtsLnRyYW5zbGF0ZVBvaW50KGUsYSx4LGIpPyhsLnNpbmdsZVBvaW50U3R5bGUoZSxhLHUsayx0KSxyLmxheWVyQ2xpcElkJiZsLmhpZGVPdXRzaWRlUmFuZ2VQb2ludChlLGEseCxiLHUueGNhbGVuZGFyLHUueWNhbGVuZGFyKSx1LmN1c3RvbWRhdGEmJmkuY2xhc3NlZChcInBsb3RseS1jdXN0b21kYXRhXCIsbnVsbCE9PWUuZGF0YSYmdm9pZCAwIT09ZS5kYXRhKSk6YS5yZW1vdmUoKX0pLG0/by5leGl0KCkudHJhbnNpdGlvbigpLnN0eWxlKFwib3BhY2l0eVwiLDApLnJlbW92ZSgpOm8uZXhpdCgpLnJlbW92ZSgpLChvPWkuc2VsZWN0QWxsKFwiZ1wiKS5kYXRhKGcscCkpLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwidGV4dHBvaW50XCIsITApLmFwcGVuZChcInRleHRcIiksby5vcmRlcigpLG8uZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxpPXkoZS5zZWxlY3QoXCJ0ZXh0XCIpKTtsLnRyYW5zbGF0ZVBvaW50KHQsaSx4LGIpP3IubGF5ZXJDbGlwSWQmJmwuaGlkZU91dHNpZGVSYW5nZVBvaW50KHQsZSx4LGIsdS54Y2FsZW5kYXIsdS55Y2FsZW5kYXIpOmUucmVtb3ZlKCl9KSxvLnNlbGVjdEFsbChcInRleHRcIikuY2FsbChsLnRleHRQb2ludFN0eWxlLHUsdCkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT14LmMycCh0LngpLHI9Yi5jMnAodC55KTtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoXCJ0c3Bhbi5saW5lXCIpLmVhY2goZnVuY3Rpb24oKXt5KG4uc2VsZWN0KHRoaXMpKS5hdHRyKHt4OmUseTpyfSl9KX0pLG8uZXhpdCgpLnJlbW92ZSgpfShNLFMsaCk7dmFyIFg9ITE9PT1fLmNsaXBvbmF4aXM/bnVsbDpyLmxheWVyQ2xpcElkO2wuc2V0Q2xpcFVybChNLFgsdCksbC5zZXRDbGlwVXJsKFMsWCx0KX1mdW5jdGlvbiBaKHQpe3kodCkuYXR0cihcImRcIixcIk0wLDBaXCIpfWZ1bmN0aW9uICQodCl7cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiF0LmdhcCYmdC52aXN9KX1mdW5jdGlvbiBKKHQpe3JldHVybiB0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC52aXN9KX1mdW5jdGlvbiBLKHQpe3JldHVybiB0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hdC5nYXB9KX1mdW5jdGlvbiBRKHQpe3JldHVybiB0LmlkfWZ1bmN0aW9uIHR0KHQpe2lmKHQuaWRzKXJldHVybiBRfWZ1bmN0aW9uIGV0KCl7cmV0dXJuITF9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLGEsYyl7dmFyIHUsZixkPSFhLGc9ISFhJiZhLmR1cmF0aW9uPjAsdj1oKHQsZSxyKTsoKHU9aS5zZWxlY3RBbGwoXCJnLnRyYWNlXCIpLmRhdGEodixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS51aWR9KSkuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhY2Ugc2NhdHRlciB0cmFjZVwiK3RbMF0udHJhY2UudWlkfSkuc3R5bGUoXCJzdHJva2UtbWl0ZXJsaW1pdFwiLDIpLHUub3JkZXIoKSxmdW5jdGlvbih0LGUscil7ZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPW8obi5zZWxlY3QodGhpcyksXCJnXCIsXCJmaWxsc1wiKTtsLnNldENsaXBVcmwoaSxyLmxheWVyQ2xpcElkLHQpO3ZhciBhPWVbMF0udHJhY2UsYz1bXTthLl9vd25maWxsJiZjLnB1c2goXCJfb3duRmlsbFwiKSxhLl9uZXh0dHJhY2UmJmMucHVzaChcIl9uZXh0RmlsbFwiKTt2YXIgdT1pLnNlbGVjdEFsbChcImdcIikuZGF0YShjLHMpO3UuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLHUuZXhpdCgpLmVhY2goZnVuY3Rpb24odCl7YVt0XT1udWxsfSkucmVtb3ZlKCksdS5vcmRlcigpLmVhY2goZnVuY3Rpb24odCl7YVt0XT1vKG4uc2VsZWN0KHRoaXMpLFwicGF0aFwiLFwianMtZmlsbFwiKX0pfSl9KHQsdSxlKSxnKT8oYyYmKGY9YygpKSxuLnRyYW5zaXRpb24oKS5kdXJhdGlvbihhLmR1cmF0aW9uKS5lYXNlKGEuZWFzaW5nKS5lYWNoKFwiZW5kXCIsZnVuY3Rpb24oKXtmJiZmKCl9KS5lYWNoKFwiaW50ZXJydXB0XCIsZnVuY3Rpb24oKXtmJiZmKCl9KS5lYWNoKGZ1bmN0aW9uKCl7aS5zZWxlY3RBbGwoXCJnLnRyYWNlXCIpLmVhY2goZnVuY3Rpb24ocixuKXtwKHQsbixlLHIsdix0aGlzLGEpfSl9KSk6dS5lYWNoKGZ1bmN0aW9uKHIsbil7cCh0LG4sZSxyLHYsdGhpcyxhKX0pO2QmJnUuZXhpdCgpLnJlbW92ZSgpLGkuc2VsZWN0QWxsKFwicGF0aDpub3QoW2RdKVwiKS5yZW1vdmUoKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9wb2x5Z29uXCI6NzEzLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2xpbmVfcG9pbnRzXCI6MTA2NixcIi4vbGlua190cmFjZXNcIjoxMDY4LFwiLi9zdWJ0eXBlc1wiOjEwNzYsZDM6MTU1fV0sMTA3MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL3N1YnR5cGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYSxvLHM9dC5jZCxsPXQueGF4aXMsYz10LnlheGlzLHU9W10saD1zWzBdLnRyYWNlO2lmKCFuLmhhc01hcmtlcnMoaCkmJiFuLmhhc1RleHQoaCkpcmV0dXJuW107aWYoITE9PT1lKWZvcihyPTA7cjxzLmxlbmd0aDtyKyspc1tyXS5zZWxlY3RlZD0wO2Vsc2UgZm9yKHI9MDtyPHMubGVuZ3RoO3IrKylpPXNbcl0sYT1sLmMycChpLngpLG89Yy5jMnAoaS55KSxudWxsIT09aS5pJiZlLmNvbnRhaW5zKFthLG9dLCExLHIsdCk/KHUucHVzaCh7cG9pbnROdW1iZXI6aS5pLHg6bC5jMmQoaS54KSx5OmMuYzJkKGkueSl9KSxpLnNlbGVjdGVkPTEpOmkuc2VsZWN0ZWQ9MDtyZXR1cm4gdX19LHtcIi4vc3VidHlwZXNcIjoxMDc2fV0sMTA3NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPVtcIm9yaWVudGF0aW9uXCIsXCJncm91cG5vcm1cIixcInN0YWNrZ2Fwc1wiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9ci5fc2NhdHRlclN0YWNrT3B0cyxvPWkoXCJzdGFja2dyb3VwXCIpO2lmKG8pe3ZhciBzPWUueGF4aXMrZS55YXhpcyxsPWFbc107bHx8KGw9YVtzXT17fSk7dmFyIGM9bFtvXSx1PSExO2M/Yy50cmFjZXMucHVzaChlKTooYz1sW29dPXt0cmFjZUluZGljZXM6W10sdHJhY2VzOltlXX0sdT0hMCk7Zm9yKHZhciBoPXtvcmllbnRhdGlvbjplLngmJiFlLnk/XCJoXCI6XCJ2XCJ9LGY9MDtmPG4ubGVuZ3RoO2YrKyl7dmFyIHA9bltmXSxkPXArXCJGb3VuZFwiO2lmKCFjW2RdKXt2YXIgZz12b2lkIDAhPT10W3BdLHY9XCJvcmllbnRhdGlvblwiPT09cDtpZigoZ3x8dSkmJihjW3BdPWkocCxoW3BdKSx2JiYoYy5maWxsRGZsdD1cImhcIj09PWNbcF0/XCJ0b25leHR4XCI6XCJ0b25leHR5XCIpLGcmJihjW2RdPSEwLCF1JiYoZGVsZXRlIGMudHJhY2VzWzBdW3BdLHYpKSkpZm9yKHZhciBtPTA7bTxjLnRyYWNlcy5sZW5ndGgtMTttKyspe3ZhciB5PWMudHJhY2VzW21dO3kuX2lucHV0LmZpbGwhPT15LmZpbGwmJih5LmZpbGw9Yy5maWxsRGZsdCl9fX1yZXR1cm4gY319fSx7fV0sMTA3NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksYT10KFwiLi4vLi4vcmVnaXN0cnlcIik7ZnVuY3Rpb24gbyh0LGUscil7aS5wb2ludFN0eWxlKHQuc2VsZWN0QWxsKFwicGF0aC5wb2ludFwiKSxlLHIpfWZ1bmN0aW9uIHModCxlLHIpe2kudGV4dFBvaW50U3R5bGUodC5zZWxlY3RBbGwoXCJ0ZXh0XCIpLGUscil9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUpe3ZhciByPWU/ZVswXS5ub2RlMzpuLnNlbGVjdCh0KS5zZWxlY3RBbGwoXCJnLnRyYWNlLnNjYXR0ZXJcIik7ci5zdHlsZShcIm9wYWNpdHlcIixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSksci5zZWxlY3RBbGwoXCJnLnBvaW50c1wiKS5lYWNoKGZ1bmN0aW9uKGUpe28obi5zZWxlY3QodGhpcyksZS50cmFjZXx8ZVswXS50cmFjZSx0KX0pLHIuc2VsZWN0QWxsKFwiZy50ZXh0XCIpLmVhY2goZnVuY3Rpb24oZSl7cyhuLnNlbGVjdCh0aGlzKSxlLnRyYWNlfHxlWzBdLnRyYWNlLHQpfSksci5zZWxlY3RBbGwoXCJnLnRyYWNlIHBhdGguanMtbGluZVwiKS5jYWxsKGkubGluZUdyb3VwU3R5bGUpLHIuc2VsZWN0QWxsKFwiZy50cmFjZSBwYXRoLmpzLWZpbGxcIikuY2FsbChpLmZpbGxHcm91cFN0eWxlKSxhLmdldENvbXBvbmVudE1ldGhvZChcImVycm9yYmFyc1wiLFwic3R5bGVcIikocil9LHN0eWxlUG9pbnRzOm8sc3R5bGVUZXh0OnMsc3R5bGVPblNlbGVjdDpmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0ubm9kZTMsbj1lWzBdLnRyYWNlO24uc2VsZWN0ZWRwb2ludHM/KGkuc2VsZWN0ZWRQb2ludFN0eWxlKHIuc2VsZWN0QWxsKFwicGF0aC5wb2ludFwiKSxuKSxpLnNlbGVjdGVkVGV4dFN0eWxlKHIuc2VsZWN0QWxsKFwidGV4dFwiKSxuKSk6KG8ocixuLHQpLHMocixuLHQpKX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxkMzoxNTV9XSwxMDc2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKTtlLmV4cG9ydHM9e2hhc0xpbmVzOmZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGUmJnQubW9kZSYmLTEhPT10Lm1vZGUuaW5kZXhPZihcImxpbmVzXCIpfSxoYXNNYXJrZXJzOmZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGUmJih0Lm1vZGUmJi0xIT09dC5tb2RlLmluZGV4T2YoXCJtYXJrZXJzXCIpfHxcInNwbG9tXCI9PT10LnR5cGUpfSxoYXNUZXh0OmZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGUmJnQubW9kZSYmLTEhPT10Lm1vZGUuaW5kZXhPZihcInRleHRcIil9LGlzQnViYmxlOmZ1bmN0aW9uKHQpe3JldHVybiBuLmlzUGxhaW5PYmplY3QodC5tYXJrZXIpJiZuLmlzQXJyYXlPclR5cGVkQXJyYXkodC5tYXJrZXIuc2l6ZSl9fX0se1wiLi4vLi4vbGliXCI6NzAxfV0sMTA3NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksYSl7YT1hfHx7fSxpKFwidGV4dHBvc2l0aW9uXCIpLG4uY29lcmNlRm9udChpLFwidGV4dGZvbnRcIixyLmZvbnQpLGEubm9TZWxlY3R8fChpKFwic2VsZWN0ZWQudGV4dGZvbnQuY29sb3JcIiksaShcInVuc2VsZWN0ZWQudGV4dGZvbnQuY29sb3JcIikpfX0se1wiLi4vLi4vbGliXCI6NzAxfV0sMTA3ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcmVnaXN0cnlcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvLHM9YShcInhcIiksbD1hKFwieVwiKTtpZihpLmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiaGFuZGxlVHJhY2VEZWZhdWx0c1wiKSh0LGUsW1wieFwiLFwieVwiXSxyKSxzKXt2YXIgYz1uLm1pblJvd0xlbmd0aChzKTtsP289TWF0aC5taW4oYyxuLm1pblJvd0xlbmd0aChsKSk6KG89YyxhKFwieTBcIiksYShcImR5XCIpKX1lbHNle2lmKCFsKXJldHVybiAwO289bi5taW5Sb3dMZW5ndGgobCksYShcIngwXCIpLGEoXCJkeFwiKX1yZXR1cm4gZS5fbGVuZ3RoPW8sb319LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5fV0sMTA3OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9jb25zdGFudHMvZ2wzZF9kYXNoZXNcIiksbD10KFwiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2Vyc1wiKSxjPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsdT10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbCxoPW4ubGluZSxmPW4ubWFya2VyLHA9Zi5saW5lLGQ9Yyh7d2lkdGg6aC53aWR0aCxkYXNoOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpPYmplY3Qua2V5cyhzKSxkZmx0Olwic29saWRcIn19LGkoXCJsaW5lXCIpKTt2YXIgZz1lLmV4cG9ydHM9dSh7eDpuLngseTpuLnksejp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIn0sdGV4dDpjKHt9LG4udGV4dCx7fSksaG92ZXJ0ZXh0OmMoe30sbi5ob3ZlcnRleHQse30pLGhvdmVydGVtcGxhdGU6YSgpLG1vZGU6Yyh7fSxuLm1vZGUse2RmbHQ6XCJsaW5lcyttYXJrZXJzXCJ9KSxzdXJmYWNlYXhpczp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6Wy0xLDAsMSwyXSxkZmx0Oi0xfSxzdXJmYWNlY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwifSxwcm9qZWN0aW9uOnt4OntzaG93Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LG9wYWNpdHk6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0OjF9LHNjYWxlOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEwLGRmbHQ6Mi8zfX0seTp7c2hvdzp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxvcGFjaXR5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDoxfSxzY2FsZTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxMCxkZmx0OjIvM319LHo6e3Nob3c6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sb3BhY2l0eTp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MX0sc2NhbGU6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MTAsZGZsdDoyLzN9fX0sY29ubmVjdGdhcHM6bi5jb25uZWN0Z2FwcyxsaW5lOmQsbWFya2VyOmMoe3N5bWJvbDp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6T2JqZWN0LmtleXMobCksZGZsdDpcImNpcmNsZVwiLGFycmF5T2s6ITB9LHNpemU6Yyh7fSxmLnNpemUse2RmbHQ6OH0pLHNpemVyZWY6Zi5zaXplcmVmLHNpemVtaW46Zi5zaXplbWluLHNpemVtb2RlOmYuc2l6ZW1vZGUsb3BhY2l0eTpjKHt9LGYub3BhY2l0eSx7YXJyYXlPazohMX0pLGNvbG9yYmFyOmYuY29sb3JiYXIsbGluZTpjKHt3aWR0aDpjKHt9LHAud2lkdGgse2FycmF5T2s6ITF9KX0saShcIm1hcmtlci5saW5lXCIpKX0saShcIm1hcmtlclwiKSksdGV4dHBvc2l0aW9uOmMoe30sbi50ZXh0cG9zaXRpb24se2RmbHQ6XCJ0b3AgY2VudGVyXCJ9KSx0ZXh0Zm9udDp7Y29sb3I6bi50ZXh0Zm9udC5jb2xvcixzaXplOm4udGV4dGZvbnQuc2l6ZSxmYW1pbHk6Yyh7fSxuLnRleHRmb250LmZhbWlseSx7YXJyYXlPazohMX0pfSxob3ZlcmluZm86Yyh7fSxvLmhvdmVyaW5mbyl9LFwiY2FsY1wiLFwibmVzdGVkXCIpO2cueC5lZGl0VHlwZT1nLnkuZWRpdFR5cGU9Zy56LmVkaXRUeXBlPVwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vY29uc3RhbnRzL2dsM2RfZGFzaGVzXCI6Njc1LFwiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2Vyc1wiOjY3NixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiOjc0NixcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiOjEwNTJ9XSwxMDgwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhXCIpLGk9dChcIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPVt7eDohMSx5OiExLHRyYWNlOmUsdDp7fX1dO3JldHVybiBuKHIsZSksaSh0LGUpLHJ9fSx7XCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YVwiOjEwNTEsXCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsY1wiOjEwNTV9XSwxMDgxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpO2Z1bmN0aW9uIGkodCxlLHIsaSl7aWYoIWV8fCFlLnZpc2libGUpcmV0dXJuIG51bGw7Zm9yKHZhciBhPW4uZ2V0Q29tcG9uZW50TWV0aG9kKFwiZXJyb3JiYXJzXCIsXCJtYWtlQ29tcHV0ZUVycm9yXCIpKGUpLG89bmV3IEFycmF5KHQubGVuZ3RoKSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPWEoK3Rbc10scyk7aWYoXCJsb2dcIj09PWkudHlwZSl7dmFyIGM9aS5jMmwodFtzXSksdT10W3NdLWxbMF0saD10W3NdK2xbMV07aWYob1tzXT1bKGkuYzJsKHUsITApLWMpKnIsKGkuYzJsKGgsITApLWMpKnJdLHU+MCl7dmFyIGY9aS5jMmwodSk7aS5fbG93ZXJMb2dFcnJvckJvdW5kfHwoaS5fbG93ZXJMb2dFcnJvckJvdW5kPWYpLGkuX2xvd2VyRXJyb3JCb3VuZD1NYXRoLm1pbihpLl9sb3dlckxvZ0Vycm9yQm91bmQsZil9fWVsc2Ugb1tzXT1bLWxbMF0qcixsWzFdKnJdfXJldHVybiBvfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49W2kodC54LHQuZXJyb3JfeCxlWzBdLHIueGF4aXMpLGkodC55LHQuZXJyb3JfeSxlWzFdLHIueWF4aXMpLGkodC56LHQuZXJyb3JfeixlWzJdLHIuemF4aXMpXSxhPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKHRbZV0pcmV0dXJuIHRbZV0ubGVuZ3RoO3JldHVybiAwfShuKTtpZigwPT09YSlyZXR1cm4gbnVsbDtmb3IodmFyIG89bmV3IEFycmF5KGEpLHM9MDtzPGE7cysrKXtmb3IodmFyIGw9W1swLDAsMF0sWzAsMCwwXV0sYz0wO2M8MztjKyspaWYobltjXSlmb3IodmFyIHU9MDt1PDI7dSsrKWxbdV1bY109bltjXVtzXVt1XTtvW3NdPWx9cmV0dXJuIG99fSx7XCIuLi8uLi9yZWdpc3RyeVwiOjgyOX1dLDEwODI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2wtbGluZTNkXCIpLGk9dChcImdsLXNjYXR0ZXIzZFwiKSxhPXQoXCJnbC1lcnJvcjNkXCIpLG89dChcImdsLW1lc2gzZFwiKSxzPXQoXCJkZWxhdW5heS10cmlhbmd1bGF0ZVwiKSxsPXQoXCIuLi8uLi9saWJcIiksYz10KFwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiKSx1PXQoXCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yXCIpLmZvcm1hdENvbG9yLGg9dChcIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jXCIpLGY9dChcIi4uLy4uL2NvbnN0YW50cy9nbDNkX2Rhc2hlc1wiKSxwPXQoXCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzXCIpLGQ9dChcIi4vY2FsY19lcnJvcnNcIik7ZnVuY3Rpb24gZyh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMubGluZVBsb3Q9bnVsbCx0aGlzLnNjYXR0ZXJQbG90PW51bGwsdGhpcy5lcnJvckJhcnM9bnVsbCx0aGlzLnRleHRNYXJrZXJzPW51bGwsdGhpcy5kZWxhdW5heU1lc2g9bnVsbCx0aGlzLmNvbG9yPW51bGwsdGhpcy5tb2RlPVwiXCIsdGhpcy5kYXRhUG9pbnRzPVtdLHRoaXMuYXhlc0JvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLnRleHRMYWJlbHM9bnVsbCx0aGlzLmRhdGE9bnVsbH12YXIgdj1nLnByb3RvdHlwZTtmdW5jdGlvbiBtKHQpe3JldHVybiBudWxsPT10PzA6dC5pbmRleE9mKFwibGVmdFwiKT4tMT8tMTp0LmluZGV4T2YoXCJyaWdodFwiKT4tMT8xOjB9ZnVuY3Rpb24geSh0KXtyZXR1cm4gbnVsbD09dD8wOnQuaW5kZXhPZihcInRvcFwiKT4tMT8tMTp0LmluZGV4T2YoXCJib3R0b21cIik+LTE/MTowfWZ1bmN0aW9uIHgodCxlKXtyZXR1cm4gZSg0KnQpfWZ1bmN0aW9uIGIodCl7cmV0dXJuIHBbdF19ZnVuY3Rpb24gXyh0LGUscixuLGkpe3ZhciBhPW51bGw7aWYobC5pc0FycmF5T3JUeXBlZEFycmF5KHQpKXthPVtdO2Zvcih2YXIgbz0wO288ZTtvKyspdm9pZCAwPT09dFtvXT9hW29dPW46YVtvXT1yKHRbb10saSl9ZWxzZSBhPXIodCxsLmlkZW50aXR5KTtyZXR1cm4gYX1mdW5jdGlvbiB3KHQsZSl7dmFyIHIsbixpLGEsbyxzLGY9W10scD10LmZ1bGxTY2VuZUxheW91dCxnPXQuZGF0YVNjYWxlLHY9cC54YXhpcyx3PXAueWF4aXMsaz1wLnpheGlzLEE9ZS5tYXJrZXIsVD1lLmxpbmUsTT1lLnh8fFtdLFM9ZS55fHxbXSxFPWUuenx8W10sQz1NLmxlbmd0aCxMPWUueGNhbGVuZGFyLHo9ZS55Y2FsZW5kYXIsTz1lLnpjYWxlbmRhcjtmb3Iobz0wO288QztvKyspcj12LmQybChNW29dLDAsTCkqZ1swXSxuPXcuZDJsKFNbb10sMCx6KSpnWzFdLGk9ay5kMmwoRVtvXSwwLE8pKmdbMl0sZltvXT1bcixuLGldO2lmKEFycmF5LmlzQXJyYXkoZS50ZXh0KSlzPWUudGV4dDtlbHNlIGlmKHZvaWQgMCE9PWUudGV4dClmb3Iocz1uZXcgQXJyYXkoQyksbz0wO288QztvKyspc1tvXT1lLnRleHQ7aWYoYT17cG9zaXRpb246Zixtb2RlOmUubW9kZSx0ZXh0OnN9LFwibGluZVwiaW4gZSYmKGEubGluZUNvbG9yPXUoVCwxLEMpLGEubGluZVdpZHRoPVQud2lkdGgsYS5saW5lRGFzaGVzPVQuZGFzaCksXCJtYXJrZXJcImluIGUpe3ZhciBJPWgoZSk7YS5zY2F0dGVyQ29sb3I9dShBLDEsQyksYS5zY2F0dGVyU2l6ZT1fKEEuc2l6ZSxDLHgsMjAsSSksYS5zY2F0dGVyTWFya2VyPV8oQS5zeW1ib2wsQyxiLFwiXFx1MjVjZlwiKSxhLnNjYXR0ZXJMaW5lV2lkdGg9QS5saW5lLndpZHRoLGEuc2NhdHRlckxpbmVDb2xvcj11KEEubGluZSwxLEMpLGEuc2NhdHRlckFuZ2xlPTB9XCJ0ZXh0cG9zaXRpb25cImluIGUmJihhLnRleHRPZmZzZXQ9ZnVuY3Rpb24odCl7dmFyIGU9WzAsMF07aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllW3JdPVswLDBdLHRbcl0mJihlW3JdWzBdPW0odFtyXSksZVtyXVsxXT15KHRbcl0pKTtlbHNlIGVbMF09bSh0KSxlWzFdPXkodCk7cmV0dXJuIGV9KGUudGV4dHBvc2l0aW9uKSxhLnRleHRDb2xvcj11KGUudGV4dGZvbnQsMSxDKSxhLnRleHRTaXplPV8oZS50ZXh0Zm9udC5zaXplLEMsbC5pZGVudGl0eSwxMiksYS50ZXh0Rm9udD1lLnRleHRmb250LmZhbWlseSxhLnRleHRBbmdsZT0wKTt2YXIgRD1bXCJ4XCIsXCJ5XCIsXCJ6XCJdO2ZvcihhLnByb2plY3Q9WyExLCExLCExXSxhLnByb2plY3RTY2FsZT1bMSwxLDFdLGEucHJvamVjdE9wYWNpdHk9WzEsMSwxXSxvPTA7bzwzOysrbyl7dmFyIFA9ZS5wcm9qZWN0aW9uW0Rbb11dOyhhLnByb2plY3Rbb109UC5zaG93KSYmKGEucHJvamVjdE9wYWNpdHlbb109UC5vcGFjaXR5LGEucHJvamVjdFNjYWxlW29dPVAuc2NhbGUpfWEuZXJyb3JCb3VuZHM9ZChlLGcscCk7dmFyIFI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVswLDAsMF0scj1bWzAsMCwwXSxbMCwwLDBdLFswLDAsMF1dLG49WzEsMSwxXSxpPTA7aTwzO2krKyl7dmFyIGE9dFtpXTthJiYhMSE9PWEuY29weV96c3R5bGUmJiExIT09dFsyXS52aXNpYmxlJiYoYT10WzJdKSxhJiZhLnZpc2libGUmJihlW2ldPWEud2lkdGgvMixyW2ldPWMoYS5jb2xvciksbltpXT1hLnRoaWNrbmVzcyl9cmV0dXJue2NhcFNpemU6ZSxjb2xvcjpyLGxpbmVXaWR0aDpufX0oW2UuZXJyb3JfeCxlLmVycm9yX3ksZS5lcnJvcl96XSk7cmV0dXJuIGEuZXJyb3JDb2xvcj1SLmNvbG9yLGEuZXJyb3JMaW5lV2lkdGg9Ui5saW5lV2lkdGgsYS5lcnJvckNhcFNpemU9Ui5jYXBTaXplLGEuZGVsYXVuYXlBeGlzPWUuc3VyZmFjZWF4aXMsYS5kZWxhdW5heUNvbG9yPWMoZS5zdXJmYWNlY29sb3IpLGF9ZnVuY3Rpb24gayh0KXtpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgZT10WzBdO3JldHVybiBBcnJheS5pc0FycmF5KGUpJiYodD1lKSxcInJnYihcIit0LnNsaWNlKDAsMykubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKDI1NSp0KX0pK1wiKVwifXJldHVybiBudWxsfXYuaGFuZGxlUGljaz1mdW5jdGlvbih0KXtpZih0Lm9iamVjdCYmKHQub2JqZWN0PT09dGhpcy5saW5lUGxvdHx8dC5vYmplY3Q9PT10aGlzLmRlbGF1bmF5TWVzaHx8dC5vYmplY3Q9PT10aGlzLnRleHRNYXJrZXJzfHx0Lm9iamVjdD09PXRoaXMuc2NhdHRlclBsb3QpKXt2YXIgZT10LmluZGV4PXQuZGF0YS5pbmRleDtyZXR1cm4gdC5vYmplY3QuaGlnaGxpZ2h0JiZ0Lm9iamVjdC5oaWdobGlnaHQobnVsbCksdGhpcy5zY2F0dGVyUGxvdCYmKHQub2JqZWN0PXRoaXMuc2NhdHRlclBsb3QsdGhpcy5zY2F0dGVyUGxvdC5oaWdobGlnaHQodC5kYXRhKSksdC50ZXh0TGFiZWw9XCJcIix0aGlzLnRleHRMYWJlbHMmJihBcnJheS5pc0FycmF5KHRoaXMudGV4dExhYmVscyk/KHRoaXMudGV4dExhYmVsc1tlXXx8MD09PXRoaXMudGV4dExhYmVsc1tlXSkmJih0LnRleHRMYWJlbD10aGlzLnRleHRMYWJlbHNbZV0pOnQudGV4dExhYmVsPXRoaXMudGV4dExhYmVscyksdC50cmFjZUNvb3JkaW5hdGU9W3RoaXMuZGF0YS54W2VdLHRoaXMuZGF0YS55W2VdLHRoaXMuZGF0YS56W2VdXSwhMH19LHYudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbCxjLHU9dGhpcy5zY2VuZS5nbHBsb3QuZ2wsaD1mLnNvbGlkO3RoaXMuZGF0YT10O3ZhciBwPXcodGhpcy5zY2VuZSx0KTtcIm1vZGVcImluIHAmJih0aGlzLm1vZGU9cC5tb2RlKSxcImxpbmVEYXNoZXNcImluIHAmJnAubGluZURhc2hlcyBpbiBmJiYoaD1mW3AubGluZURhc2hlc10pLHRoaXMuY29sb3I9ayhwLnNjYXR0ZXJDb2xvcil8fGsocC5saW5lQ29sb3IpLHRoaXMuZGF0YVBvaW50cz1wLnBvc2l0aW9uLGU9e2dsOnRoaXMuc2NlbmUuZ2xwbG90LmdsLHBvc2l0aW9uOnAucG9zaXRpb24sY29sb3I6cC5saW5lQ29sb3IsbGluZVdpZHRoOnAubGluZVdpZHRofHwxLGRhc2hlczpoWzBdLGRhc2hTY2FsZTpoWzFdLG9wYWNpdHk6dC5vcGFjaXR5LGNvbm5lY3RHYXBzOnQuY29ubmVjdGdhcHN9LC0xIT09dGhpcy5tb2RlLmluZGV4T2YoXCJsaW5lc1wiKT90aGlzLmxpbmVQbG90P3RoaXMubGluZVBsb3QudXBkYXRlKGUpOih0aGlzLmxpbmVQbG90PW4oZSksdGhpcy5saW5lUGxvdC5fdHJhY2U9dGhpcyx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5saW5lUGxvdCkpOnRoaXMubGluZVBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5saW5lUGxvdCksdGhpcy5saW5lUGxvdC5kaXNwb3NlKCksdGhpcy5saW5lUGxvdD1udWxsKTt2YXIgZD10Lm9wYWNpdHk7aWYodC5tYXJrZXImJnQubWFya2VyLm9wYWNpdHkmJihkKj10Lm1hcmtlci5vcGFjaXR5KSxyPXtnbDp0aGlzLnNjZW5lLmdscGxvdC5nbCxwb3NpdGlvbjpwLnBvc2l0aW9uLGNvbG9yOnAuc2NhdHRlckNvbG9yLHNpemU6cC5zY2F0dGVyU2l6ZSxnbHlwaDpwLnNjYXR0ZXJNYXJrZXIsb3BhY2l0eTpkLG9ydGhvZ3JhcGhpYzohMCxsaW5lV2lkdGg6cC5zY2F0dGVyTGluZVdpZHRoLGxpbmVDb2xvcjpwLnNjYXR0ZXJMaW5lQ29sb3IscHJvamVjdDpwLnByb2plY3QscHJvamVjdFNjYWxlOnAucHJvamVjdFNjYWxlLHByb2plY3RPcGFjaXR5OnAucHJvamVjdE9wYWNpdHl9LC0xIT09dGhpcy5tb2RlLmluZGV4T2YoXCJtYXJrZXJzXCIpP3RoaXMuc2NhdHRlclBsb3Q/dGhpcy5zY2F0dGVyUGxvdC51cGRhdGUocik6KHRoaXMuc2NhdHRlclBsb3Q9aShyKSx0aGlzLnNjYXR0ZXJQbG90Ll90cmFjZT10aGlzLHRoaXMuc2NhdHRlclBsb3QuaGlnaGxpZ2h0U2NhbGU9MSx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5zY2F0dGVyUGxvdCkpOnRoaXMuc2NhdHRlclBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5zY2F0dGVyUGxvdCksdGhpcy5zY2F0dGVyUGxvdC5kaXNwb3NlKCksdGhpcy5zY2F0dGVyUGxvdD1udWxsKSxjPXtnbDp0aGlzLnNjZW5lLmdscGxvdC5nbCxwb3NpdGlvbjpwLnBvc2l0aW9uLGdseXBoOnAudGV4dCxjb2xvcjpwLnRleHRDb2xvcixzaXplOnAudGV4dFNpemUsYW5nbGU6cC50ZXh0QW5nbGUsYWxpZ25tZW50OnAudGV4dE9mZnNldCxmb250OnAudGV4dEZvbnQsb3J0aG9ncmFwaGljOiEwLGxpbmVXaWR0aDowLHByb2plY3Q6ITEsb3BhY2l0eTp0Lm9wYWNpdHl9LHRoaXMudGV4dExhYmVscz10LmhvdmVydGV4dHx8dC50ZXh0LC0xIT09dGhpcy5tb2RlLmluZGV4T2YoXCJ0ZXh0XCIpP3RoaXMudGV4dE1hcmtlcnM/dGhpcy50ZXh0TWFya2Vycy51cGRhdGUoYyk6KHRoaXMudGV4dE1hcmtlcnM9aShjKSx0aGlzLnRleHRNYXJrZXJzLl90cmFjZT10aGlzLHRoaXMudGV4dE1hcmtlcnMuaGlnaGxpZ2h0U2NhbGU9MSx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy50ZXh0TWFya2VycykpOnRoaXMudGV4dE1hcmtlcnMmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy50ZXh0TWFya2VycyksdGhpcy50ZXh0TWFya2Vycy5kaXNwb3NlKCksdGhpcy50ZXh0TWFya2Vycz1udWxsKSxsPXtnbDp0aGlzLnNjZW5lLmdscGxvdC5nbCxwb3NpdGlvbjpwLnBvc2l0aW9uLGNvbG9yOnAuZXJyb3JDb2xvcixlcnJvcjpwLmVycm9yQm91bmRzLGxpbmVXaWR0aDpwLmVycm9yTGluZVdpZHRoLGNhcFNpemU6cC5lcnJvckNhcFNpemUsb3BhY2l0eTp0Lm9wYWNpdHl9LHRoaXMuZXJyb3JCYXJzP3AuZXJyb3JCb3VuZHM/dGhpcy5lcnJvckJhcnMudXBkYXRlKGwpOih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5lcnJvckJhcnMpLHRoaXMuZXJyb3JCYXJzLmRpc3Bvc2UoKSx0aGlzLmVycm9yQmFycz1udWxsKTpwLmVycm9yQm91bmRzJiYodGhpcy5lcnJvckJhcnM9YShsKSx0aGlzLmVycm9yQmFycy5fdHJhY2U9dGhpcyx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5lcnJvckJhcnMpKSxwLmRlbGF1bmF5QXhpcz49MCl7dmFyIGc9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9KHIrMSklMyxhPShyKzIpJTMsbz1bXSxsPVtdO2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBjPXRbbl07IWlzTmFOKGNbaV0pJiZpc0Zpbml0ZShjW2ldKSYmIWlzTmFOKGNbYV0pJiZpc0Zpbml0ZShjW2FdKSYmKG8ucHVzaChbY1tpXSxjW2FdXSksbC5wdXNoKG4pKX12YXIgdT1zKG8pO2ZvcihuPTA7bjx1Lmxlbmd0aDsrK24pZm9yKHZhciBoPXVbbl0sZj0wO2Y8aC5sZW5ndGg7KytmKWhbZl09bFtoW2ZdXTtyZXR1cm57cG9zaXRpb25zOnQsY2VsbHM6dSxtZXNoQ29sb3I6ZX19KHAucG9zaXRpb24scC5kZWxhdW5heUNvbG9yLHAuZGVsYXVuYXlBeGlzKTtnLm9wYWNpdHk9dC5vcGFjaXR5LHRoaXMuZGVsYXVuYXlNZXNoP3RoaXMuZGVsYXVuYXlNZXNoLnVwZGF0ZShnKTooZy5nbD11LHRoaXMuZGVsYXVuYXlNZXNoPW8oZyksdGhpcy5kZWxhdW5heU1lc2guX3RyYWNlPXRoaXMsdGhpcy5zY2VuZS5nbHBsb3QuYWRkKHRoaXMuZGVsYXVuYXlNZXNoKSl9ZWxzZSB0aGlzLmRlbGF1bmF5TWVzaCYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmRlbGF1bmF5TWVzaCksdGhpcy5kZWxhdW5heU1lc2guZGlzcG9zZSgpLHRoaXMuZGVsYXVuYXlNZXNoPW51bGwpfSx2LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmxpbmVQbG90JiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubGluZVBsb3QpLHRoaXMubGluZVBsb3QuZGlzcG9zZSgpKSx0aGlzLnNjYXR0ZXJQbG90JiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuc2NhdHRlclBsb3QpLHRoaXMuc2NhdHRlclBsb3QuZGlzcG9zZSgpKSx0aGlzLmVycm9yQmFycyYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmVycm9yQmFycyksdGhpcy5lcnJvckJhcnMuZGlzcG9zZSgpKSx0aGlzLnRleHRNYXJrZXJzJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMudGV4dE1hcmtlcnMpLHRoaXMudGV4dE1hcmtlcnMuZGlzcG9zZSgpKSx0aGlzLmRlbGF1bmF5TWVzaCYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmRlbGF1bmF5TWVzaCksdGhpcy5kZWxhdW5heU1lc2guZGlzcG9zZSgpKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IGcodCxlLnVpZCk7cmV0dXJuIHIudXBkYXRlKGUpLHJ9fSx7XCIuLi8uLi9jb25zdGFudHMvZ2wzZF9kYXNoZXNcIjo2NzUsXCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzXCI6Njc2LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvclwiOjY5OCxcIi4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIjo3MjQsXCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuY1wiOjEwNjksXCIuL2NhbGNfZXJyb3JzXCI6MTA4MSxcImRlbGF1bmF5LXRyaWFuZ3VsYXRlXCI6MTU3LFwiZ2wtZXJyb3IzZFwiOjI0NCxcImdsLWxpbmUzZFwiOjI1MixcImdsLW1lc2gzZFwiOjI3NyxcImdsLXNjYXR0ZXIzZFwiOjI5NH1dLDEwODM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vcmVnaXN0cnlcIiksaT10KFwiLi4vLi4vbGliXCIpLGE9dChcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIiksbz10KFwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHNcIikscz10KFwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzXCIpLGw9dChcIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0c1wiKSxjPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUpe2Z1bmN0aW9uIGgocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLGMscixuKX1pZihmdW5jdGlvbih0LGUscixpKXt2YXIgYT0wLG89cihcInhcIikscz1yKFwieVwiKSxsPXIoXCJ6XCIpO24uZ2V0Q29tcG9uZW50TWV0aG9kKFwiY2FsZW5kYXJzXCIsXCJoYW5kbGVUcmFjZURlZmF1bHRzXCIpKHQsZSxbXCJ4XCIsXCJ5XCIsXCJ6XCJdLGkpLG8mJnMmJmwmJihhPU1hdGgubWluKG8ubGVuZ3RoLHMubGVuZ3RoLGwubGVuZ3RoKSxlLl9sZW5ndGg9ZS5feGxlbmd0aD1lLl95bGVuZ3RoPWUuX3psZW5ndGg9YSk7cmV0dXJuIGF9KHQsZSxoLHUpKXtoKFwidGV4dFwiKSxoKFwiaG92ZXJ0ZXh0XCIpLGgoXCJob3ZlcnRlbXBsYXRlXCIpLGgoXCJtb2RlXCIpLGEuaGFzTGluZXMoZSkmJihoKFwiY29ubmVjdGdhcHNcIikscyh0LGUscix1LGgpKSxhLmhhc01hcmtlcnMoZSkmJm8odCxlLHIsdSxoLHtub1NlbGVjdDohMH0pLGEuaGFzVGV4dChlKSYmbCh0LGUsdSxoLHtub1NlbGVjdDohMH0pO3ZhciBmPShlLmxpbmV8fHt9KS5jb2xvcixwPShlLm1hcmtlcnx8e30pLmNvbG9yO2goXCJzdXJmYWNlYXhpc1wiKT49MCYmaChcInN1cmZhY2Vjb2xvclwiLGZ8fHApO2Zvcih2YXIgZD1bXCJ4XCIsXCJ5XCIsXCJ6XCJdLGc9MDtnPDM7KytnKXt2YXIgdj1cInByb2plY3Rpb24uXCIrZFtnXTtoKHYrXCIuc2hvd1wiKSYmKGgoditcIi5vcGFjaXR5XCIpLGgoditcIi5zY2FsZVwiKSl9dmFyIG09bi5nZXRDb21wb25lbnRNZXRob2QoXCJlcnJvcmJhcnNcIixcInN1cHBseURlZmF1bHRzXCIpO20odCxlLGZ8fHB8fHIse2F4aXM6XCJ6XCJ9KSxtKHQsZSxmfHxwfHxyLHtheGlzOlwieVwiLGluaGVyaXQ6XCJ6XCJ9KSxtKHQsZSxmfHxwfHxyLHtheGlzOlwieFwiLGluaGVyaXQ6XCJ6XCJ9KX1lbHNlIGUudmlzaWJsZT0hMX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzXCI6MTA2NSxcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCI6MTA3MSxcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzXCI6MTA3NyxcIi4vYXR0cmlidXRlc1wiOjEwNzl9XSwxMDg0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5wbG90PXQoXCIuL2NvbnZlcnRcIiksbi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5tYXJrZXJTeW1ib2xzPXQoXCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIiksbi5jb2xvcmJhcj1be2NvbnRhaW5lcjpcIm1hcmtlclwiLG1pbjpcImNtaW5cIixtYXg6XCJjbWF4XCJ9LHtjb250YWluZXI6XCJsaW5lXCIsbWluOlwiY21pblwiLG1heDpcImNtYXhcIn1dLG4uY2FsYz10KFwiLi9jYWxjXCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwic2NhdHRlcjNkXCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvZ2wzZFwiKSxuLmNhdGVnb3JpZXM9W1wiZ2wzZFwiLFwic3ltYm9sc1wiLFwic2hvd0xlZ2VuZFwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnNcIjo2NzYsXCIuLi8uLi9wbG90cy9nbDNkXCI6Nzg5LFwiLi9hdHRyaWJ1dGVzXCI6MTA3OSxcIi4vY2FsY1wiOjEwODAsXCIuL2NvbnZlcnRcIjoxMDgyLFwiLi9kZWZhdWx0c1wiOjEwODN9XSwxMDg1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiKSxsPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsYz1uLm1hcmtlcix1PW4ubGluZSxoPWMubGluZTtlLmV4cG9ydHM9e2NhcnBldDp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwiY2FsY1wifSxhOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxiOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxtb2RlOmwoe30sbi5tb2RlLHtkZmx0OlwibWFya2Vyc1wifSksdGV4dDpsKHt9LG4udGV4dCx7fSksaG92ZXJ0ZXh0Omwoe30sbi5ob3ZlcnRleHQse30pLGxpbmU6e2NvbG9yOnUuY29sb3Isd2lkdGg6dS53aWR0aCxkYXNoOnUuZGFzaCxzaGFwZTpsKHt9LHUuc2hhcGUse3ZhbHVlczpbXCJsaW5lYXJcIixcInNwbGluZVwiXX0pLHNtb290aGluZzp1LnNtb290aGluZyxlZGl0VHlwZTpcImNhbGNcIn0sY29ubmVjdGdhcHM6bi5jb25uZWN0Z2FwcyxmaWxsOmwoe30sbi5maWxsLHt2YWx1ZXM6W1wibm9uZVwiLFwidG9zZWxmXCIsXCJ0b25leHRcIl0sZGZsdDpcIm5vbmVcIn0pLGZpbGxjb2xvcjpuLmZpbGxjb2xvcixtYXJrZXI6bCh7c3ltYm9sOmMuc3ltYm9sLG9wYWNpdHk6Yy5vcGFjaXR5LG1heGRpc3BsYXllZDpjLm1heGRpc3BsYXllZCxzaXplOmMuc2l6ZSxzaXplcmVmOmMuc2l6ZXJlZixzaXplbWluOmMuc2l6ZW1pbixzaXplbW9kZTpjLnNpemVtb2RlLGxpbmU6bCh7d2lkdGg6aC53aWR0aCxlZGl0VHlwZTpcImNhbGNcIn0sbyhcIm1hcmtlci5saW5lXCIpKSxncmFkaWVudDpjLmdyYWRpZW50LGVkaXRUeXBlOlwiY2FsY1wifSxvKFwibWFya2VyXCIpLHtjb2xvcmJhcjpzfSksdGV4dGZvbnQ6bi50ZXh0Zm9udCx0ZXh0cG9zaXRpb246bi50ZXh0cG9zaXRpb24sc2VsZWN0ZWQ6bi5zZWxlY3RlZCx1bnNlbGVjdGVkOm4udW5zZWxlY3RlZCxob3ZlcmluZm86bCh7fSxpLmhvdmVyaW5mbyx7ZmxhZ3M6W1wiYVwiLFwiYlwiLFwidGV4dFwiLFwibmFtZVwiXX0pLGhvdmVyb246bi5ob3Zlcm9uLGhvdmVydGVtcGxhdGU6YSgpfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCI6NTc5LFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIjo1ODUsXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCI6MTA1Mn1dLDEwODY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZmFzdC1pc251bWVyaWNcIiksaT10KFwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGNcIiksYT10KFwiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGFcIiksbz10KFwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvblwiKSxzPXQoXCIuLi9zY2F0dGVyL2NhbGNcIikuY2FsY01hcmtlclNpemUsbD10KFwiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZFwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLl9jYXJwZXRUcmFjZT1sKHQsZSk7aWYociYmci52aXNpYmxlJiZcImxlZ2VuZG9ubHlcIiE9PXIudmlzaWJsZSl7dmFyIGM7ZS54YXhpcz1yLnhheGlzLGUueWF4aXM9ci55YXhpczt2YXIgdSxoLGY9ZS5fbGVuZ3RoLHA9bmV3IEFycmF5KGYpLGQ9ITE7Zm9yKGM9MDtjPGY7YysrKWlmKHU9ZS5hW2NdLGg9ZS5iW2NdLG4odSkmJm4oaCkpe3ZhciBnPXIuYWIyeHkoK3UsK2gsITApLHY9ci5pc1Zpc2libGUoK3UsK2gpO3Z8fChkPSEwKSxwW2NdPXt4OmdbMF0seTpnWzFdLGE6dSxiOmgsdmlzOnZ9fWVsc2UgcFtjXT17eDohMSx5OiExfTtyZXR1cm4gZS5fbmVlZHNDdWxsPWQscFswXS5jYXJwZXQ9cixwWzBdLnRyYWNlPWUscyhlLGYpLGkodCxlKSxhKHAsZSksbyhwLGUpLHB9fX0se1wiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZFwiOjg5NyxcIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhXCI6MTA1MSxcIi4uL3NjYXR0ZXIvY2FsY1wiOjEwNTMsXCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uXCI6MTA1NCxcIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjXCI6MTA1NSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sMTA4NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vc2NhdHRlci9jb25zdGFudHNcIiksYT10KFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiKSxvPXQoXCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0c1wiKSxzPXQoXCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHNcIiksbD10KFwiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzXCIpLGM9dChcIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0c1wiKSx1PXQoXCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0c1wiKSxoPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYpe2Z1bmN0aW9uIHAocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGgscixpKX1wKFwiY2FycGV0XCIpLGUueGF4aXM9XCJ4XCIsZS55YXhpcz1cInlcIjt2YXIgZD1wKFwiYVwiKSxnPXAoXCJiXCIpLHY9TWF0aC5taW4oZC5sZW5ndGgsZy5sZW5ndGgpO2lmKHYpe2UuX2xlbmd0aD12LHAoXCJ0ZXh0XCIpLHAoXCJob3ZlcnRleHRcIikscChcIm1vZGVcIix2PGkuUFRTX0xJTkVTT05MWT9cImxpbmVzK21hcmtlcnNcIjpcImxpbmVzXCIpLGEuaGFzTGluZXMoZSkmJihzKHQsZSxyLGYscCksbCh0LGUscCkscChcImNvbm5lY3RnYXBzXCIpKSxhLmhhc01hcmtlcnMoZSkmJm8odCxlLHIsZixwLHtncmFkaWVudDohMH0pLGEuaGFzVGV4dChlKSYmYyh0LGUsZixwKTt2YXIgbT1bXTsoYS5oYXNNYXJrZXJzKGUpfHxhLmhhc1RleHQoZSkpJiYocChcIm1hcmtlci5tYXhkaXNwbGF5ZWRcIiksbS5wdXNoKFwicG9pbnRzXCIpKSxwKFwiZmlsbFwiKSxcIm5vbmVcIiE9PWUuZmlsbCYmKHUodCxlLHIscCksYS5oYXNMaW5lcyhlKXx8bCh0LGUscCkpLFwidG9uZXh0XCIhPT1lLmZpbGwmJlwidG9zZWxmXCIhPT1lLmZpbGx8fG0ucHVzaChcImZpbGxzXCIpLFwiZmlsbHNcIiE9PXAoXCJob3Zlcm9uXCIsbS5qb2luKFwiK1wiKXx8XCJwb2ludHNcIikmJnAoXCJob3ZlcnRlbXBsYXRlXCIpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHApfWVsc2UgZS52aXNpYmxlPSExfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vc2NhdHRlci9jb25zdGFudHNcIjoxMDU2LFwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHNcIjoxMDYxLFwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzXCI6MTA2NSxcIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0c1wiOjEwNjcsXCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0c1wiOjEwNzEsXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCI6MTA3NixcIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0c1wiOjEwNzcsXCIuL2F0dHJpYnV0ZXNcIjoxMDg1fV0sMTA4ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPW5baV07cmV0dXJuIHQuYT1hLmEsdC5iPWEuYix0Lnk9YS55LHR9fSx7fV0sMTA4OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9zY2F0dGVyL2hvdmVyXCIpLGk9dChcIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1uKHQsZSxyLGEpO2lmKG8mJiExIT09b1swXS5pbmRleCl7dmFyIHM9b1swXTtpZih2b2lkIDA9PT1zLmluZGV4KXt2YXIgbD0xLXMueTAvdC55YS5fbGVuZ3RoLGM9dC54YS5fbGVuZ3RoLHU9YypsLzIsaD1jLXU7cmV0dXJuIHMueDA9TWF0aC5tYXgoTWF0aC5taW4ocy54MCxoKSx1KSxzLngxPU1hdGgubWF4KE1hdGgubWluKHMueDEsaCksdSksb312YXIgZj1zLmNkW3MuaW5kZXhdO3MuYT1mLmEscy5iPWYuYixzLnhMYWJlbFZhbD12b2lkIDAscy55TGFiZWxWYWw9dm9pZCAwO3ZhciBwPXMudHJhY2UsZD1wLl9jYXJwZXQsZz1kLmFiMmlqKFtmLmEsZi5iXSksdj1NYXRoLmZsb29yKGdbMF0pLG09Z1swXS12LHk9TWF0aC5mbG9vcihnWzFdKSx4PWdbMV0teSxiPWQuZXZhbHh5KFtdLHYseSxtLHgpO3MueUxhYmVsPWJbMV0udG9GaXhlZCgzKSxkZWxldGUgcy50ZXh0O3ZhciBfPVtdO2lmKCFwLmhvdmVydGVtcGxhdGUpe3ZhciB3PShmLmhpfHxwLmhvdmVyaW5mbykuc3BsaXQoXCIrXCIpOy0xIT09dy5pbmRleE9mKFwiYWxsXCIpJiYodz1bXCJhXCIsXCJiXCIsXCJ0ZXh0XCJdKSwtMSE9PXcuaW5kZXhPZihcImFcIikmJmsoZC5hYXhpcyxmLmEpLC0xIT09dy5pbmRleE9mKFwiYlwiKSYmayhkLmJheGlzLGYuYiksXy5wdXNoKFwieTogXCIrcy55TGFiZWwpLC0xIT09dy5pbmRleE9mKFwidGV4dFwiKSYmaShmLHAsXykscy5leHRyYVRleHQ9Xy5qb2luKFwiPGJyPlwiKX1yZXR1cm4gb31mdW5jdGlvbiBrKHQsZSl7dmFyIHI7cj10LmxhYmVscHJlZml4JiZ0LmxhYmVscHJlZml4Lmxlbmd0aD4wP3QubGFiZWxwcmVmaXgucmVwbGFjZSgvID0gJC8sXCJcIik6dC5faG92ZXJ0aXRsZSxfLnB1c2gocitcIjogXCIrZS50b0ZpeGVkKDMpK3QubGFiZWxzdWZmaXgpfX19LHtcIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0XCI6MTA2MCxcIi4uL3NjYXR0ZXIvaG92ZXJcIjoxMDYzfV0sMTA5MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIiksbi5jb2xvcmJhcj10KFwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXJcIiksbi5jYWxjPXQoXCIuL2NhbGNcIiksbi5wbG90PXQoXCIuL3Bsb3RcIiksbi5zdHlsZT10KFwiLi4vc2NhdHRlci9zdHlsZVwiKS5zdHlsZSxuLnN0eWxlT25TZWxlY3Q9dChcIi4uL3NjYXR0ZXIvc3R5bGVcIikuc3R5bGVPblNlbGVjdCxuLmhvdmVyUG9pbnRzPXQoXCIuL2hvdmVyXCIpLG4uc2VsZWN0UG9pbnRzPXQoXCIuLi9zY2F0dGVyL3NlbGVjdFwiKSxuLmV2ZW50RGF0YT10KFwiLi9ldmVudF9kYXRhXCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwic2NhdHRlcmNhcnBldFwiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiKSxuLmNhdGVnb3JpZXM9W1wic3ZnXCIsXCJjYXJwZXRcIixcInN5bWJvbHNcIixcInNob3dMZWdlbmRcIixcImNhcnBldERlcGVuZGVudFwiLFwiem9vbVNjYWxlXCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0se1wiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXJcIjoxMDcwLFwiLi4vc2NhdHRlci9zZWxlY3RcIjoxMDczLFwiLi4vc2NhdHRlci9zdHlsZVwiOjEwNzUsXCIuL2F0dHJpYnV0ZXNcIjoxMDg1LFwiLi9jYWxjXCI6MTA4NixcIi4vZGVmYXVsdHNcIjoxMDg3LFwiLi9ldmVudF9kYXRhXCI6MTA4OCxcIi4vaG92ZXJcIjoxMDg5LFwiLi9wbG90XCI6MTA5MX1dLDEwOTE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vc2NhdHRlci9wbG90XCIpLGk9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHMsbCxjLHU9clswXVswXS5jYXJwZXQsaD17eGF4aXM6aS5nZXRGcm9tSWQodCx1LnhheGlzfHxcInhcIikseWF4aXM6aS5nZXRGcm9tSWQodCx1LnlheGlzfHxcInlcIikscGxvdDplLnBsb3R9O2ZvcihuKHQsaCxyLG8pLHM9MDtzPHIubGVuZ3RoO3MrKylsPXJbc11bMF0udHJhY2UsYz1vLnNlbGVjdEFsbChcImcudHJhY2VcIitsLnVpZCtcIiAuanMtbGluZVwiKSxhLnNldENsaXBVcmwoYyxyW3NdWzBdLmNhcnBldC5fY2xpcFBhdGhJZCx0KX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vc2NhdHRlci9wbG90XCI6MTA3Mn1dLDEwOTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXNcIikuZGFzaCxsPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsYz10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbCx1PWkubWFya2VyLGg9aS5saW5lLGY9dS5saW5lO2UuZXhwb3J0cz1jKHtsb246e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCJ9LGxhdDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIn0sbG9jYXRpb25zOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwifSxsb2NhdGlvbm1vZGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcIklTTy0zXCIsXCJVU0Etc3RhdGVzXCIsXCJjb3VudHJ5IG5hbWVzXCJdLGRmbHQ6XCJJU08tM1wifSxtb2RlOmwoe30saS5tb2RlLHtkZmx0OlwibWFya2Vyc1wifSksdGV4dDpsKHt9LGkudGV4dCx7fSksaG92ZXJ0ZXh0Omwoe30saS5ob3ZlcnRleHQse30pLHRleHRmb250OmkudGV4dGZvbnQsdGV4dHBvc2l0aW9uOmkudGV4dHBvc2l0aW9uLGxpbmU6e2NvbG9yOmguY29sb3Isd2lkdGg6aC53aWR0aCxkYXNoOnN9LGNvbm5lY3RnYXBzOmkuY29ubmVjdGdhcHMsbWFya2VyOmwoe3N5bWJvbDp1LnN5bWJvbCxvcGFjaXR5OnUub3BhY2l0eSxzaXplOnUuc2l6ZSxzaXplcmVmOnUuc2l6ZXJlZixzaXplbWluOnUuc2l6ZW1pbixzaXplbW9kZTp1LnNpemVtb2RlLGNvbG9yYmFyOnUuY29sb3JiYXIsbGluZTpsKHt3aWR0aDpmLndpZHRofSxvKFwibWFya2VyLmxpbmVcIikpLGdyYWRpZW50OnUuZ3JhZGllbnR9LG8oXCJtYXJrZXJcIikpLGZpbGw6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcIm5vbmVcIixcInRvc2VsZlwiXSxkZmx0Olwibm9uZVwifSxmaWxsY29sb3I6aS5maWxsY29sb3Isc2VsZWN0ZWQ6aS5zZWxlY3RlZCx1bnNlbGVjdGVkOmkudW5zZWxlY3RlZCxob3ZlcmluZm86bCh7fSxhLmhvdmVyaW5mbyx7ZmxhZ3M6W1wibG9uXCIsXCJsYXRcIixcImxvY2F0aW9uXCIsXCJ0ZXh0XCIsXCJuYW1lXCJdfSksaG92ZXJ0ZW1wbGF0ZTpuKCl9LFwiY2FsY1wiLFwibmVzdGVkXCIpfSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzXCI6NTk4LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDYsXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIjoxMDUyfV0sMTA5MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTSxhPXQoXCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsY1wiKSxvPXQoXCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YVwiKSxzPXQoXCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uXCIpLGw9dChcIi4uLy4uL2xpYlwiKS5fO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1BcnJheS5pc0FycmF5KGUubG9jYXRpb25zKSxjPXI/ZS5sb2NhdGlvbnMubGVuZ3RoOmUuX2xlbmd0aCx1PW5ldyBBcnJheShjKSxoPTA7aDxjO2grKyl7dmFyIGY9dVtoXT17fTtpZihyKXt2YXIgcD1lLmxvY2F0aW9uc1toXTtmLmxvYz1cInN0cmluZ1wiPT10eXBlb2YgcD9wOm51bGx9ZWxzZXt2YXIgZD1lLmxvbltoXSxnPWUubGF0W2hdO24oZCkmJm4oZyk/Zi5sb25sYXQ9WytkLCtnXTpmLmxvbmxhdD1baSxpXX19cmV0dXJuIG8odSxlKSxhKHQsZSkscyh1LGUpLGMmJih1WzBdLnQ9e2xhYmVsczp7bGF0OmwodCxcImxhdDpcIikrXCIgXCIsbG9uOmwodCxcImxvbjpcIikrXCIgXCJ9fSksdX19LHtcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YVwiOjEwNTEsXCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uXCI6MTA1NCxcIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjXCI6MTA1NSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sMTA5NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiKSxhPXQoXCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0c1wiKSxvPXQoXCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHNcIikscz10KFwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzXCIpLGw9dChcIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzXCIpLGM9dChcIi4vYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7ZnVuY3Rpb24gaChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYyxyLGkpfSFmdW5jdGlvbih0LGUscil7dmFyIG4saSxhPTAsbz1yKFwibG9jYXRpb25zXCIpO2lmKG8pcmV0dXJuIHIoXCJsb2NhdGlvbm1vZGVcIiksYT1vLmxlbmd0aDtyZXR1cm4gbj1yKFwibG9uXCIpfHxbXSxpPXIoXCJsYXRcIil8fFtdLGE9TWF0aC5taW4obi5sZW5ndGgsaS5sZW5ndGgpLGUuX2xlbmd0aD1hLGF9KDAsZSxoKT9lLnZpc2libGU9ITE6KGgoXCJ0ZXh0XCIpLGgoXCJob3ZlcnRleHRcIiksaChcImhvdmVydGVtcGxhdGVcIiksaChcIm1vZGVcIiksaS5oYXNMaW5lcyhlKSYmKG8odCxlLHIsdSxoKSxoKFwiY29ubmVjdGdhcHNcIikpLGkuaGFzTWFya2VycyhlKSYmYSh0LGUscix1LGgse2dyYWRpZW50OiEwfSksaS5oYXNUZXh0KGUpJiZzKHQsZSx1LGgpLGgoXCJmaWxsXCIpLFwibm9uZVwiIT09ZS5maWxsJiZsKHQsZSxyLGgpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGgpKX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzXCI6MTA2MSxcIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0c1wiOjEwNjUsXCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0c1wiOjEwNzEsXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCI6MTA3NixcIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0c1wiOjEwNzcsXCIuL2F0dHJpYnV0ZXNcIjoxMDkyfV0sMTA5NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0Lmxvbj1lLmxvbix0LmxhdD1lLmxhdCx0LmxvY2F0aW9uPWUubG9jP2UubG9jOm51bGwsdH19LHt9XSwxMDk2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksYT10KFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKS5CQUROVU0sbz10KFwiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3JcIikscz10KFwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHRcIiksbD10KFwiLi9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGM9dC5jZCx1PWNbMF0udHJhY2UsaD10LnhhLGY9dC55YSxwPXQuc3VicGxvdCxkPXAucHJvamVjdGlvbi5pc0xvbkxhdE92ZXJFZGdlcyxnPXAucHJvamVjdDtpZihuLmdldENsb3Nlc3QoYyxmdW5jdGlvbih0KXt2YXIgbj10LmxvbmxhdDtpZihuWzBdPT09YSlyZXR1cm4gMS8wO2lmKGQobikpcmV0dXJuIDEvMDt2YXIgaT1nKG4pLG89ZyhbZSxyXSkscz1NYXRoLmFicyhpWzBdLW9bMF0pLGw9TWF0aC5hYnMoaVsxXS1vWzFdKSxjPU1hdGgubWF4KDMsdC5tcmN8fDApO3JldHVybiBNYXRoLm1heChNYXRoLnNxcnQocypzK2wqbCktYywxLTMvYyl9LHQpLCExIT09dC5pbmRleCl7dmFyIHY9Y1t0LmluZGV4XSxtPXYubG9ubGF0LHk9W2guYzJwKG0pLGYuYzJwKG0pXSx4PXYubXJjfHwxO3JldHVybiB0LngwPXlbMF0teCx0LngxPXlbMF0reCx0LnkwPXlbMV0teCx0LnkxPXlbMV0reCx0LmxvYz12LmxvYyx0Lmxvbj1tWzBdLHQubGF0PW1bMV0sdC5jb2xvcj1vKHUsdiksdC5leHRyYVRleHQ9ZnVuY3Rpb24odCxlLHIsbil7aWYodC5ob3ZlcnRlbXBsYXRlKXJldHVybjt2YXIgYT1lLmhpfHx0LmhvdmVyaW5mbyxvPVwiYWxsXCI9PT1hP2wuaG92ZXJpbmZvLmZsYWdzOmEuc3BsaXQoXCIrXCIpLGM9LTEhPT1vLmluZGV4T2YoXCJsb2NhdGlvblwiKSYmQXJyYXkuaXNBcnJheSh0LmxvY2F0aW9ucyksdT0tMSE9PW8uaW5kZXhPZihcImxvblwiKSxoPS0xIT09by5pbmRleE9mKFwibGF0XCIpLGY9LTEhPT1vLmluZGV4T2YoXCJ0ZXh0XCIpLHA9W107ZnVuY3Rpb24gZCh0KXtyZXR1cm4gaS50aWNrVGV4dChyLHIuYzJsKHQpLFwiaG92ZXJcIikudGV4dCtcIlxceGIwXCJ9Yz9wLnB1c2goZS5sb2MpOnUmJmg/cC5wdXNoKFwiKFwiK2QoZS5sb25sYXRbMF0pK1wiLCBcIitkKGUubG9ubGF0WzFdKStcIilcIik6dT9wLnB1c2gobi5sb24rZChlLmxvbmxhdFswXSkpOmgmJnAucHVzaChuLmxhdCtkKGUubG9ubGF0WzFdKSk7ZiYmcyhlLHQscCk7cmV0dXJuIHAuam9pbihcIjxicj5cIil9KHUsdixwLm1vY2tBeGlzLGNbMF0udC5sYWJlbHMpLHQuaG92ZXJ0ZW1wbGF0ZT11LmhvdmVydGVtcGxhdGUsW3RdfX19LHtcIi4uLy4uL2NvbXBvbmVudHMvZnhcIjo2MTcsXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dFwiOjEwNjAsXCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvclwiOjEwNjIsXCIuL2F0dHJpYnV0ZXNcIjoxMDkyfV0sMTA5NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIiksbi5jb2xvcmJhcj10KFwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXJcIiksbi5jYWxjPXQoXCIuL2NhbGNcIiksbi5wbG90PXQoXCIuL3Bsb3RcIiksbi5zdHlsZT10KFwiLi9zdHlsZVwiKSxuLnN0eWxlT25TZWxlY3Q9dChcIi4uL3NjYXR0ZXIvc3R5bGVcIikuc3R5bGVPblNlbGVjdCxuLmhvdmVyUG9pbnRzPXQoXCIuL2hvdmVyXCIpLG4uZXZlbnREYXRhPXQoXCIuL2V2ZW50X2RhdGFcIiksbi5zZWxlY3RQb2ludHM9dChcIi4vc2VsZWN0XCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwic2NhdHRlcmdlb1wiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4uLy4uL3Bsb3RzL2dlb1wiKSxuLmNhdGVnb3JpZXM9W1wiZ2VvXCIsXCJzeW1ib2xzXCIsXCJzaG93TGVnZW5kXCIsXCJzY2F0dGVyLWxpa2VcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy9nZW9cIjo3NzksXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiOjEwNzAsXCIuLi9zY2F0dGVyL3N0eWxlXCI6MTA3NSxcIi4vYXR0cmlidXRlc1wiOjEwOTIsXCIuL2NhbGNcIjoxMDkzLFwiLi9kZWZhdWx0c1wiOjEwOTQsXCIuL2V2ZW50X2RhdGFcIjoxMDk1LFwiLi9ob3ZlclwiOjEwOTYsXCIuL3Bsb3RcIjoxMDk4LFwiLi9zZWxlY3RcIjoxMDk5LFwiLi9zdHlsZVwiOjExMDB9XSwxMDk4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTSxvPXQoXCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHNcIikuZ2V0VG9wb2pzb25GZWF0dXJlcyxzPXQoXCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzXCIpLmxvY2F0aW9uVG9GZWF0dXJlLGw9dChcIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzXCIpLGM9dChcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIiksdT10KFwiLi9zdHlsZVwiKTtmdW5jdGlvbiBoKHQsZSl7dmFyIHI9dFswXS50cmFjZTtpZihBcnJheS5pc0FycmF5KHIubG9jYXRpb25zKSlmb3IodmFyIG49byhyLGUpLGk9ci5sb2NhdGlvbm1vZGUsbD0wO2w8dC5sZW5ndGg7bCsrKXt2YXIgYz10W2xdLHU9cyhpLGMubG9jLG4pO2MubG9ubGF0PXU/dS5wcm9wZXJ0aWVzLmN0OlthLGFdfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKWgocltvXSxlLnRvcG9qc29uKTtmdW5jdGlvbiBzKHQsZSl7dC5sb25sYXRbMF09PT1hJiZuLnNlbGVjdChlKS5yZW1vdmUoKX12YXIgZj1lLmxheWVycy5mcm9udHBsb3Quc2VsZWN0KFwiLnNjYXR0ZXJsYXllclwiKSxwPWkubWFrZVRyYWNlR3JvdXBzKGYscixcInRyYWNlIHNjYXR0ZXJnZW9cIik7cC5zZWxlY3RBbGwoXCIqXCIpLnJlbW92ZSgpLHAuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1lWzBdLm5vZGUzPW4uc2VsZWN0KHRoaXMpLGE9ZVswXS50cmFjZTtpZihjLmhhc0xpbmVzKGEpfHxcIm5vbmVcIiE9PWEuZmlsbCl7dmFyIG89bC5jYWxjVHJhY2VUb0xpbmVDb29yZHMoZSksaD1cIm5vbmVcIiE9PWEuZmlsbD9sLm1ha2VQb2x5Z29uKG8pOmwubWFrZUxpbmUobyk7ci5zZWxlY3RBbGwoXCJwYXRoLmpzLWxpbmVcIikuZGF0YShbe2dlb2pzb246aCx0cmFjZTphfV0pLmVudGVyKCkuYXBwZW5kKFwicGF0aFwiKS5jbGFzc2VkKFwianMtbGluZVwiLCEwKS5zdHlsZShcInN0cm9rZS1taXRlcmxpbWl0XCIsMil9Yy5oYXNNYXJrZXJzKGEpJiZyLnNlbGVjdEFsbChcInBhdGgucG9pbnRcIikuZGF0YShpLmlkZW50aXR5KS5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuY2xhc3NlZChcInBvaW50XCIsITApLmVhY2goZnVuY3Rpb24odCl7cyh0LHRoaXMpfSksYy5oYXNUZXh0KGEpJiZyLnNlbGVjdEFsbChcImdcIikuZGF0YShpLmlkZW50aXR5KS5lbnRlcigpLmFwcGVuZChcImdcIikuYXBwZW5kKFwidGV4dFwiKS5lYWNoKGZ1bmN0aW9uKHQpe3ModCx0aGlzKX0pLHUodCxlKX0pfX0se1wiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHNcIjo2OTQsXCIuLi8uLi9saWIvZ2VvanNvbl91dGlsc1wiOjY5NSxcIi4uLy4uL2xpYi90b3BvanNvbl91dGlsc1wiOjcyOCxcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi9zdHlsZVwiOjExMDAsZDM6MTU1fV0sMTA5OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCIpLGk9dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGEsbyxzLGwsYz10LmNkLHU9dC54YXhpcyxoPXQueWF4aXMsZj1bXSxwPWNbMF0udHJhY2U7aWYoIW4uaGFzTWFya2VycyhwKSYmIW4uaGFzVGV4dChwKSlyZXR1cm5bXTtpZighMT09PWUpZm9yKGw9MDtsPGMubGVuZ3RoO2wrKyljW2xdLnNlbGVjdGVkPTA7ZWxzZSBmb3IobD0wO2w8Yy5sZW5ndGg7bCsrKShhPShyPWNbbF0pLmxvbmxhdClbMF0hPT1pJiYobz11LmMycChhKSxzPWguYzJwKGEpLGUuY29udGFpbnMoW28sc10sbnVsbCxsLHQpPyhmLnB1c2goe3BvaW50TnVtYmVyOmwsbG9uOmFbMF0sbGF0OmFbMV19KSxyLnNlbGVjdGVkPTEpOnIuc2VsZWN0ZWQ9MCk7cmV0dXJuIGZ9fSx7XCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiOjEwNzZ9XSwxMTAwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLG89dChcIi4uL3NjYXR0ZXIvc3R5bGVcIikscz1vLnN0eWxlUG9pbnRzLGw9by5zdHlsZVRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZSYmZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLnRyYWNlLG89ZVswXS5ub2RlMztvLnN0eWxlKFwib3BhY2l0eVwiLGVbMF0udHJhY2Uub3BhY2l0eSkscyhvLHIsdCksbChvLHIsdCksby5zZWxlY3RBbGwoXCJwYXRoLmpzLWxpbmVcIikuc3R5bGUoXCJmaWxsXCIsXCJub25lXCIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykscj10LnRyYWNlLG89ci5saW5lfHx7fTtlLmNhbGwoYS5zdHJva2Usby5jb2xvcikuY2FsbChpLmRhc2hMaW5lLG8uZGFzaHx8XCJcIixvLndpZHRofHwwKSxcIm5vbmVcIiE9PXIuZmlsbCYmZS5jYWxsKGEuZmlsbCxyLmZpbGxjb2xvcil9KX0odCxlKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi9zY2F0dGVyL3N0eWxlXCI6MTA3NSxkMzoxNTV9XSwxMTAxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxzPXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsLGw9dChcIi4vY29uc3RhbnRzXCIpLkRBU0hFUyxjPWkubGluZSx1PWkubWFya2VyLGg9dS5saW5lLGY9ZS5leHBvcnRzPXMoe3g6aS54LHgwOmkueDAsZHg6aS5keCx5OmkueSx5MDppLnkwLGR5OmkuZHksdGV4dDppLnRleHQsaG92ZXJ0ZXh0OmkuaG92ZXJ0ZXh0LHRleHRwb3NpdGlvbjppLnRleHRwb3NpdGlvbix0ZXh0Zm9udDppLnRleHRmb250LG1vZGU6e3ZhbFR5cGU6XCJmbGFnbGlzdFwiLGZsYWdzOltcImxpbmVzXCIsXCJtYXJrZXJzXCIsXCJ0ZXh0XCJdLGV4dHJhczpbXCJub25lXCJdfSxsaW5lOntjb2xvcjpjLmNvbG9yLHdpZHRoOmMud2lkdGgsc2hhcGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImxpbmVhclwiLFwiaHZcIixcInZoXCIsXCJodmhcIixcInZodlwiXSxkZmx0OlwibGluZWFyXCIsZWRpdFR5cGU6XCJwbG90XCJ9LGRhc2g6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOk9iamVjdC5rZXlzKGwpLGRmbHQ6XCJzb2xpZFwifX0sbWFya2VyOm8oe30sYShcIm1hcmtlclwiKSx7c3ltYm9sOnUuc3ltYm9sLHNpemU6dS5zaXplLHNpemVyZWY6dS5zaXplcmVmLHNpemVtaW46dS5zaXplbWluLHNpemVtb2RlOnUuc2l6ZW1vZGUsb3BhY2l0eTp1Lm9wYWNpdHksY29sb3JiYXI6dS5jb2xvcmJhcixsaW5lOm8oe30sYShcIm1hcmtlci5saW5lXCIpLHt3aWR0aDpoLndpZHRofSl9KSxjb25uZWN0Z2FwczppLmNvbm5lY3RnYXBzLGZpbGw6byh7fSxpLmZpbGwse2RmbHQ6XCJub25lXCJ9KSxmaWxsY29sb3I6aS5maWxsY29sb3Isc2VsZWN0ZWQ6e21hcmtlcjppLnNlbGVjdGVkLm1hcmtlcix0ZXh0Zm9udDppLnNlbGVjdGVkLnRleHRmb250fSx1bnNlbGVjdGVkOnttYXJrZXI6aS51bnNlbGVjdGVkLm1hcmtlcix0ZXh0Zm9udDppLnVuc2VsZWN0ZWQudGV4dGZvbnR9LG9wYWNpdHk6bi5vcGFjaXR5fSxcImNhbGNcIixcIm5lc3RlZFwiKTtmLnguZWRpdFR5cGU9Zi55LmVkaXRUeXBlPWYueDAuZWRpdFR5cGU9Zi55MC5lZGl0VHlwZT1cImNhbGMrY2xlYXJBeGlzVHlwZXNcIixmLmhvdmVydGVtcGxhdGU9aS5ob3ZlcnRlbXBsYXRlfSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiOjc0NixcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiOjEwNTIsXCIuL2NvbnN0YW50c1wiOjExMDJ9XSwxMTAyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtUT09fTUFOWV9QT0lOVFM6MWU1LFNZTUJPTF9TREZfU0laRToyMDAsU1lNQk9MX1NJWkU6MjAsU1lNQk9MX1NUUk9LRToxLERPVF9SRTovLWRvdC8sT1BFTl9SRTovLW9wZW4vLERBU0hFUzp7c29saWQ6WzFdLGRvdDpbMSwxXSxkYXNoOls0LDFdLGxvbmdkYXNoOls4LDFdLGRhc2hkb3Q6WzQsMSwxLDFdLGxvbmdkYXNoZG90Ols4LDEsMSwxXX19fSx7fV0sMTEwMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCJzdmctcGF0aC1zZGZcIiksYT10KFwiY29sb3Itbm9ybWFsaXplXCIpLG89dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLHM9dChcIi4uLy4uL2xpYlwiKSxsPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksYz10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCIpLHU9dChcIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3JcIikuZm9ybWF0Q29sb3IsaD10KFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiKSxmPXQoXCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuY1wiKSxwPXQoXCIuL2NvbnN0YW50c1wiKSxkPXQoXCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zXCIpLkRFU0VMRUNURElNLGc9e3N0YXJ0OjEsbGVmdDoxLGVuZDotMSxyaWdodDotMSxtaWRkbGU6MCxjZW50ZXI6MCxib3R0b206MSx0b3A6LTF9O2Z1bmN0aW9uIHYodCl7dmFyIGUscj10Ll9sZW5ndGgsaT10LnRleHRmb250LGE9dC50ZXh0cG9zaXRpb24sbz1BcnJheS5pc0FycmF5KGEpP2E6W2FdLHM9aS5jb2xvcixsPWkuc2l6ZSxjPWkuZmFtaWx5LHU9e307Zm9yKHUudGV4dD10LnRleHQsdS5vcGFjaXR5PXQub3BhY2l0eSx1LmZvbnQ9e30sdS5hbGlnbj1bXSx1LmJhc2VsaW5lPVtdLGU9MDtlPG8ubGVuZ3RoO2UrKyl7dmFyIGg9b1tlXS5zcGxpdCgvXFxzKy8pO3N3aXRjaChoWzFdKXtjYXNlXCJsZWZ0XCI6dS5hbGlnbi5wdXNoKFwicmlnaHRcIik7YnJlYWs7Y2FzZVwicmlnaHRcIjp1LmFsaWduLnB1c2goXCJsZWZ0XCIpO2JyZWFrO2RlZmF1bHQ6dS5hbGlnbi5wdXNoKGhbMV0pfXN3aXRjaChoWzBdKXtjYXNlXCJ0b3BcIjp1LmJhc2VsaW5lLnB1c2goXCJib3R0b21cIik7YnJlYWs7Y2FzZVwiYm90dG9tXCI6dS5iYXNlbGluZS5wdXNoKFwidG9wXCIpO2JyZWFrO2RlZmF1bHQ6dS5iYXNlbGluZS5wdXNoKGhbMF0pfX1pZihBcnJheS5pc0FycmF5KHMpKWZvcih1LmNvbG9yPW5ldyBBcnJheShyKSxlPTA7ZTxyO2UrKyl1LmNvbG9yW2VdPXNbZV07ZWxzZSB1LmNvbG9yPXM7aWYoQXJyYXkuaXNBcnJheShsKXx8QXJyYXkuaXNBcnJheShjKSlmb3IodS5mb250PW5ldyBBcnJheShyKSxlPTA7ZTxyO2UrKyl7dmFyIGY9dS5mb250W2VdPXt9O2Yuc2l6ZT1BcnJheS5pc0FycmF5KGwpP24obFtlXSk/bFtlXTowOmwsZi5mYW1pbHk9QXJyYXkuaXNBcnJheShjKT9jW2VdOmN9ZWxzZSB1LmZvbnQ9e3NpemU6bCxmYW1pbHk6Y307cmV0dXJuIHV9ZnVuY3Rpb24gbSh0KXt2YXIgZSxyLG49dC5fbGVuZ3RoLGk9dC5tYXJrZXIsbz17fSxsPUFycmF5LmlzQXJyYXkoaS5zeW1ib2wpLGM9cy5pc0FycmF5T3JUeXBlZEFycmF5KGkuY29sb3IpLGg9cy5pc0FycmF5T3JUeXBlZEFycmF5KGkubGluZS5jb2xvciksZD1zLmlzQXJyYXlPclR5cGVkQXJyYXkoaS5vcGFjaXR5KSxnPXMuaXNBcnJheU9yVHlwZWRBcnJheShpLnNpemUpLHY9cy5pc0FycmF5T3JUeXBlZEFycmF5KGkubGluZS53aWR0aCk7aWYobHx8KHI9cC5PUEVOX1JFLnRlc3QoaS5zeW1ib2wpKSxsfHxjfHxofHxkKXtvLmNvbG9ycz1uZXcgQXJyYXkobiksby5ib3JkZXJDb2xvcnM9bmV3IEFycmF5KG4pO3ZhciBtPXUoaSxpLm9wYWNpdHksbikseT11KGkubGluZSxpLm9wYWNpdHksbik7aWYoIUFycmF5LmlzQXJyYXkoeVswXSkpe3ZhciB4PXk7Zm9yKHk9QXJyYXkobiksZT0wO2U8bjtlKyspeVtlXT14fWlmKCFBcnJheS5pc0FycmF5KG1bMF0pKXt2YXIgYj1tO2ZvcihtPUFycmF5KG4pLGU9MDtlPG47ZSsrKW1bZV09Yn1mb3Ioby5jb2xvcnM9bSxvLmJvcmRlckNvbG9ycz15LGU9MDtlPG47ZSsrKXtpZihsKXt2YXIgXz1pLnN5bWJvbFtlXTtyPXAuT1BFTl9SRS50ZXN0KF8pfXImJih5W2VdPW1bZV0uc2xpY2UoKSxtW2VdPW1bZV0uc2xpY2UoKSxtW2VdWzNdPTApfW8ub3BhY2l0eT10Lm9wYWNpdHl9ZWxzZSByPyhvLmNvbG9yPWEoaS5jb2xvcixcInVpbnQ4XCIpLG8uY29sb3JbM109MCxvLmJvcmRlckNvbG9yPWEoaS5jb2xvcixcInVpbnQ4XCIpKTooby5jb2xvcj1hKGkuY29sb3IsXCJ1aW50OFwiKSxvLmJvcmRlckNvbG9yPWEoaS5saW5lLmNvbG9yLFwidWludDhcIikpLG8ub3BhY2l0eT10Lm9wYWNpdHkqaS5vcGFjaXR5O2lmKGwpZm9yKG8ubWFya2Vycz1uZXcgQXJyYXkobiksZT0wO2U8bjtlKyspby5tYXJrZXJzW2VdPU0oaS5zeW1ib2xbZV0pO2Vsc2Ugby5tYXJrZXI9TShpLnN5bWJvbCk7dmFyIHcsaz1mKHQpO2lmKGd8fHYpe3ZhciBBLFQ9by5zaXplcz1uZXcgQXJyYXkobiksUz1vLmJvcmRlclNpemVzPW5ldyBBcnJheShuKSxFPTA7aWYoZyl7Zm9yKGU9MDtlPG47ZSsrKVRbZV09ayhpLnNpemVbZV0pLEUrPVRbZV07QT1FL259ZWxzZSBmb3Iodz1rKGkuc2l6ZSksZT0wO2U8bjtlKyspVFtlXT13O2lmKHYpZm9yKGU9MDtlPG47ZSsrKVNbZV09aS5saW5lLndpZHRoW2VdLzI7ZWxzZSBmb3Iodz1pLmxpbmUud2lkdGgvMixlPTA7ZTxuO2UrKylTW2VdPXc7by5zaXplQXZnPUF9ZWxzZSBvLnNpemU9ayhpJiZpLnNpemV8fDEwKSxvLmJvcmRlclNpemVzPWsoaS5saW5lLndpZHRoKTtyZXR1cm4gb31mdW5jdGlvbiB5KHQsZSl7dmFyIHI9dC5tYXJrZXIsbj17fTtyZXR1cm4gZT8oZS5tYXJrZXImJmUubWFya2VyLnN5bWJvbD9uPW0ocy5leHRlbmRGbGF0KHt9LHIsZS5tYXJrZXIpKTplLm1hcmtlciYmKGUubWFya2VyLnNpemUmJihuLnNpemU9ZS5tYXJrZXIuc2l6ZS8yKSxlLm1hcmtlci5jb2xvciYmKG4uY29sb3JzPWUubWFya2VyLmNvbG9yKSx2b2lkIDAhPT1lLm1hcmtlci5vcGFjaXR5JiYobi5vcGFjaXR5PWUubWFya2VyLm9wYWNpdHkpKSxuKTpufWZ1bmN0aW9uIHgodCxlKXt2YXIgcj17fTtpZighZSlyZXR1cm4gcjtpZihlLnRleHRmb250KXt2YXIgbj17b3BhY2l0eToxLHRleHQ6dC50ZXh0LHRleHRwb3NpdGlvbjp0LnRleHRwb3NpdGlvbix0ZXh0Zm9udDpzLmV4dGVuZEZsYXQoe30sdC50ZXh0Zm9udCl9O2UudGV4dGZvbnQmJnMuZXh0ZW5kRmxhdChuLnRleHRmb250LGUudGV4dGZvbnQpLHI9dihuKX1yZXR1cm4gcn1mdW5jdGlvbiBiKHQsZSl7dmFyIHI9e2NhcFNpemU6MiplLndpZHRoLGxpbmVXaWR0aDplLnRoaWNrbmVzcyxjb2xvcjplLmNvbG9yfTtyZXR1cm4gZS5jb3B5X3lzdHlsZSYmKHI9dC5lcnJvcl95KSxyfXZhciBfPXAuU1lNQk9MX1NERl9TSVpFLHc9cC5TWU1CT0xfU0laRSxrPXAuU1lNQk9MX1NUUk9LRSxBPXt9LFQ9bC5zeW1ib2xGdW5jc1swXSguMDUqdyk7ZnVuY3Rpb24gTSh0KXtpZihcImNpcmNsZVwiPT09dClyZXR1cm4gbnVsbDt2YXIgZSxyLG49bC5zeW1ib2xOdW1iZXIodCksYT1sLnN5bWJvbEZ1bmNzW24lMTAwXSxvPSEhbC5zeW1ib2xOb0RvdFtuJTEwMF0scz0hIWwuc3ltYm9sTm9GaWxsW24lMTAwXSxjPXAuRE9UX1JFLnRlc3QodCk7cmV0dXJuIEFbdF0/QVt0XTooZT1jJiYhbz9hKDEuMSp3KStUOmEodykscj1pKGUse3c6XyxoOl8sdmlld0JveDpbLXcsLXcsdyx3XSxzdHJva2U6cz9rOi1rfSksQVt0XT1yLHJ8fG51bGwpfWUuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXttYXJrZXI6dm9pZCAwLG1hcmtlclNlbDp2b2lkIDAsbWFya2VyVW5zZWw6dm9pZCAwLGxpbmU6dm9pZCAwLGZpbGw6dm9pZCAwLGVycm9yWDp2b2lkIDAsZXJyb3JZOnZvaWQgMCx0ZXh0OnZvaWQgMCx0ZXh0U2VsOnZvaWQgMCx0ZXh0VW5zZWw6dm9pZCAwfTtpZighMCE9PWUudmlzaWJsZSlyZXR1cm4gbjtpZihoLmhhc1RleHQoZSkmJihuLnRleHQ9dihlKSxuLnRleHRTZWw9eChlLGUuc2VsZWN0ZWQpLG4udGV4dFVuc2VsPXgoZSxlLnVuc2VsZWN0ZWQpKSxoLmhhc01hcmtlcnMoZSkmJihuLm1hcmtlcj1tKGUpLG4ubWFya2VyU2VsPXkoZSxlLnNlbGVjdGVkKSxuLm1hcmtlclVuc2VsPXkoZSxlLnVuc2VsZWN0ZWQpLCFlLnVuc2VsZWN0ZWQmJkFycmF5LmlzQXJyYXkoZS5tYXJrZXIub3BhY2l0eSkpKXt2YXIgaT1lLm1hcmtlci5vcGFjaXR5O2ZvcihuLm1hcmtlclVuc2VsLm9wYWNpdHk9bmV3IEFycmF5KGkubGVuZ3RoKSxyPTA7cjxpLmxlbmd0aDtyKyspbi5tYXJrZXJVbnNlbC5vcGFjaXR5W3JdPWQqaVtyXX1pZihoLmhhc0xpbmVzKGUpKXtuLmxpbmU9e292ZXJsYXk6ITAsdGhpY2tuZXNzOmUubGluZS53aWR0aCxjb2xvcjplLmxpbmUuY29sb3Isb3BhY2l0eTplLm9wYWNpdHl9O3ZhciBhPShwLkRBU0hFU1tlLmxpbmUuZGFzaF18fFsxXSkuc2xpY2UoKTtmb3Iocj0wO3I8YS5sZW5ndGg7KytyKWFbcl0qPWUubGluZS53aWR0aDtuLmxpbmUuZGFzaGVzPWF9cmV0dXJuIGUuZXJyb3JfeCYmZS5lcnJvcl94LnZpc2libGUmJihuLmVycm9yWD1iKGUsZS5lcnJvcl94KSksZS5lcnJvcl95JiZlLmVycm9yX3kudmlzaWJsZSYmKG4uZXJyb3JZPWIoZSxlLmVycm9yX3kpKSxlLmZpbGwmJlwibm9uZVwiIT09ZS5maWxsJiYobi5maWxsPXtjbG9zZWQ6ITAsZmlsbDplLmZpbGxjb2xvcix0aGlja25lc3M6MH0pLG59LG1hcmtlclN0eWxlOm0sbWFya2VyU2VsZWN0aW9uOnksbGluZVBvc2l0aW9uczpmdW5jdGlvbih0LGUscil7dmFyIG4saSxhPXIubGVuZ3RoLG89YS8yO2lmKGguaGFzTGluZXMoZSkmJm8paWYoXCJodlwiPT09ZS5saW5lLnNoYXBlKXtmb3Iobj1bXSxpPTA7aTxvLTE7aSsrKWlzTmFOKHJbMippXSl8fGlzTmFOKHJbMippKzFdKT9uLnB1c2goTmFOLE5hTixOYU4sTmFOKToobi5wdXNoKHJbMippXSxyWzIqaSsxXSksaXNOYU4oclsyKmkrMl0pfHxpc05hTihyWzIqaSszXSk/bi5wdXNoKE5hTixOYU4pOm4ucHVzaChyWzIqaSsyXSxyWzIqaSsxXSkpO24ucHVzaChyW2EtMl0sclthLTFdKX1lbHNlIGlmKFwiaHZoXCI9PT1lLmxpbmUuc2hhcGUpe2ZvcihuPVtdLGk9MDtpPG8tMTtpKyspaWYoaXNOYU4oclsyKmldKXx8aXNOYU4oclsyKmkrMV0pfHxpc05hTihyWzIqaSsyXSl8fGlzTmFOKHJbMippKzNdKSlpc05hTihyWzIqaV0pfHxpc05hTihyWzIqaSsxXSk/bi5wdXNoKE5hTixOYU4pOm4ucHVzaChyWzIqaV0sclsyKmkrMV0pLG4ucHVzaChOYU4sTmFOKTtlbHNle3ZhciBzPShyWzIqaV0rclsyKmkrMl0pLzI7bi5wdXNoKHJbMippXSxyWzIqaSsxXSxzLHJbMippKzFdLHMsclsyKmkrM10pfW4ucHVzaChyW2EtMl0sclthLTFdKX1lbHNlIGlmKFwidmh2XCI9PT1lLmxpbmUuc2hhcGUpe2ZvcihuPVtdLGk9MDtpPG8tMTtpKyspaWYoaXNOYU4oclsyKmldKXx8aXNOYU4oclsyKmkrMV0pfHxpc05hTihyWzIqaSsyXSl8fGlzTmFOKHJbMippKzNdKSlpc05hTihyWzIqaV0pfHxpc05hTihyWzIqaSsxXSk/bi5wdXNoKE5hTixOYU4pOm4ucHVzaChyWzIqaV0sclsyKmkrMV0pLG4ucHVzaChOYU4sTmFOKTtlbHNle3ZhciBsPShyWzIqaSsxXStyWzIqaSszXSkvMjtuLnB1c2goclsyKmldLHJbMippKzFdLHJbMippXSxsLHJbMippKzJdLGwpfW4ucHVzaChyW2EtMl0sclthLTFdKX1lbHNlIGlmKFwidmhcIj09PWUubGluZS5zaGFwZSl7Zm9yKG49W10saT0wO2k8by0xO2krKylpc05hTihyWzIqaV0pfHxpc05hTihyWzIqaSsxXSk/bi5wdXNoKE5hTixOYU4sTmFOLE5hTik6KG4ucHVzaChyWzIqaV0sclsyKmkrMV0pLGlzTmFOKHJbMippKzJdKXx8aXNOYU4oclsyKmkrM10pP24ucHVzaChOYU4sTmFOKTpuLnB1c2goclsyKmldLHJbMippKzNdKSk7bi5wdXNoKHJbYS0yXSxyW2EtMV0pfWVsc2Ugbj1yO3ZhciBjPSExO2ZvcihpPTA7aTxuLmxlbmd0aDtpKyspaWYoaXNOYU4obltpXSkpe2M9ITA7YnJlYWt9dmFyIHU9Y3x8bi5sZW5ndGg+cC5UT09fTUFOWV9QT0lOVFM/XCJyZWN0XCI6aC5oYXNNYXJrZXJzKGUpP1wicmVjdFwiOlwicm91bmRcIjtpZihjJiZlLmNvbm5lY3RnYXBzKXt2YXIgZj1uWzBdLGQ9blsxXTtmb3IoaT0wO2k8bi5sZW5ndGg7aSs9Milpc05hTihuW2ldKXx8aXNOYU4obltpKzFdKT8obltpXT1mLG5baSsxXT1kKTooZj1uW2ldLGQ9bltpKzFdKX1yZXR1cm57am9pbjp1LHBvc2l0aW9uczpufX0sZXJyb3JCYXJQb3NpdGlvbnM6ZnVuY3Rpb24odCxlLHIsaSxhKXt2YXIgcz1vLmdldENvbXBvbmVudE1ldGhvZChcImVycm9yYmFyc1wiLFwibWFrZUNvbXB1dGVFcnJvclwiKSxsPWMuZ2V0RnJvbUlkKHQsZS54YXhpcyksdT1jLmdldEZyb21JZCh0LGUueWF4aXMpLGg9ci5sZW5ndGgvMixmPXt9O2Z1bmN0aW9uIHAodCxpKXt2YXIgYT1pLl9pZC5jaGFyQXQoMCksbz1lW1wiZXJyb3JfXCIrYV07aWYobyYmby52aXNpYmxlJiYoXCJsaW5lYXJcIj09PWkudHlwZXx8XCJsb2dcIj09PWkudHlwZSkpe2Zvcih2YXIgbD1zKG8pLGM9e3g6MCx5OjF9W2FdLHU9e3g6WzAsMSwyLDNdLHk6WzIsMywwLDFdfVthXSxwPW5ldyBGbG9hdDY0QXJyYXkoNCpoKSxkPTEvMCxnPS0xLzAsdj0wLG09MDt2PGg7disrLG0rPTQpe3ZhciB5PXRbdl07aWYobih5KSl7dmFyIHg9clsyKnYrY10sYj1sKHksdiksXz1iWzBdLHc9YlsxXTtpZihuKF8pJiZuKHcpKXt2YXIgaz15LV8sQT15K3c7cFttK3VbMF1dPXgtaS5jMmwoaykscFttK3VbMV1dPWkuYzJsKEEpLXgscFttK3VbMl1dPTAscFttK3VbM11dPTAsZD1NYXRoLm1pbihkLHktXyksZz1NYXRoLm1heChnLHkrdyl9fX1mW2FdPXtwb3NpdGlvbnM6cixlcnJvcnM6cCxfYm5kczpbZCxnXX19fXJldHVybiBwKGksbCkscChhLHUpLGZ9LHRleHRQb3NpdGlvbjpmdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPWUuX2xlbmd0aCxvPXt9O2lmKGguaGFzTWFya2VycyhlKSl7dmFyIHM9ci5mb250LGw9ci5hbGlnbixjPXIuYmFzZWxpbmU7Zm9yKG8ub2Zmc2V0PW5ldyBBcnJheShhKSxpPTA7aTxhO2krKyl7dmFyIHU9bi5zaXplcz9uLnNpemVzW2ldOm4uc2l6ZSxmPUFycmF5LmlzQXJyYXkocyk/c1tpXS5zaXplOnMuc2l6ZSxwPUFycmF5LmlzQXJyYXkobCk/bC5sZW5ndGg+MT9sW2ldOmxbMF06bCxkPUFycmF5LmlzQXJyYXkoYyk/Yy5sZW5ndGg+MT9jW2ldOmNbMF06Yyx2PWdbcF0sbT1nW2RdLHk9dT91Ly44KzE6MCx4PS1tKnktLjUqbTtvLm9mZnNldFtpXT1bdip5L2YseC9mXX19cmV0dXJuIG99fX0se1wiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9uc1wiOjY3NyxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3JcIjo2OTgsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHNcIjo3NTIsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jXCI6MTA2OSxcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi9jb25zdGFudHNcIjoxMTAyLFwiY29sb3Itbm9ybWFsaXplXCI6MTExLFwiZmFzdC1pc251bWVyaWNcIjoyMjIsXCJzdmctcGF0aC1zZGZcIjo1MjB9XSwxMTA0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxhPXQoXCIuL2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vc2NhdHRlci9jb25zdGFudHNcIikscz10KFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiKSxsPXQoXCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzXCIpLGM9dChcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCIpLHU9dChcIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0c1wiKSxoPXQoXCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0c1wiKSxmPXQoXCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHApe2Z1bmN0aW9uIGQocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgZz0hIXQubWFya2VyJiYvLW9wZW4vLnRlc3QodC5tYXJrZXIuc3ltYm9sKSx2PXMuaXNCdWJibGUodCksbT1sKHQsZSxwLGQpO2lmKG0pe3ZhciB5PW08by5QVFNfTElORVNPTkxZP1wibGluZXMrbWFya2Vyc1wiOlwibGluZXNcIjtkKFwidGV4dFwiKSxkKFwiaG92ZXJ0ZXh0XCIpLGQoXCJob3ZlcnRlbXBsYXRlXCIpLGQoXCJtb2RlXCIseSkscy5oYXNMaW5lcyhlKSYmKGQoXCJjb25uZWN0Z2Fwc1wiKSx1KHQsZSxyLHAsZCksZChcImxpbmUuc2hhcGVcIikpLHMuaGFzTWFya2VycyhlKSYmKGModCxlLHIscCxkKSxkKFwibWFya2VyLmxpbmUud2lkdGhcIixnfHx2PzE6MCkpLHMuaGFzVGV4dChlKSYmZih0LGUscCxkKTt2YXIgeD0oZS5saW5lfHx7fSkuY29sb3IsYj0oZS5tYXJrZXJ8fHt9KS5jb2xvcjtkKFwiZmlsbFwiKSxcIm5vbmVcIiE9PWUuZmlsbCYmaCh0LGUscixkKTt2YXIgXz1pLmdldENvbXBvbmVudE1ldGhvZChcImVycm9yYmFyc1wiLFwic3VwcGx5RGVmYXVsdHNcIik7Xyh0LGUseHx8Ynx8cix7YXhpczpcInlcIn0pLF8odCxlLHh8fGJ8fHIse2F4aXM6XCJ4XCIsaW5oZXJpdDpcInlcIn0pLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGQpfWVsc2UgZS52aXNpYmxlPSExfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9zY2F0dGVyL2NvbnN0YW50c1wiOjEwNTYsXCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0c1wiOjEwNjEsXCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHNcIjoxMDY1LFwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHNcIjoxMDcxLFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiOjEwNzYsXCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHNcIjoxMDc3LFwiLi4vc2NhdHRlci94eV9kZWZhdWx0c1wiOjEwNzgsXCIuL2F0dHJpYnV0ZXNcIjoxMTAxfV0sMTEwNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJyZWdsLXNjYXR0ZXIyZFwiKSxpPXQoXCJyZWdsLWxpbmUyZFwiKSxhPXQoXCJyZWdsLWVycm9yMmRcIiksbz10KFwicG9pbnQtY2x1c3RlclwiKSxzPXQoXCJhcnJheS1yYW5nZVwiKSxsPXQoXCJnbC10ZXh0XCIpLGM9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLHU9dChcIi4uLy4uL2xpYlwiKSxoPXQoXCIuLi8uLi9saWIvcHJlcGFyZV9yZWdsXCIpLGY9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiKSxwPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlXCIpLmZpbmRFeHRyZW1lcyxkPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGc9dChcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIiksdj10KFwiLi4vc2NhdHRlci9jYWxjXCIpLG09di5jYWxjTWFya2VyU2l6ZSx5PXYuY2FsY0F4aXNFeHBhbnNpb24seD12LnNldEZpcnN0U2NhdHRlcixiPXQoXCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsY1wiKSxfPXQoXCIuLi9zY2F0dGVyL2xpbmtfdHJhY2VzXCIpLHc9dChcIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yXCIpLGs9dChcIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0XCIpLEE9dChcIi4vY29udmVydFwiKSxUPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTSxNPXQoXCIuL2NvbnN0YW50c1wiKS5UT09fTUFOWV9QT0lOVFMsUz10KFwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9uc1wiKS5ERVNFTEVDVERJTTtmdW5jdGlvbiBFKHQsZSxyKXt2YXIgbj10Ll9leHRyZW1lc1tlLl9pZF0saT1wKGUsci5fYm5kcyx7cGFkZGVkOiEwfSk7bi5taW49bi5taW4uY29uY2F0KGkubWluKSxuLm1heD1uLm1heC5jb25jYXQoaS5tYXgpfWZ1bmN0aW9uIEModCxlKXt2YXIgcj1lLl9zY2VuZSxuPXtjb3VudDowLGRpcnR5OiEwLGxpbmVPcHRpb25zOltdLGZpbGxPcHRpb25zOltdLG1hcmtlck9wdGlvbnM6W10sbWFya2VyU2VsZWN0ZWRPcHRpb25zOltdLG1hcmtlclVuc2VsZWN0ZWRPcHRpb25zOltdLGVycm9yWE9wdGlvbnM6W10sZXJyb3JZT3B0aW9uczpbXSx0ZXh0T3B0aW9uczpbXSx0ZXh0U2VsZWN0ZWRPcHRpb25zOltdLHRleHRVbnNlbGVjdGVkT3B0aW9uczpbXX0saT17c2VsZWN0QmF0Y2g6bnVsbCx1bnNlbGVjdEJhdGNoOm51bGwsZmlsbDJkOiExLHNjYXR0ZXIyZDohMSxlcnJvcjJkOiExLGxpbmUyZDohMSxnbFRleHQ6ITEsc2VsZWN0MmQ6bnVsbH07cmV0dXJuIGUuX3NjZW5lfHwoKHI9ZS5fc2NlbmU9e30pLmluaXQ9ZnVuY3Rpb24oKXt1LmV4dGVuZEZsYXQocixpLG4pfSxyLmluaXQoKSxyLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT11LnJlcGVhdCh0LHIuY291bnQpO2lmKHIuZmlsbDJkJiZyLmZpbGwyZC51cGRhdGUoZSksci5zY2F0dGVyMmQmJnIuc2NhdHRlcjJkLnVwZGF0ZShlKSxyLmxpbmUyZCYmci5saW5lMmQudXBkYXRlKGUpLHIuZXJyb3IyZCYmci5lcnJvcjJkLnVwZGF0ZShlLmNvbmNhdChlKSksci5zZWxlY3QyZCYmci5zZWxlY3QyZC51cGRhdGUoZSksci5nbFRleHQpZm9yKHZhciBuPTA7bjxyLmNvdW50O24rKylyLmdsVGV4dFtuXS51cGRhdGUodCl9LHIuZHJhdz1mdW5jdGlvbigpe2Zvcih2YXIgdD1yLmNvdW50LGU9ci5maWxsMmQsbj1yLmVycm9yMmQsaT1yLmxpbmUyZCxhPXIuc2NhdHRlcjJkLG89ci5nbFRleHQscz1yLnNlbGVjdDJkLGw9ci5zZWxlY3RCYXRjaCxjPXIudW5zZWxlY3RCYXRjaCx1PTA7dTx0O3UrKyllJiZyLmZpbGxPcmRlclt1XSYmZS5kcmF3KHIuZmlsbE9yZGVyW3VdKSxpJiZyLmxpbmVPcHRpb25zW3VdJiZpLmRyYXcodSksbiYmKHIuZXJyb3JYT3B0aW9uc1t1XSYmbi5kcmF3KHUpLHIuZXJyb3JZT3B0aW9uc1t1XSYmbi5kcmF3KHUrdCkpLCFhfHwhci5tYXJrZXJPcHRpb25zW3VdfHxsJiZsW3VdfHxhLmRyYXcodSksb1t1XSYmci50ZXh0T3B0aW9uc1t1XSYmb1t1XS5yZW5kZXIoKTthJiZzJiZsJiYocy5kcmF3KGwpLGEuZHJhdyhjKSksci5kaXJ0eT0hMX0sci5kZXN0cm95PWZ1bmN0aW9uKCl7ci5maWxsMmQmJnIuZmlsbDJkLmRlc3Ryb3kmJnIuZmlsbDJkLmRlc3Ryb3koKSxyLnNjYXR0ZXIyZCYmci5zY2F0dGVyMmQuZGVzdHJveSYmci5zY2F0dGVyMmQuZGVzdHJveSgpLHIuZXJyb3IyZCYmci5lcnJvcjJkLmRlc3Ryb3kmJnIuZXJyb3IyZC5kZXN0cm95KCksci5saW5lMmQmJnIubGluZTJkLmRlc3Ryb3kmJnIubGluZTJkLmRlc3Ryb3koKSxyLnNlbGVjdDJkJiZyLnNlbGVjdDJkLmRlc3Ryb3kmJnIuc2VsZWN0MmQuZGVzdHJveSgpLHIuZ2xUZXh0JiZyLmdsVGV4dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZGVzdHJveSYmdC5kZXN0cm95KCl9KSxyLmxpbmVPcHRpb25zPW51bGwsci5maWxsT3B0aW9ucz1udWxsLHIubWFya2VyT3B0aW9ucz1udWxsLHIubWFya2VyU2VsZWN0ZWRPcHRpb25zPW51bGwsci5tYXJrZXJVbnNlbGVjdGVkT3B0aW9ucz1udWxsLHIuZXJyb3JYT3B0aW9ucz1udWxsLHIuZXJyb3JZT3B0aW9ucz1udWxsLHIudGV4dE9wdGlvbnM9bnVsbCxyLnRleHRTZWxlY3RlZE9wdGlvbnM9bnVsbCxyLnRleHRVbnNlbGVjdGVkT3B0aW9ucz1udWxsLHIuc2VsZWN0QmF0Y2g9bnVsbCxyLnVuc2VsZWN0QmF0Y2g9bnVsbCxlLl9zY2VuZT1udWxsfSksci5kaXJ0eXx8dS5leHRlbmRGbGF0KHIsbikscn1mdW5jdGlvbiBMKHQsZSxyLG4pe3ZhciBpPXQueGEsYT10LnlhLG89dC5kaXN0YW5jZSxzPXQuZHh5LGw9dC5pbmRleCxoPXtwb2ludE51bWJlcjpsLHg6ZVtsXSx5OnJbbF19O2gudHg9QXJyYXkuaXNBcnJheShuLnRleHQpP24udGV4dFtsXTpuLnRleHQsaC5odHg9QXJyYXkuaXNBcnJheShuLmhvdmVydGV4dCk/bi5ob3ZlcnRleHRbbF06bi5ob3ZlcnRleHQsaC5kYXRhPUFycmF5LmlzQXJyYXkobi5jdXN0b21kYXRhKT9uLmN1c3RvbWRhdGFbbF06bi5jdXN0b21kYXRhLGgudHA9QXJyYXkuaXNBcnJheShuLnRleHRwb3NpdGlvbik/bi50ZXh0cG9zaXRpb25bbF06bi50ZXh0cG9zaXRpb247dmFyIGY9bi50ZXh0Zm9udDtmJiYoaC50cz1BcnJheS5pc0FycmF5KGYuc2l6ZSk/Zi5zaXplW2xdOmYuc2l6ZSxoLnRjPUFycmF5LmlzQXJyYXkoZi5jb2xvcik/Zi5jb2xvcltsXTpmLmNvbG9yLGgudGY9QXJyYXkuaXNBcnJheShmLmZhbWlseSk/Zi5mYW1pbHlbbF06Zi5mYW1pbHkpO3ZhciBwPW4ubWFya2VyO3AmJihoLm1zPXUuaXNBcnJheU9yVHlwZWRBcnJheShwLnNpemUpP3Auc2l6ZVtsXTpwLnNpemUsaC5tbz11LmlzQXJyYXlPclR5cGVkQXJyYXkocC5vcGFjaXR5KT9wLm9wYWNpdHlbbF06cC5vcGFjaXR5LGgubXg9QXJyYXkuaXNBcnJheShwLnN5bWJvbCk/cC5zeW1ib2xbbF06cC5zeW1ib2wsaC5tYz11LmlzQXJyYXlPclR5cGVkQXJyYXkocC5jb2xvcik/cC5jb2xvcltsXTpwLmNvbG9yKTt2YXIgZD1wJiZwLmxpbmU7ZCYmKGgubWxjPUFycmF5LmlzQXJyYXkoZC5jb2xvcik/ZC5jb2xvcltsXTpkLmNvbG9yLGgubWx3PXUuaXNBcnJheU9yVHlwZWRBcnJheShkLndpZHRoKT9kLndpZHRoW2xdOmQud2lkdGgpO3ZhciBnPXAmJnAuZ3JhZGllbnQ7ZyYmXCJub25lXCIhPT1nLnR5cGUmJihoLm1ndD1BcnJheS5pc0FycmF5KGcudHlwZSk/Zy50eXBlW2xdOmcudHlwZSxoLm1nYz1BcnJheS5pc0FycmF5KGcuY29sb3IpP2cuY29sb3JbbF06Zy5jb2xvcik7dmFyIHY9aS5jMnAoaC54LCEwKSxtPWEuYzJwKGgueSwhMCkseT1oLm1yY3x8MSx4PW4uaG92ZXJsYWJlbDt4JiYoaC5oYmc9QXJyYXkuaXNBcnJheSh4LmJnY29sb3IpP3guYmdjb2xvcltsXTp4LmJnY29sb3IsaC5oYmM9QXJyYXkuaXNBcnJheSh4LmJvcmRlcmNvbG9yKT94LmJvcmRlcmNvbG9yW2xdOnguYm9yZGVyY29sb3IsaC5odHM9QXJyYXkuaXNBcnJheSh4LmZvbnQuc2l6ZSk/eC5mb250LnNpemVbbF06eC5mb250LnNpemUsaC5odGM9QXJyYXkuaXNBcnJheSh4LmZvbnQuY29sb3IpP3guZm9udC5jb2xvcltsXTp4LmZvbnQuY29sb3IsaC5odGY9QXJyYXkuaXNBcnJheSh4LmZvbnQuZmFtaWx5KT94LmZvbnQuZmFtaWx5W2xdOnguZm9udC5mYW1pbHksaC5obmw9QXJyYXkuaXNBcnJheSh4Lm5hbWVsZW5ndGgpP3gubmFtZWxlbmd0aFtsXTp4Lm5hbWVsZW5ndGgpO3ZhciBiPW4uaG92ZXJpbmZvO2ImJihoLmhpPUFycmF5LmlzQXJyYXkoYik/YltsXTpiKTt2YXIgXz1uLmhvdmVydGVtcGxhdGU7XyYmKGguaHQ9QXJyYXkuaXNBcnJheShfKT9fW2xdOl8pO3ZhciBBPXt9O3JldHVybiBBW3QuaW5kZXhdPWgsdS5leHRlbmRGbGF0KHQse2NvbG9yOncobixoKSx4MDp2LXkseDE6dit5LHhMYWJlbFZhbDpoLngseTA6bS15LHkxOm0reSx5TGFiZWxWYWw6aC55LGNkOkEsZGlzdGFuY2U6byxzcGlrZURpc3RhbmNlOnMsaG92ZXJ0ZW1wbGF0ZTpoLmh0fSksaC5odHg/dC50ZXh0PWguaHR4OmgudHg/dC50ZXh0PWgudHg6bi50ZXh0JiYodC50ZXh0PW4udGV4dCksayhoLG4sdCksYy5nZXRDb21wb25lbnRNZXRob2QoXCJlcnJvcmJhcnNcIixcImhvdmVySW5mb1wiKShoLG4sdCksdH1mdW5jdGlvbiB6KHQpe3ZhciBlLHIsbj10WzBdLGk9bi50cmFjZSxhPW4udCxvPWEuX3NjZW5lLHM9YS5pbmRleCxsPW8uc2VsZWN0QmF0Y2hbc10sYz1vLnVuc2VsZWN0QmF0Y2hbc10saD1vLnRleHRPcHRpb25zW3NdLGY9by50ZXh0U2VsZWN0ZWRPcHRpb25zW3NdfHx7fSxwPW8udGV4dFVuc2VsZWN0ZWRPcHRpb25zW3NdfHx7fSxnPXUuZXh0ZW5kRmxhdCh7fSxoKTtpZihsJiZjKXt2YXIgdj1mLmNvbG9yLG09cC5jb2xvcix5PWguY29sb3IseD1BcnJheS5pc0FycmF5KHkpO2ZvcihnLmNvbG9yPW5ldyBBcnJheShpLl9sZW5ndGgpLGU9MDtlPGwubGVuZ3RoO2UrKylyPWxbZV0sZy5jb2xvcltyXT12fHwoeD95W3JdOnkpO2ZvcihlPTA7ZTxjLmxlbmd0aDtlKyspe3I9Y1tlXTt2YXIgYj14P3lbcl06eTtnLmNvbG9yW3JdPW18fCh2P2I6ZC5hZGRPcGFjaXR5KGIsUykpfX1vLmdsVGV4dFtzXS51cGRhdGUoZyl9ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwidHJhY2VcIixuYW1lOlwic2NhdHRlcmdsXCIsYmFzZVBsb3RNb2R1bGU6dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiKSxjYXRlZ29yaWVzOltcImdsXCIsXCJyZWdsXCIsXCJjYXJ0ZXNpYW5cIixcInN5bWJvbHNcIixcImVycm9yQmFyc09LXCIsXCJzaG93TGVnZW5kXCIsXCJzY2F0dGVyLWxpa2VcIl0sYXR0cmlidXRlczp0KFwiLi9hdHRyaWJ1dGVzXCIpLHN1cHBseURlZmF1bHRzOnQoXCIuL2RlZmF1bHRzXCIpLGNyb3NzVHJhY2VEZWZhdWx0czp0KFwiLi4vc2NhdHRlci9jcm9zc190cmFjZV9kZWZhdWx0c1wiKSxjb2xvcmJhcjp0KFwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXJcIiksY2FsYzpmdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPXQuX2Z1bGxMYXlvdXQscz1mLmdldEZyb21JZCh0LGUueGF4aXMpLGw9Zi5nZXRGcm9tSWQodCxlLnlheGlzKSxjPWEuX3Bsb3RzW2UueGF4aXMrZS55YXhpc10saD1lLl9sZW5ndGgscD1oPj1NLGQ9MipoLGc9e30sdj1zLm1ha2VDYWxjZGF0YShlLFwieFwiKSxfPWwubWFrZUNhbGNkYXRhKGUsXCJ5XCIpLHc9bmV3IEFycmF5KGQpO2ZvcihyPTA7cjxoO3IrKyluPXZbcl0saT1fW3JdLHdbMipyXT1uPT09VD9OYU46bix3WzIqcisxXT1pPT09VD9OYU46aTtpZihcImxvZ1wiPT09cy50eXBlKWZvcihyPTA7cjxkO3IrPTIpd1tyXT1zLmMybCh3W3JdKTtpZihcImxvZ1wiPT09bC50eXBlKWZvcihyPTE7cjxkO3IrPTIpd1tyXT1sLmMybCh3W3JdKTtpZihwJiZcImxvZ1wiIT09cy50eXBlJiZcImxvZ1wiIT09bC50eXBlKWcudHJlZT1vKHcpO2Vsc2V7dmFyIGs9Zy5pZHM9bmV3IEFycmF5KGgpO2ZvcihyPTA7cjxoO3IrKylrW3JdPXJ9Yih0LGUpO3ZhciBTLEw9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPUEuc3R5bGUodCxyKTtpZihvLm1hcmtlciYmKG8ubWFya2VyLnBvc2l0aW9ucz1uKSxvLmxpbmUmJm4ubGVuZ3RoPjEmJnUuZXh0ZW5kRmxhdChvLmxpbmUsQS5saW5lUG9zaXRpb25zKHQscixuKSksby5lcnJvclh8fG8uZXJyb3JZKXt2YXIgcz1BLmVycm9yQmFyUG9zaXRpb25zKHQscixuLGksYSk7by5lcnJvclgmJnUuZXh0ZW5kRmxhdChvLmVycm9yWCxzLngpLG8uZXJyb3JZJiZ1LmV4dGVuZEZsYXQoby5lcnJvclkscy55KX1yZXR1cm4gby50ZXh0JiYodS5leHRlbmRGbGF0KG8udGV4dCx7cG9zaXRpb25zOm59LEEudGV4dFBvc2l0aW9uKHQscixvLnRleHQsby5tYXJrZXIpKSx1LmV4dGVuZEZsYXQoby50ZXh0U2VsLHtwb3NpdGlvbnM6bn0sQS50ZXh0UG9zaXRpb24odCxyLG8udGV4dCxvLm1hcmtlclNlbCkpLHUuZXh0ZW5kRmxhdChvLnRleHRVbnNlbCx7cG9zaXRpb25zOm59LEEudGV4dFBvc2l0aW9uKHQscixvLnRleHQsby5tYXJrZXJVbnNlbCkpKSxvfSh0LDAsZSx3LHYsXyksej1DKDAsYyk7cmV0dXJuIHgoYSxlKSxwP0wubWFya2VyJiYoUz0yKihMLm1hcmtlci5zaXplQXZnfHxNYXRoLm1heChMLm1hcmtlci5zaXplLDMpKSk6Uz1tKGUsaCkseSh0LGUscyxsLHYsXyxTKSxMLmVycm9yWCYmRShlLHMsTC5lcnJvclgpLEwuZXJyb3JZJiZFKGUsbCxMLmVycm9yWSksTC5maWxsJiYhei5maWxsMmQmJih6LmZpbGwyZD0hMCksTC5tYXJrZXImJiF6LnNjYXR0ZXIyZCYmKHouc2NhdHRlcjJkPSEwKSxMLmxpbmUmJiF6LmxpbmUyZCYmKHoubGluZTJkPSEwKSwhTC5lcnJvclgmJiFMLmVycm9yWXx8ei5lcnJvcjJkfHwoei5lcnJvcjJkPSEwKSxMLnRleHQmJiF6LmdsVGV4dCYmKHouZ2xUZXh0PSEwKSxMLm1hcmtlciYmKEwubWFya2VyLnNuYXA9Zy50cmVlfHxNKSx6LmxpbmVPcHRpb25zLnB1c2goTC5saW5lKSx6LmVycm9yWE9wdGlvbnMucHVzaChMLmVycm9yWCksei5lcnJvcllPcHRpb25zLnB1c2goTC5lcnJvclkpLHouZmlsbE9wdGlvbnMucHVzaChMLmZpbGwpLHoubWFya2VyT3B0aW9ucy5wdXNoKEwubWFya2VyKSx6Lm1hcmtlclNlbGVjdGVkT3B0aW9ucy5wdXNoKEwubWFya2VyU2VsKSx6Lm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zLnB1c2goTC5tYXJrZXJVbnNlbCksei50ZXh0T3B0aW9ucy5wdXNoKEwudGV4dCksei50ZXh0U2VsZWN0ZWRPcHRpb25zLnB1c2goTC50ZXh0U2VsKSx6LnRleHRVbnNlbGVjdGVkT3B0aW9ucy5wdXNoKEwudGV4dFVuc2VsKSxnLl9zY2VuZT16LGcuaW5kZXg9ei5jb3VudCxnLng9dixnLnk9XyxnLnBvc2l0aW9ucz13LHouY291bnQrKyxbe3g6ITEseTohMSx0OmcsdHJhY2U6ZX1dfSxwbG90OmZ1bmN0aW9uKHQsZSxyKXtpZihyLmxlbmd0aCl7dmFyIG8scyxjPXQuX2Z1bGxMYXlvdXQsZj1lLl9zY2VuZSxwPWUueGF4aXMsZD1lLnlheGlzO2lmKGYpaWYoaCh0LFtcIkFOR0xFX2luc3RhbmNlZF9hcnJheXNcIixcIk9FU19lbGVtZW50X2luZGV4X3VpbnRcIl0pKXt2YXIgdj1jLl9nbGNhbnZhcy5kYXRhKClbMF0ucmVnbDtpZihfKHQsZSxyKSxmLmRpcnR5KXtpZighMD09PWYuZXJyb3IyZCYmKGYuZXJyb3IyZD1hKHYpKSwhMD09PWYubGluZTJkJiYoZi5saW5lMmQ9aSh2KSksITA9PT1mLnNjYXR0ZXIyZCYmKGYuc2NhdHRlcjJkPW4odikpLCEwPT09Zi5maWxsMmQmJihmLmZpbGwyZD1pKHYpKSwhMD09PWYuZ2xUZXh0KWZvcihmLmdsVGV4dD1uZXcgQXJyYXkoZi5jb3VudCksbz0wO288Zi5jb3VudDtvKyspZi5nbFRleHRbb109bmV3IGwodik7aWYoZi5nbFRleHQpe2lmKGYuY291bnQ+Zi5nbFRleHQubGVuZ3RoKXt2YXIgbT1mLmNvdW50LWYuZ2xUZXh0Lmxlbmd0aDtmb3Iobz0wO288bTtvKyspZi5nbFRleHQucHVzaChuZXcgbCh2KSl9ZWxzZSBpZihmLmNvdW50PGYuZ2xUZXh0Lmxlbmd0aCl7dmFyIHk9Zi5nbFRleHQubGVuZ3RoLWYuY291bnQ7Zi5nbFRleHQuc3BsaWNlKGYuY291bnQseSkuZm9yRWFjaChmdW5jdGlvbih0KXt0LmRlc3Ryb3koKX0pfWZvcihvPTA7bzxmLmNvdW50O28rKylmLmdsVGV4dFtvXS51cGRhdGUoZi50ZXh0T3B0aW9uc1tvXSl9aWYoZi5saW5lMmQmJihmLmxpbmUyZC51cGRhdGUoZi5saW5lT3B0aW9ucyksZi5saW5lT3B0aW9ucz1mLmxpbmVPcHRpb25zLm1hcChmdW5jdGlvbih0KXtpZih0JiZ0LnBvc2l0aW9ucyl7Zm9yKHZhciBlPXQucG9zaXRpb25zLHI9MDtyPGUubGVuZ3RoJiYoaXNOYU4oZVtyXSl8fGlzTmFOKGVbcisxXSkpOylyKz0yO2Zvcih2YXIgbj1lLmxlbmd0aC0yO24+ciYmKGlzTmFOKGVbbl0pfHxpc05hTihlW24rMV0pKTspbi09Mjt0LnBvc2l0aW9ucz1lLnNsaWNlKHIsbisyKX1yZXR1cm4gdH0pLGYubGluZTJkLnVwZGF0ZShmLmxpbmVPcHRpb25zKSksZi5lcnJvcjJkKXt2YXIgeD0oZi5lcnJvclhPcHRpb25zfHxbXSkuY29uY2F0KGYuZXJyb3JZT3B0aW9uc3x8W10pO2YuZXJyb3IyZC51cGRhdGUoeCl9Zi5zY2F0dGVyMmQmJmYuc2NhdHRlcjJkLnVwZGF0ZShmLm1hcmtlck9wdGlvbnMpLGYuZmlsbE9yZGVyPXUucmVwZWF0KG51bGwsZi5jb3VudCksZi5maWxsMmQmJihmLmZpbGxPcHRpb25zPWYuZmlsbE9wdGlvbnMubWFwKGZ1bmN0aW9uKHQsZSl7dmFyIG49cltlXTtpZih0JiZuJiZuWzBdJiZuWzBdLnRyYWNlKXt2YXIgaSxhLG89blswXSxzPW8udHJhY2UsbD1vLnQsYz1mLmxpbmVPcHRpb25zW2VdLHU9W107cy5fb3duZmlsbCYmdS5wdXNoKGUpLHMuX25leHR0cmFjZSYmdS5wdXNoKGUrMSksdS5sZW5ndGgmJihmLmZpbGxPcmRlcltlXT11KTt2YXIgaCxwLGQ9W10sZz1jJiZjLnBvc2l0aW9uc3x8bC5wb3NpdGlvbnM7aWYoXCJ0b3plcm95XCI9PT1zLmZpbGwpe2ZvcihoPTA7aDxnLmxlbmd0aCYmaXNOYU4oZ1toKzFdKTspaCs9Mjtmb3IocD1nLmxlbmd0aC0yO3A+aCYmaXNOYU4oZ1twKzFdKTspcC09MjswIT09Z1toKzFdJiYoZD1bZ1toXSwwXSksZD1kLmNvbmNhdChnLnNsaWNlKGgscCsyKSksMCE9PWdbcCsxXSYmKGQ9ZC5jb25jYXQoW2dbcF0sMF0pKX1lbHNlIGlmKFwidG96ZXJveFwiPT09cy5maWxsKXtmb3IoaD0wO2g8Zy5sZW5ndGgmJmlzTmFOKGdbaF0pOyloKz0yO2ZvcihwPWcubGVuZ3RoLTI7cD5oJiZpc05hTihnW3BdKTspcC09MjswIT09Z1toXSYmKGQ9WzAsZ1toKzFdXSksZD1kLmNvbmNhdChnLnNsaWNlKGgscCsyKSksMCE9PWdbcF0mJihkPWQuY29uY2F0KFswLGdbcCsxXV0pKX1lbHNlIGlmKFwidG9zZWxmXCI9PT1zLmZpbGx8fFwidG9uZXh0XCI9PT1zLmZpbGwpe2ZvcihkPVtdLGk9MCxhPTA7YTxnLmxlbmd0aDthKz0yKShpc05hTihnW2FdKXx8aXNOYU4oZ1thKzFdKSkmJigoZD1kLmNvbmNhdChnLnNsaWNlKGksYSkpKS5wdXNoKGdbaV0sZ1tpKzFdKSxpPWErMik7ZD1kLmNvbmNhdChnLnNsaWNlKGkpKSxpJiZkLnB1c2goZ1tpXSxnW2krMV0pfWVsc2V7dmFyIHY9cy5fbmV4dHRyYWNlO2lmKHYpe3ZhciBtPWYubGluZU9wdGlvbnNbZSsxXTtpZihtKXt2YXIgeT1tLnBvc2l0aW9ucztpZihcInRvbmV4dHlcIj09PXMuZmlsbCl7Zm9yKGQ9Zy5zbGljZSgpLGU9TWF0aC5mbG9vcih5Lmxlbmd0aC8yKTtlLS07KXt2YXIgeD15WzIqZV0sYj15WzIqZSsxXTtpc05hTih4KXx8aXNOYU4oYil8fGQucHVzaCh4LGIpfXQuZmlsbD12LmZpbGxjb2xvcn19fX1pZihzLl9wcmV2dHJhY2UmJlwidG9uZXh0XCI9PT1zLl9wcmV2dHJhY2UuZmlsbCl7dmFyIF89Zi5saW5lT3B0aW9uc1tlLTFdLnBvc2l0aW9ucyx3PWQubGVuZ3RoLzIsaz1baT13XTtmb3IoYT0wO2E8Xy5sZW5ndGg7YSs9MikoaXNOYU4oX1thXSl8fGlzTmFOKF9bYSsxXSkpJiYoay5wdXNoKGEvMit3KzEpLGk9YSsyKTtkPWQuY29uY2F0KF8pLHQuaG9sZT1rfXJldHVybiB0LmZpbGxtb2RlPXMuZmlsbCx0Lm9wYWNpdHk9cy5vcGFjaXR5LHQucG9zaXRpb25zPWQsdH19KSxmLmZpbGwyZC51cGRhdGUoZi5maWxsT3B0aW9ucykpfWYuc2VsZWN0QmF0Y2g9bnVsbCxmLnVuc2VsZWN0QmF0Y2g9bnVsbDt2YXIgYj1jLmRyYWdtb2RlLHc9XCJsYXNzb1wiPT09Ynx8XCJzZWxlY3RcIj09PWIsaz1jLmNsaWNrbW9kZS5pbmRleE9mKFwic2VsZWN0XCIpPi0xO2ZvcihvPTA7bzxyLmxlbmd0aDtvKyspe3ZhciBBPXJbb11bMF0sVD1BLnRyYWNlLE09QS50LFM9TS5pbmRleCxFPVQuX2xlbmd0aCxDPU0ueCxMPU0ueTtpZihULnNlbGVjdGVkcG9pbnRzfHx3fHxrKXtpZih3fHwodz0hMCksZi5zZWxlY3RCYXRjaHx8KGYuc2VsZWN0QmF0Y2g9W10sZi51bnNlbGVjdEJhdGNoPVtdKSxULnNlbGVjdGVkcG9pbnRzKXt2YXIgTz1mLnNlbGVjdEJhdGNoW1NdPXUuc2VsSW5kaWNlczJzZWxQb2ludHMoVCksST17fTtmb3Iocz0wO3M8Ty5sZW5ndGg7cysrKUlbT1tzXV09MTt2YXIgRD1bXTtmb3Iocz0wO3M8RTtzKyspSVtzXXx8RC5wdXNoKHMpO2YudW5zZWxlY3RCYXRjaFtTXT1EfXZhciBQPU0ueHB4PW5ldyBBcnJheShFKSxSPU0ueXB4PW5ldyBBcnJheShFKTtmb3Iocz0wO3M8RTtzKyspUFtzXT1wLmMycChDW3NdKSxSW3NdPWQuYzJwKExbc10pfWVsc2UgTS54cHg9TS55cHg9bnVsbH13PyhmLnNlbGVjdDJkfHwoZi5zZWxlY3QyZD1uKGMuX2dsY2FudmFzLmRhdGEoKVsxXS5yZWdsKSksZi5zY2F0dGVyMmQmJmYuc2VsZWN0QmF0Y2gmJmYuc2VsZWN0QmF0Y2gubGVuZ3RoJiZmLnNjYXR0ZXIyZC51cGRhdGUoZi5tYXJrZXJVbnNlbGVjdGVkT3B0aW9ucy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gZi5zZWxlY3RCYXRjaFtlXT90Om51bGx9KSksZi5zZWxlY3QyZCYmKGYuc2VsZWN0MmQudXBkYXRlKGYubWFya2VyT3B0aW9ucyksZi5zZWxlY3QyZC51cGRhdGUoZi5tYXJrZXJTZWxlY3RlZE9wdGlvbnMpKSxmLmdsVGV4dCYmci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPSgodHx8W10pWzBdfHx7fSkudHJhY2V8fHt9O2cuaGFzVGV4dChlKSYmeih0KX0pKTpmLnNjYXR0ZXIyZCYmZi5zY2F0dGVyMmQudXBkYXRlKGYubWFya2VyT3B0aW9ucyk7dmFyIEY9e3ZpZXdwb3J0OmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Ll9zaXplLGk9dC53aWR0aCxhPXQuaGVpZ2h0O3JldHVybltuLmwrZS5kb21haW5bMF0qbi53LG4uYityLmRvbWFpblswXSpuLmgsaS1uLnItKDEtZS5kb21haW5bMV0pKm4udyxhLW4udC0oMS1yLmRvbWFpblsxXSkqbi5oXX0oYyxwLGQpLHJhbmdlOlsocC5fcmx8fHAucmFuZ2UpWzBdLChkLl9ybHx8ZC5yYW5nZSlbMF0sKHAuX3JsfHxwLnJhbmdlKVsxXSwoZC5fcmx8fGQucmFuZ2UpWzFdXX0sQj11LnJlcGVhdChGLGYuY291bnQpO2YuZmlsbDJkJiZmLmZpbGwyZC51cGRhdGUoQiksZi5saW5lMmQmJmYubGluZTJkLnVwZGF0ZShCKSxmLmVycm9yMmQmJmYuZXJyb3IyZC51cGRhdGUoQi5jb25jYXQoQikpLGYuc2NhdHRlcjJkJiZmLnNjYXR0ZXIyZC51cGRhdGUoQiksZi5zZWxlY3QyZCYmZi5zZWxlY3QyZC51cGRhdGUoQiksZi5nbFRleHQmJmYuZ2xUZXh0LmZvckVhY2goZnVuY3Rpb24odCl7dC51cGRhdGUoRil9KX1lbHNlIGYuaW5pdCgpfX0saG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHMsbCxjLHUsaCxmLHA9dC5jZCxkPXBbMF0udCxnPXBbMF0udHJhY2Usdj10LnhhLG09dC55YSx5PWQueCx4PWQueSxiPXYuYzJwKGUpLF89bS5jMnAociksdz10LmRpc3RhbmNlO2lmKGQudHJlZSl7dmFyIGs9di5wMmMoYi13KSxBPXYucDJjKGIrdyksVD1tLnAyYyhfLXcpLE09bS5wMmMoXyt3KTtpPVwieFwiPT09bj9kLnRyZWUucmFuZ2UoTWF0aC5taW4oayxBKSxNYXRoLm1pbihtLl9ybFswXSxtLl9ybFsxXSksTWF0aC5tYXgoayxBKSxNYXRoLm1heChtLl9ybFswXSxtLl9ybFsxXSkpOmQudHJlZS5yYW5nZShNYXRoLm1pbihrLEEpLE1hdGgubWluKFQsTSksTWF0aC5tYXgoayxBKSxNYXRoLm1heChULE0pKX1lbHNle2lmKCFkLmlkcylyZXR1cm5bdF07aT1kLmlkc312YXIgUz13O2lmKFwieFwiPT09bilmb3IobD0wO2w8aS5sZW5ndGg7bCsrKW89eVtpW2xdXSwoYz1NYXRoLmFicyh2LmMycChvKS1iKSk8UyYmKFM9Yyx1PW0uYzJwKHhbaVtsXV0pLV8sZj1NYXRoLnNxcnQoYypjK3UqdSksYT1pW2xdKTtlbHNlIGZvcihsPTA7bDxpLmxlbmd0aDtsKyspbz15W2lbbF1dLHM9eFtpW2xdXSxjPXYuYzJwKG8pLWIsdT1tLmMycChzKS1fLChoPU1hdGguc3FydChjKmMrdSp1KSk8UyYmKFM9Zj1oLGE9aVtsXSk7cmV0dXJuIHQuaW5kZXg9YSx0LmRpc3RhbmNlPVMsdC5keHk9Zix2b2lkIDA9PT1hP1t0XTooTCh0LHkseCxnKSxbdF0pfSxzZWxlY3RQb2ludHM6ZnVuY3Rpb24odCxlKXt2YXIgcj10LmNkLG49W10saT1yWzBdLnRyYWNlLGE9clswXS50LG89aS5fbGVuZ3RoLGw9YS54LGM9YS55LHU9YS5fc2NlbmU7aWYoIXUpcmV0dXJuIG47dmFyIGg9Zy5oYXNUZXh0KGkpLGY9Zy5oYXNNYXJrZXJzKGkpLHA9IWYmJiFoO2lmKCEwIT09aS52aXNpYmxlfHxwKXJldHVybiBuO3ZhciBkLHY9bnVsbCxtPW51bGw7aWYoITE9PT1lfHxlLmRlZ2VuZXJhdGUpbT1zKG8pO2Vsc2UgZm9yKHY9W10sbT1bXSxkPTA7ZDxvO2QrKyllLmNvbnRhaW5zKFthLnhweFtkXSxhLnlweFtkXV0sITEsZCx0KT8odi5wdXNoKGQpLG4ucHVzaCh7cG9pbnROdW1iZXI6ZCx4OmxbZF0seTpjW2RdfSkpOm0ucHVzaChkKTtpZih1LnNlbGVjdEJhdGNofHwodS5zZWxlY3RCYXRjaD1bXSx1LnVuc2VsZWN0QmF0Y2g9W10pLCF1LnNlbGVjdEJhdGNoW2EuaW5kZXhdKXtmb3IoZD0wO2Q8dS5jb3VudDtkKyspdS5zZWxlY3RCYXRjaFtkXT1bXSx1LnVuc2VsZWN0QmF0Y2hbZF09W107ZiYmdS5zY2F0dGVyMmQudXBkYXRlKHUubWFya2VyVW5zZWxlY3RlZE9wdGlvbnMpfXJldHVybiB1LnNlbGVjdEJhdGNoW2EuaW5kZXhdPXYsdS51bnNlbGVjdEJhdGNoW2EuaW5kZXhdPW0saCYmeihyKSxufSxzY2VuZVVwZGF0ZTpDLGNhbGNIb3ZlcjpMLG1ldGE6e319fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9uc1wiOjY3NyxcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvcHJlcGFyZV9yZWdsXCI6NzE0LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCI6NzYwLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZVwiOjc0OCxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiOjc1MixcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5LFwiLi4vc2NhdHRlci9jYWxjXCI6MTA1MyxcIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjXCI6MTA1NSxcIi4uL3NjYXR0ZXIvY3Jvc3NfdHJhY2VfZGVmYXVsdHNcIjoxMDU4LFwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHRcIjoxMDYwLFwiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3JcIjoxMDYyLFwiLi4vc2NhdHRlci9saW5rX3RyYWNlc1wiOjEwNjgsXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiOjEwNzAsXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCI6MTA3NixcIi4vYXR0cmlidXRlc1wiOjExMDEsXCIuL2NvbnN0YW50c1wiOjExMDIsXCIuL2NvbnZlcnRcIjoxMTAzLFwiLi9kZWZhdWx0c1wiOjExMDQsXCJhcnJheS1yYW5nZVwiOjU4LFwiZ2wtdGV4dFwiOjMxNCxcInBvaW50LWNsdXN0ZXJcIjo0NjIsXCJyZWdsLWVycm9yMmRcIjo0ODMsXCJyZWdsLWxpbmUyZFwiOjQ4NCxcInJlZ2wtc2NhdHRlcjJkXCI6NDg1fV0sMTEwNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxpPXQoXCIuLi9zY2F0dGVyZ2VvL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL3Bsb3RzL21hcGJveC9sYXlvdXRfYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCIpLGw9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiKSxjPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsdT10KFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiKS5vdmVycmlkZUFsbCxoPWkubGluZSxmPWkubWFya2VyO2UuZXhwb3J0cz11KHtsb246aS5sb24sbGF0OmkubGF0LG1vZGU6Yyh7fSxhLm1vZGUse2RmbHQ6XCJtYXJrZXJzXCJ9KSx0ZXh0OmMoe30sYS50ZXh0LHt9KSxob3ZlcnRleHQ6Yyh7fSxhLmhvdmVydGV4dCx7fSksbGluZTp7Y29sb3I6aC5jb2xvcix3aWR0aDpoLndpZHRofSxjb25uZWN0Z2FwczphLmNvbm5lY3RnYXBzLG1hcmtlcjp7c3ltYm9sOnt2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcImNpcmNsZVwiLGFycmF5T2s6ITB9LG9wYWNpdHk6Zi5vcGFjaXR5LHNpemU6Zi5zaXplLHNpemVyZWY6Zi5zaXplcmVmLHNpemVtaW46Zi5zaXplbWluLHNpemVtb2RlOmYuc2l6ZW1vZGUsY29sb3I6Zi5jb2xvcixjb2xvcnNjYWxlOmYuY29sb3JzY2FsZSxjYXV0bzpmLmNhdXRvLGNtYXg6Zi5jbWF4LGNtaW46Zi5jbWluLGNtaWQ6Zi5jbWlkLGF1dG9jb2xvcnNjYWxlOmYuYXV0b2NvbG9yc2NhbGUscmV2ZXJzZXNjYWxlOmYucmV2ZXJzZXNjYWxlLHNob3dzY2FsZTpmLnNob3dzY2FsZSxjb2xvcmJhcjpsfSxmaWxsOmkuZmlsbCxmaWxsY29sb3I6YS5maWxsY29sb3IsdGV4dGZvbnQ6by5sYXllcnMuc3ltYm9sLnRleHRmb250LHRleHRwb3NpdGlvbjpvLmxheWVycy5zeW1ib2wudGV4dHBvc2l0aW9uLHNlbGVjdGVkOnttYXJrZXI6YS5zZWxlY3RlZC5tYXJrZXJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjphLnVuc2VsZWN0ZWQubWFya2VyfSxob3ZlcmluZm86Yyh7fSxzLmhvdmVyaW5mbyx7ZmxhZ3M6W1wibG9uXCIsXCJsYXRcIixcInRleHRcIixcIm5hbWVcIl19KSxob3ZlcnRlbXBsYXRlOm4oKX0sXCJjYWxjXCIsXCJuZXN0ZWRcIil9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi4vLi4vcGxvdHMvbWFwYm94L2xheW91dF9hdHRyaWJ1dGVzXCI6ODA2LFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCI6MTA1MixcIi4uL3NjYXR0ZXJnZW8vYXR0cmlidXRlc1wiOjEwOTJ9XSwxMTA3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTSxvPXQoXCIuLi8uLi9saWIvZ2VvanNvbl91dGlsc1wiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGVcIiksbD10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLGM9dChcIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jXCIpLHU9dChcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIiksaD10KFwiLi4vLi4vcGxvdHMvbWFwYm94L2NvbnZlcnRfdGV4dF9vcHRzXCIpO2Z1bmN0aW9uIGYoKXtyZXR1cm57Z2VvanNvbjpvLm1ha2VCbGFuaygpLGxheW91dDp7dmlzaWJpbGl0eTpcIm5vbmVcIn0scGFpbnQ6e319fWZ1bmN0aW9uIHAodCl7cmV0dXJuIGkuaXNBcnJheU9yVHlwZWRBcnJheSh0KT9mdW5jdGlvbih0KXtyZXR1cm4gdH06dD9mdW5jdGlvbigpe3JldHVybiB0fTpkfWZ1bmN0aW9uIGQoKXtyZXR1cm5cIlwifWZ1bmN0aW9uIGcodCl7cmV0dXJuIHRbMF09PT1hfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyPXRbMF0udHJhY2UsYT0hMD09PXIudmlzaWJsZSx2PVwibm9uZVwiIT09ci5maWxsLG09dS5oYXNMaW5lcyhyKSx5PXUuaGFzTWFya2VycyhyKSx4PXUuaGFzVGV4dChyKSxiPXkmJlwiY2lyY2xlXCI9PT1yLm1hcmtlci5zeW1ib2wsXz15JiZcImNpcmNsZVwiIT09ci5tYXJrZXIuc3ltYm9sLHc9ZigpLGs9ZigpLEE9ZigpLFQ9ZigpLE09e2ZpbGw6dyxsaW5lOmssY2lyY2xlOkEsc3ltYm9sOlR9O2lmKCFhKXJldHVybiBNO2lmKCh2fHxtKSYmKGU9by5jYWxjVHJhY2VUb0xpbmVDb29yZHModCkpLHYmJih3Lmdlb2pzb249by5tYWtlUG9seWdvbihlKSx3LmxheW91dC52aXNpYmlsaXR5PVwidmlzaWJsZVwiLGkuZXh0ZW5kRmxhdCh3LnBhaW50LHtcImZpbGwtY29sb3JcIjpyLmZpbGxjb2xvcn0pKSxtJiYoay5nZW9qc29uPW8ubWFrZUxpbmUoZSksay5sYXlvdXQudmlzaWJpbGl0eT1cInZpc2libGVcIixpLmV4dGVuZEZsYXQoay5wYWludCx7XCJsaW5lLXdpZHRoXCI6ci5saW5lLndpZHRoLFwibGluZS1jb2xvclwiOnIubGluZS5jb2xvcixcImxpbmUtb3BhY2l0eVwiOnIub3BhY2l0eX0pKSxiKXt2YXIgUz1mdW5jdGlvbih0KXt2YXIgZSxyLGEsbyx1PXRbMF0udHJhY2UsaD11Lm1hcmtlcixmPXUuc2VsZWN0ZWRwb2ludHMscD1pLmlzQXJyYXlPclR5cGVkQXJyYXkoaC5jb2xvciksZD1pLmlzQXJyYXlPclR5cGVkQXJyYXkoaC5zaXplKSx2PWkuaXNBcnJheU9yVHlwZWRBcnJheShoLm9wYWNpdHkpO2Z1bmN0aW9uIG0odCl7cmV0dXJuIHUub3BhY2l0eSp0fXAmJihyPXMuaGFzQ29sb3JzY2FsZSh1LFwibWFya2VyXCIpP3MubWFrZUNvbG9yU2NhbGVGdW5jKHMuZXh0cmFjdFNjYWxlKGgse2NMZXR0ZXI6XCJjXCJ9KSk6aS5pZGVudGl0eSk7ZCYmKGE9Yyh1KSk7diYmKG89ZnVuY3Rpb24odCl7dmFyIGU9bih0KT8raS5jb25zdHJhaW4odCwwLDEpOjA7cmV0dXJuIG0oZSl9KTt2YXIgeSx4PVtdO2ZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciBiPXRbZV0sXz1iLmxvbmxhdDtpZighZyhfKSl7dmFyIHc9e307ciYmKHcubWNjPWIubWNjPXIoYi5tYykpLGEmJih3Lm1yYz1iLm1yYz1hKGIubXMpKSxvJiYody5tbz1vKGIubW8pKSxmJiYody5zZWxlY3RlZD1iLnNlbGVjdGVkfHwwKSx4LnB1c2goe3R5cGU6XCJGZWF0dXJlXCIsZ2VvbWV0cnk6e3R5cGU6XCJQb2ludFwiLGNvb3JkaW5hdGVzOl99LHByb3BlcnRpZXM6d30pfX1pZihmKWZvcih5PWwubWFrZVNlbGVjdGVkUG9pbnRTdHlsZUZucyh1KSxlPTA7ZTx4Lmxlbmd0aDtlKyspe3ZhciBrPXhbZV0ucHJvcGVydGllczt5LnNlbGVjdGVkT3BhY2l0eUZuJiYoay5tbz1tKHkuc2VsZWN0ZWRPcGFjaXR5Rm4oaykpKSx5LnNlbGVjdGVkQ29sb3JGbiYmKGsubWNjPXkuc2VsZWN0ZWRDb2xvckZuKGspKSx5LnNlbGVjdGVkU2l6ZUZuJiYoay5tcmM9eS5zZWxlY3RlZFNpemVGbihrKSl9cmV0dXJue2dlb2pzb246e3R5cGU6XCJGZWF0dXJlQ29sbGVjdGlvblwiLGZlYXR1cmVzOnh9LG1jYzpwfHx5JiZ5LnNlbGVjdGVkQ29sb3JGbj97dHlwZTpcImlkZW50aXR5XCIscHJvcGVydHk6XCJtY2NcIn06aC5jb2xvcixtcmM6ZHx8eSYmeS5zZWxlY3RlZFNpemVGbj97dHlwZTpcImlkZW50aXR5XCIscHJvcGVydHk6XCJtcmNcIn06KEE9aC5zaXplLEEvMiksbW86dnx8eSYmeS5zZWxlY3RlZE9wYWNpdHlGbj97dHlwZTpcImlkZW50aXR5XCIscHJvcGVydHk6XCJtb1wifTptKGgub3BhY2l0eSl9O3ZhciBBfSh0KTtBLmdlb2pzb249Uy5nZW9qc29uLEEubGF5b3V0LnZpc2liaWxpdHk9XCJ2aXNpYmxlXCIsaS5leHRlbmRGbGF0KEEucGFpbnQse1wiY2lyY2xlLWNvbG9yXCI6Uy5tY2MsXCJjaXJjbGUtcmFkaXVzXCI6Uy5tcmMsXCJjaXJjbGUtb3BhY2l0eVwiOlMubW99KX1pZigoX3x8eCkmJihULmdlb2pzb249ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF0udHJhY2Uscj0oZS5tYXJrZXJ8fHt9KS5zeW1ib2wsbj1lLnRleHQsaT1cImNpcmNsZVwiIT09cj9wKHIpOmQsYT11Lmhhc1RleHQoZSk/cChuKTpkLG89W10scz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbD10W3NdO2cobC5sb25sYXQpfHxvLnB1c2goe3R5cGU6XCJGZWF0dXJlXCIsZ2VvbWV0cnk6e3R5cGU6XCJQb2ludFwiLGNvb3JkaW5hdGVzOmwubG9ubGF0fSxwcm9wZXJ0aWVzOntzeW1ib2w6aShsLm14KSx0ZXh0OmEobC50eCl9fSl9cmV0dXJue3R5cGU6XCJGZWF0dXJlQ29sbGVjdGlvblwiLGZlYXR1cmVzOm99fSh0KSxpLmV4dGVuZEZsYXQoVC5sYXlvdXQse3Zpc2liaWxpdHk6XCJ2aXNpYmxlXCIsXCJpY29uLWltYWdlXCI6XCJ7c3ltYm9sfS0xNVwiLFwidGV4dC1maWVsZFwiOlwie3RleHR9XCJ9KSxfJiYoaS5leHRlbmRGbGF0KFQubGF5b3V0LHtcImljb24tc2l6ZVwiOnIubWFya2VyLnNpemUvMTB9KSxpLmV4dGVuZEZsYXQoVC5wYWludCx7XCJpY29uLW9wYWNpdHlcIjpyLm9wYWNpdHkqci5tYXJrZXIub3BhY2l0eSxcImljb24tY29sb3JcIjpyLm1hcmtlci5jb2xvcn0pKSx4KSl7dmFyIEU9KHIubWFya2VyfHx7fSkuc2l6ZSxDPWgoci50ZXh0cG9zaXRpb24sRSk7aS5leHRlbmRGbGF0KFQubGF5b3V0LHtcInRleHQtc2l6ZVwiOnIudGV4dGZvbnQuc2l6ZSxcInRleHQtYW5jaG9yXCI6Qy5hbmNob3IsXCJ0ZXh0LW9mZnNldFwiOkMub2Zmc2V0fSksaS5leHRlbmRGbGF0KFQucGFpbnQse1widGV4dC1jb2xvclwiOnIudGV4dGZvbnQuY29sb3IsXCJ0ZXh0LW9wYWNpdHlcIjpyLm9wYWNpdHl9KX1yZXR1cm4gTX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZVwiOjU5MCxcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZ1wiOjU5OSxcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9saWIvZ2VvanNvbl91dGlsc1wiOjY5NSxcIi4uLy4uL3Bsb3RzL21hcGJveC9jb252ZXJ0X3RleHRfb3B0c1wiOjgwMyxcIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jXCI6MTA2OSxcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSwxMTA4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCIpLGE9dChcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCIpLG89dChcIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0c1wiKSxzPXQoXCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHNcIiksbD10KFwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHNcIiksYz10KFwiLi9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1KXtmdW5jdGlvbiBoKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxjLHIsaSl9aWYoZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoXCJsb25cIil8fFtdLGk9cihcImxhdFwiKXx8W10sYT1NYXRoLm1pbihuLmxlbmd0aCxpLmxlbmd0aCk7cmV0dXJuIGUuX2xlbmd0aD1hLGF9KDAsZSxoKSl7aWYoaChcInRleHRcIiksaChcImhvdmVydGV4dFwiKSxoKFwiaG92ZXJ0ZW1wbGF0ZVwiKSxoKFwibW9kZVwiKSxpLmhhc0xpbmVzKGUpJiYobyh0LGUscix1LGgse25vRGFzaDohMH0pLGgoXCJjb25uZWN0Z2Fwc1wiKSksaS5oYXNNYXJrZXJzKGUpKXthKHQsZSxyLHUsaCx7bm9MaW5lOiEwfSk7dmFyIGY9ZS5tYXJrZXI7XCJjaXJjbGVcIiE9PWYuc3ltYm9sJiYobi5pc0FycmF5T3JUeXBlZEFycmF5KGYuc2l6ZSkmJihmLnNpemU9Zi5zaXplWzBdKSxuLmlzQXJyYXlPclR5cGVkQXJyYXkoZi5jb2xvcikmJihmLmNvbG9yPWYuY29sb3JbMF0pKX1pLmhhc1RleHQoZSkmJnModCxlLHUsaCx7bm9TZWxlY3Q6ITB9KSxoKFwiZmlsbFwiKSxcIm5vbmVcIiE9PWUuZmlsbCYmbCh0LGUscixoKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxoKX1lbHNlIGUudmlzaWJsZT0hMX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzXCI6MTA2MSxcIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0c1wiOjEwNjUsXCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0c1wiOjEwNzEsXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCI6MTA3NixcIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0c1wiOjEwNzcsXCIuL2F0dHJpYnV0ZXNcIjoxMTA2fV0sMTEwOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0Lmxvbj1lLmxvbix0LmxhdD1lLmxhdCx0fX0se31dLDExMTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9meFwiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3JcIiksbz10KFwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHRcIikscz10KFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKS5CQUROVU07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbD10LmNkLGM9bFswXS50cmFjZSx1PXQueGEsaD10LnlhLGY9dC5zdWJwbG90LHA9MzYwKihlPj0wP01hdGguZmxvb3IoKGUrMTgwKS8zNjApOk1hdGguY2VpbCgoZS0xODApLzM2MCkpLGQ9ZS1wO2lmKG4uZ2V0Q2xvc2VzdChsLGZ1bmN0aW9uKHQpe3ZhciBlPXQubG9ubGF0O2lmKGVbMF09PT1zKXJldHVybiAxLzA7dmFyIG49aS5tb2RIYWxmKGVbMF0sMzYwKSxhPWVbMV0sbz1mLnByb2plY3QoW24sYV0pLGw9by54LXUuYzJwKFtkLGFdKSxjPW8ueS1oLmMycChbbixyXSkscD1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5zcXJ0KGwqbCtjKmMpLXAsMS0zL3ApfSx0KSwhMSE9PXQuaW5kZXgpe3ZhciBnPWxbdC5pbmRleF0sdj1nLmxvbmxhdCxtPVtpLm1vZEhhbGYodlswXSwzNjApK3AsdlsxXV0seT11LmMycChtKSx4PWguYzJwKG0pLGI9Zy5tcmN8fDE7cmV0dXJuIHQueDA9eS1iLHQueDE9eStiLHQueTA9eC1iLHQueTE9eCtiLHQuY29sb3I9YShjLGcpLHQuZXh0cmFUZXh0PWZ1bmN0aW9uKHQsZSxyKXtpZih0LmhvdmVydGVtcGxhdGUpcmV0dXJuO3ZhciBuPShlLmhpfHx0LmhvdmVyaW5mbykuc3BsaXQoXCIrXCIpLGk9LTEhPT1uLmluZGV4T2YoXCJhbGxcIiksYT0tMSE9PW4uaW5kZXhPZihcImxvblwiKSxzPS0xIT09bi5pbmRleE9mKFwibGF0XCIpLGw9ZS5sb25sYXQsYz1bXTtmdW5jdGlvbiB1KHQpe3JldHVybiB0K1wiXFx4YjBcIn1pfHxhJiZzP2MucHVzaChcIihcIit1KGxbMF0pK1wiLCBcIit1KGxbMV0pK1wiKVwiKTphP2MucHVzaChyLmxvbit1KGxbMF0pKTpzJiZjLnB1c2goci5sYXQrdShsWzFdKSk7KGl8fC0xIT09bi5pbmRleE9mKFwidGV4dFwiKSkmJm8oZSx0LGMpO3JldHVybiBjLmpvaW4oXCI8YnI+XCIpfShjLGcsbFswXS50LmxhYmVscyksdC5ob3ZlcnRlbXBsYXRlPWMuaG92ZXJ0ZW1wbGF0ZSxbdF19fX0se1wiLi4vLi4vY29tcG9uZW50cy9meFwiOjYxNyxcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dFwiOjEwNjAsXCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvclwiOjEwNjJ9XSwxMTExOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoXCIuL2F0dHJpYnV0ZXNcIiksbi5zdXBwbHlEZWZhdWx0cz10KFwiLi9kZWZhdWx0c1wiKSxuLmNvbG9yYmFyPXQoXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiKSxuLmNhbGM9dChcIi4uL3NjYXR0ZXJnZW8vY2FsY1wiKSxuLnBsb3Q9dChcIi4vcGxvdFwiKSxuLmhvdmVyUG9pbnRzPXQoXCIuL2hvdmVyXCIpLG4uZXZlbnREYXRhPXQoXCIuL2V2ZW50X2RhdGFcIiksbi5zZWxlY3RQb2ludHM9dChcIi4vc2VsZWN0XCIpLG4uc3R5bGU9ZnVuY3Rpb24odCxlKXtlJiZlWzBdLnRyYWNlLl9nbFRyYWNlLnVwZGF0ZShlKX0sbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJzY2F0dGVybWFwYm94XCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvbWFwYm94XCIpLG4uY2F0ZWdvcmllcz1bXCJtYXBib3hcIixcImdsXCIsXCJzeW1ib2xzXCIsXCJzaG93TGVnZW5kXCIsXCJzY2F0dGVybGlrZVwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4uLy4uL3Bsb3RzL21hcGJveFwiOjgwNCxcIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyXCI6MTA3MCxcIi4uL3NjYXR0ZXJnZW8vY2FsY1wiOjEwOTMsXCIuL2F0dHJpYnV0ZXNcIjoxMTA2LFwiLi9kZWZhdWx0c1wiOjExMDgsXCIuL2V2ZW50X2RhdGFcIjoxMTA5LFwiLi9ob3ZlclwiOjExMTAsXCIuL3Bsb3RcIjoxMTEyLFwiLi9zZWxlY3RcIjoxMTEzfV0sMTExMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuL2NvbnZlcnRcIik7ZnVuY3Rpb24gaSh0LGUpe3RoaXMuc3VicGxvdD10LHRoaXMudWlkPWUsdGhpcy5zb3VyY2VJZHM9e2ZpbGw6ZStcIi1zb3VyY2UtZmlsbFwiLGxpbmU6ZStcIi1zb3VyY2UtbGluZVwiLGNpcmNsZTplK1wiLXNvdXJjZS1jaXJjbGVcIixzeW1ib2w6ZStcIi1zb3VyY2Utc3ltYm9sXCJ9LHRoaXMubGF5ZXJJZHM9e2ZpbGw6ZStcIi1sYXllci1maWxsXCIsbGluZTplK1wiLWxheWVyLWxpbmVcIixjaXJjbGU6ZStcIi1sYXllci1jaXJjbGVcIixzeW1ib2w6ZStcIi1sYXllci1zeW1ib2xcIn0sdGhpcy5vcmRlcj1bXCJmaWxsXCIsXCJsaW5lXCIsXCJjaXJjbGVcIixcInN5bWJvbFwiXX12YXIgYT1pLnByb3RvdHlwZTthLmFkZFNvdXJjZT1mdW5jdGlvbih0LGUpe3RoaXMuc3VicGxvdC5tYXAuYWRkU291cmNlKHRoaXMuc291cmNlSWRzW3RdLHt0eXBlOlwiZ2VvanNvblwiLGRhdGE6ZS5nZW9qc29ufSl9LGEuc2V0U291cmNlRGF0YT1mdW5jdGlvbih0LGUpe3RoaXMuc3VicGxvdC5tYXAuZ2V0U291cmNlKHRoaXMuc291cmNlSWRzW3RdKS5zZXREYXRhKGUuZ2VvanNvbil9LGEuYWRkTGF5ZXI9ZnVuY3Rpb24odCxlKXt0aGlzLnN1YnBsb3QubWFwLmFkZExheWVyKHt0eXBlOnQsaWQ6dGhpcy5sYXllcklkc1t0XSxzb3VyY2U6dGhpcy5zb3VyY2VJZHNbdF0sbGF5b3V0OmUubGF5b3V0LHBhaW50OmUucGFpbnR9KX0sYS51cGRhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuc3VicGxvdCxyPW4odCksaT0wO2k8dGhpcy5vcmRlci5sZW5ndGg7aSsrKXt2YXIgYT10aGlzLm9yZGVyW2ldLG89clthXTtlLnNldE9wdGlvbnModGhpcy5sYXllcklkc1thXSxcInNldExheW91dFByb3BlcnR5XCIsby5sYXlvdXQpLFwidmlzaWJsZVwiPT09by5sYXlvdXQudmlzaWJpbGl0eSYmKHRoaXMuc2V0U291cmNlRGF0YShhLG8pLGUuc2V0T3B0aW9ucyh0aGlzLmxheWVySWRzW2FdLFwic2V0UGFpbnRQcm9wZXJ0eVwiLG8ucGFpbnQpKX10WzBdLnRyYWNlLl9nbFRyYWNlPXRoaXN9LGEuZGlzcG9zZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN1YnBsb3QubWFwLGU9MDtlPHRoaXMub3JkZXIubGVuZ3RoO2UrKyl7dmFyIHI9dGhpcy5vcmRlcltlXTt0LnJlbW92ZUxheWVyKHRoaXMubGF5ZXJJZHNbcl0pLHQucmVtb3ZlU291cmNlKHRoaXMuc291cmNlSWRzW3JdKX19LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgaSh0LGVbMF0udHJhY2UudWlkKSxhPW4oZSksbz0wO288ci5vcmRlci5sZW5ndGg7bysrKXt2YXIgcz1yLm9yZGVyW29dLGw9YVtzXTtyLmFkZFNvdXJjZShzLGwpLHIuYWRkTGF5ZXIocyxsKX1yZXR1cm4gZVswXS50cmFjZS5fZ2xUcmFjZT1yLHJ9fSx7XCIuL2NvbnZlcnRcIjoxMTA3fV0sMTExMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiKSxhPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixvPXQuY2Qscz10LnhheGlzLGw9dC55YXhpcyxjPVtdLHU9b1swXS50cmFjZTtpZighaS5oYXNNYXJrZXJzKHUpKXJldHVybltdO2lmKCExPT09ZSlmb3Iocj0wO3I8by5sZW5ndGg7cisrKW9bcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxvLmxlbmd0aDtyKyspe3ZhciBoPW9bcl0sZj1oLmxvbmxhdDtpZihmWzBdIT09YSl7dmFyIHA9W24ubW9kSGFsZihmWzBdLDM2MCksZlsxXV0sZD1bcy5jMnAocCksbC5jMnAocCldO2UuY29udGFpbnMoZCxudWxsLHIsdCk/KGMucHVzaCh7cG9pbnROdW1iZXI6cixsb246ZlswXSxsYXQ6ZlsxXX0pLGguc2VsZWN0ZWQ9MSk6aC5zZWxlY3RlZD0wfX1yZXR1cm4gY319LHtcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCI6MTA3Nn1dLDExMTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LGE9dChcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCIpLHM9YS5saW5lO2UuZXhwb3J0cz17bW9kZTphLm1vZGUscjp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0sdGhldGE6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LHIwOnt2YWxUeXBlOlwiYW55XCIsZGZsdDowLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSxkcjp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MSxlZGl0VHlwZTpcImNhbGNcIn0sdGhldGEwOnt2YWxUeXBlOlwiYW55XCIsZGZsdDowLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSxkdGhldGE6e3ZhbFR5cGU6XCJudW1iZXJcIixlZGl0VHlwZTpcImNhbGNcIn0sdGhldGF1bml0Ont2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJyYWRpYW5zXCIsXCJkZWdyZWVzXCIsXCJncmFkaWFuc1wiXSxkZmx0OlwiZGVncmVlc1wiLGVkaXRUeXBlOlwiY2FsYytjbGVhckF4aXNUeXBlc1wifSx0ZXh0OmEudGV4dCxob3ZlcnRleHQ6YS5ob3ZlcnRleHQsbGluZTp7Y29sb3I6cy5jb2xvcix3aWR0aDpzLndpZHRoLGRhc2g6cy5kYXNoLHNoYXBlOmkoe30scy5zaGFwZSx7dmFsdWVzOltcImxpbmVhclwiLFwic3BsaW5lXCJdfSksc21vb3RoaW5nOnMuc21vb3RoaW5nLGVkaXRUeXBlOlwiY2FsY1wifSxjb25uZWN0Z2FwczphLmNvbm5lY3RnYXBzLG1hcmtlcjphLm1hcmtlcixjbGlwb25heGlzOmkoe30sYS5jbGlwb25heGlzLHtkZmx0OiExfSksdGV4dHBvc2l0aW9uOmEudGV4dHBvc2l0aW9uLHRleHRmb250OmEudGV4dGZvbnQsZmlsbDppKHt9LGEuZmlsbCx7dmFsdWVzOltcIm5vbmVcIixcInRvc2VsZlwiLFwidG9uZXh0XCJdLGRmbHQ6XCJub25lXCJ9KSxmaWxsY29sb3I6YS5maWxsY29sb3IsaG92ZXJpbmZvOmkoe30sby5ob3ZlcmluZm8se2ZsYWdzOltcInJcIixcInRoZXRhXCIsXCJ0ZXh0XCIsXCJuYW1lXCJdfSksaG92ZXJvbjphLmhvdmVyb24saG92ZXJ0ZW1wbGF0ZTpuKCksc2VsZWN0ZWQ6YS5zZWxlY3RlZCx1bnNlbGVjdGVkOmEudW5zZWxlY3RlZH19LHtcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDYsXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIjoxMDUyfV0sMTExNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxpPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTSxhPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxvPXQoXCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsY1wiKSxzPXQoXCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YVwiKSxsPXQoXCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uXCIpLGM9dChcIi4uL3NjYXR0ZXIvY2FsY1wiKS5jYWxjTWFya2VyU2l6ZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5fZnVsbExheW91dCx1PWUuc3VicGxvdCxoPXJbdV0ucmFkaWFsYXhpcyxmPXJbdV0uYW5ndWxhcmF4aXMscD1oLm1ha2VDYWxjZGF0YShlLFwiclwiKSxkPWYubWFrZUNhbGNkYXRhKGUsXCJ0aGV0YVwiKSxnPWUuX2xlbmd0aCx2PW5ldyBBcnJheShnKSxtPTA7bTxnO20rKyl7dmFyIHk9cFttXSx4PWRbbV0sYj12W21dPXt9O24oeSkmJm4oeCk/KGIucj15LGIudGhldGE9eCk6Yi5yPWl9dmFyIF89YyhlLGcpO3JldHVybiBlLl9leHRyZW1lcy54PWEuZmluZEV4dHJlbWVzKGgscCx7cHBhZDpffSksbyh0LGUpLHModixlKSxsKHYsZSksdn19LHtcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhXCI6MTA1MSxcIi4uL3NjYXR0ZXIvY2FsY1wiOjEwNTMsXCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uXCI6MTA1NCxcIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjXCI6MTA1NSxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sMTExNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiKSxhPXQoXCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0c1wiKSxvPXQoXCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHNcIikscz10KFwiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzXCIpLGw9dChcIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0c1wiKSxjPXQoXCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0c1wiKSx1PXQoXCIuLi9zY2F0dGVyL2NvbnN0YW50c1wiKS5QVFNfTElORVNPTkxZLGg9dChcIi4vYXR0cmlidXRlc1wiKTtmdW5jdGlvbiBmKHQsZSxyLG4pe3ZhciBpLGE9bihcInJcIiksbz1uKFwidGhldGFcIik7aWYoYSlvP2k9TWF0aC5taW4oYS5sZW5ndGgsby5sZW5ndGgpOihpPWEubGVuZ3RoLG4oXCJ0aGV0YTBcIiksbihcImR0aGV0YVwiKSk7ZWxzZXtpZighbylyZXR1cm4gMDtpPWUudGhldGEubGVuZ3RoLG4oXCJyMFwiKSxuKFwiZHJcIil9cmV0dXJuIGUuX2xlbmd0aD1pLGl9ZS5leHBvcnRzPXtoYW5kbGVSVGhldGFEZWZhdWx0czpmLHN1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLHApe2Z1bmN0aW9uIGQocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGgscixpKX12YXIgZz1mKDAsZSwwLGQpO2lmKGcpe2QoXCJ0aGV0YXVuaXRcIiksZChcIm1vZGVcIixnPHU/XCJsaW5lcyttYXJrZXJzXCI6XCJsaW5lc1wiKSxkKFwidGV4dFwiKSxkKFwiaG92ZXJ0ZXh0XCIpLFwiZmlsbHNcIiE9PWUuaG92ZXJvbiYmZChcImhvdmVydGVtcGxhdGVcIiksaS5oYXNMaW5lcyhlKSYmKG8odCxlLHIscCxkKSxzKHQsZSxkKSxkKFwiY29ubmVjdGdhcHNcIikpLGkuaGFzTWFya2VycyhlKSYmYSh0LGUscixwLGQse2dyYWRpZW50OiEwfSksaS5oYXNUZXh0KGUpJiZsKHQsZSxwLGQpO3ZhciB2PVtdOyhpLmhhc01hcmtlcnMoZSl8fGkuaGFzVGV4dChlKSkmJihkKFwiY2xpcG9uYXhpc1wiKSxkKFwibWFya2VyLm1heGRpc3BsYXllZFwiKSx2LnB1c2goXCJwb2ludHNcIikpLGQoXCJmaWxsXCIpLFwibm9uZVwiIT09ZS5maWxsJiYoYyh0LGUscixkKSxpLmhhc0xpbmVzKGUpfHxzKHQsZSxkKSksXCJ0b25leHRcIiE9PWUuZmlsbCYmXCJ0b3NlbGZcIiE9PWUuZmlsbHx8di5wdXNoKFwiZmlsbHNcIiksZChcImhvdmVyb25cIix2LmpvaW4oXCIrXCIpfHxcInBvaW50c1wiKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxkKX1lbHNlIGUudmlzaWJsZT0hMX19fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9zY2F0dGVyL2NvbnN0YW50c1wiOjEwNTYsXCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0c1wiOjEwNjEsXCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHNcIjoxMDY1LFwiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzXCI6MTA2NyxcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCI6MTA3MSxcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzXCI6MTA3NyxcIi4vYXR0cmlidXRlc1wiOjExMTR9XSwxMTE3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3NjYXR0ZXIvaG92ZXJcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksYT10KFwiLi4vLi4vbGliXCIpO2Z1bmN0aW9uIG8odCxlLHIsbil7dmFyIG89ci5yYWRpYWxBeGlzLHM9ci5hbmd1bGFyQXhpcztvLl9ob3ZlcnRpdGxlPVwiclwiLHMuX2hvdmVydGl0bGU9XCJcXHUwM2I4XCI7dmFyIGw9dC5oaXx8ZS5ob3ZlcmluZm8sYz1bXTtmdW5jdGlvbiB1KHQsZSl7Yy5wdXNoKHQuX2hvdmVydGl0bGUrXCI6IFwiK2kudGlja1RleHQodCxlLFwiaG92ZXJcIikudGV4dCl9aWYoIWUuaG92ZXJ0ZW1wbGF0ZSl7dmFyIGg9bC5zcGxpdChcIitcIik7aWYoLTEhPT1oLmluZGV4T2YoXCJhbGxcIikmJihoPVtcInJcIixcInRoZXRhXCIsXCJ0ZXh0XCJdKSwtMSE9PWguaW5kZXhPZihcInJcIikmJnUobyxvLmMybCh0LnIpKSwtMSE9PWguaW5kZXhPZihcInRoZXRhXCIpKXt2YXIgZj10LnRoZXRhO3UocyxcImRlZ3JlZXNcIj09PXMudGhldGF1bml0P2EucmFkMmRlZyhmKTpmKX0tMSE9PWguaW5kZXhPZihcInRleHRcIikmJm4udGV4dCYmKGMucHVzaChuLnRleHQpLGRlbGV0ZSBuLnRleHQpLG4uZXh0cmFUZXh0PWMuam9pbihcIjxicj5cIil9fWUuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9bih0LGUscixpKTtpZihhJiYhMSE9PWFbMF0uaW5kZXgpe3ZhciBzPWFbMF07aWYodm9pZCAwPT09cy5pbmRleClyZXR1cm4gYTt2YXIgbD10LnN1YnBsb3QsYz1zLmNkW3MuaW5kZXhdLHU9cy50cmFjZTtpZihsLmlzUHRJbnNpZGUoYykpcmV0dXJuIHMueExhYmVsVmFsPXZvaWQgMCxzLnlMYWJlbFZhbD12b2lkIDAsbyhjLHUsbCxzKSxzLmhvdmVydGVtcGxhdGU9dS5ob3ZlcnRlbXBsYXRlLGF9fSxtYWtlSG92ZXJQb2ludFRleHQ6b319LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vc2NhdHRlci9ob3ZlclwiOjEwNjN9XSwxMTE4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwidHJhY2VcIixuYW1lOlwic2NhdHRlcnBvbGFyXCIsYmFzZVBsb3RNb2R1bGU6dChcIi4uLy4uL3Bsb3RzL3BvbGFyXCIpLGNhdGVnb3JpZXM6W1wicG9sYXJcIixcInN5bWJvbHNcIixcInNob3dMZWdlbmRcIixcInNjYXR0ZXItbGlrZVwiXSxhdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksc3VwcGx5RGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIikuc3VwcGx5RGVmYXVsdHMsY29sb3JiYXI6dChcIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyXCIpLGNhbGM6dChcIi4vY2FsY1wiKSxwbG90OnQoXCIuL3Bsb3RcIiksc3R5bGU6dChcIi4uL3NjYXR0ZXIvc3R5bGVcIikuc3R5bGUsaG92ZXJQb2ludHM6dChcIi4vaG92ZXJcIikuaG92ZXJQb2ludHMsc2VsZWN0UG9pbnRzOnQoXCIuLi9zY2F0dGVyL3NlbGVjdFwiKSxtZXRhOnt9fX0se1wiLi4vLi4vcGxvdHMvcG9sYXJcIjo4MTMsXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiOjEwNzAsXCIuLi9zY2F0dGVyL3NlbGVjdFwiOjEwNzMsXCIuLi9zY2F0dGVyL3N0eWxlXCI6MTA3NSxcIi4vYXR0cmlidXRlc1wiOjExMTQsXCIuL2NhbGNcIjoxMTE1LFwiLi9kZWZhdWx0c1wiOjExMTYsXCIuL2hvdmVyXCI6MTExNyxcIi4vcGxvdFwiOjExMTl9XSwxMTE5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3NjYXR0ZXIvcGxvdFwiKSxpPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgYT1lLmxheWVycy5mcm9udHBsb3Quc2VsZWN0KFwiZy5zY2F0dGVybGF5ZXJcIiksbz17eGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLHBsb3Q6ZS5mcmFtZXdvcmssbGF5ZXJDbGlwSWQ6ZS5faGFzQ2xpcE9uQXhpc0ZhbHNlP2UuY2xpcElkcy5mb3JUcmFjZXM6bnVsbH0scz1lLnJhZGlhbEF4aXMsbD1lLmFuZ3VsYXJBeGlzLGM9MDtjPHIubGVuZ3RoO2MrKylmb3IodmFyIHU9cltjXSxoPTA7aDx1Lmxlbmd0aDtoKyspe3ZhciBmPXVbaF0scD1mLnI7aWYocD09PWkpZi54PWYueT1pO2Vsc2V7dmFyIGQ9cy5jMmcocCksZz1sLmMyZyhmLnRoZXRhKTtmLng9ZCpNYXRoLmNvcyhnKSxmLnk9ZCpNYXRoLnNpbihnKX19bih0LG8scixhKX19LHtcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi9zY2F0dGVyL3Bsb3RcIjoxMDcyfV0sMTEyMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9zY2F0dGVycG9sYXIvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi9zY2F0dGVyZ2wvYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9e21vZGU6bi5tb2RlLHI6bi5yLHRoZXRhOm4udGhldGEscjA6bi5yMCxkcjpuLmRyLHRoZXRhMDpuLnRoZXRhMCxkdGhldGE6bi5kdGhldGEsdGhldGF1bml0Om4udGhldGF1bml0LHRleHQ6bi50ZXh0LGhvdmVydGV4dDpuLmhvdmVydGV4dCxob3ZlcnRlbXBsYXRlOm4uaG92ZXJ0ZW1wbGF0ZSxsaW5lOmkubGluZSxjb25uZWN0Z2FwczppLmNvbm5lY3RnYXBzLG1hcmtlcjppLm1hcmtlcixmaWxsOmkuZmlsbCxmaWxsY29sb3I6aS5maWxsY29sb3IsdGV4dHBvc2l0aW9uOmkudGV4dHBvc2l0aW9uLHRleHRmb250OmkudGV4dGZvbnQsaG92ZXJpbmZvOm4uaG92ZXJpbmZvLHNlbGVjdGVkOm4uc2VsZWN0ZWQsdW5zZWxlY3RlZDpuLnVuc2VsZWN0ZWR9fSx7XCIuLi9zY2F0dGVyZ2wvYXR0cmlidXRlc1wiOjExMDEsXCIuLi9zY2F0dGVycG9sYXIvYXR0cmlidXRlc1wiOjExMTR9XSwxMTIxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCIpLGE9dChcIi4uL3NjYXR0ZXJwb2xhci9kZWZhdWx0c1wiKS5oYW5kbGVSVGhldGFEZWZhdWx0cyxvPXQoXCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0c1wiKSxzPXQoXCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHNcIiksbD10KFwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzXCIpLGM9dChcIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzXCIpLHU9dChcIi4uL3NjYXR0ZXIvY29uc3RhbnRzXCIpLlBUU19MSU5FU09OTFksaD10KFwiLi9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixmKXtmdW5jdGlvbiBwKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxoLHIsaSl9dmFyIGQ9YSh0LGUsZixwKTtkPyhwKFwidGhldGF1bml0XCIpLHAoXCJtb2RlXCIsZDx1P1wibGluZXMrbWFya2Vyc1wiOlwibGluZXNcIikscChcInRleHRcIikscChcImhvdmVydGV4dFwiKSxcImZpbGxzXCIhPT1lLmhvdmVyb24mJnAoXCJob3ZlcnRlbXBsYXRlXCIpLGkuaGFzTGluZXMoZSkmJihzKHQsZSxyLGYscCkscChcImNvbm5lY3RnYXBzXCIpKSxpLmhhc01hcmtlcnMoZSkmJm8odCxlLHIsZixwKSxpLmhhc1RleHQoZSkmJmwodCxlLGYscCkscChcImZpbGxcIiksXCJub25lXCIhPT1lLmZpbGwmJmModCxlLHIscCksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUscCkpOmUudmlzaWJsZT0hMX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL3NjYXR0ZXIvY29uc3RhbnRzXCI6MTA1NixcIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzXCI6MTA2MSxcIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0c1wiOjEwNjUsXCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0c1wiOjEwNzEsXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCI6MTA3NixcIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0c1wiOjEwNzcsXCIuLi9zY2F0dGVycG9sYXIvZGVmYXVsdHNcIjoxMTE2LFwiLi9hdHRyaWJ1dGVzXCI6MTEyMH1dLDExMjI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicG9pbnQtY2x1c3RlclwiKSxpPXQoXCJmYXN0LWlzbnVtZXJpY1wiKSxhPXQoXCIuLi9zY2F0dGVyZ2xcIiksbz10KFwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGNcIikscz10KFwiLi4vc2NhdHRlci9jYWxjXCIpLmNhbGNNYXJrZXJTaXplLGw9dChcIi4uL3NjYXR0ZXJnbC9jb252ZXJ0XCIpLGM9dChcIi4uLy4uL2xpYlwiKSx1PXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxoPXQoXCIuLi9zY2F0dGVycG9sYXIvaG92ZXJcIikubWFrZUhvdmVyUG9pbnRUZXh0LGY9dChcIi4uL3NjYXR0ZXJnbC9jb25zdGFudHNcIikuVE9PX01BTllfUE9JTlRTO2UuZXhwb3J0cz17bW9kdWxlVHlwZTpcInRyYWNlXCIsbmFtZTpcInNjYXR0ZXJwb2xhcmdsXCIsYmFzZVBsb3RNb2R1bGU6dChcIi4uLy4uL3Bsb3RzL3BvbGFyXCIpLGNhdGVnb3JpZXM6W1wiZ2xcIixcInJlZ2xcIixcInBvbGFyXCIsXCJzeW1ib2xzXCIsXCJzaG93TGVnZW5kXCIsXCJzY2F0dGVyLWxpa2VcIl0sYXR0cmlidXRlczp0KFwiLi9hdHRyaWJ1dGVzXCIpLHN1cHBseURlZmF1bHRzOnQoXCIuL2RlZmF1bHRzXCIpLGNvbG9yYmFyOnQoXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiKSxjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxuPWUuc3VicGxvdCxpPXJbbl0ucmFkaWFsYXhpcyxhPXJbbl0uYW5ndWxhcmF4aXMsYz1pLm1ha2VDYWxjZGF0YShlLFwiclwiKSxoPWEubWFrZUNhbGNkYXRhKGUsXCJ0aGV0YVwiKSxwPWUuX2xlbmd0aCxkPXt9O3A8Yy5sZW5ndGgmJihjPWMuc2xpY2UoMCxwKSkscDxoLmxlbmd0aCYmKGg9aC5zbGljZSgwLHApKSxkLnI9YyxkLnRoZXRhPWgsbyh0LGUpO3ZhciBnLHY9ZC5vcHRzPWwuc3R5bGUodCxlKTtyZXR1cm4gcDxmP2c9cyhlLHApOnYubWFya2VyJiYoZz0yKih2Lm1hcmtlci5zaXplQXZnfHxNYXRoLm1heCh2Lm1hcmtlci5zaXplLDMpKSksZS5fZXh0cmVtZXMueD11LmZpbmRFeHRyZW1lcyhpLGMse3BwYWQ6Z30pLFt7eDohMSx5OiExLHQ6ZCx0cmFjZTplfV19LHBsb3Q6ZnVuY3Rpb24odCxlLHIpe2lmKHIubGVuZ3RoKXt2YXIgbz1lLnJhZGlhbEF4aXMscz1lLmFuZ3VsYXJBeGlzLHU9YS5zY2VuZVVwZGF0ZSh0LGUpO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24ocil7aWYociYmclswXSYmclswXS50cmFjZSl7dmFyIGEsaD1yWzBdLHA9aC50cmFjZSxkPWgudCxnPXAuX2xlbmd0aCx2PWQucixtPWQudGhldGEseT1kLm9wdHMseD12LnNsaWNlKCksYj1tLnNsaWNlKCk7Zm9yKGE9MDthPHYubGVuZ3RoO2ErKyllLmlzUHRJbnNpZGUoe3I6dlthXSx0aGV0YTptW2FdfSl8fCh4W2FdPU5hTixiW2FdPU5hTik7dmFyIF89bmV3IEFycmF5KDIqZyksdz1BcnJheShnKSxrPUFycmF5KGcpO2ZvcihhPTA7YTxnO2ErKyl7dmFyIEEsVCxNPXhbYV07aWYoaShNKSl7dmFyIFM9by5jMmcoTSksRT1zLmMyZyhiW2FdLHAudGhldGF1bml0KTtBPVMqTWF0aC5jb3MoRSksVD1TKk1hdGguc2luKEUpfWVsc2UgQT1UPU5hTjt3W2FdPV9bMiphXT1BLGtbYV09X1syKmErMV09VH1kLnRyZWU9bihfKSx5Lm1hcmtlciYmZz49ZiYmKHkubWFya2VyLmNsdXN0ZXI9ZC50cmVlKSx5Lm1hcmtlciYmKHkubWFya2VyU2VsLnBvc2l0aW9ucz15Lm1hcmtlclVuc2VsLnBvc2l0aW9ucz15Lm1hcmtlci5wb3NpdGlvbnM9XykseS5saW5lJiZfLmxlbmd0aD4xJiZjLmV4dGVuZEZsYXQoeS5saW5lLGwubGluZVBvc2l0aW9ucyh0LHAsXykpLHkudGV4dCYmKGMuZXh0ZW5kRmxhdCh5LnRleHQse3Bvc2l0aW9uczpffSxsLnRleHRQb3NpdGlvbih0LHAseS50ZXh0LHkubWFya2VyKSksYy5leHRlbmRGbGF0KHkudGV4dFNlbCx7cG9zaXRpb25zOl99LGwudGV4dFBvc2l0aW9uKHQscCx5LnRleHQseS5tYXJrZXJTZWwpKSxjLmV4dGVuZEZsYXQoeS50ZXh0VW5zZWwse3Bvc2l0aW9uczpffSxsLnRleHRQb3NpdGlvbih0LHAseS50ZXh0LHkubWFya2VyVW5zZWwpKSkseS5maWxsJiYhdS5maWxsMmQmJih1LmZpbGwyZD0hMCkseS5tYXJrZXImJiF1LnNjYXR0ZXIyZCYmKHUuc2NhdHRlcjJkPSEwKSx5LmxpbmUmJiF1LmxpbmUyZCYmKHUubGluZTJkPSEwKSx5LnRleHQmJiF1LmdsVGV4dCYmKHUuZ2xUZXh0PSEwKSx1LmxpbmVPcHRpb25zLnB1c2goeS5saW5lKSx1LmZpbGxPcHRpb25zLnB1c2goeS5maWxsKSx1Lm1hcmtlck9wdGlvbnMucHVzaCh5Lm1hcmtlciksdS5tYXJrZXJTZWxlY3RlZE9wdGlvbnMucHVzaCh5Lm1hcmtlclNlbCksdS5tYXJrZXJVbnNlbGVjdGVkT3B0aW9ucy5wdXNoKHkubWFya2VyVW5zZWwpLHUudGV4dE9wdGlvbnMucHVzaCh5LnRleHQpLHUudGV4dFNlbGVjdGVkT3B0aW9ucy5wdXNoKHkudGV4dFNlbCksdS50ZXh0VW5zZWxlY3RlZE9wdGlvbnMucHVzaCh5LnRleHRVbnNlbCksZC54PXcsZC55PWssZC5yYXd4PXcsZC5yYXd5PWssZC5yPXYsZC50aGV0YT1tLGQucG9zaXRpb25zPV8sZC5fc2NlbmU9dSxkLmluZGV4PXUuY291bnQsdS5jb3VudCsrfX0pLGEucGxvdCh0LGUscil9fSxob3ZlclBvaW50czpmdW5jdGlvbih0LGUscixuKXt2YXIgaT10LmNkWzBdLnQsbz1pLnIscz1pLnRoZXRhLGw9YS5ob3ZlclBvaW50cyh0LGUscixuKTtpZihsJiYhMSE9PWxbMF0uaW5kZXgpe3ZhciBjPWxbMF07aWYodm9pZCAwPT09Yy5pbmRleClyZXR1cm4gbDt2YXIgdT10LnN1YnBsb3QsZj1jLmNkW2MuaW5kZXhdLHA9Yy50cmFjZTtpZihmLnI9b1tjLmluZGV4XSxmLnRoZXRhPXNbYy5pbmRleF0sdS5pc1B0SW5zaWRlKGYpKXJldHVybiBjLnhMYWJlbFZhbD12b2lkIDAsYy55TGFiZWxWYWw9dm9pZCAwLGgoZixwLHUsYyksbH19LHNlbGVjdFBvaW50czphLnNlbGVjdFBvaW50cyxtZXRhOnt9fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi8uLi9wbG90cy9wb2xhclwiOjgxMyxcIi4uL3NjYXR0ZXIvY2FsY1wiOjEwNTMsXCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsY1wiOjEwNTUsXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiOjEwNzAsXCIuLi9zY2F0dGVyZ2xcIjoxMTA1LFwiLi4vc2NhdHRlcmdsL2NvbnN0YW50c1wiOjExMDIsXCIuLi9zY2F0dGVyZ2wvY29udmVydFwiOjExMDMsXCIuLi9zY2F0dGVycG9sYXIvaG92ZXJcIjoxMTE3LFwiLi9hdHRyaWJ1dGVzXCI6MTEyMCxcIi4vZGVmYXVsdHNcIjoxMTIxLFwiZmFzdC1pc251bWVyaWNcIjoyMjIsXCJwb2ludC1jbHVzdGVyXCI6NDYyfV0sMTEyMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiKSxpPXQoXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIiksbD10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXNcIikuZGFzaCxjPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQsdT1pLm1hcmtlcixoPWkubGluZSxmPXUubGluZTtlLmV4cG9ydHM9e2E6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGI6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHN1bTp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6MCxtaW46MCxlZGl0VHlwZTpcImNhbGNcIn0sbW9kZTpjKHt9LGkubW9kZSx7ZGZsdDpcIm1hcmtlcnNcIn0pLHRleHQ6Yyh7fSxpLnRleHQse30pLGhvdmVydGV4dDpjKHt9LGkuaG92ZXJ0ZXh0LHt9KSxsaW5lOntjb2xvcjpoLmNvbG9yLHdpZHRoOmgud2lkdGgsZGFzaDpsLHNoYXBlOmMoe30saC5zaGFwZSx7dmFsdWVzOltcImxpbmVhclwiLFwic3BsaW5lXCJdfSksc21vb3RoaW5nOmguc21vb3RoaW5nLGVkaXRUeXBlOlwiY2FsY1wifSxjb25uZWN0Z2FwczppLmNvbm5lY3RnYXBzLGNsaXBvbmF4aXM6aS5jbGlwb25heGlzLGZpbGw6Yyh7fSxpLmZpbGwse3ZhbHVlczpbXCJub25lXCIsXCJ0b3NlbGZcIixcInRvbmV4dFwiXSxkZmx0Olwibm9uZVwifSksZmlsbGNvbG9yOmkuZmlsbGNvbG9yLG1hcmtlcjpjKHtzeW1ib2w6dS5zeW1ib2wsb3BhY2l0eTp1Lm9wYWNpdHksbWF4ZGlzcGxheWVkOnUubWF4ZGlzcGxheWVkLHNpemU6dS5zaXplLHNpemVyZWY6dS5zaXplcmVmLHNpemVtaW46dS5zaXplbWluLHNpemVtb2RlOnUuc2l6ZW1vZGUsbGluZTpjKHt3aWR0aDpmLndpZHRoLGVkaXRUeXBlOlwiY2FsY1wifSxvKFwibWFya2VyLmxpbmVcIikpLGdyYWRpZW50OnUuZ3JhZGllbnQsZWRpdFR5cGU6XCJjYWxjXCJ9LG8oXCJtYXJrZXJcIikse2NvbG9yYmFyOnN9KSx0ZXh0Zm9udDppLnRleHRmb250LHRleHRwb3NpdGlvbjppLnRleHRwb3NpdGlvbixzZWxlY3RlZDppLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6aS51bnNlbGVjdGVkLGhvdmVyaW5mbzpjKHt9LGEuaG92ZXJpbmZvLHtmbGFnczpbXCJhXCIsXCJiXCIsXCJjXCIsXCJ0ZXh0XCIsXCJuYW1lXCJdfSksaG92ZXJvbjppLmhvdmVyb24saG92ZXJ0ZW1wbGF0ZTpuKCl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXNcIjo1NzksXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzXCI6NTk4LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiOjc0NixcIi4uL3NjYXR0ZXIvYXR0cmlidXRlc1wiOjEwNTJ9XSwxMTI0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImZhc3QtaXNudW1lcmljXCIpLGk9dChcIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjXCIpLGE9dChcIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhXCIpLG89dChcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIikscz10KFwiLi4vc2NhdHRlci9jYWxjXCIpLmNhbGNNYXJrZXJTaXplLGw9W1wiYVwiLFwiYlwiLFwiY1wiXSxjPXthOltcImJcIixcImNcIl0sYjpbXCJhXCIsXCJjXCJdLGM6W1wiYVwiLFwiYlwiXX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsdSxoLGYscCxkLGc9dC5fZnVsbExheW91dFtlLnN1YnBsb3RdLnN1bSx2PWUuc3VtfHxnLG09e2E6ZS5hLGI6ZS5iLGM6ZS5jfTtmb3Iocj0wO3I8bC5sZW5ndGg7cisrKWlmKCFtW2g9bFtyXV0pe2ZvcihwPW1bY1toXVswXV0sZD1tW2NbaF1bMV1dLGY9bmV3IEFycmF5KHAubGVuZ3RoKSx1PTA7dTxwLmxlbmd0aDt1KyspZlt1XT12LXBbdV0tZFt1XTttW2hdPWZ9dmFyIHkseCxiLF8sdyxrLEE9ZS5fbGVuZ3RoLFQ9bmV3IEFycmF5KEEpO2ZvcihyPTA7cjxBO3IrKyl5PW0uYVtyXSx4PW0uYltyXSxiPW0uY1tyXSxuKHkpJiZuKHgpJiZuKGIpPygxIT09KF89Zy8oKHk9K3kpKyh4PSt4KSsoYj0rYikpKSYmKHkqPV8seCo9XyxiKj1fKSxrPXksdz1iLXgsVFtyXT17eDp3LHk6ayxhOnksYjp4LGM6Yn0pOlRbcl09e3g6ITEseTohMX07cmV0dXJuIHMoZSxBKSxpKHQsZSksYShULGUpLG8oVCxlKSxUfX0se1wiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGFcIjoxMDUxLFwiLi4vc2NhdHRlci9jYWxjXCI6MTA1MyxcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIjoxMDU0LFwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGNcIjoxMDU1LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSwxMTI1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi9zY2F0dGVyL2NvbnN0YW50c1wiKSxhPXQoXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCIpLG89dChcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCIpLHM9dChcIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0c1wiKSxsPXQoXCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHNcIiksYz10KFwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzXCIpLHU9dChcIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzXCIpLGg9dChcIi4vYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsZil7ZnVuY3Rpb24gcChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsaCxyLGkpfXZhciBkLGc9cChcImFcIiksdj1wKFwiYlwiKSxtPXAoXCJjXCIpO2lmKGc/KGQ9Zy5sZW5ndGgsdj8oZD1NYXRoLm1pbihkLHYubGVuZ3RoKSxtJiYoZD1NYXRoLm1pbihkLG0ubGVuZ3RoKSkpOmQ9bT9NYXRoLm1pbihkLG0ubGVuZ3RoKTowKTp2JiZtJiYoZD1NYXRoLm1pbih2Lmxlbmd0aCxtLmxlbmd0aCkpLGQpe2UuX2xlbmd0aD1kLHAoXCJzdW1cIikscChcInRleHRcIikscChcImhvdmVydGV4dFwiKSxcImZpbGxzXCIhPT1lLmhvdmVyb24mJnAoXCJob3ZlcnRlbXBsYXRlXCIpLHAoXCJtb2RlXCIsZDxpLlBUU19MSU5FU09OTFk/XCJsaW5lcyttYXJrZXJzXCI6XCJsaW5lc1wiKSxhLmhhc0xpbmVzKGUpJiYocyh0LGUscixmLHApLGwodCxlLHApLHAoXCJjb25uZWN0Z2Fwc1wiKSksYS5oYXNNYXJrZXJzKGUpJiZvKHQsZSxyLGYscCx7Z3JhZGllbnQ6ITB9KSxhLmhhc1RleHQoZSkmJmModCxlLGYscCk7dmFyIHk9W107KGEuaGFzTWFya2VycyhlKXx8YS5oYXNUZXh0KGUpKSYmKHAoXCJjbGlwb25heGlzXCIpLHAoXCJtYXJrZXIubWF4ZGlzcGxheWVkXCIpLHkucHVzaChcInBvaW50c1wiKSkscChcImZpbGxcIiksXCJub25lXCIhPT1lLmZpbGwmJih1KHQsZSxyLHApLGEuaGFzTGluZXMoZSl8fGwodCxlLHApKSxcInRvbmV4dFwiIT09ZS5maWxsJiZcInRvc2VsZlwiIT09ZS5maWxsfHx5LnB1c2goXCJmaWxsc1wiKSxwKFwiaG92ZXJvblwiLHkuam9pbihcIitcIil8fFwicG9pbnRzXCIpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHApfWVsc2UgZS52aXNpYmxlPSExfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vc2NhdHRlci9jb25zdGFudHNcIjoxMDU2LFwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHNcIjoxMDYxLFwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzXCI6MTA2NSxcIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0c1wiOjEwNjcsXCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0c1wiOjEwNzEsXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCI6MTA3NixcIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0c1wiOjEwNzcsXCIuL2F0dHJpYnV0ZXNcIjoxMTIzfV0sMTEyNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe2lmKGUueGEmJih0LnhheGlzPWUueGEpLGUueWEmJih0LnlheGlzPWUueWEpLG5baV0pe3ZhciBhPW5baV07dC5hPWEuYSx0LmI9YS5iLHQuYz1hLmN9ZWxzZSB0LmE9ZS5hLHQuYj1lLmIsdC5jPWUuYztyZXR1cm4gdH19LHt9XSwxMTI3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uL3NjYXR0ZXIvaG92ZXJcIiksaT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4odCxlLHIsYSk7aWYobyYmITEhPT1vWzBdLmluZGV4KXt2YXIgcz1vWzBdO2lmKHZvaWQgMD09PXMuaW5kZXgpe3ZhciBsPTEtcy55MC90LnlhLl9sZW5ndGgsYz10LnhhLl9sZW5ndGgsdT1jKmwvMixoPWMtdTtyZXR1cm4gcy54MD1NYXRoLm1heChNYXRoLm1pbihzLngwLGgpLHUpLHMueDE9TWF0aC5tYXgoTWF0aC5taW4ocy54MSxoKSx1KSxvfXZhciBmPXMuY2Rbcy5pbmRleF07cy5hPWYuYSxzLmI9Zi5iLHMuYz1mLmMscy54TGFiZWxWYWw9dm9pZCAwLHMueUxhYmVsVmFsPXZvaWQgMDt2YXIgcD1zLnRyYWNlLGQ9cy5zdWJwbG90LGc9Zi5oaXx8cC5ob3ZlcmluZm8sdj1bXTtpZighcC5ob3ZlcnRlbXBsYXRlKXt2YXIgbT1nLnNwbGl0KFwiK1wiKTstMSE9PW0uaW5kZXhPZihcImFsbFwiKSYmKG09W1wiYVwiLFwiYlwiLFwiY1wiXSksLTEhPT1tLmluZGV4T2YoXCJhXCIpJiZ5KGQuYWF4aXMsZi5hKSwtMSE9PW0uaW5kZXhPZihcImJcIikmJnkoZC5iYXhpcyxmLmIpLC0xIT09bS5pbmRleE9mKFwiY1wiKSYmeShkLmNheGlzLGYuYyl9cmV0dXJuIHMuZXh0cmFUZXh0PXYuam9pbihcIjxicj5cIikscy5ob3ZlcnRlbXBsYXRlPXAuaG92ZXJ0ZW1wbGF0ZSxvfWZ1bmN0aW9uIHkodCxlKXt2LnB1c2godC5faG92ZXJ0aXRsZStcIjogXCIraS50aWNrVGV4dCh0LGUsXCJob3ZlclwiKS50ZXh0KX19fSx7XCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL3NjYXR0ZXIvaG92ZXJcIjoxMDYzfV0sMTEyODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIiksbi5jb2xvcmJhcj10KFwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXJcIiksbi5jYWxjPXQoXCIuL2NhbGNcIiksbi5wbG90PXQoXCIuL3Bsb3RcIiksbi5zdHlsZT10KFwiLi4vc2NhdHRlci9zdHlsZVwiKS5zdHlsZSxuLnN0eWxlT25TZWxlY3Q9dChcIi4uL3NjYXR0ZXIvc3R5bGVcIikuc3R5bGVPblNlbGVjdCxuLmhvdmVyUG9pbnRzPXQoXCIuL2hvdmVyXCIpLG4uc2VsZWN0UG9pbnRzPXQoXCIuLi9zY2F0dGVyL3NlbGVjdFwiKSxuLmV2ZW50RGF0YT10KFwiLi9ldmVudF9kYXRhXCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwic2NhdHRlcnRlcm5hcnlcIixuLmJhc2VQbG90TW9kdWxlPXQoXCIuLi8uLi9wbG90cy90ZXJuYXJ5XCIpLG4uY2F0ZWdvcmllcz1bXCJ0ZXJuYXJ5XCIsXCJzeW1ib2xzXCIsXCJzaG93TGVnZW5kXCIsXCJzY2F0dGVyLWxpa2VcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuLi8uLi9wbG90cy90ZXJuYXJ5XCI6ODI1LFwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXJcIjoxMDcwLFwiLi4vc2NhdHRlci9zZWxlY3RcIjoxMDczLFwiLi4vc2NhdHRlci9zdHlsZVwiOjEwNzUsXCIuL2F0dHJpYnV0ZXNcIjoxMTIzLFwiLi9jYWxjXCI6MTEyNCxcIi4vZGVmYXVsdHNcIjoxMTI1LFwiLi9ldmVudF9kYXRhXCI6MTEyNixcIi4vaG92ZXJcIjoxMTI3LFwiLi9wbG90XCI6MTEyOX1dLDExMjk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vc2NhdHRlci9wbG90XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9ZS5wbG90Q29udGFpbmVyO2kuc2VsZWN0KFwiLnNjYXR0ZXJsYXllclwiKS5zZWxlY3RBbGwoXCIqXCIpLnJlbW92ZSgpO3ZhciBhPXt4YXhpczplLnhheGlzLHlheGlzOmUueWF4aXMscGxvdDppLGxheWVyQ2xpcElkOmUuX2hhc0NsaXBPbkF4aXNGYWxzZT9lLmNsaXBJZFJlbGF0aXZlOm51bGx9LG89ZS5sYXllcnMuZnJvbnRwbG90LnNlbGVjdChcImcuc2NhdHRlcmxheWVyXCIpO24odCxhLHIsbyl9fSx7XCIuLi9zY2F0dGVyL3Bsb3RcIjoxMDcyfV0sMTEzMDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIiksbz10KFwiLi4vc2NhdHRlcmdsL2F0dHJpYnV0ZXNcIikscz10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50c1wiKS5pZFJlZ2V4LGw9dChcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIikudGVtcGxhdGVkQXJyYXksYz10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LHU9bi5tYXJrZXIsaD11LmxpbmUsZj1jKGkoXCJtYXJrZXIubGluZVwiLHtlZGl0VHlwZU92ZXJyaWRlOlwiY2FsY1wifSkse3dpZHRoOmMoe30saC53aWR0aCx7ZWRpdFR5cGU6XCJjYWxjXCJ9KSxlZGl0VHlwZTpcImNhbGNcIn0pLHA9YyhpKFwibWFya2VyXCIpLHtzeW1ib2w6dS5zeW1ib2wsc2l6ZTpjKHt9LHUuc2l6ZSx7ZWRpdFR5cGU6XCJtYXJrZXJTaXplXCJ9KSxzaXplcmVmOnUuc2l6ZXJlZixzaXplbWluOnUuc2l6ZW1pbixzaXplbW9kZTp1LnNpemVtb2RlLG9wYWNpdHk6dS5vcGFjaXR5LGNvbG9yYmFyOnUuY29sb3JiYXIsbGluZTpmLGVkaXRUeXBlOlwiY2FsY1wifSk7ZnVuY3Rpb24gZCh0KXtyZXR1cm57dmFsVHlwZTpcImluZm9fYXJyYXlcIixmcmVlTGVuZ3RoOiEwLGVkaXRUeXBlOlwiY2FsY1wiLGl0ZW1zOnt2YWxUeXBlOlwic3VicGxvdGlkXCIscmVnZXg6c1t0XSxlZGl0VHlwZTpcInBsb3RcIn19fXAuY29sb3IuZWRpdFR5cGU9cC5jbWluLmVkaXRUeXBlPXAuY21heC5lZGl0VHlwZT1cInN0eWxlXCIsZS5leHBvcnRzPXtkaW1lbnNpb25zOmwoXCJkaW1lbnNpb25cIix7dmlzaWJsZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSxsYWJlbDp7dmFsVHlwZTpcInN0cmluZ1wiLGVkaXRUeXBlOlwiY2FsY1wifSx2YWx1ZXM6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LGF4aXM6e3R5cGU6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImxpbmVhclwiLFwibG9nXCIsXCJkYXRlXCIsXCJjYXRlZ29yeVwiXSxlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0sbWF0Y2hlczp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGMrY2xlYXJBeGlzVHlwZXNcIn0sZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9KSx0ZXh0OmMoe30sby50ZXh0LHt9KSxob3ZlcnRleHQ6Yyh7fSxvLmhvdmVydGV4dCx7fSksaG92ZXJ0ZW1wbGF0ZTphKCksbWFya2VyOnAseGF4ZXM6ZChcInhcIikseWF4ZXM6ZChcInlcIiksZGlhZ29uYWw6e3Zpc2libGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LHNob3d1cHBlcmhhbGY6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcImNhbGNcIn0sc2hvd2xvd2VyaGFsZjp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSxzZWxlY3RlZDp7bWFya2VyOm8uc2VsZWN0ZWQubWFya2VyLGVkaXRUeXBlOlwiY2FsY1wifSx1bnNlbGVjdGVkOnttYXJrZXI6by51bnNlbGVjdGVkLm1hcmtlcixlZGl0VHlwZTpcImNhbGNcIn0sb3BhY2l0eTpvLm9wYWNpdHl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCI6NjE2LFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGVcIjo3MzksXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzXCI6NzU1LFwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzXCI6MTA1MixcIi4uL3NjYXR0ZXJnbC9hdHRyaWJ1dGVzXCI6MTEwMX1dLDExMzE6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicmVnbC1saW5lMmRcIiksaT10KFwiLi4vLi4vcmVnaXN0cnlcIiksYT10KFwiLi4vLi4vbGliL3ByZXBhcmVfcmVnbFwiKSxvPXQoXCIuLi8uLi9wbG90cy9nZXRfZGF0YVwiKS5nZXRNb2R1bGVDYWxjRGF0YSxzPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW5cIiksbD10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCIpLmdldEZyb21JZCxjPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKS5zaG91bGRTaG93WmVyb0xpbmUsdT1cInNwbG9tXCI7ZnVuY3Rpb24gaCh0LGUscil7Zm9yKHZhciBuPXIubWF0cml4T3B0aW9ucy5kYXRhLmxlbmd0aCxpPWUuX3Zpc2libGVEaW1zLGE9ci52aWV3T3B0cy5yYW5nZXM9bmV3IEFycmF5KG4pLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9aVtvXSxjPWFbb109bmV3IEFycmF5KDQpLHU9bCh0LGUuX2RpYWdbc11bMF0pO3UmJihjWzBdPXUucjJsKHUucmFuZ2VbMF0pLGNbMl09dS5yMmwodS5yYW5nZVsxXSkpO3ZhciBoPWwodCxlLl9kaWFnW3NdWzFdKTtoJiYoY1sxXT1oLnIybChoLnJhbmdlWzBdKSxjWzNdPWgucjJsKGgucmFuZ2VbMV0pKX1yLnNlbGVjdEJhdGNoP3IubWF0cml4LnVwZGF0ZSh7cmFuZ2VzOmF9LHtyYW5nZXM6YX0pOnIubWF0cml4LnVwZGF0ZSh7cmFuZ2VzOmF9KX1mdW5jdGlvbiBmKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9nbGNhbnZhcy5kYXRhKClbMF0ucmVnbCxpPWUuX3NwbG9tR3JpZDtpfHwoaT1lLl9zcGxvbUdyaWQ9bihyKSksaS51cGRhdGUoZnVuY3Rpb24odCl7dmFyIGUscj10Ll9mdWxsTGF5b3V0LG49ci5fc2l6ZSxpPVswLDAsci53aWR0aCxyLmhlaWdodF0sYT17fTtmdW5jdGlvbiBvKHQsZSxyLG4sbyxzKXt2YXIgbD1lW3QrXCJjb2xvclwiXSxjPWVbdCtcIndpZHRoXCJdLHU9U3RyaW5nKGwrYyk7dSBpbiBhP2FbdV0uZGF0YS5wdXNoKE5hTixOYU4scixuLG8scyk6YVt1XT17ZGF0YTpbcixuLG8sc10sam9pbjpcInJlY3RcIix0aGlja25lc3M6Yyxjb2xvcjpsLHZpZXdwb3J0OmkscmFuZ2U6aSxvdmVybGF5OiExfX1mb3IoZSBpbiByLl9zcGxvbVN1YnBsb3RzKXt2YXIgcyxsLHU9ci5fcGxvdHNbZV0saD11LnhheGlzLGY9dS55YXhpcyxwPWguX3ZhbHMsZD1mLl92YWxzLGc9bi5iK2YuZG9tYWluWzBdKm4uaCx2PS1mLl9tLG09LXYqZi5yMmwoZi5yYW5nZVswXSxmLmNhbGVuZGFyKTtpZihoLnNob3dncmlkKWZvcihlPTA7ZTxwLmxlbmd0aDtlKyspcz1oLl9vZmZzZXQraC5sMnAocFtlXS54KSxvKFwiZ3JpZFwiLGgscyxnLHMsZytmLl9sZW5ndGgpO2lmKGYuc2hvd2dyaWQpZm9yKGU9MDtlPGQubGVuZ3RoO2UrKylsPWcrbSt2KmRbZV0ueCxvKFwiZ3JpZFwiLGYsaC5fb2Zmc2V0LGwsaC5fb2Zmc2V0K2guX2xlbmd0aCxsKTtjKHQsaCxmKSYmKHM9aC5fb2Zmc2V0K2gubDJwKDApLG8oXCJ6ZXJvbGluZVwiLGgscyxnLHMsZytmLl9sZW5ndGgpKSxjKHQsZixoKSYmKGw9ZyttKzAsbyhcInplcm9saW5lXCIsZixoLl9vZmZzZXQsbCxoLl9vZmZzZXQraC5fbGVuZ3RoLGwpKX12YXIgeT1bXTtmb3IoZSBpbiBhKXkucHVzaChhW2VdKTtyZXR1cm4geX0odCkpfWUuZXhwb3J0cz17bmFtZTp1LGF0dHI6cy5hdHRyLGF0dHJSZWdleDpzLmF0dHJSZWdleCxsYXlvdXRBdHRyaWJ1dGVzOnMubGF5b3V0QXR0cmlidXRlcyxzdXBwbHlMYXlvdXREZWZhdWx0czpzLnN1cHBseUxheW91dERlZmF1bHRzLGRyYXdGcmFtZXdvcms6cy5kcmF3RnJhbWV3b3JrLHBsb3Q6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWkuZ2V0TW9kdWxlKHUpLG49byh0LmNhbGNkYXRhLHIpWzBdO2EodCxbXCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzXCIsXCJPRVNfZWxlbWVudF9pbmRleF91aW50XCJdKSYmKGUuX2hhc09ubHlMYXJnZVNwbG9tcyYmZih0KSxyLnBsb3QodCx7fSxuKSl9LGRyYWc6ZnVuY3Rpb24odCl7dmFyIGU9dC5jYWxjZGF0YSxyPXQuX2Z1bGxMYXlvdXQ7ci5faGFzT25seUxhcmdlU3Bsb21zJiZmKHQpO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dWzBdLnRyYWNlLGE9ci5fc3Bsb21TY2VuZXNbaS51aWRdO1wic3Bsb21cIj09PWkudHlwZSYmYSYmYS5tYXRyaXgmJmgodCxpLGEpfX0sdXBkYXRlR3JpZDpmLGNsZWFuOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9e307aWYobi5fc3Bsb21TY2VuZXMpe2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBvPXRbaV07XCJzcGxvbVwiPT09by50eXBlJiYoYVtvLnVpZF09MSl9Zm9yKGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGw9cltpXTtpZighYVtsLnVpZF0pe3ZhciBjPW4uX3NwbG9tU2NlbmVzW2wudWlkXTtjJiZjLmRlc3Ryb3kmJmMuZGVzdHJveSgpLG4uX3NwbG9tU2NlbmVzW2wudWlkXT1udWxsLGRlbGV0ZSBuLl9zcGxvbVNjZW5lc1tsLnVpZF19fX0wPT09T2JqZWN0LmtleXMobi5fc3Bsb21TY2VuZXN8fHt9KS5sZW5ndGgmJmRlbGV0ZSBuLl9zcGxvbVNjZW5lcyxuLl9zcGxvbUdyaWQmJiFlLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJm4uX2hhc09ubHlMYXJnZVNwbG9tcyYmKG4uX3NwbG9tR3JpZC5kZXN0cm95KCksbi5fc3Bsb21HcmlkPW51bGwsZGVsZXRlIG4uX3NwbG9tR3JpZCkscy5jbGVhbih0LGUscixuKX0sdXBkYXRlRng6ZnVuY3Rpb24odCl7cy51cGRhdGVGeCh0KTt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5kcmFnbW9kZTtpZihcInpvb21cIj09PXJ8fFwicGFuXCI9PT1yKWZvcih2YXIgbj10LmNhbGNkYXRhLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIGE9bltpXVswXS50cmFjZTtpZihcInNwbG9tXCI9PT1hLnR5cGUpe3ZhciBvPWUuX3NwbG9tU2NlbmVzW2EudWlkXTtudWxsPT09by5zZWxlY3RCYXRjaCYmby5tYXRyaXgudXBkYXRlKG8ubWF0cml4T3B0aW9ucyxudWxsKX19fSx0b1NWRzpzLnRvU1ZHfX0se1wiLi4vLi4vbGliL3ByZXBhcmVfcmVnbFwiOjcxNCxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiOjc2MCxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCI6NzUyLFwiLi4vLi4vcGxvdHMvZ2V0X2RhdGFcIjo3ODQsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcInJlZ2wtbGluZTJkXCI6NDg0fV0sMTEzMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzXCIpLGE9dChcIi4vYXR0cmlidXRlc1wiKSxvPXQoXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCIpLHM9dChcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCIpLGw9dChcIi4uL3BhcmNvb3Jkcy9tZXJnZV9sZW5ndGhcIiksYz0vLW9wZW4vO2Z1bmN0aW9uIHUodCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLmRpbWVuc2lvbnMscixpKX1yKFwibGFiZWxcIik7dmFyIGk9cihcInZhbHVlc1wiKTtpJiZpLmxlbmd0aD9yKFwidmlzaWJsZVwiKTplLnZpc2libGU9ITEscihcImF4aXMudHlwZVwiKSxyKFwiYXhpcy5tYXRjaGVzXCIpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXtmdW5jdGlvbiBmKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIHA9aSh0LGUse25hbWU6XCJkaW1lbnNpb25zXCIsaGFuZGxlSXRlbURlZmF1bHRzOnV9KSxkPWYoXCJkaWFnb25hbC52aXNpYmxlXCIpLGc9ZihcInNob3d1cHBlcmhhbGZcIiksdj1mKFwic2hvd2xvd2VyaGFsZlwiKTtpZihsKGUscCxcInZhbHVlc1wiKSYmKGR8fGd8fHYpKXtmKFwidGV4dFwiKSxmKFwiaG92ZXJ0ZXh0XCIpLGYoXCJob3ZlcnRlbXBsYXRlXCIpLHModCxlLHIsaCxmKTt2YXIgbT1jLnRlc3QoZS5tYXJrZXIuc3ltYm9sKSx5PW8uaXNCdWJibGUoZSk7ZihcIm1hcmtlci5saW5lLndpZHRoXCIsbXx8eT8xOjApLGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbz1lLmRpbWVuc2lvbnMscz1vLmxlbmd0aCxsPWUuc2hvd3VwcGVyaGFsZixjPWUuc2hvd2xvd2VyaGFsZix1PWUuZGlhZ29uYWwudmlzaWJsZSxoPW5ldyBBcnJheShzKSxmPW5ldyBBcnJheShzKTtmb3IoaT0wO2k8cztpKyspe3ZhciBwPWk/aSsxOlwiXCI7aFtpXT1cInhcIitwLGZbaV09XCJ5XCIrcH12YXIgZD1uKFwieGF4ZXNcIixoKSxnPW4oXCJ5YXhlc1wiLGYpLHY9ZS5fZGlhZz1uZXcgQXJyYXkocyk7ZS5feGF4ZXM9e30sZS5feWF4ZXM9e307dmFyIG09W10seT1bXTtmdW5jdGlvbiB4KHQsbixpLGEpe2lmKHQpe3ZhciBvPXQuY2hhckF0KDApLHM9ci5fc3Bsb21BeGVzW29dO2lmKGVbXCJfXCIrbytcImF4ZXNcIl1bdF09MSxhLnB1c2godCksISh0IGluIHMpKXt2YXIgbD1zW3RdPXt9O2kmJihsLmxhYmVsPWkubGFiZWx8fFwiXCIsaS52aXNpYmxlJiZpLmF4aXMmJihpLmF4aXMudHlwZSYmKGwudHlwZT1pLmF4aXMudHlwZSksaS5heGlzLm1hdGNoZXMmJihsLm1hdGNoZXM9bikpKX19fXZhciBiPSF1JiYhYyxfPSF1JiYhbDtmb3IoaT0wO2k8cztpKyspe3ZhciB3PW9baV0saz0wPT09aSxBPWk9PT1zLTEsVD1rJiZifHxBJiZfP3ZvaWQgMDpkW2ldLE09ayYmX3x8QSYmYj92b2lkIDA6Z1tpXTt4KFQsTSx3LG0pLHgoTSxULHcseSksdltpXT1bVCxNXX1mb3IoaT0wO2k8bS5sZW5ndGg7aSsrKWZvcihhPTA7YTx5Lmxlbmd0aDthKyspe3ZhciBTPW1baV0reVthXTtpPmEmJmw/ci5fc3Bsb21TdWJwbG90c1tTXT0xOmk8YSYmYz9yLl9zcGxvbVN1YnBsb3RzW1NdPTE6aSE9PWF8fCF1JiZjJiZsfHwoci5fc3Bsb21TdWJwbG90c1tTXT0xKX0oIWN8fCF1JiZsJiZjKSYmKHIuX3NwbG9tR3JpZERmbHQueHNpZGU9XCJib3R0b21cIixyLl9zcGxvbUdyaWREZmx0LnlzaWRlPVwibGVmdFwiKX0oMCxlLGgsZiksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsZil9ZWxzZSBlLnZpc2libGU9ITF9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHNcIjo3NDUsXCIuLi9wYXJjb29yZHMvbWVyZ2VfbGVuZ3RoXCI6MTAyMyxcIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzXCI6MTA3MSxcIi4uL3NjYXR0ZXIvc3VidHlwZXNcIjoxMDc2LFwiLi9hdHRyaWJ1dGVzXCI6MTEzMH1dLDExMzM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicmVnbC1zcGxvbVwiKSxpPXQoXCJhcnJheS1yYW5nZVwiKSxhPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2dyaWRcIikscz10KFwiLi4vLi4vbGliXCIpLGw9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkc1wiKSxjPXQoXCIuLi9zY2F0dGVyL3N1YnR5cGVzXCIpLHU9dChcIi4uL3NjYXR0ZXIvY2FsY1wiKS5jYWxjTWFya2VyU2l6ZSxoPXQoXCIuLi9zY2F0dGVyL2NhbGNcIikuY2FsY0F4aXNFeHBhbnNpb24sZj10KFwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGNcIikscD10KFwiLi4vc2NhdHRlcmdsL2NvbnZlcnRcIikubWFya2VyU2VsZWN0aW9uLGQ9dChcIi4uL3NjYXR0ZXJnbC9jb252ZXJ0XCIpLm1hcmtlclN0eWxlLGc9dChcIi4uL3NjYXR0ZXJnbFwiKS5jYWxjSG92ZXIsdj10KFwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiKS5CQUROVU0sbT10KFwiLi4vc2NhdHRlcmdsL2NvbnN0YW50c1wiKS5UT09fTUFOWV9QT0lOVFM7ZnVuY3Rpb24geSh0LGUpe3ZhciByLGksYSxvLGMsdT10Ll9mdWxsTGF5b3V0LGg9dS5fc2l6ZSxmPWUudHJhY2UscD1lLnQsZD11Ll9zcGxvbVNjZW5lc1tmLnVpZF0sZz1kLm1hdHJpeE9wdGlvbnMsdj1nLmNkYXRhLG09dS5fZ2xjYW52YXMuZGF0YSgpWzBdLnJlZ2wseT11LmRyYWdtb2RlO2lmKDAhPT12Lmxlbmd0aCl7Zy5sb3dlcj1mLnNob3d1cHBlcmhhbGYsZy51cHBlcj1mLnNob3dsb3dlcmhhbGYsZy5kaWFnb25hbD1mLmRpYWdvbmFsLnZpc2libGU7dmFyIHg9Zi5fdmlzaWJsZURpbXMsYj12Lmxlbmd0aCxfPWQudmlld09wdHM9e307Zm9yKF8ucmFuZ2VzPW5ldyBBcnJheShiKSxfLmRvbWFpbnM9bmV3IEFycmF5KGIpLGM9MDtjPHgubGVuZ3RoO2MrKyl7YT14W2NdO3ZhciB3PV8ucmFuZ2VzW2NdPW5ldyBBcnJheSg0KSxrPV8uZG9tYWluc1tjXT1uZXcgQXJyYXkoNCk7KHI9bC5nZXRGcm9tSWQodCxmLl9kaWFnW2FdWzBdKSkmJih3WzBdPXIuX3JsWzBdLHdbMl09ci5fcmxbMV0sa1swXT1yLmRvbWFpblswXSxrWzJdPXIuZG9tYWluWzFdKSwoaT1sLmdldEZyb21JZCh0LGYuX2RpYWdbYV1bMV0pKSYmKHdbMV09aS5fcmxbMF0sd1szXT1pLl9ybFsxXSxrWzFdPWkuZG9tYWluWzBdLGtbM109aS5kb21haW5bMV0pfV8udmlld3BvcnQ9W2gubCxoLmIsaC53K2gubCxoLmgraC5iXSwhMD09PWQubWF0cml4JiYoZC5tYXRyaXg9bihtKSk7dmFyIEE9dS5jbGlja21vZGUuaW5kZXhPZihcInNlbGVjdFwiKT4tMSxUPVwibGFzc29cIj09PXl8fFwic2VsZWN0XCI9PT15fHwhIWYuc2VsZWN0ZWRwb2ludHN8fEE7aWYoZC5zZWxlY3RCYXRjaD1udWxsLGQudW5zZWxlY3RCYXRjaD1udWxsLFQpe3ZhciBNPWYuX2xlbmd0aDtpZihkLnNlbGVjdEJhdGNofHwoZC5zZWxlY3RCYXRjaD1bXSxkLnVuc2VsZWN0QmF0Y2g9W10pLGYuc2VsZWN0ZWRwb2ludHMpe2Quc2VsZWN0QmF0Y2g9Zi5zZWxlY3RlZHBvaW50czt2YXIgUz1mLnNlbGVjdGVkcG9pbnRzLEU9e307Zm9yKGE9MDthPFMubGVuZ3RoO2ErKylFW1NbYV1dPSEwO3ZhciBDPVtdO2ZvcihhPTA7YTxNO2ErKylFW2FdfHxDLnB1c2goYSk7ZC51bnNlbGVjdEJhdGNoPUN9dmFyIEw9cC54cHg9bmV3IEFycmF5KGIpLHo9cC55cHg9bmV3IEFycmF5KGIpO2ZvcihjPTA7Yzx4Lmxlbmd0aDtjKyspe2lmKGE9eFtjXSxyPWwuZ2V0RnJvbUlkKHQsZi5fZGlhZ1thXVswXSkpZm9yKExbY109bmV3IEFycmF5KE0pLG89MDtvPE07bysrKUxbY11bb109ci5jMnAodltjXVtvXSk7aWYoaT1sLmdldEZyb21JZCh0LGYuX2RpYWdbYV1bMV0pKWZvcih6W2NdPW5ldyBBcnJheShNKSxvPTA7bzxNO28rKyl6W2NdW29dPWkuYzJwKHZbY11bb10pfWQuc2VsZWN0QmF0Y2g/KGQubWF0cml4LnVwZGF0ZShnLGcpLGQubWF0cml4LnVwZGF0ZShkLnVuc2VsZWN0ZWRPcHRpb25zLGQuc2VsZWN0ZWRPcHRpb25zKSxkLm1hdHJpeC51cGRhdGUoXyxfKSk6ZC5tYXRyaXgudXBkYXRlKF8sbnVsbCl9ZWxzZXt2YXIgTz1zLmV4dGVuZEZsYXQoe30sZyxfKTtkLm1hdHJpeC51cGRhdGUoTyxudWxsKSxwLnhweD1wLnlweD1udWxsfX19ZnVuY3Rpb24geCh0LGUpe2Zvcih2YXIgcj1lLl9pZCxuPXt4OjAseToxfVtyLmNoYXJBdCgwKV0saT10Ll92aXNpYmxlRGltcyxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV07aWYodC5fZGlhZ1tvXVtuXT09PXIpcmV0dXJuIGF9cmV0dXJuITF9ZS5leHBvcnRzPXttb2R1bGVUeXBlOlwidHJhY2VcIixuYW1lOlwic3Bsb21cIixiYXNlUGxvdE1vZHVsZTp0KFwiLi9iYXNlX3Bsb3RcIiksY2F0ZWdvcmllczpbXCJnbFwiLFwicmVnbFwiLFwiY2FydGVzaWFuXCIsXCJzeW1ib2xzXCIsXCJzaG93TGVnZW5kXCIsXCJzY2F0dGVyLWxpa2VcIl0sYXR0cmlidXRlczp0KFwiLi9hdHRyaWJ1dGVzXCIpLHN1cHBseURlZmF1bHRzOnQoXCIuL2RlZmF1bHRzXCIpLGNvbG9yYmFyOnQoXCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhclwiKSxjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxjLGc9ZS5kaW1lbnNpb25zLHk9ZS5fbGVuZ3RoLHg9e30sYj14LmNkYXRhPVtdLF89eC5kYXRhPVtdLHc9ZS5fdmlzaWJsZURpbXM9W107ZnVuY3Rpb24gayh0LHIpe2Zvcih2YXIgbj10Lm1ha2VDYWxjZGF0YSh7djpyLnZhbHVlcyx2Y2FsZW5kYXI6ZS5jYWxlbmRhcn0sXCJ2XCIpLGk9MDtpPG4ubGVuZ3RoO2krKyluW2ldPW5baV09PT12P05hTjpuW2ldO2IucHVzaChuKSxfLnB1c2goXCJsb2dcIj09PXQudHlwZT9zLnNpbXBsZU1hcChuLHQuYzJsKTpuKX1mb3Iocj0wO3I8Zy5sZW5ndGg7cisrKWlmKChpPWdbcl0pLnZpc2libGUpe2lmKGE9bC5nZXRGcm9tSWQodCxlLl9kaWFnW3JdWzBdKSxvPWwuZ2V0RnJvbUlkKHQsZS5fZGlhZ1tyXVsxXSksYSYmbyYmYS50eXBlIT09by50eXBlKXtzLmxvZyhcIlNraXBwaW5nIHNwbG9tIGRpbWVuc2lvbiBcIityK1wiIHdpdGggY29uZmxpY3RpbmcgYXhpcyB0eXBlc1wiKTtjb250aW51ZX1hPyhrKGEsaSksbyYmXCJjYXRlZ29yeVwiPT09by50eXBlJiYoby5fY2F0ZWdvcmllcz1hLl9jYXRlZ29yaWVzLnNsaWNlKCkpKTprKG8saSksdy5wdXNoKHIpfWZvcihmKHQsZSkscy5leHRlbmRGbGF0KHgsZChlKSksYz1iLmxlbmd0aCp5Pm0/MiooeC5zaXplQXZnfHxNYXRoLm1heCh4LnNpemUsMykpOnUoZSx5KSxuPTA7bjx3Lmxlbmd0aDtuKyspaT1nW3I9d1tuXV0sYT1sLmdldEZyb21JZCh0LGUuX2RpYWdbcl1bMF0pfHx7fSxvPWwuZ2V0RnJvbUlkKHQsZS5fZGlhZ1tyXVsxXSl8fHt9LGgodCxlLGEsbyxiW25dLGJbbl0sYyk7dmFyIEE9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LG49ZS51aWQsaT1yLl9zcGxvbVNjZW5lcztpfHwoaT1yLl9zcGxvbVNjZW5lcz17fSk7dmFyIGE9e2RpcnR5OiEwfSxvPWlbZS51aWRdO3JldHVybiBvfHwoKG89aVtuXT1zLmV4dGVuZEZsYXQoe30sYSx7c2VsZWN0QmF0Y2g6bnVsbCx1bnNlbGVjdEJhdGNoOm51bGwsbWF0cml4OiExLHNlbGVjdDpudWxsfSkpLmRyYXc9ZnVuY3Rpb24oKXtvLm1hdHJpeCYmby5tYXRyaXguZHJhdyYmKG8uc2VsZWN0QmF0Y2g/by5tYXRyaXguZHJhdyhvLnVuc2VsZWN0QmF0Y2gsby5zZWxlY3RCYXRjaCk6by5tYXRyaXguZHJhdygpKSxvLmRpcnR5PSExfSxvLmRlc3Ryb3k9ZnVuY3Rpb24oKXtvLm1hdHJpeCYmby5tYXRyaXguZGVzdHJveSYmby5tYXRyaXguZGVzdHJveSgpLG8ubWF0cml4T3B0aW9ucz1udWxsLG8uc2VsZWN0QmF0Y2g9bnVsbCxvLnVuc2VsZWN0QmF0Y2g9bnVsbCxvPW51bGx9KSxvLmRpcnR5fHxzLmV4dGVuZEZsYXQobyxhKSxvfSh0LGUpO3JldHVybiBBLm1hdHJpeHx8KEEubWF0cml4PSEwKSxBLm1hdHJpeE9wdGlvbnM9eCxBLnNlbGVjdGVkT3B0aW9ucz1wKGUsZS5zZWxlY3RlZCksQS51bnNlbGVjdGVkT3B0aW9ucz1wKGUsZS51bnNlbGVjdGVkKSxbe3g6ITEseTohMSx0Ont9LHRyYWNlOmV9XX0scGxvdDpmdW5jdGlvbih0LGUscil7aWYoci5sZW5ndGgpZm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspeSh0LHJbbl1bMF0pfSxob3ZlclBvaW50czpmdW5jdGlvbih0LGUscil7dmFyIG49dC5jZFswXS50cmFjZSxpPXQuc2NlbmUubWF0cml4T3B0aW9ucy5jZGF0YSxhPXQueGEsbz10LnlhLHM9YS5jMnAoZSksbD1vLmMycChyKSxjPXQuZGlzdGFuY2UsdT14KG4sYSksaD14KG4sbyk7aWYoITE9PT11fHwhMT09PWgpcmV0dXJuW3RdO2Zvcih2YXIgZixwLGQ9aVt1XSx2PWlbaF0sbT1jLHk9MDt5PGQubGVuZ3RoO3krKyl7dmFyIGI9ZFt5XSxfPXZbeV0sdz1hLmMycChiKS1zLGs9by5jMnAoXyktbCxBPU1hdGguc3FydCh3KncrayprKTtBPG0mJihtPXA9QSxmPXkpfXJldHVybiB0LmluZGV4PWYsdC5kaXN0YW5jZT1tLHQuZHh5PXAsdm9pZCAwPT09Zj9bdF06KGcodCxkLHYsbiksW3RdKX0sc2VsZWN0UG9pbnRzOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10LmNkLGE9blswXS50cmFjZSxvPW5bMF0udCxzPXQuc2NlbmUsbD1zLm1hdHJpeE9wdGlvbnMuY2RhdGEsdT10LnhheGlzLGg9dC55YXhpcyxmPVtdO2lmKCFzKXJldHVybiBmO3ZhciBwPSFjLmhhc01hcmtlcnMoYSkmJiFjLmhhc1RleHQoYSk7aWYoITAhPT1hLnZpc2libGV8fHApcmV0dXJuIGY7dmFyIGQ9eChhLHUpLGc9eChhLGgpO2lmKCExPT09ZHx8ITE9PT1nKXJldHVybiBmO3ZhciB2PW8ueHB4W2RdLG09by55cHhbZ10seT1sW2RdLGI9bFtnXSxfPW51bGwsdz1udWxsO2lmKCExPT09ZXx8ZS5kZWdlbmVyYXRlKXc9aShvLmNvdW50KTtlbHNlIGZvcihfPVtdLHc9W10scj0wO3I8eS5sZW5ndGg7cisrKWUuY29udGFpbnMoW3Zbcl0sbVtyXV0sbnVsbCxyLHQpPyhfLnB1c2gociksZi5wdXNoKHtwb2ludE51bWJlcjpyLHg6eVtyXSx5OmJbcl19KSk6dy5wdXNoKHIpO2lmKHMuc2VsZWN0QmF0Y2h8fChzLnNlbGVjdEJhdGNoPVtdLHMudW5zZWxlY3RCYXRjaD1bXSksIXMuc2VsZWN0QmF0Y2gpe2ZvcihyPTA7cjxzLmNvdW50O3IrKylzLnNlbGVjdEJhdGNoPVtdLHMudW5zZWxlY3RCYXRjaD1bXTtzLm1hdHJpeC51cGRhdGUocy51bnNlbGVjdGVkT3B0aW9ucyxzLnNlbGVjdGVkT3B0aW9ucyl9cmV0dXJuIHMuc2VsZWN0QmF0Y2g9XyxzLnVuc2VsZWN0QmF0Y2g9dyxmfSxlZGl0U3R5bGU6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnRyYWNlLG49dC5fZnVsbExheW91dC5fc3Bsb21TY2VuZXNbci51aWRdO2lmKG4pe2YodCxyKSxzLmV4dGVuZEZsYXQobi5tYXRyaXhPcHRpb25zLGQocikpO3ZhciBpPXMuZXh0ZW5kRmxhdCh7fSxuLm1hdHJpeE9wdGlvbnMsbi52aWV3T3B0cyk7bi5tYXRyaXgudXBkYXRlKGksbnVsbCl9fSxtZXRhOnt9fSxhLnJlZ2lzdGVyKG8pfSx7XCIuLi8uLi9jb21wb25lbnRzL2dyaWRcIjo2MjEsXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCI6Njc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzXCI6NzUyLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuLi9zY2F0dGVyL2NhbGNcIjoxMDUzLFwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGNcIjoxMDU1LFwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXJcIjoxMDcwLFwiLi4vc2NhdHRlci9zdWJ0eXBlc1wiOjEwNzYsXCIuLi9zY2F0dGVyZ2xcIjoxMTA1LFwiLi4vc2NhdHRlcmdsL2NvbnN0YW50c1wiOjExMDIsXCIuLi9zY2F0dGVyZ2wvY29udmVydFwiOjExMDMsXCIuL2F0dHJpYnV0ZXNcIjoxMTMwLFwiLi9iYXNlX3Bsb3RcIjoxMTMxLFwiLi9kZWZhdWx0c1wiOjExMzIsXCJhcnJheS1yYW5nZVwiOjU4LFwicmVnbC1zcGxvbVwiOjQ4Nn1dLDExMzQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLG89dChcIi4uL21lc2gzZC9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIiksbD10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LGM9e3g6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LHk6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LHo6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCJ9LHU6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHY6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHc6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHN0YXJ0czp7eDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0seTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sejp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LG1heGRpc3BsYXllZDp7dmFsVHlwZTpcImludGVnZXJcIixtaW46MCxkZmx0OjFlMyxlZGl0VHlwZTpcImNhbGNcIn0sc2l6ZXJlZjp7dmFsVHlwZTpcIm51bWJlclwiLGVkaXRUeXBlOlwiY2FsY1wiLG1pbjowLGRmbHQ6MX0sdGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixlZGl0VHlwZTpcImNhbGNcIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOlwic3RyaW5nXCIsZGZsdDpcIlwiLGVkaXRUeXBlOlwiY2FsY1wifSxob3ZlcnRlbXBsYXRlOmEoe2VkaXRUeXBlOlwiY2FsY1wifSx7a2V5czpbXCJ0dWJleFwiLFwidHViZXlcIixcInR1YmV6XCIsXCJ0dWJldVwiLFwidHViZXZcIixcInR1YmV3XCIsXCJub3JtXCIsXCJkaXZlcmdlbmNlXCJdfSl9O2woYyxuKFwiXCIse2NvbG9yQXR0cjpcInUvdi93IG5vcm1cIixzaG93U2NhbGVEZmx0OiEwLGVkaXRUeXBlT3ZlcnJpZGU6XCJjYWxjXCJ9KSx7Y29sb3JiYXI6aX0pO1tcIm9wYWNpdHlcIixcImxpZ2h0cG9zaXRpb25cIixcImxpZ2h0aW5nXCJdLmZvckVhY2goZnVuY3Rpb24odCl7Y1t0XT1vW3RdfSksYy5ob3ZlcmluZm89bCh7fSxzLmhvdmVyaW5mbyx7ZWRpdFR5cGU6XCJjYWxjXCIsZmxhZ3M6W1wieFwiLFwieVwiLFwielwiLFwidVwiLFwidlwiLFwid1wiLFwibm9ybVwiLFwiZGl2ZXJnZW5jZVwiLFwidGV4dFwiLFwibmFtZVwiXSxkZmx0OlwieCt5K3orbm9ybSt0ZXh0K25hbWVcIn0pLGMudHJhbnNmb3Jtcz12b2lkIDAsZS5leHBvcnRzPWN9LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiOjc0NixcIi4uL21lc2gzZC9hdHRyaWJ1dGVzXCI6OTk0fV0sMTEzNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsY1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGEsbyxzPWUudSxsPWUudixjPWUudyx1PWUueCxoPWUueSxmPWUueixwPU1hdGgubWluKHUubGVuZ3RoLGgubGVuZ3RoLGYubGVuZ3RoLHMubGVuZ3RoLGwubGVuZ3RoLGMubGVuZ3RoKSxkPTA7ZS5zdGFydHMmJihpPWUuc3RhcnRzLnh8fFtdLGE9ZS5zdGFydHMueXx8W10sbz1lLnN0YXJ0cy56fHxbXSxkPU1hdGgubWluKGkubGVuZ3RoLGEubGVuZ3RoLG8ubGVuZ3RoKSk7dmFyIGc9MCx2PTEvMDtmb3Iocj0wO3I8cDtyKyspe3ZhciBtPXNbcl0seT1sW3JdLHg9Y1tyXSxiPU1hdGguc3FydChtKm0reSp5K3gqeCk7Zz1NYXRoLm1heChnLGIpLHY9TWF0aC5taW4odixiKX1uKHQsZSx7dmFsczpbdixnXSxjb250YWluZXJTdHI6XCJcIixjTGV0dGVyOlwiY1wifSk7dmFyIF89LTEvMCx3PTEvMCxrPS0xLzAsQT0xLzAsVD0tMS8wLE09MS8wO2ZvcihyPTA7cjxwO3IrKyl7dmFyIFM9dVtyXTtfPU1hdGgubWF4KF8sUyksdz1NYXRoLm1pbih3LFMpO3ZhciBFPWhbcl07az1NYXRoLm1heChrLEUpLEE9TWF0aC5taW4oQSxFKTt2YXIgQz1mW3JdO1Q9TWF0aC5tYXgoVCxDKSxNPU1hdGgubWluKE0sQyl9Zm9yKHI9MDtyPGQ7cisrKXt2YXIgTD1pW3JdO189TWF0aC5tYXgoXyxMKSx3PU1hdGgubWluKHcsTCk7dmFyIHo9YVtyXTtrPU1hdGgubWF4KGsseiksQT1NYXRoLm1pbihBLHopO3ZhciBPPW9bcl07VD1NYXRoLm1heChULE8pLE09TWF0aC5taW4oTSxPKX1lLl9sZW49cCxlLl9zbGVuPWQsZS5fbm9ybU1heD1nLGUuX3hibmRzPVt3LF9dLGUuX3libmRzPVtBLGtdLGUuX3pibmRzPVtNLFRdfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIjo1ODZ9XSwxMTM2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsLXN0cmVhbXR1YmUzZFwiKSxpPW4uY3JlYXRlVHViZU1lc2gsYT10KFwiLi4vLi4vbGliXCIpLG89dChcIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3JcIikucGFyc2VDb2xvclNjYWxlLHM9dChcIi4uLy4uL3Bsb3RzL2dsM2QvemlwM1wiKSxsPXt4YXhpczowLHlheGlzOjEsemF4aXM6Mn07ZnVuY3Rpb24gYyh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMubWVzaD1udWxsLHRoaXMuZGF0YT1udWxsfXZhciB1PWMucHJvdG90eXBlO2Z1bmN0aW9uIGgodCl7cmV0dXJuIGEuZGlzdGluY3RWYWxzKHQpLnZhbHN9ZnVuY3Rpb24gZih0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZT4yP3Quc2xpY2UoMSxlLTEpOjI9PT1lP1sodFswXSt0WzFdKS8yXTp0fWZ1bmN0aW9uIHAodCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIDE9PT1lP1suNSwuNV06W3RbMV0tdFswXSx0W2UtMV0tdFtlLTJdXX1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9dC5mdWxsU2NlbmVMYXlvdXQsaT10LmRhdGFTY2FsZSxjPWUuX2xlbix1PXt9O2Z1bmN0aW9uIGQodCxlKXt2YXIgbj1yW2VdLG89aVtsW2VdXTtyZXR1cm4gYS5zaW1wbGVNYXAodCxmdW5jdGlvbih0KXtyZXR1cm4gbi5kMmwodCkqb30pfXUudmVjdG9ycz1zKGQoZS51LFwieGF4aXNcIiksZChlLnYsXCJ5YXhpc1wiKSxkKGUudyxcInpheGlzXCIpLGMpO3ZhciBnPWgoZS54LnNsaWNlKDAsYykpLHY9aChlLnkuc2xpY2UoMCxjKSksbT1oKGUuei5zbGljZSgwLGMpKTtpZihnLmxlbmd0aCp2Lmxlbmd0aCptLmxlbmd0aD5jKXJldHVybntwb3NpdGlvbnM6W10sY2VsbHM6W119O3ZhciB5PWQoZyxcInhheGlzXCIpLHg9ZCh2LFwieWF4aXNcIiksYj1kKG0sXCJ6YXhpc1wiKTtpZih1Lm1lc2hncmlkPVt5LHgsYl0sZS5zdGFydHMpe3ZhciBfPWUuX3NsZW47dS5zdGFydGluZ1Bvc2l0aW9ucz1zKGQoZS5zdGFydHMueC5zbGljZSgwLF8pLFwieGF4aXNcIiksZChlLnN0YXJ0cy55LnNsaWNlKDAsXyksXCJ5YXhpc1wiKSxkKGUuc3RhcnRzLnouc2xpY2UoMCxfKSxcInpheGlzXCIpKX1lbHNle2Zvcih2YXIgdz14WzBdLGs9Zih5KSxBPWYoYiksVD1uZXcgQXJyYXkoay5sZW5ndGgqQS5sZW5ndGgpLE09MCxTPTA7UzxrLmxlbmd0aDtTKyspZm9yKHZhciBFPTA7RTxBLmxlbmd0aDtFKyspVFtNKytdPVtrW1NdLHcsQVtFXV07dS5zdGFydGluZ1Bvc2l0aW9ucz1UfXUuY29sb3JtYXA9byhlKSx1LnR1YmVTaXplPWUuc2l6ZXJlZix1Lm1heExlbmd0aD1lLm1heGRpc3BsYXllZDt2YXIgQz1kKGUuX3hibmRzLFwieGF4aXNcIiksTD1kKGUuX3libmRzLFwieWF4aXNcIiksej1kKGUuX3pibmRzLFwiemF4aXNcIiksTz1wKHkpLEk9cCh4KSxEPXAoYiksUD1bW0NbMF0tT1swXSxMWzBdLUlbMF0selswXS1EWzBdXSxbQ1sxXStPWzFdLExbMV0rSVsxXSx6WzFdK0RbMV1dXSxSPW4odSxQKTtSLnZlcnRleEludGVuc2l0eUJvdW5kcz1bZS5jbWluL2UuX25vcm1NYXgsZS5jbWF4L2UuX25vcm1NYXhdO3ZhciBGPWUubGlnaHRwb3NpdGlvbjtyZXR1cm4gUi5saWdodFBvc2l0aW9uPVtGLngsRi55LEYuel0sUi5hbWJpZW50PWUubGlnaHRpbmcuYW1iaWVudCxSLmRpZmZ1c2U9ZS5saWdodGluZy5kaWZmdXNlLFIuc3BlY3VsYXI9ZS5saWdodGluZy5zcGVjdWxhcixSLnJvdWdobmVzcz1lLmxpZ2h0aW5nLnJvdWdobmVzcyxSLmZyZXNuZWw9ZS5saWdodGluZy5mcmVzbmVsLFIub3BhY2l0eT1lLm9wYWNpdHksZS5fcGFkPVIudHViZVNjYWxlKmUuc2l6ZXJlZioyLFJ9dS5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUuZnVsbFNjZW5lTGF5b3V0LHI9dGhpcy5zY2VuZS5kYXRhU2NhbGU7ZnVuY3Rpb24gbih0LG4pe3ZhciBpPWVbbl0sYT1yW2xbbl1dO3JldHVybiBpLmwyYyh0KS9hfWlmKHQub2JqZWN0PT09dGhpcy5tZXNoKXt2YXIgaT10LmRhdGEucG9zaXRpb24sYT10LmRhdGEudmVsb2NpdHk7cmV0dXJuIHQudHJhY2VDb29yZGluYXRlPVtuKGlbMF0sXCJ4YXhpc1wiKSxuKGlbMV0sXCJ5YXhpc1wiKSxuKGlbMl0sXCJ6YXhpc1wiKSxuKGFbMF0sXCJ4YXhpc1wiKSxuKGFbMV0sXCJ5YXhpc1wiKSxuKGFbMl0sXCJ6YXhpc1wiKSx0LmRhdGEuaW50ZW5zaXR5KnRoaXMuZGF0YS5fbm9ybU1heCx0LmRhdGEuZGl2ZXJnZW5jZV0sdC50ZXh0TGFiZWw9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQsITB9fSx1LnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLmRhdGE9dDt2YXIgZT1kKHRoaXMuc2NlbmUsdCk7dGhpcy5tZXNoLnVwZGF0ZShlKX0sdS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubWVzaCksdGhpcy5tZXNoLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsbj1kKHQsZSksYT1pKHIsbiksbz1uZXcgYyh0LGUudWlkKTtyZXR1cm4gby5tZXNoPWEsby5kYXRhPWUsYS5fdHJhY2U9byx0LmdscGxvdC5hZGQoYSksb319LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3JcIjo2OTgsXCIuLi8uLi9wbG90cy9nbDNkL3ppcDNcIjo4MDAsXCJnbC1zdHJlYW10dWJlM2RcIjozMTB9XSwxMTM3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIiksYT10KFwiLi9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIGw9cyhcInVcIiksYz1zKFwidlwiKSx1PXMoXCJ3XCIpLGg9cyhcInhcIiksZj1zKFwieVwiKSxwPXMoXCJ6XCIpO2wmJmwubGVuZ3RoJiZjJiZjLmxlbmd0aCYmdSYmdS5sZW5ndGgmJmgmJmgubGVuZ3RoJiZmJiZmLmxlbmd0aCYmcCYmcC5sZW5ndGg/KHMoXCJzdGFydHMueFwiKSxzKFwic3RhcnRzLnlcIikscyhcInN0YXJ0cy56XCIpLHMoXCJtYXhkaXNwbGF5ZWRcIikscyhcInNpemVyZWZcIikscyhcImxpZ2h0aW5nLmFtYmllbnRcIikscyhcImxpZ2h0aW5nLmRpZmZ1c2VcIikscyhcImxpZ2h0aW5nLnNwZWN1bGFyXCIpLHMoXCJsaWdodGluZy5yb3VnaG5lc3NcIikscyhcImxpZ2h0aW5nLmZyZXNuZWxcIikscyhcImxpZ2h0cG9zaXRpb24ueFwiKSxzKFwibGlnaHRwb3NpdGlvbi55XCIpLHMoXCJsaWdodHBvc2l0aW9uLnpcIiksaSh0LGUsbyxzLHtwcmVmaXg6XCJcIixjTGV0dGVyOlwiY1wifSkscyhcInRleHRcIikscyhcImhvdmVydGV4dFwiKSxzKFwiaG92ZXJ0ZW1wbGF0ZVwiKSxlLl9sZW5ndGg9bnVsbCk6ZS52aXNpYmxlPSExfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCI6NTg4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi9hdHRyaWJ1dGVzXCI6MTEzNH1dLDExMzg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6XCJ0cmFjZVwiLG5hbWU6XCJzdHJlYW10dWJlXCIsYmFzZVBsb3RNb2R1bGU6dChcIi4uLy4uL3Bsb3RzL2dsM2RcIiksY2F0ZWdvcmllczpbXCJnbDNkXCJdLGF0dHJpYnV0ZXM6dChcIi4vYXR0cmlidXRlc1wiKSxzdXBwbHlEZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxjb2xvcmJhcjp7bWluOlwiY21pblwiLG1heDpcImNtYXhcIn0sY2FsYzp0KFwiLi9jYWxjXCIpLHBsb3Q6dChcIi4vY29udmVydFwiKSxldmVudERhdGE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50dWJleD10LngsdC50dWJleT10LnksdC50dWJlej10LnosdC50dWJldT1lLnRyYWNlQ29vcmRpbmF0ZVszXSx0LnR1YmV2PWUudHJhY2VDb29yZGluYXRlWzRdLHQudHViZXc9ZS50cmFjZUNvb3JkaW5hdGVbNV0sdC5ub3JtPWUudHJhY2VDb29yZGluYXRlWzZdLHQuZGl2ZXJnZW5jZT1lLnRyYWNlQ29vcmRpbmF0ZVs3XSxkZWxldGUgdC54LGRlbGV0ZSB0LnksZGVsZXRlIHQueix0fSxtZXRhOnt9fX0se1wiLi4vLi4vcGxvdHMvZ2wzZFwiOjc4OSxcIi4vYXR0cmlidXRlc1wiOjExMzQsXCIuL2NhbGNcIjoxMTM1LFwiLi9jb252ZXJ0XCI6MTEzNixcIi4vZGVmYXVsdHNcIjoxMTM3fV0sMTEzOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uLy4uL3Bsb3RzL2RvbWFpblwiKS5hdHRyaWJ1dGVzLG89dChcIi4uL3BpZS9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2xhYmVsczp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0scGFyZW50czp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sdmFsdWVzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGVkaXRUeXBlOlwiY2FsY1wifSxicmFuY2h2YWx1ZXM6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcInJlbWFpbmRlclwiLFwidG90YWxcIl0sZGZsdDpcInJlbWFpbmRlclwiLGVkaXRUeXBlOlwiY2FsY1wifSxsZXZlbDp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwicGxvdFwifSxtYXhkZXB0aDp7dmFsVHlwZTpcImludGVnZXJcIixlZGl0VHlwZTpcInBsb3RcIixkZmx0Oi0xfSxtYXJrZXI6e2NvbG9yczp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixlZGl0VHlwZTpcImNhbGNcIn0sbGluZTp7Y29sb3I6cyh7fSxvLm1hcmtlci5saW5lLmNvbG9yLHtkZmx0Om51bGx9KSx3aWR0aDpzKHt9LG8ubWFya2VyLmxpbmUud2lkdGgse2RmbHQ6MX0pLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0sbGVhZjp7b3BhY2l0eTp7dmFsVHlwZTpcIm51bWJlclwiLGVkaXRUeXBlOlwic3R5bGVcIixtaW46MCxtYXg6MSxkZmx0Oi43fSxlZGl0VHlwZTpcInBsb3RcIn0sdGV4dDpvLnRleHQsdGV4dGluZm86cyh7fSxvLnRleHRpbmZvLHtlZGl0VHlwZTpcInBsb3RcIixmbGFnczpbXCJsYWJlbFwiLFwidGV4dFwiLFwidmFsdWVcIl19KSx0ZXh0Zm9udDpvLnRleHRmb250LGhvdmVydGV4dDpvLmhvdmVydGV4dCxob3ZlcmluZm86cyh7fSxuLmhvdmVyaW5mbyx7ZmxhZ3M6W1wibGFiZWxcIixcInRleHRcIixcInZhbHVlXCIsXCJuYW1lXCJdfSksaG92ZXJ0ZW1wbGF0ZTppKCksaW5zaWRldGV4dGZvbnQ6by5pbnNpZGV0ZXh0Zm9udCxvdXRzaWRldGV4dGZvbnQ6by5vdXRzaWRldGV4dGZvbnQsZG9tYWluOmEoe25hbWU6XCJzdW5idXJzdFwiLHRyYWNlOiEwLGVkaXRUeXBlOlwiY2FsY1wifSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVydGVtcGxhdGVfYXR0cmlidXRlc1wiOjYxNixcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCI6NzQ2LFwiLi4vLi4vcGxvdHMvZG9tYWluXCI6Nzc0LFwiLi4vcGllL2F0dHJpYnV0ZXNcIjoxMDI2fV0sMTE0MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9yZWdpc3RyeVwiKSxpPXQoXCIuLi8uLi9wbG90cy9nZXRfZGF0YVwiKS5nZXRNb2R1bGVDYWxjRGF0YSxhPXIubmFtZT1cInN1bmJ1cnN0XCI7ci5wbG90PWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzPW4uZ2V0TW9kdWxlKGEpLGw9aSh0LmNhbGNkYXRhLHMpWzBdO3MucGxvdCh0LGwscixvKX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLl9oYXMmJm4uX2hhcyhhKSxvPWUuX2hhcyYmZS5faGFzKGEpO2kmJiFvJiZuLl9zdW5idXJzdGxheWVyLnNlbGVjdEFsbChcImcudHJhY2VcIikucmVtb3ZlKCl9fSx7XCIuLi8uLi9wbG90cy9nZXRfZGF0YVwiOjc4NCxcIi4uLy4uL3JlZ2lzdHJ5XCI6ODI5fV0sMTE0MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkMy1oaWVyYXJjaHlcIiksaT10KFwiZmFzdC1pc251bWVyaWNcIiksYT10KFwiLi4vLi4vbGliXCIpLG89dChcIi4uL3BpZS9jYWxjXCIpLm1ha2VQdWxsQ29sb3JGbixzPXQoXCIuLi9waWUvY2FsY1wiKS5nZW5lcmF0ZUV4dGVuZGVkQ29sb3JzLGw9YS5pc0FycmF5T3JUeXBlZEFycmF5LGM9e307ci5jYWxjPWZ1bmN0aW9uKHQsZSl7dmFyIHIscyxjLHUsaCxmLHA9dC5fZnVsbExheW91dCxkPWUuaWRzLGc9bChkKSx2PWUubGFiZWxzLG09ZS5wYXJlbnRzLHk9ZS52YWx1ZXMseD1sKHkpLGI9W10sXz17fSx3PXt9LGs9ZnVuY3Rpb24odCl7cmV0dXJuIXh8fGkoeVt0XSkmJnlbdF0+PTB9O2c/KHI9TWF0aC5taW4oZC5sZW5ndGgsbS5sZW5ndGgpLHM9ZnVuY3Rpb24odCl7cmV0dXJuIGRbdF0mJmsodCl9LGM9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyhkW3RdKX0pOihyPU1hdGgubWluKHYubGVuZ3RoLG0ubGVuZ3RoKSxzPWZ1bmN0aW9uKHQpe3JldHVybiB2W3RdJiZrKHQpfSxjPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcodlt0XSl9KSx4JiYocj1NYXRoLm1pbihyLHkubGVuZ3RoKSk7Zm9yKHZhciBBPTA7QTxyO0ErKylpZihzKEEpKXt2YXIgVD1jKEEpLE09bVtBXT9TdHJpbmcobVtBXSk6XCJcIixTPXtpOkEsaWQ6VCxwaWQ6TSxsYWJlbDp2W0FdP1N0cmluZyh2W0FdKTpcIlwifTt4JiYoUy52PSt5W0FdKSxiLnB1c2goUyksaD1ULF9bdT1NXT9fW3VdLnB1c2goaCk6X1t1XT1baF0sd1toXT0xfWlmKF9bXCJcIl0pe2lmKF9bXCJcIl0ubGVuZ3RoPjEpe2Zvcih2YXIgRT1hLnJhbmRzdHIoKSxDPTA7QzxiLmxlbmd0aDtDKyspXCJcIj09PWJbQ10ucGlkJiYoYltDXS5waWQ9RSk7Yi51bnNoaWZ0KHtoYXNNdWx0aXBsZVJvb3RzOiEwLGlkOkUscGlkOlwiXCJ9KX19ZWxzZXt2YXIgTCx6PVtdO2ZvcihMIGluIF8pd1tMXXx8ei5wdXNoKEwpO2lmKDEhPT16Lmxlbmd0aClyZXR1cm4gYS53YXJuKFwiTXVsdGlwbGUgaW1wbGllZCByb290cywgY2Fubm90IGJ1aWxkIHN1bmJ1cnN0IGhpZXJhcmNoeS5cIik7TD16WzBdLGIudW5zaGlmdCh7aWQ6TCxwaWQ6XCJcIixsYWJlbDpMfSl9dHJ5e2Y9bi5zdHJhdGlmeSgpLmlkKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkucGFyZW50SWQoZnVuY3Rpb24odCl7cmV0dXJuIHQucGlkfSkoYil9Y2F0Y2godCl7cmV0dXJuIGEud2FybihcIkZhaWxlZCB0byBidWlsZCBzdW5idXJzdCBoaWVyYXJjaHkuIEVycm9yOiBcIit0Lm1lc3NhZ2UpfXZhciBPPW4uaGllcmFyY2h5KGYpLEk9ITE7aWYoeClzd2l0Y2goZS5icmFuY2h2YWx1ZXMpe2Nhc2VcInJlbWFpbmRlclwiOk8uc3VtKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRhdGEudn0pO2JyZWFrO2Nhc2VcInRvdGFsXCI6Ty5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZGF0YS5kYXRhLnY7aWYodC5jaGlsZHJlbiYmZTx0LmNoaWxkcmVuLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0K2UuZGF0YS5kYXRhLnZ9LDApKXJldHVybiBJPSEwLGEud2FybihbXCJUb3RhbCB2YWx1ZSBmb3Igbm9kZVwiLHQuZGF0YS5kYXRhLmlkLFwiaXMgc21hbGxlciB0aGFuIHRoZSBzdW0gb2YgaXRzIGNoaWxkcmVuLlwiXS5qb2luKFwiIFwiKSk7dC52YWx1ZT1lfSl9ZWxzZSBPLmNvdW50KCk7aWYoIUkpe08uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBlLnZhbHVlLXQudmFsdWV9KTt2YXIgRD1lLm1hcmtlci5jb2xvcnN8fFtdLFA9byhwLl9zdW5idXJzdGNvbG9ybWFwKTtyZXR1cm4gTy5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZGF0YS5kYXRhLHI9ZS5pZDtlLmNvbG9yPVAoRFtlLmldLHIpfSksYlswXS5oaWVyYXJjaHk9TyxifX0sci5jcm9zc1RyYWNlQ2FsYz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxuPWUuc3VuYnVyc3Rjb2xvcndheSxpPWUuX3N1bmJ1cnN0Y29sb3JtYXA7ZS5leHRlbmRzdW5idXJzdGNvbG9ycyYmKG49cyhuLGMpKTt2YXIgYT0wO2Z1bmN0aW9uIG8odCl7dmFyIGU9dC5kYXRhLmRhdGEscj1lLmlkOyExPT09ZS5jb2xvciYmKGlbcl0/ZS5jb2xvcj1pW3JdOnQucGFyZW50P3QucGFyZW50LnBhcmVudD9lLmNvbG9yPXQucGFyZW50LmRhdGEuZGF0YS5jb2xvcjooaVtyXT1lLmNvbG9yPW5bYSVuLmxlbmd0aF0sYSsrKTplLmNvbG9yPVwicmdiYSgwLDAsMCwwKVwiKX1mb3IodmFyIGw9MDtsPHIubGVuZ3RoO2wrKyl7dmFyIHU9cltsXVswXTtcInN1bmJ1cnN0XCI9PT11LnRyYWNlLnR5cGUmJnUuaGllcmFyY2h5JiZ1LmhpZXJhcmNoeS5lYWNoKG8pfX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4uL3BpZS9jYWxjXCI6MTAyOCxcImQzLWhpZXJhcmNoeVwiOjE0OCxcImZhc3QtaXNudW1lcmljXCI6MjIyfV0sMTE0MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17Q0xJQ0tfVFJBTlNJVElPTl9USU1FOjc1MCxDTElDS19UUkFOU0lUSU9OX0VBU0lORzpcImxpbmVhclwifX0se31dLDExNDM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9wbG90cy9kb21haW5cIikuZGVmYXVsdHMsbz1uLmNvZXJjZUZvbnQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX12YXIgYz1sKFwibGFiZWxzXCIpLHU9bChcInBhcmVudHNcIik7aWYoYyYmYy5sZW5ndGgmJnUmJnUubGVuZ3RoKXt2YXIgaD1sKFwidmFsdWVzXCIpO2gmJmgubGVuZ3RoJiZsKFwiYnJhbmNodmFsdWVzXCIpLGwoXCJsZXZlbFwiKSxsKFwibWF4ZGVwdGhcIiksbChcIm1hcmtlci5saW5lLndpZHRoXCIpJiZsKFwibWFya2VyLmxpbmUuY29sb3JcIixzLnBhcGVyX2JnY29sb3IpLGwoXCJtYXJrZXIuY29sb3JzXCIpLGwoXCJsZWFmLm9wYWNpdHlcIik7dmFyIGY9bChcInRleHRcIik7bChcInRleHRpbmZvXCIsQXJyYXkuaXNBcnJheShmKT9cInRleHQrbGFiZWxcIjpcImxhYmVsXCIpLGwoXCJob3ZlcnRleHRcIiksbChcImhvdmVydGVtcGxhdGVcIik7dmFyIHA9byhsLFwidGV4dGZvbnRcIixzLmZvbnQpLGQ9bi5leHRlbmRGbGF0KHt9LHApOyEodC50ZXh0Zm9udCYmdC50ZXh0Zm9udC5jb2xvcikmJmRlbGV0ZSBkLmNvbG9yLG8obCxcImluc2lkZXRleHRmb250XCIsZCksbyhsLFwib3V0c2lkZXRleHRmb250XCIscCksYShlLHMsbCksZS5fbGVuZ3RoPW51bGx9ZWxzZSBlLnZpc2libGU9ITF9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9kb21haW5cIjo3NzQsXCIuL2F0dHJpYnV0ZXNcIjoxMTM5fV0sMTE0NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17bW9kdWxlVHlwZTpcInRyYWNlXCIsbmFtZTpcInN1bmJ1cnN0XCIsYmFzZVBsb3RNb2R1bGU6dChcIi4vYmFzZV9wbG90XCIpLGNhdGVnb3JpZXM6W10sYW5pbWF0YWJsZTohMCxhdHRyaWJ1dGVzOnQoXCIuL2F0dHJpYnV0ZXNcIiksbGF5b3V0QXR0cmlidXRlczp0KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxzdXBwbHlEZWZhdWx0czp0KFwiLi9kZWZhdWx0c1wiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KFwiLi9sYXlvdXRfZGVmYXVsdHNcIiksY2FsYzp0KFwiLi9jYWxjXCIpLmNhbGMsY3Jvc3NUcmFjZUNhbGM6dChcIi4vY2FsY1wiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OnQoXCIuL3Bsb3RcIiksc3R5bGU6dChcIi4vc3R5bGVcIikuc3R5bGUsbWV0YTp7fX19LHtcIi4vYXR0cmlidXRlc1wiOjExMzksXCIuL2Jhc2VfcGxvdFwiOjExNDAsXCIuL2NhbGNcIjoxMTQxLFwiLi9kZWZhdWx0c1wiOjExNDMsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6MTE0NSxcIi4vbGF5b3V0X2RlZmF1bHRzXCI6MTE0NixcIi4vcGxvdFwiOjExNDcsXCIuL3N0eWxlXCI6MTE0OH1dLDExNDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e3N1bmJ1cnN0Y29sb3J3YXk6e3ZhbFR5cGU6XCJjb2xvcmxpc3RcIixlZGl0VHlwZTpcImNhbGNcIn0sZXh0ZW5kc3VuYnVyc3Rjb2xvcnM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcImNhbGNcIn19fSx7fV0sMTE0NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9saWJcIiksaT10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9cihcInN1bmJ1cnN0Y29sb3J3YXlcIixlLmNvbG9yd2F5KSxyKFwiZXh0ZW5kc3VuYnVyc3Rjb2xvcnNcIil9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6MTE0NX1dLDExNDc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiZDMtaGllcmFyY2h5XCIpLGE9dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvZnhcIikscz10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxsPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksYz10KFwiLi4vLi4vbGliXCIpLHU9dChcIi4uLy4uL2xpYi9ldmVudHNcIiksaD10KFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCIpLGY9dChcIi4uLy4uL2xpYi9zZXRjdXJzb3JcIikscD10KFwiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzXCIpLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSxkPXQoXCIuLi9waWUvcGxvdFwiKS50cmFuc2Zvcm1JbnNpZGVUZXh0LGc9dChcIi4uL3BpZS9oZWxwZXJzXCIpLmZvcm1hdFBpZVZhbHVlLHY9dChcIi4vc3R5bGVcIikuc3R5bGVPbmUsbT10KFwiLi9jb25zdGFudHNcIik7ZnVuY3Rpb24geSh0LGUscixhKXt2YXIgbz10Ll9mdWxsTGF5b3V0LHU9YSYmYS5kdXJhdGlvbj4wLGY9bi5zZWxlY3Qocikuc2VsZWN0QWxsKFwiZy5zbGljZVwiKSxwPWVbMF0sbT1wLnRyYWNlLHk9eChwLmhpZXJhcmNoeSxtLmxldmVsKSx3PW0ubWF4ZGVwdGg+PTA/bS5tYXhkZXB0aDoxLzAsTT1vLl9zaXplLFM9bS5kb21haW4sRT1NLncqKFMueFsxXS1TLnhbMF0pLEM9TS5oKihTLnlbMV0tUy55WzBdKSxMPS41Kk1hdGgubWluKEUsQyksej1wLmN4PU0ubCtNLncqKFMueFsxXStTLnhbMF0pLzIsTz1wLmN5PU0udCtNLmgqKDEtUy55WzBdKS1DLzI7aWYoIXkpcmV0dXJuIGYucmVtb3ZlKCk7dmFyIEk9bnVsbCxEPXt9O3UmJmYuZWFjaChmdW5jdGlvbih0KXtEW2sodCldPXtycHgwOnQucnB4MCxycHgxOnQucnB4MSx4MDp0LngwLHgxOnQueDEsdHJhbnNmb3JtOnQudHJhbnNmb3JtfSwhSSYmXyh0KSYmKEk9dCl9KTt2YXIgUD1mdW5jdGlvbih0KXtyZXR1cm4gaS5wYXJ0aXRpb24oKS5zaXplKFsyKk1hdGguUEksdC5oZWlnaHQrMV0pKHQpfSh5KS5kZXNjZW5kYW50cygpLFI9eS5oZWlnaHQrMSxGPTAsQj13O3AuaGFzTXVsdGlwbGVSb290cyYmYih5KSYmKFA9UC5zbGljZSgxKSxSLT0xLEY9MSxCKz0xKSxQPVAuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnkxPD1CfSk7dmFyIE49TWF0aC5taW4oUix3KSxqPWZ1bmN0aW9uKHQpe3JldHVybih0LUYpL04qTH0sVj1mdW5jdGlvbih0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpLC10Kk1hdGguc2luKGUpXX0sVT1mdW5jdGlvbih0KXtyZXR1cm4gYy5wYXRoQW5udWx1cyh0LnJweDAsdC5ycHgxLHQueDAsdC54MSx6LE8pfSxxPWZ1bmN0aW9uKHQpe3JldHVybiB6K3QucHhtaWRbMF0qdC50cmFuc2Zvcm0uckNlbnRlcisodC50cmFuc2Zvcm0ueHx8MCl9LEg9ZnVuY3Rpb24odCl7cmV0dXJuIE8rdC5weG1pZFsxXSp0LnRyYW5zZm9ybS5yQ2VudGVyKyh0LnRyYW5zZm9ybS55fHwwKX07KGY9Zi5kYXRhKFAsZnVuY3Rpb24odCl7cmV0dXJuIGsodCl9KSkuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJzbGljZVwiLCEwKSx1P2YuZXhpdCgpLnRyYW5zaXRpb24oKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7dC5zZWxlY3QoXCJwYXRoLnN1cmZhY2VcIikudHJhbnNpdGlvbigpLmF0dHJUd2VlbihcImRcIixmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZSxyPWsodCksaT1EW3JdLGE9RFtrKHkpXTtpZihhKXt2YXIgbz10LngxPmEueDE/MipNYXRoLlBJOjA7ZT10LnJweDE8YS5ycHgxP3tycHgwOjAscnB4MTowfTp7eDA6byx4MTpvfX1lbHNle3ZhciBzLGw9ayh0LnBhcmVudCk7Zi5lYWNoKGZ1bmN0aW9uKHQpe2lmKGsodCk9PT1sKXJldHVybiBzPXR9KTt2YXIgYyx1PXMuY2hpbGRyZW47dS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7aWYoayh0KT09PXIpcmV0dXJuIGM9ZX0pO3ZhciBoPXUubGVuZ3RoLHA9bi5pbnRlcnBvbGF0ZShzLngwLHMueDEpO2U9e3JweDA6TCxycHgxOkwseDA6cChjL2gpLHgxOnAoKGMrMSkvaCl9fXJldHVybiBuLmludGVycG9sYXRlKGksZSl9KHQpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gVShlKHQpKX19KSx0LnNlbGVjdChcImcuc2xpY2V0ZXh0XCIpLmF0dHIoXCJvcGFjaXR5XCIsMCl9KS5yZW1vdmUoKTpmLmV4aXQoKS5yZW1vdmUoKSxmLm9yZGVyKCk7dmFyIEc9bnVsbDtpZih1JiZJKXt2YXIgWT1rKEkpO2YuZWFjaChmdW5jdGlvbih0KXtudWxsPT09RyYmayh0KT09PVkmJihHPXQueDEpfSl9dmFyIFc9ZjtmdW5jdGlvbiBYKHQpe3ZhciBlPXQucGFyZW50LHI9RFtrKGUpXSxpPXt9O2lmKHIpe3ZhciBhPWUuY2hpbGRyZW4sbz1hLmluZGV4T2YodCkscz1hLmxlbmd0aCxsPW4uaW50ZXJwb2xhdGUoci54MCxyLngxKTtpLngwPWwoby9zKSxpLngxPWwoby9zKX1lbHNlIGkueDA9aS54MT0wO3JldHVybiBpfXUmJihXPVcudHJhbnNpdGlvbigpLmVhY2goXCJlbmRcIixmdW5jdGlvbigpe0Eobi5zZWxlY3QodGhpcyksdCx7aXNUcmFuc2l0aW9uaW5nOiExfSl9KSksVy5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLGE9Yy5lbnN1cmVTaW5nbGUoaSxcInBhdGhcIixcInN1cmZhY2VcIixmdW5jdGlvbih0KXt0LnN0eWxlKFwicG9pbnRlci1ldmVudHNcIixcImFsbFwiKX0pO3IucnB4MD1qKHIueTApLHIucnB4MT1qKHIueTEpLHIueG1pZD0oci54MCtyLngxKS8yLHIucHhtaWQ9VihyLnJweDEsci54bWlkKSxyLm1pZGFuZ2xlPS0oci54bWlkLU1hdGguUEkvMiksci5oYWxmYW5nbGU9LjUqTWF0aC5taW4oYy5hbmdsZURlbHRhKHIueDAsci54MSl8fE1hdGguUEksTWF0aC5QSSksci5yaW5nPTEtci5ycHgwL3IucnB4MSxyLnJJbnNjcmliZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10LnJweDAmJnQueG1pZD09PU1hdGguUEk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEvKDErMS9NYXRoLnNpbih0LmhhbGZhbmdsZSkpLHQucmluZy8yKSl9KHIpLHU/YS50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKFwiZFwiLGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9RFtrKHQpXSxpPXt4MDp0LngwLHgxOnQueDEscnB4MDp0LnJweDAscnB4MTp0LnJweDF9O2lmKHIpZT1yO2Vsc2UgaWYoSSlpZih0LnBhcmVudClpZihHKXt2YXIgYT10LngxPkc/MipNYXRoLlBJOjA7ZT17eDA6YSx4MTphfX1lbHNlIGU9e3JweDA6TCxycHgxOkx9LGMuZXh0ZW5kRmxhdChlLFgodCkpO2Vsc2UgZT17cnB4MDowLHJweDE6MH07ZWxzZSBlPXt4MDowLHgxOjB9O3JldHVybiBuLmludGVycG9sYXRlKGUsaSl9KHQpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gVShlKHQpKX19KTphLmF0dHIoXCJkXCIsVSksaS5jYWxsKFQsdCxlKS5jYWxsKEEsdCx7aXNUcmFuc2l0aW9uaW5nOnQuX3RyYW5zaXRpb25pbmd9KSxhLmNhbGwodixyLG0pO3ZhciBmPWMuZW5zdXJlU2luZ2xlKGksXCJnXCIsXCJzbGljZXRleHRcIikseT1jLmVuc3VyZVNpbmdsZShmLFwidGV4dFwiLFwiXCIsZnVuY3Rpb24odCl7dC5hdHRyKFwiZGF0YS1ub3RleFwiLDEpfSk7eS50ZXh0KGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLnRleHRpbmZvO2lmKCFufHxcIm5vbmVcIj09PW4pcmV0dXJuXCJcIjt2YXIgaT10LmRhdGEuZGF0YSxhPXIuc2VwYXJhdG9ycyxvPW4uc3BsaXQoXCIrXCIpLHM9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1vLmluZGV4T2YodCl9LGw9W107cyhcImxhYmVsXCIpJiZpLmxhYmVsJiZsLnB1c2goaS5sYWJlbCk7aS5oYXNPd25Qcm9wZXJ0eShcInZcIikmJnMoXCJ2YWx1ZVwiKSYmbC5wdXNoKGcoaS52LGEpKTtpZihzKFwidGV4dFwiKSl7dmFyIHU9Yy5jYXN0T3B0aW9uKGUsaS5pLFwidGV4dFwiKTt1JiZsLnB1c2godSl9cmV0dXJuIGwuam9pbihcIjxicj5cIil9KHIsbSxvKSkuY2xhc3NlZChcInNsaWNldGV4dFwiLCEwKS5hdHRyKFwidGV4dC1hbmNob3JcIixcIm1pZGRsZVwiKS5jYWxsKGwuZm9udCxiKHIpP2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLmRhdGEuZGF0YS5pLGk9Yy5jYXN0T3B0aW9uKHQsbixcIm91dHNpZGV0ZXh0Zm9udC5jb2xvclwiKXx8Yy5jYXN0T3B0aW9uKHQsbixcInRleHRmb250LmNvbG9yXCIpfHxyLmNvbG9yLGE9Yy5jYXN0T3B0aW9uKHQsbixcIm91dHNpZGV0ZXh0Zm9udC5mYW1pbHlcIil8fGMuY2FzdE9wdGlvbih0LG4sXCJ0ZXh0Zm9udC5mYW1pbHlcIil8fHIuZmFtaWx5LG89Yy5jYXN0T3B0aW9uKHQsbixcIm91dHNpZGV0ZXh0Zm9udC5zaXplXCIpfHxjLmNhc3RPcHRpb24odCxuLFwidGV4dGZvbnQuc2l6ZVwiKXx8ci5zaXplO3JldHVybntjb2xvcjppLGZhbWlseTphLHNpemU6b319KG0scixvLmZvbnQpOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLmRhdGEuZGF0YSxpPW4uaSxhPWMuY2FzdE9wdGlvbih0LGksXCJpbnNpZGV0ZXh0Zm9udC5jb2xvclwiKTshYSYmdC5faW5wdXQudGV4dGZvbnQmJihhPWMuY2FzdE9wdGlvbih0Ll9pbnB1dCxpLFwidGV4dGZvbnQuY29sb3JcIikpO3ZhciBvPWMuY2FzdE9wdGlvbih0LGksXCJpbnNpZGV0ZXh0Zm9udC5mYW1pbHlcIil8fGMuY2FzdE9wdGlvbih0LGksXCJ0ZXh0Zm9udC5mYW1pbHlcIil8fHIuZmFtaWx5LGw9Yy5jYXN0T3B0aW9uKHQsaSxcImluc2lkZXRleHRmb250LnNpemVcIil8fGMuY2FzdE9wdGlvbih0LGksXCJ0ZXh0Zm9udC5zaXplXCIpfHxyLnNpemU7cmV0dXJue2NvbG9yOmF8fHMuY29udHJhc3Qobi5jb2xvciksZmFtaWx5Om8sc2l6ZTpsfX0obSxyLG8uZm9udCkpLmNhbGwoaC5jb252ZXJ0VG9Uc3BhbnMsdCk7dmFyIHg9bC5iQm94KHkubm9kZSgpKTtyLnRyYW5zZm9ybT1kKHgscixwKSxyLnRyYW5zbGF0ZVg9cShyKSxyLnRyYW5zbGF0ZVk9SChyKTt2YXIgXz1mdW5jdGlvbih0LGUpe3JldHVyblwidHJhbnNsYXRlKFwiK3QudHJhbnNsYXRlWCtcIixcIit0LnRyYW5zbGF0ZVkrXCIpXCIrKHQudHJhbnNmb3JtLnNjYWxlPDE/XCJzY2FsZShcIit0LnRyYW5zZm9ybS5zY2FsZStcIilcIjpcIlwiKSsodC50cmFuc2Zvcm0ucm90YXRlP1wicm90YXRlKFwiK3QudHJhbnNmb3JtLnJvdGF0ZStcIilcIjpcIlwiKStcInRyYW5zbGF0ZShcIistKGUubGVmdCtlLnJpZ2h0KS8yK1wiLFwiKy0oZS50b3ArZS5ib3R0b20pLzIrXCIpXCJ9O3U/eS50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7dmFyIGUscj1EW2sodCldLGk9dC50cmFuc2Zvcm07aWYocillPXI7ZWxzZSBpZihlPXtycHgxOnQucnB4MSx0cmFuc2Zvcm06e3NjYWxlOjAscm90YXRlOmkucm90YXRlLHJDZW50ZXI6aS5yQ2VudGVyLHg6aS54LHk6aS55fX0sSSlpZih0LnBhcmVudClpZihHKXt2YXIgYT10LngxPkc/MipNYXRoLlBJOjA7ZS54MD1lLngxPWF9ZWxzZSBjLmV4dGVuZEZsYXQoZSxYKHQpKTtlbHNlIGUueDA9ZS54MT0wO2Vsc2UgZS54MD1lLngxPTA7dmFyIG89bi5pbnRlcnBvbGF0ZShlLnJweDEsdC5ycHgxKSxzPW4uaW50ZXJwb2xhdGUoZS54MCx0LngwKSxsPW4uaW50ZXJwb2xhdGUoZS54MSx0LngxKSx1PW4uaW50ZXJwb2xhdGUoZS50cmFuc2Zvcm0uc2NhbGUsaS5zY2FsZSksaD1uLmludGVycG9sYXRlKGUudHJhbnNmb3JtLnJvdGF0ZSxpLnJvdGF0ZSksZj0wPT09aS5yQ2VudGVyPzM6MD09PWUudHJhbnNmb3JtLnJDZW50ZXI/MS8zOjEscD1uLmludGVycG9sYXRlKGUudHJhbnNmb3JtLnJDZW50ZXIsaS5yQ2VudGVyKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9byh0KSxyPXModCksbj1sKHQpLGE9ZnVuY3Rpb24odCl7cmV0dXJuIHAoTWF0aC5wb3codCxmKSl9KHQpLGM9e3B4bWlkOlYoZSwocituKS8yKSx0cmFuc2Zvcm06e3JDZW50ZXI6YSx4OmkueCx5OmkueX19LGQ9e3JweDE6byh0KSx0cmFuc2xhdGVYOnEoYyksdHJhbnNsYXRlWTpIKGMpLHRyYW5zZm9ybTp7c2NhbGU6dSh0KSxyb3RhdGU6aCh0KSxyQ2VudGVyOmF9fTtyZXR1cm4gZH19KHQpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gXyhlKHQpLHgpfX0pOnkuYXR0cihcInRyYW5zZm9ybVwiLF8ocix4KSl9KX1mdW5jdGlvbiB4KHQsZSl7dmFyIHI7cmV0dXJuIGUmJnQuZWFjaEFmdGVyKGZ1bmN0aW9uKHQpe2lmKGsodCk9PT1lKXJldHVybiByPXQuY29weSgpfSkscnx8dH1mdW5jdGlvbiBiKHQpe3JldHVyblwiXCI9PT10LmRhdGEuZGF0YS5waWR9ZnVuY3Rpb24gXyh0KXtyZXR1cm4hdC5wYXJlbnR9ZnVuY3Rpb24gdyh0KXtyZXR1cm4hdC5jaGlsZHJlbn1mdW5jdGlvbiBrKHQpe3JldHVybiB0LmRhdGEuZGF0YS5pZH1mdW5jdGlvbiBBKHQsZSxyKXt2YXIgbj10LmRhdHVtKCksaT0ocnx8e30pLmlzVHJhbnNpdGlvbmluZztmKHQsaXx8dyhuKXx8YihuKT9udWxsOlwicG9pbnRlclwiKX1mdW5jdGlvbiBUKHQsZSxyKXt2YXIgaT1yWzBdLHM9aS50cmFjZTtcIl9oYXNIb3ZlckxhYmVsXCJpbiBzfHwocy5faGFzSG92ZXJMYWJlbD0hMSksXCJfaGFzSG92ZXJFdmVudFwiaW4gc3x8KHMuX2hhc0hvdmVyRXZlbnQ9ITEpLHQub24oXCJtb3VzZW92ZXJcIixmdW5jdGlvbih0KXt2YXIgcj1lLl9mdWxsTGF5b3V0O2lmKCFlLl9kcmFnZ2luZyYmITEhPT1yLmhvdmVybW9kZSl7dmFyIGE9ZS5fZnVsbERhdGFbcy5pbmRleF0sbD10LmRhdGEuZGF0YSx1PWwuaSxoPWZ1bmN0aW9uKHQpe3JldHVybiBjLmNhc3RPcHRpb24oYSx1LHQpfSxmPWgoXCJob3ZlcnRlbXBsYXRlXCIpLHA9by5jYXN0SG92ZXJpbmZvKGEscix1KSxkPXIuc2VwYXJhdG9ycztpZihmfHxwJiZcIm5vbmVcIiE9PXAmJlwic2tpcFwiIT09cCl7dmFyIHY9dC5ySW5zY3JpYmVkLG09aS5jeCt0LnB4bWlkWzBdKigxLXYpLHk9aS5jeSt0LnB4bWlkWzFdKigxLXYpLHg9e30sYj1bXSxfPVtdLHc9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1iLmluZGV4T2YodCl9O3AmJihiPVwiYWxsXCI9PT1wP2EuX21vZHVsZS5hdHRyaWJ1dGVzLmhvdmVyaW5mby5mbGFnczpwLnNwbGl0KFwiK1wiKSkseC5sYWJlbD1sLmxhYmVsLHcoXCJsYWJlbFwiKSYmeC5sYWJlbCYmXy5wdXNoKHgubGFiZWwpLGwuaGFzT3duUHJvcGVydHkoXCJ2XCIpJiYoeC52YWx1ZT1sLnYseC52YWx1ZUxhYmVsPWcoeC52YWx1ZSxkKSx3KFwidmFsdWVcIikmJl8ucHVzaCh4LnZhbHVlTGFiZWwpKSx4LnRleHQ9aChcImhvdmVydGV4dFwiKXx8aChcInRleHRcIiksdyhcInRleHRcIikmJngudGV4dCYmXy5wdXNoKHgudGV4dCksby5sb25lSG92ZXIoe3RyYWNlOmEseDA6bS12KnQucnB4MSx4MTptK3YqdC5ycHgxLHk6eSxpZGVhbEFsaWduOnQucHhtaWRbMF08MD9cImxlZnRcIjpcInJpZ2h0XCIsdGV4dDpfLmpvaW4oXCI8YnI+XCIpLG5hbWU6Znx8dyhcIm5hbWVcIik/YS5uYW1lOnZvaWQgMCxjb2xvcjpoKFwiaG92ZXJsYWJlbC5iZ2NvbG9yXCIpfHxsLmNvbG9yLGJvcmRlckNvbG9yOmgoXCJob3ZlcmxhYmVsLmJvcmRlcmNvbG9yXCIpLGZvbnRGYW1pbHk6aChcImhvdmVybGFiZWwuZm9udC5mYW1pbHlcIiksZm9udFNpemU6aChcImhvdmVybGFiZWwuZm9udC5zaXplXCIpLGZvbnRDb2xvcjpoKFwiaG92ZXJsYWJlbC5mb250LmNvbG9yXCIpLG5hbWVMZW5ndGg6aChcImhvdmVybGFiZWwubmFtZWxlbmd0aFwiKSx0ZXh0QWxpZ246aChcImhvdmVybGFiZWwuYWxpZ25cIiksaG92ZXJ0ZW1wbGF0ZTpmLGhvdmVydGVtcGxhdGVMYWJlbHM6eCxldmVudERhdGE6W00odCxhKV19LHtjb250YWluZXI6ci5faG92ZXJsYXllci5ub2RlKCksb3V0ZXJDb250YWluZXI6ci5fcGFwZXIubm9kZSgpLGdkOmV9KSxzLl9oYXNIb3ZlckxhYmVsPSEwfXMuX2hhc0hvdmVyRXZlbnQ9ITAsZS5lbWl0KFwicGxvdGx5X2hvdmVyXCIse3BvaW50czpbTSh0LGEpXSxldmVudDpuLmV2ZW50fSl9fSksdC5vbihcIm1vdXNlb3V0XCIsZnVuY3Rpb24odCl7dmFyIHI9ZS5fZnVsbExheW91dCxpPWUuX2Z1bGxEYXRhW3MuaW5kZXhdLGE9bi5zZWxlY3QodGhpcykuZGF0dW0oKTtzLl9oYXNIb3ZlckV2ZW50JiYodC5vcmlnaW5hbEV2ZW50PW4uZXZlbnQsZS5lbWl0KFwicGxvdGx5X3VuaG92ZXJcIix7cG9pbnRzOltNKGEsaSldLGV2ZW50Om4uZXZlbnR9KSxzLl9oYXNIb3ZlckV2ZW50PSExKSxzLl9oYXNIb3ZlckxhYmVsJiYoby5sb25lVW5ob3ZlcihyLl9ob3ZlcmxheWVyLm5vZGUoKSkscy5faGFzSG92ZXJMYWJlbD0hMSl9KSx0Lm9uKFwiY2xpY2tcIixmdW5jdGlvbih0KXt2YXIgcj1lLl9mdWxsTGF5b3V0LGw9ZS5fZnVsbERhdGFbcy5pbmRleF07aWYoITE9PT11LnRyaWdnZXJIYW5kbGVyKGUsXCJwbG90bHlfc3VuYnVyc3RjbGlja1wiLHtwb2ludHM6W00odCxsKV0sZXZlbnQ6bi5ldmVudH0pfHx3KHQpfHxiKHQpKXIuaG92ZXJtb2RlJiYoZS5faG92ZXJkYXRhPVtNKHQsbCldLG8uY2xpY2soZSxuLmV2ZW50KSk7ZWxzZSBpZighZS5fZHJhZ2dpbmcmJiFlLl90cmFuc2l0aW9uaW5nKXthLmNhbGwoXCJfc3RvcmVEaXJlY3RHVUlFZGl0XCIsbCxyLl90cmFjZVByZUdVSVtsLnVpZF0se2xldmVsOmwubGV2ZWx9KTt2YXIgYz1pLmhpZXJhcmNoeSxoPWsodCksZj1fKHQpP2Z1bmN0aW9uKHQsZSl7dmFyIHI7cmV0dXJuIHQuZWFjaEFmdGVyKGZ1bmN0aW9uKHQpe2Zvcih2YXIgbj10LmNoaWxkcmVufHxbXSxpPTA7aTxuLmxlbmd0aDtpKyspaWYoayhuW2ldKT09PWUpcmV0dXJuIHI9dC5jb3B5KCl9KSxyfHx0fShjLGgpOngoYyxoKSxwPXtkYXRhOlt7bGV2ZWw6ayhmKX1dLHRyYWNlczpbcy5pbmRleF19LGQ9e2ZyYW1lOntyZWRyYXc6ITEsZHVyYXRpb246bS5DTElDS19UUkFOU0lUSU9OX1RJTUV9LHRyYW5zaXRpb246e2R1cmF0aW9uOm0uQ0xJQ0tfVFJBTlNJVElPTl9USU1FLGVhc2luZzptLkNMSUNLX1RSQU5TSVRJT05fRUFTSU5HfSxtb2RlOlwiaW1tZWRpYXRlXCIsZnJvbWN1cnJlbnQ6ITB9O28ubG9uZVVuaG92ZXIoci5faG92ZXJsYXllci5ub2RlKCkpLGEuY2FsbChcImFuaW1hdGVcIixlLHAsZCl9fSl9ZnVuY3Rpb24gTSh0LGUpe3ZhciByPXQuZGF0YS5kYXRhLG49e2N1cnZlTnVtYmVyOmUuaW5kZXgscG9pbnROdW1iZXI6ci5pLGRhdGE6ZS5faW5wdXQsZnVsbERhdGE6ZX07cmV0dXJuIHAobixlLHIuaSksbn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbyxzPXQuX2Z1bGxMYXlvdXQuX3N1bmJ1cnN0bGF5ZXIsbD0hcixjPXImJnIuZHVyYXRpb24+MDsoKGE9cy5zZWxlY3RBbGwoXCJnLnRyYWNlLnN1bmJ1cnN0XCIpLmRhdGEoZSxmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS51aWR9KSkuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQoXCJ0cmFjZVwiLCEwKS5jbGFzc2VkKFwic3VuYnVyc3RcIiwhMCkuYXR0cihcInN0cm9rZS1saW5lam9pblwiLFwicm91bmRcIiksYS5vcmRlcigpLGMpPyhpJiYobz1pKCkpLG4udHJhbnNpdGlvbigpLmR1cmF0aW9uKHIuZHVyYXRpb24pLmVhc2Uoci5lYXNpbmcpLmVhY2goXCJlbmRcIixmdW5jdGlvbigpe28mJm8oKX0pLmVhY2goXCJpbnRlcnJ1cHRcIixmdW5jdGlvbigpe28mJm8oKX0pLmVhY2goZnVuY3Rpb24oKXtzLnNlbGVjdEFsbChcImcudHJhY2VcIikuZWFjaChmdW5jdGlvbihlKXt5KHQsZSx0aGlzLHIpfSl9KSk6YS5lYWNoKGZ1bmN0aW9uKGUpe3kodCxlLHRoaXMscil9KTtsJiZhLmV4aXQoKS5yZW1vdmUoKX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9jb21wb25lbnRzL2Z4XCI6NjE3LFwiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzXCI6NjEzLFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2V2ZW50c1wiOjY5MCxcIi4uLy4uL2xpYi9zZXRjdXJzb3JcIjo3MjEsXCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHNcIjo3MjUsXCIuLi8uLi9yZWdpc3RyeVwiOjgyOSxcIi4uL3BpZS9oZWxwZXJzXCI6MTAzMSxcIi4uL3BpZS9wbG90XCI6MTAzNSxcIi4vY29uc3RhbnRzXCI6MTE0MixcIi4vc3R5bGVcIjoxMTQ4LGQzOjE1NSxcImQzLWhpZXJhcmNoeVwiOjE0OH1dLDExNDg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZDNcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxhPXQoXCIuLi8uLi9saWJcIik7ZnVuY3Rpb24gbyh0LGUscil7dmFyIG49ZS5kYXRhLmRhdGEsbz0hZS5jaGlsZHJlbixzPW4uaSxsPWEuY2FzdE9wdGlvbihyLHMsXCJtYXJrZXIubGluZS5jb2xvclwiKXx8aS5kZWZhdWx0TGluZSxjPWEuY2FzdE9wdGlvbihyLHMsXCJtYXJrZXIubGluZS53aWR0aFwiKXx8MDt0LnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsYykuY2FsbChpLmZpbGwsbi5jb2xvcikuY2FsbChpLnN0cm9rZSxsKS5zdHlsZShcIm9wYWNpdHlcIixvP3IubGVhZi5vcGFjaXR5Om51bGwpfWUuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCl7dC5fZnVsbExheW91dC5fc3VuYnVyc3RsYXllci5zZWxlY3RBbGwoXCIudHJhY2VcIikuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPXRbMF0udHJhY2U7ZS5zdHlsZShcIm9wYWNpdHlcIixyLm9wYWNpdHkpLGUuc2VsZWN0QWxsKFwicGF0aC5zdXJmYWNlXCIpLmVhY2goZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuY2FsbChvLHQscil9KX0pfSxzdHlsZU9uZTpvfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2xpYlwiOjcwMSxkMzoxNTV9XSwxMTQ5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksaT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXNcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJ0ZW1wbGF0ZV9hdHRyaWJ1dGVzXCIpLHM9dChcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIiksbD10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LGM9dChcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIikub3ZlcnJpZGVBbGw7ZnVuY3Rpb24gdSh0KXtyZXR1cm57c2hvdzp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxzdGFydDp7dmFsVHlwZTpcIm51bWJlclwiLGRmbHQ6bnVsbCxlZGl0VHlwZTpcInBsb3RcIn0sZW5kOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDpudWxsLGVkaXRUeXBlOlwicGxvdFwifSxzaXplOnt2YWxUeXBlOlwibnVtYmVyXCIsZGZsdDpudWxsLG1pbjowLGVkaXRUeXBlOlwicGxvdFwifSxwcm9qZWN0Ont4Ont2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITF9LHk6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sejp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfX0sY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6bi5kZWZhdWx0TGluZX0sdXNlY29sb3JtYXA6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MSxtYXg6MTYsZGZsdDoyfSxoaWdobGlnaHQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMH0saGlnaGxpZ2h0Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGRmbHQ6bi5kZWZhdWx0TGluZX0saGlnaGxpZ2h0d2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MSxtYXg6MTYsZGZsdDoyfX19dmFyIGg9ZS5leHBvcnRzPWMobCh7ejp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIn0seDp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIn0seTp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIn0sdGV4dDp7dmFsVHlwZTpcInN0cmluZ1wiLGRmbHQ6XCJcIixhcnJheU9rOiEwfSxob3ZlcnRleHQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsYXJyYXlPazohMH0saG92ZXJ0ZW1wbGF0ZTpvKCksY29ubmVjdGdhcHM6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMSxlZGl0VHlwZTpcImNhbGNcIn0sc3VyZmFjZWNvbG9yOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwifX0saShcIlwiLHtjb2xvckF0dHI6XCJ6IG9yIHN1cmZhY2Vjb2xvclwiLHNob3dTY2FsZURmbHQ6ITAsYXV0b0NvbG9yRGZsdDohMSxlZGl0VHlwZU92ZXJyaWRlOlwiY2FsY1wifSkse2NvbG9yYmFyOmEsY29udG91cnM6e3g6dSgpLHk6dSgpLHo6dSgpfSxoaWRlc3VyZmFjZTp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiExfSxsaWdodHBvc2l0aW9uOnt4Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOi0xZTUsbWF4OjFlNSxkZmx0OjEwfSx5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOi0xZTUsbWF4OjFlNSxkZmx0OjFlNH0sejp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjotMWU1LG1heDoxZTUsZGZsdDowfX0sbGlnaHRpbmc6e2FtYmllbnQ6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MSxkZmx0Oi44fSxkaWZmdXNlOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDouOH0sc3BlY3VsYXI6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxtYXg6MixkZmx0Oi4wNX0scm91Z2huZXNzOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDouNX0sZnJlc25lbDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDo1LGRmbHQ6LjJ9fSxvcGFjaXR5Ont2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDoxfSxfZGVwcmVjYXRlZDp7emF1dG86bCh7fSxpLnphdXRvLHt9KSx6bWluOmwoe30saS56bWluLHt9KSx6bWF4Omwoe30saS56bWF4LHt9KX0saG92ZXJpbmZvOmwoe30scy5ob3ZlcmluZm8pfSksXCJjYWxjXCIsXCJuZXN0ZWRcIik7aC54LmVkaXRUeXBlPWgueS5lZGl0VHlwZT1oLnouZWRpdFR5cGU9XCJjYWxjK2NsZWFyQXhpc1R5cGVzXCIsaC50cmFuc2Zvcm1zPXZvaWQgMH0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlc1wiOjU3OSxcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCI6NTg1LFwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcnRlbXBsYXRlX2F0dHJpYnV0ZXNcIjo2MTYsXCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlc1wiOjczMixcIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXNcIjo3NDZ9XSwxMTUwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Uuc3VyZmFjZWNvbG9yP24odCxlLHt2YWxzOmUuc3VyZmFjZWNvbG9yLGNvbnRhaW5lclN0cjpcIlwiLGNMZXR0ZXI6XCJjXCJ9KTpuKHQsZSx7dmFsczplLnosY29udGFpbmVyU3RyOlwiXCIsY0xldHRlcjpcImNcIn0pfX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGNcIjo1ODZ9XSwxMTUxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImdsLXN1cmZhY2UzZFwiKSxpPXQoXCJuZGFycmF5XCIpLGE9dChcIm5kYXJyYXktaG9tb2dyYXBoeVwiKSxvPXQoXCJuZGFycmF5LWZpbGxcIikscz10KFwiLi4vLi4vbGliXCIpLmlzQXJyYXlPclR5cGVkQXJyYXksbD10KFwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvclwiKS5wYXJzZUNvbG9yU2NhbGUsYz10KFwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiKSx1PXQoXCIuLi9oZWF0bWFwL2ludGVycDJkXCIpLGg9dChcIi4uL2hlYXRtYXAvZmluZF9lbXB0aWVzXCIpO2Z1bmN0aW9uIGYodCxlLHIpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1yLHRoaXMuc3VyZmFjZT1lLHRoaXMuZGF0YT1udWxsLHRoaXMuc2hvd0NvbnRvdXI9WyExLCExLCExXSx0aGlzLmNvbnRvdXJTdGFydD1bbnVsbCxudWxsLG51bGxdLHRoaXMuY29udG91ckVuZD1bbnVsbCxudWxsLG51bGxdLHRoaXMuY29udG91clNpemU9WzAsMCwwXSx0aGlzLm1pblZhbHVlcz1bMS8wLDEvMCwxLzBdLHRoaXMubWF4VmFsdWVzPVstMS8wLC0xLzAsLTEvMF0sdGhpcy5kYXRhU2NhbGVYPTEsdGhpcy5kYXRhU2NhbGVZPTEsdGhpcy5yZWZpbmVEYXRhPSEwLHRoaXMub2JqZWN0T2Zmc2V0PVswLDAsMF19dmFyIHA9Zi5wcm90b3R5cGU7cC5nZXRYYXQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9cyh0aGlzLmRhdGEueCk/cyh0aGlzLmRhdGEueFswXSk/dGhpcy5kYXRhLnhbZV1bdF06dGhpcy5kYXRhLnhbdF06dDtyZXR1cm4gdm9pZCAwPT09cj9pOm4uZDJsKGksMCxyKX0scC5nZXRZYXQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9cyh0aGlzLmRhdGEueSk/cyh0aGlzLmRhdGEueVswXSk/dGhpcy5kYXRhLnlbZV1bdF06dGhpcy5kYXRhLnlbZV06ZTtyZXR1cm4gdm9pZCAwPT09cj9pOm4uZDJsKGksMCxyKX0scC5nZXRaYXQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5kYXRhLnpbZV1bdF07cmV0dXJuIG51bGw9PT1pJiZ0aGlzLmRhdGEuY29ubmVjdGdhcHMmJnRoaXMuZGF0YS5faW50ZXJwb2xhdGVkWiYmKGk9dGhpcy5kYXRhLl9pbnRlcnBvbGF0ZWRaW2VdW3RdKSx2b2lkIDA9PT1yP2k6bi5kMmwoaSwwLHIpfSxwLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLnN1cmZhY2Upe3ZhciBlPSh0LmRhdGEuaW5kZXhbMF0tMSkvdGhpcy5kYXRhU2NhbGVYLTEscj0odC5kYXRhLmluZGV4WzFdLTEpL3RoaXMuZGF0YVNjYWxlWS0xLG49TWF0aC5tYXgoTWF0aC5taW4oTWF0aC5yb3VuZChlKSx0aGlzLmRhdGEuelswXS5sZW5ndGgtMSksMCksaT1NYXRoLm1heChNYXRoLm1pbihNYXRoLnJvdW5kKHIpLHRoaXMuZGF0YS5feWxlbmd0aC0xKSwwKTt0LmluZGV4PVtuLGldLHQudHJhY2VDb29yZGluYXRlPVt0aGlzLmdldFhhdChuLGkpLHRoaXMuZ2V0WWF0KG4saSksdGhpcy5nZXRaYXQobixpKV0sdC5kYXRhQ29vcmRpbmF0ZT1bdGhpcy5nZXRYYXQobixpLHRoaXMuZGF0YS54Y2FsZW5kYXIsdGhpcy5zY2VuZS5mdWxsU2NlbmVMYXlvdXQueGF4aXMpLHRoaXMuZ2V0WWF0KG4saSx0aGlzLmRhdGEueWNhbGVuZGFyLHRoaXMuc2NlbmUuZnVsbFNjZW5lTGF5b3V0LnlheGlzKSx0aGlzLmdldFphdChuLGksdGhpcy5kYXRhLnpjYWxlbmRhcix0aGlzLnNjZW5lLmZ1bGxTY2VuZUxheW91dC56YXhpcyldO2Zvcih2YXIgYT0wO2E8MzthKyspe3ZhciBvPXQuZGF0YUNvb3JkaW5hdGVbYV07bnVsbCE9byYmKHQuZGF0YUNvb3JkaW5hdGVbYV0qPXRoaXMuc2NlbmUuZGF0YVNjYWxlW2FdKX12YXIgcz10aGlzLmRhdGEuaG92ZXJ0ZXh0fHx0aGlzLmRhdGEudGV4dDtyZXR1cm4gQXJyYXkuaXNBcnJheShzKSYmc1tpXSYmdm9pZCAwIT09c1tpXVtuXT90LnRleHRMYWJlbD1zW2ldW25dOnQudGV4dExhYmVsPXN8fFwiXCIsdC5kYXRhLmRhdGFDb29yZGluYXRlPXQuZGF0YUNvb3JkaW5hdGUuc2xpY2UoKSx0aGlzLnN1cmZhY2UuaGlnaGxpZ2h0KHQuZGF0YSksdGhpcy5zY2VuZS5nbHBsb3Quc3Bpa2VzLnBvc2l0aW9uPXQuZGF0YUNvb3JkaW5hdGUsITB9fTt2YXIgZD1bMiwzLDUsNywxMSwxMywxNywxOSwyMywyOSwzMSwzNyw0MSw0Myw0Nyw1Myw1OSw2MSw2Nyw3MSw3Myw3OSw4Myw4OSw5NywxMDEsMTAzLDEwNywxMDksMTEzLDEyNywxMzEsMTM3LDEzOSwxNDksMTUxLDE1NywxNjMsMTY3LDE3MywxNzksMTgxLDE5MSwxOTMsMTk3LDE5OSwyMTEsMjIzLDIyNywyMjksMjMzLDIzOSwyNDEsMjUxLDI1NywyNjMsMjY5LDI3MSwyNzcsMjgxLDI4MywyOTMsMzA3LDMxMSwzMTMsMzE3LDMzMSwzMzcsMzQ3LDM0OSwzNTMsMzU5LDM2NywzNzMsMzc5LDM4MywzODksMzk3LDQwMSw0MDksNDE5LDQyMSw0MzEsNDMzLDQzOSw0NDMsNDQ5LDQ1Nyw0NjEsNDYzLDQ2Nyw0NzksNDg3LDQ5MSw0OTksNTAzLDUwOSw1MjEsNTIzLDU0MSw1NDcsNTU3LDU2Myw1NjksNTcxLDU3Nyw1ODcsNTkzLDU5OSw2MDEsNjA3LDYxMyw2MTcsNjE5LDYzMSw2NDEsNjQzLDY0Nyw2NTMsNjU5LDY2MSw2NzMsNjc3LDY4Myw2OTEsNzAxLDcwOSw3MTksNzI3LDczMyw3MzksNzQzLDc1MSw3NTcsNzYxLDc2OSw3NzMsNzg3LDc5Nyw4MDksODExLDgyMSw4MjMsODI3LDgyOSw4MzksODUzLDg1Nyw4NTksODYzLDg3Nyw4ODEsODgzLDg4Nyw5MDcsOTExLDkxOSw5MjksOTM3LDk0MSw5NDcsOTUzLDk2Nyw5NzEsOTc3LDk4Myw5OTEsOTk3LDEwMDksMTAxMywxMDE5LDEwMjEsMTAzMSwxMDMzLDEwMzksMTA0OSwxMDUxLDEwNjEsMTA2MywxMDY5LDEwODcsMTA5MSwxMDkzLDEwOTcsMTEwMywxMTA5LDExMTcsMTEyMywxMTI5LDExNTEsMTE1MywxMTYzLDExNzEsMTE4MSwxMTg3LDExOTMsMTIwMSwxMjEzLDEyMTcsMTIyMywxMjI5LDEyMzEsMTIzNywxMjQ5LDEyNTksMTI3NywxMjc5LDEyODMsMTI4OSwxMjkxLDEyOTcsMTMwMSwxMzAzLDEzMDcsMTMxOSwxMzIxLDEzMjcsMTM2MSwxMzY3LDEzNzMsMTM4MSwxMzk5LDE0MDksMTQyMywxNDI3LDE0MjksMTQzMywxNDM5LDE0NDcsMTQ1MSwxNDUzLDE0NTksMTQ3MSwxNDgxLDE0ODMsMTQ4NywxNDg5LDE0OTMsMTQ5OSwxNTExLDE1MjMsMTUzMSwxNTQzLDE1NDksMTU1MywxNTU5LDE1NjcsMTU3MSwxNTc5LDE1ODMsMTU5NywxNjAxLDE2MDcsMTYwOSwxNjEzLDE2MTksMTYyMSwxNjI3LDE2MzcsMTY1NywxNjYzLDE2NjcsMTY2OSwxNjkzLDE2OTcsMTY5OSwxNzA5LDE3MjEsMTcyMywxNzMzLDE3NDEsMTc0NywxNzUzLDE3NTksMTc3NywxNzgzLDE3ODcsMTc4OSwxODAxLDE4MTEsMTgyMywxODMxLDE4NDcsMTg2MSwxODY3LDE4NzEsMTg3MywxODc3LDE4NzksMTg4OSwxOTAxLDE5MDcsMTkxMywxOTMxLDE5MzMsMTk0OSwxOTUxLDE5NzMsMTk3OSwxOTg3LDE5OTMsMTk5NywxOTk5LDIwMDMsMjAxMSwyMDE3LDIwMjcsMjAyOSwyMDM5LDIwNTMsMjA2MywyMDY5LDIwODEsMjA4MywyMDg3LDIwODksMjA5OSwyMTExLDIxMTMsMjEyOSwyMTMxLDIxMzcsMjE0MSwyMTQzLDIxNTMsMjE2MSwyMTc5LDIyMDMsMjIwNywyMjEzLDIyMjEsMjIzNywyMjM5LDIyNDMsMjI1MSwyMjY3LDIyNjksMjI3MywyMjgxLDIyODcsMjI5MywyMjk3LDIzMDksMjMxMSwyMzMzLDIzMzksMjM0MSwyMzQ3LDIzNTEsMjM1NywyMzcxLDIzNzcsMjM4MSwyMzgzLDIzODksMjM5MywyMzk5LDI0MTEsMjQxNywyNDIzLDI0MzcsMjQ0MSwyNDQ3LDI0NTksMjQ2NywyNDczLDI0NzcsMjUwMywyNTIxLDI1MzEsMjUzOSwyNTQzLDI1NDksMjU1MSwyNTU3LDI1NzksMjU5MSwyNTkzLDI2MDksMjYxNywyNjIxLDI2MzMsMjY0NywyNjU3LDI2NTksMjY2MywyNjcxLDI2NzcsMjY4MywyNjg3LDI2ODksMjY5MywyNjk5LDI3MDcsMjcxMSwyNzEzLDI3MTksMjcyOSwyNzMxLDI3NDEsMjc0OSwyNzUzLDI3NjcsMjc3NywyNzg5LDI3OTEsMjc5NywyODAxLDI4MDMsMjgxOSwyODMzLDI4MzcsMjg0MywyODUxLDI4NTcsMjg2MSwyODc5LDI4ODcsMjg5NywyOTAzLDI5MDksMjkxNywyOTI3LDI5MzksMjk1MywyOTU3LDI5NjMsMjk2OSwyOTcxLDI5OTldO2Z1bmN0aW9uIGcodCxlKXtpZih0PGUpcmV0dXJuIDA7Zm9yKHZhciByPTA7MD09PU1hdGguZmxvb3IodCVlKTspdC89ZSxyKys7cmV0dXJuIHJ9ZnVuY3Rpb24gdih0KXtmb3IodmFyIGU9W10scj0wO3I8ZC5sZW5ndGg7cisrKXt2YXIgbj1kW3JdO2UucHVzaChnKHQsbikpfXJldHVybiBlfWZ1bmN0aW9uIG0odCl7Zm9yKHZhciBlPXYodCkscj10LG49MDtuPGQubGVuZ3RoO24rKylpZihlW25dPjApe3I9ZFtuXTticmVha31yZXR1cm4gcn1mdW5jdGlvbiB5KHQsZSl7aWYoISh0PDF8fGU8MSkpe2Zvcih2YXIgcj12KHQpLG49dihlKSxpPTEsYT0wO2E8ZC5sZW5ndGg7YSsrKWkqPU1hdGgucG93KGRbYV0sTWF0aC5tYXgoclthXSxuW2FdKSk7cmV0dXJuIGl9fXAuY2FsY1hudW1zPWZ1bmN0aW9uKHQpe3ZhciBlLHI9W107Zm9yKGU9MTtlPHQ7ZSsrKXt2YXIgbj10aGlzLmdldFhhdChlLTEsMCksaT10aGlzLmdldFhhdChlLDApO3JbZS0xXT1pIT09biYmbnVsbCE9biYmbnVsbCE9aT9NYXRoLmFicyhpLW4pOjB9dmFyIGE9MDtmb3IoZT0xO2U8dDtlKyspYSs9cltlLTFdO2ZvcihlPTE7ZTx0O2UrKykwPT09cltlLTFdP3JbZS0xXT0xOnJbZS0xXT1NYXRoLnJvdW5kKGEvcltlLTFdKTtyZXR1cm4gcn0scC5jYWxjWW51bXM9ZnVuY3Rpb24odCl7dmFyIGUscj1bXTtmb3IoZT0xO2U8dDtlKyspe3ZhciBuPXRoaXMuZ2V0WWF0KDAsZS0xKSxpPXRoaXMuZ2V0WWF0KDAsZSk7cltlLTFdPWkhPT1uJiZudWxsIT1uJiZudWxsIT1pP01hdGguYWJzKGktbik6MH12YXIgYT0wO2ZvcihlPTE7ZTx0O2UrKylhKz1yW2UtMV07Zm9yKGU9MTtlPHQ7ZSsrKTA9PT1yW2UtMV0/cltlLTFdPTE6cltlLTFdPU1hdGgucm91bmQoYS9yW2UtMV0pO3JldHVybiByfTt2YXIgeD1bMSwyLDQsNiwxMiwyNCwzNiw0OCw2MCwxMjAsMTgwLDI0MCwzNjAsNzIwLDg0MCwxMjYwXSxiPXhbOV0sXz14WzEzXTtmdW5jdGlvbiB3KHQsZSl7Zm9yKHZhciByPSExLG49MDtuPHQubGVuZ3RoO24rKylpZihlPT09dFtuXSl7cj0hMDticmVha30hMT09PXImJnQucHVzaChlKX1wLmVzdGltYXRlU2NhbGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MStmdW5jdGlvbih0KXtpZigwIT09dC5sZW5ndGgpe2Zvcih2YXIgZT0xLHI9MDtyPHQubGVuZ3RoO3IrKyllPXkoZSx0W3JdKTtyZXR1cm4gZX19KDA9PT1lP3RoaXMuY2FsY1hudW1zKHQpOnRoaXMuY2FsY1ludW1zKHQpKTtyPGI7KXIqPTI7Zm9yKDtyPl87KXItLSxyLz1tKHIpLCsrcjxiJiYocj1fKTt2YXIgbj1NYXRoLnJvdW5kKHIvdCk7cmV0dXJuIG4+MT9uOjF9LHAucmVmaW5lQ29vcmRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmRhdGFTY2FsZVgscj10aGlzLmRhdGFTY2FsZVksbj10WzBdLnNoYXBlWzBdLG89dFswXS5zaGFwZVsxXSxzPTB8TWF0aC5mbG9vcih0WzBdLnNoYXBlWzBdKmUrMSksbD0wfE1hdGguZmxvb3IodFswXS5zaGFwZVsxXSpyKzEpLGM9MStuKzEsdT0xK28rMSxoPWkobmV3IEZsb2F0MzJBcnJheShjKnUpLFtjLHVdKSxmPTA7Zjx0Lmxlbmd0aDsrK2Ype3RoaXMuc3VyZmFjZS5wYWRGaWVsZChoLHRbZl0pO3ZhciBwPWkobmV3IEZsb2F0MzJBcnJheShzKmwpLFtzLGxdKTthKHAsaCxbZSwwLDAsMCxyLDAsMCwwLDFdKSx0W2ZdPXB9fSxwLnNldENvbnRvdXJMZXZlbHM9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbj1bW10sW10sW11dLGk9WyExLCExLCExXSxhPSExO2Zvcih0PTA7dDwzOysrdClpZih0aGlzLnNob3dDb250b3VyW3RdJiYoYT0hMCx0aGlzLmNvbnRvdXJTaXplW3RdPjAmJm51bGwhPT10aGlzLmNvbnRvdXJTdGFydFt0XSYmbnVsbCE9PXRoaXMuY29udG91ckVuZFt0XSYmdGhpcy5jb250b3VyRW5kW3RdPnRoaXMuY29udG91clN0YXJ0W3RdKSlmb3IoaVt0XT0hMCxlPXRoaXMuY29udG91clN0YXJ0W3RdO2U8dGhpcy5jb250b3VyRW5kW3RdO2UrPXRoaXMuY29udG91clNpemVbdF0pcj1lKnRoaXMuc2NlbmUuZGF0YVNjYWxlW3RdLHcoblt0XSxyKTtpZihhKXt2YXIgbz1bW10sW10sW11dO2Zvcih0PTA7dDwzOysrdCl0aGlzLnNob3dDb250b3VyW3RdJiYob1t0XT1pW3RdP25bdF06dGhpcy5zY2VuZS5jb250b3VyTGV2ZWxzW3RdKTt0aGlzLnN1cmZhY2UudXBkYXRlKHtsZXZlbHM6b30pfX0scC51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGUscixuLGEscz10aGlzLnNjZW5lLGY9cy5mdWxsU2NlbmVMYXlvdXQscD10aGlzLnN1cmZhY2UsZD10Lm9wYWNpdHksZz1sKHQsZCksdj1zLmRhdGFTY2FsZSxtPXQuelswXS5sZW5ndGgseT10Ll95bGVuZ3RoLHg9cy5jb250b3VyTGV2ZWxzO3RoaXMuZGF0YT10O3ZhciBiPVtdO2ZvcihlPTA7ZTwzO2UrKylmb3IoYltlXT1bXSxyPTA7cjxtO3IrKyliW2VdW3JdPVtdO2ZvcihyPTA7cjxtO3IrKylmb3Iobj0wO248eTtuKyspYlswXVtyXVtuXT10aGlzLmdldFhhdChyLG4sdC54Y2FsZW5kYXIsZi54YXhpcyksYlsxXVtyXVtuXT10aGlzLmdldFlhdChyLG4sdC55Y2FsZW5kYXIsZi55YXhpcyksYlsyXVtyXVtuXT10aGlzLmdldFphdChyLG4sdC56Y2FsZW5kYXIsZi56YXhpcyk7aWYodC5jb25uZWN0Z2Fwcylmb3IodC5fZW1wdHlwb2ludHM9aChiWzJdKSx1KGJbMl0sdC5fZW1wdHlwb2ludHMpLHQuX2ludGVycG9sYXRlZFo9W10scj0wO3I8bTtyKyspZm9yKHQuX2ludGVycG9sYXRlZFpbcl09W10sbj0wO248eTtuKyspdC5faW50ZXJwb2xhdGVkWltyXVtuXT1iWzJdW3JdW25dO2ZvcihlPTA7ZTwzO2UrKylmb3Iocj0wO3I8bTtyKyspZm9yKG49MDtuPHk7bisrKW51bGw9PShhPWJbZV1bcl1bbl0pP2JbZV1bcl1bbl09TmFOOmE9YltlXVtyXVtuXSo9dltlXTtmb3IoZT0wO2U8MztlKyspZm9yKHI9MDtyPG07cisrKWZvcihuPTA7bjx5O24rKyludWxsIT0oYT1iW2VdW3JdW25dKSYmKHRoaXMubWluVmFsdWVzW2VdPmEmJih0aGlzLm1pblZhbHVlc1tlXT1hKSx0aGlzLm1heFZhbHVlc1tlXTxhJiYodGhpcy5tYXhWYWx1ZXNbZV09YSkpO2ZvcihlPTA7ZTwzO2UrKyl0aGlzLm9iamVjdE9mZnNldFtlXT0uNSoodGhpcy5taW5WYWx1ZXNbZV0rdGhpcy5tYXhWYWx1ZXNbZV0pO2ZvcihlPTA7ZTwzO2UrKylmb3Iocj0wO3I8bTtyKyspZm9yKG49MDtuPHk7bisrKW51bGwhPShhPWJbZV1bcl1bbl0pJiYoYltlXVtyXVtuXS09dGhpcy5vYmplY3RPZmZzZXRbZV0pO3ZhciB3PVtpKG5ldyBGbG9hdDMyQXJyYXkobSp5KSxbbSx5XSksaShuZXcgRmxvYXQzMkFycmF5KG0qeSksW20seV0pLGkobmV3IEZsb2F0MzJBcnJheShtKnkpLFttLHldKV07byh3WzBdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGJbMF1bdF1bZV19KSxvKHdbMV0sZnVuY3Rpb24odCxlKXtyZXR1cm4gYlsxXVt0XVtlXX0pLG8od1syXSxmdW5jdGlvbih0LGUpe3JldHVybiBiWzJdW3RdW2VdfSksYj1bXTt2YXIgaz17Y29sb3JtYXA6ZyxsZXZlbHM6W1tdLFtdLFtdXSxzaG93Q29udG91cjpbITAsITAsITBdLHNob3dTdXJmYWNlOiF0LmhpZGVzdXJmYWNlLGNvbnRvdXJQcm9qZWN0OltbITEsITEsITFdLFshMSwhMSwhMV0sWyExLCExLCExXV0sY29udG91cldpZHRoOlsxLDEsMV0sY29udG91ckNvbG9yOltbMSwxLDEsMV0sWzEsMSwxLDFdLFsxLDEsMSwxXV0sY29udG91clRpbnQ6WzEsMSwxXSxkeW5hbWljQ29sb3I6W1sxLDEsMSwxXSxbMSwxLDEsMV0sWzEsMSwxLDFdXSxkeW5hbWljV2lkdGg6WzEsMSwxXSxkeW5hbWljVGludDpbMSwxLDFdLG9wYWNpdHk6dC5vcGFjaXR5fTtpZihrLmludGVuc2l0eUJvdW5kcz1bdC5jbWluLHQuY21heF0sdC5zdXJmYWNlY29sb3Ipe3ZhciBBPWkobmV3IEZsb2F0MzJBcnJheShtKnkpLFttLHldKTtvKEEsZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5zdXJmYWNlY29sb3Jbcl1bZV19KSx3LnB1c2goQSl9ZWxzZSBrLmludGVuc2l0eUJvdW5kc1swXSo9dlsyXSxrLmludGVuc2l0eUJvdW5kc1sxXSo9dlsyXTsoXzx3WzBdLnNoYXBlWzBdfHxfPHdbMF0uc2hhcGVbMV0pJiYodGhpcy5yZWZpbmVEYXRhPSExKSwhMD09PXRoaXMucmVmaW5lRGF0YSYmKHRoaXMuZGF0YVNjYWxlWD10aGlzLmVzdGltYXRlU2NhbGUod1swXS5zaGFwZVswXSwwKSx0aGlzLmRhdGFTY2FsZVk9dGhpcy5lc3RpbWF0ZVNjYWxlKHdbMF0uc2hhcGVbMV0sMSksMT09PXRoaXMuZGF0YVNjYWxlWCYmMT09PXRoaXMuZGF0YVNjYWxlWXx8dGhpcy5yZWZpbmVDb29yZHModykpLHQuc3VyZmFjZWNvbG9yJiYoay5pbnRlbnNpdHk9dy5wb3AoKSk7dmFyIFQ9WyEwLCEwLCEwXSxNPVtcInhcIixcInlcIixcInpcIl07Zm9yKGU9MDtlPDM7KytlKXt2YXIgUz10LmNvbnRvdXJzW01bZV1dO1RbZV09Uy5oaWdobGlnaHQsay5zaG93Q29udG91cltlXT1TLnNob3d8fFMuaGlnaGxpZ2h0LGsuc2hvd0NvbnRvdXJbZV0mJihrLmNvbnRvdXJQcm9qZWN0W2VdPVtTLnByb2plY3QueCxTLnByb2plY3QueSxTLnByb2plY3Quel0sUy5zaG93Pyh0aGlzLnNob3dDb250b3VyW2VdPSEwLGsubGV2ZWxzW2VdPXhbZV0scC5oaWdobGlnaHRDb2xvcltlXT1rLmNvbnRvdXJDb2xvcltlXT1jKFMuY29sb3IpLFMudXNlY29sb3JtYXA/cC5oaWdobGlnaHRUaW50W2VdPWsuY29udG91clRpbnRbZV09MDpwLmhpZ2hsaWdodFRpbnRbZV09ay5jb250b3VyVGludFtlXT0xLGsuY29udG91cldpZHRoW2VdPVMud2lkdGgsdGhpcy5jb250b3VyU3RhcnRbZV09Uy5zdGFydCx0aGlzLmNvbnRvdXJFbmRbZV09Uy5lbmQsdGhpcy5jb250b3VyU2l6ZVtlXT1TLnNpemUpOih0aGlzLnNob3dDb250b3VyW2VdPSExLHRoaXMuY29udG91clN0YXJ0W2VdPW51bGwsdGhpcy5jb250b3VyRW5kW2VdPW51bGwsdGhpcy5jb250b3VyU2l6ZVtlXT0wKSxTLmhpZ2hsaWdodCYmKGsuZHluYW1pY0NvbG9yW2VdPWMoUy5oaWdobGlnaHRjb2xvciksay5keW5hbWljV2lkdGhbZV09Uy5oaWdobGlnaHR3aWR0aCkpfShmdW5jdGlvbih0KXt2YXIgZT10WzBdLnJnYixyPXRbdC5sZW5ndGgtMV0ucmdiO3JldHVybiBlWzBdPT09clswXSYmZVsxXT09PXJbMV0mJmVbMl09PT1yWzJdJiZlWzNdPT09clszXX0pKGcpJiYoay52ZXJ0ZXhDb2xvcj0hMCksay5vYmplY3RPZmZzZXQ9dGhpcy5vYmplY3RPZmZzZXQsay5jb29yZHM9dyxwLnVwZGF0ZShrKSxwLnZpc2libGU9dC52aXNpYmxlLHAuZW5hYmxlRHluYW1pYz1ULHAuZW5hYmxlSGlnaGxpZ2h0PVQscC5zbmFwVG9EYXRhPSEwLFwibGlnaHRpbmdcImluIHQmJihwLmFtYmllbnRMaWdodD10LmxpZ2h0aW5nLmFtYmllbnQscC5kaWZmdXNlTGlnaHQ9dC5saWdodGluZy5kaWZmdXNlLHAuc3BlY3VsYXJMaWdodD10LmxpZ2h0aW5nLnNwZWN1bGFyLHAucm91Z2huZXNzPXQubGlnaHRpbmcucm91Z2huZXNzLHAuZnJlc25lbD10LmxpZ2h0aW5nLmZyZXNuZWwpLFwibGlnaHRwb3NpdGlvblwiaW4gdCYmKHAubGlnaHRQb3NpdGlvbj1bdC5saWdodHBvc2l0aW9uLngsdC5saWdodHBvc2l0aW9uLnksdC5saWdodHBvc2l0aW9uLnpdKSxkJiZkPDEmJihwLnN1cHBvcnRzVHJhbnNwYXJlbmN5PSEwKX0scC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuc3VyZmFjZSksdGhpcy5zdXJmYWNlLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsaT1uKHtnbDpyfSksYT1uZXcgZih0LGksZS51aWQpO3JldHVybiBpLl90cmFjZT1hLGEudXBkYXRlKGUpLHQuZ2xwbG90LmFkZChpKSxhfX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvclwiOjY5OCxcIi4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIjo3MjQsXCIuLi9oZWF0bWFwL2ZpbmRfZW1wdGllc1wiOjk1NCxcIi4uL2hlYXRtYXAvaW50ZXJwMmRcIjo5NTcsXCJnbC1zdXJmYWNlM2RcIjozMTMsbmRhcnJheTo0NDMsXCJuZGFycmF5LWZpbGxcIjo0MzMsXCJuZGFycmF5LWhvbW9ncmFwaHlcIjo0MzV9XSwxMTUyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3JlZ2lzdHJ5XCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHNcIiksbz10KFwiLi9hdHRyaWJ1dGVzXCIpO2Z1bmN0aW9uIHModCxlLHIpe2UgaW4gdCYmIShyIGluIHQpJiYodFtyXT10W2VdKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7dmFyIGMsdTtmdW5jdGlvbiBoKHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxvLHIsbil9dmFyIGY9aChcInhcIikscD1oKFwieVwiKSxkPWgoXCJ6XCIpO2lmKCFkfHwhZC5sZW5ndGh8fGYmJmYubGVuZ3RoPDF8fHAmJnAubGVuZ3RoPDEpZS52aXNpYmxlPSExO2Vsc2V7ZS5feGxlbmd0aD1BcnJheS5pc0FycmF5KGYpJiZpLmlzQXJyYXlPclR5cGVkQXJyYXkoZlswXSk/ZC5sZW5ndGg6ZFswXS5sZW5ndGgsZS5feWxlbmd0aD1kLmxlbmd0aCxuLmdldENvbXBvbmVudE1ldGhvZChcImNhbGVuZGFyc1wiLFwiaGFuZGxlVHJhY2VEZWZhdWx0c1wiKSh0LGUsW1wieFwiLFwieVwiLFwielwiXSxsKSxoKFwidGV4dFwiKSxoKFwiaG92ZXJ0ZXh0XCIpLGgoXCJob3ZlcnRlbXBsYXRlXCIpLFtcImxpZ2h0aW5nLmFtYmllbnRcIixcImxpZ2h0aW5nLmRpZmZ1c2VcIixcImxpZ2h0aW5nLnNwZWN1bGFyXCIsXCJsaWdodGluZy5yb3VnaG5lc3NcIixcImxpZ2h0aW5nLmZyZXNuZWxcIixcImxpZ2h0cG9zaXRpb24ueFwiLFwibGlnaHRwb3NpdGlvbi55XCIsXCJsaWdodHBvc2l0aW9uLnpcIixcImhpZGVzdXJmYWNlXCIsXCJjb25uZWN0Z2Fwc1wiLFwib3BhY2l0eVwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2godCl9KTt2YXIgZz1oKFwic3VyZmFjZWNvbG9yXCIpLHY9W1wieFwiLFwieVwiLFwielwiXTtmb3IoYz0wO2M8MzsrK2Mpe3ZhciBtPVwiY29udG91cnMuXCIrdltjXSx5PWgobStcIi5zaG93XCIpLHg9aChtK1wiLmhpZ2hsaWdodFwiKTtpZih5fHx4KWZvcih1PTA7dTwzOysrdSloKG0rXCIucHJvamVjdC5cIit2W3VdKTt5JiYoaChtK1wiLmNvbG9yXCIpLGgobStcIi53aWR0aFwiKSxoKG0rXCIudXNlY29sb3JtYXBcIikpLHgmJihoKG0rXCIuaGlnaGxpZ2h0Y29sb3JcIiksaChtK1wiLmhpZ2hsaWdodHdpZHRoXCIpKSxoKG0rXCIuc3RhcnRcIiksaChtK1wiLmVuZFwiKSxoKG0rXCIuc2l6ZVwiKX1nfHwocyh0LFwiem1pblwiLFwiY21pblwiKSxzKHQsXCJ6bWF4XCIsXCJjbWF4XCIpLHModCxcInphdXRvXCIsXCJjYXV0b1wiKSksYSh0LGUsbCxoLHtwcmVmaXg6XCJcIixjTGV0dGVyOlwiY1wifSksZS5fbGVuZ3RoPW51bGx9fX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzXCI6NTg4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcmVnaXN0cnlcIjo4MjksXCIuL2F0dHJpYnV0ZXNcIjoxMTQ5fV0sMTE1MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIiksbi5jb2xvcmJhcj17bWluOlwiY21pblwiLG1heDpcImNtYXhcIn0sbi5jYWxjPXQoXCIuL2NhbGNcIiksbi5wbG90PXQoXCIuL2NvbnZlcnRcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJzdXJmYWNlXCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvZ2wzZFwiKSxuLmNhdGVnb3JpZXM9W1wiZ2wzZFwiLFwiMmRNYXBcIixcIm5vT3BhY2l0eVwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4uLy4uL3Bsb3RzL2dsM2RcIjo3ODksXCIuL2F0dHJpYnV0ZXNcIjoxMTQ5LFwiLi9jYWxjXCI6MTE1MCxcIi4vY29udmVydFwiOjExNTEsXCIuL2RlZmF1bHRzXCI6MTE1Mn1dLDExNTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vY29tcG9uZW50cy9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxhPXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsLG89dChcIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlc1wiKSxzPXQoXCIuLi8uLi9wbG90cy9kb21haW5cIikuYXR0cmlidXRlczsoZS5leHBvcnRzPWEoe2RvbWFpbjpzKHtuYW1lOlwidGFibGVcIix0cmFjZTohMH0pLGNvbHVtbndpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsYXJyYXlPazohMCxkZmx0Om51bGx9LGNvbHVtbm9yZGVyOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwifSxoZWFkZXI6e3ZhbHVlczp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixkZmx0OltdfSxmb3JtYXQ6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZGZsdDpbXX0scHJlZml4Ont2YWxUeXBlOlwic3RyaW5nXCIsYXJyYXlPazohMCxkZmx0Om51bGx9LHN1ZmZpeDp7dmFsVHlwZTpcInN0cmluZ1wiLGFycmF5T2s6ITAsZGZsdDpudWxsfSxoZWlnaHQ6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjI4fSxhbGlnbjppKHt9LG4uYWxpZ24se2FycmF5T2s6ITB9KSxsaW5lOnt3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLGFycmF5T2s6ITAsZGZsdDoxfSxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsYXJyYXlPazohMCxkZmx0OlwiZ3JleVwifX0sZmlsbDp7Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGFycmF5T2s6ITAsZGZsdDpcIndoaXRlXCJ9fSxmb250Omkoe30sbyh7YXJyYXlPazohMH0pKX0sY2VsbHM6e3ZhbHVlczp7dmFsVHlwZTpcImRhdGFfYXJyYXlcIixkZmx0OltdfSxmb3JtYXQ6e3ZhbFR5cGU6XCJkYXRhX2FycmF5XCIsZGZsdDpbXX0scHJlZml4Ont2YWxUeXBlOlwic3RyaW5nXCIsYXJyYXlPazohMCxkZmx0Om51bGx9LHN1ZmZpeDp7dmFsVHlwZTpcInN0cmluZ1wiLGFycmF5T2s6ITAsZGZsdDpudWxsfSxoZWlnaHQ6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0OjIwfSxhbGlnbjppKHt9LG4uYWxpZ24se2FycmF5T2s6ITB9KSxsaW5lOnt3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLGFycmF5T2s6ITAsZGZsdDoxfSxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsYXJyYXlPazohMCxkZmx0OlwiZ3JleVwifX0sZmlsbDp7Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGFycmF5T2s6ITAsZGZsdDpcIndoaXRlXCJ9fSxmb250Omkoe30sbyh7YXJyYXlPazohMH0pKX19LFwiY2FsY1wiLFwiZnJvbS1yb290XCIpKS50cmFuc2Zvcm1zPXZvaWQgMH0se1wiLi4vLi4vY29tcG9uZW50cy9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzXCI6NTYxLFwiLi4vLi4vbGliL2V4dGVuZFwiOjY5MSxcIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXNcIjo3MzIsXCIuLi8uLi9wbG90cy9kb21haW5cIjo3NzQsXCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXNcIjo3NzV9XSwxMTU1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2dldF9kYXRhXCIpLmdldE1vZHVsZUNhbGNEYXRhLGk9dChcIi4vcGxvdFwiKTtyLm5hbWU9XCJ0YWJsZVwiLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT1uKHQuY2FsY2RhdGEsXCJ0YWJsZVwiKVswXTtlLmxlbmd0aCYmaSh0LGUpfSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4uX2hhcyYmbi5faGFzKFwidGFibGVcIiksYT1lLl9oYXMmJmUuX2hhcyhcInRhYmxlXCIpO2kmJiFhJiZuLl9wYXBlcmRpdi5zZWxlY3RBbGwoXCIudGFibGVcIikucmVtb3ZlKCl9fSx7XCIuLi8uLi9wbG90cy9nZXRfZGF0YVwiOjc4NCxcIi4vcGxvdFwiOjExNjJ9XSwxMTU2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYi9ndXBcIikud3JhcDtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gbih7fSl9fSx7XCIuLi8uLi9saWIvZ3VwXCI6Njk5fV0sMTE1NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17Y2VsbFBhZDo4LGNvbHVtbkV4dGVudE9mZnNldDoxMCxjb2x1bW5UaXRsZU9mZnNldDoyOCxlbXB0eUhlYWRlckhlaWdodDoxNixsYXRleENoZWNrOi9eXFwkLipcXCQkLyxnb2xkZW5SYXRpbzoxLjYxOCxsaW5lQnJlYWtlcjpcIjxicj5cIixtYXhEaW1lbnNpb25Db3VudDo2MCxvdmVyZHJhZzo0NSxyZWxlYXNlVHJhbnNpdGlvbkR1cmF0aW9uOjEyMCxyZWxlYXNlVHJhbnNpdGlvbkVhc2U6XCJjdWJpYy1vdXRcIixzY3JvbGxiYXJDYXB0dXJlV2lkdGg6MTgsc2Nyb2xsYmFySGlkZURlbGF5OjFlMyxzY3JvbGxiYXJIaWRlRHVyYXRpb246MWUzLHNjcm9sbGJhck9mZnNldDo1LHNjcm9sbGJhcldpZHRoOjgsdHJhbnNpdGlvbkR1cmF0aW9uOjEwMCx0cmFuc2l0aW9uRWFzZTpcImN1YmljLW91dFwiLHVwbGlmdDo1LHdyYXBTcGFjZXI6XCIgXCIsd3JhcFNwbGl0Q2hhcmFjdGVyOlwiIFwiLGNuOnt0YWJsZTpcInRhYmxlXCIsdGFibGVDb250cm9sVmlldzpcInRhYmxlLWNvbnRyb2wtdmlld1wiLHNjcm9sbEJhY2tncm91bmQ6XCJzY3JvbGwtYmFja2dyb3VuZFwiLHlDb2x1bW46XCJ5LWNvbHVtblwiLGNvbHVtbkJsb2NrOlwiY29sdW1uLWJsb2NrXCIsc2Nyb2xsQXJlYUNsaXA6XCJzY3JvbGwtYXJlYS1jbGlwXCIsc2Nyb2xsQXJlYUNsaXBSZWN0Olwic2Nyb2xsLWFyZWEtY2xpcC1yZWN0XCIsY29sdW1uQm91bmRhcnk6XCJjb2x1bW4tYm91bmRhcnlcIixjb2x1bW5Cb3VuZGFyeUNsaXBwYXRoOlwiY29sdW1uLWJvdW5kYXJ5LWNsaXBwYXRoXCIsY29sdW1uQm91bmRhcnlSZWN0OlwiY29sdW1uLWJvdW5kYXJ5LXJlY3RcIixjb2x1bW5DZWxsczpcImNvbHVtbi1jZWxsc1wiLGNvbHVtbkNlbGw6XCJjb2x1bW4tY2VsbFwiLGNlbGxSZWN0OlwiY2VsbC1yZWN0XCIsY2VsbFRleHQ6XCJjZWxsLXRleHRcIixjZWxsVGV4dEhvbGRlcjpcImNlbGwtdGV4dC1ob2xkZXJcIixzY3JvbGxiYXJLaXQ6XCJzY3JvbGxiYXIta2l0XCIsc2Nyb2xsYmFyOlwic2Nyb2xsYmFyXCIsc2Nyb2xsYmFyU2xpZGVyOlwic2Nyb2xsYmFyLXNsaWRlclwiLHNjcm9sbGJhckdseXBoOlwic2Nyb2xsYmFyLWdseXBoXCIsc2Nyb2xsYmFyQ2FwdHVyZVpvbmU6XCJzY3JvbGxiYXItY2FwdHVyZS16b25lXCJ9fX0se31dLDExNTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9jb25zdGFudHNcIiksaT10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0LGE9dChcImZhc3QtaXNudW1lcmljXCIpO2Z1bmN0aW9uIG8odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKWU9TWF0aC5tYXgoZSxvKHRbcl0pKTtyZXR1cm4gZX1yZXR1cm4gdH1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIHQrZX1mdW5jdGlvbiBsKHQpe3ZhciBlLHI9dC5zbGljZSgpLG49MS8wLGk9MDtmb3IoZT0wO2U8ci5sZW5ndGg7ZSsrKUFycmF5LmlzQXJyYXkocltlXSl8fChyW2VdPVtyW2VdXSksbj1NYXRoLm1pbihuLHJbZV0ubGVuZ3RoKSxpPU1hdGgubWF4KGkscltlXS5sZW5ndGgpO2lmKG4hPT1pKWZvcihlPTA7ZTxyLmxlbmd0aDtlKyspe3ZhciBhPWktcltlXS5sZW5ndGg7YSYmKHJbZV09cltlXS5jb25jYXQoYyhhKSkpfXJldHVybiByfWZ1bmN0aW9uIGModCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPVwiXCI7cmV0dXJuIGV9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC5jYWxjZGF0YS5jb2x1bW5zLnJlZHVjZShmdW5jdGlvbihlLHIpe3JldHVybiByLnhJbmRleDx0LnhJbmRleD9lK3IuY29sdW1uV2lkdGg6ZX0sMCl9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBPYmplY3Qua2V5cyh0KS5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIGkoe30sdFtyXSx7YXV4aWxpYXJ5QmxvY2tzOmV9KX0pfWZ1bmN0aW9uIGYodCxlKXtmb3IodmFyIHIsbj17fSxpPTAsYT0wLG89e2ZpcnN0Um93SW5kZXg6bnVsbCxsYXN0Um93SW5kZXg6bnVsbCxyb3dzOltdfSxzPTAsbD0wLGM9MDtjPHQubGVuZ3RoO2MrKylyPXRbY10sby5yb3dzLnB1c2goe3Jvd0luZGV4OmMscm93SGVpZ2h0OnJ9KSwoKGErPXIpPj1lfHxjPT09dC5sZW5ndGgtMSkmJihuW2ldPW8sby5rZXk9bCsrLG8uZmlyc3RSb3dJbmRleD1zLG8ubGFzdFJvd0luZGV4PWMsbz17Zmlyc3RSb3dJbmRleDpudWxsLGxhc3RSb3dJbmRleDpudWxsLHJvd3M6W119LGkrPWEscz1jKzEsYT0wKTtyZXR1cm4gbn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1sKGUuY2VsbHMudmFsdWVzKSxwPWZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKGUuaGVhZGVyLnZhbHVlcy5sZW5ndGgsdC5sZW5ndGgpfSxkPWwoZS5oZWFkZXIudmFsdWVzKTtkLmxlbmd0aCYmIWRbMF0ubGVuZ3RoJiYoZFswXT1bXCJcIl0sZD1sKGQpKTt2YXIgZz1kLmNvbmNhdChwKHIpLm1hcChmdW5jdGlvbigpe3JldHVybiBjKChkWzBdfHxbXCJcIl0pLmxlbmd0aCl9KSksdj1lLmRvbWFpbixtPU1hdGguZmxvb3IodC5fZnVsbExheW91dC5fc2l6ZS53Kih2LnhbMV0tdi54WzBdKSkseT1NYXRoLmZsb29yKHQuX2Z1bGxMYXlvdXQuX3NpemUuaCoodi55WzFdLXYueVswXSkpLHg9ZS5oZWFkZXIudmFsdWVzLmxlbmd0aD9nWzBdLm1hcChmdW5jdGlvbigpe3JldHVybiBlLmhlYWRlci5oZWlnaHR9KTpbbi5lbXB0eUhlYWRlckhlaWdodF0sYj1yLmxlbmd0aD9yWzBdLm1hcChmdW5jdGlvbigpe3JldHVybiBlLmNlbGxzLmhlaWdodH0pOltdLF89eC5yZWR1Y2UocywwKSx3PWYoYix5LV8rbi51cGxpZnQpLGs9aChmKHgsXyksW10pLEE9aCh3LGspLFQ9e30sTT1lLl9mdWxsSW5wdXQuY29sdW1ub3JkZXIuY29uY2F0KHAoci5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pKSksUz1nLm1hcChmdW5jdGlvbih0LHIpe3ZhciBuPUFycmF5LmlzQXJyYXkoZS5jb2x1bW53aWR0aCk/ZS5jb2x1bW53aWR0aFtNYXRoLm1pbihyLGUuY29sdW1ud2lkdGgubGVuZ3RoLTEpXTplLmNvbHVtbndpZHRoO3JldHVybiBhKG4pP051bWJlcihuKToxfSksRT1TLnJlZHVjZShzLDApO1M9Uy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQvRSptfSk7dmFyIEM9TWF0aC5tYXgobyhlLmhlYWRlci5saW5lLndpZHRoKSxvKGUuY2VsbHMubGluZS53aWR0aCkpLEw9e2tleTplLnVpZCt0Ll9jb250ZXh0LnN0YXRpY1Bsb3QsdHJhbnNsYXRlWDp2LnhbMF0qdC5fZnVsbExheW91dC5fc2l6ZS53LHRyYW5zbGF0ZVk6dC5fZnVsbExheW91dC5fc2l6ZS5oKigxLXYueVsxXSksc2l6ZTp0Ll9mdWxsTGF5b3V0Ll9zaXplLHdpZHRoOm0sbWF4TGluZVdpZHRoOkMsaGVpZ2h0OnksY29sdW1uT3JkZXI6TSxncm91cEhlaWdodDp5LHJvd0Jsb2NrczpBLGhlYWRlclJvd0Jsb2NrczprLHNjcm9sbFk6MCxjZWxsczppKHt9LGUuY2VsbHMse3ZhbHVlczpyfSksaGVhZGVyQ2VsbHM6aSh7fSxlLmhlYWRlcix7dmFsdWVzOmd9KSxnZENvbHVtbnM6Zy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSxnZENvbHVtbnNPcmlnaW5hbE9yZGVyOmcubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkscHJldlBhZ2VzOlswLDBdLHNjcm9sbGJhclN0YXRlOntzY3JvbGxiYXJTY3JvbGxJblByb2dyZXNzOiExfSxjb2x1bW5zOmcubWFwKGZ1bmN0aW9uKHQsZSl7dmFyIHI9VFt0XTtyZXR1cm4gVFt0XT0ocnx8MCkrMSx7a2V5OnQrXCJfX1wiK1RbdF0sbGFiZWw6dCxzcGVjSW5kZXg6ZSx4SW5kZXg6TVtlXSx4U2NhbGU6dSx4OnZvaWQgMCxjYWxjZGF0YTp2b2lkIDAsY29sdW1uV2lkdGg6U1tlXX19KX07cmV0dXJuIEwuY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY2FsY2RhdGE9TCx0Lng9dSh0KX0pLEx9fSx7XCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi9jb25zdGFudHNcIjoxMTU3LFwiZmFzdC1pc251bWVyaWNcIjoyMjJ9XSwxMTU5OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdDtyLnNwbGl0VG9QYW5lbHM9ZnVuY3Rpb24odCl7dmFyIGU9WzAsMF0scj1uKHt9LHQse2tleTpcImhlYWRlclwiLHR5cGU6XCJoZWFkZXJcIixwYWdlOjAscHJldlBhZ2VzOmUsY3VycmVudFJlcGFpbnQ6W251bGwsbnVsbF0sZHJhZ0hhbmRsZTohMCx2YWx1ZXM6dC5jYWxjZGF0YS5oZWFkZXJDZWxscy52YWx1ZXNbdC5zcGVjSW5kZXhdLHJvd0Jsb2Nrczp0LmNhbGNkYXRhLmhlYWRlclJvd0Jsb2NrcyxjYWxjZGF0YTpuKHt9LHQuY2FsY2RhdGEse2NlbGxzOnQuY2FsY2RhdGEuaGVhZGVyQ2VsbHN9KX0pO3JldHVybltuKHt9LHQse2tleTpcImNlbGxzMVwiLHR5cGU6XCJjZWxsc1wiLHBhZ2U6MCxwcmV2UGFnZXM6ZSxjdXJyZW50UmVwYWludDpbbnVsbCxudWxsXSxkcmFnSGFuZGxlOiExLHZhbHVlczp0LmNhbGNkYXRhLmNlbGxzLnZhbHVlc1t0LnNwZWNJbmRleF0scm93QmxvY2tzOnQuY2FsY2RhdGEucm93QmxvY2tzfSksbih7fSx0LHtrZXk6XCJjZWxsczJcIix0eXBlOlwiY2VsbHNcIixwYWdlOjEscHJldlBhZ2VzOmUsY3VycmVudFJlcGFpbnQ6W251bGwsbnVsbF0sZHJhZ0hhbmRsZTohMSx2YWx1ZXM6dC5jYWxjZGF0YS5jZWxscy52YWx1ZXNbdC5zcGVjSW5kZXhdLHJvd0Jsb2Nrczp0LmNhbGNkYXRhLnJvd0Jsb2Nrc30pLHJdfSxyLnNwbGl0VG9DZWxscz1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZT10LnJvd0Jsb2Nrc1t0LnBhZ2VdLHI9ZT9lLnJvd3NbMF0ucm93SW5kZXg6MCxuPWU/citlLnJvd3MubGVuZ3RoOjA7cmV0dXJuW3Isbl19KHQpO3JldHVybih0LnZhbHVlc3x8W10pLnNsaWNlKGVbMF0sZVsxXSkubWFwKGZ1bmN0aW9uKHIsbil7cmV0dXJue2tleVdpdGhpbkJsb2NrOm4rKFwic3RyaW5nXCI9PXR5cGVvZiByJiZyLm1hdGNoKC9bPCQmPiBdLyk/XCJfa2V5YnVzdGVyX1wiK01hdGgucmFuZG9tKCk6XCJcIiksa2V5OmVbMF0rbixjb2x1bW46dCxjYWxjZGF0YTp0LmNhbGNkYXRhLHBhZ2U6dC5wYWdlLHJvd0Jsb2Nrczp0LnJvd0Jsb2Nrcyx2YWx1ZTpyfX0pfX0se1wiLi4vLi4vbGliL2V4dGVuZFwiOjY5MX1dLDExNjA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9wbG90cy9kb21haW5cIikuZGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHMocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1hKGUsbyxzKSxzKFwiY29sdW1ud2lkdGhcIikscyhcImhlYWRlci52YWx1ZXNcIikscyhcImhlYWRlci5mb3JtYXRcIikscyhcImhlYWRlci5hbGlnblwiKSxzKFwiaGVhZGVyLnByZWZpeFwiKSxzKFwiaGVhZGVyLnN1ZmZpeFwiKSxzKFwiaGVhZGVyLmhlaWdodFwiKSxzKFwiaGVhZGVyLmxpbmUud2lkdGhcIikscyhcImhlYWRlci5saW5lLmNvbG9yXCIpLHMoXCJoZWFkZXIuZmlsbC5jb2xvclwiKSxuLmNvZXJjZUZvbnQocyxcImhlYWRlci5mb250XCIsbi5leHRlbmRGbGF0KHt9LG8uZm9udCkpLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29sdW1ub3JkZXJ8fFtdLG49dC5oZWFkZXIudmFsdWVzLmxlbmd0aCxpPXIuc2xpY2UoMCxuKSxhPWkuc2xpY2UoKS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pLG89aS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGEuaW5kZXhPZih0KX0pLHM9by5sZW5ndGg7czxuO3MrKylvLnB1c2gocyk7ZShcImNvbHVtbm9yZGVyXCIsbyl9KGUscykscyhcImNlbGxzLnZhbHVlc1wiKSxzKFwiY2VsbHMuZm9ybWF0XCIpLHMoXCJjZWxscy5hbGlnblwiKSxzKFwiY2VsbHMucHJlZml4XCIpLHMoXCJjZWxscy5zdWZmaXhcIikscyhcImNlbGxzLmhlaWdodFwiKSxzKFwiY2VsbHMubGluZS53aWR0aFwiKSxzKFwiY2VsbHMubGluZS5jb2xvclwiKSxzKFwiY2VsbHMuZmlsbC5jb2xvclwiKSxuLmNvZXJjZUZvbnQocyxcImNlbGxzLmZvbnRcIixuLmV4dGVuZEZsYXQoe30sby5mb250KSksZS5fbGVuZ3RoPW51bGx9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9kb21haW5cIjo3NzQsXCIuL2F0dHJpYnV0ZXNcIjoxMTU0fV0sMTE2MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4uc3VwcGx5RGVmYXVsdHM9dChcIi4vZGVmYXVsdHNcIiksbi5jYWxjPXQoXCIuL2NhbGNcIiksbi5wbG90PXQoXCIuL3Bsb3RcIiksbi5tb2R1bGVUeXBlPVwidHJhY2VcIixuLm5hbWU9XCJ0YWJsZVwiLG4uYmFzZVBsb3RNb2R1bGU9dChcIi4vYmFzZV9wbG90XCIpLG4uY2F0ZWdvcmllcz1bXCJub09wYWNpdHlcIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7XCIuL2F0dHJpYnV0ZXNcIjoxMTU0LFwiLi9iYXNlX3Bsb3RcIjoxMTU1LFwiLi9jYWxjXCI6MTE1NixcIi4vZGVmYXVsdHNcIjoxMTYwLFwiLi9wbG90XCI6MTE2Mn1dLDExNjI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi9jb25zdGFudHNcIiksaT10KFwiZDNcIiksYT10KFwiLi4vLi4vbGliL2d1cFwiKSxvPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIikscz10KFwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzXCIpLGw9dChcIi4uLy4uL2xpYlwiKS5yYWlzZVRvVG9wLGM9dChcIi4uLy4uL2xpYlwiKS5jYW5jZWxUcmFuc2l0aW9uLHU9dChcIi4vZGF0YV9wcmVwYXJhdGlvbl9oZWxwZXJcIiksaD10KFwiLi9kYXRhX3NwbGl0X2hlbHBlcnNcIiksZj10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKTtmdW5jdGlvbiBwKHQpe3JldHVybiBNYXRoLmNlaWwodC5jYWxjZGF0YS5tYXhMaW5lV2lkdGgvMil9ZnVuY3Rpb24gZCh0LGUpe3JldHVyblwiY2xpcFwiK3QuX2Z1bGxMYXlvdXQuX3VpZCtcIl9zY3JvbGxBcmVhQm90dG9tQ2xpcF9cIitlLmtleX1mdW5jdGlvbiBnKHQsZSl7cmV0dXJuXCJjbGlwXCIrdC5fZnVsbExheW91dC5fdWlkK1wiX2NvbHVtbkJvdW5kYXJ5Q2xpcHBhdGhfXCIrZS5jYWxjZGF0YS5rZXkrXCJfXCIrZS5zcGVjSW5kZXh9ZnVuY3Rpb24gdih0KXtyZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9fZGF0YV9ffSl9ZnVuY3Rpb24gbSh0LGUscil7dmFyIG89dC5zZWxlY3RBbGwoXCIuXCIrbi5jbi5zY3JvbGxiYXJLaXQpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO28uZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQobi5jbi5zY3JvbGxiYXJLaXQsITApLnN0eWxlKFwic2hhcGUtcmVuZGVyaW5nXCIsXCJnZW9tZXRyaWNQcmVjaXNpb25cIiksby5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2Nyb2xsYmFyU3RhdGU7ZS50b3RhbEhlaWdodD1mdW5jdGlvbih0KXt2YXIgZT10LnJvd0Jsb2NrcztyZXR1cm4gSShlLGUubGVuZ3RoLTEpKyhlLmxlbmd0aD9EKGVbZS5sZW5ndGgtMV0sMS8wKToxKX0odCksZS5zY3JvbGxhYmxlQXJlYUhlaWdodD10Lmdyb3VwSGVpZ2h0LVQodCksZS5jdXJyZW50bHlWaXNpYmxlSGVpZ2h0PU1hdGgubWluKGUudG90YWxIZWlnaHQsZS5zY3JvbGxhYmxlQXJlYUhlaWdodCksZS5yYXRpbz1lLmN1cnJlbnRseVZpc2libGVIZWlnaHQvZS50b3RhbEhlaWdodCxlLmJhckxlbmd0aD1NYXRoLm1heChlLnJhdGlvKmUuY3VycmVudGx5VmlzaWJsZUhlaWdodCxuLmdvbGRlblJhdGlvKm4uc2Nyb2xsYmFyV2lkdGgpLGUuYmFyV2lnZ2xlUm9vbT1lLmN1cnJlbnRseVZpc2libGVIZWlnaHQtZS5iYXJMZW5ndGgsZS53aWdnbGVSb29tPU1hdGgubWF4KDAsZS50b3RhbEhlaWdodC1lLnNjcm9sbGFibGVBcmVhSGVpZ2h0KSxlLnRvcFk9MD09PWUuYmFyV2lnZ2xlUm9vbT8wOnQuc2Nyb2xsWS9lLndpZ2dsZVJvb20qZS5iYXJXaWdnbGVSb29tLGUuYm90dG9tWT1lLnRvcFkrZS5iYXJMZW5ndGgsZS5kcmFnTXVsdGlwbGllcj1lLndpZ2dsZVJvb20vZS5iYXJXaWdnbGVSb29tfSkuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKFwiKyh0LndpZHRoK24uc2Nyb2xsYmFyV2lkdGgvMituLnNjcm9sbGJhck9mZnNldCkrXCIgXCIrVCh0KStcIilcIn0pO3ZhciBzPW8uc2VsZWN0QWxsKFwiLlwiK24uY24uc2Nyb2xsYmFyKS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKTtzLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKG4uY24uc2Nyb2xsYmFyLCEwKTt2YXIgbD1zLnNlbGVjdEFsbChcIi5cIituLmNuLnNjcm9sbGJhclNsaWRlcikuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7bC5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChuLmNuLnNjcm9sbGJhclNsaWRlciwhMCksbC5hdHRyKFwidHJhbnNmb3JtXCIsZnVuY3Rpb24odCl7cmV0dXJuXCJ0cmFuc2xhdGUoMCBcIisodC5zY3JvbGxiYXJTdGF0ZS50b3BZfHwwKStcIilcIn0pO3ZhciBjPWwuc2VsZWN0QWxsKFwiLlwiK24uY24uc2Nyb2xsYmFyR2x5cGgpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO2MuZW50ZXIoKS5hcHBlbmQoXCJsaW5lXCIpLmNsYXNzZWQobi5jbi5zY3JvbGxiYXJHbHlwaCwhMCkuYXR0cihcInN0cm9rZVwiLFwiYmxhY2tcIikuYXR0cihcInN0cm9rZS13aWR0aFwiLG4uc2Nyb2xsYmFyV2lkdGgpLmF0dHIoXCJzdHJva2UtbGluZWNhcFwiLFwicm91bmRcIikuYXR0cihcInkxXCIsbi5zY3JvbGxiYXJXaWR0aC8yKSxjLmF0dHIoXCJ5MlwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnNjcm9sbGJhclN0YXRlLmJhckxlbmd0aC1uLnNjcm9sbGJhcldpZHRoLzJ9KS5hdHRyKFwic3Ryb2tlLW9wYWNpdHlcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW5EcmFnSW5Qcm9ncmVzc3x8IXQuc2Nyb2xsYmFyU3RhdGUuYmFyV2lnZ2xlUm9vbXx8cj8wOi40fSksYy50cmFuc2l0aW9uKCkuZGVsYXkoMCkuZHVyYXRpb24oMCksYy50cmFuc2l0aW9uKCkuZGVsYXkobi5zY3JvbGxiYXJIaWRlRGVsYXkpLmR1cmF0aW9uKG4uc2Nyb2xsYmFySGlkZUR1cmF0aW9uKS5hdHRyKFwic3Ryb2tlLW9wYWNpdHlcIiwwKTt2YXIgdT1zLnNlbGVjdEFsbChcIi5cIituLmNuLnNjcm9sbGJhckNhcHR1cmVab25lKS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKTt1LmVudGVyKCkuYXBwZW5kKFwibGluZVwiKS5jbGFzc2VkKG4uY24uc2Nyb2xsYmFyQ2FwdHVyZVpvbmUsITApLmF0dHIoXCJzdHJva2VcIixcIndoaXRlXCIpLmF0dHIoXCJzdHJva2Utb3BhY2l0eVwiLC4wMSkuYXR0cihcInN0cm9rZS13aWR0aFwiLG4uc2Nyb2xsYmFyQ2FwdHVyZVdpZHRoKS5hdHRyKFwic3Ryb2tlLWxpbmVjYXBcIixcImJ1dHRcIikuYXR0cihcInkxXCIsMCkub24oXCJtb3VzZWRvd25cIixmdW5jdGlvbihyKXt2YXIgbj1pLmV2ZW50LnksYT10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89ci5zY3JvbGxiYXJTdGF0ZSxzPW4tYS50b3AsbD1pLnNjYWxlLmxpbmVhcigpLmRvbWFpbihbMCxvLnNjcm9sbGFibGVBcmVhSGVpZ2h0XSkucmFuZ2UoWzAsby50b3RhbEhlaWdodF0pLmNsYW1wKCEwKTtvLnRvcFk8PXMmJnM8PW8uYm90dG9tWXx8UyhlLHQsbnVsbCxsKHMtby5iYXJMZW5ndGgvMikpKHIpfSkuY2FsbChpLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oZnVuY3Rpb24odCl7cmV0dXJuIGkuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCksdC5zY3JvbGxiYXJTdGF0ZS5zY3JvbGxiYXJTY3JvbGxJblByb2dyZXNzPSEwLHR9KS5vbihcImRyYWdcIixTKGUsdCkpLm9uKFwiZHJhZ2VuZFwiLGZ1bmN0aW9uKCl7fSkpLHUuYXR0cihcInkyXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuc2Nyb2xsYmFyU3RhdGUuc2Nyb2xsYWJsZUFyZWFIZWlnaHR9KSxlLl9jb250ZXh0LnN0YXRpY1Bsb3QmJihjLnJlbW92ZSgpLHUucmVtb3ZlKCkpfWZ1bmN0aW9uIHkodCxlLHIscyl7dmFyIGw9ZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoXCIuXCIrbi5jbi5jb2x1bW5DZWxsKS5kYXRhKGguc3BsaXRUb0NlbGxzLGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleVdpdGhpbkJsb2NrfSk7cmV0dXJuIGUuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmNsYXNzZWQobi5jbi5jb2x1bW5DZWxsLCEwKSxlLmV4aXQoKS5yZW1vdmUoKSxlfShmdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbChcIi5cIituLmNuLmNvbHVtbkNlbGxzKS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKTtyZXR1cm4gZS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChuLmNuLmNvbHVtbkNlbGxzLCEwKSxlLmV4aXQoKS5yZW1vdmUoKSxlfShyKSk7IWZ1bmN0aW9uKHQpe3QuZWFjaChmdW5jdGlvbih0LGUpe3ZhciByPXQuY2FsY2RhdGEuY2VsbHMuZm9udCxuPXQuY29sdW1uLnNwZWNJbmRleCxpPXtzaXplOl8oci5zaXplLG4sZSksY29sb3I6XyhyLmNvbG9yLG4sZSksZmFtaWx5Ol8oci5mYW1pbHksbixlKX07dC5yb3dOdW1iZXI9dC5rZXksdC5hbGlnbj1fKHQuY2FsY2RhdGEuY2VsbHMuYWxpZ24sbixlKSx0LmNlbGxCb3JkZXJXaWR0aD1fKHQuY2FsY2RhdGEuY2VsbHMubGluZS53aWR0aCxuLGUpLHQuZm9udD1pfSl9KGwpLGZ1bmN0aW9uKHQpe3QuYXR0cihcIndpZHRoXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sdW1uLmNvbHVtbldpZHRofSkuYXR0cihcInN0cm9rZS13aWR0aFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNlbGxCb3JkZXJXaWR0aH0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9aS5zZWxlY3QodGhpcyk7Zi5zdHJva2UoZSxfKHQuY2FsY2RhdGEuY2VsbHMubGluZS5jb2xvcix0LmNvbHVtbi5zcGVjSW5kZXgsdC5yb3dOdW1iZXIpKSxmLmZpbGwoZSxfKHQuY2FsY2RhdGEuY2VsbHMuZmlsbC5jb2xvcix0LmNvbHVtbi5zcGVjSW5kZXgsdC5yb3dOdW1iZXIpKX0pfShmdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbChcIi5cIituLmNuLmNlbGxSZWN0KS5kYXRhKGEucmVwZWF0LGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleVdpdGhpbkJsb2NrfSk7cmV0dXJuIGUuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpLmNsYXNzZWQobi5jbi5jZWxsUmVjdCwhMCksZX0obCkpO3ZhciBjPWZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0QWxsKFwiLlwiK24uY24uY2VsbFRleHQpLmRhdGEoYS5yZXBlYXQsZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5V2l0aGluQmxvY2t9KTtyZXR1cm4gZS5lbnRlcigpLmFwcGVuZChcInRleHRcIikuY2xhc3NlZChuLmNuLmNlbGxUZXh0LCEwKS5zdHlsZShcImN1cnNvclwiLGZ1bmN0aW9uKCl7cmV0dXJuXCJhdXRvXCJ9KS5vbihcIm1vdXNlZG93blwiLGZ1bmN0aW9uKCl7aS5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0pLGV9KGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0QWxsKFwiLlwiK24uY24uY2VsbFRleHRIb2xkZXIpLmRhdGEoYS5yZXBlYXQsZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5V2l0aGluQmxvY2t9KTtyZXR1cm4gZS5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChuLmNuLmNlbGxUZXh0SG9sZGVyLCEwKS5zdHlsZShcInNoYXBlLXJlbmRlcmluZ1wiLFwiZ2VvbWV0cmljUHJlY2lzaW9uXCIpLGV9KGwpKTshZnVuY3Rpb24odCl7dC5lYWNoKGZ1bmN0aW9uKHQpe28uZm9udChpLnNlbGVjdCh0aGlzKSx0LmZvbnQpfSl9KGMpLHgoYyxlLHMsdCksTyhsKX1mdW5jdGlvbiB4KHQsZSxyLGEpe3QudGV4dChmdW5jdGlvbih0KXt2YXIgZT10LmNvbHVtbi5zcGVjSW5kZXgscj10LnJvd051bWJlcixhPXQudmFsdWUsbz1cInN0cmluZ1wiPT10eXBlb2YgYSxzPW8mJmEubWF0Y2goLzxicj4vaSksbD0hb3x8czt0Lm1heUhhdmVNYXJrdXA9byYmYS5tYXRjaCgvWzwmPl0vKTt2YXIgYyx1PVwic3RyaW5nXCI9PXR5cGVvZihjPWEpJiZjLm1hdGNoKG4ubGF0ZXhDaGVjayk7dC5sYXRleD11O3ZhciBoLGYscD11P1wiXCI6Xyh0LmNhbGNkYXRhLmNlbGxzLnByZWZpeCxlLHIpfHxcIlwiLGQ9dT9cIlwiOl8odC5jYWxjZGF0YS5jZWxscy5zdWZmaXgsZSxyKXx8XCJcIixnPXU/bnVsbDpfKHQuY2FsY2RhdGEuY2VsbHMuZm9ybWF0LGUscil8fG51bGwsdj1wKyhnP2kuZm9ybWF0KGcpKHQudmFsdWUpOnQudmFsdWUpK2Q7aWYodC53cmFwcGluZ05lZWRlZD0hdC53cmFwcGVkJiYhbCYmIXUmJihoPWIodikpLHQuY2VsbEhlaWdodE1heUluY3JlYXNlPXN8fHV8fHQubWF5SGF2ZU1hcmt1cHx8KHZvaWQgMD09PWg/Yih2KTpoKSx0Lm5lZWRzQ29udmVydFRvVHNwYW5zPXQubWF5SGF2ZU1hcmt1cHx8dC53cmFwcGluZ05lZWRlZHx8dC5sYXRleCx0LndyYXBwaW5nTmVlZGVkKXt2YXIgbT0oXCIgXCI9PT1uLndyYXBTcGxpdENoYXJhY3Rlcj92LnJlcGxhY2UoLzxhIGhyZWY9L2dpLFwiPGFfaHJlZj1cIik6dikuc3BsaXQobi53cmFwU3BsaXRDaGFyYWN0ZXIpLHk9XCIgXCI9PT1uLndyYXBTcGxpdENoYXJhY3Rlcj9tLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC88YV9ocmVmPS9naSxcIjxhIGhyZWY9XCIpfSk6bTt0LmZyYWdtZW50cz15Lm1hcChmdW5jdGlvbih0KXtyZXR1cm57dGV4dDp0LHdpZHRoOm51bGx9fSksdC5mcmFnbWVudHMucHVzaCh7ZnJhZ21lbnQ6bi53cmFwU3BhY2VyLHdpZHRoOm51bGx9KSxmPXkuam9pbihuLmxpbmVCcmVha2VyKStuLmxpbmVCcmVha2VyK24ud3JhcFNwYWNlcn1lbHNlIGRlbGV0ZSB0LmZyYWdtZW50cyxmPXY7cmV0dXJuIGZ9KS5hdHRyKFwiZHlcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5uZWVkc0NvbnZlcnRUb1RzcGFucz8wOlwiMC43NWVtXCJ9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBvPWkuc2VsZWN0KHRoaXMpLGw9dC53cmFwcGluZ05lZWRlZD9DOkw7dC5uZWVkc0NvbnZlcnRUb1RzcGFucz9zLmNvbnZlcnRUb1RzcGFucyhvLGEsbChyLHRoaXMsZSxhLHQpKTppLnNlbGVjdCh0aGlzLnBhcmVudE5vZGUpLmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXtyZXR1cm5cInRyYW5zbGF0ZShcIit6KHQpK1wiIFwiK24uY2VsbFBhZCtcIilcIn0pLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLGZ1bmN0aW9uKHQpe3JldHVybntsZWZ0Olwic3RhcnRcIixjZW50ZXI6XCJtaWRkbGVcIixyaWdodDpcImVuZFwifVt0LmFsaWduXX0pfSl9ZnVuY3Rpb24gYih0KXtyZXR1cm4tMSE9PXQuaW5kZXhPZihuLndyYXBTcGxpdENoYXJhY3Rlcil9ZnVuY3Rpb24gXyh0LGUscil7aWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIG49dFtNYXRoLm1pbihlLHQubGVuZ3RoLTEpXTtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uW01hdGgubWluKHIsbi5sZW5ndGgtMSldOm59cmV0dXJuIHR9ZnVuY3Rpb24gdyh0LGUscil7dC50cmFuc2l0aW9uKCkuZWFzZShuLnJlbGVhc2VUcmFuc2l0aW9uRWFzZSkuZHVyYXRpb24obi5yZWxlYXNlVHJhbnNpdGlvbkR1cmF0aW9uKS5hdHRyKFwidHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGUoXCIrZS54K1wiIFwiK3IrXCIpXCIpfWZ1bmN0aW9uIGsodCl7cmV0dXJuXCJjZWxsc1wiPT09dC50eXBlfWZ1bmN0aW9uIEEodCl7cmV0dXJuXCJoZWFkZXJcIj09PXQudHlwZX1mdW5jdGlvbiBUKHQpe3JldHVybih0LnJvd0Jsb2Nrcy5sZW5ndGg/dC5yb3dCbG9ja3NbMF0uYXV4aWxpYXJ5QmxvY2tzOltdKS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtEKGUsMS8wKX0sMCl9ZnVuY3Rpb24gTSh0LGUscil7dmFyIG49dihlKVswXTtpZih2b2lkIDAhPT1uKXt2YXIgaT1uLnJvd0Jsb2NrcyxhPW4uY2FsY2RhdGEsbz1JKGksaS5sZW5ndGgpLHM9bi5jYWxjZGF0YS5ncm91cEhlaWdodC1UKG4pLGw9YS5zY3JvbGxZPU1hdGgubWF4KDAsTWF0aC5taW4oby1zLGEuc2Nyb2xsWSkpLGM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1bXSxpPTAsYT0wO2E8dC5sZW5ndGg7YSsrKXtmb3IodmFyIG89dFthXSxzPW8ucm93cyxsPTAsYz0wO2M8cy5sZW5ndGg7YysrKWwrPXNbY10ucm93SGVpZ2h0O28uYWxsUm93c0hlaWdodD1sLGU8aStsJiZlK3I+aSYmbi5wdXNoKGEpLGkrPWx9cmV0dXJuIG59KGksbCxzKTsxPT09Yy5sZW5ndGgmJihjWzBdPT09aS5sZW5ndGgtMT9jLnVuc2hpZnQoY1swXS0xKTpjLnB1c2goY1swXSsxKSksY1swXSUyJiZjLnJldmVyc2UoKSxlLmVhY2goZnVuY3Rpb24odCxlKXt0LnBhZ2U9Y1tlXSx0LnNjcm9sbFk9bH0pLGUuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKDAgXCIrKEkodC5yb3dCbG9ja3MsdC5wYWdlKS10LnNjcm9sbFkpK1wiKVwifSksdCYmKEUodCxyLGUsYyxuLnByZXZQYWdlcyxuLDApLEUodCxyLGUsYyxuLnByZXZQYWdlcyxuLDEpLG0ocix0KSl9fWZ1bmN0aW9uIFModCxlLHIsYSl7cmV0dXJuIGZ1bmN0aW9uKG8pe3ZhciBzPW8uY2FsY2RhdGE/by5jYWxjZGF0YTpvLGw9ZS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHMua2V5PT09dC5rZXl9KSxjPXJ8fHMuc2Nyb2xsYmFyU3RhdGUuZHJhZ011bHRpcGxpZXIsdT1zLnNjcm9sbFk7cy5zY3JvbGxZPXZvaWQgMD09PWE/cy5zY3JvbGxZK2MqaS5ldmVudC5keTphO3ZhciBoPWwuc2VsZWN0QWxsKFwiLlwiK24uY24ueUNvbHVtbikuc2VsZWN0QWxsKFwiLlwiK24uY24uY29sdW1uQmxvY2spLmZpbHRlcihrKTtyZXR1cm4gTSh0LGgsbCkscy5zY3JvbGxZPT09dX19ZnVuY3Rpb24gRSh0LGUscixuLGksYSxvKXtuW29dIT09aVtvXSYmKGNsZWFyVGltZW91dChhLmN1cnJlbnRSZXBhaW50W29dKSxhLmN1cnJlbnRSZXBhaW50W29dPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgYT1yLmZpbHRlcihmdW5jdGlvbih0LGUpe3JldHVybiBlPT09byYmbltlXSE9PWlbZV19KTt5KHQsZSxhLHIpLGlbb109bltvXX0pKX1mdW5jdGlvbiBDKHQsZSxyLGEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBvPWkuc2VsZWN0KGUucGFyZW50Tm9kZSk7by5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZnJhZ21lbnRzO28uc2VsZWN0QWxsKFwidHNwYW4ubGluZVwiKS5lYWNoKGZ1bmN0aW9uKHQscil7ZVtyXS53aWR0aD10aGlzLmdldENvbXB1dGVkVGV4dExlbmd0aCgpfSk7dmFyIHIsaSxhPWVbZS5sZW5ndGgtMV0ud2lkdGgscz1lLnNsaWNlKDAsLTEpLGw9W10sYz0wLHU9dC5jb2x1bW4uY29sdW1uV2lkdGgtMipuLmNlbGxQYWQ7Zm9yKHQudmFsdWU9XCJcIjtzLmxlbmd0aDspYysoaT0ocj1zLnNoaWZ0KCkpLndpZHRoK2EpPnUmJih0LnZhbHVlKz1sLmpvaW4obi53cmFwU3BhY2VyKStuLmxpbmVCcmVha2VyLGw9W10sYz0wKSxsLnB1c2goci50ZXh0KSxjKz1pO2MmJih0LnZhbHVlKz1sLmpvaW4obi53cmFwU3BhY2VyKSksdC53cmFwcGVkPSEwfSksby5zZWxlY3RBbGwoXCJ0c3Bhbi5saW5lXCIpLnJlbW92ZSgpLHgoby5zZWxlY3QoXCIuXCIrbi5jbi5jZWxsVGV4dCkscix0LGEpLGkuc2VsZWN0KGUucGFyZW50Tm9kZS5wYXJlbnROb2RlKS5jYWxsKE8pfX1mdW5jdGlvbiBMKHQsZSxyLGEsbyl7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIW8uc2V0dGxlZFkpe3ZhciBzPWkuc2VsZWN0KGUucGFyZW50Tm9kZSksbD1SKG8pLGM9by5rZXktbC5maXJzdFJvd0luZGV4LHU9bC5yb3dzW2NdLnJvd0hlaWdodCxoPW8uY2VsbEhlaWdodE1heUluY3JlYXNlP2UucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQrMipuLmNlbGxQYWQ6dSxmPU1hdGgubWF4KGgsdSk7Zi1sLnJvd3NbY10ucm93SGVpZ2h0JiYobC5yb3dzW2NdLnJvd0hlaWdodD1mLHQuc2VsZWN0QWxsKFwiLlwiK24uY24uY29sdW1uQ2VsbCkuY2FsbChPKSxNKG51bGwsdC5maWx0ZXIoayksMCksbShyLGEsITApKSxzLmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxlPWkuc2VsZWN0KHRoaXMucGFyZW50Tm9kZSkuc2VsZWN0KFwiLlwiK24uY24uY2VsbFJlY3QpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPXRoaXMudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSxhPWUudG9wLXQudG9wKyhyP3IubWF0cml4LmY6bi5jZWxsUGFkKTtyZXR1cm5cInRyYW5zbGF0ZShcIit6KG8saS5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5zZWxlY3QoXCIuXCIrbi5jbi5jZWxsVGV4dEhvbGRlcikubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKStcIiBcIithK1wiKVwifSksby5zZXR0bGVkWT0hMH19fWZ1bmN0aW9uIHoodCxlKXtzd2l0Y2godC5hbGlnbil7Y2FzZVwibGVmdFwiOnJldHVybiBuLmNlbGxQYWQ7Y2FzZVwicmlnaHRcIjpyZXR1cm4gdC5jb2x1bW4uY29sdW1uV2lkdGgtKGV8fDApLW4uY2VsbFBhZDtjYXNlXCJjZW50ZXJcIjpyZXR1cm4odC5jb2x1bW4uY29sdW1uV2lkdGgtKGV8fDApKS8yO2RlZmF1bHQ6cmV0dXJuIG4uY2VsbFBhZH19ZnVuY3Rpb24gTyh0KXt0LmF0dHIoXCJ0cmFuc2Zvcm1cIixmdW5jdGlvbih0KXt2YXIgZT10LnJvd0Jsb2Nrc1swXS5hdXhpbGlhcnlCbG9ja3MucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrRChlLDEvMCl9LDApO3JldHVyblwidHJhbnNsYXRlKDAgXCIrKEQoUih0KSx0LmtleSkrZSkrXCIpXCJ9KS5zZWxlY3RBbGwoXCIuXCIrbi5jbi5jZWxsUmVjdCkuYXR0cihcImhlaWdodFwiLGZ1bmN0aW9uKHQpe3JldHVybihlPVIodCkscj10LmtleSxlLnJvd3Nbci1lLmZpcnN0Um93SW5kZXhdKS5yb3dIZWlnaHQ7dmFyIGUscn0pfWZ1bmN0aW9uIEkodCxlKXtmb3IodmFyIHI9MCxuPWUtMTtuPj0wO24tLSlyKz1QKHRbbl0pO3JldHVybiByfWZ1bmN0aW9uIEQodCxlKXtmb3IodmFyIHI9MCxuPTA7bjx0LnJvd3MubGVuZ3RoJiZ0LnJvd3Nbbl0ucm93SW5kZXg8ZTtuKyspcis9dC5yb3dzW25dLnJvd0hlaWdodDtyZXR1cm4gcn1mdW5jdGlvbiBQKHQpe3ZhciBlPXQuYWxsUm93c0hlaWdodDtpZih2b2lkIDAhPT1lKXJldHVybiBlO2Zvcih2YXIgcj0wLG49MDtuPHQucm93cy5sZW5ndGg7bisrKXIrPXQucm93c1tuXS5yb3dIZWlnaHQ7cmV0dXJuIHQuYWxsUm93c0hlaWdodD1yLHJ9ZnVuY3Rpb24gUih0KXtyZXR1cm4gdC5yb3dCbG9ja3NbdC5wYWdlXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj0hdC5fY29udGV4dC5zdGF0aWNQbG90LHM9dC5fZnVsbExheW91dC5fcGFwZXIuc2VsZWN0QWxsKFwiLlwiK24uY24udGFibGUpLmRhdGEoZS5tYXAoZnVuY3Rpb24oZSl7dmFyIHI9YS51bndyYXAoZSkudHJhY2U7cmV0dXJuIHUodCxyKX0pLGEua2V5RnVuKTtzLmV4aXQoKS5yZW1vdmUoKSxzLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKG4uY24udGFibGUsITApLmF0dHIoXCJvdmVyZmxvd1wiLFwidmlzaWJsZVwiKS5zdHlsZShcImJveC1zaXppbmdcIixcImNvbnRlbnQtYm94XCIpLnN0eWxlKFwicG9zaXRpb25cIixcImFic29sdXRlXCIpLnN0eWxlKFwibGVmdFwiLDApLnN0eWxlKFwib3ZlcmZsb3dcIixcInZpc2libGVcIikuc3R5bGUoXCJzaGFwZS1yZW5kZXJpbmdcIixcImNyaXNwRWRnZXNcIikuc3R5bGUoXCJwb2ludGVyLWV2ZW50c1wiLFwiYWxsXCIpLHMuYXR0cihcIndpZHRoXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGgrdC5zaXplLmwrdC5zaXplLnJ9KS5hdHRyKFwiaGVpZ2h0XCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0K3Quc2l6ZS50K3Quc2l6ZS5ifSkuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKFwiK3QudHJhbnNsYXRlWCtcIixcIit0LnRyYW5zbGF0ZVkrXCIpXCJ9KTt2YXIgZj1zLnNlbGVjdEFsbChcIi5cIituLmNuLnRhYmxlQ29udHJvbFZpZXcpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pLHg9Zi5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChuLmNuLnRhYmxlQ29udHJvbFZpZXcsITApLnN0eWxlKFwiYm94LXNpemluZ1wiLFwiY29udGVudC1ib3hcIik7ciYmeC5vbihcIm1vdXNlbW92ZVwiLGZ1bmN0aW9uKGUpe2YuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBlPT09dH0pLmNhbGwobSx0KX0pLm9uKFwibW91c2V3aGVlbFwiLGZ1bmN0aW9uKGUpe2lmKCFlLnNjcm9sbGJhclN0YXRlLndoZWVsaW5nKXtlLnNjcm9sbGJhclN0YXRlLndoZWVsaW5nPSEwO3ZhciByPWUuc2Nyb2xsWStpLmV2ZW50LmRlbHRhWTtTKHQsZixudWxsLHIpKGUpfHwoaS5ldmVudC5zdG9wUHJvcGFnYXRpb24oKSxpLmV2ZW50LnByZXZlbnREZWZhdWx0KCkpLGUuc2Nyb2xsYmFyU3RhdGUud2hlZWxpbmc9ITF9fSkuY2FsbChtLHQsITApLGYuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKFwiK3Quc2l6ZS5sK1wiIFwiK3Quc2l6ZS50K1wiKVwifSk7dmFyIGI9Zi5zZWxlY3RBbGwoXCIuXCIrbi5jbi5zY3JvbGxCYWNrZ3JvdW5kKS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKTtiLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKS5jbGFzc2VkKG4uY24uc2Nyb2xsQmFja2dyb3VuZCwhMCkuYXR0cihcImZpbGxcIixcIm5vbmVcIiksYi5hdHRyKFwid2lkdGhcIixmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aH0pLmF0dHIoXCJoZWlnaHRcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KSxmLmVhY2goZnVuY3Rpb24oZSl7by5zZXRDbGlwVXJsKGkuc2VsZWN0KHRoaXMpLGQodCxlKSx0KX0pO3ZhciBfPWYuc2VsZWN0QWxsKFwiLlwiK24uY24ueUNvbHVtbikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW5zfSxhLmtleUZ1bik7Xy5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChuLmNuLnlDb2x1bW4sITApLF8uZXhpdCgpLnJlbW92ZSgpLF8uYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKFwiK3QueCtcIiAwKVwifSksciYmXy5jYWxsKGkuYmVoYXZpb3IuZHJhZygpLm9yaWdpbihmdW5jdGlvbihlKXtyZXR1cm4gdyhpLnNlbGVjdCh0aGlzKSxlLC1uLnVwbGlmdCksbCh0aGlzKSxlLmNhbGNkYXRhLmNvbHVtbkRyYWdJblByb2dyZXNzPSEwLG0oZi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGUuY2FsY2RhdGEua2V5PT09dC5rZXl9KSx0KSxlfSkub24oXCJkcmFnXCIsZnVuY3Rpb24odCl7dmFyIGU9aS5zZWxlY3QodGhpcykscj1mdW5jdGlvbihlKXtyZXR1cm4odD09PWU/aS5ldmVudC54OmUueCkrZS5jb2x1bW5XaWR0aC8yfTt0Lng9TWF0aC5tYXgoLW4ub3ZlcmRyYWcsTWF0aC5taW4odC5jYWxjZGF0YS53aWR0aCtuLm92ZXJkcmFnLXQuY29sdW1uV2lkdGgsaS5ldmVudC54KSksdihfKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2FsY2RhdGEua2V5PT09dC5jYWxjZGF0YS5rZXl9KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIodCktcihlKX0pLmZvckVhY2goZnVuY3Rpb24oZSxyKXtlLnhJbmRleD1yLGUueD10PT09ZT9lLng6ZS54U2NhbGUoZSl9KSxfLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdCE9PWV9KS50cmFuc2l0aW9uKCkuZWFzZShuLnRyYW5zaXRpb25FYXNlKS5kdXJhdGlvbihuLnRyYW5zaXRpb25EdXJhdGlvbikuYXR0cihcInRyYW5zZm9ybVwiLGZ1bmN0aW9uKHQpe3JldHVyblwidHJhbnNsYXRlKFwiK3QueCtcIiAwKVwifSksZS5jYWxsKGMpLmF0dHIoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIit0LngrXCIgLVwiK24udXBsaWZ0K1wiIClcIil9KS5vbihcImRyYWdlbmRcIixmdW5jdGlvbihlKXt2YXIgcj1pLnNlbGVjdCh0aGlzKSxuPWUuY2FsY2RhdGE7ZS54PWUueFNjYWxlKGUpLGUuY2FsY2RhdGEuY29sdW1uRHJhZ0luUHJvZ3Jlc3M9ITEsdyhyLGUsMCksZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuZ2RDb2x1bW5zT3JpZ2luYWxPcmRlcjtlLmdkQ29sdW1ucy5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHJbbi5pbmRleE9mKHQpXS1yW24uaW5kZXhPZihlKV19KSxlLmNvbHVtbm9yZGVyPXIsdC5lbWl0KFwicGxvdGx5X3Jlc3R5bGVcIil9KHQsbixuLmNvbHVtbnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnhJbmRleH0pKX0pKSxfLmVhY2goZnVuY3Rpb24oZSl7by5zZXRDbGlwVXJsKGkuc2VsZWN0KHRoaXMpLGcodCxlKSx0KX0pO3ZhciBUPV8uc2VsZWN0QWxsKFwiLlwiK24uY24uY29sdW1uQmxvY2spLmRhdGEoaC5zcGxpdFRvUGFuZWxzLGEua2V5RnVuKTtULmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKG4uY24uY29sdW1uQmxvY2ssITApLmF0dHIoXCJpZFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleX0pLFQuc3R5bGUoXCJjdXJzb3JcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5kcmFnSGFuZGxlP1wiZXctcmVzaXplXCI6dC5jYWxjZGF0YS5zY3JvbGxiYXJTdGF0ZS5iYXJXaWdnbGVSb29tP1wibnMtcmVzaXplXCI6XCJkZWZhdWx0XCJ9KTt2YXIgRT1ULmZpbHRlcihBKSxDPVQuZmlsdGVyKGspO3ImJkMuY2FsbChpLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oZnVuY3Rpb24odCl7cmV0dXJuIGkuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCksdH0pLm9uKFwiZHJhZ1wiLFModCxmLC0xKSkub24oXCJkcmFnZW5kXCIsZnVuY3Rpb24oKXt9KSkseSh0LGYsRSxUKSx5KHQsZixDLFQpO3ZhciBMPWYuc2VsZWN0QWxsKFwiLlwiK24uY24uc2Nyb2xsQXJlYUNsaXApLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO0wuZW50ZXIoKS5hcHBlbmQoXCJjbGlwUGF0aFwiKS5jbGFzc2VkKG4uY24uc2Nyb2xsQXJlYUNsaXAsITApLmF0dHIoXCJpZFwiLGZ1bmN0aW9uKGUpe3JldHVybiBkKHQsZSl9KTt2YXIgej1MLnNlbGVjdEFsbChcIi5cIituLmNuLnNjcm9sbEFyZWFDbGlwUmVjdCkuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7ei5lbnRlcigpLmFwcGVuZChcInJlY3RcIikuY2xhc3NlZChuLmNuLnNjcm9sbEFyZWFDbGlwUmVjdCwhMCkuYXR0cihcInhcIiwtbi5vdmVyZHJhZykuYXR0cihcInlcIiwtbi51cGxpZnQpLmF0dHIoXCJmaWxsXCIsXCJub25lXCIpLHouYXR0cihcIndpZHRoXCIsZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGgrMipuLm92ZXJkcmFnfSkuYXR0cihcImhlaWdodFwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodCtuLnVwbGlmdH0pLF8uc2VsZWN0QWxsKFwiLlwiK24uY24uY29sdW1uQm91bmRhcnkpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKG4uY24uY29sdW1uQm91bmRhcnksITApO3ZhciBPPV8uc2VsZWN0QWxsKFwiLlwiK24uY24uY29sdW1uQm91bmRhcnlDbGlwcGF0aCkuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7Ty5lbnRlcigpLmFwcGVuZChcImNsaXBQYXRoXCIpLmNsYXNzZWQobi5jbi5jb2x1bW5Cb3VuZGFyeUNsaXBwYXRoLCEwKSxPLmF0dHIoXCJpZFwiLGZ1bmN0aW9uKGUpe3JldHVybiBnKHQsZSl9KTt2YXIgST1PLnNlbGVjdEFsbChcIi5cIituLmNuLmNvbHVtbkJvdW5kYXJ5UmVjdCkuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7SS5lbnRlcigpLmFwcGVuZChcInJlY3RcIikuY2xhc3NlZChuLmNuLmNvbHVtbkJvdW5kYXJ5UmVjdCwhMCkuYXR0cihcImZpbGxcIixcIm5vbmVcIiksSS5hdHRyKFwid2lkdGhcIixmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW5XaWR0aCsyKnAodCl9KS5hdHRyKFwiaGVpZ2h0XCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuY2FsY2RhdGEuaGVpZ2h0KzIqcCh0KStuLnVwbGlmdH0pLmF0dHIoXCJ4XCIsZnVuY3Rpb24odCl7cmV0dXJuLXAodCl9KS5hdHRyKFwieVwiLGZ1bmN0aW9uKHQpe3JldHVybi1wKHQpfSksTShudWxsLEMsZil9fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vbGliL2d1cFwiOjY5OSxcIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlsc1wiOjcyNSxcIi4vY29uc3RhbnRzXCI6MTE1NyxcIi4vZGF0YV9wcmVwYXJhdGlvbl9oZWxwZXJcIjoxMTU4LFwiLi9kYXRhX3NwbGl0X2hlbHBlcnNcIjoxMTU5LGQzOjE1NX1dLDExNjM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vYm94L2F0dHJpYnV0ZXNcIiksaT10KFwiLi4vLi4vbGliL2V4dGVuZFwiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17eTpuLnkseDpuLngseDA6bi54MCx5MDpuLnkwLG5hbWU6aSh7fSxuLm5hbWUse30pLG9yaWVudGF0aW9uOmkoe30sbi5vcmllbnRhdGlvbix7fSksYmFuZHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsZWRpdFR5cGU6XCJjYWxjXCJ9LHNjYWxlZ3JvdXA6e3ZhbFR5cGU6XCJzdHJpbmdcIixkZmx0OlwiXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHNjYWxlbW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wid2lkdGhcIixcImNvdW50XCJdLGRmbHQ6XCJ3aWR0aFwiLGVkaXRUeXBlOlwiY2FsY1wifSxzcGFubW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wic29mdFwiLFwiaGFyZFwiLFwibWFudWFsXCJdLGRmbHQ6XCJzb2Z0XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHNwYW46e3ZhbFR5cGU6XCJpbmZvX2FycmF5XCIsaXRlbXM6W3t2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LHt2YWxUeXBlOlwiYW55XCIsZWRpdFR5cGU6XCJjYWxjXCJ9XSxlZGl0VHlwZTpcImNhbGNcIn0sbGluZTp7Y29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwic3R5bGVcIn0sd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxkZmx0OjIsZWRpdFR5cGU6XCJzdHlsZVwifSxlZGl0VHlwZTpcInBsb3RcIn0sZmlsbGNvbG9yOm4uZmlsbGNvbG9yLHBvaW50czppKHt9LG4uYm94cG9pbnRzLHt9KSxqaXR0ZXI6aSh7fSxuLmppdHRlcix7fSkscG9pbnRwb3M6aSh7fSxuLnBvaW50cG9zLHt9KSx3aWR0aDppKHt9LG4ud2lkdGgse30pLG1hcmtlcjpuLm1hcmtlcix0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTpuLmhvdmVydGVtcGxhdGUsYm94Ont2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEsZWRpdFR5cGU6XCJwbG90XCJ9LHdpZHRoOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDouMjUsZWRpdFR5cGU6XCJwbG90XCJ9LGZpbGxjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJzdHlsZVwifSxsaW5lOntjb2xvcjp7dmFsVHlwZTpcImNvbG9yXCIsZWRpdFR5cGU6XCJzdHlsZVwifSx3aWR0aDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLGVkaXRUeXBlOlwic3R5bGVcIn0sZWRpdFR5cGU6XCJzdHlsZVwifSxlZGl0VHlwZTpcInBsb3RcIn0sbWVhbmxpbmU6e3Zpc2libGU6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMSxlZGl0VHlwZTpcInBsb3RcIn0sY29sb3I6e3ZhbFR5cGU6XCJjb2xvclwiLGVkaXRUeXBlOlwic3R5bGVcIn0sd2lkdGg6e3ZhbFR5cGU6XCJudW1iZXJcIixtaW46MCxlZGl0VHlwZTpcInN0eWxlXCJ9LGVkaXRUeXBlOlwicGxvdFwifSxzaWRlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJib3RoXCIsXCJwb3NpdGl2ZVwiLFwibmVnYXRpdmVcIl0sZGZsdDpcImJvdGhcIixlZGl0VHlwZTpcImNhbGNcIn0sb2Zmc2V0Z3JvdXA6bi5vZmZzZXRncm91cCxhbGlnbm1lbnRncm91cDpuLmFsaWdubWVudGdyb3VwLHNlbGVjdGVkOm4uc2VsZWN0ZWQsdW5zZWxlY3RlZDpuLnVuc2VsZWN0ZWQsaG92ZXJvbjp7dmFsVHlwZTpcImZsYWdsaXN0XCIsZmxhZ3M6W1widmlvbGluc1wiLFwicG9pbnRzXCIsXCJrZGVcIl0sZGZsdDpcInZpb2xpbnMrcG9pbnRzK2tkZVwiLGV4dHJhczpbXCJhbGxcIl0sZWRpdFR5cGU6XCJzdHlsZVwifX19LHtcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi9ib3gvYXR0cmlidXRlc1wiOjg2Mn1dLDExNjQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGE9dChcIi4uL2JveC9jYWxjXCIpLG89dChcIi4vaGVscGVyc1wiKSxzPXQoXCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsXCIpLkJBRE5VTTtmdW5jdGlvbiBsKHQsZSxyKXt2YXIgaT1lLm1heC1lLm1pbjtpZighaSlyZXR1cm4gdC5iYW5kd2lkdGg/dC5iYW5kd2lkdGg6MDtpZih0LmJhbmR3aWR0aClyZXR1cm4gTWF0aC5tYXgodC5iYW5kd2lkdGgsaS8xZTQpO3ZhciBhPXIubGVuZ3RoLG89bi5zdGRldihyLGEtMSxlLm1lYW4pO3JldHVybiBNYXRoLm1heChmdW5jdGlvbih0LGUscil7cmV0dXJuIDEuMDU5Kk1hdGgubWluKGUsci8xLjM0OSkqTWF0aC5wb3codCwtLjIpfShhLG8sZS5xMy1lLnExKSxpLzEwMCl9ZnVuY3Rpb24gYyh0LGUscixuKXt2YXIgYSxvPXQuc3Bhbm1vZGUsbD10LnNwYW58fFtdLGM9W2UubWluLGUubWF4XSx1PVtlLm1pbi0yKm4sZS5tYXgrMipuXTtmdW5jdGlvbiBoKG4pe3ZhciBpPWxbbl0sYT1cIm11bHRpY2F0ZWdvcnlcIj09PXIudHlwZT9yLnIyYyhpKTpyLmQyYyhpLDAsdFtlLnZhbExldHRlcitcImNhbGVuZGFyXCJdKTtyZXR1cm4gYT09PXM/dVtuXTphfXZhciBmPXt0eXBlOlwibGluZWFyXCIscmFuZ2U6YT1cInNvZnRcIj09PW8/dTpcImhhcmRcIj09PW8/YzpbaCgwKSxoKDEpXX07cmV0dXJuIGkuc2V0Q29udmVydChmKSxmLmNsZWFuUmFuZ2UoKSxhfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWEodCxlKTtpZihyWzBdLnQuZW1wdHkpcmV0dXJuIHI7Zm9yKHZhciBzPXQuX2Z1bGxMYXlvdXQsdT1pLmdldEZyb21JZCh0LGVbXCJoXCI9PT1lLm9yaWVudGF0aW9uP1wieGF4aXNcIjpcInlheGlzXCJdKSxoPTEvMCxmPS0xLzAscD0wLGQ9MCxnPTA7ZzxyLmxlbmd0aDtnKyspe3ZhciB2PXJbZ10sbT12LnB0cy5tYXAoby5leHRyYWN0VmFsKSx5PXYuYmFuZHdpZHRoPWwoZSx2LG0pLHg9di5zcGFuPWMoZSx2LHUseSk7aWYodi5taW49PT12Lm1heCYmMD09PXkpeD12LnNwYW49W3YubWluLHYubWF4XSx2LmRlbnNpdHk9W3t2OjEsdDp4WzBdfV0sdi5iYW5kd2lkdGg9eSxwPU1hdGgubWF4KHAsMSk7ZWxzZXt2YXIgYj14WzFdLXhbMF0sXz1NYXRoLmNlaWwoYi8oeS8zKSksdz1iL187aWYoIWlzRmluaXRlKHcpfHwhaXNGaW5pdGUoXykpcmV0dXJuIG4uZXJyb3IoXCJTb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIGNvbXB1dGluZyB0aGUgdmlvbGluIHNwYW5cIiksclswXS50LmVtcHR5PSEwLHI7dmFyIGs9by5tYWtlS0RFKHYsZSxtKTt2LmRlbnNpdHk9bmV3IEFycmF5KF8pO2Zvcih2YXIgQT0wLFQ9eFswXTtUPHhbMV0rdy8yO0ErKyxUKz13KXt2YXIgTT1rKFQpO3YuZGVuc2l0eVtBXT17djpNLHQ6VH0scD1NYXRoLm1heChwLE0pfX1kPU1hdGgubWF4KGQsbS5sZW5ndGgpLGg9TWF0aC5taW4oaCx4WzBdKSxmPU1hdGgubWF4KGYseFsxXSl9dmFyIFM9aS5maW5kRXh0cmVtZXModSxbaCxmXSx7cGFkZGVkOiEwfSk7aWYoZS5fZXh0cmVtZXNbdS5faWRdPVMsZS53aWR0aClyWzBdLnQubWF4S0RFPXA7ZWxzZXt2YXIgRT1zLl92aW9saW5TY2FsZUdyb3VwU3RhdHMsQz1lLnNjYWxlZ3JvdXAsTD1FW0NdO0w/KEwubWF4S0RFPU1hdGgubWF4KEwubWF4S0RFLHApLEwubWF4Q291bnQ9TWF0aC5tYXgoTC5tYXhDb3VudCxkKSk6RVtDXT17bWF4S0RFOnAsbWF4Q291bnQ6ZH19cmV0dXJuIHJbMF0udC5sYWJlbHMua2RlPW4uXyh0LFwia2RlOlwiKSxyfX0se1wiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uLy4uL2xpYlwiOjcwMSxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vYm94L2NhbGNcIjo4NjMsXCIuL2hlbHBlcnNcIjoxMTY3fV0sMTE2NTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9ib3gvY3Jvc3NfdHJhY2VfY2FsY1wiKS5zZXRQb3NpdGlvbk9mZnNldCxpPVtcInZcIixcImhcIl07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY2FsY2RhdGEsYT1lLnhheGlzLG89ZS55YXhpcyxzPTA7czxpLmxlbmd0aDtzKyspe2Zvcih2YXIgbD1pW3NdLGM9XCJoXCI9PT1sP286YSx1PVtdLGg9MDtoPHIubGVuZ3RoO2grKyl7dmFyIGY9cltoXSxwPWZbMF0udCxkPWZbMF0udHJhY2U7ITAhPT1kLnZpc2libGV8fFwidmlvbGluXCIhPT1kLnR5cGV8fHAuZW1wdHl8fGQub3JpZW50YXRpb24hPT1sfHxkLnhheGlzIT09YS5faWR8fGQueWF4aXMhPT1vLl9pZHx8dS5wdXNoKGgpfW4oXCJ2aW9saW5cIix0LHUsYyl9fX0se1wiLi4vYm94L2Nyb3NzX3RyYWNlX2NhbGNcIjo4NjR9XSwxMTY2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGE9dChcIi4uL2JveC9kZWZhdWx0c1wiKSxvPXQoXCIuL2F0dHJpYnV0ZXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX1mdW5jdGlvbiBjKHIsaSl7cmV0dXJuIG4uY29lcmNlMih0LGUsbyxyLGkpfWlmKGEuaGFuZGxlU2FtcGxlRGVmYXVsdHModCxlLGwscyksITEhPT1lLnZpc2libGUpe2woXCJiYW5kd2lkdGhcIiksbChcInNpZGVcIiksbChcIndpZHRoXCIpfHwobChcInNjYWxlZ3JvdXBcIixlLm5hbWUpLGwoXCJzY2FsZW1vZGVcIikpO3ZhciB1LGg9bChcInNwYW5cIik7QXJyYXkuaXNBcnJheShoKSYmKHU9XCJtYW51YWxcIiksbChcInNwYW5tb2RlXCIsdSk7dmFyIGY9bChcImxpbmUuY29sb3JcIiwodC5tYXJrZXJ8fHt9KS5jb2xvcnx8cikscD1sKFwibGluZS53aWR0aFwiKSxkPWwoXCJmaWxsY29sb3JcIixpLmFkZE9wYWNpdHkoZS5saW5lLmNvbG9yLC41KSk7YS5oYW5kbGVQb2ludHNEZWZhdWx0cyh0LGUsbCx7cHJlZml4OlwiXCJ9KTt2YXIgZz1jKFwiYm94LndpZHRoXCIpLHY9YyhcImJveC5maWxsY29sb3JcIixkKSxtPWMoXCJib3gubGluZS5jb2xvclwiLGYpLHk9YyhcImJveC5saW5lLndpZHRoXCIscCk7bChcImJveC52aXNpYmxlXCIsQm9vbGVhbihnfHx2fHxtfHx5KSl8fChlLmJveD17dmlzaWJsZTohMX0pO3ZhciB4PWMoXCJtZWFubGluZS5jb2xvclwiLGYpLGI9YyhcIm1lYW5saW5lLndpZHRoXCIscCk7bChcIm1lYW5saW5lLnZpc2libGVcIixCb29sZWFuKHh8fGIpKXx8KGUubWVhbmxpbmU9e3Zpc2libGU6ITF9KX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vYm94L2RlZmF1bHRzXCI6ODY1LFwiLi9hdHRyaWJ1dGVzXCI6MTE2M31dLDExNjc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9ZnVuY3Rpb24odCl7cmV0dXJuIDEvTWF0aC5zcXJ0KDIqTWF0aC5QSSkqTWF0aC5leHAoLS41KnQqdCl9O3IubWFrZUtERT1mdW5jdGlvbih0LGUscil7dmFyIG49ci5sZW5ndGgsYT1pLG89dC5iYW5kd2lkdGgscz0xLyhuKm8pO3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxpPTA7aTxuO2krKyllKz1hKCh0LXJbaV0pL28pO3JldHVybiBzKmV9fSxyLmdldFBvc2l0aW9uT25LZGVQYXRoPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhO1wiaFwiPT09ZS5vcmllbnRhdGlvbj8oaT1cInlcIixhPVwieFwiKTooaT1cInhcIixhPVwieVwiKTt2YXIgbz1uLmZpbmRQb2ludE9uUGF0aCh0LnBhdGgscixhLHtwYXRoTGVuZ3RoOnQucGF0aExlbmd0aH0pLHM9dC5wb3NDZW50ZXJQeCxsPW9baV07cmV0dXJuW2wsXCJib3RoXCI9PT1lLnNpZGU/MipzLWw6c119LHIuZ2V0S2RlVmFsdWU9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXQucHRzLm1hcChyLmV4dHJhY3RWYWwpO3JldHVybiByLm1ha2VLREUodCxlLGkpKG4pL3QucG9zRGVuc2l0eVNjYWxlfSxyLmV4dHJhY3RWYWw9ZnVuY3Rpb24odCl7cmV0dXJuIHQudn19LHtcIi4uLy4uL2xpYlwiOjcwMX1dLDExNjg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGE9dChcIi4uL2JveC9ob3ZlclwiKSxvPXQoXCIuL2hlbHBlcnNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCl7dmFyIGMsdSxoPXQuY2QsZj1oWzBdLnRyYWNlLHA9Zi5ob3Zlcm9uLGQ9LTEhPT1wLmluZGV4T2YoXCJ2aW9saW5zXCIpLGc9LTEhPT1wLmluZGV4T2YoXCJrZGVcIiksdj1bXTtpZihkfHxnKXt2YXIgbT1hLmhvdmVyT25Cb3hlcyh0LGUscixzKTtpZihkJiYodj12LmNvbmNhdChtKSksZyYmbS5sZW5ndGg+MCl7dmFyIHkseCxiLF8sdyxrPXQueGEsQT10LnlhO1wiaFwiPT09Zi5vcmllbnRhdGlvbj8odz1lLHk9XCJ5XCIsYj1BLHg9XCJ4XCIsXz1rKToodz1yLHk9XCJ4XCIsYj1rLHg9XCJ5XCIsXz1BKTt2YXIgVD1oW3QuaW5kZXhdO2lmKHc+PVQuc3BhblswXSYmdzw9VC5zcGFuWzFdKXt2YXIgTT1uLmV4dGVuZEZsYXQoe30sdCksUz1fLmMycCh3LCEwKSxFPW8uZ2V0S2RlVmFsdWUoVCxmLHcpLEM9by5nZXRQb3NpdGlvbk9uS2RlUGF0aChULGYsUyksTD1iLl9vZmZzZXQsej1iLl9sZW5ndGg7TVt5K1wiMFwiXT1DWzBdLE1beStcIjFcIl09Q1sxXSxNW3grXCIwXCJdPU1beCtcIjFcIl09UyxNW3grXCJMYWJlbFwiXT14K1wiOiBcIitpLmhvdmVyTGFiZWxUZXh0KF8sdykrXCIsIFwiK2hbMF0udC5sYWJlbHMua2RlK1wiIFwiK0UudG9GaXhlZCgzKSxNLnNwaWtlRGlzdGFuY2U9bVswXS5zcGlrZURpc3RhbmNlO3ZhciBPPXkrXCJTcGlrZVwiO01bT109bVswXVtPXSxtWzBdLnNwaWtlRGlzdGFuY2U9dm9pZCAwLG1bMF1bT109dm9pZCAwLE0uaG92ZXJ0ZW1wbGF0ZT0hMSx2LnB1c2goTSksKHU9e3N0cm9rZTp0LmNvbG9yfSlbeStcIjFcIl09bi5jb25zdHJhaW4oTCtDWzBdLEwsTCt6KSx1W3krXCIyXCJdPW4uY29uc3RyYWluKEwrQ1sxXSxMLEwreiksdVt4K1wiMVwiXT11W3grXCIyXCJdPV8uX29mZnNldCtTfX19LTEhPT1wLmluZGV4T2YoXCJwb2ludHNcIikmJihjPWEuaG92ZXJPblBvaW50cyh0LGUscikpO3ZhciBJPWwuc2VsZWN0QWxsKFwiLnZpb2xpbmxpbmUtXCIrZi51aWQpLmRhdGEodT9bMF06W10pO3JldHVybiBJLmVudGVyKCkuYXBwZW5kKFwibGluZVwiKS5jbGFzc2VkKFwidmlvbGlubGluZS1cIitmLnVpZCwhMCkuYXR0cihcInN0cm9rZS13aWR0aFwiLDEuNSksSS5leGl0KCkucmVtb3ZlKCksSS5hdHRyKHUpLFwiY2xvc2VzdFwiPT09cz9jP1tjXTp2OmM/KHYucHVzaChjKSx2KTp2fX0se1wiLi4vLi4vbGliXCI6NzAxLFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuLi9ib3gvaG92ZXJcIjo4NjcsXCIuL2hlbHBlcnNcIjoxMTY3fV0sMTE2OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KFwiLi9hdHRyaWJ1dGVzXCIpLGxheW91dEF0dHJpYnV0ZXM6dChcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIiksc3VwcGx5RGVmYXVsdHM6dChcIi4vZGVmYXVsdHNcIiksY3Jvc3NUcmFjZURlZmF1bHRzOnQoXCIuLi9ib3gvZGVmYXVsdHNcIikuY3Jvc3NUcmFjZURlZmF1bHRzLHN1cHBseUxheW91dERlZmF1bHRzOnQoXCIuL2xheW91dF9kZWZhdWx0c1wiKSxjYWxjOnQoXCIuL2NhbGNcIiksY3Jvc3NUcmFjZUNhbGM6dChcIi4vY3Jvc3NfdHJhY2VfY2FsY1wiKSxwbG90OnQoXCIuL3Bsb3RcIiksc3R5bGU6dChcIi4vc3R5bGVcIiksc3R5bGVPblNlbGVjdDp0KFwiLi4vc2NhdHRlci9zdHlsZVwiKS5zdHlsZU9uU2VsZWN0LGhvdmVyUG9pbnRzOnQoXCIuL2hvdmVyXCIpLHNlbGVjdFBvaW50czp0KFwiLi4vYm94L3NlbGVjdFwiKSxtb2R1bGVUeXBlOlwidHJhY2VcIixuYW1lOlwidmlvbGluXCIsYmFzZVBsb3RNb2R1bGU6dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiKSxjYXRlZ29yaWVzOltcImNhcnRlc2lhblwiLFwic3ZnXCIsXCJzeW1ib2xzXCIsXCJvcmllbnRlZFwiLFwiYm94LXZpb2xpblwiLFwic2hvd0xlZ2VuZFwiLFwidmlvbGluTGF5b3V0XCIsXCJ6b29tU2NhbGVcIl0sbWV0YTp7fX19LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiOjc2MCxcIi4uL2JveC9kZWZhdWx0c1wiOjg2NSxcIi4uL2JveC9zZWxlY3RcIjo4NzIsXCIuLi9zY2F0dGVyL3N0eWxlXCI6MTA3NSxcIi4vYXR0cmlidXRlc1wiOjExNjMsXCIuL2NhbGNcIjoxMTY0LFwiLi9jcm9zc190cmFjZV9jYWxjXCI6MTE2NSxcIi4vZGVmYXVsdHNcIjoxMTY2LFwiLi9ob3ZlclwiOjExNjgsXCIuL2xheW91dF9hdHRyaWJ1dGVzXCI6MTE3MCxcIi4vbGF5b3V0X2RlZmF1bHRzXCI6MTE3MSxcIi4vcGxvdFwiOjExNzIsXCIuL3N0eWxlXCI6MTE3M31dLDExNzA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vYm94L2xheW91dF9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uLy4uL2xpYlwiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17dmlvbGlubW9kZTppKHt9LG4uYm94bW9kZSx7fSksdmlvbGluZ2FwOmkoe30sbi5ib3hnYXAse30pLHZpb2xpbmdyb3VwZ2FwOmkoe30sbi5ib3hncm91cGdhcCx7fSl9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9ib3gvbGF5b3V0X2F0dHJpYnV0ZXNcIjo4Njl9XSwxMTcxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpLGE9dChcIi4uL2JveC9sYXlvdXRfZGVmYXVsdHNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXthLl9zdXBwbHkodCxlLHIsZnVuY3Rpb24ocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX0sXCJ2aW9saW5cIil9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9ib3gvbGF5b3V0X2RlZmF1bHRzXCI6ODcwLFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjExNzB9XSwxMTcyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2xpYlwiKSxhPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksbz10KFwiLi4vYm94L3Bsb3RcIikscz10KFwiLi4vc2NhdHRlci9saW5lX3BvaW50c1wiKSxsPXQoXCIuL2hlbHBlcnNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe3ZhciB1PXQuX2Z1bGxMYXlvdXQsaD1lLnhheGlzLGY9ZS55YXhpcztmdW5jdGlvbiBwKHQpe3ZhciBlPXModCx7eGF4aXM6aCx5YXhpczpmLGNvbm5lY3RHYXBzOiEwLGJhc2VUb2xlcmFuY2U6Ljc1LHNoYXBlOlwic3BsaW5lXCIsc2ltcGxpZnk6ITB9KTtyZXR1cm4gYS5zbW9vdGhvcGVuKGVbMF0sMSl9aS5tYWtlVHJhY2VHcm91cHMoYyxyLFwidHJhY2UgdmlvbGluc1wiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGE9dFswXSxzPWEudCxjPWEudHJhY2U7aWYoZS5pc1JhbmdlUGxvdHx8KGEubm9kZTM9ciksITAhPT1jLnZpc2libGV8fHMuZW1wdHkpci5yZW1vdmUoKTtlbHNle3ZhciBkPXMuYlBvcyxnPXMuYmRQb3Msdj1lW3MudmFsTGV0dGVyK1wiYXhpc1wiXSxtPWVbcy5wb3NMZXR0ZXIrXCJheGlzXCJdLHk9XCJib3RoXCI9PT1jLnNpZGUseD15fHxcInBvc2l0aXZlXCI9PT1jLnNpZGUsYj15fHxcIm5lZ2F0aXZlXCI9PT1jLnNpZGUsXz1yLnNlbGVjdEFsbChcInBhdGgudmlvbGluXCIpLmRhdGEoaS5pZGVudGl0eSk7Xy5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuc3R5bGUoXCJ2ZWN0b3ItZWZmZWN0XCIsXCJub24tc2NhbGluZy1zdHJva2VcIikuYXR0cihcImNsYXNzXCIsXCJ2aW9saW5cIiksXy5leGl0KCkucmVtb3ZlKCksXy5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxhLG8sbCxoLGYsXz1uLnNlbGVjdCh0aGlzKSx3PXQuZGVuc2l0eSxrPXcubGVuZ3RoLEE9dC5wb3MrZCxUPW0uYzJwKEEpO2lmKGMud2lkdGgpZT1zLm1heEtERS9nO2Vsc2V7dmFyIE09dS5fdmlvbGluU2NhbGVHcm91cFN0YXRzW2Muc2NhbGVncm91cF07ZT1cImNvdW50XCI9PT1jLnNjYWxlbW9kZT9NLm1heEtERS9nKihNLm1heENvdW50L3QucHRzLmxlbmd0aCk6TS5tYXhLREUvZ31pZih4KXtmb3IoaD1uZXcgQXJyYXkoayksbz0wO288aztvKyspKGY9aFtvXT17fSlbcy5wb3NMZXR0ZXJdPUErd1tvXS52L2UsZltzLnZhbExldHRlcl09d1tvXS50O3I9cChoKX1pZihiKXtmb3IoaD1uZXcgQXJyYXkoayksbD0wLG89ay0xO2w8aztsKyssby0tKShmPWhbbF09e30pW3MucG9zTGV0dGVyXT1BLXdbb10udi9lLGZbcy52YWxMZXR0ZXJdPXdbb10udDtpPXAoaCl9aWYoeSlhPXIrXCJMXCIraS5zdWJzdHIoMSkrXCJaXCI7ZWxzZXt2YXIgUz1bVCx2LmMycCh3WzBdLnQpXSxFPVtULHYuYzJwKHdbay0xXS50KV07XCJoXCI9PT1jLm9yaWVudGF0aW9uJiYoUy5yZXZlcnNlKCksRS5yZXZlcnNlKCkpLGE9eD9cIk1cIitTK1wiTFwiK3Iuc3Vic3RyKDEpK1wiTFwiK0U6XCJNXCIrRStcIkxcIitpLnN1YnN0cigxKStcIkxcIitTfV8uYXR0cihcImRcIixhKSx0LnBvc0NlbnRlclB4PVQsdC5wb3NEZW5zaXR5U2NhbGU9ZSpnLHQucGF0aD1fLm5vZGUoKSx0LnBhdGhMZW5ndGg9dC5wYXRoLmdldFRvdGFsTGVuZ3RoKCkvKHk/MjoxKX0pO3ZhciB3LGssQSxUPWMuYm94LE09VC53aWR0aCxTPShULmxpbmV8fHt9KS53aWR0aDt5Pyh3PWcqTSxrPTApOng/KHc9WzAsZypNLzJdLGs9LVMpOih3PVtnKk0vMiwwXSxrPVMpLG8ucGxvdEJveEFuZFdoaXNrZXJzKHIse3BvczptLHZhbDp2fSxjLHtiUG9zOmQsYmRQb3M6dyxiUG9zUHhPZmZzZXQ6a30pLG8ucGxvdEJveE1lYW4ocix7cG9zOm0sdmFsOnZ9LGMse2JQb3M6ZCxiZFBvczp3LGJQb3NQeE9mZnNldDprfSksIWMuYm94LnZpc2libGUmJmMubWVhbmxpbmUudmlzaWJsZSYmKEE9aS5pZGVudGl0eSk7dmFyIEU9ci5zZWxlY3RBbGwoXCJwYXRoLm1lYW5saW5lXCIpLmRhdGEoQXx8W10pO0UuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJjbGFzc1wiLFwibWVhbmxpbmVcIikuc3R5bGUoXCJmaWxsXCIsXCJub25lXCIpLnN0eWxlKFwidmVjdG9yLWVmZmVjdFwiLFwibm9uLXNjYWxpbmctc3Ryb2tlXCIpLEUuZXhpdCgpLnJlbW92ZSgpLEUuZWFjaChmdW5jdGlvbih0KXt2YXIgZT12LmMycCh0Lm1lYW4sITApLHI9bC5nZXRQb3NpdGlvbk9uS2RlUGF0aCh0LGMsZSk7bi5zZWxlY3QodGhpcykuYXR0cihcImRcIixcImhcIj09PWMub3JpZW50YXRpb24/XCJNXCIrZStcIixcIityWzBdK1wiVlwiK3JbMV06XCJNXCIrclswXStcIixcIitlK1wiSFwiK3JbMV0pfSksby5wbG90UG9pbnRzKHIse3g6aCx5OmZ9LGMscyl9fSl9fSx7XCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIjo1OTksXCIuLi8uLi9saWJcIjo3MDEsXCIuLi9ib3gvcGxvdFwiOjg3MSxcIi4uL3NjYXR0ZXIvbGluZV9wb2ludHNcIjoxMDY2LFwiLi9oZWxwZXJzXCI6MTE2NyxkMzoxNTV9XSwxMTczOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcImQzXCIpLGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIiksYT10KFwiLi4vc2NhdHRlci9zdHlsZVwiKS5zdHlsZVBvaW50cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lP2VbMF0ubm9kZTM6bi5zZWxlY3QodCkuc2VsZWN0QWxsKFwiZy50cmFjZS52aW9saW5zXCIpO3Iuc3R5bGUoXCJvcGFjaXR5XCIsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pLHIuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1lWzBdLnRyYWNlLG89bi5zZWxlY3QodGhpcykscz1yLmJveHx8e30sbD1zLmxpbmV8fHt9LGM9ci5tZWFubGluZXx8e30sdT1jLndpZHRoO28uc2VsZWN0QWxsKFwicGF0aC52aW9saW5cIikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixyLmxpbmUud2lkdGgrXCJweFwiKS5jYWxsKGkuc3Ryb2tlLHIubGluZS5jb2xvcikuY2FsbChpLmZpbGwsci5maWxsY29sb3IpLG8uc2VsZWN0QWxsKFwicGF0aC5ib3hcIikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIixsLndpZHRoK1wicHhcIikuY2FsbChpLnN0cm9rZSxsLmNvbG9yKS5jYWxsKGkuZmlsbCxzLmZpbGxjb2xvcik7dmFyIGg9e1wic3Ryb2tlLXdpZHRoXCI6dStcInB4XCIsXCJzdHJva2UtZGFzaGFycmF5XCI6Mip1K1wicHgsXCIrdStcInB4XCJ9O28uc2VsZWN0QWxsKFwicGF0aC5tZWFuXCIpLnN0eWxlKGgpLmNhbGwoaS5zdHJva2UsYy5jb2xvciksby5zZWxlY3RBbGwoXCJwYXRoLm1lYW5saW5lXCIpLnN0eWxlKGgpLmNhbGwoaS5zdHJva2UsYy5jb2xvciksYShvLHIsdCl9KX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi9zY2F0dGVyL3N0eWxlXCI6MTA3NSxkMzoxNTV9XSwxMTc0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzXCIpLGk9dChcIi4uL2lzb3N1cmZhY2UvYXR0cmlidXRlc1wiKSxhPXQoXCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzXCIpLG89dChcIi4uLy4uL2xpYi9leHRlbmRcIikuZXh0ZW5kRmxhdCxzPXQoXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCIpLm92ZXJyaWRlQWxsLGw9ZS5leHBvcnRzPXMobyh7eDppLngseTppLnksejppLnosdmFsdWU6aS52YWx1ZSxpc29taW46aS5pc29taW4saXNvbWF4OmkuaXNvbWF4LHN1cmZhY2U6aS5zdXJmYWNlLHNwYWNlZnJhbWU6e3Nob3c6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMX0sZmlsbDp7dmFsVHlwZTpcIm51bWJlclwiLG1pbjowLG1heDoxLGRmbHQ6MX19LHNsaWNlczppLnNsaWNlcyxjYXBzOmkuY2Fwcyx0ZXh0OmkudGV4dCxob3ZlcnRleHQ6aS5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTppLmhvdmVydGVtcGxhdGV9LG4oXCJcIix7Y29sb3JBdHRyOlwiYHZhbHVlYFwiLHNob3dTY2FsZURmbHQ6ITAsZWRpdFR5cGVPdmVycmlkZTpcImNhbGNcIn0pLHtjb2xvcmJhcjppLmNvbG9yYmFyLG9wYWNpdHk6aS5vcGFjaXR5LG9wYWNpdHlzY2FsZTp7dmFsVHlwZTpcImFueVwiLGVkaXRUeXBlOlwiY2FsY1wifSxsaWdodHBvc2l0aW9uOmkubGlnaHRwb3NpdGlvbixsaWdodGluZzppLmxpZ2h0aW5nLGZsYXRzaGFkaW5nOmkuZmxhdHNoYWRpbmcsY29udG91cjppLmNvbnRvdXIsaG92ZXJpbmZvOm8oe30sYS5ob3ZlcmluZm8pfSksXCJjYWxjXCIsXCJuZXN0ZWRcIik7bC54LmVkaXRUeXBlPWwueS5lZGl0VHlwZT1sLnouZWRpdFR5cGU9bC52YWx1ZS5lZGl0VHlwZT1cImNhbGMrY2xlYXJBeGlzVHlwZXNcIixsLnRyYW5zZm9ybXM9dm9pZCAwfSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlc1wiOjU4NSxcIi4uLy4uL2xpYi9leHRlbmRcIjo2OTEsXCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzXCI6NzMyLFwiLi4vLi4vcGxvdHMvYXR0cmlidXRlc1wiOjc0NixcIi4uL2lzb3N1cmZhY2UvYXR0cmlidXRlc1wiOjk4OX1dLDExNzU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiZ2wtbWVzaDNkXCIpLGk9dChcIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3JcIikucGFyc2VDb2xvclNjYWxlLGE9dChcIi4uLy4uL2xpYi9zdHIycmdiYXJyYXlcIiksbz10KFwiLi4vLi4vcGxvdHMvZ2wzZC96aXAzXCIpLHM9dChcIi4uL2lzb3N1cmZhY2UvY29udmVydFwiKS5maW5kTmVhcmVzdE9uQXhpcyxsPXQoXCIuLi9pc29zdXJmYWNlL2NvbnZlcnRcIikuZ2VuZXJhdGVJc29NZXNoZXM7ZnVuY3Rpb24gYyh0LGUscil7dGhpcy5zY2VuZT10LHRoaXMudWlkPXIsdGhpcy5tZXNoPWUsdGhpcy5uYW1lPVwiXCIsdGhpcy5kYXRhPW51bGwsdGhpcy5zaG93Q29udG91cj0hMX12YXIgdT1jLnByb3RvdHlwZTt1LmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLm1lc2gpe3ZhciBlPXQuZGF0YS5pbmRleCxyPXRoaXMuZGF0YS5feFtlXSxuPXRoaXMuZGF0YS5feVtlXSxpPXRoaXMuZGF0YS5feltlXSxhPXRoaXMuZGF0YS5fWXMubGVuZ3RoLG89dGhpcy5kYXRhLl9acy5sZW5ndGgsbD1zKHIsdGhpcy5kYXRhLl9YcykuaWQsYz1zKG4sdGhpcy5kYXRhLl9ZcykuaWQsdT1zKGksdGhpcy5kYXRhLl9acykuaWQsaD10LmluZGV4PXUrbypjK28qYSpsO3QudHJhY2VDb29yZGluYXRlPVt0aGlzLmRhdGEuX3hbaF0sdGhpcy5kYXRhLl95W2hdLHRoaXMuZGF0YS5feltoXSx0aGlzLmRhdGEudmFsdWVbaF1dO3ZhciBmPXRoaXMuZGF0YS5ob3ZlcnRleHR8fHRoaXMuZGF0YS50ZXh0O3JldHVybiBBcnJheS5pc0FycmF5KGYpJiZ2b2lkIDAhPT1mW2hdP3QudGV4dExhYmVsPWZbaF06ZiYmKHQudGV4dExhYmVsPWYpLCEwfX0sdS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zY2VuZSxyPWUuZnVsbFNjZW5lTGF5b3V0O2Z1bmN0aW9uIG4odCxlLHIsbil7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0LmQybChlLDAsbikqcn0pfXRoaXMuZGF0YT1sKHQpO3ZhciBzPXtwb3NpdGlvbnM6byhuKHIueGF4aXMsdC5feCxlLmRhdGFTY2FsZVswXSx0LnhjYWxlbmRhciksbihyLnlheGlzLHQuX3ksZS5kYXRhU2NhbGVbMV0sdC55Y2FsZW5kYXIpLG4oci56YXhpcyx0Ll96LGUuZGF0YVNjYWxlWzJdLHQuemNhbGVuZGFyKSksY2VsbHM6byh0Ll9pLHQuX2osdC5fayksbGlnaHRQb3NpdGlvbjpbdC5saWdodHBvc2l0aW9uLngsdC5saWdodHBvc2l0aW9uLnksdC5saWdodHBvc2l0aW9uLnpdLGFtYmllbnQ6dC5saWdodGluZy5hbWJpZW50LGRpZmZ1c2U6dC5saWdodGluZy5kaWZmdXNlLHNwZWN1bGFyOnQubGlnaHRpbmcuc3BlY3VsYXIscm91Z2huZXNzOnQubGlnaHRpbmcucm91Z2huZXNzLGZyZXNuZWw6dC5saWdodGluZy5mcmVzbmVsLHZlcnRleE5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24sZmFjZU5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcuZmFjZW5vcm1hbHNlcHNpbG9uLG9wYWNpdHk6dC5vcGFjaXR5LG9wYWNpdHlzY2FsZTp0Lm9wYWNpdHlzY2FsZSxjb250b3VyRW5hYmxlOnQuY29udG91ci5zaG93LGNvbnRvdXJDb2xvcjphKHQuY29udG91ci5jb2xvcikuc2xpY2UoMCwzKSxjb250b3VyV2lkdGg6dC5jb250b3VyLndpZHRoLHVzZUZhY2V0Tm9ybWFsczp0LmZsYXRzaGFkaW5nfTtzLnZlcnRleEludGVuc2l0eT10Ll9pbnRlbnNpdHkscy52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHM9W3QuY21pbix0LmNtYXhdLHMuY29sb3JtYXA9aSh0KSx0aGlzLm1lc2gudXBkYXRlKHMpfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5tZXNoKSx0aGlzLm1lc2guZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxpPW4oe2dsOnJ9KSxhPW5ldyBjKHQsaSxlLnVpZCk7cmV0dXJuIGkuX3RyYWNlPWEsYS51cGRhdGUoZSksdC5nbHBsb3QuYWRkKGkpLGF9fSx7XCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yXCI6Njk4LFwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheVwiOjcyNCxcIi4uLy4uL3Bsb3RzL2dsM2QvemlwM1wiOjgwMCxcIi4uL2lzb3N1cmZhY2UvY29udmVydFwiOjk5MSxcImdsLW1lc2gzZFwiOjI3N31dLDExNzY6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vLi4vbGliXCIpLGk9dChcIi4vYXR0cmlidXRlc1wiKSxhPXQoXCIuLi9pc29zdXJmYWNlL2RlZmF1bHRzXCIpLnN1cHBseUlzb0RlZmF1bHRzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9YSh0LGUscixvLHMpO3ZhciBsPXMoXCJvcGFjaXR5c2NhbGVcIik7XCJtYXhcIj09PWw/ZS5vcGFjaXR5c2NhbGU9W1swLC4xXSxbMSwxXV06XCJtaW5cIj09PWw/ZS5vcGFjaXR5c2NhbGU9W1swLDFdLFsxLC4xXV06XCJleHRyZW1lc1wiPT09bD9lLm9wYWNpdHlzY2FsZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjwzMjtuKyspe3ZhciBpPW4vMzEsYT1lKygxLWUpKigxLU1hdGgucG93KE1hdGguc2luKHQqaSpNYXRoLlBJKSwyKSk7ci5wdXNoKFtpLE1hdGgubWF4KDEsTWF0aC5taW4oMCxhKSldKX1yZXR1cm4gcn0oMSwuMSk6ZnVuY3Rpb24odCl7dmFyIGU9MDtpZighQXJyYXkuaXNBcnJheSh0KXx8dC5sZW5ndGg8MilyZXR1cm4hMTtpZighdFswXXx8IXRbdC5sZW5ndGgtMV0pcmV0dXJuITE7aWYoMCE9K3RbMF1bMF18fDEhPSt0W3QubGVuZ3RoLTFdWzBdKXJldHVybiExO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO2lmKDIhPT1uLmxlbmd0aHx8K25bMF08ZSlyZXR1cm4hMTtlPStuWzBdfXJldHVybiEwfShsKXx8KGUub3BhY2l0eXNjYWxlPXZvaWQgMCl9fSx7XCIuLi8uLi9saWJcIjo3MDEsXCIuLi9pc29zdXJmYWNlL2RlZmF1bHRzXCI6OTkyLFwiLi9hdHRyaWJ1dGVzXCI6MTE3NH1dLDExNzc6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dChcIi4vYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLG4uY2FsYz10KFwiLi4vaXNvc3VyZmFjZS9jYWxjXCIpLG4uY29sb3JiYXI9e21pbjpcImNtaW5cIixtYXg6XCJjbWF4XCJ9LG4ucGxvdD10KFwiLi9jb252ZXJ0XCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwidm9sdW1lXCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvZ2wzZFwiKSxuLmNhdGVnb3JpZXM9W1wiZ2wzZFwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4uLy4uL3Bsb3RzL2dsM2RcIjo3ODksXCIuLi9pc29zdXJmYWNlL2NhbGNcIjo5OTAsXCIuL2F0dHJpYnV0ZXNcIjoxMTc0LFwiLi9jb252ZXJ0XCI6MTE3NSxcIi4vZGVmYXVsdHNcIjoxMTc2fV0sMTE3ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9iYXIvYXR0cmlidXRlc1wiKSxpPXQoXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIikubGluZSxhPXQoXCIuLi8uLi9saWIvZXh0ZW5kXCIpLmV4dGVuZEZsYXQ7ZnVuY3Rpb24gbyh0KXtyZXR1cm57bWFya2VyOntjb2xvcjphKHt9LG4ubWFya2VyLmNvbG9yLHthcnJheU9rOiExLGVkaXRUeXBlOlwic3R5bGVcIn0pLGxpbmU6e2NvbG9yOmEoe30sbi5tYXJrZXIubGluZS5jb2xvcix7YXJyYXlPazohMSxlZGl0VHlwZTpcInN0eWxlXCJ9KSx3aWR0aDphKHt9LG4ubWFya2VyLmxpbmUud2lkdGgse2FycmF5T2s6ITEsZWRpdFR5cGU6XCJzdHlsZVwifSksZWRpdFR5cGU6XCJzdHlsZVwifSxlZGl0VHlwZTpcInN0eWxlXCJ9LGVkaXRUeXBlOlwic3R5bGVcIn19ZS5leHBvcnRzPXttZWFzdXJlOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGRmbHQ6W10sZWRpdFR5cGU6XCJjYWxjXCJ9LGJhc2U6e3ZhbFR5cGU6XCJudW1iZXJcIixkZmx0Om51bGwsYXJyYXlPazohMSxlZGl0VHlwZTpcImNhbGNcIn0seDpuLngseDA6bi54MCxkeDpuLmR4LHk6bi55LHkwOm4ueTAsZHk6bi5keSxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTpuLmhvdmVydGVtcGxhdGUsdGV4dDpuLnRleHQsdGV4dHBvc2l0aW9uOm4udGV4dHBvc2l0aW9uLHRleHRmb250Om4udGV4dGZvbnQsaW5zaWRldGV4dGZvbnQ6bi5pbnNpZGV0ZXh0Zm9udCxvdXRzaWRldGV4dGZvbnQ6bi5vdXRzaWRldGV4dGZvbnQsY29uc3RyYWludGV4dDpuLmNvbnN0cmFpbnRleHQsY2xpcG9uYXhpczpuLmNsaXBvbmF4aXMsb3JpZW50YXRpb246bi5vcmllbnRhdGlvbixvZmZzZXQ6bi5vZmZzZXQsd2lkdGg6bi53aWR0aCxpbmNyZWFzaW5nOm8oKSxkZWNyZWFzaW5nOm8oKSx0b3RhbHM6bygpLGNvbm5lY3Rvcjp7bGluZTp7Y29sb3I6aS5jb2xvcix3aWR0aDppLndpZHRoLGRhc2g6aS5kYXNoLGVkaXRUeXBlOlwicGxvdFwifSxtb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJzcGFubmluZ1wiLFwiYmV0d2VlblwiXSxkZmx0OlwiYmV0d2VlblwiLGVkaXRUeXBlOlwicGxvdFwifSx2aXNpYmxlOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJwbG90XCJ9LGVkaXRUeXBlOlwicGxvdFwifSxvZmZzZXRncm91cDpuLm9mZnNldGdyb3VwLGFsaWdubWVudGdyb3VwOm4ub2Zmc2V0Z3JvdXB9fSx7XCIuLi8uLi9saWIvZXh0ZW5kXCI6NjkxLFwiLi4vYmFyL2F0dHJpYnV0ZXNcIjo4MzksXCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXNcIjoxMDUyfV0sMTE3OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiKSxpPXQoXCIuLi8uLi9saWJcIikubWVyZ2VBcnJheSxhPXQoXCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uXCIpLG89dChcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNO2Z1bmN0aW9uIHModCl7cmV0dXJuXCJhXCI9PT10fHxcImFic29sdXRlXCI9PT10fWZ1bmN0aW9uIGwodCl7cmV0dXJuXCJ0XCI9PT10fHxcInRvdGFsXCI9PT10fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGMsdT1uLmdldEZyb21JZCh0LGUueGF4aXN8fFwieFwiKSxoPW4uZ2V0RnJvbUlkKHQsZS55YXhpc3x8XCJ5XCIpO1wiaFwiPT09ZS5vcmllbnRhdGlvbj8ocj11Lm1ha2VDYWxjZGF0YShlLFwieFwiKSxjPWgubWFrZUNhbGNkYXRhKGUsXCJ5XCIpKToocj1oLm1ha2VDYWxjZGF0YShlLFwieVwiKSxjPXUubWFrZUNhbGNkYXRhKGUsXCJ4XCIpKTtmb3IodmFyIGYscD1NYXRoLm1pbihjLmxlbmd0aCxyLmxlbmd0aCksZD1uZXcgQXJyYXkocCksZz0wLHY9ITEsbT0wO208cDttKyspe3ZhciB5PXJbbV18fDAseD0hMTsoclttXSE9PW98fGwoZS5tZWFzdXJlW21dKXx8cyhlLm1lYXN1cmVbbV0pKSYmbSsxPHAmJihyW20rMV0hPT1vfHxsKGUubWVhc3VyZVttKzFdKXx8cyhlLm1lYXN1cmVbbSsxXSkpJiYoeD0hMCk7dmFyIGI9ZFttXT17aTptLHA6Y1ttXSxzOnkscmF3Uzp5LGNOZXh0Onh9O3MoZS5tZWFzdXJlW21dKT8oZz1iLnMsYi5pc1N1bT0hMCxiLmRpcj1cInRvdGFsc1wiLGIucz1nKTpsKGUubWVhc3VyZVttXSk/KGIuaXNTdW09ITAsYi5kaXI9XCJ0b3RhbHNcIixiLnM9Zyk6KGIuaXNTdW09ITEsYi5kaXI9Yi5yYXdTPDA/XCJkZWNyZWFzaW5nXCI6XCJpbmNyZWFzaW5nXCIsZj1iLnMsYi5zPWcrZixnKz1mKSxcInRvdGFsc1wiPT09Yi5kaXImJih2PSEwKSxlLmlkcyYmKGIuaWQ9U3RyaW5nKGUuaWRzW21dKSl9cmV0dXJuIGQubGVuZ3RoJiYoZFswXS5oYXNUb3RhbHM9diksaShlLnRleHQsZCxcInR4XCIpLGkoZS5ob3ZlcnRleHQsZCxcImh0eFwiKSxhKGQsZSksZH19LHtcIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWxcIjo2NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlc1wiOjc0OSxcIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb25cIjoxMDU0fV0sMTE4MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsY1wiKS5zZXRHcm91cFBvc2l0aW9ucztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGE9dC5fZnVsbExheW91dCxvPXQuX2Z1bGxEYXRhLHM9dC5jYWxjZGF0YSxsPWUueGF4aXMsYz1lLnlheGlzLHU9W10saD1bXSxmPVtdO2ZvcihpPTA7aTxvLmxlbmd0aDtpKyspe3ZhciBwPW9baV07ITA9PT1wLnZpc2libGUmJnAueGF4aXM9PT1sLl9pZCYmcC55YXhpcz09PWMuX2lkJiZcIndhdGVyZmFsbFwiPT09cC50eXBlJiYocj1zW2ldLFwiaFwiPT09cC5vcmllbnRhdGlvbj9mLnB1c2gocik6aC5wdXNoKHIpLHUucHVzaChyKSl9dmFyIGQ9e19mdWxsTGF5b3V0OntfYXhpc01hdGNoR3JvdXBzOmEuX2F4aXNNYXRjaEdyb3VwcyxfYWxpZ25tZW50T3B0czphLl9hbGlnbm1lbnRPcHRzLGJhcm1vZGU6YS53YXRlcmZhbGxtb2RlLGJhcmdhcDphLndhdGVyZmFsbGdhcCxiYXJncm91cGdhcDphLndhdGVyZmFsbGdyb3VwZ2FwfX07Zm9yKG4oZCxsLGMsaCksbihkLGMsbCxmKSxpPTA7aTx1Lmxlbmd0aDtpKyspe3I9dVtpXTtmb3IodmFyIGc9MDtnPHIubGVuZ3RoO2crKyl7dmFyIHY9cltnXTshMT09PXYuaXNTdW0mJih2LnMwKz0wPT09Zz8wOnJbZy0xXS5zKX19fX0se1wiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGNcIjo4NDJ9XSwxMTgxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuLi9iYXIvZGVmYXVsdHNcIikuaGFuZGxlR3JvdXBpbmdEZWZhdWx0cyxhPXQoXCIuLi9iYXIvZGVmYXVsdHNcIikuaGFuZGxlVGV4dCxvPXQoXCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzXCIpLHM9dChcIi4vYXR0cmlidXRlc1wiKSxsPXQoXCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCIpLGM9XCIjM0Q5OTcwXCIsdT1cIiNGRjQxMzZcIixoPVwiIzQ0OTlGRlwiO2Z1bmN0aW9uIGYodCxlLHIpe3QoZStcIi5tYXJrZXIuY29sb3JcIixyKSx0KGUrXCIubWFya2VyLmxpbmUuY29sb3JcIixsLmRlZmF1bHRMaW5lKSx0KGUrXCIubWFya2VyLmxpbmUud2lkdGhcIil9ZS5leHBvcnRzPXtzdXBwbHlEZWZhdWx0czpmdW5jdGlvbih0LGUscixpKXtmdW5jdGlvbiBsKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9byh0LGUsaSxsKT8obChcIm1lYXN1cmVcIiksbChcIm9yaWVudGF0aW9uXCIsZS54JiYhZS55P1wiaFwiOlwidlwiKSxsKFwiYmFzZVwiKSxsKFwib2Zmc2V0XCIpLGwoXCJ3aWR0aFwiKSxsKFwidGV4dFwiKSxsKFwiaG92ZXJ0ZXh0XCIpLGwoXCJob3ZlcnRlbXBsYXRlXCIpLGEodCxlLGksbCwhMSksZihsLFwiaW5jcmVhc2luZ1wiLGMpLGYobCxcImRlY3JlYXNpbmdcIix1KSxmKGwsXCJ0b3RhbHNcIixoKSxsKFwiY29ubmVjdG9yLnZpc2libGVcIikmJihsKFwiY29ubmVjdG9yLm1vZGVcIiksbChcImNvbm5lY3Rvci5saW5lLndpZHRoXCIpJiYobChcImNvbm5lY3Rvci5saW5lLmNvbG9yXCIpLGwoXCJjb25uZWN0b3IubGluZS5kYXNoXCIpKSkpOmUudmlzaWJsZT0hMX0sY3Jvc3NUcmFjZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHIsYTtmdW5jdGlvbiBvKHQpe3JldHVybiBuLmNvZXJjZShhLl9pbnB1dCxhLHMsdCl9aWYoXCJncm91cFwiPT09ZS53YXRlcmZhbGxtb2RlKWZvcih2YXIgbD0wO2w8dC5sZW5ndGg7bCsrKXI9KGE9dFtsXSkuX2lucHV0LGkocixhLGUsbyl9LGhhbmRsZUdyb3VwaW5nRGVmYXVsdHM6aX19LHtcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIjo1NzgsXCIuLi8uLi9saWJcIjo3MDEsXCIuLi9iYXIvZGVmYXVsdHNcIjo4NDMsXCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzXCI6MTA3OCxcIi4vYXR0cmlidXRlc1wiOjExNzh9XSwxMTgyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLmhvdmVyTGFiZWxUZXh0LGk9dChcIi4uLy4uL2NvbXBvbmVudHMvY29sb3JcIikub3BhY2l0eSxhPXQoXCIuLi9iYXIvaG92ZXJcIikuaG92ZXJPbkJhcnMsbz1cIlxcdTI1YjJcIixzPVwiXFx1MjViY1wiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXt2YXIgYz1hKHQsZSxyLGwpO2lmKGMpe3ZhciB1PWMuY2QsaD11WzBdLnRyYWNlLGY9XCJoXCI9PT1oLm9yaWVudGF0aW9uLHA9Zj90LnhhOnQueWEsZD11W2MuaW5kZXhdLGc9Zj9cInhcIjpcInlcIix2PWQuaXNTdW0/ZC5iK2QuczpkLnJhd1M7aWYoZC5pc1N1bSljW2crXCJMYWJlbFZhbFwiXT1tKHYpO2Vsc2V7aWYodj4wKWMuZXh0cmFUZXh0PW0odikrXCIgXCIrbztlbHNle2lmKCEodjwwKSlyZXR1cm47Yy5leHRyYVRleHQ9XCIoXCIrbSgtdikrXCIpIFwiK3N9Yy5leHRyYVRleHQrPVwiPGJyPkluaXRpYWw6IFwiK20oZC5iK2Qucy12KX1yZXR1cm4gYy5jb2xvcj1mdW5jdGlvbih0LGUpe3ZhciByPXRbZS5kaXJdLm1hcmtlcixuPXIuY29sb3IsYT1yLmxpbmUuY29sb3Isbz1yLmxpbmUud2lkdGg7aWYoaShuKSlyZXR1cm4gbjtpZihpKGEpJiZvKXJldHVybiBhfShoLGQpLFtjXX1mdW5jdGlvbiBtKHQpe3JldHVybiBuKHAsdCl9fX0se1wiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiOjU3OCxcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vYmFyL2hvdmVyXCI6ODQ1fV0sMTE4MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KFwiLi9hdHRyaWJ1dGVzXCIpLG4ubGF5b3V0QXR0cmlidXRlcz10KFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiKSxuLnN1cHBseURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLnN1cHBseURlZmF1bHRzLG4uY3Jvc3NUcmFjZURlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLmNyb3NzVHJhY2VEZWZhdWx0cyxuLnN1cHBseUxheW91dERlZmF1bHRzPXQoXCIuL2xheW91dF9kZWZhdWx0c1wiKSxuLmNhbGM9dChcIi4vY2FsY1wiKSxuLmNyb3NzVHJhY2VDYWxjPXQoXCIuL2Nyb3NzX3RyYWNlX2NhbGNcIiksbi5wbG90PXQoXCIuL3Bsb3RcIiksbi5zdHlsZT10KFwiLi9zdHlsZVwiKS5zdHlsZSxuLmhvdmVyUG9pbnRzPXQoXCIuL2hvdmVyXCIpLG4uc2VsZWN0UG9pbnRzPXQoXCIuLi9iYXIvc2VsZWN0XCIpLG4ubW9kdWxlVHlwZT1cInRyYWNlXCIsbi5uYW1lPVwid2F0ZXJmYWxsXCIsbi5iYXNlUGxvdE1vZHVsZT10KFwiLi4vLi4vcGxvdHMvY2FydGVzaWFuXCIpLG4uY2F0ZWdvcmllcz1bXCJjYXJ0ZXNpYW5cIixcInN2Z1wiLFwib3JpZW50ZWRcIixcInNob3dMZWdlbmRcIixcInpvb21TY2FsZVwiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHtcIi4uLy4uL3Bsb3RzL2NhcnRlc2lhblwiOjc2MCxcIi4uL2Jhci9zZWxlY3RcIjo4NTAsXCIuL2F0dHJpYnV0ZXNcIjoxMTc4LFwiLi9jYWxjXCI6MTE3OSxcIi4vY3Jvc3NfdHJhY2VfY2FsY1wiOjExODAsXCIuL2RlZmF1bHRzXCI6MTE4MSxcIi4vaG92ZXJcIjoxMTgyLFwiLi9sYXlvdXRfYXR0cmlidXRlc1wiOjExODQsXCIuL2xheW91dF9kZWZhdWx0c1wiOjExODUsXCIuL3Bsb3RcIjoxMTg2LFwiLi9zdHlsZVwiOjExODd9XSwxMTg0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXt3YXRlcmZhbGxtb2RlOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXCJncm91cFwiLFwib3ZlcmxheVwiXSxkZmx0OlwiZ3JvdXBcIixlZGl0VHlwZTpcImNhbGNcIn0sd2F0ZXJmYWxsZ2FwOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZWRpdFR5cGU6XCJjYWxjXCJ9LHdhdGVyZmFsbGdyb3VwZ2FwOnt2YWxUeXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOlwiY2FsY1wifX19LHt9XSwxMTg1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dChcIi4uLy4uL2xpYlwiKSxpPXQoXCIuL2xheW91dF9hdHRyaWJ1dGVzXCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9ITE7ZnVuY3Rpb24gbyhyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfWZvcih2YXIgcz0wO3M8ci5sZW5ndGg7cysrKXt2YXIgbD1yW3NdO2lmKGwudmlzaWJsZSYmXCJ3YXRlcmZhbGxcIj09PWwudHlwZSl7YT0hMDticmVha319YSYmKG8oXCJ3YXRlcmZhbGxtb2RlXCIpLG8oXCJ3YXRlcmZhbGxnYXBcIiwuMiksbyhcIndhdGVyZmFsbGdyb3VwZ2FwXCIpKX19LHtcIi4uLy4uL2xpYlwiOjcwMSxcIi4vbGF5b3V0X2F0dHJpYnV0ZXNcIjoxMTg0fV0sMTE4NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9saWJcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCIpLG89dChcIi4uL2Jhci9wbG90XCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtvKHQsZSxyLHMpLGZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzPWUueGF4aXMsbD1lLnlheGlzO2kubWFrZVRyYWNlR3JvdXBzKG8scixcInRyYWNlIGJhcnNcIikuZWFjaChmdW5jdGlvbihyKXt2YXIgbz1uLnNlbGVjdCh0aGlzKSxjPXJbMF0sdT1jLnRyYWNlLGg9aS5lbnN1cmVTaW5nbGUobyxcImdcIixcImxpbmVzXCIpO2lmKHUuY29ubmVjdG9yJiZ1LmNvbm5lY3Rvci52aXNpYmxlKXt2YXIgZj1cImhcIj09PXUub3JpZW50YXRpb24scD11LmNvbm5lY3Rvci5tb2RlO2UuaXNSYW5nZVBsb3R8fChjLm5vZGUzPW8pO3ZhciBkPWguc2VsZWN0QWxsKFwiZy5saW5lXCIpLmRhdGEoaS5pZGVudGl0eSk7ZC5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcImxpbmVcIiwhMCksZC5leGl0KCkucmVtb3ZlKCk7dmFyIGc9ZC5zaXplKCk7ZC5lYWNoKGZ1bmN0aW9uKHIsbyl7aWYobz09PWctMXx8ci5jTmV4dCl7dmFyIGMsaCxkLHYsbSx5LHgsYixfPW4uc2VsZWN0KHRoaXMpLHc9XCJcIixrPTA7bysxPGcmJkFycmF5LmlzQXJyYXkodS5vZmZzZXQpJiYoay09dS5vZmZzZXRbbysxXS11Lm9mZnNldFtvXSksZj8oYz1zLmMycChyLnMxLCEwKSxoPWwuYzJwKHIucDEsITApLGQ9cy5jMnAoci5zMCwhMCksdj1sLmMycChyLnAwLCEwKSxtPXMuYzJwKHIuczEsITApLHk9bC5jMnAoci5wMSwhMCksbysxPGcmJih4PXMuYzJwKHIuczArMS1rLCEwKSxiPWwuYzJwKHIucDArMS1rLCEwKSkpOihjPXMuYzJwKHIucDEsITApLGg9bC5jMnAoci5zMSwhMCksZD1zLmMycChyLnAwLCEwKSx2PWwuYzJwKHIuczAsITApLG09cy5jMnAoci5wMSwhMCkseT1sLmMycChyLnMxLCEwKSxvKzE8ZyYmKHg9cy5jMnAoci5wMCsxLWssITApLGI9bC5jMnAoci5zMCsxLWssITApKSksXCJzcGFubmluZ1wiPT09cCYmIXIuaXNTdW0mJm8+MCYmKHcrPWY/XCJNXCIrZCtcIixcIitoK1wiVlwiK3Y6XCJNXCIrYytcIixcIit2K1wiSFwiK2QpLFwiYmV0d2VlblwiIT09cCYmKHIuaXNTdW18fG88Zy0xKSYmKHcrPWY/XCJNXCIrbStcIixcIit2K1wiVlwiK3k6XCJNXCIrZCtcIixcIit5K1wiSFwiK20pLHZvaWQgMCE9PXgmJnZvaWQgMCE9PWImJih3Kz1mP1wiTVwiK20rXCIsXCIreStcIlZcIitiOlwiTVwiK20rXCIsXCIreStcIkhcIit4KSxpLmVuc3VyZVNpbmdsZShfLFwicGF0aFwiKS5hdHRyKFwiZFwiLHcpLmNhbGwoYS5zZXRDbGlwVXJsLGUubGF5ZXJDbGlwSWQsdCl9fSl9ZWxzZSBoLnJlbW92ZSgpfSl9KHQsZSxyLHMpfX0se1wiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vLi4vbGliXCI6NzAxLFwiLi4vYmFyL3Bsb3RcIjo4NDksZDM6MTU1fV0sMTE4NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJkM1wiKSxpPXQoXCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmdcIiksYT10KFwiLi4vLi4vY29tcG9uZW50cy9jb2xvclwiKSxvPXQoXCIuLi9iYXIvc3R5bGVcIikuc3R5bGVUZXh0UG9pbnRzO2UuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCxlKXt2YXIgcj1lP2VbMF0ubm9kZTM6bi5zZWxlY3QodCkuc2VsZWN0QWxsKFwiZy53YXRlcmZhbGxsYXllclwiKS5zZWxlY3RBbGwoXCJnLnRyYWNlXCIpO3Iuc3R5bGUoXCJvcGFjaXR5XCIsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pLHIuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxzPWVbMF0udHJhY2U7ci5zZWxlY3RBbGwoXCIucG9pbnQgPiBwYXRoXCIpLmVhY2goZnVuY3Rpb24odCl7aWYoIXQuaXNCbGFuayl7dmFyIGU9c1t0LmRpcl0ubWFya2VyO24uc2VsZWN0KHRoaXMpLmNhbGwoYS5maWxsLGUuY29sb3IpLmNhbGwoYS5zdHJva2UsZS5saW5lLmNvbG9yKS5jYWxsKGkuZGFzaExpbmUsZS5saW5lLmRhc2gsZS5saW5lLndpZHRoKS5zdHlsZShcIm9wYWNpdHlcIixzLnNlbGVjdGVkcG9pbnRzJiYhdC5zZWxlY3RlZD8uMzoxKX19KSxvKHIscyx0KSxyLnNlbGVjdEFsbChcIi5saW5lc1wiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT1zLmNvbm5lY3Rvci5saW5lO2kubGluZUdyb3VwU3R5bGUodC5zZWxlY3RBbGwoXCJwYXRoXCIpLGUud2lkdGgsZS5jb2xvcixlLmRhc2gpfSl9KX19fSx7XCIuLi8uLi9jb21wb25lbnRzL2NvbG9yXCI6NTc4LFwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nXCI6NTk5LFwiLi4vYmFyL3N0eWxlXCI6ODUyLGQzOjE1NX1dLDExODg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksaT10KFwiLi4vbGliXCIpLGE9dChcIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hXCIpLG89dChcIi4vaGVscGVyc1wiKS5wb2ludHNBY2Nlc3NvckZ1bmN0aW9uLHM9dChcIi4uL2NvbnN0YW50cy9udW1lcmljYWxcIikuQkFETlVNO3IubW9kdWxlVHlwZT1cInRyYW5zZm9ybVwiLHIubmFtZT1cImFnZ3JlZ2F0ZVwiO3ZhciBsPXIuYXR0cmlidXRlcz17ZW5hYmxlZDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSxncm91cHM6e3ZhbFR5cGU6XCJzdHJpbmdcIixzdHJpY3Q6ITAsbm9CbGFuazohMCxhcnJheU9rOiEwLGRmbHQ6XCJ4XCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGFnZ3JlZ2F0aW9uczp7X2lzTGlua2VkVG9BcnJheTpcImFnZ3JlZ2F0aW9uXCIsdGFyZ2V0Ont2YWxUeXBlOlwic3RyaW5nXCIsZWRpdFR5cGU6XCJjYWxjXCJ9LGZ1bmM6e3ZhbFR5cGU6XCJlbnVtZXJhdGVkXCIsdmFsdWVzOltcImNvdW50XCIsXCJzdW1cIixcImF2Z1wiLFwibWVkaWFuXCIsXCJtb2RlXCIsXCJybXNcIixcInN0ZGRldlwiLFwibWluXCIsXCJtYXhcIixcImZpcnN0XCIsXCJsYXN0XCIsXCJjaGFuZ2VcIixcInJhbmdlXCJdLGRmbHQ6XCJmaXJzdFwiLGVkaXRUeXBlOlwiY2FsY1wifSxmdW5jbW9kZTp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wic2FtcGxlXCIsXCJwb3B1bGF0aW9uXCJdLGRmbHQ6XCJzYW1wbGVcIixlZGl0VHlwZTpcImNhbGNcIn0sZW5hYmxlZDp7dmFsVHlwZTpcImJvb2xlYW5cIixkZmx0OiEwLGVkaXRUeXBlOlwiY2FsY1wifSxlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LGM9bC5hZ2dyZWdhdGlvbnM7ZnVuY3Rpb24gdSh0LGUscixhKXtpZihhLmVuYWJsZWQpe2Zvcih2YXIgbz1hLnRhcmdldCxsPWkubmVzdGVkUHJvcGVydHkoZSxvKSxjPWwuZ2V0KCksdT1mdW5jdGlvbih0LGUpe3ZhciByPXQuZnVuYyxuPWUuZDJjLGk9ZS5jMmQ7c3dpdGNoKHIpe2Nhc2VcImNvdW50XCI6cmV0dXJuIGg7Y2FzZVwiZmlyc3RcIjpyZXR1cm4gZjtjYXNlXCJsYXN0XCI6cmV0dXJuIHA7Y2FzZVwic3VtXCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1uKHRbZVthXV0pO28hPT1zJiYocis9byl9cmV0dXJuIGkocil9O2Nhc2VcImF2Z1wiOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLGE9MCxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBsPW4odFtlW29dXSk7bCE9PXMmJihyKz1sLGErKyl9cmV0dXJuIGE/aShyL2EpOnN9O2Nhc2VcIm1pblwiOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xLzAsYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1uKHRbZVthXV0pO28hPT1zJiYocj1NYXRoLm1pbihyLG8pKX1yZXR1cm4gcj09PTEvMD9zOmkocil9O2Nhc2VcIm1heFwiOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0tMS8wLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIG89bih0W2VbYV1dKTtvIT09cyYmKHI9TWF0aC5tYXgocixvKSl9cmV0dXJuIHI9PT0tMS8wP3M6aShyKX07Y2FzZVwicmFuZ2VcIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MS8wLGE9LTEvMCxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBsPW4odFtlW29dXSk7bCE9PXMmJihyPU1hdGgubWluKHIsbCksYT1NYXRoLm1heChhLGwpKX1yZXR1cm4gYT09PS0xLzB8fHI9PT0xLzA/czppKGEtcil9O2Nhc2VcImNoYW5nZVwiOnJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPW4odFtlWzBdXSksYT1uKHRbZVtlLmxlbmd0aC0xXV0pO3JldHVybiByPT09c3x8YT09PXM/czppKGEtcil9O2Nhc2VcIm1lZGlhblwiOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBvPW4odFtlW2FdXSk7byE9PXMmJnIucHVzaChvKX1pZighci5sZW5ndGgpcmV0dXJuIHM7ci5zb3J0KCk7dmFyIGw9KHIubGVuZ3RoLTEpLzI7cmV0dXJuIGkoKHJbTWF0aC5mbG9vcihsKV0rcltNYXRoLmNlaWwobCldKS8yKX07Y2FzZVwibW9kZVwiOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxhPTAsbz1zLGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIGM9bih0W2VbbF1dKTtpZihjIT09cyl7dmFyIHU9cltjXT0ocltjXXx8MCkrMTt1PmEmJihhPXUsbz1jKX19cmV0dXJuIGE/aShvKTpzfTtjYXNlXCJybXNcIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxhPTAsbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgbD1uKHRbZVtvXV0pO2whPT1zJiYocis9bCpsLGErKyl9cmV0dXJuIGE/aShNYXRoLnNxcnQoci9hKSk6c307Y2FzZVwic3RkZGV2XCI6cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIGksYT0wLG89MCxsPTEsYz1zO2ZvcihpPTA7aTxyLmxlbmd0aCYmYz09PXM7aSsrKWM9bihlW3JbaV1dKTtpZihjPT09cylyZXR1cm4gcztmb3IoO2k8ci5sZW5ndGg7aSsrKXt2YXIgdT1uKGVbcltpXV0pO2lmKHUhPT1zKXt2YXIgaD11LWM7YSs9aCxvKz1oKmgsbCsrfX12YXIgZj1cInNhbXBsZVwiPT09dC5mdW5jbW9kZT9sLTE6bDtyZXR1cm4gZj9NYXRoLnNxcnQoKG8tYSphL2wpL2YpOjB9fX0oYSxuLmdldERhdGFDb252ZXJzaW9ucyh0LGUsbyxjKSksZD1uZXcgQXJyYXkoci5sZW5ndGgpLGc9MDtnPHIubGVuZ3RoO2crKylkW2ddPXUoYyxyW2ddKTtsLnNldChkKSxcImNvdW50XCI9PT1hLmZ1bmMmJmkucHVzaFVuaXF1ZShlLl9hcnJheUF0dHJzLG8pfX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIGUubGVuZ3RofWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gdFtlWzBdXX1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIHRbZVtlLmxlbmd0aC0xXV19ci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0LGUpe3ZhciByLG49e307ZnVuY3Rpb24gbyhlLHIpe3JldHVybiBpLmNvZXJjZSh0LG4sbCxlLHIpfWlmKCFvKFwiZW5hYmxlZFwiKSlyZXR1cm4gbjt2YXIgcz1hLmZpbmRBcnJheUF0dHJpYnV0ZXMoZSksdT17fTtmb3Iocj0wO3I8cy5sZW5ndGg7cisrKXVbc1tyXV09MTt2YXIgaD1vKFwiZ3JvdXBzXCIpO2lmKCFBcnJheS5pc0FycmF5KGgpKXtpZighdVtoXSlyZXR1cm4gbi5lbmFibGVkPSExLG47dVtoXT0wfXZhciBmLHA9dC5hZ2dyZWdhdGlvbnN8fFtdLGQ9bi5hZ2dyZWdhdGlvbnM9bmV3IEFycmF5KHAubGVuZ3RoKTtmdW5jdGlvbiBnKHQsZSl7cmV0dXJuIGkuY29lcmNlKHBbcl0sZixjLHQsZSl9Zm9yKHI9MDtyPHAubGVuZ3RoO3IrKyl7Zj17X2luZGV4OnJ9O3ZhciB2PWcoXCJ0YXJnZXRcIiksbT1nKFwiZnVuY1wiKTtnKFwiZW5hYmxlZFwiKSYmdiYmKHVbdl18fFwiY291bnRcIj09PW0mJnZvaWQgMD09PXVbdl0pPyhcInN0ZGRldlwiPT09bSYmZyhcImZ1bmNtb2RlXCIpLHVbdl09MCxkW3JdPWYpOmRbcl09e2VuYWJsZWQ6ITEsX2luZGV4OnJ9fWZvcihyPTA7cjxzLmxlbmd0aDtyKyspdVtzW3JdXSYmZC5wdXNoKHt0YXJnZXQ6c1tyXSxmdW5jOmMuZnVuYy5kZmx0LGVuYWJsZWQ6ITAsX2luZGV4Oi0xfSk7cmV0dXJuIG59LHIuY2FsY1RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7aWYoci5lbmFibGVkKXt2YXIgbj1yLmdyb3VwcyxhPWkuZ2V0VGFyZ2V0QXJyYXkoZSx7dGFyZ2V0Om59KTtpZihhKXt2YXIgcyxsLGMsaCxmPXt9LHA9e30sZD1bXSxnPW8oZS50cmFuc2Zvcm1zLHIpLHY9YS5sZW5ndGg7Zm9yKGUuX2xlbmd0aCYmKHY9TWF0aC5taW4odixlLl9sZW5ndGgpKSxzPTA7czx2O3MrKyl2b2lkIDA9PT0oYz1mW2w9YVtzXV0pPyhmW2xdPWQubGVuZ3RoLGg9W3NdLGQucHVzaChoKSxwW2ZbbF1dPWcocykpOihkW2NdLnB1c2gocykscFtmW2xdXT0ocFtmW2xdXXx8W10pLmNvbmNhdChnKHMpKSk7ci5faW5kZXhUb1BvaW50cz1wO3ZhciBtPXIuYWdncmVnYXRpb25zO2ZvcihzPTA7czxtLmxlbmd0aDtzKyspdSh0LGUsZCxtW3NdKTtcInN0cmluZ1wiPT10eXBlb2YgbiYmdSh0LGUsZCx7dGFyZ2V0Om4sZnVuYzpcImZpcnN0XCIsZW5hYmxlZDohMH0pLGUuX2xlbmd0aD1kLmxlbmd0aH19fX0se1wiLi4vY29uc3RhbnRzL251bWVyaWNhbFwiOjY3OCxcIi4uL2xpYlwiOjcwMSxcIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hXCI6NzM4LFwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuL2hlbHBlcnNcIjoxMTkxfV0sMTE4OTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9saWJcIiksaT10KFwiLi4vcmVnaXN0cnlcIiksYT10KFwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIiksbz10KFwiLi9oZWxwZXJzXCIpLnBvaW50c0FjY2Vzc29yRnVuY3Rpb24scz10KFwiLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHNcIiksbD1zLkNPTVBBUklTT05fT1BTLGM9cy5JTlRFUlZBTF9PUFMsdT1zLlNFVF9PUFM7ci5tb2R1bGVUeXBlPVwidHJhbnNmb3JtXCIsci5uYW1lPVwiZmlsdGVyXCIsci5hdHRyaWJ1dGVzPXtlbmFibGVkOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITAsZWRpdFR5cGU6XCJjYWxjXCJ9LHRhcmdldDp7dmFsVHlwZTpcInN0cmluZ1wiLHN0cmljdDohMCxub0JsYW5rOiEwLGFycmF5T2s6ITAsZGZsdDpcInhcIixlZGl0VHlwZTpcImNhbGNcIn0sb3BlcmF0aW9uOnt2YWxUeXBlOlwiZW51bWVyYXRlZFwiLHZhbHVlczpbXS5jb25jYXQobCkuY29uY2F0KGMpLmNvbmNhdCh1KSxkZmx0OlwiPVwiLGVkaXRUeXBlOlwiY2FsY1wifSx2YWx1ZTp7dmFsVHlwZTpcImFueVwiLGRmbHQ6MCxlZGl0VHlwZTpcImNhbGNcIn0scHJlc2VydmVnYXBzOnt2YWxUeXBlOlwiYm9vbGVhblwiLGRmbHQ6ITEsZWRpdFR5cGU6XCJjYWxjXCJ9LGVkaXRUeXBlOlwiY2FsY1wifSxyLnN1cHBseURlZmF1bHRzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Z1bmN0aW9uIGEoaSxhKXtyZXR1cm4gbi5jb2VyY2UodCxlLHIuYXR0cmlidXRlcyxpLGEpfWlmKGEoXCJlbmFibGVkXCIpKXthKFwicHJlc2VydmVnYXBzXCIpLGEoXCJvcGVyYXRpb25cIiksYShcInZhbHVlXCIpLGEoXCJ0YXJnZXRcIik7dmFyIG89aS5nZXRDb21wb25lbnRNZXRob2QoXCJjYWxlbmRhcnNcIixcImhhbmRsZURlZmF1bHRzXCIpO28odCxlLFwidmFsdWVjYWxlbmRhclwiLG51bGwpLG8odCxlLFwidGFyZ2V0Y2FsZW5kYXJcIixudWxsKX1yZXR1cm4gZX0sci5jYWxjVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXtpZihyLmVuYWJsZWQpe3ZhciBpPW4uZ2V0VGFyZ2V0QXJyYXkoZSxyKTtpZihpKXt2YXIgcz1yLnRhcmdldCxoPWkubGVuZ3RoO2UuX2xlbmd0aCYmKGg9TWF0aC5taW4oaCxlLl9sZW5ndGgpKTt2YXIgZj1yLnRhcmdldGNhbGVuZGFyLHA9ZS5fYXJyYXlBdHRycyxkPXIucHJlc2VydmVnYXBzO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBzKXt2YXIgZz1uLm5lc3RlZFByb3BlcnR5KGUscytcImNhbGVuZGFyXCIpLmdldCgpO2cmJihmPWcpfXZhciB2LG0seT1mdW5jdGlvbih0LGUscil7dmFyIG49dC5vcGVyYXRpb24saT10LnZhbHVlLGE9QXJyYXkuaXNBcnJheShpKTtmdW5jdGlvbiBvKHQpe3JldHVybi0xIT09dC5pbmRleE9mKG4pfXZhciBzLGg9ZnVuY3Rpb24ocil7cmV0dXJuIGUociwwLHQudmFsdWVjYWxlbmRhcil9LGY9ZnVuY3Rpb24odCl7cmV0dXJuIGUodCwwLHIpfTtvKGwpP3M9aChhP2lbMF06aSk6byhjKT9zPWE/W2goaVswXSksaChpWzFdKV06W2goaSksaChpKV06byh1KSYmKHM9YT9pLm1hcChoKTpbaChpKV0pO3N3aXRjaChuKXtjYXNlXCI9XCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpPT09c307Y2FzZVwiIT1cIjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGYodCkhPT1zfTtjYXNlXCI8XCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpPHN9O2Nhc2VcIjw9XCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpPD1zfTtjYXNlXCI+XCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpPnN9O2Nhc2VcIj49XCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpPj1zfTtjYXNlXCJbXVwiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPj1zWzBdJiZlPD1zWzFdfTtjYXNlXCIoKVwiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPnNbMF0mJmU8c1sxXX07Y2FzZVwiWylcIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9Zih0KTtyZXR1cm4gZT49c1swXSYmZTxzWzFdfTtjYXNlXCIoXVwiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPnNbMF0mJmU8PXNbMV19O2Nhc2VcIl1bXCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWYodCk7cmV0dXJuIGU8PXNbMF18fGU+PXNbMV19O2Nhc2VcIikoXCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWYodCk7cmV0dXJuIGU8c1swXXx8ZT5zWzFdfTtjYXNlXCJdKFwiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPD1zWzBdfHxlPnNbMV19O2Nhc2VcIilbXCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWYodCk7cmV0dXJuIGU8c1swXXx8ZT49c1sxXX07Y2FzZVwie31cIjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1zLmluZGV4T2YoZih0KSl9O2Nhc2VcIn17XCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybi0xPT09cy5pbmRleE9mKGYodCkpfX19KHIsYS5nZXREYXRhVG9Db29yZEZ1bmModCxlLHMsaSksZikseD17fSxiPXt9LF89MDtkPyh2PWZ1bmN0aW9uKHQpe3hbdC5hc3RyXT1uLmV4dGVuZERlZXAoW10sdC5nZXQoKSksdC5zZXQobmV3IEFycmF5KGgpKX0sbT1mdW5jdGlvbih0LGUpe3ZhciByPXhbdC5hc3RyXVtlXTt0LmdldCgpW2VdPXJ9KToodj1mdW5jdGlvbih0KXt4W3QuYXN0cl09bi5leHRlbmREZWVwKFtdLHQuZ2V0KCkpLHQuc2V0KFtdKX0sbT1mdW5jdGlvbih0LGUpe3ZhciByPXhbdC5hc3RyXVtlXTt0LmdldCgpLnB1c2gocil9KSxBKHYpO2Zvcih2YXIgdz1vKGUudHJhbnNmb3JtcyxyKSxrPTA7azxoO2srKyl7eShpW2tdKT8oQShtLGspLGJbXysrXT13KGspKTpkJiZfKyt9ci5faW5kZXhUb1BvaW50cz1iLGUuX2xlbmd0aD1ffX1mdW5jdGlvbiBBKHQscil7Zm9yKHZhciBpPTA7aTxwLmxlbmd0aDtpKyspe3Qobi5uZXN0ZWRQcm9wZXJ0eShlLHBbaV0pLHIpfX19fSx7XCIuLi9jb25zdGFudHMvZmlsdGVyX29wc1wiOjY3NCxcIi4uL2xpYlwiOjcwMSxcIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCI6NzQ5LFwiLi4vcmVnaXN0cnlcIjo4MjksXCIuL2hlbHBlcnNcIjoxMTkxfV0sMTE5MDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi9saWJcIiksaT10KFwiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWFcIiksYT10KFwiLi4vcGxvdHMvcGxvdHNcIiksbz10KFwiLi9oZWxwZXJzXCIpLnBvaW50c0FjY2Vzc29yRnVuY3Rpb247ZnVuY3Rpb24gcyh0LGUpe3ZhciByLHMsbCxjLHUsaCxmLHAsZCxnLHY9ZS50cmFuc2Zvcm0sbT1lLnRyYW5zZm9ybUluZGV4LHk9dC50cmFuc2Zvcm1zW21dLmdyb3Vwcyx4PW8odC50cmFuc2Zvcm1zLHYpO2lmKCFBcnJheS5pc0FycmF5KHkpfHwwPT09eS5sZW5ndGgpcmV0dXJuW3RdO3ZhciBiPW4uZmlsdGVyVW5pcXVlKHkpLF89bmV3IEFycmF5KGIubGVuZ3RoKSx3PXkubGVuZ3RoLGs9aS5maW5kQXJyYXlBdHRyaWJ1dGVzKHQpLEE9di5zdHlsZXN8fFtdLFQ9e307Zm9yKHI9MDtyPEEubGVuZ3RoO3IrKylUW0Fbcl0udGFyZ2V0XT1BW3JdLnZhbHVlO3Yuc3R5bGVzJiYoZz1uLmtleWVkQ29udGFpbmVyKHYsXCJzdHlsZXNcIixcInRhcmdldFwiLFwidmFsdWUubmFtZVwiKSk7dmFyIE09e30sUz17fTtmb3Iocj0wO3I8Yi5sZW5ndGg7cisrKXtNW2g9YltyXV09cixTW2hdPTAsKGY9X1tyXT1uLmV4dGVuZERlZXBOb0FycmF5cyh7fSx0KSkuX2dyb3VwPWgsZi50cmFuc2Zvcm1zW21dLl9pbmRleFRvUG9pbnRzPXt9O3ZhciBFPW51bGw7Zm9yKGcmJihFPWcuZ2V0KGgpKSxmLm5hbWU9RXx8XCJcIj09PUU/RTpuLnRlbXBsYXRlU3RyaW5nKHYubmFtZWZvcm1hdCx7dHJhY2U6dC5uYW1lLGdyb3VwOmh9KSxwPWYudHJhbnNmb3JtcyxmLnRyYW5zZm9ybXM9W10scz0wO3M8cC5sZW5ndGg7cysrKWYudHJhbnNmb3Jtc1tzXT1uLmV4dGVuZERlZXBOb0FycmF5cyh7fSxwW3NdKTtmb3Iocz0wO3M8ay5sZW5ndGg7cysrKW4ubmVzdGVkUHJvcGVydHkoZixrW3NdKS5zZXQoW10pfWZvcihsPTA7bDxrLmxlbmd0aDtsKyspe2ZvcihjPWtbbF0scz0wLGQ9W107czxiLmxlbmd0aDtzKyspZFtzXT1uLm5lc3RlZFByb3BlcnR5KF9bc10sYykuZ2V0KCk7Zm9yKHU9bi5uZXN0ZWRQcm9wZXJ0eSh0LGMpLmdldCgpLHM9MDtzPHc7cysrKWRbTVt5W3NdXV0ucHVzaCh1W3NdKX1mb3Iocz0wO3M8dztzKyspeyhmPV9bTVt5W3NdXV0pLnRyYW5zZm9ybXNbbV0uX2luZGV4VG9Qb2ludHNbU1t5W3NdXV09eChzKSxTW3lbc11dKyt9Zm9yKHI9MDtyPGIubGVuZ3RoO3IrKyloPWJbcl0sZj1fW3JdLGEuY2xlYXJFeHBhbmRlZFRyYWNlRGVmYXVsdENvbG9ycyhmKSxmPW4uZXh0ZW5kRGVlcE5vQXJyYXlzKGYsVFtoXXx8e30pO3JldHVybiBffXIubW9kdWxlVHlwZT1cInRyYW5zZm9ybVwiLHIubmFtZT1cImdyb3VwYnlcIixyLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcImNhbGNcIn0sZ3JvdXBzOnt2YWxUeXBlOlwiZGF0YV9hcnJheVwiLGRmbHQ6W10sZWRpdFR5cGU6XCJjYWxjXCJ9LG5hbWVmb3JtYXQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcImNhbGNcIn0sc3R5bGVzOntfaXNMaW5rZWRUb0FycmF5Olwic3R5bGVcIix0YXJnZXQ6e3ZhbFR5cGU6XCJzdHJpbmdcIixlZGl0VHlwZTpcImNhbGNcIn0sdmFsdWU6e3ZhbFR5cGU6XCJhbnlcIixkZmx0Ont9LGVkaXRUeXBlOlwiY2FsY1wiLF9jb21wYXJlQXNKU09OOiEwfSxlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LHIuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCxlLGkpe3ZhciBhLG89e307ZnVuY3Rpb24gcyhlLGkpe3JldHVybiBuLmNvZXJjZSh0LG8sci5hdHRyaWJ1dGVzLGUsaSl9aWYoIXMoXCJlbmFibGVkXCIpKXJldHVybiBvO3MoXCJncm91cHNcIikscyhcIm5hbWVmb3JtYXRcIixpLl9kYXRhTGVuZ3RoPjE/XCIle2dyb3VwfSAoJXt0cmFjZX0pXCI6XCIle2dyb3VwfVwiKTt2YXIgbD10LnN0eWxlcyxjPW8uc3R5bGVzPVtdO2lmKGwpZm9yKGE9MDthPGwubGVuZ3RoO2ErKyl7dmFyIHU9Y1thXT17fTtuLmNvZXJjZShsW2FdLGNbYV0sci5hdHRyaWJ1dGVzLnN0eWxlcyxcInRhcmdldFwiKTt2YXIgaD1uLmNvZXJjZShsW2FdLGNbYV0sci5hdHRyaWJ1dGVzLnN0eWxlcyxcInZhbHVlXCIpO24uaXNQbGFpbk9iamVjdChoKT91LnZhbHVlPW4uZXh0ZW5kRGVlcCh7fSxoKTpoJiZkZWxldGUgdS52YWx1ZX1yZXR1cm4gb30sci50cmFuc2Zvcm09ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT1bXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKWZvcihyPXModFtuXSxlKSxpPTA7aTxyLmxlbmd0aDtpKyspYS5wdXNoKHJbaV0pO3JldHVybiBhfX0se1wiLi4vbGliXCI6NzAxLFwiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWFcIjo3MzgsXCIuLi9wbG90cy9wbG90c1wiOjgxMCxcIi4vaGVscGVyc1wiOjExOTF9XSwxMTkxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ci5wb2ludHNBY2Nlc3NvckZ1bmN0aW9uPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG4saT0wO2k8dC5sZW5ndGgmJihyPXRbaV0pIT09ZTtpKyspci5faW5kZXhUb1BvaW50cyYmITEhPT1yLmVuYWJsZWQmJihuPXIuX2luZGV4VG9Qb2ludHMpO3JldHVybiBuP2Z1bmN0aW9uKHQpe3JldHVybiBuW3RdfTpmdW5jdGlvbih0KXtyZXR1cm5bdF19fX0se31dLDExOTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwiLi4vbGliXCIpLGk9dChcIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzXCIpLGE9dChcIi4vaGVscGVyc1wiKS5wb2ludHNBY2Nlc3NvckZ1bmN0aW9uO3IubW9kdWxlVHlwZT1cInRyYW5zZm9ybVwiLHIubmFtZT1cInNvcnRcIixyLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6XCJib29sZWFuXCIsZGZsdDohMCxlZGl0VHlwZTpcImNhbGNcIn0sdGFyZ2V0Ont2YWxUeXBlOlwic3RyaW5nXCIsc3RyaWN0OiEwLG5vQmxhbms6ITAsYXJyYXlPazohMCxkZmx0OlwieFwiLGVkaXRUeXBlOlwiY2FsY1wifSxvcmRlcjp7dmFsVHlwZTpcImVudW1lcmF0ZWRcIix2YWx1ZXM6W1wiYXNjZW5kaW5nXCIsXCJkZXNjZW5kaW5nXCJdLGRmbHQ6XCJhc2NlbmRpbmdcIixlZGl0VHlwZTpcImNhbGNcIn0sZWRpdFR5cGU6XCJjYWxjXCJ9LHIuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gaShpLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsci5hdHRyaWJ1dGVzLGksYSl9cmV0dXJuIGkoXCJlbmFibGVkXCIpJiYoaShcInRhcmdldFwiKSxpKFwib3JkZXJcIikpLGV9LHIuY2FsY1RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7aWYoci5lbmFibGVkKXt2YXIgbz1uLmdldFRhcmdldEFycmF5KGUscik7aWYobyl7dmFyIHM9ci50YXJnZXQsbD1vLmxlbmd0aDtlLl9sZW5ndGgmJihsPU1hdGgubWluKGwsZS5fbGVuZ3RoKSk7dmFyIGMsdSxoPWUuX2FycmF5QXR0cnMsZj1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKTtmb3IoaT0wO2k8bjtpKyspYVtpXT17djplW2ldLGk6aX07Zm9yKGEuc29ydChmdW5jdGlvbih0LGUpe3N3aXRjaCh0Lm9yZGVyKXtjYXNlXCJhc2NlbmRpbmdcIjpyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gZSh0LnYpLWUoci52KX07Y2FzZVwiZGVzY2VuZGluZ1wiOnJldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBlKHIudiktZSh0LnYpfX19KHQscikpLGk9MDtpPG47aSsrKW9baV09YVtpXS5pO3JldHVybiBvfShyLG8saS5nZXREYXRhVG9Db29yZEZ1bmModCxlLHMsbyksbCkscD1hKGUudHJhbnNmb3JtcyxyKSxkPXt9O2ZvcihjPTA7YzxoLmxlbmd0aDtjKyspe3ZhciBnPW4ubmVzdGVkUHJvcGVydHkoZSxoW2NdKSx2PWcuZ2V0KCksbT1uZXcgQXJyYXkobCk7Zm9yKHU9MDt1PGw7dSsrKW1bdV09dltmW3VdXTtnLnNldChtKX1mb3IodT0wO3U8bDt1KyspZFt1XT1wKGZbdV0pO3IuX2luZGV4VG9Qb2ludHM9ZCxlLl9sZW5ndGg9bH19fX0se1wiLi4vbGliXCI6NzAxLFwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXNcIjo3NDksXCIuL2hlbHBlcnNcIjoxMTkxfV19LHt9LFsyMl0pKDIyKX0pOyIsImxldCBoZWxwID0gcmVxdWlyZSgnLi9wYWdlLWhlbHAnKVxuXG5sZXQgdGVtcGxhdGVzID0ge1xuICAgICAgICBpbnB1dCA6IChtb2RhbElELCBpbnB1dElELCB0aXRsZSwgbGFiZWwsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9JHttb2RhbElEfSBjbGFzcz1cIm1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPiR7dGl0bGV9PC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9JHtpbnB1dElEfT4ke2xhYmVsfTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD0ke2lucHV0SUR9IG5hbWU9JHtpbnB1dElEfSBzaXplPVwiMzBcIiBhdXRvZm9jdXMgdmFsdWU9XCIke3ZhbHVlfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgb2stbW9kZWwtYnRuIGJveC1zaGFkb3dcIj5PSzwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBib3gtc2hhZG93XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5DbG9zZTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PmBcbiAgICAgICAgfSxcbiAgICAgICAgbWVzc2FnZSA6IChtb2RhbElELCB0aXRsZSwgbWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPSR7bW9kYWxJRH0gY2xhc3M9XCJtb2RhbFwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50IGluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPiAke3RpdGxlfSA8L2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+ICR7bWVzc2FnZX0gPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYm94LXNoYWRvd1wiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+Q2xvc2U8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5gXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpcm1hdGlvbiA6IChtb2RhbElELCB0aXRsZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPSR7bW9kYWxJRH0gY2xhc3M9XCJtb2RhbFwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50IGluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPiAke3RpdGxlfSA8L2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB5ZXMtbW9kYWwtYnRuIGJveC1zaGFkb3dcIj5ZZXM8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYm94LXNoYWRvd1wiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+Tm88L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5gXG4gICAgICAgIH0sXG4gICAgICAgIHVwbG9hZCA6IChtb2RhbElELCB0aXRsZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPSR7bW9kYWxJRH0gY2xhc3M9XCJtb2RhbFwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50IGluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPiAke3RpdGxlfSA8L2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZlcnRpY2xlLXNwYWNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5saW5lXCIgZm9yPVwiZGF0YWZpbGVcIj5QbGVhc2Ugc3BlY2lmeSBhIGZpbGUgdG8gaW1wb3J0OiA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cImZpbGVGb3JVcGxvYWRcIiB0eXBlPVwiZmlsZVwiIGlkPVwiZGF0YWZpbGVcIiBuYW1lPVwiZGF0YWZpbGVcIiBzaXplPVwiMzBcIiByZXF1aXJlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZlcnRpY2xlLXNwYWNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5saW5lXCIgZm9yPVwiZmlsZU5hbWVJbnB1dFwiPk5ldyBmaWxlIG5hbWUgKG9wdGlvbmFsKTogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImZpbGVOYW1lSW5wdXRcIiBuYW1lPVwiZmlsZU5hbWVJbnB1dFwiIHNpemU9XCIzMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYm94LXNoYWRvdyB1cGxvYWQtbW9kYWwtYnRuXCIgZGlzYWJsZWQ+VXBsb2FkPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IGJveC1zaGFkb3dcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PmBcbiAgICAgICAgfVxuICAgIH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZGVsZXRlRmlsZUh0bWwgOiAoZmlsZVR5cGUpID0+IHtcbiAgICAgICAgbGV0IG1vZGFsSUQgPSBcImRlbGV0ZUZpbGVNb2RhbFwiXG4gICAgICAgIGxldCB0aXRsZSA9IGBQZXJtYW5lbnRseSBkZWxldGUgdGhpcyAke2ZpbGVUeXBlfT9gXG5cbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlcy5jb25maXJtYXRpb24obW9kYWxJRCwgdGl0bGUpXG4gICAgfSxcbiAgICBvcGVyYXRpb25JbmZvTW9kYWxIdG1sIDogKHBhZ2UpID0+IHtcbiAgICAgICAgbGV0IG1vZGFsSUQgPSBcIm9wZXJhdGlvbkluZm9Nb2RhbFwiXG4gICAgICAgIGxldCB0aXRsZSA9IFwiSGVscFwiXG4gICAgICAgIGxldCBtZXNzYWdlID0gaGVscFtwYWdlXVxuICAgICAgICAgIFxuICAgICAgICByZXR1cm4gdGVtcGxhdGVzLm1lc3NhZ2UobW9kYWxJRCwgdGl0bGUsIG1lc3NhZ2UpXG4gICAgfSxcbiAgICByZW5kZXJDcmVhdGVNb2RhbEh0bWwgOiAoaXNNb2RlbCwgaXNTcGF0aWFsKSA9PiB7XG4gICAgICAgIHZhciB0aXRsZSA9ICdEaXJlY3RvcnknO1xuICAgICAgICBpZihpc01vZGVsKXtcbiAgICAgICAgICAgIHRpdGxlID0gaXNTcGF0aWFsID8gJ1NwYXRpYWwgTW9kZWwnIDogJ05vbi1TcGF0aWFsIE1vZGVsJztcbiAgICAgICAgfVxuICAgICAgICB0aXRsZSA9IFwiTmV3IFwiICsgdGl0bGVcbiAgICAgICAgbGV0IG1vZGFsSUQgPSBcIm5ld01vZGFsTW9kZWxcIlxuICAgICAgICBsZXQgaW5wdXRJRCA9IFwibW9kZWxOYW1lSW5wdXRcIlxuICAgICAgICBsZXQgbGFiZWwgPSBcIk5hbWU6XCJcbiAgICAgICAgbGV0IHZhbHVlID0gXCJcIlxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlcy5pbnB1dChtb2RhbElELCBpbnB1dElELCB0aXRsZSwgbGFiZWwsIHZhbHVlKVxuICAgIH0sXG4gICAgc2JtbFRvTW9kZWxIdG1sIDogKHRpdGxlLCBlcnJvcnMpID0+IHtcbiAgICAgICAgbGV0IG1vZGFsSUQgPSBcInNibWxUb01vZGVsTW9kYWxcIlxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgZXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZihlcnJvcnNbaV0uc3RhcnRzV2l0aChcIlNCTUwgRXJyb3JcIikgfHwgZXJyb3JzW2ldLnN0YXJ0c1dpdGgoXCJFcnJvclwiKSl7XG4gICAgICAgICAgICAgICAgZXJyb3JzW2ldID0gXCI8Yj5FcnJvcjwvYj46IFwiICsgZXJyb3JzW2ldXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBlcnJvcnNbaV0gPSBcIjxiPldhcm5pbmc8L2I+OiBcIiArIGVycm9yc1tpXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBtZXNzYWdlID0gZXJyb3JzLmpvaW4oXCI8YnI+XCIpXG5cbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlcy5tZXNzYWdlKG1vZGFsSUQsIHRpdGxlLCBtZXNzYWdlKVxuICAgIH0sXG4gICAgdXBsb2FkRmlsZUVycm9yc0h0bWwgOiAoZmlsZSwgdHlwZSwgc3RhdHVzTWVzc2FnZSwgZXJyb3JzKSA9PiB7XG4gICAgICAgIGxldCBtb2RhbElEID0gXCJzYm1sVG9Nb2RlbE1vZGFsXCJcbiAgICAgICAgbGV0IHRpdGxlID0gYEVycm9ycyB1cGxvYWRpbmcgJHtmaWxlfSBhcyBhICR7dHlwZX0gZmlsZWBcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZXJyb3JzW2ldID0gXCI8Yj5FcnJvcjwvYj46IFwiICsgZXJyb3JzW2ldXG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1lc3NhZ2UgPSBgPHA+JHtlcnJvcnMuam9pbihcIjxicj5cIil9PC9wPjxwPjxiPlVwbG9hZCBzdGF0dXM8L2I+OiAke3N0YXR1c01lc3NhZ2V9PC9wPmBcblxuICAgICAgICByZXR1cm4gdGVtcGxhdGVzLm1lc3NhZ2UobW9kYWxJRCwgdGl0bGUsIG1lc3NhZ2UpXG4gICAgfSxcbiAgICB1cGxvYWRGaWxlSHRtbCA6ICh0eXBlKSA9PiB7XG4gICAgICAgIGxldCBtb2RhbElEID0gXCJ1cGxvYWRGaWxlTW9kYWxcIlxuICAgICAgICBsZXQgdGl0bGUgPSBgVXBsb2FkIGEgJHt0eXBlfWBcblxuICAgICAgICByZXR1cm4gdGVtcGxhdGVzLnVwbG9hZChtb2RhbElELCB0aXRsZSlcbiAgICB9LFxuICAgIGR1cGxpY2F0ZVdvcmtmbG93SHRtbCA6ICh3a2ZsRmlsZSwgYm9keSkgPT4ge1xuICAgICAgICBsZXQgbW9kYWxJRCA9IFwiZHVwbGljYXRlV29ya2Zsb3dNb2RhbFwiXG4gICAgICAgIGxldCB0aXRsZSA9IGBNb2RlbCBmb3IgJHt3a2ZsRmlsZX1gXG5cbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlcy5tZXNzYWdlKG1vZGFsSUQsIHRpdGxlLCBib2R5KVxuICAgIH0sXG4gICAgbW9kZWxOb3RGb3VuZEh0bWwgOiAodGl0bGUsIGVycm9yTWVzc2FnZSkgPT4ge1xuICAgICAgICBsZXQgbW9kYWxJRCA9IFwibW9kZWxOb3RGb3VuZE1vZGFsXCJcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSBgPHA+JHtlcnJvck1lc3NhZ2V9PC9wPjxwPlBsZWFzZSBjb3JyZWN0IHRoZSBtb2RlbCBwYXRoIGFuZCBwcmVzcyBlbnRlciB0byByZXNldCB0aGUgd29ya2Zsb3cuPC9wPmBcblxuICAgICAgICByZXR1cm4gdGVtcGxhdGVzLm1lc3NhZ2UobW9kYWxJRCwgdGl0bGUsIG1lc3NhZ2UpXG4gICAgfSxcbiAgICBhbm5vdGF0aW9uTW9kYWxIdG1sIDogKHR5cGUsIG5hbWUsIGFubm90YXRpb24pID0+IHtcbiAgICAgICAgbGV0IG1vZGFsSUQgPSBgJHt0eXBlfUFubm90YXRpb25Nb2RhbGBcbiAgICAgICAgbGV0IGlucHV0SUQgPSBgJHt0eXBlfUFubm90YXRpb25JbnB1dGBcbiAgICAgICAgbGV0IHRpdGxlID0gYEFubm90YXRpb24gZm9yICR7bmFtZX1gXG4gICAgICAgIGxldCBsYWJlbCA9IFwiQW5ub3RhdGlvbjpcIlxuXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZXMuaW5wdXQobW9kYWxJRCwgaW5wdXRJRCwgdGl0bGUsIGxhYmVsLCBhbm5vdGF0aW9uKVxuICAgIH0sXG4gICAgbW9kZWxTYXZlRXJyb3JIdG1sIDogKHRpdGxlLCBlcnJvcikgPT4ge1xuICAgICAgICBsZXQgbW9kYWxJRCA9IFwibW9kZWxTYXZlRXJyb3JNb2RhbFwiXG5cbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlcy5tZXNzYWdlKG1vZGFsSUQsIHRpdGxlLCBlcnJvcilcbiAgICB9LFxuICAgIG5ld0RpcmVjdG9yeUVycm9ySHRtbCA6ICh0aXRsZSwgZXJyb3IpID0+IHtcbiAgICAgICAgbGV0IG1vZGFsSUQgPSBcIm5ld0RpcmVjdG9yeUVycm9yTW9kYWxcIlxuXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZXMubWVzc2FnZShtb2RhbElELCB0aXRsZSwgZXJyb3IpXG4gICAgfSxcbiAgICByZW5kZXJEZWZhdWx0TW9kZU1vZGFsSHRtbCA6ICgpID0+IHtcbiAgICAgICAgbGV0IGNvbmNlbnRyYXRpb25EZXNjaXB0aW9uID0gYFNwZWNpZXMgd2lsbCBvbmx5IGJlIHJlcHJlc2VudGVkIHVzaW5nIGNvbnRpbnVvdXMgKGZsb2F0aW5nIHBvaW50KSB2YWx1ZXMuYDtcbiAgICAgICAgbGV0IHBvcHVsYXRpb25EZXNjcmlwdGlvbiA9IGBQb3B1bGF0aW9uIC0gU3BlY2llcyB3aWxsIG9ubHkgYmUgcmVwcmVzZW50ZWQgdXNpbmcgZGlzY3JldGUgKGludGVnZXIgY291bnQpIHZhbHVlcy5gO1xuICAgICAgICBsZXQgaHlicmlkRGVzY3JpcHRpb24gPSBgQWxsb3dzIGEgc3BlY2llcyB0byBiZSByZXByZXNlbnRlZCB1c2luZyBjb250aW51b3VzIGFuZC9vciBkaXNjcmV0ZSB2YWx1ZXMuYDtcblxuICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgPGRpdiBpZD1cImRlZmF1bHRNb2RlTW9kYWxcIiBjbGFzcz1cIm1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50IGluZm9cIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5EZWZhdWx0IFNwZWNpZXMgTW9kZSAocmVxdWlyZWQpPC9oNT5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZSBjbG9zZS1tb2RhbFwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBtb2RlIGlzIHVzZWQgdG8gc2V0IHRoZSBtb2RlIG9mIGFsbCBzcGVjaWVzIGFkZGVkIHRvIHRoZSBtb2RlbC4gIFxuICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1vZGUgb2YgYSBzcGVjaWVzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGhvdyBpdCB3aWxsIGJlIHJlcHJlc2VudGVkIGluIGEgSHlicmlkIHNpbXVsYXRpb24uXG4gICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDxwPlNlbGVjdCBvbmUgb2YgdGhlIGZvbGxvd2luZzogPC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlZmF1bHQtbW9kZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGNvbmNlbnRyYXRpb24tYnRuIGJveC1zaGFkb3dcIj5Db25jZW50cmF0aW9uPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9XCJtYXJnaW4tdG9wOiA1cHg7XCI+JHtjb25jZW50cmF0aW9uRGVzY2lwdGlvbn08L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVmYXVsdC1tb2RlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcG9wdWxhdGlvbi1idG4gYm94LXNoYWRvd1wiPlBvcHVsYXRpb248L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT1cIm1hcmdpbi10b3A6IDVweDtcIj4ke3BvcHVsYXRpb25EZXNjcmlwdGlvbn08L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVmYXVsdC1tb2RlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgaHlicmlkLWJ0biBib3gtc2hhZG93XCI+SHlicmlkIENvbmNlbnRyYXRpb24vUG9wdWxhdGlvbjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPVwibWFyZ2luLXRvcDogNXB4O1wiPiR7aHlicmlkRGVzY3JpcHRpb259PC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+YFxuICAgIH1cbn0iLCIvL21vZGVsc1xudmFyIFN0YXRlID0gcmVxdWlyZSgnYW1wZXJzYW5kLXN0YXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhdGUuZXh0ZW5kKHtcbiAgcHJvcHM6IHtcbiAgICBleHByZXNzaW9uOiAnc3RyaW5nJyxcbiAgICB2YXJpYWJsZTogJ29iamVjdCcsXG4gIH0sXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uIChhdHRycywgb3B0aW9ucykge1xuICAgIFN0YXRlLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH0sXG59KTsiLCIvL21vZGVsc1xudmFyIEV2ZW50QXNzaWdubWVudCA9IHJlcXVpcmUoJy4vZXZlbnQtYXNzaWdubWVudCcpO1xuLy9jb2xsZWN0aW9uc1xudmFyIENvbGxlY3Rpb24gPSByZXF1aXJlKCdhbXBlcnNhbmQtY29sbGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgbW9kZWw6IEV2ZW50QXNzaWdubWVudCxcbiAgYWRkRXZlbnRBc3NpZ25tZW50OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhcmlhYmxlID0gdGhpcy5nZXREZWZhdWx0VmFyaWFibGUoKTtcbiAgICB2YXIgZXZlbnRBc3NpZ25tZW50ID0gdGhpcy5hZGQoe1xuICAgICAgdmFyaWFibGU6IHZhcmlhYmxlLFxuICAgICAgZXhwcmVzc2lvbjogXCJcIixcbiAgICB9KTtcbiAgfSxcbiAgZ2V0RGVmYXVsdFZhcmlhYmxlOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNwZWNpZXMgPSB0aGlzLnBhcmVudC5jb2xsZWN0aW9uLnBhcmVudC5zcGVjaWVzXG4gICAgaWYoc3BlY2llcy5sZW5ndGggPiAwKXtcbiAgICAgIHJldHVybiBzcGVjaWVzLmF0KDApO1xuICAgIH1lbHNle1xuICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmNvbGxlY3Rpb24ucGFyZW50LnBhcmFtZXRlcnMuYXQoMClcbiAgICB9XG4gIH0sXG4gIHJlbW92ZUV2ZW50QXNzaWdubWVudDogZnVuY3Rpb24gKGV2ZW50QXNzaWdubWVudCkge1xuICAgIHRoaXMucmVtb3ZlKGV2ZW50QXNzaWdubWVudCk7XG4gIH0sXG59KTsiLCIvL21vZGVsc1xudmFyIFN0YXRlID0gcmVxdWlyZSgnYW1wZXJzYW5kLXN0YXRlJyk7XG4vL2NvbGxlY3Rpb25zXG52YXIgRXZlbnRBc3NpZ25tZW50cyA9IHJlcXVpcmUoJy4vZXZlbnQtYXNzaWdubWVudHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGF0ZS5leHRlbmQoe1xuICBwcm9wczoge1xuICAgIGNvbXBJRDogJ251bWJlcicsXG4gICAgbmFtZTogJ3N0cmluZycsXG4gICAgYW5ub3RhdGlvbjogJ3N0cmluZycsXG4gICAgZGVsYXk6ICdzdHJpbmcnLFxuICAgIHByaW9yaXR5OiAnc3RyaW5nJyxcbiAgICB0cmlnZ2VyRXhwcmVzc2lvbjogJ3N0cmluZycsXG4gICAgaW5pdGlhbFZhbHVlOiAnYm9vbGVhbicsXG4gICAgcGVyc2lzdGVudDogJ2Jvb2xlYW4nLFxuICAgIHVzZVZhbHVlc0Zyb21UcmlnZ2VyVGltZTogJ2Jvb2xlYW4nLFxuICB9LFxuICBjb2xsZWN0aW9uczoge1xuICAgIGV2ZW50QXNzaWdubWVudHM6IEV2ZW50QXNzaWdubWVudHMsXG4gIH0sXG4gIHNlc3Npb246IHtcbiAgICBzZWxlY3RlZDoge1xuICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB9LFxuICB9LFxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYXR0cnMsIG9wdGlvbnMpIHtcbiAgICBTdGF0ZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9LFxufSk7IiwidmFyIF8gPSByZXF1aXJlKCd1bmRlcnNjb3JlJyk7XG4vL21vZGVsc1xudmFyIEV2ZW50ID0gcmVxdWlyZSgnLi9ldmVudCcpO1xuLy9jb2xsZWN0aW9uc1xudmFyIENvbGxlY3Rpb24gPSByZXF1aXJlKCdhbXBlcnNhbmQtY29sbGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgbW9kZWw6IEV2ZW50LFxuICBhZGRFdmVudDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBpZCA9IHRoaXMucGFyZW50LmdldERlZmF1bHRJRCgpO1xuICAgIHZhciBuYW1lID0gdGhpcy5nZXREZWZhdWx0TmFtZSgpO1xuICAgIHZhciBldmVudCA9IHRoaXMuYWRkKHtcbiAgICAgIGNvbXBJRDogaWQsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgYW5ub3RhdGlvbjogXCJcIixcbiAgICAgIGRlbGF5OiBcIlwiLFxuICAgICAgcHJpb3JpdHk6IFwiMFwiLFxuICAgICAgdHJpZ2dlckV4cHJlc3Npb246IFwiXCIsXG4gICAgICBpbml0aWFsVmFsdWU6IGZhbHNlLFxuICAgICAgcGVyc2lzdGVudDogZmFsc2UsXG4gICAgICB1c2VWYWx1ZXNGcm9tVHJpZ2dlclRpbWU6IGZhbHNlLFxuICAgIH0pO1xuICAgIGV2ZW50LmV2ZW50QXNzaWdubWVudHMuYWRkRXZlbnRBc3NpZ25tZW50KClcbiAgICByZXR1cm4gZXZlbnRcbiAgfSxcbiAgZ2V0RGVmYXVsdE5hbWU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaSA9IHRoaXMubGVuZ3RoICsgMTtcbiAgICBuYW1lID0gJ2UnICsgaTtcbiAgICB2YXIgbmFtZXMgPSB0aGlzLm1hcChmdW5jdGlvbiAoZXZlbnQpIHsgcmV0dXJuIGV2ZW50Lm5hbWU7IH0pO1xuICAgIHdoaWxlKF8uY29udGFpbnMobmFtZXMsIG5hbWUpKXtcbiAgICAgIGkgKz0gMTtcbiAgICAgIG5hbWUgPSAnZScgKyBpO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZTtcbiAgfSxcbiAgcmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHRoaXMucmVtb3ZlKGV2ZW50KTtcbiAgfSxcbn0pOyIsIi8vbW9kZWxzXG52YXIgU3RhdGUgPSByZXF1aXJlKCdhbXBlcnNhbmQtc3RhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGF0ZS5leHRlbmQoe1xuICBwcm9wczoge1xuICAgIGNvbXBJRDogJ251bWJlcicsXG4gICAgbmFtZTogJ3N0cmluZycsXG4gICAgZnVuY3Rpb246ICdzdHJpbmcnLFxuICAgIGV4cHJlc3Npb246ICdzdHJpbmcnLFxuICAgIHZhcmlhYmxlczogJ3N0cmluZycsXG4gICAgc2lnbmF0dXJlOiAnc3RyaW5nJyxcbiAgICBhbm5vdGF0aW9uOiAnc3RyaW5nJyxcbiAgfVxufSk7IiwiLy9jb2xsZWN0aW9uc1xudmFyIENvbGxlY3Rpb24gPSByZXF1aXJlKCdhbXBlcnNhbmQtY29sbGVjdGlvbicpO1xuLy9tb2RlbHNcbnZhciBGdW5jdGlvbkRlZmluaXRpb24gPSByZXF1aXJlKCcuL2Z1bmN0aW9uLWRlZmluaXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBDb2xsZWN0aW9uLmV4dGVuZCh7XG4gIG1vZGVsOiBGdW5jdGlvbkRlZmluaXRpb24sXG59KTsiLCIvLyBNb2RlbHNcbnZhciBTdGF0ZSA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1zdGF0ZScpO1xudmFyIFNwZWNpZSA9IHJlcXVpcmUoJy4vc3BlY2llJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhdGUuZXh0ZW5kKHtcbiAgcHJvcHM6IHtcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBjb3VudDogJ251bWJlcicsXG4gICAgc3ViZG9tYWluOiAnc3RyaW5nJyxcbiAgICB4OiAnbnVtYmVyJyxcbiAgICB5OiAnbnVtYmVyJyxcbiAgICB6OiAnbnVtYmVyJyxcbiAgfSxcbiAgY2hpbGRyZW46IHtcbiAgICBzcGVjaWU6IFNwZWNpZSxcbiAgfSxcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKGF0dHJzLCBvcHRpb25zKSB7XG4gICAgU3RhdGUucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICB9LFxufSk7IiwiLy8gQ29sbGVjdGlvbnNcbnZhciBDb2xsZWN0aW9uID0gcmVxdWlyZSgnYW1wZXJzYW5kLWNvbGxlY3Rpb24nKTtcbi8vTW9kZWxzXG52YXIgSW5pdGlhbENvbmRpdGlvbiA9IHJlcXVpcmUoJy4vaW5pdGlhbC1jb25kaXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBDb2xsZWN0aW9uLmV4dGVuZCh7XG4gIG1vZGVsOiBJbml0aWFsQ29uZGl0aW9uLFxuICBhZGRJbml0aWFsQ29uZGl0aW9uOiBmdW5jdGlvbiAoaW5pdGlhbENvbmRpdGlvblR5cGUpIHtcbiAgICB2YXIgc3ViZG9tYWluID0gdGhpcy5nZXREZWZhdWx0U3ViZG9tYWluKCk7XG4gICAgdmFyIGluaXRpYWxDb25kaXRpb24gPSB0aGlzLmFkZCh7XG4gICAgICB0eXBlOiBpbml0aWFsQ29uZGl0aW9uVHlwZSxcbiAgICAgIHN1YmRvbWFpbjogc3ViZG9tYWluLFxuICAgICAgY291bnQ6IDAsXG4gICAgICB4OiAwLFxuICAgICAgeTogMCxcbiAgICAgIHo6IDAsXG4gICAgfSk7XG4gICAgaW5pdGlhbENvbmRpdGlvbi5zcGVjaWUgPSB0aGlzLmdldERlZmF1bHRTcGVjaWVzKCk7XG4gIH0sXG4gIGdldERlZmF1bHRTcGVjaWVzOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNwZWNpZSA9IHRoaXMucGFyZW50LnNwZWNpZXMuYXQoMCk7XG4gICAgcmV0dXJuIHNwZWNpZTtcbiAgfSxcbiAgZ2V0RGVmYXVsdFN1YmRvbWFpbjogZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdWJkb21haW4gPSB0aGlzLnBhcmVudC5tZXNoU2V0dGluZ3MudW5pcXVlU3ViZG9tYWlucy5hdCgwKTtcbiAgICByZXR1cm4gc3ViZG9tYWluLm5hbWU7XG4gIH0sXG4gIHJlbW92ZUluaXRpYWxDb25kaXRpb246IGZ1bmN0aW9uIChpbml0aWFsQ29uZGl0aW9uKSB7XG4gICAgdGhpcy5yZW1vdmUoaW5pdGlhbENvbmRpdGlvbik7XG4gIH0sXG59KTsiLCIvL21vZGVsc1xudmFyIFN0YXRlID0gcmVxdWlyZSgnYW1wZXJzYW5kLXN0YXRlJyk7XG52YXIgU3ViZG9tYWlucyA9IHJlcXVpcmUoJy4vc3ViZG9tYWlucycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRlLmV4dGVuZCh7XG4gIHByb3BzOiB7XG4gICAgY291bnQ6IHtcbiAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgZGVmYXVsdDogMixcbiAgICB9LFxuICB9LFxuICBkZXJpdmVkOiB7XG4gICAgdW5pcXVlU3ViZG9tYWluczoge1xuICAgICAgZGVwczogWydjb3VudCddLFxuICAgICAgZm46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHVuaXF1ZVN1YmRvbWFpbnMgPSBuZXcgU3ViZG9tYWlucygpO1xuICAgICAgICBmb3IodmFyIGkgPSAxOyBpIDw9IHRoaXMuY291bnQ7IGkrKyl7XG4gICAgICAgICAgdW5pcXVlU3ViZG9tYWlucy5hZGRTdWJkb21haW4oJ3N1YmRvbWFpbiAnICsgaSArICc6Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuaXF1ZVN1YmRvbWFpbnM7XG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uIChhdHRycywgb3B0aW9ucykge1xuICAgIFN0YXRlLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH0sXG59KTsiLCIvL21vZGVsc1xudmFyIFN0YXRlID0gcmVxdWlyZSgnYW1wZXJzYW5kLXN0YXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhdGUuZXh0ZW5kKHtcbiAgcHJvcHM6IHtcbiAgICBlbmRTaW06ICdudW1iZXInLFxuICAgIHRpbWVTdGVwOiAnbnVtYmVyJyxcbiAgICB2b2x1bWU6ICdudW1iZXInLFxuICAgIGFsZ29yaXRobTogJ3N0cmluZycsXG4gICAgcmVhbGl6YXRpb25zOiAnbnVtYmVyJyxcbiAgfSxcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKGF0dHJzLCBvcHRpb25zKSB7XG4gICAgU3RhdGUucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICB9LFxufSk7IiwidmFyIGFwcCA9IHJlcXVpcmUoJy4uL2FwcCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG52YXIgeGhyID0gcmVxdWlyZSgneGhyJyk7XG4vL21vZGVsc1xudmFyIE1vZGVsID0gcmVxdWlyZSgnYW1wZXJzYW5kLW1vZGVsJyk7XG52YXIgTW9kZWxTZXR0aW5ncyA9IHJlcXVpcmUoJy4vbW9kZWwtc2V0dGluZ3MnKTtcbnZhciBTaW11bGF0aW9uU2V0dGluZ3MgPSByZXF1aXJlKCcuL3NpbXVsYXRpb24tc2V0dGluZ3MnKTtcbnZhciBQYXJhbWV0ZXJTd2VlcFNldHRpbmdzID0gcmVxdWlyZSgnLi9wYXJhbWV0ZXItc3dlZXAtc2V0dGluZ3MnKTtcbnZhciBNZXNoU2V0dGluZ3MgPSByZXF1aXJlKCcuL21lc2gtc2V0dGluZ3MnKTtcbi8vY29sbGVjdGlvbnNcbnZhciBTcGVjaWVzID0gcmVxdWlyZSgnLi9zcGVjaWVzJyk7XG52YXIgSW5pdGlhbENvbmRpdGlvbnMgPSByZXF1aXJlKCcuL2luaXRpYWwtY29uZGl0aW9ucycpO1xudmFyIFBhcmFtZXRlcnMgPSByZXF1aXJlKCcuL3BhcmFtZXRlcnMnKTtcbnZhciBSZWFjdGlvbnMgPSByZXF1aXJlKCcuL3JlYWN0aW9ucycpO1xudmFyIFJ1bGVzID0gcmVxdWlyZSgnLi9ydWxlcycpO1xudmFyIEV2ZW50cyA9IHJlcXVpcmUoJy4vZXZlbnRzJyk7XG52YXIgRnVuY3Rpb25EZWZpbml0aW9ucyA9IHJlcXVpcmUoJy4vZnVuY3Rpb24tZGVmaW5pdGlvbnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBNb2RlbC5leHRlbmQoe1xuICB1cmw6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcGF0aC5qb2luKGFwcC5nZXRBcGlQYXRoKCksIFwiZmlsZS9qc29uLWRhdGFcIikrXCI/Zm9yPVwiK3RoaXMuZm9yK1wiJnBhdGg9XCIrdGhpcy5kaXJlY3Rvcnk7XG4gIH0sXG4gIHByb3BzOiB7XG4gICAgaXNfc3BhdGlhbDogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHRJRDoge1xuICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICBkZWZhdWx0OiAxLFxuICAgIH0sXG4gICAgZGVmYXVsdE1vZGU6IHtcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgZGVmYXVsdDogJycsXG4gICAgfSxcbiAgfSxcbiAgY29sbGVjdGlvbnM6IHtcbiAgICBzcGVjaWVzOiBTcGVjaWVzLFxuICAgIGluaXRpYWxDb25kaXRpb25zOiBJbml0aWFsQ29uZGl0aW9ucyxcbiAgICBwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJzLFxuICAgIHJlYWN0aW9uczogUmVhY3Rpb25zLFxuICAgIHJ1bGVzOiBSdWxlcyxcbiAgICBldmVudHNDb2xsZWN0aW9uOiBFdmVudHMsXG4gICAgZnVuY3Rpb25EZWZpbml0aW9uczogRnVuY3Rpb25EZWZpbml0aW9ucyxcbiAgfSxcbiAgY2hpbGRyZW46IHtcbiAgICBtb2RlbFNldHRpbmdzOiBNb2RlbFNldHRpbmdzLFxuICAgIHNpbXVsYXRpb25TZXR0aW5nczogU2ltdWxhdGlvblNldHRpbmdzLFxuICAgIHBhcmFtZXRlclN3ZWVwU2V0dGluZ3M6IFBhcmFtZXRlclN3ZWVwU2V0dGluZ3MsXG4gICAgbWVzaFNldHRpbmdzOiBNZXNoU2V0dGluZ3NcbiAgfSxcbiAgc2Vzc2lvbjoge1xuICAgIG5hbWU6ICdzdHJpbmcnLFxuICAgIHNlbGVjdGVkUmVhY3Rpb246ICdvYmplY3QnLFxuICAgIGRpcmVjdG9yeTogJ3N0cmluZycsXG4gICAgaXNQcmV2aWV3OiAnYm9vbGVhbicsXG4gICAgZm9yOiAnc3RyaW5nJyxcbiAgfSxcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKGF0dHJzLCBvcHRpb25zKXtcbiAgICBNb2RlbC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9LFxuICBnZXREZWZhdWx0SUQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaWQgPSB0aGlzLmRlZmF1bHRJRDtcbiAgICB0aGlzLmRlZmF1bHRJRCArPSAxO1xuICAgIHJldHVybiBpZDtcbiAgfSxcbiAgYXV0b1NhdmU6IGZ1bmN0aW9uICgpIHtcbiAgICAvL1RPRE86IGltcGxlbWVudCBhdXRvIHNhdmVcbiAgfSxcbiAgLy9jYWxsZWQgd2hlbiBzYXZlIGJ1dHRvbiBpcyBjbGlja2VkXG4gIHNhdmVNb2RlbDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnNwZWNpZXMubWFwKGZ1bmN0aW9uIChzcGVjaWUpIHtcbiAgICAgIHNlbGYuc3BlY2llcy50cmlnZ2VyKCd1cGRhdGUtc3BlY2llcycsIHNwZWNpZS5jb21wSUQsIHNwZWNpZSwgZmFsc2UpO1xuICAgIH0pO1xuICAgIHRoaXMucGFyYW1ldGVycy5tYXAoZnVuY3Rpb24gKHBhcmFtZXRlcikge1xuICAgICAgc2VsZi5wYXJhbWV0ZXJzLnRyaWdnZXIoJ3VwZGF0ZS1wYXJhbWV0ZXJzJywgcGFyYW1ldGVyLmNvbXBJRCwgcGFyYW1ldGVyKTtcbiAgICB9KTtcbiAgICBpZighaXNQcmV2aWV3KXtcbiAgICAgIHRoaXMuc2ltdWxhdGlvblNldHRpbmdzLmxldFVzQ2hvb3NlRm9yVXNlKClcbiAgICB9XG4gICAgdGhpcy5zYXZlKCk7XG4gIH0sXG59KTtcbiIsIi8vbW9kZWxzXG52YXIgU3RhdGUgPSByZXF1aXJlKCdhbXBlcnNhbmQtc3RhdGUnKTtcbnZhciBQYXJhbWV0ZXIgPSByZXF1aXJlKCcuL3BhcmFtZXRlcicpO1xudmFyIFNwZWNpZXMgPSByZXF1aXJlKCcuL3NwZWNpZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRlLmV4dGVuZCh7XG4gIHByb3BzOiB7XG4gICAgaXMxRDogJ2Jvb2xlYW4nLFxuICAgIHAxTWluOiAnbnVtYmVyJyxcbiAgICBwMU1heDogJ251bWJlcicsXG4gICAgcDFTdGVwczogJ251bWJlcicsXG4gICAgcDJNaW46ICdudW1iZXInLFxuICAgIHAyTWF4OiAnbnVtYmVyJyxcbiAgICBwMlN0ZXBzOiAnbnVtYmVyJyxcbiAgfSxcbiAgY2hpbGRyZW46IHtcbiAgICBwYXJhbWV0ZXJPbmU6IFBhcmFtZXRlcixcbiAgICBwYXJhbWV0ZXJUd286IFBhcmFtZXRlcixcbiAgICBzcGVjaWVzT2ZJbnRlcmVzdDogU3BlY2llc1xuICB9LFxuICBpbml0aWFsaXplOiBmdW5jdGlvbihhdHRycywgb3B0aW9ucykge1xuICAgIFN0YXRlLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cbn0pOyAiLCJ2YXIgXyA9IHJlcXVpcmUoJ3VuZGVyc2NvcmUnKTtcbi8vbW9kZWxzXG52YXIgU3RhdGUgPSByZXF1aXJlKCdhbXBlcnNhbmQtc3RhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGF0ZS5leHRlbmQoe1xuICBwcm9wczoge1xuICAgIGNvbXBJRDogJ251bWJlcicsXG4gICAgbmFtZTogJ3N0cmluZycsXG4gICAgZXhwcmVzc2lvbjogJ3N0cmluZycsXG4gICAgYW5ub3RhdGlvbjogJ3N0cmluZycsXG4gIH0sXG4gIHNlc3Npb246IHtcbiAgICBpblVzZToge1xuICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgfSxcbiAgfSxcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKGF0dHJzLCBvcHRpb25zKSB7XG4gICAgU3RhdGUucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfSxcbn0pOyIsInZhciBfID0gcmVxdWlyZSgndW5kZXJzY29yZScpO1xuLy9tb2RlbHNcbnZhciBQYXJhbWV0ZXIgPSByZXF1aXJlKCcuL3BhcmFtZXRlcicpO1xuLy9jb2xsZWN0aW9uc1xudmFyIENvbGxlY3Rpb24gPSByZXF1aXJlKCdhbXBlcnNhbmQtY29sbGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgbW9kZWw6IFBhcmFtZXRlcixcbiAgYWRkUGFyYW1ldGVyOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGlkID0gdGhpcy5wYXJlbnQuZ2V0RGVmYXVsdElEKCk7XG4gICAgdmFyIG5hbWUgPSB0aGlzLmdldERlZmF1bHROYW1lKCk7XG4gICAgdmFyIHBhcmFtZXRlciA9IHRoaXMuYWRkKHtcbiAgICAgIGNvbXBJRDogaWQsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgZXhwcmVzc2lvbjogJzAuMCcsXG4gICAgICBhbm5vdGF0aW9uOiBcIlwiLFxuICAgIH0pO1xuICB9LFxuICBnZXREZWZhdWx0TmFtZTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBpID0gdGhpcy5sZW5ndGggKyAxO1xuICAgIHZhciBuYW1lID0gJ2snICsgaTtcbiAgICB2YXIgbmFtZXMgPSB0aGlzLm1hcChmdW5jdGlvbiAocGFyYW1ldGVyKSB7cmV0dXJuIHBhcmFtZXRlci5uYW1lOyB9KTtcbiAgICB3aGlsZShfLmNvbnRhaW5zKG5hbWVzLCBuYW1lKSkge1xuICAgICAgaSArPSAxO1xuICAgICAgbmFtZSA9ICdrJyArIGk7XG4gICAgfVxuICAgIHJldHVybiBuYW1lO1xuICB9LFxuICByZW1vdmVQYXJhbWV0ZXI6IGZ1bmN0aW9uIChwYXJhbWV0ZXIpIHtcbiAgICB0aGlzLnJlbW92ZShwYXJhbWV0ZXIpO1xuICB9LFxufSk7IiwidmFyIF8gPSByZXF1aXJlKCd1bmRlcnNjb3JlJyk7XG4vL21vZGVsc1xudmFyIFN0YXRlID0gcmVxdWlyZSgnYW1wZXJzYW5kLXN0YXRlJyk7XG52YXIgUGFyYW1ldGVyID0gcmVxdWlyZSgnLi9wYXJhbWV0ZXInKTtcbi8vY29sbGVjdGlvbnNcbnZhciBTdG9pY2hTcGVjaWVzID0gcmVxdWlyZSgnLi9zdG9pY2gtc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRlLmV4dGVuZCh7XG4gIHByb3BzOiB7XG4gICAgY29tcElEOiAnbnVtYmVyJyxcbiAgICBuYW1lOiAnc3RyaW5nJyxcbiAgICByZWFjdGlvblR5cGU6ICdzdHJpbmcnLFxuICAgIHN1bW1hcnk6ICdzdHJpbmcnLFxuICAgIG1hc3NhY3Rpb246ICdib29sZWFuJyxcbiAgICBwcm9wZW5zaXR5OiAnc3RyaW5nJyxcbiAgICBhbm5vdGF0aW9uOiAnc3RyaW5nJyxcbiAgICBzdWJkb21haW5zOiB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uICgpIHtyZXR1cm4gW107IH0sXG4gICAgfSxcbiAgfSxcbiAgY2hpbGRyZW46IHtcbiAgICByYXRlOiBQYXJhbWV0ZXIsXG4gIH0sXG4gIGNvbGxlY3Rpb25zOiB7XG4gICAgcmVhY3RhbnRzOiBTdG9pY2hTcGVjaWVzLFxuICAgIHByb2R1Y3RzOiBTdG9pY2hTcGVjaWVzLFxuICB9LFxuICBzZXNzaW9uOiB7XG4gICAgc2VsZWN0ZWQ6IHtcbiAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgfSxcbiAgICBoYXNDb25mbGljdDoge1xuICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgfSxcbiAgfSxcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKGF0dHJzLCBvcHRpb25zKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIFN0YXRlLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgdGhpcy5vbignY2hhbmdlLXJlYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5idWlsZFN1bW1hcnkoKTtcbiAgICAgIHNlbGYuY2hlY2tNb2RlcygpO1xuICAgIH0pO1xuICB9LFxuICBidWlsZFN1bW1hcnk6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3VtbWFyeSA9IFwiXCI7XG5cbiAgICB2YXIgbnVtUmVhY3RhbnRzID0gdGhpcy5yZWFjdGFudHMubW9kZWxzLmxlbmd0aDtcbiAgICB2YXIgbnVtUHJvZHVjdHMgPSB0aGlzLnByb2R1Y3RzLm1vZGVscy5sZW5ndGg7XG5cbiAgICBpZihudW1SZWFjdGFudHMgPT09IDApe1xuICAgICAgc3VtbWFyeSA9ICdcXFxcZW1wdHlzZXQnO1xuICAgIH1lbHNle1xuICAgICAgZm9yKHZhciBpID0gMDsgaSA8IG51bVJlYWN0YW50czsgaSsrKXtcbiAgICAgICAgdmFyIHJlYWN0YW50ID0gdGhpcy5yZWFjdGFudHMubW9kZWxzW2ldO1xuICAgICAgICBpZihyZWFjdGFudC5yYXRpbyA+IDEpe1xuICAgICAgICAgIHN1bW1hcnkgKz0gcmVhY3RhbnQucmF0aW8gKyByZWFjdGFudC5zcGVjaWUubmFtZTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgc3VtbWFyeSArPSByZWFjdGFudC5zcGVjaWUubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGkgPCBudW1SZWFjdGFudHMgLSAxKXtcbiAgICAgICAgICBzdW1tYXJ5ICs9ICcrJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHN1bW1hcnkgKz0gJyBcXFxccmlnaHRhcnJvdyAnO1xuXG4gICAgaWYobnVtUHJvZHVjdHMgPT09IDApe1xuICAgICAgc3VtbWFyeSArPSAnXFxcXGVtcHR5c2V0JztcbiAgICB9ZWxzZXtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBudW1Qcm9kdWN0czsgaSsrKXtcbiAgICAgICAgdmFyIHByb2R1Y3QgPSB0aGlzLnByb2R1Y3RzLm1vZGVsc1tpXTtcbiAgICAgICAgaWYocHJvZHVjdC5yYXRpbyA+IDEpe1xuICAgICAgICAgIHN1bW1hcnkgKz0gcHJvZHVjdC5yYXRpbyArIHByb2R1Y3Quc3BlY2llLm5hbWU7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIHN1bW1hcnkgKz0gcHJvZHVjdC5zcGVjaWUubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGkgPCBudW1Qcm9kdWN0cyAtIDEpe1xuICAgICAgICAgIHN1bW1hcnkgKz0gJysnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHN1bW1hcnkgPSBzdW1tYXJ5LnJlcGxhY2UoL18vZywgJ1xcXFxfJyk7XG5cbiAgICB0aGlzLnN1bW1hcnkgPSBzdW1tYXJ5XG4gIH0sXG4gIGNoZWNrTW9kZXM6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFzQ29udGludW91cyA9IGZhbHNlO1xuICAgIHZhciBoYXNEeW5hbWljID0gZmFsc2U7XG4gICAgdmFyIGhhc0Rpc2NyZXRlID0gZmFsc2U7XG4gICAgdGhpcy5yZWFjdGFudHMubWFwKGZ1bmN0aW9uIChyZWFjdGFudCkgeyBcbiAgICAgIGlmKHJlYWN0YW50LnNwZWNpZS5tb2RlID09PSAnY29udGludW91cycgJiYgIWhhc0NvbnRpbnVvdXMpXG4gICAgICAgIGhhc0NvbnRpbnVvdXMgPSB0cnVlO1xuICAgICAgZWxzZSBpZihyZWFjdGFudC5zcGVjaWUubW9kZSA9PT0gJ2R5bmFtaWMnICYmICFoYXNEeW5hbWljKVxuICAgICAgICBoYXNEeW5hbWljID0gdHJ1ZTtcbiAgICAgIGVsc2UgaWYocmVhY3RhbnQuc3BlY2llLm1vZGUgPT09ICdkaXNjcmV0ZScgJiYgIWhhc0Rpc2NyZXRlKVxuICAgICAgICBoYXNEaXNjcmV0ZSA9IHRydWU7XG4gICAgfSk7XG4gICAgaWYoIWhhc0NvbnRpbnVvdXMgfHwgIWhhc0R5bmFtaWMpIHtcbiAgICAgIHRoaXMucHJvZHVjdHMubWFwKGZ1bmN0aW9uIChwcm9kdWN0KSB7IFxuICAgICAgICBpZihwcm9kdWN0LnNwZWNpZS5tb2RlID09PSAnY29udGludW91cycgJiYgIWhhc0NvbnRpbnVvdXMpXG4gICAgICAgICAgaGFzQ29udGludW91cyA9IHRydWU7XG4gICAgICAgIGVsc2UgaWYocHJvZHVjdC5zcGVjaWUubW9kZSA9PT0gJ2R5bmFtaWMnICYmICFoYXNEeW5hbWljKVxuICAgICAgICAgIGhhc0R5bmFtaWMgPSB0cnVlO1xuICAgICAgICBlbHNlIGlmKHByb2R1Y3Quc3BlY2llLm1vZGUgPT09ICdkaXNjcmV0ZScgJiYgIWhhc0Rpc2NyZXRlKVxuICAgICAgICBoYXNEaXNjcmV0ZSA9IHRydWU7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5oYXNDb25mbGljdCA9IEJvb2xlYW4oaGFzQ29udGludW91cyAmJiAoaGFzRHluYW1pYyB8fCBoYXNEaXNjcmV0ZSkpXG4gIH0sXG59KTsiLCJ2YXIgXyA9IHJlcXVpcmUoJ3VuZGVyc2NvcmUnKTtcbnZhciBFdmVudHMgPSByZXF1aXJlKCdhbXBlcnNhbmQtZXZlbnRzJyk7XG4vL21vZGVsc1xudmFyIFJlYWN0aW9uID0gcmVxdWlyZSgnLi9yZWFjdGlvbicpO1xuLy9jb2xsZWN0aW9uc1xudmFyIENvbGxlY3Rpb24gPSByZXF1aXJlKCdhbXBlcnNhbmQtY29sbGVjdGlvbicpO1xuXG5SZWFjdGlvbnMgPSBDb2xsZWN0aW9uLmV4dGVuZCh7XG4gIG1vZGVsOiBSZWFjdGlvbixcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKGF0dHJzLCBvcHRpb25zKSB7XG4gICAgQ29sbGVjdGlvbi5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9LFxuICBhZGRSZWFjdGlvbjogZnVuY3Rpb24gKHJlYWN0aW9uVHlwZSwgc3RvaWNoQXJncywgc3ViZG9tYWlucykge1xuICAgIHZhciBpZCA9IHRoaXMucGFyZW50LmdldERlZmF1bHRJRCgpO1xuICAgIHZhciBuYW1lID0gdGhpcy5nZXREZWZhdWx0TmFtZSgpO1xuICAgIHZhciBtYXNzYWN0aW9uID0gcmVhY3Rpb25UeXBlID09PSAnY3VzdG9tLW1hc3NhY3Rpb24nO1xuICAgIHZhciByZWFjdGlvbiA9IG5ldyBSZWFjdGlvbih7XG4gICAgICBjb21wSUQ6IGlkLFxuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHJlYWN0aW9uVHlwZTogcmVhY3Rpb25UeXBlLFxuICAgICAgbWFzc2FjdGlvbjogbWFzc2FjdGlvbixcbiAgICAgIHByb3BlbnNpdHk6ICcnLFxuICAgICAgYW5ub3RhdGlvbjogJycsXG4gICAgICBzdWJkb21haW5zOiBzdWJkb21haW5zLFxuICAgICAgcmVhY3RhbnRzOiBzdG9pY2hBcmdzLnJlYWN0YW50cyxcbiAgICAgIHByb2R1Y3RzOiBzdG9pY2hBcmdzLnByb2R1Y3RzLFxuICAgIH0pO1xuICAgIHRoaXMuc2V0RGVmYXVsdFNwZWNpZUZvclN0b2ljaFNwZWNpZXMocmVhY3Rpb24ucmVhY3RhbnRzKTtcbiAgICB0aGlzLnNldERlZmF1bHRTcGVjaWVGb3JTdG9pY2hTcGVjaWVzKHJlYWN0aW9uLnByb2R1Y3RzKTtcbiAgICBpZihyZWFjdGlvblR5cGUgIT09ICdjdXN0b20tcHJvcGVuc2l0eScpXG4gICAgICByZWFjdGlvbi5yYXRlID0gdGhpcy5nZXREZWZhdWx0UmF0ZSgpO1xuICAgIHJlYWN0aW9uLmJ1aWxkU3VtbWFyeSgpXG4gICAgdGhpcy5hZGQocmVhY3Rpb24pO1xuICAgIHJldHVybiByZWFjdGlvbjtcbiAgfSxcbiAgZ2V0RGVmYXVsdE5hbWU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaSA9IHRoaXMubGVuZ3RoICsgMTtcbiAgICB2YXIgbmFtZSA9ICdyJyArIGk7XG4gICAgdmFyIG5hbWVzID0gdGhpcy5tYXAoZnVuY3Rpb24gKHJlYWN0aW9uKSB7cmV0dXJuIHJlYWN0aW9uLm5hbWU7IH0pO1xuICAgIHdoaWxlKF8uY29udGFpbnMobmFtZXMsIG5hbWUpKXtcbiAgICAgIGkgKz0gMTtcbiAgICAgIG5hbWUgPSAncicgKyBpO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZTtcbiAgfSxcbiAgc2V0RGVmYXVsdFNwZWNpZUZvclN0b2ljaFNwZWNpZXM6IGZ1bmN0aW9uIChzdG9pY2hTcGVjaWVzKSB7XG4gICAgc3RvaWNoU3BlY2llcy5mb3JFYWNoKGZ1bmN0aW9uIChzdG9pY2hTcGVjaWUpIHtcbiAgICAgIHN0b2ljaFNwZWNpZS5zcGVjaWUgPSB0aGlzLmdldERlZmF1bHRTcGVjaWUoKTtcbiAgICB9LCB0aGlzKTtcbiAgfSxcbiAgZ2V0RGVmYXVsdFNwZWNpZTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBzcGVjaWUgPSB0aGlzLnBhcmVudC5zcGVjaWVzLmF0KDApO1xuICAgIHJldHVybiBzcGVjaWU7XG4gIH0sXG4gIGdldERlZmF1bHRSYXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmFtZXRlciA9IHRoaXMucGFyZW50LnBhcmFtZXRlcnMuYXQoMCk7XG4gICAgcmV0dXJuIHBhcmFtZXRlcjtcbiAgfSxcbiAgcmVtb3ZlUmVhY3Rpb246IGZ1bmN0aW9uIChyZWFjdGlvbikge1xuICAgIHRoaXMucmVtb3ZlKHJlYWN0aW9uKTtcbiAgfSxcbn0pO1xuXG5FdmVudHMuY3JlYXRlRW1pdHRlcihSZWFjdGlvbnMpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0aW9uczsiLCIvL21vZGVsc1xudmFyIFN0YXRlID0gcmVxdWlyZSgnYW1wZXJzYW5kLXN0YXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhdGUuZXh0ZW5kKHtcbiAgcHJvcHM6IHtcbiAgICBjb21wSUQ6ICdudW1iZXInLFxuICAgIG5hbWU6ICdzdHJpbmcnLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIHZhcmlhYmxlOiAnb2JqZWN0JyxcbiAgICBleHByZXNzaW9uOiAnc3RyaW5nJyxcbiAgICBhbm5vdGF0aW9uOiAnc3RyaW5nJyxcbiAgfSxcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKGF0dHJzLCBvcHRpb25zKSB7XG4gICAgU3RhdGUucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfSxcbn0pOyIsInZhciBfID0gcmVxdWlyZSgndW5kZXJzY29yZScpO1xuLy9tb2RlbHNcbnZhciBSdWxlID0gcmVxdWlyZSgnLi9ydWxlJyk7XG4vL2NvbGxlY3Rpb25zXG52YXIgQ29sbGVjdGlvbiA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1jb2xsZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ29sbGVjdGlvbi5leHRlbmQoe1xuICBtb2RlbDogUnVsZSxcbiAgYWRkUnVsZTogZnVuY3Rpb24gKHR5cGUpIHtcbiAgICB2YXIgaWQgPSB0aGlzLnBhcmVudC5nZXREZWZhdWx0SUQoKTtcbiAgICB2YXIgbmFtZSA9IHRoaXMuZ2V0RGVmYXVsdE5hbWUoKTtcbiAgICB2YXIgdmFyaWFibGUgPSB0aGlzLmdldERlZmF1bHRWYXJpYWJsZSgpO1xuICAgIHZhciBydWxlID0gbmV3IFJ1bGUoe1xuICAgICAgY29tcElEOiBpZCxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAgZXhwcmVzc2lvbjogJycsXG4gICAgICBhbm5vdGF0aW9uOiAnJyxcbiAgICB9KTtcbiAgICBydWxlLnZhcmlhYmxlID0gdmFyaWFibGU7XG4gICAgdGhpcy5hZGQocnVsZSk7XG4gIH0sXG4gIHJlbW92ZVJ1bGU6IGZ1bmN0aW9uIChydWxlKSB7XG4gICAgdGhpcy5yZW1vdmUocnVsZSk7XG4gIH0sXG4gIGdldERlZmF1bHROYW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGkgPSB0aGlzLmxlbmd0aCArIDE7XG4gICAgdmFyIG5hbWUgPSAncnInICsgaTtcbiAgICB2YXIgbmFtZXMgPSB0aGlzLm1hcChmdW5jdGlvbiAocnVsZSkge3JldHVybiBydWxlLm5hbWU7IH0pO1xuICAgIHdoaWxlKF8uY29udGFpbnMobmFtZXMsIG5hbWUpKXtcbiAgICAgIGkgKz0gMTtcbiAgICAgIG5hbWUgPSAncnInICsgaTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWU7XG4gIH0sXG4gIGdldERlZmF1bHRWYXJpYWJsZTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBzcGVjaWVzID0gdGhpcy5wYXJlbnQuc3BlY2llc1xuICAgIGlmKHNwZWNpZXMubGVuZ3RoID4gMCl7XG4gICAgICByZXR1cm4gc3BlY2llcy5hdCgwKTtcbiAgICB9ZWxzZXtcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudC5wYXJhbWV0ZXJzLmF0KDApXG4gICAgfVxuICB9LFxufSk7IiwiLy9tb2RlbHNcbnZhciBTdGF0ZSA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1zdGF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRlLmV4dGVuZCh7XG4gIHByb3BzOiB7XG4gICAgaXNBdXRvbWF0aWM6ICdib29sZWFuJyxcbiAgICByZWxhdGl2ZVRvbDogJ251bWJlcicsXG4gICAgYWJzb2x1dGVUb2w6ICdudW1iZXInLFxuICAgIHJlYWxpemF0aW9uczogJ251bWJlcicsXG4gICAgYWxnb3JpdGhtOiAnc3RyaW5nJyxcbiAgICBzZWVkOiAnbnVtYmVyJyxcbiAgICB0YXVUb2w6ICdudW1iZXInLFxuICB9LFxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYXR0cnMsIG9wdGlvbnMpIHtcbiAgICBTdGF0ZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9LFxuICBsZXRVc0Nob29zZUZvcllvdTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBkZWZhdWx0TW9kZSA9IHRoaXMucGFyZW50LmRlZmF1bHRNb2RlO1xuICAgIGlmKGRlZmF1bHRNb2RlID09PSBcImR5bmFtaWNcIil7XG4gICAgICB2YXIgc3BlY2llcyA9IHRoaXMucGFyZW50LnNwZWNpZXNcbiAgICAgIHZhciBkaXNjcmV0ZVNwZWNpZXMgPSBzcGVjaWVzLmZpbHRlcihmdW5jdGlvbiAoc3BlY2llKSB7XG4gICAgICAgIGlmKHNwZWNpZS5tb2RlID09PSBcImRpc2NyZXRlXCIpXG4gICAgICAgICAgcmV0dXJuIHNwZWNpZVxuICAgICAgfSk7XG4gICAgICBpZihkaXNjcmV0ZVNwZWNpZXMubGVuZ3RoID09PSBzcGVjaWVzLmxlbmd0aClcbiAgICAgICAgZGVmYXVsdE1vZGUgPSBcImRpc2NyZXRlXCJcbiAgICB9XG4gICAgdmFyIG51bUV2ZW50cyA9IHRoaXMucGFyZW50LmV2ZW50c0NvbGxlY3Rpb24ubGVuZ3RoO1xuICAgIHZhciBudW1SdWxlcyA9IHRoaXMucGFyZW50LnJ1bGVzLmxlbmd0aDtcbiAgICB2YXIgbnVtRnVuY0RlZiA9IHRoaXMucGFyZW50LmZ1bmN0aW9uRGVmaW5pdGlvbnMubGVuZ3RoO1xuICAgIHZhciB0VG9sID0gdGhpcy50YXVUb2xcbiAgICB2YXIgYVRvbCA9IHRoaXMuYWJzb2x1dGVUb2xcbiAgICB2YXIgclRvbCA9IHRoaXMucmVsYXRpdmVUb2xcblxuICAgIGlmKG51bUV2ZW50cyB8fCBudW1SdWxlcyB8fCBudW1GdW5jRGVmIHx8IHJUb2wgIT09IDFlLTMgfHwgYVRvbCAhPT0gMWUtNiB8fCBkZWZhdWx0TW9kZSAhPT0gJ2Rpc2NyZXRlJyl7XG4gICAgICB0aGlzLmFsZ29yaXRobSA9IFwiSHlicmlkLVRhdS1MZWFwaW5nXCI7XG4gICAgfWVsc2UgaWYodFRvbCAhPT0gMC4wMyl7XG4gICAgICB0aGlzLmFsZ29yaXRobSA9IFwiVGF1LUxlYXBpbmdcIjtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMuYWxnb3JpdGhtID0gXCJTU0FcIlxuICAgIH1cbiAgfSxcbn0pOyIsInZhciBfID0gcmVxdWlyZSgndW5kZXJzY29yZScpO1xuLy9tb2RlbHNcbnZhciBTdGF0ZSA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1zdGF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRlLmV4dGVuZCh7XG4gIHByb3BzOiB7XG4gICAgY29tcElEOiAnbnVtYmVyJyxcbiAgICBuYW1lOiAnc3RyaW5nJyxcbiAgICB2YWx1ZTogJ251bWJlcicsXG4gICAgbW9kZTogJ3N0cmluZycsXG4gICAgc3dpdGNoVG9sOiAnbnVtYmVyJyxcbiAgICBzd2l0Y2hNaW46ICdudW1iZXInLFxuICAgIGlzU3dpdGNoVG9sOiAnYm9vbGVhbicsXG4gICAgYW5ub3RhdGlvbjogJ3N0cmluZycsXG4gICAgZGlmZnVzaW9uQ29lZmY6ICdudW1iZXInLFxuICAgIHN1YmRvbWFpbnM6IHtcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24oKSB7cmV0dXJuIFtdOyB9XG4gICAgfSxcbiAgfSxcbiAgc2Vzc2lvbjoge1xuICAgIGluVXNlOiB7XG4gICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICB9LFxuICB9LFxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYXR0cnMsIG9wdGlvbnMpIHtcbiAgICBTdGF0ZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9LFxufSk7IiwidmFyIF8gPSByZXF1aXJlKCd1bmRlcnNjb3JlJyk7XG4vL21vZGVsc1xudmFyIFNwZWNpZSA9IHJlcXVpcmUoJy4vc3BlY2llJyk7XG4vL2NvbGxlY3Rpb25zXG52YXIgQ29sbGVjdGlvbiA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1jb2xsZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ29sbGVjdGlvbi5leHRlbmQoe1xuICBtb2RlbDogU3BlY2llLFxuICBhZGRTcGVjaWU6IGZ1bmN0aW9uIChzdWJkb21haW5zKSB7XG4gICAgdmFyIGlkID0gdGhpcy5wYXJlbnQuZ2V0RGVmYXVsdElEKCk7XG4gICAgdmFyIG5hbWUgPSB0aGlzLmdldERlZmF1bHROYW1lKCk7XG4gICAgdmFyIHNwZWNpZSA9IHRoaXMuYWRkKHtcbiAgICAgIGNvbXBJRDogaWQsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6IDAsXG4gICAgICBtb2RlOiB0aGlzLnBhcmVudC5kZWZhdWx0TW9kZSxcbiAgICAgIHN3aXRjaFRvbDogMC4wMyxcbiAgICAgIHN3aXRjaE1pbjogMTAwLFxuICAgICAgaXNTd2l0Y2hUb2w6IHRydWUsXG4gICAgICBhbm5vdGF0aW9uOiBcIlwiLFxuICAgICAgZGlmZnVzaW9uQ29lZmY6IDAuMCxcbiAgICAgIHN1YmRvbWFpbnM6IHN1YmRvbWFpbnNcbiAgICB9KTtcbiAgfSxcbiAgZ2V0RGVmYXVsdE5hbWU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaSA9IHRoaXMubGVuZ3RoICsgMTtcbiAgICB2YXIgbmFtZSA9ICdzJyArIGk7XG4gICAgdmFyIG5hbWVzID0gdGhpcy5tYXAoZnVuY3Rpb24gKHNwZWNpZSkgeyByZXR1cm4gc3BlY2llLm5hbWU7IH0pO1xuICAgIHdoaWxlKF8uY29udGFpbnMobmFtZXMsIG5hbWUpKSB7XG4gICAgICBpICs9IDE7XG4gICAgICBuYW1lID0gJ3MnICsgaTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWU7XG4gIH0sXG4gIHJlbW92ZVNwZWNpZTogZnVuY3Rpb24gKHNwZWNpZSkge1xuICAgIHRoaXMucmVtb3ZlKHNwZWNpZSk7XG4gIH0sXG59KTsiLCJ2YXIgXyA9IHJlcXVpcmUoJ3VuZGVyc2NvcmUnKTtcbi8vbW9kZWxzXG52YXIgU3RhdGUgPSByZXF1aXJlKCdhbXBlcnNhbmQtc3RhdGUnKTtcbnZhciBTcGVjaWUgPSByZXF1aXJlKCcuL3NwZWNpZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRlLmV4dGVuZCh7XG4gIHByb3BzOiB7XG4gICAgcmF0aW86ICdudW1iZXInLFxuICB9LFxuICBjaGlsZHJlbjoge1xuICAgIHNwZWNpZTogU3BlY2llLFxuICB9LFxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYXR0cnMsIG9wdGlvbnMpIHtcbiAgICBTdGF0ZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9LFxufSk7IiwidmFyIF8gPSByZXF1aXJlKCd1bmRlcnNjb3JlJyk7XG4vL21vZGVsc1xudmFyIFN0b2ljaFNwZWNpZSA9IHJlcXVpcmUoJy4vc3RvaWNoLXNwZWNpZScpO1xuLy9jb2xsZWN0aW9uc1xudmFyIENvbGxlY3Rpb24gPSByZXF1aXJlKCdhbXBlcnNhbmQtY29sbGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgbW9kZWw6IFN0b2ljaFNwZWNpZSxcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKGF0dHJzLCBvcHRpb25zKSB7XG4gICAgQ29sbGVjdGlvbi5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHRoaXMub24oJ2FkZCByZW1vdmUnLCBfLmJpbmQodGhpcy50cmlnZ2VyQ2hhbmdlLCB0aGlzKSk7XG4gIH0sXG4gIHRyaWdnZXJDaGFuZ2U6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmJhc2VNb2RlbCA9IHRoaXMucGFyZW50LmNvbGxlY3Rpb24ucGFyZW50O1xuICAgIHRoaXMuYmFzZU1vZGVsLnNwZWNpZXMudHJpZ2dlcignc3RvaWNoLXNwZWNpZXMtY2hhbmdlJyk7XG4gIH0sXG4gIGFkZFN0b2ljaFNwZWNpZTogZnVuY3Rpb24gKHNwZWNpZU5hbWUpIHtcbiAgICB2YXIgc3BlY2llID0gdGhpcy5wYXJlbnQuY29sbGVjdGlvbi5wYXJlbnQuc3BlY2llcy5maWx0ZXIoZnVuY3Rpb24gKHNwZWNpZSkge1xuICAgICAgICByZXR1cm4gc3BlY2llLm5hbWUgPT09IHNwZWNpZU5hbWU7XG4gICAgfSlbMF07XG4gICAgdmFyIHN0b2ljaFNwZWNpZSA9IG5ldyBTdG9pY2hTcGVjaWUoe1xuICAgICAgICByYXRpbzogMVxuICAgIH0pO1xuICAgIHN0b2ljaFNwZWNpZS5zcGVjaWUgPSBzcGVjaWU7XG4gICAgdGhpcy5hZGQoc3RvaWNoU3BlY2llKTtcbiAgfSxcbiAgcmVtb3ZlU3RvaWNoU3BlY2llOiBmdW5jdGlvbiAoc3RvaWNoU3BlY2llKSB7XG4gICAgc3RvaWNoU3BlY2llLnN0b3BMaXN0ZW5pbmcoKTtcbiAgICB0aGlzLnJlbW92ZShzdG9pY2hTcGVjaWUpO1xuICB9LFxufSk7IiwiLy9tb2RlbFxudmFyIFN0YXRlID0gcmVxdWlyZSgnYW1wZXJzYW5kLXN0YXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhdGUuZXh0ZW5kKHtcbiAgcHJvcHM6IHtcbiAgICBuYW1lOiAnc3RyaW5nJyxcbiAgfSxcbn0pOyIsIi8vbW9kZWxzXG52YXIgU3ViZG9tYWluID0gcmVxdWlyZSgnLi9zdWJkb21haW4nKTtcbi8vY29sbGVjdGlvbnNcbnZhciBDb2xsZWN0aW9uID0gcmVxdWlyZSgnYW1wZXJzYW5kLWNvbGxlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBDb2xsZWN0aW9uLmV4dGVuZCh7XG4gIG1vZGVsOiBTdWJkb21haW4sXG4gIGFkZFN1YmRvbWFpbjogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aGlzLmFkZCh7bmFtZTogbmFtZX0pO1xuICB9LFxuICByZW1vdmVTdWJkb21haW5zOiBmdW5jdGlvbiAoc3ViZG9tYWluKSB7XG4gICAgdGhpcy5yZW1vdmUoc3ViZG9tYWluKTtcbiAgfSxcbn0pOyIsIm1vZHVsZS5leHBvcnRzID0ge1xuICAgICdmaWxlLWJyb3dzZXInIDogYFxuICAgICAgICA8cD48Yj5PcGVuL0VkaXQgYSBGaWxlPC9iPjogRG91YmxlLWNsaWNrIG9uIGEgZmlsZSBvciByaWdodC1jbGljayBvbiBhIGZpbGUgYW5kIGNsaWNrIE9wZW4vRWRpdC4gIFxuICAgICAgICA8Yj5Ob3RlPC9iPjogU29tZSBmaWxlcyB3aWxsIG9wZW4gaW4gYSBuZXcgdGFiIHNvIHlvdSBtYXkgd2FudCB0byB0dXJuIG9mZiB0aGUgcG9wLXVwIGJsb2NrZXIuPC9wPlxuICAgICAgICA8cD48Yj5PcGVuIERpcmVjdG9yeTwvYj46IENsaWNrIG9uIHRoZSBhcnJvdyBuZXh0IHRvIHRoZSBkaXJlY3Rvcnkgb3IgZG91YmxlLWNsaWNrIG9uIHRoZSBkaXJlY3RvcnkuPC9wPlxuICAgICAgICA8cD48Yj5DcmVhdGUgYSBEaXJlY3RvcnkvTW9kZWw8L2I+OiBSaWdodC1jbGljayBvbiBhIGRpcmVjdG9yeSwgY2xpY2sgTmV3IERpcmVjdG9yeS9OZXcgTW9kZWwsIGFuZCBlbnRlciB0aGUgbmFtZSBvZiBkaXJlY3RvcnkvbW9kZWwgb3IgcGF0aC4gIFxuICAgICAgICBGb3IgbW9kZWxzIHlvdSB3aWxsIG5lZWQgdG8gY2xpY2sgb24gdGhlIHR5cGUgb2YgbW9kZWwgeW91IHdpc2ggdG8gY3JlYXRlIGJlZm9yZSBlbnRlcmluZyB0aGUgbmFtZSBvciBwYXRoLjwvcD5cbiAgICAgICAgPHA+PGI+Q3JlYXRlIGEgV29ya2Zsb3c8L2I+OiBSaWdodC1jbGljayBvbiBhIG1vZGVsIGFuZCBjbGljayBOZXcgV29ya2Zsb3csIHRoaXMgdGFrZXMgeW91IHRvIHRoZSB3b3JrZmxvdyBzZWxlY3Rpb24gcGFnZS4gIFxuICAgICAgICBGcm9tIHRoZSB3b3JrZmxvdyBzZWxlY3Rpb24gcGFnZSwgY2xpY2sgb24gb25lIG9mIHRoZSBsaXN0ZWQgd29ya2Zsb3dzLjwvcD5cbiAgICAgICAgPHA+PGI+Q29udmVydCBhIEZpbGU8L2I+OiBSaWdodC1jbGljayBvbiBhIE1vZGVsL1NCTUwsIGNsaWNrIENvbnZlcnQsIGFuZCBjbGljayBvbiB0aGUgZGVzaXJlZCBDb252ZXJ0IHRvIG9wdGlvbi4gIFxuICAgICAgICBNb2RlbCBmaWxlcyBjYW4gYmUgY29udmVydGVkIHRvIFNwYXRpYWwgTW9kZWxzLCBOb3RlYm9va3MsIG9yIFNCTUwgZmlsZXMuICBcbiAgICAgICAgU3BhdGlhbCBNb2RlbHMgYW5kIFNCTUwgZmlsZSBjYW4gYmUgY29udmVydGVkIHRvIE1vZGVscy4gIFxuICAgICAgICA8Yj5Ob3RlPC9iPjogTm90ZWJvb2tzIHdpbGwgb3BlbiBpbiBhIG5ldyB0YWIgc28geW91IG1heSB3YW50IHRvIHR1cm4gb2ZmIHRoZSBwb3AtdXAgYmxvY2tlci48L3A+XG4gICAgICAgIDxwPjxiPk1vdmUgRmlsZSBvciBEaXJlY3Rvcnk8L2I+OiBDbGljayBhbmQgZHJhZyB0aGUgZmlsZSBvciBkaXJlY3RvcnkgdG8gdGhlIG5ldyBsb2NhdGlvbi4gIFxuICAgICAgICBZb3UgY2FuIG9ubHkgbW92ZSBhbiBpdGVtIHRvIGEgZGlyZWN0b3J5IGlmIHRoZXJlIGlzbid0IGEgZmlsZSBvciBkaXJlY3Rvcnkgd2l0aCB0aGUgc2FtZSBuYW1lIGluIHRoYXQgbG9jYXRpb24uPC9wPlxuICAgICAgICA8cD48Yj5Eb3dubG9hZCBhIE1vZGVsL05vdGVib29rL1NCTUwgRmlsZTwvYj46IFJpZ2h0LWNsaWNrIG9uIHRoZSBmaWxlIGFuZCBjbGljayBkb3dubG9hZC48L3A+XG4gICAgICAgIDxwPjxiPlJlbmFtZSBGaWxlL0RpcmVjdG9yeTwvYj46IFJpZ2h0LWNsaWNrIG9uIGEgZmlsZS9kaXJlY3RvcnksIGNsaWNrIHJlbmFtZSwgYW5kIGVudGVyIHRoZSBuZXcgbmFtZS48L3A+XG4gICAgICAgIDxwPjxiPkR1cGxpY2F0ZS9EZWxldGUgQSBGaWxlL0RpcmVjdG9yeTwvYj46IFJpZ2h0LWNsaWNrIG9uIHRoZSBmaWxlL2RpcmVjdG9yeSBhbmQgY2xpY2sgRHVwbGljYXRlL0RlbGV0ZS48L3A+XG4gICAgYCxcbiAgICAnbW9kZWwtZWRpdG9yJyA6IGBcbiAgICAgICAgPHA+PGI+U3BlY2llczwvYj46IEEgc3BlY2llcyByZWZlcnMgdG8gYSBwb29sIG9mIGVudGl0aWVzIHRoYXQgYXJlIGNvbnNpZGVyZWQgXG4gICAgICAgICAgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBlYWNoIG90aGVyIGZvciB0aGUgcHVycG9zZXMgb2YgdGhlIG1vZGVsIGFuZCBtYXkgcGFydGljaXBhdGUgXG4gICAgICAgICAgaW4gcmVhY3Rpb25zLjwvcD5cbiAgICAgICAgPHA+PGI+UGFyYW1ldGVyPC9iPjogQSBQYXJhbWV0ZXIgaXMgdXNlZCB0byBkZWZpbmUgYSBzeW1ib2wgYXNzb2NpYXRlZCB3aXRoIFxuICAgICAgICAgIGEgdmFsdWU7IHRoaXMgc3ltYm9sIGNhbiB0aGVuIGJlIHVzZWQgaW4gbWF0aGVtYXRpY2FsIGZvcm11bGFzIGluIGEgbW9kZWwuPC9wPlxuICAgICAgICA8cD48Yj5SZWFjdGlvbjwvYj46IEEgcmVhY3Rpb24gaW4gU0JNTCByZXByZXNlbnRzIGFueSBraW5kIG9mIHByb2Nlc3MgdGhhdCBjYW4gY2hhbmdlIFxuICAgICAgICAgIHRoZSBxdWFudGl0eSBvZiBvbmUgb3IgbW9yZSBzcGVjaWVzIGluIGEgbW9kZWwuICBBdCBsZWFzdCBvbmUgc3BlY2llcyBpcyByZXF1aXJlZCB0byBcbiAgICAgICAgICBhZGQgYSByZWFjdGlvbiBhbmQgYXQgbGVhc3Qgb25lIHBhcmFtZXRlciBpcyByZXF1aXJlZCB0byBhZGQgYSBtYXNzIGFjdGlvbiByZWFjdGlvbi48L3A+XG4gICAgICAgIDxwPjxiPkV2ZW50PC9iPjogRXZlbnRzIGRlc2NyaWJlIHRoZSB0aW1lIGFuZCBmb3JtIG9mIGluc3RhbnRhbmVvdXMsIGRpc2NvbnRpbnVvdXMgc3RhdGUgXG4gICAgICAgICAgY2hhbmdlcyBpbiB0aGUgbW9kZWwuICBBbiBFdmVudCBvYmplY3QgZGVmaW5lcyB3aGVuIHRoZSBldmVudCBjYW4gb2NjdXIsIHRoZSB2YXJpYWJsZXMgXG4gICAgICAgICAgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgaXQsIGhvdyB0aGUgdmFyaWFibGVzIGFyZSBhZmZlY3RlZCwgYW5kIHRoZSBldmVudOKAmXMgcmVsYXRpb25zaGlwIFxuICAgICAgICAgIHRvIG90aGVyIGV2ZW50cy4gIEF0IGxlYXN0IG9uZSBzcGVjaWVzIG9yIHBhcmFtZXRlciBpcyByZXF1aXJlZCB0byBhZGQgYW4gZXZlbnQuPC9wPlxuICAgICAgICA8cD48Yj5SdWxlPC9iPjogUnVsZXMgcHJvdmlkZSBhZGRpdGlvbmFsIHdheXMgdG8gZGVmaW5lIHRoZSB2YWx1ZXMgb2YgdmFyaWFibGVzIFxuICAgICAgICAgIGluIGEgbW9kZWwsIHRoZWlyIHJlbGF0aW9uc2hpcHMsIGFuZCB0aGUgZHluYW1pY2FsIGJlaGF2aW9ycyBvZiB0aG9zZSB2YXJpYWJsZXMuICBUaGUgXG4gICAgICAgICAgcnVsZSB0eXBlIEFzc2lnbm1lbnQgUnVsZSBpcyB1c2VkIHRvIGV4cHJlc3MgZXF1YXRpb25zIHRoYXQgc2V0IHRoZSB2YWx1ZXMgb2YgdmFyaWFibGVzLiAgXG4gICAgICAgICAgVGhlIHJ1bGUgdHlwZSBSYXRlIFJ1bGUgaXMgdXNlZCB0byBleHByZXNzIGVxdWF0aW9ucyB0aGF0IGRldGVybWluZSB0aGUgcmF0ZXMgb2YgY2hhbmdlIFxuICAgICAgICAgIG9mIHZhcmlhYmxlcy4gIEF0IGxlYXN0IG9uZSBzcGVjaWVzIG9yIHBhcmFtZXRlciBpcyByZXF1aXJlZCB0byBhZGQgYSBydWxlLjwvcD5cbiAgICAgICAgPHA+PGI+UHJldmlldzwvYj46IEEgcHJldmlldyBvZiB0aGUgbW9kZWwgc2hvd3MgdGhlIHJlc3VsdHMgb2YgdGhlIGZpcnN0IGZpdmUgc2Vjb25kcyBvZiBhIFxuICAgICAgICAgIHNpbmdsZSB0cmFqZWN0b3J5IG9mIHRoZSBtb2RlbCBzaW11bGF0aW9uLiAgQXQgbGVhc3Qgb25lIHNwZWNpZXMgYW5kIG9uZSByZWFjdGlvbiwgZXZlbnQsIFxuICAgICAgICAgIG9yIHJ1bGUgaXMgcmVxdWlyZWQgdG8gcnVuIGEgcHJldmlldy48L3A+XG4gICAgICAgIDxwPjxiPldvcmtmbG93PC9iPjogQSB3b3JrZmxvdyBhbGxvd3MgeW91IHRvIHJ1biBhIGZ1bGwgbW9kZWwgd2l0aCBtdWx0aXBsZSB0cmFqZWN0b3JpZXMgd2l0aCBcbiAgICAgICAgICBzZXR0aW5ncyB0aGUgd2lsbCBoZWxwIHJlZmluZSB0aGUgc2ltdWxhdGlvbi4gIEF0IGxlYXN0IG9uZSBzcGVjaWVzIGFuZCBvbmUgcmVhY3Rpb24sIGV2ZW50LCBcbiAgICAgICAgICBvciBydWxlIGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBhIG5ldyB3b3JrZmxvdy48L3A+XG4gICAgYCxcbiAgICAnd2tmbC1tYW5hZ2VyJyA6IGBcbiAgICAgICAgPHA+PGI+V29ya2Zsb3cgTmFtZS9QYXRoPC9iPjogWW91IG1heSBlZGl0IHRoZSBuYW1lL3BhdGggb2YgdGhlIHdvcmtmbG93IGFzIGxvbmcgYXMgdGhlIHdvcmtmbG93IGhhcyBub3QgYmVlbiBzYXZlZC4gIFxuICAgICAgICBXb3JrZmxvdyBOYW1lcyBhbHdheXMgZW5kIHdpdGggYSB0aW1lIHN0YW1wLjwvcD5cbiAgICAgICAgPHA+PGI+TW9kZWwgUGF0aDwvYj46IElmIHlvdSBtb3ZlIG9yIHJlbmFtZSB0aGUgbW9kZWwgbWFrZSBzdXJlIHRvIHVwZGF0ZSB0aGlzIHBhdGguPC9wPlxuICAgICAgICA8cD48Yj5TZXR0aW5nczwvYj46IFRoaXMgaXMgd2hlcmUgeW91IGNhbiBjdXN0b21pemUgdGhlIHNldHRpbmdzIGZvciB5b3VyIHdvcmtmbG93LlxuICAgICAgICBJZiB5b3UgbmVlZCB0byBlZGl0IG90aGVyIHBhcnQgb2YgeW91IG1vZGVsIGNsaWNrIG9uIHRoZSBlZGl0IG1vZGVsIGJ1dHRvbi4gIFxuICAgICAgICBUaGUgc2V0dGluZ3MgYXJlIG9ubHkgYXZhaWxhYmxlIGZvciB3b3JrZmxvd3MgdGhhdCBoYXZlIG5vdCBiZWVuIHJ1bi48L3A+XG4gICAgICAgIDxwPjxiPlN0YXR1czwvYj46IFRoaXMgc2VjdGlvbiBkaXNwbGF5cyB0aGUgc3RhdHVzIGFuZCBzdGFydCB0aW1lIG9mIHRoZSBXb3JrZmxvdy4gIElmIHRoZSB3b3JrZmxvdyBoYXNuJ3QgYmVlbiBzYXJ0ZWQgdGhpcyBzZWN0aW9uIGlzIGNsb3NlZC48L3A+XG4gICAgICAgIDxwPjxiPlJlc3VsdHM8L2I+OiBZb3UgbWF5IGNoYW5nZSB0aGUgdGl0bGUsIHgtYXhpcyBsYWJlbCwgYW5kIHktYXhpcyBsYWJlbCBieSBjbGlja2luZyBvbiB0aGUgZWRpdCBwbG90IGJ1dHRvbiB0aGVuIGVudGVyIHRoZSBuYW1lIGluIHRoZSBjb3JyZWN0IGZpZWxkLjwvcD5cbiAgICAgICAgPHA+PGI+SW5mbzwvYj46IFRoaXMgc2VjdGlvbiBkaXNwbGF5cyBhbnkgd2FybmluZ3MgYW5kL29yIGVycm9yIHRoYXQgYXJlIGxvZ2dlZCBieSB0aGUgcnVubmluZyB3b3JrZmxvdy48L3A+XG4gICAgICAgIDxwPjxiPk1vZGVsPC9iPjogVGhpcyBzZWN0aW9uIGxldHMgeW91IHZpZXcgdGhlIG1vZGVsIHRoYXQgd2FzIHVzZWQgd2hlbiB5b3UgcmFuIHRoZSB3b3JrZmxvdy48L3A+XG4gICAgYCxcbn0iLCJ2YXIgVmlldyA9IHJlcXVpcmUoJ2FtcGVyc2FuZC12aWV3Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gVmlldy5leHRlbmQoe1xuXG59KTtcbiIsImxldCBQYWdlVmlldyA9IHJlcXVpcmUoJy4vYmFzZScpO1xubGV0IE1haW5WaWV3ID0gcmVxdWlyZSgnLi4vdmlld3MvbWFpbicpO1xuLy92YXIgdGVtcGxhdGVzID0gcmVxdWlyZSgnLi4vdGVtcGxhdGVzJyk7XG5sZXQgdGVtcGxhdGUgPSByZXF1aXJlKCcuLi90ZW1wbGF0ZXMvcGFnZXMvaG9tZS5wdWcnKTtcbmxldCBkb21SZWFkeSA9IHJlcXVpcmUoJ2RvbXJlYWR5Jyk7XG5cbmxldCBib290c3RyYXAgPSByZXF1aXJlKCdib290c3RyYXAnKTtcblxubGV0IGFwcCA9IHJlcXVpcmUoJy4uL2FwcCcpO1xuXG5pbXBvcnQgYm9vdHN0cmFwU3R5bGVzIGZyb20gJy4uL3N0eWxlcy9ib290c3RyYXAuY3NzJztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi4vc3R5bGVzL3N0eWxlcy5jc3MnO1xuaW1wb3J0IGZvbnRhd2Vzb21lU3R5bGVzIGZyb20gJ0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1mcmVlL2Nzcy9zdmctd2l0aC1qcy5taW4uY3NzJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0UGFnZSAocGFnZSkge1xuICBkb21SZWFkeSgoKSA9PiB7XG4gICAgbGV0IG1haW5WaWV3ID0gbmV3IE1haW5WaWV3KHtcbiAgICAgIGVsOiBkb2N1bWVudC5ib2R5XG4gICAgfSk7XG4gICAgbGV0IHAgPSBuZXcgcGFnZSh7XG4gICAgICBlbDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtaG9vaz1cInBhZ2UtY29udGFpbmVyXCJdJyksXG4gICAgfSk7XG4gICAgcC5yZW5kZXIoKVxuICB9KVxufVxuIiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vYm9vdHN0cmFwLmNzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IHVuZGVmaW5lZDtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2FscztcblxuaWYobW9kdWxlLmhvdCkge1xuXHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9ib290c3RyYXAuY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9ib290c3RyYXAuY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59IiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGVzLmNzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IHVuZGVmaW5lZDtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2FscztcblxuaWYobW9kdWxlLmhvdCkge1xuXHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZXMuY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZXMuY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59IiwidmFyIHB1ZyA9IHJlcXVpcmUoXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3B1Zy1ydW50aW1lL2luZGV4LmpzXCIpO1xuXG5mdW5jdGlvbiB0ZW1wbGF0ZShsb2NhbHMpIHt2YXIgcHVnX2h0bWwgPSBcIlwiLCBwdWdfbWl4aW5zID0ge30sIHB1Z19pbnRlcnA7cHVnX2h0bWwgPSBwdWdfaHRtbCArIFwiXFx1MDAzQyFET0NUWVBFIGh0bWxcXHUwMDNFXFx1MDAzQ2h0bWxcXHUwMDNFXFx1MDAzQ2hlYWRcXHUwMDNFXFx1MDAzQ21ldGEgY2hhcnNldD1cXFwidXRmLThcXFwiXFx1MDAzRVxcdTAwM0N0aXRsZVxcdTAwM0VTdG9jaFNTOiBTdG9jaGFzdGljIFNpbWxhdGlvbiBTZXJ2aWNlXFx1MDAzQ1xcdTAwMkZ0aXRsZVxcdTAwM0VcXHUwMDNDbWV0YSBuYW1lPVxcXCJ2aWV3cG9ydFxcXCIgY29udGVudD1cXFwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMFxcXCJcXHUwMDNFXFx1MDAzQ21ldGEgbmFtZT1cXFwiZGVzY3JpcHRpb25cXFwiIGNvbnRlbnQ9XFxcIlxcXCJcXHUwMDNFXFx1MDAzQ21ldGEgbmFtZT1cXFwiYXV0aG9yXFxcIiBjb250ZW50PVxcXCJcXFwiXFx1MDAzRVxcdTAwM0NcXHUwMDJGaGVhZFxcdTAwM0VcXHUwMDNDYm9keVxcdTAwM0VcXHUwMDNDZGl2IGNsYXNzPVxcXCJjb250YWluZXIgY2FyZCBjYXJkLWJvZHlcXFwiIGlkPVxcXCJob21lLXdyYXBwZXJcXFwiXFx1MDAzRVxcdTAwM0NkaXYgY2xhc3M9XFxcImxvZ29cXFwiIGlkPVxcXCJzdG9jaHNzLWxvZ29cXFwiIGRhdGEtaG9vaz1cXFwic3RvY2hzcy1sb2dvXFxcIlxcdTAwM0VcXHUwMDNDaW1nIHNyYz1cXFwiXFx1MDAyRmh1YlxcdTAwMkZzdGF0aWNcXHUwMDJGc3RvY2hzcy1sb2dvLnBuZ1xcXCJcXHUwMDNFXFx1MDAzQ1xcdTAwMkZkaXZcXHUwMDNFXFx1MDAzQ2RpdiBjbGFzcz1cXFwiY2VudGVyZWRcXFwiXFx1MDAzRVxcdTAwM0NoMSBjbGFzcz1cXFwiZGlzcGxheS01XFxcIlxcdTAwM0VXZWxjb21lIHRvIHRoZSBTdG9jaGFzdGljIFNpbXVsYXRpb24gU2VydmljZSFcXHUwMDNDXFx1MDAyRmgxXFx1MDAzRVxcdTAwM0NwIGNsYXNzPVxcXCJob21lLXBcXFwiXFx1MDAzRVN0b2NoU1MgMi4wIGlzIGFuIGFjY2Vzc2libGUgcGxhdGZvcm0gZm9yIG1vZGVsaW5nIGJpb2NoZW1pY2FsIHN5c3RlbXMuXFx1MDAzQ1xcdTAwMkZwXFx1MDAzRVxcdTAwM0NcXHUwMDJGZGl2XFx1MDAzRVxcdTAwM0NkaXYgY2xhc3M9XFxcInJvdyBob21lLWhpZ2hsaWdodHNcXFwiXFx1MDAzRVxcdTAwM0NkaXYgY2xhc3M9XFxcImNvbC1tZC0yXFxcIlxcdTAwM0VcXHUwMDNDXFx1MDAyRmRpdlxcdTAwM0VcXHUwMDNDZGl2IGNsYXNzPVxcXCJjb2wtbWQtNVxcXCJcXHUwMDNFXFx1MDAzQ2g1XFx1MDAzRUZlYXR1cmVzXFx1MDAzQ1xcdTAwMkZoNVxcdTAwM0VcXHUwMDNDdWwgY2xhc3M9XFxcImhvbWUtbGlzdFxcXCJcXHUwMDNFXFx1MDAzQ2xpXFx1MDAzRURpc2NyZXRlIFN0b2NoYXN0aWMgTW9kZWxpbmdcXHUwMDNDXFx1MDAyRmxpXFx1MDAzRVxcdTAwM0NsaVxcdTAwM0VDb250aW51b3VzIE9ERSBNb2RlbGluZ1xcdTAwM0NcXHUwMDJGbGlcXHUwMDNFXFx1MDAzQ2xpXFx1MDAzRUNvbnZlcnQgQmV0d2VlbiBTdG9jaGFzdGljIGFuZCBPREUgTW9kZWxzXFx1MDAzQ1xcdTAwMkZsaVxcdTAwM0VcXHUwMDNDbGlcXHUwMDNFSW1wb3J0IFNCTUwgTW9kZWxzXFx1MDAzQ1xcdTAwMkZsaVxcdTAwM0VcXHUwMDNDbGlcXHUwMDNFUGFyYW1ldGVyIFN3ZWVwIFdvcmtmbG93c1xcdTAwM0NcXHUwMDJGbGlcXHUwMDNFXFx1MDAzQ1xcdTAwMkZ1bFxcdTAwM0VcXHUwMDNDXFx1MDAyRmRpdlxcdTAwM0VcXHUwMDNDZGl2IGNsYXNzPVxcXCJjb2wtbWQtNVxcXCJcXHUwMDNFXFx1MDAzQ2g1XFx1MDAzRUNvbWluZyBzb29uLi4uXFx1MDAzQ1xcdTAwMkZoNVxcdTAwM0VcXHUwMDNDdWwgY2xhc3M9XFxcImhvbWUtbGlzdFxcXCJcXHUwMDNFXFx1MDAzQ2xpXFx1MDAzRVNjaW9wZSBJbnRlZ3JhdGlvblxcdTAwM0NcXHUwMDJGbGlcXHUwMDNFXFx1MDAzQ2xpXFx1MDAzRVNwYXRpYWwgU2ltdWxhdGlvbnNcXHUwMDNDXFx1MDAyRmxpXFx1MDAzRVxcdTAwM0NsaVxcdTAwM0VCcmluZyBZb3VyIE93biBDbG91ZFxcdTAwM0NcXHUwMDJGbGlcXHUwMDNFXFx1MDAzQ1xcdTAwMkZ1bFxcdTAwM0VcXHUwMDNDXFx1MDAyRmRpdlxcdTAwM0VcXHUwMDNDXFx1MDAyRmRpdlxcdTAwM0VcXHUwMDNDZGl2IGNsYXNzPVxcXCJjZW50ZXJlZFxcXCJcXHUwMDNFXFx1MDAzQ2EgY2xhc3M9XFxcInRyeS1zdG9jaHNzLWJ0biBidG4gYnRuLXByaW1hcnkgYm94LXNoYWRvd1xcXCIgaHJlZj1cXFwiXFx1MDAyRmh1YlxcdTAwMkZzcGF3blxcXCIgcm9sZT1cXFwiYnV0dG9uXFxcIlxcdTAwM0VDbGljayBoZXJlIHRvIGxvZ2luXFx1MDAzQ1xcdTAwMkZhXFx1MDAzRVxcdTAwM0NcXHUwMDJGZGl2XFx1MDAzRVxcdTAwM0NcXHUwMDJGZGl2XFx1MDAzRVxcdTAwM0NkaXYgY2xhc3M9XFxcImNvbnRhaW5lciBjYXJkIGNhcmQtYm9keVxcXCIgaWQ9XFxcInJlZ2lzdHJhdGlvbi1ob21lXFxcIlxcdTAwM0VcXHUwMDNDZGl2IGNsYXNzPVxcXCJjZW50ZXJlZFxcXCJcXHUwMDNFXFx1MDAzQ3AgY2xhc3M9XFxcImhvbWUtcFxcXCJcXHUwMDNFU3RvY2hTUyBpcyBvcGVuLXNvdXJjZSBzb2Z0d2FyZS4gIFRvIG9idGFpbiBjb250aW51ZWQgZnVuZGluZyBmb3Igc3VzdGFpbmVkIGRldmVsb3BtZW50LCB3ZSBtdXN0IHNob3cgdGhhdCBTdG9jaFNTIGlzIG1ha2luZyBhbiBpbXBhY3QgaW4gdGhlIHNjaWVudGlmaWMgY29tbXVuaXR5LiAgRm9yIHRoaXMsIHdlIG5lZWQgdG8ga25vdyB3aG8gaXMgdXNpbmcgdGhlIHNvZnR3YXJlLCBhbmQgYSBiaXQgYWJvdXQgd2hhdCB0aGV5IGFyZSB1c2luZyBpdCBmb3IuICBQbGVhc2UgY29uc2lkZXIgcmVnaXN0ZXJpbmcgU3RvY2hTUyB0byBzaG93IHlvdXIgc3VwcG9ydC5cXHUwMDNDXFx1MDAyRnBcXHUwMDNFXFx1MDAzQ2RpdiBjbGFzcz1cXFwiY29sbGFwc2VcXFwiIGRhdGEtaG9vaz1cXFwicmVnaXN0cmF0aW9uLWxpbmtcXFwiXFx1MDAzRVxcdTAwM0NidXR0b24gY2xhc3M9XFxcImJ0biBidG4tcHJpbWFyeSBib3gtc2hhZG93XFxcIiBkYXRhLWhvb2s9XFxcInJlZ2lzdHJhdGlvbi1saW5rLWJ1dHRvblxcXCIgc3R5bGU9XFxcIm1hcmdpbjogMS41cmVtO1xcXCJcXHUwMDNFUmVnaXN0ZXIgU3RvY2hzc1xcdTAwM0NcXHUwMDJGYnV0dG9uXFx1MDAzRVxcdTAwM0NcXHUwMDJGZGl2XFx1MDAzRVxcdTAwM0NkaXYgY2xhc3M9XFxcImNvbGxhcHNlIHNob3dcXFwiIGRhdGEtaG9vaz1cXFwicmVnaXN0cmF0aW9uLWZvcm1cXFwiIGlkPVxcXCJyZWdpc3RyYXRpb24tZm9ybVxcXCJcXHUwMDNFXFx1MDAzQ2lmcmFtZSBzcmM9XFxcImh0dHBzOlxcdTAwMkZcXHUwMDJGZG9jcy5nb29nbGUuY29tXFx1MDAyRmZvcm1zXFx1MDAyRmRcXHUwMDJGMTJ0QUg0ZjhDSi0zRi1sSzQ0UTl1UUhGaW9fbUdvSzBvWTgyOXE1bEQ3aTRcXHUwMDJGdmlld2Zvcm0/ZW1iZWRkZWQ9dHJ1ZVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGhlaWdodD1cXFwiODAwXFxcIiBmcmFtZWJvcmRlcj1cXFwiMFxcXCJcXHUwMDNFXFx1MDAzQ1xcdTAwMkZpZnJhbWVcXHUwMDNFXFx1MDAzQ1xcdTAwMkZkaXZcXHUwMDNFXFx1MDAzQ1xcdTAwMkZkaXZcXHUwMDNFXFx1MDAzQ1xcdTAwMkZkaXZcXHUwMDNFXFx1MDAzQ1xcdTAwMkZib2R5XFx1MDAzRVxcdTAwM0NcXHUwMDJGaHRtbFxcdTAwM0VcIjs7cmV0dXJuIHB1Z19odG1sO307XG5tb2R1bGUuZXhwb3J0cyA9IHRlbXBsYXRlOyIsIm1vZHVsZS5leHBvcnRzID0ge1xuICBzcGVjaWVzRWRpdG9yOiB7XG4gICAgbmFtZTogXCJOYW1lcyBmb3Igc3BlY2llcywgcGFyYW1ldGVycywgcmVhY3Rpb25zLCBldmVudHMsIGFuZCBydWxlcyBtdXN0IGJlIHVuaXF1ZS5cIixcblxuICAgIGluaXRpYWxWYWx1ZTogXCJJbml0aWFsIHBvcHVsYXRpb24gb2YgYSBzcGVjaWVzLlwiLFxuXG4gICAgYW5ub3RhdGlvbjogXCJBbiBvcHRpb25hbCBub3RlIGFib3V0IHRoZSBzcGVjaWVzLlwiLFxuXG4gICAgcmVtb3ZlOiBcIkEgc3BlY2llcyBtYXkgb25seSBiZSByZW1vdmVkIGlmIGl0IGlzIG5vdCBhIHBhcnQgb2YgYW55IHJlYWN0aW9uLCBldmVudCBhc3NpZ25tZW50LCBvciBydWxlLlwiLFxuICAgIFxuICAgIHNwZWNpZXNNb2RlOiBcIkNvbmNlbnRyYXRpb24gLSBTcGVjaWVzIHdpbGwgb25seSBiZSByZXByZXNlbnRlZCB1c2luZyBjb250aW51b3VzIChmbG9hdGluZyBwb2ludCkgdmFsdWVzLjxicj5Qb3B1bGF0aW9uIC0gU3BlY2llcyB3aWxsIG9ubHkgYmUgcmVwcmVzZW50ZWQgXCIrXG4gICAgICAgIFwidXNpbmcgZGlzY3JldGUgKGludGVnZXIgY291bnQpIHZhbHVlcy48YnI+SHlicmlkIENvbmNlbnRyYXRpb24vUG9wdWxhdGlvbiAtIEFsbG93cyBhIHNwZWNpZXMgdG8gYmUgcmVwcmVzZW50ZWQgdXNpbmcgY29udGludW91cyBhbmQvb3IgZGlzY3JldGUgdmFsdWVzLlwiLFxuXG4gICAgbW9kZTogXCJDb25jZW50cmF0aW9uIC0gU3BlY2llcyB3aWxsIG9ubHkgYmUgcmVwcmVzZW50ZWQgdXNpbmcgY29udGludW91cyAoZmxvYXRpbmcgcG9pbnQpIHZhbHVlcy48YnI+UG9wdWxhdGlvbiAtIFNwZWNpZXMgd2lsbCBvbmx5IGJlIHJlcHJlc2VudGVkIFwiK1xuICAgICAgICBcInVzaW5nIGRpc2NyZXRlIChpbnRlZ2VyIGNvdW50KSB2YWx1ZXMuPGJyPkh5YnJpZCBDb25jZW50cmF0aW9uL1BvcHVsYXRpb24gLSBBbGxvd3MgYSBzcGVjaWVzIHRvIGJlIHJlcHJlc2VudGVkIHVzaW5nIGNvbnRpbnVvdXMgYW5kL29yIGRpc2NyZXRlIHZhbHVlcy5cIixcblxuICAgIHN3aXRjaFZhbHVlOiBcIlN3aXRjaGluZyBUb2xlcmFuY2UgLSBUb2xlcmFuY2UgbGV2ZWwgZm9yIGNvbnNpZGVyaW5nIGEgZHluYW1pYyBzcGVjaWVzIGRldGVybWluaXN0aWNhbGx5LCB2YWx1ZSBpcyBjb21wYXJlZCB0byBhbiBlc3RpbWF0ZWQgc2QvbWVhbiBwb3B1bGF0aW9uIFwiK1xuICAgICAgICBcIm9mIGEgc3BlY2llcyBhZnRlciBhIGdpdmVuIHRpbWUgc3RlcC4gVGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgaWYgYSAnTWluaW11bSBWYWx1ZScgbm90IHByb3ZpZGVkLjxicj5NaW5pbXVtIFZhbHVlIEZvciBTd2l0Y2hpbmcgLSBNaW5pbXVtIHBvcHVsYXRpb24gdmFsdWUgXCIrXG4gICAgICAgIFwiYXQgd2hpY2ggc3BlY2llcyB3aWxsIGJlIHJlcHJlc2VudGVkIGFzIENvbmNlbnRyYXRpb24uXCJcbiAgfSxcbiAgcGFyYW1ldGVyc0VkaXRvcjoge1xuICAgIG5hbWU6IFwiTmFtZXMgZm9yIHNwZWNpZXMsIHBhcmFtZXRlcnMsIHJlYWN0aW9ucywgZXZlbnRzLCBhbmQgcnVsZXMgbXVzdCBiZSB1bmlxdWUuXCIsXG4gICAgXG4gICAgZXhwcmVzc2lvbjogXCJBIHBhcmFtZXRlciB2YWx1ZSBvciBhIG1hdGhlbWF0aWNhbCBleHByZXNzaW9uIGNhbGN1bGF0aW5nIHRoZSBwYXJhbWV0ZXIgdmFsdWUuXCIsXG4gICAgXG4gICAgYW5ub3RhdGlvbjogXCJBbiBvcHRpb25hbCBub3RlIGFib3V0IGEgcGFyYW1ldGVyLlwiLFxuICAgIFxuICAgIHJlbW92ZTogXCJBIHBhcmFtZXRlciBtYXkgb25seSBiZSByZW1vdmVkIGlmIGl0IGlzIG5vdCB1c2VkIGluIGFueSByZWFjdGlvbiwgZXZlbnQgYXNzaWdubWVudCwgb3IgcnVsZS5cIlxuICB9LFxuICByZWFjdGlvbnNFZGl0b3I6IHtcbiAgICBuYW1lOiBcIk5hbWVzIGZvciBzcGVjaWVzLCBwYXJhbWV0ZXJzLCByZWFjdGlvbnMsIGV2ZW50cywgYW5kIHJ1bGVzIG11c3QgYmUgdW5pcXVlLlwiLFxuICAgIFxuICAgIGFubm90YXRpb246IFwiQW4gb3B0aW9uYWwgbm90ZSBhYm91dCB0aGUgcmVhY3Rpb24uXCIsXG4gICAgXG4gICAgcmF0ZTogXCJUaGUgcmF0ZSBvZiB0aGUgbWFzcy1hY3Rpb24gcmVhY3Rpb24uXCIsXG4gICAgXG4gICAgcHJvcGVuc2l0eTogXCJUaGUgY3VzdG9tIHByb3BlbnNpdHkgZXhwcmVzc2lvbiBmb3IgdGhlIHJlYWN0aW9uLlwiLFxuICAgIFxuICAgIHJlYWN0YW50OiBcIlRoZSByZWFjdGFudHMgdGhhdCBhcmUgY29uc3VtZWQgaW4gdGhlIHJlYWN0aW9uLCB3aXRoIHN0b2ljaGlvbWV0cnkuXCIsXG4gICAgXG4gICAgcHJvZHVjdDogXCJUaGUgc3BlY2llcyB0aGF0IGFyZSBjcmVhdGVkIGJ5IHRoZSByZWFjdGlvbiBldmVudCwgd2l0aCBzdG9pY2hpb21ldHJ5LlwiLFxuICB9LFxuICBldmVudHNFZGl0b3I6IHtcbiAgICBuYW1lOiBcIk5hbWVzIGZvciBzcGVjaWVzLCBwYXJhbWV0ZXJzLCByZWFjdGlvbnMsIGV2ZW50cywgYW5kIHJ1bGVzIG11c3QgYmUgdW5pcXVlLlwiLFxuICAgIFxuICAgIGFubm90YXRpb246IFwiQW4gb3B0aW9uYWwgbm90ZSBhYm91dCBhbiBldmVudC5cIixcbiAgICBcbiAgICB0cmlnZ2VyRXhwcmVzc2lvbjogXCJUaGUgdHJpZ2dlciBleHByZXNzaW9uIGNhbiBiZSBhbnkgbWF0aGVtYXRpY2FsIGV4cHJlc3Npb24gd2hpY2ggZXZhbHVhdGVzIHRvIGEgYm9vbGVhbiB2YWx1ZSBpbiBhIHB5dGhvbiBlbnZpcm9ubWVudCAoaS5lLiB0PT01MCkuICBUaGlzIFwiK1xuICAgICAgICBcImV4cHJlc3Npb24gaXMgZXZhbHVhYmxlIHdpdGhpbiB0aGUgbW9kZWwgbmFtZXNwYWNlLCBhbmQgYW55IHZhcmlhYmxlIChTcGVjaWVzLCBQYXJhbWV0ZXJzLCBldGMuKSBjYW4gYmUgcmVmZXJlbmNlZCBpbiB0aGUgZXhwcmVzc2lvbi4gIFRpbWUgaXMgcmVwcmVzZW50ZWQgXCIrXG4gICAgICAgIFwid2l0aCB0aGUgbG93ZXIgY2FzZSB2YXJpYWJsZSAndCcuIEFuIGV2ZW50IHdpbGwgYmVnaW4gZXhlY3V0aW9uIG9mIGFzc2lnbm1lbnRzIChvciBkZWxheSwgaWYgYW55KSBvbmNlIHRoaXMgZXhwcmVzc2lvbiBjaGFuZ2VzIGZyb20gJ0ZhbHNlJyB0byAnVHJ1ZS4nXCIsXG4gICAgXG4gICAgZGVsYXk6IFwiY29udGFpbnMgbWF0aCBleHByZXNzaW9uIGV2YWx1YWJsZSB3aXRoaW4gbW9kZWwgbmFtZXNwYWNlLiBUaGlzIGV4cHJlc3Npb24gZGVzaWduYXRlcyBhIGRlbGF5IGJldHdlZW4gdGhlIHRyaWdnZXIgb2YgYW4gZXZlbnQgYW5kIHRoZSBleGVjdXRpb24gb2YgaXRzIGFzc2lnbm1lbnRzLlwiLFxuICAgIFxuICAgIHByaW9yaXR5OiBcIlR5cGljYWxseSBhIG51bWJlcjogMSwgMiwgZXRjLiB0aGF0IGRlc2lnbmF0ZXMgdGhlIGV4ZWN1dGlvbiBvcmRlciBmb3IgZXZlbnRzIHdoaWNoIGFyZSBleGVjdXRlZCBzaW11bHRhbmVvdXNseS4gIENhbiBiZSBhIG1hdGggZXhwcmVzc2lvbiBldmFsdWFibGUgXCIrXG4gICAgICAgIFwid2l0aGluIHRoZSBtb2RlbCBuYW1lc3BhY2UuXCIsXG4gICAgXG4gICAgaW5pdGlhbFZhbHVlOiBcIklmIHRydWUsIHRoZSB0cmlnZ2VyIGV4cHJlc3Npb24gd2lsbCBiZSBldmFsdWF0ZWQgYXMgJ1RydWUnIGF0IHN0YXJ0IG9mIHNpbXVsYXRpb24uICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIHNvbWUgbW9kZWxzLCBzaW5jZSBhbiBldmVudCBpcyBvbmx5IFwiK1xuICAgICAgICBcImV4ZWN1dGVkIHdoZW4gdGhlIHRyaWdnZXIgZXhwcmVzc2lvbiBzdGF0ZSBjaGFuZ2VzIGZyb20gJ0ZhbHNlJyB0byAnVHJ1ZScuXCIsXG4gICAgXG4gICAgcGVyc2lzdGVudDogXCJJZiBwZXJzaXN0ZW50LCBhbiBldmVudCBhc3NpZ25tZW50IHdpbGwgYWx3YXlzIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGV2ZW50J3MgdHJpZ2dlciBleHByZXNzaW9uIGV2YWx1YXRlcyB0byB0cnVlLiAgSWYgbm90IHBlcnNpc3RlbnQsIHRoZSBldmVudCBcIitcbiAgICAgICAgXCJhc3NpZ25tZW50IHdpbGwgbm90IGJlIGV4ZWN1dGVkIGlmIHRoZSB0cmlnZ2VyIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGZhbHNlIGJldHdlZW4gdGhlIHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZCBhbmQgdGhlIHRpbWUgdGhlIGFzc2lnbm1lbnQgaXMgZXhlY3V0ZWQuXCIsXG4gICAgXG4gICAgdXNlVmFsdWVzRnJvbVRyaWdnZXJUaW1lOiBcIklmIHNldCB0byB0cnVlLCBhc3NpZ25tZW50IGV4ZWN1dGlvbiB3aWxsIGJlIGJhc2VkIG9mZiBvZiB0aGUgbW9kZWwgc3RhdGUgYXQgdHJpZ2dlciB0aW1lLiBJZiBmYWxzZSAoZGVmYXVsdCksIHRoZSBhc3NpZ25tZW50IHdpbGwgYmUgXCIrXG4gICAgICAgIFwibWFkZSB1c2luZyB2YWx1ZXMgYXQgYXNzaWdubWVudCB0aW1lLlwiLFxuICAgIFxuICAgIGFzc2lnbm1lbnRzOiBcIkFuIEV2ZW50IEFzc2lnbm1lbnQgZGVzY3JpYmVzIGEgY2hhbmdlIHRvIGJlIHBlcmZvcm1lZCB0byB0aGUgY3VycmVudCBtb2RlbCBzaW11bGF0aW9uLiAgVGhpcyBhc3NpZ25tZW50IGNhbiBlaXRoZXIgYmUgZmlyZWQgYXQgdGhlIHRpbWUgaXRzIGFzc29jaWF0ZWQgXCIrXG4gICAgICAgIFwidHJpZ2dlciBjaGFuZ2VzIGZyb20gZmFsc2UgdG8gdHJ1ZSwgb3IgYWZ0ZXIgYSBzcGVjaWZpZWQgZGVsYXksIGRlcGVuZGluZyBvbiB0aGUgRXZlbnQgY29uZmlndXJhdGlvbi4gQW4gZXZlbnQgbWF5IGNvbnRhaW4gb25lIG9yIG1vcmUgYXNzaWdubWVudHMuXCIsXG4gICAgXG4gICAgdmFyaWFibGU6IFwiVGhlIHRhcmdldCBTcGVjaWVzIG9yIFBhcmFtZXRlciB0byBiZSBtb2RpZmllZCBieSB0aGUgZXZlbnQuXCIsXG4gICAgXG4gICAgYXNzaWdubWVudEV4cHJlc3Npb246IFwiQ2FuIGJlIGFueSBtYXRoZW1hdGljYWwgc3RhdGVtZW50IHdoaWNoIHJlc29sdmVzIHRvIGFuIGludGVnZXIgb3IgZmxvYXQgdmFsdWUuICBUaGlzIHZhbHVlIHdpbGwgYmUgYXNzaWduZWQgdG8gdGhlIGFzc2lnbm1lbnQncyB0YXJnZXQgdmFyaWFibGUgXCIrXG4gICAgICAgIFwidXBvbiBldmVudCBleGVjdXRpb24uXCJcbiAgfSxcbiAgcnVsZXNFZGl0b3I6IHtcbiAgICBuYW1lOiBcIk5hbWVzIGZvciBzcGVjaWVzLCBwYXJhbWV0ZXJzLCByZWFjdGlvbnMsIGV2ZW50cywgYW5kIHJ1bGVzIG11c3QgYmUgdW5pcXVlLlwiLFxuICAgIFxuICAgIHR5cGU6IFwiQXNzaWdubWVudCBSdWxlczogQW4gYXNzaWdubWVudCBydWxlIGRlc2NyaWJlcyBhIGNoYW5nZSB0byBhIFNwZWNpZXMgb3IgUGFyYW1ldGVyIGFzIGEgZnVuY3Rpb24gd2hvc2UgbGVmdC1oYW5kIHNpZGUgaXMgYSBzY2FsYXIgKGkuZS4geCA9IGYoViksIHdoZXJlIFYgaXMgYSBcIitcbiAgICAgICAgXCJ2ZWN0b3Igb2Ygc3ltYm9scywgbm90IGluY2x1ZGluZyB4KS48YnI+ICBSYXRlIFJ1bGVzOiBBIHJhdGUgcnVsZSBkZXNjcmliZXMgYSBjaGFuZ2UgdG8gYSBTcGVjaWVzIG9yIFBhcmFtZXRlciBhcyBhIGZ1bmN0aW9uIHdob3NlIGxlZnQtaGFuZCBzaWRlIGlzIGEgcmF0ZSBvZiBcIitcbiAgICAgICAgXCJjaGFuZ2UgKGkuZS4gZHgvZHQgPSBmKFcpLCB3aGVyZSBXIGlzIGEgdmVjdG9yIG9mIHN5bWJvbHMgd2hpY2ggbWF5IGluY2x1ZGUgeCkuXCIsXG4gICAgXG4gICAgdmFyaWFibGU6IFwiVGFyZ2V0IHZhcmlhYmxlIHRvIGJlIG1vZGlmaWVkIGJ5IHRoZSBSdWxlJ3MgZm9ybXVsYS5cIixcbiAgICBcbiAgICBleHByZXNzaW9uOiBcIkEgUHl0aG9uIGV2YWx1YWJsZSBtYXRoZW1hdGljYWwgZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiBhIHJ1bGUgZnVuY3Rpb24uPGJyPiAgRm9yIEFzc2lnbm1lbnQgUnVsZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgcmlnaHQgaGFuZCBcIitcbiAgICAgICAgXCJzaWRlIG9mIGEgc2NhbGFyIGVxdWF0aW9uLjxicj4gIEZvciBSYXRlIFJ1bGVzLCB0aGlzIHJlcHJlc2VudHMgdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiBhIHJhdGUtb2YtY2hhbmdlIGVxdWF0aW9uLlwiLFxuICAgIFxuICAgIGFubm90YXRpb246IFwiQW4gb3B0aW9uYWwgbm90ZSBhYm91dCBhIHJ1bGUuXCJcbiAgfSxcbiAgc2JtbENvbXBvbmVudHNFZGl0b3I6IHtcbiAgICBhbm5vdGF0aW9uOiBcIkFuIG9wdGlvbmFsIG5vdGUgYWJvdXQgdGhlIFNCTUwgQ29tcG9uZW50LlwiXG4gIH0sXG4gIG1vZGVsU2V0dGluZ3M6IHtcbiAgICBwcmV2aWV3U2V0dGluZ3M6IFwiUHJldmlldyBTZXR0aW5ncyBhcmUgYXBwbGllZCB0byB0aGUgbW9kZWwgYW5kIGFyZSB1c2VkIGZvciB0aGUgbW9kZWwgcHJldmlldyBhbmQgYWxsIHdvcmtmbG93cy5cIixcbiAgICBcbiAgICBwcmV2aWV3VGltZTogXCJFbmQgdGltZSBvZiBzaW11bGF0aW9uLlwiLFxuICAgIFxuICAgIHRpbWVVbml0czogXCJTYXZlIHBvaW50IGluY3JlbWVudCBmb3IgcmVjb3JkaW5nIGRhdGEuXCIsXG4gICAgXG4gICAgdm9sdW1lOiBcIlRoZSB2b2x1bWUgb2YgdGhlIHN5c3RlbSBtYXR0ZXJzIHdoZW4gY29udmVydGluZyB0byBmcm9tIHBvcHVsYXRpb24gdG8gY29uY2VudHJhdGlvbiBmb3JtLiBUaGlzIHdpbGwgYWxzbyBzZXQgYSBwYXJhbWV0ZXIgJ3ZvbCcgZm9yIHVzZSBpbiBjdXN0b20gKGkuZS4gXCIrXG4gICAgICAgIFwibm9uLW1hc3MtYWN0aW9uKSBwcm9wZW5zaXR5IGZ1bmN0aW9ucy5cIlxuICB9LFxuICBzaW11bGF0aW9uU2V0dGluZ3M6IHtcbiAgICBydG9sOiBcIlJlbGF0aXZlIHRvbGVyYW5jZSBmb3Igb2RlIHNvbHV0aW9ucywgY29udHJvbHMgYSByZWxhdGl2ZSBhY2N1cmFjeSAobnVtYmVyIG9mIGNvcnJlY3QgZGlnaXRzKS4gIFRoZSBzb2x2ZXIga2VlcHMgdGhlIGxvY2FsIGVycm9yIGVzdGltYXRlcyBsZXNzIHRoYW4gYXRvbCArIFwiK1xuICAgICAgICBcInJ0b2wgKiBhYnMoeSkuICBWYWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLjAuXCIsXG5cbiAgICBhdG9sOiBcIkFic29sdXRlIHRvbGVyYW5jZSBmb3Igb2RlIHNvbHV0aW9ucywgaWYgYSBjb21wb25lbnQgb2YgeSBpcyBhcHByb3hpbWF0ZWx5IGJlbG93IGF0b2wsIHRoZSBlcnJvciBvbmx5IG5lZWRzIHRvIGZhbGwgd2l0aGluIHRoZSBzYW1lIGF0b2wgdGhyZXNob2xkLCBhbmQgdGhlIFwiK1xuICAgICAgICBcIm51bWJlciBvZiBjb3JyZWN0IGRpZ2l0cyBpcyBub3QgZ3VhcmFudGVlZC4gIFRoZSBzb2x2ZXIga2VlcHMgdGhlIGxvY2FsIGVycm9yIGVzdGltYXRlcyBsZXNzIHRoYW4gYXRvbCArIHJ0b2wgKiBhYnMoeSkuICBWYWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLjAuXCIsXG5cbiAgICB0dG9sOiBcIkEgcmVsYXRpdmUgZXJyb3IgdG9sZXJhbmNlIHZhbHVlIGdvdmVybmluZyB0YXUtbGVhcGluZyB0YXUgc2VsZWN0aW9ucy4gIEJhc2VkIG9uIENhbywgWS47IEdpbGxlc3BpZSwgRC4gVC47IFBldHpvbGQsIEwuIFIuICgyMDA2KS4gJ0VmZmljaWVudCBzdGVwIHNpemUgXCIrXG4gICAgICAgIFwic2VsZWN0aW9uIGZvciB0aGUgdGF1LWxlYXBpbmcgc2ltdWxhdGlvbiBtZXRob2QnIChQREYpLiBUaGUgSm91cm5hbCBvZiBDaGVtaWNhbCBQaHlzaWNzLiAxMjQgKDQpOiAwNDQxMDkuIEJpYmNvZGU6MjAwNkpDaFBoLjEyNGQ0MTA5Qy4gZG9pOjEwLjEwNjMvMS4yMTU5NDY4LiBcIitcbiAgICAgICAgXCJQTUlEIDE2NDYwMTUxICBWYWx1ZSBtdXN0IGJlIGJldHdlZW4gMC4wIGFuZCAxLjAuXCIsXG5cbiAgICBzZWVkOiBcIlRoZSBzZWVkIGZvciB0aGUgc2ltdWxhdGlvbi4gIFNldCB0byAtMSBmb3IgYSByYW5kb20gc2VlZC5cIixcblxuICAgIHJlYWxpemF0aW9uczogXCJUaGUgbnVtYmVyIG9mIHNpbXVsYXRpb24gcmVhbGl6YXRpb25zIHRvIGJlIGV4ZWN1dGVkLiBBIHRpbWUtc2VyaWVzIHRyYWplY3RvcnkgZm9yIGVhY2ggcmVhbGl6YXRpb24gd2lsbCBiZSByZXR1cm5lZCB1cG9uIGNvbXBsZXRpb24gb2YgYWxsIFwiK1xuICAgICAgICBcInJlYWxpemF0aW9ucy5cIixcblxuICAgIGFsZ29yaXRobTpcIlRoZSBzb2x2ZXIgYnkgd2hpY2ggdG8gc2ltdWxhdGUgdGhlIG1vZGVsLlwiLFxuXG4gICAgb2RlOiBcIlRoaXMgYWxnb3JpdGhtIHByb2R1Y2VzIGEgJ2NvbnRpbnVvdXMtZGV0ZXJtaW5pc3RpYycgc29sdXRpb24gaW4gdGhlIHN0eWxlIG9mIE9yZGluYXJ5IERpZmZlcmVudGlhbCBFcXVhdGlvbnMgKE9ERSkuXCIsXG5cbiAgICBzc2E6IFwiVGhpcyBhbGdvcml0aG0gcHJvZHVjZXMgYSAnZGlzY3JldGUtc3RvY2hhc3RpYycgc29sdXRpb24gdXNpbmcgdGhlIFN0b2NoYXN0aWMgU2ltdWxhdGlvbiBBbGdvcml0aG0gKFNTQSwgYWxzbyBrbm93IGFzIHRoZSBHaWxsZXNwaWUgYWxnb3JpdGhtKS5cIixcblxuICAgIHRhdUxlYXBpbmc6IFwiVGhpcyBhbGdvcml0aG0gcHJvZHVjZXMgYSAnZGlzY3JldGUtc3RvY2hhc3RpYycgc29sdXRpb24gdXNpbmcgYSB2YXJpYW50IG9mIHRoZSBTU0EgdGhhdCBpcyBtb3JlIGVmZmljaWVudCwgYnV0IGxlc3MgYWNjdXJhdGUuXCIsXG5cbiAgICBoeWJyaWQ6IFwiVGhpcyBoeWJyaWQgZGV0ZXJtaW5pc3RpYy1zdG9jaGFzdGljIHdpbGwgcHJvZHVjZSBhIHNvbHV0aW9uIHRoYXQgaXMgJ2Rpc2NyZXRlLXN0b2NoYXN0aWMnIGZvciBzbWFsbCBwb3B1bGF0aW9uIHNpemVzIGFuZCAnY29udGludW91cy1kZXRlcm1pbmlzdGljJyBcIitcbiAgICAgICAgXCJmb3IgbGFyZ2UgcG9wdWxhdGlvbiBzaXplcy5cIixcblxuICAgIGNob29zZUZvck1lOiBcIkh5YnJpZCB3aWxsIGJlIHNlbGVjdGVkIGJhc2VkIG9uIEV2ZW50LCBSdWxlcywgYW5kIG90aGVyIFNCTUwgbW9kZWwgY29tcG9uZW50cyBvciBpZiB0aGUgbW9kZWwgaXMgcmVwcmVzZW50ZWQgYXMgQ29uY2VudHJhdGlvbiBvciBIeWJyaWQgXCIrXG4gICAgICAgIFwiQ29uY2VudHJhdGlvbi9Qb3B1bGF0aW9uLiAgSWYgdGhlIG1vZGVsIGlzIHJlcHJlc2VudGVkIGFzIHBvcHVsYXRpb24sIHRoZSBTU0Egd2lsbCBiZSBzZWxlY3RlZC4gIFRoaXMgY2FuIGJlIG1vZGlmaWVkIHRvIGEgVGF1LUxlYXBpbmcgYWxnb3JpdGhtIGJ5IFwiK1xuICAgICAgICBcImNoYW5naW5nIHRoZSBhdS10b2xlcmFuY2UgdmFsdWUgZnJvbSB0aGUgZGVmYXVsdCBvZiAwLjAzLlwiXG4gIH0sXG4gIHBhcmFtZXRlclN3ZWVwU2V0dGluZ3M6IHtcbiAgICBzd2VlcFR5cGU6IFwiVGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIHRvIHN3ZWVwIHRocm91Z2guXCIsXG5cbiAgICBzcGVjaWVzOiBcIlRoZSBpbml0aWFsIHNwZWNpZXMgdG8gdmlldyBzd2VlcCBkYXRhIGZvci5cIixcblxuICAgIHZhcmlhYmxlOiBcIlRoZSBwYXJhbWV0ZXIocykgdG8gc3dlZXAgdGhyb3VnaC5cIixcbiAgICBcbiAgICB2YWx1ZTogXCJUaGUgY3VycmVudCB2YWx1ZSBmb3IgdGhlIHBhcmFtZXRlciB5b3Ugd2l0aCB0byBzd2VlcCB0aHJvdWdoLlwiLFxuICAgIFxuICAgIG1pbjogXCJUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgc3dlZXAgcmFuZ2UuICBEZWZhdWx0cyB0byBoYWxmIG9mIHRoZSBjdXJyZW50IHZhbHVlLlwiLFxuICAgIFxuICAgIG1heDogXCJUaGUgZmluYWwgdmFsdWUgb2YgdGhlIHN3ZWVwIHJhbmdlLiAgRGVmYXVsdHMgdG8gMS41IHRpbWVzIHRoZSBjdXJyZW50IHZhbHVlLlwiLFxuICAgIFxuICAgIHN0ZXBzOiBcIlRoZSBudW1iZXIgb2Ygc3RlcHMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHN3ZWVwIHZhbHVlcyBhY3Jvc3MgdGhlIHN3ZWVwIHJhbmdlLlwiXG4gIH0sXG4gIHBhcmFtZXRlclN3ZWVwUmVzdWx0czoge1xuICAgIHNwZWNpZXM6IFwiVGhlIHNwZWNpZXMgdG8gdmlldyBzd2VlcCBkYXRhIGZvclwiLFxuXG4gICAgbWFwcGVyOiBcIlRoZSAnZmVhdHVyZSBleHRyYWN0b3InIHdoaWNoIGNhbGN1bGF0ZXMgYSBzaW5nbGUgdmFsdWUgZnJvbSB0aGUgc3BlY2llcyBwb3B1bGF0aW9uL2NvbmNlbnRyYXRpb24gZGF0YSBvZiBlYWNoIHNpbXVsYXRlZCB0cmFqZWN0b3J5LlwiLFxuICAgIFxuICAgIHJlZHVjZXI6IFwiVGhlIHN0YXRpc3RpY2FsIGZ1bmN0aW9uIGFwcGxpZWQgdG8gdGhlIGVuc2VtYmxlIG9mIHZhbHVlcyBleHRyYWN0ZWQgYnkgdGhlICdmZWF0dXJlIGV4dHJhY3RvcicgZnJvbSBlYWNoIHNpbXVsYXRpb24gdHJhamVjdG9yeS5cIlxuICB9LFxuICB3b3JrZmxvd1NlbGVjdGlvbjoge1xuICAgIGVuc2VtYmxlU2ltdWxhdGlvbjogXCJQcm9kdWNlIGEgdGltZS1zZXJpZXMgcmVzdWx0IGZvciBvbmUgb3IgbW9yZSBzaW11bGF0aW9uKHMpIG9mIHRoZSBtb2RlbC5cIixcblxuICAgIHBhcmFtZXRlclN3ZWVwOiBcIlByb2R1Y2VkIGFuZCBjb21wYXJlIHJlc3VsdHMgZnJvbSBtb2RlbCBzaW11bGF0aW9ucyBieSB2YXJ5aW5nIHBhcmFtZXRlcnMgb3ZlciBhIHJhbmdlLlwiXG4gIH1cbn0iLCJ2YXIgQW1wZXJzYW5kSW5wdXRWaWV3ID0gcmVxdWlyZSgnYW1wZXJzYW5kLWlucHV0LXZpZXcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBBbXBlcnNhbmRJbnB1dFZpZXcuZXh0ZW5kKHtcbiAgcHJvcHM6IHtcbiAgICBuYW1lOiAnc3RyaW5nJyxcbiAgICBsYWJlbDogJ3N0cmluZycsXG4gICAgbW9kZWxLZXk6ICdzdHJpbmcnLFxuICAgIHZhbHVlVHlwZTogJ3N0cmluZycsXG4gIH0sXG4gIGV2ZW50czoge1xuICAgICdjaGFuZ2UgaW5wdXQnIDogJ2NoYW5nZUlucHV0SGFuZGxlcicsXG4gIH0sXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uIChhdHRycywgb3B0aW9ucykge1xuICAgIEFtcGVyc2FuZElucHV0Vmlldy5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uICgpIHtcbiAgICBpZih0aGlzLmxhYmVsKVxuICAgICAgdGhpcy50ZW1wbGF0ZSA9IFtcbiAgICAgICAgJzxsYWJlbD4nLFxuICAgICAgICAgICAgJzxzcGFuIGRhdGEtaG9vaz1cImxhYmVsXCI+PC9zcGFuPicsXG4gICAgICAgICAgICAnPGlucHV0IGNsYXNzPVwiZm9ybS1pbnB1dCBsYWJlbGVkXCI+JyxcbiAgICAgICAgICAgICc8ZGl2IGRhdGEtaG9vaz1cIm1lc3NhZ2UtY29udGFpbmVyXCIgY2xhc3M9XCJtZXNzYWdlIG1lc3NhZ2UtYmVsb3cgbWVzc2FnZS1lcnJvclwiPicsXG4gICAgICAgICAgICAgICAgJzxwIGRhdGEtaG9vaz1cIm1lc3NhZ2UtdGV4dFwiPjwvcD4nLFxuICAgICAgICAgICAgJzwvZGl2PicsXG4gICAgICAgICc8L2xhYmVsPidcbiAgICAgIF0uam9pbignJylcbiAgICBBbXBlcnNhbmRJbnB1dFZpZXcucHJvdG90eXBlLnJlbmRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9LFxuICBjaGFuZ2VJbnB1dEhhbmRsZXI6IGZ1bmN0aW9uIChlKSB7XG4gICAgaWYodGhpcy5tb2RlbEtleSl7XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlVHlwZSA9PT0gJ251bWJlcicgPyBOdW1iZXIoZS50YXJnZXQudmFsdWUpIDogZS50YXJnZXQudmFsdWU7XG4gICAgICB0aGlzLnBhcmVudC5tb2RlbFt0aGlzLm1vZGVsS2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfSxcbn0pOyIsInZhciBfID0gcmVxdWlyZSgndW5kZXJzY29yZScpO1xudmFyICQgPSByZXF1aXJlKCdqcXVlcnknKTtcbi8vdmFyIHNldEZhdmljb24gPSByZXF1aXJlKCdmYXZpY29uLXNldHRlcicpO1xudmFyIGFwcCA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1hcHAnKTtcbnZhciBWaWV3ID0gcmVxdWlyZSgnYW1wZXJzYW5kLXZpZXcnKTtcbnZhciBWaWV3U3dpdGNoZXIgPSByZXF1aXJlKCdhbXBlcnNhbmQtdmlldy1zd2l0Y2hlcicpO1xudmFyIGxvY2FsTGlua3MgPSByZXF1aXJlKCdsb2NhbC1saW5rcycpO1xudmFyIGRvbWlmeSA9IHJlcXVpcmUoJ2RvbWlmeScpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cbnZhciBoZWFkVGVtcGxhdGUgPSByZXF1aXJlKCchcHVnLWxvYWRlciEuLi90ZW1wbGF0ZXMvaGVhZC5wdWcnKTtcbnZhciBib2R5VGVtcGxhdGUgPSByZXF1aXJlKCchcHVnLWxvYWRlciEuLi90ZW1wbGF0ZXMvYm9keS5wdWcnKTtcblxubGV0IG9wZXJhdGlvbkluZm9Nb2RhbEh0bWwgPSAoaW5mb0tleSkgPT4ge1xuICBsZXQgZmlsZUJyb3dzZXJJbmZvID0gYFxuICAgIDxwPkluIFN0b2NoU1Mgd2UgdXNlIGN1c3RvbSBmaWxlIGV4dGVuc2lvbnMgZm9yIGEgbnVtYmVyIG9mIGZpbGVzIHdlIHdvcmsgd2l0aC4gIEhlcmUgaXMgYSBsaXN0IG9mIG91ciBleHRlbnRpb25zIHdpdGggdGhlIGZpbGVzIHRoZXkgYXJlIGFzc29jaWF0ZWQgd2l0aDo8L3A+XG4gICAgPHRhYmxlIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDJlbTtcIj5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRkIHdpZHRoPTIwMD4gU3RvY2hTUyBNb2RlbCA8L3RkPlxuICAgICAgICA8dGQ+IC5tZGwgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHI+XG4gICAgICAgIDx0ZCB3aWR0aD0yMDA+IFN0b2NoU1MgU3BhdGlhbCBNb2RlbCA8L3RkPlxuICAgICAgICA8dGQ+IC5zbWRsIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgICAgPHRyPlxuICAgICAgICA8dGQgd2lkdGg9MjAwPiBTQk1MIE1vZGVsIDwvdGQ+XG4gICAgICAgIDx0ZD4gLnNibWwgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHI+XG4gICAgICAgIDx0ZCB3aWR0aD0yMDA+IFdvcmtmbG93cyA8L3RkPlxuICAgICAgICA8dGQ+IC53a2ZsIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvdGFibGU+XG4gICAgPGJyPlxuICAgIDxwPk90aGVyIHVzZWZ1bCBmaWxlIGV4dGVuc2lvbnMgaW5jbHVkZSB0aGUgZm9sbG93aW5nOjwvcD5cbiAgICA8dGFibGUgc3R5bGU9XCJtYXJnaW4tbGVmdDogMmVtO1wiPlxuICAgICAgPHRyPlxuICAgICAgICA8dGQgd2lkdGg9MjAwPiBKdXB5dGVyIE5vdGVib29rIDwvdGQ+XG4gICAgICAgIDx0ZD4gLmlweW5iIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvdGFibGU+XG4gIGA7XG4gIGxldCBtb2RlbEluZm8gPSBgXG4gICAgTW9kZWwgSW5mb3JtYXRpb25cbiAgYDtcbiAgbGV0IHdvcmtmbG93SW5mbyA9IGBcbiAgICBXb3JrZmxvdyBJbmZvcm1hdGlvblxuICBgO1xuXG4gIGxldCBpbmZvTGlzdCA9IHtcIkZpbGUgQnJvd3NlclwiOmZpbGVCcm93c2VySW5mbywgXCJNb2RlbHNcIjptb2RlbEluZm8sIFwiV29ya2Zsb3dzXCI6d29ya2Zsb3dJbmZvfVxuICBcbiAgcmV0dXJuIGBcbiAgICA8ZGl2IGlkPVwib3BlcmF0aW9uSW5mb01vZGFsXCIgY2xhc3M9XCJtb2RhbFwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50IGluZm9cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPiBXb3JraW5nIHdpdGggJHtpbmZvS2V5fSA8L2g1PlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgPHA+ICR7aW5mb0xpc3RbaW5mb0tleV19IDwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5DbG9zZTwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgIFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFZpZXcuZXh0ZW5kKHtcbiAgdGVtcGxhdGU6IGJvZHlUZW1wbGF0ZSxcbiAgYXV0b1JlbmRlcjogdHJ1ZSxcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5saXN0ZW5UbyhhcHAsICdwYWdlJywgdGhpcy5oYW5kbGVOZXdQYWdlKTtcbiAgfSxcbiAgZXZlbnRzOiB7XG4gICAgJ2NsaWNrIFtkYXRhLWhvb2s9cmVnaXN0cmF0aW9uLWxpbmstYnV0dG9uXScgOiAnaGFuZGxlUmVnaXN0cmF0aW9uTGlua0NsaWNrJyxcbiAgICAvLydjbGljayBhW2hyZWZdJzogJ2hhbmRsZUxpbmtDbGljaydcbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7XG5cbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGRvbWlmeShoZWFkVGVtcGxhdGUoKSkpO1xuXG4gICAgdGhpcy5yZW5kZXJXaXRoVGVtcGxhdGUodGhpcyk7XG4gICAgXG4gICAgdGhpcy5wYWdlQ29udGFpbmVyID0gdGhpcy5xdWVyeUJ5SG9vaygncGFnZS1jb250YWluZXInKTtcblxuICAgIHRoaXMucGFnZVN3aXRjaGVyID0gbmV3IFZpZXdTd2l0Y2hlcih7XG4gICAgICBlbDogdGhpcy5wYWdlQ29udGFpbmVyLFxuICAgICAgc2hvdzogZnVuY3Rpb24gKG5ld1ZpZXcsIG9sZFZpZXcpIHtcbiAgICAgICAgZG9jdW1lbnQudGl0bGUgPSBfLnJlc3VsdChuZXdWaWV3LCAncGFnZVRpdGxlJykgfHwgJ1N0b2NoU1MnO1xuICAgICAgICBkb2N1bWVudC5zY3JvbGxUb3AgPSAwO1xuICAgICAgICBcbiAgICAgICAgYXBwLmN1cnJlbnRQYWdlID0gbmV3VmlldztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBob21lUGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zdGFydHNXaXRoKFwiL3VzZXJcIikgPyBcIi9odWIvc3RvY2hzc1wiIDogXCJzdG9jaHNzL21vZGVsc1wiXG4gICAgJCh0aGlzLnF1ZXJ5QnlIb29rKFwiaG9tZS1saW5rXCIpKS5wcm9wKCdocmVmJywgaG9tZVBhdGgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIFxuICBoYW5kbGVOZXdQYWdlOiBmdW5jdGlvbiAodmlldykge1xuICAgIHRoaXMucGFnZVN3aXRjaGVyLnNldCh2aWV3KTtcbiAgICAvL3RoaXMudXBkYXRlQWN0aXZlTmF2KCk7XG4gIH0sXG5cbiAgaGFuZGxlTGlua0NsaWNrOiBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBsb2NhbFBhdGggPSBsb2NhbExpbmtzLnBhdGhuYW1lKGUpO1xuXG4gICAgaWYgKGxvY2FsUGF0aCkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5uYXZpZ2F0ZShsb2NhbFBhdGgpO1xuICAgIH1cbiAgfSxcblxuICBoYW5kbGVSZWdpc3RyYXRpb25MaW5rQ2xpY2s6IGZ1bmN0aW9uICgpIHtcbiAgICAkKHRoaXMucXVlcnlCeUhvb2soXCJyZWdpc3RyYXRpb24tZm9ybVwiKSkuY29sbGFwc2UoJ3Nob3cnKTtcbiAgICAkKHRoaXMucXVlcnlCeUhvb2soXCJyZWdpc3RyYXRpb24tbGlua1wiKSkuY29sbGFwc2UoKTtcbiAgfSxcblxuICBuYXZpZ2F0ZTogZnVuY3Rpb24gKHBhZ2UpIHtcbiAgICB3aW5kb3cubG9jYXRpb24gPSB1cmw7XG4gIH1cbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIG5hbWVUZXN0czogW1xuICAgIGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICBpZiAoL15bMC05XSsvLnRlc3QodGV4dCkpIHtcbiAgICAgICAgcmV0dXJuIFwiRmllbGQgY2Fubm90IHN0YXJ0IHdpdGggYSBudW1iZXIuIFN0YXJ0IHdpdGggbGV0dGVyIG9yIHVuZGVyc2NvcmUuXCIgXG4gICAgICB9XG4gICAgfSxcbiAgICBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgaWYgKCEvXlthLXpBLVowLTlfXSskLy50ZXN0KHRleHQpKSB7XG4gICAgICAgIHJldHVybiBcIkludmFsaWQgY2hhcmFjdGVycy4gUGxlYXNlIG9ubHkgdXNlIGxldHRlcnMsIG51bWJlcnMsIG9yIHVuZGVyc2NvcmVzLlwiXG4gICAgICB9XG4gICAgfSxcbiAgICBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgaWYodGhpcy5wYXJlbnQubW9kZWwgJiYgdGhpcy5wYXJlbnQubW9kZWwuY29sbGVjdGlvbil7XG4gICAgICAgIHZhciBpc0R1cGxpY2F0ZSA9IHRoaXMucGFyZW50Lm1vZGVsLmNvbGxlY3Rpb24uc29tZShmdW5jdGlvbiAobSkgeyByZXR1cm4gbS5uYW1lID09PSB0ZXh0ICYmIHRoaXMucGFyZW50Lm1vZGVsICE9PSBtO1xuICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgaWYgKGlzRHVwbGljYXRlKSB7XG4gICAgICAgICAgcmV0dXJuIFwiTm8gZHVwbGljYXRlIGVudHJpZXMuXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIF0sXG4gIHZhbHVlVGVzdHM6IFtcbiAgICBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmIChpc05hTihOdW1iZXIodmFsdWUpKSkge1xuICAgICAgICByZXR1cm4gXCJNdXN0IGJlIGEgbnVtYmVyLlwiXG4gICAgICB9XG4gICAgfSxcbiAgICBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmIChOdW1iZXIodmFsdWUpIDwgMCkge1xuICAgICAgICByZXR1cm4gXCJNdXN0IGJlIG5vbi1uZWdhdGl2ZS5cIlxuICAgICAgfVxuICAgIH0sXG4gIF0sXG59IiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdmctd2l0aC1qcy5taW4uY3NzXCIpO1xuXG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcblxudmFyIHRyYW5zZm9ybTtcbnZhciBpbnNlcnRJbnRvO1xuXG5cblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxuXG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxub3B0aW9ucy5pbnNlcnRJbnRvID0gdW5kZWZpbmVkO1xuXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi8uLi9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1wiKShjb250ZW50LCBvcHRpb25zKTtcblxuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG5cbmlmKG1vZHVsZS5ob3QpIHtcblx0bW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdmctd2l0aC1qcy5taW4uY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N2Zy13aXRoLWpzLm1pbi5jc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iLCIvKiRBTVBFUlNBTkRfVkVSU0lPTiovXG52YXIgRXZlbnRzID0gcmVxdWlyZSgnYW1wZXJzYW5kLWV2ZW50cycpO1xudmFyIHRvQXJyYXkgPSByZXF1aXJlKCdsb2Rhc2gvdG9BcnJheScpO1xudmFyIGV4dGVuZCA9IHJlcXVpcmUoJ2xvZGFzaC9hc3NpZ24nKTtcblxuXG4vLyBpbnN0YW5jZSBhcHAsIGNhbiBiZSB1c2VkIGp1c3QgYnkgaXRzZWxmXG4vLyBvciBieSBjYWxsaW5nIGFzIGZ1bmN0aW9uIHRvIHBhc3MgbGFiZWxzXG4vLyBieSBhdHRhY2hpbmcgYWxsIGluc3RhbmNlcyB0byB0aGlzLCB3ZSBjYW5cbi8vIGF2b2lkIGdsb2JhbHNcbnZhciBhcHAgPSB7XG4gICAgZXh0ZW5kOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gdG9BcnJheShhcmd1bWVudHMpO1xuICAgICAgICBhcmdzLnVuc2hpZnQodGhpcyk7XG4gICAgICAgIHJldHVybiBleHRlbmQuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSxcbiAgICByZXNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBjbGVhciBhbGwgZXZlbnRzXG4gICAgICAgIHRoaXMub2ZmKCk7XG4gICAgICAgIC8vIHJlbW92ZSBhbGwgYnV0IG1haW4gdHdvIG1ldGhvZHNcbiAgICAgICAgZm9yICh2YXIgaXRlbSBpbiB0aGlzKSB7XG4gICAgICAgICAgICBpZiAoaXRlbSAhPT0gJ2V4dGVuZCcgJiYgaXRlbSAhPT0gJ3Jlc2V0Jykge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzW2l0ZW1dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHJlbWl4IGV2ZW50c1xuICAgICAgICBFdmVudHMuY3JlYXRlRW1pdHRlcih0aGlzKTtcbiAgICB9XG59O1xuXG5FdmVudHMuY3JlYXRlRW1pdHRlcihhcHApO1xuXG4vLyBleHBvcnQgb3VyIHNpbmdsZXRvblxubW9kdWxlLmV4cG9ydHMgPSBhcHA7XG4iLCJ2YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpO1xuXG4vLy8gRm9sbG93aW5nIGNvZGUgaXMgbGFyZ2VseSBwYXN0ZWQgZnJvbSBCYWNrYm9uZS5qc1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29ycmVjdGx5IHNldCB1cCB0aGUgcHJvdG90eXBlIGNoYWluLCBmb3Igc3ViY2xhc3Nlcy5cbi8vIFNpbWlsYXIgdG8gYGdvb2cuaW5oZXJpdHNgLCBidXQgdXNlcyBhIGhhc2ggb2YgcHJvdG90eXBlIHByb3BlcnRpZXMgYW5kXG4vLyBjbGFzcyBwcm9wZXJ0aWVzIHRvIGJlIGV4dGVuZGVkLlxudmFyIGV4dGVuZCA9IGZ1bmN0aW9uKHByb3RvUHJvcHMpIHtcbiAgICB2YXIgcGFyZW50ID0gdGhpcztcbiAgICB2YXIgY2hpbGQ7XG4gICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cbiAgICAvLyBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBuZXcgc3ViY2xhc3MgaXMgZWl0aGVyIGRlZmluZWQgYnkgeW91XG4gICAgLy8gKHRoZSBcImNvbnN0cnVjdG9yXCIgcHJvcGVydHkgaW4geW91ciBgZXh0ZW5kYCBkZWZpbml0aW9uKSwgb3IgZGVmYXVsdGVkXG4gICAgLy8gYnkgdXMgdG8gc2ltcGx5IGNhbGwgdGhlIHBhcmVudCdzIGNvbnN0cnVjdG9yLlxuICAgIGlmIChwcm90b1Byb3BzICYmIHByb3RvUHJvcHMuaGFzT3duUHJvcGVydHkoJ2NvbnN0cnVjdG9yJykpIHtcbiAgICAgICAgY2hpbGQgPSBwcm90b1Byb3BzLmNvbnN0cnVjdG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIEFkZCBzdGF0aWMgcHJvcGVydGllcyB0byB0aGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZnJvbSBwYXJlbnRcbiAgICBhc3NpZ24oY2hpbGQsIHBhcmVudCk7XG5cbiAgICAvLyBTZXQgdGhlIHByb3RvdHlwZSBjaGFpbiB0byBpbmhlcml0IGZyb20gYHBhcmVudGAsIHdpdGhvdXQgY2FsbGluZ1xuICAgIC8vIGBwYXJlbnRgJ3MgY29uc3RydWN0b3IgZnVuY3Rpb24uXG4gICAgdmFyIFN1cnJvZ2F0ZSA9IGZ1bmN0aW9uKCl7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfTtcbiAgICBTdXJyb2dhdGUucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTtcbiAgICBjaGlsZC5wcm90b3R5cGUgPSBuZXcgU3Vycm9nYXRlKCk7XG5cbiAgICAvLyBNaXggaW4gYWxsIHByb3RvdHlwZSBwcm9wZXJ0aWVzIHRvIHRoZSBzdWJjbGFzcyBpZiBzdXBwbGllZC5cbiAgICBpZiAocHJvdG9Qcm9wcykge1xuICAgICAgICBhcmdzLnVuc2hpZnQoY2hpbGQucHJvdG90eXBlKTtcbiAgICAgICAgYXNzaWduLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH1cblxuICAgIC8vIFNldCBhIGNvbnZlbmllbmNlIHByb3BlcnR5IGluIGNhc2UgdGhlIHBhcmVudCdzIHByb3RvdHlwZSBpcyBuZWVkZWRcbiAgICAvLyBsYXRlci5cbiAgICBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlO1xuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLy8gRXhwb3NlIHRoZSBleHRlbmQgZnVuY3Rpb25cbm1vZHVsZS5leHBvcnRzID0gZXh0ZW5kO1xuIiwiLyokQU1QRVJTQU5EX1ZFUlNJT04qL1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ2xvZGFzaC9hc3NpZ24nKTtcbnZhciBpbnZva2VNYXAgPSByZXF1aXJlKCdsb2Rhc2gvaW52b2tlTWFwJyk7XG52YXIgcGljayA9IHJlcXVpcmUoJ2xvZGFzaC9waWNrJyk7XG52YXIgZmluZCA9IHJlcXVpcmUoJ2xvZGFzaC9maW5kJyk7XG52YXIgZGlmZmVyZW5jZSA9IHJlcXVpcmUoJ2xvZGFzaC9kaWZmZXJlbmNlJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJ2xvZGFzaC9iaW5kJyk7XG52YXIgRXZlbnRzID0gcmVxdWlyZSgnYW1wZXJzYW5kLWV2ZW50cycpO1xudmFyIGFtcEV4dGVuZCA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1jbGFzcy1leHRlbmQnKTtcblxuLy8gb3B0aW9uc1xudmFyIG9wdGlvbnMgPSBbJ2NvbGxlY3Rpb24nLCAnZWwnLCAndmlld09wdGlvbnMnLCAndmlldycsICdlbXB0eVZpZXcnLCAnZmlsdGVyJywgJ3JldmVyc2UnLCAncGFyZW50J107XG5cblxuZnVuY3Rpb24gQ29sbGVjdGlvblZpZXcoc3BlYykge1xuICAgIGlmICghc3BlYykge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ0NvbGxlY3Rpb24gdmlldyBtaXNzaW5nIHJlcXVpcmVkIHBhcmFtZXRlcnM6IGNvbGxlY3Rpb24sIGVsJyk7XG4gICAgfVxuICAgIGlmICghc3BlYy5jb2xsZWN0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignQ29sbGVjdGlvbiB2aWV3IHJlcXVpcmVzIGEgY29sbGVjdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIXNwZWMuZWwgJiYgIXRoaXMuaW5zZXJ0U2VsZikge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ0NvbGxlY3Rpb24gdmlldyByZXF1aXJlcyBhbiBlbCcpO1xuICAgIH1cbiAgICBhc3NpZ24odGhpcywgcGljayhzcGVjLCBvcHRpb25zKSk7XG4gICAgdGhpcy52aWV3cyA9IFtdO1xuICAgIHRoaXMubGlzdGVuVG8odGhpcy5jb2xsZWN0aW9uLCAnYWRkJywgdGhpcy5fYWRkVmlld0Zvck1vZGVsKTtcbiAgICB0aGlzLmxpc3RlblRvKHRoaXMuY29sbGVjdGlvbiwgJ3JlbW92ZScsIHRoaXMuX3JlbW92ZVZpZXdGb3JNb2RlbCk7XG4gICAgdGhpcy5saXN0ZW5Ubyh0aGlzLmNvbGxlY3Rpb24sICdzb3J0JywgdGhpcy5fcmVyZW5kZXJBbGwpO1xuICAgIHRoaXMubGlzdGVuVG8odGhpcy5jb2xsZWN0aW9uLCAncmVmcmVzaCByZXNldCcsIHRoaXMuX3Jlc2V0KTtcbn1cblxuYXNzaWduKENvbGxlY3Rpb25WaWV3LnByb3RvdHlwZSwgRXZlbnRzLCB7XG4gICAgLy8gZm9yIHZpZXcgY29udHJhY3QgY29tcGxpYW5jZVxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl9yZW5kZXJBbGwoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICByZW1vdmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaW52b2tlTWFwKHRoaXMudmlld3MsICdyZW1vdmUnKTtcbiAgICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nKCk7XG4gICAgfSxcbiAgICBfZ2V0Vmlld0J5TW9kZWw6IGZ1bmN0aW9uIChtb2RlbCkge1xuICAgICAgICByZXR1cm4gZmluZCh0aGlzLnZpZXdzLCBmdW5jdGlvbiAodmlldykge1xuICAgICAgICAgICAgcmV0dXJuIG1vZGVsID09PSB2aWV3Lm1vZGVsO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIF9jcmVhdGVWaWV3Rm9yTW9kZWw6IGZ1bmN0aW9uIChtb2RlbCwgcmVuZGVyT3B0cykge1xuICAgICAgICB2YXIgZGVmYXVsdFZpZXdPcHRpb25zID0ge21vZGVsOiBtb2RlbCwgY29sbGVjdGlvbjogdGhpcy5jb2xsZWN0aW9uLCBwYXJlbnQ6IHRoaXN9O1xuICAgICAgICB2YXIgdmlldyA9IG5ldyB0aGlzLnZpZXcoYXNzaWduKGRlZmF1bHRWaWV3T3B0aW9ucywgdGhpcy52aWV3T3B0aW9ucykpO1xuICAgICAgICB0aGlzLnZpZXdzLnB1c2godmlldyk7XG4gICAgICAgIHZpZXcucmVuZGVyZWRCeVBhcmVudFZpZXcgPSB0cnVlO1xuICAgICAgICB2aWV3LnJlbmRlcihyZW5kZXJPcHRzKTtcbiAgICAgICAgcmV0dXJuIHZpZXc7XG4gICAgfSxcbiAgICBfZ2V0T3JDcmVhdGVCeU1vZGVsOiBmdW5jdGlvbiAobW9kZWwsIHJlbmRlck9wdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFZpZXdCeU1vZGVsKG1vZGVsKSB8fCB0aGlzLl9jcmVhdGVWaWV3Rm9yTW9kZWwobW9kZWwsIHJlbmRlck9wdHMpO1xuICAgIH0sXG4gICAgX2FkZFZpZXdGb3JNb2RlbDogZnVuY3Rpb24gKG1vZGVsLCBjb2xsZWN0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBtYXRjaGVzID0gdGhpcy5maWx0ZXIgPyB0aGlzLmZpbHRlcihtb2RlbCkgOiB0cnVlO1xuICAgICAgICBpZiAoIW1hdGNoZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZW5kZXJlZEVtcHR5Vmlldykge1xuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlVmlldyh0aGlzLnJlbmRlcmVkRW1wdHlWaWV3KTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnJlbmRlcmVkRW1wdHlWaWV3O1xuICAgICAgICB9XG4gICAgICAgIHZhciB2aWV3ID0gdGhpcy5fZ2V0T3JDcmVhdGVCeU1vZGVsKG1vZGVsLCB7Y29udGFpbmVyRWw6IHRoaXMuZWx9KTtcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yZXJlbmRlcikge1xuICAgICAgICAgICAgdGhpcy5faW5zZXJ0Vmlldyh2aWV3KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2luc2VydFZpZXdBdEluZGV4KHZpZXcpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBfaW5zZXJ0Vmlld0F0SW5kZXg6IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgICAgIGlmICghdmlldy5pbnNlcnRTZWxmKSB7XG4gICAgICAgICAgICB2YXIgcG9zID0gdGhpcy5jb2xsZWN0aW9uLmluZGV4T2Yodmlldy5tb2RlbCk7XG4gICAgICAgICAgICBwb3MgPSB0aGlzLnJldmVyc2UgPyBwb3MgLSAxIDogcG9zICsgMTtcblxuICAgICAgICAgICAgdmFyIG1vZGVsVG9JbnNlcnRCZWZvcmUgPSB0aGlzLmNvbGxlY3Rpb24uYXQocG9zKTtcblxuICAgICAgICAgICAgdmFyIHZpZXdUb0luc2VydEJlZm9yZSA9IHRoaXMuX2dldFZpZXdCeU1vZGVsKG1vZGVsVG9JbnNlcnRCZWZvcmUpO1xuXG4gICAgICAgICAgICAvLyBGSVggSUUgYnVnIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTm9kZS5pbnNlcnRCZWZvcmUpXG4gICAgICAgICAgICAvLyBcIkluIEludGVybmV0IEV4cGxvcmVyIGFuIHVuZGVmaW5lZCB2YWx1ZSBhcyByZWZlcmVuY2VFbGVtZW50IHdpbGwgdGhyb3cgZXJyb3JzLCB3aGlsZSBpbiByZXN0IG9mIHRoZSBtb2Rlcm4gYnJvd3NlcnMsIHRoaXMgd29ya3MgZmluZS5cIlxuICAgICAgICAgICAgaWYgKHZpZXdUb0luc2VydEJlZm9yZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZWwuaW5zZXJ0QmVmb3JlKHZpZXcuZWwsIHZpZXdUb0luc2VydEJlZm9yZSAmJiB2aWV3VG9JbnNlcnRCZWZvcmUuZWwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsLmFwcGVuZENoaWxkKHZpZXcuZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBfaW5zZXJ0VmlldzogZnVuY3Rpb24gKHZpZXcpIHtcbiAgICAgICAgaWYgKCF2aWV3Lmluc2VydFNlbGYpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJldmVyc2UgJiYgdGhpcy5lbC5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5pbnNlcnRCZWZvcmUodmlldy5lbCwgdGhpcy5lbC5maXJzdENoaWxkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5hcHBlbmRDaGlsZCh2aWV3LmVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgX3JlbW92ZVZpZXdGb3JNb2RlbDogZnVuY3Rpb24gKG1vZGVsKSB7XG4gICAgICAgIHZhciB2aWV3ID0gdGhpcy5fZ2V0Vmlld0J5TW9kZWwobW9kZWwpO1xuICAgICAgICBpZiAoIXZpZXcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnZpZXdzLmluZGV4T2Yodmlldyk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSBpdCBpZiB3ZSBmb3VuZCBpdCBjYWxsaW5nIGFuaW1hdGVSZW1vdmVcbiAgICAgICAgICAgIC8vIHRvIGdpdmUgdXNlciBvcHRpb24gb2YgZ3JhY2VmdWxseSBkZXN0cm95aW5nLlxuICAgICAgICAgICAgdmlldyA9IHRoaXMudmlld3Muc3BsaWNlKGluZGV4LCAxKVswXTtcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZVZpZXcodmlldyk7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJFbXB0eVZpZXcoKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgX3JlbW92ZVZpZXc6IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgICAgIGlmICh2aWV3LmFuaW1hdGVSZW1vdmUpIHtcbiAgICAgICAgICAgIHZpZXcuYW5pbWF0ZVJlbW92ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmlldy5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgX3JlbmRlckFsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmNvbGxlY3Rpb24uZWFjaChiaW5kKHRoaXMuX2FkZFZpZXdGb3JNb2RlbCwgdGhpcykpO1xuICAgICAgICB0aGlzLl9yZW5kZXJFbXB0eVZpZXcoKTtcbiAgICB9LFxuICAgIF9yZXJlbmRlckFsbDogZnVuY3Rpb24gKGNvbGxlY3Rpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIHRoaXMuY29sbGVjdGlvbi5lYWNoKGJpbmQoZnVuY3Rpb24gKG1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLl9hZGRWaWV3Rm9yTW9kZWwobW9kZWwsIHRoaXMsIGFzc2lnbihvcHRpb25zLCB7cmVyZW5kZXI6IHRydWV9KSk7XG4gICAgICAgIH0sIHRoaXMpKTtcbiAgICB9LFxuICAgIF9yZW5kZXJFbXB0eVZpZXc6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy52aWV3cy5sZW5ndGggPT09IDAgJiYgdGhpcy5lbXB0eVZpZXcgJiYgIXRoaXMucmVuZGVyZWRFbXB0eVZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZWRFbXB0eVZpZXcgPSBuZXcgdGhpcy5lbXB0eVZpZXcoe3BhcmVudDogdGhpc30pO1xuICAgICAgICAgICAgdGhpcy5lbC5hcHBlbmRDaGlsZCh0aGlzLnJlbmRlcmVkRW1wdHlWaWV3LnJlbmRlcigpLmVsKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgX3Jlc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBuZXdWaWV3cyA9IHRoaXMuY29sbGVjdGlvbi5tYXAoYmluZCh0aGlzLl9nZXRPckNyZWF0ZUJ5TW9kZWwsIHRoaXMpKTtcblxuICAgICAgICAvL1JlbW92ZSBleGlzdGluZyB2aWV3cyBmcm9tIHRoZSB1aVxuICAgICAgICB2YXIgdG9SZW1vdmUgPSBkaWZmZXJlbmNlKHRoaXMudmlld3MsIG5ld1ZpZXdzKTtcbiAgICAgICAgdG9SZW1vdmUuZm9yRWFjaCh0aGlzLl9yZW1vdmVWaWV3LCB0aGlzKTtcblxuICAgICAgICAvL1JlcmVuZGVyIHRoZSBmdWxsIGxpc3Qgd2l0aCB0aGUgbmV3IHZpZXdzXG4gICAgICAgIHRoaXMudmlld3MgPSBuZXdWaWV3cztcbiAgICAgICAgdGhpcy5fcmVyZW5kZXJBbGwoKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyRW1wdHlWaWV3KCk7XG4gICAgfVxufSk7XG5cbkNvbGxlY3Rpb25WaWV3LmV4dGVuZCA9IGFtcEV4dGVuZDtcblxubW9kdWxlLmV4cG9ydHMgPSBDb2xsZWN0aW9uVmlldztcbiIsInZhciBBbXBlcnNhbmRFdmVudHMgPSByZXF1aXJlKCdhbXBlcnNhbmQtZXZlbnRzJyk7XG52YXIgY2xhc3NFeHRlbmQgPSByZXF1aXJlKCdhbXBlcnNhbmQtY2xhc3MtZXh0ZW5kJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJ2xvZGFzaC9pc0FycmF5Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJ2xvZGFzaC9iaW5kJyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpO1xudmFyIHNsaWNlID0gW10uc2xpY2U7XG5cbmZ1bmN0aW9uIENvbGxlY3Rpb24obW9kZWxzLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTtcbiAgICBpZiAob3B0aW9ucy5tb2RlbCkgdGhpcy5tb2RlbCA9IG9wdGlvbnMubW9kZWw7XG4gICAgaWYgKG9wdGlvbnMuY29tcGFyYXRvcikgdGhpcy5jb21wYXJhdG9yID0gb3B0aW9ucy5jb21wYXJhdG9yO1xuICAgIGlmIChvcHRpb25zLnBhcmVudCkgdGhpcy5wYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcbiAgICBpZiAoIXRoaXMubWFpbkluZGV4KSB7XG4gICAgICAgIHZhciBpZEF0dHJpYnV0ZSA9IHRoaXMubW9kZWwgJiYgdGhpcy5tb2RlbC5wcm90b3R5cGUgJiYgdGhpcy5tb2RlbC5wcm90b3R5cGUuaWRBdHRyaWJ1dGU7XG4gICAgICAgIHRoaXMubWFpbkluZGV4ID0gaWRBdHRyaWJ1dGUgfHwgJ2lkJztcbiAgICB9XG4gICAgdGhpcy5fcmVzZXQoKTtcbiAgICB0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAobW9kZWxzKSB0aGlzLnJlc2V0KG1vZGVscywgYXNzaWduKHtzaWxlbnQ6IHRydWV9LCBvcHRpb25zKSk7XG59XG5cbmFzc2lnbihDb2xsZWN0aW9uLnByb3RvdHlwZSwgQW1wZXJzYW5kRXZlbnRzLCB7XG4gICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKCkge30sXG5cbiAgICBpc01vZGVsOiBmdW5jdGlvbiAobW9kZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwgJiYgbW9kZWwgaW5zdGFuY2VvZiB0aGlzLm1vZGVsO1xuICAgIH0sXG5cbiAgICBhZGQ6IGZ1bmN0aW9uIChtb2RlbHMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0KG1vZGVscywgYXNzaWduKHttZXJnZTogZmFsc2UsIGFkZDogdHJ1ZSwgcmVtb3ZlOiBmYWxzZX0sIG9wdGlvbnMpKTtcbiAgICB9LFxuXG4gICAgLy8gb3ZlcnJpZGFibGUgcGFyc2UgbWV0aG9kXG4gICAgcGFyc2U6IGZ1bmN0aW9uIChyZXMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuXG4gICAgLy8gb3ZlcnJpZGFibGUgc2VyaWFsaXplIG1ldGhvZFxuICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKG1vZGVsKSB7XG4gICAgICAgICAgICBpZiAobW9kZWwuc2VyaWFsaXplKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZGVsLnNlcmlhbGl6ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgb3V0ID0ge307XG4gICAgICAgICAgICAgICAgYXNzaWduKG91dCwgbW9kZWwpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBvdXQuY29sbGVjdGlvbjtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgdG9KU09OOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZSgpO1xuICAgIH0sXG5cbiAgICBzZXQ6IGZ1bmN0aW9uIChtb2RlbHMsIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGFzc2lnbih7YWRkOiB0cnVlLCByZW1vdmU6IHRydWUsIG1lcmdlOiB0cnVlfSwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChvcHRpb25zLnBhcnNlKSBtb2RlbHMgPSB0aGlzLnBhcnNlKG1vZGVscywgb3B0aW9ucyk7XG4gICAgICAgIHZhciBzaW5ndWxhciA9ICFpc0FycmF5KG1vZGVscyk7XG4gICAgICAgIG1vZGVscyA9IHNpbmd1bGFyID8gKG1vZGVscyA/IFttb2RlbHNdIDogW10pIDogbW9kZWxzLnNsaWNlKCk7XG4gICAgICAgIHZhciBpZCwgbW9kZWwsIGF0dHJzLCBleGlzdGluZywgc29ydCwgaSwgbGVuZ3RoO1xuICAgICAgICB2YXIgYXQgPSBvcHRpb25zLmF0O1xuICAgICAgICB2YXIgc29ydGFibGUgPSB0aGlzLmNvbXBhcmF0b3IgJiYgKGF0ID09IG51bGwpICYmIG9wdGlvbnMuc29ydCAhPT0gZmFsc2U7XG4gICAgICAgIHZhciBzb3J0QXR0ciA9ICgnc3RyaW5nJyA9PT0gdHlwZW9mIHRoaXMuY29tcGFyYXRvcikgPyB0aGlzLmNvbXBhcmF0b3IgOiBudWxsO1xuICAgICAgICB2YXIgdG9BZGQgPSBbXSwgdG9SZW1vdmUgPSBbXSwgbW9kZWxNYXAgPSB7fTtcbiAgICAgICAgdmFyIGFkZCA9IG9wdGlvbnMuYWRkLCBtZXJnZSA9IG9wdGlvbnMubWVyZ2UsIHJlbW92ZSA9IG9wdGlvbnMucmVtb3ZlO1xuICAgICAgICB2YXIgb3JkZXIgPSAhc29ydGFibGUgJiYgYWRkICYmIHJlbW92ZSA/IFtdIDogZmFsc2U7XG4gICAgICAgIHZhciB0YXJnZXRQcm90byA9IHRoaXMubW9kZWwgJiYgdGhpcy5tb2RlbC5wcm90b3R5cGUgfHwgT2JqZWN0LnByb3RvdHlwZTtcblxuICAgICAgICAvLyBUdXJuIGJhcmUgb2JqZWN0cyBpbnRvIG1vZGVsIHJlZmVyZW5jZXMsIGFuZCBwcmV2ZW50IGludmFsaWQgbW9kZWxzXG4gICAgICAgIC8vIGZyb20gYmVpbmcgYWRkZWQuXG4gICAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IG1vZGVscy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXR0cnMgPSBtb2RlbHNbaV0gfHwge307XG4gICAgICAgICAgICBpZiAodGhpcy5pc01vZGVsKGF0dHJzKSkge1xuICAgICAgICAgICAgICAgIGlkID0gbW9kZWwgPSBhdHRycztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0UHJvdG8uZ2VuZXJhdGVJZCkge1xuICAgICAgICAgICAgICAgIGlkID0gdGFyZ2V0UHJvdG8uZ2VuZXJhdGVJZChhdHRycyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlkID0gYXR0cnNbdGhpcy5tYWluSW5kZXhdO1xuICAgICAgICAgICAgICAgIGlmIChpZCA9PT0gdW5kZWZpbmVkICYmIHRoaXMuX2lzRGVyaXZlZEluZGV4KHRhcmdldFByb3RvKSkge1xuICAgICAgICAgICAgICAgICAgICBpZCA9IHRhcmdldFByb3RvLl9kZXJpdmVkW3RoaXMubWFpbkluZGV4XS5mbi5jYWxsKGF0dHJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIGEgZHVwbGljYXRlIGlzIGZvdW5kLCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgYWRkZWQgYW5kXG4gICAgICAgICAgICAvLyBvcHRpb25hbGx5IG1lcmdlIGl0IGludG8gdGhlIGV4aXN0aW5nIG1vZGVsLlxuICAgICAgICAgICAgaWYgKGV4aXN0aW5nID0gdGhpcy5nZXQoaWQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlbW92ZSkgbW9kZWxNYXBbZXhpc3RpbmcuY2lkIHx8IGV4aXN0aW5nW3RoaXMubWFpbkluZGV4XV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChtZXJnZSkge1xuICAgICAgICAgICAgICAgICAgICBhdHRycyA9IGF0dHJzID09PSBtb2RlbCA/IG1vZGVsLmF0dHJpYnV0ZXMgOiBhdHRycztcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucGFyc2UpIGF0dHJzID0gZXhpc3RpbmcucGFyc2UoYXR0cnMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGlzIGlzIG1vZGVsXG4gICAgICAgICAgICAgICAgICAgIGlmIChleGlzdGluZy5zZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLnNldChhdHRycywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc29ydGFibGUgJiYgIXNvcnQgJiYgZXhpc3RpbmcuaGFzQ2hhbmdlZChzb3J0QXR0cikpIHNvcnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgbm90IGp1c3QgdXBkYXRlIHRoZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ24oZXhpc3RpbmcsIGF0dHJzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtb2RlbHNbaV0gPSBleGlzdGluZztcblxuICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIG5ldywgdmFsaWQgbW9kZWwsIHB1c2ggaXQgdG8gdGhlIGB0b0FkZGAgbGlzdC5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWRkKSB7XG4gICAgICAgICAgICAgICAgbW9kZWwgPSBtb2RlbHNbaV0gPSB0aGlzLl9wcmVwYXJlTW9kZWwoYXR0cnMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGlmICghbW9kZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHRvQWRkLnB1c2gobW9kZWwpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkZFJlZmVyZW5jZShtb2RlbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIERvIG5vdCBhZGQgbXVsdGlwbGUgbW9kZWxzIHdpdGggdGhlIHNhbWUgYGlkYC5cbiAgICAgICAgICAgIG1vZGVsID0gZXhpc3RpbmcgfHwgbW9kZWw7XG4gICAgICAgICAgICBpZiAoIW1vZGVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChvcmRlciAmJiAoKG1vZGVsLmlzTmV3ICYmIG1vZGVsLmlzTmV3KCkgfHwgIW1vZGVsW3RoaXMubWFpbkluZGV4XSkgfHwgIW1vZGVsTWFwW21vZGVsLmNpZCB8fCBtb2RlbFt0aGlzLm1haW5JbmRleF1dKSkgb3JkZXIucHVzaChtb2RlbCk7XG4gICAgICAgICAgICBtb2RlbE1hcFttb2RlbFt0aGlzLm1haW5JbmRleF1dID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlbW92ZSBub25leGlzdGVudCBtb2RlbHMgaWYgYXBwcm9wcmlhdGUuXG4gICAgICAgIGlmIChyZW1vdmUpIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IHRoaXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBtb2RlbCA9IHRoaXMubW9kZWxzW2ldO1xuICAgICAgICAgICAgICAgIGlmICghbW9kZWxNYXBbbW9kZWwuY2lkIHx8IG1vZGVsW3RoaXMubWFpbkluZGV4XV0pIHRvUmVtb3ZlLnB1c2gobW9kZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRvUmVtb3ZlLmxlbmd0aCkgdGhpcy5yZW1vdmUodG9SZW1vdmUsIG9wdGlvbnMpO1xuXG4gICAgICAgICAgICAvLyBBZGQgaW5kZXhlcyBhZ2FpbiB0byBtYWtlIHN1cmUgdGhleSB3ZXJlIG5vdCByZW1vdmVkIGFib3ZlLlxuICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9BZGQubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbmRleCh0b0FkZFtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZWUgaWYgc29ydGluZyBpcyBuZWVkZWQsIHVwZGF0ZSBgbGVuZ3RoYCBhbmQgc3BsaWNlIGluIG5ldyBtb2RlbHMuXG4gICAgICAgIGlmICh0b0FkZC5sZW5ndGggfHwgKG9yZGVyICYmIG9yZGVyLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIGlmIChzb3J0YWJsZSkgc29ydCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoYXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IHRvQWRkLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWxzLnNwbGljZShhdCArIGksIDAsIHRvQWRkW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBvcmRlcmVkTW9kZWxzID0gb3JkZXIgfHwgdG9BZGQ7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gb3JkZXJlZE1vZGVscy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVscy5wdXNoKG9yZGVyZWRNb2RlbHNbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNpbGVudGx5IHNvcnQgdGhlIGNvbGxlY3Rpb24gaWYgYXBwcm9wcmlhdGUuXG4gICAgICAgIGlmIChzb3J0KSB0aGlzLnNvcnQoe3NpbGVudDogdHJ1ZX0pO1xuXG4gICAgICAgIC8vIFVubGVzcyBzaWxlbmNlZCwgaXQncyB0aW1lIHRvIGZpcmUgYWxsIGFwcHJvcHJpYXRlIGFkZC9zb3J0IGV2ZW50cy5cbiAgICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9BZGQubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBtb2RlbCA9IHRvQWRkW2ldO1xuICAgICAgICAgICAgICAgIGlmIChtb2RlbC50cmlnZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGVsLnRyaWdnZXIoJ2FkZCcsIG1vZGVsLCB0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2FkZCcsIG1vZGVsLCB0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc29ydCB8fCAob3JkZXIgJiYgb3JkZXIubGVuZ3RoKSkgdGhpcy50cmlnZ2VyKCdzb3J0JywgdGhpcywgb3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gdGhlIGFkZGVkIChvciBtZXJnZWQpIG1vZGVsIChvciBtb2RlbHMpLlxuICAgICAgICByZXR1cm4gc2luZ3VsYXIgPyBtb2RlbHNbMF0gOiBtb2RlbHM7XG4gICAgfSxcblxuICAgIGdldDogZnVuY3Rpb24gKHF1ZXJ5LCBpbmRleE5hbWUpIHtcbiAgICAgICAgaWYgKHF1ZXJ5ID09IG51bGwpIHJldHVybjtcblxuICAgICAgICB2YXIgY29sbGVjdGlvbk1haW5JbmRleCA9IHRoaXMubWFpbkluZGV4O1xuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9pbmRleGVzW2luZGV4TmFtZSB8fCBjb2xsZWN0aW9uTWFpbkluZGV4XTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgIGluZGV4ICYmIChcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhbcXVlcnldIHx8IChcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5W2NvbGxlY3Rpb25NYWluSW5kZXhdICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4W3F1ZXJ5W2NvbGxlY3Rpb25NYWluSW5kZXhdXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB8fFxuICAgICAgICAgICAgdGhpcy5faW5kZXhlcy5jaWRbcXVlcnldIHx8XG4gICAgICAgICAgICB0aGlzLl9pbmRleGVzLmNpZFtxdWVyeS5jaWRdXG4gICAgICAgICk7XG4gICAgfSxcblxuICAgIC8vIEdldCB0aGUgbW9kZWwgYXQgdGhlIGdpdmVuIGluZGV4LlxuICAgIGF0OiBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWxzW2luZGV4XTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAobW9kZWxzLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBzaW5ndWxhciA9ICFpc0FycmF5KG1vZGVscyk7XG4gICAgICAgIHZhciBpLCBsZW5ndGgsIG1vZGVsLCBpbmRleDtcblxuICAgICAgICBtb2RlbHMgPSBzaW5ndWxhciA/IFttb2RlbHNdIDogc2xpY2UuY2FsbChtb2RlbHMpO1xuICAgICAgICBvcHRpb25zIHx8IChvcHRpb25zID0ge30pO1xuICAgICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBtb2RlbHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG1vZGVsID0gbW9kZWxzW2ldID0gdGhpcy5nZXQobW9kZWxzW2ldKTtcbiAgICAgICAgICAgIGlmICghbW9kZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGhpcy5fZGVJbmRleChtb2RlbCk7XG4gICAgICAgICAgICBpbmRleCA9IHRoaXMubW9kZWxzLmluZGV4T2YobW9kZWwpO1xuICAgICAgICAgICAgdGhpcy5tb2RlbHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgaWYgKG1vZGVsLnRyaWdnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWwudHJpZ2dlcigncmVtb3ZlJywgbW9kZWwsIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcigncmVtb3ZlJywgbW9kZWwsIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZVJlZmVyZW5jZShtb2RlbCwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNpbmd1bGFyID8gbW9kZWxzWzBdIDogbW9kZWxzO1xuICAgIH0sXG5cbiAgICAvLyBXaGVuIHlvdSBoYXZlIG1vcmUgaXRlbXMgdGhhbiB5b3Ugd2FudCB0byBhZGQgb3IgcmVtb3ZlIGluZGl2aWR1YWxseSxcbiAgICAvLyB5b3UgY2FuIHJlc2V0IHRoZSBlbnRpcmUgc2V0IHdpdGggYSBuZXcgbGlzdCBvZiBtb2RlbHMsIHdpdGhvdXQgZmlyaW5nXG4gICAgLy8gYW55IGdyYW51bGFyIGBhZGRgIG9yIGByZW1vdmVgIGV2ZW50cy4gRmlyZXMgYHJlc2V0YCB3aGVuIGZpbmlzaGVkLlxuICAgIC8vIFVzZWZ1bCBmb3IgYnVsayBvcGVyYXRpb25zIGFuZCBvcHRpbWl6YXRpb25zLlxuICAgIHJlc2V0OiBmdW5jdGlvbiAobW9kZWxzLCBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSB0aGlzLm1vZGVscy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlUmVmZXJlbmNlKHRoaXMubW9kZWxzW2ldLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLnByZXZpb3VzTW9kZWxzID0gdGhpcy5tb2RlbHM7XG4gICAgICAgIHRoaXMuX3Jlc2V0KCk7XG4gICAgICAgIG1vZGVscyA9IHRoaXMuYWRkKG1vZGVscywgYXNzaWduKHtzaWxlbnQ6IHRydWV9LCBvcHRpb25zKSk7XG4gICAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHRoaXMudHJpZ2dlcigncmVzZXQnLCB0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIG1vZGVscztcbiAgICB9LFxuXG4gICAgc29ydDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICBpZiAoIXRoaXMuY29tcGFyYXRvcikgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc29ydCBhIHNldCB3aXRob3V0IGEgY29tcGFyYXRvcicpO1xuICAgICAgICBvcHRpb25zIHx8IChvcHRpb25zID0ge30pO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb21wYXJhdG9yID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5tb2RlbHMuc29ydChmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgICAgICBpZiAobGVmdC5nZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGxlZnQuZ2V0KHNlbGYuY29tcGFyYXRvcik7XG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gcmlnaHQuZ2V0KHNlbGYuY29tcGFyYXRvcik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGxlZnRbc2VsZi5jb21wYXJhdG9yXTtcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSByaWdodFtzZWxmLmNvbXBhcmF0b3JdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobGVmdCA+IHJpZ2h0IHx8IGxlZnQgPT09IHZvaWQgMCkgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgaWYgKGxlZnQgPCByaWdodCB8fCByaWdodCA9PT0gdm9pZCAwKSByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbXBhcmF0b3IubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVscy5zb3J0KGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgIGxlZnQgPSBzZWxmLmNvbXBhcmF0b3IobGVmdCk7XG4gICAgICAgICAgICAgICAgcmlnaHQgPSBzZWxmLmNvbXBhcmF0b3IocmlnaHQpO1xuICAgICAgICAgICAgICAgIGlmIChsZWZ0ID4gcmlnaHQgfHwgbGVmdCA9PT0gdm9pZCAwKSByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICBpZiAobGVmdCA8IHJpZ2h0IHx8IHJpZ2h0ID09PSB2b2lkIDApIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tb2RlbHMuc29ydChiaW5kKHRoaXMuY29tcGFyYXRvcix0aGlzKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB0aGlzLnRyaWdnZXIoJ3NvcnQnLCB0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8vIFByaXZhdGUgbWV0aG9kIHRvIHJlc2V0IGFsbCBpbnRlcm5hbCBzdGF0ZS4gQ2FsbGVkIHdoZW4gdGhlIGNvbGxlY3Rpb25cbiAgICAvLyBpcyBmaXJzdCBpbml0aWFsaXplZCBvciByZXNldC5cbiAgICBfcmVzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGxpc3QgPSBzbGljZS5jYWxsKHRoaXMuaW5kZXhlcyB8fCBbXSk7XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgbGlzdC5wdXNoKHRoaXMubWFpbkluZGV4KTtcbiAgICAgICAgbGlzdC5wdXNoKCdjaWQnKTtcbiAgICAgICAgdmFyIGwgPSBsaXN0Lmxlbmd0aDtcbiAgICAgICAgdGhpcy5tb2RlbHMgPSBbXTtcbiAgICAgICAgdGhpcy5faW5kZXhlcyA9IHt9O1xuICAgICAgICBmb3IgKDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5faW5kZXhlc1tsaXN0W2ldXSA9IHt9O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIF9wcmVwYXJlTW9kZWw6IGZ1bmN0aW9uIChhdHRycywgb3B0aW9ucykge1xuICAgICAgICAvLyBpZiB3ZSBoYXZlbid0IGRlZmluZWQgYSBjb25zdHJ1Y3Rvciwgc2tpcCB0aGlzXG4gICAgICAgIGlmICghdGhpcy5tb2RlbCkgcmV0dXJuIGF0dHJzO1xuXG4gICAgICAgIGlmICh0aGlzLmlzTW9kZWwoYXR0cnMpKSB7XG4gICAgICAgICAgICBpZiAoIWF0dHJzLmNvbGxlY3Rpb24pIGF0dHJzLmNvbGxlY3Rpb24gPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIGF0dHJzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgPyBhc3NpZ24oe30sIG9wdGlvbnMpIDoge307XG4gICAgICAgICAgICBvcHRpb25zLmNvbGxlY3Rpb24gPSB0aGlzO1xuICAgICAgICAgICAgdmFyIG1vZGVsID0gbmV3IHRoaXMubW9kZWwoYXR0cnMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKCFtb2RlbC52YWxpZGF0aW9uRXJyb3IpIHJldHVybiBtb2RlbDtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcignaW52YWxpZCcsIHRoaXMsIG1vZGVsLnZhbGlkYXRpb25FcnJvciwgb3B0aW9ucyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX2RlSW5kZXg6IGZ1bmN0aW9uIChtb2RlbCwgYXR0cmlidXRlLCB2YWx1ZSkge1xuICAgICAgICB2YXIgaW5kZXhWYWw7XG4gICAgICAgIGlmIChhdHRyaWJ1dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHVuZGVmaW5lZCA9PT0gdGhpcy5faW5kZXhlc1thdHRyaWJ1dGVdKSB0aHJvdyBuZXcgRXJyb3IoJ0dpdmVuIGF0dHJpYnV0ZSBpcyBub3QgYW4gaW5kZXgnKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9pbmRleGVzW2F0dHJpYnV0ZV1bdmFsdWVdO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdCBhIHNwZWNpZmljIGF0dHJpYnV0ZVxuICAgICAgICBmb3IgKHZhciBpbmRleEF0dHIgaW4gdGhpcy5faW5kZXhlcykge1xuICAgICAgICAgICAgaW5kZXhWYWwgPSBtb2RlbC5oYXNPd25Qcm9wZXJ0eShpbmRleEF0dHIpID8gbW9kZWxbaW5kZXhBdHRyXSA6IChtb2RlbC5nZXQgJiYgbW9kZWwuZ2V0KGluZGV4QXR0cikpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2luZGV4ZXNbaW5kZXhBdHRyXVtpbmRleFZhbF07XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX2luZGV4OiBmdW5jdGlvbiAobW9kZWwsIGF0dHJpYnV0ZSkge1xuICAgICAgICB2YXIgaW5kZXhWYWw7XG4gICAgICAgIGlmIChhdHRyaWJ1dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHVuZGVmaW5lZCA9PT0gdGhpcy5faW5kZXhlc1thdHRyaWJ1dGVdKSB0aHJvdyBuZXcgRXJyb3IoJ0dpdmVuIGF0dHJpYnV0ZSBpcyBub3QgYW4gaW5kZXgnKTtcbiAgICAgICAgICAgIGluZGV4VmFsID0gbW9kZWxbYXR0cmlidXRlXSB8fCAobW9kZWwuZ2V0ICYmIG1vZGVsLmdldChhdHRyaWJ1dGUpKTtcbiAgICAgICAgICAgIGlmIChpbmRleFZhbCkgdGhpcy5faW5kZXhlc1thdHRyaWJ1dGVdW2luZGV4VmFsXSA9IG1vZGVsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdCBhIHNwZWNpZmljIGF0dHJpYnV0ZVxuICAgICAgICBmb3IgKHZhciBpbmRleEF0dHIgaW4gdGhpcy5faW5kZXhlcykge1xuICAgICAgICAgICAgaW5kZXhWYWwgPSBtb2RlbC5oYXNPd25Qcm9wZXJ0eShpbmRleEF0dHIpID8gbW9kZWxbaW5kZXhBdHRyXSA6IChtb2RlbC5nZXQgJiYgbW9kZWwuZ2V0KGluZGV4QXR0cikpO1xuICAgICAgICAgICAgaWYgKGluZGV4VmFsICE9IG51bGwpIHRoaXMuX2luZGV4ZXNbaW5kZXhBdHRyXVtpbmRleFZhbF0gPSBtb2RlbDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBfaXNEZXJpdmVkSW5kZXg6IGZ1bmN0aW9uKHByb3RvKSB7XG4gICAgICAgIGlmICghcHJvdG8gfHwgdHlwZW9mIHByb3RvLl9kZXJpdmVkICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm90by5fZGVyaXZlZCkuaW5kZXhPZih0aGlzLm1haW5JbmRleCkgPj0gMDtcbiAgICB9LFxuXG4gICAgLy8gSW50ZXJuYWwgbWV0aG9kIHRvIGNyZWF0ZSBhIG1vZGVsJ3MgdGllcyB0byBhIGNvbGxlY3Rpb24uXG4gICAgX2FkZFJlZmVyZW5jZTogZnVuY3Rpb24gKG1vZGVsLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX2luZGV4KG1vZGVsKTtcbiAgICAgICAgaWYgKCFtb2RlbC5jb2xsZWN0aW9uKSBtb2RlbC5jb2xsZWN0aW9uID0gdGhpcztcbiAgICAgICAgaWYgKG1vZGVsLm9uKSBtb2RlbC5vbignYWxsJywgdGhpcy5fb25Nb2RlbEV2ZW50LCB0aGlzKTtcbiAgICB9LFxuXG4gICAgICAgIC8vIEludGVybmFsIG1ldGhvZCB0byBzZXZlciBhIG1vZGVsJ3MgdGllcyB0byBhIGNvbGxlY3Rpb24uXG4gICAgX3JlbW92ZVJlZmVyZW5jZTogZnVuY3Rpb24gKG1vZGVsLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICh0aGlzID09PSBtb2RlbC5jb2xsZWN0aW9uKSBkZWxldGUgbW9kZWwuY29sbGVjdGlvbjtcbiAgICAgICAgdGhpcy5fZGVJbmRleChtb2RlbCk7XG4gICAgICAgIGlmIChtb2RlbC5vZmYpIG1vZGVsLm9mZignYWxsJywgdGhpcy5fb25Nb2RlbEV2ZW50LCB0aGlzKTtcbiAgICB9LFxuXG4gICAgX29uTW9kZWxFdmVudDogZnVuY3Rpb24gKGV2ZW50LCBtb2RlbCwgY29sbGVjdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB2YXIgZXZlbnROYW1lID0gZXZlbnQuc3BsaXQoJzonKVswXTtcbiAgICAgICAgdmFyIGF0dHJpYnV0ZSA9IGV2ZW50LnNwbGl0KCc6JylbMV07XG5cbiAgICAgICAgaWYgKChldmVudE5hbWUgPT09ICdhZGQnIHx8IGV2ZW50TmFtZSA9PT0gJ3JlbW92ZScpICYmIGNvbGxlY3Rpb24gIT09IHRoaXMpIHJldHVybjtcbiAgICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2Rlc3Ryb3knKSB0aGlzLnJlbW92ZShtb2RlbCwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChtb2RlbCAmJiBldmVudE5hbWUgPT09ICdjaGFuZ2UnICYmIGF0dHJpYnV0ZSAmJiB0aGlzLl9pbmRleGVzW2F0dHJpYnV0ZV0pIHtcbiAgICAgICAgICAgIHRoaXMuX2RlSW5kZXgobW9kZWwsIGF0dHJpYnV0ZSwgbW9kZWwucHJldmlvdXNBdHRyaWJ1dGVzKClbYXR0cmlidXRlXSk7XG4gICAgICAgICAgICB0aGlzLl9pbmRleChtb2RlbCwgYXR0cmlidXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRyaWdnZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sbGVjdGlvbi5wcm90b3R5cGUsIHtcbiAgICBsZW5ndGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlbHMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBpc0NvbGxlY3Rpb246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG52YXIgYXJyYXlNZXRob2RzID0gW1xuICAgICdpbmRleE9mJyxcbiAgICAnbGFzdEluZGV4T2YnLFxuICAgICdldmVyeScsXG4gICAgJ3NvbWUnLFxuICAgICdmb3JFYWNoJyxcbiAgICAnbWFwJyxcbiAgICAnZmlsdGVyJyxcbiAgICAncmVkdWNlJyxcbiAgICAncmVkdWNlUmlnaHQnXG5dO1xuXG5hcnJheU1ldGhvZHMuZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgQ29sbGVjdGlvbi5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWxzW21ldGhvZF0uYXBwbHkodGhpcy5tb2RlbHMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbn0pO1xuXG4vLyBhbGlhcyBlYWNoL2ZvckVhY2ggZm9yIG1heGltdW0gY29tcGF0aWJpbGl0eVxuQ29sbGVjdGlvbi5wcm90b3R5cGUuZWFjaCA9IENvbGxlY3Rpb24ucHJvdG90eXBlLmZvckVhY2g7XG5cbkNvbGxlY3Rpb24uZXh0ZW5kID0gY2xhc3NFeHRlbmQ7XG5cbm1vZHVsZS5leHBvcnRzID0gQ29sbGVjdGlvbjtcbiIsIi8qJEFNUEVSU0FORF9WRVJTSU9OKi9cbnZhciBTdG9yZSA9IHJlcXVpcmUoJ2tleS10cmVlLXN0b3JlJyk7XG52YXIgZG9tID0gcmVxdWlyZSgnYW1wZXJzYW5kLWRvbScpO1xudmFyIG1hdGNoZXNTZWxlY3RvciA9IHJlcXVpcmUoJ21hdGNoZXMtc2VsZWN0b3InKTtcbnZhciBwYXJ0aWFsID0gcmVxdWlyZSgnbG9kYXNoL3BhcnRpYWwnKTtcbnZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcblxuZnVuY3Rpb24gZ2V0TWF0Y2hlcyhlbCwgc2VsZWN0b3IsIGZpcnN0T25seSkge1xuICAgIGlmIChzZWxlY3RvciA9PT0gJycpIHJldHVybiBbZWxdO1xuICAgIHZhciBtYXRjaGVzID0gW107XG4gICAgaWYgKCFzZWxlY3RvcikgcmV0dXJuIG1hdGNoZXM7XG4gICAgaWYgKGZpcnN0T25seSkge1xuICAgICAgICBpZiAobWF0Y2hlc1NlbGVjdG9yKGVsLCBzZWxlY3RvcikpIHJldHVybiBbZWxdO1xuICAgICAgICByZXR1cm4gZWwucXVlcnlTZWxlY3RvcihzZWxlY3RvcikgPyBbZWwucXVlcnlTZWxlY3RvcihzZWxlY3RvcildIDogW107XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG1hdGNoZXNTZWxlY3RvcihlbCwgc2VsZWN0b3IpKSBtYXRjaGVzLnB1c2goZWwpO1xuICAgICAgICByZXR1cm4gbWF0Y2hlcy5jb25jYXQoc2xpY2UuY2FsbChlbC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZXMoZWwsIGF0dHJzKSB7XG4gICAgZm9yICh2YXIgbmFtZSBpbiBhdHRycykge1xuICAgICAgICBkb20uc2V0QXR0cmlidXRlKGVsLCBuYW1lLCBhdHRyc1tuYW1lXSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVBdHRyaWJ1dGVzKGVsLCBhdHRycykge1xuICAgIGZvciAodmFyIG5hbWUgaW4gYXR0cnMpIHtcbiAgICAgICAgZG9tLnJlbW92ZUF0dHJpYnV0ZShlbCwgbmFtZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBtYWtlQXJyYXkodmFsKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsKSA/IHZhbCA6IFt2YWxdO1xufVxuXG5mdW5jdGlvbiBzd2l0Y2hIYW5kbGVyKGJpbmRpbmcsIGVsLCB2YWx1ZSkge1xuICAgIC8vIHRoZSBlbGVtZW50IHNlbGVjdG9yIHRvIHNob3dcbiAgICB2YXIgc2hvd1ZhbHVlID0gYmluZGluZy5jYXNlc1t2YWx1ZV07XG5cbiAgICB2YXIgZmlyc3RNYXRjaE9ubHkgPSBiaW5kaW5nLmZpcnN0TWF0Y2hPbmx5O1xuXG4gICAgLy8gaGlkZSBhbGwgdGhlIG90aGVyIGVsZW1lbnRzIHdpdGggYSBkaWZmZXJlbnQgdmFsdWVcbiAgICBmb3IgKHZhciBpdGVtIGluIGJpbmRpbmcuY2FzZXMpIHtcbiAgICAgICAgdmFyIGN1clZhbHVlID0gYmluZGluZy5jYXNlc1tpdGVtXTtcblxuICAgICAgICBpZiAodmFsdWUgIT09IGl0ZW0gJiYgY3VyVmFsdWUgIT09IHNob3dWYWx1ZSkge1xuICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgY3VyVmFsdWUsIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIGRvbS5oaWRlKG1hdGNoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldE1hdGNoZXMoZWwsIHNob3dWYWx1ZSwgZmlyc3RNYXRjaE9ubHkpLmZvckVhY2goZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgIGRvbS5zaG93KG1hdGNoKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0b3IoYmluZGluZykge1xuICAgIGlmICh0eXBlb2YgYmluZGluZy5zZWxlY3RvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGJpbmRpbmcuc2VsZWN0b3I7XG4gICAgfSBlbHNlIGlmIChiaW5kaW5nLmhvb2spIHtcbiAgICAgICAgcmV0dXJuICdbZGF0YS1ob29rfj1cIicgKyBiaW5kaW5nLmhvb2sgKyAnXCJdJztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRCaW5kaW5nRnVuYyhiaW5kaW5nLCBjb250ZXh0KSB7XG4gICAgdmFyIHR5cGUgPSBiaW5kaW5nLnR5cGUgfHwgJ3RleHQnO1xuICAgIHZhciBpc0N1c3RvbUJpbmRpbmcgPSB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJztcbiAgICB2YXIgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihiaW5kaW5nKTtcbiAgICB2YXIgZmlyc3RNYXRjaE9ubHkgPSBiaW5kaW5nLmZpcnN0TWF0Y2hPbmx5O1xuICAgIHZhciB5ZXMgPSBiaW5kaW5nLnllcztcbiAgICB2YXIgbm8gPSBiaW5kaW5nLm5vO1xuICAgIHZhciBoYXNZZXNObyA9ICEhKHllcyB8fCBubyk7XG5cbiAgICAvLyBzdG9yYWdlIHZhcmlhYmxlIGZvciBwcmV2aW91cyBpZiByZWxldmFudFxuICAgIHZhciBwcmV2aW91c1ZhbHVlO1xuXG4gICAgaWYgKGlzQ3VzdG9tQmluZGluZykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVsLCB2YWx1ZSkge1xuICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgc2VsZWN0b3IsIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHR5cGUuY2FsbChjb250ZXh0LCBtYXRjaCwgdmFsdWUsIHByZXZpb3VzVmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcmV2aW91c1ZhbHVlID0gdmFsdWU7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlbCwgdmFsdWUpIHtcbiAgICAgICAgICAgIGdldE1hdGNoZXMoZWwsIHNlbGVjdG9yLCBmaXJzdE1hdGNoT25seSkuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBkb20udGV4dChtYXRjaCwgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnY2xhc3MnKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWwsIHZhbHVlKSB7XG4gICAgICAgICAgICBnZXRNYXRjaGVzKGVsLCBzZWxlY3RvciwgZmlyc3RNYXRjaE9ubHkpLmZvckVhY2goZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgZG9tLnN3aXRjaENsYXNzKG1hdGNoLCBwcmV2aW91c1ZhbHVlLCB2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHByZXZpb3VzVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdhdHRyaWJ1dGUnKSB7XG4gICAgICAgIGlmICghYmluZGluZy5uYW1lKSB0aHJvdyBFcnJvcignYXR0cmlidXRlIGJpbmRpbmdzIG11c3QgaGF2ZSBhIFwibmFtZVwiJyk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWwsIHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgbmFtZXMgPSBtYWtlQXJyYXkoYmluZGluZy5uYW1lKTtcbiAgICAgICAgICAgIGdldE1hdGNoZXMoZWwsIHNlbGVjdG9yLCBmaXJzdE1hdGNoT25seSkuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBuYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbS5zZXRBdHRyaWJ1dGUobWF0Y2gsIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcHJldmlvdXNWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3ZhbHVlJykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVsLCB2YWx1ZSkge1xuICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgc2VsZWN0b3IsIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIGlmICghdmFsdWUgJiYgdmFsdWUgIT09IDApIHZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgLy8gb25seSBhcHBseSBiaW5kaW5ncyBpZiBlbGVtZW50IGlzIG5vdCBjdXJyZW50bHkgZm9jdXNlZFxuICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBtYXRjaCkgbWF0Y2gudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcHJldmlvdXNWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2Jvb2xlYW5DbGFzcycpIHtcbiAgICAgICAgLy8gaWYgdGhlcmUncyBhIGBub2AgY2FzZSB0aGlzIGlzIGFjdHVhbGx5IGEgc3dpdGNoXG4gICAgICAgIGlmIChoYXNZZXNObykge1xuICAgICAgICAgICAgeWVzID0gbWFrZUFycmF5KHllcyB8fCAnJyk7XG4gICAgICAgICAgICBubyA9IG1ha2VBcnJheShubyB8fCAnJyk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVsLCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBwcmV2Q2xhc3MgPSB2YWx1ZSA/IG5vIDogeWVzO1xuICAgICAgICAgICAgICAgIHZhciBuZXdDbGFzcyA9IHZhbHVlID8geWVzIDogbm87XG4gICAgICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgc2VsZWN0b3IsIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBwcmV2Q2xhc3MuZm9yRWFjaChmdW5jdGlvbiAocGMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbS5yZW1vdmVDbGFzcyhtYXRjaCwgcGMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q2xhc3MuZm9yRWFjaChmdW5jdGlvbiAobmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbS5hZGRDbGFzcyhtYXRjaCwgbmMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVsLCB2YWx1ZSwga2V5TmFtZSkge1xuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gbWFrZUFycmF5KGJpbmRpbmcubmFtZSB8fCBrZXlOYW1lKTtcbiAgICAgICAgICAgICAgICB2YXIgaW52ZXJ0ID0gKGJpbmRpbmcuaW52ZXJ0IHx8IGZhbHNlKTtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IChpbnZlcnQgPyAodmFsdWUgPyBmYWxzZSA6IHRydWUpIDogdmFsdWUpO1xuICAgICAgICAgICAgICAgIGdldE1hdGNoZXMoZWwsIHNlbGVjdG9yLCBmaXJzdE1hdGNoT25seSkuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbVt2YWx1ZSA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnXShtYXRjaCwgY2xhc3NOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnYm9vbGVhbkF0dHJpYnV0ZScpIHtcbiAgICAgICAgLy8gaWYgdGhlcmUgYXJlIGB5ZXNgIGFuZCBgbm9gIHNlbGVjdG9ycywgdGhpcyBzd2FwcyBiZXR3ZWVuIHRoZW1cbiAgICAgICAgaWYgKGhhc1llc05vKSB7XG4gICAgICAgICAgICB5ZXMgPSBtYWtlQXJyYXkoeWVzIHx8ICcnKTtcbiAgICAgICAgICAgIG5vID0gbWFrZUFycmF5KG5vIHx8ICcnKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWwsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHByZXZBdHRyaWJ1dGUgPSB2YWx1ZSA/IG5vIDogeWVzO1xuICAgICAgICAgICAgICAgIHZhciBuZXdBdHRyaWJ1dGUgPSB2YWx1ZSA/IHllcyA6IG5vO1xuICAgICAgICAgICAgICAgIGdldE1hdGNoZXMoZWwsIHNlbGVjdG9yLCBmaXJzdE1hdGNoT25seSkuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldkF0dHJpYnV0ZS5mb3JFYWNoKGZ1bmN0aW9uIChwYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tLnJlbW92ZUF0dHJpYnV0ZShtYXRjaCwgcGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgbmV3QXR0cmlidXRlLmZvckVhY2goZnVuY3Rpb24gKG5hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb20uYWRkQXR0cmlidXRlKG1hdGNoLCBuYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWwsIHZhbHVlLCBrZXlOYW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBtYWtlQXJyYXkoYmluZGluZy5uYW1lIHx8IGtleU5hbWUpO1xuICAgICAgICAgICAgICAgIHZhciBpbnZlcnQgPSAoYmluZGluZy5pbnZlcnQgfHwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gKGludmVydCA/ICh2YWx1ZSA/IGZhbHNlIDogdHJ1ZSkgOiB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgc2VsZWN0b3IsIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBuYW1lLmZvckVhY2goZnVuY3Rpb24gKGF0dHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbVt2YWx1ZSA/ICdhZGRBdHRyaWJ1dGUnIDogJ3JlbW92ZUF0dHJpYnV0ZSddKG1hdGNoLCBhdHRyKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAndG9nZ2xlJykge1xuICAgICAgICB2YXIgbW9kZSA9IChiaW5kaW5nLm1vZGUgfHwgJ2Rpc3BsYXknKTtcbiAgICAgICAgdmFyIGludmVydCA9IChiaW5kaW5nLmludmVydCB8fCBmYWxzZSk7XG4gICAgICAgIC8vIHRoaXMgZG9lc24ndCByZXF1aXJlIGEgc2VsZWN0b3Igc2luY2Ugd2UgY2FuIHBhc3MgeWVzL25vIHNlbGVjdG9yc1xuICAgICAgICBpZiAoaGFzWWVzTm8pIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWwsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgeWVzLCBmaXJzdE1hdGNoT25seSkuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9tW3ZhbHVlID8gJ3Nob3cnIDogJ2hpZGUnXShtYXRjaCwgbW9kZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgbm8sIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBkb21bdmFsdWUgPyAnaGlkZScgOiAnc2hvdyddKG1hdGNoLCBtb2RlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVsLCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gKGludmVydCA/ICh2YWx1ZSA/IGZhbHNlIDogdHJ1ZSkgOiB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgZ2V0TWF0Y2hlcyhlbCwgc2VsZWN0b3IsIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBkb21bdmFsdWUgPyAnc2hvdycgOiAnaGlkZSddKG1hdGNoLCBtb2RlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzd2l0Y2gnKSB7XG4gICAgICAgIGlmICghYmluZGluZy5jYXNlcykgdGhyb3cgRXJyb3IoJ3N3aXRjaCBiaW5kaW5ncyBtdXN0IGhhdmUgXCJjYXNlc1wiJyk7XG4gICAgICAgIHJldHVybiBwYXJ0aWFsKHN3aXRjaEhhbmRsZXIsIGJpbmRpbmcpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2lubmVySFRNTCcpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlbCwgdmFsdWUpIHtcbiAgICAgICAgICAgIGdldE1hdGNoZXMoZWwsIHNlbGVjdG9yLCBmaXJzdE1hdGNoT25seSkuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBkb20uaHRtbChtYXRjaCwgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnc3dpdGNoQ2xhc3MnKSB7XG4gICAgICAgIGlmICghYmluZGluZy5jYXNlcykgdGhyb3cgRXJyb3IoJ3N3aXRjaENsYXNzIGJpbmRpbmdzIG11c3QgaGF2ZSBcImNhc2VzXCInKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlbCwgdmFsdWUsIGtleU5hbWUpIHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gbWFrZUFycmF5KGJpbmRpbmcubmFtZSB8fCBrZXlOYW1lKTtcbiAgICAgICAgICAgIGZvciAodmFyIGl0ZW0gaW4gYmluZGluZy5jYXNlcykge1xuICAgICAgICAgICAgICAgIGdldE1hdGNoZXMoZWwsIGJpbmRpbmcuY2FzZXNbaXRlbV0sIGZpcnN0TWF0Y2hPbmx5KS5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBuYW1lLmZvckVhY2goZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9tW3ZhbHVlID09PSBpdGVtID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyddKG1hdGNoLCBjbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzd2l0Y2hBdHRyaWJ1dGUnKSB7XG4gICAgICAgIGlmICghYmluZGluZy5jYXNlcykgdGhyb3cgRXJyb3IoJ3N3aXRjaEF0dHJpYnV0ZSBiaW5kaW5ncyBtdXN0IGhhdmUgXCJjYXNlc1wiJyk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWwsIHZhbHVlLCBrZXlOYW1lKSB7XG4gICAgICAgICAgICBnZXRNYXRjaGVzKGVsLCBzZWxlY3RvciwgZmlyc3RNYXRjaE9ubHkpLmZvckVhY2goZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQXR0cmlidXRlcyhtYXRjaCwgcHJldmlvdXNWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlIGluIGJpbmRpbmcuY2FzZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJzID0gYmluZGluZy5jYXNlc1t2YWx1ZV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXR0cnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRycyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnNbYmluZGluZy5uYW1lIHx8IGtleU5hbWVdID0gYmluZGluZy5jYXNlc1t2YWx1ZV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2V0QXR0cmlidXRlcyhtYXRjaCwgYXR0cnMpO1xuXG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsdWUgPSBhdHRycztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIHN1Y2ggYmluZGluZyB0eXBlOiAnICsgdHlwZSk7XG4gICAgfVxufVxuXG4vLyByZXR1cm5zIGEga2V5LXRyZWUtc3RvcmUgb2YgZnVuY3Rpb25zXG4vLyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIGFueSBlbGVtZW50L21vZGVsLlxuXG4vLyBhbGwgcmVzdWx0aW5nIGZ1bmN0aW9ucyBzaG91bGQgYmUgY2FsbGVkXG4vLyBsaWtlIGZ1bmMoZWwsIHZhbHVlLCBsYXN0S2V5TmFtZSlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpbmRpbmdzLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0b3JlID0gbmV3IFN0b3JlKCk7XG4gICAgdmFyIGtleSwgY3VycmVudDtcblxuICAgIGZvciAoa2V5IGluIGJpbmRpbmdzKSB7XG4gICAgICAgIGN1cnJlbnQgPSBiaW5kaW5nc1trZXldO1xuICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBzdG9yZS5hZGQoa2V5LCBnZXRCaW5kaW5nRnVuYyh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiBjdXJyZW50XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5mb3JFYWNoKSB7XG4gICAgICAgICAgICBjdXJyZW50LmZvckVhY2goZnVuY3Rpb24gKGJpbmRpbmcpIHtcbiAgICAgICAgICAgICAgICBzdG9yZS5hZGQoa2V5LCBnZXRCaW5kaW5nRnVuYyhiaW5kaW5nLCBjb250ZXh0KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0b3JlLmFkZChrZXksIGdldEJpbmRpbmdGdW5jKGN1cnJlbnQsIGNvbnRleHQpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdG9yZTtcbn07XG4iLCIvKiRBTVBFUlNBTkRfVkVSU0lPTiovXG52YXIgZG9tID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgdGV4dDogZnVuY3Rpb24gKGVsLCB2YWwpIHtcbiAgICAgICAgZWwudGV4dENvbnRlbnQgPSBnZXRTdHJpbmcodmFsKTtcbiAgICB9LFxuICAgIC8vIG9wdGltaXplIGlmIHdlIGhhdmUgY2xhc3NMaXN0XG4gICAgYWRkQ2xhc3M6IGZ1bmN0aW9uIChlbCwgY2xzKSB7XG4gICAgICAgIGNscyA9IGdldFN0cmluZyhjbHMpO1xuICAgICAgICBpZiAoIWNscykgcmV0dXJuO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjbHMpKSB7XG4gICAgICAgICAgICBjbHMuZm9yRWFjaChmdW5jdGlvbihjKSB7XG4gICAgICAgICAgICAgICAgZG9tLmFkZENsYXNzKGVsLCBjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGVsLmNsYXNzTGlzdCkge1xuICAgICAgICAgICAgZWwuY2xhc3NMaXN0LmFkZChjbHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNDbGFzcyhlbCwgY2xzKSkge1xuICAgICAgICAgICAgICAgIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgZWwuY2xhc3NMaXN0LmFkZChjbHMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsLmNsYXNzTmFtZSArPSAnICcgKyBjbHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICByZW1vdmVDbGFzczogZnVuY3Rpb24gKGVsLCBjbHMpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2xzKSkge1xuICAgICAgICAgICAgY2xzLmZvckVhY2goZnVuY3Rpb24oYykge1xuICAgICAgICAgICAgICAgIGRvbS5yZW1vdmVDbGFzcyhlbCwgYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICAgICAgICAgIGNscyA9IGdldFN0cmluZyhjbHMpO1xuICAgICAgICAgICAgaWYgKGNscykgZWwuY2xhc3NMaXN0LnJlbW92ZShjbHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbWF5IGJlIGZhc3RlciB0byBub3QgZWRpdCB1bmxlc3Mgd2Uga25vdyB3ZSBoYXZlIGl0P1xuICAgICAgICAgICAgZWwuY2xhc3NOYW1lID0gZWwuY2xhc3NOYW1lLnJlcGxhY2UobmV3IFJlZ0V4cCgnKF58XFxcXGIpJyArIGNscy5zcGxpdCgnICcpLmpvaW4oJ3wnKSArICcoXFxcXGJ8JCknLCAnZ2knKSwgJyAnKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaGFzQ2xhc3M6IGhhc0NsYXNzLFxuICAgIHN3aXRjaENsYXNzOiBmdW5jdGlvbiAoZWwsIHByZXZDbHMsIG5ld0Nscykge1xuICAgICAgICBpZiAocHJldkNscykgdGhpcy5yZW1vdmVDbGFzcyhlbCwgcHJldkNscyk7XG4gICAgICAgIHRoaXMuYWRkQ2xhc3MoZWwsIG5ld0Nscyk7XG4gICAgfSxcbiAgICAvLyBtYWtlcyBzdXJlIGF0dHJpYnV0ZSAod2l0aCBubyBjb250ZW50KSBpcyBhZGRlZFxuICAgIC8vIGlmIGV4aXN0cyBpdCB3aWxsIGJlIGNsZWFyZWQgb2YgY29udGVudFxuICAgIGFkZEF0dHJpYnV0ZTogZnVuY3Rpb24gKGVsLCBhdHRyKSB7XG4gICAgICAgIC8vIHNldHRpbmcgdG8gZW1wdHkgc3RyaW5nIGRvZXMgc2FtZVxuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoYXR0ciwgJycpO1xuICAgICAgICAvLyBTb21lIGJyb3dzZXJzIHdvbid0IHVwZGF0ZSBVSSBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzIHVubGVzcyB5b3VcbiAgICAgICAgLy8gc2V0IGl0IGRpcmVjdGx5LiBTbyB3ZSBkbyBib3RoXG4gICAgICAgIGlmIChoYXNCb29sZWFuUHJvcGVydHkoZWwsIGF0dHIpKSBlbFthdHRyXSA9IHRydWU7XG4gICAgfSxcbiAgICAvLyBjb21wbGV0ZWx5IHJlbW92ZXMgYXR0cmlidXRlXG4gICAgcmVtb3ZlQXR0cmlidXRlOiBmdW5jdGlvbiAoZWwsIGF0dHIpIHtcbiAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGF0dHIpO1xuICAgICAgICBpZiAoaGFzQm9vbGVhblByb3BlcnR5KGVsLCBhdHRyKSkgZWxbYXR0cl0gPSBmYWxzZTtcbiAgICB9LFxuICAgIC8vIHNldHMgYXR0cmlidXRlIHRvIHN0cmluZyB2YWx1ZSBnaXZlbiwgY2xlYXJpbmcgYW55IGN1cnJlbnQgdmFsdWVcbiAgICBzZXRBdHRyaWJ1dGU6IGZ1bmN0aW9uIChlbCwgYXR0ciwgdmFsdWUpIHtcbiAgICAgICAgZWwuc2V0QXR0cmlidXRlKGF0dHIsIGdldFN0cmluZyh2YWx1ZSkpO1xuICAgIH0sXG4gICAgZ2V0QXR0cmlidXRlOiBmdW5jdGlvbiAoZWwsIGF0dHIpIHtcbiAgICAgICAgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShhdHRyKTtcbiAgICB9LFxuICAgIGhhc0F0dHJpYnV0ZTogZnVuY3Rpb24gKGVsLCBhdHRyKSB7XG4gICAgICAgIHJldHVybiBlbC5oYXNBdHRyaWJ1dGUoYXR0cik7XG4gICAgfSxcbiAgICBoaWRlOiBmdW5jdGlvbiAoZWwsIG1vZGUpIHtcbiAgICAgICAgaWYgKCFtb2RlKSBtb2RlID0gJ2Rpc3BsYXknO1xuICAgICAgICBpZiAoIWlzSGlkZGVuKGVsKSkge1xuICAgICAgICAgICAgc3RvcmVEaXNwbGF5U3R5bGUoZWwsIG1vZGUpO1xuICAgICAgICAgICAgaGlkZShlbCwgbW9kZSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8vIHNob3cgZWxlbWVudFxuICAgIHNob3c6IGZ1bmN0aW9uIChlbCwgbW9kZSkge1xuICAgICAgICBpZiAoIW1vZGUpIG1vZGUgPSAnZGlzcGxheSc7XG4gICAgICAgIHNob3coZWwsIG1vZGUpO1xuICAgIH0sXG4gICAgdG9nZ2xlOiBmdW5jdGlvbiAoZWwsIG1vZGUpIHtcbiAgICAgICAgaWYgKCFpc0hpZGRlbihlbCkpIHtcbiAgICAgICAgICAgIGRvbS5oaWRlKGVsLCBtb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvbS5zaG93KGVsLCBtb2RlKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaHRtbDogZnVuY3Rpb24gKGVsLCBjb250ZW50KSB7XG4gICAgICAgIGVsLmlubmVySFRNTCA9IGNvbnRlbnQ7XG4gICAgfVxufTtcblxuLy8gaGVscGVyc1xuZnVuY3Rpb24gZ2V0U3RyaW5nKHZhbCkge1xuICAgIGlmICghdmFsICYmIHZhbCAhPT0gMCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGhhc0NsYXNzKGVsLCBjbHMpIHtcbiAgICBpZiAoZWwuY2xhc3NMaXN0KSB7XG4gICAgICAgIHJldHVybiBlbC5jbGFzc0xpc3QuY29udGFpbnMoY2xzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCgnKF58ICknICsgY2xzICsgJyggfCQpJywgJ2dpJykudGVzdChlbC5jbGFzc05hbWUpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaGFzQm9vbGVhblByb3BlcnR5KGVsLCBwcm9wKSB7XG4gICAgdmFyIHZhbCA9IGVsW3Byb3BdO1xuICAgIHJldHVybiBwcm9wIGluIGVsICYmICh2YWwgPT09IHRydWUgfHwgdmFsID09PSBmYWxzZSk7XG59XG5cbmZ1bmN0aW9uIGlzSGlkZGVuIChlbCkge1xuICAgIHJldHVybiBkb20uZ2V0QXR0cmlidXRlKGVsLCAnZGF0YS1hbmRkb20taGlkZGVuJykgPT09ICd0cnVlJztcbn1cblxuZnVuY3Rpb24gc3RvcmVEaXNwbGF5U3R5bGUgKGVsLCBtb2RlKSB7XG4gICAgZG9tLnNldEF0dHJpYnV0ZShlbCwgJ2RhdGEtYW5kZG9tLScgKyBtb2RlLCBlbC5zdHlsZVttb2RlXSk7XG59XG5cbmZ1bmN0aW9uIHNob3cgKGVsLCBtb2RlKSB7XG4gICAgZWwuc3R5bGVbbW9kZV0gPSBkb20uZ2V0QXR0cmlidXRlKGVsLCAnZGF0YS1hbmRkb20tJyArIG1vZGUpIHx8ICcnO1xuICAgIGRvbS5yZW1vdmVBdHRyaWJ1dGUoZWwsICdkYXRhLWFuZGRvbS1oaWRkZW4nKTtcbn1cblxuZnVuY3Rpb24gaGlkZSAoZWwsIG1vZGUpIHtcbiAgICBkb20uc2V0QXR0cmlidXRlKGVsLCAnZGF0YS1hbmRkb20taGlkZGVuJywgJ3RydWUnKTtcbiAgICBlbC5zdHlsZVttb2RlXSA9IChtb2RlID09PSAndmlzaWJpbGl0eScgPyAnaGlkZGVuJyA6ICdub25lJyk7XG59XG4iLCIvKiRBTVBFUlNBTkRfVkVSU0lPTiovXG52YXIgcnVuT25jZSA9IHJlcXVpcmUoJ2xvZGFzaC9vbmNlJyk7XG52YXIga2V5cyA9IHJlcXVpcmUoJ2xvZGFzaC9rZXlzJyk7XG52YXIgaXNFbXB0eSA9IHJlcXVpcmUoJ2xvZGFzaC9pc0VtcHR5Jyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpO1xudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL2xpYnMvdXRpbHMnKTtcblxudmFyIEV2ZW50cyA9IHtcbiAgICAvLyBCaW5kIGFuIGV2ZW50IHRvIGEgYGNhbGxiYWNrYCBmdW5jdGlvbi4gUGFzc2luZyBgXCJhbGxcImAgd2lsbCBiaW5kXG4gICAgLy8gdGhlIGNhbGxiYWNrIHRvIGFsbCBldmVudHMgZmlyZWQuXG4gICAgb246IGZ1bmN0aW9uIChuYW1lLCBjYWxsYmFjaywgY29udGV4dCkge1xuICAgICAgICBpZiAoIXV0aWxzLmV2ZW50c0FwaSh0aGlzLCAnb24nLCBuYW1lLCBbY2FsbGJhY2ssIGNvbnRleHRdKSB8fCAhY2FsbGJhY2spIHJldHVybiB0aGlzO1xuICAgICAgICB0aGlzLl9ldmVudHMgfHwgKHRoaXMuX2V2ZW50cyA9IHt9KTtcbiAgICAgICAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50c1tuYW1lXSB8fCAodGhpcy5fZXZlbnRzW25hbWVdID0gW10pO1xuICAgICAgICBldmVudHMucHVzaCh7Y2FsbGJhY2s6IGNhbGxiYWNrLCBjb250ZXh0OiBjb250ZXh0LCBjdHg6IGNvbnRleHQgfHwgdGhpc30pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLy8gQmluZCBhbiBldmVudCB0byBvbmx5IGJlIHRyaWdnZXJlZCBhIHNpbmdsZSB0aW1lLiBBZnRlciB0aGUgZmlyc3QgdGltZVxuICAgIC8vIHRoZSBjYWxsYmFjayBpcyBpbnZva2VkLCBpdCB3aWxsIGJlIHJlbW92ZWQuXG4gICAgb25jZTogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gICAgICAgIGlmICghdXRpbHMuZXZlbnRzQXBpKHRoaXMsICdvbmNlJywgbmFtZSwgW2NhbGxiYWNrLCBjb250ZXh0XSkgfHwgIWNhbGxiYWNrKSByZXR1cm4gdGhpcztcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB2YXIgb25jZSA9IHJ1bk9uY2UoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2VsZi5vZmYobmFtZSwgb25jZSk7XG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9KTtcbiAgICAgICAgb25jZS5fY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgcmV0dXJuIHRoaXMub24obmFtZSwgb25jZSwgY29udGV4dCk7XG4gICAgfSxcblxuICAgIC8vIFJlbW92ZSBvbmUgb3IgbWFueSBjYWxsYmFja3MuIElmIGBjb250ZXh0YCBpcyBudWxsLCByZW1vdmVzIGFsbFxuICAgIC8vIGNhbGxiYWNrcyB3aXRoIHRoYXQgZnVuY3Rpb24uIElmIGBjYWxsYmFja2AgaXMgbnVsbCwgcmVtb3ZlcyBhbGxcbiAgICAvLyBjYWxsYmFja3MgZm9yIHRoZSBldmVudC4gSWYgYG5hbWVgIGlzIG51bGwsIHJlbW92ZXMgYWxsIGJvdW5kXG4gICAgLy8gY2FsbGJhY2tzIGZvciBhbGwgZXZlbnRzLlxuICAgIG9mZjogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gICAgICAgIHZhciByZXRhaW4sIGV2LCBldmVudHMsIG5hbWVzLCBpLCBsLCBqLCBrO1xuICAgICAgICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdXRpbHMuZXZlbnRzQXBpKHRoaXMsICdvZmYnLCBuYW1lLCBbY2FsbGJhY2ssIGNvbnRleHRdKSkgcmV0dXJuIHRoaXM7XG4gICAgICAgIGlmICghbmFtZSAmJiAhY2FsbGJhY2sgJiYgIWNvbnRleHQpIHtcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IHZvaWQgMDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIG5hbWVzID0gbmFtZSA/IFtuYW1lXSA6IGtleXModGhpcy5fZXZlbnRzKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IG5hbWVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgbmFtZSA9IG5hbWVzW2ldO1xuICAgICAgICAgICAgaWYgKGV2ZW50cyA9IHRoaXMuX2V2ZW50c1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1tuYW1lXSA9IHJldGFpbiA9IFtdO1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayB8fCBjb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDAsIGsgPSBldmVudHMubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldiA9IGV2ZW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY2FsbGJhY2sgJiYgY2FsbGJhY2sgIT09IGV2LmNhbGxiYWNrICYmIGNhbGxiYWNrICE9PSBldi5jYWxsYmFjay5fY2FsbGJhY2spIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb250ZXh0ICYmIGNvbnRleHQgIT09IGV2LmNvbnRleHQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0YWluLnB1c2goZXYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghcmV0YWluLmxlbmd0aCkgZGVsZXRlIHRoaXMuX2V2ZW50c1tuYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyBUcmlnZ2VyIG9uZSBvciBtYW55IGV2ZW50cywgZmlyaW5nIGFsbCBib3VuZCBjYWxsYmFja3MuIENhbGxiYWNrcyBhcmVcbiAgICAvLyBwYXNzZWQgdGhlIHNhbWUgYXJndW1lbnRzIGFzIGB0cmlnZ2VyYCBpcywgYXBhcnQgZnJvbSB0aGUgZXZlbnQgbmFtZVxuICAgIC8vICh1bmxlc3MgeW91J3JlIGxpc3RlbmluZyBvbiBgXCJhbGxcImAsIHdoaWNoIHdpbGwgY2F1c2UgeW91ciBjYWxsYmFjayB0b1xuICAgIC8vIHJlY2VpdmUgdGhlIHRydWUgbmFtZSBvZiB0aGUgZXZlbnQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50KS5cbiAgICB0cmlnZ2VyOiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBpZiAoIXRoaXMuX2V2ZW50cykgcmV0dXJuIHRoaXM7XG4gICAgICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICBpZiAoIXV0aWxzLmV2ZW50c0FwaSh0aGlzLCAndHJpZ2dlcicsIG5hbWUsIGFyZ3MpKSByZXR1cm4gdGhpcztcbiAgICAgICAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50c1tuYW1lXTtcbiAgICAgICAgdmFyIGFsbEV2ZW50cyA9IHRoaXMuX2V2ZW50cy5hbGw7XG4gICAgICAgIGlmIChldmVudHMpIHV0aWxzLnRyaWdnZXJFdmVudHMoZXZlbnRzLCBhcmdzKTtcbiAgICAgICAgaWYgKGFsbEV2ZW50cykgdXRpbHMudHJpZ2dlckV2ZW50cyhhbGxFdmVudHMsIGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyBUZWxsIHRoaXMgb2JqZWN0IHRvIHN0b3AgbGlzdGVuaW5nIHRvIGVpdGhlciBzcGVjaWZpYyBldmVudHMgLi4uIG9yXG4gICAgLy8gdG8gZXZlcnkgb2JqZWN0IGl0J3MgY3VycmVudGx5IGxpc3RlbmluZyB0by5cbiAgICBzdG9wTGlzdGVuaW5nOiBmdW5jdGlvbiAob2JqLCBuYW1lLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgbGlzdGVuaW5nVG8gPSB0aGlzLl9saXN0ZW5pbmdUbztcbiAgICAgICAgaWYgKCFsaXN0ZW5pbmdUbykgcmV0dXJuIHRoaXM7XG4gICAgICAgIHZhciByZW1vdmUgPSAhbmFtZSAmJiAhY2FsbGJhY2s7XG4gICAgICAgIGlmICghY2FsbGJhY2sgJiYgdHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSBjYWxsYmFjayA9IHRoaXM7XG4gICAgICAgIGlmIChvYmopIChsaXN0ZW5pbmdUbyA9IHt9KVtvYmouX2xpc3RlbklkXSA9IG9iajtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICBmb3JFYWNoKGxpc3RlbmluZ1RvLCBmdW5jdGlvbiAoaXRlbSwgaWQpIHtcbiAgICAgICAgICAgIGl0ZW0ub2ZmKG5hbWUsIGNhbGxiYWNrLCBzZWxmKTtcbiAgICAgICAgICAgIGlmIChyZW1vdmUgfHwgaXNFbXB0eShpdGVtLl9ldmVudHMpKSBkZWxldGUgc2VsZi5fbGlzdGVuaW5nVG9baWRdO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8vIGV4dGVuZCBhbiBvYmplY3Qgd2l0aCBldmVudCBjYXBhYmlsaXRpZXMgaWYgcGFzc2VkXG4gICAgLy8gb3IganVzdCByZXR1cm4gYSBuZXcgb25lLlxuICAgIGNyZWF0ZUVtaXR0ZXI6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIGFzc2lnbihvYmogfHwge30sIEV2ZW50cyk7XG4gICAgfSxcblxuICAgIGxpc3RlblRvOiB1dGlscy5jcmVhdGVMaXN0ZW5NZXRob2QoJ29uJyksXG5cbiAgICBsaXN0ZW5Ub09uY2U6IHV0aWxzLmNyZWF0ZUxpc3Rlbk1ldGhvZCgnb25jZScpLFxuXG4gICAgbGlzdGVuVG9BbmRSdW46IGZ1bmN0aW9uIChvYmosIG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMubGlzdGVuVG8uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgaWYgKCFjYWxsYmFjayAmJiB0eXBlb2YgbmFtZSA9PT0gJ29iamVjdCcpIGNhbGxiYWNrID0gdGhpcztcbiAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn07XG5cbi8vIHNldHVwIGFsaWFzZXNcbkV2ZW50cy5iaW5kID0gRXZlbnRzLm9uO1xuRXZlbnRzLnVuYmluZCA9IEV2ZW50cy5vZmY7XG5FdmVudHMucmVtb3ZlTGlzdGVuZXIgPSBFdmVudHMub2ZmO1xuRXZlbnRzLnJlbW92ZUFsbExpc3RlbmVycyA9IEV2ZW50cy5vZmY7XG5FdmVudHMuZW1pdCA9IEV2ZW50cy50cmlnZ2VyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50cztcbiIsInZhciB1bmlxdWVJZCA9IHJlcXVpcmUoJ2xvZGFzaC91bmlxdWVJZCcpO1xudmFyIGV2ZW50U3BsaXR0ZXIgPSAvXFxzKy87XG5cbi8vIEEgZGlmZmljdWx0LXRvLWJlbGlldmUsIGJ1dCBvcHRpbWl6ZWQgaW50ZXJuYWwgZGlzcGF0Y2ggZnVuY3Rpb24gZm9yXG4vLyB0cmlnZ2VyaW5nIGV2ZW50cy4gVHJpZXMgdG8ga2VlcCB0aGUgdXN1YWwgY2FzZXMgc3BlZWR5LlxuZXhwb3J0cy50cmlnZ2VyRXZlbnRzID0gZnVuY3Rpb24gdHJpZ2dlckV2ZW50cyhldmVudHMsIGFyZ3MpIHtcbiAgICB2YXIgZXY7XG4gICAgdmFyIGkgPSAtMTtcbiAgICB2YXIgbCA9IGV2ZW50cy5sZW5ndGg7XG4gICAgdmFyIGExID0gYXJnc1swXTtcbiAgICB2YXIgYTIgPSBhcmdzWzFdO1xuICAgIHZhciBhMyA9IGFyZ3NbMl07XG4gICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHdoaWxlICgrK2kgPCBsKSAoZXYgPSBldmVudHNbaV0pLmNhbGxiYWNrLmNhbGwoZXYuY3R4KTsgcmV0dXJuO1xuICAgICAgICBjYXNlIDE6IHdoaWxlICgrK2kgPCBsKSAoZXYgPSBldmVudHNbaV0pLmNhbGxiYWNrLmNhbGwoZXYuY3R4LCBhMSk7IHJldHVybjtcbiAgICAgICAgY2FzZSAyOiB3aGlsZSAoKytpIDwgbCkgKGV2ID0gZXZlbnRzW2ldKS5jYWxsYmFjay5jYWxsKGV2LmN0eCwgYTEsIGEyKTsgcmV0dXJuO1xuICAgICAgICBjYXNlIDM6IHdoaWxlICgrK2kgPCBsKSAoZXYgPSBldmVudHNbaV0pLmNhbGxiYWNrLmNhbGwoZXYuY3R4LCBhMSwgYTIsIGEzKTsgcmV0dXJuO1xuICAgICAgICBkZWZhdWx0OiB3aGlsZSAoKytpIDwgbCkgKGV2ID0gZXZlbnRzW2ldKS5jYWxsYmFjay5hcHBseShldi5jdHgsIGFyZ3MpOyByZXR1cm47XG4gICAgfVxufTtcblxuLy8gSW1wbGVtZW50IGZhbmN5IGZlYXR1cmVzIG9mIHRoZSBFdmVudHMgQVBJIHN1Y2ggYXMgbXVsdGlwbGUgZXZlbnRcbi8vIG5hbWVzIGBcImNoYW5nZSBibHVyXCJgIGFuZCBqUXVlcnktc3R5bGUgZXZlbnQgbWFwcyBge2NoYW5nZTogYWN0aW9ufWBcbi8vIGluIHRlcm1zIG9mIHRoZSBleGlzdGluZyBBUEkuXG5leHBvcnRzLmV2ZW50c0FwaSA9IGZ1bmN0aW9uIGV2ZW50c0FwaShvYmosIGFjdGlvbiwgbmFtZSwgcmVzdCkge1xuICAgIGlmICghbmFtZSkgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBIYW5kbGUgZXZlbnQgbWFwcy5cbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBuYW1lKSB7XG4gICAgICAgICAgICBvYmpbYWN0aW9uXS5hcHBseShvYmosIFtrZXksIG5hbWVba2V5XV0uY29uY2F0KHJlc3QpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHNwYWNlIHNlcGFyYXRlZCBldmVudCBuYW1lcy5cbiAgICBpZiAoZXZlbnRTcGxpdHRlci50ZXN0KG5hbWUpKSB7XG4gICAgICAgIHZhciBuYW1lcyA9IG5hbWUuc3BsaXQoZXZlbnRTcGxpdHRlcik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gbmFtZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICBvYmpbYWN0aW9uXS5hcHBseShvYmosIFtuYW1lc1tpXV0uY29uY2F0KHJlc3QpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vLyBJbnZlcnNpb24tb2YtY29udHJvbCB2ZXJzaW9ucyBvZiBgb25gIGFuZCBgb25jZWAuIFRlbGwgKnRoaXMqIG9iamVjdCB0b1xuLy8gbGlzdGVuIHRvIGFuIGV2ZW50IGluIGFub3RoZXIgb2JqZWN0IC4uLiBrZWVwaW5nIHRyYWNrIG9mIHdoYXQgaXQnc1xuLy8gbGlzdGVuaW5nIHRvLlxuZXhwb3J0cy5jcmVhdGVMaXN0ZW5NZXRob2QgPSBmdW5jdGlvbiBjcmVhdGVMaXN0ZW5NZXRob2QoaW1wbGVtZW50YXRpb24pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbGlzdGVuTWV0aG9kKG9iaiwgbmFtZSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFvYmopIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHJ5aW5nIHRvIGxpc3RlblRvIGV2ZW50OiBcXCcnICsgbmFtZSArICdcXCcgYnV0IHRoZSB0YXJnZXQgb2JqZWN0IGlzIHVuZGVmaW5lZCcpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBsaXN0ZW5pbmdUbyA9IHRoaXMuX2xpc3RlbmluZ1RvIHx8ICh0aGlzLl9saXN0ZW5pbmdUbyA9IHt9KTtcbiAgICAgICAgdmFyIGlkID0gb2JqLl9saXN0ZW5JZCB8fCAob2JqLl9saXN0ZW5JZCA9IHVuaXF1ZUlkKCdsJykpO1xuICAgICAgICBsaXN0ZW5pbmdUb1tpZF0gPSBvYmo7XG4gICAgICAgIGlmICghY2FsbGJhY2sgJiYgdHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSBjYWxsYmFjayA9IHRoaXM7XG4gICAgICAgIGlmICh0eXBlb2Ygb2JqW2ltcGxlbWVudGF0aW9uXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcnlpbmcgdG8gbGlzdGVuVG8gZXZlbnQ6IFxcJycgKyBuYW1lICsgJ1xcJyBvbiBvYmplY3Q6ICcgKyBvYmoudG9TdHJpbmcoKSArICcgYnV0IGl0IGRvZXMgbm90IGhhdmUgYW4gXFwnb25cXCcgbWV0aG9kIHNvIGlzIHVuYmluZGFibGUnKTtcbiAgICAgICAgfVxuICAgICAgICBvYmpbaW1wbGVtZW50YXRpb25dKG5hbWUsIGNhbGxiYWNrLCB0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbn07XG4iLCIvKiRBTVBFUlNBTkRfVkVSU0lPTiovXG52YXIgVmlldyA9IHJlcXVpcmUoJ2FtcGVyc2FuZC12aWV3Jyk7XG52YXIgZG9tID0gcmVxdWlyZSgnYW1wZXJzYW5kLWRvbScpO1xudmFyIG1hdGNoZXNTZWxlY3RvciA9IHJlcXVpcmUoJ21hdGNoZXMtc2VsZWN0b3InKTtcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG5mdW5jdGlvbiBnZXRNYXRjaGVzKGVsLCBzZWxlY3Rvcikge1xuICAgIGlmIChzZWxlY3RvciA9PT0gJycpIHJldHVybiBbZWxdO1xuICAgIHZhciBtYXRjaGVzID0gW107XG4gICAgaWYgKG1hdGNoZXNTZWxlY3RvcihlbCwgc2VsZWN0b3IpKSBtYXRjaGVzLnB1c2goZWwpO1xuICAgIHJldHVybiBtYXRjaGVzLmNvbmNhdChzbGljZS5jYWxsKGVsLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVmlldy5leHRlbmQoe1xuICAgIHRlbXBsYXRlOiBbXG4gICAgICAgICc8bGFiZWw+JyxcbiAgICAgICAgICAgICc8c3BhbiBkYXRhLWhvb2s9XCJsYWJlbFwiPjwvc3Bhbj4nLFxuICAgICAgICAgICAgJzxpbnB1dCBjbGFzcz1cImZvcm0taW5wdXRcIj4nLFxuICAgICAgICAgICAgJzxkaXYgZGF0YS1ob29rPVwibWVzc2FnZS1jb250YWluZXJcIiBjbGFzcz1cIm1lc3NhZ2UgbWVzc2FnZS1iZWxvdyBtZXNzYWdlLWVycm9yXCI+JyxcbiAgICAgICAgICAgICAgICAnPHAgZGF0YS1ob29rPVwibWVzc2FnZS10ZXh0XCI+PC9wPicsXG4gICAgICAgICAgICAnPC9kaXY+JyxcbiAgICAgICAgJzwvbGFiZWw+J1xuICAgIF0uam9pbignJyksXG4gICAgYmluZGluZ3M6IHtcbiAgICAgICAgJ25hbWUnOiB7XG4gICAgICAgICAgICB0eXBlOiAnYXR0cmlidXRlJyxcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnaW5wdXQsIHRleHRhcmVhJyxcbiAgICAgICAgICAgIG5hbWU6ICduYW1lJ1xuICAgICAgICB9LFxuICAgICAgICAndGFiaW5kZXgnOiB7XG4gICAgICAgICAgICB0eXBlOiAnYXR0cmlidXRlJyxcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnaW5wdXQsIHRleHRhcmVhJyxcbiAgICAgICAgICAgIG5hbWU6ICd0YWJpbmRleCdcbiAgICAgICAgfSxcbiAgICAgICAgJ2xhYmVsJzogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhvb2s6ICdsYWJlbCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3RvZ2dsZScsXG4gICAgICAgICAgICAgICAgaG9vazogJ2xhYmVsJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnbWVzc2FnZSc6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGhvb2s6ICdtZXNzYWdlLXRleHQnXG4gICAgICAgIH0sXG4gICAgICAgICdzaG93TWVzc2FnZSc6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0b2dnbGUnLFxuICAgICAgICAgICAgaG9vazogJ21lc3NhZ2UtY29udGFpbmVyJ1xuICAgICAgICB9LFxuICAgICAgICAncGxhY2Vob2xkZXInOiB7XG4gICAgICAgICAgICB0eXBlOiAnYXR0cmlidXRlJyxcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnaW5wdXQsIHRleHRhcmVhJyxcbiAgICAgICAgICAgIG5hbWU6ICdwbGFjZWhvbGRlcidcbiAgICAgICAgfSxcbiAgICAgICAgJ3JlYWRvbmx5Jzoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW5BdHRyaWJ1dGUnLFxuICAgICAgICAgICAgbmFtZTogJ3JlYWRvbmx5JyxcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnaW5wdXQsIHRleHRhcmVhJ1xuICAgICAgICB9LFxuICAgICAgICAnYXV0b2ZvY3VzJzoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW5BdHRyaWJ1dGUnLFxuICAgICAgICAgICAgbmFtZTogJ2F1dG9mb2N1cycsXG4gICAgICAgICAgICBzZWxlY3RvcjogJ2lucHV0LCB0ZXh0YXJlYSdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKHNwZWMpIHtcbiAgICAgICAgc3BlYyB8fCAoc3BlYyA9IHt9KTtcbiAgICAgICAgdGhpcy50ZXN0cyA9IHRoaXMudGVzdHMgfHwgc3BlYy50ZXN0cyB8fCBbXTtcbiAgICAgICAgdGhpcy5vbignY2hhbmdlOnR5cGUnLCB0aGlzLmhhbmRsZVR5cGVDaGFuZ2UsIHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2VkID0gdGhpcy5oYW5kbGVJbnB1dENoYW5nZWQuYmluZCh0aGlzKTtcbiAgICAgICAgdmFyIHZhbHVlID0gIXNwZWMudmFsdWUgJiYgc3BlYy52YWx1ZSAhPT0gMCA/ICcnIDogc3BlYy52YWx1ZTtcbiAgICAgICAgdGhpcy5zdGFydGluZ1ZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLm9uKCdjaGFuZ2U6dmFsaWQgY2hhbmdlOnZhbHVlJywgdGhpcy5yZXBvcnRUb1BhcmVudCwgdGhpcyk7XG4gICAgICAgIHRoaXMub24oJ2NoYW5nZTp2YWxpZGl0eUNsYXNzJywgdGhpcy52YWxpZGl0eUNsYXNzQ2hhbmdlZCwgdGhpcyk7XG4gICAgICAgIGlmIChzcGVjLmF1dG9SZW5kZXIpIHRoaXMuYXV0b1JlbmRlciA9IHNwZWMuYXV0b1JlbmRlcjtcbiAgICAgICAgaWYgKHNwZWMudGVtcGxhdGUpIHRoaXMudGVtcGxhdGUgPSBzcGVjLnRlbXBsYXRlO1xuICAgICAgICBpZiAoc3BlYy5iZWZvcmVTdWJtaXQpIHRoaXMuYmVmb3JlU3VibWl0ID0gc3BlYy5iZWZvcmVTdWJtaXQ7XG4gICAgfSxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJXaXRoVGVtcGxhdGUoKTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMucXVlcnkoJ2lucHV0JykgfHwgdGhpcy5xdWVyeSgndGV4dGFyZWEnKTtcbiAgICAgICAgLy8gc3dpdGNoZXMgb3V0IGlucHV0IGZvciB0ZXh0YXJlYSBpZiB0aGF0J3Mgd2hhdCB3ZSB3YW50XG4gICAgICAgIHRoaXMuaGFuZGxlVHlwZUNoYW5nZSgpO1xuICAgICAgICB0aGlzLmluaXRJbnB1dEJpbmRpbmdzKCk7XG4gICAgICAgIC8vIFNraXAgdmFsaWRhdGlvbiBvbiBpbml0aWFsIHNldFZhbHVlXG4gICAgICAgIC8vIGlmIHRoZSBmaWVsZCBpcyBub3QgcmVxdWlyZWRcbiAgICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLmlucHV0VmFsdWUsICF0aGlzLnJlcXVpcmVkKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgICBpbnB1dFZhbHVlOiAnYW55JyxcbiAgICAgICAgc3RhcnRpbmdWYWx1ZTogJ2FueScsXG4gICAgICAgIG5hbWU6ICdzdHJpbmcnLFxuICAgICAgICB0eXBlOiBbJ3N0cmluZycsIHRydWUsICd0ZXh0J10sXG4gICAgICAgIHBsYWNlaG9sZGVyOiBbJ3N0cmluZycsIHRydWUsICcnXSxcbiAgICAgICAgbGFiZWw6IFsnc3RyaW5nJywgdHJ1ZSwgJyddLFxuICAgICAgICByZXF1aXJlZDogWydib29sZWFuJywgdHJ1ZSwgdHJ1ZV0sXG4gICAgICAgIGRpcmVjdGx5RWRpdGVkOiBbJ2Jvb2xlYW4nLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgIHJlYWRvbmx5OiBbJ2Jvb2xlYW4nLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgIGF1dG9mb2N1czogWydib29sZWFuJywgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICBzaG91bGRWYWxpZGF0ZTogWydib29sZWFuJywgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICBtZXNzYWdlOiBbJ3N0cmluZycsIHRydWUsICcnXSxcbiAgICAgICAgcmVxdWlyZWRNZXNzYWdlOiBbJ3N0cmluZycsIHRydWUsICdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiddLFxuICAgICAgICB2YWxpZENsYXNzOiBbJ3N0cmluZycsIHRydWUsICdpbnB1dC12YWxpZCddLFxuICAgICAgICBpbnZhbGlkQ2xhc3M6IFsnc3RyaW5nJywgdHJ1ZSwgJ2lucHV0LWludmFsaWQnXSxcbiAgICAgICAgdmFsaWRpdHlDbGFzc1NlbGVjdG9yOiBbJ3N0cmluZycsIHRydWUsICdpbnB1dCwgdGV4dGFyZWEnXSxcbiAgICAgICAgdGFiaW5kZXg6IFsnbnVtYmVyJywgdHJ1ZSwgMF1cbiAgICB9LFxuICAgIGRlcml2ZWQ6IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIGRlcHM6IFsnaW5wdXRWYWx1ZSddLFxuICAgICAgICAgICAgZm46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB2YWxpZDoge1xuICAgICAgICAgICAgY2FjaGU6IGZhbHNlLFxuICAgICAgICAgICAgZGVwczogWydpbnB1dFZhbHVlJ10sXG4gICAgICAgICAgICBmbjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5ydW5UZXN0cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzaG93TWVzc2FnZToge1xuICAgICAgICAgICAgZGVwczogWydtZXNzYWdlJywgJ3Nob3VsZFZhbGlkYXRlJ10sXG4gICAgICAgICAgICBmbjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3VsZFZhbGlkYXRlICYmIHRoaXMubWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2hhbmdlZDoge1xuICAgICAgICAgICAgZGVwczogWydpbnB1dFZhbHVlJywgJ3N0YXJ0aW5nVmFsdWUnXSxcbiAgICAgICAgICAgIGZuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRWYWx1ZSAhPT0gdGhpcy5zdGFydGluZ1ZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB2YWxpZGl0eUNsYXNzOiB7XG4gICAgICAgICAgICBkZXBzOiBbJ3ZhbGlkJywgJ3ZhbGlkQ2xhc3MnLCAnaW52YWxpZENsYXNzJywgJ3Nob3VsZFZhbGlkYXRlJ10sXG4gICAgICAgICAgICBmbjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaG91bGRWYWxpZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsaWQgPyB0aGlzLnZhbGlkQ2xhc3MgOiB0aGlzLmludmFsaWRDbGFzcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHNldFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIHNraXBWYWxpZGF0aW9uKSB7XG4gICAgICAgIGlmICghdGhpcy5pbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dC52YWx1ZSA9ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnB1dC52YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5jbGVhbih0aGlzLmlucHV0LnZhbHVlKTtcbiAgICAgICAgaWYgKCFza2lwVmFsaWRhdGlvbiAmJiAhdGhpcy5nZXRFcnJvck1lc3NhZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5zaG91bGRWYWxpZGF0ZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoc2tpcFZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc2hvdWxkVmFsaWRhdGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZ2V0RXJyb3JNZXNzYWdlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBtZXNzYWdlID0gJyc7XG4gICAgICAgIGlmICh0aGlzLnJlcXVpcmVkICYmIHRoaXMudmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1aXJlZE1lc3NhZ2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAodGhpcy50ZXN0cyB8fCBbXSkuc29tZShmdW5jdGlvbiAodGVzdCkge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSB0ZXN0LmNhbGwodGhpcywgdGhpcy52YWx1ZSkgfHwgJyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVUeXBlQ2hhbmdlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICd0ZXh0YXJlYScgJiYgdGhpcy5pbnB1dC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICd0ZXh0YXJlYScpIHtcbiAgICAgICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLmlucHV0LnBhcmVudE5vZGU7XG4gICAgICAgICAgICB2YXIgdGV4dGFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgICAgICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZCh0ZXh0YXJlYSwgdGhpcy5pbnB1dCk7XG4gICAgICAgICAgICB0aGlzLmlucHV0ID0gdGV4dGFyZWE7XG4gICAgICAgICAgICB0aGlzLl9hcHBseUJpbmRpbmdzRm9yS2V5KCcnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQudHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgY2xlYW46IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnR5cGUgPT09ICdudW1iZXInKSA/IE51bWJlcih2YWwpIDogdmFsLnRyaW0oKTtcbiAgICB9LFxuICAgIC8vYGlucHV0YCBldmVudCBoYW5kbGVyXG4gICAgaGFuZGxlSW5wdXRDaGFuZ2VkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLmlucHV0KSB7XG4gICAgICAgICAgICB0aGlzLmRpcmVjdGx5RWRpdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmNsZWFuKHRoaXMuaW5wdXQudmFsdWUpO1xuICAgIH0sXG4gICAgLy9gY2hhbmdlYCBldmVudCBoYW5kbGVyXG4gICAgaGFuZGxlQ2hhbmdlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0VmFsdWUgJiYgdGhpcy5jaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLnNob3VsZFZhbGlkYXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJ1blRlc3RzKCk7XG4gICAgfSxcbiAgICBiZWZvcmVTdWJtaXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gY2F0Y2ggdW5kZXRlY3RlZCBpbnB1dCBjaGFuZ2VzIHRoYXQgd2VyZSBub3QgY2F1Z2h0IGR1ZSB0byBsYWNrIG9mXG4gICAgICAgIC8vIGJyb3dzZXIgZXZlbnQgZmlyaW5nIHNlZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0FtcGVyc2FuZEpTL2FtcGVyc2FuZC1pbnB1dC12aWV3L2lzc3Vlcy8yXG4gICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IHRoaXMuY2xlYW4odGhpcy5pbnB1dC52YWx1ZSk7XG5cbiAgICAgICAgLy8gYXQgdGhlIHBvaW50IHdoZXJlIHdlJ3ZlIHRyaWVkXG4gICAgICAgIC8vIHRvIHN1Ym1pdCwgd2Ugd2FudCB0byB2YWxpZGF0ZVxuICAgICAgICAvLyBldmVyeXRoaW5nIGZyb20gbm93IG9uLlxuICAgICAgICB0aGlzLnNob3VsZFZhbGlkYXRlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ydW5UZXN0cygpO1xuICAgIH0sXG4gICAgcnVuVGVzdHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZSgpO1xuICAgICAgICBpZiAoIW1lc3NhZ2UgJiYgdGhpcy5pbnB1dFZhbHVlICYmIHRoaXMuY2hhbmdlZCkge1xuICAgICAgICAgICAgLy8gaWYgaXQncyBldmVyIGJlZW4gdmFsaWQsXG4gICAgICAgICAgICAvLyB3ZSB3YW50IHRvIHZhbGlkYXRlIGZyb20gbm93XG4gICAgICAgICAgICAvLyBvbi5cbiAgICAgICAgICAgIHRoaXMuc2hvdWxkVmFsaWRhdGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH0sXG4gICAgaW5pdElucHV0QmluZGluZ3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2VkLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5oYW5kbGVDaGFuZ2UsZmFsc2UpO1xuICAgIH0sXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignaW5wdXQnLCB0aGlzLmhhbmRsZUlucHV0Q2hhbmdlZCwgZmFsc2UpO1xuICAgICAgICB0aGlzLmlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuaGFuZGxlQ2hhbmdlLCBmYWxzZSk7XG4gICAgICAgIFZpZXcucHJvdG90eXBlLnJlbW92ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLnN0YXJ0aW5nVmFsdWUsIHRydWUpOyAvL1NraXAgdmFsaWRhdGlvbiBqdXN0IGxpa2Ugb24gaW5pdGlhbCByZW5kZXJcbiAgICB9LFxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUoJycsIHRydWUpO1xuICAgIH0sXG4gICAgdmFsaWRpdHlDbGFzc0NoYW5nZWQ6IGZ1bmN0aW9uICh2aWV3LCBuZXdDbGFzcykge1xuICAgICAgICB2YXIgb2xkQ2xhc3MgPSB2aWV3LnByZXZpb3VzQXR0cmlidXRlcygpLnZhbGlkaXR5Q2xhc3M7XG4gICAgICAgIGdldE1hdGNoZXModGhpcy5lbCwgdGhpcy52YWxpZGl0eUNsYXNzU2VsZWN0b3IpLmZvckVhY2goZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICBkb20uc3dpdGNoQ2xhc3MobWF0Y2gsIG9sZENsYXNzLCBuZXdDbGFzcyk7XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgcmVwb3J0VG9QYXJlbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB0aGlzLnBhcmVudC51cGRhdGUodGhpcyk7XG4gICAgfVxufSk7XG4iLCIvKiRBTVBFUlNBTkRfVkVSU0lPTiovXG52YXIgU3RhdGUgPSByZXF1aXJlKCdhbXBlcnNhbmQtc3RhdGUnKTtcbnZhciBzeW5jID0gcmVxdWlyZSgnYW1wZXJzYW5kLXN5bmMnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdsb2Rhc2gvYXNzaWduJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCdsb2Rhc2gvaXNPYmplY3QnKTtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJ2xvZGFzaC9jbG9uZScpO1xudmFyIHJlc3VsdCA9IHJlcXVpcmUoJ2xvZGFzaC9yZXN1bHQnKTtcblxuLy8gVGhyb3cgYW4gZXJyb3Igd2hlbiBhIFVSTCBpcyBuZWVkZWQsIGFuZCBub25lIGlzIHN1cHBsaWVkLlxudmFyIHVybEVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQSBcInVybFwiIHByb3BlcnR5IG9yIGZ1bmN0aW9uIG11c3QgYmUgc3BlY2lmaWVkJyk7XG59O1xuXG4vLyBXcmFwIGFuIG9wdGlvbmFsIGVycm9yIGNhbGxiYWNrIHdpdGggYSBmYWxsYmFjayBlcnJvciBldmVudC5cbnZhciB3cmFwRXJyb3IgPSBmdW5jdGlvbiAobW9kZWwsIG9wdGlvbnMpIHtcbiAgICB2YXIgZXJyb3IgPSBvcHRpb25zLmVycm9yO1xuICAgIG9wdGlvbnMuZXJyb3IgPSBmdW5jdGlvbiAocmVzcCkge1xuICAgICAgICBpZiAoZXJyb3IpIGVycm9yKG1vZGVsLCByZXNwLCBvcHRpb25zKTtcbiAgICAgICAgbW9kZWwudHJpZ2dlcignZXJyb3InLCBtb2RlbCwgcmVzcCwgb3B0aW9ucyk7XG4gICAgfTtcbn07XG5cbnZhciBNb2RlbCA9IFN0YXRlLmV4dGVuZCh7XG4gICAgc2F2ZTogZnVuY3Rpb24gKGtleSwgdmFsLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBhdHRycywgbWV0aG9kO1xuXG4gICAgICAgIC8vIEhhbmRsZSBib3RoIGBcImtleVwiLCB2YWx1ZWAgYW5kIGB7a2V5OiB2YWx1ZX1gIC1zdHlsZSBhcmd1bWVudHMuXG4gICAgICAgIGlmIChrZXkgPT0gbnVsbCB8fCB0eXBlb2Yga2V5ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgYXR0cnMgPSBrZXk7XG4gICAgICAgICAgICBvcHRpb25zID0gdmFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgKGF0dHJzID0ge30pW2tleV0gPSB2YWw7XG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zID0gYXNzaWduKHt2YWxpZGF0ZTogdHJ1ZX0sIG9wdGlvbnMpO1xuXG4gICAgICAgIC8vIElmIHdlJ3JlIG5vdCB3YWl0aW5nIGFuZCBhdHRyaWJ1dGVzIGV4aXN0LCBzYXZlIGFjdHMgYXNcbiAgICAgICAgLy8gYHNldChhdHRyKS5zYXZlKG51bGwsIG9wdHMpYCB3aXRoIHZhbGlkYXRpb24uIE90aGVyd2lzZSwgY2hlY2sgaWZcbiAgICAgICAgLy8gdGhlIG1vZGVsIHdpbGwgYmUgdmFsaWQgd2hlbiB0aGUgYXR0cmlidXRlcywgaWYgYW55LCBhcmUgc2V0LlxuICAgICAgICBpZiAoYXR0cnMgJiYgIW9wdGlvbnMud2FpdCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNldChhdHRycywgb3B0aW9ucykpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fdmFsaWRhdGUoYXR0cnMsIG9wdGlvbnMpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZnRlciBhIHN1Y2Nlc3NmdWwgc2VydmVyLXNpZGUgc2F2ZSwgdGhlIGNsaWVudCBpcyAob3B0aW9uYWxseSlcbiAgICAgICAgLy8gdXBkYXRlZCB3aXRoIHRoZSBzZXJ2ZXItc2lkZSBzdGF0ZS5cbiAgICAgICAgaWYgKG9wdGlvbnMucGFyc2UgPT09IHZvaWQgMCkgb3B0aW9ucy5wYXJzZSA9IHRydWU7XG4gICAgICAgIHZhciBtb2RlbCA9IHRoaXM7XG4gICAgICAgIHZhciBzdWNjZXNzID0gb3B0aW9ucy5zdWNjZXNzO1xuICAgICAgICBvcHRpb25zLnN1Y2Nlc3MgPSBmdW5jdGlvbiAocmVzcCkge1xuICAgICAgICAgICAgdmFyIHNlcnZlckF0dHJzID0gbW9kZWwucGFyc2UocmVzcCwgb3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy53YWl0KSBzZXJ2ZXJBdHRycyA9IGFzc2lnbihhdHRycyB8fCB7fSwgc2VydmVyQXR0cnMpO1xuICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHNlcnZlckF0dHJzKSAmJiAhbW9kZWwuc2V0KHNlcnZlckF0dHJzLCBvcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdWNjZXNzKSBzdWNjZXNzKG1vZGVsLCByZXNwLCBvcHRpb25zKTtcbiAgICAgICAgICAgIG1vZGVsLnRyaWdnZXIoJ3N5bmMnLCBtb2RlbCwgcmVzcCwgb3B0aW9ucyk7XG4gICAgICAgIH07XG4gICAgICAgIHdyYXBFcnJvcih0aGlzLCBvcHRpb25zKTtcblxuICAgICAgICBtZXRob2QgPSB0aGlzLmlzTmV3KCkgPyAnY3JlYXRlJyA6IChvcHRpb25zLnBhdGNoID8gJ3BhdGNoJyA6ICd1cGRhdGUnKTtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ3BhdGNoJykgb3B0aW9ucy5hdHRycyA9IGF0dHJzO1xuICAgICAgICAvLyBpZiB3ZSdyZSB3YWl0aW5nIHdlIGhhdmVuJ3QgYWN0dWFsbHkgc2V0IG91ciBhdHRyaWJ1dGVzIHlldCBzb1xuICAgICAgICAvLyB3ZSBuZWVkIHRvIGRvIG1ha2Ugc3VyZSB3ZSBzZW5kIHJpZ2h0IGRhdGFcbiAgICAgICAgaWYgKG9wdGlvbnMud2FpdCAmJiBtZXRob2QgIT09ICdwYXRjaCcpIG9wdGlvbnMuYXR0cnMgPSBhc3NpZ24obW9kZWwuc2VyaWFsaXplKCksIGF0dHJzKTtcbiAgICAgICAgdmFyIHN5bmMgPSB0aGlzLnN5bmMobWV0aG9kLCB0aGlzLCBvcHRpb25zKTtcblxuICAgICAgICAvLyBNYWtlIHRoZSByZXF1ZXN0IGF2YWlsYWJsZSBvbiB0aGUgb3B0aW9ucyBvYmplY3Qgc28gaXQgY2FuIGJlIGFjY2Vzc2VkXG4gICAgICAgIC8vIGZ1cnRoZXIgZG93biB0aGUgbGluZSBieSBgcGFyc2VgLCBhdHRhY2hlZCBsaXN0ZW5lcnMsIGV0Y1xuICAgICAgICAvLyBTYW1lIHRoaW5nIGlzIGRvbmUgYmVsb3cgZm9yIGZldGNoIGFuZCBkZXN0cm95XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9BbXBlcnNhbmRKUy9hbXBlcnNhbmQtY29sbGVjdGlvbi1yZXN0LW1peGluL2NvbW1pdC9kMzJkNzg4YWFmZjkxMjM4N2ViMTEwNmYyZDdhZDE4M2VjMzllMTFhI2RpZmYtODRjODQ3MDMxNjliZjUwMTdiMWJjMzIzNjUzYWNhYTNSMzJcbiAgICAgICAgb3B0aW9ucy54aHIgPSBzeW5jO1xuICAgICAgICByZXR1cm4gc3luYztcbiAgICB9LFxuXG4gICAgLy8gRmV0Y2ggdGhlIG1vZGVsIGZyb20gdGhlIHNlcnZlci4gSWYgdGhlIHNlcnZlcidzIHJlcHJlc2VudGF0aW9uIG9mIHRoZVxuICAgIC8vIG1vZGVsIGRpZmZlcnMgZnJvbSBpdHMgY3VycmVudCBhdHRyaWJ1dGVzLCB0aGV5IHdpbGwgYmUgb3ZlcnJpZGRlbixcbiAgICAvLyB0cmlnZ2VyaW5nIGEgYFwiY2hhbmdlXCJgIGV2ZW50LlxuICAgIGZldGNoOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyA/IGNsb25lKG9wdGlvbnMpIDoge307XG4gICAgICAgIGlmIChvcHRpb25zLnBhcnNlID09PSB2b2lkIDApIG9wdGlvbnMucGFyc2UgPSB0cnVlO1xuICAgICAgICB2YXIgbW9kZWwgPSB0aGlzO1xuICAgICAgICB2YXIgc3VjY2VzcyA9IG9wdGlvbnMuc3VjY2VzcztcbiAgICAgICAgb3B0aW9ucy5zdWNjZXNzID0gZnVuY3Rpb24gKHJlc3ApIHtcbiAgICAgICAgICAgIGlmICghbW9kZWwuc2V0KG1vZGVsLnBhcnNlKHJlc3AsIG9wdGlvbnMpLCBvcHRpb25zKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHN1Y2Nlc3MobW9kZWwsIHJlc3AsIG9wdGlvbnMpO1xuICAgICAgICAgICAgbW9kZWwudHJpZ2dlcignc3luYycsIG1vZGVsLCByZXNwLCBvcHRpb25zKTtcbiAgICAgICAgfTtcbiAgICAgICAgd3JhcEVycm9yKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICB2YXIgc3luYyA9IHRoaXMuc3luYygncmVhZCcsIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICBvcHRpb25zLnhociA9IHN5bmM7XG4gICAgICAgIHJldHVybiBzeW5jO1xuICAgIH0sXG5cbiAgICAvLyBEZXN0cm95IHRoaXMgbW9kZWwgb24gdGhlIHNlcnZlciBpZiBpdCB3YXMgYWxyZWFkeSBwZXJzaXN0ZWQuXG4gICAgLy8gT3B0aW1pc3RpY2FsbHkgcmVtb3ZlcyB0aGUgbW9kZWwgZnJvbSBpdHMgY29sbGVjdGlvbiwgaWYgaXQgaGFzIG9uZS5cbiAgICAvLyBJZiBgd2FpdDogdHJ1ZWAgaXMgcGFzc2VkLCB3YWl0cyBmb3IgdGhlIHNlcnZlciB0byByZXNwb25kIGJlZm9yZSByZW1vdmFsLlxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zID8gY2xvbmUob3B0aW9ucykgOiB7fTtcbiAgICAgICAgdmFyIG1vZGVsID0gdGhpcztcbiAgICAgICAgdmFyIHN1Y2Nlc3MgPSBvcHRpb25zLnN1Y2Nlc3M7XG5cbiAgICAgICAgdmFyIGRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBtb2RlbC50cmlnZ2VyKCdkZXN0cm95JywgbW9kZWwsIG1vZGVsLmNvbGxlY3Rpb24sIG9wdGlvbnMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIG9wdGlvbnMuc3VjY2VzcyA9IGZ1bmN0aW9uIChyZXNwKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy53YWl0IHx8IG1vZGVsLmlzTmV3KCkpIGRlc3Ryb3koKTtcbiAgICAgICAgICAgIGlmIChzdWNjZXNzKSBzdWNjZXNzKG1vZGVsLCByZXNwLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGlmICghbW9kZWwuaXNOZXcoKSkgbW9kZWwudHJpZ2dlcignc3luYycsIG1vZGVsLCByZXNwLCBvcHRpb25zKTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5pc05ldygpKSB7XG4gICAgICAgICAgICBvcHRpb25zLnN1Y2Nlc3MoKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwRXJyb3IodGhpcywgb3B0aW9ucyk7XG5cbiAgICAgICAgdmFyIHN5bmMgPSB0aGlzLnN5bmMoJ2RlbGV0ZScsIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICBvcHRpb25zLnhociA9IHN5bmM7XG4gICAgICAgIGlmICghb3B0aW9ucy53YWl0KSBkZXN0cm95KCk7XG4gICAgICAgIHJldHVybiBzeW5jO1xuICAgIH0sXG5cbiAgICAvLyBQcm94eSBgYW1wZXJzYW5kLXN5bmNgIGJ5IGRlZmF1bHQgLS0gYnV0IG92ZXJyaWRlIHRoaXMgaWYgeW91IG5lZWRcbiAgICAvLyBjdXN0b20gc3luY2luZyBzZW1hbnRpY3MgZm9yICp0aGlzKiBwYXJ0aWN1bGFyIG1vZGVsLlxuICAgIHN5bmM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHN5bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9LFxuXG4gICAgLy8gRGVmYXVsdCBVUkwgZm9yIHRoZSBtb2RlbCdzIHJlcHJlc2VudGF0aW9uIG9uIHRoZSBzZXJ2ZXIgLS0gaWYgeW91J3JlXG4gICAgLy8gdXNpbmcgQmFja2JvbmUncyByZXN0ZnVsIG1ldGhvZHMsIG92ZXJyaWRlIHRoaXMgdG8gY2hhbmdlIHRoZSBlbmRwb2ludFxuICAgIC8vIHRoYXQgd2lsbCBiZSBjYWxsZWQuXG4gICAgdXJsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBiYXNlID0gcmVzdWx0KHRoaXMsICd1cmxSb290JykgfHwgcmVzdWx0KHRoaXMuY29sbGVjdGlvbiwgJ3VybCcpIHx8IHVybEVycm9yKCk7XG4gICAgICAgIGlmICh0aGlzLmlzTmV3KCkpIHJldHVybiBiYXNlO1xuICAgICAgICByZXR1cm4gYmFzZSArIChiYXNlLmNoYXJBdChiYXNlLmxlbmd0aCAtIDEpID09PSAnLycgPyAnJyA6ICcvJykgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5nZXRJZCgpKTtcbiAgICB9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBNb2RlbDtcbiIsIi8qICRBTVBFUlNBTkRfVkVSU0lPTiAqL1xudmFyIGRvbWlmeSA9IHJlcXVpcmUoJ2RvbWlmeScpO1xudmFyIGRvbSA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1kb20nKTtcbnZhciBtYXRjaGVzID0gcmVxdWlyZSgnbWF0Y2hlcy1zZWxlY3RvcicpO1xudmFyIFZpZXcgPSByZXF1aXJlKCdhbXBlcnNhbmQtdmlldycpO1xuXG52YXIgY3JlYXRlT3B0aW9uID0gZnVuY3Rpb24odmFsdWUsIHRleHQsIGRpc2FibGVkKSB7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTtcblxuICAgIC8vU2V0IHRvIGVtcHR5LXN0cmluZyBpZiB1bmRlZmluZWQgb3IgbnVsbCwgYnV0IG5vdCBpZiAwLCBmYWxzZSwgZXRjXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHZhbHVlID0gJyc7XG5cbiAgICBpZiAoZGlzYWJsZWQpIG5vZGUuZGlzYWJsZWQgPSB0cnVlO1xuICAgIG5vZGUudGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgIG5vZGUudmFsdWUgPSB2YWx1ZTtcblxuICAgIHJldHVybiBub2RlO1xufTtcblxudmFyIGNyZWF0ZU9wdGdyb3VwID0gZnVuY3Rpb24odGV4dCkge1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0Z3JvdXAnKTtcbiAgICBub2RlLmxhYmVsID0gdGV4dDtcblxuICAgIHJldHVybiBub2RlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBWaWV3LmV4dGVuZCh7XG4gICAgLy9SZXBsYWNlYWJsZSB3aXRoIGFueXRoaW5nIHdpdGggbGFiZWwsIG1lc3NhZ2UtY29udGFpbmVyLCBtZXNzYWdlLXRleHQgZGF0YS1ob29rcyBhbmQgYSA8c2VsZWN0PlxuICAgIHRlbXBsYXRlOiBbXG4gICAgICAgICc8bGFiZWwgY2xhc3M9XCJzZWxlY3RcIj4nLFxuICAgICAgICAgICAgJzxzcGFuIGRhdGEtaG9vaz1cImxhYmVsXCI+PC9zcGFuPicsXG4gICAgICAgICAgICAnPHNlbGVjdD48L3NlbGVjdD4nLFxuICAgICAgICAgICAgJzxzcGFuIGRhdGEtaG9vaz1cIm1lc3NhZ2UtY29udGFpbmVyXCIgY2xhc3M9XCJtZXNzYWdlIG1lc3NhZ2UtYmVsb3cgbWVzc2FnZS1lcnJvclwiPicsXG4gICAgICAgICAgICAgICAgJzxwIGRhdGEtaG9vaz1cIm1lc3NhZ2UtdGV4dFwiPjwvcD4nLFxuICAgICAgICAgICAgJzwvc3Bhbj4nLFxuICAgICAgICAnPC9sYWJlbD4nXG4gICAgXS5qb2luKCdcXG4nKSxcbiAgICBpbml0aWFsaXplOiBmdW5jdGlvbihvcHRzKSB7XG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5uYW1lICE9PSAnc3RyaW5nJykgdGhyb3cgbmV3IEVycm9yKCdTZWxlY3RWaWV3IHJlcXVpcmVzIGEgbmFtZSBwcm9wZXJ0eS4nKTtcbiAgICAgICAgdGhpcy5uYW1lID0gb3B0cy5uYW1lO1xuXG4gICAgICAgIGlmIChvcHRzLmdyb3VwT3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdHMub3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRG9uXFwndCBwcm92aWRlIGFtcGVyc2FuZC1zZWxlY3QtdmlldyB3aXRoIGJvdGggb3B0aW9ucyBhbmQgZ3JvdXBPcHRpb25zIHByb3BlcnRpZXMsIGFzIG9wdGlvbiB3aWxsIGJlIGdlbmVyYXRlZCB3aXRoIHZhbHVlcyBmcm9tIGdyb3VwT3B0aW9ucy4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgb3B0aW9ucyBhcnJheSBmcm9tIHRoZSBncm91cE9wdGlvbnMgcHJvcGVydHksIGNvbnRhaW5pbmdcbiAgICAgICAgICAgIC8vIG9ubHkgdGhlIHZhbHVlcyB0aGF0IHdpbGwgcmVzdWx0IGluIGFuIDxvcHRpb24+IGVsZW1lbnRcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBPcHRpb25zID0gb3B0cy5ncm91cE9wdGlvbnM7XG4gICAgICAgICAgICBvcHRzLm9wdGlvbnMgPSBbXTtcblxuICAgICAgICAgICAgb3B0cy5ncm91cE9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbihvcHRncm91cCkge1xuICAgICAgICAgICAgICAgIG9wdGdyb3VwLm9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbihvcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0cy5vcHRpb25zLnB1c2gob3B0aW9uKTtcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvcHRzLm9wdGlvbnMpICYmICFvcHRzLm9wdGlvbnMuaXNDb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlbGVjdFZpZXcgcmVxdWlyZXMgc2VsZWN0IG9wdGlvbnMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0cy5vcHRpb25zO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaXNDb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmlkQXR0cmlidXRlID0gb3B0cy5pZEF0dHJpYnV0ZSB8fCB0aGlzLm9wdGlvbnMubWFpbkluZGV4IHx8ICdpZCc7XG4gICAgICAgICAgICB0aGlzLnRleHRBdHRyaWJ1dGUgPSBvcHRzLnRleHRBdHRyaWJ1dGUgfHwgJ3RleHQnO1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZEF0dHJpYnV0ZSA9IG9wdHMuZGlzYWJsZWRBdHRyaWJ1dGU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVsID0gb3B0cy5lbDtcbiAgICAgICAgdGhpcy5sYWJlbCA9IG9wdHMubGFiZWwgfHwgJyc7XG4gICAgICAgIHRoaXMucGFyZW50ID0gb3B0cy5wYXJlbnQgfHwgdGhpcy5wYXJlbnQ7XG4gICAgICAgIGlmIChvcHRzLnRlbXBsYXRlKSB0aGlzLnRlbXBsYXRlID0gb3B0cy50ZW1wbGF0ZTtcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkVGV4dCA9IG9wdHMudW5zZWxlY3RlZFRleHQ7XG4gICAgICAgIHRoaXMuc3RhcnRpbmdWYWx1ZSA9IG9wdHMudmFsdWU7XG4gICAgICAgIHRoaXMueWllbGRNb2RlbCA9IChvcHRzLnlpZWxkTW9kZWwgPT09IGZhbHNlKSA/IGZhbHNlIDogdHJ1ZTtcblxuICAgICAgICB0aGlzLnRhYmluZGV4ID0gb3B0cy50YWJpbmRleCB8fCAnMCc7XG5cbiAgICAgICAgdGhpcy5lYWdlclZhbGlkYXRlID0gb3B0cy5lYWdlclZhbGlkYXRlO1xuICAgICAgICB0aGlzLnJlcXVpcmVkID0gb3B0cy5yZXF1aXJlZCB8fCBmYWxzZTtcbiAgICAgICAgdGhpcy52YWxpZENsYXNzID0gb3B0cy52YWxpZENsYXNzIHx8ICdpbnB1dC12YWxpZCc7XG4gICAgICAgIHRoaXMuaW52YWxpZENsYXNzID0gb3B0cy5pbnZhbGlkQ2xhc3MgfHwgJ2lucHV0LWludmFsaWQnO1xuICAgICAgICBpZiAob3B0cy5yZXF1aXJlZE1lc3NhZ2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5yZXF1aXJlZE1lc3NhZ2UgPSAnU2VsZWN0aW9uIHJlcXVpcmVkJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVxdWlyZWRNZXNzYWdlID0gb3B0cy5yZXF1aXJlZE1lc3NhZ2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuc3RhcnRpbmdWYWx1ZSA9IHRoaXMuc2V0VmFsdWUob3B0cy52YWx1ZSwgdGhpcy5lYWdlclZhbGlkYXRlID8gZmFsc2UgOiB0cnVlLCB0cnVlKTtcblxuICAgICAgICBpZiAob3B0cy5iZWZvcmVTdWJtaXQpIHRoaXMuYmVmb3JlU3VibWl0ID0gb3B0cy5iZWZvcmVTdWJtaXQ7XG4gICAgICAgIGlmIChvcHRzLmF1dG9SZW5kZXIpIHRoaXMuYXV0b1JlbmRlciA9IG9wdHMuYXV0b1JlbmRlcjtcbiAgICB9LFxuXG4gICAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGVsRG9tLFxuICAgICAgICAgICAgbGFiZWxFbDtcbiAgICAgICAgaWYgKHRoaXMucmVuZGVyZWQpIHJldHVybjtcblxuICAgICAgICBlbERvbSA9IGRvbWlmeSh0aGlzLnRlbXBsYXRlKTtcbiAgICAgICAgaWYgKCF0aGlzLmVsKSB0aGlzLmVsID0gZWxEb207XG4gICAgICAgIGVsc2UgdGhpcy5lbC5hcHBlbmRDaGlsZChlbERvbSk7XG5cbiAgICAgICAgbGFiZWxFbCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignW2RhdGEtaG9va349bGFiZWxdJyk7XG4gICAgICAgIGlmIChsYWJlbEVsKSB7XG4gICAgICAgICAgICBsYWJlbEVsLnRleHRDb250ZW50ID0gdGhpcy5sYWJlbDtcbiAgICAgICAgICAgIHRoaXMubGFiZWwgPSBsYWJlbEVsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMubGFiZWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5lbC50YWdOYW1lID09PSAnU0VMRUNUJykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLmVsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoJ3NlbGVjdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3QpIHRocm93IG5ldyBFcnJvcignbm8gc2VsZWN0IGZvdW5kIGluIHRlbXBsYXRlJyk7XG4gICAgICAgIGlmIChtYXRjaGVzKHRoaXMuZWwsICdzZWxlY3QnKSkgdGhpcy5zZWxlY3QgPSB0aGlzLmVsO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3QpIHRoaXMuc2VsZWN0LnNldEF0dHJpYnV0ZSgnbmFtZScsIHRoaXMubmFtZSk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdCkgdGhpcy5zZWxlY3Quc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsIHRoaXMudGFiaW5kZXgpO1xuXG4gICAgICAgIHRoaXMuYmluZERPTUV2ZW50cygpO1xuICAgICAgICB0aGlzLnJlbmRlck9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZE9wdGlvbigpO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaXNDb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMub24oJ2FkZCByZW1vdmUgcmVzZXQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgc2V0VmFsdWVGaXJzdE1vZGVsID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy55aWVsZE1vZGVsKSB0aGlzLnNldFZhbHVlKHRoaXMub3B0aW9ucy5tb2RlbHNbMF0pO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHRoaXMuc2V0VmFsdWUodGhpcy5vcHRpb25zLm1vZGVsc1swXVt0aGlzLmlkQXR0cmlidXRlXSk7XG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJPcHRpb25zKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzT3B0aW9uQnlWYWx1ZSh0aGlzLnZhbHVlKSkgdGhpcy51cGRhdGVTZWxlY3RlZE9wdGlvbigpO1xuICAgICAgICAgICAgICAgIGVsc2Ugc2V0VmFsdWVGaXJzdE1vZGVsKCk7XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52YWxpZGF0ZSh0aGlzLmVhZ2VyVmFsaWRhdGUgPyBmYWxzZSA6IHRydWUsIHRydWUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cblxuICAgIG9uQ2hhbmdlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5zZWxlY3Qub3B0aW9uc1t0aGlzLnNlbGVjdC5zZWxlY3RlZEluZGV4XS52YWx1ZTtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlzQ29sbGVjdGlvbiAmJiB0aGlzLnlpZWxkTW9kZWwpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXRNb2RlbEZvcklkKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyBhIG1vZGVsIGluIHRoZSBvcHRpb25zIGNvbGxlY3Rpb24gcHJvdmlkZWQgYW4gSURcbiAgICAgKiBAcGFyYW0gIHthbnl9IGlkXG4gICAgICogQHJldHVybiB7U3RhdGV9XG4gICAgICogQHRocm93cyB7UmFuZ2VFcnJvcn0gSWYgbW9kZWwgbm90IGZvdW5kXG4gICAgICovXG4gICAgZ2V0TW9kZWxGb3JJZDogZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24obW9kZWwpIHtcbiAgICAgICAgICAgIC8vIGludGVudGlvbmFsbHkgY29lcmNlIGZvciAnMScgPT0gMVxuICAgICAgICAgICAgcmV0dXJuIG1vZGVsW3RoaXMuaWRBdHRyaWJ1dGVdID09IGlkO1xuICAgICAgICB9LmJpbmQodGhpcykpWzBdO1xuICAgIH0sXG5cbiAgICBiaW5kRE9NRXZlbnRzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5zZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5vbkNoYW5nZSwgZmFsc2UpO1xuICAgIH0sXG5cbiAgICByZW5kZXJPcHRpb25zOiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdCkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0LmlubmVySFRNTCA9ICcnO1xuICAgICAgICBpZiAodGhpcy51bnNlbGVjdGVkVGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdC5hcHBlbmRDaGlsZChcbiAgICAgICAgICAgICAgICBjcmVhdGVPcHRpb24obnVsbCwgdGhpcy51bnNlbGVjdGVkVGV4dClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5ncm91cE9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBPcHRpb25zLmZvckVhY2goZnVuY3Rpb24ob3B0Z3JvdXApIHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmdyb3VwT3B0aW9ucyBpcyBhbiBhcnJheSBvZiBPYmplY3RzIHJlcHJlc2VudGluZyA8b3B0Z3JvdXA+IGVsZW1lbnRzXG4gICAgICAgICAgICAgICAgdmFyIG9wdEdyb3VwRWxlbWVudCA9IGNyZWF0ZU9wdGdyb3VwKG9wdGdyb3VwLmdyb3VwTmFtZSk7XG4gICAgICAgICAgICAgICAgLy8gTG9vcCBvdmVyIHRoZSA8b3B0aW9ucz4gZnJvbSB0aGF0IDxvcHRncm91cD5cbiAgICAgICAgICAgICAgICBvcHRncm91cC5vcHRpb25zLmZvckVhY2goZnVuY3Rpb24ob3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgPG9wdGlvbj5zIHRvIHRoZSA8b3B0Z3JvdXA+XG4gICAgICAgICAgICAgICAgICAgIG9wdEdyb3VwRWxlbWVudC5hcHBlbmRDaGlsZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZU9wdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE9wdGlvblZhbHVlKG9wdGlvbiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRPcHRpb25UZXh0KG9wdGlvbiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRPcHRpb25EaXNhYmxlZChvcHRpb24pXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIDxvcHRncm91cD4gdG8gdGhlIDxzZWxlY3Q+XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QuYXBwZW5kQ2hpbGQob3B0R3JvdXBFbGVtZW50KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbihvcHRpb24pIHtcbiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYW5kIGFkZCB0aGUgPG9wdGlvbj4gdG8gdGhlIDxzZWxlY3Q+XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QuYXBwZW5kQ2hpbGQoXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZU9wdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uVmFsdWUob3B0aW9uKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uVGV4dChvcHRpb24pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRPcHRpb25EaXNhYmxlZChvcHRpb24pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSA8c2VsZWN0PiBjb250cm9sIHRvIHNldCB0aGUgc2VsZWN0IG9wdGlvbiB3aGVuIHRoZSBvcHRpb25cbiAgICAgKiBoYXMgY2hhbmdlZCBwcm9ncmFtYXRpY2FsbHkgKGkuZS4gbm90IHRocm91Z2ggZGlyZWN0IHVzZXIgc2VsZWN0aW9uKVxuICAgICAqIEByZXR1cm4ge1NlbGVjdFZpZXd9IHRoaXNcbiAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgbm8gb3B0aW9uIGV4aXN0cyBmb3IgdGhpcy52YWx1ZVxuICAgICAqL1xuICAgIHVwZGF0ZVNlbGVjdGVkT3B0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGxvb2t1cFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgaWYgKGxvb2t1cFZhbHVlID09PSBudWxsIHx8IGxvb2t1cFZhbHVlID09PSB1bmRlZmluZWQgfHwgbG9va3VwVmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy51bnNlbGVjdGVkVGV4dCAhPT0gdW5kZWZpbmVkIHx8ICghdGhpcy5zdGFydGluZ1ZhbHVlICYmICF0aGlzLnJlbmRlcmVkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0LnNlbGVjdGVkSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zLmxlbmd0aCAmJiB0aGlzLnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQdWxsIG91dCB0aGUgaWQgaWYgaXQncyBhIG1vZGVsXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaXNDb2xsZWN0aW9uICYmIHRoaXMueWllbGRNb2RlbCkge1xuICAgICAgICAgICAgbG9va3VwVmFsdWUgPSBsb29rdXBWYWx1ZSAmJiBsb29rdXBWYWx1ZVt0aGlzLmlkQXR0cmlidXRlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb29rdXBWYWx1ZSB8fCBsb29rdXBWYWx1ZSA9PT0gMCB8fCBsb29rdXBWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGxvb2t1cFZhbHVlID09PSBudWxsKSBsb29rdXBWYWx1ZSA9ICcnOyAvLyBET00gc2VlcyBvbmx5ICcnIGVtcHR5IHZhbHVlXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5zZWxlY3Qub3B0aW9ucy5sZW5ndGg7IGktLTsgaSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdC5vcHRpb25zW2ldLnZhbHVlID09IGxvb2t1cFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0LnNlbGVjdGVkSW5kZXggPSBpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBmYWlsZWQgdG8gbWF0Y2ggYW55XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gb3B0aW9uIGV4aXN0cyBmb3IgdmFsdWU6ICcgKyBsb29rdXBWYWx1ZSk7XG4gICAgfSxcblxuICAgIHJlbW92ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmVsICYmIHRoaXMuZWwucGFyZW50Tm9kZSkgdGhpcy5lbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWwpO1xuICAgICAgICB0aGlzLmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMub25DaGFuZ2UsIGZhbHNlKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyBjb250cm9sIHRvIHVuc2VsZWN0ZWRUZXh0IG9wdGlvbiwgb3IgdXNlciBzcGVjaWZpZWQgb3B0aW9uIHdpdGggYG51bGxgXG4gICAgICogdmFsdWVcbiAgICAgKiBAcmV0dXJuIHtTZWxlY3RWaWV3fSB0aGlzXG4gICAgICovXG4gICAgY2xlYXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnNldFZhbHVlKG51bGwsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc2VsZWN0ZWQgb3B0aW9uIGFuZCB2aWV3IHZhbHVlIHRvIHRoZSBvcmlnaW5hbCBvcHRpb24gdmFsdWUgcHJvdmlkZWRcbiAgICAgKiBkdXJpbmcgY29uc3RydWN0aW9uXG4gICAgICogQHJldHVybiB7U2VsZWN0Vmlld30gdGhpc1xuICAgICAqL1xuICAgIHJlc2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0VmFsdWUodGhpcy5zdGFydGluZ1ZhbHVlLCB0cnVlKTtcbiAgICB9LFxuXG4gICAgc2V0VmFsdWU6IGZ1bmN0aW9uKHZhbHVlLCBza2lwVmFsaWRhdGlvbk1lc3NhZ2UsIGluaXQpIHtcbiAgICAgICAgdmFyIG9wdGlvbiwgbW9kZWwsIG51bGxWYWxpZDtcblxuICAgICAgICAvLyBlbmZvcmNlIHRoZSA8c2VsZWN0PiBjb250cm9sIHRvIGNvbnRhaW4gb25seSBhIHNpbmd1bGFyIGZhbHN5XG4gICAgICAgIC8vIHZhbHVlIChleGNsdWRpbmcgMCksIGJlY2F1c2UgYnJvd3NlcnMgd2lsbCBzZXQgdGhlIHNlbGVjdC52YWx1ZVxuICAgICAgICAvLyBpbiBlYWNoIGNhc2UgdG8gYmUgdGhlIGVtcHR5IHN0cmluZ1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuXG4gICAgICAgICAgICAvLyB0ZXN0IGlmIG51bGwgaXMgYSB2YWxpZCBvcHRpb25cbiAgICAgICAgICAgIGlmICh0aGlzLnVuc2VsZWN0ZWRUZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBudWxsVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBudWxsVmFsaWQgPSB0aGlzLmhhc09wdGlvbkJ5VmFsdWUobnVsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGVtcHR5IHZhbHVlIHJlcXVlc3RlZCB0byBiZSBzZXQuICBUaGlzIG1heSBiZSBiZWNhdXNlIHRoZSBmaWVsZCBpcyBqdXN0XG4gICAgICAgICAgICAvLyBpbml0aWFsaXppbmcuICBJZiBpbml0aWFsaXppbmcgYW5kIGBudWxsYCBpc24ndCBpbiB0aGUgaG9ub3JlZCBvcHRpb24gc2V0XG4gICAgICAgICAgICAvLyBzZXQgdGhlIHNlbGVjdCB0byB0aGUgMC10aCBpbmRleFxuICAgICAgICAgICAgaWYgKGluaXQgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCAmJiAhbnVsbFZhbGlkKSB7XG4gICAgICAgICAgICAgICAgLy8gbm8gaW5pdGlhbCB2YWx1ZSBwYXNzZWQsIHNldCBpbml0aWFsIHZhbHVlIHRvIGZpcnN0IGl0ZW0gaW4gc2V0XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pc0NvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWwgPSB0aGlzLm9wdGlvbnMubW9kZWxzWzBdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy55aWVsZE1vZGVsID8gbW9kZWwgOiBtb2RlbFt0aGlzLmlkQXR0cmlidXRlXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnNbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5vcHRpb25zWzBdWzBdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMub3B0aW9uc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEVuc3VyZSBjb3JyZXNwb25kaW5nIG9wdGlvbiBleGlzdHMgYmVmb3JlIGFzc2lnbmluZyB2YWx1ZVxuICAgICAgICAgICAgb3B0aW9uID0gdGhpcy5nZXRPcHRpb25CeVZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBBcnJheS5pc0FycmF5KG9wdGlvbikgPyBvcHRpb25bMF0gOiBvcHRpb247XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWxpZGF0ZShza2lwVmFsaWRhdGlvbk1lc3NhZ2UpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3QpIHRoaXMudXBkYXRlU2VsZWN0ZWRPcHRpb24oKTtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50ICYmIHR5cGVvZiB0aGlzLnBhcmVudC51cGRhdGUgPT09ICdmdW5jdGlvbicpIHRoaXMucGFyZW50LnVwZGF0ZSh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfSxcblxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihza2lwVmFsaWRhdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICAvLyBzZWxlY3RlZCBvcHRpb24gYWx3YXlzIGtub3duIHRvIGJlIGluIG9wdGlvbiBzZXQsXG4gICAgICAgICAgICAvLyB0aHVzIGZpZWxkIGlzIGFsd2F5cyB2YWxpZCBpZiBub3QgcmVxdWlyZWRcbiAgICAgICAgICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0KSB0aGlzLnRvZ2dsZU1lc3NhZ2Uoc2tpcFZhbGlkYXRpb25NZXNzYWdlKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbGlkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgIXRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZSAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0KSB0aGlzLnRvZ2dsZU1lc3NhZ2Uoc2tpcFZhbGlkYXRpb25NZXNzYWdlLCB0aGlzLnJlcXVpcmVkTWVzc2FnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdCkgdGhpcy50b2dnbGVNZXNzYWdlKHNraXBWYWxpZGF0aW9uTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy52YWxpZDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIGJ5IEZvcm1WaWV3IG9uIHN1Ym1pdFxuICAgICAqIEByZXR1cm4ge1NlbGVjdFZpZXd9IHRoaXNcbiAgICAgKi9cbiAgICBiZWZvcmVTdWJtaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3QpIHRoaXMuc2V0VmFsdWUodGhpcy5zZWxlY3Qub3B0aW9uc1t0aGlzLnNlbGVjdC5zZWxlY3RlZEluZGV4XS52YWx1ZSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG9wdGlvbiBjb3JyZXNwb25kaW5nIHRvIHByb3ZpZGVkIHZhbHVlLlxuICAgICAqIEBwYXJhbSAgeyp9IHN0cmluZywgc3RhdGUsIG9yIG1vZGVsXG4gICAgICogQHJldHVybiB7Kn0gc3RyaW5nLCBhcnJheSwgc3RhdGUsIG9yIG1vZGVsXG4gICAgICovXG4gICAgZ2V0T3B0aW9uQnlWYWx1ZTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdmFyIG1vZGVsO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlzQ29sbGVjdGlvbikge1xuICAgICAgICAgICAgLy8gZmluZCB2YWx1ZSBpbiBjb2xsZWN0aW9uLCBlcnJvciBpZiBubyBtb2RlbCBmb3VuZFxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbmRleE9mKHZhbHVlKSA9PT0gLTEpIG1vZGVsID0gdGhpcy5nZXRNb2RlbEZvcklkKHZhbHVlKTtcbiAgICAgICAgICAgIGVsc2UgbW9kZWwgPSB2YWx1ZTtcbiAgICAgICAgICAgIGlmICghbW9kZWwpIHRocm93IG5ldyBFcnJvcignbW9kZWwgb3IgbW9kZWwgaWRBdHRyaWJ1dGUgbm90IGZvdW5kIGluIG9wdGlvbnMgY29sbGVjdGlvbicpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMueWllbGRNb2RlbCA/IG1vZGVsIDogbW9kZWxbdGhpcy5pZEF0dHJpYnV0ZV07XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnMpKSB7XG4gICAgICAgICAgICAvLyBmaW5kIHZhbHVlIHZhbHVlIGluIG9wdGlvbnMgYXJyYXlcbiAgICAgICAgICAgIC8vIGZpbmQgb3B0aW9uLCBmb3JtYXR0ZWQgW1sndmFsJywgJ3RleHQnXSwgLi4uXVxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sZW5ndGggJiYgQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnNbMF0pKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMub3B0aW9ucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zW2ldWzBdID09IHZhbHVlKSByZXR1cm4gdGhpcy5vcHRpb25zW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGZpbmQgb3B0aW9uLCBmb3JtYXR0ZWQgWyd2YWxBbmRUZXh0JywgLi4uXSBmb3JtYXRcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGVuZ3RoICYmIHRoaXMub3B0aW9ucy5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndmFsdWUgbm90IGluIHNldCBvZiBwcm92aWRlZCBvcHRpb25zJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZWxlY3Qgb3B0aW9uIHNldCBpbnZhbGlkJyk7XG4gICAgfSxcblxuXG5cbiAgICAvKipcbiAgICAgKiBUZXN0cyBpZiBvcHRpb24gc2V0IGhhcyBhbiBvcHRpb24gY29ycmVzcG9uZGluZyB0byB0aGUgcHJvdmlkZWQgdmFsdWVcbiAgICAgKiBAcGFyYW0gIHsqfSB2YWx1ZVxuICAgICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAgICovXG4gICAgaGFzT3B0aW9uQnlWYWx1ZTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uQnlWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG5cblxuICAgIGdldE9wdGlvblZhbHVlOiBmdW5jdGlvbihvcHRpb24pIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9uKSkgcmV0dXJuIG9wdGlvblswXTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pc0NvbGxlY3Rpb24pIHJldHVybiBvcHRpb25bdGhpcy5pZEF0dHJpYnV0ZV07XG4gICAgICAgIHJldHVybiBvcHRpb247XG4gICAgfSxcblxuICAgIGdldE9wdGlvblRleHQ6IGZ1bmN0aW9uKG9wdGlvbikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb24pKSByZXR1cm4gb3B0aW9uWzFdO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlzQ29sbGVjdGlvbikge1xuICAgICAgICAgICAgaWYgKHRoaXMudGV4dEF0dHJpYnV0ZSAmJiBvcHRpb25bdGhpcy50ZXh0QXR0cmlidXRlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvblt0aGlzLnRleHRBdHRyaWJ1dGVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICB9LFxuXG4gICAgZ2V0T3B0aW9uRGlzYWJsZWQ6IGZ1bmN0aW9uKG9wdGlvbikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb24pKSByZXR1cm4gb3B0aW9uWzJdO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlzQ29sbGVjdGlvbiAmJiB0aGlzLmRpc2FibGVkQXR0cmlidXRlKSByZXR1cm4gb3B0aW9uW3RoaXMuZGlzYWJsZWRBdHRyaWJ1dGVdO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgdG9nZ2xlTWVzc2FnZTogZnVuY3Rpb24oaGlkZSwgbWVzc2FnZSkge1xuICAgICAgICB2YXIgbUNvbnRhaW5lciA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignW2RhdGEtaG9va349bWVzc2FnZS1jb250YWluZXJdJyksXG4gICAgICAgICAgICBtVGV4dCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignW2RhdGEtaG9va349bWVzc2FnZS10ZXh0XScpO1xuXG4gICAgICAgIGlmICghbUNvbnRhaW5lciB8fCAhbVRleHQpIHJldHVybjtcblxuICAgICAgICBpZiAoaGlkZSkge1xuICAgICAgICAgICAgZG9tLmhpZGUobUNvbnRhaW5lcik7XG4gICAgICAgICAgICBtVGV4dC50ZXh0Q29udGVudCA9ICcnO1xuICAgICAgICAgICAgZG9tLnJlbW92ZUNsYXNzKHRoaXMuZWwsIHRoaXMudmFsaWRDbGFzcyk7XG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2xhc3ModGhpcy5lbCwgdGhpcy5pbnZhbGlkQ2xhc3MpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgIGRvbS5zaG93KG1Db250YWluZXIpO1xuICAgICAgICAgICAgbVRleHQudGV4dENvbnRlbnQgPSBtZXNzYWdlO1xuICAgICAgICAgICAgZG9tLmFkZENsYXNzKHRoaXMuZWwsIHRoaXMuaW52YWxpZENsYXNzKTtcbiAgICAgICAgICAgIGRvbS5yZW1vdmVDbGFzcyh0aGlzLmVsLCB0aGlzLnZhbGlkQ2xhc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZG9tLmhpZGUobUNvbnRhaW5lcik7XG4gICAgICAgICAgICBtVGV4dC50ZXh0Q29udGVudCA9ICcnO1xuICAgICAgICAgICAgZG9tLmFkZENsYXNzKHRoaXMuZWwsIHRoaXMudmFsaWRDbGFzcyk7XG4gICAgICAgICAgICBkb20ucmVtb3ZlQ2xhc3ModGhpcy5lbCwgdGhpcy5pbnZhbGlkQ2xhc3MpO1xuICAgICAgICB9XG4gICAgfVxuXG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qJEFNUEVSU0FORF9WRVJTSU9OKi9cbnZhciB1bmlxdWVJZCA9IHJlcXVpcmUoJ2xvZGFzaC91bmlxdWVJZCcpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ2xvZGFzaC9hc3NpZ24nKTtcbnZhciBjbG9uZU9iaiA9IGZ1bmN0aW9uKG9iaikgeyByZXR1cm4gYXNzaWduKHt9LCBvYmopOyB9O1xudmFyIG9taXQgPSByZXF1aXJlKCdsb2Rhc2gvb21pdCcpO1xudmFyIGVzY2FwZSA9IHJlcXVpcmUoJ2xvZGFzaC9lc2NhcGUnKTtcbnZhciBmb3JPd24gPSByZXF1aXJlKCdsb2Rhc2gvZm9yT3duJyk7XG52YXIgaW5jbHVkZXMgPSByZXF1aXJlKCdsb2Rhc2gvaW5jbHVkZXMnKTtcbnZhciBpc1N0cmluZyA9IHJlcXVpcmUoJ2xvZGFzaC9pc1N0cmluZycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnbG9kYXNoL2lzT2JqZWN0Jyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnbG9kYXNoL2lzRGF0ZScpO1xudmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCdsb2Rhc2gvaXNGdW5jdGlvbicpO1xudmFyIF9pc0VxdWFsID0gcmVxdWlyZSgnbG9kYXNoL2lzRXF1YWwnKTsgLy8gdG8gYXZvaWQgc2hhZG93aW5nXG52YXIgaGFzID0gcmVxdWlyZSgnbG9kYXNoL2hhcycpO1xudmFyIHJlc3VsdCA9IHJlcXVpcmUoJ2xvZGFzaC9yZXN1bHQnKTtcbnZhciB1bmlvbiA9IHJlcXVpcmUoJ2xvZGFzaC91bmlvbicpO1xudmFyIEV2ZW50cyA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1ldmVudHMnKTtcbnZhciBLZXlUcmVlID0gcmVxdWlyZSgna2V5LXRyZWUtc3RvcmUnKTtcbnZhciBhcnJheU5leHQgPSByZXF1aXJlKCdhcnJheS1uZXh0Jyk7XG52YXIgY2hhbmdlUkUgPSAvXmNoYW5nZTovO1xudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7fTtcblxuZnVuY3Rpb24gQmFzZShhdHRycywgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7XG4gICAgdGhpcy5jaWQgfHwgKHRoaXMuY2lkID0gdW5pcXVlSWQoJ3N0YXRlJykpO1xuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuICAgIHRoaXMuX3ZhbHVlcyA9IHt9O1xuICAgIHRoaXMuX2V2ZW50QnViYmxpbmdIYW5kbGVyQ2FjaGUgPSB7fTtcbiAgICB0aGlzLl9kZWZpbml0aW9uID0gT2JqZWN0LmNyZWF0ZSh0aGlzLl9kZWZpbml0aW9uKTtcbiAgICBpZiAob3B0aW9ucy5wYXJzZSkgYXR0cnMgPSB0aGlzLnBhcnNlKGF0dHJzLCBvcHRpb25zKTtcbiAgICB0aGlzLnBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuICAgIHRoaXMuY29sbGVjdGlvbiA9IG9wdGlvbnMuY29sbGVjdGlvbjtcbiAgICB0aGlzLl9rZXlUcmVlID0gbmV3IEtleVRyZWUoKTtcbiAgICB0aGlzLl9pbml0Q29sbGVjdGlvbnMoKTtcbiAgICB0aGlzLl9pbml0Q2hpbGRyZW4oKTtcbiAgICB0aGlzLl9jYWNoZSA9IHt9O1xuICAgIHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcyA9IHt9O1xuICAgIGlmIChhdHRycykgdGhpcy5zZXQoYXR0cnMsIGFzc2lnbih7c2lsZW50OiB0cnVlLCBpbml0aWFsOiB0cnVlfSwgb3B0aW9ucykpO1xuICAgIHRoaXMuX2NoYW5nZWQgPSB7fTtcbiAgICBpZiAodGhpcy5fZGVyaXZlZCkgdGhpcy5faW5pdERlcml2ZWQoKTtcbiAgICBpZiAob3B0aW9ucy5pbml0ICE9PSBmYWxzZSkgdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmFzc2lnbihCYXNlLnByb3RvdHlwZSwgRXZlbnRzLCB7XG4gICAgLy8gY2FuIGJlIGFsbG93LCBpZ25vcmUsIHJlamVjdFxuICAgIGV4dHJhUHJvcGVydGllczogJ2lnbm9yZScsXG5cbiAgICBpZEF0dHJpYnV0ZTogJ2lkJyxcblxuICAgIG5hbWVzcGFjZUF0dHJpYnV0ZTogJ25hbWVzcGFjZScsXG5cbiAgICB0eXBlQXR0cmlidXRlOiAnbW9kZWxUeXBlJyxcblxuICAgIC8vIFN0dWJiZWQgb3V0IHRvIGJlIG92ZXJ3cml0dGVuXG4gICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLy8gR2V0IElEIG9mIG1vZGVsIHBlciBjb25maWd1cmF0aW9uLlxuICAgIC8vIFNob3VsZCAqYWx3YXlzKiBiZSBob3cgSUQgaXMgZGV0ZXJtaW5lZCBieSBvdGhlciBjb2RlLlxuICAgIGdldElkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW3RoaXMuaWRBdHRyaWJ1dGVdO1xuICAgIH0sXG5cbiAgICAvLyBHZXQgbmFtZXNwYWNlIG9mIG1vZGVsIHBlciBjb25maWd1cmF0aW9uLlxuICAgIC8vIFNob3VsZCAqYWx3YXlzKiBiZSBob3cgbmFtZXNwYWNlIGlzIGRldGVybWluZWQgYnkgb3RoZXIgY29kZS5cbiAgICBnZXROYW1lc3BhY2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbdGhpcy5uYW1lc3BhY2VBdHRyaWJ1dGVdO1xuICAgIH0sXG5cbiAgICAvLyBHZXQgdHlwZSBvZiBtb2RlbCBwZXIgY29uZmlndXJhdGlvbi5cbiAgICAvLyBTaG91bGQgKmFsd2F5cyogYmUgaG93IHR5cGUgaXMgZGV0ZXJtaW5lZCBieSBvdGhlciBjb2RlLlxuICAgIGdldFR5cGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbdGhpcy50eXBlQXR0cmlidXRlXTtcbiAgICB9LFxuXG4gICAgLy8gQSBtb2RlbCBpcyBuZXcgaWYgaXQgaGFzIG5ldmVyIGJlZW4gc2F2ZWQgdG8gdGhlIHNlcnZlciwgYW5kIGxhY2tzIGFuIGlkLlxuICAgIGlzTmV3OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldElkKCkgPT0gbnVsbDtcbiAgICB9LFxuXG4gICAgLy8gZ2V0IEhUTUwtZXNjYXBlZCB2YWx1ZSBvZiBhdHRyaWJ1dGVcbiAgICBlc2NhcGU6IGZ1bmN0aW9uIChhdHRyKSB7XG4gICAgICAgIHJldHVybiBlc2NhcGUodGhpcy5nZXQoYXR0cikpO1xuICAgIH0sXG5cbiAgICAvLyBDaGVjayBpZiB0aGUgbW9kZWwgaXMgY3VycmVudGx5IGluIGEgdmFsaWQgc3RhdGUuXG4gICAgaXNWYWxpZDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHt9LCBhc3NpZ24ob3B0aW9ucyB8fCB7fSwgeyB2YWxpZGF0ZTogdHJ1ZSB9KSk7XG4gICAgfSxcblxuICAgIC8vIFBhcnNlIGNhbiBiZSB1c2VkIHJlbWFwL3Jlc3RydWN0dXJlL3JlbmFtZSBpbmNvbWluZyBwcm9wZXJ0aWVzXG4gICAgLy8gYmVmb3JlIHRoZXkgYXJlIGFwcGxpZWQgdG8gYXR0cmlidXRlcy5cbiAgICBwYXJzZTogZnVuY3Rpb24gKHJlc3AsIG9wdGlvbnMpIHtcbiAgICAgICAgLy9qc2hpbnQgdW51c2VkOmZhbHNlXG4gICAgICAgIHJldHVybiByZXNwO1xuICAgIH0sXG5cbiAgICAvLyBTZXJpYWxpemUgaXMgdGhlIGludmVyc2Ugb2YgYHBhcnNlYCBpdCBsZXRzIHlvdSBtYXNzYWdlIGRhdGFcbiAgICAvLyBvbiB0aGUgd2F5IG91dC4gQmVmb3JlLCBzZW5kaW5nIHRvIHNlcnZlciwgZm9yIGV4YW1wbGUuXG4gICAgc2VyaWFsaXplOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICB2YXIgYXR0ck9wdHMgPSBhc3NpZ24oe3Byb3BzOiB0cnVlfSwgb3B0aW9ucyk7XG4gICAgICAgIHZhciByZXMgPSB0aGlzLmdldEF0dHJpYnV0ZXMoYXR0ck9wdHMsIHRydWUpO1xuICAgICAgICBcbiAgICAgICAgdmFyIHNldEZyb21TZXJpYWxpemVkVmFsdWUgPSBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuXHQgICAgICAgIHJlc1trZXldID0gdGhpc1trZXldLnNlcmlhbGl6ZSgpO1xuICAgICAgICB9LmJpbmQodGhpcyk7XG4gICAgICAgIFxuICAgICAgICBmb3JPd24odGhpcy5fY2hpbGRyZW4sIHNldEZyb21TZXJpYWxpemVkVmFsdWUpO1xuICAgICAgICBmb3JPd24odGhpcy5fY29sbGVjdGlvbnMsIHNldEZyb21TZXJpYWxpemVkVmFsdWUpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG5cbiAgICAvLyBNYWluIHNldCBtZXRob2QgdXNlZCBieSBnZW5lcmF0ZWQgc2V0dGVycy9nZXR0ZXJzIGFuZCBjYW5cbiAgICAvLyBiZSB1c2VkIGRpcmVjdGx5IGlmIHlvdSBuZWVkIHRvIHBhc3Mgb3B0aW9ucyBvciBzZXQgbXVsdGlwbGVcbiAgICAvLyBwcm9wZXJ0aWVzIGF0IG9uY2UuXG4gICAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHZhciBleHRyYVByb3BlcnRpZXMgPSB0aGlzLmV4dHJhUHJvcGVydGllcztcbiAgICAgICAgdmFyIHdhc0NoYW5naW5nLCBjaGFuZ2VFdmVudHMsIG5ld1R5cGUsIG5ld1ZhbCwgZGVmLCBjYXN0LCBlcnIsIGF0dHIsXG4gICAgICAgICAgICBhdHRycywgZGF0YVR5cGUsIHNpbGVudCwgdW5zZXQsIGN1cnJlbnRWYWwsIGluaXRpYWwsIGhhc0NoYW5nZWQsIGlzRXF1YWwsIG9uQ2hhbmdlO1xuXG4gICAgICAgIC8vIEhhbmRsZSBib3RoIGBcImtleVwiLCB2YWx1ZWAgYW5kIGB7a2V5OiB2YWx1ZX1gIC1zdHlsZSBhcmd1bWVudHMuXG4gICAgICAgIGlmIChpc09iamVjdChrZXkpIHx8IGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgYXR0cnMgPSBrZXk7XG4gICAgICAgICAgICBvcHRpb25zID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhdHRycyA9IHt9O1xuICAgICAgICAgICAgYXR0cnNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAgICAgaWYgKCF0aGlzLl92YWxpZGF0ZShhdHRycywgb3B0aW9ucykpIHJldHVybiBmYWxzZTtcblxuICAgICAgICAvLyBFeHRyYWN0IGF0dHJpYnV0ZXMgYW5kIG9wdGlvbnMuXG4gICAgICAgIHVuc2V0ID0gb3B0aW9ucy51bnNldDtcbiAgICAgICAgc2lsZW50ID0gb3B0aW9ucy5zaWxlbnQ7XG4gICAgICAgIGluaXRpYWwgPSBvcHRpb25zLmluaXRpYWw7XG5cbiAgICAgICAgLy8gSW5pdGlhbGl6ZSBjaGFuZ2UgdHJhY2tpbmcuXG4gICAgICAgIHdhc0NoYW5naW5nID0gdGhpcy5fY2hhbmdpbmc7XG4gICAgICAgIHRoaXMuX2NoYW5naW5nID0gdHJ1ZTtcbiAgICAgICAgY2hhbmdlRXZlbnRzID0gW107XG5cbiAgICAgICAgLy8gaWYgbm90IGFscmVhZHkgY2hhbmdpbmcsIHN0b3JlIHByZXZpb3VzXG4gICAgICAgIGlmIChpbml0aWFsKSB7XG4gICAgICAgICAgICB0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgfSBlbHNlIGlmICghd2FzQ2hhbmdpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZWQgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZvciBlYWNoIGBzZXRgIGF0dHJpYnV0ZS4uLlxuICAgICAgICBmb3IgKHZhciBpID0gMCwga2V5cyA9IE9iamVjdC5rZXlzKGF0dHJzKSwgbGVuID0ga2V5cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgYXR0ciA9IGtleXNbaV07XG4gICAgICAgICAgICBuZXdWYWwgPSBhdHRyc1thdHRyXTtcbiAgICAgICAgICAgIG5ld1R5cGUgPSB0eXBlb2YgbmV3VmFsO1xuICAgICAgICAgICAgY3VycmVudFZhbCA9IHRoaXMuX3ZhbHVlc1thdHRyXTtcbiAgICAgICAgICAgIGRlZiA9IHRoaXMuX2RlZmluaXRpb25bYXR0cl07XG5cbiAgICAgICAgICAgIGlmICghZGVmKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBhIGNoaWxkIG1vZGVsIG9yIGNvbGxlY3Rpb25cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hpbGRyZW5bYXR0cl0gfHwgdGhpcy5fY29sbGVjdGlvbnNbYXR0cl0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09iamVjdChuZXdWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdWYWwgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXNbYXR0cl0uc2V0KG5ld1ZhbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXh0cmFQcm9wZXJ0aWVzID09PSAnaWdub3JlJykge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV4dHJhUHJvcGVydGllcyA9PT0gJ3JlamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gXCInICsgYXR0ciArICdcIiBwcm9wZXJ0eSBkZWZpbmVkIG9uICcgKyAodGhpcy50eXBlIHx8ICd0aGlzJykgKyAnIG1vZGVsIGFuZCBleHRyYVByb3BlcnRpZXMgbm90IHNldCB0byBcImlnbm9yZVwiIG9yIFwiYWxsb3dcIicpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXh0cmFQcm9wZXJ0aWVzID09PSAnYWxsb3cnKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZiA9IHRoaXMuX2NyZWF0ZVByb3BlcnR5RGVmaW5pdGlvbihhdHRyLCAnYW55Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChleHRyYVByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCB2YWx1ZSBmb3IgZXh0cmFQcm9wZXJ0aWVzOiBcIicgKyBleHRyYVByb3BlcnRpZXMgKyAnXCInKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlzRXF1YWwgPSB0aGlzLl9nZXRDb21wYXJlRm9yVHlwZShkZWYudHlwZSk7XG4gICAgICAgICAgICBvbkNoYW5nZSA9IHRoaXMuX2dldE9uQ2hhbmdlRm9yVHlwZShkZWYudHlwZSk7XG4gICAgICAgICAgICBkYXRhVHlwZSA9IHRoaXMuX2RhdGFUeXBlc1tkZWYudHlwZV07XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIHR5cGUgaWYgd2UgaGF2ZSBvbmVcbiAgICAgICAgICAgIGlmIChkYXRhVHlwZSAmJiBkYXRhVHlwZS5zZXQpIHtcbiAgICAgICAgICAgICAgICBjYXN0ID0gZGF0YVR5cGUuc2V0KG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgbmV3VmFsID0gY2FzdC52YWw7XG4gICAgICAgICAgICAgICAgbmV3VHlwZSA9IGNhc3QudHlwZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgd2UndmUgZGVmaW5lZCBhIHRlc3QsIHJ1biBpdFxuICAgICAgICAgICAgaWYgKGRlZi50ZXN0KSB7XG4gICAgICAgICAgICAgICAgZXJyID0gZGVmLnRlc3QuY2FsbCh0aGlzLCBuZXdWYWwsIG5ld1R5cGUpO1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvcGVydHkgXFwnJyArIGF0dHIgKyAnXFwnIGZhaWxlZCB2YWxpZGF0aW9uIHdpdGggZXJyb3I6ICcgKyBlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgd2UgYXJlIHJlcXVpcmVkIGJ1dCB1bmRlZmluZWQsIHRocm93IGVycm9yLlxuICAgICAgICAgICAgLy8gSWYgd2UgYXJlIG51bGwgYW5kIGFyZSBub3QgYWxsb3dpbmcgbnVsbCwgdGhyb3cgZXJyb3JcbiAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBkZWZpbmVkIHR5cGUgYW5kIHRoZSBuZXcgdHlwZSBkb2Vzbid0IG1hdGNoLCBhbmQgd2UgYXJlIG5vdCBudWxsLCB0aHJvdyBlcnJvci5cbiAgICAgICAgICAgIC8vIElmIHdlIHJlcXVpcmUgc3BlY2lmaWMgdmFsdWUgYW5kIG5ldyBvbmUgaXMgbm90IG9uZSBvZiB0aGVtLCB0aHJvdyBlcnJvciAodW5sZXNzIGl0IGhhcyBkZWZhdWx0IHZhbHVlIG9yIHdlJ3JlIHVuc2V0dGluZyBpdCB3aXRoIHVuZGVmaW5lZCkuXG5cbiAgICAgICAgICAgIGlmIChuZXdWYWwgPT09IHVuZGVmaW5lZCAmJiBkZWYucmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1aXJlZCBwcm9wZXJ0eSBcXCcnICsgYXR0ciArICdcXCcgbXVzdCBiZSBvZiB0eXBlICcgKyBkZWYudHlwZSArICcuIFRyaWVkIHRvIHNldCAnICsgbmV3VmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXdWYWwgPT09IG51bGwgJiYgZGVmLnJlcXVpcmVkICYmICFkZWYuYWxsb3dOdWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvcGVydHkgXFwnJyArIGF0dHIgKyAnXFwnIG11c3QgYmUgb2YgdHlwZSAnICsgZGVmLnR5cGUgKyAnIChjYW5ub3QgYmUgbnVsbCkuIFRyaWVkIHRvIHNldCAnICsgbmV3VmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoZGVmLnR5cGUgJiYgZGVmLnR5cGUgIT09ICdhbnknICYmIGRlZi50eXBlICE9PSBuZXdUeXBlKSAmJiBuZXdWYWwgIT09IG51bGwgJiYgbmV3VmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9wZXJ0eSBcXCcnICsgYXR0ciArICdcXCcgbXVzdCBiZSBvZiB0eXBlICcgKyBkZWYudHlwZSArICcuIFRyaWVkIHRvIHNldCAnICsgbmV3VmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkZWYudmFsdWVzICYmICFpbmNsdWRlcyhkZWYudmFsdWVzLCBuZXdWYWwpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlZmF1bHRWYWx1ZSA9IHJlc3VsdChkZWYsICdkZWZhdWx0Jyk7XG4gICAgICAgICAgICAgICAgaWYgKHVuc2V0ICYmIGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbCA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF1bnNldCB8fCAodW5zZXQgJiYgbmV3VmFsICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3BlcnR5IFxcJycgKyBhdHRyICsgJ1xcJyBtdXN0IGJlIG9uZSBvZiB2YWx1ZXM6ICcgKyBkZWYudmFsdWVzLmpvaW4oJywgJykgKyAnLiBUcmllZCB0byBzZXQgJyArIG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBXZSBrbm93IHRoaXMgaGFzICdjaGFuZ2VkJyBpZiBpdCdzIHRoZSBpbml0aWFsIHNldCwgc28gc2tpcCBhIHBvdGVudGlhbGx5IGV4cGVuc2l2ZSBpc0VxdWFsIGNoZWNrLlxuICAgICAgICAgICAgaGFzQ2hhbmdlZCA9IGluaXRpYWwgfHwgIWlzRXF1YWwoY3VycmVudFZhbCwgbmV3VmFsLCBhdHRyKTtcblxuICAgICAgICAgICAgLy8gZW5mb3JjZSBgc2V0T25jZWAgZm9yIHByb3BlcnRpZXMgaWYgc2V0XG4gICAgICAgICAgICBpZiAoZGVmLnNldE9uY2UgJiYgY3VycmVudFZhbCAhPT0gdW5kZWZpbmVkICYmIGhhc0NoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9wZXJ0eSBcXCcnICsgYXR0ciArICdcXCcgY2FuIG9ubHkgYmUgc2V0IG9uY2UuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHNldC91bnNldCBhdHRyaWJ1dGVzLlxuICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBub3QgdGhlIGluaXRpYWwgc2V0LCBrZWVwIHRyYWNrIG9mIGNoYW5nZWQgYXR0cmlidXRlc1xuICAgICAgICAgICAgLy8gYW5kIHB1c2ggdG8gY2hhbmdlRXZlbnRzIGFycmF5IHNvIHdlIGNhbiBmaXJlIGV2ZW50cy5cbiAgICAgICAgICAgIGlmIChoYXNDaGFuZ2VkKSB7XG5cbiAgICAgICAgICAgICAgICAvLyBUaGlzIGZpcmVzIG5vIG1hdHRlciB3aGF0LCBldmVuIG9uIGluaXRpYWwgc2V0LlxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlKG5ld1ZhbCwgY3VycmVudFZhbCwgYXR0cik7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY2hhbmdlIChub3QgYW4gaW5pdGlhbCBzZXQpLCBtYXJrIHRoZSBjaGFuZ2UuXG4gICAgICAgICAgICAgICAgLy8gTm90ZSBpdCdzIGltcG9zc2libGUgdG8gdW5zZXQgb24gdGhlIGluaXRpYWwgc2V0IChpdCB3aWxsIGFscmVhZHkgYmUgdW5zZXQpLFxuICAgICAgICAgICAgICAgIC8vIHNvIHdlIG9ubHkgaW5jbHVkZSB0aGF0IGxvZ2ljIGhlcmUuXG4gICAgICAgICAgICAgICAgaWYgKCFpbml0aWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZWRbYXR0cl0gPSBuZXdWYWw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlc1thdHRyXSA9IGN1cnJlbnRWYWw7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1bnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUUgZGVsZXRlIGlzIHZlcnkgc2xvdy4gQ2FuIHdlIGdldCBhd2F5IHdpdGggc2V0dGluZyB0byB1bmRlZmluZWQ/XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fdmFsdWVzW2F0dHJdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2lsZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VFdmVudHMucHVzaCh7cHJldjogY3VycmVudFZhbCwgdmFsOiBuZXdWYWwsIGtleTogYXR0cn0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdW5zZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzW2F0dHJdID0gbmV3VmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTm90IGNoYW5nZWRcbiAgICAgICAgICAgICAgICAvLyBGSVhNRSBkZWxldGUgaXMgdmVyeSBzbG93LiBDYW4gd2UgZ2V0IGF3YXkgd2l0aCBzZXR0aW5nIHRvIHVuZGVmaW5lZD9cbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fY2hhbmdlZFthdHRyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpcmUgZXZlbnRzLiBUaGlzIGFycmF5IGlzIG5vdCBwb3B1bGF0ZWQgaWYgd2UgYXJlIHRvbGQgdG8gYmUgc2lsZW50LlxuICAgICAgICBpZiAoY2hhbmdlRXZlbnRzLmxlbmd0aCkgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIGNoYW5nZUV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChjaGFuZ2UpIHtcbiAgICAgICAgICAgIHNlbGYudHJpZ2dlcignY2hhbmdlOicgKyBjaGFuZ2Uua2V5LCBzZWxmLCBjaGFuZ2UudmFsLCBvcHRpb25zKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gWW91IG1pZ2h0IGJlIHdvbmRlcmluZyB3aHkgdGhlcmUncyBhIGB3aGlsZWAgbG9vcCBoZXJlLiBDaGFuZ2VzIGNhblxuICAgICAgICAvLyBiZSByZWN1cnNpdmVseSBuZXN0ZWQgd2l0aGluIGBcImNoYW5nZVwiYCBldmVudHMuXG4gICAgICAgIGlmICh3YXNDaGFuZ2luZykgcmV0dXJuIHRoaXM7XG4gICAgICAgIHdoaWxlICh0aGlzLl9wZW5kaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2NoYW5nZScsIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbmdpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIGdldDogZnVuY3Rpb24gKGF0dHIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbYXR0cl07XG4gICAgfSxcblxuICAgIC8vIFRvZ2dsZSBib29sZWFuIHByb3BlcnRpZXMgb3IgcHJvcGVydGllcyB0aGF0IGhhdmUgYSBgdmFsdWVzYFxuICAgIC8vIGFycmF5IGluIGl0cyBkZWZpbml0aW9uLlxuICAgIHRvZ2dsZTogZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICAgIHZhciBkZWYgPSB0aGlzLl9kZWZpbml0aW9uW3Byb3BlcnR5XTtcbiAgICAgICAgaWYgKGRlZi50eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIC8vIGlmIGl0J3MgYSBib29sLCBqdXN0IGZsaXAgaXRcbiAgICAgICAgICAgIHRoaXNbcHJvcGVydHldID0gIXRoaXNbcHJvcGVydHldO1xuICAgICAgICB9IGVsc2UgaWYgKGRlZiAmJiBkZWYudmFsdWVzKSB7XG4gICAgICAgICAgICAvLyBJZiBpdCdzIGEgcHJvcGVydHkgd2l0aCBhbiBhcnJheSBvZiB2YWx1ZXNcbiAgICAgICAgICAgIC8vIHNraXAgdG8gdGhlIG5leHQgb25lIGxvb3BpbmcgYmFjayBpZiBhdCBlbmQuXG4gICAgICAgICAgICB0aGlzW3Byb3BlcnR5XSA9IGFycmF5TmV4dChkZWYudmFsdWVzLCB0aGlzW3Byb3BlcnR5XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW4gb25seSB0b2dnbGUgcHJvcGVydGllcyB0aGF0IGFyZSB0eXBlIGBib29sZWFuYCBvciBoYXZlIGB2YWx1ZXNgIGFycmF5LicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyBHZXQgYWxsIG9mIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBtb2RlbCBhdCB0aGUgdGltZSBvZiB0aGUgcHJldmlvdXNcbiAgICAvLyBgXCJjaGFuZ2VcImAgZXZlbnQuXG4gICAgcHJldmlvdXNBdHRyaWJ1dGVzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBjbG9uZU9iaih0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXMpO1xuICAgIH0sXG5cbiAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIG1vZGVsIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IGBcImNoYW5nZVwiYCBldmVudC5cbiAgICAvLyBJZiB5b3Ugc3BlY2lmeSBhbiBhdHRyaWJ1dGUgbmFtZSwgZGV0ZXJtaW5lIGlmIHRoYXQgYXR0cmlidXRlIGhhcyBjaGFuZ2VkLlxuICAgIGhhc0NoYW5nZWQ6IGZ1bmN0aW9uIChhdHRyKSB7XG4gICAgICAgIGlmIChhdHRyID09IG51bGwpIHJldHVybiAhIU9iamVjdC5rZXlzKHRoaXMuX2NoYW5nZWQpLmxlbmd0aDtcbiAgICAgICAgaWYgKGhhcyh0aGlzLl9kZXJpdmVkLCBhdHRyKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rlcml2ZWRbYXR0cl0uZGVwTGlzdC5zb21lKGZ1bmN0aW9uIChkZXApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYXNDaGFuZ2VkKGRlcCk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFzKHRoaXMuX2NoYW5nZWQsIGF0dHIpO1xuICAgIH0sXG5cbiAgICAvLyBSZXR1cm4gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBjaGFuZ2VkLCBvclxuICAgIC8vIGZhbHNlIGlmIHRoZXJlIGFyZSBubyBjaGFuZ2VkIGF0dHJpYnV0ZXMuIFVzZWZ1bCBmb3IgZGV0ZXJtaW5pbmcgd2hhdFxuICAgIC8vIHBhcnRzIG9mIGEgdmlldyBuZWVkIHRvIGJlIHVwZGF0ZWQgYW5kL29yIHdoYXQgYXR0cmlidXRlcyBuZWVkIHRvIGJlXG4gICAgLy8gcGVyc2lzdGVkIHRvIHRoZSBzZXJ2ZXIuIFVuc2V0IGF0dHJpYnV0ZXMgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLlxuICAgIC8vIFlvdSBjYW4gYWxzbyBwYXNzIGFuIGF0dHJpYnV0ZXMgb2JqZWN0IHRvIGRpZmYgYWdhaW5zdCB0aGUgbW9kZWwsXG4gICAgLy8gZGV0ZXJtaW5pbmcgaWYgdGhlcmUgKndvdWxkIGJlKiBhIGNoYW5nZS5cbiAgICBjaGFuZ2VkQXR0cmlidXRlczogZnVuY3Rpb24gKGRpZmYpIHtcbiAgICAgICAgaWYgKCFkaWZmKSByZXR1cm4gdGhpcy5oYXNDaGFuZ2VkKCkgPyBjbG9uZU9iaih0aGlzLl9jaGFuZ2VkKSA6IGZhbHNlO1xuICAgICAgICB2YXIgdmFsLCBjaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIHZhciBvbGQgPSB0aGlzLl9jaGFuZ2luZyA/IHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcyA6IHRoaXMuYXR0cmlidXRlcztcbiAgICAgICAgdmFyIGRlZiwgaXNFcXVhbDtcbiAgICAgICAgZm9yICh2YXIgYXR0ciBpbiBkaWZmKSB7XG4gICAgICAgICAgICBkZWYgPSB0aGlzLl9kZWZpbml0aW9uW2F0dHJdO1xuICAgICAgICAgICAgaWYgKCFkZWYpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaXNFcXVhbCA9IHRoaXMuX2dldENvbXBhcmVGb3JUeXBlKGRlZi50eXBlKTtcbiAgICAgICAgICAgIGlmIChpc0VxdWFsKG9sZFthdHRyXSwgKHZhbCA9IGRpZmZbYXR0cl0pKSkgY29udGludWU7XG4gICAgICAgICAgICAoY2hhbmdlZCB8fCAoY2hhbmdlZCA9IHt9KSlbYXR0cl0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoYW5nZWQ7XG4gICAgfSxcblxuICAgIHRvSlNPTjogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXJpYWxpemUoKTtcbiAgICB9LFxuXG4gICAgdW5zZXQ6IGZ1bmN0aW9uIChhdHRycywgb3B0aW9ucykge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIGF0dHJzID0gQXJyYXkuaXNBcnJheShhdHRycykgPyBhdHRycyA6IFthdHRyc107XG4gICAgICAgIGF0dHJzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgdmFyIGRlZiA9IHNlbGYuX2RlZmluaXRpb25ba2V5XTtcbiAgICAgICAgICAgIGlmICghZGVmKSByZXR1cm47XG4gICAgICAgICAgICB2YXIgdmFsO1xuICAgICAgICAgICAgaWYgKGRlZi5yZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIHZhbCA9IHJlc3VsdChkZWYsICdkZWZhdWx0Jyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0KGtleSwgdmFsLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0KGtleSwgdmFsLCBhc3NpZ24oe30sIG9wdGlvbnMsIHt1bnNldDogdHJ1ZX0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGNsZWFyOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBzZWxmLnVuc2V0KGtleSwgb3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgcHJldmlvdXM6IGZ1bmN0aW9uIChhdHRyKSB7XG4gICAgICAgIGlmIChhdHRyID09IG51bGwgfHwgIU9iamVjdC5rZXlzKHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcykubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlc1thdHRyXTtcbiAgICB9LFxuXG4gICAgLy8gR2V0IGRlZmF1bHQgdmFsdWVzIGZvciBhIGNlcnRhaW4gdHlwZVxuICAgIF9nZXREZWZhdWx0Rm9yVHlwZTogZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgICAgdmFyIGRhdGFUeXBlID0gdGhpcy5fZGF0YVR5cGVzW3R5cGVdO1xuICAgICAgICByZXR1cm4gZGF0YVR5cGUgJiYgZGF0YVR5cGVbJ2RlZmF1bHQnXTtcbiAgICB9LFxuXG4gICAgLy8gRGV0ZXJtaW5lIHdoaWNoIGNvbXBhcmlzb24gYWxnb3JpdGhtIHRvIHVzZSBmb3IgY29tcGFyaW5nIGEgcHJvcGVydHlcbiAgICBfZ2V0Q29tcGFyZUZvclR5cGU6IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIHZhciBkYXRhVHlwZSA9IHRoaXMuX2RhdGFUeXBlc1t0eXBlXTtcbiAgICAgICAgaWYgKGRhdGFUeXBlICYmIGRhdGFUeXBlLmNvbXBhcmUpIHJldHVybiBkYXRhVHlwZS5jb21wYXJlLmJpbmQodGhpcyk7XG4gICAgICAgIHJldHVybiBfaXNFcXVhbDsgLy8gaWYgbm8gY29tcGFyZSBmdW5jdGlvbiBpcyBkZWZpbmVkLCB1c2UgXy5pc0VxdWFsXG4gICAgfSxcblxuICAgIF9nZXRPbkNoYW5nZUZvclR5cGUgOiBmdW5jdGlvbih0eXBlKXtcbiAgICAgICAgdmFyIGRhdGFUeXBlID0gdGhpcy5fZGF0YVR5cGVzW3R5cGVdO1xuICAgICAgICBpZiAoZGF0YVR5cGUgJiYgZGF0YVR5cGUub25DaGFuZ2UpIHJldHVybiBkYXRhVHlwZS5vbkNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICByZXR1cm4gbm9vcDtcbiAgICB9LFxuXG4gICAgLy8gUnVuIHZhbGlkYXRpb24gYWdhaW5zdCB0aGUgbmV4dCBjb21wbGV0ZSBzZXQgb2YgbW9kZWwgYXR0cmlidXRlcyxcbiAgICAvLyByZXR1cm5pbmcgYHRydWVgIGlmIGFsbCBpcyB3ZWxsLiBPdGhlcndpc2UsIGZpcmUgYW4gYFwiaW52YWxpZFwiYCBldmVudC5cbiAgICBfdmFsaWRhdGU6IGZ1bmN0aW9uIChhdHRycywgb3B0aW9ucykge1xuICAgICAgICBpZiAoIW9wdGlvbnMudmFsaWRhdGUgfHwgIXRoaXMudmFsaWRhdGUpIHJldHVybiB0cnVlO1xuICAgICAgICBhdHRycyA9IGFzc2lnbih7fSwgdGhpcy5hdHRyaWJ1dGVzLCBhdHRycyk7XG4gICAgICAgIHZhciBlcnJvciA9IHRoaXMudmFsaWRhdGlvbkVycm9yID0gdGhpcy52YWxpZGF0ZShhdHRycywgb3B0aW9ucykgfHwgbnVsbDtcbiAgICAgICAgaWYgKCFlcnJvcikgcmV0dXJuIHRydWU7XG4gICAgICAgIHRoaXMudHJpZ2dlcignaW52YWxpZCcsIHRoaXMsIGVycm9yLCBhc3NpZ24ob3B0aW9ucyB8fCB7fSwge3ZhbGlkYXRpb25FcnJvcjogZXJyb3J9KSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgX2NyZWF0ZVByb3BlcnR5RGVmaW5pdGlvbjogZnVuY3Rpb24gKG5hbWUsIGRlc2MsIGlzU2Vzc2lvbikge1xuICAgICAgICByZXR1cm4gY3JlYXRlUHJvcGVydHlEZWZpbml0aW9uKHRoaXMsIG5hbWUsIGRlc2MsIGlzU2Vzc2lvbik7XG4gICAgfSxcblxuICAgIC8vIGp1c3QgbWFrZXMgZnJpZW5kbGllciBlcnJvcnMgd2hlbiB0cnlpbmcgdG8gZGVmaW5lIGEgbmV3IG1vZGVsXG4gICAgLy8gb25seSB1c2VkIHdoZW4gc2V0dGluZyB1cCBvcmlnaW5hbCBwcm9wZXJ0eSBkZWZpbml0aW9uc1xuICAgIF9lbnN1cmVWYWxpZFR5cGU6IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIHJldHVybiBpbmNsdWRlcyhbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbicsICdhcnJheScsICdvYmplY3QnLCAnZGF0ZScsICdzdGF0ZScsICdhbnknXVxuICAgICAgICAgICAgLmNvbmNhdChPYmplY3Qua2V5cyh0aGlzLl9kYXRhVHlwZXMpKSwgdHlwZSkgPyB0eXBlIDogdW5kZWZpbmVkO1xuICAgIH0sXG5cbiAgICBnZXRBdHRyaWJ1dGVzOiBmdW5jdGlvbiAob3B0aW9ucywgcmF3KSB7XG4gICAgICAgIG9wdGlvbnMgPSBhc3NpZ24oe1xuICAgICAgICAgICAgc2Vzc2lvbjogZmFsc2UsXG4gICAgICAgICAgICBwcm9wczogZmFsc2UsXG4gICAgICAgICAgICBkZXJpdmVkOiBmYWxzZVxuICAgICAgICB9LCBvcHRpb25zIHx8IHt9KTtcbiAgICAgICAgdmFyIHJlcyA9IHt9O1xuICAgICAgICB2YXIgdmFsLCBkZWY7XG4gICAgICAgIGZvciAodmFyIGl0ZW0gaW4gdGhpcy5fZGVmaW5pdGlvbikge1xuICAgICAgICAgICAgZGVmID0gdGhpcy5fZGVmaW5pdGlvbltpdGVtXTtcbiAgICAgICAgICAgIGlmICgob3B0aW9ucy5zZXNzaW9uICYmIGRlZi5zZXNzaW9uKSB8fCAob3B0aW9ucy5wcm9wcyAmJiAhZGVmLnNlc3Npb24pKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gcmF3ID8gdGhpcy5fdmFsdWVzW2l0ZW1dIDogdGhpc1tpdGVtXTtcbiAgICAgICAgICAgICAgICBpZiAocmF3ICYmIHZhbCAmJiBpc0Z1bmN0aW9uKHZhbC5zZXJpYWxpemUpKSB2YWwgPSB2YWwuc2VyaWFsaXplKCk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnKSB2YWwgPSByZXN1bHQoZGVmLCAnZGVmYXVsdCcpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsICE9PSAndW5kZWZpbmVkJykgcmVzW2l0ZW1dID0gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmRlcml2ZWQpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGRlcml2ZWRJdGVtIGluIHRoaXMuX2Rlcml2ZWQpIHJlc1tkZXJpdmVkSXRlbV0gPSB0aGlzW2Rlcml2ZWRJdGVtXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG5cbiAgICBfaW5pdERlcml2ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIGZvck93bih0aGlzLl9kZXJpdmVkLCBmdW5jdGlvbiAodmFsdWUsIG5hbWUpIHtcbiAgICAgICAgICAgIHZhciBkZWYgPSBzZWxmLl9kZXJpdmVkW25hbWVdO1xuICAgICAgICAgICAgZGVmLmRlcHMgPSBkZWYuZGVwTGlzdDtcblxuICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgbmV3VmFsID0gZGVmLmZuLmNhbGwoc2VsZik7XG5cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5fY2FjaGVbbmFtZV0gIT09IG5ld1ZhbCB8fCAhZGVmLmNhY2hlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWYuY2FjaGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3ByZXZpb3VzQXR0cmlidXRlc1tuYW1lXSA9IHNlbGYuX2NhY2hlW25hbWVdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlW25hbWVdID0gbmV3VmFsO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ2NoYW5nZTonICsgbmFtZSwgc2VsZiwgc2VsZi5fY2FjaGVbbmFtZV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGRlZi5kZXBzLmZvckVhY2goZnVuY3Rpb24gKHByb3BTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9rZXlUcmVlLmFkZChwcm9wU3RyaW5nLCB1cGRhdGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub24oJ2FsbCcsIGZ1bmN0aW9uIChldmVudE5hbWUpIHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VSRS50ZXN0KGV2ZW50TmFtZSkpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9rZXlUcmVlLmdldChldmVudE5hbWUuc3BsaXQoJzonKVsxXSkuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfSxcblxuICAgIF9nZXREZXJpdmVkUHJvcGVydHk6IGZ1bmN0aW9uIChuYW1lLCBmbHVzaENhY2hlKSB7XG4gICAgICAgIC8vIGlzIHRoaXMgYSBkZXJpdmVkIHByb3BlcnR5IHRoYXQgaXMgY2FjaGVkXG4gICAgICAgIGlmICh0aGlzLl9kZXJpdmVkW25hbWVdLmNhY2hlKSB7XG4gICAgICAgICAgICAvL3NldCBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lLCBvciBmbHVzaENhY2hlIGlzIHNldFxuICAgICAgICAgICAgaWYgKGZsdXNoQ2FjaGUgfHwgIXRoaXMuX2NhY2hlLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVbbmFtZV0gPSB0aGlzLl9kZXJpdmVkW25hbWVdLmZuLmFwcGx5KHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlW25hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rlcml2ZWRbbmFtZV0uZm4uYXBwbHkodGhpcyk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX2luaXRDb2xsZWN0aW9uczogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY29sbDtcbiAgICAgICAgaWYgKCF0aGlzLl9jb2xsZWN0aW9ucykgcmV0dXJuO1xuICAgICAgICBmb3IgKGNvbGwgaW4gdGhpcy5fY29sbGVjdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuX3NhZmVTZXQoY29sbCwgbmV3IHRoaXMuX2NvbGxlY3Rpb25zW2NvbGxdKG51bGwsIHtwYXJlbnQ6IHRoaXN9KSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX2luaXRDaGlsZHJlbjogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY2hpbGQ7XG4gICAgICAgIGlmICghdGhpcy5fY2hpbGRyZW4pIHJldHVybjtcbiAgICAgICAgZm9yIChjaGlsZCBpbiB0aGlzLl9jaGlsZHJlbikge1xuICAgICAgICAgICAgdGhpcy5fc2FmZVNldChjaGlsZCwgbmV3IHRoaXMuX2NoaWxkcmVuW2NoaWxkXSh7fSwge3BhcmVudDogdGhpc30pKTtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuVG8odGhpc1tjaGlsZF0sICdhbGwnLCB0aGlzLl9nZXRDYWNoZWRFdmVudEJ1YmJsaW5nSGFuZGxlcihjaGlsZCkpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgYSBib3VuZCBoYW5kbGVyIGZvciBkb2luZyBldmVudCBidWJibGluZyB3aGlsZVxuICAgIC8vIGFkZGluZyBhIG5hbWUgdG8gdGhlIGNoYW5nZSBzdHJpbmcuXG4gICAgX2dldENhY2hlZEV2ZW50QnViYmxpbmdIYW5kbGVyOiBmdW5jdGlvbiAocHJvcGVydHlOYW1lKSB7XG4gICAgICAgIGlmICghdGhpcy5fZXZlbnRCdWJibGluZ0hhbmRsZXJDYWNoZVtwcm9wZXJ0eU5hbWVdKSB7XG4gICAgICAgICAgICB0aGlzLl9ldmVudEJ1YmJsaW5nSGFuZGxlckNhY2hlW3Byb3BlcnR5TmFtZV0gPSBmdW5jdGlvbiAobmFtZSwgbW9kZWwsIG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoYW5nZVJFLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdjaGFuZ2U6JyArIHByb3BlcnR5TmFtZSArICcuJyArIG5hbWUuc3BsaXQoJzonKVsxXSwgbW9kZWwsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdjaGFuZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignY2hhbmdlJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9ldmVudEJ1YmJsaW5nSGFuZGxlckNhY2hlW3Byb3BlcnR5TmFtZV07XG4gICAgfSxcblxuICAgIC8vIENoZWNrIHRoYXQgYWxsIHJlcXVpcmVkIGF0dHJpYnV0ZXMgYXJlIHByZXNlbnRcbiAgICBfdmVyaWZ5UmVxdWlyZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGF0dHJzID0gdGhpcy5hdHRyaWJ1dGVzOyAvLyBzaG91bGQgaW5jbHVkZSBzZXNzaW9uXG4gICAgICAgIGZvciAodmFyIGRlZiBpbiB0aGlzLl9kZWZpbml0aW9uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZGVmaW5pdGlvbltkZWZdLnJlcXVpcmVkICYmIHR5cGVvZiBhdHRyc1tkZWZdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuXG4gICAgLy8gZXhwb3NlIHNhZmVTZXQgbWV0aG9kXG4gICAgX3NhZmVTZXQ6IGZ1bmN0aW9uIHNhZmVTZXQocHJvcGVydHksIHZhbHVlKSB7XG4gICAgICAgIGlmIChwcm9wZXJ0eSBpbiB0aGlzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIG5hbWVzcGFjZSBjb2xsaXNpb24gd2hpbGUgc2V0dGluZyBpbnN0YW5jZSBwcm9wZXJ0eSBgJyArIHByb3BlcnR5ICsgJ2AnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzW3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59KTtcblxuLy8gZ2V0dGVyIGZvciBhdHRyaWJ1dGVzXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCYXNlLnByb3RvdHlwZSwge1xuICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVzKHtwcm9wczogdHJ1ZSwgc2Vzc2lvbjogdHJ1ZX0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBhbGw6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAgICAgICBzZXNzaW9uOiB0cnVlLFxuICAgICAgICAgICAgICAgIHByb3BzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGRlcml2ZWQ6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBpc1N0YXRlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZTsgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7IH1cbiAgICB9XG59KTtcblxuLy8gaGVscGVyIGZvciBjcmVhdGluZy9zdG9yaW5nIHByb3BlcnR5IGRlZmluaXRpb25zIGFuZCBjcmVhdGluZ1xuLy8gYXBwcm9wcmlhdGUgZ2V0dGVycy9zZXR0ZXJzXG5mdW5jdGlvbiBjcmVhdGVQcm9wZXJ0eURlZmluaXRpb24ob2JqZWN0LCBuYW1lLCBkZXNjLCBpc1Nlc3Npb24pIHtcbiAgICB2YXIgZGVmID0gb2JqZWN0Ll9kZWZpbml0aW9uW25hbWVdID0ge307XG4gICAgdmFyIHR5cGUsIGRlc2NBcnJheTtcblxuICAgIGlmIChpc1N0cmluZyhkZXNjKSkge1xuICAgICAgICAvLyBncmFiIG91ciB0eXBlIGlmIGFsbCB3ZSd2ZSBnb3QgaXMgYSBzdHJpbmdcbiAgICAgICAgdHlwZSA9IG9iamVjdC5fZW5zdXJlVmFsaWRUeXBlKGRlc2MpO1xuICAgICAgICBpZiAodHlwZSkgZGVmLnR5cGUgPSB0eXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vVHJhbnNmb3JtIGFycmF5IG9mIFsndHlwZScsIHJlcXVpcmVkLCBkZWZhdWx0XSB0byBvYmplY3QgZm9ybVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkZXNjKSkge1xuICAgICAgICAgICAgZGVzY0FycmF5ID0gZGVzYztcbiAgICAgICAgICAgIGRlc2MgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogZGVzY0FycmF5WzBdLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBkZXNjQXJyYXlbMV0sXG4gICAgICAgICAgICAgICAgJ2RlZmF1bHQnOiBkZXNjQXJyYXlbMl1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB0eXBlID0gb2JqZWN0Ll9lbnN1cmVWYWxpZFR5cGUoZGVzYy50eXBlKTtcbiAgICAgICAgaWYgKHR5cGUpIGRlZi50eXBlID0gdHlwZTtcblxuICAgICAgICBpZiAoZGVzYy5yZXF1aXJlZCkgZGVmLnJlcXVpcmVkID0gdHJ1ZTtcblxuICAgICAgICBpZiAoZGVzY1snZGVmYXVsdCddICYmIHR5cGVvZiBkZXNjWydkZWZhdWx0J10gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgJyArIG5hbWUgKyAnIGNhbm5vdCBiZSBhbiBvYmplY3QvYXJyYXksIG11c3QgYmUgYSB2YWx1ZSBvciBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYSB2YWx1ZS9vYmplY3QvYXJyYXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZlsnZGVmYXVsdCddID0gZGVzY1snZGVmYXVsdCddO1xuXG4gICAgICAgIGRlZi5hbGxvd051bGwgPSBkZXNjLmFsbG93TnVsbCA/IGRlc2MuYWxsb3dOdWxsIDogZmFsc2U7XG4gICAgICAgIGlmIChkZXNjLnNldE9uY2UpIGRlZi5zZXRPbmNlID0gdHJ1ZTtcbiAgICAgICAgaWYgKGRlZi5yZXF1aXJlZCAmJiBkZWZbJ2RlZmF1bHQnXSA9PT0gdW5kZWZpbmVkICYmICFkZWYuc2V0T25jZSkgZGVmWydkZWZhdWx0J10gPSBvYmplY3QuX2dldERlZmF1bHRGb3JUeXBlKHR5cGUpO1xuICAgICAgICBkZWYudGVzdCA9IGRlc2MudGVzdDtcbiAgICAgICAgZGVmLnZhbHVlcyA9IGRlc2MudmFsdWVzO1xuICAgIH1cbiAgICBpZiAoaXNTZXNzaW9uKSBkZWYuc2Vzc2lvbiA9IHRydWU7XG5cbiAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgdHlwZSA9IGlzU3RyaW5nKGRlc2MpID8gZGVzYyA6IGRlc2MudHlwZTtcbiAgICAgICAgLy8gVE9ETzogc3RhcnQgdGhyb3dpbmcgYSBUeXBlRXJyb3IgaW4gZnV0dXJlIG1ham9yIHZlcnNpb25zIGluc3RlYWQgb2Ygd2FybmluZ1xuICAgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgZGF0YSB0eXBlIG9mIGAnICsgdHlwZSArICdgIGZvciBgJyArIG5hbWUgKyAnYCBwcm9wZXJ0eS4gVXNlIG9uZSBvZiB0aGUgZGVmYXVsdCB0eXBlcyBvciBkZWZpbmUgeW91ciBvd24nKTtcbiAgICB9XG5cbiAgICAvLyBkZWZpbmUgYSBnZXR0ZXIvc2V0dGVyIG9uIHRoZSBwcm90b3R5cGVcbiAgICAvLyBidXQgdGhleSBnZXQvc2V0IG9uIHRoZSBpbnN0YW5jZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNldChuYW1lLCB2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1lvdSBtYXkgYmUgdHJ5aW5nIHRvIGBleHRlbmRgIGEgc3RhdGUgb2JqZWN0IHdpdGggXCInICsgbmFtZSArICdcIiB3aGljaCBoYXMgYmVlbiBkZWZpbmVkIGluIGBwcm9wc2Agb24gdGhlIG9iamVjdCBiZWluZyBleHRlbmRlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5fdmFsdWVzW25hbWVdO1xuICAgICAgICAgICAgdmFyIHR5cGVEZWYgPSB0aGlzLl9kYXRhVHlwZXNbZGVmLnR5cGVdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZURlZiAmJiB0eXBlRGVmLmdldCkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHR5cGVEZWYuZ2V0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRlZmF1bHRWYWx1ZSA9IHJlc3VsdChkZWYsICdkZWZhdWx0Jyk7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZXNbbmFtZV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAvLyBJZiB3ZSd2ZSBzZXQgYSBkZWZhdWx0VmFsdWUsIGZpcmUgYSBjaGFuZ2UgaGFuZGxlciBlZmZlY3RpdmVseSBtYXJraW5nXG4gICAgICAgICAgICAvLyBpdHMgY2hhbmdlIGZyb20gdW5kZWZpbmVkIHRvIHRoZSBkZWZhdWx0IHZhbHVlLlxuICAgICAgICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9uQ2hhbmdlID0gdGhpcy5fZ2V0T25DaGFuZ2VGb3JUeXBlKGRlZi50eXBlKTtcbiAgICAgICAgICAgICAgICBvbkNoYW5nZShkZWZhdWx0VmFsdWUsIHZhbHVlLCBuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBkZWY7XG59XG5cbi8vIGhlbHBlciBmb3IgY3JlYXRpbmcgZGVyaXZlZCBwcm9wZXJ0eSBkZWZpbml0aW9uc1xuZnVuY3Rpb24gY3JlYXRlRGVyaXZlZFByb3BlcnR5KG1vZGVsUHJvdG8sIG5hbWUsIGRlZmluaXRpb24pIHtcbiAgICB2YXIgZGVmID0gbW9kZWxQcm90by5fZGVyaXZlZFtuYW1lXSA9IHtcbiAgICAgICAgZm46IGlzRnVuY3Rpb24oZGVmaW5pdGlvbikgPyBkZWZpbml0aW9uIDogZGVmaW5pdGlvbi5mbixcbiAgICAgICAgY2FjaGU6IChkZWZpbml0aW9uLmNhY2hlICE9PSBmYWxzZSksXG4gICAgICAgIGRlcExpc3Q6IGRlZmluaXRpb24uZGVwcyB8fCBbXVxuICAgIH07XG5cbiAgICAvLyBhZGQgdG8gb3VyIHNoYXJlZCBkZXBlbmRlbmN5IGxpc3RcbiAgICBkZWYuZGVwTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChkZXApIHtcbiAgICAgICAgbW9kZWxQcm90by5fZGVwc1tkZXBdID0gdW5pb24obW9kZWxQcm90by5fZGVwc1tkZXBdIHx8IFtdLCBbbmFtZV0pO1xuICAgIH0pO1xuXG4gICAgLy8gZGVmaW5lZCBhIHRvcC1sZXZlbCBnZXR0ZXIgZm9yIGRlcml2ZWQgbmFtZXNcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kZWxQcm90bywgbmFtZSwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXREZXJpdmVkUHJvcGVydHkobmFtZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImBcIiArIG5hbWUgKyBcImAgaXMgYSBkZXJpdmVkIHByb3BlcnR5LCBpdCBjYW4ndCBiZSBzZXQgZGlyZWN0bHkuXCIpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbnZhciBkYXRhVHlwZXMgPSB7XG4gICAgc3RyaW5nOiB7XG4gICAgICAgICdkZWZhdWx0JzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBkYXRlOiB7XG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ZhbCkge1xuICAgICAgICAgICAgdmFyIG5ld1R5cGU7XG4gICAgICAgICAgICBpZiAobmV3VmFsID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBuZXdUeXBlID0gdHlwZW9mIG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpc0RhdGUobmV3VmFsKSkge1xuICAgICAgICAgICAgICAgIHZhciBlcnIgPSBudWxsO1xuICAgICAgICAgICAgICAgIHZhciBkYXRlVmFsID0gbmV3IERhdGUobmV3VmFsKS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKGRhdGVWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBuZXdWYWwgY2FudCBiZSBwYXJzZWQsIHRoZW4gdHJ5IHBhcnNlSW50IGZpcnN0XG4gICAgICAgICAgICAgICAgICAgIGRhdGVWYWwgPSBuZXcgRGF0ZShwYXJzZUludChuZXdWYWwsIDEwKSkudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4oZGF0ZVZhbCkpIGVyciA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5ld1ZhbCA9IGRhdGVWYWw7XG4gICAgICAgICAgICAgICAgbmV3VHlwZSA9ICdkYXRlJztcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1R5cGUgPSB0eXBlb2YgbmV3VmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3VHlwZSA9ICdkYXRlJztcbiAgICAgICAgICAgICAgICBuZXdWYWwgPSBuZXdWYWwudmFsdWVPZigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHZhbDogbmV3VmFsLFxuICAgICAgICAgICAgICAgIHR5cGU6IG5ld1R5cGVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGdldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgaWYgKHZhbCA9PSBudWxsKSB7IHJldHVybiB2YWw7IH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWwpO1xuICAgICAgICB9LFxuICAgICAgICAnZGVmYXVsdCc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSgpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBhcnJheToge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdWYWwpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdmFsOiBuZXdWYWwsXG4gICAgICAgICAgICAgICAgdHlwZTogQXJyYXkuaXNBcnJheShuZXdWYWwpID8gJ2FycmF5JyA6IHR5cGVvZiBuZXdWYWxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgICdkZWZhdWx0JzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBvYmplY3Q6IHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3VmFsKSB7XG4gICAgICAgICAgICB2YXIgbmV3VHlwZSA9IHR5cGVvZiBuZXdWYWw7XG4gICAgICAgICAgICAvLyB3ZSBoYXZlIHRvIGhhdmUgYSB3YXkgb2Ygc3VwcG9ydGluZyBcIm1pc3NpbmdcIiBvYmplY3RzLlxuICAgICAgICAgICAgLy8gTnVsbCBpcyBhbiBvYmplY3QsIGJ1dCBzZXR0aW5nIGEgdmFsdWUgdG8gdW5kZWZpbmVkXG4gICAgICAgICAgICAvLyBzaG91bGQgd29yayB0b28sIElNTy4gV2UganVzdCBvdmVycmlkZSBpdCwgaW4gdGhhdCBjYXNlLlxuICAgICAgICAgICAgaWYgKG5ld1R5cGUgIT09ICdvYmplY3QnICYmIG5ld1ZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbmV3VmFsID0gbnVsbDtcbiAgICAgICAgICAgICAgICBuZXdUeXBlID0gJ29iamVjdCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHZhbDogbmV3VmFsLFxuICAgICAgICAgICAgICAgIHR5cGU6IG5ld1R5cGVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgICdkZWZhdWx0JzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvLyB0aGUgYHN0YXRlYCBkYXRhIHR5cGUgaXMgYSBiaXQgc3BlY2lhbCBpbiB0aGF0IHNldHRpbmcgaXQgc2hvdWxkXG4gICAgLy8gYWxzbyBidWJibGUgZXZlbnRzXG4gICAgc3RhdGU6IHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3VmFsKSB7XG4gICAgICAgICAgICB2YXIgaXNJbnN0YW5jZSA9IG5ld1ZhbCBpbnN0YW5jZW9mIEJhc2UgfHwgKG5ld1ZhbCAmJiBuZXdWYWwuaXNTdGF0ZSk7XG4gICAgICAgICAgICBpZiAoaXNJbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbDogbmV3VmFsLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3RhdGUnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsOiBuZXdWYWwsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVvZiBuZXdWYWxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb21wYXJlOiBmdW5jdGlvbiAoY3VycmVudFZhbCwgbmV3VmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFZhbCA9PT0gbmV3VmFsO1xuICAgICAgICB9LFxuXG4gICAgICAgIG9uQ2hhbmdlIDogZnVuY3Rpb24obmV3VmFsLCBwcmV2aW91c1ZhbCwgYXR0cmlidXRlTmFtZSl7XG4gICAgICAgICAgICAvLyBpZiB0aGlzIGhhcyBjaGFuZ2VkIHdlIHdhbnQgdG8gYWxzbyBoYW5kbGVcbiAgICAgICAgICAgIC8vIGV2ZW50IHByb3BhZ2F0aW9uXG4gICAgICAgICAgICBpZiAocHJldmlvdXNWYWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3BMaXN0ZW5pbmcocHJldmlvdXNWYWwsICdhbGwnLCB0aGlzLl9nZXRDYWNoZWRFdmVudEJ1YmJsaW5nSGFuZGxlcihhdHRyaWJ1dGVOYW1lKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuZXdWYWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuVG8obmV3VmFsLCAnYWxsJywgdGhpcy5fZ2V0Q2FjaGVkRXZlbnRCdWJibGluZ0hhbmRsZXIoYXR0cmlidXRlTmFtZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLy8gdGhlIGV4dGVuZCBtZXRob2QgdXNlZCB0byBleHRlbmQgcHJvdG90eXBlcywgbWFpbnRhaW4gaW5oZXJpdGFuY2UgY2hhaW5zIGZvciBpbnN0YW5jZW9mXG4vLyBhbmQgYWxsb3cgZm9yIGFkZGl0aW9ucyB0byB0aGUgbW9kZWwgZGVmaW5pdGlvbnMuXG5mdW5jdGlvbiBleHRlbmQocHJvdG9Qcm9wcykge1xuICAgIC8qanNoaW50IHZhbGlkdGhpczp0cnVlKi9cbiAgICB2YXIgcGFyZW50ID0gdGhpcztcbiAgICB2YXIgY2hpbGQ7XG5cbiAgICAvLyBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBuZXcgc3ViY2xhc3MgaXMgZWl0aGVyIGRlZmluZWQgYnkgeW91XG4gICAgLy8gKHRoZSBcImNvbnN0cnVjdG9yXCIgcHJvcGVydHkgaW4geW91ciBgZXh0ZW5kYCBkZWZpbml0aW9uKSwgb3IgZGVmYXVsdGVkXG4gICAgLy8gYnkgdXMgdG8gc2ltcGx5IGNhbGwgdGhlIHBhcmVudCdzIGNvbnN0cnVjdG9yLlxuICAgIGlmIChwcm90b1Byb3BzICYmIHByb3RvUHJvcHMuaGFzT3duUHJvcGVydHkoJ2NvbnN0cnVjdG9yJykpIHtcbiAgICAgICAgY2hpbGQgPSBwcm90b1Byb3BzLmNvbnN0cnVjdG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIEFkZCBzdGF0aWMgcHJvcGVydGllcyB0byB0aGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZnJvbSBwYXJlbnRcbiAgICBhc3NpZ24oY2hpbGQsIHBhcmVudCk7XG5cbiAgICAvLyBTZXQgdGhlIHByb3RvdHlwZSBjaGFpbiB0byBpbmhlcml0IGZyb20gYHBhcmVudGAsIHdpdGhvdXQgY2FsbGluZ1xuICAgIC8vIGBwYXJlbnRgJ3MgY29uc3RydWN0b3IgZnVuY3Rpb24uXG4gICAgdmFyIFN1cnJvZ2F0ZSA9IGZ1bmN0aW9uICgpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9O1xuICAgIFN1cnJvZ2F0ZS5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlO1xuICAgIGNoaWxkLnByb3RvdHlwZSA9IG5ldyBTdXJyb2dhdGUoKTtcblxuICAgIC8vIHNldCBwcm90b3R5cGUgbGV2ZWwgb2JqZWN0c1xuICAgIGNoaWxkLnByb3RvdHlwZS5fZGVyaXZlZCA9ICBhc3NpZ24oe30sIHBhcmVudC5wcm90b3R5cGUuX2Rlcml2ZWQpO1xuICAgIGNoaWxkLnByb3RvdHlwZS5fZGVwcyA9IGFzc2lnbih7fSwgcGFyZW50LnByb3RvdHlwZS5fZGVwcyk7XG4gICAgY2hpbGQucHJvdG90eXBlLl9kZWZpbml0aW9uID0gYXNzaWduKHt9LCBwYXJlbnQucHJvdG90eXBlLl9kZWZpbml0aW9uKTtcbiAgICBjaGlsZC5wcm90b3R5cGUuX2NvbGxlY3Rpb25zID0gYXNzaWduKHt9LCBwYXJlbnQucHJvdG90eXBlLl9jb2xsZWN0aW9ucyk7XG4gICAgY2hpbGQucHJvdG90eXBlLl9jaGlsZHJlbiA9IGFzc2lnbih7fSwgcGFyZW50LnByb3RvdHlwZS5fY2hpbGRyZW4pO1xuICAgIGNoaWxkLnByb3RvdHlwZS5fZGF0YVR5cGVzID0gYXNzaWduKHt9LCBwYXJlbnQucHJvdG90eXBlLl9kYXRhVHlwZXMgfHwgZGF0YVR5cGVzKTtcblxuICAgIC8vIE1peCBpbiBhbGwgcHJvdG90eXBlIHByb3BlcnRpZXMgdG8gdGhlIHN1YmNsYXNzIGlmIHN1cHBsaWVkLlxuICAgIGlmIChwcm90b1Byb3BzKSB7XG4gICAgICAgIHZhciBvbWl0RnJvbUV4dGVuZCA9IFtcbiAgICAgICAgICAgICdkYXRhVHlwZXMnLCAncHJvcHMnLCAnc2Vzc2lvbicsICdkZXJpdmVkJywgJ2NvbGxlY3Rpb25zJywgJ2NoaWxkcmVuJ1xuICAgICAgICBdO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgZGVmID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgaWYgKGRlZi5kYXRhVHlwZXMpIHtcbiAgICAgICAgICAgICAgICBmb3JPd24oZGVmLmRhdGFUeXBlcywgZnVuY3Rpb24gKGRlZiwgbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZC5wcm90b3R5cGUuX2RhdGFUeXBlc1tuYW1lXSA9IGRlZjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkZWYucHJvcHMpIHtcbiAgICAgICAgICAgICAgICBmb3JPd24oZGVmLnByb3BzLCBmdW5jdGlvbiAoZGVmLCBuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZVByb3BlcnR5RGVmaW5pdGlvbihjaGlsZC5wcm90b3R5cGUsIG5hbWUsIGRlZik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGVmLnNlc3Npb24pIHtcbiAgICAgICAgICAgICAgICBmb3JPd24oZGVmLnNlc3Npb24sIGZ1bmN0aW9uIChkZWYsIG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlUHJvcGVydHlEZWZpbml0aW9uKGNoaWxkLnByb3RvdHlwZSwgbmFtZSwgZGVmLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkZWYuZGVyaXZlZCkge1xuICAgICAgICAgICAgICAgIGZvck93bihkZWYuZGVyaXZlZCwgZnVuY3Rpb24gKGRlZiwgbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGVEZXJpdmVkUHJvcGVydHkoY2hpbGQucHJvdG90eXBlLCBuYW1lLCBkZWYpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRlZi5jb2xsZWN0aW9ucykge1xuICAgICAgICAgICAgICAgIGZvck93bihkZWYuY29sbGVjdGlvbnMsIGZ1bmN0aW9uIChjb25zdHJ1Y3RvciwgbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZC5wcm90b3R5cGUuX2NvbGxlY3Rpb25zW25hbWVdID0gY29uc3RydWN0b3I7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGVmLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgZm9yT3duKGRlZi5jaGlsZHJlbiwgZnVuY3Rpb24gKGNvbnN0cnVjdG9yLCBuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLnByb3RvdHlwZS5fY2hpbGRyZW5bbmFtZV0gPSBjb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzc2lnbihjaGlsZC5wcm90b3R5cGUsIG9taXQoZGVmLCBvbWl0RnJvbUV4dGVuZCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IGEgY29udmVuaWVuY2UgcHJvcGVydHkgaW4gY2FzZSB0aGUgcGFyZW50J3MgcHJvdG90eXBlIGlzIG5lZWRlZFxuICAgIC8vIGxhdGVyLlxuICAgIGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59XG5cbkJhc2UuZXh0ZW5kID0gZXh0ZW5kO1xuXG4vLyBPdXIgbWFpbiBleHBvcnRzXG5tb2R1bGUuZXhwb3J0cyA9IEJhc2U7XG4iLCJ2YXIgeGhyID0gcmVxdWlyZSgneGhyJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29yZScpKHhocik7XG4iLCIvKiRBTVBFUlNBTkRfVkVSU0lPTiovXG52YXIgcmVzdWx0ID0gcmVxdWlyZSgnbG9kYXNoL3Jlc3VsdCcpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnbG9kYXNoL2RlZmF1bHRzJyk7XG52YXIgaW5jbHVkZXMgPSByZXF1aXJlKCdsb2Rhc2gvaW5jbHVkZXMnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdsb2Rhc2gvYXNzaWduJyk7XG52YXIgcXMgPSByZXF1aXJlKCdxcycpO1xudmFyIG1lZGlhVHlwZSA9IHJlcXVpcmUoJ21lZGlhLXR5cGUnKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh4aHIpIHtcblxuICAvLyBUaHJvdyBhbiBlcnJvciB3aGVuIGEgVVJMIGlzIG5lZWRlZCwgYW5kIG5vbmUgaXMgc3VwcGxpZWQuXG4gIHZhciB1cmxFcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQSBcInVybFwiIHByb3BlcnR5IG9yIGZ1bmN0aW9uIG11c3QgYmUgc3BlY2lmaWVkJyk7XG4gIH07XG5cbiAgLy8gTWFwIGZyb20gQ1JVRCB0byBIVFRQIGZvciBvdXIgZGVmYXVsdCBgQmFja2JvbmUuc3luY2AgaW1wbGVtZW50YXRpb24uXG4gIHZhciBtZXRob2RNYXAgPSB7XG4gICAgICAnY3JlYXRlJzogJ1BPU1QnLFxuICAgICAgJ3VwZGF0ZSc6ICdQVVQnLFxuICAgICAgJ3BhdGNoJzogICdQQVRDSCcsXG4gICAgICAnZGVsZXRlJzogJ0RFTEVURScsXG4gICAgICAncmVhZCc6ICAgJ0dFVCdcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKG1ldGhvZCwgbW9kZWwsIG9wdGlvbnNJbnB1dCkge1xuICAgICAgLy9Db3B5IHRoZSBvcHRpb25zIG9iamVjdC4gSXQncyB1c2luZyBhc3NpZ24gaW5zdGVhZCBvZiBjbG9uZWRlZXAgYXMgYW4gb3B0aW1pemF0aW9uLlxuICAgICAgLy9UaGUgb25seSBvYmplY3Qgd2UgY291bGQgZXhwZWN0IGluIG9wdGlvbnMgaXMgaGVhZGVycywgd2hpY2ggaXMgc2FmZWx5IHRyYW5zZmVyZWQgYmVsb3cuXG4gICAgICB2YXIgb3B0aW9ucyA9IGFzc2lnbih7fSxvcHRpb25zSW5wdXQpO1xuICAgICAgdmFyIHR5cGUgPSBtZXRob2RNYXBbbWV0aG9kXTtcbiAgICAgIHZhciBoZWFkZXJzID0ge307XG5cbiAgICAgIC8vIERlZmF1bHQgb3B0aW9ucywgdW5sZXNzIHNwZWNpZmllZC5cbiAgICAgIGRlZmF1bHRzKG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSksIHtcbiAgICAgICAgICBlbXVsYXRlSFRUUDogZmFsc2UsXG4gICAgICAgICAgZW11bGF0ZUpTT046IGZhbHNlLFxuICAgICAgICAgIC8vIG92ZXJyaWRlYWJsZSBwcmltYXJpbHkgdG8gZW5hYmxlIHRlc3RpbmdcbiAgICAgICAgICB4aHJJbXBsZW1lbnRhdGlvbjogeGhyXG4gICAgICB9KTtcblxuICAgICAgLy8gRGVmYXVsdCByZXF1ZXN0IG9wdGlvbnMuXG4gICAgICB2YXIgcGFyYW1zID0ge3R5cGU6IHR5cGV9O1xuXG4gICAgICB2YXIgYWpheENvbmZpZyA9IHJlc3VsdChtb2RlbCwgJ2FqYXhDb25maWcnLCB7fSk7XG4gICAgICB2YXIga2V5O1xuICAgICAgLy8gQ29tYmluZSBnZW5lcmF0ZWQgaGVhZGVycyB3aXRoIHVzZXIncyBoZWFkZXJzLlxuICAgICAgaWYgKGFqYXhDb25maWcuaGVhZGVycykge1xuICAgICAgICAgIGZvciAoa2V5IGluIGFqYXhDb25maWcuaGVhZGVycykge1xuICAgICAgICAgICAgICBoZWFkZXJzW2tleS50b0xvd2VyQ2FzZSgpXSA9IGFqYXhDb25maWcuaGVhZGVyc1trZXldO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICBmb3IgKGtleSBpbiBvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgaGVhZGVyc1trZXkudG9Mb3dlckNhc2UoKV0gPSBvcHRpb25zLmhlYWRlcnNba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVsZXRlIG9wdGlvbnMuaGVhZGVycztcbiAgICAgIH1cbiAgICAgIC8vYWpheENvbmZpZyBoYXMgdG8gYmUgbWVyZ2VkIGludG8gcGFyYW1zIGJlZm9yZSBvdGhlciBvcHRpb25zIHRha2UgZWZmZWN0LCBzbyBpdCBpcyBpbiBmYWN0IGEgMmx2bCBkZWZhdWx0XG4gICAgICBhc3NpZ24ocGFyYW1zLCBhamF4Q29uZmlnKTtcbiAgICAgIHBhcmFtcy5oZWFkZXJzID0gaGVhZGVycztcblxuICAgICAgLy8gRW5zdXJlIHRoYXQgd2UgaGF2ZSBhIFVSTC5cbiAgICAgIGlmICghb3B0aW9ucy51cmwpIHtcbiAgICAgICAgICBvcHRpb25zLnVybCA9IHJlc3VsdChtb2RlbCwgJ3VybCcpIHx8IHVybEVycm9yKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IHdlIGhhdmUgdGhlIGFwcHJvcHJpYXRlIHJlcXVlc3QgZGF0YS5cbiAgICAgIGlmIChvcHRpb25zLmRhdGEgPT0gbnVsbCAmJiBtb2RlbCAmJiAobWV0aG9kID09PSAnY3JlYXRlJyB8fCBtZXRob2QgPT09ICd1cGRhdGUnIHx8IG1ldGhvZCA9PT0gJ3BhdGNoJykpIHtcbiAgICAgICAgICBwYXJhbXMuanNvbiA9IG9wdGlvbnMuYXR0cnMgfHwgbW9kZWwudG9KU09OKG9wdGlvbnMpO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBwYXNzZWQgYSBkYXRhIHBhcmFtLCB3ZSBhZGQgaXQgdG8gdGhlIFVSTCBvciBib2R5IGRlcGVuZGluZyBvbiByZXF1ZXN0IHR5cGVcbiAgICAgIGlmIChvcHRpb25zLmRhdGEgJiYgdHlwZSA9PT0gJ0dFVCcpIHtcbiAgICAgICAgICAvLyBtYWtlIHN1cmUgd2UndmUgZ290IGEgJz8nXG4gICAgICAgICAgb3B0aW9ucy51cmwgKz0gaW5jbHVkZXMob3B0aW9ucy51cmwsICc/JykgPyAnJicgOiAnPyc7XG4gICAgICAgICAgb3B0aW9ucy51cmwgKz0gcXMuc3RyaW5naWZ5KG9wdGlvbnMuZGF0YSk7XG4gICAgICAgICAgLy9kZWxldGUgYGRhdGFgIHNvIGB4aHJgIGRvZXNuJ3QgdXNlIGl0IGFzIGEgYm9keVxuICAgICAgICAgIGRlbGV0ZSBvcHRpb25zLmRhdGE7XG4gICAgICB9XG5cbiAgICAgIC8vIEZvciBvbGRlciBzZXJ2ZXJzLCBlbXVsYXRlIEpTT04gYnkgZW5jb2RpbmcgdGhlIHJlcXVlc3QgaW50byBhbiBIVE1MLWZvcm0uXG4gICAgICBpZiAob3B0aW9ucy5lbXVsYXRlSlNPTikge1xuICAgICAgICAgIHBhcmFtcy5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnO1xuICAgICAgICAgIHBhcmFtcy5ib2R5ID0gcGFyYW1zLmpzb24gPyB7bW9kZWw6IHBhcmFtcy5qc29ufSA6IHt9O1xuICAgICAgICAgIGRlbGV0ZSBwYXJhbXMuanNvbjtcbiAgICAgIH1cblxuICAgICAgLy8gRm9yIG9sZGVyIHNlcnZlcnMsIGVtdWxhdGUgSFRUUCBieSBtaW1pY2tpbmcgdGhlIEhUVFAgbWV0aG9kIHdpdGggYF9tZXRob2RgXG4gICAgICAvLyBBbmQgYW4gYFgtSFRUUC1NZXRob2QtT3ZlcnJpZGVgIGhlYWRlci5cbiAgICAgIGlmIChvcHRpb25zLmVtdWxhdGVIVFRQICYmICh0eXBlID09PSAnUFVUJyB8fCB0eXBlID09PSAnREVMRVRFJyB8fCB0eXBlID09PSAnUEFUQ0gnKSkge1xuICAgICAgICAgIHBhcmFtcy50eXBlID0gJ1BPU1QnO1xuICAgICAgICAgIGlmIChvcHRpb25zLmVtdWxhdGVKU09OKSBwYXJhbXMuYm9keS5fbWV0aG9kID0gdHlwZTtcbiAgICAgICAgICBwYXJhbXMuaGVhZGVyc1sneC1odHRwLW1ldGhvZC1vdmVycmlkZSddID0gdHlwZTtcbiAgICAgIH1cblxuICAgICAgLy8gV2hlbiBlbXVsYXRpbmcgSlNPTiwgd2UgdHVybiB0aGUgYm9keSBpbnRvIGEgcXVlcnlzdHJpbmcuXG4gICAgICAvLyBXZSBkbyB0aGlzIGxhdGVyIHRvIGxldCB0aGUgZW11bGF0ZUhUVFAgcnVuIGl0cyBjb3Vyc2UuXG4gICAgICBpZiAob3B0aW9ucy5lbXVsYXRlSlNPTikge1xuICAgICAgICAgIHBhcmFtcy5ib2R5ID0gcXMuc3RyaW5naWZ5KHBhcmFtcy5ib2R5KTtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IHJhdyBYTUxIdHRwUmVxdWVzdCBvcHRpb25zLlxuICAgICAgaWYgKGFqYXhDb25maWcueGhyRmllbGRzKSB7XG4gICAgICAgICAgdmFyIGJlZm9yZVNlbmQgPSBhamF4Q29uZmlnLmJlZm9yZVNlbmQ7XG4gICAgICAgICAgcGFyYW1zLmJlZm9yZVNlbmQgPSBmdW5jdGlvbiAocmVxKSB7XG4gICAgICAgICAgICAgIGFzc2lnbihyZXEsIGFqYXhDb25maWcueGhyRmllbGRzKTtcbiAgICAgICAgICAgICAgaWYgKGJlZm9yZVNlbmQpIHJldHVybiBiZWZvcmVTZW5kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBwYXJhbXMueGhyRmllbGRzID0gYWpheENvbmZpZy54aHJGaWVsZHM7XG4gICAgICB9XG5cbiAgICAgIC8vIFR1cm4gYSBqUXVlcnkuYWpheCBmb3JtYXR0ZWQgcmVxdWVzdCBpbnRvIHhociBjb21wYXRpYmxlXG4gICAgICBwYXJhbXMubWV0aG9kID0gcGFyYW1zLnR5cGU7XG5cbiAgICAgIHZhciBhamF4U2V0dGluZ3MgPSBhc3NpZ24ocGFyYW1zLCBvcHRpb25zKTtcblxuICAgICAgLy8gTWFrZSB0aGUgcmVxdWVzdC4gVGhlIGNhbGxiYWNrIGV4ZWN1dGVzIGZ1bmN0aW9ucyB0aGF0IGFyZSBjb21wYXRpYmxlXG4gICAgICAvLyBXaXRoIGpRdWVyeS5hamF4J3Mgc3ludGF4LlxuICAgICAgdmFyIHJlcXVlc3QgPSBvcHRpb25zLnhockltcGxlbWVudGF0aW9uKGFqYXhTZXR0aW5ncywgZnVuY3Rpb24gKGVyciwgcmVzcCwgYm9keSkge1xuICAgICAgICAgIGlmIChlcnIgfHwgcmVzcC5zdGF0dXNDb2RlID49IDQwMCkge1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gSlNPTi5wYXJzZShib2R5KTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSl7fVxuICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSAoZXJyPyBlcnIubWVzc2FnZSA6IChib2R5IHx8IFwiSFRUUFwiK3Jlc3Auc3RhdHVzQ29kZSkpO1xuICAgICAgICAgICAgICAgICAgb3B0aW9ucy5lcnJvcihyZXNwLCAnZXJyb3InLCBtZXNzYWdlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFBhcnNlIGJvZHkgYXMgSlNPTlxuICAgICAgICAgICAgICB2YXIgYWNjZXB0ID0gbWVkaWFUeXBlLmZyb21TdHJpbmcocGFyYW1zLmhlYWRlcnMuYWNjZXB0KTtcbiAgICAgICAgICAgICAgdmFyIHBhcnNlSnNvbiA9IGFjY2VwdC5pc1ZhbGlkKCkgJiYgYWNjZXB0LnR5cGUgPT09ICdhcHBsaWNhdGlvbicgJiYgKGFjY2VwdC5zdWJ0eXBlID09PSAnanNvbicgfHwgYWNjZXB0LnN1ZmZpeCA9PT0gJ2pzb24nKTtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyAmJiBib2R5ICE9PSAnJyAmJiAoIXBhcmFtcy5oZWFkZXJzLmFjY2VwdCB8fCBwYXJzZUpzb24pKSB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSBKU09OLnBhcnNlKGJvZHkpO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZXJyb3IpIG9wdGlvbnMuZXJyb3IocmVzcCwgJ2Vycm9yJywgZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFsd2F5cykgb3B0aW9ucy5hbHdheXMoZXJyLCByZXNwLCBib2R5KTtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3VjY2Vzcykgb3B0aW9ucy5zdWNjZXNzKGJvZHksICdzdWNjZXNzJywgcmVzcCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRpb25zLmFsd2F5cykgb3B0aW9ucy5hbHdheXMoZXJyLCByZXNwLCBib2R5KTtcbiAgICAgIH0pO1xuICAgICAgaWYgKG1vZGVsKSBtb2RlbC50cmlnZ2VyKCdyZXF1ZXN0JywgbW9kZWwsIHJlcXVlc3QsIG9wdGlvbnNJbnB1dCwgYWpheFNldHRpbmdzKTtcbiAgICAgIHJlcXVlc3QuYWpheFNldHRpbmdzID0gYWpheFNldHRpbmdzO1xuICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gIH07XG59O1xuIiwiLyokQU1QRVJTQU5EX1ZFUlNJT04qL1xuZnVuY3Rpb24gVmlld1N3aXRjaGVyKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zIHx8IChvcHRpb25zID0ge30pO1xuICAgIHRoaXMuZWwgPSBvcHRpb25zLmVsO1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgICBoaWRlOiBudWxsLFxuICAgICAgICBzaG93OiBudWxsLFxuICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgcHJlcGVuZDogZmFsc2UsXG4gICAgICAgIHdhaXRGb3JSZW1vdmU6IGZhbHNlLFxuICAgICAgICBhdXRvUmVuZGVyOiB0cnVlXG4gICAgfTtcbiAgICBmb3IgKHZhciBpdGVtIGluIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmhhc093blByb3BlcnR5KGl0ZW0pKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ1tpdGVtXSA9IG9wdGlvbnNbaXRlbV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdGhpcy5fc2V0Q3VycmVudChvcHRpb25zLnZpZXcpO1xuICAgIGlmICh0aGlzLmNvbmZpZy5hdXRvUmVuZGVyKSB0aGlzLnJlbmRlcigpO1xufVxuXG5WaWV3U3dpdGNoZXIucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBwcmV2ID0gdGhpcy5wcmV2aW91cyA9IHRoaXMuY3VycmVudDtcblxuICAgIGlmIChwcmV2ID09PSB2aWV3KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcud2FpdEZvclJlbW92ZSkge1xuICAgICAgICB0aGlzLm5leHQgPSB2aWV3O1xuICAgICAgICB0aGlzLl9oaWRlKHByZXYsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLm5leHQgPT09IHZpZXcpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgc2VsZi5uZXh0O1xuICAgICAgICAgICAgICAgIHNlbGYuX3Nob3codmlldyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2hpZGUocHJldik7XG4gICAgICAgIHRoaXMuX3Nob3codmlldyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuVmlld1N3aXRjaGVyLnByb3RvdHlwZS5fc2V0Q3VycmVudCA9IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgdGhpcy5jdXJyZW50ID0gdmlldztcbiAgICBpZiAodmlldykgdGhpcy5fcmVnaXN0ZXJSZW1vdmVMaXN0ZW5lcih2aWV3KTtcbiAgICB2YXIgZW1wdHlDYiA9IHRoaXMuY29uZmlnLmVtcHR5O1xuICAgIGlmIChlbXB0eUNiICYmICF0aGlzLmN1cnJlbnQpIHtcbiAgICAgICAgZW1wdHlDYigpO1xuICAgIH1cbiAgICByZXR1cm4gdmlldztcbn07XG5cblZpZXdTd2l0Y2hlci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB0aGlzLl9oaWRlKHRoaXMuY3VycmVudCwgY2IpO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLy8gSWYgdGhlIHZpZXcgc3dpdGNoZXIgaXRzZWxmIGlzIHJlbW92ZWQsIHJlbW92ZSBpdHMgY2hpbGQgdG8gYXZvaWQgbWVtb3J5IGxlYWtzXG5WaWV3U3dpdGNoZXIucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50KSB0aGlzLmN1cnJlbnQucmVtb3ZlKCk7XG4gICAgaWYgKHRoaXMucHJldmlvdXMpIHRoaXMucHJldmlvdXMucmVtb3ZlKCk7XG4gICAgaWYgKHRoaXMuZWwgJiYgdGhpcy5lbC5wYXJlbnROb2RlKSB0aGlzLmVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5lbCk7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5WaWV3U3dpdGNoZXIucHJvdG90eXBlLl9zaG93ID0gZnVuY3Rpb24gKHZpZXcpIHtcbiAgICB2YXIgY3VzdG9tU2hvdyA9IHRoaXMuY29uZmlnLnNob3c7XG4gICAgdGhpcy5fc2V0Q3VycmVudCh2aWV3KTtcbiAgICB0aGlzLl9yZW5kZXIodmlldyk7XG4gICAgaWYgKGN1c3RvbVNob3cpIGN1c3RvbVNob3codmlldyk7XG59O1xuXG5WaWV3U3dpdGNoZXIucHJvdG90eXBlLl9yZWdpc3RlclJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKHZpZXcpIHtcbiAgICBpZiAodmlldyAmJiB2aWV3Lm9uY2UpIHZpZXcub25jZSgncmVtb3ZlJywgdGhpcy5fb25WaWV3UmVtb3ZlLCB0aGlzKTtcbn07XG5cblZpZXdTd2l0Y2hlci5wcm90b3R5cGUuX29uVmlld1JlbW92ZSA9IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgdmFyIGVtcHR5Q2IgPSB0aGlzLmNvbmZpZy5lbXB0eTtcbiAgICBpZiAodGhpcy5jdXJyZW50ID09PSB2aWV3KSB7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICAgIGlmIChlbXB0eUNiICYmICF0aGlzLmN1cnJlbnQpIHtcbiAgICAgICAgZW1wdHlDYigpO1xuICAgIH1cbn07XG5cblZpZXdTd2l0Y2hlci5wcm90b3R5cGUuX3JlbmRlciA9IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgaWYgKCF0aGlzLmVsKSByZXR1cm47XG4gICAgaWYgKCF2aWV3LnJlbmRlcmVkKSB2aWV3LnJlbmRlcih7Y29udGFpbmVyRWw6IHRoaXMuZWx9KTtcbiAgICBpZiAoIXZpZXcuaW5zZXJ0U2VsZikge1xuICAgICAgICBpZiAodGhpcy5jb25maWcucHJlcGVuZCkge1xuICAgICAgICAgICAgdGhpcy5lbC5pbnNlcnRCZWZvcmUodmlldy5lbCwgdGhpcy5lbC5maXJzdENoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZWwuYXBwZW5kQ2hpbGQodmlldy5lbCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5WaWV3U3dpdGNoZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50ICYmICF0aGlzLl9yZW5kZXJlZCkge1xuICAgICAgICB0aGlzLl9yZW5kZXIodGhpcy5jdXJyZW50KTtcbiAgICB9XG4gICAgLy9zZXQgcmVuZGVyZWQsIGVsIGV4aXN0cyBldmVuIGlmIGEgY3VycmVudCB2aWV3IHdhcyBub3QgaW5zZXJ0ZWQvYXBwZW5kZWRcbiAgICB0aGlzLl9yZW5kZXJlZCA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5WaWV3U3dpdGNoZXIucHJvdG90eXBlLl9oaWRlID0gZnVuY3Rpb24gKHZpZXcsIGNiKSB7XG4gICAgdmFyIGN1c3RvbUhpZGUgPSB0aGlzLmNvbmZpZy5oaWRlO1xuICAgIGlmICghdmlldykgcmV0dXJuIGNiICYmIGNiKCk7XG4gICAgaWYgKGN1c3RvbUhpZGUpIHtcbiAgICAgICAgaWYgKGN1c3RvbUhpZGUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBjdXN0b21IaWRlKHZpZXcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2aWV3LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChjYikgY2IoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3VzdG9tSGlkZSh2aWV3KTtcbiAgICAgICAgICAgIHZpZXcucmVtb3ZlKCk7XG4gICAgICAgICAgICBpZiAoY2IpIGNiKCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB2aWV3LnJlbW92ZSgpO1xuICAgICAgICBpZiAoY2IpIGNiKCk7XG4gICAgfVxufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IFZpZXdTd2l0Y2hlcjtcbiIsIi8qJEFNUEVSU0FORF9WRVJTSU9OKi9cbnZhciBTdGF0ZSA9IHJlcXVpcmUoJ2FtcGVyc2FuZC1zdGF0ZScpO1xudmFyIENvbGxlY3Rpb25WaWV3ID0gcmVxdWlyZSgnYW1wZXJzYW5kLWNvbGxlY3Rpb24tdmlldycpO1xudmFyIGRvbWlmeSA9IHJlcXVpcmUoJ2RvbWlmeScpO1xudmFyIHVuaXF1ZUlkID0gcmVxdWlyZShcImxvZGFzaC91bmlxdWVJZFwiKTtcbnZhciBwaWNrID0gcmVxdWlyZShcImxvZGFzaC9waWNrXCIpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCJsb2Rhc2gvYXNzaWduXCIpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKFwibG9kYXNoL2ZvckVhY2hcIik7XG52YXIgcmVzdWx0ID0gcmVxdWlyZShcImxvZGFzaC9yZXN1bHRcIik7XG52YXIgbGFzdCA9IHJlcXVpcmUoXCJsb2Rhc2gvbGFzdFwiKTtcbnZhciBpc1N0cmluZyA9IHJlcXVpcmUoXCJsb2Rhc2gvaXNTdHJpbmdcIik7XG52YXIgYmluZCA9IHJlcXVpcmUoXCJsb2Rhc2gvYmluZFwiKTtcbnZhciBmbGF0dGVuID0gcmVxdWlyZShcImxvZGFzaC9mbGF0dGVuXCIpO1xudmFyIGludm9rZU1hcCA9IHJlcXVpcmUoXCJsb2Rhc2gvaW52b2tlTWFwXCIpO1xudmFyIGV2ZW50cyA9IHJlcXVpcmUoJ2V2ZW50cy1taXhpbicpO1xudmFyIG1hdGNoZXMgPSByZXF1aXJlKCdtYXRjaGVzLXNlbGVjdG9yJyk7XG52YXIgYmluZGluZ3MgPSByZXF1aXJlKCdhbXBlcnNhbmQtZG9tLWJpbmRpbmdzJyk7XG52YXIgZ2V0UGF0aCA9IHJlcXVpcmUoJ2xvZGFzaC9nZXQnKTtcblxuZnVuY3Rpb24gVmlldyhhdHRycykge1xuICAgIHRoaXMuY2lkID0gdW5pcXVlSWQoJ3ZpZXcnKTtcbiAgICBhdHRycyB8fCAoYXR0cnMgPSB7fSk7XG4gICAgdmFyIHBhcmVudCA9IGF0dHJzLnBhcmVudDtcbiAgICBkZWxldGUgYXR0cnMucGFyZW50O1xuICAgIEJhc2VTdGF0ZS5jYWxsKHRoaXMsIGF0dHJzLCB7aW5pdDogZmFsc2UsIHBhcmVudDogcGFyZW50fSk7XG4gICAgdGhpcy5vbignY2hhbmdlOmVsJywgdGhpcy5faGFuZGxlRWxlbWVudENoYW5nZSwgdGhpcyk7XG4gICAgdGhpcy5fdXBzZXJ0QmluZGluZ3MoKTtcbiAgICB0aGlzLnRlbXBsYXRlID0gYXR0cnMudGVtcGxhdGUgfHwgdGhpcy50ZW1wbGF0ZTtcbiAgICB0aGlzLl9jYWNoZS5yZW5kZXJlZCA9IGZhbHNlOyAvLyBwcmVwIGByZW5kZXJlZGAgZGVyaXZlZCBjYWNoZSBpbW1lZGlhdGVseVxuICAgIHRoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh0aGlzLmF1dG9SZW5kZXIgJiYgdGhpcy50ZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cbn1cblxudmFyIEJhc2VTdGF0ZSA9IFN0YXRlLmV4dGVuZCh7XG4gICAgZGF0YVR5cGVzOiB7XG4gICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ZhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbDogbmV3VmFsLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBuZXdWYWwgaW5zdGFuY2VvZiBFbGVtZW50ID8gJ2VsZW1lbnQnIDogdHlwZW9mIG5ld1ZhbFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGFyZTogZnVuY3Rpb24gKGVsMSwgZWwyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsMSA9PT0gZWwyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb2xsZWN0aW9uOiB7XG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdWYWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB2YWw6IG5ld1ZhbCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogbmV3VmFsICYmIG5ld1ZhbC5pc0NvbGxlY3Rpb24gPyAnY29sbGVjdGlvbicgOiB0eXBlb2YgbmV3VmFsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wYXJlOiBmdW5jdGlvbiAoY3VycmVudFZhbCwgbmV3VmFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRWYWwgPT09IG5ld1ZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgbW9kZWw6ICdzdGF0ZScsXG4gICAgICAgIGVsOiAnZWxlbWVudCcsXG4gICAgICAgIGNvbGxlY3Rpb246ICdjb2xsZWN0aW9uJyxcbiAgICB9LFxuICAgIHNlc3Npb246IHtcbiAgICAgICAgX3JlbmRlcmVkOiBbJ2Jvb2xlYW4nLCB0cnVlLCBmYWxzZV1cbiAgICB9LFxuICAgIGRlcml2ZWQ6IHtcbiAgICAgICAgaGFzRGF0YToge1xuICAgICAgICAgICAgZGVwczogWydtb2RlbCddLFxuICAgICAgICAgICAgZm46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISF0aGlzLm1vZGVsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZW5kZXJlZDoge1xuICAgICAgICAgICAgZGVwczogWydfcmVuZGVyZWQnXSxcbiAgICAgICAgICAgIGZuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmVuZGVyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdyZW5kZXInLCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcigncmVtb3ZlJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cblZpZXcucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlU3RhdGUucHJvdG90eXBlKTtcblxudmFyIHF1ZXJ5Tm9FbE1zZyA9ICdRdWVyeSBjYW5ub3QgYmUgcGVyZm9ybWVkIGFzIHRoaXMuZWwgaXMgbm90IGRlZmluZWQuIEVuc3VyZSB0aGF0IHRoZSB2aWV3IGhhcyBiZWVuIHJlbmRlcmVkLic7XG5cbi8vIFNldCB1cCBhbGwgaW5oZXJpdGFibGUgcHJvcGVydGllcyBhbmQgbWV0aG9kcy5cbmFzc2lnbihWaWV3LnByb3RvdHlwZSwge1xuICAgIC8vICMjIHF1ZXJ5XG4gICAgLy8gR2V0IGFuIHNpbmdsZSBlbGVtZW50IGJhc2VkIG9uIENTUyBzZWxlY3RvciBzY29wZWQgdG8gdGhpcy5lbFxuICAgIC8vIGlmIHlvdSBwYXNzIGFuIGVtcHR5IHN0cmluZyBpdCByZXR1cm4gYHRoaXMuZWxgLlxuICAgIC8vIElmIHlvdSBwYXNzIGFuIGVsZW1lbnQgd2UganVzdCByZXR1cm4gaXQgYmFjay5cbiAgICAvLyBUaGlzIGxldHMgdXMgdXNlIGBnZXRgIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB1c2Vyc1xuICAgIC8vIGNhbiBwYXNzIGEgc2VsZWN0b3Igb3IgYW4gYWxyZWFkeSBzZWxlY3RlZCBlbGVtZW50LlxuICAgIHF1ZXJ5OiBmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocXVlcnlOb0VsTXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNlbGVjdG9yKSByZXR1cm4gdGhpcy5lbDtcbiAgICAgICAgaWYgKHR5cGVvZiBzZWxlY3RvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmIChtYXRjaGVzKHRoaXMuZWwsIHNlbGVjdG9yKSkgcmV0dXJuIHRoaXMuZWw7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKSB8fCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yO1xuICAgIH0sXG5cbiAgICAvLyAjIyBxdWVyeUFsbFxuICAgIC8vIFJldHVybnMgYW4gYXJyYXkgb2YgZWxlbWVudHMgYmFzZWQgb24gQ1NTIHNlbGVjdG9yIHNjb3BlZCB0byB0aGlzLmVsXG4gICAgLy8gaWYgeW91IHBhc3MgYW4gZW1wdHkgc3RyaW5nIGl0IHJldHVybiBgdGhpcy5lbGAuIEFsc28gaW5jbHVkZXMgcm9vdFxuICAgIC8vIGVsZW1lbnQuXG4gICAgcXVlcnlBbGw6IGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgICAgICBpZiAoIXRoaXMuZWwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihxdWVyeU5vRWxNc2cpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2VsZWN0b3IpIHJldHVybiBbdGhpcy5lbF07XG4gICAgICAgIHZhciByZXMgPSBbXTtcbiAgICAgICAgaWYgKG1hdGNoZXModGhpcy5lbCwgc2VsZWN0b3IpKSByZXMucHVzaCh0aGlzLmVsKTtcbiAgICAgICAgcmV0dXJuIHJlcy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5lbC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkpO1xuICAgIH0sXG5cbiAgICAvLyAjIyBxdWVyeUJ5SG9va1xuICAgIC8vIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgZmV0Y2hpbmcgZWxlbWVudCBieSBpdCdzIGBkYXRhLWhvb2tgIGF0dHJpYnV0ZS5cbiAgICAvLyBBbHNvIHRyaWVzIHRvIG1hdGNoIGFnYWluc3Qgcm9vdCBlbGVtZW50LlxuICAgIC8vIEFsc28gc3VwcG9ydHMgbWF0Y2hpbmcgJ29uZScgb2Ygc2V2ZXJhbCBzcGFjZSBzZXBhcmF0ZWQgaG9va3MuXG4gICAgcXVlcnlCeUhvb2s6IGZ1bmN0aW9uIChob29rKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5KCdbZGF0YS1ob29rfj1cIicgKyBob29rICsgJ1wiXScpO1xuICAgIH0sXG5cbiAgICAvLyAjIyBxdWVyeUFsbEJ5SG9va1xuICAgIC8vIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgZmV0Y2hpbmcgYWxsIGVsZW1lbnRzIGJ5IHRoZWlyJ3MgYGRhdGEtaG9va2AgYXR0cmlidXRlLlxuICAgIHF1ZXJ5QWxsQnlIb29rOiBmdW5jdGlvbiAoaG9vaykge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVyeUFsbCgnW2RhdGEtaG9va349XCInICsgaG9vayArICdcIl0nKTtcbiAgICB9LFxuXG4gICAgLy8gSW5pdGlhbGl6ZSBpcyBhbiBlbXB0eSBmdW5jdGlvbiBieSBkZWZhdWx0LiBPdmVycmlkZSBpdCB3aXRoIHlvdXIgb3duXG4gICAgLy8gaW5pdGlhbGl6YXRpb24gbG9naWMuXG4gICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKCkge30sXG5cbiAgICAvLyAqKnJlbmRlcioqIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIHRoYXQgeW91ciB2aWV3IGNhbiBvdmVycmlkZS4gSXRzIGpvYiBpc1xuICAgIC8vIHRvIHBvcHVsYXRlIGl0cyBlbGVtZW50IChgdGhpcy5lbGApLCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBIVE1MLlxuICAgIF9yZW5kZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fdXBzZXJ0QmluZGluZ3MoKTtcbiAgICAgICAgdGhpcy5yZW5kZXJXaXRoVGVtcGxhdGUodGhpcyk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8vIFJlbW92ZXMgdGhpcyB2aWV3IGJ5IHRha2luZyB0aGUgZWxlbWVudCBvdXQgb2YgdGhlIERPTSwgYW5kIHJlbW92aW5nIGFueVxuICAgIC8vIGFwcGxpY2FibGUgZXZlbnRzIGxpc3RlbmVycy5cbiAgICBfcmVtb3ZlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmVsICYmIHRoaXMuZWwucGFyZW50Tm9kZSkgdGhpcy5lbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWwpO1xuICAgICAgICB0aGlzLl9yZW5kZXJlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9kb3duc2VydEJpbmRpbmdzKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyBDaGFuZ2UgdGhlIHZpZXcncyBlbGVtZW50IChgdGhpcy5lbGAgcHJvcGVydHkpLCBpbmNsdWRpbmcgZXZlbnRcbiAgICAvLyByZS1kZWxlZ2F0aW9uLlxuICAgIF9oYW5kbGVFbGVtZW50Q2hhbmdlOiBmdW5jdGlvbiAoZWxlbWVudCwgZGVsZWdhdGUpIHtcbiAgICAgICAgaWYgKHRoaXMuZXZlbnRNYW5hZ2VyKSB0aGlzLmV2ZW50TWFuYWdlci51bmJpbmQoKTtcbiAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIgPSBldmVudHModGhpcy5lbCwgdGhpcyk7XG4gICAgICAgIHRoaXMuZGVsZWdhdGVFdmVudHMoKTtcbiAgICAgICAgdGhpcy5fYXBwbHlCaW5kaW5nc0ZvcktleSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLy8gU2V0IGNhbGxiYWNrcywgd2hlcmUgYHRoaXMuZXZlbnRzYCBpcyBhIGhhc2ggb2ZcbiAgICAvL1xuICAgIC8vICp7XCJldmVudCBzZWxlY3RvclwiOiBcImNhbGxiYWNrXCJ9KlxuICAgIC8vXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICAnbW91c2Vkb3duIC50aXRsZSc6ICAnZWRpdCcsXG4gICAgLy8gICAgICAgJ2NsaWNrIC5idXR0b24nOiAgICAgJ3NhdmUnLFxuICAgIC8vICAgICAgICdjbGljayAub3Blbic6ICAgICAgIGZ1bmN0aW9uIChlKSB7IC4uLiB9XG4gICAgLy8gICAgIH1cbiAgICAvL1xuICAgIC8vIHBhaXJzLiBDYWxsYmFja3Mgd2lsbCBiZSBib3VuZCB0byB0aGUgdmlldywgd2l0aCBgdGhpc2Agc2V0IHByb3Blcmx5LlxuICAgIC8vIFVzZXMgZXZlbnQgZGVsZWdhdGlvbiBmb3IgZWZmaWNpZW5jeS5cbiAgICAvLyBPbWl0dGluZyB0aGUgc2VsZWN0b3IgYmluZHMgdGhlIGV2ZW50IHRvIGB0aGlzLmVsYC5cbiAgICAvLyBUaGlzIG9ubHkgd29ya3MgZm9yIGRlbGVnYXRlLWFibGUgZXZlbnRzOiBub3QgYGZvY3VzYCwgYGJsdXJgLCBhbmRcbiAgICAvLyBub3QgYGNoYW5nZWAsIGBzdWJtaXRgLCBhbmQgYHJlc2V0YCBpbiBJbnRlcm5ldCBFeHBsb3Jlci5cbiAgICBkZWxlZ2F0ZUV2ZW50czogZnVuY3Rpb24gKGV2ZW50cykge1xuICAgICAgICBpZiAoIShldmVudHMgfHwgKGV2ZW50cyA9IHJlc3VsdCh0aGlzLCAnZXZlbnRzJykpKSkgcmV0dXJuIHRoaXM7XG4gICAgICAgIHRoaXMudW5kZWxlZ2F0ZUV2ZW50cygpO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gZXZlbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50TWFuYWdlci5iaW5kKGtleSwgZXZlbnRzW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyBDbGVhcnMgYWxsIGNhbGxiYWNrcyBwcmV2aW91c2x5IGJvdW5kIHRvIHRoZSB2aWV3IHdpdGggYGRlbGVnYXRlRXZlbnRzYC5cbiAgICAvLyBZb3UgdXN1YWxseSBkb24ndCBuZWVkIHRvIHVzZSB0aGlzLCBidXQgbWF5IHdpc2ggdG8gaWYgeW91IGhhdmUgbXVsdGlwbGVcbiAgICAvLyBCYWNrYm9uZSB2aWV3cyBhdHRhY2hlZCB0byB0aGUgc2FtZSBET00gZWxlbWVudC5cbiAgICB1bmRlbGVnYXRlRXZlbnRzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLnVuYmluZCgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLy8gIyMgcmVnaXN0ZXJTdWJ2aWV3XG4gICAgLy8gUGFzcyBpdCBhIHZpZXcuIFRoaXMgY2FuIGJlIGFueXRoaW5nIHdpdGggYSBgcmVtb3ZlYCBtZXRob2RcbiAgICByZWdpc3RlclN1YnZpZXc6IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgICAgIC8vIFN0b3JhZ2UgZm9yIG91ciBzdWJ2aWV3cy5cbiAgICAgICAgdGhpcy5fc3Vidmlld3MgPSB0aGlzLl9zdWJ2aWV3cyB8fCBbXTtcbiAgICAgICAgdGhpcy5fc3Vidmlld3MucHVzaCh2aWV3KTtcbiAgICAgICAgLy8gc2V0IHRoZSBwYXJlbnQgcmVmZXJlbmNlIGlmIGl0IGhhcyBub3QgYmVlbiBzZXRcbiAgICAgICAgaWYgKCF2aWV3LnBhcmVudCkgdmlldy5wYXJlbnQgPSB0aGlzO1xuICAgICAgICByZXR1cm4gdmlldztcbiAgICB9LFxuXG4gICAgLy8gIyMgcmVuZGVyU3Vidmlld1xuICAgIC8vIFBhc3MgaXQgYSB2aWV3IGluc3RhbmNlIGFuZCBhIGNvbnRhaW5lciBlbGVtZW50XG4gICAgLy8gdG8gcmVuZGVyIGl0IGluLiBJdCdzIGByZW1vdmVgIG1ldGhvZCB3aWxsIGJlIGNhbGxlZFxuICAgIC8vIHdoZW4gdGhlIHBhcmVudCB2aWV3IGlzIGRlc3Ryb3llZC5cbiAgICByZW5kZXJTdWJ2aWV3OiBmdW5jdGlvbiAodmlldywgY29udGFpbmVyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29udGFpbmVyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29udGFpbmVyID0gdGhpcy5xdWVyeShjb250YWluZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29udGFpbmVyKSBjb250YWluZXIgPSB0aGlzLmVsO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyU3Vidmlldyh2aWV3KTtcbiAgICAgICAgdmlldy5yZW5kZXIoKTtcbiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHZpZXcuZWwpO1xuICAgICAgICByZXR1cm4gdmlldztcbiAgICB9LFxuXG4gICAgX2FwcGx5QmluZGluZ3NGb3JLZXk6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIGlmICghdGhpcy5lbCkgcmV0dXJuO1xuICAgICAgICB2YXIgZm5zID0gdGhpcy5fcGFyc2VkQmluZGluZ3MuZ2V0R3JvdXBlZChuYW1lKTtcbiAgICAgICAgdmFyIGl0ZW07XG4gICAgICAgIGZvciAoaXRlbSBpbiBmbnMpIHtcbiAgICAgICAgICAgIGZuc1tpdGVtXS5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKHRoaXMuZWwsIGdldFBhdGgodGhpcywgaXRlbSksIGxhc3QoaXRlbS5zcGxpdCgnLicpKSk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdGlhbGl6ZUJpbmRpbmdzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5iaW5kaW5ncykgcmV0dXJuO1xuICAgICAgICB0aGlzLm9uKCdhbGwnLCBmdW5jdGlvbiAoZXZlbnROYW1lKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnROYW1lLnNsaWNlKDAsIDcpID09PSAnY2hhbmdlOicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBseUJpbmRpbmdzRm9yS2V5KGV2ZW50TmFtZS5zcGxpdCgnOicpWzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfSxcblxuICAgIC8vICMjIF9pbml0aWFsaXplU3Vidmlld3NcbiAgICAvLyB0aGlzIGlzIGNhbGxlZCBhdCBzZXR1cCBhbmQgZ3JhYnMgZGVjbGFyZWQgc3Vidmlld3NcbiAgICBfaW5pdGlhbGl6ZVN1YnZpZXdzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5zdWJ2aWV3cykgcmV0dXJuO1xuICAgICAgICBmb3IgKHZhciBpdGVtIGluIHRoaXMuc3Vidmlld3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcnNlU3Vidmlldyh0aGlzLnN1YnZpZXdzW2l0ZW1dLCBpdGVtKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyAjIyBfcGFyc2VTdWJ2aWV3XG4gICAgLy8gaGVscGVyIGZvciBwYXJzaW5nIG91dCB0aGUgc3VidmlldyBkZWNsYXJhdGlvbiBhbmQgcmVnaXN0ZXJpbmdcbiAgICAvLyB0aGUgYHdhaXRGb3JgIGlmIG5lZWQgYmUuXG4gICAgX3BhcnNlU3VidmlldzogZnVuY3Rpb24gKHN1YnZpZXcsIG5hbWUpIHtcbiAgICAgICAgLy9iYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zLCB3aGVuIGBjb250YWluZXJgIHdhcyBhIHZhbGlkIHByb3BlcnR5ICgjMTE0KVxuICAgICAgICBpZiAoc3Vidmlldy5jb250YWluZXIpIHtcbiAgICAgICAgICAgIHN1YnZpZXcuc2VsZWN0b3IgPSBzdWJ2aWV3LmNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb3B0cyA9IHRoaXMuX3BhcnNlU3Vidmlld09wdHMoc3Vidmlldyk7XG5cbiAgICAgICAgZnVuY3Rpb24gYWN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGVsLCBzdWJ2aWV3O1xuICAgICAgICAgICAgLy8gaWYgbm90IHJlbmRlcmVkIG9yIHdlIGNhbid0IGZpbmQgb3VyIGVsZW1lbnQsIHN0b3AgaGVyZS5cbiAgICAgICAgICAgIGlmICghdGhpcy5lbCB8fCAhKGVsID0gdGhpcy5xdWVyeShvcHRzLnNlbGVjdG9yKSkpIHJldHVybjtcbiAgICAgICAgICAgIGlmICghb3B0cy53YWl0Rm9yIHx8IGdldFBhdGgodGhpcywgb3B0cy53YWl0Rm9yKSkge1xuICAgICAgICAgICAgICAgIHN1YnZpZXcgPSB0aGlzW25hbWVdID0gb3B0cy5wcmVwYXJlVmlldy5jYWxsKHRoaXMsIGVsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXN1YnZpZXcuZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJTdWJ2aWV3KHN1YnZpZXcsIGVsKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdWJ2aWV3LnJlbmRlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyU3VidmlldyhzdWJ2aWV3KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoJ2NoYW5nZScsIGFjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2UgbGlzdGVuIGZvciBtYWluIGBjaGFuZ2VgIGl0ZW1zXG4gICAgICAgIHRoaXMub24oJ2NoYW5nZScsIGFjdGlvbiwgdGhpcyk7XG4gICAgfSxcblxuICAgIC8vIFBhcnNlcyB0aGUgZGVjbGFyYXRpdmUgc3VidmlldyBkZWZpbml0aW9uLlxuICAgIC8vIFlvdSBtYXkgb3ZlcmxvYWQgdGhpcyBtZXRob2QgdG8gY3JlYXRlIHlvdXIgb3duIGRlY2xhcmF0aXZlIHN1YnZpZXcgc3R5bGUuXG4gICAgLy8gWW91IG11c3QgcmV0dXJuIGFuIG9iamVjdCB3aXRoIG1lbWJlcnMgJ3NlbGVjdG9yJywgJ3dhaXRGb3InIGFuZCAncHJlcGFyZVZpZXcnLlxuICAgIC8vIHdhaXRGb3IgaXMgdHJpZ2dlZCBvbiB0aGUgdmlldyAnY2hhbmdlJyBldmVudCBhbmQgc28gb25lIHdheSB0byBleHRlbmQgdGhlIGRlZmVycmVkIHZpZXdcbiAgICAvLyBjb25zdHJ1Y3Rpb24gaXMgdG8gYWRkIGFuIGFkZGl0aW9uYWwgcHJvcGVydHkgKHByb3BzKSB0byB0aGUgdmlldy4gVGhlbiBzZXR0aW5nIHRoaXMgcHJvcGVydHlcbiAgICAvLyB3aWxsIHNhdGlzZnkgdGhlIHdhaXRGb3IgY29uZGl0aW9uLiBZb3UgY2FuIHRoZW4gZXh0ZW5kIHRoZSBwcmVwYXJlVmlldyBmdW5jdGlvbiB0byBwYXNzIGluXG4gICAgLy8gYWRkaXRpb25hbCBkYXRhIGZyb20gdGhlIHBhcmVudCB2aWV3LiBUaGlzIGNhbiBhbGxvdyB5b3UgdG8gaGF2ZSBtdWx0aS1zdGFnZSByZW5kZXJpbmcgb2ZcbiAgICAvLyBjdXN0b20gZGF0YSBmb3JtYXRzIGFuZCB0byBkZWNsYXJhdGl2ZWx5IGRlZmluZS5cbiAgICBfcGFyc2VTdWJ2aWV3T3B0czogZnVuY3Rpb24gKHN1YnZpZXcpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB2YXIgb3B0cyA9IHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiBzdWJ2aWV3LnNlbGVjdG9yIHx8ICdbZGF0YS1ob29rPVwiJyArIHN1YnZpZXcuaG9vayArICdcIl0nLFxuICAgICAgICAgICAgd2FpdEZvcjogc3Vidmlldy53YWl0Rm9yIHx8ICcnLFxuICAgICAgICAgICAgcHJlcGFyZVZpZXc6IHN1YnZpZXcucHJlcGFyZVZpZXcgfHwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgc3Vidmlldy5jb25zdHJ1Y3Rvcih7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogc2VsZlxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gb3B0cztcbiAgICB9LFxuXG4gICAgLy8gU2hvcnRjdXQgZm9yIGRvaW5nIGV2ZXJ5dGhpbmcgd2UgbmVlZCB0byBkbyB0b1xuICAgIC8vIHJlbmRlciBhbmQgZnVsbHkgcmVwbGFjZSBjdXJyZW50IHJvb3QgZWxlbWVudC5cbiAgICAvLyBFaXRoZXIgZGVmaW5lIGEgYHRlbXBsYXRlYCBwcm9wZXJ0eSBvZiB5b3VyIHZpZXdcbiAgICAvLyBvciBwYXNzIGluIGEgdGVtcGxhdGUgZGlyZWN0bHkuXG4gICAgLy8gVGhlIHRlbXBsYXRlIGNhbiBlaXRoZXIgYmUgYSBzdHJpbmcgb3IgYSBmdW5jdGlvbi5cbiAgICAvLyBJZiBpdCdzIGEgZnVuY3Rpb24gaXQgd2lsbCBiZSBwYXNzZWQgdGhlIGBjb250ZXh0YFxuICAgIC8vIGFyZ3VtZW50LlxuICAgIHJlbmRlcldpdGhUZW1wbGF0ZTogZnVuY3Rpb24gKGNvbnRleHQsIHRlbXBsYXRlQXJnKSB7XG4gICAgICAgIHZhciB0ZW1wbGF0ZSA9IHRlbXBsYXRlQXJnIHx8IHRoaXMudGVtcGxhdGU7XG4gICAgICAgIGlmICghdGVtcGxhdGUpIHRocm93IG5ldyBFcnJvcignVGVtcGxhdGUgc3RyaW5nIG9yIGZ1bmN0aW9uIG5lZWRlZC4nKTtcbiAgICAgICAgdmFyIG5ld0RvbSA9IGlzU3RyaW5nKHRlbXBsYXRlKSA/IHRlbXBsYXRlIDogdGVtcGxhdGUuY2FsbCh0aGlzLCBjb250ZXh0IHx8IHRoaXMpO1xuICAgICAgICBpZiAoaXNTdHJpbmcobmV3RG9tKSkgbmV3RG9tID0gZG9taWZ5KG5ld0RvbSk7XG4gICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLmVsICYmIHRoaXMuZWwucGFyZW50Tm9kZTtcbiAgICAgICAgaWYgKHBhcmVudCkgcGFyZW50LnJlcGxhY2VDaGlsZChuZXdEb20sIHRoaXMuZWwpO1xuICAgICAgICBpZiAobmV3RG9tLm5vZGVOYW1lID09PSAnI2RvY3VtZW50LWZyYWdtZW50JykgdGhyb3cgbmV3IEVycm9yKCdWaWV3cyBjYW4gb25seSBoYXZlIG9uZSByb290IGVsZW1lbnQsIGluY2x1ZGluZyBjb21tZW50IG5vZGVzLicpO1xuICAgICAgICB0aGlzLmVsID0gbmV3RG9tO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLy8gIyMgY2FjaGVFbGVtZW50c1xuICAgIC8vIFRoaXMgaXMgYSBzaG9ydGN1dCBmb3IgYWRkaW5nIHJlZmVyZW5jZSB0byBzcGVjaWZpYyBlbGVtZW50cyB3aXRoaW4geW91ciB2aWV3IGZvclxuICAgIC8vIGFjY2VzcyBsYXRlci4gVGhpcyBhdm9pZHMgZXhjZXNzaXZlIERPTSBxdWVyaWVzIGFuZCBtYWtlcyBpdCBlYXNpZXIgdG8gdXBkYXRlXG4gICAgLy8geW91ciB2aWV3IGlmIHlvdXIgdGVtcGxhdGUgY2hhbmdlcy5cbiAgICAvL1xuICAgIC8vIEluIHlvdXIgYHJlbmRlcmAgbWV0aG9kLiBVc2UgaXQgbGlrZSBzbzpcbiAgICAvL1xuICAgIC8vICAgICByZW5kZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAvLyAgICAgICB0aGlzLmJhc2ljUmVuZGVyKCk7XG4gICAgLy8gICAgICAgdGhpcy5jYWNoZUVsZW1lbnRzKHtcbiAgICAvLyAgICAgICAgIHBhZ2VzOiAnI3BhZ2VzJyxcbiAgICAvLyAgICAgICAgIGNoYXQ6ICcjdGVhbUNoYXQnLFxuICAgIC8vICAgICAgICAgbmF2OiAnbmF2I3ZpZXdzIHVsJyxcbiAgICAvLyAgICAgICAgIG1lOiAnI21lJyxcbiAgICAvLyAgICAgICAgIGNoZWF0U2hlZXQ6ICcjY2hlYXRTaGVldCcsXG4gICAgLy8gICAgICAgICBvbW5pQm94OiAnI2F3ZXNvbWVTYXVjZSdcbiAgICAvLyAgICAgICB9KTtcbiAgICAvLyAgICAgfVxuICAgIC8vXG4gICAgLy8gVGhlbiBsYXRlciB5b3UgY2FuIGFjY2VzcyBlbGVtZW50cyBieSByZWZlcmVuY2UgbGlrZSBzbzogYHRoaXMucGFnZXNgLCBvciBgdGhpcy5jaGF0YC5cbiAgICBjYWNoZUVsZW1lbnRzOiBmdW5jdGlvbiAoaGFzaCkge1xuICAgICAgICBmb3IgKHZhciBpdGVtIGluIGhhc2gpIHtcbiAgICAgICAgICAgIHRoaXNbaXRlbV0gPSB0aGlzLnF1ZXJ5KGhhc2hbaXRlbV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvLyAjIyBhbmltYXRlUmVtb3ZlXG4gICAgLy8gUGxhY2Vob2xkZXIgZm9yIGlmIHlvdSB3YW50IHRvIGRvIHNvbWV0aGluZyBzcGVjaWFsIHdoZW4gdGhleSdyZSByZW1vdmVkLlxuICAgIC8vIEZvciBleGFtcGxlIGZhZGUgaXQgb3V0LCBldGMuXG4gICAgLy8gQW55IG92ZXJyaWRlIGhlcmUgc2hvdWxkIGNhbGwgYC5yZW1vdmUoKWAgd2hlbiBkb25lLlxuICAgIGFuaW1hdGVSZW1vdmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5yZW1vdmUoKTtcbiAgICB9LFxuXG4gICAgLy8gIyMgcmVuZGVyQ29sbGVjdGlvblxuICAgIC8vIE1ldGhvZCBmb3IgcmVuZGVyaW5nIGEgY29sbGVjdGlvbnMgd2l0aCBpbmRpdmlkdWFsIHZpZXdzLlxuICAgIC8vIEp1c3QgcGFzcyBpdCB0aGUgY29sbGVjdGlvbiwgYW5kIHRoZSB2aWV3IHRvIHVzZSBmb3IgdGhlIGl0ZW1zIGluIHRoZVxuICAgIC8vIGNvbGxlY3Rpb24uIFRoZSBjb2xsZWN0aW9uVmlldyBpcyByZXR1cm5lZC5cbiAgICByZW5kZXJDb2xsZWN0aW9uOiBmdW5jdGlvbiAoY29sbGVjdGlvbiwgVmlld0NsYXNzLCBjb250YWluZXIsIG9wdHMpIHtcbiAgICAgICAgdmFyIGNvbnRhaW5lckVsID0gKHR5cGVvZiBjb250YWluZXIgPT09ICdzdHJpbmcnKSA/IHRoaXMucXVlcnkoY29udGFpbmVyKSA6IGNvbnRhaW5lcjtcbiAgICAgICAgdmFyIGNvbmZpZyA9IGFzc2lnbih7XG4gICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uLFxuICAgICAgICAgICAgZWw6IGNvbnRhaW5lckVsIHx8IHRoaXMuZWwsXG4gICAgICAgICAgICB2aWV3OiBWaWV3Q2xhc3MsXG4gICAgICAgICAgICBwYXJlbnQ6IHRoaXMsXG4gICAgICAgICAgICB2aWV3T3B0aW9uczoge1xuICAgICAgICAgICAgICAgIHBhcmVudDogdGhpc1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBvcHRzKTtcbiAgICAgICAgdmFyIGNvbGxlY3Rpb25WaWV3ID0gbmV3IENvbGxlY3Rpb25WaWV3KGNvbmZpZyk7XG4gICAgICAgIGNvbGxlY3Rpb25WaWV3LnJlbmRlcigpO1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RlclN1YnZpZXcoY29sbGVjdGlvblZpZXcpO1xuICAgIH0sXG5cbiAgICBfc2V0UmVuZGVyOiBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgJ3JlbmRlcicsIHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlcjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIF9zZXRSZW1vdmU6IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCAncmVtb3ZlJywge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVtb3ZlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIF9kb3duc2VydEJpbmRpbmdzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBhcnNlZEJpbmRpbmdzID0gdGhpcy5fcGFyc2VkQmluZGluZ3M7XG4gICAgICAgIGlmICghdGhpcy5iaW5kaW5nc1NldCkgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5fc3Vidmlld3Mpe1xuICAgICAgICAgIGludm9rZU1hcChmbGF0dGVuKHRoaXMuX3N1YnZpZXdzKSwgJ3JlbW92ZScpO1xuICAgICAgICAgIHRoaXMuX3N1YnZpZXdzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nKCk7XG4gICAgICAgIHRoaXMuYmluZGluZ3NTZXQgPSBmYWxzZTtcbiAgICB9LFxuXG4gICAgX3Vwc2VydEJpbmRpbmdzOiBmdW5jdGlvbihhdHRycykge1xuICAgICAgICBhdHRycyA9IGF0dHJzIHx8IHRoaXM7XG4gICAgICAgIGlmICh0aGlzLmJpbmRpbmdzU2V0KSByZXR1cm47XG4gICAgICAgIHRoaXMuX3BhcnNlZEJpbmRpbmdzID0gYmluZGluZ3ModGhpcy5iaW5kaW5ncywgdGhpcyk7XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVCaW5kaW5ncygpO1xuICAgICAgICBpZiAoYXR0cnMuZWwgJiYgIXRoaXMuYXV0b1JlbmRlcikge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlRWxlbWVudENoYW5nZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVTdWJ2aWV3cygpO1xuICAgICAgICB0aGlzLmJpbmRpbmdzU2V0ID0gdHJ1ZTtcbiAgICB9XG59KTtcblxuVmlldy5wcm90b3R5cGUuX3NldFJlbmRlcihWaWV3LnByb3RvdHlwZSk7XG5WaWV3LnByb3RvdHlwZS5fc2V0UmVtb3ZlKFZpZXcucHJvdG90eXBlKTtcblZpZXcuZXh0ZW5kID0gQmFzZVN0YXRlLmV4dGVuZDtcbm1vZHVsZS5leHBvcnRzID0gVmlldztcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYXJyYXlOZXh0KGFycmF5LCBjdXJyZW50SXRlbSkge1xuICAgIHZhciBsZW4gPSBhcnJheS5sZW5ndGg7XG4gICAgdmFyIG5ld0luZGV4ID0gYXJyYXkuaW5kZXhPZihjdXJyZW50SXRlbSkgKyAxO1xuICAgIGlmIChuZXdJbmRleCA+IChsZW4gLSAxKSkgbmV3SW5kZXggPSAwO1xuICAgIHJldHVybiBhcnJheVtuZXdJbmRleF07XG59O1xuIiwiLyohXG4gICogQm9vdHN0cmFwIHY0LjMuMSAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcbiAgKiBDb3B5cmlnaHQgMjAxMS0yMDE5IFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpXG4gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAgKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cywgcmVxdWlyZSgnanF1ZXJ5JyksIHJlcXVpcmUoJ3BvcHBlci5qcycpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnLCAnanF1ZXJ5JywgJ3BvcHBlci5qcyddLCBmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSBnbG9iYWwgfHwgc2VsZiwgZmFjdG9yeShnbG9iYWwuYm9vdHN0cmFwID0ge30sIGdsb2JhbC5qUXVlcnksIGdsb2JhbC5Qb3BwZXIpKTtcbn0odGhpcywgZnVuY3Rpb24gKGV4cG9ydHMsICQsIFBvcHBlcikgeyAndXNlIHN0cmljdCc7XG5cbiAgJCA9ICQgJiYgJC5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdCcpID8gJFsnZGVmYXVsdCddIDogJDtcbiAgUG9wcGVyID0gUG9wcGVyICYmIFBvcHBlci5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdCcpID8gUG9wcGVyWydkZWZhdWx0J10gOiBQb3BwZXI7XG5cbiAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9XG5cbiAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICAgIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG4gICAgICB2YXIgb3duS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG5cbiAgICAgIGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvd25LZXlzID0gb3duS2V5cy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBzeW0pLmVudW1lcmFibGU7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgb3duS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgICBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xuICB9XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCAodjQuMy4xKTogdXRpbC5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBQcml2YXRlIFRyYW5zaXRpb25FbmQgSGVscGVyc1xuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgdmFyIFRSQU5TSVRJT05fRU5EID0gJ3RyYW5zaXRpb25lbmQnO1xuICB2YXIgTUFYX1VJRCA9IDEwMDAwMDA7XG4gIHZhciBNSUxMSVNFQ09ORFNfTVVMVElQTElFUiA9IDEwMDA7IC8vIFNob3V0b3V0IEFuZ3VzQ3JvbGwgKGh0dHBzOi8vZ29vLmdsL3B4d1FHcClcblxuICBmdW5jdGlvbiB0b1R5cGUob2JqKSB7XG4gICAgcmV0dXJuIHt9LnRvU3RyaW5nLmNhbGwob2JqKS5tYXRjaCgvXFxzKFthLXpdKykvaSlbMV0udG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFNwZWNpYWxUcmFuc2l0aW9uRW5kRXZlbnQoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJpbmRUeXBlOiBUUkFOU0lUSU9OX0VORCxcbiAgICAgIGRlbGVnYXRlVHlwZTogVFJBTlNJVElPTl9FTkQsXG4gICAgICBoYW5kbGU6IGZ1bmN0aW9uIGhhbmRsZShldmVudCkge1xuICAgICAgICBpZiAoJChldmVudC50YXJnZXQpLmlzKHRoaXMpKSB7XG4gICAgICAgICAgcmV0dXJuIGV2ZW50LmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmaW5lZFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2l0aW9uRW5kRW11bGF0b3IoZHVyYXRpb24pIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICAgICQodGhpcykub25lKFV0aWwuVFJBTlNJVElPTl9FTkQsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgfSk7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgICBVdGlsLnRyaWdnZXJUcmFuc2l0aW9uRW5kKF90aGlzKTtcbiAgICAgIH1cbiAgICB9LCBkdXJhdGlvbik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uRW5kU3VwcG9ydCgpIHtcbiAgICAkLmZuLmVtdWxhdGVUcmFuc2l0aW9uRW5kID0gdHJhbnNpdGlvbkVuZEVtdWxhdG9yO1xuICAgICQuZXZlbnQuc3BlY2lhbFtVdGlsLlRSQU5TSVRJT05fRU5EXSA9IGdldFNwZWNpYWxUcmFuc2l0aW9uRW5kRXZlbnQoKTtcbiAgfVxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogUHVibGljIFV0aWwgQXBpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgdmFyIFV0aWwgPSB7XG4gICAgVFJBTlNJVElPTl9FTkQ6ICdic1RyYW5zaXRpb25FbmQnLFxuICAgIGdldFVJRDogZnVuY3Rpb24gZ2V0VUlEKHByZWZpeCkge1xuICAgICAgZG8ge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgICBwcmVmaXggKz0gfn4oTWF0aC5yYW5kb20oKSAqIE1BWF9VSUQpOyAvLyBcIn5+XCIgYWN0cyBsaWtlIGEgZmFzdGVyIE1hdGguZmxvb3IoKSBoZXJlXG4gICAgICB9IHdoaWxlIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcmVmaXgpKTtcblxuICAgICAgcmV0dXJuIHByZWZpeDtcbiAgICB9LFxuICAgIGdldFNlbGVjdG9yRnJvbUVsZW1lbnQ6IGZ1bmN0aW9uIGdldFNlbGVjdG9yRnJvbUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgdmFyIHNlbGVjdG9yID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGFyZ2V0Jyk7XG5cbiAgICAgIGlmICghc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09ICcjJykge1xuICAgICAgICB2YXIgaHJlZkF0dHIgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuICAgICAgICBzZWxlY3RvciA9IGhyZWZBdHRyICYmIGhyZWZBdHRyICE9PSAnIycgPyBocmVmQXR0ci50cmltKCkgOiAnJztcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpID8gc2VsZWN0b3IgOiBudWxsO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQ6IGZ1bmN0aW9uIGdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gLy8gR2V0IHRyYW5zaXRpb24tZHVyYXRpb24gb2YgdGhlIGVsZW1lbnRcblxuXG4gICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gJChlbGVtZW50KS5jc3MoJ3RyYW5zaXRpb24tZHVyYXRpb24nKTtcbiAgICAgIHZhciB0cmFuc2l0aW9uRGVsYXkgPSAkKGVsZW1lbnQpLmNzcygndHJhbnNpdGlvbi1kZWxheScpO1xuICAgICAgdmFyIGZsb2F0VHJhbnNpdGlvbkR1cmF0aW9uID0gcGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pO1xuICAgICAgdmFyIGZsb2F0VHJhbnNpdGlvbkRlbGF5ID0gcGFyc2VGbG9hdCh0cmFuc2l0aW9uRGVsYXkpOyAvLyBSZXR1cm4gMCBpZiBlbGVtZW50IG9yIHRyYW5zaXRpb24gZHVyYXRpb24gaXMgbm90IGZvdW5kXG5cbiAgICAgIGlmICghZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24gJiYgIWZsb2F0VHJhbnNpdGlvbkRlbGF5KSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfSAvLyBJZiBtdWx0aXBsZSBkdXJhdGlvbnMgYXJlIGRlZmluZWQsIHRha2UgdGhlIGZpcnN0XG5cblxuICAgICAgdHJhbnNpdGlvbkR1cmF0aW9uID0gdHJhbnNpdGlvbkR1cmF0aW9uLnNwbGl0KCcsJylbMF07XG4gICAgICB0cmFuc2l0aW9uRGVsYXkgPSB0cmFuc2l0aW9uRGVsYXkuc3BsaXQoJywnKVswXTtcbiAgICAgIHJldHVybiAocGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pICsgcGFyc2VGbG9hdCh0cmFuc2l0aW9uRGVsYXkpKSAqIE1JTExJU0VDT05EU19NVUxUSVBMSUVSO1xuICAgIH0sXG4gICAgcmVmbG93OiBmdW5jdGlvbiByZWZsb3coZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgIH0sXG4gICAgdHJpZ2dlclRyYW5zaXRpb25FbmQ6IGZ1bmN0aW9uIHRyaWdnZXJUcmFuc2l0aW9uRW5kKGVsZW1lbnQpIHtcbiAgICAgICQoZWxlbWVudCkudHJpZ2dlcihUUkFOU0lUSU9OX0VORCk7XG4gICAgfSxcbiAgICAvLyBUT0RPOiBSZW1vdmUgaW4gdjVcbiAgICBzdXBwb3J0c1RyYW5zaXRpb25FbmQ6IGZ1bmN0aW9uIHN1cHBvcnRzVHJhbnNpdGlvbkVuZCgpIHtcbiAgICAgIHJldHVybiBCb29sZWFuKFRSQU5TSVRJT05fRU5EKTtcbiAgICB9LFxuICAgIGlzRWxlbWVudDogZnVuY3Rpb24gaXNFbGVtZW50KG9iaikge1xuICAgICAgcmV0dXJuIChvYmpbMF0gfHwgb2JqKS5ub2RlVHlwZTtcbiAgICB9LFxuICAgIHR5cGVDaGVja0NvbmZpZzogZnVuY3Rpb24gdHlwZUNoZWNrQ29uZmlnKGNvbXBvbmVudE5hbWUsIGNvbmZpZywgY29uZmlnVHlwZXMpIHtcbiAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGNvbmZpZ1R5cGVzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29uZmlnVHlwZXMsIHByb3BlcnR5KSkge1xuICAgICAgICAgIHZhciBleHBlY3RlZFR5cGVzID0gY29uZmlnVHlwZXNbcHJvcGVydHldO1xuICAgICAgICAgIHZhciB2YWx1ZSA9IGNvbmZpZ1twcm9wZXJ0eV07XG4gICAgICAgICAgdmFyIHZhbHVlVHlwZSA9IHZhbHVlICYmIFV0aWwuaXNFbGVtZW50KHZhbHVlKSA/ICdlbGVtZW50JyA6IHRvVHlwZSh2YWx1ZSk7XG5cbiAgICAgICAgICBpZiAoIW5ldyBSZWdFeHAoZXhwZWN0ZWRUeXBlcykudGVzdCh2YWx1ZVR5cGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY29tcG9uZW50TmFtZS50b1VwcGVyQ2FzZSgpICsgXCI6IFwiICsgKFwiT3B0aW9uIFxcXCJcIiArIHByb3BlcnR5ICsgXCJcXFwiIHByb3ZpZGVkIHR5cGUgXFxcIlwiICsgdmFsdWVUeXBlICsgXCJcXFwiIFwiKSArIChcImJ1dCBleHBlY3RlZCB0eXBlIFxcXCJcIiArIGV4cGVjdGVkVHlwZXMgKyBcIlxcXCIuXCIpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGZpbmRTaGFkb3dSb290OiBmdW5jdGlvbiBmaW5kU2hhZG93Um9vdChlbGVtZW50KSB7XG4gICAgICBpZiAoIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hdHRhY2hTaGFkb3cpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IC8vIENhbiBmaW5kIHRoZSBzaGFkb3cgcm9vdCBvdGhlcndpc2UgaXQnbGwgcmV0dXJuIHRoZSBkb2N1bWVudFxuXG5cbiAgICAgIGlmICh0eXBlb2YgZWxlbWVudC5nZXRSb290Tm9kZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgcm9vdCA9IGVsZW1lbnQuZ2V0Um9vdE5vZGUoKTtcbiAgICAgICAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgIH0gLy8gd2hlbiB3ZSBkb24ndCBmaW5kIGEgc2hhZG93IHJvb3RcblxuXG4gICAgICBpZiAoIWVsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFV0aWwuZmluZFNoYWRvd1Jvb3QoZWxlbWVudC5wYXJlbnROb2RlKTtcbiAgICB9XG4gIH07XG4gIHNldFRyYW5zaXRpb25FbmRTdXBwb3J0KCk7XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBDb25zdGFudHNcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBOQU1FID0gJ2FsZXJ0JztcbiAgdmFyIFZFUlNJT04gPSAnNC4zLjEnO1xuICB2YXIgREFUQV9LRVkgPSAnYnMuYWxlcnQnO1xuICB2YXIgRVZFTlRfS0VZID0gXCIuXCIgKyBEQVRBX0tFWTtcbiAgdmFyIERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknO1xuICB2YXIgSlFVRVJZX05PX0NPTkZMSUNUID0gJC5mbltOQU1FXTtcbiAgdmFyIFNlbGVjdG9yID0ge1xuICAgIERJU01JU1M6ICdbZGF0YS1kaXNtaXNzPVwiYWxlcnRcIl0nXG4gIH07XG4gIHZhciBFdmVudCA9IHtcbiAgICBDTE9TRTogXCJjbG9zZVwiICsgRVZFTlRfS0VZLFxuICAgIENMT1NFRDogXCJjbG9zZWRcIiArIEVWRU5UX0tFWSxcbiAgICBDTElDS19EQVRBX0FQSTogXCJjbGlja1wiICsgRVZFTlRfS0VZICsgREFUQV9BUElfS0VZXG4gIH07XG4gIHZhciBDbGFzc05hbWUgPSB7XG4gICAgQUxFUlQ6ICdhbGVydCcsXG4gICAgRkFERTogJ2ZhZGUnLFxuICAgIFNIT1c6ICdzaG93J1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIENsYXNzIERlZmluaXRpb25cbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuICB9O1xuXG4gIHZhciBBbGVydCA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEFsZXJ0KGVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgIH0gLy8gR2V0dGVyc1xuXG5cbiAgICB2YXIgX3Byb3RvID0gQWxlcnQucHJvdG90eXBlO1xuXG4gICAgLy8gUHVibGljXG4gICAgX3Byb3RvLmNsb3NlID0gZnVuY3Rpb24gY2xvc2UoZWxlbWVudCkge1xuICAgICAgdmFyIHJvb3RFbGVtZW50ID0gdGhpcy5fZWxlbWVudDtcblxuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgcm9vdEVsZW1lbnQgPSB0aGlzLl9nZXRSb290RWxlbWVudChlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgdmFyIGN1c3RvbUV2ZW50ID0gdGhpcy5fdHJpZ2dlckNsb3NlRXZlbnQocm9vdEVsZW1lbnQpO1xuXG4gICAgICBpZiAoY3VzdG9tRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9yZW1vdmVFbGVtZW50KHJvb3RFbGVtZW50KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgJC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsIERBVEFfS0VZKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsO1xuICAgIH0gLy8gUHJpdmF0ZVxuICAgIDtcblxuICAgIF9wcm90by5fZ2V0Um9vdEVsZW1lbnQgPSBmdW5jdGlvbiBfZ2V0Um9vdEVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgdmFyIHNlbGVjdG9yID0gVXRpbC5nZXRTZWxlY3RvckZyb21FbGVtZW50KGVsZW1lbnQpO1xuICAgICAgdmFyIHBhcmVudCA9IGZhbHNlO1xuXG4gICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgcGFyZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICB9XG5cbiAgICAgIGlmICghcGFyZW50KSB7XG4gICAgICAgIHBhcmVudCA9ICQoZWxlbWVudCkuY2xvc2VzdChcIi5cIiArIENsYXNzTmFtZS5BTEVSVClbMF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfTtcblxuICAgIF9wcm90by5fdHJpZ2dlckNsb3NlRXZlbnQgPSBmdW5jdGlvbiBfdHJpZ2dlckNsb3NlRXZlbnQoZWxlbWVudCkge1xuICAgICAgdmFyIGNsb3NlRXZlbnQgPSAkLkV2ZW50KEV2ZW50LkNMT1NFKTtcbiAgICAgICQoZWxlbWVudCkudHJpZ2dlcihjbG9zZUV2ZW50KTtcbiAgICAgIHJldHVybiBjbG9zZUV2ZW50O1xuICAgIH07XG5cbiAgICBfcHJvdG8uX3JlbW92ZUVsZW1lbnQgPSBmdW5jdGlvbiBfcmVtb3ZlRWxlbWVudChlbGVtZW50KSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAkKGVsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZS5TSE9XKTtcblxuICAgICAgaWYgKCEkKGVsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZS5GQURFKSkge1xuICAgICAgICB0aGlzLl9kZXN0cm95RWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciB0cmFuc2l0aW9uRHVyYXRpb24gPSBVdGlsLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KGVsZW1lbnQpO1xuICAgICAgJChlbGVtZW50KS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5fZGVzdHJveUVsZW1lbnQoZWxlbWVudCwgZXZlbnQpO1xuICAgICAgfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9kZXN0cm95RWxlbWVudCA9IGZ1bmN0aW9uIF9kZXN0cm95RWxlbWVudChlbGVtZW50KSB7XG4gICAgICAkKGVsZW1lbnQpLmRldGFjaCgpLnRyaWdnZXIoRXZlbnQuQ0xPU0VEKS5yZW1vdmUoKTtcbiAgICB9IC8vIFN0YXRpY1xuICAgIDtcblxuICAgIEFsZXJ0Ll9qUXVlcnlJbnRlcmZhY2UgPSBmdW5jdGlvbiBfalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciAkZWxlbWVudCA9ICQodGhpcyk7XG4gICAgICAgIHZhciBkYXRhID0gJGVsZW1lbnQuZGF0YShEQVRBX0tFWSk7XG5cbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IG5ldyBBbGVydCh0aGlzKTtcbiAgICAgICAgICAkZWxlbWVudC5kYXRhKERBVEFfS0VZLCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcgPT09ICdjbG9zZScpIHtcbiAgICAgICAgICBkYXRhW2NvbmZpZ10odGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBBbGVydC5faGFuZGxlRGlzbWlzcyA9IGZ1bmN0aW9uIF9oYW5kbGVEaXNtaXNzKGFsZXJ0SW5zdGFuY2UpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFsZXJ0SW5zdGFuY2UuY2xvc2UodGhpcyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBfY3JlYXRlQ2xhc3MoQWxlcnQsIG51bGwsIFt7XG4gICAgICBrZXk6IFwiVkVSU0lPTlwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBWRVJTSU9OO1xuICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBBbGVydDtcbiAgfSgpO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuXG4gICQoZG9jdW1lbnQpLm9uKEV2ZW50LkNMSUNLX0RBVEFfQVBJLCBTZWxlY3Rvci5ESVNNSVNTLCBBbGVydC5faGFuZGxlRGlzbWlzcyhuZXcgQWxlcnQoKSkpO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIGpRdWVyeVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgJC5mbltOQU1FXSA9IEFsZXJ0Ll9qUXVlcnlJbnRlcmZhY2U7XG4gICQuZm5bTkFNRV0uQ29uc3RydWN0b3IgPSBBbGVydDtcblxuICAkLmZuW05BTUVdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbltOQU1FXSA9IEpRVUVSWV9OT19DT05GTElDVDtcbiAgICByZXR1cm4gQWxlcnQuX2pRdWVyeUludGVyZmFjZTtcbiAgfTtcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIENvbnN0YW50c1xuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgdmFyIE5BTUUkMSA9ICdidXR0b24nO1xuICB2YXIgVkVSU0lPTiQxID0gJzQuMy4xJztcbiAgdmFyIERBVEFfS0VZJDEgPSAnYnMuYnV0dG9uJztcbiAgdmFyIEVWRU5UX0tFWSQxID0gXCIuXCIgKyBEQVRBX0tFWSQxO1xuICB2YXIgREFUQV9BUElfS0VZJDEgPSAnLmRhdGEtYXBpJztcbiAgdmFyIEpRVUVSWV9OT19DT05GTElDVCQxID0gJC5mbltOQU1FJDFdO1xuICB2YXIgQ2xhc3NOYW1lJDEgPSB7XG4gICAgQUNUSVZFOiAnYWN0aXZlJyxcbiAgICBCVVRUT046ICdidG4nLFxuICAgIEZPQ1VTOiAnZm9jdXMnXG4gIH07XG4gIHZhciBTZWxlY3RvciQxID0ge1xuICAgIERBVEFfVE9HR0xFX0NBUlJPVDogJ1tkYXRhLXRvZ2dsZV49XCJidXR0b25cIl0nLFxuICAgIERBVEFfVE9HR0xFOiAnW2RhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiXScsXG4gICAgSU5QVVQ6ICdpbnB1dDpub3QoW3R5cGU9XCJoaWRkZW5cIl0pJyxcbiAgICBBQ1RJVkU6ICcuYWN0aXZlJyxcbiAgICBCVVRUT046ICcuYnRuJ1xuICB9O1xuICB2YXIgRXZlbnQkMSA9IHtcbiAgICBDTElDS19EQVRBX0FQSTogXCJjbGlja1wiICsgRVZFTlRfS0VZJDEgKyBEQVRBX0FQSV9LRVkkMSxcbiAgICBGT0NVU19CTFVSX0RBVEFfQVBJOiBcImZvY3VzXCIgKyBFVkVOVF9LRVkkMSArIERBVEFfQVBJX0tFWSQxICsgXCIgXCIgKyAoXCJibHVyXCIgKyBFVkVOVF9LRVkkMSArIERBVEFfQVBJX0tFWSQxKVxuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIENsYXNzIERlZmluaXRpb25cbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuICB9O1xuXG4gIHZhciBCdXR0b24gPVxuICAvKiNfX1BVUkVfXyovXG4gIGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBCdXR0b24oZWxlbWVudCkge1xuICAgICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgfSAvLyBHZXR0ZXJzXG5cblxuICAgIHZhciBfcHJvdG8gPSBCdXR0b24ucHJvdG90eXBlO1xuXG4gICAgLy8gUHVibGljXG4gICAgX3Byb3RvLnRvZ2dsZSA9IGZ1bmN0aW9uIHRvZ2dsZSgpIHtcbiAgICAgIHZhciB0cmlnZ2VyQ2hhbmdlRXZlbnQgPSB0cnVlO1xuICAgICAgdmFyIGFkZEFyaWFQcmVzc2VkID0gdHJ1ZTtcbiAgICAgIHZhciByb290RWxlbWVudCA9ICQodGhpcy5fZWxlbWVudCkuY2xvc2VzdChTZWxlY3RvciQxLkRBVEFfVE9HR0xFKVswXTtcblxuICAgICAgaWYgKHJvb3RFbGVtZW50KSB7XG4gICAgICAgIHZhciBpbnB1dCA9IHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcihTZWxlY3RvciQxLklOUFVUKTtcblxuICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICBpZiAoaW5wdXQudHlwZSA9PT0gJ3JhZGlvJykge1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoZWNrZWQgJiYgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ2xhc3NOYW1lJDEuQUNUSVZFKSkge1xuICAgICAgICAgICAgICB0cmlnZ2VyQ2hhbmdlRXZlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhciBhY3RpdmVFbGVtZW50ID0gcm9vdEVsZW1lbnQucXVlcnlTZWxlY3RvcihTZWxlY3RvciQxLkFDVElWRSk7XG5cbiAgICAgICAgICAgICAgaWYgKGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAkKGFjdGl2ZUVsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQxLkFDVElWRSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZUV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpIHx8IHJvb3RFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSB8fCBpbnB1dC5jbGFzc0xpc3QuY29udGFpbnMoJ2Rpc2FibGVkJykgfHwgcm9vdEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9ICF0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDbGFzc05hbWUkMS5BQ1RJVkUpO1xuICAgICAgICAgICAgJChpbnB1dCkudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICBhZGRBcmlhUHJlc3NlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhZGRBcmlhUHJlc3NlZCkge1xuICAgICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgIXRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENsYXNzTmFtZSQxLkFDVElWRSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHJpZ2dlckNoYW5nZUV2ZW50KSB7XG4gICAgICAgICQodGhpcy5fZWxlbWVudCkudG9nZ2xlQ2xhc3MoQ2xhc3NOYW1lJDEuQUNUSVZFKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgJC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsIERBVEFfS0VZJDEpO1xuICAgICAgdGhpcy5fZWxlbWVudCA9IG51bGw7XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBCdXR0b24uX2pRdWVyeUludGVyZmFjZSA9IGZ1bmN0aW9uIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAkKHRoaXMpLmRhdGEoREFUQV9LRVkkMSk7XG5cbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IG5ldyBCdXR0b24odGhpcyk7XG4gICAgICAgICAgJCh0aGlzKS5kYXRhKERBVEFfS0VZJDEsIGRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZyA9PT0gJ3RvZ2dsZScpIHtcbiAgICAgICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9jcmVhdGVDbGFzcyhCdXR0b24sIG51bGwsIFt7XG4gICAgICBrZXk6IFwiVkVSU0lPTlwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBWRVJTSU9OJDE7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIEJ1dHRvbjtcbiAgfSgpO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuXG4gICQoZG9jdW1lbnQpLm9uKEV2ZW50JDEuQ0xJQ0tfREFUQV9BUEksIFNlbGVjdG9yJDEuREFUQV9UT0dHTEVfQ0FSUk9ULCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHZhciBidXR0b24gPSBldmVudC50YXJnZXQ7XG5cbiAgICBpZiAoISQoYnV0dG9uKS5oYXNDbGFzcyhDbGFzc05hbWUkMS5CVVRUT04pKSB7XG4gICAgICBidXR0b24gPSAkKGJ1dHRvbikuY2xvc2VzdChTZWxlY3RvciQxLkJVVFRPTik7XG4gICAgfVxuXG4gICAgQnV0dG9uLl9qUXVlcnlJbnRlcmZhY2UuY2FsbCgkKGJ1dHRvbiksICd0b2dnbGUnKTtcbiAgfSkub24oRXZlbnQkMS5GT0NVU19CTFVSX0RBVEFfQVBJLCBTZWxlY3RvciQxLkRBVEFfVE9HR0xFX0NBUlJPVCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIGJ1dHRvbiA9ICQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFNlbGVjdG9yJDEuQlVUVE9OKVswXTtcbiAgICAkKGJ1dHRvbikudG9nZ2xlQ2xhc3MoQ2xhc3NOYW1lJDEuRk9DVVMsIC9eZm9jdXMoaW4pPyQvLnRlc3QoZXZlbnQudHlwZSkpO1xuICB9KTtcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBqUXVlcnlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gICQuZm5bTkFNRSQxXSA9IEJ1dHRvbi5falF1ZXJ5SW50ZXJmYWNlO1xuICAkLmZuW05BTUUkMV0uQ29uc3RydWN0b3IgPSBCdXR0b247XG5cbiAgJC5mbltOQU1FJDFdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbltOQU1FJDFdID0gSlFVRVJZX05PX0NPTkZMSUNUJDE7XG4gICAgcmV0dXJuIEJ1dHRvbi5falF1ZXJ5SW50ZXJmYWNlO1xuICB9O1xuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQ29uc3RhbnRzXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICB2YXIgTkFNRSQyID0gJ2Nhcm91c2VsJztcbiAgdmFyIFZFUlNJT04kMiA9ICc0LjMuMSc7XG4gIHZhciBEQVRBX0tFWSQyID0gJ2JzLmNhcm91c2VsJztcbiAgdmFyIEVWRU5UX0tFWSQyID0gXCIuXCIgKyBEQVRBX0tFWSQyO1xuICB2YXIgREFUQV9BUElfS0VZJDIgPSAnLmRhdGEtYXBpJztcbiAgdmFyIEpRVUVSWV9OT19DT05GTElDVCQyID0gJC5mbltOQU1FJDJdO1xuICB2YXIgQVJST1dfTEVGVF9LRVlDT0RFID0gMzc7IC8vIEtleWJvYXJkRXZlbnQud2hpY2ggdmFsdWUgZm9yIGxlZnQgYXJyb3cga2V5XG5cbiAgdmFyIEFSUk9XX1JJR0hUX0tFWUNPREUgPSAzOTsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3IgcmlnaHQgYXJyb3cga2V5XG5cbiAgdmFyIFRPVUNIRVZFTlRfQ09NUEFUX1dBSVQgPSA1MDA7IC8vIFRpbWUgZm9yIG1vdXNlIGNvbXBhdCBldmVudHMgdG8gZmlyZSBhZnRlciB0b3VjaFxuXG4gIHZhciBTV0lQRV9USFJFU0hPTEQgPSA0MDtcbiAgdmFyIERlZmF1bHQgPSB7XG4gICAgaW50ZXJ2YWw6IDUwMDAsXG4gICAga2V5Ym9hcmQ6IHRydWUsXG4gICAgc2xpZGU6IGZhbHNlLFxuICAgIHBhdXNlOiAnaG92ZXInLFxuICAgIHdyYXA6IHRydWUsXG4gICAgdG91Y2g6IHRydWVcbiAgfTtcbiAgdmFyIERlZmF1bHRUeXBlID0ge1xuICAgIGludGVydmFsOiAnKG51bWJlcnxib29sZWFuKScsXG4gICAga2V5Ym9hcmQ6ICdib29sZWFuJyxcbiAgICBzbGlkZTogJyhib29sZWFufHN0cmluZyknLFxuICAgIHBhdXNlOiAnKHN0cmluZ3xib29sZWFuKScsXG4gICAgd3JhcDogJ2Jvb2xlYW4nLFxuICAgIHRvdWNoOiAnYm9vbGVhbidcbiAgfTtcbiAgdmFyIERpcmVjdGlvbiA9IHtcbiAgICBORVhUOiAnbmV4dCcsXG4gICAgUFJFVjogJ3ByZXYnLFxuICAgIExFRlQ6ICdsZWZ0JyxcbiAgICBSSUdIVDogJ3JpZ2h0J1xuICB9O1xuICB2YXIgRXZlbnQkMiA9IHtcbiAgICBTTElERTogXCJzbGlkZVwiICsgRVZFTlRfS0VZJDIsXG4gICAgU0xJRDogXCJzbGlkXCIgKyBFVkVOVF9LRVkkMixcbiAgICBLRVlET1dOOiBcImtleWRvd25cIiArIEVWRU5UX0tFWSQyLFxuICAgIE1PVVNFRU5URVI6IFwibW91c2VlbnRlclwiICsgRVZFTlRfS0VZJDIsXG4gICAgTU9VU0VMRUFWRTogXCJtb3VzZWxlYXZlXCIgKyBFVkVOVF9LRVkkMixcbiAgICBUT1VDSFNUQVJUOiBcInRvdWNoc3RhcnRcIiArIEVWRU5UX0tFWSQyLFxuICAgIFRPVUNITU9WRTogXCJ0b3VjaG1vdmVcIiArIEVWRU5UX0tFWSQyLFxuICAgIFRPVUNIRU5EOiBcInRvdWNoZW5kXCIgKyBFVkVOVF9LRVkkMixcbiAgICBQT0lOVEVSRE9XTjogXCJwb2ludGVyZG93blwiICsgRVZFTlRfS0VZJDIsXG4gICAgUE9JTlRFUlVQOiBcInBvaW50ZXJ1cFwiICsgRVZFTlRfS0VZJDIsXG4gICAgRFJBR19TVEFSVDogXCJkcmFnc3RhcnRcIiArIEVWRU5UX0tFWSQyLFxuICAgIExPQURfREFUQV9BUEk6IFwibG9hZFwiICsgRVZFTlRfS0VZJDIgKyBEQVRBX0FQSV9LRVkkMixcbiAgICBDTElDS19EQVRBX0FQSTogXCJjbGlja1wiICsgRVZFTlRfS0VZJDIgKyBEQVRBX0FQSV9LRVkkMlxuICB9O1xuICB2YXIgQ2xhc3NOYW1lJDIgPSB7XG4gICAgQ0FST1VTRUw6ICdjYXJvdXNlbCcsXG4gICAgQUNUSVZFOiAnYWN0aXZlJyxcbiAgICBTTElERTogJ3NsaWRlJyxcbiAgICBSSUdIVDogJ2Nhcm91c2VsLWl0ZW0tcmlnaHQnLFxuICAgIExFRlQ6ICdjYXJvdXNlbC1pdGVtLWxlZnQnLFxuICAgIE5FWFQ6ICdjYXJvdXNlbC1pdGVtLW5leHQnLFxuICAgIFBSRVY6ICdjYXJvdXNlbC1pdGVtLXByZXYnLFxuICAgIElURU06ICdjYXJvdXNlbC1pdGVtJyxcbiAgICBQT0lOVEVSX0VWRU5UOiAncG9pbnRlci1ldmVudCdcbiAgfTtcbiAgdmFyIFNlbGVjdG9yJDIgPSB7XG4gICAgQUNUSVZFOiAnLmFjdGl2ZScsXG4gICAgQUNUSVZFX0lURU06ICcuYWN0aXZlLmNhcm91c2VsLWl0ZW0nLFxuICAgIElURU06ICcuY2Fyb3VzZWwtaXRlbScsXG4gICAgSVRFTV9JTUc6ICcuY2Fyb3VzZWwtaXRlbSBpbWcnLFxuICAgIE5FWFRfUFJFVjogJy5jYXJvdXNlbC1pdGVtLW5leHQsIC5jYXJvdXNlbC1pdGVtLXByZXYnLFxuICAgIElORElDQVRPUlM6ICcuY2Fyb3VzZWwtaW5kaWNhdG9ycycsXG4gICAgREFUQV9TTElERTogJ1tkYXRhLXNsaWRlXSwgW2RhdGEtc2xpZGUtdG9dJyxcbiAgICBEQVRBX1JJREU6ICdbZGF0YS1yaWRlPVwiY2Fyb3VzZWxcIl0nXG4gIH07XG4gIHZhciBQb2ludGVyVHlwZSA9IHtcbiAgICBUT1VDSDogJ3RvdWNoJyxcbiAgICBQRU46ICdwZW4nXG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG4gIH07XG5cbiAgdmFyIENhcm91c2VsID1cbiAgLyojX19QVVJFX18qL1xuICBmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ2Fyb3VzZWwoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgICB0aGlzLl9pdGVtcyA9IG51bGw7XG4gICAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGw7XG4gICAgICB0aGlzLl9hY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuX2lzUGF1c2VkID0gZmFsc2U7XG4gICAgICB0aGlzLl9pc1NsaWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMudG91Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICAgIHRoaXMudG91Y2hTdGFydFggPSAwO1xuICAgICAgdGhpcy50b3VjaERlbHRhWCA9IDA7XG4gICAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQgPSB0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoU2VsZWN0b3IkMi5JTkRJQ0FUT1JTKTtcbiAgICAgIHRoaXMuX3RvdWNoU3VwcG9ydGVkID0gJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDA7XG4gICAgICB0aGlzLl9wb2ludGVyRXZlbnQgPSBCb29sZWFuKHdpbmRvdy5Qb2ludGVyRXZlbnQgfHwgd2luZG93Lk1TUG9pbnRlckV2ZW50KTtcblxuICAgICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICB9IC8vIEdldHRlcnNcblxuXG4gICAgdmFyIF9wcm90byA9IENhcm91c2VsLnByb3RvdHlwZTtcblxuICAgIC8vIFB1YmxpY1xuICAgIF9wcm90by5uZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGlmICghdGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICAgIHRoaXMuX3NsaWRlKERpcmVjdGlvbi5ORVhUKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLm5leHRXaGVuVmlzaWJsZSA9IGZ1bmN0aW9uIG5leHRXaGVuVmlzaWJsZSgpIHtcbiAgICAgIC8vIERvbid0IGNhbGwgbmV4dCB3aGVuIHRoZSBwYWdlIGlzbid0IHZpc2libGVcbiAgICAgIC8vIG9yIHRoZSBjYXJvdXNlbCBvciBpdHMgcGFyZW50IGlzbid0IHZpc2libGVcbiAgICAgIGlmICghZG9jdW1lbnQuaGlkZGVuICYmICQodGhpcy5fZWxlbWVudCkuaXMoJzp2aXNpYmxlJykgJiYgJCh0aGlzLl9lbGVtZW50KS5jc3MoJ3Zpc2liaWxpdHknKSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5wcmV2ID0gZnVuY3Rpb24gcHJldigpIHtcbiAgICAgIGlmICghdGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICAgIHRoaXMuX3NsaWRlKERpcmVjdGlvbi5QUkVWKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLnBhdXNlID0gZnVuY3Rpb24gcGF1c2UoZXZlbnQpIHtcbiAgICAgIGlmICghZXZlbnQpIHtcbiAgICAgICAgdGhpcy5faXNQYXVzZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yJDIuTkVYVF9QUkVWKSkge1xuICAgICAgICBVdGlsLnRyaWdnZXJUcmFuc2l0aW9uRW5kKHRoaXMuX2VsZW1lbnQpO1xuICAgICAgICB0aGlzLmN5Y2xlKHRydWUpO1xuICAgICAgfVxuXG4gICAgICBjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKTtcbiAgICAgIHRoaXMuX2ludGVydmFsID0gbnVsbDtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmN5Y2xlID0gZnVuY3Rpb24gY3ljbGUoZXZlbnQpIHtcbiAgICAgIGlmICghZXZlbnQpIHtcbiAgICAgICAgdGhpcy5faXNQYXVzZWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2ludGVydmFsKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWwpO1xuICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcuaW50ZXJ2YWwgJiYgIXRoaXMuX2lzUGF1c2VkKSB7XG4gICAgICAgIHRoaXMuX2ludGVydmFsID0gc2V0SW50ZXJ2YWwoKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA/IHRoaXMubmV4dFdoZW5WaXNpYmxlIDogdGhpcy5uZXh0KS5iaW5kKHRoaXMpLCB0aGlzLl9jb25maWcuaW50ZXJ2YWwpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8udG8gPSBmdW5jdGlvbiB0byhpbmRleCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdGhpcy5fYWN0aXZlRWxlbWVudCA9IHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcihTZWxlY3RvciQyLkFDVElWRV9JVEVNKTtcblxuICAgICAgdmFyIGFjdGl2ZUluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KHRoaXMuX2FjdGl2ZUVsZW1lbnQpO1xuXG4gICAgICBpZiAoaW5kZXggPiB0aGlzLl9pdGVtcy5sZW5ndGggLSAxIHx8IGluZGV4IDwgMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9pc1NsaWRpbmcpIHtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbmUoRXZlbnQkMi5TTElELCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLnRvKGluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGFjdGl2ZUluZGV4ID09PSBpbmRleCkge1xuICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICAgIHRoaXMuY3ljbGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGlyZWN0aW9uID0gaW5kZXggPiBhY3RpdmVJbmRleCA/IERpcmVjdGlvbi5ORVhUIDogRGlyZWN0aW9uLlBSRVY7XG5cbiAgICAgIHRoaXMuX3NsaWRlKGRpcmVjdGlvbiwgdGhpcy5faXRlbXNbaW5kZXhdKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgJCh0aGlzLl9lbGVtZW50KS5vZmYoRVZFTlRfS0VZJDIpO1xuICAgICAgJC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsIERBVEFfS0VZJDIpO1xuICAgICAgdGhpcy5faXRlbXMgPSBudWxsO1xuICAgICAgdGhpcy5fY29uZmlnID0gbnVsbDtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsO1xuICAgICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsO1xuICAgICAgdGhpcy5faXNQYXVzZWQgPSBudWxsO1xuICAgICAgdGhpcy5faXNTbGlkaW5nID0gbnVsbDtcbiAgICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICAgICAgdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQgPSBudWxsO1xuICAgIH0gLy8gUHJpdmF0ZVxuICAgIDtcblxuICAgIF9wcm90by5fZ2V0Q29uZmlnID0gZnVuY3Rpb24gX2dldENvbmZpZyhjb25maWcpIHtcbiAgICAgIGNvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIERlZmF1bHQsIGNvbmZpZyk7XG4gICAgICBVdGlsLnR5cGVDaGVja0NvbmZpZyhOQU1FJDIsIGNvbmZpZywgRGVmYXVsdFR5cGUpO1xuICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9oYW5kbGVTd2lwZSA9IGZ1bmN0aW9uIF9oYW5kbGVTd2lwZSgpIHtcbiAgICAgIHZhciBhYnNEZWx0YXggPSBNYXRoLmFicyh0aGlzLnRvdWNoRGVsdGFYKTtcblxuICAgICAgaWYgKGFic0RlbHRheCA8PSBTV0lQRV9USFJFU0hPTEQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGlyZWN0aW9uID0gYWJzRGVsdGF4IC8gdGhpcy50b3VjaERlbHRhWDsgLy8gc3dpcGUgbGVmdFxuXG4gICAgICBpZiAoZGlyZWN0aW9uID4gMCkge1xuICAgICAgICB0aGlzLnByZXYoKTtcbiAgICAgIH0gLy8gc3dpcGUgcmlnaHRcblxuXG4gICAgICBpZiAoZGlyZWN0aW9uIDwgMCkge1xuICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLl9hZGRFdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uIF9hZGRFdmVudExpc3RlbmVycygpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICAgICQodGhpcy5fZWxlbWVudCkub24oRXZlbnQkMi5LRVlET1dOLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLl9rZXlkb3duKGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcucGF1c2UgPT09ICdob3ZlcicpIHtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbihFdmVudCQyLk1PVVNFRU5URVIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczIucGF1c2UoZXZlbnQpO1xuICAgICAgICB9KS5vbihFdmVudCQyLk1PVVNFTEVBVkUsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczIuY3ljbGUoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2NvbmZpZy50b3VjaCkge1xuICAgICAgICB0aGlzLl9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5fYWRkVG91Y2hFdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uIF9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIGlmICghdGhpcy5fdG91Y2hTdXBwb3J0ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RhcnQgPSBmdW5jdGlvbiBzdGFydChldmVudCkge1xuICAgICAgICBpZiAoX3RoaXMzLl9wb2ludGVyRXZlbnQgJiYgUG9pbnRlclR5cGVbZXZlbnQub3JpZ2luYWxFdmVudC5wb2ludGVyVHlwZS50b1VwcGVyQ2FzZSgpXSkge1xuICAgICAgICAgIF90aGlzMy50b3VjaFN0YXJ0WCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQuY2xpZW50WDtcbiAgICAgICAgfSBlbHNlIGlmICghX3RoaXMzLl9wb2ludGVyRXZlbnQpIHtcbiAgICAgICAgICBfdGhpczMudG91Y2hTdGFydFggPSBldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdmFyIG1vdmUgPSBmdW5jdGlvbiBtb3ZlKGV2ZW50KSB7XG4gICAgICAgIC8vIGVuc3VyZSBzd2lwaW5nIHdpdGggb25lIHRvdWNoIGFuZCBub3QgcGluY2hpbmdcbiAgICAgICAgaWYgKGV2ZW50Lm9yaWdpbmFsRXZlbnQudG91Y2hlcyAmJiBldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIF90aGlzMy50b3VjaERlbHRhWCA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMzLnRvdWNoRGVsdGFYID0gZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLmNsaWVudFggLSBfdGhpczMudG91Y2hTdGFydFg7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHZhciBlbmQgPSBmdW5jdGlvbiBlbmQoZXZlbnQpIHtcbiAgICAgICAgaWYgKF90aGlzMy5fcG9pbnRlckV2ZW50ICYmIFBvaW50ZXJUeXBlW2V2ZW50Lm9yaWdpbmFsRXZlbnQucG9pbnRlclR5cGUudG9VcHBlckNhc2UoKV0pIHtcbiAgICAgICAgICBfdGhpczMudG91Y2hEZWx0YVggPSBldmVudC5vcmlnaW5hbEV2ZW50LmNsaWVudFggLSBfdGhpczMudG91Y2hTdGFydFg7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczMuX2hhbmRsZVN3aXBlKCk7XG5cbiAgICAgICAgaWYgKF90aGlzMy5fY29uZmlnLnBhdXNlID09PSAnaG92ZXInKSB7XG4gICAgICAgICAgLy8gSWYgaXQncyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlLCBtb3VzZWVudGVyL2xlYXZlIGFyZSBmaXJlZCBhc1xuICAgICAgICAgIC8vIHBhcnQgb2YgdGhlIG1vdXNlIGNvbXBhdGliaWxpdHkgZXZlbnRzIG9uIGZpcnN0IHRhcCAtIHRoZSBjYXJvdXNlbFxuICAgICAgICAgIC8vIHdvdWxkIHN0b3AgY3ljbGluZyB1bnRpbCB1c2VyIHRhcHBlZCBvdXQgb2YgaXQ7XG4gICAgICAgICAgLy8gaGVyZSwgd2UgbGlzdGVuIGZvciB0b3VjaGVuZCwgZXhwbGljaXRseSBwYXVzZSB0aGUgY2Fyb3VzZWxcbiAgICAgICAgICAvLyAoYXMgaWYgaXQncyB0aGUgc2Vjb25kIHRpbWUgd2UgdGFwIG9uIGl0LCBtb3VzZWVudGVyIGNvbXBhdCBldmVudFxuICAgICAgICAgIC8vIGlzIE5PVCBmaXJlZCkgYW5kIGFmdGVyIGEgdGltZW91dCAodG8gYWxsb3cgZm9yIG1vdXNlIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAvLyBldmVudHMgdG8gZmlyZSkgd2UgZXhwbGljaXRseSByZXN0YXJ0IGN5Y2xpbmdcbiAgICAgICAgICBfdGhpczMucGF1c2UoKTtcblxuICAgICAgICAgIGlmIChfdGhpczMudG91Y2hUaW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoX3RoaXMzLnRvdWNoVGltZW91dCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3RoaXMzLnRvdWNoVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMzLmN5Y2xlKGV2ZW50KTtcbiAgICAgICAgICB9LCBUT1VDSEVWRU5UX0NPTVBBVF9XQUlUICsgX3RoaXMzLl9jb25maWcuaW50ZXJ2YWwpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAkKHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3RvciQyLklURU1fSU1HKSkub24oRXZlbnQkMi5EUkFHX1NUQVJULCBmdW5jdGlvbiAoZSkge1xuICAgICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLl9wb2ludGVyRXZlbnQpIHtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbihFdmVudCQyLlBPSU5URVJET1dOLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gc3RhcnQoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbihFdmVudCQyLlBPSU5URVJVUCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGVuZChldmVudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDbGFzc05hbWUkMi5QT0lOVEVSX0VWRU5UKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICQodGhpcy5fZWxlbWVudCkub24oRXZlbnQkMi5UT1VDSFNUQVJULCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gc3RhcnQoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbihFdmVudCQyLlRPVUNITU9WRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIG1vdmUoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbihFdmVudCQyLlRPVUNIRU5ELCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gZW5kKGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5fa2V5ZG93biA9IGZ1bmN0aW9uIF9rZXlkb3duKGV2ZW50KSB7XG4gICAgICBpZiAoL2lucHV0fHRleHRhcmVhL2kudGVzdChldmVudC50YXJnZXQudGFnTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGV2ZW50LndoaWNoKSB7XG4gICAgICAgIGNhc2UgQVJST1dfTEVGVF9LRVlDT0RFOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5wcmV2KCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBBUlJPV19SSUdIVF9LRVlDT0RFOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLl9nZXRJdGVtSW5kZXggPSBmdW5jdGlvbiBfZ2V0SXRlbUluZGV4KGVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2l0ZW1zID0gZWxlbWVudCAmJiBlbGVtZW50LnBhcmVudE5vZGUgPyBbXS5zbGljZS5jYWxsKGVsZW1lbnQucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKFNlbGVjdG9yJDIuSVRFTSkpIDogW107XG4gICAgICByZXR1cm4gdGhpcy5faXRlbXMuaW5kZXhPZihlbGVtZW50KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9nZXRJdGVtQnlEaXJlY3Rpb24gPSBmdW5jdGlvbiBfZ2V0SXRlbUJ5RGlyZWN0aW9uKGRpcmVjdGlvbiwgYWN0aXZlRWxlbWVudCkge1xuICAgICAgdmFyIGlzTmV4dERpcmVjdGlvbiA9IGRpcmVjdGlvbiA9PT0gRGlyZWN0aW9uLk5FWFQ7XG4gICAgICB2YXIgaXNQcmV2RGlyZWN0aW9uID0gZGlyZWN0aW9uID09PSBEaXJlY3Rpb24uUFJFVjtcblxuICAgICAgdmFyIGFjdGl2ZUluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KGFjdGl2ZUVsZW1lbnQpO1xuXG4gICAgICB2YXIgbGFzdEl0ZW1JbmRleCA9IHRoaXMuX2l0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgaXNHb2luZ1RvV3JhcCA9IGlzUHJldkRpcmVjdGlvbiAmJiBhY3RpdmVJbmRleCA9PT0gMCB8fCBpc05leHREaXJlY3Rpb24gJiYgYWN0aXZlSW5kZXggPT09IGxhc3RJdGVtSW5kZXg7XG5cbiAgICAgIGlmIChpc0dvaW5nVG9XcmFwICYmICF0aGlzLl9jb25maWcud3JhcCkge1xuICAgICAgICByZXR1cm4gYWN0aXZlRWxlbWVudDtcbiAgICAgIH1cblxuICAgICAgdmFyIGRlbHRhID0gZGlyZWN0aW9uID09PSBEaXJlY3Rpb24uUFJFViA/IC0xIDogMTtcbiAgICAgIHZhciBpdGVtSW5kZXggPSAoYWN0aXZlSW5kZXggKyBkZWx0YSkgJSB0aGlzLl9pdGVtcy5sZW5ndGg7XG4gICAgICByZXR1cm4gaXRlbUluZGV4ID09PSAtMSA/IHRoaXMuX2l0ZW1zW3RoaXMuX2l0ZW1zLmxlbmd0aCAtIDFdIDogdGhpcy5faXRlbXNbaXRlbUluZGV4XTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl90cmlnZ2VyU2xpZGVFdmVudCA9IGZ1bmN0aW9uIF90cmlnZ2VyU2xpZGVFdmVudChyZWxhdGVkVGFyZ2V0LCBldmVudERpcmVjdGlvbk5hbWUpIHtcbiAgICAgIHZhciB0YXJnZXRJbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleChyZWxhdGVkVGFyZ2V0KTtcblxuICAgICAgdmFyIGZyb21JbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleCh0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoU2VsZWN0b3IkMi5BQ1RJVkVfSVRFTSkpO1xuXG4gICAgICB2YXIgc2xpZGVFdmVudCA9ICQuRXZlbnQoRXZlbnQkMi5TTElERSwge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiByZWxhdGVkVGFyZ2V0LFxuICAgICAgICBkaXJlY3Rpb246IGV2ZW50RGlyZWN0aW9uTmFtZSxcbiAgICAgICAgZnJvbTogZnJvbUluZGV4LFxuICAgICAgICB0bzogdGFyZ2V0SW5kZXhcbiAgICAgIH0pO1xuICAgICAgJCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKHNsaWRlRXZlbnQpO1xuICAgICAgcmV0dXJuIHNsaWRlRXZlbnQ7XG4gICAgfTtcblxuICAgIF9wcm90by5fc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudCA9IGZ1bmN0aW9uIF9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgIGlmICh0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCkge1xuICAgICAgICB2YXIgaW5kaWNhdG9ycyA9IFtdLnNsaWNlLmNhbGwodGhpcy5faW5kaWNhdG9yc0VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3RvciQyLkFDVElWRSkpO1xuICAgICAgICAkKGluZGljYXRvcnMpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQyLkFDVElWRSk7XG5cbiAgICAgICAgdmFyIG5leHRJbmRpY2F0b3IgPSB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudC5jaGlsZHJlblt0aGlzLl9nZXRJdGVtSW5kZXgoZWxlbWVudCldO1xuXG4gICAgICAgIGlmIChuZXh0SW5kaWNhdG9yKSB7XG4gICAgICAgICAgJChuZXh0SW5kaWNhdG9yKS5hZGRDbGFzcyhDbGFzc05hbWUkMi5BQ1RJVkUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5fc2xpZGUgPSBmdW5jdGlvbiBfc2xpZGUoZGlyZWN0aW9uLCBlbGVtZW50KSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSB0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoU2VsZWN0b3IkMi5BQ1RJVkVfSVRFTSk7XG5cbiAgICAgIHZhciBhY3RpdmVFbGVtZW50SW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgoYWN0aXZlRWxlbWVudCk7XG5cbiAgICAgIHZhciBuZXh0RWxlbWVudCA9IGVsZW1lbnQgfHwgYWN0aXZlRWxlbWVudCAmJiB0aGlzLl9nZXRJdGVtQnlEaXJlY3Rpb24oZGlyZWN0aW9uLCBhY3RpdmVFbGVtZW50KTtcblxuICAgICAgdmFyIG5leHRFbGVtZW50SW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgobmV4dEVsZW1lbnQpO1xuXG4gICAgICB2YXIgaXNDeWNsaW5nID0gQm9vbGVhbih0aGlzLl9pbnRlcnZhbCk7XG4gICAgICB2YXIgZGlyZWN0aW9uYWxDbGFzc05hbWU7XG4gICAgICB2YXIgb3JkZXJDbGFzc05hbWU7XG4gICAgICB2YXIgZXZlbnREaXJlY3Rpb25OYW1lO1xuXG4gICAgICBpZiAoZGlyZWN0aW9uID09PSBEaXJlY3Rpb24uTkVYVCkge1xuICAgICAgICBkaXJlY3Rpb25hbENsYXNzTmFtZSA9IENsYXNzTmFtZSQyLkxFRlQ7XG4gICAgICAgIG9yZGVyQ2xhc3NOYW1lID0gQ2xhc3NOYW1lJDIuTkVYVDtcbiAgICAgICAgZXZlbnREaXJlY3Rpb25OYW1lID0gRGlyZWN0aW9uLkxFRlQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXJlY3Rpb25hbENsYXNzTmFtZSA9IENsYXNzTmFtZSQyLlJJR0hUO1xuICAgICAgICBvcmRlckNsYXNzTmFtZSA9IENsYXNzTmFtZSQyLlBSRVY7XG4gICAgICAgIGV2ZW50RGlyZWN0aW9uTmFtZSA9IERpcmVjdGlvbi5SSUdIVDtcbiAgICAgIH1cblxuICAgICAgaWYgKG5leHRFbGVtZW50ICYmICQobmV4dEVsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQyLkFDVElWRSkpIHtcbiAgICAgICAgdGhpcy5faXNTbGlkaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNsaWRlRXZlbnQgPSB0aGlzLl90cmlnZ2VyU2xpZGVFdmVudChuZXh0RWxlbWVudCwgZXZlbnREaXJlY3Rpb25OYW1lKTtcblxuICAgICAgaWYgKHNsaWRlRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWFjdGl2ZUVsZW1lbnQgfHwgIW5leHRFbGVtZW50KSB7XG4gICAgICAgIC8vIFNvbWUgd2VpcmRuZXNzIGlzIGhhcHBlbmluZywgc28gd2UgYmFpbFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lzU2xpZGluZyA9IHRydWU7XG5cbiAgICAgIGlmIChpc0N5Y2xpbmcpIHtcbiAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50KG5leHRFbGVtZW50KTtcblxuICAgICAgdmFyIHNsaWRFdmVudCA9ICQuRXZlbnQoRXZlbnQkMi5TTElELCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IG5leHRFbGVtZW50LFxuICAgICAgICBkaXJlY3Rpb246IGV2ZW50RGlyZWN0aW9uTmFtZSxcbiAgICAgICAgZnJvbTogYWN0aXZlRWxlbWVudEluZGV4LFxuICAgICAgICB0bzogbmV4dEVsZW1lbnRJbmRleFxuICAgICAgfSk7XG5cbiAgICAgIGlmICgkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQyLlNMSURFKSkge1xuICAgICAgICAkKG5leHRFbGVtZW50KS5hZGRDbGFzcyhvcmRlckNsYXNzTmFtZSk7XG4gICAgICAgIFV0aWwucmVmbG93KG5leHRFbGVtZW50KTtcbiAgICAgICAgJChhY3RpdmVFbGVtZW50KS5hZGRDbGFzcyhkaXJlY3Rpb25hbENsYXNzTmFtZSk7XG4gICAgICAgICQobmV4dEVsZW1lbnQpLmFkZENsYXNzKGRpcmVjdGlvbmFsQ2xhc3NOYW1lKTtcbiAgICAgICAgdmFyIG5leHRFbGVtZW50SW50ZXJ2YWwgPSBwYXJzZUludChuZXh0RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaW50ZXJ2YWwnKSwgMTApO1xuXG4gICAgICAgIGlmIChuZXh0RWxlbWVudEludGVydmFsKSB7XG4gICAgICAgICAgdGhpcy5fY29uZmlnLmRlZmF1bHRJbnRlcnZhbCA9IHRoaXMuX2NvbmZpZy5kZWZhdWx0SW50ZXJ2YWwgfHwgdGhpcy5fY29uZmlnLmludGVydmFsO1xuICAgICAgICAgIHRoaXMuX2NvbmZpZy5pbnRlcnZhbCA9IG5leHRFbGVtZW50SW50ZXJ2YWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fY29uZmlnLmludGVydmFsID0gdGhpcy5fY29uZmlnLmRlZmF1bHRJbnRlcnZhbCB8fCB0aGlzLl9jb25maWcuaW50ZXJ2YWw7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudChhY3RpdmVFbGVtZW50KTtcbiAgICAgICAgJChhY3RpdmVFbGVtZW50KS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICQobmV4dEVsZW1lbnQpLnJlbW92ZUNsYXNzKGRpcmVjdGlvbmFsQ2xhc3NOYW1lICsgXCIgXCIgKyBvcmRlckNsYXNzTmFtZSkuYWRkQ2xhc3MoQ2xhc3NOYW1lJDIuQUNUSVZFKTtcbiAgICAgICAgICAkKGFjdGl2ZUVsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQyLkFDVElWRSArIFwiIFwiICsgb3JkZXJDbGFzc05hbWUgKyBcIiBcIiArIGRpcmVjdGlvbmFsQ2xhc3NOYW1lKTtcbiAgICAgICAgICBfdGhpczQuX2lzU2xpZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICQoX3RoaXM0Ll9lbGVtZW50KS50cmlnZ2VyKHNsaWRFdmVudCk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkKGFjdGl2ZUVsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQyLkFDVElWRSk7XG4gICAgICAgICQobmV4dEVsZW1lbnQpLmFkZENsYXNzKENsYXNzTmFtZSQyLkFDVElWRSk7XG4gICAgICAgIHRoaXMuX2lzU2xpZGluZyA9IGZhbHNlO1xuICAgICAgICAkKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoc2xpZEV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzQ3ljbGluZykge1xuICAgICAgICB0aGlzLmN5Y2xlKCk7XG4gICAgICB9XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBDYXJvdXNlbC5falF1ZXJ5SW50ZXJmYWNlID0gZnVuY3Rpb24gX2pRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YShEQVRBX0tFWSQyKTtcblxuICAgICAgICB2YXIgX2NvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIERlZmF1bHQsICQodGhpcykuZGF0YSgpKTtcblxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBfY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgX2NvbmZpZywgY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBhY3Rpb24gPSB0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJyA/IGNvbmZpZyA6IF9jb25maWcuc2xpZGU7XG5cbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IG5ldyBDYXJvdXNlbCh0aGlzLCBfY29uZmlnKTtcbiAgICAgICAgICAkKHRoaXMpLmRhdGEoREFUQV9LRVkkMiwgZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBkYXRhLnRvKGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGRhdGFbYWN0aW9uXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyBtZXRob2QgbmFtZWQgXFxcIlwiICsgYWN0aW9uICsgXCJcXFwiXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRhdGFbYWN0aW9uXSgpO1xuICAgICAgICB9IGVsc2UgaWYgKF9jb25maWcuaW50ZXJ2YWwgJiYgX2NvbmZpZy5yaWRlKSB7XG4gICAgICAgICAgZGF0YS5wYXVzZSgpO1xuICAgICAgICAgIGRhdGEuY3ljbGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIENhcm91c2VsLl9kYXRhQXBpQ2xpY2tIYW5kbGVyID0gZnVuY3Rpb24gX2RhdGFBcGlDbGlja0hhbmRsZXIoZXZlbnQpIHtcbiAgICAgIHZhciBzZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0aGlzKTtcblxuICAgICAgaWYgKCFzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciB0YXJnZXQgPSAkKHNlbGVjdG9yKVswXTtcblxuICAgICAgaWYgKCF0YXJnZXQgfHwgISQodGFyZ2V0KS5oYXNDbGFzcyhDbGFzc05hbWUkMi5DQVJPVVNFTCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgJCh0YXJnZXQpLmRhdGEoKSwgJCh0aGlzKS5kYXRhKCkpO1xuXG4gICAgICB2YXIgc2xpZGVJbmRleCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdkYXRhLXNsaWRlLXRvJyk7XG5cbiAgICAgIGlmIChzbGlkZUluZGV4KSB7XG4gICAgICAgIGNvbmZpZy5pbnRlcnZhbCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBDYXJvdXNlbC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoJCh0YXJnZXQpLCBjb25maWcpO1xuXG4gICAgICBpZiAoc2xpZGVJbmRleCkge1xuICAgICAgICAkKHRhcmdldCkuZGF0YShEQVRBX0tFWSQyKS50byhzbGlkZUluZGV4KTtcbiAgICAgIH1cblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9O1xuXG4gICAgX2NyZWF0ZUNsYXNzKENhcm91c2VsLCBudWxsLCBbe1xuICAgICAga2V5OiBcIlZFUlNJT05cIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gVkVSU0lPTiQyO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJEZWZhdWx0XCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIERlZmF1bHQ7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIENhcm91c2VsO1xuICB9KCk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJChkb2N1bWVudCkub24oRXZlbnQkMi5DTElDS19EQVRBX0FQSSwgU2VsZWN0b3IkMi5EQVRBX1NMSURFLCBDYXJvdXNlbC5fZGF0YUFwaUNsaWNrSGFuZGxlcik7XG4gICQod2luZG93KS5vbihFdmVudCQyLkxPQURfREFUQV9BUEksIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY2Fyb3VzZWxzID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFNlbGVjdG9yJDIuREFUQV9SSURFKSk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gY2Fyb3VzZWxzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB2YXIgJGNhcm91c2VsID0gJChjYXJvdXNlbHNbaV0pO1xuXG4gICAgICBDYXJvdXNlbC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoJGNhcm91c2VsLCAkY2Fyb3VzZWwuZGF0YSgpKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIGpRdWVyeVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgJC5mbltOQU1FJDJdID0gQ2Fyb3VzZWwuX2pRdWVyeUludGVyZmFjZTtcbiAgJC5mbltOQU1FJDJdLkNvbnN0cnVjdG9yID0gQ2Fyb3VzZWw7XG5cbiAgJC5mbltOQU1FJDJdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbltOQU1FJDJdID0gSlFVRVJZX05PX0NPTkZMSUNUJDI7XG4gICAgcmV0dXJuIENhcm91c2VsLl9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBDb25zdGFudHNcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBOQU1FJDMgPSAnY29sbGFwc2UnO1xuICB2YXIgVkVSU0lPTiQzID0gJzQuMy4xJztcbiAgdmFyIERBVEFfS0VZJDMgPSAnYnMuY29sbGFwc2UnO1xuICB2YXIgRVZFTlRfS0VZJDMgPSBcIi5cIiArIERBVEFfS0VZJDM7XG4gIHZhciBEQVRBX0FQSV9LRVkkMyA9ICcuZGF0YS1hcGknO1xuICB2YXIgSlFVRVJZX05PX0NPTkZMSUNUJDMgPSAkLmZuW05BTUUkM107XG4gIHZhciBEZWZhdWx0JDEgPSB7XG4gICAgdG9nZ2xlOiB0cnVlLFxuICAgIHBhcmVudDogJydcbiAgfTtcbiAgdmFyIERlZmF1bHRUeXBlJDEgPSB7XG4gICAgdG9nZ2xlOiAnYm9vbGVhbicsXG4gICAgcGFyZW50OiAnKHN0cmluZ3xlbGVtZW50KSdcbiAgfTtcbiAgdmFyIEV2ZW50JDMgPSB7XG4gICAgU0hPVzogXCJzaG93XCIgKyBFVkVOVF9LRVkkMyxcbiAgICBTSE9XTjogXCJzaG93blwiICsgRVZFTlRfS0VZJDMsXG4gICAgSElERTogXCJoaWRlXCIgKyBFVkVOVF9LRVkkMyxcbiAgICBISURERU46IFwiaGlkZGVuXCIgKyBFVkVOVF9LRVkkMyxcbiAgICBDTElDS19EQVRBX0FQSTogXCJjbGlja1wiICsgRVZFTlRfS0VZJDMgKyBEQVRBX0FQSV9LRVkkM1xuICB9O1xuICB2YXIgQ2xhc3NOYW1lJDMgPSB7XG4gICAgU0hPVzogJ3Nob3cnLFxuICAgIENPTExBUFNFOiAnY29sbGFwc2UnLFxuICAgIENPTExBUFNJTkc6ICdjb2xsYXBzaW5nJyxcbiAgICBDT0xMQVBTRUQ6ICdjb2xsYXBzZWQnXG4gIH07XG4gIHZhciBEaW1lbnNpb24gPSB7XG4gICAgV0lEVEg6ICd3aWR0aCcsXG4gICAgSEVJR0hUOiAnaGVpZ2h0J1xuICB9O1xuICB2YXIgU2VsZWN0b3IkMyA9IHtcbiAgICBBQ1RJVkVTOiAnLnNob3csIC5jb2xsYXBzaW5nJyxcbiAgICBEQVRBX1RPR0dMRTogJ1tkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJdJ1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIENsYXNzIERlZmluaXRpb25cbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuICB9O1xuXG4gIHZhciBDb2xsYXBzZSA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbGxhcHNlKGVsZW1lbnQsIGNvbmZpZykge1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgICAgdGhpcy5fdHJpZ2dlckFycmF5ID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtdG9nZ2xlPVxcXCJjb2xsYXBzZVxcXCJdW2hyZWY9XFxcIiNcIiArIGVsZW1lbnQuaWQgKyBcIlxcXCJdLFwiICsgKFwiW2RhdGEtdG9nZ2xlPVxcXCJjb2xsYXBzZVxcXCJdW2RhdGEtdGFyZ2V0PVxcXCIjXCIgKyBlbGVtZW50LmlkICsgXCJcXFwiXVwiKSkpO1xuICAgICAgdmFyIHRvZ2dsZUxpc3QgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IkMy5EQVRBX1RPR0dMRSkpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdG9nZ2xlTGlzdC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICB2YXIgZWxlbSA9IHRvZ2dsZUxpc3RbaV07XG4gICAgICAgIHZhciBzZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtKTtcbiAgICAgICAgdmFyIGZpbHRlckVsZW1lbnQgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKS5maWx0ZXIoZnVuY3Rpb24gKGZvdW5kRWxlbSkge1xuICAgICAgICAgIHJldHVybiBmb3VuZEVsZW0gPT09IGVsZW1lbnQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChzZWxlY3RvciAhPT0gbnVsbCAmJiBmaWx0ZXJFbGVtZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3RvciA9IHNlbGVjdG9yO1xuXG4gICAgICAgICAgdGhpcy5fdHJpZ2dlckFycmF5LnB1c2goZWxlbSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fcGFyZW50ID0gdGhpcy5fY29uZmlnLnBhcmVudCA/IHRoaXMuX2dldFBhcmVudCgpIDogbnVsbDtcblxuICAgICAgaWYgKCF0aGlzLl9jb25maWcucGFyZW50KSB7XG4gICAgICAgIHRoaXMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0aGlzLl9lbGVtZW50LCB0aGlzLl90cmlnZ2VyQXJyYXkpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fY29uZmlnLnRvZ2dsZSkge1xuICAgICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgICAgfVxuICAgIH0gLy8gR2V0dGVyc1xuXG5cbiAgICB2YXIgX3Byb3RvID0gQ29sbGFwc2UucHJvdG90eXBlO1xuXG4gICAgLy8gUHVibGljXG4gICAgX3Byb3RvLnRvZ2dsZSA9IGZ1bmN0aW9uIHRvZ2dsZSgpIHtcbiAgICAgIGlmICgkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQzLlNIT1cpKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5zaG93ID0gZnVuY3Rpb24gc2hvdygpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLl9pc1RyYW5zaXRpb25pbmcgfHwgJCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUkMy5TSE9XKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBhY3RpdmVzO1xuICAgICAgdmFyIGFjdGl2ZXNEYXRhO1xuXG4gICAgICBpZiAodGhpcy5fcGFyZW50KSB7XG4gICAgICAgIGFjdGl2ZXMgPSBbXS5zbGljZS5jYWxsKHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFNlbGVjdG9yJDMuQUNUSVZFUykpLmZpbHRlcihmdW5jdGlvbiAoZWxlbSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgX3RoaXMuX2NvbmZpZy5wYXJlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGFyZW50JykgPT09IF90aGlzLl9jb25maWcucGFyZW50O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBlbGVtLmNsYXNzTGlzdC5jb250YWlucyhDbGFzc05hbWUkMy5DT0xMQVBTRSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChhY3RpdmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGFjdGl2ZXMgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhY3RpdmVzKSB7XG4gICAgICAgIGFjdGl2ZXNEYXRhID0gJChhY3RpdmVzKS5ub3QodGhpcy5fc2VsZWN0b3IpLmRhdGEoREFUQV9LRVkkMyk7XG5cbiAgICAgICAgaWYgKGFjdGl2ZXNEYXRhICYmIGFjdGl2ZXNEYXRhLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHN0YXJ0RXZlbnQgPSAkLkV2ZW50KEV2ZW50JDMuU0hPVyk7XG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoc3RhcnRFdmVudCk7XG5cbiAgICAgIGlmIChzdGFydEV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGFjdGl2ZXMpIHtcbiAgICAgICAgQ29sbGFwc2UuX2pRdWVyeUludGVyZmFjZS5jYWxsKCQoYWN0aXZlcykubm90KHRoaXMuX3NlbGVjdG9yKSwgJ2hpZGUnKTtcblxuICAgICAgICBpZiAoIWFjdGl2ZXNEYXRhKSB7XG4gICAgICAgICAgJChhY3RpdmVzKS5kYXRhKERBVEFfS0VZJDMsIG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBkaW1lbnNpb24gPSB0aGlzLl9nZXREaW1lbnNpb24oKTtcblxuICAgICAgJCh0aGlzLl9lbGVtZW50KS5yZW1vdmVDbGFzcyhDbGFzc05hbWUkMy5DT0xMQVBTRSkuYWRkQ2xhc3MoQ2xhc3NOYW1lJDMuQ09MTEFQU0lORyk7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSAwO1xuXG4gICAgICBpZiAodGhpcy5fdHJpZ2dlckFycmF5Lmxlbmd0aCkge1xuICAgICAgICAkKHRoaXMuX3RyaWdnZXJBcnJheSkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lJDMuQ09MTEFQU0VEKS5hdHRyKCdhcmlhLWV4cGFuZGVkJywgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0VHJhbnNpdGlvbmluZyh0cnVlKTtcblxuICAgICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24gY29tcGxldGUoKSB7XG4gICAgICAgICQoX3RoaXMuX2VsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQzLkNPTExBUFNJTkcpLmFkZENsYXNzKENsYXNzTmFtZSQzLkNPTExBUFNFKS5hZGRDbGFzcyhDbGFzc05hbWUkMy5TSE9XKTtcbiAgICAgICAgX3RoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9ICcnO1xuXG4gICAgICAgIF90aGlzLnNldFRyYW5zaXRpb25pbmcoZmFsc2UpO1xuXG4gICAgICAgICQoX3RoaXMuX2VsZW1lbnQpLnRyaWdnZXIoRXZlbnQkMy5TSE9XTik7XG4gICAgICB9O1xuXG4gICAgICB2YXIgY2FwaXRhbGl6ZWREaW1lbnNpb24gPSBkaW1lbnNpb25bMF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSgxKTtcbiAgICAgIHZhciBzY3JvbGxTaXplID0gXCJzY3JvbGxcIiArIGNhcGl0YWxpemVkRGltZW5zaW9uO1xuICAgICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7XG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCBjb21wbGV0ZSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9IHRoaXMuX2VsZW1lbnRbc2Nyb2xsU2l6ZV0gKyBcInB4XCI7XG4gICAgfTtcblxuICAgIF9wcm90by5oaWRlID0gZnVuY3Rpb24gaGlkZSgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5faXNUcmFuc2l0aW9uaW5nIHx8ICEkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQzLlNIT1cpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0YXJ0RXZlbnQgPSAkLkV2ZW50KEV2ZW50JDMuSElERSk7XG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoc3RhcnRFdmVudCk7XG5cbiAgICAgIGlmIChzdGFydEV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGRpbWVuc2lvbiA9IHRoaXMuX2dldERpbWVuc2lvbigpO1xuXG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSB0aGlzLl9lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2RpbWVuc2lvbl0gKyBcInB4XCI7XG4gICAgICBVdGlsLnJlZmxvdyh0aGlzLl9lbGVtZW50KTtcbiAgICAgICQodGhpcy5fZWxlbWVudCkuYWRkQ2xhc3MoQ2xhc3NOYW1lJDMuQ09MTEFQU0lORykucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lJDMuQ09MTEFQU0UpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQzLlNIT1cpO1xuICAgICAgdmFyIHRyaWdnZXJBcnJheUxlbmd0aCA9IHRoaXMuX3RyaWdnZXJBcnJheS5sZW5ndGg7XG5cbiAgICAgIGlmICh0cmlnZ2VyQXJyYXlMZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJpZ2dlckFycmF5TGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgdHJpZ2dlciA9IHRoaXMuX3RyaWdnZXJBcnJheVtpXTtcbiAgICAgICAgICB2YXIgc2VsZWN0b3IgPSBVdGlsLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodHJpZ2dlcik7XG5cbiAgICAgICAgICBpZiAoc2VsZWN0b3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciAkZWxlbSA9ICQoW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkpO1xuXG4gICAgICAgICAgICBpZiAoISRlbGVtLmhhc0NsYXNzKENsYXNzTmFtZSQzLlNIT1cpKSB7XG4gICAgICAgICAgICAgICQodHJpZ2dlcikuYWRkQ2xhc3MoQ2xhc3NOYW1lJDMuQ09MTEFQU0VEKS5hdHRyKCdhcmlhLWV4cGFuZGVkJywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFRyYW5zaXRpb25pbmcodHJ1ZSk7XG5cbiAgICAgIHZhciBjb21wbGV0ZSA9IGZ1bmN0aW9uIGNvbXBsZXRlKCkge1xuICAgICAgICBfdGhpczIuc2V0VHJhbnNpdGlvbmluZyhmYWxzZSk7XG5cbiAgICAgICAgJChfdGhpczIuX2VsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQzLkNPTExBUFNJTkcpLmFkZENsYXNzKENsYXNzTmFtZSQzLkNPTExBUFNFKS50cmlnZ2VyKEV2ZW50JDMuSElEREVOKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9ICcnO1xuICAgICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7XG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCBjb21wbGV0ZSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLnNldFRyYW5zaXRpb25pbmcgPSBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uaW5nKGlzVHJhbnNpdGlvbmluZykge1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gaXNUcmFuc2l0aW9uaW5nO1xuICAgIH07XG5cbiAgICBfcHJvdG8uZGlzcG9zZSA9IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgICAkLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwgREFUQV9LRVkkMyk7XG4gICAgICB0aGlzLl9jb25maWcgPSBudWxsO1xuICAgICAgdGhpcy5fcGFyZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsO1xuICAgICAgdGhpcy5fdHJpZ2dlckFycmF5ID0gbnVsbDtcbiAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IG51bGw7XG4gICAgfSAvLyBQcml2YXRlXG4gICAgO1xuXG4gICAgX3Byb3RvLl9nZXRDb25maWcgPSBmdW5jdGlvbiBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgICAgY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgRGVmYXVsdCQxLCBjb25maWcpO1xuICAgICAgY29uZmlnLnRvZ2dsZSA9IEJvb2xlYW4oY29uZmlnLnRvZ2dsZSk7IC8vIENvZXJjZSBzdHJpbmcgdmFsdWVzXG5cbiAgICAgIFV0aWwudHlwZUNoZWNrQ29uZmlnKE5BTUUkMywgY29uZmlnLCBEZWZhdWx0VHlwZSQxKTtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0RGltZW5zaW9uID0gZnVuY3Rpb24gX2dldERpbWVuc2lvbigpIHtcbiAgICAgIHZhciBoYXNXaWR0aCA9ICQodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoRGltZW5zaW9uLldJRFRIKTtcbiAgICAgIHJldHVybiBoYXNXaWR0aCA/IERpbWVuc2lvbi5XSURUSCA6IERpbWVuc2lvbi5IRUlHSFQ7XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0UGFyZW50ID0gZnVuY3Rpb24gX2dldFBhcmVudCgpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgcGFyZW50O1xuXG4gICAgICBpZiAoVXRpbC5pc0VsZW1lbnQodGhpcy5fY29uZmlnLnBhcmVudCkpIHtcbiAgICAgICAgcGFyZW50ID0gdGhpcy5fY29uZmlnLnBhcmVudDsgLy8gSXQncyBhIGpRdWVyeSBvYmplY3RcblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX2NvbmZpZy5wYXJlbnQuanF1ZXJ5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHBhcmVudCA9IHRoaXMuX2NvbmZpZy5wYXJlbnRbMF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5fY29uZmlnLnBhcmVudCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzZWxlY3RvciA9IFwiW2RhdGEtdG9nZ2xlPVxcXCJjb2xsYXBzZVxcXCJdW2RhdGEtcGFyZW50PVxcXCJcIiArIHRoaXMuX2NvbmZpZy5wYXJlbnQgKyBcIlxcXCJdXCI7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBbXS5zbGljZS5jYWxsKHBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSk7XG4gICAgICAkKGNoaWxkcmVuKS5lYWNoKGZ1bmN0aW9uIChpLCBlbGVtZW50KSB7XG4gICAgICAgIF90aGlzMy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKENvbGxhcHNlLl9nZXRUYXJnZXRGcm9tRWxlbWVudChlbGVtZW50KSwgW2VsZW1lbnRdKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MgPSBmdW5jdGlvbiBfYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKGVsZW1lbnQsIHRyaWdnZXJBcnJheSkge1xuICAgICAgdmFyIGlzT3BlbiA9ICQoZWxlbWVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1lJDMuU0hPVyk7XG5cbiAgICAgIGlmICh0cmlnZ2VyQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICQodHJpZ2dlckFycmF5KS50b2dnbGVDbGFzcyhDbGFzc05hbWUkMy5DT0xMQVBTRUQsICFpc09wZW4pLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCBpc09wZW4pO1xuICAgICAgfVxuICAgIH0gLy8gU3RhdGljXG4gICAgO1xuXG4gICAgQ29sbGFwc2UuX2dldFRhcmdldEZyb21FbGVtZW50ID0gZnVuY3Rpb24gX2dldFRhcmdldEZyb21FbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgIHZhciBzZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtZW50KTtcbiAgICAgIHJldHVybiBzZWxlY3RvciA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpIDogbnVsbDtcbiAgICB9O1xuXG4gICAgQ29sbGFwc2UuX2pRdWVyeUludGVyZmFjZSA9IGZ1bmN0aW9uIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTtcbiAgICAgICAgdmFyIGRhdGEgPSAkdGhpcy5kYXRhKERBVEFfS0VZJDMpO1xuXG4gICAgICAgIHZhciBfY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgRGVmYXVsdCQxLCAkdGhpcy5kYXRhKCksIHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZyA/IGNvbmZpZyA6IHt9KTtcblxuICAgICAgICBpZiAoIWRhdGEgJiYgX2NvbmZpZy50b2dnbGUgJiYgL3Nob3d8aGlkZS8udGVzdChjb25maWcpKSB7XG4gICAgICAgICAgX2NvbmZpZy50b2dnbGUgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgIGRhdGEgPSBuZXcgQ29sbGFwc2UodGhpcywgX2NvbmZpZyk7XG4gICAgICAgICAgJHRoaXMuZGF0YShEQVRBX0tFWSQzLCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIG1ldGhvZCBuYW1lZCBcXFwiXCIgKyBjb25maWcgKyBcIlxcXCJcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBfY3JlYXRlQ2xhc3MoQ29sbGFwc2UsIG51bGwsIFt7XG4gICAgICBrZXk6IFwiVkVSU0lPTlwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBWRVJTSU9OJDM7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkRlZmF1bHRcIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gRGVmYXVsdCQxO1xuICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBDb2xsYXBzZTtcbiAgfSgpO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuXG4gICQoZG9jdW1lbnQpLm9uKEV2ZW50JDMuQ0xJQ0tfREFUQV9BUEksIFNlbGVjdG9yJDMuREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIC8vIHByZXZlbnREZWZhdWx0IG9ubHkgZm9yIDxhPiBlbGVtZW50cyAod2hpY2ggY2hhbmdlIHRoZSBVUkwpIG5vdCBpbnNpZGUgdGhlIGNvbGxhcHNpYmxlIGVsZW1lbnRcbiAgICBpZiAoZXZlbnQuY3VycmVudFRhcmdldC50YWdOYW1lID09PSAnQScpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyICR0cmlnZ2VyID0gJCh0aGlzKTtcbiAgICB2YXIgc2VsZWN0b3IgPSBVdGlsLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodGhpcyk7XG4gICAgdmFyIHNlbGVjdG9ycyA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikpO1xuICAgICQoc2VsZWN0b3JzKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkdGFyZ2V0ID0gJCh0aGlzKTtcbiAgICAgIHZhciBkYXRhID0gJHRhcmdldC5kYXRhKERBVEFfS0VZJDMpO1xuICAgICAgdmFyIGNvbmZpZyA9IGRhdGEgPyAndG9nZ2xlJyA6ICR0cmlnZ2VyLmRhdGEoKTtcblxuICAgICAgQ29sbGFwc2UuX2pRdWVyeUludGVyZmFjZS5jYWxsKCR0YXJnZXQsIGNvbmZpZyk7XG4gICAgfSk7XG4gIH0pO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIGpRdWVyeVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgJC5mbltOQU1FJDNdID0gQ29sbGFwc2UuX2pRdWVyeUludGVyZmFjZTtcbiAgJC5mbltOQU1FJDNdLkNvbnN0cnVjdG9yID0gQ29sbGFwc2U7XG5cbiAgJC5mbltOQU1FJDNdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbltOQU1FJDNdID0gSlFVRVJZX05PX0NPTkZMSUNUJDM7XG4gICAgcmV0dXJuIENvbGxhcHNlLl9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBDb25zdGFudHNcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBOQU1FJDQgPSAnZHJvcGRvd24nO1xuICB2YXIgVkVSU0lPTiQ0ID0gJzQuMy4xJztcbiAgdmFyIERBVEFfS0VZJDQgPSAnYnMuZHJvcGRvd24nO1xuICB2YXIgRVZFTlRfS0VZJDQgPSBcIi5cIiArIERBVEFfS0VZJDQ7XG4gIHZhciBEQVRBX0FQSV9LRVkkNCA9ICcuZGF0YS1hcGknO1xuICB2YXIgSlFVRVJZX05PX0NPTkZMSUNUJDQgPSAkLmZuW05BTUUkNF07XG4gIHZhciBFU0NBUEVfS0VZQ09ERSA9IDI3OyAvLyBLZXlib2FyZEV2ZW50LndoaWNoIHZhbHVlIGZvciBFc2NhcGUgKEVzYykga2V5XG5cbiAgdmFyIFNQQUNFX0tFWUNPREUgPSAzMjsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3Igc3BhY2Uga2V5XG5cbiAgdmFyIFRBQl9LRVlDT0RFID0gOTsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3IgdGFiIGtleVxuXG4gIHZhciBBUlJPV19VUF9LRVlDT0RFID0gMzg7IC8vIEtleWJvYXJkRXZlbnQud2hpY2ggdmFsdWUgZm9yIHVwIGFycm93IGtleVxuXG4gIHZhciBBUlJPV19ET1dOX0tFWUNPREUgPSA0MDsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3IgZG93biBhcnJvdyBrZXlcblxuICB2YXIgUklHSFRfTU9VU0VfQlVUVE9OX1dISUNIID0gMzsgLy8gTW91c2VFdmVudC53aGljaCB2YWx1ZSBmb3IgdGhlIHJpZ2h0IGJ1dHRvbiAoYXNzdW1pbmcgYSByaWdodC1oYW5kZWQgbW91c2UpXG5cbiAgdmFyIFJFR0VYUF9LRVlET1dOID0gbmV3IFJlZ0V4cChBUlJPV19VUF9LRVlDT0RFICsgXCJ8XCIgKyBBUlJPV19ET1dOX0tFWUNPREUgKyBcInxcIiArIEVTQ0FQRV9LRVlDT0RFKTtcbiAgdmFyIEV2ZW50JDQgPSB7XG4gICAgSElERTogXCJoaWRlXCIgKyBFVkVOVF9LRVkkNCxcbiAgICBISURERU46IFwiaGlkZGVuXCIgKyBFVkVOVF9LRVkkNCxcbiAgICBTSE9XOiBcInNob3dcIiArIEVWRU5UX0tFWSQ0LFxuICAgIFNIT1dOOiBcInNob3duXCIgKyBFVkVOVF9LRVkkNCxcbiAgICBDTElDSzogXCJjbGlja1wiICsgRVZFTlRfS0VZJDQsXG4gICAgQ0xJQ0tfREFUQV9BUEk6IFwiY2xpY2tcIiArIEVWRU5UX0tFWSQ0ICsgREFUQV9BUElfS0VZJDQsXG4gICAgS0VZRE9XTl9EQVRBX0FQSTogXCJrZXlkb3duXCIgKyBFVkVOVF9LRVkkNCArIERBVEFfQVBJX0tFWSQ0LFxuICAgIEtFWVVQX0RBVEFfQVBJOiBcImtleXVwXCIgKyBFVkVOVF9LRVkkNCArIERBVEFfQVBJX0tFWSQ0XG4gIH07XG4gIHZhciBDbGFzc05hbWUkNCA9IHtcbiAgICBESVNBQkxFRDogJ2Rpc2FibGVkJyxcbiAgICBTSE9XOiAnc2hvdycsXG4gICAgRFJPUFVQOiAnZHJvcHVwJyxcbiAgICBEUk9QUklHSFQ6ICdkcm9wcmlnaHQnLFxuICAgIERST1BMRUZUOiAnZHJvcGxlZnQnLFxuICAgIE1FTlVSSUdIVDogJ2Ryb3Bkb3duLW1lbnUtcmlnaHQnLFxuICAgIE1FTlVMRUZUOiAnZHJvcGRvd24tbWVudS1sZWZ0JyxcbiAgICBQT1NJVElPTl9TVEFUSUM6ICdwb3NpdGlvbi1zdGF0aWMnXG4gIH07XG4gIHZhciBTZWxlY3RvciQ0ID0ge1xuICAgIERBVEFfVE9HR0xFOiAnW2RhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIl0nLFxuICAgIEZPUk1fQ0hJTEQ6ICcuZHJvcGRvd24gZm9ybScsXG4gICAgTUVOVTogJy5kcm9wZG93bi1tZW51JyxcbiAgICBOQVZCQVJfTkFWOiAnLm5hdmJhci1uYXYnLFxuICAgIFZJU0lCTEVfSVRFTVM6ICcuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbTpub3QoLmRpc2FibGVkKTpub3QoOmRpc2FibGVkKSdcbiAgfTtcbiAgdmFyIEF0dGFjaG1lbnRNYXAgPSB7XG4gICAgVE9QOiAndG9wLXN0YXJ0JyxcbiAgICBUT1BFTkQ6ICd0b3AtZW5kJyxcbiAgICBCT1RUT006ICdib3R0b20tc3RhcnQnLFxuICAgIEJPVFRPTUVORDogJ2JvdHRvbS1lbmQnLFxuICAgIFJJR0hUOiAncmlnaHQtc3RhcnQnLFxuICAgIFJJR0hURU5EOiAncmlnaHQtZW5kJyxcbiAgICBMRUZUOiAnbGVmdC1zdGFydCcsXG4gICAgTEVGVEVORDogJ2xlZnQtZW5kJ1xuICB9O1xuICB2YXIgRGVmYXVsdCQyID0ge1xuICAgIG9mZnNldDogMCxcbiAgICBmbGlwOiB0cnVlLFxuICAgIGJvdW5kYXJ5OiAnc2Nyb2xsUGFyZW50JyxcbiAgICByZWZlcmVuY2U6ICd0b2dnbGUnLFxuICAgIGRpc3BsYXk6ICdkeW5hbWljJ1xuICB9O1xuICB2YXIgRGVmYXVsdFR5cGUkMiA9IHtcbiAgICBvZmZzZXQ6ICcobnVtYmVyfHN0cmluZ3xmdW5jdGlvbiknLFxuICAgIGZsaXA6ICdib29sZWFuJyxcbiAgICBib3VuZGFyeTogJyhzdHJpbmd8ZWxlbWVudCknLFxuICAgIHJlZmVyZW5jZTogJyhzdHJpbmd8ZWxlbWVudCknLFxuICAgIGRpc3BsYXk6ICdzdHJpbmcnXG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG4gIH07XG5cbiAgdmFyIERyb3Bkb3duID1cbiAgLyojX19QVVJFX18qL1xuICBmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRHJvcGRvd24oZWxlbWVudCwgY29uZmlnKSB7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgIHRoaXMuX3BvcHBlciA9IG51bGw7XG4gICAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICAgIHRoaXMuX21lbnUgPSB0aGlzLl9nZXRNZW51RWxlbWVudCgpO1xuICAgICAgdGhpcy5faW5OYXZiYXIgPSB0aGlzLl9kZXRlY3ROYXZiYXIoKTtcblxuICAgICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICB9IC8vIEdldHRlcnNcblxuXG4gICAgdmFyIF9wcm90byA9IERyb3Bkb3duLnByb3RvdHlwZTtcblxuICAgIC8vIFB1YmxpY1xuICAgIF9wcm90by50b2dnbGUgPSBmdW5jdGlvbiB0b2dnbGUoKSB7XG4gICAgICBpZiAodGhpcy5fZWxlbWVudC5kaXNhYmxlZCB8fCAkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQ0LkRJU0FCTEVEKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBwYXJlbnQgPSBEcm9wZG93bi5fZ2V0UGFyZW50RnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7XG5cbiAgICAgIHZhciBpc0FjdGl2ZSA9ICQodGhpcy5fbWVudSkuaGFzQ2xhc3MoQ2xhc3NOYW1lJDQuU0hPVyk7XG5cbiAgICAgIERyb3Bkb3duLl9jbGVhck1lbnVzKCk7XG5cbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiB0aGlzLl9lbGVtZW50XG4gICAgICB9O1xuICAgICAgdmFyIHNob3dFdmVudCA9ICQuRXZlbnQoRXZlbnQkNC5TSE9XLCByZWxhdGVkVGFyZ2V0KTtcbiAgICAgICQocGFyZW50KS50cmlnZ2VyKHNob3dFdmVudCk7XG5cbiAgICAgIGlmIChzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBEaXNhYmxlIHRvdGFsbHkgUG9wcGVyLmpzIGZvciBEcm9wZG93biBpbiBOYXZiYXJcblxuXG4gICAgICBpZiAoIXRoaXMuX2luTmF2YmFyKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDaGVjayBmb3IgUG9wcGVyIGRlcGVuZGVuY3lcbiAgICAgICAgICogUG9wcGVyIC0gaHR0cHM6Ly9wb3BwZXIuanMub3JnXG4gICAgICAgICAqL1xuICAgICAgICBpZiAodHlwZW9mIFBvcHBlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb290c3RyYXBcXCdzIGRyb3Bkb3ducyByZXF1aXJlIFBvcHBlci5qcyAoaHR0cHM6Ly9wb3BwZXIuanMub3JnLyknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fZWxlbWVudDtcblxuICAgICAgICBpZiAodGhpcy5fY29uZmlnLnJlZmVyZW5jZSA9PT0gJ3BhcmVudCcpIHtcbiAgICAgICAgICByZWZlcmVuY2VFbGVtZW50ID0gcGFyZW50O1xuICAgICAgICB9IGVsc2UgaWYgKFV0aWwuaXNFbGVtZW50KHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UpKSB7XG4gICAgICAgICAgcmVmZXJlbmNlRWxlbWVudCA9IHRoaXMuX2NvbmZpZy5yZWZlcmVuY2U7IC8vIENoZWNrIGlmIGl0J3MgalF1ZXJ5IGVsZW1lbnRcblxuICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fY29uZmlnLnJlZmVyZW5jZS5qcXVlcnkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fY29uZmlnLnJlZmVyZW5jZVswXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gSWYgYm91bmRhcnkgaXMgbm90IGBzY3JvbGxQYXJlbnRgLCB0aGVuIHNldCBwb3NpdGlvbiB0byBgc3RhdGljYFxuICAgICAgICAvLyB0byBhbGxvdyB0aGUgbWVudSB0byBcImVzY2FwZVwiIHRoZSBzY3JvbGwgcGFyZW50J3MgYm91bmRhcmllc1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzI0MjUxXG5cblxuICAgICAgICBpZiAodGhpcy5fY29uZmlnLmJvdW5kYXJ5ICE9PSAnc2Nyb2xsUGFyZW50Jykge1xuICAgICAgICAgICQocGFyZW50KS5hZGRDbGFzcyhDbGFzc05hbWUkNC5QT1NJVElPTl9TVEFUSUMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcG9wcGVyID0gbmV3IFBvcHBlcihyZWZlcmVuY2VFbGVtZW50LCB0aGlzLl9tZW51LCB0aGlzLl9nZXRQb3BwZXJDb25maWcoKSk7XG4gICAgICB9IC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSBhZGQgZXh0cmFcbiAgICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgdG8gdGhlIGJvZHkncyBpbW1lZGlhdGUgY2hpbGRyZW47XG4gICAgICAvLyBvbmx5IG5lZWRlZCBiZWNhdXNlIG9mIGJyb2tlbiBldmVudCBkZWxlZ2F0aW9uIG9uIGlPU1xuICAgICAgLy8gaHR0cHM6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDE0LzAyL21vdXNlX2V2ZW50X2J1Yi5odG1sXG5cblxuICAgICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiAkKHBhcmVudCkuY2xvc2VzdChTZWxlY3RvciQ0Lk5BVkJBUl9OQVYpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAkKGRvY3VtZW50LmJvZHkpLmNoaWxkcmVuKCkub24oJ21vdXNlb3ZlcicsIG51bGwsICQubm9vcCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuZm9jdXMoKTtcblxuICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCB0cnVlKTtcblxuICAgICAgJCh0aGlzLl9tZW51KS50b2dnbGVDbGFzcyhDbGFzc05hbWUkNC5TSE9XKTtcbiAgICAgICQocGFyZW50KS50b2dnbGVDbGFzcyhDbGFzc05hbWUkNC5TSE9XKS50cmlnZ2VyKCQuRXZlbnQoRXZlbnQkNC5TSE9XTiwgcmVsYXRlZFRhcmdldCkpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uc2hvdyA9IGZ1bmN0aW9uIHNob3coKSB7XG4gICAgICBpZiAodGhpcy5fZWxlbWVudC5kaXNhYmxlZCB8fCAkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQ0LkRJU0FCTEVEKSB8fCAkKHRoaXMuX21lbnUpLmhhc0NsYXNzKENsYXNzTmFtZSQ0LlNIT1cpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlbGF0ZWRUYXJnZXQgPSB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRoaXMuX2VsZW1lbnRcbiAgICAgIH07XG4gICAgICB2YXIgc2hvd0V2ZW50ID0gJC5FdmVudChFdmVudCQ0LlNIT1csIHJlbGF0ZWRUYXJnZXQpO1xuXG4gICAgICB2YXIgcGFyZW50ID0gRHJvcGRvd24uX2dldFBhcmVudEZyb21FbGVtZW50KHRoaXMuX2VsZW1lbnQpO1xuXG4gICAgICAkKHBhcmVudCkudHJpZ2dlcihzaG93RXZlbnQpO1xuXG4gICAgICBpZiAoc2hvd0V2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgJCh0aGlzLl9tZW51KS50b2dnbGVDbGFzcyhDbGFzc05hbWUkNC5TSE9XKTtcbiAgICAgICQocGFyZW50KS50b2dnbGVDbGFzcyhDbGFzc05hbWUkNC5TSE9XKS50cmlnZ2VyKCQuRXZlbnQoRXZlbnQkNC5TSE9XTiwgcmVsYXRlZFRhcmdldCkpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uaGlkZSA9IGZ1bmN0aW9uIGhpZGUoKSB7XG4gICAgICBpZiAodGhpcy5fZWxlbWVudC5kaXNhYmxlZCB8fCAkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQ0LkRJU0FCTEVEKSB8fCAhJCh0aGlzLl9tZW51KS5oYXNDbGFzcyhDbGFzc05hbWUkNC5TSE9XKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiB0aGlzLl9lbGVtZW50XG4gICAgICB9O1xuICAgICAgdmFyIGhpZGVFdmVudCA9ICQuRXZlbnQoRXZlbnQkNC5ISURFLCByZWxhdGVkVGFyZ2V0KTtcblxuICAgICAgdmFyIHBhcmVudCA9IERyb3Bkb3duLl9nZXRQYXJlbnRGcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcblxuICAgICAgJChwYXJlbnQpLnRyaWdnZXIoaGlkZUV2ZW50KTtcblxuICAgICAgaWYgKGhpZGVFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgICQodGhpcy5fbWVudSkudG9nZ2xlQ2xhc3MoQ2xhc3NOYW1lJDQuU0hPVyk7XG4gICAgICAkKHBhcmVudCkudG9nZ2xlQ2xhc3MoQ2xhc3NOYW1lJDQuU0hPVykudHJpZ2dlcigkLkV2ZW50KEV2ZW50JDQuSElEREVOLCByZWxhdGVkVGFyZ2V0KSk7XG4gICAgfTtcblxuICAgIF9wcm90by5kaXNwb3NlID0gZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICAgICQucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LCBEQVRBX0tFWSQ0KTtcbiAgICAgICQodGhpcy5fZWxlbWVudCkub2ZmKEVWRU5UX0tFWSQ0KTtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsO1xuICAgICAgdGhpcy5fbWVudSA9IG51bGw7XG5cbiAgICAgIGlmICh0aGlzLl9wb3BwZXIgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5fcG9wcGVyLmRlc3Ryb3koKTtcblxuICAgICAgICB0aGlzLl9wb3BwZXIgPSBudWxsO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8udXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgICAgdGhpcy5faW5OYXZiYXIgPSB0aGlzLl9kZXRlY3ROYXZiYXIoKTtcblxuICAgICAgaWYgKHRoaXMuX3BvcHBlciAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9wb3BwZXIuc2NoZWR1bGVVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9IC8vIFByaXZhdGVcbiAgICA7XG5cbiAgICBfcHJvdG8uX2FkZEV2ZW50TGlzdGVuZXJzID0gZnVuY3Rpb24gX2FkZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbihFdmVudCQ0LkNMSUNLLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgX3RoaXMudG9nZ2xlKCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9nZXRDb25maWcgPSBmdW5jdGlvbiBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgICAgY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0LCAkKHRoaXMuX2VsZW1lbnQpLmRhdGEoKSwgY29uZmlnKTtcbiAgICAgIFV0aWwudHlwZUNoZWNrQ29uZmlnKE5BTUUkNCwgY29uZmlnLCB0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRUeXBlKTtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0TWVudUVsZW1lbnQgPSBmdW5jdGlvbiBfZ2V0TWVudUVsZW1lbnQoKSB7XG4gICAgICBpZiAoIXRoaXMuX21lbnUpIHtcbiAgICAgICAgdmFyIHBhcmVudCA9IERyb3Bkb3duLl9nZXRQYXJlbnRGcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcblxuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgdGhpcy5fbWVudSA9IHBhcmVudC5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yJDQuTUVOVSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX21lbnU7XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0UGxhY2VtZW50ID0gZnVuY3Rpb24gX2dldFBsYWNlbWVudCgpIHtcbiAgICAgIHZhciAkcGFyZW50RHJvcGRvd24gPSAkKHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSk7XG4gICAgICB2YXIgcGxhY2VtZW50ID0gQXR0YWNobWVudE1hcC5CT1RUT007IC8vIEhhbmRsZSBkcm9wdXBcblxuICAgICAgaWYgKCRwYXJlbnREcm9wZG93bi5oYXNDbGFzcyhDbGFzc05hbWUkNC5EUk9QVVApKSB7XG4gICAgICAgIHBsYWNlbWVudCA9IEF0dGFjaG1lbnRNYXAuVE9QO1xuXG4gICAgICAgIGlmICgkKHRoaXMuX21lbnUpLmhhc0NsYXNzKENsYXNzTmFtZSQ0Lk1FTlVSSUdIVCkpIHtcbiAgICAgICAgICBwbGFjZW1lbnQgPSBBdHRhY2htZW50TWFwLlRPUEVORDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgkcGFyZW50RHJvcGRvd24uaGFzQ2xhc3MoQ2xhc3NOYW1lJDQuRFJPUFJJR0hUKSkge1xuICAgICAgICBwbGFjZW1lbnQgPSBBdHRhY2htZW50TWFwLlJJR0hUO1xuICAgICAgfSBlbHNlIGlmICgkcGFyZW50RHJvcGRvd24uaGFzQ2xhc3MoQ2xhc3NOYW1lJDQuRFJPUExFRlQpKSB7XG4gICAgICAgIHBsYWNlbWVudCA9IEF0dGFjaG1lbnRNYXAuTEVGVDtcbiAgICAgIH0gZWxzZSBpZiAoJCh0aGlzLl9tZW51KS5oYXNDbGFzcyhDbGFzc05hbWUkNC5NRU5VUklHSFQpKSB7XG4gICAgICAgIHBsYWNlbWVudCA9IEF0dGFjaG1lbnRNYXAuQk9UVE9NRU5EO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGxhY2VtZW50O1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2RldGVjdE5hdmJhciA9IGZ1bmN0aW9uIF9kZXRlY3ROYXZiYXIoKSB7XG4gICAgICByZXR1cm4gJCh0aGlzLl9lbGVtZW50KS5jbG9zZXN0KCcubmF2YmFyJykubGVuZ3RoID4gMDtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9nZXRPZmZzZXQgPSBmdW5jdGlvbiBfZ2V0T2Zmc2V0KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBvZmZzZXQgPSB7fTtcblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLl9jb25maWcub2Zmc2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG9mZnNldC5mbiA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgZGF0YS5vZmZzZXRzID0gX29iamVjdFNwcmVhZCh7fSwgZGF0YS5vZmZzZXRzLCBfdGhpczIuX2NvbmZpZy5vZmZzZXQoZGF0YS5vZmZzZXRzLCBfdGhpczIuX2VsZW1lbnQpIHx8IHt9KTtcbiAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9mZnNldC5vZmZzZXQgPSB0aGlzLl9jb25maWcub2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2Zmc2V0O1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldFBvcHBlckNvbmZpZyA9IGZ1bmN0aW9uIF9nZXRQb3BwZXJDb25maWcoKSB7XG4gICAgICB2YXIgcG9wcGVyQ29uZmlnID0ge1xuICAgICAgICBwbGFjZW1lbnQ6IHRoaXMuX2dldFBsYWNlbWVudCgpLFxuICAgICAgICBtb2RpZmllcnM6IHtcbiAgICAgICAgICBvZmZzZXQ6IHRoaXMuX2dldE9mZnNldCgpLFxuICAgICAgICAgIGZsaXA6IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRoaXMuX2NvbmZpZy5mbGlwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcmV2ZW50T3ZlcmZsb3c6IHtcbiAgICAgICAgICAgIGJvdW5kYXJpZXNFbGVtZW50OiB0aGlzLl9jb25maWcuYm91bmRhcnlcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gRGlzYWJsZSBQb3BwZXIuanMgaWYgd2UgaGF2ZSBhIHN0YXRpYyBkaXNwbGF5XG5cbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcuZGlzcGxheSA9PT0gJ3N0YXRpYycpIHtcbiAgICAgICAgcG9wcGVyQ29uZmlnLm1vZGlmaWVycy5hcHBseVN0eWxlID0ge1xuICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwb3BwZXJDb25maWc7XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBEcm9wZG93bi5falF1ZXJ5SW50ZXJmYWNlID0gZnVuY3Rpb24gX2pRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YShEQVRBX0tFWSQ0KTtcblxuICAgICAgICB2YXIgX2NvbmZpZyA9IHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnID8gY29uZmlnIDogbnVsbDtcblxuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICBkYXRhID0gbmV3IERyb3Bkb3duKHRoaXMsIF9jb25maWcpO1xuICAgICAgICAgICQodGhpcykuZGF0YShEQVRBX0tFWSQ0LCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIG1ldGhvZCBuYW1lZCBcXFwiXCIgKyBjb25maWcgKyBcIlxcXCJcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBEcm9wZG93bi5fY2xlYXJNZW51cyA9IGZ1bmN0aW9uIF9jbGVhck1lbnVzKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQgJiYgKGV2ZW50LndoaWNoID09PSBSSUdIVF9NT1VTRV9CVVRUT05fV0hJQ0ggfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBldmVudC53aGljaCAhPT0gVEFCX0tFWUNPREUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHRvZ2dsZXMgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IkNC5EQVRBX1RPR0dMRSkpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdG9nZ2xlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICB2YXIgcGFyZW50ID0gRHJvcGRvd24uX2dldFBhcmVudEZyb21FbGVtZW50KHRvZ2dsZXNbaV0pO1xuXG4gICAgICAgIHZhciBjb250ZXh0ID0gJCh0b2dnbGVzW2ldKS5kYXRhKERBVEFfS0VZJDQpO1xuICAgICAgICB2YXIgcmVsYXRlZFRhcmdldCA9IHtcbiAgICAgICAgICByZWxhdGVkVGFyZ2V0OiB0b2dnbGVzW2ldXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LnR5cGUgPT09ICdjbGljaycpIHtcbiAgICAgICAgICByZWxhdGVkVGFyZ2V0LmNsaWNrRXZlbnQgPSBldmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29udGV4dCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRyb3Bkb3duTWVudSA9IGNvbnRleHQuX21lbnU7XG5cbiAgICAgICAgaWYgKCEkKHBhcmVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1lJDQuU0hPVykpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudCAmJiAoZXZlbnQudHlwZSA9PT0gJ2NsaWNrJyAmJiAvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSB8fCBldmVudC50eXBlID09PSAna2V5dXAnICYmIGV2ZW50LndoaWNoID09PSBUQUJfS0VZQ09ERSkgJiYgJC5jb250YWlucyhwYXJlbnQsIGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBoaWRlRXZlbnQgPSAkLkV2ZW50KEV2ZW50JDQuSElERSwgcmVsYXRlZFRhcmdldCk7XG4gICAgICAgICQocGFyZW50KS50cmlnZ2VyKGhpZGVFdmVudCk7XG5cbiAgICAgICAgaWYgKGhpZGVFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSByZW1vdmUgdGhlIGV4dHJhXG4gICAgICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgd2UgYWRkZWQgZm9yIGlPUyBzdXBwb3J0XG5cblxuICAgICAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgICAgJChkb2N1bWVudC5ib2R5KS5jaGlsZHJlbigpLm9mZignbW91c2VvdmVyJywgbnVsbCwgJC5ub29wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRvZ2dsZXNbaV0uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XG4gICAgICAgICQoZHJvcGRvd25NZW51KS5yZW1vdmVDbGFzcyhDbGFzc05hbWUkNC5TSE9XKTtcbiAgICAgICAgJChwYXJlbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQ0LlNIT1cpLnRyaWdnZXIoJC5FdmVudChFdmVudCQ0LkhJRERFTiwgcmVsYXRlZFRhcmdldCkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBEcm9wZG93bi5fZ2V0UGFyZW50RnJvbUVsZW1lbnQgPSBmdW5jdGlvbiBfZ2V0UGFyZW50RnJvbUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgdmFyIHBhcmVudDtcbiAgICAgIHZhciBzZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgIHBhcmVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyZW50IHx8IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gICAgO1xuXG4gICAgRHJvcGRvd24uX2RhdGFBcGlLZXlkb3duSGFuZGxlciA9IGZ1bmN0aW9uIF9kYXRhQXBpS2V5ZG93bkhhbmRsZXIoZXZlbnQpIHtcbiAgICAgIC8vIElmIG5vdCBpbnB1dC90ZXh0YXJlYTpcbiAgICAgIC8vICAtIEFuZCBub3QgYSBrZXkgaW4gUkVHRVhQX0tFWURPV04gPT4gbm90IGEgZHJvcGRvd24gY29tbWFuZFxuICAgICAgLy8gSWYgaW5wdXQvdGV4dGFyZWE6XG4gICAgICAvLyAgLSBJZiBzcGFjZSBrZXkgPT4gbm90IGEgZHJvcGRvd24gY29tbWFuZFxuICAgICAgLy8gIC0gSWYga2V5IGlzIG90aGVyIHRoYW4gZXNjYXBlXG4gICAgICAvLyAgICAtIElmIGtleSBpcyBub3QgdXAgb3IgZG93biA9PiBub3QgYSBkcm9wZG93biBjb21tYW5kXG4gICAgICAvLyAgICAtIElmIHRyaWdnZXIgaW5zaWRlIHRoZSBtZW51ID0+IG5vdCBhIGRyb3Bkb3duIGNvbW1hbmRcbiAgICAgIGlmICgvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSA/IGV2ZW50LndoaWNoID09PSBTUEFDRV9LRVlDT0RFIHx8IGV2ZW50LndoaWNoICE9PSBFU0NBUEVfS0VZQ09ERSAmJiAoZXZlbnQud2hpY2ggIT09IEFSUk9XX0RPV05fS0VZQ09ERSAmJiBldmVudC53aGljaCAhPT0gQVJST1dfVVBfS0VZQ09ERSB8fCAkKGV2ZW50LnRhcmdldCkuY2xvc2VzdChTZWxlY3RvciQ0Lk1FTlUpLmxlbmd0aCkgOiAhUkVHRVhQX0tFWURPV04udGVzdChldmVudC53aGljaCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8ICQodGhpcykuaGFzQ2xhc3MoQ2xhc3NOYW1lJDQuRElTQUJMRUQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHBhcmVudCA9IERyb3Bkb3duLl9nZXRQYXJlbnRGcm9tRWxlbWVudCh0aGlzKTtcblxuICAgICAgdmFyIGlzQWN0aXZlID0gJChwYXJlbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQ0LlNIT1cpO1xuXG4gICAgICBpZiAoIWlzQWN0aXZlIHx8IGlzQWN0aXZlICYmIChldmVudC53aGljaCA9PT0gRVNDQVBFX0tFWUNPREUgfHwgZXZlbnQud2hpY2ggPT09IFNQQUNFX0tFWUNPREUpKSB7XG4gICAgICAgIGlmIChldmVudC53aGljaCA9PT0gRVNDQVBFX0tFWUNPREUpIHtcbiAgICAgICAgICB2YXIgdG9nZ2xlID0gcGFyZW50LnF1ZXJ5U2VsZWN0b3IoU2VsZWN0b3IkNC5EQVRBX1RPR0dMRSk7XG4gICAgICAgICAgJCh0b2dnbGUpLnRyaWdnZXIoJ2ZvY3VzJyk7XG4gICAgICAgIH1cblxuICAgICAgICAkKHRoaXMpLnRyaWdnZXIoJ2NsaWNrJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGl0ZW1zID0gW10uc2xpY2UuY2FsbChwYXJlbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3RvciQ0LlZJU0lCTEVfSVRFTVMpKTtcblxuICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBpbmRleCA9IGl0ZW1zLmluZGV4T2YoZXZlbnQudGFyZ2V0KTtcblxuICAgICAgaWYgKGV2ZW50LndoaWNoID09PSBBUlJPV19VUF9LRVlDT0RFICYmIGluZGV4ID4gMCkge1xuICAgICAgICAvLyBVcFxuICAgICAgICBpbmRleC0tO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQud2hpY2ggPT09IEFSUk9XX0RPV05fS0VZQ09ERSAmJiBpbmRleCA8IGl0ZW1zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgLy8gRG93blxuICAgICAgICBpbmRleCsrO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIGluZGV4ID0gMDtcbiAgICAgIH1cblxuICAgICAgaXRlbXNbaW5kZXhdLmZvY3VzKCk7XG4gICAgfTtcblxuICAgIF9jcmVhdGVDbGFzcyhEcm9wZG93biwgbnVsbCwgW3tcbiAgICAgIGtleTogXCJWRVJTSU9OXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIFZFUlNJT04kNDtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiRGVmYXVsdFwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBEZWZhdWx0JDI7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkRlZmF1bHRUeXBlXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIERlZmF1bHRUeXBlJDI7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIERyb3Bkb3duO1xuICB9KCk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJChkb2N1bWVudCkub24oRXZlbnQkNC5LRVlET1dOX0RBVEFfQVBJLCBTZWxlY3RvciQ0LkRBVEFfVE9HR0xFLCBEcm9wZG93bi5fZGF0YUFwaUtleWRvd25IYW5kbGVyKS5vbihFdmVudCQ0LktFWURPV05fREFUQV9BUEksIFNlbGVjdG9yJDQuTUVOVSwgRHJvcGRvd24uX2RhdGFBcGlLZXlkb3duSGFuZGxlcikub24oRXZlbnQkNC5DTElDS19EQVRBX0FQSSArIFwiIFwiICsgRXZlbnQkNC5LRVlVUF9EQVRBX0FQSSwgRHJvcGRvd24uX2NsZWFyTWVudXMpLm9uKEV2ZW50JDQuQ0xJQ0tfREFUQV9BUEksIFNlbGVjdG9yJDQuREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBEcm9wZG93bi5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoJCh0aGlzKSwgJ3RvZ2dsZScpO1xuICB9KS5vbihFdmVudCQ0LkNMSUNLX0RBVEFfQVBJLCBTZWxlY3RvciQ0LkZPUk1fQ0hJTEQsIGZ1bmN0aW9uIChlKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfSk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogalF1ZXJ5XG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICAkLmZuW05BTUUkNF0gPSBEcm9wZG93bi5falF1ZXJ5SW50ZXJmYWNlO1xuICAkLmZuW05BTUUkNF0uQ29uc3RydWN0b3IgPSBEcm9wZG93bjtcblxuICAkLmZuW05BTUUkNF0ubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAkLmZuW05BTUUkNF0gPSBKUVVFUllfTk9fQ09ORkxJQ1QkNDtcbiAgICByZXR1cm4gRHJvcGRvd24uX2pRdWVyeUludGVyZmFjZTtcbiAgfTtcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIENvbnN0YW50c1xuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgdmFyIE5BTUUkNSA9ICdtb2RhbCc7XG4gIHZhciBWRVJTSU9OJDUgPSAnNC4zLjEnO1xuICB2YXIgREFUQV9LRVkkNSA9ICdicy5tb2RhbCc7XG4gIHZhciBFVkVOVF9LRVkkNSA9IFwiLlwiICsgREFUQV9LRVkkNTtcbiAgdmFyIERBVEFfQVBJX0tFWSQ1ID0gJy5kYXRhLWFwaSc7XG4gIHZhciBKUVVFUllfTk9fQ09ORkxJQ1QkNSA9ICQuZm5bTkFNRSQ1XTtcbiAgdmFyIEVTQ0FQRV9LRVlDT0RFJDEgPSAyNzsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3IgRXNjYXBlIChFc2MpIGtleVxuXG4gIHZhciBEZWZhdWx0JDMgPSB7XG4gICAgYmFja2Ryb3A6IHRydWUsXG4gICAga2V5Ym9hcmQ6IHRydWUsXG4gICAgZm9jdXM6IHRydWUsXG4gICAgc2hvdzogdHJ1ZVxuICB9O1xuICB2YXIgRGVmYXVsdFR5cGUkMyA9IHtcbiAgICBiYWNrZHJvcDogJyhib29sZWFufHN0cmluZyknLFxuICAgIGtleWJvYXJkOiAnYm9vbGVhbicsXG4gICAgZm9jdXM6ICdib29sZWFuJyxcbiAgICBzaG93OiAnYm9vbGVhbidcbiAgfTtcbiAgdmFyIEV2ZW50JDUgPSB7XG4gICAgSElERTogXCJoaWRlXCIgKyBFVkVOVF9LRVkkNSxcbiAgICBISURERU46IFwiaGlkZGVuXCIgKyBFVkVOVF9LRVkkNSxcbiAgICBTSE9XOiBcInNob3dcIiArIEVWRU5UX0tFWSQ1LFxuICAgIFNIT1dOOiBcInNob3duXCIgKyBFVkVOVF9LRVkkNSxcbiAgICBGT0NVU0lOOiBcImZvY3VzaW5cIiArIEVWRU5UX0tFWSQ1LFxuICAgIFJFU0laRTogXCJyZXNpemVcIiArIEVWRU5UX0tFWSQ1LFxuICAgIENMSUNLX0RJU01JU1M6IFwiY2xpY2suZGlzbWlzc1wiICsgRVZFTlRfS0VZJDUsXG4gICAgS0VZRE9XTl9ESVNNSVNTOiBcImtleWRvd24uZGlzbWlzc1wiICsgRVZFTlRfS0VZJDUsXG4gICAgTU9VU0VVUF9ESVNNSVNTOiBcIm1vdXNldXAuZGlzbWlzc1wiICsgRVZFTlRfS0VZJDUsXG4gICAgTU9VU0VET1dOX0RJU01JU1M6IFwibW91c2Vkb3duLmRpc21pc3NcIiArIEVWRU5UX0tFWSQ1LFxuICAgIENMSUNLX0RBVEFfQVBJOiBcImNsaWNrXCIgKyBFVkVOVF9LRVkkNSArIERBVEFfQVBJX0tFWSQ1XG4gIH07XG4gIHZhciBDbGFzc05hbWUkNSA9IHtcbiAgICBTQ1JPTExBQkxFOiAnbW9kYWwtZGlhbG9nLXNjcm9sbGFibGUnLFxuICAgIFNDUk9MTEJBUl9NRUFTVVJFUjogJ21vZGFsLXNjcm9sbGJhci1tZWFzdXJlJyxcbiAgICBCQUNLRFJPUDogJ21vZGFsLWJhY2tkcm9wJyxcbiAgICBPUEVOOiAnbW9kYWwtb3BlbicsXG4gICAgRkFERTogJ2ZhZGUnLFxuICAgIFNIT1c6ICdzaG93J1xuICB9O1xuICB2YXIgU2VsZWN0b3IkNSA9IHtcbiAgICBESUFMT0c6ICcubW9kYWwtZGlhbG9nJyxcbiAgICBNT0RBTF9CT0RZOiAnLm1vZGFsLWJvZHknLFxuICAgIERBVEFfVE9HR0xFOiAnW2RhdGEtdG9nZ2xlPVwibW9kYWxcIl0nLFxuICAgIERBVEFfRElTTUlTUzogJ1tkYXRhLWRpc21pc3M9XCJtb2RhbFwiXScsXG4gICAgRklYRURfQ09OVEVOVDogJy5maXhlZC10b3AsIC5maXhlZC1ib3R0b20sIC5pcy1maXhlZCwgLnN0aWNreS10b3AnLFxuICAgIFNUSUNLWV9DT05URU5UOiAnLnN0aWNreS10b3AnXG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG4gIH07XG5cbiAgdmFyIE1vZGFsID1cbiAgLyojX19QVVJFX18qL1xuICBmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTW9kYWwoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgdGhpcy5fZGlhbG9nID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yJDUuRElBTE9HKTtcbiAgICAgIHRoaXMuX2JhY2tkcm9wID0gbnVsbDtcbiAgICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZTtcbiAgICAgIHRoaXMuX2lzQm9keU92ZXJmbG93aW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrID0gZmFsc2U7XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3Njcm9sbGJhcldpZHRoID0gMDtcbiAgICB9IC8vIEdldHRlcnNcblxuXG4gICAgdmFyIF9wcm90byA9IE1vZGFsLnByb3RvdHlwZTtcblxuICAgIC8vIFB1YmxpY1xuICAgIF9wcm90by50b2dnbGUgPSBmdW5jdGlvbiB0b2dnbGUocmVsYXRlZFRhcmdldCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2lzU2hvd24gPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdyhyZWxhdGVkVGFyZ2V0KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLnNob3cgPSBmdW5jdGlvbiBzaG93KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLl9pc1Nob3duIHx8IHRoaXMuX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICgkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQ1LkZBREUpKSB7XG4gICAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBzaG93RXZlbnQgPSAkLkV2ZW50KEV2ZW50JDUuU0hPVywge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiByZWxhdGVkVGFyZ2V0XG4gICAgICB9KTtcbiAgICAgICQodGhpcy5fZWxlbWVudCkudHJpZ2dlcihzaG93RXZlbnQpO1xuXG4gICAgICBpZiAodGhpcy5faXNTaG93biB8fCBzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pc1Nob3duID0gdHJ1ZTtcblxuICAgICAgdGhpcy5fY2hlY2tTY3JvbGxiYXIoKTtcblxuICAgICAgdGhpcy5fc2V0U2Nyb2xsYmFyKCk7XG5cbiAgICAgIHRoaXMuX2FkanVzdERpYWxvZygpO1xuXG4gICAgICB0aGlzLl9zZXRFc2NhcGVFdmVudCgpO1xuXG4gICAgICB0aGlzLl9zZXRSZXNpemVFdmVudCgpO1xuXG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLm9uKEV2ZW50JDUuQ0xJQ0tfRElTTUlTUywgU2VsZWN0b3IkNS5EQVRBX0RJU01JU1MsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICByZXR1cm4gX3RoaXMuaGlkZShldmVudCk7XG4gICAgICB9KTtcbiAgICAgICQodGhpcy5fZGlhbG9nKS5vbihFdmVudCQ1Lk1PVVNFRE9XTl9ESVNNSVNTLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICQoX3RoaXMuX2VsZW1lbnQpLm9uZShFdmVudCQ1Lk1PVVNFVVBfRElTTUlTUywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgaWYgKCQoZXZlbnQudGFyZ2V0KS5pcyhfdGhpcy5fZWxlbWVudCkpIHtcbiAgICAgICAgICAgIF90aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX3Nob3dCYWNrZHJvcChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5fc2hvd0VsZW1lbnQocmVsYXRlZFRhcmdldCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmhpZGUgPSBmdW5jdGlvbiBoaWRlKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5faXNTaG93biB8fCB0aGlzLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgaGlkZUV2ZW50ID0gJC5FdmVudChFdmVudCQ1LkhJREUpO1xuICAgICAgJCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKGhpZGVFdmVudCk7XG5cbiAgICAgIGlmICghdGhpcy5faXNTaG93biB8fCBoaWRlRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pc1Nob3duID0gZmFsc2U7XG4gICAgICB2YXIgdHJhbnNpdGlvbiA9ICQodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1lJDUuRkFERSk7XG5cbiAgICAgIGlmICh0cmFuc2l0aW9uKSB7XG4gICAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3NldEVzY2FwZUV2ZW50KCk7XG5cbiAgICAgIHRoaXMuX3NldFJlc2l6ZUV2ZW50KCk7XG5cbiAgICAgICQoZG9jdW1lbnQpLm9mZihFdmVudCQ1LkZPQ1VTSU4pO1xuICAgICAgJCh0aGlzLl9lbGVtZW50KS5yZW1vdmVDbGFzcyhDbGFzc05hbWUkNS5TSE9XKTtcbiAgICAgICQodGhpcy5fZWxlbWVudCkub2ZmKEV2ZW50JDUuQ0xJQ0tfRElTTUlTUyk7XG4gICAgICAkKHRoaXMuX2RpYWxvZykub2ZmKEV2ZW50JDUuTU9VU0VET1dOX0RJU01JU1MpO1xuXG4gICAgICBpZiAodHJhbnNpdGlvbikge1xuICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5faGlkZU1vZGFsKGV2ZW50KTtcbiAgICAgICAgfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2hpZGVNb2RhbCgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uZGlzcG9zZSA9IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgICBbd2luZG93LCB0aGlzLl9lbGVtZW50LCB0aGlzLl9kaWFsb2ddLmZvckVhY2goZnVuY3Rpb24gKGh0bWxFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiAkKGh0bWxFbGVtZW50KS5vZmYoRVZFTlRfS0VZJDUpO1xuICAgICAgfSk7XG4gICAgICAvKipcbiAgICAgICAqIGBkb2N1bWVudGAgaGFzIDIgZXZlbnRzIGBFdmVudC5GT0NVU0lOYCBhbmQgYEV2ZW50LkNMSUNLX0RBVEFfQVBJYFxuICAgICAgICogRG8gbm90IG1vdmUgYGRvY3VtZW50YCBpbiBgaHRtbEVsZW1lbnRzYCBhcnJheVxuICAgICAgICogSXQgd2lsbCByZW1vdmUgYEV2ZW50LkNMSUNLX0RBVEFfQVBJYCBldmVudCB0aGF0IHNob3VsZCByZW1haW5cbiAgICAgICAqL1xuXG4gICAgICAkKGRvY3VtZW50KS5vZmYoRXZlbnQkNS5GT0NVU0lOKTtcbiAgICAgICQucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LCBEQVRBX0tFWSQ1KTtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IG51bGw7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuX2RpYWxvZyA9IG51bGw7XG4gICAgICB0aGlzLl9iYWNrZHJvcCA9IG51bGw7XG4gICAgICB0aGlzLl9pc1Nob3duID0gbnVsbDtcbiAgICAgIHRoaXMuX2lzQm9keU92ZXJmbG93aW5nID0gbnVsbDtcbiAgICAgIHRoaXMuX2lnbm9yZUJhY2tkcm9wQ2xpY2sgPSBudWxsO1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gbnVsbDtcbiAgICAgIHRoaXMuX3Njcm9sbGJhcldpZHRoID0gbnVsbDtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmhhbmRsZVVwZGF0ZSA9IGZ1bmN0aW9uIGhhbmRsZVVwZGF0ZSgpIHtcbiAgICAgIHRoaXMuX2FkanVzdERpYWxvZygpO1xuICAgIH0gLy8gUHJpdmF0ZVxuICAgIDtcblxuICAgIF9wcm90by5fZ2V0Q29uZmlnID0gZnVuY3Rpb24gX2dldENvbmZpZyhjb25maWcpIHtcbiAgICAgIGNvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIERlZmF1bHQkMywgY29uZmlnKTtcbiAgICAgIFV0aWwudHlwZUNoZWNrQ29uZmlnKE5BTUUkNSwgY29uZmlnLCBEZWZhdWx0VHlwZSQzKTtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfTtcblxuICAgIF9wcm90by5fc2hvd0VsZW1lbnQgPSBmdW5jdGlvbiBfc2hvd0VsZW1lbnQocmVsYXRlZFRhcmdldCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciB0cmFuc2l0aW9uID0gJCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUkNS5GQURFKTtcblxuICAgICAgaWYgKCF0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUgfHwgdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAvLyBEb24ndCBtb3ZlIG1vZGFsJ3MgRE9NIHBvc2l0aW9uXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpO1xuXG4gICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcsIHRydWUpO1xuXG4gICAgICBpZiAoJCh0aGlzLl9kaWFsb2cpLmhhc0NsYXNzKENsYXNzTmFtZSQ1LlNDUk9MTEFCTEUpKSB7XG4gICAgICAgIHRoaXMuX2RpYWxvZy5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yJDUuTU9EQUxfQk9EWSkuc2Nyb2xsVG9wID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRyYW5zaXRpb24pIHtcbiAgICAgICAgVXRpbC5yZWZsb3codGhpcy5fZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgICQodGhpcy5fZWxlbWVudCkuYWRkQ2xhc3MoQ2xhc3NOYW1lJDUuU0hPVyk7XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcuZm9jdXMpIHtcbiAgICAgICAgdGhpcy5fZW5mb3JjZUZvY3VzKCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzaG93bkV2ZW50ID0gJC5FdmVudChFdmVudCQ1LlNIT1dOLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHJlbGF0ZWRUYXJnZXRcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgdHJhbnNpdGlvbkNvbXBsZXRlID0gZnVuY3Rpb24gdHJhbnNpdGlvbkNvbXBsZXRlKCkge1xuICAgICAgICBpZiAoX3RoaXMzLl9jb25maWcuZm9jdXMpIHtcbiAgICAgICAgICBfdGhpczMuX2VsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzMy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICAgICQoX3RoaXMzLl9lbGVtZW50KS50cmlnZ2VyKHNob3duRXZlbnQpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHRyYW5zaXRpb24pIHtcbiAgICAgICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fZGlhbG9nKTtcbiAgICAgICAgJCh0aGlzLl9kaWFsb2cpLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCB0cmFuc2l0aW9uQ29tcGxldGUpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2l0aW9uQ29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLl9lbmZvcmNlRm9jdXMgPSBmdW5jdGlvbiBfZW5mb3JjZUZvY3VzKCkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgICQoZG9jdW1lbnQpLm9mZihFdmVudCQ1LkZPQ1VTSU4pIC8vIEd1YXJkIGFnYWluc3QgaW5maW5pdGUgZm9jdXMgbG9vcFxuICAgICAgLm9uKEV2ZW50JDUuRk9DVVNJTiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGlmIChkb2N1bWVudCAhPT0gZXZlbnQudGFyZ2V0ICYmIF90aGlzNC5fZWxlbWVudCAhPT0gZXZlbnQudGFyZ2V0ICYmICQoX3RoaXM0Ll9lbGVtZW50KS5oYXMoZXZlbnQudGFyZ2V0KS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBfdGhpczQuX2VsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9wcm90by5fc2V0RXNjYXBlRXZlbnQgPSBmdW5jdGlvbiBfc2V0RXNjYXBlRXZlbnQoKSB7XG4gICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuX2lzU2hvd24gJiYgdGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICAgICQodGhpcy5fZWxlbWVudCkub24oRXZlbnQkNS5LRVlET1dOX0RJU01JU1MsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIGlmIChldmVudC53aGljaCA9PT0gRVNDQVBFX0tFWUNPREUkMSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgX3RoaXM1LmhpZGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5faXNTaG93bikge1xuICAgICAgICAkKHRoaXMuX2VsZW1lbnQpLm9mZihFdmVudCQ1LktFWURPV05fRElTTUlTUyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5fc2V0UmVzaXplRXZlbnQgPSBmdW5jdGlvbiBfc2V0UmVzaXplRXZlbnQoKSB7XG4gICAgICB2YXIgX3RoaXM2ID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuX2lzU2hvd24pIHtcbiAgICAgICAgJCh3aW5kb3cpLm9uKEV2ZW50JDUuUkVTSVpFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXM2LmhhbmRsZVVwZGF0ZShldmVudCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJCh3aW5kb3cpLm9mZihFdmVudCQ1LlJFU0laRSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5faGlkZU1vZGFsID0gZnVuY3Rpb24gX2hpZGVNb2RhbCgpIHtcbiAgICAgIHZhciBfdGhpczcgPSB0aGlzO1xuXG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHRydWUpO1xuXG4gICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcpO1xuXG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcblxuICAgICAgdGhpcy5fc2hvd0JhY2tkcm9wKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJChkb2N1bWVudC5ib2R5KS5yZW1vdmVDbGFzcyhDbGFzc05hbWUkNS5PUEVOKTtcblxuICAgICAgICBfdGhpczcuX3Jlc2V0QWRqdXN0bWVudHMoKTtcblxuICAgICAgICBfdGhpczcuX3Jlc2V0U2Nyb2xsYmFyKCk7XG5cbiAgICAgICAgJChfdGhpczcuX2VsZW1lbnQpLnRyaWdnZXIoRXZlbnQkNS5ISURERU4pO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9wcm90by5fcmVtb3ZlQmFja2Ryb3AgPSBmdW5jdGlvbiBfcmVtb3ZlQmFja2Ryb3AoKSB7XG4gICAgICBpZiAodGhpcy5fYmFja2Ryb3ApIHtcbiAgICAgICAgJCh0aGlzLl9iYWNrZHJvcCkucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMuX2JhY2tkcm9wID0gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLl9zaG93QmFja2Ryb3AgPSBmdW5jdGlvbiBfc2hvd0JhY2tkcm9wKGNhbGxiYWNrKSB7XG4gICAgICB2YXIgX3RoaXM4ID0gdGhpcztcblxuICAgICAgdmFyIGFuaW1hdGUgPSAkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZSQ1LkZBREUpID8gQ2xhc3NOYW1lJDUuRkFERSA6ICcnO1xuXG4gICAgICBpZiAodGhpcy5faXNTaG93biAmJiB0aGlzLl9jb25maWcuYmFja2Ryb3ApIHtcbiAgICAgICAgdGhpcy5fYmFja2Ryb3AgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5fYmFja2Ryb3AuY2xhc3NOYW1lID0gQ2xhc3NOYW1lJDUuQkFDS0RST1A7XG5cbiAgICAgICAgaWYgKGFuaW1hdGUpIHtcbiAgICAgICAgICB0aGlzLl9iYWNrZHJvcC5jbGFzc0xpc3QuYWRkKGFuaW1hdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgJCh0aGlzLl9iYWNrZHJvcCkuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSk7XG4gICAgICAgICQodGhpcy5fZWxlbWVudCkub24oRXZlbnQkNS5DTElDS19ESVNNSVNTLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBpZiAoX3RoaXM4Ll9pZ25vcmVCYWNrZHJvcENsaWNrKSB7XG4gICAgICAgICAgICBfdGhpczguX2lnbm9yZUJhY2tkcm9wQ2xpY2sgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ICE9PSBldmVudC5jdXJyZW50VGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF90aGlzOC5fY29uZmlnLmJhY2tkcm9wID09PSAnc3RhdGljJykge1xuICAgICAgICAgICAgX3RoaXM4Ll9lbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzOC5oaWRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoYW5pbWF0ZSkge1xuICAgICAgICAgIFV0aWwucmVmbG93KHRoaXMuX2JhY2tkcm9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgICQodGhpcy5fYmFja2Ryb3ApLmFkZENsYXNzKENsYXNzTmFtZSQ1LlNIT1cpO1xuXG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWFuaW1hdGUpIHtcbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBiYWNrZHJvcFRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fYmFja2Ryb3ApO1xuICAgICAgICAkKHRoaXMuX2JhY2tkcm9wKS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgY2FsbGJhY2spLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGJhY2tkcm9wVHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX2lzU2hvd24gJiYgdGhpcy5fYmFja2Ryb3ApIHtcbiAgICAgICAgJCh0aGlzLl9iYWNrZHJvcCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lJDUuU0hPVyk7XG5cbiAgICAgICAgdmFyIGNhbGxiYWNrUmVtb3ZlID0gZnVuY3Rpb24gY2FsbGJhY2tSZW1vdmUoKSB7XG4gICAgICAgICAgX3RoaXM4Ll9yZW1vdmVCYWNrZHJvcCgpO1xuXG4gICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoJCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUkNS5GQURFKSkge1xuICAgICAgICAgIHZhciBfYmFja2Ryb3BUcmFuc2l0aW9uRHVyYXRpb24gPSBVdGlsLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMuX2JhY2tkcm9wKTtcblxuICAgICAgICAgICQodGhpcy5fYmFja2Ryb3ApLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCBjYWxsYmFja1JlbW92ZSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoX2JhY2tkcm9wVHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFja1JlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfSAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gdGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSB1c2VkIHRvIGhhbmRsZSBvdmVyZmxvd2luZyBtb2RhbHNcbiAgICAvLyB0b2RvIChmYXQpOiB0aGVzZSBzaG91bGQgcHJvYmFibHkgYmUgcmVmYWN0b3JlZCBvdXQgb2YgbW9kYWwuanNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgO1xuXG4gICAgX3Byb3RvLl9hZGp1c3REaWFsb2cgPSBmdW5jdGlvbiBfYWRqdXN0RGlhbG9nKCkge1xuICAgICAgdmFyIGlzTW9kYWxPdmVyZmxvd2luZyA9IHRoaXMuX2VsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcblxuICAgICAgaWYgKCF0aGlzLl9pc0JvZHlPdmVyZmxvd2luZyAmJiBpc01vZGFsT3ZlcmZsb3dpbmcpIHtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nTGVmdCA9IHRoaXMuX3Njcm9sbGJhcldpZHRoICsgXCJweFwiO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5faXNCb2R5T3ZlcmZsb3dpbmcgJiYgIWlzTW9kYWxPdmVyZmxvd2luZykge1xuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9IHRoaXMuX3Njcm9sbGJhcldpZHRoICsgXCJweFwiO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uX3Jlc2V0QWRqdXN0bWVudHMgPSBmdW5jdGlvbiBfcmVzZXRBZGp1c3RtZW50cygpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ0xlZnQgPSAnJztcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0ID0gJyc7XG4gICAgfTtcblxuICAgIF9wcm90by5fY2hlY2tTY3JvbGxiYXIgPSBmdW5jdGlvbiBfY2hlY2tTY3JvbGxiYXIoKSB7XG4gICAgICB2YXIgcmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB0aGlzLl9pc0JvZHlPdmVyZmxvd2luZyA9IHJlY3QubGVmdCArIHJlY3QucmlnaHQgPCB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICAgIHRoaXMuX3Njcm9sbGJhcldpZHRoID0gdGhpcy5fZ2V0U2Nyb2xsYmFyV2lkdGgoKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9zZXRTY3JvbGxiYXIgPSBmdW5jdGlvbiBfc2V0U2Nyb2xsYmFyKCkge1xuICAgICAgdmFyIF90aGlzOSA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLl9pc0JvZHlPdmVyZmxvd2luZykge1xuICAgICAgICAvLyBOb3RlOiBET01Ob2RlLnN0eWxlLnBhZGRpbmdSaWdodCByZXR1cm5zIHRoZSBhY3R1YWwgdmFsdWUgb3IgJycgaWYgbm90IHNldFxuICAgICAgICAvLyAgIHdoaWxlICQoRE9NTm9kZSkuY3NzKCdwYWRkaW5nLXJpZ2h0JykgcmV0dXJucyB0aGUgY2FsY3VsYXRlZCB2YWx1ZSBvciAwIGlmIG5vdCBzZXRcbiAgICAgICAgdmFyIGZpeGVkQ29udGVudCA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3RvciQ1LkZJWEVEX0NPTlRFTlQpKTtcbiAgICAgICAgdmFyIHN0aWNreUNvbnRlbnQgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IkNS5TVElDS1lfQ09OVEVOVCkpOyAvLyBBZGp1c3QgZml4ZWQgY29udGVudCBwYWRkaW5nXG5cbiAgICAgICAgJChmaXhlZENvbnRlbnQpLmVhY2goZnVuY3Rpb24gKGluZGV4LCBlbGVtZW50KSB7XG4gICAgICAgICAgdmFyIGFjdHVhbFBhZGRpbmcgPSBlbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodDtcbiAgICAgICAgICB2YXIgY2FsY3VsYXRlZFBhZGRpbmcgPSAkKGVsZW1lbnQpLmNzcygncGFkZGluZy1yaWdodCcpO1xuICAgICAgICAgICQoZWxlbWVudCkuZGF0YSgncGFkZGluZy1yaWdodCcsIGFjdHVhbFBhZGRpbmcpLmNzcygncGFkZGluZy1yaWdodCcsIHBhcnNlRmxvYXQoY2FsY3VsYXRlZFBhZGRpbmcpICsgX3RoaXM5Ll9zY3JvbGxiYXJXaWR0aCArIFwicHhcIik7XG4gICAgICAgIH0pOyAvLyBBZGp1c3Qgc3RpY2t5IGNvbnRlbnQgbWFyZ2luXG5cbiAgICAgICAgJChzdGlja3lDb250ZW50KS5lYWNoKGZ1bmN0aW9uIChpbmRleCwgZWxlbWVudCkge1xuICAgICAgICAgIHZhciBhY3R1YWxNYXJnaW4gPSBlbGVtZW50LnN0eWxlLm1hcmdpblJpZ2h0O1xuICAgICAgICAgIHZhciBjYWxjdWxhdGVkTWFyZ2luID0gJChlbGVtZW50KS5jc3MoJ21hcmdpbi1yaWdodCcpO1xuICAgICAgICAgICQoZWxlbWVudCkuZGF0YSgnbWFyZ2luLXJpZ2h0JywgYWN0dWFsTWFyZ2luKS5jc3MoJ21hcmdpbi1yaWdodCcsIHBhcnNlRmxvYXQoY2FsY3VsYXRlZE1hcmdpbikgLSBfdGhpczkuX3Njcm9sbGJhcldpZHRoICsgXCJweFwiKTtcbiAgICAgICAgfSk7IC8vIEFkanVzdCBib2R5IHBhZGRpbmdcblxuICAgICAgICB2YXIgYWN0dWFsUGFkZGluZyA9IGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0O1xuICAgICAgICB2YXIgY2FsY3VsYXRlZFBhZGRpbmcgPSAkKGRvY3VtZW50LmJvZHkpLmNzcygncGFkZGluZy1yaWdodCcpO1xuICAgICAgICAkKGRvY3VtZW50LmJvZHkpLmRhdGEoJ3BhZGRpbmctcmlnaHQnLCBhY3R1YWxQYWRkaW5nKS5jc3MoJ3BhZGRpbmctcmlnaHQnLCBwYXJzZUZsb2F0KGNhbGN1bGF0ZWRQYWRkaW5nKSArIHRoaXMuX3Njcm9sbGJhcldpZHRoICsgXCJweFwiKTtcbiAgICAgIH1cblxuICAgICAgJChkb2N1bWVudC5ib2R5KS5hZGRDbGFzcyhDbGFzc05hbWUkNS5PUEVOKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9yZXNldFNjcm9sbGJhciA9IGZ1bmN0aW9uIF9yZXNldFNjcm9sbGJhcigpIHtcbiAgICAgIC8vIFJlc3RvcmUgZml4ZWQgY29udGVudCBwYWRkaW5nXG4gICAgICB2YXIgZml4ZWRDb250ZW50ID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFNlbGVjdG9yJDUuRklYRURfQ09OVEVOVCkpO1xuICAgICAgJChmaXhlZENvbnRlbnQpLmVhY2goZnVuY3Rpb24gKGluZGV4LCBlbGVtZW50KSB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gJChlbGVtZW50KS5kYXRhKCdwYWRkaW5nLXJpZ2h0Jyk7XG4gICAgICAgICQoZWxlbWVudCkucmVtb3ZlRGF0YSgncGFkZGluZy1yaWdodCcpO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9IHBhZGRpbmcgPyBwYWRkaW5nIDogJyc7XG4gICAgICB9KTsgLy8gUmVzdG9yZSBzdGlja3kgY29udGVudFxuXG4gICAgICB2YXIgZWxlbWVudHMgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJcIiArIFNlbGVjdG9yJDUuU1RJQ0tZX0NPTlRFTlQpKTtcbiAgICAgICQoZWxlbWVudHMpLmVhY2goZnVuY3Rpb24gKGluZGV4LCBlbGVtZW50KSB7XG4gICAgICAgIHZhciBtYXJnaW4gPSAkKGVsZW1lbnQpLmRhdGEoJ21hcmdpbi1yaWdodCcpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgbWFyZ2luICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICQoZWxlbWVudCkuY3NzKCdtYXJnaW4tcmlnaHQnLCBtYXJnaW4pLnJlbW92ZURhdGEoJ21hcmdpbi1yaWdodCcpO1xuICAgICAgICB9XG4gICAgICB9KTsgLy8gUmVzdG9yZSBib2R5IHBhZGRpbmdcblxuICAgICAgdmFyIHBhZGRpbmcgPSAkKGRvY3VtZW50LmJvZHkpLmRhdGEoJ3BhZGRpbmctcmlnaHQnKTtcbiAgICAgICQoZG9jdW1lbnQuYm9keSkucmVtb3ZlRGF0YSgncGFkZGluZy1yaWdodCcpO1xuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQgPSBwYWRkaW5nID8gcGFkZGluZyA6ICcnO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldFNjcm9sbGJhcldpZHRoID0gZnVuY3Rpb24gX2dldFNjcm9sbGJhcldpZHRoKCkge1xuICAgICAgLy8gdGh4IGQud2Fsc2hcbiAgICAgIHZhciBzY3JvbGxEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHNjcm9sbERpdi5jbGFzc05hbWUgPSBDbGFzc05hbWUkNS5TQ1JPTExCQVJfTUVBU1VSRVI7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcm9sbERpdik7XG4gICAgICB2YXIgc2Nyb2xsYmFyV2lkdGggPSBzY3JvbGxEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLSBzY3JvbGxEaXYuY2xpZW50V2lkdGg7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHNjcm9sbERpdik7XG4gICAgICByZXR1cm4gc2Nyb2xsYmFyV2lkdGg7XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBNb2RhbC5falF1ZXJ5SW50ZXJmYWNlID0gZnVuY3Rpb24gX2pRdWVyeUludGVyZmFjZShjb25maWcsIHJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YShEQVRBX0tFWSQ1KTtcblxuICAgICAgICB2YXIgX2NvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIERlZmF1bHQkMywgJCh0aGlzKS5kYXRhKCksIHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZyA/IGNvbmZpZyA6IHt9KTtcblxuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICBkYXRhID0gbmV3IE1vZGFsKHRoaXMsIF9jb25maWcpO1xuICAgICAgICAgICQodGhpcykuZGF0YShEQVRBX0tFWSQ1LCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIG1ldGhvZCBuYW1lZCBcXFwiXCIgKyBjb25maWcgKyBcIlxcXCJcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YVtjb25maWddKHJlbGF0ZWRUYXJnZXQpO1xuICAgICAgICB9IGVsc2UgaWYgKF9jb25maWcuc2hvdykge1xuICAgICAgICAgIGRhdGEuc2hvdyhyZWxhdGVkVGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9jcmVhdGVDbGFzcyhNb2RhbCwgbnVsbCwgW3tcbiAgICAgIGtleTogXCJWRVJTSU9OXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIFZFUlNJT04kNTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiRGVmYXVsdFwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBEZWZhdWx0JDM7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIE1vZGFsO1xuICB9KCk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJChkb2N1bWVudCkub24oRXZlbnQkNS5DTElDS19EQVRBX0FQSSwgU2VsZWN0b3IkNS5EQVRBX1RPR0dMRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIF90aGlzMTAgPSB0aGlzO1xuXG4gICAgdmFyIHRhcmdldDtcbiAgICB2YXIgc2VsZWN0b3IgPSBVdGlsLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodGhpcyk7XG5cbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgIHRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgIH1cblxuICAgIHZhciBjb25maWcgPSAkKHRhcmdldCkuZGF0YShEQVRBX0tFWSQ1KSA/ICd0b2dnbGUnIDogX29iamVjdFNwcmVhZCh7fSwgJCh0YXJnZXQpLmRhdGEoKSwgJCh0aGlzKS5kYXRhKCkpO1xuXG4gICAgaWYgKHRoaXMudGFnTmFtZSA9PT0gJ0EnIHx8IHRoaXMudGFnTmFtZSA9PT0gJ0FSRUEnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciAkdGFyZ2V0ID0gJCh0YXJnZXQpLm9uZShFdmVudCQ1LlNIT1csIGZ1bmN0aW9uIChzaG93RXZlbnQpIHtcbiAgICAgIGlmIChzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgLy8gT25seSByZWdpc3RlciBmb2N1cyByZXN0b3JlciBpZiBtb2RhbCB3aWxsIGFjdHVhbGx5IGdldCBzaG93blxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgICR0YXJnZXQub25lKEV2ZW50JDUuSElEREVOLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICgkKF90aGlzMTApLmlzKCc6dmlzaWJsZScpKSB7XG4gICAgICAgICAgX3RoaXMxMC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIE1vZGFsLl9qUXVlcnlJbnRlcmZhY2UuY2FsbCgkKHRhcmdldCksIGNvbmZpZywgdGhpcyk7XG4gIH0pO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIGpRdWVyeVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgJC5mbltOQU1FJDVdID0gTW9kYWwuX2pRdWVyeUludGVyZmFjZTtcbiAgJC5mbltOQU1FJDVdLkNvbnN0cnVjdG9yID0gTW9kYWw7XG5cbiAgJC5mbltOQU1FJDVdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbltOQU1FJDVdID0gSlFVRVJZX05PX0NPTkZMSUNUJDU7XG4gICAgcmV0dXJuIE1vZGFsLl9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCAodjQuMy4xKTogdG9vbHMvc2FuaXRpemVyLmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuICB2YXIgdXJpQXR0cnMgPSBbJ2JhY2tncm91bmQnLCAnY2l0ZScsICdocmVmJywgJ2l0ZW10eXBlJywgJ2xvbmdkZXNjJywgJ3Bvc3RlcicsICdzcmMnLCAneGxpbms6aHJlZiddO1xuICB2YXIgQVJJQV9BVFRSSUJVVEVfUEFUVEVSTiA9IC9eYXJpYS1bXFx3LV0qJC9pO1xuICB2YXIgRGVmYXVsdFdoaXRlbGlzdCA9IHtcbiAgICAvLyBHbG9iYWwgYXR0cmlidXRlcyBhbGxvd2VkIG9uIGFueSBzdXBwbGllZCBlbGVtZW50IGJlbG93LlxuICAgICcqJzogWydjbGFzcycsICdkaXInLCAnaWQnLCAnbGFuZycsICdyb2xlJywgQVJJQV9BVFRSSUJVVEVfUEFUVEVSTl0sXG4gICAgYTogWyd0YXJnZXQnLCAnaHJlZicsICd0aXRsZScsICdyZWwnXSxcbiAgICBhcmVhOiBbXSxcbiAgICBiOiBbXSxcbiAgICBicjogW10sXG4gICAgY29sOiBbXSxcbiAgICBjb2RlOiBbXSxcbiAgICBkaXY6IFtdLFxuICAgIGVtOiBbXSxcbiAgICBocjogW10sXG4gICAgaDE6IFtdLFxuICAgIGgyOiBbXSxcbiAgICBoMzogW10sXG4gICAgaDQ6IFtdLFxuICAgIGg1OiBbXSxcbiAgICBoNjogW10sXG4gICAgaTogW10sXG4gICAgaW1nOiBbJ3NyYycsICdhbHQnLCAndGl0bGUnLCAnd2lkdGgnLCAnaGVpZ2h0J10sXG4gICAgbGk6IFtdLFxuICAgIG9sOiBbXSxcbiAgICBwOiBbXSxcbiAgICBwcmU6IFtdLFxuICAgIHM6IFtdLFxuICAgIHNtYWxsOiBbXSxcbiAgICBzcGFuOiBbXSxcbiAgICBzdWI6IFtdLFxuICAgIHN1cDogW10sXG4gICAgc3Ryb25nOiBbXSxcbiAgICB1OiBbXSxcbiAgICB1bDogW11cbiAgICAvKipcbiAgICAgKiBBIHBhdHRlcm4gdGhhdCByZWNvZ25pemVzIGEgY29tbW9ubHkgdXNlZnVsIHN1YnNldCBvZiBVUkxzIHRoYXQgYXJlIHNhZmUuXG4gICAgICpcbiAgICAgKiBTaG91dG91dCB0byBBbmd1bGFyIDcgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iLzcuMi40L3BhY2thZ2VzL2NvcmUvc3JjL3Nhbml0aXphdGlvbi91cmxfc2FuaXRpemVyLnRzXG4gICAgICovXG5cbiAgfTtcbiAgdmFyIFNBRkVfVVJMX1BBVFRFUk4gPSAvXig/Oig/Omh0dHBzP3xtYWlsdG98ZnRwfHRlbHxmaWxlKTp8W14mOi8/I10qKD86Wy8/I118JCkpL2dpO1xuICAvKipcbiAgICogQSBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBzYWZlIGRhdGEgVVJMcy4gT25seSBtYXRjaGVzIGltYWdlLCB2aWRlbyBhbmQgYXVkaW8gdHlwZXMuXG4gICAqXG4gICAqIFNob3V0b3V0IHRvIEFuZ3VsYXIgNyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2Jsb2IvNy4yLjQvcGFja2FnZXMvY29yZS9zcmMvc2FuaXRpemF0aW9uL3VybF9zYW5pdGl6ZXIudHNcbiAgICovXG5cbiAgdmFyIERBVEFfVVJMX1BBVFRFUk4gPSAvXmRhdGE6KD86aW1hZ2VcXC8oPzpibXB8Z2lmfGpwZWd8anBnfHBuZ3x0aWZmfHdlYnApfHZpZGVvXFwvKD86bXBlZ3xtcDR8b2dnfHdlYm0pfGF1ZGlvXFwvKD86bXAzfG9nYXxvZ2d8b3B1cykpO2Jhc2U2NCxbYS16MC05Ky9dKz0qJC9pO1xuXG4gIGZ1bmN0aW9uIGFsbG93ZWRBdHRyaWJ1dGUoYXR0ciwgYWxsb3dlZEF0dHJpYnV0ZUxpc3QpIHtcbiAgICB2YXIgYXR0ck5hbWUgPSBhdHRyLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoYWxsb3dlZEF0dHJpYnV0ZUxpc3QuaW5kZXhPZihhdHRyTmFtZSkgIT09IC0xKSB7XG4gICAgICBpZiAodXJpQXR0cnMuaW5kZXhPZihhdHRyTmFtZSkgIT09IC0xKSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKGF0dHIubm9kZVZhbHVlLm1hdGNoKFNBRkVfVVJMX1BBVFRFUk4pIHx8IGF0dHIubm9kZVZhbHVlLm1hdGNoKERBVEFfVVJMX1BBVFRFUk4pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHJlZ0V4cCA9IGFsbG93ZWRBdHRyaWJ1dGVMaXN0LmZpbHRlcihmdW5jdGlvbiAoYXR0clJlZ2V4KSB7XG4gICAgICByZXR1cm4gYXR0clJlZ2V4IGluc3RhbmNlb2YgUmVnRXhwO1xuICAgIH0pOyAvLyBDaGVjayBpZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB2YWxpZGF0ZXMgdGhlIGF0dHJpYnV0ZS5cblxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gcmVnRXhwLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGF0dHJOYW1lLm1hdGNoKHJlZ0V4cFtpXSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2FuaXRpemVIdG1sKHVuc2FmZUh0bWwsIHdoaXRlTGlzdCwgc2FuaXRpemVGbikge1xuICAgIGlmICh1bnNhZmVIdG1sLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuc2FmZUh0bWw7XG4gICAgfVxuXG4gICAgaWYgKHNhbml0aXplRm4gJiYgdHlwZW9mIHNhbml0aXplRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBzYW5pdGl6ZUZuKHVuc2FmZUh0bWwpO1xuICAgIH1cblxuICAgIHZhciBkb21QYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuICAgIHZhciBjcmVhdGVkRG9jdW1lbnQgPSBkb21QYXJzZXIucGFyc2VGcm9tU3RyaW5nKHVuc2FmZUh0bWwsICd0ZXh0L2h0bWwnKTtcbiAgICB2YXIgd2hpdGVsaXN0S2V5cyA9IE9iamVjdC5rZXlzKHdoaXRlTGlzdCk7XG4gICAgdmFyIGVsZW1lbnRzID0gW10uc2xpY2UuY2FsbChjcmVhdGVkRG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKCcqJykpO1xuXG4gICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoaSwgbGVuKSB7XG4gICAgICB2YXIgZWwgPSBlbGVtZW50c1tpXTtcbiAgICAgIHZhciBlbE5hbWUgPSBlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBpZiAod2hpdGVsaXN0S2V5cy5pbmRleE9mKGVsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpID09PSAtMSkge1xuICAgICAgICBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcbiAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcbiAgICAgIH1cblxuICAgICAgdmFyIGF0dHJpYnV0ZUxpc3QgPSBbXS5zbGljZS5jYWxsKGVsLmF0dHJpYnV0ZXMpO1xuICAgICAgdmFyIHdoaXRlbGlzdGVkQXR0cmlidXRlcyA9IFtdLmNvbmNhdCh3aGl0ZUxpc3RbJyonXSB8fCBbXSwgd2hpdGVMaXN0W2VsTmFtZV0gfHwgW10pO1xuICAgICAgYXR0cmlidXRlTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyKSB7XG4gICAgICAgIGlmICghYWxsb3dlZEF0dHJpYnV0ZShhdHRyLCB3aGl0ZWxpc3RlZEF0dHJpYnV0ZXMpKSB7XG4gICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGF0dHIubm9kZU5hbWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGVsZW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB2YXIgX3JldCA9IF9sb29wKGksIGxlbik7XG5cbiAgICAgIGlmIChfcmV0ID09PSBcImNvbnRpbnVlXCIpIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVkRG9jdW1lbnQuYm9keS5pbm5lckhUTUw7XG4gIH1cblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIENvbnN0YW50c1xuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgdmFyIE5BTUUkNiA9ICd0b29sdGlwJztcbiAgdmFyIFZFUlNJT04kNiA9ICc0LjMuMSc7XG4gIHZhciBEQVRBX0tFWSQ2ID0gJ2JzLnRvb2x0aXAnO1xuICB2YXIgRVZFTlRfS0VZJDYgPSBcIi5cIiArIERBVEFfS0VZJDY7XG4gIHZhciBKUVVFUllfTk9fQ09ORkxJQ1QkNiA9ICQuZm5bTkFNRSQ2XTtcbiAgdmFyIENMQVNTX1BSRUZJWCA9ICdicy10b29sdGlwJztcbiAgdmFyIEJTQ0xTX1BSRUZJWF9SRUdFWCA9IG5ldyBSZWdFeHAoXCIoXnxcXFxccylcIiArIENMQVNTX1BSRUZJWCArIFwiXFxcXFMrXCIsICdnJyk7XG4gIHZhciBESVNBTExPV0VEX0FUVFJJQlVURVMgPSBbJ3Nhbml0aXplJywgJ3doaXRlTGlzdCcsICdzYW5pdGl6ZUZuJ107XG4gIHZhciBEZWZhdWx0VHlwZSQ0ID0ge1xuICAgIGFuaW1hdGlvbjogJ2Jvb2xlYW4nLFxuICAgIHRlbXBsYXRlOiAnc3RyaW5nJyxcbiAgICB0aXRsZTogJyhzdHJpbmd8ZWxlbWVudHxmdW5jdGlvbiknLFxuICAgIHRyaWdnZXI6ICdzdHJpbmcnLFxuICAgIGRlbGF5OiAnKG51bWJlcnxvYmplY3QpJyxcbiAgICBodG1sOiAnYm9vbGVhbicsXG4gICAgc2VsZWN0b3I6ICcoc3RyaW5nfGJvb2xlYW4pJyxcbiAgICBwbGFjZW1lbnQ6ICcoc3RyaW5nfGZ1bmN0aW9uKScsXG4gICAgb2Zmc2V0OiAnKG51bWJlcnxzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgICBjb250YWluZXI6ICcoc3RyaW5nfGVsZW1lbnR8Ym9vbGVhbiknLFxuICAgIGZhbGxiYWNrUGxhY2VtZW50OiAnKHN0cmluZ3xhcnJheSknLFxuICAgIGJvdW5kYXJ5OiAnKHN0cmluZ3xlbGVtZW50KScsXG4gICAgc2FuaXRpemU6ICdib29sZWFuJyxcbiAgICBzYW5pdGl6ZUZuOiAnKG51bGx8ZnVuY3Rpb24pJyxcbiAgICB3aGl0ZUxpc3Q6ICdvYmplY3QnXG4gIH07XG4gIHZhciBBdHRhY2htZW50TWFwJDEgPSB7XG4gICAgQVVUTzogJ2F1dG8nLFxuICAgIFRPUDogJ3RvcCcsXG4gICAgUklHSFQ6ICdyaWdodCcsXG4gICAgQk9UVE9NOiAnYm90dG9tJyxcbiAgICBMRUZUOiAnbGVmdCdcbiAgfTtcbiAgdmFyIERlZmF1bHQkNCA9IHtcbiAgICBhbmltYXRpb246IHRydWUsXG4gICAgdGVtcGxhdGU6ICc8ZGl2IGNsYXNzPVwidG9vbHRpcFwiIHJvbGU9XCJ0b29sdGlwXCI+JyArICc8ZGl2IGNsYXNzPVwiYXJyb3dcIj48L2Rpdj4nICsgJzxkaXYgY2xhc3M9XCJ0b29sdGlwLWlubmVyXCI+PC9kaXY+PC9kaXY+JyxcbiAgICB0cmlnZ2VyOiAnaG92ZXIgZm9jdXMnLFxuICAgIHRpdGxlOiAnJyxcbiAgICBkZWxheTogMCxcbiAgICBodG1sOiBmYWxzZSxcbiAgICBzZWxlY3RvcjogZmFsc2UsXG4gICAgcGxhY2VtZW50OiAndG9wJyxcbiAgICBvZmZzZXQ6IDAsXG4gICAgY29udGFpbmVyOiBmYWxzZSxcbiAgICBmYWxsYmFja1BsYWNlbWVudDogJ2ZsaXAnLFxuICAgIGJvdW5kYXJ5OiAnc2Nyb2xsUGFyZW50JyxcbiAgICBzYW5pdGl6ZTogdHJ1ZSxcbiAgICBzYW5pdGl6ZUZuOiBudWxsLFxuICAgIHdoaXRlTGlzdDogRGVmYXVsdFdoaXRlbGlzdFxuICB9O1xuICB2YXIgSG92ZXJTdGF0ZSA9IHtcbiAgICBTSE9XOiAnc2hvdycsXG4gICAgT1VUOiAnb3V0J1xuICB9O1xuICB2YXIgRXZlbnQkNiA9IHtcbiAgICBISURFOiBcImhpZGVcIiArIEVWRU5UX0tFWSQ2LFxuICAgIEhJRERFTjogXCJoaWRkZW5cIiArIEVWRU5UX0tFWSQ2LFxuICAgIFNIT1c6IFwic2hvd1wiICsgRVZFTlRfS0VZJDYsXG4gICAgU0hPV046IFwic2hvd25cIiArIEVWRU5UX0tFWSQ2LFxuICAgIElOU0VSVEVEOiBcImluc2VydGVkXCIgKyBFVkVOVF9LRVkkNixcbiAgICBDTElDSzogXCJjbGlja1wiICsgRVZFTlRfS0VZJDYsXG4gICAgRk9DVVNJTjogXCJmb2N1c2luXCIgKyBFVkVOVF9LRVkkNixcbiAgICBGT0NVU09VVDogXCJmb2N1c291dFwiICsgRVZFTlRfS0VZJDYsXG4gICAgTU9VU0VFTlRFUjogXCJtb3VzZWVudGVyXCIgKyBFVkVOVF9LRVkkNixcbiAgICBNT1VTRUxFQVZFOiBcIm1vdXNlbGVhdmVcIiArIEVWRU5UX0tFWSQ2XG4gIH07XG4gIHZhciBDbGFzc05hbWUkNiA9IHtcbiAgICBGQURFOiAnZmFkZScsXG4gICAgU0hPVzogJ3Nob3cnXG4gIH07XG4gIHZhciBTZWxlY3RvciQ2ID0ge1xuICAgIFRPT0xUSVA6ICcudG9vbHRpcCcsXG4gICAgVE9PTFRJUF9JTk5FUjogJy50b29sdGlwLWlubmVyJyxcbiAgICBBUlJPVzogJy5hcnJvdydcbiAgfTtcbiAgdmFyIFRyaWdnZXIgPSB7XG4gICAgSE9WRVI6ICdob3ZlcicsXG4gICAgRk9DVVM6ICdmb2N1cycsXG4gICAgQ0xJQ0s6ICdjbGljaycsXG4gICAgTUFOVUFMOiAnbWFudWFsJ1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIENsYXNzIERlZmluaXRpb25cbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuICB9O1xuXG4gIHZhciBUb29sdGlwID1cbiAgLyojX19QVVJFX18qL1xuICBmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVG9vbHRpcChlbGVtZW50LCBjb25maWcpIHtcbiAgICAgIC8qKlxuICAgICAgICogQ2hlY2sgZm9yIFBvcHBlciBkZXBlbmRlbmN5XG4gICAgICAgKiBQb3BwZXIgLSBodHRwczovL3BvcHBlci5qcy5vcmdcbiAgICAgICAqL1xuICAgICAgaWYgKHR5cGVvZiBQb3BwZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Jvb3RzdHJhcFxcJ3MgdG9vbHRpcHMgcmVxdWlyZSBQb3BwZXIuanMgKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy8pJyk7XG4gICAgICB9IC8vIHByaXZhdGVcblxuXG4gICAgICB0aGlzLl9pc0VuYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fdGltZW91dCA9IDA7XG4gICAgICB0aGlzLl9ob3ZlclN0YXRlID0gJyc7XG4gICAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyID0ge307XG4gICAgICB0aGlzLl9wb3BwZXIgPSBudWxsOyAvLyBQcm90ZWN0ZWRcblxuICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgIHRoaXMuY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgICB0aGlzLnRpcCA9IG51bGw7XG5cbiAgICAgIHRoaXMuX3NldExpc3RlbmVycygpO1xuICAgIH0gLy8gR2V0dGVyc1xuXG5cbiAgICB2YXIgX3Byb3RvID0gVG9vbHRpcC5wcm90b3R5cGU7XG5cbiAgICAvLyBQdWJsaWNcbiAgICBfcHJvdG8uZW5hYmxlID0gZnVuY3Rpb24gZW5hYmxlKCkge1xuICAgICAgdGhpcy5faXNFbmFibGVkID0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmRpc2FibGUgPSBmdW5jdGlvbiBkaXNhYmxlKCkge1xuICAgICAgdGhpcy5faXNFbmFibGVkID0gZmFsc2U7XG4gICAgfTtcblxuICAgIF9wcm90by50b2dnbGVFbmFibGVkID0gZnVuY3Rpb24gdG9nZ2xlRW5hYmxlZCgpIHtcbiAgICAgIHRoaXMuX2lzRW5hYmxlZCA9ICF0aGlzLl9pc0VuYWJsZWQ7XG4gICAgfTtcblxuICAgIF9wcm90by50b2dnbGUgPSBmdW5jdGlvbiB0b2dnbGUoZXZlbnQpIHtcbiAgICAgIGlmICghdGhpcy5faXNFbmFibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgIHZhciBkYXRhS2V5ID0gdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWTtcbiAgICAgICAgdmFyIGNvbnRleHQgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmRhdGEoZGF0YUtleSk7XG5cbiAgICAgICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICAgICAgY29udGV4dCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKGV2ZW50LmN1cnJlbnRUYXJnZXQsIHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkpO1xuICAgICAgICAgICQoZXZlbnQuY3VycmVudFRhcmdldCkuZGF0YShkYXRhS2V5LCBjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQuX2FjdGl2ZVRyaWdnZXIuY2xpY2sgPSAhY29udGV4dC5fYWN0aXZlVHJpZ2dlci5jbGljaztcblxuICAgICAgICBpZiAoY29udGV4dC5faXNXaXRoQWN0aXZlVHJpZ2dlcigpKSB7XG4gICAgICAgICAgY29udGV4dC5fZW50ZXIobnVsbCwgY29udGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGV4dC5fbGVhdmUobnVsbCwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICgkKHRoaXMuZ2V0VGlwRWxlbWVudCgpKS5oYXNDbGFzcyhDbGFzc05hbWUkNi5TSE9XKSkge1xuICAgICAgICAgIHRoaXMuX2xlYXZlKG51bGwsIHRoaXMpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZW50ZXIobnVsbCwgdGhpcyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5kaXNwb3NlID0gZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICAgICQucmVtb3ZlRGF0YSh0aGlzLmVsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVkpO1xuICAgICAgJCh0aGlzLmVsZW1lbnQpLm9mZih0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0tFWSk7XG4gICAgICAkKHRoaXMuZWxlbWVudCkuY2xvc2VzdCgnLm1vZGFsJykub2ZmKCdoaWRlLmJzLm1vZGFsJyk7XG5cbiAgICAgIGlmICh0aGlzLnRpcCkge1xuICAgICAgICAkKHRoaXMudGlwKS5yZW1vdmUoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faXNFbmFibGVkID0gbnVsbDtcbiAgICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsO1xuICAgICAgdGhpcy5faG92ZXJTdGF0ZSA9IG51bGw7XG4gICAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyID0gbnVsbDtcblxuICAgICAgaWYgKHRoaXMuX3BvcHBlciAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9wb3BwZXIuZGVzdHJveSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9wb3BwZXIgPSBudWxsO1xuICAgICAgdGhpcy5lbGVtZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuY29uZmlnID0gbnVsbDtcbiAgICAgIHRoaXMudGlwID0gbnVsbDtcbiAgICB9O1xuXG4gICAgX3Byb3RvLnNob3cgPSBmdW5jdGlvbiBzaG93KCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKCQodGhpcy5lbGVtZW50KS5jc3MoJ2Rpc3BsYXknKSA9PT0gJ25vbmUnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHVzZSBzaG93IG9uIHZpc2libGUgZWxlbWVudHMnKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHNob3dFdmVudCA9ICQuRXZlbnQodGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5TSE9XKTtcblxuICAgICAgaWYgKHRoaXMuaXNXaXRoQ29udGVudCgpICYmIHRoaXMuX2lzRW5hYmxlZCkge1xuICAgICAgICAkKHRoaXMuZWxlbWVudCkudHJpZ2dlcihzaG93RXZlbnQpO1xuICAgICAgICB2YXIgc2hhZG93Um9vdCA9IFV0aWwuZmluZFNoYWRvd1Jvb3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgdmFyIGlzSW5UaGVEb20gPSAkLmNvbnRhaW5zKHNoYWRvd1Jvb3QgIT09IG51bGwgPyBzaGFkb3dSb290IDogdGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCB0aGlzLmVsZW1lbnQpO1xuXG4gICAgICAgIGlmIChzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgfHwgIWlzSW5UaGVEb20pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdGlwID0gdGhpcy5nZXRUaXBFbGVtZW50KCk7XG4gICAgICAgIHZhciB0aXBJZCA9IFV0aWwuZ2V0VUlEKHRoaXMuY29uc3RydWN0b3IuTkFNRSk7XG4gICAgICAgIHRpcC5zZXRBdHRyaWJ1dGUoJ2lkJywgdGlwSWQpO1xuICAgICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgdGlwSWQpO1xuICAgICAgICB0aGlzLnNldENvbnRlbnQoKTtcblxuICAgICAgICBpZiAodGhpcy5jb25maWcuYW5pbWF0aW9uKSB7XG4gICAgICAgICAgJCh0aXApLmFkZENsYXNzKENsYXNzTmFtZSQ2LkZBREUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBsYWNlbWVudCA9IHR5cGVvZiB0aGlzLmNvbmZpZy5wbGFjZW1lbnQgPT09ICdmdW5jdGlvbicgPyB0aGlzLmNvbmZpZy5wbGFjZW1lbnQuY2FsbCh0aGlzLCB0aXAsIHRoaXMuZWxlbWVudCkgOiB0aGlzLmNvbmZpZy5wbGFjZW1lbnQ7XG5cbiAgICAgICAgdmFyIGF0dGFjaG1lbnQgPSB0aGlzLl9nZXRBdHRhY2htZW50KHBsYWNlbWVudCk7XG5cbiAgICAgICAgdGhpcy5hZGRBdHRhY2htZW50Q2xhc3MoYXR0YWNobWVudCk7XG5cbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IHRoaXMuX2dldENvbnRhaW5lcigpO1xuXG4gICAgICAgICQodGlwKS5kYXRhKHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVksIHRoaXMpO1xuXG4gICAgICAgIGlmICghJC5jb250YWlucyh0aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHRoaXMudGlwKSkge1xuICAgICAgICAgICQodGlwKS5hcHBlbmRUbyhjb250YWluZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgJCh0aGlzLmVsZW1lbnQpLnRyaWdnZXIodGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5JTlNFUlRFRCk7XG4gICAgICAgIHRoaXMuX3BvcHBlciA9IG5ldyBQb3BwZXIodGhpcy5lbGVtZW50LCB0aXAsIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6IGF0dGFjaG1lbnQsXG4gICAgICAgICAgbW9kaWZpZXJzOiB7XG4gICAgICAgICAgICBvZmZzZXQ6IHRoaXMuX2dldE9mZnNldCgpLFxuICAgICAgICAgICAgZmxpcDoge1xuICAgICAgICAgICAgICBiZWhhdmlvcjogdGhpcy5jb25maWcuZmFsbGJhY2tQbGFjZW1lbnRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhcnJvdzoge1xuICAgICAgICAgICAgICBlbGVtZW50OiBTZWxlY3RvciQ2LkFSUk9XXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJldmVudE92ZXJmbG93OiB7XG4gICAgICAgICAgICAgIGJvdW5kYXJpZXNFbGVtZW50OiB0aGlzLmNvbmZpZy5ib3VuZGFyeVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25DcmVhdGU6IGZ1bmN0aW9uIG9uQ3JlYXRlKGRhdGEpIHtcbiAgICAgICAgICAgIGlmIChkYXRhLm9yaWdpbmFsUGxhY2VtZW50ICE9PSBkYXRhLnBsYWNlbWVudCkge1xuICAgICAgICAgICAgICBfdGhpcy5faGFuZGxlUG9wcGVyUGxhY2VtZW50Q2hhbmdlKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25VcGRhdGU6IGZ1bmN0aW9uIG9uVXBkYXRlKGRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5faGFuZGxlUG9wcGVyUGxhY2VtZW50Q2hhbmdlKGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgICQodGlwKS5hZGRDbGFzcyhDbGFzc05hbWUkNi5TSE9XKTsgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIGFkZCBleHRyYVxuICAgICAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHRvIHRoZSBib2R5J3MgaW1tZWRpYXRlIGNoaWxkcmVuO1xuICAgICAgICAvLyBvbmx5IG5lZWRlZCBiZWNhdXNlIG9mIGJyb2tlbiBldmVudCBkZWxlZ2F0aW9uIG9uIGlPU1xuICAgICAgICAvLyBodHRwczovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMTQvMDIvbW91c2VfZXZlbnRfYnViLmh0bWxcblxuICAgICAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgICAgJChkb2N1bWVudC5ib2R5KS5jaGlsZHJlbigpLm9uKCdtb3VzZW92ZXInLCBudWxsLCAkLm5vb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24gY29tcGxldGUoKSB7XG4gICAgICAgICAgaWYgKF90aGlzLmNvbmZpZy5hbmltYXRpb24pIHtcbiAgICAgICAgICAgIF90aGlzLl9maXhUcmFuc2l0aW9uKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHByZXZIb3ZlclN0YXRlID0gX3RoaXMuX2hvdmVyU3RhdGU7XG4gICAgICAgICAgX3RoaXMuX2hvdmVyU3RhdGUgPSBudWxsO1xuICAgICAgICAgICQoX3RoaXMuZWxlbWVudCkudHJpZ2dlcihfdGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5TSE9XTik7XG5cbiAgICAgICAgICBpZiAocHJldkhvdmVyU3RhdGUgPT09IEhvdmVyU3RhdGUuT1VUKSB7XG4gICAgICAgICAgICBfdGhpcy5fbGVhdmUobnVsbCwgX3RoaXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoJCh0aGlzLnRpcCkuaGFzQ2xhc3MoQ2xhc3NOYW1lJDYuRkFERSkpIHtcbiAgICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLnRpcCk7XG4gICAgICAgICAgJCh0aGlzLnRpcCkub25lKFV0aWwuVFJBTlNJVElPTl9FTkQsIGNvbXBsZXRlKS5lbXVsYXRlVHJhbnNpdGlvbkVuZCh0cmFuc2l0aW9uRHVyYXRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLmhpZGUgPSBmdW5jdGlvbiBoaWRlKGNhbGxiYWNrKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIHRpcCA9IHRoaXMuZ2V0VGlwRWxlbWVudCgpO1xuICAgICAgdmFyIGhpZGVFdmVudCA9ICQuRXZlbnQodGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5ISURFKTtcblxuICAgICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24gY29tcGxldGUoKSB7XG4gICAgICAgIGlmIChfdGhpczIuX2hvdmVyU3RhdGUgIT09IEhvdmVyU3RhdGUuU0hPVyAmJiB0aXAucGFyZW50Tm9kZSkge1xuICAgICAgICAgIHRpcC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRpcCk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczIuX2NsZWFuVGlwQ2xhc3MoKTtcblxuICAgICAgICBfdGhpczIuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknKTtcblxuICAgICAgICAkKF90aGlzMi5lbGVtZW50KS50cmlnZ2VyKF90aGlzMi5jb25zdHJ1Y3Rvci5FdmVudC5ISURERU4pO1xuXG4gICAgICAgIGlmIChfdGhpczIuX3BvcHBlciAhPT0gbnVsbCkge1xuICAgICAgICAgIF90aGlzMi5fcG9wcGVyLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgICQodGhpcy5lbGVtZW50KS50cmlnZ2VyKGhpZGVFdmVudCk7XG5cbiAgICAgIGlmIChoaWRlRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAkKHRpcCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lJDYuU0hPVyk7IC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSByZW1vdmUgdGhlIGV4dHJhXG4gICAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHdlIGFkZGVkIGZvciBpT1Mgc3VwcG9ydFxuXG4gICAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgICQoZG9jdW1lbnQuYm9keSkuY2hpbGRyZW4oKS5vZmYoJ21vdXNlb3ZlcicsIG51bGwsICQubm9vcCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVHJpZ2dlci5DTElDS10gPSBmYWxzZTtcbiAgICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVHJpZ2dlci5GT0NVU10gPSBmYWxzZTtcbiAgICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVHJpZ2dlci5IT1ZFUl0gPSBmYWxzZTtcblxuICAgICAgaWYgKCQodGhpcy50aXApLmhhc0NsYXNzKENsYXNzTmFtZSQ2LkZBREUpKSB7XG4gICAgICAgIHZhciB0cmFuc2l0aW9uRHVyYXRpb24gPSBVdGlsLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRpcCk7XG4gICAgICAgICQodGlwKS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgY29tcGxldGUpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9ob3ZlclN0YXRlID0gJyc7XG4gICAgfTtcblxuICAgIF9wcm90by51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICBpZiAodGhpcy5fcG9wcGVyICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX3BvcHBlci5zY2hlZHVsZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH0gLy8gUHJvdGVjdGVkXG4gICAgO1xuXG4gICAgX3Byb3RvLmlzV2l0aENvbnRlbnQgPSBmdW5jdGlvbiBpc1dpdGhDb250ZW50KCkge1xuICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5nZXRUaXRsZSgpKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmFkZEF0dGFjaG1lbnRDbGFzcyA9IGZ1bmN0aW9uIGFkZEF0dGFjaG1lbnRDbGFzcyhhdHRhY2htZW50KSB7XG4gICAgICAkKHRoaXMuZ2V0VGlwRWxlbWVudCgpKS5hZGRDbGFzcyhDTEFTU19QUkVGSVggKyBcIi1cIiArIGF0dGFjaG1lbnQpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uZ2V0VGlwRWxlbWVudCA9IGZ1bmN0aW9uIGdldFRpcEVsZW1lbnQoKSB7XG4gICAgICB0aGlzLnRpcCA9IHRoaXMudGlwIHx8ICQodGhpcy5jb25maWcudGVtcGxhdGUpWzBdO1xuICAgICAgcmV0dXJuIHRoaXMudGlwO1xuICAgIH07XG5cbiAgICBfcHJvdG8uc2V0Q29udGVudCA9IGZ1bmN0aW9uIHNldENvbnRlbnQoKSB7XG4gICAgICB2YXIgdGlwID0gdGhpcy5nZXRUaXBFbGVtZW50KCk7XG4gICAgICB0aGlzLnNldEVsZW1lbnRDb250ZW50KCQodGlwLnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IkNi5UT09MVElQX0lOTkVSKSksIHRoaXMuZ2V0VGl0bGUoKSk7XG4gICAgICAkKHRpcCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lJDYuRkFERSArIFwiIFwiICsgQ2xhc3NOYW1lJDYuU0hPVyk7XG4gICAgfTtcblxuICAgIF9wcm90by5zZXRFbGVtZW50Q29udGVudCA9IGZ1bmN0aW9uIHNldEVsZW1lbnRDb250ZW50KCRlbGVtZW50LCBjb250ZW50KSB7XG4gICAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdvYmplY3QnICYmIChjb250ZW50Lm5vZGVUeXBlIHx8IGNvbnRlbnQuanF1ZXJ5KSkge1xuICAgICAgICAvLyBDb250ZW50IGlzIGEgRE9NIG5vZGUgb3IgYSBqUXVlcnlcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmh0bWwpIHtcbiAgICAgICAgICBpZiAoISQoY29udGVudCkucGFyZW50KCkuaXMoJGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAkZWxlbWVudC5lbXB0eSgpLmFwcGVuZChjb250ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgJGVsZW1lbnQudGV4dCgkKGNvbnRlbnQpLnRleHQoKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbmZpZy5odG1sKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5zYW5pdGl6ZSkge1xuICAgICAgICAgIGNvbnRlbnQgPSBzYW5pdGl6ZUh0bWwoY29udGVudCwgdGhpcy5jb25maWcud2hpdGVMaXN0LCB0aGlzLmNvbmZpZy5zYW5pdGl6ZUZuKTtcbiAgICAgICAgfVxuXG4gICAgICAgICRlbGVtZW50Lmh0bWwoY29udGVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkZWxlbWVudC50ZXh0KGNvbnRlbnQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uZ2V0VGl0bGUgPSBmdW5jdGlvbiBnZXRUaXRsZSgpIHtcbiAgICAgIHZhciB0aXRsZSA9IHRoaXMuZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtb3JpZ2luYWwtdGl0bGUnKTtcblxuICAgICAgaWYgKCF0aXRsZSkge1xuICAgICAgICB0aXRsZSA9IHR5cGVvZiB0aGlzLmNvbmZpZy50aXRsZSA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMuY29uZmlnLnRpdGxlLmNhbGwodGhpcy5lbGVtZW50KSA6IHRoaXMuY29uZmlnLnRpdGxlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGl0bGU7XG4gICAgfSAvLyBQcml2YXRlXG4gICAgO1xuXG4gICAgX3Byb3RvLl9nZXRPZmZzZXQgPSBmdW5jdGlvbiBfZ2V0T2Zmc2V0KCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBvZmZzZXQgPSB7fTtcblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZy5vZmZzZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb2Zmc2V0LmZuID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICBkYXRhLm9mZnNldHMgPSBfb2JqZWN0U3ByZWFkKHt9LCBkYXRhLm9mZnNldHMsIF90aGlzMy5jb25maWcub2Zmc2V0KGRhdGEub2Zmc2V0cywgX3RoaXMzLmVsZW1lbnQpIHx8IHt9KTtcbiAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9mZnNldC5vZmZzZXQgPSB0aGlzLmNvbmZpZy5vZmZzZXQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvZmZzZXQ7XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0Q29udGFpbmVyID0gZnVuY3Rpb24gX2dldENvbnRhaW5lcigpIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5jb250YWluZXIgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5ib2R5O1xuICAgICAgfVxuXG4gICAgICBpZiAoVXRpbC5pc0VsZW1lbnQodGhpcy5jb25maWcuY29udGFpbmVyKSkge1xuICAgICAgICByZXR1cm4gJCh0aGlzLmNvbmZpZy5jb250YWluZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gJChkb2N1bWVudCkuZmluZCh0aGlzLmNvbmZpZy5jb250YWluZXIpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldEF0dGFjaG1lbnQgPSBmdW5jdGlvbiBfZ2V0QXR0YWNobWVudChwbGFjZW1lbnQpIHtcbiAgICAgIHJldHVybiBBdHRhY2htZW50TWFwJDFbcGxhY2VtZW50LnRvVXBwZXJDYXNlKCldO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX3NldExpc3RlbmVycyA9IGZ1bmN0aW9uIF9zZXRMaXN0ZW5lcnMoKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgdmFyIHRyaWdnZXJzID0gdGhpcy5jb25maWcudHJpZ2dlci5zcGxpdCgnICcpO1xuICAgICAgdHJpZ2dlcnMuZm9yRWFjaChmdW5jdGlvbiAodHJpZ2dlcikge1xuICAgICAgICBpZiAodHJpZ2dlciA9PT0gJ2NsaWNrJykge1xuICAgICAgICAgICQoX3RoaXM0LmVsZW1lbnQpLm9uKF90aGlzNC5jb25zdHJ1Y3Rvci5FdmVudC5DTElDSywgX3RoaXM0LmNvbmZpZy5zZWxlY3RvciwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM0LnRvZ2dsZShldmVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHJpZ2dlciAhPT0gVHJpZ2dlci5NQU5VQUwpIHtcbiAgICAgICAgICB2YXIgZXZlbnRJbiA9IHRyaWdnZXIgPT09IFRyaWdnZXIuSE9WRVIgPyBfdGhpczQuY29uc3RydWN0b3IuRXZlbnQuTU9VU0VFTlRFUiA6IF90aGlzNC5jb25zdHJ1Y3Rvci5FdmVudC5GT0NVU0lOO1xuICAgICAgICAgIHZhciBldmVudE91dCA9IHRyaWdnZXIgPT09IFRyaWdnZXIuSE9WRVIgPyBfdGhpczQuY29uc3RydWN0b3IuRXZlbnQuTU9VU0VMRUFWRSA6IF90aGlzNC5jb25zdHJ1Y3Rvci5FdmVudC5GT0NVU09VVDtcbiAgICAgICAgICAkKF90aGlzNC5lbGVtZW50KS5vbihldmVudEluLCBfdGhpczQuY29uZmlnLnNlbGVjdG9yLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczQuX2VudGVyKGV2ZW50KTtcbiAgICAgICAgICB9KS5vbihldmVudE91dCwgX3RoaXM0LmNvbmZpZy5zZWxlY3RvciwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM0Ll9sZWF2ZShldmVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgJCh0aGlzLmVsZW1lbnQpLmNsb3Nlc3QoJy5tb2RhbCcpLm9uKCdoaWRlLmJzLm1vZGFsJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXM0LmVsZW1lbnQpIHtcbiAgICAgICAgICBfdGhpczQuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMuY29uZmlnLnNlbGVjdG9yKSB7XG4gICAgICAgIHRoaXMuY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgdGhpcy5jb25maWcsIHtcbiAgICAgICAgICB0cmlnZ2VyOiAnbWFudWFsJyxcbiAgICAgICAgICBzZWxlY3RvcjogJydcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9maXhUaXRsZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uX2ZpeFRpdGxlID0gZnVuY3Rpb24gX2ZpeFRpdGxlKCkge1xuICAgICAgdmFyIHRpdGxlVHlwZSA9IHR5cGVvZiB0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLW9yaWdpbmFsLXRpdGxlJyk7XG5cbiAgICAgIGlmICh0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0aXRsZScpIHx8IHRpdGxlVHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1vcmlnaW5hbC10aXRsZScsIHRoaXMuZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RpdGxlJykgfHwgJycpO1xuICAgICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCd0aXRsZScsICcnKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLl9lbnRlciA9IGZ1bmN0aW9uIF9lbnRlcihldmVudCwgY29udGV4dCkge1xuICAgICAgdmFyIGRhdGFLZXkgPSB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZO1xuICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgJChldmVudC5jdXJyZW50VGFyZ2V0KS5kYXRhKGRhdGFLZXkpO1xuXG4gICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgY29udGV4dCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKGV2ZW50LmN1cnJlbnRUYXJnZXQsIHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkpO1xuICAgICAgICAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmRhdGEoZGF0YUtleSwgY29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudCkge1xuICAgICAgICBjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyW2V2ZW50LnR5cGUgPT09ICdmb2N1c2luJyA/IFRyaWdnZXIuRk9DVVMgOiBUcmlnZ2VyLkhPVkVSXSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICgkKGNvbnRleHQuZ2V0VGlwRWxlbWVudCgpKS5oYXNDbGFzcyhDbGFzc05hbWUkNi5TSE9XKSB8fCBjb250ZXh0Ll9ob3ZlclN0YXRlID09PSBIb3ZlclN0YXRlLlNIT1cpIHtcbiAgICAgICAgY29udGV4dC5faG92ZXJTdGF0ZSA9IEhvdmVyU3RhdGUuU0hPVztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjbGVhclRpbWVvdXQoY29udGV4dC5fdGltZW91dCk7XG4gICAgICBjb250ZXh0Ll9ob3ZlclN0YXRlID0gSG92ZXJTdGF0ZS5TSE9XO1xuXG4gICAgICBpZiAoIWNvbnRleHQuY29uZmlnLmRlbGF5IHx8ICFjb250ZXh0LmNvbmZpZy5kZWxheS5zaG93KSB7XG4gICAgICAgIGNvbnRleHQuc2hvdygpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGNvbnRleHQuX2hvdmVyU3RhdGUgPT09IEhvdmVyU3RhdGUuU0hPVykge1xuICAgICAgICAgIGNvbnRleHQuc2hvdygpO1xuICAgICAgICB9XG4gICAgICB9LCBjb250ZXh0LmNvbmZpZy5kZWxheS5zaG93KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9sZWF2ZSA9IGZ1bmN0aW9uIF9sZWF2ZShldmVudCwgY29udGV4dCkge1xuICAgICAgdmFyIGRhdGFLZXkgPSB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZO1xuICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgJChldmVudC5jdXJyZW50VGFyZ2V0KS5kYXRhKGRhdGFLZXkpO1xuXG4gICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgY29udGV4dCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKGV2ZW50LmN1cnJlbnRUYXJnZXQsIHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkpO1xuICAgICAgICAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmRhdGEoZGF0YUtleSwgY29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudCkge1xuICAgICAgICBjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyW2V2ZW50LnR5cGUgPT09ICdmb2N1c291dCcgPyBUcmlnZ2VyLkZPQ1VTIDogVHJpZ2dlci5IT1ZFUl0gPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbnRleHQuX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNsZWFyVGltZW91dChjb250ZXh0Ll90aW1lb3V0KTtcbiAgICAgIGNvbnRleHQuX2hvdmVyU3RhdGUgPSBIb3ZlclN0YXRlLk9VVDtcblxuICAgICAgaWYgKCFjb250ZXh0LmNvbmZpZy5kZWxheSB8fCAhY29udGV4dC5jb25maWcuZGVsYXkuaGlkZSkge1xuICAgICAgICBjb250ZXh0LmhpZGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Ll90aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChjb250ZXh0Ll9ob3ZlclN0YXRlID09PSBIb3ZlclN0YXRlLk9VVCkge1xuICAgICAgICAgIGNvbnRleHQuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICB9LCBjb250ZXh0LmNvbmZpZy5kZWxheS5oaWRlKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9pc1dpdGhBY3RpdmVUcmlnZ2VyID0gZnVuY3Rpb24gX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKSB7XG4gICAgICBmb3IgKHZhciB0cmlnZ2VyIGluIHRoaXMuX2FjdGl2ZVRyaWdnZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZVRyaWdnZXJbdHJpZ2dlcl0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0Q29uZmlnID0gZnVuY3Rpb24gX2dldENvbmZpZyhjb25maWcpIHtcbiAgICAgIHZhciBkYXRhQXR0cmlidXRlcyA9ICQodGhpcy5lbGVtZW50KS5kYXRhKCk7XG4gICAgICBPYmplY3Qua2V5cyhkYXRhQXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoZGF0YUF0dHIpIHtcbiAgICAgICAgaWYgKERJU0FMTE9XRURfQVRUUklCVVRFUy5pbmRleE9mKGRhdGFBdHRyKSAhPT0gLTEpIHtcbiAgICAgICAgICBkZWxldGUgZGF0YUF0dHJpYnV0ZXNbZGF0YUF0dHJdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbmZpZyA9IF9vYmplY3RTcHJlYWQoe30sIHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdCwgZGF0YUF0dHJpYnV0ZXMsIHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZyA/IGNvbmZpZyA6IHt9KTtcblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcuZGVsYXkgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGNvbmZpZy5kZWxheSA9IHtcbiAgICAgICAgICBzaG93OiBjb25maWcuZGVsYXksXG4gICAgICAgICAgaGlkZTogY29uZmlnLmRlbGF5XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnLnRpdGxlID09PSAnbnVtYmVyJykge1xuICAgICAgICBjb25maWcudGl0bGUgPSBjb25maWcudGl0bGUudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcuY29udGVudCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uZmlnLmNvbnRlbnQgPSBjb25maWcuY29udGVudC50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICBVdGlsLnR5cGVDaGVja0NvbmZpZyhOQU1FJDYsIGNvbmZpZywgdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0VHlwZSk7XG5cbiAgICAgIGlmIChjb25maWcuc2FuaXRpemUpIHtcbiAgICAgICAgY29uZmlnLnRlbXBsYXRlID0gc2FuaXRpemVIdG1sKGNvbmZpZy50ZW1wbGF0ZSwgY29uZmlnLndoaXRlTGlzdCwgY29uZmlnLnNhbml0aXplRm4pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldERlbGVnYXRlQ29uZmlnID0gZnVuY3Rpb24gX2dldERlbGVnYXRlQ29uZmlnKCkge1xuICAgICAgdmFyIGNvbmZpZyA9IHt9O1xuXG4gICAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuY29uZmlnKSB7XG4gICAgICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFtrZXldICE9PSB0aGlzLmNvbmZpZ1trZXldKSB7XG4gICAgICAgICAgICBjb25maWdba2V5XSA9IHRoaXMuY29uZmlnW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfTtcblxuICAgIF9wcm90by5fY2xlYW5UaXBDbGFzcyA9IGZ1bmN0aW9uIF9jbGVhblRpcENsYXNzKCkge1xuICAgICAgdmFyICR0aXAgPSAkKHRoaXMuZ2V0VGlwRWxlbWVudCgpKTtcbiAgICAgIHZhciB0YWJDbGFzcyA9ICR0aXAuYXR0cignY2xhc3MnKS5tYXRjaChCU0NMU19QUkVGSVhfUkVHRVgpO1xuXG4gICAgICBpZiAodGFiQ2xhc3MgIT09IG51bGwgJiYgdGFiQ2xhc3MubGVuZ3RoKSB7XG4gICAgICAgICR0aXAucmVtb3ZlQ2xhc3ModGFiQ2xhc3Muam9pbignJykpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uX2hhbmRsZVBvcHBlclBsYWNlbWVudENoYW5nZSA9IGZ1bmN0aW9uIF9oYW5kbGVQb3BwZXJQbGFjZW1lbnRDaGFuZ2UocG9wcGVyRGF0YSkge1xuICAgICAgdmFyIHBvcHBlckluc3RhbmNlID0gcG9wcGVyRGF0YS5pbnN0YW5jZTtcbiAgICAgIHRoaXMudGlwID0gcG9wcGVySW5zdGFuY2UucG9wcGVyO1xuXG4gICAgICB0aGlzLl9jbGVhblRpcENsYXNzKCk7XG5cbiAgICAgIHRoaXMuYWRkQXR0YWNobWVudENsYXNzKHRoaXMuX2dldEF0dGFjaG1lbnQocG9wcGVyRGF0YS5wbGFjZW1lbnQpKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9maXhUcmFuc2l0aW9uID0gZnVuY3Rpb24gX2ZpeFRyYW5zaXRpb24oKSB7XG4gICAgICB2YXIgdGlwID0gdGhpcy5nZXRUaXBFbGVtZW50KCk7XG4gICAgICB2YXIgaW5pdENvbmZpZ0FuaW1hdGlvbiA9IHRoaXMuY29uZmlnLmFuaW1hdGlvbjtcblxuICAgICAgaWYgKHRpcC5nZXRBdHRyaWJ1dGUoJ3gtcGxhY2VtZW50JykgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAkKHRpcCkucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lJDYuRkFERSk7XG4gICAgICB0aGlzLmNvbmZpZy5hbmltYXRpb24gPSBmYWxzZTtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgdGhpcy5zaG93KCk7XG4gICAgICB0aGlzLmNvbmZpZy5hbmltYXRpb24gPSBpbml0Q29uZmlnQW5pbWF0aW9uO1xuICAgIH0gLy8gU3RhdGljXG4gICAgO1xuXG4gICAgVG9vbHRpcC5falF1ZXJ5SW50ZXJmYWNlID0gZnVuY3Rpb24gX2pRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YShEQVRBX0tFWSQ2KTtcblxuICAgICAgICB2YXIgX2NvbmZpZyA9IHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZztcblxuICAgICAgICBpZiAoIWRhdGEgJiYgL2Rpc3Bvc2V8aGlkZS8udGVzdChjb25maWcpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IG5ldyBUb29sdGlwKHRoaXMsIF9jb25maWcpO1xuICAgICAgICAgICQodGhpcykuZGF0YShEQVRBX0tFWSQ2LCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIG1ldGhvZCBuYW1lZCBcXFwiXCIgKyBjb25maWcgKyBcIlxcXCJcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBfY3JlYXRlQ2xhc3MoVG9vbHRpcCwgbnVsbCwgW3tcbiAgICAgIGtleTogXCJWRVJTSU9OXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIFZFUlNJT04kNjtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiRGVmYXVsdFwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBEZWZhdWx0JDQ7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIk5BTUVcIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gTkFNRSQ2O1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJEQVRBX0tFWVwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBEQVRBX0tFWSQ2O1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJFdmVudFwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBFdmVudCQ2O1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJFVkVOVF9LRVlcIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gRVZFTlRfS0VZJDY7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkRlZmF1bHRUeXBlXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIERlZmF1bHRUeXBlJDQ7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIFRvb2x0aXA7XG4gIH0oKTtcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBqUXVlcnlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJC5mbltOQU1FJDZdID0gVG9vbHRpcC5falF1ZXJ5SW50ZXJmYWNlO1xuICAkLmZuW05BTUUkNl0uQ29uc3RydWN0b3IgPSBUb29sdGlwO1xuXG4gICQuZm5bTkFNRSQ2XS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICQuZm5bTkFNRSQ2XSA9IEpRVUVSWV9OT19DT05GTElDVCQ2O1xuICAgIHJldHVybiBUb29sdGlwLl9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBDb25zdGFudHNcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBOQU1FJDcgPSAncG9wb3Zlcic7XG4gIHZhciBWRVJTSU9OJDcgPSAnNC4zLjEnO1xuICB2YXIgREFUQV9LRVkkNyA9ICdicy5wb3BvdmVyJztcbiAgdmFyIEVWRU5UX0tFWSQ3ID0gXCIuXCIgKyBEQVRBX0tFWSQ3O1xuICB2YXIgSlFVRVJZX05PX0NPTkZMSUNUJDcgPSAkLmZuW05BTUUkN107XG4gIHZhciBDTEFTU19QUkVGSVgkMSA9ICdicy1wb3BvdmVyJztcbiAgdmFyIEJTQ0xTX1BSRUZJWF9SRUdFWCQxID0gbmV3IFJlZ0V4cChcIihefFxcXFxzKVwiICsgQ0xBU1NfUFJFRklYJDEgKyBcIlxcXFxTK1wiLCAnZycpO1xuXG4gIHZhciBEZWZhdWx0JDUgPSBfb2JqZWN0U3ByZWFkKHt9LCBUb29sdGlwLkRlZmF1bHQsIHtcbiAgICBwbGFjZW1lbnQ6ICdyaWdodCcsXG4gICAgdHJpZ2dlcjogJ2NsaWNrJyxcbiAgICBjb250ZW50OiAnJyxcbiAgICB0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9XCJwb3BvdmVyXCIgcm9sZT1cInRvb2x0aXBcIj4nICsgJzxkaXYgY2xhc3M9XCJhcnJvd1wiPjwvZGl2PicgKyAnPGgzIGNsYXNzPVwicG9wb3Zlci1oZWFkZXJcIj48L2gzPicgKyAnPGRpdiBjbGFzcz1cInBvcG92ZXItYm9keVwiPjwvZGl2PjwvZGl2PidcbiAgfSk7XG5cbiAgdmFyIERlZmF1bHRUeXBlJDUgPSBfb2JqZWN0U3ByZWFkKHt9LCBUb29sdGlwLkRlZmF1bHRUeXBlLCB7XG4gICAgY29udGVudDogJyhzdHJpbmd8ZWxlbWVudHxmdW5jdGlvbiknXG4gIH0pO1xuXG4gIHZhciBDbGFzc05hbWUkNyA9IHtcbiAgICBGQURFOiAnZmFkZScsXG4gICAgU0hPVzogJ3Nob3cnXG4gIH07XG4gIHZhciBTZWxlY3RvciQ3ID0ge1xuICAgIFRJVExFOiAnLnBvcG92ZXItaGVhZGVyJyxcbiAgICBDT05URU5UOiAnLnBvcG92ZXItYm9keSdcbiAgfTtcbiAgdmFyIEV2ZW50JDcgPSB7XG4gICAgSElERTogXCJoaWRlXCIgKyBFVkVOVF9LRVkkNyxcbiAgICBISURERU46IFwiaGlkZGVuXCIgKyBFVkVOVF9LRVkkNyxcbiAgICBTSE9XOiBcInNob3dcIiArIEVWRU5UX0tFWSQ3LFxuICAgIFNIT1dOOiBcInNob3duXCIgKyBFVkVOVF9LRVkkNyxcbiAgICBJTlNFUlRFRDogXCJpbnNlcnRlZFwiICsgRVZFTlRfS0VZJDcsXG4gICAgQ0xJQ0s6IFwiY2xpY2tcIiArIEVWRU5UX0tFWSQ3LFxuICAgIEZPQ1VTSU46IFwiZm9jdXNpblwiICsgRVZFTlRfS0VZJDcsXG4gICAgRk9DVVNPVVQ6IFwiZm9jdXNvdXRcIiArIEVWRU5UX0tFWSQ3LFxuICAgIE1PVVNFRU5URVI6IFwibW91c2VlbnRlclwiICsgRVZFTlRfS0VZJDcsXG4gICAgTU9VU0VMRUFWRTogXCJtb3VzZWxlYXZlXCIgKyBFVkVOVF9LRVkkN1xuICAgIC8qKlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIENsYXNzIERlZmluaXRpb25cbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKi9cblxuICB9O1xuXG4gIHZhciBQb3BvdmVyID1cbiAgLyojX19QVVJFX18qL1xuICBmdW5jdGlvbiAoX1Rvb2x0aXApIHtcbiAgICBfaW5oZXJpdHNMb29zZShQb3BvdmVyLCBfVG9vbHRpcCk7XG5cbiAgICBmdW5jdGlvbiBQb3BvdmVyKCkge1xuICAgICAgcmV0dXJuIF9Ub29sdGlwLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG5cbiAgICB2YXIgX3Byb3RvID0gUG9wb3Zlci5wcm90b3R5cGU7XG5cbiAgICAvLyBPdmVycmlkZXNcbiAgICBfcHJvdG8uaXNXaXRoQ29udGVudCA9IGZ1bmN0aW9uIGlzV2l0aENvbnRlbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRUaXRsZSgpIHx8IHRoaXMuX2dldENvbnRlbnQoKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmFkZEF0dGFjaG1lbnRDbGFzcyA9IGZ1bmN0aW9uIGFkZEF0dGFjaG1lbnRDbGFzcyhhdHRhY2htZW50KSB7XG4gICAgICAkKHRoaXMuZ2V0VGlwRWxlbWVudCgpKS5hZGRDbGFzcyhDTEFTU19QUkVGSVgkMSArIFwiLVwiICsgYXR0YWNobWVudCk7XG4gICAgfTtcblxuICAgIF9wcm90by5nZXRUaXBFbGVtZW50ID0gZnVuY3Rpb24gZ2V0VGlwRWxlbWVudCgpIHtcbiAgICAgIHRoaXMudGlwID0gdGhpcy50aXAgfHwgJCh0aGlzLmNvbmZpZy50ZW1wbGF0ZSlbMF07XG4gICAgICByZXR1cm4gdGhpcy50aXA7XG4gICAgfTtcblxuICAgIF9wcm90by5zZXRDb250ZW50ID0gZnVuY3Rpb24gc2V0Q29udGVudCgpIHtcbiAgICAgIHZhciAkdGlwID0gJCh0aGlzLmdldFRpcEVsZW1lbnQoKSk7IC8vIFdlIHVzZSBhcHBlbmQgZm9yIGh0bWwgb2JqZWN0cyB0byBtYWludGFpbiBqcyBldmVudHNcblxuICAgICAgdGhpcy5zZXRFbGVtZW50Q29udGVudCgkdGlwLmZpbmQoU2VsZWN0b3IkNy5USVRMRSksIHRoaXMuZ2V0VGl0bGUoKSk7XG5cbiAgICAgIHZhciBjb250ZW50ID0gdGhpcy5fZ2V0Q29udGVudCgpO1xuXG4gICAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQuY2FsbCh0aGlzLmVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldEVsZW1lbnRDb250ZW50KCR0aXAuZmluZChTZWxlY3RvciQ3LkNPTlRFTlQpLCBjb250ZW50KTtcbiAgICAgICR0aXAucmVtb3ZlQ2xhc3MoQ2xhc3NOYW1lJDcuRkFERSArIFwiIFwiICsgQ2xhc3NOYW1lJDcuU0hPVyk7XG4gICAgfSAvLyBQcml2YXRlXG4gICAgO1xuXG4gICAgX3Byb3RvLl9nZXRDb250ZW50ID0gZnVuY3Rpb24gX2dldENvbnRlbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1jb250ZW50JykgfHwgdGhpcy5jb25maWcuY29udGVudDtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9jbGVhblRpcENsYXNzID0gZnVuY3Rpb24gX2NsZWFuVGlwQ2xhc3MoKSB7XG4gICAgICB2YXIgJHRpcCA9ICQodGhpcy5nZXRUaXBFbGVtZW50KCkpO1xuICAgICAgdmFyIHRhYkNsYXNzID0gJHRpcC5hdHRyKCdjbGFzcycpLm1hdGNoKEJTQ0xTX1BSRUZJWF9SRUdFWCQxKTtcblxuICAgICAgaWYgKHRhYkNsYXNzICE9PSBudWxsICYmIHRhYkNsYXNzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgJHRpcC5yZW1vdmVDbGFzcyh0YWJDbGFzcy5qb2luKCcnKSk7XG4gICAgICB9XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBQb3BvdmVyLl9qUXVlcnlJbnRlcmZhY2UgPSBmdW5jdGlvbiBfalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkYXRhID0gJCh0aGlzKS5kYXRhKERBVEFfS0VZJDcpO1xuXG4gICAgICAgIHZhciBfY29uZmlnID0gdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiBudWxsO1xuXG4gICAgICAgIGlmICghZGF0YSAmJiAvZGlzcG9zZXxoaWRlLy50ZXN0KGNvbmZpZykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICBkYXRhID0gbmV3IFBvcG92ZXIodGhpcywgX2NvbmZpZyk7XG4gICAgICAgICAgJCh0aGlzKS5kYXRhKERBVEFfS0VZJDcsIGRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gbWV0aG9kIG5hbWVkIFxcXCJcIiArIGNvbmZpZyArIFwiXFxcIlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9jcmVhdGVDbGFzcyhQb3BvdmVyLCBudWxsLCBbe1xuICAgICAga2V5OiBcIlZFUlNJT05cIixcbiAgICAgIC8vIEdldHRlcnNcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gVkVSU0lPTiQ3O1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJEZWZhdWx0XCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIERlZmF1bHQkNTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiTkFNRVwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBOQU1FJDc7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkRBVEFfS0VZXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIERBVEFfS0VZJDc7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkV2ZW50XCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIEV2ZW50JDc7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkVWRU5UX0tFWVwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBFVkVOVF9LRVkkNztcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiRGVmYXVsdFR5cGVcIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gRGVmYXVsdFR5cGUkNTtcbiAgICAgIH1cbiAgICB9XSk7XG5cbiAgICByZXR1cm4gUG9wb3ZlcjtcbiAgfShUb29sdGlwKTtcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBqUXVlcnlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJC5mbltOQU1FJDddID0gUG9wb3Zlci5falF1ZXJ5SW50ZXJmYWNlO1xuICAkLmZuW05BTUUkN10uQ29uc3RydWN0b3IgPSBQb3BvdmVyO1xuXG4gICQuZm5bTkFNRSQ3XS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICQuZm5bTkFNRSQ3XSA9IEpRVUVSWV9OT19DT05GTElDVCQ3O1xuICAgIHJldHVybiBQb3BvdmVyLl9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBDb25zdGFudHNcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBOQU1FJDggPSAnc2Nyb2xsc3B5JztcbiAgdmFyIFZFUlNJT04kOCA9ICc0LjMuMSc7XG4gIHZhciBEQVRBX0tFWSQ4ID0gJ2JzLnNjcm9sbHNweSc7XG4gIHZhciBFVkVOVF9LRVkkOCA9IFwiLlwiICsgREFUQV9LRVkkODtcbiAgdmFyIERBVEFfQVBJX0tFWSQ2ID0gJy5kYXRhLWFwaSc7XG4gIHZhciBKUVVFUllfTk9fQ09ORkxJQ1QkOCA9ICQuZm5bTkFNRSQ4XTtcbiAgdmFyIERlZmF1bHQkNiA9IHtcbiAgICBvZmZzZXQ6IDEwLFxuICAgIG1ldGhvZDogJ2F1dG8nLFxuICAgIHRhcmdldDogJydcbiAgfTtcbiAgdmFyIERlZmF1bHRUeXBlJDYgPSB7XG4gICAgb2Zmc2V0OiAnbnVtYmVyJyxcbiAgICBtZXRob2Q6ICdzdHJpbmcnLFxuICAgIHRhcmdldDogJyhzdHJpbmd8ZWxlbWVudCknXG4gIH07XG4gIHZhciBFdmVudCQ4ID0ge1xuICAgIEFDVElWQVRFOiBcImFjdGl2YXRlXCIgKyBFVkVOVF9LRVkkOCxcbiAgICBTQ1JPTEw6IFwic2Nyb2xsXCIgKyBFVkVOVF9LRVkkOCxcbiAgICBMT0FEX0RBVEFfQVBJOiBcImxvYWRcIiArIEVWRU5UX0tFWSQ4ICsgREFUQV9BUElfS0VZJDZcbiAgfTtcbiAgdmFyIENsYXNzTmFtZSQ4ID0ge1xuICAgIERST1BET1dOX0lURU06ICdkcm9wZG93bi1pdGVtJyxcbiAgICBEUk9QRE9XTl9NRU5VOiAnZHJvcGRvd24tbWVudScsXG4gICAgQUNUSVZFOiAnYWN0aXZlJ1xuICB9O1xuICB2YXIgU2VsZWN0b3IkOCA9IHtcbiAgICBEQVRBX1NQWTogJ1tkYXRhLXNweT1cInNjcm9sbFwiXScsXG4gICAgQUNUSVZFOiAnLmFjdGl2ZScsXG4gICAgTkFWX0xJU1RfR1JPVVA6ICcubmF2LCAubGlzdC1ncm91cCcsXG4gICAgTkFWX0xJTktTOiAnLm5hdi1saW5rJyxcbiAgICBOQVZfSVRFTVM6ICcubmF2LWl0ZW0nLFxuICAgIExJU1RfSVRFTVM6ICcubGlzdC1ncm91cC1pdGVtJyxcbiAgICBEUk9QRE9XTjogJy5kcm9wZG93bicsXG4gICAgRFJPUERPV05fSVRFTVM6ICcuZHJvcGRvd24taXRlbScsXG4gICAgRFJPUERPV05fVE9HR0xFOiAnLmRyb3Bkb3duLXRvZ2dsZSdcbiAgfTtcbiAgdmFyIE9mZnNldE1ldGhvZCA9IHtcbiAgICBPRkZTRVQ6ICdvZmZzZXQnLFxuICAgIFBPU0lUSU9OOiAncG9zaXRpb24nXG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG4gIH07XG5cbiAgdmFyIFNjcm9sbFNweSA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNjcm9sbFNweShlbGVtZW50LCBjb25maWcpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgdGhpcy5fc2Nyb2xsRWxlbWVudCA9IGVsZW1lbnQudGFnTmFtZSA9PT0gJ0JPRFknID8gd2luZG93IDogZWxlbWVudDtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgICAgdGhpcy5fc2VsZWN0b3IgPSB0aGlzLl9jb25maWcudGFyZ2V0ICsgXCIgXCIgKyBTZWxlY3RvciQ4Lk5BVl9MSU5LUyArIFwiLFwiICsgKHRoaXMuX2NvbmZpZy50YXJnZXQgKyBcIiBcIiArIFNlbGVjdG9yJDguTElTVF9JVEVNUyArIFwiLFwiKSArICh0aGlzLl9jb25maWcudGFyZ2V0ICsgXCIgXCIgKyBTZWxlY3RvciQ4LkRST1BET1dOX0lURU1TKTtcbiAgICAgIHRoaXMuX29mZnNldHMgPSBbXTtcbiAgICAgIHRoaXMuX3RhcmdldHMgPSBbXTtcbiAgICAgIHRoaXMuX2FjdGl2ZVRhcmdldCA9IG51bGw7XG4gICAgICB0aGlzLl9zY3JvbGxIZWlnaHQgPSAwO1xuICAgICAgJCh0aGlzLl9zY3JvbGxFbGVtZW50KS5vbihFdmVudCQ4LlNDUk9MTCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5fcHJvY2VzcyhldmVudCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuXG4gICAgICB0aGlzLl9wcm9jZXNzKCk7XG4gICAgfSAvLyBHZXR0ZXJzXG5cblxuICAgIHZhciBfcHJvdG8gPSBTY3JvbGxTcHkucHJvdG90eXBlO1xuXG4gICAgLy8gUHVibGljXG4gICAgX3Byb3RvLnJlZnJlc2ggPSBmdW5jdGlvbiByZWZyZXNoKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBhdXRvTWV0aG9kID0gdGhpcy5fc2Nyb2xsRWxlbWVudCA9PT0gdGhpcy5fc2Nyb2xsRWxlbWVudC53aW5kb3cgPyBPZmZzZXRNZXRob2QuT0ZGU0VUIDogT2Zmc2V0TWV0aG9kLlBPU0lUSU9OO1xuICAgICAgdmFyIG9mZnNldE1ldGhvZCA9IHRoaXMuX2NvbmZpZy5tZXRob2QgPT09ICdhdXRvJyA/IGF1dG9NZXRob2QgOiB0aGlzLl9jb25maWcubWV0aG9kO1xuICAgICAgdmFyIG9mZnNldEJhc2UgPSBvZmZzZXRNZXRob2QgPT09IE9mZnNldE1ldGhvZC5QT1NJVElPTiA/IHRoaXMuX2dldFNjcm9sbFRvcCgpIDogMDtcbiAgICAgIHRoaXMuX29mZnNldHMgPSBbXTtcbiAgICAgIHRoaXMuX3RhcmdldHMgPSBbXTtcbiAgICAgIHRoaXMuX3Njcm9sbEhlaWdodCA9IHRoaXMuX2dldFNjcm9sbEhlaWdodCgpO1xuICAgICAgdmFyIHRhcmdldHMgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5fc2VsZWN0b3IpKTtcbiAgICAgIHRhcmdldHMubWFwKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIHZhciB0YXJnZXQ7XG4gICAgICAgIHZhciB0YXJnZXRTZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICBpZiAodGFyZ2V0U2VsZWN0b3IpIHtcbiAgICAgICAgICB0YXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldFNlbGVjdG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICB2YXIgdGFyZ2V0QkNSID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgaWYgKHRhcmdldEJDUi53aWR0aCB8fCB0YXJnZXRCQ1IuaGVpZ2h0KSB7XG4gICAgICAgICAgICAvLyBUT0RPIChmYXQpOiByZW1vdmUgc2tldGNoIHJlbGlhbmNlIG9uIGpRdWVyeSBwb3NpdGlvbi9vZmZzZXRcbiAgICAgICAgICAgIHJldHVybiBbJCh0YXJnZXQpW29mZnNldE1ldGhvZF0oKS50b3AgKyBvZmZzZXRCYXNlLCB0YXJnZXRTZWxlY3Rvcl07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9KS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHJldHVybiBhWzBdIC0gYlswXTtcbiAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgX3RoaXMyLl9vZmZzZXRzLnB1c2goaXRlbVswXSk7XG5cbiAgICAgICAgX3RoaXMyLl90YXJnZXRzLnB1c2goaXRlbVsxXSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgJC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsIERBVEFfS0VZJDgpO1xuICAgICAgJCh0aGlzLl9zY3JvbGxFbGVtZW50KS5vZmYoRVZFTlRfS0VZJDgpO1xuICAgICAgdGhpcy5fZWxlbWVudCA9IG51bGw7XG4gICAgICB0aGlzLl9zY3JvbGxFbGVtZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IG51bGw7XG4gICAgICB0aGlzLl9zZWxlY3RvciA9IG51bGw7XG4gICAgICB0aGlzLl9vZmZzZXRzID0gbnVsbDtcbiAgICAgIHRoaXMuX3RhcmdldHMgPSBudWxsO1xuICAgICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gbnVsbDtcbiAgICAgIHRoaXMuX3Njcm9sbEhlaWdodCA9IG51bGw7XG4gICAgfSAvLyBQcml2YXRlXG4gICAgO1xuXG4gICAgX3Byb3RvLl9nZXRDb25maWcgPSBmdW5jdGlvbiBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgICAgY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgRGVmYXVsdCQ2LCB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiBjb25maWcgPyBjb25maWcgOiB7fSk7XG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnLnRhcmdldCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFyIGlkID0gJChjb25maWcudGFyZ2V0KS5hdHRyKCdpZCcpO1xuXG4gICAgICAgIGlmICghaWQpIHtcbiAgICAgICAgICBpZCA9IFV0aWwuZ2V0VUlEKE5BTUUkOCk7XG4gICAgICAgICAgJChjb25maWcudGFyZ2V0KS5hdHRyKCdpZCcsIGlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZy50YXJnZXQgPSBcIiNcIiArIGlkO1xuICAgICAgfVxuXG4gICAgICBVdGlsLnR5cGVDaGVja0NvbmZpZyhOQU1FJDgsIGNvbmZpZywgRGVmYXVsdFR5cGUkNik7XG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldFNjcm9sbFRvcCA9IGZ1bmN0aW9uIF9nZXRTY3JvbGxUb3AoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2Nyb2xsRWxlbWVudCA9PT0gd2luZG93ID8gdGhpcy5fc2Nyb2xsRWxlbWVudC5wYWdlWU9mZnNldCA6IHRoaXMuX3Njcm9sbEVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldFNjcm9sbEhlaWdodCA9IGZ1bmN0aW9uIF9nZXRTY3JvbGxIZWlnaHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2Nyb2xsRWxlbWVudC5zY3JvbGxIZWlnaHQgfHwgTWF0aC5tYXgoZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQsIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldE9mZnNldEhlaWdodCA9IGZ1bmN0aW9uIF9nZXRPZmZzZXRIZWlnaHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2Nyb2xsRWxlbWVudCA9PT0gd2luZG93ID8gd2luZG93LmlubmVySGVpZ2h0IDogdGhpcy5fc2Nyb2xsRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgfTtcblxuICAgIF9wcm90by5fcHJvY2VzcyA9IGZ1bmN0aW9uIF9wcm9jZXNzKCkge1xuICAgICAgdmFyIHNjcm9sbFRvcCA9IHRoaXMuX2dldFNjcm9sbFRvcCgpICsgdGhpcy5fY29uZmlnLm9mZnNldDtcblxuICAgICAgdmFyIHNjcm9sbEhlaWdodCA9IHRoaXMuX2dldFNjcm9sbEhlaWdodCgpO1xuXG4gICAgICB2YXIgbWF4U2Nyb2xsID0gdGhpcy5fY29uZmlnLm9mZnNldCArIHNjcm9sbEhlaWdodCAtIHRoaXMuX2dldE9mZnNldEhlaWdodCgpO1xuXG4gICAgICBpZiAodGhpcy5fc2Nyb2xsSGVpZ2h0ICE9PSBzY3JvbGxIZWlnaHQpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzY3JvbGxUb3AgPj0gbWF4U2Nyb2xsKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLl90YXJnZXRzW3RoaXMuX3RhcmdldHMubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZVRhcmdldCAhPT0gdGFyZ2V0KSB7XG4gICAgICAgICAgdGhpcy5fYWN0aXZhdGUodGFyZ2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2FjdGl2ZVRhcmdldCAmJiBzY3JvbGxUb3AgPCB0aGlzLl9vZmZzZXRzWzBdICYmIHRoaXMuX29mZnNldHNbMF0gPiAwKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRhcmdldCA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5fY2xlYXIoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBvZmZzZXRMZW5ndGggPSB0aGlzLl9vZmZzZXRzLmxlbmd0aDtcblxuICAgICAgZm9yICh2YXIgaSA9IG9mZnNldExlbmd0aDsgaS0tOykge1xuICAgICAgICB2YXIgaXNBY3RpdmVUYXJnZXQgPSB0aGlzLl9hY3RpdmVUYXJnZXQgIT09IHRoaXMuX3RhcmdldHNbaV0gJiYgc2Nyb2xsVG9wID49IHRoaXMuX29mZnNldHNbaV0gJiYgKHR5cGVvZiB0aGlzLl9vZmZzZXRzW2kgKyAxXSA9PT0gJ3VuZGVmaW5lZCcgfHwgc2Nyb2xsVG9wIDwgdGhpcy5fb2Zmc2V0c1tpICsgMV0pO1xuXG4gICAgICAgIGlmIChpc0FjdGl2ZVRhcmdldCkge1xuICAgICAgICAgIHRoaXMuX2FjdGl2YXRlKHRoaXMuX3RhcmdldHNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5fYWN0aXZhdGUgPSBmdW5jdGlvbiBfYWN0aXZhdGUodGFyZ2V0KSB7XG4gICAgICB0aGlzLl9hY3RpdmVUYXJnZXQgPSB0YXJnZXQ7XG5cbiAgICAgIHRoaXMuX2NsZWFyKCk7XG5cbiAgICAgIHZhciBxdWVyaWVzID0gdGhpcy5fc2VsZWN0b3Iuc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RvciArIFwiW2RhdGEtdGFyZ2V0PVxcXCJcIiArIHRhcmdldCArIFwiXFxcIl0sXCIgKyBzZWxlY3RvciArIFwiW2hyZWY9XFxcIlwiICsgdGFyZ2V0ICsgXCJcXFwiXVwiO1xuICAgICAgfSk7XG5cbiAgICAgIHZhciAkbGluayA9ICQoW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJpZXMuam9pbignLCcpKSkpO1xuXG4gICAgICBpZiAoJGxpbmsuaGFzQ2xhc3MoQ2xhc3NOYW1lJDguRFJPUERPV05fSVRFTSkpIHtcbiAgICAgICAgJGxpbmsuY2xvc2VzdChTZWxlY3RvciQ4LkRST1BET1dOKS5maW5kKFNlbGVjdG9yJDguRFJPUERPV05fVE9HR0xFKS5hZGRDbGFzcyhDbGFzc05hbWUkOC5BQ1RJVkUpO1xuICAgICAgICAkbGluay5hZGRDbGFzcyhDbGFzc05hbWUkOC5BQ1RJVkUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2V0IHRyaWdnZXJlZCBsaW5rIGFzIGFjdGl2ZVxuICAgICAgICAkbGluay5hZGRDbGFzcyhDbGFzc05hbWUkOC5BQ1RJVkUpOyAvLyBTZXQgdHJpZ2dlcmVkIGxpbmtzIHBhcmVudHMgYXMgYWN0aXZlXG4gICAgICAgIC8vIFdpdGggYm90aCA8dWw+IGFuZCA8bmF2PiBtYXJrdXAgYSBwYXJlbnQgaXMgdGhlIHByZXZpb3VzIHNpYmxpbmcgb2YgYW55IG5hdiBhbmNlc3RvclxuXG4gICAgICAgICRsaW5rLnBhcmVudHMoU2VsZWN0b3IkOC5OQVZfTElTVF9HUk9VUCkucHJldihTZWxlY3RvciQ4Lk5BVl9MSU5LUyArIFwiLCBcIiArIFNlbGVjdG9yJDguTElTVF9JVEVNUykuYWRkQ2xhc3MoQ2xhc3NOYW1lJDguQUNUSVZFKTsgLy8gSGFuZGxlIHNwZWNpYWwgY2FzZSB3aGVuIC5uYXYtbGluayBpcyBpbnNpZGUgLm5hdi1pdGVtXG5cbiAgICAgICAgJGxpbmsucGFyZW50cyhTZWxlY3RvciQ4Lk5BVl9MSVNUX0dST1VQKS5wcmV2KFNlbGVjdG9yJDguTkFWX0lURU1TKS5jaGlsZHJlbihTZWxlY3RvciQ4Lk5BVl9MSU5LUykuYWRkQ2xhc3MoQ2xhc3NOYW1lJDguQUNUSVZFKTtcbiAgICAgIH1cblxuICAgICAgJCh0aGlzLl9zY3JvbGxFbGVtZW50KS50cmlnZ2VyKEV2ZW50JDguQUNUSVZBVEUsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogdGFyZ2V0XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9jbGVhciA9IGZ1bmN0aW9uIF9jbGVhcigpIHtcbiAgICAgIFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0aGlzLl9zZWxlY3RvcikpLmZpbHRlcihmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5jbGFzc0xpc3QuY29udGFpbnMoQ2xhc3NOYW1lJDguQUNUSVZFKTtcbiAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUuY2xhc3NMaXN0LnJlbW92ZShDbGFzc05hbWUkOC5BQ1RJVkUpO1xuICAgICAgfSk7XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBTY3JvbGxTcHkuX2pRdWVyeUludGVyZmFjZSA9IGZ1bmN0aW9uIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAkKHRoaXMpLmRhdGEoREFUQV9LRVkkOCk7XG5cbiAgICAgICAgdmFyIF9jb25maWcgPSB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiBjb25maWc7XG5cbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IG5ldyBTY3JvbGxTcHkodGhpcywgX2NvbmZpZyk7XG4gICAgICAgICAgJCh0aGlzKS5kYXRhKERBVEFfS0VZJDgsIGRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gbWV0aG9kIG5hbWVkIFxcXCJcIiArIGNvbmZpZyArIFwiXFxcIlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9jcmVhdGVDbGFzcyhTY3JvbGxTcHksIG51bGwsIFt7XG4gICAgICBrZXk6IFwiVkVSU0lPTlwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBWRVJTSU9OJDg7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkRlZmF1bHRcIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gRGVmYXVsdCQ2O1xuICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBTY3JvbGxTcHk7XG4gIH0oKTtcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBEYXRhIEFwaSBpbXBsZW1lbnRhdGlvblxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cblxuICAkKHdpbmRvdykub24oRXZlbnQkOC5MT0FEX0RBVEFfQVBJLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNjcm9sbFNweXMgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IkOC5EQVRBX1NQWSkpO1xuICAgIHZhciBzY3JvbGxTcHlzTGVuZ3RoID0gc2Nyb2xsU3B5cy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpID0gc2Nyb2xsU3B5c0xlbmd0aDsgaS0tOykge1xuICAgICAgdmFyICRzcHkgPSAkKHNjcm9sbFNweXNbaV0pO1xuXG4gICAgICBTY3JvbGxTcHkuX2pRdWVyeUludGVyZmFjZS5jYWxsKCRzcHksICRzcHkuZGF0YSgpKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIGpRdWVyeVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgJC5mbltOQU1FJDhdID0gU2Nyb2xsU3B5Ll9qUXVlcnlJbnRlcmZhY2U7XG4gICQuZm5bTkFNRSQ4XS5Db25zdHJ1Y3RvciA9IFNjcm9sbFNweTtcblxuICAkLmZuW05BTUUkOF0ubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAkLmZuW05BTUUkOF0gPSBKUVVFUllfTk9fQ09ORkxJQ1QkODtcbiAgICByZXR1cm4gU2Nyb2xsU3B5Ll9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBDb25zdGFudHNcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBOQU1FJDkgPSAndGFiJztcbiAgdmFyIFZFUlNJT04kOSA9ICc0LjMuMSc7XG4gIHZhciBEQVRBX0tFWSQ5ID0gJ2JzLnRhYic7XG4gIHZhciBFVkVOVF9LRVkkOSA9IFwiLlwiICsgREFUQV9LRVkkOTtcbiAgdmFyIERBVEFfQVBJX0tFWSQ3ID0gJy5kYXRhLWFwaSc7XG4gIHZhciBKUVVFUllfTk9fQ09ORkxJQ1QkOSA9ICQuZm5bTkFNRSQ5XTtcbiAgdmFyIEV2ZW50JDkgPSB7XG4gICAgSElERTogXCJoaWRlXCIgKyBFVkVOVF9LRVkkOSxcbiAgICBISURERU46IFwiaGlkZGVuXCIgKyBFVkVOVF9LRVkkOSxcbiAgICBTSE9XOiBcInNob3dcIiArIEVWRU5UX0tFWSQ5LFxuICAgIFNIT1dOOiBcInNob3duXCIgKyBFVkVOVF9LRVkkOSxcbiAgICBDTElDS19EQVRBX0FQSTogXCJjbGlja1wiICsgRVZFTlRfS0VZJDkgKyBEQVRBX0FQSV9LRVkkN1xuICB9O1xuICB2YXIgQ2xhc3NOYW1lJDkgPSB7XG4gICAgRFJPUERPV05fTUVOVTogJ2Ryb3Bkb3duLW1lbnUnLFxuICAgIEFDVElWRTogJ2FjdGl2ZScsXG4gICAgRElTQUJMRUQ6ICdkaXNhYmxlZCcsXG4gICAgRkFERTogJ2ZhZGUnLFxuICAgIFNIT1c6ICdzaG93J1xuICB9O1xuICB2YXIgU2VsZWN0b3IkOSA9IHtcbiAgICBEUk9QRE9XTjogJy5kcm9wZG93bicsXG4gICAgTkFWX0xJU1RfR1JPVVA6ICcubmF2LCAubGlzdC1ncm91cCcsXG4gICAgQUNUSVZFOiAnLmFjdGl2ZScsXG4gICAgQUNUSVZFX1VMOiAnPiBsaSA+IC5hY3RpdmUnLFxuICAgIERBVEFfVE9HR0xFOiAnW2RhdGEtdG9nZ2xlPVwidGFiXCJdLCBbZGF0YS10b2dnbGU9XCJwaWxsXCJdLCBbZGF0YS10b2dnbGU9XCJsaXN0XCJdJyxcbiAgICBEUk9QRE9XTl9UT0dHTEU6ICcuZHJvcGRvd24tdG9nZ2xlJyxcbiAgICBEUk9QRE9XTl9BQ1RJVkVfQ0hJTEQ6ICc+IC5kcm9wZG93bi1tZW51IC5hY3RpdmUnXG4gICAgLyoqXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqL1xuXG4gIH07XG5cbiAgdmFyIFRhYiA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFRhYihlbGVtZW50KSB7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICB9IC8vIEdldHRlcnNcblxuXG4gICAgdmFyIF9wcm90byA9IFRhYi5wcm90b3R5cGU7XG5cbiAgICAvLyBQdWJsaWNcbiAgICBfcHJvdG8uc2hvdyA9IGZ1bmN0aW9uIHNob3coKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5fZWxlbWVudC5wYXJlbnROb2RlICYmIHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgJCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUkOS5BQ1RJVkUpIHx8ICQodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoQ2xhc3NOYW1lJDkuRElTQUJMRUQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHRhcmdldDtcbiAgICAgIHZhciBwcmV2aW91cztcbiAgICAgIHZhciBsaXN0RWxlbWVudCA9ICQodGhpcy5fZWxlbWVudCkuY2xvc2VzdChTZWxlY3RvciQ5Lk5BVl9MSVNUX0dST1VQKVswXTtcbiAgICAgIHZhciBzZWxlY3RvciA9IFV0aWwuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcblxuICAgICAgaWYgKGxpc3RFbGVtZW50KSB7XG4gICAgICAgIHZhciBpdGVtU2VsZWN0b3IgPSBsaXN0RWxlbWVudC5ub2RlTmFtZSA9PT0gJ1VMJyB8fCBsaXN0RWxlbWVudC5ub2RlTmFtZSA9PT0gJ09MJyA/IFNlbGVjdG9yJDkuQUNUSVZFX1VMIDogU2VsZWN0b3IkOS5BQ1RJVkU7XG4gICAgICAgIHByZXZpb3VzID0gJC5tYWtlQXJyYXkoJChsaXN0RWxlbWVudCkuZmluZChpdGVtU2VsZWN0b3IpKTtcbiAgICAgICAgcHJldmlvdXMgPSBwcmV2aW91c1twcmV2aW91cy5sZW5ndGggLSAxXTtcbiAgICAgIH1cblxuICAgICAgdmFyIGhpZGVFdmVudCA9ICQuRXZlbnQoRXZlbnQkOS5ISURFLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRoaXMuX2VsZW1lbnRcbiAgICAgIH0pO1xuICAgICAgdmFyIHNob3dFdmVudCA9ICQuRXZlbnQoRXZlbnQkOS5TSE9XLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHByZXZpb3VzXG4gICAgICB9KTtcblxuICAgICAgaWYgKHByZXZpb3VzKSB7XG4gICAgICAgICQocHJldmlvdXMpLnRyaWdnZXIoaGlkZUV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgJCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKHNob3dFdmVudCk7XG5cbiAgICAgIGlmIChzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgfHwgaGlkZUV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgIHRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9hY3RpdmF0ZSh0aGlzLl9lbGVtZW50LCBsaXN0RWxlbWVudCk7XG5cbiAgICAgIHZhciBjb21wbGV0ZSA9IGZ1bmN0aW9uIGNvbXBsZXRlKCkge1xuICAgICAgICB2YXIgaGlkZGVuRXZlbnQgPSAkLkV2ZW50KEV2ZW50JDkuSElEREVOLCB7XG4gICAgICAgICAgcmVsYXRlZFRhcmdldDogX3RoaXMuX2VsZW1lbnRcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBzaG93bkV2ZW50ID0gJC5FdmVudChFdmVudCQ5LlNIT1dOLCB7XG4gICAgICAgICAgcmVsYXRlZFRhcmdldDogcHJldmlvdXNcbiAgICAgICAgfSk7XG4gICAgICAgICQocHJldmlvdXMpLnRyaWdnZXIoaGlkZGVuRXZlbnQpO1xuICAgICAgICAkKF90aGlzLl9lbGVtZW50KS50cmlnZ2VyKHNob3duRXZlbnQpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICB0aGlzLl9hY3RpdmF0ZSh0YXJnZXQsIHRhcmdldC5wYXJlbnROb2RlLCBjb21wbGV0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uZGlzcG9zZSA9IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgICAkLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwgREFUQV9LRVkkOSk7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgICB9IC8vIFByaXZhdGVcbiAgICA7XG5cbiAgICBfcHJvdG8uX2FjdGl2YXRlID0gZnVuY3Rpb24gX2FjdGl2YXRlKGVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgYWN0aXZlRWxlbWVudHMgPSBjb250YWluZXIgJiYgKGNvbnRhaW5lci5ub2RlTmFtZSA9PT0gJ1VMJyB8fCBjb250YWluZXIubm9kZU5hbWUgPT09ICdPTCcpID8gJChjb250YWluZXIpLmZpbmQoU2VsZWN0b3IkOS5BQ1RJVkVfVUwpIDogJChjb250YWluZXIpLmNoaWxkcmVuKFNlbGVjdG9yJDkuQUNUSVZFKTtcbiAgICAgIHZhciBhY3RpdmUgPSBhY3RpdmVFbGVtZW50c1swXTtcbiAgICAgIHZhciBpc1RyYW5zaXRpb25pbmcgPSBjYWxsYmFjayAmJiBhY3RpdmUgJiYgJChhY3RpdmUpLmhhc0NsYXNzKENsYXNzTmFtZSQ5LkZBREUpO1xuXG4gICAgICB2YXIgY29tcGxldGUgPSBmdW5jdGlvbiBjb21wbGV0ZSgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzMi5fdHJhbnNpdGlvbkNvbXBsZXRlKGVsZW1lbnQsIGFjdGl2ZSwgY2FsbGJhY2spO1xuICAgICAgfTtcblxuICAgICAgaWYgKGFjdGl2ZSAmJiBpc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWwuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQoYWN0aXZlKTtcbiAgICAgICAgJChhY3RpdmUpLnJlbW92ZUNsYXNzKENsYXNzTmFtZSQ5LlNIT1cpLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCBjb21wbGV0ZSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5fdHJhbnNpdGlvbkNvbXBsZXRlID0gZnVuY3Rpb24gX3RyYW5zaXRpb25Db21wbGV0ZShlbGVtZW50LCBhY3RpdmUsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgICQoYWN0aXZlKS5yZW1vdmVDbGFzcyhDbGFzc05hbWUkOS5BQ1RJVkUpO1xuICAgICAgICB2YXIgZHJvcGRvd25DaGlsZCA9ICQoYWN0aXZlLnBhcmVudE5vZGUpLmZpbmQoU2VsZWN0b3IkOS5EUk9QRE9XTl9BQ1RJVkVfQ0hJTEQpWzBdO1xuXG4gICAgICAgIGlmIChkcm9wZG93bkNoaWxkKSB7XG4gICAgICAgICAgJChkcm9wZG93bkNoaWxkKS5yZW1vdmVDbGFzcyhDbGFzc05hbWUkOS5BQ1RJVkUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFjdGl2ZS5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSA9PT0gJ3RhYicpIHtcbiAgICAgICAgICBhY3RpdmUuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICQoZWxlbWVudCkuYWRkQ2xhc3MoQ2xhc3NOYW1lJDkuQUNUSVZFKTtcblxuICAgICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdyb2xlJykgPT09ICd0YWInKSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIFV0aWwucmVmbG93KGVsZW1lbnQpO1xuXG4gICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ2xhc3NOYW1lJDkuRkFERSkpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZSQ5LlNIT1cpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxlbWVudC5wYXJlbnROb2RlICYmICQoZWxlbWVudC5wYXJlbnROb2RlKS5oYXNDbGFzcyhDbGFzc05hbWUkOS5EUk9QRE9XTl9NRU5VKSkge1xuICAgICAgICB2YXIgZHJvcGRvd25FbGVtZW50ID0gJChlbGVtZW50KS5jbG9zZXN0KFNlbGVjdG9yJDkuRFJPUERPV04pWzBdO1xuXG4gICAgICAgIGlmIChkcm9wZG93bkVsZW1lbnQpIHtcbiAgICAgICAgICB2YXIgZHJvcGRvd25Ub2dnbGVMaXN0ID0gW10uc2xpY2UuY2FsbChkcm9wZG93bkVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3RvciQ5LkRST1BET1dOX1RPR0dMRSkpO1xuICAgICAgICAgICQoZHJvcGRvd25Ub2dnbGVMaXN0KS5hZGRDbGFzcyhDbGFzc05hbWUkOS5BQ1RJVkUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBUYWIuX2pRdWVyeUludGVyZmFjZSA9IGZ1bmN0aW9uIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTtcbiAgICAgICAgdmFyIGRhdGEgPSAkdGhpcy5kYXRhKERBVEFfS0VZJDkpO1xuXG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgIGRhdGEgPSBuZXcgVGFiKHRoaXMpO1xuICAgICAgICAgICR0aGlzLmRhdGEoREFUQV9LRVkkOSwgZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyBtZXRob2QgbmFtZWQgXFxcIlwiICsgY29uZmlnICsgXCJcXFwiXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRhdGFbY29uZmlnXSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX2NyZWF0ZUNsYXNzKFRhYiwgbnVsbCwgW3tcbiAgICAgIGtleTogXCJWRVJTSU9OXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIFZFUlNJT04kOTtcbiAgICAgIH1cbiAgICB9XSk7XG5cbiAgICByZXR1cm4gVGFiO1xuICB9KCk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJChkb2N1bWVudCkub24oRXZlbnQkOS5DTElDS19EQVRBX0FQSSwgU2VsZWN0b3IkOS5EQVRBX1RPR0dMRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIFRhYi5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoJCh0aGlzKSwgJ3Nob3cnKTtcbiAgfSk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogalF1ZXJ5XG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICAkLmZuW05BTUUkOV0gPSBUYWIuX2pRdWVyeUludGVyZmFjZTtcbiAgJC5mbltOQU1FJDldLkNvbnN0cnVjdG9yID0gVGFiO1xuXG4gICQuZm5bTkFNRSQ5XS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICQuZm5bTkFNRSQ5XSA9IEpRVUVSWV9OT19DT05GTElDVCQ5O1xuICAgIHJldHVybiBUYWIuX2pRdWVyeUludGVyZmFjZTtcbiAgfTtcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIENvbnN0YW50c1xuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgdmFyIE5BTUUkYSA9ICd0b2FzdCc7XG4gIHZhciBWRVJTSU9OJGEgPSAnNC4zLjEnO1xuICB2YXIgREFUQV9LRVkkYSA9ICdicy50b2FzdCc7XG4gIHZhciBFVkVOVF9LRVkkYSA9IFwiLlwiICsgREFUQV9LRVkkYTtcbiAgdmFyIEpRVUVSWV9OT19DT05GTElDVCRhID0gJC5mbltOQU1FJGFdO1xuICB2YXIgRXZlbnQkYSA9IHtcbiAgICBDTElDS19ESVNNSVNTOiBcImNsaWNrLmRpc21pc3NcIiArIEVWRU5UX0tFWSRhLFxuICAgIEhJREU6IFwiaGlkZVwiICsgRVZFTlRfS0VZJGEsXG4gICAgSElEREVOOiBcImhpZGRlblwiICsgRVZFTlRfS0VZJGEsXG4gICAgU0hPVzogXCJzaG93XCIgKyBFVkVOVF9LRVkkYSxcbiAgICBTSE9XTjogXCJzaG93blwiICsgRVZFTlRfS0VZJGFcbiAgfTtcbiAgdmFyIENsYXNzTmFtZSRhID0ge1xuICAgIEZBREU6ICdmYWRlJyxcbiAgICBISURFOiAnaGlkZScsXG4gICAgU0hPVzogJ3Nob3cnLFxuICAgIFNIT1dJTkc6ICdzaG93aW5nJ1xuICB9O1xuICB2YXIgRGVmYXVsdFR5cGUkNyA9IHtcbiAgICBhbmltYXRpb246ICdib29sZWFuJyxcbiAgICBhdXRvaGlkZTogJ2Jvb2xlYW4nLFxuICAgIGRlbGF5OiAnbnVtYmVyJ1xuICB9O1xuICB2YXIgRGVmYXVsdCQ3ID0ge1xuICAgIGFuaW1hdGlvbjogdHJ1ZSxcbiAgICBhdXRvaGlkZTogdHJ1ZSxcbiAgICBkZWxheTogNTAwXG4gIH07XG4gIHZhciBTZWxlY3RvciRhID0ge1xuICAgIERBVEFfRElTTUlTUzogJ1tkYXRhLWRpc21pc3M9XCJ0b2FzdFwiXSdcbiAgICAvKipcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKiBDbGFzcyBEZWZpbml0aW9uXG4gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICovXG5cbiAgfTtcblxuICB2YXIgVG9hc3QgPVxuICAvKiNfX1BVUkVfXyovXG4gIGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUb2FzdChlbGVtZW50LCBjb25maWcpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgICB0aGlzLl90aW1lb3V0ID0gbnVsbDtcblxuICAgICAgdGhpcy5fc2V0TGlzdGVuZXJzKCk7XG4gICAgfSAvLyBHZXR0ZXJzXG5cblxuICAgIHZhciBfcHJvdG8gPSBUb2FzdC5wcm90b3R5cGU7XG5cbiAgICAvLyBQdWJsaWNcbiAgICBfcHJvdG8uc2hvdyA9IGZ1bmN0aW9uIHNob3coKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoRXZlbnQkYS5TSE9XKTtcblxuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5hbmltYXRpb24pIHtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZSRhLkZBREUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29tcGxldGUgPSBmdW5jdGlvbiBjb21wbGV0ZSgpIHtcbiAgICAgICAgX3RoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDbGFzc05hbWUkYS5TSE9XSU5HKTtcblxuICAgICAgICBfdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZSRhLlNIT1cpO1xuXG4gICAgICAgICQoX3RoaXMuX2VsZW1lbnQpLnRyaWdnZXIoRXZlbnQkYS5TSE9XTik7XG5cbiAgICAgICAgaWYgKF90aGlzLl9jb25maWcuYXV0b2hpZGUpIHtcbiAgICAgICAgICBfdGhpcy5oaWRlKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDbGFzc05hbWUkYS5ISURFKTtcblxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZSRhLlNIT1dJTkcpO1xuXG4gICAgICBpZiAodGhpcy5fY29uZmlnLmFuaW1hdGlvbikge1xuICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgY29tcGxldGUpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uaGlkZSA9IGZ1bmN0aW9uIGhpZGUod2l0aG91dFRpbWVvdXQpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAoIXRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENsYXNzTmFtZSRhLlNIT1cpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgJCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKEV2ZW50JGEuSElERSk7XG5cbiAgICAgIGlmICh3aXRob3V0VGltZW91dCkge1xuICAgICAgICB0aGlzLl9jbG9zZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMi5fY2xvc2UoKTtcbiAgICAgICAgfSwgdGhpcy5fY29uZmlnLmRlbGF5KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuICAgICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGlmICh0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDbGFzc05hbWUkYS5TSE9XKSkge1xuICAgICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ2xhc3NOYW1lJGEuU0hPVyk7XG4gICAgICB9XG5cbiAgICAgICQodGhpcy5fZWxlbWVudCkub2ZmKEV2ZW50JGEuQ0xJQ0tfRElTTUlTUyk7XG4gICAgICAkLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwgREFUQV9LRVkkYSk7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IG51bGw7XG4gICAgfSAvLyBQcml2YXRlXG4gICAgO1xuXG4gICAgX3Byb3RvLl9nZXRDb25maWcgPSBmdW5jdGlvbiBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgICAgY29uZmlnID0gX29iamVjdFNwcmVhZCh7fSwgRGVmYXVsdCQ3LCAkKHRoaXMuX2VsZW1lbnQpLmRhdGEoKSwgdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiYgY29uZmlnID8gY29uZmlnIDoge30pO1xuICAgICAgVXRpbC50eXBlQ2hlY2tDb25maWcoTkFNRSRhLCBjb25maWcsIHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFR5cGUpO1xuICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9zZXRMaXN0ZW5lcnMgPSBmdW5jdGlvbiBfc2V0TGlzdGVuZXJzKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgICQodGhpcy5fZWxlbWVudCkub24oRXZlbnQkYS5DTElDS19ESVNNSVNTLCBTZWxlY3RvciRhLkRBVEFfRElTTUlTUywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMzLmhpZGUodHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9jbG9zZSA9IGZ1bmN0aW9uIF9jbG9zZSgpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICB2YXIgY29tcGxldGUgPSBmdW5jdGlvbiBjb21wbGV0ZSgpIHtcbiAgICAgICAgX3RoaXM0Ll9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lJGEuSElERSk7XG5cbiAgICAgICAgJChfdGhpczQuX2VsZW1lbnQpLnRyaWdnZXIoRXZlbnQkYS5ISURERU4pO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENsYXNzTmFtZSRhLlNIT1cpO1xuXG4gICAgICBpZiAodGhpcy5fY29uZmlnLmFuaW1hdGlvbikge1xuICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgY29tcGxldGUpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0gLy8gU3RhdGljXG4gICAgO1xuXG4gICAgVG9hc3QuX2pRdWVyeUludGVyZmFjZSA9IGZ1bmN0aW9uIF9qUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyICRlbGVtZW50ID0gJCh0aGlzKTtcbiAgICAgICAgdmFyIGRhdGEgPSAkZWxlbWVudC5kYXRhKERBVEFfS0VZJGEpO1xuXG4gICAgICAgIHZhciBfY29uZmlnID0gdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiYgY29uZmlnO1xuXG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgIGRhdGEgPSBuZXcgVG9hc3QodGhpcywgX2NvbmZpZyk7XG4gICAgICAgICAgJGVsZW1lbnQuZGF0YShEQVRBX0tFWSRhLCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIG1ldGhvZCBuYW1lZCBcXFwiXCIgKyBjb25maWcgKyBcIlxcXCJcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YVtjb25maWddKHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX2NyZWF0ZUNsYXNzKFRvYXN0LCBudWxsLCBbe1xuICAgICAga2V5OiBcIlZFUlNJT05cIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gVkVSU0lPTiRhO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJEZWZhdWx0VHlwZVwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBEZWZhdWx0VHlwZSQ3O1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJEZWZhdWx0XCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIERlZmF1bHQkNztcbiAgICAgIH1cbiAgICB9XSk7XG5cbiAgICByZXR1cm4gVG9hc3Q7XG4gIH0oKTtcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBqUXVlcnlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJC5mbltOQU1FJGFdID0gVG9hc3QuX2pRdWVyeUludGVyZmFjZTtcbiAgJC5mbltOQU1FJGFdLkNvbnN0cnVjdG9yID0gVG9hc3Q7XG5cbiAgJC5mbltOQU1FJGFdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbltOQU1FJGFdID0gSlFVRVJZX05PX0NPTkZMSUNUJGE7XG4gICAgcmV0dXJuIFRvYXN0Ll9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCAodjQuMy4xKTogaW5kZXguanNcbiAgICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodHlwZW9mICQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb290c3RyYXBcXCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgalF1ZXJ5LiBqUXVlcnkgbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgQm9vdHN0cmFwXFwncyBKYXZhU2NyaXB0LicpO1xuICAgIH1cblxuICAgIHZhciB2ZXJzaW9uID0gJC5mbi5qcXVlcnkuc3BsaXQoJyAnKVswXS5zcGxpdCgnLicpO1xuICAgIHZhciBtaW5NYWpvciA9IDE7XG4gICAgdmFyIGx0TWFqb3IgPSAyO1xuICAgIHZhciBtaW5NaW5vciA9IDk7XG4gICAgdmFyIG1pblBhdGNoID0gMTtcbiAgICB2YXIgbWF4TWFqb3IgPSA0O1xuXG4gICAgaWYgKHZlcnNpb25bMF0gPCBsdE1ham9yICYmIHZlcnNpb25bMV0gPCBtaW5NaW5vciB8fCB2ZXJzaW9uWzBdID09PSBtaW5NYWpvciAmJiB2ZXJzaW9uWzFdID09PSBtaW5NaW5vciAmJiB2ZXJzaW9uWzJdIDwgbWluUGF0Y2ggfHwgdmVyc2lvblswXSA+PSBtYXhNYWpvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdCb290c3RyYXBcXCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgYXQgbGVhc3QgalF1ZXJ5IHYxLjkuMSBidXQgbGVzcyB0aGFuIHY0LjAuMCcpO1xuICAgIH1cbiAgfSkoKTtcblxuICBleHBvcnRzLlV0aWwgPSBVdGlsO1xuICBleHBvcnRzLkFsZXJ0ID0gQWxlcnQ7XG4gIGV4cG9ydHMuQnV0dG9uID0gQnV0dG9uO1xuICBleHBvcnRzLkNhcm91c2VsID0gQ2Fyb3VzZWw7XG4gIGV4cG9ydHMuQ29sbGFwc2UgPSBDb2xsYXBzZTtcbiAgZXhwb3J0cy5Ecm9wZG93biA9IERyb3Bkb3duO1xuICBleHBvcnRzLk1vZGFsID0gTW9kYWw7XG4gIGV4cG9ydHMuUG9wb3ZlciA9IFBvcG92ZXI7XG4gIGV4cG9ydHMuU2Nyb2xsc3B5ID0gU2Nyb2xsU3B5O1xuICBleHBvcnRzLlRhYiA9IFRhYjtcbiAgZXhwb3J0cy5Ub2FzdCA9IFRvYXN0O1xuICBleHBvcnRzLlRvb2x0aXAgPSBUb29sdGlwO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJvb3RzdHJhcC5qcy5tYXBcbiIsInZhciBtYXRjaGVzID0gcmVxdWlyZSgnbWF0Y2hlcy1zZWxlY3RvcicpXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChlbGVtZW50LCBzZWxlY3RvciwgY2hlY2tZb1NlbGYpIHtcclxuICB2YXIgcGFyZW50ID0gY2hlY2tZb1NlbGYgPyBlbGVtZW50IDogZWxlbWVudC5wYXJlbnROb2RlXHJcblxyXG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50ICE9PSBkb2N1bWVudCkge1xyXG4gICAgaWYgKG1hdGNoZXMocGFyZW50LCBzZWxlY3RvcikpIHJldHVybiBwYXJlbnQ7XHJcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZVxyXG4gIH1cclxufVxyXG4iLCJcclxuLyoqXHJcbiAqIEVsZW1lbnQgcHJvdG90eXBlLlxyXG4gKi9cclxuXHJcbnZhciBwcm90byA9IEVsZW1lbnQucHJvdG90eXBlO1xyXG5cclxuLyoqXHJcbiAqIFZlbmRvciBmdW5jdGlvbi5cclxuICovXHJcblxyXG52YXIgdmVuZG9yID0gcHJvdG8ubWF0Y2hlc1NlbGVjdG9yXHJcbiAgfHwgcHJvdG8ud2Via2l0TWF0Y2hlc1NlbGVjdG9yXHJcbiAgfHwgcHJvdG8ubW96TWF0Y2hlc1NlbGVjdG9yXHJcbiAgfHwgcHJvdG8ubXNNYXRjaGVzU2VsZWN0b3JcclxuICB8fCBwcm90by5vTWF0Y2hlc1NlbGVjdG9yO1xyXG5cclxuLyoqXHJcbiAqIEV4cG9zZSBgbWF0Y2goKWAuXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBtYXRjaDtcclxuXHJcbi8qKlxyXG4gKiBNYXRjaCBgZWxgIHRvIGBzZWxlY3RvcmAuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcclxuICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yXHJcbiAqIEByZXR1cm4ge0Jvb2xlYW59XHJcbiAqIEBhcGkgcHVibGljXHJcbiAqL1xyXG5cclxuZnVuY3Rpb24gbWF0Y2goZWwsIHNlbGVjdG9yKSB7XHJcbiAgaWYgKHZlbmRvcikgcmV0dXJuIHZlbmRvci5jYWxsKGVsLCBzZWxlY3Rvcik7XHJcbiAgdmFyIG5vZGVzID0gZWwucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcclxuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgKytpKSB7XHJcbiAgICBpZiAobm9kZXNbaV0gPT0gZWwpIHJldHVybiB0cnVlO1xyXG4gIH1cclxuICByZXR1cm4gZmFsc2U7XHJcbn0iLCJ2YXIgYmluZCA9IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyID8gJ2FkZEV2ZW50TGlzdGVuZXInIDogJ2F0dGFjaEV2ZW50JyxcbiAgICB1bmJpbmQgPSB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciA/ICdyZW1vdmVFdmVudExpc3RlbmVyJyA6ICdkZXRhY2hFdmVudCcsXG4gICAgcHJlZml4ID0gYmluZCAhPT0gJ2FkZEV2ZW50TGlzdGVuZXInID8gJ29uJyA6ICcnO1xuXG4vKipcbiAqIEJpbmQgYGVsYCBldmVudCBgdHlwZWAgdG8gYGZuYC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gY2FwdHVyZVxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMuYmluZCA9IGZ1bmN0aW9uKGVsLCB0eXBlLCBmbiwgY2FwdHVyZSl7XG4gIGVsW2JpbmRdKHByZWZpeCArIHR5cGUsIGZuLCBjYXB0dXJlIHx8IGZhbHNlKTtcbiAgcmV0dXJuIGZuO1xufTtcblxuLyoqXG4gKiBVbmJpbmQgYGVsYCBldmVudCBgdHlwZWAncyBjYWxsYmFjayBgZm5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtCb29sZWFufSBjYXB0dXJlXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy51bmJpbmQgPSBmdW5jdGlvbihlbCwgdHlwZSwgZm4sIGNhcHR1cmUpe1xuICBlbFt1bmJpbmRdKHByZWZpeCArIHR5cGUsIGZuLCBjYXB0dXJlIHx8IGZhbHNlKTtcbiAgcmV0dXJuIGZuO1xufTsiLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiKShmYWxzZSk7XG4vLyBNb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi8qIVxcbiAqIEJvb3RzdHJhcCB2NC4zLjEgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXFxuICogQ29weXJpZ2h0IDIwMTEtMjAxOSBUaGUgQm9vdHN0cmFwIEF1dGhvcnNcXG4gKiBDb3B5cmlnaHQgMjAxMS0yMDE5IFR3aXR0ZXIsIEluYy5cXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxcbiAqL1xcbjpyb290IHtcXG4gIC0tYmx1ZTogIzAwN2JmZjtcXG4gIC0taW5kaWdvOiAjNjYxMGYyO1xcbiAgLS1wdXJwbGU6ICM2ZjQyYzE7XFxuICAtLXBpbms6ICNlODNlOGM7XFxuICAtLXJlZDogI2RjMzU0NTtcXG4gIC0tb3JhbmdlOiAjZmQ3ZTE0O1xcbiAgLS15ZWxsb3c6ICNmZmMxMDc7XFxuICAtLWdyZWVuOiAjMjhhNzQ1O1xcbiAgLS10ZWFsOiAjMjBjOTk3O1xcbiAgLS1jeWFuOiAjMTdhMmI4O1xcbiAgLS13aGl0ZTogI2ZmZjtcXG4gIC0tZ3JheTogIzZjNzU3ZDtcXG4gIC0tZ3JheS1kYXJrOiAjMzQzYTQwO1xcbiAgLS1wcmltYXJ5OiAjMDA3YmZmO1xcbiAgLS1zZWNvbmRhcnk6ICM2Yzc1N2Q7XFxuICAtLXN1Y2Nlc3M6ICMyOGE3NDU7XFxuICAtLWluZm86ICMxN2EyYjg7XFxuICAtLXdhcm5pbmc6ICNmZmMxMDc7XFxuICAtLWRhbmdlcjogI2RjMzU0NTtcXG4gIC0tbGlnaHQ6ICNmOGY5ZmE7XFxuICAtLWRhcms6ICMzNDNhNDA7XFxuICAtLWJyZWFrcG9pbnQteHM6IDA7XFxuICAtLWJyZWFrcG9pbnQtc206IDU3NnB4O1xcbiAgLS1icmVha3BvaW50LW1kOiA3NjhweDtcXG4gIC0tYnJlYWtwb2ludC1sZzogOTkycHg7XFxuICAtLWJyZWFrcG9pbnQteGw6IDEyMDBweDtcXG4gIC0tZm9udC1mYW1pbHktc2Fucy1zZXJpZjogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcXFwiU2Vnb2UgVUlcXFwiLCBSb2JvdG8sIFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsIEFyaWFsLCBcXFwiTm90byBTYW5zXFxcIiwgc2Fucy1zZXJpZiwgXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIiwgXFxcIlNlZ29lIFVJIEVtb2ppXFxcIiwgXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCIsIFxcXCJOb3RvIENvbG9yIEVtb2ppXFxcIjtcXG4gIC0tZm9udC1mYW1pbHktbW9ub3NwYWNlOiBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFxcXCJMaWJlcmF0aW9uIE1vbm9cXFwiLCBcXFwiQ291cmllciBOZXdcXFwiLCBtb25vc3BhY2U7XFxufVxcblxcbiosXFxuKjo6YmVmb3JlLFxcbio6OmFmdGVyIHtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcblxcbmh0bWwge1xcbiAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7XFxuICBsaW5lLWhlaWdodDogMS4xNTtcXG4gIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcXG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTtcXG59XFxuXFxuYXJ0aWNsZSwgYXNpZGUsIGZpZ2NhcHRpb24sIGZpZ3VyZSwgZm9vdGVyLCBoZWFkZXIsIGhncm91cCwgbWFpbiwgbmF2LCBzZWN0aW9uIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG5ib2R5IHtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFxcXCJTZWdvZSBVSVxcXCIsIFJvYm90bywgXFxcIkhlbHZldGljYSBOZXVlXFxcIiwgQXJpYWwsIFxcXCJOb3RvIFNhbnNcXFwiLCBzYW5zLXNlcmlmLCBcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLCBcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLCBcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIiwgXFxcIk5vdG8gQ29sb3IgRW1vamlcXFwiO1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbn1cXG5cXG5bdGFiaW5kZXg9XFxcIi0xXFxcIl06Zm9jdXMge1xcbiAgb3V0bGluZTogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG5ociB7XFxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcXG4gIGhlaWdodDogMDtcXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xcbn1cXG5cXG5oMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHtcXG4gIG1hcmdpbi10b3A6IDA7XFxuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XFxufVxcblxcbnAge1xcbiAgbWFyZ2luLXRvcDogMDtcXG4gIG1hcmdpbi1ib3R0b206IDFyZW07XFxufVxcblxcbmFiYnJbdGl0bGVdLFxcbmFiYnJbZGF0YS1vcmlnaW5hbC10aXRsZV0ge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICAtd2Via2l0LXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDtcXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDtcXG4gIGN1cnNvcjogaGVscDtcXG4gIGJvcmRlci1ib3R0b206IDA7XFxuICAtd2Via2l0LXRleHQtZGVjb3JhdGlvbi1za2lwLWluazogbm9uZTtcXG4gIHRleHQtZGVjb3JhdGlvbi1za2lwLWluazogbm9uZTtcXG59XFxuXFxuYWRkcmVzcyB7XFxuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxufVxcblxcbm9sLFxcbnVsLFxcbmRsIHtcXG4gIG1hcmdpbi10b3A6IDA7XFxuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xcbn1cXG5cXG5vbCBvbCxcXG51bCB1bCxcXG5vbCB1bCxcXG51bCBvbCB7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbn1cXG5cXG5kdCB7XFxuICBmb250LXdlaWdodDogNzAwO1xcbn1cXG5cXG5kZCB7XFxuICBtYXJnaW4tYm90dG9tOiAuNXJlbTtcXG4gIG1hcmdpbi1sZWZ0OiAwO1xcbn1cXG5cXG5ibG9ja3F1b3RlIHtcXG4gIG1hcmdpbjogMCAwIDFyZW07XFxufVxcblxcbmIsXFxuc3Ryb25nIHtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XFxufVxcblxcbnNtYWxsIHtcXG4gIGZvbnQtc2l6ZTogODAlO1xcbn1cXG5cXG5zdWIsXFxuc3VwIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGZvbnQtc2l6ZTogNzUlO1xcbiAgbGluZS1oZWlnaHQ6IDA7XFxuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XFxufVxcblxcbnN1YiB7XFxuICBib3R0b206IC0uMjVlbTtcXG59XFxuXFxuc3VwIHtcXG4gIHRvcDogLS41ZW07XFxufVxcblxcbmEge1xcbiAgY29sb3I6ICMwMDdiZmY7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuYTpob3ZlciB7XFxuICBjb2xvcjogIzAwNTZiMztcXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbn1cXG5cXG5hOm5vdChbaHJlZl0pOm5vdChbdGFiaW5kZXhdKSB7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuXFxuYTpub3QoW2hyZWZdKTpub3QoW3RhYmluZGV4XSk6aG92ZXIsIGE6bm90KFtocmVmXSk6bm90KFt0YWJpbmRleF0pOmZvY3VzIHtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbn1cXG5cXG5hOm5vdChbaHJlZl0pOm5vdChbdGFiaW5kZXhdKTpmb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbn1cXG5cXG5wcmUsXFxuY29kZSxcXG5rYmQsXFxuc2FtcCB7XFxuICBmb250LWZhbWlseTogU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcXFwiTGliZXJhdGlvbiBNb25vXFxcIiwgXFxcIkNvdXJpZXIgTmV3XFxcIiwgbW9ub3NwYWNlO1xcbiAgZm9udC1zaXplOiAxZW07XFxufVxcblxcbnByZSB7XFxuICBtYXJnaW4tdG9wOiAwO1xcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbn1cXG5cXG5maWd1cmUge1xcbiAgbWFyZ2luOiAwIDAgMXJlbTtcXG59XFxuXFxuaW1nIHtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuICBib3JkZXItc3R5bGU6IG5vbmU7XFxufVxcblxcbnN2ZyB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG59XFxuXFxudGFibGUge1xcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcXG59XFxuXFxuY2FwdGlvbiB7XFxuICBwYWRkaW5nLXRvcDogMC43NXJlbTtcXG4gIHBhZGRpbmctYm90dG9tOiAwLjc1cmVtO1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgY2FwdGlvbi1zaWRlOiBib3R0b207XFxufVxcblxcbnRoIHtcXG4gIHRleHQtYWxpZ246IGluaGVyaXQ7XFxufVxcblxcbmxhYmVsIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcXG59XFxuXFxuYnV0dG9uIHtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxufVxcblxcbmJ1dHRvbjpmb2N1cyB7XFxuICBvdXRsaW5lOiAxcHggZG90dGVkO1xcbiAgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO1xcbn1cXG5cXG5pbnB1dCxcXG5idXR0b24sXFxuc2VsZWN0LFxcbm9wdGdyb3VwLFxcbnRleHRhcmVhIHtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xcbiAgZm9udC1zaXplOiBpbmhlcml0O1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxufVxcblxcbmJ1dHRvbixcXG5pbnB1dCB7XFxuICBvdmVyZmxvdzogdmlzaWJsZTtcXG59XFxuXFxuYnV0dG9uLFxcbnNlbGVjdCB7XFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXG59XFxuXFxuc2VsZWN0IHtcXG4gIHdvcmQtd3JhcDogbm9ybWFsO1xcbn1cXG5cXG5idXR0b24sXFxuW3R5cGU9XFxcImJ1dHRvblxcXCJdLFxcblt0eXBlPVxcXCJyZXNldFxcXCJdLFxcblt0eXBlPVxcXCJzdWJtaXRcXFwiXSB7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjtcXG59XFxuXFxuYnV0dG9uOm5vdCg6ZGlzYWJsZWQpLFxcblt0eXBlPVxcXCJidXR0b25cXFwiXTpub3QoOmRpc2FibGVkKSxcXG5bdHlwZT1cXFwicmVzZXRcXFwiXTpub3QoOmRpc2FibGVkKSxcXG5bdHlwZT1cXFwic3VibWl0XFxcIl06bm90KDpkaXNhYmxlZCkge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG5idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXFxuW3R5cGU9XFxcImJ1dHRvblxcXCJdOjotbW96LWZvY3VzLWlubmVyLFxcblt0eXBlPVxcXCJyZXNldFxcXCJdOjotbW96LWZvY3VzLWlubmVyLFxcblt0eXBlPVxcXCJzdWJtaXRcXFwiXTo6LW1vei1mb2N1cy1pbm5lciB7XFxuICBwYWRkaW5nOiAwO1xcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xcbn1cXG5cXG5pbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdLFxcbmlucHV0W3R5cGU9XFxcImNoZWNrYm94XFxcIl0ge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIHBhZGRpbmc6IDA7XFxufVxcblxcbmlucHV0W3R5cGU9XFxcImRhdGVcXFwiXSxcXG5pbnB1dFt0eXBlPVxcXCJ0aW1lXFxcIl0sXFxuaW5wdXRbdHlwZT1cXFwiZGF0ZXRpbWUtbG9jYWxcXFwiXSxcXG5pbnB1dFt0eXBlPVxcXCJtb250aFxcXCJdIHtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbGlzdGJveDtcXG59XFxuXFxudGV4dGFyZWEge1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxuICByZXNpemU6IHZlcnRpY2FsO1xcbn1cXG5cXG5maWVsZHNldCB7XFxuICBtaW4td2lkdGg6IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgbWFyZ2luOiAwO1xcbiAgYm9yZGVyOiAwO1xcbn1cXG5cXG5sZWdlbmQge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIHBhZGRpbmc6IDA7XFxuICBtYXJnaW4tYm90dG9tOiAuNXJlbTtcXG4gIGZvbnQtc2l6ZTogMS41cmVtO1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XFxufVxcblxcbnByb2dyZXNzIHtcXG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcXG59XFxuXFxuW3R5cGU9XFxcIm51bWJlclxcXCJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxcblt0eXBlPVxcXCJudW1iZXJcXFwiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcblxcblt0eXBlPVxcXCJzZWFyY2hcXFwiXSB7XFxuICBvdXRsaW5lLW9mZnNldDogLTJweDtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuXFxuW3R5cGU9XFxcInNlYXJjaFxcXCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuXFxuOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiB7XFxuICBmb250OiBpbmhlcml0O1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247XFxufVxcblxcbm91dHB1dCB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcblxcbnN1bW1hcnkge1xcbiAgZGlzcGxheTogbGlzdC1pdGVtO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG50ZW1wbGF0ZSB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5cXG5baGlkZGVuXSB7XFxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxufVxcblxcbmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsXFxuLmgxLCAuaDIsIC5oMywgLmg0LCAuaDUsIC5oNiB7XFxuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuMjtcXG59XFxuXFxuaDEsIC5oMSB7XFxuICBmb250LXNpemU6IDIuNXJlbTtcXG59XFxuXFxuaDIsIC5oMiB7XFxuICBmb250LXNpemU6IDJyZW07XFxufVxcblxcbmgzLCAuaDMge1xcbiAgZm9udC1zaXplOiAxLjc1cmVtO1xcbn1cXG5cXG5oNCwgLmg0IHtcXG4gIGZvbnQtc2l6ZTogMS41cmVtO1xcbn1cXG5cXG5oNSwgLmg1IHtcXG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcXG59XFxuXFxuaDYsIC5oNiB7XFxuICBmb250LXNpemU6IDFyZW07XFxufVxcblxcbi5sZWFkIHtcXG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcXG4gIGZvbnQtd2VpZ2h0OiAzMDA7XFxufVxcblxcbi5kaXNwbGF5LTEge1xcbiAgZm9udC1zaXplOiA2cmVtO1xcbiAgZm9udC13ZWlnaHQ6IDMwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjI7XFxufVxcblxcbi5kaXNwbGF5LTIge1xcbiAgZm9udC1zaXplOiA1LjVyZW07XFxuICBmb250LXdlaWdodDogMzAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuMjtcXG59XFxuXFxuLmRpc3BsYXktMyB7XFxuICBmb250LXNpemU6IDQuNXJlbTtcXG4gIGZvbnQtd2VpZ2h0OiAzMDA7XFxuICBsaW5lLWhlaWdodDogMS4yO1xcbn1cXG5cXG4uZGlzcGxheS00IHtcXG4gIGZvbnQtc2l6ZTogMy41cmVtO1xcbiAgZm9udC13ZWlnaHQ6IDMwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjI7XFxufVxcblxcbmhyIHtcXG4gIG1hcmdpbi10b3A6IDFyZW07XFxuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xcbiAgYm9yZGVyOiAwO1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xKTtcXG59XFxuXFxuc21hbGwsXFxuLnNtYWxsIHtcXG4gIGZvbnQtc2l6ZTogODAlO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG59XFxuXFxubWFyayxcXG4ubWFyayB7XFxuICBwYWRkaW5nOiAwLjJlbTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmY2Y4ZTM7XFxufVxcblxcbi5saXN0LXVuc3R5bGVkIHtcXG4gIHBhZGRpbmctbGVmdDogMDtcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XFxufVxcblxcbi5saXN0LWlubGluZSB7XFxuICBwYWRkaW5nLWxlZnQ6IDA7XFxuICBsaXN0LXN0eWxlOiBub25lO1xcbn1cXG5cXG4ubGlzdC1pbmxpbmUtaXRlbSB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcblxcbi5saXN0LWlubGluZS1pdGVtOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgbWFyZ2luLXJpZ2h0OiAwLjVyZW07XFxufVxcblxcbi5pbml0aWFsaXNtIHtcXG4gIGZvbnQtc2l6ZTogOTAlO1xcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcXG59XFxuXFxuLmJsb2NrcXVvdGUge1xcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcXG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcXG59XFxuXFxuLmJsb2NrcXVvdGUtZm9vdGVyIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgZm9udC1zaXplOiA4MCU7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG59XFxuXFxuLmJsb2NrcXVvdGUtZm9vdGVyOjpiZWZvcmUge1xcbiAgY29udGVudDogXFxcIlxcXFwyMDE0XFxcXDAwQTBcXFwiO1xcbn1cXG5cXG4uaW1nLWZsdWlkIHtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIGhlaWdodDogYXV0bztcXG59XFxuXFxuLmltZy10aHVtYm5haWwge1xcbiAgcGFkZGluZzogMC4yNXJlbTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZGVlMmU2O1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIGhlaWdodDogYXV0bztcXG59XFxuXFxuLmZpZ3VyZSB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcblxcbi5maWd1cmUtaW1nIHtcXG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxO1xcbn1cXG5cXG4uZmlndXJlLWNhcHRpb24ge1xcbiAgZm9udC1zaXplOiA5MCU7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG59XFxuXFxuY29kZSB7XFxuICBmb250LXNpemU6IDg3LjUlO1xcbiAgY29sb3I6ICNlODNlOGM7XFxuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xcbn1cXG5cXG5hID4gY29kZSB7XFxuICBjb2xvcjogaW5oZXJpdDtcXG59XFxuXFxua2JkIHtcXG4gIHBhZGRpbmc6IDAuMnJlbSAwLjRyZW07XFxuICBmb250LXNpemU6IDg3LjUlO1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjEyNTI5O1xcbiAgYm9yZGVyLXJhZGl1czogMC4ycmVtO1xcbn1cXG5cXG5rYmQga2JkIHtcXG4gIHBhZGRpbmc6IDA7XFxuICBmb250LXNpemU6IDEwMCU7XFxuICBmb250LXdlaWdodDogNzAwO1xcbn1cXG5cXG5wcmUge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBmb250LXNpemU6IDg3LjUlO1xcbiAgY29sb3I6ICMyMTI1Mjk7XFxufVxcblxcbnByZSBjb2RlIHtcXG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgd29yZC1icmVhazogbm9ybWFsO1xcbn1cXG5cXG4ucHJlLXNjcm9sbGFibGUge1xcbiAgbWF4LWhlaWdodDogMzQwcHg7XFxuICBvdmVyZmxvdy15OiBzY3JvbGw7XFxufVxcblxcbi5jb250YWluZXIge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLmNvbnRhaW5lciB7XFxuICAgIG1heC13aWR0aDogNTQwcHg7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLmNvbnRhaW5lciB7XFxuICAgIG1heC13aWR0aDogNzIwcHg7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xcbiAgLmNvbnRhaW5lciB7XFxuICAgIG1heC13aWR0aDogOTYwcHg7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC5jb250YWluZXIge1xcbiAgICBtYXgtd2lkdGg6IDExNDBweDtcXG4gIH1cXG59XFxuXFxuLmNvbnRhaW5lci1mbHVpZCB7XFxuICB3aWR0aDogMTAwJTtcXG4gIHBhZGRpbmctcmlnaHQ6IDE1cHg7XFxuICBwYWRkaW5nLWxlZnQ6IDE1cHg7XFxuICBtYXJnaW4tcmlnaHQ6IGF1dG87XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG59XFxuXFxuLnJvdyB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgbWFyZ2luLXJpZ2h0OiAtMTVweDtcXG4gIG1hcmdpbi1sZWZ0OiAtMTVweDtcXG59XFxuXFxuLm5vLWd1dHRlcnMge1xcbiAgbWFyZ2luLXJpZ2h0OiAwO1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxufVxcblxcbi5uby1ndXR0ZXJzID4gLmNvbCxcXG4ubm8tZ3V0dGVycyA+IFtjbGFzcyo9XFxcImNvbC1cXFwiXSB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwO1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbn1cXG5cXG4uY29sLTEsIC5jb2wtMiwgLmNvbC0zLCAuY29sLTQsIC5jb2wtNSwgLmNvbC02LCAuY29sLTcsIC5jb2wtOCwgLmNvbC05LCAuY29sLTEwLCAuY29sLTExLCAuY29sLTEyLCAuY29sLFxcbi5jb2wtYXV0bywgLmNvbC1zbS0xLCAuY29sLXNtLTIsIC5jb2wtc20tMywgLmNvbC1zbS00LCAuY29sLXNtLTUsIC5jb2wtc20tNiwgLmNvbC1zbS03LCAuY29sLXNtLTgsIC5jb2wtc20tOSwgLmNvbC1zbS0xMCwgLmNvbC1zbS0xMSwgLmNvbC1zbS0xMiwgLmNvbC1zbSxcXG4uY29sLXNtLWF1dG8sIC5jb2wtbWQtMSwgLmNvbC1tZC0yLCAuY29sLW1kLTMsIC5jb2wtbWQtNCwgLmNvbC1tZC01LCAuY29sLW1kLTYsIC5jb2wtbWQtNywgLmNvbC1tZC04LCAuY29sLW1kLTksIC5jb2wtbWQtMTAsIC5jb2wtbWQtMTEsIC5jb2wtbWQtMTIsIC5jb2wtbWQsXFxuLmNvbC1tZC1hdXRvLCAuY29sLWxnLTEsIC5jb2wtbGctMiwgLmNvbC1sZy0zLCAuY29sLWxnLTQsIC5jb2wtbGctNSwgLmNvbC1sZy02LCAuY29sLWxnLTcsIC5jb2wtbGctOCwgLmNvbC1sZy05LCAuY29sLWxnLTEwLCAuY29sLWxnLTExLCAuY29sLWxnLTEyLCAuY29sLWxnLFxcbi5jb2wtbGctYXV0bywgLmNvbC14bC0xLCAuY29sLXhsLTIsIC5jb2wteGwtMywgLmNvbC14bC00LCAuY29sLXhsLTUsIC5jb2wteGwtNiwgLmNvbC14bC03LCAuY29sLXhsLTgsIC5jb2wteGwtOSwgLmNvbC14bC0xMCwgLmNvbC14bC0xMSwgLmNvbC14bC0xMiwgLmNvbC14bCxcXG4uY29sLXhsLWF1dG8ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xcbn1cXG5cXG4uY29sIHtcXG4gIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiAwO1xcbiAgZmxleC1iYXNpczogMDtcXG4gIC1tcy1mbGV4LXBvc2l0aXZlOiAxO1xcbiAgZmxleC1ncm93OiAxO1xcbiAgbWF4LXdpZHRoOiAxMDAlO1xcbn1cXG5cXG4uY29sLWF1dG8ge1xcbiAgLW1zLWZsZXg6IDAgMCBhdXRvO1xcbiAgZmxleDogMCAwIGF1dG87XFxuICB3aWR0aDogYXV0bztcXG4gIG1heC13aWR0aDogMTAwJTtcXG59XFxuXFxuLmNvbC0xIHtcXG4gIC1tcy1mbGV4OiAwIDAgOC4zMzMzMzMlO1xcbiAgZmxleDogMCAwIDguMzMzMzMzJTtcXG4gIG1heC13aWR0aDogOC4zMzMzMzMlO1xcbn1cXG5cXG4uY29sLTIge1xcbiAgLW1zLWZsZXg6IDAgMCAxNi42NjY2NjclO1xcbiAgZmxleDogMCAwIDE2LjY2NjY2NyU7XFxuICBtYXgtd2lkdGg6IDE2LjY2NjY2NyU7XFxufVxcblxcbi5jb2wtMyB7XFxuICAtbXMtZmxleDogMCAwIDI1JTtcXG4gIGZsZXg6IDAgMCAyNSU7XFxuICBtYXgtd2lkdGg6IDI1JTtcXG59XFxuXFxuLmNvbC00IHtcXG4gIC1tcy1mbGV4OiAwIDAgMzMuMzMzMzMzJTtcXG4gIGZsZXg6IDAgMCAzMy4zMzMzMzMlO1xcbiAgbWF4LXdpZHRoOiAzMy4zMzMzMzMlO1xcbn1cXG5cXG4uY29sLTUge1xcbiAgLW1zLWZsZXg6IDAgMCA0MS42NjY2NjclO1xcbiAgZmxleDogMCAwIDQxLjY2NjY2NyU7XFxuICBtYXgtd2lkdGg6IDQxLjY2NjY2NyU7XFxufVxcblxcbi5jb2wtNiB7XFxuICAtbXMtZmxleDogMCAwIDUwJTtcXG4gIGZsZXg6IDAgMCA1MCU7XFxuICBtYXgtd2lkdGg6IDUwJTtcXG59XFxuXFxuLmNvbC03IHtcXG4gIC1tcy1mbGV4OiAwIDAgNTguMzMzMzMzJTtcXG4gIGZsZXg6IDAgMCA1OC4zMzMzMzMlO1xcbiAgbWF4LXdpZHRoOiA1OC4zMzMzMzMlO1xcbn1cXG5cXG4uY29sLTgge1xcbiAgLW1zLWZsZXg6IDAgMCA2Ni42NjY2NjclO1xcbiAgZmxleDogMCAwIDY2LjY2NjY2NyU7XFxuICBtYXgtd2lkdGg6IDY2LjY2NjY2NyU7XFxufVxcblxcbi5jb2wtOSB7XFxuICAtbXMtZmxleDogMCAwIDc1JTtcXG4gIGZsZXg6IDAgMCA3NSU7XFxuICBtYXgtd2lkdGg6IDc1JTtcXG59XFxuXFxuLmNvbC0xMCB7XFxuICAtbXMtZmxleDogMCAwIDgzLjMzMzMzMyU7XFxuICBmbGV4OiAwIDAgODMuMzMzMzMzJTtcXG4gIG1heC13aWR0aDogODMuMzMzMzMzJTtcXG59XFxuXFxuLmNvbC0xMSB7XFxuICAtbXMtZmxleDogMCAwIDkxLjY2NjY2NyU7XFxuICBmbGV4OiAwIDAgOTEuNjY2NjY3JTtcXG4gIG1heC13aWR0aDogOTEuNjY2NjY3JTtcXG59XFxuXFxuLmNvbC0xMiB7XFxuICAtbXMtZmxleDogMCAwIDEwMCU7XFxuICBmbGV4OiAwIDAgMTAwJTtcXG4gIG1heC13aWR0aDogMTAwJTtcXG59XFxuXFxuLm9yZGVyLWZpcnN0IHtcXG4gIC1tcy1mbGV4LW9yZGVyOiAtMTtcXG4gIG9yZGVyOiAtMTtcXG59XFxuXFxuLm9yZGVyLWxhc3Qge1xcbiAgLW1zLWZsZXgtb3JkZXI6IDEzO1xcbiAgb3JkZXI6IDEzO1xcbn1cXG5cXG4ub3JkZXItMCB7XFxuICAtbXMtZmxleC1vcmRlcjogMDtcXG4gIG9yZGVyOiAwO1xcbn1cXG5cXG4ub3JkZXItMSB7XFxuICAtbXMtZmxleC1vcmRlcjogMTtcXG4gIG9yZGVyOiAxO1xcbn1cXG5cXG4ub3JkZXItMiB7XFxuICAtbXMtZmxleC1vcmRlcjogMjtcXG4gIG9yZGVyOiAyO1xcbn1cXG5cXG4ub3JkZXItMyB7XFxuICAtbXMtZmxleC1vcmRlcjogMztcXG4gIG9yZGVyOiAzO1xcbn1cXG5cXG4ub3JkZXItNCB7XFxuICAtbXMtZmxleC1vcmRlcjogNDtcXG4gIG9yZGVyOiA0O1xcbn1cXG5cXG4ub3JkZXItNSB7XFxuICAtbXMtZmxleC1vcmRlcjogNTtcXG4gIG9yZGVyOiA1O1xcbn1cXG5cXG4ub3JkZXItNiB7XFxuICAtbXMtZmxleC1vcmRlcjogNjtcXG4gIG9yZGVyOiA2O1xcbn1cXG5cXG4ub3JkZXItNyB7XFxuICAtbXMtZmxleC1vcmRlcjogNztcXG4gIG9yZGVyOiA3O1xcbn1cXG5cXG4ub3JkZXItOCB7XFxuICAtbXMtZmxleC1vcmRlcjogODtcXG4gIG9yZGVyOiA4O1xcbn1cXG5cXG4ub3JkZXItOSB7XFxuICAtbXMtZmxleC1vcmRlcjogOTtcXG4gIG9yZGVyOiA5O1xcbn1cXG5cXG4ub3JkZXItMTAge1xcbiAgLW1zLWZsZXgtb3JkZXI6IDEwO1xcbiAgb3JkZXI6IDEwO1xcbn1cXG5cXG4ub3JkZXItMTEge1xcbiAgLW1zLWZsZXgtb3JkZXI6IDExO1xcbiAgb3JkZXI6IDExO1xcbn1cXG5cXG4ub3JkZXItMTIge1xcbiAgLW1zLWZsZXgtb3JkZXI6IDEyO1xcbiAgb3JkZXI6IDEyO1xcbn1cXG5cXG4ub2Zmc2V0LTEge1xcbiAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzJTtcXG59XFxuXFxuLm9mZnNldC0yIHtcXG4gIG1hcmdpbi1sZWZ0OiAxNi42NjY2NjclO1xcbn1cXG5cXG4ub2Zmc2V0LTMge1xcbiAgbWFyZ2luLWxlZnQ6IDI1JTtcXG59XFxuXFxuLm9mZnNldC00IHtcXG4gIG1hcmdpbi1sZWZ0OiAzMy4zMzMzMzMlO1xcbn1cXG5cXG4ub2Zmc2V0LTUge1xcbiAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NyU7XFxufVxcblxcbi5vZmZzZXQtNiB7XFxuICBtYXJnaW4tbGVmdDogNTAlO1xcbn1cXG5cXG4ub2Zmc2V0LTcge1xcbiAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzMyU7XFxufVxcblxcbi5vZmZzZXQtOCB7XFxuICBtYXJnaW4tbGVmdDogNjYuNjY2NjY3JTtcXG59XFxuXFxuLm9mZnNldC05IHtcXG4gIG1hcmdpbi1sZWZ0OiA3NSU7XFxufVxcblxcbi5vZmZzZXQtMTAge1xcbiAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMyU7XFxufVxcblxcbi5vZmZzZXQtMTEge1xcbiAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY2NyU7XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLmNvbC1zbSB7XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiAwO1xcbiAgICBmbGV4LWJhc2lzOiAwO1xcbiAgICAtbXMtZmxleC1wb3NpdGl2ZTogMTtcXG4gICAgZmxleC1ncm93OiAxO1xcbiAgICBtYXgtd2lkdGg6IDEwMCU7XFxuICB9XFxuICAuY29sLXNtLWF1dG8ge1xcbiAgICAtbXMtZmxleDogMCAwIGF1dG87XFxuICAgIGZsZXg6IDAgMCBhdXRvO1xcbiAgICB3aWR0aDogYXV0bztcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLmNvbC1zbS0xIHtcXG4gICAgLW1zLWZsZXg6IDAgMCA4LjMzMzMzMyU7XFxuICAgIGZsZXg6IDAgMCA4LjMzMzMzMyU7XFxuICAgIG1heC13aWR0aDogOC4zMzMzMzMlO1xcbiAgfVxcbiAgLmNvbC1zbS0yIHtcXG4gICAgLW1zLWZsZXg6IDAgMCAxNi42NjY2NjclO1xcbiAgICBmbGV4OiAwIDAgMTYuNjY2NjY3JTtcXG4gICAgbWF4LXdpZHRoOiAxNi42NjY2NjclO1xcbiAgfVxcbiAgLmNvbC1zbS0zIHtcXG4gICAgLW1zLWZsZXg6IDAgMCAyNSU7XFxuICAgIGZsZXg6IDAgMCAyNSU7XFxuICAgIG1heC13aWR0aDogMjUlO1xcbiAgfVxcbiAgLmNvbC1zbS00IHtcXG4gICAgLW1zLWZsZXg6IDAgMCAzMy4zMzMzMzMlO1xcbiAgICBmbGV4OiAwIDAgMzMuMzMzMzMzJTtcXG4gICAgbWF4LXdpZHRoOiAzMy4zMzMzMzMlO1xcbiAgfVxcbiAgLmNvbC1zbS01IHtcXG4gICAgLW1zLWZsZXg6IDAgMCA0MS42NjY2NjclO1xcbiAgICBmbGV4OiAwIDAgNDEuNjY2NjY3JTtcXG4gICAgbWF4LXdpZHRoOiA0MS42NjY2NjclO1xcbiAgfVxcbiAgLmNvbC1zbS02IHtcXG4gICAgLW1zLWZsZXg6IDAgMCA1MCU7XFxuICAgIGZsZXg6IDAgMCA1MCU7XFxuICAgIG1heC13aWR0aDogNTAlO1xcbiAgfVxcbiAgLmNvbC1zbS03IHtcXG4gICAgLW1zLWZsZXg6IDAgMCA1OC4zMzMzMzMlO1xcbiAgICBmbGV4OiAwIDAgNTguMzMzMzMzJTtcXG4gICAgbWF4LXdpZHRoOiA1OC4zMzMzMzMlO1xcbiAgfVxcbiAgLmNvbC1zbS04IHtcXG4gICAgLW1zLWZsZXg6IDAgMCA2Ni42NjY2NjclO1xcbiAgICBmbGV4OiAwIDAgNjYuNjY2NjY3JTtcXG4gICAgbWF4LXdpZHRoOiA2Ni42NjY2NjclO1xcbiAgfVxcbiAgLmNvbC1zbS05IHtcXG4gICAgLW1zLWZsZXg6IDAgMCA3NSU7XFxuICAgIGZsZXg6IDAgMCA3NSU7XFxuICAgIG1heC13aWR0aDogNzUlO1xcbiAgfVxcbiAgLmNvbC1zbS0xMCB7XFxuICAgIC1tcy1mbGV4OiAwIDAgODMuMzMzMzMzJTtcXG4gICAgZmxleDogMCAwIDgzLjMzMzMzMyU7XFxuICAgIG1heC13aWR0aDogODMuMzMzMzMzJTtcXG4gIH1cXG4gIC5jb2wtc20tMTEge1xcbiAgICAtbXMtZmxleDogMCAwIDkxLjY2NjY2NyU7XFxuICAgIGZsZXg6IDAgMCA5MS42NjY2NjclO1xcbiAgICBtYXgtd2lkdGg6IDkxLjY2NjY2NyU7XFxuICB9XFxuICAuY29sLXNtLTEyIHtcXG4gICAgLW1zLWZsZXg6IDAgMCAxMDAlO1xcbiAgICBmbGV4OiAwIDAgMTAwJTtcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLm9yZGVyLXNtLWZpcnN0IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IC0xO1xcbiAgICBvcmRlcjogLTE7XFxuICB9XFxuICAub3JkZXItc20tbGFzdCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAxMztcXG4gICAgb3JkZXI6IDEzO1xcbiAgfVxcbiAgLm9yZGVyLXNtLTAge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMDtcXG4gICAgb3JkZXI6IDA7XFxuICB9XFxuICAub3JkZXItc20tMSB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAxO1xcbiAgICBvcmRlcjogMTtcXG4gIH1cXG4gIC5vcmRlci1zbS0yIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDI7XFxuICAgIG9yZGVyOiAyO1xcbiAgfVxcbiAgLm9yZGVyLXNtLTMge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMztcXG4gICAgb3JkZXI6IDM7XFxuICB9XFxuICAub3JkZXItc20tNCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA0O1xcbiAgICBvcmRlcjogNDtcXG4gIH1cXG4gIC5vcmRlci1zbS01IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDU7XFxuICAgIG9yZGVyOiA1O1xcbiAgfVxcbiAgLm9yZGVyLXNtLTYge1xcbiAgICAtbXMtZmxleC1vcmRlcjogNjtcXG4gICAgb3JkZXI6IDY7XFxuICB9XFxuICAub3JkZXItc20tNyB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA3O1xcbiAgICBvcmRlcjogNztcXG4gIH1cXG4gIC5vcmRlci1zbS04IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDg7XFxuICAgIG9yZGVyOiA4O1xcbiAgfVxcbiAgLm9yZGVyLXNtLTkge1xcbiAgICAtbXMtZmxleC1vcmRlcjogOTtcXG4gICAgb3JkZXI6IDk7XFxuICB9XFxuICAub3JkZXItc20tMTAge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTA7XFxuICAgIG9yZGVyOiAxMDtcXG4gIH1cXG4gIC5vcmRlci1zbS0xMSB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAxMTtcXG4gICAgb3JkZXI6IDExO1xcbiAgfVxcbiAgLm9yZGVyLXNtLTEyIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDEyO1xcbiAgICBvcmRlcjogMTI7XFxuICB9XFxuICAub2Zmc2V0LXNtLTAge1xcbiAgICBtYXJnaW4tbGVmdDogMDtcXG4gIH1cXG4gIC5vZmZzZXQtc20tMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA4LjMzMzMzMyU7XFxuICB9XFxuICAub2Zmc2V0LXNtLTIge1xcbiAgICBtYXJnaW4tbGVmdDogMTYuNjY2NjY3JTtcXG4gIH1cXG4gIC5vZmZzZXQtc20tMyB7XFxuICAgIG1hcmdpbi1sZWZ0OiAyNSU7XFxuICB9XFxuICAub2Zmc2V0LXNtLTQge1xcbiAgICBtYXJnaW4tbGVmdDogMzMuMzMzMzMzJTtcXG4gIH1cXG4gIC5vZmZzZXQtc20tNSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY2NjclO1xcbiAgfVxcbiAgLm9mZnNldC1zbS02IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDUwJTtcXG4gIH1cXG4gIC5vZmZzZXQtc20tNyB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzMzMlO1xcbiAgfVxcbiAgLm9mZnNldC1zbS04IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDY2LjY2NjY2NyU7XFxuICB9XFxuICAub2Zmc2V0LXNtLTkge1xcbiAgICBtYXJnaW4tbGVmdDogNzUlO1xcbiAgfVxcbiAgLm9mZnNldC1zbS0xMCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA4My4zMzMzMzMlO1xcbiAgfVxcbiAgLm9mZnNldC1zbS0xMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY2NjclO1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gIC5jb2wtbWQge1xcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMDtcXG4gICAgZmxleC1iYXNpczogMDtcXG4gICAgLW1zLWZsZXgtcG9zaXRpdmU6IDE7XFxuICAgIGZsZXgtZ3JvdzogMTtcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLmNvbC1tZC1hdXRvIHtcXG4gICAgLW1zLWZsZXg6IDAgMCBhdXRvO1xcbiAgICBmbGV4OiAwIDAgYXV0bztcXG4gICAgd2lkdGg6IGF1dG87XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5jb2wtbWQtMSB7XFxuICAgIC1tcy1mbGV4OiAwIDAgOC4zMzMzMzMlO1xcbiAgICBmbGV4OiAwIDAgOC4zMzMzMzMlO1xcbiAgICBtYXgtd2lkdGg6IDguMzMzMzMzJTtcXG4gIH1cXG4gIC5jb2wtbWQtMiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMTYuNjY2NjY3JTtcXG4gICAgZmxleDogMCAwIDE2LjY2NjY2NyU7XFxuICAgIG1heC13aWR0aDogMTYuNjY2NjY3JTtcXG4gIH1cXG4gIC5jb2wtbWQtMyB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMjUlO1xcbiAgICBmbGV4OiAwIDAgMjUlO1xcbiAgICBtYXgtd2lkdGg6IDI1JTtcXG4gIH1cXG4gIC5jb2wtbWQtNCB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMzMuMzMzMzMzJTtcXG4gICAgZmxleDogMCAwIDMzLjMzMzMzMyU7XFxuICAgIG1heC13aWR0aDogMzMuMzMzMzMzJTtcXG4gIH1cXG4gIC5jb2wtbWQtNSB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNDEuNjY2NjY3JTtcXG4gICAgZmxleDogMCAwIDQxLjY2NjY2NyU7XFxuICAgIG1heC13aWR0aDogNDEuNjY2NjY3JTtcXG4gIH1cXG4gIC5jb2wtbWQtNiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNTAlO1xcbiAgICBmbGV4OiAwIDAgNTAlO1xcbiAgICBtYXgtd2lkdGg6IDUwJTtcXG4gIH1cXG4gIC5jb2wtbWQtNyB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNTguMzMzMzMzJTtcXG4gICAgZmxleDogMCAwIDU4LjMzMzMzMyU7XFxuICAgIG1heC13aWR0aDogNTguMzMzMzMzJTtcXG4gIH1cXG4gIC5jb2wtbWQtOCB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNjYuNjY2NjY3JTtcXG4gICAgZmxleDogMCAwIDY2LjY2NjY2NyU7XFxuICAgIG1heC13aWR0aDogNjYuNjY2NjY3JTtcXG4gIH1cXG4gIC5jb2wtbWQtOSB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNzUlO1xcbiAgICBmbGV4OiAwIDAgNzUlO1xcbiAgICBtYXgtd2lkdGg6IDc1JTtcXG4gIH1cXG4gIC5jb2wtbWQtMTAge1xcbiAgICAtbXMtZmxleDogMCAwIDgzLjMzMzMzMyU7XFxuICAgIGZsZXg6IDAgMCA4My4zMzMzMzMlO1xcbiAgICBtYXgtd2lkdGg6IDgzLjMzMzMzMyU7XFxuICB9XFxuICAuY29sLW1kLTExIHtcXG4gICAgLW1zLWZsZXg6IDAgMCA5MS42NjY2NjclO1xcbiAgICBmbGV4OiAwIDAgOTEuNjY2NjY3JTtcXG4gICAgbWF4LXdpZHRoOiA5MS42NjY2NjclO1xcbiAgfVxcbiAgLmNvbC1tZC0xMiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMTAwJTtcXG4gICAgZmxleDogMCAwIDEwMCU7XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5vcmRlci1tZC1maXJzdCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAtMTtcXG4gICAgb3JkZXI6IC0xO1xcbiAgfVxcbiAgLm9yZGVyLW1kLWxhc3Qge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTM7XFxuICAgIG9yZGVyOiAxMztcXG4gIH1cXG4gIC5vcmRlci1tZC0wIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDA7XFxuICAgIG9yZGVyOiAwO1xcbiAgfVxcbiAgLm9yZGVyLW1kLTEge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTtcXG4gICAgb3JkZXI6IDE7XFxuICB9XFxuICAub3JkZXItbWQtMiB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAyO1xcbiAgICBvcmRlcjogMjtcXG4gIH1cXG4gIC5vcmRlci1tZC0zIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDM7XFxuICAgIG9yZGVyOiAzO1xcbiAgfVxcbiAgLm9yZGVyLW1kLTQge1xcbiAgICAtbXMtZmxleC1vcmRlcjogNDtcXG4gICAgb3JkZXI6IDQ7XFxuICB9XFxuICAub3JkZXItbWQtNSB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA1O1xcbiAgICBvcmRlcjogNTtcXG4gIH1cXG4gIC5vcmRlci1tZC02IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDY7XFxuICAgIG9yZGVyOiA2O1xcbiAgfVxcbiAgLm9yZGVyLW1kLTcge1xcbiAgICAtbXMtZmxleC1vcmRlcjogNztcXG4gICAgb3JkZXI6IDc7XFxuICB9XFxuICAub3JkZXItbWQtOCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA4O1xcbiAgICBvcmRlcjogODtcXG4gIH1cXG4gIC5vcmRlci1tZC05IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDk7XFxuICAgIG9yZGVyOiA5O1xcbiAgfVxcbiAgLm9yZGVyLW1kLTEwIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDEwO1xcbiAgICBvcmRlcjogMTA7XFxuICB9XFxuICAub3JkZXItbWQtMTEge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTE7XFxuICAgIG9yZGVyOiAxMTtcXG4gIH1cXG4gIC5vcmRlci1tZC0xMiB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAxMjtcXG4gICAgb3JkZXI6IDEyO1xcbiAgfVxcbiAgLm9mZnNldC1tZC0wIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDA7XFxuICB9XFxuICAub2Zmc2V0LW1kLTEge1xcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzMzMlO1xcbiAgfVxcbiAgLm9mZnNldC1tZC0yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY2NyU7XFxuICB9XFxuICAub2Zmc2V0LW1kLTMge1xcbiAgICBtYXJnaW4tbGVmdDogMjUlO1xcbiAgfVxcbiAgLm9mZnNldC1tZC00IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzMyU7XFxuICB9XFxuICAub2Zmc2V0LW1kLTUge1xcbiAgICBtYXJnaW4tbGVmdDogNDEuNjY2NjY3JTtcXG4gIH1cXG4gIC5vZmZzZXQtbWQtNiB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1MCU7XFxuICB9XFxuICAub2Zmc2V0LW1kLTcge1xcbiAgICBtYXJnaW4tbGVmdDogNTguMzMzMzMzJTtcXG4gIH1cXG4gIC5vZmZzZXQtbWQtOCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NjclO1xcbiAgfVxcbiAgLm9mZnNldC1tZC05IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDc1JTtcXG4gIH1cXG4gIC5vZmZzZXQtbWQtMTAge1xcbiAgICBtYXJnaW4tbGVmdDogODMuMzMzMzMzJTtcXG4gIH1cXG4gIC5vZmZzZXQtbWQtMTEge1xcbiAgICBtYXJnaW4tbGVmdDogOTEuNjY2NjY3JTtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XFxuICAuY29sLWxnIHtcXG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDA7XFxuICAgIGZsZXgtYmFzaXM6IDA7XFxuICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAxO1xcbiAgICBmbGV4LWdyb3c6IDE7XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5jb2wtbGctYXV0byB7XFxuICAgIC1tcy1mbGV4OiAwIDAgYXV0bztcXG4gICAgZmxleDogMCAwIGF1dG87XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgICBtYXgtd2lkdGg6IDEwMCU7XFxuICB9XFxuICAuY29sLWxnLTEge1xcbiAgICAtbXMtZmxleDogMCAwIDguMzMzMzMzJTtcXG4gICAgZmxleDogMCAwIDguMzMzMzMzJTtcXG4gICAgbWF4LXdpZHRoOiA4LjMzMzMzMyU7XFxuICB9XFxuICAuY29sLWxnLTIge1xcbiAgICAtbXMtZmxleDogMCAwIDE2LjY2NjY2NyU7XFxuICAgIGZsZXg6IDAgMCAxNi42NjY2NjclO1xcbiAgICBtYXgtd2lkdGg6IDE2LjY2NjY2NyU7XFxuICB9XFxuICAuY29sLWxnLTMge1xcbiAgICAtbXMtZmxleDogMCAwIDI1JTtcXG4gICAgZmxleDogMCAwIDI1JTtcXG4gICAgbWF4LXdpZHRoOiAyNSU7XFxuICB9XFxuICAuY29sLWxnLTQge1xcbiAgICAtbXMtZmxleDogMCAwIDMzLjMzMzMzMyU7XFxuICAgIGZsZXg6IDAgMCAzMy4zMzMzMzMlO1xcbiAgICBtYXgtd2lkdGg6IDMzLjMzMzMzMyU7XFxuICB9XFxuICAuY29sLWxnLTUge1xcbiAgICAtbXMtZmxleDogMCAwIDQxLjY2NjY2NyU7XFxuICAgIGZsZXg6IDAgMCA0MS42NjY2NjclO1xcbiAgICBtYXgtd2lkdGg6IDQxLjY2NjY2NyU7XFxuICB9XFxuICAuY29sLWxnLTYge1xcbiAgICAtbXMtZmxleDogMCAwIDUwJTtcXG4gICAgZmxleDogMCAwIDUwJTtcXG4gICAgbWF4LXdpZHRoOiA1MCU7XFxuICB9XFxuICAuY29sLWxnLTcge1xcbiAgICAtbXMtZmxleDogMCAwIDU4LjMzMzMzMyU7XFxuICAgIGZsZXg6IDAgMCA1OC4zMzMzMzMlO1xcbiAgICBtYXgtd2lkdGg6IDU4LjMzMzMzMyU7XFxuICB9XFxuICAuY29sLWxnLTgge1xcbiAgICAtbXMtZmxleDogMCAwIDY2LjY2NjY2NyU7XFxuICAgIGZsZXg6IDAgMCA2Ni42NjY2NjclO1xcbiAgICBtYXgtd2lkdGg6IDY2LjY2NjY2NyU7XFxuICB9XFxuICAuY29sLWxnLTkge1xcbiAgICAtbXMtZmxleDogMCAwIDc1JTtcXG4gICAgZmxleDogMCAwIDc1JTtcXG4gICAgbWF4LXdpZHRoOiA3NSU7XFxuICB9XFxuICAuY29sLWxnLTEwIHtcXG4gICAgLW1zLWZsZXg6IDAgMCA4My4zMzMzMzMlO1xcbiAgICBmbGV4OiAwIDAgODMuMzMzMzMzJTtcXG4gICAgbWF4LXdpZHRoOiA4My4zMzMzMzMlO1xcbiAgfVxcbiAgLmNvbC1sZy0xMSB7XFxuICAgIC1tcy1mbGV4OiAwIDAgOTEuNjY2NjY3JTtcXG4gICAgZmxleDogMCAwIDkxLjY2NjY2NyU7XFxuICAgIG1heC13aWR0aDogOTEuNjY2NjY3JTtcXG4gIH1cXG4gIC5jb2wtbGctMTIge1xcbiAgICAtbXMtZmxleDogMCAwIDEwMCU7XFxuICAgIGZsZXg6IDAgMCAxMDAlO1xcbiAgICBtYXgtd2lkdGg6IDEwMCU7XFxuICB9XFxuICAub3JkZXItbGctZmlyc3Qge1xcbiAgICAtbXMtZmxleC1vcmRlcjogLTE7XFxuICAgIG9yZGVyOiAtMTtcXG4gIH1cXG4gIC5vcmRlci1sZy1sYXN0IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDEzO1xcbiAgICBvcmRlcjogMTM7XFxuICB9XFxuICAub3JkZXItbGctMCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAwO1xcbiAgICBvcmRlcjogMDtcXG4gIH1cXG4gIC5vcmRlci1sZy0xIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDE7XFxuICAgIG9yZGVyOiAxO1xcbiAgfVxcbiAgLm9yZGVyLWxnLTIge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMjtcXG4gICAgb3JkZXI6IDI7XFxuICB9XFxuICAub3JkZXItbGctMyB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAzO1xcbiAgICBvcmRlcjogMztcXG4gIH1cXG4gIC5vcmRlci1sZy00IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDQ7XFxuICAgIG9yZGVyOiA0O1xcbiAgfVxcbiAgLm9yZGVyLWxnLTUge1xcbiAgICAtbXMtZmxleC1vcmRlcjogNTtcXG4gICAgb3JkZXI6IDU7XFxuICB9XFxuICAub3JkZXItbGctNiB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA2O1xcbiAgICBvcmRlcjogNjtcXG4gIH1cXG4gIC5vcmRlci1sZy03IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDc7XFxuICAgIG9yZGVyOiA3O1xcbiAgfVxcbiAgLm9yZGVyLWxnLTgge1xcbiAgICAtbXMtZmxleC1vcmRlcjogODtcXG4gICAgb3JkZXI6IDg7XFxuICB9XFxuICAub3JkZXItbGctOSB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA5O1xcbiAgICBvcmRlcjogOTtcXG4gIH1cXG4gIC5vcmRlci1sZy0xMCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAxMDtcXG4gICAgb3JkZXI6IDEwO1xcbiAgfVxcbiAgLm9yZGVyLWxnLTExIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDExO1xcbiAgICBvcmRlcjogMTE7XFxuICB9XFxuICAub3JkZXItbGctMTIge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTI7XFxuICAgIG9yZGVyOiAxMjtcXG4gIH1cXG4gIC5vZmZzZXQtbGctMCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAwO1xcbiAgfVxcbiAgLm9mZnNldC1sZy0xIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzJTtcXG4gIH1cXG4gIC5vZmZzZXQtbGctMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY2NjclO1xcbiAgfVxcbiAgLm9mZnNldC1sZy0zIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDI1JTtcXG4gIH1cXG4gIC5vZmZzZXQtbGctNCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAzMy4zMzMzMzMlO1xcbiAgfVxcbiAgLm9mZnNldC1sZy01IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NyU7XFxuICB9XFxuICAub2Zmc2V0LWxnLTYge1xcbiAgICBtYXJnaW4tbGVmdDogNTAlO1xcbiAgfVxcbiAgLm9mZnNldC1sZy03IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzMyU7XFxuICB9XFxuICAub2Zmc2V0LWxnLTgge1xcbiAgICBtYXJnaW4tbGVmdDogNjYuNjY2NjY3JTtcXG4gIH1cXG4gIC5vZmZzZXQtbGctOSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA3NSU7XFxuICB9XFxuICAub2Zmc2V0LWxnLTEwIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMyU7XFxuICB9XFxuICAub2Zmc2V0LWxnLTExIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY2NyU7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC5jb2wteGwge1xcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMDtcXG4gICAgZmxleC1iYXNpczogMDtcXG4gICAgLW1zLWZsZXgtcG9zaXRpdmU6IDE7XFxuICAgIGZsZXgtZ3JvdzogMTtcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLmNvbC14bC1hdXRvIHtcXG4gICAgLW1zLWZsZXg6IDAgMCBhdXRvO1xcbiAgICBmbGV4OiAwIDAgYXV0bztcXG4gICAgd2lkdGg6IGF1dG87XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5jb2wteGwtMSB7XFxuICAgIC1tcy1mbGV4OiAwIDAgOC4zMzMzMzMlO1xcbiAgICBmbGV4OiAwIDAgOC4zMzMzMzMlO1xcbiAgICBtYXgtd2lkdGg6IDguMzMzMzMzJTtcXG4gIH1cXG4gIC5jb2wteGwtMiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMTYuNjY2NjY3JTtcXG4gICAgZmxleDogMCAwIDE2LjY2NjY2NyU7XFxuICAgIG1heC13aWR0aDogMTYuNjY2NjY3JTtcXG4gIH1cXG4gIC5jb2wteGwtMyB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMjUlO1xcbiAgICBmbGV4OiAwIDAgMjUlO1xcbiAgICBtYXgtd2lkdGg6IDI1JTtcXG4gIH1cXG4gIC5jb2wteGwtNCB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMzMuMzMzMzMzJTtcXG4gICAgZmxleDogMCAwIDMzLjMzMzMzMyU7XFxuICAgIG1heC13aWR0aDogMzMuMzMzMzMzJTtcXG4gIH1cXG4gIC5jb2wteGwtNSB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNDEuNjY2NjY3JTtcXG4gICAgZmxleDogMCAwIDQxLjY2NjY2NyU7XFxuICAgIG1heC13aWR0aDogNDEuNjY2NjY3JTtcXG4gIH1cXG4gIC5jb2wteGwtNiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNTAlO1xcbiAgICBmbGV4OiAwIDAgNTAlO1xcbiAgICBtYXgtd2lkdGg6IDUwJTtcXG4gIH1cXG4gIC5jb2wteGwtNyB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNTguMzMzMzMzJTtcXG4gICAgZmxleDogMCAwIDU4LjMzMzMzMyU7XFxuICAgIG1heC13aWR0aDogNTguMzMzMzMzJTtcXG4gIH1cXG4gIC5jb2wteGwtOCB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNjYuNjY2NjY3JTtcXG4gICAgZmxleDogMCAwIDY2LjY2NjY2NyU7XFxuICAgIG1heC13aWR0aDogNjYuNjY2NjY3JTtcXG4gIH1cXG4gIC5jb2wteGwtOSB7XFxuICAgIC1tcy1mbGV4OiAwIDAgNzUlO1xcbiAgICBmbGV4OiAwIDAgNzUlO1xcbiAgICBtYXgtd2lkdGg6IDc1JTtcXG4gIH1cXG4gIC5jb2wteGwtMTAge1xcbiAgICAtbXMtZmxleDogMCAwIDgzLjMzMzMzMyU7XFxuICAgIGZsZXg6IDAgMCA4My4zMzMzMzMlO1xcbiAgICBtYXgtd2lkdGg6IDgzLjMzMzMzMyU7XFxuICB9XFxuICAuY29sLXhsLTExIHtcXG4gICAgLW1zLWZsZXg6IDAgMCA5MS42NjY2NjclO1xcbiAgICBmbGV4OiAwIDAgOTEuNjY2NjY3JTtcXG4gICAgbWF4LXdpZHRoOiA5MS42NjY2NjclO1xcbiAgfVxcbiAgLmNvbC14bC0xMiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgMTAwJTtcXG4gICAgZmxleDogMCAwIDEwMCU7XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5vcmRlci14bC1maXJzdCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAtMTtcXG4gICAgb3JkZXI6IC0xO1xcbiAgfVxcbiAgLm9yZGVyLXhsLWxhc3Qge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTM7XFxuICAgIG9yZGVyOiAxMztcXG4gIH1cXG4gIC5vcmRlci14bC0wIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDA7XFxuICAgIG9yZGVyOiAwO1xcbiAgfVxcbiAgLm9yZGVyLXhsLTEge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTtcXG4gICAgb3JkZXI6IDE7XFxuICB9XFxuICAub3JkZXIteGwtMiB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAyO1xcbiAgICBvcmRlcjogMjtcXG4gIH1cXG4gIC5vcmRlci14bC0zIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDM7XFxuICAgIG9yZGVyOiAzO1xcbiAgfVxcbiAgLm9yZGVyLXhsLTQge1xcbiAgICAtbXMtZmxleC1vcmRlcjogNDtcXG4gICAgb3JkZXI6IDQ7XFxuICB9XFxuICAub3JkZXIteGwtNSB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA1O1xcbiAgICBvcmRlcjogNTtcXG4gIH1cXG4gIC5vcmRlci14bC02IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDY7XFxuICAgIG9yZGVyOiA2O1xcbiAgfVxcbiAgLm9yZGVyLXhsLTcge1xcbiAgICAtbXMtZmxleC1vcmRlcjogNztcXG4gICAgb3JkZXI6IDc7XFxuICB9XFxuICAub3JkZXIteGwtOCB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiA4O1xcbiAgICBvcmRlcjogODtcXG4gIH1cXG4gIC5vcmRlci14bC05IHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDk7XFxuICAgIG9yZGVyOiA5O1xcbiAgfVxcbiAgLm9yZGVyLXhsLTEwIHtcXG4gICAgLW1zLWZsZXgtb3JkZXI6IDEwO1xcbiAgICBvcmRlcjogMTA7XFxuICB9XFxuICAub3JkZXIteGwtMTEge1xcbiAgICAtbXMtZmxleC1vcmRlcjogMTE7XFxuICAgIG9yZGVyOiAxMTtcXG4gIH1cXG4gIC5vcmRlci14bC0xMiB7XFxuICAgIC1tcy1mbGV4LW9yZGVyOiAxMjtcXG4gICAgb3JkZXI6IDEyO1xcbiAgfVxcbiAgLm9mZnNldC14bC0wIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDA7XFxuICB9XFxuICAub2Zmc2V0LXhsLTEge1xcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzMzMlO1xcbiAgfVxcbiAgLm9mZnNldC14bC0yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY2NyU7XFxuICB9XFxuICAub2Zmc2V0LXhsLTMge1xcbiAgICBtYXJnaW4tbGVmdDogMjUlO1xcbiAgfVxcbiAgLm9mZnNldC14bC00IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzMyU7XFxuICB9XFxuICAub2Zmc2V0LXhsLTUge1xcbiAgICBtYXJnaW4tbGVmdDogNDEuNjY2NjY3JTtcXG4gIH1cXG4gIC5vZmZzZXQteGwtNiB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1MCU7XFxuICB9XFxuICAub2Zmc2V0LXhsLTcge1xcbiAgICBtYXJnaW4tbGVmdDogNTguMzMzMzMzJTtcXG4gIH1cXG4gIC5vZmZzZXQteGwtOCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NjclO1xcbiAgfVxcbiAgLm9mZnNldC14bC05IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDc1JTtcXG4gIH1cXG4gIC5vZmZzZXQteGwtMTAge1xcbiAgICBtYXJnaW4tbGVmdDogODMuMzMzMzMzJTtcXG4gIH1cXG4gIC5vZmZzZXQteGwtMTEge1xcbiAgICBtYXJnaW4tbGVmdDogOTEuNjY2NjY3JTtcXG4gIH1cXG59XFxuXFxuLnRhYmxlIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbn1cXG5cXG4udGFibGUgdGgsXFxuLnRhYmxlIHRkIHtcXG4gIHBhZGRpbmc6IDAuNzVyZW07XFxuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZWUyZTY7XFxufVxcblxcbi50YWJsZSB0aGVhZCB0aCB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xcbiAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNkZWUyZTY7XFxufVxcblxcbi50YWJsZSB0Ym9keSArIHRib2R5IHtcXG4gIGJvcmRlci10b3A6IDJweCBzb2xpZCAjZGVlMmU2O1xcbn1cXG5cXG4udGFibGUtc20gdGgsXFxuLnRhYmxlLXNtIHRkIHtcXG4gIHBhZGRpbmc6IDAuM3JlbTtcXG59XFxuXFxuLnRhYmxlLWJvcmRlcmVkIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZWUyZTY7XFxufVxcblxcbi50YWJsZS1ib3JkZXJlZCB0aCxcXG4udGFibGUtYm9yZGVyZWQgdGQge1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2RlZTJlNjtcXG59XFxuXFxuLnRhYmxlLWJvcmRlcmVkIHRoZWFkIHRoLFxcbi50YWJsZS1ib3JkZXJlZCB0aGVhZCB0ZCB7XFxuICBib3JkZXItYm90dG9tLXdpZHRoOiAycHg7XFxufVxcblxcbi50YWJsZS1ib3JkZXJsZXNzIHRoLFxcbi50YWJsZS1ib3JkZXJsZXNzIHRkLFxcbi50YWJsZS1ib3JkZXJsZXNzIHRoZWFkIHRoLFxcbi50YWJsZS1ib3JkZXJsZXNzIHRib2R5ICsgdGJvZHkge1xcbiAgYm9yZGVyOiAwO1xcbn1cXG5cXG4udGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZShvZGQpIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XFxufVxcblxcbi50YWJsZS1ob3ZlciB0Ym9keSB0cjpob3ZlciB7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNzUpO1xcbn1cXG5cXG4udGFibGUtcHJpbWFyeSxcXG4udGFibGUtcHJpbWFyeSA+IHRoLFxcbi50YWJsZS1wcmltYXJ5ID4gdGQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2I4ZGFmZjtcXG59XFxuXFxuLnRhYmxlLXByaW1hcnkgdGgsXFxuLnRhYmxlLXByaW1hcnkgdGQsXFxuLnRhYmxlLXByaW1hcnkgdGhlYWQgdGgsXFxuLnRhYmxlLXByaW1hcnkgdGJvZHkgKyB0Ym9keSB7XFxuICBib3JkZXItY29sb3I6ICM3YWJhZmY7XFxufVxcblxcbi50YWJsZS1ob3ZlciAudGFibGUtcHJpbWFyeTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWZjZGZmO1xcbn1cXG5cXG4udGFibGUtaG92ZXIgLnRhYmxlLXByaW1hcnk6aG92ZXIgPiB0ZCxcXG4udGFibGUtaG92ZXIgLnRhYmxlLXByaW1hcnk6aG92ZXIgPiB0aCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWZjZGZmO1xcbn1cXG5cXG4udGFibGUtc2Vjb25kYXJ5LFxcbi50YWJsZS1zZWNvbmRhcnkgPiB0aCxcXG4udGFibGUtc2Vjb25kYXJ5ID4gdGQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q2ZDhkYjtcXG59XFxuXFxuLnRhYmxlLXNlY29uZGFyeSB0aCxcXG4udGFibGUtc2Vjb25kYXJ5IHRkLFxcbi50YWJsZS1zZWNvbmRhcnkgdGhlYWQgdGgsXFxuLnRhYmxlLXNlY29uZGFyeSB0Ym9keSArIHRib2R5IHtcXG4gIGJvcmRlci1jb2xvcjogI2IzYjdiYjtcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1zZWNvbmRhcnk6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M4Y2JjZjtcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1zZWNvbmRhcnk6aG92ZXIgPiB0ZCxcXG4udGFibGUtaG92ZXIgLnRhYmxlLXNlY29uZGFyeTpob3ZlciA+IHRoIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjOGNiY2Y7XFxufVxcblxcbi50YWJsZS1zdWNjZXNzLFxcbi50YWJsZS1zdWNjZXNzID4gdGgsXFxuLnRhYmxlLXN1Y2Nlc3MgPiB0ZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzNlNmNiO1xcbn1cXG5cXG4udGFibGUtc3VjY2VzcyB0aCxcXG4udGFibGUtc3VjY2VzcyB0ZCxcXG4udGFibGUtc3VjY2VzcyB0aGVhZCB0aCxcXG4udGFibGUtc3VjY2VzcyB0Ym9keSArIHRib2R5IHtcXG4gIGJvcmRlci1jb2xvcjogIzhmZDE5ZTtcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1zdWNjZXNzOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiMWRmYmI7XFxufVxcblxcbi50YWJsZS1ob3ZlciAudGFibGUtc3VjY2Vzczpob3ZlciA+IHRkLFxcbi50YWJsZS1ob3ZlciAudGFibGUtc3VjY2Vzczpob3ZlciA+IHRoIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiMWRmYmI7XFxufVxcblxcbi50YWJsZS1pbmZvLFxcbi50YWJsZS1pbmZvID4gdGgsXFxuLnRhYmxlLWluZm8gPiB0ZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmVlNWViO1xcbn1cXG5cXG4udGFibGUtaW5mbyB0aCxcXG4udGFibGUtaW5mbyB0ZCxcXG4udGFibGUtaW5mbyB0aGVhZCB0aCxcXG4udGFibGUtaW5mbyB0Ym9keSArIHRib2R5IHtcXG4gIGJvcmRlci1jb2xvcjogIzg2Y2ZkYTtcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1pbmZvOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhYmRkZTU7XFxufVxcblxcbi50YWJsZS1ob3ZlciAudGFibGUtaW5mbzpob3ZlciA+IHRkLFxcbi50YWJsZS1ob3ZlciAudGFibGUtaW5mbzpob3ZlciA+IHRoIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhYmRkZTU7XFxufVxcblxcbi50YWJsZS13YXJuaW5nLFxcbi50YWJsZS13YXJuaW5nID4gdGgsXFxuLnRhYmxlLXdhcm5pbmcgPiB0ZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlZWJhO1xcbn1cXG5cXG4udGFibGUtd2FybmluZyB0aCxcXG4udGFibGUtd2FybmluZyB0ZCxcXG4udGFibGUtd2FybmluZyB0aGVhZCB0aCxcXG4udGFibGUtd2FybmluZyB0Ym9keSArIHRib2R5IHtcXG4gIGJvcmRlci1jb2xvcjogI2ZmZGY3ZTtcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS13YXJuaW5nOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmU4YTE7XFxufVxcblxcbi50YWJsZS1ob3ZlciAudGFibGUtd2FybmluZzpob3ZlciA+IHRkLFxcbi50YWJsZS1ob3ZlciAudGFibGUtd2FybmluZzpob3ZlciA+IHRoIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmU4YTE7XFxufVxcblxcbi50YWJsZS1kYW5nZXIsXFxuLnRhYmxlLWRhbmdlciA+IHRoLFxcbi50YWJsZS1kYW5nZXIgPiB0ZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVjNmNiO1xcbn1cXG5cXG4udGFibGUtZGFuZ2VyIHRoLFxcbi50YWJsZS1kYW5nZXIgdGQsXFxuLnRhYmxlLWRhbmdlciB0aGVhZCB0aCxcXG4udGFibGUtZGFuZ2VyIHRib2R5ICsgdGJvZHkge1xcbiAgYm9yZGVyLWNvbG9yOiAjZWQ5NjllO1xcbn1cXG5cXG4udGFibGUtaG92ZXIgLnRhYmxlLWRhbmdlcjpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFiMGI3O1xcbn1cXG5cXG4udGFibGUtaG92ZXIgLnRhYmxlLWRhbmdlcjpob3ZlciA+IHRkLFxcbi50YWJsZS1ob3ZlciAudGFibGUtZGFuZ2VyOmhvdmVyID4gdGgge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YxYjBiNztcXG59XFxuXFxuLnRhYmxlLWxpZ2h0LFxcbi50YWJsZS1saWdodCA+IHRoLFxcbi50YWJsZS1saWdodCA+IHRkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZGZkZmU7XFxufVxcblxcbi50YWJsZS1saWdodCB0aCxcXG4udGFibGUtbGlnaHQgdGQsXFxuLnRhYmxlLWxpZ2h0IHRoZWFkIHRoLFxcbi50YWJsZS1saWdodCB0Ym9keSArIHRib2R5IHtcXG4gIGJvcmRlci1jb2xvcjogI2ZiZmNmYztcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1saWdodDpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2Y2O1xcbn1cXG5cXG4udGFibGUtaG92ZXIgLnRhYmxlLWxpZ2h0OmhvdmVyID4gdGQsXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1saWdodDpob3ZlciA+IHRoIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlY2VjZjY7XFxufVxcblxcbi50YWJsZS1kYXJrLFxcbi50YWJsZS1kYXJrID4gdGgsXFxuLnRhYmxlLWRhcmsgPiB0ZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzZjOGNhO1xcbn1cXG5cXG4udGFibGUtZGFyayB0aCxcXG4udGFibGUtZGFyayB0ZCxcXG4udGFibGUtZGFyayB0aGVhZCB0aCxcXG4udGFibGUtZGFyayB0Ym9keSArIHRib2R5IHtcXG4gIGJvcmRlci1jb2xvcjogIzk1OTk5YztcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1kYXJrOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiOWJiYmU7XFxufVxcblxcbi50YWJsZS1ob3ZlciAudGFibGUtZGFyazpob3ZlciA+IHRkLFxcbi50YWJsZS1ob3ZlciAudGFibGUtZGFyazpob3ZlciA+IHRoIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiOWJiYmU7XFxufVxcblxcbi50YWJsZS1hY3RpdmUsXFxuLnRhYmxlLWFjdGl2ZSA+IHRoLFxcbi50YWJsZS1hY3RpdmUgPiB0ZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcXG59XFxuXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1hY3RpdmU6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA3NSk7XFxufVxcblxcbi50YWJsZS1ob3ZlciAudGFibGUtYWN0aXZlOmhvdmVyID4gdGQsXFxuLnRhYmxlLWhvdmVyIC50YWJsZS1hY3RpdmU6aG92ZXIgPiB0aCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcXG59XFxuXFxuLnRhYmxlIC50aGVhZC1kYXJrIHRoIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM0M2E0MDtcXG4gIGJvcmRlci1jb2xvcjogIzQ1NGQ1NTtcXG59XFxuXFxuLnRhYmxlIC50aGVhZC1saWdodCB0aCB7XFxuICBjb2xvcjogIzQ5NTA1NztcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlOWVjZWY7XFxuICBib3JkZXItY29sb3I6ICNkZWUyZTY7XFxufVxcblxcbi50YWJsZS1kYXJrIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM0M2E0MDtcXG59XFxuXFxuLnRhYmxlLWRhcmsgdGgsXFxuLnRhYmxlLWRhcmsgdGQsXFxuLnRhYmxlLWRhcmsgdGhlYWQgdGgge1xcbiAgYm9yZGVyLWNvbG9yOiAjNDU0ZDU1O1xcbn1cXG5cXG4udGFibGUtZGFyay50YWJsZS1ib3JkZXJlZCB7XFxuICBib3JkZXI6IDA7XFxufVxcblxcbi50YWJsZS1kYXJrLnRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpO1xcbn1cXG5cXG4udGFibGUtZGFyay50YWJsZS1ob3ZlciB0Ym9keSB0cjpob3ZlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNzUpO1xcbn1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogNTc1Ljk4cHgpIHtcXG4gIC50YWJsZS1yZXNwb25zaXZlLXNtIHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xcbiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XFxuICB9XFxuICAudGFibGUtcmVzcG9uc2l2ZS1zbSA+IC50YWJsZS1ib3JkZXJlZCB7XFxuICAgIGJvcmRlcjogMDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDc2Ny45OHB4KSB7XFxuICAudGFibGUtcmVzcG9uc2l2ZS1tZCB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgb3ZlcmZsb3cteDogYXV0bztcXG4gICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xcbiAgfVxcbiAgLnRhYmxlLXJlc3BvbnNpdmUtbWQgPiAudGFibGUtYm9yZGVyZWQge1xcbiAgICBib3JkZXI6IDA7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA5OTEuOThweCkge1xcbiAgLnRhYmxlLXJlc3BvbnNpdmUtbGcge1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIG92ZXJmbG93LXg6IGF1dG87XFxuICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcXG4gIH1cXG4gIC50YWJsZS1yZXNwb25zaXZlLWxnID4gLnRhYmxlLWJvcmRlcmVkIHtcXG4gICAgYm9yZGVyOiAwO1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogMTE5OS45OHB4KSB7XFxuICAudGFibGUtcmVzcG9uc2l2ZS14bCB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgb3ZlcmZsb3cteDogYXV0bztcXG4gICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xcbiAgfVxcbiAgLnRhYmxlLXJlc3BvbnNpdmUteGwgPiAudGFibGUtYm9yZGVyZWQge1xcbiAgICBib3JkZXI6IDA7XFxuICB9XFxufVxcblxcbi50YWJsZS1yZXNwb25zaXZlIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBvdmVyZmxvdy14OiBhdXRvO1xcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xcbn1cXG5cXG4udGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCB7XFxuICBib3JkZXI6IDA7XFxufVxcblxcbi5mb3JtLWNvbnRyb2wge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogY2FsYygxLjVlbSArIDAuNzVyZW0gKyAycHgpO1xcbiAgcGFkZGluZzogMC4zNzVyZW0gMC43NXJlbTtcXG4gIGZvbnQtc2l6ZTogMXJlbTtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgY29sb3I6ICM0OTUwNTc7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNjZWQ0ZGE7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3gtc2hhZG93IDAuMTVzIGVhc2UtaW4tb3V0O1xcbn1cXG5cXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xcbiAgLmZvcm0tY29udHJvbCB7XFxuICAgIHRyYW5zaXRpb246IG5vbmU7XFxuICB9XFxufVxcblxcbi5mb3JtLWNvbnRyb2w6Oi1tcy1leHBhbmQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXI6IDA7XFxufVxcblxcbi5mb3JtLWNvbnRyb2w6Zm9jdXMge1xcbiAgY29sb3I6ICM0OTUwNTc7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyLWNvbG9yOiAjODBiZGZmO1xcbiAgb3V0bGluZTogMDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDAsIDEyMywgMjU1LCAwLjI1KTtcXG59XFxuXFxuLmZvcm0tY29udHJvbDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi5mb3JtLWNvbnRyb2w6Oi1tb3otcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG5cXG4uZm9ybS1jb250cm9sOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi5mb3JtLWNvbnRyb2w6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi5mb3JtLWNvbnRyb2w6OnBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiAjNmM3NTdkO1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLmZvcm0tY29udHJvbDpkaXNhYmxlZCwgLmZvcm0tY29udHJvbFtyZWFkb25seV0ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U5ZWNlZjtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbnNlbGVjdC5mb3JtLWNvbnRyb2w6Zm9jdXM6Oi1tcy12YWx1ZSB7XFxuICBjb2xvcjogIzQ5NTA1NztcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxufVxcblxcbi5mb3JtLWNvbnRyb2wtZmlsZSxcXG4uZm9ybS1jb250cm9sLXJhbmdlIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcblxcbi5jb2wtZm9ybS1sYWJlbCB7XFxuICBwYWRkaW5nLXRvcDogY2FsYygwLjM3NXJlbSArIDFweCk7XFxuICBwYWRkaW5nLWJvdHRvbTogY2FsYygwLjM3NXJlbSArIDFweCk7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgZm9udC1zaXplOiBpbmhlcml0O1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG59XFxuXFxuLmNvbC1mb3JtLWxhYmVsLWxnIHtcXG4gIHBhZGRpbmctdG9wOiBjYWxjKDAuNXJlbSArIDFweCk7XFxuICBwYWRkaW5nLWJvdHRvbTogY2FsYygwLjVyZW0gKyAxcHgpO1xcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG59XFxuXFxuLmNvbC1mb3JtLWxhYmVsLXNtIHtcXG4gIHBhZGRpbmctdG9wOiBjYWxjKDAuMjVyZW0gKyAxcHgpO1xcbiAgcGFkZGluZy1ib3R0b206IGNhbGMoMC4yNXJlbSArIDFweCk7XFxuICBmb250LXNpemU6IDAuODc1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG59XFxuXFxuLmZvcm0tY29udHJvbC1wbGFpbnRleHQge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIHBhZGRpbmctdG9wOiAwLjM3NXJlbTtcXG4gIHBhZGRpbmctYm90dG9tOiAwLjM3NXJlbTtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgY29sb3I6ICMyMTI1Mjk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItd2lkdGg6IDFweCAwO1xcbn1cXG5cXG4uZm9ybS1jb250cm9sLXBsYWludGV4dC5mb3JtLWNvbnRyb2wtc20sIC5mb3JtLWNvbnRyb2wtcGxhaW50ZXh0LmZvcm0tY29udHJvbC1sZyB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwO1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbn1cXG5cXG4uZm9ybS1jb250cm9sLXNtIHtcXG4gIGhlaWdodDogY2FsYygxLjVlbSArIDAuNXJlbSArIDJweCk7XFxuICBwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbTtcXG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgYm9yZGVyLXJhZGl1czogMC4ycmVtO1xcbn1cXG5cXG4uZm9ybS1jb250cm9sLWxnIHtcXG4gIGhlaWdodDogY2FsYygxLjVlbSArIDFyZW0gKyAycHgpO1xcbiAgcGFkZGluZzogMC41cmVtIDFyZW07XFxuICBmb250LXNpemU6IDEuMjVyZW07XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgYm9yZGVyLXJhZGl1czogMC4zcmVtO1xcbn1cXG5cXG5zZWxlY3QuZm9ybS1jb250cm9sW3NpemVdLCBzZWxlY3QuZm9ybS1jb250cm9sW211bHRpcGxlXSB7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcblxcbnRleHRhcmVhLmZvcm0tY29udHJvbCB7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcblxcbi5mb3JtLWdyb3VwIHtcXG4gIG1hcmdpbi1ib3R0b206IDFyZW07XFxufVxcblxcbi5mb3JtLXRleHQge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBtYXJnaW4tdG9wOiAwLjI1cmVtO1xcbn1cXG5cXG4uZm9ybS1yb3cge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcXG4gIGZsZXgtd3JhcDogd3JhcDtcXG4gIG1hcmdpbi1yaWdodDogLTVweDtcXG4gIG1hcmdpbi1sZWZ0OiAtNXB4O1xcbn1cXG5cXG4uZm9ybS1yb3cgPiAuY29sLFxcbi5mb3JtLXJvdyA+IFtjbGFzcyo9XFxcImNvbC1cXFwiXSB7XFxuICBwYWRkaW5nLXJpZ2h0OiA1cHg7XFxuICBwYWRkaW5nLWxlZnQ6IDVweDtcXG59XFxuXFxuLmZvcm0tY2hlY2sge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwYWRkaW5nLWxlZnQ6IDEuMjVyZW07XFxufVxcblxcbi5mb3JtLWNoZWNrLWlucHV0IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIG1hcmdpbi10b3A6IDAuM3JlbTtcXG4gIG1hcmdpbi1sZWZ0OiAtMS4yNXJlbTtcXG59XFxuXFxuLmZvcm0tY2hlY2staW5wdXQ6ZGlzYWJsZWQgfiAuZm9ybS1jaGVjay1sYWJlbCB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG59XFxuXFxuLmZvcm0tY2hlY2stbGFiZWwge1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG59XFxuXFxuLmZvcm0tY2hlY2staW5saW5lIHtcXG4gIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBwYWRkaW5nLWxlZnQ6IDA7XFxuICBtYXJnaW4tcmlnaHQ6IDAuNzVyZW07XFxufVxcblxcbi5mb3JtLWNoZWNrLWlubGluZSAuZm9ybS1jaGVjay1pbnB1dCB7XFxuICBwb3NpdGlvbjogc3RhdGljO1xcbiAgbWFyZ2luLXRvcDogMDtcXG4gIG1hcmdpbi1yaWdodDogMC4zMTI1cmVtO1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxufVxcblxcbi52YWxpZC1mZWVkYmFjayB7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXJnaW4tdG9wOiAwLjI1cmVtO1xcbiAgZm9udC1zaXplOiA4MCU7XFxuICBjb2xvcjogIzI4YTc0NTtcXG59XFxuXFxuLnZhbGlkLXRvb2x0aXAge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAxMDAlO1xcbiAgei1pbmRleDogNTtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbTtcXG4gIG1hcmdpbi10b3A6IC4xcmVtO1xcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoNDAsIDE2NywgNjksIDAuOSk7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jb250cm9sOnZhbGlkLCAuZm9ybS1jb250cm9sLmlzLXZhbGlkIHtcXG4gIGJvcmRlci1jb2xvcjogIzI4YTc0NTtcXG4gIHBhZGRpbmctcmlnaHQ6IGNhbGMoMS41ZW0gKyAwLjc1cmVtKTtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA4IDgnJTNlJTNjcGF0aCBmaWxsPSclMjMyOGE3NDUnIGQ9J00yLjMgNi43M0wuNiA0LjUzYy0uNC0xLjA0LjQ2LTEuNCAxLjEtLjhsMS4xIDEuNCAzLjQtMy44Yy42LS42MyAxLjYtLjI3IDEuMi43bC00IDQuNmMtLjQzLjUtLjguNC0xLjEuMXonLyUzZSUzYy9zdmclM2VcXFwiKTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgcmlnaHQgY2FsYygwLjM3NWVtICsgMC4xODc1cmVtKTtcXG4gIGJhY2tncm91bmQtc2l6ZTogY2FsYygwLjc1ZW0gKyAwLjM3NXJlbSkgY2FsYygwLjc1ZW0gKyAwLjM3NXJlbSk7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5mb3JtLWNvbnRyb2w6dmFsaWQ6Zm9jdXMsIC5mb3JtLWNvbnRyb2wuaXMtdmFsaWQ6Zm9jdXMge1xcbiAgYm9yZGVyLWNvbG9yOiAjMjhhNzQ1O1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNDAsIDE2NywgNjksIDAuMjUpO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jb250cm9sOnZhbGlkIH4gLnZhbGlkLWZlZWRiYWNrLFxcbi53YXMtdmFsaWRhdGVkIC5mb3JtLWNvbnRyb2w6dmFsaWQgfiAudmFsaWQtdG9vbHRpcCwgLmZvcm0tY29udHJvbC5pcy12YWxpZCB+IC52YWxpZC1mZWVkYmFjayxcXG4uZm9ybS1jb250cm9sLmlzLXZhbGlkIH4gLnZhbGlkLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIHRleHRhcmVhLmZvcm0tY29udHJvbDp2YWxpZCwgdGV4dGFyZWEuZm9ybS1jb250cm9sLmlzLXZhbGlkIHtcXG4gIHBhZGRpbmctcmlnaHQ6IGNhbGMoMS41ZW0gKyAwLjc1cmVtKTtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IHRvcCBjYWxjKDAuMzc1ZW0gKyAwLjE4NzVyZW0pIHJpZ2h0IGNhbGMoMC4zNzVlbSArIDAuMTg3NXJlbSk7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tc2VsZWN0OnZhbGlkLCAuY3VzdG9tLXNlbGVjdC5pcy12YWxpZCB7XFxuICBib3JkZXItY29sb3I6ICMyOGE3NDU7XFxuICBwYWRkaW5nLXJpZ2h0OiBjYWxjKCgxZW0gKyAwLjc1cmVtKSAqIDMgLyA0ICsgMS43NXJlbSk7XFxuICBiYWNrZ3JvdW5kOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNCA1JyUzZSUzY3BhdGggZmlsbD0nJTIzMzQzYTQwJyBkPSdNMiAwTDAgMmg0em0wIDVMMCAzaDR6Jy8lM2UlM2Mvc3ZnJTNlXFxcIikgbm8tcmVwZWF0IHJpZ2h0IDAuNzVyZW0gY2VudGVyLzhweCAxMHB4LCB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgOCA4JyUzZSUzY3BhdGggZmlsbD0nJTIzMjhhNzQ1JyBkPSdNMi4zIDYuNzNMLjYgNC41M2MtLjQtMS4wNC40Ni0xLjQgMS4xLS44bDEuMSAxLjQgMy40LTMuOGMuNi0uNjMgMS42LS4yNyAxLjIuN2wtNCA0LjZjLS40My41LS44LjQtMS4xLjF6Jy8lM2UlM2Mvc3ZnJTNlXFxcIikgI2ZmZiBuby1yZXBlYXQgY2VudGVyIHJpZ2h0IDEuNzVyZW0vY2FsYygwLjc1ZW0gKyAwLjM3NXJlbSkgY2FsYygwLjc1ZW0gKyAwLjM3NXJlbSk7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tc2VsZWN0OnZhbGlkOmZvY3VzLCAuY3VzdG9tLXNlbGVjdC5pcy12YWxpZDpmb2N1cyB7XFxuICBib3JkZXItY29sb3I6ICMyOGE3NDU7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSg0MCwgMTY3LCA2OSwgMC4yNSk7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tc2VsZWN0OnZhbGlkIH4gLnZhbGlkLWZlZWRiYWNrLFxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tc2VsZWN0OnZhbGlkIH4gLnZhbGlkLXRvb2x0aXAsIC5jdXN0b20tc2VsZWN0LmlzLXZhbGlkIH4gLnZhbGlkLWZlZWRiYWNrLFxcbi5jdXN0b20tc2VsZWN0LmlzLXZhbGlkIH4gLnZhbGlkLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5mb3JtLWNvbnRyb2wtZmlsZTp2YWxpZCB+IC52YWxpZC1mZWVkYmFjayxcXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jb250cm9sLWZpbGU6dmFsaWQgfiAudmFsaWQtdG9vbHRpcCwgLmZvcm0tY29udHJvbC1maWxlLmlzLXZhbGlkIH4gLnZhbGlkLWZlZWRiYWNrLFxcbi5mb3JtLWNvbnRyb2wtZmlsZS5pcy12YWxpZCB+IC52YWxpZC10b29sdGlwIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jaGVjay1pbnB1dDp2YWxpZCB+IC5mb3JtLWNoZWNrLWxhYmVsLCAuZm9ybS1jaGVjay1pbnB1dC5pcy12YWxpZCB+IC5mb3JtLWNoZWNrLWxhYmVsIHtcXG4gIGNvbG9yOiAjMjhhNzQ1O1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jaGVjay1pbnB1dDp2YWxpZCB+IC52YWxpZC1mZWVkYmFjayxcXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jaGVjay1pbnB1dDp2YWxpZCB+IC52YWxpZC10b29sdGlwLCAuZm9ybS1jaGVjay1pbnB1dC5pcy12YWxpZCB+IC52YWxpZC1mZWVkYmFjayxcXG4uZm9ybS1jaGVjay1pbnB1dC5pcy12YWxpZCB+IC52YWxpZC10b29sdGlwIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6dmFsaWQgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWwsIC5jdXN0b20tY29udHJvbC1pbnB1dC5pcy12YWxpZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbCB7XFxuICBjb2xvcjogIzI4YTc0NTtcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1jb250cm9sLWlucHV0OnZhbGlkIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUsIC5jdXN0b20tY29udHJvbC1pbnB1dC5pcy12YWxpZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJvcmRlci1jb2xvcjogIzI4YTc0NTtcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1jb250cm9sLWlucHV0OnZhbGlkIH4gLnZhbGlkLWZlZWRiYWNrLFxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tY29udHJvbC1pbnB1dDp2YWxpZCB+IC52YWxpZC10b29sdGlwLCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQuaXMtdmFsaWQgfiAudmFsaWQtZmVlZGJhY2ssXFxuLmN1c3RvbS1jb250cm9sLWlucHV0LmlzLXZhbGlkIH4gLnZhbGlkLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tY29udHJvbC1pbnB1dDp2YWxpZDpjaGVja2VkIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUsIC5jdXN0b20tY29udHJvbC1pbnB1dC5pcy12YWxpZDpjaGVja2VkIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUge1xcbiAgYm9yZGVyLWNvbG9yOiAjMzRjZTU3O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM0Y2U1NztcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1jb250cm9sLWlucHV0OnZhbGlkOmZvY3VzIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUsIC5jdXN0b20tY29udHJvbC1pbnB1dC5pcy12YWxpZDpmb2N1cyB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDQwLCAxNjcsIDY5LCAwLjI1KTtcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1jb250cm9sLWlucHV0OnZhbGlkOmZvY3VzOm5vdCg6Y2hlY2tlZCkgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSwgLmN1c3RvbS1jb250cm9sLWlucHV0LmlzLXZhbGlkOmZvY3VzOm5vdCg6Y2hlY2tlZCkgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSB7XFxuICBib3JkZXItY29sb3I6ICMyOGE3NDU7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tZmlsZS1pbnB1dDp2YWxpZCB+IC5jdXN0b20tZmlsZS1sYWJlbCwgLmN1c3RvbS1maWxlLWlucHV0LmlzLXZhbGlkIH4gLmN1c3RvbS1maWxlLWxhYmVsIHtcXG4gIGJvcmRlci1jb2xvcjogIzI4YTc0NTtcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1maWxlLWlucHV0OnZhbGlkIH4gLnZhbGlkLWZlZWRiYWNrLFxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tZmlsZS1pbnB1dDp2YWxpZCB+IC52YWxpZC10b29sdGlwLCAuY3VzdG9tLWZpbGUtaW5wdXQuaXMtdmFsaWQgfiAudmFsaWQtZmVlZGJhY2ssXFxuLmN1c3RvbS1maWxlLWlucHV0LmlzLXZhbGlkIH4gLnZhbGlkLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tZmlsZS1pbnB1dDp2YWxpZDpmb2N1cyB+IC5jdXN0b20tZmlsZS1sYWJlbCwgLmN1c3RvbS1maWxlLWlucHV0LmlzLXZhbGlkOmZvY3VzIH4gLmN1c3RvbS1maWxlLWxhYmVsIHtcXG4gIGJvcmRlci1jb2xvcjogIzI4YTc0NTtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDQwLCAxNjcsIDY5LCAwLjI1KTtcXG59XFxuXFxuLmludmFsaWQtZmVlZGJhY2sge1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luLXRvcDogMC4yNXJlbTtcXG4gIGZvbnQtc2l6ZTogODAlO1xcbiAgY29sb3I6ICNkYzM1NDU7XFxufVxcblxcbi5pbnZhbGlkLXRvb2x0aXAge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAxMDAlO1xcbiAgei1pbmRleDogNTtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbTtcXG4gIG1hcmdpbi10b3A6IC4xcmVtO1xcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjIwLCA1MywgNjksIDAuOSk7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jb250cm9sOmludmFsaWQsIC5mb3JtLWNvbnRyb2wuaXMtaW52YWxpZCB7XFxuICBib3JkZXItY29sb3I6ICNkYzM1NDU7XFxuICBwYWRkaW5nLXJpZ2h0OiBjYWxjKDEuNWVtICsgMC43NXJlbSk7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyBmaWxsPSclMjNkYzM1NDUnIHZpZXdCb3g9Jy0yIC0yIDcgNyclM2UlM2NwYXRoIHN0cm9rZT0nJTIzZGMzNTQ1JyBkPSdNMCAwbDMgM20wLTNMMCAzJy8lM2UlM2NjaXJjbGUgcj0nLjUnLyUzZSUzY2NpcmNsZSBjeD0nMycgcj0nLjUnLyUzZSUzY2NpcmNsZSBjeT0nMycgcj0nLjUnLyUzZSUzY2NpcmNsZSBjeD0nMycgY3k9JzMnIHI9Jy41Jy8lM2UlM2Mvc3ZnJTNFXFxcIik7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0IGNhbGMoMC4zNzVlbSArIDAuMTg3NXJlbSk7XFxuICBiYWNrZ3JvdW5kLXNpemU6IGNhbGMoMC43NWVtICsgMC4zNzVyZW0pIGNhbGMoMC43NWVtICsgMC4zNzVyZW0pO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jb250cm9sOmludmFsaWQ6Zm9jdXMsIC5mb3JtLWNvbnRyb2wuaXMtaW52YWxpZDpmb2N1cyB7XFxuICBib3JkZXItY29sb3I6ICNkYzM1NDU7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgyMjAsIDUzLCA2OSwgMC4yNSk7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5mb3JtLWNvbnRyb2w6aW52YWxpZCB+IC5pbnZhbGlkLWZlZWRiYWNrLFxcbi53YXMtdmFsaWRhdGVkIC5mb3JtLWNvbnRyb2w6aW52YWxpZCB+IC5pbnZhbGlkLXRvb2x0aXAsIC5mb3JtLWNvbnRyb2wuaXMtaW52YWxpZCB+IC5pbnZhbGlkLWZlZWRiYWNrLFxcbi5mb3JtLWNvbnRyb2wuaXMtaW52YWxpZCB+IC5pbnZhbGlkLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIHRleHRhcmVhLmZvcm0tY29udHJvbDppbnZhbGlkLCB0ZXh0YXJlYS5mb3JtLWNvbnRyb2wuaXMtaW52YWxpZCB7XFxuICBwYWRkaW5nLXJpZ2h0OiBjYWxjKDEuNWVtICsgMC43NXJlbSk7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiB0b3AgY2FsYygwLjM3NWVtICsgMC4xODc1cmVtKSByaWdodCBjYWxjKDAuMzc1ZW0gKyAwLjE4NzVyZW0pO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLXNlbGVjdDppbnZhbGlkLCAuY3VzdG9tLXNlbGVjdC5pcy1pbnZhbGlkIHtcXG4gIGJvcmRlci1jb2xvcjogI2RjMzU0NTtcXG4gIHBhZGRpbmctcmlnaHQ6IGNhbGMoKDFlbSArIDAuNzVyZW0pICogMyAvIDQgKyAxLjc1cmVtKTtcXG4gIGJhY2tncm91bmQ6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA0IDUnJTNlJTNjcGF0aCBmaWxsPSclMjMzNDNhNDAnIGQ9J00yIDBMMCAyaDR6bTAgNUwwIDNoNHonLyUzZSUzYy9zdmclM2VcXFwiKSBuby1yZXBlYXQgcmlnaHQgMC43NXJlbSBjZW50ZXIvOHB4IDEwcHgsIHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIGZpbGw9JyUyM2RjMzU0NScgdmlld0JveD0nLTIgLTIgNyA3JyUzZSUzY3BhdGggc3Ryb2tlPSclMjNkYzM1NDUnIGQ9J00wIDBsMyAzbTAtM0wwIDMnLyUzZSUzY2NpcmNsZSByPScuNScvJTNlJTNjY2lyY2xlIGN4PSczJyByPScuNScvJTNlJTNjY2lyY2xlIGN5PSczJyByPScuNScvJTNlJTNjY2lyY2xlIGN4PSczJyBjeT0nMycgcj0nLjUnLyUzZSUzYy9zdmclM0VcXFwiKSAjZmZmIG5vLXJlcGVhdCBjZW50ZXIgcmlnaHQgMS43NXJlbS9jYWxjKDAuNzVlbSArIDAuMzc1cmVtKSBjYWxjKDAuNzVlbSArIDAuMzc1cmVtKTtcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1zZWxlY3Q6aW52YWxpZDpmb2N1cywgLmN1c3RvbS1zZWxlY3QuaXMtaW52YWxpZDpmb2N1cyB7XFxuICBib3JkZXItY29sb3I6ICNkYzM1NDU7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgyMjAsIDUzLCA2OSwgMC4yNSk7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tc2VsZWN0OmludmFsaWQgfiAuaW52YWxpZC1mZWVkYmFjayxcXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLXNlbGVjdDppbnZhbGlkIH4gLmludmFsaWQtdG9vbHRpcCwgLmN1c3RvbS1zZWxlY3QuaXMtaW52YWxpZCB+IC5pbnZhbGlkLWZlZWRiYWNrLFxcbi5jdXN0b20tc2VsZWN0LmlzLWludmFsaWQgfiAuaW52YWxpZC10b29sdGlwIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jb250cm9sLWZpbGU6aW52YWxpZCB+IC5pbnZhbGlkLWZlZWRiYWNrLFxcbi53YXMtdmFsaWRhdGVkIC5mb3JtLWNvbnRyb2wtZmlsZTppbnZhbGlkIH4gLmludmFsaWQtdG9vbHRpcCwgLmZvcm0tY29udHJvbC1maWxlLmlzLWludmFsaWQgfiAuaW52YWxpZC1mZWVkYmFjayxcXG4uZm9ybS1jb250cm9sLWZpbGUuaXMtaW52YWxpZCB+IC5pbnZhbGlkLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5mb3JtLWNoZWNrLWlucHV0OmludmFsaWQgfiAuZm9ybS1jaGVjay1sYWJlbCwgLmZvcm0tY2hlY2staW5wdXQuaXMtaW52YWxpZCB+IC5mb3JtLWNoZWNrLWxhYmVsIHtcXG4gIGNvbG9yOiAjZGMzNTQ1O1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuZm9ybS1jaGVjay1pbnB1dDppbnZhbGlkIH4gLmludmFsaWQtZmVlZGJhY2ssXFxuLndhcy12YWxpZGF0ZWQgLmZvcm0tY2hlY2staW5wdXQ6aW52YWxpZCB+IC5pbnZhbGlkLXRvb2x0aXAsIC5mb3JtLWNoZWNrLWlucHV0LmlzLWludmFsaWQgfiAuaW52YWxpZC1mZWVkYmFjayxcXG4uZm9ybS1jaGVjay1pbnB1dC5pcy1pbnZhbGlkIH4gLmludmFsaWQtdG9vbHRpcCB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1jb250cm9sLWlucHV0OmludmFsaWQgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWwsIC5jdXN0b20tY29udHJvbC1pbnB1dC5pcy1pbnZhbGlkIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsIHtcXG4gIGNvbG9yOiAjZGMzNTQ1O1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6aW52YWxpZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlLCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQuaXMtaW52YWxpZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJvcmRlci1jb2xvcjogI2RjMzU0NTtcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1jb250cm9sLWlucHV0OmludmFsaWQgfiAuaW52YWxpZC1mZWVkYmFjayxcXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6aW52YWxpZCB+IC5pbnZhbGlkLXRvb2x0aXAsIC5jdXN0b20tY29udHJvbC1pbnB1dC5pcy1pbnZhbGlkIH4gLmludmFsaWQtZmVlZGJhY2ssXFxuLmN1c3RvbS1jb250cm9sLWlucHV0LmlzLWludmFsaWQgfiAuaW52YWxpZC10b29sdGlwIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6aW52YWxpZDpjaGVja2VkIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUsIC5jdXN0b20tY29udHJvbC1pbnB1dC5pcy1pbnZhbGlkOmNoZWNrZWQgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSB7XFxuICBib3JkZXItY29sb3I6ICNlNDYwNmQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTQ2MDZkO1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6aW52YWxpZDpmb2N1cyB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlLCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQuaXMtaW52YWxpZDpmb2N1cyB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDIyMCwgNTMsIDY5LCAwLjI1KTtcXG59XFxuXFxuLndhcy12YWxpZGF0ZWQgLmN1c3RvbS1jb250cm9sLWlucHV0OmludmFsaWQ6Zm9jdXM6bm90KDpjaGVja2VkKSB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlLCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQuaXMtaW52YWxpZDpmb2N1czpub3QoOmNoZWNrZWQpIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUge1xcbiAgYm9yZGVyLWNvbG9yOiAjZGMzNTQ1O1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLWZpbGUtaW5wdXQ6aW52YWxpZCB+IC5jdXN0b20tZmlsZS1sYWJlbCwgLmN1c3RvbS1maWxlLWlucHV0LmlzLWludmFsaWQgfiAuY3VzdG9tLWZpbGUtbGFiZWwge1xcbiAgYm9yZGVyLWNvbG9yOiAjZGMzNTQ1O1xcbn1cXG5cXG4ud2FzLXZhbGlkYXRlZCAuY3VzdG9tLWZpbGUtaW5wdXQ6aW52YWxpZCB+IC5pbnZhbGlkLWZlZWRiYWNrLFxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tZmlsZS1pbnB1dDppbnZhbGlkIH4gLmludmFsaWQtdG9vbHRpcCwgLmN1c3RvbS1maWxlLWlucHV0LmlzLWludmFsaWQgfiAuaW52YWxpZC1mZWVkYmFjayxcXG4uY3VzdG9tLWZpbGUtaW5wdXQuaXMtaW52YWxpZCB+IC5pbnZhbGlkLXRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi53YXMtdmFsaWRhdGVkIC5jdXN0b20tZmlsZS1pbnB1dDppbnZhbGlkOmZvY3VzIH4gLmN1c3RvbS1maWxlLWxhYmVsLCAuY3VzdG9tLWZpbGUtaW5wdXQuaXMtaW52YWxpZDpmb2N1cyB+IC5jdXN0b20tZmlsZS1sYWJlbCB7XFxuICBib3JkZXItY29sb3I6ICNkYzM1NDU7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgyMjAsIDUzLCA2OSwgMC4yNSk7XFxufVxcblxcbi5mb3JtLWlubGluZSB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC1mbG93OiByb3cgd3JhcDtcXG4gIGZsZXgtZmxvdzogcm93IHdyYXA7XFxuICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuXFxuLmZvcm0taW5saW5lIC5mb3JtLWNoZWNrIHtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIHtcXG4gIC5mb3JtLWlubGluZSBsYWJlbCB7XFxuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgfVxcbiAgLmZvcm0taW5saW5lIC5mb3JtLWdyb3VwIHtcXG4gICAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIC1tcy1mbGV4OiAwIDAgYXV0bztcXG4gICAgZmxleDogMCAwIGF1dG87XFxuICAgIC1tcy1mbGV4LWZsb3c6IHJvdyB3cmFwO1xcbiAgICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xcbiAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgfVxcbiAgLmZvcm0taW5saW5lIC5mb3JtLWNvbnRyb2wge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgfVxcbiAgLmZvcm0taW5saW5lIC5mb3JtLWNvbnRyb2wtcGxhaW50ZXh0IHtcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgfVxcbiAgLmZvcm0taW5saW5lIC5pbnB1dC1ncm91cCxcXG4gIC5mb3JtLWlubGluZSAuY3VzdG9tLXNlbGVjdCB7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLmZvcm0taW5saW5lIC5mb3JtLWNoZWNrIHtcXG4gICAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XFxuICB9XFxuICAuZm9ybS1pbmxpbmUgLmZvcm0tY2hlY2staW5wdXQge1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIC1tcy1mbGV4LW5lZ2F0aXZlOiAwO1xcbiAgICBmbGV4LXNocmluazogMDtcXG4gICAgbWFyZ2luLXRvcDogMDtcXG4gICAgbWFyZ2luLXJpZ2h0OiAwLjI1cmVtO1xcbiAgICBtYXJnaW4tbGVmdDogMDtcXG4gIH1cXG4gIC5mb3JtLWlubGluZSAuY3VzdG9tLWNvbnRyb2wge1xcbiAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgfVxcbiAgLmZvcm0taW5saW5lIC5jdXN0b20tY29udHJvbC1sYWJlbCB7XFxuICAgIG1hcmdpbi1ib3R0b206IDA7XFxuICB9XFxufVxcblxcbi5idG4ge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgcGFkZGluZzogMC4zNzVyZW0gMC43NXJlbTtcXG4gIGZvbnQtc2l6ZTogMXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbiAgdHJhbnNpdGlvbjogY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAwLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAwLjE1cyBlYXNlLWluLW91dDtcXG59XFxuXFxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcXG4gIC5idG4ge1xcbiAgICB0cmFuc2l0aW9uOiBub25lO1xcbiAgfVxcbn1cXG5cXG4uYnRuOmhvdmVyIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbn1cXG5cXG4uYnRuOmZvY3VzLCAuYnRuLmZvY3VzIHtcXG4gIG91dGxpbmU6IDA7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgwLCAxMjMsIDI1NSwgMC4yNSk7XFxufVxcblxcbi5idG4uZGlzYWJsZWQsIC5idG46ZGlzYWJsZWQge1xcbiAgb3BhY2l0eTogMC42NTtcXG59XFxuXFxuYS5idG4uZGlzYWJsZWQsXFxuZmllbGRzZXQ6ZGlzYWJsZWQgYS5idG4ge1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi5idG4tcHJpbWFyeSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDdiZmY7XFxuICBib3JkZXItY29sb3I6ICMwMDdiZmY7XFxufVxcblxcbi5idG4tcHJpbWFyeTpob3ZlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDY5ZDk7XFxuICBib3JkZXItY29sb3I6ICMwMDYyY2M7XFxufVxcblxcbi5idG4tcHJpbWFyeTpmb2N1cywgLmJ0bi1wcmltYXJ5LmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDM4LCAxNDMsIDI1NSwgMC41KTtcXG59XFxuXFxuLmJ0bi1wcmltYXJ5LmRpc2FibGVkLCAuYnRuLXByaW1hcnk6ZGlzYWJsZWQge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3YmZmO1xcbiAgYm9yZGVyLWNvbG9yOiAjMDA3YmZmO1xcbn1cXG5cXG4uYnRuLXByaW1hcnk6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlLCAuYnRuLXByaW1hcnk6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlLFxcbi5zaG93ID4gLmJ0bi1wcmltYXJ5LmRyb3Bkb3duLXRvZ2dsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDYyY2M7XFxuICBib3JkZXItY29sb3I6ICMwMDVjYmY7XFxufVxcblxcbi5idG4tcHJpbWFyeTpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmU6Zm9jdXMsIC5idG4tcHJpbWFyeTpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsXFxuLnNob3cgPiAuYnRuLXByaW1hcnkuZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDM4LCAxNDMsIDI1NSwgMC41KTtcXG59XFxuXFxuLmJ0bi1zZWNvbmRhcnkge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM3NTdkO1xcbiAgYm9yZGVyLWNvbG9yOiAjNmM3NTdkO1xcbn1cXG5cXG4uYnRuLXNlY29uZGFyeTpob3ZlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1YTYyNjg7XFxuICBib3JkZXItY29sb3I6ICM1NDViNjI7XFxufVxcblxcbi5idG4tc2Vjb25kYXJ5OmZvY3VzLCAuYnRuLXNlY29uZGFyeS5mb2N1cyB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgxMzAsIDEzOCwgMTQ1LCAwLjUpO1xcbn1cXG5cXG4uYnRuLXNlY29uZGFyeS5kaXNhYmxlZCwgLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM3NTdkO1xcbiAgYm9yZGVyLWNvbG9yOiAjNmM3NTdkO1xcbn1cXG5cXG4uYnRuLXNlY29uZGFyeTpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmUsIC5idG4tc2Vjb25kYXJ5Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSxcXG4uc2hvdyA+IC5idG4tc2Vjb25kYXJ5LmRyb3Bkb3duLXRvZ2dsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1NDViNjI7XFxuICBib3JkZXItY29sb3I6ICM0ZTU1NWI7XFxufVxcblxcbi5idG4tc2Vjb25kYXJ5Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZTpmb2N1cywgLmJ0bi1zZWNvbmRhcnk6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlOmZvY3VzLFxcbi5zaG93ID4gLmJ0bi1zZWNvbmRhcnkuZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDEzMCwgMTM4LCAxNDUsIDAuNSk7XFxufVxcblxcbi5idG4tc3VjY2VzcyB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyOGE3NDU7XFxuICBib3JkZXItY29sb3I6ICMyOGE3NDU7XFxufVxcblxcbi5idG4tc3VjY2Vzczpob3ZlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyMTg4Mzg7XFxuICBib3JkZXItY29sb3I6ICMxZTdlMzQ7XFxufVxcblxcbi5idG4tc3VjY2Vzczpmb2N1cywgLmJ0bi1zdWNjZXNzLmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDcyLCAxODAsIDk3LCAwLjUpO1xcbn1cXG5cXG4uYnRuLXN1Y2Nlc3MuZGlzYWJsZWQsIC5idG4tc3VjY2VzczpkaXNhYmxlZCB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyOGE3NDU7XFxuICBib3JkZXItY29sb3I6ICMyOGE3NDU7XFxufVxcblxcbi5idG4tc3VjY2Vzczpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmUsIC5idG4tc3VjY2Vzczpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmUsXFxuLnNob3cgPiAuYnRuLXN1Y2Nlc3MuZHJvcGRvd24tdG9nZ2xlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFlN2UzNDtcXG4gIGJvcmRlci1jb2xvcjogIzFjNzQzMDtcXG59XFxuXFxuLmJ0bi1zdWNjZXNzOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZTpmb2N1cywgLmJ0bi1zdWNjZXNzOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZTpmb2N1cyxcXG4uc2hvdyA+IC5idG4tc3VjY2Vzcy5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNzIsIDE4MCwgOTcsIDAuNSk7XFxufVxcblxcbi5idG4taW5mbyB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxN2EyYjg7XFxuICBib3JkZXItY29sb3I6ICMxN2EyYjg7XFxufVxcblxcbi5idG4taW5mbzpob3ZlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxMzg0OTY7XFxuICBib3JkZXItY29sb3I6ICMxMTdhOGI7XFxufVxcblxcbi5idG4taW5mbzpmb2N1cywgLmJ0bi1pbmZvLmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDU4LCAxNzYsIDE5NSwgMC41KTtcXG59XFxuXFxuLmJ0bi1pbmZvLmRpc2FibGVkLCAuYnRuLWluZm86ZGlzYWJsZWQge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTdhMmI4O1xcbiAgYm9yZGVyLWNvbG9yOiAjMTdhMmI4O1xcbn1cXG5cXG4uYnRuLWluZm86bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlLCAuYnRuLWluZm86bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlLFxcbi5zaG93ID4gLmJ0bi1pbmZvLmRyb3Bkb3duLXRvZ2dsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxMTdhOGI7XFxuICBib3JkZXItY29sb3I6ICMxMDcwN2Y7XFxufVxcblxcbi5idG4taW5mbzpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmU6Zm9jdXMsIC5idG4taW5mbzpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsXFxuLnNob3cgPiAuYnRuLWluZm8uZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDU4LCAxNzYsIDE5NSwgMC41KTtcXG59XFxuXFxuLmJ0bi13YXJuaW5nIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYzEwNztcXG4gIGJvcmRlci1jb2xvcjogI2ZmYzEwNztcXG59XFxuXFxuLmJ0bi13YXJuaW5nOmhvdmVyIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UwYTgwMDtcXG4gIGJvcmRlci1jb2xvcjogI2QzOWUwMDtcXG59XFxuXFxuLmJ0bi13YXJuaW5nOmZvY3VzLCAuYnRuLXdhcm5pbmcuZm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjIyLCAxNzAsIDEyLCAwLjUpO1xcbn1cXG5cXG4uYnRuLXdhcm5pbmcuZGlzYWJsZWQsIC5idG4td2FybmluZzpkaXNhYmxlZCB7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmMxMDc7XFxuICBib3JkZXItY29sb3I6ICNmZmMxMDc7XFxufVxcblxcbi5idG4td2FybmluZzpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmUsIC5idG4td2FybmluZzpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmUsXFxuLnNob3cgPiAuYnRuLXdhcm5pbmcuZHJvcGRvd24tdG9nZ2xlIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QzOWUwMDtcXG4gIGJvcmRlci1jb2xvcjogI2M2OTUwMDtcXG59XFxuXFxuLmJ0bi13YXJuaW5nOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZTpmb2N1cywgLmJ0bi13YXJuaW5nOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZTpmb2N1cyxcXG4uc2hvdyA+IC5idG4td2FybmluZy5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjIyLCAxNzAsIDEyLCAwLjUpO1xcbn1cXG5cXG4uYnRuLWRhbmdlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkYzM1NDU7XFxuICBib3JkZXItY29sb3I6ICNkYzM1NDU7XFxufVxcblxcbi5idG4tZGFuZ2VyOmhvdmVyIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M4MjMzMztcXG4gIGJvcmRlci1jb2xvcjogI2JkMjEzMDtcXG59XFxuXFxuLmJ0bi1kYW5nZXI6Zm9jdXMsIC5idG4tZGFuZ2VyLmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDIyNSwgODMsIDk3LCAwLjUpO1xcbn1cXG5cXG4uYnRuLWRhbmdlci5kaXNhYmxlZCwgLmJ0bi1kYW5nZXI6ZGlzYWJsZWQge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGMzNTQ1O1xcbiAgYm9yZGVyLWNvbG9yOiAjZGMzNTQ1O1xcbn1cXG5cXG4uYnRuLWRhbmdlcjpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmUsIC5idG4tZGFuZ2VyOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSxcXG4uc2hvdyA+IC5idG4tZGFuZ2VyLmRyb3Bkb3duLXRvZ2dsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiZDIxMzA7XFxuICBib3JkZXItY29sb3I6ICNiMjFmMmQ7XFxufVxcblxcbi5idG4tZGFuZ2VyOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZTpmb2N1cywgLmJ0bi1kYW5nZXI6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlOmZvY3VzLFxcbi5zaG93ID4gLmJ0bi1kYW5nZXIuZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDIyNSwgODMsIDk3LCAwLjUpO1xcbn1cXG5cXG4uYnRuLWxpZ2h0IHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcXG4gIGJvcmRlci1jb2xvcjogI2Y4ZjlmYTtcXG59XFxuXFxuLmJ0bi1saWdodDpob3ZlciB7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlMmU2ZWE7XFxuICBib3JkZXItY29sb3I6ICNkYWUwZTU7XFxufVxcblxcbi5idG4tbGlnaHQ6Zm9jdXMsIC5idG4tbGlnaHQuZm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjE2LCAyMTcsIDIxOSwgMC41KTtcXG59XFxuXFxuLmJ0bi1saWdodC5kaXNhYmxlZCwgLmJ0bi1saWdodDpkaXNhYmxlZCB7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmOGY5ZmE7XFxuICBib3JkZXItY29sb3I6ICNmOGY5ZmE7XFxufVxcblxcbi5idG4tbGlnaHQ6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlLCAuYnRuLWxpZ2h0Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSxcXG4uc2hvdyA+IC5idG4tbGlnaHQuZHJvcGRvd24tdG9nZ2xlIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RhZTBlNTtcXG4gIGJvcmRlci1jb2xvcjogI2QzZDlkZjtcXG59XFxuXFxuLmJ0bi1saWdodDpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmU6Zm9jdXMsIC5idG4tbGlnaHQ6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlOmZvY3VzLFxcbi5zaG93ID4gLmJ0bi1saWdodC5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjE2LCAyMTcsIDIxOSwgMC41KTtcXG59XFxuXFxuLmJ0bi1kYXJrIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM0M2E0MDtcXG4gIGJvcmRlci1jb2xvcjogIzM0M2E0MDtcXG59XFxuXFxuLmJ0bi1kYXJrOmhvdmVyIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzIzMjcyYjtcXG4gIGJvcmRlci1jb2xvcjogIzFkMjEyNDtcXG59XFxuXFxuLmJ0bi1kYXJrOmZvY3VzLCAuYnRuLWRhcmsuZm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoODIsIDg4LCA5MywgMC41KTtcXG59XFxuXFxuLmJ0bi1kYXJrLmRpc2FibGVkLCAuYnRuLWRhcms6ZGlzYWJsZWQge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzQzYTQwO1xcbiAgYm9yZGVyLWNvbG9yOiAjMzQzYTQwO1xcbn1cXG5cXG4uYnRuLWRhcms6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlLCAuYnRuLWRhcms6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlLFxcbi5zaG93ID4gLmJ0bi1kYXJrLmRyb3Bkb3duLXRvZ2dsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxZDIxMjQ7XFxuICBib3JkZXItY29sb3I6ICMxNzFhMWQ7XFxufVxcblxcbi5idG4tZGFyazpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmU6Zm9jdXMsIC5idG4tZGFyazpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsXFxuLnNob3cgPiAuYnRuLWRhcmsuZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDgyLCA4OCwgOTMsIDAuNSk7XFxufVxcblxcbi5idG4tb3V0bGluZS1wcmltYXJ5IHtcXG4gIGNvbG9yOiAjMDA3YmZmO1xcbiAgYm9yZGVyLWNvbG9yOiAjMDA3YmZmO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtcHJpbWFyeTpob3ZlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDdiZmY7XFxuICBib3JkZXItY29sb3I6ICMwMDdiZmY7XFxufVxcblxcbi5idG4tb3V0bGluZS1wcmltYXJ5OmZvY3VzLCAuYnRuLW91dGxpbmUtcHJpbWFyeS5mb2N1cyB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgwLCAxMjMsIDI1NSwgMC41KTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQsIC5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVkIHtcXG4gIGNvbG9yOiAjMDA3YmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5idG4tb3V0bGluZS1wcmltYXJ5Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZSwgLmJ0bi1vdXRsaW5lLXByaW1hcnk6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlLFxcbi5zaG93ID4gLmJ0bi1vdXRsaW5lLXByaW1hcnkuZHJvcGRvd24tdG9nZ2xlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjtcXG4gIGJvcmRlci1jb2xvcjogIzAwN2JmZjtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLXByaW1hcnk6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlOmZvY3VzLCAuYnRuLW91dGxpbmUtcHJpbWFyeTpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsXFxuLnNob3cgPiAuYnRuLW91dGxpbmUtcHJpbWFyeS5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMCwgMTIzLCAyNTUsIDAuNSk7XFxufVxcblxcbi5idG4tb3V0bGluZS1zZWNvbmRhcnkge1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICBib3JkZXItY29sb3I6ICM2Yzc1N2Q7XFxufVxcblxcbi5idG4tb3V0bGluZS1zZWNvbmRhcnk6aG92ZXIge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM3NTdkO1xcbiAgYm9yZGVyLWNvbG9yOiAjNmM3NTdkO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmZvY3VzLCAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDEwOCwgMTE3LCAxMjUsIDAuNSk7XFxufVxcblxcbi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQsIC5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQge1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmUsIC5idG4tb3V0bGluZS1zZWNvbmRhcnk6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlLFxcbi5zaG93ID4gLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kcm9wZG93bi10b2dnbGUge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM3NTdkO1xcbiAgYm9yZGVyLWNvbG9yOiAjNmM3NTdkO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZTpmb2N1cywgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsXFxuLnNob3cgPiAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgxMDgsIDExNywgMTI1LCAwLjUpO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtc3VjY2VzcyB7XFxuICBjb2xvcjogIzI4YTc0NTtcXG4gIGJvcmRlci1jb2xvcjogIzI4YTc0NTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6aG92ZXIge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjhhNzQ1O1xcbiAgYm9yZGVyLWNvbG9yOiAjMjhhNzQ1O1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtc3VjY2Vzczpmb2N1cywgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNDAsIDE2NywgNjksIDAuNSk7XFxufVxcblxcbi5idG4tb3V0bGluZS1zdWNjZXNzLmRpc2FibGVkLCAuYnRuLW91dGxpbmUtc3VjY2VzczpkaXNhYmxlZCB7XFxuICBjb2xvcjogIzI4YTc0NTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtc3VjY2Vzczpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmUsIC5idG4tb3V0bGluZS1zdWNjZXNzOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSxcXG4uc2hvdyA+IC5idG4tb3V0bGluZS1zdWNjZXNzLmRyb3Bkb3duLXRvZ2dsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyOGE3NDU7XFxuICBib3JkZXItY29sb3I6ICMyOGE3NDU7XFxufVxcblxcbi5idG4tb3V0bGluZS1zdWNjZXNzOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZTpmb2N1cywgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlOmZvY3VzLFxcbi5zaG93ID4gLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDQwLCAxNjcsIDY5LCAwLjUpO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtaW5mbyB7XFxuICBjb2xvcjogIzE3YTJiODtcXG4gIGJvcmRlci1jb2xvcjogIzE3YTJiODtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWluZm86aG92ZXIge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTdhMmI4O1xcbiAgYm9yZGVyLWNvbG9yOiAjMTdhMmI4O1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtaW5mbzpmb2N1cywgLmJ0bi1vdXRsaW5lLWluZm8uZm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjMsIDE2MiwgMTg0LCAwLjUpO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCwgLmJ0bi1vdXRsaW5lLWluZm86ZGlzYWJsZWQge1xcbiAgY29sb3I6ICMxN2EyYjg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWluZm86bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlLCAuYnRuLW91dGxpbmUtaW5mbzpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmUsXFxuLnNob3cgPiAuYnRuLW91dGxpbmUtaW5mby5kcm9wZG93bi10b2dnbGUge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTdhMmI4O1xcbiAgYm9yZGVyLWNvbG9yOiAjMTdhMmI4O1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtaW5mbzpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmU6Zm9jdXMsIC5idG4tb3V0bGluZS1pbmZvOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZTpmb2N1cyxcXG4uc2hvdyA+IC5idG4tb3V0bGluZS1pbmZvLmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgyMywgMTYyLCAxODQsIDAuNSk7XFxufVxcblxcbi5idG4tb3V0bGluZS13YXJuaW5nIHtcXG4gIGNvbG9yOiAjZmZjMTA3O1xcbiAgYm9yZGVyLWNvbG9yOiAjZmZjMTA3O1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtd2FybmluZzpob3ZlciB7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmMxMDc7XFxuICBib3JkZXItY29sb3I6ICNmZmMxMDc7XFxufVxcblxcbi5idG4tb3V0bGluZS13YXJuaW5nOmZvY3VzLCAuYnRuLW91dGxpbmUtd2FybmluZy5mb2N1cyB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgyNTUsIDE5MywgNywgMC41KTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLXdhcm5pbmcuZGlzYWJsZWQsIC5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkIHtcXG4gIGNvbG9yOiAjZmZjMTA3O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5idG4tb3V0bGluZS13YXJuaW5nOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZSwgLmJ0bi1vdXRsaW5lLXdhcm5pbmc6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlLFxcbi5zaG93ID4gLmJ0bi1vdXRsaW5lLXdhcm5pbmcuZHJvcGRvd24tdG9nZ2xlIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYzEwNztcXG4gIGJvcmRlci1jb2xvcjogI2ZmYzEwNztcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLXdhcm5pbmc6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlOmZvY3VzLCAuYnRuLW91dGxpbmUtd2FybmluZzpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsXFxuLnNob3cgPiAuYnRuLW91dGxpbmUtd2FybmluZy5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjU1LCAxOTMsIDcsIDAuNSk7XFxufVxcblxcbi5idG4tb3V0bGluZS1kYW5nZXIge1xcbiAgY29sb3I6ICNkYzM1NDU7XFxuICBib3JkZXItY29sb3I6ICNkYzM1NDU7XFxufVxcblxcbi5idG4tb3V0bGluZS1kYW5nZXI6aG92ZXIge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGMzNTQ1O1xcbiAgYm9yZGVyLWNvbG9yOiAjZGMzNTQ1O1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtZGFuZ2VyOmZvY3VzLCAuYnRuLW91dGxpbmUtZGFuZ2VyLmZvY3VzIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDIyMCwgNTMsIDY5LCAwLjUpO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtZGFuZ2VyLmRpc2FibGVkLCAuYnRuLW91dGxpbmUtZGFuZ2VyOmRpc2FibGVkIHtcXG4gIGNvbG9yOiAjZGMzNTQ1O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5idG4tb3V0bGluZS1kYW5nZXI6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlLCAuYnRuLW91dGxpbmUtZGFuZ2VyOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSxcXG4uc2hvdyA+IC5idG4tb3V0bGluZS1kYW5nZXIuZHJvcGRvd24tdG9nZ2xlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RjMzU0NTtcXG4gIGJvcmRlci1jb2xvcjogI2RjMzU0NTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWRhbmdlcjpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTphY3RpdmU6Zm9jdXMsIC5idG4tb3V0bGluZS1kYW5nZXI6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlOmZvY3VzLFxcbi5zaG93ID4gLmJ0bi1vdXRsaW5lLWRhbmdlci5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjIwLCA1MywgNjksIDAuNSk7XFxufVxcblxcbi5idG4tb3V0bGluZS1saWdodCB7XFxuICBjb2xvcjogI2Y4ZjlmYTtcXG4gIGJvcmRlci1jb2xvcjogI2Y4ZjlmYTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWxpZ2h0OmhvdmVyIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcXG4gIGJvcmRlci1jb2xvcjogI2Y4ZjlmYTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWxpZ2h0OmZvY3VzLCAuYnRuLW91dGxpbmUtbGlnaHQuZm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjQ4LCAyNDksIDI1MCwgMC41KTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWxpZ2h0LmRpc2FibGVkLCAuYnRuLW91dGxpbmUtbGlnaHQ6ZGlzYWJsZWQge1xcbiAgY29sb3I6ICNmOGY5ZmE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWxpZ2h0Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZSwgLmJ0bi1vdXRsaW5lLWxpZ2h0Om5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSxcXG4uc2hvdyA+IC5idG4tb3V0bGluZS1saWdodC5kcm9wZG93bi10b2dnbGUge1xcbiAgY29sb3I6ICMyMTI1Mjk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOWZhO1xcbiAgYm9yZGVyLWNvbG9yOiAjZjhmOWZhO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtbGlnaHQ6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlOmZvY3VzLCAuYnRuLW91dGxpbmUtbGlnaHQ6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlOmZvY3VzLFxcbi5zaG93ID4gLmJ0bi1vdXRsaW5lLWxpZ2h0LmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgyNDgsIDI0OSwgMjUwLCAwLjUpO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtZGFyayB7XFxuICBjb2xvcjogIzM0M2E0MDtcXG4gIGJvcmRlci1jb2xvcjogIzM0M2E0MDtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWRhcms6aG92ZXIge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzQzYTQwO1xcbiAgYm9yZGVyLWNvbG9yOiAjMzQzYTQwO1xcbn1cXG5cXG4uYnRuLW91dGxpbmUtZGFyazpmb2N1cywgLmJ0bi1vdXRsaW5lLWRhcmsuZm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNTIsIDU4LCA2NCwgMC41KTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWRhcmsuZGlzYWJsZWQsIC5idG4tb3V0bGluZS1kYXJrOmRpc2FibGVkIHtcXG4gIGNvbG9yOiAjMzQzYTQwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5idG4tb3V0bGluZS1kYXJrOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmFjdGl2ZSwgLmJ0bi1vdXRsaW5lLWRhcms6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkuYWN0aXZlLFxcbi5zaG93ID4gLmJ0bi1vdXRsaW5lLWRhcmsuZHJvcGRvd24tdG9nZ2xlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM0M2E0MDtcXG4gIGJvcmRlci1jb2xvcjogIzM0M2E0MDtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWRhcms6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCk6YWN0aXZlOmZvY3VzLCAuYnRuLW91dGxpbmUtZGFyazpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmU6Zm9jdXMsXFxuLnNob3cgPiAuYnRuLW91dGxpbmUtZGFyay5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNTIsIDU4LCA2NCwgMC41KTtcXG59XFxuXFxuLmJ0bi1saW5rIHtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBjb2xvcjogIzAwN2JmZjtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuXFxuLmJ0bi1saW5rOmhvdmVyIHtcXG4gIGNvbG9yOiAjMDA1NmIzO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxufVxcblxcbi5idG4tbGluazpmb2N1cywgLmJ0bi1saW5rLmZvY3VzIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxuXFxuLmJ0bi1saW5rOmRpc2FibGVkLCAuYnRuLWxpbmsuZGlzYWJsZWQge1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuLmJ0bi1sZywgLmJ0bi1ncm91cC1sZyA+IC5idG4ge1xcbiAgcGFkZGluZzogMC41cmVtIDFyZW07XFxuICBmb250LXNpemU6IDEuMjVyZW07XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgYm9yZGVyLXJhZGl1czogMC4zcmVtO1xcbn1cXG5cXG4uYnRuLXNtLCAuYnRuLWdyb3VwLXNtID4gLmJ0biB7XFxuICBwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbTtcXG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgYm9yZGVyLXJhZGl1czogMC4ycmVtO1xcbn1cXG5cXG4uYnRuLWJsb2NrIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcblxcbi5idG4tYmxvY2sgKyAuYnRuLWJsb2NrIHtcXG4gIG1hcmdpbi10b3A6IDAuNXJlbTtcXG59XFxuXFxuaW5wdXRbdHlwZT1cXFwic3VibWl0XFxcIl0uYnRuLWJsb2NrLFxcbmlucHV0W3R5cGU9XFxcInJlc2V0XFxcIl0uYnRuLWJsb2NrLFxcbmlucHV0W3R5cGU9XFxcImJ1dHRvblxcXCJdLmJ0bi1ibG9jayB7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuXFxuLmZhZGUge1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBsaW5lYXI7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAuZmFkZSB7XFxuICAgIHRyYW5zaXRpb246IG5vbmU7XFxuICB9XFxufVxcblxcbi5mYWRlOm5vdCguc2hvdykge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuXFxuLmNvbGxhcHNlOm5vdCguc2hvdykge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLmNvbGxhcHNpbmcge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgaGVpZ2h0OiAwO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHRyYW5zaXRpb246IGhlaWdodCAwLjM1cyBlYXNlO1xcbn1cXG5cXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xcbiAgLmNvbGxhcHNpbmcge1xcbiAgICB0cmFuc2l0aW9uOiBub25lO1xcbiAgfVxcbn1cXG5cXG4uZHJvcHVwLFxcbi5kcm9wcmlnaHQsXFxuLmRyb3Bkb3duLFxcbi5kcm9wbGVmdCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbi5kcm9wZG93bi10b2dnbGUge1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG59XFxuXFxuLmRyb3Bkb3duLXRvZ2dsZTo6YWZ0ZXIge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luLWxlZnQ6IDAuMjU1ZW07XFxuICB2ZXJ0aWNhbC1hbGlnbjogMC4yNTVlbTtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgYm9yZGVyLXRvcDogMC4zZW0gc29saWQ7XFxuICBib3JkZXItcmlnaHQ6IDAuM2VtIHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWJvdHRvbTogMDtcXG4gIGJvcmRlci1sZWZ0OiAwLjNlbSBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmRyb3Bkb3duLXRvZ2dsZTplbXB0eTo6YWZ0ZXIge1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxufVxcblxcbi5kcm9wZG93bi1tZW51IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMTAwJTtcXG4gIGxlZnQ6IDA7XFxuICB6LWluZGV4OiAxMDAwO1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIGZsb2F0OiBsZWZ0O1xcbiAgbWluLXdpZHRoOiAxMHJlbTtcXG4gIHBhZGRpbmc6IDAuNXJlbSAwO1xcbiAgbWFyZ2luOiAwLjEyNXJlbSAwIDA7XFxuICBmb250LXNpemU6IDFyZW07XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICBsaXN0LXN0eWxlOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLmRyb3Bkb3duLW1lbnUtbGVmdCB7XFxuICByaWdodDogYXV0bztcXG4gIGxlZnQ6IDA7XFxufVxcblxcbi5kcm9wZG93bi1tZW51LXJpZ2h0IHtcXG4gIHJpZ2h0OiAwO1xcbiAgbGVmdDogYXV0bztcXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDU3NnB4KSB7XFxuICAuZHJvcGRvd24tbWVudS1zbS1sZWZ0IHtcXG4gICAgcmlnaHQ6IGF1dG87XFxuICAgIGxlZnQ6IDA7XFxuICB9XFxuICAuZHJvcGRvd24tbWVudS1zbS1yaWdodCB7XFxuICAgIHJpZ2h0OiAwO1xcbiAgICBsZWZ0OiBhdXRvO1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gIC5kcm9wZG93bi1tZW51LW1kLWxlZnQge1xcbiAgICByaWdodDogYXV0bztcXG4gICAgbGVmdDogMDtcXG4gIH1cXG4gIC5kcm9wZG93bi1tZW51LW1kLXJpZ2h0IHtcXG4gICAgcmlnaHQ6IDA7XFxuICAgIGxlZnQ6IGF1dG87XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xcbiAgLmRyb3Bkb3duLW1lbnUtbGctbGVmdCB7XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgICBsZWZ0OiAwO1xcbiAgfVxcbiAgLmRyb3Bkb3duLW1lbnUtbGctcmlnaHQge1xcbiAgICByaWdodDogMDtcXG4gICAgbGVmdDogYXV0bztcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xcbiAgLmRyb3Bkb3duLW1lbnUteGwtbGVmdCB7XFxuICAgIHJpZ2h0OiBhdXRvO1xcbiAgICBsZWZ0OiAwO1xcbiAgfVxcbiAgLmRyb3Bkb3duLW1lbnUteGwtcmlnaHQge1xcbiAgICByaWdodDogMDtcXG4gICAgbGVmdDogYXV0bztcXG4gIH1cXG59XFxuXFxuLmRyb3B1cCAuZHJvcGRvd24tbWVudSB7XFxuICB0b3A6IGF1dG87XFxuICBib3R0b206IDEwMCU7XFxuICBtYXJnaW4tdG9wOiAwO1xcbiAgbWFyZ2luLWJvdHRvbTogMC4xMjVyZW07XFxufVxcblxcbi5kcm9wdXAgLmRyb3Bkb3duLXRvZ2dsZTo6YWZ0ZXIge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luLWxlZnQ6IDAuMjU1ZW07XFxuICB2ZXJ0aWNhbC1hbGlnbjogMC4yNTVlbTtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgYm9yZGVyLXRvcDogMDtcXG4gIGJvcmRlci1yaWdodDogMC4zZW0gc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItYm90dG9tOiAwLjNlbSBzb2xpZDtcXG4gIGJvcmRlci1sZWZ0OiAwLjNlbSBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmRyb3B1cCAuZHJvcGRvd24tdG9nZ2xlOmVtcHR5OjphZnRlciB7XFxuICBtYXJnaW4tbGVmdDogMDtcXG59XFxuXFxuLmRyb3ByaWdodCAuZHJvcGRvd24tbWVudSB7XFxuICB0b3A6IDA7XFxuICByaWdodDogYXV0bztcXG4gIGxlZnQ6IDEwMCU7XFxuICBtYXJnaW4tdG9wOiAwO1xcbiAgbWFyZ2luLWxlZnQ6IDAuMTI1cmVtO1xcbn1cXG5cXG4uZHJvcHJpZ2h0IC5kcm9wZG93bi10b2dnbGU6OmFmdGVyIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG1hcmdpbi1sZWZ0OiAwLjI1NWVtO1xcbiAgdmVydGljYWwtYWxpZ246IDAuMjU1ZW07XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGJvcmRlci10b3A6IDAuM2VtIHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJpZ2h0OiAwO1xcbiAgYm9yZGVyLWJvdHRvbTogMC4zZW0gc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItbGVmdDogMC4zZW0gc29saWQ7XFxufVxcblxcbi5kcm9wcmlnaHQgLmRyb3Bkb3duLXRvZ2dsZTplbXB0eTo6YWZ0ZXIge1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxufVxcblxcbi5kcm9wcmlnaHQgLmRyb3Bkb3duLXRvZ2dsZTo6YWZ0ZXIge1xcbiAgdmVydGljYWwtYWxpZ246IDA7XFxufVxcblxcbi5kcm9wbGVmdCAuZHJvcGRvd24tbWVudSB7XFxuICB0b3A6IDA7XFxuICByaWdodDogMTAwJTtcXG4gIGxlZnQ6IGF1dG87XFxuICBtYXJnaW4tdG9wOiAwO1xcbiAgbWFyZ2luLXJpZ2h0OiAwLjEyNXJlbTtcXG59XFxuXFxuLmRyb3BsZWZ0IC5kcm9wZG93bi10b2dnbGU6OmFmdGVyIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG1hcmdpbi1sZWZ0OiAwLjI1NWVtO1xcbiAgdmVydGljYWwtYWxpZ246IDAuMjU1ZW07XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG59XFxuXFxuLmRyb3BsZWZ0IC5kcm9wZG93bi10b2dnbGU6OmFmdGVyIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi5kcm9wbGVmdCAuZHJvcGRvd24tdG9nZ2xlOjpiZWZvcmUge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luLXJpZ2h0OiAwLjI1NWVtO1xcbiAgdmVydGljYWwtYWxpZ246IDAuMjU1ZW07XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGJvcmRlci10b3A6IDAuM2VtIHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJpZ2h0OiAwLjNlbSBzb2xpZDtcXG4gIGJvcmRlci1ib3R0b206IDAuM2VtIHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uZHJvcGxlZnQgLmRyb3Bkb3duLXRvZ2dsZTplbXB0eTo6YWZ0ZXIge1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxufVxcblxcbi5kcm9wbGVmdCAuZHJvcGRvd24tdG9nZ2xlOjpiZWZvcmUge1xcbiAgdmVydGljYWwtYWxpZ246IDA7XFxufVxcblxcbi5kcm9wZG93bi1tZW51W3gtcGxhY2VtZW50Xj1cXFwidG9wXFxcIl0sIC5kcm9wZG93bi1tZW51W3gtcGxhY2VtZW50Xj1cXFwicmlnaHRcXFwiXSwgLmRyb3Bkb3duLW1lbnVbeC1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSwgLmRyb3Bkb3duLW1lbnVbeC1wbGFjZW1lbnRePVxcXCJsZWZ0XFxcIl0ge1xcbiAgcmlnaHQ6IGF1dG87XFxuICBib3R0b206IGF1dG87XFxufVxcblxcbi5kcm9wZG93bi1kaXZpZGVyIHtcXG4gIGhlaWdodDogMDtcXG4gIG1hcmdpbjogMC41cmVtIDA7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlOWVjZWY7XFxufVxcblxcbi5kcm9wZG93bi1pdGVtIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nOiAwLjI1cmVtIDEuNXJlbTtcXG4gIGNsZWFyOiBib3RoO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgdGV4dC1hbGlnbjogaW5oZXJpdDtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogMDtcXG59XFxuXFxuLmRyb3Bkb3duLWl0ZW06aG92ZXIsIC5kcm9wZG93bi1pdGVtOmZvY3VzIHtcXG4gIGNvbG9yOiAjMTYxODFiO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcXG59XFxuXFxuLmRyb3Bkb3duLWl0ZW0uYWN0aXZlLCAuZHJvcGRvd24taXRlbTphY3RpdmUge1xcbiAgY29sb3I6ICNmZmY7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3YmZmO1xcbn1cXG5cXG4uZHJvcGRvd24taXRlbS5kaXNhYmxlZCwgLmRyb3Bkb3duLWl0ZW06ZGlzYWJsZWQge1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uZHJvcGRvd24tbWVudS5zaG93IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4uZHJvcGRvd24taGVhZGVyIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgcGFkZGluZzogMC41cmVtIDEuNXJlbTtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxuICBmb250LXNpemU6IDAuODc1cmVtO1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG5cXG4uZHJvcGRvd24taXRlbS10ZXh0IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgcGFkZGluZzogMC4yNXJlbSAxLjVyZW07XFxuICBjb2xvcjogIzIxMjUyOTtcXG59XFxuXFxuLmJ0bi1ncm91cCxcXG4uYnRuLWdyb3VwLXZlcnRpY2FsIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG59XFxuXFxuLmJ0bi1ncm91cCA+IC5idG4sXFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgLW1zLWZsZXg6IDEgMSBhdXRvO1xcbiAgZmxleDogMSAxIGF1dG87XFxufVxcblxcbi5idG4tZ3JvdXAgPiAuYnRuOmhvdmVyLFxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOmhvdmVyIHtcXG4gIHotaW5kZXg6IDE7XFxufVxcblxcbi5idG4tZ3JvdXAgPiAuYnRuOmZvY3VzLCAuYnRuLWdyb3VwID4gLmJ0bjphY3RpdmUsIC5idG4tZ3JvdXAgPiAuYnRuLmFjdGl2ZSxcXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bjpmb2N1cyxcXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bjphY3RpdmUsXFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4uYWN0aXZlIHtcXG4gIHotaW5kZXg6IDE7XFxufVxcblxcbi5idG4tdG9vbGJhciB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxufVxcblxcbi5idG4tdG9vbGJhciAuaW5wdXQtZ3JvdXAge1xcbiAgd2lkdGg6IGF1dG87XFxufVxcblxcbi5idG4tZ3JvdXAgPiAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpLFxcbi5idG4tZ3JvdXAgPiAuYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xcbn1cXG5cXG4uYnRuLWdyb3VwID4gLmJ0bjpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKSxcXG4uYnRuLWdyb3VwID4gLmJ0bi1ncm91cDpub3QoOmxhc3QtY2hpbGQpID4gLmJ0biB7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xcbn1cXG5cXG4uYnRuLWdyb3VwID4gLmJ0bjpub3QoOmZpcnN0LWNoaWxkKSxcXG4uYnRuLWdyb3VwID4gLmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKSA+IC5idG4ge1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XFxufVxcblxcbi5kcm9wZG93bi10b2dnbGUtc3BsaXQge1xcbiAgcGFkZGluZy1yaWdodDogMC41NjI1cmVtO1xcbiAgcGFkZGluZy1sZWZ0OiAwLjU2MjVyZW07XFxufVxcblxcbi5kcm9wZG93bi10b2dnbGUtc3BsaXQ6OmFmdGVyLFxcbi5kcm9wdXAgLmRyb3Bkb3duLXRvZ2dsZS1zcGxpdDo6YWZ0ZXIsXFxuLmRyb3ByaWdodCAuZHJvcGRvd24tdG9nZ2xlLXNwbGl0OjphZnRlciB7XFxuICBtYXJnaW4tbGVmdDogMDtcXG59XFxuXFxuLmRyb3BsZWZ0IC5kcm9wZG93bi10b2dnbGUtc3BsaXQ6OmJlZm9yZSB7XFxuICBtYXJnaW4tcmlnaHQ6IDA7XFxufVxcblxcbi5idG4tc20gKyAuZHJvcGRvd24tdG9nZ2xlLXNwbGl0LCAuYnRuLWdyb3VwLXNtID4gLmJ0biArIC5kcm9wZG93bi10b2dnbGUtc3BsaXQge1xcbiAgcGFkZGluZy1yaWdodDogMC4zNzVyZW07XFxuICBwYWRkaW5nLWxlZnQ6IDAuMzc1cmVtO1xcbn1cXG5cXG4uYnRuLWxnICsgLmRyb3Bkb3duLXRvZ2dsZS1zcGxpdCwgLmJ0bi1ncm91cC1sZyA+IC5idG4gKyAuZHJvcGRvd24tdG9nZ2xlLXNwbGl0IHtcXG4gIHBhZGRpbmctcmlnaHQ6IDAuNzVyZW07XFxuICBwYWRkaW5nLWxlZnQ6IDAuNzVyZW07XFxufVxcblxcbi5idG4tZ3JvdXAtdmVydGljYWwge1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0O1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxuICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuXFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4sXFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXAge1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcblxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpLFxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gIG1hcmdpbi10b3A6IC0xcHg7XFxufVxcblxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOm5vdCg6bGFzdC1jaGlsZCk6bm90KC5kcm9wZG93bi10b2dnbGUpLFxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuIHtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcXG59XFxuXFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG46bm90KDpmaXJzdC1jaGlsZCksXFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXA6bm90KDpmaXJzdC1jaGlsZCkgPiAuYnRuIHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG59XFxuXFxuLmJ0bi1ncm91cC10b2dnbGUgPiAuYnRuLFxcbi5idG4tZ3JvdXAtdG9nZ2xlID4gLmJ0bi1ncm91cCA+IC5idG4ge1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG59XFxuXFxuLmJ0bi1ncm91cC10b2dnbGUgPiAuYnRuIGlucHV0W3R5cGU9XFxcInJhZGlvXFxcIl0sXFxuLmJ0bi1ncm91cC10b2dnbGUgPiAuYnRuIGlucHV0W3R5cGU9XFxcImNoZWNrYm94XFxcIl0sXFxuLmJ0bi1ncm91cC10b2dnbGUgPiAuYnRuLWdyb3VwID4gLmJ0biBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdLFxcbi5idG4tZ3JvdXAtdG9nZ2xlID4gLmJ0bi1ncm91cCA+IC5idG4gaW5wdXRbdHlwZT1cXFwiY2hlY2tib3hcXFwiXSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBjbGlwOiByZWN0KDAsIDAsIDAsIDApO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi5pbnB1dC1ncm91cCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgLW1zLWZsZXgtYWxpZ246IHN0cmV0Y2g7XFxuICBhbGlnbi1pdGVtczogc3RyZXRjaDtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sLFxcbi5pbnB1dC1ncm91cCA+IC5mb3JtLWNvbnRyb2wtcGxhaW50ZXh0LFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tc2VsZWN0LFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tZmlsZSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAtbXMtZmxleDogMSAxIGF1dG87XFxuICBmbGV4OiAxIDEgYXV0bztcXG4gIHdpZHRoOiAxJTtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxufVxcblxcbi5pbnB1dC1ncm91cCA+IC5mb3JtLWNvbnRyb2wgKyAuZm9ybS1jb250cm9sLFxcbi5pbnB1dC1ncm91cCA+IC5mb3JtLWNvbnRyb2wgKyAuY3VzdG9tLXNlbGVjdCxcXG4uaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sICsgLmN1c3RvbS1maWxlLFxcbi5pbnB1dC1ncm91cCA+IC5mb3JtLWNvbnRyb2wtcGxhaW50ZXh0ICsgLmZvcm0tY29udHJvbCxcXG4uaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sLXBsYWludGV4dCArIC5jdXN0b20tc2VsZWN0LFxcbi5pbnB1dC1ncm91cCA+IC5mb3JtLWNvbnRyb2wtcGxhaW50ZXh0ICsgLmN1c3RvbS1maWxlLFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tc2VsZWN0ICsgLmZvcm0tY29udHJvbCxcXG4uaW5wdXQtZ3JvdXAgPiAuY3VzdG9tLXNlbGVjdCArIC5jdXN0b20tc2VsZWN0LFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tc2VsZWN0ICsgLmN1c3RvbS1maWxlLFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tZmlsZSArIC5mb3JtLWNvbnRyb2wsXFxuLmlucHV0LWdyb3VwID4gLmN1c3RvbS1maWxlICsgLmN1c3RvbS1zZWxlY3QsXFxuLmlucHV0LWdyb3VwID4gLmN1c3RvbS1maWxlICsgLmN1c3RvbS1maWxlIHtcXG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sOmZvY3VzLFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tc2VsZWN0OmZvY3VzLFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tZmlsZSAuY3VzdG9tLWZpbGUtaW5wdXQ6Zm9jdXMgfiAuY3VzdG9tLWZpbGUtbGFiZWwge1xcbiAgei1pbmRleDogMztcXG59XFxuXFxuLmlucHV0LWdyb3VwID4gLmN1c3RvbS1maWxlIC5jdXN0b20tZmlsZS1pbnB1dDpmb2N1cyB7XFxuICB6LWluZGV4OiA0O1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sOm5vdCg6bGFzdC1jaGlsZCksXFxuLmlucHV0LWdyb3VwID4gLmN1c3RvbS1zZWxlY3Q6bm90KDpsYXN0LWNoaWxkKSB7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sOm5vdCg6Zmlyc3QtY2hpbGQpLFxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tc2VsZWN0Om5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAgPiAuY3VzdG9tLWZpbGUge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxufVxcblxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tZmlsZTpub3QoOmxhc3QtY2hpbGQpIC5jdXN0b20tZmlsZS1sYWJlbCxcXG4uaW5wdXQtZ3JvdXAgPiAuY3VzdG9tLWZpbGU6bm90KDpsYXN0LWNoaWxkKSAuY3VzdG9tLWZpbGUtbGFiZWw6OmFmdGVyIHtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XFxufVxcblxcbi5pbnB1dC1ncm91cCA+IC5jdXN0b20tZmlsZTpub3QoOmZpcnN0LWNoaWxkKSAuY3VzdG9tLWZpbGUtbGFiZWwge1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XFxufVxcblxcbi5pbnB1dC1ncm91cC1wcmVwZW5kLFxcbi5pbnB1dC1ncm91cC1hcHBlbmQge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAtcHJlcGVuZCAuYnRuLFxcbi5pbnB1dC1ncm91cC1hcHBlbmQgLmJ0biB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB6LWluZGV4OiAyO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAtcHJlcGVuZCAuYnRuOmZvY3VzLFxcbi5pbnB1dC1ncm91cC1hcHBlbmQgLmJ0bjpmb2N1cyB7XFxuICB6LWluZGV4OiAzO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAtcHJlcGVuZCAuYnRuICsgLmJ0bixcXG4uaW5wdXQtZ3JvdXAtcHJlcGVuZCAuYnRuICsgLmlucHV0LWdyb3VwLXRleHQsXFxuLmlucHV0LWdyb3VwLXByZXBlbmQgLmlucHV0LWdyb3VwLXRleHQgKyAuaW5wdXQtZ3JvdXAtdGV4dCxcXG4uaW5wdXQtZ3JvdXAtcHJlcGVuZCAuaW5wdXQtZ3JvdXAtdGV4dCArIC5idG4sXFxuLmlucHV0LWdyb3VwLWFwcGVuZCAuYnRuICsgLmJ0bixcXG4uaW5wdXQtZ3JvdXAtYXBwZW5kIC5idG4gKyAuaW5wdXQtZ3JvdXAtdGV4dCxcXG4uaW5wdXQtZ3JvdXAtYXBwZW5kIC5pbnB1dC1ncm91cC10ZXh0ICsgLmlucHV0LWdyb3VwLXRleHQsXFxuLmlucHV0LWdyb3VwLWFwcGVuZCAuaW5wdXQtZ3JvdXAtdGV4dCArIC5idG4ge1xcbiAgbWFyZ2luLWxlZnQ6IC0xcHg7XFxufVxcblxcbi5pbnB1dC1ncm91cC1wcmVwZW5kIHtcXG4gIG1hcmdpbi1yaWdodDogLTFweDtcXG59XFxuXFxuLmlucHV0LWdyb3VwLWFwcGVuZCB7XFxuICBtYXJnaW4tbGVmdDogLTFweDtcXG59XFxuXFxuLmlucHV0LWdyb3VwLXRleHQge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBwYWRkaW5nOiAwLjM3NXJlbSAwLjc1cmVtO1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIGZvbnQtc2l6ZTogMXJlbTtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgY29sb3I6ICM0OTUwNTc7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U5ZWNlZjtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNjZWQ0ZGE7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAtdGV4dCBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdLFxcbi5pbnB1dC1ncm91cC10ZXh0IGlucHV0W3R5cGU9XFxcImNoZWNrYm94XFxcIl0ge1xcbiAgbWFyZ2luLXRvcDogMDtcXG59XFxuXFxuLmlucHV0LWdyb3VwLWxnID4gLmZvcm0tY29udHJvbDpub3QodGV4dGFyZWEpLFxcbi5pbnB1dC1ncm91cC1sZyA+IC5jdXN0b20tc2VsZWN0IHtcXG4gIGhlaWdodDogY2FsYygxLjVlbSArIDFyZW0gKyAycHgpO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAtbGcgPiAuZm9ybS1jb250cm9sLFxcbi5pbnB1dC1ncm91cC1sZyA+IC5jdXN0b20tc2VsZWN0LFxcbi5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1wcmVwZW5kID4gLmlucHV0LWdyb3VwLXRleHQsXFxuLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWFwcGVuZCA+IC5pbnB1dC1ncm91cC10ZXh0LFxcbi5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1wcmVwZW5kID4gLmJ0bixcXG4uaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYXBwZW5kID4gLmJ0biB7XFxuICBwYWRkaW5nOiAwLjVyZW0gMXJlbTtcXG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICBib3JkZXItcmFkaXVzOiAwLjNyZW07XFxufVxcblxcbi5pbnB1dC1ncm91cC1zbSA+IC5mb3JtLWNvbnRyb2w6bm90KHRleHRhcmVhKSxcXG4uaW5wdXQtZ3JvdXAtc20gPiAuY3VzdG9tLXNlbGVjdCB7XFxuICBoZWlnaHQ6IGNhbGMoMS41ZW0gKyAwLjVyZW0gKyAycHgpO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAtc20gPiAuZm9ybS1jb250cm9sLFxcbi5pbnB1dC1ncm91cC1zbSA+IC5jdXN0b20tc2VsZWN0LFxcbi5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1wcmVwZW5kID4gLmlucHV0LWdyb3VwLXRleHQsXFxuLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWFwcGVuZCA+IC5pbnB1dC1ncm91cC10ZXh0LFxcbi5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1wcmVwZW5kID4gLmJ0bixcXG4uaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYXBwZW5kID4gLmJ0biB7XFxuICBwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbTtcXG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgYm9yZGVyLXJhZGl1czogMC4ycmVtO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAtbGcgPiAuY3VzdG9tLXNlbGVjdCxcXG4uaW5wdXQtZ3JvdXAtc20gPiAuY3VzdG9tLXNlbGVjdCB7XFxuICBwYWRkaW5nLXJpZ2h0OiAxLjc1cmVtO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAgPiAuaW5wdXQtZ3JvdXAtcHJlcGVuZCA+IC5idG4sXFxuLmlucHV0LWdyb3VwID4gLmlucHV0LWdyb3VwLXByZXBlbmQgPiAuaW5wdXQtZ3JvdXAtdGV4dCxcXG4uaW5wdXQtZ3JvdXAgPiAuaW5wdXQtZ3JvdXAtYXBwZW5kOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuLFxcbi5pbnB1dC1ncm91cCA+IC5pbnB1dC1ncm91cC1hcHBlbmQ6bm90KDpsYXN0LWNoaWxkKSA+IC5pbnB1dC1ncm91cC10ZXh0LFxcbi5pbnB1dC1ncm91cCA+IC5pbnB1dC1ncm91cC1hcHBlbmQ6bGFzdC1jaGlsZCA+IC5idG46bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSksXFxuLmlucHV0LWdyb3VwID4gLmlucHV0LWdyb3VwLWFwcGVuZDpsYXN0LWNoaWxkID4gLmlucHV0LWdyb3VwLXRleHQ6bm90KDpsYXN0LWNoaWxkKSB7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xcbn1cXG5cXG4uaW5wdXQtZ3JvdXAgPiAuaW5wdXQtZ3JvdXAtYXBwZW5kID4gLmJ0bixcXG4uaW5wdXQtZ3JvdXAgPiAuaW5wdXQtZ3JvdXAtYXBwZW5kID4gLmlucHV0LWdyb3VwLXRleHQsXFxuLmlucHV0LWdyb3VwID4gLmlucHV0LWdyb3VwLXByZXBlbmQ6bm90KDpmaXJzdC1jaGlsZCkgPiAuYnRuLFxcbi5pbnB1dC1ncm91cCA+IC5pbnB1dC1ncm91cC1wcmVwZW5kOm5vdCg6Zmlyc3QtY2hpbGQpID4gLmlucHV0LWdyb3VwLXRleHQsXFxuLmlucHV0LWdyb3VwID4gLmlucHV0LWdyb3VwLXByZXBlbmQ6Zmlyc3QtY2hpbGQgPiAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpLFxcbi5pbnB1dC1ncm91cCA+IC5pbnB1dC1ncm91cC1wcmVwZW5kOmZpcnN0LWNoaWxkID4gLmlucHV0LWdyb3VwLXRleHQ6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XFxufVxcblxcbi5jdXN0b20tY29udHJvbCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIG1pbi1oZWlnaHQ6IDEuNXJlbTtcXG4gIHBhZGRpbmctbGVmdDogMS41cmVtO1xcbn1cXG5cXG4uY3VzdG9tLWNvbnRyb2wtaW5saW5lIHtcXG4gIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xcbn1cXG5cXG4uY3VzdG9tLWNvbnRyb2wtaW5wdXQge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgei1pbmRleDogLTE7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG5cXG4uY3VzdG9tLWNvbnRyb2wtaW5wdXQ6Y2hlY2tlZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyLWNvbG9yOiAjMDA3YmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjtcXG59XFxuXFxuLmN1c3RvbS1jb250cm9sLWlucHV0OmZvY3VzIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMCwgMTIzLCAyNTUsIDAuMjUpO1xcbn1cXG5cXG4uY3VzdG9tLWNvbnRyb2wtaW5wdXQ6Zm9jdXM6bm90KDpjaGVja2VkKSB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJvcmRlci1jb2xvcjogIzgwYmRmZjtcXG59XFxuXFxuLmN1c3RvbS1jb250cm9sLWlucHV0Om5vdCg6ZGlzYWJsZWQpOmFjdGl2ZSB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IzZDdmZjtcXG4gIGJvcmRlci1jb2xvcjogI2IzZDdmZjtcXG59XFxuXFxuLmN1c3RvbS1jb250cm9sLWlucHV0OmRpc2FibGVkIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsIHtcXG4gIGNvbG9yOiAjNmM3NTdkO1xcbn1cXG5cXG4uY3VzdG9tLWNvbnRyb2wtaW5wdXQ6ZGlzYWJsZWQgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO1xcbn1cXG5cXG4uY3VzdG9tLWNvbnRyb2wtbGFiZWwge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XFxufVxcblxcbi5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMC4yNXJlbTtcXG4gIGxlZnQ6IC0xLjVyZW07XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxcmVtO1xcbiAgaGVpZ2h0OiAxcmVtO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3JkZXI6ICNhZGI1YmQgc29saWQgMXB4O1xcbn1cXG5cXG4uY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmFmdGVyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMC4yNXJlbTtcXG4gIGxlZnQ6IC0xLjVyZW07XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxcmVtO1xcbiAgaGVpZ2h0OiAxcmVtO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgNTAlIC8gNTAlIDUwJTtcXG59XFxuXFxuLmN1c3RvbS1jaGVja2JveCAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSB7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4uY3VzdG9tLWNoZWNrYm94IC5jdXN0b20tY29udHJvbC1pbnB1dDpjaGVja2VkIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjphZnRlciB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgOCA4JyUzZSUzY3BhdGggZmlsbD0nJTIzZmZmJyBkPSdNNi41NjQuNzVsLTMuNTkgMy42MTItMS41MzgtMS41NUwwIDQuMjYgMi45NzQgNy4yNSA4IDIuMTkzeicvJTNlJTNjL3N2ZyUzZVxcXCIpO1xcbn1cXG5cXG4uY3VzdG9tLWNoZWNrYm94IC5jdXN0b20tY29udHJvbC1pbnB1dDppbmRldGVybWluYXRlIH4gLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUge1xcbiAgYm9yZGVyLWNvbG9yOiAjMDA3YmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjtcXG59XFxuXFxuLmN1c3RvbS1jaGVja2JveCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6aW5kZXRlcm1pbmF0ZSB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YWZ0ZXIge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDQgNCclM2UlM2NwYXRoIHN0cm9rZT0nJTIzZmZmJyBkPSdNMCAyaDQnLyUzZSUzYy9zdmclM2VcXFwiKTtcXG59XFxuXFxuLmN1c3RvbS1jaGVja2JveCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6ZGlzYWJsZWQ6Y2hlY2tlZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMTIzLCAyNTUsIDAuNSk7XFxufVxcblxcbi5jdXN0b20tY2hlY2tib3ggLmN1c3RvbS1jb250cm9sLWlucHV0OmRpc2FibGVkOmluZGV0ZXJtaW5hdGUgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDEyMywgMjU1LCAwLjUpO1xcbn1cXG5cXG4uY3VzdG9tLXJhZGlvIC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG59XFxuXFxuLmN1c3RvbS1yYWRpbyAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6Y2hlY2tlZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YWZ0ZXIge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nLTQgLTQgOCA4JyUzZSUzY2NpcmNsZSByPSczJyBmaWxsPSclMjNmZmYnLyUzZSUzYy9zdmclM2VcXFwiKTtcXG59XFxuXFxuLmN1c3RvbS1yYWRpbyAuY3VzdG9tLWNvbnRyb2wtaW5wdXQ6ZGlzYWJsZWQ6Y2hlY2tlZCB+IC5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMTIzLCAyNTUsIDAuNSk7XFxufVxcblxcbi5jdXN0b20tc3dpdGNoIHtcXG4gIHBhZGRpbmctbGVmdDogMi4yNXJlbTtcXG59XFxuXFxuLmN1c3RvbS1zd2l0Y2ggLmN1c3RvbS1jb250cm9sLWxhYmVsOjpiZWZvcmUge1xcbiAgbGVmdDogLTIuMjVyZW07XFxuICB3aWR0aDogMS43NXJlbTtcXG4gIHBvaW50ZXItZXZlbnRzOiBhbGw7XFxuICBib3JkZXItcmFkaXVzOiAwLjVyZW07XFxufVxcblxcbi5jdXN0b20tc3dpdGNoIC5jdXN0b20tY29udHJvbC1sYWJlbDo6YWZ0ZXIge1xcbiAgdG9wOiBjYWxjKDAuMjVyZW0gKyAycHgpO1xcbiAgbGVmdDogY2FsYygtMi4yNXJlbSArIDJweCk7XFxuICB3aWR0aDogY2FsYygxcmVtIC0gNHB4KTtcXG4gIGhlaWdodDogY2FsYygxcmVtIC0gNHB4KTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhZGI1YmQ7XFxuICBib3JkZXItcmFkaXVzOiAwLjVyZW07XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJveC1zaGFkb3cgMC4xNXMgZWFzZS1pbi1vdXQsIC13ZWJraXQtdHJhbnNmb3JtIDAuMTVzIGVhc2UtaW4tb3V0O1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMTVzIGVhc2UtaW4tb3V0LCBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJveC1zaGFkb3cgMC4xNXMgZWFzZS1pbi1vdXQ7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4xNXMgZWFzZS1pbi1vdXQsIGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAwLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAwLjE1cyBlYXNlLWluLW91dCwgLXdlYmtpdC10cmFuc2Zvcm0gMC4xNXMgZWFzZS1pbi1vdXQ7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAuY3VzdG9tLXN3aXRjaCAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmFmdGVyIHtcXG4gICAgdHJhbnNpdGlvbjogbm9uZTtcXG4gIH1cXG59XFxuXFxuLmN1c3RvbS1zd2l0Y2ggLmN1c3RvbS1jb250cm9sLWlucHV0OmNoZWNrZWQgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmFmdGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgwLjc1cmVtKTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwLjc1cmVtKTtcXG59XFxuXFxuLmN1c3RvbS1zd2l0Y2ggLmN1c3RvbS1jb250cm9sLWlucHV0OmRpc2FibGVkOmNoZWNrZWQgfiAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDEyMywgMjU1LCAwLjUpO1xcbn1cXG5cXG4uY3VzdG9tLXNlbGVjdCB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogY2FsYygxLjVlbSArIDAuNzVyZW0gKyAycHgpO1xcbiAgcGFkZGluZzogMC4zNzVyZW0gMS43NXJlbSAwLjM3NXJlbSAwLjc1cmVtO1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICBjb2xvcjogIzQ5NTA1NztcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuICBiYWNrZ3JvdW5kOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNCA1JyUzZSUzY3BhdGggZmlsbD0nJTIzMzQzYTQwJyBkPSdNMiAwTDAgMmg0em0wIDVMMCAzaDR6Jy8lM2UlM2Mvc3ZnJTNlXFxcIikgbm8tcmVwZWF0IHJpZ2h0IDAuNzVyZW0gY2VudGVyLzhweCAxMHB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNjZWQ0ZGE7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbiAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xcbiAgYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuXFxuLmN1c3RvbS1zZWxlY3Q6Zm9jdXMge1xcbiAgYm9yZGVyLWNvbG9yOiAjODBiZGZmO1xcbiAgb3V0bGluZTogMDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDAsIDEyMywgMjU1LCAwLjI1KTtcXG59XFxuXFxuLmN1c3RvbS1zZWxlY3Q6Zm9jdXM6Oi1tcy12YWx1ZSB7XFxuICBjb2xvcjogIzQ5NTA1NztcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxufVxcblxcbi5jdXN0b20tc2VsZWN0W211bHRpcGxlXSwgLmN1c3RvbS1zZWxlY3Rbc2l6ZV06bm90KFtzaXplPVxcXCIxXFxcIl0pIHtcXG4gIGhlaWdodDogYXV0bztcXG4gIHBhZGRpbmctcmlnaHQ6IDAuNzVyZW07XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xcbn1cXG5cXG4uY3VzdG9tLXNlbGVjdDpkaXNhYmxlZCB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlOWVjZWY7XFxufVxcblxcbi5jdXN0b20tc2VsZWN0OjotbXMtZXhwYW5kIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi5jdXN0b20tc2VsZWN0LXNtIHtcXG4gIGhlaWdodDogY2FsYygxLjVlbSArIDAuNXJlbSArIDJweCk7XFxuICBwYWRkaW5nLXRvcDogMC4yNXJlbTtcXG4gIHBhZGRpbmctYm90dG9tOiAwLjI1cmVtO1xcbiAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XFxuICBmb250LXNpemU6IDAuODc1cmVtO1xcbn1cXG5cXG4uY3VzdG9tLXNlbGVjdC1sZyB7XFxuICBoZWlnaHQ6IGNhbGMoMS41ZW0gKyAxcmVtICsgMnB4KTtcXG4gIHBhZGRpbmctdG9wOiAwLjVyZW07XFxuICBwYWRkaW5nLWJvdHRvbTogMC41cmVtO1xcbiAgcGFkZGluZy1sZWZ0OiAxcmVtO1xcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xcbn1cXG5cXG4uY3VzdG9tLWZpbGUge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IGNhbGMoMS41ZW0gKyAwLjc1cmVtICsgMnB4KTtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxufVxcblxcbi5jdXN0b20tZmlsZS1pbnB1dCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB6LWluZGV4OiAyO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IGNhbGMoMS41ZW0gKyAwLjc1cmVtICsgMnB4KTtcXG4gIG1hcmdpbjogMDtcXG4gIG9wYWNpdHk6IDA7XFxufVxcblxcbi5jdXN0b20tZmlsZS1pbnB1dDpmb2N1cyB+IC5jdXN0b20tZmlsZS1sYWJlbCB7XFxuICBib3JkZXItY29sb3I6ICM4MGJkZmY7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgwLCAxMjMsIDI1NSwgMC4yNSk7XFxufVxcblxcbi5jdXN0b20tZmlsZS1pbnB1dDpkaXNhYmxlZCB+IC5jdXN0b20tZmlsZS1sYWJlbCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO1xcbn1cXG5cXG4uY3VzdG9tLWZpbGUtaW5wdXQ6bGFuZyhlbikgfiAuY3VzdG9tLWZpbGUtbGFiZWw6OmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCJCcm93c2VcXFwiO1xcbn1cXG5cXG4uY3VzdG9tLWZpbGUtaW5wdXQgfiAuY3VzdG9tLWZpbGUtbGFiZWxbZGF0YS1icm93c2VdOjphZnRlciB7XFxuICBjb250ZW50OiBhdHRyKGRhdGEtYnJvd3NlKTtcXG59XFxuXFxuLmN1c3RvbS1maWxlLWxhYmVsIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgbGVmdDogMDtcXG4gIHotaW5kZXg6IDE7XFxuICBoZWlnaHQ6IGNhbGMoMS41ZW0gKyAwLjc1cmVtICsgMnB4KTtcXG4gIHBhZGRpbmc6IDAuMzc1cmVtIDAuNzVyZW07XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG4gIGNvbG9yOiAjNDk1MDU3O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNjZWQ0ZGE7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4uY3VzdG9tLWZpbGUtbGFiZWw6OmFmdGVyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgei1pbmRleDogMztcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgaGVpZ2h0OiBjYWxjKDEuNWVtICsgMC43NXJlbSk7XFxuICBwYWRkaW5nOiAwLjM3NXJlbSAwLjc1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG4gIGNvbG9yOiAjNDk1MDU3O1xcbiAgY29udGVudDogXFxcIkJyb3dzZVxcXCI7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO1xcbiAgYm9yZGVyLWxlZnQ6IGluaGVyaXQ7XFxuICBib3JkZXItcmFkaXVzOiAwIDAuMjVyZW0gMC4yNXJlbSAwO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiBjYWxjKDFyZW0gKyAwLjRyZW0pO1xcbiAgcGFkZGluZzogMDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbiAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xcbiAgYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuXFxuLmN1c3RvbS1yYW5nZTpmb2N1cyB7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlOmZvY3VzOjotd2Via2l0LXNsaWRlci10aHVtYiB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggI2ZmZiwgMCAwIDAgMC4ycmVtIHJnYmEoMCwgMTIzLCAyNTUsIDAuMjUpO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlOmZvY3VzOjotbW96LXJhbmdlLXRodW1iIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCAjZmZmLCAwIDAgMCAwLjJyZW0gcmdiYSgwLCAxMjMsIDI1NSwgMC4yNSk7XFxufVxcblxcbi5jdXN0b20tcmFuZ2U6Zm9jdXM6Oi1tcy10aHVtYiB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggI2ZmZiwgMCAwIDAgMC4ycmVtIHJnYmEoMCwgMTIzLCAyNTUsIDAuMjUpO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlOjotbW96LWZvY3VzLW91dGVyIHtcXG4gIGJvcmRlcjogMDtcXG59XFxuXFxuLmN1c3RvbS1yYW5nZTo6LXdlYmtpdC1zbGlkZXItdGh1bWIge1xcbiAgd2lkdGg6IDFyZW07XFxuICBoZWlnaHQ6IDFyZW07XFxuICBtYXJnaW4tdG9wOiAtMC4yNXJlbTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDdiZmY7XFxuICBib3JkZXI6IDA7XFxuICBib3JkZXItcmFkaXVzOiAxcmVtO1xcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjE1cyBlYXNlLWluLW91dCwgYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3gtc2hhZG93IDAuMTVzIGVhc2UtaW4tb3V0O1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbiAgYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuXFxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcXG4gIC5jdXN0b20tcmFuZ2U6Oi13ZWJraXQtc2xpZGVyLXRodW1iIHtcXG4gICAgdHJhbnNpdGlvbjogbm9uZTtcXG4gIH1cXG59XFxuXFxuLmN1c3RvbS1yYW5nZTo6LXdlYmtpdC1zbGlkZXItdGh1bWI6YWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiM2Q3ZmY7XFxufVxcblxcbi5jdXN0b20tcmFuZ2U6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAwLjVyZW07XFxuICBjb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVlMmU2O1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1yYWRpdXM6IDFyZW07XFxufVxcblxcbi5jdXN0b20tcmFuZ2U6Oi1tb3otcmFuZ2UtdGh1bWIge1xcbiAgd2lkdGg6IDFyZW07XFxuICBoZWlnaHQ6IDFyZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3YmZmO1xcbiAgYm9yZGVyOiAwO1xcbiAgYm9yZGVyLXJhZGl1czogMXJlbTtcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAwLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAwLjE1cyBlYXNlLWluLW91dDtcXG4gIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcXG4gIGFwcGVhcmFuY2U6IG5vbmU7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAuY3VzdG9tLXJhbmdlOjotbW96LXJhbmdlLXRodW1iIHtcXG4gICAgdHJhbnNpdGlvbjogbm9uZTtcXG4gIH1cXG59XFxuXFxuLmN1c3RvbS1yYW5nZTo6LW1vei1yYW5nZS10aHVtYjphY3RpdmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IzZDdmZjtcXG59XFxuXFxuLmN1c3RvbS1yYW5nZTo6LW1vei1yYW5nZS10cmFjayB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMC41cmVtO1xcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RlZTJlNjtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmFkaXVzOiAxcmVtO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlOjotbXMtdGh1bWIge1xcbiAgd2lkdGg6IDFyZW07XFxuICBoZWlnaHQ6IDFyZW07XFxuICBtYXJnaW4tdG9wOiAwO1xcbiAgbWFyZ2luLXJpZ2h0OiAwLjJyZW07XFxuICBtYXJnaW4tbGVmdDogMC4ycmVtO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjtcXG4gIGJvcmRlcjogMDtcXG4gIGJvcmRlci1yYWRpdXM6IDFyZW07XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJveC1zaGFkb3cgMC4xNXMgZWFzZS1pbi1vdXQ7XFxuICBhcHBlYXJhbmNlOiBub25lO1xcbn1cXG5cXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xcbiAgLmN1c3RvbS1yYW5nZTo6LW1zLXRodW1iIHtcXG4gICAgdHJhbnNpdGlvbjogbm9uZTtcXG4gIH1cXG59XFxuXFxuLmN1c3RvbS1yYW5nZTo6LW1zLXRodW1iOmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjNkN2ZmO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlOjotbXMtdHJhY2sge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDAuNXJlbTtcXG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci13aWR0aDogMC41cmVtO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlOjotbXMtZmlsbC1sb3dlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVlMmU2O1xcbiAgYm9yZGVyLXJhZGl1czogMXJlbTtcXG59XFxuXFxuLmN1c3RvbS1yYW5nZTo6LW1zLWZpbGwtdXBwZXIge1xcbiAgbWFyZ2luLXJpZ2h0OiAxNXB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RlZTJlNjtcXG4gIGJvcmRlci1yYWRpdXM6IDFyZW07XFxufVxcblxcbi5jdXN0b20tcmFuZ2U6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1iIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhZGI1YmQ7XFxufVxcblxcbi5jdXN0b20tcmFuZ2U6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrIHtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuXFxuLmN1c3RvbS1yYW5nZTpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWRiNWJkO1xcbn1cXG5cXG4uY3VzdG9tLXJhbmdlOmRpc2FibGVkOjotbW96LXJhbmdlLXRyYWNrIHtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuXFxuLmN1c3RvbS1yYW5nZTpkaXNhYmxlZDo6LW1zLXRodW1iIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhZGI1YmQ7XFxufVxcblxcbi5jdXN0b20tY29udHJvbC1sYWJlbDo6YmVmb3JlLFxcbi5jdXN0b20tZmlsZS1sYWJlbCxcXG4uY3VzdG9tLXNlbGVjdCB7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJveC1zaGFkb3cgMC4xNXMgZWFzZS1pbi1vdXQ7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAuY3VzdG9tLWNvbnRyb2wtbGFiZWw6OmJlZm9yZSxcXG4gIC5jdXN0b20tZmlsZS1sYWJlbCxcXG4gIC5jdXN0b20tc2VsZWN0IHtcXG4gICAgdHJhbnNpdGlvbjogbm9uZTtcXG4gIH1cXG59XFxuXFxuLm5hdiB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XFxufVxcblxcbi5uYXYtbGluayB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHBhZGRpbmc6IDAuNXJlbSAxcmVtO1xcbn1cXG5cXG4ubmF2LWxpbms6aG92ZXIsIC5uYXYtbGluazpmb2N1cyB7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcblxcbi5uYXYtbGluay5kaXNhYmxlZCB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbn1cXG5cXG4ubmF2LXRhYnMge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZWUyZTY7XFxufVxcblxcbi5uYXYtdGFicyAubmF2LWl0ZW0ge1xcbiAgbWFyZ2luLWJvdHRvbTogLTFweDtcXG59XFxuXFxuLm5hdi10YWJzIC5uYXYtbGluayB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLm5hdi10YWJzIC5uYXYtbGluazpob3ZlciwgLm5hdi10YWJzIC5uYXYtbGluazpmb2N1cyB7XFxuICBib3JkZXItY29sb3I6ICNlOWVjZWYgI2U5ZWNlZiAjZGVlMmU2O1xcbn1cXG5cXG4ubmF2LXRhYnMgLm5hdi1saW5rLmRpc2FibGVkIHtcXG4gIGNvbG9yOiAjNmM3NTdkO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4ubmF2LXRhYnMgLm5hdi1saW5rLmFjdGl2ZSxcXG4ubmF2LXRhYnMgLm5hdi1pdGVtLnNob3cgLm5hdi1saW5rIHtcXG4gIGNvbG9yOiAjNDk1MDU3O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlci1jb2xvcjogI2RlZTJlNiAjZGVlMmU2ICNmZmY7XFxufVxcblxcbi5uYXYtdGFicyAuZHJvcGRvd24tbWVudSB7XFxuICBtYXJnaW4tdG9wOiAtMXB4O1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xcbn1cXG5cXG4ubmF2LXBpbGxzIC5uYXYtbGluayB7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4ubmF2LXBpbGxzIC5uYXYtbGluay5hY3RpdmUsXFxuLm5hdi1waWxscyAuc2hvdyA+IC5uYXYtbGluayB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDdiZmY7XFxufVxcblxcbi5uYXYtZmlsbCAubmF2LWl0ZW0ge1xcbiAgLW1zLWZsZXg6IDEgMSBhdXRvO1xcbiAgZmxleDogMSAxIGF1dG87XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbi5uYXYtanVzdGlmaWVkIC5uYXYtaXRlbSB7XFxuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMDtcXG4gIGZsZXgtYmFzaXM6IDA7XFxuICAtbXMtZmxleC1wb3NpdGl2ZTogMTtcXG4gIGZsZXgtZ3JvdzogMTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuLnRhYi1jb250ZW50ID4gLnRhYi1wYW5lIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi50YWItY29udGVudCA+IC5hY3RpdmUge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi5uYXZiYXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcXG4gIGZsZXgtd3JhcDogd3JhcDtcXG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gIHBhZGRpbmc6IDAuNXJlbSAxcmVtO1xcbn1cXG5cXG4ubmF2YmFyID4gLmNvbnRhaW5lcixcXG4ubmF2YmFyID4gLmNvbnRhaW5lci1mbHVpZCB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbn1cXG5cXG4ubmF2YmFyLWJyYW5kIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHBhZGRpbmctdG9wOiAwLjMxMjVyZW07XFxuICBwYWRkaW5nLWJvdHRvbTogMC4zMTI1cmVtO1xcbiAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG5cXG4ubmF2YmFyLWJyYW5kOmhvdmVyLCAubmF2YmFyLWJyYW5kOmZvY3VzIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuXFxuLm5hdmJhci1uYXYge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XFxufVxcblxcbi5uYXZiYXItbmF2IC5uYXYtbGluayB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwO1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbn1cXG5cXG4ubmF2YmFyLW5hdiAuZHJvcGRvd24tbWVudSB7XFxuICBwb3NpdGlvbjogc3RhdGljO1xcbiAgZmxvYXQ6IG5vbmU7XFxufVxcblxcbi5uYXZiYXItdGV4dCB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBwYWRkaW5nLXRvcDogMC41cmVtO1xcbiAgcGFkZGluZy1ib3R0b206IDAuNXJlbTtcXG59XFxuXFxuLm5hdmJhci1jb2xsYXBzZSB7XFxuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMTAwJTtcXG4gIGZsZXgtYmFzaXM6IDEwMCU7XFxuICAtbXMtZmxleC1wb3NpdGl2ZTogMTtcXG4gIGZsZXgtZ3JvdzogMTtcXG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4ubmF2YmFyLXRvZ2dsZXIge1xcbiAgcGFkZGluZzogMC4yNXJlbSAwLjc1cmVtO1xcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLm5hdmJhci10b2dnbGVyOmhvdmVyLCAubmF2YmFyLXRvZ2dsZXI6Zm9jdXMge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbn1cXG5cXG4ubmF2YmFyLXRvZ2dsZXItaWNvbiB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB3aWR0aDogMS41ZW07XFxuICBoZWlnaHQ6IDEuNWVtO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgYmFja2dyb3VuZDogbm8tcmVwZWF0IGNlbnRlciBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMTAwJTtcXG59XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDU3NS45OHB4KSB7XFxuICAubmF2YmFyLWV4cGFuZC1zbSA+IC5jb250YWluZXIsXFxuICAubmF2YmFyLWV4cGFuZC1zbSA+IC5jb250YWluZXItZmx1aWQge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLm5hdmJhci1leHBhbmQtc20ge1xcbiAgICAtbXMtZmxleC1mbG93OiByb3cgbm93cmFwO1xcbiAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XFxuICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC1zbSAubmF2YmFyLW5hdiB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtc20gLm5hdmJhci1uYXYgLmRyb3Bkb3duLW1lbnUge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC1zbSAubmF2YmFyLW5hdiAubmF2LWxpbmsge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XFxuICAgIHBhZGRpbmctbGVmdDogMC41cmVtO1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtc20gPiAuY29udGFpbmVyLFxcbiAgLm5hdmJhci1leHBhbmQtc20gPiAuY29udGFpbmVyLWZsdWlkIHtcXG4gICAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xcbiAgICBmbGV4LXdyYXA6IG5vd3JhcDtcXG4gIH1cXG4gIC5uYXZiYXItZXhwYW5kLXNtIC5uYXZiYXItY29sbGFwc2Uge1xcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbiAgICBmbGV4LWJhc2lzOiBhdXRvO1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtc20gLm5hdmJhci10b2dnbGVyIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDc2Ny45OHB4KSB7XFxuICAubmF2YmFyLWV4cGFuZC1tZCA+IC5jb250YWluZXIsXFxuICAubmF2YmFyLWV4cGFuZC1tZCA+IC5jb250YWluZXItZmx1aWQge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLm5hdmJhci1leHBhbmQtbWQge1xcbiAgICAtbXMtZmxleC1mbG93OiByb3cgbm93cmFwO1xcbiAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XFxuICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC1tZCAubmF2YmFyLW5hdiB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtbWQgLm5hdmJhci1uYXYgLmRyb3Bkb3duLW1lbnUge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC1tZCAubmF2YmFyLW5hdiAubmF2LWxpbmsge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XFxuICAgIHBhZGRpbmctbGVmdDogMC41cmVtO1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtbWQgPiAuY29udGFpbmVyLFxcbiAgLm5hdmJhci1leHBhbmQtbWQgPiAuY29udGFpbmVyLWZsdWlkIHtcXG4gICAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xcbiAgICBmbGV4LXdyYXA6IG5vd3JhcDtcXG4gIH1cXG4gIC5uYXZiYXItZXhwYW5kLW1kIC5uYXZiYXItY29sbGFwc2Uge1xcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbiAgICBmbGV4LWJhc2lzOiBhdXRvO1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtbWQgLm5hdmJhci10b2dnbGVyIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDk5MS45OHB4KSB7XFxuICAubmF2YmFyLWV4cGFuZC1sZyA+IC5jb250YWluZXIsXFxuICAubmF2YmFyLWV4cGFuZC1sZyA+IC5jb250YWluZXItZmx1aWQge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xcbiAgLm5hdmJhci1leHBhbmQtbGcge1xcbiAgICAtbXMtZmxleC1mbG93OiByb3cgbm93cmFwO1xcbiAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XFxuICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC1sZyAubmF2YmFyLW5hdiB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtbGcgLm5hdmJhci1uYXYgLmRyb3Bkb3duLW1lbnUge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC1sZyAubmF2YmFyLW5hdiAubmF2LWxpbmsge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XFxuICAgIHBhZGRpbmctbGVmdDogMC41cmVtO1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtbGcgPiAuY29udGFpbmVyLFxcbiAgLm5hdmJhci1leHBhbmQtbGcgPiAuY29udGFpbmVyLWZsdWlkIHtcXG4gICAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xcbiAgICBmbGV4LXdyYXA6IG5vd3JhcDtcXG4gIH1cXG4gIC5uYXZiYXItZXhwYW5kLWxnIC5uYXZiYXItY29sbGFwc2Uge1xcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbiAgICBmbGV4LWJhc2lzOiBhdXRvO1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQtbGcgLm5hdmJhci10b2dnbGVyIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtYXgtd2lkdGg6IDExOTkuOThweCkge1xcbiAgLm5hdmJhci1leHBhbmQteGwgPiAuY29udGFpbmVyLFxcbiAgLm5hdmJhci1leHBhbmQteGwgPiAuY29udGFpbmVyLWZsdWlkIHtcXG4gICAgcGFkZGluZy1yaWdodDogMDtcXG4gICAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XFxuICAubmF2YmFyLWV4cGFuZC14bCB7XFxuICAgIC1tcy1mbGV4LWZsb3c6IHJvdyBub3dyYXA7XFxuICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcXG4gICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcXG4gIH1cXG4gIC5uYXZiYXItZXhwYW5kLXhsIC5uYXZiYXItbmF2IHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC14bCAubmF2YmFyLW5hdiAuZHJvcGRvd24tbWVudSB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIH1cXG4gIC5uYXZiYXItZXhwYW5kLXhsIC5uYXZiYXItbmF2IC5uYXYtbGluayB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDAuNXJlbTtcXG4gICAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC14bCA+IC5jb250YWluZXIsXFxuICAubmF2YmFyLWV4cGFuZC14bCA+IC5jb250YWluZXItZmx1aWQge1xcbiAgICAtbXMtZmxleC13cmFwOiBub3dyYXA7XFxuICAgIGZsZXgtd3JhcDogbm93cmFwO1xcbiAgfVxcbiAgLm5hdmJhci1leHBhbmQteGwgLm5hdmJhci1jb2xsYXBzZSB7XFxuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94ICFpbXBvcnRhbnQ7XFxuICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcXG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XFxuICAgIGZsZXgtYmFzaXM6IGF1dG87XFxuICB9XFxuICAubmF2YmFyLWV4cGFuZC14bCAubmF2YmFyLXRvZ2dsZXIge1xcbiAgICBkaXNwbGF5OiBub25lO1xcbiAgfVxcbn1cXG5cXG4ubmF2YmFyLWV4cGFuZCB7XFxuICAtbXMtZmxleC1mbG93OiByb3cgbm93cmFwO1xcbiAgZmxleC1mbG93OiByb3cgbm93cmFwO1xcbiAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxufVxcblxcbi5uYXZiYXItZXhwYW5kID4gLmNvbnRhaW5lcixcXG4ubmF2YmFyLWV4cGFuZCA+IC5jb250YWluZXItZmx1aWQge1xcbiAgcGFkZGluZy1yaWdodDogMDtcXG4gIHBhZGRpbmctbGVmdDogMDtcXG59XFxuXFxuLm5hdmJhci1leHBhbmQgLm5hdmJhci1uYXYge1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbn1cXG5cXG4ubmF2YmFyLWV4cGFuZCAubmF2YmFyLW5hdiAuZHJvcGRvd24tbWVudSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxufVxcblxcbi5uYXZiYXItZXhwYW5kIC5uYXZiYXItbmF2IC5uYXYtbGluayB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XFxuICBwYWRkaW5nLWxlZnQ6IDAuNXJlbTtcXG59XFxuXFxuLm5hdmJhci1leHBhbmQgPiAuY29udGFpbmVyLFxcbi5uYXZiYXItZXhwYW5kID4gLmNvbnRhaW5lci1mbHVpZCB7XFxuICAtbXMtZmxleC13cmFwOiBub3dyYXA7XFxuICBmbGV4LXdyYXA6IG5vd3JhcDtcXG59XFxuXFxuLm5hdmJhci1leHBhbmQgLm5hdmJhci1jb2xsYXBzZSB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XFxuICBmbGV4LWJhc2lzOiBhdXRvO1xcbn1cXG5cXG4ubmF2YmFyLWV4cGFuZCAubmF2YmFyLXRvZ2dsZXIge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLm5hdmJhci1saWdodCAubmF2YmFyLWJyYW5kIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOSk7XFxufVxcblxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci1icmFuZDpob3ZlciwgLm5hdmJhci1saWdodCAubmF2YmFyLWJyYW5kOmZvY3VzIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOSk7XFxufVxcblxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci1uYXYgLm5hdi1saW5rIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XFxufVxcblxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci1uYXYgLm5hdi1saW5rOmhvdmVyLCAubmF2YmFyLWxpZ2h0IC5uYXZiYXItbmF2IC5uYXYtbGluazpmb2N1cyB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjcpO1xcbn1cXG5cXG4ubmF2YmFyLWxpZ2h0IC5uYXZiYXItbmF2IC5uYXYtbGluay5kaXNhYmxlZCB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjMpO1xcbn1cXG5cXG4ubmF2YmFyLWxpZ2h0IC5uYXZiYXItbmF2IC5zaG93ID4gLm5hdi1saW5rLFxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci1uYXYgLmFjdGl2ZSA+IC5uYXYtbGluayxcXG4ubmF2YmFyLWxpZ2h0IC5uYXZiYXItbmF2IC5uYXYtbGluay5zaG93LFxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci1uYXYgLm5hdi1saW5rLmFjdGl2ZSB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjkpO1xcbn1cXG5cXG4ubmF2YmFyLWxpZ2h0IC5uYXZiYXItdG9nZ2xlciB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSk7XFxufVxcblxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci10b2dnbGVyLWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSUzY3BhdGggc3Ryb2tlPSdyZ2JhKDAsIDAsIDAsIDAuNSknIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbWl0ZXJsaW1pdD0nMTAnIGQ9J000IDdoMjJNNCAxNWgyMk00IDIzaDIyJy8lM2UlM2Mvc3ZnJTNlXFxcIik7XFxufVxcblxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci10ZXh0IHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XFxufVxcblxcbi5uYXZiYXItbGlnaHQgLm5hdmJhci10ZXh0IGEge1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC45KTtcXG59XFxuXFxuLm5hdmJhci1saWdodCAubmF2YmFyLXRleHQgYTpob3ZlciwgLm5hdmJhci1saWdodCAubmF2YmFyLXRleHQgYTpmb2N1cyB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjkpO1xcbn1cXG5cXG4ubmF2YmFyLWRhcmsgLm5hdmJhci1icmFuZCB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuXFxuLm5hdmJhci1kYXJrIC5uYXZiYXItYnJhbmQ6aG92ZXIsIC5uYXZiYXItZGFyayAubmF2YmFyLWJyYW5kOmZvY3VzIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG5cXG4ubmF2YmFyLWRhcmsgLm5hdmJhci1uYXYgLm5hdi1saW5rIHtcXG4gIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XFxufVxcblxcbi5uYXZiYXItZGFyayAubmF2YmFyLW5hdiAubmF2LWxpbms6aG92ZXIsIC5uYXZiYXItZGFyayAubmF2YmFyLW5hdiAubmF2LWxpbms6Zm9jdXMge1xcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NSk7XFxufVxcblxcbi5uYXZiYXItZGFyayAubmF2YmFyLW5hdiAubmF2LWxpbmsuZGlzYWJsZWQge1xcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSk7XFxufVxcblxcbi5uYXZiYXItZGFyayAubmF2YmFyLW5hdiAuc2hvdyA+IC5uYXYtbGluayxcXG4ubmF2YmFyLWRhcmsgLm5hdmJhci1uYXYgLmFjdGl2ZSA+IC5uYXYtbGluayxcXG4ubmF2YmFyLWRhcmsgLm5hdmJhci1uYXYgLm5hdi1saW5rLnNob3csXFxuLm5hdmJhci1kYXJrIC5uYXZiYXItbmF2IC5uYXYtbGluay5hY3RpdmUge1xcbiAgY29sb3I6ICNmZmY7XFxufVxcblxcbi5uYXZiYXItZGFyayAubmF2YmFyLXRvZ2dsZXIge1xcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xcbn1cXG5cXG4ubmF2YmFyLWRhcmsgLm5hdmJhci10b2dnbGVyLWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSUzY3BhdGggc3Ryb2tlPSdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSknIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbWl0ZXJsaW1pdD0nMTAnIGQ9J000IDdoMjJNNCAxNWgyMk00IDIzaDIyJy8lM2UlM2Mvc3ZnJTNlXFxcIik7XFxufVxcblxcbi5uYXZiYXItZGFyayAubmF2YmFyLXRleHQge1xcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcXG59XFxuXFxuLm5hdmJhci1kYXJrIC5uYXZiYXItdGV4dCBhIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG5cXG4ubmF2YmFyLWRhcmsgLm5hdmJhci10ZXh0IGE6aG92ZXIsIC5uYXZiYXItZGFyayAubmF2YmFyLXRleHQgYTpmb2N1cyB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuXFxuLmNhcmQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgbWluLXdpZHRoOiAwO1xcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY2xpcDogYm9yZGVyLWJveDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xMjUpO1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLmNhcmQgPiBociB7XFxuICBtYXJnaW4tcmlnaHQ6IDA7XFxuICBtYXJnaW4tbGVmdDogMDtcXG59XFxuXFxuLmNhcmQgPiAubGlzdC1ncm91cDpmaXJzdC1jaGlsZCAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLmNhcmQgPiAubGlzdC1ncm91cDpsYXN0LWNoaWxkIC5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZCB7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxufVxcblxcbi5jYXJkLWJvZHkge1xcbiAgLW1zLWZsZXg6IDEgMSBhdXRvO1xcbiAgZmxleDogMSAxIGF1dG87XFxuICBwYWRkaW5nOiAxLjI1cmVtO1xcbn1cXG5cXG4uY2FyZC10aXRsZSB7XFxuICBtYXJnaW4tYm90dG9tOiAwLjc1cmVtO1xcbn1cXG5cXG4uY2FyZC1zdWJ0aXRsZSB7XFxuICBtYXJnaW4tdG9wOiAtMC4zNzVyZW07XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbn1cXG5cXG4uY2FyZC10ZXh0Omxhc3QtY2hpbGQge1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG59XFxuXFxuLmNhcmQtbGluazpob3ZlciB7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcblxcbi5jYXJkLWxpbmsgKyAuY2FyZC1saW5rIHtcXG4gIG1hcmdpbi1sZWZ0OiAxLjI1cmVtO1xcbn1cXG5cXG4uY2FyZC1oZWFkZXIge1xcbiAgcGFkZGluZzogMC43NXJlbSAxLjI1cmVtO1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wMyk7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEyNSk7XFxufVxcblxcbi5jYXJkLWhlYWRlcjpmaXJzdC1jaGlsZCB7XFxuICBib3JkZXItcmFkaXVzOiBjYWxjKDAuMjVyZW0gLSAxcHgpIGNhbGMoMC4yNXJlbSAtIDFweCkgMCAwO1xcbn1cXG5cXG4uY2FyZC1oZWFkZXIgKyAubGlzdC1ncm91cCAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHtcXG4gIGJvcmRlci10b3A6IDA7XFxufVxcblxcbi5jYXJkLWZvb3RlciB7XFxuICBwYWRkaW5nOiAwLjc1cmVtIDEuMjVyZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDMpO1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xMjUpO1xcbn1cXG5cXG4uY2FyZC1mb290ZXI6bGFzdC1jaGlsZCB7XFxuICBib3JkZXItcmFkaXVzOiAwIDAgY2FsYygwLjI1cmVtIC0gMXB4KSBjYWxjKDAuMjVyZW0gLSAxcHgpO1xcbn1cXG5cXG4uY2FyZC1oZWFkZXItdGFicyB7XFxuICBtYXJnaW4tcmlnaHQ6IC0wLjYyNXJlbTtcXG4gIG1hcmdpbi1ib3R0b206IC0wLjc1cmVtO1xcbiAgbWFyZ2luLWxlZnQ6IC0wLjYyNXJlbTtcXG4gIGJvcmRlci1ib3R0b206IDA7XFxufVxcblxcbi5jYXJkLWhlYWRlci1waWxscyB7XFxuICBtYXJnaW4tcmlnaHQ6IC0wLjYyNXJlbTtcXG4gIG1hcmdpbi1sZWZ0OiAtMC42MjVyZW07XFxufVxcblxcbi5jYXJkLWltZy1vdmVybGF5IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIHBhZGRpbmc6IDEuMjVyZW07XFxufVxcblxcbi5jYXJkLWltZyB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGJvcmRlci1yYWRpdXM6IGNhbGMoMC4yNXJlbSAtIDFweCk7XFxufVxcblxcbi5jYXJkLWltZy10b3Age1xcbiAgd2lkdGg6IDEwMCU7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBjYWxjKDAuMjVyZW0gLSAxcHgpO1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IGNhbGMoMC4yNXJlbSAtIDFweCk7XFxufVxcblxcbi5jYXJkLWltZy1ib3R0b20ge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogY2FsYygwLjI1cmVtIC0gMXB4KTtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IGNhbGMoMC4yNXJlbSAtIDFweCk7XFxufVxcblxcbi5jYXJkLWRlY2sge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbn1cXG5cXG4uY2FyZC1kZWNrIC5jYXJkIHtcXG4gIG1hcmdpbi1ib3R0b206IDE1cHg7XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLmNhcmQtZGVjayB7XFxuICAgIC1tcy1mbGV4LWZsb3c6IHJvdyB3cmFwO1xcbiAgICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0xNXB4O1xcbiAgICBtYXJnaW4tbGVmdDogLTE1cHg7XFxuICB9XFxuICAuY2FyZC1kZWNrIC5jYXJkIHtcXG4gICAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIC1tcy1mbGV4OiAxIDAgMCU7XFxuICAgIGZsZXg6IDEgMCAwJTtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIG1hcmdpbi1yaWdodDogMTVweDtcXG4gICAgbWFyZ2luLWJvdHRvbTogMDtcXG4gICAgbWFyZ2luLWxlZnQ6IDE1cHg7XFxuICB9XFxufVxcblxcbi5jYXJkLWdyb3VwIHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG59XFxuXFxuLmNhcmQtZ3JvdXAgPiAuY2FyZCB7XFxuICBtYXJnaW4tYm90dG9tOiAxNXB4O1xcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIHtcXG4gIC5jYXJkLWdyb3VwIHtcXG4gICAgLW1zLWZsZXgtZmxvdzogcm93IHdyYXA7XFxuICAgIGZsZXgtZmxvdzogcm93IHdyYXA7XFxuICB9XFxuICAuY2FyZC1ncm91cCA+IC5jYXJkIHtcXG4gICAgLW1zLWZsZXg6IDEgMCAwJTtcXG4gICAgZmxleDogMSAwIDAlO1xcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgfVxcbiAgLmNhcmQtZ3JvdXAgPiAuY2FyZCArIC5jYXJkIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDA7XFxuICAgIGJvcmRlci1sZWZ0OiAwO1xcbiAgfVxcbiAgLmNhcmQtZ3JvdXAgPiAuY2FyZDpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XFxuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xcbiAgfVxcbiAgLmNhcmQtZ3JvdXAgPiAuY2FyZDpub3QoOmxhc3QtY2hpbGQpIC5jYXJkLWltZy10b3AsXFxuICAuY2FyZC1ncm91cCA+IC5jYXJkOm5vdCg6bGFzdC1jaGlsZCkgLmNhcmQtaGVhZGVyIHtcXG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XFxuICB9XFxuICAuY2FyZC1ncm91cCA+IC5jYXJkOm5vdCg6bGFzdC1jaGlsZCkgLmNhcmQtaW1nLWJvdHRvbSxcXG4gIC5jYXJkLWdyb3VwID4gLmNhcmQ6bm90KDpsYXN0LWNoaWxkKSAuY2FyZC1mb290ZXIge1xcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcXG4gIH1cXG4gIC5jYXJkLWdyb3VwID4gLmNhcmQ6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xcbiAgfVxcbiAgLmNhcmQtZ3JvdXAgPiAuY2FyZDpub3QoOmZpcnN0LWNoaWxkKSAuY2FyZC1pbWctdG9wLFxcbiAgLmNhcmQtZ3JvdXAgPiAuY2FyZDpub3QoOmZpcnN0LWNoaWxkKSAuY2FyZC1oZWFkZXIge1xcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xcbiAgfVxcbiAgLmNhcmQtZ3JvdXAgPiAuY2FyZDpub3QoOmZpcnN0LWNoaWxkKSAuY2FyZC1pbWctYm90dG9tLFxcbiAgLmNhcmQtZ3JvdXAgPiAuY2FyZDpub3QoOmZpcnN0LWNoaWxkKSAuY2FyZC1mb290ZXIge1xcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xcbiAgfVxcbn1cXG5cXG4uY2FyZC1jb2x1bW5zIC5jYXJkIHtcXG4gIG1hcmdpbi1ib3R0b206IDAuNzVyZW07XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLmNhcmQtY29sdW1ucyB7XFxuICAgIC13ZWJraXQtY29sdW1uLWNvdW50OiAzO1xcbiAgICAtbW96LWNvbHVtbi1jb3VudDogMztcXG4gICAgY29sdW1uLWNvdW50OiAzO1xcbiAgICAtd2Via2l0LWNvbHVtbi1nYXA6IDEuMjVyZW07XFxuICAgIC1tb3otY29sdW1uLWdhcDogMS4yNXJlbTtcXG4gICAgY29sdW1uLWdhcDogMS4yNXJlbTtcXG4gICAgb3JwaGFuczogMTtcXG4gICAgd2lkb3dzOiAxO1xcbiAgfVxcbiAgLmNhcmQtY29sdW1ucyAuY2FyZCB7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgd2lkdGg6IDEwMCU7XFxuICB9XFxufVxcblxcbi5hY2NvcmRpb24gPiAuY2FyZCB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG5cXG4uYWNjb3JkaW9uID4gLmNhcmQ6bm90KDpmaXJzdC1vZi10eXBlKSAuY2FyZC1oZWFkZXI6Zmlyc3QtY2hpbGQge1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG59XFxuXFxuLmFjY29yZGlvbiA+IC5jYXJkOm5vdCg6Zmlyc3Qtb2YtdHlwZSk6bm90KDpsYXN0LW9mLXR5cGUpIHtcXG4gIGJvcmRlci1ib3R0b206IDA7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbn1cXG5cXG4uYWNjb3JkaW9uID4gLmNhcmQ6Zmlyc3Qtb2YtdHlwZSB7XFxuICBib3JkZXItYm90dG9tOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xcbn1cXG5cXG4uYWNjb3JkaW9uID4gLmNhcmQ6bGFzdC1vZi10eXBlIHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG59XFxuXFxuLmFjY29yZGlvbiA+IC5jYXJkIC5jYXJkLWhlYWRlciB7XFxuICBtYXJnaW4tYm90dG9tOiAtMXB4O1xcbn1cXG5cXG4uYnJlYWRjcnVtYiB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgcGFkZGluZzogMC43NXJlbSAxcmVtO1xcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLmJyZWFkY3J1bWItaXRlbSArIC5icmVhZGNydW1iLWl0ZW0ge1xcbiAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XFxufVxcblxcbi5icmVhZGNydW1iLWl0ZW0gKyAuYnJlYWRjcnVtYi1pdGVtOjpiZWZvcmUge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgcGFkZGluZy1yaWdodDogMC41cmVtO1xcbiAgY29sb3I6ICM2Yzc1N2Q7XFxuICBjb250ZW50OiBcXFwiL1xcXCI7XFxufVxcblxcbi5icmVhZGNydW1iLWl0ZW0gKyAuYnJlYWRjcnVtYi1pdGVtOmhvdmVyOjpiZWZvcmUge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxufVxcblxcbi5icmVhZGNydW1iLWl0ZW0gKyAuYnJlYWRjcnVtYi1pdGVtOmhvdmVyOjpiZWZvcmUge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbn1cXG5cXG4uYnJlYWRjcnVtYi1pdGVtLmFjdGl2ZSB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG59XFxuXFxuLnBhZ2luYXRpb24ge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgbGlzdC1zdHlsZTogbm9uZTtcXG4gIGJvcmRlci1yYWRpdXM6IDAuMjVyZW07XFxufVxcblxcbi5wYWdlLWxpbmsge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwYWRkaW5nOiAwLjVyZW0gMC43NXJlbTtcXG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xcbiAgbGluZS1oZWlnaHQ6IDEuMjU7XFxuICBjb2xvcjogIzAwN2JmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZGVlMmU2O1xcbn1cXG5cXG4ucGFnZS1saW5rOmhvdmVyIHtcXG4gIHotaW5kZXg6IDI7XFxuICBjb2xvcjogIzAwNTZiMztcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlOWVjZWY7XFxuICBib3JkZXItY29sb3I6ICNkZWUyZTY7XFxufVxcblxcbi5wYWdlLWxpbms6Zm9jdXMge1xcbiAgei1pbmRleDogMjtcXG4gIG91dGxpbmU6IDA7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgwLCAxMjMsIDI1NSwgMC4yNSk7XFxufVxcblxcbi5wYWdlLWl0ZW06Zmlyc3QtY2hpbGQgLnBhZ2UtbGluayB7XFxuICBtYXJnaW4tbGVmdDogMDtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4ucGFnZS1pdGVtOmxhc3QtY2hpbGQgLnBhZ2UtbGluayB7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4ucGFnZS1pdGVtLmFjdGl2ZSAucGFnZS1saW5rIHtcXG4gIHotaW5kZXg6IDE7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDdiZmY7XFxuICBib3JkZXItY29sb3I6ICMwMDdiZmY7XFxufVxcblxcbi5wYWdlLWl0ZW0uZGlzYWJsZWQgLnBhZ2UtbGluayB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgY3Vyc29yOiBhdXRvO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJvcmRlci1jb2xvcjogI2RlZTJlNjtcXG59XFxuXFxuLnBhZ2luYXRpb24tbGcgLnBhZ2UtbGluayB7XFxuICBwYWRkaW5nOiAwLjc1cmVtIDEuNXJlbTtcXG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxufVxcblxcbi5wYWdpbmF0aW9uLWxnIC5wYWdlLWl0ZW06Zmlyc3QtY2hpbGQgLnBhZ2UtbGluayB7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwLjNyZW07XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwLjNyZW07XFxufVxcblxcbi5wYWdpbmF0aW9uLWxnIC5wYWdlLWl0ZW06bGFzdC1jaGlsZCAucGFnZS1saW5rIHtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjNyZW07XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4zcmVtO1xcbn1cXG5cXG4ucGFnaW5hdGlvbi1zbSAucGFnZS1saW5rIHtcXG4gIHBhZGRpbmc6IDAuMjVyZW0gMC41cmVtO1xcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxufVxcblxcbi5wYWdpbmF0aW9uLXNtIC5wYWdlLWl0ZW06Zmlyc3QtY2hpbGQgLnBhZ2UtbGluayB7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwLjJyZW07XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwLjJyZW07XFxufVxcblxcbi5wYWdpbmF0aW9uLXNtIC5wYWdlLWl0ZW06bGFzdC1jaGlsZCAucGFnZS1saW5rIHtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjJyZW07XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4ycmVtO1xcbn1cXG5cXG4uYmFkZ2Uge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgcGFkZGluZzogMC4yNWVtIDAuNGVtO1xcbiAgZm9udC1zaXplOiA3NSU7XFxuICBmb250LXdlaWdodDogNzAwO1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG4gIHRyYW5zaXRpb246IGNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsIGJveC1zaGFkb3cgMC4xNXMgZWFzZS1pbi1vdXQ7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAuYmFkZ2Uge1xcbiAgICB0cmFuc2l0aW9uOiBub25lO1xcbiAgfVxcbn1cXG5cXG5hLmJhZGdlOmhvdmVyLCBhLmJhZGdlOmZvY3VzIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuXFxuLmJhZGdlOmVtcHR5IHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi5idG4gLmJhZGdlIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHRvcDogLTFweDtcXG59XFxuXFxuLmJhZGdlLXBpbGwge1xcbiAgcGFkZGluZy1yaWdodDogMC42ZW07XFxuICBwYWRkaW5nLWxlZnQ6IDAuNmVtO1xcbiAgYm9yZGVyLXJhZGl1czogMTByZW07XFxufVxcblxcbi5iYWRnZS1wcmltYXJ5IHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjtcXG59XFxuXFxuYS5iYWRnZS1wcmltYXJ5OmhvdmVyLCBhLmJhZGdlLXByaW1hcnk6Zm9jdXMge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA2MmNjO1xcbn1cXG5cXG5hLmJhZGdlLXByaW1hcnk6Zm9jdXMsIGEuYmFkZ2UtcHJpbWFyeS5mb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMCwgMTIzLCAyNTUsIDAuNSk7XFxufVxcblxcbi5iYWRnZS1zZWNvbmRhcnkge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM3NTdkO1xcbn1cXG5cXG5hLmJhZGdlLXNlY29uZGFyeTpob3ZlciwgYS5iYWRnZS1zZWNvbmRhcnk6Zm9jdXMge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTQ1YjYyO1xcbn1cXG5cXG5hLmJhZGdlLXNlY29uZGFyeTpmb2N1cywgYS5iYWRnZS1zZWNvbmRhcnkuZm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDEwOCwgMTE3LCAxMjUsIDAuNSk7XFxufVxcblxcbi5iYWRnZS1zdWNjZXNzIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI4YTc0NTtcXG59XFxuXFxuYS5iYWRnZS1zdWNjZXNzOmhvdmVyLCBhLmJhZGdlLXN1Y2Nlc3M6Zm9jdXMge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWU3ZTM0O1xcbn1cXG5cXG5hLmJhZGdlLXN1Y2Nlc3M6Zm9jdXMsIGEuYmFkZ2Utc3VjY2Vzcy5mb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNDAsIDE2NywgNjksIDAuNSk7XFxufVxcblxcbi5iYWRnZS1pbmZvIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE3YTJiODtcXG59XFxuXFxuYS5iYWRnZS1pbmZvOmhvdmVyLCBhLmJhZGdlLWluZm86Zm9jdXMge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTE3YThiO1xcbn1cXG5cXG5hLmJhZGdlLWluZm86Zm9jdXMsIGEuYmFkZ2UtaW5mby5mb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMjMsIDE2MiwgMTg0LCAwLjUpO1xcbn1cXG5cXG4uYmFkZ2Utd2FybmluZyB7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmMxMDc7XFxufVxcblxcbmEuYmFkZ2Utd2FybmluZzpob3ZlciwgYS5iYWRnZS13YXJuaW5nOmZvY3VzIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QzOWUwMDtcXG59XFxuXFxuYS5iYWRnZS13YXJuaW5nOmZvY3VzLCBhLmJhZGdlLXdhcm5pbmcuZm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDI1NSwgMTkzLCA3LCAwLjUpO1xcbn1cXG5cXG4uYmFkZ2UtZGFuZ2VyIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RjMzU0NTtcXG59XFxuXFxuYS5iYWRnZS1kYW5nZXI6aG92ZXIsIGEuYmFkZ2UtZGFuZ2VyOmZvY3VzIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2JkMjEzMDtcXG59XFxuXFxuYS5iYWRnZS1kYW5nZXI6Zm9jdXMsIGEuYmFkZ2UtZGFuZ2VyLmZvY3VzIHtcXG4gIG91dGxpbmU6IDA7XFxuICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgyMjAsIDUzLCA2OSwgMC41KTtcXG59XFxuXFxuLmJhZGdlLWxpZ2h0IHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcXG59XFxuXFxuYS5iYWRnZS1saWdodDpob3ZlciwgYS5iYWRnZS1saWdodDpmb2N1cyB7XFxuICBjb2xvcjogIzIxMjUyOTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkYWUwZTU7XFxufVxcblxcbmEuYmFkZ2UtbGlnaHQ6Zm9jdXMsIGEuYmFkZ2UtbGlnaHQuZm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDI0OCwgMjQ5LCAyNTAsIDAuNSk7XFxufVxcblxcbi5iYWRnZS1kYXJrIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM0M2E0MDtcXG59XFxuXFxuYS5iYWRnZS1kYXJrOmhvdmVyLCBhLmJhZGdlLWRhcms6Zm9jdXMge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWQyMTI0O1xcbn1cXG5cXG5hLmJhZGdlLWRhcms6Zm9jdXMsIGEuYmFkZ2UtZGFyay5mb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoNTIsIDU4LCA2NCwgMC41KTtcXG59XFxuXFxuLmp1bWJvdHJvbiB7XFxuICBwYWRkaW5nOiAycmVtIDFyZW07XFxuICBtYXJnaW4tYm90dG9tOiAycmVtO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U5ZWNlZjtcXG4gIGJvcmRlci1yYWRpdXM6IDAuM3JlbTtcXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDU3NnB4KSB7XFxuICAuanVtYm90cm9uIHtcXG4gICAgcGFkZGluZzogNHJlbSAycmVtO1xcbiAgfVxcbn1cXG5cXG4uanVtYm90cm9uLWZsdWlkIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDA7XFxuICBwYWRkaW5nLWxlZnQ6IDA7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbn1cXG5cXG4uYWxlcnQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgcGFkZGluZzogMC43NXJlbSAxLjI1cmVtO1xcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLmFsZXJ0LWhlYWRpbmcge1xcbiAgY29sb3I6IGluaGVyaXQ7XFxufVxcblxcbi5hbGVydC1saW5rIHtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxufVxcblxcbi5hbGVydC1kaXNtaXNzaWJsZSB7XFxuICBwYWRkaW5nLXJpZ2h0OiA0cmVtO1xcbn1cXG5cXG4uYWxlcnQtZGlzbWlzc2libGUgLmNsb3NlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgcGFkZGluZzogMC43NXJlbSAxLjI1cmVtO1xcbiAgY29sb3I6IGluaGVyaXQ7XFxufVxcblxcbi5hbGVydC1wcmltYXJ5IHtcXG4gIGNvbG9yOiAjMDA0MDg1O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NjZTVmZjtcXG4gIGJvcmRlci1jb2xvcjogI2I4ZGFmZjtcXG59XFxuXFxuLmFsZXJ0LXByaW1hcnkgaHIge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogIzlmY2RmZjtcXG59XFxuXFxuLmFsZXJ0LXByaW1hcnkgLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICMwMDI3NTI7XFxufVxcblxcbi5hbGVydC1zZWNvbmRhcnkge1xcbiAgY29sb3I6ICMzODNkNDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTJlM2U1O1xcbiAgYm9yZGVyLWNvbG9yOiAjZDZkOGRiO1xcbn1cXG5cXG4uYWxlcnQtc2Vjb25kYXJ5IGhyIHtcXG4gIGJvcmRlci10b3AtY29sb3I6ICNjOGNiY2Y7XFxufVxcblxcbi5hbGVydC1zZWNvbmRhcnkgLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICMyMDIzMjY7XFxufVxcblxcbi5hbGVydC1zdWNjZXNzIHtcXG4gIGNvbG9yOiAjMTU1NzI0O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q0ZWRkYTtcXG4gIGJvcmRlci1jb2xvcjogI2MzZTZjYjtcXG59XFxuXFxuLmFsZXJ0LXN1Y2Nlc3MgaHIge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2IxZGZiYjtcXG59XFxuXFxuLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICMwYjJlMTM7XFxufVxcblxcbi5hbGVydC1pbmZvIHtcXG4gIGNvbG9yOiAjMGM1NDYwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QxZWNmMTtcXG4gIGJvcmRlci1jb2xvcjogI2JlZTVlYjtcXG59XFxuXFxuLmFsZXJ0LWluZm8gaHIge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2FiZGRlNTtcXG59XFxuXFxuLmFsZXJ0LWluZm8gLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICMwNjJjMzM7XFxufVxcblxcbi5hbGVydC13YXJuaW5nIHtcXG4gIGNvbG9yOiAjODU2NDA0O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjNjZDtcXG4gIGJvcmRlci1jb2xvcjogI2ZmZWViYTtcXG59XFxuXFxuLmFsZXJ0LXdhcm5pbmcgaHIge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2ZmZThhMTtcXG59XFxuXFxuLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICM1MzNmMDM7XFxufVxcblxcbi5hbGVydC1kYW5nZXIge1xcbiAgY29sb3I6ICM3MjFjMjQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhkN2RhO1xcbiAgYm9yZGVyLWNvbG9yOiAjZjVjNmNiO1xcbn1cXG5cXG4uYWxlcnQtZGFuZ2VyIGhyIHtcXG4gIGJvcmRlci10b3AtY29sb3I6ICNmMWIwYjc7XFxufVxcblxcbi5hbGVydC1kYW5nZXIgLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICM0OTEyMTc7XFxufVxcblxcbi5hbGVydC1saWdodCB7XFxuICBjb2xvcjogIzgxODE4MjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZWZlZmU7XFxuICBib3JkZXItY29sb3I6ICNmZGZkZmU7XFxufVxcblxcbi5hbGVydC1saWdodCBociB7XFxuICBib3JkZXItdG9wLWNvbG9yOiAjZWNlY2Y2O1xcbn1cXG5cXG4uYWxlcnQtbGlnaHQgLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICM2ODY4Njg7XFxufVxcblxcbi5hbGVydC1kYXJrIHtcXG4gIGNvbG9yOiAjMWIxZTIxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q2ZDhkOTtcXG4gIGJvcmRlci1jb2xvcjogI2M2YzhjYTtcXG59XFxuXFxuLmFsZXJ0LWRhcmsgaHIge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2I5YmJiZTtcXG59XFxuXFxuLmFsZXJ0LWRhcmsgLmFsZXJ0LWxpbmsge1xcbiAgY29sb3I6ICMwNDA1MDU7XFxufVxcblxcbkAtd2Via2l0LWtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlcyB7XFxuICBmcm9tIHtcXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMXJlbSAwO1xcbiAgfVxcbiAgdG8ge1xcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7XFxuICB9XFxufVxcblxcbkBrZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXMge1xcbiAgZnJvbSB7XFxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDFyZW0gMDtcXG4gIH1cXG4gIHRvIHtcXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwO1xcbiAgfVxcbn1cXG5cXG4ucHJvZ3Jlc3Mge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgaGVpZ2h0OiAxcmVtO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGZvbnQtc2l6ZTogMC43NXJlbTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlOWVjZWY7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4ucHJvZ3Jlc3MtYmFyIHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgY29sb3I6ICNmZmY7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjtcXG4gIHRyYW5zaXRpb246IHdpZHRoIDAuNnMgZWFzZTtcXG59XFxuXFxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcXG4gIC5wcm9ncmVzcy1iYXIge1xcbiAgICB0cmFuc2l0aW9uOiBub25lO1xcbiAgfVxcbn1cXG5cXG4ucHJvZ3Jlc3MtYmFyLXN0cmlwZWQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XFxuICBiYWNrZ3JvdW5kLXNpemU6IDFyZW0gMXJlbTtcXG59XFxuXFxuLnByb2dyZXNzLWJhci1hbmltYXRlZCB7XFxuICAtd2Via2l0LWFuaW1hdGlvbjogcHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMXMgbGluZWFyIGluZmluaXRlO1xcbiAgYW5pbWF0aW9uOiBwcm9ncmVzcy1iYXItc3RyaXBlcyAxcyBsaW5lYXIgaW5maW5pdGU7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAucHJvZ3Jlc3MtYmFyLWFuaW1hdGVkIHtcXG4gICAgLXdlYmtpdC1hbmltYXRpb246IG5vbmU7XFxuICAgIGFuaW1hdGlvbjogbm9uZTtcXG4gIH1cXG59XFxuXFxuLm1lZGlhIHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWFsaWduOiBzdGFydDtcXG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbn1cXG5cXG4ubWVkaWEtYm9keSB7XFxuICAtbXMtZmxleDogMTtcXG4gIGZsZXg6IDE7XFxufVxcblxcbi5saXN0LWdyb3VwIHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIHBhZGRpbmctbGVmdDogMDtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgY29sb3I6ICM0OTUwNTc7XFxuICB0ZXh0LWFsaWduOiBpbmhlcml0O1xcbn1cXG5cXG4ubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpob3ZlciwgLmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb246Zm9jdXMge1xcbiAgei1pbmRleDogMTtcXG4gIGNvbG9yOiAjNDk1MDU3O1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb246YWN0aXZlIHtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U5ZWNlZjtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaXRlbSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHBhZGRpbmc6IDAuNzVyZW0gMS4yNXJlbTtcXG4gIG1hcmdpbi1ib3R0b206IC0xcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEyNSk7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMC4yNXJlbTtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjI1cmVtO1xcbn1cXG5cXG4ubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGQge1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwLjI1cmVtO1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZCwgLmxpc3QtZ3JvdXAtaXRlbTpkaXNhYmxlZCB7XFxuICBjb2xvcjogIzZjNzU3ZDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUge1xcbiAgei1pbmRleDogMjtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjtcXG4gIGJvcmRlci1jb2xvcjogIzAwN2JmZjtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbCB7XFxuICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxufVxcblxcbi5saXN0LWdyb3VwLWhvcml6b250YWwgLmxpc3QtZ3JvdXAtaXRlbSB7XFxuICBtYXJnaW4tcmlnaHQ6IC0xcHg7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbn1cXG5cXG4ubGlzdC1ncm91cC1ob3Jpem9udGFsIC5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMC4yNXJlbTtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbCAubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGQge1xcbiAgbWFyZ2luLXJpZ2h0OiAwO1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDAuMjVyZW07XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1zbSB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgfVxcbiAgLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1zbSAubGlzdC1ncm91cC1pdGVtIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtMXB4O1xcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgfVxcbiAgLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1zbSAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHtcXG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMC4yNXJlbTtcXG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMC4yNXJlbTtcXG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XFxuICB9XFxuICAubGlzdC1ncm91cC1ob3Jpem9udGFsLXNtIC5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZCB7XFxuICAgIG1hcmdpbi1yaWdodDogMDtcXG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDAuMjVyZW07XFxuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwLjI1cmVtO1xcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gIC5saXN0LWdyb3VwLWhvcml6b250YWwtbWQge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIH1cXG4gIC5saXN0LWdyb3VwLWhvcml6b250YWwtbWQgLmxpc3QtZ3JvdXAtaXRlbSB7XFxuICAgIG1hcmdpbi1yaWdodDogLTFweDtcXG4gICAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIH1cXG4gIC5saXN0LWdyb3VwLWhvcml6b250YWwtbWQgLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZCB7XFxuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xcbiAgfVxcbiAgLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1tZCAubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGQge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XFxuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjI1cmVtO1xcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XFxuICAubGlzdC1ncm91cC1ob3Jpem9udGFsLWxnIHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICB9XFxuICAubGlzdC1ncm91cC1ob3Jpem9udGFsLWxnIC5saXN0LWdyb3VwLWl0ZW0ge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0xcHg7XFxuICAgIG1hcmdpbi1ib3R0b206IDA7XFxuICB9XFxuICAubGlzdC1ncm91cC1ob3Jpem9udGFsLWxnIC5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwLjI1cmVtO1xcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwLjI1cmVtO1xcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcXG4gIH1cXG4gIC5saXN0LWdyb3VwLWhvcml6b250YWwtbGcgLmxpc3QtZ3JvdXAtaXRlbTpsYXN0LWNoaWxkIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG4gICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDAuMjVyZW07XFxuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC5saXN0LWdyb3VwLWhvcml6b250YWwteGwge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIH1cXG4gIC5saXN0LWdyb3VwLWhvcml6b250YWwteGwgLmxpc3QtZ3JvdXAtaXRlbSB7XFxuICAgIG1hcmdpbi1yaWdodDogLTFweDtcXG4gICAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIH1cXG4gIC5saXN0LWdyb3VwLWhvcml6b250YWwteGwgLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZCB7XFxuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAuMjVyZW07XFxuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xcbiAgfVxcbiAgLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC14bCAubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGQge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XFxuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjI1cmVtO1xcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcXG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcXG4gIH1cXG59XFxuXFxuLmxpc3QtZ3JvdXAtZmx1c2ggLmxpc3QtZ3JvdXAtaXRlbSB7XFxuICBib3JkZXItcmlnaHQ6IDA7XFxuICBib3JkZXItbGVmdDogMDtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxufVxcblxcbi5saXN0LWdyb3VwLWZsdXNoIC5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZCB7XFxuICBtYXJnaW4tYm90dG9tOiAtMXB4O1xcbn1cXG5cXG4ubGlzdC1ncm91cC1mbHVzaDpmaXJzdC1jaGlsZCAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHtcXG4gIGJvcmRlci10b3A6IDA7XFxufVxcblxcbi5saXN0LWdyb3VwLWZsdXNoOmxhc3QtY2hpbGQgLmxpc3QtZ3JvdXAtaXRlbTpsYXN0LWNoaWxkIHtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxuICBib3JkZXItYm90dG9tOiAwO1xcbn1cXG5cXG4ubGlzdC1ncm91cC1pdGVtLXByaW1hcnkge1xcbiAgY29sb3I6ICMwMDQwODU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjhkYWZmO1xcbn1cXG5cXG4ubGlzdC1ncm91cC1pdGVtLXByaW1hcnkubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpob3ZlciwgLmxpc3QtZ3JvdXAtaXRlbS1wcmltYXJ5Lmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb246Zm9jdXMge1xcbiAgY29sb3I6ICMwMDQwODU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWZjZGZmO1xcbn1cXG5cXG4ubGlzdC1ncm91cC1pdGVtLXByaW1hcnkubGlzdC1ncm91cC1pdGVtLWFjdGlvbi5hY3RpdmUge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA0MDg1O1xcbiAgYm9yZGVyLWNvbG9yOiAjMDA0MDg1O1xcbn1cXG5cXG4ubGlzdC1ncm91cC1pdGVtLXNlY29uZGFyeSB7XFxuICBjb2xvcjogIzM4M2Q0MTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkNmQ4ZGI7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tc2Vjb25kYXJ5Lmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb246aG92ZXIsIC5saXN0LWdyb3VwLWl0ZW0tc2Vjb25kYXJ5Lmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb246Zm9jdXMge1xcbiAgY29sb3I6ICMzODNkNDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzhjYmNmO1xcbn1cXG5cXG4ubGlzdC1ncm91cC1pdGVtLXNlY29uZGFyeS5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uLmFjdGl2ZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzODNkNDE7XFxuICBib3JkZXItY29sb3I6ICMzODNkNDE7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2VzcyB7XFxuICBjb2xvcjogIzE1NTcyNDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjM2U2Y2I7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmhvdmVyLCAubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpmb2N1cyB7XFxuICBjb2xvcjogIzE1NTcyNDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiMWRmYmI7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uLmFjdGl2ZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxNTU3MjQ7XFxuICBib3JkZXItY29sb3I6ICMxNTU3MjQ7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0taW5mbyB7XFxuICBjb2xvcjogIzBjNTQ2MDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiZWU1ZWI7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0taW5mby5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmhvdmVyLCAubGlzdC1ncm91cC1pdGVtLWluZm8ubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpmb2N1cyB7XFxuICBjb2xvcjogIzBjNTQ2MDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNhYmRkZTU7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0taW5mby5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uLmFjdGl2ZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwYzU0NjA7XFxuICBib3JkZXItY29sb3I6ICMwYzU0NjA7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZyB7XFxuICBjb2xvcjogIzg1NjQwNDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmVlYmE7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZy5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmhvdmVyLCAubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpmb2N1cyB7XFxuICBjb2xvcjogIzg1NjQwNDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmU4YTE7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZy5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uLmFjdGl2ZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4NTY0MDQ7XFxuICBib3JkZXItY29sb3I6ICM4NTY0MDQ7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyIHtcXG4gIGNvbG9yOiAjNzIxYzI0O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1YzZjYjtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpob3ZlciwgLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpmb2N1cyB7XFxuICBjb2xvcjogIzcyMWMyNDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmMWIwYjc7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyLmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb24uYWN0aXZlIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzcyMWMyNDtcXG4gIGJvcmRlci1jb2xvcjogIzcyMWMyNDtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaXRlbS1saWdodCB7XFxuICBjb2xvcjogIzgxODE4MjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZGZkZmU7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tbGlnaHQubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpob3ZlciwgLmxpc3QtZ3JvdXAtaXRlbS1saWdodC5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmZvY3VzIHtcXG4gIGNvbG9yOiAjODE4MTgyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNmNjtcXG59XFxuXFxuLmxpc3QtZ3JvdXAtaXRlbS1saWdodC5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uLmFjdGl2ZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4MTgxODI7XFxuICBib3JkZXItY29sb3I6ICM4MTgxODI7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tZGFyayB7XFxuICBjb2xvcjogIzFiMWUyMTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjNmM4Y2E7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tZGFyay5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmhvdmVyLCAubGlzdC1ncm91cC1pdGVtLWRhcmsubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpmb2N1cyB7XFxuICBjb2xvcjogIzFiMWUyMTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNiOWJiYmU7XFxufVxcblxcbi5saXN0LWdyb3VwLWl0ZW0tZGFyay5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uLmFjdGl2ZSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxYjFlMjE7XFxuICBib3JkZXItY29sb3I6ICMxYjFlMjE7XFxufVxcblxcbi5jbG9zZSB7XFxuICBmbG9hdDogcmlnaHQ7XFxuICBmb250LXNpemU6IDEuNXJlbTtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxuICBsaW5lLWhlaWdodDogMTtcXG4gIGNvbG9yOiAjMDAwO1xcbiAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI2ZmZjtcXG4gIG9wYWNpdHk6IC41O1xcbn1cXG5cXG4uY2xvc2U6aG92ZXIge1xcbiAgY29sb3I6ICMwMDA7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcblxcbi5jbG9zZTpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKTpob3ZlciwgLmNsb3NlOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpOmZvY3VzIHtcXG4gIG9wYWNpdHk6IC43NTtcXG59XFxuXFxuYnV0dG9uLmNsb3NlIHtcXG4gIHBhZGRpbmc6IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogMDtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG4gIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcXG4gIGFwcGVhcmFuY2U6IG5vbmU7XFxufVxcblxcbmEuY2xvc2UuZGlzYWJsZWQge1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi50b2FzdCB7XFxuICBtYXgtd2lkdGg6IDM1MHB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODUpO1xcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xKTtcXG4gIGJveC1zaGFkb3c6IDAgMC4yNXJlbSAwLjc1cmVtIHJnYmEoMCwgMCwgMCwgMC4xKTtcXG4gIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpO1xcbiAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpO1xcbiAgb3BhY2l0eTogMDtcXG4gIGJvcmRlci1yYWRpdXM6IDAuMjVyZW07XFxufVxcblxcbi50b2FzdDpub3QoOmxhc3QtY2hpbGQpIHtcXG4gIG1hcmdpbi1ib3R0b206IDAuNzVyZW07XFxufVxcblxcbi50b2FzdC5zaG93aW5nIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi50b2FzdC5zaG93IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLnRvYXN0LmhpZGUge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLnRvYXN0LWhlYWRlciB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIHBhZGRpbmc6IDAuMjVyZW0gMC43NXJlbTtcXG4gIGNvbG9yOiAjNmM3NTdkO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg1KTtcXG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjA1KTtcXG59XFxuXFxuLnRvYXN0LWJvZHkge1xcbiAgcGFkZGluZzogMC43NXJlbTtcXG59XFxuXFxuLm1vZGFsLW9wZW4ge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuXFxuLm1vZGFsLW9wZW4gLm1vZGFsIHtcXG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxufVxcblxcbi5tb2RhbCB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgei1pbmRleDogMTA1MDtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBvdXRsaW5lOiAwO1xcbn1cXG5cXG4ubW9kYWwtZGlhbG9nIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHdpZHRoOiBhdXRvO1xcbiAgbWFyZ2luOiAwLjVyZW07XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuLm1vZGFsLmZhZGUgLm1vZGFsLWRpYWxvZyB7XFxuICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjNzIGVhc2Utb3V0O1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgZWFzZS1vdXQ7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcyBlYXNlLW91dCwgLXdlYmtpdC10cmFuc2Zvcm0gMC4zcyBlYXNlLW91dDtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTUwcHgpO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTUwcHgpO1xcbn1cXG5cXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xcbiAgLm1vZGFsLmZhZGUgLm1vZGFsLWRpYWxvZyB7XFxuICAgIHRyYW5zaXRpb246IG5vbmU7XFxuICB9XFxufVxcblxcbi5tb2RhbC5zaG93IC5tb2RhbC1kaWFsb2cge1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IG5vbmU7XFxuICB0cmFuc2Zvcm06IG5vbmU7XFxufVxcblxcbi5tb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZSB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBtYXgtaGVpZ2h0OiBjYWxjKDEwMCUgLSAxcmVtKTtcXG59XFxuXFxuLm1vZGFsLWRpYWxvZy1zY3JvbGxhYmxlIC5tb2RhbC1jb250ZW50IHtcXG4gIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAxcmVtKTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5tb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZSAubW9kYWwtaGVhZGVyLFxcbi5tb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZSAubW9kYWwtZm9vdGVyIHtcXG4gIC1tcy1mbGV4LW5lZ2F0aXZlOiAwO1xcbiAgZmxleC1zaHJpbms6IDA7XFxufVxcblxcbi5tb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZSAubW9kYWwtYm9keSB7XFxuICBvdmVyZmxvdy15OiBhdXRvO1xcbn1cXG5cXG4ubW9kYWwtZGlhbG9nLWNlbnRlcmVkIHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgbWluLWhlaWdodDogY2FsYygxMDAlIC0gMXJlbSk7XFxufVxcblxcbi5tb2RhbC1kaWFsb2ctY2VudGVyZWQ6OmJlZm9yZSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGhlaWdodDogY2FsYygxMDB2aCAtIDFyZW0pO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxufVxcblxcbi5tb2RhbC1kaWFsb2ctY2VudGVyZWQubW9kYWwtZGlhbG9nLXNjcm9sbGFibGUge1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcblxcbi5tb2RhbC1kaWFsb2ctY2VudGVyZWQubW9kYWwtZGlhbG9nLXNjcm9sbGFibGUgLm1vZGFsLWNvbnRlbnQge1xcbiAgbWF4LWhlaWdodDogbm9uZTtcXG59XFxuXFxuLm1vZGFsLWRpYWxvZy1jZW50ZXJlZC5tb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZTo6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IG5vbmU7XFxufVxcblxcbi5tb2RhbC1jb250ZW50IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgcG9pbnRlci1ldmVudHM6IGF1dG87XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4yKTtcXG4gIGJvcmRlci1yYWRpdXM6IDAuM3JlbTtcXG4gIG91dGxpbmU6IDA7XFxufVxcblxcbi5tb2RhbC1iYWNrZHJvcCB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgei1pbmRleDogMTA0MDtcXG4gIHdpZHRoOiAxMDB2dztcXG4gIGhlaWdodDogMTAwdmg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xcbn1cXG5cXG4ubW9kYWwtYmFja2Ryb3AuZmFkZSB7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG5cXG4ubW9kYWwtYmFja2Ryb3Auc2hvdyB7XFxuICBvcGFjaXR5OiAwLjU7XFxufVxcblxcbi5tb2RhbC1oZWFkZXIge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0O1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxuICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgcGFkZGluZzogMXJlbSAxcmVtO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZWUyZTY7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwLjNyZW07XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC4zcmVtO1xcbn1cXG5cXG4ubW9kYWwtaGVhZGVyIC5jbG9zZSB7XFxuICBwYWRkaW5nOiAxcmVtIDFyZW07XFxuICBtYXJnaW46IC0xcmVtIC0xcmVtIC0xcmVtIGF1dG87XFxufVxcblxcbi5tb2RhbC10aXRsZSB7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG59XFxuXFxuLm1vZGFsLWJvZHkge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgLW1zLWZsZXg6IDEgMSBhdXRvO1xcbiAgZmxleDogMSAxIGF1dG87XFxuICBwYWRkaW5nOiAxcmVtO1xcbn1cXG5cXG4ubW9kYWwtZm9vdGVyIHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgLW1zLWZsZXgtcGFjazogZW5kO1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG4gIHBhZGRpbmc6IDFyZW07XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RlZTJlNjtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwLjNyZW07XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwLjNyZW07XFxufVxcblxcbi5tb2RhbC1mb290ZXIgPiA6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgbWFyZ2luLWxlZnQ6IC4yNXJlbTtcXG59XFxuXFxuLm1vZGFsLWZvb3RlciA+IDpub3QoOmxhc3QtY2hpbGQpIHtcXG4gIG1hcmdpbi1yaWdodDogLjI1cmVtO1xcbn1cXG5cXG4ubW9kYWwtc2Nyb2xsYmFyLW1lYXN1cmUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAtOTk5OXB4O1xcbiAgd2lkdGg6IDUwcHg7XFxuICBoZWlnaHQ6IDUwcHg7XFxuICBvdmVyZmxvdzogc2Nyb2xsO1xcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIHtcXG4gIC5tb2RhbC1kaWFsb2cge1xcbiAgICBtYXgtd2lkdGg6IDUwMHB4O1xcbiAgICBtYXJnaW46IDEuNzVyZW0gYXV0bztcXG4gIH1cXG4gIC5tb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZSB7XFxuICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIDMuNXJlbSk7XFxuICB9XFxuICAubW9kYWwtZGlhbG9nLXNjcm9sbGFibGUgLm1vZGFsLWNvbnRlbnQge1xcbiAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMy41cmVtKTtcXG4gIH1cXG4gIC5tb2RhbC1kaWFsb2ctY2VudGVyZWQge1xcbiAgICBtaW4taGVpZ2h0OiBjYWxjKDEwMCUgLSAzLjVyZW0pO1xcbiAgfVxcbiAgLm1vZGFsLWRpYWxvZy1jZW50ZXJlZDo6YmVmb3JlIHtcXG4gICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMy41cmVtKTtcXG4gIH1cXG4gIC5tb2RhbC1zbSB7XFxuICAgIG1heC13aWR0aDogMzAwcHg7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xcbiAgLm1vZGFsLWxnLFxcbiAgLm1vZGFsLXhsIHtcXG4gICAgbWF4LXdpZHRoOiA4MDBweDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xcbiAgLm1vZGFsLXhsIHtcXG4gICAgbWF4LXdpZHRoOiAxMTQwcHg7XFxuICB9XFxufVxcblxcbi50b29sdGlwIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHotaW5kZXg6IDEwNzA7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFxcXCJTZWdvZSBVSVxcXCIsIFJvYm90bywgXFxcIkhlbHZldGljYSBOZXVlXFxcIiwgQXJpYWwsIFxcXCJOb3RvIFNhbnNcXFwiLCBzYW5zLXNlcmlmLCBcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLCBcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLCBcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIiwgXFxcIk5vdG8gQ29sb3IgRW1vamlcXFwiO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgdGV4dC1hbGlnbjogc3RhcnQ7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICB0ZXh0LXNoYWRvdzogbm9uZTtcXG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xcbiAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcXG4gIHdvcmQtYnJlYWs6IG5vcm1hbDtcXG4gIHdvcmQtc3BhY2luZzogbm9ybWFsO1xcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcXG4gIGxpbmUtYnJlYWs6IGF1dG87XFxuICBmb250LXNpemU6IDAuODc1cmVtO1xcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xcbiAgb3BhY2l0eTogMDtcXG59XFxuXFxuLnRvb2x0aXAuc2hvdyB7XFxuICBvcGFjaXR5OiAwLjk7XFxufVxcblxcbi50b29sdGlwIC5hcnJvdyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAwLjhyZW07XFxuICBoZWlnaHQ6IDAuNHJlbTtcXG59XFxuXFxuLnRvb2x0aXAgLmFycm93OjpiZWZvcmUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcXG59XFxuXFxuLmJzLXRvb2x0aXAtdG9wLCAuYnMtdG9vbHRpcC1hdXRvW3gtcGxhY2VtZW50Xj1cXFwidG9wXFxcIl0ge1xcbiAgcGFkZGluZzogMC40cmVtIDA7XFxufVxcblxcbi5icy10b29sdGlwLXRvcCAuYXJyb3csIC5icy10b29sdGlwLWF1dG9beC1wbGFjZW1lbnRePVxcXCJ0b3BcXFwiXSAuYXJyb3cge1xcbiAgYm90dG9tOiAwO1xcbn1cXG5cXG4uYnMtdG9vbHRpcC10b3AgLmFycm93OjpiZWZvcmUsIC5icy10b29sdGlwLWF1dG9beC1wbGFjZW1lbnRePVxcXCJ0b3BcXFwiXSAuYXJyb3c6OmJlZm9yZSB7XFxuICB0b3A6IDA7XFxuICBib3JkZXItd2lkdGg6IDAuNHJlbSAwLjRyZW0gMDtcXG4gIGJvcmRlci10b3AtY29sb3I6ICMwMDA7XFxufVxcblxcbi5icy10b29sdGlwLXJpZ2h0LCAuYnMtdG9vbHRpcC1hdXRvW3gtcGxhY2VtZW50Xj1cXFwicmlnaHRcXFwiXSB7XFxuICBwYWRkaW5nOiAwIDAuNHJlbTtcXG59XFxuXFxuLmJzLXRvb2x0aXAtcmlnaHQgLmFycm93LCAuYnMtdG9vbHRpcC1hdXRvW3gtcGxhY2VtZW50Xj1cXFwicmlnaHRcXFwiXSAuYXJyb3cge1xcbiAgbGVmdDogMDtcXG4gIHdpZHRoOiAwLjRyZW07XFxuICBoZWlnaHQ6IDAuOHJlbTtcXG59XFxuXFxuLmJzLXRvb2x0aXAtcmlnaHQgLmFycm93OjpiZWZvcmUsIC5icy10b29sdGlwLWF1dG9beC1wbGFjZW1lbnRePVxcXCJyaWdodFxcXCJdIC5hcnJvdzo6YmVmb3JlIHtcXG4gIHJpZ2h0OiAwO1xcbiAgYm9yZGVyLXdpZHRoOiAwLjRyZW0gMC40cmVtIDAuNHJlbSAwO1xcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjMDAwO1xcbn1cXG5cXG4uYnMtdG9vbHRpcC1ib3R0b20sIC5icy10b29sdGlwLWF1dG9beC1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSB7XFxuICBwYWRkaW5nOiAwLjRyZW0gMDtcXG59XFxuXFxuLmJzLXRvb2x0aXAtYm90dG9tIC5hcnJvdywgLmJzLXRvb2x0aXAtYXV0b1t4LXBsYWNlbWVudF49XFxcImJvdHRvbVxcXCJdIC5hcnJvdyB7XFxuICB0b3A6IDA7XFxufVxcblxcbi5icy10b29sdGlwLWJvdHRvbSAuYXJyb3c6OmJlZm9yZSwgLmJzLXRvb2x0aXAtYXV0b1t4LXBsYWNlbWVudF49XFxcImJvdHRvbVxcXCJdIC5hcnJvdzo6YmVmb3JlIHtcXG4gIGJvdHRvbTogMDtcXG4gIGJvcmRlci13aWR0aDogMCAwLjRyZW0gMC40cmVtO1xcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzAwMDtcXG59XFxuXFxuLmJzLXRvb2x0aXAtbGVmdCwgLmJzLXRvb2x0aXAtYXV0b1t4LXBsYWNlbWVudF49XFxcImxlZnRcXFwiXSB7XFxuICBwYWRkaW5nOiAwIDAuNHJlbTtcXG59XFxuXFxuLmJzLXRvb2x0aXAtbGVmdCAuYXJyb3csIC5icy10b29sdGlwLWF1dG9beC1wbGFjZW1lbnRePVxcXCJsZWZ0XFxcIl0gLmFycm93IHtcXG4gIHJpZ2h0OiAwO1xcbiAgd2lkdGg6IDAuNHJlbTtcXG4gIGhlaWdodDogMC44cmVtO1xcbn1cXG5cXG4uYnMtdG9vbHRpcC1sZWZ0IC5hcnJvdzo6YmVmb3JlLCAuYnMtdG9vbHRpcC1hdXRvW3gtcGxhY2VtZW50Xj1cXFwibGVmdFxcXCJdIC5hcnJvdzo6YmVmb3JlIHtcXG4gIGxlZnQ6IDA7XFxuICBib3JkZXItd2lkdGg6IDAuNHJlbSAwIDAuNHJlbSAwLjRyZW07XFxuICBib3JkZXItbGVmdC1jb2xvcjogIzAwMDtcXG59XFxuXFxuLnRvb2x0aXAtaW5uZXIge1xcbiAgbWF4LXdpZHRoOiAyMDBweDtcXG4gIHBhZGRpbmc6IDAuMjVyZW0gMC41cmVtO1xcbiAgY29sb3I6ICNmZjAwMDA7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLnBvcG92ZXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHotaW5kZXg6IDEwNjA7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIG1heC13aWR0aDogMjc2cHg7XFxuICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcXFwiU2Vnb2UgVUlcXFwiLCBSb2JvdG8sIFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsIEFyaWFsLCBcXFwiTm90byBTYW5zXFxcIiwgc2Fucy1zZXJpZiwgXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIiwgXFxcIlNlZ29lIFVJIEVtb2ppXFxcIiwgXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCIsIFxcXCJOb3RvIENvbG9yIEVtb2ppXFxcIjtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG4gIHRleHQtYWxpZ246IHN0YXJ0O1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgdGV4dC1zaGFkb3c6IG5vbmU7XFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XFxuICB3b3JkLWJyZWFrOiBub3JtYWw7XFxuICB3b3JkLXNwYWNpbmc6IG5vcm1hbDtcXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XFxuICBsaW5lLWJyZWFrOiBhdXRvO1xcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcXG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjIpO1xcbiAgYm9yZGVyLXJhZGl1czogMC4zcmVtO1xcbn1cXG5cXG4ucG9wb3ZlciAuYXJyb3cge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMXJlbTtcXG4gIGhlaWdodDogMC41cmVtO1xcbiAgbWFyZ2luOiAwIDAuM3JlbTtcXG59XFxuXFxuLnBvcG92ZXIgLmFycm93OjpiZWZvcmUsIC5wb3BvdmVyIC5hcnJvdzo6YWZ0ZXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItc3R5bGU6IHNvbGlkO1xcbn1cXG5cXG4uYnMtcG9wb3Zlci10b3AsIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJ0b3BcXFwiXSB7XFxuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XFxufVxcblxcbi5icy1wb3BvdmVyLXRvcCA+IC5hcnJvdywgLmJzLXBvcG92ZXItYXV0b1t4LXBsYWNlbWVudF49XFxcInRvcFxcXCJdID4gLmFycm93IHtcXG4gIGJvdHRvbTogY2FsYygoMC41cmVtICsgMXB4KSAqIC0xKTtcXG59XFxuXFxuLmJzLXBvcG92ZXItdG9wID4gLmFycm93OjpiZWZvcmUsIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJ0b3BcXFwiXSA+IC5hcnJvdzo6YmVmb3JlIHtcXG4gIGJvdHRvbTogMDtcXG4gIGJvcmRlci13aWR0aDogMC41cmVtIDAuNXJlbSAwO1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcXG59XFxuXFxuLmJzLXBvcG92ZXItdG9wID4gLmFycm93OjphZnRlciwgLmJzLXBvcG92ZXItYXV0b1t4LXBsYWNlbWVudF49XFxcInRvcFxcXCJdID4gLmFycm93OjphZnRlciB7XFxuICBib3R0b206IDFweDtcXG4gIGJvcmRlci13aWR0aDogMC41cmVtIDAuNXJlbSAwO1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2ZmZjtcXG59XFxuXFxuLmJzLXBvcG92ZXItcmlnaHQsIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJyaWdodFxcXCJdIHtcXG4gIG1hcmdpbi1sZWZ0OiAwLjVyZW07XFxufVxcblxcbi5icy1wb3BvdmVyLXJpZ2h0ID4gLmFycm93LCAuYnMtcG9wb3Zlci1hdXRvW3gtcGxhY2VtZW50Xj1cXFwicmlnaHRcXFwiXSA+IC5hcnJvdyB7XFxuICBsZWZ0OiBjYWxjKCgwLjVyZW0gKyAxcHgpICogLTEpO1xcbiAgd2lkdGg6IDAuNXJlbTtcXG4gIGhlaWdodDogMXJlbTtcXG4gIG1hcmdpbjogMC4zcmVtIDA7XFxufVxcblxcbi5icy1wb3BvdmVyLXJpZ2h0ID4gLmFycm93OjpiZWZvcmUsIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJyaWdodFxcXCJdID4gLmFycm93OjpiZWZvcmUge1xcbiAgbGVmdDogMDtcXG4gIGJvcmRlci13aWR0aDogMC41cmVtIDAuNXJlbSAwLjVyZW0gMDtcXG4gIGJvcmRlci1yaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcXG59XFxuXFxuLmJzLXBvcG92ZXItcmlnaHQgPiAuYXJyb3c6OmFmdGVyLCAuYnMtcG9wb3Zlci1hdXRvW3gtcGxhY2VtZW50Xj1cXFwicmlnaHRcXFwiXSA+IC5hcnJvdzo6YWZ0ZXIge1xcbiAgbGVmdDogMXB4O1xcbiAgYm9yZGVyLXdpZHRoOiAwLjVyZW0gMC41cmVtIDAuNXJlbSAwO1xcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjZmZmO1xcbn1cXG5cXG4uYnMtcG9wb3Zlci1ib3R0b20sIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSB7XFxuICBtYXJnaW4tdG9wOiAwLjVyZW07XFxufVxcblxcbi5icy1wb3BvdmVyLWJvdHRvbSA+IC5hcnJvdywgLmJzLXBvcG92ZXItYXV0b1t4LXBsYWNlbWVudF49XFxcImJvdHRvbVxcXCJdID4gLmFycm93IHtcXG4gIHRvcDogY2FsYygoMC41cmVtICsgMXB4KSAqIC0xKTtcXG59XFxuXFxuLmJzLXBvcG92ZXItYm90dG9tID4gLmFycm93OjpiZWZvcmUsIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSA+IC5hcnJvdzo6YmVmb3JlIHtcXG4gIHRvcDogMDtcXG4gIGJvcmRlci13aWR0aDogMCAwLjVyZW0gMC41cmVtIDAuNXJlbTtcXG4gIGJvcmRlci1ib3R0b20tY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XFxufVxcblxcbi5icy1wb3BvdmVyLWJvdHRvbSA+IC5hcnJvdzo6YWZ0ZXIsIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSA+IC5hcnJvdzo6YWZ0ZXIge1xcbiAgdG9wOiAxcHg7XFxuICBib3JkZXItd2lkdGg6IDAgMC41cmVtIDAuNXJlbSAwLjVyZW07XFxuICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmO1xcbn1cXG5cXG4uYnMtcG9wb3Zlci1ib3R0b20gLnBvcG92ZXItaGVhZGVyOjpiZWZvcmUsIC5icy1wb3BvdmVyLWF1dG9beC1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSAucG9wb3Zlci1oZWFkZXI6OmJlZm9yZSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiA1MCU7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxcmVtO1xcbiAgbWFyZ2luLWxlZnQ6IC0wLjVyZW07XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjdmN2Y3O1xcbn1cXG5cXG4uYnMtcG9wb3Zlci1sZWZ0LCAuYnMtcG9wb3Zlci1hdXRvW3gtcGxhY2VtZW50Xj1cXFwibGVmdFxcXCJdIHtcXG4gIG1hcmdpbi1yaWdodDogMC41cmVtO1xcbn1cXG5cXG4uYnMtcG9wb3Zlci1sZWZ0ID4gLmFycm93LCAuYnMtcG9wb3Zlci1hdXRvW3gtcGxhY2VtZW50Xj1cXFwibGVmdFxcXCJdID4gLmFycm93IHtcXG4gIHJpZ2h0OiBjYWxjKCgwLjVyZW0gKyAxcHgpICogLTEpO1xcbiAgd2lkdGg6IDAuNXJlbTtcXG4gIGhlaWdodDogMXJlbTtcXG4gIG1hcmdpbjogMC4zcmVtIDA7XFxufVxcblxcbi5icy1wb3BvdmVyLWxlZnQgPiAuYXJyb3c6OmJlZm9yZSwgLmJzLXBvcG92ZXItYXV0b1t4LXBsYWNlbWVudF49XFxcImxlZnRcXFwiXSA+IC5hcnJvdzo6YmVmb3JlIHtcXG4gIHJpZ2h0OiAwO1xcbiAgYm9yZGVyLXdpZHRoOiAwLjVyZW0gMCAwLjVyZW0gMC41cmVtO1xcbiAgYm9yZGVyLWxlZnQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XFxufVxcblxcbi5icy1wb3BvdmVyLWxlZnQgPiAuYXJyb3c6OmFmdGVyLCAuYnMtcG9wb3Zlci1hdXRvW3gtcGxhY2VtZW50Xj1cXFwibGVmdFxcXCJdID4gLmFycm93OjphZnRlciB7XFxuICByaWdodDogMXB4O1xcbiAgYm9yZGVyLXdpZHRoOiAwLjVyZW0gMCAwLjVyZW0gMC41cmVtO1xcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICNmZmY7XFxufVxcblxcbi5wb3BvdmVyLWhlYWRlciB7XFxuICBwYWRkaW5nOiAwLjVyZW0gMC43NXJlbTtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxuICBmb250LXNpemU6IDFyZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3O1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlYmViZWI7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBjYWxjKDAuM3JlbSAtIDFweCk7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogY2FsYygwLjNyZW0gLSAxcHgpO1xcbn1cXG5cXG4ucG9wb3Zlci1oZWFkZXI6ZW1wdHkge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLnBvcG92ZXItYm9keSB7XFxuICBwYWRkaW5nOiAwLjVyZW0gMC43NXJlbTtcXG4gIGNvbG9yOiAjMjEyNTI5O1xcbn1cXG5cXG4uY2Fyb3VzZWwge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4uY2Fyb3VzZWwucG9pbnRlci1ldmVudCB7XFxuICAtbXMtdG91Y2gtYWN0aW9uOiBwYW4teTtcXG4gIHRvdWNoLWFjdGlvbjogcGFuLXk7XFxufVxcblxcbi5jYXJvdXNlbC1pbm5lciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMTAwJTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5jYXJvdXNlbC1pbm5lcjo6YWZ0ZXIge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBjbGVhcjogYm90aDtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbn1cXG5cXG4uY2Fyb3VzZWwtaXRlbSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgZmxvYXQ6IGxlZnQ7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1hcmdpbi1yaWdodDogLTEwMCU7XFxuICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuNnMgZWFzZS1pbi1vdXQ7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC42cyBlYXNlLWluLW91dDtcXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjZzIGVhc2UtaW4tb3V0LCAtd2Via2l0LXRyYW5zZm9ybSAwLjZzIGVhc2UtaW4tb3V0O1xcbn1cXG5cXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xcbiAgLmNhcm91c2VsLWl0ZW0ge1xcbiAgICB0cmFuc2l0aW9uOiBub25lO1xcbiAgfVxcbn1cXG5cXG4uY2Fyb3VzZWwtaXRlbS5hY3RpdmUsXFxuLmNhcm91c2VsLWl0ZW0tbmV4dCxcXG4uY2Fyb3VzZWwtaXRlbS1wcmV2IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4uY2Fyb3VzZWwtaXRlbS1uZXh0Om5vdCguY2Fyb3VzZWwtaXRlbS1sZWZ0KSxcXG4uYWN0aXZlLmNhcm91c2VsLWl0ZW0tcmlnaHQge1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XFxufVxcblxcbi5jYXJvdXNlbC1pdGVtLXByZXY6bm90KC5jYXJvdXNlbC1pdGVtLXJpZ2h0KSxcXG4uYWN0aXZlLmNhcm91c2VsLWl0ZW0tbGVmdCB7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSk7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xcbn1cXG5cXG4uY2Fyb3VzZWwtZmFkZSAuY2Fyb3VzZWwtaXRlbSB7XFxuICBvcGFjaXR5OiAwO1xcbiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogb3BhY2l0eTtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiBub25lO1xcbiAgdHJhbnNmb3JtOiBub25lO1xcbn1cXG5cXG4uY2Fyb3VzZWwtZmFkZSAuY2Fyb3VzZWwtaXRlbS5hY3RpdmUsXFxuLmNhcm91c2VsLWZhZGUgLmNhcm91c2VsLWl0ZW0tbmV4dC5jYXJvdXNlbC1pdGVtLWxlZnQsXFxuLmNhcm91c2VsLWZhZGUgLmNhcm91c2VsLWl0ZW0tcHJldi5jYXJvdXNlbC1pdGVtLXJpZ2h0IHtcXG4gIHotaW5kZXg6IDE7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG5cXG4uY2Fyb3VzZWwtZmFkZSAuYWN0aXZlLmNhcm91c2VsLWl0ZW0tbGVmdCxcXG4uY2Fyb3VzZWwtZmFkZSAuYWN0aXZlLmNhcm91c2VsLWl0ZW0tcmlnaHQge1xcbiAgei1pbmRleDogMDtcXG4gIG9wYWNpdHk6IDA7XFxuICB0cmFuc2l0aW9uOiAwcyAwLjZzIG9wYWNpdHk7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAuY2Fyb3VzZWwtZmFkZSAuYWN0aXZlLmNhcm91c2VsLWl0ZW0tbGVmdCxcXG4gIC5jYXJvdXNlbC1mYWRlIC5hY3RpdmUuY2Fyb3VzZWwtaXRlbS1yaWdodCB7XFxuICAgIHRyYW5zaXRpb246IG5vbmU7XFxuICB9XFxufVxcblxcbi5jYXJvdXNlbC1jb250cm9sLXByZXYsXFxuLmNhcm91c2VsLWNvbnRyb2wtbmV4dCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBib3R0b206IDA7XFxuICB6LWluZGV4OiAxO1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIHdpZHRoOiAxNSU7XFxuICBjb2xvcjogI2ZmZjtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIG9wYWNpdHk6IDAuNTtcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgZWFzZTtcXG59XFxuXFxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcXG4gIC5jYXJvdXNlbC1jb250cm9sLXByZXYsXFxuICAuY2Fyb3VzZWwtY29udHJvbC1uZXh0IHtcXG4gICAgdHJhbnNpdGlvbjogbm9uZTtcXG4gIH1cXG59XFxuXFxuLmNhcm91c2VsLWNvbnRyb2wtcHJldjpob3ZlciwgLmNhcm91c2VsLWNvbnRyb2wtcHJldjpmb2N1cyxcXG4uY2Fyb3VzZWwtY29udHJvbC1uZXh0OmhvdmVyLFxcbi5jYXJvdXNlbC1jb250cm9sLW5leHQ6Zm9jdXMge1xcbiAgY29sb3I6ICNmZmY7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICBvdXRsaW5lOiAwO1xcbiAgb3BhY2l0eTogMC45O1xcbn1cXG5cXG4uY2Fyb3VzZWwtY29udHJvbC1wcmV2IHtcXG4gIGxlZnQ6IDA7XFxufVxcblxcbi5jYXJvdXNlbC1jb250cm9sLW5leHQge1xcbiAgcmlnaHQ6IDA7XFxufVxcblxcbi5jYXJvdXNlbC1jb250cm9sLXByZXYtaWNvbixcXG4uY2Fyb3VzZWwtY29udHJvbC1uZXh0LWljb24ge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgd2lkdGg6IDIwcHg7XFxuICBoZWlnaHQ6IDIwcHg7XFxuICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgNTAlIC8gMTAwJSAxMDAlO1xcbn1cXG5cXG4uY2Fyb3VzZWwtY29udHJvbC1wcmV2LWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgZmlsbD0nJTIzZmZmJyB2aWV3Qm94PScwIDAgOCA4JyUzZSUzY3BhdGggZD0nTTUuMjUgMGwtNCA0IDQgNCAxLjUtMS41LTIuNS0yLjUgMi41LTIuNS0xLjUtMS41eicvJTNlJTNjL3N2ZyUzZVxcXCIpO1xcbn1cXG5cXG4uY2Fyb3VzZWwtY29udHJvbC1uZXh0LWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgZmlsbD0nJTIzZmZmJyB2aWV3Qm94PScwIDAgOCA4JyUzZSUzY3BhdGggZD0nTTIuNzUgMGwtMS41IDEuNSAyLjUgMi41LTIuNSAyLjUgMS41IDEuNSA0LTQtNC00eicvJTNlJTNjL3N2ZyUzZVxcXCIpO1xcbn1cXG5cXG4uY2Fyb3VzZWwtaW5kaWNhdG9ycyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICB6LWluZGV4OiAxNTtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgbWFyZ2luLXJpZ2h0OiAxNSU7XFxuICBtYXJnaW4tbGVmdDogMTUlO1xcbiAgbGlzdC1zdHlsZTogbm9uZTtcXG59XFxuXFxuLmNhcm91c2VsLWluZGljYXRvcnMgbGkge1xcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XFxuICAtbXMtZmxleDogMCAxIGF1dG87XFxuICBmbGV4OiAwIDEgYXV0bztcXG4gIHdpZHRoOiAzMHB4O1xcbiAgaGVpZ2h0OiAzcHg7XFxuICBtYXJnaW4tcmlnaHQ6IDNweDtcXG4gIG1hcmdpbi1sZWZ0OiAzcHg7XFxuICB0ZXh0LWluZGVudDogLTk5OXB4O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICBib3JkZXItdG9wOiAxMHB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWJvdHRvbTogMTBweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIG9wYWNpdHk6IC41O1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjZzIGVhc2U7XFxufVxcblxcbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAuY2Fyb3VzZWwtaW5kaWNhdG9ycyBsaSB7XFxuICAgIHRyYW5zaXRpb246IG5vbmU7XFxuICB9XFxufVxcblxcbi5jYXJvdXNlbC1pbmRpY2F0b3JzIC5hY3RpdmUge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLmNhcm91c2VsLWNhcHRpb24ge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDE1JTtcXG4gIGJvdHRvbTogMjBweDtcXG4gIGxlZnQ6IDE1JTtcXG4gIHotaW5kZXg6IDEwO1xcbiAgcGFkZGluZy10b3A6IDIwcHg7XFxuICBwYWRkaW5nLWJvdHRvbTogMjBweDtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG5ALXdlYmtpdC1rZXlmcmFtZXMgc3Bpbm5lci1ib3JkZXIge1xcbiAgdG8ge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICB9XFxufVxcblxcbkBrZXlmcmFtZXMgc3Bpbm5lci1ib3JkZXIge1xcbiAgdG8ge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICB9XFxufVxcblxcbi5zcGlubmVyLWJvcmRlciB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB3aWR0aDogMnJlbTtcXG4gIGhlaWdodDogMnJlbTtcXG4gIHZlcnRpY2FsLWFsaWduOiB0ZXh0LWJvdHRvbTtcXG4gIGJvcmRlcjogMC4yNWVtIHNvbGlkIGN1cnJlbnRDb2xvcjtcXG4gIGJvcmRlci1yaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICAtd2Via2l0LWFuaW1hdGlvbjogc3Bpbm5lci1ib3JkZXIgLjc1cyBsaW5lYXIgaW5maW5pdGU7XFxuICBhbmltYXRpb246IHNwaW5uZXItYm9yZGVyIC43NXMgbGluZWFyIGluZmluaXRlO1xcbn1cXG5cXG4uc3Bpbm5lci1ib3JkZXItc20ge1xcbiAgd2lkdGg6IDFyZW07XFxuICBoZWlnaHQ6IDFyZW07XFxuICBib3JkZXItd2lkdGg6IDAuMmVtO1xcbn1cXG5cXG5ALXdlYmtpdC1rZXlmcmFtZXMgc3Bpbm5lci1ncm93IHtcXG4gIDAlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApO1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDApO1xcbiAgfVxcbiAgNTAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG59XFxuXFxuQGtleWZyYW1lcyBzcGlubmVyLWdyb3cge1xcbiAgMCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMCk7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XFxuICB9XFxuICA1MCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbn1cXG5cXG4uc3Bpbm5lci1ncm93IHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHdpZHRoOiAycmVtO1xcbiAgaGVpZ2h0OiAycmVtO1xcbiAgdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgb3BhY2l0eTogMDtcXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBzcGlubmVyLWdyb3cgLjc1cyBsaW5lYXIgaW5maW5pdGU7XFxuICBhbmltYXRpb246IHNwaW5uZXItZ3JvdyAuNzVzIGxpbmVhciBpbmZpbml0ZTtcXG59XFxuXFxuLnNwaW5uZXItZ3Jvdy1zbSB7XFxuICB3aWR0aDogMXJlbTtcXG4gIGhlaWdodDogMXJlbTtcXG59XFxuXFxuLmFsaWduLWJhc2VsaW5lIHtcXG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWxpZ24tdG9wIHtcXG4gIHZlcnRpY2FsLWFsaWduOiB0b3AgIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLW1pZGRsZSB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbGlnbi1ib3R0b20ge1xcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWxpZ24tdGV4dC1ib3R0b20ge1xcbiAgdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbGlnbi10ZXh0LXRvcCB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3AgIWltcG9ydGFudDtcXG59XFxuXFxuLmJnLXByaW1hcnkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG5hLmJnLXByaW1hcnk6aG92ZXIsIGEuYmctcHJpbWFyeTpmb2N1cyxcXG5idXR0b24uYmctcHJpbWFyeTpob3ZlcixcXG5idXR0b24uYmctcHJpbWFyeTpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA2MmNjICFpbXBvcnRhbnQ7XFxufVxcblxcbi5iZy1zZWNvbmRhcnkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzZjNzU3ZCAhaW1wb3J0YW50O1xcbn1cXG5cXG5hLmJnLXNlY29uZGFyeTpob3ZlciwgYS5iZy1zZWNvbmRhcnk6Zm9jdXMsXFxuYnV0dG9uLmJnLXNlY29uZGFyeTpob3ZlcixcXG5idXR0b24uYmctc2Vjb25kYXJ5OmZvY3VzIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM1NDViNjIgIWltcG9ydGFudDtcXG59XFxuXFxuLmJnLXN1Y2Nlc3Mge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI4YTc0NSAhaW1wb3J0YW50O1xcbn1cXG5cXG5hLmJnLXN1Y2Nlc3M6aG92ZXIsIGEuYmctc3VjY2Vzczpmb2N1cyxcXG5idXR0b24uYmctc3VjY2Vzczpob3ZlcixcXG5idXR0b24uYmctc3VjY2Vzczpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWU3ZTM0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5iZy1pbmZvIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxN2EyYjggIWltcG9ydGFudDtcXG59XFxuXFxuYS5iZy1pbmZvOmhvdmVyLCBhLmJnLWluZm86Zm9jdXMsXFxuYnV0dG9uLmJnLWluZm86aG92ZXIsXFxuYnV0dG9uLmJnLWluZm86Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzExN2E4YiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmctd2FybmluZyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZjMTA3ICFpbXBvcnRhbnQ7XFxufVxcblxcbmEuYmctd2FybmluZzpob3ZlciwgYS5iZy13YXJuaW5nOmZvY3VzLFxcbmJ1dHRvbi5iZy13YXJuaW5nOmhvdmVyLFxcbmJ1dHRvbi5iZy13YXJuaW5nOmZvY3VzIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkMzllMDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmJnLWRhbmdlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGMzNTQ1ICFpbXBvcnRhbnQ7XFxufVxcblxcbmEuYmctZGFuZ2VyOmhvdmVyLCBhLmJnLWRhbmdlcjpmb2N1cyxcXG5idXR0b24uYmctZGFuZ2VyOmhvdmVyLFxcbmJ1dHRvbi5iZy1kYW5nZXI6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2JkMjEzMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmctbGlnaHQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYSAhaW1wb3J0YW50O1xcbn1cXG5cXG5hLmJnLWxpZ2h0OmhvdmVyLCBhLmJnLWxpZ2h0OmZvY3VzLFxcbmJ1dHRvbi5iZy1saWdodDpob3ZlcixcXG5idXR0b24uYmctbGlnaHQ6Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RhZTBlNSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYmctZGFyayB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzQzYTQwICFpbXBvcnRhbnQ7XFxufVxcblxcbmEuYmctZGFyazpob3ZlciwgYS5iZy1kYXJrOmZvY3VzLFxcbmJ1dHRvbi5iZy1kYXJrOmhvdmVyLFxcbmJ1dHRvbi5iZy1kYXJrOmZvY3VzIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxZDIxMjQgIWltcG9ydGFudDtcXG59XFxuXFxuLmJnLXdoaXRlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJnLXRyYW5zcGFyZW50IHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ib3JkZXIge1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2RlZTJlNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLXRvcCB7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RlZTJlNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLXJpZ2h0IHtcXG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkZWUyZTYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJvcmRlci1ib3R0b20ge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZWUyZTYgIWltcG9ydGFudDtcXG59XFxuXFxuLmJvcmRlci1sZWZ0IHtcXG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2RlZTJlNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLTAge1xcbiAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ib3JkZXItdG9wLTAge1xcbiAgYm9yZGVyLXRvcDogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLXJpZ2h0LTAge1xcbiAgYm9yZGVyLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ib3JkZXItYm90dG9tLTAge1xcbiAgYm9yZGVyLWJvdHRvbTogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLWxlZnQtMCB7XFxuICBib3JkZXItbGVmdDogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLXByaW1hcnkge1xcbiAgYm9yZGVyLWNvbG9yOiAjMDA3YmZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ib3JkZXItc2Vjb25kYXJ5IHtcXG4gIGJvcmRlci1jb2xvcjogIzZjNzU3ZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLXN1Y2Nlc3Mge1xcbiAgYm9yZGVyLWNvbG9yOiAjMjhhNzQ1ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ib3JkZXItaW5mbyB7XFxuICBib3JkZXItY29sb3I6ICMxN2EyYjggIWltcG9ydGFudDtcXG59XFxuXFxuLmJvcmRlci13YXJuaW5nIHtcXG4gIGJvcmRlci1jb2xvcjogI2ZmYzEwNyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLWRhbmdlciB7XFxuICBib3JkZXItY29sb3I6ICNkYzM1NDUgIWltcG9ydGFudDtcXG59XFxuXFxuLmJvcmRlci1saWdodCB7XFxuICBib3JkZXItY29sb3I6ICNmOGY5ZmEgIWltcG9ydGFudDtcXG59XFxuXFxuLmJvcmRlci1kYXJrIHtcXG4gIGJvcmRlci1jb2xvcjogIzM0M2E0MCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYm9yZGVyLXdoaXRlIHtcXG4gIGJvcmRlci1jb2xvcjogI2ZmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucm91bmRlZC1zbSB7XFxuICBib3JkZXItcmFkaXVzOiAwLjJyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLnJvdW5kZWQge1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucm91bmRlZC10b3Age1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDAuMjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLnJvdW5kZWQtcmlnaHQge1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yb3VuZGVkLWJvdHRvbSB7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucm91bmRlZC1sZWZ0IHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAuMjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLnJvdW5kZWQtbGcge1xcbiAgYm9yZGVyLXJhZGl1czogMC4zcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yb3VuZGVkLWNpcmNsZSB7XFxuICBib3JkZXItcmFkaXVzOiA1MCUgIWltcG9ydGFudDtcXG59XFxuXFxuLnJvdW5kZWQtcGlsbCB7XFxuICBib3JkZXItcmFkaXVzOiA1MHJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucm91bmRlZC0wIHtcXG4gIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmNsZWFyZml4OjphZnRlciB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGNsZWFyOiBib3RoO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxufVxcblxcbi5kLW5vbmUge1xcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZC1pbmxpbmUge1xcbiAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XFxufVxcblxcbi5kLWlubGluZS1ibG9jayB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcXG59XFxuXFxuLmQtYmxvY2sge1xcbiAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcXG59XFxuXFxuLmQtdGFibGUge1xcbiAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudDtcXG59XFxuXFxuLmQtdGFibGUtcm93IHtcXG4gIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZC10YWJsZS1jZWxsIHtcXG4gIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDtcXG59XFxuXFxuLmQtZmxleCB7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZC1pbmxpbmUtZmxleCB7XFxuICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3ggIWltcG9ydGFudDtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLmQtc20tbm9uZSB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXNtLWlubGluZSB7XFxuICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtc20taW5saW5lLWJsb2NrIHtcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1zbS1ibG9jayB7XFxuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1zbS10YWJsZSB7XFxuICAgIGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1zbS10YWJsZS1yb3cge1xcbiAgICBkaXNwbGF5OiB0YWJsZS1yb3cgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXNtLXRhYmxlLWNlbGwge1xcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1zbS1mbGV4IHtcXG4gICAgZGlzcGxheTogLW1zLWZsZXhib3ggIWltcG9ydGFudDtcXG4gICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtc20taW5saW5lLWZsZXgge1xcbiAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3ggIWltcG9ydGFudDtcXG4gICAgZGlzcGxheTogaW5saW5lLWZsZXggIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XFxuICAuZC1tZC1ub25lIHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtbWQtaW5saW5lIHtcXG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1tZC1pbmxpbmUtYmxvY2sge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLW1kLWJsb2NrIHtcXG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLW1kLXRhYmxlIHtcXG4gICAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLW1kLXRhYmxlLXJvdyB7XFxuICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtbWQtdGFibGUtY2VsbCB7XFxuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLW1kLWZsZXgge1xcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1tZC1pbmxpbmUtZmxleCB7XFxuICAgIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcXG4gIC5kLWxnLW5vbmUge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1sZy1pbmxpbmUge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLWxnLWlubGluZS1ibG9jayB7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtbGctYmxvY2sge1xcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtbGctdGFibGUge1xcbiAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtbGctdGFibGUtcm93IHtcXG4gICAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1sZy10YWJsZS1jZWxsIHtcXG4gICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtbGctZmxleCB7XFxuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94ICFpbXBvcnRhbnQ7XFxuICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLWxnLWlubGluZS1mbGV4IHtcXG4gICAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94ICFpbXBvcnRhbnQ7XFxuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC5kLXhsLW5vbmUge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC14bC1pbmxpbmUge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXhsLWlubGluZS1ibG9jayB7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQteGwtYmxvY2sge1xcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQteGwtdGFibGUge1xcbiAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQteGwtdGFibGUtcm93IHtcXG4gICAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC14bC10YWJsZS1jZWxsIHtcXG4gICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQteGwtZmxleCB7XFxuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94ICFpbXBvcnRhbnQ7XFxuICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXhsLWlubGluZS1mbGV4IHtcXG4gICAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94ICFpbXBvcnRhbnQ7XFxuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSBwcmludCB7XFxuICAuZC1wcmludC1ub25lIHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtcHJpbnQtaW5saW5lIHtcXG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1wcmludC1pbmxpbmUtYmxvY2sge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXByaW50LWJsb2NrIHtcXG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXByaW50LXRhYmxlIHtcXG4gICAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXByaW50LXRhYmxlLXJvdyB7XFxuICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmQtcHJpbnQtdGFibGUtY2VsbCB7XFxuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5kLXByaW50LWZsZXgge1xcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZC1wcmludC1pbmxpbmUtZmxleCB7XFxuICAgIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveCAhaW1wb3J0YW50O1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG4uZW1iZWQtcmVzcG9uc2l2ZSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxMDAlO1xcbiAgcGFkZGluZzogMDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5lbWJlZC1yZXNwb25zaXZlOjpiZWZvcmUge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG59XFxuXFxuLmVtYmVkLXJlc3BvbnNpdmUgLmVtYmVkLXJlc3BvbnNpdmUtaXRlbSxcXG4uZW1iZWQtcmVzcG9uc2l2ZSBpZnJhbWUsXFxuLmVtYmVkLXJlc3BvbnNpdmUgZW1iZWQsXFxuLmVtYmVkLXJlc3BvbnNpdmUgb2JqZWN0LFxcbi5lbWJlZC1yZXNwb25zaXZlIHZpZGVvIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGJvcmRlcjogMDtcXG59XFxuXFxuLmVtYmVkLXJlc3BvbnNpdmUtMjFieTk6OmJlZm9yZSB7XFxuICBwYWRkaW5nLXRvcDogNDIuODU3MTQzJTtcXG59XFxuXFxuLmVtYmVkLXJlc3BvbnNpdmUtMTZieTk6OmJlZm9yZSB7XFxuICBwYWRkaW5nLXRvcDogNTYuMjUlO1xcbn1cXG5cXG4uZW1iZWQtcmVzcG9uc2l2ZS00YnkzOjpiZWZvcmUge1xcbiAgcGFkZGluZy10b3A6IDc1JTtcXG59XFxuXFxuLmVtYmVkLXJlc3BvbnNpdmUtMWJ5MTo6YmVmb3JlIHtcXG4gIHBhZGRpbmctdG9wOiAxMDAlO1xcbn1cXG5cXG4uZmxleC1yb3cge1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3cgIWltcG9ydGFudDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3cgIWltcG9ydGFudDtcXG59XFxuXFxuLmZsZXgtY29sdW1uIHtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7XFxufVxcblxcbi5mbGV4LXJvdy1yZXZlcnNlIHtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2UgIWltcG9ydGFudDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZmxleC1jb2x1bW4tcmV2ZXJzZSB7XFxuICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2UgIWltcG9ydGFudDtcXG59XFxuXFxuLmZsZXgtd3JhcCB7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwICFpbXBvcnRhbnQ7XFxuICBmbGV4LXdyYXA6IHdyYXAgIWltcG9ydGFudDtcXG59XFxuXFxuLmZsZXgtbm93cmFwIHtcXG4gIC1tcy1mbGV4LXdyYXA6IG5vd3JhcCAhaW1wb3J0YW50O1xcbiAgZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDtcXG59XFxuXFxuLmZsZXgtd3JhcC1yZXZlcnNlIHtcXG4gIC1tcy1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgZmxleC13cmFwOiB3cmFwLXJldmVyc2UgIWltcG9ydGFudDtcXG59XFxuXFxuLmZsZXgtZmlsbCB7XFxuICAtbXMtZmxleDogMSAxIGF1dG8gIWltcG9ydGFudDtcXG4gIGZsZXg6IDEgMSBhdXRvICFpbXBvcnRhbnQ7XFxufVxcblxcbi5mbGV4LWdyb3ctMCB7XFxuICAtbXMtZmxleC1wb3NpdGl2ZTogMCAhaW1wb3J0YW50O1xcbiAgZmxleC1ncm93OiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5mbGV4LWdyb3ctMSB7XFxuICAtbXMtZmxleC1wb3NpdGl2ZTogMSAhaW1wb3J0YW50O1xcbiAgZmxleC1ncm93OiAxICFpbXBvcnRhbnQ7XFxufVxcblxcbi5mbGV4LXNocmluay0wIHtcXG4gIC1tcy1mbGV4LW5lZ2F0aXZlOiAwICFpbXBvcnRhbnQ7XFxuICBmbGV4LXNocmluazogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZmxleC1zaHJpbmstMSB7XFxuICAtbXMtZmxleC1uZWdhdGl2ZTogMSAhaW1wb3J0YW50O1xcbiAgZmxleC1zaHJpbms6IDEgIWltcG9ydGFudDtcXG59XFxuXFxuLmp1c3RpZnktY29udGVudC1zdGFydCB7XFxuICAtbXMtZmxleC1wYWNrOiBzdGFydCAhaW1wb3J0YW50O1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5qdXN0aWZ5LWNvbnRlbnQtZW5kIHtcXG4gIC1tcy1mbGV4LXBhY2s6IGVuZCAhaW1wb3J0YW50O1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uanVzdGlmeS1jb250ZW50LWNlbnRlciB7XFxuICAtbXMtZmxleC1wYWNrOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB7XFxuICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5ICFpbXBvcnRhbnQ7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW4gIWltcG9ydGFudDtcXG59XFxuXFxuLmp1c3RpZnktY29udGVudC1hcm91bmQge1xcbiAgLW1zLWZsZXgtcGFjazogZGlzdHJpYnV0ZSAhaW1wb3J0YW50O1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQgIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLWl0ZW1zLXN0YXJ0IHtcXG4gIC1tcy1mbGV4LWFsaWduOiBzdGFydCAhaW1wb3J0YW50O1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLWl0ZW1zLWVuZCB7XFxuICAtbXMtZmxleC1hbGlnbjogZW5kICFpbXBvcnRhbnQ7XFxuICBhbGlnbi1pdGVtczogZmxleC1lbmQgIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLWl0ZW1zLWNlbnRlciB7XFxuICAtbXMtZmxleC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7XFxuICBhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbGlnbi1pdGVtcy1iYXNlbGluZSB7XFxuICAtbXMtZmxleC1hbGlnbjogYmFzZWxpbmUgIWltcG9ydGFudDtcXG4gIGFsaWduLWl0ZW1zOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWxpZ24taXRlbXMtc3RyZXRjaCB7XFxuICAtbXMtZmxleC1hbGlnbjogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2ggIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLWNvbnRlbnQtc3RhcnQge1xcbiAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdGFydCAhaW1wb3J0YW50O1xcbiAgYWxpZ24tY29udGVudDogZmxleC1zdGFydCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWxpZ24tY29udGVudC1lbmQge1xcbiAgLW1zLWZsZXgtbGluZS1wYWNrOiBlbmQgIWltcG9ydGFudDtcXG4gIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbGlnbi1jb250ZW50LWNlbnRlciB7XFxuICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgYWxpZ24tY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbGlnbi1jb250ZW50LWJldHdlZW4ge1xcbiAgLW1zLWZsZXgtbGluZS1wYWNrOiBqdXN0aWZ5ICFpbXBvcnRhbnQ7XFxuICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbGlnbi1jb250ZW50LWFyb3VuZCB7XFxuICAtbXMtZmxleC1saW5lLXBhY2s6IGRpc3RyaWJ1dGUgIWltcG9ydGFudDtcXG4gIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWxpZ24tY29udGVudC1zdHJldGNoIHtcXG4gIC1tcy1mbGV4LWxpbmUtcGFjazogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgYWxpZ24tY29udGVudDogc3RyZXRjaCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWxpZ24tc2VsZi1hdXRvIHtcXG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGF1dG8gIWltcG9ydGFudDtcXG4gIGFsaWduLXNlbGY6IGF1dG8gIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLXNlbGYtc3RhcnQge1xcbiAgLW1zLWZsZXgtaXRlbS1hbGlnbjogc3RhcnQgIWltcG9ydGFudDtcXG4gIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLXNlbGYtZW5kIHtcXG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGVuZCAhaW1wb3J0YW50O1xcbiAgYWxpZ24tc2VsZjogZmxleC1lbmQgIWltcG9ydGFudDtcXG59XFxuXFxuLmFsaWduLXNlbGYtY2VudGVyIHtcXG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgYWxpZ24tc2VsZjogY2VudGVyICFpbXBvcnRhbnQ7XFxufVxcblxcbi5hbGlnbi1zZWxmLWJhc2VsaW5lIHtcXG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGJhc2VsaW5lICFpbXBvcnRhbnQ7XFxuICBhbGlnbi1zZWxmOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWxpZ24tc2VsZi1zdHJldGNoIHtcXG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gIGFsaWduLXNlbGY6IHN0cmV0Y2ggIWltcG9ydGFudDtcXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDU3NnB4KSB7XFxuICAuZmxleC1zbS1yb3cge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdyAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1zbS1jb2x1bW4ge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbiAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1zbS1yb3ctcmV2ZXJzZSB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2UgIWltcG9ydGFudDtcXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1zbS1jb2x1bW4tcmV2ZXJzZSB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2UgIWltcG9ydGFudDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1zbS13cmFwIHtcXG4gICAgLW1zLWZsZXgtd3JhcDogd3JhcCAhaW1wb3J0YW50O1xcbiAgICBmbGV4LXdyYXA6IHdyYXAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LXNtLW5vd3JhcCB7XFxuICAgIC1tcy1mbGV4LXdyYXA6IG5vd3JhcCAhaW1wb3J0YW50O1xcbiAgICBmbGV4LXdyYXA6IG5vd3JhcCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtc20td3JhcC1yZXZlcnNlIHtcXG4gICAgLW1zLWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtd3JhcDogd3JhcC1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1zbS1maWxsIHtcXG4gICAgLW1zLWZsZXg6IDEgMSBhdXRvICFpbXBvcnRhbnQ7XFxuICAgIGZsZXg6IDEgMSBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1zbS1ncm93LTAge1xcbiAgICAtbXMtZmxleC1wb3NpdGl2ZTogMCAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWdyb3c6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LXNtLWdyb3ctMSB7XFxuICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAxICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZ3JvdzogMSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtc20tc2hyaW5rLTAge1xcbiAgICAtbXMtZmxleC1uZWdhdGl2ZTogMCAhaW1wb3J0YW50O1xcbiAgICBmbGV4LXNocmluazogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtc20tc2hyaW5rLTEge1xcbiAgICAtbXMtZmxleC1uZWdhdGl2ZTogMSAhaW1wb3J0YW50O1xcbiAgICBmbGV4LXNocmluazogMSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmp1c3RpZnktY29udGVudC1zbS1zdGFydCB7XFxuICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0ICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmp1c3RpZnktY29udGVudC1zbS1lbmQge1xcbiAgICAtbXMtZmxleC1wYWNrOiBlbmQgIWltcG9ydGFudDtcXG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmp1c3RpZnktY29udGVudC1zbS1jZW50ZXIge1xcbiAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQtc20tYmV0d2VlbiB7XFxuICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnkgIWltcG9ydGFudDtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuanVzdGlmeS1jb250ZW50LXNtLWFyb3VuZCB7XFxuICAgIC1tcy1mbGV4LXBhY2s6IGRpc3RyaWJ1dGUgIWltcG9ydGFudDtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1pdGVtcy1zbS1zdGFydCB7XFxuICAgIC1tcy1mbGV4LWFsaWduOiBzdGFydCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLXNtLWVuZCB7XFxuICAgIC1tcy1mbGV4LWFsaWduOiBlbmQgIWltcG9ydGFudDtcXG4gICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24taXRlbXMtc20tY2VudGVyIHtcXG4gICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24taXRlbXMtc20tYmFzZWxpbmUge1xcbiAgICAtbXMtZmxleC1hbGlnbjogYmFzZWxpbmUgIWltcG9ydGFudDtcXG4gICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24taXRlbXMtc20tc3RyZXRjaCB7XFxuICAgIC1tcy1mbGV4LWFsaWduOiBzdHJldGNoICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tY29udGVudC1zbS1zdGFydCB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogc3RhcnQgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQtc20tZW5kIHtcXG4gICAgLW1zLWZsZXgtbGluZS1wYWNrOiBlbmQgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tY29udGVudDogZmxleC1lbmQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LXNtLWNlbnRlciB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogY2VudGVyICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQtc20tYmV0d2VlbiB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazoganVzdGlmeSAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tY29udGVudC1zbS1hcm91bmQge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IGRpc3RyaWJ1dGUgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tY29udGVudC1zbS1zdHJldGNoIHtcXG4gICAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdHJldGNoICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1zZWxmLXNtLWF1dG8ge1xcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBhdXRvICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1zZWxmLXNtLXN0YXJ0IHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogc3RhcnQgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tc2VsZjogZmxleC1zdGFydCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYtc20tZW5kIHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogZW5kICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi1zbS1jZW50ZXIge1xcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tc2VsZjogY2VudGVyICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi1zbS1iYXNlbGluZSB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGJhc2VsaW5lICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IGJhc2VsaW5lICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi1zbS1zdHJldGNoIHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBzdHJldGNoICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLmZsZXgtbWQtcm93IHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3cgIWltcG9ydGFudDtcXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdyAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbWQtY29sdW1uIHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4gIWltcG9ydGFudDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbiAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbWQtcm93LXJldmVyc2Uge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbWQtY29sdW1uLXJldmVyc2Uge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbWQtd3JhcCB7XFxuICAgIC1tcy1mbGV4LXdyYXA6IHdyYXAgIWltcG9ydGFudDtcXG4gICAgZmxleC13cmFwOiB3cmFwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1tZC1ub3dyYXAge1xcbiAgICAtbXMtZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDtcXG4gICAgZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LW1kLXdyYXAtcmV2ZXJzZSB7XFxuICAgIC1tcy1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgICBmbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbWQtZmlsbCB7XFxuICAgIC1tcy1mbGV4OiAxIDEgYXV0byAhaW1wb3J0YW50O1xcbiAgICBmbGV4OiAxIDEgYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbWQtZ3Jvdy0wIHtcXG4gICAgLW1zLWZsZXgtcG9zaXRpdmU6IDAgIWltcG9ydGFudDtcXG4gICAgZmxleC1ncm93OiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1tZC1ncm93LTEge1xcbiAgICAtbXMtZmxleC1wb3NpdGl2ZTogMSAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWdyb3c6IDEgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LW1kLXNocmluay0wIHtcXG4gICAgLW1zLWZsZXgtbmVnYXRpdmU6IDAgIWltcG9ydGFudDtcXG4gICAgZmxleC1zaHJpbms6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LW1kLXNocmluay0xIHtcXG4gICAgLW1zLWZsZXgtbmVnYXRpdmU6IDEgIWltcG9ydGFudDtcXG4gICAgZmxleC1zaHJpbms6IDEgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQtbWQtc3RhcnQge1xcbiAgICAtbXMtZmxleC1wYWNrOiBzdGFydCAhaW1wb3J0YW50O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQtbWQtZW5kIHtcXG4gICAgLW1zLWZsZXgtcGFjazogZW5kICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQtbWQtY2VudGVyIHtcXG4gICAgLW1zLWZsZXgtcGFjazogY2VudGVyICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuanVzdGlmeS1jb250ZW50LW1kLWJldHdlZW4ge1xcbiAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5ICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmp1c3RpZnktY29udGVudC1tZC1hcm91bmQge1xcbiAgICAtbXMtZmxleC1wYWNrOiBkaXN0cmlidXRlICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24taXRlbXMtbWQtc3RhcnQge1xcbiAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQgIWltcG9ydGFudDtcXG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1pdGVtcy1tZC1lbmQge1xcbiAgICAtbXMtZmxleC1hbGlnbjogZW5kICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLW1kLWNlbnRlciB7XFxuICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLW1kLWJhc2VsaW5lIHtcXG4gICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLW1kLXN0cmV0Y2gge1xcbiAgICAtbXMtZmxleC1hbGlnbjogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQtbWQtc3RhcnQge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IHN0YXJ0ICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LW1kLWVuZCB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZW5kICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tY29udGVudC1tZC1jZW50ZXIge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LW1kLWJldHdlZW4ge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IGp1c3RpZnkgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQtbWQtYXJvdW5kIHtcXG4gICAgLW1zLWZsZXgtbGluZS1wYWNrOiBkaXN0cmlidXRlICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQtbWQtc3RyZXRjaCB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBzdHJldGNoICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi1tZC1hdXRvIHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogYXV0byAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi1tZC1zdGFydCB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IHN0YXJ0ICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1zZWxmLW1kLWVuZCB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGVuZCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYtbWQtY2VudGVyIHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYtbWQtYmFzZWxpbmUge1xcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYtbWQtc3RyZXRjaCB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gICAgYWxpZ24tc2VsZjogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcXG4gIC5mbGV4LWxnLXJvdyB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93ICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3cgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LWxnLWNvbHVtbiB7XFxuICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LWxnLXJvdy1yZXZlcnNlIHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2UgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LWxnLWNvbHVtbi1yZXZlcnNlIHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2UgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LWxnLXdyYXAge1xcbiAgICAtbXMtZmxleC13cmFwOiB3cmFwICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtd3JhcDogd3JhcCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbGctbm93cmFwIHtcXG4gICAgLW1zLWZsZXgtd3JhcDogbm93cmFwICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtd3JhcDogbm93cmFwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1sZy13cmFwLXJldmVyc2Uge1xcbiAgICAtbXMtZmxleC13cmFwOiB3cmFwLXJldmVyc2UgIWltcG9ydGFudDtcXG4gICAgZmxleC13cmFwOiB3cmFwLXJldmVyc2UgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LWxnLWZpbGwge1xcbiAgICAtbXMtZmxleDogMSAxIGF1dG8gIWltcG9ydGFudDtcXG4gICAgZmxleDogMSAxIGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LWxnLWdyb3ctMCB7XFxuICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAwICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZ3JvdzogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgtbGctZ3Jvdy0xIHtcXG4gICAgLW1zLWZsZXgtcG9zaXRpdmU6IDEgIWltcG9ydGFudDtcXG4gICAgZmxleC1ncm93OiAxICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1sZy1zaHJpbmstMCB7XFxuICAgIC1tcy1mbGV4LW5lZ2F0aXZlOiAwICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtc2hyaW5rOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC1sZy1zaHJpbmstMSB7XFxuICAgIC1tcy1mbGV4LW5lZ2F0aXZlOiAxICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtc2hyaW5rOiAxICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuanVzdGlmeS1jb250ZW50LWxnLXN0YXJ0IHtcXG4gICAgLW1zLWZsZXgtcGFjazogc3RhcnQgIWltcG9ydGFudDtcXG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuanVzdGlmeS1jb250ZW50LWxnLWVuZCB7XFxuICAgIC1tcy1mbGV4LXBhY2s6IGVuZCAhaW1wb3J0YW50O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuanVzdGlmeS1jb250ZW50LWxnLWNlbnRlciB7XFxuICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmp1c3RpZnktY29udGVudC1sZy1iZXR3ZWVuIHtcXG4gICAgLW1zLWZsZXgtcGFjazoganVzdGlmeSAhaW1wb3J0YW50O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW4gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQtbGctYXJvdW5kIHtcXG4gICAgLW1zLWZsZXgtcGFjazogZGlzdHJpYnV0ZSAhaW1wb3J0YW50O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLWxnLXN0YXJ0IHtcXG4gICAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0ICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24taXRlbXMtbGctZW5kIHtcXG4gICAgLW1zLWZsZXgtYWxpZ246IGVuZCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1pdGVtczogZmxleC1lbmQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1pdGVtcy1sZy1jZW50ZXIge1xcbiAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1pdGVtcy1sZy1iYXNlbGluZSB7XFxuICAgIC1tcy1mbGV4LWFsaWduOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1pdGVtcy1sZy1zdHJldGNoIHtcXG4gICAgLW1zLWZsZXgtYWxpZ246IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gICAgYWxpZ24taXRlbXM6IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LWxnLXN0YXJ0IHtcXG4gICAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdGFydCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tY29udGVudC1sZy1lbmQge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IGVuZCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBmbGV4LWVuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQtbGctY2VudGVyIHtcXG4gICAgLW1zLWZsZXgtbGluZS1wYWNrOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tY29udGVudC1sZy1iZXR3ZWVuIHtcXG4gICAgLW1zLWZsZXgtbGluZS1wYWNrOiBqdXN0aWZ5ICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW4gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LWxnLWFyb3VuZCB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZGlzdHJpYnV0ZSAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LWxnLXN0cmV0Y2gge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gICAgYWxpZ24tY29udGVudDogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYtbGctYXV0byB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGF1dG8gIWltcG9ydGFudDtcXG4gICAgYWxpZ24tc2VsZjogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYtbGctc3RhcnQge1xcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBzdGFydCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi1sZy1lbmQge1xcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBlbmQgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tc2VsZjogZmxleC1lbmQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1zZWxmLWxnLWNlbnRlciB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1zZWxmLWxnLWJhc2VsaW5lIHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogYmFzZWxpbmUgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tc2VsZjogYmFzZWxpbmUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1zZWxmLWxnLXN0cmV0Y2gge1xcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBzdHJldGNoICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xcbiAgLmZsZXgteGwtcm93IHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3cgIWltcG9ydGFudDtcXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdyAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgteGwtY29sdW1uIHtcXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4gIWltcG9ydGFudDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbiAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgteGwtcm93LXJldmVyc2Uge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgteGwtY29sdW1uLXJldmVyc2Uge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlICFpbXBvcnRhbnQ7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgteGwtd3JhcCB7XFxuICAgIC1tcy1mbGV4LXdyYXA6IHdyYXAgIWltcG9ydGFudDtcXG4gICAgZmxleC13cmFwOiB3cmFwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC14bC1ub3dyYXAge1xcbiAgICAtbXMtZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDtcXG4gICAgZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LXhsLXdyYXAtcmV2ZXJzZSB7XFxuICAgIC1tcy1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgICBmbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgteGwtZmlsbCB7XFxuICAgIC1tcy1mbGV4OiAxIDEgYXV0byAhaW1wb3J0YW50O1xcbiAgICBmbGV4OiAxIDEgYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsZXgteGwtZ3Jvdy0wIHtcXG4gICAgLW1zLWZsZXgtcG9zaXRpdmU6IDAgIWltcG9ydGFudDtcXG4gICAgZmxleC1ncm93OiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxleC14bC1ncm93LTEge1xcbiAgICAtbXMtZmxleC1wb3NpdGl2ZTogMSAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWdyb3c6IDEgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LXhsLXNocmluay0wIHtcXG4gICAgLW1zLWZsZXgtbmVnYXRpdmU6IDAgIWltcG9ydGFudDtcXG4gICAgZmxleC1zaHJpbms6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbGV4LXhsLXNocmluay0xIHtcXG4gICAgLW1zLWZsZXgtbmVnYXRpdmU6IDEgIWltcG9ydGFudDtcXG4gICAgZmxleC1zaHJpbms6IDEgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQteGwtc3RhcnQge1xcbiAgICAtbXMtZmxleC1wYWNrOiBzdGFydCAhaW1wb3J0YW50O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQteGwtZW5kIHtcXG4gICAgLW1zLWZsZXgtcGFjazogZW5kICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5qdXN0aWZ5LWNvbnRlbnQteGwtY2VudGVyIHtcXG4gICAgLW1zLWZsZXgtcGFjazogY2VudGVyICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuanVzdGlmeS1jb250ZW50LXhsLWJldHdlZW4ge1xcbiAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5ICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmp1c3RpZnktY29udGVudC14bC1hcm91bmQge1xcbiAgICAtbXMtZmxleC1wYWNrOiBkaXN0cmlidXRlICFpbXBvcnRhbnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24taXRlbXMteGwtc3RhcnQge1xcbiAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQgIWltcG9ydGFudDtcXG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1pdGVtcy14bC1lbmQge1xcbiAgICAtbXMtZmxleC1hbGlnbjogZW5kICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLXhsLWNlbnRlciB7XFxuICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLXhsLWJhc2VsaW5lIHtcXG4gICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWl0ZW1zLXhsLXN0cmV0Y2gge1xcbiAgICAtbXMtZmxleC1hbGlnbjogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQteGwtc3RhcnQge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IHN0YXJ0ICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LXhsLWVuZCB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZW5kICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tY29udGVudC14bC1jZW50ZXIge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1jb250ZW50LXhsLWJldHdlZW4ge1xcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6IGp1c3RpZnkgIWltcG9ydGFudDtcXG4gICAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQteGwtYXJvdW5kIHtcXG4gICAgLW1zLWZsZXgtbGluZS1wYWNrOiBkaXN0cmlidXRlICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLWNvbnRlbnQteGwtc3RyZXRjaCB7XFxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1jb250ZW50OiBzdHJldGNoICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi14bC1hdXRvIHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogYXV0byAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuYWxpZ24tc2VsZi14bC1zdGFydCB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IHN0YXJ0ICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5hbGlnbi1zZWxmLXhsLWVuZCB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGVuZCAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYteGwtY2VudGVyIHtcXG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7XFxuICAgIGFsaWduLXNlbGY6IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYteGwtYmFzZWxpbmUge1xcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbiAgICBhbGlnbi1zZWxmOiBiYXNlbGluZSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmFsaWduLXNlbGYteGwtc3RyZXRjaCB7XFxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IHN0cmV0Y2ggIWltcG9ydGFudDtcXG4gICAgYWxpZ24tc2VsZjogc3RyZXRjaCAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG4uZmxvYXQtbGVmdCB7XFxuICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZmxvYXQtcmlnaHQge1xcbiAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5mbG9hdC1ub25lIHtcXG4gIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLmZsb2F0LXNtLWxlZnQge1xcbiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsb2F0LXNtLXJpZ2h0IHtcXG4gICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxvYXQtc20tbm9uZSB7XFxuICAgIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLmZsb2F0LW1kLWxlZnQge1xcbiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsb2F0LW1kLXJpZ2h0IHtcXG4gICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxvYXQtbWQtbm9uZSB7XFxuICAgIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xcbiAgLmZsb2F0LWxnLWxlZnQge1xcbiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsb2F0LWxnLXJpZ2h0IHtcXG4gICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAuZmxvYXQtbGctbm9uZSB7XFxuICAgIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC5mbG9hdC14bC1sZWZ0IHtcXG4gICAgZmxvYXQ6IGxlZnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5mbG9hdC14bC1yaWdodCB7XFxuICAgIGZsb2F0OiByaWdodCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmZsb2F0LXhsLW5vbmUge1xcbiAgICBmbG9hdDogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG4ub3ZlcmZsb3ctYXV0byB7XFxuICBvdmVyZmxvdzogYXV0byAhaW1wb3J0YW50O1xcbn1cXG5cXG4ub3ZlcmZsb3ctaGlkZGVuIHtcXG4gIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcXG59XFxuXFxuLnBvc2l0aW9uLXN0YXRpYyB7XFxuICBwb3NpdGlvbjogc3RhdGljICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wb3NpdGlvbi1yZWxhdGl2ZSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcXG59XFxuXFxuLnBvc2l0aW9uLWFic29sdXRlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucG9zaXRpb24tZml4ZWQge1xcbiAgcG9zaXRpb246IGZpeGVkICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wb3NpdGlvbi1zdGlja3kge1xcbiAgcG9zaXRpb246IC13ZWJraXQtc3RpY2t5ICFpbXBvcnRhbnQ7XFxuICBwb3NpdGlvbjogc3RpY2t5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5maXhlZC10b3Age1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgdG9wOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBsZWZ0OiAwO1xcbiAgei1pbmRleDogMTAzMDtcXG59XFxuXFxuLmZpeGVkLWJvdHRvbSB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICB6LWluZGV4OiAxMDMwO1xcbn1cXG5cXG5Ac3VwcG9ydHMgKChwb3NpdGlvbjogLXdlYmtpdC1zdGlja3kpIG9yIChwb3NpdGlvbjogc3RpY2t5KSkge1xcbiAgLnN0aWNreS10b3Age1xcbiAgICBwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7XFxuICAgIHBvc2l0aW9uOiBzdGlja3k7XFxuICAgIHRvcDogMDtcXG4gICAgei1pbmRleDogMTAyMDtcXG4gIH1cXG59XFxuXFxuLnNyLW9ubHkge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6IDFweDtcXG4gIGhlaWdodDogMXB4O1xcbiAgcGFkZGluZzogMDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBjbGlwOiByZWN0KDAsIDAsIDAsIDApO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIGJvcmRlcjogMDtcXG59XFxuXFxuLnNyLW9ubHktZm9jdXNhYmxlOmFjdGl2ZSwgLnNyLW9ubHktZm9jdXNhYmxlOmZvY3VzIHtcXG4gIHBvc2l0aW9uOiBzdGF0aWM7XFxuICB3aWR0aDogYXV0bztcXG4gIGhlaWdodDogYXV0bztcXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xcbiAgY2xpcDogYXV0bztcXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XFxufVxcblxcbi5zaGFkb3ctc20ge1xcbiAgYm94LXNoYWRvdzogMCAwLjEyNXJlbSAwLjI1cmVtIHJnYmEoMCwgMCwgMCwgMC4wNzUpICFpbXBvcnRhbnQ7XFxufVxcblxcbi5zaGFkb3cge1xcbiAgYm94LXNoYWRvdzogMCAwLjVyZW0gMXJlbSByZ2JhKDAsIDAsIDAsIDAuMTUpICFpbXBvcnRhbnQ7XFxufVxcblxcbi5zaGFkb3ctbGcge1xcbiAgYm94LXNoYWRvdzogMCAxcmVtIDNyZW0gcmdiYSgwLCAwLCAwLCAwLjE3NSkgIWltcG9ydGFudDtcXG59XFxuXFxuLnNoYWRvdy1ub25lIHtcXG4gIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuXFxuLnctMjUge1xcbiAgd2lkdGg6IDI1JSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udy01MCB7XFxuICB3aWR0aDogNTAlICFpbXBvcnRhbnQ7XFxufVxcblxcbi53LTc1IHtcXG4gIHdpZHRoOiA3NSUgIWltcG9ydGFudDtcXG59XFxuXFxuLnctMTAwIHtcXG4gIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XFxufVxcblxcbi53LWF1dG8ge1xcbiAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDtcXG59XFxuXFxuLmgtMjUge1xcbiAgaGVpZ2h0OiAyNSUgIWltcG9ydGFudDtcXG59XFxuXFxuLmgtNTAge1xcbiAgaGVpZ2h0OiA1MCUgIWltcG9ydGFudDtcXG59XFxuXFxuLmgtNzUge1xcbiAgaGVpZ2h0OiA3NSUgIWltcG9ydGFudDtcXG59XFxuXFxuLmgtMTAwIHtcXG4gIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uaC1hdXRvIHtcXG4gIGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubXctMTAwIHtcXG4gIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWgtMTAwIHtcXG4gIG1heC1oZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcXG59XFxuXFxuLm1pbi12dy0xMDAge1xcbiAgbWluLXdpZHRoOiAxMDB2dyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWluLXZoLTEwMCB7XFxuICBtaW4taGVpZ2h0OiAxMDB2aCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udnctMTAwIHtcXG4gIHdpZHRoOiAxMDB2dyAhaW1wb3J0YW50O1xcbn1cXG5cXG4udmgtMTAwIHtcXG4gIGhlaWdodDogMTAwdmggIWltcG9ydGFudDtcXG59XFxuXFxuLnN0cmV0Y2hlZC1saW5rOjphZnRlciB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICB6LWluZGV4OiAxO1xcbiAgcG9pbnRlci1ldmVudHM6IGF1dG87XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7XFxufVxcblxcbi5tLTAge1xcbiAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC0wLFxcbi5teS0wIHtcXG4gIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm1yLTAsXFxuLm14LTAge1xcbiAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tYi0wLFxcbi5teS0wIHtcXG4gIG1hcmdpbi1ib3R0b206IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLTAsXFxuLm14LTAge1xcbiAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm0tMSB7XFxuICBtYXJnaW46IDAuMjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm10LTEsXFxuLm15LTEge1xcbiAgbWFyZ2luLXRvcDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubXItMSxcXG4ubXgtMSB7XFxuICBtYXJnaW4tcmlnaHQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1iLTEsXFxuLm15LTEge1xcbiAgbWFyZ2luLWJvdHRvbTogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWwtMSxcXG4ubXgtMSB7XFxuICBtYXJnaW4tbGVmdDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubS0yIHtcXG4gIG1hcmdpbjogMC41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC0yLFxcbi5teS0yIHtcXG4gIG1hcmdpbi10b3A6IDAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubXItMixcXG4ubXgtMiB7XFxuICBtYXJnaW4tcmlnaHQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWItMixcXG4ubXktMiB7XFxuICBtYXJnaW4tYm90dG9tOiAwLjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLTIsXFxuLm14LTIge1xcbiAgbWFyZ2luLWxlZnQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubS0zIHtcXG4gIG1hcmdpbjogMXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubXQtMyxcXG4ubXktMyB7XFxuICBtYXJnaW4tdG9wOiAxcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tci0zLFxcbi5teC0zIHtcXG4gIG1hcmdpbi1yaWdodDogMXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWItMyxcXG4ubXktMyB7XFxuICBtYXJnaW4tYm90dG9tOiAxcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tbC0zLFxcbi5teC0zIHtcXG4gIG1hcmdpbi1sZWZ0OiAxcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tLTQge1xcbiAgbWFyZ2luOiAxLjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm10LTQsXFxuLm15LTQge1xcbiAgbWFyZ2luLXRvcDogMS41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tci00LFxcbi5teC00IHtcXG4gIG1hcmdpbi1yaWdodDogMS41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tYi00LFxcbi5teS00IHtcXG4gIG1hcmdpbi1ib3R0b206IDEuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWwtNCxcXG4ubXgtNCB7XFxuICBtYXJnaW4tbGVmdDogMS41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tLTUge1xcbiAgbWFyZ2luOiAzcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC01LFxcbi5teS01IHtcXG4gIG1hcmdpbi10b3A6IDNyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1yLTUsXFxuLm14LTUge1xcbiAgbWFyZ2luLXJpZ2h0OiAzcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tYi01LFxcbi5teS01IHtcXG4gIG1hcmdpbi1ib3R0b206IDNyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLTUsXFxuLm14LTUge1xcbiAgbWFyZ2luLWxlZnQ6IDNyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLnAtMCB7XFxuICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wdC0wLFxcbi5weS0wIHtcXG4gIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wci0wLFxcbi5weC0wIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnBiLTAsXFxuLnB5LTAge1xcbiAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnBsLTAsXFxuLnB4LTAge1xcbiAgcGFkZGluZy1sZWZ0OiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wLTEge1xcbiAgcGFkZGluZzogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHQtMSxcXG4ucHktMSB7XFxuICBwYWRkaW5nLXRvcDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHItMSxcXG4ucHgtMSB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wYi0xLFxcbi5weS0xIHtcXG4gIHBhZGRpbmctYm90dG9tOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wbC0xLFxcbi5weC0xIHtcXG4gIHBhZGRpbmctbGVmdDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucC0yIHtcXG4gIHBhZGRpbmc6IDAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHQtMixcXG4ucHktMiB7XFxuICBwYWRkaW5nLXRvcDogMC41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wci0yLFxcbi5weC0yIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGItMixcXG4ucHktMiB7XFxuICBwYWRkaW5nLWJvdHRvbTogMC41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wbC0yLFxcbi5weC0yIHtcXG4gIHBhZGRpbmctbGVmdDogMC41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wLTMge1xcbiAgcGFkZGluZzogMXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHQtMyxcXG4ucHktMyB7XFxuICBwYWRkaW5nLXRvcDogMXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHItMyxcXG4ucHgtMyB7XFxuICBwYWRkaW5nLXJpZ2h0OiAxcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wYi0zLFxcbi5weS0zIHtcXG4gIHBhZGRpbmctYm90dG9tOiAxcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wbC0zLFxcbi5weC0zIHtcXG4gIHBhZGRpbmctbGVmdDogMXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucC00IHtcXG4gIHBhZGRpbmc6IDEuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHQtNCxcXG4ucHktNCB7XFxuICBwYWRkaW5nLXRvcDogMS41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wci00LFxcbi5weC00IHtcXG4gIHBhZGRpbmctcmlnaHQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucGItNCxcXG4ucHktNCB7XFxuICBwYWRkaW5nLWJvdHRvbTogMS41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wbC00LFxcbi5weC00IHtcXG4gIHBhZGRpbmctbGVmdDogMS41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wLTUge1xcbiAgcGFkZGluZzogM3JlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHQtNSxcXG4ucHktNSB7XFxuICBwYWRkaW5nLXRvcDogM3JlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucHItNSxcXG4ucHgtNSB7XFxuICBwYWRkaW5nLXJpZ2h0OiAzcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wYi01LFxcbi5weS01IHtcXG4gIHBhZGRpbmctYm90dG9tOiAzcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5wbC01LFxcbi5weC01IHtcXG4gIHBhZGRpbmctbGVmdDogM3JlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubS1uMSB7XFxuICBtYXJnaW46IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC1uMSxcXG4ubXktbjEge1xcbiAgbWFyZ2luLXRvcDogLTAuMjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1yLW4xLFxcbi5teC1uMSB7XFxuICBtYXJnaW4tcmlnaHQ6IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tYi1uMSxcXG4ubXktbjEge1xcbiAgbWFyZ2luLWJvdHRvbTogLTAuMjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLW4xLFxcbi5teC1uMSB7XFxuICBtYXJnaW4tbGVmdDogLTAuMjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm0tbjIge1xcbiAgbWFyZ2luOiAtMC41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC1uMixcXG4ubXktbjIge1xcbiAgbWFyZ2luLXRvcDogLTAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubXItbjIsXFxuLm14LW4yIHtcXG4gIG1hcmdpbi1yaWdodDogLTAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWItbjIsXFxuLm15LW4yIHtcXG4gIG1hcmdpbi1ib3R0b206IC0wLjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLW4yLFxcbi5teC1uMiB7XFxuICBtYXJnaW4tbGVmdDogLTAuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubS1uMyB7XFxuICBtYXJnaW46IC0xcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC1uMyxcXG4ubXktbjMge1xcbiAgbWFyZ2luLXRvcDogLTFyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1yLW4zLFxcbi5teC1uMyB7XFxuICBtYXJnaW4tcmlnaHQ6IC0xcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tYi1uMyxcXG4ubXktbjMge1xcbiAgbWFyZ2luLWJvdHRvbTogLTFyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLW4zLFxcbi5teC1uMyB7XFxuICBtYXJnaW4tbGVmdDogLTFyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm0tbjQge1xcbiAgbWFyZ2luOiAtMS41cmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC1uNCxcXG4ubXktbjQge1xcbiAgbWFyZ2luLXRvcDogLTEuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubXItbjQsXFxuLm14LW40IHtcXG4gIG1hcmdpbi1yaWdodDogLTEuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWItbjQsXFxuLm15LW40IHtcXG4gIG1hcmdpbi1ib3R0b206IC0xLjVyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLW40LFxcbi5teC1uNCB7XFxuICBtYXJnaW4tbGVmdDogLTEuNXJlbSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubS1uNSB7XFxuICBtYXJnaW46IC0zcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tdC1uNSxcXG4ubXktbjUge1xcbiAgbWFyZ2luLXRvcDogLTNyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1yLW41LFxcbi5teC1uNSB7XFxuICBtYXJnaW4tcmlnaHQ6IC0zcmVtICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tYi1uNSxcXG4ubXktbjUge1xcbiAgbWFyZ2luLWJvdHRvbTogLTNyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLW41LFxcbi5teC1uNSB7XFxuICBtYXJnaW4tbGVmdDogLTNyZW0gIWltcG9ydGFudDtcXG59XFxuXFxuLm0tYXV0byB7XFxuICBtYXJnaW46IGF1dG8gIWltcG9ydGFudDtcXG59XFxuXFxuLm10LWF1dG8sXFxuLm15LWF1dG8ge1xcbiAgbWFyZ2luLXRvcDogYXV0byAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubXItYXV0byxcXG4ubXgtYXV0byB7XFxuICBtYXJnaW4tcmlnaHQ6IGF1dG8gIWltcG9ydGFudDtcXG59XFxuXFxuLm1iLWF1dG8sXFxuLm15LWF1dG8ge1xcbiAgbWFyZ2luLWJvdHRvbTogYXV0byAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWwtYXV0byxcXG4ubXgtYXV0byB7XFxuICBtYXJnaW4tbGVmdDogYXV0byAhaW1wb3J0YW50O1xcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIHtcXG4gIC5tLXNtLTAge1xcbiAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1zbS0wLFxcbiAgLm15LXNtLTAge1xcbiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItc20tMCxcXG4gIC5teC1zbS0wIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItc20tMCxcXG4gIC5teS1zbS0wIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLXNtLTAsXFxuICAubXgtc20tMCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1zbS0xIHtcXG4gICAgbWFyZ2luOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtc20tMSxcXG4gIC5teS1zbS0xIHtcXG4gICAgbWFyZ2luLXRvcDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXNtLTEsXFxuICAubXgtc20tMSB7XFxuICAgIG1hcmdpbi1yaWdodDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXNtLTEsXFxuICAubXktc20tMSB7XFxuICAgIG1hcmdpbi1ib3R0b206IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1zbS0xLFxcbiAgLm14LXNtLTEge1xcbiAgICBtYXJnaW4tbGVmdDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tc20tMiB7XFxuICAgIG1hcmdpbjogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtc20tMixcXG4gIC5teS1zbS0yIHtcXG4gICAgbWFyZ2luLXRvcDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItc20tMixcXG4gIC5teC1zbS0yIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1zbS0yLFxcbiAgLm15LXNtLTIge1xcbiAgICBtYXJnaW4tYm90dG9tOiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1zbS0yLFxcbiAgLm14LXNtLTIge1xcbiAgICBtYXJnaW4tbGVmdDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1zbS0zIHtcXG4gICAgbWFyZ2luOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtc20tMyxcXG4gIC5teS1zbS0zIHtcXG4gICAgbWFyZ2luLXRvcDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXNtLTMsXFxuICAubXgtc20tMyB7XFxuICAgIG1hcmdpbi1yaWdodDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXNtLTMsXFxuICAubXktc20tMyB7XFxuICAgIG1hcmdpbi1ib3R0b206IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1zbS0zLFxcbiAgLm14LXNtLTMge1xcbiAgICBtYXJnaW4tbGVmdDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tc20tNCB7XFxuICAgIG1hcmdpbjogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtc20tNCxcXG4gIC5teS1zbS00IHtcXG4gICAgbWFyZ2luLXRvcDogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItc20tNCxcXG4gIC5teC1zbS00IHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1zbS00LFxcbiAgLm15LXNtLTQge1xcbiAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1zbS00LFxcbiAgLm14LXNtLTQge1xcbiAgICBtYXJnaW4tbGVmdDogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1zbS01IHtcXG4gICAgbWFyZ2luOiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtc20tNSxcXG4gIC5teS1zbS01IHtcXG4gICAgbWFyZ2luLXRvcDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXNtLTUsXFxuICAubXgtc20tNSB7XFxuICAgIG1hcmdpbi1yaWdodDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXNtLTUsXFxuICAubXktc20tNSB7XFxuICAgIG1hcmdpbi1ib3R0b206IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1zbS01LFxcbiAgLm14LXNtLTUge1xcbiAgICBtYXJnaW4tbGVmdDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnAtc20tMCB7XFxuICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC1zbS0wLFxcbiAgLnB5LXNtLTAge1xcbiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLXNtLTAsXFxuICAucHgtc20tMCB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYi1zbS0wLFxcbiAgLnB5LXNtLTAge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLXNtLTAsXFxuICAucHgtc20tMCB7XFxuICAgIHBhZGRpbmctbGVmdDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnAtc20tMSB7XFxuICAgIHBhZGRpbmc6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC1zbS0xLFxcbiAgLnB5LXNtLTEge1xcbiAgICBwYWRkaW5nLXRvcDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLXNtLTEsXFxuICAucHgtc20tMSB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYi1zbS0xLFxcbiAgLnB5LXNtLTEge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLXNtLTEsXFxuICAucHgtc20tMSB7XFxuICAgIHBhZGRpbmctbGVmdDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnAtc20tMiB7XFxuICAgIHBhZGRpbmc6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnB0LXNtLTIsXFxuICAucHktc20tMiB7XFxuICAgIHBhZGRpbmctdG9wOiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci1zbS0yLFxcbiAgLnB4LXNtLTIge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYi1zbS0yLFxcbiAgLnB5LXNtLTIge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGwtc20tMixcXG4gIC5weC1zbS0yIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLXNtLTMge1xcbiAgICBwYWRkaW5nOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQtc20tMyxcXG4gIC5weS1zbS0zIHtcXG4gICAgcGFkZGluZy10b3A6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci1zbS0zLFxcbiAgLnB4LXNtLTMge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGItc20tMyxcXG4gIC5weS1zbS0zIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC1zbS0zLFxcbiAgLnB4LXNtLTMge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLXNtLTQge1xcbiAgICBwYWRkaW5nOiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC1zbS00LFxcbiAgLnB5LXNtLTQge1xcbiAgICBwYWRkaW5nLXRvcDogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHItc20tNCxcXG4gIC5weC1zbS00IHtcXG4gICAgcGFkZGluZy1yaWdodDogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGItc20tNCxcXG4gIC5weS1zbS00IHtcXG4gICAgcGFkZGluZy1ib3R0b206IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLXNtLTQsXFxuICAucHgtc20tNCB7XFxuICAgIHBhZGRpbmctbGVmdDogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC1zbS01IHtcXG4gICAgcGFkZGluZzogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnB0LXNtLTUsXFxuICAucHktc20tNSB7XFxuICAgIHBhZGRpbmctdG9wOiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHItc20tNSxcXG4gIC5weC1zbS01IHtcXG4gICAgcGFkZGluZy1yaWdodDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLXNtLTUsXFxuICAucHktc20tNSB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGwtc20tNSxcXG4gIC5weC1zbS01IHtcXG4gICAgcGFkZGluZy1sZWZ0OiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1zbS1uMSB7XFxuICAgIG1hcmdpbjogLTAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1zbS1uMSxcXG4gIC5teS1zbS1uMSB7XFxuICAgIG1hcmdpbi10b3A6IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItc20tbjEsXFxuICAubXgtc20tbjEge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItc20tbjEsXFxuICAubXktc20tbjEge1xcbiAgICBtYXJnaW4tYm90dG9tOiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLXNtLW4xLFxcbiAgLm14LXNtLW4xIHtcXG4gICAgbWFyZ2luLWxlZnQ6IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1zbS1uMiB7XFxuICAgIG1hcmdpbjogLTAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXNtLW4yLFxcbiAgLm15LXNtLW4yIHtcXG4gICAgbWFyZ2luLXRvcDogLTAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXNtLW4yLFxcbiAgLm14LXNtLW4yIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItc20tbjIsXFxuICAubXktc20tbjIge1xcbiAgICBtYXJnaW4tYm90dG9tOiAtMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtc20tbjIsXFxuICAubXgtc20tbjIge1xcbiAgICBtYXJnaW4tbGVmdDogLTAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tc20tbjMge1xcbiAgICBtYXJnaW46IC0xcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtc20tbjMsXFxuICAubXktc20tbjMge1xcbiAgICBtYXJnaW4tdG9wOiAtMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXNtLW4zLFxcbiAgLm14LXNtLW4zIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXNtLW4zLFxcbiAgLm15LXNtLW4zIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1zbS1uMyxcXG4gIC5teC1zbS1uMyB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tc20tbjQge1xcbiAgICBtYXJnaW46IC0xLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1zbS1uNCxcXG4gIC5teS1zbS1uNCB7XFxuICAgIG1hcmdpbi10b3A6IC0xLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1zbS1uNCxcXG4gIC5teC1zbS1uNCB7XFxuICAgIG1hcmdpbi1yaWdodDogLTEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXNtLW40LFxcbiAgLm15LXNtLW40IHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLXNtLW40LFxcbiAgLm14LXNtLW40IHtcXG4gICAgbWFyZ2luLWxlZnQ6IC0xLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLXNtLW41IHtcXG4gICAgbWFyZ2luOiAtM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXNtLW41LFxcbiAgLm15LXNtLW41IHtcXG4gICAgbWFyZ2luLXRvcDogLTNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1zbS1uNSxcXG4gIC5teC1zbS1uNSB7XFxuICAgIG1hcmdpbi1yaWdodDogLTNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1zbS1uNSxcXG4gIC5teS1zbS1uNSB7XFxuICAgIG1hcmdpbi1ib3R0b206IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtc20tbjUsXFxuICAubXgtc20tbjUge1xcbiAgICBtYXJnaW4tbGVmdDogLTNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLXNtLWF1dG8ge1xcbiAgICBtYXJnaW46IGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1zbS1hdXRvLFxcbiAgLm15LXNtLWF1dG8ge1xcbiAgICBtYXJnaW4tdG9wOiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItc20tYXV0byxcXG4gIC5teC1zbS1hdXRvIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItc20tYXV0byxcXG4gIC5teS1zbS1hdXRvIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLXNtLWF1dG8sXFxuICAubXgtc20tYXV0byB7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLm0tbWQtMCB7XFxuICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LW1kLTAsXFxuICAubXktbWQtMCB7XFxuICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1tZC0wLFxcbiAgLm14LW1kLTAge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1tZC0wLFxcbiAgLm15LW1kLTAge1xcbiAgICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbWQtMCxcXG4gIC5teC1tZC0wIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLW1kLTEge1xcbiAgICBtYXJnaW46IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1tZC0xLFxcbiAgLm15LW1kLTEge1xcbiAgICBtYXJnaW4tdG9wOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItbWQtMSxcXG4gIC5teC1tZC0xIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbWQtMSxcXG4gIC5teS1tZC0xIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLW1kLTEsXFxuICAubXgtbWQtMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1tZC0yIHtcXG4gICAgbWFyZ2luOiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1tZC0yLFxcbiAgLm15LW1kLTIge1xcbiAgICBtYXJnaW4tdG9wOiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1tZC0yLFxcbiAgLm14LW1kLTIge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLW1kLTIsXFxuICAubXktbWQtMiB7XFxuICAgIG1hcmdpbi1ib3R0b206IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLW1kLTIsXFxuICAubXgtbWQtMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLW1kLTMge1xcbiAgICBtYXJnaW46IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1tZC0zLFxcbiAgLm15LW1kLTMge1xcbiAgICBtYXJnaW4tdG9wOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItbWQtMyxcXG4gIC5teC1tZC0zIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbWQtMyxcXG4gIC5teS1tZC0zIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLW1kLTMsXFxuICAubXgtbWQtMyB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1tZC00IHtcXG4gICAgbWFyZ2luOiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1tZC00LFxcbiAgLm15LW1kLTQge1xcbiAgICBtYXJnaW4tdG9wOiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1tZC00LFxcbiAgLm14LW1kLTQge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLW1kLTQsXFxuICAubXktbWQtNCB7XFxuICAgIG1hcmdpbi1ib3R0b206IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLW1kLTQsXFxuICAubXgtbWQtNCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLW1kLTUge1xcbiAgICBtYXJnaW46IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1tZC01LFxcbiAgLm15LW1kLTUge1xcbiAgICBtYXJnaW4tdG9wOiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItbWQtNSxcXG4gIC5teC1tZC01IHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbWQtNSxcXG4gIC5teS1tZC01IHtcXG4gICAgbWFyZ2luLWJvdHRvbTogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLW1kLTUsXFxuICAubXgtbWQtNSB7XFxuICAgIG1hcmdpbi1sZWZ0OiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC1tZC0wIHtcXG4gICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnB0LW1kLTAsXFxuICAucHktbWQtMCB7XFxuICAgIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHItbWQtMCxcXG4gIC5weC1tZC0wIHtcXG4gICAgcGFkZGluZy1yaWdodDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLW1kLTAsXFxuICAucHktbWQtMCB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGwtbWQtMCxcXG4gIC5weC1tZC0wIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC1tZC0xIHtcXG4gICAgcGFkZGluZzogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnB0LW1kLTEsXFxuICAucHktbWQtMSB7XFxuICAgIHBhZGRpbmctdG9wOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHItbWQtMSxcXG4gIC5weC1tZC0xIHtcXG4gICAgcGFkZGluZy1yaWdodDogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLW1kLTEsXFxuICAucHktbWQtMSB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGwtbWQtMSxcXG4gIC5weC1tZC0xIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC1tZC0yIHtcXG4gICAgcGFkZGluZzogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQtbWQtMixcXG4gIC5weS1tZC0yIHtcXG4gICAgcGFkZGluZy10b3A6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLW1kLTIsXFxuICAucHgtbWQtMiB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLW1kLTIsXFxuICAucHktbWQtMiB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC1tZC0yLFxcbiAgLnB4LW1kLTIge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnAtbWQtMyB7XFxuICAgIHBhZGRpbmc6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC1tZC0zLFxcbiAgLnB5LW1kLTMge1xcbiAgICBwYWRkaW5nLXRvcDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLW1kLTMsXFxuICAucHgtbWQtMyB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYi1tZC0zLFxcbiAgLnB5LW1kLTMge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLW1kLTMsXFxuICAucHgtbWQtMyB7XFxuICAgIHBhZGRpbmctbGVmdDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnAtbWQtNCB7XFxuICAgIHBhZGRpbmc6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnB0LW1kLTQsXFxuICAucHktbWQtNCB7XFxuICAgIHBhZGRpbmctdG9wOiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci1tZC00LFxcbiAgLnB4LW1kLTQge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYi1tZC00LFxcbiAgLnB5LW1kLTQge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGwtbWQtNCxcXG4gIC5weC1tZC00IHtcXG4gICAgcGFkZGluZy1sZWZ0OiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLW1kLTUge1xcbiAgICBwYWRkaW5nOiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQtbWQtNSxcXG4gIC5weS1tZC01IHtcXG4gICAgcGFkZGluZy10b3A6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci1tZC01LFxcbiAgLnB4LW1kLTUge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGItbWQtNSxcXG4gIC5weS1tZC01IHtcXG4gICAgcGFkZGluZy1ib3R0b206IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC1tZC01LFxcbiAgLnB4LW1kLTUge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLW1kLW4xIHtcXG4gICAgbWFyZ2luOiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LW1kLW4xLFxcbiAgLm15LW1kLW4xIHtcXG4gICAgbWFyZ2luLXRvcDogLTAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1tZC1uMSxcXG4gIC5teC1tZC1uMSB7XFxuICAgIG1hcmdpbi1yaWdodDogLTAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1tZC1uMSxcXG4gIC5teS1tZC1uMSB7XFxuICAgIG1hcmdpbi1ib3R0b206IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbWQtbjEsXFxuICAubXgtbWQtbjEge1xcbiAgICBtYXJnaW4tbGVmdDogLTAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLW1kLW4yIHtcXG4gICAgbWFyZ2luOiAtMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtbWQtbjIsXFxuICAubXktbWQtbjIge1xcbiAgICBtYXJnaW4tdG9wOiAtMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItbWQtbjIsXFxuICAubXgtbWQtbjIge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1tZC1uMixcXG4gIC5teS1tZC1uMiB7XFxuICAgIG1hcmdpbi1ib3R0b206IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1tZC1uMixcXG4gIC5teC1tZC1uMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1tZC1uMyB7XFxuICAgIG1hcmdpbjogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1tZC1uMyxcXG4gIC5teS1tZC1uMyB7XFxuICAgIG1hcmdpbi10b3A6IC0xcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItbWQtbjMsXFxuICAubXgtbWQtbjMge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0xcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbWQtbjMsXFxuICAubXktbWQtbjMge1xcbiAgICBtYXJnaW4tYm90dG9tOiAtMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLW1kLW4zLFxcbiAgLm14LW1kLW4zIHtcXG4gICAgbWFyZ2luLWxlZnQ6IC0xcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1tZC1uNCB7XFxuICAgIG1hcmdpbjogLTEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LW1kLW40LFxcbiAgLm15LW1kLW40IHtcXG4gICAgbWFyZ2luLXRvcDogLTEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLW1kLW40LFxcbiAgLm14LW1kLW40IHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbWQtbjQsXFxuICAubXktbWQtbjQge1xcbiAgICBtYXJnaW4tYm90dG9tOiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbWQtbjQsXFxuICAubXgtbWQtbjQge1xcbiAgICBtYXJnaW4tbGVmdDogLTEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tbWQtbjUge1xcbiAgICBtYXJnaW46IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtbWQtbjUsXFxuICAubXktbWQtbjUge1xcbiAgICBtYXJnaW4tdG9wOiAtM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLW1kLW41LFxcbiAgLm14LW1kLW41IHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLW1kLW41LFxcbiAgLm15LW1kLW41IHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1tZC1uNSxcXG4gIC5teC1tZC1uNSB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tbWQtYXV0byB7XFxuICAgIG1hcmdpbjogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LW1kLWF1dG8sXFxuICAubXktbWQtYXV0byB7XFxuICAgIG1hcmdpbi10b3A6IGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1tZC1hdXRvLFxcbiAgLm14LW1kLWF1dG8ge1xcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1tZC1hdXRvLFxcbiAgLm15LW1kLWF1dG8ge1xcbiAgICBtYXJnaW4tYm90dG9tOiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbWQtYXV0byxcXG4gIC5teC1tZC1hdXRvIHtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XFxuICAubS1sZy0wIHtcXG4gICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtbGctMCxcXG4gIC5teS1sZy0wIHtcXG4gICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLWxnLTAsXFxuICAubXgtbGctMCB7XFxuICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLWxnLTAsXFxuICAubXktbGctMCB7XFxuICAgIG1hcmdpbi1ib3R0b206IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1sZy0wLFxcbiAgLm14LWxnLTAge1xcbiAgICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tbGctMSB7XFxuICAgIG1hcmdpbjogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LWxnLTEsXFxuICAubXktbGctMSB7XFxuICAgIG1hcmdpbi10b3A6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1sZy0xLFxcbiAgLm14LWxnLTEge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1sZy0xLFxcbiAgLm15LWxnLTEge1xcbiAgICBtYXJnaW4tYm90dG9tOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbGctMSxcXG4gIC5teC1sZy0xIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLWxnLTIge1xcbiAgICBtYXJnaW46IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LWxnLTIsXFxuICAubXktbGctMiB7XFxuICAgIG1hcmdpbi10b3A6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLWxnLTIsXFxuICAubXgtbGctMiB7XFxuICAgIG1hcmdpbi1yaWdodDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbGctMixcXG4gIC5teS1sZy0yIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbGctMixcXG4gIC5teC1sZy0yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tbGctMyB7XFxuICAgIG1hcmdpbjogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LWxnLTMsXFxuICAubXktbGctMyB7XFxuICAgIG1hcmdpbi10b3A6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1sZy0zLFxcbiAgLm14LWxnLTMge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1sZy0zLFxcbiAgLm15LWxnLTMge1xcbiAgICBtYXJnaW4tYm90dG9tOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbGctMyxcXG4gIC5teC1sZy0zIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLWxnLTQge1xcbiAgICBtYXJnaW46IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LWxnLTQsXFxuICAubXktbGctNCB7XFxuICAgIG1hcmdpbi10b3A6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLWxnLTQsXFxuICAubXgtbGctNCB7XFxuICAgIG1hcmdpbi1yaWdodDogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbGctNCxcXG4gIC5teS1sZy00IHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbGctNCxcXG4gIC5teC1sZy00IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tbGctNSB7XFxuICAgIG1hcmdpbjogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LWxnLTUsXFxuICAubXktbGctNSB7XFxuICAgIG1hcmdpbi10b3A6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1sZy01LFxcbiAgLm14LWxnLTUge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1sZy01LFxcbiAgLm15LWxnLTUge1xcbiAgICBtYXJnaW4tYm90dG9tOiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbGctNSxcXG4gIC5teC1sZy01IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLWxnLTAge1xcbiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQtbGctMCxcXG4gIC5weS1sZy0wIHtcXG4gICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci1sZy0wLFxcbiAgLnB4LWxnLTAge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGItbGctMCxcXG4gIC5weS1sZy0wIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC1sZy0wLFxcbiAgLnB4LWxnLTAge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLWxnLTEge1xcbiAgICBwYWRkaW5nOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQtbGctMSxcXG4gIC5weS1sZy0xIHtcXG4gICAgcGFkZGluZy10b3A6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci1sZy0xLFxcbiAgLnB4LWxnLTEge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGItbGctMSxcXG4gIC5weS1sZy0xIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC1sZy0xLFxcbiAgLnB4LWxnLTEge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLWxnLTIge1xcbiAgICBwYWRkaW5nOiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC1sZy0yLFxcbiAgLnB5LWxnLTIge1xcbiAgICBwYWRkaW5nLXRvcDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHItbGctMixcXG4gIC5weC1sZy0yIHtcXG4gICAgcGFkZGluZy1yaWdodDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGItbGctMixcXG4gIC5weS1sZy0yIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLWxnLTIsXFxuICAucHgtbGctMiB7XFxuICAgIHBhZGRpbmctbGVmdDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC1sZy0zIHtcXG4gICAgcGFkZGluZzogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnB0LWxnLTMsXFxuICAucHktbGctMyB7XFxuICAgIHBhZGRpbmctdG9wOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHItbGctMyxcXG4gIC5weC1sZy0zIHtcXG4gICAgcGFkZGluZy1yaWdodDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLWxnLTMsXFxuICAucHktbGctMyB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGwtbGctMyxcXG4gIC5weC1sZy0zIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC1sZy00IHtcXG4gICAgcGFkZGluZzogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQtbGctNCxcXG4gIC5weS1sZy00IHtcXG4gICAgcGFkZGluZy10b3A6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLWxnLTQsXFxuICAucHgtbGctNCB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLWxnLTQsXFxuICAucHktbGctNCB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC1sZy00LFxcbiAgLnB4LWxnLTQge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnAtbGctNSB7XFxuICAgIHBhZGRpbmc6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC1sZy01LFxcbiAgLnB5LWxnLTUge1xcbiAgICBwYWRkaW5nLXRvcDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLWxnLTUsXFxuICAucHgtbGctNSB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYi1sZy01LFxcbiAgLnB5LWxnLTUge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLWxnLTUsXFxuICAucHgtbGctNSB7XFxuICAgIHBhZGRpbmctbGVmdDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tbGctbjEge1xcbiAgICBtYXJnaW46IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtbGctbjEsXFxuICAubXktbGctbjEge1xcbiAgICBtYXJnaW4tdG9wOiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLWxnLW4xLFxcbiAgLm14LWxnLW4xIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLWxnLW4xLFxcbiAgLm15LWxnLW4xIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1sZy1uMSxcXG4gIC5teC1sZy1uMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0tbGctbjIge1xcbiAgICBtYXJnaW46IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1sZy1uMixcXG4gIC5teS1sZy1uMiB7XFxuICAgIG1hcmdpbi10b3A6IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1sZy1uMixcXG4gIC5teC1sZy1uMiB7XFxuICAgIG1hcmdpbi1yaWdodDogLTAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLWxnLW4yLFxcbiAgLm15LWxnLW4yIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLWxnLW4yLFxcbiAgLm14LWxnLW4yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLWxnLW4zIHtcXG4gICAgbWFyZ2luOiAtMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LWxnLW4zLFxcbiAgLm15LWxnLW4zIHtcXG4gICAgbWFyZ2luLXRvcDogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci1sZy1uMyxcXG4gIC5teC1sZy1uMyB7XFxuICAgIG1hcmdpbi1yaWdodDogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1sZy1uMyxcXG4gIC5teS1sZy1uMyB7XFxuICAgIG1hcmdpbi1ib3R0b206IC0xcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwtbGctbjMsXFxuICAubXgtbGctbjMge1xcbiAgICBtYXJnaW4tbGVmdDogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLWxnLW40IHtcXG4gICAgbWFyZ2luOiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtbGctbjQsXFxuICAubXktbGctbjQge1xcbiAgICBtYXJnaW4tdG9wOiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItbGctbjQsXFxuICAubXgtbGctbjQge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0xLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi1sZy1uNCxcXG4gIC5teS1sZy1uNCB7XFxuICAgIG1hcmdpbi1ib3R0b206IC0xLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1sZy1uNCxcXG4gIC5teC1sZy1uNCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1sZy1uNSB7XFxuICAgIG1hcmdpbjogLTNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC1sZy1uNSxcXG4gIC5teS1sZy1uNSB7XFxuICAgIG1hcmdpbi10b3A6IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXItbGctbjUsXFxuICAubXgtbGctbjUge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWItbGctbjUsXFxuICAubXktbGctbjUge1xcbiAgICBtYXJnaW4tYm90dG9tOiAtM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLWxnLW41LFxcbiAgLm14LWxnLW41IHtcXG4gICAgbWFyZ2luLWxlZnQ6IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS1sZy1hdXRvIHtcXG4gICAgbWFyZ2luOiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQtbGctYXV0byxcXG4gIC5teS1sZy1hdXRvIHtcXG4gICAgbWFyZ2luLXRvcDogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLWxnLWF1dG8sXFxuICAubXgtbGctYXV0byB7XFxuICAgIG1hcmdpbi1yaWdodDogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLWxnLWF1dG8sXFxuICAubXktbGctYXV0byB7XFxuICAgIG1hcmdpbi1ib3R0b206IGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC1sZy1hdXRvLFxcbiAgLm14LWxnLWF1dG8ge1xcbiAgICBtYXJnaW4tbGVmdDogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XFxuICAubS14bC0wIHtcXG4gICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQteGwtMCxcXG4gIC5teS14bC0wIHtcXG4gICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXhsLTAsXFxuICAubXgteGwtMCB7XFxuICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXhsLTAsXFxuICAubXkteGwtMCB7XFxuICAgIG1hcmdpbi1ib3R0b206IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC14bC0wLFxcbiAgLm14LXhsLTAge1xcbiAgICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0teGwtMSB7XFxuICAgIG1hcmdpbjogMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXhsLTEsXFxuICAubXkteGwtMSB7XFxuICAgIG1hcmdpbi10b3A6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci14bC0xLFxcbiAgLm14LXhsLTEge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi14bC0xLFxcbiAgLm15LXhsLTEge1xcbiAgICBtYXJnaW4tYm90dG9tOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwteGwtMSxcXG4gIC5teC14bC0xIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLXhsLTIge1xcbiAgICBtYXJnaW46IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXhsLTIsXFxuICAubXkteGwtMiB7XFxuICAgIG1hcmdpbi10b3A6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXhsLTIsXFxuICAubXgteGwtMiB7XFxuICAgIG1hcmdpbi1yaWdodDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWIteGwtMixcXG4gIC5teS14bC0yIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwteGwtMixcXG4gIC5teC14bC0yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0teGwtMyB7XFxuICAgIG1hcmdpbjogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXhsLTMsXFxuICAubXkteGwtMyB7XFxuICAgIG1hcmdpbi10b3A6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci14bC0zLFxcbiAgLm14LXhsLTMge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi14bC0zLFxcbiAgLm15LXhsLTMge1xcbiAgICBtYXJnaW4tYm90dG9tOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwteGwtMyxcXG4gIC5teC14bC0zIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLXhsLTQge1xcbiAgICBtYXJnaW46IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXhsLTQsXFxuICAubXkteGwtNCB7XFxuICAgIG1hcmdpbi10b3A6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXhsLTQsXFxuICAubXgteGwtNCB7XFxuICAgIG1hcmdpbi1yaWdodDogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWIteGwtNCxcXG4gIC5teS14bC00IHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwteGwtNCxcXG4gIC5teC14bC00IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0teGwtNSB7XFxuICAgIG1hcmdpbjogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXhsLTUsXFxuICAubXkteGwtNSB7XFxuICAgIG1hcmdpbi10b3A6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci14bC01LFxcbiAgLm14LXhsLTUge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi14bC01LFxcbiAgLm15LXhsLTUge1xcbiAgICBtYXJnaW4tYm90dG9tOiAzcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwteGwtNSxcXG4gIC5teC14bC01IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLXhsLTAge1xcbiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQteGwtMCxcXG4gIC5weS14bC0wIHtcXG4gICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci14bC0wLFxcbiAgLnB4LXhsLTAge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGIteGwtMCxcXG4gIC5weS14bC0wIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC14bC0wLFxcbiAgLnB4LXhsLTAge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLXhsLTEge1xcbiAgICBwYWRkaW5nOiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQteGwtMSxcXG4gIC5weS14bC0xIHtcXG4gICAgcGFkZGluZy10b3A6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wci14bC0xLFxcbiAgLnB4LXhsLTEge1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGIteGwtMSxcXG4gIC5weS14bC0xIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC14bC0xLFxcbiAgLnB4LXhsLTEge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wLXhsLTIge1xcbiAgICBwYWRkaW5nOiAwLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC14bC0yLFxcbiAgLnB5LXhsLTIge1xcbiAgICBwYWRkaW5nLXRvcDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHIteGwtMixcXG4gIC5weC14bC0yIHtcXG4gICAgcGFkZGluZy1yaWdodDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGIteGwtMixcXG4gIC5weS14bC0yIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLXhsLTIsXFxuICAucHgteGwtMiB7XFxuICAgIHBhZGRpbmctbGVmdDogMC41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC14bC0zIHtcXG4gICAgcGFkZGluZzogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnB0LXhsLTMsXFxuICAucHkteGwtMyB7XFxuICAgIHBhZGRpbmctdG9wOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHIteGwtMyxcXG4gIC5weC14bC0zIHtcXG4gICAgcGFkZGluZy1yaWdodDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLXhsLTMsXFxuICAucHkteGwtMyB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucGwteGwtMyxcXG4gIC5weC14bC0zIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucC14bC00IHtcXG4gICAgcGFkZGluZzogMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucHQteGwtNCxcXG4gIC5weS14bC00IHtcXG4gICAgcGFkZGluZy10b3A6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLXhsLTQsXFxuICAucHgteGwtNCB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBiLXhsLTQsXFxuICAucHkteGwtNCB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAxLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wbC14bC00LFxcbiAgLnB4LXhsLTQge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDEuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnAteGwtNSB7XFxuICAgIHBhZGRpbmc6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wdC14bC01LFxcbiAgLnB5LXhsLTUge1xcbiAgICBwYWRkaW5nLXRvcDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnByLXhsLTUsXFxuICAucHgteGwtNSB7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5wYi14bC01LFxcbiAgLnB5LXhsLTUge1xcbiAgICBwYWRkaW5nLWJvdHRvbTogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnBsLXhsLTUsXFxuICAucHgteGwtNSB7XFxuICAgIHBhZGRpbmctbGVmdDogM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0teGwtbjEge1xcbiAgICBtYXJnaW46IC0wLjI1cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQteGwtbjEsXFxuICAubXkteGwtbjEge1xcbiAgICBtYXJnaW4tdG9wOiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXhsLW4xLFxcbiAgLm14LXhsLW4xIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXhsLW4xLFxcbiAgLm15LXhsLW4xIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTAuMjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC14bC1uMSxcXG4gIC5teC14bC1uMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtMC4yNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm0teGwtbjIge1xcbiAgICBtYXJnaW46IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC14bC1uMixcXG4gIC5teS14bC1uMiB7XFxuICAgIG1hcmdpbi10b3A6IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci14bC1uMixcXG4gIC5teC14bC1uMiB7XFxuICAgIG1hcmdpbi1yaWdodDogLTAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXhsLW4yLFxcbiAgLm15LXhsLW4yIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogLTAuNXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLXhsLW4yLFxcbiAgLm14LXhsLW4yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IC0wLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLXhsLW4zIHtcXG4gICAgbWFyZ2luOiAtMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm10LXhsLW4zLFxcbiAgLm15LXhsLW4zIHtcXG4gICAgbWFyZ2luLXRvcDogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tci14bC1uMyxcXG4gIC5teC14bC1uMyB7XFxuICAgIG1hcmdpbi1yaWdodDogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi14bC1uMyxcXG4gIC5teS14bC1uMyB7XFxuICAgIG1hcmdpbi1ib3R0b206IC0xcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWwteGwtbjMsXFxuICAubXgteGwtbjMge1xcbiAgICBtYXJnaW4tbGVmdDogLTFyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tLXhsLW40IHtcXG4gICAgbWFyZ2luOiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQteGwtbjQsXFxuICAubXkteGwtbjQge1xcbiAgICBtYXJnaW4tdG9wOiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXIteGwtbjQsXFxuICAubXgteGwtbjQge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0xLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tYi14bC1uNCxcXG4gIC5teS14bC1uNCB7XFxuICAgIG1hcmdpbi1ib3R0b206IC0xLjVyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC14bC1uNCxcXG4gIC5teC14bC1uNCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAtMS41cmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS14bC1uNSB7XFxuICAgIG1hcmdpbjogLTNyZW0gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tdC14bC1uNSxcXG4gIC5teS14bC1uNSB7XFxuICAgIG1hcmdpbi10b3A6IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXIteGwtbjUsXFxuICAubXgteGwtbjUge1xcbiAgICBtYXJnaW4tcmlnaHQ6IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubWIteGwtbjUsXFxuICAubXkteGwtbjUge1xcbiAgICBtYXJnaW4tYm90dG9tOiAtM3JlbSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1sLXhsLW41LFxcbiAgLm14LXhsLW41IHtcXG4gICAgbWFyZ2luLWxlZnQ6IC0zcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubS14bC1hdXRvIHtcXG4gICAgbWFyZ2luOiBhdXRvICFpbXBvcnRhbnQ7XFxuICB9XFxuICAubXQteGwtYXV0byxcXG4gIC5teS14bC1hdXRvIHtcXG4gICAgbWFyZ2luLXRvcDogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1yLXhsLWF1dG8sXFxuICAubXgteGwtYXV0byB7XFxuICAgIG1hcmdpbi1yaWdodDogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLm1iLXhsLWF1dG8sXFxuICAubXkteGwtYXV0byB7XFxuICAgIG1hcmdpbi1ib3R0b206IGF1dG8gIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tbC14bC1hdXRvLFxcbiAgLm14LXhsLWF1dG8ge1xcbiAgICBtYXJnaW4tbGVmdDogYXV0byAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG4udGV4dC1tb25vc3BhY2Uge1xcbiAgZm9udC1mYW1pbHk6IFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXFxcIkxpYmVyYXRpb24gTW9ub1xcXCIsIFxcXCJDb3VyaWVyIE5ld1xcXCIsIG1vbm9zcGFjZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1qdXN0aWZ5IHtcXG4gIHRleHQtYWxpZ246IGp1c3RpZnkgIWltcG9ydGFudDtcXG59XFxuXFxuLnRleHQtd3JhcCB7XFxuICB3aGl0ZS1zcGFjZTogbm9ybWFsICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZXh0LW5vd3JhcCB7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZXh0LXRydW5jYXRlIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxufVxcblxcbi50ZXh0LWxlZnQge1xcbiAgdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1yaWdodCB7XFxuICB0ZXh0LWFsaWduOiByaWdodCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1jZW50ZXIge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgLnRleHQtc20tbGVmdCB7XFxuICAgIHRleHQtYWxpZ246IGxlZnQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC50ZXh0LXNtLXJpZ2h0IHtcXG4gICAgdGV4dC1hbGlnbjogcmlnaHQgIWltcG9ydGFudDtcXG4gIH1cXG4gIC50ZXh0LXNtLWNlbnRlciB7XFxuICAgIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gIC50ZXh0LW1kLWxlZnQge1xcbiAgICB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAudGV4dC1tZC1yaWdodCB7XFxuICAgIHRleHQtYWxpZ246IHJpZ2h0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAudGV4dC1tZC1jZW50ZXIge1xcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XFxuICAudGV4dC1sZy1sZWZ0IHtcXG4gICAgdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnRleHQtbGctcmlnaHQge1xcbiAgICB0ZXh0LWFsaWduOiByaWdodCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnRleHQtbGctY2VudGVyIHtcXG4gICAgdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC50ZXh0LXhsLWxlZnQge1xcbiAgICB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAudGV4dC14bC1yaWdodCB7XFxuICAgIHRleHQtYWxpZ246IHJpZ2h0ICFpbXBvcnRhbnQ7XFxuICB9XFxuICAudGV4dC14bC1jZW50ZXIge1xcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuLnRleHQtbG93ZXJjYXNlIHtcXG4gIHRleHQtdHJhbnNmb3JtOiBsb3dlcmNhc2UgIWltcG9ydGFudDtcXG59XFxuXFxuLnRleHQtdXBwZXJjYXNlIHtcXG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2UgIWltcG9ydGFudDtcXG59XFxuXFxuLnRleHQtY2FwaXRhbGl6ZSB7XFxuICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZm9udC13ZWlnaHQtbGlnaHQge1xcbiAgZm9udC13ZWlnaHQ6IDMwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZm9udC13ZWlnaHQtbGlnaHRlciB7XFxuICBmb250LXdlaWdodDogbGlnaHRlciAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZm9udC13ZWlnaHQtbm9ybWFsIHtcXG4gIGZvbnQtd2VpZ2h0OiA0MDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmZvbnQtd2VpZ2h0LWJvbGQge1xcbiAgZm9udC13ZWlnaHQ6IDcwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZm9udC13ZWlnaHQtYm9sZGVyIHtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkZXIgIWltcG9ydGFudDtcXG59XFxuXFxuLmZvbnQtaXRhbGljIHtcXG4gIGZvbnQtc3R5bGU6IGl0YWxpYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC13aGl0ZSB7XFxuICBjb2xvcjogI2ZmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1wcmltYXJ5IHtcXG4gIGNvbG9yOiAjMDA3YmZmICFpbXBvcnRhbnQ7XFxufVxcblxcbmEudGV4dC1wcmltYXJ5OmhvdmVyLCBhLnRleHQtcHJpbWFyeTpmb2N1cyB7XFxuICBjb2xvcjogIzAwNTZiMyAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1zZWNvbmRhcnkge1xcbiAgY29sb3I6ICM2Yzc1N2QgIWltcG9ydGFudDtcXG59XFxuXFxuYS50ZXh0LXNlY29uZGFyeTpob3ZlciwgYS50ZXh0LXNlY29uZGFyeTpmb2N1cyB7XFxuICBjb2xvcjogIzQ5NGY1NCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1zdWNjZXNzIHtcXG4gIGNvbG9yOiAjMjhhNzQ1ICFpbXBvcnRhbnQ7XFxufVxcblxcbmEudGV4dC1zdWNjZXNzOmhvdmVyLCBhLnRleHQtc3VjY2Vzczpmb2N1cyB7XFxuICBjb2xvcjogIzE5NjkyYyAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1pbmZvIHtcXG4gIGNvbG9yOiAjMTdhMmI4ICFpbXBvcnRhbnQ7XFxufVxcblxcbmEudGV4dC1pbmZvOmhvdmVyLCBhLnRleHQtaW5mbzpmb2N1cyB7XFxuICBjb2xvcjogIzBmNjY3NCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC13YXJuaW5nIHtcXG4gIGNvbG9yOiAjZmZjMTA3ICFpbXBvcnRhbnQ7XFxufVxcblxcbmEudGV4dC13YXJuaW5nOmhvdmVyLCBhLnRleHQtd2FybmluZzpmb2N1cyB7XFxuICBjb2xvcjogI2JhOGIwMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1kYW5nZXIge1xcbiAgY29sb3I6ICNkYzM1NDUgIWltcG9ydGFudDtcXG59XFxuXFxuYS50ZXh0LWRhbmdlcjpob3ZlciwgYS50ZXh0LWRhbmdlcjpmb2N1cyB7XFxuICBjb2xvcjogI2E3MWQyYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1saWdodCB7XFxuICBjb2xvcjogI2Y4ZjlmYSAhaW1wb3J0YW50O1xcbn1cXG5cXG5hLnRleHQtbGlnaHQ6aG92ZXIsIGEudGV4dC1saWdodDpmb2N1cyB7XFxuICBjb2xvcjogI2NiZDNkYSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1kYXJrIHtcXG4gIGNvbG9yOiAjMzQzYTQwICFpbXBvcnRhbnQ7XFxufVxcblxcbmEudGV4dC1kYXJrOmhvdmVyLCBhLnRleHQtZGFyazpmb2N1cyB7XFxuICBjb2xvcjogIzEyMTQxNiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1ib2R5IHtcXG4gIGNvbG9yOiAjMjEyNTI5ICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZXh0LW11dGVkIHtcXG4gIGNvbG9yOiAjNmM3NTdkICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZXh0LWJsYWNrLTUwIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSkgIWltcG9ydGFudDtcXG59XFxuXFxuLnRleHQtd2hpdGUtNTAge1xcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1oaWRlIHtcXG4gIGZvbnQ6IDAvMCBhO1xcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgdGV4dC1zaGFkb3c6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogMDtcXG59XFxuXFxuLnRleHQtZGVjb3JhdGlvbi1ub25lIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udGV4dC1icmVhayB7XFxuICB3b3JkLWJyZWFrOiBicmVhay13b3JkICFpbXBvcnRhbnQ7XFxuICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkICFpbXBvcnRhbnQ7XFxufVxcblxcbi50ZXh0LXJlc2V0IHtcXG4gIGNvbG9yOiBpbmhlcml0ICFpbXBvcnRhbnQ7XFxufVxcblxcbi52aXNpYmxlIHtcXG4gIHZpc2liaWxpdHk6IHZpc2libGUgIWltcG9ydGFudDtcXG59XFxuXFxuLmludmlzaWJsZSB7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDtcXG59XFxuXFxuQG1lZGlhIHByaW50IHtcXG4gICosXFxuICAqOjpiZWZvcmUsXFxuICAqOjphZnRlciB7XFxuICAgIHRleHQtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XFxuICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG4gIGE6bm90KC5idG4pIHtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICB9XFxuICBhYmJyW3RpdGxlXTo6YWZ0ZXIge1xcbiAgICBjb250ZW50OiBcXFwiIChcXFwiIGF0dHIodGl0bGUpIFxcXCIpXFxcIjtcXG4gIH1cXG4gIHByZSB7XFxuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgcHJlLFxcbiAgYmxvY2txdW90ZSB7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNhZGI1YmQ7XFxuICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDtcXG4gIH1cXG4gIHRoZWFkIHtcXG4gICAgZGlzcGxheTogdGFibGUtaGVhZGVyLWdyb3VwO1xcbiAgfVxcbiAgdHIsXFxuICBpbWcge1xcbiAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7XFxuICB9XFxuICBwLFxcbiAgaDIsXFxuICBoMyB7XFxuICAgIG9ycGhhbnM6IDM7XFxuICAgIHdpZG93czogMztcXG4gIH1cXG4gIGgyLFxcbiAgaDMge1xcbiAgICBwYWdlLWJyZWFrLWFmdGVyOiBhdm9pZDtcXG4gIH1cXG4gIEBwYWdlIHtcXG4gICAgc2l6ZTogYTM7XFxuICB9XFxuICBib2R5IHtcXG4gICAgbWluLXdpZHRoOiA5OTJweCAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLmNvbnRhaW5lciB7XFxuICAgIG1pbi13aWR0aDogOTkycHggIWltcG9ydGFudDtcXG4gIH1cXG4gIC5uYXZiYXIge1xcbiAgICBkaXNwbGF5OiBub25lO1xcbiAgfVxcbiAgLmJhZGdlIHtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgIzAwMDtcXG4gIH1cXG4gIC50YWJsZSB7XFxuICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2UgIWltcG9ydGFudDtcXG4gIH1cXG4gIC50YWJsZSB0ZCxcXG4gIC50YWJsZSB0aCB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYgIWltcG9ydGFudDtcXG4gIH1cXG4gIC50YWJsZS1ib3JkZXJlZCB0aCxcXG4gIC50YWJsZS1ib3JkZXJlZCB0ZCB7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZWUyZTYgIWltcG9ydGFudDtcXG4gIH1cXG4gIC50YWJsZS1kYXJrIHtcXG4gICAgY29sb3I6IGluaGVyaXQ7XFxuICB9XFxuICAudGFibGUtZGFyayB0aCxcXG4gIC50YWJsZS1kYXJrIHRkLFxcbiAgLnRhYmxlLWRhcmsgdGhlYWQgdGgsXFxuICAudGFibGUtZGFyayB0Ym9keSArIHRib2R5IHtcXG4gICAgYm9yZGVyLWNvbG9yOiAjZGVlMmU2O1xcbiAgfVxcbiAgLnRhYmxlIC50aGVhZC1kYXJrIHRoIHtcXG4gICAgY29sb3I6IGluaGVyaXQ7XFxuICAgIGJvcmRlci1jb2xvcjogI2RlZTJlNjtcXG4gIH1cXG59XCIsIFwiXCJdKTtcblxuIiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIikoZmFsc2UpO1xuLy8gTW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCJib2R5IHtcXG5cXG59XFxuXFxuLnBhZ2Uge1xcbiAgcGFkZGluZy1ib3R0b206IDE1MHB4O1xcbn1cXG5cXG4uc2lkZWJhciB7XFxuICBwYWRkaW5nLXRvcDogMjBweDtcXG4gIG1hcmdpbi10b3A6IDQ4cHg7XFxuICBtaW4taGVpZ2h0OiA4ZW07XFxuICBwYWRkaW5nLWxlZnQ6IDEwcHhcXG59XFxuXFxuW3JvbGU9XFxcIm1haW5cXFwiXSB7XFxuICBwYWRkaW5nLXRvcDogMjBweDtcXG4gIG1hcmdpbi10b3A6IDQ4cHg7XFxufVxcblxcbi5pbmxpbmV7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcXG59XFxuXFxuc3BhbiB7XFxuICBmb250LXNpemU6IDFyZW07XFxufVxcblxcbnNlbGVjdCB7XFxuICBtYXJnaW4tbGVmdDogMTBweDtcXG59XFxuXFxubGFiZWwge1xcbiAgcGFkZGluZy1yaWdodDogMC4yNXJlbTtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG5cXG5zcGFuLmN1c3RvbSB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwLjI1cmVtO1xcbiAgcGFkZGluZy1sZWZ0OiAwLjI1cmVtO1xcbn1cXG5cXG5idXR0b24uY3VzdG9tIHtcXG4gIG1hcmdpbjogMC4yNXJlbTtcXG59XFxuXFxuYS5kaXNhYmxlZCB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuXFxuLm5hdi1pdGVtIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuXFxuLm5hdi1saW5rIHtcXG4gIHBhZGRpbmc6IDAuNXJlbSAwLjI1cmVtIDAuNXJlbSAxcmVtO1xcbn1cXG5cXG4uZHJvcGRvd24tbWVudSBsaTpob3ZlciB7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLm5hbWUge1xcbiAgd2lkdGg6IDhyZW07XFxufVxcblxcbi5mb3JtLWlucHV0IHtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG5cXG4uZm9ybS1pbnB1dC5sYWJlbGVkIHtcXG4gIHdpZHRoOiA2MCU7XFxufVxcblxcbjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbjo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24ge1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG4gIGNvbG9yOiAjMDA3YmZmO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsgXFxuICBib3JkZXItY29sb3I6ICMwMDdiZmY7XFxuICBwYWRkaW5nOiAwLjM3NXJlbSwgMC43NXJlbTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkO1xcbiAgbWFyZ2luOiA1cHggMTBweCA1cHggMHB4ICFpbXBvcnRhbnQ7XFxuICBib3gtc2hhZG93OiA2cHggNnB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgLjIpLCAyLjI1cHggMi4yNXB4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgLjEpLCAzLjc1cHggMy43NXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgLjQpXFxufVxcblxcbmlucHV0W3R5cGU9XFxcImZpbGVcXFwiXTo6LW1zLWJyb3dzZSB7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbiAgY29sb3I6ICMwMDdiZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOyBcXG4gIGJvcmRlci1jb2xvcjogIzAwN2JmZjtcXG4gIHBhZGRpbmc6IDAuMzc1cmVtLCAwLjc1cmVtO1xcbiAgYm9yZGVyOiAxcHggc29saWQ7XFxuICBtYXJnaW46IDVweCAxMHB4IDVweCAwcHggIWltcG9ydGFudDtcXG4gIGJveC1zaGFkb3c6IDZweCA2cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAuMiksIDIuMjVweCAyLjI1cHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAuMSksIDMuNzVweCAzLjc1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAuNClcXG59XFxuXFxuOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbjpob3ZlciB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDdiZmY7XFxuICBib3JkZXItY29sb3I6ICMwMDdiZmY7XFxufVxcblxcbjo6LW1vei1wbGFjZWhvbGRlciB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG46Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbjo6cGxhY2Vob2xkZXIge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG4uc2lkZWJhci1uYXYge1xcbiAgcGFkZGluZzogOXB4IDA7XFxuICBmb250LXNpemU6IDE0cHg7XFxufVxcblxcbi5nZXQtc3RhcnRlZCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbn1cXG5cXG4ubmF2IHtcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG59XFxuXFxuLnNpZGViYXItc3RpY2t5IHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG59XFxuXFxuLnRvb2xzIHtcXG4gIG1pbi13aWR0aDogMTJlbTsgXFxufVxcblxcbi5ib2R5IHtcXG4gIG1pbi13aWR0aDogNTAwcHggIWltcG9ydGFudDsgXFxufVxcbi5wbG90LXByZXZpZXcge1xcbiAgbWFyZ2luOiAxMHB4O1xcbn1cXG5cXG4ucmVhY3Rpb24tc3VtbWFyeSB7XFxuICBwYWRkaW5nLWxlZnQ6IDE1cHg7XFxuICBwYWRkaW5nLXJpZ2h0OiA1cHg7XFxuICBwYWRkaW5nLWJvdHRvbTogMTBweDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuXFxuLmNvbnRhaW5lci1wYXJ0IHtcXG4gIG1heC13aWR0aDogbm9uZTtcXG59XFxuXFxuLmluZm9ybWF0aW9uLWJ0biB7XFxuICBjb2xvcjogIzAwN2JmZjtcXG4gIGJvcmRlci1jb2xvcjogI2ZmZmZmZjtcXG4gIHBhZGRpbmc6IDAuNXJlbSAxcmVtO1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG59XFxuXFxuLmhlbHAge1xcbiAgZm9udC1zaXplOiAyNXB4O1xcbiAgcGFkZGluZzogMDtcXG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XFxufVxcblxcbi50b29sdGlwLWljb24ge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgcGFkZGluZy1sZWZ0OiAycHg7XFxuICBwYWRkaW5nLXJpZ2h0OiAycHg7XFxuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xcbiAgY29sb3I6ICMwMDdiZmY7XFxufVxcblxcbi50b29sdGlwLWljb24tbGFyZ2Uge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgZm9udC1zaXplOiAyMHB4O1xcbiAgcGFkZGluZy1sZWZ0OiAxMHB4O1xcbiAgcGFkZGluZy1yaWdodDogMTBweDtcXG4gIHZlcnRpY2FsLWFsaWduOiBib3R0b207XFxuICBjb2xvcjogIzAwN2JmZjtcXG59XFxuXFxuLmluZm9ybWF0aW9uLWJ0bjpob3ZlciB7XFxuICBjb2xvcjogIzAwNTZiMztcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWNvbGxhcHNlIHtcXG4gIGNvbG9yOiAjMDAwO1xcbiAgcGFkZGluZzogMHB4IDEwcHg7XFxuICBmb250LXNpemU6IDIwcHg7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgbWFyZ2luLWJvdHRvbTogMC43NXJlbTtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLWNvbGxhcHNlOmhvdmVyIHtcXG4gIGNvbG9yOiAjMDA3YmZmO1xcbn1cXG5cXG4uYnRuLXByaW1hcnkge1xcbiAgbWFyZ2luOiA1cHggMTBweCA1cHggMHB4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yZWFjdGlvbi1zdWJkb21haW4ge1xcbiAgcGFkZGluZzogMHB4IDBweCAwcHggMjBweDtcXG4gIGJvcmRlcjogMDtcXG59XFxuXFxuLnJlYWN0aW9uLWRldGFpbHMtc3ViZG9tYWluIHtcXG4gIHBhZGRpbmc6IDBweCAwcHggMHB4IDVweDtcXG59XFxuXFxuLmJ0bi1vdXRsaW5lLXRvb2wge1xcbiAgY29sb3I6ICMwMDdiZmY7XFxuICBwYWRkaW5nOiAwLjVyZW0gMXJlbTtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxufVxcblxcbi5idG4tb3V0bGluZS10b29sOmhvdmVyIHtcXG4gIGNvbG9yOiAjMDA1NmIzO1xcbn1cXG5cXG4jY29sbGFwc2UtZGVzY3JpcHRpb24ge1xcbiAgcGFkZGluZzogMHJlbSAycmVtO1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbn1cXG5cXG4ubW9kYWwtY29udGVudC5pbmZvIHtcXG4gIHdpZHRoOiAxNTAlO1xcbn1cXG5cXG4ubW9kYWwtY29udGVudC5kZWZhdWx0LXNwZWNpZXMge1xcbiAgd2lkdGg6IDYwJTtcXG59XFxuXFxuLnNwaW5uZXItYm9yZGVyIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBtYXJnaW46IDE1cHg7XFxuICBsZWZ0OiA0MCU7XFxuICB3aWR0aDogOTBweDtcXG4gIGhlaWdodDogOTBweDtcXG4gIGJvcmRlcjogMTJweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMTI1KTtcXG4gIGJvcmRlci1yaWdodC1jb2xvcjogIzAwN2JmZjtcXG59XFxuXFxuLmVycm9ycyB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5cXG4ubWRsLWVkaXQtYnRuIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuXFxuQGtleWZyYW1lcyBzcGlubmVyLWdyb3cge1xcbiAwJSB7XFxuICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApO1xcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XFxuIH1cXG4gNTAlIHtcXG4gICAgIG9wYWNpdHk6IDE7IFxcbiAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpO1xcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XFxuIH1cXG59XFxuXFxuLnNhdmluZy1zdGF0dXMsIC5zYXZlZC1zdGF0dXMsIC5zYXZlLWVycm9yLXN0YXR1cyB7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgbWFyZ2luOiAxNXB4O1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG59XFxuXFxuLnNhdmluZy1zdGF0dXMge1xcbiAgY29sb3I6ICMxMTdhOGI7XFxufVxcblxcbi5zYXZlZC1zdGF0dXMge1xcbiAgY29sb3I6ICMxZTdlMzQ7XFxufVxcblxcbi5zYXZlLWVycm9yLXN0YXR1cyB7XFxuICBjb2xvcjogI2RjMzU0NTtcXG59XFxuXFxuLnJpZ2h0LWp1c3RpZnkge1xcbiAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XFxuICByaWdodDogNXB4O1xcbiAgbGVmdDogYXV0bztcXG59XFxuXFxuLmRlZmF1bHQtbW9kZSB7XFxuICBtYXJnaW46IDAuNzVyZW07XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGxlZnQ7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGxlZnQ7XFxufVxcblxcbi5jb25jZW50cmF0aW9uLWJ0biwgLnBvcHVsYXRpb24tYnRuLCAuaHlicmlkLWJ0biB7XFxuICBtaW4td2lkdGg6IDI0MHB4O1xcbiAgbWFyZ2luLXJpZ2h0OiAwLjc1cmVtO1xcbn1cXG5cXG5pbnB1dFt0eXBlPVxcXCJjaGVja2JveFxcXCJdIHtcXG4gIHBhZGRpbmc6IDAuNzVyZW07XFxufVxcblxcbnNwYW4uY2hlY2tib3gge1xcbiAgcGFkZGluZy1yaWdodDogMC4yNXJlbTtcXG59XFxuXFxuLmV2ZW50IHtcXG4gIG1hcmdpbi1ib3R0b206IDBweDtcXG59XFxuXFxuLmV2ZW50LXRoIC5ldmVudC10ZCB7XFxuICBwYWRkaW5nLWxlZnQ6IDBweCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udG9vbHRpcC1pbm5lciB7XFxuICBtYXgtd2lkdGg6IDMwMHB4O1xcbiAgcGFkZGluZzogMC4yNXJlbSAwLjVyZW07XFxuICBjb2xvcjogI2ZmZjtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG59XFxuXFxuLnZlcnRpY2xlLXNwYWNlIHtcXG4gIHBhZGRpbmctYm90dG9tOiAxMHB4O1xcbn1cXG5cXG4uaG9yaXpvbnRhbC1zcGFjZSB7XFxuICBwYWRkaW5nLWxlZnQ6IDVweDtcXG4gIHBhZGRpbmctcmlnaHQ6IDVweDtcXG59XFxuXFxuLnN3aXRjaGluZyB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xcbiAgaGVpZ2h0OiAyOXB4O1xcbn1cXG5cXG4jaG9tZS13cmFwcGVyIHtcXG4gIG1hcmdpbi10b3A6IDJlbTtcXG4gIG1hcmdpbi1ib3R0b206IDJlbTtcXG59XFxuXFxuLmxvZ28ge1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuLmxvZ28gaW1nIHtcXG4gIHdpZHRoOiA0MGVtO1xcbiAgbWFyZ2luLWxlZnQ6IC04ZW07XFxufVxcblxcbi50cnktc3RvY2hzcy1idG4ge1xcbiAgcGFkZGluZzogMS41cmVtIDEuNXJlbTtcXG4gIGZvbnQtc2l6ZTogMnJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxO1xcbiAgYm9yZGVyLXJhZGl1czogMS41cmVtO1xcbn1cXG5cXG4uaG9tZS1saXN0IHtcXG4gIGxpbmUtaGVpZ2h0OiAyO1xcbn1cXG5cXG4uY2VudGVyZWQge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG4uaG9tZS1wIHtcXG4gIG1hcmdpbi10b3A6IDEuNWVtO1xcbiAgbWFyZ2luLWJvdHRvbTogMS41ZW07XFxuICBmb250LXNpemU6IDIycHg7XFxufVxcblxcbi5iaWctdGlwIHtcXG4gIG1hcmdpbi1sZWZ0OiAuMmVtO1xcbn1cXG5cXG4vKnNoYWRvd2luZyBmb3IgYnV0dG9ucyovXFxuLmJveC1zaGFkb3cge1xcbiAgLypoLW9mZnNldCB2LW9mZnNldCBibHVyIHNwcmVhZCBjb2xvciovXFxuICBib3gtc2hhZG93OiA2cHggNnB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgLjIpLCAyLjI1cHggMi4yNXB4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgLjEpLCAzLjc1cHggMy43NXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgLjQpXFxufVwiLCBcIlwiXSk7XG5cbiIsImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi8uLi9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIikoZmFsc2UpO1xuLy8gTW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCIvKiFcXG4gKiBGb250IEF3ZXNvbWUgRnJlZSA1LjEyLjAgYnkgQGZvbnRhd2Vzb21lIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb21cXG4gKiBMaWNlbnNlIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20vbGljZW5zZS9mcmVlIChJY29uczogQ0MgQlkgNC4wLCBGb250czogU0lMIE9GTCAxLjEsIENvZGU6IE1JVCBMaWNlbnNlKVxcbiAqL1xcbi5zdmctaW5saW5lLS1mYSxzdmc6bm90KDpyb290KS5zdmctaW5saW5lLS1mYXtvdmVyZmxvdzp2aXNpYmxlfS5zdmctaW5saW5lLS1mYXtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6aW5oZXJpdDtoZWlnaHQ6MWVtO3ZlcnRpY2FsLWFsaWduOi0uMTI1ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLWxne3ZlcnRpY2FsLWFsaWduOi0uMjI1ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLXctMXt3aWR0aDouMDYyNWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTJ7d2lkdGg6LjEyNWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTN7d2lkdGg6LjE4NzVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy00e3dpZHRoOi4yNWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTV7d2lkdGg6LjMxMjVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy02e3dpZHRoOi4zNzVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy03e3dpZHRoOi40Mzc1ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLXctOHt3aWR0aDouNWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTl7d2lkdGg6LjU2MjVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy0xMHt3aWR0aDouNjI1ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLXctMTF7d2lkdGg6LjY4NzVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy0xMnt3aWR0aDouNzVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy0xM3t3aWR0aDouODEyNWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTE0e3dpZHRoOi44NzVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy0xNXt3aWR0aDouOTM3NWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTE2e3dpZHRoOjFlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy0xN3t3aWR0aDoxLjA2MjVlbX0uc3ZnLWlubGluZS0tZmEuZmEtdy0xOHt3aWR0aDoxLjEyNWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTE5e3dpZHRoOjEuMTg3NWVtfS5zdmctaW5saW5lLS1mYS5mYS13LTIwe3dpZHRoOjEuMjVlbX0uc3ZnLWlubGluZS0tZmEuZmEtcHVsbC1sZWZ0e21hcmdpbi1yaWdodDouM2VtO3dpZHRoOmF1dG99LnN2Zy1pbmxpbmUtLWZhLmZhLXB1bGwtcmlnaHR7bWFyZ2luLWxlZnQ6LjNlbTt3aWR0aDphdXRvfS5zdmctaW5saW5lLS1mYS5mYS1ib3JkZXJ7aGVpZ2h0OjEuNWVtfS5zdmctaW5saW5lLS1mYS5mYS1saXt3aWR0aDoyZW19LnN2Zy1pbmxpbmUtLWZhLmZhLWZ3e3dpZHRoOjEuMjVlbX0uZmEtbGF5ZXJzIHN2Zy5zdmctaW5saW5lLS1mYXtib3R0b206MDtsZWZ0OjA7bWFyZ2luOmF1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0uZmEtbGF5ZXJze2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dmVydGljYWwtYWxpZ246LS4xMjVlbTt3aWR0aDoxZW19LmZhLWxheWVycyBzdmcuc3ZnLWlubGluZS0tZmF7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOmNlbnRlciBjZW50ZXI7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXIgY2VudGVyfS5mYS1sYXllcnMtY291bnRlciwuZmEtbGF5ZXJzLXRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dGV4dC1hbGlnbjpjZW50ZXJ9LmZhLWxheWVycy10ZXh0e2xlZnQ6NTAlO3RvcDo1MCU7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjpjZW50ZXIgY2VudGVyO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyIGNlbnRlcn0uZmEtbGF5ZXJzLWNvdW50ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmYyNTNhO2JvcmRlci1yYWRpdXM6MWVtOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjojZmZmO2hlaWdodDoxLjVlbTtsaW5lLWhlaWdodDoxO21heC13aWR0aDo1ZW07bWluLXdpZHRoOjEuNWVtO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4yNWVtO3JpZ2h0OjA7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt0b3A6MDstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguMjUpO3RyYW5zZm9ybTpzY2FsZSguMjUpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjp0b3AgcmlnaHQ7dHJhbnNmb3JtLW9yaWdpbjp0b3AgcmlnaHR9LmZhLWxheWVycy1ib3R0b20tcmlnaHR7Ym90dG9tOjA7cmlnaHQ6MDt0b3A6YXV0bzstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguMjUpO3RyYW5zZm9ybTpzY2FsZSguMjUpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjpib3R0b20gcmlnaHQ7dHJhbnNmb3JtLW9yaWdpbjpib3R0b20gcmlnaHR9LmZhLWxheWVycy1ib3R0b20tbGVmdHtib3R0b206MDtsZWZ0OjA7cmlnaHQ6YXV0bzt0b3A6YXV0bzstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguMjUpO3RyYW5zZm9ybTpzY2FsZSguMjUpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjpib3R0b20gbGVmdDt0cmFuc2Zvcm0tb3JpZ2luOmJvdHRvbSBsZWZ0fS5mYS1sYXllcnMtdG9wLXJpZ2h0e3JpZ2h0OjA7dG9wOjA7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLjI1KTt0cmFuc2Zvcm06c2NhbGUoLjI1KTstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46dG9wIHJpZ2h0O3RyYW5zZm9ybS1vcmlnaW46dG9wIHJpZ2h0fS5mYS1sYXllcnMtdG9wLWxlZnR7bGVmdDowO3JpZ2h0OmF1dG87dG9wOjA7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLjI1KTt0cmFuc2Zvcm06c2NhbGUoLjI1KTstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46dG9wIGxlZnQ7dHJhbnNmb3JtLW9yaWdpbjp0b3AgbGVmdH0uZmEtbGd7Zm9udC1zaXplOjEuMzMzMzNlbTtsaW5lLWhlaWdodDouNzVlbTt2ZXJ0aWNhbC1hbGlnbjotLjA2NjdlbX0uZmEteHN7Zm9udC1zaXplOi43NWVtfS5mYS1zbXtmb250LXNpemU6Ljg3NWVtfS5mYS0xeHtmb250LXNpemU6MWVtfS5mYS0yeHtmb250LXNpemU6MmVtfS5mYS0zeHtmb250LXNpemU6M2VtfS5mYS00eHtmb250LXNpemU6NGVtfS5mYS01eHtmb250LXNpemU6NWVtfS5mYS02eHtmb250LXNpemU6NmVtfS5mYS03eHtmb250LXNpemU6N2VtfS5mYS04eHtmb250LXNpemU6OGVtfS5mYS05eHtmb250LXNpemU6OWVtfS5mYS0xMHh7Zm9udC1zaXplOjEwZW19LmZhLWZ3e3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjEuMjVlbX0uZmEtdWx7bGlzdC1zdHlsZS10eXBlOm5vbmU7bWFyZ2luLWxlZnQ6Mi41ZW07cGFkZGluZy1sZWZ0OjB9LmZhLXVsPmxpe3Bvc2l0aW9uOnJlbGF0aXZlfS5mYS1saXtsZWZ0Oi0yZW07cG9zaXRpb246YWJzb2x1dGU7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MmVtO2xpbmUtaGVpZ2h0OmluaGVyaXR9LmZhLWJvcmRlcntib3JkZXI6LjA4ZW0gc29saWQgI2VlZTtib3JkZXItcmFkaXVzOi4xZW07cGFkZGluZzouMmVtIC4yNWVtIC4xNWVtfS5mYS1wdWxsLWxlZnR7ZmxvYXQ6bGVmdH0uZmEtcHVsbC1yaWdodHtmbG9hdDpyaWdodH0uZmEuZmEtcHVsbC1sZWZ0LC5mYWIuZmEtcHVsbC1sZWZ0LC5mYWwuZmEtcHVsbC1sZWZ0LC5mYXIuZmEtcHVsbC1sZWZ0LC5mYXMuZmEtcHVsbC1sZWZ0e21hcmdpbi1yaWdodDouM2VtfS5mYS5mYS1wdWxsLXJpZ2h0LC5mYWIuZmEtcHVsbC1yaWdodCwuZmFsLmZhLXB1bGwtcmlnaHQsLmZhci5mYS1wdWxsLXJpZ2h0LC5mYXMuZmEtcHVsbC1yaWdodHttYXJnaW4tbGVmdDouM2VtfS5mYS1zcGluey13ZWJraXQtYW5pbWF0aW9uOmZhLXNwaW4gMnMgbGluZWFyIGluZmluaXRlO2FuaW1hdGlvbjpmYS1zcGluIDJzIGxpbmVhciBpbmZpbml0ZX0uZmEtcHVsc2V7LXdlYmtpdC1hbmltYXRpb246ZmEtc3BpbiAxcyBzdGVwcyg4KSBpbmZpbml0ZTthbmltYXRpb246ZmEtc3BpbiAxcyBzdGVwcyg4KSBpbmZpbml0ZX1ALXdlYmtpdC1rZXlmcmFtZXMgZmEtc3BpbnswJXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMGRlZyk7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX10b3std2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMXR1cm4pO3RyYW5zZm9ybTpyb3RhdGUoMXR1cm4pfX1Aa2V5ZnJhbWVzIGZhLXNwaW57MCV7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDBkZWcpO3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9dG97LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDF0dXJuKTt0cmFuc2Zvcm06cm90YXRlKDF0dXJuKX19LmZhLXJvdGF0ZS05MHstbXMtZmlsdGVyOlxcXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0xKVxcXCI7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDkwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX0uZmEtcm90YXRlLTE4MHstbXMtZmlsdGVyOlxcXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0yKVxcXCI7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDE4MGRlZyk7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfS5mYS1yb3RhdGUtMjcwey1tcy1maWx0ZXI6XFxcInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5CYXNpY0ltYWdlKHJvdGF0aW9uPTMpXFxcIjstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDI3MGRlZyl9LmZhLWZsaXAtaG9yaXpvbnRhbHstbXMtZmlsdGVyOlxcXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0wLCBtaXJyb3I9MSlcXFwiOy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlWCgtMSk7dHJhbnNmb3JtOnNjYWxlWCgtMSl9LmZhLWZsaXAtdmVydGljYWx7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGVZKC0xKTt0cmFuc2Zvcm06c2NhbGVZKC0xKX0uZmEtZmxpcC1ib3RoLC5mYS1mbGlwLWhvcml6b250YWwuZmEtZmxpcC12ZXJ0aWNhbCwuZmEtZmxpcC12ZXJ0aWNhbHstbXMtZmlsdGVyOlxcXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0yLCBtaXJyb3I9MSlcXFwifS5mYS1mbGlwLWJvdGgsLmZhLWZsaXAtaG9yaXpvbnRhbC5mYS1mbGlwLXZlcnRpY2Fsey13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC0xKTt0cmFuc2Zvcm06c2NhbGUoLTEpfTpyb290IC5mYS1mbGlwLWJvdGgsOnJvb3QgLmZhLWZsaXAtaG9yaXpvbnRhbCw6cm9vdCAuZmEtZmxpcC12ZXJ0aWNhbCw6cm9vdCAuZmEtcm90YXRlLTkwLDpyb290IC5mYS1yb3RhdGUtMTgwLDpyb290IC5mYS1yb3RhdGUtMjcwey13ZWJraXQtZmlsdGVyOm5vbmU7ZmlsdGVyOm5vbmV9LmZhLXN0YWNre2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoyZW07cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6Mi41ZW19LmZhLXN0YWNrLTF4LC5mYS1zdGFjay0yeHtib3R0b206MDtsZWZ0OjA7bWFyZ2luOmF1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0uc3ZnLWlubGluZS0tZmEuZmEtc3RhY2stMXh7aGVpZ2h0OjFlbTt3aWR0aDoxLjI1ZW19LnN2Zy1pbmxpbmUtLWZhLmZhLXN0YWNrLTJ4e2hlaWdodDoyZW07d2lkdGg6Mi41ZW19LmZhLWludmVyc2V7Y29sb3I6I2ZmZn0uc3Itb25seXtib3JkZXI6MDtjbGlwOnJlY3QoMCwwLDAsMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweH0uc3Itb25seS1mb2N1c2FibGU6YWN0aXZlLC5zci1vbmx5LWZvY3VzYWJsZTpmb2N1c3tjbGlwOmF1dG87aGVpZ2h0OmF1dG87bWFyZ2luOjA7b3ZlcmZsb3c6dmlzaWJsZTtwb3NpdGlvbjpzdGF0aWM7d2lkdGg6YXV0b30uc3ZnLWlubGluZS0tZmEgLmZhLXByaW1hcnl7ZmlsbDp2YXIoLS1mYS1wcmltYXJ5LWNvbG9yLGN1cnJlbnRDb2xvcik7b3BhY2l0eToxO29wYWNpdHk6dmFyKC0tZmEtcHJpbWFyeS1vcGFjaXR5LDEpfS5zdmctaW5saW5lLS1mYSAuZmEtc2Vjb25kYXJ5e2ZpbGw6dmFyKC0tZmEtc2Vjb25kYXJ5LWNvbG9yLGN1cnJlbnRDb2xvcil9LnN2Zy1pbmxpbmUtLWZhIC5mYS1zZWNvbmRhcnksLnN2Zy1pbmxpbmUtLWZhLmZhLXN3YXAtb3BhY2l0eSAuZmEtcHJpbWFyeXtvcGFjaXR5Oi40O29wYWNpdHk6dmFyKC0tZmEtc2Vjb25kYXJ5LW9wYWNpdHksLjQpfS5zdmctaW5saW5lLS1mYS5mYS1zd2FwLW9wYWNpdHkgLmZhLXNlY29uZGFyeXtvcGFjaXR5OjE7b3BhY2l0eTp2YXIoLS1mYS1wcmltYXJ5LW9wYWNpdHksMSl9LnN2Zy1pbmxpbmUtLWZhIG1hc2sgLmZhLXByaW1hcnksLnN2Zy1pbmxpbmUtLWZhIG1hc2sgLmZhLXNlY29uZGFyeXtmaWxsOiMwMDB9LmZhZC5mYS1pbnZlcnNle2NvbG9yOiNmZmZ9XCIsIFwiXCJdKTtcblxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG4vLyBjc3MgYmFzZSBjb2RlLCBpbmplY3RlZCBieSB0aGUgY3NzLWxvYWRlclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodXNlU291cmNlTWFwKSB7XG4gIHZhciBsaXN0ID0gW107IC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblxuICBsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgY29udGVudCA9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSwgdXNlU291cmNlTWFwKTtcblxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgcmV0dXJuICdAbWVkaWEgJyArIGl0ZW1bMl0gKyAneycgKyBjb250ZW50ICsgJ30nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfSkuam9pbignJyk7XG4gIH07IC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG5cblxuICBsaXN0LmkgPSBmdW5jdGlvbiAobW9kdWxlcywgbWVkaWFRdWVyeSkge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsICcnXV07XG4gICAgfVxuXG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkID0gdGhpc1tpXVswXTtcblxuICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBtb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IG1vZHVsZXNbaV07IC8vIHNraXAgYWxyZWFkeSBpbXBvcnRlZCBtb2R1bGVcbiAgICAgIC8vIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgbm90IDEwMCUgcGVyZmVjdCBmb3Igd2VpcmQgbWVkaWEgcXVlcnkgY29tYmluYXRpb25zXG4gICAgICAvLyB3aGVuIGEgbW9kdWxlIGlzIGltcG9ydGVkIG11bHRpcGxlIHRpbWVzIHdpdGggZGlmZmVyZW50IG1lZGlhIHF1ZXJpZXMuXG4gICAgICAvLyBJIGhvcGUgdGhpcyB3aWxsIG5ldmVyIG9jY3VyIChIZXkgdGhpcyB3YXkgd2UgaGF2ZSBzbWFsbGVyIGJ1bmRsZXMpXG5cbiAgICAgIGlmIChpdGVtWzBdID09IG51bGwgfHwgIWFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgaWYgKG1lZGlhUXVlcnkgJiYgIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWFRdWVyeTtcbiAgICAgICAgfSBlbHNlIGlmIChtZWRpYVF1ZXJ5KSB7XG4gICAgICAgICAgaXRlbVsyXSA9ICcoJyArIGl0ZW1bMl0gKyAnKSBhbmQgKCcgKyBtZWRpYVF1ZXJ5ICsgJyknO1xuICAgICAgICB9XG5cbiAgICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbGlzdDtcbn07XG5cbmZ1bmN0aW9uIGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSwgdXNlU291cmNlTWFwKSB7XG4gIHZhciBjb250ZW50ID0gaXRlbVsxXSB8fCAnJztcbiAgdmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuXG4gIGlmICghY3NzTWFwcGluZykge1xuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgaWYgKHVzZVNvdXJjZU1hcCAmJiB0eXBlb2YgYnRvYSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBzb3VyY2VNYXBwaW5nID0gdG9Db21tZW50KGNzc01hcHBpbmcpO1xuICAgIHZhciBzb3VyY2VVUkxzID0gY3NzTWFwcGluZy5zb3VyY2VzLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICByZXR1cm4gJy8qIyBzb3VyY2VVUkw9JyArIGNzc01hcHBpbmcuc291cmNlUm9vdCArIHNvdXJjZSArICcgKi8nO1xuICAgIH0pO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKCdcXG4nKTtcbn0gLy8gQWRhcHRlZCBmcm9tIGNvbnZlcnQtc291cmNlLW1hcCAoTUlUKVxuXG5cbmZ1bmN0aW9uIHRvQ29tbWVudChzb3VyY2VNYXApIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpO1xuICB2YXIgZGF0YSA9ICdzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCwnICsgYmFzZTY0O1xuICByZXR1cm4gJy8qIyAnICsgZGF0YSArICcgKi8nO1xufSIsIid1c2Ugc3RyaWN0JztcblxudmFyIGtleXMgPSByZXF1aXJlKCdvYmplY3Qta2V5cycpO1xudmFyIGhhc1N5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2woJ2ZvbycpID09PSAnc3ltYm9sJztcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBjb25jYXQgPSBBcnJheS5wcm90b3R5cGUuY29uY2F0O1xudmFyIG9yaWdEZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxudmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiAoZm4pIHtcblx0cmV0dXJuIHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyAmJiB0b1N0ci5jYWxsKGZuKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn07XG5cbnZhciBhcmVQcm9wZXJ0eURlc2NyaXB0b3JzU3VwcG9ydGVkID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgb2JqID0ge307XG5cdHRyeSB7XG5cdFx0b3JpZ0RlZmluZVByb3BlcnR5KG9iaiwgJ3gnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogb2JqIH0pO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycywgbm8tcmVzdHJpY3RlZC1zeW50YXhcblx0XHRmb3IgKHZhciBfIGluIG9iaikgeyAvLyBqc2NzOmlnbm9yZSBkaXNhbGxvd1VudXNlZFZhcmlhYmxlc1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gb2JqLnggPT09IG9iajtcblx0fSBjYXRjaCAoZSkgeyAvKiB0aGlzIGlzIElFIDguICovXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xudmFyIHN1cHBvcnRzRGVzY3JpcHRvcnMgPSBvcmlnRGVmaW5lUHJvcGVydHkgJiYgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCgpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lLCB2YWx1ZSwgcHJlZGljYXRlKSB7XG5cdGlmIChuYW1lIGluIG9iamVjdCAmJiAoIWlzRnVuY3Rpb24ocHJlZGljYXRlKSB8fCAhcHJlZGljYXRlKCkpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmIChzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0b3JpZ0RlZmluZVByb3BlcnR5KG9iamVjdCwgbmFtZSwge1xuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9iamVjdFtuYW1lXSA9IHZhbHVlO1xuXHR9XG59O1xuXG52YXIgZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIChvYmplY3QsIG1hcCkge1xuXHR2YXIgcHJlZGljYXRlcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDoge307XG5cdHZhciBwcm9wcyA9IGtleXMobWFwKTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHRwcm9wcyA9IGNvbmNhdC5jYWxsKHByb3BzLCBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG1hcCkpO1xuXHR9XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpICs9IDEpIHtcblx0XHRkZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BzW2ldLCBtYXBbcHJvcHNbaV1dLCBwcmVkaWNhdGVzW3Byb3BzW2ldXSk7XG5cdH1cbn07XG5cbmRlZmluZVByb3BlcnRpZXMuc3VwcG9ydHNEZXNjcmlwdG9ycyA9ICEhc3VwcG9ydHNEZXNjcmlwdG9ycztcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVQcm9wZXJ0aWVzO1xuIiwiLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbnZhciBjbG9zZXN0ID0gcmVxdWlyZSgnY2xvc2VzdCcpXG4gICwgZXZlbnQgPSByZXF1aXJlKCdjb21wb25lbnQtZXZlbnQnKTtcblxuLyoqXG4gKiBEZWxlZ2F0ZSBldmVudCBgdHlwZWAgdG8gYHNlbGVjdG9yYFxuICogYW5kIGludm9rZSBgZm4oZSlgLiBBIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKiBpcyByZXR1cm5lZCB3aGljaCBtYXkgYmUgcGFzc2VkIHRvIGAudW5iaW5kKClgLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvclxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGNhcHR1cmVcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG4vLyBTb21lIGV2ZW50cyBkb24ndCBidWJibGUsIHNvIHdlIHdhbnQgdG8gYmluZCB0byB0aGUgY2FwdHVyZSBwaGFzZSBpbnN0ZWFkXG4vLyB3aGVuIGRlbGVnYXRpbmcuXG52YXIgZm9yY2VDYXB0dXJlRXZlbnRzID0gWydmb2N1cycsICdibHVyJ107XG5cbmV4cG9ydHMuYmluZCA9IGZ1bmN0aW9uKGVsLCBzZWxlY3RvciwgdHlwZSwgZm4sIGNhcHR1cmUpe1xuICBpZiAoZm9yY2VDYXB0dXJlRXZlbnRzLmluZGV4T2YodHlwZSkgIT09IC0xKSBjYXB0dXJlID0gdHJ1ZTtcblxuICByZXR1cm4gZXZlbnQuYmluZChlbCwgdHlwZSwgZnVuY3Rpb24oZSl7XG4gICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudDtcbiAgICBlLmRlbGVnYXRlVGFyZ2V0ID0gY2xvc2VzdCh0YXJnZXQsIHNlbGVjdG9yLCB0cnVlLCBlbCk7XG4gICAgaWYgKGUuZGVsZWdhdGVUYXJnZXQpIGZuLmNhbGwoZWwsIGUpO1xuICB9LCBjYXB0dXJlKTtcbn07XG5cbi8qKlxuICogVW5iaW5kIGV2ZW50IGB0eXBlYCdzIGNhbGxiYWNrIGBmbmAuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbFxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGNhcHR1cmVcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy51bmJpbmQgPSBmdW5jdGlvbihlbCwgdHlwZSwgZm4sIGNhcHR1cmUpe1xuICBpZiAoZm9yY2VDYXB0dXJlRXZlbnRzLmluZGV4T2YodHlwZSkgIT09IC0xKSBjYXB0dXJlID0gdHJ1ZTtcblxuICBldmVudC51bmJpbmQoZWwsIHR5cGUsIGZuLCBjYXB0dXJlKTtcbn07XG4iLCJcbi8qKlxuICogRXhwb3NlIGBwYXJzZWAuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZTtcblxuLyoqXG4gKiBUZXN0cyBmb3IgYnJvd3NlciBzdXBwb3J0LlxuICovXG5cbnZhciBpbm5lckhUTUxCdWcgPSBmYWxzZTtcbnZhciBidWdUZXN0RGl2O1xuaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgYnVnVGVzdERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAvLyBTZXR1cFxuICBidWdUZXN0RGl2LmlubmVySFRNTCA9ICcgIDxsaW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPVwiL2FcIj5hPC9hPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIi8+JztcbiAgLy8gTWFrZSBzdXJlIHRoYXQgbGluayBlbGVtZW50cyBnZXQgc2VyaWFsaXplZCBjb3JyZWN0bHkgYnkgaW5uZXJIVE1MXG4gIC8vIFRoaXMgcmVxdWlyZXMgYSB3cmFwcGVyIGVsZW1lbnQgaW4gSUVcbiAgaW5uZXJIVE1MQnVnID0gIWJ1Z1Rlc3REaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xpbmsnKS5sZW5ndGg7XG4gIGJ1Z1Rlc3REaXYgPSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogV3JhcCBtYXAgZnJvbSBqcXVlcnkuXG4gKi9cblxudmFyIG1hcCA9IHtcbiAgbGVnZW5kOiBbMSwgJzxmaWVsZHNldD4nLCAnPC9maWVsZHNldD4nXSxcbiAgdHI6IFsyLCAnPHRhYmxlPjx0Ym9keT4nLCAnPC90Ym9keT48L3RhYmxlPiddLFxuICBjb2w6IFsyLCAnPHRhYmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4nLCAnPC9jb2xncm91cD48L3RhYmxlPiddLFxuICAvLyBmb3Igc2NyaXB0L2xpbmsvc3R5bGUgdGFncyB0byB3b3JrIGluIElFNi04LCB5b3UgaGF2ZSB0byB3cmFwXG4gIC8vIGluIGEgZGl2IHdpdGggYSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgaW4gZnJvbnQsIGhhIVxuICBfZGVmYXVsdDogaW5uZXJIVE1MQnVnID8gWzEsICdYPGRpdj4nLCAnPC9kaXY+J10gOiBbMCwgJycsICcnXVxufTtcblxubWFwLnRkID1cbm1hcC50aCA9IFszLCAnPHRhYmxlPjx0Ym9keT48dHI+JywgJzwvdHI+PC90Ym9keT48L3RhYmxlPiddO1xuXG5tYXAub3B0aW9uID1cbm1hcC5vcHRncm91cCA9IFsxLCAnPHNlbGVjdCBtdWx0aXBsZT1cIm11bHRpcGxlXCI+JywgJzwvc2VsZWN0PiddO1xuXG5tYXAudGhlYWQgPVxubWFwLnRib2R5ID1cbm1hcC5jb2xncm91cCA9XG5tYXAuY2FwdGlvbiA9XG5tYXAudGZvb3QgPSBbMSwgJzx0YWJsZT4nLCAnPC90YWJsZT4nXTtcblxubWFwLnBvbHlsaW5lID1cbm1hcC5lbGxpcHNlID1cbm1hcC5wb2x5Z29uID1cbm1hcC5jaXJjbGUgPVxubWFwLnRleHQgPVxubWFwLmxpbmUgPVxubWFwLnBhdGggPVxubWFwLnJlY3QgPVxubWFwLmcgPSBbMSwgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZlcnNpb249XCIxLjFcIj4nLCc8L3N2Zz4nXTtcblxuLyoqXG4gKiBQYXJzZSBgaHRtbGAgYW5kIHJldHVybiBhIERPTSBOb2RlIGluc3RhbmNlLCB3aGljaCBjb3VsZCBiZSBhIFRleHROb2RlLFxuICogSFRNTCBET00gTm9kZSBvZiBzb21lIGtpbmQgKDxkaXY+IGZvciBleGFtcGxlKSwgb3IgYSBEb2N1bWVudEZyYWdtZW50XG4gKiBpbnN0YW5jZSwgZGVwZW5kaW5nIG9uIHRoZSBjb250ZW50cyBvZiB0aGUgYGh0bWxgIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaHRtbCAtIEhUTUwgc3RyaW5nIHRvIFwiZG9taWZ5XCJcbiAqIEBwYXJhbSB7RG9jdW1lbnR9IGRvYyAtIFRoZSBgZG9jdW1lbnRgIGluc3RhbmNlIHRvIGNyZWF0ZSB0aGUgTm9kZSBmb3JcbiAqIEByZXR1cm4ge0RPTU5vZGV9IHRoZSBUZXh0Tm9kZSwgRE9NIE5vZGUsIG9yIERvY3VtZW50RnJhZ21lbnQgaW5zdGFuY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlKGh0bWwsIGRvYykge1xuICBpZiAoJ3N0cmluZycgIT0gdHlwZW9mIGh0bWwpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N0cmluZyBleHBlY3RlZCcpO1xuXG4gIC8vIGRlZmF1bHQgdG8gdGhlIGdsb2JhbCBgZG9jdW1lbnRgIG9iamVjdFxuICBpZiAoIWRvYykgZG9jID0gZG9jdW1lbnQ7XG5cbiAgLy8gdGFnIG5hbWVcbiAgdmFyIG0gPSAvPChbXFx3Ol0rKS8uZXhlYyhodG1sKTtcbiAgaWYgKCFtKSByZXR1cm4gZG9jLmNyZWF0ZVRleHROb2RlKGh0bWwpO1xuXG4gIGh0bWwgPSBodG1sLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTsgLy8gUmVtb3ZlIGxlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZVxuXG4gIHZhciB0YWcgPSBtWzFdO1xuXG4gIC8vIGJvZHkgc3VwcG9ydFxuICBpZiAodGFnID09ICdib2R5Jykge1xuICAgIHZhciBlbCA9IGRvYy5jcmVhdGVFbGVtZW50KCdodG1sJyk7XG4gICAgZWwuaW5uZXJIVE1MID0gaHRtbDtcbiAgICByZXR1cm4gZWwucmVtb3ZlQ2hpbGQoZWwubGFzdENoaWxkKTtcbiAgfVxuXG4gIC8vIHdyYXAgbWFwXG4gIHZhciB3cmFwID0gbWFwW3RhZ10gfHwgbWFwLl9kZWZhdWx0O1xuICB2YXIgZGVwdGggPSB3cmFwWzBdO1xuICB2YXIgcHJlZml4ID0gd3JhcFsxXTtcbiAgdmFyIHN1ZmZpeCA9IHdyYXBbMl07XG4gIHZhciBlbCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgZWwuaW5uZXJIVE1MID0gcHJlZml4ICsgaHRtbCArIHN1ZmZpeDtcbiAgd2hpbGUgKGRlcHRoLS0pIGVsID0gZWwubGFzdENoaWxkO1xuXG4gIC8vIG9uZSBlbGVtZW50XG4gIGlmIChlbC5maXJzdENoaWxkID09IGVsLmxhc3RDaGlsZCkge1xuICAgIHJldHVybiBlbC5yZW1vdmVDaGlsZChlbC5maXJzdENoaWxkKTtcbiAgfVxuXG4gIC8vIHNldmVyYWwgZWxlbWVudHNcbiAgdmFyIGZyYWdtZW50ID0gZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgd2hpbGUgKGVsLmZpcnN0Q2hpbGQpIHtcbiAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChlbC5yZW1vdmVDaGlsZChlbC5maXJzdENoaWxkKSk7XG4gIH1cblxuICByZXR1cm4gZnJhZ21lbnQ7XG59XG4iLCIvKiFcbiAgKiBkb21yZWFkeSAoYykgRHVzdGluIERpYXogMjAxNCAtIExpY2Vuc2UgTUlUXG4gICovXG4hZnVuY3Rpb24gKG5hbWUsIGRlZmluaXRpb24pIHtcblxuICBpZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZpbmVkJykgbW9kdWxlLmV4cG9ydHMgPSBkZWZpbml0aW9uKClcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnKSBkZWZpbmUoZGVmaW5pdGlvbilcbiAgZWxzZSB0aGlzW25hbWVdID0gZGVmaW5pdGlvbigpXG5cbn0oJ2RvbXJlYWR5JywgZnVuY3Rpb24gKCkge1xuXG4gIHZhciBmbnMgPSBbXSwgbGlzdGVuZXJcbiAgICAsIGRvYyA9IGRvY3VtZW50XG4gICAgLCBoYWNrID0gZG9jLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbFxuICAgICwgZG9tQ29udGVudExvYWRlZCA9ICdET01Db250ZW50TG9hZGVkJ1xuICAgICwgbG9hZGVkID0gKGhhY2sgPyAvXmxvYWRlZHxeYy8gOiAvXmxvYWRlZHxeaXxeYy8pLnRlc3QoZG9jLnJlYWR5U3RhdGUpXG5cblxuICBpZiAoIWxvYWRlZClcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoZG9tQ29udGVudExvYWRlZCwgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tQ29udGVudExvYWRlZCwgbGlzdGVuZXIpXG4gICAgbG9hZGVkID0gMVxuICAgIHdoaWxlIChsaXN0ZW5lciA9IGZucy5zaGlmdCgpKSBsaXN0ZW5lcigpXG4gIH0pXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgIGxvYWRlZCA/IHNldFRpbWVvdXQoZm4sIDApIDogZm5zLnB1c2goZm4pXG4gIH1cblxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qIGdsb2JhbHNcblx0U2V0LFxuXHRNYXAsXG5cdFdlYWtTZXQsXG5cdFdlYWtNYXAsXG5cblx0UHJvbWlzZSxcblxuXHRTeW1ib2wsXG5cdFByb3h5LFxuXG5cdEF0b21pY3MsXG5cdFNoYXJlZEFycmF5QnVmZmVyLFxuXG5cdEFycmF5QnVmZmVyLFxuXHREYXRhVmlldyxcblx0VWludDhBcnJheSxcblx0RmxvYXQzMkFycmF5LFxuXHRGbG9hdDY0QXJyYXksXG5cdEludDhBcnJheSxcblx0SW50MTZBcnJheSxcblx0SW50MzJBcnJheSxcblx0VWludDhDbGFtcGVkQXJyYXksXG5cdFVpbnQxNkFycmF5LFxuXHRVaW50MzJBcnJheSxcbiovXG5cbnZhciB1bmRlZmluZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2hhZG93LXJlc3RyaWN0ZWQtbmFtZXNcblxudmFyIFRocm93VHlwZUVycm9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvclxuXHQ/IChmdW5jdGlvbiAoKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJ2NhbGxlZScpLmdldDsgfSgpKVxuXHQ6IGZ1bmN0aW9uICgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyB9O1xuXG52YXIgaGFzU3ltYm9scyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gJ3N5bWJvbCc7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIGdlbmVyYXRvcjsgLy8gPSBmdW5jdGlvbiAqICgpIHt9O1xudmFyIGdlbmVyYXRvckZ1bmN0aW9uID0gZ2VuZXJhdG9yID8gZ2V0UHJvdG8oZ2VuZXJhdG9yKSA6IHVuZGVmaW5lZDtcbnZhciBhc3luY0ZuOyAvLyBhc3luYyBmdW5jdGlvbigpIHt9O1xudmFyIGFzeW5jRnVuY3Rpb24gPSBhc3luY0ZuID8gYXN5bmNGbi5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZDtcbnZhciBhc3luY0dlbjsgLy8gYXN5bmMgZnVuY3Rpb24gKiAoKSB7fTtcbnZhciBhc3luY0dlbkZ1bmN0aW9uID0gYXN5bmNHZW4gPyBnZXRQcm90byhhc3luY0dlbikgOiB1bmRlZmluZWQ7XG52YXIgYXN5bmNHZW5JdGVyYXRvciA9IGFzeW5jR2VuID8gYXN5bmNHZW4oKSA6IHVuZGVmaW5lZDtcblxudmFyIFR5cGVkQXJyYXkgPSB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBnZXRQcm90byhVaW50OEFycmF5KTtcblxudmFyIElOVFJJTlNJQ1MgPSB7XG5cdCckICVBcnJheSUnOiBBcnJheSxcblx0JyQgJUFycmF5QnVmZmVyJSc6IHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBcnJheUJ1ZmZlcixcblx0JyQgJUFycmF5QnVmZmVyUHJvdG90eXBlJSc6IHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBcnJheUJ1ZmZlci5wcm90b3R5cGUsXG5cdCckICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpIDogdW5kZWZpbmVkLFxuXHQnJCAlQXJyYXlQcm90b3R5cGUlJzogQXJyYXkucHJvdG90eXBlLFxuXHQnJCAlQXJyYXlQcm90b19lbnRyaWVzJSc6IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzLFxuXHQnJCAlQXJyYXlQcm90b19mb3JFYWNoJSc6IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLFxuXHQnJCAlQXJyYXlQcm90b19rZXlzJSc6IEFycmF5LnByb3RvdHlwZS5rZXlzLFxuXHQnJCAlQXJyYXlQcm90b192YWx1ZXMlJzogQXJyYXkucHJvdG90eXBlLnZhbHVlcyxcblx0JyQgJUFzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiB1bmRlZmluZWQsXG5cdCckICVBc3luY0Z1bmN0aW9uJSc6IGFzeW5jRnVuY3Rpb24sXG5cdCckICVBc3luY0Z1bmN0aW9uUHJvdG90eXBlJSc6IGFzeW5jRnVuY3Rpb24gPyBhc3luY0Z1bmN0aW9uLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcblx0JyQgJUFzeW5jR2VuZXJhdG9yJSc6IGFzeW5jR2VuID8gZ2V0UHJvdG8oYXN5bmNHZW5JdGVyYXRvcikgOiB1bmRlZmluZWQsXG5cdCckICVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSc6IGFzeW5jR2VuRnVuY3Rpb24sXG5cdCckICVBc3luY0dlbmVyYXRvclByb3RvdHlwZSUnOiBhc3luY0dlbkZ1bmN0aW9uID8gYXN5bmNHZW5GdW5jdGlvbi5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG5cdCckICVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IGFzeW5jR2VuSXRlcmF0b3IgJiYgaGFzU3ltYm9scyAmJiBTeW1ib2wuYXN5bmNJdGVyYXRvciA/IGFzeW5jR2VuSXRlcmF0b3JbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkgOiB1bmRlZmluZWQsXG5cdCckICVBdG9taWNzJSc6IHR5cGVvZiBBdG9taWNzID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEF0b21pY3MsXG5cdCckICVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCckICVCb29sZWFuUHJvdG90eXBlJSc6IEJvb2xlYW4ucHJvdG90eXBlLFxuXHQnJCAlRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJCAlRGF0YVZpZXdQcm90b3R5cGUlJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LnByb3RvdHlwZSxcblx0JyQgJURhdGUlJzogRGF0ZSxcblx0JyQgJURhdGVQcm90b3R5cGUlJzogRGF0ZS5wcm90b3R5cGUsXG5cdCckICVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJCAlZGVjb2RlVVJJQ29tcG9uZW50JSc6IGRlY29kZVVSSUNvbXBvbmVudCxcblx0JyQgJWVuY29kZVVSSSUnOiBlbmNvZGVVUkksXG5cdCckICVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJCAlRXJyb3IlJzogRXJyb3IsXG5cdCckICVFcnJvclByb3RvdHlwZSUnOiBFcnJvci5wcm90b3R5cGUsXG5cdCckICVldmFsJSc6IGV2YWwsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZXZhbFxuXHQnJCAlRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyQgJUV2YWxFcnJvclByb3RvdHlwZSUnOiBFdmFsRXJyb3IucHJvdG90eXBlLFxuXHQnJCAlRmxvYXQzMkFycmF5JSc6IHR5cGVvZiBGbG9hdDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQzMkFycmF5LFxuXHQnJCAlRmxvYXQzMkFycmF5UHJvdG90eXBlJSc6IHR5cGVvZiBGbG9hdDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQzMkFycmF5LnByb3RvdHlwZSxcblx0JyQgJUZsb2F0NjRBcnJheSUnOiB0eXBlb2YgRmxvYXQ2NEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZsb2F0NjRBcnJheSxcblx0JyQgJUZsb2F0NjRBcnJheVByb3RvdHlwZSUnOiB0eXBlb2YgRmxvYXQ2NEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZsb2F0NjRBcnJheS5wcm90b3R5cGUsXG5cdCckICVGdW5jdGlvbiUnOiBGdW5jdGlvbixcblx0JyQgJUZ1bmN0aW9uUHJvdG90eXBlJSc6IEZ1bmN0aW9uLnByb3RvdHlwZSxcblx0JyQgJUdlbmVyYXRvciUnOiBnZW5lcmF0b3IgPyBnZXRQcm90byhnZW5lcmF0b3IoKSkgOiB1bmRlZmluZWQsXG5cdCckICVHZW5lcmF0b3JGdW5jdGlvbiUnOiBnZW5lcmF0b3JGdW5jdGlvbixcblx0JyQgJUdlbmVyYXRvclByb3RvdHlwZSUnOiBnZW5lcmF0b3JGdW5jdGlvbiA/IGdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcblx0JyQgJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyQgJUludDhBcnJheVByb3RvdHlwZSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheS5wcm90b3R5cGUsXG5cdCckICVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCckICVJbnQxNkFycmF5UHJvdG90eXBlJSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheS5wcm90b3R5cGUsXG5cdCckICVJbnQzMkFycmF5JSc6IHR5cGVvZiBJbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDMyQXJyYXksXG5cdCckICVJbnQzMkFycmF5UHJvdG90eXBlJSc6IHR5cGVvZiBJbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDMyQXJyYXkucHJvdG90eXBlLFxuXHQnJCAlaXNGaW5pdGUlJzogaXNGaW5pdGUsXG5cdCckICVpc05hTiUnOiBpc05hTixcblx0JyQgJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyQgJUpTT04lJzogSlNPTixcblx0JyQgJUpTT05QYXJzZSUnOiBKU09OLnBhcnNlLFxuXHQnJCAlTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJCAlTWFwSXRlcmF0b3JQcm90b3R5cGUlJzogdHlwZW9mIE1hcCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWhhc1N5bWJvbHMgPyB1bmRlZmluZWQgOiBnZXRQcm90byhuZXcgTWFwKClbU3ltYm9sLml0ZXJhdG9yXSgpKSxcblx0JyQgJU1hcFByb3RvdHlwZSUnOiB0eXBlb2YgTWFwID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IE1hcC5wcm90b3R5cGUsXG5cdCckICVNYXRoJSc6IE1hdGgsXG5cdCckICVOdW1iZXIlJzogTnVtYmVyLFxuXHQnJCAlTnVtYmVyUHJvdG90eXBlJSc6IE51bWJlci5wcm90b3R5cGUsXG5cdCckICVPYmplY3QlJzogT2JqZWN0LFxuXHQnJCAlT2JqZWN0UHJvdG90eXBlJSc6IE9iamVjdC5wcm90b3R5cGUsXG5cdCckICVPYmpQcm90b190b1N0cmluZyUnOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLFxuXHQnJCAlT2JqUHJvdG9fdmFsdWVPZiUnOiBPYmplY3QucHJvdG90eXBlLnZhbHVlT2YsXG5cdCckICVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCckICVwYXJzZUludCUnOiBwYXJzZUludCxcblx0JyQgJVByb21pc2UlJzogdHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJvbWlzZSxcblx0JyQgJVByb21pc2VQcm90b3R5cGUlJzogdHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJvbWlzZS5wcm90b3R5cGUsXG5cdCckICVQcm9taXNlUHJvdG9fdGhlbiUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLnByb3RvdHlwZS50aGVuLFxuXHQnJCAlUHJvbWlzZV9hbGwlJzogdHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJvbWlzZS5hbGwsXG5cdCckICVQcm9taXNlX3JlamVjdCUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLnJlamVjdCxcblx0JyQgJVByb21pc2VfcmVzb2x2ZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLnJlc29sdmUsXG5cdCckICVQcm94eSUnOiB0eXBlb2YgUHJveHkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJveHksXG5cdCckICVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCckICVSYW5nZUVycm9yUHJvdG90eXBlJSc6IFJhbmdlRXJyb3IucHJvdG90eXBlLFxuXHQnJCAlUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCckICVSZWZlcmVuY2VFcnJvclByb3RvdHlwZSUnOiBSZWZlcmVuY2VFcnJvci5wcm90b3R5cGUsXG5cdCckICVSZWZsZWN0JSc6IHR5cGVvZiBSZWZsZWN0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFJlZmxlY3QsXG5cdCckICVSZWdFeHAlJzogUmVnRXhwLFxuXHQnJCAlUmVnRXhwUHJvdG90eXBlJSc6IFJlZ0V4cC5wcm90b3R5cGUsXG5cdCckICVTZXQlJzogdHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTZXQsXG5cdCckICVTZXRJdGVyYXRvclByb3RvdHlwZSUnOiB0eXBlb2YgU2V0ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzU3ltYm9scyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKG5ldyBTZXQoKVtTeW1ib2wuaXRlcmF0b3JdKCkpLFxuXHQnJCAlU2V0UHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LnByb3RvdHlwZSxcblx0JyQgJVNoYXJlZEFycmF5QnVmZmVyJSc6IHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTaGFyZWRBcnJheUJ1ZmZlcixcblx0JyQgJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTaGFyZWRBcnJheUJ1ZmZlci5wcm90b3R5cGUsXG5cdCckICVTdHJpbmclJzogU3RyaW5nLFxuXHQnJCAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCckICVTdHJpbmdQcm90b3R5cGUlJzogU3RyaW5nLnByb3RvdHlwZSxcblx0JyQgJVN5bWJvbCUnOiBoYXNTeW1ib2xzID8gU3ltYm9sIDogdW5kZWZpbmVkLFxuXHQnJCAlU3ltYm9sUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuXHQnJCAlU3ludGF4RXJyb3IlJzogU3ludGF4RXJyb3IsXG5cdCckICVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBTeW50YXhFcnJvci5wcm90b3R5cGUsXG5cdCckICVUaHJvd1R5cGVFcnJvciUnOiBUaHJvd1R5cGVFcnJvcixcblx0JyQgJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyQgJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogVHlwZWRBcnJheSA/IFR5cGVkQXJyYXkucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuXHQnJCAlVHlwZUVycm9yJSc6IFR5cGVFcnJvcixcblx0JyQgJVR5cGVFcnJvclByb3RvdHlwZSUnOiBUeXBlRXJyb3IucHJvdG90eXBlLFxuXHQnJCAlVWludDhBcnJheSUnOiB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OEFycmF5LFxuXHQnJCAlVWludDhBcnJheVByb3RvdHlwZSUnOiB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OEFycmF5LnByb3RvdHlwZSxcblx0JyQgJVVpbnQ4Q2xhbXBlZEFycmF5JSc6IHR5cGVvZiBVaW50OENsYW1wZWRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OENsYW1wZWRBcnJheSxcblx0JyQgJVVpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlJSc6IHR5cGVvZiBVaW50OENsYW1wZWRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OENsYW1wZWRBcnJheS5wcm90b3R5cGUsXG5cdCckICVVaW50MTZBcnJheSUnOiB0eXBlb2YgVWludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDE2QXJyYXksXG5cdCckICVVaW50MTZBcnJheVByb3RvdHlwZSUnOiB0eXBlb2YgVWludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDE2QXJyYXkucHJvdG90eXBlLFxuXHQnJCAlVWludDMyQXJyYXklJzogdHlwZW9mIFVpbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQzMkFycmF5LFxuXHQnJCAlVWludDMyQXJyYXlQcm90b3R5cGUlJzogdHlwZW9mIFVpbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQzMkFycmF5LnByb3RvdHlwZSxcblx0JyQgJVVSSUVycm9yJSc6IFVSSUVycm9yLFxuXHQnJCAlVVJJRXJyb3JQcm90b3R5cGUlJzogVVJJRXJyb3IucHJvdG90eXBlLFxuXHQnJCAlV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJCAlV2Vha01hcFByb3RvdHlwZSUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLnByb3RvdHlwZSxcblx0JyQgJVdlYWtTZXQlJzogdHlwZW9mIFdlYWtTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1NldCxcblx0JyQgJVdlYWtTZXRQcm90b3R5cGUlJzogdHlwZW9mIFdlYWtTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1NldC5wcm90b3R5cGVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0SW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgdHlwZW9mIGFsbG93TWlzc2luZyAhPT0gJ2Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIGtleSA9ICckICcgKyBuYW1lO1xuXHRpZiAoIShrZXkgaW4gSU5UUklOU0lDUykpIHtcblx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG5cdH1cblxuXHQvLyBpc3RhbmJ1bCBpZ25vcmUgaWYgLy8gaG9wZWZ1bGx5IHRoaXMgaXMgaW1wb3NzaWJsZSB0byB0ZXN0IDotKVxuXHRpZiAodHlwZW9mIElOVFJJTlNJQ1Nba2V5XSA9PT0gJ3VuZGVmaW5lZCcgJiYgIWFsbG93TWlzc2luZykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZXhpc3RzLCBidXQgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGZpbGUgYW4gaXNzdWUhJyk7XG5cdH1cblx0cmV0dXJuIElOVFJJTlNJQ1Nba2V5XTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuL0dldEludHJpbnNpYycpO1xuXG52YXIgJE9iamVjdCA9IEdldEludHJpbnNpYygnJU9iamVjdCUnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYXNzZXJ0UmVjb3JkJyk7XG52YXIgJGlzTmFOID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzRmluaXRlJyk7XG5cbnZhciBzaWduID0gcmVxdWlyZSgnLi9oZWxwZXJzL3NpZ24nKTtcbnZhciBtb2QgPSByZXF1aXJlKCcuL2hlbHBlcnMvbW9kJyk7XG5cbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnaXMtY2FsbGFibGUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJ2VzLXRvLXByaW1pdGl2ZS9lczUnKTtcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG4vLyBodHRwczovL2VzNS5naXRodWIuaW8vI3g5XG52YXIgRVM1ID0ge1xuXHRUb1ByaW1pdGl2ZTogdG9QcmltaXRpdmUsXG5cblx0VG9Cb29sZWFuOiBmdW5jdGlvbiBUb0Jvb2xlYW4odmFsdWUpIHtcblx0XHRyZXR1cm4gISF2YWx1ZTtcblx0fSxcblx0VG9OdW1iZXI6IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdFx0cmV0dXJuICt2YWx1ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbXBsaWNpdC1jb2VyY2lvblxuXHR9LFxuXHRUb0ludGVnZXI6IGZ1bmN0aW9uIFRvSW50ZWdlcih2YWx1ZSkge1xuXHRcdHZhciBudW1iZXIgPSB0aGlzLlRvTnVtYmVyKHZhbHVlKTtcblx0XHRpZiAoJGlzTmFOKG51bWJlcikpIHsgcmV0dXJuIDA7IH1cblx0XHRpZiAobnVtYmVyID09PSAwIHx8ICEkaXNGaW5pdGUobnVtYmVyKSkgeyByZXR1cm4gbnVtYmVyOyB9XG5cdFx0cmV0dXJuIHNpZ24obnVtYmVyKSAqIE1hdGguZmxvb3IoTWF0aC5hYnMobnVtYmVyKSk7XG5cdH0sXG5cdFRvSW50MzI6IGZ1bmN0aW9uIFRvSW50MzIoeCkge1xuXHRcdHJldHVybiB0aGlzLlRvTnVtYmVyKHgpID4+IDA7XG5cdH0sXG5cdFRvVWludDMyOiBmdW5jdGlvbiBUb1VpbnQzMih4KSB7XG5cdFx0cmV0dXJuIHRoaXMuVG9OdW1iZXIoeCkgPj4+IDA7XG5cdH0sXG5cdFRvVWludDE2OiBmdW5jdGlvbiBUb1VpbnQxNih2YWx1ZSkge1xuXHRcdHZhciBudW1iZXIgPSB0aGlzLlRvTnVtYmVyKHZhbHVlKTtcblx0XHRpZiAoJGlzTmFOKG51bWJlcikgfHwgbnVtYmVyID09PSAwIHx8ICEkaXNGaW5pdGUobnVtYmVyKSkgeyByZXR1cm4gMDsgfVxuXHRcdHZhciBwb3NJbnQgPSBzaWduKG51bWJlcikgKiBNYXRoLmZsb29yKE1hdGguYWJzKG51bWJlcikpO1xuXHRcdHJldHVybiBtb2QocG9zSW50LCAweDEwMDAwKTtcblx0fSxcblx0VG9TdHJpbmc6IGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlKSB7XG5cdFx0cmV0dXJuICRTdHJpbmcodmFsdWUpO1xuXHR9LFxuXHRUb09iamVjdDogZnVuY3Rpb24gVG9PYmplY3QodmFsdWUpIHtcblx0XHR0aGlzLkNoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlKTtcblx0XHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG5cdH0sXG5cdENoZWNrT2JqZWN0Q29lcmNpYmxlOiBmdW5jdGlvbiBDaGVja09iamVjdENvZXJjaWJsZSh2YWx1ZSwgb3B0TWVzc2FnZSkge1xuXHRcdC8qIGpzaGludCBlcW51bGw6dHJ1ZSAqL1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihvcHRNZXNzYWdlIHx8ICdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIHZhbHVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXHRJc0NhbGxhYmxlOiBJc0NhbGxhYmxlLFxuXHRTYW1lVmFsdWU6IGZ1bmN0aW9uIFNhbWVWYWx1ZSh4LCB5KSB7XG5cdFx0aWYgKHggPT09IHkpIHsgLy8gMCA9PT0gLTAsIGJ1dCB0aGV5IGFyZSBub3QgaWRlbnRpY2FsLlxuXHRcdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xuXHR9LFxuXG5cdC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOFxuXHRUeXBlOiBmdW5jdGlvbiBUeXBlKHgpIHtcblx0XHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuICdOdWxsJztcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdFx0cmV0dXJuICdVbmRlZmluZWQnO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gJ09iamVjdCc7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRcdHJldHVybiAnTnVtYmVyJztcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRcdHJldHVybiAnQm9vbGVhbic7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdHJldHVybiAnU3RyaW5nJztcblx0XHR9XG5cdH0sXG5cblx0Ly8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdElzUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBJc1Byb3BlcnR5RGVzY3JpcHRvcihEZXNjKSB7XG5cdFx0aWYgKHRoaXMuVHlwZShEZXNjKSAhPT0gJ09iamVjdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dmFyIGFsbG93ZWQgPSB7XG5cdFx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tFbnVtZXJhYmxlXV0nOiB0cnVlLFxuXHRcdFx0J1tbR2V0XV0nOiB0cnVlLFxuXHRcdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdFx0J1tbVmFsdWVdXSc6IHRydWUsXG5cdFx0XHQnW1tXcml0YWJsZV1dJzogdHJ1ZVxuXHRcdH07XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gRGVzYykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cdFx0XHRpZiAoaGFzKERlc2MsIGtleSkgJiYgIWFsbG93ZWRba2V5XSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIGlzRGF0YSA9IGhhcyhEZXNjLCAnW1tWYWx1ZV1dJyk7XG5cdFx0dmFyIElzQWNjZXNzb3IgPSBoYXMoRGVzYywgJ1tbR2V0XV0nKSB8fCBoYXMoRGVzYywgJ1tbU2V0XV0nKTtcblx0XHRpZiAoaXNEYXRhICYmIElzQWNjZXNzb3IpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdQcm9wZXJ0eSBEZXNjcmlwdG9ycyBtYXkgbm90IGJlIGJvdGggYWNjZXNzb3IgYW5kIGRhdGEgZGVzY3JpcHRvcnMnKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Ly8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTguMTAuMVxuXHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRcdGlmICh0eXBlb2YgRGVzYyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRhc3NlcnRSZWNvcmQodGhpcywgJ1Byb3BlcnR5IERlc2NyaXB0b3InLCAnRGVzYycsIERlc2MpO1xuXG5cdFx0aWYgKCFoYXMoRGVzYywgJ1tbR2V0XV0nKSAmJiAhaGFzKERlc2MsICdbW1NldF1dJykpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOC4xMC4yXG5cdElzRGF0YURlc2NyaXB0b3I6IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRcdGlmICh0eXBlb2YgRGVzYyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRhc3NlcnRSZWNvcmQodGhpcywgJ1Byb3BlcnR5IERlc2NyaXB0b3InLCAnRGVzYycsIERlc2MpO1xuXG5cdFx0aWYgKCFoYXMoRGVzYywgJ1tbVmFsdWVdXScpICYmICFoYXMoRGVzYywgJ1tbV3JpdGFibGVdXScpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Ly8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTguMTAuM1xuXHRJc0dlbmVyaWNEZXNjcmlwdG9yOiBmdW5jdGlvbiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIHtcblx0XHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0YXNzZXJ0UmVjb3JkKHRoaXMsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRcdGlmICghdGhpcy5Jc0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSAmJiAhdGhpcy5Jc0RhdGFEZXNjcmlwdG9yKERlc2MpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0Ly8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTguMTAuNFxuXHRGcm9tUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0XHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gRGVzYztcblx0XHR9XG5cblx0XHRhc3NlcnRSZWNvcmQodGhpcywgJ1Byb3BlcnR5IERlc2NyaXB0b3InLCAnRGVzYycsIERlc2MpO1xuXG5cdFx0aWYgKHRoaXMuSXNEYXRhRGVzY3JpcHRvcihEZXNjKSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dmFsdWU6IERlc2NbJ1tbVmFsdWVdXSddLFxuXHRcdFx0XHR3cml0YWJsZTogISFEZXNjWydbW1dyaXRhYmxlXV0nXSxcblx0XHRcdFx0ZW51bWVyYWJsZTogISFEZXNjWydbW0VudW1lcmFibGVdXSddLFxuXHRcdFx0XHRjb25maWd1cmFibGU6ICEhRGVzY1snW1tDb25maWd1cmFibGVdXSddXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSBpZiAodGhpcy5Jc0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Z2V0OiBEZXNjWydbW0dldF1dJ10sXG5cdFx0XHRcdHNldDogRGVzY1snW1tTZXRdXSddLFxuXHRcdFx0XHRlbnVtZXJhYmxlOiAhIURlc2NbJ1tbRW51bWVyYWJsZV1dJ10sXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogISFEZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ11cblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdGcm9tUHJvcGVydHlEZXNjcmlwdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggYSBmdWxseSBwb3B1bGF0ZWQgUHJvcGVydHkgRGVzY3JpcHRvcicpO1xuXHRcdH1cblx0fSxcblxuXHQvLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOC4xMC41XG5cdFRvUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0XHRpZiAodGhpcy5UeXBlKE9iaikgIT09ICdPYmplY3QnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2MgPSB7fTtcblx0XHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdFx0ZGVzY1snW1tFbnVtZXJhYmxlXV0nXSA9IHRoaXMuVG9Cb29sZWFuKE9iai5lbnVtZXJhYmxlKTtcblx0XHR9XG5cdFx0aWYgKGhhcyhPYmosICdjb25maWd1cmFibGUnKSkge1xuXHRcdFx0ZGVzY1snW1tDb25maWd1cmFibGVdXSddID0gdGhpcy5Ub0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdFx0fVxuXHRcdGlmIChoYXMoT2JqLCAndmFsdWUnKSkge1xuXHRcdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdFx0fVxuXHRcdGlmIChoYXMoT2JqLCAnd3JpdGFibGUnKSkge1xuXHRcdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSB0aGlzLlRvQm9vbGVhbihPYmoud3JpdGFibGUpO1xuXHRcdH1cblx0XHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0XHR2YXIgZ2V0dGVyID0gT2JqLmdldDtcblx0XHRcdGlmICh0eXBlb2YgZ2V0dGVyICE9PSAndW5kZWZpbmVkJyAmJiAhdGhpcy5Jc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignZ2V0dGVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuXHRcdFx0fVxuXHRcdFx0ZGVzY1snW1tHZXRdXSddID0gZ2V0dGVyO1xuXHRcdH1cblx0XHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0XHR2YXIgc2V0dGVyID0gT2JqLnNldDtcblx0XHRcdGlmICh0eXBlb2Ygc2V0dGVyICE9PSAndW5kZWZpbmVkJyAmJiAhdGhpcy5Jc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ3NldHRlciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblx0XHRcdH1cblx0XHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0XHR9XG5cblx0XHRpZiAoKGhhcyhkZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhkZXNjLCAnW1tTZXRdXScpKSAmJiAoaGFzKGRlc2MsICdbW1ZhbHVlXV0nKSB8fCBoYXMoZGVzYywgJ1tbV3JpdGFibGVdXScpKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdFx0fVxuXHRcdHJldHVybiBkZXNjO1xuXHR9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEVTNTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJy4uL0dldEludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcbnZhciAkU3ludGF4RXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVTeW50YXhFcnJvciUnKTtcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgcHJlZGljYXRlcyA9IHtcbiAgLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG4gICdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoRVMsIERlc2MpIHtcbiAgICBpZiAoRVMuVHlwZShEZXNjKSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGFsbG93ZWQgPSB7XG4gICAgICAnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG4gICAgICAnW1tFbnVtZXJhYmxlXV0nOiB0cnVlLFxuICAgICAgJ1tbR2V0XV0nOiB0cnVlLFxuICAgICAgJ1tbU2V0XV0nOiB0cnVlLFxuICAgICAgJ1tbVmFsdWVdXSc6IHRydWUsXG4gICAgICAnW1tXcml0YWJsZV1dJzogdHJ1ZVxuICAgIH07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gRGVzYykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICBpZiAoaGFzKERlc2MsIGtleSkgJiYgIWFsbG93ZWRba2V5XSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGlzRGF0YSA9IGhhcyhEZXNjLCAnW1tWYWx1ZV1dJyk7XG4gICAgdmFyIElzQWNjZXNzb3IgPSBoYXMoRGVzYywgJ1tbR2V0XV0nKSB8fCBoYXMoRGVzYywgJ1tbU2V0XV0nKTtcbiAgICBpZiAoaXNEYXRhICYmIElzQWNjZXNzb3IpIHtcbiAgICAgIHRocm93IG5ldyAkVHlwZUVycm9yKCdQcm9wZXJ0eSBEZXNjcmlwdG9ycyBtYXkgbm90IGJlIGJvdGggYWNjZXNzb3IgYW5kIGRhdGEgZGVzY3JpcHRvcnMnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYXNzZXJ0UmVjb3JkKEVTLCByZWNvcmRUeXBlLCBhcmd1bWVudE5hbWUsIHZhbHVlKSB7XG4gIHZhciBwcmVkaWNhdGUgPSBwcmVkaWNhdGVzW3JlY29yZFR5cGVdO1xuICBpZiAodHlwZW9mIHByZWRpY2F0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ3Vua25vd24gcmVjb3JkIHR5cGU6ICcgKyByZWNvcmRUeXBlKTtcbiAgfVxuICBpZiAoIXByZWRpY2F0ZShFUywgdmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuICB9XG4gIGNvbnNvbGUubG9nKHByZWRpY2F0ZShFUywgdmFsdWUpLCB2YWx1ZSk7XG59O1xuIiwidmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiIsIm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtb2QobnVtYmVyLCBtb2R1bG8pIHtcblx0dmFyIHJlbWFpbiA9IG51bWJlciAlIG1vZHVsbztcblx0cmV0dXJuIE1hdGguZmxvb3IocmVtYWluID49IDAgPyByZW1haW4gOiByZW1haW4gKyBtb2R1bG8pO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2lnbihudW1iZXIpIHtcblx0cmV0dXJuIG51bWJlciA+PSAwID8gMSA6IC0xO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG5cbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnaXMtY2FsbGFibGUnKTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOC4xMi44XG52YXIgRVM1aW50ZXJuYWxTbG90cyA9IHtcblx0J1tbRGVmYXVsdFZhbHVlXV0nOiBmdW5jdGlvbiAoTykge1xuXHRcdHZhciBhY3R1YWxIaW50O1xuXHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdFx0YWN0dWFsSGludCA9IGFyZ3VtZW50c1sxXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YWN0dWFsSGludCA9IHRvU3RyLmNhbGwoTykgPT09ICdbb2JqZWN0IERhdGVdJyA/IFN0cmluZyA6IE51bWJlcjtcblx0XHR9XG5cblx0XHRpZiAoYWN0dWFsSGludCA9PT0gU3RyaW5nIHx8IGFjdHVhbEhpbnQgPT09IE51bWJlcikge1xuXHRcdFx0dmFyIG1ldGhvZHMgPSBhY3R1YWxIaW50ID09PSBTdHJpbmcgPyBbJ3RvU3RyaW5nJywgJ3ZhbHVlT2YnXSA6IFsndmFsdWVPZicsICd0b1N0cmluZyddO1xuXHRcdFx0dmFyIHZhbHVlLCBpO1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0aWYgKGlzQ2FsbGFibGUoT1ttZXRob2RzW2ldXSkpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IE9bbWV0aG9kc1tpXV0oKTtcblx0XHRcdFx0XHRpZiAoaXNQcmltaXRpdmUodmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgW1tEZWZhdWx0VmFsdWVdXSBoaW50IHN1cHBsaWVkJyk7XG5cdH1cbn07XG5cbi8vIGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTkuMVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1ByaW1pdGl2ZShpbnB1dCkge1xuXHRpZiAoaXNQcmltaXRpdmUoaW5wdXQpKSB7XG5cdFx0cmV0dXJuIGlucHV0O1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiBFUzVpbnRlcm5hbFNsb3RzWydbW0RlZmF1bHRWYWx1ZV1dJ10oaW5wdXQsIGFyZ3VtZW50c1sxXSk7XG5cdH1cblx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKTtcbn07XG4iLCJcbi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG52YXIgZXZlbnRzID0gcmVxdWlyZSgnY29tcG9uZW50LWV2ZW50Jyk7XG52YXIgZGVsZWdhdGUgPSByZXF1aXJlKCdkZWxlZ2F0ZS1ldmVudHMnKTtcbnZhciBmb3JjZUNhcHR1cmVFdmVudHMgPSBbJ2ZvY3VzJywgJ2JsdXInXTtcblxuLyoqXG4gKiBFeHBvc2UgYEV2ZW50c2AuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBFdmVudHM7XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhbiBgRXZlbnRzYCB3aXRoIHRoZSBnaXZlblxuICogYGVsYCBvYmplY3Qgd2hpY2ggZXZlbnRzIHdpbGwgYmUgYm91bmQgdG8sXG4gKiBhbmQgdGhlIGBvYmpgIHdoaWNoIHdpbGwgcmVjZWl2ZSBtZXRob2QgY2FsbHMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGVsXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIEV2ZW50cyhlbCwgb2JqKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBFdmVudHMpKSByZXR1cm4gbmV3IEV2ZW50cyhlbCwgb2JqKTtcbiAgaWYgKCFlbCkgdGhyb3cgbmV3IEVycm9yKCdlbGVtZW50IHJlcXVpcmVkJyk7XG4gIGlmICghb2JqKSB0aHJvdyBuZXcgRXJyb3IoJ29iamVjdCByZXF1aXJlZCcpO1xuICB0aGlzLmVsID0gZWw7XG4gIHRoaXMub2JqID0gb2JqO1xuICB0aGlzLl9ldmVudHMgPSB7fTtcbn1cblxuLyoqXG4gKiBTdWJzY3JpcHRpb24gaGVscGVyLlxuICovXG5cbkV2ZW50cy5wcm90b3R5cGUuc3ViID0gZnVuY3Rpb24oZXZlbnQsIG1ldGhvZCwgY2Ipe1xuICB0aGlzLl9ldmVudHNbZXZlbnRdID0gdGhpcy5fZXZlbnRzW2V2ZW50XSB8fCB7fTtcbiAgdGhpcy5fZXZlbnRzW2V2ZW50XVttZXRob2RdID0gY2I7XG59O1xuXG4vKipcbiAqIEJpbmQgdG8gYGV2ZW50YCB3aXRoIG9wdGlvbmFsIGBtZXRob2RgIG5hbWUuXG4gKiBXaGVuIGBtZXRob2RgIGlzIHVuZGVmaW5lZCBpdCBiZWNvbWVzIGBldmVudGBcbiAqIHdpdGggdGhlIFwib25cIiBwcmVmaXguXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogIERpcmVjdCBldmVudCBoYW5kbGluZzpcbiAqXG4gKiAgICBldmVudHMuYmluZCgnY2xpY2snKSAvLyBpbXBsaWVzIFwib25jbGlja1wiXG4gKiAgICBldmVudHMuYmluZCgnY2xpY2snLCAncmVtb3ZlJylcbiAqICAgIGV2ZW50cy5iaW5kKCdjbGljaycsICdzb3J0JywgJ2FzYycpXG4gKlxuICogIERlbGVnYXRlZCBldmVudCBoYW5kbGluZzpcbiAqXG4gKiAgICBldmVudHMuYmluZCgnY2xpY2sgbGkgPiBhJylcbiAqICAgIGV2ZW50cy5iaW5kKCdjbGljayBsaSA+IGEnLCAncmVtb3ZlJylcbiAqICAgIGV2ZW50cy5iaW5kKCdjbGljayBhLnNvcnQtYXNjZW5kaW5nJywgJ3NvcnQnLCAnYXNjJylcbiAqICAgIGV2ZW50cy5iaW5kKCdjbGljayBhLnNvcnQtZGVzY2VuZGluZycsICdzb3J0JywgJ2Rlc2MnKVxuICpcbiAqICBNdWx0aXBsZSBldmVudHMgaGFuZGxpbmc6XG4gKlxuICogICAgZXZlbnRzLmJpbmQoe1xuICogICAgICAnY2xpY2sgLnJlbW92ZSc6ICdyZW1vdmUnLFxuICogICAgICAnY2xpY2sgLmFkZCc6ICdhZGQnXG4gKiAgICB9KTtcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xvYmplY3R9IC0gb2JqZWN0IGlzIHVzZWQgZm9yIG11bHRpcGxlIGJpbmRpbmcsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgZm9yIHNpbmdsZSBldmVudCBiaW5kaW5nXG4gKiBAcGFyYW0ge1N0cmluZ3xmdW5jdGlvbn0gW2FyZzJdIC0gbWV0aG9kIHRvIGNhbGwgKG9wdGlvbmFsKVxuICogQHBhcmFtIHsqfSBbYXJnM10gLSBkYXRhIGZvciBzaW5nbGUgZXZlbnQgYmluZGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuRXZlbnRzLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oYXJnMSwgYXJnMil7XG4gIHZhciBiaW5kRXZlbnQgPSBmdW5jdGlvbihldmVudCwgbWV0aG9kKSB7XG4gICAgdmFyIGUgPSBwYXJzZShldmVudCk7XG4gICAgdmFyIGVsID0gdGhpcy5lbDtcbiAgICB2YXIgb2JqID0gdGhpcy5vYmo7XG4gICAgdmFyIG5hbWUgPSBlLm5hbWU7XG4gICAgdmFyIG1ldGhvZCA9IG1ldGhvZCB8fCAnb24nICsgbmFtZTtcbiAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcblxuICAgIC8vIGNhbGxiYWNrXG4gICAgZnVuY3Rpb24gY2IoKXtcbiAgICAgIHZhciBhID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpLmNvbmNhdChhcmdzKTtcblxuICAgICAgaWYgKHR5cGVvZiBtZXRob2QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBtZXRob2QuYXBwbHkob2JqLCBhKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghb2JqW21ldGhvZF0pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWV0aG9kICsgJyBtZXRob2QgaXMgbm90IGRlZmluZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JqW21ldGhvZF0uYXBwbHkob2JqLCBhKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBiaW5kXG4gICAgaWYgKGUuc2VsZWN0b3IpIHtcbiAgICAgIGNiID0gZGVsZWdhdGUuYmluZChlbCwgZS5zZWxlY3RvciwgbmFtZSwgY2IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBldmVudHMuYmluZChlbCwgbmFtZSwgY2IpO1xuICAgIH1cblxuICAgIC8vIHN1YnNjcmlwdGlvbiBmb3IgdW5iaW5kaW5nXG4gICAgdGhpcy5zdWIobmFtZSwgbWV0aG9kLCBjYik7XG5cbiAgICByZXR1cm4gY2I7XG4gIH07XG5cbiAgaWYgKHR5cGVvZiBhcmcxID09ICdzdHJpbmcnKSB7XG4gICAgYmluZEV2ZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH0gZWxzZSB7XG4gICAgZm9yKHZhciBrZXkgaW4gYXJnMSkge1xuICAgICAgaWYgKGFyZzEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBiaW5kRXZlbnQuY2FsbCh0aGlzLCBrZXksIGFyZzFba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIFVuYmluZCBhIHNpbmdsZSBiaW5kaW5nLCBhbGwgYmluZGluZ3MgZm9yIGBldmVudGAsXG4gKiBvciBhbGwgYmluZGluZ3Mgd2l0aGluIHRoZSBtYW5hZ2VyLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICBVbmJpbmQgZGlyZWN0IGhhbmRsZXJzOlxuICpcbiAqICAgICBldmVudHMudW5iaW5kKCdjbGljaycsICdyZW1vdmUnKVxuICogICAgIGV2ZW50cy51bmJpbmQoJ2NsaWNrJylcbiAqICAgICBldmVudHMudW5iaW5kKClcbiAqXG4gKiBVbmJpbmQgZGVsZWdhdGUgaGFuZGxlcnM6XG4gKlxuICogICAgIGV2ZW50cy51bmJpbmQoJ2NsaWNrJywgJ3JlbW92ZScpXG4gKiAgICAgZXZlbnRzLnVuYmluZCgnY2xpY2snKVxuICogICAgIGV2ZW50cy51bmJpbmQoKVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBbZXZlbnRdXG4gKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gW21ldGhvZF1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuRXZlbnRzLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbihldmVudCwgbWV0aG9kKXtcbiAgaWYgKDAgPT0gYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRoaXMudW5iaW5kQWxsKCk7XG4gIGlmICgxID09IGFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB0aGlzLnVuYmluZEFsbE9mKGV2ZW50KTtcblxuICAvLyBubyBiaW5kaW5ncyBmb3IgdGhpcyBldmVudFxuICB2YXIgYmluZGluZ3MgPSB0aGlzLl9ldmVudHNbZXZlbnRdO1xuICB2YXIgY2FwdHVyZSA9IChmb3JjZUNhcHR1cmVFdmVudHMuaW5kZXhPZihldmVudCkgIT09IC0xKTtcbiAgaWYgKCFiaW5kaW5ncykgcmV0dXJuO1xuXG4gIC8vIG5vIGJpbmRpbmdzIGZvciB0aGlzIG1ldGhvZFxuICB2YXIgY2IgPSBiaW5kaW5nc1ttZXRob2RdO1xuICBpZiAoIWNiKSByZXR1cm47XG5cbiAgZXZlbnRzLnVuYmluZCh0aGlzLmVsLCBldmVudCwgY2IsIGNhcHR1cmUpO1xufTtcblxuLyoqXG4gKiBVbmJpbmQgYWxsIGV2ZW50cy5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5FdmVudHMucHJvdG90eXBlLnVuYmluZEFsbCA9IGZ1bmN0aW9uKCl7XG4gIGZvciAodmFyIGV2ZW50IGluIHRoaXMuX2V2ZW50cykge1xuICAgIHRoaXMudW5iaW5kQWxsT2YoZXZlbnQpO1xuICB9XG59O1xuXG4vKipcbiAqIFVuYmluZCBhbGwgZXZlbnRzIGZvciBgZXZlbnRgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuRXZlbnRzLnByb3RvdHlwZS51bmJpbmRBbGxPZiA9IGZ1bmN0aW9uKGV2ZW50KXtcbiAgdmFyIGJpbmRpbmdzID0gdGhpcy5fZXZlbnRzW2V2ZW50XTtcbiAgaWYgKCFiaW5kaW5ncykgcmV0dXJuO1xuXG4gIGZvciAodmFyIG1ldGhvZCBpbiBiaW5kaW5ncykge1xuICAgIHRoaXMudW5iaW5kKGV2ZW50LCBtZXRob2QpO1xuICB9XG59O1xuXG4vKipcbiAqIFBhcnNlIGBldmVudGAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZShldmVudCkge1xuICB2YXIgcGFydHMgPSBldmVudC5zcGxpdCgvICsvKTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBwYXJ0cy5zaGlmdCgpLFxuICAgIHNlbGVjdG9yOiBwYXJ0cy5qb2luKCcgJylcbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgZm9yRWFjaEFycmF5ID0gZnVuY3Rpb24gZm9yRWFjaEFycmF5KGFycmF5LCBpdGVyYXRvciwgcmVjZWl2ZXIpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoYXJyYXksIGkpKSB7XG4gICAgICAgICAgICBpZiAocmVjZWl2ZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKGFycmF5W2ldLCBpLCBhcnJheSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwocmVjZWl2ZXIsIGFycmF5W2ldLCBpLCBhcnJheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG52YXIgZm9yRWFjaFN0cmluZyA9IGZ1bmN0aW9uIGZvckVhY2hTdHJpbmcoc3RyaW5nLCBpdGVyYXRvciwgcmVjZWl2ZXIpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gc3RyaW5nLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIC8vIG5vIHN1Y2ggdGhpbmcgYXMgYSBzcGFyc2Ugc3RyaW5nLlxuICAgICAgICBpZiAocmVjZWl2ZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgaXRlcmF0b3Ioc3RyaW5nLmNoYXJBdChpKSwgaSwgc3RyaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwocmVjZWl2ZXIsIHN0cmluZy5jaGFyQXQoaSksIGksIHN0cmluZyk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG52YXIgZm9yRWFjaE9iamVjdCA9IGZ1bmN0aW9uIGZvckVhY2hPYmplY3Qob2JqZWN0LCBpdGVyYXRvciwgcmVjZWl2ZXIpIHtcbiAgICBmb3IgKHZhciBrIGluIG9iamVjdCkge1xuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGspKSB7XG4gICAgICAgICAgICBpZiAocmVjZWl2ZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrXSwgaywgb2JqZWN0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IuY2FsbChyZWNlaXZlciwgb2JqZWN0W2tdLCBrLCBvYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxudmFyIGZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGxpc3QsIGl0ZXJhdG9yLCB0aGlzQXJnKSB7XG4gICAgaWYgKCFpc0NhbGxhYmxlKGl0ZXJhdG9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpdGVyYXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICB2YXIgcmVjZWl2ZXI7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMykge1xuICAgICAgICByZWNlaXZlciA9IHRoaXNBcmc7XG4gICAgfVxuXG4gICAgaWYgKHRvU3RyLmNhbGwobGlzdCkgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgICAgZm9yRWFjaEFycmF5KGxpc3QsIGl0ZXJhdG9yLCByZWNlaXZlcik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbGlzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZm9yRWFjaFN0cmluZyhsaXN0LCBpdGVyYXRvciwgcmVjZWl2ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvckVhY2hPYmplY3QobGlzdCwgaXRlcmF0b3IsIHJlY2VpdmVyKTtcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZvckVhY2g7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBuby1pbnZhbGlkLXRoaXM6IDEgKi9cblxudmFyIEVSUk9SX01FU1NBR0UgPSAnRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0aWJsZSAnO1xudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jVHlwZSA9ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmluZCh0aGF0KSB7XG4gICAgdmFyIHRhcmdldCA9IHRoaXM7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09ICdmdW5jdGlvbicgfHwgdG9TdHIuY2FsbCh0YXJnZXQpICE9PSBmdW5jVHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUk9SX01FU1NBR0UgKyB0YXJnZXQpO1xuICAgIH1cbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblxuICAgIHZhciBib3VuZDtcbiAgICB2YXIgYmluZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIGJvdW5kKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChPYmplY3QocmVzdWx0KSA9PT0gcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseShcbiAgICAgICAgICAgICAgICB0aGF0LFxuICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGJvdW5kTGVuZ3RoID0gTWF0aC5tYXgoMCwgdGFyZ2V0Lmxlbmd0aCAtIGFyZ3MubGVuZ3RoKTtcbiAgICB2YXIgYm91bmRBcmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3VuZExlbmd0aDsgaSsrKSB7XG4gICAgICAgIGJvdW5kQXJncy5wdXNoKCckJyArIGkpO1xuICAgIH1cblxuICAgIGJvdW5kID0gRnVuY3Rpb24oJ2JpbmRlcicsICdyZXR1cm4gZnVuY3Rpb24gKCcgKyBib3VuZEFyZ3Muam9pbignLCcpICsgJyl7IHJldHVybiBiaW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOyB9JykoYmluZGVyKTtcblxuICAgIGlmICh0YXJnZXQucHJvdG90eXBlKSB7XG4gICAgICAgIHZhciBFbXB0eSA9IGZ1bmN0aW9uIEVtcHR5KCkge307XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7XG4gICAgICAgIGJvdW5kLnByb3RvdHlwZSA9IG5ldyBFbXB0eSgpO1xuICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBib3VuZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiIsInZhciB3aW47XG5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgd2luID0gd2luZG93O1xufSBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgd2luID0gZ2xvYmFsO1xufSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIil7XG4gICAgd2luID0gc2VsZjtcbn0gZWxzZSB7XG4gICAgd2luID0ge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd2luO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBmblRvU3RyID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgY29uc3RydWN0b3JSZWdleCA9IC9eXFxzKmNsYXNzXFxiLztcbnZhciBpc0VTNkNsYXNzRm4gPSBmdW5jdGlvbiBpc0VTNkNsYXNzRnVuY3Rpb24odmFsdWUpIHtcblx0dHJ5IHtcblx0XHR2YXIgZm5TdHIgPSBmblRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBjb25zdHJ1Y3RvclJlZ2V4LnRlc3QoZm5TdHIpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlOyAvLyBub3QgYSBmdW5jdGlvblxuXHR9XG59O1xuXG52YXIgdHJ5RnVuY3Rpb25PYmplY3QgPSBmdW5jdGlvbiB0cnlGdW5jdGlvblRvU3RyKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0aWYgKGlzRVM2Q2xhc3NGbih2YWx1ZSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0Zm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZm5DbGFzcyA9ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG52YXIgZ2VuQ2xhc3MgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLnRvU3RyaW5nVGFnID09PSAnc3ltYm9sJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0NhbGxhYmxlKHZhbHVlKSB7XG5cdGlmICghdmFsdWUpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdGlmIChoYXNUb1N0cmluZ1RhZykgeyByZXR1cm4gdHJ5RnVuY3Rpb25PYmplY3QodmFsdWUpOyB9XG5cdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHR2YXIgc3RyQ2xhc3MgPSB0b1N0ci5jYWxsKHZhbHVlKTtcblx0cmV0dXJuIHN0ckNsYXNzID09PSBmbkNsYXNzIHx8IHN0ckNsYXNzID09PSBnZW5DbGFzcztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGlzRnVuY3Rpb25cblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uIChmbikge1xuICB2YXIgc3RyaW5nID0gdG9TdHJpbmcuY2FsbChmbilcbiAgcmV0dXJuIHN0cmluZyA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJyB8fFxuICAgICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgc3RyaW5nICE9PSAnW29iamVjdCBSZWdFeHBdJykgfHxcbiAgICAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgLy8gSUU4IGFuZCBiZWxvd1xuICAgICAoZm4gPT09IHdpbmRvdy5zZXRUaW1lb3V0IHx8XG4gICAgICBmbiA9PT0gd2luZG93LmFsZXJ0IHx8XG4gICAgICBmbiA9PT0gd2luZG93LmNvbmZpcm0gfHxcbiAgICAgIGZuID09PSB3aW5kb3cucHJvbXB0KSlcbn07XG4iLCIvKiFcbiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjMuNC4xXG4gKiBodHRwczovL2pxdWVyeS5jb20vXG4gKlxuICogSW5jbHVkZXMgU2l6emxlLmpzXG4gKiBodHRwczovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHBzOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogRGF0ZTogMjAxOS0wNS0wMVQyMTowNFpcbiAqL1xuKCBmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdGlmICggdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyBGb3IgQ29tbW9uSlMgYW5kIENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHdoZXJlIGEgcHJvcGVyIGB3aW5kb3dgXG5cdFx0Ly8gaXMgcHJlc2VudCwgZXhlY3V0ZSB0aGUgZmFjdG9yeSBhbmQgZ2V0IGpRdWVyeS5cblx0XHQvLyBGb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IGhhdmUgYSBgd2luZG93YCB3aXRoIGEgYGRvY3VtZW50YFxuXHRcdC8vIChzdWNoIGFzIE5vZGUuanMpLCBleHBvc2UgYSBmYWN0b3J5IGFzIG1vZHVsZS5leHBvcnRzLlxuXHRcdC8vIFRoaXMgYWNjZW50dWF0ZXMgdGhlIG5lZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHJlYWwgYHdpbmRvd2AuXG5cdFx0Ly8gZS5nLiB2YXIgalF1ZXJ5ID0gcmVxdWlyZShcImpxdWVyeVwiKSh3aW5kb3cpO1xuXHRcdC8vIFNlZSB0aWNrZXQgIzE0NTQ5IGZvciBtb3JlIGluZm8uXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgP1xuXHRcdFx0ZmFjdG9yeSggZ2xvYmFsLCB0cnVlICkgOlxuXHRcdFx0ZnVuY3Rpb24oIHcgKSB7XG5cdFx0XHRcdGlmICggIXcuZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCBcImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnRcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWN0b3J5KCB3ICk7XG5cdFx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGZhY3RvcnkoIGdsb2JhbCApO1xuXHR9XG5cbi8vIFBhc3MgdGhpcyBpZiB3aW5kb3cgaXMgbm90IGRlZmluZWQgeWV0XG59ICkoIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiggd2luZG93LCBub0dsb2JhbCApIHtcblxuLy8gRWRnZSA8PSAxMiAtIDEzKywgRmlyZWZveCA8PTE4IC0gNDUrLCBJRSAxMCAtIDExLCBTYWZhcmkgNS4xIC0gOSssIGlPUyA2IC0gOS4xXG4vLyB0aHJvdyBleGNlcHRpb25zIHdoZW4gbm9uLXN0cmljdCBjb2RlIChlLmcuLCBBU1AuTkVUIDQuNSkgYWNjZXNzZXMgc3RyaWN0IG1vZGVcbi8vIGFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyICh0cmFjLTEzMzM1KS4gQnV0IGFzIG9mIGpRdWVyeSAzLjAgKDIwMTYpLCBzdHJpY3QgbW9kZSBzaG91bGQgYmUgY29tbW9uXG4vLyBlbm91Z2ggdGhhdCBhbGwgc3VjaCBhdHRlbXB0cyBhcmUgZ3VhcmRlZCBpbiBhIHRyeSBibG9jay5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgYXJyID0gW107XG5cbnZhciBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcblxudmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuXG52YXIgc2xpY2UgPSBhcnIuc2xpY2U7XG5cbnZhciBjb25jYXQgPSBhcnIuY29uY2F0O1xuXG52YXIgcHVzaCA9IGFyci5wdXNoO1xuXG52YXIgaW5kZXhPZiA9IGFyci5pbmRleE9mO1xuXG52YXIgY2xhc3MydHlwZSA9IHt9O1xuXG52YXIgdG9TdHJpbmcgPSBjbGFzczJ0eXBlLnRvU3RyaW5nO1xuXG52YXIgaGFzT3duID0gY2xhc3MydHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIGZuVG9TdHJpbmcgPSBoYXNPd24udG9TdHJpbmc7XG5cbnZhciBPYmplY3RGdW5jdGlvblN0cmluZyA9IGZuVG9TdHJpbmcuY2FsbCggT2JqZWN0ICk7XG5cbnZhciBzdXBwb3J0ID0ge307XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gaXNGdW5jdGlvbiggb2JqICkge1xuXG4gICAgICAvLyBTdXBwb3J0OiBDaHJvbWUgPD01NywgRmlyZWZveCA8PTUyXG4gICAgICAvLyBJbiBzb21lIGJyb3dzZXJzLCB0eXBlb2YgcmV0dXJucyBcImZ1bmN0aW9uXCIgZm9yIEhUTUwgPG9iamVjdD4gZWxlbWVudHNcbiAgICAgIC8vIChpLmUuLCBgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwib2JqZWN0XCIgKSA9PT0gXCJmdW5jdGlvblwiYCkuXG4gICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGNsYXNzaWZ5ICphbnkqIERPTSBub2RlIGFzIGEgZnVuY3Rpb24uXG4gICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBvYmoubm9kZVR5cGUgIT09IFwibnVtYmVyXCI7XG4gIH07XG5cblxudmFyIGlzV2luZG93ID0gZnVuY3Rpb24gaXNXaW5kb3coIG9iaiApIHtcblx0XHRyZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqID09PSBvYmoud2luZG93O1xuXHR9O1xuXG5cblxuXG5cdHZhciBwcmVzZXJ2ZWRTY3JpcHRBdHRyaWJ1dGVzID0ge1xuXHRcdHR5cGU6IHRydWUsXG5cdFx0c3JjOiB0cnVlLFxuXHRcdG5vbmNlOiB0cnVlLFxuXHRcdG5vTW9kdWxlOiB0cnVlXG5cdH07XG5cblx0ZnVuY3Rpb24gRE9NRXZhbCggY29kZSwgbm9kZSwgZG9jICkge1xuXHRcdGRvYyA9IGRvYyB8fCBkb2N1bWVudDtcblxuXHRcdHZhciBpLCB2YWwsXG5cdFx0XHRzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudCggXCJzY3JpcHRcIiApO1xuXG5cdFx0c2NyaXB0LnRleHQgPSBjb2RlO1xuXHRcdGlmICggbm9kZSApIHtcblx0XHRcdGZvciAoIGkgaW4gcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDY0KywgRWRnZSAxOCtcblx0XHRcdFx0Ly8gU29tZSBicm93c2VycyBkb24ndCBzdXBwb3J0IHRoZSBcIm5vbmNlXCIgcHJvcGVydHkgb24gc2NyaXB0cy5cblx0XHRcdFx0Ly8gT24gdGhlIG90aGVyIGhhbmQsIGp1c3QgdXNpbmcgYGdldEF0dHJpYnV0ZWAgaXMgbm90IGVub3VnaCBhc1xuXHRcdFx0XHQvLyB0aGUgYG5vbmNlYCBhdHRyaWJ1dGUgaXMgcmVzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIHdoZW5ldmVyIGl0XG5cdFx0XHRcdC8vIGJlY29tZXMgYnJvd3NpbmctY29udGV4dCBjb25uZWN0ZWQuXG5cdFx0XHRcdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2h0bWwvaXNzdWVzLzIzNjlcblx0XHRcdFx0Ly8gU2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI25vbmNlLWF0dHJpYnV0ZXNcblx0XHRcdFx0Ly8gVGhlIGBub2RlLmdldEF0dHJpYnV0ZWAgY2hlY2sgd2FzIGFkZGVkIGZvciB0aGUgc2FrZSBvZlxuXHRcdFx0XHQvLyBgalF1ZXJ5Lmdsb2JhbEV2YWxgIHNvIHRoYXQgaXQgY2FuIGZha2UgYSBub25jZS1jb250YWluaW5nIG5vZGVcblx0XHRcdFx0Ly8gdmlhIGFuIG9iamVjdC5cblx0XHRcdFx0dmFsID0gbm9kZVsgaSBdIHx8IG5vZGUuZ2V0QXR0cmlidXRlICYmIG5vZGUuZ2V0QXR0cmlidXRlKCBpICk7XG5cdFx0XHRcdGlmICggdmFsICkge1xuXHRcdFx0XHRcdHNjcmlwdC5zZXRBdHRyaWJ1dGUoIGksIHZhbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGRvYy5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHQgKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTtcblx0fVxuXG5cbmZ1bmN0aW9uIHRvVHlwZSggb2JqICkge1xuXHRpZiAoIG9iaiA9PSBudWxsICkge1xuXHRcdHJldHVybiBvYmogKyBcIlwiO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5IChmdW5jdGlvbmlzaCBSZWdFeHApXG5cdHJldHVybiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiA/XG5cdFx0Y2xhc3MydHlwZVsgdG9TdHJpbmcuY2FsbCggb2JqICkgXSB8fCBcIm9iamVjdFwiIDpcblx0XHR0eXBlb2Ygb2JqO1xufVxuLyogZ2xvYmFsIFN5bWJvbCAqL1xuLy8gRGVmaW5pbmcgdGhpcyBnbG9iYWwgaW4gLmVzbGludHJjLmpzb24gd291bGQgY3JlYXRlIGEgZGFuZ2VyIG9mIHVzaW5nIHRoZSBnbG9iYWxcbi8vIHVuZ3VhcmRlZCBpbiBhbm90aGVyIHBsYWNlLCBpdCBzZWVtcyBzYWZlciB0byBkZWZpbmUgZ2xvYmFsIG9ubHkgZm9yIHRoaXMgbW9kdWxlXG5cblxuXG52YXJcblx0dmVyc2lvbiA9IFwiMy40LjFcIixcblxuXHQvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeVxuXHRqUXVlcnkgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cblx0XHQvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCdcblx0XHQvLyBOZWVkIGluaXQgaWYgalF1ZXJ5IGlzIGNhbGxlZCAoanVzdCBhbGxvdyBlcnJvciB0byBiZSB0aHJvd24gaWYgbm90IGluY2x1ZGVkKVxuXHRcdHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5XG5cdC8vIE1ha2Ugc3VyZSB3ZSB0cmltIEJPTSBhbmQgTkJTUFxuXHRydHJpbSA9IC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZztcblxualF1ZXJ5LmZuID0galF1ZXJ5LnByb3RvdHlwZSA9IHtcblxuXHQvLyBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIGpRdWVyeSBiZWluZyB1c2VkXG5cdGpxdWVyeTogdmVyc2lvbixcblxuXHRjb25zdHJ1Y3RvcjogalF1ZXJ5LFxuXG5cdC8vIFRoZSBkZWZhdWx0IGxlbmd0aCBvZiBhIGpRdWVyeSBvYmplY3QgaXMgMFxuXHRsZW5ndGg6IDAsXG5cblx0dG9BcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTtcblx0fSxcblxuXHQvLyBHZXQgdGhlIE50aCBlbGVtZW50IGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0IE9SXG5cdC8vIEdldCB0aGUgd2hvbGUgbWF0Y2hlZCBlbGVtZW50IHNldCBhcyBhIGNsZWFuIGFycmF5XG5cdGdldDogZnVuY3Rpb24oIG51bSApIHtcblxuXHRcdC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGluIGEgY2xlYW4gYXJyYXlcblx0XHRpZiAoIG51bSA9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4ganVzdCB0aGUgb25lIGVsZW1lbnQgZnJvbSB0aGUgc2V0XG5cdFx0cmV0dXJuIG51bSA8IDAgPyB0aGlzWyBudW0gKyB0aGlzLmxlbmd0aCBdIDogdGhpc1sgbnVtIF07XG5cdH0sXG5cblx0Ly8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBvbnRvIHRoZSBzdGFja1xuXHQvLyAocmV0dXJuaW5nIHRoZSBuZXcgbWF0Y2hlZCBlbGVtZW50IHNldClcblx0cHVzaFN0YWNrOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cblx0XHQvLyBCdWlsZCBhIG5ldyBqUXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldFxuXHRcdHZhciByZXQgPSBqUXVlcnkubWVyZ2UoIHRoaXMuY29uc3RydWN0b3IoKSwgZWxlbXMgKTtcblxuXHRcdC8vIEFkZCB0aGUgb2xkIG9iamVjdCBvbnRvIHRoZSBzdGFjayAoYXMgYSByZWZlcmVuY2UpXG5cdFx0cmV0LnByZXZPYmplY3QgPSB0aGlzO1xuXG5cdFx0Ly8gUmV0dXJuIHRoZSBuZXdseS1mb3JtZWQgZWxlbWVudCBzZXRcblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdC8vIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZXZlcnkgZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBzZXQuXG5cdGVhY2g6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmVhY2goIHRoaXMsIGNhbGxiYWNrICk7XG5cdH0sXG5cblx0bWFwOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWFwKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiBjYWxsYmFjay5jYWxsKCBlbGVtLCBpLCBlbGVtICk7XG5cdFx0fSApICk7XG5cdH0sXG5cblx0c2xpY2U6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggc2xpY2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApICk7XG5cdH0sXG5cblx0Zmlyc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAwICk7XG5cdH0sXG5cblx0bGFzdDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXEoIC0xICk7XG5cdH0sXG5cblx0ZXE6IGZ1bmN0aW9uKCBpICkge1xuXHRcdHZhciBsZW4gPSB0aGlzLmxlbmd0aCxcblx0XHRcdGogPSAraSArICggaSA8IDAgPyBsZW4gOiAwICk7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqID49IDAgJiYgaiA8IGxlbiA/IFsgdGhpc1sgaiBdIF0gOiBbXSApO1xuXHR9LFxuXG5cdGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHJldk9iamVjdCB8fCB0aGlzLmNvbnN0cnVjdG9yKCk7XG5cdH0sXG5cblx0Ly8gRm9yIGludGVybmFsIHVzZSBvbmx5LlxuXHQvLyBCZWhhdmVzIGxpa2UgYW4gQXJyYXkncyBtZXRob2QsIG5vdCBsaWtlIGEgalF1ZXJ5IG1ldGhvZC5cblx0cHVzaDogcHVzaCxcblx0c29ydDogYXJyLnNvcnQsXG5cdHNwbGljZTogYXJyLnNwbGljZVxufTtcblxualF1ZXJ5LmV4dGVuZCA9IGpRdWVyeS5mbi5leHRlbmQgPSBmdW5jdGlvbigpIHtcblx0dmFyIG9wdGlvbnMsIG5hbWUsIHNyYywgY29weSwgY29weUlzQXJyYXksIGNsb25lLFxuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sgMCBdIHx8IHt9LFxuXHRcdGkgPSAxLFxuXHRcdGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cdFx0ZGVlcCA9IGZhbHNlO1xuXG5cdC8vIEhhbmRsZSBhIGRlZXAgY29weSBzaXR1YXRpb25cblx0aWYgKCB0eXBlb2YgdGFyZ2V0ID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRkZWVwID0gdGFyZ2V0O1xuXG5cdFx0Ly8gU2tpcCB0aGUgYm9vbGVhbiBhbmQgdGhlIHRhcmdldFxuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sgaSBdIHx8IHt9O1xuXHRcdGkrKztcblx0fVxuXG5cdC8vIEhhbmRsZSBjYXNlIHdoZW4gdGFyZ2V0IGlzIGEgc3RyaW5nIG9yIHNvbWV0aGluZyAocG9zc2libGUgaW4gZGVlcCBjb3B5KVxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgIT09IFwib2JqZWN0XCIgJiYgIWlzRnVuY3Rpb24oIHRhcmdldCApICkge1xuXHRcdHRhcmdldCA9IHt9O1xuXHR9XG5cblx0Ly8gRXh0ZW5kIGpRdWVyeSBpdHNlbGYgaWYgb25seSBvbmUgYXJndW1lbnQgaXMgcGFzc2VkXG5cdGlmICggaSA9PT0gbGVuZ3RoICkge1xuXHRcdHRhcmdldCA9IHRoaXM7XG5cdFx0aS0tO1xuXHR9XG5cblx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cblx0XHQvLyBPbmx5IGRlYWwgd2l0aCBub24tbnVsbC91bmRlZmluZWQgdmFsdWVzXG5cdFx0aWYgKCAoIG9wdGlvbnMgPSBhcmd1bWVudHNbIGkgXSApICE9IG51bGwgKSB7XG5cblx0XHRcdC8vIEV4dGVuZCB0aGUgYmFzZSBvYmplY3Rcblx0XHRcdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRcdFx0Y29weSA9IG9wdGlvbnNbIG5hbWUgXTtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IE9iamVjdC5wcm90b3R5cGUgcG9sbHV0aW9uXG5cdFx0XHRcdC8vIFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3Bcblx0XHRcdFx0aWYgKCBuYW1lID09PSBcIl9fcHJvdG9fX1wiIHx8IHRhcmdldCA9PT0gY29weSApIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3RzIG9yIGFycmF5c1xuXHRcdFx0XHRpZiAoIGRlZXAgJiYgY29weSAmJiAoIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb3B5ICkgfHxcblx0XHRcdFx0XHQoIGNvcHlJc0FycmF5ID0gQXJyYXkuaXNBcnJheSggY29weSApICkgKSApIHtcblx0XHRcdFx0XHRzcmMgPSB0YXJnZXRbIG5hbWUgXTtcblxuXHRcdFx0XHRcdC8vIEVuc3VyZSBwcm9wZXIgdHlwZSBmb3IgdGhlIHNvdXJjZSB2YWx1ZVxuXHRcdFx0XHRcdGlmICggY29weUlzQXJyYXkgJiYgIUFycmF5LmlzQXJyYXkoIHNyYyApICkge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSBbXTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCAhY29weUlzQXJyYXkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBzcmMgKSApIHtcblx0XHRcdFx0XHRcdGNsb25lID0ge307XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNsb25lID0gc3JjO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb3B5SXNBcnJheSA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0Ly8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtXG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBkZWVwLCBjbG9uZSwgY29weSApO1xuXG5cdFx0XHRcdC8vIERvbid0IGJyaW5nIGluIHVuZGVmaW5lZCB2YWx1ZXNcblx0XHRcdFx0fSBlbHNlIGlmICggY29weSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0gY29weTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbW9kaWZpZWQgb2JqZWN0XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gVW5pcXVlIGZvciBlYWNoIGNvcHkgb2YgalF1ZXJ5IG9uIHRoZSBwYWdlXG5cdGV4cGFuZG86IFwialF1ZXJ5XCIgKyAoIHZlcnNpb24gKyBNYXRoLnJhbmRvbSgpICkucmVwbGFjZSggL1xcRC9nLCBcIlwiICksXG5cblx0Ly8gQXNzdW1lIGpRdWVyeSBpcyByZWFkeSB3aXRob3V0IHRoZSByZWFkeSBtb2R1bGVcblx0aXNSZWFkeTogdHJ1ZSxcblxuXHRlcnJvcjogZnVuY3Rpb24oIG1zZyApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoIG1zZyApO1xuXHR9LFxuXG5cdG5vb3A6IGZ1bmN0aW9uKCkge30sXG5cblx0aXNQbGFpbk9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIgcHJvdG8sIEN0b3I7XG5cblx0XHQvLyBEZXRlY3Qgb2J2aW91cyBuZWdhdGl2ZXNcblx0XHQvLyBVc2UgdG9TdHJpbmcgaW5zdGVhZCBvZiBqUXVlcnkudHlwZSB0byBjYXRjaCBob3N0IG9iamVjdHNcblx0XHRpZiAoICFvYmogfHwgdG9TdHJpbmcuY2FsbCggb2JqICkgIT09IFwiW29iamVjdCBPYmplY3RdXCIgKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cHJvdG8gPSBnZXRQcm90byggb2JqICk7XG5cblx0XHQvLyBPYmplY3RzIHdpdGggbm8gcHJvdG90eXBlIChlLmcuLCBgT2JqZWN0LmNyZWF0ZSggbnVsbCApYCkgYXJlIHBsYWluXG5cdFx0aWYgKCAhcHJvdG8gKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBPYmplY3RzIHdpdGggcHJvdG90eXBlIGFyZSBwbGFpbiBpZmYgdGhleSB3ZXJlIGNvbnN0cnVjdGVkIGJ5IGEgZ2xvYmFsIE9iamVjdCBmdW5jdGlvblxuXHRcdEN0b3IgPSBoYXNPd24uY2FsbCggcHJvdG8sIFwiY29uc3RydWN0b3JcIiApICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuXHRcdHJldHVybiB0eXBlb2YgQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmIGZuVG9TdHJpbmcuY2FsbCggQ3RvciApID09PSBPYmplY3RGdW5jdGlvblN0cmluZztcblx0fSxcblxuXHRpc0VtcHR5T2JqZWN0OiBmdW5jdGlvbiggb2JqICkge1xuXHRcdHZhciBuYW1lO1xuXG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdC8vIEV2YWx1YXRlcyBhIHNjcmlwdCBpbiBhIGdsb2JhbCBjb250ZXh0XG5cdGdsb2JhbEV2YWw6IGZ1bmN0aW9uKCBjb2RlLCBvcHRpb25zICkge1xuXHRcdERPTUV2YWwoIGNvZGUsIHsgbm9uY2U6IG9wdGlvbnMgJiYgb3B0aW9ucy5ub25jZSB9ICk7XG5cdH0sXG5cblx0ZWFjaDogZnVuY3Rpb24oIG9iaiwgY2FsbGJhY2sgKSB7XG5cdFx0dmFyIGxlbmd0aCwgaSA9IDA7XG5cblx0XHRpZiAoIGlzQXJyYXlMaWtlKCBvYmogKSApIHtcblx0XHRcdGxlbmd0aCA9IG9iai5sZW5ndGg7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICggaSBpbiBvYmogKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9iajtcblx0fSxcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHlcblx0dHJpbTogZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0cmV0dXJuIHRleHQgPT0gbnVsbCA/XG5cdFx0XHRcIlwiIDpcblx0XHRcdCggdGV4dCArIFwiXCIgKS5yZXBsYWNlKCBydHJpbSwgXCJcIiApO1xuXHR9LFxuXG5cdC8vIHJlc3VsdHMgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0bWFrZUFycmF5OiBmdW5jdGlvbiggYXJyLCByZXN1bHRzICkge1xuXHRcdHZhciByZXQgPSByZXN1bHRzIHx8IFtdO1xuXG5cdFx0aWYgKCBhcnIgIT0gbnVsbCApIHtcblx0XHRcdGlmICggaXNBcnJheUxpa2UoIE9iamVjdCggYXJyICkgKSApIHtcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCByZXQsXG5cdFx0XHRcdFx0dHlwZW9mIGFyciA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0WyBhcnIgXSA6IGFyclxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHVzaC5jYWxsKCByZXQsIGFyciApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0aW5BcnJheTogZnVuY3Rpb24oIGVsZW0sIGFyciwgaSApIHtcblx0XHRyZXR1cm4gYXJyID09IG51bGwgPyAtMSA6IGluZGV4T2YuY2FsbCggYXJyLCBlbGVtLCBpICk7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0bWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkge1xuXHRcdHZhciBsZW4gPSArc2Vjb25kLmxlbmd0aCxcblx0XHRcdGogPSAwLFxuXHRcdFx0aSA9IGZpcnN0Lmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0Zmlyc3RbIGkrKyBdID0gc2Vjb25kWyBqIF07XG5cdFx0fVxuXG5cdFx0Zmlyc3QubGVuZ3RoID0gaTtcblxuXHRcdHJldHVybiBmaXJzdDtcblx0fSxcblxuXHRncmVwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBpbnZlcnQgKSB7XG5cdFx0dmFyIGNhbGxiYWNrSW52ZXJzZSxcblx0XHRcdG1hdGNoZXMgPSBbXSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoLFxuXHRcdFx0Y2FsbGJhY2tFeHBlY3QgPSAhaW52ZXJ0O1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtc1xuXHRcdC8vIHRoYXQgcGFzcyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uXG5cdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRjYWxsYmFja0ludmVyc2UgPSAhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTtcblx0XHRcdGlmICggY2FsbGJhY2tJbnZlcnNlICE9PSBjYWxsYmFja0V4cGVjdCApIHtcblx0XHRcdFx0bWF0Y2hlcy5wdXNoKCBlbGVtc1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hdGNoZXM7XG5cdH0sXG5cblx0Ly8gYXJnIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkge1xuXHRcdHZhciBsZW5ndGgsIHZhbHVlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRyZXQgPSBbXTtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVpciBuZXcgdmFsdWVzXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggZWxlbXMgKSApIHtcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsXG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gZWxlbXMgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0XHRyZXR1cm4gY29uY2F0LmFwcGx5KCBbXSwgcmV0ICk7XG5cdH0sXG5cblx0Ly8gQSBnbG9iYWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzXG5cdGd1aWQ6IDEsXG5cblx0Ly8galF1ZXJ5LnN1cHBvcnQgaXMgbm90IHVzZWQgaW4gQ29yZSBidXQgb3RoZXIgcHJvamVjdHMgYXR0YWNoIHRoZWlyXG5cdC8vIHByb3BlcnRpZXMgdG8gaXQgc28gaXQgbmVlZHMgdG8gZXhpc3QuXG5cdHN1cHBvcnQ6IHN1cHBvcnRcbn0gKTtcblxuaWYgKCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cdGpRdWVyeS5mblsgU3ltYm9sLml0ZXJhdG9yIF0gPSBhcnJbIFN5bWJvbC5pdGVyYXRvciBdO1xufVxuXG4vLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlwZSBtYXBcbmpRdWVyeS5lYWNoKCBcIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sXCIuc3BsaXQoIFwiIFwiICksXG5mdW5jdGlvbiggaSwgbmFtZSApIHtcblx0Y2xhc3MydHlwZVsgXCJbb2JqZWN0IFwiICsgbmFtZSArIFwiXVwiIF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG59ICk7XG5cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKCBvYmogKSB7XG5cblx0Ly8gU3VwcG9ydDogcmVhbCBpT1MgOC4yIG9ubHkgKG5vdCByZXByb2R1Y2libGUgaW4gc2ltdWxhdG9yKVxuXHQvLyBgaW5gIGNoZWNrIHVzZWQgdG8gcHJldmVudCBKSVQgZXJyb3IgKGdoLTIxNDUpXG5cdC8vIGhhc093biBpc24ndCB1c2VkIGhlcmUgZHVlIHRvIGZhbHNlIG5lZ2F0aXZlc1xuXHQvLyByZWdhcmRpbmcgTm9kZWxpc3QgbGVuZ3RoIGluIElFXG5cdHZhciBsZW5ndGggPSAhIW9iaiAmJiBcImxlbmd0aFwiIGluIG9iaiAmJiBvYmoubGVuZ3RoLFxuXHRcdHR5cGUgPSB0b1R5cGUoIG9iaiApO1xuXG5cdGlmICggaXNGdW5jdGlvbiggb2JqICkgfHwgaXNXaW5kb3coIG9iaiApICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0eXBlID09PSBcImFycmF5XCIgfHwgbGVuZ3RoID09PSAwIHx8XG5cdFx0dHlwZW9mIGxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJiBsZW5ndGggPiAwICYmICggbGVuZ3RoIC0gMSApIGluIG9iajtcbn1cbnZhciBTaXp6bGUgPVxuLyohXG4gKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2luZSB2Mi4zLjRcbiAqIGh0dHBzOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCBKUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cHM6Ly9qcy5mb3VuZGF0aW9uL1xuICpcbiAqIERhdGU6IDIwMTktMDQtMDhcbiAqL1xuKGZ1bmN0aW9uKCB3aW5kb3cgKSB7XG5cbnZhciBpLFxuXHRzdXBwb3J0LFxuXHRFeHByLFxuXHRnZXRUZXh0LFxuXHRpc1hNTCxcblx0dG9rZW5pemUsXG5cdGNvbXBpbGUsXG5cdHNlbGVjdCxcblx0b3V0ZXJtb3N0Q29udGV4dCxcblx0c29ydElucHV0LFxuXHRoYXNEdXBsaWNhdGUsXG5cblx0Ly8gTG9jYWwgZG9jdW1lbnQgdmFyc1xuXHRzZXREb2N1bWVudCxcblx0ZG9jdW1lbnQsXG5cdGRvY0VsZW0sXG5cdGRvY3VtZW50SXNIVE1MLFxuXHRyYnVnZ3lRU0EsXG5cdHJidWdneU1hdGNoZXMsXG5cdG1hdGNoZXMsXG5cdGNvbnRhaW5zLFxuXG5cdC8vIEluc3RhbmNlLXNwZWNpZmljIGRhdGFcblx0ZXhwYW5kbyA9IFwic2l6emxlXCIgKyAxICogbmV3IERhdGUoKSxcblx0cHJlZmVycmVkRG9jID0gd2luZG93LmRvY3VtZW50LFxuXHRkaXJydW5zID0gMCxcblx0ZG9uZSA9IDAsXG5cdGNsYXNzQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHR0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0Y29tcGlsZXJDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRzb3J0T3JkZXIgPSBmdW5jdGlvbiggYSwgYiApIHtcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gMDtcblx0fSxcblxuXHQvLyBJbnN0YW5jZSBtZXRob2RzXG5cdGhhc093biA9ICh7fSkuaGFzT3duUHJvcGVydHksXG5cdGFyciA9IFtdLFxuXHRwb3AgPSBhcnIucG9wLFxuXHRwdXNoX25hdGl2ZSA9IGFyci5wdXNoLFxuXHRwdXNoID0gYXJyLnB1c2gsXG5cdHNsaWNlID0gYXJyLnNsaWNlLFxuXHQvLyBVc2UgYSBzdHJpcHBlZC1kb3duIGluZGV4T2YgYXMgaXQncyBmYXN0ZXIgdGhhbiBuYXRpdmVcblx0Ly8gaHR0cHM6Ly9qc3BlcmYuY29tL3Rob3ItaW5kZXhvZi12cy1mb3IvNVxuXHRpbmRleE9mID0gZnVuY3Rpb24oIGxpc3QsIGVsZW0gKSB7XG5cdFx0dmFyIGkgPSAwLFxuXHRcdFx0bGVuID0gbGlzdC5sZW5ndGg7XG5cdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRpZiAoIGxpc3RbaV0gPT09IGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gLTE7XG5cdH0sXG5cblx0Ym9vbGVhbnMgPSBcImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkXCIsXG5cblx0Ly8gUmVndWxhciBleHByZXNzaW9uc1xuXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc2VsZWN0b3JzLyN3aGl0ZXNwYWNlXG5cdHdoaXRlc3BhY2UgPSBcIltcXFxceDIwXFxcXHRcXFxcclxcXFxuXFxcXGZdXCIsXG5cblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI3ZhbHVlLWRlZi1pZGVudGlmaWVyXG5cdGlkZW50aWZpZXIgPSBcIig/OlxcXFxcXFxcLnxbXFxcXHctXXxbXlxcMC1cXFxceGEwXSkrXCIsXG5cblx0Ly8gQXR0cmlidXRlIHNlbGVjdG9yczogaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNhdHRyaWJ1dGUtc2VsZWN0b3JzXG5cdGF0dHJpYnV0ZXMgPSBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFwiICsgaWRlbnRpZmllciArIFwiKSg/OlwiICsgd2hpdGVzcGFjZSArXG5cdFx0Ly8gT3BlcmF0b3IgKGNhcHR1cmUgMilcblx0XHRcIiooWypeJHwhfl0/PSlcIiArIHdoaXRlc3BhY2UgK1xuXHRcdC8vIFwiQXR0cmlidXRlIHZhbHVlcyBtdXN0IGJlIENTUyBpZGVudGlmaWVycyBbY2FwdHVyZSA1XSBvciBzdHJpbmdzIFtjYXB0dXJlIDMgb3IgY2FwdHVyZSA0XVwiXG5cdFx0XCIqKD86JygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwifChcIiArIGlkZW50aWZpZXIgKyBcIikpfClcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFwiKlxcXFxdXCIsXG5cblx0cHNldWRvcyA9IFwiOihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcXFxcKChcIiArXG5cdFx0Ly8gVG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2VsZWN0b3JzIG5lZWRpbmcgdG9rZW5pemUgaW4gdGhlIHByZUZpbHRlciwgcHJlZmVyIGFyZ3VtZW50czpcblx0XHQvLyAxLiBxdW90ZWQgKGNhcHR1cmUgMzsgY2FwdHVyZSA0IG9yIGNhcHR1cmUgNSlcblx0XHRcIignKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCIpfFwiICtcblx0XHQvLyAyLiBzaW1wbGUgKGNhcHR1cmUgNilcblx0XHRcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpW1xcXFxdXXxcIiArIGF0dHJpYnV0ZXMgKyBcIikqKXxcIiArXG5cdFx0Ly8gMy4gYW55dGhpbmcgZWxzZSAoY2FwdHVyZSAyKVxuXHRcdFwiLipcIiArXG5cdFx0XCIpXFxcXCl8KVwiLFxuXG5cdC8vIExlYWRpbmcgYW5kIG5vbi1lc2NhcGVkIHRyYWlsaW5nIHdoaXRlc3BhY2UsIGNhcHR1cmluZyBzb21lIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgcHJlY2VkaW5nIHRoZSBsYXR0ZXJcblx0cndoaXRlc3BhY2UgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNlICsgXCIrXCIsIFwiZ1wiICksXG5cdHJ0cmltID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIrfCgoPzpefFteXFxcXFxcXFxdKSg/OlxcXFxcXFxcLikqKVwiICsgd2hpdGVzcGFjZSArIFwiKyRcIiwgXCJnXCIgKSxcblxuXHRyY29tbWEgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiosXCIgKyB3aGl0ZXNwYWNlICsgXCIqXCIgKSxcblx0cmNvbWJpbmF0b3JzID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFs+K35dfFwiICsgd2hpdGVzcGFjZSArIFwiKVwiICsgd2hpdGVzcGFjZSArIFwiKlwiICksXG5cdHJkZXNjZW5kID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArIFwifD5cIiApLFxuXG5cdHJwc2V1ZG8gPSBuZXcgUmVnRXhwKCBwc2V1ZG9zICksXG5cdHJpZGVudGlmaWVyID0gbmV3IFJlZ0V4cCggXCJeXCIgKyBpZGVudGlmaWVyICsgXCIkXCIgKSxcblxuXHRtYXRjaEV4cHIgPSB7XG5cdFx0XCJJRFwiOiBuZXcgUmVnRXhwKCBcIl4jKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0XCJDTEFTU1wiOiBuZXcgUmVnRXhwKCBcIl5cXFxcLihcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdFwiVEFHXCI6IG5ldyBSZWdFeHAoIFwiXihcIiArIGlkZW50aWZpZXIgKyBcInxbKl0pXCIgKSxcblx0XHRcIkFUVFJcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBhdHRyaWJ1dGVzICksXG5cdFx0XCJQU0VVRE9cIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBwc2V1ZG9zICksXG5cdFx0XCJDSElMRFwiOiBuZXcgUmVnRXhwKCBcIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcXFwoXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKihldmVufG9kZHwoKFsrLV18KShcXFxcZCopbnwpXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86KFsrLV18KVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcIiooXFxcXGQrKXwpKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfClcIiwgXCJpXCIgKSxcblx0XHRcImJvb2xcIjogbmV3IFJlZ0V4cCggXCJeKD86XCIgKyBib29sZWFucyArIFwiKSRcIiwgXCJpXCIgKSxcblx0XHQvLyBGb3IgdXNlIGluIGxpYnJhcmllcyBpbXBsZW1lbnRpbmcgLmlzKClcblx0XHQvLyBXZSB1c2UgdGhpcyBmb3IgUE9TIG1hdGNoaW5nIGluIGBzZWxlY3RgXG5cdFx0XCJuZWVkc0NvbnRleHRcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXFxcKFwiICtcblx0XHRcdHdoaXRlc3BhY2UgKyBcIiooKD86LVxcXFxkKT9cXFxcZCopXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KSg/PVteLV18JClcIiwgXCJpXCIgKVxuXHR9LFxuXG5cdHJodG1sID0gL0hUTUwkL2ksXG5cdHJpbnB1dHMgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyaGVhZGVyID0gL15oXFxkJC9pLFxuXG5cdHJuYXRpdmUgPSAvXltee10rXFx7XFxzKlxcW25hdGl2ZSBcXHcvLFxuXG5cdC8vIEVhc2lseS1wYXJzZWFibGUvcmV0cmlldmFibGUgSUQgb3IgVEFHIG9yIENMQVNTIHNlbGVjdG9yc1xuXHRycXVpY2tFeHByID0gL14oPzojKFtcXHctXSspfChcXHcrKXxcXC4oW1xcdy1dKykpJC8sXG5cblx0cnNpYmxpbmcgPSAvWyt+XS8sXG5cblx0Ly8gQ1NTIGVzY2FwZXNcblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI2VzY2FwZWQtY2hhcmFjdGVyc1xuXHRydW5lc2NhcGUgPSBuZXcgUmVnRXhwKCBcIlxcXFxcXFxcKFtcXFxcZGEtZl17MSw2fVwiICsgd2hpdGVzcGFjZSArIFwiP3woXCIgKyB3aGl0ZXNwYWNlICsgXCIpfC4pXCIsIFwiaWdcIiApLFxuXHRmdW5lc2NhcGUgPSBmdW5jdGlvbiggXywgZXNjYXBlZCwgZXNjYXBlZFdoaXRlc3BhY2UgKSB7XG5cdFx0dmFyIGhpZ2ggPSBcIjB4XCIgKyBlc2NhcGVkIC0gMHgxMDAwMDtcblx0XHQvLyBOYU4gbWVhbnMgbm9uLWNvZGVwb2ludFxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3g8MjRcblx0XHQvLyBXb3JrYXJvdW5kIGVycm9uZW91cyBudW1lcmljIGludGVycHJldGF0aW9uIG9mICtcIjB4XCJcblx0XHRyZXR1cm4gaGlnaCAhPT0gaGlnaCB8fCBlc2NhcGVkV2hpdGVzcGFjZSA/XG5cdFx0XHRlc2NhcGVkIDpcblx0XHRcdGhpZ2ggPCAwID9cblx0XHRcdFx0Ly8gQk1QIGNvZGVwb2ludFxuXHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoICsgMHgxMDAwMCApIDpcblx0XHRcdFx0Ly8gU3VwcGxlbWVudGFsIFBsYW5lIGNvZGVwb2ludCAoc3Vycm9nYXRlIHBhaXIpXG5cdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggPj4gMTAgfCAweEQ4MDAsIGhpZ2ggJiAweDNGRiB8IDB4REMwMCApO1xuXHR9LFxuXG5cdC8vIENTUyBzdHJpbmcvaWRlbnRpZmllciBzZXJpYWxpemF0aW9uXG5cdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jY29tbW9uLXNlcmlhbGl6aW5nLWlkaW9tc1xuXHRyY3NzZXNjYXBlID0gLyhbXFwwLVxceDFmXFx4N2ZdfF4tP1xcZCl8Xi0kfFteXFwwLVxceDFmXFx4N2YtXFx1RkZGRlxcdy1dL2csXG5cdGZjc3Nlc2NhcGUgPSBmdW5jdGlvbiggY2gsIGFzQ29kZVBvaW50ICkge1xuXHRcdGlmICggYXNDb2RlUG9pbnQgKSB7XG5cblx0XHRcdC8vIFUrMDAwMCBOVUxMIGJlY29tZXMgVStGRkZEIFJFUExBQ0VNRU5UIENIQVJBQ1RFUlxuXHRcdFx0aWYgKCBjaCA9PT0gXCJcXDBcIiApIHtcblx0XHRcdFx0cmV0dXJuIFwiXFx1RkZGRFwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb250cm9sIGNoYXJhY3RlcnMgYW5kIChkZXBlbmRlbnQgdXBvbiBwb3NpdGlvbikgbnVtYmVycyBnZXQgZXNjYXBlZCBhcyBjb2RlIHBvaW50c1xuXHRcdFx0cmV0dXJuIGNoLnNsaWNlKCAwLCAtMSApICsgXCJcXFxcXCIgKyBjaC5jaGFyQ29kZUF0KCBjaC5sZW5ndGggLSAxICkudG9TdHJpbmcoIDE2ICkgKyBcIiBcIjtcblx0XHR9XG5cblx0XHQvLyBPdGhlciBwb3RlbnRpYWxseS1zcGVjaWFsIEFTQ0lJIGNoYXJhY3RlcnMgZ2V0IGJhY2tzbGFzaC1lc2NhcGVkXG5cdFx0cmV0dXJuIFwiXFxcXFwiICsgY2g7XG5cdH0sXG5cblx0Ly8gVXNlZCBmb3IgaWZyYW1lc1xuXHQvLyBTZWUgc2V0RG9jdW1lbnQoKVxuXHQvLyBSZW1vdmluZyB0aGUgZnVuY3Rpb24gd3JhcHBlciBjYXVzZXMgYSBcIlBlcm1pc3Npb24gRGVuaWVkXCJcblx0Ly8gZXJyb3IgaW4gSUVcblx0dW5sb2FkSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuXHRcdHNldERvY3VtZW50KCk7XG5cdH0sXG5cblx0aW5EaXNhYmxlZEZpZWxkc2V0ID0gYWRkQ29tYmluYXRvcihcblx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSB0cnVlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJmaWVsZHNldFwiO1xuXHRcdH0sXG5cdFx0eyBkaXI6IFwicGFyZW50Tm9kZVwiLCBuZXh0OiBcImxlZ2VuZFwiIH1cblx0KTtcblxuLy8gT3B0aW1pemUgZm9yIHB1c2guYXBwbHkoIF8sIE5vZGVMaXN0IClcbnRyeSB7XG5cdHB1c2guYXBwbHkoXG5cdFx0KGFyciA9IHNsaWNlLmNhbGwoIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzICkpLFxuXHRcdHByZWZlcnJlZERvYy5jaGlsZE5vZGVzXG5cdCk7XG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4wXG5cdC8vIERldGVjdCBzaWxlbnRseSBmYWlsaW5nIHB1c2guYXBwbHlcblx0YXJyWyBwcmVmZXJyZWREb2MuY2hpbGROb2Rlcy5sZW5ndGggXS5ub2RlVHlwZTtcbn0gY2F0Y2ggKCBlICkge1xuXHRwdXNoID0geyBhcHBseTogYXJyLmxlbmd0aCA/XG5cblx0XHQvLyBMZXZlcmFnZSBzbGljZSBpZiBwb3NzaWJsZVxuXHRcdGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHtcblx0XHRcdHB1c2hfbmF0aXZlLmFwcGx5KCB0YXJnZXQsIHNsaWNlLmNhbGwoZWxzKSApO1xuXHRcdH0gOlxuXG5cdFx0Ly8gU3VwcG9ydDogSUU8OVxuXHRcdC8vIE90aGVyd2lzZSBhcHBlbmQgZGlyZWN0bHlcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHR2YXIgaiA9IHRhcmdldC5sZW5ndGgsXG5cdFx0XHRcdGkgPSAwO1xuXHRcdFx0Ly8gQ2FuJ3QgdHJ1c3QgTm9kZUxpc3QubGVuZ3RoXG5cdFx0XHR3aGlsZSAoICh0YXJnZXRbaisrXSA9IGVsc1tpKytdKSApIHt9XG5cdFx0XHR0YXJnZXQubGVuZ3RoID0gaiAtIDE7XG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xuXHR2YXIgbSwgaSwgZWxlbSwgbmlkLCBtYXRjaCwgZ3JvdXBzLCBuZXdTZWxlY3Rvcixcblx0XHRuZXdDb250ZXh0ID0gY29udGV4dCAmJiBjb250ZXh0Lm93bmVyRG9jdW1lbnQsXG5cblx0XHQvLyBub2RlVHlwZSBkZWZhdWx0cyB0byA5LCBzaW5jZSBjb250ZXh0IGRlZmF1bHRzIHRvIGRvY3VtZW50XG5cdFx0bm9kZVR5cGUgPSBjb250ZXh0ID8gY29udGV4dC5ub2RlVHlwZSA6IDk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gUmV0dXJuIGVhcmx5IGZyb20gY2FsbHMgd2l0aCBpbnZhbGlkIHNlbGVjdG9yIG9yIGNvbnRleHRcblx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgfHwgIXNlbGVjdG9yIHx8XG5cdFx0bm9kZVR5cGUgIT09IDEgJiYgbm9kZVR5cGUgIT09IDkgJiYgbm9kZVR5cGUgIT09IDExICkge1xuXG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH1cblxuXHQvLyBUcnkgdG8gc2hvcnRjdXQgZmluZCBvcGVyYXRpb25zIChhcyBvcHBvc2VkIHRvIGZpbHRlcnMpIGluIEhUTUwgZG9jdW1lbnRzXG5cdGlmICggIXNlZWQgKSB7XG5cblx0XHRpZiAoICggY29udGV4dCA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogcHJlZmVycmVkRG9jICkgIT09IGRvY3VtZW50ICkge1xuXHRcdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0XHR9XG5cdFx0Y29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7XG5cblx0XHRpZiAoIGRvY3VtZW50SXNIVE1MICkge1xuXG5cdFx0XHQvLyBJZiB0aGUgc2VsZWN0b3IgaXMgc3VmZmljaWVudGx5IHNpbXBsZSwgdHJ5IHVzaW5nIGEgXCJnZXQqQnkqXCIgRE9NIG1ldGhvZFxuXHRcdFx0Ly8gKGV4Y2VwdGluZyBEb2N1bWVudEZyYWdtZW50IGNvbnRleHQsIHdoZXJlIHRoZSBtZXRob2RzIGRvbid0IGV4aXN0KVxuXHRcdFx0aWYgKCBub2RlVHlwZSAhPT0gMTEgJiYgKG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApKSApIHtcblxuXHRcdFx0XHQvLyBJRCBzZWxlY3RvclxuXHRcdFx0XHRpZiAoIChtID0gbWF0Y2hbMV0pICkge1xuXG5cdFx0XHRcdFx0Ly8gRG9jdW1lbnQgY29udGV4dFxuXHRcdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIChlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApKSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdFxuXHRcdFx0XHRcdFx0XHQvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9uc1xuXHRcdFx0XHRcdFx0XHQvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElEXG5cdFx0XHRcdFx0XHRcdGlmICggZWxlbS5pZCA9PT0gbSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBFbGVtZW50IGNvbnRleHRcblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdFxuXHRcdFx0XHRcdFx0Ly8gVE9ETzogaWRlbnRpZnkgdmVyc2lvbnNcblx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcblx0XHRcdFx0XHRcdGlmICggbmV3Q29udGV4dCAmJiAoZWxlbSA9IG5ld0NvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSkgJiZcblx0XHRcdFx0XHRcdFx0Y29udGFpbnMoIGNvbnRleHQsIGVsZW0gKSAmJlxuXHRcdFx0XHRcdFx0XHRlbGVtLmlkID09PSBtICkge1xuXG5cdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVHlwZSBzZWxlY3RvclxuXHRcdFx0XHR9IGVsc2UgaWYgKCBtYXRjaFsyXSApIHtcblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBzZWxlY3RvciApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cblx0XHRcdFx0Ly8gQ2xhc3Mgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggKG0gPSBtYXRjaFszXSkgJiYgc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmXG5cdFx0XHRcdFx0Y29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICkge1xuXG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBtICkgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUYWtlIGFkdmFudGFnZSBvZiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHRpZiAoIHN1cHBvcnQucXNhICYmXG5cdFx0XHRcdCFub25uYXRpdmVTZWxlY3RvckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF0gJiZcblx0XHRcdFx0KCFyYnVnZ3lRU0EgfHwgIXJidWdneVFTQS50ZXN0KCBzZWxlY3RvciApKSAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDggb25seVxuXHRcdFx0XHQvLyBFeGNsdWRlIG9iamVjdCBlbGVtZW50c1xuXHRcdFx0XHQobm9kZVR5cGUgIT09IDEgfHwgY29udGV4dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSBcIm9iamVjdFwiKSApIHtcblxuXHRcdFx0XHRuZXdTZWxlY3RvciA9IHNlbGVjdG9yO1xuXHRcdFx0XHRuZXdDb250ZXh0ID0gY29udGV4dDtcblxuXHRcdFx0XHQvLyBxU0EgY29uc2lkZXJzIGVsZW1lbnRzIG91dHNpZGUgYSBzY29waW5nIHJvb3Qgd2hlbiBldmFsdWF0aW5nIGNoaWxkIG9yXG5cdFx0XHRcdC8vIGRlc2NlbmRhbnQgY29tYmluYXRvcnMsIHdoaWNoIGlzIG5vdCB3aGF0IHdlIHdhbnQuXG5cdFx0XHRcdC8vIEluIHN1Y2ggY2FzZXMsIHdlIHdvcmsgYXJvdW5kIHRoZSBiZWhhdmlvciBieSBwcmVmaXhpbmcgZXZlcnkgc2VsZWN0b3IgaW4gdGhlXG5cdFx0XHRcdC8vIGxpc3Qgd2l0aCBhbiBJRCBzZWxlY3RvciByZWZlcmVuY2luZyB0aGUgc2NvcGUgY29udGV4dC5cblx0XHRcdFx0Ly8gVGhhbmtzIHRvIEFuZHJldyBEdXBvbnQgZm9yIHRoaXMgdGVjaG5pcXVlLlxuXHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSAxICYmIHJkZXNjZW5kLnRlc3QoIHNlbGVjdG9yICkgKSB7XG5cblx0XHRcdFx0XHQvLyBDYXB0dXJlIHRoZSBjb250ZXh0IElELCBzZXR0aW5nIGl0IGZpcnN0IGlmIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdGlmICggKG5pZCA9IGNvbnRleHQuZ2V0QXR0cmlidXRlKCBcImlkXCIgKSkgKSB7XG5cdFx0XHRcdFx0XHRuaWQgPSBuaWQucmVwbGFjZSggcmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb250ZXh0LnNldEF0dHJpYnV0ZSggXCJpZFwiLCAobmlkID0gZXhwYW5kbykgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmVmaXggZXZlcnkgc2VsZWN0b3IgaW4gdGhlIGxpc3Rcblx0XHRcdFx0XHRncm91cHMgPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcblx0XHRcdFx0XHRpID0gZ3JvdXBzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGdyb3Vwc1tpXSA9IFwiI1wiICsgbmlkICsgXCIgXCIgKyB0b1NlbGVjdG9yKCBncm91cHNbaV0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bmV3U2VsZWN0b3IgPSBncm91cHMuam9pbiggXCIsXCIgKTtcblxuXHRcdFx0XHRcdC8vIEV4cGFuZCBjb250ZXh0IGZvciBzaWJsaW5nIHNlbGVjdG9yc1xuXHRcdFx0XHRcdG5ld0NvbnRleHQgPSByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fFxuXHRcdFx0XHRcdFx0Y29udGV4dDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cyxcblx0XHRcdFx0XHRcdG5ld0NvbnRleHQucXVlcnlTZWxlY3RvckFsbCggbmV3U2VsZWN0b3IgKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH0gY2F0Y2ggKCBxc2FFcnJvciApIHtcblx0XHRcdFx0XHRub25uYXRpdmVTZWxlY3RvckNhY2hlKCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRcdGlmICggbmlkID09PSBleHBhbmRvICkge1xuXHRcdFx0XHRcdFx0Y29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFsbCBvdGhlcnNcblx0cmV0dXJuIHNlbGVjdCggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGtleS12YWx1ZSBjYWNoZXMgb2YgbGltaXRlZCBzaXplXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oc3RyaW5nLCBvYmplY3QpfSBSZXR1cm5zIHRoZSBPYmplY3QgZGF0YSBhZnRlciBzdG9yaW5nIGl0IG9uIGl0c2VsZiB3aXRoXG4gKlx0cHJvcGVydHkgbmFtZSB0aGUgKHNwYWNlLXN1ZmZpeGVkKSBzdHJpbmcgYW5kIChpZiB0aGUgY2FjaGUgaXMgbGFyZ2VyIHRoYW4gRXhwci5jYWNoZUxlbmd0aClcbiAqXHRkZWxldGluZyB0aGUgb2xkZXN0IGVudHJ5XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhY2hlKCkge1xuXHR2YXIga2V5cyA9IFtdO1xuXG5cdGZ1bmN0aW9uIGNhY2hlKCBrZXksIHZhbHVlICkge1xuXHRcdC8vIFVzZSAoa2V5ICsgXCIgXCIpIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIG5hdGl2ZSBwcm90b3R5cGUgcHJvcGVydGllcyAoc2VlIElzc3VlICMxNTcpXG5cdFx0aWYgKCBrZXlzLnB1c2goIGtleSArIFwiIFwiICkgPiBFeHByLmNhY2hlTGVuZ3RoICkge1xuXHRcdFx0Ly8gT25seSBrZWVwIHRoZSBtb3N0IHJlY2VudCBlbnRyaWVzXG5cdFx0XHRkZWxldGUgY2FjaGVbIGtleXMuc2hpZnQoKSBdO1xuXHRcdH1cblx0XHRyZXR1cm4gKGNhY2hlWyBrZXkgKyBcIiBcIiBdID0gdmFsdWUpO1xuXHR9XG5cdHJldHVybiBjYWNoZTtcbn1cblxuLyoqXG4gKiBNYXJrIGEgZnVuY3Rpb24gZm9yIHNwZWNpYWwgdXNlIGJ5IFNpenpsZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIG1hcmtcbiAqL1xuZnVuY3Rpb24gbWFya0Z1bmN0aW9uKCBmbiApIHtcblx0Zm5bIGV4cGFuZG8gXSA9IHRydWU7XG5cdHJldHVybiBmbjtcbn1cblxuLyoqXG4gKiBTdXBwb3J0IHRlc3RpbmcgdXNpbmcgYW4gZWxlbWVudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gUGFzc2VkIHRoZSBjcmVhdGVkIGVsZW1lbnQgYW5kIHJldHVybnMgYSBib29sZWFuIHJlc3VsdFxuICovXG5mdW5jdGlvbiBhc3NlcnQoIGZuICkge1xuXHR2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZmllbGRzZXRcIik7XG5cblx0dHJ5IHtcblx0XHRyZXR1cm4gISFmbiggZWwgKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBmaW5hbGx5IHtcblx0XHQvLyBSZW1vdmUgZnJvbSBpdHMgcGFyZW50IGJ5IGRlZmF1bHRcblx0XHRpZiAoIGVsLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbCApO1xuXHRcdH1cblx0XHQvLyByZWxlYXNlIG1lbW9yeSBpbiBJRVxuXHRcdGVsID0gbnVsbDtcblx0fVxufVxuXG4vKipcbiAqIEFkZHMgdGhlIHNhbWUgaGFuZGxlciBmb3IgYWxsIG9mIHRoZSBzcGVjaWZpZWQgYXR0cnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBhdHRycyBQaXBlLXNlcGFyYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgVGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgYXBwbGllZFxuICovXG5mdW5jdGlvbiBhZGRIYW5kbGUoIGF0dHJzLCBoYW5kbGVyICkge1xuXHR2YXIgYXJyID0gYXR0cnMuc3BsaXQoXCJ8XCIpLFxuXHRcdGkgPSBhcnIubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdEV4cHIuYXR0ckhhbmRsZVsgYXJyW2ldIF0gPSBoYW5kbGVyO1xuXHR9XG59XG5cbi8qKlxuICogQ2hlY2tzIGRvY3VtZW50IG9yZGVyIG9mIHR3byBzaWJsaW5nc1xuICogQHBhcmFtIHtFbGVtZW50fSBhXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFJldHVybnMgbGVzcyB0aGFuIDAgaWYgYSBwcmVjZWRlcyBiLCBncmVhdGVyIHRoYW4gMCBpZiBhIGZvbGxvd3MgYlxuICovXG5mdW5jdGlvbiBzaWJsaW5nQ2hlY2soIGEsIGIgKSB7XG5cdHZhciBjdXIgPSBiICYmIGEsXG5cdFx0ZGlmZiA9IGN1ciAmJiBhLm5vZGVUeXBlID09PSAxICYmIGIubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4O1xuXG5cdC8vIFVzZSBJRSBzb3VyY2VJbmRleCBpZiBhdmFpbGFibGUgb24gYm90aCBub2Rlc1xuXHRpZiAoIGRpZmYgKSB7XG5cdFx0cmV0dXJuIGRpZmY7XG5cdH1cblxuXHQvLyBDaGVjayBpZiBiIGZvbGxvd3MgYVxuXHRpZiAoIGN1ciApIHtcblx0XHR3aGlsZSAoIChjdXIgPSBjdXIubmV4dFNpYmxpbmcpICkge1xuXHRcdFx0aWYgKCBjdXIgPT09IGIgKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYSA/IDEgOiAtMTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGlucHV0IHR5cGVzXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVJbnB1dFBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgYnV0dG9uc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQnV0dG9uUHNldWRvKCB0eXBlICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0cmV0dXJuIChuYW1lID09PSBcImlucHV0XCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIikgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgOmVuYWJsZWQvOmRpc2FibGVkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGRpc2FibGVkIHRydWUgZm9yIDpkaXNhYmxlZDsgZmFsc2UgZm9yIDplbmFibGVkXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURpc2FibGVkUHNldWRvKCBkaXNhYmxlZCApIHtcblxuXHQvLyBLbm93biA6ZGlzYWJsZWQgZmFsc2UgcG9zaXRpdmVzOiBmaWVsZHNldFtkaXNhYmxlZF0gPiBsZWdlbmQ6bnRoLW9mLXR5cGUobisyKSA6Y2FuLWRpc2FibGVcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gT25seSBjZXJ0YWluIGVsZW1lbnRzIGNhbiBtYXRjaCA6ZW5hYmxlZCBvciA6ZGlzYWJsZWRcblx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1lbmFibGVkXG5cdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0b3ItZGlzYWJsZWRcblx0XHRpZiAoIFwiZm9ybVwiIGluIGVsZW0gKSB7XG5cblx0XHRcdC8vIENoZWNrIGZvciBpbmhlcml0ZWQgZGlzYWJsZWRuZXNzIG9uIHJlbGV2YW50IG5vbi1kaXNhYmxlZCBlbGVtZW50czpcblx0XHRcdC8vICogbGlzdGVkIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50cyBpbiBhIGRpc2FibGVkIGZpZWxkc2V0XG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY2F0ZWdvcnktbGlzdGVkXG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2VwdC1mZS1kaXNhYmxlZFxuXHRcdFx0Ly8gKiBvcHRpb24gZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtb3B0aW9uLWRpc2FibGVkXG5cdFx0XHQvLyBBbGwgc3VjaCBlbGVtZW50cyBoYXZlIGEgXCJmb3JtXCIgcHJvcGVydHkuXG5cdFx0XHRpZiAoIGVsZW0ucGFyZW50Tm9kZSAmJiBlbGVtLmRpc2FibGVkID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHQvLyBPcHRpb24gZWxlbWVudHMgZGVmZXIgdG8gYSBwYXJlbnQgb3B0Z3JvdXAgaWYgcHJlc2VudFxuXHRcdFx0XHRpZiAoIFwibGFiZWxcIiBpbiBlbGVtICkge1xuXHRcdFx0XHRcdGlmICggXCJsYWJlbFwiIGluIGVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLnBhcmVudE5vZGUuZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDExXG5cdFx0XHRcdC8vIFVzZSB0aGUgaXNEaXNhYmxlZCBzaG9ydGN1dCBwcm9wZXJ0eSB0byBjaGVjayBmb3IgZGlzYWJsZWQgZmllbGRzZXQgYW5jZXN0b3JzXG5cdFx0XHRcdHJldHVybiBlbGVtLmlzRGlzYWJsZWQgPT09IGRpc2FibGVkIHx8XG5cblx0XHRcdFx0XHQvLyBXaGVyZSB0aGVyZSBpcyBubyBpc0Rpc2FibGVkLCBjaGVjayBtYW51YWxseVxuXHRcdFx0XHRcdC8qIGpzaGludCAtVzAxOCAqL1xuXHRcdFx0XHRcdGVsZW0uaXNEaXNhYmxlZCAhPT0gIWRpc2FibGVkICYmXG5cdFx0XHRcdFx0XHRpbkRpc2FibGVkRmllbGRzZXQoIGVsZW0gKSA9PT0gZGlzYWJsZWQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblxuXHRcdC8vIFRyeSB0byB3aW5ub3cgb3V0IGVsZW1lbnRzIHRoYXQgY2FuJ3QgYmUgZGlzYWJsZWQgYmVmb3JlIHRydXN0aW5nIHRoZSBkaXNhYmxlZCBwcm9wZXJ0eS5cblx0XHQvLyBTb21lIHZpY3RpbXMgZ2V0IGNhdWdodCBpbiBvdXIgbmV0IChsYWJlbCwgbGVnZW5kLCBtZW51LCB0cmFjayksIGJ1dCBpdCBzaG91bGRuJ3Rcblx0XHQvLyBldmVuIGV4aXN0IG9uIHRoZW0sIGxldCBhbG9uZSBoYXZlIGEgYm9vbGVhbiB2YWx1ZS5cblx0XHR9IGVsc2UgaWYgKCBcImxhYmVsXCIgaW4gZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHR9XG5cblx0XHQvLyBSZW1haW5pbmcgZWxlbWVudHMgYXJlIG5laXRoZXIgOmVuYWJsZWQgbm9yIDpkaXNhYmxlZFxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIHBvc2l0aW9uYWxzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICovXG5mdW5jdGlvbiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmbiApIHtcblx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggYXJndW1lbnQgKSB7XG5cdFx0YXJndW1lbnQgPSArYXJndW1lbnQ7XG5cdFx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdHZhciBqLFxuXHRcdFx0XHRtYXRjaEluZGV4ZXMgPSBmbiggW10sIHNlZWQubGVuZ3RoLCBhcmd1bWVudCApLFxuXHRcdFx0XHRpID0gbWF0Y2hJbmRleGVzLmxlbmd0aDtcblxuXHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBpbmRleGVzXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCBzZWVkWyAoaiA9IG1hdGNoSW5kZXhlc1tpXSkgXSApIHtcblx0XHRcdFx0XHRzZWVkW2pdID0gIShtYXRjaGVzW2pdID0gc2VlZFtqXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBTaXp6bGUgY29udGV4dFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdD19IGNvbnRleHRcbiAqIEByZXR1cm5zIHtFbGVtZW50fE9iamVjdHxCb29sZWFufSBUaGUgaW5wdXQgbm9kZSBpZiBhY2NlcHRhYmxlLCBvdGhlcndpc2UgYSBmYWxzeSB2YWx1ZVxuICovXG5mdW5jdGlvbiB0ZXN0Q29udGV4dCggY29udGV4dCApIHtcblx0cmV0dXJuIGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29udGV4dDtcbn1cblxuLy8gRXhwb3NlIHN1cHBvcnQgdmFycyBmb3IgY29udmVuaWVuY2VcbnN1cHBvcnQgPSBTaXp6bGUuc3VwcG9ydCA9IHt9O1xuXG4vKipcbiAqIERldGVjdHMgWE1MIG5vZGVzXG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBlbGVtIEFuIGVsZW1lbnQgb3IgYSBkb2N1bWVudFxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWZmIGVsZW0gaXMgYSBub24tSFRNTCBYTUwgbm9kZVxuICovXG5pc1hNTCA9IFNpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHR2YXIgbmFtZXNwYWNlID0gZWxlbS5uYW1lc3BhY2VVUkksXG5cdFx0ZG9jRWxlbSA9IChlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSkuZG9jdW1lbnRFbGVtZW50O1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OFxuXHQvLyBBc3N1bWUgSFRNTCB3aGVuIGRvY3VtZW50RWxlbWVudCBkb2Vzbid0IHlldCBleGlzdCwgc3VjaCBhcyBpbnNpZGUgbG9hZGluZyBpZnJhbWVzXG5cdC8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC80ODMzXG5cdHJldHVybiAhcmh0bWwudGVzdCggbmFtZXNwYWNlIHx8IGRvY0VsZW0gJiYgZG9jRWxlbS5ub2RlTmFtZSB8fCBcIkhUTUxcIiApO1xufTtcblxuLyoqXG4gKiBTZXRzIGRvY3VtZW50LXJlbGF0ZWQgdmFyaWFibGVzIG9uY2UgYmFzZWQgb24gdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IFtkb2NdIEFuIGVsZW1lbnQgb3IgZG9jdW1lbnQgb2JqZWN0IHRvIHVzZSB0byBzZXQgdGhlIGRvY3VtZW50XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKi9cbnNldERvY3VtZW50ID0gU2l6emxlLnNldERvY3VtZW50ID0gZnVuY3Rpb24oIG5vZGUgKSB7XG5cdHZhciBoYXNDb21wYXJlLCBzdWJXaW5kb3csXG5cdFx0ZG9jID0gbm9kZSA/IG5vZGUub3duZXJEb2N1bWVudCB8fCBub2RlIDogcHJlZmVycmVkRG9jO1xuXG5cdC8vIFJldHVybiBlYXJseSBpZiBkb2MgaXMgaW52YWxpZCBvciBhbHJlYWR5IHNlbGVjdGVkXG5cdGlmICggZG9jID09PSBkb2N1bWVudCB8fCBkb2Mubm9kZVR5cGUgIT09IDkgfHwgIWRvYy5kb2N1bWVudEVsZW1lbnQgKSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50O1xuXHR9XG5cblx0Ly8gVXBkYXRlIGdsb2JhbCB2YXJpYWJsZXNcblx0ZG9jdW1lbnQgPSBkb2M7XG5cdGRvY0VsZW0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cdGRvY3VtZW50SXNIVE1MID0gIWlzWE1MKCBkb2N1bWVudCApO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDktMTEsIEVkZ2Vcblx0Ly8gQWNjZXNzaW5nIGlmcmFtZSBkb2N1bWVudHMgYWZ0ZXIgdW5sb2FkIHRocm93cyBcInBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3JzIChqUXVlcnkgIzEzOTM2KVxuXHRpZiAoIHByZWZlcnJlZERvYyAhPT0gZG9jdW1lbnQgJiZcblx0XHQoc3ViV2luZG93ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcpICYmIHN1YldpbmRvdy50b3AgIT09IHN1YldpbmRvdyApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDExLCBFZGdlXG5cdFx0aWYgKCBzdWJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lciApIHtcblx0XHRcdHN1YldpbmRvdy5hZGRFdmVudExpc3RlbmVyKCBcInVubG9hZFwiLCB1bmxvYWRIYW5kbGVyLCBmYWxzZSApO1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDEwIG9ubHlcblx0XHR9IGVsc2UgaWYgKCBzdWJXaW5kb3cuYXR0YWNoRXZlbnQgKSB7XG5cdFx0XHRzdWJXaW5kb3cuYXR0YWNoRXZlbnQoIFwib251bmxvYWRcIiwgdW5sb2FkSGFuZGxlciApO1xuXHRcdH1cblx0fVxuXG5cdC8qIEF0dHJpYnV0ZXNcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIFN1cHBvcnQ6IElFPDhcblx0Ly8gVmVyaWZ5IHRoYXQgZ2V0QXR0cmlidXRlIHJlYWxseSByZXR1cm5zIGF0dHJpYnV0ZXMgYW5kIG5vdCBwcm9wZXJ0aWVzXG5cdC8vIChleGNlcHRpbmcgSUU4IGJvb2xlYW5zKVxuXHRzdXBwb3J0LmF0dHJpYnV0ZXMgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdGVsLmNsYXNzTmFtZSA9IFwiaVwiO1xuXHRcdHJldHVybiAhZWwuZ2V0QXR0cmlidXRlKFwiY2xhc3NOYW1lXCIpO1xuXHR9KTtcblxuXHQvKiBnZXRFbGVtZW50KHMpQnkqXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikgcmV0dXJucyBvbmx5IGVsZW1lbnRzXG5cdHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdGVsLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVDb21tZW50KFwiXCIpICk7XG5cdFx0cmV0dXJuICFlbC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikubGVuZ3RoO1xuXHR9KTtcblxuXHQvLyBTdXBwb3J0OiBJRTw5XG5cdHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IHJuYXRpdmUudGVzdCggZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApO1xuXG5cdC8vIFN1cHBvcnQ6IElFPDEwXG5cdC8vIENoZWNrIGlmIGdldEVsZW1lbnRCeUlkIHJldHVybnMgZWxlbWVudHMgYnkgbmFtZVxuXHQvLyBUaGUgYnJva2VuIGdldEVsZW1lbnRCeUlkIG1ldGhvZHMgZG9uJ3QgcGljayB1cCBwcm9ncmFtbWF0aWNhbGx5LXNldCBuYW1lcyxcblx0Ly8gc28gdXNlIGEgcm91bmRhYm91dCBnZXRFbGVtZW50c0J5TmFtZSB0ZXN0XG5cdHN1cHBvcnQuZ2V0QnlJZCA9IGFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5pZCA9IGV4cGFuZG87XG5cdFx0cmV0dXJuICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSB8fCAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIGV4cGFuZG8gKS5sZW5ndGg7XG5cdH0pO1xuXG5cdC8vIElEIGZpbHRlciBhbmQgZmluZFxuXHRpZiAoIHN1cHBvcnQuZ2V0QnlJZCApIHtcblx0XHRFeHByLmZpbHRlcltcIklEXCJdID0gZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZShcImlkXCIpID09PSBhdHRySWQ7XG5cdFx0XHR9O1xuXHRcdH07XG5cdFx0RXhwci5maW5kW1wiSURcIl0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XG5cdFx0XHRcdHJldHVybiBlbGVtID8gWyBlbGVtIF0gOiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdEV4cHIuZmlsdGVyW1wiSURcIl0gPSAgZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpO1xuXHRcdFx0XHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlID09PSBhdHRySWQ7XG5cdFx0XHR9O1xuXHRcdH07XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA2IC0gNyBvbmx5XG5cdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgaXMgbm90IHJlbGlhYmxlIGFzIGEgZmluZCBzaG9ydGN1dFxuXHRcdEV4cHIuZmluZFtcIklEXCJdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIG5vZGUsIGksIGVsZW1zLFxuXHRcdFx0XHRcdGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXG5cdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdC8vIFZlcmlmeSB0aGUgaWQgYXR0cmlidXRlXG5cdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpO1xuXHRcdFx0XHRcdGlmICggbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZCApIHtcblx0XHRcdFx0XHRcdHJldHVybiBbIGVsZW0gXTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBGYWxsIGJhY2sgb24gZ2V0RWxlbWVudHNCeU5hbWVcblx0XHRcdFx0XHRlbGVtcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeU5hbWUoIGlkICk7XG5cdFx0XHRcdFx0aSA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoZWxlbSA9IGVsZW1zW2krK10pICkge1xuXHRcdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpO1xuXHRcdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gWyBlbGVtIF07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHQvLyBUYWdcblx0RXhwci5maW5kW1wiVEFHXCJdID0gc3VwcG9ydC5nZXRFbGVtZW50c0J5VGFnTmFtZSA/XG5cdFx0ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTtcblxuXHRcdFx0Ly8gRG9jdW1lbnRGcmFnbWVudCBub2RlcyBkb24ndCBoYXZlIGdFQlROXG5cdFx0XHR9IGVsc2UgaWYgKCBzdXBwb3J0LnFzYSApIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnICk7XG5cdFx0XHR9XG5cdFx0fSA6XG5cblx0XHRmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkge1xuXHRcdFx0dmFyIGVsZW0sXG5cdFx0XHRcdHRtcCA9IFtdLFxuXHRcdFx0XHRpID0gMCxcblx0XHRcdFx0Ly8gQnkgaGFwcHkgY29pbmNpZGVuY2UsIGEgKGJyb2tlbikgZ0VCVE4gYXBwZWFycyBvbiBEb2N1bWVudEZyYWdtZW50IG5vZGVzIHRvb1xuXHRcdFx0XHRyZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIEZpbHRlciBvdXQgcG9zc2libGUgY29tbWVudHNcblx0XHRcdGlmICggdGFnID09PSBcIipcIiApIHtcblx0XHRcdFx0d2hpbGUgKCAoZWxlbSA9IHJlc3VsdHNbaSsrXSkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRcdFx0dG1wLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdG1wO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0fTtcblxuXHQvLyBDbGFzc1xuXHRFeHByLmZpbmRbXCJDTEFTU1wiXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiBmdW5jdGlvbiggY2xhc3NOYW1lLCBjb250ZXh0ICkge1xuXHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIGNsYXNzTmFtZSApO1xuXHRcdH1cblx0fTtcblxuXHQvKiBRU0EvbWF0Y2hlc1NlbGVjdG9yXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBRU0EgYW5kIG1hdGNoZXNTZWxlY3RvciBzdXBwb3J0XG5cblx0Ly8gbWF0Y2hlc1NlbGVjdG9yKDphY3RpdmUpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChJRTkvT3BlcmEgMTEuNSlcblx0cmJ1Z2d5TWF0Y2hlcyA9IFtdO1xuXG5cdC8vIHFTYSg6Zm9jdXMpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChDaHJvbWUgMjEpXG5cdC8vIFdlIGFsbG93IHRoaXMgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBJRTgvOSB0aGF0IHRocm93cyBhbiBlcnJvclxuXHQvLyB3aGVuZXZlciBgZG9jdW1lbnQuYWN0aXZlRWxlbWVudGAgaXMgYWNjZXNzZWQgb24gYW4gaWZyYW1lXG5cdC8vIFNvLCB3ZSBhbGxvdyA6Zm9jdXMgdG8gcGFzcyB0aHJvdWdoIFFTQSBhbGwgdGhlIHRpbWUgdG8gYXZvaWQgdGhlIElFIGVycm9yXG5cdC8vIFNlZSBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTMzNzhcblx0cmJ1Z2d5UVNBID0gW107XG5cblx0aWYgKCAoc3VwcG9ydC5xc2EgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKSkgKSB7XG5cdFx0Ly8gQnVpbGQgUVNBIHJlZ2V4XG5cdFx0Ly8gUmVnZXggc3RyYXRlZ3kgYWRvcHRlZCBmcm9tIERpZWdvIFBlcmluaVxuXHRcdGFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHQvLyBTZWxlY3QgaXMgc2V0IHRvIGVtcHR5IHN0cmluZyBvbiBwdXJwb3NlXG5cdFx0XHQvLyBUaGlzIGlzIHRvIHRlc3QgSUUncyB0cmVhdG1lbnQgb2Ygbm90IGV4cGxpY2l0bHlcblx0XHRcdC8vIHNldHRpbmcgYSBib29sZWFuIGNvbnRlbnQgYXR0cmlidXRlLFxuXHRcdFx0Ly8gc2luY2UgaXRzIHByZXNlbmNlIHNob3VsZCBiZSBlbm91Z2hcblx0XHRcdC8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMjM1OVxuXHRcdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5pbm5lckhUTUwgPSBcIjxhIGlkPSdcIiArIGV4cGFuZG8gKyBcIic+PC9hPlwiICtcblx0XHRcdFx0XCI8c2VsZWN0IGlkPSdcIiArIGV4cGFuZG8gKyBcIi1cXHJcXFxcJyBtc2FsbG93Y2FwdHVyZT0nJz5cIiArXG5cdFx0XHRcdFwiPG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD5cIjtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4LCBPcGVyYSAxMS0xMi4xNlxuXHRcdFx0Ly8gTm90aGluZyBzaG91bGQgYmUgc2VsZWN0ZWQgd2hlbiBlbXB0eSBzdHJpbmdzIGZvbGxvdyBePSBvciAkPSBvciAqPVxuXHRcdFx0Ly8gVGhlIHRlc3QgYXR0cmlidXRlIG11c3QgYmUgdW5rbm93biBpbiBPcGVyYSBidXQgXCJzYWZlXCIgZm9yIFdpblJUXG5cdFx0XHQvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2hoNDY1Mzg4LmFzcHgjYXR0cmlidXRlX3NlY3Rpb25cblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbChcIlttc2FsbG93Y2FwdHVyZV49JyddXCIpLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiWypeJF09XCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86Jyd8XFxcIlxcXCIpXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XG5cdFx0XHQvLyBCb29sZWFuIGF0dHJpYnV0ZXMgYW5kIFwidmFsdWVcIiBhcmUgbm90IHRyZWF0ZWQgY29ycmVjdGx5XG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKFwiW3NlbGVjdGVkXVwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86dmFsdWV8XCIgKyBib29sZWFucyArIFwiKVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZTwyOSwgQW5kcm9pZDw0LjQsIFNhZmFyaTw3LjArLCBpT1M8Ny4wKywgUGhhbnRvbUpTPDEuOS44K1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJbaWR+PVwiICsgZXhwYW5kbyArIFwiLV1cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goXCJ+PVwiKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gV2Via2l0L09wZXJhIC0gOmNoZWNrZWQgc2hvdWxkIHJldHVybiBzZWxlY3RlZCBvcHRpb24gZWxlbWVudHNcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbChcIjpjaGVja2VkXCIpLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goXCI6Y2hlY2tlZFwiKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrLCBpT1MgOCtcblx0XHRcdC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY4NTFcblx0XHRcdC8vIEluLXBhZ2UgYHNlbGVjdG9yI2lkIHNpYmxpbmctY29tYmluYXRvciBzZWxlY3RvcmAgZmFpbHNcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiYSNcIiArIGV4cGFuZG8gKyBcIisqXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKFwiLiMuK1srfl1cIik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0ZWwuaW5uZXJIVE1MID0gXCI8YSBocmVmPScnIGRpc2FibGVkPSdkaXNhYmxlZCc+PC9hPlwiICtcblx0XHRcdFx0XCI8c2VsZWN0IGRpc2FibGVkPSdkaXNhYmxlZCc+PG9wdGlvbi8+PC9zZWxlY3Q+XCI7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IFdpbmRvd3MgOCBOYXRpdmUgQXBwc1xuXHRcdFx0Ly8gVGhlIHR5cGUgYW5kIG5hbWUgYXR0cmlidXRlcyBhcmUgcmVzdHJpY3RlZCBkdXJpbmcgLmlubmVySFRNTCBhc3NpZ25tZW50XG5cdFx0XHR2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG5cdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcImhpZGRlblwiICk7XG5cdFx0XHRlbC5hcHBlbmRDaGlsZCggaW5wdXQgKS5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcIkRcIiApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRThcblx0XHRcdC8vIEVuZm9yY2UgY2FzZS1zZW5zaXRpdml0eSBvZiBuYW1lIGF0dHJpYnV0ZVxuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKFwiW25hbWU9ZF1cIikubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJuYW1lXCIgKyB3aGl0ZXNwYWNlICsgXCIqWypeJHwhfl0/PVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZGIDMuNSAtIDplbmFibGVkLzpkaXNhYmxlZCBhbmQgaGlkZGVuIGVsZW1lbnRzIChoaWRkZW4gZWxlbWVudHMgYXJlIHN0aWxsIGVuYWJsZWQpXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKFwiOmVuYWJsZWRcIikubGVuZ3RoICE9PSAyICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6ZW5hYmxlZFwiLCBcIjpkaXNhYmxlZFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOS0xMStcblx0XHRcdC8vIElFJ3MgOmRpc2FibGVkIHNlbGVjdG9yIGRvZXMgbm90IHBpY2sgdXAgdGhlIGNoaWxkcmVuIG9mIGRpc2FibGVkIGZpZWxkc2V0c1xuXHRcdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5kaXNhYmxlZCA9IHRydWU7XG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCI6ZGlzYWJsZWRcIikubGVuZ3RoICE9PSAyICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6ZW5hYmxlZFwiLCBcIjpkaXNhYmxlZFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9wZXJhIDEwLTExIGRvZXMgbm90IHRocm93IG9uIHBvc3QtY29tbWEgaW52YWxpZCBwc2V1ZG9zXG5cdFx0XHRlbC5xdWVyeVNlbGVjdG9yQWxsKFwiKiw6eFwiKTtcblx0XHRcdHJidWdneVFTQS5wdXNoKFwiLC4qOlwiKTtcblx0XHR9KTtcblx0fVxuXG5cdGlmICggKHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yID0gcm5hdGl2ZS50ZXN0KCAobWF0Y2hlcyA9IGRvY0VsZW0ubWF0Y2hlcyB8fFxuXHRcdGRvY0VsZW0ud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5tb3pNYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm9NYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm1zTWF0Y2hlc1NlbGVjdG9yKSApKSApIHtcblxuXHRcdGFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHQvLyBDaGVjayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBtYXRjaGVzU2VsZWN0b3Jcblx0XHRcdC8vIG9uIGEgZGlzY29ubmVjdGVkIG5vZGUgKElFIDkpXG5cdFx0XHRzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoID0gbWF0Y2hlcy5jYWxsKCBlbCwgXCIqXCIgKTtcblxuXHRcdFx0Ly8gVGhpcyBzaG91bGQgZmFpbCB3aXRoIGFuIGV4Y2VwdGlvblxuXHRcdFx0Ly8gR2Vja28gZG9lcyBub3QgZXJyb3IsIHJldHVybnMgZmFsc2UgaW5zdGVhZFxuXHRcdFx0bWF0Y2hlcy5jYWxsKCBlbCwgXCJbcyE9JyddOnhcIiApO1xuXHRcdFx0cmJ1Z2d5TWF0Y2hlcy5wdXNoKCBcIiE9XCIsIHBzZXVkb3MgKTtcblx0XHR9KTtcblx0fVxuXG5cdHJidWdneVFTQSA9IHJidWdneVFTQS5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5UVNBLmpvaW4oXCJ8XCIpICk7XG5cdHJidWdneU1hdGNoZXMgPSByYnVnZ3lNYXRjaGVzLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lNYXRjaGVzLmpvaW4oXCJ8XCIpICk7XG5cblx0LyogQ29udGFpbnNcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXHRoYXNDb21wYXJlID0gcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICk7XG5cblx0Ly8gRWxlbWVudCBjb250YWlucyBhbm90aGVyXG5cdC8vIFB1cnBvc2VmdWxseSBzZWxmLWV4Y2x1c2l2ZVxuXHQvLyBBcyBpbiwgYW4gZWxlbWVudCBkb2VzIG5vdCBjb250YWluIGl0c2VsZlxuXHRjb250YWlucyA9IGhhc0NvbXBhcmUgfHwgcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbnRhaW5zICkgP1xuXHRcdGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdFx0dmFyIGFkb3duID0gYS5ub2RlVHlwZSA9PT0gOSA/IGEuZG9jdW1lbnRFbGVtZW50IDogYSxcblx0XHRcdFx0YnVwID0gYiAmJiBiLnBhcmVudE5vZGU7XG5cdFx0XHRyZXR1cm4gYSA9PT0gYnVwIHx8ICEhKCBidXAgJiYgYnVwLm5vZGVUeXBlID09PSAxICYmIChcblx0XHRcdFx0YWRvd24uY29udGFpbnMgP1xuXHRcdFx0XHRcdGFkb3duLmNvbnRhaW5zKCBidXAgKSA6XG5cdFx0XHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAmJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBidXAgKSAmIDE2XG5cdFx0XHQpKTtcblx0XHR9IDpcblx0XHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHRcdGlmICggYiApIHtcblx0XHRcdFx0d2hpbGUgKCAoYiA9IGIucGFyZW50Tm9kZSkgKSB7XG5cdFx0XHRcdFx0aWYgKCBiID09PSBhICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblxuXHQvKiBTb3J0aW5nXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBEb2N1bWVudCBvcmRlciBzb3J0aW5nXG5cdHNvcnRPcmRlciA9IGhhc0NvbXBhcmUgP1xuXHRmdW5jdGlvbiggYSwgYiApIHtcblxuXHRcdC8vIEZsYWcgZm9yIGR1cGxpY2F0ZSByZW1vdmFsXG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdC8vIFNvcnQgb24gbWV0aG9kIGV4aXN0ZW5jZSBpZiBvbmx5IG9uZSBpbnB1dCBoYXMgY29tcGFyZURvY3VtZW50UG9zaXRpb25cblx0XHR2YXIgY29tcGFyZSA9ICFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIC0gIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb247XG5cdFx0aWYgKCBjb21wYXJlICkge1xuXHRcdFx0cmV0dXJuIGNvbXBhcmU7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsY3VsYXRlIHBvc2l0aW9uIGlmIGJvdGggaW5wdXRzIGJlbG9uZyB0byB0aGUgc2FtZSBkb2N1bWVudFxuXHRcdGNvbXBhcmUgPSAoIGEub3duZXJEb2N1bWVudCB8fCBhICkgPT09ICggYi5vd25lckRvY3VtZW50IHx8IGIgKSA/XG5cdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBiICkgOlxuXG5cdFx0XHQvLyBPdGhlcndpc2Ugd2Uga25vdyB0aGV5IGFyZSBkaXNjb25uZWN0ZWRcblx0XHRcdDE7XG5cblx0XHQvLyBEaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRpZiAoIGNvbXBhcmUgJiAxIHx8XG5cdFx0XHQoIXN1cHBvcnQuc29ydERldGFjaGVkICYmIGIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGEgKSA9PT0gY29tcGFyZSkgKSB7XG5cblx0XHRcdC8vIENob29zZSB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IGlzIHJlbGF0ZWQgdG8gb3VyIHByZWZlcnJlZCBkb2N1bWVudFxuXHRcdFx0aWYgKCBhID09PSBkb2N1bWVudCB8fCBhLm93bmVyRG9jdW1lbnQgPT09IHByZWZlcnJlZERvYyAmJiBjb250YWlucyhwcmVmZXJyZWREb2MsIGEpICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGIgPT09IGRvY3VtZW50IHx8IGIub3duZXJEb2N1bWVudCA9PT0gcHJlZmVycmVkRG9jICYmIGNvbnRhaW5zKHByZWZlcnJlZERvYywgYikgKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWludGFpbiBvcmlnaW5hbCBvcmRlclxuXHRcdFx0cmV0dXJuIHNvcnRJbnB1dCA/XG5cdFx0XHRcdCggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tcGFyZSAmIDQgPyAtMSA6IDE7XG5cdH0gOlxuXHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHQvLyBFeGl0IGVhcmx5IGlmIHRoZSBub2RlcyBhcmUgaWRlbnRpY2FsXG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdHZhciBjdXIsXG5cdFx0XHRpID0gMCxcblx0XHRcdGF1cCA9IGEucGFyZW50Tm9kZSxcblx0XHRcdGJ1cCA9IGIucGFyZW50Tm9kZSxcblx0XHRcdGFwID0gWyBhIF0sXG5cdFx0XHRicCA9IFsgYiBdO1xuXG5cdFx0Ly8gUGFyZW50bGVzcyBub2RlcyBhcmUgZWl0aGVyIGRvY3VtZW50cyBvciBkaXNjb25uZWN0ZWRcblx0XHRpZiAoICFhdXAgfHwgIWJ1cCApIHtcblx0XHRcdHJldHVybiBhID09PSBkb2N1bWVudCA/IC0xIDpcblx0XHRcdFx0YiA9PT0gZG9jdW1lbnQgPyAxIDpcblx0XHRcdFx0YXVwID8gLTEgOlxuXHRcdFx0XHRidXAgPyAxIDpcblx0XHRcdFx0c29ydElucHV0ID9cblx0XHRcdFx0KCBpbmRleE9mKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOlxuXHRcdFx0XHQwO1xuXG5cdFx0Ly8gSWYgdGhlIG5vZGVzIGFyZSBzaWJsaW5ncywgd2UgY2FuIGRvIGEgcXVpY2sgY2hlY2tcblx0XHR9IGVsc2UgaWYgKCBhdXAgPT09IGJ1cCApIHtcblx0XHRcdHJldHVybiBzaWJsaW5nQ2hlY2soIGEsIGIgKTtcblx0XHR9XG5cblx0XHQvLyBPdGhlcndpc2Ugd2UgbmVlZCBmdWxsIGxpc3RzIG9mIHRoZWlyIGFuY2VzdG9ycyBmb3IgY29tcGFyaXNvblxuXHRcdGN1ciA9IGE7XG5cdFx0d2hpbGUgKCAoY3VyID0gY3VyLnBhcmVudE5vZGUpICkge1xuXHRcdFx0YXAudW5zaGlmdCggY3VyICk7XG5cdFx0fVxuXHRcdGN1ciA9IGI7XG5cdFx0d2hpbGUgKCAoY3VyID0gY3VyLnBhcmVudE5vZGUpICkge1xuXHRcdFx0YnAudW5zaGlmdCggY3VyICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2FsayBkb3duIHRoZSB0cmVlIGxvb2tpbmcgZm9yIGEgZGlzY3JlcGFuY3lcblx0XHR3aGlsZSAoIGFwW2ldID09PSBicFtpXSApIHtcblx0XHRcdGkrKztcblx0XHR9XG5cblx0XHRyZXR1cm4gaSA/XG5cdFx0XHQvLyBEbyBhIHNpYmxpbmcgY2hlY2sgaWYgdGhlIG5vZGVzIGhhdmUgYSBjb21tb24gYW5jZXN0b3Jcblx0XHRcdHNpYmxpbmdDaGVjayggYXBbaV0sIGJwW2ldICkgOlxuXG5cdFx0XHQvLyBPdGhlcndpc2Ugbm9kZXMgaW4gb3VyIGRvY3VtZW50IHNvcnQgZmlyc3Rcblx0XHRcdGFwW2ldID09PSBwcmVmZXJyZWREb2MgPyAtMSA6XG5cdFx0XHRicFtpXSA9PT0gcHJlZmVycmVkRG9jID8gMSA6XG5cdFx0XHQwO1xuXHR9O1xuXG5cdHJldHVybiBkb2N1bWVudDtcbn07XG5cblNpenpsZS5tYXRjaGVzID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1lbnRzICkge1xuXHRyZXR1cm4gU2l6emxlKCBleHByLCBudWxsLCBudWxsLCBlbGVtZW50cyApO1xufTtcblxuU2l6emxlLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBlbGVtLCBleHByICkge1xuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0aWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT09IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdH1cblxuXHRpZiAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yICYmIGRvY3VtZW50SXNIVE1MICYmXG5cdFx0IW5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGVbIGV4cHIgKyBcIiBcIiBdICYmXG5cdFx0KCAhcmJ1Z2d5TWF0Y2hlcyB8fCAhcmJ1Z2d5TWF0Y2hlcy50ZXN0KCBleHByICkgKSAmJlxuXHRcdCggIXJidWdneVFTQSAgICAgfHwgIXJidWdneVFTQS50ZXN0KCBleHByICkgKSApIHtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBlbGVtLCBleHByICk7XG5cblx0XHRcdC8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRcdGlmICggcmV0IHx8IHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggfHxcblx0XHRcdFx0XHQvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudFxuXHRcdFx0XHRcdC8vIGZyYWdtZW50IGluIElFIDlcblx0XHRcdFx0XHRlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09IDExICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUoIGV4cHIsIHRydWUgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gU2l6emxlKCBleHByLCBkb2N1bWVudCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5ndGggPiAwO1xufTtcblxuU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oIGNvbnRleHQsIGVsZW0gKSB7XG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHRpZiAoICggY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0fVxuXHRyZXR1cm4gY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKTtcbn07XG5cblNpenpsZS5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHRpZiAoICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0fVxuXG5cdHZhciBmbiA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZS50b0xvd2VyQ2FzZSgpIF0sXG5cdFx0Ly8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKGpRdWVyeSAjMTM4MDcpXG5cdFx0dmFsID0gZm4gJiYgaGFzT3duLmNhbGwoIEV4cHIuYXR0ckhhbmRsZSwgbmFtZS50b0xvd2VyQ2FzZSgpICkgP1xuXHRcdFx0Zm4oIGVsZW0sIG5hbWUsICFkb2N1bWVudElzSFRNTCApIDpcblx0XHRcdHVuZGVmaW5lZDtcblxuXHRyZXR1cm4gdmFsICE9PSB1bmRlZmluZWQgP1xuXHRcdHZhbCA6XG5cdFx0c3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApIDpcblx0XHRcdCh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUobmFtZSkpICYmIHZhbC5zcGVjaWZpZWQgP1xuXHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xufTtcblxuU2l6emxlLmVzY2FwZSA9IGZ1bmN0aW9uKCBzZWwgKSB7XG5cdHJldHVybiAoc2VsICsgXCJcIikucmVwbGFjZSggcmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApO1xufTtcblxuU2l6emxlLmVycm9yID0gZnVuY3Rpb24oIG1zZyApIHtcblx0dGhyb3cgbmV3IEVycm9yKCBcIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246IFwiICsgbXNnICk7XG59O1xuXG4vKipcbiAqIERvY3VtZW50IHNvcnRpbmcgYW5kIHJlbW92aW5nIGR1cGxpY2F0ZXNcbiAqIEBwYXJhbSB7QXJyYXlMaWtlfSByZXN1bHRzXG4gKi9cblNpenpsZS51bmlxdWVTb3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7XG5cdHZhciBlbGVtLFxuXHRcdGR1cGxpY2F0ZXMgPSBbXSxcblx0XHRqID0gMCxcblx0XHRpID0gMDtcblxuXHQvLyBVbmxlc3Mgd2UgKmtub3cqIHdlIGNhbiBkZXRlY3QgZHVwbGljYXRlcywgYXNzdW1lIHRoZWlyIHByZXNlbmNlXG5cdGhhc0R1cGxpY2F0ZSA9ICFzdXBwb3J0LmRldGVjdER1cGxpY2F0ZXM7XG5cdHNvcnRJbnB1dCA9ICFzdXBwb3J0LnNvcnRTdGFibGUgJiYgcmVzdWx0cy5zbGljZSggMCApO1xuXHRyZXN1bHRzLnNvcnQoIHNvcnRPcmRlciApO1xuXG5cdGlmICggaGFzRHVwbGljYXRlICkge1xuXHRcdHdoaWxlICggKGVsZW0gPSByZXN1bHRzW2krK10pICkge1xuXHRcdFx0aWYgKCBlbGVtID09PSByZXN1bHRzWyBpIF0gKSB7XG5cdFx0XHRcdGogPSBkdXBsaWNhdGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRyZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sgaiBdLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNlIG9iamVjdHNcblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL3B1bGwvMjI1XG5cdHNvcnRJbnB1dCA9IG51bGw7XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVzXG4gKiBAcGFyYW0ge0FycmF5fEVsZW1lbnR9IGVsZW1cbiAqL1xuZ2V0VGV4dCA9IFNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHZhciBub2RlLFxuXHRcdHJldCA9IFwiXCIsXG5cdFx0aSA9IDAsXG5cdFx0bm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdGlmICggIW5vZGVUeXBlICkge1xuXHRcdC8vIElmIG5vIG5vZGVUeXBlLCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5XG5cdFx0d2hpbGUgKCAobm9kZSA9IGVsZW1baSsrXSkgKSB7XG5cdFx0XHQvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2Rlc1xuXHRcdFx0cmV0ICs9IGdldFRleHQoIG5vZGUgKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09PSA5IHx8IG5vZGVUeXBlID09PSAxMSApIHtcblx0XHQvLyBVc2UgdGV4dENvbnRlbnQgZm9yIGVsZW1lbnRzXG5cdFx0Ly8gaW5uZXJUZXh0IHVzYWdlIHJlbW92ZWQgZm9yIGNvbnNpc3RlbmN5IG9mIG5ldyBsaW5lcyAoalF1ZXJ5ICMxMTE1Mylcblx0XHRpZiAoIHR5cGVvZiBlbGVtLnRleHRDb250ZW50ID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0udGV4dENvbnRlbnQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFRyYXZlcnNlIGl0cyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdHJldCArPSBnZXRUZXh0KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVmFsdWU7XG5cdH1cblx0Ly8gRG8gbm90IGluY2x1ZGUgY29tbWVudCBvciBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzXG5cblx0cmV0dXJuIHJldDtcbn07XG5cbkV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzID0ge1xuXG5cdC8vIENhbiBiZSBhZGp1c3RlZCBieSB0aGUgdXNlclxuXHRjYWNoZUxlbmd0aDogNTAsXG5cblx0Y3JlYXRlUHNldWRvOiBtYXJrRnVuY3Rpb24sXG5cblx0bWF0Y2g6IG1hdGNoRXhwcixcblxuXHRhdHRySGFuZGxlOiB7fSxcblxuXHRmaW5kOiB7fSxcblxuXHRyZWxhdGl2ZToge1xuXHRcdFwiPlwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCIgXCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiB9LFxuXHRcdFwiK1wiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIn5cIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIgfVxuXHR9LFxuXG5cdHByZUZpbHRlcjoge1xuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaFsxXSA9IG1hdGNoWzFdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdC8vIE1vdmUgdGhlIGdpdmVuIHZhbHVlIHRvIG1hdGNoWzNdIHdoZXRoZXIgcXVvdGVkIG9yIHVucXVvdGVkXG5cdFx0XHRtYXRjaFszXSA9ICggbWF0Y2hbM10gfHwgbWF0Y2hbNF0gfHwgbWF0Y2hbNV0gfHwgXCJcIiApLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdGlmICggbWF0Y2hbMl0gPT09IFwifj1cIiApIHtcblx0XHRcdFx0bWF0Y2hbM10gPSBcIiBcIiArIG1hdGNoWzNdICsgXCIgXCI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgNCApO1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdC8qIG1hdGNoZXMgZnJvbSBtYXRjaEV4cHJbXCJDSElMRFwiXVxuXHRcdFx0XHQxIHR5cGUgKG9ubHl8bnRofC4uLilcblx0XHRcdFx0MiB3aGF0IChjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHQzIGFyZ3VtZW50IChldmVufG9kZHxcXGQqfFxcZCpuKFsrLV1cXGQrKT98Li4uKVxuXHRcdFx0XHQ0IHhuLWNvbXBvbmVudCBvZiB4bit5IGFyZ3VtZW50IChbKy1dP1xcZCpufClcblx0XHRcdFx0NSBzaWduIG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ2IHggb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDcgc2lnbiBvZiB5LWNvbXBvbmVudFxuXHRcdFx0XHQ4IHkgb2YgeS1jb21wb25lbnRcblx0XHRcdCovXG5cdFx0XHRtYXRjaFsxXSA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdGlmICggbWF0Y2hbMV0uc2xpY2UoIDAsIDMgKSA9PT0gXCJudGhcIiApIHtcblx0XHRcdFx0Ly8gbnRoLSogcmVxdWlyZXMgYXJndW1lbnRcblx0XHRcdFx0aWYgKCAhbWF0Y2hbM10gKSB7XG5cdFx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFswXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gbnVtZXJpYyB4IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxEXG5cdFx0XHRcdC8vIHJlbWVtYmVyIHRoYXQgZmFsc2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzFcblx0XHRcdFx0bWF0Y2hbNF0gPSArKCBtYXRjaFs0XSA/IG1hdGNoWzVdICsgKG1hdGNoWzZdIHx8IDEpIDogMiAqICggbWF0Y2hbM10gPT09IFwiZXZlblwiIHx8IG1hdGNoWzNdID09PSBcIm9kZFwiICkgKTtcblx0XHRcdFx0bWF0Y2hbNV0gPSArKCAoIG1hdGNoWzddICsgbWF0Y2hbOF0gKSB8fCBtYXRjaFszXSA9PT0gXCJvZGRcIiApO1xuXG5cdFx0XHQvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWzNdICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaDtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0dmFyIGV4Y2Vzcyxcblx0XHRcdFx0dW5xdW90ZWQgPSAhbWF0Y2hbNl0gJiYgbWF0Y2hbMl07XG5cblx0XHRcdGlmICggbWF0Y2hFeHByW1wiQ0hJTERcIl0udGVzdCggbWF0Y2hbMF0gKSApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFjY2VwdCBxdW90ZWQgYXJndW1lbnRzIGFzLWlzXG5cdFx0XHRpZiAoIG1hdGNoWzNdICkge1xuXHRcdFx0XHRtYXRjaFsyXSA9IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8IFwiXCI7XG5cblx0XHRcdC8vIFN0cmlwIGV4Y2VzcyBjaGFyYWN0ZXJzIGZyb20gdW5xdW90ZWQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCB1bnF1b3RlZCAmJiBycHNldWRvLnRlc3QoIHVucXVvdGVkICkgJiZcblx0XHRcdFx0Ly8gR2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSlcblx0XHRcdFx0KGV4Y2VzcyA9IHRva2VuaXplKCB1bnF1b3RlZCwgdHJ1ZSApKSAmJlxuXHRcdFx0XHQvLyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNsb3NpbmcgcGFyZW50aGVzaXNcblx0XHRcdFx0KGV4Y2VzcyA9IHVucXVvdGVkLmluZGV4T2YoIFwiKVwiLCB1bnF1b3RlZC5sZW5ndGggLSBleGNlc3MgKSAtIHVucXVvdGVkLmxlbmd0aCkgKSB7XG5cblx0XHRcdFx0Ly8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXhcblx0XHRcdFx0bWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHRcdG1hdGNoWzJdID0gdW5xdW90ZWQuc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXR1cm4gb25seSBjYXB0dXJlcyBuZWVkZWQgYnkgdGhlIHBzZXVkbyBmaWx0ZXIgbWV0aG9kICh0eXBlIGFuZCBhcmd1bWVudClcblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgMyApO1xuXHRcdH1cblx0fSxcblxuXHRmaWx0ZXI6IHtcblxuXHRcdFwiVEFHXCI6IGZ1bmN0aW9uKCBub2RlTmFtZVNlbGVjdG9yICkge1xuXHRcdFx0dmFyIG5vZGVOYW1lID0gbm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gXCIqXCIgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7IH0gOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5vZGVOYW1lO1xuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNMQVNTXCI6IGZ1bmN0aW9uKCBjbGFzc05hbWUgKSB7XG5cdFx0XHR2YXIgcGF0dGVybiA9IGNsYXNzQ2FjaGVbIGNsYXNzTmFtZSArIFwiIFwiIF07XG5cblx0XHRcdHJldHVybiBwYXR0ZXJuIHx8XG5cdFx0XHRcdChwYXR0ZXJuID0gbmV3IFJlZ0V4cCggXCIoXnxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIGNsYXNzTmFtZSArIFwiKFwiICsgd2hpdGVzcGFjZSArIFwifCQpXCIgKSkgJiZcblx0XHRcdFx0Y2xhc3NDYWNoZSggY2xhc3NOYW1lLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGF0dGVybi50ZXN0KCB0eXBlb2YgZWxlbS5jbGFzc05hbWUgPT09IFwic3RyaW5nXCIgJiYgZWxlbS5jbGFzc05hbWUgfHwgdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9PSBcInVuZGVmaW5lZFwiICYmIGVsZW0uZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgfHwgXCJcIiApO1xuXHRcdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBuYW1lLCBvcGVyYXRvciwgY2hlY2sgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciByZXN1bHQgPSBTaXp6bGUuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0XHRcdGlmICggcmVzdWx0ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIiE9XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAhb3BlcmF0b3IgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXN1bHQgKz0gXCJcIjtcblxuXHRcdFx0XHRyZXR1cm4gb3BlcmF0b3IgPT09IFwiPVwiID8gcmVzdWx0ID09PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiIT1cIiA/IHJlc3VsdCAhPT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIl49XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA9PT0gMCA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiKj1cIiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID4gLTEgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiQ9XCIgPyBjaGVjayAmJiByZXN1bHQuc2xpY2UoIC1jaGVjay5sZW5ndGggKSA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIn49XCIgPyAoIFwiIFwiICsgcmVzdWx0LnJlcGxhY2UoIHJ3aGl0ZXNwYWNlLCBcIiBcIiApICsgXCIgXCIgKS5pbmRleE9mKCBjaGVjayApID4gLTEgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcInw9XCIgPyByZXN1bHQgPT09IGNoZWNrIHx8IHJlc3VsdC5zbGljZSggMCwgY2hlY2subGVuZ3RoICsgMSApID09PSBjaGVjayArIFwiLVwiIDpcblx0XHRcdFx0XHRmYWxzZTtcblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiQ0hJTERcIjogZnVuY3Rpb24oIHR5cGUsIHdoYXQsIGFyZ3VtZW50LCBmaXJzdCwgbGFzdCApIHtcblx0XHRcdHZhciBzaW1wbGUgPSB0eXBlLnNsaWNlKCAwLCAzICkgIT09IFwibnRoXCIsXG5cdFx0XHRcdGZvcndhcmQgPSB0eXBlLnNsaWNlKCAtNCApICE9PSBcImxhc3RcIixcblx0XHRcdFx0b2ZUeXBlID0gd2hhdCA9PT0gXCJvZi10eXBlXCI7XG5cblx0XHRcdHJldHVybiBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwID9cblxuXHRcdFx0XHQvLyBTaG9ydGN1dCBmb3IgOm50aC0qKG4pXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiAhIWVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdFx0fSA6XG5cblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgY2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLCBub2RlLCBub2RlSW5kZXgsIHN0YXJ0LFxuXHRcdFx0XHRcdFx0ZGlyID0gc2ltcGxlICE9PSBmb3J3YXJkID8gXCJuZXh0U2libGluZ1wiIDogXCJwcmV2aW91c1NpYmxpbmdcIixcblx0XHRcdFx0XHRcdHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZSxcblx0XHRcdFx0XHRcdG5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0XHRcdFx0dXNlQ2FjaGUgPSAheG1sICYmICFvZlR5cGUsXG5cdFx0XHRcdFx0XHRkaWZmID0gZmFsc2U7XG5cblx0XHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gOihmaXJzdHxsYXN0fG9ubHkpLShjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHRcdFx0aWYgKCBzaW1wbGUgKSB7XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggZGlyICkge1xuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKG5vZGUgPSBub2RlWyBkaXIgXSkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG9mVHlwZSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvLyBSZXZlcnNlIGRpcmVjdGlvbiBmb3IgOm9ubHktKiAoaWYgd2UgaGF2ZW4ndCB5ZXQgZG9uZSBzbylcblx0XHRcdFx0XHRcdFx0XHRzdGFydCA9IGRpciA9IHR5cGUgPT09IFwib25seVwiICYmICFzdGFydCAmJiBcIm5leHRTaWJsaW5nXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHN0YXJ0ID0gWyBmb3J3YXJkID8gcGFyZW50LmZpcnN0Q2hpbGQgOiBwYXJlbnQubGFzdENoaWxkIF07XG5cblx0XHRcdFx0XHRcdC8vIG5vbi14bWwgOm50aC1jaGlsZCguLi4pIHN0b3JlcyBjYWNoZSBkYXRhIG9uIGBwYXJlbnRgXG5cdFx0XHRcdFx0XHRpZiAoIGZvcndhcmQgJiYgdXNlQ2FjaGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU2VlayBgZWxlbWAgZnJvbSBhIHByZXZpb3VzbHktY2FjaGVkIGluZGV4XG5cblx0XHRcdFx0XHRcdFx0Ly8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheVxuXHRcdFx0XHRcdFx0XHRub2RlID0gcGFyZW50O1xuXHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHQob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdGNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4ICYmIGNhY2hlWyAyIF07XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBub2RlSW5kZXggJiYgcGFyZW50LmNoaWxkTm9kZXNbIG5vZGVJbmRleCBdO1xuXG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBGYWxsYmFjayB0byBzZWVraW5nIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdChkaWZmID0gbm9kZUluZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gV2hlbiBmb3VuZCwgY2FjaGUgaW5kZXhlcyBvbiBgcGFyZW50YCBhbmQgYnJlYWtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgJiYgKytkaWZmICYmIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBub2RlSW5kZXgsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBVc2UgcHJldmlvdXNseS1jYWNoZWQgZWxlbWVudCBpbmRleCBpZiBhdmFpbGFibGVcblx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0XHQvLyAuLi5pbiBhIGd6aXAtZnJpZW5kbHkgd2F5XG5cdFx0XHRcdFx0XHRcdFx0bm9kZSA9IGVsZW07XG5cdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0Y2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4O1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8geG1sIDpudGgtY2hpbGQoLi4uKVxuXHRcdFx0XHRcdFx0XHQvLyBvciA6bnRoLWxhc3QtY2hpbGQoLi4uKSBvciA6bnRoKC1sYXN0KT8tb2YtdHlwZSguLi4pXG5cdFx0XHRcdFx0XHRcdGlmICggZGlmZiA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gVXNlIHRoZSBzYW1lIGxvb3AgYXMgYWJvdmUgdG8gc2VlayBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoIChub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KGRpZmYgPSBub2RlSW5kZXggPSAwKSB8fCBzdGFydC5wb3AoKSkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmICggKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVUeXBlID09PSAxICkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0KytkaWZmICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIENhY2hlIHRoZSBpbmRleCBvZiBlYWNoIGVuY291bnRlcmVkIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgdGhlIG9mZnNldCwgdGhlbiBjaGVjayBhZ2FpbnN0IGN5Y2xlIHNpemVcblx0XHRcdFx0XHRcdGRpZmYgLT0gbGFzdDtcblx0XHRcdFx0XHRcdHJldHVybiBkaWZmID09PSBmaXJzdCB8fCAoIGRpZmYgJSBmaXJzdCA9PT0gMCAmJiBkaWZmIC8gZmlyc3QgPj0gMCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIHBzZXVkbywgYXJndW1lbnQgKSB7XG5cdFx0XHQvLyBwc2V1ZG8tY2xhc3MgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmVcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXNcblx0XHRcdC8vIFByaW9yaXRpemUgYnkgY2FzZSBzZW5zaXRpdml0eSBpbiBjYXNlIGN1c3RvbSBwc2V1ZG9zIGFyZSBhZGRlZCB3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzXG5cdFx0XHQvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRlcnMgaW5oZXJpdHMgZnJvbSBwc2V1ZG9zXG5cdFx0XHR2YXIgYXJncyxcblx0XHRcdFx0Zm4gPSBFeHByLnBzZXVkb3NbIHBzZXVkbyBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiICsgcHNldWRvICk7XG5cblx0XHRcdC8vIFRoZSB1c2VyIG1heSB1c2UgY3JlYXRlUHNldWRvIHRvIGluZGljYXRlIHRoYXRcblx0XHRcdC8vIGFyZ3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9uXG5cdFx0XHQvLyBqdXN0IGFzIFNpenpsZSBkb2VzXG5cdFx0XHRpZiAoIGZuWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHJldHVybiBmbiggYXJndW1lbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQnV0IG1haW50YWluIHN1cHBvcnQgZm9yIG9sZCBzaWduYXR1cmVzXG5cdFx0XHRpZiAoIGZuLmxlbmd0aCA+IDEgKSB7XG5cdFx0XHRcdGFyZ3MgPSBbIHBzZXVkbywgcHNldWRvLCBcIlwiLCBhcmd1bWVudCBdO1xuXHRcdFx0XHRyZXR1cm4gRXhwci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID9cblx0XHRcdFx0XHRtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHRcdFx0XHR2YXIgaWR4LFxuXHRcdFx0XHRcdFx0XHRtYXRjaGVkID0gZm4oIHNlZWQsIGFyZ3VtZW50ICksXG5cdFx0XHRcdFx0XHRcdGkgPSBtYXRjaGVkLmxlbmd0aDtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZHggPSBpbmRleE9mKCBzZWVkLCBtYXRjaGVkW2ldICk7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGlkeCBdID0gISggbWF0Y2hlc1sgaWR4IF0gPSBtYXRjaGVkW2ldICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSkgOlxuXHRcdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZuO1xuXHRcdH1cblx0fSxcblxuXHRwc2V1ZG9zOiB7XG5cdFx0Ly8gUG90ZW50aWFsbHkgY29tcGxleCBwc2V1ZG9zXG5cdFx0XCJub3RcIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRcdC8vIFRyaW0gdGhlIHNlbGVjdG9yIHBhc3NlZCB0byBjb21waWxlXG5cdFx0XHQvLyB0byBhdm9pZCB0cmVhdGluZyBsZWFkaW5nIGFuZCB0cmFpbGluZ1xuXHRcdFx0Ly8gc3BhY2VzIGFzIGNvbWJpbmF0b3JzXG5cdFx0XHR2YXIgaW5wdXQgPSBbXSxcblx0XHRcdFx0cmVzdWx0cyA9IFtdLFxuXHRcdFx0XHRtYXRjaGVyID0gY29tcGlsZSggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApICk7XG5cblx0XHRcdHJldHVybiBtYXRjaGVyWyBleHBhbmRvIF0gP1xuXHRcdFx0XHRtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMsIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgZWxlbSxcblx0XHRcdFx0XHRcdHVubWF0Y2hlZCA9IG1hdGNoZXIoIHNlZWQsIG51bGwsIHhtbCwgW10gKSxcblx0XHRcdFx0XHRcdGkgPSBzZWVkLmxlbmd0aDtcblxuXHRcdFx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIHVubWF0Y2hlZCBieSBgbWF0Y2hlcmBcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkge1xuXHRcdFx0XHRcdFx0XHRzZWVkW2ldID0gIShtYXRjaGVzW2ldID0gZWxlbSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0aW5wdXRbMF0gPSBlbGVtO1xuXHRcdFx0XHRcdG1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJlc3VsdHMgKTtcblx0XHRcdFx0XHQvLyBEb24ndCBrZWVwIHRoZSBlbGVtZW50IChpc3N1ZSAjMjk5KVxuXHRcdFx0XHRcdGlucHV0WzBdID0gbnVsbDtcblx0XHRcdFx0XHRyZXR1cm4gIXJlc3VsdHMucG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0fSksXG5cblx0XHRcImhhc1wiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gU2l6emxlKCBzZWxlY3RvciwgZWxlbSApLmxlbmd0aCA+IDA7XG5cdFx0XHR9O1xuXHRcdH0pLFxuXG5cdFx0XCJjb250YWluc1wiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gKCBlbGVtLnRleHRDb250ZW50IHx8IGdldFRleHQoIGVsZW0gKSApLmluZGV4T2YoIHRleHQgKSA+IC0xO1xuXHRcdFx0fTtcblx0XHR9KSxcblxuXHRcdC8vIFwiV2hldGhlciBhbiBlbGVtZW50IGlzIHJlcHJlc2VudGVkIGJ5IGEgOmxhbmcoKSBzZWxlY3RvclxuXHRcdC8vIGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlXG5cdFx0Ly8gYmVpbmcgZXF1YWwgdG8gdGhlIGlkZW50aWZpZXIgQyxcblx0XHQvLyBvciBiZWdpbm5pbmcgd2l0aCB0aGUgaWRlbnRpZmllciBDIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IFwiLVwiLlxuXHRcdC8vIFRoZSBtYXRjaGluZyBvZiBDIGFnYWluc3QgdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZSBpcyBwZXJmb3JtZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LlxuXHRcdC8vIFRoZSBpZGVudGlmaWVyIEMgZG9lcyBub3QgaGF2ZSB0byBiZSBhIHZhbGlkIGxhbmd1YWdlIG5hbWUuXCJcblx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2xhbmctcHNldWRvXG5cdFx0XCJsYW5nXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGxhbmcgKSB7XG5cdFx0XHQvLyBsYW5nIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWVyXG5cdFx0XHRpZiAoICFyaWRlbnRpZmllci50ZXN0KGxhbmcgfHwgXCJcIikgKSB7XG5cdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBsYW5nOiBcIiArIGxhbmcgKTtcblx0XHRcdH1cblx0XHRcdGxhbmcgPSBsYW5nLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIGVsZW1MYW5nO1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0aWYgKCAoZWxlbUxhbmcgPSBkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRcdFx0XHRlbGVtLmxhbmcgOlxuXHRcdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoXCJ4bWw6bGFuZ1wiKSB8fCBlbGVtLmdldEF0dHJpYnV0ZShcImxhbmdcIikpICkge1xuXG5cdFx0XHRcdFx0XHRlbGVtTGFuZyA9IGVsZW1MYW5nLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbUxhbmcgPT09IGxhbmcgfHwgZWxlbUxhbmcuaW5kZXhPZiggbGFuZyArIFwiLVwiICkgPT09IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IHdoaWxlICggKGVsZW0gPSBlbGVtLnBhcmVudE5vZGUpICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fTtcblx0XHR9KSxcblxuXHRcdC8vIE1pc2NlbGxhbmVvdXNcblx0XHRcInRhcmdldFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHRcdFx0cmV0dXJuIGhhc2ggJiYgaGFzaC5zbGljZSggMSApID09PSBlbGVtLmlkO1xuXHRcdH0sXG5cblx0XHRcInJvb3RcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jRWxlbTtcblx0XHR9LFxuXG5cdFx0XCJmb2N1c1wiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmICghZG9jdW1lbnQuaGFzRm9jdXMgfHwgZG9jdW1lbnQuaGFzRm9jdXMoKSkgJiYgISEoZWxlbS50eXBlIHx8IGVsZW0uaHJlZiB8fCB+ZWxlbS50YWJJbmRleCk7XG5cdFx0fSxcblxuXHRcdC8vIEJvb2xlYW4gcHJvcGVydGllc1xuXHRcdFwiZW5hYmxlZFwiOiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggZmFsc2UgKSxcblx0XHRcImRpc2FibGVkXCI6IGNyZWF0ZURpc2FibGVkUHNldWRvKCB0cnVlICksXG5cblx0XHRcImNoZWNrZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHQvLyBJbiBDU1MzLCA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIGJvdGggY2hlY2tlZCBhbmQgc2VsZWN0ZWQgZWxlbWVudHNcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXG5cdFx0XHR2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gKG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgISFlbGVtLmNoZWNrZWQpIHx8IChub2RlTmFtZSA9PT0gXCJvcHRpb25cIiAmJiAhIWVsZW0uc2VsZWN0ZWQpO1xuXHRcdH0sXG5cblx0XHRcInNlbGVjdGVkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0Ly8gQWNjZXNzaW5nIHRoaXMgcHJvcGVydHkgbWFrZXMgc2VsZWN0ZWQtYnktZGVmYXVsdFxuXHRcdFx0Ly8gb3B0aW9ucyBpbiBTYWZhcmkgd29yayBwcm9wZXJseVxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gQ29udGVudHNcblx0XHRcImVtcHR5XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNlbXB0eS1wc2V1ZG9cblx0XHRcdC8vIDplbXB0eSBpcyBuZWdhdGVkIGJ5IGVsZW1lbnQgKDEpIG9yIGNvbnRlbnQgbm9kZXMgKHRleHQ6IDM7IGNkYXRhOiA0OyBlbnRpdHkgcmVmOiA1KSxcblx0XHRcdC8vICAgYnV0IG5vdCBieSBvdGhlcnMgKGNvbW1lbnQ6IDg7IHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb246IDc7IGV0Yy4pXG5cdFx0XHQvLyBub2RlVHlwZSA8IDYgd29ya3MgYmVjYXVzZSBhdHRyaWJ1dGVzICgyKSBkbyBub3QgYXBwZWFyIGFzIGNoaWxkcmVuXG5cdFx0XHRmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlIDwgNiApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHRcInBhcmVudFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAhRXhwci5wc2V1ZG9zW1wiZW1wdHlcIl0oIGVsZW0gKTtcblx0XHR9LFxuXG5cdFx0Ly8gRWxlbWVudC9pbnB1dCB0eXBlc1xuXHRcdFwiaGVhZGVyXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJoZWFkZXIudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRcImlucHV0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJpbnB1dHMudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRcImJ1dHRvblwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIG5hbWUgPT09IFwiaW5wdXRcIiAmJiBlbGVtLnR5cGUgPT09IFwiYnV0dG9uXCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIjtcblx0XHR9LFxuXG5cdFx0XCJ0ZXh0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIGF0dHI7XG5cdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCIgJiZcblx0XHRcdFx0ZWxlbS50eXBlID09PSBcInRleHRcIiAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFPDhcblx0XHRcdFx0Ly8gTmV3IEhUTUw1IGF0dHJpYnV0ZSB2YWx1ZXMgKGUuZy4sIFwic2VhcmNoXCIpIGFwcGVhciB3aXRoIGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCJcblx0XHRcdFx0KCAoYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKFwidHlwZVwiKSkgPT0gbnVsbCB8fCBhdHRyLnRvTG93ZXJDYXNlKCkgPT09IFwidGV4dFwiICk7XG5cdFx0fSxcblxuXHRcdC8vIFBvc2l0aW9uLWluLWNvbGxlY3Rpb25cblx0XHRcImZpcnN0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gWyAwIF07XG5cdFx0fSksXG5cblx0XHRcImxhc3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gWyBsZW5ndGggLSAxIF07XG5cdFx0fSksXG5cblx0XHRcImVxXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHJldHVybiBbIGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQgXTtcblx0XHR9KSxcblxuXHRcdFwiZXZlblwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9KSxcblxuXHRcdFwib2RkXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAxO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0pLFxuXG5cdFx0XCJsdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/XG5cdFx0XHRcdGFyZ3VtZW50ICsgbGVuZ3RoIDpcblx0XHRcdFx0YXJndW1lbnQgPiBsZW5ndGggP1xuXHRcdFx0XHRcdGxlbmd0aCA6XG5cdFx0XHRcdFx0YXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7IC0taSA+PSAwOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSksXG5cblx0XHRcImd0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpID0gYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDtcblx0XHRcdGZvciAoIDsgKytpIDwgbGVuZ3RoOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSlcblx0fVxufTtcblxuRXhwci5wc2V1ZG9zW1wibnRoXCJdID0gRXhwci5wc2V1ZG9zW1wiZXFcIl07XG5cbi8vIEFkZCBidXR0b24vaW5wdXQgdHlwZSBwc2V1ZG9zXG5mb3IgKCBpIGluIHsgcmFkaW86IHRydWUsIGNoZWNrYm94OiB0cnVlLCBmaWxlOiB0cnVlLCBwYXNzd29yZDogdHJ1ZSwgaW1hZ2U6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVJbnB1dFBzZXVkbyggaSApO1xufVxuZm9yICggaSBpbiB7IHN1Ym1pdDogdHJ1ZSwgcmVzZXQ6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVCdXR0b25Qc2V1ZG8oIGkgKTtcbn1cblxuLy8gRWFzeSBBUEkgZm9yIGNyZWF0aW5nIG5ldyBzZXRGaWx0ZXJzXG5mdW5jdGlvbiBzZXRGaWx0ZXJzKCkge31cbnNldEZpbHRlcnMucHJvdG90eXBlID0gRXhwci5maWx0ZXJzID0gRXhwci5wc2V1ZG9zO1xuRXhwci5zZXRGaWx0ZXJzID0gbmV3IHNldEZpbHRlcnMoKTtcblxudG9rZW5pemUgPSBTaXp6bGUudG9rZW5pemUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIHBhcnNlT25seSApIHtcblx0dmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsXG5cdFx0c29GYXIsIGdyb3VwcywgcHJlRmlsdGVycyxcblx0XHRjYWNoZWQgPSB0b2tlbkNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCBjYWNoZWQgKSB7XG5cdFx0cmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTtcblx0fVxuXG5cdHNvRmFyID0gc2VsZWN0b3I7XG5cdGdyb3VwcyA9IFtdO1xuXHRwcmVGaWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7XG5cblx0d2hpbGUgKCBzb0ZhciApIHtcblxuXHRcdC8vIENvbW1hIGFuZCBmaXJzdCBydW5cblx0XHRpZiAoICFtYXRjaGVkIHx8IChtYXRjaCA9IHJjb21tYS5leGVjKCBzb0ZhciApKSApIHtcblx0XHRcdGlmICggbWF0Y2ggKSB7XG5cdFx0XHRcdC8vIERvbid0IGNvbnN1bWUgdHJhaWxpbmcgY29tbWFzIGFzIHZhbGlkXG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoWzBdLmxlbmd0aCApIHx8IHNvRmFyO1xuXHRcdFx0fVxuXHRcdFx0Z3JvdXBzLnB1c2goICh0b2tlbnMgPSBbXSkgKTtcblx0XHR9XG5cblx0XHRtYXRjaGVkID0gZmFsc2U7XG5cblx0XHQvLyBDb21iaW5hdG9yc1xuXHRcdGlmICggKG1hdGNoID0gcmNvbWJpbmF0b3JzLmV4ZWMoIHNvRmFyICkpICkge1xuXHRcdFx0bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7XG5cdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXHRcdFx0XHQvLyBDYXN0IGRlc2NlbmRhbnQgY29tYmluYXRvcnMgdG8gc3BhY2Vcblx0XHRcdFx0dHlwZTogbWF0Y2hbMF0ucmVwbGFjZSggcnRyaW0sIFwiIFwiIClcblx0XHRcdH0pO1xuXHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHR9XG5cblx0XHQvLyBGaWx0ZXJzXG5cdFx0Zm9yICggdHlwZSBpbiBFeHByLmZpbHRlciApIHtcblx0XHRcdGlmICggKG1hdGNoID0gbWF0Y2hFeHByWyB0eXBlIF0uZXhlYyggc29GYXIgKSkgJiYgKCFwcmVGaWx0ZXJzWyB0eXBlIF0gfHxcblx0XHRcdFx0KG1hdGNoID0gcHJlRmlsdGVyc1sgdHlwZSBdKCBtYXRjaCApKSkgKSB7XG5cdFx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cdFx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0XHRtYXRjaGVzOiBtYXRjaFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoICFtYXRjaGVkICkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGludmFsaWQgZXhjZXNzXG5cdC8vIGlmIHdlJ3JlIGp1c3QgcGFyc2luZ1xuXHQvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJldHVybiB0b2tlbnNcblx0cmV0dXJuIHBhcnNlT25seSA/XG5cdFx0c29GYXIubGVuZ3RoIDpcblx0XHRzb0ZhciA/XG5cdFx0XHRTaXp6bGUuZXJyb3IoIHNlbGVjdG9yICkgOlxuXHRcdFx0Ly8gQ2FjaGUgdGhlIHRva2Vuc1xuXHRcdFx0dG9rZW5DYWNoZSggc2VsZWN0b3IsIGdyb3VwcyApLnNsaWNlKCAwICk7XG59O1xuXG5mdW5jdGlvbiB0b1NlbGVjdG9yKCB0b2tlbnMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdHNlbGVjdG9yID0gXCJcIjtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0c2VsZWN0b3IgKz0gdG9rZW5zW2ldLnZhbHVlO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rvcjtcbn1cblxuZnVuY3Rpb24gYWRkQ29tYmluYXRvciggbWF0Y2hlciwgY29tYmluYXRvciwgYmFzZSApIHtcblx0dmFyIGRpciA9IGNvbWJpbmF0b3IuZGlyLFxuXHRcdHNraXAgPSBjb21iaW5hdG9yLm5leHQsXG5cdFx0a2V5ID0gc2tpcCB8fCBkaXIsXG5cdFx0Y2hlY2tOb25FbGVtZW50cyA9IGJhc2UgJiYga2V5ID09PSBcInBhcmVudE5vZGVcIixcblx0XHRkb25lTmFtZSA9IGRvbmUrKztcblxuXHRyZXR1cm4gY29tYmluYXRvci5maXJzdCA/XG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdHJldHVybiBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gOlxuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBhbGwgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRzXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciBvbGRDYWNoZSwgdW5pcXVlQ2FjaGUsIG91dGVyQ2FjaGUsXG5cdFx0XHRcdG5ld0NhY2hlID0gWyBkaXJydW5zLCBkb25lTmFtZSBdO1xuXG5cdFx0XHQvLyBXZSBjYW4ndCBzZXQgYXJiaXRyYXJ5IGRhdGEgb24gWE1MIG5vZGVzLCBzbyB0aGV5IGRvbid0IGJlbmVmaXQgZnJvbSBjb21iaW5hdG9yIGNhY2hpbmdcblx0XHRcdGlmICggeG1sICkge1xuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IGVsZW1bIGV4cGFuZG8gXSB8fCAoZWxlbVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdIHx8IChvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdGlmICggc2tpcCAmJiBza2lwID09PSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdGVsZW0gPSBlbGVtWyBkaXIgXSB8fCBlbGVtO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICggKG9sZENhY2hlID0gdW5pcXVlQ2FjaGVbIGtleSBdKSAmJlxuXHRcdFx0XHRcdFx0XHRvbGRDYWNoZVsgMCBdID09PSBkaXJydW5zICYmIG9sZENhY2hlWyAxIF0gPT09IGRvbmVOYW1lICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFzc2lnbiB0byBuZXdDYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdHJldHVybiAobmV3Q2FjaGVbIDIgXSA9IG9sZENhY2hlWyAyIF0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gUmV1c2UgbmV3Y2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsga2V5IF0gPSBuZXdDYWNoZTtcblxuXHRcdFx0XHRcdFx0XHQvLyBBIG1hdGNoIG1lYW5zIHdlJ3JlIGRvbmU7IGEgZmFpbCBtZWFucyB3ZSBoYXZlIHRvIGtlZXAgY2hlY2tpbmdcblx0XHRcdFx0XHRcdFx0aWYgKCAobmV3Q2FjaGVbIDIgXSA9IG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG59XG5cbmZ1bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApIHtcblx0cmV0dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDEgP1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgaSA9IG1hdGNoZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoICFtYXRjaGVyc1tpXSggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IDpcblx0XHRtYXRjaGVyc1swXTtcbn1cblxuZnVuY3Rpb24gbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gY29udGV4dHMubGVuZ3RoO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0c1tpXSwgcmVzdWx0cyApO1xuXHR9XG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRlciwgY29udGV4dCwgeG1sICkge1xuXHR2YXIgZWxlbSxcblx0XHRuZXdVbm1hdGNoZWQgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsZW4gPSB1bm1hdGNoZWQubGVuZ3RoLFxuXHRcdG1hcHBlZCA9IG1hcCAhPSBudWxsO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkge1xuXHRcdFx0aWYgKCAhZmlsdGVyIHx8IGZpbHRlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdG5ld1VubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdGlmICggbWFwcGVkICkge1xuXHRcdFx0XHRcdG1hcC5wdXNoKCBpICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbmV3VW5tYXRjaGVkO1xufVxuXG5mdW5jdGlvbiBzZXRNYXRjaGVyKCBwcmVGaWx0ZXIsIHNlbGVjdG9yLCBtYXRjaGVyLCBwb3N0RmlsdGVyLCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKSB7XG5cdGlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZpbHRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaWx0ZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmlsdGVyICk7XG5cdH1cblx0aWYgKCBwb3N0RmluZGVyICYmICFwb3N0RmluZGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbmRlciA9IHNldE1hdGNoZXIoIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApO1xuXHR9XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIHJlc3VsdHMsIGNvbnRleHQsIHhtbCApIHtcblx0XHR2YXIgdGVtcCwgaSwgZWxlbSxcblx0XHRcdHByZU1hcCA9IFtdLFxuXHRcdFx0cG9zdE1hcCA9IFtdLFxuXHRcdFx0cHJlZXhpc3RpbmcgPSByZXN1bHRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gR2V0IGluaXRpYWwgZWxlbWVudHMgZnJvbSBzZWVkIG9yIGNvbnRleHRcblx0XHRcdGVsZW1zID0gc2VlZCB8fCBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciB8fCBcIipcIiwgY29udGV4dC5ub2RlVHlwZSA/IFsgY29udGV4dCBdIDogY29udGV4dCwgW10gKSxcblxuXHRcdFx0Ly8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uXG5cdFx0XHRtYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID9cblx0XHRcdFx0Y29uZGVuc2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRlbGVtcyxcblxuXHRcdFx0bWF0Y2hlck91dCA9IG1hdGNoZXIgP1xuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlciBvciBwcmVleGlzdGluZyByZXN1bHRzLFxuXHRcdFx0XHRwb3N0RmluZGVyIHx8ICggc2VlZCA/IHByZUZpbHRlciA6IHByZWV4aXN0aW5nIHx8IHBvc3RGaWx0ZXIgKSA/XG5cblx0XHRcdFx0XHQvLyAuLi5pbnRlcm1lZGlhdGUgcHJvY2Vzc2luZyBpcyBuZWNlc3Nhcnlcblx0XHRcdFx0XHRbXSA6XG5cblx0XHRcdFx0XHQvLyAuLi5vdGhlcndpc2UgdXNlIHJlc3VsdHMgZGlyZWN0bHlcblx0XHRcdFx0XHRyZXN1bHRzIDpcblx0XHRcdFx0bWF0Y2hlckluO1xuXG5cdFx0Ly8gRmluZCBwcmltYXJ5IG1hdGNoZXNcblx0XHRpZiAoIG1hdGNoZXIgKSB7XG5cdFx0XHRtYXRjaGVyKCBtYXRjaGVySW4sIG1hdGNoZXJPdXQsIGNvbnRleHQsIHhtbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHBvc3RGaWx0ZXJcblx0XHRpZiAoIHBvc3RGaWx0ZXIgKSB7XG5cdFx0XHR0ZW1wID0gY29uZGVuc2UoIG1hdGNoZXJPdXQsIHBvc3RNYXAgKTtcblx0XHRcdHBvc3RGaWx0ZXIoIHRlbXAsIFtdLCBjb250ZXh0LCB4bWwgKTtcblxuXHRcdFx0Ly8gVW4tbWF0Y2ggZmFpbGluZyBlbGVtZW50cyBieSBtb3ZpbmcgdGhlbSBiYWNrIHRvIG1hdGNoZXJJblxuXHRcdFx0aSA9IHRlbXAubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggKGVsZW0gPSB0ZW1wW2ldKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyT3V0WyBwb3N0TWFwW2ldIF0gPSAhKG1hdGNoZXJJblsgcG9zdE1hcFtpXSBdID0gZWxlbSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgfHwgcHJlRmlsdGVyICkge1xuXHRcdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cdFx0XHRcdFx0Ly8gR2V0IHRoZSBmaW5hbCBtYXRjaGVyT3V0IGJ5IGNvbmRlbnNpbmcgdGhpcyBpbnRlcm1lZGlhdGUgaW50byBwb3N0RmluZGVyIGNvbnRleHRzXG5cdFx0XHRcdFx0dGVtcCA9IFtdO1xuXHRcdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKGVsZW0gPSBtYXRjaGVyT3V0W2ldKSApIHtcblx0XHRcdFx0XHRcdFx0Ly8gUmVzdG9yZSBtYXRjaGVySW4gc2luY2UgZWxlbSBpcyBub3QgeWV0IGEgZmluYWwgbWF0Y2hcblx0XHRcdFx0XHRcdFx0dGVtcC5wdXNoKCAobWF0Y2hlckluW2ldID0gZWxlbSkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgKG1hdGNoZXJPdXQgPSBbXSksIHRlbXAsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTW92ZSBtYXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJvbml6ZWRcblx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRpZiAoIChlbGVtID0gbWF0Y2hlck91dFtpXSkgJiZcblx0XHRcdFx0XHRcdCh0ZW1wID0gcG9zdEZpbmRlciA/IGluZGV4T2YoIHNlZWQsIGVsZW0gKSA6IHByZU1hcFtpXSkgPiAtMSApIHtcblxuXHRcdFx0XHRcdFx0c2VlZFt0ZW1wXSA9ICEocmVzdWx0c1t0ZW1wXSA9IGVsZW0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gQWRkIGVsZW1lbnRzIHRvIHJlc3VsdHMsIHRocm91Z2ggcG9zdEZpbmRlciBpZiBkZWZpbmVkXG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXJPdXQgPSBjb25kZW5zZShcblx0XHRcdFx0bWF0Y2hlck91dCA9PT0gcmVzdWx0cyA/XG5cdFx0XHRcdFx0bWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVyT3V0Lmxlbmd0aCApIDpcblx0XHRcdFx0XHRtYXRjaGVyT3V0XG5cdFx0XHQpO1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXHRcdFx0XHRwb3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zICkge1xuXHR2YXIgY2hlY2tDb250ZXh0LCBtYXRjaGVyLCBqLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0bGVhZGluZ1JlbGF0aXZlID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWzBdLnR5cGUgXSxcblx0XHRpbXBsaWNpdFJlbGF0aXZlID0gbGVhZGluZ1JlbGF0aXZlIHx8IEV4cHIucmVsYXRpdmVbXCIgXCJdLFxuXHRcdGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCxcblxuXHRcdC8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRoYXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpXG5cdFx0bWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0O1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaEFueUNvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBpbmRleE9mKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xO1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaGVycyA9IFsgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciByZXQgPSAoICFsZWFkaW5nUmVsYXRpdmUgJiYgKCB4bWwgfHwgY29udGV4dCAhPT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKFxuXHRcdFx0XHQoY2hlY2tDb250ZXh0ID0gY29udGV4dCkubm9kZVR5cGUgP1xuXHRcdFx0XHRcdG1hdGNoQ29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRcdG1hdGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgKTtcblx0XHRcdC8vIEF2b2lkIGhhbmdpbmcgb250byBlbGVtZW50IChpc3N1ZSAjMjk5KVxuXHRcdFx0Y2hlY2tDb250ZXh0ID0gbnVsbDtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fSBdO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKG1hdGNoZXIgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbaV0udHlwZSBdKSApIHtcblx0XHRcdG1hdGNoZXJzID0gWyBhZGRDb21iaW5hdG9yKGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyKSBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyID0gRXhwci5maWx0ZXJbIHRva2Vuc1tpXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1tpXS5tYXRjaGVzICk7XG5cblx0XHRcdC8vIFJldHVybiBzcGVjaWFsIHVwb24gc2VlaW5nIGEgcG9zaXRpb25hbCBtYXRjaGVyXG5cdFx0XHRpZiAoIG1hdGNoZXJbIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0Ly8gRmluZCB0aGUgbmV4dCByZWxhdGl2ZSBvcGVyYXRvciAoaWYgYW55KSBmb3IgcHJvcGVyIGhhbmRsaW5nXG5cdFx0XHRcdGogPSArK2k7XG5cdFx0XHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0XHRcdGlmICggRXhwci5yZWxhdGl2ZVsgdG9rZW5zW2pdLnR5cGUgXSApIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc2V0TWF0Y2hlcihcblx0XHRcdFx0XHRpID4gMSAmJiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSxcblx0XHRcdFx0XHRpID4gMSAmJiB0b1NlbGVjdG9yKFxuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlIHByZWNlZGluZyB0b2tlbiB3YXMgYSBkZXNjZW5kYW50IGNvbWJpbmF0b3IsIGluc2VydCBhbiBpbXBsaWNpdCBhbnktZWxlbWVudCBgKmBcblx0XHRcdFx0XHRcdHRva2Vucy5zbGljZSggMCwgaSAtIDEgKS5jb25jYXQoeyB2YWx1ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUgPT09IFwiIFwiID8gXCIqXCIgOiBcIlwiIH0pXG5cdFx0XHRcdFx0KS5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICksXG5cdFx0XHRcdFx0bWF0Y2hlcixcblx0XHRcdFx0XHRpIDwgaiAmJiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zLnNsaWNlKCBpLCBqICkgKSxcblx0XHRcdFx0XHRqIDwgbGVuICYmIG1hdGNoZXJGcm9tVG9rZW5zKCAodG9rZW5zID0gdG9rZW5zLnNsaWNlKCBqICkpICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlcnMucHVzaCggbWF0Y2hlciApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkge1xuXHR2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdGJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdHN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9uKCBzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIG91dGVybW9zdCApIHtcblx0XHRcdHZhciBlbGVtLCBqLCBtYXRjaGVyLFxuXHRcdFx0XHRtYXRjaGVkQ291bnQgPSAwLFxuXHRcdFx0XHRpID0gXCIwXCIsXG5cdFx0XHRcdHVubWF0Y2hlZCA9IHNlZWQgJiYgW10sXG5cdFx0XHRcdHNldE1hdGNoZWQgPSBbXSxcblx0XHRcdFx0Y29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsXG5cdFx0XHRcdC8vIFdlIG11c3QgYWx3YXlzIGhhdmUgZWl0aGVyIHNlZWQgZWxlbWVudHMgb3Igb3V0ZXJtb3N0IGNvbnRleHRcblx0XHRcdFx0ZWxlbXMgPSBzZWVkIHx8IGJ5RWxlbWVudCAmJiBFeHByLmZpbmRbXCJUQUdcIl0oIFwiKlwiLCBvdXRlcm1vc3QgKSxcblx0XHRcdFx0Ly8gVXNlIGludGVnZXIgZGlycnVucyBpZmYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNoZXJcblx0XHRcdFx0ZGlycnVuc1VuaXF1ZSA9IChkaXJydW5zICs9IGNvbnRleHRCYWNrdXAgPT0gbnVsbCA/IDEgOiBNYXRoLnJhbmRvbSgpIHx8IDAuMSksXG5cdFx0XHRcdGxlbiA9IGVsZW1zLmxlbmd0aDtcblxuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ID09PSBkb2N1bWVudCB8fCBjb250ZXh0IHx8IG91dGVybW9zdDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHNcblx0XHRcdC8vIFN1cHBvcnQ6IElFPDksIFNhZmFyaVxuXHRcdFx0Ly8gVG9sZXJhdGUgTm9kZUxpc3QgcHJvcGVydGllcyAoSUU6IFwibGVuZ3RoXCI7IFNhZmFyaTogPG51bWJlcj4pIG1hdGNoaW5nIGVsZW1lbnRzIGJ5IGlkXG5cdFx0XHRmb3IgKCA7IGkgIT09IGxlbiAmJiAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggYnlFbGVtZW50ICYmIGVsZW0gKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0aWYgKCAhY29udGV4dCAmJiBlbGVtLm93bmVyRG9jdW1lbnQgIT09IGRvY3VtZW50ICkge1xuXHRcdFx0XHRcdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0XHRcdFx0XHRcdHhtbCA9ICFkb2N1bWVudElzSFRNTDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0d2hpbGUgKCAobWF0Y2hlciA9IGVsZW1lbnRNYXRjaGVyc1tqKytdKSApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCB8fCBkb2N1bWVudCwgeG1sKSApIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFRyYWNrIHVubWF0Y2hlZCBlbGVtZW50cyBmb3Igc2V0IGZpbHRlcnNcblx0XHRcdFx0aWYgKCBieVNldCApIHtcblx0XHRcdFx0XHQvLyBUaGV5IHdpbGwgaGF2ZSBnb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIG1hdGNoZXJzXG5cdFx0XHRcdFx0aWYgKCAoZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0pICkge1xuXHRcdFx0XHRcdFx0bWF0Y2hlZENvdW50LS07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gTGVuZ3RoZW4gdGhlIGFycmF5IGZvciBldmVyeSBlbGVtZW50LCBtYXRjaGVkIG9yIG5vdFxuXHRcdFx0XHRcdGlmICggc2VlZCApIHtcblx0XHRcdFx0XHRcdHVubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIGBpYCBpcyBub3cgdGhlIGNvdW50IG9mIGVsZW1lbnRzIHZpc2l0ZWQgYWJvdmUsIGFuZCBhZGRpbmcgaXQgdG8gYG1hdGNoZWRDb3VudGBcblx0XHRcdC8vIG1ha2VzIHRoZSBsYXR0ZXIgbm9ubmVnYXRpdmUuXG5cdFx0XHRtYXRjaGVkQ291bnQgKz0gaTtcblxuXHRcdFx0Ly8gQXBwbHkgc2V0IGZpbHRlcnMgdG8gdW5tYXRjaGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBOT1RFOiBUaGlzIGNhbiBiZSBza2lwcGVkIGlmIHRoZXJlIGFyZSBubyB1bm1hdGNoZWQgZWxlbWVudHMgKGkuZS4sIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBlcXVhbHMgYGlgKSwgdW5sZXNzIHdlIGRpZG4ndCB2aXNpdCBfYW55XyBlbGVtZW50cyBpbiB0aGUgYWJvdmUgbG9vcCBiZWNhdXNlIHdlIGhhdmVcblx0XHRcdC8vIG5vIGVsZW1lbnQgbWF0Y2hlcnMgYW5kIG5vIHNlZWQuXG5cdFx0XHQvLyBJbmNyZW1lbnRpbmcgYW4gaW5pdGlhbGx5LXN0cmluZyBcIjBcIiBgaWAgYWxsb3dzIGBpYCB0byByZW1haW4gYSBzdHJpbmcgb25seSBpbiB0aGF0XG5cdFx0XHQvLyBjYXNlLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBhIFwiMDBcIiBgbWF0Y2hlZENvdW50YCB0aGF0IGRpZmZlcnMgZnJvbSBgaWAgYnV0IGlzIGFsc29cblx0XHRcdC8vIG51bWVyaWNhbGx5IHplcm8uXG5cdFx0XHRpZiAoIGJ5U2V0ICYmIGkgIT09IG1hdGNoZWRDb3VudCApIHtcblx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdHdoaWxlICggKG1hdGNoZXIgPSBzZXRNYXRjaGVyc1tqKytdKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyKCB1bm1hdGNoZWQsIHNldE1hdGNoZWQsIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0XHRcdC8vIFJlaW50ZWdyYXRlIGVsZW1lbnQgbWF0Y2hlcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIHNvcnRpbmdcblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRDb3VudCA+IDAgKSB7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCAhKHVubWF0Y2hlZFtpXSB8fCBzZXRNYXRjaGVkW2ldKSApIHtcblx0XHRcdFx0XHRcdFx0XHRzZXRNYXRjaGVkW2ldID0gcG9wLmNhbGwoIHJlc3VsdHMgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIERpc2NhcmQgaW5kZXggcGxhY2Vob2xkZXIgdmFsdWVzIHRvIGdldCBvbmx5IGFjdHVhbCBtYXRjaGVzXG5cdFx0XHRcdFx0c2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVkICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBZGQgbWF0Y2hlcyB0byByZXN1bHRzXG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNldE1hdGNoZWQgKTtcblxuXHRcdFx0XHQvLyBTZWVkbGVzcyBzZXQgbWF0Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVsYXRlIHNvcnRpbmdcblx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgJiYgIXNlZWQgJiYgc2V0TWF0Y2hlZC5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0KCBtYXRjaGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7XG5cblx0XHRcdFx0XHRTaXp6bGUudW5pcXVlU29ydCggcmVzdWx0cyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIE92ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBnbG9iYWxzIGJ5IG5lc3RlZCBtYXRjaGVyc1xuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dEJhY2t1cDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVubWF0Y2hlZDtcblx0XHR9O1xuXG5cdHJldHVybiBieVNldCA/XG5cdFx0bWFya0Z1bmN0aW9uKCBzdXBlck1hdGNoZXIgKSA6XG5cdFx0c3VwZXJNYXRjaGVyO1xufVxuXG5jb21waWxlID0gU2l6emxlLmNvbXBpbGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIG1hdGNoIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkge1xuXHR2YXIgaSxcblx0XHRzZXRNYXRjaGVycyA9IFtdLFxuXHRcdGVsZW1lbnRNYXRjaGVycyA9IFtdLFxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoICFjYWNoZWQgKSB7XG5cdFx0Ly8gR2VuZXJhdGUgYSBmdW5jdGlvbiBvZiByZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFjaCBlbGVtZW50XG5cdFx0aWYgKCAhbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaCA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdH1cblx0XHRpID0gbWF0Y2gubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0Y2FjaGVkID0gbWF0Y2hlckZyb21Ub2tlbnMoIG1hdGNoW2ldICk7XG5cdFx0XHRpZiAoIGNhY2hlZFsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRzZXRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWNoZSB0aGUgY29tcGlsZWQgZnVuY3Rpb25cblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlKCBzZWxlY3RvciwgbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkgKTtcblxuXHRcdC8vIFNhdmUgc2VsZWN0b3IgYW5kIHRva2VuaXphdGlvblxuXHRcdGNhY2hlZC5zZWxlY3RvciA9IHNlbGVjdG9yO1xuXHR9XG5cdHJldHVybiBjYWNoZWQ7XG59O1xuXG4vKipcbiAqIEEgbG93LWxldmVsIHNlbGVjdGlvbiBmdW5jdGlvbiB0aGF0IHdvcmtzIHdpdGggU2l6emxlJ3MgY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBzZWxlY3RvciBBIHNlbGVjdG9yIG9yIGEgcHJlLWNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb24gYnVpbHQgd2l0aCBTaXp6bGUuY29tcGlsZVxuICogQHBhcmFtIHtFbGVtZW50fSBjb250ZXh0XG4gKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0c11cbiAqIEBwYXJhbSB7QXJyYXl9IFtzZWVkXSBBIHNldCBvZiBlbGVtZW50cyB0byBtYXRjaCBhZ2FpbnN0XG4gKi9cbnNlbGVjdCA9IFNpenpsZS5zZWxlY3QgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBpLCB0b2tlbnMsIHRva2VuLCB0eXBlLCBmaW5kLFxuXHRcdGNvbXBpbGVkID0gdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgc2VsZWN0b3IsXG5cdFx0bWF0Y2ggPSAhc2VlZCAmJiB0b2tlbml6ZSggKHNlbGVjdG9yID0gY29tcGlsZWQuc2VsZWN0b3IgfHwgc2VsZWN0b3IpICk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gVHJ5IHRvIG1pbmltaXplIG9wZXJhdGlvbnMgaWYgdGhlcmUgaXMgb25seSBvbmUgc2VsZWN0b3IgaW4gdGhlIGxpc3QgYW5kIG5vIHNlZWRcblx0Ly8gKHRoZSBsYXR0ZXIgb2Ygd2hpY2ggZ3VhcmFudGVlcyB1cyBjb250ZXh0KVxuXHRpZiAoIG1hdGNoLmxlbmd0aCA9PT0gMSApIHtcblxuXHRcdC8vIFJlZHVjZSBjb250ZXh0IGlmIHRoZSBsZWFkaW5nIGNvbXBvdW5kIHNlbGVjdG9yIGlzIGFuIElEXG5cdFx0dG9rZW5zID0gbWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCApO1xuXHRcdGlmICggdG9rZW5zLmxlbmd0aCA+IDIgJiYgKHRva2VuID0gdG9rZW5zWzBdKS50eXBlID09PSBcIklEXCIgJiZcblx0XHRcdFx0Y29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBkb2N1bWVudElzSFRNTCAmJiBFeHByLnJlbGF0aXZlWyB0b2tlbnNbMV0udHlwZSBdICkge1xuXG5cdFx0XHRjb250ZXh0ID0gKCBFeHByLmZpbmRbXCJJRFwiXSggdG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKHJ1bmVzY2FwZSwgZnVuZXNjYXBlKSwgY29udGV4dCApIHx8IFtdIClbMF07XG5cdFx0XHRpZiAoICFjb250ZXh0ICkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0Ly8gUHJlY29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBzdGlsbCB2ZXJpZnkgYW5jZXN0cnksIHNvIHN0ZXAgdXAgYSBsZXZlbFxuXHRcdFx0fSBlbHNlIGlmICggY29tcGlsZWQgKSB7XG5cdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoIHRva2Vucy5zaGlmdCgpLnZhbHVlLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZldGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmdcblx0XHRpID0gbWF0Y2hFeHByW1wibmVlZHNDb250ZXh0XCJdLnRlc3QoIHNlbGVjdG9yICkgPyAwIDogdG9rZW5zLmxlbmd0aDtcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdHRva2VuID0gdG9rZW5zW2ldO1xuXG5cdFx0XHQvLyBBYm9ydCBpZiB3ZSBoaXQgYSBjb21iaW5hdG9yXG5cdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbICh0eXBlID0gdG9rZW4udHlwZSkgXSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIChmaW5kID0gRXhwci5maW5kWyB0eXBlIF0pICkge1xuXHRcdFx0XHQvLyBTZWFyY2gsIGV4cGFuZGluZyBjb250ZXh0IGZvciBsZWFkaW5nIHNpYmxpbmcgY29tYmluYXRvcnNcblx0XHRcdFx0aWYgKCAoc2VlZCA9IGZpbmQoXG5cdFx0XHRcdFx0dG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLFxuXHRcdFx0XHRcdHJzaWJsaW5nLnRlc3QoIHRva2Vuc1swXS50eXBlICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcblx0XHRcdFx0KSkgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiBzZWVkIGlzIGVtcHR5IG9yIG5vIHRva2VucyByZW1haW4sIHdlIGNhbiByZXR1cm4gZWFybHlcblx0XHRcdFx0XHR0b2tlbnMuc3BsaWNlKCBpLCAxICk7XG5cdFx0XHRcdFx0c2VsZWN0b3IgPSBzZWVkLmxlbmd0aCAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKTtcblx0XHRcdFx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNlZWQgKTtcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ29tcGlsZSBhbmQgZXhlY3V0ZSBhIGZpbHRlcmluZyBmdW5jdGlvbiBpZiBvbmUgaXMgbm90IHByb3ZpZGVkXG5cdC8vIFByb3ZpZGUgYG1hdGNoYCB0byBhdm9pZCByZXRva2VuaXphdGlvbiBpZiB3ZSBtb2RpZmllZCB0aGUgc2VsZWN0b3IgYWJvdmVcblx0KCBjb21waWxlZCB8fCBjb21waWxlKCBzZWxlY3RvciwgbWF0Y2ggKSApKFxuXHRcdHNlZWQsXG5cdFx0Y29udGV4dCxcblx0XHQhZG9jdW1lbnRJc0hUTUwsXG5cdFx0cmVzdWx0cyxcblx0XHQhY29udGV4dCB8fCByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0XG5cdCk7XG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLy8gT25lLXRpbWUgYXNzaWdubWVudHNcblxuLy8gU29ydCBzdGFiaWxpdHlcbnN1cHBvcnQuc29ydFN0YWJsZSA9IGV4cGFuZG8uc3BsaXQoXCJcIikuc29ydCggc29ydE9yZGVyICkuam9pbihcIlwiKSA9PT0gZXhwYW5kbztcblxuLy8gU3VwcG9ydDogQ2hyb21lIDE0LTM1K1xuLy8gQWx3YXlzIGFzc3VtZSBkdXBsaWNhdGVzIGlmIHRoZXkgYXJlbid0IHBhc3NlZCB0byB0aGUgY29tcGFyaXNvbiBmdW5jdGlvblxuc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzID0gISFoYXNEdXBsaWNhdGU7XG5cbi8vIEluaXRpYWxpemUgYWdhaW5zdCB0aGUgZGVmYXVsdCBkb2N1bWVudFxuc2V0RG9jdW1lbnQoKTtcblxuLy8gU3VwcG9ydDogV2Via2l0PDUzNy4zMiAtIFNhZmFyaSA2LjAuMy9DaHJvbWUgMjUgKGZpeGVkIGluIENocm9tZSAyNylcbi8vIERldGFjaGVkIG5vZGVzIGNvbmZvdW5kaW5nbHkgZm9sbG93ICplYWNoIG90aGVyKlxuc3VwcG9ydC5zb3J0RGV0YWNoZWQgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHQvLyBTaG91bGQgcmV0dXJuIDEsIGJ1dCByZXR1cm5zIDQgKGZvbGxvd2luZylcblx0cmV0dXJuIGVsLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZmllbGRzZXRcIikgKSAmIDE7XG59KTtcblxuLy8gU3VwcG9ydDogSUU8OFxuLy8gUHJldmVudCBhdHRyaWJ1dGUvcHJvcGVydHkgXCJpbnRlcnBvbGF0aW9uXCJcbi8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzY0MjklMjhWUy44NSUyOS5hc3B4XG5pZiAoICFhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRlbC5pbm5lckhUTUwgPSBcIjxhIGhyZWY9JyMnPjwvYT5cIjtcblx0cmV0dXJuIGVsLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSA9PT0gXCIjXCIgO1xufSkgKSB7XG5cdGFkZEhhbmRsZSggXCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoXCIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpID09PSBcInR5cGVcIiA/IDEgOiAyICk7XG5cdFx0fVxuXHR9KTtcbn1cblxuLy8gU3VwcG9ydDogSUU8OVxuLy8gVXNlIGRlZmF1bHRWYWx1ZSBpbiBwbGFjZSBvZiBnZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKVxuaWYgKCAhc3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRlbC5pbm5lckhUTUwgPSBcIjxpbnB1dC8+XCI7XG5cdGVsLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCBcInZhbHVlXCIsIFwiXCIgKTtcblx0cmV0dXJuIGVsLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCBcInZhbHVlXCIgKSA9PT0gXCJcIjtcbn0pICkge1xuXHRhZGRIYW5kbGUoIFwidmFsdWVcIiwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdGlmICggIWlzWE1MICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGVmYXVsdFZhbHVlO1xuXHRcdH1cblx0fSk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBnZXRBdHRyaWJ1dGVOb2RlIHRvIGZldGNoIGJvb2xlYW5zIHdoZW4gZ2V0QXR0cmlidXRlIGxpZXNcbmlmICggIWFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdHJldHVybiBlbC5nZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSA9PSBudWxsO1xufSkgKSB7XG5cdGFkZEhhbmRsZSggYm9vbGVhbnMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgdmFsO1xuXHRcdGlmICggIWlzWE1MICkge1xuXHRcdFx0cmV0dXJuIGVsZW1bIG5hbWUgXSA9PT0gdHJ1ZSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6XG5cdFx0XHRcdFx0KHZhbCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xuXHRcdH1cblx0fSk7XG59XG5cbnJldHVybiBTaXp6bGU7XG5cbn0pKCB3aW5kb3cgKTtcblxuXG5cbmpRdWVyeS5maW5kID0gU2l6emxlO1xualF1ZXJ5LmV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzO1xuXG4vLyBEZXByZWNhdGVkXG5qUXVlcnkuZXhwclsgXCI6XCIgXSA9IGpRdWVyeS5leHByLnBzZXVkb3M7XG5qUXVlcnkudW5pcXVlU29ydCA9IGpRdWVyeS51bmlxdWUgPSBTaXp6bGUudW5pcXVlU29ydDtcbmpRdWVyeS50ZXh0ID0gU2l6emxlLmdldFRleHQ7XG5qUXVlcnkuaXNYTUxEb2MgPSBTaXp6bGUuaXNYTUw7XG5qUXVlcnkuY29udGFpbnMgPSBTaXp6bGUuY29udGFpbnM7XG5qUXVlcnkuZXNjYXBlU2VsZWN0b3IgPSBTaXp6bGUuZXNjYXBlO1xuXG5cblxuXG52YXIgZGlyID0gZnVuY3Rpb24oIGVsZW0sIGRpciwgdW50aWwgKSB7XG5cdHZhciBtYXRjaGVkID0gW10sXG5cdFx0dHJ1bmNhdGUgPSB1bnRpbCAhPT0gdW5kZWZpbmVkO1xuXG5cdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSAmJiBlbGVtLm5vZGVUeXBlICE9PSA5ICkge1xuXHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGlmICggdHJ1bmNhdGUgJiYgalF1ZXJ5KCBlbGVtICkuaXMoIHVudGlsICkgKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgc2libGluZ3MgPSBmdW5jdGlvbiggbiwgZWxlbSApIHtcblx0dmFyIG1hdGNoZWQgPSBbXTtcblxuXHRmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkge1xuXHRcdGlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtICkge1xuXHRcdFx0bWF0Y2hlZC5wdXNoKCBuICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1hdGNoZWQ7XG59O1xuXG5cbnZhciBybmVlZHNDb250ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0O1xuXG5cblxuZnVuY3Rpb24gbm9kZU5hbWUoIGVsZW0sIG5hbWUgKSB7XG5cbiAgcmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbn07XG52YXIgcnNpbmdsZVRhZyA9ICggL148KFthLXpdW15cXC9cXDA+OlxceDIwXFx0XFxyXFxuXFxmXSopW1xceDIwXFx0XFxyXFxuXFxmXSpcXC8/Pig/OjxcXC9cXDE+fCkkL2kgKTtcblxuXG5cbi8vIEltcGxlbWVudCB0aGUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90XG5mdW5jdGlvbiB3aW5ub3coIGVsZW1lbnRzLCBxdWFsaWZpZXIsIG5vdCApIHtcblx0aWYgKCBpc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiAhIXF1YWxpZmllci5jYWxsKCBlbGVtLCBpLCBlbGVtICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBTaW5nbGUgZWxlbWVudFxuXHRpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGVsZW0gPT09IHF1YWxpZmllciApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gQXJyYXlsaWtlIG9mIGVsZW1lbnRzIChqUXVlcnksIGFyZ3VtZW50cywgQXJyYXkpXG5cdGlmICggdHlwZW9mIHF1YWxpZmllciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGluZGV4T2YuY2FsbCggcXVhbGlmaWVyLCBlbGVtICkgPiAtMSApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gRmlsdGVyZWQgZGlyZWN0bHkgZm9yIGJvdGggc2ltcGxlIGFuZCBjb21wbGV4IHNlbGVjdG9yc1xuXHRyZXR1cm4galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBlbGVtZW50cywgbm90ICk7XG59XG5cbmpRdWVyeS5maWx0ZXIgPSBmdW5jdGlvbiggZXhwciwgZWxlbXMsIG5vdCApIHtcblx0dmFyIGVsZW0gPSBlbGVtc1sgMCBdO1xuXG5cdGlmICggbm90ICkge1xuXHRcdGV4cHIgPSBcIjpub3QoXCIgKyBleHByICsgXCIpXCI7XG5cdH1cblxuXHRpZiAoIGVsZW1zLmxlbmd0aCA9PT0gMSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGVsZW0sIGV4cHIgKSA/IFsgZWxlbSBdIDogW107XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlcyggZXhwciwgalF1ZXJ5LmdyZXAoIGVsZW1zLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTtcblx0fSApICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgaSwgcmV0LFxuXHRcdFx0bGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRzZWxmID0gdGhpcztcblxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkoIHNlbGVjdG9yICkuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlzICkgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gKSApO1xuXHRcdH1cblxuXHRcdHJldCA9IHRoaXMucHVzaFN0YWNrKCBbXSApO1xuXG5cdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGpRdWVyeS5maW5kKCBzZWxlY3Rvciwgc2VsZlsgaSBdLCByZXQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbGVuID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCByZXQgKSA6IHJldDtcblx0fSxcblx0ZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCBmYWxzZSApICk7XG5cdH0sXG5cdG5vdDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgdHJ1ZSApICk7XG5cdH0sXG5cdGlzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuICEhd2lubm93KFxuXHRcdFx0dGhpcyxcblxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIHBvc2l0aW9uYWwvcmVsYXRpdmUgc2VsZWN0b3IsIGNoZWNrIG1lbWJlcnNoaXAgaW4gdGhlIHJldHVybmVkIHNldFxuXHRcdFx0Ly8gc28gJChcInA6Zmlyc3RcIikuaXMoXCJwOmxhc3RcIikgd29uJ3QgcmV0dXJuIHRydWUgZm9yIGEgZG9jIHdpdGggdHdvIFwicFwiLlxuXHRcdFx0dHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICYmIHJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSA/XG5cdFx0XHRcdGpRdWVyeSggc2VsZWN0b3IgKSA6XG5cdFx0XHRcdHNlbGVjdG9yIHx8IFtdLFxuXHRcdFx0ZmFsc2Vcblx0XHQpLmxlbmd0aDtcblx0fVxufSApO1xuXG5cbi8vIEluaXRpYWxpemUgYSBqUXVlcnkgb2JqZWN0XG5cblxuLy8gQSBjZW50cmFsIHJlZmVyZW5jZSB0byB0aGUgcm9vdCBqUXVlcnkoZG9jdW1lbnQpXG52YXIgcm9vdGpRdWVyeSxcblxuXHQvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhUTUwgc3RyaW5nc1xuXHQvLyBQcmlvcml0aXplICNpZCBvdmVyIDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAoIzk1MjEpXG5cdC8vIFN0cmljdCBIVE1MIHJlY29nbml0aW9uICgjMTEyOTA6IG11c3Qgc3RhcnQgd2l0aCA8KVxuXHQvLyBTaG9ydGN1dCBzaW1wbGUgI2lkIGNhc2UgZm9yIHNwZWVkXG5cdHJxdWlja0V4cHIgPSAvXig/OlxccyooPFtcXHdcXFddKz4pW14+XSp8IyhbXFx3LV0rKSkkLyxcblxuXHRpbml0ID0galF1ZXJ5LmZuLmluaXQgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJvb3QgKSB7XG5cdFx0dmFyIG1hdGNoLCBlbGVtO1xuXG5cdFx0Ly8gSEFORExFOiAkKFwiXCIpLCAkKG51bGwpLCAkKHVuZGVmaW5lZCksICQoZmFsc2UpXG5cdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHQvLyBNZXRob2QgaW5pdCgpIGFjY2VwdHMgYW4gYWx0ZXJuYXRlIHJvb3RqUXVlcnlcblx0XHQvLyBzbyBtaWdyYXRlIGNhbiBzdXBwb3J0IGpRdWVyeS5zdWIgKGdoLTIxMDEpXG5cdFx0cm9vdCA9IHJvb3QgfHwgcm9vdGpRdWVyeTtcblxuXHRcdC8vIEhhbmRsZSBIVE1MIHN0cmluZ3Ncblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGlmICggc2VsZWN0b3JbIDAgXSA9PT0gXCI8XCIgJiZcblx0XHRcdFx0c2VsZWN0b3JbIHNlbGVjdG9yLmxlbmd0aCAtIDEgXSA9PT0gXCI+XCIgJiZcblx0XHRcdFx0c2VsZWN0b3IubGVuZ3RoID49IDMgKSB7XG5cblx0XHRcdFx0Ly8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0aCA8PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2tcblx0XHRcdFx0bWF0Y2ggPSBbIG51bGwsIHNlbGVjdG9yLCBudWxsIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYXRjaCBodG1sIG9yIG1ha2Ugc3VyZSBubyBjb250ZXh0IGlzIHNwZWNpZmllZCBmb3IgI2lkXG5cdFx0XHRpZiAoIG1hdGNoICYmICggbWF0Y2hbIDEgXSB8fCAhY29udGV4dCApICkge1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJChodG1sKSAtPiAkKGFycmF5KVxuXHRcdFx0XHRpZiAoIG1hdGNoWyAxIF0gKSB7XG5cdFx0XHRcdFx0Y29udGV4dCA9IGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgPyBjb250ZXh0WyAwIF0gOiBjb250ZXh0O1xuXG5cdFx0XHRcdFx0Ly8gT3B0aW9uIHRvIHJ1biBzY3JpcHRzIGlzIHRydWUgZm9yIGJhY2stY29tcGF0XG5cdFx0XHRcdFx0Ly8gSW50ZW50aW9uYWxseSBsZXQgdGhlIGVycm9yIGJlIHRocm93biBpZiBwYXJzZUhUTUwgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMsIGpRdWVyeS5wYXJzZUhUTUwoXG5cdFx0XHRcdFx0XHRtYXRjaFsgMSBdLFxuXHRcdFx0XHRcdFx0Y29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBkb2N1bWVudCxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpICk7XG5cblx0XHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCwgcHJvcHMpXG5cdFx0XHRcdFx0aWYgKCByc2luZ2xlVGFnLnRlc3QoIG1hdGNoWyAxIF0gKSAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29udGV4dCApICkge1xuXHRcdFx0XHRcdFx0Zm9yICggbWF0Y2ggaW4gY29udGV4dCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBQcm9wZXJ0aWVzIG9mIGNvbnRleHQgYXJlIGNhbGxlZCBhcyBtZXRob2RzIGlmIHBvc3NpYmxlXG5cdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggdGhpc1sgbWF0Y2ggXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXNbIG1hdGNoIF0oIGNvbnRleHRbIG1hdGNoIF0gKTtcblxuXHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgb3RoZXJ3aXNlIHNldCBhcyBhdHRyaWJ1dGVzXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hdHRyKCBtYXRjaCwgY29udGV4dFsgbWF0Y2ggXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKCNpZClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWyAyIF0gKTtcblxuXHRcdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSW5qZWN0IHRoZSBlbGVtZW50IGRpcmVjdGx5IGludG8gdGhlIGpRdWVyeSBvYmplY3Rcblx0XHRcdFx0XHRcdHRoaXNbIDAgXSA9IGVsZW07XG5cdFx0XHRcdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCAkKC4uLikpXG5cdFx0XHR9IGVsc2UgaWYgKCAhY29udGV4dCB8fCBjb250ZXh0LmpxdWVyeSApIHtcblx0XHRcdFx0cmV0dXJuICggY29udGV4dCB8fCByb290ICkuZmluZCggc2VsZWN0b3IgKTtcblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsIGNvbnRleHQpXG5cdFx0XHQvLyAod2hpY2ggaXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNvbnRleHQpLmZpbmQoZXhwcilcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdC8vIEhBTkRMRTogJChET01FbGVtZW50KVxuXHRcdH0gZWxzZSBpZiAoIHNlbGVjdG9yLm5vZGVUeXBlICkge1xuXHRcdFx0dGhpc1sgMCBdID0gc2VsZWN0b3I7XG5cdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdC8vIEhBTkRMRTogJChmdW5jdGlvbilcblx0XHQvLyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHlcblx0XHR9IGVsc2UgaWYgKCBpc0Z1bmN0aW9uKCBzZWxlY3RvciApICkge1xuXHRcdFx0cmV0dXJuIHJvb3QucmVhZHkgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHJvb3QucmVhZHkoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIEV4ZWN1dGUgaW1tZWRpYXRlbHkgaWYgcmVhZHkgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0c2VsZWN0b3IoIGpRdWVyeSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWFrZUFycmF5KCBzZWxlY3RvciwgdGhpcyApO1xuXHR9O1xuXG4vLyBHaXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRoZSBqUXVlcnkgcHJvdG90eXBlIGZvciBsYXRlciBpbnN0YW50aWF0aW9uXG5pbml0LnByb3RvdHlwZSA9IGpRdWVyeS5mbjtcblxuLy8gSW5pdGlhbGl6ZSBjZW50cmFsIHJlZmVyZW5jZVxucm9vdGpRdWVyeSA9IGpRdWVyeSggZG9jdW1lbnQgKTtcblxuXG52YXIgcnBhcmVudHNwcmV2ID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sXG5cblx0Ly8gTWV0aG9kcyBndWFyYW50ZWVkIHRvIHByb2R1Y2UgYSB1bmlxdWUgc2V0IHdoZW4gc3RhcnRpbmcgZnJvbSBhIHVuaXF1ZSBzZXRcblx0Z3VhcmFudGVlZFVuaXF1ZSA9IHtcblx0XHRjaGlsZHJlbjogdHJ1ZSxcblx0XHRjb250ZW50czogdHJ1ZSxcblx0XHRuZXh0OiB0cnVlLFxuXHRcdHByZXY6IHRydWVcblx0fTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRoYXM6IGZ1bmN0aW9uKCB0YXJnZXQgKSB7XG5cdFx0dmFyIHRhcmdldHMgPSBqUXVlcnkoIHRhcmdldCwgdGhpcyApLFxuXHRcdFx0bCA9IHRhcmdldHMubGVuZ3RoO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHRoaXMsIHRhcmdldHNbIGkgXSApICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRleHQgKSB7XG5cdFx0dmFyIGN1cixcblx0XHRcdGkgPSAwLFxuXHRcdFx0bCA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0bWF0Y2hlZCA9IFtdLFxuXHRcdFx0dGFyZ2V0cyA9IHR5cGVvZiBzZWxlY3RvcnMgIT09IFwic3RyaW5nXCIgJiYgalF1ZXJ5KCBzZWxlY3RvcnMgKTtcblxuXHRcdC8vIFBvc2l0aW9uYWwgc2VsZWN0b3JzIG5ldmVyIG1hdGNoLCBzaW5jZSB0aGVyZSdzIG5vIF9zZWxlY3Rpb25fIGNvbnRleHRcblx0XHRpZiAoICFybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9ycyApICkge1xuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRmb3IgKCBjdXIgPSB0aGlzWyBpIF07IGN1ciAmJiBjdXIgIT09IGNvbnRleHQ7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkge1xuXG5cdFx0XHRcdFx0Ly8gQWx3YXlzIHNraXAgZG9jdW1lbnQgZnJhZ21lbnRzXG5cdFx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPCAxMSAmJiAoIHRhcmdldHMgP1xuXHRcdFx0XHRcdFx0dGFyZ2V0cy5pbmRleCggY3VyICkgPiAtMSA6XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IHBhc3Mgbm9uLWVsZW1lbnRzIHRvIFNpenpsZVxuXHRcdFx0XHRcdFx0Y3VyLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggY3VyLCBzZWxlY3RvcnMgKSApICkge1xuXG5cdFx0XHRcdFx0XHRtYXRjaGVkLnB1c2goIGN1ciApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkLmxlbmd0aCA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApIDogbWF0Y2hlZCApO1xuXHR9LFxuXG5cdC8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRoaW4gdGhlIHNldFxuXHRpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBObyBhcmd1bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVudFxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCB0aGlzWyAwIF0gJiYgdGhpc1sgMCBdLnBhcmVudE5vZGUgKSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoIDogLTE7XG5cdFx0fVxuXG5cdFx0Ly8gSW5kZXggaW4gc2VsZWN0b3Jcblx0XHRpZiAoIHR5cGVvZiBlbGVtID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggalF1ZXJ5KCBlbGVtICksIHRoaXNbIDAgXSApO1xuXHRcdH1cblxuXHRcdC8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQgZWxlbWVudFxuXHRcdHJldHVybiBpbmRleE9mLmNhbGwoIHRoaXMsXG5cblx0XHRcdC8vIElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdXNlZFxuXHRcdFx0ZWxlbS5qcXVlcnkgPyBlbGVtWyAwIF0gOiBlbGVtXG5cdFx0KTtcblx0fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soXG5cdFx0XHRqUXVlcnkudW5pcXVlU29ydChcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgpLCBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0ICkgKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkQmFjazogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/XG5cdFx0XHR0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKCBzZWxlY3RvciApXG5cdFx0KTtcblx0fVxufSApO1xuXG5mdW5jdGlvbiBzaWJsaW5nKCBjdXIsIGRpciApIHtcblx0d2hpbGUgKCAoIGN1ciA9IGN1clsgZGlyIF0gKSAmJiBjdXIubm9kZVR5cGUgIT09IDEgKSB7fVxuXHRyZXR1cm4gY3VyO1xufVxuXG5qUXVlcnkuZWFjaCgge1xuXHRwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0cmV0dXJuIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDtcblx0fSxcblx0cGFyZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIgKTtcblx0fSxcblx0cGFyZW50c1VudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIsIHVudGlsICk7XG5cdH0sXG5cdG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXZBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRzaWJsaW5nczogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCAoIGVsZW0ucGFyZW50Tm9kZSB8fCB7fSApLmZpcnN0Q2hpbGQsIGVsZW0gKTtcblx0fSxcblx0Y2hpbGRyZW46IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggZWxlbS5maXJzdENoaWxkICk7XG5cdH0sXG5cdGNvbnRlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRpZiAoIHR5cGVvZiBlbGVtLmNvbnRlbnREb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLmNvbnRlbnREb2N1bWVudDtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seSwgaU9TIDcgb25seSwgQW5kcm9pZCBCcm93c2VyIDw9NC4zIG9ubHlcblx0XHQvLyBUcmVhdCB0aGUgdGVtcGxhdGUgZWxlbWVudCBhcyBhIHJlZ3VsYXIgb25lIGluIGJyb3dzZXJzIHRoYXRcblx0XHQvLyBkb24ndCBzdXBwb3J0IGl0LlxuXHRcdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGVtcGxhdGVcIiApICkge1xuXHRcdFx0ZWxlbSA9IGVsZW0uY29udGVudCB8fCBlbGVtO1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9kZXMgKTtcblx0fVxufSwgZnVuY3Rpb24oIG5hbWUsIGZuICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB1bnRpbCwgc2VsZWN0b3IgKSB7XG5cdFx0dmFyIG1hdGNoZWQgPSBqUXVlcnkubWFwKCB0aGlzLCBmbiwgdW50aWwgKTtcblxuXHRcdGlmICggbmFtZS5zbGljZSggLTUgKSAhPT0gXCJVbnRpbFwiICkge1xuXHRcdFx0c2VsZWN0b3IgPSB1bnRpbDtcblx0XHR9XG5cblx0XHRpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdG1hdGNoZWQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgbWF0Y2hlZCApO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5sZW5ndGggPiAxICkge1xuXG5cdFx0XHQvLyBSZW1vdmUgZHVwbGljYXRlc1xuXHRcdFx0aWYgKCAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFtZSBdICkge1xuXHRcdFx0XHRqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXZlcnNlIG9yZGVyIGZvciBwYXJlbnRzKiBhbmQgcHJldi1kZXJpdmF0aXZlc1xuXHRcdFx0aWYgKCBycGFyZW50c3ByZXYudGVzdCggbmFtZSApICkge1xuXHRcdFx0XHRtYXRjaGVkLnJldmVyc2UoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQgKTtcblx0fTtcbn0gKTtcbnZhciBybm90aHRtbHdoaXRlID0gKCAvW15cXHgyMFxcdFxcclxcblxcZl0rL2cgKTtcblxuXG5cbi8vIENvbnZlcnQgU3RyaW5nLWZvcm1hdHRlZCBvcHRpb25zIGludG8gT2JqZWN0LWZvcm1hdHRlZCBvbmVzXG5mdW5jdGlvbiBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkge1xuXHR2YXIgb2JqZWN0ID0ge307XG5cdGpRdWVyeS5lYWNoKCBvcHRpb25zLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10sIGZ1bmN0aW9uKCBfLCBmbGFnICkge1xuXHRcdG9iamVjdFsgZmxhZyBdID0gdHJ1ZTtcblx0fSApO1xuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG4vKlxuICogQ3JlYXRlIGEgY2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6XG4gKlxuICpcdG9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3dcbiAqXHRcdFx0dGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0aW9uIG9iamVjdFxuICpcbiAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxpa2UgYW4gZXZlbnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlXG4gKiBcImZpcmVkXCIgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogUG9zc2libGUgb3B0aW9uczpcbiAqXG4gKlx0b25jZTpcdFx0XHR3aWxsIGVuc3VyZSB0aGUgY2FsbGJhY2sgbGlzdCBjYW4gb25seSBiZSBmaXJlZCBvbmNlIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdG1lbW9yeTpcdFx0XHR3aWxsIGtlZXAgdHJhY2sgb2YgcHJldmlvdXMgdmFsdWVzIGFuZCB3aWxsIGNhbGwgYW55IGNhbGxiYWNrIGFkZGVkXG4gKlx0XHRcdFx0XHRhZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBmaXJlZCByaWdodCBhd2F5IHdpdGggdGhlIGxhdGVzdCBcIm1lbW9yaXplZFwiXG4gKlx0XHRcdFx0XHR2YWx1ZXMgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0dW5pcXVlOlx0XHRcdHdpbGwgZW5zdXJlIGEgY2FsbGJhY2sgY2FuIG9ubHkgYmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KVxuICpcbiAqXHRzdG9wT25GYWxzZTpcdGludGVycnVwdCBjYWxsaW5ncyB3aGVuIGEgY2FsbGJhY2sgcmV0dXJucyBmYWxzZVxuICpcbiAqL1xualF1ZXJ5LkNhbGxiYWNrcyA9IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXG5cdC8vIENvbnZlcnQgb3B0aW9ucyBmcm9tIFN0cmluZy1mb3JtYXR0ZWQgdG8gT2JqZWN0LWZvcm1hdHRlZCBpZiBuZWVkZWRcblx0Ly8gKHdlIGNoZWNrIGluIGNhY2hlIGZpcnN0KVxuXHRvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIgP1xuXHRcdGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSA6XG5cdFx0alF1ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMgKTtcblxuXHR2YXIgLy8gRmxhZyB0byBrbm93IGlmIGxpc3QgaXMgY3VycmVudGx5IGZpcmluZ1xuXHRcdGZpcmluZyxcblxuXHRcdC8vIExhc3QgZmlyZSB2YWx1ZSBmb3Igbm9uLWZvcmdldHRhYmxlIGxpc3RzXG5cdFx0bWVtb3J5LFxuXG5cdFx0Ly8gRmxhZyB0byBrbm93IGlmIGxpc3Qgd2FzIGFscmVhZHkgZmlyZWRcblx0XHRmaXJlZCxcblxuXHRcdC8vIEZsYWcgdG8gcHJldmVudCBmaXJpbmdcblx0XHRsb2NrZWQsXG5cblx0XHQvLyBBY3R1YWwgY2FsbGJhY2sgbGlzdFxuXHRcdGxpc3QgPSBbXSxcblxuXHRcdC8vIFF1ZXVlIG9mIGV4ZWN1dGlvbiBkYXRhIGZvciByZXBlYXRhYmxlIGxpc3RzXG5cdFx0cXVldWUgPSBbXSxcblxuXHRcdC8vIEluZGV4IG9mIGN1cnJlbnRseSBmaXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IGFkZC9yZW1vdmUgYXMgbmVlZGVkKVxuXHRcdGZpcmluZ0luZGV4ID0gLTEsXG5cblx0XHQvLyBGaXJlIGNhbGxiYWNrc1xuXHRcdGZpcmUgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5mb3JjZSBzaW5nbGUtZmlyaW5nXG5cdFx0XHRsb2NrZWQgPSBsb2NrZWQgfHwgb3B0aW9ucy5vbmNlO1xuXG5cdFx0XHQvLyBFeGVjdXRlIGNhbGxiYWNrcyBmb3IgYWxsIHBlbmRpbmcgZXhlY3V0aW9ucyxcblx0XHRcdC8vIHJlc3BlY3RpbmcgZmlyaW5nSW5kZXggb3ZlcnJpZGVzIGFuZCBydW50aW1lIGNoYW5nZXNcblx0XHRcdGZpcmVkID0gZmlyaW5nID0gdHJ1ZTtcblx0XHRcdGZvciAoIDsgcXVldWUubGVuZ3RoOyBmaXJpbmdJbmRleCA9IC0xICkge1xuXHRcdFx0XHRtZW1vcnkgPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0XHR3aGlsZSAoICsrZmlyaW5nSW5kZXggPCBsaXN0Lmxlbmd0aCApIHtcblxuXHRcdFx0XHRcdC8vIFJ1biBjYWxsYmFjayBhbmQgY2hlY2sgZm9yIGVhcmx5IHRlcm1pbmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBsaXN0WyBmaXJpbmdJbmRleCBdLmFwcGx5KCBtZW1vcnlbIDAgXSwgbWVtb3J5WyAxIF0gKSA9PT0gZmFsc2UgJiZcblx0XHRcdFx0XHRcdG9wdGlvbnMuc3RvcE9uRmFsc2UgKSB7XG5cblx0XHRcdFx0XHRcdC8vIEp1bXAgdG8gZW5kIGFuZCBmb3JnZXQgdGhlIGRhdGEgc28gLmFkZCBkb2Vzbid0IHJlLWZpcmVcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGg7XG5cdFx0XHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yZ2V0IHRoZSBkYXRhIGlmIHdlJ3JlIGRvbmUgd2l0aCBpdFxuXHRcdFx0aWYgKCAhb3B0aW9ucy5tZW1vcnkgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRmaXJpbmcgPSBmYWxzZTtcblxuXHRcdFx0Ly8gQ2xlYW4gdXAgaWYgd2UncmUgZG9uZSBmaXJpbmcgZm9yIGdvb2Rcblx0XHRcdGlmICggbG9ja2VkICkge1xuXG5cdFx0XHRcdC8vIEtlZXAgYW4gZW1wdHkgbGlzdCBpZiB3ZSBoYXZlIGRhdGEgZm9yIGZ1dHVyZSBhZGQgY2FsbHNcblx0XHRcdFx0aWYgKCBtZW1vcnkgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgdGhpcyBvYmplY3QgaXMgc3BlbnRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsaXN0ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBBY3R1YWwgQ2FsbGJhY2tzIG9iamVjdFxuXHRcdHNlbGYgPSB7XG5cblx0XHRcdC8vIEFkZCBhIGNhbGxiYWNrIG9yIGEgY29sbGVjdGlvbiBvZiBjYWxsYmFja3MgdG8gdGhlIGxpc3Rcblx0XHRcdGFkZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblxuXHRcdFx0XHRcdC8vIElmIHdlIGhhdmUgbWVtb3J5IGZyb20gYSBwYXN0IHJ1biwgd2Ugc2hvdWxkIGZpcmUgYWZ0ZXIgYWRkaW5nXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGggLSAxO1xuXHRcdFx0XHRcdFx0cXVldWUucHVzaCggbWVtb3J5ICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0KCBmdW5jdGlvbiBhZGQoIGFyZ3MgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggYXJncywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoICFvcHRpb25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGlzdC5wdXNoKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVuZ3RoICYmIHRvVHlwZSggYXJnICkgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBJbnNwZWN0IHJlY3Vyc2l2ZWx5XG5cdFx0XHRcdFx0XHRcdFx0YWRkKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdH0gKSggYXJndW1lbnRzICk7XG5cblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhIGNhbGxiYWNrIGZyb20gdGhlIGxpc3Rcblx0XHRcdHJlbW92ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0dmFyIGluZGV4O1xuXHRcdFx0XHRcdHdoaWxlICggKCBpbmRleCA9IGpRdWVyeS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0bGlzdC5zcGxpY2UoIGluZGV4LCAxICk7XG5cblx0XHRcdFx0XHRcdC8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlc1xuXHRcdFx0XHRcdFx0aWYgKCBpbmRleCA8PSBmaXJpbmdJbmRleCApIHtcblx0XHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXgtLTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDaGVjayBpZiBhIGdpdmVuIGNhbGxiYWNrIGlzIGluIHRoZSBsaXN0LlxuXHRcdFx0Ly8gSWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sIHJldHVybiB3aGV0aGVyIG9yIG5vdCBsaXN0IGhhcyBjYWxsYmFja3MgYXR0YWNoZWQuXG5cdFx0XHRoYXM6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0cmV0dXJuIGZuID9cblx0XHRcdFx0XHRqUXVlcnkuaW5BcnJheSggZm4sIGxpc3QgKSA+IC0xIDpcblx0XHRcdFx0XHRsaXN0Lmxlbmd0aCA+IDA7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBsaXN0XG5cdFx0XHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlIGFuZCAuYWRkXG5cdFx0XHQvLyBBYm9ydCBhbnkgY3VycmVudC9wZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdC8vIENsZWFyIGFsbCBjYWxsYmFja3MgYW5kIHZhbHVlc1xuXHRcdFx0ZGlzYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRkaXNhYmxlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhbGlzdDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmVcblx0XHRcdC8vIEFsc28gZGlzYWJsZSAuYWRkIHVubGVzcyB3ZSBoYXZlIG1lbW9yeSAoc2luY2UgaXQgd291bGQgaGF2ZSBubyBlZmZlY3QpXG5cdFx0XHQvLyBBYm9ydCBhbnkgcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHRsb2NrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0aWYgKCAhbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0bG9ja2VkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhbG9ja2VkO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGNvbnRleHQgYW5kIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZVdpdGg6IGZ1bmN0aW9uKCBjb250ZXh0LCBhcmdzICkge1xuXHRcdFx0XHRpZiAoICFsb2NrZWQgKSB7XG5cdFx0XHRcdFx0YXJncyA9IGFyZ3MgfHwgW107XG5cdFx0XHRcdFx0YXJncyA9IFsgY29udGV4dCwgYXJncy5zbGljZSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3MgXTtcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBhcmdzICk7XG5cdFx0XHRcdFx0aWYgKCAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzXG5cdFx0XHRmaXJlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0c2VsZi5maXJlV2l0aCggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiB0aGUgY2FsbGJhY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbGxlZCBhdCBsZWFzdCBvbmNlXG5cdFx0XHRmaXJlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWZpcmVkO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0cmV0dXJuIHNlbGY7XG59O1xuXG5cbmZ1bmN0aW9uIElkZW50aXR5KCB2ICkge1xuXHRyZXR1cm4gdjtcbn1cbmZ1bmN0aW9uIFRocm93ZXIoIGV4ICkge1xuXHR0aHJvdyBleDtcbn1cblxuZnVuY3Rpb24gYWRvcHRWYWx1ZSggdmFsdWUsIHJlc29sdmUsIHJlamVjdCwgbm9WYWx1ZSApIHtcblx0dmFyIG1ldGhvZDtcblxuXHR0cnkge1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIHByb21pc2UgYXNwZWN0IGZpcnN0IHRvIHByaXZpbGVnZSBzeW5jaHJvbm91cyBiZWhhdmlvclxuXHRcdGlmICggdmFsdWUgJiYgaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS5wcm9taXNlICkgKSApIHtcblx0XHRcdG1ldGhvZC5jYWxsKCB2YWx1ZSApLmRvbmUoIHJlc29sdmUgKS5mYWlsKCByZWplY3QgKTtcblxuXHRcdC8vIE90aGVyIHRoZW5hYmxlc1xuXHRcdH0gZWxzZSBpZiAoIHZhbHVlICYmIGlzRnVuY3Rpb24oICggbWV0aG9kID0gdmFsdWUudGhlbiApICkgKSB7XG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUsIHJlc29sdmUsIHJlamVjdCApO1xuXG5cdFx0Ly8gT3RoZXIgbm9uLXRoZW5hYmxlc1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIENvbnRyb2wgYHJlc29sdmVgIGFyZ3VtZW50cyBieSBsZXR0aW5nIEFycmF5I3NsaWNlIGNhc3QgYm9vbGVhbiBgbm9WYWx1ZWAgdG8gaW50ZWdlcjpcblx0XHRcdC8vICogZmFsc2U6IFsgdmFsdWUgXS5zbGljZSggMCApID0+IHJlc29sdmUoIHZhbHVlIClcblx0XHRcdC8vICogdHJ1ZTogWyB2YWx1ZSBdLnNsaWNlKCAxICkgPT4gcmVzb2x2ZSgpXG5cdFx0XHRyZXNvbHZlLmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXS5zbGljZSggbm9WYWx1ZSApICk7XG5cdFx0fVxuXG5cdC8vIEZvciBQcm9taXNlcy9BKywgY29udmVydCBleGNlcHRpb25zIGludG8gcmVqZWN0aW9uc1xuXHQvLyBTaW5jZSBqUXVlcnkud2hlbiBkb2Vzbid0IHVud3JhcCB0aGVuYWJsZXMsIHdlIGNhbiBza2lwIHRoZSBleHRyYSBjaGVja3MgYXBwZWFyaW5nIGluXG5cdC8vIERlZmVycmVkI3RoZW4gdG8gY29uZGl0aW9uYWxseSBzdXBwcmVzcyByZWplY3Rpb24uXG5cdH0gY2F0Y2ggKCB2YWx1ZSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIG9ubHlcblx0XHQvLyBTdHJpY3QgbW9kZSBmdW5jdGlvbnMgaW52b2tlZCB3aXRob3V0IC5jYWxsLy5hcHBseSBnZXQgZ2xvYmFsLW9iamVjdCBjb250ZXh0XG5cdFx0cmVqZWN0LmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXSApO1xuXHR9XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHREZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7XG5cdFx0dmFyIHR1cGxlcyA9IFtcblxuXHRcdFx0XHQvLyBhY3Rpb24sIGFkZCBsaXN0ZW5lciwgY2FsbGJhY2tzLFxuXHRcdFx0XHQvLyAuLi4gLnRoZW4gaGFuZGxlcnMsIGFyZ3VtZW50IGluZGV4LCBbZmluYWwgc3RhdGVdXG5cdFx0XHRcdFsgXCJub3RpZnlcIiwgXCJwcm9ncmVzc1wiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLCAyIF0sXG5cdFx0XHRcdFsgXCJyZXNvbHZlXCIsIFwiZG9uZVwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgMCwgXCJyZXNvbHZlZFwiIF0sXG5cdFx0XHRcdFsgXCJyZWplY3RcIiwgXCJmYWlsXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCAxLCBcInJlamVjdGVkXCIgXVxuXHRcdFx0XSxcblx0XHRcdHN0YXRlID0gXCJwZW5kaW5nXCIsXG5cdFx0XHRwcm9taXNlID0ge1xuXHRcdFx0XHRzdGF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRhbHdheXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGRlZmVycmVkLmRvbmUoIGFyZ3VtZW50cyApLmZhaWwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImNhdGNoXCI6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJvbWlzZS50aGVuKCBudWxsLCBmbiApO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEtlZXAgcGlwZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0cGlwZTogZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICovICkge1xuXHRcdFx0XHRcdHZhciBmbnMgPSBhcmd1bWVudHM7XG5cblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTWFwIHR1cGxlcyAocHJvZ3Jlc3MsIGRvbmUsIGZhaWwpIHRvIGFyZ3VtZW50cyAoZG9uZSwgZmFpbCwgcHJvZ3Jlc3MpXG5cdFx0XHRcdFx0XHRcdHZhciBmbiA9IGlzRnVuY3Rpb24oIGZuc1sgdHVwbGVbIDQgXSBdICkgJiYgZm5zWyB0dXBsZVsgNCBdIF07XG5cblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQucHJvZ3Jlc3MoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIubm90aWZ5IH0pXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLmRvbmUoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVzb2x2ZSB9KVxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5mYWlsKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlamVjdCB9KVxuXHRcdFx0XHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDEgXSBdKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQgPSBmbiAmJiBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCAmJiBpc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC5wcm9taXNlKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnByb2dyZXNzKCBuZXdEZWZlci5ub3RpZnkgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5mYWlsKCBuZXdEZWZlci5yZWplY3QgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXJbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmbiA/IFsgcmV0dXJuZWQgXSA6IGFyZ3VtZW50c1xuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdGZucyA9IG51bGw7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhlbjogZnVuY3Rpb24oIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBvblByb2dyZXNzICkge1xuXHRcdFx0XHRcdHZhciBtYXhEZXB0aCA9IDA7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gcmVzb2x2ZSggZGVwdGgsIGRlZmVycmVkLCBoYW5kbGVyLCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdGhhdCA9IHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0YXJncyA9IGFyZ3VtZW50cyxcblx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQsIHRoZW47XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4zXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01OVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIGRvdWJsZS1yZXNvbHV0aW9uIGF0dGVtcHRzXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoIDwgbWF4RGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQgPSBoYW5kbGVyLmFwcGx5KCB0aGF0LCBhcmdzICk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjFcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTQ4XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkID09PSBkZWZlcnJlZC5wcm9taXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoIFwiVGhlbmFibGUgc2VsZi1yZXNvbHV0aW9uXCIgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbnMgMi4zLjMuMSwgMy41XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01NFxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNzVcblx0XHRcdFx0XHRcdFx0XHRcdC8vIFJldHJpZXZlIGB0aGVuYCBvbmx5IG9uY2Vcblx0XHRcdFx0XHRcdFx0XHRcdHRoZW4gPSByZXR1cm5lZCAmJlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBjaGVjayBvYmplY3RzIGFuZCBmdW5jdGlvbnMgZm9yIHRoZW5hYmlsaXR5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggdHlwZW9mIHJldHVybmVkID09PSBcIm9iamVjdFwiIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHJldHVybmVkID09PSBcImZ1bmN0aW9uXCIgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC50aGVuO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYSByZXR1cm5lZCB0aGVuYWJsZVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGVuICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3BlY2lhbCBwcm9jZXNzb3JzIChub3RpZnkpIGp1c3Qgd2FpdCBmb3IgcmVzb2x1dGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWwgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gTm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGFsc28gaG9vayBpbnRvIHByb2dyZXNzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgZGlzcmVnYXJkIG9sZGVyIHJlc29sdXRpb24gdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4RGVwdGgrKztcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhbGwgb3RoZXIgcmV0dXJuZWQgdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggaGFuZGxlciAhPT0gSWRlbnRpdHkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyByZXR1cm5lZCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gUHJvY2VzcyB0aGUgdmFsdWUocylcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmYXVsdCBwcm9jZXNzIGlzIHJlc29sdmVcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCBzcGVjaWFsIHx8IGRlZmVycmVkLnJlc29sdmVXaXRoICkoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBub3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgY2F0Y2ggYW5kIHJlamVjdCBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcyA9IHNwZWNpYWwgP1xuXHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rKCBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLnN0YWNrVHJhY2UgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuNC4xXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBJZ25vcmUgcG9zdC1yZXNvbHV0aW9uIGV4Y2VwdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoICsgMSA+PSBtYXhEZXB0aCApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBzdWJzdGl0dXRlIGhhbmRsZXJzIHBhc3Mgb24gY29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGhhbmRsZXIgIT09IFRocm93ZXIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoYXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBbIGUgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggdGhhdCwgYXJncyApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuMVxuXHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01N1xuXHRcdFx0XHRcdFx0XHQvLyBSZS1yZXNvbHZlIHByb21pc2VzIGltbWVkaWF0ZWx5IHRvIGRvZGdlIGZhbHNlIHJlamVjdGlvbiBmcm9tXG5cdFx0XHRcdFx0XHRcdC8vIHN1YnNlcXVlbnQgZXJyb3JzXG5cdFx0XHRcdFx0XHRcdGlmICggZGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcygpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2FsbCBhbiBvcHRpb25hbCBob29rIHRvIHJlY29yZCB0aGUgc3RhY2ssIGluIGNhc2Ugb2YgZXhjZXB0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Ly8gc2luY2UgaXQncyBvdGhlcndpc2UgbG9zdCB3aGVuIGV4ZWN1dGlvbiBnb2VzIGFzeW5jXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5zdGFja1RyYWNlID0galF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggcHJvY2VzcyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcblxuXHRcdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblByb2dyZXNzICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25Qcm9ncmVzcyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eSxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlci5ub3RpZnlXaXRoXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDEgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uRnVsZmlsbGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25GdWxmaWxsZWQgOlxuXHRcdFx0XHRcdFx0XHRcdFx0SWRlbnRpdHlcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAyIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblJlamVjdGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25SZWplY3RlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRUaHJvd2VyXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBHZXQgYSBwcm9taXNlIGZvciB0aGlzIGRlZmVycmVkXG5cdFx0XHRcdC8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3Rcblx0XHRcdFx0cHJvbWlzZTogZnVuY3Rpb24oIG9iaiApIHtcblx0XHRcdFx0XHRyZXR1cm4gb2JqICE9IG51bGwgPyBqUXVlcnkuZXh0ZW5kKCBvYmosIHByb21pc2UgKSA6IHByb21pc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWZlcnJlZCA9IHt9O1xuXG5cdFx0Ly8gQWRkIGxpc3Qtc3BlY2lmaWMgbWV0aG9kc1xuXHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHtcblx0XHRcdHZhciBsaXN0ID0gdHVwbGVbIDIgXSxcblx0XHRcdFx0c3RhdGVTdHJpbmcgPSB0dXBsZVsgNSBdO1xuXG5cdFx0XHQvLyBwcm9taXNlLnByb2dyZXNzID0gbGlzdC5hZGRcblx0XHRcdC8vIHByb21pc2UuZG9uZSA9IGxpc3QuYWRkXG5cdFx0XHQvLyBwcm9taXNlLmZhaWwgPSBsaXN0LmFkZFxuXHRcdFx0cHJvbWlzZVsgdHVwbGVbIDEgXSBdID0gbGlzdC5hZGQ7XG5cblx0XHRcdC8vIEhhbmRsZSBzdGF0ZVxuXHRcdFx0aWYgKCBzdGF0ZVN0cmluZyApIHtcblx0XHRcdFx0bGlzdC5hZGQoXG5cdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIHN0YXRlID0gXCJyZXNvbHZlZFwiIChpLmUuLCBmdWxmaWxsZWQpXG5cdFx0XHRcdFx0XHQvLyBzdGF0ZSA9IFwicmVqZWN0ZWRcIlxuXHRcdFx0XHRcdFx0c3RhdGUgPSBzdGF0ZVN0cmluZztcblx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHR0dXBsZXNbIDMgLSBpIF1bIDIgXS5kaXNhYmxlLFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZGlzYWJsZVxuXHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5kaXNhYmxlXG5cdFx0XHRcdFx0dHVwbGVzWyAzIC0gaSBdWyAzIF0uZGlzYWJsZSxcblxuXHRcdFx0XHRcdC8vIHByb2dyZXNzX2NhbGxiYWNrcy5sb2NrXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDIgXS5sb2NrLFxuXG5cdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMubG9ja1xuXHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAzIF0ubG9ja1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5maXJlXG5cdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0bGlzdC5hZGQoIHR1cGxlWyAzIF0uZmlyZSApO1xuXG5cdFx0XHQvLyBkZWZlcnJlZC5ub3RpZnkgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQubm90aWZ5V2l0aCguLi4pIH1cblx0XHRcdC8vIGRlZmVycmVkLnJlc29sdmUgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVzb2x2ZVdpdGgoLi4uKSB9XG5cdFx0XHQvLyBkZWZlcnJlZC5yZWplY3QgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVqZWN0V2l0aCguLi4pIH1cblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKCB0aGlzID09PSBkZWZlcnJlZCA/IHVuZGVmaW5lZCA6IHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH07XG5cblx0XHRcdC8vIGRlZmVycmVkLm5vdGlmeVdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHQvLyBkZWZlcnJlZC5yZXNvbHZlV2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdC8vIGRlZmVycmVkLnJlamVjdFdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0gPSBsaXN0LmZpcmVXaXRoO1xuXHRcdH0gKTtcblxuXHRcdC8vIE1ha2UgdGhlIGRlZmVycmVkIGEgcHJvbWlzZVxuXHRcdHByb21pc2UucHJvbWlzZSggZGVmZXJyZWQgKTtcblxuXHRcdC8vIENhbGwgZ2l2ZW4gZnVuYyBpZiBhbnlcblx0XHRpZiAoIGZ1bmMgKSB7XG5cdFx0XHRmdW5jLmNhbGwoIGRlZmVycmVkLCBkZWZlcnJlZCApO1xuXHRcdH1cblxuXHRcdC8vIEFsbCBkb25lIVxuXHRcdHJldHVybiBkZWZlcnJlZDtcblx0fSxcblxuXHQvLyBEZWZlcnJlZCBoZWxwZXJcblx0d2hlbjogZnVuY3Rpb24oIHNpbmdsZVZhbHVlICkge1xuXHRcdHZhclxuXG5cdFx0XHQvLyBjb3VudCBvZiB1bmNvbXBsZXRlZCBzdWJvcmRpbmF0ZXNcblx0XHRcdHJlbWFpbmluZyA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cblx0XHRcdC8vIGNvdW50IG9mIHVucHJvY2Vzc2VkIGFyZ3VtZW50c1xuXHRcdFx0aSA9IHJlbWFpbmluZyxcblxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgZnVsZmlsbG1lbnQgZGF0YVxuXHRcdFx0cmVzb2x2ZUNvbnRleHRzID0gQXJyYXkoIGkgKSxcblx0XHRcdHJlc29sdmVWYWx1ZXMgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSxcblxuXHRcdFx0Ly8gdGhlIG1hc3RlciBEZWZlcnJlZFxuXHRcdFx0bWFzdGVyID0galF1ZXJ5LkRlZmVycmVkKCksXG5cblx0XHRcdC8vIHN1Ym9yZGluYXRlIGNhbGxiYWNrIGZhY3Rvcnlcblx0XHRcdHVwZGF0ZUZ1bmMgPSBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXNvbHZlQ29udGV4dHNbIGkgXSA9IHRoaXM7XG5cdFx0XHRcdFx0cmVzb2x2ZVZhbHVlc1sgaSBdID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSA6IHZhbHVlO1xuXHRcdFx0XHRcdGlmICggISggLS1yZW1haW5pbmcgKSApIHtcblx0XHRcdFx0XHRcdG1hc3Rlci5yZXNvbHZlV2l0aCggcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblxuXHRcdC8vIFNpbmdsZS0gYW5kIGVtcHR5IGFyZ3VtZW50cyBhcmUgYWRvcHRlZCBsaWtlIFByb21pc2UucmVzb2x2ZVxuXHRcdGlmICggcmVtYWluaW5nIDw9IDEgKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCBzaW5nbGVWYWx1ZSwgbWFzdGVyLmRvbmUoIHVwZGF0ZUZ1bmMoIGkgKSApLnJlc29sdmUsIG1hc3Rlci5yZWplY3QsXG5cdFx0XHRcdCFyZW1haW5pbmcgKTtcblxuXHRcdFx0Ly8gVXNlIC50aGVuKCkgdG8gdW53cmFwIHNlY29uZGFyeSB0aGVuYWJsZXMgKGNmLiBnaC0zMDAwKVxuXHRcdFx0aWYgKCBtYXN0ZXIuc3RhdGUoKSA9PT0gXCJwZW5kaW5nXCIgfHxcblx0XHRcdFx0aXNGdW5jdGlvbiggcmVzb2x2ZVZhbHVlc1sgaSBdICYmIHJlc29sdmVWYWx1ZXNbIGkgXS50aGVuICkgKSB7XG5cblx0XHRcdFx0cmV0dXJuIG1hc3Rlci50aGVuKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gTXVsdGlwbGUgYXJndW1lbnRzIGFyZSBhZ2dyZWdhdGVkIGxpa2UgUHJvbWlzZS5hbGwgYXJyYXkgZWxlbWVudHNcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHJlc29sdmVWYWx1ZXNbIGkgXSwgdXBkYXRlRnVuYyggaSApLCBtYXN0ZXIucmVqZWN0ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hc3Rlci5wcm9taXNlKCk7XG5cdH1cbn0gKTtcblxuXG4vLyBUaGVzZSB1c3VhbGx5IGluZGljYXRlIGEgcHJvZ3JhbW1lciBtaXN0YWtlIGR1cmluZyBkZXZlbG9wbWVudCxcbi8vIHdhcm4gYWJvdXQgdGhlbSBBU0FQIHJhdGhlciB0aGFuIHN3YWxsb3dpbmcgdGhlbSBieSBkZWZhdWx0LlxudmFyIHJlcnJvck5hbWVzID0gL14oRXZhbHxJbnRlcm5hbHxSYW5nZXxSZWZlcmVuY2V8U3ludGF4fFR5cGV8VVJJKUVycm9yJC87XG5cbmpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rID0gZnVuY3Rpb24oIGVycm9yLCBzdGFjayApIHtcblxuXHQvLyBTdXBwb3J0OiBJRSA4IC0gOSBvbmx5XG5cdC8vIENvbnNvbGUgZXhpc3RzIHdoZW4gZGV2IHRvb2xzIGFyZSBvcGVuLCB3aGljaCBjYW4gaGFwcGVuIGF0IGFueSB0aW1lXG5cdGlmICggd2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUud2FybiAmJiBlcnJvciAmJiByZXJyb3JOYW1lcy50ZXN0KCBlcnJvci5uYW1lICkgKSB7XG5cdFx0d2luZG93LmNvbnNvbGUud2FybiggXCJqUXVlcnkuRGVmZXJyZWQgZXhjZXB0aW9uOiBcIiArIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBzdGFjayApO1xuXHR9XG59O1xuXG5cblxuXG5qUXVlcnkucmVhZHlFeGNlcHRpb24gPSBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHR0aHJvdyBlcnJvcjtcblx0fSApO1xufTtcblxuXG5cblxuLy8gVGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5XG52YXIgcmVhZHlMaXN0ID0galF1ZXJ5LkRlZmVycmVkKCk7XG5cbmpRdWVyeS5mbi5yZWFkeSA9IGZ1bmN0aW9uKCBmbiApIHtcblxuXHRyZWFkeUxpc3Rcblx0XHQudGhlbiggZm4gKVxuXG5cdFx0Ly8gV3JhcCBqUXVlcnkucmVhZHlFeGNlcHRpb24gaW4gYSBmdW5jdGlvbiBzbyB0aGF0IHRoZSBsb29rdXBcblx0XHQvLyBoYXBwZW5zIGF0IHRoZSB0aW1lIG9mIGVycm9yIGhhbmRsaW5nIGluc3RlYWQgb2YgY2FsbGJhY2tcblx0XHQvLyByZWdpc3RyYXRpb24uXG5cdFx0LmNhdGNoKCBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdFx0XHRqUXVlcnkucmVhZHlFeGNlcHRpb24oIGVycm9yICk7XG5cdFx0fSApO1xuXG5cdHJldHVybiB0aGlzO1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIElzIHRoZSBET00gcmVhZHkgdG8gYmUgdXNlZD8gU2V0IHRvIHRydWUgb25jZSBpdCBvY2N1cnMuXG5cdGlzUmVhZHk6IGZhbHNlLFxuXG5cdC8vIEEgY291bnRlciB0byB0cmFjayBob3cgbWFueSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmVcblx0Ly8gdGhlIHJlYWR5IGV2ZW50IGZpcmVzLiBTZWUgIzY3ODFcblx0cmVhZHlXYWl0OiAxLFxuXG5cdC8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHlcblx0cmVhZHk6IGZ1bmN0aW9uKCB3YWl0ICkge1xuXG5cdFx0Ly8gQWJvcnQgaWYgdGhlcmUgYXJlIHBlbmRpbmcgaG9sZHMgb3Igd2UncmUgYWxyZWFkeSByZWFkeVxuXHRcdGlmICggd2FpdCA9PT0gdHJ1ZSA/IC0talF1ZXJ5LnJlYWR5V2FpdCA6IGpRdWVyeS5pc1JlYWR5ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJlbWVtYmVyIHRoYXQgdGhlIERPTSBpcyByZWFkeVxuXHRcdGpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTtcblxuXHRcdC8vIElmIGEgbm9ybWFsIERPTSBSZWFkeSBldmVudCBmaXJlZCwgZGVjcmVtZW50LCBhbmQgd2FpdCBpZiBuZWVkIGJlXG5cdFx0aWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5LnJlYWR5V2FpdCA+IDAgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlcmUgYXJlIGZ1bmN0aW9ucyBib3VuZCwgdG8gZXhlY3V0ZVxuXHRcdHJlYWR5TGlzdC5yZXNvbHZlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5IF0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkucmVhZHkudGhlbiA9IHJlYWR5TGlzdC50aGVuO1xuXG4vLyBUaGUgcmVhZHkgZXZlbnQgaGFuZGxlciBhbmQgc2VsZiBjbGVhbnVwIG1ldGhvZFxuZnVuY3Rpb24gY29tcGxldGVkKCkge1xuXHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG5cdGpRdWVyeS5yZWFkeSgpO1xufVxuXG4vLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZFxuLy8gYWZ0ZXIgdGhlIGJyb3dzZXIgZXZlbnQgaGFzIGFscmVhZHkgb2NjdXJyZWQuXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMCBvbmx5XG4vLyBPbGRlciBJRSBzb21ldGltZXMgc2lnbmFscyBcImludGVyYWN0aXZlXCIgdG9vIHNvb25cbmlmICggZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiIHx8XG5cdCggZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gXCJsb2FkaW5nXCIgJiYgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCApICkge1xuXG5cdC8vIEhhbmRsZSBpdCBhc3luY2hyb25vdXNseSB0byBhbGxvdyBzY3JpcHRzIHRoZSBvcHBvcnR1bml0eSB0byBkZWxheSByZWFkeVxuXHR3aW5kb3cuc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5ICk7XG5cbn0gZWxzZSB7XG5cblx0Ly8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxsYmFja1xuXHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cblx0Ly8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcbn1cblxuXG5cblxuLy8gTXVsdGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2YWx1ZXMgb2YgYSBjb2xsZWN0aW9uXG4vLyBUaGUgdmFsdWUvcyBjYW4gb3B0aW9uYWxseSBiZSBleGVjdXRlZCBpZiBpdCdzIGEgZnVuY3Rpb25cbnZhciBhY2Nlc3MgPSBmdW5jdGlvbiggZWxlbXMsIGZuLCBrZXksIHZhbHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0LCByYXcgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSBlbGVtcy5sZW5ndGgsXG5cdFx0YnVsayA9IGtleSA9PSBudWxsO1xuXG5cdC8vIFNldHMgbWFueSB2YWx1ZXNcblx0aWYgKCB0b1R5cGUoIGtleSApID09PSBcIm9iamVjdFwiICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cdFx0Zm9yICggaSBpbiBrZXkgKSB7XG5cdFx0XHRhY2Nlc3MoIGVsZW1zLCBmbiwgaSwga2V5WyBpIF0sIHRydWUsIGVtcHR5R2V0LCByYXcgKTtcblx0XHR9XG5cblx0Ly8gU2V0cyBvbmUgdmFsdWVcblx0fSBlbHNlIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXG5cdFx0aWYgKCAhaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJhdyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBidWxrICkge1xuXG5cdFx0XHQvLyBCdWxrIG9wZXJhdGlvbnMgcnVuIGFnYWluc3QgdGhlIGVudGlyZSBzZXRcblx0XHRcdGlmICggcmF3ICkge1xuXHRcdFx0XHRmbi5jYWxsKCBlbGVtcywgdmFsdWUgKTtcblx0XHRcdFx0Zm4gPSBudWxsO1xuXG5cdFx0XHQvLyAuLi5leGNlcHQgd2hlbiBleGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRidWxrID0gZm47XG5cdFx0XHRcdGZuID0gZnVuY3Rpb24oIGVsZW0sIGtleSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGJ1bGsuY2FsbCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRmbihcblx0XHRcdFx0XHRlbGVtc1sgaSBdLCBrZXksIHJhdyA/XG5cdFx0XHRcdFx0dmFsdWUgOlxuXHRcdFx0XHRcdHZhbHVlLmNhbGwoIGVsZW1zWyBpIF0sIGksIGZuKCBlbGVtc1sgaSBdLCBrZXkgKSApXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKCBjaGFpbmFibGUgKSB7XG5cdFx0cmV0dXJuIGVsZW1zO1xuXHR9XG5cblx0Ly8gR2V0c1xuXHRpZiAoIGJ1bGsgKSB7XG5cdFx0cmV0dXJuIGZuLmNhbGwoIGVsZW1zICk7XG5cdH1cblxuXHRyZXR1cm4gbGVuID8gZm4oIGVsZW1zWyAwIF0sIGtleSApIDogZW1wdHlHZXQ7XG59O1xuXG5cbi8vIE1hdGNoZXMgZGFzaGVkIHN0cmluZyBmb3IgY2FtZWxpemluZ1xudmFyIHJtc1ByZWZpeCA9IC9eLW1zLS8sXG5cdHJkYXNoQWxwaGEgPSAvLShbYS16XSkvZztcblxuLy8gVXNlZCBieSBjYW1lbENhc2UgYXMgY2FsbGJhY2sgdG8gcmVwbGFjZSgpXG5mdW5jdGlvbiBmY2FtZWxDYXNlKCBhbGwsIGxldHRlciApIHtcblx0cmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpO1xufVxuXG4vLyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhlIGNzcyBhbmQgZGF0YSBtb2R1bGVzXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG4vLyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAoIzk1NzIpXG5mdW5jdGlvbiBjYW1lbENhc2UoIHN0cmluZyApIHtcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsIFwibXMtXCIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7XG59XG52YXIgYWNjZXB0RGF0YSA9IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHQvLyBBY2NlcHRzIG9ubHk6XG5cdC8vICAtIE5vZGVcblx0Ly8gICAgLSBOb2RlLkVMRU1FTlRfTk9ERVxuXHQvLyAgICAtIE5vZGUuRE9DVU1FTlRfTk9ERVxuXHQvLyAgLSBPYmplY3Rcblx0Ly8gICAgLSBBbnlcblx0cmV0dXJuIG93bmVyLm5vZGVUeXBlID09PSAxIHx8IG93bmVyLm5vZGVUeXBlID09PSA5IHx8ICEoICtvd25lci5ub2RlVHlwZSApO1xufTtcblxuXG5cblxuZnVuY3Rpb24gRGF0YSgpIHtcblx0dGhpcy5leHBhbmRvID0galF1ZXJ5LmV4cGFuZG8gKyBEYXRhLnVpZCsrO1xufVxuXG5EYXRhLnVpZCA9IDE7XG5cbkRhdGEucHJvdG90eXBlID0ge1xuXG5cdGNhY2hlOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGVcblx0XHR2YXIgdmFsdWUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHQvLyBJZiBub3QsIGNyZWF0ZSBvbmVcblx0XHRpZiAoICF2YWx1ZSApIHtcblx0XHRcdHZhbHVlID0ge307XG5cblx0XHRcdC8vIFdlIGNhbiBhY2NlcHQgZGF0YSBmb3Igbm9uLWVsZW1lbnQgbm9kZXMgaW4gbW9kZXJuIGJyb3dzZXJzLFxuXHRcdFx0Ly8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSAjODMzNS5cblx0XHRcdC8vIEFsd2F5cyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LlxuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBvd25lciApICkge1xuXG5cdFx0XHRcdC8vIElmIGl0IGlzIGEgbm9kZSB1bmxpa2VseSB0byBiZSBzdHJpbmdpZnktZWQgb3IgbG9vcGVkIG92ZXJcblx0XHRcdFx0Ly8gdXNlIHBsYWluIGFzc2lnbm1lbnRcblx0XHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB2YWx1ZTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2Ugc2VjdXJlIGl0IGluIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHlcblx0XHRcdFx0Ly8gY29uZmlndXJhYmxlIG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUgcHJvcGVydHkgdG8gYmVcblx0XHRcdFx0Ly8gZGVsZXRlZCB3aGVuIGRhdGEgaXMgcmVtb3ZlZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggb3duZXIsIHRoaXMuZXhwYW5kbywge1xuXHRcdFx0XHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXHRzZXQ6IGZ1bmN0aW9uKCBvd25lciwgZGF0YSwgdmFsdWUgKSB7XG5cdFx0dmFyIHByb3AsXG5cdFx0XHRjYWNoZSA9IHRoaXMuY2FjaGUoIG93bmVyICk7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIGtleSwgdmFsdWUgXSBhcmdzXG5cdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBkYXRhICkgXSA9IHZhbHVlO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCB7IHByb3BlcnRpZXMgfSBdIGFyZ3Ncblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb3B5IHRoZSBwcm9wZXJ0aWVzIG9uZS1ieS1vbmUgdG8gdGhlIGNhY2hlIG9iamVjdFxuXHRcdFx0Zm9yICggcHJvcCBpbiBkYXRhICkge1xuXHRcdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBwcm9wICkgXSA9IGRhdGFbIHByb3AgXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNhY2hlO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzLmNhY2hlKCBvd25lciApIDpcblxuXHRcdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdICYmIG93bmVyWyB0aGlzLmV4cGFuZG8gXVsgY2FtZWxDYXNlKCBrZXkgKSBdO1xuXHR9LFxuXHRhY2Nlc3M6IGZ1bmN0aW9uKCBvd25lciwga2V5LCB2YWx1ZSApIHtcblxuXHRcdC8vIEluIGNhc2VzIHdoZXJlIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gTm8ga2V5IHdhcyBzcGVjaWZpZWRcblx0XHQvLyAgIDIuIEEgc3RyaW5nIGtleSB3YXMgc3BlY2lmaWVkLCBidXQgbm8gdmFsdWUgcHJvdmlkZWRcblx0XHQvL1xuXHRcdC8vIFRha2UgdGhlIFwicmVhZFwiIHBhdGggYW5kIGFsbG93IHRoZSBnZXQgbWV0aG9kIHRvIGRldGVybWluZVxuXHRcdC8vIHdoaWNoIHZhbHVlIHRvIHJldHVybiwgcmVzcGVjdGl2ZWx5IGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gVGhlIGVudGlyZSBjYWNoZSBvYmplY3Rcblx0XHQvLyAgIDIuIFRoZSBkYXRhIHN0b3JlZCBhdCB0aGUga2V5XG5cdFx0Ly9cblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdCggKCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIiApICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSApIHtcblxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0KCBvd25lciwga2V5ICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2hlbiB0aGUga2V5IGlzIG5vdCBhIHN0cmluZywgb3IgYm90aCBhIGtleSBhbmQgdmFsdWVcblx0XHQvLyBhcmUgc3BlY2lmaWVkLCBzZXQgb3IgZXh0ZW5kIChleGlzdGluZyBvYmplY3RzKSB3aXRoIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gQW4gb2JqZWN0IG9mIHByb3BlcnRpZXNcblx0XHQvLyAgIDIuIEEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vXG5cdFx0dGhpcy5zZXQoIG93bmVyLCBrZXksIHZhbHVlICk7XG5cblx0XHQvLyBTaW5jZSB0aGUgXCJzZXRcIiBwYXRoIGNhbiBoYXZlIHR3byBwb3NzaWJsZSBlbnRyeSBwb2ludHNcblx0XHQvLyByZXR1cm4gdGhlIGV4cGVjdGVkIGRhdGEgYmFzZWQgb24gd2hpY2ggcGF0aCB3YXMgdGFrZW5bKl1cblx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoga2V5O1xuXHR9LFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHZhciBpLFxuXHRcdFx0Y2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHRpZiAoIGNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGtleXNcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSgga2V5ICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYga2V5IGlzIGFuIGFycmF5IG9mIGtleXMuLi5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHNldCBjYW1lbENhc2Uga2V5cywgc28gcmVtb3ZlIHRoYXQuXG5cdFx0XHRcdGtleSA9IGtleS5tYXAoIGNhbWVsQ2FzZSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0a2V5ID0gY2FtZWxDYXNlKCBrZXkgKTtcblxuXHRcdFx0XHQvLyBJZiBhIGtleSB3aXRoIHRoZSBzcGFjZXMgZXhpc3RzLCB1c2UgaXQuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgY3JlYXRlIGFuIGFycmF5IGJ5IG1hdGNoaW5nIG5vbi13aGl0ZXNwYWNlXG5cdFx0XHRcdGtleSA9IGtleSBpbiBjYWNoZSA/XG5cdFx0XHRcdFx0WyBrZXkgXSA6XG5cdFx0XHRcdFx0KCBrZXkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpID0ga2V5Lmxlbmd0aDtcblxuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5WyBpIF0gXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgdGhlIGV4cGFuZG8gaWYgdGhlcmUncyBubyBtb3JlIGRhdGFcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1XG5cdFx0XHQvLyBXZWJraXQgJiBCbGluayBwZXJmb3JtYW5jZSBzdWZmZXJzIHdoZW4gZGVsZXRpbmcgcHJvcGVydGllc1xuXHRcdFx0Ly8gZnJvbSBET00gbm9kZXMsIHNvIHNldCB0byB1bmRlZmluZWQgaW5zdGVhZFxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzc4NjA3IChidWcgcmVzdHJpY3RlZClcblx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlbGV0ZSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRoYXNEYXRhOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cdFx0dmFyIGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdHJldHVybiBjYWNoZSAhPT0gdW5kZWZpbmVkICYmICFqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKTtcblx0fVxufTtcbnZhciBkYXRhUHJpdiA9IG5ldyBEYXRhKCk7XG5cbnZhciBkYXRhVXNlciA9IG5ldyBEYXRhKCk7XG5cblxuXG4vL1x0SW1wbGVtZW50YXRpb24gU3VtbWFyeVxuLy9cbi8vXHQxLiBFbmZvcmNlIEFQSSBzdXJmYWNlIGFuZCBzZW1hbnRpYyBjb21wYXRpYmlsaXR5IHdpdGggMS45LnggYnJhbmNoXG4vL1x0Mi4gSW1wcm92ZSB0aGUgbW9kdWxlJ3MgbWFpbnRhaW5hYmlsaXR5IGJ5IHJlZHVjaW5nIHRoZSBzdG9yYWdlXG4vL1x0XHRwYXRocyB0byBhIHNpbmdsZSBtZWNoYW5pc20uXG4vL1x0My4gVXNlIHRoZSBzYW1lIHNpbmdsZSBtZWNoYW5pc20gdG8gc3VwcG9ydCBcInByaXZhdGVcIiBhbmQgXCJ1c2VyXCIgZGF0YS5cbi8vXHQ0LiBfTmV2ZXJfIGV4cG9zZSBcInByaXZhdGVcIiBkYXRhIHRvIHVzZXIgY29kZSAoVE9ETzogRHJvcCBfZGF0YSwgX3JlbW92ZURhdGEpXG4vL1x0NS4gQXZvaWQgZXhwb3NpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvbiB1c2VyIG9iamVjdHMgKGVnLiBleHBhbmRvIHByb3BlcnRpZXMpXG4vL1x0Ni4gUHJvdmlkZSBhIGNsZWFyIHBhdGggZm9yIGltcGxlbWVudGF0aW9uIHVwZ3JhZGUgdG8gV2Vha01hcCBpbiAyMDE0XG5cbnZhciByYnJhY2UgPSAvXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC8sXG5cdHJtdWx0aURhc2ggPSAvW0EtWl0vZztcblxuZnVuY3Rpb24gZ2V0RGF0YSggZGF0YSApIHtcblx0aWYgKCBkYXRhID09PSBcInRydWVcIiApIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJmYWxzZVwiICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJudWxsXCIgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBPbmx5IGNvbnZlcnQgdG8gYSBudW1iZXIgaWYgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZ1xuXHRpZiAoIGRhdGEgPT09ICtkYXRhICsgXCJcIiApIHtcblx0XHRyZXR1cm4gK2RhdGE7XG5cdH1cblxuXHRpZiAoIHJicmFjZS50ZXN0KCBkYXRhICkgKSB7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2UoIGRhdGEgKTtcblx0fVxuXG5cdHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICkge1xuXHR2YXIgbmFtZTtcblxuXHQvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbnRlcm5hbGx5LCB0cnkgdG8gZmV0Y2ggYW55XG5cdC8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZVxuXHRpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdG5hbWUgPSBcImRhdGEtXCIgKyBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgXCItJCZcIiApLnRvTG93ZXJDYXNlKCk7XG5cdFx0ZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZGF0YSA9IGdldERhdGEoIGRhdGEgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge31cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyXG5cdFx0XHRkYXRhVXNlci5zZXQoIGVsZW0sIGtleSwgZGF0YSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGF0YTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuaGFzRGF0YSggZWxlbSApIHx8IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKTtcblx0fSxcblxuXHRkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVVzZXIucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH0sXG5cblx0Ly8gVE9ETzogTm93IHRoYXQgYWxsIGNhbGxzIHRvIF9kYXRhIGFuZCBfcmVtb3ZlRGF0YSBoYXZlIGJlZW4gcmVwbGFjZWRcblx0Ly8gd2l0aCBkaXJlY3QgY2FsbHMgdG8gZGF0YVByaXYgbWV0aG9kcywgdGhlc2UgY2FuIGJlIGRlcHJlY2F0ZWQuXG5cdF9kYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0X3JlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGF0YTogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0dmFyIGksIG5hbWUsIGRhdGEsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0YXR0cnMgPSBlbGVtICYmIGVsZW0uYXR0cmlidXRlcztcblxuXHRcdC8vIEdldHMgYWxsIHZhbHVlc1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHRoaXMubGVuZ3RoICkge1xuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtICk7XG5cblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICFkYXRhUHJpdi5nZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIgKSApIHtcblx0XHRcdFx0XHRpID0gYXR0cnMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBUaGUgYXR0cnMgZWxlbWVudHMgY2FuIGJlIG51bGwgKCMxNDg5NClcblx0XHRcdFx0XHRcdGlmICggYXR0cnNbIGkgXSApIHtcblx0XHRcdFx0XHRcdFx0bmFtZSA9IGF0dHJzWyBpIF0ubmFtZTtcblx0XHRcdFx0XHRcdFx0aWYgKCBuYW1lLmluZGV4T2YoIFwiZGF0YS1cIiApID09PSAwICkge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgPSBjYW1lbENhc2UoIG5hbWUuc2xpY2UoIDUgKSApO1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9XG5cblx0XHQvLyBTZXRzIG11bHRpcGxlIHZhbHVlc1xuXHRcdGlmICggdHlwZW9mIGtleSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBkYXRhO1xuXG5cdFx0XHQvLyBUaGUgY2FsbGluZyBqUXVlcnkgb2JqZWN0IChlbGVtZW50IG1hdGNoZXMpIGlzIG5vdCBlbXB0eVxuXHRcdFx0Ly8gKGFuZCB0aGVyZWZvcmUgaGFzIGFuIGVsZW1lbnQgYXBwZWFycyBhdCB0aGlzWyAwIF0pIGFuZCB0aGVcblx0XHRcdC8vIGB2YWx1ZWAgcGFyYW1ldGVyIHdhcyBub3QgdW5kZWZpbmVkLiBBbiBlbXB0eSBqUXVlcnkgb2JqZWN0XG5cdFx0XHQvLyB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBmb3IgZWxlbSA9IHRoaXNbIDAgXSB3aGljaCB3aWxsXG5cdFx0XHQvLyB0aHJvdyBhbiBleGNlcHRpb24gaWYgYW4gYXR0ZW1wdCB0byByZWFkIGEgZGF0YSBjYWNoZSBpcyBtYWRlLlxuXHRcdFx0aWYgKCBlbGVtICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBnZXQgZGF0YSBmcm9tIHRoZSBjYWNoZVxuXHRcdFx0XHQvLyBUaGUga2V5IHdpbGwgYWx3YXlzIGJlIGNhbWVsQ2FzZWQgaW4gRGF0YVxuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIFwiZGlzY292ZXJcIiB0aGUgZGF0YSBpblxuXHRcdFx0XHQvLyBIVE1MNSBjdXN0b20gZGF0YS0qIGF0dHJzXG5cdFx0XHRcdGRhdGEgPSBkYXRhQXR0ciggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2UgdHJpZWQgcmVhbGx5IGhhcmQsIGJ1dCB0aGUgZGF0YSBkb2Vzbid0IGV4aXN0LlxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCB0aGUgZGF0YS4uLlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBXZSBhbHdheXMgc3RvcmUgdGhlIGNhbWVsQ2FzZWQga2V5XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5LCB2YWx1ZSApO1xuXHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSwgbnVsbCwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkYXRhVXNlci5yZW1vdmUoIHRoaXMsIGtleSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBxdWV1ZTtcblxuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHR5cGUgPSAoIHR5cGUgfHwgXCJmeFwiICkgKyBcInF1ZXVlXCI7XG5cdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmdldCggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHQvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwXG5cdFx0XHRpZiAoIGRhdGEgKSB7XG5cdFx0XHRcdGlmICggIXF1ZXVlIHx8IEFycmF5LmlzQXJyYXkoIGRhdGEgKSApIHtcblx0XHRcdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cXVldWUucHVzaCggZGF0YSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcXVldWUgfHwgW107XG5cdFx0fVxuXHR9LFxuXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLFxuXHRcdFx0c3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsXG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCksXG5cdFx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSApLFxuXHRcdFx0bmV4dCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggZWxlbSwgdHlwZSApO1xuXHRcdFx0fTtcblxuXHRcdC8vIElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWxcblx0XHRpZiAoIGZuID09PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdHN0YXJ0TGVuZ3RoLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblxuXHRcdFx0Ly8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZ1xuXHRcdFx0Ly8gYXV0b21hdGljYWxseSBkZXF1ZXVlZFxuXHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgKSB7XG5cdFx0XHRcdHF1ZXVlLnVuc2hpZnQoIFwiaW5wcm9ncmVzc1wiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb25cblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0Zm4uY2FsbCggZWxlbSwgbmV4dCwgaG9va3MgKTtcblx0XHR9XG5cblx0XHRpZiAoICFzdGFydExlbmd0aCAmJiBob29rcyApIHtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gTm90IHB1YmxpYyAtIGdlbmVyYXRlIGEgcXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybiB0aGUgY3VycmVudCBvbmVcblx0X3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHZhciBrZXkgPSB0eXBlICsgXCJxdWV1ZUhvb2tzXCI7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmdldCggZWxlbSwga2V5ICkgfHwgZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBrZXksIHtcblx0XHRcdGVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKS5hZGQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFsgdHlwZSArIFwicXVldWVcIiwga2V5IF0gKTtcblx0XHRcdH0gKVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgc2V0dGVyID0gMjtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRkYXRhID0gdHlwZTtcblx0XHRcdHR5cGUgPSBcImZ4XCI7XG5cdFx0XHRzZXR0ZXItLTtcblx0XHR9XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPCBzZXR0ZXIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWyAwIF0sIHR5cGUgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMgOlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIGEgaG9va3MgZm9yIHRoaXMgcXVldWVcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgJiYgcXVldWVbIDAgXSAhPT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHR9LFxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0fSApO1xuXHR9LFxuXHRjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdH0sXG5cblx0Ly8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZVxuXHQvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdClcblx0cHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iaiApIHtcblx0XHR2YXIgdG1wLFxuXHRcdFx0Y291bnQgPSAxLFxuXHRcdFx0ZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGVsZW1lbnRzID0gdGhpcyxcblx0XHRcdGkgPSB0aGlzLmxlbmd0aCxcblx0XHRcdHJlc29sdmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhKCAtLWNvdW50ICkgKSB7XG5cdFx0XHRcdFx0ZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRvYmogPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0bXAgPSBkYXRhUHJpdi5nZXQoIGVsZW1lbnRzWyBpIF0sIHR5cGUgKyBcInF1ZXVlSG9va3NcIiApO1xuXHRcdFx0aWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkge1xuXHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHR0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJlc29sdmUoKTtcblx0XHRyZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7XG5cdH1cbn0gKTtcbnZhciBwbnVtID0gKCAvWystXT8oPzpcXGQqXFwufClcXGQrKD86W2VFXVsrLV0/XFxkK3wpLyApLnNvdXJjZTtcblxudmFyIHJjc3NOdW0gPSBuZXcgUmVnRXhwKCBcIl4oPzooWystXSk9fCkoXCIgKyBwbnVtICsgXCIpKFthLXolXSopJFwiLCBcImlcIiApO1xuXG5cbnZhciBjc3NFeHBhbmQgPSBbIFwiVG9wXCIsIFwiUmlnaHRcIiwgXCJCb3R0b21cIiwgXCJMZWZ0XCIgXTtcblxudmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuXG5cblx0dmFyIGlzQXR0YWNoZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApO1xuXHRcdH0sXG5cdFx0Y29tcG9zZWQgPSB7IGNvbXBvc2VkOiB0cnVlIH07XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4KywgaU9TIDEwLjAgLSAxMC4yIG9ubHlcblx0Ly8gQ2hlY2sgYXR0YWNobWVudCBhY3Jvc3Mgc2hhZG93IERPTSBib3VuZGFyaWVzIHdoZW4gcG9zc2libGUgKGdoLTM1MDQpXG5cdC8vIFN1cHBvcnQ6IGlPUyAxMC4wLTEwLjIgb25seVxuXHQvLyBFYXJseSBpT1MgMTAgdmVyc2lvbnMgc3VwcG9ydCBgYXR0YWNoU2hhZG93YCBidXQgbm90IGBnZXRSb290Tm9kZWAsXG5cdC8vIGxlYWRpbmcgdG8gZXJyb3JzLiBXZSBuZWVkIHRvIGNoZWNrIGZvciBgZ2V0Um9vdE5vZGVgLlxuXHRpZiAoIGRvY3VtZW50RWxlbWVudC5nZXRSb290Tm9kZSApIHtcblx0XHRpc0F0dGFjaGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKSB8fFxuXHRcdFx0XHRlbGVtLmdldFJvb3ROb2RlKCBjb21wb3NlZCApID09PSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0fTtcblx0fVxudmFyIGlzSGlkZGVuV2l0aGluVHJlZSA9IGZ1bmN0aW9uKCBlbGVtLCBlbCApIHtcblxuXHRcdC8vIGlzSGlkZGVuV2l0aGluVHJlZSBtaWdodCBiZSBjYWxsZWQgZnJvbSBqUXVlcnkjZmlsdGVyIGZ1bmN0aW9uO1xuXHRcdC8vIGluIHRoYXQgY2FzZSwgZWxlbWVudCB3aWxsIGJlIHNlY29uZCBhcmd1bWVudFxuXHRcdGVsZW0gPSBlbCB8fCBlbGVtO1xuXG5cdFx0Ly8gSW5saW5lIHN0eWxlIHRydW1wcyBhbGxcblx0XHRyZXR1cm4gZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIiB8fFxuXHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmXG5cblx0XHRcdC8vIE90aGVyd2lzZSwgY2hlY2sgY29tcHV0ZWQgc3R5bGVcblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MyAtIDQ1XG5cdFx0XHQvLyBEaXNjb25uZWN0ZWQgZWxlbWVudHMgY2FuIGhhdmUgY29tcHV0ZWQgZGlzcGxheTogbm9uZSwgc28gZmlyc3QgY29uZmlybSB0aGF0IGVsZW0gaXNcblx0XHRcdC8vIGluIHRoZSBkb2N1bWVudC5cblx0XHRcdGlzQXR0YWNoZWQoIGVsZW0gKSAmJlxuXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApID09PSBcIm5vbmVcIjtcblx0fTtcblxudmFyIHN3YXAgPSBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgY2FsbGJhY2ssIGFyZ3MgKSB7XG5cdHZhciByZXQsIG5hbWUsXG5cdFx0b2xkID0ge307XG5cblx0Ly8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1ZXMsIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmVzXG5cdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRvbGRbIG5hbWUgXSA9IGVsZW0uc3R5bGVbIG5hbWUgXTtcblx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSBvcHRpb25zWyBuYW1lIF07XG5cdH1cblxuXHRyZXQgPSBjYWxsYmFjay5hcHBseSggZWxlbSwgYXJncyB8fCBbXSApO1xuXG5cdC8vIFJldmVydCB0aGUgb2xkIHZhbHVlc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufTtcblxuXG5cblxuZnVuY3Rpb24gYWRqdXN0Q1NTKCBlbGVtLCBwcm9wLCB2YWx1ZVBhcnRzLCB0d2VlbiApIHtcblx0dmFyIGFkanVzdGVkLCBzY2FsZSxcblx0XHRtYXhJdGVyYXRpb25zID0gMjAsXG5cdFx0Y3VycmVudFZhbHVlID0gdHdlZW4gP1xuXHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5jdXIoKTtcblx0XHRcdH0gOlxuXHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wLCBcIlwiICk7XG5cdFx0XHR9LFxuXHRcdGluaXRpYWwgPSBjdXJyZW50VmFsdWUoKSxcblx0XHR1bml0ID0gdmFsdWVQYXJ0cyAmJiB2YWx1ZVBhcnRzWyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyBcIlwiIDogXCJweFwiICksXG5cblx0XHQvLyBTdGFydGluZyB2YWx1ZSBjb21wdXRhdGlvbiBpcyByZXF1aXJlZCBmb3IgcG90ZW50aWFsIHVuaXQgbWlzbWF0Y2hlc1xuXHRcdGluaXRpYWxJblVuaXQgPSBlbGVtLm5vZGVUeXBlICYmXG5cdFx0XHQoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSB8fCB1bml0ICE9PSBcInB4XCIgJiYgK2luaXRpYWwgKSAmJlxuXHRcdFx0cmNzc051bS5leGVjKCBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wICkgKTtcblxuXHRpZiAoIGluaXRpYWxJblVuaXQgJiYgaW5pdGlhbEluVW5pdFsgMyBdICE9PSB1bml0ICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTU0XG5cdFx0Ly8gSGFsdmUgdGhlIGl0ZXJhdGlvbiB0YXJnZXQgdmFsdWUgdG8gcHJldmVudCBpbnRlcmZlcmVuY2UgZnJvbSBDU1MgdXBwZXIgYm91bmRzIChnaC0yMTQ0KVxuXHRcdGluaXRpYWwgPSBpbml0aWFsIC8gMjtcblxuXHRcdC8vIFRydXN0IHVuaXRzIHJlcG9ydGVkIGJ5IGpRdWVyeS5jc3Ncblx0XHR1bml0ID0gdW5pdCB8fCBpbml0aWFsSW5Vbml0WyAzIF07XG5cblx0XHQvLyBJdGVyYXRpdmVseSBhcHByb3hpbWF0ZSBmcm9tIGEgbm9uemVybyBzdGFydGluZyBwb2ludFxuXHRcdGluaXRpYWxJblVuaXQgPSAraW5pdGlhbCB8fCAxO1xuXG5cdFx0d2hpbGUgKCBtYXhJdGVyYXRpb25zLS0gKSB7XG5cblx0XHRcdC8vIEV2YWx1YXRlIGFuZCB1cGRhdGUgb3VyIGJlc3QgZ3Vlc3MgKGRvdWJsaW5nIGd1ZXNzZXMgdGhhdCB6ZXJvIG91dCkuXG5cdFx0XHQvLyBGaW5pc2ggaWYgdGhlIHNjYWxlIGVxdWFscyBvciBjcm9zc2VzIDEgKG1ha2luZyB0aGUgb2xkKm5ldyBwcm9kdWN0IG5vbi1wb3NpdGl2ZSkuXG5cdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cdFx0XHRpZiAoICggMSAtIHNjYWxlICkgKiAoIDEgLSAoIHNjYWxlID0gY3VycmVudFZhbHVlKCkgLyBpbml0aWFsIHx8IDAuNSApICkgPD0gMCApIHtcblx0XHRcdFx0bWF4SXRlcmF0aW9ucyA9IDA7XG5cdFx0XHR9XG5cdFx0XHRpbml0aWFsSW5Vbml0ID0gaW5pdGlhbEluVW5pdCAvIHNjYWxlO1xuXG5cdFx0fVxuXG5cdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgKiAyO1xuXHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB3ZSB1cGRhdGUgdGhlIHR3ZWVuIHByb3BlcnRpZXMgbGF0ZXIgb25cblx0XHR2YWx1ZVBhcnRzID0gdmFsdWVQYXJ0cyB8fCBbXTtcblx0fVxuXG5cdGlmICggdmFsdWVQYXJ0cyApIHtcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWxJblVuaXQgfHwgK2luaXRpYWwgfHwgMDtcblxuXHRcdC8vIEFwcGx5IHJlbGF0aXZlIG9mZnNldCAoKz0vLT0pIGlmIHNwZWNpZmllZFxuXHRcdGFkanVzdGVkID0gdmFsdWVQYXJ0c1sgMSBdID9cblx0XHRcdGluaXRpYWxJblVuaXQgKyAoIHZhbHVlUGFydHNbIDEgXSArIDEgKSAqIHZhbHVlUGFydHNbIDIgXSA6XG5cdFx0XHQrdmFsdWVQYXJ0c1sgMiBdO1xuXHRcdGlmICggdHdlZW4gKSB7XG5cdFx0XHR0d2Vlbi51bml0ID0gdW5pdDtcblx0XHRcdHR3ZWVuLnN0YXJ0ID0gaW5pdGlhbEluVW5pdDtcblx0XHRcdHR3ZWVuLmVuZCA9IGFkanVzdGVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYWRqdXN0ZWQ7XG59XG5cblxudmFyIGRlZmF1bHREaXNwbGF5TWFwID0ge307XG5cbmZ1bmN0aW9uIGdldERlZmF1bHREaXNwbGF5KCBlbGVtICkge1xuXHR2YXIgdGVtcCxcblx0XHRkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQsXG5cdFx0bm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLFxuXHRcdGRpc3BsYXkgPSBkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXTtcblxuXHRpZiAoIGRpc3BsYXkgKSB7XG5cdFx0cmV0dXJuIGRpc3BsYXk7XG5cdH1cblxuXHR0ZW1wID0gZG9jLmJvZHkuYXBwZW5kQ2hpbGQoIGRvYy5jcmVhdGVFbGVtZW50KCBub2RlTmFtZSApICk7XG5cdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCB0ZW1wLCBcImRpc3BsYXlcIiApO1xuXG5cdHRlbXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggdGVtcCApO1xuXG5cdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0ZGlzcGxheSA9IFwiYmxvY2tcIjtcblx0fVxuXHRkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXSA9IGRpc3BsYXk7XG5cblx0cmV0dXJuIGRpc3BsYXk7XG59XG5cbmZ1bmN0aW9uIHNob3dIaWRlKCBlbGVtZW50cywgc2hvdyApIHtcblx0dmFyIGRpc3BsYXksIGVsZW0sXG5cdFx0dmFsdWVzID0gW10sXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblxuXHQvLyBEZXRlcm1pbmUgbmV3IGRpc3BsYXkgdmFsdWUgZm9yIGVsZW1lbnRzIHRoYXQgbmVlZCB0byBjaGFuZ2Vcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRlbGVtID0gZWxlbWVudHNbIGluZGV4IF07XG5cdFx0aWYgKCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXk7XG5cdFx0aWYgKCBzaG93ICkge1xuXG5cdFx0XHQvLyBTaW5jZSB3ZSBmb3JjZSB2aXNpYmlsaXR5IHVwb24gY2FzY2FkZS1oaWRkZW4gZWxlbWVudHMsIGFuIGltbWVkaWF0ZSAoYW5kIHNsb3cpXG5cdFx0XHQvLyBjaGVjayBpcyByZXF1aXJlZCBpbiB0aGlzIGZpcnN0IGxvb3AgdW5sZXNzIHdlIGhhdmUgYSBub25lbXB0eSBkaXNwbGF5IHZhbHVlIChlaXRoZXJcblx0XHRcdC8vIGlubGluZSBvciBhYm91dC10by1iZS1yZXN0b3JlZClcblx0XHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKSB8fCBudWxsO1xuXHRcdFx0XHRpZiAoICF2YWx1ZXNbIGluZGV4IF0gKSB7XG5cdFx0XHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwiXCIgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICkgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGdldERlZmF1bHREaXNwbGF5KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICggZGlzcGxheSAhPT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IFwibm9uZVwiO1xuXG5cdFx0XHRcdC8vIFJlbWVtYmVyIHdoYXQgd2UncmUgb3ZlcndyaXRpbmdcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCBlbGVtLCBcImRpc3BsYXlcIiwgZGlzcGxheSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFNldCB0aGUgZGlzcGxheSBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcCB0byBhdm9pZCBjb25zdGFudCByZWZsb3dcblx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRpZiAoIHZhbHVlc1sgaW5kZXggXSAhPSBudWxsICkge1xuXHRcdFx0ZWxlbWVudHNbIGluZGV4IF0uc3R5bGUuZGlzcGxheSA9IHZhbHVlc1sgaW5kZXggXTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudHM7XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0c2hvdzogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNob3dIaWRlKCB0aGlzLCB0cnVlICk7XG5cdH0sXG5cdGhpZGU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcyApO1xuXHR9LFxuXHR0b2dnbGU6IGZ1bmN0aW9uKCBzdGF0ZSApIHtcblx0XHRpZiAoIHR5cGVvZiBzdGF0ZSA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGUgPyB0aGlzLnNob3coKSA6IHRoaXMuaGlkZSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBpc0hpZGRlbldpdGhpblRyZWUoIHRoaXMgKSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuc2hvdygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuaGlkZSgpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xudmFyIHJjaGVja2FibGVUeXBlID0gKCAvXig/OmNoZWNrYm94fHJhZGlvKSQvaSApO1xuXG52YXIgcnRhZ05hbWUgPSAoIC88KFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKikvaSApO1xuXG52YXIgcnNjcmlwdFR5cGUgPSAoIC9eJHxebW9kdWxlJHxcXC8oPzpqYXZhfGVjbWEpc2NyaXB0L2kgKTtcblxuXG5cbi8vIFdlIGhhdmUgdG8gY2xvc2UgdGhlc2UgdGFncyB0byBzdXBwb3J0IFhIVE1MICgjMTMyMDApXG52YXIgd3JhcE1hcCA9IHtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRvcHRpb246IFsgMSwgXCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+XCIsIFwiPC9zZWxlY3Q+XCIgXSxcblxuXHQvLyBYSFRNTCBwYXJzZXJzIGRvIG5vdCBtYWdpY2FsbHkgaW5zZXJ0IGVsZW1lbnRzIGluIHRoZVxuXHQvLyBzYW1lIHdheSB0aGF0IHRhZyBzb3VwIHBhcnNlcnMgZG8uIFNvIHdlIGNhbm5vdCBzaG9ydGVuXG5cdC8vIHRoaXMgYnkgb21pdHRpbmcgPHRib2R5PiBvciBvdGhlciByZXF1aXJlZCBlbGVtZW50cy5cblx0dGhlYWQ6IFsgMSwgXCI8dGFibGU+XCIsIFwiPC90YWJsZT5cIiBdLFxuXHRjb2w6IFsgMiwgXCI8dGFibGU+PGNvbGdyb3VwPlwiLCBcIjwvY29sZ3JvdXA+PC90YWJsZT5cIiBdLFxuXHR0cjogWyAyLCBcIjx0YWJsZT48dGJvZHk+XCIsIFwiPC90Ym9keT48L3RhYmxlPlwiIF0sXG5cdHRkOiBbIDMsIFwiPHRhYmxlPjx0Ym9keT48dHI+XCIsIFwiPC90cj48L3Rib2R5PjwvdGFibGU+XCIgXSxcblxuXHRfZGVmYXVsdDogWyAwLCBcIlwiLCBcIlwiIF1cbn07XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG53cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb247XG5cbndyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7XG53cmFwTWFwLnRoID0gd3JhcE1hcC50ZDtcblxuXG5mdW5jdGlvbiBnZXRBbGwoIGNvbnRleHQsIHRhZyApIHtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdC8vIFVzZSB0eXBlb2YgdG8gYXZvaWQgemVyby1hcmd1bWVudCBtZXRob2QgaW52b2NhdGlvbiBvbiBob3N0IG9iamVjdHMgKCMxNTE1MSlcblx0dmFyIHJldDtcblxuXHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyB8fCBcIipcIiApO1xuXG5cdH0gZWxzZSBpZiAoIHR5cGVvZiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0cmV0ID0gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2Uge1xuXHRcdHJldCA9IFtdO1xuXHR9XG5cblx0aWYgKCB0YWcgPT09IHVuZGVmaW5lZCB8fCB0YWcgJiYgbm9kZU5hbWUoIGNvbnRleHQsIHRhZyApICkge1xuXHRcdHJldHVybiBqUXVlcnkubWVyZ2UoIFsgY29udGV4dCBdLCByZXQgKTtcblx0fVxuXG5cdHJldHVybiByZXQ7XG59XG5cblxuLy8gTWFyayBzY3JpcHRzIGFzIGhhdmluZyBhbHJlYWR5IGJlZW4gZXZhbHVhdGVkXG5mdW5jdGlvbiBzZXRHbG9iYWxFdmFsKCBlbGVtcywgcmVmRWxlbWVudHMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsID0gZWxlbXMubGVuZ3RoO1xuXG5cdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRkYXRhUHJpdi5zZXQoXG5cdFx0XHRlbGVtc1sgaSBdLFxuXHRcdFx0XCJnbG9iYWxFdmFsXCIsXG5cdFx0XHQhcmVmRWxlbWVudHMgfHwgZGF0YVByaXYuZ2V0KCByZWZFbGVtZW50c1sgaSBdLCBcImdsb2JhbEV2YWxcIiApXG5cdFx0KTtcblx0fVxufVxuXG5cbnZhciByaHRtbCA9IC88fCYjP1xcdys7LztcblxuZnVuY3Rpb24gYnVpbGRGcmFnbWVudCggZWxlbXMsIGNvbnRleHQsIHNjcmlwdHMsIHNlbGVjdGlvbiwgaWdub3JlZCApIHtcblx0dmFyIGVsZW0sIHRtcCwgdGFnLCB3cmFwLCBhdHRhY2hlZCwgaixcblx0XHRmcmFnbWVudCA9IGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuXHRcdG5vZGVzID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1zWyBpIF07XG5cblx0XHRpZiAoIGVsZW0gfHwgZWxlbSA9PT0gMCApIHtcblxuXHRcdFx0Ly8gQWRkIG5vZGVzIGRpcmVjdGx5XG5cdFx0XHRpZiAoIHRvVHlwZSggZWxlbSApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIGVsZW0ubm9kZVR5cGUgPyBbIGVsZW0gXSA6IGVsZW0gKTtcblxuXHRcdFx0Ly8gQ29udmVydCBub24taHRtbCBpbnRvIGEgdGV4dCBub2RlXG5cdFx0XHR9IGVsc2UgaWYgKCAhcmh0bWwudGVzdCggZWxlbSApICkge1xuXHRcdFx0XHRub2Rlcy5wdXNoKCBjb250ZXh0LmNyZWF0ZVRleHROb2RlKCBlbGVtICkgKTtcblxuXHRcdFx0Ly8gQ29udmVydCBodG1sIGludG8gRE9NIG5vZGVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0bXAgPSB0bXAgfHwgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGNvbnRleHQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICk7XG5cblx0XHRcdFx0Ly8gRGVzZXJpYWxpemUgYSBzdGFuZGFyZCByZXByZXNlbnRhdGlvblxuXHRcdFx0XHR0YWcgPSAoIHJ0YWdOYW1lLmV4ZWMoIGVsZW0gKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0d3JhcCA9IHdyYXBNYXBbIHRhZyBdIHx8IHdyYXBNYXAuX2RlZmF1bHQ7XG5cdFx0XHRcdHRtcC5pbm5lckhUTUwgPSB3cmFwWyAxIF0gKyBqUXVlcnkuaHRtbFByZWZpbHRlciggZWxlbSApICsgd3JhcFsgMiBdO1xuXG5cdFx0XHRcdC8vIERlc2NlbmQgdGhyb3VnaCB3cmFwcGVycyB0byB0aGUgcmlnaHQgY29udGVudFxuXHRcdFx0XHRqID0gd3JhcFsgMCBdO1xuXHRcdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0XHR0bXAgPSB0bXAubGFzdENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBub2RlcywgdG1wLmNoaWxkTm9kZXMgKTtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB0aGUgdG9wLWxldmVsIGNvbnRhaW5lclxuXHRcdFx0XHR0bXAgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0XHRcdC8vIEVuc3VyZSB0aGUgY3JlYXRlZCBub2RlcyBhcmUgb3JwaGFuZWQgKCMxMjM5Milcblx0XHRcdFx0dG1wLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZW1vdmUgd3JhcHBlciBmcm9tIGZyYWdtZW50XG5cdGZyYWdtZW50LnRleHRDb250ZW50ID0gXCJcIjtcblxuXHRpID0gMDtcblx0d2hpbGUgKCAoIGVsZW0gPSBub2Rlc1sgaSsrIF0gKSApIHtcblxuXHRcdC8vIFNraXAgZWxlbWVudHMgYWxyZWFkeSBpbiB0aGUgY29udGV4dCBjb2xsZWN0aW9uICh0cmFjLTQwODcpXG5cdFx0aWYgKCBzZWxlY3Rpb24gJiYgalF1ZXJ5LmluQXJyYXkoIGVsZW0sIHNlbGVjdGlvbiApID4gLTEgKSB7XG5cdFx0XHRpZiAoIGlnbm9yZWQgKSB7XG5cdFx0XHRcdGlnbm9yZWQucHVzaCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0YXR0YWNoZWQgPSBpc0F0dGFjaGVkKCBlbGVtICk7XG5cblx0XHQvLyBBcHBlbmQgdG8gZnJhZ21lbnRcblx0XHR0bXAgPSBnZXRBbGwoIGZyYWdtZW50LmFwcGVuZENoaWxkKCBlbGVtICksIFwic2NyaXB0XCIgKTtcblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRpZiAoIGF0dGFjaGVkICkge1xuXHRcdFx0c2V0R2xvYmFsRXZhbCggdG1wICk7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FwdHVyZSBleGVjdXRhYmxlc1xuXHRcdGlmICggc2NyaXB0cyApIHtcblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0bXBbIGorKyBdICkgKSB7XG5cdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggZWxlbS50eXBlIHx8IFwiXCIgKSApIHtcblx0XHRcdFx0XHRzY3JpcHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmcmFnbWVudDtcbn1cblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0ZGl2ID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApLFxuXHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seVxuXHQvLyBDaGVjayBzdGF0ZSBsb3N0IGlmIHRoZSBuYW1lIGlzIHNldCAoIzExMjE3KVxuXHQvLyBTdXBwb3J0OiBXaW5kb3dzIFdlYiBBcHBzIChXV0EpXG5cdC8vIGBuYW1lYCBhbmQgYHR5cGVgIG11c3QgdXNlIC5zZXRBdHRyaWJ1dGUgZm9yIFdXQSAoIzE0OTAxKVxuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcInJhZGlvXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcImNoZWNrZWRcIiwgXCJjaGVja2VkXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJ0XCIgKTtcblxuXHRkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSBvbmx5XG5cdC8vIE9sZGVyIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGluIGZyYWdtZW50c1xuXHRzdXBwb3J0LmNoZWNrQ2xvbmUgPSBkaXYuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmNoZWNrZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIE1ha2Ugc3VyZSB0ZXh0YXJlYSAoYW5kIGNoZWNrYm94KSBkZWZhdWx0VmFsdWUgaXMgcHJvcGVybHkgY2xvbmVkXG5cdGRpdi5pbm5lckhUTUwgPSBcIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT5cIjtcblx0c3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9ICEhZGl2LmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWU7XG59ICkoKTtcblxuXG52YXJcblx0cmtleUV2ZW50ID0gL15rZXkvLFxuXHRybW91c2VFdmVudCA9IC9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudXxkcmFnfGRyb3ApfGNsaWNrLyxcblx0cnR5cGVuYW1lc3BhY2UgPSAvXihbXi5dKikoPzpcXC4oLispfCkvO1xuXG5mdW5jdGlvbiByZXR1cm5UcnVlKCkge1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmV0dXJuRmFsc2UoKSB7XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLy8gU3VwcG9ydDogSUUgPD05IC0gMTErXG4vLyBmb2N1cygpIGFuZCBibHVyKCkgYXJlIGFzeW5jaHJvbm91cywgZXhjZXB0IHdoZW4gdGhleSBhcmUgbm8tb3AuXG4vLyBTbyBleHBlY3QgZm9jdXMgdG8gYmUgc3luY2hyb25vdXMgd2hlbiB0aGUgZWxlbWVudCBpcyBhbHJlYWR5IGFjdGl2ZSxcbi8vIGFuZCBibHVyIHRvIGJlIHN5bmNocm9ub3VzIHdoZW4gdGhlIGVsZW1lbnQgaXMgbm90IGFscmVhZHkgYWN0aXZlLlxuLy8gKGZvY3VzIGFuZCBibHVyIGFyZSBhbHdheXMgc3luY2hyb25vdXMgaW4gb3RoZXIgc3VwcG9ydGVkIGJyb3dzZXJzLFxuLy8gdGhpcyBqdXN0IGRlZmluZXMgd2hlbiB3ZSBjYW4gY291bnQgb24gaXQpLlxuZnVuY3Rpb24gZXhwZWN0U3luYyggZWxlbSwgdHlwZSApIHtcblx0cmV0dXJuICggZWxlbSA9PT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSApID09PSAoIHR5cGUgPT09IFwiZm9jdXNcIiApO1xufVxuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuLy8gQWNjZXNzaW5nIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgY2FuIHRocm93IHVuZXhwZWN0ZWRseVxuLy8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEzMzkzXG5mdW5jdGlvbiBzYWZlQWN0aXZlRWxlbWVudCgpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblx0fSBjYXRjaCAoIGVyciApIHsgfVxufVxuXG5mdW5jdGlvbiBvbiggZWxlbSwgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgb25lICkge1xuXHR2YXIgb3JpZ0ZuLCB0eXBlO1xuXG5cdC8vIFR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVyc1xuXHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vICggdHlwZXMtT2JqZWN0LCBzZWxlY3RvciwgZGF0YSApXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtT2JqZWN0LCBkYXRhIClcblx0XHRcdGRhdGEgPSBkYXRhIHx8IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRvbiggZWxlbSwgdHlwZSwgc2VsZWN0b3IsIGRhdGEsIHR5cGVzWyB0eXBlIF0sIG9uZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gZWxlbTtcblx0fVxuXG5cdGlmICggZGF0YSA9PSBudWxsICYmIGZuID09IG51bGwgKSB7XG5cblx0XHQvLyAoIHR5cGVzLCBmbiApXG5cdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRkYXRhID0gc2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoIGZuID09IG51bGwgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMsIHNlbGVjdG9yLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vICggdHlwZXMsIGRhdGEsIGZuIClcblx0XHRcdGZuID0gZGF0YTtcblx0XHRcdGRhdGEgPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHR9IGVsc2UgaWYgKCAhZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIG9uZSA9PT0gMSApIHtcblx0XHRvcmlnRm4gPSBmbjtcblx0XHRmbiA9IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0Ly8gQ2FuIHVzZSBhbiBlbXB0eSBzZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5zIHRoZSBpbmZvXG5cdFx0XHRqUXVlcnkoKS5vZmYoIGV2ZW50ICk7XG5cdFx0XHRyZXR1cm4gb3JpZ0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9O1xuXG5cdFx0Ly8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1c2luZyBvcmlnRm5cblx0XHRmbi5ndWlkID0gb3JpZ0ZuLmd1aWQgfHwgKCBvcmlnRm4uZ3VpZCA9IGpRdWVyeS5ndWlkKysgKTtcblx0fVxuXHRyZXR1cm4gZWxlbS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlcywgZm4sIGRhdGEsIHNlbGVjdG9yICk7XG5cdH0gKTtcbn1cblxuLypcbiAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGV2ZW50cyAtLSBub3QgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS5cbiAqIFByb3BzIHRvIERlYW4gRWR3YXJkcycgYWRkRXZlbnQgbGlicmFyeSBmb3IgbWFueSBvZiB0aGUgaWRlYXMuXG4gKi9cbmpRdWVyeS5ldmVudCA9IHtcblxuXHRnbG9iYWw6IHt9LFxuXG5cdGFkZDogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBkYXRhLCBzZWxlY3RvciApIHtcblxuXHRcdHZhciBoYW5kbGVPYmpJbiwgZXZlbnRIYW5kbGUsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdC8vIERvbid0IGF0dGFjaCBldmVudHMgdG8gbm9EYXRhIG9yIHRleHQvY29tbWVudCBub2RlcyAoYnV0IGFsbG93IHBsYWluIG9iamVjdHMpXG5cdFx0aWYgKCAhZWxlbURhdGEgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGVyIGNhbiBwYXNzIGluIGFuIG9iamVjdCBvZiBjdXN0b20gZGF0YSBpbiBsaWV1IG9mIHRoZSBoYW5kbGVyXG5cdFx0aWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7XG5cdFx0XHRoYW5kbGVPYmpJbiA9IGhhbmRsZXI7XG5cdFx0XHRoYW5kbGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjtcblx0XHRcdHNlbGVjdG9yID0gaGFuZGxlT2JqSW4uc2VsZWN0b3I7XG5cdFx0fVxuXG5cdFx0Ly8gRW5zdXJlIHRoYXQgaW52YWxpZCBzZWxlY3RvcnMgdGhyb3cgZXhjZXB0aW9ucyBhdCBhdHRhY2ggdGltZVxuXHRcdC8vIEV2YWx1YXRlIGFnYWluc3QgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgZWxlbSBpcyBhIG5vbi1lbGVtZW50IG5vZGUgKGUuZy4sIGRvY3VtZW50KVxuXHRcdGlmICggc2VsZWN0b3IgKSB7XG5cdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGRvY3VtZW50RWxlbWVudCwgc2VsZWN0b3IgKTtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXJcblx0XHRpZiAoICFoYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRoYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrO1xuXHRcdH1cblxuXHRcdC8vIEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBzdHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmlyc3Rcblx0XHRpZiAoICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0ZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzID0ge307XG5cdFx0fVxuXHRcdGlmICggISggZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgKSApIHtcblx0XHRcdGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlID0gZnVuY3Rpb24oIGUgKSB7XG5cblx0XHRcdFx0Ly8gRGlzY2FyZCB0aGUgc2Vjb25kIGV2ZW50IG9mIGEgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoKSBhbmRcblx0XHRcdFx0Ly8gd2hlbiBhbiBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgYSBwYWdlIGhhcyB1bmxvYWRlZFxuXHRcdFx0XHRyZXR1cm4gdHlwZW9mIGpRdWVyeSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICE9PSBlLnR5cGUgP1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5kaXNwYXRjaC5hcHBseSggZWxlbSwgYXJndW1lbnRzICkgOiB1bmRlZmluZWQ7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2Vcblx0XHR0eXBlcyA9ICggdHlwZXMgfHwgXCJcIiApLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cdFx0dCA9IHR5cGVzLmxlbmd0aDtcblx0XHR3aGlsZSAoIHQtLSApIHtcblx0XHRcdHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTtcblx0XHRcdHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdO1xuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgXCJcIiApLnNwbGl0KCBcIi5cIiApLnNvcnQoKTtcblxuXHRcdFx0Ly8gVGhlcmUgKm11c3QqIGJlIGEgdHlwZSwgbm8gYXR0YWNoaW5nIG5hbWVzcGFjZS1vbmx5IGhhbmRsZXJzXG5cdFx0XHRpZiAoICF0eXBlICkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgZXZlbnQgY2hhbmdlcyBpdHMgdHlwZSwgdXNlIHRoZSBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgY2hhbmdlZCB0eXBlXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gSWYgc2VsZWN0b3IgZGVmaW5lZCwgZGV0ZXJtaW5lIHNwZWNpYWwgZXZlbnQgYXBpIHR5cGUsIG90aGVyd2lzZSBnaXZlbiB0eXBlXG5cdFx0XHR0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7XG5cblx0XHRcdC8vIFVwZGF0ZSBzcGVjaWFsIGJhc2VkIG9uIG5ld2x5IHJlc2V0IHR5cGVcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXG5cdFx0XHQvLyBoYW5kbGVPYmogaXMgcGFzc2VkIHRvIGFsbCBldmVudCBoYW5kbGVyc1xuXHRcdFx0aGFuZGxlT2JqID0galF1ZXJ5LmV4dGVuZCgge1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRvcmlnVHlwZTogb3JpZ1R5cGUsXG5cdFx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRcdGhhbmRsZXI6IGhhbmRsZXIsXG5cdFx0XHRcdGd1aWQ6IGhhbmRsZXIuZ3VpZCxcblx0XHRcdFx0c2VsZWN0b3I6IHNlbGVjdG9yLFxuXHRcdFx0XHRuZWVkc0NvbnRleHQ6IHNlbGVjdG9yICYmIGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApLFxuXHRcdFx0XHRuYW1lc3BhY2U6IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKVxuXHRcdFx0fSwgaGFuZGxlT2JqSW4gKTtcblxuXHRcdFx0Ly8gSW5pdCB0aGUgZXZlbnQgaGFuZGxlciBxdWV1ZSBpZiB3ZSdyZSB0aGUgZmlyc3Rcblx0XHRcdGlmICggISggaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSApICkge1xuXHRcdFx0XHRoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdID0gW107XG5cdFx0XHRcdGhhbmRsZXJzLmRlbGVnYXRlQ291bnQgPSAwO1xuXG5cdFx0XHRcdC8vIE9ubHkgdXNlIGFkZEV2ZW50TGlzdGVuZXIgaWYgdGhlIHNwZWNpYWwgZXZlbnRzIGhhbmRsZXIgcmV0dXJucyBmYWxzZVxuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnNldHVwIHx8XG5cdFx0XHRcdFx0c3BlY2lhbC5zZXR1cC5jYWxsKCBlbGVtLCBkYXRhLCBuYW1lc3BhY2VzLCBldmVudEhhbmRsZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdGlmICggZWxlbS5hZGRFdmVudExpc3RlbmVyICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBldmVudEhhbmRsZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHNwZWNpYWwuYWRkICkge1xuXHRcdFx0XHRzcGVjaWFsLmFkZC5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcblxuXHRcdFx0XHRpZiAoICFoYW5kbGVPYmouaGFuZGxlci5ndWlkICkge1xuXHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyLmd1aWQgPSBoYW5kbGVyLmd1aWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIHRvIHRoZSBlbGVtZW50J3MgaGFuZGxlciBsaXN0LCBkZWxlZ2F0ZXMgaW4gZnJvbnRcblx0XHRcdGlmICggc2VsZWN0b3IgKSB7XG5cdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaGFuZGxlcnMuZGVsZWdhdGVDb3VudCsrLCAwLCBoYW5kbGVPYmogKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBLZWVwIHRyYWNrIG9mIHdoaWNoIGV2ZW50cyBoYXZlIGV2ZXIgYmVlbiB1c2VkLCBmb3IgZXZlbnQgb3B0aW1pemF0aW9uXG5cdFx0XHRqUXVlcnkuZXZlbnQuZ2xvYmFsWyB0eXBlIF0gPSB0cnVlO1xuXHRcdH1cblxuXHR9LFxuXG5cdC8vIERldGFjaCBhbiBldmVudCBvciBzZXQgb2YgZXZlbnRzIGZyb20gYW4gZWxlbWVudFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgc2VsZWN0b3IsIG1hcHBlZFR5cGVzICkge1xuXG5cdFx0dmFyIGosIG9yaWdDb3VudCwgdG1wLFxuXHRcdFx0ZXZlbnRzLCB0LCBoYW5kbGVPYmosXG5cdFx0XHRzcGVjaWFsLCBoYW5kbGVycywgdHlwZSwgbmFtZXNwYWNlcywgb3JpZ1R5cGUsXG5cdFx0XHRlbGVtRGF0YSA9IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKSAmJiBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdGlmICggIWVsZW1EYXRhIHx8ICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIE9uY2UgZm9yIGVhY2ggdHlwZS5uYW1lc3BhY2UgaW4gdHlwZXM7IHR5cGUgbWF5IGJlIG9taXR0ZWRcblx0XHR0eXBlcyA9ICggdHlwZXMgfHwgXCJcIiApLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cdFx0dCA9IHR5cGVzLmxlbmd0aDtcblx0XHR3aGlsZSAoIHQtLSApIHtcblx0XHRcdHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTtcblx0XHRcdHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdO1xuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgXCJcIiApLnNwbGl0KCBcIi5cIiApLnNvcnQoKTtcblxuXHRcdFx0Ly8gVW5iaW5kIGFsbCBldmVudHMgKG9uIHRoaXMgbmFtZXNwYWNlLCBpZiBwcm92aWRlZCkgZm9yIHRoZSBlbGVtZW50XG5cdFx0XHRpZiAoICF0eXBlICkge1xuXHRcdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICsgdHlwZXNbIHQgXSwgaGFuZGxlciwgc2VsZWN0b3IsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0XHR0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7XG5cdFx0XHRoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdIHx8IFtdO1xuXHRcdFx0dG1wID0gdG1wWyAyIF0gJiZcblx0XHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICk7XG5cblx0XHRcdC8vIFJlbW92ZSBtYXRjaGluZyBldmVudHNcblx0XHRcdG9yaWdDb3VudCA9IGogPSBoYW5kbGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGogXTtcblxuXHRcdFx0XHRpZiAoICggbWFwcGVkVHlwZXMgfHwgb3JpZ1R5cGUgPT09IGhhbmRsZU9iai5vcmlnVHlwZSApICYmXG5cdFx0XHRcdFx0KCAhaGFuZGxlciB8fCBoYW5kbGVyLmd1aWQgPT09IGhhbmRsZU9iai5ndWlkICkgJiZcblx0XHRcdFx0XHQoICF0bXAgfHwgdG1wLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApICYmXG5cdFx0XHRcdFx0KCAhc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IGhhbmRsZU9iai5zZWxlY3RvciB8fFxuXHRcdFx0XHRcdFx0c2VsZWN0b3IgPT09IFwiKipcIiAmJiBoYW5kbGVPYmouc2VsZWN0b3IgKSApIHtcblx0XHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGosIDEgKTtcblxuXHRcdFx0XHRcdGlmICggaGFuZGxlT2JqLnNlbGVjdG9yICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudC0tO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIHNwZWNpYWwucmVtb3ZlICkge1xuXHRcdFx0XHRcdFx0c3BlY2lhbC5yZW1vdmUuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlbW92ZSBnZW5lcmljIGV2ZW50IGhhbmRsZXIgaWYgd2UgcmVtb3ZlZCBzb21ldGhpbmcgYW5kIG5vIG1vcmUgaGFuZGxlcnMgZXhpc3Rcblx0XHRcdC8vIChhdm9pZHMgcG90ZW50aWFsIGZvciBlbmRsZXNzIHJlY3Vyc2lvbiBkdXJpbmcgcmVtb3ZhbCBvZiBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzKVxuXHRcdFx0aWYgKCBvcmlnQ291bnQgJiYgIWhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC50ZWFyZG93biB8fFxuXHRcdFx0XHRcdHNwZWNpYWwudGVhcmRvd24uY2FsbCggZWxlbSwgbmFtZXNwYWNlcywgZWxlbURhdGEuaGFuZGxlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBlbGVtRGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRlbGV0ZSBldmVudHNbIHR5cGUgXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgZGF0YSBhbmQgdGhlIGV4cGFuZG8gaWYgaXQncyBubyBsb25nZXIgdXNlZFxuXHRcdGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGV2ZW50cyApICkge1xuXHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBcImhhbmRsZSBldmVudHNcIiApO1xuXHRcdH1cblx0fSxcblxuXHRkaXNwYXRjaDogZnVuY3Rpb24oIG5hdGl2ZUV2ZW50ICkge1xuXG5cdFx0Ly8gTWFrZSBhIHdyaXRhYmxlIGpRdWVyeS5FdmVudCBmcm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0XG5cdFx0dmFyIGV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggbmF0aXZlRXZlbnQgKTtcblxuXHRcdHZhciBpLCBqLCByZXQsIG1hdGNoZWQsIGhhbmRsZU9iaiwgaGFuZGxlclF1ZXVlLFxuXHRcdFx0YXJncyA9IG5ldyBBcnJheSggYXJndW1lbnRzLmxlbmd0aCApLFxuXHRcdFx0aGFuZGxlcnMgPSAoIGRhdGFQcml2LmdldCggdGhpcywgXCJldmVudHNcIiApIHx8IHt9IClbIGV2ZW50LnR5cGUgXSB8fCBbXSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZXZlbnQudHlwZSBdIHx8IHt9O1xuXG5cdFx0Ly8gVXNlIHRoZSBmaXgtZWQgalF1ZXJ5LkV2ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUgZXZlbnRcblx0XHRhcmdzWyAwIF0gPSBldmVudDtcblxuXHRcdGZvciAoIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrICkge1xuXHRcdFx0YXJnc1sgaSBdID0gYXJndW1lbnRzWyBpIF07XG5cdFx0fVxuXG5cdFx0ZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzO1xuXG5cdFx0Ly8gQ2FsbCB0aGUgcHJlRGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlLCBhbmQgbGV0IGl0IGJhaWwgaWYgZGVzaXJlZFxuXHRcdGlmICggc3BlY2lhbC5wcmVEaXNwYXRjaCAmJiBzcGVjaWFsLnByZURpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERldGVybWluZSBoYW5kbGVyc1xuXHRcdGhhbmRsZXJRdWV1ZSA9IGpRdWVyeS5ldmVudC5oYW5kbGVycy5jYWxsKCB0aGlzLCBldmVudCwgaGFuZGxlcnMgKTtcblxuXHRcdC8vIFJ1biBkZWxlZ2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdhdGlvbiBiZW5lYXRoIHVzXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIG1hdGNoZWQgPSBoYW5kbGVyUXVldWVbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRldmVudC5jdXJyZW50VGFyZ2V0ID0gbWF0Y2hlZC5lbGVtO1xuXG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBoYW5kbGVPYmogPSBtYXRjaGVkLmhhbmRsZXJzWyBqKysgXSApICYmXG5cdFx0XHRcdCFldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXG5cdFx0XHRcdC8vIElmIHRoZSBldmVudCBpcyBuYW1lc3BhY2VkLCB0aGVuIGVhY2ggaGFuZGxlciBpcyBvbmx5IGludm9rZWQgaWYgaXQgaXNcblx0XHRcdFx0Ly8gc3BlY2lhbGx5IHVuaXZlcnNhbCBvciBpdHMgbmFtZXNwYWNlcyBhcmUgYSBzdXBlcnNldCBvZiB0aGUgZXZlbnQncy5cblx0XHRcdFx0aWYgKCAhZXZlbnQucm5hbWVzcGFjZSB8fCBoYW5kbGVPYmoubmFtZXNwYWNlID09PSBmYWxzZSB8fFxuXHRcdFx0XHRcdGV2ZW50LnJuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkge1xuXG5cdFx0XHRcdFx0ZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqO1xuXHRcdFx0XHRcdGV2ZW50LmRhdGEgPSBoYW5kbGVPYmouZGF0YTtcblxuXHRcdFx0XHRcdHJldCA9ICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgaGFuZGxlT2JqLm9yaWdUeXBlIF0gfHwge30gKS5oYW5kbGUgfHxcblx0XHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyICkuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApO1xuXG5cdFx0XHRcdFx0aWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdGlmICggKCBldmVudC5yZXN1bHQgPSByZXQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhbGwgdGhlIHBvc3REaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGVcblx0XHRpZiAoIHNwZWNpYWwucG9zdERpc3BhdGNoICkge1xuXHRcdFx0c3BlY2lhbC5wb3N0RGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdGhhbmRsZXJzOiBmdW5jdGlvbiggZXZlbnQsIGhhbmRsZXJzICkge1xuXHRcdHZhciBpLCBoYW5kbGVPYmosIHNlbCwgbWF0Y2hlZEhhbmRsZXJzLCBtYXRjaGVkU2VsZWN0b3JzLFxuXHRcdFx0aGFuZGxlclF1ZXVlID0gW10sXG5cdFx0XHRkZWxlZ2F0ZUNvdW50ID0gaGFuZGxlcnMuZGVsZWdhdGVDb3VudCxcblx0XHRcdGN1ciA9IGV2ZW50LnRhcmdldDtcblxuXHRcdC8vIEZpbmQgZGVsZWdhdGUgaGFuZGxlcnNcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05XG5cdFx0XHQvLyBCbGFjay1ob2xlIFNWRyA8dXNlPiBpbnN0YW5jZSB0cmVlcyAodHJhYy0xMzE4MClcblx0XHRcdGN1ci5ub2RlVHlwZSAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDJcblx0XHRcdC8vIFN1cHByZXNzIHNwZWMtdmlvbGF0aW5nIGNsaWNrcyBpbmRpY2F0aW5nIGEgbm9uLXByaW1hcnkgcG9pbnRlciBidXR0b24gKHRyYWMtMzg2MSlcblx0XHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50LXR5cGUtY2xpY2tcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExIG9ubHlcblx0XHRcdC8vIC4uLmJ1dCBub3QgYXJyb3cga2V5IFwiY2xpY2tzXCIgb2YgcmFkaW8gaW5wdXRzLCB3aGljaCBjYW4gaGF2ZSBgYnV0dG9uYCAtMSAoZ2gtMjM0Mylcblx0XHRcdCEoIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBldmVudC5idXR0b24gPj0gMSApICkge1xuXG5cdFx0XHRmb3IgKCA7IGN1ciAhPT0gdGhpczsgY3VyID0gY3VyLnBhcmVudE5vZGUgfHwgdGhpcyApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjaGVjayBub24tZWxlbWVudHMgKCMxMzIwOClcblx0XHRcdFx0Ly8gRG9uJ3QgcHJvY2VzcyBjbGlja3Mgb24gZGlzYWJsZWQgZWxlbWVudHMgKCM2OTExLCAjODE2NSwgIzExMzgyLCAjMTE3NjQpXG5cdFx0XHRcdGlmICggY3VyLm5vZGVUeXBlID09PSAxICYmICEoIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBjdXIuZGlzYWJsZWQgPT09IHRydWUgKSApIHtcblx0XHRcdFx0XHRtYXRjaGVkSGFuZGxlcnMgPSBbXTtcblx0XHRcdFx0XHRtYXRjaGVkU2VsZWN0b3JzID0ge307XG5cdFx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBkZWxlZ2F0ZUNvdW50OyBpKysgKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaSBdO1xuXG5cdFx0XHRcdFx0XHQvLyBEb24ndCBjb25mbGljdCB3aXRoIE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoIzEzMjAzKVxuXHRcdFx0XHRcdFx0c2VsID0gaGFuZGxlT2JqLnNlbGVjdG9yICsgXCIgXCI7XG5cblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPSBoYW5kbGVPYmoubmVlZHNDb250ZXh0ID9cblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkoIHNlbCwgdGhpcyApLmluZGV4KCBjdXIgKSA+IC0xIDpcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZmluZCggc2VsLCB0aGlzLCBudWxsLCBbIGN1ciBdICkubGVuZ3RoO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZEhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRIYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBtYXRjaGVkSGFuZGxlcnMgfSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFkZCB0aGUgcmVtYWluaW5nIChkaXJlY3RseS1ib3VuZCkgaGFuZGxlcnNcblx0XHRjdXIgPSB0aGlzO1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCA8IGhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNvdW50ICkgfSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBoYW5kbGVyUXVldWU7XG5cdH0sXG5cblx0YWRkUHJvcDogZnVuY3Rpb24oIG5hbWUsIGhvb2sgKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBqUXVlcnkuRXZlbnQucHJvdG90eXBlLCBuYW1lLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXG5cdFx0XHRnZXQ6IGlzRnVuY3Rpb24oIGhvb2sgKSA/XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gaG9vayggdGhpcy5vcmlnaW5hbEV2ZW50ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IDpcblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLm9yaWdpbmFsRXZlbnRbIG5hbWUgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cblx0XHRcdHNldDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIHRoaXMsIG5hbWUsIHtcblx0XHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHR2YWx1ZTogdmFsdWVcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRmaXg6IGZ1bmN0aW9uKCBvcmlnaW5hbEV2ZW50ICkge1xuXHRcdHJldHVybiBvcmlnaW5hbEV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID9cblx0XHRcdG9yaWdpbmFsRXZlbnQgOlxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCggb3JpZ2luYWxFdmVudCApO1xuXHR9LFxuXG5cdHNwZWNpYWw6IHtcblx0XHRsb2FkOiB7XG5cblx0XHRcdC8vIFByZXZlbnQgdHJpZ2dlcmVkIGltYWdlLmxvYWQgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gd2luZG93LmxvYWRcblx0XHRcdG5vQnViYmxlOiB0cnVlXG5cdFx0fSxcblx0XHRjbGljazoge1xuXG5cdFx0XHQvLyBVdGlsaXplIG5hdGl2ZSBldmVudCB0byBlbnN1cmUgY29ycmVjdCBzdGF0ZSBmb3IgY2hlY2thYmxlIGlucHV0c1xuXHRcdFx0c2V0dXA6IGZ1bmN0aW9uKCBkYXRhICkge1xuXG5cdFx0XHRcdC8vIEZvciBtdXR1YWwgY29tcHJlc3NpYmlsaXR5IHdpdGggX2RlZmF1bHQsIHJlcGxhY2UgYHRoaXNgIGFjY2VzcyB3aXRoIGEgbG9jYWwgdmFyLlxuXHRcdFx0XHQvLyBgfHwgZGF0YWAgaXMgZGVhZCBjb2RlIG1lYW50IG9ubHkgdG8gcHJlc2VydmUgdGhlIHZhcmlhYmxlIHRocm91Z2ggbWluaWZpY2F0aW9uLlxuXHRcdFx0XHR2YXIgZWwgPSB0aGlzIHx8IGRhdGE7XG5cblx0XHRcdFx0Ly8gQ2xhaW0gdGhlIGZpcnN0IGhhbmRsZXJcblx0XHRcdFx0aWYgKCByY2hlY2thYmxlVHlwZS50ZXN0KCBlbC50eXBlICkgJiZcblx0XHRcdFx0XHRlbC5jbGljayAmJiBub2RlTmFtZSggZWwsIFwiaW5wdXRcIiApICkge1xuXG5cdFx0XHRcdFx0Ly8gZGF0YVByaXYuc2V0KCBlbCwgXCJjbGlja1wiLCAuLi4gKVxuXHRcdFx0XHRcdGxldmVyYWdlTmF0aXZlKCBlbCwgXCJjbGlja1wiLCByZXR1cm5UcnVlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXR1cm4gZmFsc2UgdG8gYWxsb3cgbm9ybWFsIHByb2Nlc3NpbmcgaW4gdGhlIGNhbGxlclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9LFxuXHRcdFx0dHJpZ2dlcjogZnVuY3Rpb24oIGRhdGEgKSB7XG5cblx0XHRcdFx0Ly8gRm9yIG11dHVhbCBjb21wcmVzc2liaWxpdHkgd2l0aCBfZGVmYXVsdCwgcmVwbGFjZSBgdGhpc2AgYWNjZXNzIHdpdGggYSBsb2NhbCB2YXIuXG5cdFx0XHRcdC8vIGB8fCBkYXRhYCBpcyBkZWFkIGNvZGUgbWVhbnQgb25seSB0byBwcmVzZXJ2ZSB0aGUgdmFyaWFibGUgdGhyb3VnaCBtaW5pZmljYXRpb24uXG5cdFx0XHRcdHZhciBlbCA9IHRoaXMgfHwgZGF0YTtcblxuXHRcdFx0XHQvLyBGb3JjZSBzZXR1cCBiZWZvcmUgdHJpZ2dlcmluZyBhIGNsaWNrXG5cdFx0XHRcdGlmICggcmNoZWNrYWJsZVR5cGUudGVzdCggZWwudHlwZSApICYmXG5cdFx0XHRcdFx0ZWwuY2xpY2sgJiYgbm9kZU5hbWUoIGVsLCBcImlucHV0XCIgKSApIHtcblxuXHRcdFx0XHRcdGxldmVyYWdlTmF0aXZlKCBlbCwgXCJjbGlja1wiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXR1cm4gbm9uLWZhbHNlIHRvIGFsbG93IG5vcm1hbCBldmVudC1wYXRoIHByb3BhZ2F0aW9uXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRm9yIGNyb3NzLWJyb3dzZXIgY29uc2lzdGVuY3ksIHN1cHByZXNzIG5hdGl2ZSAuY2xpY2soKSBvbiBsaW5rc1xuXHRcdFx0Ly8gQWxzbyBwcmV2ZW50IGl0IGlmIHdlJ3JlIGN1cnJlbnRseSBpbnNpZGUgYSBsZXZlcmFnZWQgbmF0aXZlLWV2ZW50IHN0YWNrXG5cdFx0XHRfZGVmYXVsdDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdFx0XHRyZXR1cm4gcmNoZWNrYWJsZVR5cGUudGVzdCggdGFyZ2V0LnR5cGUgKSAmJlxuXHRcdFx0XHRcdHRhcmdldC5jbGljayAmJiBub2RlTmFtZSggdGFyZ2V0LCBcImlucHV0XCIgKSAmJlxuXHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGFyZ2V0LCBcImNsaWNrXCIgKSB8fFxuXHRcdFx0XHRcdG5vZGVOYW1lKCB0YXJnZXQsIFwiYVwiICk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGJlZm9yZXVubG9hZDoge1xuXHRcdFx0cG9zdERpc3BhdGNoOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCAyMCtcblx0XHRcdFx0Ly8gRmlyZWZveCBkb2Vzbid0IGFsZXJ0IGlmIHRoZSByZXR1cm5WYWx1ZSBmaWVsZCBpcyBub3Qgc2V0LlxuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCAhPT0gdW5kZWZpbmVkICYmIGV2ZW50Lm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0ZXZlbnQub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZSA9IGV2ZW50LnJlc3VsdDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuLy8gRW5zdXJlIHRoZSBwcmVzZW5jZSBvZiBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGhhbmRsZXMgbWFudWFsbHktdHJpZ2dlcmVkXG4vLyBzeW50aGV0aWMgZXZlbnRzIGJ5IGludGVycnVwdGluZyBwcm9ncmVzcyB1bnRpbCByZWludm9rZWQgaW4gcmVzcG9uc2UgdG9cbi8vICpuYXRpdmUqIGV2ZW50cyB0aGF0IGl0IGZpcmVzIGRpcmVjdGx5LCBlbnN1cmluZyB0aGF0IHN0YXRlIGNoYW5nZXMgaGF2ZVxuLy8gYWxyZWFkeSBvY2N1cnJlZCBiZWZvcmUgb3RoZXIgbGlzdGVuZXJzIGFyZSBpbnZva2VkLlxuZnVuY3Rpb24gbGV2ZXJhZ2VOYXRpdmUoIGVsLCB0eXBlLCBleHBlY3RTeW5jICkge1xuXG5cdC8vIE1pc3NpbmcgZXhwZWN0U3luYyBpbmRpY2F0ZXMgYSB0cmlnZ2VyIGNhbGwsIHdoaWNoIG11c3QgZm9yY2Ugc2V0dXAgdGhyb3VnaCBqUXVlcnkuZXZlbnQuYWRkXG5cdGlmICggIWV4cGVjdFN5bmMgKSB7XG5cdFx0aWYgKCBkYXRhUHJpdi5nZXQoIGVsLCB0eXBlICkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC5hZGQoIGVsLCB0eXBlLCByZXR1cm5UcnVlICk7XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFJlZ2lzdGVyIHRoZSBjb250cm9sbGVyIGFzIGEgc3BlY2lhbCB1bml2ZXJzYWwgaGFuZGxlciBmb3IgYWxsIGV2ZW50IG5hbWVzcGFjZXNcblx0ZGF0YVByaXYuc2V0KCBlbCwgdHlwZSwgZmFsc2UgKTtcblx0alF1ZXJ5LmV2ZW50LmFkZCggZWwsIHR5cGUsIHtcblx0XHRuYW1lc3BhY2U6IGZhbHNlLFxuXHRcdGhhbmRsZXI6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciBub3RBc3luYywgcmVzdWx0LFxuXHRcdFx0XHRzYXZlZCA9IGRhdGFQcml2LmdldCggdGhpcywgdHlwZSApO1xuXG5cdFx0XHRpZiAoICggZXZlbnQuaXNUcmlnZ2VyICYgMSApICYmIHRoaXNbIHR5cGUgXSApIHtcblxuXHRcdFx0XHQvLyBJbnRlcnJ1cHQgcHJvY2Vzc2luZyBvZiB0aGUgb3V0ZXIgc3ludGhldGljIC50cmlnZ2VyKCllZCBldmVudFxuXHRcdFx0XHQvLyBTYXZlZCBkYXRhIHNob3VsZCBiZSBmYWxzZSBpbiBzdWNoIGNhc2VzLCBidXQgbWlnaHQgYmUgYSBsZWZ0b3ZlciBjYXB0dXJlIG9iamVjdFxuXHRcdFx0XHQvLyBmcm9tIGFuIGFzeW5jIG5hdGl2ZSBoYW5kbGVyIChnaC00MzUwKVxuXHRcdFx0XHRpZiAoICFzYXZlZC5sZW5ndGggKSB7XG5cblx0XHRcdFx0XHQvLyBTdG9yZSBhcmd1bWVudHMgZm9yIHVzZSB3aGVuIGhhbmRsaW5nIHRoZSBpbm5lciBuYXRpdmUgZXZlbnRcblx0XHRcdFx0XHQvLyBUaGVyZSB3aWxsIGFsd2F5cyBiZSBhdCBsZWFzdCBvbmUgYXJndW1lbnQgKGFuIGV2ZW50IG9iamVjdCksIHNvIHRoaXMgYXJyYXlcblx0XHRcdFx0XHQvLyB3aWxsIG5vdCBiZSBjb25mdXNlZCB3aXRoIGEgbGVmdG92ZXIgY2FwdHVyZSBvYmplY3QuXG5cdFx0XHRcdFx0c2F2ZWQgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIHNhdmVkICk7XG5cblx0XHRcdFx0XHQvLyBUcmlnZ2VyIHRoZSBuYXRpdmUgZXZlbnQgYW5kIGNhcHR1cmUgaXRzIHJlc3VsdFxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExK1xuXHRcdFx0XHRcdC8vIGZvY3VzKCkgYW5kIGJsdXIoKSBhcmUgYXN5bmNocm9ub3VzXG5cdFx0XHRcdFx0bm90QXN5bmMgPSBleHBlY3RTeW5jKCB0aGlzLCB0eXBlICk7XG5cdFx0XHRcdFx0dGhpc1sgdHlwZSBdKCk7XG5cdFx0XHRcdFx0cmVzdWx0ID0gZGF0YVByaXYuZ2V0KCB0aGlzLCB0eXBlICk7XG5cdFx0XHRcdFx0aWYgKCBzYXZlZCAhPT0gcmVzdWx0IHx8IG5vdEFzeW5jICkge1xuXHRcdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCBmYWxzZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQgPSB7fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBzYXZlZCAhPT0gcmVzdWx0ICkge1xuXG5cdFx0XHRcdFx0XHQvLyBDYW5jZWwgdGhlIG91dGVyIHN5bnRoZXRpYyBldmVudFxuXHRcdFx0XHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdC52YWx1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgdGhpcyBpcyBhbiBpbm5lciBzeW50aGV0aWMgZXZlbnQgZm9yIGFuIGV2ZW50IHdpdGggYSBidWJibGluZyBzdXJyb2dhdGVcblx0XHRcdFx0Ly8gKGZvY3VzIG9yIGJsdXIpLCBhc3N1bWUgdGhhdCB0aGUgc3Vycm9nYXRlIGFscmVhZHkgcHJvcGFnYXRlZCBmcm9tIHRyaWdnZXJpbmcgdGhlXG5cdFx0XHRcdC8vIG5hdGl2ZSBldmVudCBhbmQgcHJldmVudCB0aGF0IGZyb20gaGFwcGVuaW5nIGFnYWluIGhlcmUuXG5cdFx0XHRcdC8vIFRoaXMgdGVjaG5pY2FsbHkgZ2V0cyB0aGUgb3JkZXJpbmcgd3Jvbmcgdy5yLnQuIHRvIGAudHJpZ2dlcigpYCAoaW4gd2hpY2ggdGhlXG5cdFx0XHRcdC8vIGJ1YmJsaW5nIHN1cnJvZ2F0ZSBwcm9wYWdhdGVzICphZnRlciogdGhlIG5vbi1idWJibGluZyBiYXNlKSwgYnV0IHRoYXQgc2VlbXNcblx0XHRcdFx0Ly8gbGVzcyBiYWQgdGhhbiBkdXBsaWNhdGlvbi5cblx0XHRcdFx0fSBlbHNlIGlmICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9ICkuZGVsZWdhdGVUeXBlICkge1xuXHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHR9XG5cblx0XHRcdC8vIElmIHRoaXMgaXMgYSBuYXRpdmUgZXZlbnQgdHJpZ2dlcmVkIGFib3ZlLCBldmVyeXRoaW5nIGlzIG5vdyBpbiBvcmRlclxuXHRcdFx0Ly8gRmlyZSBhbiBpbm5lciBzeW50aGV0aWMgZXZlbnQgd2l0aCB0aGUgb3JpZ2luYWwgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCBzYXZlZC5sZW5ndGggKSB7XG5cblx0XHRcdFx0Ly8gLi4uYW5kIGNhcHR1cmUgdGhlIHJlc3VsdFxuXHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIHtcblx0XHRcdFx0XHR2YWx1ZTogalF1ZXJ5LmV2ZW50LnRyaWdnZXIoXG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExK1xuXHRcdFx0XHRcdFx0Ly8gRXh0ZW5kIHdpdGggdGhlIHByb3RvdHlwZSB0byByZXNldCB0aGUgYWJvdmUgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcblx0XHRcdFx0XHRcdGpRdWVyeS5leHRlbmQoIHNhdmVkWyAwIF0sIGpRdWVyeS5FdmVudC5wcm90b3R5cGUgKSxcblx0XHRcdFx0XHRcdHNhdmVkLnNsaWNlKCAxICksXG5cdFx0XHRcdFx0XHR0aGlzXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0Ly8gQWJvcnQgaGFuZGxpbmcgb2YgdGhlIG5hdGl2ZSBldmVudFxuXHRcdFx0XHRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gKTtcbn1cblxualF1ZXJ5LnJlbW92ZUV2ZW50ID0gZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRsZSApIHtcblxuXHQvLyBUaGlzIFwiaWZcIiBpcyBuZWVkZWQgZm9yIHBsYWluIG9iamVjdHNcblx0aWYgKCBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0ZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGUgKTtcblx0fVxufTtcblxualF1ZXJ5LkV2ZW50ID0gZnVuY3Rpb24oIHNyYywgcHJvcHMgKSB7XG5cblx0Ly8gQWxsb3cgaW5zdGFudGlhdGlvbiB3aXRob3V0IHRoZSAnbmV3JyBrZXl3b3JkXG5cdGlmICggISggdGhpcyBpbnN0YW5jZW9mIGpRdWVyeS5FdmVudCApICkge1xuXHRcdHJldHVybiBuZXcgalF1ZXJ5LkV2ZW50KCBzcmMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBFdmVudCBvYmplY3Rcblx0aWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7XG5cdFx0dGhpcy5vcmlnaW5hbEV2ZW50ID0gc3JjO1xuXHRcdHRoaXMudHlwZSA9IHNyYy50eXBlO1xuXG5cdFx0Ly8gRXZlbnRzIGJ1YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50ZWRcblx0XHQvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUgY29ycmVjdCB2YWx1ZS5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHNyYy5kZWZhdWx0UHJldmVudGVkIHx8XG5cdFx0XHRcdHNyYy5kZWZhdWx0UHJldmVudGVkID09PSB1bmRlZmluZWQgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9Mi4zIG9ubHlcblx0XHRcdFx0c3JjLnJldHVyblZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRyZXR1cm5UcnVlIDpcblx0XHRcdHJldHVybkZhbHNlO1xuXG5cdFx0Ly8gQ3JlYXRlIHRhcmdldCBwcm9wZXJ0aWVzXG5cdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDw9NiAtIDcgb25seVxuXHRcdC8vIFRhcmdldCBzaG91bGQgbm90IGJlIGEgdGV4dCBub2RlICgjNTA0LCAjMTMxNDMpXG5cdFx0dGhpcy50YXJnZXQgPSAoIHNyYy50YXJnZXQgJiYgc3JjLnRhcmdldC5ub2RlVHlwZSA9PT0gMyApID9cblx0XHRcdHNyYy50YXJnZXQucGFyZW50Tm9kZSA6XG5cdFx0XHRzcmMudGFyZ2V0O1xuXG5cdFx0dGhpcy5jdXJyZW50VGFyZ2V0ID0gc3JjLmN1cnJlbnRUYXJnZXQ7XG5cdFx0dGhpcy5yZWxhdGVkVGFyZ2V0ID0gc3JjLnJlbGF0ZWRUYXJnZXQ7XG5cblx0Ly8gRXZlbnQgdHlwZVxuXHR9IGVsc2Uge1xuXHRcdHRoaXMudHlwZSA9IHNyYztcblx0fVxuXG5cdC8vIFB1dCBleHBsaWNpdGx5IHByb3ZpZGVkIHByb3BlcnRpZXMgb250byB0aGUgZXZlbnQgb2JqZWN0XG5cdGlmICggcHJvcHMgKSB7XG5cdFx0alF1ZXJ5LmV4dGVuZCggdGhpcywgcHJvcHMgKTtcblx0fVxuXG5cdC8vIENyZWF0ZSBhIHRpbWVzdGFtcCBpZiBpbmNvbWluZyBldmVudCBkb2Vzbid0IGhhdmUgb25lXG5cdHRoaXMudGltZVN0YW1wID0gc3JjICYmIHNyYy50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKTtcblxuXHQvLyBNYXJrIGl0IGFzIGZpeGVkXG5cdHRoaXNbIGpRdWVyeS5leHBhbmRvIF0gPSB0cnVlO1xufTtcblxuLy8galF1ZXJ5LkV2ZW50IGlzIGJhc2VkIG9uIERPTTMgRXZlbnRzIGFzIHNwZWNpZmllZCBieSB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBCaW5kaW5nXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAwMzAzMzEvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sXG5qUXVlcnkuRXZlbnQucHJvdG90eXBlID0ge1xuXHRjb25zdHJ1Y3RvcjogalF1ZXJ5LkV2ZW50LFxuXHRpc0RlZmF1bHRQcmV2ZW50ZWQ6IHJldHVybkZhbHNlLFxuXHRpc1Byb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcblx0aXNTaW11bGF0ZWQ6IGZhbHNlLFxuXG5cdHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH0sXG5cdHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdH1cblxuXHRcdHRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdH1cbn07XG5cbi8vIEluY2x1ZGVzIGFsbCBjb21tb24gZXZlbnQgcHJvcHMgaW5jbHVkaW5nIEtleUV2ZW50IGFuZCBNb3VzZUV2ZW50IHNwZWNpZmljIHByb3BzXG5qUXVlcnkuZWFjaCgge1xuXHRhbHRLZXk6IHRydWUsXG5cdGJ1YmJsZXM6IHRydWUsXG5cdGNhbmNlbGFibGU6IHRydWUsXG5cdGNoYW5nZWRUb3VjaGVzOiB0cnVlLFxuXHRjdHJsS2V5OiB0cnVlLFxuXHRkZXRhaWw6IHRydWUsXG5cdGV2ZW50UGhhc2U6IHRydWUsXG5cdG1ldGFLZXk6IHRydWUsXG5cdHBhZ2VYOiB0cnVlLFxuXHRwYWdlWTogdHJ1ZSxcblx0c2hpZnRLZXk6IHRydWUsXG5cdHZpZXc6IHRydWUsXG5cdFwiY2hhclwiOiB0cnVlLFxuXHRjb2RlOiB0cnVlLFxuXHRjaGFyQ29kZTogdHJ1ZSxcblx0a2V5OiB0cnVlLFxuXHRrZXlDb2RlOiB0cnVlLFxuXHRidXR0b246IHRydWUsXG5cdGJ1dHRvbnM6IHRydWUsXG5cdGNsaWVudFg6IHRydWUsXG5cdGNsaWVudFk6IHRydWUsXG5cdG9mZnNldFg6IHRydWUsXG5cdG9mZnNldFk6IHRydWUsXG5cdHBvaW50ZXJJZDogdHJ1ZSxcblx0cG9pbnRlclR5cGU6IHRydWUsXG5cdHNjcmVlblg6IHRydWUsXG5cdHNjcmVlblk6IHRydWUsXG5cdHRhcmdldFRvdWNoZXM6IHRydWUsXG5cdHRvRWxlbWVudDogdHJ1ZSxcblx0dG91Y2hlczogdHJ1ZSxcblxuXHR3aGljaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBidXR0b24gPSBldmVudC5idXR0b247XG5cblx0XHQvLyBBZGQgd2hpY2ggZm9yIGtleSBldmVudHNcblx0XHRpZiAoIGV2ZW50LndoaWNoID09IG51bGwgJiYgcmtleUV2ZW50LnRlc3QoIGV2ZW50LnR5cGUgKSApIHtcblx0XHRcdHJldHVybiBldmVudC5jaGFyQ29kZSAhPSBudWxsID8gZXZlbnQuY2hhckNvZGUgOiBldmVudC5rZXlDb2RlO1xuXHRcdH1cblxuXHRcdC8vIEFkZCB3aGljaCBmb3IgY2xpY2s6IDEgPT09IGxlZnQ7IDIgPT09IG1pZGRsZTsgMyA9PT0gcmlnaHRcblx0XHRpZiAoICFldmVudC53aGljaCAmJiBidXR0b24gIT09IHVuZGVmaW5lZCAmJiBybW91c2VFdmVudC50ZXN0KCBldmVudC50eXBlICkgKSB7XG5cdFx0XHRpZiAoIGJ1dHRvbiAmIDEgKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGJ1dHRvbiAmIDIgKSB7XG5cdFx0XHRcdHJldHVybiAzO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGJ1dHRvbiAmIDQgKSB7XG5cdFx0XHRcdHJldHVybiAyO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQud2hpY2g7XG5cdH1cbn0sIGpRdWVyeS5ldmVudC5hZGRQcm9wICk7XG5cbmpRdWVyeS5lYWNoKCB7IGZvY3VzOiBcImZvY3VzaW5cIiwgYmx1cjogXCJmb2N1c291dFwiIH0sIGZ1bmN0aW9uKCB0eXBlLCBkZWxlZ2F0ZVR5cGUgKSB7XG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gPSB7XG5cblx0XHQvLyBVdGlsaXplIG5hdGl2ZSBldmVudCBpZiBwb3NzaWJsZSBzbyBibHVyL2ZvY3VzIHNlcXVlbmNlIGlzIGNvcnJlY3Rcblx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIENsYWltIHRoZSBmaXJzdCBoYW5kbGVyXG5cdFx0XHQvLyBkYXRhUHJpdi5zZXQoIHRoaXMsIFwiZm9jdXNcIiwgLi4uIClcblx0XHRcdC8vIGRhdGFQcml2LnNldCggdGhpcywgXCJibHVyXCIsIC4uLiApXG5cdFx0XHRsZXZlcmFnZU5hdGl2ZSggdGhpcywgdHlwZSwgZXhwZWN0U3luYyApO1xuXG5cdFx0XHQvLyBSZXR1cm4gZmFsc2UgdG8gYWxsb3cgbm9ybWFsIHByb2Nlc3NpbmcgaW4gdGhlIGNhbGxlclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cdFx0dHJpZ2dlcjogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEZvcmNlIHNldHVwIGJlZm9yZSB0cmlnZ2VyXG5cdFx0XHRsZXZlcmFnZU5hdGl2ZSggdGhpcywgdHlwZSApO1xuXG5cdFx0XHQvLyBSZXR1cm4gbm9uLWZhbHNlIHRvIGFsbG93IG5vcm1hbCBldmVudC1wYXRoIHByb3BhZ2F0aW9uXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0ZGVsZWdhdGVUeXBlOiBkZWxlZ2F0ZVR5cGVcblx0fTtcbn0gKTtcblxuLy8gQ3JlYXRlIG1vdXNlZW50ZXIvbGVhdmUgZXZlbnRzIHVzaW5nIG1vdXNlb3Zlci9vdXQgYW5kIGV2ZW50LXRpbWUgY2hlY2tzXG4vLyBzbyB0aGF0IGV2ZW50IGRlbGVnYXRpb24gd29ya3MgaW4galF1ZXJ5LlxuLy8gRG8gdGhlIHNhbWUgZm9yIHBvaW50ZXJlbnRlci9wb2ludGVybGVhdmUgYW5kIHBvaW50ZXJvdmVyL3BvaW50ZXJvdXRcbi8vXG4vLyBTdXBwb3J0OiBTYWZhcmkgNyBvbmx5XG4vLyBTYWZhcmkgc2VuZHMgbW91c2VlbnRlciB0b28gb2Z0ZW47IHNlZTpcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ3MDI1OFxuLy8gZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYnVnIChpdCBleGlzdGVkIGluIG9sZGVyIENocm9tZSB2ZXJzaW9ucyBhcyB3ZWxsKS5cbmpRdWVyeS5lYWNoKCB7XG5cdG1vdXNlZW50ZXI6IFwibW91c2VvdmVyXCIsXG5cdG1vdXNlbGVhdmU6IFwibW91c2VvdXRcIixcblx0cG9pbnRlcmVudGVyOiBcInBvaW50ZXJvdmVyXCIsXG5cdHBvaW50ZXJsZWF2ZTogXCJwb2ludGVyb3V0XCJcbn0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBvcmlnIF0gPSB7XG5cdFx0ZGVsZWdhdGVUeXBlOiBmaXgsXG5cdFx0YmluZFR5cGU6IGZpeCxcblxuXHRcdGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIHJldCxcblx0XHRcdFx0dGFyZ2V0ID0gdGhpcyxcblx0XHRcdFx0cmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsXG5cdFx0XHRcdGhhbmRsZU9iaiA9IGV2ZW50LmhhbmRsZU9iajtcblxuXHRcdFx0Ly8gRm9yIG1vdXNlZW50ZXIvbGVhdmUgY2FsbCB0aGUgaGFuZGxlciBpZiByZWxhdGVkIGlzIG91dHNpZGUgdGhlIHRhcmdldC5cblx0XHRcdC8vIE5COiBObyByZWxhdGVkVGFyZ2V0IGlmIHRoZSBtb3VzZSBsZWZ0L2VudGVyZWQgdGhlIGJyb3dzZXIgd2luZG93XG5cdFx0XHRpZiAoICFyZWxhdGVkIHx8ICggcmVsYXRlZCAhPT0gdGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRhcmdldCwgcmVsYXRlZCApICkgKSB7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBoYW5kbGVPYmoub3JpZ1R5cGU7XG5cdFx0XHRcdHJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0ZXZlbnQudHlwZSA9IGZpeDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0b246IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHRvbmU6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgMSApO1xuXHR9LFxuXHRvZmY6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGZuICkge1xuXHRcdHZhciBoYW5kbGVPYmosIHR5cGU7XG5cdFx0aWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2ZW50RGVmYXVsdCAmJiB0eXBlcy5oYW5kbGVPYmogKSB7XG5cblx0XHRcdC8vICggZXZlbnQgKSAgZGlzcGF0Y2hlZCBqUXVlcnkuRXZlbnRcblx0XHRcdGhhbmRsZU9iaiA9IHR5cGVzLmhhbmRsZU9iajtcblx0XHRcdGpRdWVyeSggdHlwZXMuZGVsZWdhdGVUYXJnZXQgKS5vZmYoXG5cdFx0XHRcdGhhbmRsZU9iai5uYW1lc3BhY2UgP1xuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSArIFwiLlwiICsgaGFuZGxlT2JqLm5hbWVzcGFjZSA6XG5cdFx0XHRcdFx0aGFuZGxlT2JqLm9yaWdUeXBlLFxuXHRcdFx0XHRoYW5kbGVPYmouc2VsZWN0b3IsXG5cdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggdHlwZW9mIHR5cGVzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLW9iamVjdCBbLCBzZWxlY3Rvcl0gKVxuXHRcdFx0Zm9yICggdHlwZSBpbiB0eXBlcyApIHtcblx0XHRcdFx0dGhpcy5vZmYoIHR5cGUsIHNlbGVjdG9yLCB0eXBlc1sgdHlwZSBdICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKCBzZWxlY3RvciA9PT0gZmFsc2UgfHwgdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMgWywgZm5dIClcblx0XHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsIHR5cGVzLCBmbiwgc2VsZWN0b3IgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG52YXJcblxuXHQvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5cblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNsaW50L2lzc3Vlcy8zMjI5XG5cdHJ4aHRtbFRhZyA9IC88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKilbXj5dKilcXC8+L2dpLFxuXG5cdC8qIGVzbGludC1lbmFibGUgKi9cblxuXHQvLyBTdXBwb3J0OiBJRSA8PTEwIC0gMTEsIEVkZ2UgMTIgLSAxMyBvbmx5XG5cdC8vIEluIElFL0VkZ2UgdXNpbmcgcmVnZXggZ3JvdXBzIGhlcmUgY2F1c2VzIHNldmVyZSBzbG93ZG93bnMuXG5cdC8vIFNlZSBodHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzE3MzY1MTIvXG5cdHJub0lubmVyaHRtbCA9IC88c2NyaXB0fDxzdHlsZXw8bGluay9pLFxuXG5cdC8vIGNoZWNrZWQ9XCJjaGVja2VkXCIgb3IgY2hlY2tlZFxuXHRyY2hlY2tlZCA9IC9jaGVja2VkXFxzKig/OltePV18PVxccyouY2hlY2tlZC4pL2ksXG5cdHJjbGVhblNjcmlwdCA9IC9eXFxzKjwhKD86XFxbQ0RBVEFcXFt8LS0pfCg/OlxcXVxcXXwtLSk+XFxzKiQvZztcblxuLy8gUHJlZmVyIGEgdGJvZHkgb3ZlciBpdHMgcGFyZW50IHRhYmxlIGZvciBjb250YWluaW5nIG5ldyByb3dzXG5mdW5jdGlvbiBtYW5pcHVsYXRpb25UYXJnZXQoIGVsZW0sIGNvbnRlbnQgKSB7XG5cdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGFibGVcIiApICYmXG5cdFx0bm9kZU5hbWUoIGNvbnRlbnQubm9kZVR5cGUgIT09IDExID8gY29udGVudCA6IGNvbnRlbnQuZmlyc3RDaGlsZCwgXCJ0clwiICkgKSB7XG5cblx0XHRyZXR1cm4galF1ZXJ5KCBlbGVtICkuY2hpbGRyZW4oIFwidGJvZHlcIiApWyAwIF0gfHwgZWxlbTtcblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG4vLyBSZXBsYWNlL3Jlc3RvcmUgdGhlIHR5cGUgYXR0cmlidXRlIG9mIHNjcmlwdCBlbGVtZW50cyBmb3Igc2FmZSBET00gbWFuaXB1bGF0aW9uXG5mdW5jdGlvbiBkaXNhYmxlU2NyaXB0KCBlbGVtICkge1xuXHRlbGVtLnR5cGUgPSAoIGVsZW0uZ2V0QXR0cmlidXRlKCBcInR5cGVcIiApICE9PSBudWxsICkgKyBcIi9cIiArIGVsZW0udHlwZTtcblx0cmV0dXJuIGVsZW07XG59XG5mdW5jdGlvbiByZXN0b3JlU2NyaXB0KCBlbGVtICkge1xuXHRpZiAoICggZWxlbS50eXBlIHx8IFwiXCIgKS5zbGljZSggMCwgNSApID09PSBcInRydWUvXCIgKSB7XG5cdFx0ZWxlbS50eXBlID0gZWxlbS50eXBlLnNsaWNlKCA1ICk7XG5cdH0gZWxzZSB7XG5cdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIFwidHlwZVwiICk7XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHtcblx0dmFyIGksIGwsIHR5cGUsIHBkYXRhT2xkLCBwZGF0YUN1ciwgdWRhdGFPbGQsIHVkYXRhQ3VyLCBldmVudHM7XG5cblx0aWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIDEuIENvcHkgcHJpdmF0ZSBkYXRhOiBldmVudHMsIGhhbmRsZXJzLCBldGMuXG5cdGlmICggZGF0YVByaXYuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0cGRhdGFPbGQgPSBkYXRhUHJpdi5hY2Nlc3MoIHNyYyApO1xuXHRcdHBkYXRhQ3VyID0gZGF0YVByaXYuc2V0KCBkZXN0LCBwZGF0YU9sZCApO1xuXHRcdGV2ZW50cyA9IHBkYXRhT2xkLmV2ZW50cztcblxuXHRcdGlmICggZXZlbnRzICkge1xuXHRcdFx0ZGVsZXRlIHBkYXRhQ3VyLmhhbmRsZTtcblx0XHRcdHBkYXRhQ3VyLmV2ZW50cyA9IHt9O1xuXG5cdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBldmVudHNbIHR5cGUgXS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmFkZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gMi4gQ29weSB1c2VyIGRhdGFcblx0aWYgKCBkYXRhVXNlci5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHR1ZGF0YU9sZCA9IGRhdGFVc2VyLmFjY2Vzcyggc3JjICk7XG5cdFx0dWRhdGFDdXIgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgdWRhdGFPbGQgKTtcblxuXHRcdGRhdGFVc2VyLnNldCggZGVzdCwgdWRhdGFDdXIgKTtcblx0fVxufVxuXG4vLyBGaXggSUUgYnVncywgc2VlIHN1cHBvcnQgdGVzdHNcbmZ1bmN0aW9uIGZpeElucHV0KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBub2RlTmFtZSA9IGRlc3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHQvLyBGYWlscyB0byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvbi5cblx0aWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmIHJjaGVja2FibGVUeXBlLnRlc3QoIHNyYy50eXBlICkgKSB7XG5cdFx0ZGVzdC5jaGVja2VkID0gc3JjLmNoZWNrZWQ7XG5cblx0Ly8gRmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQgc3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlvbnNcblx0fSBlbHNlIGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiB8fCBub2RlTmFtZSA9PT0gXCJ0ZXh0YXJlYVwiICkge1xuXHRcdGRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRlZmF1bHRWYWx1ZTtcblx0fVxufVxuXG5mdW5jdGlvbiBkb21NYW5pcCggY29sbGVjdGlvbiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKSB7XG5cblx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRhcmdzID0gY29uY2F0LmFwcGx5KCBbXSwgYXJncyApO1xuXG5cdHZhciBmcmFnbWVudCwgZmlyc3QsIHNjcmlwdHMsIGhhc1NjcmlwdHMsIG5vZGUsIGRvYyxcblx0XHRpID0gMCxcblx0XHRsID0gY29sbGVjdGlvbi5sZW5ndGgsXG5cdFx0aU5vQ2xvbmUgPSBsIC0gMSxcblx0XHR2YWx1ZSA9IGFyZ3NbIDAgXSxcblx0XHR2YWx1ZUlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCB2YWx1ZSApO1xuXG5cdC8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFnbWVudHMgdGhhdCBjb250YWluIGNoZWNrZWQsIGluIFdlYktpdFxuXHRpZiAoIHZhbHVlSXNGdW5jdGlvbiB8fFxuXHRcdFx0KCBsID4gMSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0IXN1cHBvcnQuY2hlY2tDbG9uZSAmJiByY2hlY2tlZC50ZXN0KCB2YWx1ZSApICkgKSB7XG5cdFx0cmV0dXJuIGNvbGxlY3Rpb24uZWFjaCggZnVuY3Rpb24oIGluZGV4ICkge1xuXHRcdFx0dmFyIHNlbGYgPSBjb2xsZWN0aW9uLmVxKCBpbmRleCApO1xuXHRcdFx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gKSB7XG5cdFx0XHRcdGFyZ3NbIDAgXSA9IHZhbHVlLmNhbGwoIHRoaXMsIGluZGV4LCBzZWxmLmh0bWwoKSApO1xuXHRcdFx0fVxuXHRcdFx0ZG9tTWFuaXAoIHNlbGYsIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICk7XG5cdFx0fSApO1xuXHR9XG5cblx0aWYgKCBsICkge1xuXHRcdGZyYWdtZW50ID0gYnVpbGRGcmFnbWVudCggYXJncywgY29sbGVjdGlvblsgMCBdLm93bmVyRG9jdW1lbnQsIGZhbHNlLCBjb2xsZWN0aW9uLCBpZ25vcmVkICk7XG5cdFx0Zmlyc3QgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0aWYgKCBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSApIHtcblx0XHRcdGZyYWdtZW50ID0gZmlyc3Q7XG5cdFx0fVxuXG5cdFx0Ly8gUmVxdWlyZSBlaXRoZXIgbmV3IGNvbnRlbnQgb3IgYW4gaW50ZXJlc3QgaW4gaWdub3JlZCBlbGVtZW50cyB0byBpbnZva2UgdGhlIGNhbGxiYWNrXG5cdFx0aWYgKCBmaXJzdCB8fCBpZ25vcmVkICkge1xuXHRcdFx0c2NyaXB0cyA9IGpRdWVyeS5tYXAoIGdldEFsbCggZnJhZ21lbnQsIFwic2NyaXB0XCIgKSwgZGlzYWJsZVNjcmlwdCApO1xuXHRcdFx0aGFzU2NyaXB0cyA9IHNjcmlwdHMubGVuZ3RoO1xuXG5cdFx0XHQvLyBVc2UgdGhlIG9yaWdpbmFsIGZyYWdtZW50IGZvciB0aGUgbGFzdCBpdGVtXG5cdFx0XHQvLyBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBiZWNhdXNlIGl0IGNhbiBlbmQgdXBcblx0XHRcdC8vIGJlaW5nIGVtcHRpZWQgaW5jb3JyZWN0bHkgaW4gY2VydGFpbiBzaXR1YXRpb25zICgjODA3MCkuXG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdG5vZGUgPSBmcmFnbWVudDtcblxuXHRcdFx0XHRpZiAoIGkgIT09IGlOb0Nsb25lICkge1xuXHRcdFx0XHRcdG5vZGUgPSBqUXVlcnkuY2xvbmUoIG5vZGUsIHRydWUsIHRydWUgKTtcblxuXHRcdFx0XHRcdC8vIEtlZXAgcmVmZXJlbmNlcyB0byBjbG9uZWQgc2NyaXB0cyBmb3IgbGF0ZXIgcmVzdG9yYXRpb25cblx0XHRcdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBzY3JpcHRzLCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhbGxiYWNrLmNhbGwoIGNvbGxlY3Rpb25bIGkgXSwgbm9kZSwgaSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cdFx0XHRcdGRvYyA9IHNjcmlwdHNbIHNjcmlwdHMubGVuZ3RoIC0gMSBdLm93bmVyRG9jdW1lbnQ7XG5cblx0XHRcdFx0Ly8gUmVlbmFibGUgc2NyaXB0c1xuXHRcdFx0XHRqUXVlcnkubWFwKCBzY3JpcHRzLCByZXN0b3JlU2NyaXB0ICk7XG5cblx0XHRcdFx0Ly8gRXZhbHVhdGUgZXhlY3V0YWJsZSBzY3JpcHRzIG9uIGZpcnN0IGRvY3VtZW50IGluc2VydGlvblxuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGhhc1NjcmlwdHM7IGkrKyApIHtcblx0XHRcdFx0XHRub2RlID0gc2NyaXB0c1sgaSBdO1xuXHRcdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggbm9kZS50eXBlIHx8IFwiXCIgKSAmJlxuXHRcdFx0XHRcdFx0IWRhdGFQcml2LmFjY2Vzcyggbm9kZSwgXCJnbG9iYWxFdmFsXCIgKSAmJlxuXHRcdFx0XHRcdFx0alF1ZXJ5LmNvbnRhaW5zKCBkb2MsIG5vZGUgKSApIHtcblxuXHRcdFx0XHRcdFx0aWYgKCBub2RlLnNyYyAmJiAoIG5vZGUudHlwZSB8fCBcIlwiICkudG9Mb3dlckNhc2UoKSAgIT09IFwibW9kdWxlXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gT3B0aW9uYWwgQUpBWCBkZXBlbmRlbmN5LCBidXQgd29uJ3QgcnVuIHNjcmlwdHMgaWYgbm90IHByZXNlbnRcblx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuX2V2YWxVcmwgJiYgIW5vZGUubm9Nb2R1bGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5Ll9ldmFsVXJsKCBub2RlLnNyYywge1xuXHRcdFx0XHRcdFx0XHRcdFx0bm9uY2U6IG5vZGUubm9uY2UgfHwgbm9kZS5nZXRBdHRyaWJ1dGUoIFwibm9uY2VcIiApXG5cdFx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRET01FdmFsKCBub2RlLnRleHRDb250ZW50LnJlcGxhY2UoIHJjbGVhblNjcmlwdCwgXCJcIiApLCBub2RlLCBkb2MgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY29sbGVjdGlvbjtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlKCBlbGVtLCBzZWxlY3Rvciwga2VlcERhdGEgKSB7XG5cdHZhciBub2RlLFxuXHRcdG5vZGVzID0gc2VsZWN0b3IgPyBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgZWxlbSApIDogZWxlbSxcblx0XHRpID0gMDtcblxuXHRmb3IgKCA7ICggbm9kZSA9IG5vZGVzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0aWYgKCAha2VlcERhdGEgJiYgbm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggbm9kZSApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBub2RlLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRpZiAoIGtlZXBEYXRhICYmIGlzQXR0YWNoZWQoIG5vZGUgKSApIHtcblx0XHRcdFx0c2V0R2xvYmFsRXZhbCggZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdH1cblx0XHRcdG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggbm9kZSApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGh0bWxQcmVmaWx0ZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHJldHVybiBodG1sLnJlcGxhY2UoIHJ4aHRtbFRhZywgXCI8JDE+PC8kMj5cIiApO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0dmFyIGksIGwsIHNyY0VsZW1lbnRzLCBkZXN0RWxlbWVudHMsXG5cdFx0XHRjbG9uZSA9IGVsZW0uY2xvbmVOb2RlKCB0cnVlICksXG5cdFx0XHRpblBhZ2UgPSBpc0F0dGFjaGVkKCBlbGVtICk7XG5cblx0XHQvLyBGaXggSUUgY2xvbmluZyBpc3N1ZXNcblx0XHRpZiAoICFzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkICYmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSApICYmXG5cdFx0XHRcdCFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gV2UgZXNjaGV3IFNpenpsZSBoZXJlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zOiBodHRwczovL2pzcGVyZi5jb20vZ2V0YWxsLXZzLXNpenpsZS8yXG5cdFx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7XG5cdFx0XHRzcmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSApO1xuXG5cdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zml4SW5wdXQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZVxuXHRcdGlmICggZGF0YUFuZEV2ZW50cyApIHtcblx0XHRcdGlmICggZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRcdHNyY0VsZW1lbnRzID0gc3JjRWxlbWVudHMgfHwgZ2V0QWxsKCBlbGVtICk7XG5cdFx0XHRcdGRlc3RFbGVtZW50cyA9IGRlc3RFbGVtZW50cyB8fCBnZXRBbGwoIGNsb25lICk7XG5cblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNsb25lQ29weUV2ZW50KCBlbGVtLCBjbG9uZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lLCBcInNjcmlwdFwiICk7XG5cdFx0aWYgKCBkZXN0RWxlbWVudHMubGVuZ3RoID4gMCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIGRlc3RFbGVtZW50cywgIWluUGFnZSAmJiBnZXRBbGwoIGVsZW0sIFwic2NyaXB0XCIgKSApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiB0aGUgY2xvbmVkIHNldFxuXHRcdHJldHVybiBjbG9uZTtcblx0fSxcblxuXHRjbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblx0XHR2YXIgZGF0YSwgZWxlbSwgdHlwZSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbCxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT09IHVuZGVmaW5lZDsgaSsrICkge1xuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cdFx0XHRcdGlmICggKCBkYXRhID0gZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhLmV2ZW50cyApIHtcblx0XHRcdFx0XHRcdGZvciAoIHR5cGUgaW4gZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggc3BlY2lhbFsgdHlwZSBdICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKTtcblxuXHRcdFx0XHRcdFx0XHQvLyBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gKSB7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1K1xuXHRcdFx0XHRcdC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZVxuXHRcdFx0XHRcdGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGRldGFjaDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yLCB0cnVlICk7XG5cdH0sXG5cblx0cmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IgKTtcblx0fSxcblxuXHR0ZXh0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRqUXVlcnkudGV4dCggdGhpcyApIDpcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0dGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0YXBwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xuXHRcdFx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0cHJlcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZSggZWxlbSwgdGFyZ2V0LmZpcnN0Q2hpbGQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YmVmb3JlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRhZnRlcjogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlbGVtLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7ICggZWxlbSA9IHRoaXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblxuXHRcdFx0XHQvLyBSZW1vdmUgYW55IHJlbWFpbmluZyBub2Rlc1xuXHRcdFx0XHRlbGVtLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdGRhdGFBbmRFdmVudHMgPSBkYXRhQW5kRXZlbnRzID09IG51bGwgPyBmYWxzZSA6IGRhdGFBbmRFdmVudHM7XG5cdFx0ZGVlcERhdGFBbmRFdmVudHMgPSBkZWVwRGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRhQW5kRXZlbnRzO1xuXG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY2xvbmUoIHRoaXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdGh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXSB8fCB7fSxcblx0XHRcdFx0aSA9IDAsXG5cdFx0XHRcdGwgPSB0aGlzLmxlbmd0aDtcblxuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmlubmVySFRNTDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2VlIGlmIHdlIGNhbiB0YWtlIGEgc2hvcnRjdXQgYW5kIGp1c3QgdXNlIGlubmVySFRNTFxuXHRcdFx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgIXJub0lubmVyaHRtbC50ZXN0KCB2YWx1ZSApICYmXG5cdFx0XHRcdCF3cmFwTWFwWyAoIHJ0YWdOYW1lLmV4ZWMoIHZhbHVlICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCkgXSApIHtcblxuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5odG1sUHJlZmlsdGVyKCB2YWx1ZSApO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdFx0ZWxlbSA9IHRoaXNbIGkgXSB8fCB7fTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXHRcdFx0XHRcdFx0XHRlbGVtLmlubmVySFRNTCA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW0gPSAwO1xuXG5cdFx0XHRcdC8vIElmIHVzaW5nIGlubmVySFRNTCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGZhbGxiYWNrIG1ldGhvZFxuXHRcdFx0XHR9IGNhdGNoICggZSApIHt9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmFwcGVuZCggdmFsdWUgKTtcblx0XHRcdH1cblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdHJlcGxhY2VXaXRoOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaWdub3JlZCA9IFtdO1xuXG5cdFx0Ly8gTWFrZSB0aGUgY2hhbmdlcywgcmVwbGFjaW5nIGVhY2ggbm9uLWlnbm9yZWQgY29udGV4dCBlbGVtZW50IHdpdGggdGhlIG5ldyBjb250ZW50XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcblxuXHRcdFx0aWYgKCBqUXVlcnkuaW5BcnJheSggdGhpcywgaWdub3JlZCApIDwgMCApIHtcblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCB0aGlzICkgKTtcblx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnJlcGxhY2VDaGlsZCggZWxlbSwgdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBGb3JjZSBjYWxsYmFjayBpbnZvY2F0aW9uXG5cdFx0fSwgaWdub3JlZCApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCB7XG5cdGFwcGVuZFRvOiBcImFwcGVuZFwiLFxuXHRwcmVwZW5kVG86IFwicHJlcGVuZFwiLFxuXHRpbnNlcnRCZWZvcmU6IFwiYmVmb3JlXCIsXG5cdGluc2VydEFmdGVyOiBcImFmdGVyXCIsXG5cdHJlcGxhY2VBbGw6IFwicmVwbGFjZVdpdGhcIlxufSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgZWxlbXMsXG5cdFx0XHRyZXQgPSBbXSxcblx0XHRcdGluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSxcblx0XHRcdGxhc3QgPSBpbnNlcnQubGVuZ3RoIC0gMSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyBpIDw9IGxhc3Q7IGkrKyApIHtcblx0XHRcdGVsZW1zID0gaSA9PT0gbGFzdCA/IHRoaXMgOiB0aGlzLmNsb25lKCB0cnVlICk7XG5cdFx0XHRqUXVlcnkoIGluc2VydFsgaSBdIClbIG9yaWdpbmFsIF0oIGVsZW1zICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0Ly8gLmdldCgpIGJlY2F1c2UgcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0cHVzaC5hcHBseSggcmV0LCBlbGVtcy5nZXQoKSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0ICk7XG5cdH07XG59ICk7XG52YXIgcm51bW5vbnB4ID0gbmV3IFJlZ0V4cCggXCJeKFwiICsgcG51bSArIFwiKSg/IXB4KVthLXolXSskXCIsIFwiaVwiICk7XG5cbnZhciBnZXRTdHlsZXMgPSBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seSwgRmlyZWZveCA8PTMwICgjMTUwOTgsICMxNDE1MClcblx0XHQvLyBJRSB0aHJvd3Mgb24gZWxlbWVudHMgY3JlYXRlZCBpbiBwb3B1cHNcblx0XHQvLyBGRiBtZWFud2hpbGUgdGhyb3dzIG9uIGZyYW1lIGVsZW1lbnRzIHRocm91Z2ggXCJkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlXCJcblx0XHR2YXIgdmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcblxuXHRcdGlmICggIXZpZXcgfHwgIXZpZXcub3BlbmVyICkge1xuXHRcdFx0dmlldyA9IHdpbmRvdztcblx0XHR9XG5cblx0XHRyZXR1cm4gdmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtICk7XG5cdH07XG5cbnZhciByYm94U3R5bGUgPSBuZXcgUmVnRXhwKCBjc3NFeHBhbmQuam9pbiggXCJ8XCIgKSwgXCJpXCIgKTtcblxuXG5cbiggZnVuY3Rpb24oKSB7XG5cblx0Ly8gRXhlY3V0aW5nIGJvdGggcGl4ZWxQb3NpdGlvbiAmIGJveFNpemluZ1JlbGlhYmxlIHRlc3RzIHJlcXVpcmUgb25seSBvbmUgbGF5b3V0XG5cdC8vIHNvIHRoZXkncmUgZXhlY3V0ZWQgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHRoZSBzZWNvbmQgY29tcHV0YXRpb24uXG5cdGZ1bmN0aW9uIGNvbXB1dGVTdHlsZVRlc3RzKCkge1xuXG5cdFx0Ly8gVGhpcyBpcyBhIHNpbmdsZXRvbiwgd2UgbmVlZCB0byBleGVjdXRlIGl0IG9ubHkgb25jZVxuXHRcdGlmICggIWRpdiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb250YWluZXIuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDt3aWR0aDo2MHB4O1wiICtcblx0XHRcdFwibWFyZ2luLXRvcDoxcHg7cGFkZGluZzowO2JvcmRlcjowXCI7XG5cdFx0ZGl2LnN0eWxlLmNzc1RleHQgPVxuXHRcdFx0XCJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpzY3JvbGw7XCIgK1xuXHRcdFx0XCJtYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4O1wiICtcblx0XHRcdFwid2lkdGg6NjAlO3RvcDoxJVwiO1xuXHRcdGRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggY29udGFpbmVyICkuYXBwZW5kQ2hpbGQoIGRpdiApO1xuXG5cdFx0dmFyIGRpdlN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIGRpdiApO1xuXHRcdHBpeGVsUG9zaXRpb25WYWwgPSBkaXZTdHlsZS50b3AgIT09IFwiMSVcIjtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHksIEZpcmVmb3ggPD0zIC0gNDRcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnRWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLm1hcmdpbkxlZnQgKSA9PT0gMTI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBTYWZhcmkgPD05LjEgLSAxMC4xLCBpT1MgPD03LjAgLSA5LjNcblx0XHQvLyBTb21lIHN0eWxlcyBjb21lIGJhY2sgd2l0aCBwZXJjZW50YWdlIHZhbHVlcywgZXZlbiB0aG91Z2ggdGhleSBzaG91bGRuJ3Rcblx0XHRkaXYuc3R5bGUucmlnaHQgPSBcIjYwJVwiO1xuXHRcdHBpeGVsQm94U3R5bGVzVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5yaWdodCApID09PSAzNjtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdFx0Ly8gRGV0ZWN0IG1pc3JlcG9ydGluZyBvZiBjb250ZW50IGRpbWVuc2lvbnMgZm9yIGJveC1zaXppbmc6Ym9yZGVyLWJveCBlbGVtZW50c1xuXHRcdGJveFNpemluZ1JlbGlhYmxlVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS53aWR0aCApID09PSAzNjtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdC8vIERldGVjdCBvdmVyZmxvdzpzY3JvbGwgc2NyZXdpbmVzcyAoZ2gtMzY5OSlcblx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD02NFxuXHRcdC8vIERvbid0IGdldCB0cmlja2VkIHdoZW4gem9vbSBhZmZlY3RzIG9mZnNldFdpZHRoIChnaC00MDI5KVxuXHRcdGRpdi5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblx0XHRzY3JvbGxib3hTaXplVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXYub2Zmc2V0V2lkdGggLyAzICkgPT09IDEyO1xuXG5cdFx0ZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTtcblxuXHRcdC8vIE51bGxpZnkgdGhlIGRpdiBzbyBpdCB3b3VsZG4ndCBiZSBzdG9yZWQgaW4gdGhlIG1lbW9yeSBhbmRcblx0XHQvLyBpdCB3aWxsIGFsc28gYmUgYSBzaWduIHRoYXQgY2hlY2tzIGFscmVhZHkgcGVyZm9ybWVkXG5cdFx0ZGl2ID0gbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIHJvdW5kUGl4ZWxNZWFzdXJlcyggbWVhc3VyZSApIHtcblx0XHRyZXR1cm4gTWF0aC5yb3VuZCggcGFyc2VGbG9hdCggbWVhc3VyZSApICk7XG5cdH1cblxuXHR2YXIgcGl4ZWxQb3NpdGlvblZhbCwgYm94U2l6aW5nUmVsaWFibGVWYWwsIHNjcm9sbGJveFNpemVWYWwsIHBpeGVsQm94U3R5bGVzVmFsLFxuXHRcdHJlbGlhYmxlTWFyZ2luTGVmdFZhbCxcblx0XHRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICksXG5cdFx0ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApO1xuXG5cdC8vIEZpbmlzaCBlYXJseSBpbiBsaW1pdGVkIChub24tYnJvd3NlcikgZW52aXJvbm1lbnRzXG5cdGlmICggIWRpdi5zdHlsZSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdC8vIFN0eWxlIG9mIGNsb25lZCBlbGVtZW50IGFmZmVjdHMgc291cmNlIGVsZW1lbnQgY2xvbmVkICgjODkwOClcblx0ZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJjb250ZW50LWJveFwiO1xuXHRkaXYuY2xvbmVOb2RlKCB0cnVlICkuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcIlwiO1xuXHRzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSA9IGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9PT0gXCJjb250ZW50LWJveFwiO1xuXG5cdGpRdWVyeS5leHRlbmQoIHN1cHBvcnQsIHtcblx0XHRib3hTaXppbmdSZWxpYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIGJveFNpemluZ1JlbGlhYmxlVmFsO1xuXHRcdH0sXG5cdFx0cGl4ZWxCb3hTdHlsZXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbEJveFN0eWxlc1ZhbDtcblx0XHR9LFxuXHRcdHBpeGVsUG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbFBvc2l0aW9uVmFsO1xuXHRcdH0sXG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0OiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcmVsaWFibGVNYXJnaW5MZWZ0VmFsO1xuXHRcdH0sXG5cdFx0c2Nyb2xsYm94U2l6ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHNjcm9sbGJveFNpemVWYWw7XG5cdFx0fVxuXHR9ICk7XG59ICkoKTtcblxuXG5mdW5jdGlvbiBjdXJDU1MoIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkge1xuXHR2YXIgd2lkdGgsIG1pbldpZHRoLCBtYXhXaWR0aCwgcmV0LFxuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA1MStcblx0XHQvLyBSZXRyaWV2aW5nIHN0eWxlIGJlZm9yZSBjb21wdXRlZCBzb21laG93XG5cdFx0Ly8gZml4ZXMgYW4gaXNzdWUgd2l0aCBnZXR0aW5nIHdyb25nIHZhbHVlc1xuXHRcdC8vIG9uIGRldGFjaGVkIGVsZW1lbnRzXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdGNvbXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7XG5cblx0Ly8gZ2V0UHJvcGVydHlWYWx1ZSBpcyBuZWVkZWQgZm9yOlxuXHQvLyAgIC5jc3MoJ2ZpbHRlcicpIChJRSA5IG9ubHksICMxMjUzNylcblx0Ly8gICAuY3NzKCctLWN1c3RvbVByb3BlcnR5KSAoIzMxNDQpXG5cdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0cmV0ID0gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSggbmFtZSApIHx8IGNvbXB1dGVkWyBuYW1lIF07XG5cblx0XHRpZiAoIHJldCA9PT0gXCJcIiAmJiAhaXNBdHRhY2hlZCggZWxlbSApICkge1xuXHRcdFx0cmV0ID0galF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gQSB0cmlidXRlIHRvIHRoZSBcImF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHNcIlxuXHRcdC8vIEFuZHJvaWQgQnJvd3NlciByZXR1cm5zIHBlcmNlbnRhZ2UgZm9yIHNvbWUgdmFsdWVzLFxuXHRcdC8vIGJ1dCB3aWR0aCBzZWVtcyB0byBiZSByZWxpYWJseSBwaXhlbHMuXG5cdFx0Ly8gVGhpcyBpcyBhZ2FpbnN0IHRoZSBDU1NPTSBkcmFmdCBzcGVjOlxuXHRcdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jcmVzb2x2ZWQtdmFsdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5waXhlbEJveFN0eWxlcygpICYmIHJudW1ub25weC50ZXN0KCByZXQgKSAmJiByYm94U3R5bGUudGVzdCggbmFtZSApICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgb3JpZ2luYWwgdmFsdWVzXG5cdFx0XHR3aWR0aCA9IHN0eWxlLndpZHRoO1xuXHRcdFx0bWluV2lkdGggPSBzdHlsZS5taW5XaWR0aDtcblx0XHRcdG1heFdpZHRoID0gc3R5bGUubWF4V2lkdGg7XG5cblx0XHRcdC8vIFB1dCBpbiB0aGUgbmV3IHZhbHVlcyB0byBnZXQgYSBjb21wdXRlZCB2YWx1ZSBvdXRcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gc3R5bGUubWF4V2lkdGggPSBzdHlsZS53aWR0aCA9IHJldDtcblx0XHRcdHJldCA9IGNvbXB1dGVkLndpZHRoO1xuXG5cdFx0XHQvLyBSZXZlcnQgdGhlIGNoYW5nZWQgdmFsdWVzXG5cdFx0XHRzdHlsZS53aWR0aCA9IHdpZHRoO1xuXHRcdFx0c3R5bGUubWluV2lkdGggPSBtaW5XaWR0aDtcblx0XHRcdHN0eWxlLm1heFdpZHRoID0gbWF4V2lkdGg7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJldCAhPT0gdW5kZWZpbmVkID9cblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0XHQvLyBJRSByZXR1cm5zIHpJbmRleCB2YWx1ZSBhcyBhbiBpbnRlZ2VyLlxuXHRcdHJldCArIFwiXCIgOlxuXHRcdHJldDtcbn1cblxuXG5mdW5jdGlvbiBhZGRHZXRIb29rSWYoIGNvbmRpdGlvbkZuLCBob29rRm4gKSB7XG5cblx0Ly8gRGVmaW5lIHRoZSBob29rLCB3ZSdsbCBjaGVjayBvbiB0aGUgZmlyc3QgcnVuIGlmIGl0J3MgcmVhbGx5IG5lZWRlZC5cblx0cmV0dXJuIHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBjb25kaXRpb25GbigpICkge1xuXG5cdFx0XHRcdC8vIEhvb2sgbm90IG5lZWRlZCAob3IgaXQncyBub3QgcG9zc2libGUgdG8gdXNlIGl0IGR1ZVxuXHRcdFx0XHQvLyB0byBtaXNzaW5nIGRlcGVuZGVuY3kpLCByZW1vdmUgaXQuXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLmdldDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBIb29rIG5lZWRlZDsgcmVkZWZpbmUgaXQgc28gdGhhdCB0aGUgc3VwcG9ydCB0ZXN0IGlzIG5vdCBleGVjdXRlZCBhZ2Fpbi5cblx0XHRcdHJldHVybiAoIHRoaXMuZ2V0ID0gaG9va0ZuICkuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH1cblx0fTtcbn1cblxuXG52YXIgY3NzUHJlZml4ZXMgPSBbIFwiV2Via2l0XCIsIFwiTW96XCIsIFwibXNcIiBdLFxuXHRlbXB0eVN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLnN0eWxlLFxuXHR2ZW5kb3JQcm9wcyA9IHt9O1xuXG4vLyBSZXR1cm4gYSB2ZW5kb3ItcHJlZml4ZWQgcHJvcGVydHkgb3IgdW5kZWZpbmVkXG5mdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHtcblxuXHQvLyBDaGVjayBmb3IgdmVuZG9yIHByZWZpeGVkIG5hbWVzXG5cdHZhciBjYXBOYW1lID0gbmFtZVsgMCBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKCAxICksXG5cdFx0aSA9IGNzc1ByZWZpeGVzLmxlbmd0aDtcblxuXHR3aGlsZSAoIGktLSApIHtcblx0XHRuYW1lID0gY3NzUHJlZml4ZXNbIGkgXSArIGNhcE5hbWU7XG5cdFx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0XHRyZXR1cm4gbmFtZTtcblx0XHR9XG5cdH1cbn1cblxuLy8gUmV0dXJuIGEgcG90ZW50aWFsbHktbWFwcGVkIGpRdWVyeS5jc3NQcm9wcyBvciB2ZW5kb3IgcHJlZml4ZWQgcHJvcGVydHlcbmZ1bmN0aW9uIGZpbmFsUHJvcE5hbWUoIG5hbWUgKSB7XG5cdHZhciBmaW5hbCA9IGpRdWVyeS5jc3NQcm9wc1sgbmFtZSBdIHx8IHZlbmRvclByb3BzWyBuYW1lIF07XG5cblx0aWYgKCBmaW5hbCApIHtcblx0XHRyZXR1cm4gZmluYWw7XG5cdH1cblx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cblx0cmV0dXJuIHZlbmRvclByb3BzWyBuYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHx8IG5hbWU7XG59XG5cblxudmFyXG5cblx0Ly8gU3dhcHBhYmxlIGlmIGRpc3BsYXkgaXMgbm9uZSBvciBzdGFydHMgd2l0aCB0YWJsZVxuXHQvLyBleGNlcHQgXCJ0YWJsZVwiLCBcInRhYmxlLWNlbGxcIiwgb3IgXCJ0YWJsZS1jYXB0aW9uXCJcblx0Ly8gU2VlIGhlcmUgZm9yIGRpc3BsYXkgdmFsdWVzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9kaXNwbGF5XG5cdHJkaXNwbGF5c3dhcCA9IC9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxcblx0cmN1c3RvbVByb3AgPSAvXi0tLyxcblx0Y3NzU2hvdyA9IHsgcG9zaXRpb246IFwiYWJzb2x1dGVcIiwgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiwgZGlzcGxheTogXCJibG9ja1wiIH0sXG5cdGNzc05vcm1hbFRyYW5zZm9ybSA9IHtcblx0XHRsZXR0ZXJTcGFjaW5nOiBcIjBcIixcblx0XHRmb250V2VpZ2h0OiBcIjQwMFwiXG5cdH07XG5cbmZ1bmN0aW9uIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgc3VidHJhY3QgKSB7XG5cblx0Ly8gQW55IHJlbGF0aXZlICgrLy0pIHZhbHVlcyBoYXZlIGFscmVhZHkgYmVlblxuXHQvLyBub3JtYWxpemVkIGF0IHRoaXMgcG9pbnRcblx0dmFyIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICk7XG5cdHJldHVybiBtYXRjaGVzID9cblxuXHRcdC8vIEd1YXJkIGFnYWluc3QgdW5kZWZpbmVkIFwic3VidHJhY3RcIiwgZS5nLiwgd2hlbiB1c2VkIGFzIGluIGNzc0hvb2tzXG5cdFx0TWF0aC5tYXgoIDAsIG1hdGNoZXNbIDIgXSAtICggc3VidHJhY3QgfHwgMCApICkgKyAoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSA6XG5cdFx0dmFsdWU7XG59XG5cbmZ1bmN0aW9uIGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBib3gsIGlzQm9yZGVyQm94LCBzdHlsZXMsIGNvbXB1dGVkVmFsICkge1xuXHR2YXIgaSA9IGRpbWVuc2lvbiA9PT0gXCJ3aWR0aFwiID8gMSA6IDAsXG5cdFx0ZXh0cmEgPSAwLFxuXHRcdGRlbHRhID0gMDtcblxuXHQvLyBBZGp1c3RtZW50IG1heSBub3QgYmUgbmVjZXNzYXJ5XG5cdGlmICggYm94ID09PSAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICkgKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgKSB7XG5cblx0XHQvLyBCb3RoIGJveCBtb2RlbHMgZXhjbHVkZSBtYXJnaW5cblx0XHRpZiAoIGJveCA9PT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIGJveCArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgY29udGVudC1ib3gsIHdlJ3JlIHNlZWtpbmcgXCJwYWRkaW5nXCIgb3IgXCJib3JkZXJcIiBvciBcIm1hcmdpblwiXG5cdFx0aWYgKCAhaXNCb3JkZXJCb3ggKSB7XG5cblx0XHRcdC8vIEFkZCBwYWRkaW5nXG5cdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblxuXHRcdFx0Ly8gRm9yIFwiYm9yZGVyXCIgb3IgXCJtYXJnaW5cIiwgYWRkIGJvcmRlclxuXHRcdFx0aWYgKCBib3ggIT09IFwicGFkZGluZ1wiICkge1xuXHRcdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXG5cdFx0XHQvLyBCdXQgc3RpbGwga2VlcCB0cmFjayBvZiBpdCBvdGhlcndpc2Vcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGV4dHJhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgYm9yZGVyLWJveCAoY29udGVudCArIHBhZGRpbmcgKyBib3JkZXIpLCB3ZSdyZSBzZWVraW5nIFwiY29udGVudFwiIG9yXG5cdFx0Ly8gXCJwYWRkaW5nXCIgb3IgXCJtYXJnaW5cIlxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIEZvciBcImNvbnRlbnRcIiwgc3VidHJhY3QgcGFkZGluZ1xuXHRcdFx0aWYgKCBib3ggPT09IFwiY29udGVudFwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yIFwiY29udGVudFwiIG9yIFwicGFkZGluZ1wiLCBzdWJ0cmFjdCBib3JkZXJcblx0XHRcdGlmICggYm94ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFjY291bnQgZm9yIHBvc2l0aXZlIGNvbnRlbnQtYm94IHNjcm9sbCBndXR0ZXIgd2hlbiByZXF1ZXN0ZWQgYnkgcHJvdmlkaW5nIGNvbXB1dGVkVmFsXG5cdGlmICggIWlzQm9yZGVyQm94ICYmIGNvbXB1dGVkVmFsID49IDAgKSB7XG5cblx0XHQvLyBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgYSByb3VuZGVkIHN1bSBvZiBjb250ZW50LCBwYWRkaW5nLCBzY3JvbGwgZ3V0dGVyLCBhbmQgYm9yZGVyXG5cdFx0Ly8gQXNzdW1pbmcgaW50ZWdlciBzY3JvbGwgZ3V0dGVyLCBzdWJ0cmFjdCB0aGUgcmVzdCBhbmQgcm91bmQgZG93blxuXHRcdGRlbHRhICs9IE1hdGgubWF4KCAwLCBNYXRoLmNlaWwoXG5cdFx0XHRlbGVtWyBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApIF0gLVxuXHRcdFx0Y29tcHV0ZWRWYWwgLVxuXHRcdFx0ZGVsdGEgLVxuXHRcdFx0ZXh0cmEgLVxuXHRcdFx0MC41XG5cblx0XHQvLyBJZiBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgdW5rbm93biwgdGhlbiB3ZSBjYW4ndCBkZXRlcm1pbmUgY29udGVudC1ib3ggc2Nyb2xsIGd1dHRlclxuXHRcdC8vIFVzZSBhbiBleHBsaWNpdCB6ZXJvIHRvIGF2b2lkIE5hTiAoZ2gtMzk2NClcblx0XHQpICkgfHwgMDtcblx0fVxuXG5cdHJldHVybiBkZWx0YTtcbn1cblxuZnVuY3Rpb24gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApIHtcblxuXHQvLyBTdGFydCB3aXRoIGNvbXB1dGVkIHN0eWxlXG5cdHZhciBzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblxuXHRcdC8vIFRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3csIG9ubHkgZmV0Y2ggYm94U2l6aW5nIGlmIHdlIG5lZWQgaXQgKGdoLTQzMjIpLlxuXHRcdC8vIEZha2UgY29udGVudC1ib3ggdW50aWwgd2Uga25vdyBpdCdzIG5lZWRlZCB0byBrbm93IHRoZSB0cnVlIHZhbHVlLlxuXHRcdGJveFNpemluZ05lZWRlZCA9ICFzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgfHwgZXh0cmEsXG5cdFx0aXNCb3JkZXJCb3ggPSBib3hTaXppbmdOZWVkZWQgJiZcblx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCIsXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IGlzQm9yZGVyQm94LFxuXG5cdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBkaW1lbnNpb24sIHN0eWxlcyApLFxuXHRcdG9mZnNldFByb3AgPSBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApO1xuXG5cdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NFxuXHQvLyBSZXR1cm4gYSBjb25mb3VuZGluZyBub24tcGl4ZWwgdmFsdWUgb3IgZmVpZ24gaWdub3JhbmNlLCBhcyBhcHByb3ByaWF0ZS5cblx0aWYgKCBybnVtbm9ucHgudGVzdCggdmFsICkgKSB7XG5cdFx0aWYgKCAhZXh0cmEgKSB7XG5cdFx0XHRyZXR1cm4gdmFsO1xuXHRcdH1cblx0XHR2YWwgPSBcImF1dG9cIjtcblx0fVxuXG5cblx0Ly8gRmFsbCBiYWNrIHRvIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCB3aGVuIHZhbHVlIGlzIFwiYXV0b1wiXG5cdC8vIFRoaXMgaGFwcGVucyBmb3IgaW5saW5lIGVsZW1lbnRzIHdpdGggbm8gZXhwbGljaXQgc2V0dGluZyAoZ2gtMzU3MSlcblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSAtIDQuMyBvbmx5XG5cdC8vIEFsc28gdXNlIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBmb3IgbWlzcmVwb3J0ZWQgaW5saW5lIGRpbWVuc2lvbnMgKGdoLTM2MDIpXG5cdC8vIFN1cHBvcnQ6IElFIDktMTEgb25seVxuXHQvLyBBbHNvIHVzZSBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgZm9yIHdoZW4gYm94IHNpemluZyBpcyB1bnJlbGlhYmxlXG5cdC8vIFdlIHVzZSBnZXRDbGllbnRSZWN0cygpIHRvIGNoZWNrIGZvciBoaWRkZW4vZGlzY29ubmVjdGVkLlxuXHQvLyBJbiB0aG9zZSBjYXNlcywgdGhlIGNvbXB1dGVkIHZhbHVlIGNhbiBiZSB0cnVzdGVkIHRvIGJlIGJvcmRlci1ib3hcblx0aWYgKCAoICFzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgJiYgaXNCb3JkZXJCb3ggfHxcblx0XHR2YWwgPT09IFwiYXV0b1wiIHx8XG5cdFx0IXBhcnNlRmxvYXQoIHZhbCApICYmIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiaW5saW5lXCIgKSAmJlxuXHRcdGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7XG5cblx0XHRpc0JvcmRlckJveCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCI7XG5cblx0XHQvLyBXaGVyZSBhdmFpbGFibGUsIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBhcHByb3hpbWF0ZSBib3JkZXIgYm94IGRpbWVuc2lvbnMuXG5cdFx0Ly8gV2hlcmUgbm90IGF2YWlsYWJsZSAoZS5nLiwgU1ZHKSwgYXNzdW1lIHVucmVsaWFibGUgYm94LXNpemluZyBhbmQgaW50ZXJwcmV0IHRoZVxuXHRcdC8vIHJldHJpZXZlZCB2YWx1ZSBhcyBhIGNvbnRlbnQgYm94IGRpbWVuc2lvbi5cblx0XHR2YWx1ZUlzQm9yZGVyQm94ID0gb2Zmc2V0UHJvcCBpbiBlbGVtO1xuXHRcdGlmICggdmFsdWVJc0JvcmRlckJveCApIHtcblx0XHRcdHZhbCA9IGVsZW1bIG9mZnNldFByb3AgXTtcblx0XHR9XG5cdH1cblxuXHQvLyBOb3JtYWxpemUgXCJcIiBhbmQgYXV0b1xuXHR2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwO1xuXG5cdC8vIEFkanVzdCBmb3IgdGhlIGVsZW1lbnQncyBib3ggbW9kZWxcblx0cmV0dXJuICggdmFsICtcblx0XHRib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRlbGVtLFxuXHRcdFx0ZGltZW5zaW9uLFxuXHRcdFx0ZXh0cmEgfHwgKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApLFxuXHRcdFx0dmFsdWVJc0JvcmRlckJveCxcblx0XHRcdHN0eWxlcyxcblxuXHRcdFx0Ly8gUHJvdmlkZSB0aGUgY3VycmVudCBjb21wdXRlZCBzaXplIHRvIHJlcXVlc3Qgc2Nyb2xsIGd1dHRlciBjYWxjdWxhdGlvbiAoZ2gtMzU4OSlcblx0XHRcdHZhbFxuXHRcdClcblx0KSArIFwicHhcIjtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIEFkZCBpbiBzdHlsZSBwcm9wZXJ0eSBob29rcyBmb3Igb3ZlcnJpZGluZyB0aGUgZGVmYXVsdFxuXHQvLyBiZWhhdmlvciBvZiBnZXR0aW5nIGFuZCBzZXR0aW5nIGEgc3R5bGUgcHJvcGVydHlcblx0Y3NzSG9va3M6IHtcblx0XHRvcGFjaXR5OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdFx0XHRcdC8vIFdlIHNob3VsZCBhbHdheXMgZ2V0IGEgbnVtYmVyIGJhY2sgZnJvbSBvcGFjaXR5XG5cdFx0XHRcdFx0dmFyIHJldCA9IGN1ckNTUyggZWxlbSwgXCJvcGFjaXR5XCIgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmV0ID09PSBcIlwiID8gXCIxXCIgOiByZXQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0Ly8gRG9uJ3QgYXV0b21hdGljYWxseSBhZGQgXCJweFwiIHRvIHRoZXNlIHBvc3NpYmx5LXVuaXRsZXNzIHByb3BlcnRpZXNcblx0Y3NzTnVtYmVyOiB7XG5cdFx0XCJhbmltYXRpb25JdGVyYXRpb25Db3VudFwiOiB0cnVlLFxuXHRcdFwiY29sdW1uQ291bnRcIjogdHJ1ZSxcblx0XHRcImZpbGxPcGFjaXR5XCI6IHRydWUsXG5cdFx0XCJmbGV4R3Jvd1wiOiB0cnVlLFxuXHRcdFwiZmxleFNocmlua1wiOiB0cnVlLFxuXHRcdFwiZm9udFdlaWdodFwiOiB0cnVlLFxuXHRcdFwiZ3JpZEFyZWFcIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5cIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5FbmRcIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5TdGFydFwiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd1wiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd0VuZFwiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd1N0YXJ0XCI6IHRydWUsXG5cdFx0XCJsaW5lSGVpZ2h0XCI6IHRydWUsXG5cdFx0XCJvcGFjaXR5XCI6IHRydWUsXG5cdFx0XCJvcmRlclwiOiB0cnVlLFxuXHRcdFwib3JwaGFuc1wiOiB0cnVlLFxuXHRcdFwid2lkb3dzXCI6IHRydWUsXG5cdFx0XCJ6SW5kZXhcIjogdHJ1ZSxcblx0XHRcInpvb21cIjogdHJ1ZVxuXHR9LFxuXG5cdC8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3NlIG5hbWVzIHlvdSB3aXNoIHRvIGZpeCBiZWZvcmVcblx0Ly8gc2V0dGluZyBvciBnZXR0aW5nIHRoZSB2YWx1ZVxuXHRjc3NQcm9wczoge30sXG5cblx0Ly8gR2V0IGFuZCBzZXQgdGhlIHN0eWxlIHByb3BlcnR5IG9uIGEgRE9NIE5vZGVcblx0c3R5bGU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7XG5cblx0XHQvLyBEb24ndCBzZXQgc3R5bGVzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoICFlbGVtIHx8IGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWVcblx0XHR2YXIgcmV0LCB0eXBlLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0gY2FtZWxDYXNlKCBuYW1lICksXG5cdFx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICksXG5cdFx0XHRzdHlsZSA9IGVsZW0uc3R5bGU7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUuIFdlIGRvbid0XG5cdFx0Ly8gd2FudCB0byBxdWVyeSB0aGUgdmFsdWUgaWYgaXQgaXMgYSBDU1MgY3VzdG9tIHByb3BlcnR5XG5cdFx0Ly8gc2luY2UgdGhleSBhcmUgdXNlci1kZWZpbmVkLlxuXHRcdGlmICggIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdG5hbWUgPSBmaW5hbFByb3BOYW1lKCBvcmlnTmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIEdldHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24sIHRoZW4gdW5wcmVmaXhlZCB2ZXJzaW9uXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBDaGVjayBpZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWVcblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR0eXBlID0gdHlwZW9mIHZhbHVlO1xuXG5cdFx0XHQvLyBDb252ZXJ0IFwiKz1cIiBvciBcIi09XCIgdG8gcmVsYXRpdmUgbnVtYmVycyAoIzczNDUpXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwic3RyaW5nXCIgJiYgKCByZXQgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJiByZXRbIDEgXSApIHtcblx0XHRcdFx0dmFsdWUgPSBhZGp1c3RDU1MoIGVsZW0sIG5hbWUsIHJldCApO1xuXG5cdFx0XHRcdC8vIEZpeGVzIGJ1ZyAjOTIzN1xuXHRcdFx0XHR0eXBlID0gXCJudW1iZXJcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgbnVsbCBhbmQgTmFOIHZhbHVlcyBhcmVuJ3Qgc2V0ICgjNzExNilcblx0XHRcdGlmICggdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBudW1iZXIgd2FzIHBhc3NlZCBpbiwgYWRkIHRoZSB1bml0IChleGNlcHQgZm9yIGNlcnRhaW4gQ1NTIHByb3BlcnRpZXMpXG5cdFx0XHQvLyBUaGUgaXNDdXN0b21Qcm9wIGNoZWNrIGNhbiBiZSByZW1vdmVkIGluIGpRdWVyeSA0LjAgd2hlbiB3ZSBvbmx5IGF1dG8tYXBwZW5kXG5cdFx0XHQvLyBcInB4XCIgdG8gYSBmZXcgaGFyZGNvZGVkIHZhbHVlcy5cblx0XHRcdGlmICggdHlwZSA9PT0gXCJudW1iZXJcIiAmJiAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0XHR2YWx1ZSArPSByZXQgJiYgcmV0WyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBvcmlnTmFtZSBdID8gXCJcIiA6IFwicHhcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBiYWNrZ3JvdW5kLSogcHJvcHMgYWZmZWN0IG9yaWdpbmFsIGNsb25lJ3MgdmFsdWVzXG5cdFx0XHRpZiAoICFzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSAmJiB2YWx1ZSA9PT0gXCJcIiAmJiBuYW1lLmluZGV4T2YoIFwiYmFja2dyb3VuZFwiICkgPT09IDAgKSB7XG5cdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSBcImluaGVyaXRcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCwgdXNlIHRoYXQgdmFsdWUsIG90aGVyd2lzZSBqdXN0IHNldCB0aGUgc3BlY2lmaWVkIHZhbHVlXG5cdFx0XHRpZiAoICFob29rcyB8fCAhKCBcInNldFwiIGluIGhvb2tzICkgfHxcblx0XHRcdFx0KCB2YWx1ZSA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGlmICggaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0XHRcdHN0eWxlLnNldFByb3BlcnR5KCBuYW1lLCB2YWx1ZSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIG5vbi1jb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIGZhbHNlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdGhlcndpc2UganVzdCBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIHN0eWxlIG9iamVjdFxuXHRcdFx0cmV0dXJuIHN0eWxlWyBuYW1lIF07XG5cdFx0fVxuXHR9LFxuXG5cdGNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGV4dHJhLCBzdHlsZXMgKSB7XG5cdFx0dmFyIHZhbCwgbnVtLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0gY2FtZWxDYXNlKCBuYW1lICksXG5cdFx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUuIFdlIGRvbid0XG5cdFx0Ly8gd2FudCB0byBtb2RpZnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cblx0XHRpZiAoICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBUcnkgcHJlZml4ZWQgbmFtZSBmb2xsb3dlZCBieSB0aGUgdW5wcmVmaXhlZCBuYW1lXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyApIHtcblx0XHRcdHZhbCA9IGhvb2tzLmdldCggZWxlbSwgdHJ1ZSwgZXh0cmEgKTtcblx0XHR9XG5cblx0XHQvLyBPdGhlcndpc2UsIGlmIGEgd2F5IHRvIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZXhpc3RzLCB1c2UgdGhhdFxuXHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApO1xuXHRcdH1cblxuXHRcdC8vIENvbnZlcnQgXCJub3JtYWxcIiB0byBjb21wdXRlZCB2YWx1ZVxuXHRcdGlmICggdmFsID09PSBcIm5vcm1hbFwiICYmIG5hbWUgaW4gY3NzTm9ybWFsVHJhbnNmb3JtICkge1xuXHRcdFx0dmFsID0gY3NzTm9ybWFsVHJhbnNmb3JtWyBuYW1lIF07XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBudW1lcmljIGlmIGZvcmNlZCBvciBhIHF1YWxpZmllciB3YXMgcHJvdmlkZWQgYW5kIHZhbCBsb29rcyBudW1lcmljXG5cdFx0aWYgKCBleHRyYSA9PT0gXCJcIiB8fCBleHRyYSApIHtcblx0XHRcdG51bSA9IHBhcnNlRmxvYXQoIHZhbCApO1xuXHRcdFx0cmV0dXJuIGV4dHJhID09PSB0cnVlIHx8IGlzRmluaXRlKCBudW0gKSA/IG51bSB8fCAwIDogdmFsO1xuXHRcdH1cblxuXHRcdHJldHVybiB2YWw7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJoZWlnaHRcIiwgXCJ3aWR0aFwiIF0sIGZ1bmN0aW9uKCBpLCBkaW1lbnNpb24gKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgZGltZW5zaW9uIF0gPSB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQsIGV4dHJhICkge1xuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdFx0XHQvLyBDZXJ0YWluIGVsZW1lbnRzIGNhbiBoYXZlIGRpbWVuc2lvbiBpbmZvIGlmIHdlIGludmlzaWJseSBzaG93IHRoZW1cblx0XHRcdFx0Ly8gYnV0IGl0IG11c3QgaGF2ZSBhIGN1cnJlbnQgZGlzcGxheSBzdHlsZSB0aGF0IHdvdWxkIGJlbmVmaXRcblx0XHRcdFx0cmV0dXJuIHJkaXNwbGF5c3dhcC50ZXN0KCBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApICkgJiZcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA4K1xuXHRcdFx0XHRcdC8vIFRhYmxlIGNvbHVtbnMgaW4gU2FmYXJpIGhhdmUgbm9uLXplcm8gb2Zmc2V0V2lkdGggJiB6ZXJvXG5cdFx0XHRcdFx0Ly8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggdW5sZXNzIGRpc3BsYXkgaXMgY2hhbmdlZC5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHRcdFx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlXG5cdFx0XHRcdFx0Ly8gaW4gSUUgdGhyb3dzIGFuIGVycm9yLlxuXHRcdFx0XHRcdCggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggfHwgIWVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKSA/XG5cdFx0XHRcdFx0XHRzd2FwKCBlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKTtcblx0XHRcdFx0XHRcdH0gKSA6XG5cdFx0XHRcdFx0XHRnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBleHRyYSApIHtcblx0XHRcdHZhciBtYXRjaGVzLFxuXHRcdFx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblxuXHRcdFx0XHQvLyBPbmx5IHJlYWQgc3R5bGVzLnBvc2l0aW9uIGlmIHRoZSB0ZXN0IGhhcyBhIGNoYW5jZSB0byBmYWlsXG5cdFx0XHRcdC8vIHRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3cuXG5cdFx0XHRcdHNjcm9sbGJveFNpemVCdWdneSA9ICFzdXBwb3J0LnNjcm9sbGJveFNpemUoKSAmJlxuXHRcdFx0XHRcdHN0eWxlcy5wb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiLFxuXG5cdFx0XHRcdC8vIFRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3csIG9ubHkgZmV0Y2ggYm94U2l6aW5nIGlmIHdlIG5lZWQgaXQgKGdoLTM5OTEpXG5cdFx0XHRcdGJveFNpemluZ05lZWRlZCA9IHNjcm9sbGJveFNpemVCdWdneSB8fCBleHRyYSxcblx0XHRcdFx0aXNCb3JkZXJCb3ggPSBib3hTaXppbmdOZWVkZWQgJiZcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdFx0XHRzdWJ0cmFjdCA9IGV4dHJhID9cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRcdFx0XHRlbGVtLFxuXHRcdFx0XHRcdFx0ZGltZW5zaW9uLFxuXHRcdFx0XHRcdFx0ZXh0cmEsXG5cdFx0XHRcdFx0XHRpc0JvcmRlckJveCxcblx0XHRcdFx0XHRcdHN0eWxlc1xuXHRcdFx0XHRcdCkgOlxuXHRcdFx0XHRcdDA7XG5cblx0XHRcdC8vIEFjY291bnQgZm9yIHVucmVsaWFibGUgYm9yZGVyLWJveCBkaW1lbnNpb25zIGJ5IGNvbXBhcmluZyBvZmZzZXQqIHRvIGNvbXB1dGVkIGFuZFxuXHRcdFx0Ly8gZmFraW5nIGEgY29udGVudC1ib3ggdG8gZ2V0IGJvcmRlciBhbmQgcGFkZGluZyAoZ2gtMzY5OSlcblx0XHRcdGlmICggaXNCb3JkZXJCb3ggJiYgc2Nyb2xsYm94U2l6ZUJ1Z2d5ICkge1xuXHRcdFx0XHRzdWJ0cmFjdCAtPSBNYXRoLmNlaWwoXG5cdFx0XHRcdFx0ZWxlbVsgXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC1cblx0XHRcdFx0XHRwYXJzZUZsb2F0KCBzdHlsZXNbIGRpbWVuc2lvbiBdICkgLVxuXHRcdFx0XHRcdGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBcImJvcmRlclwiLCBmYWxzZSwgc3R5bGVzICkgLVxuXHRcdFx0XHRcdDAuNVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb252ZXJ0IHRvIHBpeGVscyBpZiB2YWx1ZSBhZGp1c3RtZW50IGlzIG5lZWRlZFxuXHRcdFx0aWYgKCBzdWJ0cmFjdCAmJiAoIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJlxuXHRcdFx0XHQoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSAhPT0gXCJweFwiICkge1xuXG5cdFx0XHRcdGVsZW0uc3R5bGVbIGRpbWVuc2lvbiBdID0gdmFsdWU7XG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5LmNzcyggZWxlbSwgZGltZW5zaW9uICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICk7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuY3NzSG9va3MubWFyZ2luTGVmdCA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5yZWxpYWJsZU1hcmdpbkxlZnQsXG5cdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0cmV0dXJuICggcGFyc2VGbG9hdCggY3VyQ1NTKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiApICkgfHxcblx0XHRcdFx0ZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC1cblx0XHRcdFx0XHRzd2FwKCBlbGVtLCB7IG1hcmdpbkxlZnQ6IDAgfSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuXHRcdFx0XHRcdH0gKVxuXHRcdFx0XHQpICsgXCJweFwiO1xuXHRcdH1cblx0fVxuKTtcblxuLy8gVGhlc2UgaG9va3MgYXJlIHVzZWQgYnkgYW5pbWF0ZSB0byBleHBhbmQgcHJvcGVydGllc1xualF1ZXJ5LmVhY2goIHtcblx0bWFyZ2luOiBcIlwiLFxuXHRwYWRkaW5nOiBcIlwiLFxuXHRib3JkZXI6IFwiV2lkdGhcIlxufSwgZnVuY3Rpb24oIHByZWZpeCwgc3VmZml4ICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdID0ge1xuXHRcdGV4cGFuZDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGkgPSAwLFxuXHRcdFx0XHRleHBhbmRlZCA9IHt9LFxuXG5cdFx0XHRcdC8vIEFzc3VtZXMgYSBzaW5nbGUgbnVtYmVyIGlmIG5vdCBhIHN0cmluZ1xuXHRcdFx0XHRwYXJ0cyA9IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlLnNwbGl0KCBcIiBcIiApIDogWyB2YWx1ZSBdO1xuXG5cdFx0XHRmb3IgKCA7IGkgPCA0OyBpKysgKSB7XG5cdFx0XHRcdGV4cGFuZGVkWyBwcmVmaXggKyBjc3NFeHBhbmRbIGkgXSArIHN1ZmZpeCBdID1cblx0XHRcdFx0XHRwYXJ0c1sgaSBdIHx8IHBhcnRzWyBpIC0gMiBdIHx8IHBhcnRzWyAwIF07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBleHBhbmRlZDtcblx0XHR9XG5cdH07XG5cblx0aWYgKCBwcmVmaXggIT09IFwibWFyZ2luXCIgKSB7XG5cdFx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXS5zZXQgPSBzZXRQb3NpdGl2ZU51bWJlcjtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGNzczogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHRcdHZhciBzdHlsZXMsIGxlbixcblx0XHRcdFx0bWFwID0ge30sXG5cdFx0XHRcdGkgPSAwO1xuXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIG5hbWUgKSApIHtcblx0XHRcdFx0c3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICk7XG5cdFx0XHRcdGxlbiA9IG5hbWUubGVuZ3RoO1xuXG5cdFx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRcdG1hcFsgbmFtZVsgaSBdIF0gPSBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lWyBpIF0sIGZhbHNlLCBzdHlsZXMgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBtYXA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lLCB2YWx1ZSApIDpcblx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgbmFtZSApO1xuXHRcdH0sIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9XG59ICk7XG5cblxuZnVuY3Rpb24gVHdlZW4oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICkge1xuXHRyZXR1cm4gbmV3IFR3ZWVuLnByb3RvdHlwZS5pbml0KCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApO1xufVxualF1ZXJ5LlR3ZWVuID0gVHdlZW47XG5cblR3ZWVuLnByb3RvdHlwZSA9IHtcblx0Y29uc3RydWN0b3I6IFR3ZWVuLFxuXHRpbml0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcsIHVuaXQgKSB7XG5cdFx0dGhpcy5lbGVtID0gZWxlbTtcblx0XHR0aGlzLnByb3AgPSBwcm9wO1xuXHRcdHRoaXMuZWFzaW5nID0gZWFzaW5nIHx8IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHQ7XG5cdFx0dGhpcy5vcHRpb25zID0gb3B0aW9ucztcblx0XHR0aGlzLnN0YXJ0ID0gdGhpcy5ub3cgPSB0aGlzLmN1cigpO1xuXHRcdHRoaXMuZW5kID0gZW5kO1xuXHRcdHRoaXMudW5pdCA9IHVuaXQgfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyBcIlwiIDogXCJweFwiICk7XG5cdH0sXG5cdGN1cjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnByb3AgXTtcblxuXHRcdHJldHVybiBob29rcyAmJiBob29rcy5nZXQgP1xuXHRcdFx0aG9va3MuZ2V0KCB0aGlzICkgOlxuXHRcdFx0VHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LmdldCggdGhpcyApO1xuXHR9LFxuXHRydW46IGZ1bmN0aW9uKCBwZXJjZW50ICkge1xuXHRcdHZhciBlYXNlZCxcblx0XHRcdGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnByb3AgXTtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLmR1cmF0aW9uICkge1xuXHRcdFx0dGhpcy5wb3MgPSBlYXNlZCA9IGpRdWVyeS5lYXNpbmdbIHRoaXMuZWFzaW5nIF0oXG5cdFx0XHRcdHBlcmNlbnQsIHRoaXMub3B0aW9ucy5kdXJhdGlvbiAqIHBlcmNlbnQsIDAsIDEsIHRoaXMub3B0aW9ucy5kdXJhdGlvblxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5wb3MgPSBlYXNlZCA9IHBlcmNlbnQ7XG5cdFx0fVxuXHRcdHRoaXMubm93ID0gKCB0aGlzLmVuZCAtIHRoaXMuc3RhcnQgKSAqIGVhc2VkICsgdGhpcy5zdGFydDtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLnN0ZXAgKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKCB0aGlzLmVsZW0sIHRoaXMubm93LCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBob29rcy5zZXQgKSB7XG5cdFx0XHRob29rcy5zZXQoIHRoaXMgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0VHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LnNldCggdGhpcyApO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufTtcblxuVHdlZW4ucHJvdG90eXBlLmluaXQucHJvdG90eXBlID0gVHdlZW4ucHJvdG90eXBlO1xuXG5Ud2Vlbi5wcm9wSG9va3MgPSB7XG5cdF9kZWZhdWx0OiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cdFx0XHR2YXIgcmVzdWx0O1xuXG5cdFx0XHQvLyBVc2UgYSBwcm9wZXJ0eSBvbiB0aGUgZWxlbWVudCBkaXJlY3RseSB3aGVuIGl0IGlzIG5vdCBhIERPTSBlbGVtZW50LFxuXHRcdFx0Ly8gb3Igd2hlbiB0aGVyZSBpcyBubyBtYXRjaGluZyBzdHlsZSBwcm9wZXJ0eSB0aGF0IGV4aXN0cy5cblx0XHRcdGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAhPT0gMSB8fFxuXHRcdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gIT0gbnVsbCAmJiB0d2Vlbi5lbGVtLnN0eWxlWyB0d2Vlbi5wcm9wIF0gPT0gbnVsbCApIHtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUGFzc2luZyBhbiBlbXB0eSBzdHJpbmcgYXMgYSAzcmQgcGFyYW1ldGVyIHRvIC5jc3Mgd2lsbCBhdXRvbWF0aWNhbGx5XG5cdFx0XHQvLyBhdHRlbXB0IGEgcGFyc2VGbG9hdCBhbmQgZmFsbGJhY2sgdG8gYSBzdHJpbmcgaWYgdGhlIHBhcnNlIGZhaWxzLlxuXHRcdFx0Ly8gU2ltcGxlIHZhbHVlcyBzdWNoIGFzIFwiMTBweFwiIGFyZSBwYXJzZWQgdG8gRmxvYXQ7XG5cdFx0XHQvLyBjb21wbGV4IHZhbHVlcyBzdWNoIGFzIFwicm90YXRlKDFyYWQpXCIgYXJlIHJldHVybmVkIGFzLWlzLlxuXHRcdFx0cmVzdWx0ID0galF1ZXJ5LmNzcyggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgXCJcIiApO1xuXG5cdFx0XHQvLyBFbXB0eSBzdHJpbmdzLCBudWxsLCB1bmRlZmluZWQgYW5kIFwiYXV0b1wiIGFyZSBjb252ZXJ0ZWQgdG8gMC5cblx0XHRcdHJldHVybiAhcmVzdWx0IHx8IHJlc3VsdCA9PT0gXCJhdXRvXCIgPyAwIDogcmVzdWx0O1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cblx0XHRcdC8vIFVzZSBzdGVwIGhvb2sgZm9yIGJhY2sgY29tcGF0LlxuXHRcdFx0Ly8gVXNlIGNzc0hvb2sgaWYgaXRzIHRoZXJlLlxuXHRcdFx0Ly8gVXNlIC5zdHlsZSBpZiBhdmFpbGFibGUgYW5kIHVzZSBwbGFpbiBwcm9wZXJ0aWVzIHdoZXJlIGF2YWlsYWJsZS5cblx0XHRcdGlmICggalF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSApIHtcblx0XHRcdFx0alF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSggdHdlZW4gKTtcblx0XHRcdH0gZWxzZSBpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKFxuXHRcdFx0XHRcdGpRdWVyeS5jc3NIb29rc1sgdHdlZW4ucHJvcCBdIHx8XG5cdFx0XHRcdFx0dHdlZW4uZWxlbS5zdHlsZVsgZmluYWxQcm9wTmFtZSggdHdlZW4ucHJvcCApIF0gIT0gbnVsbCApICkge1xuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIHR3ZWVuLm5vdyArIHR3ZWVuLnVuaXQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG4vLyBQYW5pYyBiYXNlZCBhcHByb2FjaCB0byBzZXR0aW5nIHRoaW5ncyBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblR3ZWVuLnByb3BIb29rcy5zY3JvbGxUb3AgPSBUd2Vlbi5wcm9wSG9va3Muc2Nyb2xsTGVmdCA9IHtcblx0c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cdFx0aWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICYmIHR3ZWVuLmVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdztcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5lYXNpbmcgPSB7XG5cdGxpbmVhcjogZnVuY3Rpb24oIHAgKSB7XG5cdFx0cmV0dXJuIHA7XG5cdH0sXG5cdHN3aW5nOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gMC41IC0gTWF0aC5jb3MoIHAgKiBNYXRoLlBJICkgLyAyO1xuXHR9LFxuXHRfZGVmYXVsdDogXCJzd2luZ1wiXG59O1xuXG5qUXVlcnkuZnggPSBUd2Vlbi5wcm90b3R5cGUuaW5pdDtcblxuLy8gQmFjayBjb21wYXQgPDEuOCBleHRlbnNpb24gcG9pbnRcbmpRdWVyeS5meC5zdGVwID0ge307XG5cblxuXG5cbnZhclxuXHRmeE5vdywgaW5Qcm9ncmVzcyxcblx0cmZ4dHlwZXMgPSAvXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sXG5cdHJydW4gPSAvcXVldWVIb29rcyQvO1xuXG5mdW5jdGlvbiBzY2hlZHVsZSgpIHtcblx0aWYgKCBpblByb2dyZXNzICkge1xuXHRcdGlmICggZG9jdW1lbnQuaGlkZGVuID09PSBmYWxzZSAmJiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lICkge1xuXHRcdFx0d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSggc2NoZWR1bGUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0d2luZG93LnNldFRpbWVvdXQoIHNjaGVkdWxlLCBqUXVlcnkuZnguaW50ZXJ2YWwgKTtcblx0XHR9XG5cblx0XHRqUXVlcnkuZngudGljaygpO1xuXHR9XG59XG5cbi8vIEFuaW1hdGlvbnMgY3JlYXRlZCBzeW5jaHJvbm91c2x5IHdpbGwgcnVuIHN5bmNocm9ub3VzbHlcbmZ1bmN0aW9uIGNyZWF0ZUZ4Tm93KCkge1xuXHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0ZnhOb3cgPSB1bmRlZmluZWQ7XG5cdH0gKTtcblx0cmV0dXJuICggZnhOb3cgPSBEYXRlLm5vdygpICk7XG59XG5cbi8vIEdlbmVyYXRlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIGEgc3RhbmRhcmQgYW5pbWF0aW9uXG5mdW5jdGlvbiBnZW5GeCggdHlwZSwgaW5jbHVkZVdpZHRoICkge1xuXHR2YXIgd2hpY2gsXG5cdFx0aSA9IDAsXG5cdFx0YXR0cnMgPSB7IGhlaWdodDogdHlwZSB9O1xuXG5cdC8vIElmIHdlIGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMSB0byBkbyBhbGwgY3NzRXhwYW5kIHZhbHVlcyxcblx0Ly8gb3RoZXJ3aXNlIHN0ZXAgdmFsdWUgaXMgMiB0byBza2lwIG92ZXIgTGVmdCBhbmQgUmlnaHRcblx0aW5jbHVkZVdpZHRoID0gaW5jbHVkZVdpZHRoID8gMSA6IDA7XG5cdGZvciAoIDsgaSA8IDQ7IGkgKz0gMiAtIGluY2x1ZGVXaWR0aCApIHtcblx0XHR3aGljaCA9IGNzc0V4cGFuZFsgaSBdO1xuXHRcdGF0dHJzWyBcIm1hcmdpblwiICsgd2hpY2ggXSA9IGF0dHJzWyBcInBhZGRpbmdcIiArIHdoaWNoIF0gPSB0eXBlO1xuXHR9XG5cblx0aWYgKCBpbmNsdWRlV2lkdGggKSB7XG5cdFx0YXR0cnMub3BhY2l0eSA9IGF0dHJzLndpZHRoID0gdHlwZTtcblx0fVxuXG5cdHJldHVybiBhdHRycztcbn1cblxuZnVuY3Rpb24gY3JlYXRlVHdlZW4oIHZhbHVlLCBwcm9wLCBhbmltYXRpb24gKSB7XG5cdHZhciB0d2Vlbixcblx0XHRjb2xsZWN0aW9uID0gKCBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXSApLmNvbmNhdCggQW5pbWF0aW9uLnR3ZWVuZXJzWyBcIipcIiBdICksXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoO1xuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGlmICggKCB0d2VlbiA9IGNvbGxlY3Rpb25bIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBwcm9wLCB2YWx1ZSApICkgKSB7XG5cblx0XHRcdC8vIFdlJ3JlIGRvbmUgd2l0aCB0aGlzIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRQcmVmaWx0ZXIoIGVsZW0sIHByb3BzLCBvcHRzICkge1xuXHR2YXIgcHJvcCwgdmFsdWUsIHRvZ2dsZSwgaG9va3MsIG9sZGZpcmUsIHByb3BUd2VlbiwgcmVzdG9yZURpc3BsYXksIGRpc3BsYXksXG5cdFx0aXNCb3ggPSBcIndpZHRoXCIgaW4gcHJvcHMgfHwgXCJoZWlnaHRcIiBpbiBwcm9wcyxcblx0XHRhbmltID0gdGhpcyxcblx0XHRvcmlnID0ge30sXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlLFxuXHRcdGhpZGRlbiA9IGVsZW0ubm9kZVR5cGUgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICksXG5cdFx0ZGF0YVNob3cgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZnhzaG93XCIgKTtcblxuXHQvLyBRdWV1ZS1za2lwcGluZyBhbmltYXRpb25zIGhpamFjayB0aGUgZnggaG9va3Ncblx0aWYgKCAhb3B0cy5xdWV1ZSApIHtcblx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgXCJmeFwiICk7XG5cdFx0aWYgKCBob29rcy51bnF1ZXVlZCA9PSBudWxsICkge1xuXHRcdFx0aG9va3MudW5xdWV1ZWQgPSAwO1xuXHRcdFx0b2xkZmlyZSA9IGhvb2tzLmVtcHR5LmZpcmU7XG5cdFx0XHRob29rcy5lbXB0eS5maXJlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggIWhvb2tzLnVucXVldWVkICkge1xuXHRcdFx0XHRcdG9sZGZpcmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aG9va3MudW5xdWV1ZWQrKztcblxuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5zdXJlIHRoZSBjb21wbGV0ZSBoYW5kbGVyIGlzIGNhbGxlZCBiZWZvcmUgdGhpcyBjb21wbGV0ZXNcblx0XHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0aG9va3MudW5xdWV1ZWQtLTtcblx0XHRcdFx0aWYgKCAhalF1ZXJ5LnF1ZXVlKCBlbGVtLCBcImZ4XCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdFx0aG9va3MuZW1wdHkuZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gRGV0ZWN0IHNob3cvaGlkZSBhbmltYXRpb25zXG5cdGZvciAoIHByb3AgaW4gcHJvcHMgKSB7XG5cdFx0dmFsdWUgPSBwcm9wc1sgcHJvcCBdO1xuXHRcdGlmICggcmZ4dHlwZXMudGVzdCggdmFsdWUgKSApIHtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgcHJvcCBdO1xuXHRcdFx0dG9nZ2xlID0gdG9nZ2xlIHx8IHZhbHVlID09PSBcInRvZ2dsZVwiO1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gKCBoaWRkZW4gPyBcImhpZGVcIiA6IFwic2hvd1wiICkgKSB7XG5cblx0XHRcdFx0Ly8gUHJldGVuZCB0byBiZSBoaWRkZW4gaWYgdGhpcyBpcyBhIFwic2hvd1wiIGFuZFxuXHRcdFx0XHQvLyB0aGVyZSBpcyBzdGlsbCBkYXRhIGZyb20gYSBzdG9wcGVkIHNob3cvaGlkZVxuXHRcdFx0XHRpZiAoIHZhbHVlID09PSBcInNob3dcIiAmJiBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0aGlkZGVuID0gdHJ1ZTtcblxuXHRcdFx0XHQvLyBJZ25vcmUgYWxsIG90aGVyIG5vLW9wIHNob3cvaGlkZSBkYXRhXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG9yaWdbIHByb3AgXSA9IGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gfHwgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQmFpbCBvdXQgaWYgdGhpcyBpcyBhIG5vLW9wIGxpa2UgLmhpZGUoKS5oaWRlKClcblx0cHJvcFR3ZWVuID0gIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wcyApO1xuXHRpZiAoICFwcm9wVHdlZW4gJiYgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIG9yaWcgKSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBSZXN0cmljdCBcIm92ZXJmbG93XCIgYW5kIFwiZGlzcGxheVwiIHN0eWxlcyBkdXJpbmcgYm94IGFuaW1hdGlvbnNcblx0aWYgKCBpc0JveCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEsIEVkZ2UgMTIgLSAxNVxuXHRcdC8vIFJlY29yZCBhbGwgMyBvdmVyZmxvdyBhdHRyaWJ1dGVzIGJlY2F1c2UgSUUgZG9lcyBub3QgaW5mZXIgdGhlIHNob3J0aGFuZFxuXHRcdC8vIGZyb20gaWRlbnRpY2FsbHktdmFsdWVkIG92ZXJmbG93WCBhbmQgb3ZlcmZsb3dZIGFuZCBFZGdlIGp1c3QgbWlycm9yc1xuXHRcdC8vIHRoZSBvdmVyZmxvd1ggdmFsdWUgdGhlcmUuXG5cdFx0b3B0cy5vdmVyZmxvdyA9IFsgc3R5bGUub3ZlcmZsb3csIHN0eWxlLm92ZXJmbG93WCwgc3R5bGUub3ZlcmZsb3dZIF07XG5cblx0XHQvLyBJZGVudGlmeSBhIGRpc3BsYXkgdHlwZSwgcHJlZmVycmluZyBvbGQgc2hvdy9oaWRlIGRhdGEgb3ZlciB0aGUgQ1NTIGNhc2NhZGVcblx0XHRyZXN0b3JlRGlzcGxheSA9IGRhdGFTaG93ICYmIGRhdGFTaG93LmRpc3BsYXk7XG5cdFx0aWYgKCByZXN0b3JlRGlzcGxheSA9PSBudWxsICkge1xuXHRcdFx0cmVzdG9yZURpc3BsYXkgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0fVxuXHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ICkge1xuXHRcdFx0XHRkaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEdldCBub25lbXB0eSB2YWx1ZShzKSBieSB0ZW1wb3JhcmlseSBmb3JjaW5nIHZpc2liaWxpdHlcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7XG5cdFx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5IHx8IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQW5pbWF0ZSBpbmxpbmUgZWxlbWVudHMgYXMgaW5saW5lLWJsb2NrXG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcImlubGluZVwiIHx8IGRpc3BsYXkgPT09IFwiaW5saW5lLWJsb2NrXCIgJiYgcmVzdG9yZURpc3BsYXkgIT0gbnVsbCApIHtcblx0XHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJmbG9hdFwiICkgPT09IFwibm9uZVwiICkge1xuXG5cdFx0XHRcdC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGRpc3BsYXkgdmFsdWUgYXQgdGhlIGVuZCBvZiBwdXJlIHNob3cvaGlkZSBhbmltYXRpb25zXG5cdFx0XHRcdGlmICggIXByb3BUd2VlbiApIHtcblx0XHRcdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0c3R5bGUuZGlzcGxheSA9IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRkaXNwbGF5ID0gc3R5bGUuZGlzcGxheTtcblx0XHRcdFx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZGlzcGxheSA9PT0gXCJub25lXCIgPyBcIlwiIDogZGlzcGxheTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0c3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKCBvcHRzLm92ZXJmbG93ICkge1xuXHRcdHN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcblx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cdFx0XHRzdHlsZS5vdmVyZmxvdyA9IG9wdHMub3ZlcmZsb3dbIDAgXTtcblx0XHRcdHN0eWxlLm92ZXJmbG93WCA9IG9wdHMub3ZlcmZsb3dbIDEgXTtcblx0XHRcdHN0eWxlLm92ZXJmbG93WSA9IG9wdHMub3ZlcmZsb3dbIDIgXTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBJbXBsZW1lbnQgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0cHJvcFR3ZWVuID0gZmFsc2U7XG5cdGZvciAoIHByb3AgaW4gb3JpZyApIHtcblxuXHRcdC8vIEdlbmVyYWwgc2hvdy9oaWRlIHNldHVwIGZvciB0aGlzIGVsZW1lbnQgYW5pbWF0aW9uXG5cdFx0aWYgKCAhcHJvcFR3ZWVuICkge1xuXHRcdFx0aWYgKCBkYXRhU2hvdyApIHtcblx0XHRcdFx0aWYgKCBcImhpZGRlblwiIGluIGRhdGFTaG93ICkge1xuXHRcdFx0XHRcdGhpZGRlbiA9IGRhdGFTaG93LmhpZGRlbjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGF0YVNob3cgPSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIFwiZnhzaG93XCIsIHsgZGlzcGxheTogcmVzdG9yZURpc3BsYXkgfSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdG9yZSBoaWRkZW4vdmlzaWJsZSBmb3IgdG9nZ2xlIHNvIGAuc3RvcCgpLnRvZ2dsZSgpYCBcInJldmVyc2VzXCJcblx0XHRcdGlmICggdG9nZ2xlICkge1xuXHRcdFx0XHRkYXRhU2hvdy5oaWRkZW4gPSAhaGlkZGVuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTaG93IGVsZW1lbnRzIGJlZm9yZSBhbmltYXRpbmcgdGhlbVxuXHRcdFx0aWYgKCBoaWRkZW4gKSB7XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSwgdHJ1ZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1bmMgKi9cblxuXHRcdFx0YW5pbS5kb25lKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1sb29wLWZ1bmMgKi9cblxuXHRcdFx0XHQvLyBUaGUgZmluYWwgc3RlcCBvZiBhIFwiaGlkZVwiIGFuaW1hdGlvbiBpcyBhY3R1YWxseSBoaWRpbmcgdGhlIGVsZW1lbnRcblx0XHRcdFx0aWYgKCAhaGlkZGVuICkge1xuXHRcdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgXCJmeHNob3dcIiApO1xuXHRcdFx0XHRmb3IgKCBwcm9wIGluIG9yaWcgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBvcmlnWyBwcm9wIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdC8vIFBlci1wcm9wZXJ0eSBzZXR1cFxuXHRcdHByb3BUd2VlbiA9IGNyZWF0ZVR3ZWVuKCBoaWRkZW4gPyBkYXRhU2hvd1sgcHJvcCBdIDogMCwgcHJvcCwgYW5pbSApO1xuXHRcdGlmICggISggcHJvcCBpbiBkYXRhU2hvdyApICkge1xuXHRcdFx0ZGF0YVNob3dbIHByb3AgXSA9IHByb3BUd2Vlbi5zdGFydDtcblx0XHRcdGlmICggaGlkZGVuICkge1xuXHRcdFx0XHRwcm9wVHdlZW4uZW5kID0gcHJvcFR3ZWVuLnN0YXJ0O1xuXHRcdFx0XHRwcm9wVHdlZW4uc3RhcnQgPSAwO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBwcm9wRmlsdGVyKCBwcm9wcywgc3BlY2lhbEVhc2luZyApIHtcblx0dmFyIGluZGV4LCBuYW1lLCBlYXNpbmcsIHZhbHVlLCBob29rcztcblxuXHQvLyBjYW1lbENhc2UsIHNwZWNpYWxFYXNpbmcgYW5kIGV4cGFuZCBjc3NIb29rIHBhc3Ncblx0Zm9yICggaW5kZXggaW4gcHJvcHMgKSB7XG5cdFx0bmFtZSA9IGNhbWVsQ2FzZSggaW5kZXggKTtcblx0XHRlYXNpbmcgPSBzcGVjaWFsRWFzaW5nWyBuYW1lIF07XG5cdFx0dmFsdWUgPSBwcm9wc1sgaW5kZXggXTtcblx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRlYXNpbmcgPSB2YWx1ZVsgMSBdO1xuXHRcdFx0dmFsdWUgPSBwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyAwIF07XG5cdFx0fVxuXG5cdFx0aWYgKCBpbmRleCAhPT0gbmFtZSApIHtcblx0XHRcdHByb3BzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgaW5kZXggXTtcblx0XHR9XG5cblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdO1xuXHRcdGlmICggaG9va3MgJiYgXCJleHBhbmRcIiBpbiBob29rcyApIHtcblx0XHRcdHZhbHVlID0gaG9va3MuZXhwYW5kKCB2YWx1ZSApO1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBuYW1lIF07XG5cblx0XHRcdC8vIE5vdCBxdWl0ZSAkLmV4dGVuZCwgdGhpcyB3b24ndCBvdmVyd3JpdGUgZXhpc3Rpbmcga2V5cy5cblx0XHRcdC8vIFJldXNpbmcgJ2luZGV4JyBiZWNhdXNlIHdlIGhhdmUgdGhlIGNvcnJlY3QgXCJuYW1lXCJcblx0XHRcdGZvciAoIGluZGV4IGluIHZhbHVlICkge1xuXHRcdFx0XHRpZiAoICEoIGluZGV4IGluIHByb3BzICkgKSB7XG5cdFx0XHRcdFx0cHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgaW5kZXggXTtcblx0XHRcdFx0XHRzcGVjaWFsRWFzaW5nWyBpbmRleCBdID0gZWFzaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNwZWNpYWxFYXNpbmdbIG5hbWUgXSA9IGVhc2luZztcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gQW5pbWF0aW9uKCBlbGVtLCBwcm9wZXJ0aWVzLCBvcHRpb25zICkge1xuXHR2YXIgcmVzdWx0LFxuXHRcdHN0b3BwZWQsXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzLmxlbmd0aCxcblx0XHRkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIERvbid0IG1hdGNoIGVsZW0gaW4gdGhlIDphbmltYXRlZCBzZWxlY3RvclxuXHRcdFx0ZGVsZXRlIHRpY2suZWxlbTtcblx0XHR9ICksXG5cdFx0dGljayA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBzdG9wcGVkICkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHR2YXIgY3VycmVudFRpbWUgPSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLFxuXHRcdFx0XHRyZW1haW5pbmcgPSBNYXRoLm1heCggMCwgYW5pbWF0aW9uLnN0YXJ0VGltZSArIGFuaW1hdGlvbi5kdXJhdGlvbiAtIGN1cnJlbnRUaW1lICksXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCAyLjMgb25seVxuXHRcdFx0XHQvLyBBcmNoYWljIGNyYXNoIGJ1ZyB3b24ndCBhbGxvdyB1cyB0byB1c2UgYDEgLSAoIDAuNSB8fCAwIClgICgjMTI0OTcpXG5cdFx0XHRcdHRlbXAgPSByZW1haW5pbmcgLyBhbmltYXRpb24uZHVyYXRpb24gfHwgMCxcblx0XHRcdFx0cGVyY2VudCA9IDEgLSB0ZW1wLFxuXHRcdFx0XHRpbmRleCA9IDAsXG5cdFx0XHRcdGxlbmd0aCA9IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoO1xuXG5cdFx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggcGVyY2VudCApO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgcGVyY2VudCwgcmVtYWluaW5nIF0gKTtcblxuXHRcdFx0Ly8gSWYgdGhlcmUncyBtb3JlIHRvIGRvLCB5aWVsZFxuXHRcdFx0aWYgKCBwZXJjZW50IDwgMSAmJiBsZW5ndGggKSB7XG5cdFx0XHRcdHJldHVybiByZW1haW5pbmc7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHRoaXMgd2FzIGFuIGVtcHR5IGFuaW1hdGlvbiwgc3ludGhlc2l6ZSBhIGZpbmFsIHByb2dyZXNzIG5vdGlmaWNhdGlvblxuXHRcdFx0aWYgKCAhbGVuZ3RoICkge1xuXHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlc29sdmUgdGhlIGFuaW1hdGlvbiBhbmQgcmVwb3J0IGl0cyBjb25jbHVzaW9uXG5cdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24gXSApO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cdFx0YW5pbWF0aW9uID0gZGVmZXJyZWQucHJvbWlzZSgge1xuXHRcdFx0ZWxlbTogZWxlbSxcblx0XHRcdHByb3BzOiBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcGVydGllcyApLFxuXHRcdFx0b3B0czogalF1ZXJ5LmV4dGVuZCggdHJ1ZSwge1xuXHRcdFx0XHRzcGVjaWFsRWFzaW5nOiB7fSxcblx0XHRcdFx0ZWFzaW5nOiBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0XG5cdFx0XHR9LCBvcHRpb25zICksXG5cdFx0XHRvcmlnaW5hbFByb3BlcnRpZXM6IHByb3BlcnRpZXMsXG5cdFx0XHRvcmlnaW5hbE9wdGlvbnM6IG9wdGlvbnMsXG5cdFx0XHRzdGFydFRpbWU6IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksXG5cdFx0XHRkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbixcblx0XHRcdHR3ZWVuczogW10sXG5cdFx0XHRjcmVhdGVUd2VlbjogZnVuY3Rpb24oIHByb3AsIGVuZCApIHtcblx0XHRcdFx0dmFyIHR3ZWVuID0galF1ZXJ5LlR3ZWVuKCBlbGVtLCBhbmltYXRpb24ub3B0cywgcHJvcCwgZW5kLFxuXHRcdFx0XHRcdFx0YW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFuaW1hdGlvbi5vcHRzLmVhc2luZyApO1xuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zLnB1c2goIHR3ZWVuICk7XG5cdFx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHRcdH0sXG5cdFx0XHRzdG9wOiBmdW5jdGlvbiggZ290b0VuZCApIHtcblx0XHRcdFx0dmFyIGluZGV4ID0gMCxcblxuXHRcdFx0XHRcdC8vIElmIHdlIGFyZSBnb2luZyB0byB0aGUgZW5kLCB3ZSB3YW50IHRvIHJ1biBhbGwgdGhlIHR3ZWVuc1xuXHRcdFx0XHRcdC8vIG90aGVyd2lzZSB3ZSBza2lwIHRoaXMgcGFydFxuXHRcdFx0XHRcdGxlbmd0aCA9IGdvdG9FbmQgPyBhbmltYXRpb24udHdlZW5zLmxlbmd0aCA6IDA7XG5cdFx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0XHRzdG9wcGVkID0gdHJ1ZTtcblx0XHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggMSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVzb2x2ZSB3aGVuIHdlIHBsYXllZCB0aGUgbGFzdCBmcmFtZTsgb3RoZXJ3aXNlLCByZWplY3Rcblx0XHRcdFx0aWYgKCBnb3RvRW5kICkge1xuXHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblx0XHR9ICksXG5cdFx0cHJvcHMgPSBhbmltYXRpb24ucHJvcHM7XG5cblx0cHJvcEZpbHRlciggcHJvcHMsIGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmcgKTtcblxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdHJlc3VsdCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgZWxlbSwgcHJvcHMsIGFuaW1hdGlvbi5vcHRzICk7XG5cdFx0aWYgKCByZXN1bHQgKSB7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHJlc3VsdC5zdG9wICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggYW5pbWF0aW9uLmVsZW0sIGFuaW1hdGlvbi5vcHRzLnF1ZXVlICkuc3RvcCA9XG5cdFx0XHRcdFx0cmVzdWx0LnN0b3AuYmluZCggcmVzdWx0ICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fVxuXG5cdGpRdWVyeS5tYXAoIHByb3BzLCBjcmVhdGVUd2VlbiwgYW5pbWF0aW9uICk7XG5cblx0aWYgKCBpc0Z1bmN0aW9uKCBhbmltYXRpb24ub3B0cy5zdGFydCApICkge1xuXHRcdGFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApO1xuXHR9XG5cblx0Ly8gQXR0YWNoIGNhbGxiYWNrcyBmcm9tIG9wdGlvbnNcblx0YW5pbWF0aW9uXG5cdFx0LnByb2dyZXNzKCBhbmltYXRpb24ub3B0cy5wcm9ncmVzcyApXG5cdFx0LmRvbmUoIGFuaW1hdGlvbi5vcHRzLmRvbmUsIGFuaW1hdGlvbi5vcHRzLmNvbXBsZXRlIClcblx0XHQuZmFpbCggYW5pbWF0aW9uLm9wdHMuZmFpbCApXG5cdFx0LmFsd2F5cyggYW5pbWF0aW9uLm9wdHMuYWx3YXlzICk7XG5cblx0alF1ZXJ5LmZ4LnRpbWVyKFxuXHRcdGpRdWVyeS5leHRlbmQoIHRpY2ssIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRhbmltOiBhbmltYXRpb24sXG5cdFx0XHRxdWV1ZTogYW5pbWF0aW9uLm9wdHMucXVldWVcblx0XHR9IClcblx0KTtcblxuXHRyZXR1cm4gYW5pbWF0aW9uO1xufVxuXG5qUXVlcnkuQW5pbWF0aW9uID0galF1ZXJ5LmV4dGVuZCggQW5pbWF0aW9uLCB7XG5cblx0dHdlZW5lcnM6IHtcblx0XHRcIipcIjogWyBmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgdHdlZW4gPSB0aGlzLmNyZWF0ZVR3ZWVuKCBwcm9wLCB2YWx1ZSApO1xuXHRcdFx0YWRqdXN0Q1NTKCB0d2Vlbi5lbGVtLCBwcm9wLCByY3NzTnVtLmV4ZWMoIHZhbHVlICksIHR3ZWVuICk7XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fSBdXG5cdH0sXG5cblx0dHdlZW5lcjogZnVuY3Rpb24oIHByb3BzLCBjYWxsYmFjayApIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIHByb3BzICkgKSB7XG5cdFx0XHRjYWxsYmFjayA9IHByb3BzO1xuXHRcdFx0cHJvcHMgPSBbIFwiKlwiIF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHByb3BzID0gcHJvcHMubWF0Y2goIHJub3RodG1sd2hpdGUgKTtcblx0XHR9XG5cblx0XHR2YXIgcHJvcCxcblx0XHRcdGluZGV4ID0gMCxcblx0XHRcdGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRwcm9wID0gcHJvcHNbIGluZGV4IF07XG5cdFx0XHRBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSA9IEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0udW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH0sXG5cblx0cHJlZmlsdGVyczogWyBkZWZhdWx0UHJlZmlsdGVyIF0sXG5cblx0cHJlZmlsdGVyOiBmdW5jdGlvbiggY2FsbGJhY2ssIHByZXBlbmQgKSB7XG5cdFx0aWYgKCBwcmVwZW5kICkge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMudW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMucHVzaCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LnNwZWVkID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGZuICkge1xuXHR2YXIgb3B0ID0gc3BlZWQgJiYgdHlwZW9mIHNwZWVkID09PSBcIm9iamVjdFwiID8galF1ZXJ5LmV4dGVuZCgge30sIHNwZWVkICkgOiB7XG5cdFx0Y29tcGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHxcblx0XHRcdGlzRnVuY3Rpb24oIHNwZWVkICkgJiYgc3BlZWQsXG5cdFx0ZHVyYXRpb246IHNwZWVkLFxuXHRcdGVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhaXNGdW5jdGlvbiggZWFzaW5nICkgJiYgZWFzaW5nXG5cdH07XG5cblx0Ly8gR28gdG8gdGhlIGVuZCBzdGF0ZSBpZiBmeCBhcmUgb2ZmXG5cdGlmICggalF1ZXJ5LmZ4Lm9mZiApIHtcblx0XHRvcHQuZHVyYXRpb24gPSAwO1xuXG5cdH0gZWxzZSB7XG5cdFx0aWYgKCB0eXBlb2Ygb3B0LmR1cmF0aW9uICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0aWYgKCBvcHQuZHVyYXRpb24gaW4galF1ZXJ5LmZ4LnNwZWVkcyApIHtcblx0XHRcdFx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkc1sgb3B0LmR1cmF0aW9uIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIG9wdC5xdWV1ZSAtIHRydWUvdW5kZWZpbmVkL251bGwgLT4gXCJmeFwiXG5cdGlmICggb3B0LnF1ZXVlID09IG51bGwgfHwgb3B0LnF1ZXVlID09PSB0cnVlICkge1xuXHRcdG9wdC5xdWV1ZSA9IFwiZnhcIjtcblx0fVxuXG5cdC8vIFF1ZXVlaW5nXG5cdG9wdC5vbGQgPSBvcHQuY29tcGxldGU7XG5cblx0b3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHQub2xkICkgKSB7XG5cdFx0XHRvcHQub2xkLmNhbGwoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdC5xdWV1ZSApIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCBvcHQucXVldWUgKTtcblx0XHR9XG5cdH07XG5cblx0cmV0dXJuIG9wdDtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmFkZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXG5cdFx0Ly8gU2hvdyBhbnkgaGlkZGVuIGVsZW1lbnRzIGFmdGVyIHNldHRpbmcgb3BhY2l0eSB0byAwXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBpc0hpZGRlbldpdGhpblRyZWUgKS5jc3MoIFwib3BhY2l0eVwiLCAwICkuc2hvdygpXG5cblx0XHRcdC8vIEFuaW1hdGUgdG8gdGhlIHZhbHVlIHNwZWNpZmllZFxuXHRcdFx0LmVuZCgpLmFuaW1hdGUoIHsgb3BhY2l0eTogdG8gfSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fSxcblx0YW5pbWF0ZTogZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHZhciBlbXB0eSA9IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wICksXG5cdFx0XHRvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICksXG5cdFx0XHRkb0FuaW1hdGlvbiA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28gcGVyLXByb3BlcnR5IGVhc2luZyB3b24ndCBiZSBsb3N0XG5cdFx0XHRcdHZhciBhbmltID0gQW5pbWF0aW9uKCB0aGlzLCBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcCApLCBvcHRhbGwgKTtcblxuXHRcdFx0XHQvLyBFbXB0eSBhbmltYXRpb25zLCBvciBmaW5pc2hpbmcgcmVzb2x2ZXMgaW1tZWRpYXRlbHlcblx0XHRcdFx0aWYgKCBlbXB0eSB8fCBkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZmluaXNoXCIgKSApIHtcblx0XHRcdFx0XHRhbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGRvQW5pbWF0aW9uLmZpbmlzaCA9IGRvQW5pbWF0aW9uO1xuXG5cdFx0cmV0dXJuIGVtcHR5IHx8IG9wdGFsbC5xdWV1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0dGhpcy5lYWNoKCBkb0FuaW1hdGlvbiApIDpcblx0XHRcdHRoaXMucXVldWUoIG9wdGFsbC5xdWV1ZSwgZG9BbmltYXRpb24gKTtcblx0fSxcblx0c3RvcDogZnVuY3Rpb24oIHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7XG5cdFx0dmFyIHN0b3BRdWV1ZSA9IGZ1bmN0aW9uKCBob29rcyApIHtcblx0XHRcdHZhciBzdG9wID0gaG9va3Muc3RvcDtcblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0c3RvcCggZ290b0VuZCApO1xuXHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Z290b0VuZCA9IGNsZWFyUXVldWU7XG5cdFx0XHRjbGVhclF1ZXVlID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggY2xlYXJRdWV1ZSAmJiB0eXBlICE9PSBmYWxzZSApIHtcblx0XHRcdHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGRlcXVldWUgPSB0cnVlLFxuXHRcdFx0XHRpbmRleCA9IHR5cGUgIT0gbnVsbCAmJiB0eXBlICsgXCJxdWV1ZUhvb2tzXCIsXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKTtcblxuXHRcdFx0aWYgKCBpbmRleCApIHtcblx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCApIHtcblx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yICggaW5kZXggaW4gZGF0YSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICYmIHJydW4udGVzdCggaW5kZXggKSApIHtcblx0XHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmXG5cdFx0XHRcdFx0KCB0eXBlID09IG51bGwgfHwgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkgKSB7XG5cblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCBnb3RvRW5kICk7XG5cdFx0XHRcdFx0ZGVxdWV1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhcnQgdGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0IGZvcmNlZC5cblx0XHRcdC8vIFRpbWVycyBjdXJyZW50bHkgd2lsbCBjYWxsIHRoZWlyIGNvbXBsZXRlIGNhbGxiYWNrcywgd2hpY2hcblx0XHRcdC8vIHdpbGwgZGVxdWV1ZSBidXQgb25seSBpZiB0aGV5IHdlcmUgZ290b0VuZC5cblx0XHRcdGlmICggZGVxdWV1ZSB8fCAhZ290b0VuZCApIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cdGZpbmlzaDogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0aWYgKCB0eXBlICE9PSBmYWxzZSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaW5kZXgsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKSxcblx0XHRcdFx0cXVldWUgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZVwiIF0sXG5cdFx0XHRcdGhvb2tzID0gZGF0YVsgdHlwZSArIFwicXVldWVIb29rc1wiIF0sXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGxlbmd0aCA9IHF1ZXVlID8gcXVldWUubGVuZ3RoIDogMDtcblxuXHRcdFx0Ly8gRW5hYmxlIGZpbmlzaGluZyBmbGFnIG9uIHByaXZhdGUgZGF0YVxuXHRcdFx0ZGF0YS5maW5pc2ggPSB0cnVlO1xuXG5cdFx0XHQvLyBFbXB0eSB0aGUgcXVldWUgZmlyc3Rcblx0XHRcdGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgW10gKTtcblxuXHRcdFx0aWYgKCBob29rcyAmJiBob29rcy5zdG9wICkge1xuXHRcdFx0XHRob29rcy5zdG9wLmNhbGwoIHRoaXMsIHRydWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFjdGl2ZSBhbmltYXRpb25zLCBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiYgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkge1xuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhbmltYXRpb25zIGluIHRoZSBvbGQgcXVldWUgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRpZiAoIHF1ZXVlWyBpbmRleCBdICYmIHF1ZXVlWyBpbmRleCBdLmZpbmlzaCApIHtcblx0XHRcdFx0XHRxdWV1ZVsgaW5kZXggXS5maW5pc2guY2FsbCggdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFR1cm4gb2ZmIGZpbmlzaGluZyBmbGFnXG5cdFx0XHRkZWxldGUgZGF0YS5maW5pc2g7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwidG9nZ2xlXCIsIFwic2hvd1wiLCBcImhpZGVcIiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHtcblx0dmFyIGNzc0ZuID0galF1ZXJ5LmZuWyBuYW1lIF07XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBzcGVlZCA9PSBudWxsIHx8IHR5cGVvZiBzcGVlZCA9PT0gXCJib29sZWFuXCIgP1xuXHRcdFx0Y3NzRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApIDpcblx0XHRcdHRoaXMuYW5pbWF0ZSggZ2VuRngoIG5hbWUsIHRydWUgKSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxuLy8gR2VuZXJhdGUgc2hvcnRjdXRzIGZvciBjdXN0b20gYW5pbWF0aW9uc1xualF1ZXJ5LmVhY2goIHtcblx0c2xpZGVEb3duOiBnZW5GeCggXCJzaG93XCIgKSxcblx0c2xpZGVVcDogZ2VuRngoIFwiaGlkZVwiICksXG5cdHNsaWRlVG9nZ2xlOiBnZW5GeCggXCJ0b2dnbGVcIiApLFxuXHRmYWRlSW46IHsgb3BhY2l0eTogXCJzaG93XCIgfSxcblx0ZmFkZU91dDogeyBvcGFjaXR5OiBcImhpZGVcIiB9LFxuXHRmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6IFwidG9nZ2xlXCIgfVxufSwgZnVuY3Rpb24oIG5hbWUsIHByb3BzICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9wcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LnRpbWVycyA9IFtdO1xualF1ZXJ5LmZ4LnRpY2sgPSBmdW5jdGlvbigpIHtcblx0dmFyIHRpbWVyLFxuXHRcdGkgPSAwLFxuXHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnM7XG5cblx0ZnhOb3cgPSBEYXRlLm5vdygpO1xuXG5cdGZvciAoIDsgaSA8IHRpbWVycy5sZW5ndGg7IGkrKyApIHtcblx0XHR0aW1lciA9IHRpbWVyc1sgaSBdO1xuXG5cdFx0Ly8gUnVuIHRoZSB0aW1lciBhbmQgc2FmZWx5IHJlbW92ZSBpdCB3aGVuIGRvbmUgKGFsbG93aW5nIGZvciBleHRlcm5hbCByZW1vdmFsKVxuXHRcdGlmICggIXRpbWVyKCkgJiYgdGltZXJzWyBpIF0gPT09IHRpbWVyICkge1xuXHRcdFx0dGltZXJzLnNwbGljZSggaS0tLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCAhdGltZXJzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkuZnguc3RvcCgpO1xuXHR9XG5cdGZ4Tm93ID0gdW5kZWZpbmVkO1xufTtcblxualF1ZXJ5LmZ4LnRpbWVyID0gZnVuY3Rpb24oIHRpbWVyICkge1xuXHRqUXVlcnkudGltZXJzLnB1c2goIHRpbWVyICk7XG5cdGpRdWVyeS5meC5zdGFydCgpO1xufTtcblxualF1ZXJ5LmZ4LmludGVydmFsID0gMTM7XG5qUXVlcnkuZnguc3RhcnQgPSBmdW5jdGlvbigpIHtcblx0aWYgKCBpblByb2dyZXNzICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGluUHJvZ3Jlc3MgPSB0cnVlO1xuXHRzY2hlZHVsZSgpO1xufTtcblxualF1ZXJ5LmZ4LnN0b3AgPSBmdW5jdGlvbigpIHtcblx0aW5Qcm9ncmVzcyA9IG51bGw7XG59O1xuXG5qUXVlcnkuZnguc3BlZWRzID0ge1xuXHRzbG93OiA2MDAsXG5cdGZhc3Q6IDIwMCxcblxuXHQvLyBEZWZhdWx0IHNwZWVkXG5cdF9kZWZhdWx0OiA0MDBcbn07XG5cblxuLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBwZXJtaXNzaW9uLlxuLy8gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTAwMzI0MDE0NzQ3L2h0dHA6Ly9ibGluZHNpZ25hbHMuY29tL2luZGV4LnBocC8yMDA5LzA3L2pxdWVyeS1kZWxheS9cbmpRdWVyeS5mbi5kZWxheSA9IGZ1bmN0aW9uKCB0aW1lLCB0eXBlICkge1xuXHR0aW1lID0galF1ZXJ5LmZ4ID8galF1ZXJ5LmZ4LnNwZWVkc1sgdGltZSBdIHx8IHRpbWUgOiB0aW1lO1xuXHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHtcblx0XHR2YXIgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCBuZXh0LCB0aW1lICk7XG5cdFx0aG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdH07XG5cdH0gKTtcbn07XG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICksXG5cdFx0c2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJzZWxlY3RcIiApLFxuXHRcdG9wdCA9IHNlbGVjdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvcHRpb25cIiApICk7XG5cblx0aW5wdXQudHlwZSA9IFwiY2hlY2tib3hcIjtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4zIG9ubHlcblx0Ly8gRGVmYXVsdCB2YWx1ZSBmb3IgYSBjaGVja2JveCBzaG91bGQgYmUgXCJvblwiXG5cdHN1cHBvcnQuY2hlY2tPbiA9IGlucHV0LnZhbHVlICE9PSBcIlwiO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBNdXN0IGFjY2VzcyBzZWxlY3RlZEluZGV4IHRvIG1ha2UgZGVmYXVsdCBvcHRpb25zIHNlbGVjdFxuXHRzdXBwb3J0Lm9wdFNlbGVjdGVkID0gb3B0LnNlbGVjdGVkO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBBbiBpbnB1dCBsb3NlcyBpdHMgdmFsdWUgYWZ0ZXIgYmVjb21pbmcgYSByYWRpb1xuXHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRpbnB1dC52YWx1ZSA9IFwidFwiO1xuXHRpbnB1dC50eXBlID0gXCJyYWRpb1wiO1xuXHRzdXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gXCJ0XCI7XG59ICkoKTtcblxuXG52YXIgYm9vbEhvb2ssXG5cdGF0dHJIYW5kbGUgPSBqUXVlcnkuZXhwci5hdHRySGFuZGxlO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkuYXR0ciwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgYXR0cmlidXRlcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRyaWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgPT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXR0cmlidXRlIGhvb2tzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBsb3dlcmNhc2UgdmVyc2lvblxuXHRcdC8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25lIGlzIGRlZmluZWRcblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblx0XHRcdGhvb2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0KCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnRlc3QoIG5hbWUgKSA/IGJvb2xIb29rIDogdW5kZWZpbmVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gbnVsbCApIHtcblx0XHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyBcIlwiICk7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0Ly8gTm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgcmV0dXJuIG51bGwsIHdlIG5vcm1hbGl6ZSB0byB1bmRlZmluZWRcblx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7XG5cdH0sXG5cblx0YXR0ckhvb2tzOiB7XG5cdFx0dHlwZToge1xuXHRcdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggIXN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gXCJyYWRpb1wiICYmXG5cdFx0XHRcdFx0bm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICkge1xuXHRcdFx0XHRcdHZhciB2YWwgPSBlbGVtLnZhbHVlO1xuXHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgdmFsdWUgKTtcblx0XHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRcdGVsZW0udmFsdWUgPSB2YWw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0dmFyIG5hbWUsXG5cdFx0XHRpID0gMCxcblxuXHRcdFx0Ly8gQXR0cmlidXRlIG5hbWVzIGNhbiBjb250YWluIG5vbi1IVE1MIHdoaXRlc3BhY2UgY2hhcmFjdGVyc1xuXHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjYXR0cmlidXRlcy0yXG5cdFx0XHRhdHRyTmFtZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xuXG5cdFx0aWYgKCBhdHRyTmFtZXMgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdHdoaWxlICggKCBuYW1lID0gYXR0ck5hbWVzWyBpKysgXSApICkge1xuXHRcdFx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIb29rcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzXG5ib29sSG9vayA9IHtcblx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7XG5cdFx0aWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2Vcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lICk7XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lO1xuXHR9XG59O1xuXG5qUXVlcnkuZWFjaCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goIC9cXHcrL2cgKSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cdHZhciBnZXR0ZXIgPSBhdHRySGFuZGxlWyBuYW1lIF0gfHwgalF1ZXJ5LmZpbmQuYXR0cjtcblxuXHRhdHRySGFuZGxlWyBuYW1lIF0gPSBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0dmFyIHJldCwgaGFuZGxlLFxuXHRcdFx0bG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdGlmICggIWlzWE1MICkge1xuXG5cdFx0XHQvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wIGJ5IHRlbXBvcmFyaWx5IHJlbW92aW5nIHRoaXMgZnVuY3Rpb24gZnJvbSB0aGUgZ2V0dGVyXG5cdFx0XHRoYW5kbGUgPSBhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF07XG5cdFx0XHRhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF0gPSByZXQ7XG5cdFx0XHRyZXQgPSBnZXR0ZXIoIGVsZW0sIG5hbWUsIGlzWE1MICkgIT0gbnVsbCA/XG5cdFx0XHRcdGxvd2VyY2FzZU5hbWUgOlxuXHRcdFx0XHRudWxsO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gaGFuZGxlO1xuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xufSApO1xuXG5cblxuXG52YXIgcmZvY3VzYWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJjbGlja2FibGUgPSAvXig/OmF8YXJlYSkkL2k7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5wcm9wLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGRlbGV0ZSB0aGlzWyBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWUgXTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHRwcm9wOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0dmFyIHJldCwgaG9va3MsXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHQvLyBEb24ndCBnZXQvc2V0IHByb3BlcnRpZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXG5cdFx0aWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gRml4IG5hbWUgYW5kIGF0dGFjaCBob29rc1xuXHRcdFx0bmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTtcblx0XHRcdGhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFtZSBdO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAoIGVsZW1bIG5hbWUgXSA9IHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVsZW1bIG5hbWUgXTtcblx0fSxcblxuXHRwcm9wSG9va3M6IHtcblx0XHR0YWJJbmRleDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdFx0XHRcdC8vIGVsZW0udGFiSW5kZXggZG9lc24ndCBhbHdheXMgcmV0dXJuIHRoZVxuXHRcdFx0XHQvLyBjb3JyZWN0IHZhbHVlIHdoZW4gaXQgaGFzbid0IGJlZW4gZXhwbGljaXRseSBzZXRcblx0XHRcdFx0Ly8gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTQxMTE2MjMzMzQ3L2h0dHA6Ly9mbHVpZHByb2plY3Qub3JnL2Jsb2cvMjAwOC8wMS8wOS9nZXR0aW5nLXNldHRpbmctYW5kLXJlbW92aW5nLXRhYmluZGV4LXZhbHVlcy13aXRoLWphdmFzY3JpcHQvXG5cdFx0XHRcdC8vIFVzZSBwcm9wZXIgYXR0cmlidXRlIHJldHJpZXZhbCgjMTIwNzIpXG5cdFx0XHRcdHZhciB0YWJpbmRleCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIFwidGFiaW5kZXhcIiApO1xuXG5cdFx0XHRcdGlmICggdGFiaW5kZXggKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlSW50KCB0YWJpbmRleCwgMTAgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRyZm9jdXNhYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSB8fFxuXHRcdFx0XHRcdHJjbGlja2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmXG5cdFx0XHRcdFx0ZWxlbS5ocmVmXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRwcm9wRml4OiB7XG5cdFx0XCJmb3JcIjogXCJodG1sRm9yXCIsXG5cdFx0XCJjbGFzc1wiOiBcImNsYXNzTmFtZVwiXG5cdH1cbn0gKTtcblxuLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG4vLyBBY2Nlc3NpbmcgdGhlIHNlbGVjdGVkSW5kZXggcHJvcGVydHlcbi8vIGZvcmNlcyB0aGUgYnJvd3NlciB0byByZXNwZWN0IHNldHRpbmcgc2VsZWN0ZWRcbi8vIG9uIHRoZSBvcHRpb25cbi8vIFRoZSBnZXR0ZXIgZW5zdXJlcyBhIGRlZmF1bHQgb3B0aW9uIGlzIHNlbGVjdGVkXG4vLyB3aGVuIGluIGFuIG9wdGdyb3VwXG4vLyBlc2xpbnQgcnVsZSBcIm5vLXVudXNlZC1leHByZXNzaW9uc1wiIGlzIGRpc2FibGVkIGZvciB0aGlzIGNvZGVcbi8vIHNpbmNlIGl0IGNvbnNpZGVycyBzdWNoIGFjY2Vzc2lvbnMgbm9vcFxuaWYgKCAhc3VwcG9ydC5vcHRTZWxlY3RlZCApIHtcblx0alF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiBcIm9mZlwiICovXG5cblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIHBhcmVudCAmJiBwYXJlbnQucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0LyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogXCJvZmZcIiAqL1xuXG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdHBhcmVudC5zZWxlY3RlZEluZGV4O1xuXG5cdFx0XHRcdGlmICggcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxualF1ZXJ5LmVhY2goIFtcblx0XCJ0YWJJbmRleFwiLFxuXHRcInJlYWRPbmx5XCIsXG5cdFwibWF4TGVuZ3RoXCIsXG5cdFwiY2VsbFNwYWNpbmdcIixcblx0XCJjZWxsUGFkZGluZ1wiLFxuXHRcInJvd1NwYW5cIixcblx0XCJjb2xTcGFuXCIsXG5cdFwidXNlTWFwXCIsXG5cdFwiZnJhbWVCb3JkZXJcIixcblx0XCJjb250ZW50RWRpdGFibGVcIlxuXSwgZnVuY3Rpb24oKSB7XG5cdGpRdWVyeS5wcm9wRml4WyB0aGlzLnRvTG93ZXJDYXNlKCkgXSA9IHRoaXM7XG59ICk7XG5cblxuXG5cblx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2UgYWNjb3JkaW5nIHRvIEhUTUwgc3BlY1xuXHQvLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLWFzY2lpLXdoaXRlc3BhY2Vcblx0ZnVuY3Rpb24gc3RyaXBBbmRDb2xsYXBzZSggdmFsdWUgKSB7XG5cdFx0dmFyIHRva2VucyA9IHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cdFx0cmV0dXJuIHRva2Vucy5qb2luKCBcIiBcIiApO1xuXHR9XG5cblxuZnVuY3Rpb24gZ2V0Q2xhc3MoIGVsZW0gKSB7XG5cdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSAmJiBlbGVtLmdldEF0dHJpYnV0ZSggXCJjbGFzc1wiICkgfHwgXCJcIjtcbn1cblxuZnVuY3Rpb24gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICkge1xuXHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXHR9XG5cdHJldHVybiBbXTtcbn1cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRhZGRDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBjbGFzc2VzLCBlbGVtLCBjdXIsIGN1clZhbHVlLCBjbGF6eiwgaiwgZmluYWxWYWx1ZSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmFkZENsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRjbGFzc2VzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGNsYXNzZXMubGVuZ3RoICkge1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCBlbGVtICk7XG5cdFx0XHRcdGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKCBjbGF6eiA9IGNsYXNzZXNbIGorKyBdICkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIgKSA8IDAgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciArPSBjbGF6eiArIFwiIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsXG5cdFx0XHRpID0gMDtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5yZW1vdmVDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB0aGlzLmF0dHIoIFwiY2xhc3NcIiwgXCJcIiApO1xuXHRcdH1cblxuXHRcdGNsYXNzZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggY2xhc3Nlcy5sZW5ndGggKSB7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGN1clZhbHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTtcblxuXHRcdFx0XHQvLyBUaGlzIGV4cHJlc3Npb24gaXMgaGVyZSBmb3IgYmV0dGVyIGNvbXByZXNzaWJpbGl0eSAoc2VlIGFkZENsYXNzKVxuXHRcdFx0XHRjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRqID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgKmFsbCogaW5zdGFuY2VzXG5cdFx0XHRcdFx0XHR3aGlsZSAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgPSBjdXIucmVwbGFjZSggXCIgXCIgKyBjbGF6eiArIFwiIFwiLCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSwgc3RhdGVWYWwgKSB7XG5cdFx0dmFyIHR5cGUgPSB0eXBlb2YgdmFsdWUsXG5cdFx0XHRpc1ZhbGlkVmFsdWUgPSB0eXBlID09PSBcInN0cmluZ1wiIHx8IEFycmF5LmlzQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIHR5cGVvZiBzdGF0ZVZhbCA9PT0gXCJib29sZWFuXCIgJiYgaXNWYWxpZFZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlVmFsID8gdGhpcy5hZGRDbGFzcyggdmFsdWUgKSA6IHRoaXMucmVtb3ZlQ2xhc3MoIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKFxuXHRcdFx0XHRcdHZhbHVlLmNhbGwoIHRoaXMsIGksIGdldENsYXNzKCB0aGlzICksIHN0YXRlVmFsICksXG5cdFx0XHRcdFx0c3RhdGVWYWxcblx0XHRcdFx0KTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBjbGFzc05hbWUsIGksIHNlbGYsIGNsYXNzTmFtZXM7XG5cblx0XHRcdGlmICggaXNWYWxpZFZhbHVlICkge1xuXG5cdFx0XHRcdC8vIFRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzXG5cdFx0XHRcdGkgPSAwO1xuXHRcdFx0XHRzZWxmID0galF1ZXJ5KCB0aGlzICk7XG5cdFx0XHRcdGNsYXNzTmFtZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdFx0XHR3aGlsZSAoICggY2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHRcdC8vIENoZWNrIGVhY2ggY2xhc3NOYW1lIGdpdmVuLCBzcGFjZSBzZXBhcmF0ZWQgbGlzdFxuXHRcdFx0XHRcdGlmICggc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICkgKSB7XG5cdFx0XHRcdFx0XHRzZWxmLnJlbW92ZUNsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2VsZi5hZGRDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdC8vIFRvZ2dsZSB3aG9sZSBjbGFzcyBuYW1lXG5cdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0XHRjbGFzc05hbWUgPSBnZXRDbGFzcyggdGhpcyApO1xuXHRcdFx0XHRpZiAoIGNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGNsYXNzTmFtZSBpZiBzZXRcblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIFwiX19jbGFzc05hbWVfX1wiLCBjbGFzc05hbWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoZSBlbGVtZW50IGhhcyBhIGNsYXNzIG5hbWUgb3IgaWYgd2UncmUgcGFzc2VkIGBmYWxzZWAsXG5cdFx0XHRcdC8vIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBjbGFzc25hbWUgKGlmIHRoZXJlIHdhcyBvbmUsIHRoZSBhYm92ZSBzYXZlZCBpdCkuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBicmluZyBiYWNrIHdoYXRldmVyIHdhcyBwcmV2aW91c2x5IHNhdmVkIChpZiBhbnl0aGluZyksXG5cdFx0XHRcdC8vIGZhbGxpbmcgYmFjayB0byB0aGUgZW1wdHkgc3RyaW5nIGlmIG5vdGhpbmcgd2FzIHN0b3JlZC5cblx0XHRcdFx0aWYgKCB0aGlzLnNldEF0dHJpYnV0ZSApIHtcblx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lIHx8IHZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRcdFx0XHRcIlwiIDpcblx0XHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIgKSB8fCBcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRoYXNDbGFzczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBjbGFzc05hbWUsIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGNsYXNzTmFtZSA9IFwiIFwiICsgc2VsZWN0b3IgKyBcIiBcIjtcblx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0KCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGdldENsYXNzKCBlbGVtICkgKSArIFwiIFwiICkuaW5kZXhPZiggY2xhc3NOYW1lICkgPiAtMSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIHJyZXR1cm4gPSAvXFxyL2c7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0dmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGhvb2tzLCByZXQsIHZhbHVlSXNGdW5jdGlvbixcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF07XG5cblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHxcblx0XHRcdFx0XHRqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHRcdGlmICggaG9va3MgJiZcblx0XHRcdFx0XHRcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIFwidmFsdWVcIiApICkgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0ID0gZWxlbS52YWx1ZTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgbW9zdCBjb21tb24gc3RyaW5nIGNhc2VzXG5cdFx0XHRcdGlmICggdHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0LnJlcGxhY2UoIHJyZXR1cm4sIFwiXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEhhbmRsZSBjYXNlcyB3aGVyZSB2YWx1ZSBpcyBudWxsL3VuZGVmIG9yIG51bWJlclxuXHRcdFx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyBcIlwiIDogcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0dmFyIHZhbDtcblxuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlICE9PSAxICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsdWVJc0Z1bmN0aW9uICkge1xuXHRcdFx0XHR2YWwgPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBqUXVlcnkoIHRoaXMgKS52YWwoKSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFsID0gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzIFwiXCI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmdcblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHZhbCA9IFwiXCI7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdHZhbCArPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0dmFsID0galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKyBcIlwiO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyB0aGlzLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHQvLyBJZiBzZXQgcmV0dXJucyB1bmRlZmluZWQsIGZhbGwgYmFjayB0byBub3JtYWwgc2V0dGluZ1xuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCBcInZhbHVlXCIgKSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHR0aGlzLnZhbHVlID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHZhbEhvb2tzOiB7XG5cdFx0b3B0aW9uOiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHRcdHZhciB2YWwgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInZhbHVlXCIgKTtcblx0XHRcdFx0cmV0dXJuIHZhbCAhPSBudWxsID9cblx0XHRcdFx0XHR2YWwgOlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExIG9ubHlcblx0XHRcdFx0XHQvLyBvcHRpb24udGV4dCB0aHJvd3MgZXhjZXB0aW9ucyAoIzE0Njg2LCAjMTQ4NTgpXG5cdFx0XHRcdFx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2Vcblx0XHRcdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2Utd2hpdGVzcGFjZVxuXHRcdFx0XHRcdHN0cmlwQW5kQ29sbGFwc2UoIGpRdWVyeS50ZXh0KCBlbGVtICkgKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHNlbGVjdDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHZhbHVlLCBvcHRpb24sIGksXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHRpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCxcblx0XHRcdFx0XHRvbmUgPSBlbGVtLnR5cGUgPT09IFwic2VsZWN0LW9uZVwiLFxuXHRcdFx0XHRcdHZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSxcblx0XHRcdFx0XHRtYXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHRpZiAoIGluZGV4IDwgMCApIHtcblx0XHRcdFx0XHRpID0gbWF4O1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aSA9IG9uZSA/IGluZGV4IDogMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnNcblx0XHRcdFx0Zm9yICggOyBpIDwgbWF4OyBpKysgKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHQvLyBJRTgtOSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICgjMjU1MSlcblx0XHRcdFx0XHRpZiAoICggb3B0aW9uLnNlbGVjdGVkIHx8IGkgPT09IGluZGV4ICkgJiZcblxuXHRcdFx0XHRcdFx0XHQvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHRcdFx0XHRcdCFvcHRpb24uZGlzYWJsZWQgJiZcblx0XHRcdFx0XHRcdFx0KCAhb3B0aW9uLnBhcmVudE5vZGUuZGlzYWJsZWQgfHxcblx0XHRcdFx0XHRcdFx0XHQhbm9kZU5hbWUoIG9wdGlvbi5wYXJlbnROb2RlLCBcIm9wdGdyb3VwXCIgKSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7XG5cblx0XHRcdFx0XHRcdC8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzXG5cdFx0XHRcdFx0XHRpZiAoIG9uZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBNdWx0aS1TZWxlY3RzIHJldHVybiBhbiBhcnJheVxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH0sXG5cblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgb3B0aW9uU2V0LCBvcHRpb24sXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHR2YWx1ZXMgPSBqUXVlcnkubWFrZUFycmF5KCB2YWx1ZSApLFxuXHRcdFx0XHRcdGkgPSBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRvcHRpb24gPSBvcHRpb25zWyBpIF07XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXG5cdFx0XHRcdFx0aWYgKCBvcHRpb24uc2VsZWN0ZWQgPVxuXHRcdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGpRdWVyeS52YWxIb29rcy5vcHRpb24uZ2V0KCBvcHRpb24gKSwgdmFsdWVzICkgPiAtMVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0b3B0aW9uU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbmQtYXNzaWduICovXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGb3JjZSBicm93c2VycyB0byBiZWhhdmUgY29uc2lzdGVudGx5IHdoZW4gbm9uLW1hdGNoaW5nIHZhbHVlIGlzIHNldFxuXHRcdFx0XHRpZiAoICFvcHRpb25TZXQgKSB7XG5cdFx0XHRcdFx0ZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gUmFkaW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXJcbmpRdWVyeS5lYWNoKCBbIFwicmFkaW9cIiwgXCJjaGVja2JveFwiIF0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHtcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS5jaGVja2VkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeSggZWxlbSApLnZhbCgpLCB2YWx1ZSApID4gLTEgKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGlmICggIXN1cHBvcnQuY2hlY2tPbiApIHtcblx0XHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXS5nZXQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiICkgPT09IG51bGwgPyBcIm9uXCIgOiBlbGVtLnZhbHVlO1xuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUmV0dXJuIGpRdWVyeSBmb3IgYXR0cmlidXRlcy1vbmx5IGluY2x1c2lvblxuXG5cbnN1cHBvcnQuZm9jdXNpbiA9IFwib25mb2N1c2luXCIgaW4gd2luZG93O1xuXG5cbnZhciByZm9jdXNNb3JwaCA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxcblx0c3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgPSBmdW5jdGlvbiggZSApIHtcblx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9O1xuXG5qUXVlcnkuZXh0ZW5kKCBqUXVlcnkuZXZlbnQsIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9ubHlIYW5kbGVycyApIHtcblxuXHRcdHZhciBpLCBjdXIsIHRtcCwgYnViYmxlVHlwZSwgb250eXBlLCBoYW5kbGUsIHNwZWNpYWwsIGxhc3RFbGVtZW50LFxuXHRcdFx0ZXZlbnRQYXRoID0gWyBlbGVtIHx8IGRvY3VtZW50IF0sXG5cdFx0XHR0eXBlID0gaGFzT3duLmNhbGwoIGV2ZW50LCBcInR5cGVcIiApID8gZXZlbnQudHlwZSA6IGV2ZW50LFxuXHRcdFx0bmFtZXNwYWNlcyA9IGhhc093bi5jYWxsKCBldmVudCwgXCJuYW1lc3BhY2VcIiApID8gZXZlbnQubmFtZXNwYWNlLnNwbGl0KCBcIi5cIiApIDogW107XG5cblx0XHRjdXIgPSBsYXN0RWxlbWVudCA9IHRtcCA9IGVsZW0gPSBlbGVtIHx8IGRvY3VtZW50O1xuXG5cdFx0Ly8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBmb2N1cy9ibHVyIG1vcnBocyB0byBmb2N1c2luL291dDsgZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3dcblx0XHRpZiAoIHJmb2N1c01vcnBoLnRlc3QoIHR5cGUgKyBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlLmluZGV4T2YoIFwiLlwiICkgPiAtMSApIHtcblxuXHRcdFx0Ly8gTmFtZXNwYWNlZCB0cmlnZ2VyOyBjcmVhdGUgYSByZWdleHAgdG8gbWF0Y2ggZXZlbnQgdHlwZSBpbiBoYW5kbGUoKVxuXHRcdFx0bmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoIFwiLlwiICk7XG5cdFx0XHR0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpO1xuXHRcdFx0bmFtZXNwYWNlcy5zb3J0KCk7XG5cdFx0fVxuXHRcdG9udHlwZSA9IHR5cGUuaW5kZXhPZiggXCI6XCIgKSA8IDAgJiYgXCJvblwiICsgdHlwZTtcblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhIGpRdWVyeS5FdmVudCBvYmplY3QsIE9iamVjdCwgb3IganVzdCBhbiBldmVudCB0eXBlIHN0cmluZ1xuXHRcdGV2ZW50ID0gZXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0ZXZlbnQgOlxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCggdHlwZSwgdHlwZW9mIGV2ZW50ID09PSBcIm9iamVjdFwiICYmIGV2ZW50ICk7XG5cblx0XHQvLyBUcmlnZ2VyIGJpdG1hc2s6ICYgMSBmb3IgbmF0aXZlIGhhbmRsZXJzOyAmIDIgZm9yIGpRdWVyeSAoYWx3YXlzIHRydWUpXG5cdFx0ZXZlbnQuaXNUcmlnZ2VyID0gb25seUhhbmRsZXJzID8gMiA6IDM7XG5cdFx0ZXZlbnQubmFtZXNwYWNlID0gbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApO1xuXHRcdGV2ZW50LnJuYW1lc3BhY2UgPSBldmVudC5uYW1lc3BhY2UgP1xuXHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICkgOlxuXHRcdFx0bnVsbDtcblxuXHRcdC8vIENsZWFuIHVwIHRoZSBldmVudCBpbiBjYXNlIGl0IGlzIGJlaW5nIHJldXNlZFxuXHRcdGV2ZW50LnJlc3VsdCA9IHVuZGVmaW5lZDtcblx0XHRpZiAoICFldmVudC50YXJnZXQgKSB7XG5cdFx0XHRldmVudC50YXJnZXQgPSBlbGVtO1xuXHRcdH1cblxuXHRcdC8vIENsb25lIGFueSBpbmNvbWluZyBkYXRhIGFuZCBwcmVwZW5kIHRoZSBldmVudCwgY3JlYXRpbmcgdGhlIGhhbmRsZXIgYXJnIGxpc3Rcblx0XHRkYXRhID0gZGF0YSA9PSBudWxsID9cblx0XHRcdFsgZXZlbnQgXSA6XG5cdFx0XHRqUXVlcnkubWFrZUFycmF5KCBkYXRhLCBbIGV2ZW50IF0gKTtcblxuXHRcdC8vIEFsbG93IHNwZWNpYWwgZXZlbnRzIHRvIGRyYXcgb3V0c2lkZSB0aGUgbGluZXNcblx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgc3BlY2lhbC50cmlnZ2VyICYmIHNwZWNpYWwudHJpZ2dlci5hcHBseSggZWxlbSwgZGF0YSApID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgZXZlbnQgcHJvcGFnYXRpb24gcGF0aCBpbiBhZHZhbmNlLCBwZXIgVzNDIGV2ZW50cyBzcGVjICgjOTk1MSlcblx0XHQvLyBCdWJibGUgdXAgdG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93OyB3YXRjaCBmb3IgYSBnbG9iYWwgb3duZXJEb2N1bWVudCB2YXIgKCM5NzI0KVxuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhc3BlY2lhbC5ub0J1YmJsZSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0YnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7XG5cdFx0XHRpZiAoICFyZm9jdXNNb3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApICkge1xuXHRcdFx0XHRjdXIgPSBjdXIucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGZvciAoIDsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIGN1ciApO1xuXHRcdFx0XHR0bXAgPSBjdXI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKVxuXHRcdFx0aWYgKCB0bXAgPT09ICggZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50ICkgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCB0bXAuZGVmYXVsdFZpZXcgfHwgdG1wLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGV2ZW50UGF0aFsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGxhc3RFbGVtZW50ID0gY3VyO1xuXHRcdFx0ZXZlbnQudHlwZSA9IGkgPiAxID9cblx0XHRcdFx0YnViYmxlVHlwZSA6XG5cdFx0XHRcdHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTtcblxuXHRcdFx0Ly8galF1ZXJ5IGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9ICggZGF0YVByaXYuZ2V0KCBjdXIsIFwiZXZlbnRzXCIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gJiZcblx0XHRcdFx0ZGF0YVByaXYuZ2V0KCBjdXIsIFwiaGFuZGxlXCIgKTtcblx0XHRcdGlmICggaGFuZGxlICkge1xuXHRcdFx0XHRoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBOYXRpdmUgaGFuZGxlclxuXHRcdFx0aGFuZGxlID0gb250eXBlICYmIGN1clsgb250eXBlIF07XG5cdFx0XHRpZiAoIGhhbmRsZSAmJiBoYW5kbGUuYXBwbHkgJiYgYWNjZXB0RGF0YSggY3VyICkgKSB7XG5cdFx0XHRcdGV2ZW50LnJlc3VsdCA9IGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGV2ZW50LnR5cGUgPSB0eXBlO1xuXG5cdFx0Ly8gSWYgbm9ib2R5IHByZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRvIGl0IG5vd1xuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7XG5cblx0XHRcdGlmICggKCAhc3BlY2lhbC5fZGVmYXVsdCB8fFxuXHRcdFx0XHRzcGVjaWFsLl9kZWZhdWx0LmFwcGx5KCBldmVudFBhdGgucG9wKCksIGRhdGEgKSA9PT0gZmFsc2UgKSAmJlxuXHRcdFx0XHRhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cblx0XHRcdFx0Ly8gQ2FsbCBhIG5hdGl2ZSBET00gbWV0aG9kIG9uIHRoZSB0YXJnZXQgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBldmVudC5cblx0XHRcdFx0Ly8gRG9uJ3QgZG8gZGVmYXVsdCBhY3Rpb25zIG9uIHdpbmRvdywgdGhhdCdzIHdoZXJlIGdsb2JhbCB2YXJpYWJsZXMgYmUgKCM2MTcwKVxuXHRcdFx0XHRpZiAoIG9udHlwZSAmJiBpc0Z1bmN0aW9uKCBlbGVtWyB0eXBlIF0gKSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vIERvbid0IHJlLXRyaWdnZXIgYW4gb25GT08gZXZlbnQgd2hlbiB3ZSBjYWxsIGl0cyBGT08oKSBtZXRob2Rcblx0XHRcdFx0XHR0bXAgPSBlbGVtWyBvbnR5cGUgXTtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSBudWxsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFByZXZlbnQgcmUtdHJpZ2dlcmluZyBvZiB0aGUgc2FtZSBldmVudCwgc2luY2Ugd2UgYWxyZWFkeSBidWJibGVkIGl0IGFib3ZlXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHR5cGU7XG5cblx0XHRcdFx0XHRpZiAoIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRcdFx0XHRsYXN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBzdG9wUHJvcGFnYXRpb25DYWxsYmFjayApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW1bIHR5cGUgXSgpO1xuXG5cdFx0XHRcdFx0aWYgKCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0XHRcdFx0bGFzdEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IHRtcDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdC8vIFBpZ2d5YmFjayBvbiBhIGRvbm9yIGV2ZW50IHRvIHNpbXVsYXRlIGEgZGlmZmVyZW50IG9uZVxuXHQvLyBVc2VkIG9ubHkgZm9yIGBmb2N1cyhpbiB8IG91dClgIGV2ZW50c1xuXHRzaW11bGF0ZTogZnVuY3Rpb24oIHR5cGUsIGVsZW0sIGV2ZW50ICkge1xuXHRcdHZhciBlID0galF1ZXJ5LmV4dGVuZChcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoKSxcblx0XHRcdGV2ZW50LFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRpc1NpbXVsYXRlZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxlbSApO1xuXHR9XG5cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdHRyaWdnZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTtcblx0XHR9ICk7XG5cdH0sXG5cdHRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXTtcblx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIGVsZW0sIHRydWUgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxuXG4vLyBTdXBwb3J0OiBGaXJlZm94IDw9NDRcbi8vIEZpcmVmb3ggZG9lc24ndCBoYXZlIGZvY3VzKGluIHwgb3V0KSBldmVudHNcbi8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3Nzg3XG4vL1xuLy8gU3VwcG9ydDogQ2hyb21lIDw9NDggLSA0OSwgU2FmYXJpIDw9OS4wIC0gOS4xXG4vLyBmb2N1cyhpbiB8IG91dCkgZXZlbnRzIGZpcmUgYWZ0ZXIgZm9jdXMgJiBibHVyIGV2ZW50cyxcbi8vIHdoaWNoIGlzIHNwZWMgdmlvbGF0aW9uIC0gaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudHMtZm9jdXNldmVudC1ldmVudC1vcmRlclxuLy8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NDk4NTdcbmlmICggIXN1cHBvcnQuZm9jdXNpbiApIHtcblx0alF1ZXJ5LmVhY2goIHsgZm9jdXM6IFwiZm9jdXNpblwiLCBibHVyOiBcImZvY3Vzb3V0XCIgfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHtcblxuXHRcdC8vIEF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciBvbiB0aGUgZG9jdW1lbnQgd2hpbGUgc29tZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0XG5cdFx0dmFyIGhhbmRsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQuc2ltdWxhdGUoIGZpeCwgZXZlbnQudGFyZ2V0LCBqUXVlcnkuZXZlbnQuZml4KCBldmVudCApICk7XG5cdFx0fTtcblxuXHRcdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBmaXggXSA9IHtcblx0XHRcdHNldHVwOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCApO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5hZGRFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgKCBhdHRhY2hlcyB8fCAwICkgKyAxICk7XG5cdFx0XHR9LFxuXHRcdFx0dGVhcmRvd246IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMsXG5cdFx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4ICkgLSAxO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkb2MsIGZpeCApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgYXR0YWNoZXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH0gKTtcbn1cbnZhciBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcblxudmFyIG5vbmNlID0gRGF0ZS5ub3coKTtcblxudmFyIHJxdWVyeSA9ICggL1xcPy8gKTtcblxuXG5cbi8vIENyb3NzLWJyb3dzZXIgeG1sIHBhcnNpbmdcbmpRdWVyeS5wYXJzZVhNTCA9IGZ1bmN0aW9uKCBkYXRhICkge1xuXHR2YXIgeG1sO1xuXHRpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0Ly8gSUUgdGhyb3dzIG9uIHBhcnNlRnJvbVN0cmluZyB3aXRoIGludmFsaWQgaW5wdXQuXG5cdHRyeSB7XG5cdFx0eG1sID0gKCBuZXcgd2luZG93LkRPTVBhcnNlcigpICkucGFyc2VGcm9tU3RyaW5nKCBkYXRhLCBcInRleHQveG1sXCIgKTtcblx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0eG1sID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKCAheG1sIHx8IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSggXCJwYXJzZXJlcnJvclwiICkubGVuZ3RoICkge1xuXHRcdGpRdWVyeS5lcnJvciggXCJJbnZhbGlkIFhNTDogXCIgKyBkYXRhICk7XG5cdH1cblx0cmV0dXJuIHhtbDtcbn07XG5cblxudmFyXG5cdHJicmFja2V0ID0gL1xcW1xcXSQvLFxuXHRyQ1JMRiA9IC9cXHI/XFxuL2csXG5cdHJzdWJtaXR0ZXJUeXBlcyA9IC9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxcblx0cnN1Ym1pdHRhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO1xuXG5mdW5jdGlvbiBidWlsZFBhcmFtcyggcHJlZml4LCBvYmosIHRyYWRpdGlvbmFsLCBhZGQgKSB7XG5cdHZhciBuYW1lO1xuXG5cdGlmICggQXJyYXkuaXNBcnJheSggb2JqICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS5cblx0XHRqUXVlcnkuZWFjaCggb2JqLCBmdW5jdGlvbiggaSwgdiApIHtcblx0XHRcdGlmICggdHJhZGl0aW9uYWwgfHwgcmJyYWNrZXQudGVzdCggcHJlZml4ICkgKSB7XG5cblx0XHRcdFx0Ly8gVHJlYXQgZWFjaCBhcnJheSBpdGVtIGFzIGEgc2NhbGFyLlxuXHRcdFx0XHRhZGQoIHByZWZpeCwgdiApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEl0ZW0gaXMgbm9uLXNjYWxhciAoYXJyYXkgb3Igb2JqZWN0KSwgZW5jb2RlIGl0cyBudW1lcmljIGluZGV4LlxuXHRcdFx0XHRidWlsZFBhcmFtcyhcblx0XHRcdFx0XHRwcmVmaXggKyBcIltcIiArICggdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPSBudWxsID8gaSA6IFwiXCIgKSArIFwiXVwiLFxuXHRcdFx0XHRcdHYsXG5cdFx0XHRcdFx0dHJhZGl0aW9uYWwsXG5cdFx0XHRcdFx0YWRkXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdH0gZWxzZSBpZiAoICF0cmFkaXRpb25hbCAmJiB0b1R5cGUoIG9iaiApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIG9iamVjdCBpdGVtLlxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCArIFwiW1wiICsgbmFtZSArIFwiXVwiLCBvYmpbIG5hbWUgXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xuXHRcdH1cblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gU2VyaWFsaXplIHNjYWxhciBpdGVtLlxuXHRcdGFkZCggcHJlZml4LCBvYmogKTtcblx0fVxufVxuXG4vLyBTZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cyBvciBhIHNldCBvZlxuLy8ga2V5L3ZhbHVlcyBpbnRvIGEgcXVlcnkgc3RyaW5nXG5qUXVlcnkucGFyYW0gPSBmdW5jdGlvbiggYSwgdHJhZGl0aW9uYWwgKSB7XG5cdHZhciBwcmVmaXgsXG5cdFx0cyA9IFtdLFxuXHRcdGFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlT3JGdW5jdGlvbiApIHtcblxuXHRcdFx0Ly8gSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCB1c2UgaXRzIHJldHVybiB2YWx1ZVxuXHRcdFx0dmFyIHZhbHVlID0gaXNGdW5jdGlvbiggdmFsdWVPckZ1bmN0aW9uICkgP1xuXHRcdFx0XHR2YWx1ZU9yRnVuY3Rpb24oKSA6XG5cdFx0XHRcdHZhbHVlT3JGdW5jdGlvbjtcblxuXHRcdFx0c1sgcy5sZW5ndGggXSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyBcIj1cIiArXG5cdFx0XHRcdGVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSApO1xuXHRcdH07XG5cblx0aWYgKCBhID09IG51bGwgKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHQvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLlxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHNcblx0XHRqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRhZGQoIHRoaXMubmFtZSwgdGhpcy52YWx1ZSApO1xuXHRcdH0gKTtcblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUgXCJvbGRcIiB3YXkgKHRoZSB3YXkgMS4zLjIgb3Igb2xkZXJcblx0XHQvLyBkaWQgaXQpLCBvdGhlcndpc2UgZW5jb2RlIHBhcmFtcyByZWN1cnNpdmVseS5cblx0XHRmb3IgKCBwcmVmaXggaW4gYSApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvblxuXHRyZXR1cm4gcy5qb2luKCBcIiZcIiApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRzZXJpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApO1xuXHR9LFxuXHRzZXJpYWxpemVBcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gQ2FuIGFkZCBwcm9wSG9vayBmb3IgXCJlbGVtZW50c1wiIHRvIGZpbHRlciBvciBhZGQgZm9ybSBlbGVtZW50c1xuXHRcdFx0dmFyIGVsZW1lbnRzID0galF1ZXJ5LnByb3AoIHRoaXMsIFwiZWxlbWVudHNcIiApO1xuXHRcdFx0cmV0dXJuIGVsZW1lbnRzID8galF1ZXJ5Lm1ha2VBcnJheSggZWxlbWVudHMgKSA6IHRoaXM7XG5cdFx0fSApXG5cdFx0LmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcblxuXHRcdFx0Ly8gVXNlIC5pcyggXCI6ZGlzYWJsZWRcIiApIHNvIHRoYXQgZmllbGRzZXRbZGlzYWJsZWRdIHdvcmtzXG5cdFx0XHRyZXR1cm4gdGhpcy5uYW1lICYmICFqUXVlcnkoIHRoaXMgKS5pcyggXCI6ZGlzYWJsZWRcIiApICYmXG5cdFx0XHRcdHJzdWJtaXR0YWJsZS50ZXN0KCB0aGlzLm5vZGVOYW1lICkgJiYgIXJzdWJtaXR0ZXJUeXBlcy50ZXN0KCB0eXBlICkgJiZcblx0XHRcdFx0KCB0aGlzLmNoZWNrZWQgfHwgIXJjaGVja2FibGVUeXBlLnRlc3QoIHR5cGUgKSApO1xuXHRcdH0gKVxuXHRcdC5tYXAoIGZ1bmN0aW9uKCBpLCBlbGVtICkge1xuXHRcdFx0dmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpO1xuXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0cmV0dXJuIGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbCApIHtcblx0XHRcdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0fSApLmdldCgpO1xuXHR9XG59ICk7XG5cblxudmFyXG5cdHIyMCA9IC8lMjAvZyxcblx0cmhhc2ggPSAvIy4qJC8sXG5cdHJhbnRpQ2FjaGUgPSAvKFs/Jl0pXz1bXiZdKi8sXG5cdHJoZWFkZXJzID0gL14oLio/KTpbIFxcdF0qKFteXFxyXFxuXSopJC9tZyxcblxuXHQvLyAjNzY1MywgIzgxMjUsICM4MTUyOiBsb2NhbCBwcm90b2NvbCBkZXRlY3Rpb25cblx0cmxvY2FsUHJvdG9jb2wgPSAvXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxcblx0cm5vQ29udGVudCA9IC9eKD86R0VUfEhFQUQpJC8sXG5cdHJwcm90b2NvbCA9IC9eXFwvXFwvLyxcblxuXHQvKiBQcmVmaWx0ZXJzXG5cdCAqIDEpIFRoZXkgYXJlIHVzZWZ1bCB0byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9yIGFuIGV4YW1wbGUpXG5cdCAqIDIpIFRoZXNlIGFyZSBjYWxsZWQ6XG5cdCAqICAgIC0gQkVGT1JFIGFza2luZyBmb3IgYSB0cmFuc3BvcnRcblx0ICogICAgLSBBRlRFUiBwYXJhbSBzZXJpYWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVlKVxuXHQgKiAzKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDQpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogNSkgZXhlY3V0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gY29udGludWUgZG93biB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHByZWZpbHRlcnMgPSB7fSxcblxuXHQvKiBUcmFuc3BvcnRzIGJpbmRpbmdzXG5cdCAqIDEpIGtleSBpcyB0aGUgZGF0YVR5cGVcblx0ICogMikgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxuXHQgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHRyYW5zcG9ydHMgPSB7fSxcblxuXHQvLyBBdm9pZCBjb21tZW50LXByb2xvZyBjaGFyIHNlcXVlbmNlICgjMTAwOTgpOyBtdXN0IGFwcGVhc2UgbGludCBhbmQgZXZhZGUgY29tcHJlc3Npb25cblx0YWxsVHlwZXMgPSBcIiovXCIuY29uY2F0KCBcIipcIiApLFxuXG5cdC8vIEFuY2hvciB0YWcgZm9yIHBhcnNpbmcgdGhlIGRvY3VtZW50IG9yaWdpblxuXHRvcmlnaW5BbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImFcIiApO1xuXHRvcmlnaW5BbmNob3IuaHJlZiA9IGxvY2F0aW9uLmhyZWY7XG5cbi8vIEJhc2UgXCJjb25zdHJ1Y3RvclwiIGZvciBqUXVlcnkuYWpheFByZWZpbHRlciBhbmQgalF1ZXJ5LmFqYXhUcmFuc3BvcnRcbmZ1bmN0aW9uIGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlICkge1xuXG5cdC8vIGRhdGFUeXBlRXhwcmVzc2lvbiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gXCIqXCJcblx0cmV0dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Npb24gIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRmdW5jID0gZGF0YVR5cGVFeHByZXNzaW9uO1xuXHRcdFx0ZGF0YVR5cGVFeHByZXNzaW9uID0gXCIqXCI7XG5cdFx0fVxuXG5cdFx0dmFyIGRhdGFUeXBlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRkYXRhVHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBmdW5jICkgKSB7XG5cblx0XHRcdC8vIEZvciBlYWNoIGRhdGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4cHJlc3Npb25cblx0XHRcdHdoaWxlICggKCBkYXRhVHlwZSA9IGRhdGFUeXBlc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHQvLyBQcmVwZW5kIGlmIHJlcXVlc3RlZFxuXHRcdFx0XHRpZiAoIGRhdGFUeXBlWyAwIF0gPT09IFwiK1wiICkge1xuXHRcdFx0XHRcdGRhdGFUeXBlID0gZGF0YVR5cGUuc2xpY2UoIDEgKSB8fCBcIipcIjtcblx0XHRcdFx0XHQoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSApLnVuc2hpZnQoIGZ1bmMgKTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYXBwZW5kXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS5wdXNoKCBmdW5jICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbi8vIEJhc2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQgdHJhbnNwb3J0c1xuZnVuY3Rpb24gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApIHtcblxuXHR2YXIgaW5zcGVjdGVkID0ge30sXG5cdFx0c2Vla2luZ1RyYW5zcG9ydCA9ICggc3RydWN0dXJlID09PSB0cmFuc3BvcnRzICk7XG5cblx0ZnVuY3Rpb24gaW5zcGVjdCggZGF0YVR5cGUgKSB7XG5cdFx0dmFyIHNlbGVjdGVkO1xuXHRcdGluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7XG5cdFx0alF1ZXJ5LmVhY2goIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSwgZnVuY3Rpb24oIF8sIHByZWZpbHRlck9yRmFjdG9yeSApIHtcblx0XHRcdHZhciBkYXRhVHlwZU9yVHJhbnNwb3J0ID0gcHJlZmlsdGVyT3JGYWN0b3J5KCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICk7XG5cdFx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZU9yVHJhbnNwb3J0ID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzZWVraW5nVHJhbnNwb3J0ICYmICFpbnNwZWN0ZWRbIGRhdGFUeXBlT3JUcmFuc3BvcnQgXSApIHtcblxuXHRcdFx0XHRvcHRpb25zLmRhdGFUeXBlcy51bnNoaWZ0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdGluc3BlY3QoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmICggc2Vla2luZ1RyYW5zcG9ydCApIHtcblx0XHRcdFx0cmV0dXJuICEoIHNlbGVjdGVkID0gZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHRyZXR1cm4gc2VsZWN0ZWQ7XG5cdH1cblxuXHRyZXR1cm4gaW5zcGVjdCggb3B0aW9ucy5kYXRhVHlwZXNbIDAgXSApIHx8ICFpbnNwZWN0ZWRbIFwiKlwiIF0gJiYgaW5zcGVjdCggXCIqXCIgKTtcbn1cblxuLy8gQSBzcGVjaWFsIGV4dGVuZCBmb3IgYWpheCBvcHRpb25zXG4vLyB0aGF0IHRha2VzIFwiZmxhdFwiIG9wdGlvbnMgKG5vdCB0byBiZSBkZWVwIGV4dGVuZGVkKVxuLy8gRml4ZXMgIzk4ODdcbmZ1bmN0aW9uIGFqYXhFeHRlbmQoIHRhcmdldCwgc3JjICkge1xuXHR2YXIga2V5LCBkZWVwLFxuXHRcdGZsYXRPcHRpb25zID0galF1ZXJ5LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9ucyB8fCB7fTtcblxuXHRmb3IgKCBrZXkgaW4gc3JjICkge1xuXHRcdGlmICggc3JjWyBrZXkgXSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0KCBmbGF0T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQgOiAoIGRlZXAgfHwgKCBkZWVwID0ge30gKSApIClbIGtleSBdID0gc3JjWyBrZXkgXTtcblx0XHR9XG5cdH1cblx0aWYgKCBkZWVwICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRydWUsIHRhcmdldCwgZGVlcCApO1xuXHR9XG5cblx0cmV0dXJuIHRhcmdldDtcbn1cblxuLyogSGFuZGxlcyByZXNwb25zZXMgdG8gYW4gYWpheCByZXF1ZXN0OlxuICogLSBmaW5kcyB0aGUgcmlnaHQgZGF0YVR5cGUgKG1lZGlhdGVzIGJldHdlZW4gY29udGVudC10eXBlIGFuZCBleHBlY3RlZCBkYXRhVHlwZSlcbiAqIC0gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxuICovXG5mdW5jdGlvbiBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICkge1xuXG5cdHZhciBjdCwgdHlwZSwgZmluYWxEYXRhVHlwZSwgZmlyc3REYXRhVHlwZSxcblx0XHRjb250ZW50cyA9IHMuY29udGVudHMsXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXM7XG5cblx0Ly8gUmVtb3ZlIGF1dG8gZGF0YVR5cGUgYW5kIGdldCBjb250ZW50LXR5cGUgaW4gdGhlIHByb2Nlc3Ncblx0d2hpbGUgKCBkYXRhVHlwZXNbIDAgXSA9PT0gXCIqXCIgKSB7XG5cdFx0ZGF0YVR5cGVzLnNoaWZ0KCk7XG5cdFx0aWYgKCBjdCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0Y3QgPSBzLm1pbWVUeXBlIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEga25vd24gY29udGVudC10eXBlXG5cdGlmICggY3QgKSB7XG5cdFx0Zm9yICggdHlwZSBpbiBjb250ZW50cyApIHtcblx0XHRcdGlmICggY29udGVudHNbIHR5cGUgXSAmJiBjb250ZW50c1sgdHlwZSBdLnRlc3QoIGN0ICkgKSB7XG5cdFx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCB0eXBlICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgcmVzcG9uc2UgZm9yIHRoZSBleHBlY3RlZCBkYXRhVHlwZVxuXHRpZiAoIGRhdGFUeXBlc1sgMCBdIGluIHJlc3BvbnNlcyApIHtcblx0XHRmaW5hbERhdGFUeXBlID0gZGF0YVR5cGVzWyAwIF07XG5cdH0gZWxzZSB7XG5cblx0XHQvLyBUcnkgY29udmVydGlibGUgZGF0YVR5cGVzXG5cdFx0Zm9yICggdHlwZSBpbiByZXNwb25zZXMgKSB7XG5cdFx0XHRpZiAoICFkYXRhVHlwZXNbIDAgXSB8fCBzLmNvbnZlcnRlcnNbIHR5cGUgKyBcIiBcIiArIGRhdGFUeXBlc1sgMCBdIF0gKSB7XG5cdFx0XHRcdGZpbmFsRGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmICggIWZpcnN0RGF0YVR5cGUgKSB7XG5cdFx0XHRcdGZpcnN0RGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE9yIGp1c3QgdXNlIGZpcnN0IG9uZVxuXHRcdGZpbmFsRGF0YVR5cGUgPSBmaW5hbERhdGFUeXBlIHx8IGZpcnN0RGF0YVR5cGU7XG5cdH1cblxuXHQvLyBJZiB3ZSBmb3VuZCBhIGRhdGFUeXBlXG5cdC8vIFdlIGFkZCB0aGUgZGF0YVR5cGUgdG8gdGhlIGxpc3QgaWYgbmVlZGVkXG5cdC8vIGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2Vcblx0aWYgKCBmaW5hbERhdGFUeXBlICkge1xuXHRcdGlmICggZmluYWxEYXRhVHlwZSAhPT0gZGF0YVR5cGVzWyAwIF0gKSB7XG5cdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggZmluYWxEYXRhVHlwZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzcG9uc2VzWyBmaW5hbERhdGFUeXBlIF07XG5cdH1cbn1cblxuLyogQ2hhaW4gY29udmVyc2lvbnMgZ2l2ZW4gdGhlIHJlcXVlc3QgYW5kIHRoZSBvcmlnaW5hbCByZXNwb25zZVxuICogQWxzbyBzZXRzIHRoZSByZXNwb25zZVhYWCBmaWVsZHMgb24gdGhlIGpxWEhSIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApIHtcblx0dmFyIGNvbnYyLCBjdXJyZW50LCBjb252LCB0bXAsIHByZXYsXG5cdFx0Y29udmVydGVycyA9IHt9LFxuXG5cdFx0Ly8gV29yayB3aXRoIGEgY29weSBvZiBkYXRhVHlwZXMgaW4gY2FzZSB3ZSBuZWVkIHRvIG1vZGlmeSBpdCBmb3IgY29udmVyc2lvblxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLnNsaWNlKCk7XG5cblx0Ly8gQ3JlYXRlIGNvbnZlcnRlcnMgbWFwIHdpdGggbG93ZXJjYXNlZCBrZXlzXG5cdGlmICggZGF0YVR5cGVzWyAxIF0gKSB7XG5cdFx0Zm9yICggY29udiBpbiBzLmNvbnZlcnRlcnMgKSB7XG5cdFx0XHRjb252ZXJ0ZXJzWyBjb252LnRvTG93ZXJDYXNlKCkgXSA9IHMuY29udmVydGVyc1sgY29udiBdO1xuXHRcdH1cblx0fVxuXG5cdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHQvLyBDb252ZXJ0IHRvIGVhY2ggc2VxdWVudGlhbCBkYXRhVHlwZVxuXHR3aGlsZSAoIGN1cnJlbnQgKSB7XG5cblx0XHRpZiAoIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSApIHtcblx0XHRcdGpxWEhSWyBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gXSA9IHJlc3BvbnNlO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkXG5cdFx0aWYgKCAhcHJldiAmJiBpc1N1Y2Nlc3MgJiYgcy5kYXRhRmlsdGVyICkge1xuXHRcdFx0cmVzcG9uc2UgPSBzLmRhdGFGaWx0ZXIoIHJlc3BvbnNlLCBzLmRhdGFUeXBlICk7XG5cdFx0fVxuXG5cdFx0cHJldiA9IGN1cnJlbnQ7XG5cdFx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xuXG5cdFx0aWYgKCBjdXJyZW50ICkge1xuXG5cdFx0XHQvLyBUaGVyZSdzIG9ubHkgd29yayB0byBkbyBpZiBjdXJyZW50IGRhdGFUeXBlIGlzIG5vbi1hdXRvXG5cdFx0XHRpZiAoIGN1cnJlbnQgPT09IFwiKlwiICkge1xuXG5cdFx0XHRcdGN1cnJlbnQgPSBwcmV2O1xuXG5cdFx0XHQvLyBDb252ZXJ0IHJlc3BvbnNlIGlmIHByZXYgZGF0YVR5cGUgaXMgbm9uLWF1dG8gYW5kIGRpZmZlcnMgZnJvbSBjdXJyZW50XG5cdFx0XHR9IGVsc2UgaWYgKCBwcmV2ICE9PSBcIipcIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdC8vIFNlZWsgYSBkaXJlY3QgY29udmVydGVyXG5cdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyBjdXJyZW50IF0gfHwgY29udmVydGVyc1sgXCIqIFwiICsgY3VycmVudCBdO1xuXG5cdFx0XHRcdC8vIElmIG5vbmUgZm91bmQsIHNlZWsgYSBwYWlyXG5cdFx0XHRcdGlmICggIWNvbnYgKSB7XG5cdFx0XHRcdFx0Zm9yICggY29udjIgaW4gY29udmVydGVycyApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSWYgY29udjIgb3V0cHV0cyBjdXJyZW50XG5cdFx0XHRcdFx0XHR0bXAgPSBjb252Mi5zcGxpdCggXCIgXCIgKTtcblx0XHRcdFx0XHRcdGlmICggdG1wWyAxIF0gPT09IGN1cnJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gSWYgcHJldiBjYW4gYmUgY29udmVydGVkIHRvIGFjY2VwdGVkIGlucHV0XG5cdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyB0bXBbIDAgXSBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyc1sgXCIqIFwiICsgdG1wWyAwIF0gXTtcblx0XHRcdFx0XHRcdFx0aWYgKCBjb252ICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ29uZGVuc2UgZXF1aXZhbGVuY2UgY29udmVydGVyc1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY29udiA9PT0gdHJ1ZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBjb252MiBdO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBpbnNlcnQgdGhlIGludGVybWVkaWF0ZSBkYXRhVHlwZVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGNvbnZlcnRlcnNbIGNvbnYyIF0gIT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50ID0gdG1wWyAwIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdG1wWyAxIF0gKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBcHBseSBjb252ZXJ0ZXIgKGlmIG5vdCBhbiBlcXVpdmFsZW5jZSlcblx0XHRcdFx0aWYgKCBjb252ICE9PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0Ly8gVW5sZXNzIGVycm9ycyBhcmUgYWxsb3dlZCB0byBidWJibGUsIGNhdGNoIGFuZCByZXR1cm4gdGhlbVxuXHRcdFx0XHRcdGlmICggY29udiAmJiBzLnRocm93cyApIHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdGU6IFwicGFyc2VyZXJyb3JcIixcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjogY29udiA/IGUgOiBcIk5vIGNvbnZlcnNpb24gZnJvbSBcIiArIHByZXYgKyBcIiB0byBcIiArIGN1cnJlbnRcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyBzdGF0ZTogXCJzdWNjZXNzXCIsIGRhdGE6IHJlc3BvbnNlIH07XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBDb3VudGVyIGZvciBob2xkaW5nIHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1ZXJpZXNcblx0YWN0aXZlOiAwLFxuXG5cdC8vIExhc3QtTW9kaWZpZWQgaGVhZGVyIGNhY2hlIGZvciBuZXh0IHJlcXVlc3Rcblx0bGFzdE1vZGlmaWVkOiB7fSxcblx0ZXRhZzoge30sXG5cblx0YWpheFNldHRpbmdzOiB7XG5cdFx0dXJsOiBsb2NhdGlvbi5ocmVmLFxuXHRcdHR5cGU6IFwiR0VUXCIsXG5cdFx0aXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggbG9jYXRpb24ucHJvdG9jb2wgKSxcblx0XHRnbG9iYWw6IHRydWUsXG5cdFx0cHJvY2Vzc0RhdGE6IHRydWUsXG5cdFx0YXN5bmM6IHRydWUsXG5cdFx0Y29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsXG5cblx0XHQvKlxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0ZGF0YTogbnVsbCxcblx0XHRkYXRhVHlwZTogbnVsbCxcblx0XHR1c2VybmFtZTogbnVsbCxcblx0XHRwYXNzd29yZDogbnVsbCxcblx0XHRjYWNoZTogbnVsbCxcblx0XHR0aHJvd3M6IGZhbHNlLFxuXHRcdHRyYWRpdGlvbmFsOiBmYWxzZSxcblx0XHRoZWFkZXJzOiB7fSxcblx0XHQqL1xuXG5cdFx0YWNjZXB0czoge1xuXHRcdFx0XCIqXCI6IGFsbFR5cGVzLFxuXHRcdFx0dGV4dDogXCJ0ZXh0L3BsYWluXCIsXG5cdFx0XHRodG1sOiBcInRleHQvaHRtbFwiLFxuXHRcdFx0eG1sOiBcImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWxcIixcblx0XHRcdGpzb246IFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0XCJcblx0XHR9LFxuXG5cdFx0Y29udGVudHM6IHtcblx0XHRcdHhtbDogL1xcYnhtbFxcYi8sXG5cdFx0XHRodG1sOiAvXFxiaHRtbC8sXG5cdFx0XHRqc29uOiAvXFxianNvblxcYi9cblx0XHR9LFxuXG5cdFx0cmVzcG9uc2VGaWVsZHM6IHtcblx0XHRcdHhtbDogXCJyZXNwb25zZVhNTFwiLFxuXHRcdFx0dGV4dDogXCJyZXNwb25zZVRleHRcIixcblx0XHRcdGpzb246IFwicmVzcG9uc2VKU09OXCJcblx0XHR9LFxuXG5cdFx0Ly8gRGF0YSBjb252ZXJ0ZXJzXG5cdFx0Ly8gS2V5cyBzZXBhcmF0ZSBzb3VyY2UgKG9yIGNhdGNoYWxsIFwiKlwiKSBhbmQgZGVzdGluYXRpb24gdHlwZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuXHRcdGNvbnZlcnRlcnM6IHtcblxuXHRcdFx0Ly8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0XG5cdFx0XHRcIiogdGV4dFwiOiBTdHJpbmcsXG5cblx0XHRcdC8vIFRleHQgdG8gaHRtbCAodHJ1ZSA9IG5vIHRyYW5zZm9ybWF0aW9uKVxuXHRcdFx0XCJ0ZXh0IGh0bWxcIjogdHJ1ZSxcblxuXHRcdFx0Ly8gRXZhbHVhdGUgdGV4dCBhcyBhIGpzb24gZXhwcmVzc2lvblxuXHRcdFx0XCJ0ZXh0IGpzb25cIjogSlNPTi5wYXJzZSxcblxuXHRcdFx0Ly8gUGFyc2UgdGV4dCBhcyB4bWxcblx0XHRcdFwidGV4dCB4bWxcIjogalF1ZXJ5LnBhcnNlWE1MXG5cdFx0fSxcblxuXHRcdC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6XG5cdFx0Ly8geW91IGNhbiBhZGQgeW91ciBvd24gY3VzdG9tIG9wdGlvbnMgaGVyZSBpZlxuXHRcdC8vIGFuZCB3aGVuIHlvdSBjcmVhdGUgb25lIHRoYXQgc2hvdWxkbid0IGJlXG5cdFx0Ly8gZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQpXG5cdFx0ZmxhdE9wdGlvbnM6IHtcblx0XHRcdHVybDogdHJ1ZSxcblx0XHRcdGNvbnRleHQ6IHRydWVcblx0XHR9XG5cdH0sXG5cblx0Ly8gQ3JlYXRlcyBhIGZ1bGwgZmxlZGdlZCBzZXR0aW5ncyBvYmplY3QgaW50byB0YXJnZXRcblx0Ly8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRzLlxuXHQvLyBJZiB0YXJnZXQgaXMgb21pdHRlZCwgd3JpdGVzIGludG8gYWpheFNldHRpbmdzLlxuXHRhamF4U2V0dXA6IGZ1bmN0aW9uKCB0YXJnZXQsIHNldHRpbmdzICkge1xuXHRcdHJldHVybiBzZXR0aW5ncyA/XG5cblx0XHRcdC8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2JqZWN0XG5cdFx0XHRhamF4RXh0ZW5kKCBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGluZ3MgKSwgc2V0dGluZ3MgKSA6XG5cblx0XHRcdC8vIEV4dGVuZGluZyBhamF4U2V0dGluZ3Ncblx0XHRcdGFqYXhFeHRlbmQoIGpRdWVyeS5hamF4U2V0dGluZ3MsIHRhcmdldCApO1xuXHR9LFxuXG5cdGFqYXhQcmVmaWx0ZXI6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycyApLFxuXHRhamF4VHJhbnNwb3J0OiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMgKSxcblxuXHQvLyBNYWluIG1ldGhvZFxuXHRhamF4OiBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkge1xuXG5cdFx0Ly8gSWYgdXJsIGlzIGFuIG9iamVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmVcblx0XHRpZiAoIHR5cGVvZiB1cmwgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRvcHRpb25zID0gdXJsO1xuXHRcdFx0dXJsID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0XG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0XHR2YXIgdHJhbnNwb3J0LFxuXG5cdFx0XHQvLyBVUkwgd2l0aG91dCBhbnRpLWNhY2hlIHBhcmFtXG5cdFx0XHRjYWNoZVVSTCxcblxuXHRcdFx0Ly8gUmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nLFxuXHRcdFx0cmVzcG9uc2VIZWFkZXJzLFxuXG5cdFx0XHQvLyB0aW1lb3V0IGhhbmRsZVxuXHRcdFx0dGltZW91dFRpbWVyLFxuXG5cdFx0XHQvLyBVcmwgY2xlYW51cCB2YXJcblx0XHRcdHVybEFuY2hvcixcblxuXHRcdFx0Ly8gUmVxdWVzdCBzdGF0ZSAoYmVjb21lcyBmYWxzZSB1cG9uIHNlbmQgYW5kIHRydWUgdXBvbiBjb21wbGV0aW9uKVxuXHRcdFx0Y29tcGxldGVkLFxuXG5cdFx0XHQvLyBUbyBrbm93IGlmIGdsb2JhbCBldmVudHMgYXJlIHRvIGJlIGRpc3BhdGNoZWRcblx0XHRcdGZpcmVHbG9iYWxzLFxuXG5cdFx0XHQvLyBMb29wIHZhcmlhYmxlXG5cdFx0XHRpLFxuXG5cdFx0XHQvLyB1bmNhY2hlZCBwYXJ0IG9mIHRoZSB1cmxcblx0XHRcdHVuY2FjaGVkLFxuXG5cdFx0XHQvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0XG5cdFx0XHRzID0galF1ZXJ5LmFqYXhTZXR1cCgge30sIG9wdGlvbnMgKSxcblxuXHRcdFx0Ly8gQ2FsbGJhY2tzIGNvbnRleHRcblx0XHRcdGNhbGxiYWNrQ29udGV4dCA9IHMuY29udGV4dCB8fCBzLFxuXG5cdFx0XHQvLyBDb250ZXh0IGZvciBnbG9iYWwgZXZlbnRzIGlzIGNhbGxiYWNrQ29udGV4dCBpZiBpdCBpcyBhIERPTSBub2RlIG9yIGpRdWVyeSBjb2xsZWN0aW9uXG5cdFx0XHRnbG9iYWxFdmVudENvbnRleHQgPSBzLmNvbnRleHQgJiZcblx0XHRcdFx0KCBjYWxsYmFja0NvbnRleHQubm9kZVR5cGUgfHwgY2FsbGJhY2tDb250ZXh0LmpxdWVyeSApID9cblx0XHRcdFx0XHRqUXVlcnkoIGNhbGxiYWNrQ29udGV4dCApIDpcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQsXG5cblx0XHRcdC8vIERlZmVycmVkc1xuXHRcdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQgPSBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdHN0YXR1c0NvZGUgPSBzLnN0YXR1c0NvZGUgfHwge30sXG5cblx0XHRcdC8vIEhlYWRlcnMgKHRoZXkgYXJlIHNlbnQgYWxsIGF0IG9uY2UpXG5cdFx0XHRyZXF1ZXN0SGVhZGVycyA9IHt9LFxuXHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lcyA9IHt9LFxuXG5cdFx0XHQvLyBEZWZhdWx0IGFib3J0IG1lc3NhZ2Vcblx0XHRcdHN0ckFib3J0ID0gXCJjYW5jZWxlZFwiLFxuXG5cdFx0XHQvLyBGYWtlIHhoclxuXHRcdFx0anFYSFIgPSB7XG5cdFx0XHRcdHJlYWR5U3RhdGU6IDAsXG5cblx0XHRcdFx0Ly8gQnVpbGRzIGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRlZFxuXHRcdFx0XHRnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24oIGtleSApIHtcblx0XHRcdFx0XHR2YXIgbWF0Y2g7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICFyZXNwb25zZUhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVycyA9IHt9O1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbWF0Y2ggPSByaGVhZGVycy5leGVjKCByZXNwb25zZUhlYWRlcnNTdHJpbmcgKSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXSA9XG5cdFx0XHRcdFx0XHRcdFx0XHQoIHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXSB8fCBbXSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5jb25jYXQoIG1hdGNoWyAyIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bWF0Y2ggPSByZXNwb25zZUhlYWRlcnNbIGtleS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoID09IG51bGwgPyBudWxsIDogbWF0Y2guam9pbiggXCIsIFwiICk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gUmF3IHN0cmluZ1xuXHRcdFx0XHRnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBjb21wbGV0ZWQgPyByZXNwb25zZUhlYWRlcnNTdHJpbmcgOiBudWxsO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhY2hlcyB0aGUgaGVhZGVyXG5cdFx0XHRcdHNldFJlcXVlc3RIZWFkZXI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0bmFtZSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdID1cblx0XHRcdFx0XHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHwgbmFtZTtcblx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGVzIHJlc3BvbnNlIGNvbnRlbnQtdHlwZSBoZWFkZXJcblx0XHRcdFx0b3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdHMubWltZVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0XHRzdGF0dXNDb2RlOiBmdW5jdGlvbiggbWFwICkge1xuXHRcdFx0XHRcdHZhciBjb2RlO1xuXHRcdFx0XHRcdGlmICggbWFwICkge1xuXHRcdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gRXhlY3V0ZSB0aGUgYXBwcm9wcmlhdGUgY2FsbGJhY2tzXG5cdFx0XHRcdFx0XHRcdGpxWEhSLmFsd2F5cyggbWFwWyBqcVhIUi5zdGF0dXMgXSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBMYXp5LWFkZCB0aGUgbmV3IGNhbGxiYWNrcyBpbiBhIHdheSB0aGF0IHByZXNlcnZlcyBvbGQgb25lc1xuXHRcdFx0XHRcdFx0XHRmb3IgKCBjb2RlIGluIG1hcCApIHtcblx0XHRcdFx0XHRcdFx0XHRzdGF0dXNDb2RlWyBjb2RlIF0gPSBbIHN0YXR1c0NvZGVbIGNvZGUgXSwgbWFwWyBjb2RlIF0gXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYW5jZWwgdGhlIHJlcXVlc3Rcblx0XHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCBzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHZhciBmaW5hbFRleHQgPSBzdGF0dXNUZXh0IHx8IHN0ckFib3J0O1xuXHRcdFx0XHRcdGlmICggdHJhbnNwb3J0ICkge1xuXHRcdFx0XHRcdFx0dHJhbnNwb3J0LmFib3J0KCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZG9uZSggMCwgZmluYWxUZXh0ICk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHQvLyBBdHRhY2ggZGVmZXJyZWRzXG5cdFx0ZGVmZXJyZWQucHJvbWlzZSgganFYSFIgKTtcblxuXHRcdC8vIEFkZCBwcm90b2NvbCBpZiBub3QgcHJvdmlkZWQgKHByZWZpbHRlcnMgbWlnaHQgZXhwZWN0IGl0KVxuXHRcdC8vIEhhbmRsZSBmYWxzeSB1cmwgaW4gdGhlIHNldHRpbmdzIG9iamVjdCAoIzEwMDkzOiBjb25zaXN0ZW5jeSB3aXRoIG9sZCBzaWduYXR1cmUpXG5cdFx0Ly8gV2UgYWxzbyB1c2UgdGhlIHVybCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlXG5cdFx0cy51cmwgPSAoICggdXJsIHx8IHMudXJsIHx8IGxvY2F0aW9uLmhyZWYgKSArIFwiXCIgKVxuXHRcdFx0LnJlcGxhY2UoIHJwcm90b2NvbCwgbG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKTtcblxuXHRcdC8vIEFsaWFzIG1ldGhvZCBvcHRpb24gdG8gdHlwZSBhcyBwZXIgdGlja2V0ICMxMjAwNFxuXHRcdHMudHlwZSA9IG9wdGlvbnMubWV0aG9kIHx8IG9wdGlvbnMudHlwZSB8fCBzLm1ldGhvZCB8fCBzLnR5cGU7XG5cblx0XHQvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0XG5cdFx0cy5kYXRhVHlwZXMgPSAoIHMuZGF0YVR5cGUgfHwgXCIqXCIgKS50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cblx0XHQvLyBBIGNyb3NzLWRvbWFpbiByZXF1ZXN0IGlzIGluIG9yZGVyIHdoZW4gdGhlIG9yaWdpbiBkb2Vzbid0IG1hdGNoIHRoZSBjdXJyZW50IG9yaWdpbi5cblx0XHRpZiAoIHMuY3Jvc3NEb21haW4gPT0gbnVsbCApIHtcblx0XHRcdHVybEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiYVwiICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExLCBFZGdlIDEyIC0gMTVcblx0XHRcdC8vIElFIHRocm93cyBleGNlcHRpb24gb24gYWNjZXNzaW5nIHRoZSBocmVmIHByb3BlcnR5IGlmIHVybCBpcyBtYWxmb3JtZWQsXG5cdFx0XHQvLyBlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbTo4MHgvXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHMudXJsO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExIG9ubHlcblx0XHRcdFx0Ly8gQW5jaG9yJ3MgaG9zdCBwcm9wZXJ0eSBpc24ndCBjb3JyZWN0bHkgc2V0IHdoZW4gcy51cmwgaXMgcmVsYXRpdmVcblx0XHRcdFx0dXJsQW5jaG9yLmhyZWYgPSB1cmxBbmNob3IuaHJlZjtcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IG9yaWdpbkFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIG9yaWdpbkFuY2hvci5ob3N0ICE9PVxuXHRcdFx0XHRcdHVybEFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIHVybEFuY2hvci5ob3N0O1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYW4gZXJyb3IgcGFyc2luZyB0aGUgVVJMLCBhc3N1bWUgaXQgaXMgY3Jvc3NEb21haW4sXG5cdFx0XHRcdC8vIGl0IGNhbiBiZSByZWplY3RlZCBieSB0aGUgdHJhbnNwb3J0IGlmIGl0IGlzIGludmFsaWRcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29udmVydCBkYXRhIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nXG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJiB0eXBlb2Ygcy5kYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cy5kYXRhID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9uYWwgKTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBwcmVmaWx0ZXJzXG5cdFx0aW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XG5cblx0XHQvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhIHByZWZpbHRlciwgc3RvcCB0aGVyZVxuXHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdH1cblxuXHRcdC8vIFdlIGNhbiBmaXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvXG5cdFx0Ly8gRG9uJ3QgZmlyZSBldmVudHMgaWYgalF1ZXJ5LmV2ZW50IGlzIHVuZGVmaW5lZCBpbiBhbiBBTUQtdXNhZ2Ugc2NlbmFyaW8gKCMxNTExOClcblx0XHRmaXJlR2xvYmFscyA9IGpRdWVyeS5ldmVudCAmJiBzLmdsb2JhbDtcblxuXHRcdC8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHNcblx0XHRpZiAoIGZpcmVHbG9iYWxzICYmIGpRdWVyeS5hY3RpdmUrKyA9PT0gMCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdGFydFwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gVXBwZXJjYXNlIHRoZSB0eXBlXG5cdFx0cy50eXBlID0gcy50eXBlLnRvVXBwZXJDYXNlKCk7XG5cblx0XHQvLyBEZXRlcm1pbmUgaWYgcmVxdWVzdCBoYXMgY29udGVudFxuXHRcdHMuaGFzQ29udGVudCA9ICFybm9Db250ZW50LnRlc3QoIHMudHlwZSApO1xuXG5cdFx0Ly8gU2F2ZSB0aGUgVVJMIGluIGNhc2Ugd2UncmUgdG95aW5nIHdpdGggdGhlIElmLU1vZGlmaWVkLVNpbmNlXG5cdFx0Ly8gYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyIGxhdGVyIG9uXG5cdFx0Ly8gUmVtb3ZlIGhhc2ggdG8gc2ltcGxpZnkgdXJsIG1hbmlwdWxhdGlvblxuXHRcdGNhY2hlVVJMID0gcy51cmwucmVwbGFjZSggcmhhc2gsIFwiXCIgKTtcblxuXHRcdC8vIE1vcmUgb3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBubyBjb250ZW50XG5cdFx0aWYgKCAhcy5oYXNDb250ZW50ICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgaGFzaCBzbyB3ZSBjYW4gcHV0IGl0IGJhY2tcblx0XHRcdHVuY2FjaGVkID0gcy51cmwuc2xpY2UoIGNhY2hlVVJMLmxlbmd0aCApO1xuXG5cdFx0XHQvLyBJZiBkYXRhIGlzIGF2YWlsYWJsZSBhbmQgc2hvdWxkIGJlIHByb2Nlc3NlZCwgYXBwZW5kIGRhdGEgdG8gdXJsXG5cdFx0XHRpZiAoIHMuZGF0YSAmJiAoIHMucHJvY2Vzc0RhdGEgfHwgdHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiApICkge1xuXHRcdFx0XHRjYWNoZVVSTCArPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gXCImXCIgOiBcIj9cIiApICsgcy5kYXRhO1xuXG5cdFx0XHRcdC8vICM5NjgyOiByZW1vdmUgZGF0YSBzbyB0aGF0IGl0J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1YWwgcmV0cnlcblx0XHRcdFx0ZGVsZXRlIHMuZGF0YTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIG9yIHVwZGF0ZSBhbnRpLWNhY2hlIHBhcmFtIGlmIG5lZWRlZFxuXHRcdFx0aWYgKCBzLmNhY2hlID09PSBmYWxzZSApIHtcblx0XHRcdFx0Y2FjaGVVUkwgPSBjYWNoZVVSTC5yZXBsYWNlKCByYW50aUNhY2hlLCBcIiQxXCIgKTtcblx0XHRcdFx0dW5jYWNoZWQgPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gXCImXCIgOiBcIj9cIiApICsgXCJfPVwiICsgKCBub25jZSsrICkgKyB1bmNhY2hlZDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUHV0IGhhc2ggYW5kIGFudGktY2FjaGUgb24gdGhlIFVSTCB0aGF0IHdpbGwgYmUgcmVxdWVzdGVkIChnaC0xNzMyKVxuXHRcdFx0cy51cmwgPSBjYWNoZVVSTCArIHVuY2FjaGVkO1xuXG5cdFx0Ly8gQ2hhbmdlICclMjAnIHRvICcrJyBpZiB0aGlzIGlzIGVuY29kZWQgZm9ybSBib2R5IGNvbnRlbnQgKGdoLTI2NTgpXG5cdFx0fSBlbHNlIGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiZcblx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiICkuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICkge1xuXHRcdFx0cy5kYXRhID0gcy5kYXRhLnJlcGxhY2UoIHIyMCwgXCIrXCIgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0aWYgKCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICkge1xuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU1vZGlmaWVkLVNpbmNlXCIsIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKTtcblx0XHRcdH1cblx0XHRcdGlmICggalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTm9uZS1NYXRjaFwiLCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVpbmcgc2VudFxuXHRcdGlmICggcy5kYXRhICYmIHMuaGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8fCBvcHRpb25zLmNvbnRlbnRUeXBlICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJDb250ZW50LVR5cGVcIiwgcy5jb250ZW50VHlwZSApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRoZSBzZXJ2ZXIsIGRlcGVuZGluZyBvbiB0aGUgZGF0YVR5cGVcblx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKFxuXHRcdFx0XCJBY2NlcHRcIixcblx0XHRcdHMuZGF0YVR5cGVzWyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gP1xuXHRcdFx0XHRzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSArXG5cdFx0XHRcdFx0KCBzLmRhdGFUeXBlc1sgMCBdICE9PSBcIipcIiA/IFwiLCBcIiArIGFsbFR5cGVzICsgXCI7IHE9MC4wMVwiIDogXCJcIiApIDpcblx0XHRcdFx0cy5hY2NlcHRzWyBcIipcIiBdXG5cdFx0KTtcblxuXHRcdC8vIENoZWNrIGZvciBoZWFkZXJzIG9wdGlvblxuXHRcdGZvciAoIGkgaW4gcy5oZWFkZXJzICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggaSwgcy5oZWFkZXJzWyBpIF0gKTtcblx0XHR9XG5cblx0XHQvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlwZXMgYW5kIGVhcmx5IGFib3J0XG5cdFx0aWYgKCBzLmJlZm9yZVNlbmQgJiZcblx0XHRcdCggcy5iZWZvcmVTZW5kLmNhbGwoIGNhbGxiYWNrQ29udGV4dCwganFYSFIsIHMgKSA9PT0gZmFsc2UgfHwgY29tcGxldGVkICkgKSB7XG5cblx0XHRcdC8vIEFib3J0IGlmIG5vdCBkb25lIGFscmVhZHkgYW5kIHJldHVyblxuXHRcdFx0cmV0dXJuIGpxWEhSLmFib3J0KCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWJvcnRpbmcgaXMgbm8gbG9uZ2VyIGEgY2FuY2VsbGF0aW9uXG5cdFx0c3RyQWJvcnQgPSBcImFib3J0XCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrcyBvbiBkZWZlcnJlZHNcblx0XHRjb21wbGV0ZURlZmVycmVkLmFkZCggcy5jb21wbGV0ZSApO1xuXHRcdGpxWEhSLmRvbmUoIHMuc3VjY2VzcyApO1xuXHRcdGpxWEhSLmZhaWwoIHMuZXJyb3IgKTtcblxuXHRcdC8vIEdldCB0cmFuc3BvcnRcblx0XHR0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9ydFxuXHRcdGlmICggIXRyYW5zcG9ydCApIHtcblx0XHRcdGRvbmUoIC0xLCBcIk5vIFRyYW5zcG9ydFwiICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSAxO1xuXG5cdFx0XHQvLyBTZW5kIGdsb2JhbCBldmVudFxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheFNlbmRcIiwgWyBqcVhIUiwgcyBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGFqYXhTZW5kLCBzdG9wIHRoZXJlXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaW1lb3V0XG5cdFx0XHRpZiAoIHMuYXN5bmMgJiYgcy50aW1lb3V0ID4gMCApIHtcblx0XHRcdFx0dGltZW91dFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGpxWEhSLmFib3J0KCBcInRpbWVvdXRcIiApO1xuXHRcdFx0XHR9LCBzLnRpbWVvdXQgKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29tcGxldGVkID0gZmFsc2U7XG5cdFx0XHRcdHRyYW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gUmV0aHJvdyBwb3N0LWNvbXBsZXRpb24gZXhjZXB0aW9uc1xuXHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUHJvcGFnYXRlIG90aGVycyBhcyByZXN1bHRzXG5cdFx0XHRcdGRvbmUoIC0xLCBlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBkb25lXG5cdFx0ZnVuY3Rpb24gZG9uZSggc3RhdHVzLCBuYXRpdmVTdGF0dXNUZXh0LCByZXNwb25zZXMsIGhlYWRlcnMgKSB7XG5cdFx0XHR2YXIgaXNTdWNjZXNzLCBzdWNjZXNzLCBlcnJvciwgcmVzcG9uc2UsIG1vZGlmaWVkLFxuXHRcdFx0XHRzdGF0dXNUZXh0ID0gbmF0aXZlU3RhdHVzVGV4dDtcblxuXHRcdFx0Ly8gSWdub3JlIHJlcGVhdCBpbnZvY2F0aW9uc1xuXHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29tcGxldGVkID0gdHJ1ZTtcblxuXHRcdFx0Ly8gQ2xlYXIgdGltZW91dCBpZiBpdCBleGlzdHNcblx0XHRcdGlmICggdGltZW91dFRpbWVyICkge1xuXHRcdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0VGltZXIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRGVyZWZlcmVuY2UgdHJhbnNwb3J0IGZvciBlYXJseSBnYXJiYWdlIGNvbGxlY3Rpb25cblx0XHRcdC8vIChubyBtYXR0ZXIgaG93IGxvbmcgdGhlIGpxWEhSIG9iamVjdCB3aWxsIGJlIHVzZWQpXG5cdFx0XHR0cmFuc3BvcnQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdC8vIENhY2hlIHJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyA9IGhlYWRlcnMgfHwgXCJcIjtcblxuXHRcdFx0Ly8gU2V0IHJlYWR5U3RhdGVcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSBzdGF0dXMgPiAwID8gNCA6IDA7XG5cblx0XHRcdC8vIERldGVybWluZSBpZiBzdWNjZXNzZnVsXG5cdFx0XHRpc1N1Y2Nlc3MgPSBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMgPT09IDMwNDtcblxuXHRcdFx0Ly8gR2V0IHJlc3BvbnNlIGRhdGFcblx0XHRcdGlmICggcmVzcG9uc2VzICkge1xuXHRcdFx0XHRyZXNwb25zZSA9IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCBubyBtYXR0ZXIgd2hhdCAodGhhdCB3YXkgcmVzcG9uc2VYWFggZmllbGRzIGFyZSBhbHdheXMgc2V0KVxuXHRcdFx0cmVzcG9uc2UgPSBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKTtcblxuXHRcdFx0Ly8gSWYgc3VjY2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmdcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXG5cdFx0XHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0XHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiTGFzdC1Nb2RpZmllZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJldGFnXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBpZiBubyBjb250ZW50XG5cdFx0XHRcdGlmICggc3RhdHVzID09PSAyMDQgfHwgcy50eXBlID09PSBcIkhFQURcIiApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub2NvbnRlbnRcIjtcblxuXHRcdFx0XHQvLyBpZiBub3QgbW9kaWZpZWRcblx0XHRcdFx0fSBlbHNlIGlmICggc3RhdHVzID09PSAzMDQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm90bW9kaWZpZWRcIjtcblxuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGRhdGEsIGxldCdzIGNvbnZlcnQgaXRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gcmVzcG9uc2Uuc3RhdGU7XG5cdFx0XHRcdFx0c3VjY2VzcyA9IHJlc3BvbnNlLmRhdGE7XG5cdFx0XHRcdFx0ZXJyb3IgPSByZXNwb25zZS5lcnJvcjtcblx0XHRcdFx0XHRpc1N1Y2Nlc3MgPSAhZXJyb3I7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gRXh0cmFjdCBlcnJvciBmcm9tIHN0YXR1c1RleHQgYW5kIG5vcm1hbGl6ZSBmb3Igbm9uLWFib3J0c1xuXHRcdFx0XHRlcnJvciA9IHN0YXR1c1RleHQ7XG5cdFx0XHRcdGlmICggc3RhdHVzIHx8ICFzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcImVycm9yXCI7XG5cdFx0XHRcdFx0aWYgKCBzdGF0dXMgPCAwICkge1xuXHRcdFx0XHRcdFx0c3RhdHVzID0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IGRhdGEgZm9yIHRoZSBmYWtlIHhociBvYmplY3Rcblx0XHRcdGpxWEhSLnN0YXR1cyA9IHN0YXR1cztcblx0XHRcdGpxWEhSLnN0YXR1c1RleHQgPSAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCApICsgXCJcIjtcblxuXHRcdFx0Ly8gU3VjY2Vzcy9FcnJvclxuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsgc3VjY2Vzcywgc3RhdHVzVGV4dCwganFYSFIgXSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7XG5cdFx0XHRzdGF0dXNDb2RlID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggaXNTdWNjZXNzID8gXCJhamF4U3VjY2Vzc1wiIDogXCJhamF4RXJyb3JcIixcblx0XHRcdFx0XHRbIGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBzdWNjZXNzIDogZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb21wbGV0ZVxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZC5maXJlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0IF0gKTtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheENvbXBsZXRlXCIsIFsganFYSFIsIHMgXSApO1xuXG5cdFx0XHRcdC8vIEhhbmRsZSB0aGUgZ2xvYmFsIEFKQVggY291bnRlclxuXHRcdFx0XHRpZiAoICEoIC0talF1ZXJ5LmFjdGl2ZSApICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdG9wXCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBqcVhIUjtcblx0fSxcblxuXHRnZXRKU09OOiBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgXCJqc29uXCIgKTtcblx0fSxcblxuXHRnZXRTY3JpcHQ6IGZ1bmN0aW9uKCB1cmwsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssIFwic2NyaXB0XCIgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcImdldFwiLCBcInBvc3RcIiBdLCBmdW5jdGlvbiggaSwgbWV0aG9kICkge1xuXHRqUXVlcnlbIG1ldGhvZCBdID0gZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2ssIHR5cGUgKSB7XG5cblx0XHQvLyBTaGlmdCBhcmd1bWVudHMgaWYgZGF0YSBhcmd1bWVudCB3YXMgb21pdHRlZFxuXHRcdGlmICggaXNGdW5jdGlvbiggZGF0YSApICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7XG5cdFx0XHRjYWxsYmFjayA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIFRoZSB1cmwgY2FuIGJlIGFuIG9wdGlvbnMgb2JqZWN0ICh3aGljaCB0aGVuIG11c3QgaGF2ZSAudXJsKVxuXHRcdHJldHVybiBqUXVlcnkuYWpheCggalF1ZXJ5LmV4dGVuZCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cdFx0XHR0eXBlOiBtZXRob2QsXG5cdFx0XHRkYXRhVHlwZTogdHlwZSxcblx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRzdWNjZXNzOiBjYWxsYmFja1xuXHRcdH0sIGpRdWVyeS5pc1BsYWluT2JqZWN0KCB1cmwgKSAmJiB1cmwgKSApO1xuXHR9O1xufSApO1xuXG5cbmpRdWVyeS5fZXZhbFVybCA9IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMgKSB7XG5cdHJldHVybiBqUXVlcnkuYWpheCgge1xuXHRcdHVybDogdXJsLFxuXG5cdFx0Ly8gTWFrZSB0aGlzIGV4cGxpY2l0LCBzaW5jZSB1c2VyIGNhbiBvdmVycmlkZSB0aGlzIHRocm91Z2ggYWpheFNldHVwICgjMTEyNjQpXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRkYXRhVHlwZTogXCJzY3JpcHRcIixcblx0XHRjYWNoZTogdHJ1ZSxcblx0XHRhc3luYzogZmFsc2UsXG5cdFx0Z2xvYmFsOiBmYWxzZSxcblxuXHRcdC8vIE9ubHkgZXZhbHVhdGUgdGhlIHJlc3BvbnNlIGlmIGl0IGlzIHN1Y2Nlc3NmdWwgKGdoLTQxMjYpXG5cdFx0Ly8gZGF0YUZpbHRlciBpcyBub3QgaW52b2tlZCBmb3IgZmFpbHVyZSByZXNwb25zZXMsIHNvIHVzaW5nIGl0IGluc3RlYWRcblx0XHQvLyBvZiB0aGUgZGVmYXVsdCBjb252ZXJ0ZXIgaXMga2x1ZGd5IGJ1dCBpdCB3b3Jrcy5cblx0XHRjb252ZXJ0ZXJzOiB7XG5cdFx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCkge31cblx0XHR9LFxuXHRcdGRhdGFGaWx0ZXI6IGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCByZXNwb25zZSwgb3B0aW9ucyApO1xuXHRcdH1cblx0fSApO1xufTtcblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHdyYXBBbGw6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciB3cmFwO1xuXG5cdFx0aWYgKCB0aGlzWyAwIF0gKSB7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIGh0bWwgKSApIHtcblx0XHRcdFx0aHRtbCA9IGh0bWwuY2FsbCggdGhpc1sgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRoZSBlbGVtZW50cyB0byB3cmFwIHRoZSB0YXJnZXQgYXJvdW5kXG5cdFx0XHR3cmFwID0galF1ZXJ5KCBodG1sLCB0aGlzWyAwIF0ub3duZXJEb2N1bWVudCApLmVxKCAwICkuY2xvbmUoIHRydWUgKTtcblxuXHRcdFx0aWYgKCB0aGlzWyAwIF0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0d3JhcC5pbnNlcnRCZWZvcmUoIHRoaXNbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHR3cmFwLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBlbGVtID0gdGhpcztcblxuXHRcdFx0XHR3aGlsZSAoIGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQgKSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZWxlbTtcblx0XHRcdH0gKS5hcHBlbmQoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR3cmFwSW5uZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBJbm5lciggaHRtbC5jYWxsKCB0aGlzLCBpICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0galF1ZXJ5KCB0aGlzICksXG5cdFx0XHRcdGNvbnRlbnRzID0gc2VsZi5jb250ZW50cygpO1xuXG5cdFx0XHRpZiAoIGNvbnRlbnRzLmxlbmd0aCApIHtcblx0XHRcdFx0Y29udGVudHMud3JhcEFsbCggaHRtbCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWxmLmFwcGVuZCggaHRtbCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHR3cmFwOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHR2YXIgaHRtbElzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCBodG1sICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGh0bWxJc0Z1bmN0aW9uID8gaHRtbC5jYWxsKCB0aGlzLCBpICkgOiBodG1sICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdHVud3JhcDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHRoaXMucGFyZW50KCBzZWxlY3RvciApLm5vdCggXCJib2R5XCIgKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLnJlcGxhY2VXaXRoKCB0aGlzLmNoaWxkTm9kZXMgKTtcblx0XHR9ICk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmhpZGRlbiA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gIWpRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSggZWxlbSApO1xufTtcbmpRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gISEoIGVsZW0ub2Zmc2V0V2lkdGggfHwgZWxlbS5vZmZzZXRIZWlnaHQgfHwgZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApO1xufTtcblxuXG5cblxualF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIgPSBmdW5jdGlvbigpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpO1xuXHR9IGNhdGNoICggZSApIHt9XG59O1xuXG52YXIgeGhyU3VjY2Vzc1N0YXR1cyA9IHtcblxuXHRcdC8vIEZpbGUgcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgY29kZSAwLCBhc3N1bWUgMjAwXG5cdFx0MDogMjAwLFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHQvLyAjMTQ1MDogc29tZXRpbWVzIElFIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDRcblx0XHQxMjIzOiAyMDRcblx0fSxcblx0eGhyU3VwcG9ydGVkID0galF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIoKTtcblxuc3VwcG9ydC5jb3JzID0gISF4aHJTdXBwb3J0ZWQgJiYgKCBcIndpdGhDcmVkZW50aWFsc1wiIGluIHhoclN1cHBvcnRlZCApO1xuc3VwcG9ydC5hamF4ID0geGhyU3VwcG9ydGVkID0gISF4aHJTdXBwb3J0ZWQ7XG5cbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0dmFyIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrO1xuXG5cdC8vIENyb3NzIGRvbWFpbiBvbmx5IGFsbG93ZWQgaWYgc3VwcG9ydGVkIHRocm91Z2ggWE1MSHR0cFJlcXVlc3Rcblx0aWYgKCBzdXBwb3J0LmNvcnMgfHwgeGhyU3VwcG9ydGVkICYmICFvcHRpb25zLmNyb3NzRG9tYWluICkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggaGVhZGVycywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHZhciBpLFxuXHRcdFx0XHRcdHhociA9IG9wdGlvbnMueGhyKCk7XG5cblx0XHRcdFx0eGhyLm9wZW4oXG5cdFx0XHRcdFx0b3B0aW9ucy50eXBlLFxuXHRcdFx0XHRcdG9wdGlvbnMudXJsLFxuXHRcdFx0XHRcdG9wdGlvbnMuYXN5bmMsXG5cdFx0XHRcdFx0b3B0aW9ucy51c2VybmFtZSxcblx0XHRcdFx0XHRvcHRpb25zLnBhc3N3b3JkXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Ly8gQXBwbHkgY3VzdG9tIGZpZWxkcyBpZiBwcm92aWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMueGhyRmllbGRzICkge1xuXHRcdFx0XHRcdGZvciAoIGkgaW4gb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0XHR4aHJbIGkgXSA9IG9wdGlvbnMueGhyRmllbGRzWyBpIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGUgbWltZSB0eXBlIGlmIG5lZWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMubWltZVR5cGUgJiYgeGhyLm92ZXJyaWRlTWltZVR5cGUgKSB7XG5cdFx0XHRcdFx0eGhyLm92ZXJyaWRlTWltZVR5cGUoIG9wdGlvbnMubWltZVR5cGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFgtUmVxdWVzdGVkLVdpdGggaGVhZGVyXG5cdFx0XHRcdC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25zIGZvciBhIHByZWZsaWdodCBhcmVcblx0XHRcdFx0Ly8gYWtpbiB0byBhIGppZ3NhdyBwdXp6bGUsIHdlIHNpbXBseSBuZXZlciBzZXQgaXQgdG8gYmUgc3VyZS5cblx0XHRcdFx0Ly8gKGl0IGNhbiBhbHdheXMgYmUgc2V0IG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMgb3IgZXZlbiB1c2luZyBhamF4U2V0dXApXG5cdFx0XHRcdC8vIEZvciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3ZpZGVkLlxuXHRcdFx0XHRpZiAoICFvcHRpb25zLmNyb3NzRG9tYWluICYmICFoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdICkge1xuXHRcdFx0XHRcdGhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gPSBcIlhNTEh0dHBSZXF1ZXN0XCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTZXQgaGVhZGVyc1xuXHRcdFx0XHRmb3IgKCBpIGluIGhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoIGksIGhlYWRlcnNbIGkgXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRjYWxsYmFjayA9IGVycm9yQ2FsbGJhY2sgPSB4aHIub25sb2FkID1cblx0XHRcdFx0XHRcdFx0XHR4aHIub25lcnJvciA9IHhoci5vbmFib3J0ID0geGhyLm9udGltZW91dCA9XG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiYWJvcnRcIiApIHtcblx0XHRcdFx0XHRcdFx0XHR4aHIuYWJvcnQoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggdHlwZSA9PT0gXCJlcnJvclwiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHQvLyBPbiBhIG1hbnVhbCBuYXRpdmUgYWJvcnQsIElFOSB0aHJvd3Ncblx0XHRcdFx0XHRcdFx0XHQvLyBlcnJvcnMgb24gYW55IHByb3BlcnR5IGFjY2VzcyB0aGF0IGlzIG5vdCByZWFkeVN0YXRlXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlb2YgeGhyLnN0YXR1cyAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCAwLCBcImVycm9yXCIgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRmlsZTogcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgMDsgc2VlICM4NjA1LCAjMTQyMDdcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHRcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyU3VjY2Vzc1N0YXR1c1sgeGhyLnN0YXR1cyBdIHx8IHhoci5zdGF0dXMsXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dCxcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHRcdC8vIElFOSBoYXMgbm8gWEhSMiBidXQgdGhyb3dzIG9uIGJpbmFyeSAodHJhYy0xMTQyNilcblx0XHRcdFx0XHRcdFx0XHRcdC8vIEZvciBYSFIyIG5vbi10ZXh0LCBsZXQgdGhlIGNhbGxlciBoYW5kbGUgaXQgKGdoLTI0OTgpXG5cdFx0XHRcdFx0XHRcdFx0XHQoIHhoci5yZXNwb25zZVR5cGUgfHwgXCJ0ZXh0XCIgKSAhPT0gXCJ0ZXh0XCIgIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgeGhyLnJlc3BvbnNlVGV4dCAhPT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgYmluYXJ5OiB4aHIucmVzcG9uc2UgfSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgdGV4dDogeGhyLnJlc3BvbnNlVGV4dCB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gTGlzdGVuIHRvIGV2ZW50c1xuXHRcdFx0XHR4aHIub25sb2FkID0gY2FsbGJhY2soKTtcblx0XHRcdFx0ZXJyb3JDYWxsYmFjayA9IHhoci5vbmVycm9yID0geGhyLm9udGltZW91dCA9IGNhbGxiYWNrKCBcImVycm9yXCIgKTtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHRcdFx0Ly8gVXNlIG9ucmVhZHlzdGF0ZWNoYW5nZSB0byByZXBsYWNlIG9uYWJvcnRcblx0XHRcdFx0Ly8gdG8gaGFuZGxlIHVuY2F1Z2h0IGFib3J0c1xuXHRcdFx0XHRpZiAoIHhoci5vbmFib3J0ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0eGhyLm9uYWJvcnQgPSBlcnJvckNhbGxiYWNrO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2hlY2sgcmVhZHlTdGF0ZSBiZWZvcmUgdGltZW91dCBhcyBpdCBjaGFuZ2VzXG5cdFx0XHRcdFx0XHRpZiAoIHhoci5yZWFkeVN0YXRlID09PSA0ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFsbG93IG9uZXJyb3IgdG8gYmUgY2FsbGVkIGZpcnN0LFxuXHRcdFx0XHRcdFx0XHQvLyBidXQgdGhhdCB3aWxsIG5vdCBoYW5kbGUgYSBuYXRpdmUgYWJvcnRcblx0XHRcdFx0XHRcdFx0Ly8gQWxzbywgc2F2ZSBlcnJvckNhbGxiYWNrIHRvIGEgdmFyaWFibGVcblx0XHRcdFx0XHRcdFx0Ly8gYXMgeGhyLm9uZXJyb3IgY2Fubm90IGJlIGFjY2Vzc2VkXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIGFib3J0IGNhbGxiYWNrXG5cdFx0XHRcdGNhbGxiYWNrID0gY2FsbGJhY2soIFwiYWJvcnRcIiApO1xuXG5cdFx0XHRcdHRyeSB7XG5cblx0XHRcdFx0XHQvLyBEbyBzZW5kIHRoZSByZXF1ZXN0ICh0aGlzIG1heSByYWlzZSBhbiBleGNlcHRpb24pXG5cdFx0XHRcdFx0eGhyLnNlbmQoIG9wdGlvbnMuaGFzQ29udGVudCAmJiBvcHRpb25zLmRhdGEgfHwgbnVsbCApO1xuXHRcdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRcdC8vICMxNDY4MzogT25seSByZXRocm93IGlmIHRoaXMgaGFzbid0IGJlZW4gbm90aWZpZWQgYXMgYW4gZXJyb3IgeWV0XG5cdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUHJldmVudCBhdXRvLWV4ZWN1dGlvbiBvZiBzY3JpcHRzIHdoZW4gbm8gZXhwbGljaXQgZGF0YVR5cGUgd2FzIHByb3ZpZGVkIChTZWUgZ2gtMjQzMilcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBmdW5jdGlvbiggcyApIHtcblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMuY29udGVudHMuc2NyaXB0ID0gZmFsc2U7XG5cdH1cbn0gKTtcblxuLy8gSW5zdGFsbCBzY3JpcHQgZGF0YVR5cGVcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0YWNjZXB0czoge1xuXHRcdHNjcmlwdDogXCJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIFwiICtcblx0XHRcdFwiYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0XCJcblx0fSxcblx0Y29udGVudHM6IHtcblx0XHRzY3JpcHQ6IC9cXGIoPzpqYXZhfGVjbWEpc2NyaXB0XFxiL1xuXHR9LFxuXHRjb252ZXJ0ZXJzOiB7XG5cdFx0XCJ0ZXh0IHNjcmlwdFwiOiBmdW5jdGlvbiggdGV4dCApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCB0ZXh0ICk7XG5cdFx0XHRyZXR1cm4gdGV4dDtcblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gSGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBjcm9zc0RvbWFpblxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY2FjaGUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRzLmNhY2hlID0gZmFsc2U7XG5cdH1cblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMudHlwZSA9IFwiR0VUXCI7XG5cdH1cbn0gKTtcblxuLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNwb3J0XG5qUXVlcnkuYWpheFRyYW5zcG9ydCggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cblx0Ly8gVGhpcyB0cmFuc3BvcnQgb25seSBkZWFscyB3aXRoIGNyb3NzIGRvbWFpbiBvciBmb3JjZWQtYnktYXR0cnMgcmVxdWVzdHNcblx0aWYgKCBzLmNyb3NzRG9tYWluIHx8IHMuc2NyaXB0QXR0cnMgKSB7XG5cdFx0dmFyIHNjcmlwdCwgY2FsbGJhY2s7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBfLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0c2NyaXB0ID0galF1ZXJ5KCBcIjxzY3JpcHQ+XCIgKVxuXHRcdFx0XHRcdC5hdHRyKCBzLnNjcmlwdEF0dHJzIHx8IHt9IClcblx0XHRcdFx0XHQucHJvcCggeyBjaGFyc2V0OiBzLnNjcmlwdENoYXJzZXQsIHNyYzogcy51cmwgfSApXG5cdFx0XHRcdFx0Lm9uKCBcImxvYWQgZXJyb3JcIiwgY2FsbGJhY2sgPSBmdW5jdGlvbiggZXZ0ICkge1xuXHRcdFx0XHRcdFx0c2NyaXB0LnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBudWxsO1xuXHRcdFx0XHRcdFx0aWYgKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCBldnQudHlwZSA9PT0gXCJlcnJvclwiID8gNDA0IDogMjAwLCBldnQudHlwZSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHQvLyBVc2UgbmF0aXZlIERPTSBtYW5pcHVsYXRpb24gdG8gYXZvaWQgb3VyIGRvbU1hbmlwIEFKQVggdHJpY2tlcnlcblx0XHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0WyAwIF0gKTtcblx0XHRcdH0sXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIG9sZENhbGxiYWNrcyA9IFtdLFxuXHRyanNvbnAgPSAvKD0pXFw/KD89JnwkKXxcXD9cXD8vO1xuXG4vLyBEZWZhdWx0IGpzb25wIHNldHRpbmdzXG5qUXVlcnkuYWpheFNldHVwKCB7XG5cdGpzb25wOiBcImNhbGxiYWNrXCIsXG5cdGpzb25wQ2FsbGJhY2s6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBjYWxsYmFjayA9IG9sZENhbGxiYWNrcy5wb3AoKSB8fCAoIGpRdWVyeS5leHBhbmRvICsgXCJfXCIgKyAoIG5vbmNlKysgKSApO1xuXHRcdHRoaXNbIGNhbGxiYWNrIF0gPSB0cnVlO1xuXHRcdHJldHVybiBjYWxsYmFjaztcblx0fVxufSApO1xuXG4vLyBEZXRlY3QsIG5vcm1hbGl6ZSBvcHRpb25zIGFuZCBpbnN0YWxsIGNhbGxiYWNrcyBmb3IganNvbnAgcmVxdWVzdHNcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcImpzb24ganNvbnBcIiwgZnVuY3Rpb24oIHMsIG9yaWdpbmFsU2V0dGluZ3MsIGpxWEhSICkge1xuXG5cdHZhciBjYWxsYmFja05hbWUsIG92ZXJ3cml0dGVuLCByZXNwb25zZUNvbnRhaW5lcixcblx0XHRqc29uUHJvcCA9IHMuanNvbnAgIT09IGZhbHNlICYmICggcmpzb25wLnRlc3QoIHMudXJsICkgP1xuXHRcdFx0XCJ1cmxcIiA6XG5cdFx0XHR0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiIClcblx0XHRcdFx0XHQuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICYmXG5cdFx0XHRcdHJqc29ucC50ZXN0KCBzLmRhdGEgKSAmJiBcImRhdGFcIlxuXHRcdCk7XG5cblx0Ly8gSGFuZGxlIGlmZiB0aGUgZXhwZWN0ZWQgZGF0YSB0eXBlIGlzIFwianNvbnBcIiBvciB3ZSBoYXZlIGEgcGFyYW1ldGVyIHRvIHNldFxuXHRpZiAoIGpzb25Qcm9wIHx8IHMuZGF0YVR5cGVzWyAwIF0gPT09IFwianNvbnBcIiApIHtcblxuXHRcdC8vIEdldCBjYWxsYmFjayBuYW1lLCByZW1lbWJlcmluZyBwcmVleGlzdGluZyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggaXRcblx0XHRjYWxsYmFja05hbWUgPSBzLmpzb25wQ2FsbGJhY2sgPSBpc0Z1bmN0aW9uKCBzLmpzb25wQ2FsbGJhY2sgKSA/XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2soKSA6XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2s7XG5cblx0XHQvLyBJbnNlcnQgY2FsbGJhY2sgaW50byB1cmwgb3IgZm9ybSBkYXRhXG5cdFx0aWYgKCBqc29uUHJvcCApIHtcblx0XHRcdHNbIGpzb25Qcm9wIF0gPSBzWyBqc29uUHJvcCBdLnJlcGxhY2UoIHJqc29ucCwgXCIkMVwiICsgY2FsbGJhY2tOYW1lICk7XG5cdFx0fSBlbHNlIGlmICggcy5qc29ucCAhPT0gZmFsc2UgKSB7XG5cdFx0XHRzLnVybCArPSAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gXCImXCIgOiBcIj9cIiApICsgcy5qc29ucCArIFwiPVwiICsgY2FsbGJhY2tOYW1lO1xuXHRcdH1cblxuXHRcdC8vIFVzZSBkYXRhIGNvbnZlcnRlciB0byByZXRyaWV2ZSBqc29uIGFmdGVyIHNjcmlwdCBleGVjdXRpb25cblx0XHRzLmNvbnZlcnRlcnNbIFwic2NyaXB0IGpzb25cIiBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoICFyZXNwb25zZUNvbnRhaW5lciApIHtcblx0XHRcdFx0alF1ZXJ5LmVycm9yKCBjYWxsYmFja05hbWUgKyBcIiB3YXMgbm90IGNhbGxlZFwiICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzcG9uc2VDb250YWluZXJbIDAgXTtcblx0XHR9O1xuXG5cdFx0Ly8gRm9yY2UganNvbiBkYXRhVHlwZVxuXHRcdHMuZGF0YVR5cGVzWyAwIF0gPSBcImpzb25cIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tcblx0XHRvdmVyd3JpdHRlbiA9IHdpbmRvd1sgY2FsbGJhY2tOYW1lIF07XG5cdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBhcmd1bWVudHM7XG5cdFx0fTtcblxuXHRcdC8vIENsZWFuLXVwIGZ1bmN0aW9uIChmaXJlcyBhZnRlciBjb252ZXJ0ZXJzKVxuXHRcdGpxWEhSLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIElmIHByZXZpb3VzIHZhbHVlIGRpZG4ndCBleGlzdCAtIHJlbW92ZSBpdFxuXHRcdFx0aWYgKCBvdmVyd3JpdHRlbiA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRqUXVlcnkoIHdpbmRvdyApLnJlbW92ZVByb3AoIGNhbGxiYWNrTmFtZSApO1xuXG5cdFx0XHQvLyBPdGhlcndpc2UgcmVzdG9yZSBwcmVleGlzdGluZyB2YWx1ZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IG92ZXJ3cml0dGVuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTYXZlIGJhY2sgYXMgZnJlZVxuXHRcdFx0aWYgKCBzWyBjYWxsYmFja05hbWUgXSApIHtcblxuXHRcdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCByZS11c2luZyB0aGUgb3B0aW9ucyBkb2Vzbid0IHNjcmV3IHRoaW5ncyBhcm91bmRcblx0XHRcdFx0cy5qc29ucENhbGxiYWNrID0gb3JpZ2luYWxTZXR0aW5ncy5qc29ucENhbGxiYWNrO1xuXG5cdFx0XHRcdC8vIFNhdmUgdGhlIGNhbGxiYWNrIG5hbWUgZm9yIGZ1dHVyZSB1c2Vcblx0XHRcdFx0b2xkQ2FsbGJhY2tzLnB1c2goIGNhbGxiYWNrTmFtZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDYWxsIGlmIGl0IHdhcyBhIGZ1bmN0aW9uIGFuZCB3ZSBoYXZlIGEgcmVzcG9uc2Vcblx0XHRcdGlmICggcmVzcG9uc2VDb250YWluZXIgJiYgaXNGdW5jdGlvbiggb3ZlcndyaXR0ZW4gKSApIHtcblx0XHRcdFx0b3ZlcndyaXR0ZW4oIHJlc3BvbnNlQ29udGFpbmVyWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBvdmVyd3JpdHRlbiA9IHVuZGVmaW5lZDtcblx0XHR9ICk7XG5cblx0XHQvLyBEZWxlZ2F0ZSB0byBzY3JpcHRcblx0XHRyZXR1cm4gXCJzY3JpcHRcIjtcblx0fVxufSApO1xuXG5cblxuXG4vLyBTdXBwb3J0OiBTYWZhcmkgOCBvbmx5XG4vLyBJbiBTYWZhcmkgOCBkb2N1bWVudHMgY3JlYXRlZCB2aWEgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50XG4vLyBjb2xsYXBzZSBzaWJsaW5nIGZvcm1zOiB0aGUgc2Vjb25kIG9uZSBiZWNvbWVzIGEgY2hpbGQgb2YgdGhlIGZpcnN0IG9uZS5cbi8vIEJlY2F1c2Ugb2YgdGhhdCwgdGhpcyBzZWN1cml0eSBtZWFzdXJlIGhhcyB0byBiZSBkaXNhYmxlZCBpbiBTYWZhcmkgOC5cbi8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzczMzdcbnN1cHBvcnQuY3JlYXRlSFRNTERvY3VtZW50ID0gKCBmdW5jdGlvbigpIHtcblx0dmFyIGJvZHkgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKS5ib2R5O1xuXHRib2R5LmlubmVySFRNTCA9IFwiPGZvcm0+PC9mb3JtPjxmb3JtPjwvZm9ybT5cIjtcblx0cmV0dXJuIGJvZHkuY2hpbGROb2Rlcy5sZW5ndGggPT09IDI7XG59ICkoKTtcblxuXG4vLyBBcmd1bWVudCBcImRhdGFcIiBzaG91bGQgYmUgc3RyaW5nIG9mIGh0bWxcbi8vIGNvbnRleHQgKG9wdGlvbmFsKTogSWYgc3BlY2lmaWVkLCB0aGUgZnJhZ21lbnQgd2lsbCBiZSBjcmVhdGVkIGluIHRoaXMgY29udGV4dCxcbi8vIGRlZmF1bHRzIHRvIGRvY3VtZW50XG4vLyBrZWVwU2NyaXB0cyAob3B0aW9uYWwpOiBJZiB0cnVlLCB3aWxsIGluY2x1ZGUgc2NyaXB0cyBwYXNzZWQgaW4gdGhlIGh0bWwgc3RyaW5nXG5qUXVlcnkucGFyc2VIVE1MID0gZnVuY3Rpb24oIGRhdGEsIGNvbnRleHQsIGtlZXBTY3JpcHRzICkge1xuXHRpZiAoIHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRrZWVwU2NyaXB0cyA9IGNvbnRleHQ7XG5cdFx0Y29udGV4dCA9IGZhbHNlO1xuXHR9XG5cblx0dmFyIGJhc2UsIHBhcnNlZCwgc2NyaXB0cztcblxuXHRpZiAoICFjb250ZXh0ICkge1xuXG5cdFx0Ly8gU3RvcCBzY3JpcHRzIG9yIGlubGluZSBldmVudCBoYW5kbGVycyBmcm9tIGJlaW5nIGV4ZWN1dGVkIGltbWVkaWF0ZWx5XG5cdFx0Ly8gYnkgdXNpbmcgZG9jdW1lbnQuaW1wbGVtZW50YXRpb25cblx0XHRpZiAoIHN1cHBvcnQuY3JlYXRlSFRNTERvY3VtZW50ICkge1xuXHRcdFx0Y29udGV4dCA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCggXCJcIiApO1xuXG5cdFx0XHQvLyBTZXQgdGhlIGJhc2UgaHJlZiBmb3IgdGhlIGNyZWF0ZWQgZG9jdW1lbnRcblx0XHRcdC8vIHNvIGFueSBwYXJzZWQgZWxlbWVudHMgd2l0aCBVUkxzXG5cdFx0XHQvLyBhcmUgYmFzZWQgb24gdGhlIGRvY3VtZW50J3MgVVJMIChnaC0yOTY1KVxuXHRcdFx0YmFzZSA9IGNvbnRleHQuY3JlYXRlRWxlbWVudCggXCJiYXNlXCIgKTtcblx0XHRcdGJhc2UuaHJlZiA9IGRvY3VtZW50LmxvY2F0aW9uLmhyZWY7XG5cdFx0XHRjb250ZXh0LmhlYWQuYXBwZW5kQ2hpbGQoIGJhc2UgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGV4dCA9IGRvY3VtZW50O1xuXHRcdH1cblx0fVxuXG5cdHBhcnNlZCA9IHJzaW5nbGVUYWcuZXhlYyggZGF0YSApO1xuXHRzY3JpcHRzID0gIWtlZXBTY3JpcHRzICYmIFtdO1xuXG5cdC8vIFNpbmdsZSB0YWdcblx0aWYgKCBwYXJzZWQgKSB7XG5cdFx0cmV0dXJuIFsgY29udGV4dC5jcmVhdGVFbGVtZW50KCBwYXJzZWRbIDEgXSApIF07XG5cdH1cblxuXHRwYXJzZWQgPSBidWlsZEZyYWdtZW50KCBbIGRhdGEgXSwgY29udGV4dCwgc2NyaXB0cyApO1xuXG5cdGlmICggc2NyaXB0cyAmJiBzY3JpcHRzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkoIHNjcmlwdHMgKS5yZW1vdmUoKTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBwYXJzZWQuY2hpbGROb2RlcyApO1xufTtcblxuXG4vKipcbiAqIExvYWQgYSB1cmwgaW50byBhIHBhZ2VcbiAqL1xualF1ZXJ5LmZuLmxvYWQgPSBmdW5jdGlvbiggdXJsLCBwYXJhbXMsIGNhbGxiYWNrICkge1xuXHR2YXIgc2VsZWN0b3IsIHR5cGUsIHJlc3BvbnNlLFxuXHRcdHNlbGYgPSB0aGlzLFxuXHRcdG9mZiA9IHVybC5pbmRleE9mKCBcIiBcIiApO1xuXG5cdGlmICggb2ZmID4gLTEgKSB7XG5cdFx0c2VsZWN0b3IgPSBzdHJpcEFuZENvbGxhcHNlKCB1cmwuc2xpY2UoIG9mZiApICk7XG5cdFx0dXJsID0gdXJsLnNsaWNlKCAwLCBvZmYgKTtcblx0fVxuXG5cdC8vIElmIGl0J3MgYSBmdW5jdGlvblxuXHRpZiAoIGlzRnVuY3Rpb24oIHBhcmFtcyApICkge1xuXG5cdFx0Ly8gV2UgYXNzdW1lIHRoYXQgaXQncyB0aGUgY2FsbGJhY2tcblx0XHRjYWxsYmFjayA9IHBhcmFtcztcblx0XHRwYXJhbXMgPSB1bmRlZmluZWQ7XG5cblx0Ly8gT3RoZXJ3aXNlLCBidWlsZCBhIHBhcmFtIHN0cmluZ1xuXHR9IGVsc2UgaWYgKCBwYXJhbXMgJiYgdHlwZW9mIHBhcmFtcyA9PT0gXCJvYmplY3RcIiApIHtcblx0XHR0eXBlID0gXCJQT1NUXCI7XG5cdH1cblxuXHQvLyBJZiB3ZSBoYXZlIGVsZW1lbnRzIHRvIG1vZGlmeSwgbWFrZSB0aGUgcmVxdWVzdFxuXHRpZiAoIHNlbGYubGVuZ3RoID4gMCApIHtcblx0XHRqUXVlcnkuYWpheCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cblx0XHRcdC8vIElmIFwidHlwZVwiIHZhcmlhYmxlIGlzIHVuZGVmaW5lZCwgdGhlbiBcIkdFVFwiIG1ldGhvZCB3aWxsIGJlIHVzZWQuXG5cdFx0XHQvLyBNYWtlIHZhbHVlIG9mIHRoaXMgZmllbGQgZXhwbGljaXQgc2luY2Vcblx0XHRcdC8vIHVzZXIgY2FuIG92ZXJyaWRlIGl0IHRocm91Z2ggYWpheFNldHVwIG1ldGhvZFxuXHRcdFx0dHlwZTogdHlwZSB8fCBcIkdFVFwiLFxuXHRcdFx0ZGF0YVR5cGU6IFwiaHRtbFwiLFxuXHRcdFx0ZGF0YTogcGFyYW1zXG5cdFx0fSApLmRvbmUoIGZ1bmN0aW9uKCByZXNwb25zZVRleHQgKSB7XG5cblx0XHRcdC8vIFNhdmUgcmVzcG9uc2UgZm9yIHVzZSBpbiBjb21wbGV0ZSBjYWxsYmFja1xuXHRcdFx0cmVzcG9uc2UgPSBhcmd1bWVudHM7XG5cblx0XHRcdHNlbGYuaHRtbCggc2VsZWN0b3IgP1xuXG5cdFx0XHRcdC8vIElmIGEgc2VsZWN0b3Igd2FzIHNwZWNpZmllZCwgbG9jYXRlIHRoZSByaWdodCBlbGVtZW50cyBpbiBhIGR1bW15IGRpdlxuXHRcdFx0XHQvLyBFeGNsdWRlIHNjcmlwdHMgdG8gYXZvaWQgSUUgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJvcnNcblx0XHRcdFx0alF1ZXJ5KCBcIjxkaXY+XCIgKS5hcHBlbmQoIGpRdWVyeS5wYXJzZUhUTUwoIHJlc3BvbnNlVGV4dCApICkuZmluZCggc2VsZWN0b3IgKSA6XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHVzZSB0aGUgZnVsbCByZXN1bHRcblx0XHRcdFx0cmVzcG9uc2VUZXh0ICk7XG5cblx0XHQvLyBJZiB0aGUgcmVxdWVzdCBzdWNjZWVkcywgdGhpcyBmdW5jdGlvbiBnZXRzIFwiZGF0YVwiLCBcInN0YXR1c1wiLCBcImpxWEhSXCJcblx0XHQvLyBidXQgdGhleSBhcmUgaWdub3JlZCBiZWNhdXNlIHJlc3BvbnNlIHdhcyBzZXQgYWJvdmUuXG5cdFx0Ly8gSWYgaXQgZmFpbHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImpxWEhSXCIsIFwic3RhdHVzXCIsIFwiZXJyb3JcIlxuXHRcdH0gKS5hbHdheXMoIGNhbGxiYWNrICYmIGZ1bmN0aW9uKCBqcVhIUiwgc3RhdHVzICkge1xuXHRcdFx0c2VsZi5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Y2FsbGJhY2suYXBwbHkoIHRoaXMsIHJlc3BvbnNlIHx8IFsganFYSFIucmVzcG9uc2VUZXh0LCBzdGF0dXMsIGpxWEhSIF0gKTtcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn07XG5cblxuXG5cbi8vIEF0dGFjaCBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgY29tbW9uIEFKQVggZXZlbnRzXG5qUXVlcnkuZWFjaCggW1xuXHRcImFqYXhTdGFydFwiLFxuXHRcImFqYXhTdG9wXCIsXG5cdFwiYWpheENvbXBsZXRlXCIsXG5cdFwiYWpheEVycm9yXCIsXG5cdFwiYWpheFN1Y2Nlc3NcIixcblx0XCJhamF4U2VuZFwiXG5dLCBmdW5jdGlvbiggaSwgdHlwZSApIHtcblx0alF1ZXJ5LmZuWyB0eXBlIF0gPSBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGUsIGZuICk7XG5cdH07XG59ICk7XG5cblxuXG5cbmpRdWVyeS5leHByLnBzZXVkb3MuYW5pbWF0ZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuIGpRdWVyeS5ncmVwKCBqUXVlcnkudGltZXJzLCBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW0gPT09IGZuLmVsZW07XG5cdH0gKS5sZW5ndGg7XG59O1xuXG5cblxuXG5qUXVlcnkub2Zmc2V0ID0ge1xuXHRzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkge1xuXHRcdHZhciBjdXJQb3NpdGlvbiwgY3VyTGVmdCwgY3VyQ1NTVG9wLCBjdXJUb3AsIGN1ck9mZnNldCwgY3VyQ1NTTGVmdCwgY2FsY3VsYXRlUG9zaXRpb24sXG5cdFx0XHRwb3NpdGlvbiA9IGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApLFxuXHRcdFx0Y3VyRWxlbSA9IGpRdWVyeSggZWxlbSApLFxuXHRcdFx0cHJvcHMgPSB7fTtcblxuXHRcdC8vIFNldCBwb3NpdGlvbiBmaXJzdCwgaW4tY2FzZSB0b3AvbGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW1cblx0XHRpZiAoIHBvc2l0aW9uID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0ZWxlbS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcblx0XHR9XG5cblx0XHRjdXJPZmZzZXQgPSBjdXJFbGVtLm9mZnNldCgpO1xuXHRcdGN1ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwidG9wXCIgKTtcblx0XHRjdXJDU1NMZWZ0ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJsZWZ0XCIgKTtcblx0XHRjYWxjdWxhdGVQb3NpdGlvbiA9ICggcG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiB8fCBwb3NpdGlvbiA9PT0gXCJmaXhlZFwiICkgJiZcblx0XHRcdCggY3VyQ1NTVG9wICsgY3VyQ1NTTGVmdCApLmluZGV4T2YoIFwiYXV0b1wiICkgPiAtMTtcblxuXHRcdC8vIE5lZWQgdG8gYmUgYWJsZSB0byBjYWxjdWxhdGUgcG9zaXRpb24gaWYgZWl0aGVyXG5cdFx0Ly8gdG9wIG9yIGxlZnQgaXMgYXV0byBhbmQgcG9zaXRpb24gaXMgZWl0aGVyIGFic29sdXRlIG9yIGZpeGVkXG5cdFx0aWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHtcblx0XHRcdGN1clBvc2l0aW9uID0gY3VyRWxlbS5wb3NpdGlvbigpO1xuXHRcdFx0Y3VyVG9wID0gY3VyUG9zaXRpb24udG9wO1xuXHRcdFx0Y3VyTGVmdCA9IGN1clBvc2l0aW9uLmxlZnQ7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyVG9wID0gcGFyc2VGbG9hdCggY3VyQ1NTVG9wICkgfHwgMDtcblx0XHRcdGN1ckxlZnQgPSBwYXJzZUZsb2F0KCBjdXJDU1NMZWZ0ICkgfHwgMDtcblx0XHR9XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIG9wdGlvbnMgKSApIHtcblxuXHRcdFx0Ly8gVXNlIGpRdWVyeS5leHRlbmQgaGVyZSB0byBhbGxvdyBtb2RpZmljYXRpb24gb2YgY29vcmRpbmF0ZXMgYXJndW1lbnQgKGdoLTE4NDgpXG5cdFx0XHRvcHRpb25zID0gb3B0aW9ucy5jYWxsKCBlbGVtLCBpLCBqUXVlcnkuZXh0ZW5kKCB7fSwgY3VyT2Zmc2V0ICkgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdGlvbnMudG9wICE9IG51bGwgKSB7XG5cdFx0XHRwcm9wcy50b3AgPSAoIG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCApICsgY3VyVG9wO1xuXHRcdH1cblx0XHRpZiAoIG9wdGlvbnMubGVmdCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMubGVmdCA9ICggb3B0aW9ucy5sZWZ0IC0gY3VyT2Zmc2V0LmxlZnQgKSArIGN1ckxlZnQ7XG5cdFx0fVxuXG5cdFx0aWYgKCBcInVzaW5nXCIgaW4gb3B0aW9ucyApIHtcblx0XHRcdG9wdGlvbnMudXNpbmcuY2FsbCggZWxlbSwgcHJvcHMgKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJFbGVtLmNzcyggcHJvcHMgKTtcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHQvLyBvZmZzZXQoKSByZWxhdGVzIGFuIGVsZW1lbnQncyBib3JkZXIgYm94IHRvIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b2Zmc2V0OiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHRcdC8vIFByZXNlcnZlIGNoYWluaW5nIGZvciBzZXR0ZXJcblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0dGhpcyA6XG5cdFx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTtcblx0XHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHZhciByZWN0LCB3aW4sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gemVyb3MgZm9yIGRpc2Nvbm5lY3RlZCBhbmQgaGlkZGVuIChkaXNwbGF5OiBub25lKSBlbGVtZW50cyAoZ2gtMjMxMClcblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhXG5cdFx0Ly8gZGlzY29ubmVjdGVkIG5vZGUgaW4gSUUgdGhyb3dzIGFuIGVycm9yXG5cdFx0aWYgKCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB7IHRvcDogMCwgbGVmdDogMCB9O1xuXHRcdH1cblxuXHRcdC8vIEdldCBkb2N1bWVudC1yZWxhdGl2ZSBwb3NpdGlvbiBieSBhZGRpbmcgdmlld3BvcnQgc2Nyb2xsIHRvIHZpZXdwb3J0LXJlbGF0aXZlIGdCQ1Jcblx0XHRyZWN0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHR3aW4gPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogcmVjdC50b3AgKyB3aW4ucGFnZVlPZmZzZXQsXG5cdFx0XHRsZWZ0OiByZWN0LmxlZnQgKyB3aW4ucGFnZVhPZmZzZXRcblx0XHR9O1xuXHR9LFxuXG5cdC8vIHBvc2l0aW9uKCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgbWFyZ2luIGJveCB0byBpdHMgb2Zmc2V0IHBhcmVudCdzIHBhZGRpbmcgYm94XG5cdC8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGJlaGF2aW9yIG9mIENTUyBhYnNvbHV0ZSBwb3NpdGlvbmluZ1xuXHRwb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCAhdGhpc1sgMCBdICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBvZmZzZXRQYXJlbnQsIG9mZnNldCwgZG9jLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdHBhcmVudE9mZnNldCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cblx0XHQvLyBwb3NpdGlvbjpmaXhlZCBlbGVtZW50cyBhcmUgb2Zmc2V0IGZyb20gdGhlIHZpZXdwb3J0LCB3aGljaCBpdHNlbGYgYWx3YXlzIGhhcyB6ZXJvIG9mZnNldFxuXHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICkgPT09IFwiZml4ZWRcIiApIHtcblxuXHRcdFx0Ly8gQXNzdW1lIHBvc2l0aW9uOmZpeGVkIGltcGxpZXMgYXZhaWxhYmlsaXR5IG9mIGdldEJvdW5kaW5nQ2xpZW50UmVjdFxuXHRcdFx0b2Zmc2V0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvZmZzZXQgPSB0aGlzLm9mZnNldCgpO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB0aGUgKnJlYWwqIG9mZnNldCBwYXJlbnQsIHdoaWNoIGNhbiBiZSB0aGUgZG9jdW1lbnQgb3IgaXRzIHJvb3QgZWxlbWVudFxuXHRcdFx0Ly8gd2hlbiBhIHN0YXRpY2FsbHkgcG9zaXRpb25lZCBlbGVtZW50IGlzIGlkZW50aWZpZWRcblx0XHRcdGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudDtcblx0XHRcdG9mZnNldFBhcmVudCA9IGVsZW0ub2Zmc2V0UGFyZW50IHx8IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJlxuXHRcdFx0XHQoIG9mZnNldFBhcmVudCA9PT0gZG9jLmJvZHkgfHwgb2Zmc2V0UGFyZW50ID09PSBkb2MuZG9jdW1lbnRFbGVtZW50ICkgJiZcblx0XHRcdFx0alF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcInBvc2l0aW9uXCIgKSA9PT0gXCJzdGF0aWNcIiApIHtcblxuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGlmICggb2Zmc2V0UGFyZW50ICYmIG9mZnNldFBhcmVudCAhPT0gZWxlbSAmJiBvZmZzZXRQYXJlbnQubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgYm9yZGVycyBpbnRvIGl0cyBvZmZzZXQsIHNpbmNlIHRoZXkgYXJlIG91dHNpZGUgaXRzIGNvbnRlbnQgb3JpZ2luXG5cdFx0XHRcdHBhcmVudE9mZnNldCA9IGpRdWVyeSggb2Zmc2V0UGFyZW50ICkub2Zmc2V0KCk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC50b3AgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlclRvcFdpZHRoXCIsIHRydWUgKTtcblx0XHRcdFx0cGFyZW50T2Zmc2V0LmxlZnQgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlckxlZnRXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU3VidHJhY3QgcGFyZW50IG9mZnNldHMgYW5kIGVsZW1lbnQgbWFyZ2luc1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IG9mZnNldC50b3AgLSBwYXJlbnRPZmZzZXQudG9wIC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5Ub3BcIiwgdHJ1ZSApLFxuXHRcdFx0bGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luTGVmdFwiLCB0cnVlIClcblx0XHR9O1xuXHR9LFxuXG5cdC8vIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGRvY3VtZW50RWxlbWVudCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuXHQvLyAxKSBGb3IgdGhlIGVsZW1lbnQgaW5zaWRlIHRoZSBpZnJhbWUgd2l0aG91dCBvZmZzZXRQYXJlbnQsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuXG5cdC8vICAgIGRvY3VtZW50RWxlbWVudCBvZiB0aGUgcGFyZW50IHdpbmRvd1xuXHQvLyAyKSBGb3IgdGhlIGhpZGRlbiBvciBkZXRhY2hlZCBlbGVtZW50XG5cdC8vIDMpIEZvciBib2R5IG9yIGh0bWwgZWxlbWVudCwgaS5lLiBpbiBjYXNlIG9mIHRoZSBodG1sIG5vZGUgLSBpdCB3aWxsIHJldHVybiBpdHNlbGZcblx0Ly9cblx0Ly8gYnV0IHRob3NlIGV4Y2VwdGlvbnMgd2VyZSBuZXZlciBwcmVzZW50ZWQgYXMgYSByZWFsIGxpZmUgdXNlLWNhc2VzXG5cdC8vIGFuZCBtaWdodCBiZSBjb25zaWRlcmVkIGFzIG1vcmUgcHJlZmVyYWJsZSByZXN1bHRzLlxuXHQvL1xuXHQvLyBUaGlzIGxvZ2ljLCBob3dldmVyLCBpcyBub3QgZ3VhcmFudGVlZCBhbmQgY2FuIGNoYW5nZSBhdCBhbnkgcG9pbnQgaW4gdGhlIGZ1dHVyZVxuXHRvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQ7XG5cblx0XHRcdHdoaWxlICggb2Zmc2V0UGFyZW50ICYmIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnRFbGVtZW50O1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG4vLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IHNjcm9sbExlZnQ6IFwicGFnZVhPZmZzZXRcIiwgc2Nyb2xsVG9wOiBcInBhZ2VZT2Zmc2V0XCIgfSwgZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHtcblx0dmFyIHRvcCA9IFwicGFnZVlPZmZzZXRcIiA9PT0gcHJvcDtcblxuXHRqUXVlcnkuZm5bIG1ldGhvZCBdID0gZnVuY3Rpb24oIHZhbCApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7XG5cblx0XHRcdC8vIENvYWxlc2NlIGRvY3VtZW50cyBhbmQgd2luZG93c1xuXHRcdFx0dmFyIHdpbjtcblx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblx0XHRcdFx0d2luID0gZWxlbTtcblx0XHRcdH0gZWxzZSBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW0uZGVmYXVsdFZpZXc7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiB3aW4gPyB3aW5bIHByb3AgXSA6IGVsZW1bIG1ldGhvZCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHdpbiApIHtcblx0XHRcdFx0d2luLnNjcm9sbFRvKFxuXHRcdFx0XHRcdCF0b3AgPyB2YWwgOiB3aW4ucGFnZVhPZmZzZXQsXG5cdFx0XHRcdFx0dG9wID8gdmFsIDogd2luLnBhZ2VZT2Zmc2V0XG5cdFx0XHRcdCk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1bIG1ldGhvZCBdID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0sIG1ldGhvZCwgdmFsLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH07XG59ICk7XG5cbi8vIFN1cHBvcnQ6IFNhZmFyaSA8PTcgLSA5LjEsIENocm9tZSA8PTM3IC0gNDlcbi8vIEFkZCB0aGUgdG9wL2xlZnQgY3NzSG9va3MgdXNpbmcgalF1ZXJ5LmZuLnBvc2l0aW9uXG4vLyBXZWJraXQgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwODRcbi8vIEJsaW5rIGJ1ZzogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NTg5MzQ3XG4vLyBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgcGVyY2VudCB3aGVuIHNwZWNpZmllZCBmb3IgdG9wL2xlZnQvYm90dG9tL3JpZ2h0O1xuLy8gcmF0aGVyIHRoYW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQgb24gdGhlIG9mZnNldCBtb2R1bGUsIGp1c3QgY2hlY2sgZm9yIGl0IGhlcmVcbmpRdWVyeS5lYWNoKCBbIFwidG9wXCIsIFwibGVmdFwiIF0sIGZ1bmN0aW9uKCBpLCBwcm9wICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIHByb3AgXSA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5waXhlbFBvc2l0aW9uLFxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGNvbXB1dGVkID0gY3VyQ1NTKCBlbGVtLCBwcm9wICk7XG5cblx0XHRcdFx0Ly8gSWYgY3VyQ1NTIHJldHVybnMgcGVyY2VudGFnZSwgZmFsbGJhY2sgdG8gb2Zmc2V0XG5cdFx0XHRcdHJldHVybiBybnVtbm9ucHgudGVzdCggY29tcHV0ZWQgKSA/XG5cdFx0XHRcdFx0alF1ZXJ5KCBlbGVtICkucG9zaXRpb24oKVsgcHJvcCBdICsgXCJweFwiIDpcblx0XHRcdFx0XHRjb21wdXRlZDtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG59ICk7XG5cblxuLy8gQ3JlYXRlIGlubmVySGVpZ2h0LCBpbm5lcldpZHRoLCBoZWlnaHQsIHdpZHRoLCBvdXRlckhlaWdodCBhbmQgb3V0ZXJXaWR0aCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBIZWlnaHQ6IFwiaGVpZ2h0XCIsIFdpZHRoOiBcIndpZHRoXCIgfSwgZnVuY3Rpb24oIG5hbWUsIHR5cGUgKSB7XG5cdGpRdWVyeS5lYWNoKCB7IHBhZGRpbmc6IFwiaW5uZXJcIiArIG5hbWUsIGNvbnRlbnQ6IHR5cGUsIFwiXCI6IFwib3V0ZXJcIiArIG5hbWUgfSxcblx0XHRmdW5jdGlvbiggZGVmYXVsdEV4dHJhLCBmdW5jTmFtZSApIHtcblxuXHRcdC8vIE1hcmdpbiBpcyBvbmx5IGZvciBvdXRlckhlaWdodCwgb3V0ZXJXaWR0aFxuXHRcdGpRdWVyeS5mblsgZnVuY05hbWUgXSA9IGZ1bmN0aW9uKCBtYXJnaW4sIHZhbHVlICkge1xuXHRcdFx0dmFyIGNoYWluYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggJiYgKCBkZWZhdWx0RXh0cmEgfHwgdHlwZW9mIG1hcmdpbiAhPT0gXCJib29sZWFuXCIgKSxcblx0XHRcdFx0ZXh0cmEgPSBkZWZhdWx0RXh0cmEgfHwgKCBtYXJnaW4gPT09IHRydWUgfHwgdmFsdWUgPT09IHRydWUgPyBcIm1hcmdpblwiIDogXCJib3JkZXJcIiApO1xuXG5cdFx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgdHlwZSwgdmFsdWUgKSB7XG5cdFx0XHRcdHZhciBkb2M7XG5cblx0XHRcdFx0aWYgKCBpc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRcdFx0Ly8gJCggd2luZG93ICkub3V0ZXJXaWR0aC9IZWlnaHQgcmV0dXJuIHcvaCBpbmNsdWRpbmcgc2Nyb2xsYmFycyAoZ2gtMTcyOSlcblx0XHRcdFx0XHRyZXR1cm4gZnVuY05hbWUuaW5kZXhPZiggXCJvdXRlclwiICkgPT09IDAgP1xuXHRcdFx0XHRcdFx0ZWxlbVsgXCJpbm5lclwiICsgbmFtZSBdIDpcblx0XHRcdFx0XHRcdGVsZW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyBcImNsaWVudFwiICsgbmFtZSBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gR2V0IGRvY3VtZW50IHdpZHRoIG9yIGhlaWdodFxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0ZG9jID0gZWxlbS5kb2N1bWVudEVsZW1lbnQ7XG5cblx0XHRcdFx0XHQvLyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0gb3Igb2Zmc2V0W1dpZHRoL0hlaWdodF0gb3IgY2xpZW50W1dpZHRoL0hlaWdodF0sXG5cdFx0XHRcdFx0Ly8gd2hpY2hldmVyIGlzIGdyZWF0ZXN0XG5cdFx0XHRcdFx0cmV0dXJuIE1hdGgubWF4KFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcInNjcm9sbFwiICsgbmFtZSBdLCBkb2NbIFwic2Nyb2xsXCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwib2Zmc2V0XCIgKyBuYW1lIF0sIGRvY1sgXCJvZmZzZXRcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGRvY1sgXCJjbGllbnRcIiArIG5hbWUgXVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cblx0XHRcdFx0XHQvLyBHZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50LCByZXF1ZXN0aW5nIGJ1dCBub3QgZm9yY2luZyBwYXJzZUZsb2F0XG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgZXh0cmEgKSA6XG5cblx0XHRcdFx0XHQvLyBTZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50XG5cdFx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCB0eXBlLCB2YWx1ZSwgZXh0cmEgKTtcblx0XHRcdH0sIHR5cGUsIGNoYWluYWJsZSA/IG1hcmdpbiA6IHVuZGVmaW5lZCwgY2hhaW5hYmxlICk7XG5cdFx0fTtcblx0fSApO1xufSApO1xuXG5cbmpRdWVyeS5lYWNoKCAoIFwiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgXCIgK1xuXHRcIm1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIFwiICtcblx0XCJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51XCIgKS5zcGxpdCggXCIgXCIgKSxcblx0ZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cblx0Ly8gSGFuZGxlIGV2ZW50IGJpbmRpbmdcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID9cblx0XHRcdHRoaXMub24oIG5hbWUsIG51bGwsIGRhdGEsIGZuICkgOlxuXHRcdFx0dGhpcy50cmlnZ2VyKCBuYW1lICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0aG92ZXI6IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkge1xuXHRcdHJldHVybiB0aGlzLm1vdXNlZW50ZXIoIGZuT3ZlciApLm1vdXNlbGVhdmUoIGZuT3V0IHx8IGZuT3ZlciApO1xuXHR9XG59ICk7XG5cblxuXG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHRiaW5kOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgbnVsbCwgZGF0YSwgZm4gKTtcblx0fSxcblx0dW5iaW5kOiBmdW5jdGlvbiggdHlwZXMsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9mZiggdHlwZXMsIG51bGwsIGZuICk7XG5cdH0sXG5cblx0ZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGZuICkge1xuXG5cdFx0Ly8gKCBuYW1lc3BhY2UgKSBvciAoIHNlbGVjdG9yLCB0eXBlcyBbLCBmbl0gKVxuXHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID9cblx0XHRcdHRoaXMub2ZmKCBzZWxlY3RvciwgXCIqKlwiICkgOlxuXHRcdFx0dGhpcy5vZmYoIHR5cGVzLCBzZWxlY3RvciB8fCBcIioqXCIsIGZuICk7XG5cdH1cbn0gKTtcblxuLy8gQmluZCBhIGZ1bmN0aW9uIHRvIGEgY29udGV4dCwgb3B0aW9uYWxseSBwYXJ0aWFsbHkgYXBwbHlpbmcgYW55XG4vLyBhcmd1bWVudHMuXG4vLyBqUXVlcnkucHJveHkgaXMgZGVwcmVjYXRlZCB0byBwcm9tb3RlIHN0YW5kYXJkcyAoc3BlY2lmaWNhbGx5IEZ1bmN0aW9uI2JpbmQpXG4vLyBIb3dldmVyLCBpdCBpcyBub3Qgc2xhdGVkIGZvciByZW1vdmFsIGFueSB0aW1lIHNvb25cbmpRdWVyeS5wcm94eSA9IGZ1bmN0aW9uKCBmbiwgY29udGV4dCApIHtcblx0dmFyIHRtcCwgYXJncywgcHJveHk7XG5cblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHR0bXAgPSBmblsgY29udGV4dCBdO1xuXHRcdGNvbnRleHQgPSBmbjtcblx0XHRmbiA9IHRtcDtcblx0fVxuXG5cdC8vIFF1aWNrIGNoZWNrIHRvIGRldGVybWluZSBpZiB0YXJnZXQgaXMgY2FsbGFibGUsIGluIHRoZSBzcGVjXG5cdC8vIHRoaXMgdGhyb3dzIGEgVHlwZUVycm9yLCBidXQgd2Ugd2lsbCBqdXN0IHJldHVybiB1bmRlZmluZWQuXG5cdGlmICggIWlzRnVuY3Rpb24oIGZuICkgKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8vIFNpbXVsYXRlZCBiaW5kXG5cdGFyZ3MgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMsIDIgKTtcblx0cHJveHkgPSBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZm4uYXBwbHkoIGNvbnRleHQgfHwgdGhpcywgYXJncy5jb25jYXQoIHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApICkgKTtcblx0fTtcblxuXHQvLyBTZXQgdGhlIGd1aWQgb2YgdW5pcXVlIGhhbmRsZXIgdG8gdGhlIHNhbWUgb2Ygb3JpZ2luYWwgaGFuZGxlciwgc28gaXQgY2FuIGJlIHJlbW92ZWRcblx0cHJveHkuZ3VpZCA9IGZuLmd1aWQgPSBmbi5ndWlkIHx8IGpRdWVyeS5ndWlkKys7XG5cblx0cmV0dXJuIHByb3h5O1xufTtcblxualF1ZXJ5LmhvbGRSZWFkeSA9IGZ1bmN0aW9uKCBob2xkICkge1xuXHRpZiAoIGhvbGQgKSB7XG5cdFx0alF1ZXJ5LnJlYWR5V2FpdCsrO1xuXHR9IGVsc2Uge1xuXHRcdGpRdWVyeS5yZWFkeSggdHJ1ZSApO1xuXHR9XG59O1xualF1ZXJ5LmlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xualF1ZXJ5LnBhcnNlSlNPTiA9IEpTT04ucGFyc2U7XG5qUXVlcnkubm9kZU5hbWUgPSBub2RlTmFtZTtcbmpRdWVyeS5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcbmpRdWVyeS5pc1dpbmRvdyA9IGlzV2luZG93O1xualF1ZXJ5LmNhbWVsQ2FzZSA9IGNhbWVsQ2FzZTtcbmpRdWVyeS50eXBlID0gdG9UeXBlO1xuXG5qUXVlcnkubm93ID0gRGF0ZS5ub3c7XG5cbmpRdWVyeS5pc051bWVyaWMgPSBmdW5jdGlvbiggb2JqICkge1xuXG5cdC8vIEFzIG9mIGpRdWVyeSAzLjAsIGlzTnVtZXJpYyBpcyBsaW1pdGVkIHRvXG5cdC8vIHN0cmluZ3MgYW5kIG51bWJlcnMgKHByaW1pdGl2ZXMgb3Igb2JqZWN0cylcblx0Ly8gdGhhdCBjYW4gYmUgY29lcmNlZCB0byBmaW5pdGUgbnVtYmVycyAoZ2gtMjY2Milcblx0dmFyIHR5cGUgPSBqUXVlcnkudHlwZSggb2JqICk7XG5cdHJldHVybiAoIHR5cGUgPT09IFwibnVtYmVyXCIgfHwgdHlwZSA9PT0gXCJzdHJpbmdcIiApICYmXG5cblx0XHQvLyBwYXJzZUZsb2F0IE5hTnMgbnVtZXJpYy1jYXN0IGZhbHNlIHBvc2l0aXZlcyAoXCJcIilcblx0XHQvLyAuLi5idXQgbWlzaW50ZXJwcmV0cyBsZWFkaW5nLW51bWJlciBzdHJpbmdzLCBwYXJ0aWN1bGFybHkgaGV4IGxpdGVyYWxzIChcIjB4Li4uXCIpXG5cdFx0Ly8gc3VidHJhY3Rpb24gZm9yY2VzIGluZmluaXRpZXMgdG8gTmFOXG5cdFx0IWlzTmFOKCBvYmogLSBwYXJzZUZsb2F0KCBvYmogKSApO1xufTtcblxuXG5cblxuLy8gUmVnaXN0ZXIgYXMgYSBuYW1lZCBBTUQgbW9kdWxlLCBzaW5jZSBqUXVlcnkgY2FuIGJlIGNvbmNhdGVuYXRlZCB3aXRoIG90aGVyXG4vLyBmaWxlcyB0aGF0IG1heSB1c2UgZGVmaW5lLCBidXQgbm90IHZpYSBhIHByb3BlciBjb25jYXRlbmF0aW9uIHNjcmlwdCB0aGF0XG4vLyB1bmRlcnN0YW5kcyBhbm9ueW1vdXMgQU1EIG1vZHVsZXMuIEEgbmFtZWQgQU1EIGlzIHNhZmVzdCBhbmQgbW9zdCByb2J1c3Rcbi8vIHdheSB0byByZWdpc3Rlci4gTG93ZXJjYXNlIGpxdWVyeSBpcyB1c2VkIGJlY2F1c2UgQU1EIG1vZHVsZSBuYW1lcyBhcmVcbi8vIGRlcml2ZWQgZnJvbSBmaWxlIG5hbWVzLCBhbmQgalF1ZXJ5IGlzIG5vcm1hbGx5IGRlbGl2ZXJlZCBpbiBhIGxvd2VyY2FzZVxuLy8gZmlsZSBuYW1lLiBEbyB0aGlzIGFmdGVyIGNyZWF0aW5nIHRoZSBnbG9iYWwgc28gdGhhdCBpZiBhbiBBTUQgbW9kdWxlIHdhbnRzXG4vLyB0byBjYWxsIG5vQ29uZmxpY3QgdG8gaGlkZSB0aGlzIHZlcnNpb24gb2YgalF1ZXJ5LCBpdCB3aWxsIHdvcmsuXG5cbi8vIE5vdGUgdGhhdCBmb3IgbWF4aW11bSBwb3J0YWJpbGl0eSwgbGlicmFyaWVzIHRoYXQgYXJlIG5vdCBqUXVlcnkgc2hvdWxkXG4vLyBkZWNsYXJlIHRoZW1zZWx2ZXMgYXMgYW5vbnltb3VzIG1vZHVsZXMsIGFuZCBhdm9pZCBzZXR0aW5nIGEgZ2xvYmFsIGlmIGFuXG4vLyBBTUQgbG9hZGVyIGlzIHByZXNlbnQuIGpRdWVyeSBpcyBhIHNwZWNpYWwgY2FzZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2pyYnVya2UvcmVxdWlyZWpzL3dpa2kvVXBkYXRpbmctZXhpc3RpbmctbGlicmFyaWVzI3dpa2ktYW5vblxuXG5pZiAoIHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kICkge1xuXHRkZWZpbmUoIFwianF1ZXJ5XCIsIFtdLCBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4galF1ZXJ5O1xuXHR9ICk7XG59XG5cblxuXG5cbnZhclxuXG5cdC8vIE1hcCBvdmVyIGpRdWVyeSBpbiBjYXNlIG9mIG92ZXJ3cml0ZVxuXHRfalF1ZXJ5ID0gd2luZG93LmpRdWVyeSxcblxuXHQvLyBNYXAgb3ZlciB0aGUgJCBpbiBjYXNlIG9mIG92ZXJ3cml0ZVxuXHRfJCA9IHdpbmRvdy4kO1xuXG5qUXVlcnkubm9Db25mbGljdCA9IGZ1bmN0aW9uKCBkZWVwICkge1xuXHRpZiAoIHdpbmRvdy4kID09PSBqUXVlcnkgKSB7XG5cdFx0d2luZG93LiQgPSBfJDtcblx0fVxuXG5cdGlmICggZGVlcCAmJiB3aW5kb3cualF1ZXJ5ID09PSBqUXVlcnkgKSB7XG5cdFx0d2luZG93LmpRdWVyeSA9IF9qUXVlcnk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5O1xufTtcblxuLy8gRXhwb3NlIGpRdWVyeSBhbmQgJCBpZGVudGlmaWVycywgZXZlbiBpbiBBTURcbi8vICgjNzEwMiNjb21tZW50OjEwLCBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9wdWxsLzU1Nylcbi8vIGFuZCBDb21tb25KUyBmb3IgYnJvd3NlciBlbXVsYXRvcnMgKCMxMzU2NilcbmlmICggIW5vR2xvYmFsICkge1xuXHR3aW5kb3cualF1ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7XG59XG5cblxuXG5cbnJldHVybiBqUXVlcnk7XG59ICk7XG4iLCIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJrYXRleFwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJrYXRleFwiXSA9IGZhY3RvcnkoKTtcbn0pKCh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdGhpcyksIGZ1bmN0aW9uKCkge1xucmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMSk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIChbXG4vKiAwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuXG4vKioqLyB9KSxcbi8qIDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9zcmMva2F0ZXgubGVzc1xudmFyIGthdGV4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvU291cmNlTG9jYXRpb24uanNcbi8qKlxuICogTGV4aW5nIG9yIHBhcnNpbmcgcG9zaXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgZXJyb3IgcmVwb3J0aW5nLlxuICogVGhpcyBvYmplY3QgaXMgaW1tdXRhYmxlLlxuICovXG52YXIgU291cmNlTG9jYXRpb24gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICAvLyBUaGUgKyBwcmVmaXggaW5kaWNhdGVzIHRoYXQgdGhlc2UgZmllbGRzIGFyZW4ndCB3cml0ZWFibGVcbiAgLy8gTGV4ZXIgaG9sZGluZyB0aGUgaW5wdXQgc3RyaW5nLlxuICAvLyBTdGFydCBvZmZzZXQsIHplcm8tYmFzZWQgaW5jbHVzaXZlLlxuICAvLyBFbmQgb2Zmc2V0LCB6ZXJvLWJhc2VkIGV4Y2x1c2l2ZS5cbiAgZnVuY3Rpb24gU291cmNlTG9jYXRpb24obGV4ZXIsIHN0YXJ0LCBlbmQpIHtcbiAgICB0aGlzLmxleGVyID0gdm9pZCAwO1xuICAgIHRoaXMuc3RhcnQgPSB2b2lkIDA7XG4gICAgdGhpcy5lbmQgPSB2b2lkIDA7XG4gICAgdGhpcy5sZXhlciA9IGxleGVyO1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuICAvKipcbiAgICogTWVyZ2VzIHR3byBgU291cmNlTG9jYXRpb25gcyBmcm9tIGxvY2F0aW9uIHByb3ZpZGVycywgZ2l2ZW4gdGhleSBhcmVcbiAgICogcHJvdmlkZWQgaW4gb3JkZXIgb2YgYXBwZWFyYW5jZS5cbiAgICogLSBSZXR1cm5zIHRoZSBmaXJzdCBvbmUncyBsb2NhdGlvbiBpZiBvbmx5IHRoZSBmaXJzdCBpcyBwcm92aWRlZC5cbiAgICogLSBSZXR1cm5zIGEgbWVyZ2VkIHJhbmdlIG9mIHRoZSBmaXJzdCBhbmQgdGhlIGxhc3QgaWYgYm90aCBhcmUgcHJvdmlkZWRcbiAgICogICBhbmQgdGhlaXIgbGV4ZXJzIG1hdGNoLlxuICAgKiAtIE90aGVyd2lzZSwgcmV0dXJucyBudWxsLlxuICAgKi9cblxuXG4gIFNvdXJjZUxvY2F0aW9uLnJhbmdlID0gZnVuY3Rpb24gcmFuZ2UoZmlyc3QsIHNlY29uZCkge1xuICAgIGlmICghc2Vjb25kKSB7XG4gICAgICByZXR1cm4gZmlyc3QgJiYgZmlyc3QubG9jO1xuICAgIH0gZWxzZSBpZiAoIWZpcnN0IHx8ICFmaXJzdC5sb2MgfHwgIXNlY29uZC5sb2MgfHwgZmlyc3QubG9jLmxleGVyICE9PSBzZWNvbmQubG9jLmxleGVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBTb3VyY2VMb2NhdGlvbihmaXJzdC5sb2MubGV4ZXIsIGZpcnN0LmxvYy5zdGFydCwgc2Vjb25kLmxvYy5lbmQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gU291cmNlTG9jYXRpb247XG59KCk7XG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvVG9rZW4uanNcblxuLyoqXG4gKiBJbnRlcmZhY2UgcmVxdWlyZWQgdG8gYnJlYWsgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuIFRva2VuLCBMZXhlciwgYW5kXG4gKiBQYXJzZUVycm9yLlxuICovXG5cbi8qKlxuICogVGhlIHJlc3VsdGluZyB0b2tlbiByZXR1cm5lZCBmcm9tIGBsZXhgLlxuICpcbiAqIEl0IGNvbnNpc3RzIG9mIHRoZSB0b2tlbiB0ZXh0IHBsdXMgc29tZSBwb3NpdGlvbiBpbmZvcm1hdGlvbi5cbiAqIFRoZSBwb3NpdGlvbiBpbmZvcm1hdGlvbiBpcyBlc3NlbnRpYWxseSBhIHJhbmdlIGluIGFuIGlucHV0IHN0cmluZyxcbiAqIGJ1dCBpbnN0ZWFkIG9mIHJlZmVyZW5jaW5nIHRoZSBiYXJlIGlucHV0IHN0cmluZywgd2UgcmVmZXIgdG8gdGhlIGxleGVyLlxuICogVGhhdCB3YXkgaXQgaXMgcG9zc2libGUgdG8gYXR0YWNoIGV4dHJhIG1ldGFkYXRhIHRvIHRoZSBpbnB1dCBzdHJpbmcsXG4gKiBsaWtlIGZvciBleGFtcGxlIGEgZmlsZSBuYW1lIG9yIHNpbWlsYXIuXG4gKlxuICogVGhlIHBvc2l0aW9uIGluZm9ybWF0aW9uIGlzIG9wdGlvbmFsLCBzbyBpdCBpcyBPSyB0byBjb25zdHJ1Y3Qgc3ludGhldGljXG4gKiB0b2tlbnMgaWYgYXBwcm9wcmlhdGUuIE5vdCBwcm92aWRpbmcgYXZhaWxhYmxlIHBvc2l0aW9uIGluZm9ybWF0aW9uIG1heVxuICogbGVhZCB0byBkZWdyYWRlZCBlcnJvciByZXBvcnRpbmcsIHRob3VnaC5cbiAqL1xudmFyIFRva2VuX1Rva2VuID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVG9rZW4odGV4dCwgLy8gdGhlIHRleHQgb2YgdGhpcyB0b2tlblxuICBsb2MpIHtcbiAgICB0aGlzLnRleHQgPSB2b2lkIDA7XG4gICAgdGhpcy5sb2MgPSB2b2lkIDA7XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICB0aGlzLmxvYyA9IGxvYztcbiAgfVxuICAvKipcbiAgICogR2l2ZW4gYSBwYWlyIG9mIHRva2VucyAodGhpcyBhbmQgZW5kVG9rZW4pLCBjb21wdXRlIGEgYFRva2VuYCBlbmNvbXBhc3NpbmdcbiAgICogdGhlIHdob2xlIGlucHV0IHJhbmdlIGVuY2xvc2VkIGJ5IHRoZXNlIHR3by5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gVG9rZW4ucHJvdG90eXBlO1xuXG4gIF9wcm90by5yYW5nZSA9IGZ1bmN0aW9uIHJhbmdlKGVuZFRva2VuLCAvLyBsYXN0IHRva2VuIG9mIHRoZSByYW5nZSwgaW5jbHVzaXZlXG4gIHRleHQpIC8vIHRoZSB0ZXh0IG9mIHRoZSBuZXdseSBjb25zdHJ1Y3RlZCB0b2tlblxuICB7XG4gICAgcmV0dXJuIG5ldyBUb2tlbih0ZXh0LCBTb3VyY2VMb2NhdGlvbi5yYW5nZSh0aGlzLCBlbmRUb2tlbikpO1xuICB9O1xuXG4gIHJldHVybiBUb2tlbjtcbn0oKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1BhcnNlRXJyb3IuanNcblxuXG4vKipcbiAqIFRoaXMgaXMgdGhlIFBhcnNlRXJyb3IgY2xhc3MsIHdoaWNoIGlzIHRoZSBtYWluIGVycm9yIHRocm93biBieSBLYVRlWFxuICogZnVuY3Rpb25zIHdoZW4gc29tZXRoaW5nIGhhcyBnb25lIHdyb25nLiBUaGlzIGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggaW50ZXJuYWxcbiAqIGVycm9ycyBmcm9tIGVycm9ycyBpbiB0aGUgZXhwcmVzc2lvbiB0aGF0IHRoZSB1c2VyIHByb3ZpZGVkLlxuICpcbiAqIElmIHBvc3NpYmxlLCBhIGNhbGxlciBzaG91bGQgcHJvdmlkZSBhIFRva2VuIG9yIFBhcnNlTm9kZSB3aXRoIGluZm9ybWF0aW9uXG4gKiBhYm91dCB3aGVyZSBpbiB0aGUgc291cmNlIHN0cmluZyB0aGUgcHJvYmxlbSBvY2N1cnJlZC5cbiAqL1xudmFyIFBhcnNlRXJyb3IgPSAvLyBFcnJvciBwb3NpdGlvbiBiYXNlZCBvbiBwYXNzZWQtaW4gVG9rZW4gb3IgUGFyc2VOb2RlLlxuZnVuY3Rpb24gUGFyc2VFcnJvcihtZXNzYWdlLCAvLyBUaGUgZXJyb3IgbWVzc2FnZVxudG9rZW4pIC8vIEFuIG9iamVjdCBwcm92aWRpbmcgcG9zaXRpb24gaW5mb3JtYXRpb25cbntcbiAgdGhpcy5wb3NpdGlvbiA9IHZvaWQgMDtcbiAgdmFyIGVycm9yID0gXCJLYVRlWCBwYXJzZSBlcnJvcjogXCIgKyBtZXNzYWdlO1xuICB2YXIgc3RhcnQ7XG4gIHZhciBsb2MgPSB0b2tlbiAmJiB0b2tlbi5sb2M7XG5cbiAgaWYgKGxvYyAmJiBsb2Muc3RhcnQgPD0gbG9jLmVuZCkge1xuICAgIC8vIElmIHdlIGhhdmUgdGhlIGlucHV0IGFuZCBhIHBvc2l0aW9uLCBtYWtlIHRoZSBlcnJvciBhIGJpdCBmYW5jaWVyXG4gICAgLy8gR2V0IHRoZSBpbnB1dFxuICAgIHZhciBpbnB1dCA9IGxvYy5sZXhlci5pbnB1dDsgLy8gUHJlcGVuZCBzb21lIGluZm9ybWF0aW9uXG5cbiAgICBzdGFydCA9IGxvYy5zdGFydDtcbiAgICB2YXIgZW5kID0gbG9jLmVuZDtcblxuICAgIGlmIChzdGFydCA9PT0gaW5wdXQubGVuZ3RoKSB7XG4gICAgICBlcnJvciArPSBcIiBhdCBlbmQgb2YgaW5wdXQ6IFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvciArPSBcIiBhdCBwb3NpdGlvbiBcIiArIChzdGFydCArIDEpICsgXCI6IFwiO1xuICAgIH0gLy8gVW5kZXJsaW5lIHRva2VuIGluIHF1ZXN0aW9uIHVzaW5nIGNvbWJpbmluZyB1bmRlcnNjb3Jlc1xuXG5cbiAgICB2YXIgdW5kZXJsaW5lZCA9IGlucHV0LnNsaWNlKHN0YXJ0LCBlbmQpLnJlcGxhY2UoL1teXS9nLCBcIiQmXFx1MDMzMlwiKTsgLy8gRXh0cmFjdCBzb21lIGNvbnRleHQgZnJvbSB0aGUgaW5wdXQgYW5kIGFkZCBpdCB0byB0aGUgZXJyb3JcblxuICAgIHZhciBsZWZ0O1xuXG4gICAgaWYgKHN0YXJ0ID4gMTUpIHtcbiAgICAgIGxlZnQgPSBcIuKAplwiICsgaW5wdXQuc2xpY2Uoc3RhcnQgLSAxNSwgc3RhcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZWZ0ID0gaW5wdXQuc2xpY2UoMCwgc3RhcnQpO1xuICAgIH1cblxuICAgIHZhciByaWdodDtcblxuICAgIGlmIChlbmQgKyAxNSA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgcmlnaHQgPSBpbnB1dC5zbGljZShlbmQsIGVuZCArIDE1KSArIFwi4oCmXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJpZ2h0ID0gaW5wdXQuc2xpY2UoZW5kKTtcbiAgICB9XG5cbiAgICBlcnJvciArPSBsZWZ0ICsgdW5kZXJsaW5lZCArIHJpZ2h0O1xuICB9IC8vIFNvbWUgaGFja2VyeSB0byBtYWtlIFBhcnNlRXJyb3IgYSBwcm90b3R5cGUgb2YgRXJyb3JcbiAgLy8gU2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzg0NjA3NTNcblxuXG4gIHZhciBzZWxmID0gbmV3IEVycm9yKGVycm9yKTtcbiAgc2VsZi5uYW1lID0gXCJQYXJzZUVycm9yXCI7IC8vICRGbG93Rml4TWVcblxuICBzZWxmLl9fcHJvdG9fXyA9IFBhcnNlRXJyb3IucHJvdG90eXBlOyAvLyAkRmxvd0ZpeE1lXG5cbiAgc2VsZi5wb3NpdGlvbiA9IHN0YXJ0O1xuICByZXR1cm4gc2VsZjtcbn07IC8vICRGbG93Rml4TWUgTW9yZSBoYWNrZXJ5XG5cblxuUGFyc2VFcnJvci5wcm90b3R5cGUuX19wcm90b19fID0gRXJyb3IucHJvdG90eXBlO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX1BhcnNlRXJyb3IgPSAoUGFyc2VFcnJvcik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy91dGlscy5qc1xuLyoqXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgYSBsaXN0IG9mIHV0aWxpdHkgZnVuY3Rpb25zIHdoaWNoIGFyZSB1c2VmdWwgaW4gb3RoZXJcbiAqIGZpbGVzLlxuICovXG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgYW4gZWxlbWVudCBpcyBjb250YWluZWQgaW4gYSBsaXN0XG4gKi9cbnZhciBjb250YWlucyA9IGZ1bmN0aW9uIGNvbnRhaW5zKGxpc3QsIGVsZW0pIHtcbiAgcmV0dXJuIGxpc3QuaW5kZXhPZihlbGVtKSAhPT0gLTE7XG59O1xuLyoqXG4gKiBQcm92aWRlIGEgZGVmYXVsdCB2YWx1ZSBpZiBhIHNldHRpbmcgaXMgdW5kZWZpbmVkXG4gKiBOT1RFOiBDb3VsZG4ndCB1c2UgYFRgIGFzIHRoZSBvdXRwdXQgdHlwZSBkdWUgdG8gZmFjZWJvb2svZmxvdyM1MDIyLlxuICovXG5cblxudmFyIGRlZmx0ID0gZnVuY3Rpb24gZGVmbHQoc2V0dGluZywgZGVmYXVsdElmVW5kZWZpbmVkKSB7XG4gIHJldHVybiBzZXR0aW5nID09PSB1bmRlZmluZWQgPyBkZWZhdWx0SWZVbmRlZmluZWQgOiBzZXR0aW5nO1xufTsgLy8gaHlwaGVuYXRlIGFuZCBlc2NhcGUgYWRhcHRlZCBmcm9tIEZhY2Vib29rJ3MgUmVhY3QgdW5kZXIgQXBhY2hlIDIgbGljZW5zZVxuXG5cbnZhciB1cHBlcmNhc2UgPSAvKFtBLVpdKS9nO1xuXG52YXIgaHlwaGVuYXRlID0gZnVuY3Rpb24gaHlwaGVuYXRlKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UodXBwZXJjYXNlLCBcIi0kMVwiKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIEVTQ0FQRV9MT09LVVAgPSB7XG4gIFwiJlwiOiBcIiZhbXA7XCIsXG4gIFwiPlwiOiBcIiZndDtcIixcbiAgXCI8XCI6IFwiJmx0O1wiLFxuICBcIlxcXCJcIjogXCImcXVvdDtcIixcbiAgXCInXCI6IFwiJiN4Mjc7XCJcbn07XG52YXIgRVNDQVBFX1JFR0VYID0gL1smPjxcIiddL2c7XG4vKipcbiAqIEVzY2FwZXMgdGV4dCB0byBwcmV2ZW50IHNjcmlwdGluZyBhdHRhY2tzLlxuICovXG5cbmZ1bmN0aW9uIHV0aWxzX2VzY2FwZSh0ZXh0KSB7XG4gIHJldHVybiBTdHJpbmcodGV4dCkucmVwbGFjZShFU0NBUEVfUkVHRVgsIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIHJldHVybiBFU0NBUEVfTE9PS1VQW21hdGNoXTtcbiAgfSk7XG59XG4vKipcbiAqIFNvbWV0aW1lcyB3ZSB3YW50IHRvIHB1bGwgb3V0IHRoZSBpbm5lcm1vc3QgZWxlbWVudCBvZiBhIGdyb3VwLiBJbiBtb3N0XG4gKiBjYXNlcywgdGhpcyB3aWxsIGp1c3QgYmUgdGhlIGdyb3VwIGl0c2VsZiwgYnV0IHdoZW4gb3JkZ3JvdXBzIGFuZCBjb2xvcnMgaGF2ZVxuICogYSBzaW5nbGUgZWxlbWVudCwgd2Ugd2FudCB0byBwdWxsIHRoYXQgb3V0LlxuICovXG5cblxudmFyIGdldEJhc2VFbGVtID0gZnVuY3Rpb24gZ2V0QmFzZUVsZW0oZ3JvdXApIHtcbiAgaWYgKGdyb3VwLnR5cGUgPT09IFwib3JkZ3JvdXBcIikge1xuICAgIGlmIChncm91cC5ib2R5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGdldEJhc2VFbGVtKGdyb3VwLmJvZHlbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGdyb3VwLnR5cGUgPT09IFwiY29sb3JcIikge1xuICAgIGlmIChncm91cC5ib2R5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGdldEJhc2VFbGVtKGdyb3VwLmJvZHlbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGdyb3VwLnR5cGUgPT09IFwiZm9udFwiKSB7XG4gICAgcmV0dXJuIGdldEJhc2VFbGVtKGdyb3VwLmJvZHkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBncm91cDtcbiAgfVxufTtcbi8qKlxuICogVGVYYm9vayBhbGdvcml0aG1zIG9mdGVuIHJlZmVyZW5jZSBcImNoYXJhY3RlciBib3hlc1wiLCB3aGljaCBhcmUgc2ltcGx5IGdyb3Vwc1xuICogd2l0aCBhIHNpbmdsZSBjaGFyYWN0ZXIgaW4gdGhlbS4gVG8gZGVjaWRlIGlmIHNvbWV0aGluZyBpcyBhIGNoYXJhY3RlciBib3gsXG4gKiB3ZSBmaW5kIGl0cyBpbm5lcm1vc3QgZ3JvdXAsIGFuZCBzZWUgaWYgaXQgaXMgYSBzaW5nbGUgY2hhcmFjdGVyLlxuICovXG5cblxudmFyIHV0aWxzX2lzQ2hhcmFjdGVyQm94ID0gZnVuY3Rpb24gaXNDaGFyYWN0ZXJCb3goZ3JvdXApIHtcbiAgdmFyIGJhc2VFbGVtID0gZ2V0QmFzZUVsZW0oZ3JvdXApOyAvLyBUaGVzZSBhcmUgYWxsIHRoZXkgdHlwZXMgb2YgZ3JvdXBzIHdoaWNoIGhvbGQgc2luZ2xlIGNoYXJhY3RlcnNcblxuICByZXR1cm4gYmFzZUVsZW0udHlwZSA9PT0gXCJtYXRob3JkXCIgfHwgYmFzZUVsZW0udHlwZSA9PT0gXCJ0ZXh0b3JkXCIgfHwgYmFzZUVsZW0udHlwZSA9PT0gXCJhdG9tXCI7XG59O1xuXG52YXIgYXNzZXJ0ID0gZnVuY3Rpb24gYXNzZXJ0KHZhbHVlKSB7XG4gIGlmICghdmFsdWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIG5vbi1udWxsLCBidXQgZ290ICcgKyBTdHJpbmcodmFsdWUpKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG4vKipcbiAqIFJldHVybiB0aGUgcHJvdG9jb2wgb2YgYSBVUkwsIG9yIFwiX3JlbGF0aXZlXCIgaWYgdGhlIFVSTCBkb2VzIG5vdCBzcGVjaWZ5IGFcbiAqIHByb3RvY29sIChhbmQgdGh1cyBpcyByZWxhdGl2ZSkuXG4gKi9cblxudmFyIHByb3RvY29sRnJvbVVybCA9IGZ1bmN0aW9uIHByb3RvY29sRnJvbVVybCh1cmwpIHtcbiAgdmFyIHByb3RvY29sID0gL15cXHMqKFteXFxcXC8jXSo/KSg/Ojp8JiMwKjU4fCYjeDAqM2EpL2kuZXhlYyh1cmwpO1xuICByZXR1cm4gcHJvdG9jb2wgIT0gbnVsbCA/IHByb3RvY29sWzFdIDogXCJfcmVsYXRpdmVcIjtcbn07XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB1dGlscyA9ICh7XG4gIGNvbnRhaW5zOiBjb250YWlucyxcbiAgZGVmbHQ6IGRlZmx0LFxuICBlc2NhcGU6IHV0aWxzX2VzY2FwZSxcbiAgaHlwaGVuYXRlOiBoeXBoZW5hdGUsXG4gIGdldEJhc2VFbGVtOiBnZXRCYXNlRWxlbSxcbiAgaXNDaGFyYWN0ZXJCb3g6IHV0aWxzX2lzQ2hhcmFjdGVyQm94LFxuICBwcm90b2NvbEZyb21Vcmw6IHByb3RvY29sRnJvbVVybFxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9TZXR0aW5ncy5qc1xuLyogZXNsaW50IG5vLWNvbnNvbGU6MCAqL1xuXG4vKipcbiAqIFRoaXMgaXMgYSBtb2R1bGUgZm9yIHN0b3Jpbmcgc2V0dGluZ3MgcGFzc2VkIGludG8gS2FUZVguIEl0IGNvcnJlY3RseSBoYW5kbGVzXG4gKiBkZWZhdWx0IHNldHRpbmdzLlxuICovXG5cblxuXG5cbi8qKlxuICogVGhlIG1haW4gU2V0dGluZ3Mgb2JqZWN0XG4gKlxuICogVGhlIGN1cnJlbnQgb3B0aW9ucyBzdG9yZWQgYXJlOlxuICogIC0gZGlzcGxheU1vZGU6IFdoZXRoZXIgdGhlIGV4cHJlc3Npb24gc2hvdWxkIGJlIHR5cGVzZXQgYXMgaW5saW5lIG1hdGhcbiAqICAgICAgICAgICAgICAgICAoZmFsc2UsIHRoZSBkZWZhdWx0KSwgbWVhbmluZyB0aGF0IHRoZSBtYXRoIHN0YXJ0cyBpblxuICogICAgICAgICAgICAgICAgIFxcdGV4dHN0eWxlIGFuZCBpcyBwbGFjZWQgaW4gYW4gaW5saW5lLWJsb2NrKTsgb3IgYXMgZGlzcGxheVxuICogICAgICAgICAgICAgICAgIG1hdGggKHRydWUpLCBtZWFuaW5nIHRoYXQgdGhlIG1hdGggc3RhcnRzIGluIFxcZGlzcGxheXN0eWxlXG4gKiAgICAgICAgICAgICAgICAgYW5kIGlzIHBsYWNlZCBpbiBhIGJsb2NrIHdpdGggdmVydGljYWwgbWFyZ2luLlxuICovXG52YXIgU2V0dGluZ3NfU2V0dGluZ3MgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTZXR0aW5ncyhvcHRpb25zKSB7XG4gICAgdGhpcy5kaXNwbGF5TW9kZSA9IHZvaWQgMDtcbiAgICB0aGlzLm91dHB1dCA9IHZvaWQgMDtcbiAgICB0aGlzLmxlcW5vID0gdm9pZCAwO1xuICAgIHRoaXMuZmxlcW4gPSB2b2lkIDA7XG4gICAgdGhpcy50aHJvd09uRXJyb3IgPSB2b2lkIDA7XG4gICAgdGhpcy5lcnJvckNvbG9yID0gdm9pZCAwO1xuICAgIHRoaXMubWFjcm9zID0gdm9pZCAwO1xuICAgIHRoaXMubWluUnVsZVRoaWNrbmVzcyA9IHZvaWQgMDtcbiAgICB0aGlzLmNvbG9ySXNUZXh0Q29sb3IgPSB2b2lkIDA7XG4gICAgdGhpcy5zdHJpY3QgPSB2b2lkIDA7XG4gICAgdGhpcy50cnVzdCA9IHZvaWQgMDtcbiAgICB0aGlzLm1heFNpemUgPSB2b2lkIDA7XG4gICAgdGhpcy5tYXhFeHBhbmQgPSB2b2lkIDA7XG4gICAgLy8gYWxsb3cgbnVsbCBvcHRpb25zXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdGhpcy5kaXNwbGF5TW9kZSA9IHV0aWxzLmRlZmx0KG9wdGlvbnMuZGlzcGxheU1vZGUsIGZhbHNlKTtcbiAgICB0aGlzLm91dHB1dCA9IHV0aWxzLmRlZmx0KG9wdGlvbnMub3V0cHV0LCBcImh0bWxBbmRNYXRobWxcIik7XG4gICAgdGhpcy5sZXFubyA9IHV0aWxzLmRlZmx0KG9wdGlvbnMubGVxbm8sIGZhbHNlKTtcbiAgICB0aGlzLmZsZXFuID0gdXRpbHMuZGVmbHQob3B0aW9ucy5mbGVxbiwgZmFsc2UpO1xuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdXRpbHMuZGVmbHQob3B0aW9ucy50aHJvd09uRXJyb3IsIHRydWUpO1xuICAgIHRoaXMuZXJyb3JDb2xvciA9IHV0aWxzLmRlZmx0KG9wdGlvbnMuZXJyb3JDb2xvciwgXCIjY2MwMDAwXCIpO1xuICAgIHRoaXMubWFjcm9zID0gb3B0aW9ucy5tYWNyb3MgfHwge307XG4gICAgdGhpcy5taW5SdWxlVGhpY2tuZXNzID0gTWF0aC5tYXgoMCwgdXRpbHMuZGVmbHQob3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzLCAwKSk7XG4gICAgdGhpcy5jb2xvcklzVGV4dENvbG9yID0gdXRpbHMuZGVmbHQob3B0aW9ucy5jb2xvcklzVGV4dENvbG9yLCBmYWxzZSk7XG4gICAgdGhpcy5zdHJpY3QgPSB1dGlscy5kZWZsdChvcHRpb25zLnN0cmljdCwgXCJ3YXJuXCIpO1xuICAgIHRoaXMudHJ1c3QgPSB1dGlscy5kZWZsdChvcHRpb25zLnRydXN0LCBmYWxzZSk7XG4gICAgdGhpcy5tYXhTaXplID0gTWF0aC5tYXgoMCwgdXRpbHMuZGVmbHQob3B0aW9ucy5tYXhTaXplLCBJbmZpbml0eSkpO1xuICAgIHRoaXMubWF4RXhwYW5kID0gTWF0aC5tYXgoMCwgdXRpbHMuZGVmbHQob3B0aW9ucy5tYXhFeHBhbmQsIDEwMDApKTtcbiAgfVxuICAvKipcbiAgICogUmVwb3J0IG5vbnN0cmljdCAobm9uLUxhVGVYLWNvbXBhdGlibGUpIGlucHV0LlxuICAgKiBDYW4gc2FmZWx5IG5vdCBiZSBjYWxsZWQgaWYgYHRoaXMuc3RyaWN0YCBpcyBmYWxzZSBpbiBKYXZhU2NyaXB0LlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBTZXR0aW5ncy5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnJlcG9ydE5vbnN0cmljdCA9IGZ1bmN0aW9uIHJlcG9ydE5vbnN0cmljdChlcnJvckNvZGUsIGVycm9yTXNnLCB0b2tlbikge1xuICAgIHZhciBzdHJpY3QgPSB0aGlzLnN0cmljdDtcblxuICAgIGlmICh0eXBlb2Ygc3RyaWN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIC8vIEFsbG93IHJldHVybiB2YWx1ZSBvZiBzdHJpY3QgZnVuY3Rpb24gdG8gYmUgYm9vbGVhbiBvciBzdHJpbmdcbiAgICAgIC8vIChvciBudWxsL3VuZGVmaW5lZCwgbWVhbmluZyBubyBmdXJ0aGVyIHByb2Nlc3NpbmcpLlxuICAgICAgc3RyaWN0ID0gc3RyaWN0KGVycm9yQ29kZSwgZXJyb3JNc2csIHRva2VuKTtcbiAgICB9XG5cbiAgICBpZiAoIXN0cmljdCB8fCBzdHJpY3QgPT09IFwiaWdub3JlXCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKHN0cmljdCA9PT0gdHJ1ZSB8fCBzdHJpY3QgPT09IFwiZXJyb3JcIikge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiTGFUZVgtaW5jb21wYXRpYmxlIGlucHV0IGFuZCBzdHJpY3QgbW9kZSBpcyBzZXQgdG8gJ2Vycm9yJzogXCIgKyAoZXJyb3JNc2cgKyBcIiBbXCIgKyBlcnJvckNvZGUgKyBcIl1cIiksIHRva2VuKTtcbiAgICB9IGVsc2UgaWYgKHN0cmljdCA9PT0gXCJ3YXJuXCIpIHtcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvICd3YXJuJzogXCIgKyAoZXJyb3JNc2cgKyBcIiBbXCIgKyBlcnJvckNvZGUgKyBcIl1cIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB3b24ndCBoYXBwZW4gaW4gdHlwZS1zYWZlIGNvZGVcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvIFwiICsgKFwidW5yZWNvZ25pemVkICdcIiArIHN0cmljdCArIFwiJzogXCIgKyBlcnJvck1zZyArIFwiIFtcIiArIGVycm9yQ29kZSArIFwiXVwiKSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRvIGFwcGx5IHN0cmljdCAoTGFUZVgtYWRoZXJpbmcpIGJlaGF2aW9yIGZvciB1bnVzdWFsXG4gICAqIGlucHV0IChsaWtlIGBcXFxcYCkuICBVbmxpa2UgYG5vbnN0cmljdGAsIHdpbGwgbm90IHRocm93IGFuIGVycm9yO1xuICAgKiBpbnN0ZWFkLCBcImVycm9yXCIgdHJhbnNsYXRlcyB0byBhIHJldHVybiB2YWx1ZSBvZiBgdHJ1ZWAsIHdoaWxlIFwiaWdub3JlXCJcbiAgICogdHJhbnNsYXRlcyB0byBhIHJldHVybiB2YWx1ZSBvZiBgZmFsc2VgLiAgTWF5IHN0aWxsIHByaW50IGEgd2FybmluZzpcbiAgICogXCJ3YXJuXCIgcHJpbnRzIGEgd2FybmluZyBhbmQgcmV0dXJucyBgZmFsc2VgLlxuICAgKiBUaGlzIGlzIGZvciB0aGUgc2Vjb25kIGNhdGVnb3J5IG9mIGBlcnJvckNvZGVgcyBsaXN0ZWQgaW4gdGhlIFJFQURNRS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8udXNlU3RyaWN0QmVoYXZpb3IgPSBmdW5jdGlvbiB1c2VTdHJpY3RCZWhhdmlvcihlcnJvckNvZGUsIGVycm9yTXNnLCB0b2tlbikge1xuICAgIHZhciBzdHJpY3QgPSB0aGlzLnN0cmljdDtcblxuICAgIGlmICh0eXBlb2Ygc3RyaWN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIC8vIEFsbG93IHJldHVybiB2YWx1ZSBvZiBzdHJpY3QgZnVuY3Rpb24gdG8gYmUgYm9vbGVhbiBvciBzdHJpbmdcbiAgICAgIC8vIChvciBudWxsL3VuZGVmaW5lZCwgbWVhbmluZyBubyBmdXJ0aGVyIHByb2Nlc3NpbmcpLlxuICAgICAgLy8gQnV0IGNhdGNoIGFueSBleGNlcHRpb25zIHRocm93biBieSBmdW5jdGlvbiwgdHJlYXRpbmcgdGhlbVxuICAgICAgLy8gbGlrZSBcImVycm9yXCIuXG4gICAgICB0cnkge1xuICAgICAgICBzdHJpY3QgPSBzdHJpY3QoZXJyb3JDb2RlLCBlcnJvck1zZywgdG9rZW4pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc3RyaWN0ID0gXCJlcnJvclwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghc3RyaWN0IHx8IHN0cmljdCA9PT0gXCJpZ25vcmVcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoc3RyaWN0ID09PSB0cnVlIHx8IHN0cmljdCA9PT0gXCJlcnJvclwiKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHN0cmljdCA9PT0gXCJ3YXJuXCIpIHtcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvICd3YXJuJzogXCIgKyAoZXJyb3JNc2cgKyBcIiBbXCIgKyBlcnJvckNvZGUgKyBcIl1cIikpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB3b24ndCBoYXBwZW4gaW4gdHlwZS1zYWZlIGNvZGVcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvIFwiICsgKFwidW5yZWNvZ25pemVkICdcIiArIHN0cmljdCArIFwiJzogXCIgKyBlcnJvck1zZyArIFwiIFtcIiArIGVycm9yQ29kZSArIFwiXVwiKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRvIHRlc3QgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIGlucHV0LCBhbmQgcmV0dXJuXG4gICAqIGB0cnVlYCAodHJ1c3RlZCkgb3IgYGZhbHNlYCAodW50cnVzdGVkKS4gIFRoZSBzb2xlIGFyZ3VtZW50IGBjb250ZXh0YFxuICAgKiBzaG91bGQgYmUgYW4gb2JqZWN0IHdpdGggYGNvbW1hbmRgIGZpZWxkIHNwZWNpZnlpbmcgdGhlIHJlbGV2YW50IExhVGVYXG4gICAqIGNvbW1hbmQgKGFzIGEgc3RyaW5nIHN0YXJ0aW5nIHdpdGggYFxcYCksIGFuZCBhbnkgb3RoZXIgYXJndW1lbnRzLCBldGMuXG4gICAqIElmIGBjb250ZXh0YCBoYXMgYSBgdXJsYCBmaWVsZCwgYSBgcHJvdG9jb2xgIGZpZWxkIHdpbGwgYXV0b21hdGljYWxseVxuICAgKiBnZXQgYWRkZWQgYnkgdGhpcyBmdW5jdGlvbiAoY2hhbmdpbmcgdGhlIHNwZWNpZmllZCBvYmplY3QpLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5pc1RydXN0ZWQgPSBmdW5jdGlvbiBpc1RydXN0ZWQoY29udGV4dCkge1xuICAgIGlmIChjb250ZXh0LnVybCAmJiAhY29udGV4dC5wcm90b2NvbCkge1xuICAgICAgY29udGV4dC5wcm90b2NvbCA9IHV0aWxzLnByb3RvY29sRnJvbVVybChjb250ZXh0LnVybCk7XG4gICAgfVxuXG4gICAgdmFyIHRydXN0ID0gdHlwZW9mIHRoaXMudHJ1c3QgPT09IFwiZnVuY3Rpb25cIiA/IHRoaXMudHJ1c3QoY29udGV4dCkgOiB0aGlzLnRydXN0O1xuICAgIHJldHVybiBCb29sZWFuKHRydXN0KTtcbiAgfTtcblxuICByZXR1cm4gU2V0dGluZ3M7XG59KCk7XG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvU3R5bGUuanNcbi8qKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFuZCBjbGFzc2VzIGZvciB0aGUgdmFyaW91cyBraW5kcyBvZiBzdHlsZXNcbiAqIHVzZWQgaW4gVGVYLiBJdCBwcm92aWRlcyBhIGdlbmVyaWMgYFN0eWxlYCBjbGFzcywgd2hpY2ggaG9sZHMgaW5mb3JtYXRpb25cbiAqIGFib3V0IGEgc3BlY2lmaWMgc3R5bGUuIEl0IHRoZW4gcHJvdmlkZXMgaW5zdGFuY2VzIG9mIGFsbCB0aGUgZGlmZmVyZW50IGtpbmRzXG4gKiBvZiBzdHlsZXMgcG9zc2libGUsIGFuZCBwcm92aWRlcyBmdW5jdGlvbnMgdG8gbW92ZSBiZXR3ZWVuIHRoZW0gYW5kIGdldFxuICogaW5mb3JtYXRpb24gYWJvdXQgdGhlbS5cbiAqL1xuXG4vKipcbiAqIFRoZSBtYWluIHN0eWxlIGNsYXNzLiBDb250YWlucyBhIHVuaXF1ZSBpZCBmb3IgdGhlIHN0eWxlLCBhIHNpemUgKHdoaWNoIGlzXG4gKiB0aGUgc2FtZSBmb3IgY3JhbXBlZCBhbmQgdW5jcmFtcGVkIHZlcnNpb24gb2YgYSBzdHlsZSksIGFuZCBhIGNyYW1wZWQgZmxhZy5cbiAqL1xudmFyIFN0eWxlID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3R5bGUoaWQsIHNpemUsIGNyYW1wZWQpIHtcbiAgICB0aGlzLmlkID0gdm9pZCAwO1xuICAgIHRoaXMuc2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLmNyYW1wZWQgPSB2b2lkIDA7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG4gICAgdGhpcy5jcmFtcGVkID0gY3JhbXBlZDtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBzdHlsZSBvZiBhIHN1cGVyc2NyaXB0IGdpdmVuIGEgYmFzZSBpbiB0aGUgY3VycmVudCBzdHlsZS5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gU3R5bGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5zdXAgPSBmdW5jdGlvbiBzdXAoKSB7XG4gICAgcmV0dXJuIFN0eWxlX3N0eWxlc1tfc3VwW3RoaXMuaWRdXTtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBzdHlsZSBvZiBhIHN1YnNjcmlwdCBnaXZlbiBhIGJhc2UgaW4gdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnN1YiA9IGZ1bmN0aW9uIHN1YigpIHtcbiAgICByZXR1cm4gU3R5bGVfc3R5bGVzW19zdWJbdGhpcy5pZF1dO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0eWxlIG9mIGEgZnJhY3Rpb24gbnVtZXJhdG9yIGdpdmVuIHRoZSBmcmFjdGlvbiBpbiB0aGUgY3VycmVudFxuICAgKiBzdHlsZS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZnJhY051bSA9IGZ1bmN0aW9uIGZyYWNOdW0oKSB7XG4gICAgcmV0dXJuIFN0eWxlX3N0eWxlc1tfZnJhY051bVt0aGlzLmlkXV07XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgc3R5bGUgb2YgYSBmcmFjdGlvbiBkZW5vbWluYXRvciBnaXZlbiB0aGUgZnJhY3Rpb24gaW4gdGhlIGN1cnJlbnRcbiAgICogc3R5bGUuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmZyYWNEZW4gPSBmdW5jdGlvbiBmcmFjRGVuKCkge1xuICAgIHJldHVybiBTdHlsZV9zdHlsZXNbX2ZyYWNEZW5bdGhpcy5pZF1dO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGNyYW1wZWQgdmVyc2lvbiBvZiBhIHN0eWxlIChpbiBwYXJ0aWN1bGFyLCBjcmFtcGluZyBhIGNyYW1wZWQgc3R5bGVcbiAgICogZG9lc24ndCBjaGFuZ2UgdGhlIHN0eWxlKS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uY3JhbXAgPSBmdW5jdGlvbiBjcmFtcCgpIHtcbiAgICByZXR1cm4gU3R5bGVfc3R5bGVzW19jcmFtcFt0aGlzLmlkXV07XG4gIH1cbiAgLyoqXG4gICAqIEdldCBhIHRleHQgb3IgZGlzcGxheSB2ZXJzaW9uIG9mIHRoaXMgc3R5bGUuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnRleHQgPSBmdW5jdGlvbiB0ZXh0KCkge1xuICAgIHJldHVybiBTdHlsZV9zdHlsZXNbX3RleHRbdGhpcy5pZF1dO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGlzIHN0eWxlIGlzIHRpZ2h0bHkgc3BhY2VkIChzY3JpcHRzdHlsZS9zY3JpcHRzY3JpcHRzdHlsZSlcbiAgICovXG4gIDtcblxuICBfcHJvdG8uaXNUaWdodCA9IGZ1bmN0aW9uIGlzVGlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSA+PSAyO1xuICB9O1xuXG4gIHJldHVybiBTdHlsZTtcbn0oKTsgLy8gRXhwb3J0IGFuIGludGVyZmFjZSBmb3IgdHlwZSBjaGVja2luZywgYnV0IGRvbid0IGV4cG9zZSB0aGUgaW1wbGVtZW50YXRpb24uXG4vLyBUaGlzIHdheSwgbm8gbW9yZSBzdHlsZXMgY2FuIGJlIGdlbmVyYXRlZC5cblxuXG4vLyBJRHMgb2YgdGhlIGRpZmZlcmVudCBzdHlsZXNcbnZhciBEID0gMDtcbnZhciBEYyA9IDE7XG52YXIgVCA9IDI7XG52YXIgVGMgPSAzO1xudmFyIFMgPSA0O1xudmFyIFNjID0gNTtcbnZhciBTUyA9IDY7XG52YXIgU1NjID0gNzsgLy8gSW5zdGFuY2VzIG9mIHRoZSBkaWZmZXJlbnQgc3R5bGVzXG5cbnZhciBTdHlsZV9zdHlsZXMgPSBbbmV3IFN0eWxlKEQsIDAsIGZhbHNlKSwgbmV3IFN0eWxlKERjLCAwLCB0cnVlKSwgbmV3IFN0eWxlKFQsIDEsIGZhbHNlKSwgbmV3IFN0eWxlKFRjLCAxLCB0cnVlKSwgbmV3IFN0eWxlKFMsIDIsIGZhbHNlKSwgbmV3IFN0eWxlKFNjLCAyLCB0cnVlKSwgbmV3IFN0eWxlKFNTLCAzLCBmYWxzZSksIG5ldyBTdHlsZShTU2MsIDMsIHRydWUpXTsgLy8gTG9va3VwIHRhYmxlcyBmb3Igc3dpdGNoaW5nIGZyb20gb25lIHN0eWxlIHRvIGFub3RoZXJcblxudmFyIF9zdXAgPSBbUywgU2MsIFMsIFNjLCBTUywgU1NjLCBTUywgU1NjXTtcbnZhciBfc3ViID0gW1NjLCBTYywgU2MsIFNjLCBTU2MsIFNTYywgU1NjLCBTU2NdO1xudmFyIF9mcmFjTnVtID0gW1QsIFRjLCBTLCBTYywgU1MsIFNTYywgU1MsIFNTY107XG52YXIgX2ZyYWNEZW4gPSBbVGMsIFRjLCBTYywgU2MsIFNTYywgU1NjLCBTU2MsIFNTY107XG52YXIgX2NyYW1wID0gW0RjLCBEYywgVGMsIFRjLCBTYywgU2MsIFNTYywgU1NjXTtcbnZhciBfdGV4dCA9IFtELCBEYywgVCwgVGMsIFQsIFRjLCBULCBUY107IC8vIFdlIG9ubHkgZXhwb3J0IHNvbWUgb2YgdGhlIHN0eWxlcy5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX1N0eWxlID0gKHtcbiAgRElTUExBWTogU3R5bGVfc3R5bGVzW0RdLFxuICBURVhUOiBTdHlsZV9zdHlsZXNbVF0sXG4gIFNDUklQVDogU3R5bGVfc3R5bGVzW1NdLFxuICBTQ1JJUFRTQ1JJUFQ6IFN0eWxlX3N0eWxlc1tTU11cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdW5pY29kZVNjcmlwdHMuanNcbi8qXG4gKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgVW5pY29kZSBzY3JpcHRzIGFuZCBzY3JpcHQgZmFtaWxpZXMgdGhhdCB3ZVxuICogc3VwcG9ydC4gVG8gYWRkIG5ldyBzY3JpcHRzIG9yIGZhbWlsaWVzLCBqdXN0IGFkZCBhIG5ldyBlbnRyeSB0byB0aGVcbiAqIHNjcmlwdERhdGEgYXJyYXkgYmVsb3cuIEFkZGluZyBzY3JpcHRzIHRvIHRoZSBzY3JpcHREYXRhIGFycmF5IGFsbG93c1xuICogY2hhcmFjdGVycyBmcm9tIHRoYXQgc2NyaXB0IHRvIGFwcGVhciBpbiBcXHRleHR7fSBlbnZpcm9ubWVudHMuXG4gKi9cblxuLyoqXG4gKiBFYWNoIHNjcmlwdCBvciBzY3JpcHQgZmFtaWx5IGhhcyBhIG5hbWUgYW5kIGFuIGFycmF5IG9mIGJsb2Nrcy5cbiAqIEVhY2ggYmxvY2sgaXMgYW4gYXJyYXkgb2YgdHdvIG51bWJlcnMgd2hpY2ggc3BlY2lmeSB0aGUgc3RhcnQgYW5kXG4gKiBlbmQgcG9pbnRzIChpbmNsdXNpdmUpIG9mIGEgYmxvY2sgb2YgVW5pY29kZSBjb2RlcG9pbnRzLlxuICovXG5cbi8qKlxuICogVW5pY29kZSBibG9jayBkYXRhIGZvciB0aGUgZmFtaWxpZXMgb2Ygc2NyaXB0cyB3ZSBzdXBwb3J0IGluIFxcdGV4dHt9LlxuICogU2NyaXB0cyBvbmx5IG5lZWQgdG8gYXBwZWFyIGhlcmUgaWYgdGhleSBkbyBub3QgaGF2ZSBmb250IG1ldHJpY3MuXG4gKi9cbnZhciBzY3JpcHREYXRhID0gW3tcbiAgLy8gTGF0aW4gY2hhcmFjdGVycyBiZXlvbmQgdGhlIExhdGluLTEgY2hhcmFjdGVycyB3ZSBoYXZlIG1ldHJpY3MgZm9yLlxuICAvLyBOZWVkZWQgZm9yIEN6ZWNoLCBIdW5nYXJpYW4gYW5kIFR1cmtpc2ggdGV4dCwgZm9yIGV4YW1wbGUuXG4gIG5hbWU6ICdsYXRpbicsXG4gIGJsb2NrczogW1sweDAxMDAsIDB4MDI0Zl0sIC8vIExhdGluIEV4dGVuZGVkLUEgYW5kIExhdGluIEV4dGVuZGVkLUJcbiAgWzB4MDMwMCwgMHgwMzZmXV1cbn0sIHtcbiAgLy8gVGhlIEN5cmlsbGljIHNjcmlwdCB1c2VkIGJ5IFJ1c3NpYW4gYW5kIHJlbGF0ZWQgbGFuZ3VhZ2VzLlxuICAvLyBBIEN5cmlsbGljIHN1YnNldCB1c2VkIHRvIGJlIHN1cHBvcnRlZCBhcyBleHBsaWNpdGx5IGRlZmluZWRcbiAgLy8gc3ltYm9scyBpbiBzeW1ib2xzLmpzXG4gIG5hbWU6ICdjeXJpbGxpYycsXG4gIGJsb2NrczogW1sweDA0MDAsIDB4MDRmZl1dXG59LCB7XG4gIC8vIFRoZSBCcmFobWljIHNjcmlwdHMgb2YgU291dGggYW5kIFNvdXRoZWFzdCBBc2lhXG4gIC8vIERldmFuYWdhcmkgKDA5MDDigJMwOTdGKVxuICAvLyBCZW5nYWxpICgwOTgw4oCTMDlGRilcbiAgLy8gR3VybXVraGkgKDBBMDDigJMwQTdGKVxuICAvLyBHdWphcmF0aSAoMEE4MOKAkzBBRkYpXG4gIC8vIE9yaXlhICgwQjAw4oCTMEI3RilcbiAgLy8gVGFtaWwgKDBCODDigJMwQkZGKVxuICAvLyBUZWx1Z3UgKDBDMDDigJMwQzdGKVxuICAvLyBLYW5uYWRhICgwQzgw4oCTMENGRilcbiAgLy8gTWFsYXlhbGFtICgwRDAw4oCTMEQ3RilcbiAgLy8gU2luaGFsYSAoMEQ4MOKAkzBERkYpXG4gIC8vIFRoYWkgKDBFMDDigJMwRTdGKVxuICAvLyBMYW8gKDBFODDigJMwRUZGKVxuICAvLyBUaWJldGFuICgwRjAw4oCTMEZGRilcbiAgLy8gTXlhbm1hciAoMTAwMOKAkzEwOUYpXG4gIG5hbWU6ICdicmFobWljJyxcbiAgYmxvY2tzOiBbWzB4MDkwMCwgMHgxMDlGXV1cbn0sIHtcbiAgbmFtZTogJ2dlb3JnaWFuJyxcbiAgYmxvY2tzOiBbWzB4MTBBMCwgMHgxMGZmXV1cbn0sIHtcbiAgLy8gQ2hpbmVzZSBhbmQgSmFwYW5lc2UuXG4gIC8vIFRoZSBcImtcIiBpbiBjamsgaXMgZm9yIEtvcmVhbiwgYnV0IHdlJ3ZlIHNlcGFyYXRlZCBLb3JlYW4gb3V0XG4gIG5hbWU6IFwiY2prXCIsXG4gIGJsb2NrczogW1sweDMwMDAsIDB4MzBGRl0sIC8vIENKSyBzeW1ib2xzIGFuZCBwdW5jdHVhdGlvbiwgSGlyYWdhbmEsIEthdGFrYW5hXG4gIFsweDRFMDAsIDB4OUZBRl0sIC8vIENKSyBpZGVvZ3JhbXNcbiAgWzB4RkYwMCwgMHhGRjYwXV1cbn0sIHtcbiAgLy8gS29yZWFuXG4gIG5hbWU6ICdoYW5ndWwnLFxuICBibG9ja3M6IFtbMHhBQzAwLCAweEQ3QUZdXVxufV07XG4vKipcbiAqIEdpdmVuIGEgY29kZXBvaW50LCByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHNjcmlwdCBvciBzY3JpcHQgZmFtaWx5XG4gKiBpdCBpcyBmcm9tLCBvciBudWxsIGlmIGl0IGlzIG5vdCBwYXJ0IG9mIGEga25vd24gYmxvY2tcbiAqL1xuXG5mdW5jdGlvbiBzY3JpcHRGcm9tQ29kZXBvaW50KGNvZGVwb2ludCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNjcmlwdERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc2NyaXB0ID0gc2NyaXB0RGF0YVtpXTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBzY3JpcHQuYmxvY2tzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIGJsb2NrID0gc2NyaXB0LmJsb2Nrc1tfaV07XG5cbiAgICAgIGlmIChjb2RlcG9pbnQgPj0gYmxvY2tbMF0gJiYgY29kZXBvaW50IDw9IGJsb2NrWzFdKSB7XG4gICAgICAgIHJldHVybiBzY3JpcHQubmFtZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogQSBmbGF0dGVuZWQgdmVyc2lvbiBvZiBhbGwgdGhlIHN1cHBvcnRlZCBibG9ja3MgaW4gYSBzaW5nbGUgYXJyYXkuXG4gKiBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiB0byBtYWtlIHN1cHBvcnRlZENvZGVwb2ludCgpIGZhc3QuXG4gKi9cblxudmFyIGFsbEJsb2NrcyA9IFtdO1xuc2NyaXB0RGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChzKSB7XG4gIHJldHVybiBzLmJsb2Nrcy5mb3JFYWNoKGZ1bmN0aW9uIChiKSB7XG4gICAgcmV0dXJuIGFsbEJsb2Nrcy5wdXNoLmFwcGx5KGFsbEJsb2NrcywgYik7XG4gIH0pO1xufSk7XG4vKipcbiAqIEdpdmVuIGEgY29kZXBvaW50LCByZXR1cm4gdHJ1ZSBpZiBpdCBmYWxscyB3aXRoaW4gb25lIG9mIHRoZVxuICogc2NyaXB0cyBvciBzY3JpcHQgZmFtaWxpZXMgZGVmaW5lZCBhYm92ZSBhbmQgZmFsc2Ugb3RoZXJ3aXNlLlxuICpcbiAqIE1pY3JvIGJlbmNobWFya3Mgc2hvd3MgdGhhdCB0aGlzIGlzIGZhc3RlciB0aGFuXG4gKiAvW1xcdTMwMDAtXFx1MzBGRlxcdTRFMDAtXFx1OUZBRlxcdUZGMDAtXFx1RkY2MFxcdUFDMDAtXFx1RDdBRlxcdTA5MDAtXFx1MTA5Rl0vLnRlc3QoKVxuICogaW4gRmlyZWZveCwgQ2hyb21lIGFuZCBOb2RlLlxuICovXG5cbmZ1bmN0aW9uIHN1cHBvcnRlZENvZGVwb2ludChjb2RlcG9pbnQpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxCbG9ja3MubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBpZiAoY29kZXBvaW50ID49IGFsbEJsb2Nrc1tpXSAmJiBjb2RlcG9pbnQgPD0gYWxsQmxvY2tzW2kgKyAxXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvc3ZnR2VvbWV0cnkuanNcbi8qKlxuICogVGhpcyBmaWxlIHByb3ZpZGVzIHN1cHBvcnQgdG8gZG9tVHJlZS5qcyBhbmQgZGVsaW1pdGVyLmpzLlxuICogSXQncyBhIHN0b3JlaG91c2Ugb2YgcGF0aCBnZW9tZXRyeSBmb3IgU1ZHIGltYWdlcy5cbiAqL1xuLy8gSW4gYWxsIHBhdGhzIGJlbG93LCB0aGUgdmlld0JveC10by1lbSBzY2FsZSBpcyAxMDAwOjEuXG52YXIgaExpbmVQYWQgPSA4MDsgLy8gcGFkZGluZyBhYm92ZSBhIHNxcnQgdmluaWN1bHVtLiBQcmV2ZW50cyBpbWFnZSBjcm9wcGluZy5cbi8vIFRoZSB2aW5pY3VsdW0gb2YgYSBcXHNxcnQgY2FuIGJlIG1hZGUgdGhpY2tlciBieSBhIEthVGVYIHJlbmRlcmluZyBvcHRpb24uXG4vLyBUaGluayBvZiB2YXJpYWJsZSBleHRyYVZpbmljdWx1bSBhcyB0d28gZGV0b3VycyBpbiB0aGUgU1ZHIHBhdGguXG4vLyBUaGUgZGV0b3VyIGJlZ2lucyBhdCB0aGUgbG93ZXIgbGVmdCBvZiB0aGUgYXJlYSBsYWJlbGVkIGV4dHJhVmluaWN1bHVtIGJlbG93LlxuLy8gVGhlIGRldG91ciBwcm9jZWVkcyBvbmUgZXh0cmFWaW5pY3VsdW0gZGlzdGFuY2UgdXAgYW5kIHNsaWdodGx5IHRvIHRoZSByaWdodCxcbi8vIGRpc3BsYWNpbmcgdGhlIHJhZGl1c2VkIGNvcm5lciBiZXR3ZWVuIHN1cmQgYW5kIHZpbmljdWx1bS4gVGhlIHJhZGl1cyBpc1xuLy8gdHJhdmVyc2VkIGFzIHVzdWFsLCB0aGVuIHRoZSBkZXRvdXIgcmVzdW1lcy4gSXQgZ29lcyByaWdodCwgdG8gdGhlIGVuZCBvZlxuLy8gdGhlIHZlcnkgbG9uZyB2aW5pY3VsdW1uLCB0aGVuIGRvd24gb25lIGV4dHJhVmluaWN1bHVtIGRpc3RhbmNlLFxuLy8gYWZ0ZXIgd2hpY2ggaXQgcmVzdW1lcyByZWd1bGFyIHBhdGggZ2VvbWV0cnkgZm9yIHRoZSByYWRpY2FsLlxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmluaWN1bHVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvXG4gICAgICAgICAv4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4paS4oaQZXh0cmFWaW5pY3VsdW1cbiAgICAgICAgLyDilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojihpAwLjA0ZW0gKDQwIHVuaXQpIHN0ZCB2aW5pY3VsdW0gdGhpY2tuZXNzXG4gICAgICAgLyAvXG4gICAgICAvIC9cbiAgICAgLyAvXFxcbiAgICAvIC8gc3VyZFxuKi9cblxudmFyIHNxcnRNYWluID0gZnVuY3Rpb24gc3FydE1haW4oZXh0cmFWaW5pY3VsdW0sIGhMaW5lUGFkKSB7XG4gIC8vIHNxcnRNYWluIHBhdGggZ2VvbWV0cnkgaXMgZnJvbSBnbHlwaCBVMjIxQSBpbiB0aGUgZm9udCBLYVRlWCBNYWluXG4gIHJldHVybiBcIk05NSxcIiArICg2MjIgKyBleHRyYVZpbmljdWx1bSArIGhMaW5lUGFkKSArIFwiXFxuYy0yLjcsMCwtNy4xNywtMi43LC0xMy41LC04Yy01LjgsLTUuMywtOS41LC0xMCwtOS41LC0xNFxcbmMwLC0yLDAuMywtMy4zLDEsLTRjMS4zLC0yLjcsMjMuODMsLTIwLjcsNjcuNSwtNTRcXG5jNDQuMiwtMzMuMyw2NS44LC01MC4zLDY2LjUsLTUxYzEuMywtMS4zLDMsLTIsNSwtMmM0LjcsMCw4LjcsMy4zLDEyLDEwXFxuczE3MywzNzgsMTczLDM3OGMwLjcsMCwzNS4zLC03MSwxMDQsLTIxM2M2OC43LC0xNDIsMTM3LjUsLTI4NSwyMDYuNSwtNDI5XFxuYzY5LC0xNDQsMTA0LjUsLTIxNy43LDEwNi41LC0yMjFcXG5sXCIgKyBleHRyYVZpbmljdWx1bSAvIDIuMDc1ICsgXCIgLVwiICsgZXh0cmFWaW5pY3VsdW0gKyBcIlxcbmM1LjMsLTkuMywxMiwtMTQsMjAsLTE0XFxuSDQwMDAwMHZcIiArICg0MCArIGV4dHJhVmluaWN1bHVtKSArIFwiSDg0NS4yNzI0XFxucy0yMjUuMjcyLDQ2NywtMjI1LjI3Miw0NjdzLTIzNSw0ODYsLTIzNSw0ODZjLTIuNyw0LjcsLTksNywtMTksN1xcbmMtNiwwLC0xMCwtMSwtMTIsLTNzLTE5NCwtNDIyLC0xOTQsLTQyMnMtNjUsNDcsLTY1LDQ3elxcbk1cIiArICg4MzQgKyBleHRyYVZpbmljdWx1bSkgKyBcIiBcIiArIGhMaW5lUGFkICsgXCJoNDAwMDAwdlwiICsgKDQwICsgZXh0cmFWaW5pY3VsdW0pICsgXCJoLTQwMDAwMHpcIjtcbn07XG5cbnZhciBzcXJ0U2l6ZTEgPSBmdW5jdGlvbiBzcXJ0U2l6ZTEoZXh0cmFWaW5pY3VsdW0sIGhMaW5lUGFkKSB7XG4gIC8vIHNpemUxIGlzIGZyb20gZ2x5cGggVTIyMUEgaW4gdGhlIGZvbnQgS2FUZVhfU2l6ZTEtUmVndWxhclxuICByZXR1cm4gXCJNMjYzLFwiICsgKDYwMSArIGV4dHJhVmluaWN1bHVtICsgaExpbmVQYWQpICsgXCJjMC43LDAsMTgsMzkuNyw1MiwxMTlcXG5jMzQsNzkuMyw2OC4xNjcsMTU4LjcsMTAyLjUsMjM4YzM0LjMsNzkuMyw1MS44LDExOS4zLDUyLjUsMTIwXFxuYzM0MCwtNzA0LjcsNTEwLjcsLTEwNjAuMyw1MTIsLTEwNjdcXG5sXCIgKyBleHRyYVZpbmljdWx1bSAvIDIuMDg0ICsgXCIgLVwiICsgZXh0cmFWaW5pY3VsdW0gKyBcIlxcbmM0LjcsLTcuMywxMSwtMTEsMTksLTExXFxuSDQwMDAwdlwiICsgKDQwICsgZXh0cmFWaW5pY3VsdW0pICsgXCJIMTAxMi4zXFxucy0yNzEuMyw1NjcsLTI3MS4zLDU2N2MtMzguNyw4MC43LC04NCwxNzUsLTEzNiwyODNjLTUyLDEwOCwtODkuMTY3LDE4NS4zLC0xMTEuNSwyMzJcXG5jLTIyLjMsNDYuNywtMzMuOCw3MC4zLC0zNC41LDcxYy00LjcsNC43LC0xMi4zLDcsLTIzLDdzLTEyLC0xLC0xMiwtMVxcbnMtMTA5LC0yNTMsLTEwOSwtMjUzYy03Mi43LC0xNjgsLTEwOS4zLC0yNTIsLTExMCwtMjUyYy0xMC43LDgsLTIyLDE2LjcsLTM0LDI2XFxuYy0yMiwxNy4zLC0zMy4zLDI2LC0zNCwyNnMtMjYsLTI2LC0yNiwtMjZzNzYsLTU5LDc2LC01OXM3NiwtNjAsNzYsLTYwelxcbk1cIiArICgxMDAxICsgZXh0cmFWaW5pY3VsdW0pICsgXCIgXCIgKyBoTGluZVBhZCArIFwiaDQwMDAwMHZcIiArICg0MCArIGV4dHJhVmluaWN1bHVtKSArIFwiaC00MDAwMDB6XCI7XG59O1xuXG52YXIgc3FydFNpemUyID0gZnVuY3Rpb24gc3FydFNpemUyKGV4dHJhVmluaWN1bHVtLCBoTGluZVBhZCkge1xuICAvLyBzaXplMiBpcyBmcm9tIGdseXBoIFUyMjFBIGluIHRoZSBmb250IEthVGVYX1NpemUyLVJlZ3VsYXJcbiAgcmV0dXJuIFwiTTk4MyBcIiArICgxMCArIGV4dHJhVmluaWN1bHVtICsgaExpbmVQYWQpICsgXCJcXG5sXCIgKyBleHRyYVZpbmljdWx1bSAvIDMuMTMgKyBcIiAtXCIgKyBleHRyYVZpbmljdWx1bSArIFwiXFxuYzQsLTYuNywxMCwtMTAsMTgsLTEwIEg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmljdWx1bSkgKyBcIlxcbkgxMDEzLjFzLTgzLjQsMjY4LC0yNjQuMSw4NDBjLTE4MC43LDU3MiwtMjc3LDg3Ni4zLC0yODksOTEzYy00LjcsNC43LC0xMi43LDcsLTI0LDdcXG5zLTEyLDAsLTEyLDBjLTEuMywtMy4zLC0zLjcsLTExLjcsLTcsLTI1Yy0zNS4zLC0xMjUuMywtMTA2LjcsLTM3My4zLC0yMTQsLTc0NFxcbmMtMTAsMTIsLTIxLDI1LC0zMywzOXMtMzIsMzksLTMyLDM5Yy02LC01LjMsLTE1LC0xNCwtMjcsLTI2czI1LC0zMCwyNSwtMzBcXG5jMjYuNywtMzIuNyw1MiwtNjMsNzYsLTkxczUyLC02MCw1MiwtNjBzMjA4LDcyMiwyMDgsNzIyXFxuYzU2LC0xNzUuMywxMjYuMywtMzk3LjMsMjExLC02NjZjODQuNywtMjY4LjcsMTUzLjgsLTQ4OC4yLDIwNy41LC02NTguNVxcbmM1My43LC0xNzAuMyw4NC41LC0yNjYuOCw5Mi41LC0yODkuNXpcXG5NXCIgKyAoMTAwMSArIGV4dHJhVmluaWN1bHVtKSArIFwiIFwiICsgaExpbmVQYWQgKyBcImg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmljdWx1bSkgKyBcImgtNDAwMDAwelwiO1xufTtcblxudmFyIHNxcnRTaXplMyA9IGZ1bmN0aW9uIHNxcnRTaXplMyhleHRyYVZpbmljdWx1bSwgaExpbmVQYWQpIHtcbiAgLy8gc2l6ZTMgaXMgZnJvbSBnbHlwaCBVMjIxQSBpbiB0aGUgZm9udCBLYVRlWF9TaXplMy1SZWd1bGFyXG4gIHJldHVybiBcIk00MjQsXCIgKyAoMjM5OCArIGV4dHJhVmluaWN1bHVtICsgaExpbmVQYWQpICsgXCJcXG5jLTEuMywtMC43LC0zOC41LC0xNzIsLTExMS41LC01MTRjLTczLC0zNDIsLTEwOS44LC01MTMuMywtMTEwLjUsLTUxNFxcbmMwLC0yLC0xMC43LDE0LjMsLTMyLDQ5Yy00LjcsNy4zLC05LjgsMTUuNywtMTUuNSwyNWMtNS43LDkuMywtOS44LDE2LC0xMi41LDIwXFxucy01LDcsLTUsN2MtNCwtMy4zLC04LjMsLTcuNywtMTMsLTEzcy0xMywtMTMsLTEzLC0xM3M3NiwtMTIyLDc2LC0xMjJzNzcsLTEyMSw3NywtMTIxXFxuczIwOSw5NjgsMjA5LDk2OGMwLC0yLDg0LjcsLTM2MS43LDI1NCwtMTA3OWMxNjkuMywtNzE3LjMsMjU0LjcsLTEwNzcuNywyNTYsLTEwODFcXG5sXCIgKyBleHRyYVZpbmljdWx1bSAvIDQuMjIzICsgXCIgLVwiICsgZXh0cmFWaW5pY3VsdW0gKyBcImM0LC02LjcsMTAsLTEwLDE4LC0xMCBINDAwMDAwXFxudlwiICsgKDQwICsgZXh0cmFWaW5pY3VsdW0pICsgXCJIMTAxNC42XFxucy04Ny4zLDM3OC43LC0yNzIuNiwxMTY2Yy0xODUuMyw3ODcuMywtMjc5LjMsMTE4Mi4zLC0yODIsMTE4NVxcbmMtMiw2LC0xMCw5LC0yNCw5XFxuYy04LDAsLTEyLC0wLjcsLTEyLC0yeiBNXCIgKyAoMTAwMSArIGV4dHJhVmluaWN1bHVtKSArIFwiIFwiICsgaExpbmVQYWQgKyBcIlxcbmg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmljdWx1bSkgKyBcImgtNDAwMDAwelwiO1xufTtcblxudmFyIHNxcnRTaXplNCA9IGZ1bmN0aW9uIHNxcnRTaXplNChleHRyYVZpbmljdWx1bSwgaExpbmVQYWQpIHtcbiAgLy8gc2l6ZTQgaXMgZnJvbSBnbHlwaCBVMjIxQSBpbiB0aGUgZm9udCBLYVRlWF9TaXplNC1SZWd1bGFyXG4gIHJldHVybiBcIk00NzMsXCIgKyAoMjcxMyArIGV4dHJhVmluaWN1bHVtICsgaExpbmVQYWQpICsgXCJcXG5jMzM5LjMsLTE3OTkuMyw1MDkuMywtMjcwMCw1MTAsLTI3MDIgbFwiICsgZXh0cmFWaW5pY3VsdW0gLyA1LjI5OCArIFwiIC1cIiArIGV4dHJhVmluaWN1bHVtICsgXCJcXG5jMy4zLC03LjMsOS4zLC0xMSwxOCwtMTEgSDQwMDAwMHZcIiArICg0MCArIGV4dHJhVmluaWN1bHVtKSArIFwiSDEwMTcuN1xcbnMtOTAuNSw0NzgsLTI3Ni4yLDE0NjZjLTE4NS43LDk4OCwtMjc5LjUsMTQ4MywtMjgxLjUsMTQ4NWMtMiw2LC0xMCw5LC0yNCw5XFxuYy04LDAsLTEyLC0wLjcsLTEyLC0yYzAsLTEuMywtNS4zLC0zMiwtMTYsLTkyYy01MC43LC0yOTMuMywtMTE5LjcsLTY5My4zLC0yMDcsLTEyMDBcXG5jMCwtMS4zLC01LjMsOC43LC0xNiwzMGMtMTAuNywyMS4zLC0yMS4zLDQyLjcsLTMyLDY0cy0xNiwzMywtMTYsMzNzLTI2LC0yNiwtMjYsLTI2XFxuczc2LC0xNTMsNzYsLTE1M3M3NywtMTUxLDc3LC0xNTFjMC43LDAuNywzNS43LDIwMiwxMDUsNjA0YzY3LjMsNDAwLjcsMTAyLDYwMi43LDEwNCxcXG42MDZ6TVwiICsgKDEwMDEgKyBleHRyYVZpbmljdWx1bSkgKyBcIiBcIiArIGhMaW5lUGFkICsgXCJoNDAwMDAwdlwiICsgKDQwICsgZXh0cmFWaW5pY3VsdW0pICsgXCJIMTAxNy43elwiO1xufTtcblxudmFyIHNxcnRUYWxsID0gZnVuY3Rpb24gc3FydFRhbGwoZXh0cmFWaW5pY3VsdW0sIGhMaW5lUGFkLCB2aWV3Qm94SGVpZ2h0KSB7XG4gIC8vIHNxcnRUYWxsIGlzIGZyb20gZ2x5cGggVTIzQjcgaW4gdGhlIGZvbnQgS2FUZVhfU2l6ZTQtUmVndWxhclxuICAvLyBPbmUgcGF0aCBlZGdlIGhhcyBhIHZhcmlhYmxlIGxlbmd0aC4gSXQgcnVucyB2ZXJ0aWNhbGx5IGZyb20gdGhlIHZpbmljdWx1bW5cbiAgLy8gdG8gYSBwb2ludCBuZWFyICgxNCB1bml0cykgdGhlIGJvdHRvbSBvZiB0aGUgc3VyZC4gVGhlIHZpbmljdWx1bVxuICAvLyBpcyBub3JtYWxseSA0MCB1bml0cyB0aGljay4gU28gdGhlIGxlbmd0aCBvZiB0aGUgbGluZSBpbiBxdWVzdGlvbiBpczpcbiAgdmFyIHZlcnRTZWdtZW50ID0gdmlld0JveEhlaWdodCAtIDU0IC0gaExpbmVQYWQgLSBleHRyYVZpbmljdWx1bTtcbiAgcmV0dXJuIFwiTTcwMiBcIiArIChleHRyYVZpbmljdWx1bSArIGhMaW5lUGFkKSArIFwiSDQwMDAwMFwiICsgKDQwICsgZXh0cmFWaW5pY3VsdW0pICsgXCJcXG5INzQydlwiICsgdmVydFNlZ21lbnQgKyBcImwtNCA0LTQgNGMtLjY2Ny43IC0yIDEuNS00IDIuNXMtNC4xNjcgMS44MzMtNi41IDIuNS01LjUgMS05LjUgMVxcbmgtMTJsLTI4LTg0Yy0xNi42NjctNTItOTYuNjY3IC0yOTQuMzMzLTI0MC03MjdsLTIxMiAtNjQzIC04NSAxNzBcXG5jLTQtMy4zMzMtOC4zMzMtNy42NjctMTMgLTEzbC0xMy0xM2w3Ny0xNTUgNzctMTU2YzY2IDE5OS4zMzMgMTM5IDQxOS42NjdcXG4yMTkgNjYxIGwyMTggNjYxek03MDIgXCIgKyBoTGluZVBhZCArIFwiSDQwMDAwMHZcIiArICg0MCArIGV4dHJhVmluaWN1bHVtKSArIFwiSDc0MnpcIjtcbn07XG5cbnZhciBzcXJ0UGF0aCA9IGZ1bmN0aW9uIHNxcnRQYXRoKHNpemUsIGV4dHJhVmluaWN1bHVtLCB2aWV3Qm94SGVpZ2h0KSB7XG4gIGV4dHJhVmluaWN1bHVtID0gMTAwMCAqIGV4dHJhVmluaWN1bHVtOyAvLyBDb252ZXJ0IGZyb20gZG9jdW1lbnQgZW1zIHRvIHZpZXdCb3guXG5cbiAgdmFyIHBhdGggPSBcIlwiO1xuXG4gIHN3aXRjaCAoc2l6ZSkge1xuICAgIGNhc2UgXCJzcXJ0TWFpblwiOlxuICAgICAgcGF0aCA9IHNxcnRNYWluKGV4dHJhVmluaWN1bHVtLCBoTGluZVBhZCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJzcXJ0U2l6ZTFcIjpcbiAgICAgIHBhdGggPSBzcXJ0U2l6ZTEoZXh0cmFWaW5pY3VsdW0sIGhMaW5lUGFkKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInNxcnRTaXplMlwiOlxuICAgICAgcGF0aCA9IHNxcnRTaXplMihleHRyYVZpbmljdWx1bSwgaExpbmVQYWQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwic3FydFNpemUzXCI6XG4gICAgICBwYXRoID0gc3FydFNpemUzKGV4dHJhVmluaWN1bHVtLCBoTGluZVBhZCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJzcXJ0U2l6ZTRcIjpcbiAgICAgIHBhdGggPSBzcXJ0U2l6ZTQoZXh0cmFWaW5pY3VsdW0sIGhMaW5lUGFkKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInNxcnRUYWxsXCI6XG4gICAgICBwYXRoID0gc3FydFRhbGwoZXh0cmFWaW5pY3VsdW0sIGhMaW5lUGFkLCB2aWV3Qm94SGVpZ2h0KTtcbiAgfVxuXG4gIHJldHVybiBwYXRoO1xufTtcbnZhciBzdmdHZW9tZXRyeV9wYXRoID0ge1xuICAvLyBUaGUgZG91YmxlbGVmdGFycm93IGdlb21ldHJ5IGlzIGZyb20gZ2x5cGggVSsyMUQwIGluIHRoZSBmb250IEthVGVYIE1haW5cbiAgZG91YmxlbGVmdGFycm93OiBcIk0yNjIgMTU3XFxubDEwLTEwYzM0LTM2IDYyLjctNzcgODYtMTIzIDMuMy04IDUtMTMuMyA1LTE2IDAtNS4zLTYuNy04LTIwLTgtNy4zXFxuIDAtMTIuMi41LTE0LjUgMS41LTIuMyAxLTQuOCA0LjUtNy41IDEwLjUtNDkuMyA5Ny4zLTEyMS43IDE2OS4zLTIxNyAyMTYtMjhcXG4gMTQtNTcuMyAyNS04OCAzMy02LjcgMi0xMSAzLjgtMTMgNS41LTIgMS43LTMgNC4yLTMgNy41czEgNS44IDMgNy41XFxuYzIgMS43IDYuMyAzLjUgMTMgNS41IDY4IDE3LjMgMTI4LjIgNDcuOCAxODAuNSA5MS41IDUyLjMgNDMuNyA5My44IDk2LjIgMTI0LjVcXG4gMTU3LjUgOS4zIDggMTUuMyAxMi4zIDE4IDEzaDZjMTItLjcgMTgtNCAxOC0xMCAwLTItMS43LTctNS0xNS0yMy4zLTQ2LTUyLTg3XFxuLTg2LTEyM2wtMTAtMTBoMzk5NzM4di00MEgyMThjMzI4IDAgMCAwIDAgMGwtMTAtOGMtMjYuNy0yMC02NS43LTQzLTExNy02OSAyLjdcXG4tMiA2LTMuNyAxMC01IDM2LjctMTYgNzIuMy0zNy4zIDEwNy02NGwxMC04aDM5OTc4MnYtNDB6XFxubTggMHY0MGgzOTk3MzB2LTQwem0wIDE5NHY0MGgzOTk3MzB2LTQwelwiLFxuICAvLyBkb3VibGVyaWdodGFycm93IGlzIGZyb20gZ2x5cGggVSsyMUQyIGluIGZvbnQgS2FUZVggTWFpblxuICBkb3VibGVyaWdodGFycm93OiBcIk0zOTk3MzggMzkybFxcbi0xMCAxMGMtMzQgMzYtNjIuNyA3Ny04NiAxMjMtMy4zIDgtNSAxMy4zLTUgMTYgMCA1LjMgNi43IDggMjAgOCA3LjMgMCAxMi4yLS41XFxuIDE0LjUtMS41IDIuMy0xIDQuOC00LjUgNy41LTEwLjUgNDkuMy05Ny4zIDEyMS43LTE2OS4zIDIxNy0yMTYgMjgtMTQgNTcuMy0yNSA4OFxcbi0zMyA2LjctMiAxMS0zLjggMTMtNS41IDItMS43IDMtNC4yIDMtNy41cy0xLTUuOC0zLTcuNWMtMi0xLjctNi4zLTMuNS0xMy01LjUtNjhcXG4tMTcuMy0xMjguMi00Ny44LTE4MC41LTkxLjUtNTIuMy00My43LTkzLjgtOTYuMi0xMjQuNS0xNTcuNS05LjMtOC0xNS4zLTEyLjMtMThcXG4tMTNoLTZjLTEyIC43LTE4IDQtMTggMTAgMCAyIDEuNyA3IDUgMTUgMjMuMyA0NiA1MiA4NyA4NiAxMjNsMTAgMTBIMHY0MGgzOTk3ODJcXG5jLTMyOCAwIDAgMCAwIDBsMTAgOGMyNi43IDIwIDY1LjcgNDMgMTE3IDY5LTIuNyAyLTYgMy43LTEwIDUtMzYuNyAxNi03Mi4zIDM3LjNcXG4tMTA3IDY0bC0xMCA4SDB2NDB6TTAgMTU3djQwaDM5OTczMHYtNDB6bTAgMTk0djQwaDM5OTczMHYtNDB6XCIsXG4gIC8vIGxlZnRhcnJvdyBpcyBmcm9tIGdseXBoIFUrMjE5MCBpbiBmb250IEthVGVYIE1haW5cbiAgbGVmdGFycm93OiBcIk00MDAwMDAgMjQxSDExMGwzLTNjNjguNy01Mi43IDExMy43LTEyMFxcbiAxMzUtMjAyIDQtMTQuNyA2LTIzIDYtMjUgMC03LjMtNy0xMS0yMS0xMS04IDAtMTMuMi44LTE1LjUgMi41LTIuMyAxLjctNC4yIDUuOFxcbi01LjUgMTIuNS0xLjMgNC43LTIuNyAxMC4zLTQgMTctMTIgNDguNy0zNC44IDkyLTY4LjUgMTMwUzY1LjMgMjI4LjMgMTggMjQ3XFxuYy0xMCA0LTE2IDcuNy0xOCAxMSAwIDguNyA2IDE0LjMgMTggMTcgNDcuMyAxOC43IDg3LjggNDcgMTIxLjUgODVTMTk2IDQ0MS4zIDIwOFxcbiA0OTBjLjcgMiAxLjMgNSAyIDlzMS4yIDYuNyAxLjUgOGMuMyAxLjMgMSAzLjMgMiA2czIuMiA0LjUgMy41IDUuNWMxLjMgMSAzLjNcXG4gMS44IDYgMi41czYgMSAxMCAxYzE0IDAgMjEtMy43IDIxLTExIDAtMi0yLTEwLjMtNi0yNS0yMC03OS4zLTY1LTE0Ni43LTEzNS0yMDJcXG4gbC0zLTNoMzk5ODkwek0xMDAgMjQxdjQwaDM5OTkwMHYtNDB6XCIsXG4gIC8vIG92ZXJicmFjZSBpcyBmcm9tIGdseXBocyBVKzIzQTkvMjNBOC8yM0E3IGluIGZvbnQgS2FUZVhfU2l6ZTQtUmVndWxhclxuICBsZWZ0YnJhY2U6IFwiTTYgNTQ4bC02LTZ2LTM1bDYtMTFjNTYtMTA0IDEzNS4zLTE4MS4zIDIzOC0yMzIgNTcuMy0yOC43IDExN1xcbi00NSAxNzktNTBoMzk5NTc3djEyMEg0MDNjLTQzLjMgNy04MSAxNS0xMTMgMjYtMTAwLjcgMzMtMTc5LjcgOTEtMjM3IDE3NC0yLjdcXG4gNS02IDktMTAgMTMtLjcgMS03LjMgMS0yMCAxSDZ6XCIsXG4gIGxlZnRicmFjZXVuZGVyOiBcIk0wIDZsNi02aDE3YzEyLjY4OCAwIDE5LjMxMy4zIDIwIDEgNCA0IDcuMzEzIDguMyAxMCAxM1xcbiAzNS4zMTMgNTEuMyA4MC44MTMgOTMuOCAxMzYuNSAxMjcuNSA1NS42ODggMzMuNyAxMTcuMTg4IDU1LjggMTg0LjUgNjYuNS42ODhcXG4gMCAyIC4zIDQgMSAxOC42ODggMi43IDc2IDQuMyAxNzIgNWgzOTk0NTB2MTIwSDQyOWwtNi0xYy0xMjQuNjg4LTgtMjM1LTYxLjdcXG4tMzMxLTE2MUM2MC42ODcgMTM4LjcgMzIuMzEyIDk5LjMgNyA1NEwwIDQxVjZ6XCIsXG4gIC8vIG92ZXJncm91cCBpcyBmcm9tIHRoZSBNblN5bWJvbCBwYWNrYWdlIChwdWJsaWMgZG9tYWluKVxuICBsZWZ0Z3JvdXA6IFwiTTQwMDAwMCA4MFxcbkg0MzVDNjQgODAgMTY4LjMgMjI5LjQgMjEgMjYwYy01LjkgMS4yLTE4IDAtMTggMC0yIDAtMy0xLTMtM3YtMzhDNzYgNjEgMjU3IDBcXG4gNDM1IDBoMzk5NTY1elwiLFxuICBsZWZ0Z3JvdXB1bmRlcjogXCJNNDAwMDAwIDI2Mlxcbkg0MzVDNjQgMjYyIDE2OC4zIDExMi42IDIxIDgyYy01LjktMS4yLTE4IDAtMTggMC0yIDAtMyAxLTMgM3YzOGM3NiAxNTggMjU3IDIxOVxcbiA0MzUgMjE5aDM5OTU2NXpcIixcbiAgLy8gSGFycG9vbnMgYXJlIGZyb20gZ2x5cGggVSsyMUJEIGluIGZvbnQgS2FUZVggTWFpblxuICBsZWZ0aGFycG9vbjogXCJNMCAyNjdjLjcgNS4zIDMgMTAgNyAxNGgzOTk5OTN2LTQwSDkzYzMuM1xcbi0zLjMgMTAuMi05LjUgMjAuNS0xOC41czE3LjgtMTUuOCAyMi41LTIwLjVjNTAuNy01MiA4OC0xMTAuMyAxMTItMTc1IDQtMTEuMyA1XFxuLTE4LjMgMy0yMS0xLjMtNC03LjMtNi0xOC02LTggMC0xMyAuNy0xNSAycy00LjcgNi43LTggMTZjLTQyIDk4LjctMTA3LjMgMTc0LjdcXG4tMTk2IDIyOC02LjcgNC43LTEwLjcgOC0xMiAxMC0xLjMgMi0yIDUuNy0yIDExem0xMDAtMjZ2NDBoMzk5OTAwdi00MHpcIixcbiAgbGVmdGhhcnBvb25wbHVzOiBcIk0wIDI2N2MuNyA1LjMgMyAxMCA3IDE0aDM5OTk5M3YtNDBIOTNjMy4zLTMuMyAxMC4yLTkuNVxcbiAyMC41LTE4LjVzMTcuOC0xNS44IDIyLjUtMjAuNWM1MC43LTUyIDg4LTExMC4zIDExMi0xNzUgNC0xMS4zIDUtMTguMyAzLTIxLTEuM1xcbi00LTcuMy02LTE4LTYtOCAwLTEzIC43LTE1IDJzLTQuNyA2LjctOCAxNmMtNDIgOTguNy0xMDcuMyAxNzQuNy0xOTYgMjI4LTYuNyA0LjdcXG4tMTAuNyA4LTEyIDEwLTEuMyAyLTIgNS43LTIgMTF6bTEwMC0yNnY0MGgzOTk5MDB2LTQwek0wIDQzNXY0MGg0MDAwMDB2LTQwelxcbm0wIDB2NDBoNDAwMDAwdi00MHpcIixcbiAgbGVmdGhhcnBvb25kb3duOiBcIk03IDI0MWMtNCA0LTYuMzMzIDguNjY3LTcgMTQgMCA1LjMzMy42NjcgOSAyIDExczUuMzMzXFxuIDUuMzMzIDEyIDEwYzkwLjY2NyA1NCAxNTYgMTMwIDE5NiAyMjggMy4zMzMgMTAuNjY3IDYuMzMzIDE2LjMzMyA5IDE3IDIgLjY2NyA1XFxuIDEgOSAxaDVjMTAuNjY3IDAgMTYuNjY3LTIgMTgtNiAyLTIuNjY3IDEtOS42NjctMy0yMS0zMi04Ny4zMzMtODIuNjY3LTE1Ny42NjdcXG4tMTUyLTIxMWwtMy0zaDM5OTkwN3YtNDB6TTkzIDI4MSBINDAwMDAwIHYtNDBMNyAyNDF6XCIsXG4gIGxlZnRoYXJwb29uZG93bnBsdXM6IFwiTTcgNDM1Yy00IDQtNi4zIDguNy03IDE0IDAgNS4zLjcgOSAyIDExczUuMyA1LjMgMTJcXG4gMTBjOTAuNyA1NCAxNTYgMTMwIDE5NiAyMjggMy4zIDEwLjcgNi4zIDE2LjMgOSAxNyAyIC43IDUgMSA5IDFoNWMxMC43IDAgMTYuN1xcbi0yIDE4LTYgMi0yLjcgMS05LjctMy0yMS0zMi04Ny4zLTgyLjctMTU3LjctMTUyLTIxMWwtMy0zaDM5OTkwN3YtNDBIN3ptOTMgMFxcbnY0MGgzOTk5MDB2LTQwek0wIDI0MXY0MGgzOTk5MDB2LTQwem0wIDB2NDBoMzk5OTAwdi00MHpcIixcbiAgLy8gaG9vayBpcyBmcm9tIGdseXBoIFUrMjFBOSBpbiBmb250IEthVGVYIE1haW5cbiAgbGVmdGhvb2s6IFwiTTQwMDAwMCAyODEgSDEwM3MtMzMtMTEuMi02MS0zMy41UzAgMTk3LjMgMCAxNjRzMTQuMi02MS4yIDQyLjVcXG4tODMuNUM3MC44IDU4LjIgMTA0IDQ3IDE0MiA0NyBjMTYuNyAwIDI1IDYuNyAyNSAyMCAwIDEyLTguNyAxOC43LTI2IDIwLTQwIDMuM1xcbi02OC43IDE1LjctODYgMzctMTAgMTItMTUgMjUuMy0xNSA0MCAwIDIyLjcgOS44IDQwLjcgMjkuNSA1NCAxOS43IDEzLjMgNDMuNSAyMVxcbiA3MS41IDIzaDM5OTg1OXpNMTAzIDI4MXYtNDBoMzk5ODk3djQwelwiLFxuICBsZWZ0bGluZXNlZ21lbnQ6IFwiTTQwIDI4MSBWNDI4IEgwIFY5NCBINDAgVjI0MSBINDAwMDAwIHY0MHpcXG5NNDAgMjgxIFY0MjggSDAgVjk0IEg0MCBWMjQxIEg0MDAwMDAgdjQwelwiLFxuICBsZWZ0bWFwc3RvOiBcIk00MCAyODEgVjQ0OEgwVjc0SDQwVjI0MUg0MDAwMDB2NDB6XFxuTTQwIDI4MSBWNDQ4SDBWNzRINDBWMjQxSDQwMDAwMHY0MHpcIixcbiAgLy8gdG9mcm9tIGlzIGZyb20gZ2x5cGggVSsyMUM0IGluIGZvbnQgS2FUZVggQU1TIFJlZ3VsYXJcbiAgbGVmdFRvRnJvbTogXCJNMCAxNDdoNDAwMDAwdjQwSDB6bTAgMjE0YzY4IDQwIDExNS43IDk1LjcgMTQzIDE2N2gyMmMxNS4zIDAgMjNcXG4tLjMgMjMtMSAwLTEuMy01LjMtMTMuNy0xNi0zNy0xOC0zNS4zLTQxLjMtNjktNzAtMTAxbC03LThoMzk5OTA1di00MEg5NWw3LThcXG5jMjguNy0zMiA1Mi02NS43IDcwLTEwMSAxMC43LTIzLjMgMTYtMzUuNyAxNi0zNyAwLS43LTcuNy0xLTIzLTFoLTIyQzExNS43IDI2NS4zXFxuIDY4IDMyMSAwIDM2MXptMC0xNzR2LTQwaDM5OTkwMHY0MHptMTAwIDE1NHY0MGgzOTk5MDB2LTQwelwiLFxuICBsb25nZXF1YWw6IFwiTTAgNTAgaDQwMDAwMCB2NDBIMHogbTAgMTk0aDQwMDAwdjQwSDB6XFxuTTAgNTAgaDQwMDAwMCB2NDBIMHogbTAgMTk0aDQwMDAwdjQwSDB6XCIsXG4gIG1pZGJyYWNlOiBcIk0yMDA0MjggMzM0XFxuYy0xMDAuNy04LjMtMTk1LjMtNDQtMjgwLTEwOC01NS4zLTQyLTEwMS43LTkzLTEzOS0xNTNsLTktMTRjLTIuNyA0LTUuNyA4LjctOSAxNFxcbi01My4zIDg2LjctMTIzLjcgMTUzLTIxMSAxOTktNjYuNyAzNi0xMzcuMyA1Ni4zLTIxMiA2MkgwVjIxNGgxOTk1NjhjMTc4LjMtMTEuN1xcbiAzMTEuNy03OC4zIDQwMy0yMDEgNi04IDkuNy0xMiAxMS0xMiAuNy0uNyA2LjctMSAxOC0xczE3LjMuMyAxOCAxYzEuMyAwIDUgNCAxMVxcbiAxMiA0NC43IDU5LjMgMTAxLjMgMTA2LjMgMTcwIDE0MXMxNDUuMyA1NC4zIDIyOSA2MGgxOTk1NzJ2MTIwelwiLFxuICBtaWRicmFjZXVuZGVyOiBcIk0xOTk1NzIgMjE0XFxuYzEwMC43IDguMyAxOTUuMyA0NCAyODAgMTA4IDU1LjMgNDIgMTAxLjcgOTMgMTM5IDE1M2w5IDE0YzIuNy00IDUuNy04LjcgOS0xNFxcbiA1My4zLTg2LjcgMTIzLjctMTUzIDIxMS0xOTkgNjYuNy0zNiAxMzcuMy01Ni4zIDIxMi02MmgxOTk1Njh2MTIwSDIwMDQzMmMtMTc4LjNcXG4gMTEuNy0zMTEuNyA3OC4zLTQwMyAyMDEtNiA4LTkuNyAxMi0xMSAxMi0uNy43LTYuNyAxLTE4IDFzLTE3LjMtLjMtMTgtMWMtMS4zIDBcXG4tNS00LTExLTEyLTQ0LjctNTkuMy0xMDEuMy0xMDYuMy0xNzAtMTQxcy0xNDUuMy01NC4zLTIyOS02MEgwVjIxNHpcIixcbiAgb2lpbnRTaXplMTogXCJNNTEyLjYgNzEuNmMyNzIuNiAwIDMyMC4zIDEwNi44IDMyMC4zIDE3OC4yIDAgNzAuOC00Ny43IDE3Ny42XFxuLTMyMC4zIDE3Ny42UzE5My4xIDMyMC42IDE5My4xIDI0OS44YzAtNzEuNCA0Ni45LTE3OC4yIDMxOS41LTE3OC4yelxcbm0zNjguMSAxNzguMmMwLTg2LjQtNjAuOS0yMTUuNC0zNjguMS0yMTUuNC0zMDYuNCAwLTM2Ny4zIDEyOS0zNjcuMyAyMTUuNCAwIDg1LjhcXG42MC45IDIxNC44IDM2Ny4zIDIxNC44IDMwNy4yIDAgMzY4LjEtMTI5IDM2OC4xLTIxNC44elwiLFxuICBvaWludFNpemUyOiBcIk03NTcuOCAxMDAuMWMzODQuNyAwIDQ1MS4xIDEzNy42IDQ1MS4xIDIzMCAwIDkxLjMtNjYuNCAyMjguOFxcbi00NTEuMSAyMjguOC0zODYuMyAwLTQ1Mi43LTEzNy41LTQ1Mi43LTIyOC44IDAtOTIuNCA2Ni40LTIzMCA0NTIuNy0yMzB6XFxubTUwMi40IDIzMGMwLTExMS4yLTgyLjQtMjc3LjItNTAyLjQtMjc3LjJzLTUwNCAxNjYtNTA0IDI3Ny4yXFxuYzAgMTEwIDg0IDI3NiA1MDQgMjc2czUwMi40LTE2NiA1MDIuNC0yNzZ6XCIsXG4gIG9paWludFNpemUxOiBcIk02ODEuNCA3MS42YzQwOC45IDAgNDgwLjUgMTA2LjggNDgwLjUgMTc4LjIgMCA3MC44LTcxLjYgMTc3LjZcXG4tNDgwLjUgMTc3LjZTMjAyLjEgMzIwLjYgMjAyLjEgMjQ5LjhjMC03MS40IDcwLjUtMTc4LjIgNDc5LjMtMTc4LjJ6XFxubTUyNS44IDE3OC4yYzAtODYuNC04Ni44LTIxNS40LTUyNS43LTIxNS40LTQzNy45IDAtNTI0LjcgMTI5LTUyNC43IDIxNS40IDBcXG44NS44IDg2LjggMjE0LjggNTI0LjcgMjE0LjggNDM4LjkgMCA1MjUuNy0xMjkgNTI1LjctMjE0Ljh6XCIsXG4gIG9paWludFNpemUyOiBcIk0xMDIxLjIgNTNjNjAzLjYgMCA3MDcuOCAxNjUuOCA3MDcuOCAyNzcuMiAwIDExMC0xMDQuMiAyNzUuOFxcbi03MDcuOCAyNzUuOC02MDYgMC03MTAuMi0xNjUuOC03MTAuMi0yNzUuOEMzMTEgMjE4LjggNDE1LjIgNTMgMTAyMS4yIDUzelxcbm03NzAuNCAyNzcuMWMwLTEzMS4yLTEyNi40LTMyNy42LTc3MC41LTMyNy42UzI0OC40IDE5OC45IDI0OC40IDMzMC4xXFxuYzAgMTMwIDEyOC44IDMyNi40IDc3Mi43IDMyNi40czc3MC41LTE5Ni40IDc3MC41LTMyNi40elwiLFxuICByaWdodGFycm93OiBcIk0wIDI0MXY0MGgzOTk4OTFjLTQ3LjMgMzUuMy04NCA3OC0xMTAgMTI4XFxuLTE2LjcgMzItMjcuNyA2My43LTMzIDk1IDAgMS4zLS4yIDIuNy0uNSA0LS4zIDEuMy0uNSAyLjMtLjUgMyAwIDcuMyA2LjcgMTEgMjBcXG4gMTEgOCAwIDEzLjItLjggMTUuNS0yLjUgMi4zLTEuNyA0LjItNS41IDUuNS0xMS41IDItMTMuMyA1LjctMjcgMTEtNDEgMTQuNy00NC43XFxuIDM5LTg0LjUgNzMtMTE5LjVzNzMuNy02MC4yIDExOS03NS41YzYtMiA5LTUuNyA5LTExcy0zLTktOS0xMWMtNDUuMy0xNS4zLTg1XFxuLTQwLjUtMTE5LTc1LjVzLTU4LjMtNzQuOC03My0xMTkuNWMtNC43LTE0LTguMy0yNy4zLTExLTQwLTEuMy02LjctMy4yLTEwLjgtNS41XFxuLTEyLjUtMi4zLTEuNy03LjUtMi41LTE1LjUtMi41LTE0IDAtMjEgMy43LTIxIDExIDAgMiAyIDEwLjMgNiAyNSAyMC43IDgzLjMgNjdcXG4gMTUxLjcgMTM5IDIwNXptMCAwdjQwaDM5OTkwMHYtNDB6XCIsXG4gIHJpZ2h0YnJhY2U6IFwiTTQwMDAwMCA1NDJsXFxuLTYgNmgtMTdjLTEyLjcgMC0xOS4zLS4zLTIwLTEtNC00LTcuMy04LjMtMTAtMTMtMzUuMy01MS4zLTgwLjgtOTMuOC0xMzYuNS0xMjcuNVxcbnMtMTE3LjItNTUuOC0xODQuNS02Ni41Yy0uNyAwLTItLjMtNC0xLTE4LjctMi43LTc2LTQuMy0xNzItNUgwVjIxNGgzOTk1NzFsNiAxXFxuYzEyNC43IDggMjM1IDYxLjcgMzMxIDE2MSAzMS4zIDMzLjMgNTkuNyA3Mi43IDg1IDExOGw3IDEzdjM1elwiLFxuICByaWdodGJyYWNldW5kZXI6IFwiTTM5OTk5NCAwbDYgNnYzNWwtNiAxMWMtNTYgMTA0LTEzNS4zIDE4MS4zLTIzOCAyMzItNTcuM1xcbiAyOC43LTExNyA0NS0xNzkgNTBILTMwMFYyMTRoMzk5ODk3YzQzLjMtNyA4MS0xNSAxMTMtMjYgMTAwLjctMzMgMTc5LjctOTEgMjM3XFxuLTE3NCAyLjctNSA2LTkgMTAtMTMgLjctMSA3LjMtMSAyMC0xaDE3elwiLFxuICByaWdodGdyb3VwOiBcIk0wIDgwaDM5OTU2NWMzNzEgMCAyNjYuNyAxNDkuNCA0MTQgMTgwIDUuOSAxLjIgMTggMCAxOCAwIDIgMFxcbiAzLTEgMy0zdi0zOGMtNzYtMTU4LTI1Ny0yMTktNDM1LTIxOUgwelwiLFxuICByaWdodGdyb3VwdW5kZXI6IFwiTTAgMjYyaDM5OTU2NWMzNzEgMCAyNjYuNy0xNDkuNCA0MTQtMTgwIDUuOS0xLjIgMTggMCAxOFxcbiAwIDIgMCAzIDEgMyAzdjM4Yy03NiAxNTgtMjU3IDIxOS00MzUgMjE5SDB6XCIsXG4gIHJpZ2h0aGFycG9vbjogXCJNMCAyNDF2NDBoMzk5OTkzYzQuNy00LjcgNy05LjMgNy0xNCAwLTkuM1xcbi0zLjctMTUuMy0xMS0xOC05Mi43LTU2LjctMTU5LTEzMy43LTE5OS0yMzEtMy4zLTkuMy02LTE0LjctOC0xNi0yLTEuMy03LTItMTUtMlxcbi0xMC43IDAtMTYuNyAyLTE4IDYtMiAyLjctMSA5LjcgMyAyMSAxNS4zIDQyIDM2LjcgODEuOCA2NCAxMTkuNSAyNy4zIDM3LjcgNThcXG4gNjkuMiA5MiA5NC41em0wIDB2NDBoMzk5OTAwdi00MHpcIixcbiAgcmlnaHRoYXJwb29ucGx1czogXCJNMCAyNDF2NDBoMzk5OTkzYzQuNy00LjcgNy05LjMgNy0xNCAwLTkuMy0zLjctMTUuMy0xMVxcbi0xOC05Mi43LTU2LjctMTU5LTEzMy43LTE5OS0yMzEtMy4zLTkuMy02LTE0LjctOC0xNi0yLTEuMy03LTItMTUtMi0xMC43IDAtMTYuN1xcbiAyLTE4IDYtMiAyLjctMSA5LjcgMyAyMSAxNS4zIDQyIDM2LjcgODEuOCA2NCAxMTkuNSAyNy4zIDM3LjcgNTggNjkuMiA5MiA5NC41elxcbm0wIDB2NDBoMzk5OTAwdi00MHogbTEwMCAxOTR2NDBoMzk5OTAwdi00MHptMCAwdjQwaDM5OTkwMHYtNDB6XCIsXG4gIHJpZ2h0aGFycG9vbmRvd246IFwiTTM5OTc0NyA1MTFjMCA3LjMgNi43IDExIDIwIDExIDggMCAxMy0uOCAxNS0yLjVzNC43LTYuOFxcbiA4LTE1LjVjNDAtOTQgOTkuMy0xNjYuMyAxNzgtMjE3IDEzLjMtOCAyMC4zLTEyLjMgMjEtMTMgNS4zLTMuMyA4LjUtNS44IDkuNVxcbi03LjUgMS0xLjcgMS41LTUuMiAxLjUtMTAuNXMtMi4zLTEwLjMtNy0xNUgwdjQwaDM5OTkwOGMtMzQgMjUuMy02NC43IDU3LTkyIDk1XFxuLTI3LjMgMzgtNDguNyA3Ny43LTY0IDExOS0zLjMgOC43LTUgMTQtNSAxNnpNMCAyNDF2NDBoMzk5OTAwdi00MHpcIixcbiAgcmlnaHRoYXJwb29uZG93bnBsdXM6IFwiTTM5OTc0NyA3MDVjMCA3LjMgNi43IDExIDIwIDExIDggMCAxMy0uOFxcbiAxNS0yLjVzNC43LTYuOCA4LTE1LjVjNDAtOTQgOTkuMy0xNjYuMyAxNzgtMjE3IDEzLjMtOCAyMC4zLTEyLjMgMjEtMTMgNS4zLTMuM1xcbiA4LjUtNS44IDkuNS03LjUgMS0xLjcgMS41LTUuMiAxLjUtMTAuNXMtMi4zLTEwLjMtNy0xNUgwdjQwaDM5OTkwOGMtMzQgMjUuM1xcbi02NC43IDU3LTkyIDk1LTI3LjMgMzgtNDguNyA3Ny43LTY0IDExOS0zLjMgOC43LTUgMTQtNSAxNnpNMCA0MzV2NDBoMzk5OTAwdi00MHpcXG5tMC0xOTR2NDBoNDAwMDAwdi00MHptMCAwdjQwaDQwMDAwMHYtNDB6XCIsXG4gIHJpZ2h0aG9vazogXCJNMzk5ODU5IDI0MWMtNzY0IDAgMCAwIDAgMCA0MC0zLjMgNjguNy0xNS43IDg2LTM3IDEwLTEyIDE1LTI1LjNcXG4gMTUtNDAgMC0yMi43LTkuOC00MC43LTI5LjUtNTQtMTkuNy0xMy4zLTQzLjUtMjEtNzEuNS0yMy0xNy4zLTEuMy0yNi04LTI2LTIwIDBcXG4tMTMuMyA4LjctMjAgMjYtMjAgMzggMCA3MSAxMS4yIDk5IDMzLjUgMCAwIDcgNS42IDIxIDE2LjcgMTQgMTEuMiAyMSAzMy41IDIxXFxuIDY2LjhzLTE0IDYxLjItNDIgODMuNWMtMjggMjIuMy02MSAzMy41LTk5IDMzLjVMMCAyNDF6IE0wIDI4MXYtNDBoMzk5ODU5djQwelwiLFxuICByaWdodGxpbmVzZWdtZW50OiBcIk0zOTk5NjAgMjQxIFY5NCBoNDAgVjQyOCBoLTQwIFYyODEgSDAgdi00MHpcXG5NMzk5OTYwIDI0MSBWOTQgaDQwIFY0MjggaC00MCBWMjgxIEgwIHYtNDB6XCIsXG4gIHJpZ2h0VG9Gcm9tOiBcIk00MDAwMDAgMTY3Yy03MC43LTQyLTExOC05Ny43LTE0Mi0xNjdoLTIzYy0xNS4zIDAtMjMgLjMtMjNcXG4gMSAwIDEuMyA1LjMgMTMuNyAxNiAzNyAxOCAzNS4zIDQxLjMgNjkgNzAgMTAxbDcgOEgwdjQwaDM5OTkwNWwtNyA4Yy0yOC43IDMyXFxuLTUyIDY1LjctNzAgMTAxLTEwLjcgMjMuMy0xNiAzNS43LTE2IDM3IDAgLjcgNy43IDEgMjMgMWgyM2MyNC02OS4zIDcxLjMtMTI1IDE0Mlxcbi0xNjd6IE0xMDAgMTQ3djQwaDM5OTkwMHYtNDB6TTAgMzQxdjQwaDM5OTkwMHYtNDB6XCIsXG4gIC8vIHR3b2hlYWRsZWZ0YXJyb3cgaXMgZnJvbSBnbHlwaCBVKzIxOUUgaW4gZm9udCBLYVRlWCBBTVMgUmVndWxhclxuICB0d29oZWFkbGVmdGFycm93OiBcIk0wIDE2N2M2OCA0MFxcbiAxMTUuNyA5NS43IDE0MyAxNjdoMjJjMTUuMyAwIDIzLS4zIDIzLTEgMC0xLjMtNS4zLTEzLjctMTYtMzctMTgtMzUuMy00MS4zLTY5XFxuLTcwLTEwMWwtNy04aDEyNWw5IDdjNTAuNyAzOS4zIDg1IDg2IDEwMyAxNDBoNDZjMC00LjctNi4zLTE4LjctMTktNDItMTgtMzUuM1xcbi00MC02Ny4zLTY2LTk2bC05LTloMzk5NzE2di00MEgyODRsOS05YzI2LTI4LjcgNDgtNjAuNyA2Ni05NiAxMi43LTIzLjMzMyAxOVxcbi0zNy4zMzMgMTktNDJoLTQ2Yy0xOCA1NC01Mi4zIDEwMC43LTEwMyAxNDBsLTkgN0g5NWw3LThjMjguNy0zMiA1Mi02NS43IDcwLTEwMVxcbiAxMC43LTIzLjMzMyAxNi0zNS43IDE2LTM3IDAtLjctNy43LTEtMjMtMWgtMjJDMTE1LjcgNzEuMyA2OCAxMjcgMCAxNjd6XCIsXG4gIHR3b2hlYWRyaWdodGFycm93OiBcIk00MDAwMDAgMTY3XFxuYy02OC00MC0xMTUuNy05NS43LTE0My0xNjdoLTIyYy0xNS4zIDAtMjMgLjMtMjMgMSAwIDEuMyA1LjMgMTMuNyAxNiAzNyAxOCAzNS4zXFxuIDQxLjMgNjkgNzAgMTAxbDcgOGgtMTI1bC05LTdjLTUwLjctMzkuMy04NS04Ni0xMDMtMTQwaC00NmMwIDQuNyA2LjMgMTguNyAxOSA0MlxcbiAxOCAzNS4zIDQwIDY3LjMgNjYgOTZsOSA5SDB2NDBoMzk5NzE2bC05IDljLTI2IDI4LjctNDggNjAuNy02NiA5Ni0xMi43IDIzLjMzM1xcbi0xOSAzNy4zMzMtMTkgNDJoNDZjMTgtNTQgNTIuMy0xMDAuNyAxMDMtMTQwbDktN2gxMjVsLTcgOGMtMjguNyAzMi01MiA2NS43LTcwXFxuIDEwMS0xMC43IDIzLjMzMy0xNiAzNS43LTE2IDM3IDAgLjcgNy43IDEgMjMgMWgyMmMyNy4zLTcxLjMgNzUtMTI3IDE0My0xNjd6XCIsXG4gIC8vIHRpbGRlMSBpcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgYSBnbHlwaCBmcm9tIHRoZSBNblN5bWJvbCBwYWNrYWdlXG4gIHRpbGRlMTogXCJNMjAwIDU1LjUzOGMtNzcgMC0xNjggNzMuOTUzLTE3NyA3My45NTMtMyAwLTdcXG4tMi4xNzUtOS01LjQzN0wyIDk3Yy0xLTItMi00LTItNiAwLTQgMi03IDUtOWwyMC0xMkMxMTYgMTIgMTcxIDAgMjA3IDBjODYgMFxcbiAxMTQgNjggMTkxIDY4IDc4IDAgMTY4LTY4IDE3Ny02OCA0IDAgNyAyIDkgNWwxMiAxOWMxIDIuMTc1IDIgNC4zNSAyIDYuNTI1IDBcXG4gNC4zNS0yIDcuNjEzLTUgOS43ODhsLTE5IDEzLjA1Yy05MiA2My4wNzctMTE2LjkzNyA3NS4zMDgtMTgzIDc2LjEyOFxcbi02OC4yNjcuODQ3LTExMy03My45NTItMTkxLTczLjk1MnpcIixcbiAgLy8gZGl0dG8gdGlsZGUyLCB0aWxkZTMsICYgdGlsZGU0XG4gIHRpbGRlMjogXCJNMzQ0IDU1LjI2NmMtMTQyIDAtMzAwLjYzOCA4MS4zMTYtMzExLjUgODYuNDE4XFxuLTguMDEgMy43NjItMjIuNSAxMC45MS0yMy41IDUuNTYyTDEgMTIwYy0xLTItMS0zLTEtNCAwLTUgMy05IDgtMTBsMTguNC05QzE2MC45XFxuIDMxLjkgMjgzIDAgMzU4IDBjMTQ4IDAgMTg4IDEyMiAzMzEgMTIyczMxNC05NyAzMjYtOTdjNCAwIDggMiAxMCA3bDcgMjEuMTE0XFxuYzEgMi4xNCAxIDMuMjEgMSA0LjI4IDAgNS4zNDctMyA5LjYyNi03IDEwLjY5NmwtMjIuMyAxMi42MjJDODUyLjYgMTU4LjM3MiA3NTFcXG4gMTgxLjQ3NiA2NzYgMTgxLjQ3NmMtMTQ5IDAtMTg5LTEyNi4yMS0zMzItMTI2LjIxelwiLFxuICB0aWxkZTM6IFwiTTc4NiA1OUM0NTcgNTkgMzIgMTc1LjI0MiAxMyAxNzUuMjQyYy02IDAtMTAtMy40NTdcXG4tMTEtMTAuMzdMLjE1IDEzOGMtMS03IDMtMTIgMTAtMTNsMTkuMi02LjRDMzc4LjQgNDAuNyA2MzQuMyAwIDgwNC4zIDBjMzM3IDBcXG4gNDExLjggMTU3IDc0Ni44IDE1NyAzMjggMCA3NTQtMTEyIDc3My0xMTIgNSAwIDEwIDMgMTEgOWwxIDE0LjA3NWMxIDguMDY2LS42OTdcXG4gMTYuNTk1LTYuNjk3IDE3LjQ5MmwtMjEuMDUyIDcuMzFjLTM2Ny45IDk4LjE0Ni02MDkuMTUgMTIyLjY5Ni03NzguMTUgMTIyLjY5NlxcbiAtMzM4IDAtNDA5LTE1Ni41NzMtNzQ0LTE1Ni41NzN6XCIsXG4gIHRpbGRlNDogXCJNNzg2IDU4QzQ1NyA1OCAzMiAxNzcuNDg3IDEzIDE3Ny40ODdjLTYgMC0xMC0zLjM0NVxcbi0xMS0xMC4wMzVMLjE1IDE0M2MtMS03IDMtMTIgMTAtMTNsMjItNi43QzM4MS4yIDM1IDYzNy4xNSAwIDgwNy4xNSAwYzMzNyAwIDQwOVxcbiAxNzcgNzQ0IDE3NyAzMjggMCA3NTQtMTI3IDc3My0xMjcgNSAwIDEwIDMgMTEgOWwxIDE0Ljc5NGMxIDcuODA1LTMgMTMuMzgtOVxcbiAxNC40OTVsLTIwLjcgNS41NzRjLTM2Ni44NSA5OS43OS02MDcuMyAxMzkuMzcyLTc3Ni4zIDEzOS4zNzItMzM4IDAtNDA5XFxuIC0xNzUuMjM2LTc0NC0xNzUuMjM2elwiLFxuICAvLyB2ZWMgaXMgZnJvbSBnbHlwaCBVKzIwRDcgaW4gZm9udCBLYVRlWCBNYWluXG4gIHZlYzogXCJNMzc3IDIwYzAtNS4zMzMgMS44MzMtMTAgNS41LTE0UzM5MSAwIDM5NyAwYzQuNjY3IDAgOC42NjcgMS42NjcgMTIgNVxcbjMuMzMzIDIuNjY3IDYuNjY3IDkgMTAgMTkgNi42NjcgMjQuNjY3IDIwLjMzMyA0My42NjcgNDEgNTcgNy4zMzMgNC42NjcgMTFcXG4xMC42NjcgMTEgMTggMCA2LTEgMTAtMyAxMnMtNi42NjcgNS0xNCA5Yy0yOC42NjcgMTQuNjY3LTUzLjY2NyAzNS42NjctNzUgNjNcXG4tMS4zMzMgMS4zMzMtMy4xNjcgMy41LTUuNSA2LjVzLTQgNC44MzMtNSA1LjVjLTEgLjY2Ny0yLjUgMS4zMzMtNC41IDJzLTQuMzMzIDFcXG4tNyAxYy00LjY2NyAwLTkuMTY3LTEuODMzLTEzLjUtNS41UzMzNyAxODQgMzM3IDE3OGMwLTEyLjY2NyAxNS42NjctMzIuMzMzIDQ3LTU5XFxuSDIxM2wtMTcxLTFjLTguNjY3LTYtMTMtMTIuMzMzLTEzLTE5IDAtNC42NjcgNC4zMzMtMTEuMzMzIDEzLTIwaDM1OVxcbmMtMTYtMjUuMzMzLTI0LTQ1LTI0LTU5elwiLFxuICAvLyB3aWRlaGF0MSBpcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgYSBnbHlwaCBmcm9tIHRoZSBNblN5bWJvbCBwYWNrYWdlXG4gIHdpZGVoYXQxOiBcIk01MjkgMGg1bDUxOSAxMTVjNSAxIDkgNSA5IDEwIDAgMS0xIDItMSAzbC00IDIyXFxuYy0xIDUtNSA5LTExIDloLTJMNTMyIDY3IDE5IDE1OWgtMmMtNSAwLTktNC0xMS05bC01LTIyYy0xLTYgMi0xMiA4LTEzelwiLFxuICAvLyBkaXR0byB3aWRlaGF0Miwgd2lkZWhhdDMsICYgd2lkZWhhdDRcbiAgd2lkZWhhdDI6IFwiTTExODEgMGgybDExNzEgMTc2YzYgMCAxMCA1IDEwIDExbC0yIDIzYy0xIDYtNSAxMFxcbi0xMSAxMGgtMUwxMTgyIDY3IDE1IDIyMGgtMWMtNiAwLTEwLTQtMTEtMTBsLTItMjNjLTEtNiA0LTExIDEwLTExelwiLFxuICB3aWRlaGF0MzogXCJNMTE4MSAwaDJsMTE3MSAyMzZjNiAwIDEwIDUgMTAgMTFsLTIgMjNjLTEgNi01IDEwXFxuLTExIDEwaC0xTDExODIgNjcgMTUgMjgwaC0xYy02IDAtMTAtNC0xMS0xMGwtMi0yM2MtMS02IDQtMTEgMTAtMTF6XCIsXG4gIHdpZGVoYXQ0OiBcIk0xMTgxIDBoMmwxMTcxIDI5NmM2IDAgMTAgNSAxMCAxMWwtMiAyM2MtMSA2LTUgMTBcXG4tMTEgMTBoLTFMMTE4MiA2NyAxNSAzNDBoLTFjLTYgMC0xMC00LTExLTEwbC0yLTIzYy0xLTYgNC0xMSAxMC0xMXpcIixcbiAgLy8gd2lkZWNoZWNrIHBhdGhzIGFyZSBhbGwgaW52ZXJ0ZWQgdmVyc2lvbnMgb2Ygd2lkZWhhdFxuICB3aWRlY2hlY2sxOiBcIk01MjksMTU5aDVsNTE5LC0xMTVjNSwtMSw5LC01LDksLTEwYzAsLTEsLTEsLTIsLTEsLTNsLTQsLTIyYy0xLFxcbi01LC01LC05LC0xMSwtOWgtMmwtNTEyLDkybC01MTMsLTkyaC0yYy01LDAsLTksNCwtMTEsOWwtNSwyMmMtMSw2LDIsMTIsOCwxM3pcIixcbiAgd2lkZWNoZWNrMjogXCJNMTE4MSwyMjBoMmwxMTcxLC0xNzZjNiwwLDEwLC01LDEwLC0xMWwtMiwtMjNjLTEsLTYsLTUsLTEwLFxcbi0xMSwtMTBoLTFsLTExNjgsMTUzbC0xMTY3LC0xNTNoLTFjLTYsMCwtMTAsNCwtMTEsMTBsLTIsMjNjLTEsNiw0LDExLDEwLDExelwiLFxuICB3aWRlY2hlY2szOiBcIk0xMTgxLDI4MGgybDExNzEsLTIzNmM2LDAsMTAsLTUsMTAsLTExbC0yLC0yM2MtMSwtNiwtNSwtMTAsXFxuLTExLC0xMGgtMWwtMTE2OCwyMTNsLTExNjcsLTIxM2gtMWMtNiwwLC0xMCw0LC0xMSwxMGwtMiwyM2MtMSw2LDQsMTEsMTAsMTF6XCIsXG4gIHdpZGVjaGVjazQ6IFwiTTExODEsMzQwaDJsMTE3MSwtMjk2YzYsMCwxMCwtNSwxMCwtMTFsLTIsLTIzYy0xLC02LC01LC0xMCxcXG4tMTEsLTEwaC0xbC0xMTY4LDI3M2wtMTE2NywtMjczaC0xYy02LDAsLTEwLDQsLTExLDEwbC0yLDIzYy0xLDYsNCwxMSwxMCwxMXpcIixcbiAgLy8gVGhlIG5leHQgdGVuIHBhdGhzIHN1cHBvcnQgcmVhY3Rpb24gYXJyb3dzIGZyb20gdGhlIG1oY2hlbSBwYWNrYWdlLlxuICAvLyBBcnJvd3MgZm9yIFxcY2V7PC0tPn0gYXJlIG9mZnNldCBmcm9tIHhBeGlzIGJ5IDAuMjJleCwgcGVyIG1oY2hlbSBpbiBMYVRlWFxuICAvLyBiYXJhYm92ZWxlZnRhcnJvdyBpcyBtb3N0bHkgZnJvbSBmcm9tIGdseXBoIFUrMjE5MCBpbiBmb250IEthVGVYIE1haW5cbiAgYmFyYWJvdmVsZWZ0YXJyb3c6IFwiTTQwMDAwMCA2MjBoLTM5OTg5MGwzIC0zYzY4LjcgLTUyLjcgMTEzLjcgLTEyMCAxMzUgLTIwMlxcbmM0IC0xNC43IDYgLTIzIDYgLTI1YzAgLTcuMyAtNyAtMTEgLTIxIC0xMWMtOCAwIC0xMy4yIDAuOCAtMTUuNSAyLjVcXG5jLTIuMyAxLjcgLTQuMiA1LjggLTUuNSAxMi41Yy0xLjMgNC43IC0yLjcgMTAuMyAtNCAxN2MtMTIgNDguNyAtMzQuOCA5MiAtNjguNSAxMzBcXG5zLTc0LjIgNjYuMyAtMTIxLjUgODVjLTEwIDQgLTE2IDcuNyAtMTggMTFjMCA4LjcgNiAxNC4zIDE4IDE3YzQ3LjMgMTguNyA4Ny44IDQ3XFxuMTIxLjUgODVzNTYuNSA4MS4zIDY4LjUgMTMwYzAuNyAyIDEuMyA1IDIgOXMxLjIgNi43IDEuNSA4YzAuMyAxLjMgMSAzLjMgMiA2XFxuczIuMiA0LjUgMy41IDUuNWMxLjMgMSAzLjMgMS44IDYgMi41czYgMSAxMCAxYzE0IDAgMjEgLTMuNyAyMSAtMTFcXG5jMCAtMiAtMiAtMTAuMyAtNiAtMjVjLTIwIC03OS4zIC02NSAtMTQ2LjcgLTEzNSAtMjAybC0zIC0zaDM5OTg5MHpcXG5NMTAwIDYyMHY0MGgzOTk5MDB2LTQweiBNMCAyNDF2NDBoMzk5OTAwdi00MHpNMCAyNDF2NDBoMzk5OTAwdi00MHpcIixcbiAgLy8gcmlnaHRhcnJvd2Fib3ZlYmFyIGlzIG1vc3RseSBmcm9tIGdseXBoIFUrMjE5MiwgS2FUZVggTWFpblxuICByaWdodGFycm93YWJvdmViYXI6IFwiTTAgMjQxdjQwaDM5OTg5MWMtNDcuMyAzNS4zLTg0IDc4LTExMCAxMjgtMTYuNyAzMlxcbi0yNy43IDYzLjctMzMgOTUgMCAxLjMtLjIgMi43LS41IDQtLjMgMS4zLS41IDIuMy0uNSAzIDAgNy4zIDYuNyAxMSAyMCAxMSA4IDBcXG4xMy4yLS44IDE1LjUtMi41IDIuMy0xLjcgNC4yLTUuNSA1LjUtMTEuNSAyLTEzLjMgNS43LTI3IDExLTQxIDE0LjctNDQuNyAzOVxcbi04NC41IDczLTExOS41czczLjctNjAuMiAxMTktNzUuNWM2LTIgOS01LjcgOS0xMXMtMy05LTktMTFjLTQ1LjMtMTUuMy04NS00MC41XFxuLTExOS03NS41cy01OC4zLTc0LjgtNzMtMTE5LjVjLTQuNy0xNC04LjMtMjcuMy0xMS00MC0xLjMtNi43LTMuMi0xMC44LTUuNVxcbi0xMi41LTIuMy0xLjctNy41LTIuNS0xNS41LTIuNS0xNCAwLTIxIDMuNy0yMSAxMSAwIDIgMiAxMC4zIDYgMjUgMjAuNyA4My4zIDY3XFxuMTUxLjcgMTM5IDIwNXptOTYgMzc5aDM5OTg5NHY0MEgwem0wIDBoMzk5OTA0djQwSDB6XCIsXG4gIC8vIFRoZSBzaG9ydCBsZWZ0IGhhcnBvb24gaGFzIDAuNWVtIChpLmUuIDUwMCB1bml0cykga2VybiBvbiB0aGUgbGVmdCBlbmQuXG4gIC8vIFJlZiBmcm9tIG1oY2hlbS5zdHk6IFxccmxhcHtcXHJhaXNlYm94ey0uMjJleH17JFxca2VybjAuNWVtXG4gIGJhcmFib3Zlc2hvcnRsZWZ0aGFycG9vbjogXCJNNTA3LDQzNWMtNCw0LC02LjMsOC43LC03LDE0YzAsNS4zLDAuNyw5LDIsMTFcXG5jMS4zLDIsNS4zLDUuMywxMiwxMGM5MC43LDU0LDE1NiwxMzAsMTk2LDIyOGMzLjMsMTAuNyw2LjMsMTYuMyw5LDE3XFxuYzIsMC43LDUsMSw5LDFjMCwwLDUsMCw1LDBjMTAuNywwLDE2LjcsLTIsMTgsLTZjMiwtMi43LDEsLTkuNywtMywtMjFcXG5jLTMyLC04Ny4zLC04Mi43LC0xNTcuNywtMTUyLC0yMTFjMCwwLC0zLC0zLC0zLC0zbDM5OTM1MSwwbDAsLTQwXFxuYy0zOTg1NzAsMCwtMzk5NDM3LDAsLTM5OTQzNywweiBNNTkzIDQzNSB2NDAgSDM5OTUwMCB2LTQwelxcbk0wIDI4MSB2LTQwIEgzOTk5MDggdjQweiBNMCAyODEgdi00MCBIMzk5OTA4IHY0MHpcIixcbiAgcmlnaHRoYXJwb29uYWJvdmVzaG9ydGJhcjogXCJNMCwyNDEgbDAsNDBjMzk5MTI2LDAsMzk5OTkzLDAsMzk5OTkzLDBcXG5jNC43LC00LjcsNywtOS4zLDcsLTE0YzAsLTkuMywtMy43LC0xNS4zLC0xMSwtMThjLTkyLjcsLTU2LjcsLTE1OSwtMTMzLjcsLTE5OSxcXG4tMjMxYy0zLjMsLTkuMywtNiwtMTQuNywtOCwtMTZjLTIsLTEuMywtNywtMiwtMTUsLTJjLTEwLjcsMCwtMTYuNywyLC0xOCw2XFxuYy0yLDIuNywtMSw5LjcsMywyMWMxNS4zLDQyLDM2LjcsODEuOCw2NCwxMTkuNWMyNy4zLDM3LjcsNTgsNjkuMiw5Miw5NC41elxcbk0wIDI0MSB2NDAgSDM5OTkwOCB2LTQweiBNMCA0NzUgdi00MCBIMzk5NTAwIHY0MHogTTAgNDc1IHYtNDAgSDM5OTUwMCB2NDB6XCIsXG4gIHNob3J0YmFyYWJvdmVsZWZ0aGFycG9vbjogXCJNNyw0MzVjLTQsNCwtNi4zLDguNywtNywxNGMwLDUuMywwLjcsOSwyLDExXFxuYzEuMywyLDUuMyw1LjMsMTIsMTBjOTAuNyw1NCwxNTYsMTMwLDE5NiwyMjhjMy4zLDEwLjcsNi4zLDE2LjMsOSwxN2MyLDAuNyw1LDEsOSxcXG4xYzAsMCw1LDAsNSwwYzEwLjcsMCwxNi43LC0yLDE4LC02YzIsLTIuNywxLC05LjcsLTMsLTIxYy0zMiwtODcuMywtODIuNywtMTU3LjcsXFxuLTE1MiwtMjExYzAsMCwtMywtMywtMywtM2wzOTk5MDcsMGwwLC00MGMtMzk5MTI2LDAsLTM5OTk5MywwLC0zOTk5OTMsMHpcXG5NOTMgNDM1IHY0MCBINDAwMDAwIHYtNDB6IE01MDAgMjQxIHY0MCBINDAwMDAwIHYtNDB6IE01MDAgMjQxIHY0MCBINDAwMDAwIHYtNDB6XCIsXG4gIHNob3J0cmlnaHRoYXJwb29uYWJvdmViYXI6IFwiTTUzLDI0MWwwLDQwYzM5ODU3MCwwLDM5OTQzNywwLDM5OTQzNywwXFxuYzQuNywtNC43LDcsLTkuMyw3LC0xNGMwLC05LjMsLTMuNywtMTUuMywtMTEsLTE4Yy05Mi43LC01Ni43LC0xNTksLTEzMy43LC0xOTksXFxuLTIzMWMtMy4zLC05LjMsLTYsLTE0LjcsLTgsLTE2Yy0yLC0xLjMsLTcsLTIsLTE1LC0yYy0xMC43LDAsLTE2LjcsMiwtMTgsNlxcbmMtMiwyLjcsLTEsOS43LDMsMjFjMTUuMyw0MiwzNi43LDgxLjgsNjQsMTE5LjVjMjcuMywzNy43LDU4LDY5LjIsOTIsOTQuNXpcXG5NNTAwIDI0MSB2NDAgSDM5OTQwOCB2LTQweiBNNTAwIDQzNSB2NDAgSDQwMDAwMCB2LTQwelwiXG59O1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdHJlZS5qc1xuXG5cbi8qKlxuICogVGhpcyBub2RlIHJlcHJlc2VudHMgYSBkb2N1bWVudCBmcmFnbWVudCwgd2hpY2ggY29udGFpbnMgZWxlbWVudHMsIGJ1dCB3aGVuXG4gKiBwbGFjZWQgaW50byB0aGUgRE9NIGRvZXNuJ3QgaGF2ZSBhbnkgcmVwcmVzZW50YXRpb24gaXRzZWxmLiBJdCBvbmx5IGNvbnRhaW5zXG4gKiBjaGlsZHJlbiBhbmQgZG9lc24ndCBoYXZlIGFueSBET00gbm9kZSBwcm9wZXJ0aWVzLlxuICovXG52YXIgdHJlZV9Eb2N1bWVudEZyYWdtZW50ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgLy8gSHRtbERvbU5vZGVcbiAgLy8gTmV2ZXIgdXNlZDsgbmVlZGVkIGZvciBzYXRpc2Z5aW5nIGludGVyZmFjZS5cbiAgZnVuY3Rpb24gRG9jdW1lbnRGcmFnbWVudChjaGlsZHJlbikge1xuICAgIHRoaXMuY2hpbGRyZW4gPSB2b2lkIDA7XG4gICAgdGhpcy5jbGFzc2VzID0gdm9pZCAwO1xuICAgIHRoaXMuaGVpZ2h0ID0gdm9pZCAwO1xuICAgIHRoaXMuZGVwdGggPSB2b2lkIDA7XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLnN0eWxlID0gdm9pZCAwO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICB0aGlzLmNsYXNzZXMgPSBbXTtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG4gICAgdGhpcy5kZXB0aCA9IDA7XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IDA7XG4gICAgdGhpcy5zdHlsZSA9IHt9O1xuICB9XG5cbiAgdmFyIF9wcm90byA9IERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYXNDbGFzcyA9IGZ1bmN0aW9uIGhhc0NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHJldHVybiB1dGlscy5jb250YWlucyh0aGlzLmNsYXNzZXMsIGNsYXNzTmFtZSk7XG4gIH1cbiAgLyoqIENvbnZlcnQgdGhlIGZyYWdtZW50IGludG8gYSBub2RlLiAqL1xuICA7XG5cbiAgX3Byb3RvLnRvTm9kZSA9IGZ1bmN0aW9uIHRvTm9kZSgpIHtcbiAgICB2YXIgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgZnJhZy5hcHBlbmRDaGlsZCh0aGlzLmNoaWxkcmVuW2ldLnRvTm9kZSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnJhZztcbiAgfVxuICAvKiogQ29udmVydCB0aGUgZnJhZ21lbnQgaW50byBIVE1MIG1hcmt1cC4gKi9cbiAgO1xuXG4gIF9wcm90by50b01hcmt1cCA9IGZ1bmN0aW9uIHRvTWFya3VwKCkge1xuICAgIHZhciBtYXJrdXAgPSBcIlwiOyAvLyBTaW1wbHkgY29uY2F0ZW5hdGUgdGhlIG1hcmt1cCBmb3IgdGhlIGNoaWxkcmVuIHRvZ2V0aGVyLlxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBtYXJrdXAgKz0gdGhpcy5jaGlsZHJlbltpXS50b01hcmt1cCgpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrdXA7XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBtYXRoIG5vZGUgaW50byBhIHN0cmluZywgc2ltaWxhciB0byBpbm5lclRleHQuIEFwcGxpZXMgdG9cbiAgICogTWF0aERvbU5vZGUncyBvbmx5LlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by50b1RleHQgPSBmdW5jdGlvbiB0b1RleHQoKSB7XG4gICAgLy8gVG8gYXZvaWQgdGhpcywgd2Ugd291bGQgc3ViY2xhc3MgZG9jdW1lbnRGcmFnbWVudCBzZXBhcmF0ZWx5IGZvclxuICAgIC8vIE1hdGhNTCwgYnV0IHBvbHlmaWxscyBmb3Igc3ViY2xhc3NpbmcgaXMgZXhwZW5zaXZlIHBlciBQUiAxNDY5LlxuICAgIC8vICRGbG93Rml4TWU6IE9ubHkgd29ya3MgZm9yIENoaWxkVHlwZSA9IE1hdGhEb21Ob2RlLlxuICAgIHZhciB0b1RleHQgPSBmdW5jdGlvbiB0b1RleHQoY2hpbGQpIHtcbiAgICAgIHJldHVybiBjaGlsZC50b1RleHQoKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4ubWFwKHRvVGV4dCkuam9pbihcIlwiKTtcbiAgfTtcblxuICByZXR1cm4gRG9jdW1lbnRGcmFnbWVudDtcbn0oKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2RvbVRyZWUuanNcbi8qKlxuICogVGhlc2Ugb2JqZWN0cyBzdG9yZSB0aGUgZGF0YSBhYm91dCB0aGUgRE9NIG5vZGVzIHdlIGNyZWF0ZSwgYXMgd2VsbCBhcyBzb21lXG4gKiBleHRyYSBkYXRhLiBUaGV5IGNhbiB0aGVuIGJlIHRyYW5zZm9ybWVkIGludG8gcmVhbCBET00gbm9kZXMgd2l0aCB0aGVcbiAqIGB0b05vZGVgIGZ1bmN0aW9uIG9yIEhUTUwgbWFya3VwIHVzaW5nIGB0b01hcmt1cGAuIFRoZXkgYXJlIHVzZWZ1bCBmb3IgYm90aFxuICogc3RvcmluZyBleHRyYSBwcm9wZXJ0aWVzIG9uIHRoZSBub2RlcywgYXMgd2VsbCBhcyBwcm92aWRpbmcgYSB3YXkgdG8gZWFzaWx5XG4gKiB3b3JrIHdpdGggdGhlIERPTS5cbiAqXG4gKiBTaW1pbGFyIGZ1bmN0aW9ucyBmb3Igd29ya2luZyB3aXRoIE1hdGhNTCBub2RlcyBleGlzdCBpbiBtYXRoTUxUcmVlLmpzLlxuICpcbiAqIFRPRE86IHJlZmFjdG9yIGBzcGFuYCBhbmQgYGFuY2hvcmAgaW50byBjb21tb24gc3VwZXJjbGFzcyB3aGVuXG4gKiB0YXJnZXQgZW52aXJvbm1lbnRzIHN1cHBvcnQgY2xhc3MgaW5oZXJpdGFuY2VcbiAqL1xuXG5cblxuXG5cbi8qKlxuICogQ3JlYXRlIGFuIEhUTUwgY2xhc3NOYW1lIGJhc2VkIG9uIGEgbGlzdCBvZiBjbGFzc2VzLiBJbiBhZGRpdGlvbiB0byBqb2luaW5nXG4gKiB3aXRoIHNwYWNlcywgd2UgYWxzbyByZW1vdmUgZW1wdHkgY2xhc3Nlcy5cbiAqL1xudmFyIGNyZWF0ZUNsYXNzID0gZnVuY3Rpb24gY3JlYXRlQ2xhc3MoY2xhc3Nlcykge1xuICByZXR1cm4gY2xhc3Nlcy5maWx0ZXIoZnVuY3Rpb24gKGNscykge1xuICAgIHJldHVybiBjbHM7XG4gIH0pLmpvaW4oXCIgXCIpO1xufTtcblxudmFyIGluaXROb2RlID0gZnVuY3Rpb24gaW5pdE5vZGUoY2xhc3Nlcywgb3B0aW9ucywgc3R5bGUpIHtcbiAgdGhpcy5jbGFzc2VzID0gY2xhc3NlcyB8fCBbXTtcbiAgdGhpcy5hdHRyaWJ1dGVzID0ge307XG4gIHRoaXMuaGVpZ2h0ID0gMDtcbiAgdGhpcy5kZXB0aCA9IDA7XG4gIHRoaXMubWF4Rm9udFNpemUgPSAwO1xuICB0aGlzLnN0eWxlID0gc3R5bGUgfHwge307XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5zdHlsZS5pc1RpZ2h0KCkpIHtcbiAgICAgIHRoaXMuY2xhc3Nlcy5wdXNoKFwibXRpZ2h0XCIpO1xuICAgIH1cblxuICAgIHZhciBjb2xvciA9IG9wdGlvbnMuZ2V0Q29sb3IoKTtcblxuICAgIGlmIChjb2xvcikge1xuICAgICAgdGhpcy5zdHlsZS5jb2xvciA9IGNvbG9yO1xuICAgIH1cbiAgfVxufTtcbi8qKlxuICogQ29udmVydCBpbnRvIGFuIEhUTUwgbm9kZVxuICovXG5cblxudmFyIF90b05vZGUgPSBmdW5jdGlvbiB0b05vZGUodGFnTmFtZSkge1xuICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7IC8vIEFwcGx5IHRoZSBjbGFzc1xuXG4gIG5vZGUuY2xhc3NOYW1lID0gY3JlYXRlQ2xhc3ModGhpcy5jbGFzc2VzKTsgLy8gQXBwbHkgaW5saW5lIHN0eWxlc1xuXG4gIGZvciAodmFyIHN0eWxlIGluIHRoaXMuc3R5bGUpIHtcbiAgICBpZiAodGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZSkpIHtcbiAgICAgIC8vICRGbG93Rml4TWUgRmxvdyBkb2Vzbid0IHNlZW0gdG8gdW5kZXJzdGFuZCBzcGFuLnN0eWxlJ3MgdHlwZS5cbiAgICAgIG5vZGUuc3R5bGVbc3R5bGVdID0gdGhpcy5zdHlsZVtzdHlsZV07XG4gICAgfVxuICB9IC8vIEFwcGx5IGF0dHJpYnV0ZXNcblxuXG4gIGZvciAodmFyIGF0dHIgaW4gdGhpcy5hdHRyaWJ1dGVzKSB7XG4gICAgaWYgKHRoaXMuYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShhdHRyKSkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYXR0ciwgdGhpcy5hdHRyaWJ1dGVzW2F0dHJdKTtcbiAgICB9XG4gIH0gLy8gQXBwZW5kIHRoZSBjaGlsZHJlbiwgYWxzbyBhcyBIVE1MIG5vZGVzXG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBub2RlLmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5baV0udG9Ob2RlKCkpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59O1xuLyoqXG4gKiBDb252ZXJ0IGludG8gYW4gSFRNTCBtYXJrdXAgc3RyaW5nXG4gKi9cblxuXG52YXIgX3RvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAodGFnTmFtZSkge1xuICB2YXIgbWFya3VwID0gXCI8XCIgKyB0YWdOYW1lOyAvLyBBZGQgdGhlIGNsYXNzXG5cbiAgaWYgKHRoaXMuY2xhc3Nlcy5sZW5ndGgpIHtcbiAgICBtYXJrdXAgKz0gXCIgY2xhc3M9XFxcIlwiICsgdXRpbHMuZXNjYXBlKGNyZWF0ZUNsYXNzKHRoaXMuY2xhc3NlcykpICsgXCJcXFwiXCI7XG4gIH1cblxuICB2YXIgc3R5bGVzID0gXCJcIjsgLy8gQWRkIHRoZSBzdHlsZXMsIGFmdGVyIGh5cGhlbmF0aW9uXG5cbiAgZm9yICh2YXIgc3R5bGUgaW4gdGhpcy5zdHlsZSkge1xuICAgIGlmICh0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlKSkge1xuICAgICAgc3R5bGVzICs9IHV0aWxzLmh5cGhlbmF0ZShzdHlsZSkgKyBcIjpcIiArIHRoaXMuc3R5bGVbc3R5bGVdICsgXCI7XCI7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0eWxlcykge1xuICAgIG1hcmt1cCArPSBcIiBzdHlsZT1cXFwiXCIgKyB1dGlscy5lc2NhcGUoc3R5bGVzKSArIFwiXFxcIlwiO1xuICB9IC8vIEFkZCB0aGUgYXR0cmlidXRlc1xuXG5cbiAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICBpZiAodGhpcy5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KGF0dHIpKSB7XG4gICAgICBtYXJrdXAgKz0gXCIgXCIgKyBhdHRyICsgXCI9XFxcIlwiICsgdXRpbHMuZXNjYXBlKHRoaXMuYXR0cmlidXRlc1thdHRyXSkgKyBcIlxcXCJcIjtcbiAgICB9XG4gIH1cblxuICBtYXJrdXAgKz0gXCI+XCI7IC8vIEFkZCB0aGUgbWFya3VwIG9mIHRoZSBjaGlsZHJlbiwgYWxzbyBhcyBtYXJrdXBcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBtYXJrdXAgKz0gdGhpcy5jaGlsZHJlbltpXS50b01hcmt1cCgpO1xuICB9XG5cbiAgbWFya3VwICs9IFwiPC9cIiArIHRhZ05hbWUgKyBcIj5cIjtcbiAgcmV0dXJuIG1hcmt1cDtcbn07IC8vIE1ha2luZyB0aGUgdHlwZSBiZWxvdyBleGFjdCB3aXRoIGFsbCBvcHRpb25hbCBmaWVsZHMgZG9lc24ndCB3b3JrIGR1ZSB0b1xuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNDU4MlxuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNTY4OFxuLy8gSG93ZXZlciwgc2luY2UgKmFsbCogZmllbGRzIGFyZSBvcHRpb25hbCwgJFNoYXBlPD4gd29ya3MgYXMgc3VnZ2VzdGVkIGluIDU2ODhcbi8vIGFib3ZlLlxuLy8gVGhpcyB0eXBlIGRvZXMgbm90IGluY2x1ZGUgYWxsIENTUyBwcm9wZXJ0aWVzLiBBZGRpdGlvbmFsIHByb3BlcnRpZXMgc2hvdWxkXG4vLyBiZSBhZGRlZCBhcyBuZWVkZWQuXG5cblxuLyoqXG4gKiBUaGlzIG5vZGUgcmVwcmVzZW50cyBhIHNwYW4gbm9kZSwgd2l0aCBhIGNsYXNzTmFtZSwgYSBsaXN0IG9mIGNoaWxkcmVuLCBhbmRcbiAqIGFuIGlubGluZSBzdHlsZS4gSXQgYWxzbyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBpdHMgaGVpZ2h0LCBkZXB0aCwgYW5kXG4gKiBtYXhGb250U2l6ZS5cbiAqXG4gKiBSZXByZXNlbnRzIHR3byB0eXBlcyB3aXRoIGRpZmZlcmVudCB1c2VzOiBTdmdTcGFuIHRvIHdyYXAgYW4gU1ZHIGFuZCBEb21TcGFuXG4gKiBvdGhlcndpc2UuIFRoaXMgdHlwZXNhZmV0eSBpcyBpbXBvcnRhbnQgd2hlbiBIVE1MIGJ1aWxkZXJzIGFjY2VzcyBhIHNwYW4nc1xuICogY2hpbGRyZW4uXG4gKi9cbnZhciBkb21UcmVlX1NwYW4gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTcGFuKGNsYXNzZXMsIGNoaWxkcmVuLCBvcHRpb25zLCBzdHlsZSkge1xuICAgIHRoaXMuY2hpbGRyZW4gPSB2b2lkIDA7XG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gdm9pZCAwO1xuICAgIHRoaXMuY2xhc3NlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmhlaWdodCA9IHZvaWQgMDtcbiAgICB0aGlzLmRlcHRoID0gdm9pZCAwO1xuICAgIHRoaXMud2lkdGggPSB2b2lkIDA7XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLnN0eWxlID0gdm9pZCAwO1xuICAgIGluaXROb2RlLmNhbGwodGhpcywgY2xhc3Nlcywgb3B0aW9ucywgc3R5bGUpO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbiB8fCBbXTtcbiAgfVxuICAvKipcbiAgICogU2V0cyBhbiBhcmJpdHJhcnkgYXR0cmlidXRlIG9uIHRoZSBzcGFuLiBXYXJuaW5nOiB1c2UgdGhpcyB3aXNlbHkuIE5vdFxuICAgKiBhbGwgYnJvd3NlcnMgc3VwcG9ydCBhdHRyaWJ1dGVzIHRoZSBzYW1lLCBhbmQgaGF2aW5nIHRvbyBtYW55IGN1c3RvbVxuICAgKiBhdHRyaWJ1dGVzIGlzIHByb2JhYmx5IGJhZC5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gU3Bhbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uIHNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gICAgdGhpcy5hdHRyaWJ1dGVzW2F0dHJpYnV0ZV0gPSB2YWx1ZTtcbiAgfTtcblxuICBfcHJvdG8uaGFzQ2xhc3MgPSBmdW5jdGlvbiBoYXNDbGFzcyhjbGFzc05hbWUpIHtcbiAgICByZXR1cm4gdXRpbHMuY29udGFpbnModGhpcy5jbGFzc2VzLCBjbGFzc05hbWUpO1xuICB9O1xuXG4gIF9wcm90by50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgcmV0dXJuIF90b05vZGUuY2FsbCh0aGlzLCBcInNwYW5cIik7XG4gIH07XG5cbiAgX3Byb3RvLnRvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAoKSB7XG4gICAgcmV0dXJuIF90b01hcmt1cC5jYWxsKHRoaXMsIFwic3BhblwiKTtcbiAgfTtcblxuICByZXR1cm4gU3Bhbjtcbn0oKTtcbi8qKlxuICogVGhpcyBub2RlIHJlcHJlc2VudHMgYW4gYW5jaG9yICg8YT4pIGVsZW1lbnQgd2l0aCBhIGh5cGVybGluay4gIFNlZSBgc3BhbmBcbiAqIGZvciBmdXJ0aGVyIGRldGFpbHMuXG4gKi9cblxudmFyIGRvbVRyZWVfQW5jaG9yID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQW5jaG9yKGhyZWYsIGNsYXNzZXMsIGNoaWxkcmVuLCBvcHRpb25zKSB7XG4gICAgdGhpcy5jaGlsZHJlbiA9IHZvaWQgMDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSB2b2lkIDA7XG4gICAgdGhpcy5jbGFzc2VzID0gdm9pZCAwO1xuICAgIHRoaXMuaGVpZ2h0ID0gdm9pZCAwO1xuICAgIHRoaXMuZGVwdGggPSB2b2lkIDA7XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLnN0eWxlID0gdm9pZCAwO1xuICAgIGluaXROb2RlLmNhbGwodGhpcywgY2xhc3Nlcywgb3B0aW9ucyk7XG4gICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuIHx8IFtdO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gIH1cblxuICB2YXIgX3Byb3RvMiA9IEFuY2hvci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvMi5zZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbiBzZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZSkge1xuICAgIHRoaXMuYXR0cmlidXRlc1thdHRyaWJ1dGVdID0gdmFsdWU7XG4gIH07XG5cbiAgX3Byb3RvMi5oYXNDbGFzcyA9IGZ1bmN0aW9uIGhhc0NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHJldHVybiB1dGlscy5jb250YWlucyh0aGlzLmNsYXNzZXMsIGNsYXNzTmFtZSk7XG4gIH07XG5cbiAgX3Byb3RvMi50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgcmV0dXJuIF90b05vZGUuY2FsbCh0aGlzLCBcImFcIik7XG4gIH07XG5cbiAgX3Byb3RvMi50b01hcmt1cCA9IGZ1bmN0aW9uIHRvTWFya3VwKCkge1xuICAgIHJldHVybiBfdG9NYXJrdXAuY2FsbCh0aGlzLCBcImFcIik7XG4gIH07XG5cbiAgcmV0dXJuIEFuY2hvcjtcbn0oKTtcbi8qKlxuICogVGhpcyBub2RlIHJlcHJlc2VudHMgYW4gaW1hZ2UgZW1iZWQgKDxpbWc+KSBlbGVtZW50LlxuICovXG5cbnZhciBkb21UcmVlX0ltZyA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEltZyhzcmMsIGFsdCwgc3R5bGUpIHtcbiAgICB0aGlzLnNyYyA9IHZvaWQgMDtcbiAgICB0aGlzLmFsdCA9IHZvaWQgMDtcbiAgICB0aGlzLmNsYXNzZXMgPSB2b2lkIDA7XG4gICAgdGhpcy5oZWlnaHQgPSB2b2lkIDA7XG4gICAgdGhpcy5kZXB0aCA9IHZvaWQgMDtcbiAgICB0aGlzLm1heEZvbnRTaXplID0gdm9pZCAwO1xuICAgIHRoaXMuc3R5bGUgPSB2b2lkIDA7XG4gICAgdGhpcy5hbHQgPSBhbHQ7XG4gICAgdGhpcy5zcmMgPSBzcmM7XG4gICAgdGhpcy5jbGFzc2VzID0gW1wibW9yZFwiXTtcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG4gIH1cblxuICB2YXIgX3Byb3RvMyA9IEltZy5wcm90b3R5cGU7XG5cbiAgX3Byb3RvMy5oYXNDbGFzcyA9IGZ1bmN0aW9uIGhhc0NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHJldHVybiB1dGlscy5jb250YWlucyh0aGlzLmNsYXNzZXMsIGNsYXNzTmFtZSk7XG4gIH07XG5cbiAgX3Byb3RvMy50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xuICAgIG5vZGUuc3JjID0gdGhpcy5zcmM7XG4gICAgbm9kZS5hbHQgPSB0aGlzLmFsdDtcbiAgICBub2RlLmNsYXNzTmFtZSA9IFwibW9yZFwiOyAvLyBBcHBseSBpbmxpbmUgc3R5bGVzXG5cbiAgICBmb3IgKHZhciBzdHlsZSBpbiB0aGlzLnN0eWxlKSB7XG4gICAgICBpZiAodGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZSkpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICBub2RlLnN0eWxlW3N0eWxlXSA9IHRoaXMuc3R5bGVbc3R5bGVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9O1xuXG4gIF9wcm90bzMudG9NYXJrdXAgPSBmdW5jdGlvbiB0b01hcmt1cCgpIHtcbiAgICB2YXIgbWFya3VwID0gXCI8aW1nICBzcmM9J1wiICsgdGhpcy5zcmMgKyBcIiAnYWx0PSdcIiArIHRoaXMuYWx0ICsgXCInIFwiOyAvLyBBZGQgdGhlIHN0eWxlcywgYWZ0ZXIgaHlwaGVuYXRpb25cblxuICAgIHZhciBzdHlsZXMgPSBcIlwiO1xuXG4gICAgZm9yICh2YXIgc3R5bGUgaW4gdGhpcy5zdHlsZSkge1xuICAgICAgaWYgKHRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkoc3R5bGUpKSB7XG4gICAgICAgIHN0eWxlcyArPSB1dGlscy5oeXBoZW5hdGUoc3R5bGUpICsgXCI6XCIgKyB0aGlzLnN0eWxlW3N0eWxlXSArIFwiO1wiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdHlsZXMpIHtcbiAgICAgIG1hcmt1cCArPSBcIiBzdHlsZT1cXFwiXCIgKyB1dGlscy5lc2NhcGUoc3R5bGVzKSArIFwiXFxcIlwiO1xuICAgIH1cblxuICAgIG1hcmt1cCArPSBcIicvPlwiO1xuICAgIHJldHVybiBtYXJrdXA7XG4gIH07XG5cbiAgcmV0dXJuIEltZztcbn0oKTtcbnZhciBpQ29tYmluYXRpb25zID0ge1xuICAnw64nOiBcIlxcdTAxMzFcXHUwMzAyXCIsXG4gICfDryc6IFwiXFx1MDEzMVxcdTAzMDhcIixcbiAgJ8OtJzogXCJcXHUwMTMxXFx1MDMwMVwiLFxuICAvLyAnxKsnOiAnXFx1MDEzMVxcdTAzMDQnLCAvLyBlbmFibGUgd2hlbiB3ZSBhZGQgRXh0ZW5kZWQgTGF0aW5cbiAgJ8OsJzogXCJcXHUwMTMxXFx1MDMwMFwiXG59O1xuLyoqXG4gKiBBIHN5bWJvbCBub2RlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGEgc2luZ2xlIHN5bWJvbC4gSXQgZWl0aGVyIHJlbmRlcnNcbiAqIHRvIGEgc2luZ2xlIHRleHQgbm9kZSwgb3IgYSBzcGFuIHdpdGggYSBzaW5nbGUgdGV4dCBub2RlIGluIGl0LCBkZXBlbmRpbmcgb25cbiAqIHdoZXRoZXIgaXQgaGFzIENTUyBjbGFzc2VzLCBzdHlsZXMsIG9yIG5lZWRzIGl0YWxpYyBjb3JyZWN0aW9uLlxuICovXG5cbnZhciBkb21UcmVlX1N5bWJvbE5vZGUgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTeW1ib2xOb2RlKHRleHQsIGhlaWdodCwgZGVwdGgsIGl0YWxpYywgc2tldywgd2lkdGgsIGNsYXNzZXMsIHN0eWxlKSB7XG4gICAgdGhpcy50ZXh0ID0gdm9pZCAwO1xuICAgIHRoaXMuaGVpZ2h0ID0gdm9pZCAwO1xuICAgIHRoaXMuZGVwdGggPSB2b2lkIDA7XG4gICAgdGhpcy5pdGFsaWMgPSB2b2lkIDA7XG4gICAgdGhpcy5za2V3ID0gdm9pZCAwO1xuICAgIHRoaXMud2lkdGggPSB2b2lkIDA7XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLmNsYXNzZXMgPSB2b2lkIDA7XG4gICAgdGhpcy5zdHlsZSA9IHZvaWQgMDtcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG4gICAgdGhpcy5kZXB0aCA9IGRlcHRoIHx8IDA7XG4gICAgdGhpcy5pdGFsaWMgPSBpdGFsaWMgfHwgMDtcbiAgICB0aGlzLnNrZXcgPSBza2V3IHx8IDA7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG4gICAgdGhpcy5jbGFzc2VzID0gY2xhc3NlcyB8fCBbXTtcbiAgICB0aGlzLnN0eWxlID0gc3R5bGUgfHwge307XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IDA7IC8vIE1hcmsgdGV4dCBmcm9tIG5vbi1MYXRpbiBzY3JpcHRzIHdpdGggc3BlY2lmaWMgY2xhc3NlcyBzbyB0aGF0IHdlXG4gICAgLy8gY2FuIHNwZWNpZnkgd2hpY2ggZm9udHMgdG8gdXNlLiAgVGhpcyBhbGxvd3MgdXMgdG8gcmVuZGVyIHRoZXNlXG4gICAgLy8gY2hhcmFjdGVycyB3aXRoIGEgc2VyaWYgZm9udCBpbiBzaXR1YXRpb25zIHdoZXJlIHRoZSBicm93c2VyIHdvdWxkXG4gICAgLy8gZWl0aGVyIGRlZmF1bHQgdG8gYSBzYW5zIHNlcmlmIG9yIHJlbmRlciBhIHBsYWNlaG9sZGVyIGNoYXJhY3Rlci5cbiAgICAvLyBXZSB1c2UgQ1NTIGNsYXNzIG5hbWVzIGxpa2UgY2prX2ZhbGxiYWNrLCBoYW5ndWxfZmFsbGJhY2sgYW5kXG4gICAgLy8gYnJhaG1pY19mYWxsYmFjay4gU2VlIC4vdW5pY29kZVNjcmlwdHMuanMgZm9yIHRoZSBzZXQgb2YgcG9zc2libGVcbiAgICAvLyBzY3JpcHQgbmFtZXNcblxuICAgIHZhciBzY3JpcHQgPSBzY3JpcHRGcm9tQ29kZXBvaW50KHRoaXMudGV4dC5jaGFyQ29kZUF0KDApKTtcblxuICAgIGlmIChzY3JpcHQpIHtcbiAgICAgIHRoaXMuY2xhc3Nlcy5wdXNoKHNjcmlwdCArIFwiX2ZhbGxiYWNrXCIpO1xuICAgIH1cblxuICAgIGlmICgvW8Ouw6/DrcOsXS8udGVzdCh0aGlzLnRleHQpKSB7XG4gICAgICAvLyBhZGQgxKsgd2hlbiB3ZSBhZGQgRXh0ZW5kZWQgTGF0aW5cbiAgICAgIHRoaXMudGV4dCA9IGlDb21iaW5hdGlvbnNbdGhpcy50ZXh0XTtcbiAgICB9XG4gIH1cblxuICB2YXIgX3Byb3RvNCA9IFN5bWJvbE5vZGUucHJvdG90eXBlO1xuXG4gIF9wcm90bzQuaGFzQ2xhc3MgPSBmdW5jdGlvbiBoYXNDbGFzcyhjbGFzc05hbWUpIHtcbiAgICByZXR1cm4gdXRpbHMuY29udGFpbnModGhpcy5jbGFzc2VzLCBjbGFzc05hbWUpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdGV4dCBub2RlIG9yIHNwYW4gZnJvbSBhIHN5bWJvbCBub2RlLiBOb3RlIHRoYXQgYSBzcGFuIGlzIG9ubHlcbiAgICogY3JlYXRlZCBpZiBpdCBpcyBuZWVkZWQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvNC50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLnRleHQpO1xuICAgIHZhciBzcGFuID0gbnVsbDtcblxuICAgIGlmICh0aGlzLml0YWxpYyA+IDApIHtcbiAgICAgIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICAgIHNwYW4uc3R5bGUubWFyZ2luUmlnaHQgPSB0aGlzLml0YWxpYyArIFwiZW1cIjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHNwYW4gPSBzcGFuIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgICAgc3Bhbi5jbGFzc05hbWUgPSBjcmVhdGVDbGFzcyh0aGlzLmNsYXNzZXMpO1xuICAgIH1cblxuICAgIGZvciAodmFyIHN0eWxlIGluIHRoaXMuc3R5bGUpIHtcbiAgICAgIGlmICh0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlKSkge1xuICAgICAgICBzcGFuID0gc3BhbiB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTsgLy8gJEZsb3dGaXhNZSBGbG93IGRvZXNuJ3Qgc2VlbSB0byB1bmRlcnN0YW5kIHNwYW4uc3R5bGUncyB0eXBlLlxuXG4gICAgICAgIHNwYW4uc3R5bGVbc3R5bGVdID0gdGhpcy5zdHlsZVtzdHlsZV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNwYW4pIHtcbiAgICAgIHNwYW4uYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICByZXR1cm4gc3BhbjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIG1hcmt1cCBmb3IgYSBzeW1ib2wgbm9kZS5cbiAgICovXG4gIDtcblxuICBfcHJvdG80LnRvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAoKSB7XG4gICAgLy8gVE9ETyhhbHBlcnQpOiBNb3JlIGR1cGxpY2F0aW9uIHRoYW4gSSdkIGxpa2UgZnJvbVxuICAgIC8vIHNwYW4ucHJvdG90eXBlLnRvTWFya3VwIGFuZCBzeW1ib2xOb2RlLnByb3RvdHlwZS50b05vZGUuLi5cbiAgICB2YXIgbmVlZHNTcGFuID0gZmFsc2U7XG4gICAgdmFyIG1hcmt1cCA9IFwiPHNwYW5cIjtcblxuICAgIGlmICh0aGlzLmNsYXNzZXMubGVuZ3RoKSB7XG4gICAgICBuZWVkc1NwYW4gPSB0cnVlO1xuICAgICAgbWFya3VwICs9IFwiIGNsYXNzPVxcXCJcIjtcbiAgICAgIG1hcmt1cCArPSB1dGlscy5lc2NhcGUoY3JlYXRlQ2xhc3ModGhpcy5jbGFzc2VzKSk7XG4gICAgICBtYXJrdXAgKz0gXCJcXFwiXCI7XG4gICAgfVxuXG4gICAgdmFyIHN0eWxlcyA9IFwiXCI7XG5cbiAgICBpZiAodGhpcy5pdGFsaWMgPiAwKSB7XG4gICAgICBzdHlsZXMgKz0gXCJtYXJnaW4tcmlnaHQ6XCIgKyB0aGlzLml0YWxpYyArIFwiZW07XCI7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgc3R5bGUgaW4gdGhpcy5zdHlsZSkge1xuICAgICAgaWYgKHRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkoc3R5bGUpKSB7XG4gICAgICAgIHN0eWxlcyArPSB1dGlscy5oeXBoZW5hdGUoc3R5bGUpICsgXCI6XCIgKyB0aGlzLnN0eWxlW3N0eWxlXSArIFwiO1wiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdHlsZXMpIHtcbiAgICAgIG5lZWRzU3BhbiA9IHRydWU7XG4gICAgICBtYXJrdXAgKz0gXCIgc3R5bGU9XFxcIlwiICsgdXRpbHMuZXNjYXBlKHN0eWxlcykgKyBcIlxcXCJcIjtcbiAgICB9XG5cbiAgICB2YXIgZXNjYXBlZCA9IHV0aWxzLmVzY2FwZSh0aGlzLnRleHQpO1xuXG4gICAgaWYgKG5lZWRzU3Bhbikge1xuICAgICAgbWFya3VwICs9IFwiPlwiO1xuICAgICAgbWFya3VwICs9IGVzY2FwZWQ7XG4gICAgICBtYXJrdXAgKz0gXCI8L3NwYW4+XCI7XG4gICAgICByZXR1cm4gbWFya3VwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZXNjYXBlZDtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFN5bWJvbE5vZGU7XG59KCk7XG4vKipcbiAqIFNWRyBub2RlcyBhcmUgdXNlZCB0byByZW5kZXIgc3RyZXRjaHkgd2lkZSBlbGVtZW50cy5cbiAqL1xuXG52YXIgU3ZnTm9kZSA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFN2Z05vZGUoY2hpbGRyZW4sIGF0dHJpYnV0ZXMpIHtcbiAgICB0aGlzLmNoaWxkcmVuID0gdm9pZCAwO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW4gfHwgW107XG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcbiAgfVxuXG4gIHZhciBfcHJvdG81ID0gU3ZnTm9kZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvNS50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgdmFyIHN2Z05TID0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCBcInN2Z1wiKTsgLy8gQXBwbHkgYXR0cmlidXRlc1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyLCB0aGlzLmF0dHJpYnV0ZXNbYXR0cl0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZS5hcHBlbmRDaGlsZCh0aGlzLmNoaWxkcmVuW2ldLnRvTm9kZSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcblxuICBfcHJvdG81LnRvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAoKSB7XG4gICAgdmFyIG1hcmt1cCA9IFwiPHN2Z1wiOyAvLyBBcHBseSBhdHRyaWJ1dGVzXG5cbiAgICBmb3IgKHZhciBhdHRyIGluIHRoaXMuYXR0cmlidXRlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMsIGF0dHIpKSB7XG4gICAgICAgIG1hcmt1cCArPSBcIiBcIiArIGF0dHIgKyBcIj0nXCIgKyB0aGlzLmF0dHJpYnV0ZXNbYXR0cl0gKyBcIidcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtYXJrdXAgKz0gXCI+XCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1hcmt1cCArPSB0aGlzLmNoaWxkcmVuW2ldLnRvTWFya3VwKCk7XG4gICAgfVxuXG4gICAgbWFya3VwICs9IFwiPC9zdmc+XCI7XG4gICAgcmV0dXJuIG1hcmt1cDtcbiAgfTtcblxuICByZXR1cm4gU3ZnTm9kZTtcbn0oKTtcbnZhciBkb21UcmVlX1BhdGhOb2RlID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUGF0aE5vZGUocGF0aE5hbWUsIGFsdGVybmF0ZSkge1xuICAgIHRoaXMucGF0aE5hbWUgPSB2b2lkIDA7XG4gICAgdGhpcy5hbHRlcm5hdGUgPSB2b2lkIDA7XG4gICAgdGhpcy5wYXRoTmFtZSA9IHBhdGhOYW1lO1xuICAgIHRoaXMuYWx0ZXJuYXRlID0gYWx0ZXJuYXRlOyAvLyBVc2VkIG9ubHkgZm9yIFxcc3FydFxuICB9XG5cbiAgdmFyIF9wcm90bzYgPSBQYXRoTm9kZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvNi50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgdmFyIHN2Z05TID0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCBcInBhdGhcIik7XG5cbiAgICBpZiAodGhpcy5hbHRlcm5hdGUpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZFwiLCB0aGlzLmFsdGVybmF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZFwiLCBzdmdHZW9tZXRyeV9wYXRoW3RoaXMucGF0aE5hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcblxuICBfcHJvdG82LnRvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAoKSB7XG4gICAgaWYgKHRoaXMuYWx0ZXJuYXRlKSB7XG4gICAgICByZXR1cm4gXCI8cGF0aCBkPSdcIiArIHRoaXMuYWx0ZXJuYXRlICsgXCInLz5cIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiPHBhdGggZD0nXCIgKyBzdmdHZW9tZXRyeV9wYXRoW3RoaXMucGF0aE5hbWVdICsgXCInLz5cIjtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFBhdGhOb2RlO1xufSgpO1xudmFyIExpbmVOb2RlID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTGluZU5vZGUoYXR0cmlidXRlcykge1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzIHx8IHt9O1xuICB9XG5cbiAgdmFyIF9wcm90bzcgPSBMaW5lTm9kZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvNy50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgdmFyIHN2Z05TID0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCBcImxpbmVcIik7IC8vIEFwcGx5IGF0dHJpYnV0ZXNcblxuICAgIGZvciAodmFyIGF0dHIgaW4gdGhpcy5hdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcywgYXR0cikpIHtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYXR0ciwgdGhpcy5hdHRyaWJ1dGVzW2F0dHJdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcblxuICBfcHJvdG83LnRvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAoKSB7XG4gICAgdmFyIG1hcmt1cCA9IFwiPGxpbmVcIjtcblxuICAgIGZvciAodmFyIGF0dHIgaW4gdGhpcy5hdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcywgYXR0cikpIHtcbiAgICAgICAgbWFya3VwICs9IFwiIFwiICsgYXR0ciArIFwiPSdcIiArIHRoaXMuYXR0cmlidXRlc1thdHRyXSArIFwiJ1wiO1xuICAgICAgfVxuICAgIH1cblxuICAgIG1hcmt1cCArPSBcIi8+XCI7XG4gICAgcmV0dXJuIG1hcmt1cDtcbiAgfTtcblxuICByZXR1cm4gTGluZU5vZGU7XG59KCk7XG5mdW5jdGlvbiBhc3NlcnRTeW1ib2xEb21Ob2RlKGdyb3VwKSB7XG4gIGlmIChncm91cCBpbnN0YW5jZW9mIGRvbVRyZWVfU3ltYm9sTm9kZSkge1xuICAgIHJldHVybiBncm91cDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBzeW1ib2xOb2RlIGJ1dCBnb3QgXCIgKyBTdHJpbmcoZ3JvdXApICsgXCIuXCIpO1xuICB9XG59XG5mdW5jdGlvbiBhc3NlcnRTcGFuKGdyb3VwKSB7XG4gIGlmIChncm91cCBpbnN0YW5jZW9mIGRvbVRyZWVfU3Bhbikge1xuICAgIHJldHVybiBncm91cDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBzcGFuPEh0bWxEb21Ob2RlPiBidXQgZ290IFwiICsgU3RyaW5nKGdyb3VwKSArIFwiLlwiKTtcbiAgfVxufVxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zdWJtb2R1bGVzL2thdGV4LWZvbnRzL2ZvbnRNZXRyaWNzRGF0YS5qc1xuLy8gVGhpcyBmaWxlIGlzIEdFTkVSQVRFRCBieSBidWlsZE1ldHJpY3Muc2guIERPIE5PVCBNT0RJRlkuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBmb250TWV0cmljc0RhdGEgPSAoe1xuICBcIkFNUy1SZWd1bGFyXCI6IHtcbiAgICBcIjY1XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjY2XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjY3XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjY4XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjY5XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjcwXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjcxXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjczXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjc0XCI6IFswLjE2NjY3LCAwLjY4ODg5LCAwLCAwLCAwLjVdLFxuICAgIFwiNzVcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNzZcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiNzdcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuOTQ0NDVdLFxuICAgIFwiNzhcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiNzlcIjogWzAuMTY2NjcsIDAuNjg4ODksIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODBcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODFcIjogWzAuMTY2NjcsIDAuNjg4ODksIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODJcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODNcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODRcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODVcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODZcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODdcIjogWzAsIDAuNjg4ODksIDAsIDAsIDEuMF0sXG4gICAgXCI4OFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4OVwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5MFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCIxMDdcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiMTY1XCI6IFswLCAwLjY3NSwgMC4wMjUsIDAsIDAuNzVdLFxuICAgIFwiMTc0XCI6IFswLjE1NTU5LCAwLjY5MjI0LCAwLCAwLCAwLjk0NjY2XSxcbiAgICBcIjI0MFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIyOTVcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTQwMjhdLFxuICAgIFwiNzEwXCI6IFswLCAwLjgyNSwgMCwgMCwgMi4zMzMzNF0sXG4gICAgXCI3MzJcIjogWzAsIDAuOSwgMCwgMCwgMi4zMzMzNF0sXG4gICAgXCI3NzBcIjogWzAsIDAuODI1LCAwLCAwLCAyLjMzMzM0XSxcbiAgICBcIjc3MVwiOiBbMCwgMC45LCAwLCAwLCAyLjMzMzM0XSxcbiAgICBcIjk4OVwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDA4XCI6IFswLCAwLjQzMDU2LCAwLjA0MDI4LCAwLCAwLjY2NjY3XSxcbiAgICBcIjgyNDVcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDAuMjc1XSxcbiAgICBcIjg0NjNcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTQwMjhdLFxuICAgIFwiODQ4N1wiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4NDk4XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg1MDJcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODUwM1wiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCI4NTA0XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg1MTNcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiODU5MlwiOiBbLTAuMDM1OTgsIDAuNDY0MDIsIDAsIDAsIDAuNV0sXG4gICAgXCI4NTk0XCI6IFstMC4wMzU5OCwgMC40NjQwMiwgMCwgMCwgMC41XSxcbiAgICBcIjg2MDJcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODYwM1wiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjA2XCI6IFswLjAxMzU0LCAwLjUyMjM5LCAwLCAwLCAxLjBdLFxuICAgIFwiODYwOFwiOiBbMC4wMTM1NCwgMC41MjIzOSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MTBcIjogWzAuMDEzNTQsIDAuNTIyMzksIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiODYxMVwiOiBbMC4wMTM1NCwgMC41MjIzOSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCI4NjE5XCI6IFswLCAwLjU0OTg2LCAwLCAwLCAxLjBdLFxuICAgIFwiODYyMFwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MjFcIjogWy0wLjEzMzEzLCAwLjM3Nzg4LCAwLCAwLCAxLjM4ODg5XSxcbiAgICBcIjg2MjJcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODYyNFwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC41XSxcbiAgICBcIjg2MjVcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNV0sXG4gICAgXCI4NjMwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAxLjBdLFxuICAgIFwiODYzMVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MzRcIjogWzAuMDgxOTgsIDAuNTgxOTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODYzNVwiOiBbMC4wODE5OCwgMC41ODE5OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NjM4XCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjQxNjY3XSxcbiAgICBcIjg2MzlcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuNDE2NjddLFxuICAgIFwiODY0MlwiOiBbMC4xOTQ0NCwgMC42OTIyNCwgMCwgMCwgMC40MTY2N10sXG4gICAgXCI4NjQzXCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjQxNjY3XSxcbiAgICBcIjg2NDRcIjogWzAuMTgwOCwgMC42NzUsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjQ2XCI6IFswLjE4MDgsIDAuNjc1LCAwLCAwLCAxLjBdLFxuICAgIFwiODY0N1wiOiBbMC4xODA4LCAwLjY3NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2NDhcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODY0OVwiOiBbMC4xODA4LCAwLjY3NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTBcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODY1MVwiOiBbMC4wMTM1NCwgMC41MjIzOSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTJcIjogWzAuMDEzNTQsIDAuNTIyMzksIDAsIDAsIDEuMF0sXG4gICAgXCI4NjUzXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTRcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY1NVwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjY2XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY2N1wiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NjlcIjogWy0wLjEzMzEzLCAwLjM3Nzg4LCAwLCAwLCAxLjBdLFxuICAgIFwiODY3MlwiOiBbLTAuMDY0LCAwLjQzNywgMCwgMCwgMS4zMzRdLFxuICAgIFwiODY3NFwiOiBbLTAuMDY0LCAwLjQzNywgMCwgMCwgMS4zMzRdLFxuICAgIFwiODcwNVwiOiBbMCwgMC44MjUsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzA4XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg3MDlcIjogWzAuMDgxNjcsIDAuNTgxNjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODcxN1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC40MjkxN10sXG4gICAgXCI4NzIyXCI6IFstMC4wMzU5OCwgMC40NjQwMiwgMCwgMCwgMC41XSxcbiAgICBcIjg3MjRcIjogWzAuMDgxOTgsIDAuNjkyMjQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODcyNlwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzMzXCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3MzZcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODczN1wiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4NzM4XCI6IFswLjAzNTE3LCAwLjUyMjM5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg3MzlcIjogWzAuMDgxNjcsIDAuNTgxNjcsIDAsIDAsIDAuMjIyMjJdLFxuICAgIFwiODc0MFwiOiBbMC4yNTE0MiwgMC43NDExMSwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4NzQxXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjg3NDJcIjogWzAuMjUxNDIsIDAuNzQxMTEsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzU2XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg3NTdcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODc2NFwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc2NVwiOiBbLTAuMTMzMTMsIDAuMzc3ODgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc2OVwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc3MFwiOiBbLTAuMDM2MjUsIDAuNDYzNzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc3NFwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4Nzc2XCI6IFstMC4wMTY4OCwgMC40ODMxMiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4Nzc4XCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3ODJcIjogWzAuMDYwNjIsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc4M1wiOiBbMC4wNjA2MiwgMC41NDk4NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4Nzg1XCI6IFswLjA4MTk4LCAwLjU4MTk4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3ODZcIjogWzAuMDgxOTgsIDAuNTgxOTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc4N1wiOiBbMC4wODE5OCwgMC41ODE5OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzkwXCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3OTFcIjogWzAuMjI5NTgsIDAuNzI5NTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc5NlwiOiBbMC4wODE5OCwgMC45MTY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODA2XCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MDdcIjogWzAuMjU1ODMsIDAuNzU1ODMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgwOFwiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODA5XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MTJcIjogWzAuMjU1ODMsIDAuNzU1ODMsIDAsIDAsIDAuNV0sXG4gICAgXCI4ODE0XCI6IFswLjIwNTc2LCAwLjcwNTc2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MTVcIjogWzAuMjA1NzYsIDAuNzA1NzYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgxNlwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODE3XCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MThcIjogWzAuMjI5NTgsIDAuNzI5NTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgxOVwiOiBbMC4yMjk1OCwgMC43Mjk1OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODIyXCI6IFswLjE4MDgsIDAuNjc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MjNcIjogWzAuMTgwOCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgyOFwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODI5XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzBcIjogWzAuMjI5NTgsIDAuNzI5NTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgzMVwiOiBbMC4yMjk1OCwgMC43Mjk1OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODMyXCI6IFswLjIwNTc2LCAwLjcwNTc2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzNcIjogWzAuMjA1NzYsIDAuNzA1NzYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg0MFwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODQxXCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NDJcIjogWzAuMTM1OTcsIDAuNjM1OTcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg0M1wiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODQ3XCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NDhcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg1OFwiOiBbMC4wODE5OCwgMC41ODE5OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODU5XCI6IFswLjA4MTk4LCAwLjU4MTk4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NjFcIjogWzAuMDgxOTgsIDAuNTgxOTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2MlwiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2M1wiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2NFwiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2NVwiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg3MlwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4ODczXCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg4NzRcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuODg4ODldLFxuICAgIFwiODg3NlwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4ODc3XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg4NzhcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODg3OVwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4ODgyXCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4ODNcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg4NFwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODg1XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4ODhcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiODg5MFwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI4ODkxXCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg4OTJcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODkwMVwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4OTAzXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MDVcIjogWzAuMDgxNjcsIDAuNTgxNjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkwNlwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTA3XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MDhcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkwOVwiOiBbLTAuMDM1OTgsIDAuNDY0MDIsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkxMFwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC43NjA0Ml0sXG4gICAgXCI4OTExXCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjc2MDQyXSxcbiAgICBcIjg5MTJcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkxM1wiOiBbMC4wMzUxNywgMC41NDk4NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTE0XCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg5MTVcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODkxNlwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4OTE4XCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTE5XCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTIwXCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAxLjMzMzM0XSxcbiAgICBcIjg5MjFcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDEuMzMzMzRdLFxuICAgIFwiODkyMlwiOiBbMC4zODU2OSwgMC44ODU2OSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTIzXCI6IFswLjM4NTY5LCAwLjg4NTY5LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MjZcIjogWzAuMTM2NjcsIDAuNjM2NjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkyN1wiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTI4XCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MjlcIjogWzAuMzAyNzQsIDAuNzkzODMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkzNFwiOiBbMC4yMzIyMiwgMC43NDExMSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTM1XCI6IFswLjIzMjIyLCAwLjc0MTExLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MzZcIjogWzAuMjMyMjIsIDAuNzQxMTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkzN1wiOiBbMC4yMzIyMiwgMC43NDExMSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTM4XCI6IFswLjIwNTc2LCAwLjcwNTc2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MzlcIjogWzAuMjA1NzYsIDAuNzA1NzYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODk0MFwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTQxXCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5OTRcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODk5NVwiOiBbMC4xOTQ0NCwgMC42OTIyNCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5NDE2XCI6IFswLjE1NTU5LCAwLjY5MjI0LCAwLCAwLCAwLjkwMjIyXSxcbiAgICBcIjk0ODRcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNV0sXG4gICAgXCI5NDg4XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjVdLFxuICAgIFwiOTQ5MlwiOiBbMCwgMC4zNzc4OCwgMCwgMCwgMC41XSxcbiAgICBcIjk0OTZcIjogWzAsIDAuMzc3ODgsIDAsIDAsIDAuNV0sXG4gICAgXCI5NTg1XCI6IFswLjE5NDQ0LCAwLjY4ODg5LCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjk1ODZcIjogWzAuMTk0NDQsIDAuNzQxMTEsIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTYzMlwiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTYzM1wiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTY1MFwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5NjUxXCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjk2NTRcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTY2MFwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5NjYxXCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjk2NjRcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTY3NFwiOiBbMC4xMTExMSwgMC42OTIyNCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5NzMzXCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjk0NDQ1XSxcbiAgICBcIjEwMDAzXCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjEwMDE2XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjEwNzMxXCI6IFswLjExMTExLCAwLjY5MjI0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjEwODQ2XCI6IFswLjE5NDQ0LCAwLjc1NTgzLCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjEwODc3XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODc4XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg1XCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg2XCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg3XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg4XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg5XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODkwXCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODkxXCI6IFswLjQ4MjU2LCAwLjk4MjU2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODkyXCI6IFswLjQ4MjU2LCAwLjk4MjU2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTAxXCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTAyXCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTMzXCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM0XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM1XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM2XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM3XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM4XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTQ5XCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTUwXCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTU1XCI6IFswLjI4NDgxLCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTU2XCI6IFswLjI4NDgxLCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzUwXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjIyMjIyXSxcbiAgICBcIjU3MzUxXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjU3MzUyXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzUzXCI6IFswLCAwLjQzMDU2LCAwLjA0MDI4LCAwLCAwLjY2NjY3XSxcbiAgICBcIjU3MzU2XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzU3XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzU4XCI6IFswLjQxOTUxLCAwLjkxOTUxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzU5XCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzYwXCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzYxXCI6IFswLjQxOTUxLCAwLjkxOTUxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzY2XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzY3XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzY4XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzY5XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzcwXCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzcxXCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XVxuICB9LFxuICBcIkNhbGlncmFwaGljLVJlZ3VsYXJcIjoge1xuICAgIFwiNDhcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCI0OVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1MlwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTRcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1NVwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjU2XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTdcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCI2NVwiOiBbMCwgMC42ODMzMywgMCwgMC4xOTQ0NSwgMC43OTg0N10sXG4gICAgXCI2NlwiOiBbMCwgMC42ODMzMywgMC4wMzA0MSwgMC4xMzg4OSwgMC42NTY4MV0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODMzMywgMC4wNTgzNCwgMC4xMzg4OSwgMC41MjY1M10sXG4gICAgXCI2OFwiOiBbMCwgMC42ODMzMywgMC4wMjc3OCwgMC4wODMzNCwgMC43NzEzOV0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODMzMywgMC4wODk0NCwgMC4xMTExMSwgMC41Mjc3OF0sXG4gICAgXCI3MFwiOiBbMCwgMC42ODMzMywgMC4wOTkzMSwgMC4xMTExMSwgMC43MTg3NV0sXG4gICAgXCI3MVwiOiBbMC4wOTcyMiwgMC42ODMzMywgMC4wNTkzLCAwLjExMTExLCAwLjU5NDg3XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4MzMzLCAwLjAwOTY1LCAwLjExMTExLCAwLjg0NDUyXSxcbiAgICBcIjczXCI6IFswLCAwLjY4MzMzLCAwLjA3MzgyLCAwLCAwLjU0NDUyXSxcbiAgICBcIjc0XCI6IFswLjA5NzIyLCAwLjY4MzMzLCAwLjE4NDcyLCAwLjE2NjY3LCAwLjY3Nzc4XSxcbiAgICBcIjc1XCI6IFswLCAwLjY4MzMzLCAwLjAxNDQ1LCAwLjA1NTU2LCAwLjc2MTk1XSxcbiAgICBcIjc2XCI6IFswLCAwLjY4MzMzLCAwLCAwLjEzODg5LCAwLjY4OTcyXSxcbiAgICBcIjc3XCI6IFswLCAwLjY4MzMzLCAwLCAwLjEzODg5LCAxLjIwMDldLFxuICAgIFwiNzhcIjogWzAsIDAuNjgzMzMsIDAuMTQ3MzYsIDAuMDgzMzQsIDAuODIwNDldLFxuICAgIFwiNzlcIjogWzAsIDAuNjgzMzMsIDAuMDI3NzgsIDAuMTExMTEsIDAuNzk2MTFdLFxuICAgIFwiODBcIjogWzAsIDAuNjgzMzMsIDAuMDgyMjIsIDAuMDgzMzQsIDAuNjk1NTZdLFxuICAgIFwiODFcIjogWzAuMDk3MjIsIDAuNjgzMzMsIDAsIDAuMTExMTEsIDAuODE2NjddLFxuICAgIFwiODJcIjogWzAsIDAuNjgzMzMsIDAsIDAuMDgzMzQsIDAuODQ3NV0sXG4gICAgXCI4M1wiOiBbMCwgMC42ODMzMywgMC4wNzUsIDAuMTM4ODksIDAuNjA1NTZdLFxuICAgIFwiODRcIjogWzAsIDAuNjgzMzMsIDAuMjU0MTcsIDAsIDAuNTQ0NjRdLFxuICAgIFwiODVcIjogWzAsIDAuNjgzMzMsIDAuMDk5MzEsIDAuMDgzMzQsIDAuNjI1ODNdLFxuICAgIFwiODZcIjogWzAsIDAuNjgzMzMsIDAuMDgyMjIsIDAsIDAuNjEyNzhdLFxuICAgIFwiODdcIjogWzAsIDAuNjgzMzMsIDAuMDgyMjIsIDAuMDgzMzQsIDAuOTg3NzhdLFxuICAgIFwiODhcIjogWzAsIDAuNjgzMzMsIDAuMTQ2NDMsIDAuMTM4ODksIDAuNzEzM10sXG4gICAgXCI4OVwiOiBbMC4wOTcyMiwgMC42ODMzMywgMC4wODIyMiwgMC4wODMzNCwgMC42NjgzNF0sXG4gICAgXCI5MFwiOiBbMCwgMC42ODMzMywgMC4wNzk0NCwgMC4xMzg4OSwgMC43MjQ3M11cbiAgfSxcbiAgXCJGcmFrdHVyLVJlZ3VsYXJcIjoge1xuICAgIFwiMzNcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjk1NzRdLFxuICAgIFwiMzRcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjE0NzFdLFxuICAgIFwiMzhcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNzM3ODZdLFxuICAgIFwiMzlcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjEyMDFdLFxuICAgIFwiNDBcIjogWzAuMjQ5ODIsIDAuNzQ5NDcsIDAsIDAsIDAuMzg4NjVdLFxuICAgIFwiNDFcIjogWzAuMjQ5ODIsIDAuNzQ5NDcsIDAsIDAsIDAuMzg4NjVdLFxuICAgIFwiNDJcIjogWzAsIDAuNjIxMTksIDAsIDAsIDAuMjc3NjRdLFxuICAgIFwiNDNcIjogWzAuMDgzMTksIDAuNTgyODMsIDAsIDAsIDAuNzU2MjNdLFxuICAgIFwiNDRcIjogWzAsIDAuMTA4MDMsIDAsIDAsIDAuMjc3NjRdLFxuICAgIFwiNDVcIjogWzAuMDgzMTksIDAuNTgyODMsIDAsIDAsIDAuNzU2MjNdLFxuICAgIFwiNDZcIjogWzAsIDAuMTA4MDMsIDAsIDAsIDAuMjc3NjRdLFxuICAgIFwiNDdcIjogWzAuMjQ5ODIsIDAuNzQ5NDcsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNDhcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNDlcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTBcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTFcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTJcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTNcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTRcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTVcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTZcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTdcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNThcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuMjE2MDZdLFxuICAgIFwiNTlcIjogWzAuMTI2MDQsIDAuNDc1MzQsIDAsIDAsIDAuMjE2MDZdLFxuICAgIFwiNjFcIjogWy0wLjEzMDk5LCAwLjM2ODY2LCAwLCAwLCAwLjc1NjIzXSxcbiAgICBcIjYzXCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjM2MjQ1XSxcbiAgICBcIjY1XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjcxNzZdLFxuICAgIFwiNjZcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuODgzOTddLFxuICAgIFwiNjdcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNjEyNTRdLFxuICAgIFwiNjhcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuODMxNThdLFxuICAgIFwiNjlcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNjYyNzhdLFxuICAgIFwiNzBcIjogWzAuMTI2MDQsIDAuNjkxNDEsIDAsIDAsIDAuNjExMTldLFxuICAgIFwiNzFcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNzg1MzldLFxuICAgIFwiNzJcIjogWzAuMDYzMDIsIDAuNjkxNDEsIDAsIDAsIDAuNzIwM10sXG4gICAgXCI3M1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC41NTQ0OF0sXG4gICAgXCI3NFwiOiBbMC4xMjYwNCwgMC42OTE0MSwgMCwgMCwgMC41NTIzMV0sXG4gICAgXCI3NVwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42Njg0NV0sXG4gICAgXCI3NlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42NjYwMl0sXG4gICAgXCI3N1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMS4wNDk1M10sXG4gICAgXCI3OFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MzIxMl0sXG4gICAgXCI3OVwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MjY5OV0sXG4gICAgXCI4MFwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC44Mjc1M10sXG4gICAgXCI4MVwiOiBbMC4wMzc4MSwgMC42OTE0MSwgMCwgMCwgMC44MjY5OV0sXG4gICAgXCI4MlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MjgwN10sXG4gICAgXCI4M1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44Mjg2MV0sXG4gICAgXCI4NFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42Njg5OV0sXG4gICAgXCI4NVwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42NDU3Nl0sXG4gICAgXCI4NlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MzEzMV0sXG4gICAgXCI4N1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMS4wNDYwMl0sXG4gICAgXCI4OFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC43MTkyMl0sXG4gICAgXCI4OVwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC44MzI5M10sXG4gICAgXCI5MFwiOiBbMC4xMjYwNCwgMC42OTE0MSwgMCwgMCwgMC42MDIwMV0sXG4gICAgXCI5MVwiOiBbMC4yNDk4MiwgMC43NDk0NywgMCwgMCwgMC4yNzc2NF0sXG4gICAgXCI5M1wiOiBbMC4yNDk4MiwgMC43NDk0NywgMCwgMCwgMC4yNzc2NF0sXG4gICAgXCI5NFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC40OTk2NV0sXG4gICAgXCI5N1wiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC41MDA0Nl0sXG4gICAgXCI5OFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC41MTMxNV0sXG4gICAgXCI5OVwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC4zODk0Nl0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjIxMTksIDAsIDAsIDAuNDk4NTddLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjQwMDUzXSxcbiAgICBcIjEwMlwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC4zMjYyNl0sXG4gICAgXCIxMDNcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAzN10sXG4gICAgXCIxMDRcIjogWzAuMTg5MDYsIDAuNjkxNDEsIDAsIDAsIDAuNTIxMjZdLFxuICAgIFwiMTA1XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjI3ODk5XSxcbiAgICBcIjEwNlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC4yODA4OF0sXG4gICAgXCIxMDdcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMzg5NDZdLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjI3OTUzXSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC43NjY3Nl0sXG4gICAgXCIxMTBcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTI2NjZdLFxuICAgIFwiMTExXCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjQ4ODg1XSxcbiAgICBcIjExMlwiOiBbMC4xODkwNiwgMC41MjM5NiwgMCwgMCwgMC41MDA0Nl0sXG4gICAgXCIxMTNcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNDg5MTJdLFxuICAgIFwiMTE0XCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjM4OTE5XSxcbiAgICBcIjExNVwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC40NDI2Nl0sXG4gICAgXCIxMTZcIjogWzAsIDAuNjIxMTksIDAsIDAsIDAuMzMzMDFdLFxuICAgIFwiMTE3XCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjUxNzJdLFxuICAgIFwiMTE4XCI6IFswLCAwLjUyMzk2LCAwLCAwLCAwLjUxMThdLFxuICAgIFwiMTE5XCI6IFswLCAwLjUyMzk2LCAwLCAwLCAwLjc3MzUxXSxcbiAgICBcIjEyMFwiOiBbMC4xODkwNiwgMC40NzUzNCwgMCwgMCwgMC4zODg2NV0sXG4gICAgXCIxMjFcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNDk4ODRdLFxuICAgIFwiMTIyXCI6IFswLjE4OTA2LCAwLjQ3NTM0LCAwLCAwLCAwLjM5MDU0XSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjE0NzFdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC4yMTQ3MV0sXG4gICAgXCI1ODExMlwiOiBbMCwgMC42MjExOSwgMCwgMCwgMC40OTc0OV0sXG4gICAgXCI1ODExM1wiOiBbMCwgMC42MjExOSwgMCwgMCwgMC40OTgzXSxcbiAgICBcIjU4MTE0XCI6IFswLjE4OTA2LCAwLjY5MTQxLCAwLCAwLCAwLjMzMzI4XSxcbiAgICBcIjU4MTE1XCI6IFswLjE4OTA2LCAwLjY5MTQxLCAwLCAwLCAwLjMyOTIzXSxcbiAgICBcIjU4MTE2XCI6IFswLjE4OTA2LCAwLjQ3NTM0LCAwLCAwLCAwLjUwMzQzXSxcbiAgICBcIjU4MTE3XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjMzMzAxXSxcbiAgICBcIjU4MTE4XCI6IFswLCAwLjYyMTE5LCAwLCAwLCAwLjMzNDA5XSxcbiAgICBcIjU4MTE5XCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjUwMDczXVxuICB9LFxuICBcIk1haW4tQm9sZFwiOiB7XG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zNV0sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MDI3OF0sXG4gICAgXCIzNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC45NTgzM10sXG4gICAgXCIzNlwiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDAuOTU4MzNdLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjQzXCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjQ0XCI6IFswLjE5NDQ0LCAwLjE1NTU2LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjQ1XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjM4MzMzXSxcbiAgICBcIjQ2XCI6IFswLCAwLjE1NTU2LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjQ3XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI0OFwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNDlcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjUwXCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1MVwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTJcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjUzXCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1NFwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTVcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjU2XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1N1wiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNThcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiNTlcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiNjBcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiNjFcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjYyXCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjYzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU0MzA1XSxcbiAgICBcIjY0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjY1XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg2OTQ0XSxcbiAgICBcIjY2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjgxODA1XSxcbiAgICBcIjY3XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjgzMDU1XSxcbiAgICBcIjY4XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg4MTk0XSxcbiAgICBcIjY5XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjc1NTU1XSxcbiAgICBcIjcwXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjcyMzYxXSxcbiAgICBcIjcxXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjkwNDE2XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjldLFxuICAgIFwiNzNcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNDM2MTFdLFxuICAgIFwiNzRcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNTk0NDRdLFxuICAgIFwiNzVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuOTAxMzhdLFxuICAgIFwiNzZcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNjkxNjZdLFxuICAgIFwiNzdcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDEuMDkxNjZdLFxuICAgIFwiNzhcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuOV0sXG4gICAgXCI3OVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44NjM4OF0sXG4gICAgXCI4MFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC43ODYxMV0sXG4gICAgXCI4MVwiOiBbMC4xOTQ0NCwgMC42ODYxMSwgMCwgMCwgMC44NjM4OF0sXG4gICAgXCI4MlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44NjI1XSxcbiAgICBcIjgzXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjg0XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjhdLFxuICAgIFwiODVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODg0NzJdLFxuICAgIFwiODZcIjogWzAsIDAuNjg2MTEsIDAuMDE1OTcsIDAsIDAuODY5NDRdLFxuICAgIFwiODdcIjogWzAsIDAuNjg2MTEsIDAuMDE1OTcsIDAsIDEuMTg4ODhdLFxuICAgIFwiODhcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODY5NDRdLFxuICAgIFwiODlcIjogWzAsIDAuNjg2MTEsIDAuMDI4NzUsIDAsIDAuODY5NDRdLFxuICAgIFwiOTBcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNzAyNzddLFxuICAgIFwiOTFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiOTJcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI5NVwiOiBbMC4zMSwgMC4xMzQ0NCwgMC4wMzE5NCwgMCwgMC41NzVdLFxuICAgIFwiOTdcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTU5MDJdLFxuICAgIFwiOThcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiOTlcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiMTAwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjEwMVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MjcwOF0sXG4gICAgXCIxMDJcIjogWzAsIDAuNjk0NDQsIDAuMTA5MDMsIDAsIDAuMzUxMzldLFxuICAgIFwiMTAzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAxNTk3LCAwLCAwLjU3NV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiMTA1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4zNTEzOV0sXG4gICAgXCIxMDdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjA2OTRdLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC45NTgzM10sXG4gICAgXCIxMTBcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiMTExXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjYwNjk0XSxcbiAgICBcIjExNFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40NzM2MV0sXG4gICAgXCIxMTVcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNDUzNjFdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYzNDkyLCAwLCAwLCAwLjQ0NzIyXSxcbiAgICBcIjExN1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCIxMThcIjogWzAsIDAuNDQ0NDQsIDAuMDE1OTcsIDAsIDAuNjA2OTRdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQ0NDQ0LCAwLjAxNTk3LCAwLCAwLjgzMDU1XSxcbiAgICBcIjEyMFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC42MDY5NF0sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDE1OTcsIDAsIDAuNjA2OTRdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjEyM1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiMTI0XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjEyNVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiMTI2XCI6IFswLjM1LCAwLjM0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCIxNjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjE3MlwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCIxNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODY5NDRdLFxuICAgIFwiMTc3XCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjE4NFwiOiBbMC4xNzAxNCwgMCwgMCwgMCwgMC41MTExMV0sXG4gICAgXCIxOThcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDEuMDQxNjZdLFxuICAgIFwiMjE1XCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjIxNlwiOiBbMC4wNDg2MSwgMC43MzQ3MiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCIyMjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTk3MjJdLFxuICAgIFwiMjMwXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjgzMDU1XSxcbiAgICBcIjI0N1wiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCIyNDhcIjogWzAuMDk3MjIsIDAuNTQxNjcsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjMwNVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCIzMzhcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDEuMTY5NDRdLFxuICAgIFwiMzM5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjU2N1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC4zNTEzOV0sXG4gICAgXCI3MTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjcxMVwiOiBbMCwgMC42MzE5NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNzEzXCI6IFswLCAwLjU5NjExLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI3MTRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjcxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI3MjlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiNzMwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg2OTQ0XSxcbiAgICBcIjczMlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNzMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNjkxNjZdLFxuICAgIFwiOTE2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjk1ODMzXSxcbiAgICBcIjkyMFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI5MjNcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODA1NTVdLFxuICAgIFwiOTI2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44MzA1NV0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjgzMDU1XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODMwNTVdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40NDQ0NCwgMC4wMzE5NCwgMCwgMC41NzVdLFxuICAgIFwiODIxMlwiOiBbMCwgMC40NDQ0NCwgMC4wMzE5NCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4MjE2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjgyMTdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiODIyMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MDI3OF0sXG4gICAgXCI4MjIxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYwMjc4XSxcbiAgICBcIjgyMjRcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiODIyNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC41MTExMV0sXG4gICAgXCI4MjQyXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjM0NDQ0XSxcbiAgICBcIjg0MDdcIjogWzAsIDAuNzI0NDQsIDAuMTU0ODYsIDAsIDAuNTc1XSxcbiAgICBcIjg0NjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY3NTldLFxuICAgIFwiODQ2NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44MzA1NV0sXG4gICAgXCI4NDY3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjQ3MzYxXSxcbiAgICBcIjg0NzJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNzQwMjddLFxuICAgIFwiODQ3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44MzA1NV0sXG4gICAgXCI4NTAxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc3XSxcbiAgICBcIjg1OTJcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg1OTNcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg1OTRcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg1OTVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg1OTZcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg1OTdcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg1OThcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODU5OVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4NjAwXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg2MDFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODYzNlwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODYzN1wiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY0MFwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY0MVwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY1NlwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY1N1wiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC43MDI3N10sXG4gICAgXCI4NjU4XCI6IFstMC4xMDg4OSwgMC4zOTExMSwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4NjU5XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc3XSxcbiAgICBcIjg2NjBcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg2NjFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNzAyNzddLFxuICAgIFwiODcwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI4NzA2XCI6IFswLCAwLjY5NDQ0LCAwLjA2Mzg5LCAwLCAwLjYyODQ3XSxcbiAgICBcIjg3MDdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiODcwOVwiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiODcxMVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45NTgzM10sXG4gICAgXCI4NzEyXCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg3MTVcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiODcyMlwiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4NzIzXCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg3MjVcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg3MjZcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg3MjdcIjogWy0wLjAyNzc4LCAwLjQ3MjIyLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI4NzI4XCI6IFstMC4wMjYzOSwgMC40NzM2MSwgMCwgMCwgMC41NzVdLFxuICAgIFwiODcyOVwiOiBbLTAuMDI2MzksIDAuNDczNjEsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg3MzBcIjogWzAuMTgsIDAuODIsIDAsIDAsIDAuOTU4MzNdLFxuICAgIFwiODczM1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4NzM0XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg3MzZcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODczOVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI4NzQxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI4NzQzXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg3NDRcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiODc0NVwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCI4NzQ2XCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg3NDdcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMTI3NzgsIDAsIDAuNTY4NzVdLFxuICAgIFwiODc2NFwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODc2OFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI4NzcxXCI6IFswLjAwMjIyLCAwLjUwMjIyLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg3NzZcIjogWzAuMDI0NDQsIDAuNTI0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODc4MVwiOiBbMC4wMDIyMiwgMC41MDIyMiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODAxXCI6IFswLjAwMjIyLCAwLjUwMjIyLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4MDRcIjogWzAuMTk2NjcsIDAuNjk2NjcsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODgwNVwiOiBbMC4xOTY2NywgMC42OTY2NywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODEwXCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg4MTFcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODgyNlwiOiBbMC4wODU1NiwgMC41ODU1NiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODI3XCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4MzRcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODgzNVwiOiBbMC4wODU1NiwgMC41ODU1NiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODM4XCI6IFswLjE5NjY3LCAwLjY5NjY3LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4MzlcIjogWzAuMTk2NjcsIDAuNjk2NjcsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODg0NlwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCI4ODQ5XCI6IFswLjE5NjY3LCAwLjY5NjY3LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4NTBcIjogWzAuMTk2NjcsIDAuNjk2NjcsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODg1MVwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCI4ODUyXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg4NTNcIjogWzAuMTMzMzMsIDAuNjMzMzMsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODg1NFwiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODU1XCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4NTZcIjogWzAuMTMzMzMsIDAuNjMzMzMsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODg1N1wiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODY2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc3XSxcbiAgICBcIjg4NjdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzAyNzddLFxuICAgIFwiODg2OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODY5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg5MDBcIjogWy0wLjAyNjM5LCAwLjQ3MzYxLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI4OTAxXCI6IFstMC4wMjYzOSwgMC40NzM2MSwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI4OTAyXCI6IFstMC4wMjc3OCwgMC40NzIyMiwgMCwgMCwgMC41NzVdLFxuICAgIFwiODk2OFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41MTExMV0sXG4gICAgXCI4OTY5XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjg5NzBcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiODk3MVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41MTExMV0sXG4gICAgXCI4OTk0XCI6IFstMC4xMzg4OSwgMC4zNjExMSwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4OTk1XCI6IFstMC4xMzg4OSwgMC4zNjExMSwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI5NjUxXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjAyMjIyXSxcbiAgICBcIjk2NTdcIjogWy0wLjAyNzc4LCAwLjQ3MjIyLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI5NjYxXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjAyMjIyXSxcbiAgICBcIjk2NjdcIjogWy0wLjAyNzc4LCAwLjQ3MjIyLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI5NzExXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjk4MjRcIjogWzAuMTI5NjMsIDAuNjk0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiOTgyNVwiOiBbMC4xMjk2MywgMC42OTQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI5ODI2XCI6IFswLjEyOTYzLCAwLjY5NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjk4MjdcIjogWzAuMTI5NjMsIDAuNjk0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiOTgzN1wiOiBbMCwgMC43NSwgMCwgMCwgMC40NDcyMl0sXG4gICAgXCI5ODM4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjQ0NzIyXSxcbiAgICBcIjk4MzlcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiMTAyMTZcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiMTAyMTdcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiMTA4MTVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuOV0sXG4gICAgXCIxMDkyN1wiOiBbMC4xOTY2NywgMC42OTY2NywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCIxMDkyOFwiOiBbMC4xOTY2NywgMC42OTY2NywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI1NzM3NlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMF1cbiAgfSxcbiAgXCJNYWluLUJvbGRJdGFsaWNcIjoge1xuICAgIFwiMzNcIjogWzAsIDAuNjk0NDQsIDAuMTE0MTcsIDAsIDAuMzg2MTFdLFxuICAgIFwiMzRcIjogWzAsIDAuNjk0NDQsIDAuMDc5MzksIDAsIDAuNjIwNTVdLFxuICAgIFwiMzVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDY4MzMsIDAsIDAuOTQ0NDRdLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAuMTI4NjEsIDAsIDAuOTQ0NDRdLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAuMDg1MjgsIDAsIDAuODg1NTVdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAuMTI5NDUsIDAsIDAuMzU1NTVdLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAuMTU4MDYsIDAsIDAuNDczMzNdLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAuMDMzMDYsIDAsIDAuNDczMzNdLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAuMTQzMzMsIDAsIDAuNTkxMTFdLFxuICAgIFwiNDNcIjogWzAuMTAzMzMsIDAuNjAzMzMsIDAuMDMzMDYsIDAsIDAuODg1NTVdLFxuICAgIFwiNDRcIjogWzAuMTk0NDQsIDAuMTQ3MjIsIDAsIDAsIDAuMzU1NTVdLFxuICAgIFwiNDVcIjogWzAsIDAuNDQ0NDQsIDAuMDI2MTEsIDAsIDAuNDE0NDRdLFxuICAgIFwiNDZcIjogWzAsIDAuMTQ3MjIsIDAsIDAsIDAuMzU1NTVdLFxuICAgIFwiNDdcIjogWzAuMjUsIDAuNzUsIDAuMTU4MDYsIDAsIDAuNTkxMTFdLFxuICAgIFwiNDhcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNDlcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTBcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTFcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTJcIjogWzAuMTk0NDQsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTNcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTRcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTVcIjogWzAuMTk0NDQsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTZcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNTdcIjogWzAsIDAuNjQ0NDQsIDAuMTMxNjcsIDAsIDAuNTkxMTFdLFxuICAgIFwiNThcIjogWzAsIDAuNDQ0NDQsIDAuMDY2OTUsIDAsIDAuMzU1NTVdLFxuICAgIFwiNTlcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDY2OTUsIDAsIDAuMzU1NTVdLFxuICAgIFwiNjFcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLjA2ODMzLCAwLCAwLjg4NTU1XSxcbiAgICBcIjYzXCI6IFswLCAwLjY5NDQ0LCAwLjExNDcyLCAwLCAwLjU5MTExXSxcbiAgICBcIjY0XCI6IFswLCAwLjY5NDQ0LCAwLjA5MjA4LCAwLCAwLjg4NTU1XSxcbiAgICBcIjY1XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg2NTU1XSxcbiAgICBcIjY2XCI6IFswLCAwLjY4NjExLCAwLjA5OTIsIDAsIDAuODE2NjZdLFxuICAgIFwiNjdcIjogWzAsIDAuNjg2MTEsIDAuMTQyMDgsIDAsIDAuODI2NjZdLFxuICAgIFwiNjhcIjogWzAsIDAuNjg2MTEsIDAuMDkwNjIsIDAsIDAuODc1NTVdLFxuICAgIFwiNjlcIjogWzAsIDAuNjg2MTEsIDAuMTE0MzEsIDAsIDAuNzU2NjZdLFxuICAgIFwiNzBcIjogWzAsIDAuNjg2MTEsIDAuMTI5MDMsIDAsIDAuNzI3MjJdLFxuICAgIFwiNzFcIjogWzAsIDAuNjg2MTEsIDAuMDczNDcsIDAsIDAuODk1MjddLFxuICAgIFwiNzJcIjogWzAsIDAuNjg2MTEsIDAuMTcyMDgsIDAsIDAuODk2MV0sXG4gICAgXCI3M1wiOiBbMCwgMC42ODYxMSwgMC4xNTY4MSwgMCwgMC40NzE2Nl0sXG4gICAgXCI3NFwiOiBbMCwgMC42ODYxMSwgMC4xNDUsIDAsIDAuNjEwNTVdLFxuICAgIFwiNzVcIjogWzAsIDAuNjg2MTEsIDAuMTQyMDgsIDAsIDAuODk0OTldLFxuICAgIFwiNzZcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNjk3NzddLFxuICAgIFwiNzdcIjogWzAsIDAuNjg2MTEsIDAuMTcyMDgsIDAsIDEuMDcyNzddLFxuICAgIFwiNzhcIjogWzAsIDAuNjg2MTEsIDAuMTcyMDgsIDAsIDAuODk2MV0sXG4gICAgXCI3OVwiOiBbMCwgMC42ODYxMSwgMC4wOTA2MiwgMCwgMC44NTQ5OV0sXG4gICAgXCI4MFwiOiBbMCwgMC42ODYxMSwgMC4wOTkyLCAwLCAwLjc4NzIxXSxcbiAgICBcIjgxXCI6IFswLjE5NDQ0LCAwLjY4NjExLCAwLjA5MDYyLCAwLCAwLjg1NDk5XSxcbiAgICBcIjgyXCI6IFswLCAwLjY4NjExLCAwLjAyNTU5LCAwLCAwLjg1OTQ0XSxcbiAgICBcIjgzXCI6IFswLCAwLjY4NjExLCAwLjExMjY0LCAwLCAwLjY0OTk5XSxcbiAgICBcIjg0XCI6IFswLCAwLjY4NjExLCAwLjEyOTAzLCAwLCAwLjc5NjFdLFxuICAgIFwiODVcIjogWzAsIDAuNjg2MTEsIDAuMTcyMDgsIDAsIDAuODgwODNdLFxuICAgIFwiODZcIjogWzAsIDAuNjg2MTEsIDAuMTg2MjUsIDAsIDAuODY1NTVdLFxuICAgIFwiODdcIjogWzAsIDAuNjg2MTEsIDAuMTg2MjUsIDAsIDEuMTU5OTldLFxuICAgIFwiODhcIjogWzAsIDAuNjg2MTEsIDAuMTU2ODEsIDAsIDAuODY1NTVdLFxuICAgIFwiODlcIjogWzAsIDAuNjg2MTEsIDAuMTk4MDMsIDAsIDAuODY1NTVdLFxuICAgIFwiOTBcIjogWzAsIDAuNjg2MTEsIDAuMTQyMDgsIDAsIDAuNzA4ODhdLFxuICAgIFwiOTFcIjogWzAuMjUsIDAuNzUsIDAuMTg3NSwgMCwgMC4zNTYxMV0sXG4gICAgXCI5M1wiOiBbMC4yNSwgMC43NSwgMC4wOTk3MiwgMCwgMC4zNTYxMV0sXG4gICAgXCI5NFwiOiBbMCwgMC42OTQ0NCwgMC4wNjcwOSwgMCwgMC41OTExMV0sXG4gICAgXCI5NVwiOiBbMC4zMSwgMC4xMzQ0NCwgMC4wOTgxMSwgMCwgMC41OTExMV0sXG4gICAgXCI5N1wiOiBbMCwgMC40NDQ0NCwgMC4wOTQyNiwgMCwgMC41OTExMV0sXG4gICAgXCI5OFwiOiBbMCwgMC42OTQ0NCwgMC4wNzg2MSwgMCwgMC41MzIyMl0sXG4gICAgXCI5OVwiOiBbMCwgMC40NDQ0NCwgMC4wNTIyMiwgMCwgMC41MzIyMl0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjk0NDQsIDAuMTA4NjEsIDAsIDAuNTkxMTFdLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ0NDQ0LCAwLjA4NSwgMCwgMC41MzIyMl0sXG4gICAgXCIxMDJcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMjE3NzgsIDAsIDAuNF0sXG4gICAgXCIxMDNcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMTA1LCAwLCAwLjUzMjIyXSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMC4wOTQyNiwgMCwgMC41OTExMV0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjkzMjYsIDAuMTEzODcsIDAsIDAuMzU1NTVdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY5MzI2LCAwLjE2NzIsIDAsIDAuMzU1NTVdLFxuICAgIFwiMTA3XCI6IFswLCAwLjY5NDQ0LCAwLjExMTExLCAwLCAwLjUzMjIyXSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMC4xMDg2MSwgMCwgMC4yOTY2Nl0sXG4gICAgXCIxMDlcIjogWzAsIDAuNDQ0NDQsIDAuMDk0MjYsIDAsIDAuOTQ0NDRdLFxuICAgIFwiMTEwXCI6IFswLCAwLjQ0NDQ0LCAwLjA5NDI2LCAwLCAwLjY0OTk5XSxcbiAgICBcIjExMVwiOiBbMCwgMC40NDQ0NCwgMC4wNzg2MSwgMCwgMC41OTExMV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDc4NjEsIDAsIDAuNTkxMTFdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjEwNSwgMCwgMC41MzIyMl0sXG4gICAgXCIxMTRcIjogWzAsIDAuNDQ0NDQsIDAuMTExMTEsIDAsIDAuNTAxNjddLFxuICAgIFwiMTE1XCI6IFswLCAwLjQ0NDQ0LCAwLjA4MTY3LCAwLCAwLjQ4Njk0XSxcbiAgICBcIjExNlwiOiBbMCwgMC42MzQ5MiwgMC4wOTYzOSwgMCwgMC4zODVdLFxuICAgIFwiMTE3XCI6IFswLCAwLjQ0NDQ0LCAwLjA5NDI2LCAwLCAwLjYyMDU1XSxcbiAgICBcIjExOFwiOiBbMCwgMC40NDQ0NCwgMC4xMTExMSwgMCwgMC41MzIyMl0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDQ0NDQsIDAuMTExMTEsIDAsIDAuNzY3NzddLFxuICAgIFwiMTIwXCI6IFswLCAwLjQ0NDQ0LCAwLjEyNTgzLCAwLCAwLjU2MDU1XSxcbiAgICBcIjEyMVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4xMDUsIDAsIDAuNTYxNjZdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQ0NDQ0LCAwLjEzODg5LCAwLCAwLjQ5MDU1XSxcbiAgICBcIjEyNlwiOiBbMC4zNSwgMC4zNDQ0NCwgMC4xMTQ3MiwgMCwgMC41OTExMV0sXG4gICAgXCIxNjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODY4NTNdLFxuICAgIFwiMTY4XCI6IFswLCAwLjY5NDQ0LCAwLjExNDczLCAwLCAwLjU5MTExXSxcbiAgICBcIjE3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC45NDg4OF0sXG4gICAgXCIxODRcIjogWzAuMTcwMTQsIDAsIDAsIDAsIDAuNTMyMjJdLFxuICAgIFwiMTk4XCI6IFswLCAwLjY4NjExLCAwLjExNDMxLCAwLCAxLjAyMjc3XSxcbiAgICBcIjIxNlwiOiBbMC4wNDg2MSwgMC43MzQ3MiwgMC4wOTA2MiwgMCwgMC44ODU1NV0sXG4gICAgXCIyMjNcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDk3MzYsIDAsIDAuNjY1XSxcbiAgICBcIjIzMFwiOiBbMCwgMC40NDQ0NCwgMC4wODUsIDAsIDAuODI2NjZdLFxuICAgIFwiMjQ4XCI6IFswLjA5NzIyLCAwLjU0MTY3LCAwLjA5NDU4LCAwLCAwLjU5MTExXSxcbiAgICBcIjMwNVwiOiBbMCwgMC40NDQ0NCwgMC4wOTQyNiwgMCwgMC4zNTU1NV0sXG4gICAgXCIzMzhcIjogWzAsIDAuNjg2MTEsIDAuMTE0MzEsIDAsIDEuMTQwNTRdLFxuICAgIFwiMzM5XCI6IFswLCAwLjQ0NDQ0LCAwLjA4NSwgMCwgMC44MjY2Nl0sXG4gICAgXCI1NjdcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDQ2MTEsIDAsIDAuMzg1XSxcbiAgICBcIjcxMFwiOiBbMCwgMC42OTQ0NCwgMC4wNjcwOSwgMCwgMC41OTExMV0sXG4gICAgXCI3MTFcIjogWzAsIDAuNjMxOTQsIDAuMDgyNzEsIDAsIDAuNTkxMTFdLFxuICAgIFwiNzEzXCI6IFswLCAwLjU5NDQ0LCAwLjEwNDQ0LCAwLCAwLjU5MTExXSxcbiAgICBcIjcxNFwiOiBbMCwgMC42OTQ0NCwgMC4wODUyOCwgMCwgMC41OTExMV0sXG4gICAgXCI3MTVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTkxMTFdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLjEwMzMzLCAwLCAwLjU5MTExXSxcbiAgICBcIjcyOVwiOiBbMCwgMC42OTQ0NCwgMC4xMjk0NSwgMCwgMC4zNTU1NV0sXG4gICAgXCI3MzBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuOTQ4ODhdLFxuICAgIFwiNzMyXCI6IFswLCAwLjY5NDQ0LCAwLjExNDcyLCAwLCAwLjU5MTExXSxcbiAgICBcIjczM1wiOiBbMCwgMC42OTQ0NCwgMC4xMTQ3MiwgMCwgMC41OTExMV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjg2MTEsIDAuMTI5MDMsIDAsIDAuNjk3NzddLFxuICAgIFwiOTE2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjk0NDQ0XSxcbiAgICBcIjkyMFwiOiBbMCwgMC42ODYxMSwgMC4wOTA2MiwgMCwgMC44ODU1NV0sXG4gICAgXCI5MjNcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODA2NjZdLFxuICAgIFwiOTI2XCI6IFswLCAwLjY4NjExLCAwLjE1MDkyLCAwLCAwLjc2Nzc3XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42ODYxMSwgMC4xNzIwOCwgMCwgMC44OTYxXSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODYxMSwgMC4xMTQzMSwgMCwgMC44MjY2Nl0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjg2MTEsIDAuMTA3NzgsIDAsIDAuODg1NTVdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4NjExLCAwLjA1NjMyLCAwLCAwLjgyNjY2XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODYxMSwgMC4xMDc3OCwgMCwgMC44ODU1NV0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjg2MTEsIDAuMDk5MiwgMCwgMC44MjY2Nl0sXG4gICAgXCI4MjExXCI6IFswLCAwLjQ0NDQ0LCAwLjA5ODExLCAwLCAwLjU5MTExXSxcbiAgICBcIjgyMTJcIjogWzAsIDAuNDQ0NDQsIDAuMDk4MTEsIDAsIDEuMTgyMjFdLFxuICAgIFwiODIxNlwiOiBbMCwgMC42OTQ0NCwgMC4xMjk0NSwgMCwgMC4zNTU1NV0sXG4gICAgXCI4MjE3XCI6IFswLCAwLjY5NDQ0LCAwLjEyOTQ1LCAwLCAwLjM1NTU1XSxcbiAgICBcIjgyMjBcIjogWzAsIDAuNjk0NDQsIDAuMTY3NzIsIDAsIDAuNjIwNTVdLFxuICAgIFwiODIyMVwiOiBbMCwgMC42OTQ0NCwgMC4wNzkzOSwgMCwgMC42MjA1NV1cbiAgfSxcbiAgXCJNYWluLUl0YWxpY1wiOiB7XG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMC4xMjQxNywgMCwgMC4zMDY2N10sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMC4wNjk2MSwgMCwgMC41MTQ0NF0sXG4gICAgXCIzNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wNjYxNiwgMCwgMC44MTc3N10sXG4gICAgXCIzN1wiOiBbMC4wNTU1NiwgMC43NSwgMC4xMzYzOSwgMCwgMC44MTc3N10sXG4gICAgXCIzOFwiOiBbMCwgMC42OTQ0NCwgMC4wOTY5NCwgMCwgMC43NjY2Nl0sXG4gICAgXCIzOVwiOiBbMCwgMC42OTQ0NCwgMC4xMjQxNywgMCwgMC4zMDY2N10sXG4gICAgXCI0MFwiOiBbMC4yNSwgMC43NSwgMC4xNjE5NCwgMCwgMC40MDg4OV0sXG4gICAgXCI0MVwiOiBbMC4yNSwgMC43NSwgMC4wMzY5NCwgMCwgMC40MDg4OV0sXG4gICAgXCI0MlwiOiBbMCwgMC43NSwgMC4xNDkxNywgMCwgMC41MTExMV0sXG4gICAgXCI0M1wiOiBbMC4wNTY2NywgMC41NjE2NywgMC4wMzY5NCwgMCwgMC43NjY2Nl0sXG4gICAgXCI0NFwiOiBbMC4xOTQ0NCwgMC4xMDU1NiwgMCwgMCwgMC4zMDY2N10sXG4gICAgXCI0NVwiOiBbMCwgMC40MzA1NiwgMC4wMjgyNiwgMCwgMC4zNTc3OF0sXG4gICAgXCI0NlwiOiBbMCwgMC4xMDU1NiwgMCwgMCwgMC4zMDY2N10sXG4gICAgXCI0N1wiOiBbMC4yNSwgMC43NSwgMC4xNjE5NCwgMCwgMC41MTExMV0sXG4gICAgXCI0OFwiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI0OVwiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1MFwiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1MVwiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1MlwiOiBbMC4xOTQ0NCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1M1wiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1NFwiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1NVwiOiBbMC4xOTQ0NCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1NlwiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1N1wiOiBbMCwgMC42NDQ0NCwgMC4xMzU1NiwgMCwgMC41MTExMV0sXG4gICAgXCI1OFwiOiBbMCwgMC40MzA1NiwgMC4wNTgyLCAwLCAwLjMwNjY3XSxcbiAgICBcIjU5XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjA1ODIsIDAsIDAuMzA2NjddLFxuICAgIFwiNjFcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLjA2NjE2LCAwLCAwLjc2NjY2XSxcbiAgICBcIjYzXCI6IFswLCAwLjY5NDQ0LCAwLjEyMjUsIDAsIDAuNTExMTFdLFxuICAgIFwiNjRcIjogWzAsIDAuNjk0NDQsIDAuMDk1OTcsIDAsIDAuNzY2NjZdLFxuICAgIFwiNjVcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzQzMzNdLFxuICAgIFwiNjZcIjogWzAsIDAuNjgzMzMsIDAuMTAyNTcsIDAsIDAuNzAzODldLFxuICAgIFwiNjdcIjogWzAsIDAuNjgzMzMsIDAuMTQ1MjgsIDAsIDAuNzE1NTVdLFxuICAgIFwiNjhcIjogWzAsIDAuNjgzMzMsIDAuMDk0MDMsIDAsIDAuNzU1XSxcbiAgICBcIjY5XCI6IFswLCAwLjY4MzMzLCAwLjEyMDI4LCAwLCAwLjY3ODMzXSxcbiAgICBcIjcwXCI6IFswLCAwLjY4MzMzLCAwLjEzMzA1LCAwLCAwLjY1Mjc3XSxcbiAgICBcIjcxXCI6IFswLCAwLjY4MzMzLCAwLjA4NzIyLCAwLCAwLjc3MzYxXSxcbiAgICBcIjcyXCI6IFswLCAwLjY4MzMzLCAwLjE2Mzg5LCAwLCAwLjc0MzMzXSxcbiAgICBcIjczXCI6IFswLCAwLjY4MzMzLCAwLjE1ODA2LCAwLCAwLjM4NTU1XSxcbiAgICBcIjc0XCI6IFswLCAwLjY4MzMzLCAwLjE0MDI4LCAwLCAwLjUyNV0sXG4gICAgXCI3NVwiOiBbMCwgMC42ODMzMywgMC4xNDUyOCwgMCwgMC43Njg4OF0sXG4gICAgXCI3NlwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42MjcyMl0sXG4gICAgXCI3N1wiOiBbMCwgMC42ODMzMywgMC4xNjM4OSwgMCwgMC44OTY2Nl0sXG4gICAgXCI3OFwiOiBbMCwgMC42ODMzMywgMC4xNjM4OSwgMCwgMC43NDMzM10sXG4gICAgXCI3OVwiOiBbMCwgMC42ODMzMywgMC4wOTQwMywgMCwgMC43NjY2Nl0sXG4gICAgXCI4MFwiOiBbMCwgMC42ODMzMywgMC4xMDI1NywgMCwgMC42NzgzM10sXG4gICAgXCI4MVwiOiBbMC4xOTQ0NCwgMC42ODMzMywgMC4wOTQwMywgMCwgMC43NjY2Nl0sXG4gICAgXCI4MlwiOiBbMCwgMC42ODMzMywgMC4wMzg2OCwgMCwgMC43Mjk0NF0sXG4gICAgXCI4M1wiOiBbMCwgMC42ODMzMywgMC4xMTk3MiwgMCwgMC41NjIyMl0sXG4gICAgXCI4NFwiOiBbMCwgMC42ODMzMywgMC4xMzMwNSwgMCwgMC43MTU1NV0sXG4gICAgXCI4NVwiOiBbMCwgMC42ODMzMywgMC4xNjM4OSwgMCwgMC43NDMzM10sXG4gICAgXCI4NlwiOiBbMCwgMC42ODMzMywgMC4xODM2MSwgMCwgMC43NDMzM10sXG4gICAgXCI4N1wiOiBbMCwgMC42ODMzMywgMC4xODM2MSwgMCwgMC45OTg4OF0sXG4gICAgXCI4OFwiOiBbMCwgMC42ODMzMywgMC4xNTgwNiwgMCwgMC43NDMzM10sXG4gICAgXCI4OVwiOiBbMCwgMC42ODMzMywgMC4xOTM4MywgMCwgMC43NDMzM10sXG4gICAgXCI5MFwiOiBbMCwgMC42ODMzMywgMC4xNDUyOCwgMCwgMC42MTMzM10sXG4gICAgXCI5MVwiOiBbMC4yNSwgMC43NSwgMC4xODc1LCAwLCAwLjMwNjY3XSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLjEwNTI4LCAwLCAwLjMwNjY3XSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLjA2NjQ2LCAwLCAwLjUxMTExXSxcbiAgICBcIjk1XCI6IFswLjMxLCAwLjEyMDU2LCAwLjA5MjA4LCAwLCAwLjUxMTExXSxcbiAgICBcIjk3XCI6IFswLCAwLjQzMDU2LCAwLjA3NjcxLCAwLCAwLjUxMTExXSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLjA2MzEyLCAwLCAwLjQ2XSxcbiAgICBcIjk5XCI6IFswLCAwLjQzMDU2LCAwLjA1NjUzLCAwLCAwLjQ2XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMC4xMDMzMywgMCwgMC41MTExMV0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDMwNTYsIDAuMDc1MTQsIDAsIDAuNDZdLFxuICAgIFwiMTAyXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjIxMTk0LCAwLCAwLjMwNjY3XSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wODg0NywgMCwgMC40Nl0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAuMDc2NzEsIDAsIDAuNTExMTFdLFxuICAgIFwiMTA1XCI6IFswLCAwLjY1NTM2LCAwLjEwMTksIDAsIDAuMzA2NjddLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY1NTM2LCAwLjE0NDY3LCAwLCAwLjMwNjY3XSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMC4xMDc2NCwgMCwgMC40Nl0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjk0NDQsIDAuMTAzMzMsIDAsIDAuMjU1NTVdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQzMDU2LCAwLjA3NjcxLCAwLCAwLjgxNzc3XSxcbiAgICBcIjExMFwiOiBbMCwgMC40MzA1NiwgMC4wNzY3MSwgMCwgMC41NjIyMl0sXG4gICAgXCIxMTFcIjogWzAsIDAuNDMwNTYsIDAuMDYzMTIsIDAsIDAuNTExMTFdLFxuICAgIFwiMTEyXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjA2MzEyLCAwLCAwLjUxMTExXSxcbiAgICBcIjExM1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wODg0NywgMCwgMC40Nl0sXG4gICAgXCIxMTRcIjogWzAsIDAuNDMwNTYsIDAuMTA3NjQsIDAsIDAuNDIxNjZdLFxuICAgIFwiMTE1XCI6IFswLCAwLjQzMDU2LCAwLjA4MjA4LCAwLCAwLjQwODg5XSxcbiAgICBcIjExNlwiOiBbMCwgMC42MTUwOCwgMC4wOTQ4NiwgMCwgMC4zMzIyMl0sXG4gICAgXCIxMTdcIjogWzAsIDAuNDMwNTYsIDAuMDc2NzEsIDAsIDAuNTM2NjZdLFxuICAgIFwiMTE4XCI6IFswLCAwLjQzMDU2LCAwLjEwNzY0LCAwLCAwLjQ2XSxcbiAgICBcIjExOVwiOiBbMCwgMC40MzA1NiwgMC4xMDc2NCwgMCwgMC42NjQ0NF0sXG4gICAgXCIxMjBcIjogWzAsIDAuNDMwNTYsIDAuMTIwNDIsIDAsIDAuNDYzODldLFxuICAgIFwiMTIxXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjA4ODQ3LCAwLCAwLjQ4NTU1XSxcbiAgICBcIjEyMlwiOiBbMCwgMC40MzA1NiwgMC4xMjI5MiwgMCwgMC40MDg4OV0sXG4gICAgXCIxMjZcIjogWzAuMzUsIDAuMzE3ODYsIDAuMTE1ODUsIDAsIDAuNTExMTFdLFxuICAgIFwiMTYzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc2OTA5XSxcbiAgICBcIjE2OFwiOiBbMCwgMC42Njc4NiwgMC4xMDQ3NCwgMCwgMC41MTExMV0sXG4gICAgXCIxNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODMxMjldLFxuICAgIFwiMTg0XCI6IFswLjE3MDE0LCAwLCAwLCAwLCAwLjQ2XSxcbiAgICBcIjE5OFwiOiBbMCwgMC42ODMzMywgMC4xMjAyOCwgMCwgMC44ODI3N10sXG4gICAgXCIyMTZcIjogWzAuMDQ4NjEsIDAuNzMxOTQsIDAuMDk0MDMsIDAsIDAuNzY2NjZdLFxuICAgIFwiMjIzXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjEwNTE0LCAwLCAwLjUzNjY2XSxcbiAgICBcIjIzMFwiOiBbMCwgMC40MzA1NiwgMC4wNzUxNCwgMCwgMC43MTU1NV0sXG4gICAgXCIyNDhcIjogWzAuMDk3MjIsIDAuNTI3NzgsIDAuMDkxOTQsIDAsIDAuNTExMTFdLFxuICAgIFwiMzA1XCI6IFswLCAwLjQzMDU2LCAwLCAwLjAyNzc4LCAwLjMyMjQ2XSxcbiAgICBcIjMzOFwiOiBbMCwgMC42ODMzMywgMC4xMjAyOCwgMCwgMC45ODQ5OV0sXG4gICAgXCIzMzlcIjogWzAsIDAuNDMwNTYsIDAuMDc1MTQsIDAsIDAuNzE1NTVdLFxuICAgIFwiNTY3XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLjA4MzM0LCAwLjM4NDAzXSxcbiAgICBcIjcxMFwiOiBbMCwgMC42OTQ0NCwgMC4wNjY0NiwgMCwgMC41MTExMV0sXG4gICAgXCI3MTFcIjogWzAsIDAuNjI4NDcsIDAuMDgyOTUsIDAsIDAuNTExMTFdLFxuICAgIFwiNzEzXCI6IFswLCAwLjU2MTY3LCAwLjEwMzMzLCAwLCAwLjUxMTExXSxcbiAgICBcIjcxNFwiOiBbMCwgMC42OTQ0NCwgMC4wOTY5NCwgMCwgMC41MTExMV0sXG4gICAgXCI3MTVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLjEwODA2LCAwLCAwLjUxMTExXSxcbiAgICBcIjcyOVwiOiBbMCwgMC42Njc4NiwgMC4xMTc1MiwgMCwgMC4zMDY2N10sXG4gICAgXCI3MzBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODMxMjldLFxuICAgIFwiNzMyXCI6IFswLCAwLjY2Nzg2LCAwLjExNTg1LCAwLCAwLjUxMTExXSxcbiAgICBcIjczM1wiOiBbMCwgMC42OTQ0NCwgMC4xMjI1LCAwLCAwLjUxMTExXSxcbiAgICBcIjkxNVwiOiBbMCwgMC42ODMzMywgMC4xMzMwNSwgMCwgMC42MjcyMl0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuODE3NzddLFxuICAgIFwiOTIwXCI6IFswLCAwLjY4MzMzLCAwLjA5NDAzLCAwLCAwLjc2NjY2XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42OTIyMl0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjgzMzMsIDAuMTUyOTQsIDAsIDAuNjY0NDRdLFxuICAgIFwiOTI4XCI6IFswLCAwLjY4MzMzLCAwLjE2Mzg5LCAwLCAwLjc0MzMzXSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODMzMywgMC4xMjAyOCwgMCwgMC43MTU1NV0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjgzMzMsIDAuMTExMTEsIDAsIDAuNzY2NjZdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4MzMzLCAwLjA1OTg2LCAwLCAwLjcxNTU1XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODMzMywgMC4xMTExMSwgMCwgMC43NjY2Nl0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjgzMzMsIDAuMTAyNTcsIDAsIDAuNzE1NTVdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40MzA1NiwgMC4wOTIwOCwgMCwgMC41MTExMV0sXG4gICAgXCI4MjEyXCI6IFswLCAwLjQzMDU2LCAwLjA5MjA4LCAwLCAxLjAyMjIyXSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAuMTI0MTcsIDAsIDAuMzA2NjddLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMC4xMjQxNywgMCwgMC4zMDY2N10sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLjE2ODUsIDAsIDAuNTE0NDRdLFxuICAgIFwiODIyMVwiOiBbMCwgMC42OTQ0NCwgMC4wNjk2MSwgMCwgMC41MTQ0NF0sXG4gICAgXCI4NDYzXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjU0MDI4XVxuICB9LFxuICBcIk1haW4tUmVndWxhclwiOiB7XG4gICAgXCIzMlwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjM1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjM2XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMzg4ODldLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMzg4ODldLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCI0M1wiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI0NFwiOiBbMC4xOTQ0NCwgMC4xMDU1NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0NVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC4zMzMzM10sXG4gICAgXCI0NlwiOiBbMCwgMC4xMDU1NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0N1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjQ4XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNDlcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1MFwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjUxXCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTJcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1M1wiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjU0XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTVcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1NlwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjU3XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNThcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNTlcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNjBcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjYxXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI2MlwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiNjRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNjVcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzVdLFxuICAgIFwiNjZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzA4MzRdLFxuICAgIFwiNjdcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiNjhcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzYzODldLFxuICAgIFwiNjlcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjgwNTZdLFxuICAgIFwiNzBcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjUyNzhdLFxuICAgIFwiNzFcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzg0NzJdLFxuICAgIFwiNzJcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzVdLFxuICAgIFwiNzNcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuMzYxMTFdLFxuICAgIFwiNzRcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNTEzODldLFxuICAgIFwiNzVcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNzZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjI1XSxcbiAgICBcIjc3XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjkxNjY3XSxcbiAgICBcIjc4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc1XSxcbiAgICBcIjc5XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjgwXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjY4MDU2XSxcbiAgICBcIjgxXCI6IFswLjE5NDQ0LCAwLjY4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjgyXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjczNjExXSxcbiAgICBcIjgzXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg0XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg1XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc1XSxcbiAgICBcIjg2XCI6IFswLCAwLjY4MzMzLCAwLjAxMzg5LCAwLCAwLjc1XSxcbiAgICBcIjg3XCI6IFswLCAwLjY4MzMzLCAwLjAxMzg5LCAwLCAxLjAyNzc4XSxcbiAgICBcIjg4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc1XSxcbiAgICBcIjg5XCI6IFswLCAwLjY4MzMzLCAwLjAyNSwgMCwgMC43NV0sXG4gICAgXCI5MFwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42MTExMV0sXG4gICAgXCI5MVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI5MlwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiOTVcIjogWzAuMzEsIDAuMTIwNTYsIDAuMDI3NzgsIDAsIDAuNV0sXG4gICAgXCI5N1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjk5XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMTAyXCI6IFswLCAwLjY5NDQ0LCAwLjA3Nzc4LCAwLCAwLjMwNTU2XSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wMTM4OSwgMCwgMC41XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjY3ODYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY2Nzg2LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjExMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMTFcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjExNFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC4zOTE2N10sXG4gICAgXCIxMTVcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuMzk0NDVdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYxNTA4LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjExN1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMThcIjogWzAsIDAuNDMwNTYsIDAuMDEzODksIDAsIDAuNTI3NzhdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQzMDU2LCAwLjAxMzg5LCAwLCAwLjcyMjIyXSxcbiAgICBcIjEyMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDEzODksIDAsIDAuNTI3NzhdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEyM1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjEyNFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCIxMjVcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCIxMjZcIjogWzAuMzUsIDAuMzE3ODYsIDAsIDAsIDAuNV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMTY3XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjE2OFwiOiBbMCwgMC42Njc4NiwgMCwgMCwgMC41XSxcbiAgICBcIjE3MlwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCIxNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzVdLFxuICAgIFwiMTc3XCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjE4MlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCIxODRcIjogWzAuMTcwMTQsIDAsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMTk4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjkwMjc4XSxcbiAgICBcIjIxNVwiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIyMTZcIjogWzAuMDQ4NjEsIDAuNzMxOTQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiMjIzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiMjMwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjI0N1wiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIyNDhcIjogWzAuMDk3MjIsIDAuNTI3NzgsIDAsIDAsIDAuNV0sXG4gICAgXCIzMDVcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiMzM4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAxLjAxMzg5XSxcbiAgICBcIjMzOVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NjdcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiNzEwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzExXCI6IFswLCAwLjYyODQ3LCAwLCAwLCAwLjVdLFxuICAgIFwiNzEzXCI6IFswLCAwLjU2Nzc4LCAwLCAwLCAwLjVdLFxuICAgIFwiNzE0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzE1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzI5XCI6IFswLCAwLjY2Nzg2LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjczMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43NV0sXG4gICAgXCI3MzJcIjogWzAsIDAuNjY3ODYsIDAsIDAsIDAuNV0sXG4gICAgXCI3MzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjI1XSxcbiAgICBcIjkxNlwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI5MjBcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTIzXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjY5NDQ1XSxcbiAgICBcIjkyNlwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MjhcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzVdLFxuICAgIFwiOTMxXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjkzM1wiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5MzRcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiOTM2XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjkzN1wiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4MjExXCI6IFswLCAwLjQzMDU2LCAwLjAyNzc4LCAwLCAwLjVdLFxuICAgIFwiODIxMlwiOiBbMCwgMC40MzA1NiwgMC4wMjc3OCwgMCwgMS4wXSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiODIyMVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjgyMjRcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiODIyNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCI4MjMwXCI6IFswLCAwLjEyLCAwLCAwLCAxLjE3Ml0sXG4gICAgXCI4MjQyXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjI3NV0sXG4gICAgXCI4NDA3XCI6IFswLCAwLjcxNDQ0LCAwLjE1MzgyLCAwLCAwLjVdLFxuICAgIFwiODQ2M1wiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC41NDAyOF0sXG4gICAgXCI4NDY1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg0NjdcIjogWzAsIDAuNjk0NDQsIDAsIDAuMTExMTEsIDAuNDE2NjddLFxuICAgIFwiODQ3MlwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4xMTExMSwgMC42MzY0Nl0sXG4gICAgXCI4NDc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg1MDFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODU5MlwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NTkzXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiODU5NFwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NTk1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiODU5NlwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NTk3XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiODU5OFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4wXSxcbiAgICBcIjg1OTlcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjAwXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjBdLFxuICAgIFwiODYwMVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MTRcIjogWzAuMDExLCAwLjUxMSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MTdcIjogWzAuMDExLCAwLjUxMSwgMCwgMCwgMS4xMjZdLFxuICAgIFwiODYxOFwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjEyNl0sXG4gICAgXCI4NjM2XCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2MzdcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY0MFwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjQxXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTJcIjogWzAuMDExLCAwLjY3MSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTZcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY1N1wiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4NjU4XCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTlcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODY2MFwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjYxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg3MDRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODcwNlwiOiBbMCwgMC42OTQ0NCwgMC4wNTU1NiwgMC4wODMzNCwgMC41MzA5XSxcbiAgICBcIjg3MDdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODcwOVwiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjg3MTFcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODcxMlwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODcxNVwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODcyMlwiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzIzXCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3MjVcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzI2XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiODcyN1wiOiBbLTAuMDM0NzIsIDAuNDY1MjgsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzI4XCI6IFstMC4wNTU1NSwgMC40NDQ0NSwgMCwgMCwgMC41XSxcbiAgICBcIjg3MjlcIjogWy0wLjA1NTU1LCAwLjQ0NDQ1LCAwLCAwLCAwLjVdLFxuICAgIFwiODczMFwiOiBbMC4yLCAwLjgsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODczM1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzM0XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAxLjBdLFxuICAgIFwiODczNlwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4NzM5XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjg3NDFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzQzXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg3NDRcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODc0NVwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NzQ2XCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg3NDdcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMTExMTEsIDAsIDAuNDE2NjddLFxuICAgIFwiODc2NFwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc2OFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4NzcxXCI6IFstMC4wMzYyNSwgMC40NjM3NSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzczXCI6IFstMC4wMjIsIDAuNTg5LCAwLCAwLCAxLjBdLFxuICAgIFwiODc3NlwiOiBbLTAuMDE2ODgsIDAuNDgzMTIsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc4MVwiOiBbLTAuMDM2MjUsIDAuNDYzNzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc4NFwiOiBbLTAuMTMzLCAwLjY3LCAwLCAwLCAwLjc3OF0sXG4gICAgXCI4ODAxXCI6IFstMC4wMzYyNSwgMC40NjM3NSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODA0XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MDVcIjogWzAuMTM1OTcsIDAuNjM1OTcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgxMFwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDEuMF0sXG4gICAgXCI4ODExXCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMS4wXSxcbiAgICBcIjg4MjZcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MjdcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzRcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzVcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzhcIjogWzAuMTM1OTcsIDAuNjM1OTcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgzOVwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODQ2XCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg4NDlcIjogWzAuMTM1OTcsIDAuNjM1OTcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg1MFwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODUxXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg4NTJcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODg1M1wiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODU0XCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NTVcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg1NlwiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODU3XCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NjZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODg2N1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4ODY4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NjlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg3MlwiOiBbMC4yNDksIDAuNzUsIDAsIDAsIDAuODY3XSxcbiAgICBcIjg5MDBcIjogWy0wLjA1NTU1LCAwLjQ0NDQ1LCAwLCAwLCAwLjVdLFxuICAgIFwiODkwMVwiOiBbLTAuMDU1NTUsIDAuNDQ0NDUsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODkwMlwiOiBbLTAuMDM0NzIsIDAuNDY1MjgsIDAsIDAsIDAuNV0sXG4gICAgXCI4OTA0XCI6IFswLjAwNSwgMC41MDUsIDAsIDAsIDAuOV0sXG4gICAgXCI4OTQyXCI6IFswLjAzLCAwLjksIDAsIDAsIDAuMjc4XSxcbiAgICBcIjg5NDNcIjogWy0wLjE5LCAwLjMxLCAwLCAwLCAxLjE3Ml0sXG4gICAgXCI4OTQ1XCI6IFstMC4xLCAwLjgyLCAwLCAwLCAxLjI4Ml0sXG4gICAgXCI4OTY4XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjg5NjlcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiODk3MFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCI4OTcxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjg5OTRcIjogWy0wLjE0MjM2LCAwLjM1NzY0LCAwLCAwLCAxLjBdLFxuICAgIFwiODk5NVwiOiBbLTAuMTQyMzYsIDAuMzU3NjQsIDAsIDAsIDEuMF0sXG4gICAgXCI5MTM2XCI6IFswLjI0NCwgMC43NDQsIDAsIDAsIDAuNDEyXSxcbiAgICBcIjkxMzdcIjogWzAuMjQ0LCAwLjc0NCwgMCwgMCwgMC40MTJdLFxuICAgIFwiOTY1MVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5NjU3XCI6IFstMC4wMzQ3MiwgMC40NjUyOCwgMCwgMCwgMC41XSxcbiAgICBcIjk2NjFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTY2N1wiOiBbLTAuMDM0NzIsIDAuNDY1MjgsIDAsIDAsIDAuNV0sXG4gICAgXCI5NzExXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjBdLFxuICAgIFwiOTgyNFwiOiBbMC4xMjk2MywgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5ODI1XCI6IFswLjEyOTYzLCAwLjY5NDQ0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjk4MjZcIjogWzAuMTI5NjMsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTgyN1wiOiBbMC4xMjk2MywgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5ODM3XCI6IFswLCAwLjc1LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjk4MzhcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuMzg4ODldLFxuICAgIFwiOTgzOVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCIxMDIxNlwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCIxMDIxN1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCIxMDIyMlwiOiBbMC4yNDQsIDAuNzQ0LCAwLCAwLCAwLjQxMl0sXG4gICAgXCIxMDIyM1wiOiBbMC4yNDQsIDAuNzQ0LCAwLCAwLCAwLjQxMl0sXG4gICAgXCIxMDIyOVwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjYwOV0sXG4gICAgXCIxMDIzMFwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjYzOF0sXG4gICAgXCIxMDIzMVwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjg1OV0sXG4gICAgXCIxMDIzMlwiOiBbMC4wMjQsIDAuNTI1LCAwLCAwLCAxLjYwOV0sXG4gICAgXCIxMDIzM1wiOiBbMC4wMjQsIDAuNTI1LCAwLCAwLCAxLjYzOF0sXG4gICAgXCIxMDIzNFwiOiBbMC4wMjQsIDAuNTI1LCAwLCAwLCAxLjg1OF0sXG4gICAgXCIxMDIzNlwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjYzOF0sXG4gICAgXCIxMDgxNVwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43NV0sXG4gICAgXCIxMDkyN1wiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkyOFwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM3NlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMF1cbiAgfSxcbiAgXCJNYXRoLUJvbGRJdGFsaWNcIjoge1xuICAgIFwiNjVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODY5NDRdLFxuICAgIFwiNjZcIjogWzAsIDAuNjg2MTEsIDAuMDQ4MzUsIDAsIDAuODY2NF0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODYxMSwgMC4wNjk3OSwgMCwgMC44MTY5NF0sXG4gICAgXCI2OFwiOiBbMCwgMC42ODYxMSwgMC4wMzE5NCwgMCwgMC45MzgxMl0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODYxMSwgMC4wNTQ1MSwgMCwgMC44MTAwN10sXG4gICAgXCI3MFwiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMC42ODg4OV0sXG4gICAgXCI3MVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44ODY3M10sXG4gICAgXCI3MlwiOiBbMCwgMC42ODYxMSwgMC4wODIyOSwgMCwgMC45ODIyOV0sXG4gICAgXCI3M1wiOiBbMCwgMC42ODYxMSwgMC4wNzc3OCwgMCwgMC41MTExMV0sXG4gICAgXCI3NFwiOiBbMCwgMC42ODYxMSwgMC4xMDA2OSwgMCwgMC42MzEyNV0sXG4gICAgXCI3NVwiOiBbMCwgMC42ODYxMSwgMC4wNjk3OSwgMCwgMC45NzExOF0sXG4gICAgXCI3NlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC43NTU1NV0sXG4gICAgXCI3N1wiOiBbMCwgMC42ODYxMSwgMC4xMTQyNCwgMCwgMS4xNDIwMV0sXG4gICAgXCI3OFwiOiBbMCwgMC42ODYxMSwgMC4xMTQyNCwgMCwgMC45NTAzNF0sXG4gICAgXCI3OVwiOiBbMCwgMC42ODYxMSwgMC4wMzE5NCwgMCwgMC44MzY2Nl0sXG4gICAgXCI4MFwiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMC43MjMwOV0sXG4gICAgXCI4MVwiOiBbMC4xOTQ0NCwgMC42ODYxMSwgMCwgMCwgMC44Njg2MV0sXG4gICAgXCI4MlwiOiBbMCwgMC42ODYxMSwgMC4wMDQyMSwgMCwgMC44NzIzNV0sXG4gICAgXCI4M1wiOiBbMCwgMC42ODYxMSwgMC4wNTM4MiwgMCwgMC42OTI3MV0sXG4gICAgXCI4NFwiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMC42MzY2M10sXG4gICAgXCI4NVwiOiBbMCwgMC42ODYxMSwgMC4xMTQyNCwgMCwgMC44MDAyN10sXG4gICAgXCI4NlwiOiBbMCwgMC42ODYxMSwgMC4yNTU1NSwgMCwgMC42Nzc3OF0sXG4gICAgXCI4N1wiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMS4wOTMwNV0sXG4gICAgXCI4OFwiOiBbMCwgMC42ODYxMSwgMC4wNzc3OCwgMCwgMC45NDcyMl0sXG4gICAgXCI4OVwiOiBbMCwgMC42ODYxMSwgMC4yNTU1NSwgMCwgMC42NzQ1OF0sXG4gICAgXCI5MFwiOiBbMCwgMC42ODYxMSwgMC4wNjk3OSwgMCwgMC43NzI1N10sXG4gICAgXCI5N1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC42MzI4N10sXG4gICAgXCI5OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MjA4M10sXG4gICAgXCI5OVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MTM0Ml0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjA5NzJdLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjU1MzYxXSxcbiAgICBcIjEwMlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4xMTA0MiwgMCwgMC41NjgwNl0sXG4gICAgXCIxMDNcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDM3MDQsIDAsIDAuNTQ0OV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY3NTldLFxuICAgIFwiMTA1XCI6IFswLCAwLjY5MzI2LCAwLCAwLCAwLjQwNDhdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY5MzI2LCAwLjA2MjIsIDAsIDAuNDcwODNdLFxuICAgIFwiMTA3XCI6IFswLCAwLjY5NDQ0LCAwLjAxODUyLCAwLCAwLjYwMzddLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLjAwODgsIDAsIDAuMzQ4MTVdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAxLjAzMjRdLFxuICAgIFwiMTEwXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjcxMjk2XSxcbiAgICBcIjExMVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41ODQ3Ml0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNjAwOTJdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAzNzA0LCAwLCAwLjU0MjEzXSxcbiAgICBcIjExNFwiOiBbMCwgMC40NDQ0NCwgMC4wMzE5NCwgMCwgMC41Mjg3XSxcbiAgICBcIjExNVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MzEyNV0sXG4gICAgXCIxMTZcIjogWzAsIDAuNjM0OTIsIDAsIDAsIDAuNDE1MjhdLFxuICAgIFwiMTE3XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjY4MTAyXSxcbiAgICBcIjExOFwiOiBbMCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC41NjY2Nl0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDQ0NDQsIDAuMDI3NzgsIDAsIDAuODMxNDhdLFxuICAgIFwiMTIwXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjY1OTAzXSxcbiAgICBcIjEyMVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC41OTAyOF0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDQ0NDQsIDAuMDQyMTMsIDAsIDAuNTU1MDldLFxuICAgIFwiOTE1XCI6IFswLCAwLjY4NjExLCAwLjE1OTcyLCAwLCAwLjY1Njk0XSxcbiAgICBcIjkxNlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45NTgzM10sXG4gICAgXCI5MjBcIjogWzAsIDAuNjg2MTEsIDAuMDMxOTQsIDAsIDAuODY3MjJdLFxuICAgIFwiOTIzXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjgwNTU1XSxcbiAgICBcIjkyNlwiOiBbMCwgMC42ODYxMSwgMC4wNzQ1OCwgMCwgMC44NDEyNV0sXG4gICAgXCI5MjhcIjogWzAsIDAuNjg2MTEsIDAuMDgyMjksIDAsIDAuOTgyMjldLFxuICAgIFwiOTMxXCI6IFswLCAwLjY4NjExLCAwLjA1NDUxLCAwLCAwLjg4NTA3XSxcbiAgICBcIjkzM1wiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMC42NzA4M10sXG4gICAgXCI5MzRcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiOTM2XCI6IFswLCAwLjY4NjExLCAwLjExNjUzLCAwLCAwLjcxNDAyXSxcbiAgICBcIjkzN1wiOiBbMCwgMC42ODYxMSwgMC4wNDgzNSwgMCwgMC44Nzg5XSxcbiAgICBcIjk0NVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC43NjA2NF0sXG4gICAgXCI5NDZcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDM0MDMsIDAsIDAuNjU5NzJdLFxuICAgIFwiOTQ3XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjA2Mzg5LCAwLCAwLjU5MDAzXSxcbiAgICBcIjk0OFwiOiBbMCwgMC42OTQ0NCwgMC4wMzgxOSwgMCwgMC41MjIyMl0sXG4gICAgXCI5NDlcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTI4ODJdLFxuICAgIFwiOTUwXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA2MjE1LCAwLCAwLjUwODMzXSxcbiAgICBcIjk1MVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC42XSxcbiAgICBcIjk1MlwiOiBbMCwgMC42OTQ0NCwgMC4wMzE5NCwgMCwgMC41NjE4XSxcbiAgICBcIjk1M1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40MTIwNF0sXG4gICAgXCI5NTRcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNjY3NTldLFxuICAgIFwiOTU1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY3MDgzXSxcbiAgICBcIjk1NlwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC43MDc4N10sXG4gICAgXCI5NTdcIjogWzAsIDAuNDQ0NDQsIDAuMDY4OTgsIDAsIDAuNTc2ODVdLFxuICAgIFwiOTU4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjAzMDIxLCAwLCAwLjUwODMzXSxcbiAgICBcIjk1OVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41ODQ3Ml0sXG4gICAgXCI5NjBcIjogWzAsIDAuNDQ0NDQsIDAuMDM3MDQsIDAsIDAuNjgyNDFdLFxuICAgIFwiOTYxXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjYxMThdLFxuICAgIFwiOTYyXCI6IFswLjA5NzIyLCAwLjQ0NDQ0LCAwLjA3OTE3LCAwLCAwLjQyMzYxXSxcbiAgICBcIjk2M1wiOiBbMCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC42ODU4OF0sXG4gICAgXCI5NjRcIjogWzAsIDAuNDQ0NDQsIDAuMTM0NzIsIDAsIDAuNTIwODNdLFxuICAgIFwiOTY1XCI6IFswLCAwLjQ0NDQ0LCAwLjAzNzA0LCAwLCAwLjYzMDU1XSxcbiAgICBcIjk2NlwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC43NDcyMl0sXG4gICAgXCI5NjdcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNzE4MDVdLFxuICAgIFwiOTY4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjAzNzA0LCAwLCAwLjc1ODMzXSxcbiAgICBcIjk2OVwiOiBbMCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC43MTc4Ml0sXG4gICAgXCI5NzdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjkxNTVdLFxuICAgIFwiOTgxXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjcxMjVdLFxuICAgIFwiOTgyXCI6IFswLCAwLjQ0NDQ0LCAwLjAzMTk0LCAwLCAwLjk3NV0sXG4gICAgXCIxMDA5XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjYxMThdLFxuICAgIFwiMTAxM1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40ODMzM11cbiAgfSxcbiAgXCJNYXRoLUl0YWxpY1wiOiB7XG4gICAgXCI2NVwiOiBbMCwgMC42ODMzMywgMCwgMC4xMzg4OSwgMC43NV0sXG4gICAgXCI2NlwiOiBbMCwgMC42ODMzMywgMC4wNTAxNywgMC4wODMzNCwgMC43NTg1MV0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODMzMywgMC4wNzE1MywgMC4wODMzNCwgMC43MTQ3Ml0sXG4gICAgXCI2OFwiOiBbMCwgMC42ODMzMywgMC4wMjc3OCwgMC4wNTU1NiwgMC44Mjc5Ml0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODMzMywgMC4wNTc2NCwgMC4wODMzNCwgMC43MzgyXSxcbiAgICBcIjcwXCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLjA4MzM0LCAwLjY0MzA2XSxcbiAgICBcIjcxXCI6IFswLCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjc4NjI1XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4MzMzLCAwLjA4MTI1LCAwLjA1NTU2LCAwLjgzMTI1XSxcbiAgICBcIjczXCI6IFswLCAwLjY4MzMzLCAwLjA3ODQ3LCAwLjExMTExLCAwLjQzOTU4XSxcbiAgICBcIjc0XCI6IFswLCAwLjY4MzMzLCAwLjA5NjE4LCAwLjE2NjY3LCAwLjU1NDUxXSxcbiAgICBcIjc1XCI6IFswLCAwLjY4MzMzLCAwLjA3MTUzLCAwLjA1NTU2LCAwLjg0OTMxXSxcbiAgICBcIjc2XCI6IFswLCAwLjY4MzMzLCAwLCAwLjAyNzc4LCAwLjY4MDU2XSxcbiAgICBcIjc3XCI6IFswLCAwLjY4MzMzLCAwLjEwOTAzLCAwLjA4MzM0LCAwLjk3MDE0XSxcbiAgICBcIjc4XCI6IFswLCAwLjY4MzMzLCAwLjEwOTAzLCAwLjA4MzM0LCAwLjgwMzQ3XSxcbiAgICBcIjc5XCI6IFswLCAwLjY4MzMzLCAwLjAyNzc4LCAwLjA4MzM0LCAwLjc2Mjc4XSxcbiAgICBcIjgwXCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLjA4MzM0LCAwLjY0MjAxXSxcbiAgICBcIjgxXCI6IFswLjE5NDQ0LCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjc5MDU2XSxcbiAgICBcIjgyXCI6IFswLCAwLjY4MzMzLCAwLjAwNzczLCAwLjA4MzM0LCAwLjc1OTI5XSxcbiAgICBcIjgzXCI6IFswLCAwLjY4MzMzLCAwLjA1NzY0LCAwLjA4MzM0LCAwLjYxMzJdLFxuICAgIFwiODRcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAuMDgzMzQsIDAuNTg0MzhdLFxuICAgIFwiODVcIjogWzAsIDAuNjgzMzMsIDAuMTA5MDMsIDAuMDI3NzgsIDAuNjgyNzhdLFxuICAgIFwiODZcIjogWzAsIDAuNjgzMzMsIDAuMjIyMjIsIDAsIDAuNTgzMzNdLFxuICAgIFwiODdcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAsIDAuOTQ0NDVdLFxuICAgIFwiODhcIjogWzAsIDAuNjgzMzMsIDAuMDc4NDcsIDAuMDgzMzQsIDAuODI4NDddLFxuICAgIFwiODlcIjogWzAsIDAuNjgzMzMsIDAuMjIyMjIsIDAsIDAuNTgwNTZdLFxuICAgIFwiOTBcIjogWzAsIDAuNjgzMzMsIDAuMDcxNTMsIDAuMDgzMzQsIDAuNjgyNjRdLFxuICAgIFwiOTdcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI4NTldLFxuICAgIFwiOThcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNDI5MTddLFxuICAgIFwiOTlcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDMyNzZdLFxuICAgIFwiMTAwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLjE2NjY3LCAwLjUyMDQ5XSxcbiAgICBcIjEwMVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40NjU2M10sXG4gICAgXCIxMDJcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMTA3NjQsIDAuMTY2NjcsIDAuNDg5NTldLFxuICAgIFwiMTAzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjAzNTg4LCAwLjAyNzc4LCAwLjQ3Njk3XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzYxNl0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjU5NTIsIDAsIDAsIDAuMzQ0NTFdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY1OTUyLCAwLjA1NzI0LCAwLCAwLjQxMTgxXSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMC4wMzE0OCwgMCwgMC41MjA2XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMC4wMTk2OCwgMC4wODMzNCwgMC4yOTgzOF0sXG4gICAgXCIxMDlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuODc4MDFdLFxuICAgIFwiMTEwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjYwMDIzXSxcbiAgICBcIjExMVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40ODQ3Ml0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNTAzMTNdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjAzNTg4LCAwLjA4MzM0LCAwLjQ0NjQxXSxcbiAgICBcIjExNFwiOiBbMCwgMC40MzA1NiwgMC4wMjc3OCwgMC4wNTU1NiwgMC40NTExNl0sXG4gICAgXCIxMTVcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDY4NzVdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYxNTA4LCAwLCAwLjA4MzM0LCAwLjM2MTExXSxcbiAgICBcIjExN1wiOiBbMCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC41NzI0Nl0sXG4gICAgXCIxMThcIjogWzAsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDI3NzgsIDAuNDg0NzJdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQzMDU2LCAwLjAyNjkxLCAwLjA4MzM0LCAwLjcxNTkyXSxcbiAgICBcIjEyMFwiOiBbMCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC41NzE1M10sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDU1NTYsIDAuNDkwMjhdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQzMDU2LCAwLjA0Mzk4LCAwLjA1NTU2LCAwLjQ2NTA1XSxcbiAgICBcIjkxNVwiOiBbMCwgMC42ODMzMywgMC4xMzg4OSwgMC4wODMzNCwgMC42MTUyOF0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjgzMzMsIDAsIDAuMTY2NjcsIDAuODMzMzRdLFxuICAgIFwiOTIwXCI6IFswLCAwLjY4MzMzLCAwLjAyNzc4LCAwLjA4MzM0LCAwLjc2Mjc4XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42ODMzMywgMCwgMC4xNjY2NywgMC42OTQ0NV0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjgzMzMsIDAuMDc1NjksIDAuMDgzMzQsIDAuNzQyMzZdLFxuICAgIFwiOTI4XCI6IFswLCAwLjY4MzMzLCAwLjA4MTI1LCAwLjA1NTU2LCAwLjgzMTI1XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODMzMywgMC4wNTc2NCwgMC4wODMzNCwgMC43Nzk4Nl0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAuMDU1NTYsIDAuNTgzMzNdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjY2NjY3XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODMzMywgMC4xMSwgMC4wNTU1NiwgMC42MTIyMl0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjgzMzMsIDAuMDUwMTcsIDAuMDgzMzQsIDAuNzcyNF0sXG4gICAgXCI5NDVcIjogWzAsIDAuNDMwNTYsIDAuMDAzNywgMC4wMjc3OCwgMC42Mzk3XSxcbiAgICBcIjk0NlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wNTI3OCwgMC4wODMzNCwgMC41NjU2M10sXG4gICAgXCI5NDdcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDU1NTYsIDAsIDAuNTE3NzNdLFxuICAgIFwiOTQ4XCI6IFswLCAwLjY5NDQ0LCAwLjAzNzg1LCAwLjA1NTU2LCAwLjQ0NDQ0XSxcbiAgICBcIjk0OVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wODMzNCwgMC40NjYzMl0sXG4gICAgXCI5NTBcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDczNzgsIDAuMDgzMzQsIDAuNDM3NV0sXG4gICAgXCI5NTFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDU1NTYsIDAuNDk2NTNdLFxuICAgIFwiOTUyXCI6IFswLCAwLjY5NDQ0LCAwLjAyNzc4LCAwLjA4MzM0LCAwLjQ2OTQ0XSxcbiAgICBcIjk1M1wiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC4zNTM5NF0sXG4gICAgXCI5NTRcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTc2MTZdLFxuICAgIFwiOTU1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjk1NlwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC42MDI1NV0sXG4gICAgXCI5NTdcIjogWzAsIDAuNDMwNTYsIDAuMDYzNjYsIDAuMDI3NzgsIDAuNDkzOThdLFxuICAgIFwiOTU4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA0NjAxLCAwLjExMTExLCAwLjQzNzVdLFxuICAgIFwiOTU5XCI6IFswLCAwLjQzMDU2LCAwLCAwLjA1NTU2LCAwLjQ4NDcyXSxcbiAgICBcIjk2MFwiOiBbMCwgMC40MzA1NiwgMC4wMzU4OCwgMCwgMC41NzAwM10sXG4gICAgXCI5NjFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNTE3MDJdLFxuICAgIFwiOTYyXCI6IFswLjA5NzIyLCAwLjQzMDU2LCAwLjA3OTg2LCAwLjA4MzM0LCAwLjM2Mjg1XSxcbiAgICBcIjk2M1wiOiBbMCwgMC40MzA1NiwgMC4wMzU4OCwgMCwgMC41NzE0MV0sXG4gICAgXCI5NjRcIjogWzAsIDAuNDMwNTYsIDAuMTEzMiwgMC4wMjc3OCwgMC40MzcxNV0sXG4gICAgXCI5NjVcIjogWzAsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDI3NzgsIDAuNTQwMjhdLFxuICAgIFwiOTY2XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLjA4MzM0LCAwLjY1NDE3XSxcbiAgICBcIjk2N1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC42MjU2OV0sXG4gICAgXCI5NjhcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDM1ODgsIDAuMTExMTEsIDAuNjUxMzldLFxuICAgIFwiOTY5XCI6IFswLCAwLjQzMDU2LCAwLjAzNTg4LCAwLCAwLjYyMjQ1XSxcbiAgICBcIjk3N1wiOiBbMCwgMC42OTQ0NCwgMCwgMC4wODMzNCwgMC41OTE0NF0sXG4gICAgXCI5ODFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAuMDgzMzQsIDAuNTk1ODNdLFxuICAgIFwiOTgyXCI6IFswLCAwLjQzMDU2LCAwLjAyNzc4LCAwLCAwLjgyODEzXSxcbiAgICBcIjEwMDlcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNTE3MDJdLFxuICAgIFwiMTAxM1wiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40MDU5XVxuICB9LFxuICBcIk1hdGgtUmVndWxhclwiOiB7XG4gICAgXCI2NVwiOiBbMCwgMC42ODMzMywgMCwgMC4xMzg4OSwgMC43NV0sXG4gICAgXCI2NlwiOiBbMCwgMC42ODMzMywgMC4wNTAxNywgMC4wODMzNCwgMC43NTg1MV0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODMzMywgMC4wNzE1MywgMC4wODMzNCwgMC43MTQ3Ml0sXG4gICAgXCI2OFwiOiBbMCwgMC42ODMzMywgMC4wMjc3OCwgMC4wNTU1NiwgMC44Mjc5Ml0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODMzMywgMC4wNTc2NCwgMC4wODMzNCwgMC43MzgyXSxcbiAgICBcIjcwXCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLjA4MzM0LCAwLjY0MzA2XSxcbiAgICBcIjcxXCI6IFswLCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjc4NjI1XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4MzMzLCAwLjA4MTI1LCAwLjA1NTU2LCAwLjgzMTI1XSxcbiAgICBcIjczXCI6IFswLCAwLjY4MzMzLCAwLjA3ODQ3LCAwLjExMTExLCAwLjQzOTU4XSxcbiAgICBcIjc0XCI6IFswLCAwLjY4MzMzLCAwLjA5NjE4LCAwLjE2NjY3LCAwLjU1NDUxXSxcbiAgICBcIjc1XCI6IFswLCAwLjY4MzMzLCAwLjA3MTUzLCAwLjA1NTU2LCAwLjg0OTMxXSxcbiAgICBcIjc2XCI6IFswLCAwLjY4MzMzLCAwLCAwLjAyNzc4LCAwLjY4MDU2XSxcbiAgICBcIjc3XCI6IFswLCAwLjY4MzMzLCAwLjEwOTAzLCAwLjA4MzM0LCAwLjk3MDE0XSxcbiAgICBcIjc4XCI6IFswLCAwLjY4MzMzLCAwLjEwOTAzLCAwLjA4MzM0LCAwLjgwMzQ3XSxcbiAgICBcIjc5XCI6IFswLCAwLjY4MzMzLCAwLjAyNzc4LCAwLjA4MzM0LCAwLjc2Mjc4XSxcbiAgICBcIjgwXCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLjA4MzM0LCAwLjY0MjAxXSxcbiAgICBcIjgxXCI6IFswLjE5NDQ0LCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjc5MDU2XSxcbiAgICBcIjgyXCI6IFswLCAwLjY4MzMzLCAwLjAwNzczLCAwLjA4MzM0LCAwLjc1OTI5XSxcbiAgICBcIjgzXCI6IFswLCAwLjY4MzMzLCAwLjA1NzY0LCAwLjA4MzM0LCAwLjYxMzJdLFxuICAgIFwiODRcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAuMDgzMzQsIDAuNTg0MzhdLFxuICAgIFwiODVcIjogWzAsIDAuNjgzMzMsIDAuMTA5MDMsIDAuMDI3NzgsIDAuNjgyNzhdLFxuICAgIFwiODZcIjogWzAsIDAuNjgzMzMsIDAuMjIyMjIsIDAsIDAuNTgzMzNdLFxuICAgIFwiODdcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAsIDAuOTQ0NDVdLFxuICAgIFwiODhcIjogWzAsIDAuNjgzMzMsIDAuMDc4NDcsIDAuMDgzMzQsIDAuODI4NDddLFxuICAgIFwiODlcIjogWzAsIDAuNjgzMzMsIDAuMjIyMjIsIDAsIDAuNTgwNTZdLFxuICAgIFwiOTBcIjogWzAsIDAuNjgzMzMsIDAuMDcxNTMsIDAuMDgzMzQsIDAuNjgyNjRdLFxuICAgIFwiOTdcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI4NTldLFxuICAgIFwiOThcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNDI5MTddLFxuICAgIFwiOTlcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDMyNzZdLFxuICAgIFwiMTAwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLjE2NjY3LCAwLjUyMDQ5XSxcbiAgICBcIjEwMVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40NjU2M10sXG4gICAgXCIxMDJcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMTA3NjQsIDAuMTY2NjcsIDAuNDg5NTldLFxuICAgIFwiMTAzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjAzNTg4LCAwLjAyNzc4LCAwLjQ3Njk3XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzYxNl0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjU5NTIsIDAsIDAsIDAuMzQ0NTFdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY1OTUyLCAwLjA1NzI0LCAwLCAwLjQxMTgxXSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMC4wMzE0OCwgMCwgMC41MjA2XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMC4wMTk2OCwgMC4wODMzNCwgMC4yOTgzOF0sXG4gICAgXCIxMDlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuODc4MDFdLFxuICAgIFwiMTEwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjYwMDIzXSxcbiAgICBcIjExMVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40ODQ3Ml0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNTAzMTNdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjAzNTg4LCAwLjA4MzM0LCAwLjQ0NjQxXSxcbiAgICBcIjExNFwiOiBbMCwgMC40MzA1NiwgMC4wMjc3OCwgMC4wNTU1NiwgMC40NTExNl0sXG4gICAgXCIxMTVcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDY4NzVdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYxNTA4LCAwLCAwLjA4MzM0LCAwLjM2MTExXSxcbiAgICBcIjExN1wiOiBbMCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC41NzI0Nl0sXG4gICAgXCIxMThcIjogWzAsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDI3NzgsIDAuNDg0NzJdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQzMDU2LCAwLjAyNjkxLCAwLjA4MzM0LCAwLjcxNTkyXSxcbiAgICBcIjEyMFwiOiBbMCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC41NzE1M10sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDU1NTYsIDAuNDkwMjhdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQzMDU2LCAwLjA0Mzk4LCAwLjA1NTU2LCAwLjQ2NTA1XSxcbiAgICBcIjkxNVwiOiBbMCwgMC42ODMzMywgMC4xMzg4OSwgMC4wODMzNCwgMC42MTUyOF0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjgzMzMsIDAsIDAuMTY2NjcsIDAuODMzMzRdLFxuICAgIFwiOTIwXCI6IFswLCAwLjY4MzMzLCAwLjAyNzc4LCAwLjA4MzM0LCAwLjc2Mjc4XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42ODMzMywgMCwgMC4xNjY2NywgMC42OTQ0NV0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjgzMzMsIDAuMDc1NjksIDAuMDgzMzQsIDAuNzQyMzZdLFxuICAgIFwiOTI4XCI6IFswLCAwLjY4MzMzLCAwLjA4MTI1LCAwLjA1NTU2LCAwLjgzMTI1XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODMzMywgMC4wNTc2NCwgMC4wODMzNCwgMC43Nzk4Nl0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAuMDU1NTYsIDAuNTgzMzNdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjY2NjY3XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODMzMywgMC4xMSwgMC4wNTU1NiwgMC42MTIyMl0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjgzMzMsIDAuMDUwMTcsIDAuMDgzMzQsIDAuNzcyNF0sXG4gICAgXCI5NDVcIjogWzAsIDAuNDMwNTYsIDAuMDAzNywgMC4wMjc3OCwgMC42Mzk3XSxcbiAgICBcIjk0NlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wNTI3OCwgMC4wODMzNCwgMC41NjU2M10sXG4gICAgXCI5NDdcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDU1NTYsIDAsIDAuNTE3NzNdLFxuICAgIFwiOTQ4XCI6IFswLCAwLjY5NDQ0LCAwLjAzNzg1LCAwLjA1NTU2LCAwLjQ0NDQ0XSxcbiAgICBcIjk0OVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wODMzNCwgMC40NjYzMl0sXG4gICAgXCI5NTBcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDczNzgsIDAuMDgzMzQsIDAuNDM3NV0sXG4gICAgXCI5NTFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDU1NTYsIDAuNDk2NTNdLFxuICAgIFwiOTUyXCI6IFswLCAwLjY5NDQ0LCAwLjAyNzc4LCAwLjA4MzM0LCAwLjQ2OTQ0XSxcbiAgICBcIjk1M1wiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC4zNTM5NF0sXG4gICAgXCI5NTRcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTc2MTZdLFxuICAgIFwiOTU1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjk1NlwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC42MDI1NV0sXG4gICAgXCI5NTdcIjogWzAsIDAuNDMwNTYsIDAuMDYzNjYsIDAuMDI3NzgsIDAuNDkzOThdLFxuICAgIFwiOTU4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA0NjAxLCAwLjExMTExLCAwLjQzNzVdLFxuICAgIFwiOTU5XCI6IFswLCAwLjQzMDU2LCAwLCAwLjA1NTU2LCAwLjQ4NDcyXSxcbiAgICBcIjk2MFwiOiBbMCwgMC40MzA1NiwgMC4wMzU4OCwgMCwgMC41NzAwM10sXG4gICAgXCI5NjFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNTE3MDJdLFxuICAgIFwiOTYyXCI6IFswLjA5NzIyLCAwLjQzMDU2LCAwLjA3OTg2LCAwLjA4MzM0LCAwLjM2Mjg1XSxcbiAgICBcIjk2M1wiOiBbMCwgMC40MzA1NiwgMC4wMzU4OCwgMCwgMC41NzE0MV0sXG4gICAgXCI5NjRcIjogWzAsIDAuNDMwNTYsIDAuMTEzMiwgMC4wMjc3OCwgMC40MzcxNV0sXG4gICAgXCI5NjVcIjogWzAsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDI3NzgsIDAuNTQwMjhdLFxuICAgIFwiOTY2XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLjA4MzM0LCAwLjY1NDE3XSxcbiAgICBcIjk2N1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC42MjU2OV0sXG4gICAgXCI5NjhcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDM1ODgsIDAuMTExMTEsIDAuNjUxMzldLFxuICAgIFwiOTY5XCI6IFswLCAwLjQzMDU2LCAwLjAzNTg4LCAwLCAwLjYyMjQ1XSxcbiAgICBcIjk3N1wiOiBbMCwgMC42OTQ0NCwgMCwgMC4wODMzNCwgMC41OTE0NF0sXG4gICAgXCI5ODFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAuMDgzMzQsIDAuNTk1ODNdLFxuICAgIFwiOTgyXCI6IFswLCAwLjQzMDU2LCAwLjAyNzc4LCAwLCAwLjgyODEzXSxcbiAgICBcIjEwMDlcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNTE3MDJdLFxuICAgIFwiMTAxM1wiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40MDU5XVxuICB9LFxuICBcIlNhbnNTZXJpZi1Cb2xkXCI6IHtcbiAgICBcIjMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjM2NjY3XSxcbiAgICBcIjM0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1ODM0XSxcbiAgICBcIjM1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjkxNjY3XSxcbiAgICBcIjM2XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAwLjU1XSxcbiAgICBcIjM3XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAxLjAyOTEyXSxcbiAgICBcIjM4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjgzMDU2XSxcbiAgICBcIjM5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjQwXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQyNzc4XSxcbiAgICBcIjQxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQyNzc4XSxcbiAgICBcIjQyXCI6IFswLCAwLjc1LCAwLCAwLCAwLjU1XSxcbiAgICBcIjQzXCI6IFswLjExNjY3LCAwLjYxNjY3LCAwLCAwLCAwLjg1NTU2XSxcbiAgICBcIjQ0XCI6IFswLjEwNTU2LCAwLjEzMDU2LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjQ1XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjM2NjY3XSxcbiAgICBcIjQ2XCI6IFswLCAwLjEzMDU2LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjQ3XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjU1XSxcbiAgICBcIjQ4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjQ5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjUwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjUxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjUyXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjUzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjU0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjU1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjU2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjU3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjU4XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjU5XCI6IFswLjEwNTU2LCAwLjQ1ODMzLCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjYxXCI6IFstMC4wOTM3NSwgMC40MDYyNSwgMCwgMCwgMC44NTU1Nl0sXG4gICAgXCI2M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MTk0NV0sXG4gICAgXCI2NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI2NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI2NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI2N1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MDI3OF0sXG4gICAgXCI2OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI2OVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NDE2N10sXG4gICAgXCI3MFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI3MVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI3MlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI3M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zMzA1Nl0sXG4gICAgXCI3NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MTk0NV0sXG4gICAgXCI3NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43NjM4OV0sXG4gICAgXCI3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41ODA1Nl0sXG4gICAgXCI3N1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC45Nzc3OF0sXG4gICAgXCI3OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI3OVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI4MFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MDI3OF0sXG4gICAgXCI4MVwiOiBbMC4xMDU1NiwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI4MlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MDI3OF0sXG4gICAgXCI4M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI4NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43NjM4OV0sXG4gICAgXCI4NlwiOiBbMCwgMC42OTQ0NCwgMC4wMTUyOCwgMCwgMC43MzMzNF0sXG4gICAgXCI4N1wiOiBbMCwgMC42OTQ0NCwgMC4wMTUyOCwgMCwgMS4wMzg4OV0sXG4gICAgXCI4OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI4OVwiOiBbMCwgMC42OTQ0NCwgMC4wMjc1LCAwLCAwLjczMzM0XSxcbiAgICBcIjkwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY3MjIzXSxcbiAgICBcIjkxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjM0MzA2XSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjM0MzA2XSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjk1XCI6IFswLjM1LCAwLjEwODMzLCAwLjAzMDU2LCAwLCAwLjU1XSxcbiAgICBcIjk3XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NjExMV0sXG4gICAgXCI5OVwiOiBbMCwgMC40NTgzMywgMCwgMCwgMC40ODg4OV0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTYxMTFdLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjEwMlwiOiBbMCwgMC42OTQ0NCwgMC4wNzYzOSwgMCwgMC4zMzYxMV0sXG4gICAgXCIxMDNcIjogWzAuMTk0NDQsIDAuNDU4MzMsIDAuMDE1MjgsIDAsIDAuNTVdLFxuICAgIFwiMTA0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU2MTExXSxcbiAgICBcIjEwNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNTU1Nl0sXG4gICAgXCIxMDZcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuMjg2MTFdLFxuICAgIFwiMTA3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjUzMDU2XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNTU1Nl0sXG4gICAgXCIxMDlcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuODY2NjddLFxuICAgIFwiMTEwXCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjU2MTExXSxcbiAgICBcIjExMVwiOiBbMCwgMC40NTgzMywgMCwgMCwgMC41NV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDU4MzMsIDAsIDAsIDAuNTYxMTFdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ1ODMzLCAwLCAwLCAwLjU2MTExXSxcbiAgICBcIjExNFwiOiBbMCwgMC40NTgzMywgMC4wMTUyOCwgMCwgMC4zNzIyMl0sXG4gICAgXCIxMTVcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuNDIxNjddLFxuICAgIFwiMTE2XCI6IFswLCAwLjU4OTI5LCAwLCAwLCAwLjQwNDE3XSxcbiAgICBcIjExN1wiOiBbMCwgMC40NTgzMywgMCwgMCwgMC41NjExMV0sXG4gICAgXCIxMThcIjogWzAsIDAuNDU4MzMsIDAuMDE1MjgsIDAsIDAuNV0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDU4MzMsIDAuMDE1MjgsIDAsIDAuNzQ0NDVdLFxuICAgIFwiMTIwXCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjVdLFxuICAgIFwiMTIxXCI6IFswLjE5NDQ0LCAwLjQ1ODMzLCAwLjAxNTI4LCAwLCAwLjVdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjQ3NjM5XSxcbiAgICBcIjEyNlwiOiBbMC4zNSwgMC4zNDQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCIxNjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiMTc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczMzM0XSxcbiAgICBcIjE4MFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCIxODRcIjogWzAuMTcwMTQsIDAsIDAsIDAsIDAuNDg4ODldLFxuICAgIFwiMzA1XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjI1NTU2XSxcbiAgICBcIjU2N1wiOiBbMC4xOTQ0NCwgMC40NTgzMywgMCwgMCwgMC4yODYxMV0sXG4gICAgXCI3MTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNzExXCI6IFswLCAwLjYzNTQyLCAwLCAwLCAwLjU1XSxcbiAgICBcIjcxM1wiOiBbMCwgMC42Mzc3OCwgMCwgMCwgMC41NV0sXG4gICAgXCI3MjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNzI5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjczMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI3MzJcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNzMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjkxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41ODA1Nl0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuOTE2NjddLFxuICAgIFwiOTIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg1NTU2XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NzIyM10sXG4gICAgXCI5MjZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzMzMzRdLFxuICAgIFwiOTI4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODU1NTZdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44NTU1Nl0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzk0NDVdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40NTgzMywgMC4wMzA1NiwgMCwgMC41NV0sXG4gICAgXCI4MjEyXCI6IFswLCAwLjQ1ODMzLCAwLjAzMDU2LCAwLCAxLjEwMDAxXSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zMDU1Nl0sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1ODM0XSxcbiAgICBcIjgyMjFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTU4MzRdXG4gIH0sXG4gIFwiU2Fuc1NlcmlmLUl0YWxpY1wiOiB7XG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMC4wNTczMywgMCwgMC4zMTk0NV0sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMC4wMDMxNiwgMCwgMC41XSxcbiAgICBcIjM1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA1MDg3LCAwLCAwLjgzMzM0XSxcbiAgICBcIjM2XCI6IFswLjA1NTU2LCAwLjc1LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAuMDMxMjYsIDAsIDAuODMzMzRdLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAuMDMwNTgsIDAsIDAuNzU4MzRdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAuMDc4MTYsIDAsIDAuMjc3NzhdLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAuMTMxNjQsIDAsIDAuMzg4ODldLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAuMDI1MzYsIDAsIDAuMzg4ODldLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAuMTE3NzUsIDAsIDAuNV0sXG4gICAgXCI0M1wiOiBbMC4wODMzMywgMC41ODMzMywgMC4wMjUzNiwgMCwgMC43Nzc3OF0sXG4gICAgXCI0NFwiOiBbMC4xMjUsIDAuMDgzMzMsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNDVcIjogWzAsIDAuNDQ0NDQsIDAuMDE5NDYsIDAsIDAuMzMzMzNdLFxuICAgIFwiNDZcIjogWzAsIDAuMDgzMzMsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNDdcIjogWzAuMjUsIDAuNzUsIDAuMTMxNjQsIDAsIDAuNV0sXG4gICAgXCI0OFwiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjQ5XCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNTBcIjogWzAsIDAuNjU1NTYsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCI1MVwiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjUyXCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNTNcIjogWzAsIDAuNjU1NTYsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCI1NFwiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjU1XCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNTZcIjogWzAsIDAuNjU1NTYsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCI1N1wiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjU4XCI6IFswLCAwLjQ0NDQ0LCAwLjAyNTAyLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjU5XCI6IFswLjEyNSwgMC40NDQ0NCwgMC4wMjUwMiwgMCwgMC4yNzc3OF0sXG4gICAgXCI2MVwiOiBbLTAuMTMsIDAuMzcsIDAuMDUwODcsIDAsIDAuNzc3NzhdLFxuICAgIFwiNjNcIjogWzAsIDAuNjk0NDQsIDAuMTE4MDksIDAsIDAuNDcyMjJdLFxuICAgIFwiNjRcIjogWzAsIDAuNjk0NDQsIDAuMDc1NTUsIDAsIDAuNjY2NjddLFxuICAgIFwiNjVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiNjZcIjogWzAsIDAuNjk0NDQsIDAuMDgyOTMsIDAsIDAuNjY2NjddLFxuICAgIFwiNjdcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNjM4ODldLFxuICAgIFwiNjhcIjogWzAsIDAuNjk0NDQsIDAuMDc1NTUsIDAsIDAuNzIyMjNdLFxuICAgIFwiNjlcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNTk3MjJdLFxuICAgIFwiNzBcIjogWzAsIDAuNjk0NDQsIDAuMTMzNzIsIDAsIDAuNTY5NDVdLFxuICAgIFwiNzFcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNjY2NjddLFxuICAgIFwiNzJcIjogWzAsIDAuNjk0NDQsIDAuMDgwOTQsIDAsIDAuNzA4MzRdLFxuICAgIFwiNzNcIjogWzAsIDAuNjk0NDQsIDAuMTMzNzIsIDAsIDAuMjc3NzhdLFxuICAgIFwiNzRcIjogWzAsIDAuNjk0NDQsIDAuMDgwOTQsIDAsIDAuNDcyMjJdLFxuICAgIFwiNzVcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNjk0NDVdLFxuICAgIFwiNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTQxNjddLFxuICAgIFwiNzdcIjogWzAsIDAuNjk0NDQsIDAuMDgwOTQsIDAsIDAuODc1XSxcbiAgICBcIjc4XCI6IFswLCAwLjY5NDQ0LCAwLjA4MDk0LCAwLCAwLjcwODM0XSxcbiAgICBcIjc5XCI6IFswLCAwLjY5NDQ0LCAwLjA3NTU1LCAwLCAwLjczNjExXSxcbiAgICBcIjgwXCI6IFswLCAwLjY5NDQ0LCAwLjA4MjkzLCAwLCAwLjYzODg5XSxcbiAgICBcIjgxXCI6IFswLjEyNSwgMC42OTQ0NCwgMC4wNzU1NSwgMCwgMC43MzYxMV0sXG4gICAgXCI4MlwiOiBbMCwgMC42OTQ0NCwgMC4wODI5MywgMCwgMC42NDU4NF0sXG4gICAgXCI4M1wiOiBbMCwgMC42OTQ0NCwgMC4wOTIwNSwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NFwiOiBbMCwgMC42OTQ0NCwgMC4xMzM3MiwgMCwgMC42ODA1Nl0sXG4gICAgXCI4NVwiOiBbMCwgMC42OTQ0NCwgMC4wODA5NCwgMCwgMC42ODc1XSxcbiAgICBcIjg2XCI6IFswLCAwLjY5NDQ0LCAwLjE2MTUsIDAsIDAuNjY2NjddLFxuICAgIFwiODdcIjogWzAsIDAuNjk0NDQsIDAuMTYxNSwgMCwgMC45NDQ0NV0sXG4gICAgXCI4OFwiOiBbMCwgMC42OTQ0NCwgMC4xMzM3MiwgMCwgMC42NjY2N10sXG4gICAgXCI4OVwiOiBbMCwgMC42OTQ0NCwgMC4xNzI2MSwgMCwgMC42NjY2N10sXG4gICAgXCI5MFwiOiBbMCwgMC42OTQ0NCwgMC4xMTk4MywgMCwgMC42MTExMV0sXG4gICAgXCI5MVwiOiBbMC4yNSwgMC43NSwgMC4xNTk0MiwgMCwgMC4yODg4OV0sXG4gICAgXCI5M1wiOiBbMC4yNSwgMC43NSwgMC4wODcxOSwgMCwgMC4yODg4OV0sXG4gICAgXCI5NFwiOiBbMCwgMC42OTQ0NCwgMC4wNzk5LCAwLCAwLjVdLFxuICAgIFwiOTVcIjogWzAuMzUsIDAuMDk0NDQsIDAuMDg2MTYsIDAsIDAuNV0sXG4gICAgXCI5N1wiOiBbMCwgMC40NDQ0NCwgMC4wMDk4MSwgMCwgMC40ODA1Nl0sXG4gICAgXCI5OFwiOiBbMCwgMC42OTQ0NCwgMC4wMzA1NywgMCwgMC41MTY2N10sXG4gICAgXCI5OVwiOiBbMCwgMC40NDQ0NCwgMC4wODMzNiwgMCwgMC40NDQ0NV0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjk0NDQsIDAuMDk0ODMsIDAsIDAuNTE2NjddLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ0NDQ0LCAwLjA2Nzc4LCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEwMlwiOiBbMCwgMC42OTQ0NCwgMC4yMTcwNSwgMCwgMC4zMDU1Nl0sXG4gICAgXCIxMDNcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMTA4MzYsIDAsIDAuNV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAuMDE3NzgsIDAsIDAuNTE2NjddLFxuICAgIFwiMTA1XCI6IFswLCAwLjY3OTM3LCAwLjA5NzE4LCAwLCAwLjIzODg5XSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42NzkzNywgMC4wOTE2MiwgMCwgMC4yNjY2N10sXG4gICAgXCIxMDdcIjogWzAsIDAuNjk0NDQsIDAuMDgzMzYsIDAsIDAuNDg4ODldLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLjA5NDgzLCAwLCAwLjIzODg5XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NDQ0NCwgMC4wMTc3OCwgMCwgMC43OTQ0NV0sXG4gICAgXCIxMTBcIjogWzAsIDAuNDQ0NDQsIDAuMDE3NzgsIDAsIDAuNTE2NjddLFxuICAgIFwiMTExXCI6IFswLCAwLjQ0NDQ0LCAwLjA2NjEzLCAwLCAwLjVdLFxuICAgIFwiMTEyXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAzODksIDAsIDAuNTE2NjddLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjA0MTY5LCAwLCAwLjUxNjY3XSxcbiAgICBcIjExNFwiOiBbMCwgMC40NDQ0NCwgMC4xMDgzNiwgMCwgMC4zNDE2N10sXG4gICAgXCIxMTVcIjogWzAsIDAuNDQ0NDQsIDAuMDc3OCwgMCwgMC4zODMzM10sXG4gICAgXCIxMTZcIjogWzAsIDAuNTcxNDMsIDAuMDcyMjUsIDAsIDAuMzYxMTFdLFxuICAgIFwiMTE3XCI6IFswLCAwLjQ0NDQ0LCAwLjA0MTY5LCAwLCAwLjUxNjY3XSxcbiAgICBcIjExOFwiOiBbMCwgMC40NDQ0NCwgMC4xMDgzNiwgMCwgMC40NjExMV0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDQ0NDQsIDAuMTA4MzYsIDAsIDAuNjgzMzRdLFxuICAgIFwiMTIwXCI6IFswLCAwLjQ0NDQ0LCAwLjA5MTY5LCAwLCAwLjQ2MTExXSxcbiAgICBcIjEyMVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4xMDgzNiwgMCwgMC40NjExMV0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDQ0NDQsIDAuMDg3NTIsIDAsIDAuNDM0NzJdLFxuICAgIFwiMTI2XCI6IFswLjM1LCAwLjMyNjU5LCAwLjA4ODI2LCAwLCAwLjVdLFxuICAgIFwiMTY4XCI6IFswLCAwLjY3OTM3LCAwLjA2Mzg1LCAwLCAwLjVdLFxuICAgIFwiMTc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczNzUyXSxcbiAgICBcIjE4NFwiOiBbMC4xNzAxNCwgMCwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCIzMDVcIjogWzAsIDAuNDQ0NDQsIDAuMDQxNjksIDAsIDAuMjM4ODldLFxuICAgIFwiNTY3XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjA0MTY5LCAwLCAwLjI2NjY3XSxcbiAgICBcIjcxMFwiOiBbMCwgMC42OTQ0NCwgMC4wNzk5LCAwLCAwLjVdLFxuICAgIFwiNzExXCI6IFswLCAwLjYzMTk0LCAwLjA4NDMyLCAwLCAwLjVdLFxuICAgIFwiNzEzXCI6IFswLCAwLjYwODg5LCAwLjA4Nzc2LCAwLCAwLjVdLFxuICAgIFwiNzE0XCI6IFswLCAwLjY5NDQ0LCAwLjA5MjA1LCAwLCAwLjVdLFxuICAgIFwiNzE1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLjA5NDgzLCAwLCAwLjVdLFxuICAgIFwiNzI5XCI6IFswLCAwLjY3OTM3LCAwLjA3Nzc0LCAwLCAwLjI3Nzc4XSxcbiAgICBcIjczMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43Mzc1Ml0sXG4gICAgXCI3MzJcIjogWzAsIDAuNjc2NTksIDAuMDg4MjYsIDAsIDAuNV0sXG4gICAgXCI3MzNcIjogWzAsIDAuNjk0NDQsIDAuMDkyMDUsIDAsIDAuNV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjk0NDQsIDAuMTMzNzIsIDAsIDAuNTQxNjddLFxuICAgIFwiOTE2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjkyMFwiOiBbMCwgMC42OTQ0NCwgMC4wNzU1NSwgMCwgMC43Nzc3OF0sXG4gICAgXCI5MjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiOTI2XCI6IFswLCAwLjY5NDQ0LCAwLjEyODE2LCAwLCAwLjY2NjY3XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42OTQ0NCwgMC4wODA5NCwgMCwgMC43MDgzNF0sXG4gICAgXCI5MzFcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNzIyMjJdLFxuICAgIFwiOTMzXCI6IFswLCAwLjY5NDQ0LCAwLjA5MDMxLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjkzNFwiOiBbMCwgMC42OTQ0NCwgMC4wNDYwMywgMCwgMC43MjIyMl0sXG4gICAgXCI5MzZcIjogWzAsIDAuNjk0NDQsIDAuMDkwMzEsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTM3XCI6IFswLCAwLjY5NDQ0LCAwLjA4MjkzLCAwLCAwLjcyMjIyXSxcbiAgICBcIjgyMTFcIjogWzAsIDAuNDQ0NDQsIDAuMDg2MTYsIDAsIDAuNV0sXG4gICAgXCI4MjEyXCI6IFswLCAwLjQ0NDQ0LCAwLjA4NjE2LCAwLCAxLjBdLFxuICAgIFwiODIxNlwiOiBbMCwgMC42OTQ0NCwgMC4wNzgxNiwgMCwgMC4yNzc3OF0sXG4gICAgXCI4MjE3XCI6IFswLCAwLjY5NDQ0LCAwLjA3ODE2LCAwLCAwLjI3Nzc4XSxcbiAgICBcIjgyMjBcIjogWzAsIDAuNjk0NDQsIDAuMTQyMDUsIDAsIDAuNV0sXG4gICAgXCI4MjIxXCI6IFswLCAwLjY5NDQ0LCAwLjAwMzE2LCAwLCAwLjVdXG4gIH0sXG4gIFwiU2Fuc1NlcmlmLVJlZ3VsYXJcIjoge1xuICAgIFwiMzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzE5NDVdLFxuICAgIFwiMzRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCIzNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCIzNlwiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjM3XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjM4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc1ODM0XSxcbiAgICBcIjM5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjQwXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjQxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjQyXCI6IFswLCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiNDNcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNDRcIjogWzAuMTI1LCAwLjA4MzMzLCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjQ1XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjMzMzMzXSxcbiAgICBcIjQ2XCI6IFswLCAwLjA4MzMzLCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjQ3XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiNDhcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI0OVwiOiBbMCwgMC42NTU1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUwXCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTFcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1MlwiOiBbMCwgMC42NTU1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUzXCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTRcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1NVwiOiBbMCwgMC42NTU1NiwgMCwgMCwgMC41XSxcbiAgICBcIjU2XCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTdcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1OFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI1OVwiOiBbMC4xMjUsIDAuNDQ0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNjFcIjogWy0wLjEzLCAwLjM3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjYzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjY0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjY1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjY2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjY3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjY4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcyMjIzXSxcbiAgICBcIjY5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU5NzIyXSxcbiAgICBcIjcwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU2OTQ1XSxcbiAgICBcIjcxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjcyXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwODM0XSxcbiAgICBcIjczXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjc0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjc1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY5NDQ1XSxcbiAgICBcIjc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU0MTY3XSxcbiAgICBcIjc3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg3NV0sXG4gICAgXCI3OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MDgzNF0sXG4gICAgXCI3OVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzYxMV0sXG4gICAgXCI4MFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI4MVwiOiBbMC4xMjUsIDAuNjk0NDQsIDAsIDAsIDAuNzM2MTFdLFxuICAgIFwiODJcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjQ1ODRdLFxuICAgIFwiODNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjgwNTZdLFxuICAgIFwiODVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjg3NV0sXG4gICAgXCI4NlwiOiBbMCwgMC42OTQ0NCwgMC4wMTM4OSwgMCwgMC42NjY2N10sXG4gICAgXCI4N1wiOiBbMCwgMC42OTQ0NCwgMC4wMTM4OSwgMCwgMC45NDQ0NV0sXG4gICAgXCI4OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4OVwiOiBbMCwgMC42OTQ0NCwgMC4wMjUsIDAsIDAuNjY2NjddLFxuICAgIFwiOTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiOTFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMjg4ODldLFxuICAgIFwiOTNcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMjg4ODldLFxuICAgIFwiOTRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI5NVwiOiBbMC4zNSwgMC4wOTQ0NCwgMC4wMjc3OCwgMCwgMC41XSxcbiAgICBcIjk3XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQ4MDU2XSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjUxNjY3XSxcbiAgICBcIjk5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCIxMDFcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMTAyXCI6IFswLCAwLjY5NDQ0LCAwLjA2OTQ0LCAwLCAwLjMwNTU2XSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wMTM4OSwgMCwgMC41XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCIxMDVcIjogWzAsIDAuNjc5MzcsIDAsIDAsIDAuMjM4ODldLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY3OTM3LCAwLCAwLCAwLjI2NjY3XSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC40ODg4OV0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjM4ODldLFxuICAgIFwiMTA5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjExMFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCIxMTFcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNTE2NjddLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjUxNjY3XSxcbiAgICBcIjExNFwiOiBbMCwgMC40NDQ0NCwgMC4wMTM4OSwgMCwgMC4zNDE2N10sXG4gICAgXCIxMTVcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuMzgzMzNdLFxuICAgIFwiMTE2XCI6IFswLCAwLjU3MTQzLCAwLCAwLCAwLjM2MTExXSxcbiAgICBcIjExN1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCIxMThcIjogWzAsIDAuNDQ0NDQsIDAuMDEzODksIDAsIDAuNDYxMTFdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQ0NDQ0LCAwLjAxMzg5LCAwLCAwLjY4MzM0XSxcbiAgICBcIjEyMFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40NjExMV0sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDEzODksIDAsIDAuNDYxMTFdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQzNDcyXSxcbiAgICBcIjEyNlwiOiBbMC4zNSwgMC4zMjY1OSwgMCwgMCwgMC41XSxcbiAgICBcIjE2OFwiOiBbMCwgMC42NzkzNywgMCwgMCwgMC41XSxcbiAgICBcIjE3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCIxODRcIjogWzAuMTcwMTQsIDAsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMzA1XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjIzODg5XSxcbiAgICBcIjU2N1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC4yNjY2N10sXG4gICAgXCI3MTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI3MTFcIjogWzAsIDAuNjMxOTQsIDAsIDAsIDAuNV0sXG4gICAgXCI3MTNcIjogWzAsIDAuNjA4ODksIDAsIDAsIDAuNV0sXG4gICAgXCI3MTRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI3MTVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI3MjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI3MjlcIjogWzAsIDAuNjc5MzcsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNzMwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjczMlwiOiBbMCwgMC42NzY1OSwgMCwgMCwgMC41XSxcbiAgICBcIjczM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjkxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NDE2N10sXG4gICAgXCI5MTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiOTIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTI4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwODM0XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjkzNlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40NDQ0NCwgMC4wMjc3OCwgMCwgMC41XSxcbiAgICBcIjgyMTJcIjogWzAsIDAuNDQ0NDQsIDAuMDI3NzgsIDAsIDEuMF0sXG4gICAgXCI4MjE2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjgyMTdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODIyMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjgyMjFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV1cbiAgfSxcbiAgXCJTY3JpcHQtUmVndWxhclwiOiB7XG4gICAgXCI2NVwiOiBbMCwgMC43LCAwLjIyOTI1LCAwLCAwLjgwMjUzXSxcbiAgICBcIjY2XCI6IFswLCAwLjcsIDAuMDQwODcsIDAsIDAuOTA3NTddLFxuICAgIFwiNjdcIjogWzAsIDAuNywgMC4xNjg5LCAwLCAwLjY2NjE5XSxcbiAgICBcIjY4XCI6IFswLCAwLjcsIDAuMDkzNzEsIDAsIDAuNzc0NDNdLFxuICAgIFwiNjlcIjogWzAsIDAuNywgMC4xODU4MywgMCwgMC41NjE2Ml0sXG4gICAgXCI3MFwiOiBbMCwgMC43LCAwLjEzNjM0LCAwLCAwLjg5NTQ0XSxcbiAgICBcIjcxXCI6IFswLCAwLjcsIDAuMTczMjIsIDAsIDAuNjA5NjFdLFxuICAgIFwiNzJcIjogWzAsIDAuNywgMC4yOTY5NCwgMCwgMC45NjkxOV0sXG4gICAgXCI3M1wiOiBbMCwgMC43LCAwLjE5MTg5LCAwLCAwLjgwOTA3XSxcbiAgICBcIjc0XCI6IFswLjI3Nzc4LCAwLjcsIDAuMTkxODksIDAsIDEuMDUxNTldLFxuICAgIFwiNzVcIjogWzAsIDAuNywgMC4zMTI1OSwgMCwgMC45MTM2NF0sXG4gICAgXCI3NlwiOiBbMCwgMC43LCAwLjE5MTg5LCAwLCAwLjg3MzczXSxcbiAgICBcIjc3XCI6IFswLCAwLjcsIDAuMTU5ODEsIDAsIDEuMDgwMzFdLFxuICAgIFwiNzhcIjogWzAsIDAuNywgMC4zNTI1LCAwLCAwLjkwMTVdLFxuICAgIFwiNzlcIjogWzAsIDAuNywgMC4wODA3OCwgMCwgMC43Mzc4N10sXG4gICAgXCI4MFwiOiBbMCwgMC43LCAwLjA4MDc4LCAwLCAxLjAxMjYyXSxcbiAgICBcIjgxXCI6IFswLCAwLjcsIDAuMDMzMDUsIDAsIDAuODgyODJdLFxuICAgIFwiODJcIjogWzAsIDAuNywgMC4wNjI1OSwgMCwgMC44NV0sXG4gICAgXCI4M1wiOiBbMCwgMC43LCAwLjE5MTg5LCAwLCAwLjg2NzY3XSxcbiAgICBcIjg0XCI6IFswLCAwLjcsIDAuMjkwODcsIDAsIDAuNzQ2OTddLFxuICAgIFwiODVcIjogWzAsIDAuNywgMC4yNTgxNSwgMCwgMC43OTk5Nl0sXG4gICAgXCI4NlwiOiBbMCwgMC43LCAwLjI3NTIzLCAwLCAwLjYyMjA0XSxcbiAgICBcIjg3XCI6IFswLCAwLjcsIDAuMjc1MjMsIDAsIDAuODA1MzJdLFxuICAgIFwiODhcIjogWzAsIDAuNywgMC4yNjAwNiwgMCwgMC45NDQ0NV0sXG4gICAgXCI4OVwiOiBbMCwgMC43LCAwLjI5MzksIDAsIDAuNzA5NjFdLFxuICAgIFwiOTBcIjogWzAsIDAuNywgMC4yNDAzNywgMCwgMC44MjEyXVxuICB9LFxuICBcIlNpemUxLVJlZ3VsYXJcIjoge1xuICAgIFwiNDBcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDU4MzRdLFxuICAgIFwiNDFcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDU4MzRdLFxuICAgIFwiNDdcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNTc3NzhdLFxuICAgIFwiOTFcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDE2NjddLFxuICAgIFwiOTJcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNTc3NzhdLFxuICAgIFwiOTNcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDE2NjddLFxuICAgIFwiMTIzXCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjEyNVwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC41ODMzNF0sXG4gICAgXCI3MTBcIjogWzAsIDAuNzIyMjIsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiNzMyXCI6IFswLCAwLjcyMjIyLCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjc3MFwiOiBbMCwgMC43MjIyMiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI3NzFcIjogWzAsIDAuNzIyMjIsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODIxNFwiOiBbLTAuMDAwOTksIDAuNjAxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg1OTNcIjogWzFlLTA1LCAwLjYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODU5NVwiOiBbMWUtMDUsIDAuNiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NjU3XCI6IFsxZS0wNSwgMC42LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg2NTlcIjogWzFlLTA1LCAwLjYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODcxOVwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMC45NDQ0NV0sXG4gICAgXCI4NzIwXCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjk0NDQ1XSxcbiAgICBcIjg3MjFcIjogWzAuMjUwMDEsIDAuNzUsIDAsIDAsIDEuMDU1NTZdLFxuICAgIFwiODczMFwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg3MzlcIjogWy0wLjAwNTk5LCAwLjYwNiwgMCwgMCwgMC4zMzMzM10sXG4gICAgXCI4NzQxXCI6IFstMC4wMDU5OSwgMC42MDYsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODc0N1wiOiBbMC4zMDYxMiwgMC44MDUsIDAuMTk0NDUsIDAsIDAuNDcyMjJdLFxuICAgIFwiODc0OFwiOiBbMC4zMDYsIDAuODA1LCAwLjE5NDQ1LCAwLCAwLjQ3MjIyXSxcbiAgICBcIjg3NDlcIjogWzAuMzA2LCAwLjgwNSwgMC4xOTQ0NSwgMCwgMC40NzIyMl0sXG4gICAgXCI4NzUwXCI6IFswLjMwNjEyLCAwLjgwNSwgMC4xOTQ0NSwgMCwgMC40NzIyMl0sXG4gICAgXCI4ODk2XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjg4OTdcIjogWzAuMjUwMDEsIDAuNzUsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODg5OFwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI4ODk5XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjg5NjhcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiODk2OVwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC40NzIyMl0sXG4gICAgXCI4OTcwXCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjg5NzFcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiOTE2OFwiOiBbLTAuMDAwOTksIDAuNjAxLCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjEwMjE2XCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjEwMjE3XCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjEwNzUyXCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjEwNzUzXCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjEwNzU0XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjEwNzU2XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjEwNzU4XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjgzMzM0XVxuICB9LFxuICBcIlNpemUyLVJlZ3VsYXJcIjoge1xuICAgIFwiNDBcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNTk3MjJdLFxuICAgIFwiNDFcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNTk3MjJdLFxuICAgIFwiNDdcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuODExMTFdLFxuICAgIFwiOTFcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiOTJcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuODExMTFdLFxuICAgIFwiOTNcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiMTIzXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjEyNVwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI3MTBcIjogWzAsIDAuNzUsIDAsIDAsIDEuMF0sXG4gICAgXCI3MzJcIjogWzAsIDAuNzUsIDAsIDAsIDEuMF0sXG4gICAgXCI3NzBcIjogWzAsIDAuNzUsIDAsIDAsIDEuMF0sXG4gICAgXCI3NzFcIjogWzAsIDAuNzUsIDAsIDAsIDEuMF0sXG4gICAgXCI4NzE5XCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjI3Nzc4XSxcbiAgICBcIjg3MjBcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuMjc3NzhdLFxuICAgIFwiODcyMVwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS40NDQ0NV0sXG4gICAgXCI4NzMwXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAxLjBdLFxuICAgIFwiODc0N1wiOiBbMC44NjIyNSwgMS4zNiwgMC40NDQ0NSwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NzQ4XCI6IFswLjg2MiwgMS4zNiwgMC40NDQ0NSwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NzQ5XCI6IFswLjg2MiwgMS4zNiwgMC40NDQ0NSwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NzUwXCI6IFswLjg2MjI1LCAxLjM2LCAwLjQ0NDQ1LCAwLCAwLjU1NTU2XSxcbiAgICBcIjg4OTZcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiODg5N1wiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCI4ODk4XCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjg4OTlcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiODk2OFwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCI4OTY5XCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjg5NzBcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNTI3NzhdLFxuICAgIFwiODk3MVwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCIxMDIxNlwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC42MTExMV0sXG4gICAgXCIxMDIxN1wiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC42MTExMV0sXG4gICAgXCIxMDc1MlwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS41MTExMl0sXG4gICAgXCIxMDc1M1wiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS41MTExMl0sXG4gICAgXCIxMDc1NFwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS41MTExMl0sXG4gICAgXCIxMDc1NlwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCIxMDc1OFwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS4xMTExMV1cbiAgfSxcbiAgXCJTaXplMy1SZWd1bGFyXCI6IHtcbiAgICBcIjQwXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjczNjExXSxcbiAgICBcIjQxXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjczNjExXSxcbiAgICBcIjQ3XCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAxLjA0NDQ1XSxcbiAgICBcIjkxXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjkyXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAxLjA0NDQ1XSxcbiAgICBcIjkzXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjEyM1wiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMC43NV0sXG4gICAgXCIxMjVcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNzVdLFxuICAgIFwiNzEwXCI6IFswLCAwLjc1LCAwLCAwLCAxLjQ0NDQ1XSxcbiAgICBcIjczMlwiOiBbMCwgMC43NSwgMCwgMCwgMS40NDQ0NV0sXG4gICAgXCI3NzBcIjogWzAsIDAuNzUsIDAsIDAsIDEuNDQ0NDVdLFxuICAgIFwiNzcxXCI6IFswLCAwLjc1LCAwLCAwLCAxLjQ0NDQ1XSxcbiAgICBcIjg3MzBcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDEuMF0sXG4gICAgXCI4OTY4XCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjg5NjlcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiODk3MFwiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMC41ODMzNF0sXG4gICAgXCI4OTcxXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjEwMjE2XCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjc1XSxcbiAgICBcIjEwMjE3XCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjc1XVxuICB9LFxuICBcIlNpemU0LVJlZ3VsYXJcIjoge1xuICAgIFwiNDBcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNzkxNjddLFxuICAgIFwiNDFcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNzkxNjddLFxuICAgIFwiNDdcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDEuMjc3NzhdLFxuICAgIFwiOTFcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiOTJcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDEuMjc3NzhdLFxuICAgIFwiOTNcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiMTIzXCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjgwNTU2XSxcbiAgICBcIjEyNVwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC44MDU1Nl0sXG4gICAgXCI3MTBcIjogWzAsIDAuODI1LCAwLCAwLCAxLjg4ODldLFxuICAgIFwiNzMyXCI6IFswLCAwLjgyNSwgMCwgMCwgMS44ODg5XSxcbiAgICBcIjc3MFwiOiBbMCwgMC44MjUsIDAsIDAsIDEuODg4OV0sXG4gICAgXCI3NzFcIjogWzAsIDAuODI1LCAwLCAwLCAxLjg4ODldLFxuICAgIFwiODczMFwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg5NjhcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiODk2OVwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI4OTcwXCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjg5NzFcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiOTExNVwiOiBbMC42NDUwMiwgMS4xNTUsIDAsIDAsIDAuODc1XSxcbiAgICBcIjkxMTZcIjogWzFlLTA1LCAwLjYsIDAsIDAsIDAuODc1XSxcbiAgICBcIjkxMTdcIjogWzAuNjQ1MDIsIDEuMTU1LCAwLCAwLCAwLjg3NV0sXG4gICAgXCI5MTE4XCI6IFswLjY0NTAyLCAxLjE1NSwgMCwgMCwgMC44NzVdLFxuICAgIFwiOTExOVwiOiBbMWUtMDUsIDAuNiwgMCwgMCwgMC44NzVdLFxuICAgIFwiOTEyMFwiOiBbMC42NDUwMiwgMS4xNTUsIDAsIDAsIDAuODc1XSxcbiAgICBcIjkxMjFcIjogWzAuNjQ1MDIsIDEuMTU1LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjkxMjJcIjogWy0wLjAwMDk5LCAwLjYwMSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MTIzXCI6IFswLjY0NTAyLCAxLjE1NSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MTI0XCI6IFswLjY0NTAyLCAxLjE1NSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MTI1XCI6IFstMC4wMDA5OSwgMC42MDEsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTEyNlwiOiBbMC42NDUwMiwgMS4xNTUsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTEyN1wiOiBbMWUtMDUsIDAuOSwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5MTI4XCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjkxMjlcIjogWzAuOTAwMDEsIDAsIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTEzMFwiOiBbMCwgMC4zLCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjkxMzFcIjogWzFlLTA1LCAwLjksIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTEzMlwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5MTMzXCI6IFswLjkwMDAxLCAwLCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjkxNDNcIjogWzAuODg1MDIsIDAuOTE1LCAwLCAwLCAxLjA1NTU2XSxcbiAgICBcIjEwMjE2XCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjgwNTU2XSxcbiAgICBcIjEwMjE3XCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjgwNTU2XSxcbiAgICBcIjU3MzQ0XCI6IFstMC4wMDQ5OSwgMC42MDUsIDAsIDAsIDEuMDU1NTZdLFxuICAgIFwiNTczNDVcIjogWy0wLjAwNDk5LCAwLjYwNSwgMCwgMCwgMS4wNTU1Nl0sXG4gICAgXCI1NzY4MFwiOiBbMCwgMC4xMiwgMCwgMCwgMC40NV0sXG4gICAgXCI1NzY4MVwiOiBbMCwgMC4xMiwgMCwgMCwgMC40NV0sXG4gICAgXCI1NzY4MlwiOiBbMCwgMC4xMiwgMCwgMCwgMC40NV0sXG4gICAgXCI1NzY4M1wiOiBbMCwgMC4xMiwgMCwgMCwgMC40NV1cbiAgfSxcbiAgXCJUeXBld3JpdGVyLVJlZ3VsYXJcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjMzXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIzNFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMzVcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjM2XCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIzN1wiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiMzhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjM5XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0MFwiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiNDFcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjQyXCI6IFswLCAwLjUyMDgzLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0M1wiOiBbLTAuMDgwNTYsIDAuNTMwNTUsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjQ0XCI6IFswLjEzODg5LCAwLjEyNSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNDVcIjogWy0wLjA4MDU2LCAwLjUzMDU1LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0NlwiOiBbMCwgMC4xMjUsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjQ3XCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0OFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNDlcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjUwXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1MVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNTJcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjUzXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1NFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNTVcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjU2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1N1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNThcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjU5XCI6IFswLjEzODg5LCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2MFwiOiBbLTAuMDU1NTYsIDAuNTU1NTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjYxXCI6IFstMC4xOTU0OSwgMC40MTU2MiwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjJcIjogWy0wLjA1NTU2LCAwLjU1NTU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2M1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjY1XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjY4XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2OVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzBcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjcxXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3MlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzNcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjc0XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3NVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjc3XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3OFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzlcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgwXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4MVwiOiBbMC4xMzg4OSwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiODJcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgzXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4NFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiODVcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjg2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4N1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiODhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjg5XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTFcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkyXCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5M1wiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjk1XCI6IFswLjA5NTE0LCAwLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTdcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjk4XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5OVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTAwXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwMlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTAzXCI6IFswLjIyMjIyLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwNVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTA2XCI6IFswLjIyMjIyLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMDdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTBcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjExMVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTEyXCI6IFswLjIyMjIyLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTNcIjogWzAuMjIyMjIsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjExNFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTE1XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTZcIjogWzAsIDAuNTUzNTgsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjExN1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTE4XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEyMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTIxXCI6IFswLjIyMjIyLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEyM1wiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTI0XCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMjVcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEyNlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTI3XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjE3NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTg0XCI6IFswLjE5NDQ1LCAwLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIzMDVcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjU2N1wiOiBbMC4yMjIyMiwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzExXCI6IFswLCAwLjU2NTk3LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3MTNcIjogWzAsIDAuNTY1NTUsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjcxNFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzE1XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3MjhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjczMFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzcwXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3NzFcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjc3NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTE1XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkyMFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTIzXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTMxXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkzNFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTM2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgyMTdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgyNDJcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkyNTFcIjogWzAuMTExMTEsIDAuMjE5NDQsIDAsIDAsIDAuNTI1XVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2ZvbnRNZXRyaWNzLmpzXG5cblxuLyoqXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgbWV0cmljcyByZWdhcmRpbmcgZm9udHMgYW5kIGluZGl2aWR1YWwgc3ltYm9scy4gVGhlIHNpZ21hXG4gKiBhbmQgeGkgdmFyaWFibGVzLCBhcyB3ZWxsIGFzIHRoZSBtZXRyaWNNYXAgbWFwIGNvbnRhaW4gZGF0YSBleHRyYWN0ZWQgZnJvbVxuICogVGVYLCBUZVggZm9udCBtZXRyaWNzLCBhbmQgdGhlIFRURiBmaWxlcy4gVGhlc2UgZGF0YSBhcmUgdGhlbiBleHBvc2VkIHZpYSB0aGVcbiAqIGBtZXRyaWNzYCB2YXJpYWJsZSBhbmQgdGhlIGdldENoYXJhY3Rlck1ldHJpY3MgZnVuY3Rpb24uXG4gKi9cbi8vIEluIFRlWCwgdGhlcmUgYXJlIGFjdHVhbGx5IHRocmVlIHNldHMgb2YgZGltZW5zaW9ucywgb25lIGZvciBlYWNoIG9mXG4vLyB0ZXh0c3R5bGUgKHNpemUgaW5kZXggNSBhbmQgaGlnaGVyOiA+PTlwdCksIHNjcmlwdHN0eWxlIChzaXplIGluZGV4IDMgYW5kIDQ6XG4vLyA3LThwdCksIGFuZCBzY3JpcHRzY3JpcHRzdHlsZSAoc2l6ZSBpbmRleCAxIGFuZCAyOiA1LTZwdCkuICBUaGVzZSBhcmVcbi8vIHByb3ZpZGVkIGluIHRoZSB0aGUgYXJyYXlzIGJlbG93LCBpbiB0aGF0IG9yZGVyLlxuLy9cbi8vIFRoZSBmb250IG1ldHJpY3MgYXJlIHN0b3JlZCBpbiBmb250cyBjbXN5MTAsIGNtc3k3LCBhbmQgY21zeTUgcmVzcHNlY3RpdmVseS5cbi8vIFRoaXMgd2FzIGRldGVybWluZWQgYnkgcnVubmluZyB0aGUgZm9sbG93aW5nIHNjcmlwdDpcbi8vXG4vLyAgICAgbGF0ZXggLWludGVyYWN0aW9uPW5vbnN0b3Btb2RlIFxcXG4vLyAgICAgJ1xcZG9jdW1lbnRjbGFzc3thcnRpY2xlfVxcdXNlcGFja2FnZXthbXNtYXRofVxcYmVnaW57ZG9jdW1lbnR9JyBcXFxuLy8gICAgICckYSQgXFxleHBhbmRhZnRlclxcc2hvd1xcdGhlXFx0ZXh0Zm9udDInIFxcXG4vLyAgICAgJ1xcZXhwYW5kYWZ0ZXJcXHNob3dcXHRoZVxcc2NyaXB0Zm9udDInIFxcXG4vLyAgICAgJ1xcZXhwYW5kYWZ0ZXJcXHNob3dcXHRoZVxcc2NyaXB0c2NyaXB0Zm9udDInIFxcXG4vLyAgICAgJ1xcc3RvcCdcbi8vXG4vLyBUaGUgbWV0cmljcyB0aGVtc2VsdmVzIHdlcmUgcmV0cmVpdmVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6XG4vL1xuLy8gICAgIHRmdG9wbCBjbXN5MTBcbi8vICAgICB0ZnRvcGwgY21zeTdcbi8vICAgICB0ZnRvcGwgY21zeTVcbi8vXG4vLyBUaGUgb3V0cHV0IG9mIGVhY2ggb2YgdGhlc2UgY29tbWFuZHMgaXMgcXVpdGUgbGVuZ3RoeS4gIFRoZSBvbmx5IHBhcnQgd2Vcbi8vIGNhcmUgYWJvdXQgaXMgdGhlIEZPTlRESU1FTiBzZWN0aW9uLiBFYWNoIHZhbHVlIGlzIG1lYXN1cmVkIGluIEVNcy5cbnZhciBzaWdtYXNBbmRYaXMgPSB7XG4gIHNsYW50OiBbMC4yNTAsIDAuMjUwLCAwLjI1MF0sXG4gIC8vIHNpZ21hMVxuICBzcGFjZTogWzAuMDAwLCAwLjAwMCwgMC4wMDBdLFxuICAvLyBzaWdtYTJcbiAgc3RyZXRjaDogWzAuMDAwLCAwLjAwMCwgMC4wMDBdLFxuICAvLyBzaWdtYTNcbiAgc2hyaW5rOiBbMC4wMDAsIDAuMDAwLCAwLjAwMF0sXG4gIC8vIHNpZ21hNFxuICB4SGVpZ2h0OiBbMC40MzEsIDAuNDMxLCAwLjQzMV0sXG4gIC8vIHNpZ21hNVxuICBxdWFkOiBbMS4wMDAsIDEuMTcxLCAxLjQ3Ml0sXG4gIC8vIHNpZ21hNlxuICBleHRyYVNwYWNlOiBbMC4wMDAsIDAuMDAwLCAwLjAwMF0sXG4gIC8vIHNpZ21hN1xuICBudW0xOiBbMC42NzcsIDAuNzMyLCAwLjkyNV0sXG4gIC8vIHNpZ21hOFxuICBudW0yOiBbMC4zOTQsIDAuMzg0LCAwLjM4N10sXG4gIC8vIHNpZ21hOVxuICBudW0zOiBbMC40NDQsIDAuNDcxLCAwLjUwNF0sXG4gIC8vIHNpZ21hMTBcbiAgZGVub20xOiBbMC42ODYsIDAuNzUyLCAxLjAyNV0sXG4gIC8vIHNpZ21hMTFcbiAgZGVub20yOiBbMC4zNDUsIDAuMzQ0LCAwLjUzMl0sXG4gIC8vIHNpZ21hMTJcbiAgc3VwMTogWzAuNDEzLCAwLjUwMywgMC41MDRdLFxuICAvLyBzaWdtYTEzXG4gIHN1cDI6IFswLjM2MywgMC40MzEsIDAuNDA0XSxcbiAgLy8gc2lnbWExNFxuICBzdXAzOiBbMC4yODksIDAuMjg2LCAwLjI5NF0sXG4gIC8vIHNpZ21hMTVcbiAgc3ViMTogWzAuMTUwLCAwLjE0MywgMC4yMDBdLFxuICAvLyBzaWdtYTE2XG4gIHN1YjI6IFswLjI0NywgMC4yODYsIDAuNDAwXSxcbiAgLy8gc2lnbWExN1xuICBzdXBEcm9wOiBbMC4zODYsIDAuMzUzLCAwLjQ5NF0sXG4gIC8vIHNpZ21hMThcbiAgc3ViRHJvcDogWzAuMDUwLCAwLjA3MSwgMC4xMDBdLFxuICAvLyBzaWdtYTE5XG4gIGRlbGltMTogWzIuMzkwLCAxLjcwMCwgMS45ODBdLFxuICAvLyBzaWdtYTIwXG4gIGRlbGltMjogWzEuMDEwLCAxLjE1NywgMS40MjBdLFxuICAvLyBzaWdtYTIxXG4gIGF4aXNIZWlnaHQ6IFswLjI1MCwgMC4yNTAsIDAuMjUwXSxcbiAgLy8gc2lnbWEyMlxuICAvLyBUaGVzZSBmb250IG1ldHJpY3MgYXJlIGV4dHJhY3RlZCBmcm9tIFRlWCBieSB1c2luZyB0ZnRvcGwgb24gY21leDEwLnRmbTtcbiAgLy8gdGhleSBjb3JyZXNwb25kIHRvIHRoZSBmb250IHBhcmFtZXRlcnMgb2YgdGhlIGV4dGVuc2lvbiBmb250cyAoZmFtaWx5IDMpLlxuICAvLyBTZWUgdGhlIFRlWGJvb2ssIHBhZ2UgNDQxLiBJbiBBTVNUZVgsIHRoZSBleHRlbnNpb24gZm9udHMgc2NhbGU7IHRvXG4gIC8vIG1hdGNoIGNtZXg3LCB3ZSdkIHVzZSBjbWV4Ny50Zm0gdmFsdWVzIGZvciBzY3JpcHQgYW5kIHNjcmlwdHNjcmlwdFxuICAvLyB2YWx1ZXMuXG4gIGRlZmF1bHRSdWxlVGhpY2tuZXNzOiBbMC4wNCwgMC4wNDksIDAuMDQ5XSxcbiAgLy8geGk4OyBjbWV4NzogMC4wNDlcbiAgYmlnT3BTcGFjaW5nMTogWzAuMTExLCAwLjExMSwgMC4xMTFdLFxuICAvLyB4aTlcbiAgYmlnT3BTcGFjaW5nMjogWzAuMTY2LCAwLjE2NiwgMC4xNjZdLFxuICAvLyB4aTEwXG4gIGJpZ09wU3BhY2luZzM6IFswLjIsIDAuMiwgMC4yXSxcbiAgLy8geGkxMVxuICBiaWdPcFNwYWNpbmc0OiBbMC42LCAwLjYxMSwgMC42MTFdLFxuICAvLyB4aTEyOyBjbWV4NzogMC42MTFcbiAgYmlnT3BTcGFjaW5nNTogWzAuMSwgMC4xNDMsIDAuMTQzXSxcbiAgLy8geGkxMzsgY21leDc6IDAuMTQzXG4gIC8vIFRoZSBcXHNxcnQgcnVsZSB3aWR0aCBpcyB0YWtlbiBmcm9tIHRoZSBoZWlnaHQgb2YgdGhlIHN1cmQgY2hhcmFjdGVyLlxuICAvLyBTaW5jZSB3ZSB1c2UgdGhlIHNhbWUgZm9udCBhdCBhbGwgc2l6ZXMsIHRoaXMgdGhpY2tuZXNzIGRvZXNuJ3Qgc2NhbGUuXG4gIHNxcnRSdWxlVGhpY2tuZXNzOiBbMC4wNCwgMC4wNCwgMC4wNF0sXG4gIC8vIFRoaXMgdmFsdWUgZGV0ZXJtaW5lcyBob3cgbGFyZ2UgYSBwdCBpcywgZm9yIG1ldHJpY3Mgd2hpY2ggYXJlIGRlZmluZWRcbiAgLy8gaW4gdGVybXMgb2YgcHRzLlxuICAvLyBUaGlzIHZhbHVlIGlzIGFsc28gdXNlZCBpbiBrYXRleC5sZXNzOyBpZiB5b3UgY2hhbmdlIGl0IG1ha2Ugc3VyZSB0aGVcbiAgLy8gdmFsdWVzIG1hdGNoLlxuICBwdFBlckVtOiBbMTAuMCwgMTAuMCwgMTAuMF0sXG4gIC8vIFRoZSBzcGFjZSBiZXR3ZWVuIGFkamFjZW50IGB8YCBjb2x1bW5zIGluIGFuIGFycmF5IGRlZmluaXRpb24uIEZyb21cbiAgLy8gYFxcc2hvd3RoZVxcZG91YmxlcnVsZXNlcGAgaW4gTGFUZVguIEVxdWFscyAyLjAgLyBwdFBlckVtLlxuICBkb3VibGVSdWxlU2VwOiBbMC4yLCAwLjIsIDAuMl0sXG4gIC8vIFRoZSB3aWR0aCBvZiBzZXBhcmF0b3IgbGluZXMgaW4ge2FycmF5fSBlbnZpcm9ubWVudHMuIEZyb21cbiAgLy8gYFxcc2hvd3RoZVxcYXJyYXlydWxld2lkdGhgIGluIExhVGVYLiBFcXVhbHMgMC40IC8gcHRQZXJFbS5cbiAgYXJyYXlSdWxlV2lkdGg6IFswLjA0LCAwLjA0LCAwLjA0XSxcbiAgLy8gVHdvIHZhbHVlcyBmcm9tIExhVGVYIHNvdXJjZTJlOlxuICBmYm94c2VwOiBbMC4zLCAwLjMsIDAuM10sXG4gIC8vICAgICAgICAzIHB0IC8gcHRQZXJFbVxuICBmYm94cnVsZTogWzAuMDQsIDAuMDQsIDAuMDRdIC8vIDAuNCBwdCAvIHB0UGVyRW1cblxufTsgLy8gVGhpcyBtYXAgY29udGFpbnMgYSBtYXBwaW5nIGZyb20gZm9udCBuYW1lIGFuZCBjaGFyYWN0ZXIgY29kZSB0byBjaGFyYWN0ZXJcbi8vIG1ldHJpY3MsIGluY2x1ZGluZyBoZWlnaHQsIGRlcHRoLCBpdGFsaWMgY29ycmVjdGlvbiwgYW5kIHNrZXcgKGtlcm4gZnJvbSB0aGVcbi8vIGNoYXJhY3RlciB0byB0aGUgY29ycmVzcG9uZGluZyBcXHNrZXdjaGFyKVxuLy8gVGhpcyBtYXAgaXMgZ2VuZXJhdGVkIHZpYSBgbWFrZSBtZXRyaWNzYC4gSXQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIG1hbnVhbGx5LlxuXG4gLy8gVGhlc2UgYXJlIHZlcnkgcm91Z2ggYXBwcm94aW1hdGlvbnMuICBXZSBkZWZhdWx0IHRvIFRpbWVzIE5ldyBSb21hbiB3aGljaFxuLy8gc2hvdWxkIGhhdmUgTGF0aW4tMSBhbmQgQ3lyaWxsaWMgY2hhcmFjdGVycywgYnV0IG1heSBub3QgZGVwZW5kaW5nIG9uIHRoZVxuLy8gb3BlcmF0aW5nIHN5c3RlbS4gIFRoZSBtZXRyaWNzIGRvIG5vdCBhY2NvdW50IGZvciBleHRyYSBoZWlnaHQgZnJvbSB0aGVcbi8vIGFjY2VudHMuICBJbiB0aGUgY2FzZSBvZiBDeXJpbGxpYyBjaGFyYWN0ZXJzIHdoaWNoIGhhdmUgYm90aCBhc2NlbmRlcnMgYW5kXG4vLyBkZXNjZW5kZXJzIHdlIHByZWZlciBhcHByb3hpbWF0aW9ucyB3aXRoIGFzY2VuZGVycywgcHJpbWFyaWx5IHRvIHByZXZlbnRcbi8vIHRoZSBmcmFjdGlvbiBiYXIgb3Igcm9vdCBsaW5lIGZyb20gaW50ZXJzZWN0aW5nIHRoZSBnbHlwaC5cbi8vIFRPRE8oa2V2aW5iKSBhbGxvdyB1bmlvbiBvZiBtdWx0aXBsZSBnbHlwaCBtZXRyaWNzIGZvciBiZXR0ZXIgYWNjdXJhY3kuXG5cbnZhciBleHRyYUNoYXJhY3Rlck1hcCA9IHtcbiAgLy8gTGF0aW4tMVxuICAnw4UnOiAnQScsXG4gICfDhyc6ICdDJyxcbiAgJ8OQJzogJ0QnLFxuICAnw54nOiAnbycsXG4gICfDpSc6ICdhJyxcbiAgJ8OnJzogJ2MnLFxuICAnw7AnOiAnZCcsXG4gICfDvic6ICdvJyxcbiAgLy8gQ3lyaWxsaWNcbiAgJ9CQJzogJ0EnLFxuICAn0JEnOiAnQicsXG4gICfQkic6ICdCJyxcbiAgJ9CTJzogJ0YnLFxuICAn0JQnOiAnQScsXG4gICfQlSc6ICdFJyxcbiAgJ9CWJzogJ0snLFxuICAn0JcnOiAnMycsXG4gICfQmCc6ICdOJyxcbiAgJ9CZJzogJ04nLFxuICAn0JonOiAnSycsXG4gICfQmyc6ICdOJyxcbiAgJ9CcJzogJ00nLFxuICAn0J0nOiAnSCcsXG4gICfQnic6ICdPJyxcbiAgJ9CfJzogJ04nLFxuICAn0KAnOiAnUCcsXG4gICfQoSc6ICdDJyxcbiAgJ9CiJzogJ1QnLFxuICAn0KMnOiAneScsXG4gICfQpCc6ICdPJyxcbiAgJ9ClJzogJ1gnLFxuICAn0KYnOiAnVScsXG4gICfQpyc6ICdoJyxcbiAgJ9CoJzogJ1cnLFxuICAn0KknOiAnVycsXG4gICfQqic6ICdCJyxcbiAgJ9CrJzogJ1gnLFxuICAn0KwnOiAnQicsXG4gICfQrSc6ICczJyxcbiAgJ9CuJzogJ1gnLFxuICAn0K8nOiAnUicsXG4gICfQsCc6ICdhJyxcbiAgJ9CxJzogJ2InLFxuICAn0LInOiAnYScsXG4gICfQsyc6ICdyJyxcbiAgJ9C0JzogJ3knLFxuICAn0LUnOiAnZScsXG4gICfQtic6ICdtJyxcbiAgJ9C3JzogJ2UnLFxuICAn0LgnOiAnbicsXG4gICfQuSc6ICduJyxcbiAgJ9C6JzogJ24nLFxuICAn0LsnOiAnbicsXG4gICfQvCc6ICdtJyxcbiAgJ9C9JzogJ24nLFxuICAn0L4nOiAnbycsXG4gICfQvyc6ICduJyxcbiAgJ9GAJzogJ3AnLFxuICAn0YEnOiAnYycsXG4gICfRgic6ICdvJyxcbiAgJ9GDJzogJ3knLFxuICAn0YQnOiAnYicsXG4gICfRhSc6ICd4JyxcbiAgJ9GGJzogJ24nLFxuICAn0YcnOiAnbicsXG4gICfRiCc6ICd3JyxcbiAgJ9GJJzogJ3cnLFxuICAn0YonOiAnYScsXG4gICfRiyc6ICdtJyxcbiAgJ9GMJzogJ2EnLFxuICAn0Y0nOiAnZScsXG4gICfRjic6ICdtJyxcbiAgJ9GPJzogJ3InXG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gYWRkcyBuZXcgZm9udCBtZXRyaWNzIHRvIGRlZmF1bHQgbWV0cmljTWFwXG4gKiBJdCBjYW4gYWxzbyBvdmVycmlkZSBleGlzdGluZyBtZXRyaWNzXG4gKi9cbmZ1bmN0aW9uIHNldEZvbnRNZXRyaWNzKGZvbnROYW1lLCBtZXRyaWNzKSB7XG4gIGZvbnRNZXRyaWNzRGF0YVtmb250TmFtZV0gPSBtZXRyaWNzO1xufVxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGxvb2tpbmcgdXAgaW5mb3JtYXRpb24gaW4gdGhlXG4gKiBtZXRyaWNNYXAgdGFibGUuIEl0IHRha2VzIGEgY2hhcmFjdGVyIGFzIGEgc3RyaW5nLCBhbmQgYSBmb250LlxuICpcbiAqIE5vdGU6IHRoZSBgd2lkdGhgIHByb3BlcnR5IG1heSBiZSB1bmRlZmluZWQgaWYgZm9udE1ldHJpY3NEYXRhLmpzIHdhc24ndFxuICogYnVpbHQgdXNpbmcgYE1ha2UgZXh0ZW5kZWRfbWV0cmljc2AuXG4gKi9cblxuZnVuY3Rpb24gZ2V0Q2hhcmFjdGVyTWV0cmljcyhjaGFyYWN0ZXIsIGZvbnQsIG1vZGUpIHtcbiAgaWYgKCFmb250TWV0cmljc0RhdGFbZm9udF0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJGb250IG1ldHJpY3Mgbm90IGZvdW5kIGZvciBmb250OiBcIiArIGZvbnQgKyBcIi5cIik7XG4gIH1cblxuICB2YXIgY2ggPSBjaGFyYWN0ZXIuY2hhckNvZGVBdCgwKTtcbiAgdmFyIG1ldHJpY3MgPSBmb250TWV0cmljc0RhdGFbZm9udF1bY2hdO1xuXG4gIGlmICghbWV0cmljcyAmJiBjaGFyYWN0ZXJbMF0gaW4gZXh0cmFDaGFyYWN0ZXJNYXApIHtcbiAgICBjaCA9IGV4dHJhQ2hhcmFjdGVyTWFwW2NoYXJhY3RlclswXV0uY2hhckNvZGVBdCgwKTtcbiAgICBtZXRyaWNzID0gZm9udE1ldHJpY3NEYXRhW2ZvbnRdW2NoXTtcbiAgfVxuXG4gIGlmICghbWV0cmljcyAmJiBtb2RlID09PSAndGV4dCcpIHtcbiAgICAvLyBXZSBkb24ndCB0eXBpY2FsbHkgaGF2ZSBmb250IG1ldHJpY3MgZm9yIEFzaWFuIHNjcmlwdHMuXG4gICAgLy8gQnV0IHNpbmNlIHdlIHN1cHBvcnQgdGhlbSBpbiB0ZXh0IG1vZGUsIHdlIG5lZWQgdG8gcmV0dXJuXG4gICAgLy8gc29tZSBzb3J0IG9mIG1ldHJpY3MuXG4gICAgLy8gU28gaWYgdGhlIGNoYXJhY3RlciBpcyBpbiBhIHNjcmlwdCB3ZSBzdXBwb3J0IGJ1dCB3ZVxuICAgIC8vIGRvbid0IGhhdmUgbWV0cmljcyBmb3IgaXQsIGp1c3QgdXNlIHRoZSBtZXRyaWNzIGZvclxuICAgIC8vIHRoZSBMYXRpbiBjYXBpdGFsIGxldHRlciBNLiBUaGlzIGlzIGNsb3NlIGVub3VnaCBiZWNhdXNlXG4gICAgLy8gd2UgKGN1cnJlbnRseSkgb25seSBjYXJlIGFib3V0IHRoZSBoZWlnaHQgb2YgdGhlIGdscHloXG4gICAgLy8gbm90IGl0cyB3aWR0aC5cbiAgICBpZiAoc3VwcG9ydGVkQ29kZXBvaW50KGNoKSkge1xuICAgICAgbWV0cmljcyA9IGZvbnRNZXRyaWNzRGF0YVtmb250XVs3N107IC8vIDc3IGlzIHRoZSBjaGFyY29kZSBmb3IgJ00nXG4gICAgfVxuICB9XG5cbiAgaWYgKG1ldHJpY3MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGVwdGg6IG1ldHJpY3NbMF0sXG4gICAgICBoZWlnaHQ6IG1ldHJpY3NbMV0sXG4gICAgICBpdGFsaWM6IG1ldHJpY3NbMl0sXG4gICAgICBza2V3OiBtZXRyaWNzWzNdLFxuICAgICAgd2lkdGg6IG1ldHJpY3NbNF1cbiAgICB9O1xuICB9XG59XG52YXIgZm9udE1ldHJpY3NCeVNpemVJbmRleCA9IHt9O1xuLyoqXG4gKiBHZXQgdGhlIGZvbnQgbWV0cmljcyBmb3IgYSBnaXZlbiBzaXplLlxuICovXG5cbmZ1bmN0aW9uIGdldEdsb2JhbE1ldHJpY3Moc2l6ZSkge1xuICB2YXIgc2l6ZUluZGV4O1xuXG4gIGlmIChzaXplID49IDUpIHtcbiAgICBzaXplSW5kZXggPSAwO1xuICB9IGVsc2UgaWYgKHNpemUgPj0gMykge1xuICAgIHNpemVJbmRleCA9IDE7XG4gIH0gZWxzZSB7XG4gICAgc2l6ZUluZGV4ID0gMjtcbiAgfVxuXG4gIGlmICghZm9udE1ldHJpY3NCeVNpemVJbmRleFtzaXplSW5kZXhdKSB7XG4gICAgdmFyIG1ldHJpY3MgPSBmb250TWV0cmljc0J5U2l6ZUluZGV4W3NpemVJbmRleF0gPSB7XG4gICAgICBjc3NFbVBlck11OiBzaWdtYXNBbmRYaXMucXVhZFtzaXplSW5kZXhdIC8gMThcbiAgICB9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIHNpZ21hc0FuZFhpcykge1xuICAgICAgaWYgKHNpZ21hc0FuZFhpcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIG1ldHJpY3Nba2V5XSA9IHNpZ21hc0FuZFhpc1trZXldW3NpemVJbmRleF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZvbnRNZXRyaWNzQnlTaXplSW5kZXhbc2l6ZUluZGV4XTtcbn1cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3N5bWJvbHMuanNcbi8qKlxuICogVGhpcyBmaWxlIGhvbGRzIGEgbGlzdCBvZiBhbGwgbm8tYXJndW1lbnQgZnVuY3Rpb25zIGFuZCBzaW5nbGUtY2hhcmFjdGVyXG4gKiBzeW1ib2xzIChsaWtlICdhJyBvciAnOycpLlxuICpcbiAqIEZvciBlYWNoIG9mIHRoZSBzeW1ib2xzLCB0aGVyZSBhcmUgdGhyZWUgcHJvcGVydGllcyB0aGV5IGNhbiBoYXZlOlxuICogLSBmb250IChyZXF1aXJlZCk6IHRoZSBmb250IHRvIGJlIHVzZWQgZm9yIHRoaXMgc3ltYm9sLiBFaXRoZXIgXCJtYWluXCIgKHRoZVxuICAgICBub3JtYWwgZm9udCksIG9yIFwiYW1zXCIgKHRoZSBhbXMgZm9udHMpLlxuICogLSBncm91cCAocmVxdWlyZWQpOiB0aGUgUGFyc2VOb2RlIGdyb3VwIHR5cGUgdGhlIHN5bWJvbCBzaG91bGQgaGF2ZSAoaS5lLlxuICAgICBcInRleHRvcmRcIiwgXCJtYXRob3JkXCIsIGV0YykuXG4gICAgIFNlZSBodHRwczovL2dpdGh1Yi5jb20vS2FUZVgvS2FUZVgvd2lraS9FeGFtaW5pbmctVGVYI2dyb3VwLXR5cGVzXG4gKiAtIHJlcGxhY2U6IHRoZSBjaGFyYWN0ZXIgdGhhdCB0aGlzIHN5bWJvbCBvciBmdW5jdGlvbiBzaG91bGQgYmVcbiAqICAgcmVwbGFjZWQgd2l0aCAoaS5lLiBcIlxccGhpXCIgaGFzIGEgcmVwbGFjZSB2YWx1ZSBvZiBcIlxcdTAzZDVcIiwgdGhlIHBoaVxuICogICBjaGFyYWN0ZXIgaW4gdGhlIG1haW4gZm9udCkuXG4gKlxuICogVGhlIG91dGVybW9zdCBtYXAgaW4gdGhlIHRhYmxlIGluZGljYXRlcyB3aGF0IG1vZGUgdGhlIHN5bWJvbHMgc2hvdWxkIGJlXG4gKiBhY2NlcHRlZCBpbiAoZS5nLiBcIm1hdGhcIiBvciBcInRleHRcIikuXG4gKi9cbi8vIFNvbWUgb2YgdGhlc2UgaGF2ZSBhIFwiLXRva2VuXCIgc3VmZml4IHNpbmNlIHRoZXNlIGFyZSBhbHNvIHVzZWQgYXMgYFBhcnNlTm9kZWBcbi8vIHR5cGVzIGZvciByYXcgdGV4dCB0b2tlbnMsIGFuZCB3ZSB3YW50IHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIGhpZ2hlci1sZXZlbFxuLy8gYFBhcnNlTm9kZWAgdHlwZXMuIFRoZXNlIGBQYXJzZU5vZGVgcyBhcmUgY29uc3RydWN0ZWQgd2l0aGluIGBQYXJzZXJgIGJ5XG4vLyBsb29raW5nIHVwIHRoZSBgc3ltYm9sc2AgbWFwLlxudmFyIEFUT01TID0ge1xuICBcImJpblwiOiAxLFxuICBcImNsb3NlXCI6IDEsXG4gIFwiaW5uZXJcIjogMSxcbiAgXCJvcGVuXCI6IDEsXG4gIFwicHVuY3RcIjogMSxcbiAgXCJyZWxcIjogMVxufTtcbnZhciBOT05fQVRPTVMgPSB7XG4gIFwiYWNjZW50LXRva2VuXCI6IDEsXG4gIFwibWF0aG9yZFwiOiAxLFxuICBcIm9wLXRva2VuXCI6IDEsXG4gIFwic3BhY2luZ1wiOiAxLFxuICBcInRleHRvcmRcIjogMVxufTtcbnZhciBzeW1ib2xzID0ge1xuICBcIm1hdGhcIjoge30sXG4gIFwidGV4dFwiOiB7fVxufTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19zeW1ib2xzID0gKHN5bWJvbHMpO1xuLyoqIGBhY2NlcHRVbmljb2RlQ2hhciA9IHRydWVgIGlzIG9ubHkgYXBwbGljYWJsZSBpZiBgcmVwbGFjZWAgaXMgc2V0LiAqL1xuXG5mdW5jdGlvbiBkZWZpbmVTeW1ib2wobW9kZSwgZm9udCwgZ3JvdXAsIHJlcGxhY2UsIG5hbWUsIGFjY2VwdFVuaWNvZGVDaGFyKSB7XG4gIHN5bWJvbHNbbW9kZV1bbmFtZV0gPSB7XG4gICAgZm9udDogZm9udCxcbiAgICBncm91cDogZ3JvdXAsXG4gICAgcmVwbGFjZTogcmVwbGFjZVxuICB9O1xuXG4gIGlmIChhY2NlcHRVbmljb2RlQ2hhciAmJiByZXBsYWNlKSB7XG4gICAgc3ltYm9sc1ttb2RlXVtyZXBsYWNlXSA9IHN5bWJvbHNbbW9kZV1bbmFtZV07XG4gIH1cbn0gLy8gU29tZSBhYmJyZXZpYXRpb25zIGZvciBjb21tb25seSB1c2VkIHN0cmluZ3MuXG4vLyBUaGlzIGhlbHBzIG1pbmlmeSB0aGUgY29kZSwgYW5kIGFsc28gc3BvdHRpbmcgdHlwb3MgdXNpbmcganNoaW50LlxuLy8gbW9kZXM6XG5cbnZhciBzeW1ib2xzX21hdGggPSBcIm1hdGhcIjtcbnZhciBzeW1ib2xzX3RleHQgPSBcInRleHRcIjsgLy8gZm9udHM6XG5cbnZhciBtYWluID0gXCJtYWluXCI7XG52YXIgYW1zID0gXCJhbXNcIjsgLy8gZ3JvdXBzOlxuXG52YXIgc3ltYm9sc19hY2NlbnQgPSBcImFjY2VudC10b2tlblwiO1xudmFyIGJpbiA9IFwiYmluXCI7XG52YXIgc3ltYm9sc19jbG9zZSA9IFwiY2xvc2VcIjtcbnZhciBzeW1ib2xzX2lubmVyID0gXCJpbm5lclwiO1xudmFyIG1hdGhvcmQgPSBcIm1hdGhvcmRcIjtcbnZhciBvcCA9IFwib3AtdG9rZW5cIjtcbnZhciBzeW1ib2xzX29wZW4gPSBcIm9wZW5cIjtcbnZhciBwdW5jdCA9IFwicHVuY3RcIjtcbnZhciByZWwgPSBcInJlbFwiO1xudmFyIHN5bWJvbHNfc3BhY2luZyA9IFwic3BhY2luZ1wiO1xudmFyIHN5bWJvbHNfdGV4dG9yZCA9IFwidGV4dG9yZFwiOyAvLyBOb3cgY29tZXMgdGhlIHN5bWJvbCB0YWJsZVxuLy8gUmVsYXRpb24gU3ltYm9sc1xuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjI2MVwiLCBcIlxcXFxlcXVpdlwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjdBXCIsIFwiXFxcXHByZWNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjI3QlwiLCBcIlxcXFxzdWNjXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyM0NcIiwgXCJcXFxcc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyQTVcIiwgXCJcXFxccGVycFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyQUFGXCIsIFwiXFxcXHByZWNlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyQUIwXCIsIFwiXFxcXHN1Y2NlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjQzXCIsIFwiXFxcXHNpbWVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyMjNcIiwgXCJcXFxcbWlkXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNkFcIiwgXCJcXFxcbGxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjI2QlwiLCBcIlxcXFxnZ1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjREXCIsIFwiXFxcXGFzeW1wXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyMjVcIiwgXCJcXFxccGFyYWxsZWxcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjJDOFwiLCBcIlxcXFxib3d0aWVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjMyM1wiLCBcIlxcXFxzbWlsZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjkxXCIsIFwiXFxcXHNxc3Vic2V0ZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjI5MlwiLCBcIlxcXFxzcXN1cHNldGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNTBcIiwgXCJcXFxcZG90ZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjMyMlwiLCBcIlxcXFxmcm93blwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjBCXCIsIFwiXFxcXG5pXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyMURcIiwgXCJcXFxccHJvcHRvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyQTJcIiwgXCJcXFxcdmRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjJBM1wiLCBcIlxcXFxkYXNodlwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjBCXCIsIFwiXFxcXG93bnNcIik7IC8vIFB1bmN0dWF0aW9uXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHB1bmN0LCBcIi5cIiwgXCJcXFxcbGRvdHBcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBwdW5jdCwgXCJcXHUyMkM1XCIsIFwiXFxcXGNkb3RwXCIpOyAvLyBNaXNjIFN5bWJvbHNcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIiNcIiwgXCJcXFxcI1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCIjXCIsIFwiXFxcXCNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiJlwiLCBcIlxcXFwmXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIiZcIiwgXCJcXFxcJlwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTM1XCIsIFwiXFxcXGFsZXBoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyMDBcIiwgXCJcXFxcZm9yYWxsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIxMEZcIiwgXCJcXFxcaGJhclwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjAzXCIsIFwiXFxcXGV4aXN0c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjA3XCIsIFwiXFxcXG5hYmxhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTI2NkRcIiwgXCJcXFxcZmxhdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTEzXCIsIFwiXFxcXGVsbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyNjZFXCIsIFwiXFxcXG5hdHVyYWxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjY2M1wiLCBcIlxcXFxjbHVic3VpdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTE4XCIsIFwiXFxcXHdwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTI2NkZcIiwgXCJcXFxcc2hhcnBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjY2MlwiLCBcIlxcXFxkaWFtb25kc3VpdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTFDXCIsIFwiXFxcXFJlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTI2NjFcIiwgXCJcXFxcaGVhcnRzdWl0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIxMTFcIiwgXCJcXFxcSW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjY2MFwiLCBcIlxcXFxzcGFkZXN1aXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4QTdcIiwgXCJcXFxcU1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHhCNlwiLCBcIlxcXFxQXCIsIHRydWUpOyAvLyBNYXRoIGFuZCBUZXh0XG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDIwXCIsIFwiXFxcXGRhZ1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDIwXCIsIFwiXFxcXGRhZ1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDIwXCIsIFwiXFxcXHRleHRkYWdnZXJcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjAyMVwiLCBcIlxcXFxkZGFnXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMjFcIiwgXCJcXFxcZGRhZ1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDIxXCIsIFwiXFxcXHRleHRkYWdnZXJkYmxcIik7IC8vIExhcmdlIERlbGltaXRlcnNcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19jbG9zZSwgXCJcXHUyM0IxXCIsIFwiXFxcXHJtb3VzdGFjaGVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX29wZW4sIFwiXFx1MjNCMFwiLCBcIlxcXFxsbW91c3RhY2hlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19jbG9zZSwgXCJcXHUyN0VGXCIsIFwiXFxcXHJncm91cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCJcXHUyN0VFXCIsIFwiXFxcXGxncm91cFwiLCB0cnVlKTsgLy8gQmluYXJ5IE9wZXJhdG9yc1xuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxM1wiLCBcIlxcXFxtcFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjk2XCIsIFwiXFxcXG9taW51c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjhFXCIsIFwiXFxcXHVwbHVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOTNcIiwgXCJcXFxcc3FjYXBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxN1wiLCBcIlxcXFxhc3RcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjI5NFwiLCBcIlxcXFxzcWN1cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyNUVGXCIsIFwiXFxcXGJpZ2NpcmNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxOVwiLCBcIlxcXFxidWxsZXRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjAyMVwiLCBcIlxcXFxkZGFnZ2VyXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyNDBcIiwgXCJcXFxcd3JcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MkEzRlwiLCBcIlxcXFxhbWFsZ1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCImXCIsIFwiXFxcXEFuZFwiKTsgLy8gZnJvbSBhbXNtYXRoXG4vLyBBcnJvdyBTeW1ib2xzXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyN0Y1XCIsIFwiXFxcXGxvbmdsZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjFEMFwiLCBcIlxcXFxMZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjdGOFwiLCBcIlxcXFxMb25nbGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTI3RjZcIiwgXCJcXFxcbG9uZ3JpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjFEMlwiLCBcIlxcXFxSaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTI3RjlcIiwgXCJcXFxcTG9uZ3JpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5NFwiLCBcIlxcXFxsZWZ0cmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyN0Y3XCIsIFwiXFxcXGxvbmdsZWZ0cmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMUQ0XCIsIFwiXFxcXExlZnRyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTI3RkFcIiwgXCJcXFxcTG9uZ2xlZnRyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxQTZcIiwgXCJcXFxcbWFwc3RvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTI3RkNcIiwgXCJcXFxcbG9uZ21hcHN0b1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTk3XCIsIFwiXFxcXG5lYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjFBOVwiLCBcIlxcXFxob29rbGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxQUFcIiwgXCJcXFxcaG9va3JpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5OFwiLCBcIlxcXFxzZWFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxQkNcIiwgXCJcXFxcbGVmdGhhcnBvb251cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMUMwXCIsIFwiXFxcXHJpZ2h0aGFycG9vbnVwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTlcIiwgXCJcXFxcc3dhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMUJEXCIsIFwiXFxcXGxlZnRoYXJwb29uZG93blwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMUMxXCIsIFwiXFxcXHJpZ2h0aGFycG9vbmRvd25cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5NlwiLCBcIlxcXFxud2Fycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxQ0NcIiwgXCJcXFxccmlnaHRsZWZ0aGFycG9vbnNcIiwgdHJ1ZSk7IC8vIEFNUyBOZWdhdGVkIEJpbmFyeSBSZWxhdGlvbnNcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI2RVwiLCBcIlxcXFxubGVzc1wiLCB0cnVlKTsgLy8gU3ltYm9sIG5hbWVzIHByZWNlZWRlZCBieSBcIkBcIiBlYWNoIGhhdmUgYSBjb3JyZXNwb25kaW5nIG1hY3JvLlxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHVFMDEwXCIsIFwiXFxcXEBubGVxc2xhbnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHVFMDExXCIsIFwiXFxcXEBubGVxcVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTJBODdcIiwgXCJcXFxcbG5lcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNjhcIiwgXCJcXFxcbG5lcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHVFMDBDXCIsIFwiXFxcXEBsdmVydG5lcXFcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkU2XCIsIFwiXFxcXGxuc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MkE4OVwiLCBcIlxcXFxsbmFwcHJveFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyODBcIiwgXCJcXFxcbnByZWNcIiwgdHJ1ZSk7IC8vIHVuaWNvZGUtbWF0aCBtYXBzIFxcdTIyZTAgdG8gXFxucHJlY2N1cmx5ZXEuIFdlJ2xsIHVzZSB0aGUgQU1TIHN5bm9ueW0uXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyRTBcIiwgXCJcXFxcbnByZWNlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyRThcIiwgXCJcXFxccHJlY25zaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQUI5XCIsIFwiXFxcXHByZWNuYXBwcm94XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0MVwiLCBcIlxcXFxuc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1RTAwNlwiLCBcIlxcXFxAbnNob3J0bWlkXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjIyNFwiLCBcIlxcXFxubWlkXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJBQ1wiLCBcIlxcXFxudmRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkFEXCIsIFwiXFxcXG52RGFzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyRUFcIiwgXCJcXFxcbnRyaWFuZ2xlbGVmdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyRUNcIiwgXCJcXFxcbnRyaWFuZ2xlbGVmdGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI4QVwiLCBcIlxcXFxzdWJzZXRuZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHVFMDFBXCIsIFwiXFxcXEB2YXJzdWJzZXRuZXFcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQUNCXCIsIFwiXFxcXHN1YnNldG5lcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHVFMDE3XCIsIFwiXFxcXEB2YXJzdWJzZXRuZXFxXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI2RlwiLCBcIlxcXFxuZ3RyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1RTAwRlwiLCBcIlxcXFxAbmdlcXNsYW50XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1RTAwRVwiLCBcIlxcXFxAbmdlcXFcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQTg4XCIsIFwiXFxcXGduZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjY5XCIsIFwiXFxcXGduZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1RTAwRFwiLCBcIlxcXFxAZ3ZlcnRuZXFxXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJFN1wiLCBcIlxcXFxnbnNpbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTJBOEFcIiwgXCJcXFxcZ25hcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjgxXCIsIFwiXFxcXG5zdWNjXCIsIHRydWUpOyAvLyB1bmljb2RlLW1hdGggbWFwcyBcXHUyMmUxIHRvIFxcbnN1Y2NjdXJseWVxLiBXZSdsbCB1c2UgdGhlIEFNUyBzeW5vbnltLlxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkUxXCIsIFwiXFxcXG5zdWNjZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkU5XCIsIFwiXFxcXHN1Y2Nuc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MkFCQVwiLCBcIlxcXFxzdWNjbmFwcHJveFwiLCB0cnVlKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgXFx1MjI0NiB0byBcXHNpbW5lcXEuIFdlJ2xsIHVzZSB0aGUgQU1TIHN5bm9ueW0uXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNDZcIiwgXCJcXFxcbmNvbmdcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHVFMDA3XCIsIFwiXFxcXEBuc2hvcnRwYXJhbGxlbFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyMjZcIiwgXCJcXFxcbnBhcmFsbGVsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJBRlwiLCBcIlxcXFxuVkRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkVCXCIsIFwiXFxcXG50cmlhbmdsZXJpZ2h0XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJFRFwiLCBcIlxcXFxudHJpYW5nbGVyaWdodGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1RTAxOFwiLCBcIlxcXFxAbnN1cHNldGVxcVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyOEJcIiwgXCJcXFxcc3Vwc2V0bmVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1RTAxQlwiLCBcIlxcXFxAdmFyc3Vwc2V0bmVxXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MkFDQ1wiLCBcIlxcXFxzdXBzZXRuZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1RTAxOVwiLCBcIlxcXFxAdmFyc3Vwc2V0bmVxcVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyQUVcIiwgXCJcXFxcblZkYXNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MkFCNVwiLCBcIlxcXFxwcmVjbmVxcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTJBQjZcIiwgXCJcXFxcc3VjY25lcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHVFMDE2XCIsIFwiXFxcXEBuc3Vic2V0ZXFxXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJCNFwiLCBcIlxcXFx1bmxoZFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyQjVcIiwgXCJcXFxcdW5yaGRcIik7IC8vIEFNUyBOZWdhdGVkIEFycm93c1xuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMTlBXCIsIFwiXFxcXG5sZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMTlCXCIsIFwiXFxcXG5yaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDRFwiLCBcIlxcXFxuTGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDRlwiLCBcIlxcXFxuUmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQUVcIiwgXCJcXFxcbmxlZnRyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDRVwiLCBcIlxcXFxuTGVmdHJpZ2h0YXJyb3dcIiwgdHJ1ZSk7IC8vIEFNUyBNaXNjXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTI1QjNcIiwgXCJcXFxcdmFydHJpYW5nbGVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTBGXCIsIFwiXFxcXGhzbGFzaFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTI1QkRcIiwgXCJcXFxcdHJpYW5nbGVkb3duXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjVDQVwiLCBcIlxcXFxsb3plbmdlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjRDOFwiLCBcIlxcXFxjaXJjbGVkU1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxceEFFXCIsIFwiXFxcXGNpcmNsZWRSXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4QUVcIiwgXCJcXFxcY2lyY2xlZFJcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjIxXCIsIFwiXFxcXG1lYXN1cmVkYW5nbGVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjA0XCIsIFwiXFxcXG5leGlzdHNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTI3XCIsIFwiXFxcXG1ob1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIxMzJcIiwgXCJcXFxcRmludlwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIxNDFcIiwgXCJcXFxcR2FtZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMzVcIiwgXCJcXFxcYmFja3ByaW1lXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjVCMlwiLCBcIlxcXFxibGFja3RyaWFuZ2xlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjVCQ1wiLCBcIlxcXFxibGFja3RyaWFuZ2xlZG93blwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTI1QTBcIiwgXCJcXFxcYmxhY2tzcXVhcmVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyOUVCXCIsIFwiXFxcXGJsYWNrbG96ZW5nZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTI2MDVcIiwgXCJcXFxcYmlnc3RhclwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyMjJcIiwgXCJcXFxcc3BoZXJpY2FsYW5nbGVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjAxXCIsIFwiXFxcXGNvbXBsZW1lbnRcIiwgdHJ1ZSk7IC8vIHVuaWNvZGUtbWF0aCBtYXBzIFUrRjAgKMOwKSB0byBcXG1hdGhldGguIFdlIG1hcCB0byBBTVMgZnVuY3Rpb24gXFxldGhcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4RjBcIiwgXCJcXFxcZXRoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjU3MVwiLCBcIlxcXFxkaWFndXBcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyNTcyXCIsIFwiXFxcXGRpYWdkb3duXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjVBMVwiLCBcIlxcXFxzcXVhcmVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyNUExXCIsIFwiXFxcXEJveFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTI1Q0FcIiwgXCJcXFxcRGlhbW9uZFwiKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgVStBNSB0byBcXG1hdGh5ZW4uIFdlIG1hcCB0byBBTVMgZnVuY3Rpb24gXFx5ZW5cblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4QTVcIiwgXCJcXFxceWVuXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4QTVcIiwgXCJcXFxceWVuXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjcxM1wiLCBcIlxcXFxjaGVja21hcmtcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyNzEzXCIsIFwiXFxcXGNoZWNrbWFya1wiKTsgLy8gQU1TIEhlYnJld1xuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTM2XCIsIFwiXFxcXGJldGhcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMTM4XCIsIFwiXFxcXGRhbGV0aFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIxMzdcIiwgXCJcXFxcZ2ltZWxcIiwgdHJ1ZSk7IC8vIEFNUyBHcmVla1xuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwM0REXCIsIFwiXFxcXGRpZ2FtbWFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwM0YwXCIsIFwiXFxcXHZhcmthcHBhXCIpOyAvLyBBTVMgRGVsaW1pdGVyc1xuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfb3BlbiwgXCJcXHUyNTBDXCIsIFwiXFxcXHVsY29ybmVyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX2Nsb3NlLCBcIlxcdTI1MTBcIiwgXCJcXFxcdXJjb3JuZXJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfb3BlbiwgXCJcXHUyNTE0XCIsIFwiXFxcXGxsY29ybmVyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX2Nsb3NlLCBcIlxcdTI1MThcIiwgXCJcXFxcbHJjb3JuZXJcIiwgdHJ1ZSk7IC8vIEFNUyBCaW5hcnkgUmVsYXRpb25zXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNjZcIiwgXCJcXFxcbGVxcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTJBN0RcIiwgXCJcXFxcbGVxc2xhbnRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQTk1XCIsIFwiXFxcXGVxc2xhbnRsZXNzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3MlwiLCBcIlxcXFxsZXNzc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MkE4NVwiLCBcIlxcXFxsZXNzYXBwcm94XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0QVwiLCBcIlxcXFxhcHByb3hlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyRDZcIiwgXCJcXFxcbGVzc2RvdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyRDhcIiwgXCJcXFxcbGxsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3NlwiLCBcIlxcXFxsZXNzZ3RyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJEQVwiLCBcIlxcXFxsZXNzZXFndHJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQThCXCIsIFwiXFxcXGxlc3NlcXFndHJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjUxXCIsIFwiXFxcXGRvdGVxZG90XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI1M1wiLCBcIlxcXFxyaXNpbmdkb3RzZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjUyXCIsIFwiXFxcXGZhbGxpbmdkb3RzZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjNEXCIsIFwiXFxcXGJhY2tzaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkNEXCIsIFwiXFxcXGJhY2tzaW1lcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTJBQzVcIiwgXCJcXFxcc3Vic2V0ZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJEMFwiLCBcIlxcXFxTdWJzZXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjhGXCIsIFwiXFxcXHNxc3Vic2V0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3Q1wiLCBcIlxcXFxwcmVjY3VybHllcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyREVcIiwgXCJcXFxcY3VybHllcXByZWNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjdFXCIsIFwiXFxcXHByZWNzaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQUI3XCIsIFwiXFxcXHByZWNhcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkIyXCIsIFwiXFxcXHZhcnRyaWFuZ2xlbGVmdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyQjRcIiwgXCJcXFxcdHJpYW5nbGVsZWZ0ZXFcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkE4XCIsIFwiXFxcXHZEYXNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJBQVwiLCBcIlxcXFxWdmRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMzIzXCIsIFwiXFxcXHNtYWxsc21pbGVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMzIyXCIsIFwiXFxcXHNtYWxsZnJvd25cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjRGXCIsIFwiXFxcXGJ1bXBlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNEVcIiwgXCJcXFxcQnVtcGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI2N1wiLCBcIlxcXFxnZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MkE3RVwiLCBcIlxcXFxnZXFzbGFudFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTJBOTZcIiwgXCJcXFxcZXFzbGFudGd0clwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNzNcIiwgXCJcXFxcZ3Ryc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MkE4NlwiLCBcIlxcXFxndHJhcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkQ3XCIsIFwiXFxcXGd0cmRvdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyRDlcIiwgXCJcXFxcZ2dnXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3N1wiLCBcIlxcXFxndHJsZXNzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJEQlwiLCBcIlxcXFxndHJlcWxlc3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQThDXCIsIFwiXFxcXGd0cmVxcWxlc3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjU2XCIsIFwiXFxcXGVxY2lyY1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNTdcIiwgXCJcXFxcY2lyY2VxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI1Q1wiLCBcIlxcXFx0cmlhbmdsZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjNDXCIsIFwiXFxcXHRoaWNrc2ltXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0OFwiLCBcIlxcXFx0aGlja2FwcHJveFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTJBQzZcIiwgXCJcXFxcc3Vwc2V0ZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJEMVwiLCBcIlxcXFxTdXBzZXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjkwXCIsIFwiXFxcXHNxc3Vwc2V0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3RFwiLCBcIlxcXFxzdWNjY3VybHllcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyREZcIiwgXCJcXFxcY3VybHllcXN1Y2NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjdGXCIsIFwiXFxcXHN1Y2NzaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyQUI4XCIsIFwiXFxcXHN1Y2NhcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkIzXCIsIFwiXFxcXHZhcnRyaWFuZ2xlcmlnaHRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkI1XCIsIFwiXFxcXHRyaWFuZ2xlcmlnaHRlcVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyQTlcIiwgXCJcXFxcVmRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjIzXCIsIFwiXFxcXHNob3J0bWlkXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjIyNVwiLCBcIlxcXFxzaG9ydHBhcmFsbGVsXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI2Q1wiLCBcIlxcXFxiZXR3ZWVuXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjJENFwiLCBcIlxcXFxwaXRjaGZvcmtcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjFEXCIsIFwiXFxcXHZhcnByb3B0b1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTI1QzBcIiwgXCJcXFxcYmxhY2t0cmlhbmdsZWxlZnRcIik7IC8vIHVuaWNvZGUtbWF0aCBzYXlzIHRoYXQgXFx0aGVyZWZvcmUgaXMgYSBtYXRob3JkIGF0b20uXG4vLyBXZSBrZXB0IHRoZSBhbXNzeW1iIGF0b20gdHlwZSwgd2hpY2ggaXMgcmVsLlxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjM0XCIsIFwiXFxcXHRoZXJlZm9yZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyMERcIiwgXCJcXFxcYmFja2Vwc2lsb25cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyNUI2XCIsIFwiXFxcXGJsYWNrdHJpYW5nbGVyaWdodFwiKTsgLy8gdW5pY29kZS1tYXRoIHNheXMgdGhhdCBcXGJlY2F1c2UgaXMgYSBtYXRob3JkIGF0b20uXG4vLyBXZSBrZXB0IHRoZSBhbXNzeW1iIGF0b20gdHlwZSwgd2hpY2ggaXMgcmVsLlxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjM1XCIsIFwiXFxcXGJlY2F1c2VcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkQ4XCIsIFwiXFxcXGxsbGVzc1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyRDlcIiwgXCJcXFxcZ2dndHJcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkIyXCIsIFwiXFxcXGxoZFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyQjNcIiwgXCJcXFxccmhkXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0MlwiLCBcIlxcXFxlcXNpbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMkM4XCIsIFwiXFxcXEpvaW5cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjUxXCIsIFwiXFxcXERvdGVxXCIsIHRydWUpOyAvLyBBTVMgQmluYXJ5IE9wZXJhdG9yc1xuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjE0XCIsIFwiXFxcXGRvdHBsdXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjE2XCIsIFwiXFxcXHNtYWxsc2V0bWludXNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkQyXCIsIFwiXFxcXENhcFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyRDNcIiwgXCJcXFxcQ3VwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBiaW4sIFwiXFx1MkE1RVwiLCBcIlxcXFxkb3VibGViYXJ3ZWRnZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyOUZcIiwgXCJcXFxcYm94bWludXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjlFXCIsIFwiXFxcXGJveHBsdXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkM3XCIsIFwiXFxcXGRpdmlkZW9udGltZXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkM5XCIsIFwiXFxcXGx0aW1lc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyQ0FcIiwgXCJcXFxccnRpbWVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJDQlwiLCBcIlxcXFxsZWZ0dGhyZWV0aW1lc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyQ0NcIiwgXCJcXFxccmlnaHR0aHJlZXRpbWVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJDRlwiLCBcIlxcXFxjdXJseXdlZGdlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJDRVwiLCBcIlxcXFxjdXJseXZlZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyOURcIiwgXCJcXFxcY2lyY2xlZGRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjlCXCIsIFwiXFxcXGNpcmNsZWRhc3RcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkM1XCIsIFwiXFxcXGNlbnRlcmRvdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyQkFcIiwgXCJcXFxcaW50ZXJjYWxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkQyXCIsIFwiXFxcXGRvdWJsZWNhcFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyRDNcIiwgXCJcXFxcZG91YmxlY3VwXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJBMFwiLCBcIlxcXFxib3h0aW1lc1wiLCB0cnVlKTsgLy8gQU1TIEFycm93c1xuLy8gTm90ZTogdW5pY29kZS1tYXRoIG1hcHMgXFx1MjFlMiB0byB0aGVpciBvd24gZnVuY3Rpb24gXFxyaWdodGRhc2hhcnJvdy5cbi8vIFdlJ2xsIG1hcCBpdCB0byBBTVMgZnVuY3Rpb24gXFxkYXNocmlnaHRhcnJvdy4gSXQgcHJvZHVjZXMgdGhlIHNhbWUgYXRvbS5cblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFFMlwiLCBcIlxcXFxkYXNocmlnaHRhcnJvd1wiLCB0cnVlKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgXFx1MjFlMCB0byBcXGxlZnRkYXNoYXJyb3cuIFdlJ2xsIHVzZSB0aGUgQU1TIHN5bm9ueW0uXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxRTBcIiwgXCJcXFxcZGFzaGxlZnRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQzdcIiwgXCJcXFxcbGVmdGxlZnRhcnJvd3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUM2XCIsIFwiXFxcXGxlZnRyaWdodGFycm93c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxREFcIiwgXCJcXFxcTGxlZnRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxOUVcIiwgXCJcXFxcdHdvaGVhZGxlZnRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQTJcIiwgXCJcXFxcbGVmdGFycm93dGFpbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQUJcIiwgXCJcXFxcbG9vcGFycm93bGVmdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQ0JcIiwgXCJcXFxcbGVmdHJpZ2h0aGFycG9vbnNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUI2XCIsIFwiXFxcXGN1cnZlYXJyb3dsZWZ0XCIsIHRydWUpOyAvLyB1bmljb2RlLW1hdGggbWFwcyBcXHUyMWJhIHRvIFxcYWN3b3BlbmNpcmNsZWFycm93LiBXZSdsbCB1c2UgdGhlIEFNUyBzeW5vbnltLlxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUJBXCIsIFwiXFxcXGNpcmNsZWFycm93bGVmdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQjBcIiwgXCJcXFxcTHNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDOFwiLCBcIlxcXFx1cHVwYXJyb3dzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFCRlwiLCBcIlxcXFx1cGhhcnBvb25sZWZ0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDM1wiLCBcIlxcXFxkb3duaGFycG9vbmxlZnRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMkI4XCIsIFwiXFxcXG11bHRpbWFwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFBRFwiLCBcIlxcXFxsZWZ0cmlnaHRzcXVpZ2Fycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDOVwiLCBcIlxcXFxyaWdodHJpZ2h0YXJyb3dzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDNFwiLCBcIlxcXFxyaWdodGxlZnRhcnJvd3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUEwXCIsIFwiXFxcXHR3b2hlYWRyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFBM1wiLCBcIlxcXFxyaWdodGFycm93dGFpbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQUNcIiwgXCJcXFxcbG9vcGFycm93cmlnaHRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUI3XCIsIFwiXFxcXGN1cnZlYXJyb3dyaWdodFwiLCB0cnVlKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgXFx1MjFiYiB0byBcXGN3b3BlbmNpcmNsZWFycm93LiBXZSdsbCB1c2UgdGhlIEFNUyBzeW5vbnltLlxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUJCXCIsIFwiXFxcXGNpcmNsZWFycm93cmlnaHRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUIxXCIsIFwiXFxcXFJzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIxQ0FcIiwgXCJcXFxcZG93bmRvd25hcnJvd3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUJFXCIsIFwiXFxcXHVwaGFycG9vbnJpZ2h0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFDMlwiLCBcIlxcXFxkb3duaGFycG9vbnJpZ2h0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFERFwiLCBcIlxcXFxyaWdodHNxdWlnYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMUREXCIsIFwiXFxcXGxlYWRzdG9cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMURCXCIsIFwiXFxcXFJyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCByZWwsIFwiXFx1MjFCRVwiLCBcIlxcXFxyZXN0cmljdGlvblwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDE4XCIsIFwiYFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCIkXCIsIFwiXFxcXCRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiJFwiLCBcIlxcXFwkXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIiRcIiwgXCJcXFxcdGV4dGRvbGxhclwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCIlXCIsIFwiXFxcXCVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiJVwiLCBcIlxcXFwlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIl9cIiwgXCJcXFxcX1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJfXCIsIFwiXFxcXF9cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiX1wiLCBcIlxcXFx0ZXh0dW5kZXJzY29yZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjIwXCIsIFwiXFxcXGFuZ2xlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyMUVcIiwgXCJcXFxcaW5mdHlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjAzMlwiLCBcIlxcXFxwcmltZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyNUIzXCIsIFwiXFxcXHRyaWFuZ2xlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTAzOTNcIiwgXCJcXFxcR2FtbWFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MDM5NFwiLCBcIlxcXFxEZWx0YVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwMzk4XCIsIFwiXFxcXFRoZXRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTAzOUJcIiwgXCJcXFxcTGFtYmRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTAzOUVcIiwgXCJcXFxcWGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MDNBMFwiLCBcIlxcXFxQaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwM0EzXCIsIFwiXFxcXFNpZ21hXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTAzQTVcIiwgXCJcXFxcVXBzaWxvblwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwM0E2XCIsIFwiXFxcXFBoaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwM0E4XCIsIFwiXFxcXFBzaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwM0E5XCIsIFwiXFxcXE9tZWdhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIkFcIiwgXCJcXHUwMzkxXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIkJcIiwgXCJcXHUwMzkyXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIkVcIiwgXCJcXHUwMzk1XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlpcIiwgXCJcXHUwMzk2XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIkhcIiwgXCJcXHUwMzk3XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIklcIiwgXCJcXHUwMzk5XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIktcIiwgXCJcXHUwMzlBXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIk1cIiwgXCJcXHUwMzlDXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIk5cIiwgXCJcXHUwMzlEXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIk9cIiwgXCJcXHUwMzlGXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlBcIiwgXCJcXHUwM0ExXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlRcIiwgXCJcXHUwM0E0XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlhcIiwgXCJcXHUwM0E3XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxceEFDXCIsIFwiXFxcXG5lZ1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHhBQ1wiLCBcIlxcXFxsbm90XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyQTRcIiwgXCJcXFxcdG9wXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyQTVcIiwgXCJcXFxcYm90XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyMDVcIiwgXCJcXFxcZW1wdHlzZXRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjA1XCIsIFwiXFxcXHZhcm5vdGhpbmdcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQjFcIiwgXCJcXFxcYWxwaGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQjJcIiwgXCJcXFxcYmV0YVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNCM1wiLCBcIlxcXFxnYW1tYVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNCNFwiLCBcIlxcXFxkZWx0YVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNGNVwiLCBcIlxcXFxlcHNpbG9uXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0I2XCIsIFwiXFxcXHpldGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQjdcIiwgXCJcXFxcZXRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0I4XCIsIFwiXFxcXHRoZXRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0I5XCIsIFwiXFxcXGlvdGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQkFcIiwgXCJcXFxca2FwcGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQkJcIiwgXCJcXFxcbGFtYmRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0JDXCIsIFwiXFxcXG11XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0JEXCIsIFwiXFxcXG51XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0JFXCIsIFwiXFxcXHhpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0JGXCIsIFwiXFxcXG9taWNyb25cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQzBcIiwgXCJcXFxccGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQzFcIiwgXCJcXFxccmhvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0MzXCIsIFwiXFxcXHNpZ21hXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0M0XCIsIFwiXFxcXHRhdVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNDNVwiLCBcIlxcXFx1cHNpbG9uXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0Q1XCIsIFwiXFxcXHBoaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNDN1wiLCBcIlxcXFxjaGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzQzhcIiwgXCJcXFxccHNpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0M5XCIsIFwiXFxcXG9tZWdhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0I1XCIsIFwiXFxcXHZhcmVwc2lsb25cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzRDFcIiwgXCJcXFxcdmFydGhldGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzRDZcIiwgXCJcXFxcdmFycGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzRjFcIiwgXCJcXFxcdmFycmhvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0MyXCIsIFwiXFxcXHZhcnNpZ21hXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM0M2XCIsIFwiXFxcXHZhcnBoaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjE3XCIsIFwiKlwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCIrXCIsIFwiK1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjEyXCIsIFwiLVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMkM1XCIsIFwiXFxcXGNkb3RcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxOFwiLCBcIlxcXFxjaXJjXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxceEY3XCIsIFwiXFxcXGRpdlwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHhCMVwiLCBcIlxcXFxwbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHhEN1wiLCBcIlxcXFx0aW1lc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjI5XCIsIFwiXFxcXGNhcFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjJBXCIsIFwiXFxcXGN1cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjE2XCIsIFwiXFxcXHNldG1pbnVzXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyMjdcIiwgXCJcXFxcbGFuZFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjI4XCIsIFwiXFxcXGxvclwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjI3XCIsIFwiXFxcXHdlZGdlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyMjhcIiwgXCJcXFxcdmVlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyMUFcIiwgXCJcXFxcc3VyZFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCIoXCIsIFwiKFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCJbXCIsIFwiW1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCJcXHUyN0U4XCIsIFwiXFxcXGxhbmdsZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCJcXHUyMjIzXCIsIFwiXFxcXGx2ZXJ0XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19vcGVuLCBcIlxcdTIyMjVcIiwgXCJcXFxcbFZlcnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2Nsb3NlLCBcIilcIiwgXCIpXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19jbG9zZSwgXCJdXCIsIFwiXVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfY2xvc2UsIFwiP1wiLCBcIj9cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2Nsb3NlLCBcIiFcIiwgXCIhXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19jbG9zZSwgXCJcXHUyN0U5XCIsIFwiXFxcXHJhbmdsZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfY2xvc2UsIFwiXFx1MjIyM1wiLCBcIlxcXFxydmVydFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfY2xvc2UsIFwiXFx1MjIyNVwiLCBcIlxcXFxyVmVydFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCI9XCIsIFwiPVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCI8XCIsIFwiPFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCI+XCIsIFwiPlwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCI6XCIsIFwiOlwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjQ4XCIsIFwiXFxcXGFwcHJveFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjQ1XCIsIFwiXFxcXGNvbmdcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjI2NVwiLCBcIlxcXFxnZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjY1XCIsIFwiXFxcXGdlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTkwXCIsIFwiXFxcXGdldHNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiPlwiLCBcIlxcXFxndFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjA4XCIsIFwiXFxcXGluXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdUUwMjBcIiwgXCJcXFxcQG5vdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjgyXCIsIFwiXFxcXHN1YnNldFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjgzXCIsIFwiXFxcXHN1cHNldFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjg2XCIsIFwiXFxcXHN1YnNldGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyODdcIiwgXCJcXFxcc3Vwc2V0ZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjg4XCIsIFwiXFxcXG5zdWJzZXRlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyODlcIiwgXCJcXFxcbnN1cHNldGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyQThcIiwgXCJcXFxcbW9kZWxzXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTBcIiwgXCJcXFxcbGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNjRcIiwgXCJcXFxcbGVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjI2NFwiLCBcIlxcXFxsZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiPFwiLCBcIlxcXFxsdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTkyXCIsIFwiXFxcXHJpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5MlwiLCBcIlxcXFx0b1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNzFcIiwgXCJcXFxcbmdlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgcmVsLCBcIlxcdTIyNzBcIiwgXCJcXFxcbmxlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfc3BhY2luZywgXCJcXHhBMFwiLCBcIlxcXFwgXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19zcGFjaW5nLCBcIlxceEEwXCIsIFwiflwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfc3BhY2luZywgXCJcXHhBMFwiLCBcIlxcXFxzcGFjZVwiKTsgLy8gUmVmOiBMYVRlWCBTb3VyY2UgMmU6IFxcRGVjbGFyZVJvYnVzdENvbW1hbmR7XFxub2JyZWFrc3BhY2V9eyVcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19zcGFjaW5nLCBcIlxceEEwXCIsIFwiXFxcXG5vYnJlYWtzcGFjZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfc3BhY2luZywgXCJcXHhBMFwiLCBcIlxcXFwgXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19zcGFjaW5nLCBcIlxceEEwXCIsIFwiflwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfc3BhY2luZywgXCJcXHhBMFwiLCBcIlxcXFxzcGFjZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfc3BhY2luZywgXCJcXHhBMFwiLCBcIlxcXFxub2JyZWFrc3BhY2VcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3NwYWNpbmcsIG51bGwsIFwiXFxcXG5vYnJlYWtcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3NwYWNpbmcsIG51bGwsIFwiXFxcXGFsbG93YnJlYWtcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBwdW5jdCwgXCIsXCIsIFwiLFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHB1bmN0LCBcIjtcIiwgXCI7XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJCQ1wiLCBcIlxcXFxiYXJ3ZWRnZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyQkJcIiwgXCJcXFxcdmVlYmFyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOTlcIiwgXCJcXFxcb2RvdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjk1XCIsIFwiXFxcXG9wbHVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOTdcIiwgXCJcXFxcb3RpbWVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyMDJcIiwgXCJcXFxccGFydGlhbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjk4XCIsIFwiXFxcXG9zbGFzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgYmluLCBcIlxcdTIyOUFcIiwgXCJcXFxcY2lyY2xlZGNpcmNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIGJpbiwgXCJcXHUyMkExXCIsIFwiXFxcXGJveGRvdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyNUIzXCIsIFwiXFxcXGJpZ3RyaWFuZ2xldXBcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjVCRFwiLCBcIlxcXFxiaWd0cmlhbmdsZWRvd25cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjAyMFwiLCBcIlxcXFxkYWdnZXJcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBiaW4sIFwiXFx1MjJDNFwiLCBcIlxcXFxkaWFtb25kXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyQzZcIiwgXCJcXFxcc3RhclwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyNUMzXCIsIFwiXFxcXHRyaWFuZ2xlbGVmdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIGJpbiwgXCJcXHUyNUI5XCIsIFwiXFxcXHRyaWFuZ2xlcmlnaHRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX29wZW4sIFwie1wiLCBcIlxcXFx7XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIntcIiwgXCJcXFxce1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJ7XCIsIFwiXFxcXHRleHRicmFjZWxlZnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2Nsb3NlLCBcIn1cIiwgXCJcXFxcfVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJ9XCIsIFwiXFxcXH1cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwifVwiLCBcIlxcXFx0ZXh0YnJhY2VyaWdodFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCJ7XCIsIFwiXFxcXGxicmFjZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfY2xvc2UsIFwifVwiLCBcIlxcXFxyYnJhY2VcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX29wZW4sIFwiW1wiLCBcIlxcXFxsYnJhY2tcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiW1wiLCBcIlxcXFxsYnJhY2tcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2Nsb3NlLCBcIl1cIiwgXCJcXFxccmJyYWNrXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIl1cIiwgXCJcXFxccmJyYWNrXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19vcGVuLCBcIihcIiwgXCJcXFxcbHBhcmVuXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19jbG9zZSwgXCIpXCIsIFwiXFxcXHJwYXJlblwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCI8XCIsIFwiXFxcXHRleHRsZXNzXCIpOyAvLyBpbiBUMSBmb250ZW5jXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCI+XCIsIFwiXFxcXHRleHRncmVhdGVyXCIpOyAvLyBpbiBUMSBmb250ZW5jXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfb3BlbiwgXCJcXHUyMzBBXCIsIFwiXFxcXGxmbG9vclwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfY2xvc2UsIFwiXFx1MjMwQlwiLCBcIlxcXFxyZmxvb3JcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX29wZW4sIFwiXFx1MjMwOFwiLCBcIlxcXFxsY2VpbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfY2xvc2UsIFwiXFx1MjMwOVwiLCBcIlxcXFxyY2VpbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXFxcXCIsIFwiXFxcXGJhY2tzbGFzaFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjIzXCIsIFwifFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjIzXCIsIFwiXFxcXHZlcnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwifFwiLCBcIlxcXFx0ZXh0YmFyXCIpOyAvLyBpbiBUMSBmb250ZW5jXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMjI1XCIsIFwiXFxcXHxcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjIyNVwiLCBcIlxcXFxWZXJ0XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIyMjVcIiwgXCJcXFxcdGV4dGJhcmRibFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJ+XCIsIFwiXFxcXHRleHRhc2NpaXRpbGRlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcXFxcIiwgXCJcXFxcdGV4dGJhY2tzbGFzaFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJeXCIsIFwiXFxcXHRleHRhc2NpaWNpcmN1bVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTkxXCIsIFwiXFxcXHVwYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjFEMVwiLCBcIlxcXFxVcGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTNcIiwgXCJcXFxcZG93bmFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxRDNcIiwgXCJcXFxcRG93bmFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTVcIiwgXCJcXFxcdXBkb3duYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCByZWwsIFwiXFx1MjFENVwiLCBcIlxcXFxVcGRvd25hcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG9wLCBcIlxcdTIyMTBcIiwgXCJcXFxcY29wcm9kXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgb3AsIFwiXFx1MjJDMVwiLCBcIlxcXFxiaWd2ZWVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyMkMwXCIsIFwiXFxcXGJpZ3dlZGdlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgb3AsIFwiXFx1MkEwNFwiLCBcIlxcXFxiaWd1cGx1c1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG9wLCBcIlxcdTIyQzJcIiwgXCJcXFxcYmlnY2FwXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgb3AsIFwiXFx1MjJDM1wiLCBcIlxcXFxiaWdjdXBcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJCXCIsIFwiXFxcXGludFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG9wLCBcIlxcdTIyMkJcIiwgXCJcXFxcaW50b3BcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJDXCIsIFwiXFxcXGlpbnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJEXCIsIFwiXFxcXGlpaW50XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIwRlwiLCBcIlxcXFxwcm9kXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIxMVwiLCBcIlxcXFxzdW1cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyQTAyXCIsIFwiXFxcXGJpZ290aW1lc1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG9wLCBcIlxcdTJBMDFcIiwgXCJcXFxcYmlnb3BsdXNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyQTAwXCIsIFwiXFxcXGJpZ29kb3RcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJFXCIsIFwiXFxcXG9pbnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJGXCIsIFwiXFxcXG9paW50XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIzMFwiLCBcIlxcXFxvaWlpbnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBvcCwgXCJcXHUyQTA2XCIsIFwiXFxcXGJpZ3NxY3VwXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIyQlwiLCBcIlxcXFxzbWFsbGludFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfaW5uZXIsIFwiXFx1MjAyNlwiLCBcIlxcXFx0ZXh0ZWxsaXBzaXNcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2lubmVyLCBcIlxcdTIwMjZcIiwgXCJcXFxcbWF0aGVsbGlwc2lzXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19pbm5lciwgXCJcXHUyMDI2XCIsIFwiXFxcXGxkb3RzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19pbm5lciwgXCJcXHUyMDI2XCIsIFwiXFxcXGxkb3RzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19pbm5lciwgXCJcXHUyMkVGXCIsIFwiXFxcXEBjZG90c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfaW5uZXIsIFwiXFx1MjJGMVwiLCBcIlxcXFxkZG90c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMkVFXCIsIFwiXFxcXHZhcnZkb3RzXCIpOyAvLyBcXHZkb3RzIGlzIGEgbWFjcm9cblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiXFx1MDJDQVwiLCBcIlxcXFxhY3V0ZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxcdTAyQ0JcIiwgXCJcXFxcZ3JhdmVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2FjY2VudCwgXCJcXHhBOFwiLCBcIlxcXFxkZG90XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiflwiLCBcIlxcXFx0aWxkZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxcdTAyQzlcIiwgXCJcXFxcYmFyXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiXFx1MDJEOFwiLCBcIlxcXFxicmV2ZVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxcdTAyQzdcIiwgXCJcXFxcY2hlY2tcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2FjY2VudCwgXCJeXCIsIFwiXFxcXGhhdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxcdTIwRDdcIiwgXCJcXFxcdmVjXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiXFx1MDJEOVwiLCBcIlxcXFxkb3RcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX2FjY2VudCwgXCJcXHUwMkRBXCIsIFwiXFxcXG1hdGhyaW5nXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwMTMxXCIsIFwiXFxcXGltYXRoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwMjM3XCIsIFwiXFxcXGptYXRoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTAxMzFcIiwgXCJcXFxcaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUwMjM3XCIsIFwiXFxcXGpcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4REZcIiwgXCJcXFxcc3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4RTZcIiwgXCJcXFxcYWVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4RTZcIiwgXCJcXFxcYWVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MDE1M1wiLCBcIlxcXFxvZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHhGOFwiLCBcIlxcXFxvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxceEM2XCIsIFwiXFxcXEFFXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTAxNTJcIiwgXCJcXFxcT0VcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4RDhcIiwgXCJcXFxcT1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxcdTAyQ0FcIiwgXCJcXFxcJ1wiKTsgLy8gYWN1dGVcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiXFx1MDJDQlwiLCBcIlxcXFxgXCIpOyAvLyBncmF2ZVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX2FjY2VudCwgXCJcXHUwMkM2XCIsIFwiXFxcXF5cIik7IC8vIGNpcmN1bWZsZXhcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiXFx1MDJEQ1wiLCBcIlxcXFx+XCIpOyAvLyB0aWxkZVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX2FjY2VudCwgXCJcXHUwMkM5XCIsIFwiXFxcXD1cIik7IC8vIG1hY3JvblxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX2FjY2VudCwgXCJcXHUwMkQ4XCIsIFwiXFxcXHVcIik7IC8vIGJyZXZlXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxcdTAyRDlcIiwgXCJcXFxcLlwiKTsgLy8gZG90IGFib3ZlXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxcdTAyREFcIiwgXCJcXFxcclwiKTsgLy8gcmluZyBhYm92ZVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX2FjY2VudCwgXCJcXHUwMkM3XCIsIFwiXFxcXHZcIik7IC8vIGNhcm9uXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfYWNjZW50LCBcIlxceEE4XCIsICdcXFxcXCInKTsgLy8gZGlhcmVzaXNcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiXFx1MDJERFwiLCBcIlxcXFxIXCIpOyAvLyBkb3VibGUgYWN1dGVcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19hY2NlbnQsIFwiXFx1MjVFRlwiLCBcIlxcXFx0ZXh0Y2lyY2xlZFwiKTsgLy8gXFxiaWdjaXJjIGdseXBoXG4vLyBUaGVzZSBsaWdhdHVyZXMgYXJlIGRldGVjdGVkIGFuZCBjcmVhdGVkIGluIFBhcnNlci5qcydzIGBmb3JtTGlnYXR1cmVzYC5cblxudmFyIGxpZ2F0dXJlcyA9IHtcbiAgXCItLVwiOiB0cnVlLFxuICBcIi0tLVwiOiB0cnVlLFxuICBcImBgXCI6IHRydWUsXG4gIFwiJydcIjogdHJ1ZVxufTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDEzXCIsIFwiLS1cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjAxM1wiLCBcIlxcXFx0ZXh0ZW5kYXNoXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMTRcIiwgXCItLS1cIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjAxNFwiLCBcIlxcXFx0ZXh0ZW1kYXNoXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMThcIiwgXCJgXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMThcIiwgXCJcXFxcdGV4dHF1b3RlbGVmdFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDE5XCIsIFwiJ1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDE5XCIsIFwiXFxcXHRleHRxdW90ZXJpZ2h0XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMUNcIiwgXCJgYFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDFDXCIsIFwiXFxcXHRleHRxdW90ZWRibGxlZnRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjAxRFwiLCBcIicnXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMURcIiwgXCJcXFxcdGV4dHF1b3RlZGJscmlnaHRcIik7IC8vICBcXGRlZ3JlZSBmcm9tIGdlbnN5bWIgcGFja2FnZVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4QjBcIiwgXCJcXFxcZGVncmVlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxceEIwXCIsIFwiXFxcXGRlZ3JlZVwiKTsgLy8gXFx0ZXh0ZGVncmVlIGZyb20gaW5wdXRlbmMgcGFja2FnZVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx4QjBcIiwgXCJcXFxcdGV4dGRlZ3JlZVwiLCB0cnVlKTsgLy8gVE9ETzogSW4gTGFUZVgsIFxccG91bmRzIGNhbiBnZW5lcmF0ZSBhIGRpZmZlcmVudCBjaGFyYWN0ZXIgaW4gdGV4dCBhbmQgbWF0aFxuLy8gbW9kZSwgYnV0IGFtb25nIG91ciBmb250cywgb25seSBNYWluLUl0YWxpYyBkZWZpbmVzIHRoaXMgY2hhcmFjdGVyIFwiMTYzXCIuXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx4QTNcIiwgXCJcXFxccG91bmRzXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHhBM1wiLCBcIlxcXFxtYXRoc3RlcmxpbmdcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBtYXRob3JkLCBcIlxceEEzXCIsIFwiXFxcXHBvdW5kc1wiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIG1hdGhvcmQsIFwiXFx4QTNcIiwgXCJcXFxcdGV4dHN0ZXJsaW5nXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjcyMFwiLCBcIlxcXFxtYWx0ZXNlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjcyMFwiLCBcIlxcXFxtYWx0ZXNlXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19zcGFjaW5nLCBcIlxceEEwXCIsIFwiXFxcXCBcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3NwYWNpbmcsIFwiXFx4QTBcIiwgXCIgXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc19zcGFjaW5nLCBcIlxceEEwXCIsIFwiflwiKTsgLy8gVGhlcmUgYXJlIGxvdHMgb2Ygc3ltYm9scyB3aGljaCBhcmUgdGhlIHNhbWUsIHNvIHdlIGFkZCB0aGVtIGluIGFmdGVyd2FyZHMuXG4vLyBBbGwgb2YgdGhlc2UgYXJlIHRleHRvcmRzIGluIG1hdGggbW9kZVxuXG52YXIgbWF0aFRleHRTeW1ib2xzID0gXCIwMTIzNDU2Nzg5L0AuXFxcIlwiO1xuXG5mb3IgKHZhciBzeW1ib2xzX2kgPSAwOyBzeW1ib2xzX2kgPCBtYXRoVGV4dFN5bWJvbHMubGVuZ3RoOyBzeW1ib2xzX2krKykge1xuICB2YXIgc3ltYm9sc19jaCA9IG1hdGhUZXh0U3ltYm9scy5jaGFyQXQoc3ltYm9sc19pKTtcbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBzeW1ib2xzX2NoLCBzeW1ib2xzX2NoKTtcbn0gLy8gQWxsIG9mIHRoZXNlIGFyZSB0ZXh0b3JkcyBpbiB0ZXh0IG1vZGVcblxuXG52YXIgdGV4dFN5bWJvbHMgPSBcIjAxMjM0NTY3ODkhQCooKS09K1tdPD58XFxcIjs6Py8uLFwiO1xuXG5mb3IgKHZhciBzcmNfc3ltYm9sc19pID0gMDsgc3JjX3N5bWJvbHNfaSA8IHRleHRTeW1ib2xzLmxlbmd0aDsgc3JjX3N5bWJvbHNfaSsrKSB7XG4gIHZhciBfY2ggPSB0ZXh0U3ltYm9scy5jaGFyQXQoc3JjX3N5bWJvbHNfaSk7XG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBfY2gsIF9jaCk7XG59IC8vIEFsbCBvZiB0aGVzZSBhcmUgdGV4dG9yZHMgaW4gdGV4dCBtb2RlLCBhbmQgbWF0aG9yZHMgaW4gbWF0aCBtb2RlXG5cblxudmFyIGxldHRlcnMgPSBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjtcblxuZm9yICh2YXIgc3ltYm9sc19pMiA9IDA7IHN5bWJvbHNfaTIgPCBsZXR0ZXJzLmxlbmd0aDsgc3ltYm9sc19pMisrKSB7XG4gIHZhciBfY2gyID0gbGV0dGVycy5jaGFyQXQoc3ltYm9sc19pMik7XG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMiwgX2NoMik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoMiwgX2NoMik7XG59IC8vIEJsYWNrYm9hcmQgYm9sZCBhbmQgc2NyaXB0IGxldHRlcnMgaW4gVW5pY29kZSByYW5nZVxuXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIkNcIiwgXCJcXHUyMTAyXCIpOyAvLyBibGFja2JvYXJkIGJvbGRcblxuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiQ1wiLCBcIlxcdTIxMDJcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJIXCIsIFwiXFx1MjEwRFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIkhcIiwgXCJcXHUyMTBEXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiTlwiLCBcIlxcdTIxMTVcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJOXCIsIFwiXFx1MjExNVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlBcIiwgXCJcXHUyMTE5XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiUFwiLCBcIlxcdTIxMTlcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJRXCIsIFwiXFx1MjExQVwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlFcIiwgXCJcXHUyMTFBXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiUlwiLCBcIlxcdTIxMURcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBhbXMsIHN5bWJvbHNfdGV4dG9yZCwgXCJSXCIsIFwiXFx1MjExRFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIGFtcywgc3ltYm9sc190ZXh0b3JkLCBcIlpcIiwgXCJcXHUyMTI0XCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgYW1zLCBzeW1ib2xzX3RleHRvcmQsIFwiWlwiLCBcIlxcdTIxMjRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBcImhcIiwgXCJcXHUyMTBFXCIpOyAvLyBpdGFsaWMgaCwgUGxhbmNrIGNvbnN0YW50XG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIG1hdGhvcmQsIFwiaFwiLCBcIlxcdTIxMEVcIik7IC8vIFRoZSBuZXh0IGxvb3AgbG9hZHMgd2lkZSAoc3Vycm9nYXRlIHBhaXIpIGNoYXJhY3RlcnMuXG4vLyBXZSBzdXBwb3J0IHNvbWUgbGV0dGVycyBpbiB0aGUgVW5pY29kZSByYW5nZSBVKzFENDAwIHRvIFUrMUQ3RkYsXG4vLyBNYXRoZW1hdGljYWwgQWxwaGFudW1lcmljIFN5bWJvbHMuXG4vLyBTb21lIGVkaXRvcnMgZG8gbm90IGRlYWwgd2VsbCB3aXRoIHdpZGUgY2hhcmFjdGVycy4gU28gZG9uJ3Qgd3JpdGUgdGhlXG4vLyBzdHJpbmcgaW50byB0aGlzIGZpbGUuIEluc3RlYWQsIGNyZWF0ZSB0aGUgc3RyaW5nIGZyb20gdGhlIHN1cnJvZ2F0ZSBwYWlyLlxuXG52YXIgc3ltYm9sc193aWRlQ2hhciA9IFwiXCI7XG5cbmZvciAodmFyIHN5bWJvbHNfaTMgPSAwOyBzeW1ib2xzX2kzIDwgbGV0dGVycy5sZW5ndGg7IHN5bWJvbHNfaTMrKykge1xuICB2YXIgX2NoMyA9IGxldHRlcnMuY2hhckF0KHN5bWJvbHNfaTMpOyAvLyBUaGUgaGV4IG51bWJlcnMgaW4gdGhlIG5leHQgbGluZSBhcmUgYSBzdXJyb2dhdGUgcGFpci5cbiAgLy8gMHhEODM1IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBmb3IgYWxsIGxldHRlcnMgaW4gdGhlIHJhbmdlIHdlIHN1cHBvcnQuXG4gIC8vIDB4REMwMCBpcyB0aGUgbG93IHN1cnJvZ2F0ZSBmb3IgYm9sZCBBLlxuXG5cbiAgc3ltYm9sc193aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweERDMDAgKyBzeW1ib2xzX2kzKTsgLy8gQS1aIGEteiBib2xkXG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIHN5bWJvbHNfd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhEQzM0ICsgc3ltYm9sc19pMyk7IC8vIEEtWiBhLXogaXRhbGljXG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIHN5bWJvbHNfd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhEQzY4ICsgc3ltYm9sc19pMyk7IC8vIEEtWiBhLXogYm9sZCBpdGFsaWNcblxuICBkZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBfY2gzLCBzeW1ib2xzX3dpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBfY2gzLCBzeW1ib2xzX3dpZGVDaGFyKTtcbiAgc3ltYm9sc193aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweEREMDQgKyBzeW1ib2xzX2kzKTsgLy8gQS1aIGEteiBGcmFjdHVyXG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIHN5bWJvbHNfd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhEREEwICsgc3ltYm9sc19pMyk7IC8vIEEtWiBhLXogc2Fucy1zZXJpZlxuXG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDMsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIF9jaDMsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBzeW1ib2xzX3dpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4RERENCArIHN5bWJvbHNfaTMpOyAvLyBBLVogYS16IHNhbnMgYm9sZFxuXG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDMsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIF9jaDMsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBzeW1ib2xzX3dpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REUwOCArIHN5bWJvbHNfaTMpOyAvLyBBLVogYS16IHNhbnMgaXRhbGljXG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIHN5bWJvbHNfd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERTcwICsgc3ltYm9sc19pMyk7IC8vIEEtWiBhLXogbW9ub3NwYWNlXG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG5cbiAgaWYgKHN5bWJvbHNfaTMgPCAyNikge1xuICAgIC8vIEthVGVYIGZvbnRzIGhhdmUgb25seSBjYXBpdGFsIGxldHRlcnMgZm9yIGJsYWNrYm9hcmQgYm9sZCBhbmQgc2NyaXB0LlxuICAgIC8vIFNlZSBleGNlcHRpb24gZm9yIGsgYmVsb3cuXG4gICAgc3ltYm9sc193aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweEREMzggKyBzeW1ib2xzX2kzKTsgLy8gQS1aIGRvdWJsZSBzdHJ1Y2tcblxuICAgIGRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDMsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICAgIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gICAgc3ltYm9sc193aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweERDOUMgKyBzeW1ib2xzX2kzKTsgLy8gQS1aIHNjcmlwdFxuXG4gICAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgc3ltYm9sc193aWRlQ2hhcik7XG4gICAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBfY2gzLCBzeW1ib2xzX3dpZGVDaGFyKTtcbiAgfSAvLyBUT0RPOiBBZGQgYm9sZCBzY3JpcHQgd2hlbiBpdCBpcyBzdXBwb3J0ZWQgYnkgYSBLYVRlWCBmb250LlxuXG59IC8vIFwia1wiIGlzIHRoZSBvbmx5IGRvdWJsZSBzdHJ1Y2sgbG93ZXIgY2FzZSBsZXR0ZXIgaW4gdGhlIEthVGVYIGZvbnRzLlxuXG5cbnN5bWJvbHNfd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERDVDKTsgLy8gayBkb3VibGUgc3RydWNrXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIFwia1wiLCBzeW1ib2xzX3dpZGVDaGFyKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJrXCIsIHN5bWJvbHNfd2lkZUNoYXIpOyAvLyBOZXh0LCBzb21lIHdpZGUgY2hhcmFjdGVyIG51bWVyYWxzXG5cbmZvciAodmFyIHN5bWJvbHNfaTQgPSAwOyBzeW1ib2xzX2k0IDwgMTA7IHN5bWJvbHNfaTQrKykge1xuICB2YXIgX2NoNCA9IHN5bWJvbHNfaTQudG9TdHJpbmcoKTtcblxuICBzeW1ib2xzX3dpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REZDRSArIHN5bWJvbHNfaTQpOyAvLyAwLTkgYm9sZFxuXG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDQsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIF9jaDQsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBzeW1ib2xzX3dpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REZFMiArIHN5bWJvbHNfaTQpOyAvLyAwLTkgc2FucyBzZXJpZlxuXG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDQsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIF9jaDQsIHN5bWJvbHNfd2lkZUNoYXIpO1xuICBzeW1ib2xzX3dpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REZFQyArIHN5bWJvbHNfaTQpOyAvLyAwLTkgYm9sZCBzYW5zXG5cbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfbWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoNCwgc3ltYm9sc193aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgX2NoNCwgc3ltYm9sc193aWRlQ2hhcik7XG4gIHN5bWJvbHNfd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERkY2ICsgc3ltYm9sc19pNCk7IC8vIDAtOSBtb25vc3BhY2VcblxuICBkZWZpbmVTeW1ib2woc3ltYm9sc19tYXRoLCBtYWluLCBtYXRob3JkLCBfY2g0LCBzeW1ib2xzX3dpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBfY2g0LCBzeW1ib2xzX3dpZGVDaGFyKTtcbn0gLy8gV2UgYWRkIHRoZXNlIExhdGluLTEgbGV0dGVycyBhcyBzeW1ib2xzIGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSxcbi8vIGJ1dCB0aGV5IGFyZSBub3QgYWN0dWFsbHkgaW4gdGhlIGZvbnQsIG5vciBhcmUgdGhleSBzdXBwb3J0ZWQgYnkgdGhlXG4vLyBVbmljb2RlIGFjY2VudCBtZWNoYW5pc20sIHNvIHRoZXkgZmFsbCBiYWNrIHRvIFRpbWVzIGZvbnQgYW5kIGxvb2sgdWdseS5cbi8vIFRPRE8oZWRlbWFpbmUpOiBGaXggdGhpcy5cblxuXG52YXIgZXh0cmFMYXRpbiA9IFwiw4fDkMOew6fDvlwiO1xuXG5mb3IgKHZhciBfaTUgPSAwOyBfaTUgPCBleHRyYUxhdGluLmxlbmd0aDsgX2k1KyspIHtcbiAgdmFyIF9jaDUgPSBleHRyYUxhdGluLmNoYXJBdChfaTUpO1xuXG4gIGRlZmluZVN5bWJvbChzeW1ib2xzX21hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDUsIF9jaDUpO1xuICBkZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIF9jaDUsIF9jaDUpO1xufVxuXG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiw7BcIiwgXCLDsFwiKTsgLy8gVW5pY29kZSB2ZXJzaW9ucyBvZiBleGlzdGluZyBjaGFyYWN0ZXJzXG5cbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDEzXCIsIFwi4oCTXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMTRcIiwgXCLigJRcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjAxOFwiLCBcIuKAmFwiKTtcbmRlZmluZVN5bWJvbChzeW1ib2xzX3RleHQsIG1haW4sIHN5bWJvbHNfdGV4dG9yZCwgXCJcXHUyMDE5XCIsIFwi4oCZXCIpO1xuZGVmaW5lU3ltYm9sKHN5bWJvbHNfdGV4dCwgbWFpbiwgc3ltYm9sc190ZXh0b3JkLCBcIlxcdTIwMUNcIiwgXCLigJxcIik7XG5kZWZpbmVTeW1ib2woc3ltYm9sc190ZXh0LCBtYWluLCBzeW1ib2xzX3RleHRvcmQsIFwiXFx1MjAxRFwiLCBcIuKAnVwiKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3dpZGUtY2hhcmFjdGVyLmpzXG4vKipcbiAqIFRoaXMgZmlsZSBwcm92aWRlcyBzdXBwb3J0IGZvciBVbmljb2RlIHJhbmdlIFUrMUQ0MDAgdG8gVSsxRDdGRixcbiAqIE1hdGhlbWF0aWNhbCBBbHBoYW51bWVyaWMgU3ltYm9scy5cbiAqXG4gKiBGdW5jdGlvbiB3aWRlQ2hhcmFjdGVyRm9udCB0YWtlcyBhIHdpZGUgY2hhcmFjdGVyIGFzIGlucHV0IGFuZCByZXR1cm5zXG4gKiB0aGUgZm9udCBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8gcmVuZGVyIGl0IHByb3Blcmx5LlxuICovXG5cbi8qKlxuICogRGF0YSBiZWxvdyBpcyBmcm9tIGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL2NoYXJ0cy9QREYvVTFENDAwLnBkZlxuICogVGhhdCBkb2N1bWVudCBzb3J0cyBjaGFyYWN0ZXJzIGludG8gZ3JvdXBzIGJ5IGZvbnQgdHlwZSwgc2F5IGJvbGQgb3IgaXRhbGljLlxuICpcbiAqIEluIHRoZSBhcnJheXMgYmVsb3csIGVhY2ggc3ViYXJyYXkgY29uc2lzdHMgdGhyZWUgZWxlbWVudHM6XG4gKiAgICAgICogVGhlIENTUyBjbGFzcyBvZiB0aGF0IGdyb3VwIHdoZW4gaW4gbWF0aCBtb2RlLlxuICogICAgICAqIFRoZSBDU1MgY2xhc3Mgb2YgdGhhdCBncm91cCB3aGVuIGluIHRleHQgbW9kZS5cbiAqICAgICAgKiBUaGUgZm9udCBuYW1lLCBzbyB0aGF0IEthVGVYIGNhbiBnZXQgZm9udCBtZXRyaWNzLlxuICovXG5cbnZhciB3aWRlTGF0aW5MZXR0ZXJEYXRhID0gW1tcIm1hdGhiZlwiLCBcInRleHRiZlwiLCBcIk1haW4tQm9sZFwiXSwgLy8gQS1aIGJvbGQgdXByaWdodFxuW1wibWF0aGJmXCIsIFwidGV4dGJmXCIsIFwiTWFpbi1Cb2xkXCJdLCAvLyBhLXogYm9sZCB1cHJpZ2h0XG5bXCJtYXRoZGVmYXVsdFwiLCBcInRleHRpdFwiLCBcIk1hdGgtSXRhbGljXCJdLCAvLyBBLVogaXRhbGljXG5bXCJtYXRoZGVmYXVsdFwiLCBcInRleHRpdFwiLCBcIk1hdGgtSXRhbGljXCJdLCAvLyBhLXogaXRhbGljXG5bXCJib2xkc3ltYm9sXCIsIFwiYm9sZHN5bWJvbFwiLCBcIk1haW4tQm9sZEl0YWxpY1wiXSwgLy8gQS1aIGJvbGQgaXRhbGljXG5bXCJib2xkc3ltYm9sXCIsIFwiYm9sZHN5bWJvbFwiLCBcIk1haW4tQm9sZEl0YWxpY1wiXSwgLy8gYS16IGJvbGQgaXRhbGljXG4vLyBNYXAgZmFuY3kgQS1aIGxldHRlcnMgdG8gc2NyaXB0LCBub3QgY2FsbGlncmFwaGljLlxuLy8gVGhpcyBhbGlnbnMgd2l0aCB1bmljb2RlLW1hdGggYW5kIG1hdGggZm9udHMgKGV4Y2VwdCBDYW1icmlhIE1hdGgpLlxuW1wibWF0aHNjclwiLCBcInRleHRzY3JcIiwgXCJTY3JpcHQtUmVndWxhclwiXSwgLy8gQS1aIHNjcmlwdFxuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBhLXogc2NyaXB0LiAgTm8gZm9udFxuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBBLVogYm9sZCBzY3JpcHQuIE5vIGZvbnRcbltcIlwiLCBcIlwiLCBcIlwiXSwgLy8gYS16IGJvbGQgc2NyaXB0LiBObyBmb250XG5bXCJtYXRoZnJha1wiLCBcInRleHRmcmFrXCIsIFwiRnJha3R1ci1SZWd1bGFyXCJdLCAvLyBBLVogRnJha3R1clxuW1wibWF0aGZyYWtcIiwgXCJ0ZXh0ZnJha1wiLCBcIkZyYWt0dXItUmVndWxhclwiXSwgLy8gYS16IEZyYWt0dXJcbltcIm1hdGhiYlwiLCBcInRleHRiYlwiLCBcIkFNUy1SZWd1bGFyXCJdLCAvLyBBLVogZG91YmxlLXN0cnVja1xuW1wibWF0aGJiXCIsIFwidGV4dGJiXCIsIFwiQU1TLVJlZ3VsYXJcIl0sIC8vIGsgZG91YmxlLXN0cnVja1xuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBBLVogYm9sZCBGcmFrdHVyIE5vIGZvbnQgbWV0cmljc1xuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBhLXogYm9sZCBGcmFrdHVyLiAgIE5vIGZvbnQuXG5bXCJtYXRoc2ZcIiwgXCJ0ZXh0c2ZcIiwgXCJTYW5zU2VyaWYtUmVndWxhclwiXSwgLy8gQS1aIHNhbnMtc2VyaWZcbltcIm1hdGhzZlwiLCBcInRleHRzZlwiLCBcIlNhbnNTZXJpZi1SZWd1bGFyXCJdLCAvLyBhLXogc2Fucy1zZXJpZlxuW1wibWF0aGJvbGRzZlwiLCBcInRleHRib2xkc2ZcIiwgXCJTYW5zU2VyaWYtQm9sZFwiXSwgLy8gQS1aIGJvbGQgc2Fucy1zZXJpZlxuW1wibWF0aGJvbGRzZlwiLCBcInRleHRib2xkc2ZcIiwgXCJTYW5zU2VyaWYtQm9sZFwiXSwgLy8gYS16IGJvbGQgc2Fucy1zZXJpZlxuW1wibWF0aGl0c2ZcIiwgXCJ0ZXh0aXRzZlwiLCBcIlNhbnNTZXJpZi1JdGFsaWNcIl0sIC8vIEEtWiBpdGFsaWMgc2Fucy1zZXJpZlxuW1wibWF0aGl0c2ZcIiwgXCJ0ZXh0aXRzZlwiLCBcIlNhbnNTZXJpZi1JdGFsaWNcIl0sIC8vIGEteiBpdGFsaWMgc2Fucy1zZXJpZlxuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBBLVogYm9sZCBpdGFsaWMgc2Fucy4gTm8gZm9udFxuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBhLXogYm9sZCBpdGFsaWMgc2Fucy4gTm8gZm9udFxuW1wibWF0aHR0XCIsIFwidGV4dHR0XCIsIFwiVHlwZXdyaXRlci1SZWd1bGFyXCJdLCAvLyBBLVogbW9ub3NwYWNlXG5bXCJtYXRodHRcIiwgXCJ0ZXh0dHRcIiwgXCJUeXBld3JpdGVyLVJlZ3VsYXJcIl1dO1xudmFyIHdpZGVOdW1lcmFsRGF0YSA9IFtbXCJtYXRoYmZcIiwgXCJ0ZXh0YmZcIiwgXCJNYWluLUJvbGRcIl0sIC8vIDAtOSBib2xkXG5bXCJcIiwgXCJcIiwgXCJcIl0sIC8vIDAtOSBkb3VibGUtc3RydWNrLiBObyBLYVRlWCBmb250LlxuW1wibWF0aHNmXCIsIFwidGV4dHNmXCIsIFwiU2Fuc1NlcmlmLVJlZ3VsYXJcIl0sIC8vIDAtOSBzYW5zLXNlcmlmXG5bXCJtYXRoYm9sZHNmXCIsIFwidGV4dGJvbGRzZlwiLCBcIlNhbnNTZXJpZi1Cb2xkXCJdLCAvLyAwLTkgYm9sZCBzYW5zLXNlcmlmXG5bXCJtYXRodHRcIiwgXCJ0ZXh0dHRcIiwgXCJUeXBld3JpdGVyLVJlZ3VsYXJcIl1dO1xudmFyIHdpZGVfY2hhcmFjdGVyX3dpZGVDaGFyYWN0ZXJGb250ID0gZnVuY3Rpb24gd2lkZUNoYXJhY3RlckZvbnQod2lkZUNoYXIsIG1vZGUpIHtcbiAgLy8gSUUgZG9lc24ndCBzdXBwb3J0IGNvZGVQb2ludEF0KCkuIFNvIHdvcmsgd2l0aCB0aGUgc3Vycm9nYXRlIHBhaXIuXG4gIHZhciBIID0gd2lkZUNoYXIuY2hhckNvZGVBdCgwKTsgLy8gaGlnaCBzdXJyb2dhdGVcblxuICB2YXIgTCA9IHdpZGVDaGFyLmNoYXJDb2RlQXQoMSk7IC8vIGxvdyBzdXJyb2dhdGVcblxuICB2YXIgY29kZVBvaW50ID0gKEggLSAweEQ4MDApICogMHg0MDAgKyAoTCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB2YXIgaiA9IG1vZGUgPT09IFwibWF0aFwiID8gMCA6IDE7IC8vIGNvbHVtbiBpbmRleCBmb3IgQ1NTIGNsYXNzLlxuXG4gIGlmICgweDFENDAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPCAweDFENkE0KSB7XG4gICAgLy8gd2lkZUxhdGluTGV0dGVyRGF0YSBjb250YWlucyBleGFjdGx5IDI2IGNoYXJzIG9uIGVhY2ggcm93LlxuICAgIC8vIFNvIHdlIGNhbiBjYWxjdWxhdGUgdGhlIHJlbGV2YW50IHJvdy4gTm8gdHJhdmVyc2UgbmVjZXNzYXJ5LlxuICAgIHZhciBpID0gTWF0aC5mbG9vcigoY29kZVBvaW50IC0gMHgxRDQwMCkgLyAyNik7XG4gICAgcmV0dXJuIFt3aWRlTGF0aW5MZXR0ZXJEYXRhW2ldWzJdLCB3aWRlTGF0aW5MZXR0ZXJEYXRhW2ldW2pdXTtcbiAgfSBlbHNlIGlmICgweDFEN0NFIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxRDdGRikge1xuICAgIC8vIE51bWVyYWxzLCB0ZW4gcGVyIHJvdy5cbiAgICB2YXIgX2kgPSBNYXRoLmZsb29yKChjb2RlUG9pbnQgLSAweDFEN0NFKSAvIDEwKTtcblxuICAgIHJldHVybiBbd2lkZU51bWVyYWxEYXRhW19pXVsyXSwgd2lkZU51bWVyYWxEYXRhW19pXVtqXV07XG4gIH0gZWxzZSBpZiAoY29kZVBvaW50ID09PSAweDFENkE1IHx8IGNvZGVQb2ludCA9PT0gMHgxRDZBNikge1xuICAgIC8vIGRvdGxlc3MgaSBvciBqXG4gICAgcmV0dXJuIFt3aWRlTGF0aW5MZXR0ZXJEYXRhWzBdWzJdLCB3aWRlTGF0aW5MZXR0ZXJEYXRhWzBdW2pdXTtcbiAgfSBlbHNlIGlmICgweDFENkE2IDwgY29kZVBvaW50ICYmIGNvZGVQb2ludCA8IDB4MUQ3Q0UpIHtcbiAgICAvLyBHcmVlayBsZXR0ZXJzLiBOb3Qgc3VwcG9ydGVkLCB5ZXQuXG4gICAgcmV0dXJuIFtcIlwiLCBcIlwiXTtcbiAgfSBlbHNlIHtcbiAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGFueSB3aWRlIGNoYXJhY3RlcnMgb3V0c2lkZSAxRDQwMOKAkzFEN0ZGLlxuICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlVuc3VwcG9ydGVkIGNoYXJhY3RlcjogXCIgKyB3aWRlQ2hhcik7XG4gIH1cbn07XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9PcHRpb25zLmpzXG4vKipcbiAqIFRoaXMgZmlsZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3B0aW9ucyB0aGF0IHRoZSBQYXJzZXIgY2Fycmllc1xuICogYXJvdW5kIHdpdGggaXQgd2hpbGUgcGFyc2luZy4gRGF0YSBpcyBoZWxkIGluIGFuIGBPcHRpb25zYCBvYmplY3QsIGFuZCB3aGVuXG4gKiByZWN1cnNpbmcsIGEgbmV3IGBPcHRpb25zYCBvYmplY3QgY2FuIGJlIGNyZWF0ZWQgd2l0aCB0aGUgYC53aXRoKmAgYW5kXG4gKiBgLnJlc2V0YCBmdW5jdGlvbnMuXG4gKi9cblxudmFyIHNpemVTdHlsZU1hcCA9IFsvLyBFYWNoIGVsZW1lbnQgY29udGFpbnMgW3RleHRzaXplLCBzY3JpcHRzaXplLCBzY3JpcHRzY3JpcHRzaXplXS5cbi8vIFRoZSBzaXplIG1hcHBpbmdzIGFyZSB0YWtlbiBmcm9tIFRlWCB3aXRoIFxcbm9ybWFsc2l6ZT0xMHB0LlxuWzEsIDEsIDFdLCAvLyBzaXplMTogWzUsIDUsIDVdICAgICAgICAgICAgICBcXHRpbnlcblsyLCAxLCAxXSwgLy8gc2l6ZTI6IFs2LCA1LCA1XVxuWzMsIDEsIDFdLCAvLyBzaXplMzogWzcsIDUsIDVdICAgICAgICAgICAgICBcXHNjcmlwdHNpemVcbls0LCAyLCAxXSwgLy8gc2l6ZTQ6IFs4LCA2LCA1XSAgICAgICAgICAgICAgXFxmb290bm90ZXNpemVcbls1LCAyLCAxXSwgLy8gc2l6ZTU6IFs5LCA2LCA1XSAgICAgICAgICAgICAgXFxzbWFsbFxuWzYsIDMsIDFdLCAvLyBzaXplNjogWzEwLCA3LCA1XSAgICAgICAgICAgICBcXG5vcm1hbHNpemVcbls3LCA0LCAyXSwgLy8gc2l6ZTc6IFsxMiwgOCwgNl0gICAgICAgICAgICAgXFxsYXJnZVxuWzgsIDYsIDNdLCAvLyBzaXplODogWzE0LjQsIDEwLCA3XSAgICAgICAgICBcXExhcmdlXG5bOSwgNywgNl0sIC8vIHNpemU5OiBbMTcuMjgsIDEyLCAxMF0gICAgICAgIFxcTEFSR0VcblsxMCwgOCwgN10sIC8vIHNpemUxMDogWzIwLjc0LCAxNC40LCAxMl0gICAgIFxcaHVnZVxuWzExLCAxMCwgOV1dO1xudmFyIHNpemVNdWx0aXBsaWVycyA9IFsvLyBmb250TWV0cmljcy5qczpnZXRHbG9iYWxNZXRyaWNzIGFsc28gdXNlcyBzaXplIGluZGV4ZXMsIHNvIGlmXG4vLyB5b3UgY2hhbmdlIHNpemUgaW5kZXhlcywgY2hhbmdlIHRoYXQgZnVuY3Rpb24uXG4wLjUsIDAuNiwgMC43LCAwLjgsIDAuOSwgMS4wLCAxLjIsIDEuNDQsIDEuNzI4LCAyLjA3NCwgMi40ODhdO1xuXG52YXIgc2l6ZUF0U3R5bGUgPSBmdW5jdGlvbiBzaXplQXRTdHlsZShzaXplLCBzdHlsZSkge1xuICByZXR1cm4gc3R5bGUuc2l6ZSA8IDIgPyBzaXplIDogc2l6ZVN0eWxlTWFwW3NpemUgLSAxXVtzdHlsZS5zaXplIC0gMV07XG59OyAvLyBJbiB0aGVzZSB0eXBlcywgXCJcIiAoZW1wdHkgc3RyaW5nKSBtZWFucyBcIm5vIGNoYW5nZVwiLlxuXG5cbi8qKlxuICogVGhpcyBpcyB0aGUgbWFpbiBvcHRpb25zIGNsYXNzLiBJdCBjb250YWlucyB0aGUgY3VycmVudCBzdHlsZSwgc2l6ZSwgY29sb3IsXG4gKiBhbmQgZm9udC5cbiAqXG4gKiBPcHRpb25zIG9iamVjdHMgc2hvdWxkIG5vdCBiZSBtb2RpZmllZC4gVG8gY3JlYXRlIGEgbmV3IE9wdGlvbnMgd2l0aFxuICogZGlmZmVyZW50IHByb3BlcnRpZXMsIGNhbGwgYSBgLmhhdmluZypgIG1ldGhvZC5cbiAqL1xudmFyIE9wdGlvbnNfT3B0aW9ucyA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIC8vIEEgZm9udCBmYW1pbHkgYXBwbGllcyB0byBhIGdyb3VwIG9mIGZvbnRzIChpLmUuIFNhbnNTZXJpZiksIHdoaWxlIGEgZm9udFxuICAvLyByZXByZXNlbnRzIGEgc3BlY2lmaWMgZm9udCAoaS5lLiBTYW5zU2VyaWYgQm9sZCkuXG4gIC8vIFNlZTogaHR0cHM6Ly90ZXguc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzIyMzUwL2RpZmZlcmVuY2UtYmV0d2Vlbi10ZXh0cm0tYW5kLW1hdGhybVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBzaXplIGluZGV4LlxuICAgKi9cbiAgZnVuY3Rpb24gT3B0aW9ucyhkYXRhKSB7XG4gICAgdGhpcy5zdHlsZSA9IHZvaWQgMDtcbiAgICB0aGlzLmNvbG9yID0gdm9pZCAwO1xuICAgIHRoaXMuc2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLnRleHRTaXplID0gdm9pZCAwO1xuICAgIHRoaXMucGhhbnRvbSA9IHZvaWQgMDtcbiAgICB0aGlzLmZvbnQgPSB2b2lkIDA7XG4gICAgdGhpcy5mb250RmFtaWx5ID0gdm9pZCAwO1xuICAgIHRoaXMuZm9udFdlaWdodCA9IHZvaWQgMDtcbiAgICB0aGlzLmZvbnRTaGFwZSA9IHZvaWQgMDtcbiAgICB0aGlzLnNpemVNdWx0aXBsaWVyID0gdm9pZCAwO1xuICAgIHRoaXMubWF4U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLm1pblJ1bGVUaGlja25lc3MgPSB2b2lkIDA7XG4gICAgdGhpcy5fZm9udE1ldHJpY3MgPSB2b2lkIDA7XG4gICAgdGhpcy5zdHlsZSA9IGRhdGEuc3R5bGU7XG4gICAgdGhpcy5jb2xvciA9IGRhdGEuY29sb3I7XG4gICAgdGhpcy5zaXplID0gZGF0YS5zaXplIHx8IE9wdGlvbnMuQkFTRVNJWkU7XG4gICAgdGhpcy50ZXh0U2l6ZSA9IGRhdGEudGV4dFNpemUgfHwgdGhpcy5zaXplO1xuICAgIHRoaXMucGhhbnRvbSA9ICEhZGF0YS5waGFudG9tO1xuICAgIHRoaXMuZm9udCA9IGRhdGEuZm9udCB8fCBcIlwiO1xuICAgIHRoaXMuZm9udEZhbWlseSA9IGRhdGEuZm9udEZhbWlseSB8fCBcIlwiO1xuICAgIHRoaXMuZm9udFdlaWdodCA9IGRhdGEuZm9udFdlaWdodCB8fCAnJztcbiAgICB0aGlzLmZvbnRTaGFwZSA9IGRhdGEuZm9udFNoYXBlIHx8ICcnO1xuICAgIHRoaXMuc2l6ZU11bHRpcGxpZXIgPSBzaXplTXVsdGlwbGllcnNbdGhpcy5zaXplIC0gMV07XG4gICAgdGhpcy5tYXhTaXplID0gZGF0YS5tYXhTaXplO1xuICAgIHRoaXMubWluUnVsZVRoaWNrbmVzcyA9IGRhdGEubWluUnVsZVRoaWNrbmVzcztcbiAgICB0aGlzLl9mb250TWV0cmljcyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBvcHRpb25zIG9iamVjdCB3aXRoIHRoZSBzYW1lIHByb3BlcnRpZXMgYXMgXCJ0aGlzXCIuICBQcm9wZXJ0aWVzXG4gICAqIGZyb20gXCJleHRlbnNpb25cIiB3aWxsIGJlIGNvcGllZCB0byB0aGUgbmV3IG9wdGlvbnMgb2JqZWN0LlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBPcHRpb25zLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZXh0ZW5kID0gZnVuY3Rpb24gZXh0ZW5kKGV4dGVuc2lvbikge1xuICAgIHZhciBkYXRhID0ge1xuICAgICAgc3R5bGU6IHRoaXMuc3R5bGUsXG4gICAgICBzaXplOiB0aGlzLnNpemUsXG4gICAgICB0ZXh0U2l6ZTogdGhpcy50ZXh0U2l6ZSxcbiAgICAgIGNvbG9yOiB0aGlzLmNvbG9yLFxuICAgICAgcGhhbnRvbTogdGhpcy5waGFudG9tLFxuICAgICAgZm9udDogdGhpcy5mb250LFxuICAgICAgZm9udEZhbWlseTogdGhpcy5mb250RmFtaWx5LFxuICAgICAgZm9udFdlaWdodDogdGhpcy5mb250V2VpZ2h0LFxuICAgICAgZm9udFNoYXBlOiB0aGlzLmZvbnRTaGFwZSxcbiAgICAgIG1heFNpemU6IHRoaXMubWF4U2l6ZSxcbiAgICAgIG1pblJ1bGVUaGlja25lc3M6IHRoaXMubWluUnVsZVRoaWNrbmVzc1xuICAgIH07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gZXh0ZW5zaW9uKSB7XG4gICAgICBpZiAoZXh0ZW5zaW9uLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgZGF0YVtrZXldID0gZXh0ZW5zaW9uW2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBPcHRpb25zKGRhdGEpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gb3B0aW9ucyBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gc3R5bGUuIElmIGB0aGlzLnN0eWxlID09PSBzdHlsZWAsXG4gICAqIHJldHVybnMgYHRoaXNgLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYXZpbmdTdHlsZSA9IGZ1bmN0aW9uIGhhdmluZ1N0eWxlKHN0eWxlKSB7XG4gICAgaWYgKHRoaXMuc3R5bGUgPT09IHN0eWxlKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBzaXplOiBzaXplQXRTdHlsZSh0aGlzLnRleHRTaXplLCBzdHlsZSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJuIGFuIG9wdGlvbnMgb2JqZWN0IHdpdGggYSBjcmFtcGVkIHZlcnNpb24gb2YgdGhlIGN1cnJlbnQgc3R5bGUuIElmXG4gICAqIHRoZSBjdXJyZW50IHN0eWxlIGlzIGNyYW1wZWQsIHJldHVybnMgYHRoaXNgLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYXZpbmdDcmFtcGVkU3R5bGUgPSBmdW5jdGlvbiBoYXZpbmdDcmFtcGVkU3R5bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGF2aW5nU3R5bGUodGhpcy5zdHlsZS5jcmFtcCgpKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIGFuIG9wdGlvbnMgb2JqZWN0IHdpdGggdGhlIGdpdmVuIHNpemUgYW5kIGluIGF0IGxlYXN0IGBcXHRleHRzdHlsZWAuXG4gICAqIFJldHVybnMgYHRoaXNgIGlmIGFwcHJvcHJpYXRlLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5oYXZpbmdTaXplID0gZnVuY3Rpb24gaGF2aW5nU2l6ZShzaXplKSB7XG4gICAgaWYgKHRoaXMuc2l6ZSA9PT0gc2l6ZSAmJiB0aGlzLnRleHRTaXplID09PSBzaXplKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgICAgc3R5bGU6IHRoaXMuc3R5bGUudGV4dCgpLFxuICAgICAgICBzaXplOiBzaXplLFxuICAgICAgICB0ZXh0U2l6ZTogc2l6ZSxcbiAgICAgICAgc2l6ZU11bHRpcGxpZXI6IHNpemVNdWx0aXBsaWVyc1tzaXplIC0gMV1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogTGlrZSBgdGhpcy5oYXZpbmdTaXplKEJBU0VTSVpFKS5oYXZpbmdTdHlsZShzdHlsZSlgLiBJZiBgc3R5bGVgIGlzIG9taXR0ZWQsXG4gICAqIGNoYW5nZXMgdG8gYXQgbGVhc3QgYFxcdGV4dHN0eWxlYC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGF2aW5nQmFzZVN0eWxlID0gZnVuY3Rpb24gaGF2aW5nQmFzZVN0eWxlKHN0eWxlKSB7XG4gICAgc3R5bGUgPSBzdHlsZSB8fCB0aGlzLnN0eWxlLnRleHQoKTtcbiAgICB2YXIgd2FudFNpemUgPSBzaXplQXRTdHlsZShPcHRpb25zLkJBU0VTSVpFLCBzdHlsZSk7XG5cbiAgICBpZiAodGhpcy5zaXplID09PSB3YW50U2l6ZSAmJiB0aGlzLnRleHRTaXplID09PSBPcHRpb25zLkJBU0VTSVpFICYmIHRoaXMuc3R5bGUgPT09IHN0eWxlKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBzaXplOiB3YW50U2l6ZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIGVmZmVjdCBvZiBzaXppbmcgY2hhbmdlcyBzdWNoIGFzIFxcSHVnZS5cbiAgICogS2VlcCB0aGUgZWZmZWN0IG9mIHRoZSBjdXJyZW50IHN0eWxlLCBzdWNoIGFzIFxcc2NyaXB0c3R5bGUuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhdmluZ0Jhc2VTaXppbmcgPSBmdW5jdGlvbiBoYXZpbmdCYXNlU2l6aW5nKCkge1xuICAgIHZhciBzaXplO1xuXG4gICAgc3dpdGNoICh0aGlzLnN0eWxlLmlkKSB7XG4gICAgICBjYXNlIDQ6XG4gICAgICBjYXNlIDU6XG4gICAgICAgIHNpemUgPSAzOyAvLyBub3JtYWxzaXplIGluIHNjcmlwdHN0eWxlXG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNjpcbiAgICAgIGNhc2UgNzpcbiAgICAgICAgc2l6ZSA9IDE7IC8vIG5vcm1hbHNpemUgaW4gc2NyaXB0c2NyaXB0c3R5bGVcblxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgc2l6ZSA9IDY7XG4gICAgICAvLyBub3JtYWxzaXplIGluIHRleHRzdHlsZSBvciBkaXNwbGF5c3R5bGVcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5leHRlbmQoe1xuICAgICAgc3R5bGU6IHRoaXMuc3R5bGUudGV4dCgpLFxuICAgICAgc2l6ZTogc2l6ZVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgb3B0aW9ucyBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gY29sb3IuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLndpdGhDb2xvciA9IGZ1bmN0aW9uIHdpdGhDb2xvcihjb2xvcikge1xuICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICBjb2xvcjogY29sb3JcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG9wdGlvbnMgb2JqZWN0IHdpdGggXCJwaGFudG9tXCIgc2V0IHRvIHRydWUuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLndpdGhQaGFudG9tID0gZnVuY3Rpb24gd2l0aFBoYW50b20oKSB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgIHBoYW50b206IHRydWVcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBvcHRpb25zIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBtYXRoIGZvbnQgb3Igb2xkIHRleHQgZm9udC5cbiAgICogQHR5cGUge1t0eXBlXX1cbiAgICovXG4gIDtcblxuICBfcHJvdG8ud2l0aEZvbnQgPSBmdW5jdGlvbiB3aXRoRm9udChmb250KSB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgIGZvbnQ6IGZvbnRcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG9wdGlvbnMgb2JqZWN0cyB3aXRoIHRoZSBnaXZlbiBmb250RmFtaWx5LlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by53aXRoVGV4dEZvbnRGYW1pbHkgPSBmdW5jdGlvbiB3aXRoVGV4dEZvbnRGYW1pbHkoZm9udEZhbWlseSkge1xuICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICBmb250RmFtaWx5OiBmb250RmFtaWx5LFxuICAgICAgZm9udDogXCJcIlxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IG9wdGlvbnMgb2JqZWN0IHdpdGggdGhlIGdpdmVuIGZvbnQgd2VpZ2h0XG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLndpdGhUZXh0Rm9udFdlaWdodCA9IGZ1bmN0aW9uIHdpdGhUZXh0Rm9udFdlaWdodChmb250V2VpZ2h0KSB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgIGZvbnRXZWlnaHQ6IGZvbnRXZWlnaHQsXG4gICAgICBmb250OiBcIlwiXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgb3B0aW9ucyBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gZm9udCB3ZWlnaHRcbiAgICovXG4gIDtcblxuICBfcHJvdG8ud2l0aFRleHRGb250U2hhcGUgPSBmdW5jdGlvbiB3aXRoVGV4dEZvbnRTaGFwZShmb250U2hhcGUpIHtcbiAgICByZXR1cm4gdGhpcy5leHRlbmQoe1xuICAgICAgZm9udFNoYXBlOiBmb250U2hhcGUsXG4gICAgICBmb250OiBcIlwiXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgQ1NTIHNpemluZyBjbGFzc2VzIHJlcXVpcmVkIHRvIHN3aXRjaCBmcm9tIGVuY2xvc2luZyBvcHRpb25zXG4gICAqIGBvbGRPcHRpb25zYCB0byBgdGhpc2AuIFJldHVybnMgYW4gYXJyYXkgb2YgY2xhc3Nlcy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uc2l6aW5nQ2xhc3NlcyA9IGZ1bmN0aW9uIHNpemluZ0NsYXNzZXMob2xkT3B0aW9ucykge1xuICAgIGlmIChvbGRPcHRpb25zLnNpemUgIT09IHRoaXMuc2l6ZSkge1xuICAgICAgcmV0dXJuIFtcInNpemluZ1wiLCBcInJlc2V0LXNpemVcIiArIG9sZE9wdGlvbnMuc2l6ZSwgXCJzaXplXCIgKyB0aGlzLnNpemVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIENTUyBzaXppbmcgY2xhc3NlcyByZXF1aXJlZCB0byBzd2l0Y2ggdG8gdGhlIGJhc2Ugc2l6ZS4gTGlrZVxuICAgKiBgdGhpcy5oYXZpbmdTaXplKEJBU0VTSVpFKS5zaXppbmdDbGFzc2VzKHRoaXMpYC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uYmFzZVNpemluZ0NsYXNzZXMgPSBmdW5jdGlvbiBiYXNlU2l6aW5nQ2xhc3NlcygpIHtcbiAgICBpZiAodGhpcy5zaXplICE9PSBPcHRpb25zLkJBU0VTSVpFKSB7XG4gICAgICByZXR1cm4gW1wic2l6aW5nXCIsIFwicmVzZXQtc2l6ZVwiICsgdGhpcy5zaXplLCBcInNpemVcIiArIE9wdGlvbnMuQkFTRVNJWkVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGZvbnQgbWV0cmljcyBmb3IgdGhpcyBzaXplLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5mb250TWV0cmljcyA9IGZ1bmN0aW9uIGZvbnRNZXRyaWNzKCkge1xuICAgIGlmICghdGhpcy5fZm9udE1ldHJpY3MpIHtcbiAgICAgIHRoaXMuX2ZvbnRNZXRyaWNzID0gZ2V0R2xvYmFsTWV0cmljcyh0aGlzLnNpemUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9mb250TWV0cmljcztcbiAgfVxuICAvKipcbiAgICogR2V0cyB0aGUgQ1NTIGNvbG9yIG9mIHRoZSBjdXJyZW50IG9wdGlvbnMgb2JqZWN0XG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmdldENvbG9yID0gZnVuY3Rpb24gZ2V0Q29sb3IoKSB7XG4gICAgaWYgKHRoaXMucGhhbnRvbSkge1xuICAgICAgcmV0dXJuIFwidHJhbnNwYXJlbnRcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuY29sb3I7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBPcHRpb25zO1xufSgpO1xuXG5PcHRpb25zX09wdGlvbnMuQkFTRVNJWkUgPSA2O1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX09wdGlvbnMgPSAoT3B0aW9uc19PcHRpb25zKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3VuaXRzLmpzXG4vKipcbiAqIFRoaXMgZmlsZSBkb2VzIGNvbnZlcnNpb24gYmV0d2VlbiB1bml0cy4gIEluIHBhcnRpY3VsYXIsIGl0IHByb3ZpZGVzXG4gKiBjYWxjdWxhdGVTaXplIHRvIGNvbnZlcnQgb3RoZXIgdW5pdHMgaW50byBlbXMuXG4gKi9cblxuIC8vIFRoaXMgdGFibGUgZ2l2ZXMgdGhlIG51bWJlciBvZiBUZVggcHRzIGluIG9uZSBvZiBlYWNoICphYnNvbHV0ZSogVGVYIHVuaXQuXG4vLyBUaHVzLCBtdWx0aXBseWluZyBhIGxlbmd0aCBieSB0aGlzIG51bWJlciBjb252ZXJ0cyB0aGUgbGVuZ3RoIGZyb20gdW5pdHNcbi8vIGludG8gcHRzLiAgRGl2aWRpbmcgdGhlIHJlc3VsdCBieSBwdFBlckVtIGdpdmVzIHRoZSBudW1iZXIgb2YgZW1zXG4vLyAqYXNzdW1pbmcqIGEgZm9udCBzaXplIG9mIHB0UGVyRW0gKG5vcm1hbCBzaXplLCBub3JtYWwgc3R5bGUpLlxuXG52YXIgcHRQZXJVbml0ID0ge1xuICAvLyBodHRwczovL2VuLndpa2lib29rcy5vcmcvd2lraS9MYVRlWC9MZW5ndGhzIGFuZFxuICAvLyBodHRwczovL3RleC5zdGFja2V4Y2hhbmdlLmNvbS9hLzgyNjNcbiAgXCJwdFwiOiAxLFxuICAvLyBUZVggcG9pbnRcbiAgXCJtbVwiOiA3MjI3IC8gMjU0MCxcbiAgLy8gbWlsbGltZXRlclxuICBcImNtXCI6IDcyMjcgLyAyNTQsXG4gIC8vIGNlbnRpbWV0ZXJcbiAgXCJpblwiOiA3Mi4yNyxcbiAgLy8gaW5jaFxuICBcImJwXCI6IDgwMyAvIDgwMCxcbiAgLy8gYmlnIChQb3N0U2NyaXB0KSBwb2ludHNcbiAgXCJwY1wiOiAxMixcbiAgLy8gcGljYVxuICBcImRkXCI6IDEyMzggLyAxMTU3LFxuICAvLyBkaWRvdFxuICBcImNjXCI6IDE0ODU2IC8gMTE1NyxcbiAgLy8gY2ljZXJvICgxMiBkaWRvdClcbiAgXCJuZFwiOiA2ODUgLyA2NDIsXG4gIC8vIG5ldyBkaWRvdFxuICBcIm5jXCI6IDEzNzAgLyAxMDcsXG4gIC8vIG5ldyBjaWNlcm8gKDEyIG5ldyBkaWRvdClcbiAgXCJzcFwiOiAxIC8gNjU1MzYsXG4gIC8vIHNjYWxlZCBwb2ludCAoVGVYJ3MgaW50ZXJuYWwgc21hbGxlc3QgdW5pdClcbiAgLy8gaHR0cHM6Ly90ZXguc3RhY2tleGNoYW5nZS5jb20vYS80MTM3MVxuICBcInB4XCI6IDgwMyAvIDgwMCAvLyBcXHBkZnB4ZGltZW4gZGVmYXVsdHMgdG8gMSBicCBpbiBwZGZUZVggYW5kIEx1YVRlWFxuXG59OyAvLyBEaWN0aW9uYXJ5IG9mIHJlbGF0aXZlIHVuaXRzLCBmb3IgZmFzdCB2YWxpZGl0eSB0ZXN0aW5nLlxuXG52YXIgcmVsYXRpdmVVbml0ID0ge1xuICBcImV4XCI6IHRydWUsXG4gIFwiZW1cIjogdHJ1ZSxcbiAgXCJtdVwiOiB0cnVlXG59O1xuXG4vKipcbiAqIERldGVybWluZSB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgdW5pdCAoZWl0aGVyIGEgc3RyaW5nIGRlZmluaW5nIHRoZSB1bml0XG4gKiBvciBhIFwic2l6ZVwiIHBhcnNlIG5vZGUgY29udGFpbmluZyBhIHVuaXQgZmllbGQpIGlzIHZhbGlkLlxuICovXG52YXIgdmFsaWRVbml0ID0gZnVuY3Rpb24gdmFsaWRVbml0KHVuaXQpIHtcbiAgaWYgKHR5cGVvZiB1bml0ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgdW5pdCA9IHVuaXQudW5pdDtcbiAgfVxuXG4gIHJldHVybiB1bml0IGluIHB0UGVyVW5pdCB8fCB1bml0IGluIHJlbGF0aXZlVW5pdCB8fCB1bml0ID09PSBcImV4XCI7XG59O1xuLypcbiAqIENvbnZlcnQgYSBcInNpemVcIiBwYXJzZSBub2RlICh3aXRoIG51bWVyaWMgXCJudW1iZXJcIiBhbmQgc3RyaW5nIFwidW5pdFwiIGZpZWxkcyxcbiAqIGFzIHBhcnNlZCBieSBmdW5jdGlvbnMuanMgYXJnVHlwZSBcInNpemVcIikgaW50byBhIENTUyBlbSB2YWx1ZSBmb3IgdGhlXG4gKiBjdXJyZW50IHN0eWxlL3NjYWxlLiAgYG9wdGlvbnNgIGdpdmVzIHRoZSBjdXJyZW50IG9wdGlvbnMuXG4gKi9cblxudmFyIHVuaXRzX2NhbGN1bGF0ZVNpemUgPSBmdW5jdGlvbiBjYWxjdWxhdGVTaXplKHNpemVWYWx1ZSwgb3B0aW9ucykge1xuICB2YXIgc2NhbGU7XG5cbiAgaWYgKHNpemVWYWx1ZS51bml0IGluIHB0UGVyVW5pdCkge1xuICAgIC8vIEFic29sdXRlIHVuaXRzXG4gICAgc2NhbGUgPSBwdFBlclVuaXRbc2l6ZVZhbHVlLnVuaXRdIC8vIENvbnZlcnQgdW5pdCB0byBwdFxuICAgIC8gb3B0aW9ucy5mb250TWV0cmljcygpLnB0UGVyRW0gLy8gQ29udmVydCBwdCB0byBDU1MgZW1cbiAgICAvIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7IC8vIFVuc2NhbGUgdG8gbWFrZSBhYnNvbHV0ZSB1bml0c1xuICB9IGVsc2UgaWYgKHNpemVWYWx1ZS51bml0ID09PSBcIm11XCIpIHtcbiAgICAvLyBgbXVgIHVuaXRzIHNjYWxlIHdpdGggc2NyaXB0c3R5bGUvc2NyaXB0c2NyaXB0c3R5bGUuXG4gICAgc2NhbGUgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuY3NzRW1QZXJNdTtcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlciByZWxhdGl2ZSB1bml0cyBhbHdheXMgcmVmZXIgdG8gdGhlICp0ZXh0c3R5bGUqIGZvbnRcbiAgICAvLyBpbiB0aGUgY3VycmVudCBzaXplLlxuICAgIHZhciB1bml0T3B0aW9ucztcblxuICAgIGlmIChvcHRpb25zLnN0eWxlLmlzVGlnaHQoKSkge1xuICAgICAgLy8gaXNUaWdodCgpIG1lYW5zIGN1cnJlbnQgc3R5bGUgaXMgc2NyaXB0L3NjcmlwdHNjcmlwdC5cbiAgICAgIHVuaXRPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShvcHRpb25zLnN0eWxlLnRleHQoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuaXRPcHRpb25zID0gb3B0aW9ucztcbiAgICB9IC8vIFRPRE86IEluIFRlWCB0aGVzZSB1bml0cyBhcmUgcmVsYXRpdmUgdG8gdGhlIHF1YWQgb2YgdGhlIGN1cnJlbnRcbiAgICAvLyAqdGV4dCogZm9udCwgZS5nLiBjbXIxMC4gS2FUZVggaW5zdGVhZCB1c2VzIHZhbHVlcyBmcm9tIHRoZVxuICAgIC8vIGNvbXBhcmFibHktc2l6ZWQgKkNvbXB1dGVyIE1vZGVybiBzeW1ib2wqIGZvbnQuIEF0IDEwcHQsIHRoZXNlXG4gICAgLy8gbWF0Y2guIEF0IDdwdCBhbmQgNXB0LCB0aGV5IGRpZmZlcjogY21yNz0xLjEzODg5NCwgY21zeTc9MS4xNzA2NDE7XG4gICAgLy8gY21yNT0xLjM2MTEzMywgY21zeTU9MS40NzIyNDEuIENvbnNpZGVyICRcXHNjcmlwdHNpemUgYVxca2VybjFlbWIkLlxuICAgIC8vIFRlWCBcXHNob3dsaXN0cyBzaG93cyBhIGtlcm4gb2YgMS4xMzg4OSAqIGZvbnRzaXplO1xuICAgIC8vIEthVGVYIHNob3dzIGEga2VybiBvZiAxLjE3MSAqIGZvbnRzaXplLlxuXG5cbiAgICBpZiAoc2l6ZVZhbHVlLnVuaXQgPT09IFwiZXhcIikge1xuICAgICAgc2NhbGUgPSB1bml0T3B0aW9ucy5mb250TWV0cmljcygpLnhIZWlnaHQ7XG4gICAgfSBlbHNlIGlmIChzaXplVmFsdWUudW5pdCA9PT0gXCJlbVwiKSB7XG4gICAgICBzY2FsZSA9IHVuaXRPcHRpb25zLmZvbnRNZXRyaWNzKCkucXVhZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCB1bml0OiAnXCIgKyBzaXplVmFsdWUudW5pdCArIFwiJ1wiKTtcbiAgICB9XG5cbiAgICBpZiAodW5pdE9wdGlvbnMgIT09IG9wdGlvbnMpIHtcbiAgICAgIHNjYWxlICo9IHVuaXRPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gTWF0aC5taW4oc2l6ZVZhbHVlLm51bWJlciAqIHNjYWxlLCBvcHRpb25zLm1heFNpemUpO1xufTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2J1aWxkQ29tbW9uLmpzXG4vKiBlc2xpbnQgbm8tY29uc29sZTowICovXG5cbi8qKlxuICogVGhpcyBtb2R1bGUgY29udGFpbnMgZ2VuZXJhbCBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCBmb3IgYnVpbGRpbmdcbiAqIGRpZmZlcmVudCBraW5kcyBvZiBkb21UcmVlIG5vZGVzIGluIGEgY29uc2lzdGVudCBtYW5uZXIuXG4gKi9cblxuXG5cblxuXG5cblxuLy8gVGhlIGZvbGxvd2luZyBoYXZlIHRvIGJlIGxvYWRlZCBmcm9tIE1haW4tSXRhbGljIGZvbnQsIHVzaW5nIGNsYXNzIG1hdGhpdFxudmFyIG1hdGhpdExldHRlcnMgPSBbXCJcXFxcaW1hdGhcIiwgXCLEsVwiLCAvLyBkb3RsZXNzIGlcblwiXFxcXGptYXRoXCIsIFwiyLdcIiwgLy8gZG90bGVzcyBqXG5cIlxcXFxwb3VuZHNcIiwgXCJcXFxcbWF0aHN0ZXJsaW5nXCIsIFwiXFxcXHRleHRzdGVybGluZ1wiLCBcIsKjXCJdO1xuLyoqXG4gKiBMb29rcyB1cCB0aGUgZ2l2ZW4gc3ltYm9sIGluIGZvbnRNZXRyaWNzLCBhZnRlciBhcHBseWluZyBhbnkgc3ltYm9sXG4gKiByZXBsYWNlbWVudHMgZGVmaW5lZCBpbiBzeW1ib2wuanNcbiAqL1xuXG52YXIgYnVpbGRDb21tb25fbG9va3VwU3ltYm9sID0gZnVuY3Rpb24gbG9va3VwU3ltYm9sKHZhbHVlLCAvLyBUT0RPKCM5NjMpOiBVc2UgYSB1bmlvbiB0eXBlIGZvciB0aGlzLlxuZm9udE5hbWUsIG1vZGUpIHtcbiAgLy8gUmVwbGFjZSB0aGUgdmFsdWUgd2l0aCBpdHMgcmVwbGFjZWQgdmFsdWUgZnJvbSBzeW1ib2wuanNcbiAgaWYgKHNyY19zeW1ib2xzW21vZGVdW3ZhbHVlXSAmJiBzcmNfc3ltYm9sc1ttb2RlXVt2YWx1ZV0ucmVwbGFjZSkge1xuICAgIHZhbHVlID0gc3JjX3N5bWJvbHNbbW9kZV1bdmFsdWVdLnJlcGxhY2U7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBtZXRyaWNzOiBnZXRDaGFyYWN0ZXJNZXRyaWNzKHZhbHVlLCBmb250TmFtZSwgbW9kZSlcbiAgfTtcbn07XG4vKipcbiAqIE1ha2VzIGEgc3ltYm9sTm9kZSBhZnRlciB0cmFuc2xhdGlvbiB2aWEgdGhlIGxpc3Qgb2Ygc3ltYm9scyBpbiBzeW1ib2xzLmpzLlxuICogQ29ycmVjdGx5IHB1bGxzIG91dCBtZXRyaWNzIGZvciB0aGUgY2hhcmFjdGVyLCBhbmQgb3B0aW9uYWxseSB0YWtlcyBhIGxpc3Qgb2ZcbiAqIGNsYXNzZXMgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIG5vZGUuXG4gKlxuICogVE9ETzogbWFrZSBhcmd1bWVudCBvcmRlciBjbG9zZXIgdG8gbWFrZVNwYW5cbiAqIFRPRE86IGFkZCBhIHNlcGFyYXRlIGFyZ3VtZW50IGZvciBtYXRoIGNsYXNzIChlLmcuIGBtb3BgLCBgbWJpbmApLCB3aGljaFxuICogc2hvdWxkIGlmIHByZXNlbnQgY29tZSBmaXJzdCBpbiBgY2xhc3Nlc2AuXG4gKiBUT0RPKCM5NTMpOiBNYWtlIGBvcHRpb25zYCBtYW5kYXRvcnkgYW5kIGFsd2F5cyBwYXNzIGl0IGluLlxuICovXG5cblxudmFyIGJ1aWxkQ29tbW9uX21ha2VTeW1ib2wgPSBmdW5jdGlvbiBtYWtlU3ltYm9sKHZhbHVlLCBmb250TmFtZSwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcykge1xuICB2YXIgbG9va3VwID0gYnVpbGRDb21tb25fbG9va3VwU3ltYm9sKHZhbHVlLCBmb250TmFtZSwgbW9kZSk7XG4gIHZhciBtZXRyaWNzID0gbG9va3VwLm1ldHJpY3M7XG4gIHZhbHVlID0gbG9va3VwLnZhbHVlO1xuICB2YXIgc3ltYm9sTm9kZTtcblxuICBpZiAobWV0cmljcykge1xuICAgIHZhciBpdGFsaWMgPSBtZXRyaWNzLml0YWxpYztcblxuICAgIGlmIChtb2RlID09PSBcInRleHRcIiB8fCBvcHRpb25zICYmIG9wdGlvbnMuZm9udCA9PT0gXCJtYXRoaXRcIikge1xuICAgICAgaXRhbGljID0gMDtcbiAgICB9XG5cbiAgICBzeW1ib2xOb2RlID0gbmV3IGRvbVRyZWVfU3ltYm9sTm9kZSh2YWx1ZSwgbWV0cmljcy5oZWlnaHQsIG1ldHJpY3MuZGVwdGgsIGl0YWxpYywgbWV0cmljcy5za2V3LCBtZXRyaWNzLndpZHRoLCBjbGFzc2VzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBUT0RPKGVtaWx5KTogRmlndXJlIG91dCBhIGdvb2Qgd2F5IHRvIG9ubHkgcHJpbnQgdGhpcyBpbiBkZXZlbG9wbWVudFxuICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIk5vIGNoYXJhY3RlciBtZXRyaWNzIFwiICsgKFwiZm9yICdcIiArIHZhbHVlICsgXCInIGluIHN0eWxlICdcIiArIGZvbnROYW1lICsgXCInIGFuZCBtb2RlICdcIiArIG1vZGUgKyBcIidcIikpO1xuICAgIHN5bWJvbE5vZGUgPSBuZXcgZG9tVHJlZV9TeW1ib2xOb2RlKHZhbHVlLCAwLCAwLCAwLCAwLCAwLCBjbGFzc2VzKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgc3ltYm9sTm9kZS5tYXhGb250U2l6ZSA9IG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG5cbiAgICBpZiAob3B0aW9ucy5zdHlsZS5pc1RpZ2h0KCkpIHtcbiAgICAgIHN5bWJvbE5vZGUuY2xhc3Nlcy5wdXNoKFwibXRpZ2h0XCIpO1xuICAgIH1cblxuICAgIHZhciBjb2xvciA9IG9wdGlvbnMuZ2V0Q29sb3IoKTtcblxuICAgIGlmIChjb2xvcikge1xuICAgICAgc3ltYm9sTm9kZS5zdHlsZS5jb2xvciA9IGNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW1ib2xOb2RlO1xufTtcbi8qKlxuICogTWFrZXMgYSBzeW1ib2wgaW4gTWFpbi1SZWd1bGFyIG9yIEFNUy1SZWd1bGFyLlxuICogVXNlZCBmb3IgcmVsLCBiaW4sIG9wZW4sIGNsb3NlLCBpbm5lciwgYW5kIHB1bmN0LlxuICovXG5cblxudmFyIGJ1aWxkQ29tbW9uX21hdGhzeW0gPSBmdW5jdGlvbiBtYXRoc3ltKHZhbHVlLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzKSB7XG4gIGlmIChjbGFzc2VzID09PSB2b2lkIDApIHtcbiAgICBjbGFzc2VzID0gW107XG4gIH1cblxuICAvLyBEZWNpZGUgd2hhdCBmb250IHRvIHJlbmRlciB0aGUgc3ltYm9sIGluIGJ5IGl0cyBlbnRyeSBpbiB0aGUgc3ltYm9sc1xuICAvLyB0YWJsZS5cbiAgLy8gSGF2ZSBhIHNwZWNpYWwgY2FzZSBmb3Igd2hlbiB0aGUgdmFsdWUgPSBcXCBiZWNhdXNlIHRoZSBcXCBpcyB1c2VkIGFzIGFcbiAgLy8gdGV4dG9yZCBpbiB1bnN1cHBvcnRlZCBjb21tYW5kIGVycm9ycyBidXQgY2Fubm90IGJlIHBhcnNlZCBhcyBhIHJlZ3VsYXJcbiAgLy8gdGV4dCBvcmRpbmFsIGFuZCBpcyB0aGVyZWZvcmUgbm90IHByZXNlbnQgYXMgYSBzeW1ib2wgaW4gdGhlIHN5bWJvbHNcbiAgLy8gdGFibGUgZm9yIHRleHQsIGFzIHdlbGwgYXMgYSBzcGVjaWFsIGNhc2UgZm9yIGJvbGRzeW1ib2wgYmVjYXVzZSBpdFxuICAvLyBjYW4gYmUgdXNlZCBmb3IgYm9sZCArIGFuZCAtXG4gIGlmIChvcHRpb25zLmZvbnQgPT09IFwiYm9sZHN5bWJvbFwiICYmIGJ1aWxkQ29tbW9uX2xvb2t1cFN5bWJvbCh2YWx1ZSwgXCJNYWluLUJvbGRcIiwgbW9kZSkubWV0cmljcykge1xuICAgIHJldHVybiBidWlsZENvbW1vbl9tYWtlU3ltYm9sKHZhbHVlLCBcIk1haW4tQm9sZFwiLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzLmNvbmNhdChbXCJtYXRoYmZcIl0pKTtcbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gXCJcXFxcXCIgfHwgc3JjX3N5bWJvbHNbbW9kZV1bdmFsdWVdLmZvbnQgPT09IFwibWFpblwiKSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uX21ha2VTeW1ib2wodmFsdWUsIFwiTWFpbi1SZWd1bGFyXCIsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBidWlsZENvbW1vbl9tYWtlU3ltYm9sKHZhbHVlLCBcIkFNUy1SZWd1bGFyXCIsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KFtcImFtc3JtXCJdKSk7XG4gIH1cbn07XG4vKipcbiAqIERldGVybWluZXMgd2hpY2ggb2YgdGhlIHR3byBmb250IG5hbWVzIChNYWluLUl0YWxpYyBhbmQgTWF0aC1JdGFsaWMpIGFuZFxuICogY29ycmVzcG9uZGluZyBzdHlsZSB0YWdzIChtYWluZGVmYXVsdCBvciBtYXRoaXQpIHRvIHVzZSBmb3IgZGVmYXVsdCBtYXRoIGZvbnQsXG4gKiBkZXBlbmRpbmcgb24gdGhlIHN5bWJvbC5cbiAqL1xuXG5cbnZhciBidWlsZENvbW1vbl9tYXRoZGVmYXVsdCA9IGZ1bmN0aW9uIG1hdGhkZWZhdWx0KHZhbHVlLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzKSB7XG4gIGlmICgvWzAtOV0vLnRlc3QodmFsdWUuY2hhckF0KDApKSB8fCAvLyBnbHlwaHMgZm9yIFxcaW1hdGggYW5kIFxcam1hdGggZG8gbm90IGV4aXN0IGluIE1hdGgtSXRhbGljIHNvIHdlXG4gIC8vIG5lZWQgdG8gdXNlIE1haW4tSXRhbGljIGluc3RlYWRcbiAgdXRpbHMuY29udGFpbnMobWF0aGl0TGV0dGVycywgdmFsdWUpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvbnROYW1lOiBcIk1haW4tSXRhbGljXCIsXG4gICAgICBmb250Q2xhc3M6IFwibWF0aGl0XCJcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICBmb250TmFtZTogXCJNYXRoLUl0YWxpY1wiLFxuICAgICAgZm9udENsYXNzOiBcIm1hdGhkZWZhdWx0XCJcbiAgICB9O1xuICB9XG59O1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoaWNoIG9mIHRoZSBmb250IG5hbWVzIChNYWluLUl0YWxpYywgTWF0aC1JdGFsaWMsIGFuZCBDYWxpZ3JhcGhpYylcbiAqIGFuZCBjb3JyZXNwb25kaW5nIHN0eWxlIHRhZ3MgKG1hdGhpdCwgbWF0aGRlZmF1bHQsIG9yIG1hdGhjYWwpIHRvIHVzZSBmb3IgZm9udFxuICogXCJtYXRobm9ybWFsXCIsIGRlcGVuZGluZyBvbiB0aGUgc3ltYm9sLiAgVXNlIHRoaXMgZnVuY3Rpb24gaW5zdGVhZCBvZiBmb250TWFwIGZvclxuICogZm9udCBcIm1hdGhub3JtYWxcIi5cbiAqL1xuXG5cbnZhciBidWlsZENvbW1vbl9tYXRobm9ybWFsID0gZnVuY3Rpb24gbWF0aG5vcm1hbCh2YWx1ZSwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcykge1xuICBpZiAodXRpbHMuY29udGFpbnMobWF0aGl0TGV0dGVycywgdmFsdWUpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvbnROYW1lOiBcIk1haW4tSXRhbGljXCIsXG4gICAgICBmb250Q2xhc3M6IFwibWF0aGl0XCJcbiAgICB9O1xuICB9IGVsc2UgaWYgKC9bMC05XS8udGVzdCh2YWx1ZS5jaGFyQXQoMCkpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvbnROYW1lOiBcIkNhbGlncmFwaGljLVJlZ3VsYXJcIixcbiAgICAgIGZvbnRDbGFzczogXCJtYXRoY2FsXCJcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICBmb250TmFtZTogXCJNYXRoLUl0YWxpY1wiLFxuICAgICAgZm9udENsYXNzOiBcIm1hdGhkZWZhdWx0XCJcbiAgICB9O1xuICB9XG59O1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoaWNoIG9mIHRoZSB0d28gZm9udCBuYW1lcyAoTWFpbi1Cb2xkIGFuZCBNYXRoLUJvbGRJdGFsaWMpIGFuZFxuICogY29ycmVzcG9uZGluZyBzdHlsZSB0YWdzIChtYXRoYmYgb3IgYm9sZHN5bWJvbCkgdG8gdXNlIGZvciBmb250IFwiYm9sZHN5bWJvbFwiLFxuICogZGVwZW5kaW5nIG9uIHRoZSBzeW1ib2wuICBVc2UgdGhpcyBmdW5jdGlvbiBpbnN0ZWFkIG9mIGZvbnRNYXAgZm9yIGZvbnRcbiAqIFwiYm9sZHN5bWJvbFwiLlxuICovXG5cblxudmFyIGJvbGRzeW1ib2wgPSBmdW5jdGlvbiBib2xkc3ltYm9sKHZhbHVlLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzKSB7XG4gIGlmIChidWlsZENvbW1vbl9sb29rdXBTeW1ib2wodmFsdWUsIFwiTWF0aC1Cb2xkSXRhbGljXCIsIG1vZGUpLm1ldHJpY3MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9udE5hbWU6IFwiTWF0aC1Cb2xkSXRhbGljXCIsXG4gICAgICBmb250Q2xhc3M6IFwiYm9sZHN5bWJvbFwiXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBTb21lIGdseXBocyBkbyBub3QgZXhpc3QgaW4gTWF0aC1Cb2xkSXRhbGljIHNvIHdlIG5lZWQgdG8gdXNlXG4gICAgLy8gTWFpbi1Cb2xkIGluc3RlYWQuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZvbnROYW1lOiBcIk1haW4tQm9sZFwiLFxuICAgICAgZm9udENsYXNzOiBcIm1hdGhiZlwiXG4gICAgfTtcbiAgfVxufTtcbi8qKlxuICogTWFrZXMgZWl0aGVyIGEgbWF0aG9yZCBvciB0ZXh0b3JkIGluIHRoZSBjb3JyZWN0IGZvbnQgYW5kIGNvbG9yLlxuICovXG5cblxudmFyIGJ1aWxkQ29tbW9uX21ha2VPcmQgPSBmdW5jdGlvbiBtYWtlT3JkKGdyb3VwLCBvcHRpb25zLCB0eXBlKSB7XG4gIHZhciBtb2RlID0gZ3JvdXAubW9kZTtcbiAgdmFyIHRleHQgPSBncm91cC50ZXh0O1xuICB2YXIgY2xhc3NlcyA9IFtcIm1vcmRcIl07IC8vIE1hdGggbW9kZSBvciBPbGQgZm9udCAoaS5lLiBcXHJtKVxuXG4gIHZhciBpc0ZvbnQgPSBtb2RlID09PSBcIm1hdGhcIiB8fCBtb2RlID09PSBcInRleHRcIiAmJiBvcHRpb25zLmZvbnQ7XG4gIHZhciBmb250T3JGYW1pbHkgPSBpc0ZvbnQgPyBvcHRpb25zLmZvbnQgOiBvcHRpb25zLmZvbnRGYW1pbHk7XG5cbiAgaWYgKHRleHQuY2hhckNvZGVBdCgwKSA9PT0gMHhEODM1KSB7XG4gICAgLy8gc3Vycm9nYXRlIHBhaXJzIGdldCBzcGVjaWFsIHRyZWF0bWVudFxuICAgIHZhciBfd2lkZUNoYXJhY3RlckZvbnQgPSB3aWRlX2NoYXJhY3Rlcl93aWRlQ2hhcmFjdGVyRm9udCh0ZXh0LCBtb2RlKSxcbiAgICAgICAgd2lkZUZvbnROYW1lID0gX3dpZGVDaGFyYWN0ZXJGb250WzBdLFxuICAgICAgICB3aWRlRm9udENsYXNzID0gX3dpZGVDaGFyYWN0ZXJGb250WzFdO1xuXG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uX21ha2VTeW1ib2wodGV4dCwgd2lkZUZvbnROYW1lLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzLmNvbmNhdCh3aWRlRm9udENsYXNzKSk7XG4gIH0gZWxzZSBpZiAoZm9udE9yRmFtaWx5KSB7XG4gICAgdmFyIGZvbnROYW1lO1xuICAgIHZhciBmb250Q2xhc3NlcztcblxuICAgIGlmIChmb250T3JGYW1pbHkgPT09IFwiYm9sZHN5bWJvbFwiIHx8IGZvbnRPckZhbWlseSA9PT0gXCJtYXRobm9ybWFsXCIpIHtcbiAgICAgIHZhciBmb250RGF0YSA9IGZvbnRPckZhbWlseSA9PT0gXCJib2xkc3ltYm9sXCIgPyBib2xkc3ltYm9sKHRleHQsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMpIDogYnVpbGRDb21tb25fbWF0aG5vcm1hbCh0ZXh0LCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzKTtcbiAgICAgIGZvbnROYW1lID0gZm9udERhdGEuZm9udE5hbWU7XG4gICAgICBmb250Q2xhc3NlcyA9IFtmb250RGF0YS5mb250Q2xhc3NdO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuY29udGFpbnMobWF0aGl0TGV0dGVycywgdGV4dCkpIHtcbiAgICAgIGZvbnROYW1lID0gXCJNYWluLUl0YWxpY1wiO1xuICAgICAgZm9udENsYXNzZXMgPSBbXCJtYXRoaXRcIl07XG4gICAgfSBlbHNlIGlmIChpc0ZvbnQpIHtcbiAgICAgIGZvbnROYW1lID0gZm9udE1hcFtmb250T3JGYW1pbHldLmZvbnROYW1lO1xuICAgICAgZm9udENsYXNzZXMgPSBbZm9udE9yRmFtaWx5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9udE5hbWUgPSByZXRyaWV2ZVRleHRGb250TmFtZShmb250T3JGYW1pbHksIG9wdGlvbnMuZm9udFdlaWdodCwgb3B0aW9ucy5mb250U2hhcGUpO1xuICAgICAgZm9udENsYXNzZXMgPSBbZm9udE9yRmFtaWx5LCBvcHRpb25zLmZvbnRXZWlnaHQsIG9wdGlvbnMuZm9udFNoYXBlXTtcbiAgICB9XG5cbiAgICBpZiAoYnVpbGRDb21tb25fbG9va3VwU3ltYm9sKHRleHQsIGZvbnROYW1lLCBtb2RlKS5tZXRyaWNzKSB7XG4gICAgICByZXR1cm4gYnVpbGRDb21tb25fbWFrZVN5bWJvbCh0ZXh0LCBmb250TmFtZSwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcy5jb25jYXQoZm9udENsYXNzZXMpKTtcbiAgICB9IGVsc2UgaWYgKGxpZ2F0dXJlcy5oYXNPd25Qcm9wZXJ0eSh0ZXh0KSAmJiBmb250TmFtZS5zdWJzdHIoMCwgMTApID09PSBcIlR5cGV3cml0ZXJcIikge1xuICAgICAgLy8gRGVjb25zdHJ1Y3QgbGlnYXR1cmVzIGluIG1vbm9zcGFjZSBmb250cyAoXFx0ZXh0dHQsIFxcdHQpLlxuICAgICAgdmFyIHBhcnRzID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBwYXJ0cy5wdXNoKGJ1aWxkQ29tbW9uX21ha2VTeW1ib2wodGV4dFtpXSwgZm9udE5hbWUsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KGZvbnRDbGFzc2VzKSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYnVpbGRDb21tb25fbWFrZUZyYWdtZW50KHBhcnRzKTtcbiAgICB9XG4gIH0gLy8gTWFrZXMgYSBzeW1ib2wgaW4gdGhlIGRlZmF1bHQgZm9udCBmb3IgbWF0aG9yZHMgYW5kIHRleHRvcmRzLlxuXG5cbiAgaWYgKHR5cGUgPT09IFwibWF0aG9yZFwiKSB7XG4gICAgdmFyIGZvbnRMb29rdXAgPSBidWlsZENvbW1vbl9tYXRoZGVmYXVsdCh0ZXh0LCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb25fbWFrZVN5bWJvbCh0ZXh0LCBmb250TG9va3VwLmZvbnROYW1lLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzLmNvbmNhdChbZm9udExvb2t1cC5mb250Q2xhc3NdKSk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJ0ZXh0b3JkXCIpIHtcbiAgICB2YXIgZm9udCA9IHNyY19zeW1ib2xzW21vZGVdW3RleHRdICYmIHNyY19zeW1ib2xzW21vZGVdW3RleHRdLmZvbnQ7XG5cbiAgICBpZiAoZm9udCA9PT0gXCJhbXNcIikge1xuICAgICAgdmFyIF9mb250TmFtZSA9IHJldHJpZXZlVGV4dEZvbnROYW1lKFwiYW1zcm1cIiwgb3B0aW9ucy5mb250V2VpZ2h0LCBvcHRpb25zLmZvbnRTaGFwZSk7XG5cbiAgICAgIHJldHVybiBidWlsZENvbW1vbl9tYWtlU3ltYm9sKHRleHQsIF9mb250TmFtZSwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcy5jb25jYXQoXCJhbXNybVwiLCBvcHRpb25zLmZvbnRXZWlnaHQsIG9wdGlvbnMuZm9udFNoYXBlKSk7XG4gICAgfSBlbHNlIGlmIChmb250ID09PSBcIm1haW5cIiB8fCAhZm9udCkge1xuICAgICAgdmFyIF9mb250TmFtZTIgPSByZXRyaWV2ZVRleHRGb250TmFtZShcInRleHRybVwiLCBvcHRpb25zLmZvbnRXZWlnaHQsIG9wdGlvbnMuZm9udFNoYXBlKTtcblxuICAgICAgcmV0dXJuIGJ1aWxkQ29tbW9uX21ha2VTeW1ib2wodGV4dCwgX2ZvbnROYW1lMiwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcy5jb25jYXQob3B0aW9ucy5mb250V2VpZ2h0LCBvcHRpb25zLmZvbnRTaGFwZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmb250cyBhZGRlZCBieSBwbHVnaW5zXG4gICAgICB2YXIgX2ZvbnROYW1lMyA9IHJldHJpZXZlVGV4dEZvbnROYW1lKGZvbnQsIG9wdGlvbnMuZm9udFdlaWdodCwgb3B0aW9ucy5mb250U2hhcGUpOyAvLyBXZSBhZGQgZm9udCBuYW1lIGFzIGEgY3NzIGNsYXNzXG5cblxuICAgICAgcmV0dXJuIGJ1aWxkQ29tbW9uX21ha2VTeW1ib2wodGV4dCwgX2ZvbnROYW1lMywgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcy5jb25jYXQoX2ZvbnROYW1lMywgb3B0aW9ucy5mb250V2VpZ2h0LCBvcHRpb25zLmZvbnRTaGFwZSkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmV4cGVjdGVkIHR5cGU6IFwiICsgdHlwZSArIFwiIGluIG1ha2VPcmRcIik7XG4gIH1cbn07XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBzdWJzZXF1ZW50IHN5bWJvbE5vZGVzIGhhdmUgdGhlIHNhbWUgY2xhc3Nlcywgc2tldywgbWF4Rm9udCxcbiAqIGFuZCBzdHlsZXMuXG4gKi9cblxuXG52YXIgYnVpbGRDb21tb25fY2FuQ29tYmluZSA9IGZ1bmN0aW9uIGNhbkNvbWJpbmUocHJldiwgbmV4dCkge1xuICBpZiAoY3JlYXRlQ2xhc3MocHJldi5jbGFzc2VzKSAhPT0gY3JlYXRlQ2xhc3MobmV4dC5jbGFzc2VzKSB8fCBwcmV2LnNrZXcgIT09IG5leHQuc2tldyB8fCBwcmV2Lm1heEZvbnRTaXplICE9PSBuZXh0Lm1heEZvbnRTaXplKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIgc3R5bGUgaW4gcHJldi5zdHlsZSkge1xuICAgIGlmIChwcmV2LnN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlKSAmJiBwcmV2LnN0eWxlW3N0eWxlXSAhPT0gbmV4dC5zdHlsZVtzdHlsZV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBfc3R5bGUgaW4gbmV4dC5zdHlsZSkge1xuICAgIGlmIChuZXh0LnN0eWxlLmhhc093blByb3BlcnR5KF9zdHlsZSkgJiYgcHJldi5zdHlsZVtfc3R5bGVdICE9PSBuZXh0LnN0eWxlW19zdHlsZV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG4vKipcbiAqIENvbWJpbmUgY29uc2VxdWV0aXZlIGRvbVRyZWUuc3ltYm9sTm9kZXMgaW50byBhIHNpbmdsZSBzeW1ib2xOb2RlLlxuICogTm90ZTogdGhpcyBmdW5jdGlvbiBtdXRhdGVzIHRoZSBhcmd1bWVudC5cbiAqL1xuXG5cbnZhciBidWlsZENvbW1vbl90cnlDb21iaW5lQ2hhcnMgPSBmdW5jdGlvbiB0cnlDb21iaW5lQ2hhcnMoY2hhcnMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICB2YXIgcHJldiA9IGNoYXJzW2ldO1xuICAgIHZhciBuZXh0ID0gY2hhcnNbaSArIDFdO1xuXG4gICAgaWYgKHByZXYgaW5zdGFuY2VvZiBkb21UcmVlX1N5bWJvbE5vZGUgJiYgbmV4dCBpbnN0YW5jZW9mIGRvbVRyZWVfU3ltYm9sTm9kZSAmJiBidWlsZENvbW1vbl9jYW5Db21iaW5lKHByZXYsIG5leHQpKSB7XG4gICAgICBwcmV2LnRleHQgKz0gbmV4dC50ZXh0O1xuICAgICAgcHJldi5oZWlnaHQgPSBNYXRoLm1heChwcmV2LmhlaWdodCwgbmV4dC5oZWlnaHQpO1xuICAgICAgcHJldi5kZXB0aCA9IE1hdGgubWF4KHByZXYuZGVwdGgsIG5leHQuZGVwdGgpOyAvLyBVc2UgdGhlIGxhc3QgY2hhcmFjdGVyJ3MgaXRhbGljIGNvcnJlY3Rpb24gc2luY2Ugd2UgdXNlXG4gICAgICAvLyBpdCB0byBhZGQgcGFkZGluZyB0byB0aGUgcmlnaHQgb2YgdGhlIHNwYW4gY3JlYXRlZCBmcm9tXG4gICAgICAvLyB0aGUgY29tYmluZWQgY2hhcmFjdGVycy5cblxuICAgICAgcHJldi5pdGFsaWMgPSBuZXh0Lml0YWxpYztcbiAgICAgIGNoYXJzLnNwbGljZShpICsgMSwgMSk7XG4gICAgICBpLS07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNoYXJzO1xufTtcbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBoZWlnaHQsIGRlcHRoLCBhbmQgbWF4Rm9udFNpemUgb2YgYW4gZWxlbWVudCBiYXNlZCBvbiBpdHNcbiAqIGNoaWxkcmVuLlxuICovXG5cblxudmFyIHNpemVFbGVtZW50RnJvbUNoaWxkcmVuID0gZnVuY3Rpb24gc2l6ZUVsZW1lbnRGcm9tQ2hpbGRyZW4oZWxlbSkge1xuICB2YXIgaGVpZ2h0ID0gMDtcbiAgdmFyIGRlcHRoID0gMDtcbiAgdmFyIG1heEZvbnRTaXplID0gMDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW0uY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2hpbGQgPSBlbGVtLmNoaWxkcmVuW2ldO1xuXG4gICAgaWYgKGNoaWxkLmhlaWdodCA+IGhlaWdodCkge1xuICAgICAgaGVpZ2h0ID0gY2hpbGQuaGVpZ2h0O1xuICAgIH1cblxuICAgIGlmIChjaGlsZC5kZXB0aCA+IGRlcHRoKSB7XG4gICAgICBkZXB0aCA9IGNoaWxkLmRlcHRoO1xuICAgIH1cblxuICAgIGlmIChjaGlsZC5tYXhGb250U2l6ZSA+IG1heEZvbnRTaXplKSB7XG4gICAgICBtYXhGb250U2l6ZSA9IGNoaWxkLm1heEZvbnRTaXplO1xuICAgIH1cbiAgfVxuXG4gIGVsZW0uaGVpZ2h0ID0gaGVpZ2h0O1xuICBlbGVtLmRlcHRoID0gZGVwdGg7XG4gIGVsZW0ubWF4Rm9udFNpemUgPSBtYXhGb250U2l6ZTtcbn07XG4vKipcbiAqIE1ha2VzIGEgc3BhbiB3aXRoIHRoZSBnaXZlbiBsaXN0IG9mIGNsYXNzZXMsIGxpc3Qgb2YgY2hpbGRyZW4sIGFuZCBvcHRpb25zLlxuICpcbiAqIFRPRE8oIzk1Myk6IEVuc3VyZSB0aGF0IGBvcHRpb25zYCBpcyBhbHdheXMgcHJvdmlkZWQgKGN1cnJlbnRseSBzb21lIGNhbGxcbiAqIHNpdGVzIGRvbid0IHBhc3MgaXQpIGFuZCBtYWtlIHRoZSB0eXBlIGJlbG93IG1hbmRhdG9yeS5cbiAqIFRPRE86IGFkZCBhIHNlcGFyYXRlIGFyZ3VtZW50IGZvciBtYXRoIGNsYXNzIChlLmcuIGBtb3BgLCBgbWJpbmApLCB3aGljaFxuICogc2hvdWxkIGlmIHByZXNlbnQgY29tZSBmaXJzdCBpbiBgY2xhc3Nlc2AuXG4gKi9cblxuXG52YXIgYnVpbGRDb21tb25fbWFrZVNwYW4gPSBmdW5jdGlvbiBtYWtlU3BhbihjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucywgc3R5bGUpIHtcbiAgdmFyIHNwYW4gPSBuZXcgZG9tVHJlZV9TcGFuKGNsYXNzZXMsIGNoaWxkcmVuLCBvcHRpb25zLCBzdHlsZSk7XG4gIHNpemVFbGVtZW50RnJvbUNoaWxkcmVuKHNwYW4pO1xuICByZXR1cm4gc3Bhbjtcbn07IC8vIFNWRyBvbmUgaXMgc2ltcGxlciAtLSBkb2Vzbid0IHJlcXVpcmUgaGVpZ2h0LCBkZXB0aCwgbWF4LWZvbnQgc2V0dGluZy5cbi8vIFRoaXMgaXMgYWxzbyBhIHNlcGFyYXRlIG1ldGhvZCBmb3IgdHlwZXNhZmV0eS5cblxuXG52YXIgYnVpbGRDb21tb25fbWFrZVN2Z1NwYW4gPSBmdW5jdGlvbiBtYWtlU3ZnU3BhbihjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucywgc3R5bGUpIHtcbiAgcmV0dXJuIG5ldyBkb21UcmVlX1NwYW4oY2xhc3NlcywgY2hpbGRyZW4sIG9wdGlvbnMsIHN0eWxlKTtcbn07XG5cbnZhciBtYWtlTGluZVNwYW4gPSBmdW5jdGlvbiBtYWtlTGluZVNwYW4oY2xhc3NOYW1lLCBvcHRpb25zLCB0aGlja25lc3MpIHtcbiAgdmFyIGxpbmUgPSBidWlsZENvbW1vbl9tYWtlU3BhbihbY2xhc3NOYW1lXSwgW10sIG9wdGlvbnMpO1xuICBsaW5lLmhlaWdodCA9IE1hdGgubWF4KHRoaWNrbmVzcyB8fCBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3MsIG9wdGlvbnMubWluUnVsZVRoaWNrbmVzcyk7XG4gIGxpbmUuc3R5bGUuYm9yZGVyQm90dG9tV2lkdGggPSBsaW5lLmhlaWdodCArIFwiZW1cIjtcbiAgbGluZS5tYXhGb250U2l6ZSA9IDEuMDtcbiAgcmV0dXJuIGxpbmU7XG59O1xuLyoqXG4gKiBNYWtlcyBhbiBhbmNob3Igd2l0aCB0aGUgZ2l2ZW4gaHJlZiwgbGlzdCBvZiBjbGFzc2VzLCBsaXN0IG9mIGNoaWxkcmVuLFxuICogYW5kIG9wdGlvbnMuXG4gKi9cblxuXG52YXIgYnVpbGRDb21tb25fbWFrZUFuY2hvciA9IGZ1bmN0aW9uIG1ha2VBbmNob3IoaHJlZiwgY2xhc3NlcywgY2hpbGRyZW4sIG9wdGlvbnMpIHtcbiAgdmFyIGFuY2hvciA9IG5ldyBkb21UcmVlX0FuY2hvcihocmVmLCBjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucyk7XG4gIHNpemVFbGVtZW50RnJvbUNoaWxkcmVuKGFuY2hvcik7XG4gIHJldHVybiBhbmNob3I7XG59O1xuLyoqXG4gKiBNYWtlcyBhIGRvY3VtZW50IGZyYWdtZW50IHdpdGggdGhlIGdpdmVuIGxpc3Qgb2YgY2hpbGRyZW4uXG4gKi9cblxuXG52YXIgYnVpbGRDb21tb25fbWFrZUZyYWdtZW50ID0gZnVuY3Rpb24gbWFrZUZyYWdtZW50KGNoaWxkcmVuKSB7XG4gIHZhciBmcmFnbWVudCA9IG5ldyB0cmVlX0RvY3VtZW50RnJhZ21lbnQoY2hpbGRyZW4pO1xuICBzaXplRWxlbWVudEZyb21DaGlsZHJlbihmcmFnbWVudCk7XG4gIHJldHVybiBmcmFnbWVudDtcbn07XG4vKipcbiAqIFdyYXBzIGdyb3VwIGluIGEgc3BhbiBpZiBpdCdzIGEgZG9jdW1lbnQgZnJhZ21lbnQsIGFsbG93aW5nIHRvIGFwcGx5IGNsYXNzZXNcbiAqIGFuZCBzdHlsZXNcbiAqL1xuXG5cbnZhciBidWlsZENvbW1vbl93cmFwRnJhZ21lbnQgPSBmdW5jdGlvbiB3cmFwRnJhZ21lbnQoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgaWYgKGdyb3VwIGluc3RhbmNlb2YgdHJlZV9Eb2N1bWVudEZyYWdtZW50KSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uX21ha2VTcGFuKFtdLCBbZ3JvdXBdLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJldHVybiBncm91cDtcbn07IC8vIFRoZXNlIGFyZSBleGFjdCBvYmplY3QgdHlwZXMgdG8gY2F0Y2ggdHlwb3MgaW4gdGhlIG5hbWVzIG9mIHRoZSBvcHRpb25hbCBmaWVsZHMuXG5cblxuLy8gQ29tcHV0ZXMgdGhlIHVwZGF0ZWQgYGNoaWxkcmVuYCBsaXN0IGFuZCB0aGUgb3ZlcmFsbCBkZXB0aC5cbi8vXG4vLyBUaGlzIGhlbHBlciBmdW5jdGlvbiBmb3IgbWFrZVZMaXN0IG1ha2VzIGl0IGVhc2llciB0byBlbmZvcmNlIHR5cGUgc2FmZXR5IGJ5XG4vLyBhbGxvd2luZyBlYXJseSBleGl0cyAocmV0dXJucykgaW4gdGhlIGxvZ2ljLlxudmFyIGdldFZMaXN0Q2hpbGRyZW5BbmREZXB0aCA9IGZ1bmN0aW9uIGdldFZMaXN0Q2hpbGRyZW5BbmREZXB0aChwYXJhbXMpIHtcbiAgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwiaW5kaXZpZHVhbFNoaWZ0XCIpIHtcbiAgICB2YXIgb2xkQ2hpbGRyZW4gPSBwYXJhbXMuY2hpbGRyZW47XG4gICAgdmFyIGNoaWxkcmVuID0gW29sZENoaWxkcmVuWzBdXTsgLy8gQWRkIGluIGtlcm5zIHRvIHRoZSBsaXN0IG9mIHBhcmFtcy5jaGlsZHJlbiB0byBnZXQgZWFjaCBlbGVtZW50IHRvIGJlXG4gICAgLy8gc2hpZnRlZCB0byB0aGUgY29ycmVjdCBzcGVjaWZpZWQgc2hpZnRcblxuICAgIHZhciBfZGVwdGggPSAtb2xkQ2hpbGRyZW5bMF0uc2hpZnQgLSBvbGRDaGlsZHJlblswXS5lbGVtLmRlcHRoO1xuXG4gICAgdmFyIGN1cnJQb3MgPSBfZGVwdGg7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IG9sZENoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGlmZiA9IC1vbGRDaGlsZHJlbltpXS5zaGlmdCAtIGN1cnJQb3MgLSBvbGRDaGlsZHJlbltpXS5lbGVtLmRlcHRoO1xuICAgICAgdmFyIHNpemUgPSBkaWZmIC0gKG9sZENoaWxkcmVuW2kgLSAxXS5lbGVtLmhlaWdodCArIG9sZENoaWxkcmVuW2kgLSAxXS5lbGVtLmRlcHRoKTtcbiAgICAgIGN1cnJQb3MgPSBjdXJyUG9zICsgZGlmZjtcbiAgICAgIGNoaWxkcmVuLnB1c2goe1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogc2l6ZVxuICAgICAgfSk7XG4gICAgICBjaGlsZHJlbi5wdXNoKG9sZENoaWxkcmVuW2ldKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgICAgZGVwdGg6IF9kZXB0aFxuICAgIH07XG4gIH1cblxuICB2YXIgZGVwdGg7XG5cbiAgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwidG9wXCIpIHtcbiAgICAvLyBXZSBhbHdheXMgc3RhcnQgYXQgdGhlIGJvdHRvbSwgc28gY2FsY3VsYXRlIHRoZSBib3R0b20gYnkgYWRkaW5nIHVwXG4gICAgLy8gYWxsIHRoZSBzaXplc1xuICAgIHZhciBib3R0b20gPSBwYXJhbXMucG9zaXRpb25EYXRhO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHBhcmFtcy5jaGlsZHJlbi5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IHBhcmFtcy5jaGlsZHJlbltfaV07XG4gICAgICBib3R0b20gLT0gY2hpbGQudHlwZSA9PT0gXCJrZXJuXCIgPyBjaGlsZC5zaXplIDogY2hpbGQuZWxlbS5oZWlnaHQgKyBjaGlsZC5lbGVtLmRlcHRoO1xuICAgIH1cblxuICAgIGRlcHRoID0gYm90dG9tO1xuICB9IGVsc2UgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwiYm90dG9tXCIpIHtcbiAgICBkZXB0aCA9IC1wYXJhbXMucG9zaXRpb25EYXRhO1xuICB9IGVsc2Uge1xuICAgIHZhciBmaXJzdENoaWxkID0gcGFyYW1zLmNoaWxkcmVuWzBdO1xuXG4gICAgaWYgKGZpcnN0Q2hpbGQudHlwZSAhPT0gXCJlbGVtXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmlyc3QgY2hpbGQgbXVzdCBoYXZlIHR5cGUgXCJlbGVtXCIuJyk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwic2hpZnRcIikge1xuICAgICAgZGVwdGggPSAtZmlyc3RDaGlsZC5lbGVtLmRlcHRoIC0gcGFyYW1zLnBvc2l0aW9uRGF0YTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwiZmlyc3RCYXNlbGluZVwiKSB7XG4gICAgICBkZXB0aCA9IC1maXJzdENoaWxkLmVsZW0uZGVwdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcG9zaXRpb25UeXBlIFwiICsgcGFyYW1zLnBvc2l0aW9uVHlwZSArIFwiLlwiKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNoaWxkcmVuOiBwYXJhbXMuY2hpbGRyZW4sXG4gICAgZGVwdGg6IGRlcHRoXG4gIH07XG59O1xuLyoqXG4gKiBNYWtlcyBhIHZlcnRpY2FsIGxpc3QgYnkgc3RhY2tpbmcgZWxlbWVudHMgYW5kIGtlcm5zIG9uIHRvcCBvZiBlYWNoIG90aGVyLlxuICogQWxsb3dzIGZvciBtYW55IGRpZmZlcmVudCB3YXlzIG9mIHNwZWNpZnlpbmcgdGhlIHBvc2l0aW9uaW5nIG1ldGhvZC5cbiAqXG4gKiBTZWUgVkxpc3RQYXJhbSBkb2N1bWVudGF0aW9uIGFib3ZlLlxuICovXG5cblxudmFyIGJ1aWxkQ29tbW9uX21ha2VWTGlzdCA9IGZ1bmN0aW9uIG1ha2VWTGlzdChwYXJhbXMsIG9wdGlvbnMpIHtcbiAgdmFyIF9nZXRWTGlzdENoaWxkcmVuQW5kRCA9IGdldFZMaXN0Q2hpbGRyZW5BbmREZXB0aChwYXJhbXMpLFxuICAgICAgY2hpbGRyZW4gPSBfZ2V0Vkxpc3RDaGlsZHJlbkFuZEQuY2hpbGRyZW4sXG4gICAgICBkZXB0aCA9IF9nZXRWTGlzdENoaWxkcmVuQW5kRC5kZXB0aDsgLy8gQ3JlYXRlIGEgc3RydXQgdGhhdCBpcyB0YWxsZXIgdGhhbiBhbnkgbGlzdCBpdGVtLiBUaGUgc3RydXQgaXMgYWRkZWQgdG9cbiAgLy8gZWFjaCBpdGVtLCB3aGVyZSBpdCB3aWxsIGRldGVybWluZSB0aGUgaXRlbSdzIGJhc2VsaW5lLiBTaW5jZSBpdCBoYXNcbiAgLy8gYG92ZXJmbG93OmhpZGRlbmAsIHRoZSBzdHJ1dCdzIHRvcCBlZGdlIHdpbGwgc2l0IG9uIHRoZSBpdGVtJ3MgbGluZSBib3gnc1xuICAvLyB0b3AgZWRnZSBhbmQgdGhlIHN0cnV0J3MgYm90dG9tIGVkZ2Ugd2lsbCBzaXQgb24gdGhlIGl0ZW0ncyBiYXNlbGluZSxcbiAgLy8gd2l0aCBubyBhZGRpdGlvbmFsIGxpbmUtaGVpZ2h0IHNwYWNpbmcuIFRoaXMgYWxsb3dzIHRoZSBpdGVtIGJhc2VsaW5lIHRvXG4gIC8vIGJlIHBvc2l0aW9uZWQgcHJlY2lzZWx5IHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgZm9udCBhc2NlbnQgYW5kXG4gIC8vIGxpbmUtaGVpZ2h0LlxuXG5cbiAgdmFyIHBzdHJ1dFNpemUgPSAwO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTtcblxuICAgIGlmIChjaGlsZC50eXBlID09PSBcImVsZW1cIikge1xuICAgICAgdmFyIGVsZW0gPSBjaGlsZC5lbGVtO1xuICAgICAgcHN0cnV0U2l6ZSA9IE1hdGgubWF4KHBzdHJ1dFNpemUsIGVsZW0ubWF4Rm9udFNpemUsIGVsZW0uaGVpZ2h0KTtcbiAgICB9XG4gIH1cblxuICBwc3RydXRTaXplICs9IDI7XG4gIHZhciBwc3RydXQgPSBidWlsZENvbW1vbl9tYWtlU3BhbihbXCJwc3RydXRcIl0sIFtdKTtcbiAgcHN0cnV0LnN0eWxlLmhlaWdodCA9IHBzdHJ1dFNpemUgKyBcImVtXCI7IC8vIENyZWF0ZSBhIG5ldyBsaXN0IG9mIGFjdHVhbCBjaGlsZHJlbiBhdCB0aGUgY29ycmVjdCBvZmZzZXRzXG5cbiAgdmFyIHJlYWxDaGlsZHJlbiA9IFtdO1xuICB2YXIgbWluUG9zID0gZGVwdGg7XG4gIHZhciBtYXhQb3MgPSBkZXB0aDtcbiAgdmFyIGN1cnJQb3MgPSBkZXB0aDtcblxuICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBjaGlsZHJlbi5sZW5ndGg7IF9pMisrKSB7XG4gICAgdmFyIF9jaGlsZCA9IGNoaWxkcmVuW19pMl07XG5cbiAgICBpZiAoX2NoaWxkLnR5cGUgPT09IFwia2VyblwiKSB7XG4gICAgICBjdXJyUG9zICs9IF9jaGlsZC5zaXplO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX2VsZW0gPSBfY2hpbGQuZWxlbTtcbiAgICAgIHZhciBjbGFzc2VzID0gX2NoaWxkLndyYXBwZXJDbGFzc2VzIHx8IFtdO1xuICAgICAgdmFyIHN0eWxlID0gX2NoaWxkLndyYXBwZXJTdHlsZSB8fCB7fTtcbiAgICAgIHZhciBjaGlsZFdyYXAgPSBidWlsZENvbW1vbl9tYWtlU3BhbihjbGFzc2VzLCBbcHN0cnV0LCBfZWxlbV0sIHVuZGVmaW5lZCwgc3R5bGUpO1xuICAgICAgY2hpbGRXcmFwLnN0eWxlLnRvcCA9IC1wc3RydXRTaXplIC0gY3VyclBvcyAtIF9lbGVtLmRlcHRoICsgXCJlbVwiO1xuXG4gICAgICBpZiAoX2NoaWxkLm1hcmdpbkxlZnQpIHtcbiAgICAgICAgY2hpbGRXcmFwLnN0eWxlLm1hcmdpbkxlZnQgPSBfY2hpbGQubWFyZ2luTGVmdDtcbiAgICAgIH1cblxuICAgICAgaWYgKF9jaGlsZC5tYXJnaW5SaWdodCkge1xuICAgICAgICBjaGlsZFdyYXAuc3R5bGUubWFyZ2luUmlnaHQgPSBfY2hpbGQubWFyZ2luUmlnaHQ7XG4gICAgICB9XG5cbiAgICAgIHJlYWxDaGlsZHJlbi5wdXNoKGNoaWxkV3JhcCk7XG4gICAgICBjdXJyUG9zICs9IF9lbGVtLmhlaWdodCArIF9lbGVtLmRlcHRoO1xuICAgIH1cblxuICAgIG1pblBvcyA9IE1hdGgubWluKG1pblBvcywgY3VyclBvcyk7XG4gICAgbWF4UG9zID0gTWF0aC5tYXgobWF4UG9zLCBjdXJyUG9zKTtcbiAgfSAvLyBUaGUgdmxpc3QgY29udGVudHMgZ28gaW4gYSB0YWJsZS1jZWxsIHdpdGggYHZlcnRpY2FsLWFsaWduOmJvdHRvbWAuXG4gIC8vIFRoaXMgY2VsbCdzIGJvdHRvbSBlZGdlIHdpbGwgZGV0ZXJtaW5lIHRoZSBjb250YWluaW5nIHRhYmxlJ3MgYmFzZWxpbmVcbiAgLy8gd2l0aG91dCBvdmVybHkgZXhwYW5kaW5nIHRoZSBjb250YWluaW5nIGxpbmUtYm94LlxuXG5cbiAgdmFyIHZsaXN0ID0gYnVpbGRDb21tb25fbWFrZVNwYW4oW1widmxpc3RcIl0sIHJlYWxDaGlsZHJlbik7XG4gIHZsaXN0LnN0eWxlLmhlaWdodCA9IG1heFBvcyArIFwiZW1cIjsgLy8gQSBzZWNvbmQgcm93IGlzIHVzZWQgaWYgbmVjZXNzYXJ5IHRvIHJlcHJlc2VudCB0aGUgdmxpc3QncyBkZXB0aC5cblxuICB2YXIgcm93cztcblxuICBpZiAobWluUG9zIDwgMCkge1xuICAgIC8vIFdlIHdpbGwgZGVmaW5lIGRlcHRoIGluIGFuIGVtcHR5IHNwYW4gd2l0aCBkaXNwbGF5OiB0YWJsZS1jZWxsLlxuICAgIC8vIEl0IHNob3VsZCByZW5kZXIgd2l0aCB0aGUgaGVpZ2h0IHRoYXQgd2UgZGVmaW5lLiBCdXQgQ2hyb21lLCBpblxuICAgIC8vIGNvbnRlbnRlZGl0YWJsZSBtb2RlIG9ubHksIHRyZWF0cyB0aGF0IHNwYW4gYXMgaWYgaXQgY29udGFpbnMgc29tZVxuICAgIC8vIHRleHQgY29udGVudC4gQW5kIHRoYXQgbWluLWhlaWdodCBvdmVyLXJpZGVzIG91ciBkZXNpcmVkIGhlaWdodC5cbiAgICAvLyBTbyB3ZSBwdXQgYW5vdGhlciBlbXB0eSBzcGFuIGluc2lkZSB0aGUgZGVwdGggc3RydXQgc3Bhbi5cbiAgICB2YXIgZW1wdHlTcGFuID0gYnVpbGRDb21tb25fbWFrZVNwYW4oW10sIFtdKTtcbiAgICB2YXIgZGVwdGhTdHJ1dCA9IGJ1aWxkQ29tbW9uX21ha2VTcGFuKFtcInZsaXN0XCJdLCBbZW1wdHlTcGFuXSk7XG4gICAgZGVwdGhTdHJ1dC5zdHlsZS5oZWlnaHQgPSAtbWluUG9zICsgXCJlbVwiOyAvLyBTYWZhcmkgd2FudHMgdGhlIGZpcnN0IHJvdyB0byBoYXZlIGlubGluZSBjb250ZW50OyBvdGhlcndpc2UgaXRcbiAgICAvLyBwdXRzIHRoZSBib3R0b20gb2YgdGhlICpzZWNvbmQqIHJvdyBvbiB0aGUgYmFzZWxpbmUuXG5cbiAgICB2YXIgdG9wU3RydXQgPSBidWlsZENvbW1vbl9tYWtlU3BhbihbXCJ2bGlzdC1zXCJdLCBbbmV3IGRvbVRyZWVfU3ltYm9sTm9kZShcIlxcdTIwMEJcIildKTtcbiAgICByb3dzID0gW2J1aWxkQ29tbW9uX21ha2VTcGFuKFtcInZsaXN0LXJcIl0sIFt2bGlzdCwgdG9wU3RydXRdKSwgYnVpbGRDb21tb25fbWFrZVNwYW4oW1widmxpc3QtclwiXSwgW2RlcHRoU3RydXRdKV07XG4gIH0gZWxzZSB7XG4gICAgcm93cyA9IFtidWlsZENvbW1vbl9tYWtlU3BhbihbXCJ2bGlzdC1yXCJdLCBbdmxpc3RdKV07XG4gIH1cblxuICB2YXIgdnRhYmxlID0gYnVpbGRDb21tb25fbWFrZVNwYW4oW1widmxpc3QtdFwiXSwgcm93cyk7XG5cbiAgaWYgKHJvd3MubGVuZ3RoID09PSAyKSB7XG4gICAgdnRhYmxlLmNsYXNzZXMucHVzaChcInZsaXN0LXQyXCIpO1xuICB9XG5cbiAgdnRhYmxlLmhlaWdodCA9IG1heFBvcztcbiAgdnRhYmxlLmRlcHRoID0gLW1pblBvcztcbiAgcmV0dXJuIHZ0YWJsZTtcbn07IC8vIEdsdWUgaXMgYSBjb25jZXB0IGZyb20gVGVYIHdoaWNoIGlzIGEgZmxleGlibGUgc3BhY2UgYmV0d2VlbiBlbGVtZW50cyBpblxuLy8gZWl0aGVyIGEgdmVydGljYWwgb3IgaG9yaXpvbnRhbCBsaXN0LiBJbiBLYVRlWCwgYXQgbGVhc3QgZm9yIG5vdywgaXQnc1xuLy8gc3RhdGljIHNwYWNlIGJldHdlZW4gZWxlbWVudHMgaW4gYSBob3Jpem9udGFsIGxheW91dC5cblxuXG52YXIgYnVpbGRDb21tb25fbWFrZUdsdWUgPSBmdW5jdGlvbiBtYWtlR2x1ZShtZWFzdXJlbWVudCwgb3B0aW9ucykge1xuICAvLyBNYWtlIGFuIGVtcHR5IHNwYW4gZm9yIHRoZSBzcGFjZVxuICB2YXIgcnVsZSA9IGJ1aWxkQ29tbW9uX21ha2VTcGFuKFtcIm1zcGFjZVwiXSwgW10sIG9wdGlvbnMpO1xuICB2YXIgc2l6ZSA9IHVuaXRzX2NhbGN1bGF0ZVNpemUobWVhc3VyZW1lbnQsIG9wdGlvbnMpO1xuICBydWxlLnN0eWxlLm1hcmdpblJpZ2h0ID0gc2l6ZSArIFwiZW1cIjtcbiAgcmV0dXJuIHJ1bGU7XG59OyAvLyBUYWtlcyBmb250IG9wdGlvbnMsIGFuZCByZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBmb250TG9va3VwIG5hbWVcblxuXG52YXIgcmV0cmlldmVUZXh0Rm9udE5hbWUgPSBmdW5jdGlvbiByZXRyaWV2ZVRleHRGb250TmFtZShmb250RmFtaWx5LCBmb250V2VpZ2h0LCBmb250U2hhcGUpIHtcbiAgdmFyIGJhc2VGb250TmFtZSA9IFwiXCI7XG5cbiAgc3dpdGNoIChmb250RmFtaWx5KSB7XG4gICAgY2FzZSBcImFtc3JtXCI6XG4gICAgICBiYXNlRm9udE5hbWUgPSBcIkFNU1wiO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwidGV4dHJtXCI6XG4gICAgICBiYXNlRm9udE5hbWUgPSBcIk1haW5cIjtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInRleHRzZlwiOlxuICAgICAgYmFzZUZvbnROYW1lID0gXCJTYW5zU2VyaWZcIjtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInRleHR0dFwiOlxuICAgICAgYmFzZUZvbnROYW1lID0gXCJUeXBld3JpdGVyXCI7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBiYXNlRm9udE5hbWUgPSBmb250RmFtaWx5O1xuICAgIC8vIHVzZSBmb250cyBhZGRlZCBieSBhIHBsdWdpblxuICB9XG5cbiAgdmFyIGZvbnRTdHlsZXNOYW1lO1xuXG4gIGlmIChmb250V2VpZ2h0ID09PSBcInRleHRiZlwiICYmIGZvbnRTaGFwZSA9PT0gXCJ0ZXh0aXRcIikge1xuICAgIGZvbnRTdHlsZXNOYW1lID0gXCJCb2xkSXRhbGljXCI7XG4gIH0gZWxzZSBpZiAoZm9udFdlaWdodCA9PT0gXCJ0ZXh0YmZcIikge1xuICAgIGZvbnRTdHlsZXNOYW1lID0gXCJCb2xkXCI7XG4gIH0gZWxzZSBpZiAoZm9udFdlaWdodCA9PT0gXCJ0ZXh0aXRcIikge1xuICAgIGZvbnRTdHlsZXNOYW1lID0gXCJJdGFsaWNcIjtcbiAgfSBlbHNlIHtcbiAgICBmb250U3R5bGVzTmFtZSA9IFwiUmVndWxhclwiO1xuICB9XG5cbiAgcmV0dXJuIGJhc2VGb250TmFtZSArIFwiLVwiICsgZm9udFN0eWxlc05hbWU7XG59O1xuLyoqXG4gKiBNYXBzIFRlWCBmb250IGNvbW1hbmRzIHRvIG9iamVjdHMgY29udGFpbmluZzpcbiAqIC0gdmFyaWFudDogc3RyaW5nIHVzZWQgZm9yIFwibWF0aHZhcmlhbnRcIiBhdHRyaWJ1dGUgaW4gYnVpbGRNYXRoTUwuanNcbiAqIC0gZm9udE5hbWU6IHRoZSBcInN0eWxlXCIgcGFyYW1ldGVyIHRvIGZvbnRNZXRyaWNzLmdldENoYXJhY3Rlck1ldHJpY3NcbiAqL1xuLy8gQSBtYXAgYmV0d2VlbiB0ZXggZm9udCBjb21tYW5kcyBhbiBNYXRoTUwgbWF0aHZhcmlhbnQgYXR0cmlidXRlIHZhbHVlc1xuXG5cbnZhciBmb250TWFwID0ge1xuICAvLyBzdHlsZXNcbiAgXCJtYXRoYmZcIjoge1xuICAgIHZhcmlhbnQ6IFwiYm9sZFwiLFxuICAgIGZvbnROYW1lOiBcIk1haW4tQm9sZFwiXG4gIH0sXG4gIFwibWF0aHJtXCI6IHtcbiAgICB2YXJpYW50OiBcIm5vcm1hbFwiLFxuICAgIGZvbnROYW1lOiBcIk1haW4tUmVndWxhclwiXG4gIH0sXG4gIFwidGV4dGl0XCI6IHtcbiAgICB2YXJpYW50OiBcIml0YWxpY1wiLFxuICAgIGZvbnROYW1lOiBcIk1haW4tSXRhbGljXCJcbiAgfSxcbiAgXCJtYXRoaXRcIjoge1xuICAgIHZhcmlhbnQ6IFwiaXRhbGljXCIsXG4gICAgZm9udE5hbWU6IFwiTWFpbi1JdGFsaWNcIlxuICB9LFxuICAvLyBEZWZhdWx0IG1hdGggZm9udCwgXCJtYXRobm9ybWFsXCIgYW5kIFwiYm9sZHN5bWJvbFwiIGFyZSBtaXNzaW5nIGJlY2F1c2UgdGhleVxuICAvLyByZXF1aXJlIHRoZSB1c2Ugb2Ygc2V2ZXJhbCBmb250czogTWFpbi1JdGFsaWMgYW5kIE1hdGgtSXRhbGljIGZvciBkZWZhdWx0XG4gIC8vIG1hdGggZm9udCwgTWFpbi1JdGFsaWMsIE1hdGgtSXRhbGljLCBDYWxpZ3JhcGhpYyBmb3IgXCJtYXRobm9ybWFsXCIsIGFuZFxuICAvLyBNYXRoLUJvbGRJdGFsaWMgYW5kIE1haW4tQm9sZCBmb3IgXCJib2xkc3ltYm9sXCIuICBUaGlzIGlzIGhhbmRsZWQgYnkgYVxuICAvLyBzcGVjaWFsIGNhc2UgaW4gbWFrZU9yZCB3aGljaCBlbmRzIHVwIGNhbGxpbmcgbWF0aGRlZmF1bHQsIG1hdGhub3JtYWwsXG4gIC8vIGFuZCBib2xkc3ltYm9sLlxuICAvLyBmYW1pbGllc1xuICBcIm1hdGhiYlwiOiB7XG4gICAgdmFyaWFudDogXCJkb3VibGUtc3RydWNrXCIsXG4gICAgZm9udE5hbWU6IFwiQU1TLVJlZ3VsYXJcIlxuICB9LFxuICBcIm1hdGhjYWxcIjoge1xuICAgIHZhcmlhbnQ6IFwic2NyaXB0XCIsXG4gICAgZm9udE5hbWU6IFwiQ2FsaWdyYXBoaWMtUmVndWxhclwiXG4gIH0sXG4gIFwibWF0aGZyYWtcIjoge1xuICAgIHZhcmlhbnQ6IFwiZnJha3R1clwiLFxuICAgIGZvbnROYW1lOiBcIkZyYWt0dXItUmVndWxhclwiXG4gIH0sXG4gIFwibWF0aHNjclwiOiB7XG4gICAgdmFyaWFudDogXCJzY3JpcHRcIixcbiAgICBmb250TmFtZTogXCJTY3JpcHQtUmVndWxhclwiXG4gIH0sXG4gIFwibWF0aHNmXCI6IHtcbiAgICB2YXJpYW50OiBcInNhbnMtc2VyaWZcIixcbiAgICBmb250TmFtZTogXCJTYW5zU2VyaWYtUmVndWxhclwiXG4gIH0sXG4gIFwibWF0aHR0XCI6IHtcbiAgICB2YXJpYW50OiBcIm1vbm9zcGFjZVwiLFxuICAgIGZvbnROYW1lOiBcIlR5cGV3cml0ZXItUmVndWxhclwiXG4gIH1cbn07XG52YXIgc3ZnRGF0YSA9IHtcbiAgLy8gICBwYXRoLCB3aWR0aCwgaGVpZ2h0XG4gIHZlYzogW1widmVjXCIsIDAuNDcxLCAwLjcxNF0sXG4gIC8vIHZhbHVlcyBmcm9tIHRoZSBmb250IGdseXBoXG4gIG9paW50U2l6ZTE6IFtcIm9paW50U2l6ZTFcIiwgMC45NTcsIDAuNDk5XSxcbiAgLy8gb3ZhbCB0byBvdmVybGF5IHRoZSBpbnRlZ3JhbmRcbiAgb2lpbnRTaXplMjogW1wib2lpbnRTaXplMlwiLCAxLjQ3MiwgMC42NTldLFxuICBvaWlpbnRTaXplMTogW1wib2lpaW50U2l6ZTFcIiwgMS4zMDQsIDAuNDk5XSxcbiAgb2lpaW50U2l6ZTI6IFtcIm9paWludFNpemUyXCIsIDEuOTgsIDAuNjU5XVxufTtcblxudmFyIGJ1aWxkQ29tbW9uX3N0YXRpY1N2ZyA9IGZ1bmN0aW9uIHN0YXRpY1N2Zyh2YWx1ZSwgb3B0aW9ucykge1xuICAvLyBDcmVhdGUgYSBzcGFuIHdpdGggaW5saW5lIFNWRyBmb3IgdGhlIGVsZW1lbnQuXG4gIHZhciBfc3ZnRGF0YSR2YWx1ZSA9IHN2Z0RhdGFbdmFsdWVdLFxuICAgICAgcGF0aE5hbWUgPSBfc3ZnRGF0YSR2YWx1ZVswXSxcbiAgICAgIHdpZHRoID0gX3N2Z0RhdGEkdmFsdWVbMV0sXG4gICAgICBoZWlnaHQgPSBfc3ZnRGF0YSR2YWx1ZVsyXTtcbiAgdmFyIHBhdGggPSBuZXcgZG9tVHJlZV9QYXRoTm9kZShwYXRoTmFtZSk7XG4gIHZhciBzdmdOb2RlID0gbmV3IFN2Z05vZGUoW3BhdGhdLCB7XG4gICAgXCJ3aWR0aFwiOiB3aWR0aCArIFwiZW1cIixcbiAgICBcImhlaWdodFwiOiBoZWlnaHQgKyBcImVtXCIsXG4gICAgLy8gT3ZlcnJpZGUgQ1NTIHJ1bGUgYC5rYXRleCBzdmcgeyB3aWR0aDogMTAwJSB9YFxuICAgIFwic3R5bGVcIjogXCJ3aWR0aDpcIiArIHdpZHRoICsgXCJlbVwiLFxuICAgIFwidmlld0JveFwiOiBcIjAgMCBcIiArIDEwMDAgKiB3aWR0aCArIFwiIFwiICsgMTAwMCAqIGhlaWdodCxcbiAgICBcInByZXNlcnZlQXNwZWN0UmF0aW9cIjogXCJ4TWluWU1pblwiXG4gIH0pO1xuICB2YXIgc3BhbiA9IGJ1aWxkQ29tbW9uX21ha2VTdmdTcGFuKFtcIm92ZXJsYXlcIl0sIFtzdmdOb2RlXSwgb3B0aW9ucyk7XG4gIHNwYW4uaGVpZ2h0ID0gaGVpZ2h0O1xuICBzcGFuLnN0eWxlLmhlaWdodCA9IGhlaWdodCArIFwiZW1cIjtcbiAgc3Bhbi5zdHlsZS53aWR0aCA9IHdpZHRoICsgXCJlbVwiO1xuICByZXR1cm4gc3Bhbjtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGJ1aWxkQ29tbW9uID0gKHtcbiAgZm9udE1hcDogZm9udE1hcCxcbiAgbWFrZVN5bWJvbDogYnVpbGRDb21tb25fbWFrZVN5bWJvbCxcbiAgbWF0aHN5bTogYnVpbGRDb21tb25fbWF0aHN5bSxcbiAgbWFrZVNwYW46IGJ1aWxkQ29tbW9uX21ha2VTcGFuLFxuICBtYWtlU3ZnU3BhbjogYnVpbGRDb21tb25fbWFrZVN2Z1NwYW4sXG4gIG1ha2VMaW5lU3BhbjogbWFrZUxpbmVTcGFuLFxuICBtYWtlQW5jaG9yOiBidWlsZENvbW1vbl9tYWtlQW5jaG9yLFxuICBtYWtlRnJhZ21lbnQ6IGJ1aWxkQ29tbW9uX21ha2VGcmFnbWVudCxcbiAgd3JhcEZyYWdtZW50OiBidWlsZENvbW1vbl93cmFwRnJhZ21lbnQsXG4gIG1ha2VWTGlzdDogYnVpbGRDb21tb25fbWFrZVZMaXN0LFxuICBtYWtlT3JkOiBidWlsZENvbW1vbl9tYWtlT3JkLFxuICBtYWtlR2x1ZTogYnVpbGRDb21tb25fbWFrZUdsdWUsXG4gIHN0YXRpY1N2ZzogYnVpbGRDb21tb25fc3RhdGljU3ZnLFxuICBzdmdEYXRhOiBzdmdEYXRhLFxuICB0cnlDb21iaW5lQ2hhcnM6IGJ1aWxkQ29tbW9uX3RyeUNvbWJpbmVDaGFyc1xufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9wYXJzZU5vZGUuanNcblxuXG4vKipcbiAqIEFzc2VydHMgdGhhdCB0aGUgbm9kZSBpcyBvZiB0aGUgZ2l2ZW4gdHlwZSBhbmQgcmV0dXJucyBpdCB3aXRoIHN0cmljdGVyXG4gKiB0eXBpbmcuIFRocm93cyBpZiB0aGUgbm9kZSdzIHR5cGUgZG9lcyBub3QgbWF0Y2guXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vZGVUeXBlKG5vZGUsIHR5cGUpIHtcbiAgdmFyIHR5cGVkTm9kZSA9IGNoZWNrTm9kZVR5cGUobm9kZSwgdHlwZSk7XG5cbiAgaWYgKCF0eXBlZE5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBub2RlIG9mIHR5cGUgXCIgKyB0eXBlICsgXCIsIGJ1dCBnb3QgXCIgKyAobm9kZSA/IFwibm9kZSBvZiB0eXBlIFwiICsgbm9kZS50eXBlIDogU3RyaW5nKG5vZGUpKSk7XG4gIH0gLy8gJEZsb3dGaXhNZTogVW5zdXJlIHdoeS5cblxuXG4gIHJldHVybiB0eXBlZE5vZGU7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIG5vZGUgbW9yZSBzdHJpY3RseSB0eXBlZCBpZmYgaXQgaXMgb2YgdGhlIGdpdmVuIHR5cGUuIE90aGVyd2lzZSxcbiAqIHJldHVybnMgbnVsbC5cbiAqL1xuXG5mdW5jdGlvbiBjaGVja05vZGVUeXBlKG5vZGUsIHR5cGUpIHtcbiAgaWYgKG5vZGUgJiYgbm9kZS50eXBlID09PSB0eXBlKSB7XG4gICAgLy8gVGhlIGRlZmluaXRpb24gb2YgUGFyc2VOb2RlPFRZUEU+IGRvZXNuJ3QgY29tbXVuaWNhdGUgdG8gZmxvdyB0aGF0XG4gICAgLy8gYHR5cGU6IFRZUEVgIChhcyB0aGF0J3Mgbm90IGV4cGxpY2l0bHkgbWVudGlvbmVkIGFueXdoZXJlKSwgdGhvdWdoIHRoYXRcbiAgICAvLyBoYXBwZW5zIHRvIGJlIHRydWUgZm9yIGFsbCBvdXIgdmFsdWUgdHlwZXMuXG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIEFzc2VydHMgdGhhdCB0aGUgbm9kZSBpcyBvZiB0aGUgZ2l2ZW4gdHlwZSBhbmQgcmV0dXJucyBpdCB3aXRoIHN0cmljdGVyXG4gKiB0eXBpbmcuIFRocm93cyBpZiB0aGUgbm9kZSdzIHR5cGUgZG9lcyBub3QgbWF0Y2guXG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0QXRvbUZhbWlseShub2RlLCBmYW1pbHkpIHtcbiAgdmFyIHR5cGVkTm9kZSA9IGNoZWNrQXRvbUZhbWlseShub2RlLCBmYW1pbHkpO1xuXG4gIGlmICghdHlwZWROb2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbm9kZSBvZiB0eXBlIFxcXCJhdG9tXFxcIiBhbmQgZmFtaWx5IFxcXCJcIiArIGZhbWlseSArIFwiXFxcIiwgYnV0IGdvdCBcIiArIChub2RlID8gbm9kZS50eXBlID09PSBcImF0b21cIiA/IFwiYXRvbSBvZiBmYW1pbHkgXCIgKyBub2RlLmZhbWlseSA6IFwibm9kZSBvZiB0eXBlIFwiICsgbm9kZS50eXBlIDogU3RyaW5nKG5vZGUpKSk7XG4gIH1cblxuICByZXR1cm4gdHlwZWROb2RlO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBub2RlIG1vcmUgc3RyaWN0bHkgdHlwZWQgaWZmIGl0IGlzIG9mIHRoZSBnaXZlbiB0eXBlLiBPdGhlcndpc2UsXG4gKiByZXR1cm5zIG51bGwuXG4gKi9cblxuZnVuY3Rpb24gY2hlY2tBdG9tRmFtaWx5KG5vZGUsIGZhbWlseSkge1xuICByZXR1cm4gbm9kZSAmJiBub2RlLnR5cGUgPT09IFwiYXRvbVwiICYmIG5vZGUuZmFtaWx5ID09PSBmYW1pbHkgPyBub2RlIDogbnVsbDtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgbm9kZSBtb3JlIHN0cmljdGx5IHR5cGVkIGlmZiBpdCBpcyBvZiB0aGUgZ2l2ZW4gdHlwZS4gT3RoZXJ3aXNlLFxuICogcmV0dXJucyBudWxsLlxuICovXG5cbmZ1bmN0aW9uIGFzc2VydFN5bWJvbE5vZGVUeXBlKG5vZGUpIHtcbiAgdmFyIHR5cGVkTm9kZSA9IGNoZWNrU3ltYm9sTm9kZVR5cGUobm9kZSk7XG5cbiAgaWYgKCF0eXBlZE5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBub2RlIG9mIHN5bWJvbCBncm91cCB0eXBlLCBidXQgZ290IFwiICsgKG5vZGUgPyBcIm5vZGUgb2YgdHlwZSBcIiArIG5vZGUudHlwZSA6IFN0cmluZyhub2RlKSkpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGVkTm9kZTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgbm9kZSBtb3JlIHN0cmljdGx5IHR5cGVkIGlmZiBpdCBpcyBvZiB0aGUgZ2l2ZW4gdHlwZS4gT3RoZXJ3aXNlLFxuICogcmV0dXJucyBudWxsLlxuICovXG5cbmZ1bmN0aW9uIGNoZWNrU3ltYm9sTm9kZVR5cGUobm9kZSkge1xuICBpZiAobm9kZSAmJiAobm9kZS50eXBlID09PSBcImF0b21cIiB8fCBOT05fQVRPTVMuaGFzT3duUHJvcGVydHkobm9kZS50eXBlKSkpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3NwYWNpbmdEYXRhLmpzXG4vKipcbiAqIERlc2NyaWJlcyBzcGFjZXMgYmV0d2VlbiBkaWZmZXJlbnQgY2xhc3NlcyBvZiBhdG9tcy5cbiAqL1xudmFyIHRoaW5zcGFjZSA9IHtcbiAgbnVtYmVyOiAzLFxuICB1bml0OiBcIm11XCJcbn07XG52YXIgbWVkaXVtc3BhY2UgPSB7XG4gIG51bWJlcjogNCxcbiAgdW5pdDogXCJtdVwiXG59O1xudmFyIHRoaWNrc3BhY2UgPSB7XG4gIG51bWJlcjogNSxcbiAgdW5pdDogXCJtdVwiXG59OyAvLyBNYWtpbmcgdGhlIHR5cGUgYmVsb3cgZXhhY3Qgd2l0aCBhbGwgb3B0aW9uYWwgZmllbGRzIGRvZXNuJ3Qgd29yayBkdWUgdG9cbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzQ1ODJcbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzU2ODhcbi8vIEhvd2V2ZXIsIHNpbmNlICphbGwqIGZpZWxkcyBhcmUgb3B0aW9uYWwsICRTaGFwZTw+IHdvcmtzIGFzIHN1Z2dlc3RlZCBpbiA1Njg4XG4vLyBhYm92ZS5cblxuLy8gU3BhY2luZyByZWxhdGlvbnNoaXBzIGZvciBkaXNwbGF5IGFuZCB0ZXh0IHN0eWxlc1xudmFyIHNwYWNpbmdzID0ge1xuICBtb3JkOiB7XG4gICAgbW9wOiB0aGluc3BhY2UsXG4gICAgbWJpbjogbWVkaXVtc3BhY2UsXG4gICAgbXJlbDogdGhpY2tzcGFjZSxcbiAgICBtaW5uZXI6IHRoaW5zcGFjZVxuICB9LFxuICBtb3A6IHtcbiAgICBtb3JkOiB0aGluc3BhY2UsXG4gICAgbW9wOiB0aGluc3BhY2UsXG4gICAgbXJlbDogdGhpY2tzcGFjZSxcbiAgICBtaW5uZXI6IHRoaW5zcGFjZVxuICB9LFxuICBtYmluOiB7XG4gICAgbW9yZDogbWVkaXVtc3BhY2UsXG4gICAgbW9wOiBtZWRpdW1zcGFjZSxcbiAgICBtb3BlbjogbWVkaXVtc3BhY2UsXG4gICAgbWlubmVyOiBtZWRpdW1zcGFjZVxuICB9LFxuICBtcmVsOiB7XG4gICAgbW9yZDogdGhpY2tzcGFjZSxcbiAgICBtb3A6IHRoaWNrc3BhY2UsXG4gICAgbW9wZW46IHRoaWNrc3BhY2UsXG4gICAgbWlubmVyOiB0aGlja3NwYWNlXG4gIH0sXG4gIG1vcGVuOiB7fSxcbiAgbWNsb3NlOiB7XG4gICAgbW9wOiB0aGluc3BhY2UsXG4gICAgbWJpbjogbWVkaXVtc3BhY2UsXG4gICAgbXJlbDogdGhpY2tzcGFjZSxcbiAgICBtaW5uZXI6IHRoaW5zcGFjZVxuICB9LFxuICBtcHVuY3Q6IHtcbiAgICBtb3JkOiB0aGluc3BhY2UsXG4gICAgbW9wOiB0aGluc3BhY2UsXG4gICAgbXJlbDogdGhpY2tzcGFjZSxcbiAgICBtb3BlbjogdGhpbnNwYWNlLFxuICAgIG1jbG9zZTogdGhpbnNwYWNlLFxuICAgIG1wdW5jdDogdGhpbnNwYWNlLFxuICAgIG1pbm5lcjogdGhpbnNwYWNlXG4gIH0sXG4gIG1pbm5lcjoge1xuICAgIG1vcmQ6IHRoaW5zcGFjZSxcbiAgICBtb3A6IHRoaW5zcGFjZSxcbiAgICBtYmluOiBtZWRpdW1zcGFjZSxcbiAgICBtcmVsOiB0aGlja3NwYWNlLFxuICAgIG1vcGVuOiB0aGluc3BhY2UsXG4gICAgbXB1bmN0OiB0aGluc3BhY2UsXG4gICAgbWlubmVyOiB0aGluc3BhY2VcbiAgfVxufTsgLy8gU3BhY2luZyByZWxhdGlvbnNoaXBzIGZvciBzY3JpcHQgYW5kIHNjcmlwdHNjcmlwdCBzdHlsZXNcblxudmFyIHRpZ2h0U3BhY2luZ3MgPSB7XG4gIG1vcmQ6IHtcbiAgICBtb3A6IHRoaW5zcGFjZVxuICB9LFxuICBtb3A6IHtcbiAgICBtb3JkOiB0aGluc3BhY2UsXG4gICAgbW9wOiB0aGluc3BhY2VcbiAgfSxcbiAgbWJpbjoge30sXG4gIG1yZWw6IHt9LFxuICBtb3Blbjoge30sXG4gIG1jbG9zZToge1xuICAgIG1vcDogdGhpbnNwYWNlXG4gIH0sXG4gIG1wdW5jdDoge30sXG4gIG1pbm5lcjoge1xuICAgIG1vcDogdGhpbnNwYWNlXG4gIH1cbn07XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9kZWZpbmVGdW5jdGlvbi5qc1xuXG5cbi8qKlxuICogQWxsIHJlZ2lzdGVyZWQgZnVuY3Rpb25zLlxuICogYGZ1bmN0aW9ucy5qc2AganVzdCBleHBvcnRzIHRoaXMgc2FtZSBkaWN0aW9uYXJ5IGFnYWluIGFuZCBtYWtlcyBpdCBwdWJsaWMuXG4gKiBgUGFyc2VyLmpzYCByZXF1aXJlcyB0aGlzIGRpY3Rpb25hcnkuXG4gKi9cbnZhciBfZnVuY3Rpb25zID0ge307XG4vKipcbiAqIEFsbCBIVE1MIGJ1aWxkZXJzLiBTaG91bGQgYmUgb25seSB1c2VkIGluIHRoZSBgZGVmaW5lKmAgYW5kIHRoZSBgYnVpbGQqTUxgXG4gKiBmdW5jdGlvbnMuXG4gKi9cblxudmFyIF9odG1sR3JvdXBCdWlsZGVycyA9IHt9O1xuLyoqXG4gKiBBbGwgTWF0aE1MIGJ1aWxkZXJzLiBTaG91bGQgYmUgb25seSB1c2VkIGluIHRoZSBgZGVmaW5lKmAgYW5kIHRoZSBgYnVpbGQqTUxgXG4gKiBmdW5jdGlvbnMuXG4gKi9cblxudmFyIF9tYXRobWxHcm91cEJ1aWxkZXJzID0ge307XG5mdW5jdGlvbiBkZWZpbmVGdW5jdGlvbihfcmVmKSB7XG4gIHZhciB0eXBlID0gX3JlZi50eXBlLFxuICAgICAgbmFtZXMgPSBfcmVmLm5hbWVzLFxuICAgICAgcHJvcHMgPSBfcmVmLnByb3BzLFxuICAgICAgaGFuZGxlciA9IF9yZWYuaGFuZGxlcixcbiAgICAgIGh0bWxCdWlsZGVyID0gX3JlZi5odG1sQnVpbGRlcixcbiAgICAgIG1hdGhtbEJ1aWxkZXIgPSBfcmVmLm1hdGhtbEJ1aWxkZXI7XG4gIC8vIFNldCBkZWZhdWx0IHZhbHVlcyBvZiBmdW5jdGlvbnNcbiAgdmFyIGRhdGEgPSB7XG4gICAgdHlwZTogdHlwZSxcbiAgICBudW1BcmdzOiBwcm9wcy5udW1BcmdzLFxuICAgIGFyZ1R5cGVzOiBwcm9wcy5hcmdUeXBlcyxcbiAgICBncmVlZGluZXNzOiBwcm9wcy5ncmVlZGluZXNzID09PSB1bmRlZmluZWQgPyAxIDogcHJvcHMuZ3JlZWRpbmVzcyxcbiAgICBhbGxvd2VkSW5UZXh0OiAhIXByb3BzLmFsbG93ZWRJblRleHQsXG4gICAgYWxsb3dlZEluTWF0aDogcHJvcHMuYWxsb3dlZEluTWF0aCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHByb3BzLmFsbG93ZWRJbk1hdGgsXG4gICAgbnVtT3B0aW9uYWxBcmdzOiBwcm9wcy5udW1PcHRpb25hbEFyZ3MgfHwgMCxcbiAgICBpbmZpeDogISFwcm9wcy5pbmZpeCxcbiAgICBjb25zdW1lTW9kZTogcHJvcHMuY29uc3VtZU1vZGUsXG4gICAgaGFuZGxlcjogaGFuZGxlclxuICB9O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyArK2kpIHtcbiAgICBfZnVuY3Rpb25zW25hbWVzW2ldXSA9IGRhdGE7XG4gIH1cblxuICBpZiAodHlwZSkge1xuICAgIGlmIChodG1sQnVpbGRlcikge1xuICAgICAgX2h0bWxHcm91cEJ1aWxkZXJzW3R5cGVdID0gaHRtbEJ1aWxkZXI7XG4gICAgfVxuXG4gICAgaWYgKG1hdGhtbEJ1aWxkZXIpIHtcbiAgICAgIF9tYXRobWxHcm91cEJ1aWxkZXJzW3R5cGVdID0gbWF0aG1sQnVpbGRlcjtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogVXNlIHRoaXMgdG8gcmVnaXN0ZXIgb25seSB0aGUgSFRNTCBhbmQgTWF0aE1MIGJ1aWxkZXJzIGZvciBhIGZ1bmN0aW9uIChlLmcuXG4gKiBpZiB0aGUgZnVuY3Rpb24ncyBQYXJzZU5vZGUgaXMgZ2VuZXJhdGVkIGluIFBhcnNlci5qcyByYXRoZXIgdGhhbiB2aWEgYVxuICogc3RhbmQtYWxvbmUgaGFuZGxlciBwcm92aWRlZCB0byBgZGVmaW5lRnVuY3Rpb25gKS5cbiAqL1xuXG5mdW5jdGlvbiBkZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKF9yZWYyKSB7XG4gIHZhciB0eXBlID0gX3JlZjIudHlwZSxcbiAgICAgIGh0bWxCdWlsZGVyID0gX3JlZjIuaHRtbEJ1aWxkZXIsXG4gICAgICBtYXRobWxCdWlsZGVyID0gX3JlZjIubWF0aG1sQnVpbGRlcjtcbiAgZGVmaW5lRnVuY3Rpb24oe1xuICAgIHR5cGU6IHR5cGUsXG4gICAgbmFtZXM6IFtdLFxuICAgIHByb3BzOiB7XG4gICAgICBudW1BcmdzOiAwXG4gICAgfSxcbiAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaG91bGQgbmV2ZXIgYmUgY2FsbGVkLicpO1xuICAgIH0sXG4gICAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyLFxuICAgIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXJcbiAgfSk7XG59IC8vIFNpbmNlIHRoZSBjb3JyZXNwb25kaW5nIGJ1aWxkSFRNTC9idWlsZE1hdGhNTCBmdW5jdGlvbiBleHBlY3RzIGFcbi8vIGxpc3Qgb2YgZWxlbWVudHMsIHdlIG5vcm1hbGl6ZSBmb3IgZGlmZmVyZW50IGtpbmRzIG9mIGFyZ3VtZW50c1xuXG52YXIgZGVmaW5lRnVuY3Rpb25fb3JkYXJndW1lbnQgPSBmdW5jdGlvbiBvcmRhcmd1bWVudChhcmcpIHtcbiAgdmFyIG5vZGUgPSBjaGVja05vZGVUeXBlKGFyZywgXCJvcmRncm91cFwiKTtcbiAgcmV0dXJuIG5vZGUgPyBub2RlLmJvZHkgOiBbYXJnXTtcbn07XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9idWlsZEhUTUwuanNcbi8qKlxuICogVGhpcyBmaWxlIGRvZXMgdGhlIG1haW4gd29yayBvZiBidWlsZGluZyBhIGRvbVRyZWUgc3RydWN0dXJlIGZyb20gYSBwYXJzZVxuICogdHJlZS4gVGhlIGVudHJ5IHBvaW50IGlzIHRoZSBgYnVpbGRIVE1MYCBmdW5jdGlvbiwgd2hpY2ggdGFrZXMgYSBwYXJzZSB0cmVlLlxuICogVGhlbiwgdGhlIGJ1aWxkRXhwcmVzc2lvbiwgYnVpbGRHcm91cCwgYW5kIHZhcmlvdXMgZ3JvdXBCdWlsZGVycyBmdW5jdGlvbnNcbiAqIGFyZSBjYWxsZWQsIHRvIHByb2R1Y2UgYSBmaW5hbCBIVE1MIHRyZWUuXG4gKi9cblxuXG5cblxuXG5cblxuXG5cbnZhciBidWlsZEhUTUxfbWFrZVNwYW4gPSBidWlsZENvbW1vbi5tYWtlU3BhbjsgLy8gQmluYXJ5IGF0b21zIChmaXJzdCBjbGFzcyBgbWJpbmApIGNoYW5nZSBpbnRvIG9yZGluYXJ5IGF0b21zIChgbW9yZGApXG4vLyBkZXBlbmRpbmcgb24gdGhlaXIgc3Vycm91bmRpbmdzLiBTZWUgVGVYYm9vayBwZy4gNDQyLTQ0NiwgUnVsZXMgNSBhbmQgNixcbi8vIGFuZCB0aGUgdGV4dCBiZWZvcmUgUnVsZSAxOS5cblxudmFyIGJpbkxlZnRDYW5jZWxsZXIgPSBbXCJsZWZ0bW9zdFwiLCBcIm1iaW5cIiwgXCJtb3BlblwiLCBcIm1yZWxcIiwgXCJtb3BcIiwgXCJtcHVuY3RcIl07XG52YXIgYmluUmlnaHRDYW5jZWxsZXIgPSBbXCJyaWdodG1vc3RcIiwgXCJtcmVsXCIsIFwibWNsb3NlXCIsIFwibXB1bmN0XCJdO1xudmFyIHN0eWxlTWFwID0ge1xuICBcImRpc3BsYXlcIjogc3JjX1N0eWxlLkRJU1BMQVksXG4gIFwidGV4dFwiOiBzcmNfU3R5bGUuVEVYVCxcbiAgXCJzY3JpcHRcIjogc3JjX1N0eWxlLlNDUklQVCxcbiAgXCJzY3JpcHRzY3JpcHRcIjogc3JjX1N0eWxlLlNDUklQVFNDUklQVFxufTtcbnZhciBEb21FbnVtID0ge1xuICBtb3JkOiBcIm1vcmRcIixcbiAgbW9wOiBcIm1vcFwiLFxuICBtYmluOiBcIm1iaW5cIixcbiAgbXJlbDogXCJtcmVsXCIsXG4gIG1vcGVuOiBcIm1vcGVuXCIsXG4gIG1jbG9zZTogXCJtY2xvc2VcIixcbiAgbXB1bmN0OiBcIm1wdW5jdFwiLFxuICBtaW5uZXI6IFwibWlubmVyXCJcbn07XG5cbi8qKlxuICogVGFrZSBhIGxpc3Qgb2Ygbm9kZXMsIGJ1aWxkIHRoZW0gaW4gb3JkZXIsIGFuZCByZXR1cm4gYSBsaXN0IG9mIHRoZSBidWlsdFxuICogbm9kZXMuIGRvY3VtZW50RnJhZ21lbnRzIGFyZSBmbGF0dGVuZWQgaW50byB0aGVpciBjb250ZW50cywgc28gdGhlXG4gKiByZXR1cm5lZCBsaXN0IGNvbnRhaW5zIG5vIGZyYWdtZW50cy4gYGlzUmVhbEdyb3VwYCBpcyB0cnVlIGlmIGBleHByZXNzaW9uYFxuICogaXMgYSByZWFsIGdyb3VwIChubyBhdG9tcyB3aWxsIGJlIGFkZGVkIG9uIGVpdGhlciBzaWRlKSwgYXMgb3Bwb3NlZCB0b1xuICogYSBwYXJ0aWFsIGdyb3VwIChlLmcuIG9uZSBjcmVhdGVkIGJ5IFxcY29sb3IpLiBgc3Vycm91bmRpbmdgIGlzIGFuIGFycmF5XG4gKiBjb25zaXN0aW5nIHR5cGUgb2Ygbm9kZXMgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBsZWZ0IGFuZCByaWdodC5cbiAqL1xudmFyIGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24gPSBmdW5jdGlvbiBidWlsZEV4cHJlc3Npb24oZXhwcmVzc2lvbiwgb3B0aW9ucywgaXNSZWFsR3JvdXAsIHN1cnJvdW5kaW5nKSB7XG4gIGlmIChzdXJyb3VuZGluZyA9PT0gdm9pZCAwKSB7XG4gICAgc3Vycm91bmRpbmcgPSBbbnVsbCwgbnVsbF07XG4gIH1cblxuICAvLyBQYXJzZSBleHByZXNzaW9ucyBpbnRvIGBncm91cHNgLlxuICB2YXIgZ3JvdXBzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9uLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG91dHB1dCA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKGV4cHJlc3Npb25baV0sIG9wdGlvbnMpO1xuXG4gICAgaWYgKG91dHB1dCBpbnN0YW5jZW9mIHRyZWVfRG9jdW1lbnRGcmFnbWVudCkge1xuICAgICAgdmFyIGNoaWxkcmVuID0gb3V0cHV0LmNoaWxkcmVuO1xuICAgICAgZ3JvdXBzLnB1c2guYXBwbHkoZ3JvdXBzLCBjaGlsZHJlbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdyb3Vwcy5wdXNoKG91dHB1dCk7XG4gICAgfVxuICB9IC8vIElmIGBleHByZXNzaW9uYCBpcyBhIHBhcnRpYWwgZ3JvdXAsIGxldCB0aGUgcGFyZW50IGhhbmRsZSBzcGFjaW5nc1xuICAvLyB0byBhdm9pZCBwcm9jZXNzaW5nIGdyb3VwcyBtdWx0aXBsZSB0aW1lcy5cblxuXG4gIGlmICghaXNSZWFsR3JvdXApIHtcbiAgICByZXR1cm4gZ3JvdXBzO1xuICB9XG5cbiAgdmFyIGdsdWVPcHRpb25zID0gb3B0aW9ucztcblxuICBpZiAoZXhwcmVzc2lvbi5sZW5ndGggPT09IDEpIHtcbiAgICB2YXIgbm9kZSA9IGNoZWNrTm9kZVR5cGUoZXhwcmVzc2lvblswXSwgXCJzaXppbmdcIikgfHwgY2hlY2tOb2RlVHlwZShleHByZXNzaW9uWzBdLCBcInN0eWxpbmdcIik7XG5cbiAgICBpZiAoIW5vZGUpIHsvLyBObyBtYXRjaC5cbiAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gXCJzaXppbmdcIikge1xuICAgICAgZ2x1ZU9wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1NpemUobm9kZS5zaXplKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gXCJzdHlsaW5nXCIpIHtcbiAgICAgIGdsdWVPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShzdHlsZU1hcFtub2RlLnN0eWxlXSk7XG4gICAgfVxuICB9IC8vIER1bW15IHNwYW5zIGZvciBkZXRlcm1pbmluZyBzcGFjaW5ncyBiZXR3ZWVuIHN1cnJvdW5kaW5nIGF0b21zLlxuICAvLyBJZiBgZXhwcmVzc2lvbmAgaGFzIG5vIGF0b21zIG9uIHRoZSBsZWZ0IG9yIHJpZ2h0LCBjbGFzcyBcImxlZnRtb3N0XCJcbiAgLy8gb3IgXCJyaWdodG1vc3RcIiwgcmVzcGVjdGl2ZWx5LCBpcyB1c2VkIHRvIGluZGljYXRlIGl0LlxuXG5cbiAgdmFyIGR1bW15UHJldiA9IGJ1aWxkSFRNTF9tYWtlU3Bhbihbc3Vycm91bmRpbmdbMF0gfHwgXCJsZWZ0bW9zdFwiXSwgW10sIG9wdGlvbnMpO1xuICB2YXIgZHVtbXlOZXh0ID0gYnVpbGRIVE1MX21ha2VTcGFuKFtzdXJyb3VuZGluZ1sxXSB8fCBcInJpZ2h0bW9zdFwiXSwgW10sIG9wdGlvbnMpOyAvLyBUT0RPOiBUaGVzZSBjb2RlIGFzc3VtZXMgdGhhdCBhIG5vZGUncyBtYXRoIGNsYXNzIGlzIHRoZSBmaXJzdCBlbGVtZW50XG4gIC8vIG9mIGl0cyBgY2xhc3Nlc2AgYXJyYXkuIEEgbGF0ZXIgY2xlYW51cCBzaG91bGQgZW5zdXJlIHRoaXMsIGZvclxuICAvLyBpbnN0YW5jZSBieSBjaGFuZ2luZyB0aGUgc2lnbmF0dXJlIG9mIGBtYWtlU3BhbmAuXG4gIC8vIEJlZm9yZSBkZXRlcm1pbmluZyB3aGF0IHNwYWNlcyB0byBpbnNlcnQsIHBlcmZvcm0gYmluIGNhbmNlbGxhdGlvbi5cbiAgLy8gQmluYXJ5IG9wZXJhdG9ycyBjaGFuZ2UgdG8gb3JkaW5hcnkgc3ltYm9scyBpbiBzb21lIGNvbnRleHRzLlxuXG4gIHRyYXZlcnNlTm9uU3BhY2VOb2Rlcyhncm91cHMsIGZ1bmN0aW9uIChub2RlLCBwcmV2KSB7XG4gICAgdmFyIHByZXZUeXBlID0gcHJldi5jbGFzc2VzWzBdO1xuICAgIHZhciB0eXBlID0gbm9kZS5jbGFzc2VzWzBdO1xuXG4gICAgaWYgKHByZXZUeXBlID09PSBcIm1iaW5cIiAmJiB1dGlscy5jb250YWlucyhiaW5SaWdodENhbmNlbGxlciwgdHlwZSkpIHtcbiAgICAgIHByZXYuY2xhc3Nlc1swXSA9IFwibW9yZFwiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJtYmluXCIgJiYgdXRpbHMuY29udGFpbnMoYmluTGVmdENhbmNlbGxlciwgcHJldlR5cGUpKSB7XG4gICAgICBub2RlLmNsYXNzZXNbMF0gPSBcIm1vcmRcIjtcbiAgICB9XG4gIH0sIHtcbiAgICBub2RlOiBkdW1teVByZXZcbiAgfSwgZHVtbXlOZXh0KTtcbiAgdHJhdmVyc2VOb25TcGFjZU5vZGVzKGdyb3VwcywgZnVuY3Rpb24gKG5vZGUsIHByZXYpIHtcbiAgICB2YXIgcHJldlR5cGUgPSBnZXRUeXBlT2ZEb21UcmVlKHByZXYpO1xuICAgIHZhciB0eXBlID0gZ2V0VHlwZU9mRG9tVHJlZShub2RlKTsgLy8gJ210aWdodCcgaW5kaWNhdGVzIHRoYXQgdGhlIG5vZGUgaXMgc2NyaXB0IG9yIHNjcmlwdHNjcmlwdCBzdHlsZS5cblxuICAgIHZhciBzcGFjZSA9IHByZXZUeXBlICYmIHR5cGUgPyBub2RlLmhhc0NsYXNzKFwibXRpZ2h0XCIpID8gdGlnaHRTcGFjaW5nc1twcmV2VHlwZV1bdHlwZV0gOiBzcGFjaW5nc1twcmV2VHlwZV1bdHlwZV0gOiBudWxsO1xuXG4gICAgaWYgKHNwYWNlKSB7XG4gICAgICAvLyBJbnNlcnQgZ2x1ZSAoc3BhY2luZykgYWZ0ZXIgdGhlIGBwcmV2YC5cbiAgICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlR2x1ZShzcGFjZSwgZ2x1ZU9wdGlvbnMpO1xuICAgIH1cbiAgfSwge1xuICAgIG5vZGU6IGR1bW15UHJldlxuICB9LCBkdW1teU5leHQpO1xuICByZXR1cm4gZ3JvdXBzO1xufTsgLy8gRGVwdGgtZmlyc3QgdHJhdmVyc2Ugbm9uLXNwYWNlIGBub2Rlc2AsIGNhbGxpbmcgYGNhbGxiYWNrYCB3aXRoIHRoZSBjdXJyZW50IGFuZFxuLy8gcHJldmlvdXMgbm9kZSBhcyBhcmd1bWVudHMsIG9wdGlvbmFsbHkgcmV0dXJuaW5nIGEgbm9kZSB0byBpbnNlcnQgYWZ0ZXIgdGhlXG4vLyBwcmV2aW91cyBub2RlLiBgcHJldmAgaXMgYW4gb2JqZWN0IHdpdGggdGhlIHByZXZpb3VzIG5vZGUgYW5kIGBpbnNlcnRBZnRlcmBcbi8vIGZ1bmN0aW9uIHRvIGluc2VydCBhZnRlciBpdC4gYG5leHRgIGlzIGEgbm9kZSB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHJpZ2h0LlxuLy8gVXNlZCBmb3IgYmluIGNhbmNlbGxhdGlvbiBhbmQgaW5zZXJ0aW5nIHNwYWNpbmdzLlxuXG52YXIgdHJhdmVyc2VOb25TcGFjZU5vZGVzID0gZnVuY3Rpb24gdHJhdmVyc2VOb25TcGFjZU5vZGVzKG5vZGVzLCBjYWxsYmFjaywgcHJldiwgbmV4dCkge1xuICBpZiAobmV4dCkge1xuICAgIC8vIHRlbXBvcmFyaWx5IGFwcGVuZCB0aGUgcmlnaHQgbm9kZSwgaWYgZXhpc3RzXG4gICAgbm9kZXMucHVzaChuZXh0KTtcbiAgfVxuXG4gIHZhciBpID0gMDtcblxuICBmb3IgKDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICB2YXIgcGFydGlhbEdyb3VwID0gYnVpbGRIVE1MX2NoZWNrUGFydGlhbEdyb3VwKG5vZGUpO1xuXG4gICAgaWYgKHBhcnRpYWxHcm91cCkge1xuICAgICAgLy8gUmVjdXJzaXZlIERGU1xuICAgICAgLy8gJEZsb3dGaXhNZTogbWFrZSBub2RlcyBhICRSZWFkT25seUFycmF5IGJ5IHJldHVybmluZyBhIG5ldyBhcnJheVxuICAgICAgdHJhdmVyc2VOb25TcGFjZU5vZGVzKHBhcnRpYWxHcm91cC5jaGlsZHJlbiwgY2FsbGJhY2ssIHByZXYpO1xuICAgICAgY29udGludWU7XG4gICAgfSAvLyBJZ25vcmUgZXhwbGljaXQgc3BhY2VzIChlLmcuLCBcXDssIFxcLCkgd2hlbiBkZXRlcm1pbmluZyB3aGF0IGltcGxpY2l0XG4gICAgLy8gc3BhY2luZyBzaG91bGQgZ28gYmV0d2VlbiBhdG9tcyBvZiBkaWZmZXJlbnQgY2xhc3Nlc1xuXG5cbiAgICBpZiAobm9kZS5jbGFzc2VzWzBdID09PSBcIm1zcGFjZVwiKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0ID0gY2FsbGJhY2sobm9kZSwgcHJldi5ub2RlKTtcblxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIGlmIChwcmV2Lmluc2VydEFmdGVyKSB7XG4gICAgICAgIHByZXYuaW5zZXJ0QWZ0ZXIocmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGluc2VydCBhdCBmcm9udFxuICAgICAgICBub2Rlcy51bnNoaWZ0KHJlc3VsdCk7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcmV2Lm5vZGUgPSBub2RlO1xuXG4gICAgcHJldi5pbnNlcnRBZnRlciA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChuKSB7XG4gICAgICAgIG5vZGVzLnNwbGljZShpbmRleCArIDEsIDAsIG4pO1xuICAgICAgICBpKys7XG4gICAgICB9O1xuICAgIH0oaSk7XG4gIH1cblxuICBpZiAobmV4dCkge1xuICAgIG5vZGVzLnBvcCgpO1xuICB9XG59OyAvLyBDaGVjayBpZiBnaXZlbiBub2RlIGlzIGEgcGFydGlhbCBncm91cCwgaS5lLiwgZG9lcyBub3QgYWZmZWN0IHNwYWNpbmcgYXJvdW5kLlxuXG5cbnZhciBidWlsZEhUTUxfY2hlY2tQYXJ0aWFsR3JvdXAgPSBmdW5jdGlvbiBjaGVja1BhcnRpYWxHcm91cChub2RlKSB7XG4gIGlmIChub2RlIGluc3RhbmNlb2YgdHJlZV9Eb2N1bWVudEZyYWdtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBkb21UcmVlX0FuY2hvcikge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59OyAvLyBSZXR1cm4gdGhlIG91dGVybW9zdCBub2RlIG9mIGEgZG9tVHJlZS5cblxuXG52YXIgZ2V0T3V0ZXJtb3N0Tm9kZSA9IGZ1bmN0aW9uIGdldE91dGVybW9zdE5vZGUobm9kZSwgc2lkZSkge1xuICB2YXIgcGFydGlhbEdyb3VwID0gYnVpbGRIVE1MX2NoZWNrUGFydGlhbEdyb3VwKG5vZGUpO1xuXG4gIGlmIChwYXJ0aWFsR3JvdXApIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBwYXJ0aWFsR3JvdXAuY2hpbGRyZW47XG5cbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBpZiAoc2lkZSA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgIHJldHVybiBnZXRPdXRlcm1vc3ROb2RlKGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdLCBcInJpZ2h0XCIpO1xuICAgICAgfSBlbHNlIGlmIChzaWRlID09PSBcImxlZnRcIikge1xuICAgICAgICByZXR1cm4gZ2V0T3V0ZXJtb3N0Tm9kZShjaGlsZHJlblswXSwgXCJsZWZ0XCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub2RlO1xufTsgLy8gUmV0dXJuIG1hdGggYXRvbSBjbGFzcyAobWNsYXNzKSBvZiBhIGRvbVRyZWUuXG4vLyBJZiBgc2lkZWAgaXMgZ2l2ZW4sIGl0IHdpbGwgZ2V0IHRoZSB0eXBlIG9mIHRoZSBvdXRlcm1vc3Qgbm9kZSBhdCBnaXZlbiBzaWRlLlxuXG5cbnZhciBnZXRUeXBlT2ZEb21UcmVlID0gZnVuY3Rpb24gZ2V0VHlwZU9mRG9tVHJlZShub2RlLCBzaWRlKSB7XG4gIGlmICghbm9kZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHNpZGUpIHtcbiAgICBub2RlID0gZ2V0T3V0ZXJtb3N0Tm9kZShub2RlLCBzaWRlKTtcbiAgfSAvLyBUaGlzIG1ha2VzIGEgbG90IG9mIGFzc3VtcHRpb25zIGFzIHRvIHdoZXJlIHRoZSB0eXBlIG9mIGF0b21cbiAgLy8gYXBwZWFycy4gIFdlIHNob3VsZCBkbyBhIGJldHRlciBqb2Igb2YgZW5mb3JjaW5nIHRoaXMuXG5cblxuICByZXR1cm4gRG9tRW51bVtub2RlLmNsYXNzZXNbMF1dIHx8IG51bGw7XG59O1xudmFyIG1ha2VOdWxsRGVsaW1pdGVyID0gZnVuY3Rpb24gbWFrZU51bGxEZWxpbWl0ZXIob3B0aW9ucywgY2xhc3Nlcykge1xuICB2YXIgbW9yZUNsYXNzZXMgPSBbXCJudWxsZGVsaW1pdGVyXCJdLmNvbmNhdChvcHRpb25zLmJhc2VTaXppbmdDbGFzc2VzKCkpO1xuICByZXR1cm4gYnVpbGRIVE1MX21ha2VTcGFuKGNsYXNzZXMuY29uY2F0KG1vcmVDbGFzc2VzKSk7XG59O1xuLyoqXG4gKiBidWlsZEdyb3VwIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgZ3JvdXAgYW5kIGNhbGxzIHRoZSBjb3JyZWN0IGdyb3VwVHlwZVxuICogZnVuY3Rpb24gZm9yIGl0LiBJdCBhbHNvIGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIG9mIHNpemUgYW5kIHN0eWxlIGNoYW5nZXNcbiAqIGJldHdlZW4gcGFyZW50cyBhbmQgY2hpbGRyZW4uXG4gKi9cblxudmFyIGJ1aWxkSFRNTF9idWlsZEdyb3VwID0gZnVuY3Rpb24gYnVpbGRHcm91cChncm91cCwgb3B0aW9ucywgYmFzZU9wdGlvbnMpIHtcbiAgaWYgKCFncm91cCkge1xuICAgIHJldHVybiBidWlsZEhUTUxfbWFrZVNwYW4oKTtcbiAgfVxuXG4gIGlmIChfaHRtbEdyb3VwQnVpbGRlcnNbZ3JvdXAudHlwZV0pIHtcbiAgICAvLyBDYWxsIHRoZSBncm91cEJ1aWxkZXJzIGZ1bmN0aW9uXG4gICAgdmFyIGdyb3VwTm9kZSA9IF9odG1sR3JvdXBCdWlsZGVyc1tncm91cC50eXBlXShncm91cCwgb3B0aW9ucyk7IC8vIElmIHRoZSBzaXplIGNoYW5nZWQgYmV0d2VlbiB0aGUgcGFyZW50IGFuZCB0aGUgY3VycmVudCBncm91cCwgYWNjb3VudFxuICAgIC8vIGZvciB0aGF0IHNpemUgZGlmZmVyZW5jZS5cblxuICAgIGlmIChiYXNlT3B0aW9ucyAmJiBvcHRpb25zLnNpemUgIT09IGJhc2VPcHRpb25zLnNpemUpIHtcbiAgICAgIGdyb3VwTm9kZSA9IGJ1aWxkSFRNTF9tYWtlU3BhbihvcHRpb25zLnNpemluZ0NsYXNzZXMoYmFzZU9wdGlvbnMpLCBbZ3JvdXBOb2RlXSwgb3B0aW9ucyk7XG4gICAgICB2YXIgbXVsdGlwbGllciA9IG9wdGlvbnMuc2l6ZU11bHRpcGxpZXIgLyBiYXNlT3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgICAgIGdyb3VwTm9kZS5oZWlnaHQgKj0gbXVsdGlwbGllcjtcbiAgICAgIGdyb3VwTm9kZS5kZXB0aCAqPSBtdWx0aXBsaWVyO1xuICAgIH1cblxuICAgIHJldHVybiBncm91cE5vZGU7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiR290IGdyb3VwIG9mIHVua25vd24gdHlwZTogJ1wiICsgZ3JvdXAudHlwZSArIFwiJ1wiKTtcbiAgfVxufTtcbi8qKlxuICogQ29tYmluZSBhbiBhcnJheSBvZiBIVE1MIERPTSBub2RlcyAoZS5nLiwgdGhlIG91dHB1dCBvZiBgYnVpbGRFeHByZXNzaW9uYClcbiAqIGludG8gYW4gdW5icmVha2FibGUgSFRNTCBub2RlIG9mIGNsYXNzIC5iYXNlLCB3aXRoIHByb3BlciBzdHJ1dHMgdG9cbiAqIGd1YXJhbnRlZSBjb3JyZWN0IHZlcnRpY2FsIGV4dGVudC4gIGBidWlsZEhUTUxgIGNhbGxzIHRoaXMgcmVwZWF0ZWRseSB0b1xuICogbWFrZSB1cCB0aGUgZW50aXJlIGV4cHJlc3Npb24gYXMgYSBzZXF1ZW5jZSBvZiB1bmJyZWFrYWJsZSB1bml0cy5cbiAqL1xuXG5mdW5jdGlvbiBidWlsZEhUTUxVbmJyZWFrYWJsZShjaGlsZHJlbiwgb3B0aW9ucykge1xuICAvLyBDb21wdXRlIGhlaWdodCBhbmQgZGVwdGggb2YgdGhpcyBjaHVuay5cbiAgdmFyIGJvZHkgPSBidWlsZEhUTUxfbWFrZVNwYW4oW1wiYmFzZVwiXSwgY2hpbGRyZW4sIG9wdGlvbnMpOyAvLyBBZGQgc3RydXQsIHdoaWNoIGVuc3VyZXMgdGhhdCB0aGUgdG9wIG9mIHRoZSBIVE1MIGVsZW1lbnQgZmFsbHMgYXRcbiAgLy8gdGhlIGhlaWdodCBvZiB0aGUgZXhwcmVzc2lvbiwgYW5kIHRoZSBib3R0b20gb2YgdGhlIEhUTUwgZWxlbWVudFxuICAvLyBmYWxscyBhdCB0aGUgZGVwdGggb2YgdGhlIGV4cHJlc3Npb24uXG4gIC8vIFdlIHVzZWQgdG8gaGF2ZSBzZXBhcmF0ZSB0b3AgYW5kIGJvdHRvbSBzdHJ1dHMsIHdoZXJlIHRoZSBib3R0b20gc3RydXRcbiAgLy8gd291bGQgbGlrZSB0byB1c2UgYHZlcnRpY2FsLWFsaWduOiB0b3BgLCBidXQgaW4gSUUgOSB0aGlzIGxvd2VycyB0aGVcbiAgLy8gYmFzZWxpbmUgb2YgdGhlIGJveCB0byB0aGUgYm90dG9tIG9mIHRoaXMgc3RydXQgKGluc3RlYWQgb2Ygc3RheWluZyBpblxuICAvLyB0aGUgbm9ybWFsIHBsYWNlKSBzbyB3ZSB1c2UgYW4gYWJzb2x1dGUgdmFsdWUgZm9yIHZlcnRpY2FsLWFsaWduIGluc3RlYWQuXG5cbiAgdmFyIHN0cnV0ID0gYnVpbGRIVE1MX21ha2VTcGFuKFtcInN0cnV0XCJdKTtcbiAgc3RydXQuc3R5bGUuaGVpZ2h0ID0gYm9keS5oZWlnaHQgKyBib2R5LmRlcHRoICsgXCJlbVwiO1xuICBzdHJ1dC5zdHlsZS52ZXJ0aWNhbEFsaWduID0gLWJvZHkuZGVwdGggKyBcImVtXCI7XG4gIGJvZHkuY2hpbGRyZW4udW5zaGlmdChzdHJ1dCk7XG4gIHJldHVybiBib2R5O1xufVxuLyoqXG4gKiBUYWtlIGFuIGVudGlyZSBwYXJzZSB0cmVlLCBhbmQgYnVpbGQgaXQgaW50byBhbiBhcHByb3ByaWF0ZSBzZXQgb2YgSFRNTFxuICogbm9kZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBidWlsZEhUTUwodHJlZSwgb3B0aW9ucykge1xuICAvLyBTdHJpcCBvZmYgb3V0ZXIgdGFnIHdyYXBwZXIgZm9yIHByb2Nlc3NpbmcgYmVsb3cuXG4gIHZhciB0YWcgPSBudWxsO1xuXG4gIGlmICh0cmVlLmxlbmd0aCA9PT0gMSAmJiB0cmVlWzBdLnR5cGUgPT09IFwidGFnXCIpIHtcbiAgICB0YWcgPSB0cmVlWzBdLnRhZztcbiAgICB0cmVlID0gdHJlZVswXS5ib2R5O1xuICB9IC8vIEJ1aWxkIHRoZSBleHByZXNzaW9uIGNvbnRhaW5lZCBpbiB0aGUgdHJlZVxuXG5cbiAgdmFyIGV4cHJlc3Npb24gPSBidWlsZEhUTUxfYnVpbGRFeHByZXNzaW9uKHRyZWUsIG9wdGlvbnMsIHRydWUpO1xuICB2YXIgY2hpbGRyZW4gPSBbXTsgLy8gQ3JlYXRlIG9uZSBiYXNlIG5vZGUgZm9yIGVhY2ggY2h1bmsgYmV0d2VlbiBwb3RlbnRpYWwgbGluZSBicmVha3MuXG4gIC8vIFRoZSBUZVhCb29rIFtwLjE3M10gc2F5cyBcIkEgZm9ybXVsYSB3aWxsIGJlIGJyb2tlbiBvbmx5IGFmdGVyIGFcbiAgLy8gcmVsYXRpb24gc3ltYm9sIGxpa2UgJD0kIG9yICQ8JCBvciAkXFxyaWdodGFycm93JCwgb3IgYWZ0ZXIgYSBiaW5hcnlcbiAgLy8gb3BlcmF0aW9uIHN5bWJvbCBsaWtlICQrJCBvciAkLSQgb3IgJFxcdGltZXMkLCB3aGVyZSB0aGUgcmVsYXRpb24gb3JcbiAgLy8gYmluYXJ5IG9wZXJhdGlvbiBpcyBvbiB0aGUgYGBvdXRlciBsZXZlbCcnIG9mIHRoZSBmb3JtdWxhIChpLmUuLCBub3RcbiAgLy8gZW5jbG9zZWQgaW4gey4uLn0gYW5kIG5vdCBwYXJ0IG9mIGFuIFxcb3ZlciBjb25zdHJ1Y3Rpb24pLlwiXG5cbiAgdmFyIHBhcnRzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9uLmxlbmd0aDsgaSsrKSB7XG4gICAgcGFydHMucHVzaChleHByZXNzaW9uW2ldKTtcblxuICAgIGlmIChleHByZXNzaW9uW2ldLmhhc0NsYXNzKFwibWJpblwiKSB8fCBleHByZXNzaW9uW2ldLmhhc0NsYXNzKFwibXJlbFwiKSB8fCBleHByZXNzaW9uW2ldLmhhc0NsYXNzKFwiYWxsb3dicmVha1wiKSkge1xuICAgICAgLy8gUHV0IGFueSBwb3N0LW9wZXJhdG9yIGdsdWUgb24gc2FtZSBsaW5lIGFzIG9wZXJhdG9yLlxuICAgICAgLy8gV2F0Y2ggZm9yIFxcbm9icmVhayBhbG9uZyB0aGUgd2F5LCBhbmQgc3RvcCBhdCBcXG5ld2xpbmUuXG4gICAgICB2YXIgbm9icmVhayA9IGZhbHNlO1xuXG4gICAgICB3aGlsZSAoaSA8IGV4cHJlc3Npb24ubGVuZ3RoIC0gMSAmJiBleHByZXNzaW9uW2kgKyAxXS5oYXNDbGFzcyhcIm1zcGFjZVwiKSAmJiAhZXhwcmVzc2lvbltpICsgMV0uaGFzQ2xhc3MoXCJuZXdsaW5lXCIpKSB7XG4gICAgICAgIGkrKztcbiAgICAgICAgcGFydHMucHVzaChleHByZXNzaW9uW2ldKTtcblxuICAgICAgICBpZiAoZXhwcmVzc2lvbltpXS5oYXNDbGFzcyhcIm5vYnJlYWtcIikpIHtcbiAgICAgICAgICBub2JyZWFrID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBEb24ndCBhbGxvdyBicmVhayBpZiBcXG5vYnJlYWsgYW1vbmcgdGhlIHBvc3Qtb3BlcmF0b3IgZ2x1ZS5cblxuXG4gICAgICBpZiAoIW5vYnJlYWspIHtcbiAgICAgICAgY2hpbGRyZW4ucHVzaChidWlsZEhUTUxVbmJyZWFrYWJsZShwYXJ0cywgb3B0aW9ucykpO1xuICAgICAgICBwYXJ0cyA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbltpXS5oYXNDbGFzcyhcIm5ld2xpbmVcIikpIHtcbiAgICAgIC8vIFdyaXRlIHRoZSBsaW5lIGV4Y2VwdCB0aGUgbmV3bGluZVxuICAgICAgcGFydHMucG9wKCk7XG5cbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNoaWxkcmVuLnB1c2goYnVpbGRIVE1MVW5icmVha2FibGUocGFydHMsIG9wdGlvbnMpKTtcbiAgICAgICAgcGFydHMgPSBbXTtcbiAgICAgIH0gLy8gUHV0IHRoZSBuZXdsaW5lIGF0IHRoZSB0b3AgbGV2ZWxcblxuXG4gICAgICBjaGlsZHJlbi5wdXNoKGV4cHJlc3Npb25baV0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgY2hpbGRyZW4ucHVzaChidWlsZEhUTUxVbmJyZWFrYWJsZShwYXJ0cywgb3B0aW9ucykpO1xuICB9IC8vIE5vdywgaWYgdGhlcmUgd2FzIGEgdGFnLCBidWlsZCBpdCB0b28gYW5kIGFwcGVuZCBpdCBhcyBhIGZpbmFsIGNoaWxkLlxuXG5cbiAgdmFyIHRhZ0NoaWxkO1xuXG4gIGlmICh0YWcpIHtcbiAgICB0YWdDaGlsZCA9IGJ1aWxkSFRNTFVuYnJlYWthYmxlKGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24odGFnLCBvcHRpb25zLCB0cnVlKSk7XG4gICAgdGFnQ2hpbGQuY2xhc3NlcyA9IFtcInRhZ1wiXTtcbiAgICBjaGlsZHJlbi5wdXNoKHRhZ0NoaWxkKTtcbiAgfVxuXG4gIHZhciBodG1sTm9kZSA9IGJ1aWxkSFRNTF9tYWtlU3BhbihbXCJrYXRleC1odG1sXCJdLCBjaGlsZHJlbik7XG4gIGh0bWxOb2RlLnNldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIsIFwidHJ1ZVwiKTsgLy8gQWRqdXN0IHRoZSBzdHJ1dCBvZiB0aGUgdGFnIHRvIGJlIHRoZSBtYXhpbXVtIGhlaWdodCBvZiBhbGwgY2hpbGRyZW5cbiAgLy8gKHRoZSBoZWlnaHQgb2YgdGhlIGVuY2xvc2luZyBodG1sTm9kZSkgZm9yIHByb3BlciB2ZXJ0aWNhbCBhbGlnbm1lbnQuXG5cbiAgaWYgKHRhZ0NoaWxkKSB7XG4gICAgdmFyIHN0cnV0ID0gdGFnQ2hpbGQuY2hpbGRyZW5bMF07XG4gICAgc3RydXQuc3R5bGUuaGVpZ2h0ID0gaHRtbE5vZGUuaGVpZ2h0ICsgaHRtbE5vZGUuZGVwdGggKyBcImVtXCI7XG4gICAgc3RydXQuc3R5bGUudmVydGljYWxBbGlnbiA9IC1odG1sTm9kZS5kZXB0aCArIFwiZW1cIjtcbiAgfVxuXG4gIHJldHVybiBodG1sTm9kZTtcbn1cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL21hdGhNTFRyZWUuanNcbi8qKlxuICogVGhlc2Ugb2JqZWN0cyBzdG9yZSBkYXRhIGFib3V0IE1hdGhNTCBub2Rlcy4gVGhpcyBpcyB0aGUgTWF0aE1MIGVxdWl2YWxlbnRcbiAqIG9mIHRoZSB0eXBlcyBpbiBkb21UcmVlLmpzLiBTaW5jZSBNYXRoTUwgaGFuZGxlcyBpdHMgb3duIHJlbmRlcmluZywgYW5kXG4gKiBzaW5jZSB3ZSdyZSBtYWlubHkgdXNpbmcgTWF0aE1MIHRvIGltcHJvdmUgYWNjZXNzaWJpbGl0eSwgd2UgZG9uJ3QgbWFuYWdlXG4gKiBhbnkgb2YgdGhlIHN0eWxpbmcgc3RhdGUgdGhhdCB0aGUgcGxhaW4gRE9NIG5vZGVzIGRvLlxuICpcbiAqIFRoZSBgdG9Ob2RlYCBhbmQgYHRvTWFya3VwYCBmdW5jdGlvbnMgd29yayBzaW1sYXJseSB0byBob3cgdGhleSBkbyBpblxuICogZG9tVHJlZS5qcywgY3JlYXRpbmcgbmFtZXNwYWNlZCBET00gbm9kZXMgYW5kIEhUTUwgdGV4dCBtYXJrdXAgcmVzcGVjdGl2ZWx5LlxuICovXG5cblxuZnVuY3Rpb24gbmV3RG9jdW1lbnRGcmFnbWVudChjaGlsZHJlbikge1xuICByZXR1cm4gbmV3IHRyZWVfRG9jdW1lbnRGcmFnbWVudChjaGlsZHJlbik7XG59XG4vKipcbiAqIFRoaXMgbm9kZSByZXByZXNlbnRzIGEgZ2VuZXJhbCBwdXJwb3NlIE1hdGhNTCBub2RlIG9mIGFueSB0eXBlLiBUaGVcbiAqIGNvbnN0cnVjdG9yIHJlcXVpcmVzIHRoZSB0eXBlIG9mIG5vZGUgdG8gY3JlYXRlIChmb3IgZXhhbXBsZSwgYFwibW9cImAgb3JcbiAqIGBcIm1zcGFjZVwiYCwgY29ycmVzcG9uZGluZyB0byBgPG1vPmAgYW5kIGA8bXNwYWNlPmAgdGFncykuXG4gKi9cblxudmFyIG1hdGhNTFRyZWVfTWF0aE5vZGUgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBNYXRoTm9kZSh0eXBlLCBjaGlsZHJlbikge1xuICAgIHRoaXMudHlwZSA9IHZvaWQgMDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSB2b2lkIDA7XG4gICAgdGhpcy5jaGlsZHJlbiA9IHZvaWQgMDtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHt9O1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbiB8fCBbXTtcbiAgfVxuICAvKipcbiAgICogU2V0cyBhbiBhdHRyaWJ1dGUgb24gYSBNYXRoTUwgbm9kZS4gTWF0aE1MIGRlcGVuZHMgb24gYXR0cmlidXRlcyB0byBjb252ZXkgYVxuICAgKiBzZW1hbnRpYyBjb250ZW50LCBzbyB0aGlzIGlzIHVzZWQgaGVhdmlseS5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gTWF0aE5vZGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbiBzZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpIHtcbiAgICB0aGlzLmF0dHJpYnV0ZXNbbmFtZV0gPSB2YWx1ZTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBhbiBhdHRyaWJ1dGUgb24gYSBNYXRoTUwgbm9kZS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZ2V0QXR0cmlidXRlID0gZnVuY3Rpb24gZ2V0QXR0cmlidXRlKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW25hbWVdO1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgbWF0aCBub2RlIGludG8gYSBNYXRoTUwtbmFtZXNwYWNlZCBET00gZWxlbWVudC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8udG9Ob2RlID0gZnVuY3Rpb24gdG9Ob2RlKCkge1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiLCB0aGlzLnR5cGUpO1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyLCB0aGlzLmF0dHJpYnV0ZXNbYXR0cl0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZS5hcHBlbmRDaGlsZCh0aGlzLmNoaWxkcmVuW2ldLnRvTm9kZSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIG1hdGggbm9kZSBpbnRvIGFuIEhUTUwgbWFya3VwIHN0cmluZy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8udG9NYXJrdXAgPSBmdW5jdGlvbiB0b01hcmt1cCgpIHtcbiAgICB2YXIgbWFya3VwID0gXCI8XCIgKyB0aGlzLnR5cGU7IC8vIEFkZCB0aGUgYXR0cmlidXRlc1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBtYXJrdXAgKz0gXCIgXCIgKyBhdHRyICsgXCI9XFxcIlwiO1xuICAgICAgICBtYXJrdXAgKz0gdXRpbHMuZXNjYXBlKHRoaXMuYXR0cmlidXRlc1thdHRyXSk7XG4gICAgICAgIG1hcmt1cCArPSBcIlxcXCJcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtYXJrdXAgKz0gXCI+XCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1hcmt1cCArPSB0aGlzLmNoaWxkcmVuW2ldLnRvTWFya3VwKCk7XG4gICAgfVxuXG4gICAgbWFya3VwICs9IFwiPC9cIiArIHRoaXMudHlwZSArIFwiPlwiO1xuICAgIHJldHVybiBtYXJrdXA7XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBtYXRoIG5vZGUgaW50byBhIHN0cmluZywgc2ltaWxhciB0byBpbm5lclRleHQsIGJ1dCBlc2NhcGVkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by50b1RleHQgPSBmdW5jdGlvbiB0b1RleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgcmV0dXJuIGNoaWxkLnRvVGV4dCgpO1xuICAgIH0pLmpvaW4oXCJcIik7XG4gIH07XG5cbiAgcmV0dXJuIE1hdGhOb2RlO1xufSgpO1xuLyoqXG4gKiBUaGlzIG5vZGUgcmVwcmVzZW50cyBhIHBpZWNlIG9mIHRleHQuXG4gKi9cblxudmFyIG1hdGhNTFRyZWVfVGV4dE5vZGUgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBUZXh0Tm9kZSh0ZXh0KSB7XG4gICAgdGhpcy50ZXh0ID0gdm9pZCAwO1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSB0ZXh0IG5vZGUgaW50byBhIERPTSB0ZXh0IG5vZGUuXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90bzIgPSBUZXh0Tm9kZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvMi50b05vZGUgPSBmdW5jdGlvbiB0b05vZGUoKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMudGV4dCk7XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSB0ZXh0IG5vZGUgaW50byBlc2NhcGVkIEhUTUwgbWFya3VwXG4gICAqIChyZXByZXNlbnRpbmcgdGhlIHRleHQgaXRzZWxmKS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8yLnRvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAoKSB7XG4gICAgcmV0dXJuIHV0aWxzLmVzY2FwZSh0aGlzLnRvVGV4dCgpKTtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIHRleHQgbm9kZSBpbnRvIGEgc3RyaW5nXG4gICAqIChyZXByZXNlbnRpbmcgdGhlIHRleHQgaXRlc2VsZikuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvMi50b1RleHQgPSBmdW5jdGlvbiB0b1RleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dDtcbiAgfTtcblxuICByZXR1cm4gVGV4dE5vZGU7XG59KCk7XG4vKipcbiAqIFRoaXMgbm9kZSByZXByZXNlbnRzIGEgc3BhY2UsIGJ1dCBtYXkgcmVuZGVyIGFzIDxtc3BhY2UuLi4vPiBvciBhcyB0ZXh0LFxuICogZGVwZW5kaW5nIG9uIHRoZSB3aWR0aC5cbiAqL1xuXG52YXIgU3BhY2VOb2RlID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIFNwYWNlIG5vZGUgd2l0aCB3aWR0aCBnaXZlbiBpbiBDU1MgZW1zLlxuICAgKi9cbiAgZnVuY3Rpb24gU3BhY2VOb2RlKHdpZHRoKSB7XG4gICAgdGhpcy53aWR0aCA9IHZvaWQgMDtcbiAgICB0aGlzLmNoYXJhY3RlciA9IHZvaWQgMDtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7IC8vIFNlZSBodHRwczovL3d3dy53My5vcmcvVFIvMjAwMC9XRC1NYXRoTUwyLTIwMDAwMzI4L2NoYXB0ZXI2Lmh0bWxcbiAgICAvLyBmb3IgYSB0YWJsZSBvZiBzcGFjZS1saWtlIGNoYXJhY3RlcnMuICBXZSB1c2UgVW5pY29kZVxuICAgIC8vIHJlcHJlc2VudGF0aW9ucyBpbnN0ZWFkIG9mICZMb25nTmFtZXM7IGFzIGl0J3Mgbm90IGNsZWFyIGhvdyB0b1xuICAgIC8vIG1ha2UgdGhlIGxhdHRlciB2aWEgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUuXG5cbiAgICBpZiAod2lkdGggPj0gMC4wNTU1NSAmJiB3aWR0aCA8PSAwLjA1NTU2KSB7XG4gICAgICB0aGlzLmNoYXJhY3RlciA9IFwiXFx1MjAwQVwiOyAvLyAmVmVyeVRoaW5TcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IDAuMTY2NiAmJiB3aWR0aCA8PSAwLjE2NjcpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gXCJcXHUyMDA5XCI7IC8vICZUaGluU3BhY2U7XG4gICAgfSBlbHNlIGlmICh3aWR0aCA+PSAwLjIyMjIgJiYgd2lkdGggPD0gMC4yMjIzKSB7XG4gICAgICB0aGlzLmNoYXJhY3RlciA9IFwiXFx1MjAwNVwiOyAvLyAmTWVkaXVtU3BhY2U7XG4gICAgfSBlbHNlIGlmICh3aWR0aCA+PSAwLjI3NzcgJiYgd2lkdGggPD0gMC4yNzc4KSB7XG4gICAgICB0aGlzLmNoYXJhY3RlciA9IFwiXFx1MjAwNVxcdTIwMEFcIjsgLy8gJlRoaWNrU3BhY2U7XG4gICAgfSBlbHNlIGlmICh3aWR0aCA+PSAtMC4wNTU1NiAmJiB3aWR0aCA8PSAtMC4wNTU1NSkge1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBcIlxcdTIwMEFcXHUyMDYzXCI7IC8vICZOZWdhdGl2ZVZlcnlUaGluU3BhY2U7XG4gICAgfSBlbHNlIGlmICh3aWR0aCA+PSAtMC4xNjY3ICYmIHdpZHRoIDw9IC0wLjE2NjYpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gXCJcXHUyMDA5XFx1MjA2M1wiOyAvLyAmTmVnYXRpdmVUaGluU3BhY2U7XG4gICAgfSBlbHNlIGlmICh3aWR0aCA+PSAtMC4yMjIzICYmIHdpZHRoIDw9IC0wLjIyMjIpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gXCJcXHUyMDVGXFx1MjA2M1wiOyAvLyAmTmVnYXRpdmVNZWRpdW1TcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IC0wLjI3NzggJiYgd2lkdGggPD0gLTAuMjc3Nykge1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBcIlxcdTIwMDVcXHUyMDYzXCI7IC8vICZOZWdhdGl2ZVRoaWNrU3BhY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBtYXRoIG5vZGUgaW50byBhIE1hdGhNTC1uYW1lc3BhY2VkIERPTSBlbGVtZW50LlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8zID0gU3BhY2VOb2RlLnByb3RvdHlwZTtcblxuICBfcHJvdG8zLnRvTm9kZSA9IGZ1bmN0aW9uIHRvTm9kZSgpIHtcbiAgICBpZiAodGhpcy5jaGFyYWN0ZXIpIHtcbiAgICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLmNoYXJhY3Rlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiLCBcIm1zcGFjZVwiKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgdGhpcy53aWR0aCArIFwiZW1cIik7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBtYXRoIG5vZGUgaW50byBhbiBIVE1MIG1hcmt1cCBzdHJpbmcuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvMy50b01hcmt1cCA9IGZ1bmN0aW9uIHRvTWFya3VwKCkge1xuICAgIGlmICh0aGlzLmNoYXJhY3Rlcikge1xuICAgICAgcmV0dXJuIFwiPG10ZXh0PlwiICsgdGhpcy5jaGFyYWN0ZXIgKyBcIjwvbXRleHQ+XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIjxtc3BhY2Ugd2lkdGg9XFxcIlwiICsgdGhpcy53aWR0aCArIFwiZW1cXFwiLz5cIjtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBtYXRoIG5vZGUgaW50byBhIHN0cmluZywgc2ltaWxhciB0byBpbm5lclRleHQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvMy50b1RleHQgPSBmdW5jdGlvbiB0b1RleHQoKSB7XG4gICAgaWYgKHRoaXMuY2hhcmFjdGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGFyYWN0ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIiBcIjtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFNwYWNlTm9kZTtcbn0oKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbWF0aE1MVHJlZSA9ICh7XG4gIE1hdGhOb2RlOiBtYXRoTUxUcmVlX01hdGhOb2RlLFxuICBUZXh0Tm9kZTogbWF0aE1MVHJlZV9UZXh0Tm9kZSxcbiAgU3BhY2VOb2RlOiBTcGFjZU5vZGUsXG4gIG5ld0RvY3VtZW50RnJhZ21lbnQ6IG5ld0RvY3VtZW50RnJhZ21lbnRcbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvYnVpbGRNYXRoTUwuanNcbi8qKlxuICogVGhpcyBmaWxlIGNvbnZlcnRzIGEgcGFyc2UgdHJlZSBpbnRvIGEgY29vcmVzcG9uZGluZyBNYXRoTUwgdHJlZS4gVGhlIG1haW5cbiAqIGVudHJ5IHBvaW50IGlzIHRoZSBgYnVpbGRNYXRoTUxgIGZ1bmN0aW9uLCB3aGljaCB0YWtlcyBhIHBhcnNlIHRyZWUgZnJvbSB0aGVcbiAqIHBhcnNlci5cbiAqL1xuXG5cblxuXG5cblxuXG5cblxuLyoqXG4gKiBUYWtlcyBhIHN5bWJvbCBhbmQgY29udmVydHMgaXQgaW50byBhIE1hdGhNTCB0ZXh0IG5vZGUgYWZ0ZXIgcGVyZm9ybWluZ1xuICogb3B0aW9uYWwgcmVwbGFjZW1lbnQgZnJvbSBzeW1ib2xzLmpzLlxuICovXG52YXIgYnVpbGRNYXRoTUxfbWFrZVRleHQgPSBmdW5jdGlvbiBtYWtlVGV4dCh0ZXh0LCBtb2RlLCBvcHRpb25zKSB7XG4gIGlmIChzcmNfc3ltYm9sc1ttb2RlXVt0ZXh0XSAmJiBzcmNfc3ltYm9sc1ttb2RlXVt0ZXh0XS5yZXBsYWNlICYmIHRleHQuY2hhckNvZGVBdCgwKSAhPT0gMHhEODM1ICYmICEobGlnYXR1cmVzLmhhc093blByb3BlcnR5KHRleHQpICYmIG9wdGlvbnMgJiYgKG9wdGlvbnMuZm9udEZhbWlseSAmJiBvcHRpb25zLmZvbnRGYW1pbHkuc3Vic3RyKDQsIDIpID09PSBcInR0XCIgfHwgb3B0aW9ucy5mb250ICYmIG9wdGlvbnMuZm9udC5zdWJzdHIoNCwgMikgPT09IFwidHRcIikpKSB7XG4gICAgdGV4dCA9IHNyY19zeW1ib2xzW21vZGVdW3RleHRdLnJlcGxhY2U7XG4gIH1cblxuICByZXR1cm4gbmV3IG1hdGhNTFRyZWUuVGV4dE5vZGUodGV4dCk7XG59O1xuLyoqXG4gKiBXcmFwIHRoZSBnaXZlbiBhcnJheSBvZiBub2RlcyBpbiBhbiA8bXJvdz4gbm9kZSBpZiBuZWVkZWQsIGkuZS4sXG4gKiB1bmxlc3MgdGhlIGFycmF5IGhhcyBsZW5ndGggMS4gIEFsd2F5cyByZXR1cm5zIGEgc2luZ2xlIG5vZGUuXG4gKi9cblxudmFyIGJ1aWxkTWF0aE1MX21ha2VSb3cgPSBmdW5jdGlvbiBtYWtlUm93KGJvZHkpIHtcbiAgaWYgKGJvZHkubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGJvZHlbMF07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXJvd1wiLCBib2R5KTtcbiAgfVxufTtcbi8qKlxuICogUmV0dXJucyB0aGUgbWF0aCB2YXJpYW50IGFzIGEgc3RyaW5nIG9yIG51bGwgaWYgbm9uZSBpcyByZXF1aXJlZC5cbiAqL1xuXG52YXIgYnVpbGRNYXRoTUxfZ2V0VmFyaWFudCA9IGZ1bmN0aW9uIGdldFZhcmlhbnQoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgLy8gSGFuZGxlIFxcdGV4dC4uLiBmb250IHNwZWNpZmllcnMgYXMgYmVzdCB3ZSBjYW4uXG4gIC8vIE1hdGhNTCBoYXMgYSBsaW1pdGVkIGxpc3Qgb2YgYWxsb3dhYmxlIG1hdGh2YXJpYW50IHNwZWNpZmllcnM7IHNlZVxuICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvTWF0aE1MMy9jaGFwdGVyMy5odG1sI3ByZXNtLmNvbW1hdHRcbiAgaWYgKG9wdGlvbnMuZm9udEZhbWlseSA9PT0gXCJ0ZXh0dHRcIikge1xuICAgIHJldHVybiBcIm1vbm9zcGFjZVwiO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9udEZhbWlseSA9PT0gXCJ0ZXh0c2ZcIikge1xuICAgIGlmIChvcHRpb25zLmZvbnRTaGFwZSA9PT0gXCJ0ZXh0aXRcIiAmJiBvcHRpb25zLmZvbnRXZWlnaHQgPT09IFwidGV4dGJmXCIpIHtcbiAgICAgIHJldHVybiBcInNhbnMtc2VyaWYtYm9sZC1pdGFsaWNcIjtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9udFNoYXBlID09PSBcInRleHRpdFwiKSB7XG4gICAgICByZXR1cm4gXCJzYW5zLXNlcmlmLWl0YWxpY1wiO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5mb250V2VpZ2h0ID09PSBcInRleHRiZlwiKSB7XG4gICAgICByZXR1cm4gXCJib2xkLXNhbnMtc2VyaWZcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwic2Fucy1zZXJpZlwiO1xuICAgIH1cbiAgfSBlbHNlIGlmIChvcHRpb25zLmZvbnRTaGFwZSA9PT0gXCJ0ZXh0aXRcIiAmJiBvcHRpb25zLmZvbnRXZWlnaHQgPT09IFwidGV4dGJmXCIpIHtcbiAgICByZXR1cm4gXCJib2xkLWl0YWxpY1wiO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9udFNoYXBlID09PSBcInRleHRpdFwiKSB7XG4gICAgcmV0dXJuIFwiaXRhbGljXCI7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5mb250V2VpZ2h0ID09PSBcInRleHRiZlwiKSB7XG4gICAgcmV0dXJuIFwiYm9sZFwiO1xuICB9XG5cbiAgdmFyIGZvbnQgPSBvcHRpb25zLmZvbnQ7XG5cbiAgaWYgKCFmb250IHx8IGZvbnQgPT09IFwibWF0aG5vcm1hbFwiKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbW9kZSA9IGdyb3VwLm1vZGU7XG5cbiAgaWYgKGZvbnQgPT09IFwibWF0aGl0XCIpIHtcbiAgICByZXR1cm4gXCJpdGFsaWNcIjtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcImJvbGRzeW1ib2xcIikge1xuICAgIHJldHVybiBcImJvbGQtaXRhbGljXCI7XG4gIH0gZWxzZSBpZiAoZm9udCA9PT0gXCJtYXRoYmZcIikge1xuICAgIHJldHVybiBcImJvbGRcIjtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcIm1hdGhiYlwiKSB7XG4gICAgcmV0dXJuIFwiZG91YmxlLXN0cnVja1wiO1xuICB9IGVsc2UgaWYgKGZvbnQgPT09IFwibWF0aGZyYWtcIikge1xuICAgIHJldHVybiBcImZyYWt0dXJcIjtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcIm1hdGhzY3JcIiB8fCBmb250ID09PSBcIm1hdGhjYWxcIikge1xuICAgIC8vIE1hdGhNTCBtYWtlcyBubyBkaXN0aW5jdGlvbiBiZXR3ZWVuIHNjcmlwdCBhbmQgY2FsaWdyYWhwaWNcbiAgICByZXR1cm4gXCJzY3JpcHRcIjtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcIm1hdGhzZlwiKSB7XG4gICAgcmV0dXJuIFwic2Fucy1zZXJpZlwiO1xuICB9IGVsc2UgaWYgKGZvbnQgPT09IFwibWF0aHR0XCIpIHtcbiAgICByZXR1cm4gXCJtb25vc3BhY2VcIjtcbiAgfVxuXG4gIHZhciB0ZXh0ID0gZ3JvdXAudGV4dDtcblxuICBpZiAodXRpbHMuY29udGFpbnMoW1wiXFxcXGltYXRoXCIsIFwiXFxcXGptYXRoXCJdLCB0ZXh0KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHNyY19zeW1ib2xzW21vZGVdW3RleHRdICYmIHNyY19zeW1ib2xzW21vZGVdW3RleHRdLnJlcGxhY2UpIHtcbiAgICB0ZXh0ID0gc3JjX3N5bWJvbHNbbW9kZV1bdGV4dF0ucmVwbGFjZTtcbiAgfVxuXG4gIHZhciBmb250TmFtZSA9IGJ1aWxkQ29tbW9uLmZvbnRNYXBbZm9udF0uZm9udE5hbWU7XG5cbiAgaWYgKGdldENoYXJhY3Rlck1ldHJpY3ModGV4dCwgZm9udE5hbWUsIG1vZGUpKSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLmZvbnRNYXBbZm9udF0udmFyaWFudDtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcbi8qKlxuICogVGFrZXMgYSBsaXN0IG9mIG5vZGVzLCBidWlsZHMgdGhlbSwgYW5kIHJldHVybnMgYSBsaXN0IG9mIHRoZSBnZW5lcmF0ZWRcbiAqIE1hdGhNTCBub2Rlcy4gIEFsc28gY29tYmluZSBjb25zZWN1dGl2ZSA8bXRleHQ+IG91dHB1dHMgaW50byBhIHNpbmdsZVxuICogPG10ZXh0PiB0YWcuXG4gKi9cblxudmFyIGJ1aWxkTWF0aE1MX2J1aWxkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIGJ1aWxkRXhwcmVzc2lvbihleHByZXNzaW9uLCBvcHRpb25zLCBpc09yZGdyb3VwKSB7XG4gIGlmIChleHByZXNzaW9uLmxlbmd0aCA9PT0gMSkge1xuICAgIHZhciBncm91cCA9IGJ1aWxkTWF0aE1MX2J1aWxkR3JvdXAoZXhwcmVzc2lvblswXSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoaXNPcmRncm91cCAmJiBncm91cCBpbnN0YW5jZW9mIG1hdGhNTFRyZWVfTWF0aE5vZGUgJiYgZ3JvdXAudHlwZSA9PT0gXCJtb1wiKSB7XG4gICAgICAvLyBXaGVuIFRlWCB3cml0ZXJzIHdhbnQgdG8gc3VwcHJlc3Mgc3BhY2luZyBvbiBhbiBvcGVyYXRvcixcbiAgICAgIC8vIHRoZXkgb2Z0ZW4gcHV0IHRoZSBvcGVyYXRvciBieSBpdHNlbGYgaW5zaWRlIGJyYWNlcy5cbiAgICAgIGdyb3VwLnNldEF0dHJpYnV0ZShcImxzcGFjZVwiLCBcIjBlbVwiKTtcbiAgICAgIGdyb3VwLnNldEF0dHJpYnV0ZShcInJzcGFjZVwiLCBcIjBlbVwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gW2dyb3VwXTtcbiAgfVxuXG4gIHZhciBncm91cHMgPSBbXTtcbiAgdmFyIGxhc3RHcm91cDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cHJlc3Npb24ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgX2dyb3VwID0gYnVpbGRNYXRoTUxfYnVpbGRHcm91cChleHByZXNzaW9uW2ldLCBvcHRpb25zKTtcblxuICAgIGlmIChfZ3JvdXAgaW5zdGFuY2VvZiBtYXRoTUxUcmVlX01hdGhOb2RlICYmIGxhc3RHcm91cCBpbnN0YW5jZW9mIG1hdGhNTFRyZWVfTWF0aE5vZGUpIHtcbiAgICAgIC8vIENvbmNhdGVuYXRlIGFkamFjZW50IDxtdGV4dD5zXG4gICAgICBpZiAoX2dyb3VwLnR5cGUgPT09ICdtdGV4dCcgJiYgbGFzdEdyb3VwLnR5cGUgPT09ICdtdGV4dCcgJiYgX2dyb3VwLmdldEF0dHJpYnV0ZSgnbWF0aHZhcmlhbnQnKSA9PT0gbGFzdEdyb3VwLmdldEF0dHJpYnV0ZSgnbWF0aHZhcmlhbnQnKSkge1xuICAgICAgICB2YXIgX2xhc3RHcm91cCRjaGlsZHJlbjtcblxuICAgICAgICAoX2xhc3RHcm91cCRjaGlsZHJlbiA9IGxhc3RHcm91cC5jaGlsZHJlbikucHVzaC5hcHBseShfbGFzdEdyb3VwJGNoaWxkcmVuLCBfZ3JvdXAuY2hpbGRyZW4pO1xuXG4gICAgICAgIGNvbnRpbnVlOyAvLyBDb25jYXRlbmF0ZSBhZGphY2VudCA8bW4+c1xuICAgICAgfSBlbHNlIGlmIChfZ3JvdXAudHlwZSA9PT0gJ21uJyAmJiBsYXN0R3JvdXAudHlwZSA9PT0gJ21uJykge1xuICAgICAgICB2YXIgX2xhc3RHcm91cCRjaGlsZHJlbjI7XG5cbiAgICAgICAgKF9sYXN0R3JvdXAkY2hpbGRyZW4yID0gbGFzdEdyb3VwLmNoaWxkcmVuKS5wdXNoLmFwcGx5KF9sYXN0R3JvdXAkY2hpbGRyZW4yLCBfZ3JvdXAuY2hpbGRyZW4pO1xuXG4gICAgICAgIGNvbnRpbnVlOyAvLyBDb25jYXRlbmF0ZSA8bW4+Li4uPC9tbj4gZm9sbG93ZWQgYnkgPG1pPi48L21pPlxuICAgICAgfSBlbHNlIGlmIChfZ3JvdXAudHlwZSA9PT0gJ21pJyAmJiBfZ3JvdXAuY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmIGxhc3RHcm91cC50eXBlID09PSAnbW4nKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IF9ncm91cC5jaGlsZHJlblswXTtcblxuICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBtYXRoTUxUcmVlX1RleHROb2RlICYmIGNoaWxkLnRleHQgPT09ICcuJykge1xuICAgICAgICAgIHZhciBfbGFzdEdyb3VwJGNoaWxkcmVuMztcblxuICAgICAgICAgIChfbGFzdEdyb3VwJGNoaWxkcmVuMyA9IGxhc3RHcm91cC5jaGlsZHJlbikucHVzaC5hcHBseShfbGFzdEdyb3VwJGNoaWxkcmVuMywgX2dyb3VwLmNoaWxkcmVuKTtcblxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGxhc3RHcm91cC50eXBlID09PSAnbWknICYmIGxhc3RHcm91cC5jaGlsZHJlbi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdmFyIGxhc3RDaGlsZCA9IGxhc3RHcm91cC5jaGlsZHJlblswXTtcblxuICAgICAgICBpZiAobGFzdENoaWxkIGluc3RhbmNlb2YgbWF0aE1MVHJlZV9UZXh0Tm9kZSAmJiBsYXN0Q2hpbGQudGV4dCA9PT0gXCJcXHUwMzM4XCIgJiYgKF9ncm91cC50eXBlID09PSAnbW8nIHx8IF9ncm91cC50eXBlID09PSAnbWknIHx8IF9ncm91cC50eXBlID09PSAnbW4nKSkge1xuICAgICAgICAgIHZhciBfY2hpbGQgPSBfZ3JvdXAuY2hpbGRyZW5bMF07XG5cbiAgICAgICAgICBpZiAoX2NoaWxkIGluc3RhbmNlb2YgbWF0aE1MVHJlZV9UZXh0Tm9kZSAmJiBfY2hpbGQudGV4dC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBPdmVybGF5IHdpdGggY29tYmluaW5nIGNoYXJhY3RlciBsb25nIHNvbGlkdXNcbiAgICAgICAgICAgIF9jaGlsZC50ZXh0ID0gX2NoaWxkLnRleHQuc2xpY2UoMCwgMSkgKyBcIlxcdTAzMzhcIiArIF9jaGlsZC50ZXh0LnNsaWNlKDEpO1xuICAgICAgICAgICAgZ3JvdXBzLnBvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGdyb3Vwcy5wdXNoKF9ncm91cCk7XG4gICAgbGFzdEdyb3VwID0gX2dyb3VwO1xuICB9XG5cbiAgcmV0dXJuIGdyb3Vwcztcbn07XG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gYnVpbGRFeHByZXNzaW9uLCBidXQgd3JhcHMgdGhlIGVsZW1lbnRzIGluIGFuIDxtcm93PlxuICogaWYgdGhlcmUncyBtb3JlIHRoYW4gb25lLiAgUmV0dXJucyBhIHNpbmdsZSBub2RlIGluc3RlYWQgb2YgYW4gYXJyYXkuXG4gKi9cblxudmFyIGJ1aWxkRXhwcmVzc2lvblJvdyA9IGZ1bmN0aW9uIGJ1aWxkRXhwcmVzc2lvblJvdyhleHByZXNzaW9uLCBvcHRpb25zLCBpc09yZGdyb3VwKSB7XG4gIHJldHVybiBidWlsZE1hdGhNTF9tYWtlUm93KGJ1aWxkTWF0aE1MX2J1aWxkRXhwcmVzc2lvbihleHByZXNzaW9uLCBvcHRpb25zLCBpc09yZGdyb3VwKSk7XG59O1xuLyoqXG4gKiBUYWtlcyBhIGdyb3VwIGZyb20gdGhlIHBhcnNlciBhbmQgY2FsbHMgdGhlIGFwcHJvcHJpYXRlIGdyb3VwQnVpbGRlcnMgZnVuY3Rpb25cbiAqIG9uIGl0IHRvIHByb2R1Y2UgYSBNYXRoTUwgbm9kZS5cbiAqL1xuXG52YXIgYnVpbGRNYXRoTUxfYnVpbGRHcm91cCA9IGZ1bmN0aW9uIGJ1aWxkR3JvdXAoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgaWYgKCFncm91cCkge1xuICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1yb3dcIik7XG4gIH1cblxuICBpZiAoX21hdGhtbEdyb3VwQnVpbGRlcnNbZ3JvdXAudHlwZV0pIHtcbiAgICAvLyBDYWxsIHRoZSBncm91cEJ1aWxkZXJzIGZ1bmN0aW9uXG4gICAgdmFyIHJlc3VsdCA9IF9tYXRobWxHcm91cEJ1aWxkZXJzW2dyb3VwLnR5cGVdKGdyb3VwLCBvcHRpb25zKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkdvdCBncm91cCBvZiB1bmtub3duIHR5cGU6ICdcIiArIGdyb3VwLnR5cGUgKyBcIidcIik7XG4gIH1cbn07XG4vKipcbiAqIFRha2VzIGEgZnVsbCBwYXJzZSB0cmVlIGFuZCBzZXR0aW5ncyBhbmQgYnVpbGRzIGEgTWF0aE1MIHJlcHJlc2VudGF0aW9uIG9mXG4gKiBpdC4gSW4gcGFydGljdWxhciwgd2UgcHV0IHRoZSBlbGVtZW50cyBmcm9tIGJ1aWxkaW5nIHRoZSBwYXJzZSB0cmVlIGludG8gYVxuICogPHNlbWFudGljcz4gdGFnIHNvIHdlIGNhbiBhbHNvIGluY2x1ZGUgdGhhdCBUZVggc291cmNlIGFzIGFuIGFubm90YXRpb24uXG4gKlxuICogTm90ZSB0aGF0IHdlIGFjdHVhbGx5IHJldHVybiBhIGRvbVRyZWUgZWxlbWVudCB3aXRoIGEgYDxtYXRoPmAgaW5zaWRlIGl0IHNvXG4gKiB3ZSBjYW4gZG8gYXBwcm9wcmlhdGUgc3R5bGluZy5cbiAqL1xuXG5mdW5jdGlvbiBidWlsZE1hdGhNTCh0cmVlLCB0ZXhFeHByZXNzaW9uLCBvcHRpb25zLCBmb3JNYXRobWxPbmx5KSB7XG4gIHZhciBleHByZXNzaW9uID0gYnVpbGRNYXRoTUxfYnVpbGRFeHByZXNzaW9uKHRyZWUsIG9wdGlvbnMpOyAvLyBXcmFwIHVwIHRoZSBleHByZXNzaW9uIGluIGFuIG1yb3cgc28gaXQgaXMgcHJlc2VudGVkIGluIHRoZSBzZW1hbnRpY3NcbiAgLy8gdGFnIGNvcnJlY3RseSwgdW5sZXNzIGl0J3MgYSBzaW5nbGUgPG1yb3c+IG9yIDxtdGFibGU+LlxuXG4gIHZhciB3cmFwcGVyO1xuXG4gIGlmIChleHByZXNzaW9uLmxlbmd0aCA9PT0gMSAmJiBleHByZXNzaW9uWzBdIGluc3RhbmNlb2YgbWF0aE1MVHJlZV9NYXRoTm9kZSAmJiB1dGlscy5jb250YWlucyhbXCJtcm93XCIsIFwibXRhYmxlXCJdLCBleHByZXNzaW9uWzBdLnR5cGUpKSB7XG4gICAgd3JhcHBlciA9IGV4cHJlc3Npb25bMF07XG4gIH0gZWxzZSB7XG4gICAgd3JhcHBlciA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXJvd1wiLCBleHByZXNzaW9uKTtcbiAgfSAvLyBCdWlsZCBhIFRlWCBhbm5vdGF0aW9uIG9mIHRoZSBzb3VyY2VcblxuXG4gIHZhciBhbm5vdGF0aW9uID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJhbm5vdGF0aW9uXCIsIFtuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZSh0ZXhFeHByZXNzaW9uKV0pO1xuICBhbm5vdGF0aW9uLnNldEF0dHJpYnV0ZShcImVuY29kaW5nXCIsIFwiYXBwbGljYXRpb24veC10ZXhcIik7XG4gIHZhciBzZW1hbnRpY3MgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcInNlbWFudGljc1wiLCBbd3JhcHBlciwgYW5ub3RhdGlvbl0pO1xuICB2YXIgbWF0aCA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibWF0aFwiLCBbc2VtYW50aWNzXSk7XG4gIG1hdGguc2V0QXR0cmlidXRlKFwieG1sbnNcIiwgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCIpOyAvLyBZb3UgY2FuJ3Qgc3R5bGUgPG1hdGg+IG5vZGVzLCBzbyB3ZSB3cmFwIHRoZSBub2RlIGluIGEgc3Bhbi5cbiAgLy8gTk9URTogVGhlIHNwYW4gY2xhc3MgaXMgbm90IHR5cGVkIHRvIGhhdmUgPG1hdGg+IG5vZGVzIGFzIGNoaWxkcmVuLCBhbmRcbiAgLy8gd2UgZG9uJ3Qgd2FudCB0byBtYWtlIHRoZSBjaGlsZHJlbiB0eXBlIG1vcmUgZ2VuZXJpYyBzaW5jZSB0aGUgY2hpbGRyZW5cbiAgLy8gb2Ygc3BhbiBhcmUgZXhwZWN0ZWQgdG8gaGF2ZSBtb3JlIGZpZWxkcyBpbiBgYnVpbGRIdG1sYCBjb250ZXh0cy5cblxuICB2YXIgd3JhcHBlckNsYXNzID0gZm9yTWF0aG1sT25seSA/IFwia2F0ZXhcIiA6IFwia2F0ZXgtbWF0aG1sXCI7IC8vICRGbG93Rml4TWVcblxuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW3dyYXBwZXJDbGFzc10sIFttYXRoXSk7XG59XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9idWlsZFRyZWUuanNcblxuXG5cblxuXG5cblxudmFyIGJ1aWxkVHJlZV9vcHRpb25zRnJvbVNldHRpbmdzID0gZnVuY3Rpb24gb3B0aW9uc0Zyb21TZXR0aW5ncyhzZXR0aW5ncykge1xuICByZXR1cm4gbmV3IHNyY19PcHRpb25zKHtcbiAgICBzdHlsZTogc2V0dGluZ3MuZGlzcGxheU1vZGUgPyBzcmNfU3R5bGUuRElTUExBWSA6IHNyY19TdHlsZS5URVhULFxuICAgIG1heFNpemU6IHNldHRpbmdzLm1heFNpemUsXG4gICAgbWluUnVsZVRoaWNrbmVzczogc2V0dGluZ3MubWluUnVsZVRoaWNrbmVzc1xuICB9KTtcbn07XG5cbnZhciBidWlsZFRyZWVfZGlzcGxheVdyYXAgPSBmdW5jdGlvbiBkaXNwbGF5V3JhcChub2RlLCBzZXR0aW5ncykge1xuICBpZiAoc2V0dGluZ3MuZGlzcGxheU1vZGUpIHtcbiAgICB2YXIgY2xhc3NlcyA9IFtcImthdGV4LWRpc3BsYXlcIl07XG5cbiAgICBpZiAoc2V0dGluZ3MubGVxbm8pIHtcbiAgICAgIGNsYXNzZXMucHVzaChcImxlcW5vXCIpO1xuICAgIH1cblxuICAgIGlmIChzZXR0aW5ncy5mbGVxbikge1xuICAgICAgY2xhc3Nlcy5wdXNoKFwiZmxlcW5cIik7XG4gICAgfVxuXG4gICAgbm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKGNsYXNzZXMsIFtub2RlXSk7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn07XG5cbnZhciBidWlsZFRyZWVfYnVpbGRUcmVlID0gZnVuY3Rpb24gYnVpbGRUcmVlKHRyZWUsIGV4cHJlc3Npb24sIHNldHRpbmdzKSB7XG4gIHZhciBvcHRpb25zID0gYnVpbGRUcmVlX29wdGlvbnNGcm9tU2V0dGluZ3Moc2V0dGluZ3MpO1xuICB2YXIga2F0ZXhOb2RlO1xuXG4gIGlmIChzZXR0aW5ncy5vdXRwdXQgPT09IFwibWF0aG1sXCIpIHtcbiAgICByZXR1cm4gYnVpbGRNYXRoTUwodHJlZSwgZXhwcmVzc2lvbiwgb3B0aW9ucywgdHJ1ZSk7XG4gIH0gZWxzZSBpZiAoc2V0dGluZ3Mub3V0cHV0ID09PSBcImh0bWxcIikge1xuICAgIHZhciBodG1sTm9kZSA9IGJ1aWxkSFRNTCh0cmVlLCBvcHRpb25zKTtcbiAgICBrYXRleE5vZGUgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJrYXRleFwiXSwgW2h0bWxOb2RlXSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG1hdGhNTE5vZGUgPSBidWlsZE1hdGhNTCh0cmVlLCBleHByZXNzaW9uLCBvcHRpb25zLCBmYWxzZSk7XG5cbiAgICB2YXIgX2h0bWxOb2RlID0gYnVpbGRIVE1MKHRyZWUsIG9wdGlvbnMpO1xuXG4gICAga2F0ZXhOb2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wia2F0ZXhcIl0sIFttYXRoTUxOb2RlLCBfaHRtbE5vZGVdKTtcbiAgfVxuXG4gIHJldHVybiBidWlsZFRyZWVfZGlzcGxheVdyYXAoa2F0ZXhOb2RlLCBzZXR0aW5ncyk7XG59O1xudmFyIGJ1aWxkVHJlZV9idWlsZEhUTUxUcmVlID0gZnVuY3Rpb24gYnVpbGRIVE1MVHJlZSh0cmVlLCBleHByZXNzaW9uLCBzZXR0aW5ncykge1xuICB2YXIgb3B0aW9ucyA9IGJ1aWxkVHJlZV9vcHRpb25zRnJvbVNldHRpbmdzKHNldHRpbmdzKTtcbiAgdmFyIGh0bWxOb2RlID0gYnVpbGRIVE1MKHRyZWUsIG9wdGlvbnMpO1xuICB2YXIga2F0ZXhOb2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wia2F0ZXhcIl0sIFtodG1sTm9kZV0pO1xuICByZXR1cm4gYnVpbGRUcmVlX2Rpc3BsYXlXcmFwKGthdGV4Tm9kZSwgc2V0dGluZ3MpO1xufTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19idWlsZFRyZWUgPSAoYnVpbGRUcmVlX2J1aWxkVHJlZSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9zdHJldGNoeS5qc1xuLyoqXG4gKiBUaGlzIGZpbGUgcHJvdmlkZXMgc3VwcG9ydCB0byBidWlsZE1hdGhNTC5qcyBhbmQgYnVpbGRIVE1MLmpzXG4gKiBmb3Igc3RyZXRjaHkgd2lkZSBlbGVtZW50cyByZW5kZXJlZCBmcm9tIFNWRyBmaWxlc1xuICogYW5kIG90aGVyIENTUyB0cmlja2VyeS5cbiAqL1xuXG5cblxuXG52YXIgc3RyZXRjaHlDb2RlUG9pbnQgPSB7XG4gIHdpZGVoYXQ6IFwiXlwiLFxuICB3aWRlY2hlY2s6IFwiy4dcIixcbiAgd2lkZXRpbGRlOiBcIn5cIixcbiAgdXRpbGRlOiBcIn5cIixcbiAgb3ZlcmxlZnRhcnJvdzogXCJcXHUyMTkwXCIsXG4gIHVuZGVybGVmdGFycm93OiBcIlxcdTIxOTBcIixcbiAgeGxlZnRhcnJvdzogXCJcXHUyMTkwXCIsXG4gIG92ZXJyaWdodGFycm93OiBcIlxcdTIxOTJcIixcbiAgdW5kZXJyaWdodGFycm93OiBcIlxcdTIxOTJcIixcbiAgeHJpZ2h0YXJyb3c6IFwiXFx1MjE5MlwiLFxuICB1bmRlcmJyYWNlOiBcIlxcdTIzREZcIixcbiAgb3ZlcmJyYWNlOiBcIlxcdTIzREVcIixcbiAgb3Zlcmdyb3VwOiBcIlxcdTIzRTBcIixcbiAgdW5kZXJncm91cDogXCJcXHUyM0UxXCIsXG4gIG92ZXJsZWZ0cmlnaHRhcnJvdzogXCJcXHUyMTk0XCIsXG4gIHVuZGVybGVmdHJpZ2h0YXJyb3c6IFwiXFx1MjE5NFwiLFxuICB4bGVmdHJpZ2h0YXJyb3c6IFwiXFx1MjE5NFwiLFxuICBPdmVycmlnaHRhcnJvdzogXCJcXHUyMUQyXCIsXG4gIHhSaWdodGFycm93OiBcIlxcdTIxRDJcIixcbiAgb3ZlcmxlZnRoYXJwb29uOiBcIlxcdTIxQkNcIixcbiAgeGxlZnRoYXJwb29udXA6IFwiXFx1MjFCQ1wiLFxuICBvdmVycmlnaHRoYXJwb29uOiBcIlxcdTIxQzBcIixcbiAgeHJpZ2h0aGFycG9vbnVwOiBcIlxcdTIxQzBcIixcbiAgeExlZnRhcnJvdzogXCJcXHUyMUQwXCIsXG4gIHhMZWZ0cmlnaHRhcnJvdzogXCJcXHUyMUQ0XCIsXG4gIHhob29rbGVmdGFycm93OiBcIlxcdTIxQTlcIixcbiAgeGhvb2tyaWdodGFycm93OiBcIlxcdTIxQUFcIixcbiAgeG1hcHN0bzogXCJcXHUyMUE2XCIsXG4gIHhyaWdodGhhcnBvb25kb3duOiBcIlxcdTIxQzFcIixcbiAgeGxlZnRoYXJwb29uZG93bjogXCJcXHUyMUJEXCIsXG4gIHhyaWdodGxlZnRoYXJwb29uczogXCJcXHUyMUNDXCIsXG4gIHhsZWZ0cmlnaHRoYXJwb29uczogXCJcXHUyMUNCXCIsXG4gIHh0d29oZWFkbGVmdGFycm93OiBcIlxcdTIxOUVcIixcbiAgeHR3b2hlYWRyaWdodGFycm93OiBcIlxcdTIxQTBcIixcbiAgeGxvbmdlcXVhbDogXCI9XCIsXG4gIHh0b2Zyb206IFwiXFx1MjFDNFwiLFxuICB4cmlnaHRsZWZ0YXJyb3dzOiBcIlxcdTIxQzRcIixcbiAgeHJpZ2h0ZXF1aWxpYnJpdW06IFwiXFx1MjFDQ1wiLFxuICAvLyBOb3QgYSBwZXJmZWN0IG1hdGNoLlxuICB4bGVmdGVxdWlsaWJyaXVtOiBcIlxcdTIxQ0JcIiAvLyBOb25lIGJldHRlciBhdmFpbGFibGUuXG5cbn07XG5cbnZhciBzdHJldGNoeV9tYXRoTUxub2RlID0gZnVuY3Rpb24gbWF0aE1Mbm9kZShsYWJlbCkge1xuICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKHN0cmV0Y2h5Q29kZVBvaW50W2xhYmVsLnN1YnN0cigxKV0pXSk7XG4gIG5vZGUuc2V0QXR0cmlidXRlKFwic3RyZXRjaHlcIiwgXCJ0cnVlXCIpO1xuICByZXR1cm4gbm9kZTtcbn07IC8vIE1hbnkgb2YgdGhlIEthVGVYIFNWRyBpbWFnZXMgaGF2ZSBiZWVuIGFkYXB0ZWQgZnJvbSBnbHlwaHMgaW4gS2FUZVggZm9udHMuXG4vLyBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCwgRGVzaWduIFNjaWVuY2UsIEluYy4gKDx3d3cubWF0aGpheC5vcmc+KVxuLy8gQ29weXJpZ2h0IChjKSAyMDE0LTIwMTcgS2hhbiBBY2FkZW15ICg8d3d3LmtoYW5hY2FkZW15Lm9yZz4pXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgU0lMIE9wZW4gRm9udCBMaWNlbnNlLCBWZXJzaW9uIDEuMS5cbi8vIFNlZSBcXG5odHRwOi8vc2NyaXB0cy5zaWwub3JnL09GTFxuLy8gVmVyeSBMb25nIFNWR3Ncbi8vICAgIE1hbnkgb2YgdGhlIEthVGVYIHN0cmV0Y2h5IHdpZGUgZWxlbWVudHMgdXNlIGEgbG9uZyBTVkcgaW1hZ2UgYW5kIGFuXG4vLyAgICBvdmVyZmxvdzogaGlkZGVuIHRhY3RpYyB0byBhY2hpZXZlIGEgc3RyZXRjaHkgaW1hZ2Ugd2hpbGUgYXZvaWRpbmdcbi8vICAgIGRpc3RvcnRpb24gb2YgYXJyb3doZWFkcyBvciBicmFjZSBjb3JuZXJzLlxuLy8gICAgVGhlIFNWRyB0eXBpY2FsbHkgY29udGFpbnMgYSB2ZXJ5IGxvbmcgKDQwMCBlbSkgYXJyb3cuXG4vLyAgICBUaGUgU1ZHIGlzIGluIGEgY29udGFpbmVyIHNwYW4gdGhhdCBoYXMgb3ZlcmZsb3c6IGhpZGRlbiwgc28gdGhlIHNwYW5cbi8vICAgIGFjdHMgbGlrZSBhIHdpbmRvdyB0aGF0IGV4cG9zZXMgb25seSBwYXJ0IG9mIHRoZSAgU1ZHLlxuLy8gICAgVGhlIFNWRyBhbHdheXMgaGFzIGEgbG9uZ2VyLCB0aGlubmVyIGFzcGVjdCByYXRpbyB0aGFuIHRoZSBjb250YWluZXIgc3Bhbi5cbi8vICAgIEFmdGVyIHRoZSBTVkcgZmlsbHMgMTAwJSBvZiB0aGUgaGVpZ2h0IG9mIHRoZSBjb250YWluZXIgc3Bhbixcbi8vICAgIHRoZXJlIGlzIGEgbG9uZyBhcnJvdyBzaGFmdCBsZWZ0IG92ZXIuIFRoYXQgbGVmdC1vdmVyIHNoYWZ0IGlzIG5vdCBzaG93bi5cbi8vICAgIEluc3RlYWQsIGl0IGlzIHNsaWNlZCBvZmYgYmVjYXVzZSB0aGUgc3BhbidzIENTUyBoYXMgb3ZlcmZsb3c6IGhpZGRlbi5cbi8vICAgIFRodXMsIHRoZSByZWFkZXIgc2VlcyBhbiBhcnJvdyB0aGF0IG1hdGNoZXMgdGhlIHN1YmplY3QgbWF0dGVyIHdpZHRoXG4vLyAgICB3aXRob3V0IGRpc3RvcnRpb24uXG4vLyAgICBTb21lIGZ1bmN0aW9ucywgc3VjaCBhcyBcXGNhbmNlbCwgbmVlZCB0byB2YXJ5IHRoZWlyIGFzcGVjdCByYXRpby4gVGhlc2Vcbi8vICAgIGZ1bmN0aW9ucyBkbyBub3QgZ2V0IHRoZSBvdmVyZmxvdyBTVkcgdHJlYXRtZW50LlxuLy8gU2Vjb25kIEJydXNoIFN0cm9rZVxuLy8gICAgTG93IHJlc29sdXRpb24gbW9uaXRvcnMgc3RydWdnbGUgdG8gZGlzcGxheSBpbWFnZXMgaW4gZmluZSBkZXRhaWwuXG4vLyAgICBTbyBicm93c2VycyBhcHBseSBhbnRpLWFsaWFzaW5nLiBBIGxvbmcgc3RyYWlnaHQgYXJyb3cgc2hhZnQgdGhlcmVmb3JlXG4vLyAgICB3aWxsIHNvbWV0aW1lcyBhcHBlYXIgYXMgaWYgaXQgaGFzIGEgYmx1cnJlZCBlZGdlLlxuLy8gICAgVG8gbWl0aWdhdGUgdGhpcywgdGhlc2UgU1ZHIGZpbGVzIGNvbnRhaW4gYSBzZWNvbmQgXCJicnVzaC1zdHJva2VcIiBvbiB0aGVcbi8vICAgIGFycm93IHNoYWZ0cy4gVGhhdCBpcywgYSBzZWNvbmQgbG9uZyB0aGluIHJlY3Rhbmd1bGFyIFNWRyBwYXRoIGhhcyBiZWVuXG4vLyAgICB3cml0dGVuIGRpcmVjdGx5IG9uIHRvcCBvZiBlYWNoIGFycm93IHNoYWZ0LiBUaGlzIHJlaW5mb3JjZW1lbnQgY2F1c2VzXG4vLyAgICBzb21lIG9mIHRoZSBzY3JlZW4gcGl4ZWxzIHRvIGRpc3BsYXkgYXMgYmxhY2sgaW5zdGVhZCBvZiB0aGUgYW50aS1hbGlhc2VkXG4vLyAgICBncmF5IHBpeGVsIHRoYXQgYSAgc2luZ2xlIHBhdGggd291bGQgZ2VuZXJhdGUuIFNvIHdlIGdldCBhcnJvdyBzaGFmdHNcbi8vICAgIHdob3NlIGVkZ2VzIGFwcGVhciB0byBiZSBzaGFycGVyLlxuLy8gSW4gdGhlIGthdGV4SW1hZ2VzRGF0YSBvYmplY3QganVzdCBiZWxvdywgdGhlIGRpbWVuc2lvbnMgYWxsXG4vLyBjb3JyZXNwb25kIHRvIHBhdGggZ2VvbWV0cnkgaW5zaWRlIHRoZSByZWxldmFudCBTVkcuXG4vLyBGb3IgZXhhbXBsZSwgXFxvdmVycmlnaHRhcnJvdyB1c2VzIHRoZSBzYW1lIGFycm93aGVhZCBhcyBnbHlwaCBVKzIxOTJcbi8vIGZyb20gdGhlIEthVGVYIE1haW4gZm9udC4gVGhlIHNjYWxpbmcgZmFjdG9yIGlzIDEwMDAuXG4vLyBUaGF0IGlzLCBpbnNpZGUgdGhlIGZvbnQsIHRoYXQgYXJyb3doZWFkIGlzIDUyMiB1bml0cyB0YWxsLCB3aGljaFxuLy8gY29ycmVzcG9uZHMgdG8gMC41MjIgZW0gaW5zaWRlIHRoZSBkb2N1bWVudC5cblxuXG52YXIga2F0ZXhJbWFnZXNEYXRhID0ge1xuICAvLyAgIHBhdGgocyksIG1pbldpZHRoLCBoZWlnaHQsIGFsaWduXG4gIG92ZXJyaWdodGFycm93OiBbW1wicmlnaHRhcnJvd1wiXSwgMC44ODgsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgb3ZlcmxlZnRhcnJvdzogW1tcImxlZnRhcnJvd1wiXSwgMC44ODgsIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgdW5kZXJyaWdodGFycm93OiBbW1wicmlnaHRhcnJvd1wiXSwgMC44ODgsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgdW5kZXJsZWZ0YXJyb3c6IFtbXCJsZWZ0YXJyb3dcIl0sIDAuODg4LCA1MjIsIFwieE1pbllNaW5cIl0sXG4gIHhyaWdodGFycm93OiBbW1wicmlnaHRhcnJvd1wiXSwgMS40NjksIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgeGxlZnRhcnJvdzogW1tcImxlZnRhcnJvd1wiXSwgMS40NjksIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgT3ZlcnJpZ2h0YXJyb3c6IFtbXCJkb3VibGVyaWdodGFycm93XCJdLCAwLjg4OCwgNTYwLCBcInhNYXhZTWluXCJdLFxuICB4UmlnaHRhcnJvdzogW1tcImRvdWJsZXJpZ2h0YXJyb3dcIl0sIDEuNTI2LCA1NjAsIFwieE1heFlNaW5cIl0sXG4gIHhMZWZ0YXJyb3c6IFtbXCJkb3VibGVsZWZ0YXJyb3dcIl0sIDEuNTI2LCA1NjAsIFwieE1pbllNaW5cIl0sXG4gIG92ZXJsZWZ0aGFycG9vbjogW1tcImxlZnRoYXJwb29uXCJdLCAwLjg4OCwgNTIyLCBcInhNaW5ZTWluXCJdLFxuICB4bGVmdGhhcnBvb251cDogW1tcImxlZnRoYXJwb29uXCJdLCAwLjg4OCwgNTIyLCBcInhNaW5ZTWluXCJdLFxuICB4bGVmdGhhcnBvb25kb3duOiBbW1wibGVmdGhhcnBvb25kb3duXCJdLCAwLjg4OCwgNTIyLCBcInhNaW5ZTWluXCJdLFxuICBvdmVycmlnaHRoYXJwb29uOiBbW1wicmlnaHRoYXJwb29uXCJdLCAwLjg4OCwgNTIyLCBcInhNYXhZTWluXCJdLFxuICB4cmlnaHRoYXJwb29udXA6IFtbXCJyaWdodGhhcnBvb25cIl0sIDAuODg4LCA1MjIsIFwieE1heFlNaW5cIl0sXG4gIHhyaWdodGhhcnBvb25kb3duOiBbW1wicmlnaHRoYXJwb29uZG93blwiXSwgMC44ODgsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgeGxvbmdlcXVhbDogW1tcImxvbmdlcXVhbFwiXSwgMC44ODgsIDMzNCwgXCJ4TWluWU1pblwiXSxcbiAgeHR3b2hlYWRsZWZ0YXJyb3c6IFtbXCJ0d29oZWFkbGVmdGFycm93XCJdLCAwLjg4OCwgMzM0LCBcInhNaW5ZTWluXCJdLFxuICB4dHdvaGVhZHJpZ2h0YXJyb3c6IFtbXCJ0d29oZWFkcmlnaHRhcnJvd1wiXSwgMC44ODgsIDMzNCwgXCJ4TWF4WU1pblwiXSxcbiAgb3ZlcmxlZnRyaWdodGFycm93OiBbW1wibGVmdGFycm93XCIsIFwicmlnaHRhcnJvd1wiXSwgMC44ODgsIDUyMl0sXG4gIG92ZXJicmFjZTogW1tcImxlZnRicmFjZVwiLCBcIm1pZGJyYWNlXCIsIFwicmlnaHRicmFjZVwiXSwgMS42LCA1NDhdLFxuICB1bmRlcmJyYWNlOiBbW1wibGVmdGJyYWNldW5kZXJcIiwgXCJtaWRicmFjZXVuZGVyXCIsIFwicmlnaHRicmFjZXVuZGVyXCJdLCAxLjYsIDU0OF0sXG4gIHVuZGVybGVmdHJpZ2h0YXJyb3c6IFtbXCJsZWZ0YXJyb3dcIiwgXCJyaWdodGFycm93XCJdLCAwLjg4OCwgNTIyXSxcbiAgeGxlZnRyaWdodGFycm93OiBbW1wibGVmdGFycm93XCIsIFwicmlnaHRhcnJvd1wiXSwgMS43NSwgNTIyXSxcbiAgeExlZnRyaWdodGFycm93OiBbW1wiZG91YmxlbGVmdGFycm93XCIsIFwiZG91YmxlcmlnaHRhcnJvd1wiXSwgMS43NSwgNTYwXSxcbiAgeHJpZ2h0bGVmdGhhcnBvb25zOiBbW1wibGVmdGhhcnBvb25kb3ducGx1c1wiLCBcInJpZ2h0aGFycG9vbnBsdXNcIl0sIDEuNzUsIDcxNl0sXG4gIHhsZWZ0cmlnaHRoYXJwb29uczogW1tcImxlZnRoYXJwb29ucGx1c1wiLCBcInJpZ2h0aGFycG9vbmRvd25wbHVzXCJdLCAxLjc1LCA3MTZdLFxuICB4aG9va2xlZnRhcnJvdzogW1tcImxlZnRhcnJvd1wiLCBcInJpZ2h0aG9va1wiXSwgMS4wOCwgNTIyXSxcbiAgeGhvb2tyaWdodGFycm93OiBbW1wibGVmdGhvb2tcIiwgXCJyaWdodGFycm93XCJdLCAxLjA4LCA1MjJdLFxuICBvdmVybGluZXNlZ21lbnQ6IFtbXCJsZWZ0bGluZXNlZ21lbnRcIiwgXCJyaWdodGxpbmVzZWdtZW50XCJdLCAwLjg4OCwgNTIyXSxcbiAgdW5kZXJsaW5lc2VnbWVudDogW1tcImxlZnRsaW5lc2VnbWVudFwiLCBcInJpZ2h0bGluZXNlZ21lbnRcIl0sIDAuODg4LCA1MjJdLFxuICBvdmVyZ3JvdXA6IFtbXCJsZWZ0Z3JvdXBcIiwgXCJyaWdodGdyb3VwXCJdLCAwLjg4OCwgMzQyXSxcbiAgdW5kZXJncm91cDogW1tcImxlZnRncm91cHVuZGVyXCIsIFwicmlnaHRncm91cHVuZGVyXCJdLCAwLjg4OCwgMzQyXSxcbiAgeG1hcHN0bzogW1tcImxlZnRtYXBzdG9cIiwgXCJyaWdodGFycm93XCJdLCAxLjUsIDUyMl0sXG4gIHh0b2Zyb206IFtbXCJsZWZ0VG9Gcm9tXCIsIFwicmlnaHRUb0Zyb21cIl0sIDEuNzUsIDUyOF0sXG4gIC8vIFRoZSBuZXh0IHRocmVlIGFycm93cyBhcmUgZnJvbSB0aGUgbWhjaGVtIHBhY2thZ2UuXG4gIC8vIEluIG1oY2hlbS5zdHksIG1pbi1sZW5ndGggaXMgMi4wZW0uIEJ1dCB0aGVzZSBhcnJvd3MgbWlnaHQgYXBwZWFyIGluIHRoZVxuICAvLyBkb2N1bWVudCBhcyBcXHhyaWdodGFycm93IG9yIFxceHJpZ2h0bGVmdGhhcnBvb25zLiBUaG9zZSBoYXZlXG4gIC8vIG1pbi1sZW5ndGggPSAxLjc1ZW0sIHNvIHdlIHNldCBtaW4tbGVuZ3RoIG9uIHRoZXNlIG5leHQgdGhyZWUgdG8gbWF0Y2guXG4gIHhyaWdodGxlZnRhcnJvd3M6IFtbXCJiYXJhYm92ZWxlZnRhcnJvd1wiLCBcInJpZ2h0YXJyb3dhYm92ZWJhclwiXSwgMS43NSwgOTAxXSxcbiAgeHJpZ2h0ZXF1aWxpYnJpdW06IFtbXCJiYXJhYm92ZXNob3J0bGVmdGhhcnBvb25cIiwgXCJyaWdodGhhcnBvb25hYm92ZXNob3J0YmFyXCJdLCAxLjc1LCA3MTZdLFxuICB4bGVmdGVxdWlsaWJyaXVtOiBbW1wic2hvcnRiYXJhYm92ZWxlZnRoYXJwb29uXCIsIFwic2hvcnRyaWdodGhhcnBvb25hYm92ZWJhclwiXSwgMS43NSwgNzE2XVxufTtcblxudmFyIGdyb3VwTGVuZ3RoID0gZnVuY3Rpb24gZ3JvdXBMZW5ndGgoYXJnKSB7XG4gIGlmIChhcmcudHlwZSA9PT0gXCJvcmRncm91cFwiKSB7XG4gICAgcmV0dXJuIGFyZy5ib2R5Lmxlbmd0aDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMTtcbiAgfVxufTtcblxudmFyIHN0cmV0Y2h5X3N2Z1NwYW4gPSBmdW5jdGlvbiBzdmdTcGFuKGdyb3VwLCBvcHRpb25zKSB7XG4gIC8vIENyZWF0ZSBhIHNwYW4gd2l0aCBpbmxpbmUgU1ZHIGZvciB0aGUgZWxlbWVudC5cbiAgZnVuY3Rpb24gYnVpbGRTdmdTcGFuXygpIHtcbiAgICB2YXIgdmlld0JveFdpZHRoID0gNDAwMDAwOyAvLyBkZWZhdWx0XG5cbiAgICB2YXIgbGFiZWwgPSBncm91cC5sYWJlbC5zdWJzdHIoMSk7XG5cbiAgICBpZiAodXRpbHMuY29udGFpbnMoW1wid2lkZWhhdFwiLCBcIndpZGVjaGVja1wiLCBcIndpZGV0aWxkZVwiLCBcInV0aWxkZVwiXSwgbGFiZWwpKSB7XG4gICAgICAvLyBFYWNoIHR5cGUgaW4gdGhlIGBpZmAgc3RhdGVtZW50IGNvcnJlc3BvbmRzIHRvIG9uZSBvZiB0aGUgUGFyc2VOb2RlXG4gICAgICAvLyB0eXBlcyBiZWxvdy4gVGhpcyBuYXJyb3dpbmcgaXMgcmVxdWlyZWQgdG8gYWNjZXNzIGBncnAuYmFzZWAuXG4gICAgICB2YXIgZ3JwID0gZ3JvdXA7IC8vIFRoZXJlIGFyZSBmb3VyIFNWRyBpbWFnZXMgYXZhaWxhYmxlIGZvciBlYWNoIGZ1bmN0aW9uLlxuICAgICAgLy8gQ2hvb3NlIGEgdGFsbGVyIGltYWdlIHdoZW4gdGhlcmUgYXJlIG1vcmUgY2hhcmFjdGVycy5cblxuICAgICAgdmFyIG51bUNoYXJzID0gZ3JvdXBMZW5ndGgoZ3JwLmJhc2UpO1xuICAgICAgdmFyIHZpZXdCb3hIZWlnaHQ7XG4gICAgICB2YXIgcGF0aE5hbWU7XG5cbiAgICAgIHZhciBfaGVpZ2h0O1xuXG4gICAgICBpZiAobnVtQ2hhcnMgPiA1KSB7XG4gICAgICAgIGlmIChsYWJlbCA9PT0gXCJ3aWRlaGF0XCIgfHwgbGFiZWwgPT09IFwid2lkZWNoZWNrXCIpIHtcbiAgICAgICAgICB2aWV3Qm94SGVpZ2h0ID0gNDIwO1xuICAgICAgICAgIHZpZXdCb3hXaWR0aCA9IDIzNjQ7XG4gICAgICAgICAgX2hlaWdodCA9IDAuNDI7XG4gICAgICAgICAgcGF0aE5hbWUgPSBsYWJlbCArIFwiNFwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZpZXdCb3hIZWlnaHQgPSAzMTI7XG4gICAgICAgICAgdmlld0JveFdpZHRoID0gMjM0MDtcbiAgICAgICAgICBfaGVpZ2h0ID0gMC4zNDtcbiAgICAgICAgICBwYXRoTmFtZSA9IFwidGlsZGU0XCI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBpbWdJbmRleCA9IFsxLCAxLCAyLCAyLCAzLCAzXVtudW1DaGFyc107XG5cbiAgICAgICAgaWYgKGxhYmVsID09PSBcIndpZGVoYXRcIiB8fCBsYWJlbCA9PT0gXCJ3aWRlY2hlY2tcIikge1xuICAgICAgICAgIHZpZXdCb3hXaWR0aCA9IFswLCAxMDYyLCAyMzY0LCAyMzY0LCAyMzY0XVtpbWdJbmRleF07XG4gICAgICAgICAgdmlld0JveEhlaWdodCA9IFswLCAyMzksIDMwMCwgMzYwLCA0MjBdW2ltZ0luZGV4XTtcbiAgICAgICAgICBfaGVpZ2h0ID0gWzAsIDAuMjQsIDAuMywgMC4zLCAwLjM2LCAwLjQyXVtpbWdJbmRleF07XG4gICAgICAgICAgcGF0aE5hbWUgPSBsYWJlbCArIGltZ0luZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZpZXdCb3hXaWR0aCA9IFswLCA2MDAsIDEwMzMsIDIzMzksIDIzNDBdW2ltZ0luZGV4XTtcbiAgICAgICAgICB2aWV3Qm94SGVpZ2h0ID0gWzAsIDI2MCwgMjg2LCAzMDYsIDMxMl1baW1nSW5kZXhdO1xuICAgICAgICAgIF9oZWlnaHQgPSBbMCwgMC4yNiwgMC4yODYsIDAuMywgMC4zMDYsIDAuMzRdW2ltZ0luZGV4XTtcbiAgICAgICAgICBwYXRoTmFtZSA9IFwidGlsZGVcIiArIGltZ0luZGV4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBwYXRoID0gbmV3IGRvbVRyZWVfUGF0aE5vZGUocGF0aE5hbWUpO1xuICAgICAgdmFyIHN2Z05vZGUgPSBuZXcgU3ZnTm9kZShbcGF0aF0sIHtcbiAgICAgICAgXCJ3aWR0aFwiOiBcIjEwMCVcIixcbiAgICAgICAgXCJoZWlnaHRcIjogX2hlaWdodCArIFwiZW1cIixcbiAgICAgICAgXCJ2aWV3Qm94XCI6IFwiMCAwIFwiICsgdmlld0JveFdpZHRoICsgXCIgXCIgKyB2aWV3Qm94SGVpZ2h0LFxuICAgICAgICBcInByZXNlcnZlQXNwZWN0UmF0aW9cIjogXCJub25lXCJcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3BhbjogYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW10sIFtzdmdOb2RlXSwgb3B0aW9ucyksXG4gICAgICAgIG1pbldpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IF9oZWlnaHRcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzcGFucyA9IFtdO1xuICAgICAgdmFyIGRhdGEgPSBrYXRleEltYWdlc0RhdGFbbGFiZWxdO1xuICAgICAgdmFyIHBhdGhzID0gZGF0YVswXSxcbiAgICAgICAgICBfbWluV2lkdGggPSBkYXRhWzFdLFxuICAgICAgICAgIF92aWV3Qm94SGVpZ2h0ID0gZGF0YVsyXTtcblxuICAgICAgdmFyIF9oZWlnaHQyID0gX3ZpZXdCb3hIZWlnaHQgLyAxMDAwO1xuXG4gICAgICB2YXIgbnVtU3ZnQ2hpbGRyZW4gPSBwYXRocy5sZW5ndGg7XG4gICAgICB2YXIgd2lkdGhDbGFzc2VzO1xuICAgICAgdmFyIGFsaWducztcblxuICAgICAgaWYgKG51bVN2Z0NoaWxkcmVuID09PSAxKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWU6IEFsbCB0aGVzZSBjYXNlcyBtdXN0IGJlIG9mIHRoZSA0LXR1cGxlIHR5cGUuXG4gICAgICAgIHZhciBhbGlnbjEgPSBkYXRhWzNdO1xuICAgICAgICB3aWR0aENsYXNzZXMgPSBbXCJoaWRlLXRhaWxcIl07XG4gICAgICAgIGFsaWducyA9IFthbGlnbjFdO1xuICAgICAgfSBlbHNlIGlmIChudW1TdmdDaGlsZHJlbiA9PT0gMikge1xuICAgICAgICB3aWR0aENsYXNzZXMgPSBbXCJoYWxmYXJyb3ctbGVmdFwiLCBcImhhbGZhcnJvdy1yaWdodFwiXTtcbiAgICAgICAgYWxpZ25zID0gW1wieE1pbllNaW5cIiwgXCJ4TWF4WU1pblwiXTtcbiAgICAgIH0gZWxzZSBpZiAobnVtU3ZnQ2hpbGRyZW4gPT09IDMpIHtcbiAgICAgICAgd2lkdGhDbGFzc2VzID0gW1wiYnJhY2UtbGVmdFwiLCBcImJyYWNlLWNlbnRlclwiLCBcImJyYWNlLXJpZ2h0XCJdO1xuICAgICAgICBhbGlnbnMgPSBbXCJ4TWluWU1pblwiLCBcInhNaWRZTWluXCIsIFwieE1heFlNaW5cIl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3JyZWN0IGthdGV4SW1hZ2VzRGF0YSBvciB1cGRhdGUgY29kZSBoZXJlIHRvIHN1cHBvcnRcXG4gICAgICAgICAgICAgICAgICAgIFwiICsgbnVtU3ZnQ2hpbGRyZW4gKyBcIiBjaGlsZHJlbi5cIik7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtU3ZnQ2hpbGRyZW47IGkrKykge1xuICAgICAgICB2YXIgX3BhdGggPSBuZXcgZG9tVHJlZV9QYXRoTm9kZShwYXRoc1tpXSk7XG5cbiAgICAgICAgdmFyIF9zdmdOb2RlID0gbmV3IFN2Z05vZGUoW19wYXRoXSwge1xuICAgICAgICAgIFwid2lkdGhcIjogXCI0MDBlbVwiLFxuICAgICAgICAgIFwiaGVpZ2h0XCI6IF9oZWlnaHQyICsgXCJlbVwiLFxuICAgICAgICAgIFwidmlld0JveFwiOiBcIjAgMCBcIiArIHZpZXdCb3hXaWR0aCArIFwiIFwiICsgX3ZpZXdCb3hIZWlnaHQsXG4gICAgICAgICAgXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCI6IGFsaWduc1tpXSArIFwiIHNsaWNlXCJcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIF9zcGFuID0gYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW3dpZHRoQ2xhc3Nlc1tpXV0sIFtfc3ZnTm9kZV0sIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChudW1TdmdDaGlsZHJlbiA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzcGFuOiBfc3BhbixcbiAgICAgICAgICAgIG1pbldpZHRoOiBfbWluV2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IF9oZWlnaHQyXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfc3Bhbi5zdHlsZS5oZWlnaHQgPSBfaGVpZ2h0MiArIFwiZW1cIjtcbiAgICAgICAgICBzcGFucy5wdXNoKF9zcGFuKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzcGFuOiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJzdHJldGNoeVwiXSwgc3BhbnMsIG9wdGlvbnMpLFxuICAgICAgICBtaW5XaWR0aDogX21pbldpZHRoLFxuICAgICAgICBoZWlnaHQ6IF9oZWlnaHQyXG4gICAgICB9O1xuICAgIH1cbiAgfSAvLyBidWlsZFN2Z1NwYW5fKClcblxuXG4gIHZhciBfYnVpbGRTdmdTcGFuXyA9IGJ1aWxkU3ZnU3Bhbl8oKSxcbiAgICAgIHNwYW4gPSBfYnVpbGRTdmdTcGFuXy5zcGFuLFxuICAgICAgbWluV2lkdGggPSBfYnVpbGRTdmdTcGFuXy5taW5XaWR0aCxcbiAgICAgIGhlaWdodCA9IF9idWlsZFN2Z1NwYW5fLmhlaWdodDsgLy8gTm90ZSB0aGF0IHdlIGFyZSByZXR1cm5pbmcgc3Bhbi5kZXB0aCA9IDAuXG4gIC8vIEFueSBhZGp1c3RtZW50cyByZWxhdGl2ZSB0byB0aGUgYmFzZWxpbmUgbXVzdCBiZSBkb25lIGluIGJ1aWxkSFRNTC5cblxuXG4gIHNwYW4uaGVpZ2h0ID0gaGVpZ2h0O1xuICBzcGFuLnN0eWxlLmhlaWdodCA9IGhlaWdodCArIFwiZW1cIjtcblxuICBpZiAobWluV2lkdGggPiAwKSB7XG4gICAgc3Bhbi5zdHlsZS5taW5XaWR0aCA9IG1pbldpZHRoICsgXCJlbVwiO1xuICB9XG5cbiAgcmV0dXJuIHNwYW47XG59O1xuXG52YXIgc3RyZXRjaHlfZW5jbG9zZVNwYW4gPSBmdW5jdGlvbiBlbmNsb3NlU3Bhbihpbm5lciwgbGFiZWwsIHBhZCwgb3B0aW9ucykge1xuICAvLyBSZXR1cm4gYW4gaW1hZ2Ugc3BhbiBmb3IgXFxjYW5jZWwsIFxcYmNhbmNlbCwgXFx4Y2FuY2VsLCBvciBcXGZib3hcbiAgdmFyIGltZztcbiAgdmFyIHRvdGFsSGVpZ2h0ID0gaW5uZXIuaGVpZ2h0ICsgaW5uZXIuZGVwdGggKyAyICogcGFkO1xuXG4gIGlmICgvZmJveHxjb2xvci8udGVzdChsYWJlbCkpIHtcbiAgICBpbWcgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJzdHJldGNoeVwiLCBsYWJlbF0sIFtdLCBvcHRpb25zKTtcblxuICAgIGlmIChsYWJlbCA9PT0gXCJmYm94XCIpIHtcbiAgICAgIHZhciBjb2xvciA9IG9wdGlvbnMuY29sb3IgJiYgb3B0aW9ucy5nZXRDb2xvcigpO1xuXG4gICAgICBpZiAoY29sb3IpIHtcbiAgICAgICAgaW1nLnN0eWxlLmJvcmRlckNvbG9yID0gY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFxcY2FuY2VsLCBcXGJjYW5jZWwsIG9yIFxceGNhbmNlbFxuICAgIC8vIFNpbmNlIFxcY2FuY2VsJ3MgU1ZHIGlzIGlubGluZSBhbmQgaXQgb21pdHMgdGhlIHZpZXdCb3ggYXR0cmlidXRlLFxuICAgIC8vIGl0cyBzdHJva2Utd2lkdGggd2lsbCBub3QgdmFyeSB3aXRoIHNwYW4gYXJlYS5cbiAgICB2YXIgbGluZXMgPSBbXTtcblxuICAgIGlmICgvXltieF1jYW5jZWwkLy50ZXN0KGxhYmVsKSkge1xuICAgICAgbGluZXMucHVzaChuZXcgTGluZU5vZGUoe1xuICAgICAgICBcIngxXCI6IFwiMFwiLFxuICAgICAgICBcInkxXCI6IFwiMFwiLFxuICAgICAgICBcIngyXCI6IFwiMTAwJVwiLFxuICAgICAgICBcInkyXCI6IFwiMTAwJVwiLFxuICAgICAgICBcInN0cm9rZS13aWR0aFwiOiBcIjAuMDQ2ZW1cIlxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlmICgvXng/Y2FuY2VsJC8udGVzdChsYWJlbCkpIHtcbiAgICAgIGxpbmVzLnB1c2gobmV3IExpbmVOb2RlKHtcbiAgICAgICAgXCJ4MVwiOiBcIjBcIixcbiAgICAgICAgXCJ5MVwiOiBcIjEwMCVcIixcbiAgICAgICAgXCJ4MlwiOiBcIjEwMCVcIixcbiAgICAgICAgXCJ5MlwiOiBcIjBcIixcbiAgICAgICAgXCJzdHJva2Utd2lkdGhcIjogXCIwLjA0NmVtXCJcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICB2YXIgc3ZnTm9kZSA9IG5ldyBTdmdOb2RlKGxpbmVzLCB7XG4gICAgICBcIndpZHRoXCI6IFwiMTAwJVwiLFxuICAgICAgXCJoZWlnaHRcIjogdG90YWxIZWlnaHQgKyBcImVtXCJcbiAgICB9KTtcbiAgICBpbWcgPSBidWlsZENvbW1vbi5tYWtlU3ZnU3BhbihbXSwgW3N2Z05vZGVdLCBvcHRpb25zKTtcbiAgfVxuXG4gIGltZy5oZWlnaHQgPSB0b3RhbEhlaWdodDtcbiAgaW1nLnN0eWxlLmhlaWdodCA9IHRvdGFsSGVpZ2h0ICsgXCJlbVwiO1xuICByZXR1cm4gaW1nO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3RyZXRjaHkgPSAoe1xuICBlbmNsb3NlU3Bhbjogc3RyZXRjaHlfZW5jbG9zZVNwYW4sXG4gIG1hdGhNTG5vZGU6IHN0cmV0Y2h5X21hdGhNTG5vZGUsXG4gIHN2Z1NwYW46IHN0cmV0Y2h5X3N2Z1NwYW5cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2FjY2VudC5qc1xuXG5cblxuXG5cblxuXG5cblxuLy8gTk9URTogVW5saWtlIG1vc3QgYGh0bWxCdWlsZGVyYHMsIHRoaXMgb25lIGhhbmRsZXMgbm90IG9ubHkgXCJhY2NlbnRcIiwgYnV0XG52YXIgYWNjZW50X2h0bWxCdWlsZGVyID0gZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JwLCBvcHRpb25zKSB7XG4gIC8vIEFjY2VudHMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgcGcuIDQ0MywgcnVsZSAxMi5cbiAgdmFyIGJhc2U7XG4gIHZhciBncm91cDtcbiAgdmFyIHN1cFN1YiA9IGNoZWNrTm9kZVR5cGUoZ3JwLCBcInN1cHN1YlwiKTtcbiAgdmFyIHN1cFN1Ykdyb3VwO1xuXG4gIGlmIChzdXBTdWIpIHtcbiAgICAvLyBJZiBvdXIgYmFzZSBpcyBhIGNoYXJhY3RlciBib3gsIGFuZCB3ZSBoYXZlIHN1cGVyc2NyaXB0cyBhbmRcbiAgICAvLyBzdWJzY3JpcHRzLCB0aGUgc3Vwc3ViIHdpbGwgZGVmZXIgdG8gdXMuIEluIHBhcnRpY3VsYXIsIHdlIHdhbnRcbiAgICAvLyB0byBhdHRhY2ggdGhlIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cyB0byB0aGUgaW5uZXIgYm9keSAoc29cbiAgICAvLyB0aGF0IHRoZSBwb3NpdGlvbiBvZiB0aGUgc3VwZXJzY3JpcHRzIGFuZCBzdWJzY3JpcHRzIHdvbid0IGJlXG4gICAgLy8gYWZmZWN0ZWQgYnkgdGhlIGhlaWdodCBvZiB0aGUgYWNjZW50KS4gV2UgYWNjb21wbGlzaCB0aGlzIGJ5XG4gICAgLy8gc3RpY2tpbmcgdGhlIGJhc2Ugb2YgdGhlIGFjY2VudCBpbnRvIHRoZSBiYXNlIG9mIHRoZSBzdXBzdWIsIGFuZFxuICAgIC8vIHJlbmRlcmluZyB0aGF0LCB3aGlsZSBrZWVwaW5nIHRyYWNrIG9mIHdoZXJlIHRoZSBhY2NlbnQgaXMuXG4gICAgLy8gVGhlIHJlYWwgYWNjZW50IGdyb3VwIGlzIHRoZSBiYXNlIG9mIHRoZSBzdXBzdWIgZ3JvdXBcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKHN1cFN1Yi5iYXNlLCBcImFjY2VudFwiKTsgLy8gVGhlIGNoYXJhY3RlciBib3ggaXMgdGhlIGJhc2Ugb2YgdGhlIGFjY2VudCBncm91cFxuXG4gICAgYmFzZSA9IGdyb3VwLmJhc2U7IC8vIFN0aWNrIHRoZSBjaGFyYWN0ZXIgYm94IGludG8gdGhlIGJhc2Ugb2YgdGhlIHN1cHN1YiBncm91cFxuXG4gICAgc3VwU3ViLmJhc2UgPSBiYXNlOyAvLyBSZXJlbmRlciB0aGUgc3Vwc3ViIGdyb3VwIHdpdGggaXRzIG5ldyBiYXNlLCBhbmQgc3RvcmUgdGhhdFxuICAgIC8vIHJlc3VsdC5cblxuICAgIHN1cFN1Ykdyb3VwID0gYXNzZXJ0U3BhbihidWlsZEhUTUxfYnVpbGRHcm91cChzdXBTdWIsIG9wdGlvbnMpKTsgLy8gcmVzZXQgb3JpZ2luYWwgYmFzZVxuXG4gICAgc3VwU3ViLmJhc2UgPSBncm91cDtcbiAgfSBlbHNlIHtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKGdycCwgXCJhY2NlbnRcIik7XG4gICAgYmFzZSA9IGdyb3VwLmJhc2U7XG4gIH0gLy8gQnVpbGQgdGhlIGJhc2UgZ3JvdXBcblxuXG4gIHZhciBib2R5ID0gYnVpbGRIVE1MX2J1aWxkR3JvdXAoYmFzZSwgb3B0aW9ucy5oYXZpbmdDcmFtcGVkU3R5bGUoKSk7IC8vIERvZXMgdGhlIGFjY2VudCBuZWVkIHRvIHNoaWZ0IGZvciB0aGUgc2tldyBvZiBhIGNoYXJhY3Rlcj9cblxuICB2YXIgbXVzdFNoaWZ0ID0gZ3JvdXAuaXNTaGlmdHkgJiYgdXRpbHMuaXNDaGFyYWN0ZXJCb3goYmFzZSk7IC8vIENhbGN1bGF0ZSB0aGUgc2tldyBvZiB0aGUgYWNjZW50LiBUaGlzIGlzIGJhc2VkIG9uIHRoZSBsaW5lIFwiSWYgdGhlXG4gIC8vIG51Y2xldXMgaXMgbm90IGEgc2luZ2xlIGNoYXJhY3RlciwgbGV0IHMgPSAwOyBvdGhlcndpc2Ugc2V0IHMgdG8gdGhlXG4gIC8vIGtlcm4gYW1vdW50IGZvciB0aGUgbnVjbGV1cyBmb2xsb3dlZCBieSB0aGUgXFxza2V3Y2hhciBvZiBpdHMgZm9udC5cIlxuICAvLyBOb3RlIHRoYXQgb3VyIHNrZXcgbWV0cmljcyBhcmUganVzdCB0aGUga2VybiBiZXR3ZWVuIGVhY2ggY2hhcmFjdGVyXG4gIC8vIGFuZCB0aGUgc2tld2NoYXIuXG5cbiAgdmFyIHNrZXcgPSAwO1xuXG4gIGlmIChtdXN0U2hpZnQpIHtcbiAgICAvLyBJZiB0aGUgYmFzZSBpcyBhIGNoYXJhY3RlciBib3gsIHRoZW4gd2Ugd2FudCB0aGUgc2tldyBvZiB0aGVcbiAgICAvLyBpbm5lcm1vc3QgY2hhcmFjdGVyLiBUbyBkbyB0aGF0LCB3ZSBmaW5kIHRoZSBpbm5lcm1vc3QgY2hhcmFjdGVyOlxuICAgIHZhciBiYXNlQ2hhciA9IHV0aWxzLmdldEJhc2VFbGVtKGJhc2UpOyAvLyBUaGVuLCB3ZSByZW5kZXIgaXRzIGdyb3VwIHRvIGdldCB0aGUgc3ltYm9sIGluc2lkZSBpdFxuXG4gICAgdmFyIGJhc2VHcm91cCA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKGJhc2VDaGFyLCBvcHRpb25zLmhhdmluZ0NyYW1wZWRTdHlsZSgpKTsgLy8gRmluYWxseSwgd2UgcHVsbCB0aGUgc2tldyBvZmYgb2YgdGhlIHN5bWJvbC5cblxuICAgIHNrZXcgPSBhc3NlcnRTeW1ib2xEb21Ob2RlKGJhc2VHcm91cCkuc2tldzsgLy8gTm90ZSB0aGF0IHdlIG5vdyB0aHJvdyBhd2F5IGJhc2VHcm91cCwgYmVjYXVzZSB0aGUgbGF5ZXJzIHdlXG4gICAgLy8gcmVtb3ZlZCB3aXRoIGdldEJhc2VFbGVtIG1pZ2h0IGNvbnRhaW4gdGhpbmdzIGxpa2UgXFxjb2xvciB3aGljaFxuICAgIC8vIHdlIGNhbid0IGdldCByaWQgb2YuXG4gICAgLy8gVE9ETyhlbWlseSk6IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGdldCB0aGUgc2tld1xuICB9IC8vIGNhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIHNwYWNlIGJldHdlZW4gdGhlIGJvZHkgYW5kIHRoZSBhY2NlbnRcblxuXG4gIHZhciBjbGVhcmFuY2UgPSBNYXRoLm1pbihib2R5LmhlaWdodCwgb3B0aW9ucy5mb250TWV0cmljcygpLnhIZWlnaHQpOyAvLyBCdWlsZCB0aGUgYWNjZW50XG5cbiAgdmFyIGFjY2VudEJvZHk7XG5cbiAgaWYgKCFncm91cC5pc1N0cmV0Y2h5KSB7XG4gICAgdmFyIGFjY2VudDtcbiAgICB2YXIgd2lkdGg7XG5cbiAgICBpZiAoZ3JvdXAubGFiZWwgPT09IFwiXFxcXHZlY1wiKSB7XG4gICAgICAvLyBCZWZvcmUgdmVyc2lvbiAwLjksIFxcdmVjIHVzZWQgdGhlIGNvbWJpbmluZyBmb250IGdseXBoIFUrMjBENy5cbiAgICAgIC8vIEJ1dCBicm93c2VycywgZXNwZWNpYWxseSBTYWZhcmksIGFyZSBub3QgY29uc2lzdGVudCBpbiBob3cgdGhleVxuICAgICAgLy8gcmVuZGVyIGNvbWJpbmluZyBjaGFyYWN0ZXJzIHdoZW4gbm90IHByZWNlZGVkIGJ5IGEgY2hhcmFjdGVyLlxuICAgICAgLy8gU28gbm93IHdlIHVzZSBhbiBTVkcuXG4gICAgICAvLyBJZiBTYWZhcmkgcmVmb3Jtcywgd2Ugc2hvdWxkIGNvbnNpZGVyIHJldmVydGluZyB0byB0aGUgZ2x5cGguXG4gICAgICBhY2NlbnQgPSBidWlsZENvbW1vbi5zdGF0aWNTdmcoXCJ2ZWNcIiwgb3B0aW9ucyk7XG4gICAgICB3aWR0aCA9IGJ1aWxkQ29tbW9uLnN2Z0RhdGEudmVjWzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBhY2NlbnQgPSBidWlsZENvbW1vbi5tYWtlU3ltYm9sKGdyb3VwLmxhYmVsLCBcIk1haW4tUmVndWxhclwiLCBncm91cC5tb2RlLCBvcHRpb25zKTsgLy8gUmVtb3ZlIHRoZSBpdGFsaWMgY29ycmVjdGlvbiBvZiB0aGUgYWNjZW50LCBiZWNhdXNlIGl0IG9ubHkgc2VydmVzIHRvXG4gICAgICAvLyBzaGlmdCB0aGUgYWNjZW50IG92ZXIgdG8gYSBwbGFjZSB3ZSBkb24ndCB3YW50LlxuXG4gICAgICBhY2NlbnQuaXRhbGljID0gMDtcbiAgICAgIHdpZHRoID0gYWNjZW50LndpZHRoO1xuICAgIH1cblxuICAgIGFjY2VudEJvZHkgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJhY2NlbnQtYm9keVwiXSwgW2FjY2VudF0pOyAvLyBcIkZ1bGxcIiBhY2NlbnRzIGV4cGFuZCB0aGUgd2lkdGggb2YgdGhlIHJlc3VsdGluZyBzeW1ib2wgdG8gYmVcbiAgICAvLyBhdCBsZWFzdCB0aGUgd2lkdGggb2YgdGhlIGFjY2VudCwgYW5kIG92ZXJsYXAgZGlyZWN0bHkgb250byB0aGVcbiAgICAvLyBjaGFyYWN0ZXIgd2l0aG91dCBhbnkgdmVydGljYWwgb2Zmc2V0LlxuXG4gICAgdmFyIGFjY2VudEZ1bGwgPSBncm91cC5sYWJlbCA9PT0gXCJcXFxcdGV4dGNpcmNsZWRcIjtcblxuICAgIGlmIChhY2NlbnRGdWxsKSB7XG4gICAgICBhY2NlbnRCb2R5LmNsYXNzZXMucHVzaCgnYWNjZW50LWZ1bGwnKTtcbiAgICAgIGNsZWFyYW5jZSA9IGJvZHkuaGVpZ2h0O1xuICAgIH0gLy8gU2hpZnQgdGhlIGFjY2VudCBvdmVyIGJ5IHRoZSBza2V3LlxuXG5cbiAgICB2YXIgbGVmdCA9IHNrZXc7IC8vIENTUyBkZWZpbmVzIGAua2F0ZXggLmFjY2VudCAuYWNjZW50LWJvZHk6bm90KC5hY2NlbnQtZnVsbCkgeyB3aWR0aDogMCB9YFxuICAgIC8vIHNvIHRoYXQgdGhlIGFjY2VudCBkb2Vzbid0IGNvbnRyaWJ1dGUgdG8gdGhlIGJvdW5kaW5nIGJveC5cbiAgICAvLyBXZSBuZWVkIHRvIHNoaWZ0IHRoZSBjaGFyYWN0ZXIgYnkgaXRzIHdpZHRoIChlZmZlY3RpdmVseSBoYWxmXG4gICAgLy8gaXRzIHdpZHRoKSB0byBjb21wZW5zYXRlLlxuXG4gICAgaWYgKCFhY2NlbnRGdWxsKSB7XG4gICAgICBsZWZ0IC09IHdpZHRoIC8gMjtcbiAgICB9XG5cbiAgICBhY2NlbnRCb2R5LnN0eWxlLmxlZnQgPSBsZWZ0ICsgXCJlbVwiOyAvLyBcXHRleHRjaXJjbGVkIHVzZXMgdGhlIFxcYmlnY2lyYyBnbHlwaCwgc28gaXQgbmVlZHMgc29tZVxuICAgIC8vIHZlcnRpY2FsIGFkanVzdG1lbnQgdG8gbWF0Y2ggTGFUZVguXG5cbiAgICBpZiAoZ3JvdXAubGFiZWwgPT09IFwiXFxcXHRleHRjaXJjbGVkXCIpIHtcbiAgICAgIGFjY2VudEJvZHkuc3R5bGUudG9wID0gXCIuMmVtXCI7XG4gICAgfVxuXG4gICAgYWNjZW50Qm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBib2R5XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiAtY2xlYXJhbmNlXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBhY2NlbnRCb2R5XG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIGFjY2VudEJvZHkgPSBzdHJldGNoeS5zdmdTcGFuKGdyb3VwLCBvcHRpb25zKTtcbiAgICBhY2NlbnRCb2R5ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJmaXJzdEJhc2VsaW5lXCIsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJvZHlcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGFjY2VudEJvZHksXG4gICAgICAgIHdyYXBwZXJDbGFzc2VzOiBbXCJzdmctYWxpZ25cIl0sXG4gICAgICAgIHdyYXBwZXJTdHlsZTogc2tldyA+IDAgPyB7XG4gICAgICAgICAgd2lkdGg6IFwiY2FsYygxMDAlIC0gXCIgKyAyICogc2tldyArIFwiZW0pXCIsXG4gICAgICAgICAgbWFyZ2luTGVmdDogMiAqIHNrZXcgKyBcImVtXCJcbiAgICAgICAgfSA6IHVuZGVmaW5lZFxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfVxuXG4gIHZhciBhY2NlbnRXcmFwID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcImFjY2VudFwiXSwgW2FjY2VudEJvZHldLCBvcHRpb25zKTtcblxuICBpZiAoc3VwU3ViR3JvdXApIHtcbiAgICAvLyBIZXJlLCB3ZSByZXBsYWNlIHRoZSBcImJhc2VcIiBjaGlsZCBvZiB0aGUgc3Vwc3ViIHdpdGggb3VyIG5ld2x5XG4gICAgLy8gZ2VuZXJhdGVkIGFjY2VudC5cbiAgICBzdXBTdWJHcm91cC5jaGlsZHJlblswXSA9IGFjY2VudFdyYXA7IC8vIFNpbmNlIHdlIGRvbid0IHJlcnVuIHRoZSBoZWlnaHQgY2FsY3VsYXRpb24gYWZ0ZXIgcmVwbGFjaW5nIHRoZVxuICAgIC8vIGFjY2VudCwgd2UgbWFudWFsbHkgcmVjYWxjdWxhdGUgaGVpZ2h0LlxuXG4gICAgc3VwU3ViR3JvdXAuaGVpZ2h0ID0gTWF0aC5tYXgoYWNjZW50V3JhcC5oZWlnaHQsIHN1cFN1Ykdyb3VwLmhlaWdodCk7IC8vIEFjY2VudHMgc2hvdWxkIGFsd2F5cyBiZSBvcmRzLCBldmVuIHdoZW4gdGhlaXIgaW5uYXJkcyBhcmUgbm90LlxuXG4gICAgc3VwU3ViR3JvdXAuY2xhc3Nlc1swXSA9IFwibW9yZFwiO1xuICAgIHJldHVybiBzdXBTdWJHcm91cDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYWNjZW50V3JhcDtcbiAgfVxufTtcblxudmFyIGFjY2VudF9tYXRobWxCdWlsZGVyID0gZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICB2YXIgYWNjZW50Tm9kZSA9IGdyb3VwLmlzU3RyZXRjaHkgPyBzdHJldGNoeS5tYXRoTUxub2RlKGdyb3VwLmxhYmVsKSA6IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW2J1aWxkTWF0aE1MX21ha2VUZXh0KGdyb3VwLmxhYmVsLCBncm91cC5tb2RlKV0pO1xuICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW92ZXJcIiwgW2J1aWxkTWF0aE1MX2J1aWxkR3JvdXAoZ3JvdXAuYmFzZSwgb3B0aW9ucyksIGFjY2VudE5vZGVdKTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJhY2NlbnRcIiwgXCJ0cnVlXCIpO1xuICByZXR1cm4gbm9kZTtcbn07XG5cbnZhciBOT05fU1RSRVRDSFlfQUNDRU5UX1JFR0VYID0gbmV3IFJlZ0V4cChbXCJcXFxcYWN1dGVcIiwgXCJcXFxcZ3JhdmVcIiwgXCJcXFxcZGRvdFwiLCBcIlxcXFx0aWxkZVwiLCBcIlxcXFxiYXJcIiwgXCJcXFxcYnJldmVcIiwgXCJcXFxcY2hlY2tcIiwgXCJcXFxcaGF0XCIsIFwiXFxcXHZlY1wiLCBcIlxcXFxkb3RcIiwgXCJcXFxcbWF0aHJpbmdcIl0ubWFwKGZ1bmN0aW9uIChhY2NlbnQpIHtcbiAgcmV0dXJuIFwiXFxcXFwiICsgYWNjZW50O1xufSkuam9pbihcInxcIikpOyAvLyBBY2NlbnRzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJhY2NlbnRcIixcbiAgbmFtZXM6IFtcIlxcXFxhY3V0ZVwiLCBcIlxcXFxncmF2ZVwiLCBcIlxcXFxkZG90XCIsIFwiXFxcXHRpbGRlXCIsIFwiXFxcXGJhclwiLCBcIlxcXFxicmV2ZVwiLCBcIlxcXFxjaGVja1wiLCBcIlxcXFxoYXRcIiwgXCJcXFxcdmVjXCIsIFwiXFxcXGRvdFwiLCBcIlxcXFxtYXRocmluZ1wiLCBcIlxcXFx3aWRlY2hlY2tcIiwgXCJcXFxcd2lkZWhhdFwiLCBcIlxcXFx3aWRldGlsZGVcIiwgXCJcXFxcb3ZlcnJpZ2h0YXJyb3dcIiwgXCJcXFxcb3ZlcmxlZnRhcnJvd1wiLCBcIlxcXFxPdmVycmlnaHRhcnJvd1wiLCBcIlxcXFxvdmVybGVmdHJpZ2h0YXJyb3dcIiwgXCJcXFxcb3Zlcmdyb3VwXCIsIFwiXFxcXG92ZXJsaW5lc2VnbWVudFwiLCBcIlxcXFxvdmVybGVmdGhhcnBvb25cIiwgXCJcXFxcb3ZlcnJpZ2h0aGFycG9vblwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoY29udGV4dCwgYXJncykge1xuICAgIHZhciBiYXNlID0gYXJnc1swXTtcbiAgICB2YXIgaXNTdHJldGNoeSA9ICFOT05fU1RSRVRDSFlfQUNDRU5UX1JFR0VYLnRlc3QoY29udGV4dC5mdW5jTmFtZSk7XG4gICAgdmFyIGlzU2hpZnR5ID0gIWlzU3RyZXRjaHkgfHwgY29udGV4dC5mdW5jTmFtZSA9PT0gXCJcXFxcd2lkZWhhdFwiIHx8IGNvbnRleHQuZnVuY05hbWUgPT09IFwiXFxcXHdpZGV0aWxkZVwiIHx8IGNvbnRleHQuZnVuY05hbWUgPT09IFwiXFxcXHdpZGVjaGVja1wiO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImFjY2VudFwiLFxuICAgICAgbW9kZTogY29udGV4dC5wYXJzZXIubW9kZSxcbiAgICAgIGxhYmVsOiBjb250ZXh0LmZ1bmNOYW1lLFxuICAgICAgaXNTdHJldGNoeTogaXNTdHJldGNoeSxcbiAgICAgIGlzU2hpZnR5OiBpc1NoaWZ0eSxcbiAgICAgIGJhc2U6IGJhc2VcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogYWNjZW50X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhY2NlbnRfbWF0aG1sQnVpbGRlclxufSk7IC8vIFRleHQtbW9kZSBhY2NlbnRzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJhY2NlbnRcIixcbiAgbmFtZXM6IFtcIlxcXFwnXCIsIFwiXFxcXGBcIiwgXCJcXFxcXlwiLCBcIlxcXFx+XCIsIFwiXFxcXD1cIiwgXCJcXFxcdVwiLCBcIlxcXFwuXCIsICdcXFxcXCInLCBcIlxcXFxyXCIsIFwiXFxcXEhcIiwgXCJcXFxcdlwiLCBcIlxcXFx0ZXh0Y2lyY2xlZFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgYWxsb3dlZEluTWF0aDogZmFsc2VcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gICAgdmFyIGJhc2UgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImFjY2VudFwiLFxuICAgICAgbW9kZTogY29udGV4dC5wYXJzZXIubW9kZSxcbiAgICAgIGxhYmVsOiBjb250ZXh0LmZ1bmNOYW1lLFxuICAgICAgaXNTdHJldGNoeTogZmFsc2UsXG4gICAgICBpc1NoaWZ0eTogdHJ1ZSxcbiAgICAgIGJhc2U6IGJhc2VcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogYWNjZW50X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhY2NlbnRfbWF0aG1sQnVpbGRlclxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvYWNjZW50dW5kZXIuanNcbi8vIEhvcml6b250YWwgb3ZlcmxhcCBmdW5jdGlvbnNcblxuXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJhY2NlbnRVbmRlclwiLFxuICBuYW1lczogW1wiXFxcXHVuZGVybGVmdGFycm93XCIsIFwiXFxcXHVuZGVycmlnaHRhcnJvd1wiLCBcIlxcXFx1bmRlcmxlZnRyaWdodGFycm93XCIsIFwiXFxcXHVuZGVyZ3JvdXBcIiwgXCJcXFxcdW5kZXJsaW5lc2VnbWVudFwiLCBcIlxcXFx1dGlsZGVcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZi5wYXJzZXIsXG4gICAgICAgIGZ1bmNOYW1lID0gX3JlZi5mdW5jTmFtZTtcbiAgICB2YXIgYmFzZSA9IGFyZ3NbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiYWNjZW50VW5kZXJcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGFiZWw6IGZ1bmNOYW1lLFxuICAgICAgYmFzZTogYmFzZVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIFRyZWF0IHVuZGVyIGFjY2VudHMgbXVjaCBsaWtlIHVuZGVybGluZXMuXG4gICAgdmFyIGlubmVyR3JvdXAgPSBidWlsZEhUTUxfYnVpbGRHcm91cChncm91cC5iYXNlLCBvcHRpb25zKTtcbiAgICB2YXIgYWNjZW50Qm9keSA9IHN0cmV0Y2h5LnN2Z1NwYW4oZ3JvdXAsIG9wdGlvbnMpO1xuICAgIHZhciBrZXJuID0gZ3JvdXAubGFiZWwgPT09IFwiXFxcXHV0aWxkZVwiID8gMC4xMiA6IDA7IC8vIEdlbmVyYXRlIHRoZSB2bGlzdCwgd2l0aCB0aGUgYXBwcm9wcmlhdGUga2VybnNcblxuICAgIHZhciB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IGFjY2VudEJvZHkuaGVpZ2h0ICsga2VybixcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogYWNjZW50Qm9keSxcbiAgICAgICAgd3JhcHBlckNsYXNzZXM6IFtcInN2Zy1hbGlnblwiXVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZToga2VyblxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogaW5uZXJHcm91cFxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcImFjY2VudHVuZGVyXCJdLCBbdmxpc3RdLCBvcHRpb25zKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBhY2NlbnROb2RlID0gc3RyZXRjaHkubWF0aE1Mbm9kZShncm91cC5sYWJlbCk7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm11bmRlclwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5iYXNlLCBvcHRpb25zKSwgYWNjZW50Tm9kZV0pO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiYWNjZW50dW5kZXJcIiwgXCJ0cnVlXCIpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9hcnJvdy5qc1xuXG5cblxuXG5cblxuXG4vLyBIZWxwZXIgZnVuY3Rpb25cbnZhciBhcnJvd19wYWRkZWROb2RlID0gZnVuY3Rpb24gcGFkZGVkTm9kZShncm91cCkge1xuICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBncm91cCA/IFtncm91cF0gOiBbXSk7XG4gIG5vZGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgXCIrMC42ZW1cIik7XG4gIG5vZGUuc2V0QXR0cmlidXRlKFwibHNwYWNlXCIsIFwiMC4zZW1cIik7XG4gIHJldHVybiBub2RlO1xufTsgLy8gU3RyZXRjaHkgYXJyb3dzIHdpdGggYW4gb3B0aW9uYWwgYXJndW1lbnRcblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwieEFycm93XCIsXG4gIG5hbWVzOiBbXCJcXFxceGxlZnRhcnJvd1wiLCBcIlxcXFx4cmlnaHRhcnJvd1wiLCBcIlxcXFx4TGVmdGFycm93XCIsIFwiXFxcXHhSaWdodGFycm93XCIsIFwiXFxcXHhsZWZ0cmlnaHRhcnJvd1wiLCBcIlxcXFx4TGVmdHJpZ2h0YXJyb3dcIiwgXCJcXFxceGhvb2tsZWZ0YXJyb3dcIiwgXCJcXFxceGhvb2tyaWdodGFycm93XCIsIFwiXFxcXHhtYXBzdG9cIiwgXCJcXFxceHJpZ2h0aGFycG9vbmRvd25cIiwgXCJcXFxceHJpZ2h0aGFycG9vbnVwXCIsIFwiXFxcXHhsZWZ0aGFycG9vbmRvd25cIiwgXCJcXFxceGxlZnRoYXJwb29udXBcIiwgXCJcXFxceHJpZ2h0bGVmdGhhcnBvb25zXCIsIFwiXFxcXHhsZWZ0cmlnaHRoYXJwb29uc1wiLCBcIlxcXFx4bG9uZ2VxdWFsXCIsIFwiXFxcXHh0d29oZWFkcmlnaHRhcnJvd1wiLCBcIlxcXFx4dHdvaGVhZGxlZnRhcnJvd1wiLCBcIlxcXFx4dG9mcm9tXCIsIC8vIFRoZSBuZXh0IDMgZnVuY3Rpb25zIGFyZSBoZXJlIHRvIHN1cHBvcnQgdGhlIG1oY2hlbSBleHRlbnNpb24uXG4gIC8vIERpcmVjdCB1c2Ugb2YgdGhlc2UgZnVuY3Rpb25zIGlzIGRpc2NvdXJhZ2VkIGFuZCBtYXkgYnJlYWsgc29tZWRheS5cbiAgXCJcXFxceHJpZ2h0bGVmdGFycm93c1wiLCBcIlxcXFx4cmlnaHRlcXVpbGlicml1bVwiLCBcIlxcXFx4bGVmdGVxdWlsaWJyaXVtXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgbnVtT3B0aW9uYWxBcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInhBcnJvd1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBib2R5OiBhcmdzWzBdLFxuICAgICAgYmVsb3c6IG9wdEFyZ3NbMF1cbiAgICB9O1xuICB9LFxuICAvLyBGbG93IGlzIHVuYWJsZSB0byBjb3JyZWN0bHkgaW5mZXIgdGhlIHR5cGUgb2YgYGdyb3VwYCwgZXZlbiB0aG91Z2ggaXQnc1xuICAvLyB1bmFtaWJpZ3VvdXNseSBkZXRlcm1pbmVkIGZyb20gdGhlIHBhc3NlZC1pbiBgdHlwZWAgYWJvdmUuXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBzdHlsZSA9IG9wdGlvbnMuc3R5bGU7IC8vIEJ1aWxkIHRoZSBhcmd1bWVudCBncm91cHMgaW4gdGhlIGFwcHJvcHJpYXRlIHN0eWxlLlxuICAgIC8vIFJlZjogYW1zbWF0aC5kdHg6ICAgXFxoYm94eyRcXHNjcmlwdHN0eWxlXFxta2VybiMzbXV7IzZ9XFxta2VybiM0bXUkfSVcbiAgICAvLyBTb21lIGdyb3VwcyBjYW4gcmV0dXJuIGRvY3VtZW50IGZyYWdtZW50cy4gIEhhbmRsZSB0aG9zZSBieSB3cmFwcGluZ1xuICAgIC8vIHRoZW0gaW4gYSBzcGFuLlxuXG4gICAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlLnN1cCgpKTtcbiAgICB2YXIgdXBwZXJHcm91cCA9IGJ1aWxkQ29tbW9uLndyYXBGcmFnbWVudChidWlsZEhUTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBuZXdPcHRpb25zLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgdXBwZXJHcm91cC5jbGFzc2VzLnB1c2goXCJ4LWFycm93LXBhZFwiKTtcbiAgICB2YXIgbG93ZXJHcm91cDtcblxuICAgIGlmIChncm91cC5iZWxvdykge1xuICAgICAgLy8gQnVpbGQgdGhlIGxvd2VyIGdyb3VwXG4gICAgICBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShzdHlsZS5zdWIoKSk7XG4gICAgICBsb3dlckdyb3VwID0gYnVpbGRDb21tb24ud3JhcEZyYWdtZW50KGJ1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJlbG93LCBuZXdPcHRpb25zLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgICBsb3dlckdyb3VwLmNsYXNzZXMucHVzaChcIngtYXJyb3ctcGFkXCIpO1xuICAgIH1cblxuICAgIHZhciBhcnJvd0JvZHkgPSBzdHJldGNoeS5zdmdTcGFuKGdyb3VwLCBvcHRpb25zKTsgLy8gUmUgc2hpZnQ6IE5vdGUgdGhhdCBzdHJldGNoeS5zdmdTcGFuIHJldHVybmVkIGFycm93Qm9keS5kZXB0aCA9IDAuXG4gICAgLy8gVGhlIHBvaW50IHdlIHdhbnQgb24gdGhlIG1hdGggYXhpcyBpcyBhdCAwLjUgKiBhcnJvd0JvZHkuaGVpZ2h0LlxuXG4gICAgdmFyIGFycm93U2hpZnQgPSAtb3B0aW9ucy5mb250TWV0cmljcygpLmF4aXNIZWlnaHQgKyAwLjUgKiBhcnJvd0JvZHkuaGVpZ2h0OyAvLyAyIG11IGtlcm4uIFJlZjogYW1zbWF0aC5kdHg6ICM3XFxpZjAjMlxcZWxzZVxcbWtlcm4jMm11XFxmaVxuXG4gICAgdmFyIHVwcGVyU2hpZnQgPSAtb3B0aW9ucy5mb250TWV0cmljcygpLmF4aXNIZWlnaHQgLSAwLjUgKiBhcnJvd0JvZHkuaGVpZ2h0IC0gMC4xMTE7IC8vIDAuMTExIGVtID0gMiBtdVxuXG4gICAgaWYgKHVwcGVyR3JvdXAuZGVwdGggPiAwLjI1IHx8IGdyb3VwLmxhYmVsID09PSBcIlxcXFx4bGVmdGVxdWlsaWJyaXVtXCIpIHtcbiAgICAgIHVwcGVyU2hpZnQgLT0gdXBwZXJHcm91cC5kZXB0aDsgLy8gc2hpZnQgdXAgaWYgZGVwdGggZW5jcm9hY2hlc1xuICAgIH0gLy8gR2VuZXJhdGUgdGhlIHZsaXN0XG5cblxuICAgIHZhciB2bGlzdDtcblxuICAgIGlmIChsb3dlckdyb3VwKSB7XG4gICAgICB2YXIgbG93ZXJTaGlmdCA9IC1vcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCArIGxvd2VyR3JvdXAuaGVpZ2h0ICsgMC41ICogYXJyb3dCb2R5LmhlaWdodCArIDAuMTExO1xuICAgICAgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IHVwcGVyR3JvdXAsXG4gICAgICAgICAgc2hpZnQ6IHVwcGVyU2hpZnRcbiAgICAgICAgfSwge1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IGFycm93Qm9keSxcbiAgICAgICAgICBzaGlmdDogYXJyb3dTaGlmdFxuICAgICAgICB9LCB7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogbG93ZXJHcm91cCxcbiAgICAgICAgICBzaGlmdDogbG93ZXJTaGlmdFxuICAgICAgICB9XVxuICAgICAgfSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiB1cHBlckdyb3VwLFxuICAgICAgICAgIHNoaWZ0OiB1cHBlclNoaWZ0XG4gICAgICAgIH0sIHtcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBhcnJvd0JvZHksXG4gICAgICAgICAgc2hpZnQ6IGFycm93U2hpZnRcbiAgICAgICAgfV1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH0gLy8gJEZsb3dGaXhNZTogUmVwbGFjZSB0aGlzIHdpdGggcGFzc2luZyBcInN2Zy1hbGlnblwiIGludG8gbWFrZVZMaXN0LlxuXG5cbiAgICB2bGlzdC5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jaGlsZHJlblsxXS5jbGFzc2VzLnB1c2goXCJzdmctYWxpZ25cIik7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1yZWxcIiwgXCJ4LWFycm93XCJdLCBbdmxpc3RdLCBvcHRpb25zKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBhcnJvd05vZGUgPSBzdHJldGNoeS5tYXRoTUxub2RlKGdyb3VwLmxhYmVsKTtcbiAgICB2YXIgbm9kZTtcblxuICAgIGlmIChncm91cC5ib2R5KSB7XG4gICAgICB2YXIgdXBwZXJOb2RlID0gYXJyb3dfcGFkZGVkTm9kZShidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpKTtcblxuICAgICAgaWYgKGdyb3VwLmJlbG93KSB7XG4gICAgICAgIHZhciBsb3dlck5vZGUgPSBhcnJvd19wYWRkZWROb2RlKGJ1aWxkTWF0aE1MX2J1aWxkR3JvdXAoZ3JvdXAuYmVsb3csIG9wdGlvbnMpKTtcbiAgICAgICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXVuZGVyb3ZlclwiLCBbYXJyb3dOb2RlLCBsb3dlck5vZGUsIHVwcGVyTm9kZV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW92ZXJcIiwgW2Fycm93Tm9kZSwgdXBwZXJOb2RlXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChncm91cC5iZWxvdykge1xuICAgICAgdmFyIF9sb3dlck5vZGUgPSBhcnJvd19wYWRkZWROb2RlKGJ1aWxkTWF0aE1MX2J1aWxkR3JvdXAoZ3JvdXAuYmVsb3csIG9wdGlvbnMpKTtcblxuICAgICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXVuZGVyXCIsIFthcnJvd05vZGUsIF9sb3dlck5vZGVdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLlxuICAgICAgLy8gUGFyc2VyLmpzIHRocm93cyBhbiBlcnJvciBpZiB0aGVyZSBpcyBubyBhcmd1bWVudC5cbiAgICAgIG5vZGUgPSBhcnJvd19wYWRkZWROb2RlKCk7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb3ZlclwiLCBbYXJyb3dOb2RlLCBub2RlXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2NoYXIuanNcblxuXG4gLy8gXFxAY2hhciBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiB0aGF0IHRha2VzIGEgZ3JvdXBlZCBkZWNpbWFsIGFyZ3VtZW50IGxpa2Vcbi8vIHsxMjN9IGFuZCBjb252ZXJ0cyBpbnRvIHN5bWJvbCB3aXRoIGNvZGUgMTIzLiAgSXQgaXMgdXNlZCBieSB0aGUgKm1hY3JvKlxuLy8gXFxjaGFyIGRlZmluZWQgaW4gbWFjcm9zLmpzLlxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidGV4dG9yZFwiLFxuICBuYW1lczogW1wiXFxcXEBjaGFyXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZi5wYXJzZXI7XG4gICAgdmFyIGFyZyA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwib3JkZ3JvdXBcIik7XG4gICAgdmFyIGdyb3VwID0gYXJnLmJvZHk7XG4gICAgdmFyIG51bWJlciA9IFwiXCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyb3VwLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbm9kZSA9IGFzc2VydE5vZGVUeXBlKGdyb3VwW2ldLCBcInRleHRvcmRcIik7XG4gICAgICBudW1iZXIgKz0gbm9kZS50ZXh0O1xuICAgIH1cblxuICAgIHZhciBjb2RlID0gcGFyc2VJbnQobnVtYmVyKTtcblxuICAgIGlmIChpc05hTihjb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiXFxcXEBjaGFyIGhhcyBub24tbnVtZXJpYyBhcmd1bWVudCBcIiArIG51bWJlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwidGV4dG9yZFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICB0ZXh0OiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgfTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvY29sb3IuanNcblxuXG5cblxuXG5cblxudmFyIGNvbG9yX2h0bWxCdWlsZGVyID0gZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIGVsZW1lbnRzID0gYnVpbGRIVE1MX2J1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zLndpdGhDb2xvcihncm91cC5jb2xvciksIGZhbHNlKTsgLy8gXFxjb2xvciBpc24ndCBzdXBwb3NlZCB0byBhZmZlY3QgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnRzIGl0IGNvbnRhaW5zLlxuICAvLyBUbyBhY2NvbXBsaXNoIHRoaXMsIHdlIHdyYXAgdGhlIHJlc3VsdHMgaW4gYSBmcmFnbWVudCwgc28gdGhlIGlubmVyXG4gIC8vIGVsZW1lbnRzIHdpbGwgYmUgYWJsZSB0byBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIHRoZWlyIG5laWdoYm9ycy4gRm9yXG4gIC8vIGV4YW1wbGUsIGBcXGNvbG9ye3JlZH17MiArfSAzYCBoYXMgdGhlIHNhbWUgc3BhY2luZyBhcyBgMiArIDNgXG5cbiAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VGcmFnbWVudChlbGVtZW50cyk7XG59O1xuXG52YXIgY29sb3JfbWF0aG1sQnVpbGRlciA9IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIGlubmVyID0gYnVpbGRNYXRoTUxfYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMud2l0aENvbG9yKGdyb3VwLmNvbG9yKSk7XG4gIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3R5bGVcIiwgaW5uZXIpO1xuICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGhjb2xvclwiLCBncm91cC5jb2xvcik7XG4gIHJldHVybiBub2RlO1xufTtcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImNvbG9yXCIsXG4gIG5hbWVzOiBbXCJcXFxcdGV4dGNvbG9yXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZSxcbiAgICBncmVlZGluZXNzOiAzLFxuICAgIGFyZ1R5cGVzOiBbXCJjb2xvclwiLCBcIm9yaWdpbmFsXCJdXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICB2YXIgY29sb3IgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcImNvbG9yLXRva2VuXCIpLmNvbG9yO1xuICAgIHZhciBib2R5ID0gYXJnc1sxXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJjb2xvclwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBjb2xvcjogY29sb3IsXG4gICAgICBib2R5OiBkZWZpbmVGdW5jdGlvbl9vcmRhcmd1bWVudChib2R5KVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBjb2xvcl9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogY29sb3JfbWF0aG1sQnVpbGRlclxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiY29sb3JcIixcbiAgbmFtZXM6IFtcIlxcXFxjb2xvclwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgZ3JlZWRpbmVzczogMyxcbiAgICBhcmdUeXBlczogW1wiY29sb3JcIl1cbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmMiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmMi5wYXJzZXIsXG4gICAgICAgIGJyZWFrT25Ub2tlblRleHQgPSBfcmVmMi5icmVha09uVG9rZW5UZXh0O1xuICAgIHZhciBjb2xvciA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwiY29sb3ItdG9rZW5cIikuY29sb3I7IC8vIFNldCBtYWNybyBcXGN1cnJlbnRAY29sb3IgaW4gY3VycmVudCBuYW1lc3BhY2UgdG8gc3RvcmUgdGhlIGN1cnJlbnRcbiAgICAvLyBjb2xvciwgbWltaWNraW5nIHRoZSBiZWhhdmlvciBvZiBjb2xvci5zdHkuXG4gICAgLy8gVGhpcyBpcyBjdXJyZW50bHkgdXNlZCBqdXN0IHRvIGNvcnJlY3RseSBjb2xvciBhIFxccmlnaHRcbiAgICAvLyB0aGF0IGZvbGxvd3MgYSBcXGNvbG9yIGNvbW1hbmQuXG5cbiAgICBwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5zZXQoXCJcXFxcY3VycmVudEBjb2xvclwiLCBjb2xvcik7IC8vIFBhcnNlIG91dCB0aGUgaW1wbGljaXQgYm9keSB0aGF0IHNob3VsZCBiZSBjb2xvcmVkLlxuXG4gICAgdmFyIGJvZHkgPSBwYXJzZXIucGFyc2VFeHByZXNzaW9uKHRydWUsIGJyZWFrT25Ub2tlblRleHQpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImNvbG9yXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgIGJvZHk6IGJvZHlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogY29sb3JfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGNvbG9yX21hdGhtbEJ1aWxkZXJcbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2NyLmpzXG4vLyBSb3cgYnJlYWtzIHdpdGhpbiB0YWJ1bGFyIGVudmlyb25tZW50cywgYW5kIGxpbmUgYnJlYWtzIGF0IHRvcCBsZXZlbFxuXG5cblxuXG5cbiAvLyBcXFxcIGlzIGEgbWFjcm8gbWFwcGluZyB0byBlaXRoZXIgXFxjciBvciBcXG5ld2xpbmUuICBCZWNhdXNlIHRoZXkgaGF2ZSB0aGVcbi8vIHNhbWUgc2lnbmF0dXJlLCB3ZSBpbXBsZW1lbnQgdGhlbSBhcyBvbmUgbWVnYWZ1bmN0aW9uLCB3aXRoIG5ld1Jvd1xuLy8gaW5kaWNhdGluZyB3aGV0aGVyIHdlJ3JlIGluIHRoZSBcXGNyIGNhc2UsIGFuZCBuZXdMaW5lIGluZGljYXRpbmcgd2hldGhlclxuLy8gdG8gYnJlYWsgdGhlIGxpbmUgaW4gdGhlIFxcbmV3bGluZSBjYXNlLlxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiY3JcIixcbiAgbmFtZXM6IFtcIlxcXFxjclwiLCBcIlxcXFxuZXdsaW5lXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgbnVtT3B0aW9uYWxBcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJzaXplXCJdLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzLCBvcHRBcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWYuZnVuY05hbWU7XG4gICAgdmFyIHNpemUgPSBvcHRBcmdzWzBdO1xuICAgIHZhciBuZXdSb3cgPSBmdW5jTmFtZSA9PT0gXCJcXFxcY3JcIjtcbiAgICB2YXIgbmV3TGluZSA9IGZhbHNlO1xuXG4gICAgaWYgKCFuZXdSb3cpIHtcbiAgICAgIGlmIChwYXJzZXIuc2V0dGluZ3MuZGlzcGxheU1vZGUgJiYgcGFyc2VyLnNldHRpbmdzLnVzZVN0cmljdEJlaGF2aW9yKFwibmV3TGluZUluRGlzcGxheU1vZGVcIiwgXCJJbiBMYVRlWCwgXFxcXFxcXFwgb3IgXFxcXG5ld2xpbmUgXCIgKyBcImRvZXMgbm90aGluZyBpbiBkaXNwbGF5IG1vZGVcIikpIHtcbiAgICAgICAgbmV3TGluZSA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3TGluZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiY3JcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbmV3TGluZTogbmV3TGluZSxcbiAgICAgIG5ld1JvdzogbmV3Um93LFxuICAgICAgc2l6ZTogc2l6ZSAmJiBhc3NlcnROb2RlVHlwZShzaXplLCBcInNpemVcIikudmFsdWVcbiAgICB9O1xuICB9LFxuICAvLyBUaGUgZm9sbG93aW5nIGJ1aWxkZXJzIGFyZSBjYWxsZWQgb25seSBhdCB0aGUgdG9wIGxldmVsLFxuICAvLyBub3Qgd2l0aGluIHRhYnVsYXIvYXJyYXkgZW52aXJvbm1lbnRzLlxuICBodG1sQnVpbGRlcjogZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICBpZiAoZ3JvdXAubmV3Um93KSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJcXFxcY3IgdmFsaWQgb25seSB3aXRoaW4gYSB0YWJ1bGFyL2FycmF5IGVudmlyb25tZW50XCIpO1xuICAgIH1cblxuICAgIHZhciBzcGFuID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibXNwYWNlXCJdLCBbXSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoZ3JvdXAubmV3TGluZSkge1xuICAgICAgc3Bhbi5jbGFzc2VzLnB1c2goXCJuZXdsaW5lXCIpO1xuXG4gICAgICBpZiAoZ3JvdXAuc2l6ZSkge1xuICAgICAgICBzcGFuLnN0eWxlLm1hcmdpblRvcCA9IHVuaXRzX2NhbGN1bGF0ZVNpemUoZ3JvdXAuc2l6ZSwgb3B0aW9ucykgKyBcImVtXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNwYW47XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXNwYWNlXCIpO1xuXG4gICAgaWYgKGdyb3VwLm5ld0xpbmUpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibGluZWJyZWFrXCIsIFwibmV3bGluZVwiKTtcblxuICAgICAgaWYgKGdyb3VwLnNpemUpIHtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgdW5pdHNfY2FsY3VsYXRlU2l6ZShncm91cC5zaXplLCBvcHRpb25zKSArIFwiZW1cIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZGVsaW1pdGVyLmpzXG4vKipcbiAqIFRoaXMgZmlsZSBkZWFscyB3aXRoIGNyZWF0aW5nIGRlbGltaXRlcnMgb2YgdmFyaW91cyBzaXplcy4gVGhlIFRlWGJvb2tcbiAqIGRpc2N1c3NlcyB0aGVzZSByb3V0aW5lcyBvbiBwYWdlIDQ0MS00NDIsIGluIHRoZSBcIkFub3RoZXIgc3Vicm91dGluZSBzZXRzIGJveFxuICogeCB0byBhIHNwZWNpZmllZCB2YXJpYWJsZSBkZWxpbWl0ZXJcIiBwYXJhZ3JhcGguXG4gKlxuICogVGhlcmUgYXJlIHRocmVlIG1haW4gcm91dGluZXMgaGVyZS4gYG1ha2VTbWFsbERlbGltYCBtYWtlcyBhIGRlbGltaXRlciBpbiB0aGVcbiAqIG5vcm1hbCBmb250LCBidXQgaW4gZWl0aGVyIHRleHQsIHNjcmlwdCwgb3Igc2NyaXB0c2NyaXB0IHN0eWxlLlxuICogYG1ha2VMYXJnZURlbGltYCBtYWtlcyBhIGRlbGltaXRlciBpbiB0ZXh0c3R5bGUsIGJ1dCBpbiBvbmUgb2YgdGhlIFNpemUxLFxuICogU2l6ZTIsIFNpemUzLCBvciBTaXplNCBmb250cy4gYG1ha2VTdGFja2VkRGVsaW1gIG1ha2VzIGEgZGVsaW1pdGVyIG91dCBvZlxuICogc21hbGxlciBwaWVjZXMgdGhhdCBhcmUgc3RhY2tlZCBvbiB0b3Agb2Ygb25lIGFub3RoZXIuXG4gKlxuICogVGhlIGZ1bmN0aW9ucyB0YWtlIGEgcGFyYW1ldGVyIGBjZW50ZXJgLCB3aGljaCBkZXRlcm1pbmVzIGlmIHRoZSBkZWxpbWl0ZXJcbiAqIHNob3VsZCBiZSBjZW50ZXJlZCBhcm91bmQgdGhlIGF4aXMuXG4gKlxuICogVGhlbiwgdGhlcmUgYXJlIHRocmVlIGV4cG9zZWQgZnVuY3Rpb25zLiBgc2l6ZWREZWxpbWAgbWFrZXMgYSBkZWxpbWl0ZXIgaW5cbiAqIG9uZSBvZiB0aGUgZ2l2ZW4gc2l6ZXMuIFRoaXMgaXMgdXNlZCBmb3IgdGhpbmdzIGxpa2UgYFxcYmlnbGAuXG4gKiBgY3VzdG9tU2l6ZWREZWxpbWAgbWFrZXMgYSBkZWxpbWl0ZXIgd2l0aCBhIGdpdmVuIHRvdGFsIGhlaWdodCtkZXB0aC4gSXQgaXNcbiAqIGNhbGxlZCBpbiBwbGFjZXMgbGlrZSBgXFxzcXJ0YC4gYGxlZnRSaWdodERlbGltYCBtYWtlcyBhbiBhcHByb3ByaWF0ZVxuICogZGVsaW1pdGVyIHdoaWNoIHN1cnJvdW5kcyBhbiBleHByZXNzaW9uIG9mIGEgZ2l2ZW4gaGVpZ2h0IGFuIGRlcHRoLiBJdCBpc1xuICogdXNlZCBpbiBgXFxsZWZ0YCBhbmQgYFxccmlnaHRgLlxuICovXG5cblxuXG5cblxuXG5cblxuXG4vKipcbiAqIEdldCB0aGUgbWV0cmljcyBmb3IgYSBnaXZlbiBzeW1ib2wgYW5kIGZvbnQsIGFmdGVyIHRyYW5zZm9ybWF0aW9uIChpLmUuXG4gKiBhZnRlciBmb2xsb3dpbmcgcmVwbGFjZW1lbnQgZnJvbSBzeW1ib2xzLmpzKVxuICovXG52YXIgZGVsaW1pdGVyX2dldE1ldHJpY3MgPSBmdW5jdGlvbiBnZXRNZXRyaWNzKHN5bWJvbCwgZm9udCwgbW9kZSkge1xuICB2YXIgcmVwbGFjZSA9IHNyY19zeW1ib2xzLm1hdGhbc3ltYm9sXSAmJiBzcmNfc3ltYm9scy5tYXRoW3N5bWJvbF0ucmVwbGFjZTtcbiAgdmFyIG1ldHJpY3MgPSBnZXRDaGFyYWN0ZXJNZXRyaWNzKHJlcGxhY2UgfHwgc3ltYm9sLCBmb250LCBtb2RlKTtcblxuICBpZiAoIW1ldHJpY3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBzeW1ib2wgXCIgKyBzeW1ib2wgKyBcIiBhbmQgZm9udCBzaXplIFwiICsgZm9udCArIFwiLlwiKTtcbiAgfVxuXG4gIHJldHVybiBtZXRyaWNzO1xufTtcbi8qKlxuICogUHV0cyBhIGRlbGltaXRlciBzcGFuIGluIGEgZ2l2ZW4gc3R5bGUsIGFuZCBhZGRzIGFwcHJvcHJpYXRlIGhlaWdodCwgZGVwdGgsXG4gKiBhbmQgbWF4Rm9udFNpemVzLlxuICovXG5cblxudmFyIGRlbGltaXRlcl9zdHlsZVdyYXAgPSBmdW5jdGlvbiBzdHlsZVdyYXAoZGVsaW0sIHRvU3R5bGUsIG9wdGlvbnMsIGNsYXNzZXMpIHtcbiAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ0Jhc2VTdHlsZSh0b1N0eWxlKTtcbiAgdmFyIHNwYW4gPSBidWlsZENvbW1vbi5tYWtlU3BhbihjbGFzc2VzLmNvbmNhdChuZXdPcHRpb25zLnNpemluZ0NsYXNzZXMob3B0aW9ucykpLCBbZGVsaW1dLCBvcHRpb25zKTtcbiAgdmFyIGRlbGltU2l6ZU11bHRpcGxpZXIgPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgc3Bhbi5oZWlnaHQgKj0gZGVsaW1TaXplTXVsdGlwbGllcjtcbiAgc3Bhbi5kZXB0aCAqPSBkZWxpbVNpemVNdWx0aXBsaWVyO1xuICBzcGFuLm1heEZvbnRTaXplID0gbmV3T3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgcmV0dXJuIHNwYW47XG59O1xuXG52YXIgY2VudGVyU3BhbiA9IGZ1bmN0aW9uIGNlbnRlclNwYW4oc3Bhbiwgb3B0aW9ucywgc3R5bGUpIHtcbiAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ0Jhc2VTdHlsZShzdHlsZSk7XG4gIHZhciBzaGlmdCA9ICgxIC0gb3B0aW9ucy5zaXplTXVsdGlwbGllciAvIG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXIpICogb3B0aW9ucy5mb250TWV0cmljcygpLmF4aXNIZWlnaHQ7XG4gIHNwYW4uY2xhc3Nlcy5wdXNoKFwiZGVsaW1jZW50ZXJcIik7XG4gIHNwYW4uc3R5bGUudG9wID0gc2hpZnQgKyBcImVtXCI7XG4gIHNwYW4uaGVpZ2h0IC09IHNoaWZ0O1xuICBzcGFuLmRlcHRoICs9IHNoaWZ0O1xufTtcbi8qKlxuICogTWFrZXMgYSBzbWFsbCBkZWxpbWl0ZXIuIFRoaXMgaXMgYSBkZWxpbWl0ZXIgdGhhdCBjb21lcyBpbiB0aGUgTWFpbi1SZWd1bGFyXG4gKiBmb250LCBidXQgaXMgcmVzdHlsZWQgdG8gZWl0aGVyIGJlIGluIHRleHRzdHlsZSwgc2NyaXB0c3R5bGUsIG9yXG4gKiBzY3JpcHRzY3JpcHRzdHlsZS5cbiAqL1xuXG5cbnZhciBkZWxpbWl0ZXJfbWFrZVNtYWxsRGVsaW0gPSBmdW5jdGlvbiBtYWtlU21hbGxEZWxpbShkZWxpbSwgc3R5bGUsIGNlbnRlciwgb3B0aW9ucywgbW9kZSwgY2xhc3Nlcykge1xuICB2YXIgdGV4dCA9IGJ1aWxkQ29tbW9uLm1ha2VTeW1ib2woZGVsaW0sIFwiTWFpbi1SZWd1bGFyXCIsIG1vZGUsIG9wdGlvbnMpO1xuICB2YXIgc3BhbiA9IGRlbGltaXRlcl9zdHlsZVdyYXAodGV4dCwgc3R5bGUsIG9wdGlvbnMsIGNsYXNzZXMpO1xuXG4gIGlmIChjZW50ZXIpIHtcbiAgICBjZW50ZXJTcGFuKHNwYW4sIG9wdGlvbnMsIHN0eWxlKTtcbiAgfVxuXG4gIHJldHVybiBzcGFuO1xufTtcbi8qKlxuICogQnVpbGRzIGEgc3ltYm9sIGluIHRoZSBnaXZlbiBmb250IHNpemUgKG5vdGUgc2l6ZSBpcyBhbiBpbnRlZ2VyKVxuICovXG5cblxudmFyIGRlbGltaXRlcl9tYXRocm1TaXplID0gZnVuY3Rpb24gbWF0aHJtU2l6ZSh2YWx1ZSwgc2l6ZSwgbW9kZSwgb3B0aW9ucykge1xuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVN5bWJvbCh2YWx1ZSwgXCJTaXplXCIgKyBzaXplICsgXCItUmVndWxhclwiLCBtb2RlLCBvcHRpb25zKTtcbn07XG4vKipcbiAqIE1ha2VzIGEgbGFyZ2UgZGVsaW1pdGVyLiBUaGlzIGlzIGEgZGVsaW1pdGVyIHRoYXQgY29tZXMgaW4gdGhlIFNpemUxLCBTaXplMixcbiAqIFNpemUzLCBvciBTaXplNCBmb250cy4gSXQgaXMgYWx3YXlzIHJlbmRlcmVkIGluIHRleHRzdHlsZS5cbiAqL1xuXG5cbnZhciBkZWxpbWl0ZXJfbWFrZUxhcmdlRGVsaW0gPSBmdW5jdGlvbiBtYWtlTGFyZ2VEZWxpbShkZWxpbSwgc2l6ZSwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKSB7XG4gIHZhciBpbm5lciA9IGRlbGltaXRlcl9tYXRocm1TaXplKGRlbGltLCBzaXplLCBtb2RlLCBvcHRpb25zKTtcbiAgdmFyIHNwYW4gPSBkZWxpbWl0ZXJfc3R5bGVXcmFwKGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImRlbGltc2l6aW5nXCIsIFwic2l6ZVwiICsgc2l6ZV0sIFtpbm5lcl0sIG9wdGlvbnMpLCBzcmNfU3R5bGUuVEVYVCwgb3B0aW9ucywgY2xhc3Nlcyk7XG5cbiAgaWYgKGNlbnRlcikge1xuICAgIGNlbnRlclNwYW4oc3Bhbiwgb3B0aW9ucywgc3JjX1N0eWxlLlRFWFQpO1xuICB9XG5cbiAgcmV0dXJuIHNwYW47XG59O1xuLyoqXG4gKiBNYWtlIGFuIGlubmVyIHNwYW4gd2l0aCB0aGUgZ2l2ZW4gb2Zmc2V0IGFuZCBpbiB0aGUgZ2l2ZW4gZm9udC4gVGhpcyBpcyB1c2VkXG4gKiBpbiBgbWFrZVN0YWNrZWREZWxpbWAgdG8gbWFrZSB0aGUgc3RhY2tpbmcgcGllY2VzIGZvciB0aGUgZGVsaW1pdGVyLlxuICovXG5cblxudmFyIGRlbGltaXRlcl9tYWtlSW5uZXIgPSBmdW5jdGlvbiBtYWtlSW5uZXIoc3ltYm9sLCBmb250LCBtb2RlKSB7XG4gIHZhciBzaXplQ2xhc3M7IC8vIEFwcGx5IHRoZSBjb3JyZWN0IENTUyBjbGFzcyB0byBjaG9vc2UgdGhlIHJpZ2h0IGZvbnQuXG5cbiAgaWYgKGZvbnQgPT09IFwiU2l6ZTEtUmVndWxhclwiKSB7XG4gICAgc2l6ZUNsYXNzID0gXCJkZWxpbS1zaXplMVwiO1xuICB9IGVsc2VcbiAgICAvKiBpZiAoZm9udCA9PT0gXCJTaXplNC1SZWd1bGFyXCIpICovXG4gICAge1xuICAgICAgc2l6ZUNsYXNzID0gXCJkZWxpbS1zaXplNFwiO1xuICAgIH1cblxuICB2YXIgaW5uZXIgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJkZWxpbXNpemluZ2lubmVyXCIsIHNpemVDbGFzc10sIFtidWlsZENvbW1vbi5tYWtlU3BhbihbXSwgW2J1aWxkQ29tbW9uLm1ha2VTeW1ib2woc3ltYm9sLCBmb250LCBtb2RlKV0pXSk7IC8vIFNpbmNlIHRoaXMgd2lsbCBiZSBwYXNzZWQgaW50byBgbWFrZVZMaXN0YCBpbiB0aGUgZW5kLCB3cmFwIHRoZSBlbGVtZW50XG4gIC8vIGluIHRoZSBhcHByb3ByaWF0ZSB0YWcgdGhhdCBWTGlzdCB1c2VzLlxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJlbGVtXCIsXG4gICAgZWxlbTogaW5uZXJcbiAgfTtcbn07IC8vIEhlbHBlciBmb3IgbWFrZVN0YWNrZWREZWxpbVxuXG5cbnZhciBsYXAgPSB7XG4gIHR5cGU6IFwia2VyblwiLFxuICBzaXplOiAtMC4wMDVcbn07XG4vKipcbiAqIE1ha2UgYSBzdGFja2VkIGRlbGltaXRlciBvdXQgb2YgYSBnaXZlbiBkZWxpbWl0ZXIsIHdpdGggdGhlIHRvdGFsIGhlaWdodCBhdFxuICogbGVhc3QgYGhlaWdodFRvdGFsYC4gVGhpcyByb3V0aW5lIGlzIG1lbnRpb25lZCBvbiBwYWdlIDQ0MiBvZiB0aGUgVGVYYm9vay5cbiAqL1xuXG52YXIgZGVsaW1pdGVyX21ha2VTdGFja2VkRGVsaW0gPSBmdW5jdGlvbiBtYWtlU3RhY2tlZERlbGltKGRlbGltLCBoZWlnaHRUb3RhbCwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKSB7XG4gIC8vIFRoZXJlIGFyZSBmb3VyIHBhcnRzLCB0aGUgdG9wLCBhbiBvcHRpb25hbCBtaWRkbGUsIGEgcmVwZWF0ZWQgcGFydCwgYW5kIGFcbiAgLy8gYm90dG9tLlxuICB2YXIgdG9wO1xuICB2YXIgbWlkZGxlO1xuICB2YXIgcmVwZWF0O1xuICB2YXIgYm90dG9tO1xuICB0b3AgPSByZXBlYXQgPSBib3R0b20gPSBkZWxpbTtcbiAgbWlkZGxlID0gbnVsbDsgLy8gQWxzbyBrZWVwIHRyYWNrIG9mIHdoYXQgZm9udCB0aGUgZGVsaW1pdGVycyBhcmUgaW5cblxuICB2YXIgZm9udCA9IFwiU2l6ZTEtUmVndWxhclwiOyAvLyBXZSBzZXQgdGhlIHBhcnRzIGFuZCBmb250IGJhc2VkIG9uIHRoZSBzeW1ib2wuIE5vdGUgdGhhdCB3ZSB1c2VcbiAgLy8gJ1xcdTIzZDAnIGluc3RlYWQgb2YgJ3wnIGFuZCAnXFx1MjAxNicgaW5zdGVhZCBvZiAnXFxcXHwnIGZvciB0aGVcbiAgLy8gcmVwZWF0cyBvZiB0aGUgYXJyb3dzXG5cbiAgaWYgKGRlbGltID09PSBcIlxcXFx1cGFycm93XCIpIHtcbiAgICByZXBlYXQgPSBib3R0b20gPSBcIlxcdTIzRDBcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxcVXBhcnJvd1wiKSB7XG4gICAgcmVwZWF0ID0gYm90dG9tID0gXCJcXHUyMDE2XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXGRvd25hcnJvd1wiKSB7XG4gICAgdG9wID0gcmVwZWF0ID0gXCJcXHUyM0QwXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXERvd25hcnJvd1wiKSB7XG4gICAgdG9wID0gcmVwZWF0ID0gXCJcXHUyMDE2XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXHVwZG93bmFycm93XCIpIHtcbiAgICB0b3AgPSBcIlxcXFx1cGFycm93XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM0QwXCI7XG4gICAgYm90dG9tID0gXCJcXFxcZG93bmFycm93XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXFVwZG93bmFycm93XCIpIHtcbiAgICB0b3AgPSBcIlxcXFxVcGFycm93XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyMDE2XCI7XG4gICAgYm90dG9tID0gXCJcXFxcRG93bmFycm93XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiW1wiIHx8IGRlbGltID09PSBcIlxcXFxsYnJhY2tcIikge1xuICAgIHRvcCA9IFwiXFx1MjNBMVwiO1xuICAgIHJlcGVhdCA9IFwiXFx1MjNBMlwiO1xuICAgIGJvdHRvbSA9IFwiXFx1MjNBM1wiO1xuICAgIGZvbnQgPSBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJdXCIgfHwgZGVsaW0gPT09IFwiXFxcXHJicmFja1wiKSB7XG4gICAgdG9wID0gXCJcXHUyM0E0XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM0E1XCI7XG4gICAgYm90dG9tID0gXCJcXHUyM0E2XCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxsZmxvb3JcIiB8fCBkZWxpbSA9PT0gXCJcXHUyMzBBXCIpIHtcbiAgICByZXBlYXQgPSB0b3AgPSBcIlxcdTIzQTJcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzQTNcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXGxjZWlsXCIgfHwgZGVsaW0gPT09IFwiXFx1MjMwOFwiKSB7XG4gICAgdG9wID0gXCJcXHUyM0ExXCI7XG4gICAgcmVwZWF0ID0gYm90dG9tID0gXCJcXHUyM0EyXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxyZmxvb3JcIiB8fCBkZWxpbSA9PT0gXCJcXHUyMzBCXCIpIHtcbiAgICByZXBlYXQgPSB0b3AgPSBcIlxcdTIzQTVcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzQTZcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXHJjZWlsXCIgfHwgZGVsaW0gPT09IFwiXFx1MjMwOVwiKSB7XG4gICAgdG9wID0gXCJcXHUyM0E0XCI7XG4gICAgcmVwZWF0ID0gYm90dG9tID0gXCJcXHUyM0E1XCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIihcIiB8fCBkZWxpbSA9PT0gXCJcXFxcbHBhcmVuXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzOUJcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzOUNcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzOURcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiKVwiIHx8IGRlbGltID09PSBcIlxcXFxycGFyZW5cIikge1xuICAgIHRvcCA9IFwiXFx1MjM5RVwiO1xuICAgIHJlcGVhdCA9IFwiXFx1MjM5RlwiO1xuICAgIGJvdHRvbSA9IFwiXFx1MjNBMFwiO1xuICAgIGZvbnQgPSBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxce1wiIHx8IGRlbGltID09PSBcIlxcXFxsYnJhY2VcIikge1xuICAgIHRvcCA9IFwiXFx1MjNBN1wiO1xuICAgIG1pZGRsZSA9IFwiXFx1MjNBOFwiO1xuICAgIGJvdHRvbSA9IFwiXFx1MjNBOVwiO1xuICAgIHJlcGVhdCA9IFwiXFx1MjNBQVwiO1xuICAgIGZvbnQgPSBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxcfVwiIHx8IGRlbGltID09PSBcIlxcXFxyYnJhY2VcIikge1xuICAgIHRvcCA9IFwiXFx1MjNBQlwiO1xuICAgIG1pZGRsZSA9IFwiXFx1MjNBQ1wiO1xuICAgIGJvdHRvbSA9IFwiXFx1MjNBRFwiO1xuICAgIHJlcGVhdCA9IFwiXFx1MjNBQVwiO1xuICAgIGZvbnQgPSBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxcbGdyb3VwXCIgfHwgZGVsaW0gPT09IFwiXFx1MjdFRVwiKSB7XG4gICAgdG9wID0gXCJcXHUyM0E3XCI7XG4gICAgYm90dG9tID0gXCJcXHUyM0E5XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM0FBXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxyZ3JvdXBcIiB8fCBkZWxpbSA9PT0gXCJcXHUyN0VGXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzQUJcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzQURcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzQUFcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXGxtb3VzdGFjaGVcIiB8fCBkZWxpbSA9PT0gXCJcXHUyM0IwXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzQTdcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzQURcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzQUFcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXHJtb3VzdGFjaGVcIiB8fCBkZWxpbSA9PT0gXCJcXHUyM0IxXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzQUJcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzQTlcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzQUFcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gLy8gR2V0IHRoZSBtZXRyaWNzIG9mIHRoZSBmb3VyIHNlY3Rpb25zXG5cblxuICB2YXIgdG9wTWV0cmljcyA9IGRlbGltaXRlcl9nZXRNZXRyaWNzKHRvcCwgZm9udCwgbW9kZSk7XG4gIHZhciB0b3BIZWlnaHRUb3RhbCA9IHRvcE1ldHJpY3MuaGVpZ2h0ICsgdG9wTWV0cmljcy5kZXB0aDtcbiAgdmFyIHJlcGVhdE1ldHJpY3MgPSBkZWxpbWl0ZXJfZ2V0TWV0cmljcyhyZXBlYXQsIGZvbnQsIG1vZGUpO1xuICB2YXIgcmVwZWF0SGVpZ2h0VG90YWwgPSByZXBlYXRNZXRyaWNzLmhlaWdodCArIHJlcGVhdE1ldHJpY3MuZGVwdGg7XG4gIHZhciBib3R0b21NZXRyaWNzID0gZGVsaW1pdGVyX2dldE1ldHJpY3MoYm90dG9tLCBmb250LCBtb2RlKTtcbiAgdmFyIGJvdHRvbUhlaWdodFRvdGFsID0gYm90dG9tTWV0cmljcy5oZWlnaHQgKyBib3R0b21NZXRyaWNzLmRlcHRoO1xuICB2YXIgbWlkZGxlSGVpZ2h0VG90YWwgPSAwO1xuICB2YXIgbWlkZGxlRmFjdG9yID0gMTtcblxuICBpZiAobWlkZGxlICE9PSBudWxsKSB7XG4gICAgdmFyIG1pZGRsZU1ldHJpY3MgPSBkZWxpbWl0ZXJfZ2V0TWV0cmljcyhtaWRkbGUsIGZvbnQsIG1vZGUpO1xuICAgIG1pZGRsZUhlaWdodFRvdGFsID0gbWlkZGxlTWV0cmljcy5oZWlnaHQgKyBtaWRkbGVNZXRyaWNzLmRlcHRoO1xuICAgIG1pZGRsZUZhY3RvciA9IDI7IC8vIHJlcGVhdCBzeW1tZXRyaWNhbGx5IGFib3ZlIGFuZCBiZWxvdyBtaWRkbGVcbiAgfSAvLyBDYWxjdWF0ZSB0aGUgbWluaW1hbCBoZWlnaHQgdGhhdCB0aGUgZGVsaW1pdGVyIGNhbiBoYXZlLlxuICAvLyBJdCBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiB0aGUgdG9wLCBib3R0b20sIGFuZCBvcHRpb25hbCBtaWRkbGUgY29tYmluZWQuXG5cblxuICB2YXIgbWluSGVpZ2h0ID0gdG9wSGVpZ2h0VG90YWwgKyBib3R0b21IZWlnaHRUb3RhbCArIG1pZGRsZUhlaWdodFRvdGFsOyAvLyBDb21wdXRlIHRoZSBudW1iZXIgb2YgY29waWVzIG9mIHRoZSByZXBlYXQgc3ltYm9sIHdlIHdpbGwgbmVlZFxuXG4gIHZhciByZXBlYXRDb3VudCA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCgoaGVpZ2h0VG90YWwgLSBtaW5IZWlnaHQpIC8gKG1pZGRsZUZhY3RvciAqIHJlcGVhdEhlaWdodFRvdGFsKSkpOyAvLyBDb21wdXRlIHRoZSB0b3RhbCBoZWlnaHQgb2YgdGhlIGRlbGltaXRlciBpbmNsdWRpbmcgYWxsIHRoZSBzeW1ib2xzXG5cbiAgdmFyIHJlYWxIZWlnaHRUb3RhbCA9IG1pbkhlaWdodCArIHJlcGVhdENvdW50ICogbWlkZGxlRmFjdG9yICogcmVwZWF0SGVpZ2h0VG90YWw7IC8vIFRoZSBjZW50ZXIgb2YgdGhlIGRlbGltaXRlciBpcyBwbGFjZWQgYXQgdGhlIGNlbnRlciBvZiB0aGUgYXhpcy4gTm90ZVxuICAvLyB0aGF0IGluIHRoaXMgY29udGV4dCwgXCJjZW50ZXJcIiBtZWFucyB0aGF0IHRoZSBkZWxpbWl0ZXIgc2hvdWxkIGJlXG4gIC8vIGNlbnRlcmVkIGFyb3VuZCB0aGUgYXhpcyBpbiB0aGUgY3VycmVudCBzdHlsZSwgd2hpbGUgbm9ybWFsbHkgaXQgaXNcbiAgLy8gY2VudGVyZWQgYXJvdW5kIHRoZSBheGlzIGluIHRleHRzdHlsZS5cblxuICB2YXIgYXhpc0hlaWdodCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O1xuXG4gIGlmIChjZW50ZXIpIHtcbiAgICBheGlzSGVpZ2h0ICo9IG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gIH0gLy8gQ2FsY3VsYXRlIHRoZSBkZXB0aFxuXG5cbiAgdmFyIGRlcHRoID0gcmVhbEhlaWdodFRvdGFsIC8gMiAtIGF4aXNIZWlnaHQ7IC8vIFRoaXMgZnVuY3Rpb24gZGlmZmVycyBmcm9tIHRoZSBUZVggcHJvY2VkdXJlIGluIG9uZSB3YXkuXG4gIC8vIFdlIHNoaWZ0IGVhY2ggcmVwZWF0IGVsZW1lbnQgZG93bndhcmRzIGJ5IDAuMDA1ZW0sIHRvIHByZXZlbnQgYSBnYXBcbiAgLy8gZHVlIHRvIGJyb3dzZXIgZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3IuXG4gIC8vIFRoZW4sIGF0IHRoZSBsYXN0IGVsZW1lbnQtdG8gZWxlbWVudCBqb2ludCwgd2UgYWRkIG9uZSBleHRyYSByZXBlYXRcbiAgLy8gZWxlbWVudCB0byBjb3ZlciB0aGUgZ2FwIGNyZWF0ZWQgYnkgdGhlIHNoaWZ0cy5cbiAgLy8gRmluZCB0aGUgc2hpZnQgbmVlZGVkIHRvIGFsaWduIHRoZSB1cHBlciBlbmQgb2YgdGhlIGV4dHJhIGVsZW1lbnQgYXQgYSBwb2ludFxuICAvLyAwLjAwNWVtIGFib3ZlIHRoZSBsb3dlciBlbmQgb2YgdGhlIHRvcCBlbGVtZW50LlxuXG4gIHZhciBzaGlmdE9mRXh0cmFFbGVtZW50ID0gKHJlcGVhdENvdW50ICsgMSkgKiAwLjAwNSAtIHJlcGVhdEhlaWdodFRvdGFsOyAvLyBOb3csIHdlIHN0YXJ0IGJ1aWxkaW5nIHRoZSBwaWVjZXMgdGhhdCB3aWxsIGdvIGludG8gdGhlIHZsaXN0XG4gIC8vIEtlZXAgYSBsaXN0IG9mIHRoZSBpbm5lciBwaWVjZXNcblxuICB2YXIgaW5uZXJzID0gW107IC8vIEFkZCB0aGUgYm90dG9tIHN5bWJvbFxuXG4gIGlubmVycy5wdXNoKGRlbGltaXRlcl9tYWtlSW5uZXIoYm90dG9tLCBmb250LCBtb2RlKSk7XG5cbiAgaWYgKG1pZGRsZSA9PT0gbnVsbCkge1xuICAgIC8vIEFkZCB0aGF0IG1hbnkgc3ltYm9sc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVwZWF0Q291bnQ7IGkrKykge1xuICAgICAgaW5uZXJzLnB1c2gobGFwKTsgLy8gb3ZlcmxhcFxuXG4gICAgICBpbm5lcnMucHVzaChkZWxpbWl0ZXJfbWFrZUlubmVyKHJlcGVhdCwgZm9udCwgbW9kZSkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBXaGVuIHRoZXJlIGlzIGEgbWlkZGxlIGJpdCwgd2UgbmVlZCB0aGUgbWlkZGxlIHBhcnQgYW5kIHR3byByZXBlYXRlZFxuICAgIC8vIHNlY3Rpb25zXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHJlcGVhdENvdW50OyBfaSsrKSB7XG4gICAgICBpbm5lcnMucHVzaChsYXApO1xuICAgICAgaW5uZXJzLnB1c2goZGVsaW1pdGVyX21ha2VJbm5lcihyZXBlYXQsIGZvbnQsIG1vZGUpKTtcbiAgICB9IC8vIEluc2VydCBvbmUgZXh0cmEgcmVwZWF0IGVsZW1lbnQuXG5cblxuICAgIGlubmVycy5wdXNoKHtcbiAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgc2l6ZTogc2hpZnRPZkV4dHJhRWxlbWVudFxuICAgIH0pO1xuICAgIGlubmVycy5wdXNoKGRlbGltaXRlcl9tYWtlSW5uZXIocmVwZWF0LCBmb250LCBtb2RlKSk7XG4gICAgaW5uZXJzLnB1c2gobGFwKTsgLy8gTm93IGluc2VydCB0aGUgbWlkZGxlIG9mIHRoZSBicmFjZS5cblxuICAgIGlubmVycy5wdXNoKGRlbGltaXRlcl9tYWtlSW5uZXIobWlkZGxlLCBmb250LCBtb2RlKSk7XG5cbiAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCByZXBlYXRDb3VudDsgX2kyKyspIHtcbiAgICAgIGlubmVycy5wdXNoKGxhcCk7XG4gICAgICBpbm5lcnMucHVzaChkZWxpbWl0ZXJfbWFrZUlubmVyKHJlcGVhdCwgZm9udCwgbW9kZSkpO1xuICAgIH1cbiAgfSAvLyBUbyBjb3ZlciB0aGUgZ2FwIGNyZWF0ZSBieSB0aGUgb3ZlcmxhcHMsIGluc2VydCBvbmUgbW9yZSByZXBlYXQgZWxlbWVudCxcbiAgLy8gYXQgYSBwb3NpdGlvbiB0aGF0IGp1dHMgMC4wMDUgYWJvdmUgdGhlIGJvdHRvbSBvZiB0aGUgdG9wIGVsZW1lbnQuXG5cblxuICBpbm5lcnMucHVzaCh7XG4gICAgdHlwZTogXCJrZXJuXCIsXG4gICAgc2l6ZTogc2hpZnRPZkV4dHJhRWxlbWVudFxuICB9KTtcbiAgaW5uZXJzLnB1c2goZGVsaW1pdGVyX21ha2VJbm5lcihyZXBlYXQsIGZvbnQsIG1vZGUpKTtcbiAgaW5uZXJzLnB1c2gobGFwKTsgLy8gQWRkIHRoZSB0b3Agc3ltYm9sXG5cbiAgaW5uZXJzLnB1c2goZGVsaW1pdGVyX21ha2VJbm5lcih0b3AsIGZvbnQsIG1vZGUpKTsgLy8gRmluYWxseSwgYnVpbGQgdGhlIHZsaXN0XG5cbiAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ0Jhc2VTdHlsZShzcmNfU3R5bGUuVEVYVCk7XG4gIHZhciBpbm5lciA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgcG9zaXRpb25UeXBlOiBcImJvdHRvbVwiLFxuICAgIHBvc2l0aW9uRGF0YTogZGVwdGgsXG4gICAgY2hpbGRyZW46IGlubmVyc1xuICB9LCBuZXdPcHRpb25zKTtcbiAgcmV0dXJuIGRlbGltaXRlcl9zdHlsZVdyYXAoYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiZGVsaW1zaXppbmdcIiwgXCJtdWx0XCJdLCBbaW5uZXJdLCBuZXdPcHRpb25zKSwgc3JjX1N0eWxlLlRFWFQsIG9wdGlvbnMsIGNsYXNzZXMpO1xufTsgLy8gQWxsIHN1cmRzIGhhdmUgMC4wOGVtIHBhZGRpbmcgYWJvdmUgdGhlIHZpbmljdWx1bSBpbnNpZGUgdGhlIFNWRy5cbi8vIFRoYXQga2VlcHMgYnJvd3NlciBzcGFuIGhlaWdodCByb3VuZGluZyBlcnJvciBmcm9tIHBpbmNoaW5nIHRoZSBsaW5lLlxuXG5cbnZhciB2YlBhZCA9IDgwOyAvLyBwYWRkaW5nIGFib3ZlIHRoZSBzdXJkLCBtZWFzdXJlZCBpbnNpZGUgdGhlIHZpZXdCb3guXG5cbnZhciBlbVBhZCA9IDAuMDg7IC8vIHBhZGRpbmcsIGluIGVtcywgbWVhc3VyZWQgaW4gdGhlIGRvY3VtZW50LlxuXG52YXIgZGVsaW1pdGVyX3NxcnRTdmcgPSBmdW5jdGlvbiBzcXJ0U3ZnKHNxcnROYW1lLCBoZWlnaHQsIHZpZXdCb3hIZWlnaHQsIGV4dHJhVmluaWN1bHVtLCBvcHRpb25zKSB7XG4gIHZhciBwYXRoID0gc3FydFBhdGgoc3FydE5hbWUsIGV4dHJhVmluaWN1bHVtLCB2aWV3Qm94SGVpZ2h0KTtcbiAgdmFyIHBhdGhOb2RlID0gbmV3IGRvbVRyZWVfUGF0aE5vZGUoc3FydE5hbWUsIHBhdGgpO1xuICB2YXIgc3ZnID0gbmV3IFN2Z05vZGUoW3BhdGhOb2RlXSwge1xuICAgIC8vIE5vdGU6IDEwMDA6MSByYXRpbyBvZiB2aWV3Qm94IHRvIGRvY3VtZW50IGVtIHdpZHRoLlxuICAgIFwid2lkdGhcIjogXCI0MDBlbVwiLFxuICAgIFwiaGVpZ2h0XCI6IGhlaWdodCArIFwiZW1cIixcbiAgICBcInZpZXdCb3hcIjogXCIwIDAgNDAwMDAwIFwiICsgdmlld0JveEhlaWdodCxcbiAgICBcInByZXNlcnZlQXNwZWN0UmF0aW9cIjogXCJ4TWluWU1pbiBzbGljZVwiXG4gIH0pO1xuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW1wiaGlkZS10YWlsXCJdLCBbc3ZnXSwgb3B0aW9ucyk7XG59O1xuLyoqXG4gKiBNYWtlIGEgc3FydCBpbWFnZSBvZiB0aGUgZ2l2ZW4gaGVpZ2h0LFxuICovXG5cblxudmFyIG1ha2VTcXJ0SW1hZ2UgPSBmdW5jdGlvbiBtYWtlU3FydEltYWdlKGhlaWdodCwgb3B0aW9ucykge1xuICAvLyBEZWZpbmUgYSBuZXdPcHRpb25zIHRoYXQgcmVtb3ZlcyB0aGUgZWZmZWN0IG9mIHNpemUgY2hhbmdlcyBzdWNoIGFzIFxcSHVnZS5cbiAgLy8gV2UgZG9uJ3QgcGljayBkaWZmZXJlbnQgYSBoZWlnaHQgc3VyZCBmb3IgXFxIdWdlLiBGb3IgaXQsIHdlIHNjYWxlIHVwLlxuICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nQmFzZVNpemluZygpOyAvLyBQaWNrIHRoZSBkZXNpcmVkIHN1cmQgZ2x5cGggZnJvbSBhIHNlcXVlbmNlIG9mIHN1cmRzLlxuXG4gIHZhciBkZWxpbSA9IHRyYXZlcnNlU2VxdWVuY2UoXCJcXFxcc3VyZFwiLCBoZWlnaHQgKiBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyLCBzdGFja0xhcmdlRGVsaW1pdGVyU2VxdWVuY2UsIG5ld09wdGlvbnMpO1xuICB2YXIgc2l6ZU11bHRpcGxpZXIgPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyOyAvLyBkZWZhdWx0XG4gIC8vIFRoZSBzdGFuZGFyZCBzcXJ0IFNWR3MgZWFjaCBoYXZlIGEgMC4wNGVtIHRoaWNrIHZpbmljdWx1bS5cbiAgLy8gSWYgU2V0dGluZ3MubWluUnVsZVRoaWNrbmVzcyBpcyBsYXJnZXIgdGhhbiB0aGF0LCB3ZSBhZGQgZXh0cmFWaW5pY3VsdW0uXG5cbiAgdmFyIGV4dHJhVmluaWN1bHVtID0gTWF0aC5tYXgoMCwgb3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzIC0gb3B0aW9ucy5mb250TWV0cmljcygpLnNxcnRSdWxlVGhpY2tuZXNzKTsgLy8gQ3JlYXRlIGEgc3BhbiBjb250YWluaW5nIGFuIFNWRyBpbWFnZSBvZiBhIHNxcnQgc3ltYm9sLlxuXG4gIHZhciBzcGFuO1xuICB2YXIgc3BhbkhlaWdodCA9IDA7XG4gIHZhciB0ZXhIZWlnaHQgPSAwO1xuICB2YXIgdmlld0JveEhlaWdodCA9IDA7XG4gIHZhciBhZHZhbmNlV2lkdGg7IC8vIFdlIGNyZWF0ZSB2aWV3Qm94ZXMgd2l0aCA4MCB1bml0cyBvZiBcInBhZGRpbmdcIiBhYm92ZSBlYWNoIHN1cmQuXG4gIC8vIFRoZW4gYnJvd3NlciByb3VuZGluZyBlcnJvciBvbiB0aGUgcGFyZW50IHNwYW4gaGVpZ2h0IHdpbGwgbm90XG4gIC8vIGVuY3JvYWNoIG9uIHRoZSBpbmsgb2YgdGhlIHZpbmljdWx1bS4gQnV0IHRoYXQgcGFkZGluZyBpcyBub3RcbiAgLy8gaW5jbHVkZWQgaW4gdGhlIFRlWC1saWtlIGBoZWlnaHRgIHVzZWQgZm9yIGNhbGN1bGF0aW9uIG9mXG4gIC8vIHZlcnRpY2FsIGFsaWdubWVudC4gU28gdGV4SGVpZ2h0ID0gc3Bhbi5oZWlnaHQgPCBzcGFuLnN0eWxlLmhlaWdodC5cblxuICBpZiAoZGVsaW0udHlwZSA9PT0gXCJzbWFsbFwiKSB7XG4gICAgLy8gR2V0IGFuIFNWRyB0aGF0IGlzIGRlcml2ZWQgZnJvbSBnbHlwaCBVKzIyMUEgaW4gZm9udCBLYVRlWC1NYWluLlxuICAgIC8vIDEwMDAgdW5pdCBub3JtYWwgZ2x5cGggaGVpZ2h0LlxuICAgIHZpZXdCb3hIZWlnaHQgPSAxMDAwICsgMTAwMCAqIGV4dHJhVmluaWN1bHVtICsgdmJQYWQ7XG5cbiAgICBpZiAoaGVpZ2h0IDwgMS4wKSB7XG4gICAgICBzaXplTXVsdGlwbGllciA9IDEuMDsgLy8gbWltaWMgYSBcXHRleHRmb250IHJhZGljYWxcbiAgICB9IGVsc2UgaWYgKGhlaWdodCA8IDEuNCkge1xuICAgICAgc2l6ZU11bHRpcGxpZXIgPSAwLjc7IC8vIG1pbWljIGEgXFxzY3JpcHRmb250IHJhZGljYWxcbiAgICB9XG5cbiAgICBzcGFuSGVpZ2h0ID0gKDEuMCArIGV4dHJhVmluaWN1bHVtICsgZW1QYWQpIC8gc2l6ZU11bHRpcGxpZXI7XG4gICAgdGV4SGVpZ2h0ID0gKDEuMDAgKyBleHRyYVZpbmljdWx1bSkgLyBzaXplTXVsdGlwbGllcjtcbiAgICBzcGFuID0gZGVsaW1pdGVyX3NxcnRTdmcoXCJzcXJ0TWFpblwiLCBzcGFuSGVpZ2h0LCB2aWV3Qm94SGVpZ2h0LCBleHRyYVZpbmljdWx1bSwgb3B0aW9ucyk7XG4gICAgc3Bhbi5zdHlsZS5taW5XaWR0aCA9IFwiMC44NTNlbVwiO1xuICAgIGFkdmFuY2VXaWR0aCA9IDAuODMzIC8gc2l6ZU11bHRpcGxpZXI7IC8vIGZyb20gdGhlIGZvbnQuXG4gIH0gZWxzZSBpZiAoZGVsaW0udHlwZSA9PT0gXCJsYXJnZVwiKSB7XG4gICAgLy8gVGhlc2UgU1ZHcyBjb21lIGZyb20gZm9udHM6IEthVGVYX1NpemUxLCBfU2l6ZTIsIGV0Yy5cbiAgICB2aWV3Qm94SGVpZ2h0ID0gKDEwMDAgKyB2YlBhZCkgKiBzaXplVG9NYXhIZWlnaHRbZGVsaW0uc2l6ZV07XG4gICAgdGV4SGVpZ2h0ID0gKHNpemVUb01heEhlaWdodFtkZWxpbS5zaXplXSArIGV4dHJhVmluaWN1bHVtKSAvIHNpemVNdWx0aXBsaWVyO1xuICAgIHNwYW5IZWlnaHQgPSAoc2l6ZVRvTWF4SGVpZ2h0W2RlbGltLnNpemVdICsgZXh0cmFWaW5pY3VsdW0gKyBlbVBhZCkgLyBzaXplTXVsdGlwbGllcjtcbiAgICBzcGFuID0gZGVsaW1pdGVyX3NxcnRTdmcoXCJzcXJ0U2l6ZVwiICsgZGVsaW0uc2l6ZSwgc3BhbkhlaWdodCwgdmlld0JveEhlaWdodCwgZXh0cmFWaW5pY3VsdW0sIG9wdGlvbnMpO1xuICAgIHNwYW4uc3R5bGUubWluV2lkdGggPSBcIjEuMDJlbVwiO1xuICAgIGFkdmFuY2VXaWR0aCA9IDEuMCAvIHNpemVNdWx0aXBsaWVyOyAvLyAxLjAgZnJvbSB0aGUgZm9udC5cbiAgfSBlbHNlIHtcbiAgICAvLyBUYWxsIHNxcnQuIEluIFRlWCwgdGhpcyB3b3VsZCBiZSBzdGFja2VkIHVzaW5nIG11bHRpcGxlIGdseXBocy5cbiAgICAvLyBXZSdsbCB1c2UgYSBzaW5nbGUgU1ZHIHRvIGFjY29tcGxpc2ggdGhlIHNhbWUgdGhpbmcuXG4gICAgc3BhbkhlaWdodCA9IGhlaWdodCArIGV4dHJhVmluaWN1bHVtICsgZW1QYWQ7XG4gICAgdGV4SGVpZ2h0ID0gaGVpZ2h0ICsgZXh0cmFWaW5pY3VsdW07XG4gICAgdmlld0JveEhlaWdodCA9IE1hdGguZmxvb3IoMTAwMCAqIGhlaWdodCArIGV4dHJhVmluaWN1bHVtKSArIHZiUGFkO1xuICAgIHNwYW4gPSBkZWxpbWl0ZXJfc3FydFN2ZyhcInNxcnRUYWxsXCIsIHNwYW5IZWlnaHQsIHZpZXdCb3hIZWlnaHQsIGV4dHJhVmluaWN1bHVtLCBvcHRpb25zKTtcbiAgICBzcGFuLnN0eWxlLm1pbldpZHRoID0gXCIwLjc0MmVtXCI7XG4gICAgYWR2YW5jZVdpZHRoID0gMS4wNTY7XG4gIH1cblxuICBzcGFuLmhlaWdodCA9IHRleEhlaWdodDtcbiAgc3Bhbi5zdHlsZS5oZWlnaHQgPSBzcGFuSGVpZ2h0ICsgXCJlbVwiO1xuICByZXR1cm4ge1xuICAgIHNwYW46IHNwYW4sXG4gICAgYWR2YW5jZVdpZHRoOiBhZHZhbmNlV2lkdGgsXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhY3R1YWwgbGluZSB3aWR0aC5cbiAgICAvLyBUaGlzIGFjdHVhbGx5IHNob3VsZCBkZXBlbmQgb24gdGhlIGNob3NlbiBmb250IC0tIGUuZy4gXFxib2xkbWF0aFxuICAgIC8vIHNob3VsZCB1c2UgdGhlIHRoaWNrZXIgc3VyZCBzeW1ib2xzIGZyb20gZS5nLiBLYVRlWF9NYWluLUJvbGQsIGFuZFxuICAgIC8vIGhhdmUgdGhpY2tlciBydWxlcy5cbiAgICBydWxlV2lkdGg6IChvcHRpb25zLmZvbnRNZXRyaWNzKCkuc3FydFJ1bGVUaGlja25lc3MgKyBleHRyYVZpbmljdWx1bSkgKiBzaXplTXVsdGlwbGllclxuICB9O1xufTsgLy8gVGhlcmUgYXJlIHRocmVlIGtpbmRzIG9mIGRlbGltaXRlcnMsIGRlbGltaXRlcnMgdGhhdCBzdGFjayB3aGVuIHRoZXkgYmVjb21lXG4vLyB0b28gbGFyZ2VcblxuXG52YXIgc3RhY2tMYXJnZURlbGltaXRlcnMgPSBbXCIoXCIsIFwiXFxcXGxwYXJlblwiLCBcIilcIiwgXCJcXFxccnBhcmVuXCIsIFwiW1wiLCBcIlxcXFxsYnJhY2tcIiwgXCJdXCIsIFwiXFxcXHJicmFja1wiLCBcIlxcXFx7XCIsIFwiXFxcXGxicmFjZVwiLCBcIlxcXFx9XCIsIFwiXFxcXHJicmFjZVwiLCBcIlxcXFxsZmxvb3JcIiwgXCJcXFxccmZsb29yXCIsIFwiXFx1MjMwQVwiLCBcIlxcdTIzMEJcIiwgXCJcXFxcbGNlaWxcIiwgXCJcXFxccmNlaWxcIiwgXCJcXHUyMzA4XCIsIFwiXFx1MjMwOVwiLCBcIlxcXFxzdXJkXCJdOyAvLyBkZWxpbWl0ZXJzIHRoYXQgYWx3YXlzIHN0YWNrXG5cbnZhciBzdGFja0Fsd2F5c0RlbGltaXRlcnMgPSBbXCJcXFxcdXBhcnJvd1wiLCBcIlxcXFxkb3duYXJyb3dcIiwgXCJcXFxcdXBkb3duYXJyb3dcIiwgXCJcXFxcVXBhcnJvd1wiLCBcIlxcXFxEb3duYXJyb3dcIiwgXCJcXFxcVXBkb3duYXJyb3dcIiwgXCJ8XCIsIFwiXFxcXHxcIiwgXCJcXFxcdmVydFwiLCBcIlxcXFxWZXJ0XCIsIFwiXFxcXGx2ZXJ0XCIsIFwiXFxcXHJ2ZXJ0XCIsIFwiXFxcXGxWZXJ0XCIsIFwiXFxcXHJWZXJ0XCIsIFwiXFxcXGxncm91cFwiLCBcIlxcXFxyZ3JvdXBcIiwgXCJcXHUyN0VFXCIsIFwiXFx1MjdFRlwiLCBcIlxcXFxsbW91c3RhY2hlXCIsIFwiXFxcXHJtb3VzdGFjaGVcIiwgXCJcXHUyM0IwXCIsIFwiXFx1MjNCMVwiXTsgLy8gYW5kIGRlbGltaXRlcnMgdGhhdCBuZXZlciBzdGFja1xuXG52YXIgc3RhY2tOZXZlckRlbGltaXRlcnMgPSBbXCI8XCIsIFwiPlwiLCBcIlxcXFxsYW5nbGVcIiwgXCJcXFxccmFuZ2xlXCIsIFwiL1wiLCBcIlxcXFxiYWNrc2xhc2hcIiwgXCJcXFxcbHRcIiwgXCJcXFxcZ3RcIl07IC8vIE1ldHJpY3Mgb2YgdGhlIGRpZmZlcmVudCBzaXplcy4gRm91bmQgYnkgbG9va2luZyBhdCBUZVgncyBvdXRwdXQgb2Zcbi8vICRcXGJpZ2x8IC8vIFxcQmlnbHwgXFxiaWdnbHwgXFxCaWdnbHwgXFxzaG93bGlzdHMkXG4vLyBVc2VkIHRvIGNyZWF0ZSBzdGFja2VkIGRlbGltaXRlcnMgb2YgYXBwcm9wcmlhdGUgc2l6ZXMgaW4gbWFrZVNpemVkRGVsaW0uXG5cbnZhciBzaXplVG9NYXhIZWlnaHQgPSBbMCwgMS4yLCAxLjgsIDIuNCwgMy4wXTtcbi8qKlxuICogVXNlZCB0byBjcmVhdGUgYSBkZWxpbWl0ZXIgb2YgYSBzcGVjaWZpYyBzaXplLCB3aGVyZSBgc2l6ZWAgaXMgMSwgMiwgMywgb3IgNC5cbiAqL1xuXG52YXIgZGVsaW1pdGVyX21ha2VTaXplZERlbGltID0gZnVuY3Rpb24gbWFrZVNpemVkRGVsaW0oZGVsaW0sIHNpemUsIG9wdGlvbnMsIG1vZGUsIGNsYXNzZXMpIHtcbiAgLy8gPCBhbmQgPiB0dXJuIGludG8gXFxsYW5nbGUgYW5kIFxccmFuZ2xlIGluIGRlbGltaXRlcnNcbiAgaWYgKGRlbGltID09PSBcIjxcIiB8fCBkZWxpbSA9PT0gXCJcXFxcbHRcIiB8fCBkZWxpbSA9PT0gXCJcXHUyN0U4XCIpIHtcbiAgICBkZWxpbSA9IFwiXFxcXGxhbmdsZVwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIj5cIiB8fCBkZWxpbSA9PT0gXCJcXFxcZ3RcIiB8fCBkZWxpbSA9PT0gXCJcXHUyN0U5XCIpIHtcbiAgICBkZWxpbSA9IFwiXFxcXHJhbmdsZVwiO1xuICB9IC8vIFNpemVkIGRlbGltaXRlcnMgYXJlIG5ldmVyIGNlbnRlcmVkLlxuXG5cbiAgaWYgKHV0aWxzLmNvbnRhaW5zKHN0YWNrTGFyZ2VEZWxpbWl0ZXJzLCBkZWxpbSkgfHwgdXRpbHMuY29udGFpbnMoc3RhY2tOZXZlckRlbGltaXRlcnMsIGRlbGltKSkge1xuICAgIHJldHVybiBkZWxpbWl0ZXJfbWFrZUxhcmdlRGVsaW0oZGVsaW0sIHNpemUsIGZhbHNlLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbiAgfSBlbHNlIGlmICh1dGlscy5jb250YWlucyhzdGFja0Fsd2F5c0RlbGltaXRlcnMsIGRlbGltKSkge1xuICAgIHJldHVybiBkZWxpbWl0ZXJfbWFrZVN0YWNrZWREZWxpbShkZWxpbSwgc2l6ZVRvTWF4SGVpZ2h0W3NpemVdLCBmYWxzZSwgb3B0aW9ucywgbW9kZSwgY2xhc3Nlcyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSWxsZWdhbCBkZWxpbWl0ZXI6ICdcIiArIGRlbGltICsgXCInXCIpO1xuICB9XG59O1xuLyoqXG4gKiBUaGVyZSBhcmUgdGhyZWUgZGlmZmVyZW50IHNlcXVlbmNlcyBvZiBkZWxpbWl0ZXIgc2l6ZXMgdGhhdCB0aGUgZGVsaW1pdGVyc1xuICogZm9sbG93IGRlcGVuZGluZyBvbiB0aGUga2luZCBvZiBkZWxpbWl0ZXIuIFRoaXMgaXMgdXNlZCB3aGVuIGNyZWF0aW5nIGN1c3RvbVxuICogc2l6ZWQgZGVsaW1pdGVycyB0byBkZWNpZGUgd2hldGhlciB0byBjcmVhdGUgYSBzbWFsbCwgbGFyZ2UsIG9yIHN0YWNrZWRcbiAqIGRlbGltaXRlci5cbiAqXG4gKiBJbiByZWFsIFRlWCwgdGhlc2Ugc2VxdWVuY2VzIGFyZW4ndCBleHBsaWNpdGx5IGRlZmluZWQsIGJ1dCBhcmUgaW5zdGVhZFxuICogZGVmaW5lZCBpbnNpZGUgdGhlIGZvbnQgbWV0cmljcy4gU2luY2UgdGhlcmUgYXJlIG9ubHkgdGhyZWUgc2VxdWVuY2VzIHRoYXRcbiAqIGFyZSBwb3NzaWJsZSBmb3IgdGhlIGRlbGltaXRlcnMgdGhhdCBUZVggZGVmaW5lcywgaXQgaXMgZWFzaWVyIHRvIGp1c3QgZW5jb2RlXG4gKiB0aGVtIGV4cGxpY2l0bHkgaGVyZS5cbiAqL1xuXG5cbi8vIERlbGltaXRlcnMgdGhhdCBuZXZlciBzdGFjayB0cnkgc21hbGwgZGVsaW1pdGVycyBhbmQgbGFyZ2UgZGVsaW1pdGVycyBvbmx5XG52YXIgc3RhY2tOZXZlckRlbGltaXRlclNlcXVlbmNlID0gW3tcbiAgdHlwZTogXCJzbWFsbFwiLFxuICBzdHlsZTogc3JjX1N0eWxlLlNDUklQVFNDUklQVFxufSwge1xuICB0eXBlOiBcInNtYWxsXCIsXG4gIHN0eWxlOiBzcmNfU3R5bGUuU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IHNyY19TdHlsZS5URVhUXG59LCB7XG4gIHR5cGU6IFwibGFyZ2VcIixcbiAgc2l6ZTogMVxufSwge1xuICB0eXBlOiBcImxhcmdlXCIsXG4gIHNpemU6IDJcbn0sIHtcbiAgdHlwZTogXCJsYXJnZVwiLFxuICBzaXplOiAzXG59LCB7XG4gIHR5cGU6IFwibGFyZ2VcIixcbiAgc2l6ZTogNFxufV07IC8vIERlbGltaXRlcnMgdGhhdCBhbHdheXMgc3RhY2sgdHJ5IHRoZSBzbWFsbCBkZWxpbWl0ZXJzIGZpcnN0LCB0aGVuIHN0YWNrXG5cbnZhciBzdGFja0Fsd2F5c0RlbGltaXRlclNlcXVlbmNlID0gW3tcbiAgdHlwZTogXCJzbWFsbFwiLFxuICBzdHlsZTogc3JjX1N0eWxlLlNDUklQVFNDUklQVFxufSwge1xuICB0eXBlOiBcInNtYWxsXCIsXG4gIHN0eWxlOiBzcmNfU3R5bGUuU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IHNyY19TdHlsZS5URVhUXG59LCB7XG4gIHR5cGU6IFwic3RhY2tcIlxufV07IC8vIERlbGltaXRlcnMgdGhhdCBzdGFjayB3aGVuIGxhcmdlIHRyeSB0aGUgc21hbGwgYW5kIHRoZW4gbGFyZ2UgZGVsaW1pdGVycywgYW5kXG4vLyBzdGFjayBhZnRlcndhcmRzXG5cbnZhciBzdGFja0xhcmdlRGVsaW1pdGVyU2VxdWVuY2UgPSBbe1xuICB0eXBlOiBcInNtYWxsXCIsXG4gIHN0eWxlOiBzcmNfU3R5bGUuU0NSSVBUU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IHNyY19TdHlsZS5TQ1JJUFRcbn0sIHtcbiAgdHlwZTogXCJzbWFsbFwiLFxuICBzdHlsZTogc3JjX1N0eWxlLlRFWFRcbn0sIHtcbiAgdHlwZTogXCJsYXJnZVwiLFxuICBzaXplOiAxXG59LCB7XG4gIHR5cGU6IFwibGFyZ2VcIixcbiAgc2l6ZTogMlxufSwge1xuICB0eXBlOiBcImxhcmdlXCIsXG4gIHNpemU6IDNcbn0sIHtcbiAgdHlwZTogXCJsYXJnZVwiLFxuICBzaXplOiA0XG59LCB7XG4gIHR5cGU6IFwic3RhY2tcIlxufV07XG4vKipcbiAqIEdldCB0aGUgZm9udCB1c2VkIGluIGEgZGVsaW1pdGVyIGJhc2VkIG9uIHdoYXQga2luZCBvZiBkZWxpbWl0ZXIgaXQgaXMuXG4gKiBUT0RPKCM5NjMpIFVzZSBtb3JlIHNwZWNpZmljIGZvbnQgZmFtaWx5IHJldHVybiB0eXBlIG9uY2UgdGhhdCBpcyBpbnRyb2R1Y2VkLlxuICovXG5cbnZhciBkZWxpbVR5cGVUb0ZvbnQgPSBmdW5jdGlvbiBkZWxpbVR5cGVUb0ZvbnQodHlwZSkge1xuICBpZiAodHlwZS50eXBlID09PSBcInNtYWxsXCIpIHtcbiAgICByZXR1cm4gXCJNYWluLVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmICh0eXBlLnR5cGUgPT09IFwibGFyZ2VcIikge1xuICAgIHJldHVybiBcIlNpemVcIiArIHR5cGUuc2l6ZSArIFwiLVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmICh0eXBlLnR5cGUgPT09IFwic3RhY2tcIikge1xuICAgIHJldHVybiBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBZGQgc3VwcG9ydCBmb3IgZGVsaW0gdHlwZSAnXCIgKyB0eXBlLnR5cGUgKyBcIicgaGVyZS5cIik7XG4gIH1cbn07XG4vKipcbiAqIFRyYXZlcnNlIGEgc2VxdWVuY2Ugb2YgdHlwZXMgb2YgZGVsaW1pdGVycyB0byBkZWNpZGUgd2hhdCBraW5kIG9mIGRlbGltaXRlclxuICogc2hvdWxkIGJlIHVzZWQgdG8gY3JlYXRlIGEgZGVsaW1pdGVyIG9mIHRoZSBnaXZlbiBoZWlnaHQrZGVwdGguXG4gKi9cblxuXG52YXIgdHJhdmVyc2VTZXF1ZW5jZSA9IGZ1bmN0aW9uIHRyYXZlcnNlU2VxdWVuY2UoZGVsaW0sIGhlaWdodCwgc2VxdWVuY2UsIG9wdGlvbnMpIHtcbiAgLy8gSGVyZSwgd2UgY2hvb3NlIHRoZSBpbmRleCB3ZSBzaG91bGQgc3RhcnQgYXQgaW4gdGhlIHNlcXVlbmNlcy4gSW4gc21hbGxlclxuICAvLyBzaXplcyAod2hpY2ggY29ycmVzcG9uZCB0byBsYXJnZXIgbnVtYmVycyBpbiBzdHlsZS5zaXplKSB3ZSBzdGFydCBlYXJsaWVyXG4gIC8vIGluIHRoZSBzZXF1ZW5jZS4gVGh1cywgc2NyaXB0c2NyaXB0IHN0YXJ0cyBhdCBpbmRleCAzLTM9MCwgc2NyaXB0IHN0YXJ0c1xuICAvLyBhdCBpbmRleCAzLTI9MSwgdGV4dCBzdGFydHMgYXQgMy0xPTIsIGFuZCBkaXNwbGF5IHN0YXJ0cyBhdCBtaW4oMiwzLTApPTJcbiAgdmFyIHN0YXJ0ID0gTWF0aC5taW4oMiwgMyAtIG9wdGlvbnMuc3R5bGUuc2l6ZSk7XG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgc2VxdWVuY2UubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc2VxdWVuY2VbaV0udHlwZSA9PT0gXCJzdGFja1wiKSB7XG4gICAgICAvLyBUaGlzIGlzIGFsd2F5cyB0aGUgbGFzdCBkZWxpbWl0ZXIsIHNvIHdlIGp1c3QgYnJlYWsgdGhlIGxvb3Agbm93LlxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIG1ldHJpY3MgPSBkZWxpbWl0ZXJfZ2V0TWV0cmljcyhkZWxpbSwgZGVsaW1UeXBlVG9Gb250KHNlcXVlbmNlW2ldKSwgXCJtYXRoXCIpO1xuICAgIHZhciBoZWlnaHREZXB0aCA9IG1ldHJpY3MuaGVpZ2h0ICsgbWV0cmljcy5kZXB0aDsgLy8gU21hbGwgZGVsaW1pdGVycyBhcmUgc2NhbGVkIGRvd24gdmVyc2lvbnMgb2YgdGhlIHNhbWUgZm9udCwgc28gd2VcbiAgICAvLyBhY2NvdW50IGZvciB0aGUgc3R5bGUgY2hhbmdlIHNpemUuXG5cbiAgICBpZiAoc2VxdWVuY2VbaV0udHlwZSA9PT0gXCJzbWFsbFwiKSB7XG4gICAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nQmFzZVN0eWxlKHNlcXVlbmNlW2ldLnN0eWxlKTtcbiAgICAgIGhlaWdodERlcHRoICo9IG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgfSAvLyBDaGVjayBpZiB0aGUgZGVsaW1pdGVyIGF0IHRoaXMgc2l6ZSB3b3JrcyBmb3IgdGhlIGdpdmVuIGhlaWdodC5cblxuXG4gICAgaWYgKGhlaWdodERlcHRoID4gaGVpZ2h0KSB7XG4gICAgICByZXR1cm4gc2VxdWVuY2VbaV07XG4gICAgfVxuICB9IC8vIElmIHdlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UsIHJldHVybiB0aGUgbGFzdCBzZXF1ZW5jZSBlbGVtZW50LlxuXG5cbiAgcmV0dXJuIHNlcXVlbmNlW3NlcXVlbmNlLmxlbmd0aCAtIDFdO1xufTtcbi8qKlxuICogTWFrZSBhIGRlbGltaXRlciBvZiBhIGdpdmVuIGhlaWdodCtkZXB0aCwgd2l0aCBvcHRpb25hbCBjZW50ZXJpbmcuIEhlcmUsIHdlXG4gKiB0cmF2ZXJzZSB0aGUgc2VxdWVuY2VzLCBhbmQgY3JlYXRlIGEgZGVsaW1pdGVyIHRoYXQgdGhlIHNlcXVlbmNlIHRlbGxzIHVzIHRvLlxuICovXG5cblxudmFyIGRlbGltaXRlcl9tYWtlQ3VzdG9tU2l6ZWREZWxpbSA9IGZ1bmN0aW9uIG1ha2VDdXN0b21TaXplZERlbGltKGRlbGltLCBoZWlnaHQsIGNlbnRlciwgb3B0aW9ucywgbW9kZSwgY2xhc3Nlcykge1xuICBpZiAoZGVsaW0gPT09IFwiPFwiIHx8IGRlbGltID09PSBcIlxcXFxsdFwiIHx8IGRlbGltID09PSBcIlxcdTI3RThcIikge1xuICAgIGRlbGltID0gXCJcXFxcbGFuZ2xlXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiPlwiIHx8IGRlbGltID09PSBcIlxcXFxndFwiIHx8IGRlbGltID09PSBcIlxcdTI3RTlcIikge1xuICAgIGRlbGltID0gXCJcXFxccmFuZ2xlXCI7XG4gIH0gLy8gRGVjaWRlIHdoYXQgc2VxdWVuY2UgdG8gdXNlXG5cblxuICB2YXIgc2VxdWVuY2U7XG5cbiAgaWYgKHV0aWxzLmNvbnRhaW5zKHN0YWNrTmV2ZXJEZWxpbWl0ZXJzLCBkZWxpbSkpIHtcbiAgICBzZXF1ZW5jZSA9IHN0YWNrTmV2ZXJEZWxpbWl0ZXJTZXF1ZW5jZTtcbiAgfSBlbHNlIGlmICh1dGlscy5jb250YWlucyhzdGFja0xhcmdlRGVsaW1pdGVycywgZGVsaW0pKSB7XG4gICAgc2VxdWVuY2UgPSBzdGFja0xhcmdlRGVsaW1pdGVyU2VxdWVuY2U7XG4gIH0gZWxzZSB7XG4gICAgc2VxdWVuY2UgPSBzdGFja0Fsd2F5c0RlbGltaXRlclNlcXVlbmNlO1xuICB9IC8vIExvb2sgdGhyb3VnaCB0aGUgc2VxdWVuY2VcblxuXG4gIHZhciBkZWxpbVR5cGUgPSB0cmF2ZXJzZVNlcXVlbmNlKGRlbGltLCBoZWlnaHQsIHNlcXVlbmNlLCBvcHRpb25zKTsgLy8gR2V0IHRoZSBkZWxpbWl0ZXIgZnJvbSBmb250IGdseXBocy5cbiAgLy8gRGVwZW5kaW5nIG9uIHRoZSBzZXF1ZW5jZSBlbGVtZW50IHdlIGRlY2lkZWQgb24sIGNhbGwgdGhlXG4gIC8vIGFwcHJvcHJpYXRlIGZ1bmN0aW9uLlxuXG4gIGlmIChkZWxpbVR5cGUudHlwZSA9PT0gXCJzbWFsbFwiKSB7XG4gICAgcmV0dXJuIGRlbGltaXRlcl9tYWtlU21hbGxEZWxpbShkZWxpbSwgZGVsaW1UeXBlLnN0eWxlLCBjZW50ZXIsIG9wdGlvbnMsIG1vZGUsIGNsYXNzZXMpO1xuICB9IGVsc2UgaWYgKGRlbGltVHlwZS50eXBlID09PSBcImxhcmdlXCIpIHtcbiAgICByZXR1cm4gZGVsaW1pdGVyX21ha2VMYXJnZURlbGltKGRlbGltLCBkZWxpbVR5cGUuc2l6ZSwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbiAgfSBlbHNlXG4gICAgLyogaWYgKGRlbGltVHlwZS50eXBlID09PSBcInN0YWNrXCIpICovXG4gICAge1xuICAgICAgcmV0dXJuIGRlbGltaXRlcl9tYWtlU3RhY2tlZERlbGltKGRlbGltLCBoZWlnaHQsIGNlbnRlciwgb3B0aW9ucywgbW9kZSwgY2xhc3Nlcyk7XG4gICAgfVxufTtcbi8qKlxuICogTWFrZSBhIGRlbGltaXRlciBmb3IgdXNlIHdpdGggYFxcbGVmdGAgYW5kIGBcXHJpZ2h0YCwgZ2l2ZW4gYSBoZWlnaHQgYW5kIGRlcHRoXG4gKiBvZiBhbiBleHByZXNzaW9uIHRoYXQgdGhlIGRlbGltaXRlcnMgc3Vycm91bmQuXG4gKi9cblxuXG52YXIgbWFrZUxlZnRSaWdodERlbGltID0gZnVuY3Rpb24gbWFrZUxlZnRSaWdodERlbGltKGRlbGltLCBoZWlnaHQsIGRlcHRoLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKSB7XG4gIC8vIFdlIGFsd2F5cyBjZW50ZXIgXFxsZWZ0L1xccmlnaHQgZGVsaW1pdGVycywgc28gdGhlIGF4aXMgaXMgYWx3YXlzIHNoaWZ0ZWRcbiAgdmFyIGF4aXNIZWlnaHQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCAqIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7IC8vIFRha2VuIGZyb20gVGVYIHNvdXJjZSwgdGV4LndlYiwgZnVuY3Rpb24gbWFrZV9sZWZ0X3JpZ2h0XG5cbiAgdmFyIGRlbGltaXRlckZhY3RvciA9IDkwMTtcbiAgdmFyIGRlbGltaXRlckV4dGVuZCA9IDUuMCAvIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5wdFBlckVtO1xuICB2YXIgbWF4RGlzdEZyb21BeGlzID0gTWF0aC5tYXgoaGVpZ2h0IC0gYXhpc0hlaWdodCwgZGVwdGggKyBheGlzSGVpZ2h0KTtcbiAgdmFyIHRvdGFsSGVpZ2h0ID0gTWF0aC5tYXgoIC8vIEluIHJlYWwgVGVYLCBjYWxjdWxhdGlvbnMgYXJlIGRvbmUgdXNpbmcgaW50ZWdyYWwgdmFsdWVzIHdoaWNoIGFyZVxuICAvLyA2NTUzNiBwZXIgcHQsIG9yIDY1NTM2MCBwZXIgZW0uIFNvLCB0aGUgZGl2aXNpb24gaGVyZSB0cnVuY2F0ZXMgaW5cbiAgLy8gVGVYIGJ1dCBkb2Vzbid0IGhlcmUsIHByb2R1Y2luZyBkaWZmZXJlbnQgcmVzdWx0cy4gSWYgd2Ugd2FudGVkIHRvXG4gIC8vIGV4YWN0bHkgbWF0Y2ggVGVYJ3MgY2FsY3VsYXRpb24sIHdlIGNvdWxkIGRvXG4gIC8vICAgTWF0aC5mbG9vcig2NTUzNjAgKiBtYXhEaXN0RnJvbUF4aXMgLyA1MDApICpcbiAgLy8gICAgZGVsaW1pdGVyRmFjdG9yIC8gNjU1MzYwXG4gIC8vIChUbyBzZWUgdGhlIGRpZmZlcmVuY2UsIGNvbXBhcmVcbiAgLy8gICAgeF57eF57XFxsZWZ0KFxccnVsZXswLjFlbX17MC42OGVtfVxccmlnaHQpfX1cbiAgLy8gaW4gVGVYIGFuZCBLYVRlWClcbiAgbWF4RGlzdEZyb21BeGlzIC8gNTAwICogZGVsaW1pdGVyRmFjdG9yLCAyICogbWF4RGlzdEZyb21BeGlzIC0gZGVsaW1pdGVyRXh0ZW5kKTsgLy8gRmluYWxseSwgd2UgZGVmZXIgdG8gYG1ha2VDdXN0b21TaXplZERlbGltYCB3aXRoIG91ciBjYWxjdWxhdGVkIHRvdGFsXG4gIC8vIGhlaWdodFxuXG4gIHJldHVybiBkZWxpbWl0ZXJfbWFrZUN1c3RvbVNpemVkRGVsaW0oZGVsaW0sIHRvdGFsSGVpZ2h0LCB0cnVlLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGRlbGltaXRlciA9ICh7XG4gIHNxcnRJbWFnZTogbWFrZVNxcnRJbWFnZSxcbiAgc2l6ZWREZWxpbTogZGVsaW1pdGVyX21ha2VTaXplZERlbGltLFxuICBjdXN0b21TaXplZERlbGltOiBkZWxpbWl0ZXJfbWFrZUN1c3RvbVNpemVkRGVsaW0sXG4gIGxlZnRSaWdodERlbGltOiBtYWtlTGVmdFJpZ2h0RGVsaW1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2RlbGltc2l6aW5nLmpzXG5cblxuXG5cblxuXG5cblxuXG4vLyBFeHRyYSBkYXRhIG5lZWRlZCBmb3IgdGhlIGRlbGltaXRlciBoYW5kbGVyIGRvd24gYmVsb3dcbnZhciBkZWxpbWl0ZXJTaXplcyA9IHtcbiAgXCJcXFxcYmlnbFwiOiB7XG4gICAgbWNsYXNzOiBcIm1vcGVuXCIsXG4gICAgc2l6ZTogMVxuICB9LFxuICBcIlxcXFxCaWdsXCI6IHtcbiAgICBtY2xhc3M6IFwibW9wZW5cIixcbiAgICBzaXplOiAyXG4gIH0sXG4gIFwiXFxcXGJpZ2dsXCI6IHtcbiAgICBtY2xhc3M6IFwibW9wZW5cIixcbiAgICBzaXplOiAzXG4gIH0sXG4gIFwiXFxcXEJpZ2dsXCI6IHtcbiAgICBtY2xhc3M6IFwibW9wZW5cIixcbiAgICBzaXplOiA0XG4gIH0sXG4gIFwiXFxcXGJpZ3JcIjoge1xuICAgIG1jbGFzczogXCJtY2xvc2VcIixcbiAgICBzaXplOiAxXG4gIH0sXG4gIFwiXFxcXEJpZ3JcIjoge1xuICAgIG1jbGFzczogXCJtY2xvc2VcIixcbiAgICBzaXplOiAyXG4gIH0sXG4gIFwiXFxcXGJpZ2dyXCI6IHtcbiAgICBtY2xhc3M6IFwibWNsb3NlXCIsXG4gICAgc2l6ZTogM1xuICB9LFxuICBcIlxcXFxCaWdnclwiOiB7XG4gICAgbWNsYXNzOiBcIm1jbG9zZVwiLFxuICAgIHNpemU6IDRcbiAgfSxcbiAgXCJcXFxcYmlnbVwiOiB7XG4gICAgbWNsYXNzOiBcIm1yZWxcIixcbiAgICBzaXplOiAxXG4gIH0sXG4gIFwiXFxcXEJpZ21cIjoge1xuICAgIG1jbGFzczogXCJtcmVsXCIsXG4gICAgc2l6ZTogMlxuICB9LFxuICBcIlxcXFxiaWdnbVwiOiB7XG4gICAgbWNsYXNzOiBcIm1yZWxcIixcbiAgICBzaXplOiAzXG4gIH0sXG4gIFwiXFxcXEJpZ2dtXCI6IHtcbiAgICBtY2xhc3M6IFwibXJlbFwiLFxuICAgIHNpemU6IDRcbiAgfSxcbiAgXCJcXFxcYmlnXCI6IHtcbiAgICBtY2xhc3M6IFwibW9yZFwiLFxuICAgIHNpemU6IDFcbiAgfSxcbiAgXCJcXFxcQmlnXCI6IHtcbiAgICBtY2xhc3M6IFwibW9yZFwiLFxuICAgIHNpemU6IDJcbiAgfSxcbiAgXCJcXFxcYmlnZ1wiOiB7XG4gICAgbWNsYXNzOiBcIm1vcmRcIixcbiAgICBzaXplOiAzXG4gIH0sXG4gIFwiXFxcXEJpZ2dcIjoge1xuICAgIG1jbGFzczogXCJtb3JkXCIsXG4gICAgc2l6ZTogNFxuICB9XG59O1xudmFyIGRlbGltaXRlcnMgPSBbXCIoXCIsIFwiXFxcXGxwYXJlblwiLCBcIilcIiwgXCJcXFxccnBhcmVuXCIsIFwiW1wiLCBcIlxcXFxsYnJhY2tcIiwgXCJdXCIsIFwiXFxcXHJicmFja1wiLCBcIlxcXFx7XCIsIFwiXFxcXGxicmFjZVwiLCBcIlxcXFx9XCIsIFwiXFxcXHJicmFjZVwiLCBcIlxcXFxsZmxvb3JcIiwgXCJcXFxccmZsb29yXCIsIFwiXFx1MjMwQVwiLCBcIlxcdTIzMEJcIiwgXCJcXFxcbGNlaWxcIiwgXCJcXFxccmNlaWxcIiwgXCJcXHUyMzA4XCIsIFwiXFx1MjMwOVwiLCBcIjxcIiwgXCI+XCIsIFwiXFxcXGxhbmdsZVwiLCBcIlxcdTI3RThcIiwgXCJcXFxccmFuZ2xlXCIsIFwiXFx1MjdFOVwiLCBcIlxcXFxsdFwiLCBcIlxcXFxndFwiLCBcIlxcXFxsdmVydFwiLCBcIlxcXFxydmVydFwiLCBcIlxcXFxsVmVydFwiLCBcIlxcXFxyVmVydFwiLCBcIlxcXFxsZ3JvdXBcIiwgXCJcXFxccmdyb3VwXCIsIFwiXFx1MjdFRVwiLCBcIlxcdTI3RUZcIiwgXCJcXFxcbG1vdXN0YWNoZVwiLCBcIlxcXFxybW91c3RhY2hlXCIsIFwiXFx1MjNCMFwiLCBcIlxcdTIzQjFcIiwgXCIvXCIsIFwiXFxcXGJhY2tzbGFzaFwiLCBcInxcIiwgXCJcXFxcdmVydFwiLCBcIlxcXFx8XCIsIFwiXFxcXFZlcnRcIiwgXCJcXFxcdXBhcnJvd1wiLCBcIlxcXFxVcGFycm93XCIsIFwiXFxcXGRvd25hcnJvd1wiLCBcIlxcXFxEb3duYXJyb3dcIiwgXCJcXFxcdXBkb3duYXJyb3dcIiwgXCJcXFxcVXBkb3duYXJyb3dcIiwgXCIuXCJdO1xuXG4vLyBEZWxpbWl0ZXIgZnVuY3Rpb25zXG5mdW5jdGlvbiBjaGVja0RlbGltaXRlcihkZWxpbSwgY29udGV4dCkge1xuICB2YXIgc3ltRGVsaW0gPSBjaGVja1N5bWJvbE5vZGVUeXBlKGRlbGltKTtcblxuICBpZiAoc3ltRGVsaW0gJiYgdXRpbHMuY29udGFpbnMoZGVsaW1pdGVycywgc3ltRGVsaW0udGV4dCkpIHtcbiAgICByZXR1cm4gc3ltRGVsaW07XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCBkZWxpbWl0ZXI6ICdcIiArIChzeW1EZWxpbSA/IHN5bURlbGltLnRleHQgOiBKU09OLnN0cmluZ2lmeShkZWxpbSkpICsgXCInIGFmdGVyICdcIiArIGNvbnRleHQuZnVuY05hbWUgKyBcIidcIiwgZGVsaW0pO1xuICB9XG59XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJkZWxpbXNpemluZ1wiLFxuICBuYW1lczogW1wiXFxcXGJpZ2xcIiwgXCJcXFxcQmlnbFwiLCBcIlxcXFxiaWdnbFwiLCBcIlxcXFxCaWdnbFwiLCBcIlxcXFxiaWdyXCIsIFwiXFxcXEJpZ3JcIiwgXCJcXFxcYmlnZ3JcIiwgXCJcXFxcQmlnZ3JcIiwgXCJcXFxcYmlnbVwiLCBcIlxcXFxCaWdtXCIsIFwiXFxcXGJpZ2dtXCIsIFwiXFxcXEJpZ2dtXCIsIFwiXFxcXGJpZ1wiLCBcIlxcXFxCaWdcIiwgXCJcXFxcYmlnZ1wiLCBcIlxcXFxCaWdnXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gICAgdmFyIGRlbGltID0gY2hlY2tEZWxpbWl0ZXIoYXJnc1swXSwgY29udGV4dCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZGVsaW1zaXppbmdcIixcbiAgICAgIG1vZGU6IGNvbnRleHQucGFyc2VyLm1vZGUsXG4gICAgICBzaXplOiBkZWxpbWl0ZXJTaXplc1tjb250ZXh0LmZ1bmNOYW1lXS5zaXplLFxuICAgICAgbWNsYXNzOiBkZWxpbWl0ZXJTaXplc1tjb250ZXh0LmZ1bmNOYW1lXS5tY2xhc3MsXG4gICAgICBkZWxpbTogZGVsaW0udGV4dFxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIGlmIChncm91cC5kZWxpbSA9PT0gXCIuXCIpIHtcbiAgICAgIC8vIEVtcHR5IGRlbGltaXRlcnMgc3RpbGwgY291bnQgYXMgZWxlbWVudHMsIGV2ZW4gdGhvdWdoIHRoZXkgZG9uJ3RcbiAgICAgIC8vIHNob3cgYW55dGhpbmcuXG4gICAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW2dyb3VwLm1jbGFzc10pO1xuICAgIH0gLy8gVXNlIGRlbGltaXRlci5zaXplZERlbGltIHRvIGdlbmVyYXRlIHRoZSBkZWxpbWl0ZXIuXG5cblxuICAgIHJldHVybiBkZWxpbWl0ZXIuc2l6ZWREZWxpbShncm91cC5kZWxpbSwgZ3JvdXAuc2l6ZSwgb3B0aW9ucywgZ3JvdXAubW9kZSwgW2dyb3VwLm1jbGFzc10pO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gW107XG5cbiAgICBpZiAoZ3JvdXAuZGVsaW0gIT09IFwiLlwiKSB7XG4gICAgICBjaGlsZHJlbi5wdXNoKGJ1aWxkTWF0aE1MX21ha2VUZXh0KGdyb3VwLmRlbGltLCBncm91cC5tb2RlKSk7XG4gICAgfVxuXG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIGNoaWxkcmVuKTtcblxuICAgIGlmIChncm91cC5tY2xhc3MgPT09IFwibW9wZW5cIiB8fCBncm91cC5tY2xhc3MgPT09IFwibWNsb3NlXCIpIHtcbiAgICAgIC8vIE9ubHkgc29tZSBvZiB0aGUgZGVsaW1zaXppbmcgZnVuY3Rpb25zIGFjdCBhcyBmZW5jZXMsIGFuZCB0aGV5XG4gICAgICAvLyByZXR1cm4gXCJtb3BlblwiIG9yIFwibWNsb3NlXCIgbWNsYXNzLlxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJmZW5jZVwiLCBcInRydWVcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEV4cGxpY2l0bHkgZGlzYWJsZSBmZW5jaW5nIGlmIGl0J3Mgbm90IGEgZmVuY2UsIHRvIG92ZXJyaWRlIHRoZVxuICAgICAgLy8gZGVmYXVsdHMuXG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImZlbmNlXCIsIFwiZmFsc2VcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBhc3NlcnRQYXJzZWQoZ3JvdXApIHtcbiAgaWYgKCFncm91cC5ib2R5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQnVnOiBUaGUgbGVmdHJpZ2h0IFBhcnNlTm9kZSB3YXNuJ3QgZnVsbHkgcGFyc2VkLlwiKTtcbiAgfVxufVxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibGVmdHJpZ2h0LXJpZ2h0XCIsXG4gIG5hbWVzOiBbXCJcXFxccmlnaHRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKGNvbnRleHQsIGFyZ3MpIHtcbiAgICAvLyBcXGxlZnQgY2FzZSBiZWxvdyB0cmlnZ2VycyBwYXJzaW5nIG9mIFxccmlnaHQgaW5cbiAgICAvLyAgIGBjb25zdCByaWdodCA9IHBhcnNlci5wYXJzZUZ1bmN0aW9uKCk7YFxuICAgIC8vIHVzZXMgdGhpcyByZXR1cm4gdmFsdWUuXG4gICAgdmFyIGNvbG9yID0gY29udGV4dC5wYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5nZXQoXCJcXFxcY3VycmVudEBjb2xvclwiKTtcblxuICAgIGlmIChjb2xvciAmJiB0eXBlb2YgY29sb3IgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlxcXFxjdXJyZW50QGNvbG9yIHNldCB0byBub24tc3RyaW5nIGluIFxcXFxyaWdodFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJsZWZ0cmlnaHQtcmlnaHRcIixcbiAgICAgIG1vZGU6IGNvbnRleHQucGFyc2VyLm1vZGUsXG4gICAgICBkZWxpbTogY2hlY2tEZWxpbWl0ZXIoYXJnc1swXSwgY29udGV4dCkudGV4dCxcbiAgICAgIGNvbG9yOiBjb2xvciAvLyB1bmRlZmluZWQgaWYgbm90IHNldCB2aWEgXFxjb2xvclxuXG4gICAgfTtcbiAgfVxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibGVmdHJpZ2h0XCIsXG4gIG5hbWVzOiBbXCJcXFxcbGVmdFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoY29udGV4dCwgYXJncykge1xuICAgIHZhciBkZWxpbSA9IGNoZWNrRGVsaW1pdGVyKGFyZ3NbMF0sIGNvbnRleHQpO1xuICAgIHZhciBwYXJzZXIgPSBjb250ZXh0LnBhcnNlcjsgLy8gUGFyc2Ugb3V0IHRoZSBpbXBsaWNpdCBib2R5XG5cbiAgICArK3BhcnNlci5sZWZ0cmlnaHREZXB0aDsgLy8gcGFyc2VFeHByZXNzaW9uIHN0b3BzIGJlZm9yZSAnXFxcXHJpZ2h0J1xuXG4gICAgdmFyIGJvZHkgPSBwYXJzZXIucGFyc2VFeHByZXNzaW9uKGZhbHNlKTtcbiAgICAtLXBhcnNlci5sZWZ0cmlnaHREZXB0aDsgLy8gQ2hlY2sgdGhlIG5leHQgdG9rZW5cblxuICAgIHBhcnNlci5leHBlY3QoXCJcXFxccmlnaHRcIiwgZmFsc2UpO1xuICAgIHZhciByaWdodCA9IGFzc2VydE5vZGVUeXBlKHBhcnNlci5wYXJzZUZ1bmN0aW9uKCksIFwibGVmdHJpZ2h0LXJpZ2h0XCIpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImxlZnRyaWdodFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5OiBib2R5LFxuICAgICAgbGVmdDogZGVsaW0udGV4dCxcbiAgICAgIHJpZ2h0OiByaWdodC5kZWxpbSxcbiAgICAgIHJpZ2h0Q29sb3I6IHJpZ2h0LmNvbG9yXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgYXNzZXJ0UGFyc2VkKGdyb3VwKTsgLy8gQnVpbGQgdGhlIGlubmVyIGV4cHJlc3Npb25cblxuICAgIHZhciBpbm5lciA9IGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucywgdHJ1ZSwgW1wibW9wZW5cIiwgXCJtY2xvc2VcIl0pO1xuICAgIHZhciBpbm5lckhlaWdodCA9IDA7XG4gICAgdmFyIGlubmVyRGVwdGggPSAwO1xuICAgIHZhciBoYWRNaWRkbGUgPSBmYWxzZTsgLy8gQ2FsY3VsYXRlIGl0cyBoZWlnaHQgYW5kIGRlcHRoXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlubmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBQcm9wZXJ0eSBgaXNNaWRkbGVgIG5vdCBkZWZpbmVkIG9uIGBzcGFuYC4gU2VlIGNvbW1lbnQgaW5cbiAgICAgIC8vIFwibWlkZGxlXCIncyBodG1sQnVpbGRlci5cbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIGlmIChpbm5lcltpXS5pc01pZGRsZSkge1xuICAgICAgICBoYWRNaWRkbGUgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5uZXJIZWlnaHQgPSBNYXRoLm1heChpbm5lcltpXS5oZWlnaHQsIGlubmVySGVpZ2h0KTtcbiAgICAgICAgaW5uZXJEZXB0aCA9IE1hdGgubWF4KGlubmVyW2ldLmRlcHRoLCBpbm5lckRlcHRoKTtcbiAgICAgIH1cbiAgICB9IC8vIFRoZSBzaXplIG9mIGRlbGltaXRlcnMgaXMgdGhlIHNhbWUsIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBzdHlsZSB3ZSBhcmVcbiAgICAvLyBpbi4gVGh1cywgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiBkZWxpbWl0ZXIgd2UgbmVlZCBhcm91bmRcbiAgICAvLyBhIGdyb3VwLCB3ZSBzY2FsZSBkb3duIHRoZSBpbm5lciBzaXplIGJhc2VkIG9uIHRoZSBzaXplLlxuXG5cbiAgICBpbm5lckhlaWdodCAqPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICAgIGlubmVyRGVwdGggKj0gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgICB2YXIgbGVmdERlbGltO1xuXG4gICAgaWYgKGdyb3VwLmxlZnQgPT09IFwiLlwiKSB7XG4gICAgICAvLyBFbXB0eSBkZWxpbWl0ZXJzIGluIFxcbGVmdCBhbmQgXFxyaWdodCBtYWtlIG51bGwgZGVsaW1pdGVyIHNwYWNlcy5cbiAgICAgIGxlZnREZWxpbSA9IG1ha2VOdWxsRGVsaW1pdGVyKG9wdGlvbnMsIFtcIm1vcGVuXCJdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlLCB1c2UgbGVmdFJpZ2h0RGVsaW0gdG8gZ2VuZXJhdGUgdGhlIGNvcnJlY3Qgc2l6ZWRcbiAgICAgIC8vIGRlbGltaXRlci5cbiAgICAgIGxlZnREZWxpbSA9IGRlbGltaXRlci5sZWZ0UmlnaHREZWxpbShncm91cC5sZWZ0LCBpbm5lckhlaWdodCwgaW5uZXJEZXB0aCwgb3B0aW9ucywgZ3JvdXAubW9kZSwgW1wibW9wZW5cIl0pO1xuICAgIH0gLy8gQWRkIGl0IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGV4cHJlc3Npb25cblxuXG4gICAgaW5uZXIudW5zaGlmdChsZWZ0RGVsaW0pOyAvLyBIYW5kbGUgbWlkZGxlIGRlbGltaXRlcnNcblxuICAgIGlmIChoYWRNaWRkbGUpIHtcbiAgICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBpbm5lci5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdmFyIG1pZGRsZURlbGltID0gaW5uZXJbX2ldOyAvLyBQcm9wZXJ0eSBgaXNNaWRkbGVgIG5vdCBkZWZpbmVkIG9uIGBzcGFuYC4gU2VlIGNvbW1lbnQgaW5cbiAgICAgICAgLy8gXCJtaWRkbGVcIidzIGh0bWxCdWlsZGVyLlxuICAgICAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgICAgdmFyIGlzTWlkZGxlID0gbWlkZGxlRGVsaW0uaXNNaWRkbGU7XG5cbiAgICAgICAgaWYgKGlzTWlkZGxlKSB7XG4gICAgICAgICAgLy8gQXBwbHkgdGhlIG9wdGlvbnMgdGhhdCB3ZXJlIGFjdGl2ZSB3aGVuIFxcbWlkZGxlIHdhcyBjYWxsZWRcbiAgICAgICAgICBpbm5lcltfaV0gPSBkZWxpbWl0ZXIubGVmdFJpZ2h0RGVsaW0oaXNNaWRkbGUuZGVsaW0sIGlubmVySGVpZ2h0LCBpbm5lckRlcHRoLCBpc01pZGRsZS5vcHRpb25zLCBncm91cC5tb2RlLCBbXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmlnaHREZWxpbTsgLy8gU2FtZSBmb3IgdGhlIHJpZ2h0IGRlbGltaXRlciwgYnV0IHVzaW5nIGNvbG9yIHNwZWNpZmllZCBieSBcXGNvbG9yXG5cbiAgICBpZiAoZ3JvdXAucmlnaHQgPT09IFwiLlwiKSB7XG4gICAgICByaWdodERlbGltID0gbWFrZU51bGxEZWxpbWl0ZXIob3B0aW9ucywgW1wibWNsb3NlXCJdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGNvbG9yT3B0aW9ucyA9IGdyb3VwLnJpZ2h0Q29sb3IgPyBvcHRpb25zLndpdGhDb2xvcihncm91cC5yaWdodENvbG9yKSA6IG9wdGlvbnM7XG4gICAgICByaWdodERlbGltID0gZGVsaW1pdGVyLmxlZnRSaWdodERlbGltKGdyb3VwLnJpZ2h0LCBpbm5lckhlaWdodCwgaW5uZXJEZXB0aCwgY29sb3JPcHRpb25zLCBncm91cC5tb2RlLCBbXCJtY2xvc2VcIl0pO1xuICAgIH0gLy8gQWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGV4cHJlc3Npb24uXG5cblxuICAgIGlubmVyLnB1c2gocmlnaHREZWxpbSk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1pbm5lclwiXSwgaW5uZXIsIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgYXNzZXJ0UGFyc2VkKGdyb3VwKTtcbiAgICB2YXIgaW5uZXIgPSBidWlsZE1hdGhNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoZ3JvdXAubGVmdCAhPT0gXCIuXCIpIHtcbiAgICAgIHZhciBsZWZ0Tm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW2J1aWxkTWF0aE1MX21ha2VUZXh0KGdyb3VwLmxlZnQsIGdyb3VwLm1vZGUpXSk7XG4gICAgICBsZWZ0Tm9kZS5zZXRBdHRyaWJ1dGUoXCJmZW5jZVwiLCBcInRydWVcIik7XG4gICAgICBpbm5lci51bnNoaWZ0KGxlZnROb2RlKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JvdXAucmlnaHQgIT09IFwiLlwiKSB7XG4gICAgICB2YXIgcmlnaHROb2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbYnVpbGRNYXRoTUxfbWFrZVRleHQoZ3JvdXAucmlnaHQsIGdyb3VwLm1vZGUpXSk7XG4gICAgICByaWdodE5vZGUuc2V0QXR0cmlidXRlKFwiZmVuY2VcIiwgXCJ0cnVlXCIpO1xuXG4gICAgICBpZiAoZ3JvdXAucmlnaHRDb2xvcikge1xuICAgICAgICByaWdodE5vZGUuc2V0QXR0cmlidXRlKFwibWF0aGNvbG9yXCIsIGdyb3VwLnJpZ2h0Q29sb3IpO1xuICAgICAgfVxuXG4gICAgICBpbm5lci5wdXNoKHJpZ2h0Tm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1aWxkTWF0aE1MX21ha2VSb3coaW5uZXIpO1xuICB9XG59KTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJtaWRkbGVcIixcbiAgbmFtZXM6IFtcIlxcXFxtaWRkbGVcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKGNvbnRleHQsIGFyZ3MpIHtcbiAgICB2YXIgZGVsaW0gPSBjaGVja0RlbGltaXRlcihhcmdzWzBdLCBjb250ZXh0KTtcblxuICAgIGlmICghY29udGV4dC5wYXJzZXIubGVmdHJpZ2h0RGVwdGgpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlxcXFxtaWRkbGUgd2l0aG91dCBwcmVjZWRpbmcgXFxcXGxlZnRcIiwgZGVsaW0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm1pZGRsZVwiLFxuICAgICAgbW9kZTogY29udGV4dC5wYXJzZXIubW9kZSxcbiAgICAgIGRlbGltOiBkZWxpbS50ZXh0XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG1pZGRsZURlbGltO1xuXG4gICAgaWYgKGdyb3VwLmRlbGltID09PSBcIi5cIikge1xuICAgICAgbWlkZGxlRGVsaW0gPSBtYWtlTnVsbERlbGltaXRlcihvcHRpb25zLCBbXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1pZGRsZURlbGltID0gZGVsaW1pdGVyLnNpemVkRGVsaW0oZ3JvdXAuZGVsaW0sIDEsIG9wdGlvbnMsIGdyb3VwLm1vZGUsIFtdKTtcbiAgICAgIHZhciBpc01pZGRsZSA9IHtcbiAgICAgICAgZGVsaW06IGdyb3VwLmRlbGltLFxuICAgICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgICB9OyAvLyBQcm9wZXJ0eSBgaXNNaWRkbGVgIG5vdCBkZWZpbmVkIG9uIGBzcGFuYC4gSXQgaXMgb25seSB1c2VkIGluXG4gICAgICAvLyB0aGlzIGZpbGUgYWJvdmUuXG4gICAgICAvLyBUT0RPOiBGaXggdGhpcyB2aW9sYXRpb24gb2YgdGhlIGBzcGFuYCB0eXBlIGFuZCBwb3NzaWJseSByZW5hbWVcbiAgICAgIC8vIHRoaW5ncyBzaW5jZSBgaXNNaWRkbGVgIHNvdW5kcyBsaWtlIGEgYm9vbGVhbiwgYnV0IGlzIGEgc3RydWN0LlxuICAgICAgLy8gJEZsb3dGaXhNZVxuXG4gICAgICBtaWRkbGVEZWxpbS5pc01pZGRsZSA9IGlzTWlkZGxlO1xuICAgIH1cblxuICAgIHJldHVybiBtaWRkbGVEZWxpbTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIEEgRmlyZWZveCBcXG1pZGRsZSB3aWxsIHN0cmVjaCBhIGNoYXJhY3RlciB2ZXJ0aWNhbGx5IG9ubHkgaWYgaXRcbiAgICAvLyBpcyBpbiB0aGUgZmVuY2UgcGFydCBvZiB0aGUgb3BlcmF0b3IgZGljdGlvbmFyeSBhdDpcbiAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvTWF0aE1MMy9hcHBlbmRpeGMuaHRtbC5cbiAgICAvLyBTbyB3ZSBuZWVkIHRvIGF2b2lkIFUrMjIyMyBhbmQgdXNlIHBsYWluIFwifFwiIGluc3RlYWQuXG4gICAgdmFyIHRleHROb2RlID0gZ3JvdXAuZGVsaW0gPT09IFwiXFxcXHZlcnRcIiB8fCBncm91cC5kZWxpbSA9PT0gXCJ8XCIgPyBidWlsZE1hdGhNTF9tYWtlVGV4dChcInxcIiwgXCJ0ZXh0XCIpIDogYnVpbGRNYXRoTUxfbWFrZVRleHQoZ3JvdXAuZGVsaW0sIGdyb3VwLm1vZGUpO1xuICAgIHZhciBtaWRkbGVOb2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbdGV4dE5vZGVdKTtcbiAgICBtaWRkbGVOb2RlLnNldEF0dHJpYnV0ZShcImZlbmNlXCIsIFwidHJ1ZVwiKTsgLy8gTWF0aE1MIGdpdmVzIDUvMThlbSBzcGFjaW5nIHRvIGVhY2ggPG1vPiBlbGVtZW50LlxuICAgIC8vIFxcbWlkZGxlIHNob3VsZCBnZXQgZGVsaW1pdGVyIHNwYWNpbmcgaW5zdGVhZC5cblxuICAgIG1pZGRsZU5vZGUuc2V0QXR0cmlidXRlKFwibHNwYWNlXCIsIFwiMC4wNWVtXCIpO1xuICAgIG1pZGRsZU5vZGUuc2V0QXR0cmlidXRlKFwicnNwYWNlXCIsIFwiMC4wNWVtXCIpO1xuICAgIHJldHVybiBtaWRkbGVOb2RlO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9lbmNsb3NlLmpzXG5cblxuXG5cblxuXG5cblxuXG52YXIgZW5jbG9zZV9odG1sQnVpbGRlciA9IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gIC8vIFxcY2FuY2VsLCBcXGJjYW5jZWwsIFxceGNhbmNlbCwgXFxzb3V0LCBcXGZib3gsIFxcY29sb3Jib3gsIFxcZmNvbG9yYm94XG4gIC8vIFNvbWUgZ3JvdXBzIGNhbiByZXR1cm4gZG9jdW1lbnQgZnJhZ21lbnRzLiAgSGFuZGxlIHRob3NlIGJ5IHdyYXBwaW5nXG4gIC8vIHRoZW0gaW4gYSBzcGFuLlxuICB2YXIgaW5uZXIgPSBidWlsZENvbW1vbi53cmFwRnJhZ21lbnQoYnVpbGRIVE1MX2J1aWxkR3JvdXAoZ3JvdXAuYm9keSwgb3B0aW9ucyksIG9wdGlvbnMpO1xuICB2YXIgbGFiZWwgPSBncm91cC5sYWJlbC5zdWJzdHIoMSk7XG4gIHZhciBzY2FsZSA9IG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gIHZhciBpbWc7XG4gIHZhciBpbWdTaGlmdCA9IDA7IC8vIEluIHRoZSBMYVRlWCBjYW5jZWwgcGFja2FnZSwgbGluZSBnZW9tZXRyeSBpcyBzbGlnaHRseSBkaWZmZXJlbnRcbiAgLy8gZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIHN1YmplY3QgaXMgd2lkZXIgdGhhbiBpdCBpcyB0YWxsLCBvciB2aWNlIHZlcnNhLlxuICAvLyBXZSBkb24ndCBrbm93IHRoZSB3aWR0aCBvZiBhIGdyb3VwLCBzbyBhcyBhIHByb3h5LCB3ZSB0ZXN0IGlmXG4gIC8vIHRoZSBzdWJqZWN0IGlzIGEgc2luZ2xlIGNoYXJhY3Rlci4gVGhpcyBjYXB0dXJlcyBtb3N0IG9mIHRoZVxuICAvLyBzdWJqZWN0cyB0aGF0IHNob3VsZCBnZXQgdGhlIFwidGFsbFwiIHRyZWF0bWVudC5cblxuICB2YXIgaXNTaW5nbGVDaGFyID0gdXRpbHMuaXNDaGFyYWN0ZXJCb3goZ3JvdXAuYm9keSk7XG5cbiAgaWYgKGxhYmVsID09PSBcInNvdXRcIikge1xuICAgIGltZyA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcInN0cmV0Y2h5XCIsIFwic291dFwiXSk7XG4gICAgaW1nLmhlaWdodCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcyAvIHNjYWxlO1xuICAgIGltZ1NoaWZ0ID0gLTAuNSAqIG9wdGlvbnMuZm9udE1ldHJpY3MoKS54SGVpZ2h0O1xuICB9IGVsc2Uge1xuICAgIC8vIEFkZCBob3Jpem9udGFsIHBhZGRpbmdcbiAgICBpZiAoL2NhbmNlbC8udGVzdChsYWJlbCkpIHtcbiAgICAgIGlmICghaXNTaW5nbGVDaGFyKSB7XG4gICAgICAgIGlubmVyLmNsYXNzZXMucHVzaChcImNhbmNlbC1wYWRcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlubmVyLmNsYXNzZXMucHVzaChcImJveHBhZFwiKTtcbiAgICB9IC8vIEFkZCB2ZXJ0aWNhbCBwYWRkaW5nXG5cblxuICAgIHZhciB2ZXJ0UGFkID0gMDtcbiAgICB2YXIgcnVsZVRoaWNrbmVzcyA9IDA7IC8vIHJlZjogY2FuY2VsIHBhY2thZ2U6IFxcYWR2YW5jZVxcdG90YWxoZWlnaHQyXFxwQCAlIFwiKzJcIlxuXG4gICAgaWYgKC9ib3gvLnRlc3QobGFiZWwpKSB7XG4gICAgICBydWxlVGhpY2tuZXNzID0gTWF0aC5tYXgob3B0aW9ucy5mb250TWV0cmljcygpLmZib3hydWxlLCAvLyBkZWZhdWx0XG4gICAgICBvcHRpb25zLm1pblJ1bGVUaGlja25lc3MgLy8gVXNlciBvdmVycmlkZS5cbiAgICAgICk7XG4gICAgICB2ZXJ0UGFkID0gb3B0aW9ucy5mb250TWV0cmljcygpLmZib3hzZXAgKyAobGFiZWwgPT09IFwiY29sb3Jib3hcIiA/IDAgOiBydWxlVGhpY2tuZXNzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmVydFBhZCA9IGlzU2luZ2xlQ2hhciA/IDAuMiA6IDA7XG4gICAgfVxuXG4gICAgaW1nID0gc3RyZXRjaHkuZW5jbG9zZVNwYW4oaW5uZXIsIGxhYmVsLCB2ZXJ0UGFkLCBvcHRpb25zKTtcblxuICAgIGlmICgvZmJveHxib3hlZHxmY29sb3Jib3gvLnRlc3QobGFiZWwpKSB7XG4gICAgICBpbWcuc3R5bGUuYm9yZGVyU3R5bGUgPSBcInNvbGlkXCI7XG4gICAgICBpbWcuc3R5bGUuYm9yZGVyV2lkdGggPSBydWxlVGhpY2tuZXNzICsgXCJlbVwiO1xuICAgIH1cblxuICAgIGltZ1NoaWZ0ID0gaW5uZXIuZGVwdGggKyB2ZXJ0UGFkO1xuXG4gICAgaWYgKGdyb3VwLmJhY2tncm91bmRDb2xvcikge1xuICAgICAgaW1nLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGdyb3VwLmJhY2tncm91bmRDb2xvcjtcblxuICAgICAgaWYgKGdyb3VwLmJvcmRlckNvbG9yKSB7XG4gICAgICAgIGltZy5zdHlsZS5ib3JkZXJDb2xvciA9IGdyb3VwLmJvcmRlckNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciB2bGlzdDtcblxuICBpZiAoZ3JvdXAuYmFja2dyb3VuZENvbG9yKSB7XG4gICAgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgY2hpbGRyZW46IFsvLyBQdXQgdGhlIGNvbG9yIGJhY2tncm91bmQgYmVoaW5kIGlubmVyO1xuICAgICAge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogaW1nLFxuICAgICAgICBzaGlmdDogaW1nU2hpZnRcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGlubmVyLFxuICAgICAgICBzaGlmdDogMFxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICBjaGlsZHJlbjogWy8vIFdyaXRlIHRoZSBcXGNhbmNlbCBzdHJva2Ugb24gdG9wIG9mIGlubmVyLlxuICAgICAge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogaW5uZXIsXG4gICAgICAgIHNoaWZ0OiAwXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBpbWcsXG4gICAgICAgIHNoaWZ0OiBpbWdTaGlmdCxcbiAgICAgICAgd3JhcHBlckNsYXNzZXM6IC9jYW5jZWwvLnRlc3QobGFiZWwpID8gW1wic3ZnLWFsaWduXCJdIDogW11cbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH1cblxuICBpZiAoL2NhbmNlbC8udGVzdChsYWJlbCkpIHtcbiAgICAvLyBUaGUgY2FuY2VsIHBhY2thZ2UgZG9jdW1lbnRhdGlvbiBzYXlzIHRoYXQgY2FuY2VsIGxpbmVzIGFkZCB0aGVpciBoZWlnaHRcbiAgICAvLyB0byB0aGUgZXhwcmVzc2lvbiwgYnV0IHRlc3RzIHNob3cgdGhhdCBpc24ndCBob3cgaXQgYWN0dWFsbHkgd29ya3MuXG4gICAgdmxpc3QuaGVpZ2h0ID0gaW5uZXIuaGVpZ2h0O1xuICAgIHZsaXN0LmRlcHRoID0gaW5uZXIuZGVwdGg7XG4gIH1cblxuICBpZiAoL2NhbmNlbC8udGVzdChsYWJlbCkgJiYgIWlzU2luZ2xlQ2hhcikge1xuICAgIC8vIGNhbmNlbCBkb2VzIG5vdCBjcmVhdGUgaG9yaXogc3BhY2UgZm9yIGl0cyBsaW5lIGV4dGVuc2lvbi5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcImNhbmNlbC1sYXBcIl0sIFt2bGlzdF0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCJdLCBbdmxpc3RdLCBvcHRpb25zKTtcbiAgfVxufTtcblxudmFyIGVuY2xvc2VfbWF0aG1sQnVpbGRlciA9IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIGZib3hzZXAgPSAwO1xuICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKGdyb3VwLmxhYmVsLmluZGV4T2YoXCJjb2xvcmJveFwiKSA+IC0xID8gXCJtcGFkZGVkXCIgOiBcIm1lbmNsb3NlXCIsIFtidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpXSk7XG5cbiAgc3dpdGNoIChncm91cC5sYWJlbCkge1xuICAgIGNhc2UgXCJcXFxcY2FuY2VsXCI6XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm5vdGF0aW9uXCIsIFwidXBkaWFnb25hbHN0cmlrZVwiKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIlxcXFxiY2FuY2VsXCI6XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm5vdGF0aW9uXCIsIFwiZG93bmRpYWdvbmFsc3RyaWtlXCIpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiXFxcXHNvdXRcIjpcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibm90YXRpb25cIiwgXCJob3Jpem9udGFsc3RyaWtlXCIpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiXFxcXGZib3hcIjpcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibm90YXRpb25cIiwgXCJib3hcIik7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJcXFxcZmNvbG9yYm94XCI6XG4gICAgY2FzZSBcIlxcXFxjb2xvcmJveFwiOlxuICAgICAgLy8gPG1lbmNsb3NlPiBkb2Vzbid0IGhhdmUgYSBnb29kIG5vdGF0aW9uIG9wdGlvbi4gU28gdXNlIDxtcGFkZGVkPlxuICAgICAgLy8gaW5zdGVhZC4gU2V0IHNvbWUgYXR0cmlidXRlcyB0aGF0IGNvbWUgaW5jbHVkZWQgd2l0aCA8bWVuY2xvc2U+LlxuICAgICAgZmJveHNlcCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5mYm94c2VwICogb3B0aW9ucy5mb250TWV0cmljcygpLnB0UGVyRW07XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFwiK1wiICsgMiAqIGZib3hzZXAgKyBcInB0XCIpO1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgXCIrXCIgKyAyICogZmJveHNlcCArIFwicHRcIik7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImxzcGFjZVwiLCBmYm94c2VwICsgXCJwdFwiKTsgLy9cblxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ2b2Zmc2V0XCIsIGZib3hzZXAgKyBcInB0XCIpO1xuXG4gICAgICBpZiAoZ3JvdXAubGFiZWwgPT09IFwiXFxcXGZjb2xvcmJveFwiKSB7XG4gICAgICAgIHZhciB0aGsgPSBNYXRoLm1heChvcHRpb25zLmZvbnRNZXRyaWNzKCkuZmJveHJ1bGUsIC8vIGRlZmF1bHRcbiAgICAgICAgb3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzIC8vIHVzZXIgb3ZlcnJpZGVcbiAgICAgICAgKTtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcImJvcmRlcjogXCIgKyB0aGsgKyBcImVtIHNvbGlkIFwiICsgU3RyaW5nKGdyb3VwLmJvcmRlckNvbG9yKSk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIlxcXFx4Y2FuY2VsXCI6XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm5vdGF0aW9uXCIsIFwidXBkaWFnb25hbHN0cmlrZSBkb3duZGlhZ29uYWxzdHJpa2VcIik7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGlmIChncm91cC5iYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGhiYWNrZ3JvdW5kXCIsIGdyb3VwLmJhY2tncm91bmRDb2xvcik7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJlbmNsb3NlXCIsXG4gIG5hbWVzOiBbXCJcXFxcY29sb3Jib3hcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMixcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGdyZWVkaW5lc3M6IDMsXG4gICAgYXJnVHlwZXM6IFtcImNvbG9yXCIsIFwidGV4dFwiXVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MsIG9wdEFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZi5wYXJzZXIsXG4gICAgICAgIGZ1bmNOYW1lID0gX3JlZi5mdW5jTmFtZTtcbiAgICB2YXIgY29sb3IgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcImNvbG9yLXRva2VuXCIpLmNvbG9yO1xuICAgIHZhciBib2R5ID0gYXJnc1sxXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJlbmNsb3NlXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGxhYmVsOiBmdW5jTmFtZSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogY29sb3IsXG4gICAgICBib2R5OiBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGVuY2xvc2VfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGVuY2xvc2VfbWF0aG1sQnVpbGRlclxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiZW5jbG9zZVwiLFxuICBuYW1lczogW1wiXFxcXGZjb2xvcmJveFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAzLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgZ3JlZWRpbmVzczogMyxcbiAgICBhcmdUeXBlczogW1wiY29sb3JcIiwgXCJjb2xvclwiLCBcInRleHRcIl1cbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmMiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmMi5wYXJzZXIsXG4gICAgICAgIGZ1bmNOYW1lID0gX3JlZjIuZnVuY05hbWU7XG4gICAgdmFyIGJvcmRlckNvbG9yID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXSwgXCJjb2xvci10b2tlblwiKS5jb2xvcjtcbiAgICB2YXIgYmFja2dyb3VuZENvbG9yID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1sxXSwgXCJjb2xvci10b2tlblwiKS5jb2xvcjtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMl07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZW5jbG9zZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IGJhY2tncm91bmRDb2xvcixcbiAgICAgIGJvcmRlckNvbG9yOiBib3JkZXJDb2xvcixcbiAgICAgIGJvZHk6IGJvZHlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZW5jbG9zZV9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogZW5jbG9zZV9tYXRobWxCdWlsZGVyXG59KTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJlbmNsb3NlXCIsXG4gIG5hbWVzOiBbXCJcXFxcZmJveFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJoYm94XCJdLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmMywgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmMy5wYXJzZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZW5jbG9zZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogXCJcXFxcZmJveFwiLFxuICAgICAgYm9keTogYXJnc1swXVxuICAgIH07XG4gIH1cbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImVuY2xvc2VcIixcbiAgbmFtZXM6IFtcIlxcXFxjYW5jZWxcIiwgXCJcXFxcYmNhbmNlbFwiLCBcIlxcXFx4Y2FuY2VsXCIsIFwiXFxcXHNvdXRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWY0LCBhcmdzLCBvcHRBcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWY0LnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmNC5mdW5jTmFtZTtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZW5jbG9zZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBib2R5OiBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGVuY2xvc2VfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGVuY2xvc2VfbWF0aG1sQnVpbGRlclxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9kZWZpbmVFbnZpcm9ubWVudC5qc1xuXG5cbi8qKlxuICogQWxsIHJlZ2lzdGVyZWQgZW52aXJvbm1lbnRzLlxuICogYGVudmlyb25tZW50cy5qc2AgZXhwb3J0cyB0aGlzIHNhbWUgZGljdGlvbmFyeSBhZ2FpbiBhbmQgbWFrZXMgaXQgcHVibGljLlxuICogYFBhcnNlci5qc2AgcmVxdWlyZXMgdGhpcyBkaWN0aW9uYXJ5IHZpYSBgZW52aXJvbm1lbnRzLmpzYC5cbiAqL1xudmFyIF9lbnZpcm9ubWVudHMgPSB7fTtcbmZ1bmN0aW9uIGRlZmluZUVudmlyb25tZW50KF9yZWYpIHtcbiAgdmFyIHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICBuYW1lcyA9IF9yZWYubmFtZXMsXG4gICAgICBwcm9wcyA9IF9yZWYucHJvcHMsXG4gICAgICBoYW5kbGVyID0gX3JlZi5oYW5kbGVyLFxuICAgICAgaHRtbEJ1aWxkZXIgPSBfcmVmLmh0bWxCdWlsZGVyLFxuICAgICAgbWF0aG1sQnVpbGRlciA9IF9yZWYubWF0aG1sQnVpbGRlcjtcbiAgLy8gU2V0IGRlZmF1bHQgdmFsdWVzIG9mIGVudmlyb25tZW50cy5cbiAgdmFyIGRhdGEgPSB7XG4gICAgdHlwZTogdHlwZSxcbiAgICBudW1BcmdzOiBwcm9wcy5udW1BcmdzIHx8IDAsXG4gICAgZ3JlZWRpbmVzczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiBmYWxzZSxcbiAgICBudW1PcHRpb25hbEFyZ3M6IDAsXG4gICAgaGFuZGxlcjogaGFuZGxlclxuICB9O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBUT0RPOiBUaGUgdmFsdWUgdHlwZSBvZiBfZW52aXJvbm1lbnRzIHNob3VsZCBiZSBhIHR5cGUgdW5pb24gb2YgYWxsXG4gICAgLy8gcG9zc2libGUgYEVudlNwZWM8PmAgcG9zc2liaWxpdGllcyBpbnN0ZWFkIG9mIGBFbnZTcGVjPCo+YCwgd2hpY2ggaXNcbiAgICAvLyBhbiBleGlzdGVudGlhbCB0eXBlLlxuICAgIC8vICRGbG93Rml4TWVcbiAgICBfZW52aXJvbm1lbnRzW25hbWVzW2ldXSA9IGRhdGE7XG4gIH1cblxuICBpZiAoaHRtbEJ1aWxkZXIpIHtcbiAgICBfaHRtbEdyb3VwQnVpbGRlcnNbdHlwZV0gPSBodG1sQnVpbGRlcjtcbiAgfVxuXG4gIGlmIChtYXRobWxCdWlsZGVyKSB7XG4gICAgX21hdGhtbEdyb3VwQnVpbGRlcnNbdHlwZV0gPSBtYXRobWxCdWlsZGVyO1xuICB9XG59XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9lbnZpcm9ubWVudHMvYXJyYXkuanNcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuZnVuY3Rpb24gZ2V0SExpbmVzKHBhcnNlcikge1xuICAvLyBSZXR1cm4gYW4gYXJyYXkuIFRoZSBhcnJheSBsZW5ndGggPSBudW1iZXIgb2YgaGxpbmVzLlxuICAvLyBFYWNoIGVsZW1lbnQgaW4gdGhlIGFycmF5IHRlbGxzIGlmIHRoZSBsaW5lIGlzIGRhc2hlZC5cbiAgdmFyIGhsaW5lSW5mbyA9IFtdO1xuICBwYXJzZXIuY29uc3VtZVNwYWNlcygpO1xuICB2YXIgbnh0ID0gcGFyc2VyLm5leHRUb2tlbi50ZXh0O1xuXG4gIHdoaWxlIChueHQgPT09IFwiXFxcXGhsaW5lXCIgfHwgbnh0ID09PSBcIlxcXFxoZGFzaGxpbmVcIikge1xuICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgaGxpbmVJbmZvLnB1c2gobnh0ID09PSBcIlxcXFxoZGFzaGxpbmVcIik7XG4gICAgcGFyc2VyLmNvbnN1bWVTcGFjZXMoKTtcbiAgICBueHQgPSBwYXJzZXIubmV4dFRva2VuLnRleHQ7XG4gIH1cblxuICByZXR1cm4gaGxpbmVJbmZvO1xufVxuLyoqXG4gKiBQYXJzZSB0aGUgYm9keSBvZiB0aGUgZW52aXJvbm1lbnQsIHdpdGggcm93cyBkZWxpbWl0ZWQgYnkgXFxcXCBhbmRcbiAqIGNvbHVtbnMgZGVsaW1pdGVkIGJ5ICYsIGFuZCBjcmVhdGUgYSBuZXN0ZWQgbGlzdCBpbiByb3ctbWFqb3Igb3JkZXJcbiAqIHdpdGggb25lIGdyb3VwIHBlciBjZWxsLiAgSWYgZ2l2ZW4gYW4gb3B0aW9uYWwgYXJndW1lbnQgc3R5bGVcbiAqIChcInRleHRcIiwgXCJkaXNwbGF5XCIsIGV0Yy4pLCB0aGVuIGVhY2ggY2VsbCBpcyBjYXN0IGludG8gdGhhdCBzdHlsZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHBhcnNlQXJyYXkocGFyc2VyLCBfcmVmLCBzdHlsZSkge1xuICB2YXIgaHNraXBCZWZvcmVBbmRBZnRlciA9IF9yZWYuaHNraXBCZWZvcmVBbmRBZnRlcixcbiAgICAgIGFkZEpvdCA9IF9yZWYuYWRkSm90LFxuICAgICAgY29scyA9IF9yZWYuY29scyxcbiAgICAgIGFycmF5c3RyZXRjaCA9IF9yZWYuYXJyYXlzdHJldGNoLFxuICAgICAgY29sU2VwYXJhdGlvblR5cGUgPSBfcmVmLmNvbFNlcGFyYXRpb25UeXBlO1xuICAvLyBQYXJzZSBib2R5IG9mIGFycmF5IHdpdGggXFxcXCB0ZW1wb3JhcmlseSBtYXBwZWQgdG8gXFxjclxuICBwYXJzZXIuZ3VsbGV0LmJlZ2luR3JvdXAoKTtcbiAgcGFyc2VyLmd1bGxldC5tYWNyb3Muc2V0KFwiXFxcXFxcXFxcIiwgXCJcXFxcY3JcIik7IC8vIEdldCBjdXJyZW50IGFycmF5c3RyZXRjaCBpZiBpdCdzIG5vdCBzZXQgYnkgdGhlIGVudmlyb25tZW50XG5cbiAgaWYgKCFhcnJheXN0cmV0Y2gpIHtcbiAgICB2YXIgc3RyZXRjaCA9IHBhcnNlci5ndWxsZXQuZXhwYW5kTWFjcm9Bc1RleHQoXCJcXFxcYXJyYXlzdHJldGNoXCIpO1xuXG4gICAgaWYgKHN0cmV0Y2ggPT0gbnVsbCkge1xuICAgICAgLy8gRGVmYXVsdCBcXGFycmF5c3RyZXRjaCBmcm9tIGx0dGFiLmR0eFxuICAgICAgYXJyYXlzdHJldGNoID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJyYXlzdHJldGNoID0gcGFyc2VGbG9hdChzdHJldGNoKTtcblxuICAgICAgaWYgKCFhcnJheXN0cmV0Y2ggfHwgYXJyYXlzdHJldGNoIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJJbnZhbGlkIFxcXFxhcnJheXN0cmV0Y2g6IFwiICsgc3RyZXRjaCk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIFN0YXJ0IGdyb3VwIGZvciBmaXJzdCBjZWxsXG5cblxuICBwYXJzZXIuZ3VsbGV0LmJlZ2luR3JvdXAoKTtcbiAgdmFyIHJvdyA9IFtdO1xuICB2YXIgYm9keSA9IFtyb3ddO1xuICB2YXIgcm93R2FwcyA9IFtdO1xuICB2YXIgaExpbmVzQmVmb3JlUm93ID0gW107IC8vIFRlc3QgZm9yIFxcaGxpbmUgYXQgdGhlIHRvcCBvZiB0aGUgYXJyYXkuXG5cbiAgaExpbmVzQmVmb3JlUm93LnB1c2goZ2V0SExpbmVzKHBhcnNlcikpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICAvLyBQYXJzZSBlYWNoIGNlbGwgaW4gaXRzIG93biBncm91cCAobmFtZXNwYWNlKVxuICAgIHZhciBjZWxsID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbihmYWxzZSwgXCJcXFxcY3JcIik7XG4gICAgcGFyc2VyLmd1bGxldC5lbmRHcm91cCgpO1xuICAgIHBhcnNlci5ndWxsZXQuYmVnaW5Hcm91cCgpO1xuICAgIGNlbGwgPSB7XG4gICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IGNlbGxcbiAgICB9O1xuXG4gICAgaWYgKHN0eWxlKSB7XG4gICAgICBjZWxsID0ge1xuICAgICAgICB0eXBlOiBcInN0eWxpbmdcIixcbiAgICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgYm9keTogW2NlbGxdXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJvdy5wdXNoKGNlbGwpO1xuICAgIHZhciBuZXh0ID0gcGFyc2VyLm5leHRUb2tlbi50ZXh0O1xuXG4gICAgaWYgKG5leHQgPT09IFwiJlwiKSB7XG4gICAgICBwYXJzZXIuY29uc3VtZSgpO1xuICAgIH0gZWxzZSBpZiAobmV4dCA9PT0gXCJcXFxcZW5kXCIpIHtcbiAgICAgIC8vIEFycmF5cyB0ZXJtaW5hdGUgbmV3bGluZXMgd2l0aCBgXFxjcmNyYCB3aGljaCBjb25zdW1lcyBhIGBcXGNyYCBpZlxuICAgICAgLy8gdGhlIGxhc3QgbGluZSBpcyBlbXB0eS5cbiAgICAgIC8vIE5PVEU6IEN1cnJlbnRseSwgYGNlbGxgIGlzIHRoZSBsYXN0IGl0ZW0gYWRkZWQgaW50byBgcm93YC5cbiAgICAgIGlmIChyb3cubGVuZ3RoID09PSAxICYmIGNlbGwudHlwZSA9PT0gXCJzdHlsaW5nXCIgJiYgY2VsbC5ib2R5WzBdLmJvZHkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGJvZHkucG9wKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChoTGluZXNCZWZvcmVSb3cubGVuZ3RoIDwgYm9keS5sZW5ndGggKyAxKSB7XG4gICAgICAgIGhMaW5lc0JlZm9yZVJvdy5wdXNoKFtdKTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIGlmIChuZXh0ID09PSBcIlxcXFxjclwiKSB7XG4gICAgICB2YXIgY3IgPSBhc3NlcnROb2RlVHlwZShwYXJzZXIucGFyc2VGdW5jdGlvbigpLCBcImNyXCIpO1xuICAgICAgcm93R2Fwcy5wdXNoKGNyLnNpemUpOyAvLyBjaGVjayBmb3IgXFxobGluZShzKSBmb2xsb3dpbmcgdGhlIHJvdyBzZXBhcmF0b3JcblxuICAgICAgaExpbmVzQmVmb3JlUm93LnB1c2goZ2V0SExpbmVzKHBhcnNlcikpO1xuICAgICAgcm93ID0gW107XG4gICAgICBib2R5LnB1c2gocm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiRXhwZWN0ZWQgJiBvciBcXFxcXFxcXCBvciBcXFxcY3Igb3IgXFxcXGVuZFwiLCBwYXJzZXIubmV4dFRva2VuKTtcbiAgICB9XG4gIH0gLy8gRW5kIGNlbGwgZ3JvdXBcblxuXG4gIHBhcnNlci5ndWxsZXQuZW5kR3JvdXAoKTsgLy8gRW5kIGFycmF5IGdyb3VwIGRlZmluaW5nIFxcXFxcblxuICBwYXJzZXIuZ3VsbGV0LmVuZEdyb3VwKCk7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgIGFkZEpvdDogYWRkSm90LFxuICAgIGFycmF5c3RyZXRjaDogYXJyYXlzdHJldGNoLFxuICAgIGJvZHk6IGJvZHksXG4gICAgY29sczogY29scyxcbiAgICByb3dHYXBzOiByb3dHYXBzLFxuICAgIGhza2lwQmVmb3JlQW5kQWZ0ZXI6IGhza2lwQmVmb3JlQW5kQWZ0ZXIsXG4gICAgaExpbmVzQmVmb3JlUm93OiBoTGluZXNCZWZvcmVSb3csXG4gICAgY29sU2VwYXJhdGlvblR5cGU6IGNvbFNlcGFyYXRpb25UeXBlXG4gIH07XG59IC8vIERlY2lkZXMgb24gYSBzdHlsZSBmb3IgY2VsbHMgaW4gYW4gYXJyYXkgYWNjb3JkaW5nIHRvIHdoZXRoZXIgdGhlIGdpdmVuXG4vLyBlbnZpcm9ubWVudCBuYW1lIHN0YXJ0cyB3aXRoIHRoZSBsZXR0ZXIgJ2QnLlxuXG5cbmZ1bmN0aW9uIGRDZWxsU3R5bGUoZW52TmFtZSkge1xuICBpZiAoZW52TmFtZS5zdWJzdHIoMCwgMSkgPT09IFwiZFwiKSB7XG4gICAgcmV0dXJuIFwiZGlzcGxheVwiO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcInRleHRcIjtcbiAgfVxufVxuXG52YXIgYXJyYXlfaHRtbEJ1aWxkZXIgPSBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICB2YXIgcjtcbiAgdmFyIGM7XG4gIHZhciBuciA9IGdyb3VwLmJvZHkubGVuZ3RoO1xuICB2YXIgaExpbmVzQmVmb3JlUm93ID0gZ3JvdXAuaExpbmVzQmVmb3JlUm93O1xuICB2YXIgbmMgPSAwO1xuICB2YXIgYm9keSA9IG5ldyBBcnJheShucik7XG4gIHZhciBobGluZXMgPSBbXTtcbiAgdmFyIHJ1bGVUaGlja25lc3MgPSBNYXRoLm1heCggLy8gRnJvbSBMYVRlWCBcXHNob3d0aGVcXGFycmF5cnVsZXdpZHRoLiBFcXVhbHMgMC4wNCBlbS5cbiAgb3B0aW9ucy5mb250TWV0cmljcygpLmFycmF5UnVsZVdpZHRoLCBvcHRpb25zLm1pblJ1bGVUaGlja25lc3MgLy8gVXNlciBvdmVycmlkZS5cbiAgKTsgLy8gSG9yaXpvbnRhbCBzcGFjaW5nXG5cbiAgdmFyIHB0ID0gMSAvIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5wdFBlckVtO1xuICB2YXIgYXJyYXljb2xzZXAgPSA1ICogcHQ7IC8vIGRlZmF1bHQgdmFsdWUsIGkuZS4gXFxhcnJheWNvbHNlcCBpbiBhcnRpY2xlLmNsc1xuXG4gIGlmIChncm91cC5jb2xTZXBhcmF0aW9uVHlwZSAmJiBncm91cC5jb2xTZXBhcmF0aW9uVHlwZSA9PT0gXCJzbWFsbFwiKSB7XG4gICAgLy8gV2UncmUgaW4gYSB7c21hbGxtYXRyaXh9LiBEZWZhdWx0IGNvbHVtbiBzcGFjZSBpcyBcXHRoaWNrc3BhY2UsXG4gICAgLy8gaS5lLiA1LzE4ZW0gPSAwLjI3NzhlbSwgcGVyIGFtc21hdGguZHR4IGZvciB7c21hbGxtYXRyaXh9LlxuICAgIC8vIEJ1dCB0aGF0IG5lZWRzIGFkanVzdG1lbnQgYmVjYXVzZSBMYVRlWCBhcHBsaWVzIFxcc2NyaXB0c3R5bGUgdG8gdGhlXG4gICAgLy8gZW50aXJlIGFycmF5LCBpbmNsdWRpbmcgdGhlIGNvbHNwYWNlLCBidXQgdGhpcyBmdW5jdGlvbiBhcHBsaWVzXG4gICAgLy8gXFxzY3JpcHRzdHlsZSBvbmx5IGluc2lkZSBlYWNoIGVsZW1lbnQuXG4gICAgdmFyIGxvY2FsTXVsdGlwbGllciA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoc3JjX1N0eWxlLlNDUklQVCkuc2l6ZU11bHRpcGxpZXI7XG4gICAgYXJyYXljb2xzZXAgPSAwLjI3NzggKiAobG9jYWxNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcik7XG4gIH0gLy8gVmVydGljYWwgc3BhY2luZ1xuXG5cbiAgdmFyIGJhc2VsaW5lc2tpcCA9IDEyICogcHQ7IC8vIHNlZSBzaXplMTAuY2xvXG4gIC8vIERlZmF1bHQgXFxqb3QgZnJvbSBsdG1hdGguZHR4XG4gIC8vIFRPRE8oZWRlbWFpbmUpOiBhbGxvdyBvdmVycmlkaW5nIFxcam90IHZpYSBcXHNldGxlbmd0aCAoIzY4NylcblxuICB2YXIgam90ID0gMyAqIHB0O1xuICB2YXIgYXJyYXlza2lwID0gZ3JvdXAuYXJyYXlzdHJldGNoICogYmFzZWxpbmVza2lwO1xuICB2YXIgYXJzdHJ1dEhlaWdodCA9IDAuNyAqIGFycmF5c2tpcDsgLy8gXFxzdHJ1dGJveCBpbiBsdGZzc3RyYy5kdHggYW5kXG5cbiAgdmFyIGFyc3RydXREZXB0aCA9IDAuMyAqIGFycmF5c2tpcDsgLy8gXFxAYXJzdHJ1dGJveCBpbiBsdHRhYi5kdHhcblxuICB2YXIgdG90YWxIZWlnaHQgPSAwOyAvLyBTZXQgYSBwb3NpdGlvbiBmb3IgXFxobGluZShzKSBhdCB0aGUgdG9wIG9mIHRoZSBhcnJheSwgaWYgYW55LlxuXG4gIGZ1bmN0aW9uIHNldEhMaW5lUG9zKGhsaW5lc0luR2FwKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBobGluZXNJbkdhcC5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgIHRvdGFsSGVpZ2h0ICs9IDAuMjU7XG4gICAgICB9XG5cbiAgICAgIGhsaW5lcy5wdXNoKHtcbiAgICAgICAgcG9zOiB0b3RhbEhlaWdodCxcbiAgICAgICAgaXNEYXNoZWQ6IGhsaW5lc0luR2FwW2ldXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzZXRITGluZVBvcyhoTGluZXNCZWZvcmVSb3dbMF0pO1xuXG4gIGZvciAociA9IDA7IHIgPCBncm91cC5ib2R5Lmxlbmd0aDsgKytyKSB7XG4gICAgdmFyIGlucm93ID0gZ3JvdXAuYm9keVtyXTtcbiAgICB2YXIgaGVpZ2h0ID0gYXJzdHJ1dEhlaWdodDsgLy8gXFxAYXJyYXkgYWRkcyBhbiBcXEBhcnN0cnV0XG5cbiAgICB2YXIgZGVwdGggPSBhcnN0cnV0RGVwdGg7IC8vIHRvIGVhY2ggdG93ICh2aWEgdGhlIHRlbXBsYXRlKVxuXG4gICAgaWYgKG5jIDwgaW5yb3cubGVuZ3RoKSB7XG4gICAgICBuYyA9IGlucm93Lmxlbmd0aDtcbiAgICB9XG5cbiAgICB2YXIgb3V0cm93ID0gbmV3IEFycmF5KGlucm93Lmxlbmd0aCk7XG5cbiAgICBmb3IgKGMgPSAwOyBjIDwgaW5yb3cubGVuZ3RoOyArK2MpIHtcbiAgICAgIHZhciBlbHQgPSBidWlsZEhUTUxfYnVpbGRHcm91cChpbnJvd1tjXSwgb3B0aW9ucyk7XG5cbiAgICAgIGlmIChkZXB0aCA8IGVsdC5kZXB0aCkge1xuICAgICAgICBkZXB0aCA9IGVsdC5kZXB0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKGhlaWdodCA8IGVsdC5oZWlnaHQpIHtcbiAgICAgICAgaGVpZ2h0ID0gZWx0LmhlaWdodDtcbiAgICAgIH1cblxuICAgICAgb3V0cm93W2NdID0gZWx0O1xuICAgIH1cblxuICAgIHZhciByb3dHYXAgPSBncm91cC5yb3dHYXBzW3JdO1xuICAgIHZhciBnYXAgPSAwO1xuXG4gICAgaWYgKHJvd0dhcCkge1xuICAgICAgZ2FwID0gdW5pdHNfY2FsY3VsYXRlU2l6ZShyb3dHYXAsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAoZ2FwID4gMCkge1xuICAgICAgICAvLyBcXEBhcmdhcnJheWNyXG4gICAgICAgIGdhcCArPSBhcnN0cnV0RGVwdGg7XG5cbiAgICAgICAgaWYgKGRlcHRoIDwgZ2FwKSB7XG4gICAgICAgICAgZGVwdGggPSBnYXA7IC8vIFxcQHhhcmdhcnJheWNyXG4gICAgICAgIH1cblxuICAgICAgICBnYXAgPSAwO1xuICAgICAgfVxuICAgIH0gLy8gSW4gQU1TIG11bHRpbGluZSBlbnZpcm9ubWVudHMgc3VjaCBhcyBhbGlnbmVkIGFuZCBnYXRoZXJlZCwgcm93c1xuICAgIC8vIGNvcnJlc3BvbmQgdG8gbGluZXMgdGhhdCBoYXZlIGFkZGl0aW9uYWwgXFxqb3QgYWRkZWQgdG8gdGhlXG4gICAgLy8gXFxiYXNlbGluZXNraXAgdmlhIFxcb3BlbnVwLlxuXG5cbiAgICBpZiAoZ3JvdXAuYWRkSm90KSB7XG4gICAgICBkZXB0aCArPSBqb3Q7XG4gICAgfVxuXG4gICAgb3V0cm93LmhlaWdodCA9IGhlaWdodDtcbiAgICBvdXRyb3cuZGVwdGggPSBkZXB0aDtcbiAgICB0b3RhbEhlaWdodCArPSBoZWlnaHQ7XG4gICAgb3V0cm93LnBvcyA9IHRvdGFsSGVpZ2h0O1xuICAgIHRvdGFsSGVpZ2h0ICs9IGRlcHRoICsgZ2FwOyAvLyBcXEB5YXJnYXJyYXljclxuXG4gICAgYm9keVtyXSA9IG91dHJvdzsgLy8gU2V0IGEgcG9zaXRpb24gZm9yIFxcaGxpbmUocyksIGlmIGFueS5cblxuICAgIHNldEhMaW5lUG9zKGhMaW5lc0JlZm9yZVJvd1tyICsgMV0pO1xuICB9XG5cbiAgdmFyIG9mZnNldCA9IHRvdGFsSGVpZ2h0IC8gMiArIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O1xuICB2YXIgY29sRGVzY3JpcHRpb25zID0gZ3JvdXAuY29scyB8fCBbXTtcbiAgdmFyIGNvbHMgPSBbXTtcbiAgdmFyIGNvbFNlcDtcbiAgdmFyIGNvbERlc2NyTnVtO1xuXG4gIGZvciAoYyA9IDAsIGNvbERlc2NyTnVtID0gMDsgLy8gQ29udGludWUgd2hpbGUgZWl0aGVyIHRoZXJlIGFyZSBtb3JlIGNvbHVtbnMgb3IgbW9yZSBjb2x1bW5cbiAgLy8gZGVzY3JpcHRpb25zLCBzbyB0cmFpbGluZyBzZXBhcmF0b3JzIGRvbid0IGdldCBsb3N0LlxuICBjIDwgbmMgfHwgY29sRGVzY3JOdW0gPCBjb2xEZXNjcmlwdGlvbnMubGVuZ3RoOyArK2MsICsrY29sRGVzY3JOdW0pIHtcbiAgICB2YXIgY29sRGVzY3IgPSBjb2xEZXNjcmlwdGlvbnNbY29sRGVzY3JOdW1dIHx8IHt9O1xuICAgIHZhciBmaXJzdFNlcGFyYXRvciA9IHRydWU7XG5cbiAgICB3aGlsZSAoY29sRGVzY3IudHlwZSA9PT0gXCJzZXBhcmF0b3JcIikge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBzZXBhcmF0b3IgaW4gYSByb3csIGFkZCBhIHNwYWNlXG4gICAgICAvLyBiZXR3ZWVuIHRoZW0uXG4gICAgICBpZiAoIWZpcnN0U2VwYXJhdG9yKSB7XG4gICAgICAgIGNvbFNlcCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImFycmF5Y29sc2VwXCJdLCBbXSk7XG4gICAgICAgIGNvbFNlcC5zdHlsZS53aWR0aCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5kb3VibGVSdWxlU2VwICsgXCJlbVwiO1xuICAgICAgICBjb2xzLnB1c2goY29sU2VwKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbERlc2NyLnNlcGFyYXRvciA9PT0gXCJ8XCIgfHwgY29sRGVzY3Iuc2VwYXJhdG9yID09PSBcIjpcIikge1xuICAgICAgICB2YXIgbGluZVR5cGUgPSBjb2xEZXNjci5zZXBhcmF0b3IgPT09IFwifFwiID8gXCJzb2xpZFwiIDogXCJkYXNoZWRcIjtcbiAgICAgICAgdmFyIHNlcGFyYXRvciA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcInZlcnRpY2FsLXNlcGFyYXRvclwiXSwgW10sIG9wdGlvbnMpO1xuICAgICAgICBzZXBhcmF0b3Iuc3R5bGUuaGVpZ2h0ID0gdG90YWxIZWlnaHQgKyBcImVtXCI7XG4gICAgICAgIHNlcGFyYXRvci5zdHlsZS5ib3JkZXJSaWdodFdpZHRoID0gcnVsZVRoaWNrbmVzcyArIFwiZW1cIjtcbiAgICAgICAgc2VwYXJhdG9yLnN0eWxlLmJvcmRlclJpZ2h0U3R5bGUgPSBsaW5lVHlwZTtcbiAgICAgICAgc2VwYXJhdG9yLnN0eWxlLm1hcmdpbiA9IFwiMCAtXCIgKyBydWxlVGhpY2tuZXNzIC8gMiArIFwiZW1cIjtcbiAgICAgICAgc2VwYXJhdG9yLnN0eWxlLnZlcnRpY2FsQWxpZ24gPSAtKHRvdGFsSGVpZ2h0IC0gb2Zmc2V0KSArIFwiZW1cIjtcbiAgICAgICAgY29scy5wdXNoKHNlcGFyYXRvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJJbnZhbGlkIHNlcGFyYXRvciB0eXBlOiBcIiArIGNvbERlc2NyLnNlcGFyYXRvcik7XG4gICAgICB9XG5cbiAgICAgIGNvbERlc2NyTnVtKys7XG4gICAgICBjb2xEZXNjciA9IGNvbERlc2NyaXB0aW9uc1tjb2xEZXNjck51bV0gfHwge307XG4gICAgICBmaXJzdFNlcGFyYXRvciA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChjID49IG5jKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgc2Vwd2lkdGggPSB2b2lkIDA7XG5cbiAgICBpZiAoYyA+IDAgfHwgZ3JvdXAuaHNraXBCZWZvcmVBbmRBZnRlcikge1xuICAgICAgc2Vwd2lkdGggPSB1dGlscy5kZWZsdChjb2xEZXNjci5wcmVnYXAsIGFycmF5Y29sc2VwKTtcblxuICAgICAgaWYgKHNlcHdpZHRoICE9PSAwKSB7XG4gICAgICAgIGNvbFNlcCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImFycmF5Y29sc2VwXCJdLCBbXSk7XG4gICAgICAgIGNvbFNlcC5zdHlsZS53aWR0aCA9IHNlcHdpZHRoICsgXCJlbVwiO1xuICAgICAgICBjb2xzLnB1c2goY29sU2VwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY29sID0gW107XG5cbiAgICBmb3IgKHIgPSAwOyByIDwgbnI7ICsrcikge1xuICAgICAgdmFyIHJvdyA9IGJvZHlbcl07XG4gICAgICB2YXIgZWxlbSA9IHJvd1tjXTtcblxuICAgICAgaWYgKCFlbGVtKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2hpZnQgPSByb3cucG9zIC0gb2Zmc2V0O1xuICAgICAgZWxlbS5kZXB0aCA9IHJvdy5kZXB0aDtcbiAgICAgIGVsZW0uaGVpZ2h0ID0gcm93LmhlaWdodDtcbiAgICAgIGNvbC5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGVsZW0sXG4gICAgICAgIHNoaWZ0OiBzaGlmdFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29sID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJpbmRpdmlkdWFsU2hpZnRcIixcbiAgICAgIGNoaWxkcmVuOiBjb2xcbiAgICB9LCBvcHRpb25zKTtcbiAgICBjb2wgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJjb2wtYWxpZ24tXCIgKyAoY29sRGVzY3IuYWxpZ24gfHwgXCJjXCIpXSwgW2NvbF0pO1xuICAgIGNvbHMucHVzaChjb2wpO1xuXG4gICAgaWYgKGMgPCBuYyAtIDEgfHwgZ3JvdXAuaHNraXBCZWZvcmVBbmRBZnRlcikge1xuICAgICAgc2Vwd2lkdGggPSB1dGlscy5kZWZsdChjb2xEZXNjci5wb3N0Z2FwLCBhcnJheWNvbHNlcCk7XG5cbiAgICAgIGlmIChzZXB3aWR0aCAhPT0gMCkge1xuICAgICAgICBjb2xTZXAgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJhcnJheWNvbHNlcFwiXSwgW10pO1xuICAgICAgICBjb2xTZXAuc3R5bGUud2lkdGggPSBzZXB3aWR0aCArIFwiZW1cIjtcbiAgICAgICAgY29scy5wdXNoKGNvbFNlcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm10YWJsZVwiXSwgY29scyk7IC8vIEFkZCBcXGhsaW5lKHMpLCBpZiBhbnkuXG5cbiAgaWYgKGhsaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGxpbmUgPSBidWlsZENvbW1vbi5tYWtlTGluZVNwYW4oXCJobGluZVwiLCBvcHRpb25zLCBydWxlVGhpY2tuZXNzKTtcbiAgICB2YXIgZGFzaGVzID0gYnVpbGRDb21tb24ubWFrZUxpbmVTcGFuKFwiaGRhc2hsaW5lXCIsIG9wdGlvbnMsIHJ1bGVUaGlja25lc3MpO1xuICAgIHZhciB2TGlzdEVsZW1zID0gW3tcbiAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgZWxlbTogYm9keSxcbiAgICAgIHNoaWZ0OiAwXG4gICAgfV07XG5cbiAgICB3aGlsZSAoaGxpbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBobGluZSA9IGhsaW5lcy5wb3AoKTtcbiAgICAgIHZhciBsaW5lU2hpZnQgPSBobGluZS5wb3MgLSBvZmZzZXQ7XG5cbiAgICAgIGlmIChobGluZS5pc0Rhc2hlZCkge1xuICAgICAgICB2TGlzdEVsZW1zLnB1c2goe1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IGRhc2hlcyxcbiAgICAgICAgICBzaGlmdDogbGluZVNoaWZ0XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdkxpc3RFbGVtcy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBsaW5lLFxuICAgICAgICAgIHNoaWZ0OiBsaW5lU2hpZnRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICBjaGlsZHJlbjogdkxpc3RFbGVtc1xuICAgIH0sIG9wdGlvbnMpO1xuICB9XG5cbiAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIl0sIFtib2R5XSwgb3B0aW9ucyk7XG59O1xuXG52YXIgYWxpZ25NYXAgPSB7XG4gIGM6IFwiY2VudGVyIFwiLFxuICBsOiBcImxlZnQgXCIsXG4gIHI6IFwicmlnaHQgXCJcbn07XG5cbnZhciBhcnJheV9tYXRobWxCdWlsZGVyID0gZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICB2YXIgdGFibGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10YWJsZVwiLCBncm91cC5ib2R5Lm1hcChmdW5jdGlvbiAocm93KSB7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRyXCIsIHJvdy5tYXAoZnVuY3Rpb24gKGNlbGwpIHtcbiAgICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZFwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChjZWxsLCBvcHRpb25zKV0pO1xuICAgIH0pKTtcbiAgfSkpOyAvLyBTZXQgY29sdW1uIGFsaWdubWVudCwgcm93IHNwYWNpbmcsIGNvbHVtbiBzcGFjaW5nLCBhbmRcbiAgLy8gYXJyYXkgbGluZXMgYnkgc2V0dGluZyBhdHRyaWJ1dGVzIG9uIHRoZSB0YWJsZSBlbGVtZW50LlxuICAvLyBTZXQgdGhlIHJvdyBzcGFjaW5nLiBJbiBNYXRoTUwsIHdlIHNwZWNpZnkgYSBnYXAgZGlzdGFuY2UuXG4gIC8vIFdlIGRvIG5vdCB1c2Ugcm93R2FwW10gYmVjYXVzZSBNYXRoTUwgYXV0b21hdGljYWxseSBpbmNyZWFzZXNcbiAgLy8gY2VsbCBoZWlnaHQgd2l0aCB0aGUgaGVpZ2h0L2RlcHRoIG9mIHRoZSBlbGVtZW50IGNvbnRlbnQuXG4gIC8vIExhVGVYIFxcYXJyYXlzdHJldGNoIG11bHRpcGxpZXMgdGhlIHJvdyBiYXNlbGluZS10by1iYXNlbGluZSBkaXN0YW5jZS5cbiAgLy8gV2Ugc2ltdWxhdGUgdGhpcyBieSBhZGRpbmcgKGFycmF5c3RyZXRjaCAtIDEpZW0gdG8gdGhlIGdhcC4gVGhpc1xuICAvLyBkb2VzIGEgcmVhc29uYWJsZSBqb2Igb2YgYWRqdXN0aW5nIGFycmF5cyBjb250YWluaW5nIDEgZW0gdGFsbCBjb250ZW50LlxuICAvLyBUaGUgMC4xNiBhbmQgMC4wOSB2YWx1ZXMgYXJlIGZvdW5kIGVtcHJpY2FsbHkuIFRoZXkgcHJvZHVjZSBhbiBhcnJheVxuICAvLyBzaW1pbGFyIHRvIExhVGVYIGFuZCBpbiB3aGljaCBjb250ZW50IGRvZXMgbm90IGludGVyZmVyZSB3aXRoIFxcaGluZXMuXG5cbiAgdmFyIGdhcCA9IGdyb3VwLmFycmF5c3RyZXRjaCA9PT0gMC41ID8gMC4xIC8vIHtzbWFsbG1hdHJpeH0sIHtzdWJhcnJheX1cbiAgOiAwLjE2ICsgZ3JvdXAuYXJyYXlzdHJldGNoIC0gMSArIChncm91cC5hZGRKb3QgPyAwLjA5IDogMCk7XG4gIHRhYmxlLnNldEF0dHJpYnV0ZShcInJvd3NwYWNpbmdcIiwgZ2FwICsgXCJlbVwiKTsgLy8gTWF0aE1MIHRhYmxlIGxpbmVzIGdvIG9ubHkgYmV0d2VlbiBjZWxscy5cbiAgLy8gVG8gcGxhY2UgYSBsaW5lIG9uIGFuIGVkZ2Ugd2UnbGwgdXNlIDxtZW5jbG9zZT4sIGlmIG5lY2Vzc2FyeS5cblxuICB2YXIgbWVuY2xvc2UgPSBcIlwiO1xuICB2YXIgYWxpZ24gPSBcIlwiO1xuXG4gIGlmIChncm91cC5jb2xzKSB7XG4gICAgLy8gRmluZCBjb2x1bW4gYWxpZ25tZW50LCBjb2x1bW4gc3BhY2luZywgYW5kICB2ZXJ0aWNhbCBsaW5lcy5cbiAgICB2YXIgY29scyA9IGdyb3VwLmNvbHM7XG4gICAgdmFyIGNvbHVtbkxpbmVzID0gXCJcIjtcbiAgICB2YXIgcHJldlR5cGVXYXNBbGlnbiA9IGZhbHNlO1xuICAgIHZhciBpU3RhcnQgPSAwO1xuICAgIHZhciBpRW5kID0gY29scy5sZW5ndGg7XG5cbiAgICBpZiAoY29sc1swXS50eXBlID09PSBcInNlcGFyYXRvclwiKSB7XG4gICAgICBtZW5jbG9zZSArPSBcInRvcCBcIjtcbiAgICAgIGlTdGFydCA9IDE7XG4gICAgfVxuXG4gICAgaWYgKGNvbHNbY29scy5sZW5ndGggLSAxXS50eXBlID09PSBcInNlcGFyYXRvclwiKSB7XG4gICAgICBtZW5jbG9zZSArPSBcImJvdHRvbSBcIjtcbiAgICAgIGlFbmQgLT0gMTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gaVN0YXJ0OyBpIDwgaUVuZDsgaSsrKSB7XG4gICAgICBpZiAoY29sc1tpXS50eXBlID09PSBcImFsaWduXCIpIHtcbiAgICAgICAgYWxpZ24gKz0gYWxpZ25NYXBbY29sc1tpXS5hbGlnbl07XG5cbiAgICAgICAgaWYgKHByZXZUeXBlV2FzQWxpZ24pIHtcbiAgICAgICAgICBjb2x1bW5MaW5lcyArPSBcIm5vbmUgXCI7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2VHlwZVdhc0FsaWduID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoY29sc1tpXS50eXBlID09PSBcInNlcGFyYXRvclwiKSB7XG4gICAgICAgIC8vIE1hdGhNTCBhY2NlcHRzIG9ubHkgc2luZ2xlIGxpbmVzIGJldHdlZW4gY2VsbHMuXG4gICAgICAgIC8vIFNvIHdlIHJlYWQgb25seSB0aGUgZmlyc3Qgb2YgY29uc2VjdXRpdmUgc2VwYXJhdG9ycy5cbiAgICAgICAgaWYgKHByZXZUeXBlV2FzQWxpZ24pIHtcbiAgICAgICAgICBjb2x1bW5MaW5lcyArPSBjb2xzW2ldLnNlcGFyYXRvciA9PT0gXCJ8XCIgPyBcInNvbGlkIFwiIDogXCJkYXNoZWQgXCI7XG4gICAgICAgICAgcHJldlR5cGVXYXNBbGlnbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGFibGUuc2V0QXR0cmlidXRlKFwiY29sdW1uYWxpZ25cIiwgYWxpZ24udHJpbSgpKTtcblxuICAgIGlmICgvW3NkXS8udGVzdChjb2x1bW5MaW5lcykpIHtcbiAgICAgIHRhYmxlLnNldEF0dHJpYnV0ZShcImNvbHVtbmxpbmVzXCIsIGNvbHVtbkxpbmVzLnRyaW0oKSk7XG4gICAgfVxuICB9IC8vIFNldCBjb2x1bW4gc3BhY2luZy5cblxuXG4gIGlmIChncm91cC5jb2xTZXBhcmF0aW9uVHlwZSA9PT0gXCJhbGlnblwiKSB7XG4gICAgdmFyIF9jb2xzID0gZ3JvdXAuY29scyB8fCBbXTtcblxuICAgIHZhciBzcGFjaW5nID0gXCJcIjtcblxuICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBfY29scy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHNwYWNpbmcgKz0gX2kgJSAyID8gXCIwZW0gXCIgOiBcIjFlbSBcIjtcbiAgICB9XG5cbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIHNwYWNpbmcudHJpbSgpKTtcbiAgfSBlbHNlIGlmIChncm91cC5jb2xTZXBhcmF0aW9uVHlwZSA9PT0gXCJhbGlnbmF0XCIpIHtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIFwiMGVtXCIpO1xuICB9IGVsc2UgaWYgKGdyb3VwLmNvbFNlcGFyYXRpb25UeXBlID09PSBcInNtYWxsXCIpIHtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIFwiMC4yNzc4ZW1cIik7XG4gIH0gZWxzZSB7XG4gICAgdGFibGUuc2V0QXR0cmlidXRlKFwiY29sdW1uc3BhY2luZ1wiLCBcIjFlbVwiKTtcbiAgfSAvLyBBZGRyZXNzIFxcaGxpbmUgYW5kIFxcaGRhc2hsaW5lXG5cblxuICB2YXIgcm93TGluZXMgPSBcIlwiO1xuICB2YXIgaGxpbmVzID0gZ3JvdXAuaExpbmVzQmVmb3JlUm93O1xuICBtZW5jbG9zZSArPSBobGluZXNbMF0ubGVuZ3RoID4gMCA/IFwibGVmdCBcIiA6IFwiXCI7XG4gIG1lbmNsb3NlICs9IGhsaW5lc1tobGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoID4gMCA/IFwicmlnaHQgXCIgOiBcIlwiO1xuXG4gIGZvciAodmFyIF9pMiA9IDE7IF9pMiA8IGhsaW5lcy5sZW5ndGggLSAxOyBfaTIrKykge1xuICAgIHJvd0xpbmVzICs9IGhsaW5lc1tfaTJdLmxlbmd0aCA9PT0gMCA/IFwibm9uZSBcIiAvLyBNYXRoTUwgYWNjZXB0cyBvbmx5IGEgc2luZ2xlIGxpbmUgYmV0d2VlbiByb3dzLiBSZWFkIG9uZSBlbGVtZW50LlxuICAgIDogaGxpbmVzW19pMl1bMF0gPyBcImRhc2hlZCBcIiA6IFwic29saWQgXCI7XG4gIH1cblxuICBpZiAoL1tzZF0vLnRlc3Qocm93TGluZXMpKSB7XG4gICAgdGFibGUuc2V0QXR0cmlidXRlKFwicm93bGluZXNcIiwgcm93TGluZXMudHJpbSgpKTtcbiAgfVxuXG4gIGlmIChtZW5jbG9zZSAhPT0gXCJcIikge1xuICAgIHRhYmxlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtZW5jbG9zZVwiLCBbdGFibGVdKTtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJub3RhdGlvblwiLCBtZW5jbG9zZS50cmltKCkpO1xuICB9XG5cbiAgaWYgKGdyb3VwLmFycmF5c3RyZXRjaCAmJiBncm91cC5hcnJheXN0cmV0Y2ggPCAxKSB7XG4gICAgLy8gQSBzbWFsbCBhcnJheS4gV3JhcCBpbiBzY3JpcHRzdHlsZSBzbyByb3cgZ2FwIGlzIG5vdCB0b28gbGFyZ2UuXG4gICAgdGFibGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1zdHlsZVwiLCBbdGFibGVdKTtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJzY3JpcHRsZXZlbFwiLCBcIjFcIik7XG4gIH1cblxuICByZXR1cm4gdGFibGU7XG59OyAvLyBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgYWxpZ25lZCBhbmQgYWxpZ25lZGF0IGVudmlyb25tZW50cy5cblxuXG52YXIgYXJyYXlfYWxpZ25lZEhhbmRsZXIgPSBmdW5jdGlvbiBhbGlnbmVkSGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gIHZhciBjb2xzID0gW107XG4gIHZhciByZXMgPSBwYXJzZUFycmF5KGNvbnRleHQucGFyc2VyLCB7XG4gICAgY29sczogY29scyxcbiAgICBhZGRKb3Q6IHRydWVcbiAgfSwgXCJkaXNwbGF5XCIpOyAvLyBEZXRlcm1pbmluZyBudW1iZXIgb2YgY29sdW1ucy5cbiAgLy8gMS4gSWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGdpdmVuLCB3ZSB1c2UgaXQgYXMgYSBudW1iZXIgb2YgY29sdW1ucyxcbiAgLy8gICAgYW5kIG1ha2VzIHN1cmUgdGhhdCBlYWNoIHJvdyBkb2Vzbid0IGV4Y2VlZCB0aGF0IG51bWJlci5cbiAgLy8gMi4gT3RoZXJ3aXNlLCBqdXN0IGNvdW50IG51bWJlciBvZiBjb2x1bW5zID0gbWF4aW11bSBudW1iZXJcbiAgLy8gICAgb2YgY2VsbHMgaW4gZWFjaCByb3cgKFwiYWxpZ25lZFwiIG1vZGUgLS0gaXNBbGlnbmVkIHdpbGwgYmUgdHJ1ZSkuXG4gIC8vXG4gIC8vIEF0IHRoZSBzYW1lIHRpbWUsIHByZXBlbmQgZW1wdHkgZ3JvdXAge30gYXQgYmVnaW5uaW5nIG9mIGV2ZXJ5IHNlY29uZFxuICAvLyBjZWxsIGluIGVhY2ggcm93IChzdGFydGluZyB3aXRoIHNlY29uZCBjZWxsKSBzbyB0aGF0IG9wZXJhdG9ycyBiZWNvbWVcbiAgLy8gYmluYXJ5LiAgVGhpcyBiZWhhdmlvciBpcyBpbXBsZW1lbnRlZCBpbiBhbXNtYXRoJ3MgXFxzdGFydEBhbGlnbmVkLlxuXG4gIHZhciBudW1NYXRocztcbiAgdmFyIG51bUNvbHMgPSAwO1xuICB2YXIgZW1wdHlHcm91cCA9IHtcbiAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgbW9kZTogY29udGV4dC5tb2RlLFxuICAgIGJvZHk6IFtdXG4gIH07XG4gIHZhciBvcmRncm91cCA9IGNoZWNrTm9kZVR5cGUoYXJnc1swXSwgXCJvcmRncm91cFwiKTtcblxuICBpZiAob3JkZ3JvdXApIHtcbiAgICB2YXIgYXJnMCA9IFwiXCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZGdyb3VwLmJvZHkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB0ZXh0b3JkID0gYXNzZXJ0Tm9kZVR5cGUob3JkZ3JvdXAuYm9keVtpXSwgXCJ0ZXh0b3JkXCIpO1xuICAgICAgYXJnMCArPSB0ZXh0b3JkLnRleHQ7XG4gICAgfVxuXG4gICAgbnVtTWF0aHMgPSBOdW1iZXIoYXJnMCk7XG4gICAgbnVtQ29scyA9IG51bU1hdGhzICogMjtcbiAgfVxuXG4gIHZhciBpc0FsaWduZWQgPSAhbnVtQ29scztcbiAgcmVzLmJvZHkuZm9yRWFjaChmdW5jdGlvbiAocm93KSB7XG4gICAgZm9yICh2YXIgX2kzID0gMTsgX2kzIDwgcm93Lmxlbmd0aDsgX2kzICs9IDIpIHtcbiAgICAgIC8vIE1vZGlmeSBvcmRncm91cCBub2RlIHdpdGhpbiBzdHlsaW5nIG5vZGVcbiAgICAgIHZhciBzdHlsaW5nID0gYXNzZXJ0Tm9kZVR5cGUocm93W19pM10sIFwic3R5bGluZ1wiKTtcblxuICAgICAgdmFyIF9vcmRncm91cCA9IGFzc2VydE5vZGVUeXBlKHN0eWxpbmcuYm9keVswXSwgXCJvcmRncm91cFwiKTtcblxuICAgICAgX29yZGdyb3VwLmJvZHkudW5zaGlmdChlbXB0eUdyb3VwKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzQWxpZ25lZCkge1xuICAgICAgLy8gQ2FzZSAxXG4gICAgICB2YXIgY3VyTWF0aHMgPSByb3cubGVuZ3RoIC8gMjtcblxuICAgICAgaWYgKG51bU1hdGhzIDwgY3VyTWF0aHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiVG9vIG1hbnkgbWF0aCBpbiBhIHJvdzogXCIgKyAoXCJleHBlY3RlZCBcIiArIG51bU1hdGhzICsgXCIsIGJ1dCBnb3QgXCIgKyBjdXJNYXRocyksIHJvd1swXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChudW1Db2xzIDwgcm93Lmxlbmd0aCkge1xuICAgICAgLy8gQ2FzZSAyXG4gICAgICBudW1Db2xzID0gcm93Lmxlbmd0aDtcbiAgICB9XG4gIH0pOyAvLyBBZGp1c3RpbmcgYWxpZ25tZW50LlxuICAvLyBJbiBhbGlnbmVkIG1vZGUsIHdlIGFkZCBvbmUgXFxxcXVhZCBiZXR3ZWVuIGNvbHVtbnM7XG4gIC8vIG90aGVyd2lzZSB3ZSBhZGQgbm90aGluZy5cblxuICBmb3IgKHZhciBfaTQgPSAwOyBfaTQgPCBudW1Db2xzOyArK19pNCkge1xuICAgIHZhciBhbGlnbiA9IFwiclwiO1xuICAgIHZhciBwcmVnYXAgPSAwO1xuXG4gICAgaWYgKF9pNCAlIDIgPT09IDEpIHtcbiAgICAgIGFsaWduID0gXCJsXCI7XG4gICAgfSBlbHNlIGlmIChfaTQgPiAwICYmIGlzQWxpZ25lZCkge1xuICAgICAgLy8gXCJhbGlnbmVkXCIgbW9kZS5cbiAgICAgIHByZWdhcCA9IDE7IC8vIGFkZCBvbmUgXFxxdWFkXG4gICAgfVxuXG4gICAgY29sc1tfaTRdID0ge1xuICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgYWxpZ246IGFsaWduLFxuICAgICAgcHJlZ2FwOiBwcmVnYXAsXG4gICAgICBwb3N0Z2FwOiAwXG4gICAgfTtcbiAgfVxuXG4gIHJlcy5jb2xTZXBhcmF0aW9uVHlwZSA9IGlzQWxpZ25lZCA/IFwiYWxpZ25cIiA6IFwiYWxpZ25hdFwiO1xuICByZXR1cm4gcmVzO1xufTsgLy8gQXJyYXlzIGFyZSBwYXJ0IG9mIExhVGVYLCBkZWZpbmVkIGluIGx0dGFiLmR0eCBzbyBpdHMgZG9jdW1lbnRhdGlvblxuLy8gaXMgcGFydCBvZiB0aGUgc291cmNlMmUucGRmIGZpbGUgb2YgTGFUZVgyZSBzb3VyY2UgZG9jdW1lbnRhdGlvbi5cbi8vIHtkYXJyYXl9IGlzIGFuIHthcnJheX0gZW52aXJvbm1lbnQgd2hlcmUgY2VsbHMgYXJlIHNldCBpbiBcXGRpc3BsYXlzdHlsZSxcbi8vIGFzIGRlZmluZWQgaW4gbmNjbWF0aC5zdHkuXG5cblxuZGVmaW5lRW52aXJvbm1lbnQoe1xuICB0eXBlOiBcImFycmF5XCIsXG4gIG5hbWVzOiBbXCJhcnJheVwiLCBcImRhcnJheVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoY29udGV4dCwgYXJncykge1xuICAgIC8vIFNpbmNlIG5vIHR5cGVzIGFyZSBzcGVjaWZpZWQgYWJvdmUsIHRoZSB0d28gcG9zc2liaWxpdGllcyBhcmVcbiAgICAvLyAtIFRoZSBhcmd1bWVudCBpcyB3cmFwcGVkIGluIHt9IG9yIFtdLCBpbiB3aGljaCBjYXNlIFBhcnNlcidzXG4gICAgLy8gICBwYXJzZUdyb3VwKCkgcmV0dXJucyBhbiBcIm9yZGdyb3VwXCIgd3JhcHBpbmcgc29tZSBzeW1ib2wgbm9kZS5cbiAgICAvLyAtIFRoZSBhcmd1bWVudCBpcyBhIGJhcmUgc3ltYm9sIG5vZGUuXG4gICAgdmFyIHN5bU5vZGUgPSBjaGVja1N5bWJvbE5vZGVUeXBlKGFyZ3NbMF0pO1xuICAgIHZhciBjb2xhbGlnbiA9IHN5bU5vZGUgPyBbYXJnc1swXV0gOiBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcIm9yZGdyb3VwXCIpLmJvZHk7XG4gICAgdmFyIGNvbHMgPSBjb2xhbGlnbi5tYXAoZnVuY3Rpb24gKG5kZSkge1xuICAgICAgdmFyIG5vZGUgPSBhc3NlcnRTeW1ib2xOb2RlVHlwZShuZGUpO1xuICAgICAgdmFyIGNhID0gbm9kZS50ZXh0O1xuXG4gICAgICBpZiAoXCJsY3JcIi5pbmRleE9mKGNhKSAhPT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiBcImFsaWduXCIsXG4gICAgICAgICAgYWxpZ246IGNhXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGNhID09PSBcInxcIikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IFwic2VwYXJhdG9yXCIsXG4gICAgICAgICAgc2VwYXJhdG9yOiBcInxcIlxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChjYSA9PT0gXCI6XCIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiBcInNlcGFyYXRvclwiLFxuICAgICAgICAgIHNlcGFyYXRvcjogXCI6XCJcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiVW5rbm93biBjb2x1bW4gYWxpZ25tZW50OiBcIiArIGNhLCBuZGUpO1xuICAgIH0pO1xuICAgIHZhciByZXMgPSB7XG4gICAgICBjb2xzOiBjb2xzLFxuICAgICAgaHNraXBCZWZvcmVBbmRBZnRlcjogdHJ1ZSAvLyBcXEBwcmVhbWJsZSBpbiBsdHRhYi5kdHhcblxuICAgIH07XG4gICAgcmV0dXJuIHBhcnNlQXJyYXkoY29udGV4dC5wYXJzZXIsIHJlcywgZENlbGxTdHlsZShjb250ZXh0LmVudk5hbWUpKTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGFycmF5X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhcnJheV9tYXRobWxCdWlsZGVyXG59KTsgLy8gVGhlIG1hdHJpeCBlbnZpcm9ubWVudHMgb2YgYW1zbWF0aCBidWlsZHMgb24gdGhlIGFycmF5IGVudmlyb25tZW50XG4vLyBvZiBMYVRlWCwgd2hpY2ggaXMgZGlzY3Vzc2VkIGFib3ZlLlxuXG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcIm1hdHJpeFwiLCBcInBtYXRyaXhcIiwgXCJibWF0cml4XCIsIFwiQm1hdHJpeFwiLCBcInZtYXRyaXhcIiwgXCJWbWF0cml4XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDBcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihjb250ZXh0KSB7XG4gICAgdmFyIGRlbGltaXRlcnMgPSB7XG4gICAgICBcIm1hdHJpeFwiOiBudWxsLFxuICAgICAgXCJwbWF0cml4XCI6IFtcIihcIiwgXCIpXCJdLFxuICAgICAgXCJibWF0cml4XCI6IFtcIltcIiwgXCJdXCJdLFxuICAgICAgXCJCbWF0cml4XCI6IFtcIlxcXFx7XCIsIFwiXFxcXH1cIl0sXG4gICAgICBcInZtYXRyaXhcIjogW1wifFwiLCBcInxcIl0sXG4gICAgICBcIlZtYXRyaXhcIjogW1wiXFxcXFZlcnRcIiwgXCJcXFxcVmVydFwiXVxuICAgIH1bY29udGV4dC5lbnZOYW1lXTsgLy8gXFxoc2tpcCAtXFxhcnJheWNvbHNlcCBpbiBhbXNtYXRoXG5cbiAgICB2YXIgcGF5bG9hZCA9IHtcbiAgICAgIGhza2lwQmVmb3JlQW5kQWZ0ZXI6IGZhbHNlXG4gICAgfTtcbiAgICB2YXIgcmVzID0gcGFyc2VBcnJheShjb250ZXh0LnBhcnNlciwgcGF5bG9hZCwgZENlbGxTdHlsZShjb250ZXh0LmVudk5hbWUpKTtcbiAgICByZXR1cm4gZGVsaW1pdGVycyA/IHtcbiAgICAgIHR5cGU6IFwibGVmdHJpZ2h0XCIsXG4gICAgICBtb2RlOiBjb250ZXh0Lm1vZGUsXG4gICAgICBib2R5OiBbcmVzXSxcbiAgICAgIGxlZnQ6IGRlbGltaXRlcnNbMF0sXG4gICAgICByaWdodDogZGVsaW1pdGVyc1sxXSxcbiAgICAgIHJpZ2h0Q29sb3I6IHVuZGVmaW5lZCAvLyBcXHJpZ2h0IHVuaW5mbHVlbmNlZCBieSBcXGNvbG9yIGluIGFycmF5XG5cbiAgICB9IDogcmVzO1xuICB9LFxuICBodG1sQnVpbGRlcjogYXJyYXlfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGFycmF5X21hdGhtbEJ1aWxkZXJcbn0pO1xuZGVmaW5lRW52aXJvbm1lbnQoe1xuICB0eXBlOiBcImFycmF5XCIsXG4gIG5hbWVzOiBbXCJzbWFsbG1hdHJpeFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoY29udGV4dCkge1xuICAgIHZhciBwYXlsb2FkID0ge1xuICAgICAgYXJyYXlzdHJldGNoOiAwLjVcbiAgICB9O1xuICAgIHZhciByZXMgPSBwYXJzZUFycmF5KGNvbnRleHQucGFyc2VyLCBwYXlsb2FkLCBcInNjcmlwdFwiKTtcbiAgICByZXMuY29sU2VwYXJhdGlvblR5cGUgPSBcInNtYWxsXCI7XG4gICAgcmV0dXJuIHJlcztcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGFycmF5X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhcnJheV9tYXRobWxCdWlsZGVyXG59KTtcbmRlZmluZUVudmlyb25tZW50KHtcbiAgdHlwZTogXCJhcnJheVwiLFxuICBuYW1lczogW1wic3ViYXJyYXlcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKGNvbnRleHQsIGFyZ3MpIHtcbiAgICAvLyBQYXJzaW5nIG9mIHtzdWJhcnJheX0gaXMgc2ltaWxhciB0byB7YXJyYXl9XG4gICAgdmFyIHN5bU5vZGUgPSBjaGVja1N5bWJvbE5vZGVUeXBlKGFyZ3NbMF0pO1xuICAgIHZhciBjb2xhbGlnbiA9IHN5bU5vZGUgPyBbYXJnc1swXV0gOiBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcIm9yZGdyb3VwXCIpLmJvZHk7XG4gICAgdmFyIGNvbHMgPSBjb2xhbGlnbi5tYXAoZnVuY3Rpb24gKG5kZSkge1xuICAgICAgdmFyIG5vZGUgPSBhc3NlcnRTeW1ib2xOb2RlVHlwZShuZGUpO1xuICAgICAgdmFyIGNhID0gbm9kZS50ZXh0OyAvLyB7c3ViYXJyYXl9IG9ubHkgcmVjb2duaXplcyBcImxcIiAmIFwiY1wiXG5cbiAgICAgIGlmIChcImxjXCIuaW5kZXhPZihjYSkgIT09IC0xKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgICAgIGFsaWduOiBjYVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJVbmtub3duIGNvbHVtbiBhbGlnbm1lbnQ6IFwiICsgY2EsIG5kZSk7XG4gICAgfSk7XG5cbiAgICBpZiAoY29scy5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJ7c3ViYXJyYXl9IGNhbiBjb250YWluIG9ubHkgb25lIGNvbHVtblwiKTtcbiAgICB9XG5cbiAgICB2YXIgcmVzID0ge1xuICAgICAgY29sczogY29scyxcbiAgICAgIGhza2lwQmVmb3JlQW5kQWZ0ZXI6IGZhbHNlLFxuICAgICAgYXJyYXlzdHJldGNoOiAwLjVcbiAgICB9O1xuICAgIHJlcyA9IHBhcnNlQXJyYXkoY29udGV4dC5wYXJzZXIsIHJlcywgXCJzY3JpcHRcIik7XG5cbiAgICBpZiAocmVzLmJvZHlbMF0ubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwie3N1YmFycmF5fSBjYW4gY29udGFpbiBvbmx5IG9uZSBjb2x1bW5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGFycmF5X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhcnJheV9tYXRobWxCdWlsZGVyXG59KTsgLy8gQSBjYXNlcyBlbnZpcm9ubWVudCAoaW4gYW1zbWF0aC5zdHkpIGlzIGFsbW9zdCBlcXVpdmFsZW50IHRvXG4vLyBcXGRlZlxcYXJyYXlzdHJldGNoezEuMn0lXG4vLyBcXGxlZnRcXHtcXGJlZ2lue2FycmF5fXtAe31sQHtcXHF1YWR9bEB7fX0g4oCmIFxcZW5ke2FycmF5fVxccmlnaHQuXG4vLyB7ZGNhc2VzfSBpcyBhIHtjYXNlc30gZW52aXJvbm1lbnQgd2hlcmUgY2VsbHMgYXJlIHNldCBpbiBcXGRpc3BsYXlzdHlsZSxcbi8vIGFzIGRlZmluZWQgaW4gbWF0aHRvb2xzLnN0eS5cblxuZGVmaW5lRW52aXJvbm1lbnQoe1xuICB0eXBlOiBcImFycmF5XCIsXG4gIG5hbWVzOiBbXCJjYXNlc1wiLCBcImRjYXNlc1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoY29udGV4dCkge1xuICAgIHZhciBwYXlsb2FkID0ge1xuICAgICAgYXJyYXlzdHJldGNoOiAxLjIsXG4gICAgICBjb2xzOiBbe1xuICAgICAgICB0eXBlOiBcImFsaWduXCIsXG4gICAgICAgIGFsaWduOiBcImxcIixcbiAgICAgICAgcHJlZ2FwOiAwLFxuICAgICAgICAvLyBUT0RPKGtldmluYikgZ2V0IHRoZSBjdXJyZW50IHN0eWxlLlxuICAgICAgICAvLyBGb3Igbm93IHdlIHVzZSB0aGUgbWV0cmljcyBmb3IgVEVYVCBzdHlsZSB3aGljaCBpcyB3aGF0IHdlIHdlcmVcbiAgICAgICAgLy8gZG9pbmcgYmVmb3JlLiAgQmVmb3JlIGF0dGVtcHRpbmcgdG8gZ2V0IHRoZSBjdXJyZW50IHN0eWxlIHdlXG4gICAgICAgIC8vIHNob3VsZCBsb29rIGF0IFRlWCdzIGJlaGF2aW9yIGVzcGVjaWFsbHkgZm9yIFxcb3ZlciBhbmQgbWF0cmljZXMuXG4gICAgICAgIHBvc3RnYXA6IDEuMFxuICAgICAgICAvKiAxZW0gcXVhZCAqL1xuXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiYWxpZ25cIixcbiAgICAgICAgYWxpZ246IFwibFwiLFxuICAgICAgICBwcmVnYXA6IDAsXG4gICAgICAgIHBvc3RnYXA6IDBcbiAgICAgIH1dXG4gICAgfTtcbiAgICB2YXIgcmVzID0gcGFyc2VBcnJheShjb250ZXh0LnBhcnNlciwgcGF5bG9hZCwgZENlbGxTdHlsZShjb250ZXh0LmVudk5hbWUpKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJsZWZ0cmlnaHRcIixcbiAgICAgIG1vZGU6IGNvbnRleHQubW9kZSxcbiAgICAgIGJvZHk6IFtyZXNdLFxuICAgICAgbGVmdDogXCJcXFxce1wiLFxuICAgICAgcmlnaHQ6IFwiLlwiLFxuICAgICAgcmlnaHRDb2xvcjogdW5kZWZpbmVkXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGFycmF5X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhcnJheV9tYXRobWxCdWlsZGVyXG59KTsgLy8gQW4gYWxpZ25lZCBlbnZpcm9ubWVudCBpcyBsaWtlIHRoZSBhbGlnbiogZW52aXJvbm1lbnRcbi8vIGV4Y2VwdCBpdCBvcGVyYXRlcyB3aXRoaW4gbWF0aCBtb2RlLlxuLy8gTm90ZSB0aGF0IHdlIGFzc3VtZSBcXG5vbWFsbGluZXNraXBsaW1pdCB0byBiZSB6ZXJvLFxuLy8gc28gdGhhdCBcXHN0cnV0QCBpcyB0aGUgc2FtZSBhcyBcXHN0cnV0LlxuXG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcImFsaWduZWRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuICBoYW5kbGVyOiBhcnJheV9hbGlnbmVkSGFuZGxlcixcbiAgaHRtbEJ1aWxkZXI6IGFycmF5X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhcnJheV9tYXRobWxCdWlsZGVyXG59KTsgLy8gQSBnYXRoZXJlZCBlbnZpcm9ubWVudCBpcyBsaWtlIGFuIGFycmF5IGVudmlyb25tZW50IHdpdGggb25lIGNlbnRlcmVkXG4vLyBjb2x1bW4sIGJ1dCB3aGVyZSByb3dzIGFyZSBjb25zaWRlcmVkIGxpbmVzIHNvIGdldCBcXGpvdCBsaW5lIHNwYWNpbmdcbi8vIGFuZCBjb250ZW50cyBhcmUgc2V0IGluIFxcZGlzcGxheXN0eWxlLlxuXG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcImdhdGhlcmVkXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDBcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihjb250ZXh0KSB7XG4gICAgdmFyIHJlcyA9IHtcbiAgICAgIGNvbHM6IFt7XG4gICAgICAgIHR5cGU6IFwiYWxpZ25cIixcbiAgICAgICAgYWxpZ246IFwiY1wiXG4gICAgICB9XSxcbiAgICAgIGFkZEpvdDogdHJ1ZVxuICAgIH07XG4gICAgcmV0dXJuIHBhcnNlQXJyYXkoY29udGV4dC5wYXJzZXIsIHJlcywgXCJkaXNwbGF5XCIpO1xuICB9LFxuICBodG1sQnVpbGRlcjogYXJyYXlfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGFycmF5X21hdGhtbEJ1aWxkZXJcbn0pOyAvLyBhbGlnbmF0IGVudmlyb25tZW50IGlzIGxpa2UgYW4gYWxpZ24gZW52aXJvbm1lbnQsIGJ1dCBvbmUgbXVzdCBleHBsaWNpdGx5XG4vLyBzcGVjaWZ5IG1heGltdW0gbnVtYmVyIG9mIGNvbHVtbnMgaW4gZWFjaCByb3csIGFuZCBjYW4gYWRqdXN0IHNwYWNpbmcgYmV0d2VlblxuLy8gZWFjaCBjb2x1bW5zLlxuXG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcImFsaWduZWRhdFwiXSxcbiAgLy8gT25lIGZvciBudW1iZXJlZCBhbmQgZm9yIHVubnVtYmVyZWQ7XG4gIC8vIGJ1dCwgS2FUZVggZG9lc24ndCBzdXBwb3J0cyBtYXRoIG51bWJlcmluZyB5ZXQsXG4gIC8vIHRoZXkgbWFrZSBubyBkaWZmZXJlbmNlIGZvciBub3cuXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiBhcnJheV9hbGlnbmVkSGFuZGxlcixcbiAgaHRtbEJ1aWxkZXI6IGFycmF5X2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBhcnJheV9tYXRobWxCdWlsZGVyXG59KTsgLy8gQ2F0Y2ggXFxobGluZSBvdXRzaWRlIGFycmF5IGVudmlyb25tZW50XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJ0ZXh0XCIsXG4gIC8vIERvZXNuJ3QgbWF0dGVyIHdoYXQgdGhpcyBpcy5cbiAgbmFtZXM6IFtcIlxcXFxobGluZVwiLCBcIlxcXFxoZGFzaGxpbmVcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGFsbG93ZWRJbk1hdGg6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKGNvbnRleHQuZnVuY05hbWUgKyBcIiB2YWxpZCBvbmx5IHdpdGhpbiBhcnJheSBlbnZpcm9ubWVudFwiKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9lbnZpcm9ubWVudHMuanNcblxudmFyIGVudmlyb25tZW50cyA9IF9lbnZpcm9ubWVudHM7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfZW52aXJvbm1lbnRzID0gKGVudmlyb25tZW50cyk7IC8vIEFsbCBlbnZpcm9ubWVudCBkZWZpbml0aW9ucyBzaG91bGQgYmUgaW1wb3J0ZWQgYmVsb3dcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvZW52aXJvbm1lbnQuanNcblxuXG5cbiAvLyBFbnZpcm9ubWVudCBkZWxpbWl0ZXJzLiBIVE1ML01hdGhNTCByZW5kZXJpbmcgaXMgZGVmaW5lZCBpbiB0aGUgY29ycmVzcG9uZGluZ1xuLy8gZGVmaW5lRW52aXJvbm1lbnQgZGVmaW5pdGlvbnMuXG4vLyAkRmxvd0ZpeE1lLCBcImVudmlyb25tZW50XCIgaGFuZGxlciByZXR1cm5zIGFuIGVudmlyb25tZW50IFBhcnNlTm9kZVxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiZW52aXJvbm1lbnRcIixcbiAgbmFtZXM6IFtcIlxcXFxiZWdpblwiLCBcIlxcXFxlbmRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1widGV4dFwiXVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZi5wYXJzZXIsXG4gICAgICAgIGZ1bmNOYW1lID0gX3JlZi5mdW5jTmFtZTtcbiAgICB2YXIgbmFtZUdyb3VwID0gYXJnc1swXTtcblxuICAgIGlmIChuYW1lR3JvdXAudHlwZSAhPT0gXCJvcmRncm91cFwiKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJJbnZhbGlkIGVudmlyb25tZW50IG5hbWVcIiwgbmFtZUdyb3VwKTtcbiAgICB9XG5cbiAgICB2YXIgZW52TmFtZSA9IFwiXCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVHcm91cC5ib2R5Lmxlbmd0aDsgKytpKSB7XG4gICAgICBlbnZOYW1lICs9IGFzc2VydE5vZGVUeXBlKG5hbWVHcm91cC5ib2R5W2ldLCBcInRleHRvcmRcIikudGV4dDtcbiAgICB9XG5cbiAgICBpZiAoZnVuY05hbWUgPT09IFwiXFxcXGJlZ2luXCIpIHtcbiAgICAgIC8vIGJlZ2luLi4uZW5kIGlzIHNpbWlsYXIgdG8gbGVmdC4uLnJpZ2h0XG4gICAgICBpZiAoIXNyY19lbnZpcm9ubWVudHMuaGFzT3duUHJvcGVydHkoZW52TmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiTm8gc3VjaCBlbnZpcm9ubWVudDogXCIgKyBlbnZOYW1lLCBuYW1lR3JvdXApO1xuICAgICAgfSAvLyBCdWlsZCB0aGUgZW52aXJvbm1lbnQgb2JqZWN0LiBBcmd1bWVudHMgYW5kIG90aGVyIGluZm9ybWF0aW9uIHdpbGxcbiAgICAgIC8vIGJlIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBiZWdpbiBhbmQgZW5kIG1ldGhvZHMgdXNpbmcgcHJvcGVydGllcy5cblxuXG4gICAgICB2YXIgZW52ID0gc3JjX2Vudmlyb25tZW50c1tlbnZOYW1lXTtcblxuICAgICAgdmFyIF9wYXJzZXIkcGFyc2VBcmd1bWVudCA9IHBhcnNlci5wYXJzZUFyZ3VtZW50cyhcIlxcXFxiZWdpbntcIiArIGVudk5hbWUgKyBcIn1cIiwgZW52KSxcbiAgICAgICAgICBfYXJncyA9IF9wYXJzZXIkcGFyc2VBcmd1bWVudC5hcmdzLFxuICAgICAgICAgIG9wdEFyZ3MgPSBfcGFyc2VyJHBhcnNlQXJndW1lbnQub3B0QXJncztcblxuICAgICAgdmFyIGNvbnRleHQgPSB7XG4gICAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgICBlbnZOYW1lOiBlbnZOYW1lLFxuICAgICAgICBwYXJzZXI6IHBhcnNlclxuICAgICAgfTtcbiAgICAgIHZhciByZXN1bHQgPSBlbnYuaGFuZGxlcihjb250ZXh0LCBfYXJncywgb3B0QXJncyk7XG4gICAgICBwYXJzZXIuZXhwZWN0KFwiXFxcXGVuZFwiLCBmYWxzZSk7XG4gICAgICB2YXIgZW5kTmFtZVRva2VuID0gcGFyc2VyLm5leHRUb2tlbjtcbiAgICAgIHZhciBlbmQgPSBhc3NlcnROb2RlVHlwZShwYXJzZXIucGFyc2VGdW5jdGlvbigpLCBcImVudmlyb25tZW50XCIpO1xuXG4gICAgICBpZiAoZW5kLm5hbWUgIT09IGVudk5hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiTWlzbWF0Y2g6IFxcXFxiZWdpbntcIiArIGVudk5hbWUgKyBcIn0gbWF0Y2hlZCBieSBcXFxcZW5ke1wiICsgZW5kLm5hbWUgKyBcIn1cIiwgZW5kTmFtZVRva2VuKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJlbnZpcm9ubWVudFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBuYW1lOiBlbnZOYW1lLFxuICAgICAgbmFtZUdyb3VwOiBuYW1lR3JvdXBcbiAgICB9O1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9tY2xhc3MuanNcblxuXG5cblxuXG5cbnZhciBtY2xhc3NfbWFrZVNwYW4gPSBidWlsZENvbW1vbi5tYWtlU3BhbjtcblxuZnVuY3Rpb24gbWNsYXNzX2h0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gIHZhciBlbGVtZW50cyA9IGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucywgdHJ1ZSk7XG4gIHJldHVybiBtY2xhc3NfbWFrZVNwYW4oW2dyb3VwLm1jbGFzc10sIGVsZW1lbnRzLCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gbWNsYXNzX21hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIG5vZGU7XG4gIHZhciBpbm5lciA9IGJ1aWxkTWF0aE1MX2J1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zKTtcblxuICBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1pbm5lclwiKSB7XG4gICAgcmV0dXJuIG1hdGhNTFRyZWUubmV3RG9jdW1lbnRGcmFnbWVudChpbm5lcik7XG4gIH0gZWxzZSBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1vcmRcIikge1xuICAgIGlmIChncm91cC5pc0NoYXJhY3RlckJveCkge1xuICAgICAgbm9kZSA9IGlubmVyWzBdO1xuICAgICAgbm9kZS50eXBlID0gXCJtaVwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtaVwiLCBpbm5lcik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChncm91cC5pc0NoYXJhY3RlckJveCkge1xuICAgICAgbm9kZSA9IGlubmVyWzBdO1xuICAgICAgbm9kZS50eXBlID0gXCJtb1wiO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBpbm5lcik7XG4gICAgfSAvLyBTZXQgc3BhY2luZyBiYXNlZCBvbiB3aGF0IGlzIHRoZSBtb3N0IGxpa2VseSBhZGphY2VudCBhdG9tIHR5cGUuXG4gICAgLy8gU2VlIFRlWGJvb2sgcDE3MC5cblxuXG4gICAgaWYgKGdyb3VwLm1jbGFzcyA9PT0gXCJtYmluXCIpIHtcbiAgICAgIG5vZGUuYXR0cmlidXRlcy5sc3BhY2UgPSBcIjAuMjJlbVwiOyAvLyBtZWRpdW0gc3BhY2VcblxuICAgICAgbm9kZS5hdHRyaWJ1dGVzLnJzcGFjZSA9IFwiMC4yMmVtXCI7XG4gICAgfSBlbHNlIGlmIChncm91cC5tY2xhc3MgPT09IFwibXB1bmN0XCIpIHtcbiAgICAgIG5vZGUuYXR0cmlidXRlcy5sc3BhY2UgPSBcIjBlbVwiO1xuICAgICAgbm9kZS5hdHRyaWJ1dGVzLnJzcGFjZSA9IFwiMC4xN2VtXCI7IC8vIHRoaW5zcGFjZVxuICAgIH0gZWxzZSBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1vcGVuXCIgfHwgZ3JvdXAubWNsYXNzID09PSBcIm1jbG9zZVwiKSB7XG4gICAgICBub2RlLmF0dHJpYnV0ZXMubHNwYWNlID0gXCIwZW1cIjtcbiAgICAgIG5vZGUuYXR0cmlidXRlcy5yc3BhY2UgPSBcIjBlbVwiO1xuICAgIH0gLy8gTWF0aE1MIDxtbz4gZGVmYXVsdCBzcGFjZSBpcyA1LzE4IGVtLCBzbyA8bXJlbD4gbmVlZHMgbm8gYWN0aW9uLlxuICAgIC8vIFJlZjogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvTWF0aE1ML0VsZW1lbnQvbW9cblxuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59IC8vIE1hdGggY2xhc3MgY29tbWFuZHMgZXhjZXB0IFxcbWF0aG9wXG5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcIm1jbGFzc1wiLFxuICBuYW1lczogW1wiXFxcXG1hdGhvcmRcIiwgXCJcXFxcbWF0aGJpblwiLCBcIlxcXFxtYXRocmVsXCIsIFwiXFxcXG1hdGhvcGVuXCIsIFwiXFxcXG1hdGhjbG9zZVwiLCBcIlxcXFxtYXRocHVuY3RcIiwgXCJcXFxcbWF0aGlubmVyXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWYuZnVuY05hbWU7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm1jbGFzc1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBtY2xhc3M6IFwibVwiICsgZnVuY05hbWUuc3Vic3RyKDUpLFxuICAgICAgLy8gVE9ETyhrZXZpbmIpOiBkb24ndCBwcmVmaXggd2l0aCAnbSdcbiAgICAgIGJvZHk6IGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGJvZHkpLFxuICAgICAgaXNDaGFyYWN0ZXJCb3g6IHV0aWxzLmlzQ2hhcmFjdGVyQm94KGJvZHkpXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IG1jbGFzc19odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogbWNsYXNzX21hdGhtbEJ1aWxkZXJcbn0pO1xudmFyIGJpbnJlbENsYXNzID0gZnVuY3Rpb24gYmlucmVsQ2xhc3MoYXJnKSB7XG4gIC8vIFxcYmlucmVsQCBzcGFjaW5nIHZhcmllcyB3aXRoIChiaW58cmVsfG9yZCkgb2YgdGhlIGF0b20gaW4gdGhlIGFyZ3VtZW50LlxuICAvLyAoYnkgcmVuZGVyaW5nIHNlcGFyYXRlbHkgYW5kIHdpdGgge31zIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZCBtZWFzdXJpbmdcbiAgLy8gdGhlIGNoYW5nZSBpbiBzcGFjaW5nKS4gIFdlJ2xsIGRvIHJvdWdobHkgdGhlIHNhbWUgYnkgZGV0ZWN0aW5nIHRoZVxuICAvLyBhdG9tIHR5cGUgZGlyZWN0bHkuXG4gIHZhciBhdG9tID0gYXJnLnR5cGUgPT09IFwib3JkZ3JvdXBcIiAmJiBhcmcuYm9keS5sZW5ndGggPyBhcmcuYm9keVswXSA6IGFyZztcblxuICBpZiAoYXRvbS50eXBlID09PSBcImF0b21cIiAmJiAoYXRvbS5mYW1pbHkgPT09IFwiYmluXCIgfHwgYXRvbS5mYW1pbHkgPT09IFwicmVsXCIpKSB7XG4gICAgcmV0dXJuIFwibVwiICsgYXRvbS5mYW1pbHk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwibW9yZFwiO1xuICB9XG59OyAvLyBcXEBiaW5yZWx7eH17eX0gcmVuZGVycyBsaWtlIHkgYnV0IGFzIG1iaW4vbXJlbC9tb3JkIGlmIHggaXMgbWJpbi9tcmVsL21vcmQuXG4vLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gXFxiaW5yZWxAe3h9XFxiaW5yZWxAQHt5fSBpbiBBTVNUZVguXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJtY2xhc3NcIixcbiAgbmFtZXM6IFtcIlxcXFxAYmlucmVsXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDJcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmMiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmMi5wYXJzZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwibWNsYXNzXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG1jbGFzczogYmlucmVsQ2xhc3MoYXJnc1swXSksXG4gICAgICBib2R5OiBbYXJnc1sxXV0sXG4gICAgICBpc0NoYXJhY3RlckJveDogdXRpbHMuaXNDaGFyYWN0ZXJCb3goYXJnc1sxXSlcbiAgICB9O1xuICB9XG59KTsgLy8gQnVpbGQgYSByZWxhdGlvbiBvciBzdGFja2VkIG9wIGJ5IHBsYWNpbmcgb25lIHN5bWJvbCBvbiB0b3Agb2YgYW5vdGhlclxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibWNsYXNzXCIsXG4gIG5hbWVzOiBbXCJcXFxcc3RhY2tyZWxcIiwgXCJcXFxcb3ZlcnNldFwiLCBcIlxcXFx1bmRlcnNldFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZjMsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZjMucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWYzLmZ1bmNOYW1lO1xuICAgIHZhciBiYXNlQXJnID0gYXJnc1sxXTtcbiAgICB2YXIgc2hpZnRlZEFyZyA9IGFyZ3NbMF07XG4gICAgdmFyIG1jbGFzcztcblxuICAgIGlmIChmdW5jTmFtZSAhPT0gXCJcXFxcc3RhY2tyZWxcIikge1xuICAgICAgLy8gTGFUZVggYXBwbGllcyBcXGJpbnJlbCBzcGFjaW5nIHRvIFxcb3ZlcnNldCBhbmQgXFx1bmRlcnNldC5cbiAgICAgIG1jbGFzcyA9IGJpbnJlbENsYXNzKGJhc2VBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtY2xhc3MgPSBcIm1yZWxcIjsgLy8gZm9yIFxcc3RhY2tyZWxcbiAgICB9XG5cbiAgICB2YXIgYmFzZU9wID0ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogYmFzZUFyZy5tb2RlLFxuICAgICAgbGltaXRzOiB0cnVlLFxuICAgICAgYWx3YXlzSGFuZGxlU3VwU3ViOiB0cnVlLFxuICAgICAgcGFyZW50SXNTdXBTdWI6IGZhbHNlLFxuICAgICAgc3ltYm9sOiBmYWxzZSxcbiAgICAgIHN1cHByZXNzQmFzZVNoaWZ0OiBmdW5jTmFtZSAhPT0gXCJcXFxcc3RhY2tyZWxcIixcbiAgICAgIGJvZHk6IGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGJhc2VBcmcpXG4gICAgfTtcbiAgICB2YXIgc3Vwc3ViID0ge1xuICAgICAgdHlwZTogXCJzdXBzdWJcIixcbiAgICAgIG1vZGU6IHNoaWZ0ZWRBcmcubW9kZSxcbiAgICAgIGJhc2U6IGJhc2VPcCxcbiAgICAgIHN1cDogZnVuY05hbWUgPT09IFwiXFxcXHVuZGVyc2V0XCIgPyBudWxsIDogc2hpZnRlZEFyZyxcbiAgICAgIHN1YjogZnVuY05hbWUgPT09IFwiXFxcXHVuZGVyc2V0XCIgPyBzaGlmdGVkQXJnIDogbnVsbFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwibWNsYXNzXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG1jbGFzczogbWNsYXNzLFxuICAgICAgYm9keTogW3N1cHN1Yl0sXG4gICAgICBpc0NoYXJhY3RlckJveDogdXRpbHMuaXNDaGFyYWN0ZXJCb3goc3Vwc3ViKVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBtY2xhc3NfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IG1jbGFzc19tYXRobWxCdWlsZGVyXG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9mb250LmpzXG4vLyBUT0RPKGtldmluYik6IGltcGxlbWVudCBcXFxcc2wgYW5kIFxcXFxzY1xuXG5cblxuXG5cblxudmFyIGZvbnRfaHRtbEJ1aWxkZXIgPSBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICB2YXIgZm9udCA9IGdyb3VwLmZvbnQ7XG4gIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy53aXRoRm9udChmb250KTtcbiAgcmV0dXJuIGJ1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG5ld09wdGlvbnMpO1xufTtcblxudmFyIGZvbnRfbWF0aG1sQnVpbGRlciA9IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIGZvbnQgPSBncm91cC5mb250O1xuICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMud2l0aEZvbnQoZm9udCk7XG4gIHJldHVybiBidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG5ld09wdGlvbnMpO1xufTtcblxudmFyIGZvbnRBbGlhc2VzID0ge1xuICBcIlxcXFxCYmJcIjogXCJcXFxcbWF0aGJiXCIsXG4gIFwiXFxcXGJvbGRcIjogXCJcXFxcbWF0aGJmXCIsXG4gIFwiXFxcXGZyYWtcIjogXCJcXFxcbWF0aGZyYWtcIixcbiAgXCJcXFxcYm1cIjogXCJcXFxcYm9sZHN5bWJvbFwiXG59O1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImZvbnRcIixcbiAgbmFtZXM6IFsvLyBzdHlsZXMsIGV4Y2VwdCBcXGJvbGRzeW1ib2wgZGVmaW5lZCBiZWxvd1xuICBcIlxcXFxtYXRocm1cIiwgXCJcXFxcbWF0aGl0XCIsIFwiXFxcXG1hdGhiZlwiLCBcIlxcXFxtYXRobm9ybWFsXCIsIC8vIGZhbWlsaWVzXG4gIFwiXFxcXG1hdGhiYlwiLCBcIlxcXFxtYXRoY2FsXCIsIFwiXFxcXG1hdGhmcmFrXCIsIFwiXFxcXG1hdGhzY3JcIiwgXCJcXFxcbWF0aHNmXCIsIFwiXFxcXG1hdGh0dFwiLCAvLyBhbGlhc2VzLCBleGNlcHQgXFxibSBkZWZpbmVkIGJlbG93XG4gIFwiXFxcXEJiYlwiLCBcIlxcXFxib2xkXCIsIFwiXFxcXGZyYWtcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBncmVlZGluZXNzOiAyXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICB2YXIgZnVuYyA9IGZ1bmNOYW1lO1xuXG4gICAgaWYgKGZ1bmMgaW4gZm9udEFsaWFzZXMpIHtcbiAgICAgIGZ1bmMgPSBmb250QWxpYXNlc1tmdW5jXTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJmb250XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGZvbnQ6IGZ1bmMuc2xpY2UoMSksXG4gICAgICBib2R5OiBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZvbnRfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGZvbnRfbWF0aG1sQnVpbGRlclxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibWNsYXNzXCIsXG4gIG5hbWVzOiBbXCJcXFxcYm9sZHN5bWJvbFwiLCBcIlxcXFxibVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGdyZWVkaW5lc3M6IDJcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmMiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmMi5wYXJzZXI7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHZhciBpc0NoYXJhY3RlckJveCA9IHV0aWxzLmlzQ2hhcmFjdGVyQm94KGJvZHkpOyAvLyBhbXNic3kuc3R5J3MgXFxib2xkc3ltYm9sIHVzZXMgXFxiaW5yZWwgc3BhY2luZyB0byBpbmhlcml0IHRoZVxuICAgIC8vIGFyZ3VtZW50J3MgYmlufHJlbHxvcmQgc3RhdHVzXG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJtY2xhc3NcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbWNsYXNzOiBiaW5yZWxDbGFzcyhib2R5KSxcbiAgICAgIGJvZHk6IFt7XG4gICAgICAgIHR5cGU6IFwiZm9udFwiLFxuICAgICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgICAgZm9udDogXCJib2xkc3ltYm9sXCIsXG4gICAgICAgIGJvZHk6IGJvZHlcbiAgICAgIH1dLFxuICAgICAgaXNDaGFyYWN0ZXJCb3g6IGlzQ2hhcmFjdGVyQm94XG4gICAgfTtcbiAgfVxufSk7IC8vIE9sZCBmb250IGNoYW5naW5nIGZ1bmN0aW9uc1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiZm9udFwiLFxuICBuYW1lczogW1wiXFxcXHJtXCIsIFwiXFxcXHNmXCIsIFwiXFxcXHR0XCIsIFwiXFxcXGJmXCIsIFwiXFxcXGl0XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYzLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYzLnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmMy5mdW5jTmFtZSxcbiAgICAgICAgYnJlYWtPblRva2VuVGV4dCA9IF9yZWYzLmJyZWFrT25Ub2tlblRleHQ7XG4gICAgdmFyIG1vZGUgPSBwYXJzZXIubW9kZTtcbiAgICB2YXIgYm9keSA9IHBhcnNlci5wYXJzZUV4cHJlc3Npb24odHJ1ZSwgYnJlYWtPblRva2VuVGV4dCk7XG4gICAgdmFyIHN0eWxlID0gXCJtYXRoXCIgKyBmdW5jTmFtZS5zbGljZSgxKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJmb250XCIsXG4gICAgICBtb2RlOiBtb2RlLFxuICAgICAgZm9udDogc3R5bGUsXG4gICAgICBib2R5OiB7XG4gICAgICAgIHR5cGU6IFwib3JkZ3JvdXBcIixcbiAgICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICAgIGJvZHk6IGJvZHlcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZm9udF9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogZm9udF9tYXRobWxCdWlsZGVyXG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9nZW5mcmFjLmpzXG5cblxuXG5cblxuXG5cblxuXG5cblxudmFyIGdlbmZyYWNfYWRqdXN0U3R5bGUgPSBmdW5jdGlvbiBhZGp1c3RTdHlsZShzaXplLCBvcmlnaW5hbFN0eWxlKSB7XG4gIC8vIEZpZ3VyZSBvdXQgd2hhdCBzdHlsZSB0aGlzIGZyYWN0aW9uIHNob3VsZCBiZSBpbiBiYXNlZCBvbiB0aGVcbiAgLy8gZnVuY3Rpb24gdXNlZFxuICB2YXIgc3R5bGUgPSBvcmlnaW5hbFN0eWxlO1xuXG4gIGlmIChzaXplID09PSBcImRpc3BsYXlcIikge1xuICAgIC8vIEdldCBkaXNwbGF5IHN0eWxlIGFzIGEgZGVmYXVsdC5cbiAgICAvLyBJZiBpbmNvbWluZyBzdHlsZSBpcyBzdWIvc3VwLCB1c2Ugc3R5bGUudGV4dCgpIHRvIGdldCBjb3JyZWN0IHNpemUuXG4gICAgc3R5bGUgPSBzdHlsZS5pZCA+PSBzcmNfU3R5bGUuU0NSSVBULmlkID8gc3R5bGUudGV4dCgpIDogc3JjX1N0eWxlLkRJU1BMQVk7XG4gIH0gZWxzZSBpZiAoc2l6ZSA9PT0gXCJ0ZXh0XCIgJiYgc3R5bGUuc2l6ZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkuc2l6ZSkge1xuICAgIC8vIFdlJ3JlIGluIGEgXFx0ZnJhYyBidXQgaW5jb21pbmcgc3R5bGUgaXMgZGlzcGxheXN0eWxlLCBzbzpcbiAgICBzdHlsZSA9IHNyY19TdHlsZS5URVhUO1xuICB9IGVsc2UgaWYgKHNpemUgPT09IFwic2NyaXB0XCIpIHtcbiAgICBzdHlsZSA9IHNyY19TdHlsZS5TQ1JJUFQ7XG4gIH0gZWxzZSBpZiAoc2l6ZSA9PT0gXCJzY3JpcHRzY3JpcHRcIikge1xuICAgIHN0eWxlID0gc3JjX1N0eWxlLlNDUklQVFNDUklQVDtcbiAgfVxuXG4gIHJldHVybiBzdHlsZTtcbn07XG5cbnZhciBnZW5mcmFjX2h0bWxCdWlsZGVyID0gZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgLy8gRnJhY3Rpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBUZVhib29rIG9uIHBhZ2VzIDQ0NC00NDUsIHJ1bGVzIDE1KGEtZSkuXG4gIHZhciBzdHlsZSA9IGdlbmZyYWNfYWRqdXN0U3R5bGUoZ3JvdXAuc2l6ZSwgb3B0aW9ucy5zdHlsZSk7XG4gIHZhciBuc3R5bGUgPSBzdHlsZS5mcmFjTnVtKCk7XG4gIHZhciBkc3R5bGUgPSBzdHlsZS5mcmFjRGVuKCk7XG4gIHZhciBuZXdPcHRpb25zO1xuICBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShuc3R5bGUpO1xuICB2YXIgbnVtZXJtID0gYnVpbGRIVE1MX2J1aWxkR3JvdXAoZ3JvdXAubnVtZXIsIG5ld09wdGlvbnMsIG9wdGlvbnMpO1xuXG4gIGlmIChncm91cC5jb250aW51ZWQpIHtcbiAgICAvLyBcXGNmcmFjIGluc2VydHMgYSBcXHN0cnV0IGludG8gdGhlIG51bWVyYXRvci5cbiAgICAvLyBHZXQgXFxzdHJ1dCBkaW1lbnNpb25zIGZyb20gVGVYYm9vayBwYWdlIDM1My5cbiAgICB2YXIgaFN0cnV0ID0gOC41IC8gb3B0aW9ucy5mb250TWV0cmljcygpLnB0UGVyRW07XG4gICAgdmFyIGRTdHJ1dCA9IDMuNSAvIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5wdFBlckVtO1xuICAgIG51bWVybS5oZWlnaHQgPSBudW1lcm0uaGVpZ2h0IDwgaFN0cnV0ID8gaFN0cnV0IDogbnVtZXJtLmhlaWdodDtcbiAgICBudW1lcm0uZGVwdGggPSBudW1lcm0uZGVwdGggPCBkU3RydXQgPyBkU3RydXQgOiBudW1lcm0uZGVwdGg7XG4gIH1cblxuICBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShkc3R5bGUpO1xuICB2YXIgZGVub21tID0gYnVpbGRIVE1MX2J1aWxkR3JvdXAoZ3JvdXAuZGVub20sIG5ld09wdGlvbnMsIG9wdGlvbnMpO1xuICB2YXIgcnVsZTtcbiAgdmFyIHJ1bGVXaWR0aDtcbiAgdmFyIHJ1bGVTcGFjaW5nO1xuXG4gIGlmIChncm91cC5oYXNCYXJMaW5lKSB7XG4gICAgaWYgKGdyb3VwLmJhclNpemUpIHtcbiAgICAgIHJ1bGVXaWR0aCA9IHVuaXRzX2NhbGN1bGF0ZVNpemUoZ3JvdXAuYmFyU2l6ZSwgb3B0aW9ucyk7XG4gICAgICBydWxlID0gYnVpbGRDb21tb24ubWFrZUxpbmVTcGFuKFwiZnJhYy1saW5lXCIsIG9wdGlvbnMsIHJ1bGVXaWR0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJ1bGUgPSBidWlsZENvbW1vbi5tYWtlTGluZVNwYW4oXCJmcmFjLWxpbmVcIiwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcnVsZVdpZHRoID0gcnVsZS5oZWlnaHQ7XG4gICAgcnVsZVNwYWNpbmcgPSBydWxlLmhlaWdodDtcbiAgfSBlbHNlIHtcbiAgICBydWxlID0gbnVsbDtcbiAgICBydWxlV2lkdGggPSAwO1xuICAgIHJ1bGVTcGFjaW5nID0gb3B0aW9ucy5mb250TWV0cmljcygpLmRlZmF1bHRSdWxlVGhpY2tuZXNzO1xuICB9IC8vIFJ1bGUgMTViXG5cblxuICB2YXIgbnVtU2hpZnQ7XG4gIHZhciBjbGVhcmFuY2U7XG4gIHZhciBkZW5vbVNoaWZ0O1xuXG4gIGlmIChzdHlsZS5zaXplID09PSBzcmNfU3R5bGUuRElTUExBWS5zaXplIHx8IGdyb3VwLnNpemUgPT09IFwiZGlzcGxheVwiKSB7XG4gICAgbnVtU2hpZnQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkubnVtMTtcblxuICAgIGlmIChydWxlV2lkdGggPiAwKSB7XG4gICAgICBjbGVhcmFuY2UgPSAzICogcnVsZVNwYWNpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFyYW5jZSA9IDcgKiBydWxlU3BhY2luZztcbiAgICB9XG5cbiAgICBkZW5vbVNoaWZ0ID0gb3B0aW9ucy5mb250TWV0cmljcygpLmRlbm9tMTtcbiAgfSBlbHNlIHtcbiAgICBpZiAocnVsZVdpZHRoID4gMCkge1xuICAgICAgbnVtU2hpZnQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkubnVtMjtcbiAgICAgIGNsZWFyYW5jZSA9IHJ1bGVTcGFjaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBudW1TaGlmdCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5udW0zO1xuICAgICAgY2xlYXJhbmNlID0gMyAqIHJ1bGVTcGFjaW5nO1xuICAgIH1cblxuICAgIGRlbm9tU2hpZnQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVub20yO1xuICB9XG5cbiAgdmFyIGZyYWM7XG5cbiAgaWYgKCFydWxlKSB7XG4gICAgLy8gUnVsZSAxNWNcbiAgICB2YXIgY2FuZGlkYXRlQ2xlYXJhbmNlID0gbnVtU2hpZnQgLSBudW1lcm0uZGVwdGggLSAoZGVub21tLmhlaWdodCAtIGRlbm9tU2hpZnQpO1xuXG4gICAgaWYgKGNhbmRpZGF0ZUNsZWFyYW5jZSA8IGNsZWFyYW5jZSkge1xuICAgICAgbnVtU2hpZnQgKz0gMC41ICogKGNsZWFyYW5jZSAtIGNhbmRpZGF0ZUNsZWFyYW5jZSk7XG4gICAgICBkZW5vbVNoaWZ0ICs9IDAuNSAqIChjbGVhcmFuY2UgLSBjYW5kaWRhdGVDbGVhcmFuY2UpO1xuICAgIH1cblxuICAgIGZyYWMgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBkZW5vbW0sXG4gICAgICAgIHNoaWZ0OiBkZW5vbVNoaWZ0XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBudW1lcm0sXG4gICAgICAgIHNoaWZ0OiAtbnVtU2hpZnRcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gUnVsZSAxNWRcbiAgICB2YXIgYXhpc0hlaWdodCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O1xuXG4gICAgaWYgKG51bVNoaWZ0IC0gbnVtZXJtLmRlcHRoIC0gKGF4aXNIZWlnaHQgKyAwLjUgKiBydWxlV2lkdGgpIDwgY2xlYXJhbmNlKSB7XG4gICAgICBudW1TaGlmdCArPSBjbGVhcmFuY2UgLSAobnVtU2hpZnQgLSBudW1lcm0uZGVwdGggLSAoYXhpc0hlaWdodCArIDAuNSAqIHJ1bGVXaWR0aCkpO1xuICAgIH1cblxuICAgIGlmIChheGlzSGVpZ2h0IC0gMC41ICogcnVsZVdpZHRoIC0gKGRlbm9tbS5oZWlnaHQgLSBkZW5vbVNoaWZ0KSA8IGNsZWFyYW5jZSkge1xuICAgICAgZGVub21TaGlmdCArPSBjbGVhcmFuY2UgLSAoYXhpc0hlaWdodCAtIDAuNSAqIHJ1bGVXaWR0aCAtIChkZW5vbW0uaGVpZ2h0IC0gZGVub21TaGlmdCkpO1xuICAgIH1cblxuICAgIHZhciBtaWRTaGlmdCA9IC0oYXhpc0hlaWdodCAtIDAuNSAqIHJ1bGVXaWR0aCk7XG4gICAgZnJhYyA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGRlbm9tbSxcbiAgICAgICAgc2hpZnQ6IGRlbm9tU2hpZnRcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHJ1bGUsXG4gICAgICAgIHNoaWZ0OiBtaWRTaGlmdFxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogbnVtZXJtLFxuICAgICAgICBzaGlmdDogLW51bVNoaWZ0XG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICB9IC8vIFNpbmNlIHdlIG1hbnVhbGx5IGNoYW5nZSB0aGUgc3R5bGUgc29tZXRpbWVzICh3aXRoIFxcZGZyYWMgb3IgXFx0ZnJhYyksXG4gIC8vIGFjY291bnQgZm9yIHRoZSBwb3NzaWJsZSBzaXplIGNoYW5nZSBoZXJlLlxuXG5cbiAgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoc3R5bGUpO1xuICBmcmFjLmhlaWdodCAqPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgZnJhYy5kZXB0aCAqPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjsgLy8gUnVsZSAxNWVcblxuICB2YXIgZGVsaW1TaXplO1xuXG4gIGlmIChzdHlsZS5zaXplID09PSBzcmNfU3R5bGUuRElTUExBWS5zaXplKSB7XG4gICAgZGVsaW1TaXplID0gb3B0aW9ucy5mb250TWV0cmljcygpLmRlbGltMTtcbiAgfSBlbHNlIHtcbiAgICBkZWxpbVNpemUgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVsaW0yO1xuICB9XG5cbiAgdmFyIGxlZnREZWxpbTtcbiAgdmFyIHJpZ2h0RGVsaW07XG5cbiAgaWYgKGdyb3VwLmxlZnREZWxpbSA9PSBudWxsKSB7XG4gICAgbGVmdERlbGltID0gbWFrZU51bGxEZWxpbWl0ZXIob3B0aW9ucywgW1wibW9wZW5cIl0pO1xuICB9IGVsc2Uge1xuICAgIGxlZnREZWxpbSA9IGRlbGltaXRlci5jdXN0b21TaXplZERlbGltKGdyb3VwLmxlZnREZWxpbSwgZGVsaW1TaXplLCB0cnVlLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlKSwgZ3JvdXAubW9kZSwgW1wibW9wZW5cIl0pO1xuICB9XG5cbiAgaWYgKGdyb3VwLmNvbnRpbnVlZCkge1xuICAgIHJpZ2h0RGVsaW0gPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXSk7IC8vIHplcm8gd2lkdGggZm9yIFxcY2ZyYWNcbiAgfSBlbHNlIGlmIChncm91cC5yaWdodERlbGltID09IG51bGwpIHtcbiAgICByaWdodERlbGltID0gbWFrZU51bGxEZWxpbWl0ZXIob3B0aW9ucywgW1wibWNsb3NlXCJdKTtcbiAgfSBlbHNlIHtcbiAgICByaWdodERlbGltID0gZGVsaW1pdGVyLmN1c3RvbVNpemVkRGVsaW0oZ3JvdXAucmlnaHREZWxpbSwgZGVsaW1TaXplLCB0cnVlLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlKSwgZ3JvdXAubW9kZSwgW1wibWNsb3NlXCJdKTtcbiAgfVxuXG4gIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCJdLmNvbmNhdChuZXdPcHRpb25zLnNpemluZ0NsYXNzZXMob3B0aW9ucykpLCBbbGVmdERlbGltLCBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtZnJhY1wiXSwgW2ZyYWNdKSwgcmlnaHREZWxpbV0sIG9wdGlvbnMpO1xufTtcblxudmFyIGdlbmZyYWNfbWF0aG1sQnVpbGRlciA9IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1mcmFjXCIsIFtidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLm51bWVyLCBvcHRpb25zKSwgYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5kZW5vbSwgb3B0aW9ucyldKTtcblxuICBpZiAoIWdyb3VwLmhhc0JhckxpbmUpIHtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImxpbmV0aGlja25lc3NcIiwgXCIwcHhcIik7XG4gIH0gZWxzZSBpZiAoZ3JvdXAuYmFyU2l6ZSkge1xuICAgIHZhciBydWxlV2lkdGggPSB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLmJhclNpemUsIG9wdGlvbnMpO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibGluZXRoaWNrbmVzc1wiLCBydWxlV2lkdGggKyBcImVtXCIpO1xuICB9XG5cbiAgdmFyIHN0eWxlID0gZ2VuZnJhY19hZGp1c3RTdHlsZShncm91cC5zaXplLCBvcHRpb25zLnN0eWxlKTtcblxuICBpZiAoc3R5bGUuc2l6ZSAhPT0gb3B0aW9ucy5zdHlsZS5zaXplKSB7XG4gICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXN0eWxlXCIsIFtub2RlXSk7XG4gICAgdmFyIGlzRGlzcGxheSA9IHN0eWxlLnNpemUgPT09IHNyY19TdHlsZS5ESVNQTEFZLnNpemUgPyBcInRydWVcIiA6IFwiZmFsc2VcIjtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImRpc3BsYXlzdHlsZVwiLCBpc0Rpc3BsYXkpO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic2NyaXB0bGV2ZWxcIiwgXCIwXCIpO1xuICB9XG5cbiAgaWYgKGdyb3VwLmxlZnREZWxpbSAhPSBudWxsIHx8IGdyb3VwLnJpZ2h0RGVsaW0gIT0gbnVsbCkge1xuICAgIHZhciB3aXRoRGVsaW1zID0gW107XG5cbiAgICBpZiAoZ3JvdXAubGVmdERlbGltICE9IG51bGwpIHtcbiAgICAgIHZhciBsZWZ0T3AgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFtuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZShncm91cC5sZWZ0RGVsaW0ucmVwbGFjZShcIlxcXFxcIiwgXCJcIikpXSk7XG4gICAgICBsZWZ0T3Auc2V0QXR0cmlidXRlKFwiZmVuY2VcIiwgXCJ0cnVlXCIpO1xuICAgICAgd2l0aERlbGltcy5wdXNoKGxlZnRPcCk7XG4gICAgfVxuXG4gICAgd2l0aERlbGltcy5wdXNoKG5vZGUpO1xuXG4gICAgaWYgKGdyb3VwLnJpZ2h0RGVsaW0gIT0gbnVsbCkge1xuICAgICAgdmFyIHJpZ2h0T3AgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFtuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZShncm91cC5yaWdodERlbGltLnJlcGxhY2UoXCJcXFxcXCIsIFwiXCIpKV0pO1xuICAgICAgcmlnaHRPcC5zZXRBdHRyaWJ1dGUoXCJmZW5jZVwiLCBcInRydWVcIik7XG4gICAgICB3aXRoRGVsaW1zLnB1c2gocmlnaHRPcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1aWxkTWF0aE1MX21ha2VSb3cod2l0aERlbGltcyk7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJnZW5mcmFjXCIsXG4gIG5hbWVzOiBbXCJcXFxcY2ZyYWNcIiwgXCJcXFxcZGZyYWNcIiwgXCJcXFxcZnJhY1wiLCBcIlxcXFx0ZnJhY1wiLCBcIlxcXFxkYmlub21cIiwgXCJcXFxcYmlub21cIiwgXCJcXFxcdGJpbm9tXCIsIFwiXFxcXFxcXFxhdG9wZnJhY1wiLCAvLyBjYW7igJl0IGJlIGVudGVyZWQgZGlyZWN0bHlcbiAgXCJcXFxcXFxcXGJyYWNlZnJhY1wiLCBcIlxcXFxcXFxcYnJhY2tmcmFjXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgZ3JlZWRpbmVzczogMlxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZi5wYXJzZXIsXG4gICAgICAgIGZ1bmNOYW1lID0gX3JlZi5mdW5jTmFtZTtcbiAgICB2YXIgbnVtZXIgPSBhcmdzWzBdO1xuICAgIHZhciBkZW5vbSA9IGFyZ3NbMV07XG4gICAgdmFyIGhhc0JhckxpbmU7XG4gICAgdmFyIGxlZnREZWxpbSA9IG51bGw7XG4gICAgdmFyIHJpZ2h0RGVsaW0gPSBudWxsO1xuICAgIHZhciBzaXplID0gXCJhdXRvXCI7XG5cbiAgICBzd2l0Y2ggKGZ1bmNOYW1lKSB7XG4gICAgICBjYXNlIFwiXFxcXGNmcmFjXCI6XG4gICAgICBjYXNlIFwiXFxcXGRmcmFjXCI6XG4gICAgICBjYXNlIFwiXFxcXGZyYWNcIjpcbiAgICAgIGNhc2UgXCJcXFxcdGZyYWNcIjpcbiAgICAgICAgaGFzQmFyTGluZSA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiXFxcXFxcXFxhdG9wZnJhY1wiOlxuICAgICAgICBoYXNCYXJMaW5lID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiXFxcXGRiaW5vbVwiOlxuICAgICAgY2FzZSBcIlxcXFxiaW5vbVwiOlxuICAgICAgY2FzZSBcIlxcXFx0Ymlub21cIjpcbiAgICAgICAgaGFzQmFyTGluZSA9IGZhbHNlO1xuICAgICAgICBsZWZ0RGVsaW0gPSBcIihcIjtcbiAgICAgICAgcmlnaHREZWxpbSA9IFwiKVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxcXFxcYnJhY2VmcmFjXCI6XG4gICAgICAgIGhhc0JhckxpbmUgPSBmYWxzZTtcbiAgICAgICAgbGVmdERlbGltID0gXCJcXFxce1wiO1xuICAgICAgICByaWdodERlbGltID0gXCJcXFxcfVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxcXFxcYnJhY2tmcmFjXCI6XG4gICAgICAgIGhhc0JhckxpbmUgPSBmYWxzZTtcbiAgICAgICAgbGVmdERlbGltID0gXCJbXCI7XG4gICAgICAgIHJpZ2h0RGVsaW0gPSBcIl1cIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVucmVjb2duaXplZCBnZW5mcmFjIGNvbW1hbmRcIik7XG4gICAgfVxuXG4gICAgc3dpdGNoIChmdW5jTmFtZSkge1xuICAgICAgY2FzZSBcIlxcXFxjZnJhY1wiOlxuICAgICAgY2FzZSBcIlxcXFxkZnJhY1wiOlxuICAgICAgY2FzZSBcIlxcXFxkYmlub21cIjpcbiAgICAgICAgc2l6ZSA9IFwiZGlzcGxheVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFx0ZnJhY1wiOlxuICAgICAgY2FzZSBcIlxcXFx0Ymlub21cIjpcbiAgICAgICAgc2l6ZSA9IFwidGV4dFwiO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJnZW5mcmFjXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGNvbnRpbnVlZDogZnVuY05hbWUgPT09IFwiXFxcXGNmcmFjXCIsXG4gICAgICBudW1lcjogbnVtZXIsXG4gICAgICBkZW5vbTogZGVub20sXG4gICAgICBoYXNCYXJMaW5lOiBoYXNCYXJMaW5lLFxuICAgICAgbGVmdERlbGltOiBsZWZ0RGVsaW0sXG4gICAgICByaWdodERlbGltOiByaWdodERlbGltLFxuICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgIGJhclNpemU6IG51bGxcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZ2VuZnJhY19odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogZ2VuZnJhY19tYXRobWxCdWlsZGVyXG59KTsgLy8gSW5maXggZ2VuZXJhbGl6ZWQgZnJhY3Rpb25zIC0tIHRoZXNlIGFyZSBub3QgcmVuZGVyZWQgZGlyZWN0bHksIGJ1dCByZXBsYWNlZFxuLy8gaW1tZWRpYXRlbHkgYnkgb25lIG9mIHRoZSB2YXJpYW50cyBhYm92ZS5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImluZml4XCIsXG4gIG5hbWVzOiBbXCJcXFxcb3ZlclwiLCBcIlxcXFxjaG9vc2VcIiwgXCJcXFxcYXRvcFwiLCBcIlxcXFxicmFjZVwiLCBcIlxcXFxicmFja1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIGluZml4OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZjIpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZjIucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWYyLmZ1bmNOYW1lLFxuICAgICAgICB0b2tlbiA9IF9yZWYyLnRva2VuO1xuICAgIHZhciByZXBsYWNlV2l0aDtcblxuICAgIHN3aXRjaCAoZnVuY05hbWUpIHtcbiAgICAgIGNhc2UgXCJcXFxcb3ZlclwiOlxuICAgICAgICByZXBsYWNlV2l0aCA9IFwiXFxcXGZyYWNcIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcY2hvb3NlXCI6XG4gICAgICAgIHJlcGxhY2VXaXRoID0gXCJcXFxcYmlub21cIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcYXRvcFwiOlxuICAgICAgICByZXBsYWNlV2l0aCA9IFwiXFxcXFxcXFxhdG9wZnJhY1wiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxicmFjZVwiOlxuICAgICAgICByZXBsYWNlV2l0aCA9IFwiXFxcXFxcXFxicmFjZWZyYWNcIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcYnJhY2tcIjpcbiAgICAgICAgcmVwbGFjZVdpdGggPSBcIlxcXFxcXFxcYnJhY2tmcmFjXCI7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgaW5maXggZ2VuZnJhYyBjb21tYW5kXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImluZml4XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIHJlcGxhY2VXaXRoOiByZXBsYWNlV2l0aCxcbiAgICAgIHRva2VuOiB0b2tlblxuICAgIH07XG4gIH1cbn0pO1xudmFyIHN0eWxBcnJheSA9IFtcImRpc3BsYXlcIiwgXCJ0ZXh0XCIsIFwic2NyaXB0XCIsIFwic2NyaXB0c2NyaXB0XCJdO1xuXG52YXIgZGVsaW1Gcm9tVmFsdWUgPSBmdW5jdGlvbiBkZWxpbUZyb21WYWx1ZShkZWxpbVN0cmluZykge1xuICB2YXIgZGVsaW0gPSBudWxsO1xuXG4gIGlmIChkZWxpbVN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgZGVsaW0gPSBkZWxpbVN0cmluZztcbiAgICBkZWxpbSA9IGRlbGltID09PSBcIi5cIiA/IG51bGwgOiBkZWxpbTtcbiAgfVxuXG4gIHJldHVybiBkZWxpbTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJnZW5mcmFjXCIsXG4gIG5hbWVzOiBbXCJcXFxcZ2VuZnJhY1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiA2LFxuICAgIGdyZWVkaW5lc3M6IDYsXG4gICAgYXJnVHlwZXM6IFtcIm1hdGhcIiwgXCJtYXRoXCIsIFwic2l6ZVwiLCBcInRleHRcIiwgXCJtYXRoXCIsIFwibWF0aFwiXVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYzLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYzLnBhcnNlcjtcbiAgICB2YXIgbnVtZXIgPSBhcmdzWzRdO1xuICAgIHZhciBkZW5vbSA9IGFyZ3NbNV07IC8vIExvb2sgaW50byB0aGUgcGFyc2Ugbm9kZXMgdG8gZ2V0IHRoZSBkZXNpcmVkIGRlbGltaXRlcnMuXG5cbiAgICB2YXIgbGVmdE5vZGUgPSBjaGVja05vZGVUeXBlKGFyZ3NbMF0sIFwiYXRvbVwiKTtcblxuICAgIGlmIChsZWZ0Tm9kZSkge1xuICAgICAgbGVmdE5vZGUgPSBhc3NlcnRBdG9tRmFtaWx5KGFyZ3NbMF0sIFwib3BlblwiKTtcbiAgICB9XG5cbiAgICB2YXIgbGVmdERlbGltID0gbGVmdE5vZGUgPyBkZWxpbUZyb21WYWx1ZShsZWZ0Tm9kZS50ZXh0KSA6IG51bGw7XG4gICAgdmFyIHJpZ2h0Tm9kZSA9IGNoZWNrTm9kZVR5cGUoYXJnc1sxXSwgXCJhdG9tXCIpO1xuXG4gICAgaWYgKHJpZ2h0Tm9kZSkge1xuICAgICAgcmlnaHROb2RlID0gYXNzZXJ0QXRvbUZhbWlseShhcmdzWzFdLCBcImNsb3NlXCIpO1xuICAgIH1cblxuICAgIHZhciByaWdodERlbGltID0gcmlnaHROb2RlID8gZGVsaW1Gcm9tVmFsdWUocmlnaHROb2RlLnRleHQpIDogbnVsbDtcbiAgICB2YXIgYmFyTm9kZSA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMl0sIFwic2l6ZVwiKTtcbiAgICB2YXIgaGFzQmFyTGluZTtcbiAgICB2YXIgYmFyU2l6ZSA9IG51bGw7XG5cbiAgICBpZiAoYmFyTm9kZS5pc0JsYW5rKSB7XG4gICAgICAvLyBcXGdlbmZyYWMgYWN0cyBkaWZmZXJlbnRseSB0aGFuIFxcYWJvdmUuXG4gICAgICAvLyBcXGdlbmZyYWMgdHJlYXRzIGFuIGVtcHR5IHNpemUgZ3JvdXAgYXMgYSBzaWduYWwgdG8gdXNlIGFcbiAgICAgIC8vIHN0YW5kYXJkIGJhciBzaXplLiBcXGFib3ZlIHdvdWxkIHNlZSBzaXplID0gMCBhbmQgb21pdCB0aGUgYmFyLlxuICAgICAgaGFzQmFyTGluZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhclNpemUgPSBiYXJOb2RlLnZhbHVlO1xuICAgICAgaGFzQmFyTGluZSA9IGJhclNpemUubnVtYmVyID4gMDtcbiAgICB9IC8vIEZpbmQgb3V0IGlmIHdlIHdhbnQgZGlzcGxheXN0eWxlLCB0ZXh0c3R5bGUsIGV0Yy5cblxuXG4gICAgdmFyIHNpemUgPSBcImF1dG9cIjtcbiAgICB2YXIgc3R5bCA9IGNoZWNrTm9kZVR5cGUoYXJnc1szXSwgXCJvcmRncm91cFwiKTtcblxuICAgIGlmIChzdHlsKSB7XG4gICAgICBpZiAoc3R5bC5ib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIHRleHRPcmQgPSBhc3NlcnROb2RlVHlwZShzdHlsLmJvZHlbMF0sIFwidGV4dG9yZFwiKTtcbiAgICAgICAgc2l6ZSA9IHN0eWxBcnJheVtOdW1iZXIodGV4dE9yZC50ZXh0KV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWwgPSBhc3NlcnROb2RlVHlwZShhcmdzWzNdLCBcInRleHRvcmRcIik7XG4gICAgICBzaXplID0gc3R5bEFycmF5W051bWJlcihzdHlsLnRleHQpXTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJnZW5mcmFjXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG51bWVyOiBudW1lcixcbiAgICAgIGRlbm9tOiBkZW5vbSxcbiAgICAgIGNvbnRpbnVlZDogZmFsc2UsXG4gICAgICBoYXNCYXJMaW5lOiBoYXNCYXJMaW5lLFxuICAgICAgYmFyU2l6ZTogYmFyU2l6ZSxcbiAgICAgIGxlZnREZWxpbTogbGVmdERlbGltLFxuICAgICAgcmlnaHREZWxpbTogcmlnaHREZWxpbSxcbiAgICAgIHNpemU6IHNpemVcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZ2VuZnJhY19odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogZ2VuZnJhY19tYXRobWxCdWlsZGVyXG59KTsgLy8gXFxhYm92ZSBpcyBhbiBpbmZpeCBmcmFjdGlvbiB0aGF0IGFsc28gZGVmaW5lcyBhIGZyYWN0aW9uIGJhciBzaXplLlxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaW5maXhcIixcbiAgbmFtZXM6IFtcIlxcXFxhYm92ZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJzaXplXCJdLFxuICAgIGluZml4OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZjQsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZjQucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWY0LmZ1bmNOYW1lLFxuICAgICAgICB0b2tlbiA9IF9yZWY0LnRva2VuO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImluZml4XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIHJlcGxhY2VXaXRoOiBcIlxcXFxcXFxcYWJvdmVmcmFjXCIsXG4gICAgICBzaXplOiBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcInNpemVcIikudmFsdWUsXG4gICAgICB0b2tlbjogdG9rZW5cbiAgICB9O1xuICB9XG59KTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJnZW5mcmFjXCIsXG4gIG5hbWVzOiBbXCJcXFxcXFxcXGFib3ZlZnJhY1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAzLFxuICAgIGFyZ1R5cGVzOiBbXCJtYXRoXCIsIFwic2l6ZVwiLCBcIm1hdGhcIl1cbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmNSwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmNS5wYXJzZXIsXG4gICAgICAgIGZ1bmNOYW1lID0gX3JlZjUuZnVuY05hbWU7XG4gICAgdmFyIG51bWVyID0gYXJnc1swXTtcbiAgICB2YXIgYmFyU2l6ZSA9IGFzc2VydChhc3NlcnROb2RlVHlwZShhcmdzWzFdLCBcImluZml4XCIpLnNpemUpO1xuICAgIHZhciBkZW5vbSA9IGFyZ3NbMl07XG4gICAgdmFyIGhhc0JhckxpbmUgPSBiYXJTaXplLm51bWJlciA+IDA7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZ2VuZnJhY1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBudW1lcjogbnVtZXIsXG4gICAgICBkZW5vbTogZGVub20sXG4gICAgICBjb250aW51ZWQ6IGZhbHNlLFxuICAgICAgaGFzQmFyTGluZTogaGFzQmFyTGluZSxcbiAgICAgIGJhclNpemU6IGJhclNpemUsXG4gICAgICBsZWZ0RGVsaW06IG51bGwsXG4gICAgICByaWdodERlbGltOiBudWxsLFxuICAgICAgc2l6ZTogXCJhdXRvXCJcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZ2VuZnJhY19odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogZ2VuZnJhY19tYXRobWxCdWlsZGVyXG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9ob3JpekJyYWNlLmpzXG5cblxuXG5cblxuXG5cblxuLy8gTk9URTogVW5saWtlIG1vc3QgYGh0bWxCdWlsZGVyYHMsIHRoaXMgb25lIGhhbmRsZXMgbm90IG9ubHkgXCJob3JpekJyYWNlXCIsIGJ1dFxudmFyIGhvcml6QnJhY2VfaHRtbEJ1aWxkZXIgPSBmdW5jdGlvbiBodG1sQnVpbGRlcihncnAsIG9wdGlvbnMpIHtcbiAgdmFyIHN0eWxlID0gb3B0aW9ucy5zdHlsZTsgLy8gUHVsbCBvdXQgdGhlIGBQYXJzZU5vZGU8XCJob3JpekJyYWNlXCI+YCBpZiBgZ3JwYCBpcyBhIFwic3Vwc3ViXCIgbm9kZS5cblxuICB2YXIgc3VwU3ViR3JvdXA7XG4gIHZhciBncm91cDtcbiAgdmFyIHN1cFN1YiA9IGNoZWNrTm9kZVR5cGUoZ3JwLCBcInN1cHN1YlwiKTtcblxuICBpZiAoc3VwU3ViKSB7XG4gICAgLy8gUmVmOiBMYVRlWCBzb3VyY2UyZTogfX19fVxcbGltaXRzfVxuICAgIC8vIGkuZS4gTGFUZVggdHJlYXRzIHRoZSBicmFjZSBzaW1pbGFyIHRvIGFuIG9wIGFuZCBwYXNzZXMgaXRcbiAgICAvLyB3aXRoIFxcbGltaXRzLCBzbyB3ZSBuZWVkIHRvIGFzc2lnbiBzdXBzdWIgc3R5bGUuXG4gICAgc3VwU3ViR3JvdXAgPSBzdXBTdWIuc3VwID8gYnVpbGRIVE1MX2J1aWxkR3JvdXAoc3VwU3ViLnN1cCwgb3B0aW9ucy5oYXZpbmdTdHlsZShzdHlsZS5zdXAoKSksIG9wdGlvbnMpIDogYnVpbGRIVE1MX2J1aWxkR3JvdXAoc3VwU3ViLnN1Yiwgb3B0aW9ucy5oYXZpbmdTdHlsZShzdHlsZS5zdWIoKSksIG9wdGlvbnMpO1xuICAgIGdyb3VwID0gYXNzZXJ0Tm9kZVR5cGUoc3VwU3ViLmJhc2UsIFwiaG9yaXpCcmFjZVwiKTtcbiAgfSBlbHNlIHtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKGdycCwgXCJob3JpekJyYWNlXCIpO1xuICB9IC8vIEJ1aWxkIHRoZSBiYXNlIGdyb3VwXG5cblxuICB2YXIgYm9keSA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJhc2UsIG9wdGlvbnMuaGF2aW5nQmFzZVN0eWxlKHNyY19TdHlsZS5ESVNQTEFZKSk7IC8vIENyZWF0ZSB0aGUgc3RyZXRjaHkgZWxlbWVudFxuXG4gIHZhciBicmFjZUJvZHkgPSBzdHJldGNoeS5zdmdTcGFuKGdyb3VwLCBvcHRpb25zKTsgLy8gR2VuZXJhdGUgdGhlIHZsaXN0LCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBrZXJucyAgICAgICAg4pSP4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSTXG4gIC8vIFRoaXMgZmlyc3Qgdmxpc3QgY29udGFpbnMgdGhlIGNvbnRlbnQgYW5kIHRoZSBicmFjZTogICBlcXVhdGlvblxuXG4gIHZhciB2bGlzdDtcblxuICBpZiAoZ3JvdXAuaXNPdmVyKSB7XG4gICAgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImZpcnN0QmFzZWxpbmVcIixcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogYm9keVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogMC4xXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBicmFjZUJvZHlcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7IC8vICRGbG93Rml4TWU6IFJlcGxhY2UgdGhpcyB3aXRoIHBhc3NpbmcgXCJzdmctYWxpZ25cIiBpbnRvIG1ha2VWTGlzdC5cblxuICAgIHZsaXN0LmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzFdLmNsYXNzZXMucHVzaChcInN2Zy1hbGlnblwiKTtcbiAgfSBlbHNlIHtcbiAgICB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IGJvZHkuZGVwdGggKyAwLjEgKyBicmFjZUJvZHkuaGVpZ2h0LFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBicmFjZUJvZHlcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IDAuMVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogYm9keVxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTsgLy8gJEZsb3dGaXhNZTogUmVwbGFjZSB0aGlzIHdpdGggcGFzc2luZyBcInN2Zy1hbGlnblwiIGludG8gbWFrZVZMaXN0LlxuXG4gICAgdmxpc3QuY2hpbGRyZW5bMF0uY2hpbGRyZW5bMF0uY2hpbGRyZW5bMF0uY2xhc3Nlcy5wdXNoKFwic3ZnLWFsaWduXCIpO1xuICB9XG5cbiAgaWYgKHN1cFN1Ykdyb3VwKSB7XG4gICAgLy8gVG8gd3JpdGUgdGhlIHN1cHN1Yiwgd3JhcCB0aGUgZmlyc3Qgdmxpc3QgaW4gYW5vdGhlciB2bGlzdDpcbiAgICAvLyBUaGV5IGNhbid0IGFsbCBnbyBpbiB0aGUgc2FtZSB2bGlzdCwgYmVjYXVzZSB0aGUgbm90ZSBtaWdodCBiZVxuICAgIC8vIHdpZGVyIHRoYW4gdGhlIGVxdWF0aW9uLiBXZSB3YW50IHRoZSBlcXVhdGlvbiB0byBjb250cm9sIHRoZVxuICAgIC8vIGJyYWNlIHdpZHRoLlxuICAgIC8vICAgICAgbm90ZSAgICAgICAgICBsb25nIG5vdGUgICAgICAgICAgIGxvbmcgbm90ZVxuICAgIC8vICAg4pSP4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSTICAgb3IgICAg4pSP4pSB4pSB4pSB4pSTICAgICBub3QgICAg4pSP4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSTXG4gICAgLy8gICAgZXF1YXRpb24gICAgICAgICAgIGVxbiAgICAgICAgICAgICAgICAgZXFuXG4gICAgdmFyIHZTcGFuID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBncm91cC5pc092ZXIgPyBcIm1vdmVyXCIgOiBcIm11bmRlclwiXSwgW3ZsaXN0XSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoZ3JvdXAuaXNPdmVyKSB7XG4gICAgICB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJmaXJzdEJhc2VsaW5lXCIsXG4gICAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IHZTcGFuXG4gICAgICAgIH0sIHtcbiAgICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgICBzaXplOiAwLjJcbiAgICAgICAgfSwge1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IHN1cFN1Ykdyb3VwXG4gICAgICAgIH1dXG4gICAgICB9LCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICAgIHBvc2l0aW9uRGF0YTogdlNwYW4uZGVwdGggKyAwLjIgKyBzdXBTdWJHcm91cC5oZWlnaHQgKyBzdXBTdWJHcm91cC5kZXB0aCxcbiAgICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogc3VwU3ViR3JvdXBcbiAgICAgICAgfSwge1xuICAgICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICAgIHNpemU6IDAuMlxuICAgICAgICB9LCB7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogdlNwYW5cbiAgICAgICAgfV1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCIsIGdyb3VwLmlzT3ZlciA/IFwibW92ZXJcIiA6IFwibXVuZGVyXCJdLCBbdmxpc3RdLCBvcHRpb25zKTtcbn07XG5cbnZhciBob3JpekJyYWNlX21hdGhtbEJ1aWxkZXIgPSBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gIHZhciBhY2NlbnROb2RlID0gc3RyZXRjaHkubWF0aE1Mbm9kZShncm91cC5sYWJlbCk7XG4gIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShncm91cC5pc092ZXIgPyBcIm1vdmVyXCIgOiBcIm11bmRlclwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5iYXNlLCBvcHRpb25zKSwgYWNjZW50Tm9kZV0pO1xufTsgLy8gSG9yaXpvbnRhbCBzdHJldGNoeSBicmFjZXNcblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaG9yaXpCcmFjZVwiLFxuICBuYW1lczogW1wiXFxcXG92ZXJicmFjZVwiLCBcIlxcXFx1bmRlcmJyYWNlXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWYuZnVuY05hbWU7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiaG9yaXpCcmFjZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBpc092ZXI6IC9eXFxcXG92ZXIvLnRlc3QoZnVuY05hbWUpLFxuICAgICAgYmFzZTogYXJnc1swXVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBob3JpekJyYWNlX2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBob3JpekJyYWNlX21hdGhtbEJ1aWxkZXJcbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2hyZWYuanNcblxuXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJocmVmXCIsXG4gIG5hbWVzOiBbXCJcXFxcaHJlZlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyLFxuICAgIGFyZ1R5cGVzOiBbXCJ1cmxcIiwgXCJvcmlnaW5hbFwiXSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMV07XG4gICAgdmFyIGhyZWYgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcInVybFwiKS51cmw7XG5cbiAgICBpZiAoIXBhcnNlci5zZXR0aW5ncy5pc1RydXN0ZWQoe1xuICAgICAgY29tbWFuZDogXCJcXFxcaHJlZlwiLFxuICAgICAgdXJsOiBocmVmXG4gICAgfSkpIHtcbiAgICAgIHJldHVybiBwYXJzZXIuZm9ybWF0VW5zdXBwb3J0ZWRDbWQoXCJcXFxcaHJlZlwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJocmVmXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICBib2R5OiBkZWZpbmVGdW5jdGlvbl9vcmRhcmd1bWVudChib2R5KVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBlbGVtZW50cyA9IGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucywgZmFsc2UpO1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlQW5jaG9yKGdyb3VwLmhyZWYsIFtdLCBlbGVtZW50cywgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbWF0aCA9IGJ1aWxkRXhwcmVzc2lvblJvdyhncm91cC5ib2R5LCBvcHRpb25zKTtcblxuICAgIGlmICghKG1hdGggaW5zdGFuY2VvZiBtYXRoTUxUcmVlX01hdGhOb2RlKSkge1xuICAgICAgbWF0aCA9IG5ldyBtYXRoTUxUcmVlX01hdGhOb2RlKFwibXJvd1wiLCBbbWF0aF0pO1xuICAgIH1cblxuICAgIG1hdGguc2V0QXR0cmlidXRlKFwiaHJlZlwiLCBncm91cC5ocmVmKTtcbiAgICByZXR1cm4gbWF0aDtcbiAgfVxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaHJlZlwiLFxuICBuYW1lczogW1wiXFxcXHVybFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJ1cmxcIl0sXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYyLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYyLnBhcnNlcjtcbiAgICB2YXIgaHJlZiA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwidXJsXCIpLnVybDtcblxuICAgIGlmICghcGFyc2VyLnNldHRpbmdzLmlzVHJ1c3RlZCh7XG4gICAgICBjb21tYW5kOiBcIlxcXFx1cmxcIixcbiAgICAgIHVybDogaHJlZlxuICAgIH0pKSB7XG4gICAgICByZXR1cm4gcGFyc2VyLmZvcm1hdFVuc3VwcG9ydGVkQ21kKFwiXFxcXHVybFwiKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhcnMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaHJlZi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGMgPSBocmVmW2ldO1xuXG4gICAgICBpZiAoYyA9PT0gXCJ+XCIpIHtcbiAgICAgICAgYyA9IFwiXFxcXHRleHRhc2NpaXRpbGRlXCI7XG4gICAgICB9XG5cbiAgICAgIGNoYXJzLnB1c2goe1xuICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgbW9kZTogXCJ0ZXh0XCIsXG4gICAgICAgIHRleHQ6IGNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBib2R5ID0ge1xuICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGZvbnQ6IFwiXFxcXHRleHR0dFwiLFxuICAgICAgYm9keTogY2hhcnNcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImhyZWZcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgaHJlZjogaHJlZixcbiAgICAgIGJvZHk6IGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGJvZHkpXG4gICAgfTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvaHRtbG1hdGhtbC5qc1xuXG5cblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaHRtbG1hdGhtbFwiLFxuICBuYW1lczogW1wiXFxcXGh0bWxAbWF0aG1sXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZi5wYXJzZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiaHRtbG1hdGhtbFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBodG1sOiBkZWZpbmVGdW5jdGlvbl9vcmRhcmd1bWVudChhcmdzWzBdKSxcbiAgICAgIG1hdGhtbDogZGVmaW5lRnVuY3Rpb25fb3JkYXJndW1lbnQoYXJnc1sxXSlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBidWlsZEhUTUxfYnVpbGRFeHByZXNzaW9uKGdyb3VwLmh0bWwsIG9wdGlvbnMsIGZhbHNlKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUZyYWdtZW50KGVsZW1lbnRzKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHJldHVybiBidWlsZEV4cHJlc3Npb25Sb3coZ3JvdXAubWF0aG1sLCBvcHRpb25zKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvaW5jbHVkZWdyYXBoaWNzLmpzXG5cblxuXG5cblxuXG5cbnZhciBpbmNsdWRlZ3JhcGhpY3Nfc2l6ZURhdGEgPSBmdW5jdGlvbiBzaXplRGF0YShzdHIpIHtcbiAgaWYgKC9eWy0rXT8gKihcXGQrKFxcLlxcZCopP3xcXC5cXGQrKSQvLnRlc3Qoc3RyKSkge1xuICAgIC8vIHN0ciBpcyBhIG51bWJlciB3aXRoIG5vIHVuaXQgc3BlY2lmaWVkLlxuICAgIC8vIGRlZmF1bHQgdW5pdCBpcyBicCwgcGVyIGdyYXBoaXggcGFja2FnZS5cbiAgICByZXR1cm4ge1xuICAgICAgbnVtYmVyOiArc3RyLFxuICAgICAgdW5pdDogXCJicFwiXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbWF0Y2ggPSAvKFstK10/KSAqKFxcZCsoPzpcXC5cXGQqKT98XFwuXFxkKykgKihbYS16XXsyfSkvLmV4ZWMoc3RyKTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgc2l6ZTogJ1wiICsgc3RyICsgXCInIGluIFxcXFxpbmNsdWRlZ3JhcGhpY3NcIik7XG4gICAgfVxuXG4gICAgdmFyIGRhdGEgPSB7XG4gICAgICBudW1iZXI6ICsobWF0Y2hbMV0gKyBtYXRjaFsyXSksXG4gICAgICAvLyBzaWduICsgbWFnbml0dWRlLCBjYXN0IHRvIG51bWJlclxuICAgICAgdW5pdDogbWF0Y2hbM11cbiAgICB9O1xuXG4gICAgaWYgKCF2YWxpZFVuaXQoZGF0YSkpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgdW5pdDogJ1wiICsgZGF0YS51bml0ICsgXCInIGluIFxcXFxpbmNsdWRlZ3JhcGhpY3MuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG59O1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaW5jbHVkZWdyYXBoaWNzXCIsXG4gIG5hbWVzOiBbXCJcXFxcaW5jbHVkZWdyYXBoaWNzXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgbnVtT3B0aW9uYWxBcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJyYXdcIiwgXCJ1cmxcIl0sXG4gICAgYWxsb3dlZEluVGV4dDogZmFsc2VcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzLCBvcHRBcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyO1xuICAgIHZhciB3aWR0aCA9IHtcbiAgICAgIG51bWJlcjogMCxcbiAgICAgIHVuaXQ6IFwiZW1cIlxuICAgIH07XG4gICAgdmFyIGhlaWdodCA9IHtcbiAgICAgIG51bWJlcjogMC45LFxuICAgICAgdW5pdDogXCJlbVwiXG4gICAgfTsgLy8gc29ydGEgY2hhcmFjdGVyIHNpemVkLlxuXG4gICAgdmFyIHRvdGFsaGVpZ2h0ID0ge1xuICAgICAgbnVtYmVyOiAwLFxuICAgICAgdW5pdDogXCJlbVwiXG4gICAgfTtcbiAgICB2YXIgYWx0ID0gXCJcIjtcblxuICAgIGlmIChvcHRBcmdzWzBdKSB7XG4gICAgICB2YXIgYXR0cmlidXRlU3RyID0gYXNzZXJ0Tm9kZVR5cGUob3B0QXJnc1swXSwgXCJyYXdcIikuc3RyaW5nOyAvLyBQYXJzZXIuanMgZG9lcyBub3QgcGFyc2Uga2V5L3ZhbHVlIHBhaXJzLiBXZSBnZXQgYSBzdHJpbmcuXG5cbiAgICAgIHZhciBhdHRyaWJ1dGVzID0gYXR0cmlidXRlU3RyLnNwbGl0KFwiLFwiKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBrZXlWYWwgPSBhdHRyaWJ1dGVzW2ldLnNwbGl0KFwiPVwiKTtcblxuICAgICAgICBpZiAoa2V5VmFsLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHZhciBzdHIgPSBrZXlWYWxbMV0udHJpbSgpO1xuXG4gICAgICAgICAgc3dpdGNoIChrZXlWYWxbMF0udHJpbSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiYWx0XCI6XG4gICAgICAgICAgICAgIGFsdCA9IHN0cjtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJ3aWR0aFwiOlxuICAgICAgICAgICAgICB3aWR0aCA9IGluY2x1ZGVncmFwaGljc19zaXplRGF0YShzdHIpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcImhlaWdodFwiOlxuICAgICAgICAgICAgICBoZWlnaHQgPSBpbmNsdWRlZ3JhcGhpY3Nfc2l6ZURhdGEoc3RyKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJ0b3RhbGhlaWdodFwiOlxuICAgICAgICAgICAgICB0b3RhbGhlaWdodCA9IGluY2x1ZGVncmFwaGljc19zaXplRGF0YShzdHIpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCBrZXk6ICdcIiArIGtleVZhbFswXSArIFwiJyBpbiBcXFxcaW5jbHVkZWdyYXBoaWNzLlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc3JjID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXSwgXCJ1cmxcIikudXJsO1xuXG4gICAgaWYgKGFsdCA9PT0gXCJcIikge1xuICAgICAgLy8gTm8gYWx0IGdpdmVuLiBVc2UgdGhlIGZpbGUgbmFtZS4gU3RyaXAgYXdheSB0aGUgcGF0aC5cbiAgICAgIGFsdCA9IHNyYztcbiAgICAgIGFsdCA9IGFsdC5yZXBsYWNlKC9eLipbXFxcXC9dLywgJycpO1xuICAgICAgYWx0ID0gYWx0LnN1YnN0cmluZygwLCBhbHQubGFzdEluZGV4T2YoJy4nKSk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZXIuc2V0dGluZ3MuaXNUcnVzdGVkKHtcbiAgICAgIGNvbW1hbmQ6IFwiXFxcXGluY2x1ZGVncmFwaGljc1wiLFxuICAgICAgdXJsOiBzcmNcbiAgICB9KSkge1xuICAgICAgcmV0dXJuIHBhcnNlci5mb3JtYXRVbnN1cHBvcnRlZENtZChcIlxcXFxpbmNsdWRlZ3JhcGhpY3NcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiaW5jbHVkZWdyYXBoaWNzXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGFsdDogYWx0LFxuICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICB0b3RhbGhlaWdodDogdG90YWxoZWlnaHQsXG4gICAgICBzcmM6IHNyY1xuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBoZWlnaHQgPSB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLmhlaWdodCwgb3B0aW9ucyk7XG4gICAgdmFyIGRlcHRoID0gMDtcblxuICAgIGlmIChncm91cC50b3RhbGhlaWdodC5udW1iZXIgPiAwKSB7XG4gICAgICBkZXB0aCA9IHVuaXRzX2NhbGN1bGF0ZVNpemUoZ3JvdXAudG90YWxoZWlnaHQsIG9wdGlvbnMpIC0gaGVpZ2h0O1xuICAgICAgZGVwdGggPSBOdW1iZXIoZGVwdGgudG9GaXhlZCgyKSk7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gMDtcblxuICAgIGlmIChncm91cC53aWR0aC5udW1iZXIgPiAwKSB7XG4gICAgICB3aWR0aCA9IHVuaXRzX2NhbGN1bGF0ZVNpemUoZ3JvdXAud2lkdGgsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHZhciBzdHlsZSA9IHtcbiAgICAgIGhlaWdodDogaGVpZ2h0ICsgZGVwdGggKyBcImVtXCJcbiAgICB9O1xuXG4gICAgaWYgKHdpZHRoID4gMCkge1xuICAgICAgc3R5bGUud2lkdGggPSB3aWR0aCArIFwiZW1cIjtcbiAgICB9XG5cbiAgICBpZiAoZGVwdGggPiAwKSB7XG4gICAgICBzdHlsZS52ZXJ0aWNhbEFsaWduID0gLWRlcHRoICsgXCJlbVwiO1xuICAgIH1cblxuICAgIHZhciBub2RlID0gbmV3IGRvbVRyZWVfSW1nKGdyb3VwLnNyYywgZ3JvdXAuYWx0LCBzdHlsZSk7XG4gICAgbm9kZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgbm9kZS5kZXB0aCA9IGRlcHRoO1xuICAgIHJldHVybiBub2RlO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1nbHlwaFwiLCBbXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJhbHRcIiwgZ3JvdXAuYWx0KTtcbiAgICB2YXIgaGVpZ2h0ID0gdW5pdHNfY2FsY3VsYXRlU2l6ZShncm91cC5oZWlnaHQsIG9wdGlvbnMpO1xuICAgIHZhciBkZXB0aCA9IDA7XG5cbiAgICBpZiAoZ3JvdXAudG90YWxoZWlnaHQubnVtYmVyID4gMCkge1xuICAgICAgZGVwdGggPSB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLnRvdGFsaGVpZ2h0LCBvcHRpb25zKSAtIGhlaWdodDtcbiAgICAgIGRlcHRoID0gZGVwdGgudG9GaXhlZCgyKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwidmFsaWduXCIsIFwiLVwiICsgZGVwdGggKyBcImVtXCIpO1xuICAgIH1cblxuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGhlaWdodCArIGRlcHRoICsgXCJlbVwiKTtcblxuICAgIGlmIChncm91cC53aWR0aC5udW1iZXIgPiAwKSB7XG4gICAgICB2YXIgd2lkdGggPSB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLndpZHRoLCBvcHRpb25zKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgd2lkdGggKyBcImVtXCIpO1xuICAgIH1cblxuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic3JjXCIsIGdyb3VwLnNyYyk7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2tlcm4uanNcbi8vIEhvcml6b250YWwgc3BhY2luZyBjb21tYW5kc1xuXG5cblxuXG4gLy8gVE9ETzogXFxoc2tpcCBhbmQgXFxtc2tpcCBzaG91bGQgc3VwcG9ydCBwbHVzIGFuZCBtaW51cyBpbiBsZW5ndGhzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJrZXJuXCIsXG4gIG5hbWVzOiBbXCJcXFxca2VyblwiLCBcIlxcXFxta2VyblwiLCBcIlxcXFxoc2tpcFwiLCBcIlxcXFxtc2tpcFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJzaXplXCJdLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWYuZnVuY05hbWU7XG4gICAgdmFyIHNpemUgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcInNpemVcIik7XG5cbiAgICBpZiAocGFyc2VyLnNldHRpbmdzLnN0cmljdCkge1xuICAgICAgdmFyIG1hdGhGdW5jdGlvbiA9IGZ1bmNOYW1lWzFdID09PSAnbSc7IC8vIFxcbWtlcm4sIFxcbXNraXBcblxuICAgICAgdmFyIG11VW5pdCA9IHNpemUudmFsdWUudW5pdCA9PT0gJ211JztcblxuICAgICAgaWYgKG1hdGhGdW5jdGlvbikge1xuICAgICAgICBpZiAoIW11VW5pdCkge1xuICAgICAgICAgIHBhcnNlci5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJtYXRoVnNUZXh0VW5pdHNcIiwgXCJMYVRlWCdzIFwiICsgZnVuY05hbWUgKyBcIiBzdXBwb3J0cyBvbmx5IG11IHVuaXRzLCBcIiArIChcIm5vdCBcIiArIHNpemUudmFsdWUudW5pdCArIFwiIHVuaXRzXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZXIubW9kZSAhPT0gXCJtYXRoXCIpIHtcbiAgICAgICAgICBwYXJzZXIuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KFwibWF0aFZzVGV4dFVuaXRzXCIsIFwiTGFUZVgncyBcIiArIGZ1bmNOYW1lICsgXCIgd29ya3Mgb25seSBpbiBtYXRoIG1vZGVcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vICFtYXRoRnVuY3Rpb25cbiAgICAgICAgaWYgKG11VW5pdCkge1xuICAgICAgICAgIHBhcnNlci5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJtYXRoVnNUZXh0VW5pdHNcIiwgXCJMYVRlWCdzIFwiICsgZnVuY05hbWUgKyBcIiBkb2Vzbid0IHN1cHBvcnQgbXUgdW5pdHNcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGRpbWVuc2lvbjogc2l6ZS52YWx1ZVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlR2x1ZShncm91cC5kaW1lbnNpb24sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIGRpbWVuc2lvbiA9IHVuaXRzX2NhbGN1bGF0ZVNpemUoZ3JvdXAuZGltZW5zaW9uLCBvcHRpb25zKTtcbiAgICByZXR1cm4gbmV3IG1hdGhNTFRyZWUuU3BhY2VOb2RlKGRpbWVuc2lvbik7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL2xhcC5qc1xuLy8gSG9yaXpvbnRhbCBvdmVybGFwIGZ1bmN0aW9uc1xuXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJsYXBcIixcbiAgbmFtZXM6IFtcIlxcXFxtYXRobGxhcFwiLCBcIlxcXFxtYXRocmxhcFwiLCBcIlxcXFxtYXRoY2xhcFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyLFxuICAgICAgICBmdW5jTmFtZSA9IF9yZWYuZnVuY05hbWU7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImxhcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBhbGlnbm1lbnQ6IGZ1bmNOYW1lLnNsaWNlKDUpLFxuICAgICAgYm9keTogYm9keVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIG1hdGhsbGFwLCBtYXRocmxhcCwgbWF0aGNsYXBcbiAgICB2YXIgaW5uZXI7XG5cbiAgICBpZiAoZ3JvdXAuYWxpZ25tZW50ID09PSBcImNsYXBcIikge1xuICAgICAgLy8gcmVmOiBodHRwczovL3d3dy5tYXRoLmxzdS5lZHUvfmFwZXJsaXMvcHVibGljYXRpb25zL21hdGhjbGFwL1xuICAgICAgaW5uZXIgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXSwgW2J1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpXSk7IC8vIHdyYXAsIHNpbmNlIENTUyB3aWxsIGNlbnRlciBhIC5jbGFwID4gLmlubmVyID4gc3BhblxuXG4gICAgICBpbm5lciA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImlubmVyXCJdLCBbaW5uZXJdLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5uZXIgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJpbm5lclwiXSwgW2J1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpXSk7XG4gICAgfVxuXG4gICAgdmFyIGZpeCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImZpeFwiXSwgW10pO1xuICAgIHZhciBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW2dyb3VwLmFsaWdubWVudF0sIFtpbm5lciwgZml4XSwgb3B0aW9ucyk7IC8vIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgY29ycmVjdGx5IHNldCBob3Jpem9udGFsIGFsaWdubWVudCBvZiB0aGVcbiAgICAvLyB0d28gaXRlbXMgaW52b2x2ZWQgaW4gdGhlIGxhcC5cbiAgICAvLyBOZXh0LCB1c2UgYSBzdHJ1dCB0byBzZXQgdGhlIGhlaWdodCBvZiB0aGUgSFRNTCBib3VuZGluZyBib3guXG4gICAgLy8gT3RoZXJ3aXNlLCBhIHRhbGwgYXJndW1lbnQgbWF5IGJlIG1pc3BsYWNlZC5cblxuICAgIHZhciBzdHJ1dCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcInN0cnV0XCJdKTtcbiAgICBzdHJ1dC5zdHlsZS5oZWlnaHQgPSBub2RlLmhlaWdodCArIG5vZGUuZGVwdGggKyBcImVtXCI7XG4gICAgc3RydXQuc3R5bGUudmVydGljYWxBbGlnbiA9IC1ub2RlLmRlcHRoICsgXCJlbVwiO1xuICAgIG5vZGUuY2hpbGRyZW4udW5zaGlmdChzdHJ1dCk7IC8vIE5leHQsIHByZXZlbnQgdmVydGljYWwgbWlzcGxhY2VtZW50IHdoZW4gbmV4dCB0byBzb21ldGhpbmcgdGFsbC5cblxuICAgIG5vZGUgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImZpcnN0QmFzZWxpbmVcIixcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogbm9kZVxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTsgLy8gR2V0IHRoZSBob3Jpem9udGFsIHNwYWNpbmcgY29ycmVjdCByZWxhdGl2ZSB0byBhZGphY2VudCBpdGVtcy5cblxuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCJdLCBbbm9kZV0sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gbWF0aGxsYXAsIG1hdGhybGFwLCBtYXRoY2xhcFxuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcGFkZGVkXCIsIFtidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpXSk7XG5cbiAgICBpZiAoZ3JvdXAuYWxpZ25tZW50ICE9PSBcInJsYXBcIikge1xuICAgICAgdmFyIG9mZnNldCA9IGdyb3VwLmFsaWdubWVudCA9PT0gXCJsbGFwXCIgPyBcIi0xXCIgOiBcIi0wLjVcIjtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibHNwYWNlXCIsIG9mZnNldCArIFwid2lkdGhcIik7XG4gICAgfVxuXG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBcIjBweFwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvbWF0aC5qc1xuXG4gLy8gU3dpdGNoaW5nIGZyb20gdGV4dCBtb2RlIGJhY2sgdG8gbWF0aCBtb2RlXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJzdHlsaW5nXCIsXG4gIG5hbWVzOiBbXCJcXFxcKFwiLCBcIiRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGFsbG93ZWRJbk1hdGg6IGZhbHNlLFxuICAgIGNvbnN1bWVNb2RlOiBcIm1hdGhcIlxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lLFxuICAgICAgICBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICB2YXIgb3V0ZXJNb2RlID0gcGFyc2VyLm1vZGU7XG4gICAgcGFyc2VyLnN3aXRjaE1vZGUoXCJtYXRoXCIpO1xuICAgIHZhciBjbG9zZSA9IGZ1bmNOYW1lID09PSBcIlxcXFwoXCIgPyBcIlxcXFwpXCIgOiBcIiRcIjtcbiAgICB2YXIgYm9keSA9IHBhcnNlci5wYXJzZUV4cHJlc3Npb24oZmFsc2UsIGNsb3NlKTsgLy8gV2UgY2FuJ3QgZXhwYW5kIHRoZSBuZXh0IHN5bWJvbCBhZnRlciB0aGUgY2xvc2luZyAkIHVudGlsIGFmdGVyXG4gICAgLy8gc3dpdGNoaW5nIG1vZGVzIGJhY2suICBTbyBkb24ndCBjb25zdW1lIHdpdGhpbiBleHBlY3QuXG5cbiAgICBwYXJzZXIuZXhwZWN0KGNsb3NlLCBmYWxzZSk7XG4gICAgcGFyc2VyLnN3aXRjaE1vZGUob3V0ZXJNb2RlKTtcbiAgICBwYXJzZXIuY29uc3VtZSgpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInN0eWxpbmdcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgc3R5bGU6IFwidGV4dFwiLFxuICAgICAgYm9keTogYm9keVxuICAgIH07XG4gIH1cbn0pOyAvLyBDaGVjayBmb3IgZXh0cmEgY2xvc2luZyBtYXRoIGRlbGltaXRlcnNcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInRleHRcIixcbiAgLy8gRG9lc24ndCBtYXR0ZXIgd2hhdCB0aGlzIGlzLlxuICBuYW1lczogW1wiXFxcXClcIiwgXCJcXFxcXVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgYWxsb3dlZEluTWF0aDogZmFsc2VcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiTWlzbWF0Y2hlZCBcIiArIGNvbnRleHQuZnVuY05hbWUpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9tYXRoY2hvaWNlLmpzXG5cblxuXG5cblxuXG52YXIgbWF0aGNob2ljZV9jaG9vc2VNYXRoU3R5bGUgPSBmdW5jdGlvbiBjaG9vc2VNYXRoU3R5bGUoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgc3dpdGNoIChvcHRpb25zLnN0eWxlLnNpemUpIHtcbiAgICBjYXNlIHNyY19TdHlsZS5ESVNQTEFZLnNpemU6XG4gICAgICByZXR1cm4gZ3JvdXAuZGlzcGxheTtcblxuICAgIGNhc2Ugc3JjX1N0eWxlLlRFWFQuc2l6ZTpcbiAgICAgIHJldHVybiBncm91cC50ZXh0O1xuXG4gICAgY2FzZSBzcmNfU3R5bGUuU0NSSVBULnNpemU6XG4gICAgICByZXR1cm4gZ3JvdXAuc2NyaXB0O1xuXG4gICAgY2FzZSBzcmNfU3R5bGUuU0NSSVBUU0NSSVBULnNpemU6XG4gICAgICByZXR1cm4gZ3JvdXAuc2NyaXB0c2NyaXB0O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBncm91cC50ZXh0O1xuICB9XG59O1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibWF0aGNob2ljZVwiLFxuICBuYW1lczogW1wiXFxcXG1hdGhjaG9pY2VcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogNFxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZi5wYXJzZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwibWF0aGNob2ljZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBkaXNwbGF5OiBkZWZpbmVGdW5jdGlvbl9vcmRhcmd1bWVudChhcmdzWzBdKSxcbiAgICAgIHRleHQ6IGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGFyZ3NbMV0pLFxuICAgICAgc2NyaXB0OiBkZWZpbmVGdW5jdGlvbl9vcmRhcmd1bWVudChhcmdzWzJdKSxcbiAgICAgIHNjcmlwdHNjcmlwdDogZGVmaW5lRnVuY3Rpb25fb3JkYXJndW1lbnQoYXJnc1szXSlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgYm9keSA9IG1hdGhjaG9pY2VfY2hvb3NlTWF0aFN0eWxlKGdyb3VwLCBvcHRpb25zKTtcbiAgICB2YXIgZWxlbWVudHMgPSBidWlsZEhUTUxfYnVpbGRFeHByZXNzaW9uKGJvZHksIG9wdGlvbnMsIGZhbHNlKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUZyYWdtZW50KGVsZW1lbnRzKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBib2R5ID0gbWF0aGNob2ljZV9jaG9vc2VNYXRoU3R5bGUoZ3JvdXAsIG9wdGlvbnMpO1xuICAgIHJldHVybiBidWlsZEV4cHJlc3Npb25Sb3coYm9keSwgb3B0aW9ucyk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3V0aWxzL2Fzc2VtYmxlU3VwU3ViLmpzXG5cblxuLy8gRm9yIGFuIG9wZXJhdG9yIHdpdGggbGltaXRzLCBhc3NlbWJsZSB0aGUgYmFzZSwgc3VwLCBhbmQgc3ViIGludG8gYSBzcGFuLlxudmFyIGFzc2VtYmxlU3VwU3ViX2Fzc2VtYmxlU3VwU3ViID0gZnVuY3Rpb24gYXNzZW1ibGVTdXBTdWIoYmFzZSwgc3VwR3JvdXAsIHN1Ykdyb3VwLCBvcHRpb25zLCBzdHlsZSwgc2xhbnQsIGJhc2VTaGlmdCkge1xuICAvLyBJRSA4IGNsaXBzIFxcaW50IGlmIGl0IGlzIGluIGEgZGlzcGxheTogaW5saW5lLWJsb2NrLiBXZSB3cmFwIGl0XG4gIC8vIGluIGEgbmV3IHNwYW4gc28gaXQgaXMgYW4gaW5saW5lLCBhbmQgd29ya3MuXG4gIGJhc2UgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXSwgW2Jhc2VdKTtcbiAgdmFyIHN1YjtcbiAgdmFyIHN1cDsgLy8gV2UgbWFudWFsbHkgaGF2ZSB0byBoYW5kbGUgdGhlIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cy4gVGhpcyxcbiAgLy8gYXNpZGUgZnJvbSB0aGUga2VybiBjYWxjdWxhdGlvbnMsIGlzIGNvcGllZCBmcm9tIHN1cHN1Yi5cblxuICBpZiAoc3VwR3JvdXApIHtcbiAgICB2YXIgZWxlbSA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKHN1cEdyb3VwLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlLnN1cCgpKSwgb3B0aW9ucyk7XG4gICAgc3VwID0ge1xuICAgICAgZWxlbTogZWxlbSxcbiAgICAgIGtlcm46IE1hdGgubWF4KG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmcxLCBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nMyAtIGVsZW0uZGVwdGgpXG4gICAgfTtcbiAgfVxuXG4gIGlmIChzdWJHcm91cCkge1xuICAgIHZhciBfZWxlbSA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKHN1Ykdyb3VwLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlLnN1YigpKSwgb3B0aW9ucyk7XG5cbiAgICBzdWIgPSB7XG4gICAgICBlbGVtOiBfZWxlbSxcbiAgICAgIGtlcm46IE1hdGgubWF4KG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmcyLCBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNCAtIF9lbGVtLmhlaWdodClcbiAgICB9O1xuICB9IC8vIEJ1aWxkIHRoZSBmaW5hbCBncm91cCBhcyBhIHZsaXN0IG9mIHRoZSBwb3NzaWJsZSBzdWJzY3JpcHQsIGJhc2UsXG4gIC8vIGFuZCBwb3NzaWJsZSBzdXBlcnNjcmlwdC5cblxuXG4gIHZhciBmaW5hbEdyb3VwO1xuXG4gIGlmIChzdXAgJiYgc3ViKSB7XG4gICAgdmFyIGJvdHRvbSA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1ICsgc3ViLmVsZW0uaGVpZ2h0ICsgc3ViLmVsZW0uZGVwdGggKyBzdWIua2VybiArIGJhc2UuZGVwdGggKyBiYXNlU2hpZnQ7XG4gICAgZmluYWxHcm91cCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IGJvdHRvbSxcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogb3B0aW9ucy5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzVcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHN1Yi5lbGVtLFxuICAgICAgICBtYXJnaW5MZWZ0OiAtc2xhbnQgKyBcImVtXCJcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IHN1Yi5rZXJuXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBiYXNlXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiBzdXAua2VyblxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogc3VwLmVsZW0sXG4gICAgICAgIG1hcmdpbkxlZnQ6IHNsYW50ICsgXCJlbVwiXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNVxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfSBlbHNlIGlmIChzdWIpIHtcbiAgICB2YXIgdG9wID0gYmFzZS5oZWlnaHQgLSBiYXNlU2hpZnQ7IC8vIFNoaWZ0IHRoZSBsaW1pdHMgYnkgdGhlIHNsYW50IG9mIHRoZSBzeW1ib2wuIE5vdGVcbiAgICAvLyB0aGF0IHdlIGFyZSBzdXBwb3NlZCB0byBzaGlmdCB0aGUgbGltaXRzIGJ5IDEvMiBvZiB0aGUgc2xhbnQsXG4gICAgLy8gYnV0IHNpbmNlIHdlIGFyZSBjZW50ZXJpbmcgdGhlIGxpbWl0cyBhZGRpbmcgYSBmdWxsIHNsYW50IG9mXG4gICAgLy8gbWFyZ2luIHdpbGwgc2hpZnQgYnkgMS8yIHRoYXQuXG5cbiAgICBmaW5hbEdyb3VwID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJ0b3BcIixcbiAgICAgIHBvc2l0aW9uRGF0YTogdG9wLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogc3ViLmVsZW0sXG4gICAgICAgIG1hcmdpbkxlZnQ6IC1zbGFudCArIFwiZW1cIlxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogc3ViLmtlcm5cbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJhc2VcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSBpZiAoc3VwKSB7XG4gICAgdmFyIF9ib3R0b20gPSBiYXNlLmRlcHRoICsgYmFzZVNoaWZ0O1xuXG4gICAgZmluYWxHcm91cCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IF9ib3R0b20sXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJhc2VcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IHN1cC5rZXJuXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBzdXAuZWxlbSxcbiAgICAgICAgbWFyZ2luTGVmdDogc2xhbnQgKyBcImVtXCJcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1XG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgY2FzZSBwcm9iYWJseSBzaG91bGRuJ3Qgb2NjdXIgKHRoaXMgd291bGQgbWVhbiB0aGVcbiAgICAvLyBzdXBzdWIgd2FzIHNlbmRpbmcgdXMgYSBncm91cCB3aXRoIG5vIHN1cGVyc2NyaXB0IG9yXG4gICAgLy8gc3Vic2NyaXB0KSBidXQgYmUgc2FmZS5cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuXG4gIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3BcIiwgXCJvcC1saW1pdHNcIl0sIFtmaW5hbEdyb3VwXSwgb3B0aW9ucyk7XG59O1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL29wLmpzXG4vLyBMaW1pdHMsIHN5bWJvbHNcblxuXG5cblxuXG5cblxuXG5cblxuLy8gTW9zdCBvcGVyYXRvcnMgaGF2ZSBhIGxhcmdlIHN1Y2Nlc3NvciBzeW1ib2wsIGJ1dCB0aGVzZSBkb24ndC5cbnZhciBub1N1Y2Nlc3NvciA9IFtcIlxcXFxzbWFsbGludFwiXTsgLy8gTk9URTogVW5saWtlIG1vc3QgYGh0bWxCdWlsZGVyYHMsIHRoaXMgb25lIGhhbmRsZXMgbm90IG9ubHkgXCJvcFwiLCBidXQgYWxzb1xuLy8gXCJzdXBzdWJcIiBzaW5jZSBzb21lIG9mIHRoZW0gKGxpa2UgXFxpbnQpIGNhbiBhZmZlY3Qgc3VwZXIvc3Vic2NyaXB0aW5nLlxuXG52YXIgb3BfaHRtbEJ1aWxkZXIgPSBmdW5jdGlvbiBodG1sQnVpbGRlcihncnAsIG9wdGlvbnMpIHtcbiAgLy8gT3BlcmF0b3JzIGFyZSBoYW5kbGVkIGluIHRoZSBUZVhib29rIHBnLiA0NDMtNDQ0LCBydWxlIDEzKGEpLlxuICB2YXIgc3VwR3JvdXA7XG4gIHZhciBzdWJHcm91cDtcbiAgdmFyIGhhc0xpbWl0cyA9IGZhbHNlO1xuICB2YXIgZ3JvdXA7XG4gIHZhciBzdXBTdWIgPSBjaGVja05vZGVUeXBlKGdycCwgXCJzdXBzdWJcIik7XG5cbiAgaWYgKHN1cFN1Yikge1xuICAgIC8vIElmIHdlIGhhdmUgbGltaXRzLCBzdXBzdWIgd2lsbCBwYXNzIHVzIGl0cyBncm91cCB0byBoYW5kbGUuIFB1bGxcbiAgICAvLyBvdXQgdGhlIHN1cGVyc2NyaXB0IGFuZCBzdWJzY3JpcHQgYW5kIHNldCB0aGUgZ3JvdXAgdG8gdGhlIG9wIGluXG4gICAgLy8gaXRzIGJhc2UuXG4gICAgc3VwR3JvdXAgPSBzdXBTdWIuc3VwO1xuICAgIHN1Ykdyb3VwID0gc3VwU3ViLnN1YjtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKHN1cFN1Yi5iYXNlLCBcIm9wXCIpO1xuICAgIGhhc0xpbWl0cyA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgZ3JvdXAgPSBhc3NlcnROb2RlVHlwZShncnAsIFwib3BcIik7XG4gIH1cblxuICB2YXIgc3R5bGUgPSBvcHRpb25zLnN0eWxlO1xuICB2YXIgbGFyZ2UgPSBmYWxzZTtcblxuICBpZiAoc3R5bGUuc2l6ZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkuc2l6ZSAmJiBncm91cC5zeW1ib2wgJiYgIXV0aWxzLmNvbnRhaW5zKG5vU3VjY2Vzc29yLCBncm91cC5uYW1lKSkge1xuICAgIC8vIE1vc3Qgc3ltYm9sIG9wZXJhdG9ycyBnZXQgbGFyZ2VyIGluIGRpc3BsYXlzdHlsZSAocnVsZSAxMylcbiAgICBsYXJnZSA9IHRydWU7XG4gIH1cblxuICB2YXIgYmFzZTtcblxuICBpZiAoZ3JvdXAuc3ltYm9sKSB7XG4gICAgLy8gSWYgdGhpcyBpcyBhIHN5bWJvbCwgY3JlYXRlIHRoZSBzeW1ib2wuXG4gICAgdmFyIGZvbnROYW1lID0gbGFyZ2UgPyBcIlNpemUyLVJlZ3VsYXJcIiA6IFwiU2l6ZTEtUmVndWxhclwiO1xuICAgIHZhciBzdGFzaCA9IFwiXCI7XG5cbiAgICBpZiAoZ3JvdXAubmFtZSA9PT0gXCJcXFxcb2lpbnRcIiB8fCBncm91cC5uYW1lID09PSBcIlxcXFxvaWlpbnRcIikge1xuICAgICAgLy8gTm8gZm9udCBnbHlwaHMgeWV0LCBzbyB1c2UgYSBnbHlwaCB3L28gdGhlIG92YWwuXG4gICAgICAvLyBUT0RPOiBXaGVuIGZvbnQgZ2x5cGhzIGFyZSBhdmFpbGFibGUsIGRlbGV0ZSB0aGlzIGNvZGUuXG4gICAgICBzdGFzaCA9IGdyb3VwLm5hbWUuc3Vic3RyKDEpOyAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgIGdyb3VwLm5hbWUgPSBzdGFzaCA9PT0gXCJvaWludFwiID8gXCJcXFxcaWludFwiIDogXCJcXFxcaWlpbnRcIjtcbiAgICB9XG5cbiAgICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVN5bWJvbChncm91cC5uYW1lLCBmb250TmFtZSwgXCJtYXRoXCIsIG9wdGlvbnMsIFtcIm1vcFwiLCBcIm9wLXN5bWJvbFwiLCBsYXJnZSA/IFwibGFyZ2Utb3BcIiA6IFwic21hbGwtb3BcIl0pO1xuXG4gICAgaWYgKHN0YXNoLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIFdlJ3JlIGluIFxcb2lpbnQgb3IgXFxvaWlpbnQuIE92ZXJsYXkgdGhlIG92YWwuXG4gICAgICAvLyBUT0RPOiBXaGVuIGZvbnQgZ2x5cGhzIGFyZSBhdmFpbGFibGUsIGRlbGV0ZSB0aGlzIGNvZGUuXG4gICAgICB2YXIgaXRhbGljID0gYmFzZS5pdGFsaWM7XG4gICAgICB2YXIgb3ZhbCA9IGJ1aWxkQ29tbW9uLnN0YXRpY1N2ZyhzdGFzaCArIFwiU2l6ZVwiICsgKGxhcmdlID8gXCIyXCIgOiBcIjFcIiksIG9wdGlvbnMpO1xuICAgICAgYmFzZSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJpbmRpdmlkdWFsU2hpZnRcIixcbiAgICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogYmFzZSxcbiAgICAgICAgICBzaGlmdDogMFxuICAgICAgICB9LCB7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogb3ZhbCxcbiAgICAgICAgICBzaGlmdDogbGFyZ2UgPyAwLjA4IDogMFxuICAgICAgICB9XVxuICAgICAgfSwgb3B0aW9ucyk7IC8vICRGbG93Rml4TWVcblxuICAgICAgZ3JvdXAubmFtZSA9IFwiXFxcXFwiICsgc3Rhc2g7XG4gICAgICBiYXNlLmNsYXNzZXMudW5zaGlmdChcIm1vcFwiKTsgLy8gJEZsb3dGaXhNZVxuXG4gICAgICBiYXNlLml0YWxpYyA9IGl0YWxpYztcbiAgICB9XG4gIH0gZWxzZSBpZiAoZ3JvdXAuYm9keSkge1xuICAgIC8vIElmIHRoaXMgaXMgYSBsaXN0LCBjb21wb3NlIHRoYXQgbGlzdC5cbiAgICB2YXIgaW5uZXIgPSBidWlsZEhUTUxfYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMsIHRydWUpO1xuXG4gICAgaWYgKGlubmVyLmxlbmd0aCA9PT0gMSAmJiBpbm5lclswXSBpbnN0YW5jZW9mIGRvbVRyZWVfU3ltYm9sTm9kZSkge1xuICAgICAgYmFzZSA9IGlubmVyWzBdO1xuICAgICAgYmFzZS5jbGFzc2VzWzBdID0gXCJtb3BcIjsgLy8gcmVwbGFjZSBvbGQgbWNsYXNzXG4gICAgfSBlbHNlIHtcbiAgICAgIGJhc2UgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3BcIl0sIGJ1aWxkQ29tbW9uLnRyeUNvbWJpbmVDaGFycyhpbm5lciksIG9wdGlvbnMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2UsIHRoaXMgaXMgYSB0ZXh0IG9wZXJhdG9yLiBCdWlsZCB0aGUgdGV4dCBmcm9tIHRoZVxuICAgIC8vIG9wZXJhdG9yJ3MgbmFtZS5cbiAgICAvLyBUT0RPKGVtaWx5KTogQWRkIGEgc3BhY2UgaW4gdGhlIG1pZGRsZSBvZiBzb21lIG9mIHRoZXNlXG4gICAgLy8gb3BlcmF0b3JzLCBsaWtlIFxcbGltc3VwXG4gICAgdmFyIG91dHB1dCA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBncm91cC5uYW1lLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvdXRwdXQucHVzaChidWlsZENvbW1vbi5tYXRoc3ltKGdyb3VwLm5hbWVbaV0sIGdyb3VwLm1vZGUsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9wXCJdLCBvdXRwdXQsIG9wdGlvbnMpO1xuICB9IC8vIElmIGNvbnRlbnQgb2Ygb3AgaXMgYSBzaW5nbGUgc3ltYm9sLCBzaGlmdCBpdCB2ZXJ0aWNhbGx5LlxuXG5cbiAgdmFyIGJhc2VTaGlmdCA9IDA7XG4gIHZhciBzbGFudCA9IDA7XG5cbiAgaWYgKChiYXNlIGluc3RhbmNlb2YgZG9tVHJlZV9TeW1ib2xOb2RlIHx8IGdyb3VwLm5hbWUgPT09IFwiXFxcXG9paW50XCIgfHwgZ3JvdXAubmFtZSA9PT0gXCJcXFxcb2lpaW50XCIpICYmICFncm91cC5zdXBwcmVzc0Jhc2VTaGlmdCkge1xuICAgIC8vIFdlIHN1cHByZXNzIHRoZSBzaGlmdCBvZiB0aGUgYmFzZSBvZiBcXG92ZXJzZXQgYW5kIFxcdW5kZXJzZXQuIE90aGVyd2lzZSxcbiAgICAvLyBzaGlmdCB0aGUgc3ltYm9sIHNvIGl0cyBjZW50ZXIgbGllcyBvbiB0aGUgYXhpcyAocnVsZSAxMykuIEl0XG4gICAgLy8gYXBwZWFycyB0aGF0IG91ciBmb250cyBoYXZlIHRoZSBjZW50ZXJzIG9mIHRoZSBzeW1ib2xzIGFscmVhZHlcbiAgICAvLyBhbG1vc3Qgb24gdGhlIGF4aXMsIHNvIHRoZXNlIG51bWJlcnMgYXJlIHZlcnkgc21hbGwuIE5vdGUgd2VcbiAgICAvLyBkb24ndCBhY3R1YWxseSBhcHBseSB0aGlzIGhlcmUsIGJ1dCBpbnN0ZWFkIGl0IGlzIHVzZWQgZWl0aGVyIGluXG4gICAgLy8gdGhlIHZsaXN0IGNyZWF0aW9uIG9yIHNlcGFyYXRlbHkgd2hlbiB0aGVyZSBhcmUgbm8gbGltaXRzLlxuICAgIGJhc2VTaGlmdCA9IChiYXNlLmhlaWdodCAtIGJhc2UuZGVwdGgpIC8gMiAtIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0OyAvLyBUaGUgc2xhbnQgb2YgdGhlIHN5bWJvbCBpcyBqdXN0IGl0cyBpdGFsaWMgY29ycmVjdGlvbi5cbiAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICBzbGFudCA9IGJhc2UuaXRhbGljO1xuICB9XG5cbiAgaWYgKGhhc0xpbWl0cykge1xuICAgIHJldHVybiBhc3NlbWJsZVN1cFN1Yl9hc3NlbWJsZVN1cFN1YihiYXNlLCBzdXBHcm91cCwgc3ViR3JvdXAsIG9wdGlvbnMsIHN0eWxlLCBzbGFudCwgYmFzZVNoaWZ0KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoYmFzZVNoaWZ0KSB7XG4gICAgICBiYXNlLnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICAgICAgYmFzZS5zdHlsZS50b3AgPSBiYXNlU2hpZnQgKyBcImVtXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2U7XG4gIH1cbn07XG5cbnZhciBvcF9tYXRobWxCdWlsZGVyID0gZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICB2YXIgbm9kZTtcblxuICBpZiAoZ3JvdXAuc3ltYm9sKSB7XG4gICAgLy8gVGhpcyBpcyBhIHN5bWJvbC4gSnVzdCBhZGQgdGhlIHN5bWJvbC5cbiAgICBub2RlID0gbmV3IG1hdGhNTFRyZWVfTWF0aE5vZGUoXCJtb1wiLCBbYnVpbGRNYXRoTUxfbWFrZVRleHQoZ3JvdXAubmFtZSwgZ3JvdXAubW9kZSldKTtcblxuICAgIGlmICh1dGlscy5jb250YWlucyhub1N1Y2Nlc3NvciwgZ3JvdXAubmFtZSkpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibGFyZ2VvcFwiLCBcImZhbHNlXCIpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChncm91cC5ib2R5KSB7XG4gICAgLy8gVGhpcyBpcyBhbiBvcGVyYXRvciB3aXRoIGNoaWxkcmVuLiBBZGQgdGhlbS5cbiAgICBub2RlID0gbmV3IG1hdGhNTFRyZWVfTWF0aE5vZGUoXCJtb1wiLCBidWlsZE1hdGhNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucykpO1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgaXMgYSB0ZXh0IG9wZXJhdG9yLiBBZGQgYWxsIG9mIHRoZSBjaGFyYWN0ZXJzIGZyb20gdGhlXG4gICAgLy8gb3BlcmF0b3IncyBuYW1lLlxuICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZV9NYXRoTm9kZShcIm1pXCIsIFtuZXcgbWF0aE1MVHJlZV9UZXh0Tm9kZShncm91cC5uYW1lLnNsaWNlKDEpKV0pOyAvLyBBcHBlbmQgYW4gPG1vPiZBcHBseUZ1bmN0aW9uOzwvbW8+LlxuICAgIC8vIHJlZjogaHR0cHM6Ly93d3cudzMub3JnL1RSL1JFQy1NYXRoTUwvY2hhcDNfMi5odG1sI3NlYzMuMi40XG5cbiAgICB2YXIgb3BlcmF0b3IgPSBuZXcgbWF0aE1MVHJlZV9NYXRoTm9kZShcIm1vXCIsIFtidWlsZE1hdGhNTF9tYWtlVGV4dChcIlxcdTIwNjFcIiwgXCJ0ZXh0XCIpXSk7XG5cbiAgICBpZiAoZ3JvdXAucGFyZW50SXNTdXBTdWIpIHtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZV9NYXRoTm9kZShcIm1vXCIsIFtub2RlLCBvcGVyYXRvcl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3RG9jdW1lbnRGcmFnbWVudChbbm9kZSwgb3BlcmF0b3JdKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn07XG5cbnZhciBzaW5nbGVDaGFyQmlnT3BzID0ge1xuICBcIlxcdTIyMEZcIjogXCJcXFxccHJvZFwiLFxuICBcIlxcdTIyMTBcIjogXCJcXFxcY29wcm9kXCIsXG4gIFwiXFx1MjIxMVwiOiBcIlxcXFxzdW1cIixcbiAgXCJcXHUyMkMwXCI6IFwiXFxcXGJpZ3dlZGdlXCIsXG4gIFwiXFx1MjJDMVwiOiBcIlxcXFxiaWd2ZWVcIixcbiAgXCJcXHUyMkMyXCI6IFwiXFxcXGJpZ2NhcFwiLFxuICBcIlxcdTIyQzNcIjogXCJcXFxcYmlnY3VwXCIsXG4gIFwiXFx1MkEwMFwiOiBcIlxcXFxiaWdvZG90XCIsXG4gIFwiXFx1MkEwMVwiOiBcIlxcXFxiaWdvcGx1c1wiLFxuICBcIlxcdTJBMDJcIjogXCJcXFxcYmlnb3RpbWVzXCIsXG4gIFwiXFx1MkEwNFwiOiBcIlxcXFxiaWd1cGx1c1wiLFxuICBcIlxcdTJBMDZcIjogXCJcXFxcYmlnc3FjdXBcIlxufTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcFwiLFxuICBuYW1lczogW1wiXFxcXGNvcHJvZFwiLCBcIlxcXFxiaWd2ZWVcIiwgXCJcXFxcYmlnd2VkZ2VcIiwgXCJcXFxcYmlndXBsdXNcIiwgXCJcXFxcYmlnY2FwXCIsIFwiXFxcXGJpZ2N1cFwiLCBcIlxcXFxpbnRvcFwiLCBcIlxcXFxwcm9kXCIsIFwiXFxcXHN1bVwiLCBcIlxcXFxiaWdvdGltZXNcIiwgXCJcXFxcYmlnb3BsdXNcIiwgXCJcXFxcYmlnb2RvdFwiLCBcIlxcXFxiaWdzcWN1cFwiLCBcIlxcXFxzbWFsbGludFwiLCBcIlxcdTIyMEZcIiwgXCJcXHUyMjEwXCIsIFwiXFx1MjIxMVwiLCBcIlxcdTIyQzBcIiwgXCJcXHUyMkMxXCIsIFwiXFx1MjJDMlwiLCBcIlxcdTIyQzNcIiwgXCJcXHUyQTAwXCIsIFwiXFx1MkEwMVwiLCBcIlxcdTJBMDJcIiwgXCJcXHUyQTA0XCIsIFwiXFx1MkEwNlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lO1xuICAgIHZhciBmTmFtZSA9IGZ1bmNOYW1lO1xuXG4gICAgaWYgKGZOYW1lLmxlbmd0aCA9PT0gMSkge1xuICAgICAgZk5hbWUgPSBzaW5nbGVDaGFyQmlnT3BzW2ZOYW1lXTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsaW1pdHM6IHRydWUsXG4gICAgICBwYXJlbnRJc1N1cFN1YjogZmFsc2UsXG4gICAgICBzeW1ib2w6IHRydWUsXG4gICAgICBuYW1lOiBmTmFtZVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBvcF9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogb3BfbWF0aG1sQnVpbGRlclxufSk7IC8vIE5vdGU6IGNhbGxpbmcgZGVmaW5lRnVuY3Rpb24gd2l0aCBhIHR5cGUgdGhhdCdzIGFscmVhZHkgYmVlbiBkZWZpbmVkIG9ubHlcbi8vIHdvcmtzIGJlY2F1c2UgdGhlIHNhbWUgaHRtbEJ1aWxkZXIgYW5kIG1hdGhtbEJ1aWxkZXIgYXJlIGJlaW5nIHVzZWQuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcFwiLFxuICBuYW1lczogW1wiXFxcXG1hdGhvcFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZjIsIGFyZ3MpIHtcbiAgICB2YXIgcGFyc2VyID0gX3JlZjIucGFyc2VyO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsaW1pdHM6IGZhbHNlLFxuICAgICAgcGFyZW50SXNTdXBTdWI6IGZhbHNlLFxuICAgICAgc3ltYm9sOiBmYWxzZSxcbiAgICAgIGJvZHk6IGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGJvZHkpXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IG9wX2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBvcF9tYXRobWxCdWlsZGVyXG59KTsgLy8gVGhlcmUgYXJlIDIgZmxhZ3MgZm9yIG9wZXJhdG9yczsgd2hldGhlciB0aGV5IHByb2R1Y2UgbGltaXRzIGluXG4vLyBkaXNwbGF5c3R5bGUsIGFuZCB3aGV0aGVyIHRoZXkgYXJlIHN5bWJvbHMgYW5kIHNob3VsZCBncm93IGluXG4vLyBkaXNwbGF5c3R5bGUuIFRoZXNlIGZvdXIgZ3JvdXBzIGNvdmVyIHRoZSBmb3VyIHBvc3NpYmxlIGNob2ljZXMuXG5cbnZhciBzaW5nbGVDaGFySW50ZWdyYWxzID0ge1xuICBcIlxcdTIyMkJcIjogXCJcXFxcaW50XCIsXG4gIFwiXFx1MjIyQ1wiOiBcIlxcXFxpaW50XCIsXG4gIFwiXFx1MjIyRFwiOiBcIlxcXFxpaWludFwiLFxuICBcIlxcdTIyMkVcIjogXCJcXFxcb2ludFwiLFxuICBcIlxcdTIyMkZcIjogXCJcXFxcb2lpbnRcIixcbiAgXCJcXHUyMjMwXCI6IFwiXFxcXG9paWludFwiXG59OyAvLyBObyBsaW1pdHMsIG5vdCBzeW1ib2xzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcFwiLFxuICBuYW1lczogW1wiXFxcXGFyY3NpblwiLCBcIlxcXFxhcmNjb3NcIiwgXCJcXFxcYXJjdGFuXCIsIFwiXFxcXGFyY3RnXCIsIFwiXFxcXGFyY2N0Z1wiLCBcIlxcXFxhcmdcIiwgXCJcXFxcY2hcIiwgXCJcXFxcY29zXCIsIFwiXFxcXGNvc2VjXCIsIFwiXFxcXGNvc2hcIiwgXCJcXFxcY290XCIsIFwiXFxcXGNvdGdcIiwgXCJcXFxcY290aFwiLCBcIlxcXFxjc2NcIiwgXCJcXFxcY3RnXCIsIFwiXFxcXGN0aFwiLCBcIlxcXFxkZWdcIiwgXCJcXFxcZGltXCIsIFwiXFxcXGV4cFwiLCBcIlxcXFxob21cIiwgXCJcXFxca2VyXCIsIFwiXFxcXGxnXCIsIFwiXFxcXGxuXCIsIFwiXFxcXGxvZ1wiLCBcIlxcXFxzZWNcIiwgXCJcXFxcc2luXCIsIFwiXFxcXHNpbmhcIiwgXCJcXFxcc2hcIiwgXCJcXFxcdGFuXCIsIFwiXFxcXHRhbmhcIiwgXCJcXFxcdGdcIiwgXCJcXFxcdGhcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYzLnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmMy5mdW5jTmFtZTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsaW1pdHM6IGZhbHNlLFxuICAgICAgcGFyZW50SXNTdXBTdWI6IGZhbHNlLFxuICAgICAgc3ltYm9sOiBmYWxzZSxcbiAgICAgIG5hbWU6IGZ1bmNOYW1lXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IG9wX2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBvcF9tYXRobWxCdWlsZGVyXG59KTsgLy8gTGltaXRzLCBub3Qgc3ltYm9sc1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwib3BcIixcbiAgbmFtZXM6IFtcIlxcXFxkZXRcIiwgXCJcXFxcZ2NkXCIsIFwiXFxcXGluZlwiLCBcIlxcXFxsaW1cIiwgXCJcXFxcbWF4XCIsIFwiXFxcXG1pblwiLCBcIlxcXFxQclwiLCBcIlxcXFxzdXBcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWY0KSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWY0LnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmNC5mdW5jTmFtZTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsaW1pdHM6IHRydWUsXG4gICAgICBwYXJlbnRJc1N1cFN1YjogZmFsc2UsXG4gICAgICBzeW1ib2w6IGZhbHNlLFxuICAgICAgbmFtZTogZnVuY05hbWVcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogb3BfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IG9wX21hdGhtbEJ1aWxkZXJcbn0pOyAvLyBObyBsaW1pdHMsIHN5bWJvbHNcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcIm9wXCIsXG4gIG5hbWVzOiBbXCJcXFxcaW50XCIsIFwiXFxcXGlpbnRcIiwgXCJcXFxcaWlpbnRcIiwgXCJcXFxcb2ludFwiLCBcIlxcXFxvaWludFwiLCBcIlxcXFxvaWlpbnRcIiwgXCJcXHUyMjJCXCIsIFwiXFx1MjIyQ1wiLCBcIlxcdTIyMkRcIiwgXCJcXHUyMjJFXCIsIFwiXFx1MjIyRlwiLCBcIlxcdTIyMzBcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWY1KSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWY1LnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmNS5mdW5jTmFtZTtcbiAgICB2YXIgZk5hbWUgPSBmdW5jTmFtZTtcblxuICAgIGlmIChmTmFtZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGZOYW1lID0gc2luZ2xlQ2hhckludGVncmFsc1tmTmFtZV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwib3BcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGltaXRzOiBmYWxzZSxcbiAgICAgIHBhcmVudElzU3VwU3ViOiBmYWxzZSxcbiAgICAgIHN5bWJvbDogdHJ1ZSxcbiAgICAgIG5hbWU6IGZOYW1lXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IG9wX2h0bWxCdWlsZGVyLFxuICBtYXRobWxCdWlsZGVyOiBvcF9tYXRobWxCdWlsZGVyXG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9vcGVyYXRvcm5hbWUuanNcblxuXG5cblxuXG5cblxuXG4vLyBOT1RFOiBVbmxpa2UgbW9zdCBgaHRtbEJ1aWxkZXJgcywgdGhpcyBvbmUgaGFuZGxlcyBub3Qgb25seVxuLy8gXCJvcGVyYXRvcm5hbWVcIiwgYnV0IGFsc28gIFwic3Vwc3ViXCIgc2luY2UgXFxvcGVyYXRvcm5hbWUqIGNhblxudmFyIG9wZXJhdG9ybmFtZV9odG1sQnVpbGRlciA9IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdycCwgb3B0aW9ucykge1xuICAvLyBPcGVyYXRvcnMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgcGcuIDQ0My00NDQsIHJ1bGUgMTMoYSkuXG4gIHZhciBzdXBHcm91cDtcbiAgdmFyIHN1Ykdyb3VwO1xuICB2YXIgaGFzTGltaXRzID0gZmFsc2U7XG4gIHZhciBncm91cDtcbiAgdmFyIHN1cFN1YiA9IGNoZWNrTm9kZVR5cGUoZ3JwLCBcInN1cHN1YlwiKTtcblxuICBpZiAoc3VwU3ViKSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBsaW1pdHMsIHN1cHN1YiB3aWxsIHBhc3MgdXMgaXRzIGdyb3VwIHRvIGhhbmRsZS4gUHVsbFxuICAgIC8vIG91dCB0aGUgc3VwZXJzY3JpcHQgYW5kIHN1YnNjcmlwdCBhbmQgc2V0IHRoZSBncm91cCB0byB0aGUgb3AgaW5cbiAgICAvLyBpdHMgYmFzZS5cbiAgICBzdXBHcm91cCA9IHN1cFN1Yi5zdXA7XG4gICAgc3ViR3JvdXAgPSBzdXBTdWIuc3ViO1xuICAgIGdyb3VwID0gYXNzZXJ0Tm9kZVR5cGUoc3VwU3ViLmJhc2UsIFwib3BlcmF0b3JuYW1lXCIpO1xuICAgIGhhc0xpbWl0cyA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgZ3JvdXAgPSBhc3NlcnROb2RlVHlwZShncnAsIFwib3BlcmF0b3JuYW1lXCIpO1xuICB9XG5cbiAgdmFyIGJhc2U7XG5cbiAgaWYgKGdyb3VwLmJvZHkubGVuZ3RoID4gMCkge1xuICAgIHZhciBib2R5ID0gZ3JvdXAuYm9keS5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lOiBDaGVjayBpZiB0aGUgbm9kZSBoYXMgYSBzdHJpbmcgYHRleHRgIHByb3BlcnR5LlxuICAgICAgdmFyIGNoaWxkVGV4dCA9IGNoaWxkLnRleHQ7XG5cbiAgICAgIGlmICh0eXBlb2YgY2hpbGRUZXh0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgICAgbW9kZTogY2hpbGQubW9kZSxcbiAgICAgICAgICB0ZXh0OiBjaGlsZFRleHRcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cbiAgICB9KTsgLy8gQ29uc29saWRhdGUgZnVuY3Rpb24gbmFtZXMgaW50byBzeW1ib2wgY2hhcmFjdGVycy5cblxuICAgIHZhciBleHByZXNzaW9uID0gYnVpbGRIVE1MX2J1aWxkRXhwcmVzc2lvbihib2R5LCBvcHRpb25zLndpdGhGb250KFwibWF0aHJtXCIpLCB0cnVlKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwcmVzc2lvbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoaWxkID0gZXhwcmVzc2lvbltpXTtcblxuICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgZG9tVHJlZV9TeW1ib2xOb2RlKSB7XG4gICAgICAgIC8vIFBlciBhbXNvcG4gcGFja2FnZSxcbiAgICAgICAgLy8gY2hhbmdlIG1pbnVzIHRvIGh5cGhlbiBhbmQgXFxhc3QgdG8gYXN0ZXJpc2tcbiAgICAgICAgY2hpbGQudGV4dCA9IGNoaWxkLnRleHQucmVwbGFjZSgvXFx1MjIxMi8sIFwiLVwiKS5yZXBsYWNlKC9cXHUyMjE3LywgXCIqXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGJhc2UgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3BcIl0sIGV4cHJlc3Npb24sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIGJhc2UgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3BcIl0sIFtdLCBvcHRpb25zKTtcbiAgfVxuXG4gIGlmIChoYXNMaW1pdHMpIHtcbiAgICByZXR1cm4gYXNzZW1ibGVTdXBTdWJfYXNzZW1ibGVTdXBTdWIoYmFzZSwgc3VwR3JvdXAsIHN1Ykdyb3VwLCBvcHRpb25zLCBvcHRpb25zLnN0eWxlLCAwLCAwKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTtcbiAgfVxufTtcblxudmFyIG9wZXJhdG9ybmFtZV9tYXRobWxCdWlsZGVyID0gZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAvLyBUaGUgc3RlcHMgdGFrZW4gaGVyZSBhcmUgc2ltaWxhciB0byB0aGUgaHRtbCB2ZXJzaW9uLlxuICB2YXIgZXhwcmVzc2lvbiA9IGJ1aWxkTWF0aE1MX2J1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zLndpdGhGb250KFwibWF0aHJtXCIpKTsgLy8gSXMgZXhwcmVzc2lvbiBhIHN0cmluZyBvciBoYXMgaXQgc29tZXRoaW5nIGxpa2UgYSBmcmFjdGlvbj9cblxuICB2YXIgaXNBbGxTdHJpbmcgPSB0cnVlOyAvLyBkZWZhdWx0XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9uLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG5vZGUgPSBleHByZXNzaW9uW2ldO1xuXG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBtYXRoTUxUcmVlLlNwYWNlTm9kZSkgey8vIERvIG5vdGhpbmdcbiAgICB9IGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBtYXRoTUxUcmVlLk1hdGhOb2RlKSB7XG4gICAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgICBjYXNlIFwibWlcIjpcbiAgICAgICAgY2FzZSBcIm1uXCI6XG4gICAgICAgIGNhc2UgXCJtc1wiOlxuICAgICAgICBjYXNlIFwibXNwYWNlXCI6XG4gICAgICAgIGNhc2UgXCJtdGV4dFwiOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyBEbyBub3RoaW5nIHlldC5cblxuICAgICAgICBjYXNlIFwibW9cIjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBub2RlLmNoaWxkcmVuWzBdO1xuXG4gICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgY2hpbGQgaW5zdGFuY2VvZiBtYXRoTUxUcmVlLlRleHROb2RlKSB7XG4gICAgICAgICAgICAgIGNoaWxkLnRleHQgPSBjaGlsZC50ZXh0LnJlcGxhY2UoL1xcdTIyMTIvLCBcIi1cIikucmVwbGFjZSgvXFx1MjIxNy8sIFwiKlwiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlzQWxsU3RyaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlzQWxsU3RyaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzQWxsU3RyaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzQWxsU3RyaW5nKSB7XG4gICAgLy8gV3JpdGUgYSBzaW5nbGUgVGV4dE5vZGUgaW5zdGVhZCBvZiBtdWx0aXBsZSBuZXN0ZWQgdGFncy5cbiAgICB2YXIgd29yZCA9IGV4cHJlc3Npb24ubWFwKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICByZXR1cm4gbm9kZS50b1RleHQoKTtcbiAgICB9KS5qb2luKFwiXCIpO1xuICAgIGV4cHJlc3Npb24gPSBbbmV3IG1hdGhNTFRyZWUuVGV4dE5vZGUod29yZCldO1xuICB9XG5cbiAgdmFyIGlkZW50aWZpZXIgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1pXCIsIGV4cHJlc3Npb24pO1xuICBpZGVudGlmaWVyLnNldEF0dHJpYnV0ZShcIm1hdGh2YXJpYW50XCIsIFwibm9ybWFsXCIpOyAvLyBcXHUyMDYxIGlzIHRoZSBzYW1lIGFzICZBcHBseUZ1bmN0aW9uO1xuICAvLyByZWY6IGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vY2hhcnNldHMvcmVmX2h0bWxfZW50aXRpZXNfYS5hc3BcblxuICB2YXIgb3BlcmF0b3IgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFtidWlsZE1hdGhNTF9tYWtlVGV4dChcIlxcdTIwNjFcIiwgXCJ0ZXh0XCIpXSk7XG5cbiAgaWYgKGdyb3VwLnBhcmVudElzU3VwU3ViKSB7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW2lkZW50aWZpZXIsIG9wZXJhdG9yXSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG1hdGhNTFRyZWUubmV3RG9jdW1lbnRGcmFnbWVudChbaWRlbnRpZmllciwgb3BlcmF0b3JdKTtcbiAgfVxufTsgLy8gXFxvcGVyYXRvcm5hbWVcbi8vIGFtc29wbi5kdHg6IFxcbWF0aG9weyMxXFxrZXJuXFx6QFxcb3BlcmF0b3JAZm9udCMzfVxcbmV3bWNvZGVzQFxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcGVyYXRvcm5hbWVcIixcbiAgbmFtZXM6IFtcIlxcXFxvcGVyYXRvcm5hbWVcIiwgXCJcXFxcb3BlcmF0b3JuYW1lKlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcGVyYXRvcm5hbWVcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keTogZGVmaW5lRnVuY3Rpb25fb3JkYXJndW1lbnQoYm9keSksXG4gICAgICBhbHdheXNIYW5kbGVTdXBTdWI6IGZ1bmNOYW1lID09PSBcIlxcXFxvcGVyYXRvcm5hbWUqXCIsXG4gICAgICBsaW1pdHM6IGZhbHNlLFxuICAgICAgcGFyZW50SXNTdXBTdWI6IGZhbHNlXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IG9wZXJhdG9ybmFtZV9odG1sQnVpbGRlcixcbiAgbWF0aG1sQnVpbGRlcjogb3BlcmF0b3JuYW1lX21hdGhtbEJ1aWxkZXJcbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL29yZGdyb3VwLmpzXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uQnVpbGRlcnMoe1xuICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIGlmIChncm91cC5zZW1pc2ltcGxlKSB7XG4gICAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUZyYWdtZW50KGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucywgZmFsc2UpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiXSwgYnVpbGRIVE1MX2J1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zLCB0cnVlKSwgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYnVpbGRFeHByZXNzaW9uUm93KGdyb3VwLmJvZHksIG9wdGlvbnMsIHRydWUpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9vdmVybGluZS5qc1xuXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvdmVybGluZVwiLFxuICBuYW1lczogW1wiXFxcXG92ZXJsaW5lXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvdmVybGluZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5OiBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gT3ZlcmxpbmVzIGFyZSBoYW5kbGVkIGluIHRoZSBUZVhib29rIHBnIDQ0MywgUnVsZSA5LlxuICAgIC8vIEJ1aWxkIHRoZSBpbm5lciBncm91cCBpbiB0aGUgY3JhbXBlZCBzdHlsZS5cbiAgICB2YXIgaW5uZXJHcm91cCA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMuaGF2aW5nQ3JhbXBlZFN0eWxlKCkpOyAvLyBDcmVhdGUgdGhlIGxpbmUgYWJvdmUgdGhlIGJvZHlcblxuICAgIHZhciBsaW5lID0gYnVpbGRDb21tb24ubWFrZUxpbmVTcGFuKFwib3ZlcmxpbmUtbGluZVwiLCBvcHRpb25zKTsgLy8gR2VuZXJhdGUgdGhlIHZsaXN0LCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBrZXJuc1xuXG4gICAgdmFyIGRlZmF1bHRSdWxlVGhpY2tuZXNzID0gb3B0aW9ucy5mb250TWV0cmljcygpLmRlZmF1bHRSdWxlVGhpY2tuZXNzO1xuICAgIHZhciB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBpbm5lckdyb3VwXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiAzICogZGVmYXVsdFJ1bGVUaGlja25lc3NcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGxpbmVcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IGRlZmF1bHRSdWxlVGhpY2tuZXNzXG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCIsIFwib3ZlcmxpbmVcIl0sIFt2bGlzdF0sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG9wZXJhdG9yID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbbmV3IG1hdGhNTFRyZWUuVGV4dE5vZGUoXCJcXHUyMDNFXCIpXSk7XG4gICAgb3BlcmF0b3Iuc2V0QXR0cmlidXRlKFwic3RyZXRjaHlcIiwgXCJ0cnVlXCIpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb3ZlclwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKSwgb3BlcmF0b3JdKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImFjY2VudFwiLCBcInRydWVcIik7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3BoYW50b20uanNcblxuXG5cblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwicGhhbnRvbVwiLFxuICBuYW1lczogW1wiXFxcXHBoYW50b21cIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwicGhhbnRvbVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5OiBkZWZpbmVGdW5jdGlvbl9vcmRhcmd1bWVudChib2R5KVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBlbGVtZW50cyA9IGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucy53aXRoUGhhbnRvbSgpLCBmYWxzZSk7IC8vIFxccGhhbnRvbSBpc24ndCBzdXBwb3NlZCB0byBhZmZlY3QgdGhlIGVsZW1lbnRzIGl0IGNvbnRhaW5zLlxuICAgIC8vIFNlZSBcImNvbG9yXCIgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlRnJhZ21lbnQoZWxlbWVudHMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIGlubmVyID0gYnVpbGRNYXRoTUxfYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMpO1xuICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1waGFudG9tXCIsIGlubmVyKTtcbiAgfVxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaHBoYW50b21cIixcbiAgbmFtZXM6IFtcIlxcXFxocGhhbnRvbVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmMiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmMi5wYXJzZXI7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImhwaGFudG9tXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IGJvZHlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtdLCBbYnVpbGRIVE1MX2J1aWxkR3JvdXAoZ3JvdXAuYm9keSwgb3B0aW9ucy53aXRoUGhhbnRvbSgpKV0pO1xuICAgIG5vZGUuaGVpZ2h0ID0gMDtcbiAgICBub2RlLmRlcHRoID0gMDtcblxuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbm9kZS5jaGlsZHJlbltpXS5oZWlnaHQgPSAwO1xuICAgICAgICBub2RlLmNoaWxkcmVuW2ldLmRlcHRoID0gMDtcbiAgICAgIH1cbiAgICB9IC8vIFNlZSBzbWFzaCBmb3IgY29tbWVudCByZTogdXNlIG9mIG1ha2VWTGlzdFxuXG5cbiAgICBub2RlID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJmaXJzdEJhc2VsaW5lXCIsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IG5vZGVcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7IC8vIEZvciBzcGFjaW5nLCBUZVggdHJlYXRzIFxcc21hc2ggYXMgYSBtYXRoIGdyb3VwIChzYW1lIHNwYWNpbmcgYXMgb3JkKS5cblxuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCJdLCBbbm9kZV0sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIGlubmVyID0gYnVpbGRNYXRoTUxfYnVpbGRFeHByZXNzaW9uKGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGdyb3VwLmJvZHkpLCBvcHRpb25zKTtcbiAgICB2YXIgcGhhbnRvbSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBoYW50b21cIiwgaW5uZXIpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcGFkZGVkXCIsIFtwaGFudG9tXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgXCIwcHhcIik7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJkZXB0aFwiLCBcIjBweFwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidnBoYW50b21cIixcbiAgbmFtZXM6IFtcIlxcXFx2cGhhbnRvbVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmMywgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmMy5wYXJzZXI7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInZwaGFudG9tXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IGJvZHlcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgaW5uZXIgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJpbm5lclwiXSwgW2J1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMud2l0aFBoYW50b20oKSldKTtcbiAgICB2YXIgZml4ID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiZml4XCJdLCBbXSk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJybGFwXCJdLCBbaW5uZXIsIGZpeF0sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIGlubmVyID0gYnVpbGRNYXRoTUxfYnVpbGRFeHByZXNzaW9uKGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGdyb3VwLmJvZHkpLCBvcHRpb25zKTtcbiAgICB2YXIgcGhhbnRvbSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBoYW50b21cIiwgaW5uZXIpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcGFkZGVkXCIsIFtwaGFudG9tXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBcIjBweFwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvcmFpc2Vib3guanNcblxuXG5cblxuXG5cbiAvLyBCb3ggbWFuaXB1bGF0aW9uXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJyYWlzZWJveFwiLFxuICBuYW1lczogW1wiXFxcXHJhaXNlYm94XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYXJnVHlwZXM6IFtcInNpemVcIiwgXCJoYm94XCJdLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyO1xuICAgIHZhciBhbW91bnQgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcInNpemVcIikudmFsdWU7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzFdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInJhaXNlYm94XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGR5OiBhbW91bnQsXG4gICAgICBib2R5OiBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIGJvZHkgPSBidWlsZEhUTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKTtcbiAgICB2YXIgZHkgPSB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLmR5LCBvcHRpb25zKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJzaGlmdFwiLFxuICAgICAgcG9zaXRpb25EYXRhOiAtZHksXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJvZHlcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuICAgIHZhciBkeSA9IGdyb3VwLmR5Lm51bWJlciArIGdyb3VwLmR5LnVuaXQ7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ2b2Zmc2V0XCIsIGR5KTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvcnVsZS5qc1xuXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJydWxlXCIsXG4gIG5hbWVzOiBbXCJcXFxccnVsZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyLFxuICAgIG51bU9wdGlvbmFsQXJnczogMSxcbiAgICBhcmdUeXBlczogW1wic2l6ZVwiLCBcInNpemVcIiwgXCJzaXplXCJdXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICB2YXIgc2hpZnQgPSBvcHRBcmdzWzBdO1xuICAgIHZhciB3aWR0aCA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwic2l6ZVwiKTtcbiAgICB2YXIgaGVpZ2h0ID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1sxXSwgXCJzaXplXCIpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInJ1bGVcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgc2hpZnQ6IHNoaWZ0ICYmIGFzc2VydE5vZGVUeXBlKHNoaWZ0LCBcInNpemVcIikudmFsdWUsXG4gICAgICB3aWR0aDogd2lkdGgudmFsdWUsXG4gICAgICBoZWlnaHQ6IGhlaWdodC52YWx1ZVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIE1ha2UgYW4gZW1wdHkgc3BhbiBmb3IgdGhlIHJ1bGVcbiAgICB2YXIgcnVsZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJydWxlXCJdLCBbXSwgb3B0aW9ucyk7IC8vIENhbGN1bGF0ZSB0aGUgc2hpZnQsIHdpZHRoLCBhbmQgaGVpZ2h0IG9mIHRoZSBydWxlLCBhbmQgYWNjb3VudCBmb3IgdW5pdHNcblxuICAgIHZhciB3aWR0aCA9IHVuaXRzX2NhbGN1bGF0ZVNpemUoZ3JvdXAud2lkdGgsIG9wdGlvbnMpO1xuICAgIHZhciBoZWlnaHQgPSB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLmhlaWdodCwgb3B0aW9ucyk7XG4gICAgdmFyIHNoaWZ0ID0gZ3JvdXAuc2hpZnQgPyB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLnNoaWZ0LCBvcHRpb25zKSA6IDA7IC8vIFN0eWxlIHRoZSBydWxlIHRvIHRoZSByaWdodCBzaXplXG5cbiAgICBydWxlLnN0eWxlLmJvcmRlclJpZ2h0V2lkdGggPSB3aWR0aCArIFwiZW1cIjtcbiAgICBydWxlLnN0eWxlLmJvcmRlclRvcFdpZHRoID0gaGVpZ2h0ICsgXCJlbVwiO1xuICAgIHJ1bGUuc3R5bGUuYm90dG9tID0gc2hpZnQgKyBcImVtXCI7IC8vIFJlY29yZCB0aGUgaGVpZ2h0IGFuZCB3aWR0aFxuXG4gICAgcnVsZS53aWR0aCA9IHdpZHRoO1xuICAgIHJ1bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgc2hpZnQ7XG4gICAgcnVsZS5kZXB0aCA9IC1zaGlmdDsgLy8gRm9udCBzaXplIGlzIHRoZSBudW1iZXIgbGFyZ2UgZW5vdWdoIHRoYXQgdGhlIGJyb3dzZXIgd2lsbFxuICAgIC8vIHJlc2VydmUgYXQgbGVhc3QgYGFic0hlaWdodGAgc3BhY2UgYWJvdmUgdGhlIGJhc2VsaW5lLlxuICAgIC8vIFRoZSAxLjEyNSBmYWN0b3Igd2FzIGVtcGlyaWNhbGx5IGRldGVybWluZWRcblxuICAgIHJ1bGUubWF4Rm9udFNpemUgPSBoZWlnaHQgKiAxLjEyNSAqIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgcmV0dXJuIHJ1bGU7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgd2lkdGggPSB1bml0c19jYWxjdWxhdGVTaXplKGdyb3VwLndpZHRoLCBvcHRpb25zKTtcbiAgICB2YXIgaGVpZ2h0ID0gdW5pdHNfY2FsY3VsYXRlU2l6ZShncm91cC5oZWlnaHQsIG9wdGlvbnMpO1xuICAgIHZhciBzaGlmdCA9IGdyb3VwLnNoaWZ0ID8gdW5pdHNfY2FsY3VsYXRlU2l6ZShncm91cC5zaGlmdCwgb3B0aW9ucykgOiAwO1xuICAgIHZhciBjb2xvciA9IG9wdGlvbnMuY29sb3IgJiYgb3B0aW9ucy5nZXRDb2xvcigpIHx8IFwiYmxhY2tcIjtcbiAgICB2YXIgcnVsZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXNwYWNlXCIpO1xuICAgIHJ1bGUuc2V0QXR0cmlidXRlKFwibWF0aGJhY2tncm91bmRcIiwgY29sb3IpO1xuICAgIHJ1bGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgd2lkdGggKyBcImVtXCIpO1xuICAgIHJ1bGUuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGhlaWdodCArIFwiZW1cIik7XG4gICAgdmFyIHdyYXBwZXIgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1wYWRkZWRcIiwgW3J1bGVdKTtcblxuICAgIGlmIChzaGlmdCA+PSAwKSB7XG4gICAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBcIitcIiArIHNoaWZ0ICsgXCJlbVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgc2hpZnQgKyBcImVtXCIpO1xuICAgICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoXCJkZXB0aFwiLCBcIitcIiArIC1zaGlmdCArIFwiZW1cIik7XG4gICAgfVxuXG4gICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoXCJ2b2Zmc2V0XCIsIHNoaWZ0ICsgXCJlbVwiKTtcbiAgICByZXR1cm4gd3JhcHBlcjtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvc2l6aW5nLmpzXG5cblxuXG5cblxuZnVuY3Rpb24gc2l6aW5nR3JvdXAodmFsdWUsIG9wdGlvbnMsIGJhc2VPcHRpb25zKSB7XG4gIHZhciBpbm5lciA9IGJ1aWxkSFRNTF9idWlsZEV4cHJlc3Npb24odmFsdWUsIG9wdGlvbnMsIGZhbHNlKTtcbiAgdmFyIG11bHRpcGxpZXIgPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gYmFzZU9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7IC8vIEFkZCBzaXplLXJlc2V0dGluZyBjbGFzc2VzIHRvIHRoZSBpbm5lciBsaXN0IGFuZCBzZXQgbWF4Rm9udFNpemVcbiAgLy8gbWFudWFsbHkuIEhhbmRsZSBuZXN0ZWQgc2l6ZSBjaGFuZ2VzLlxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaW5uZXIubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcG9zID0gaW5uZXJbaV0uY2xhc3Nlcy5pbmRleE9mKFwic2l6aW5nXCIpO1xuXG4gICAgaWYgKHBvcyA8IDApIHtcbiAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGlubmVyW2ldLmNsYXNzZXMsIG9wdGlvbnMuc2l6aW5nQ2xhc3NlcyhiYXNlT3B0aW9ucykpO1xuICAgIH0gZWxzZSBpZiAoaW5uZXJbaV0uY2xhc3Nlc1twb3MgKyAxXSA9PT0gXCJyZXNldC1zaXplXCIgKyBvcHRpb25zLnNpemUpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBuZXN0ZWQgc2l6ZSBjaGFuZ2U6IGUuZy4sIGlubmVyW2ldIGlzIHRoZSBcImJcIiBpblxuICAgICAgLy8gYFxcSHVnZSBhIFxcc21hbGwgYmAuIE92ZXJyaWRlIHRoZSBvbGQgc2l6ZSAodGhlIGByZXNldC1gIGNsYXNzKVxuICAgICAgLy8gYnV0IG5vdCB0aGUgbmV3IHNpemUuXG4gICAgICBpbm5lcltpXS5jbGFzc2VzW3BvcyArIDFdID0gXCJyZXNldC1zaXplXCIgKyBiYXNlT3B0aW9ucy5zaXplO1xuICAgIH1cblxuICAgIGlubmVyW2ldLmhlaWdodCAqPSBtdWx0aXBsaWVyO1xuICAgIGlubmVyW2ldLmRlcHRoICo9IG11bHRpcGxpZXI7XG4gIH1cblxuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUZyYWdtZW50KGlubmVyKTtcbn1cbnZhciBzaXplRnVuY3MgPSBbXCJcXFxcdGlueVwiLCBcIlxcXFxzaXhwdHNpemVcIiwgXCJcXFxcc2NyaXB0c2l6ZVwiLCBcIlxcXFxmb290bm90ZXNpemVcIiwgXCJcXFxcc21hbGxcIiwgXCJcXFxcbm9ybWFsc2l6ZVwiLCBcIlxcXFxsYXJnZVwiLCBcIlxcXFxMYXJnZVwiLCBcIlxcXFxMQVJHRVwiLCBcIlxcXFxodWdlXCIsIFwiXFxcXEh1Z2VcIl07XG52YXIgc2l6aW5nX2h0bWxCdWlsZGVyID0gZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgLy8gSGFuZGxlIHNpemluZyBvcGVyYXRvcnMgbGlrZSBcXEh1Z2UuIFJlYWwgVGVYIGRvZXNuJ3QgYWN0dWFsbHkgYWxsb3dcbiAgLy8gdGhlc2UgZnVuY3Rpb25zIGluc2lkZSBvZiBtYXRoIGV4cHJlc3Npb25zLCBzbyB3ZSBkbyBzb21lIHNwZWNpYWxcbiAgLy8gaGFuZGxpbmcuXG4gIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTaXplKGdyb3VwLnNpemUpO1xuICByZXR1cm4gc2l6aW5nR3JvdXAoZ3JvdXAuYm9keSwgbmV3T3B0aW9ucywgb3B0aW9ucyk7XG59O1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInNpemluZ1wiLFxuICBuYW1lczogc2l6ZUZ1bmNzLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgYnJlYWtPblRva2VuVGV4dCA9IF9yZWYuYnJlYWtPblRva2VuVGV4dCxcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lLFxuICAgICAgICBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICB2YXIgYm9keSA9IHBhcnNlci5wYXJzZUV4cHJlc3Npb24oZmFsc2UsIGJyZWFrT25Ub2tlblRleHQpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInNpemluZ1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICAvLyBGaWd1cmUgb3V0IHdoYXQgc2l6ZSB0byB1c2UgYmFzZWQgb24gdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIGFib3ZlXG4gICAgICBzaXplOiBzaXplRnVuY3MuaW5kZXhPZihmdW5jTmFtZSkgKyAxLFxuICAgICAgYm9keTogYm9keVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBzaXppbmdfaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU2l6ZShncm91cC5zaXplKTtcbiAgICB2YXIgaW5uZXIgPSBidWlsZE1hdGhNTF9idWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgbmV3T3B0aW9ucyk7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1zdHlsZVwiLCBpbm5lcik7IC8vIFRPRE8oZW1pbHkpOiBUaGlzIGRvZXNuJ3QgcHJvZHVjZSB0aGUgY29ycmVjdCBzaXplIGZvciBuZXN0ZWQgc2l6ZVxuICAgIC8vIGNoYW5nZXMsIGJlY2F1c2Ugd2UgZG9uJ3Qga2VlcCBzdGF0ZSBvZiB3aGF0IHN0eWxlIHdlJ3JlIGN1cnJlbnRseVxuICAgIC8vIGluLCBzbyB3ZSBjYW4ndCByZXNldCB0aGUgc2l6ZSB0byBub3JtYWwgYmVmb3JlIGNoYW5naW5nIGl0LiAgTm93XG4gICAgLy8gdGhhdCB3ZSdyZSBwYXNzaW5nIGFuIG9wdGlvbnMgcGFyYW1ldGVyIHdlIHNob3VsZCBiZSBhYmxlIHRvIGZpeFxuICAgIC8vIHRoaXMuXG5cbiAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGhzaXplXCIsIG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXIgKyBcImVtXCIpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9zbWFzaC5qc1xuLy8gc21hc2gsIHdpdGggb3B0aW9uYWwgW3RiXSwgYXMgaW4gQU1TXG5cblxuXG5cblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwic21hc2hcIixcbiAgbmFtZXM6IFtcIlxcXFxzbWFzaFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIG51bU9wdGlvbmFsQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICB2YXIgc21hc2hIZWlnaHQgPSBmYWxzZTtcbiAgICB2YXIgc21hc2hEZXB0aCA9IGZhbHNlO1xuICAgIHZhciB0YkFyZyA9IG9wdEFyZ3NbMF0gJiYgYXNzZXJ0Tm9kZVR5cGUob3B0QXJnc1swXSwgXCJvcmRncm91cFwiKTtcblxuICAgIGlmICh0YkFyZykge1xuICAgICAgLy8gT3B0aW9uYWwgW3RiXSBhcmd1bWVudCBpcyBlbmdhZ2VkLlxuICAgICAgLy8gcmVmOiBhbXNtYXRoOiBcXHJlbmV3Y29tbWFuZHtcXHNtYXNofVsxXVt0Yl17JVxuICAgICAgLy8gICAgICAgICAgICAgICBkZWZcXG1iQHR7XFxodH1cXGRlZlxcbWJAYntcXGRwfVxcZGVmXFxtYkB0YntcXGh0XFx6QFxcekBcXGRwfSVcbiAgICAgIHZhciBsZXR0ZXIgPSBcIlwiO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRiQXJnLmJvZHkubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIG5vZGUgPSB0YkFyZy5ib2R5W2ldOyAvLyAkRmxvd0ZpeE1lOiBOb3QgZXZlcnkgbm9kZSB0eXBlIGhhcyBhIGB0ZXh0YCBwcm9wZXJ0eS5cblxuICAgICAgICBsZXR0ZXIgPSBub2RlLnRleHQ7XG5cbiAgICAgICAgaWYgKGxldHRlciA9PT0gXCJ0XCIpIHtcbiAgICAgICAgICBzbWFzaEhlaWdodCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAobGV0dGVyID09PSBcImJcIikge1xuICAgICAgICAgIHNtYXNoRGVwdGggPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNtYXNoSGVpZ2h0ID0gZmFsc2U7XG4gICAgICAgICAgc21hc2hEZXB0aCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNtYXNoSGVpZ2h0ID0gdHJ1ZTtcbiAgICAgIHNtYXNoRGVwdGggPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzbWFzaFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5OiBib2R5LFxuICAgICAgc21hc2hIZWlnaHQ6IHNtYXNoSGVpZ2h0LFxuICAgICAgc21hc2hEZXB0aDogc21hc2hEZXB0aFxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW10sIFtidWlsZEhUTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuXG4gICAgaWYgKCFncm91cC5zbWFzaEhlaWdodCAmJiAhZ3JvdXAuc21hc2hEZXB0aCkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgaWYgKGdyb3VwLnNtYXNoSGVpZ2h0KSB7XG4gICAgICBub2RlLmhlaWdodCA9IDA7IC8vIEluIG9yZGVyIHRvIGluZmx1ZW5jZSBtYWtlVkxpc3QsIHdlIGhhdmUgdG8gcmVzZXQgdGhlIGNoaWxkcmVuLlxuXG4gICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBub2RlLmNoaWxkcmVuW2ldLmhlaWdodCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JvdXAuc21hc2hEZXB0aCkge1xuICAgICAgbm9kZS5kZXB0aCA9IDA7XG5cbiAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgIG5vZGUuY2hpbGRyZW5bX2ldLmRlcHRoID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gQXQgdGhpcyBwb2ludCwgd2UndmUgcmVzZXQgdGhlIFRlWC1saWtlIGhlaWdodCBhbmQgZGVwdGggdmFsdWVzLlxuICAgIC8vIEJ1dCB0aGUgc3BhbiBzdGlsbCBoYXMgYW4gSFRNTCBsaW5lIGhlaWdodC5cbiAgICAvLyBtYWtlVkxpc3QgYXBwbGllcyBcImRpc3BsYXk6IHRhYmxlLWNlbGxcIiwgd2hpY2ggcHJldmVudHMgdGhlIGJyb3dzZXJcbiAgICAvLyBmcm9tIGFjdGluZyBvbiB0aGF0IGxpbmUgaGVpZ2h0LiBTbyB3ZSdsbCBjYWxsIG1ha2VWTGlzdCBub3cuXG5cblxuICAgIHZhciBzbWFzaGVkTm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBub2RlXG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpOyAvLyBGb3Igc3BhY2luZywgVGVYIHRyZWF0cyBcXGhwaGFudG9tIGFzIGEgbWF0aCBncm91cCAoc2FtZSBzcGFjaW5nIGFzIG9yZCkuXG5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiXSwgW3NtYXNoZWROb2RlXSwgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuXG4gICAgaWYgKGdyb3VwLnNtYXNoSGVpZ2h0KSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBcIjBweFwiKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JvdXAuc21hc2hEZXB0aCkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJkZXB0aFwiLCBcIjBweFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvc3FydC5qc1xuXG5cblxuXG5cblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwic3FydFwiLFxuICBuYW1lczogW1wiXFxcXHNxcnRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBudW1PcHRpb25hbEFyZ3M6IDFcbiAgfSxcbiAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihfcmVmLCBhcmdzLCBvcHRBcmdzKSB7XG4gICAgdmFyIHBhcnNlciA9IF9yZWYucGFyc2VyO1xuICAgIHZhciBpbmRleCA9IG9wdEFyZ3NbMF07XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInNxcnRcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keTogYm9keSxcbiAgICAgIGluZGV4OiBpbmRleFxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIFNxdWFyZSByb290cyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBwZy4gNDQzLCBSdWxlIDExLlxuICAgIC8vIEZpcnN0LCB3ZSBkbyB0aGUgc2FtZSBzdGVwcyBhcyBpbiBvdmVybGluZSB0byBidWlsZCB0aGUgaW5uZXIgZ3JvdXBcbiAgICAvLyBhbmQgbGluZVxuICAgIHZhciBpbm5lciA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMuaGF2aW5nQ3JhbXBlZFN0eWxlKCkpO1xuXG4gICAgaWYgKGlubmVyLmhlaWdodCA9PT0gMCkge1xuICAgICAgLy8gUmVuZGVyIGEgc21hbGwgc3VyZC5cbiAgICAgIGlubmVyLmhlaWdodCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS54SGVpZ2h0O1xuICAgIH0gLy8gU29tZSBncm91cHMgY2FuIHJldHVybiBkb2N1bWVudCBmcmFnbWVudHMuICBIYW5kbGUgdGhvc2UgYnkgd3JhcHBpbmdcbiAgICAvLyB0aGVtIGluIGEgc3Bhbi5cblxuXG4gICAgaW5uZXIgPSBidWlsZENvbW1vbi53cmFwRnJhZ21lbnQoaW5uZXIsIG9wdGlvbnMpOyAvLyBDYWxjdWxhdGUgdGhlIG1pbmltdW0gc2l6ZSBmb3IgdGhlIFxcc3VyZCBkZWxpbWl0ZXJcblxuICAgIHZhciBtZXRyaWNzID0gb3B0aW9ucy5mb250TWV0cmljcygpO1xuICAgIHZhciB0aGV0YSA9IG1ldHJpY3MuZGVmYXVsdFJ1bGVUaGlja25lc3M7XG4gICAgdmFyIHBoaSA9IHRoZXRhO1xuXG4gICAgaWYgKG9wdGlvbnMuc3R5bGUuaWQgPCBzcmNfU3R5bGUuVEVYVC5pZCkge1xuICAgICAgcGhpID0gb3B0aW9ucy5mb250TWV0cmljcygpLnhIZWlnaHQ7XG4gICAgfSAvLyBDYWxjdWxhdGUgdGhlIGNsZWFyYW5jZSBiZXR3ZWVuIHRoZSBib2R5IGFuZCBsaW5lXG5cblxuICAgIHZhciBsaW5lQ2xlYXJhbmNlID0gdGhldGEgKyBwaGkgLyA0O1xuICAgIHZhciBtaW5EZWxpbWl0ZXJIZWlnaHQgPSBpbm5lci5oZWlnaHQgKyBpbm5lci5kZXB0aCArIGxpbmVDbGVhcmFuY2UgKyB0aGV0YTsgLy8gQ3JlYXRlIGEgc3FydCBTVkcgb2YgdGhlIHJlcXVpcmVkIG1pbmltdW0gc2l6ZVxuXG4gICAgdmFyIF9kZWxpbWl0ZXIkc3FydEltYWdlID0gZGVsaW1pdGVyLnNxcnRJbWFnZShtaW5EZWxpbWl0ZXJIZWlnaHQsIG9wdGlvbnMpLFxuICAgICAgICBpbWcgPSBfZGVsaW1pdGVyJHNxcnRJbWFnZS5zcGFuLFxuICAgICAgICBydWxlV2lkdGggPSBfZGVsaW1pdGVyJHNxcnRJbWFnZS5ydWxlV2lkdGgsXG4gICAgICAgIGFkdmFuY2VXaWR0aCA9IF9kZWxpbWl0ZXIkc3FydEltYWdlLmFkdmFuY2VXaWR0aDtcblxuICAgIHZhciBkZWxpbURlcHRoID0gaW1nLmhlaWdodCAtIHJ1bGVXaWR0aDsgLy8gQWRqdXN0IHRoZSBjbGVhcmFuY2UgYmFzZWQgb24gdGhlIGRlbGltaXRlciBzaXplXG5cbiAgICBpZiAoZGVsaW1EZXB0aCA+IGlubmVyLmhlaWdodCArIGlubmVyLmRlcHRoICsgbGluZUNsZWFyYW5jZSkge1xuICAgICAgbGluZUNsZWFyYW5jZSA9IChsaW5lQ2xlYXJhbmNlICsgZGVsaW1EZXB0aCAtIGlubmVyLmhlaWdodCAtIGlubmVyLmRlcHRoKSAvIDI7XG4gICAgfSAvLyBTaGlmdCB0aGUgc3FydCBpbWFnZVxuXG5cbiAgICB2YXIgaW1nU2hpZnQgPSBpbWcuaGVpZ2h0IC0gaW5uZXIuaGVpZ2h0IC0gbGluZUNsZWFyYW5jZSAtIHJ1bGVXaWR0aDtcbiAgICBpbm5lci5zdHlsZS5wYWRkaW5nTGVmdCA9IGFkdmFuY2VXaWR0aCArIFwiZW1cIjsgLy8gT3ZlcmxheSB0aGUgaW1hZ2UgYW5kIHRoZSBhcmd1bWVudC5cblxuICAgIHZhciBib2R5ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJmaXJzdEJhc2VsaW5lXCIsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGlubmVyLFxuICAgICAgICB3cmFwcGVyQ2xhc3NlczogW1wic3ZnLWFsaWduXCJdXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiAtKGlubmVyLmhlaWdodCArIGltZ1NoaWZ0KVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogaW1nXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiBydWxlV2lkdGhcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWdyb3VwLmluZGV4KSB7XG4gICAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcInNxcnRcIl0sIFtib2R5XSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEhhbmRsZSB0aGUgb3B0aW9uYWwgcm9vdCBpbmRleFxuICAgICAgLy8gVGhlIGluZGV4IGlzIGFsd2F5cyBpbiBzY3JpcHRzY3JpcHQgc3R5bGVcbiAgICAgIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShzcmNfU3R5bGUuU0NSSVBUU0NSSVBUKTtcbiAgICAgIHZhciByb290bSA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmluZGV4LCBuZXdPcHRpb25zLCBvcHRpb25zKTsgLy8gVGhlIGFtb3VudCB0aGUgaW5kZXggaXMgc2hpZnRlZCBieS4gVGhpcyBpcyB0YWtlbiBmcm9tIHRoZSBUZVhcbiAgICAgIC8vIHNvdXJjZSwgaW4gdGhlIGRlZmluaXRpb24gb2YgYFxcckBAdGAuXG5cbiAgICAgIHZhciB0b1NoaWZ0ID0gMC42ICogKGJvZHkuaGVpZ2h0IC0gYm9keS5kZXB0aCk7IC8vIEJ1aWxkIGEgVkxpc3Qgd2l0aCB0aGUgc3VwZXJzY3JpcHQgc2hpZnRlZCB1cCBjb3JyZWN0bHlcblxuICAgICAgdmFyIHJvb3RWTGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJzaGlmdFwiLFxuICAgICAgICBwb3NpdGlvbkRhdGE6IC10b1NoaWZ0LFxuICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiByb290bVxuICAgICAgICB9XVxuICAgICAgfSwgb3B0aW9ucyk7IC8vIEFkZCBhIGNsYXNzIHN1cnJvdW5kaW5nIGl0IHNvIHdlIGNhbiBhZGQgb24gdGhlIGFwcHJvcHJpYXRlXG4gICAgICAvLyBrZXJuaW5nXG5cbiAgICAgIHZhciByb290Vkxpc3RXcmFwID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wicm9vdFwiXSwgW3Jvb3RWTGlzdF0pO1xuICAgICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJzcXJ0XCJdLCBbcm9vdFZMaXN0V3JhcCwgYm9keV0sIG9wdGlvbnMpO1xuICAgIH1cbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBib2R5ID0gZ3JvdXAuYm9keSxcbiAgICAgICAgaW5kZXggPSBncm91cC5pbmRleDtcbiAgICByZXR1cm4gaW5kZXggPyBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1yb290XCIsIFtidWlsZE1hdGhNTF9idWlsZEdyb3VwKGJvZHksIG9wdGlvbnMpLCBidWlsZE1hdGhNTF9idWlsZEdyb3VwKGluZGV4LCBvcHRpb25zKV0pIDogbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3FydFwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChib2R5LCBvcHRpb25zKV0pO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy9zdHlsaW5nLmpzXG5cblxuXG5cblxudmFyIHN0eWxpbmdfc3R5bGVNYXAgPSB7XG4gIFwiZGlzcGxheVwiOiBzcmNfU3R5bGUuRElTUExBWSxcbiAgXCJ0ZXh0XCI6IHNyY19TdHlsZS5URVhULFxuICBcInNjcmlwdFwiOiBzcmNfU3R5bGUuU0NSSVBULFxuICBcInNjcmlwdHNjcmlwdFwiOiBzcmNfU3R5bGUuU0NSSVBUU0NSSVBUXG59O1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInN0eWxpbmdcIixcbiAgbmFtZXM6IFtcIlxcXFxkaXNwbGF5c3R5bGVcIiwgXCJcXFxcdGV4dHN0eWxlXCIsIFwiXFxcXHNjcmlwdHN0eWxlXCIsIFwiXFxcXHNjcmlwdHNjcmlwdHN0eWxlXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIgYnJlYWtPblRva2VuVGV4dCA9IF9yZWYuYnJlYWtPblRva2VuVGV4dCxcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lLFxuICAgICAgICBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICAvLyBwYXJzZSBvdXQgdGhlIGltcGxpY2l0IGJvZHlcbiAgICB2YXIgYm9keSA9IHBhcnNlci5wYXJzZUV4cHJlc3Npb24odHJ1ZSwgYnJlYWtPblRva2VuVGV4dCk7IC8vIFRPRE86IFJlZmFjdG9yIHRvIGF2b2lkIGR1cGxpY2F0aW5nIHN0eWxlTWFwIGluIG11bHRpcGxlIHBsYWNlcyAoZS5nLlxuICAgIC8vIGhlcmUgYW5kIGluIGJ1aWxkSFRNTCBhbmQgZGUtZHVwZSB0aGUgZW51bWVyYXRpb24gb2YgYWxsIHRoZSBzdHlsZXMpLlxuICAgIC8vICRGbG93Rml4TWU6IFRoZSBuYW1lcyBhYm92ZSBleGFjdGx5IG1hdGNoIHRoZSBzdHlsZXMuXG5cbiAgICB2YXIgc3R5bGUgPSBmdW5jTmFtZS5zbGljZSgxLCBmdW5jTmFtZS5sZW5ndGggLSA1KTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzdHlsaW5nXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCBzdHlsZSB0byB1c2UgYnkgcHVsbGluZyBvdXQgdGhlIHN0eWxlIGZyb21cbiAgICAgIC8vIHRoZSBmdW5jdGlvbiBuYW1lXG4gICAgICBzdHlsZTogc3R5bGUsXG4gICAgICBib2R5OiBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gU3R5bGUgY2hhbmdlcyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBvbiBwZy4gNDQyLCBSdWxlIDMuXG4gICAgdmFyIG5ld1N0eWxlID0gc3R5bGluZ19zdHlsZU1hcFtncm91cC5zdHlsZV07XG4gICAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1N0eWxlKG5ld1N0eWxlKS53aXRoRm9udCgnJyk7XG4gICAgcmV0dXJuIHNpemluZ0dyb3VwKGdyb3VwLmJvZHksIG5ld09wdGlvbnMsIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gRmlndXJlIG91dCB3aGF0IHN0eWxlIHdlJ3JlIGNoYW5naW5nIHRvLlxuICAgIHZhciBuZXdTdHlsZSA9IHN0eWxpbmdfc3R5bGVNYXBbZ3JvdXAuc3R5bGVdO1xuICAgIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShuZXdTdHlsZSk7XG4gICAgdmFyIGlubmVyID0gYnVpbGRNYXRoTUxfYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG5ld09wdGlvbnMpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3R5bGVcIiwgaW5uZXIpO1xuICAgIHZhciBzdHlsZUF0dHJpYnV0ZXMgPSB7XG4gICAgICBcImRpc3BsYXlcIjogW1wiMFwiLCBcInRydWVcIl0sXG4gICAgICBcInRleHRcIjogW1wiMFwiLCBcImZhbHNlXCJdLFxuICAgICAgXCJzY3JpcHRcIjogW1wiMVwiLCBcImZhbHNlXCJdLFxuICAgICAgXCJzY3JpcHRzY3JpcHRcIjogW1wiMlwiLCBcImZhbHNlXCJdXG4gICAgfTtcbiAgICB2YXIgYXR0ciA9IHN0eWxlQXR0cmlidXRlc1tncm91cC5zdHlsZV07XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzY3JpcHRsZXZlbFwiLCBhdHRyWzBdKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImRpc3BsYXlzdHlsZVwiLCBhdHRyWzFdKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvc3Vwc3ViLmpzXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyoqXG4gKiBTb21ldGltZXMsIGdyb3VwcyBwZXJmb3JtIHNwZWNpYWwgcnVsZXMgd2hlbiB0aGV5IGhhdmUgc3VwZXJzY3JpcHRzIG9yXG4gKiBzdWJzY3JpcHRzIGF0dGFjaGVkIHRvIHRoZW0uIFRoaXMgZnVuY3Rpb24gbGV0cyB0aGUgYHN1cHN1YmAgZ3JvdXAga25vdyB0aGF0XG4gKiBTb21ldGltZXMsIGdyb3VwcyBwZXJmb3JtIHNwZWNpYWwgcnVsZXMgd2hlbiB0aGV5IGhhdmUgc3VwZXJzY3JpcHRzIG9yXG4gKiBpdHMgaW5uZXIgZWxlbWVudCBzaG91bGQgaGFuZGxlIHRoZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMgaW5zdGVhZCBvZlxuICogaGFuZGxpbmcgdGhlbSBpdHNlbGYuXG4gKi9cbnZhciBzdXBzdWJfaHRtbEJ1aWxkZXJEZWxlZ2F0ZSA9IGZ1bmN0aW9uIGh0bWxCdWlsZGVyRGVsZWdhdGUoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIGJhc2UgPSBncm91cC5iYXNlO1xuXG4gIGlmICghYmFzZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2UgaWYgKGJhc2UudHlwZSA9PT0gXCJvcFwiKSB7XG4gICAgLy8gT3BlcmF0b3JzIGhhbmRsZSBzdXBzdWJzIGRpZmZlcmVudGx5IHdoZW4gdGhleSBoYXZlIGxpbWl0c1xuICAgIC8vIChlLmcuIGBcXGRpc3BsYXlzdHlsZVxcc3VtXzJeM2ApXG4gICAgdmFyIGRlbGVnYXRlID0gYmFzZS5saW1pdHMgJiYgKG9wdGlvbnMuc3R5bGUuc2l6ZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkuc2l6ZSB8fCBiYXNlLmFsd2F5c0hhbmRsZVN1cFN1Yik7XG4gICAgcmV0dXJuIGRlbGVnYXRlID8gb3BfaHRtbEJ1aWxkZXIgOiBudWxsO1xuICB9IGVsc2UgaWYgKGJhc2UudHlwZSA9PT0gXCJvcGVyYXRvcm5hbWVcIikge1xuICAgIHZhciBfZGVsZWdhdGUgPSBiYXNlLmFsd2F5c0hhbmRsZVN1cFN1YiAmJiAob3B0aW9ucy5zdHlsZS5zaXplID09PSBzcmNfU3R5bGUuRElTUExBWS5zaXplIHx8IGJhc2UubGltaXRzKTtcblxuICAgIHJldHVybiBfZGVsZWdhdGUgPyBvcGVyYXRvcm5hbWVfaHRtbEJ1aWxkZXIgOiBudWxsO1xuICB9IGVsc2UgaWYgKGJhc2UudHlwZSA9PT0gXCJhY2NlbnRcIikge1xuICAgIHJldHVybiB1dGlscy5pc0NoYXJhY3RlckJveChiYXNlLmJhc2UpID8gYWNjZW50X2h0bWxCdWlsZGVyIDogbnVsbDtcbiAgfSBlbHNlIGlmIChiYXNlLnR5cGUgPT09IFwiaG9yaXpCcmFjZVwiKSB7XG4gICAgdmFyIGlzU3VwID0gIWdyb3VwLnN1YjtcbiAgICByZXR1cm4gaXNTdXAgPT09IGJhc2UuaXNPdmVyID8gaG9yaXpCcmFjZV9odG1sQnVpbGRlciA6IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07IC8vIFN1cGVyIHNjcmlwdHMgYW5kIHN1YnNjcmlwdHMsIHdob3NlIHByZWNpc2UgcGxhY2VtZW50IGNhbiBkZXBlbmQgb24gb3RoZXJcbi8vIGZ1bmN0aW9ucyB0aGF0IHByZWNlZGUgdGhlbS5cblxuXG5kZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKHtcbiAgdHlwZTogXCJzdXBzdWJcIixcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gU3VwZXJzY3JpcHQgYW5kIHN1YnNjcmlwdHMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgb24gcGFnZVxuICAgIC8vIDQ0NS00NDYsIHJ1bGVzIDE4KGEtZikuXG4gICAgLy8gSGVyZSBpcyB3aGVyZSB3ZSBkZWZlciB0byB0aGUgaW5uZXIgZ3JvdXAgaWYgaXQgc2hvdWxkIGhhbmRsZVxuICAgIC8vIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cyBpdHNlbGYuXG4gICAgdmFyIGJ1aWxkZXJEZWxlZ2F0ZSA9IHN1cHN1Yl9odG1sQnVpbGRlckRlbGVnYXRlKGdyb3VwLCBvcHRpb25zKTtcblxuICAgIGlmIChidWlsZGVyRGVsZWdhdGUpIHtcbiAgICAgIHJldHVybiBidWlsZGVyRGVsZWdhdGUoZ3JvdXAsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZUJhc2UgPSBncm91cC5iYXNlLFxuICAgICAgICB2YWx1ZVN1cCA9IGdyb3VwLnN1cCxcbiAgICAgICAgdmFsdWVTdWIgPSBncm91cC5zdWI7XG4gICAgdmFyIGJhc2UgPSBidWlsZEhUTUxfYnVpbGRHcm91cCh2YWx1ZUJhc2UsIG9wdGlvbnMpO1xuICAgIHZhciBzdXBtO1xuICAgIHZhciBzdWJtO1xuICAgIHZhciBtZXRyaWNzID0gb3B0aW9ucy5mb250TWV0cmljcygpOyAvLyBSdWxlIDE4YVxuXG4gICAgdmFyIHN1cFNoaWZ0ID0gMDtcbiAgICB2YXIgc3ViU2hpZnQgPSAwO1xuICAgIHZhciBpc0NoYXJhY3RlckJveCA9IHZhbHVlQmFzZSAmJiB1dGlscy5pc0NoYXJhY3RlckJveCh2YWx1ZUJhc2UpO1xuXG4gICAgaWYgKHZhbHVlU3VwKSB7XG4gICAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUob3B0aW9ucy5zdHlsZS5zdXAoKSk7XG4gICAgICBzdXBtID0gYnVpbGRIVE1MX2J1aWxkR3JvdXAodmFsdWVTdXAsIG5ld09wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAoIWlzQ2hhcmFjdGVyQm94KSB7XG4gICAgICAgIHN1cFNoaWZ0ID0gYmFzZS5oZWlnaHQgLSBuZXdPcHRpb25zLmZvbnRNZXRyaWNzKCkuc3VwRHJvcCAqIG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXIgLyBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWx1ZVN1Yikge1xuICAgICAgdmFyIF9uZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShvcHRpb25zLnN0eWxlLnN1YigpKTtcblxuICAgICAgc3VibSA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKHZhbHVlU3ViLCBfbmV3T3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgICAgIGlmICghaXNDaGFyYWN0ZXJCb3gpIHtcbiAgICAgICAgc3ViU2hpZnQgPSBiYXNlLmRlcHRoICsgX25ld09wdGlvbnMuZm9udE1ldHJpY3MoKS5zdWJEcm9wICogX25ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXIgLyBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICAgICAgfVxuICAgIH0gLy8gUnVsZSAxOGNcblxuXG4gICAgdmFyIG1pblN1cFNoaWZ0O1xuXG4gICAgaWYgKG9wdGlvbnMuc3R5bGUgPT09IHNyY19TdHlsZS5ESVNQTEFZKSB7XG4gICAgICBtaW5TdXBTaGlmdCA9IG1ldHJpY3Muc3VwMTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuc3R5bGUuY3JhbXBlZCkge1xuICAgICAgbWluU3VwU2hpZnQgPSBtZXRyaWNzLnN1cDM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1pblN1cFNoaWZ0ID0gbWV0cmljcy5zdXAyO1xuICAgIH0gLy8gc2NyaXB0c3BhY2UgaXMgYSBmb250LXNpemUtaW5kZXBlbmRlbnQgc2l6ZSwgc28gc2NhbGUgaXRcbiAgICAvLyBhcHByb3ByaWF0ZWx5IGZvciB1c2UgYXMgdGhlIG1hcmdpblJpZ2h0LlxuXG5cbiAgICB2YXIgbXVsdGlwbGllciA9IG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgdmFyIG1hcmdpblJpZ2h0ID0gMC41IC8gbWV0cmljcy5wdFBlckVtIC8gbXVsdGlwbGllciArIFwiZW1cIjtcbiAgICB2YXIgbWFyZ2luTGVmdCA9IG51bGw7XG5cbiAgICBpZiAoc3VibSkge1xuICAgICAgLy8gU3Vic2NyaXB0cyBzaG91bGRuJ3QgYmUgc2hpZnRlZCBieSB0aGUgYmFzZSdzIGl0YWxpYyBjb3JyZWN0aW9uLlxuICAgICAgLy8gQWNjb3VudCBmb3IgdGhhdCBieSBzaGlmdGluZyB0aGUgc3Vic2NyaXB0IGJhY2sgdGhlIGFwcHJvcHJpYXRlXG4gICAgICAvLyBhbW91bnQuIE5vdGUgd2Ugb25seSBkbyB0aGlzIHdoZW4gdGhlIGJhc2UgaXMgYSBzaW5nbGUgc3ltYm9sLlxuICAgICAgdmFyIGlzT2lpbnQgPSBncm91cC5iYXNlICYmIGdyb3VwLmJhc2UudHlwZSA9PT0gXCJvcFwiICYmIGdyb3VwLmJhc2UubmFtZSAmJiAoZ3JvdXAuYmFzZS5uYW1lID09PSBcIlxcXFxvaWludFwiIHx8IGdyb3VwLmJhc2UubmFtZSA9PT0gXCJcXFxcb2lpaW50XCIpO1xuXG4gICAgICBpZiAoYmFzZSBpbnN0YW5jZW9mIGRvbVRyZWVfU3ltYm9sTm9kZSB8fCBpc09paW50KSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgbWFyZ2luTGVmdCA9IC1iYXNlLml0YWxpYyArIFwiZW1cIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc3Vwc3ViO1xuXG4gICAgaWYgKHN1cG0gJiYgc3VibSkge1xuICAgICAgc3VwU2hpZnQgPSBNYXRoLm1heChzdXBTaGlmdCwgbWluU3VwU2hpZnQsIHN1cG0uZGVwdGggKyAwLjI1ICogbWV0cmljcy54SGVpZ2h0KTtcbiAgICAgIHN1YlNoaWZ0ID0gTWF0aC5tYXgoc3ViU2hpZnQsIG1ldHJpY3Muc3ViMik7XG4gICAgICB2YXIgcnVsZVdpZHRoID0gbWV0cmljcy5kZWZhdWx0UnVsZVRoaWNrbmVzczsgLy8gUnVsZSAxOGVcblxuICAgICAgdmFyIG1heFdpZHRoID0gNCAqIHJ1bGVXaWR0aDtcblxuICAgICAgaWYgKHN1cFNoaWZ0IC0gc3VwbS5kZXB0aCAtIChzdWJtLmhlaWdodCAtIHN1YlNoaWZ0KSA8IG1heFdpZHRoKSB7XG4gICAgICAgIHN1YlNoaWZ0ID0gbWF4V2lkdGggLSAoc3VwU2hpZnQgLSBzdXBtLmRlcHRoKSArIHN1Ym0uaGVpZ2h0O1xuICAgICAgICB2YXIgcHNpID0gMC44ICogbWV0cmljcy54SGVpZ2h0IC0gKHN1cFNoaWZ0IC0gc3VwbS5kZXB0aCk7XG5cbiAgICAgICAgaWYgKHBzaSA+IDApIHtcbiAgICAgICAgICBzdXBTaGlmdCArPSBwc2k7XG4gICAgICAgICAgc3ViU2hpZnQgLT0gcHNpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB2bGlzdEVsZW0gPSBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogc3VibSxcbiAgICAgICAgc2hpZnQ6IHN1YlNoaWZ0LFxuICAgICAgICBtYXJnaW5SaWdodDogbWFyZ2luUmlnaHQsXG4gICAgICAgIG1hcmdpbkxlZnQ6IG1hcmdpbkxlZnRcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHN1cG0sXG4gICAgICAgIHNoaWZ0OiAtc3VwU2hpZnQsXG4gICAgICAgIG1hcmdpblJpZ2h0OiBtYXJnaW5SaWdodFxuICAgICAgfV07XG4gICAgICBzdXBzdWIgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICAgIGNoaWxkcmVuOiB2bGlzdEVsZW1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAoc3VibSkge1xuICAgICAgLy8gUnVsZSAxOGJcbiAgICAgIHN1YlNoaWZ0ID0gTWF0aC5tYXgoc3ViU2hpZnQsIG1ldHJpY3Muc3ViMSwgc3VibS5oZWlnaHQgLSAwLjggKiBtZXRyaWNzLnhIZWlnaHQpO1xuICAgICAgdmFyIF92bGlzdEVsZW0gPSBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogc3VibSxcbiAgICAgICAgbWFyZ2luTGVmdDogbWFyZ2luTGVmdCxcbiAgICAgICAgbWFyZ2luUmlnaHQ6IG1hcmdpblJpZ2h0XG4gICAgICB9XTtcbiAgICAgIHN1cHN1YiA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJzaGlmdFwiLFxuICAgICAgICBwb3NpdGlvbkRhdGE6IHN1YlNoaWZ0LFxuICAgICAgICBjaGlsZHJlbjogX3ZsaXN0RWxlbVxuICAgICAgfSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIGlmIChzdXBtKSB7XG4gICAgICAvLyBSdWxlIDE4YywgZFxuICAgICAgc3VwU2hpZnQgPSBNYXRoLm1heChzdXBTaGlmdCwgbWluU3VwU2hpZnQsIHN1cG0uZGVwdGggKyAwLjI1ICogbWV0cmljcy54SGVpZ2h0KTtcbiAgICAgIHN1cHN1YiA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJzaGlmdFwiLFxuICAgICAgICBwb3NpdGlvbkRhdGE6IC1zdXBTaGlmdCxcbiAgICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogc3VwbSxcbiAgICAgICAgICBtYXJnaW5SaWdodDogbWFyZ2luUmlnaHRcbiAgICAgICAgfV1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzdXBzdWIgbXVzdCBoYXZlIGVpdGhlciBzdXAgb3Igc3ViLlwiKTtcbiAgICB9IC8vIFdyYXAgdGhlIHN1cHN1YiB2bGlzdCBpbiBhIHNwYW4ubXN1cHN1YiB0byByZXNldCB0ZXh0LWFsaWduLlxuXG5cbiAgICB2YXIgbWNsYXNzID0gZ2V0VHlwZU9mRG9tVHJlZShiYXNlLCBcInJpZ2h0XCIpIHx8IFwibW9yZFwiO1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbbWNsYXNzXSwgW2Jhc2UsIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1zdXBzdWJcIl0sIFtzdXBzdWJdKV0sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gSXMgdGhlIGlubmVyIGdyb3VwIGEgcmVsZXZhbnQgaG9yaXpvbmFsIGJyYWNlP1xuICAgIHZhciBpc0JyYWNlID0gZmFsc2U7XG4gICAgdmFyIGlzT3ZlcjtcbiAgICB2YXIgaXNTdXA7XG4gICAgdmFyIGhvcml6QnJhY2UgPSBjaGVja05vZGVUeXBlKGdyb3VwLmJhc2UsIFwiaG9yaXpCcmFjZVwiKTtcblxuICAgIGlmIChob3JpekJyYWNlKSB7XG4gICAgICBpc1N1cCA9ICEhZ3JvdXAuc3VwO1xuXG4gICAgICBpZiAoaXNTdXAgPT09IGhvcml6QnJhY2UuaXNPdmVyKSB7XG4gICAgICAgIGlzQnJhY2UgPSB0cnVlO1xuICAgICAgICBpc092ZXIgPSBob3JpekJyYWNlLmlzT3ZlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JvdXAuYmFzZSAmJiAoZ3JvdXAuYmFzZS50eXBlID09PSBcIm9wXCIgfHwgZ3JvdXAuYmFzZS50eXBlID09PSBcIm9wZXJhdG9ybmFtZVwiKSkge1xuICAgICAgZ3JvdXAuYmFzZS5wYXJlbnRJc1N1cFN1YiA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkcmVuID0gW2J1aWxkTWF0aE1MX2J1aWxkR3JvdXAoZ3JvdXAuYmFzZSwgb3B0aW9ucyldO1xuXG4gICAgaWYgKGdyb3VwLnN1Yikge1xuICAgICAgY2hpbGRyZW4ucHVzaChidWlsZE1hdGhNTF9idWlsZEdyb3VwKGdyb3VwLnN1Yiwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIGlmIChncm91cC5zdXApIHtcbiAgICAgIGNoaWxkcmVuLnB1c2goYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5zdXAsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICB2YXIgbm9kZVR5cGU7XG5cbiAgICBpZiAoaXNCcmFjZSkge1xuICAgICAgbm9kZVR5cGUgPSBpc092ZXIgPyBcIm1vdmVyXCIgOiBcIm11bmRlclwiO1xuICAgIH0gZWxzZSBpZiAoIWdyb3VwLnN1Yikge1xuICAgICAgdmFyIGJhc2UgPSBncm91cC5iYXNlO1xuXG4gICAgICBpZiAoYmFzZSAmJiBiYXNlLnR5cGUgPT09IFwib3BcIiAmJiBiYXNlLmxpbWl0cyAmJiAob3B0aW9ucy5zdHlsZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkgfHwgYmFzZS5hbHdheXNIYW5kbGVTdXBTdWIpKSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtb3ZlclwiO1xuICAgICAgfSBlbHNlIGlmIChiYXNlICYmIGJhc2UudHlwZSA9PT0gXCJvcGVyYXRvcm5hbWVcIiAmJiBiYXNlLmFsd2F5c0hhbmRsZVN1cFN1YiAmJiAoYmFzZS5saW1pdHMgfHwgb3B0aW9ucy5zdHlsZSA9PT0gc3JjX1N0eWxlLkRJU1BMQVkpKSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtb3ZlclwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm1zdXBcIjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFncm91cC5zdXApIHtcbiAgICAgIHZhciBfYmFzZSA9IGdyb3VwLmJhc2U7XG5cbiAgICAgIGlmIChfYmFzZSAmJiBfYmFzZS50eXBlID09PSBcIm9wXCIgJiYgX2Jhc2UubGltaXRzICYmIChvcHRpb25zLnN0eWxlID09PSBzcmNfU3R5bGUuRElTUExBWSB8fCBfYmFzZS5hbHdheXNIYW5kbGVTdXBTdWIpKSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtdW5kZXJcIjtcbiAgICAgIH0gZWxzZSBpZiAoX2Jhc2UgJiYgX2Jhc2UudHlwZSA9PT0gXCJvcGVyYXRvcm5hbWVcIiAmJiBfYmFzZS5hbHdheXNIYW5kbGVTdXBTdWIgJiYgKF9iYXNlLmxpbWl0cyB8fCBvcHRpb25zLnN0eWxlID09PSBzcmNfU3R5bGUuRElTUExBWSkpIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm11bmRlclwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm1zdWJcIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9iYXNlMiA9IGdyb3VwLmJhc2U7XG5cbiAgICAgIGlmIChfYmFzZTIgJiYgX2Jhc2UyLnR5cGUgPT09IFwib3BcIiAmJiBfYmFzZTIubGltaXRzICYmIG9wdGlvbnMuc3R5bGUgPT09IHNyY19TdHlsZS5ESVNQTEFZKSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtdW5kZXJvdmVyXCI7XG4gICAgICB9IGVsc2UgaWYgKF9iYXNlMiAmJiBfYmFzZTIudHlwZSA9PT0gXCJvcGVyYXRvcm5hbWVcIiAmJiBfYmFzZTIuYWx3YXlzSGFuZGxlU3VwU3ViICYmIChvcHRpb25zLnN0eWxlID09PSBzcmNfU3R5bGUuRElTUExBWSB8fCBfYmFzZTIubGltaXRzKSkge1xuICAgICAgICBub2RlVHlwZSA9IFwibXVuZGVyb3ZlclwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm1zdWJzdXBcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKG5vZGVUeXBlLCBjaGlsZHJlbik7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3N5bWJvbHNPcC5qc1xuXG5cblxuIC8vIE9wZXJhdG9yIFBhcnNlTm9kZXMgY3JlYXRlZCBpbiBQYXJzZXIuanMgZnJvbSBzeW1ib2wgR3JvdXBzIGluIHNyYy9zeW1ib2xzLmpzLlxuXG5kZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKHtcbiAgdHlwZTogXCJhdG9tXCIsXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYXRoc3ltKGdyb3VwLnRleHQsIGdyb3VwLm1vZGUsIG9wdGlvbnMsIFtcIm1cIiArIGdyb3VwLmZhbWlseV0pO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFtidWlsZE1hdGhNTF9tYWtlVGV4dChncm91cC50ZXh0LCBncm91cC5tb2RlKV0pO1xuXG4gICAgaWYgKGdyb3VwLmZhbWlseSA9PT0gXCJiaW5cIikge1xuICAgICAgdmFyIHZhcmlhbnQgPSBidWlsZE1hdGhNTF9nZXRWYXJpYW50KGdyb3VwLCBvcHRpb25zKTtcblxuICAgICAgaWYgKHZhcmlhbnQgPT09IFwiYm9sZC1pdGFsaWNcIikge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGh2YXJpYW50XCIsIHZhcmlhbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZ3JvdXAuZmFtaWx5ID09PSBcInB1bmN0XCIpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic2VwYXJhdG9yXCIsIFwidHJ1ZVwiKTtcbiAgICB9IGVsc2UgaWYgKGdyb3VwLmZhbWlseSA9PT0gXCJvcGVuXCIgfHwgZ3JvdXAuZmFtaWx5ID09PSBcImNsb3NlXCIpIHtcbiAgICAgIC8vIERlbGltcyBidWlsdCBoZXJlIHNob3VsZCBub3Qgc3RyZXRjaCB2ZXJ0aWNhbGx5LlxuICAgICAgLy8gU2VlIGRlbGltc2l6aW5nLmpzIGZvciBzdHJldGNoeSBkZWxpbXMuXG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcInN0cmV0Y2h5XCIsIFwiZmFsc2VcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3N5bWJvbHNPcmQuanNcblxuXG5cblxuLy8gXCJtYXRob3JkXCIgYW5kIFwidGV4dG9yZFwiIFBhcnNlTm9kZXMgY3JlYXRlZCBpbiBQYXJzZXIuanMgZnJvbSBzeW1ib2wgR3JvdXBzIGluXG52YXIgZGVmYXVsdFZhcmlhbnQgPSB7XG4gIFwibWlcIjogXCJpdGFsaWNcIixcbiAgXCJtblwiOiBcIm5vcm1hbFwiLFxuICBcIm10ZXh0XCI6IFwibm9ybWFsXCJcbn07XG5kZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKHtcbiAgdHlwZTogXCJtYXRob3JkXCIsXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlT3JkKGdyb3VwLCBvcHRpb25zLCBcIm1hdGhvcmRcIik7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibWlcIiwgW2J1aWxkTWF0aE1MX21ha2VUZXh0KGdyb3VwLnRleHQsIGdyb3VwLm1vZGUsIG9wdGlvbnMpXSk7XG4gICAgdmFyIHZhcmlhbnQgPSBidWlsZE1hdGhNTF9nZXRWYXJpYW50KGdyb3VwLCBvcHRpb25zKSB8fCBcIml0YWxpY1wiO1xuXG4gICAgaWYgKHZhcmlhbnQgIT09IGRlZmF1bHRWYXJpYW50W25vZGUudHlwZV0pIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWF0aHZhcmlhbnRcIiwgdmFyaWFudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuZGVmaW5lRnVuY3Rpb25CdWlsZGVycyh7XG4gIHR5cGU6IFwidGV4dG9yZFwiLFxuICBodG1sQnVpbGRlcjogZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZU9yZChncm91cCwgb3B0aW9ucywgXCJ0ZXh0b3JkXCIpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIHRleHQgPSBidWlsZE1hdGhNTF9tYWtlVGV4dChncm91cC50ZXh0LCBncm91cC5tb2RlLCBvcHRpb25zKTtcbiAgICB2YXIgdmFyaWFudCA9IGJ1aWxkTWF0aE1MX2dldFZhcmlhbnQoZ3JvdXAsIG9wdGlvbnMpIHx8IFwibm9ybWFsXCI7XG4gICAgdmFyIG5vZGU7XG5cbiAgICBpZiAoZ3JvdXAubW9kZSA9PT0gJ3RleHQnKSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdGV4dFwiLCBbdGV4dF0pO1xuICAgIH0gZWxzZSBpZiAoL1swLTldLy50ZXN0KGdyb3VwLnRleHQpKSB7XG4gICAgICAvLyBUT0RPKGtldmluYikgbWVyZ2UgYWRqYWNlbnQgPG1uPiBub2Rlc1xuICAgICAgLy8gZG8gaXQgYXMgYSBwb3N0IHByb2Nlc3Npbmcgc3RlcFxuICAgICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW5cIiwgW3RleHRdKTtcbiAgICB9IGVsc2UgaWYgKGdyb3VwLnRleHQgPT09IFwiXFxcXHByaW1lXCIpIHtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFt0ZXh0XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1pXCIsIFt0ZXh0XSk7XG4gICAgfVxuXG4gICAgaWYgKHZhcmlhbnQgIT09IGRlZmF1bHRWYXJpYW50W25vZGUudHlwZV0pIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWF0aHZhcmlhbnRcIiwgdmFyaWFudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3N5bWJvbHNTcGFjaW5nLmpzXG5cblxuXG4gLy8gQSBtYXAgb2YgQ1NTLWJhc2VkIHNwYWNpbmcgZnVuY3Rpb25zIHRvIHRoZWlyIENTUyBjbGFzcy5cblxudmFyIGNzc1NwYWNlID0ge1xuICBcIlxcXFxub2JyZWFrXCI6IFwibm9icmVha1wiLFxuICBcIlxcXFxhbGxvd2JyZWFrXCI6IFwiYWxsb3dicmVha1wiXG59OyAvLyBBIGxvb2t1cCB0YWJsZSB0byBkZXRlcm1pbmUgd2hldGhlciBhIHNwYWNpbmcgZnVuY3Rpb24vc3ltYm9sIHNob3VsZCBiZVxuLy8gdHJlYXRlZCBsaWtlIGEgcmVndWxhciBzcGFjZSBjaGFyYWN0ZXIuICBJZiBhIHN5bWJvbCBvciBjb21tYW5kIGlzIGEga2V5XG4vLyBpbiB0aGlzIHRhYmxlLCB0aGVuIGl0IHNob3VsZCBiZSBhIHJlZ3VsYXIgc3BhY2UgY2hhcmFjdGVyLiAgRnVydGhlcm1vcmUsXG4vLyB0aGUgYXNzb2NpYXRlZCB2YWx1ZSBtYXkgaGF2ZSBhIGBjbGFzc05hbWVgIHNwZWNpZnlpbmcgYW4gZXh0cmEgQ1NTIGNsYXNzXG4vLyB0byBhZGQgdG8gdGhlIGNyZWF0ZWQgYHNwYW5gLlxuXG52YXIgcmVndWxhclNwYWNlID0ge1xuICBcIiBcIjoge30sXG4gIFwiXFxcXCBcIjoge30sXG4gIFwiflwiOiB7XG4gICAgY2xhc3NOYW1lOiBcIm5vYnJlYWtcIlxuICB9LFxuICBcIlxcXFxzcGFjZVwiOiB7fSxcbiAgXCJcXFxcbm9icmVha3NwYWNlXCI6IHtcbiAgICBjbGFzc05hbWU6IFwibm9icmVha1wiXG4gIH1cbn07IC8vIFBhcnNlTm9kZTxcInNwYWNpbmdcIj4gY3JlYXRlZCBpbiBQYXJzZXIuanMgZnJvbSB0aGUgXCJzcGFjaW5nXCIgc3ltYm9sIEdyb3VwcyBpblxuLy8gc3JjL3N5bWJvbHMuanMuXG5cbmRlZmluZUZ1bmN0aW9uQnVpbGRlcnMoe1xuICB0eXBlOiBcInNwYWNpbmdcIixcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgaWYgKHJlZ3VsYXJTcGFjZS5oYXNPd25Qcm9wZXJ0eShncm91cC50ZXh0KSkge1xuICAgICAgdmFyIGNsYXNzTmFtZSA9IHJlZ3VsYXJTcGFjZVtncm91cC50ZXh0XS5jbGFzc05hbWUgfHwgXCJcIjsgLy8gU3BhY2VzIGFyZSBnZW5lcmF0ZWQgYnkgYWRkaW5nIGFuIGFjdHVhbCBzcGFjZS4gRWFjaCBvZiB0aGVzZVxuICAgICAgLy8gdGhpbmdzIGhhcyBhbiBlbnRyeSBpbiB0aGUgc3ltYm9scyB0YWJsZSwgc28gdGhlc2Ugd2lsbCBiZSB0dXJuZWRcbiAgICAgIC8vIGludG8gYXBwcm9wcmlhdGUgb3V0cHV0cy5cblxuICAgICAgaWYgKGdyb3VwLm1vZGUgPT09IFwidGV4dFwiKSB7XG4gICAgICAgIHZhciBvcmQgPSBidWlsZENvbW1vbi5tYWtlT3JkKGdyb3VwLCBvcHRpb25zLCBcInRleHRvcmRcIik7XG4gICAgICAgIG9yZC5jbGFzc2VzLnB1c2goY2xhc3NOYW1lKTtcbiAgICAgICAgcmV0dXJuIG9yZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtc3BhY2VcIiwgY2xhc3NOYW1lXSwgW2J1aWxkQ29tbW9uLm1hdGhzeW0oZ3JvdXAudGV4dCwgZ3JvdXAubW9kZSwgb3B0aW9ucyldLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNzc1NwYWNlLmhhc093blByb3BlcnR5KGdyb3VwLnRleHQpKSB7XG4gICAgICAvLyBTcGFjZXMgYmFzZWQgb24ganVzdCBhIENTUyBjbGFzcy5cbiAgICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtc3BhY2VcIiwgY3NzU3BhY2VbZ3JvdXAudGV4dF1dLCBbXSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlVua25vd24gdHlwZSBvZiBzcGFjZSBcXFwiXCIgKyBncm91cC50ZXh0ICsgXCJcXFwiXCIpO1xuICAgIH1cbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZnVuY3Rpb24gbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBub2RlO1xuXG4gICAgaWYgKHJlZ3VsYXJTcGFjZS5oYXNPd25Qcm9wZXJ0eShncm91cC50ZXh0KSkge1xuICAgICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRleHRcIiwgW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKFwiXFx4QTBcIildKTtcbiAgICB9IGVsc2UgaWYgKGNzc1NwYWNlLmhhc093blByb3BlcnR5KGdyb3VwLnRleHQpKSB7XG4gICAgICAvLyBDU1MtYmFzZWQgTWF0aE1MIHNwYWNlcyAoXFxub2JyZWFrLCBcXGFsbG93YnJlYWspIGFyZSBpZ25vcmVkXG4gICAgICByZXR1cm4gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3BhY2VcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlVua25vd24gdHlwZSBvZiBzcGFjZSBcXFwiXCIgKyBncm91cC50ZXh0ICsgXCJcXFwiXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9ucy90YWcuanNcblxuXG5cblxudmFyIHRhZ19wYWQgPSBmdW5jdGlvbiBwYWQoKSB7XG4gIHZhciBwYWROb2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdGRcIiwgW10pO1xuICBwYWROb2RlLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFwiNTAlXCIpO1xuICByZXR1cm4gcGFkTm9kZTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uQnVpbGRlcnMoe1xuICB0eXBlOiBcInRhZ1wiLFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIHRhYmxlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdGFibGVcIiwgW25ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRyXCIsIFt0YWdfcGFkKCksIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRkXCIsIFtidWlsZEV4cHJlc3Npb25Sb3coZ3JvdXAuYm9keSwgb3B0aW9ucyldKSwgdGFnX3BhZCgpLCBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZFwiLCBbYnVpbGRFeHByZXNzaW9uUm93KGdyb3VwLnRhZywgb3B0aW9ucyldKV0pXSk7XG4gICAgdGFibGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgXCIxMDAlXCIpO1xuICAgIHJldHVybiB0YWJsZTsgLy8gVE9ETzogTGVmdC1hbGlnbmVkIHRhZ3MuXG4gICAgLy8gQ3VycmVudGx5LCB0aGUgZ3JvdXAgYW5kIG9wdGlvbnMgcGFzc2VkIGhlcmUgZG8gbm90IGNvbnRhaW5cbiAgICAvLyBlbm91Z2ggaW5mbyB0byBzZXQgdGFnIGFsaWdubWVudC4gYGxlcW5vYCBpcyBpbiBTZXR0aW5ncyBidXQgaXQgaXNcbiAgICAvLyBub3QgcGFzc2VkIHRvIE9wdGlvbnMuIE9uIHRoZSBIVE1MIHNpZGUsIGxlcW5vIGlzXG4gICAgLy8gc2V0IGJ5IGEgQ1NTIGNsYXNzIGFwcGxpZWQgaW4gYnVpbGRUcmVlLmpzLiBUaGF0IHdvdWxkIGhhdmUgd29ya2VkXG4gICAgLy8gaW4gTWF0aE1MIGlmIGJyb3dzZXJzIHN1cHBvcnRlZCA8bWxhYmVsZWR0cj4uIFNpbmNlIHRoZXkgZG9uJ3QsIHdlXG4gICAgLy8gbmVlZCB0byByZXdyaXRlIHRoZSB3YXkgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuXG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3RleHQuanNcblxuXG5cbiAvLyBOb24tbWF0aHkgdGV4dCwgcG9zc2libHkgaW4gYSBmb250XG5cbnZhciB0ZXh0Rm9udEZhbWlsaWVzID0ge1xuICBcIlxcXFx0ZXh0XCI6IHVuZGVmaW5lZCxcbiAgXCJcXFxcdGV4dHJtXCI6IFwidGV4dHJtXCIsXG4gIFwiXFxcXHRleHRzZlwiOiBcInRleHRzZlwiLFxuICBcIlxcXFx0ZXh0dHRcIjogXCJ0ZXh0dHRcIixcbiAgXCJcXFxcdGV4dG5vcm1hbFwiOiBcInRleHRybVwiXG59O1xudmFyIHRleHRGb250V2VpZ2h0cyA9IHtcbiAgXCJcXFxcdGV4dGJmXCI6IFwidGV4dGJmXCIsXG4gIFwiXFxcXHRleHRtZFwiOiBcInRleHRtZFwiXG59O1xudmFyIHRleHRGb250U2hhcGVzID0ge1xuICBcIlxcXFx0ZXh0aXRcIjogXCJ0ZXh0aXRcIixcbiAgXCJcXFxcdGV4dHVwXCI6IFwidGV4dHVwXCJcbn07XG5cbnZhciBvcHRpb25zV2l0aEZvbnQgPSBmdW5jdGlvbiBvcHRpb25zV2l0aEZvbnQoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIGZvbnQgPSBncm91cC5mb250OyAvLyBDaGVja3MgaWYgdGhlIGFyZ3VtZW50IGlzIGEgZm9udCBmYW1pbHkgb3IgYSBmb250IHN0eWxlLlxuXG4gIGlmICghZm9udCkge1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9IGVsc2UgaWYgKHRleHRGb250RmFtaWxpZXNbZm9udF0pIHtcbiAgICByZXR1cm4gb3B0aW9ucy53aXRoVGV4dEZvbnRGYW1pbHkodGV4dEZvbnRGYW1pbGllc1tmb250XSk7XG4gIH0gZWxzZSBpZiAodGV4dEZvbnRXZWlnaHRzW2ZvbnRdKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMud2l0aFRleHRGb250V2VpZ2h0KHRleHRGb250V2VpZ2h0c1tmb250XSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG9wdGlvbnMud2l0aFRleHRGb250U2hhcGUodGV4dEZvbnRTaGFwZXNbZm9udF0pO1xuICB9XG59O1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidGV4dFwiLFxuICBuYW1lczogWy8vIEZvbnQgZmFtaWxpZXNcbiAgXCJcXFxcdGV4dFwiLCBcIlxcXFx0ZXh0cm1cIiwgXCJcXFxcdGV4dHNmXCIsIFwiXFxcXHRleHR0dFwiLCBcIlxcXFx0ZXh0bm9ybWFsXCIsIC8vIEZvbnQgd2VpZ2h0c1xuICBcIlxcXFx0ZXh0YmZcIiwgXCJcXFxcdGV4dG1kXCIsIC8vIEZvbnQgU2hhcGVzXG4gIFwiXFxcXHRleHRpdFwiLCBcIlxcXFx0ZXh0dXBcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1widGV4dFwiXSxcbiAgICBncmVlZGluZXNzOiAyLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgY29uc3VtZU1vZGU6IFwidGV4dFwiXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcixcbiAgICAgICAgZnVuY05hbWUgPSBfcmVmLmZ1bmNOYW1lO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IGRlZmluZUZ1bmN0aW9uX29yZGFyZ3VtZW50KGJvZHkpLFxuICAgICAgZm9udDogZnVuY05hbWVcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnNXaXRoRm9udChncm91cCwgb3B0aW9ucyk7XG4gICAgdmFyIGlubmVyID0gYnVpbGRIVE1MX2J1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBuZXdPcHRpb25zLCB0cnVlKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcInRleHRcIl0sIGJ1aWxkQ29tbW9uLnRyeUNvbWJpbmVDaGFycyhpbm5lciksIG5ld09wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zV2l0aEZvbnQoZ3JvdXAsIG9wdGlvbnMpO1xuICAgIHJldHVybiBidWlsZEV4cHJlc3Npb25Sb3coZ3JvdXAuYm9keSwgbmV3T3B0aW9ucyk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb25zL3VuZGVybGluZS5qc1xuXG5cblxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJ1bmRlcmxpbmVcIixcbiAgbmFtZXM6IFtcIlxcXFx1bmRlcmxpbmVcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciBwYXJzZXIgPSBfcmVmLnBhcnNlcjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ1bmRlcmxpbmVcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keTogYXJnc1swXVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBmdW5jdGlvbiBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIFVuZGVybGluZXMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgcGcgNDQzLCBSdWxlIDEwLlxuICAgIC8vIEJ1aWxkIHRoZSBpbm5lciBncm91cC5cbiAgICB2YXIgaW5uZXJHcm91cCA9IGJ1aWxkSFRNTF9idWlsZEdyb3VwKGdyb3VwLmJvZHksIG9wdGlvbnMpOyAvLyBDcmVhdGUgdGhlIGxpbmUgdG8gZ28gYmVsb3cgdGhlIGJvZHlcblxuICAgIHZhciBsaW5lID0gYnVpbGRDb21tb24ubWFrZUxpbmVTcGFuKFwidW5kZXJsaW5lLWxpbmVcIiwgb3B0aW9ucyk7IC8vIEdlbmVyYXRlIHRoZSB2bGlzdCwgd2l0aCB0aGUgYXBwcm9wcmlhdGUga2VybnNcblxuICAgIHZhciBkZWZhdWx0UnVsZVRoaWNrbmVzcyA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcztcbiAgICB2YXIgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcInRvcFwiLFxuICAgICAgcG9zaXRpb25EYXRhOiBpbm5lckdyb3VwLmhlaWdodCxcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogZGVmYXVsdFJ1bGVUaGlja25lc3NcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGxpbmVcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IDMgKiBkZWZhdWx0UnVsZVRoaWNrbmVzc1xuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogaW5uZXJHcm91cFxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcInVuZGVybGluZVwiXSwgW3ZsaXN0XSwgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3BlcmF0b3IgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFtuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZShcIlxcdTIwM0VcIildKTtcbiAgICBvcGVyYXRvci5zZXRBdHRyaWJ1dGUoXCJzdHJldGNoeVwiLCBcInRydWVcIik7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm11bmRlclwiLCBbYnVpbGRNYXRoTUxfYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKSwgb3BlcmF0b3JdKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImFjY2VudHVuZGVyXCIsIFwidHJ1ZVwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMvdmVyYi5qc1xuXG5cblxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidmVyYlwiLFxuICBuYW1lczogW1wiXFxcXHZlcmJcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoY29udGV4dCwgYXJncywgb3B0QXJncykge1xuICAgIC8vIFxcdmVyYiBhbmQgXFx2ZXJiKiBhcmUgZGVhbHQgd2l0aCBkaXJlY3RseSBpbiBQYXJzZXIuanMuXG4gICAgLy8gSWYgd2UgZW5kIHVwIGhlcmUsIGl0J3MgYmVjYXVzZSBvZiBhIGZhaWx1cmUgdG8gbWF0Y2ggdGhlIHR3byBkZWxpbWl0ZXJzXG4gICAgLy8gaW4gdGhlIHJlZ2V4IGluIExleGVyLmpzLiAgTGFUZVggcmFpc2VzIHRoZSBmb2xsb3dpbmcgZXJyb3Igd2hlbiBcXHZlcmIgaXNcbiAgICAvLyB0ZXJtaW5hdGVkIGJ5IGVuZCBvZiBsaW5lIChvciBmaWxlKS5cbiAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJcXFxcdmVyYiBlbmRlZCBieSBlbmQgb2YgbGluZSBpbnN0ZWFkIG9mIG1hdGNoaW5nIGRlbGltaXRlclwiKTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGZ1bmN0aW9uIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIHRleHQgPSBtYWtlVmVyYihncm91cCk7XG4gICAgdmFyIGJvZHkgPSBbXTsgLy8gXFx2ZXJiIGVudGVycyB0ZXh0IG1vZGUgYW5kIHRoZXJlZm9yZSBpcyBzaXplZCBsaWtlIFxcdGV4dHN0eWxlXG5cbiAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUob3B0aW9ucy5zdHlsZS50ZXh0KCkpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgYyA9IHRleHRbaV07XG5cbiAgICAgIGlmIChjID09PSAnficpIHtcbiAgICAgICAgYyA9ICdcXFxcdGV4dGFzY2lpdGlsZGUnO1xuICAgICAgfVxuXG4gICAgICBib2R5LnB1c2goYnVpbGRDb21tb24ubWFrZVN5bWJvbChjLCBcIlR5cGV3cml0ZXItUmVndWxhclwiLCBncm91cC5tb2RlLCBuZXdPcHRpb25zLCBbXCJtb3JkXCIsIFwidGV4dHR0XCJdKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJ0ZXh0XCJdLmNvbmNhdChuZXdPcHRpb25zLnNpemluZ0NsYXNzZXMob3B0aW9ucykpLCBidWlsZENvbW1vbi50cnlDb21iaW5lQ2hhcnMoYm9keSksIG5ld09wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiBmdW5jdGlvbiBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIHRleHQgPSBuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZShtYWtlVmVyYihncm91cCkpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdGV4dFwiLCBbdGV4dF0pO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWF0aHZhcmlhbnRcIiwgXCJtb25vc3BhY2VcIik7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuLyoqXG4gKiBDb252ZXJ0cyB2ZXJiIGdyb3VwIGludG8gYm9keSBzdHJpbmcuXG4gKlxuICogXFx2ZXJiKiByZXBsYWNlcyBlYWNoIHNwYWNlIHdpdGggYW4gb3BlbiBib3ggXFx1MjQyM1xuICogXFx2ZXJiIHJlcGxhY2VzIGVhY2ggc3BhY2Ugd2l0aCBhIG5vLWJyZWFrIHNwYWNlIFxceEEwXG4gKi9cblxudmFyIG1ha2VWZXJiID0gZnVuY3Rpb24gbWFrZVZlcmIoZ3JvdXApIHtcbiAgcmV0dXJuIGdyb3VwLmJvZHkucmVwbGFjZSgvIC9nLCBncm91cC5zdGFyID8gXCJcXHUyNDIzXCIgOiAnXFx4QTAnKTtcbn07XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbnMuanNcbi8qKiBJbmNsdWRlIHRoaXMgdG8gZW5zdXJlIHRoYXQgYWxsIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZC4gKi9cblxudmFyIGZ1bmN0aW9ucyA9IF9mdW5jdGlvbnM7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfZnVuY3Rpb25zID0gKGZ1bmN0aW9ucyk7IC8vIFRPRE8oa2V2aW5iKTogaGF2ZSBmdW5jdGlvbnMgcmV0dXJuIGFuIG9iamVjdCBhbmQgY2FsbCBkZWZpbmVGdW5jdGlvbiB3aXRoXG4vLyB0aGF0IG9iamVjdCBpbiB0aGlzIGZpbGUgaW5zdGVhZCBvZiByZWx5aW5nIG9uIHNpZGUtZWZmZWN0cy5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvTGV4ZXIuanNcbi8qKlxuICogVGhlIExleGVyIGNsYXNzIGhhbmRsZXMgdG9rZW5pemluZyB0aGUgaW5wdXQgaW4gdmFyaW91cyB3YXlzLiBTaW5jZSBvdXJcbiAqIHBhcnNlciBleHBlY3RzIHVzIHRvIGJlIGFibGUgdG8gYmFja3RyYWNrLCB0aGUgbGV4ZXIgYWxsb3dzIGxleGluZyBmcm9tIGFueVxuICogZ2l2ZW4gc3RhcnRpbmcgcG9pbnQuXG4gKlxuICogSXRzIG1haW4gZXhwb3NlZCBmdW5jdGlvbiBpcyB0aGUgYGxleGAgZnVuY3Rpb24sIHdoaWNoIHRha2VzIGEgcG9zaXRpb24gdG9cbiAqIGxleCBmcm9tIGFuZCBhIHR5cGUgb2YgdG9rZW4gdG8gbGV4LiBJdCBkZWZlcnMgdG8gdGhlIGFwcHJvcHJpYXRlIGBfaW5uZXJMZXhgXG4gKiBmdW5jdGlvbi5cbiAqXG4gKiBUaGUgdmFyaW91cyBgX2lubmVyTGV4YCBmdW5jdGlvbnMgcGVyZm9ybSB0aGUgYWN0dWFsIGxleGluZyBvZiBkaWZmZXJlbnRcbiAqIGtpbmRzLlxuICovXG5cblxuXG5cbi8qIFRoZSBmb2xsb3dpbmcgdG9rZW5SZWdleFxuICogLSBtYXRjaGVzIHR5cGljYWwgd2hpdGVzcGFjZSAoYnV0IG5vdCBOQlNQIGV0Yy4pIHVzaW5nIGl0cyBmaXJzdCBncm91cFxuICogLSBkb2VzIG5vdCBtYXRjaCBhbnkgY29udHJvbCBjaGFyYWN0ZXIgXFx4MDAtXFx4MWYgZXhjZXB0IHdoaXRlc3BhY2VcbiAqIC0gZG9lcyBub3QgbWF0Y2ggYSBiYXJlIGJhY2tzbGFzaFxuICogLSBtYXRjaGVzIGFueSBBU0NJSSBjaGFyYWN0ZXIgZXhjZXB0IHRob3NlIGp1c3QgbWVudGlvbmVkXG4gKiAtIGRvZXMgbm90IG1hdGNoIHRoZSBCTVAgcHJpdmF0ZSB1c2UgYXJlYSBcXHVFMDAwLVxcdUY4RkZcbiAqIC0gZG9lcyBub3QgbWF0Y2ggYmFyZSBzdXJyb2dhdGUgY29kZSB1bml0c1xuICogLSBtYXRjaGVzIGFueSBCTVAgY2hhcmFjdGVyIGV4Y2VwdCBmb3IgdGhvc2UganVzdCBkZXNjcmliZWRcbiAqIC0gbWF0Y2hlcyBhbnkgdmFsaWQgVW5pY29kZSBzdXJyb2dhdGUgcGFpclxuICogLSBtYXRjaGVzIGEgYmFja3NsYXNoIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIGxldHRlcnNcbiAqIC0gbWF0Y2hlcyBhIGJhY2tzbGFzaCBmb2xsb3dlZCBieSBhbnkgQk1QIGNoYXJhY3RlciwgaW5jbHVkaW5nIG5ld2xpbmVcbiAqIEp1c3QgYmVjYXVzZSB0aGUgTGV4ZXIgbWF0Y2hlcyBzb21ldGhpbmcgZG9lc24ndCBtZWFuIGl0J3MgdmFsaWQgaW5wdXQ6XG4gKiBJZiB0aGVyZSBpcyBubyBtYXRjaGluZyBmdW5jdGlvbiBvciBzeW1ib2wgZGVmaW5pdGlvbiwgdGhlIFBhcnNlciB3aWxsXG4gKiBzdGlsbCByZWplY3QgdGhlIGlucHV0LlxuICovXG52YXIgc3BhY2VSZWdleFN0cmluZyA9IFwiWyBcXHJcXG5cXHRdXCI7XG52YXIgY29udHJvbFdvcmRSZWdleFN0cmluZyA9IFwiXFxcXFxcXFxbYS16QS1aQF0rXCI7XG52YXIgY29udHJvbFN5bWJvbFJlZ2V4U3RyaW5nID0gXCJcXFxcXFxcXFteXFx1RDgwMC1cXHVERkZGXVwiO1xudmFyIGNvbnRyb2xXb3JkV2hpdGVzcGFjZVJlZ2V4U3RyaW5nID0gXCJcIiArIGNvbnRyb2xXb3JkUmVnZXhTdHJpbmcgKyBzcGFjZVJlZ2V4U3RyaW5nICsgXCIqXCI7XG52YXIgY29udHJvbFdvcmRXaGl0ZXNwYWNlUmVnZXggPSBuZXcgUmVnRXhwKFwiXihcIiArIGNvbnRyb2xXb3JkUmVnZXhTdHJpbmcgKyBcIilcIiArIHNwYWNlUmVnZXhTdHJpbmcgKyBcIiokXCIpO1xudmFyIGNvbWJpbmluZ0RpYWNyaXRpY2FsTWFya1N0cmluZyA9IFwiW1xcdTAzMDAtXFx1MDM2Rl1cIjtcbnZhciBjb21iaW5pbmdEaWFjcml0aWNhbE1hcmtzRW5kUmVnZXggPSBuZXcgUmVnRXhwKGNvbWJpbmluZ0RpYWNyaXRpY2FsTWFya1N0cmluZyArIFwiKyRcIik7XG52YXIgdG9rZW5SZWdleFN0cmluZyA9IFwiKFwiICsgc3BhY2VSZWdleFN0cmluZyArIFwiKyl8XCIgKyAvLyB3aGl0ZXNwYWNlXG5cIihbIS1cXFxcW1xcXFxdLVxcdTIwMjdcXHUyMDJBLVxcdUQ3RkZcXHVGOTAwLVxcdUZGRkZdXCIgKyAoIC8vIHNpbmdsZSBjb2RlcG9pbnRcbmNvbWJpbmluZ0RpYWNyaXRpY2FsTWFya1N0cmluZyArIFwiKlwiKSArIC8vIC4uLnBsdXMgYWNjZW50c1xuXCJ8W1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXVwiICsgKCAvLyBzdXJyb2dhdGUgcGFpclxuY29tYmluaW5nRGlhY3JpdGljYWxNYXJrU3RyaW5nICsgXCIqXCIpICsgLy8gLi4ucGx1cyBhY2NlbnRzXG5cInxcXFxcXFxcXHZlcmJcXFxcKihbXl0pLio/XFxcXDNcIiArIC8vIFxcdmVyYipcblwifFxcXFxcXFxcdmVyYihbXiphLXpBLVpdKS4qP1xcXFw0XCIgKyAvLyBcXHZlcmIgdW5zdGFycmVkXG5cInxcXFxcXFxcXG9wZXJhdG9ybmFtZVxcXFwqXCIgKyAoIC8vIFxcb3BlcmF0b3JuYW1lKlxuXCJ8XCIgKyBjb250cm9sV29yZFdoaXRlc3BhY2VSZWdleFN0cmluZykgKyAoIC8vIFxcbWFjcm9OYW1lICsgc3BhY2VzXG5cInxcIiArIGNvbnRyb2xTeW1ib2xSZWdleFN0cmluZyArIFwiKVwiKTsgLy8gXFxcXCwgXFwnLCBldGMuXG5cbi8qKiBNYWluIExleGVyIGNsYXNzICovXG5cbnZhciBMZXhlcl9MZXhlciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIC8vIGNhdGVnb3J5IGNvZGVzLCBvbmx5IHN1cHBvcnRzIGNvbW1lbnQgY2hhcmFjdGVycyAoMTQpIGZvciBub3dcbiAgZnVuY3Rpb24gTGV4ZXIoaW5wdXQsIHNldHRpbmdzKSB7XG4gICAgdGhpcy5pbnB1dCA9IHZvaWQgMDtcbiAgICB0aGlzLnNldHRpbmdzID0gdm9pZCAwO1xuICAgIHRoaXMudG9rZW5SZWdleCA9IHZvaWQgMDtcbiAgICB0aGlzLmNhdGNvZGVzID0gdm9pZCAwO1xuICAgIC8vIFNlcGFyYXRlIGFjY2VudHMgZnJvbSBjaGFyYWN0ZXJzXG4gICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgICB0aGlzLnRva2VuUmVnZXggPSBuZXcgUmVnRXhwKHRva2VuUmVnZXhTdHJpbmcsICdnJyk7XG4gICAgdGhpcy5jYXRjb2RlcyA9IHtcbiAgICAgIFwiJVwiOiAxNCAvLyBjb21tZW50IGNoYXJhY3RlclxuXG4gICAgfTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBMZXhlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldENhdGNvZGUgPSBmdW5jdGlvbiBzZXRDYXRjb2RlKGNoYXIsIGNvZGUpIHtcbiAgICB0aGlzLmNhdGNvZGVzW2NoYXJdID0gY29kZTtcbiAgfVxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBsZXhlcyBhIHNpbmdsZSB0b2tlbi5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ubGV4ID0gZnVuY3Rpb24gbGV4KCkge1xuICAgIHZhciBpbnB1dCA9IHRoaXMuaW5wdXQ7XG4gICAgdmFyIHBvcyA9IHRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXg7XG5cbiAgICBpZiAocG9zID09PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBuZXcgVG9rZW5fVG9rZW4oXCJFT0ZcIiwgbmV3IFNvdXJjZUxvY2F0aW9uKHRoaXMsIHBvcywgcG9zKSk7XG4gICAgfVxuXG4gICAgdmFyIG1hdGNoID0gdGhpcy50b2tlblJlZ2V4LmV4ZWMoaW5wdXQpO1xuXG4gICAgaWYgKG1hdGNoID09PSBudWxsIHx8IG1hdGNoLmluZGV4ICE9PSBwb3MpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlVuZXhwZWN0ZWQgY2hhcmFjdGVyOiAnXCIgKyBpbnB1dFtwb3NdICsgXCInXCIsIG5ldyBUb2tlbl9Ub2tlbihpbnB1dFtwb3NdLCBuZXcgU291cmNlTG9jYXRpb24odGhpcywgcG9zLCBwb3MgKyAxKSkpO1xuICAgIH1cblxuICAgIHZhciB0ZXh0ID0gbWF0Y2hbMl0gfHwgXCIgXCI7XG5cbiAgICBpZiAodGhpcy5jYXRjb2Rlc1t0ZXh0XSA9PT0gMTQpIHtcbiAgICAgIC8vIGNvbW1lbnQgY2hhcmFjdGVyXG4gICAgICB2YXIgbmxJbmRleCA9IGlucHV0LmluZGV4T2YoJ1xcbicsIHRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXgpO1xuXG4gICAgICBpZiAobmxJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgdGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleCA9IGlucHV0Lmxlbmd0aDsgLy8gRU9GXG5cbiAgICAgICAgdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJjb21tZW50QXRFbmRcIiwgXCIlIGNvbW1lbnQgaGFzIG5vIHRlcm1pbmF0aW5nIG5ld2xpbmU7IExhVGVYIHdvdWxkIFwiICsgXCJmYWlsIGJlY2F1c2Ugb2YgY29tbWVudGluZyB0aGUgZW5kIG9mIG1hdGggbW9kZSAoZS5nLiAkKVwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXggPSBubEluZGV4ICsgMTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMubGV4KCk7XG4gICAgfSAvLyBUcmltIGFueSB0cmFpbGluZyB3aGl0ZXNwYWNlIGZyb20gY29udHJvbCB3b3JkIG1hdGNoXG5cblxuICAgIHZhciBjb250cm9sTWF0Y2ggPSB0ZXh0Lm1hdGNoKGNvbnRyb2xXb3JkV2hpdGVzcGFjZVJlZ2V4KTtcblxuICAgIGlmIChjb250cm9sTWF0Y2gpIHtcbiAgICAgIHRleHQgPSBjb250cm9sTWF0Y2hbMV07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUb2tlbl9Ub2tlbih0ZXh0LCBuZXcgU291cmNlTG9jYXRpb24odGhpcywgcG9zLCB0aGlzLnRva2VuUmVnZXgubGFzdEluZGV4KSk7XG4gIH07XG5cbiAgcmV0dXJuIExleGVyO1xufSgpO1xuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL05hbWVzcGFjZS5qc1xuLyoqXG4gKiBBIGBOYW1lc3BhY2VgIHJlZmVycyB0byBhIHNwYWNlIG9mIG5hbWVhYmxlIHRoaW5ncyBsaWtlIG1hY3JvcyBvciBsZW5ndGhzLFxuICogd2hpY2ggY2FuIGJlIGBzZXRgIGVpdGhlciBnbG9iYWxseSBvciBsb2NhbCB0byBhIG5lc3RlZCBncm91cCwgdXNpbmcgYW5cbiAqIHVuZG8gc3RhY2sgc2ltaWxhciB0byBob3cgVGVYIGltcGxlbWVudHMgdGhpcyBmdW5jdGlvbmFsaXR5LlxuICogUGVyZm9ybWFuY2Utd2lzZSwgYGdldGAgYW5kIGxvY2FsIGBzZXRgIHRha2UgY29uc3RhbnQgdGltZSwgd2hpbGUgZ2xvYmFsXG4gKiBgc2V0YCB0YWtlcyB0aW1lIHByb3BvcnRpb25hbCB0byB0aGUgZGVwdGggb2YgZ3JvdXAgbmVzdGluZy5cbiAqL1xuXG5cbnZhciBOYW1lc3BhY2VfTmFtZXNwYWNlID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIEJvdGggYXJndW1lbnRzIGFyZSBvcHRpb25hbC4gIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhbiBvYmplY3Qgb2ZcbiAgICogYnVpbHQtaW4gbWFwcGluZ3Mgd2hpY2ggbmV2ZXIgY2hhbmdlLiAgVGhlIHNlY29uZCBhcmd1bWVudCBpcyBhbiBvYmplY3RcbiAgICogb2YgaW5pdGlhbCAoZ2xvYmFsLWxldmVsKSBtYXBwaW5ncywgd2hpY2ggd2lsbCBjb25zdGFudGx5IGNoYW5nZVxuICAgKiBhY2NvcmRpbmcgdG8gYW55IGdsb2JhbC90b3AtbGV2ZWwgYHNldGBzIGRvbmUuXG4gICAqL1xuICBmdW5jdGlvbiBOYW1lc3BhY2UoYnVpbHRpbnMsIGdsb2JhbE1hY3Jvcykge1xuICAgIGlmIChidWlsdGlucyA9PT0gdm9pZCAwKSB7XG4gICAgICBidWlsdGlucyA9IHt9O1xuICAgIH1cblxuICAgIGlmIChnbG9iYWxNYWNyb3MgPT09IHZvaWQgMCkge1xuICAgICAgZ2xvYmFsTWFjcm9zID0ge307XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50ID0gdm9pZCAwO1xuICAgIHRoaXMuYnVpbHRpbnMgPSB2b2lkIDA7XG4gICAgdGhpcy51bmRlZlN0YWNrID0gdm9pZCAwO1xuICAgIHRoaXMuY3VycmVudCA9IGdsb2JhbE1hY3JvcztcbiAgICB0aGlzLmJ1aWx0aW5zID0gYnVpbHRpbnM7XG4gICAgdGhpcy51bmRlZlN0YWNrID0gW107XG4gIH1cbiAgLyoqXG4gICAqIFN0YXJ0IGEgbmV3IG5lc3RlZCBncm91cCwgYWZmZWN0aW5nIGZ1dHVyZSBsb2NhbCBgc2V0YHMuXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IE5hbWVzcGFjZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJlZ2luR3JvdXAgPSBmdW5jdGlvbiBiZWdpbkdyb3VwKCkge1xuICAgIHRoaXMudW5kZWZTdGFjay5wdXNoKHt9KTtcbiAgfVxuICAvKipcbiAgICogRW5kIGN1cnJlbnQgbmVzdGVkIGdyb3VwLCByZXN0b3JpbmcgdmFsdWVzIGJlZm9yZSB0aGUgZ3JvdXAgYmVnYW4uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmVuZEdyb3VwID0gZnVuY3Rpb24gZW5kR3JvdXAoKSB7XG4gICAgaWYgKHRoaXMudW5kZWZTdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlVuYmFsYW5jZWQgbmFtZXNwYWNlIGRlc3RydWN0aW9uOiBhdHRlbXB0IFwiICsgXCJ0byBwb3AgZ2xvYmFsIG5hbWVzcGFjZTsgcGxlYXNlIHJlcG9ydCB0aGlzIGFzIGEgYnVnXCIpO1xuICAgIH1cblxuICAgIHZhciB1bmRlZnMgPSB0aGlzLnVuZGVmU3RhY2sucG9wKCk7XG5cbiAgICBmb3IgKHZhciB1bmRlZiBpbiB1bmRlZnMpIHtcbiAgICAgIGlmICh1bmRlZnMuaGFzT3duUHJvcGVydHkodW5kZWYpKSB7XG4gICAgICAgIGlmICh1bmRlZnNbdW5kZWZdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkZWxldGUgdGhpcy5jdXJyZW50W3VuZGVmXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRbdW5kZWZdID0gdW5kZWZzW3VuZGVmXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogRGV0ZWN0IHdoZXRoZXIgYG5hbWVgIGhhcyBhIGRlZmluaXRpb24uICBFcXVpdmFsZW50IHRvXG4gICAqIGBnZXQobmFtZSkgIT0gbnVsbGAuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmhhcyA9IGZ1bmN0aW9uIGhhcyhuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudC5oYXNPd25Qcm9wZXJ0eShuYW1lKSB8fCB0aGlzLmJ1aWx0aW5zLmhhc093blByb3BlcnR5KG5hbWUpO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgYSBuYW1lLCBvciBgdW5kZWZpbmVkYCBpZiB0aGVyZSBpcyBubyB2YWx1ZS5cbiAgICpcbiAgICogTm90ZTogRG8gbm90IHVzZSBgaWYgKG5hbWVzcGFjZS5nZXQoLi4uKSlgIHRvIGRldGVjdCB3aGV0aGVyIGEgbWFjcm9cbiAgICogaXMgZGVmaW5lZCwgYXMgdGhlIGRlZmluaXRpb24gbWF5IGJlIHRoZSBlbXB0eSBzdHJpbmcgd2hpY2ggZXZhbHVhdGVzXG4gICAqIHRvIGBmYWxzZWAgaW4gSmF2YVNjcmlwdC4gIFVzZSBgaWYgKG5hbWVzcGFjZS5nZXQoLi4uKSAhPSBudWxsKWAgb3JcbiAgICogYGlmIChuYW1lc3BhY2UuaGFzKC4uLikpYC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZ2V0ID0gZnVuY3Rpb24gZ2V0KG5hbWUpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50W25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsdGluc1tuYW1lXTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VycmVudCB2YWx1ZSBvZiBhIG5hbWUsIGFuZCBvcHRpb25hbGx5IHNldCBpdCBnbG9iYWxseSB0b28uXG4gICAqIExvY2FsIHNldCgpIHNldHMgdGhlIGN1cnJlbnQgdmFsdWUgYW5kICh3aGVuIGFwcHJvcHJpYXRlKSBhZGRzIGFuIHVuZG9cbiAgICogb3BlcmF0aW9uIHRvIHRoZSB1bmRvIHN0YWNrLiAgR2xvYmFsIHNldCgpIG1heSBjaGFuZ2UgdGhlIHVuZG9cbiAgICogb3BlcmF0aW9uIGF0IGV2ZXJ5IGxldmVsLCBzbyB0YWtlcyB0aW1lIGxpbmVhciBpbiB0aGVpciBudW1iZXIuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldChuYW1lLCB2YWx1ZSwgZ2xvYmFsKSB7XG4gICAgaWYgKGdsb2JhbCA9PT0gdm9pZCAwKSB7XG4gICAgICBnbG9iYWwgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAvLyBHbG9iYWwgc2V0IGlzIGVxdWl2YWxlbnQgdG8gc2V0dGluZyBpbiBhbGwgZ3JvdXBzLiAgU2ltdWxhdGUgdGhpc1xuICAgICAgLy8gYnkgZGVzdHJveWluZyBhbnkgdW5kb3MgY3VycmVudGx5IHNjaGVkdWxlZCBmb3IgdGhpcyBuYW1lLFxuICAgICAgLy8gYW5kIGFkZGluZyBhbiB1bmRvIHdpdGggdGhlICpuZXcqIHZhbHVlIChpbiBjYXNlIGl0IGxhdGVyIGdldHNcbiAgICAgIC8vIGxvY2FsbHkgcmVzZXQgd2l0aGluIHRoaXMgZW52aXJvbm1lbnQpLlxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnVuZGVmU3RhY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZGVsZXRlIHRoaXMudW5kZWZTdGFja1tpXVtuYW1lXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudW5kZWZTdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMudW5kZWZTdGFja1t0aGlzLnVuZGVmU3RhY2subGVuZ3RoIC0gMV1bbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVW5kbyB0aGlzIHNldCBhdCBlbmQgb2YgdGhpcyBncm91cCAocG9zc2libHkgdG8gYHVuZGVmaW5lZGApLFxuICAgICAgLy8gdW5sZXNzIGFuIHVuZG8gaXMgYWxyZWFkeSBpbiBwbGFjZSwgaW4gd2hpY2ggY2FzZSB0aGF0IG9sZGVyXG4gICAgICAvLyB2YWx1ZSBpcyB0aGUgY29ycmVjdCBvbmUuXG4gICAgICB2YXIgdG9wID0gdGhpcy51bmRlZlN0YWNrW3RoaXMudW5kZWZTdGFjay5sZW5ndGggLSAxXTtcblxuICAgICAgaWYgKHRvcCAmJiAhdG9wLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIHRvcFtuYW1lXSA9IHRoaXMuY3VycmVudFtuYW1lXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRbbmFtZV0gPSB2YWx1ZTtcbiAgfTtcblxuICByZXR1cm4gTmFtZXNwYWNlO1xufSgpO1xuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL21hY3Jvcy5qc1xuLyoqXG4gKiBQcmVkZWZpbmVkIG1hY3JvcyBmb3IgS2FUZVguXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGRlZmluZSBzb21lIGNvbW1hbmRzIGluIHRlcm1zIG9mIG90aGVycy5cbiAqL1xuXG5cblxuXG5cbnZhciBidWlsdGluTWFjcm9zID0ge307XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBtYWNyb3MgPSAoYnVpbHRpbk1hY3Jvcyk7IC8vIFRoaXMgZnVuY3Rpb24gbWlnaHQgb25lIGRheSBhY2NlcHQgYW4gYWRkaXRpb25hbCBhcmd1bWVudCBhbmQgZG8gbW9yZSB0aGluZ3MuXG5cbmZ1bmN0aW9uIGRlZmluZU1hY3JvKG5hbWUsIGJvZHkpIHtcbiAgYnVpbHRpbk1hY3Jvc1tuYW1lXSA9IGJvZHk7XG59IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIG1hY3JvIHRvb2xzXG4vLyBMYVRlWCdzIFxcQGZpcnN0b2Z0d297IzF9eyMyfSBleHBhbmRzIHRvICMxLCBza2lwcGluZyAjMlxuLy8gVGVYIHNvdXJjZTogXFxsb25nXFxkZWZcXEBmaXJzdG9mdHdvIzEjMnsjMX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcQGZpcnN0b2Z0d29cIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgdmFyIGFyZ3MgPSBjb250ZXh0LmNvbnN1bWVBcmdzKDIpO1xuICByZXR1cm4ge1xuICAgIHRva2VuczogYXJnc1swXSxcbiAgICBudW1BcmdzOiAwXG4gIH07XG59KTsgLy8gTGFUZVgncyBcXEBzZWNvbmRvZnR3b3sjMX17IzJ9IGV4cGFuZHMgdG8gIzIsIHNraXBwaW5nICMxXG4vLyBUZVggc291cmNlOiBcXGxvbmdcXGRlZlxcQHNlY29uZG9mdHdvIzEjMnsjMn1cblxuZGVmaW5lTWFjcm8oXCJcXFxcQHNlY29uZG9mdHdvXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciBhcmdzID0gY29udGV4dC5jb25zdW1lQXJncygyKTtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbnM6IGFyZ3NbMV0sXG4gICAgbnVtQXJnczogMFxuICB9O1xufSk7IC8vIExhVGVYJ3MgXFxAaWZuZXh0Y2hhcnsjMX17IzJ9eyMzfSBsb29rcyBhaGVhZCB0byB0aGUgbmV4dCAodW5leHBhbmRlZClcbi8vIHN5bWJvbC4gIElmIGl0IG1hdGNoZXMgIzEsIHRoZW4gdGhlIG1hY3JvIGV4cGFuZHMgdG8gIzI7IG90aGVyd2lzZSwgIzMuXG4vLyBOb3RlLCBob3dldmVyLCB0aGF0IGl0IGRvZXMgbm90IGNvbnN1bWUgdGhlIG5leHQgc3ltYm9sIGluIGVpdGhlciBjYXNlLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxAaWZuZXh0Y2hhclwiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICB2YXIgYXJncyA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMyk7IC8vIHN5bWJvbCwgaWYsIGVsc2VcblxuICB2YXIgbmV4dFRva2VuID0gY29udGV4dC5mdXR1cmUoKTtcblxuICBpZiAoYXJnc1swXS5sZW5ndGggPT09IDEgJiYgYXJnc1swXVswXS50ZXh0ID09PSBuZXh0VG9rZW4udGV4dCkge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbnM6IGFyZ3NbMV0sXG4gICAgICBudW1BcmdzOiAwXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW5zOiBhcmdzWzJdLFxuICAgICAgbnVtQXJnczogMFxuICAgIH07XG4gIH1cbn0pOyAvLyBMYVRlWCdzIFxcQGlmc3RhcnsjMX17IzJ9IGxvb2tzIGFoZWFkIHRvIHRoZSBuZXh0ICh1bmV4cGFuZGVkKSBzeW1ib2wuXG4vLyBJZiBpdCBpcyBgKmAsIHRoZW4gaXQgY29uc3VtZXMgdGhlIHN5bWJvbCwgYW5kIHRoZSBtYWNybyBleHBhbmRzIHRvICMxO1xuLy8gb3RoZXJ3aXNlLCB0aGUgbWFjcm8gZXhwYW5kcyB0byAjMiAod2l0aG91dCBjb25zdW1pbmcgdGhlIHN5bWJvbCkuXG4vLyBUZVggc291cmNlOiBcXGRlZlxcQGlmc3RhciMxe1xcQGlmbmV4dGNoYXIgKntcXEBmaXJzdG9mdHdveyMxfX19XG5cbmRlZmluZU1hY3JvKFwiXFxcXEBpZnN0YXJcIiwgXCJcXFxcQGlmbmV4dGNoYXIgKntcXFxcQGZpcnN0b2Z0d297IzF9fVwiKTsgLy8gTGFUZVgncyBcXFRleHRPck1hdGh7IzF9eyMyfSBleHBhbmRzIHRvICMxIGluIHRleHQgbW9kZSwgIzIgaW4gbWF0aCBtb2RlXG5cbmRlZmluZU1hY3JvKFwiXFxcXFRleHRPck1hdGhcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgdmFyIGFyZ3MgPSBjb250ZXh0LmNvbnN1bWVBcmdzKDIpO1xuXG4gIGlmIChjb250ZXh0Lm1vZGUgPT09ICd0ZXh0Jykge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbnM6IGFyZ3NbMF0sXG4gICAgICBudW1BcmdzOiAwXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW5zOiBhcmdzWzFdLFxuICAgICAgbnVtQXJnczogMFxuICAgIH07XG4gIH1cbn0pOyAvLyBMb29rdXAgdGFibGUgZm9yIHBhcnNpbmcgbnVtYmVycyBpbiBiYXNlIDggdGhyb3VnaCAxNlxuXG52YXIgZGlnaXRUb051bWJlciA9IHtcbiAgXCIwXCI6IDAsXG4gIFwiMVwiOiAxLFxuICBcIjJcIjogMixcbiAgXCIzXCI6IDMsXG4gIFwiNFwiOiA0LFxuICBcIjVcIjogNSxcbiAgXCI2XCI6IDYsXG4gIFwiN1wiOiA3LFxuICBcIjhcIjogOCxcbiAgXCI5XCI6IDksXG4gIFwiYVwiOiAxMCxcbiAgXCJBXCI6IDEwLFxuICBcImJcIjogMTEsXG4gIFwiQlwiOiAxMSxcbiAgXCJjXCI6IDEyLFxuICBcIkNcIjogMTIsXG4gIFwiZFwiOiAxMyxcbiAgXCJEXCI6IDEzLFxuICBcImVcIjogMTQsXG4gIFwiRVwiOiAxNCxcbiAgXCJmXCI6IDE1LFxuICBcIkZcIjogMTVcbn07IC8vIFRlWCBcXGNoYXIgbWFrZXMgYSBsaXRlcmFsIGNoYXJhY3RlciAoY2F0Y29kZSAxMikgdXNpbmcgdGhlIGZvbGxvd2luZyBmb3Jtczpcbi8vIChzZWUgVGhlIFRlWEJvb2ssIHAuIDQzKVxuLy8gICBcXGNoYXIxMjMgIC0tIGRlY2ltYWxcbi8vICAgXFxjaGFyJzEyMyAtLSBvY3RhbFxuLy8gICBcXGNoYXJcIjEyMyAtLSBoZXhcbi8vICAgXFxjaGFyYHggICAtLSBjaGFyYWN0ZXIgdGhhdCBjYW4gYmUgd3JpdHRlbiAoaS5lLiBpc24ndCBhY3RpdmUpXG4vLyAgIFxcY2hhcmBcXHggIC0tIGNoYXJhY3RlciB0aGF0IGNhbm5vdCBiZSB3cml0dGVuIChlLmcuICUpXG4vLyBUaGVzZSBhbGwgcmVmZXIgdG8gY2hhcmFjdGVycyBmcm9tIHRoZSBmb250LCBzbyB3ZSB0dXJuIHRoZW0gaW50byBzcGVjaWFsXG4vLyBjYWxscyB0byBhIGZ1bmN0aW9uIFxcQGNoYXIgZGVhbHQgd2l0aCBpbiB0aGUgUGFyc2VyLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxjaGFyXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciB0b2tlbiA9IGNvbnRleHQucG9wVG9rZW4oKTtcbiAgdmFyIGJhc2U7XG4gIHZhciBudW1iZXIgPSAnJztcblxuICBpZiAodG9rZW4udGV4dCA9PT0gXCInXCIpIHtcbiAgICBiYXNlID0gODtcbiAgICB0b2tlbiA9IGNvbnRleHQucG9wVG9rZW4oKTtcbiAgfSBlbHNlIGlmICh0b2tlbi50ZXh0ID09PSAnXCInKSB7XG4gICAgYmFzZSA9IDE2O1xuICAgIHRva2VuID0gY29udGV4dC5wb3BUb2tlbigpO1xuICB9IGVsc2UgaWYgKHRva2VuLnRleHQgPT09IFwiYFwiKSB7XG4gICAgdG9rZW4gPSBjb250ZXh0LnBvcFRva2VuKCk7XG5cbiAgICBpZiAodG9rZW4udGV4dFswXSA9PT0gXCJcXFxcXCIpIHtcbiAgICAgIG51bWJlciA9IHRva2VuLnRleHQuY2hhckNvZGVBdCgxKTtcbiAgICB9IGVsc2UgaWYgKHRva2VuLnRleHQgPT09IFwiRU9GXCIpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlxcXFxjaGFyYCBtaXNzaW5nIGFyZ3VtZW50XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBudW1iZXIgPSB0b2tlbi50ZXh0LmNoYXJDb2RlQXQoMCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGJhc2UgPSAxMDtcbiAgfVxuXG4gIGlmIChiYXNlKSB7XG4gICAgLy8gUGFyc2UgYSBudW1iZXIgaW4gdGhlIGdpdmVuIGJhc2UsIHN0YXJ0aW5nIHdpdGggZmlyc3QgYHRva2VuYC5cbiAgICBudW1iZXIgPSBkaWdpdFRvTnVtYmVyW3Rva2VuLnRleHRdO1xuXG4gICAgaWYgKG51bWJlciA9PSBudWxsIHx8IG51bWJlciA+PSBiYXNlKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJJbnZhbGlkIGJhc2UtXCIgKyBiYXNlICsgXCIgZGlnaXQgXCIgKyB0b2tlbi50ZXh0KTtcbiAgICB9XG5cbiAgICB2YXIgZGlnaXQ7XG5cbiAgICB3aGlsZSAoKGRpZ2l0ID0gZGlnaXRUb051bWJlcltjb250ZXh0LmZ1dHVyZSgpLnRleHRdKSAhPSBudWxsICYmIGRpZ2l0IDwgYmFzZSkge1xuICAgICAgbnVtYmVyICo9IGJhc2U7XG4gICAgICBudW1iZXIgKz0gZGlnaXQ7XG4gICAgICBjb250ZXh0LnBvcFRva2VuKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFwiXFxcXEBjaGFye1wiICsgbnVtYmVyICsgXCJ9XCI7XG59KTsgLy8gQmFzaWMgc3VwcG9ydCBmb3IgbWFjcm8gZGVmaW5pdGlvbnM6XG4vLyAgICAgXFxkZWZcXG1hY3Jve2V4cGFuc2lvbn1cbi8vICAgICBcXGRlZlxcbWFjcm8jMXtleHBhbnNpb259XG4vLyAgICAgXFxkZWZcXG1hY3JvIzEjMntleHBhbnNpb259XG4vLyAgICAgXFxkZWZcXG1hY3JvIzEjMiMzIzQjNSM2IzcjOCM5e2V4cGFuc2lvbn1cbi8vIEFsc28gdGhlIFxcZ2RlZiBhbmQgXFxnbG9iYWxcXGRlZiBlcXVpdmFsZW50c1xuXG52YXIgbWFjcm9zX2RlZiA9IGZ1bmN0aW9uIGRlZihjb250ZXh0LCBnbG9iYWwpIHtcbiAgdmFyIGFyZyA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMSlbMF07XG5cbiAgaWYgKGFyZy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJcXFxcZ2RlZidzIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBtYWNybyBuYW1lXCIpO1xuICB9XG5cbiAgdmFyIG5hbWUgPSBhcmdbMF0udGV4dDsgLy8gQ291bnQgYXJndW1lbnQgc3BlY2lmaWVycywgYW5kIGNoZWNrIHRoZXkgYXJlIGluIHRoZSBvcmRlciAjMSAjMiAuLi5cblxuICB2YXIgbnVtQXJncyA9IDA7XG4gIGFyZyA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMSlbMF07XG5cbiAgd2hpbGUgKGFyZy5sZW5ndGggPT09IDEgJiYgYXJnWzBdLnRleHQgPT09IFwiI1wiKSB7XG4gICAgYXJnID0gY29udGV4dC5jb25zdW1lQXJncygxKVswXTtcblxuICAgIGlmIChhcmcubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50IG51bWJlciBsZW5ndGggXFxcIlwiICsgYXJnLmxlbmd0aCArIFwiXFxcIlwiKTtcbiAgICB9XG5cbiAgICBpZiAoIS9eWzEtOV0kLy50ZXN0KGFyZ1swXS50ZXh0KSkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCBhcmd1bWVudCBudW1iZXIgXFxcIlwiICsgYXJnWzBdLnRleHQgKyBcIlxcXCJcIik7XG4gICAgfVxuXG4gICAgbnVtQXJncysrO1xuXG4gICAgaWYgKHBhcnNlSW50KGFyZ1swXS50ZXh0KSAhPT0gbnVtQXJncykge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiQXJndW1lbnQgbnVtYmVyIFxcXCJcIiArIGFyZ1swXS50ZXh0ICsgXCJcXFwiIG91dCBvZiBvcmRlclwiKTtcbiAgICB9XG5cbiAgICBhcmcgPSBjb250ZXh0LmNvbnN1bWVBcmdzKDEpWzBdO1xuICB9IC8vIEZpbmFsIGFyZyBpcyB0aGUgZXhwYW5zaW9uIG9mIHRoZSBtYWNyb1xuXG5cbiAgY29udGV4dC5tYWNyb3Muc2V0KG5hbWUsIHtcbiAgICB0b2tlbnM6IGFyZyxcbiAgICBudW1BcmdzOiBudW1BcmdzXG4gIH0sIGdsb2JhbCk7XG4gIHJldHVybiAnJztcbn07XG5cbmRlZmluZU1hY3JvKFwiXFxcXGdkZWZcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgcmV0dXJuIG1hY3Jvc19kZWYoY29udGV4dCwgdHJ1ZSk7XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXGRlZlwiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICByZXR1cm4gbWFjcm9zX2RlZihjb250ZXh0LCBmYWxzZSk7XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXGdsb2JhbFwiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICB2YXIgbmV4dCA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMSlbMF07XG5cbiAgaWYgKG5leHQubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCBjb21tYW5kIGFmdGVyIFxcXFxnbG9iYWxcIik7XG4gIH1cblxuICB2YXIgY29tbWFuZCA9IG5leHRbMF0udGV4dDsgLy8gVE9ETzogU2hvdWxkIGV4cGFuZCBjb21tYW5kXG5cbiAgaWYgKGNvbW1hbmQgPT09IFwiXFxcXGRlZlwiKSB7XG4gICAgLy8gXFxnbG9iYWxcXGRlZiBpcyBlcXVpdmFsZW50IHRvIFxcZ2RlZlxuICAgIHJldHVybiBtYWNyb3NfZGVmKGNvbnRleHQsIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgY29tbWFuZCAnXCIgKyBjb21tYW5kICsgXCInIGFmdGVyIFxcXFxnbG9iYWxcIik7XG4gIH1cbn0pOyAvLyBcXG5ld2NvbW1hbmR7XFxtYWNyb31bYXJnc117ZGVmaW5pdGlvbn1cbi8vIFxccmVuZXdjb21tYW5ke1xcbWFjcm99W2FyZ3Nde2RlZmluaXRpb259XG4vLyBUT0RPOiBPcHRpb25hbCBhcmd1bWVudHM6IFxcbmV3Y29tbWFuZHtcXG1hY3JvfVthcmdzXVtkZWZhdWx0XXtkZWZpbml0aW9ufVxuXG52YXIgbWFjcm9zX25ld2NvbW1hbmQgPSBmdW5jdGlvbiBuZXdjb21tYW5kKGNvbnRleHQsIGV4aXN0c09LLCBub25leGlzdHNPSykge1xuICB2YXIgYXJnID0gY29udGV4dC5jb25zdW1lQXJncygxKVswXTtcblxuICBpZiAoYXJnLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlxcXFxuZXdjb21tYW5kJ3MgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIG1hY3JvIG5hbWVcIik7XG4gIH1cblxuICB2YXIgbmFtZSA9IGFyZ1swXS50ZXh0O1xuICB2YXIgZXhpc3RzID0gY29udGV4dC5pc0RlZmluZWQobmFtZSk7XG5cbiAgaWYgKGV4aXN0cyAmJiAhZXhpc3RzT0spIHtcbiAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJcXFxcbmV3Y29tbWFuZHtcIiArIG5hbWUgKyBcIn0gYXR0ZW1wdGluZyB0byByZWRlZmluZSBcIiArIChuYW1lICsgXCI7IHVzZSBcXFxccmVuZXdjb21tYW5kXCIpKTtcbiAgfVxuXG4gIGlmICghZXhpc3RzICYmICFub25leGlzdHNPSykge1xuICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlxcXFxyZW5ld2NvbW1hbmR7XCIgKyBuYW1lICsgXCJ9IHdoZW4gY29tbWFuZCBcIiArIG5hbWUgKyBcIiBcIiArIFwiZG9lcyBub3QgeWV0IGV4aXN0OyB1c2UgXFxcXG5ld2NvbW1hbmRcIik7XG4gIH1cblxuICB2YXIgbnVtQXJncyA9IDA7XG4gIGFyZyA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMSlbMF07XG5cbiAgaWYgKGFyZy5sZW5ndGggPT09IDEgJiYgYXJnWzBdLnRleHQgPT09IFwiW1wiKSB7XG4gICAgdmFyIGFyZ1RleHQgPSAnJztcbiAgICB2YXIgdG9rZW4gPSBjb250ZXh0LmV4cGFuZE5leHRUb2tlbigpO1xuXG4gICAgd2hpbGUgKHRva2VuLnRleHQgIT09IFwiXVwiICYmIHRva2VuLnRleHQgIT09IFwiRU9GXCIpIHtcbiAgICAgIC8vIFRPRE86IFNob3VsZCBwcm9wZXJseSBleHBhbmQgYXJnLCBlLmcuLCBpZ25vcmUge31zXG4gICAgICBhcmdUZXh0ICs9IHRva2VuLnRleHQ7XG4gICAgICB0b2tlbiA9IGNvbnRleHQuZXhwYW5kTmV4dFRva2VuKCk7XG4gICAgfVxuXG4gICAgaWYgKCFhcmdUZXh0Lm1hdGNoKC9eXFxzKlswLTldK1xccyokLykpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50czogXCIgKyBhcmdUZXh0KTtcbiAgICB9XG5cbiAgICBudW1BcmdzID0gcGFyc2VJbnQoYXJnVGV4dCk7XG4gICAgYXJnID0gY29udGV4dC5jb25zdW1lQXJncygxKVswXTtcbiAgfSAvLyBGaW5hbCBhcmcgaXMgdGhlIGV4cGFuc2lvbiBvZiB0aGUgbWFjcm9cblxuXG4gIGNvbnRleHQubWFjcm9zLnNldChuYW1lLCB7XG4gICAgdG9rZW5zOiBhcmcsXG4gICAgbnVtQXJnczogbnVtQXJnc1xuICB9KTtcbiAgcmV0dXJuICcnO1xufTtcblxuZGVmaW5lTWFjcm8oXCJcXFxcbmV3Y29tbWFuZFwiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICByZXR1cm4gbWFjcm9zX25ld2NvbW1hbmQoY29udGV4dCwgZmFsc2UsIHRydWUpO1xufSk7XG5kZWZpbmVNYWNybyhcIlxcXFxyZW5ld2NvbW1hbmRcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgcmV0dXJuIG1hY3Jvc19uZXdjb21tYW5kKGNvbnRleHQsIHRydWUsIGZhbHNlKTtcbn0pO1xuZGVmaW5lTWFjcm8oXCJcXFxccHJvdmlkZWNvbW1hbmRcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgcmV0dXJuIG1hY3Jvc19uZXdjb21tYW5kKGNvbnRleHQsIHRydWUsIHRydWUpO1xufSk7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEdyb3VwaW5nXG4vLyBcXGxldFxcYmdyb3VwPXsgXFxsZXRcXGVncm91cD19XG5cbmRlZmluZU1hY3JvKFwiXFxcXGJncm91cFwiLCBcIntcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxlZ3JvdXBcIiwgXCJ9XCIpOyAvLyBTeW1ib2xzIGZyb20gbGF0ZXgubHR4OlxuLy8gXFxkZWZcXGxxe2B9XG4vLyBcXGRlZlxccnF7J31cbi8vIFxcZGVmIFxcYWEge1xcciBhfVxuLy8gXFxkZWYgXFxBQSB7XFxyIEF9XG5cbmRlZmluZU1hY3JvKFwiXFxcXGxxXCIsIFwiYFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJxXCIsIFwiJ1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGFhXCIsIFwiXFxcXHIgYVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEFBXCIsIFwiXFxcXHIgQVwiKTsgLy8gQ29weXJpZ2h0IChDKSBhbmQgcmVnaXN0ZXJlZCAoUikgc3ltYm9scy4gVXNlIHJhdyBzeW1ib2wgaW4gTWF0aE1MLlxuLy8gXFxEZWNsYXJlVGV4dENvbW1hbmREZWZhdWx0e1xcdGV4dGNvcHlyaWdodH17XFx0ZXh0Y2lyY2xlZHtjfX1cbi8vIFxcRGVjbGFyZVRleHRDb21tYW5kRGVmYXVsdHtcXHRleHRyZWdpc3RlcmVkfXtcXHRleHRjaXJjbGVkeyVcbi8vICAgICAgXFxjaGVja0BtYXRoZm9udHNcXGZvbnRzaXplXFxzZkBzaXplXFx6QFxcbWF0aEBmb250c2ZhbHNlXFxzZWxlY3Rmb250IFJ9fVxuLy8gXFxEZWNsYXJlUm9idXN0Q29tbWFuZHtcXGNvcHlyaWdodH17JVxuLy8gICAgXFxpZm1tb2Rle1xcbmZzc0B0ZXh0e1xcdGV4dGNvcHlyaWdodH19XFxlbHNlXFx0ZXh0Y29weXJpZ2h0XFxmaX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcdGV4dGNvcHlyaWdodFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcdGV4dGNpcmNsZWR7Y319e1xcXFxjaGFyYMKpfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNvcHlyaWdodFwiLCBcIlxcXFxUZXh0T3JNYXRoe1xcXFx0ZXh0Y29weXJpZ2h0fXtcXFxcdGV4dHtcXFxcdGV4dGNvcHlyaWdodH19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGV4dHJlZ2lzdGVyZWRcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXHRleHRjaXJjbGVke1xcXFxzY3JpcHRzaXplIFJ9fXtcXFxcY2hhcmDCrn1cIik7IC8vIENoYXJhY3RlcnMgb21pdHRlZCBmcm9tIFVuaWNvZGUgcmFuZ2UgMUQ0MDDigJMxRDdGRlxuXG5kZWZpbmVNYWNybyhcIlxcdTIxMkNcIiwgXCJcXFxcbWF0aHNjcntCfVwiKTsgLy8gc2NyaXB0XG5cbmRlZmluZU1hY3JvKFwiXFx1MjEzMFwiLCBcIlxcXFxtYXRoc2Nye0V9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMTMxXCIsIFwiXFxcXG1hdGhzY3J7Rn1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIxMEJcIiwgXCJcXFxcbWF0aHNjcntIfVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjExMFwiLCBcIlxcXFxtYXRoc2Nye0l9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMTEyXCIsIFwiXFxcXG1hdGhzY3J7TH1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIxMzNcIiwgXCJcXFxcbWF0aHNjcntNfVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjExQlwiLCBcIlxcXFxtYXRoc2Nye1J9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMTJEXCIsIFwiXFxcXG1hdGhmcmFre0N9XCIpOyAvLyBGcmFrdHVyXG5cbmRlZmluZU1hY3JvKFwiXFx1MjEwQ1wiLCBcIlxcXFxtYXRoZnJha3tIfVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjEyOFwiLCBcIlxcXFxtYXRoZnJha3tafVwiKTsgLy8gRGVmaW5lIFxcQmJiayB3aXRoIGEgbWFjcm8gdGhhdCB3b3JrcyBpbiBib3RoIEhUTUwgYW5kIE1hdGhNTC5cblxuZGVmaW5lTWFjcm8oXCJcXFxcQmJia1wiLCBcIlxcXFxCYmJ7a31cIik7IC8vIFVuaWNvZGUgbWlkZGxlIGRvdFxuLy8gVGhlIEthVGVYIGZvbnRzIGRvIG5vdCBjb250YWluIFUrMDBCNy4gSW5zdGVhZCwgXFxjZG90cCBkaXNwbGF5c1xuLy8gdGhlIGRvdCBhdCBVKzIyQzUgYW5kIGdpdmVzIGl0IHB1bmN0IHNwYWNpbmcuXG5cbmRlZmluZU1hY3JvKFwiXFx4QjdcIiwgXCJcXFxcY2RvdHBcIik7IC8vIFxcbGxhcCBhbmQgXFxybGFwIHJlbmRlciB0aGVpciBjb250ZW50cyBpbiB0ZXh0IG1vZGVcblxuZGVmaW5lTWFjcm8oXCJcXFxcbGxhcFwiLCBcIlxcXFxtYXRobGxhcHtcXFxcdGV4dHJteyMxfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxybGFwXCIsIFwiXFxcXG1hdGhybGFwe1xcXFx0ZXh0cm17IzF9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNsYXBcIiwgXCJcXFxcbWF0aGNsYXB7XFxcXHRleHRybXsjMX19XCIpOyAvLyBcXG5vdCBpcyBkZWZpbmVkIGJ5IGJhc2UvZm9udG1hdGgubHR4IHZpYVxuLy8gXFxEZWNsYXJlTWF0aFN5bWJvbHtcXG5vdH17XFxtYXRocmVsfXtzeW1ib2xzfXtcIjM2fVxuLy8gSXQncyB0aHVzIHRyZWF0ZWQgbGlrZSBhIFxcbWF0aHJlbCwgYnV0IGRlZmluZWQgYnkgYSBzeW1ib2wgdGhhdCBoYXMgemVyb1xuLy8gd2lkdGggYnV0IGV4dGVuZHMgdG8gdGhlIHJpZ2h0LiAgV2UgdXNlIFxccmxhcCB0byBnZXQgdGhhdCBzcGFjaW5nLlxuLy8gRm9yIE1hdGhNTCB3ZSB3cml0ZSBVKzAzMzggaGVyZS4gYnVpbGRNYXRoTUwuanMgd2lsbCB0aGVuIGRvIHRoZSBvdmVybGF5LlxuXG5kZWZpbmVNYWNybyhcIlxcXFxub3RcIiwgJ1xcXFxodG1sQG1hdGhtbHtcXFxcbWF0aHJlbHtcXFxcbWF0aHJsYXBcXFxcQG5vdH19e1xcXFxjaGFyXCIzMzh9Jyk7IC8vIE5lZ2F0ZWQgc3ltYm9scyBmcm9tIGJhc2UvZm9udG1hdGgubHR4OlxuLy8gXFxkZWZcXG5lcXtcXG5vdD19IFxcbGV0XFxuZT1cXG5lcVxuLy8gXFxEZWNsYXJlUm9idXN0Q29tbWFuZFxuLy8gICBcXG5vdGlue1xcbWF0aHJlbHtcXG1AdGhcXG1hdGhwYWxldHRlXFxjQG5jZWxcXGlufX1cbi8vIFxcZGVmXFxjQG5jZWwjMSMye1xcbUB0aFxcb29hbGlnbnskXFxoZmlsIzFcXG1rZXJuMW11L1xcaGZpbCRcXGNyY3IkIzEjMiR9fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxuZXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXG1hdGhyZWx7XFxcXG5vdD19fXtcXFxcbWF0aHJlbHtcXFxcY2hhcmDiiaB9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5lXCIsIFwiXFxcXG5lcVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjI2MFwiLCBcIlxcXFxuZXFcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxub3RpblwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcbWF0aHJlbHt7XFxcXGlufVxcXFxtYXRobGxhcHsvXFxcXG1za2lwMW11fX19XCIgKyBcIntcXFxcbWF0aHJlbHtcXFxcY2hhcmDiiIl9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjIwOVwiLCBcIlxcXFxub3RpblwiKTsgLy8gVW5pY29kZSBzdGFja2VkIHJlbGF0aW9uc1xuXG5kZWZpbmVNYWNybyhcIlxcdTIyNThcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVsez1cXFxca2VybnstMWVtfVxcXFxyYWlzZWJveHswLjRlbX17JFxcXFxzY3JpcHRzaXplXFxcXGZyb3duJH19XCIgKyBcIn17XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjI1OH19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjU5XCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxzdGFja3JlbHtcXFxcdGlueVxcXFx3ZWRnZX17PX19e1xcXFxtYXRocmVse1xcXFxjaGFyYFxcdTIyNTh9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjI1QVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcc3RhY2tyZWx7XFxcXHRpbnlcXFxcdmVlfXs9fX17XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjI1QX19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjVCXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxzdGFja3JlbHtcXFxcc2NyaXB0c2l6ZVxcXFxzdGFyfXs9fX1cIiArIFwie1xcXFxtYXRocmVse1xcXFxjaGFyYFxcdTIyNUJ9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjI1RFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcc3RhY2tyZWx7XFxcXHRpbnlcXFxcbWF0aHJte2RlZn19ez19fVwiICsgXCJ7XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjI1RH19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjVFXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxzdGFja3JlbHtcXFxcdGlueVxcXFxtYXRocm17bX19ez19fVwiICsgXCJ7XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjI1RX19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjVGXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxzdGFja3JlbHtcXFxcdGlueT99ez19fXtcXFxcbWF0aHJlbHtcXFxcY2hhcmBcXHUyMjVGfX1cIik7IC8vIE1pc2MgVW5pY29kZVxuXG5kZWZpbmVNYWNybyhcIlxcdTI3QzJcIiwgXCJcXFxccGVycFwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjAzQ1wiLCBcIlxcXFxtYXRoY2xvc2V7IVxcXFxta2Vybi0wLjhtdSF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjBDXCIsIFwiXFxcXG5vdG5pXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMzFDXCIsIFwiXFxcXHVsY29ybmVyXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMzFEXCIsIFwiXFxcXHVyY29ybmVyXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMzFFXCIsIFwiXFxcXGxsY29ybmVyXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMzFGXCIsIFwiXFxcXGxyY29ybmVyXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHhBOVwiLCBcIlxcXFxjb3B5cmlnaHRcIik7XG5kZWZpbmVNYWNybyhcIlxceEFFXCIsIFwiXFxcXHRleHRyZWdpc3RlcmVkXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHVGRTBGXCIsIFwiXFxcXHRleHRyZWdpc3RlcmVkXCIpOyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBMYVRlWF8yzrVcbi8vIFxcdmRvdHN7XFx2Ym94e1xcYmFzZWxpbmVza2lwNFxccEAgIFxcbGluZXNraXBsaW1pdFxcekBcbi8vIFxca2VybjZcXHBAXFxoYm94ey59XFxoYm94ey59XFxoYm94ey59fX1cbi8vIFdlJ2xsIGNhbGwgXFx2YXJ2ZG90cywgd2hpY2ggZ2V0cyBhIGdseXBoIGZyb20gc3ltYm9scy5qcy5cbi8vIFRoZSB6ZXJvLXdpZHRoIHJ1bGUgZ2V0cyB1cyBhbiBlcXVpdmFsZW50IHRvIHRoZSB2ZXJ0aWNhbCA2cHQga2Vybi5cblxuZGVmaW5lTWFjcm8oXCJcXFxcdmRvdHNcIiwgXCJcXFxcbWF0aG9yZHtcXFxcdmFydmRvdHNcXFxccnVsZXswcHR9ezE1cHR9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjJFRVwiLCBcIlxcXFx2ZG90c1wiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gYW1zbWF0aC5zdHlcbi8vIGh0dHA6Ly9taXJyb3JzLmNvbmNlcnRwYXNzLmNvbS90ZXgtYXJjaGl2ZS9tYWNyb3MvbGF0ZXgvcmVxdWlyZWQvYW1zbWF0aC9hbXNtYXRoLnBkZlxuLy8gSXRhbGljIEdyZWVrIGNhcGl0YWwgbGV0dGVycy4gIEFNUyBkZWZpbmVzIHRoZXNlIHdpdGggXFxEZWNsYXJlTWF0aFN5bWJvbCxcbi8vIGJ1dCB0aGV5IGFyZSBlcXVpdmFsZW50IHRvIFxcbWF0aGl0e1xcTGV0dGVyfS5cblxuZGVmaW5lTWFjcm8oXCJcXFxcdmFyR2FtbWFcIiwgXCJcXFxcbWF0aGl0e1xcXFxHYW1tYX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJEZWx0YVwiLCBcIlxcXFxtYXRoaXR7XFxcXERlbHRhfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhclRoZXRhXCIsIFwiXFxcXG1hdGhpdHtcXFxcVGhldGF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyTGFtYmRhXCIsIFwiXFxcXG1hdGhpdHtcXFxcTGFtYmRhfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhclhpXCIsIFwiXFxcXG1hdGhpdHtcXFxcWGl9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyUGlcIiwgXCJcXFxcbWF0aGl0e1xcXFxQaX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJTaWdtYVwiLCBcIlxcXFxtYXRoaXR7XFxcXFNpZ21hfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhclVwc2lsb25cIiwgXCJcXFxcbWF0aGl0e1xcXFxVcHNpbG9ufVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhclBoaVwiLCBcIlxcXFxtYXRoaXR7XFxcXFBoaX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJQc2lcIiwgXCJcXFxcbWF0aGl0e1xcXFxQc2l9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyT21lZ2FcIiwgXCJcXFxcbWF0aGl0e1xcXFxPbWVnYX1cIik7IC8vXFxuZXdjb21tYW5ke1xcc3Vic3RhY2t9WzFde1xcc3ViYXJyYXl7Y30jMVxcZW5kc3ViYXJyYXl9XG5cbmRlZmluZU1hY3JvKFwiXFxcXHN1YnN0YWNrXCIsIFwiXFxcXGJlZ2lue3N1YmFycmF5fXtjfSMxXFxcXGVuZHtzdWJhcnJheX1cIik7IC8vIFxccmVuZXdjb21tYW5ke1xcY29sb259e1xcbm9icmVha1xcbXNraXAybXVcXG1hdGhwdW5jdHt9XFxub25zY3JpcHRcbi8vIFxcbWtlcm4tXFx0aGlubXVza2lwezp9XFxtc2tpcDZtdXBsdXMxbXVcXHJlbGF4fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxjb2xvblwiLCBcIlxcXFxub2JyZWFrXFxcXG1za2lwMm11XFxcXG1hdGhwdW5jdHt9XCIgKyBcIlxcXFxtYXRoY2hvaWNle1xcXFxta2Vybi0zbXV9e1xcXFxta2Vybi0zbXV9e317fXs6fVxcXFxtc2tpcDZtdVwiKTsgLy8gXFxuZXdjb21tYW5ke1xcYm94ZWR9WzFde1xcZmJveHtcXG1AdGgkXFxkaXNwbGF5c3R5bGUjMSR9fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxib3hlZFwiLCBcIlxcXFxmYm94eyRcXFxcZGlzcGxheXN0eWxleyMxfSR9XCIpOyAvLyBcXGRlZlxcaWZme1xcRE9UU0JcXDtcXExvbmdsZWZ0cmlnaHRhcnJvd1xcO31cbi8vIFxcZGVmXFxpbXBsaWVze1xcRE9UU0JcXDtcXExvbmdyaWdodGFycm93XFw7fVxuLy8gXFxkZWZcXGltcGxpZWRieXtcXERPVFNCXFw7XFxMb25nbGVmdGFycm93XFw7fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxpZmZcIiwgXCJcXFxcRE9UU0JcXFxcO1xcXFxMb25nbGVmdHJpZ2h0YXJyb3dcXFxcO1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGltcGxpZXNcIiwgXCJcXFxcRE9UU0JcXFxcO1xcXFxMb25ncmlnaHRhcnJvd1xcXFw7XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaW1wbGllZGJ5XCIsIFwiXFxcXERPVFNCXFxcXDtcXFxcTG9uZ2xlZnRhcnJvd1xcXFw7XCIpOyAvLyBBTVNNYXRoJ3MgYXV0b21hdGljIFxcZG90cywgYmFzZWQgb24gXFxtZG90c0BAIG1hY3JvLlxuXG52YXIgZG90c0J5VG9rZW4gPSB7XG4gICcsJzogJ1xcXFxkb3RzYycsXG4gICdcXFxcbm90JzogJ1xcXFxkb3RzYicsXG4gIC8vIFxca2V5YmluQCBjaGVja3MgZm9yIHRoZSBmb2xsb3dpbmc6XG4gICcrJzogJ1xcXFxkb3RzYicsXG4gICc9JzogJ1xcXFxkb3RzYicsXG4gICc8JzogJ1xcXFxkb3RzYicsXG4gICc+JzogJ1xcXFxkb3RzYicsXG4gICctJzogJ1xcXFxkb3RzYicsXG4gICcqJzogJ1xcXFxkb3RzYicsXG4gICc6JzogJ1xcXFxkb3RzYicsXG4gIC8vIFN5bWJvbHMgd2hvc2UgZGVmaW5pdGlvbiBzdGFydHMgd2l0aCBcXERPVFNCOlxuICAnXFxcXERPVFNCJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcY29wcm9kJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcYmlndmVlJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcYmlnd2VkZ2UnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWd1cGx1cyc6ICdcXFxcZG90c2InLFxuICAnXFxcXGJpZ2NhcCc6ICdcXFxcZG90c2InLFxuICAnXFxcXGJpZ2N1cCc6ICdcXFxcZG90c2InLFxuICAnXFxcXHByb2QnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxzdW0nOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWdvdGltZXMnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWdvcGx1cyc6ICdcXFxcZG90c2InLFxuICAnXFxcXGJpZ29kb3QnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWdzcWN1cCc6ICdcXFxcZG90c2InLFxuICAnXFxcXEFuZCc6ICdcXFxcZG90c2InLFxuICAnXFxcXGxvbmdyaWdodGFycm93JzogJ1xcXFxkb3RzYicsXG4gICdcXFxcTG9uZ3JpZ2h0YXJyb3cnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxsb25nbGVmdGFycm93JzogJ1xcXFxkb3RzYicsXG4gICdcXFxcTG9uZ2xlZnRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXGxvbmdsZWZ0cmlnaHRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXExvbmdsZWZ0cmlnaHRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXG1hcHN0byc6ICdcXFxcZG90c2InLFxuICAnXFxcXGxvbmdtYXBzdG8nOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxob29rcmlnaHRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXGRvdGVxJzogJ1xcXFxkb3RzYicsXG4gIC8vIFN5bWJvbHMgd2hvc2UgZGVmaW5pdGlvbiBzdGFydHMgd2l0aCBcXG1hdGhiaW46XG4gICdcXFxcbWF0aGJpbic6ICdcXFxcZG90c2InLFxuICAvLyBTeW1ib2xzIHdob3NlIGRlZmluaXRpb24gc3RhcnRzIHdpdGggXFxtYXRocmVsOlxuICAnXFxcXG1hdGhyZWwnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxyZWxiYXInOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxSZWxiYXInOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFx4cmlnaHRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXHhsZWZ0YXJyb3cnOiAnXFxcXGRvdHNiJyxcbiAgLy8gU3ltYm9scyB3aG9zZSBkZWZpbml0aW9uIHN0YXJ0cyB3aXRoIFxcRE9UU0k6XG4gICdcXFxcRE9UU0knOiAnXFxcXGRvdHNpJyxcbiAgJ1xcXFxpbnQnOiAnXFxcXGRvdHNpJyxcbiAgJ1xcXFxvaW50JzogJ1xcXFxkb3RzaScsXG4gICdcXFxcaWludCc6ICdcXFxcZG90c2knLFxuICAnXFxcXGlpaW50JzogJ1xcXFxkb3RzaScsXG4gICdcXFxcaWlpaW50JzogJ1xcXFxkb3RzaScsXG4gICdcXFxcaWRvdHNpbnQnOiAnXFxcXGRvdHNpJyxcbiAgLy8gU3ltYm9scyB3aG9zZSBkZWZpbml0aW9uIHN0YXJ0cyB3aXRoIFxcRE9UU1g6XG4gICdcXFxcRE9UU1gnOiAnXFxcXGRvdHN4J1xufTtcbmRlZmluZU1hY3JvKFwiXFxcXGRvdHNcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgLy8gVE9ETzogSWYgdXNlZCBpbiB0ZXh0IG1vZGUsIHNob3VsZCBleHBhbmQgdG8gXFx0ZXh0ZWxsaXBzaXMuXG4gIC8vIEhvd2V2ZXIsIGluIEthVGVYLCBcXHRleHRlbGxpcHNpcyBhbmQgXFxsZG90cyBiZWhhdmUgdGhlIHNhbWVcbiAgLy8gKGluIHRleHQgbW9kZSksIGFuZCBpdCdzIHVubGlrZWx5IHdlJ2Qgc2VlIGFueSBvZiB0aGUgbWF0aCBjb21tYW5kc1xuICAvLyB0aGF0IGFmZmVjdCB0aGUgYmVoYXZpb3Igb2YgXFxkb3RzIHdoZW4gaW4gdGV4dCBtb2RlLiAgU28gZmluZSBmb3Igbm93XG4gIC8vICh1bnRpbCB3ZSBzdXBwb3J0IFxcaWZtbW9kZSAuLi4gXFxlbHNlIC4uLiBcXGZpKS5cbiAgdmFyIHRoZWRvdHMgPSAnXFxcXGRvdHNvJztcbiAgdmFyIG5leHQgPSBjb250ZXh0LmV4cGFuZEFmdGVyRnV0dXJlKCkudGV4dDtcblxuICBpZiAobmV4dCBpbiBkb3RzQnlUb2tlbikge1xuICAgIHRoZWRvdHMgPSBkb3RzQnlUb2tlbltuZXh0XTtcbiAgfSBlbHNlIGlmIChuZXh0LnN1YnN0cigwLCA0KSA9PT0gJ1xcXFxub3QnKSB7XG4gICAgdGhlZG90cyA9ICdcXFxcZG90c2InO1xuICB9IGVsc2UgaWYgKG5leHQgaW4gc3JjX3N5bWJvbHMubWF0aCkge1xuICAgIGlmICh1dGlscy5jb250YWlucyhbJ2JpbicsICdyZWwnXSwgc3JjX3N5bWJvbHMubWF0aFtuZXh0XS5ncm91cCkpIHtcbiAgICAgIHRoZWRvdHMgPSAnXFxcXGRvdHNiJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhlZG90cztcbn0pO1xudmFyIHNwYWNlQWZ0ZXJEb3RzID0ge1xuICAvLyBcXHJpZ2h0ZGVsaW1AIGNoZWNrcyBmb3IgdGhlIGZvbGxvd2luZzpcbiAgJyknOiB0cnVlLFxuICAnXSc6IHRydWUsXG4gICdcXFxccmJyYWNrJzogdHJ1ZSxcbiAgJ1xcXFx9JzogdHJ1ZSxcbiAgJ1xcXFxyYnJhY2UnOiB0cnVlLFxuICAnXFxcXHJhbmdsZSc6IHRydWUsXG4gICdcXFxccmNlaWwnOiB0cnVlLFxuICAnXFxcXHJmbG9vcic6IHRydWUsXG4gICdcXFxccmdyb3VwJzogdHJ1ZSxcbiAgJ1xcXFxybW91c3RhY2hlJzogdHJ1ZSxcbiAgJ1xcXFxyaWdodCc6IHRydWUsXG4gICdcXFxcYmlncic6IHRydWUsXG4gICdcXFxcYmlnZ3InOiB0cnVlLFxuICAnXFxcXEJpZ3InOiB0cnVlLFxuICAnXFxcXEJpZ2dyJzogdHJ1ZSxcbiAgLy8gXFxleHRyYUAgYWxzbyB0ZXN0cyBmb3IgdGhlIGZvbGxvd2luZzpcbiAgJyQnOiB0cnVlLFxuICAvLyBcXGV4dHJhcEAgY2hlY2tzIGZvciB0aGUgZm9sbG93aW5nOlxuICAnOyc6IHRydWUsXG4gICcuJzogdHJ1ZSxcbiAgJywnOiB0cnVlXG59O1xuZGVmaW5lTWFjcm8oXCJcXFxcZG90c29cIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgdmFyIG5leHQgPSBjb250ZXh0LmZ1dHVyZSgpLnRleHQ7XG5cbiAgaWYgKG5leHQgaW4gc3BhY2VBZnRlckRvdHMpIHtcbiAgICByZXR1cm4gXCJcXFxcbGRvdHNcXFxcLFwiO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIlxcXFxsZG90c1wiO1xuICB9XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXGRvdHNjXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciBuZXh0ID0gY29udGV4dC5mdXR1cmUoKS50ZXh0OyAvLyBcXGRvdHNjIHVzZXMgXFxleHRyYUAgYnV0IG5vdCBcXGV4dHJhcEAsIGluc3RlYWQgc3BlY2lhbGx5IGNoZWNraW5nIGZvclxuICAvLyAnOycgYW5kICcuJywgYnV0IGRvZXNuJ3QgY2hlY2sgZm9yICcsJy5cblxuICBpZiAobmV4dCBpbiBzcGFjZUFmdGVyRG90cyAmJiBuZXh0ICE9PSAnLCcpIHtcbiAgICByZXR1cm4gXCJcXFxcbGRvdHNcXFxcLFwiO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIlxcXFxsZG90c1wiO1xuICB9XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXGNkb3RzXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciBuZXh0ID0gY29udGV4dC5mdXR1cmUoKS50ZXh0O1xuXG4gIGlmIChuZXh0IGluIHNwYWNlQWZ0ZXJEb3RzKSB7XG4gICAgcmV0dXJuIFwiXFxcXEBjZG90c1xcXFwsXCI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwiXFxcXEBjZG90c1wiO1xuICB9XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXGRvdHNiXCIsIFwiXFxcXGNkb3RzXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZG90c21cIiwgXCJcXFxcY2RvdHNcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxkb3RzaVwiLCBcIlxcXFwhXFxcXGNkb3RzXCIpOyAvLyBhbXNtYXRoIGRvZXNuJ3QgYWN0dWFsbHkgZGVmaW5lIFxcZG90c3gsIGJ1dCBcXGRvdHMgZm9sbG93ZWQgYnkgYSBtYWNyb1xuLy8gc3RhcnRpbmcgd2l0aCBcXERPVFNYIGltcGxpZXMgXFxkb3RzbywgYW5kIHRoZW4gXFxleHRyYUAgZGV0ZWN0cyB0aGlzIGNhc2Vcbi8vIGFuZCBmb3JjZXMgdGhlIGFkZGVkIGBcXCxgLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxkb3RzeFwiLCBcIlxcXFxsZG90c1xcXFwsXCIpOyAvLyBcXGxldFxcRE9UU0lcXHJlbGF4XG4vLyBcXGxldFxcRE9UU0JcXHJlbGF4XG4vLyBcXGxldFxcRE9UU1hcXHJlbGF4XG5cbmRlZmluZU1hY3JvKFwiXFxcXERPVFNJXCIsIFwiXFxcXHJlbGF4XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcRE9UU0JcIiwgXCJcXFxccmVsYXhcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxET1RTWFwiLCBcIlxcXFxyZWxheFwiKTsgLy8gU3BhY2luZywgYmFzZWQgb24gYW1zbWF0aC5zdHkncyBvdmVycmlkZSBvZiBMYVRlWCBkZWZhdWx0c1xuLy8gXFxEZWNsYXJlUm9idXN0Q29tbWFuZHtcXHRtc3BhY2V9WzNdeyVcbi8vICAgXFxpZm1tb2RlXFxtc2tpcCMxIzJcXGVsc2VcXGtlcm4jMSMzXFxmaVxccmVsYXh9XG5cbmRlZmluZU1hY3JvKFwiXFxcXHRtc3BhY2VcIiwgXCJcXFxcVGV4dE9yTWF0aHtcXFxca2VybiMxIzN9e1xcXFxtc2tpcCMxIzJ9XFxcXHJlbGF4XCIpOyAvLyBcXHJlbmV3Y29tbWFuZHtcXCx9e1xcdG1zcGFjZStcXHRoaW5tdXNraXB7LjE2NjdlbX19XG4vLyBUT0RPOiBtYXRoIG1vZGUgc2hvdWxkIHVzZSBcXHRoaW5tdXNraXBcblxuZGVmaW5lTWFjcm8oXCJcXFxcLFwiLCBcIlxcXFx0bXNwYWNlK3szbXV9ey4xNjY3ZW19XCIpOyAvLyBcXGxldFxcdGhpbnNwYWNlXFwsXG5cbmRlZmluZU1hY3JvKFwiXFxcXHRoaW5zcGFjZVwiLCBcIlxcXFwsXCIpOyAvLyBcXGRlZlxcPntcXG1za2lwXFxtZWRtdXNraXB9XG4vLyBcXHJlbmV3Y29tbWFuZHtcXDp9e1xcdG1zcGFjZStcXG1lZG11c2tpcHsuMjIyMmVtfX1cbi8vIFRPRE86IFxcPiBhbmQgbWF0aCBtb2RlIG9mIFxcOiBzaG91bGQgdXNlIFxcbWVkbXVza2lwID0gNG11IHBsdXMgMm11IG1pbnVzIDRtdVxuXG5kZWZpbmVNYWNybyhcIlxcXFw+XCIsIFwiXFxcXG1za2lwezRtdX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFw6XCIsIFwiXFxcXHRtc3BhY2UrezRtdX17LjIyMjJlbX1cIik7IC8vIFxcbGV0XFxtZWRzcGFjZVxcOlxuXG5kZWZpbmVNYWNybyhcIlxcXFxtZWRzcGFjZVwiLCBcIlxcXFw6XCIpOyAvLyBcXHJlbmV3Y29tbWFuZHtcXDt9e1xcdG1zcGFjZStcXHRoaWNrbXVza2lwey4yNzc3ZW19fVxuLy8gVE9ETzogbWF0aCBtb2RlIHNob3VsZCB1c2UgXFx0aGlja211c2tpcCA9IDVtdSBwbHVzIDVtdVxuXG5kZWZpbmVNYWNybyhcIlxcXFw7XCIsIFwiXFxcXHRtc3BhY2UrezVtdX17LjI3NzdlbX1cIik7IC8vIFxcbGV0XFx0aGlja3NwYWNlXFw7XG5cbmRlZmluZU1hY3JvKFwiXFxcXHRoaWNrc3BhY2VcIiwgXCJcXFxcO1wiKTsgLy8gXFxyZW5ld2NvbW1hbmR7XFwhfXtcXHRtc3BhY2UtXFx0aGlubXVza2lwey4xNjY3ZW19fVxuLy8gVE9ETzogbWF0aCBtb2RlIHNob3VsZCB1c2UgXFx0aGlubXVza2lwXG5cbmRlZmluZU1hY3JvKFwiXFxcXCFcIiwgXCJcXFxcdG1zcGFjZS17M211fXsuMTY2N2VtfVwiKTsgLy8gXFxsZXRcXG5lZ3RoaW5zcGFjZVxcIVxuXG5kZWZpbmVNYWNybyhcIlxcXFxuZWd0aGluc3BhY2VcIiwgXCJcXFxcIVwiKTsgLy8gXFxuZXdjb21tYW5ke1xcbmVnbWVkc3BhY2V9e1xcdG1zcGFjZS1cXG1lZG11c2tpcHsuMjIyMmVtfX1cbi8vIFRPRE86IG1hdGggbW9kZSBzaG91bGQgdXNlIFxcbWVkbXVza2lwXG5cbmRlZmluZU1hY3JvKFwiXFxcXG5lZ21lZHNwYWNlXCIsIFwiXFxcXHRtc3BhY2UtezRtdX17LjIyMjJlbX1cIik7IC8vIFxcbmV3Y29tbWFuZHtcXG5lZ3RoaWNrc3BhY2V9e1xcdG1zcGFjZS1cXHRoaWNrbXVza2lwey4yNzc3ZW19fVxuLy8gVE9ETzogbWF0aCBtb2RlIHNob3VsZCB1c2UgXFx0aGlja211c2tpcFxuXG5kZWZpbmVNYWNybyhcIlxcXFxuZWd0aGlja3NwYWNlXCIsIFwiXFxcXHRtc3BhY2UtezVtdX17LjI3N2VtfVwiKTsgLy8gXFxkZWZcXGVuc3BhY2V7XFxrZXJuLjVlbSB9XG5cbmRlZmluZU1hY3JvKFwiXFxcXGVuc3BhY2VcIiwgXCJcXFxca2Vybi41ZW0gXCIpOyAvLyBcXGRlZlxcZW5za2lwe1xcaHNraXAuNWVtXFxyZWxheH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcZW5za2lwXCIsIFwiXFxcXGhza2lwLjVlbVxcXFxyZWxheFwiKTsgLy8gXFxkZWZcXHF1YWR7XFxoc2tpcDFlbVxccmVsYXh9XG5cbmRlZmluZU1hY3JvKFwiXFxcXHF1YWRcIiwgXCJcXFxcaHNraXAxZW1cXFxccmVsYXhcIik7IC8vIFxcZGVmXFxxcXVhZHtcXGhza2lwMmVtXFxyZWxheH1cblxuZGVmaW5lTWFjcm8oXCJcXFxccXF1YWRcIiwgXCJcXFxcaHNraXAyZW1cXFxccmVsYXhcIik7IC8vIFxcdGFnQGluQGRpc3BsYXkgZm9ybSBvZiBcXHRhZ1xuXG5kZWZpbmVNYWNybyhcIlxcXFx0YWdcIiwgXCJcXFxcQGlmc3RhclxcXFx0YWdAbGl0ZXJhbFxcXFx0YWdAcGFyZW5cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx0YWdAcGFyZW5cIiwgXCJcXFxcdGFnQGxpdGVyYWx7KHsjMX0pfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHRhZ0BsaXRlcmFsXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIGlmIChjb250ZXh0Lm1hY3Jvcy5nZXQoXCJcXFxcZGZAdGFnXCIpKSB7XG4gICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiTXVsdGlwbGUgXFxcXHRhZ1wiKTtcbiAgfVxuXG4gIHJldHVybiBcIlxcXFxnZGVmXFxcXGRmQHRhZ3tcXFxcdGV4dHsjMX19XCI7XG59KTsgLy8gXFxyZW5ld2NvbW1hbmR7XFxibW9kfXtcXG5vbnNjcmlwdFxcbXNraXAtXFxtZWRtdXNraXBcXG1rZXJuNW11XFxtYXRoYmluXG4vLyAgIHtcXG9wZXJhdG9yQGZvbnQgbW9kfVxccGVuYWx0eTkwMFxuLy8gICBcXG1rZXJuNW11XFxub25zY3JpcHRcXG1za2lwLVxcbWVkbXVza2lwfVxuLy8gXFxuZXdjb21tYW5ke1xccG9kfVsxXXtcXGFsbG93YnJlYWtcbi8vICAgXFxpZkBkaXNwbGF5XFxta2VybjE4bXVcXGVsc2VcXG1rZXJuOG11XFxmaSgjMSl9XG4vLyBcXHJlbmV3Y29tbWFuZHtcXHBtb2R9WzFde1xccG9ke3tcXG9wZXJhdG9yQGZvbnQgbW9kfVxcbWtlcm42bXUjMX19XG4vLyBcXG5ld2NvbW1hbmR7XFxtb2R9WzFde1xcYWxsb3dicmVha1xcaWZAZGlzcGxheVxcbWtlcm4xOG11XG4vLyAgIFxcZWxzZVxcbWtlcm4xMm11XFxmaXtcXG9wZXJhdG9yQGZvbnQgbW9kfVxcLFxcLCMxfVxuLy8gVE9ETzogbWF0aCBtb2RlIHNob3VsZCB1c2UgXFxtZWRtdXNraXAgPSA0bXUgcGx1cyAybXUgbWludXMgNG11XG5cbmRlZmluZU1hY3JvKFwiXFxcXGJtb2RcIiwgXCJcXFxcbWF0aGNob2ljZXtcXFxcbXNraXAxbXV9e1xcXFxtc2tpcDFtdX17XFxcXG1za2lwNW11fXtcXFxcbXNraXA1bXV9XCIgKyBcIlxcXFxtYXRoYmlue1xcXFxybSBtb2R9XCIgKyBcIlxcXFxtYXRoY2hvaWNle1xcXFxtc2tpcDFtdX17XFxcXG1za2lwMW11fXtcXFxcbXNraXA1bXV9e1xcXFxtc2tpcDVtdX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwb2RcIiwgXCJcXFxcYWxsb3dicmVha1wiICsgXCJcXFxcbWF0aGNob2ljZXtcXFxcbWtlcm4xOG11fXtcXFxcbWtlcm44bXV9e1xcXFxta2VybjhtdX17XFxcXG1rZXJuOG11fSgjMSlcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwbW9kXCIsIFwiXFxcXHBvZHt7XFxcXHJtIG1vZH1cXFxcbWtlcm42bXUjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtb2RcIiwgXCJcXFxcYWxsb3dicmVha1wiICsgXCJcXFxcbWF0aGNob2ljZXtcXFxcbWtlcm4xOG11fXtcXFxcbWtlcm4xMm11fXtcXFxcbWtlcm4xMm11fXtcXFxcbWtlcm4xMm11fVwiICsgXCJ7XFxcXHJtIG1vZH1cXFxcLFxcXFwsIzFcIik7IC8vIFxccG1iICAgIC0tICAgQSBzaW11bGF0aW9uIG9mIGJvbGQuXG4vLyBUaGUgdmVyc2lvbiBpbiBhbWJzeS5zdHkgd29ya3MgYnkgdHlwZXNldHRpbmcgdGhyZWUgY29waWVzIG9mIHRoZSBhcmd1bWVudFxuLy8gd2l0aCBzbWFsbCBvZmZzZXRzLiBXZSB1c2UgdHdvIGNvcGllcy4gV2Ugb21pdCB0aGUgdmVydGljYWwgb2Zmc2V0IGJlY2F1c2Vcbi8vIG9mIHJlbmRlcmluZyBwcm9ibGVtcyB0aGF0IG1ha2VWTGlzdCBlbmNvdW50ZXJzIGluIFNhZmFyaS5cblxuZGVmaW5lTWFjcm8oXCJcXFxccG1iXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcQGJpbnJlbHsjMX17XFxcXG1hdGhybGFweyMxfVxcXFxrZXJuMC41cHgjMX19XCIgKyBcIntcXFxcbWF0aGJmeyMxfX1cIik7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIExhVGVYIHNvdXJjZTJlXG4vLyBcXFxcIGRlZmF1bHRzIHRvIFxcbmV3bGluZSwgYnV0IGNoYW5nZXMgdG8gXFxjciB3aXRoaW4gYXJyYXkgZW52aXJvbm1lbnRcblxuZGVmaW5lTWFjcm8oXCJcXFxcXFxcXFwiLCBcIlxcXFxuZXdsaW5lXCIpOyAvLyBcXGRlZlxcVGVYe1RcXGtlcm4tLjE2NjdlbVxcbG93ZXIuNWV4XFxoYm94e0V9XFxrZXJuLS4xMjVlbVhcXEB9XG4vLyBUT0RPOiBEb2Vzbid0IG5vcm1hbGx5IHdvcmsgaW4gbWF0aCBtb2RlIGJlY2F1c2UgXFxAIGZhaWxzLiAgS2FUZVggZG9lc24ndFxuLy8gc3VwcG9ydCBcXEAgeWV0LCBzbyB0aGF0J3Mgb21pdHRlZCwgYW5kIHdlIGFkZCBcXHRleHQgc28gdGhhdCB0aGUgcmVzdWx0XG4vLyBkb2Vzbid0IGxvb2sgZnVubnkgaW4gbWF0aCBtb2RlLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxUZVhcIiwgXCJcXFxcdGV4dHJte1xcXFxodG1sQG1hdGhtbHtcIiArIFwiVFxcXFxrZXJuLS4xNjY3ZW1cXFxccmFpc2Vib3h7LS41ZXh9e0V9XFxcXGtlcm4tLjEyNWVtWFwiICsgXCJ9e1RlWH19XCIpOyAvLyBcXERlY2xhcmVSb2J1c3RDb21tYW5ke1xcTGFUZVh9e0xcXGtlcm4tLjM2ZW0lXG4vLyAgICAgICAgIHtcXHNib3hcXHpAIFQlXG4vLyAgICAgICAgICBcXHZib3ggdG9cXGh0XFx6QHtcXGhib3h7XFxjaGVja0BtYXRoZm9udHNcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcZm9udHNpemVcXHNmQHNpemVcXHpAXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG1hdGhAZm9udHNmYWxzZVxcc2VsZWN0Zm9udFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQX0lXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICBcXHZzc30lXG4vLyAgICAgICAgIH0lXG4vLyAgICAgICAgIFxca2Vybi0uMTVlbSVcbi8vICAgICAgICAgXFxUZVh9XG4vLyBUaGlzIGNvZGUgYWxpZ25zIHRoZSB0b3Agb2YgdGhlIEEgd2l0aCB0aGUgVCAoZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgVGVYJ3Ncbi8vIGJveGVzLCB0aG91Z2ggdmlzdWFsbHkgdGhlIEEgYXBwZWFycyB0byBleHRlbmQgYWJvdmUgc2xpZ2h0bHkpLlxuLy8gV2UgY29tcHV0ZSB0aGUgY29ycmVzcG9uZGluZyBcXHJhaXNlYm94IHdoZW4gQSBpcyByZW5kZXJlZCBpbiBcXG5vcm1hbHNpemVcbi8vIFxcc2NyaXB0c3R5bGUsIHdoaWNoIGhhcyBhIHNjYWxlIGZhY3RvciBvZiAwLjcgKHNlZSBPcHRpb25zLmpzKS5cblxudmFyIGxhdGV4UmFpc2VBID0gZm9udE1ldHJpY3NEYXRhWydNYWluLVJlZ3VsYXInXVtcIlRcIi5jaGFyQ29kZUF0KDApXVsxXSAtIDAuNyAqIGZvbnRNZXRyaWNzRGF0YVsnTWFpbi1SZWd1bGFyJ11bXCJBXCIuY2hhckNvZGVBdCgwKV1bMV0gKyBcImVtXCI7XG5kZWZpbmVNYWNybyhcIlxcXFxMYVRlWFwiLCBcIlxcXFx0ZXh0cm17XFxcXGh0bWxAbWF0aG1se1wiICsgKFwiTFxcXFxrZXJuLS4zNmVtXFxcXHJhaXNlYm94e1wiICsgbGF0ZXhSYWlzZUEgKyBcIn17XFxcXHNjcmlwdHN0eWxlIEF9XCIpICsgXCJcXFxca2Vybi0uMTVlbVxcXFxUZVh9e0xhVGVYfX1cIik7IC8vIE5ldyBLYVRlWCBsb2dvIGJhc2VkIG9uIHR3ZWFraW5nIExhVGVYIGxvZ29cblxuZGVmaW5lTWFjcm8oXCJcXFxcS2FUZVhcIiwgXCJcXFxcdGV4dHJte1xcXFxodG1sQG1hdGhtbHtcIiArIChcIktcXFxca2Vybi0uMTdlbVxcXFxyYWlzZWJveHtcIiArIGxhdGV4UmFpc2VBICsgXCJ9e1xcXFxzY3JpcHRzdHlsZSBBfVwiKSArIFwiXFxcXGtlcm4tLjE1ZW1cXFxcVGVYfXtLYVRlWH19XCIpOyAvLyBcXERlY2xhcmVSb2J1c3RDb21tYW5kXFxoc3BhY2V7XFxAaWZzdGFyXFxAaHNwYWNlclxcQGhzcGFjZX1cbi8vIFxcZGVmXFxAaHNwYWNlIzF7XFxoc2tpcCAgIzFcXHJlbGF4fVxuLy8gXFxkZWZcXEBoc3BhY2VyIzF7XFx2cnVsZSBcXEB3aWR0aFxcekBcXG5vYnJlYWtcbi8vICAgICAgICAgICAgICAgICBcXGhza2lwICMxXFxoc2tpcCBcXHpAc2tpcH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcaHNwYWNlXCIsIFwiXFxcXEBpZnN0YXJcXFxcQGhzcGFjZXJcXFxcQGhzcGFjZVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEBoc3BhY2VcIiwgXCJcXFxcaHNraXAgIzFcXFxccmVsYXhcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxAaHNwYWNlclwiLCBcIlxcXFxydWxlezBwdH17MHB0fVxcXFxoc2tpcCAjMVxcXFxyZWxheFwiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gbWF0aHRvb2xzLnN0eVxuLy9cXHByb3ZpZGVjb21tYW5kXFxvcmRpbmFyeWNvbG9uezp9XG5cbmRlZmluZU1hY3JvKFwiXFxcXG9yZGluYXJ5Y29sb25cIiwgXCI6XCIpOyAvL1xcZGVmXFx2Y2VudGNvbG9ue1xcbWF0aHJlbHtcXG1hdGhvcFxcb3JkaW5hcnljb2xvbn19XG4vL1RPRE8oZWRlbWFpbmUpOiBOb3QgeWV0IGNlbnRlcmVkLiBGaXggdmlhIFxccmFpc2Vib3ggb3IgIzcyNlxuXG5kZWZpbmVNYWNybyhcIlxcXFx2Y2VudGNvbG9uXCIsIFwiXFxcXG1hdGhyZWx7XFxcXG1hdGhvcFxcXFxvcmRpbmFyeWNvbG9ufVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGRibGNvbG9ue1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLS45bXV9XFx2Y2VudGNvbG9ufVxuXG5kZWZpbmVNYWNybyhcIlxcXFxkYmxjb2xvblwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXHZjZW50Y29sb25cXFxcbWF0aHJlbHtcXFxcbWtlcm4tLjltdX1cXFxcdmNlbnRjb2xvbn19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjIyMzd9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGNvbG9uZXFxe1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fT19XG5cbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uZXFxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHtcXFxcdmNlbnRjb2xvblxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX09fX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjI1NH19XCIpOyAvLyDiiZRcbi8vIFxccHJvdmlkZWNvbW1hbmQqXFxDb2xvbmVxcXtcXGRibGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9PX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcQ29sb25lcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFxkYmxjb2xvblxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX09fX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjIzN1xcXFxjaGFyXFxcIjNkfX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxjb2xvbmVxe1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcbWF0aHJlbHstfX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25lcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXHZjZW50Y29sb25cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXG1hdGhyZWx7LX19fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIzYVxcXFxjaGFyXFxcIjIyMTJ9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXENvbG9uZXF7XFxkYmxjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcbWF0aHJlbHstfX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcQ29sb25lcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXGRibGNvbG9uXFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxtYXRocmVsey19fX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjIzN1xcXFxjaGFyXFxcIjIyMTJ9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGVxcWNvbG9uez1cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXHZjZW50Y29sb259XG5cbmRlZmluZU1hY3JvKFwiXFxcXGVxcWNvbG9uXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHs9XFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFx2Y2VudGNvbG9ufX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjI1NX19XCIpOyAvLyDiiZVcbi8vIFxccHJvdmlkZWNvbW1hbmQqXFxFcXFjb2xvbns9XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxkYmxjb2xvbn1cblxuZGVmaW5lTWFjcm8oXCJcXFxcRXFxY29sb25cIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVsez1cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXGRibGNvbG9ufX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiM2RcXFxcY2hhclxcXCIyMjM3fX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxlcWNvbG9ue1xcbWF0aHJlbHstfVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcdmNlbnRjb2xvbn1cblxuZGVmaW5lTWFjcm8oXCJcXFxcZXFjb2xvblwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXG1hdGhyZWx7LX1cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXHZjZW50Y29sb259fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMjM5fX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxFcWNvbG9ue1xcbWF0aHJlbHstfVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcZGJsY29sb259XG5cbmRlZmluZU1hY3JvKFwiXFxcXEVxY29sb25cIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFxtYXRocmVsey19XFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxkYmxjb2xvbn19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjIyMTJcXFxcY2hhclxcXCIyMjM3fX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxjb2xvbmFwcHJveHtcXHZjZW50Y29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXGFwcHJveH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25hcHByb3hcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFx2Y2VudGNvbG9uXFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxhcHByb3h9fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIzYVxcXFxjaGFyXFxcIjIyNDh9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXENvbG9uYXBwcm94e1xcZGJsY29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXGFwcHJveH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcQ29sb25hcHByb3hcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFxkYmxjb2xvblxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcYXBwcm94fX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjIzN1xcXFxjaGFyXFxcIjIyNDh9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGNvbG9uc2lte1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcc2ltfVxuXG5kZWZpbmVNYWNybyhcIlxcXFxjb2xvbnNpbVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXHZjZW50Y29sb25cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXHNpbX19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjNhXFxcXGNoYXJcXFwiMjIzY319XCIpOyAvLyBcXHByb3ZpZGVjb21tYW5kKlxcQ29sb25zaW17XFxkYmxjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcc2ltfVxuXG5kZWZpbmVNYWNybyhcIlxcXFxDb2xvbnNpbVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXGRibGNvbG9uXFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxzaW19fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMjM3XFxcXGNoYXJcXFwiMjIzY319XCIpOyAvLyBTb21lIFVuaWNvZGUgY2hhcmFjdGVycyBhcmUgaW1wbGVtZW50ZWQgd2l0aCBtYWNyb3MgdG8gbWF0aHRvb2xzIGZ1bmN0aW9ucy5cblxuZGVmaW5lTWFjcm8oXCJcXHUyMjM3XCIsIFwiXFxcXGRibGNvbG9uXCIpOyAvLyA6OlxuXG5kZWZpbmVNYWNybyhcIlxcdTIyMzlcIiwgXCJcXFxcZXFjb2xvblwiKTsgLy8gLTpcblxuZGVmaW5lTWFjcm8oXCJcXHUyMjU0XCIsIFwiXFxcXGNvbG9uZXFxXCIpOyAvLyA6PVxuXG5kZWZpbmVNYWNybyhcIlxcdTIyNTVcIiwgXCJcXFxcZXFxY29sb25cIik7IC8vID06XG5cbmRlZmluZU1hY3JvKFwiXFx1MkE3NFwiLCBcIlxcXFxDb2xvbmVxcVwiKTsgLy8gOjo9XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBjb2xvbmVxdWFscy5zdHlcbi8vIEFsdGVybmF0ZSBuYW1lcyBmb3IgbWF0aHRvb2xzJ3MgbWFjcm9zOlxuXG5kZWZpbmVNYWNybyhcIlxcXFxyYXRpb1wiLCBcIlxcXFx2Y2VudGNvbG9uXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25jb2xvblwiLCBcIlxcXFxkYmxjb2xvblwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uZXF1YWxzXCIsIFwiXFxcXGNvbG9uZXFxXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25jb2xvbmVxdWFsc1wiLCBcIlxcXFxDb2xvbmVxcVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGVxdWFsc2NvbG9uXCIsIFwiXFxcXGVxcWNvbG9uXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZXF1YWxzY29sb25jb2xvblwiLCBcIlxcXFxFcXFjb2xvblwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9ubWludXNcIiwgXCJcXFxcY29sb25lcVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uY29sb25taW51c1wiLCBcIlxcXFxDb2xvbmVxXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWludXNjb2xvblwiLCBcIlxcXFxlcWNvbG9uXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWludXNjb2xvbmNvbG9uXCIsIFwiXFxcXEVxY29sb25cIik7IC8vIFxcY29sb25hcHByb3ggbmFtZSBpcyBzYW1lIGluIG1hdGh0b29scyBhbmQgY29sb25lcXVhbHMuXG5cbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uY29sb25hcHByb3hcIiwgXCJcXFxcQ29sb25hcHByb3hcIik7IC8vIFxcY29sb25zaW0gbmFtZSBpcyBzYW1lIGluIG1hdGh0b29scyBhbmQgY29sb25lcXVhbHMuXG5cbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uY29sb25zaW1cIiwgXCJcXFxcQ29sb25zaW1cIik7IC8vIEFkZGl0aW9uYWwgbWFjcm9zLCBpbXBsZW1lbnRlZCBieSBhbmFsb2d5IHdpdGggbWF0aHRvb2xzIGRlZmluaXRpb25zOlxuXG5kZWZpbmVNYWNybyhcIlxcXFxzaW1jb2xvblwiLCBcIlxcXFxtYXRocmVse1xcXFxzaW1cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXHZjZW50Y29sb259XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcc2ltY29sb25jb2xvblwiLCBcIlxcXFxtYXRocmVse1xcXFxzaW1cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXGRibGNvbG9ufVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGFwcHJveGNvbG9uXCIsIFwiXFxcXG1hdGhyZWx7XFxcXGFwcHJveFxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcdmNlbnRjb2xvbn1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxhcHByb3hjb2xvbmNvbG9uXCIsIFwiXFxcXG1hdGhyZWx7XFxcXGFwcHJveFxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcZGJsY29sb259XCIpOyAvLyBQcmVzZW50IGluIG5ld3R4bWF0aCwgcHhmb250cyBhbmQgdHhmb250c1xuXG5kZWZpbmVNYWNybyhcIlxcXFxub3RuaVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcbm90XFxcXG5pfXtcXFxcbWF0aHJlbHtcXFxcY2hhcmBcXHUyMjBDfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsaW1zdXBcIiwgXCJcXFxcRE9UU0JcXFxcb3BlcmF0b3JuYW1lKntsaW1cXFxcLHN1cH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsaW1pbmZcIiwgXCJcXFxcRE9UU0JcXFxcb3BlcmF0b3JuYW1lKntsaW1cXFxcLGluZn1cIik7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIE1hdGhNTCBhbHRlcm5hdGVzIGZvciBLYVRlWCBnbHlwaHMgaW4gdGhlIFVuaWNvZGUgcHJpdmF0ZSBhcmVhXG5cbmRlZmluZU1hY3JvKFwiXFxcXGd2ZXJ0bmVxcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQGd2ZXJ0bmVxcX17XFx1MjI2OX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsdmVydG5lcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBsdmVydG5lcXF9e1xcdTIyNjh9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbmdlcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBuZ2VxcX17XFx1MjI3MX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxuZ2Vxc2xhbnRcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBuZ2Vxc2xhbnR9e1xcdTIyNzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbmxlcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBubGVxcX17XFx1MjI3MH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxubGVxc2xhbnRcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBubGVxc2xhbnR9e1xcdTIyNzB9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbnNob3J0bWlkXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAbnNob3J0bWlkfXviiKR9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbnNob3J0cGFyYWxsZWxcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBuc2hvcnRwYXJhbGxlbH174oimfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5zdWJzZXRlcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBuc3Vic2V0ZXFxfXtcXHUyMjg4fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5zdXBzZXRlcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBuc3Vwc2V0ZXFxfXtcXHUyMjg5fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhcnN1YnNldG5lcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQHZhcnN1YnNldG5lcX174oqKfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhcnN1YnNldG5lcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEB2YXJzdWJzZXRuZXFxfXviq4t9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyc3Vwc2V0bmVxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAdmFyc3Vwc2V0bmVxfXviiot9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyc3Vwc2V0bmVxcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQHZhcnN1cHNldG5lcXF9e+KrjH1cIik7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIHN0bWFyeXJkIGFuZCBzZW1hbnRpY1xuLy8gVGhlIHN0bWFyeXJkIGFuZCBzZW1hbnRpYyBwYWNrYWdlcyByZW5kZXIgdGhlIG5leHQgZm91ciBpdGVtcyBieSBjYWxsaW5nIGFcbi8vIGdseXBoLiBUaG9zZSBnbHlwaHMgZG8gbm90IGV4aXN0IGluIHRoZSBLYVRlWCBmb250cy4gSGVuY2UgdGhlIG1hY3Jvcy5cblxuZGVmaW5lTWFjcm8oXCJcXFxcbGxicmFja2V0XCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aG9wZW57W1xcXFxta2Vybi0zLjJtdVt9fVwiICsgXCJ7XFxcXG1hdGhvcGVue1xcXFxjaGFyYFxcdTI3RTZ9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJyYnJhY2tldFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhjbG9zZXtdXFxcXG1rZXJuLTMuMm11XX19XCIgKyBcIntcXFxcbWF0aGNsb3Nle1xcXFxjaGFyYFxcdTI3RTd9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjdFNlwiLCBcIlxcXFxsbGJyYWNrZXRcIik7IC8vIGJsYWNrYm9hcmQgYm9sZCBbXG5cbmRlZmluZU1hY3JvKFwiXFx1MjdFN1wiLCBcIlxcXFxycmJyYWNrZXRcIik7IC8vIGJsYWNrYm9hcmQgYm9sZCBdXG5cbmRlZmluZU1hY3JvKFwiXFxcXGxCcmFjZVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhvcGVue1xcXFx7XFxcXG1rZXJuLTMuMm11W319XCIgKyBcIntcXFxcbWF0aG9wZW57XFxcXGNoYXJgXFx1Mjk4M319XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcckJyYWNlXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aGNsb3Nle11cXFxcbWtlcm4tMy4ybXVcXFxcfX19XCIgKyBcIntcXFxcbWF0aGNsb3Nle1xcXFxjaGFyYFxcdTI5ODR9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1Mjk4M1wiLCBcIlxcXFxsQnJhY2VcIik7IC8vIGJsYWNrYm9hcmQgYm9sZCB7XG5cbmRlZmluZU1hY3JvKFwiXFx1Mjk4NFwiLCBcIlxcXFxyQnJhY2VcIik7IC8vIGJsYWNrYm9hcmQgYm9sZCB9XG4vLyBUT0RPOiBDcmVhdGUgdmFyaWFibGUgc2l6ZWQgdmVyc2lvbnMgb2YgdGhlIGxhc3QgdHdvIGl0ZW1zLiBJIGJlbGlldmUgdGhhdFxuLy8gd2lsbCByZXF1aXJlIG5ldyBmb250IGdseXBocy5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIHRleHZjLnN0eVxuLy8gVGhlIHRleHZjIHBhY2thZ2UgY29udGFpbnMgbWFjcm9zIGF2YWlsYWJsZSBpbiBtZWRpYXdpa2kgcGFnZXMuXG4vLyBXZSBvbWl0IHRoZSBmdW5jdGlvbnMgZGVwcmVjYXRlZCBhdFxuLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSGVscDpEaXNwbGF5aW5nX2FfZm9ybXVsYSNEZXByZWNhdGVkX3N5bnRheFxuLy8gV2UgYWxzbyBvbWl0IHRleHZjJ3MgXFxPLCB3aGljaCBjb25mbGljdHMgd2l0aCBcXHRleHR7XFxPfVxuXG5kZWZpbmVNYWNybyhcIlxcXFxkYXJyXCIsIFwiXFxcXGRvd25hcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGRBcnJcIiwgXCJcXFxcRG93bmFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcRGFyclwiLCBcIlxcXFxEb3duYXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsYW5nXCIsIFwiXFxcXGxhbmdsZVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJhbmdcIiwgXCJcXFxccmFuZ2xlXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdWFyclwiLCBcIlxcXFx1cGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdUFyclwiLCBcIlxcXFxVcGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcVWFyclwiLCBcIlxcXFxVcGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcTlwiLCBcIlxcXFxtYXRoYmJ7Tn1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxSXCIsIFwiXFxcXG1hdGhiYntSfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXFpcIiwgXCJcXFxcbWF0aGJie1p9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYWxlZlwiLCBcIlxcXFxhbGVwaFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGFsZWZzeW1cIiwgXCJcXFxcYWxlcGhcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxBbHBoYVwiLCBcIlxcXFxtYXRocm17QX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxCZXRhXCIsIFwiXFxcXG1hdGhybXtCfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGJ1bGxcIiwgXCJcXFxcYnVsbGV0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcQ2hpXCIsIFwiXFxcXG1hdGhybXtYfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNsdWJzXCIsIFwiXFxcXGNsdWJzdWl0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY251bXNcIiwgXCJcXFxcbWF0aGJie0N9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcQ29tcGxleFwiLCBcIlxcXFxtYXRoYmJ7Q31cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxEYWdnZXJcIiwgXCJcXFxcZGRhZ2dlclwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGRpYW1vbmRzXCIsIFwiXFxcXGRpYW1vbmRzdWl0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZW1wdHlcIiwgXCJcXFxcZW1wdHlzZXRcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxFcHNpbG9uXCIsIFwiXFxcXG1hdGhybXtFfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEV0YVwiLCBcIlxcXFxtYXRocm17SH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxleGlzdFwiLCBcIlxcXFxleGlzdHNcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxoYXJyXCIsIFwiXFxcXGxlZnRyaWdodGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaEFyclwiLCBcIlxcXFxMZWZ0cmlnaHRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEhhcnJcIiwgXCJcXFxcTGVmdHJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxoZWFydHNcIiwgXCJcXFxcaGVhcnRzdWl0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaW1hZ2VcIiwgXCJcXFxcSW1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxpbmZpblwiLCBcIlxcXFxpbmZ0eVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXElvdGFcIiwgXCJcXFxcbWF0aHJte0l9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaXNpblwiLCBcIlxcXFxpblwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEthcHBhXCIsIFwiXFxcXG1hdGhybXtLfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGxhcnJcIiwgXCJcXFxcbGVmdGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbEFyclwiLCBcIlxcXFxMZWZ0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxMYXJyXCIsIFwiXFxcXExlZnRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGxyYXJyXCIsIFwiXFxcXGxlZnRyaWdodGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbHJBcnJcIiwgXCJcXFxcTGVmdHJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxMcmFyclwiLCBcIlxcXFxMZWZ0cmlnaHRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXE11XCIsIFwiXFxcXG1hdGhybXtNfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5hdG51bXNcIiwgXCJcXFxcbWF0aGJie059XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcTnVcIiwgXCJcXFxcbWF0aHJte059XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcT21pY3JvblwiLCBcIlxcXFxtYXRocm17T31cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwbHVzbW5cIiwgXCJcXFxccG1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyYXJyXCIsIFwiXFxcXHJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyQXJyXCIsIFwiXFxcXFJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxSYXJyXCIsIFwiXFxcXFJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyZWFsXCIsIFwiXFxcXFJlXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVhbHNcIiwgXCJcXFxcbWF0aGJie1J9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcUmVhbHNcIiwgXCJcXFxcbWF0aGJie1J9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcUmhvXCIsIFwiXFxcXG1hdGhybXtQfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHNkb3RcIiwgXCJcXFxcY2RvdFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHNlY3RcIiwgXCJcXFxcU1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHNwYWRlc1wiLCBcIlxcXFxzcGFkZXN1aXRcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxzdWJcIiwgXCJcXFxcc3Vic2V0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcc3ViZVwiLCBcIlxcXFxzdWJzZXRlcVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHN1cGVcIiwgXCJcXFxcc3Vwc2V0ZXFcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxUYXVcIiwgXCJcXFxcbWF0aHJte1R9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGhldGFzeW1cIiwgXCJcXFxcdmFydGhldGFcIik7IC8vIFRPRE86IGRlZmluZU1hY3JvKFwiXFxcXHZhcmNvcHBhXCIsIFwiXFxcXFxcbWJveHtcXFxcY29wcGF9XCIpO1xuXG5kZWZpbmVNYWNybyhcIlxcXFx3ZWllcnBcIiwgXCJcXFxcd3BcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxaZXRhXCIsIFwiXFxcXG1hdGhybXtafVwiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gc3RhdG1hdGguc3R5XG4vLyBodHRwczovL2N0YW4ubWF0aC5pbGxpbm9pcy5lZHUvbWFjcm9zL2xhdGV4L2NvbnRyaWIvc3RhdG1hdGgvc3RhdG1hdGgucGRmXG5cbmRlZmluZU1hY3JvKFwiXFxcXGFyZ21pblwiLCBcIlxcXFxET1RTQlxcXFxvcGVyYXRvcm5hbWUqe2FyZ1xcXFwsbWlufVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGFyZ21heFwiLCBcIlxcXFxET1RTQlxcXFxvcGVyYXRvcm5hbWUqe2FyZ1xcXFwsbWF4fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHBsaW1cIiwgXCJcXFxcRE9UU0JcXFxcbWF0aG9we1xcXFxvcGVyYXRvcm5hbWV7cGxpbX19XFxcXGxpbWl0c1wiKTsgLy8gQ3VzdG9tIEtoYW4gQWNhZGVteSBjb2xvcnMsIHNob3VsZCBiZSBtb3ZlZCB0byBhbiBvcHRpb25hbCBwYWNrYWdlXG5cbmRlZmluZU1hY3JvKFwiXFxcXGJsdWVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjNjQ5NWVkfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxvcmFuZ2VcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZmZhNTAwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwaW5rXCIsIFwiXFxcXHRleHRjb2xvcnsjI2ZmMDBhZn17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVkXCIsIFwiXFxcXHRleHRjb2xvcnsjI2RmMDAzMH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JlZW5cIiwgXCJcXFxcdGV4dGNvbG9yeyMjMjhhZTdifXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5XCIsIFwiXFxcXHRleHRjb2xvcntncmF5fXsjIzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccHVycGxlXCIsIFwiXFxcXHRleHRjb2xvcnsjIzlkMzhiZH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYmx1ZUFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjY2NmYWZmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxibHVlQlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM4MGY2ZmZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGJsdWVDXCIsIFwiXFxcXHRleHRjb2xvcnsjIzYzZDllYX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYmx1ZURcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMTFhY2NkfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxibHVlRVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyMwYzdmOTl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHRlYWxBXCIsIFwiXFxcXHRleHRjb2xvcnsjIzk0ZmZmNX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGVhbEJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMjZlZGQ1fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx0ZWFsQ1wiLCBcIlxcXFx0ZXh0Y29sb3J7IyMwMWQxYzF9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHRlYWxEXCIsIFwiXFxcXHRleHRjb2xvcnsjIzAxYTk5NX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGVhbEVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMjA4MTcwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjYjZmZmIwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjOGFmMjgxfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkNcIiwgXCJcXFxcdGV4dGNvbG9yeyMjNzRjZjcwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkRcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMWZhYjU0fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMGQ5MjNmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxnb2xkQVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmZmQwYTl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdvbGRCXCIsIFwiXFxcXHRleHRjb2xvcnsjI2ZmYmI3MX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ29sZENcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZmY5YzM5fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxnb2xkRFwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNlMDdkMTB9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdvbGRFXCIsIFwiXFxcXHRleHRjb2xvcnsjI2E3NWEwNX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVkQVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmY2E5YTl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJlZEJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZmY4NDgyfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyZWRDXCIsIFwiXFxcXHRleHRjb2xvcnsjI2Y5Njg1ZH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVkRFwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNlODRkMzl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJlZEVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjYmMyNjEyfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtYXJvb25BXCIsIFwiXFxcXHRleHRjb2xvcnsjI2ZmYmRlMH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWFyb29uQlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmZjkyYzZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG1hcm9vbkNcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZWQ1ZmE2fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtYXJvb25EXCIsIFwiXFxcXHRleHRjb2xvcnsjI2NhMzM3Y317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWFyb29uRVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM5ZTAzNGV9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHB1cnBsZUFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZGRkN2ZmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwdXJwbGVCXCIsIFwiXFxcXHRleHRjb2xvcnsjI2M2YjlmY317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccHVycGxlQ1wiLCBcIlxcXFx0ZXh0Y29sb3J7IyNhYTg3ZmZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHB1cnBsZURcIiwgXCJcXFxcdGV4dGNvbG9yeyMjNzg1NGFifXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwdXJwbGVFXCIsIFwiXFxcXHRleHRjb2xvcnsjIzU0M2I3OH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWludEFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZjVmOWU4fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtaW50QlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNlZGYyZGZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG1pbnRDXCIsIFwiXFxcXHRleHRjb2xvcnsjI2UwZTVjY317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheUFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZjZmN2Y3fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5QlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmMGYxZjJ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlDXCIsIFwiXFxcXHRleHRjb2xvcnsjI2UzZTVlNn17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheURcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZDZkOGRhfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5RVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNiYWJlYzJ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlGXCIsIFwiXFxcXHRleHRjb2xvcnsjIzg4OGQ5M317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheUdcIiwgXCJcXFxcdGV4dGNvbG9yeyMjNjI2NTY5fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5SFwiLCBcIlxcXFx0ZXh0Y29sb3J7IyMzYjNlNDB9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlJXCIsIFwiXFxcXHRleHRjb2xvcnsjIzIxMjQyY317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxca2FCbHVlXCIsIFwiXFxcXHRleHRjb2xvcnsjIzMxNDQ1M317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxca2FHcmVlblwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM3MUIzMDd9eyMxfVwiKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL01hY3JvRXhwYW5kZXIuanNcbi8qKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSDigJxndWxsZXTigJ0gd2hlcmUgbWFjcm9zIGFyZSBleHBhbmRlZFxuICogdW50aWwgb25seSBub24tbWFjcm8gdG9rZW5zIHJlbWFpbi5cbiAqL1xuXG5cblxuXG5cblxuXG4vLyBMaXN0IG9mIGNvbW1hbmRzIHRoYXQgYWN0IGxpa2UgbWFjcm9zIGJ1dCBhcmVuJ3QgZGVmaW5lZCBhcyBhIG1hY3JvLFxuLy8gZnVuY3Rpb24sIG9yIHN5bWJvbC4gIFVzZWQgaW4gYGlzRGVmaW5lZGAuXG52YXIgaW1wbGljaXRDb21tYW5kcyA9IHtcbiAgXCJcXFxccmVsYXhcIjogdHJ1ZSxcbiAgLy8gTWFjcm9FeHBhbmRlci5qc1xuICBcIl5cIjogdHJ1ZSxcbiAgLy8gUGFyc2VyLmpzXG4gIFwiX1wiOiB0cnVlLFxuICAvLyBQYXJzZXIuanNcbiAgXCJcXFxcbGltaXRzXCI6IHRydWUsXG4gIC8vIFBhcnNlci5qc1xuICBcIlxcXFxub2xpbWl0c1wiOiB0cnVlIC8vIFBhcnNlci5qc1xuXG59O1xuXG52YXIgTWFjcm9FeHBhbmRlcl9NYWNyb0V4cGFuZGVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTWFjcm9FeHBhbmRlcihpbnB1dCwgc2V0dGluZ3MsIG1vZGUpIHtcbiAgICB0aGlzLnNldHRpbmdzID0gdm9pZCAwO1xuICAgIHRoaXMuZXhwYW5zaW9uQ291bnQgPSB2b2lkIDA7XG4gICAgdGhpcy5sZXhlciA9IHZvaWQgMDtcbiAgICB0aGlzLm1hY3JvcyA9IHZvaWQgMDtcbiAgICB0aGlzLnN0YWNrID0gdm9pZCAwO1xuICAgIHRoaXMubW9kZSA9IHZvaWQgMDtcbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgdGhpcy5leHBhbnNpb25Db3VudCA9IDA7XG4gICAgdGhpcy5mZWVkKGlucHV0KTsgLy8gTWFrZSBuZXcgZ2xvYmFsIG5hbWVzcGFjZVxuXG4gICAgdGhpcy5tYWNyb3MgPSBuZXcgTmFtZXNwYWNlX05hbWVzcGFjZShtYWNyb3MsIHNldHRpbmdzLm1hY3Jvcyk7XG4gICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgICB0aGlzLnN0YWNrID0gW107IC8vIGNvbnRhaW5zIHRva2VucyBpbiBSRVZFUlNFIG9yZGVyXG4gIH1cbiAgLyoqXG4gICAqIEZlZWQgYSBuZXcgaW5wdXQgc3RyaW5nIHRvIHRoZSBzYW1lIE1hY3JvRXhwYW5kZXJcbiAgICogKHdpdGggZXhpc3RpbmcgbWFjcm9zIGV0Yy4pLlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBNYWNyb0V4cGFuZGVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZmVlZCA9IGZ1bmN0aW9uIGZlZWQoaW5wdXQpIHtcbiAgICB0aGlzLmxleGVyID0gbmV3IExleGVyX0xleGVyKGlucHV0LCB0aGlzLnNldHRpbmdzKTtcbiAgfVxuICAvKipcbiAgICogU3dpdGNoZXMgYmV0d2VlbiBcInRleHRcIiBhbmQgXCJtYXRoXCIgbW9kZXMuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnN3aXRjaE1vZGUgPSBmdW5jdGlvbiBzd2l0Y2hNb2RlKG5ld01vZGUpIHtcbiAgICB0aGlzLm1vZGUgPSBuZXdNb2RlO1xuICB9XG4gIC8qKlxuICAgKiBTdGFydCBhIG5ldyBncm91cCBuZXN0aW5nIHdpdGhpbiBhbGwgbmFtZXNwYWNlcy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uYmVnaW5Hcm91cCA9IGZ1bmN0aW9uIGJlZ2luR3JvdXAoKSB7XG4gICAgdGhpcy5tYWNyb3MuYmVnaW5Hcm91cCgpO1xuICB9XG4gIC8qKlxuICAgKiBFbmQgY3VycmVudCBncm91cCBuZXN0aW5nIHdpdGhpbiBhbGwgbmFtZXNwYWNlcy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZW5kR3JvdXAgPSBmdW5jdGlvbiBlbmRHcm91cCgpIHtcbiAgICB0aGlzLm1hY3Jvcy5lbmRHcm91cCgpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0b3Btb3N0IHRva2VuIG9uIHRoZSBzdGFjaywgd2l0aG91dCBleHBhbmRpbmcgaXQuXG4gICAqIFNpbWlsYXIgaW4gYmVoYXZpb3IgdG8gVGVYJ3MgYFxcZnV0dXJlbGV0YC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZnV0dXJlID0gZnVuY3Rpb24gZnV0dXJlKCkge1xuICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5wdXNoVG9rZW4odGhpcy5sZXhlci5sZXgoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTtcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlIGFuZCByZXR1cm4gdGhlIG5leHQgdW5leHBhbmRlZCB0b2tlbi5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ucG9wVG9rZW4gPSBmdW5jdGlvbiBwb3BUb2tlbigpIHtcbiAgICB0aGlzLmZ1dHVyZSgpOyAvLyBlbnN1cmUgbm9uLWVtcHR5IHN0YWNrXG5cbiAgICByZXR1cm4gdGhpcy5zdGFjay5wb3AoKTtcbiAgfVxuICAvKipcbiAgICogQWRkIGEgZ2l2ZW4gdG9rZW4gdG8gdGhlIHRva2VuIHN0YWNrLiAgSW4gcGFydGljdWxhciwgdGhpcyBnZXQgYmUgdXNlZFxuICAgKiB0byBwdXQgYmFjayBhIHRva2VuIHJldHVybmVkIGZyb20gb25lIG9mIHRoZSBvdGhlciBtZXRob2RzLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5wdXNoVG9rZW4gPSBmdW5jdGlvbiBwdXNoVG9rZW4odG9rZW4pIHtcbiAgICB0aGlzLnN0YWNrLnB1c2godG9rZW4pO1xuICB9XG4gIC8qKlxuICAgKiBBcHBlbmQgYW4gYXJyYXkgb2YgdG9rZW5zIHRvIHRoZSB0b2tlbiBzdGFjay5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ucHVzaFRva2VucyA9IGZ1bmN0aW9uIHB1c2hUb2tlbnModG9rZW5zKSB7XG4gICAgdmFyIF90aGlzJHN0YWNrO1xuXG4gICAgKF90aGlzJHN0YWNrID0gdGhpcy5zdGFjaykucHVzaC5hcHBseShfdGhpcyRzdGFjaywgdG9rZW5zKTtcbiAgfVxuICAvKipcbiAgICogQ29uc3VtZSBhbGwgZm9sbG93aW5nIHNwYWNlIHRva2Vucywgd2l0aG91dCBleHBhbnNpb24uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmNvbnN1bWVTcGFjZXMgPSBmdW5jdGlvbiBjb25zdW1lU3BhY2VzKCkge1xuICAgIGZvciAoOzspIHtcbiAgICAgIHZhciB0b2tlbiA9IHRoaXMuZnV0dXJlKCk7XG5cbiAgICAgIGlmICh0b2tlbi50ZXh0ID09PSBcIiBcIikge1xuICAgICAgICB0aGlzLnN0YWNrLnBvcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDb25zdW1lIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGFyZ3VtZW50cyBmcm9tIHRoZSB0b2tlbiBzdHJlYW0sXG4gICAqIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBhcnJheSBvZiBhcmd1bWVudHMuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmNvbnN1bWVBcmdzID0gZnVuY3Rpb24gY29uc3VtZUFyZ3MobnVtQXJncykge1xuICAgIHZhciBhcmdzID0gW107IC8vIG9idGFpbiBhcmd1bWVudHMsIGVpdGhlciBzaW5nbGUgdG9rZW4gb3IgYmFsYW5jZWQge+KApn0gZ3JvdXBcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtQXJnczsgKytpKSB7XG4gICAgICB0aGlzLmNvbnN1bWVTcGFjZXMoKTsgLy8gaWdub3JlIHNwYWNlcyBiZWZvcmUgZWFjaCBhcmd1bWVudFxuXG4gICAgICB2YXIgc3RhcnRPZkFyZyA9IHRoaXMucG9wVG9rZW4oKTtcblxuICAgICAgaWYgKHN0YXJ0T2ZBcmcudGV4dCA9PT0gXCJ7XCIpIHtcbiAgICAgICAgdmFyIGFyZyA9IFtdO1xuICAgICAgICB2YXIgZGVwdGggPSAxO1xuXG4gICAgICAgIHdoaWxlIChkZXB0aCAhPT0gMCkge1xuICAgICAgICAgIHZhciB0b2sgPSB0aGlzLnBvcFRva2VuKCk7XG4gICAgICAgICAgYXJnLnB1c2godG9rKTtcblxuICAgICAgICAgIGlmICh0b2sudGV4dCA9PT0gXCJ7XCIpIHtcbiAgICAgICAgICAgICsrZGVwdGg7XG4gICAgICAgICAgfSBlbHNlIGlmICh0b2sudGV4dCA9PT0gXCJ9XCIpIHtcbiAgICAgICAgICAgIC0tZGVwdGg7XG4gICAgICAgICAgfSBlbHNlIGlmICh0b2sudGV4dCA9PT0gXCJFT0ZcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiRW5kIG9mIGlucHV0IGluIG1hY3JvIGFyZ3VtZW50XCIsIHN0YXJ0T2ZBcmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGFyZy5wb3AoKTsgLy8gcmVtb3ZlIGxhc3QgfVxuXG4gICAgICAgIGFyZy5yZXZlcnNlKCk7IC8vIGxpa2UgYWJvdmUsIHRvIGZpdCBpbiB3aXRoIHN0YWNrIG9yZGVyXG5cbiAgICAgICAgYXJnc1tpXSA9IGFyZztcbiAgICAgIH0gZWxzZSBpZiAoc3RhcnRPZkFyZy50ZXh0ID09PSBcIkVPRlwiKSB7XG4gICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkVuZCBvZiBpbnB1dCBleHBlY3RpbmcgbWFjcm8gYXJndW1lbnRcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcmdzW2ldID0gW3N0YXJ0T2ZBcmddO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhcmdzO1xuICB9XG4gIC8qKlxuICAgKiBFeHBhbmQgdGhlIG5leHQgdG9rZW4gb25seSBvbmNlIGlmIHBvc3NpYmxlLlxuICAgKlxuICAgKiBJZiB0aGUgdG9rZW4gaXMgZXhwYW5kZWQsIHRoZSByZXN1bHRpbmcgdG9rZW5zIHdpbGwgYmUgcHVzaGVkIG9udG9cbiAgICogdGhlIHN0YWNrIGluIHJldmVyc2Ugb3JkZXIgYW5kIHdpbGwgYmUgcmV0dXJuZWQgYXMgYW4gYXJyYXksXG4gICAqIGFsc28gaW4gcmV2ZXJzZSBvcmRlci5cbiAgICpcbiAgICogSWYgbm90LCB0aGUgbmV4dCB0b2tlbiB3aWxsIGJlIHJldHVybmVkIHdpdGhvdXQgcmVtb3ZpbmcgaXRcbiAgICogZnJvbSB0aGUgc3RhY2suICBUaGlzIGNhc2UgY2FuIGJlIGRldGVjdGVkIGJ5IGEgYFRva2VuYCByZXR1cm4gdmFsdWVcbiAgICogaW5zdGVhZCBvZiBhbiBgQXJyYXlgIHJldHVybiB2YWx1ZS5cbiAgICpcbiAgICogSW4gZWl0aGVyIGNhc2UsIHRoZSBuZXh0IHRva2VuIHdpbGwgYmUgb24gdGhlIHRvcCBvZiB0aGUgc3RhY2ssXG4gICAqIG9yIHRoZSBzdGFjayB3aWxsIGJlIGVtcHR5LlxuICAgKlxuICAgKiBVc2VkIHRvIGltcGxlbWVudCBgZXhwYW5kQWZ0ZXJGdXR1cmVgIGFuZCBgZXhwYW5kTmV4dFRva2VuYC5cbiAgICpcbiAgICogQXQgdGhlIG1vbWVudCwgbWFjcm8gZXhwYW5zaW9uIGRvZXNuJ3QgaGFuZGxlIGRlbGltaXRlZCBtYWNyb3MsXG4gICAqIGkuZS4gdGhpbmdzIGxpa2UgdGhvc2UgZGVmaW5lZCBieSBcXGRlZlxcZm9vIzFcXGVuZHvigKZ9LlxuICAgKiBTZWUgdGhlIFRlWCBib29rIHBhZ2UgMjAyZmYuIGZvciBkZXRhaWxzIG9uIGhvdyB0aG9zZSBzaG91bGQgYmVoYXZlLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5leHBhbmRPbmNlID0gZnVuY3Rpb24gZXhwYW5kT25jZSgpIHtcbiAgICB2YXIgdG9wVG9rZW4gPSB0aGlzLnBvcFRva2VuKCk7XG4gICAgdmFyIG5hbWUgPSB0b3BUb2tlbi50ZXh0O1xuXG4gICAgdmFyIGV4cGFuc2lvbiA9IHRoaXMuX2dldEV4cGFuc2lvbihuYW1lKTtcblxuICAgIGlmIChleHBhbnNpb24gPT0gbnVsbCkge1xuICAgICAgLy8gbWFpbmx5IGNoZWNraW5nIGZvciB1bmRlZmluZWQgaGVyZVxuICAgICAgLy8gRnVsbHkgZXhwYW5kZWRcbiAgICAgIHRoaXMucHVzaFRva2VuKHRvcFRva2VuKTtcbiAgICAgIHJldHVybiB0b3BUb2tlbjtcbiAgICB9XG5cbiAgICB0aGlzLmV4cGFuc2lvbkNvdW50Kys7XG5cbiAgICBpZiAodGhpcy5leHBhbnNpb25Db3VudCA+IHRoaXMuc2V0dGluZ3MubWF4RXhwYW5kKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJUb28gbWFueSBleHBhbnNpb25zOiBpbmZpbml0ZSBsb29wIG9yIFwiICsgXCJuZWVkIHRvIGluY3JlYXNlIG1heEV4cGFuZCBzZXR0aW5nXCIpO1xuICAgIH1cblxuICAgIHZhciB0b2tlbnMgPSBleHBhbnNpb24udG9rZW5zO1xuXG4gICAgaWYgKGV4cGFuc2lvbi5udW1BcmdzKSB7XG4gICAgICB2YXIgYXJncyA9IHRoaXMuY29uc3VtZUFyZ3MoZXhwYW5zaW9uLm51bUFyZ3MpOyAvLyBwYXN0ZSBhcmd1bWVudHMgaW4gcGxhY2Ugb2YgdGhlIHBsYWNlaG9sZGVyc1xuXG4gICAgICB0b2tlbnMgPSB0b2tlbnMuc2xpY2UoKTsgLy8gbWFrZSBhIHNoYWxsb3cgY29weVxuXG4gICAgICBmb3IgKHZhciBpID0gdG9rZW5zLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciB0b2sgPSB0b2tlbnNbaV07XG5cbiAgICAgICAgaWYgKHRvay50ZXh0ID09PSBcIiNcIikge1xuICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJJbmNvbXBsZXRlIHBsYWNlaG9sZGVyIGF0IGVuZCBvZiBtYWNybyBib2R5XCIsIHRvayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdG9rID0gdG9rZW5zWy0taV07IC8vIG5leHQgdG9rZW4gb24gc3RhY2tcblxuICAgICAgICAgIGlmICh0b2sudGV4dCA9PT0gXCIjXCIpIHtcbiAgICAgICAgICAgIC8vICMjIOKGkiAjXG4gICAgICAgICAgICB0b2tlbnMuc3BsaWNlKGkgKyAxLCAxKTsgLy8gZHJvcCBmaXJzdCAjXG4gICAgICAgICAgfSBlbHNlIGlmICgvXlsxLTldJC8udGVzdCh0b2sudGV4dCkpIHtcbiAgICAgICAgICAgIHZhciBfdG9rZW5zO1xuXG4gICAgICAgICAgICAvLyByZXBsYWNlIHRoZSBwbGFjZWhvbGRlciB3aXRoIHRoZSBpbmRpY2F0ZWQgYXJndW1lbnRcbiAgICAgICAgICAgIChfdG9rZW5zID0gdG9rZW5zKS5zcGxpY2UuYXBwbHkoX3Rva2VucywgW2ksIDJdLmNvbmNhdChhcmdzWyt0b2sudGV4dCAtIDFdKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIk5vdCBhIHZhbGlkIGFyZ3VtZW50IG51bWJlclwiLCB0b2spO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gQ29uY2F0ZW5hdGUgZXhwYW5zaW9uIG9udG8gdG9wIG9mIHN0YWNrLlxuXG5cbiAgICB0aGlzLnB1c2hUb2tlbnModG9rZW5zKTtcbiAgICByZXR1cm4gdG9rZW5zO1xuICB9XG4gIC8qKlxuICAgKiBFeHBhbmQgdGhlIG5leHQgdG9rZW4gb25seSBvbmNlIChpZiBwb3NzaWJsZSksIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZ1xuICAgKiB0b3AgdG9rZW4gb24gdGhlIHN0YWNrICh3aXRob3V0IHJlbW92aW5nIGFueXRoaW5nIGZyb20gdGhlIHN0YWNrKS5cbiAgICogU2ltaWxhciBpbiBiZWhhdmlvciB0byBUZVgncyBgXFxleHBhbmRhZnRlclxcZnV0dXJlbGV0YC5cbiAgICogRXF1aXZhbGVudCB0byBleHBhbmRPbmNlKCkgZm9sbG93ZWQgYnkgZnV0dXJlKCkuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmV4cGFuZEFmdGVyRnV0dXJlID0gZnVuY3Rpb24gZXhwYW5kQWZ0ZXJGdXR1cmUoKSB7XG4gICAgdGhpcy5leHBhbmRPbmNlKCk7XG4gICAgcmV0dXJuIHRoaXMuZnV0dXJlKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGV4cGFuZCBmaXJzdCB0b2tlbiwgdGhlbiByZXR1cm4gZmlyc3Qgbm9uLWV4cGFuZGFibGUgdG9rZW4uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmV4cGFuZE5leHRUb2tlbiA9IGZ1bmN0aW9uIGV4cGFuZE5leHRUb2tlbigpIHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICB2YXIgZXhwYW5kZWQgPSB0aGlzLmV4cGFuZE9uY2UoKTsgLy8gZXhwYW5kT25jZSByZXR1cm5zIFRva2VuIGlmIGFuZCBvbmx5IGlmIGl0J3MgZnVsbHkgZXhwYW5kZWQuXG5cbiAgICAgIGlmIChleHBhbmRlZCBpbnN0YW5jZW9mIFRva2VuX1Rva2VuKSB7XG4gICAgICAgIC8vIFxccmVsYXggc3RvcHMgdGhlIGV4cGFuc2lvbiwgYnV0IHNob3VsZG4ndCBnZXQgcmV0dXJuZWQgKGFcbiAgICAgICAgLy8gbnVsbCByZXR1cm4gdmFsdWUgY291bGRuJ3QgZ2V0IGltcGxlbWVudGVkIGFzIGEgZnVuY3Rpb24pLlxuICAgICAgICBpZiAoZXhwYW5kZWQudGV4dCA9PT0gXCJcXFxccmVsYXhcIikge1xuICAgICAgICAgIHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3RhY2sucG9wKCk7IC8vID09PSBleHBhbmRlZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBGbG93IHVuYWJsZSB0byBmaWd1cmUgb3V0IHRoYXQgdGhpcyBwYXRod2F5IGlzIGltcG9zc2libGUuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzQ4MDhcblxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5yZWFjaGFibGVcbiAgfVxuICAvKipcbiAgICogRnVsbHkgZXhwYW5kIHRoZSBnaXZlbiBtYWNybyBuYW1lIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBsaXN0IG9mXG4gICAqIHRva2Vucywgb3IgcmV0dXJuIGB1bmRlZmluZWRgIGlmIG5vIHN1Y2ggbWFjcm8gaXMgZGVmaW5lZC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uZXhwYW5kTWFjcm8gPSBmdW5jdGlvbiBleHBhbmRNYWNybyhuYW1lKSB7XG4gICAgaWYgKCF0aGlzLm1hY3Jvcy5nZXQobmFtZSkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IFtdO1xuICAgIHZhciBvbGRTdGFja0xlbmd0aCA9IHRoaXMuc3RhY2subGVuZ3RoO1xuICAgIHRoaXMucHVzaFRva2VuKG5ldyBUb2tlbl9Ub2tlbihuYW1lKSk7XG5cbiAgICB3aGlsZSAodGhpcy5zdGFjay5sZW5ndGggPiBvbGRTdGFja0xlbmd0aCkge1xuICAgICAgdmFyIGV4cGFuZGVkID0gdGhpcy5leHBhbmRPbmNlKCk7IC8vIGV4cGFuZE9uY2UgcmV0dXJucyBUb2tlbiBpZiBhbmQgb25seSBpZiBpdCdzIGZ1bGx5IGV4cGFuZGVkLlxuXG4gICAgICBpZiAoZXhwYW5kZWQgaW5zdGFuY2VvZiBUb2tlbl9Ub2tlbikge1xuICAgICAgICBvdXRwdXQucHVzaCh0aGlzLnN0YWNrLnBvcCgpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG4gIC8qKlxuICAgKiBGdWxseSBleHBhbmQgdGhlIGdpdmVuIG1hY3JvIG5hbWUgYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIGEgc3RyaW5nLFxuICAgKiBvciByZXR1cm4gYHVuZGVmaW5lZGAgaWYgbm8gc3VjaCBtYWNybyBpcyBkZWZpbmVkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5leHBhbmRNYWNyb0FzVGV4dCA9IGZ1bmN0aW9uIGV4cGFuZE1hY3JvQXNUZXh0KG5hbWUpIHtcbiAgICB2YXIgdG9rZW5zID0gdGhpcy5leHBhbmRNYWNybyhuYW1lKTtcblxuICAgIGlmICh0b2tlbnMpIHtcbiAgICAgIHJldHVybiB0b2tlbnMubWFwKGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICByZXR1cm4gdG9rZW4udGV4dDtcbiAgICAgIH0pLmpvaW4oXCJcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0b2tlbnM7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBleHBhbmRlZCBtYWNybyBhcyBhIHJldmVyc2VkIGFycmF5IG9mIHRva2VucyBhbmQgYSBtYWNyb1xuICAgKiBhcmd1bWVudCBjb3VudC4gIE9yIHJldHVybnMgYG51bGxgIGlmIG5vIHN1Y2ggbWFjcm8uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLl9nZXRFeHBhbnNpb24gPSBmdW5jdGlvbiBfZ2V0RXhwYW5zaW9uKG5hbWUpIHtcbiAgICB2YXIgZGVmaW5pdGlvbiA9IHRoaXMubWFjcm9zLmdldChuYW1lKTtcblxuICAgIGlmIChkZWZpbml0aW9uID09IG51bGwpIHtcbiAgICAgIC8vIG1haW5seSBjaGVja2luZyBmb3IgdW5kZWZpbmVkIGhlcmVcbiAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgIH1cblxuICAgIHZhciBleHBhbnNpb24gPSB0eXBlb2YgZGVmaW5pdGlvbiA9PT0gXCJmdW5jdGlvblwiID8gZGVmaW5pdGlvbih0aGlzKSA6IGRlZmluaXRpb247XG5cbiAgICBpZiAodHlwZW9mIGV4cGFuc2lvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdmFyIG51bUFyZ3MgPSAwO1xuXG4gICAgICBpZiAoZXhwYW5zaW9uLmluZGV4T2YoXCIjXCIpICE9PSAtMSkge1xuICAgICAgICB2YXIgc3RyaXBwZWQgPSBleHBhbnNpb24ucmVwbGFjZSgvIyMvZywgXCJcIik7XG5cbiAgICAgICAgd2hpbGUgKHN0cmlwcGVkLmluZGV4T2YoXCIjXCIgKyAobnVtQXJncyArIDEpKSAhPT0gLTEpIHtcbiAgICAgICAgICArK251bUFyZ3M7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGJvZHlMZXhlciA9IG5ldyBMZXhlcl9MZXhlcihleHBhbnNpb24sIHRoaXMuc2V0dGluZ3MpO1xuICAgICAgdmFyIHRva2VucyA9IFtdO1xuICAgICAgdmFyIHRvayA9IGJvZHlMZXhlci5sZXgoKTtcblxuICAgICAgd2hpbGUgKHRvay50ZXh0ICE9PSBcIkVPRlwiKSB7XG4gICAgICAgIHRva2Vucy5wdXNoKHRvayk7XG4gICAgICAgIHRvayA9IGJvZHlMZXhlci5sZXgoKTtcbiAgICAgIH1cblxuICAgICAgdG9rZW5zLnJldmVyc2UoKTsgLy8gdG8gZml0IGluIHdpdGggc3RhY2sgdXNpbmcgcHVzaCBhbmQgcG9wXG5cbiAgICAgIHZhciBleHBhbmRlZCA9IHtcbiAgICAgICAgdG9rZW5zOiB0b2tlbnMsXG4gICAgICAgIG51bUFyZ3M6IG51bUFyZ3NcbiAgICAgIH07XG4gICAgICByZXR1cm4gZXhwYW5kZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cGFuc2lvbjtcbiAgfVxuICAvKipcbiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgYSBjb21tYW5kIGlzIGN1cnJlbnRseSBcImRlZmluZWRcIiAoaGFzIHNvbWVcbiAgICogZnVuY3Rpb25hbGl0eSksIG1lYW5pbmcgdGhhdCBpdCdzIGEgbWFjcm8gKGluIHRoZSBjdXJyZW50IGdyb3VwKSxcbiAgICogYSBmdW5jdGlvbiwgYSBzeW1ib2wsIG9yIG9uZSBvZiB0aGUgc3BlY2lhbCBjb21tYW5kcyBsaXN0ZWQgaW5cbiAgICogYGltcGxpY2l0Q29tbWFuZHNgLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5pc0RlZmluZWQgPSBmdW5jdGlvbiBpc0RlZmluZWQobmFtZSkge1xuICAgIHJldHVybiB0aGlzLm1hY3Jvcy5oYXMobmFtZSkgfHwgc3JjX2Z1bmN0aW9ucy5oYXNPd25Qcm9wZXJ0eShuYW1lKSB8fCBzcmNfc3ltYm9scy5tYXRoLmhhc093blByb3BlcnR5KG5hbWUpIHx8IHNyY19zeW1ib2xzLnRleHQuaGFzT3duUHJvcGVydHkobmFtZSkgfHwgaW1wbGljaXRDb21tYW5kcy5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcbiAgfTtcblxuICByZXR1cm4gTWFjcm9FeHBhbmRlcjtcbn0oKTtcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy91bmljb2RlQWNjZW50cy5qc1xuLy8gTWFwcGluZyBvZiBVbmljb2RlIGFjY2VudCBjaGFyYWN0ZXJzIHRvIHRoZWlyIExhVGVYIGVxdWl2YWxlbnQgaW4gdGV4dCBhbmRcbi8vIG1hdGggbW9kZSAod2hlbiB0aGV5IGV4aXN0KS5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHVuaWNvZGVBY2NlbnRzID0gKHtcbiAgXCJcXHUwMzAxXCI6IHtcbiAgICB0ZXh0OiBcIlxcXFwnXCIsXG4gICAgbWF0aDogJ1xcXFxhY3V0ZSdcbiAgfSxcbiAgXCJcXHUwMzAwXCI6IHtcbiAgICB0ZXh0OiAnXFxcXGAnLFxuICAgIG1hdGg6ICdcXFxcZ3JhdmUnXG4gIH0sXG4gIFwiXFx1MDMwOFwiOiB7XG4gICAgdGV4dDogJ1xcXFxcIicsXG4gICAgbWF0aDogJ1xcXFxkZG90J1xuICB9LFxuICBcIlxcdTAzMDNcIjoge1xuICAgIHRleHQ6ICdcXFxcficsXG4gICAgbWF0aDogJ1xcXFx0aWxkZSdcbiAgfSxcbiAgXCJcXHUwMzA0XCI6IHtcbiAgICB0ZXh0OiAnXFxcXD0nLFxuICAgIG1hdGg6ICdcXFxcYmFyJ1xuICB9LFxuICBcIlxcdTAzMDZcIjoge1xuICAgIHRleHQ6IFwiXFxcXHVcIixcbiAgICBtYXRoOiAnXFxcXGJyZXZlJ1xuICB9LFxuICBcIlxcdTAzMENcIjoge1xuICAgIHRleHQ6ICdcXFxcdicsXG4gICAgbWF0aDogJ1xcXFxjaGVjaydcbiAgfSxcbiAgXCJcXHUwMzAyXCI6IHtcbiAgICB0ZXh0OiAnXFxcXF4nLFxuICAgIG1hdGg6ICdcXFxcaGF0J1xuICB9LFxuICBcIlxcdTAzMDdcIjoge1xuICAgIHRleHQ6ICdcXFxcLicsXG4gICAgbWF0aDogJ1xcXFxkb3QnXG4gIH0sXG4gIFwiXFx1MDMwQVwiOiB7XG4gICAgdGV4dDogJ1xcXFxyJyxcbiAgICBtYXRoOiAnXFxcXG1hdGhyaW5nJ1xuICB9LFxuICBcIlxcdTAzMEJcIjoge1xuICAgIHRleHQ6ICdcXFxcSCdcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy91bmljb2RlU3ltYm9scy5qc1xuLy8gVGhpcyBmaWxlIGlzIEdFTkVSQVRFRCBieSB1bmljb2RlTWFrZS5qcy4gRE8gTk9UIE1PRElGWS5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHVuaWNvZGVTeW1ib2xzID0gKHtcbiAgXCJcXHhFMVwiOiBcImFcXHUwMzAxXCIsXG4gIC8vIMOhID0gXFwne2F9XG4gIFwiXFx4RTBcIjogXCJhXFx1MDMwMFwiLFxuICAvLyDDoCA9IFxcYHthfVxuICBcIlxceEU0XCI6IFwiYVxcdTAzMDhcIixcbiAgLy8gw6QgPSBcXFwie2F9XG4gIFwiXFx1MDFERlwiOiBcImFcXHUwMzA4XFx1MDMwNFwiLFxuICAvLyDHnyA9IFxcXCJcXD17YX1cbiAgXCJcXHhFM1wiOiBcImFcXHUwMzAzXCIsXG4gIC8vIMOjID0gXFx+e2F9XG4gIFwiXFx1MDEwMVwiOiBcImFcXHUwMzA0XCIsXG4gIC8vIMSBID0gXFw9e2F9XG4gIFwiXFx1MDEwM1wiOiBcImFcXHUwMzA2XCIsXG4gIC8vIMSDID0gXFx1e2F9XG4gIFwiXFx1MUVBRlwiOiBcImFcXHUwMzA2XFx1MDMwMVwiLFxuICAvLyDhuq8gPSBcXHVcXCd7YX1cbiAgXCJcXHUxRUIxXCI6IFwiYVxcdTAzMDZcXHUwMzAwXCIsXG4gIC8vIOG6sSA9IFxcdVxcYHthfVxuICBcIlxcdTFFQjVcIjogXCJhXFx1MDMwNlxcdTAzMDNcIixcbiAgLy8g4bq1ID0gXFx1XFx+e2F9XG4gIFwiXFx1MDFDRVwiOiBcImFcXHUwMzBDXCIsXG4gIC8vIMeOID0gXFx2e2F9XG4gIFwiXFx4RTJcIjogXCJhXFx1MDMwMlwiLFxuICAvLyDDoiA9IFxcXnthfVxuICBcIlxcdTFFQTVcIjogXCJhXFx1MDMwMlxcdTAzMDFcIixcbiAgLy8g4bqlID0gXFxeXFwne2F9XG4gIFwiXFx1MUVBN1wiOiBcImFcXHUwMzAyXFx1MDMwMFwiLFxuICAvLyDhuqcgPSBcXF5cXGB7YX1cbiAgXCJcXHUxRUFCXCI6IFwiYVxcdTAzMDJcXHUwMzAzXCIsXG4gIC8vIOG6qyA9IFxcXlxcfnthfVxuICBcIlxcdTAyMjdcIjogXCJhXFx1MDMwN1wiLFxuICAvLyDIpyA9IFxcLnthfVxuICBcIlxcdTAxRTFcIjogXCJhXFx1MDMwN1xcdTAzMDRcIixcbiAgLy8gx6EgPSBcXC5cXD17YX1cbiAgXCJcXHhFNVwiOiBcImFcXHUwMzBBXCIsXG4gIC8vIMOlID0gXFxye2F9XG4gIFwiXFx1MDFGQlwiOiBcImFcXHUwMzBBXFx1MDMwMVwiLFxuICAvLyDHuyA9IFxcclxcJ3thfVxuICBcIlxcdTFFMDNcIjogXCJiXFx1MDMwN1wiLFxuICAvLyDhuIMgPSBcXC57Yn1cbiAgXCJcXHUwMTA3XCI6IFwiY1xcdTAzMDFcIixcbiAgLy8gxIcgPSBcXCd7Y31cbiAgXCJcXHUwMTBEXCI6IFwiY1xcdTAzMENcIixcbiAgLy8gxI0gPSBcXHZ7Y31cbiAgXCJcXHUwMTA5XCI6IFwiY1xcdTAzMDJcIixcbiAgLy8gxIkgPSBcXF57Y31cbiAgXCJcXHUwMTBCXCI6IFwiY1xcdTAzMDdcIixcbiAgLy8gxIsgPSBcXC57Y31cbiAgXCJcXHUwMTBGXCI6IFwiZFxcdTAzMENcIixcbiAgLy8gxI8gPSBcXHZ7ZH1cbiAgXCJcXHUxRTBCXCI6IFwiZFxcdTAzMDdcIixcbiAgLy8g4biLID0gXFwue2R9XG4gIFwiXFx4RTlcIjogXCJlXFx1MDMwMVwiLFxuICAvLyDDqSA9IFxcJ3tlfVxuICBcIlxceEU4XCI6IFwiZVxcdTAzMDBcIixcbiAgLy8gw6ggPSBcXGB7ZX1cbiAgXCJcXHhFQlwiOiBcImVcXHUwMzA4XCIsXG4gIC8vIMOrID0gXFxcIntlfVxuICBcIlxcdTFFQkRcIjogXCJlXFx1MDMwM1wiLFxuICAvLyDhur0gPSBcXH57ZX1cbiAgXCJcXHUwMTEzXCI6IFwiZVxcdTAzMDRcIixcbiAgLy8gxJMgPSBcXD17ZX1cbiAgXCJcXHUxRTE3XCI6IFwiZVxcdTAzMDRcXHUwMzAxXCIsXG4gIC8vIOG4lyA9IFxcPVxcJ3tlfVxuICBcIlxcdTFFMTVcIjogXCJlXFx1MDMwNFxcdTAzMDBcIixcbiAgLy8g4biVID0gXFw9XFxge2V9XG4gIFwiXFx1MDExNVwiOiBcImVcXHUwMzA2XCIsXG4gIC8vIMSVID0gXFx1e2V9XG4gIFwiXFx1MDExQlwiOiBcImVcXHUwMzBDXCIsXG4gIC8vIMSbID0gXFx2e2V9XG4gIFwiXFx4RUFcIjogXCJlXFx1MDMwMlwiLFxuICAvLyDDqiA9IFxcXntlfVxuICBcIlxcdTFFQkZcIjogXCJlXFx1MDMwMlxcdTAzMDFcIixcbiAgLy8g4bq/ID0gXFxeXFwne2V9XG4gIFwiXFx1MUVDMVwiOiBcImVcXHUwMzAyXFx1MDMwMFwiLFxuICAvLyDhu4EgPSBcXF5cXGB7ZX1cbiAgXCJcXHUxRUM1XCI6IFwiZVxcdTAzMDJcXHUwMzAzXCIsXG4gIC8vIOG7hSA9IFxcXlxcfntlfVxuICBcIlxcdTAxMTdcIjogXCJlXFx1MDMwN1wiLFxuICAvLyDElyA9IFxcLntlfVxuICBcIlxcdTFFMUZcIjogXCJmXFx1MDMwN1wiLFxuICAvLyDhuJ8gPSBcXC57Zn1cbiAgXCJcXHUwMUY1XCI6IFwiZ1xcdTAzMDFcIixcbiAgLy8gx7UgPSBcXCd7Z31cbiAgXCJcXHUxRTIxXCI6IFwiZ1xcdTAzMDRcIixcbiAgLy8g4bihID0gXFw9e2d9XG4gIFwiXFx1MDExRlwiOiBcImdcXHUwMzA2XCIsXG4gIC8vIMSfID0gXFx1e2d9XG4gIFwiXFx1MDFFN1wiOiBcImdcXHUwMzBDXCIsXG4gIC8vIMenID0gXFx2e2d9XG4gIFwiXFx1MDExRFwiOiBcImdcXHUwMzAyXCIsXG4gIC8vIMSdID0gXFxee2d9XG4gIFwiXFx1MDEyMVwiOiBcImdcXHUwMzA3XCIsXG4gIC8vIMShID0gXFwue2d9XG4gIFwiXFx1MUUyN1wiOiBcImhcXHUwMzA4XCIsXG4gIC8vIOG4pyA9IFxcXCJ7aH1cbiAgXCJcXHUwMjFGXCI6IFwiaFxcdTAzMENcIixcbiAgLy8gyJ8gPSBcXHZ7aH1cbiAgXCJcXHUwMTI1XCI6IFwiaFxcdTAzMDJcIixcbiAgLy8gxKUgPSBcXF57aH1cbiAgXCJcXHUxRTIzXCI6IFwiaFxcdTAzMDdcIixcbiAgLy8g4bijID0gXFwue2h9XG4gIFwiXFx4RURcIjogXCJpXFx1MDMwMVwiLFxuICAvLyDDrSA9IFxcJ3tpfVxuICBcIlxceEVDXCI6IFwiaVxcdTAzMDBcIixcbiAgLy8gw6wgPSBcXGB7aX1cbiAgXCJcXHhFRlwiOiBcImlcXHUwMzA4XCIsXG4gIC8vIMOvID0gXFxcIntpfVxuICBcIlxcdTFFMkZcIjogXCJpXFx1MDMwOFxcdTAzMDFcIixcbiAgLy8g4bivID0gXFxcIlxcJ3tpfVxuICBcIlxcdTAxMjlcIjogXCJpXFx1MDMwM1wiLFxuICAvLyDEqSA9IFxcfntpfVxuICBcIlxcdTAxMkJcIjogXCJpXFx1MDMwNFwiLFxuICAvLyDEqyA9IFxcPXtpfVxuICBcIlxcdTAxMkRcIjogXCJpXFx1MDMwNlwiLFxuICAvLyDErSA9IFxcdXtpfVxuICBcIlxcdTAxRDBcIjogXCJpXFx1MDMwQ1wiLFxuICAvLyDHkCA9IFxcdntpfVxuICBcIlxceEVFXCI6IFwiaVxcdTAzMDJcIixcbiAgLy8gw64gPSBcXF57aX1cbiAgXCJcXHUwMUYwXCI6IFwialxcdTAzMENcIixcbiAgLy8gx7AgPSBcXHZ7an1cbiAgXCJcXHUwMTM1XCI6IFwialxcdTAzMDJcIixcbiAgLy8gxLUgPSBcXF57an1cbiAgXCJcXHUxRTMxXCI6IFwia1xcdTAzMDFcIixcbiAgLy8g4bixID0gXFwne2t9XG4gIFwiXFx1MDFFOVwiOiBcImtcXHUwMzBDXCIsXG4gIC8vIMepID0gXFx2e2t9XG4gIFwiXFx1MDEzQVwiOiBcImxcXHUwMzAxXCIsXG4gIC8vIMS6ID0gXFwne2x9XG4gIFwiXFx1MDEzRVwiOiBcImxcXHUwMzBDXCIsXG4gIC8vIMS+ID0gXFx2e2x9XG4gIFwiXFx1MUUzRlwiOiBcIm1cXHUwMzAxXCIsXG4gIC8vIOG4vyA9IFxcJ3ttfVxuICBcIlxcdTFFNDFcIjogXCJtXFx1MDMwN1wiLFxuICAvLyDhuYEgPSBcXC57bX1cbiAgXCJcXHUwMTQ0XCI6IFwiblxcdTAzMDFcIixcbiAgLy8gxYQgPSBcXCd7bn1cbiAgXCJcXHUwMUY5XCI6IFwiblxcdTAzMDBcIixcbiAgLy8gx7kgPSBcXGB7bn1cbiAgXCJcXHhGMVwiOiBcIm5cXHUwMzAzXCIsXG4gIC8vIMOxID0gXFx+e259XG4gIFwiXFx1MDE0OFwiOiBcIm5cXHUwMzBDXCIsXG4gIC8vIMWIID0gXFx2e259XG4gIFwiXFx1MUU0NVwiOiBcIm5cXHUwMzA3XCIsXG4gIC8vIOG5hSA9IFxcLntufVxuICBcIlxceEYzXCI6IFwib1xcdTAzMDFcIixcbiAgLy8gw7MgPSBcXCd7b31cbiAgXCJcXHhGMlwiOiBcIm9cXHUwMzAwXCIsXG4gIC8vIMOyID0gXFxge299XG4gIFwiXFx4RjZcIjogXCJvXFx1MDMwOFwiLFxuICAvLyDDtiA9IFxcXCJ7b31cbiAgXCJcXHUwMjJCXCI6IFwib1xcdTAzMDhcXHUwMzA0XCIsXG4gIC8vIMirID0gXFxcIlxcPXtvfVxuICBcIlxceEY1XCI6IFwib1xcdTAzMDNcIixcbiAgLy8gw7UgPSBcXH57b31cbiAgXCJcXHUxRTREXCI6IFwib1xcdTAzMDNcXHUwMzAxXCIsXG4gIC8vIOG5jSA9IFxcflxcJ3tvfVxuICBcIlxcdTFFNEZcIjogXCJvXFx1MDMwM1xcdTAzMDhcIixcbiAgLy8g4bmPID0gXFx+XFxcIntvfVxuICBcIlxcdTAyMkRcIjogXCJvXFx1MDMwM1xcdTAzMDRcIixcbiAgLy8gyK0gPSBcXH5cXD17b31cbiAgXCJcXHUwMTREXCI6IFwib1xcdTAzMDRcIixcbiAgLy8gxY0gPSBcXD17b31cbiAgXCJcXHUxRTUzXCI6IFwib1xcdTAzMDRcXHUwMzAxXCIsXG4gIC8vIOG5kyA9IFxcPVxcJ3tvfVxuICBcIlxcdTFFNTFcIjogXCJvXFx1MDMwNFxcdTAzMDBcIixcbiAgLy8g4bmRID0gXFw9XFxge299XG4gIFwiXFx1MDE0RlwiOiBcIm9cXHUwMzA2XCIsXG4gIC8vIMWPID0gXFx1e299XG4gIFwiXFx1MDFEMlwiOiBcIm9cXHUwMzBDXCIsXG4gIC8vIMeSID0gXFx2e299XG4gIFwiXFx4RjRcIjogXCJvXFx1MDMwMlwiLFxuICAvLyDDtCA9IFxcXntvfVxuICBcIlxcdTFFRDFcIjogXCJvXFx1MDMwMlxcdTAzMDFcIixcbiAgLy8g4buRID0gXFxeXFwne299XG4gIFwiXFx1MUVEM1wiOiBcIm9cXHUwMzAyXFx1MDMwMFwiLFxuICAvLyDhu5MgPSBcXF5cXGB7b31cbiAgXCJcXHUxRUQ3XCI6IFwib1xcdTAzMDJcXHUwMzAzXCIsXG4gIC8vIOG7lyA9IFxcXlxcfntvfVxuICBcIlxcdTAyMkZcIjogXCJvXFx1MDMwN1wiLFxuICAvLyDIryA9IFxcLntvfVxuICBcIlxcdTAyMzFcIjogXCJvXFx1MDMwN1xcdTAzMDRcIixcbiAgLy8gyLEgPSBcXC5cXD17b31cbiAgXCJcXHUwMTUxXCI6IFwib1xcdTAzMEJcIixcbiAgLy8gxZEgPSBcXEh7b31cbiAgXCJcXHUxRTU1XCI6IFwicFxcdTAzMDFcIixcbiAgLy8g4bmVID0gXFwne3B9XG4gIFwiXFx1MUU1N1wiOiBcInBcXHUwMzA3XCIsXG4gIC8vIOG5lyA9IFxcLntwfVxuICBcIlxcdTAxNTVcIjogXCJyXFx1MDMwMVwiLFxuICAvLyDFlSA9IFxcJ3tyfVxuICBcIlxcdTAxNTlcIjogXCJyXFx1MDMwQ1wiLFxuICAvLyDFmSA9IFxcdntyfVxuICBcIlxcdTFFNTlcIjogXCJyXFx1MDMwN1wiLFxuICAvLyDhuZkgPSBcXC57cn1cbiAgXCJcXHUwMTVCXCI6IFwic1xcdTAzMDFcIixcbiAgLy8gxZsgPSBcXCd7c31cbiAgXCJcXHUxRTY1XCI6IFwic1xcdTAzMDFcXHUwMzA3XCIsXG4gIC8vIOG5pSA9IFxcJ1xcLntzfVxuICBcIlxcdTAxNjFcIjogXCJzXFx1MDMwQ1wiLFxuICAvLyDFoSA9IFxcdntzfVxuICBcIlxcdTFFNjdcIjogXCJzXFx1MDMwQ1xcdTAzMDdcIixcbiAgLy8g4bmnID0gXFx2XFwue3N9XG4gIFwiXFx1MDE1RFwiOiBcInNcXHUwMzAyXCIsXG4gIC8vIMWdID0gXFxee3N9XG4gIFwiXFx1MUU2MVwiOiBcInNcXHUwMzA3XCIsXG4gIC8vIOG5oSA9IFxcLntzfVxuICBcIlxcdTFFOTdcIjogXCJ0XFx1MDMwOFwiLFxuICAvLyDhupcgPSBcXFwie3R9XG4gIFwiXFx1MDE2NVwiOiBcInRcXHUwMzBDXCIsXG4gIC8vIMWlID0gXFx2e3R9XG4gIFwiXFx1MUU2QlwiOiBcInRcXHUwMzA3XCIsXG4gIC8vIOG5qyA9IFxcLnt0fVxuICBcIlxceEZBXCI6IFwidVxcdTAzMDFcIixcbiAgLy8gw7ogPSBcXCd7dX1cbiAgXCJcXHhGOVwiOiBcInVcXHUwMzAwXCIsXG4gIC8vIMO5ID0gXFxge3V9XG4gIFwiXFx4RkNcIjogXCJ1XFx1MDMwOFwiLFxuICAvLyDDvCA9IFxcXCJ7dX1cbiAgXCJcXHUwMUQ4XCI6IFwidVxcdTAzMDhcXHUwMzAxXCIsXG4gIC8vIMeYID0gXFxcIlxcJ3t1fVxuICBcIlxcdTAxRENcIjogXCJ1XFx1MDMwOFxcdTAzMDBcIixcbiAgLy8gx5wgPSBcXFwiXFxge3V9XG4gIFwiXFx1MDFENlwiOiBcInVcXHUwMzA4XFx1MDMwNFwiLFxuICAvLyDHliA9IFxcXCJcXD17dX1cbiAgXCJcXHUwMURBXCI6IFwidVxcdTAzMDhcXHUwMzBDXCIsXG4gIC8vIMeaID0gXFxcIlxcdnt1fVxuICBcIlxcdTAxNjlcIjogXCJ1XFx1MDMwM1wiLFxuICAvLyDFqSA9IFxcfnt1fVxuICBcIlxcdTFFNzlcIjogXCJ1XFx1MDMwM1xcdTAzMDFcIixcbiAgLy8g4bm5ID0gXFx+XFwne3V9XG4gIFwiXFx1MDE2QlwiOiBcInVcXHUwMzA0XCIsXG4gIC8vIMWrID0gXFw9e3V9XG4gIFwiXFx1MUU3QlwiOiBcInVcXHUwMzA0XFx1MDMwOFwiLFxuICAvLyDhubsgPSBcXD1cXFwie3V9XG4gIFwiXFx1MDE2RFwiOiBcInVcXHUwMzA2XCIsXG4gIC8vIMWtID0gXFx1e3V9XG4gIFwiXFx1MDFENFwiOiBcInVcXHUwMzBDXCIsXG4gIC8vIMeUID0gXFx2e3V9XG4gIFwiXFx4RkJcIjogXCJ1XFx1MDMwMlwiLFxuICAvLyDDuyA9IFxcXnt1fVxuICBcIlxcdTAxNkZcIjogXCJ1XFx1MDMwQVwiLFxuICAvLyDFryA9IFxccnt1fVxuICBcIlxcdTAxNzFcIjogXCJ1XFx1MDMwQlwiLFxuICAvLyDFsSA9IFxcSHt1fVxuICBcIlxcdTFFN0RcIjogXCJ2XFx1MDMwM1wiLFxuICAvLyDhub0gPSBcXH57dn1cbiAgXCJcXHUxRTgzXCI6IFwid1xcdTAzMDFcIixcbiAgLy8g4bqDID0gXFwne3d9XG4gIFwiXFx1MUU4MVwiOiBcIndcXHUwMzAwXCIsXG4gIC8vIOG6gSA9IFxcYHt3fVxuICBcIlxcdTFFODVcIjogXCJ3XFx1MDMwOFwiLFxuICAvLyDhuoUgPSBcXFwie3d9XG4gIFwiXFx1MDE3NVwiOiBcIndcXHUwMzAyXCIsXG4gIC8vIMW1ID0gXFxee3d9XG4gIFwiXFx1MUU4N1wiOiBcIndcXHUwMzA3XCIsXG4gIC8vIOG6hyA9IFxcLnt3fVxuICBcIlxcdTFFOThcIjogXCJ3XFx1MDMwQVwiLFxuICAvLyDhupggPSBcXHJ7d31cbiAgXCJcXHUxRThEXCI6IFwieFxcdTAzMDhcIixcbiAgLy8g4bqNID0gXFxcInt4fVxuICBcIlxcdTFFOEJcIjogXCJ4XFx1MDMwN1wiLFxuICAvLyDhuosgPSBcXC57eH1cbiAgXCJcXHhGRFwiOiBcInlcXHUwMzAxXCIsXG4gIC8vIMO9ID0gXFwne3l9XG4gIFwiXFx1MUVGM1wiOiBcInlcXHUwMzAwXCIsXG4gIC8vIOG7syA9IFxcYHt5fVxuICBcIlxceEZGXCI6IFwieVxcdTAzMDhcIixcbiAgLy8gw78gPSBcXFwie3l9XG4gIFwiXFx1MUVGOVwiOiBcInlcXHUwMzAzXCIsXG4gIC8vIOG7uSA9IFxcfnt5fVxuICBcIlxcdTAyMzNcIjogXCJ5XFx1MDMwNFwiLFxuICAvLyDIsyA9IFxcPXt5fVxuICBcIlxcdTAxNzdcIjogXCJ5XFx1MDMwMlwiLFxuICAvLyDFtyA9IFxcXnt5fVxuICBcIlxcdTFFOEZcIjogXCJ5XFx1MDMwN1wiLFxuICAvLyDhuo8gPSBcXC57eX1cbiAgXCJcXHUxRTk5XCI6IFwieVxcdTAzMEFcIixcbiAgLy8g4bqZID0gXFxye3l9XG4gIFwiXFx1MDE3QVwiOiBcInpcXHUwMzAxXCIsXG4gIC8vIMW6ID0gXFwne3p9XG4gIFwiXFx1MDE3RVwiOiBcInpcXHUwMzBDXCIsXG4gIC8vIMW+ID0gXFx2e3p9XG4gIFwiXFx1MUU5MVwiOiBcInpcXHUwMzAyXCIsXG4gIC8vIOG6kSA9IFxcXnt6fVxuICBcIlxcdTAxN0NcIjogXCJ6XFx1MDMwN1wiLFxuICAvLyDFvCA9IFxcLnt6fVxuICBcIlxceEMxXCI6IFwiQVxcdTAzMDFcIixcbiAgLy8gw4EgPSBcXCd7QX1cbiAgXCJcXHhDMFwiOiBcIkFcXHUwMzAwXCIsXG4gIC8vIMOAID0gXFxge0F9XG4gIFwiXFx4QzRcIjogXCJBXFx1MDMwOFwiLFxuICAvLyDDhCA9IFxcXCJ7QX1cbiAgXCJcXHUwMURFXCI6IFwiQVxcdTAzMDhcXHUwMzA0XCIsXG4gIC8vIMeeID0gXFxcIlxcPXtBfVxuICBcIlxceEMzXCI6IFwiQVxcdTAzMDNcIixcbiAgLy8gw4MgPSBcXH57QX1cbiAgXCJcXHUwMTAwXCI6IFwiQVxcdTAzMDRcIixcbiAgLy8gxIAgPSBcXD17QX1cbiAgXCJcXHUwMTAyXCI6IFwiQVxcdTAzMDZcIixcbiAgLy8gxIIgPSBcXHV7QX1cbiAgXCJcXHUxRUFFXCI6IFwiQVxcdTAzMDZcXHUwMzAxXCIsXG4gIC8vIOG6riA9IFxcdVxcJ3tBfVxuICBcIlxcdTFFQjBcIjogXCJBXFx1MDMwNlxcdTAzMDBcIixcbiAgLy8g4bqwID0gXFx1XFxge0F9XG4gIFwiXFx1MUVCNFwiOiBcIkFcXHUwMzA2XFx1MDMwM1wiLFxuICAvLyDhurQgPSBcXHVcXH57QX1cbiAgXCJcXHUwMUNEXCI6IFwiQVxcdTAzMENcIixcbiAgLy8gx40gPSBcXHZ7QX1cbiAgXCJcXHhDMlwiOiBcIkFcXHUwMzAyXCIsXG4gIC8vIMOCID0gXFxee0F9XG4gIFwiXFx1MUVBNFwiOiBcIkFcXHUwMzAyXFx1MDMwMVwiLFxuICAvLyDhuqQgPSBcXF5cXCd7QX1cbiAgXCJcXHUxRUE2XCI6IFwiQVxcdTAzMDJcXHUwMzAwXCIsXG4gIC8vIOG6piA9IFxcXlxcYHtBfVxuICBcIlxcdTFFQUFcIjogXCJBXFx1MDMwMlxcdTAzMDNcIixcbiAgLy8g4bqqID0gXFxeXFx+e0F9XG4gIFwiXFx1MDIyNlwiOiBcIkFcXHUwMzA3XCIsXG4gIC8vIMimID0gXFwue0F9XG4gIFwiXFx1MDFFMFwiOiBcIkFcXHUwMzA3XFx1MDMwNFwiLFxuICAvLyDHoCA9IFxcLlxcPXtBfVxuICBcIlxceEM1XCI6IFwiQVxcdTAzMEFcIixcbiAgLy8gw4UgPSBcXHJ7QX1cbiAgXCJcXHUwMUZBXCI6IFwiQVxcdTAzMEFcXHUwMzAxXCIsXG4gIC8vIMe6ID0gXFxyXFwne0F9XG4gIFwiXFx1MUUwMlwiOiBcIkJcXHUwMzA3XCIsXG4gIC8vIOG4giA9IFxcLntCfVxuICBcIlxcdTAxMDZcIjogXCJDXFx1MDMwMVwiLFxuICAvLyDEhiA9IFxcJ3tDfVxuICBcIlxcdTAxMENcIjogXCJDXFx1MDMwQ1wiLFxuICAvLyDEjCA9IFxcdntDfVxuICBcIlxcdTAxMDhcIjogXCJDXFx1MDMwMlwiLFxuICAvLyDEiCA9IFxcXntDfVxuICBcIlxcdTAxMEFcIjogXCJDXFx1MDMwN1wiLFxuICAvLyDEiiA9IFxcLntDfVxuICBcIlxcdTAxMEVcIjogXCJEXFx1MDMwQ1wiLFxuICAvLyDEjiA9IFxcdntEfVxuICBcIlxcdTFFMEFcIjogXCJEXFx1MDMwN1wiLFxuICAvLyDhuIogPSBcXC57RH1cbiAgXCJcXHhDOVwiOiBcIkVcXHUwMzAxXCIsXG4gIC8vIMOJID0gXFwne0V9XG4gIFwiXFx4QzhcIjogXCJFXFx1MDMwMFwiLFxuICAvLyDDiCA9IFxcYHtFfVxuICBcIlxceENCXCI6IFwiRVxcdTAzMDhcIixcbiAgLy8gw4sgPSBcXFwie0V9XG4gIFwiXFx1MUVCQ1wiOiBcIkVcXHUwMzAzXCIsXG4gIC8vIOG6vCA9IFxcfntFfVxuICBcIlxcdTAxMTJcIjogXCJFXFx1MDMwNFwiLFxuICAvLyDEkiA9IFxcPXtFfVxuICBcIlxcdTFFMTZcIjogXCJFXFx1MDMwNFxcdTAzMDFcIixcbiAgLy8g4biWID0gXFw9XFwne0V9XG4gIFwiXFx1MUUxNFwiOiBcIkVcXHUwMzA0XFx1MDMwMFwiLFxuICAvLyDhuJQgPSBcXD1cXGB7RX1cbiAgXCJcXHUwMTE0XCI6IFwiRVxcdTAzMDZcIixcbiAgLy8gxJQgPSBcXHV7RX1cbiAgXCJcXHUwMTFBXCI6IFwiRVxcdTAzMENcIixcbiAgLy8gxJogPSBcXHZ7RX1cbiAgXCJcXHhDQVwiOiBcIkVcXHUwMzAyXCIsXG4gIC8vIMOKID0gXFxee0V9XG4gIFwiXFx1MUVCRVwiOiBcIkVcXHUwMzAyXFx1MDMwMVwiLFxuICAvLyDhur4gPSBcXF5cXCd7RX1cbiAgXCJcXHUxRUMwXCI6IFwiRVxcdTAzMDJcXHUwMzAwXCIsXG4gIC8vIOG7gCA9IFxcXlxcYHtFfVxuICBcIlxcdTFFQzRcIjogXCJFXFx1MDMwMlxcdTAzMDNcIixcbiAgLy8g4buEID0gXFxeXFx+e0V9XG4gIFwiXFx1MDExNlwiOiBcIkVcXHUwMzA3XCIsXG4gIC8vIMSWID0gXFwue0V9XG4gIFwiXFx1MUUxRVwiOiBcIkZcXHUwMzA3XCIsXG4gIC8vIOG4niA9IFxcLntGfVxuICBcIlxcdTAxRjRcIjogXCJHXFx1MDMwMVwiLFxuICAvLyDHtCA9IFxcJ3tHfVxuICBcIlxcdTFFMjBcIjogXCJHXFx1MDMwNFwiLFxuICAvLyDhuKAgPSBcXD17R31cbiAgXCJcXHUwMTFFXCI6IFwiR1xcdTAzMDZcIixcbiAgLy8gxJ4gPSBcXHV7R31cbiAgXCJcXHUwMUU2XCI6IFwiR1xcdTAzMENcIixcbiAgLy8gx6YgPSBcXHZ7R31cbiAgXCJcXHUwMTFDXCI6IFwiR1xcdTAzMDJcIixcbiAgLy8gxJwgPSBcXF57R31cbiAgXCJcXHUwMTIwXCI6IFwiR1xcdTAzMDdcIixcbiAgLy8gxKAgPSBcXC57R31cbiAgXCJcXHUxRTI2XCI6IFwiSFxcdTAzMDhcIixcbiAgLy8g4bimID0gXFxcIntIfVxuICBcIlxcdTAyMUVcIjogXCJIXFx1MDMwQ1wiLFxuICAvLyDIniA9IFxcdntIfVxuICBcIlxcdTAxMjRcIjogXCJIXFx1MDMwMlwiLFxuICAvLyDEpCA9IFxcXntIfVxuICBcIlxcdTFFMjJcIjogXCJIXFx1MDMwN1wiLFxuICAvLyDhuKIgPSBcXC57SH1cbiAgXCJcXHhDRFwiOiBcIklcXHUwMzAxXCIsXG4gIC8vIMONID0gXFwne0l9XG4gIFwiXFx4Q0NcIjogXCJJXFx1MDMwMFwiLFxuICAvLyDDjCA9IFxcYHtJfVxuICBcIlxceENGXCI6IFwiSVxcdTAzMDhcIixcbiAgLy8gw48gPSBcXFwie0l9XG4gIFwiXFx1MUUyRVwiOiBcIklcXHUwMzA4XFx1MDMwMVwiLFxuICAvLyDhuK4gPSBcXFwiXFwne0l9XG4gIFwiXFx1MDEyOFwiOiBcIklcXHUwMzAzXCIsXG4gIC8vIMSoID0gXFx+e0l9XG4gIFwiXFx1MDEyQVwiOiBcIklcXHUwMzA0XCIsXG4gIC8vIMSqID0gXFw9e0l9XG4gIFwiXFx1MDEyQ1wiOiBcIklcXHUwMzA2XCIsXG4gIC8vIMSsID0gXFx1e0l9XG4gIFwiXFx1MDFDRlwiOiBcIklcXHUwMzBDXCIsXG4gIC8vIMePID0gXFx2e0l9XG4gIFwiXFx4Q0VcIjogXCJJXFx1MDMwMlwiLFxuICAvLyDDjiA9IFxcXntJfVxuICBcIlxcdTAxMzBcIjogXCJJXFx1MDMwN1wiLFxuICAvLyDEsCA9IFxcLntJfVxuICBcIlxcdTAxMzRcIjogXCJKXFx1MDMwMlwiLFxuICAvLyDEtCA9IFxcXntKfVxuICBcIlxcdTFFMzBcIjogXCJLXFx1MDMwMVwiLFxuICAvLyDhuLAgPSBcXCd7S31cbiAgXCJcXHUwMUU4XCI6IFwiS1xcdTAzMENcIixcbiAgLy8gx6ggPSBcXHZ7S31cbiAgXCJcXHUwMTM5XCI6IFwiTFxcdTAzMDFcIixcbiAgLy8gxLkgPSBcXCd7TH1cbiAgXCJcXHUwMTNEXCI6IFwiTFxcdTAzMENcIixcbiAgLy8gxL0gPSBcXHZ7TH1cbiAgXCJcXHUxRTNFXCI6IFwiTVxcdTAzMDFcIixcbiAgLy8g4bi+ID0gXFwne019XG4gIFwiXFx1MUU0MFwiOiBcIk1cXHUwMzA3XCIsXG4gIC8vIOG5gCA9IFxcLntNfVxuICBcIlxcdTAxNDNcIjogXCJOXFx1MDMwMVwiLFxuICAvLyDFgyA9IFxcJ3tOfVxuICBcIlxcdTAxRjhcIjogXCJOXFx1MDMwMFwiLFxuICAvLyDHuCA9IFxcYHtOfVxuICBcIlxceEQxXCI6IFwiTlxcdTAzMDNcIixcbiAgLy8gw5EgPSBcXH57Tn1cbiAgXCJcXHUwMTQ3XCI6IFwiTlxcdTAzMENcIixcbiAgLy8gxYcgPSBcXHZ7Tn1cbiAgXCJcXHUxRTQ0XCI6IFwiTlxcdTAzMDdcIixcbiAgLy8g4bmEID0gXFwue059XG4gIFwiXFx4RDNcIjogXCJPXFx1MDMwMVwiLFxuICAvLyDDkyA9IFxcJ3tPfVxuICBcIlxceEQyXCI6IFwiT1xcdTAzMDBcIixcbiAgLy8gw5IgPSBcXGB7T31cbiAgXCJcXHhENlwiOiBcIk9cXHUwMzA4XCIsXG4gIC8vIMOWID0gXFxcIntPfVxuICBcIlxcdTAyMkFcIjogXCJPXFx1MDMwOFxcdTAzMDRcIixcbiAgLy8gyKogPSBcXFwiXFw9e099XG4gIFwiXFx4RDVcIjogXCJPXFx1MDMwM1wiLFxuICAvLyDDlSA9IFxcfntPfVxuICBcIlxcdTFFNENcIjogXCJPXFx1MDMwM1xcdTAzMDFcIixcbiAgLy8g4bmMID0gXFx+XFwne099XG4gIFwiXFx1MUU0RVwiOiBcIk9cXHUwMzAzXFx1MDMwOFwiLFxuICAvLyDhuY4gPSBcXH5cXFwie099XG4gIFwiXFx1MDIyQ1wiOiBcIk9cXHUwMzAzXFx1MDMwNFwiLFxuICAvLyDIrCA9IFxcflxcPXtPfVxuICBcIlxcdTAxNENcIjogXCJPXFx1MDMwNFwiLFxuICAvLyDFjCA9IFxcPXtPfVxuICBcIlxcdTFFNTJcIjogXCJPXFx1MDMwNFxcdTAzMDFcIixcbiAgLy8g4bmSID0gXFw9XFwne099XG4gIFwiXFx1MUU1MFwiOiBcIk9cXHUwMzA0XFx1MDMwMFwiLFxuICAvLyDhuZAgPSBcXD1cXGB7T31cbiAgXCJcXHUwMTRFXCI6IFwiT1xcdTAzMDZcIixcbiAgLy8gxY4gPSBcXHV7T31cbiAgXCJcXHUwMUQxXCI6IFwiT1xcdTAzMENcIixcbiAgLy8gx5EgPSBcXHZ7T31cbiAgXCJcXHhENFwiOiBcIk9cXHUwMzAyXCIsXG4gIC8vIMOUID0gXFxee099XG4gIFwiXFx1MUVEMFwiOiBcIk9cXHUwMzAyXFx1MDMwMVwiLFxuICAvLyDhu5AgPSBcXF5cXCd7T31cbiAgXCJcXHUxRUQyXCI6IFwiT1xcdTAzMDJcXHUwMzAwXCIsXG4gIC8vIOG7kiA9IFxcXlxcYHtPfVxuICBcIlxcdTFFRDZcIjogXCJPXFx1MDMwMlxcdTAzMDNcIixcbiAgLy8g4buWID0gXFxeXFx+e099XG4gIFwiXFx1MDIyRVwiOiBcIk9cXHUwMzA3XCIsXG4gIC8vIMiuID0gXFwue099XG4gIFwiXFx1MDIzMFwiOiBcIk9cXHUwMzA3XFx1MDMwNFwiLFxuICAvLyDIsCA9IFxcLlxcPXtPfVxuICBcIlxcdTAxNTBcIjogXCJPXFx1MDMwQlwiLFxuICAvLyDFkCA9IFxcSHtPfVxuICBcIlxcdTFFNTRcIjogXCJQXFx1MDMwMVwiLFxuICAvLyDhuZQgPSBcXCd7UH1cbiAgXCJcXHUxRTU2XCI6IFwiUFxcdTAzMDdcIixcbiAgLy8g4bmWID0gXFwue1B9XG4gIFwiXFx1MDE1NFwiOiBcIlJcXHUwMzAxXCIsXG4gIC8vIMWUID0gXFwne1J9XG4gIFwiXFx1MDE1OFwiOiBcIlJcXHUwMzBDXCIsXG4gIC8vIMWYID0gXFx2e1J9XG4gIFwiXFx1MUU1OFwiOiBcIlJcXHUwMzA3XCIsXG4gIC8vIOG5mCA9IFxcLntSfVxuICBcIlxcdTAxNUFcIjogXCJTXFx1MDMwMVwiLFxuICAvLyDFmiA9IFxcJ3tTfVxuICBcIlxcdTFFNjRcIjogXCJTXFx1MDMwMVxcdTAzMDdcIixcbiAgLy8g4bmkID0gXFwnXFwue1N9XG4gIFwiXFx1MDE2MFwiOiBcIlNcXHUwMzBDXCIsXG4gIC8vIMWgID0gXFx2e1N9XG4gIFwiXFx1MUU2NlwiOiBcIlNcXHUwMzBDXFx1MDMwN1wiLFxuICAvLyDhuaYgPSBcXHZcXC57U31cbiAgXCJcXHUwMTVDXCI6IFwiU1xcdTAzMDJcIixcbiAgLy8gxZwgPSBcXF57U31cbiAgXCJcXHUxRTYwXCI6IFwiU1xcdTAzMDdcIixcbiAgLy8g4bmgID0gXFwue1N9XG4gIFwiXFx1MDE2NFwiOiBcIlRcXHUwMzBDXCIsXG4gIC8vIMWkID0gXFx2e1R9XG4gIFwiXFx1MUU2QVwiOiBcIlRcXHUwMzA3XCIsXG4gIC8vIOG5qiA9IFxcLntUfVxuICBcIlxceERBXCI6IFwiVVxcdTAzMDFcIixcbiAgLy8gw5ogPSBcXCd7VX1cbiAgXCJcXHhEOVwiOiBcIlVcXHUwMzAwXCIsXG4gIC8vIMOZID0gXFxge1V9XG4gIFwiXFx4RENcIjogXCJVXFx1MDMwOFwiLFxuICAvLyDDnCA9IFxcXCJ7VX1cbiAgXCJcXHUwMUQ3XCI6IFwiVVxcdTAzMDhcXHUwMzAxXCIsXG4gIC8vIMeXID0gXFxcIlxcJ3tVfVxuICBcIlxcdTAxREJcIjogXCJVXFx1MDMwOFxcdTAzMDBcIixcbiAgLy8gx5sgPSBcXFwiXFxge1V9XG4gIFwiXFx1MDFENVwiOiBcIlVcXHUwMzA4XFx1MDMwNFwiLFxuICAvLyDHlSA9IFxcXCJcXD17VX1cbiAgXCJcXHUwMUQ5XCI6IFwiVVxcdTAzMDhcXHUwMzBDXCIsXG4gIC8vIMeZID0gXFxcIlxcdntVfVxuICBcIlxcdTAxNjhcIjogXCJVXFx1MDMwM1wiLFxuICAvLyDFqCA9IFxcfntVfVxuICBcIlxcdTFFNzhcIjogXCJVXFx1MDMwM1xcdTAzMDFcIixcbiAgLy8g4bm4ID0gXFx+XFwne1V9XG4gIFwiXFx1MDE2QVwiOiBcIlVcXHUwMzA0XCIsXG4gIC8vIMWqID0gXFw9e1V9XG4gIFwiXFx1MUU3QVwiOiBcIlVcXHUwMzA0XFx1MDMwOFwiLFxuICAvLyDhubogPSBcXD1cXFwie1V9XG4gIFwiXFx1MDE2Q1wiOiBcIlVcXHUwMzA2XCIsXG4gIC8vIMWsID0gXFx1e1V9XG4gIFwiXFx1MDFEM1wiOiBcIlVcXHUwMzBDXCIsXG4gIC8vIMeTID0gXFx2e1V9XG4gIFwiXFx4REJcIjogXCJVXFx1MDMwMlwiLFxuICAvLyDDmyA9IFxcXntVfVxuICBcIlxcdTAxNkVcIjogXCJVXFx1MDMwQVwiLFxuICAvLyDFriA9IFxccntVfVxuICBcIlxcdTAxNzBcIjogXCJVXFx1MDMwQlwiLFxuICAvLyDFsCA9IFxcSHtVfVxuICBcIlxcdTFFN0NcIjogXCJWXFx1MDMwM1wiLFxuICAvLyDhubwgPSBcXH57Vn1cbiAgXCJcXHUxRTgyXCI6IFwiV1xcdTAzMDFcIixcbiAgLy8g4bqCID0gXFwne1d9XG4gIFwiXFx1MUU4MFwiOiBcIldcXHUwMzAwXCIsXG4gIC8vIOG6gCA9IFxcYHtXfVxuICBcIlxcdTFFODRcIjogXCJXXFx1MDMwOFwiLFxuICAvLyDhuoQgPSBcXFwie1d9XG4gIFwiXFx1MDE3NFwiOiBcIldcXHUwMzAyXCIsXG4gIC8vIMW0ID0gXFxee1d9XG4gIFwiXFx1MUU4NlwiOiBcIldcXHUwMzA3XCIsXG4gIC8vIOG6hiA9IFxcLntXfVxuICBcIlxcdTFFOENcIjogXCJYXFx1MDMwOFwiLFxuICAvLyDhuowgPSBcXFwie1h9XG4gIFwiXFx1MUU4QVwiOiBcIlhcXHUwMzA3XCIsXG4gIC8vIOG6iiA9IFxcLntYfVxuICBcIlxceEREXCI6IFwiWVxcdTAzMDFcIixcbiAgLy8gw50gPSBcXCd7WX1cbiAgXCJcXHUxRUYyXCI6IFwiWVxcdTAzMDBcIixcbiAgLy8g4buyID0gXFxge1l9XG4gIFwiXFx1MDE3OFwiOiBcIllcXHUwMzA4XCIsXG4gIC8vIMW4ID0gXFxcIntZfVxuICBcIlxcdTFFRjhcIjogXCJZXFx1MDMwM1wiLFxuICAvLyDhu7ggPSBcXH57WX1cbiAgXCJcXHUwMjMyXCI6IFwiWVxcdTAzMDRcIixcbiAgLy8gyLIgPSBcXD17WX1cbiAgXCJcXHUwMTc2XCI6IFwiWVxcdTAzMDJcIixcbiAgLy8gxbYgPSBcXF57WX1cbiAgXCJcXHUxRThFXCI6IFwiWVxcdTAzMDdcIixcbiAgLy8g4bqOID0gXFwue1l9XG4gIFwiXFx1MDE3OVwiOiBcIlpcXHUwMzAxXCIsXG4gIC8vIMW5ID0gXFwne1p9XG4gIFwiXFx1MDE3RFwiOiBcIlpcXHUwMzBDXCIsXG4gIC8vIMW9ID0gXFx2e1p9XG4gIFwiXFx1MUU5MFwiOiBcIlpcXHUwMzAyXCIsXG4gIC8vIOG6kCA9IFxcXntafVxuICBcIlxcdTAxN0JcIjogXCJaXFx1MDMwN1wiLFxuICAvLyDFuyA9IFxcLntafVxuICBcIlxcdTAzQUNcIjogXCJcXHUwM0IxXFx1MDMwMVwiLFxuICAvLyDOrCA9IFxcJ3vOsX1cbiAgXCJcXHUxRjcwXCI6IFwiXFx1MDNCMVxcdTAzMDBcIixcbiAgLy8g4b2wID0gXFxge86xfVxuICBcIlxcdTFGQjFcIjogXCJcXHUwM0IxXFx1MDMwNFwiLFxuICAvLyDhvrEgPSBcXD17zrF9XG4gIFwiXFx1MUZCMFwiOiBcIlxcdTAzQjFcXHUwMzA2XCIsXG4gIC8vIOG+sCA9IFxcdXvOsX1cbiAgXCJcXHUwM0FEXCI6IFwiXFx1MDNCNVxcdTAzMDFcIixcbiAgLy8gzq0gPSBcXCd7zrV9XG4gIFwiXFx1MUY3MlwiOiBcIlxcdTAzQjVcXHUwMzAwXCIsXG4gIC8vIOG9siA9IFxcYHvOtX1cbiAgXCJcXHUwM0FFXCI6IFwiXFx1MDNCN1xcdTAzMDFcIixcbiAgLy8gzq4gPSBcXCd7zrd9XG4gIFwiXFx1MUY3NFwiOiBcIlxcdTAzQjdcXHUwMzAwXCIsXG4gIC8vIOG9tCA9IFxcYHvOt31cbiAgXCJcXHUwM0FGXCI6IFwiXFx1MDNCOVxcdTAzMDFcIixcbiAgLy8gzq8gPSBcXCd7zrl9XG4gIFwiXFx1MUY3NlwiOiBcIlxcdTAzQjlcXHUwMzAwXCIsXG4gIC8vIOG9tiA9IFxcYHvOuX1cbiAgXCJcXHUwM0NBXCI6IFwiXFx1MDNCOVxcdTAzMDhcIixcbiAgLy8gz4ogPSBcXFwie865fVxuICBcIlxcdTAzOTBcIjogXCJcXHUwM0I5XFx1MDMwOFxcdTAzMDFcIixcbiAgLy8gzpAgPSBcXFwiXFwne865fVxuICBcIlxcdTFGRDJcIjogXCJcXHUwM0I5XFx1MDMwOFxcdTAzMDBcIixcbiAgLy8g4b+SID0gXFxcIlxcYHvOuX1cbiAgXCJcXHUxRkQxXCI6IFwiXFx1MDNCOVxcdTAzMDRcIixcbiAgLy8g4b+RID0gXFw9e865fVxuICBcIlxcdTFGRDBcIjogXCJcXHUwM0I5XFx1MDMwNlwiLFxuICAvLyDhv5AgPSBcXHV7zrl9XG4gIFwiXFx1MDNDQ1wiOiBcIlxcdTAzQkZcXHUwMzAxXCIsXG4gIC8vIM+MID0gXFwne86/fVxuICBcIlxcdTFGNzhcIjogXCJcXHUwM0JGXFx1MDMwMFwiLFxuICAvLyDhvbggPSBcXGB7zr99XG4gIFwiXFx1MDNDRFwiOiBcIlxcdTAzQzVcXHUwMzAxXCIsXG4gIC8vIM+NID0gXFwne8+FfVxuICBcIlxcdTFGN0FcIjogXCJcXHUwM0M1XFx1MDMwMFwiLFxuICAvLyDhvbogPSBcXGB7z4V9XG4gIFwiXFx1MDNDQlwiOiBcIlxcdTAzQzVcXHUwMzA4XCIsXG4gIC8vIM+LID0gXFxcInvPhX1cbiAgXCJcXHUwM0IwXCI6IFwiXFx1MDNDNVxcdTAzMDhcXHUwMzAxXCIsXG4gIC8vIM6wID0gXFxcIlxcJ3vPhX1cbiAgXCJcXHUxRkUyXCI6IFwiXFx1MDNDNVxcdTAzMDhcXHUwMzAwXCIsXG4gIC8vIOG/oiA9IFxcXCJcXGB7z4V9XG4gIFwiXFx1MUZFMVwiOiBcIlxcdTAzQzVcXHUwMzA0XCIsXG4gIC8vIOG/oSA9IFxcPXvPhX1cbiAgXCJcXHUxRkUwXCI6IFwiXFx1MDNDNVxcdTAzMDZcIixcbiAgLy8g4b+gID0gXFx1e8+FfVxuICBcIlxcdTAzQ0VcIjogXCJcXHUwM0M5XFx1MDMwMVwiLFxuICAvLyDPjiA9IFxcJ3vPiX1cbiAgXCJcXHUxRjdDXCI6IFwiXFx1MDNDOVxcdTAzMDBcIixcbiAgLy8g4b28ID0gXFxge8+JfVxuICBcIlxcdTAzOEVcIjogXCJcXHUwM0E1XFx1MDMwMVwiLFxuICAvLyDOjiA9IFxcJ3vOpX1cbiAgXCJcXHUxRkVBXCI6IFwiXFx1MDNBNVxcdTAzMDBcIixcbiAgLy8g4b+qID0gXFxge86lfVxuICBcIlxcdTAzQUJcIjogXCJcXHUwM0E1XFx1MDMwOFwiLFxuICAvLyDOqyA9IFxcXCJ7zqV9XG4gIFwiXFx1MUZFOVwiOiBcIlxcdTAzQTVcXHUwMzA0XCIsXG4gIC8vIOG/qSA9IFxcPXvOpX1cbiAgXCJcXHUxRkU4XCI6IFwiXFx1MDNBNVxcdTAzMDZcIixcbiAgLy8g4b+oID0gXFx1e86lfVxuICBcIlxcdTAzOEZcIjogXCJcXHUwM0E5XFx1MDMwMVwiLFxuICAvLyDOjyA9IFxcJ3vOqX1cbiAgXCJcXHUxRkZBXCI6IFwiXFx1MDNBOVxcdTAzMDBcIiAvLyDhv7ogPSBcXGB7zql9XG5cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvUGFyc2VyLmpzXG4vKiBlc2xpbnQgbm8tY29uc3RhbnQtY29uZGl0aW9uOjAgKi9cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKipcbiAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgcGFyc2VyIHVzZWQgdG8gcGFyc2Ugb3V0IGEgVGVYIGV4cHJlc3Npb24gZnJvbSB0aGVcbiAqIGlucHV0LiBTaW5jZSBUZVggaXNuJ3QgY29udGV4dC1mcmVlLCBzdGFuZGFyZCBwYXJzZXJzIGRvbid0IHdvcmsgcGFydGljdWxhcmx5XG4gKiB3ZWxsLlxuICpcbiAqIFRoZSBzdHJhdGVneSBvZiB0aGlzIHBhcnNlciBpcyBhcyBzdWNoOlxuICpcbiAqIFRoZSBtYWluIGZ1bmN0aW9ucyAodGhlIGAucGFyc2UuLi5gIG9uZXMpIHRha2UgYSBwb3NpdGlvbiBpbiB0aGUgY3VycmVudFxuICogcGFyc2Ugc3RyaW5nIHRvIHBhcnNlIHRva2VucyBmcm9tLiBUaGUgbGV4ZXIgKGZvdW5kIGluIExleGVyLmpzLCBzdG9yZWQgYXRcbiAqIHRoaXMuZ3VsbGV0LmxleGVyKSBhbHNvIHN1cHBvcnRzIHB1bGxpbmcgb3V0IHRva2VucyBhdCBhcmJpdHJhcnkgcGxhY2VzLiBXaGVuXG4gKiBpbmRpdmlkdWFsIHRva2VucyBhcmUgbmVlZGVkIGF0IGEgcG9zaXRpb24sIHRoZSBsZXhlciBpcyBjYWxsZWQgdG8gcHVsbCBvdXQgYVxuICogdG9rZW4sIHdoaWNoIGlzIHRoZW4gdXNlZC5cbiAqXG4gKiBUaGUgcGFyc2VyIGhhcyBhIHByb3BlcnR5IGNhbGxlZCBcIm1vZGVcIiBpbmRpY2F0aW5nIHRoZSBtb2RlIHRoYXRcbiAqIHRoZSBwYXJzZXIgaXMgY3VycmVudGx5IGluLiBDdXJyZW50bHkgaXQgaGFzIHRvIGJlIG9uZSBvZiBcIm1hdGhcIiBvclxuICogXCJ0ZXh0XCIsIHdoaWNoIGRlbm90ZXMgd2hldGhlciB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBpcyBhIG1hdGgteVxuICogb25lIG9yIGEgdGV4dC15IG9uZSAoZS5nLiBpbnNpZGUgXFx0ZXh0KS4gQ3VycmVudGx5LCB0aGlzIHNlcnZlcyB0b1xuICogbGltaXQgdGhlIGZ1bmN0aW9ucyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0ZXh0IG1vZGUuXG4gKlxuICogVGhlIG1haW4gZnVuY3Rpb25zIHRoZW4gcmV0dXJuIGFuIG9iamVjdCB3aGljaCBjb250YWlucyB0aGUgdXNlZnVsIGRhdGEgdGhhdFxuICogd2FzIHBhcnNlZCBhdCBpdHMgZ2l2ZW4gcG9pbnQsIGFuZCBhIG5ldyBwb3NpdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBwYXJzZWRcbiAqIGRhdGEuIFRoZSBtYWluIGZ1bmN0aW9ucyBjYW4gY2FsbCBlYWNoIG90aGVyIGFuZCBjb250aW51ZSB0aGUgcGFyc2luZyBieVxuICogdXNpbmcgdGhlIHJldHVybmVkIHBvc2l0aW9uIGFzIGEgbmV3IHN0YXJ0aW5nIHBvaW50LlxuICpcbiAqIFRoZXJlIGFyZSBhbHNvIGV4dHJhIGAuaGFuZGxlLi4uYCBmdW5jdGlvbnMsIHdoaWNoIHB1bGwgb3V0IHNvbWUgcmV1c2VkXG4gKiBmdW5jdGlvbmFsaXR5IGludG8gc2VsZi1jb250YWluZWQgZnVuY3Rpb25zLlxuICpcbiAqIFRoZSBmdW5jdGlvbnMgcmV0dXJuIFBhcnNlTm9kZXMuXG4gKi9cbnZhciBQYXJzZXJfUGFyc2VyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUGFyc2VyKGlucHV0LCBzZXR0aW5ncykge1xuICAgIHRoaXMubW9kZSA9IHZvaWQgMDtcbiAgICB0aGlzLmd1bGxldCA9IHZvaWQgMDtcbiAgICB0aGlzLnNldHRpbmdzID0gdm9pZCAwO1xuICAgIHRoaXMubGVmdHJpZ2h0RGVwdGggPSB2b2lkIDA7XG4gICAgdGhpcy5uZXh0VG9rZW4gPSB2b2lkIDA7XG4gICAgLy8gU3RhcnQgaW4gbWF0aCBtb2RlXG4gICAgdGhpcy5tb2RlID0gXCJtYXRoXCI7IC8vIENyZWF0ZSBhIG5ldyBtYWNybyBleHBhbmRlciAoZ3VsbGV0KSBhbmQgKGluZGlyZWN0bHkgdmlhIHRoYXQpIGFsc28gYVxuICAgIC8vIG5ldyBsZXhlciAobW91dGgpIGZvciB0aGlzIHBhcnNlciAoc3RvbWFjaCwgaW4gdGhlIGxhbmd1YWdlIG9mIFRlWClcblxuICAgIHRoaXMuZ3VsbGV0ID0gbmV3IE1hY3JvRXhwYW5kZXJfTWFjcm9FeHBhbmRlcihpbnB1dCwgc2V0dGluZ3MsIHRoaXMubW9kZSk7IC8vIFN0b3JlIHRoZSBzZXR0aW5ncyBmb3IgdXNlIGluIHBhcnNpbmdcblxuICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5nczsgLy8gQ291bnQgbGVmdHJpZ2h0IGRlcHRoIChmb3IgXFxtaWRkbGUgZXJyb3JzKVxuXG4gICAgdGhpcy5sZWZ0cmlnaHREZXB0aCA9IDA7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrcyBhIHJlc3VsdCB0byBtYWtlIHN1cmUgaXQgaGFzIHRoZSByaWdodCB0eXBlLCBhbmQgdGhyb3dzIGFuXG4gICAqIGFwcHJvcHJpYXRlIGVycm9yIG90aGVyd2lzZS5cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gUGFyc2VyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZXhwZWN0ID0gZnVuY3Rpb24gZXhwZWN0KHRleHQsIGNvbnN1bWUpIHtcbiAgICBpZiAoY29uc3VtZSA9PT0gdm9pZCAwKSB7XG4gICAgICBjb25zdW1lID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5uZXh0VG9rZW4udGV4dCAhPT0gdGV4dCkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiRXhwZWN0ZWQgJ1wiICsgdGV4dCArIFwiJywgZ290ICdcIiArIHRoaXMubmV4dFRva2VuLnRleHQgKyBcIidcIiwgdGhpcy5uZXh0VG9rZW4pO1xuICAgIH1cblxuICAgIGlmIChjb25zdW1lKSB7XG4gICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENvbnNpZGVycyB0aGUgY3VycmVudCBsb29rIGFoZWFkIHRva2VuIGFzIGNvbnN1bWVkLFxuICAgKiBhbmQgZmV0Y2hlcyB0aGUgb25lIGFmdGVyIHRoYXQgYXMgdGhlIG5ldyBsb29rIGFoZWFkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5jb25zdW1lID0gZnVuY3Rpb24gY29uc3VtZSgpIHtcbiAgICB0aGlzLm5leHRUb2tlbiA9IHRoaXMuZ3VsbGV0LmV4cGFuZE5leHRUb2tlbigpO1xuICB9XG4gIC8qKlxuICAgKiBTd2l0Y2hlcyBiZXR3ZWVuIFwidGV4dFwiIGFuZCBcIm1hdGhcIiBtb2Rlcy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uc3dpdGNoTW9kZSA9IGZ1bmN0aW9uIHN3aXRjaE1vZGUobmV3TW9kZSkge1xuICAgIHRoaXMubW9kZSA9IG5ld01vZGU7XG4gICAgdGhpcy5ndWxsZXQuc3dpdGNoTW9kZShuZXdNb2RlKTtcbiAgfVxuICAvKipcbiAgICogTWFpbiBwYXJzaW5nIGZ1bmN0aW9uLCB3aGljaCBwYXJzZXMgYW4gZW50aXJlIGlucHV0LlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKCkge1xuICAgIC8vIENyZWF0ZSBhIGdyb3VwIG5hbWVzcGFjZSBmb3IgdGhlIG1hdGggZXhwcmVzc2lvbi5cbiAgICAvLyAoTGFUZVggY3JlYXRlcyBhIG5ldyBncm91cCBmb3IgZXZlcnkgJC4uLiQsICQkLi4uJCQsIFxcWy4uLlxcXS4pXG4gICAgdGhpcy5ndWxsZXQuYmVnaW5Hcm91cCgpOyAvLyBVc2Ugb2xkIFxcY29sb3IgYmVoYXZpb3IgKHNhbWUgYXMgTGFUZVgncyBcXHRleHRjb2xvcikgaWYgcmVxdWVzdGVkLlxuICAgIC8vIFdlIGRvIHRoaXMgd2l0aGluIHRoZSBncm91cCBmb3IgdGhlIG1hdGggZXhwcmVzc2lvbiwgc28gaXQgZG9lc24ndFxuICAgIC8vIHBvbGx1dGUgc2V0dGluZ3MubWFjcm9zLlxuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MuY29sb3JJc1RleHRDb2xvcikge1xuICAgICAgdGhpcy5ndWxsZXQubWFjcm9zLnNldChcIlxcXFxjb2xvclwiLCBcIlxcXFx0ZXh0Y29sb3JcIik7XG4gICAgfSAvLyBUcnkgdG8gcGFyc2UgdGhlIGlucHV0XG5cblxuICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIHZhciBwYXJzZSA9IHRoaXMucGFyc2VFeHByZXNzaW9uKGZhbHNlKTsgLy8gSWYgd2Ugc3VjY2VlZGVkLCBtYWtlIHN1cmUgdGhlcmUncyBhbiBFT0YgYXQgdGhlIGVuZFxuXG4gICAgdGhpcy5leHBlY3QoXCJFT0ZcIiwgZmFsc2UpOyAvLyBFbmQgdGhlIGdyb3VwIG5hbWVzcGFjZSBmb3IgdGhlIGV4cHJlc3Npb25cblxuICAgIHRoaXMuZ3VsbGV0LmVuZEdyb3VwKCk7XG4gICAgcmV0dXJuIHBhcnNlO1xuICB9O1xuXG4gIF9wcm90by5wYXJzZUV4cHJlc3Npb24gPSBmdW5jdGlvbiBwYXJzZUV4cHJlc3Npb24oYnJlYWtPbkluZml4LCBicmVha09uVG9rZW5UZXh0KSB7XG4gICAgdmFyIGJvZHkgPSBbXTsgLy8gS2VlcCBhZGRpbmcgYXRvbXMgdG8gdGhlIGJvZHkgdW50aWwgd2UgY2FuJ3QgcGFyc2UgYW55IG1vcmUgYXRvbXMgKGVpdGhlclxuICAgIC8vIHdlIHJlYWNoZWQgdGhlIGVuZCwgYSB9LCBvciBhIFxccmlnaHQpXG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgLy8gSWdub3JlIHNwYWNlcyBpbiBtYXRoIG1vZGVcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09IFwibWF0aFwiKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZVNwYWNlcygpO1xuICAgICAgfVxuXG4gICAgICB2YXIgbGV4ID0gdGhpcy5uZXh0VG9rZW47XG5cbiAgICAgIGlmIChQYXJzZXIuZW5kT2ZFeHByZXNzaW9uLmluZGV4T2YobGV4LnRleHQpICE9PSAtMSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGJyZWFrT25Ub2tlblRleHQgJiYgbGV4LnRleHQgPT09IGJyZWFrT25Ub2tlblRleHQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChicmVha09uSW5maXggJiYgc3JjX2Z1bmN0aW9uc1tsZXgudGV4dF0gJiYgc3JjX2Z1bmN0aW9uc1tsZXgudGV4dF0uaW5maXgpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHZhciBhdG9tID0gdGhpcy5wYXJzZUF0b20oYnJlYWtPblRva2VuVGV4dCk7XG5cbiAgICAgIGlmICghYXRvbSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgYm9keS5wdXNoKGF0b20pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1vZGUgPT09IFwidGV4dFwiKSB7XG4gICAgICB0aGlzLmZvcm1MaWdhdHVyZXMoYm9keSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlSW5maXhOb2Rlcyhib2R5KTtcbiAgfVxuICAvKipcbiAgICogUmV3cml0ZXMgaW5maXggb3BlcmF0b3JzIHN1Y2ggYXMgXFxvdmVyIHdpdGggY29ycmVzcG9uZGluZyBjb21tYW5kcyBzdWNoXG4gICAqIGFzIFxcZnJhYy5cbiAgICpcbiAgICogVGhlcmUgY2FuIG9ubHkgYmUgb25lIGluZml4IG9wZXJhdG9yIHBlciBncm91cC4gIElmIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZVxuICAgKiB0aGVuIHRoZSBleHByZXNzaW9uIGlzIGFtYmlndW91cy4gIFRoaXMgY2FuIGJlIHJlc29sdmVkIGJ5IGFkZGluZyB7fS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlSW5maXhOb2RlcyA9IGZ1bmN0aW9uIGhhbmRsZUluZml4Tm9kZXMoYm9keSkge1xuICAgIHZhciBvdmVySW5kZXggPSAtMTtcbiAgICB2YXIgZnVuY05hbWU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvZHkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBub2RlID0gY2hlY2tOb2RlVHlwZShib2R5W2ldLCBcImluZml4XCIpO1xuXG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICBpZiAob3ZlckluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIm9ubHkgb25lIGluZml4IG9wZXJhdG9yIHBlciBncm91cFwiLCBub2RlLnRva2VuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG92ZXJJbmRleCA9IGk7XG4gICAgICAgIGZ1bmNOYW1lID0gbm9kZS5yZXBsYWNlV2l0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3ZlckluZGV4ICE9PSAtMSAmJiBmdW5jTmFtZSkge1xuICAgICAgdmFyIG51bWVyTm9kZTtcbiAgICAgIHZhciBkZW5vbU5vZGU7XG4gICAgICB2YXIgbnVtZXJCb2R5ID0gYm9keS5zbGljZSgwLCBvdmVySW5kZXgpO1xuICAgICAgdmFyIGRlbm9tQm9keSA9IGJvZHkuc2xpY2Uob3ZlckluZGV4ICsgMSk7XG5cbiAgICAgIGlmIChudW1lckJvZHkubGVuZ3RoID09PSAxICYmIG51bWVyQm9keVswXS50eXBlID09PSBcIm9yZGdyb3VwXCIpIHtcbiAgICAgICAgbnVtZXJOb2RlID0gbnVtZXJCb2R5WzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbnVtZXJOb2RlID0ge1xuICAgICAgICAgIHR5cGU6IFwib3JkZ3JvdXBcIixcbiAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgYm9keTogbnVtZXJCb2R5XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChkZW5vbUJvZHkubGVuZ3RoID09PSAxICYmIGRlbm9tQm9keVswXS50eXBlID09PSBcIm9yZGdyb3VwXCIpIHtcbiAgICAgICAgZGVub21Ob2RlID0gZGVub21Cb2R5WzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVub21Ob2RlID0ge1xuICAgICAgICAgIHR5cGU6IFwib3JkZ3JvdXBcIixcbiAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgYm9keTogZGVub21Cb2R5XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciBfbm9kZTtcblxuICAgICAgaWYgKGZ1bmNOYW1lID09PSBcIlxcXFxcXFxcYWJvdmVmcmFjXCIpIHtcbiAgICAgICAgX25vZGUgPSB0aGlzLmNhbGxGdW5jdGlvbihmdW5jTmFtZSwgW251bWVyTm9kZSwgYm9keVtvdmVySW5kZXhdLCBkZW5vbU5vZGVdLCBbXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfbm9kZSA9IHRoaXMuY2FsbEZ1bmN0aW9uKGZ1bmNOYW1lLCBbbnVtZXJOb2RlLCBkZW5vbU5vZGVdLCBbXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbX25vZGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYm9keTtcbiAgICB9XG4gIH0gLy8gVGhlIGdyZWVkaW5lc3Mgb2YgYSBzdXBlcnNjcmlwdCBvciBzdWJzY3JpcHRcbiAgO1xuXG4gIC8qKlxuICAgKiBIYW5kbGUgYSBzdWJzY3JpcHQgb3Igc3VwZXJzY3JpcHQgd2l0aCBuaWNlIGVycm9ycy5cbiAgICovXG4gIF9wcm90by5oYW5kbGVTdXBTdWJzY3JpcHQgPSBmdW5jdGlvbiBoYW5kbGVTdXBTdWJzY3JpcHQobmFtZSkge1xuICAgIHZhciBzeW1ib2xUb2tlbiA9IHRoaXMubmV4dFRva2VuO1xuICAgIHZhciBzeW1ib2wgPSBzeW1ib2xUb2tlbi50ZXh0O1xuICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIHRoaXMuY29uc3VtZVNwYWNlcygpOyAvLyBpZ25vcmUgc3BhY2VzIGJlZm9yZSBzdXAvc3Vic2NyaXB0IGFyZ3VtZW50XG5cbiAgICB2YXIgZ3JvdXAgPSB0aGlzLnBhcnNlR3JvdXAobmFtZSwgZmFsc2UsIFBhcnNlci5TVVBTVUJfR1JFRURJTkVTUyk7XG5cbiAgICBpZiAoIWdyb3VwKSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJFeHBlY3RlZCBncm91cCBhZnRlciAnXCIgKyBzeW1ib2wgKyBcIidcIiwgc3ltYm9sVG9rZW4pO1xuICAgIH1cblxuICAgIHJldHVybiBncm91cDtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIHRleHR1YWwgaW5wdXQgb2YgYW4gdW5zdXBwb3J0ZWQgY29tbWFuZCBpbnRvIGEgdGV4dCBub2RlXG4gICAqIGNvbnRhaW5lZCB3aXRoaW4gYSBjb2xvciBub2RlIHdob3NlIGNvbG9yIGlzIGRldGVybWluZWQgYnkgZXJyb3JDb2xvclxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5mb3JtYXRVbnN1cHBvcnRlZENtZCA9IGZ1bmN0aW9uIGZvcm1hdFVuc3VwcG9ydGVkQ21kKHRleHQpIHtcbiAgICB2YXIgdGV4dG9yZEFycmF5ID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRleHRvcmRBcnJheS5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICB0ZXh0OiB0ZXh0W2ldXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgdGV4dE5vZGUgPSB7XG4gICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIGJvZHk6IHRleHRvcmRBcnJheVxuICAgIH07XG4gICAgdmFyIGNvbG9yTm9kZSA9IHtcbiAgICAgIHR5cGU6IFwiY29sb3JcIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIGNvbG9yOiB0aGlzLnNldHRpbmdzLmVycm9yQ29sb3IsXG4gICAgICBib2R5OiBbdGV4dE5vZGVdXG4gICAgfTtcbiAgICByZXR1cm4gY29sb3JOb2RlO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgYSBncm91cCB3aXRoIG9wdGlvbmFsIHN1cGVyL3N1YnNjcmlwdHMuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnBhcnNlQXRvbSA9IGZ1bmN0aW9uIHBhcnNlQXRvbShicmVha09uVG9rZW5UZXh0KSB7XG4gICAgLy8gVGhlIGJvZHkgb2YgYW4gYXRvbSBpcyBhbiBpbXBsaWNpdCBncm91cCwgc28gdGhhdCB0aGluZ3MgbGlrZVxuICAgIC8vIFxcbGVmdCh4XFxyaWdodCleMiB3b3JrIGNvcnJlY3RseS5cbiAgICB2YXIgYmFzZSA9IHRoaXMucGFyc2VHcm91cChcImF0b21cIiwgZmFsc2UsIG51bGwsIGJyZWFrT25Ub2tlblRleHQpOyAvLyBJbiB0ZXh0IG1vZGUsIHdlIGRvbid0IGhhdmUgc3VwZXJzY3JpcHRzIG9yIHN1YnNjcmlwdHNcblxuICAgIGlmICh0aGlzLm1vZGUgPT09IFwidGV4dFwiKSB7XG4gICAgICByZXR1cm4gYmFzZTtcbiAgICB9IC8vIE5vdGUgdGhhdCBiYXNlIG1heSBiZSBlbXB0eSAoaS5lLiBudWxsKSBhdCB0aGlzIHBvaW50LlxuXG5cbiAgICB2YXIgc3VwZXJzY3JpcHQ7XG4gICAgdmFyIHN1YnNjcmlwdDtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAvLyBHdWFyYW50ZWVkIGluIG1hdGggbW9kZSwgc28gZWF0IGFueSBzcGFjZXMgZmlyc3QuXG4gICAgICB0aGlzLmNvbnN1bWVTcGFjZXMoKTsgLy8gTGV4IHRoZSBmaXJzdCB0b2tlblxuXG4gICAgICB2YXIgbGV4ID0gdGhpcy5uZXh0VG9rZW47XG5cbiAgICAgIGlmIChsZXgudGV4dCA9PT0gXCJcXFxcbGltaXRzXCIgfHwgbGV4LnRleHQgPT09IFwiXFxcXG5vbGltaXRzXCIpIHtcbiAgICAgICAgLy8gV2UgZ290IGEgbGltaXQgY29udHJvbFxuICAgICAgICB2YXIgb3BOb2RlID0gY2hlY2tOb2RlVHlwZShiYXNlLCBcIm9wXCIpO1xuXG4gICAgICAgIGlmIChvcE5vZGUpIHtcbiAgICAgICAgICB2YXIgbGltaXRzID0gbGV4LnRleHQgPT09IFwiXFxcXGxpbWl0c1wiO1xuICAgICAgICAgIG9wTm9kZS5saW1pdHMgPSBsaW1pdHM7XG4gICAgICAgICAgb3BOb2RlLmFsd2F5c0hhbmRsZVN1cFN1YiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3BOb2RlID0gY2hlY2tOb2RlVHlwZShiYXNlLCBcIm9wZXJhdG9ybmFtZVwiKTtcblxuICAgICAgICAgIGlmIChvcE5vZGUgJiYgb3BOb2RlLmFsd2F5c0hhbmRsZVN1cFN1Yikge1xuICAgICAgICAgICAgdmFyIF9saW1pdHMgPSBsZXgudGV4dCA9PT0gXCJcXFxcbGltaXRzXCI7XG5cbiAgICAgICAgICAgIG9wTm9kZS5saW1pdHMgPSBfbGltaXRzO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJMaW1pdCBjb250cm9scyBtdXN0IGZvbGxvdyBhIG1hdGggb3BlcmF0b3JcIiwgbGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgIH0gZWxzZSBpZiAobGV4LnRleHQgPT09IFwiXlwiKSB7XG4gICAgICAgIC8vIFdlIGdvdCBhIHN1cGVyc2NyaXB0IHN0YXJ0XG4gICAgICAgIGlmIChzdXBlcnNjcmlwdCkge1xuICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkRvdWJsZSBzdXBlcnNjcmlwdFwiLCBsZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXJzY3JpcHQgPSB0aGlzLmhhbmRsZVN1cFN1YnNjcmlwdChcInN1cGVyc2NyaXB0XCIpO1xuICAgICAgfSBlbHNlIGlmIChsZXgudGV4dCA9PT0gXCJfXCIpIHtcbiAgICAgICAgLy8gV2UgZ290IGEgc3Vic2NyaXB0IHN0YXJ0XG4gICAgICAgIGlmIChzdWJzY3JpcHQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJEb3VibGUgc3Vic2NyaXB0XCIsIGxleCk7XG4gICAgICAgIH1cblxuICAgICAgICBzdWJzY3JpcHQgPSB0aGlzLmhhbmRsZVN1cFN1YnNjcmlwdChcInN1YnNjcmlwdFwiKTtcbiAgICAgIH0gZWxzZSBpZiAobGV4LnRleHQgPT09IFwiJ1wiKSB7XG4gICAgICAgIC8vIFdlIGdvdCBhIHByaW1lXG4gICAgICAgIGlmIChzdXBlcnNjcmlwdCkge1xuICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkRvdWJsZSBzdXBlcnNjcmlwdFwiLCBsZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHByaW1lID0ge1xuICAgICAgICAgIHR5cGU6IFwidGV4dG9yZFwiLFxuICAgICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgICB0ZXh0OiBcIlxcXFxwcmltZVwiXG4gICAgICAgIH07IC8vIE1hbnkgcHJpbWVzIGNhbiBiZSBncm91cGVkIHRvZ2V0aGVyLCBzbyB3ZSBoYW5kbGUgdGhpcyBoZXJlXG5cbiAgICAgICAgdmFyIHByaW1lcyA9IFtwcmltZV07XG4gICAgICAgIHRoaXMuY29uc3VtZSgpOyAvLyBLZWVwIGxleGluZyB0b2tlbnMgdW50aWwgd2UgZ2V0IHNvbWV0aGluZyB0aGF0J3Mgbm90IGEgcHJpbWVcblxuICAgICAgICB3aGlsZSAodGhpcy5uZXh0VG9rZW4udGV4dCA9PT0gXCInXCIpIHtcbiAgICAgICAgICAvLyBGb3IgZWFjaCBvbmUsIGFkZCBhbm90aGVyIHByaW1lIHRvIHRoZSBsaXN0XG4gICAgICAgICAgcHJpbWVzLnB1c2gocHJpbWUpO1xuICAgICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICB9IC8vIElmIHRoZXJlJ3MgYSBzdXBlcnNjcmlwdCBmb2xsb3dpbmcgdGhlIHByaW1lcywgY29tYmluZSB0aGF0XG4gICAgICAgIC8vIHN1cGVyc2NyaXB0IGluIHdpdGggdGhlIHByaW1lcy5cblxuXG4gICAgICAgIGlmICh0aGlzLm5leHRUb2tlbi50ZXh0ID09PSBcIl5cIikge1xuICAgICAgICAgIHByaW1lcy5wdXNoKHRoaXMuaGFuZGxlU3VwU3Vic2NyaXB0KFwic3VwZXJzY3JpcHRcIikpO1xuICAgICAgICB9IC8vIFB1dCBldmVyeXRoaW5nIGludG8gYW4gb3JkZ3JvdXAgYXMgdGhlIHN1cGVyc2NyaXB0XG5cblxuICAgICAgICBzdXBlcnNjcmlwdCA9IHtcbiAgICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgICAgIGJvZHk6IHByaW1lc1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgaXQgd2Fzbid0IF4sIF8sIG9yICcsIHN0b3AgcGFyc2luZyBzdXBlci9zdWJzY3JpcHRzXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gLy8gQmFzZSBtdXN0IGJlIHNldCBpZiBzdXBlcnNjcmlwdCBvciBzdWJzY3JpcHQgYXJlIHNldCBwZXIgbG9naWMgYWJvdmUsXG4gICAgLy8gYnV0IG5lZWQgdG8gY2hlY2sgaGVyZSBmb3IgdHlwZSBjaGVjayB0byBwYXNzLlxuXG5cbiAgICBpZiAoc3VwZXJzY3JpcHQgfHwgc3Vic2NyaXB0KSB7XG4gICAgICAvLyBJZiB3ZSBnb3QgZWl0aGVyIGEgc3VwZXJzY3JpcHQgb3Igc3Vic2NyaXB0LCBjcmVhdGUgYSBzdXBzdWJcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwic3Vwc3ViXCIsXG4gICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgYmFzZTogYmFzZSxcbiAgICAgICAgc3VwOiBzdXBlcnNjcmlwdCxcbiAgICAgICAgc3ViOiBzdWJzY3JpcHRcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyd2lzZSByZXR1cm4gdGhlIG9yaWdpbmFsIGJvZHlcbiAgICAgIHJldHVybiBiYXNlO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGFuIGVudGlyZSBmdW5jdGlvbiwgaW5jbHVkaW5nIGl0cyBiYXNlIGFuZCBhbGwgb2YgaXRzIGFyZ3VtZW50cy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ucGFyc2VGdW5jdGlvbiA9IGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb24oYnJlYWtPblRva2VuVGV4dCwgbmFtZSwgLy8gRm9yIGVycm9yIHJlcG9ydGluZy5cbiAgZ3JlZWRpbmVzcykge1xuICAgIHZhciB0b2tlbiA9IHRoaXMubmV4dFRva2VuO1xuICAgIHZhciBmdW5jID0gdG9rZW4udGV4dDtcbiAgICB2YXIgZnVuY0RhdGEgPSBzcmNfZnVuY3Rpb25zW2Z1bmNdO1xuXG4gICAgaWYgKCFmdW5jRGF0YSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGdyZWVkaW5lc3MgIT0gbnVsbCAmJiBmdW5jRGF0YS5ncmVlZGluZXNzIDw9IGdyZWVkaW5lc3MpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkdvdCBmdW5jdGlvbiAnXCIgKyBmdW5jICsgXCInIHdpdGggbm8gYXJndW1lbnRzXCIgKyAobmFtZSA/IFwiIGFzIFwiICsgbmFtZSA6IFwiXCIpLCB0b2tlbik7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09IFwidGV4dFwiICYmICFmdW5jRGF0YS5hbGxvd2VkSW5UZXh0KSB7XG4gICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJDYW4ndCB1c2UgZnVuY3Rpb24gJ1wiICsgZnVuYyArIFwiJyBpbiB0ZXh0IG1vZGVcIiwgdG9rZW4pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSBcIm1hdGhcIiAmJiBmdW5jRGF0YS5hbGxvd2VkSW5NYXRoID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiQ2FuJ3QgdXNlIGZ1bmN0aW9uICdcIiArIGZ1bmMgKyBcIicgaW4gbWF0aCBtb2RlXCIsIHRva2VuKTtcbiAgICB9IC8vIGh5cGVycmVmIHBhY2thZ2Ugc2V0cyB0aGUgY2F0Y29kZSBvZiAlIGFzIGFuIGFjdGl2ZSBjaGFyYWN0ZXJcblxuXG4gICAgaWYgKGZ1bmNEYXRhLmFyZ1R5cGVzICYmIGZ1bmNEYXRhLmFyZ1R5cGVzWzBdID09PSBcInVybFwiKSB7XG4gICAgICB0aGlzLmd1bGxldC5sZXhlci5zZXRDYXRjb2RlKFwiJVwiLCAxMyk7XG4gICAgfSAvLyBDb25zdW1lIHRoZSBjb21tYW5kIHRva2VuIGFmdGVyIHBvc3NpYmx5IHN3aXRjaGluZyB0byB0aGVcbiAgICAvLyBtb2RlIHNwZWNpZmllZCBieSB0aGUgZnVuY3Rpb24gKGZvciBpbnN0YW50IG1vZGUgc3dpdGNoaW5nKSxcbiAgICAvLyBhbmQgdGhlbiBpbW1lZGlhdGVseSBzd2l0Y2ggYmFjay5cblxuXG4gICAgaWYgKGZ1bmNEYXRhLmNvbnN1bWVNb2RlKSB7XG4gICAgICB2YXIgb2xkTW9kZSA9IHRoaXMubW9kZTtcbiAgICAgIHRoaXMuc3dpdGNoTW9kZShmdW5jRGF0YS5jb25zdW1lTW9kZSk7XG4gICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgIHRoaXMuc3dpdGNoTW9kZShvbGRNb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgfVxuXG4gICAgdmFyIF90aGlzJHBhcnNlQXJndW1lbnRzID0gdGhpcy5wYXJzZUFyZ3VtZW50cyhmdW5jLCBmdW5jRGF0YSksXG4gICAgICAgIGFyZ3MgPSBfdGhpcyRwYXJzZUFyZ3VtZW50cy5hcmdzLFxuICAgICAgICBvcHRBcmdzID0gX3RoaXMkcGFyc2VBcmd1bWVudHMub3B0QXJncztcblxuICAgIHJldHVybiB0aGlzLmNhbGxGdW5jdGlvbihmdW5jLCBhcmdzLCBvcHRBcmdzLCB0b2tlbiwgYnJlYWtPblRva2VuVGV4dCk7XG4gIH1cbiAgLyoqXG4gICAqIENhbGwgYSBmdW5jdGlvbiBoYW5kbGVyIHdpdGggYSBzdWl0YWJsZSBjb250ZXh0IGFuZCBhcmd1bWVudHMuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmNhbGxGdW5jdGlvbiA9IGZ1bmN0aW9uIGNhbGxGdW5jdGlvbihuYW1lLCBhcmdzLCBvcHRBcmdzLCB0b2tlbiwgYnJlYWtPblRva2VuVGV4dCkge1xuICAgIHZhciBjb250ZXh0ID0ge1xuICAgICAgZnVuY05hbWU6IG5hbWUsXG4gICAgICBwYXJzZXI6IHRoaXMsXG4gICAgICB0b2tlbjogdG9rZW4sXG4gICAgICBicmVha09uVG9rZW5UZXh0OiBicmVha09uVG9rZW5UZXh0XG4gICAgfTtcbiAgICB2YXIgZnVuYyA9IHNyY19mdW5jdGlvbnNbbmFtZV07XG5cbiAgICBpZiAoZnVuYyAmJiBmdW5jLmhhbmRsZXIpIHtcbiAgICAgIHJldHVybiBmdW5jLmhhbmRsZXIoY29udGV4dCwgYXJncywgb3B0QXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIk5vIGZ1bmN0aW9uIGhhbmRsZXIgZm9yIFwiICsgbmFtZSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgdGhlIGFyZ3VtZW50cyBvZiBhIGZ1bmN0aW9uIG9yIGVudmlyb25tZW50XG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnBhcnNlQXJndW1lbnRzID0gZnVuY3Rpb24gcGFyc2VBcmd1bWVudHMoZnVuYywgLy8gU2hvdWxkIGxvb2sgbGlrZSBcIlxcbmFtZVwiIG9yIFwiXFxiZWdpbntuYW1lfVwiLlxuICBmdW5jRGF0YSkge1xuICAgIHZhciB0b3RhbEFyZ3MgPSBmdW5jRGF0YS5udW1BcmdzICsgZnVuY0RhdGEubnVtT3B0aW9uYWxBcmdzO1xuXG4gICAgaWYgKHRvdGFsQXJncyA9PT0gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYXJnczogW10sXG4gICAgICAgIG9wdEFyZ3M6IFtdXG4gICAgICB9O1xuICAgIH1cblxuICAgIHZhciBiYXNlR3JlZWRpbmVzcyA9IGZ1bmNEYXRhLmdyZWVkaW5lc3M7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgb3B0QXJncyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEFyZ3M7IGkrKykge1xuICAgICAgdmFyIGFyZ1R5cGUgPSBmdW5jRGF0YS5hcmdUeXBlcyAmJiBmdW5jRGF0YS5hcmdUeXBlc1tpXTtcbiAgICAgIHZhciBpc09wdGlvbmFsID0gaSA8IGZ1bmNEYXRhLm51bU9wdGlvbmFsQXJnczsgLy8gSWdub3JlIHNwYWNlcyBiZXR3ZWVuIGFyZ3VtZW50cy4gIEFzIHRoZSBUZVhib29rIHNheXM6XG4gICAgICAvLyBcIkFmdGVyIHlvdSBoYXZlIHNhaWQg4oCYXFxkZWZcXHJvdyMxIzJ7Li4ufeKAmSwgeW91IGFyZSBhbGxvd2VkIHRvXG4gICAgICAvLyAgcHV0IHNwYWNlcyBiZXR3ZWVuIHRoZSBhcmd1bWVudHMgKGUuZy4sIOKAmFxccm93IHggbuKAmSksIGJlY2F1c2VcbiAgICAgIC8vICBUZVggZG9lc27igJl0IHVzZSBzaW5nbGUgc3BhY2VzIGFzIHVuZGVsaW1pdGVkIGFyZ3VtZW50cy5cIlxuXG4gICAgICBpZiAoaSA+IDAgJiYgIWlzT3B0aW9uYWwpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lU3BhY2VzKCk7XG4gICAgICB9IC8vIEFsc28gY29uc3VtZSBsZWFkaW5nIHNwYWNlcyBpbiBtYXRoIG1vZGUsIGFzIHBhcnNlU3ltYm9sXG4gICAgICAvLyB3b24ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCB0aGVtLiAgVGhpcyBjYW4gb25seSBoYXBwZW4gd2l0aFxuICAgICAgLy8gbWFjcm9zLCBlLmcuIFxcZnJhY1xcZm9vXFxmb28gd2hlcmUgXFxmb28gZXhwYW5kcyB0byBhIHNwYWNlIHN5bWJvbC5cbiAgICAgIC8vIEluIExhVGVYLCB0aGUgXFxmb28ncyBnZXQgdHJlYXRlZCBhcyAoYmxhbmspIGFyZ3VtZW50cykuXG4gICAgICAvLyBJbiBLYVRlWCwgZm9yIG5vdywgYm90aCBzcGFjZXMgd2lsbCBnZXQgY29uc3VtZWQuXG4gICAgICAvLyBUT0RPKGVkZW1haW5lKVxuXG5cbiAgICAgIGlmIChpID09PSAwICYmICFpc09wdGlvbmFsICYmIHRoaXMubW9kZSA9PT0gXCJtYXRoXCIpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lU3BhY2VzKCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXh0VG9rZW4gPSB0aGlzLm5leHRUb2tlbjtcbiAgICAgIHZhciBhcmcgPSB0aGlzLnBhcnNlR3JvdXBPZlR5cGUoXCJhcmd1bWVudCB0byAnXCIgKyBmdW5jICsgXCInXCIsIGFyZ1R5cGUsIGlzT3B0aW9uYWwsIGJhc2VHcmVlZGluZXNzKTtcblxuICAgICAgaWYgKCFhcmcpIHtcbiAgICAgICAgaWYgKGlzT3B0aW9uYWwpIHtcbiAgICAgICAgICBvcHRBcmdzLnB1c2gobnVsbCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJFeHBlY3RlZCBncm91cCBhZnRlciAnXCIgKyBmdW5jICsgXCInXCIsIG5leHRUb2tlbik7XG4gICAgICB9XG5cbiAgICAgIChpc09wdGlvbmFsID8gb3B0QXJncyA6IGFyZ3MpLnB1c2goYXJnKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYXJnczogYXJncyxcbiAgICAgIG9wdEFyZ3M6IG9wdEFyZ3NcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgYSBncm91cCB3aGVuIHRoZSBtb2RlIGlzIGNoYW5naW5nLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5wYXJzZUdyb3VwT2ZUeXBlID0gZnVuY3Rpb24gcGFyc2VHcm91cE9mVHlwZShuYW1lLCB0eXBlLCBvcHRpb25hbCwgZ3JlZWRpbmVzcykge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcImNvbG9yXCI6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlQ29sb3JHcm91cChvcHRpb25hbCk7XG5cbiAgICAgIGNhc2UgXCJzaXplXCI6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlU2l6ZUdyb3VwKG9wdGlvbmFsKTtcblxuICAgICAgY2FzZSBcInVybFwiOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVVybEdyb3VwKG9wdGlvbmFsKTtcblxuICAgICAgY2FzZSBcIm1hdGhcIjpcbiAgICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlR3JvdXAobmFtZSwgb3B0aW9uYWwsIGdyZWVkaW5lc3MsIHVuZGVmaW5lZCwgdHlwZSk7XG5cbiAgICAgIGNhc2UgXCJoYm94XCI6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBoYm94IGFyZ3VtZW50IHR5cGUgd3JhcHMgdGhlIGFyZ3VtZW50IGluIHRoZSBlcXVpdmFsZW50IG9mXG4gICAgICAgICAgLy8gXFxoYm94LCB3aGljaCBpcyBsaWtlIFxcdGV4dCBidXQgc3dpdGNoaW5nIHRvIFxcdGV4dHN0eWxlIHNpemUuXG4gICAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5wYXJzZUdyb3VwKG5hbWUsIG9wdGlvbmFsLCBncmVlZGluZXNzLCB1bmRlZmluZWQsIFwidGV4dFwiKTtcblxuICAgICAgICAgIGlmICghZ3JvdXApIHtcbiAgICAgICAgICAgIHJldHVybiBncm91cDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc3R5bGVkR3JvdXAgPSB7XG4gICAgICAgICAgICB0eXBlOiBcInN0eWxpbmdcIixcbiAgICAgICAgICAgIG1vZGU6IGdyb3VwLm1vZGUsXG4gICAgICAgICAgICBib2R5OiBbZ3JvdXBdLFxuICAgICAgICAgICAgc3R5bGU6IFwidGV4dFwiIC8vIHNpbXVsYXRlIFxcdGV4dHN0eWxlXG5cbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBzdHlsZWRHcm91cDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFwicmF3XCI6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAob3B0aW9uYWwgJiYgdGhpcy5uZXh0VG9rZW4udGV4dCA9PT0gXCJ7XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMucGFyc2VTdHJpbmdHcm91cChcInJhd1wiLCBvcHRpb25hbCwgdHJ1ZSk7XG5cbiAgICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwicmF3XCIsXG4gICAgICAgICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICBzdHJpbmc6IHRva2VuLnRleHRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkV4cGVjdGVkIHJhdyBncm91cFwiLCB0aGlzLm5leHRUb2tlbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgXCJvcmlnaW5hbFwiOlxuICAgICAgY2FzZSBudWxsOlxuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlR3JvdXAobmFtZSwgb3B0aW9uYWwsIGdyZWVkaW5lc3MpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJVbmtub3duIGdyb3VwIHR5cGUgYXMgXCIgKyBuYW1lLCB0aGlzLm5leHRUb2tlbik7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jb25zdW1lU3BhY2VzID0gZnVuY3Rpb24gY29uc3VtZVNwYWNlcygpIHtcbiAgICB3aGlsZSAodGhpcy5uZXh0VG9rZW4udGV4dCA9PT0gXCIgXCIpIHtcbiAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGEgZ3JvdXAsIGVzc2VudGlhbGx5IHJldHVybmluZyB0aGUgc3RyaW5nIGZvcm1lZCBieSB0aGVcbiAgICogYnJhY2UtZW5jbG9zZWQgdG9rZW5zIHBsdXMgc29tZSBwb3NpdGlvbiBpbmZvcm1hdGlvbi5cbiAgICovXG4gIDtcblxuICBfcHJvdG8ucGFyc2VTdHJpbmdHcm91cCA9IGZ1bmN0aW9uIHBhcnNlU3RyaW5nR3JvdXAobW9kZU5hbWUsIC8vIFVzZWQgdG8gZGVzY3JpYmUgdGhlIG1vZGUgaW4gZXJyb3IgbWVzc2FnZXMuXG4gIG9wdGlvbmFsLCByYXcpIHtcbiAgICB2YXIgZ3JvdXBCZWdpbiA9IG9wdGlvbmFsID8gXCJbXCIgOiBcIntcIjtcbiAgICB2YXIgZ3JvdXBFbmQgPSBvcHRpb25hbCA/IFwiXVwiIDogXCJ9XCI7XG4gICAgdmFyIG5leHRUb2tlbiA9IHRoaXMubmV4dFRva2VuO1xuXG4gICAgaWYgKG5leHRUb2tlbi50ZXh0ICE9PSBncm91cEJlZ2luKSB7XG4gICAgICBpZiAob3B0aW9uYWwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHJhdyAmJiBuZXh0VG9rZW4udGV4dCAhPT0gXCJFT0ZcIiAmJiAvW157fVtcXF1dLy50ZXN0KG5leHRUb2tlbi50ZXh0KSkge1xuICAgICAgICAvLyBhbGxvdyBhIHNpbmdsZSBjaGFyYWN0ZXIgaW4gcmF3IHN0cmluZyBncm91cFxuICAgICAgICB0aGlzLmd1bGxldC5sZXhlci5zZXRDYXRjb2RlKFwiJVwiLCAxNCk7IC8vIHJlc2V0IHRoZSBjYXRjb2RlIG9mICVcblxuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgcmV0dXJuIG5leHRUb2tlbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgb3V0ZXJNb2RlID0gdGhpcy5tb2RlO1xuICAgIHRoaXMubW9kZSA9IFwidGV4dFwiO1xuICAgIHRoaXMuZXhwZWN0KGdyb3VwQmVnaW4pO1xuICAgIHZhciBzdHIgPSBcIlwiO1xuICAgIHZhciBmaXJzdFRva2VuID0gdGhpcy5uZXh0VG9rZW47XG4gICAgdmFyIG5lc3RlZCA9IDA7IC8vIGFsbG93IG5lc3RlZCBicmFjZXMgaW4gcmF3IHN0cmluZyBncm91cFxuXG4gICAgdmFyIGxhc3RUb2tlbiA9IGZpcnN0VG9rZW47XG5cbiAgICB3aGlsZSAocmF3ICYmIG5lc3RlZCA+IDAgfHwgdGhpcy5uZXh0VG9rZW4udGV4dCAhPT0gZ3JvdXBFbmQpIHtcbiAgICAgIHN3aXRjaCAodGhpcy5uZXh0VG9rZW4udGV4dCkge1xuICAgICAgICBjYXNlIFwiRU9GXCI6XG4gICAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgaW4gXCIgKyBtb2RlTmFtZSwgZmlyc3RUb2tlbi5yYW5nZShsYXN0VG9rZW4sIHN0cikpO1xuXG4gICAgICAgIGNhc2UgZ3JvdXBCZWdpbjpcbiAgICAgICAgICBuZXN0ZWQrKztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIGdyb3VwRW5kOlxuICAgICAgICAgIG5lc3RlZC0tO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBsYXN0VG9rZW4gPSB0aGlzLm5leHRUb2tlbjtcbiAgICAgIHN0ciArPSBsYXN0VG9rZW4udGV4dDtcbiAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIH1cblxuICAgIHRoaXMubW9kZSA9IG91dGVyTW9kZTtcbiAgICB0aGlzLmd1bGxldC5sZXhlci5zZXRDYXRjb2RlKFwiJVwiLCAxNCk7IC8vIHJlc2V0IHRoZSBjYXRjb2RlIG9mICVcblxuICAgIHRoaXMuZXhwZWN0KGdyb3VwRW5kKTtcbiAgICByZXR1cm4gZmlyc3RUb2tlbi5yYW5nZShsYXN0VG9rZW4sIHN0cik7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhIHJlZ2V4LWRlbGltaXRlZCBncm91cDogdGhlIGxhcmdlc3Qgc2VxdWVuY2Ugb2YgdG9rZW5zXG4gICAqIHdob3NlIGNvbmNhdGVuYXRlZCBzdHJpbmdzIG1hdGNoIGByZWdleGAuIFJldHVybnMgdGhlIHN0cmluZ1xuICAgKiBmb3JtZWQgYnkgdGhlIHRva2VucyBwbHVzIHNvbWUgcG9zaXRpb24gaW5mb3JtYXRpb24uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnBhcnNlUmVnZXhHcm91cCA9IGZ1bmN0aW9uIHBhcnNlUmVnZXhHcm91cChyZWdleCwgbW9kZU5hbWUpIHtcbiAgICB2YXIgb3V0ZXJNb2RlID0gdGhpcy5tb2RlO1xuICAgIHRoaXMubW9kZSA9IFwidGV4dFwiO1xuICAgIHZhciBmaXJzdFRva2VuID0gdGhpcy5uZXh0VG9rZW47XG4gICAgdmFyIGxhc3RUb2tlbiA9IGZpcnN0VG9rZW47XG4gICAgdmFyIHN0ciA9IFwiXCI7XG5cbiAgICB3aGlsZSAodGhpcy5uZXh0VG9rZW4udGV4dCAhPT0gXCJFT0ZcIiAmJiByZWdleC50ZXN0KHN0ciArIHRoaXMubmV4dFRva2VuLnRleHQpKSB7XG4gICAgICBsYXN0VG9rZW4gPSB0aGlzLm5leHRUb2tlbjtcbiAgICAgIHN0ciArPSBsYXN0VG9rZW4udGV4dDtcbiAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIH1cblxuICAgIGlmIChzdHIgPT09IFwiXCIpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgXCIgKyBtb2RlTmFtZSArIFwiOiAnXCIgKyBmaXJzdFRva2VuLnRleHQgKyBcIidcIiwgZmlyc3RUb2tlbik7XG4gICAgfVxuXG4gICAgdGhpcy5tb2RlID0gb3V0ZXJNb2RlO1xuICAgIHJldHVybiBmaXJzdFRva2VuLnJhbmdlKGxhc3RUb2tlbiwgc3RyKTtcbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGEgY29sb3IgZGVzY3JpcHRpb24uXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnBhcnNlQ29sb3JHcm91cCA9IGZ1bmN0aW9uIHBhcnNlQ29sb3JHcm91cChvcHRpb25hbCkge1xuICAgIHZhciByZXMgPSB0aGlzLnBhcnNlU3RyaW5nR3JvdXAoXCJjb2xvclwiLCBvcHRpb25hbCk7XG5cbiAgICBpZiAoIXJlcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIG1hdGNoID0gL14oI1thLWYwLTldezN9fCM/W2EtZjAtOV17Nn18W2Etel0rKSQvaS5leGVjKHJlcy50ZXh0KTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgY29sb3I6ICdcIiArIHJlcy50ZXh0ICsgXCInXCIsIHJlcyk7XG4gICAgfVxuXG4gICAgdmFyIGNvbG9yID0gbWF0Y2hbMF07XG5cbiAgICBpZiAoL15bMC05YS1mXXs2fSQvaS50ZXN0KGNvbG9yKSkge1xuICAgICAgLy8gV2UgYWxsb3cgYSA2LWRpZ2l0IEhUTUwgY29sb3Igc3BlYyB3aXRob3V0IGEgbGVhZGluZyBcIiNcIi5cbiAgICAgIC8vIFRoaXMgZm9sbG93cyB0aGUgeGNvbG9yIHBhY2thZ2UncyBIVE1MIGNvbG9yIG1vZGVsLlxuICAgICAgLy8gUHJlZGVmaW5lZCBjb2xvciBuYW1lcyBhcmUgYWxsIG1pc3NlZCBieSB0aGlzIFJlZ0V4IHBhdHRlcm4uXG4gICAgICBjb2xvciA9IFwiI1wiICsgY29sb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiY29sb3ItdG9rZW5cIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIGNvbG9yOiBjb2xvclxuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhIHNpemUgc3BlY2lmaWNhdGlvbiwgY29uc2lzdGluZyBvZiBtYWduaXR1ZGUgYW5kIHVuaXQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnBhcnNlU2l6ZUdyb3VwID0gZnVuY3Rpb24gcGFyc2VTaXplR3JvdXAob3B0aW9uYWwpIHtcbiAgICB2YXIgcmVzO1xuICAgIHZhciBpc0JsYW5rID0gZmFsc2U7XG5cbiAgICBpZiAoIW9wdGlvbmFsICYmIHRoaXMubmV4dFRva2VuLnRleHQgIT09IFwie1wiKSB7XG4gICAgICByZXMgPSB0aGlzLnBhcnNlUmVnZXhHcm91cCgvXlstK10/ICooPzokfFxcZCt8XFxkK1xcLlxcZCp8XFwuXFxkKikgKlthLXpdezAsMn0gKiQvLCBcInNpemVcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IHRoaXMucGFyc2VTdHJpbmdHcm91cChcInNpemVcIiwgb3B0aW9uYWwpO1xuICAgIH1cblxuICAgIGlmICghcmVzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbmFsICYmIHJlcy50ZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gQmVjYXVzZSB3ZSd2ZSB0ZXN0ZWQgZm9yIHdoYXQgaXMgIW9wdGlvbmFsLCB0aGlzIGJsb2NrIHdvbid0XG4gICAgICAvLyBhZmZlY3QgXFxrZXJuLCBcXGhzcGFjZSwgZXRjLiBJdCB3aWxsIGNhcHR1cmUgdGhlIG1hbmRhdG9yeSBhcmd1bWVudHNcbiAgICAgIC8vIHRvIFxcZ2VuZnJhYyBhbmQgXFxhYm92ZS5cbiAgICAgIHJlcy50ZXh0ID0gXCIwcHRcIjsgLy8gRW5hYmxlIFxcYWJvdmV7fVxuXG4gICAgICBpc0JsYW5rID0gdHJ1ZTsgLy8gVGhpcyBpcyBoZXJlIHNwZWNpZmljYWxseSBmb3IgXFxnZW5mcmFjXG4gICAgfVxuXG4gICAgdmFyIG1hdGNoID0gLyhbLStdPykgKihcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspICooW2Etel17Mn0pLy5leGVjKHJlcy50ZXh0KTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkludmFsaWQgc2l6ZTogJ1wiICsgcmVzLnRleHQgKyBcIidcIiwgcmVzKTtcbiAgICB9XG5cbiAgICB2YXIgZGF0YSA9IHtcbiAgICAgIG51bWJlcjogKyhtYXRjaFsxXSArIG1hdGNoWzJdKSxcbiAgICAgIC8vIHNpZ24gKyBtYWduaXR1ZGUsIGNhc3QgdG8gbnVtYmVyXG4gICAgICB1bml0OiBtYXRjaFszXVxuICAgIH07XG5cbiAgICBpZiAoIXZhbGlkVW5pdChkYXRhKSkge1xuICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiSW52YWxpZCB1bml0OiAnXCIgKyBkYXRhLnVuaXQgKyBcIidcIiwgcmVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzaXplXCIsXG4gICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICB2YWx1ZTogZGF0YSxcbiAgICAgIGlzQmxhbms6IGlzQmxhbmtcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgYW4gVVJMLCBjaGVja2luZyBlc2NhcGVkIGxldHRlcnMgYW5kIGFsbG93ZWQgcHJvdG9jb2xzLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5wYXJzZVVybEdyb3VwID0gZnVuY3Rpb24gcGFyc2VVcmxHcm91cChvcHRpb25hbCkge1xuICAgIHZhciByZXMgPSB0aGlzLnBhcnNlU3RyaW5nR3JvdXAoXCJ1cmxcIiwgb3B0aW9uYWwsIHRydWUpOyAvLyBnZXQgcmF3IHN0cmluZ1xuXG4gICAgaWYgKCFyZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gaHlwZXJyZWYgcGFja2FnZSBhbGxvd3MgYmFja3NsYXNoZXMgYWxvbmUgaW4gaHJlZiwgYnV0IGRvZXNuJ3RcbiAgICAvLyBnZW5lcmF0ZSB2YWxpZCBsaW5rcyBpbiBzdWNoIGNhc2VzOyB3ZSBpbnRlcnByZXQgdGhpcyBhc1xuICAgIC8vIFwidW5kZWZpbmVkXCIgYmVoYXZpb3VyLCBhbmQga2VlcCB0aGVtIGFzLWlzLiBTb21lIGJyb3dzZXIgd2lsbFxuICAgIC8vIHJlcGxhY2UgYmFja3NsYXNoZXMgd2l0aCBmb3J3YXJkIHNsYXNoZXMuXG5cblxuICAgIHZhciB1cmwgPSByZXMudGV4dC5yZXBsYWNlKC9cXFxcKFsjJCUmfl9ee31dKS9nLCAnJDEnKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ1cmxcIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIHVybDogdXJsXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogSWYgYG9wdGlvbmFsYCBpcyBmYWxzZSBvciBhYnNlbnQsIHRoaXMgcGFyc2VzIGFuIG9yZGluYXJ5IGdyb3VwLFxuICAgKiB3aGljaCBpcyBlaXRoZXIgYSBzaW5nbGUgbnVjbGV1cyAobGlrZSBcInhcIikgb3IgYW4gZXhwcmVzc2lvblxuICAgKiBpbiBicmFjZXMgKGxpa2UgXCJ7eCt5fVwiKSBvciBhbiBpbXBsaWNpdCBncm91cCwgYSBncm91cCB0aGF0IHN0YXJ0c1xuICAgKiBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiwgYW5kIGVuZHMgcmlnaHQgYmVmb3JlIGEgaGlnaGVyIGV4cGxpY2l0XG4gICAqIGdyb3VwIGVuZHMsIG9yIGF0IEVPRi5cbiAgICogSWYgYG9wdGlvbmFsYCBpcyB0cnVlLCBpdCBwYXJzZXMgZWl0aGVyIGEgYnJhY2tldC1kZWxpbWl0ZWQgZXhwcmVzc2lvblxuICAgKiAobGlrZSBcIlt4K3ldXCIpIG9yIHJldHVybnMgbnVsbCB0byBpbmRpY2F0ZSB0aGUgYWJzZW5jZSBvZiBhXG4gICAqIGJyYWNrZXQtZW5jbG9zZWQgZ3JvdXAuXG4gICAqIElmIGBtb2RlYCBpcyBwcmVzZW50LCBzd2l0Y2hlcyB0byB0aGF0IG1vZGUgd2hpbGUgcGFyc2luZyB0aGUgZ3JvdXAsXG4gICAqIGFuZCBzd2l0Y2hlcyBiYWNrIGFmdGVyLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5wYXJzZUdyb3VwID0gZnVuY3Rpb24gcGFyc2VHcm91cChuYW1lLCAvLyBGb3IgZXJyb3IgcmVwb3J0aW5nLlxuICBvcHRpb25hbCwgZ3JlZWRpbmVzcywgYnJlYWtPblRva2VuVGV4dCwgbW9kZSkge1xuICAgIHZhciBvdXRlck1vZGUgPSB0aGlzLm1vZGU7XG4gICAgdmFyIGZpcnN0VG9rZW4gPSB0aGlzLm5leHRUb2tlbjtcbiAgICB2YXIgdGV4dCA9IGZpcnN0VG9rZW4udGV4dDsgLy8gU3dpdGNoIHRvIHNwZWNpZmllZCBtb2RlXG5cbiAgICBpZiAobW9kZSkge1xuICAgICAgdGhpcy5zd2l0Y2hNb2RlKG1vZGUpO1xuICAgIH1cblxuICAgIHZhciBncm91cEVuZDtcbiAgICB2YXIgcmVzdWx0OyAvLyBUcnkgdG8gcGFyc2UgYW4gb3BlbiBicmFjZSBvciBcXGJlZ2luZ3JvdXBcblxuICAgIGlmIChvcHRpb25hbCA/IHRleHQgPT09IFwiW1wiIDogdGV4dCA9PT0gXCJ7XCIgfHwgdGV4dCA9PT0gXCJcXFxcYmVnaW5ncm91cFwiKSB7XG4gICAgICBncm91cEVuZCA9IFBhcnNlci5lbmRPZkdyb3VwW3RleHRdOyAvLyBTdGFydCBhIG5ldyBncm91cCBuYW1lc3BhY2VcblxuICAgICAgdGhpcy5ndWxsZXQuYmVnaW5Hcm91cCgpOyAvLyBJZiB3ZSBnZXQgYSBicmFjZSwgcGFyc2UgYW4gZXhwcmVzc2lvblxuXG4gICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgIHZhciBleHByZXNzaW9uID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oZmFsc2UsIGdyb3VwRW5kKTtcbiAgICAgIHZhciBsYXN0VG9rZW4gPSB0aGlzLm5leHRUb2tlbjsgLy8gRW5kIGdyb3VwIG5hbWVzcGFjZSBiZWZvcmUgY29uc3VtaW5nIHN5bWJvbCBhZnRlciBjbG9zZSBicmFjZVxuXG4gICAgICB0aGlzLmd1bGxldC5lbmRHcm91cCgpO1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgbG9jOiBTb3VyY2VMb2NhdGlvbi5yYW5nZShmaXJzdFRva2VuLCBsYXN0VG9rZW4pLFxuICAgICAgICBib2R5OiBleHByZXNzaW9uLFxuICAgICAgICAvLyBBIGdyb3VwIGZvcm1lZCBieSBcXGJlZ2luZ3JvdXAuLi5cXGVuZGdyb3VwIGlzIGEgc2VtaS1zaW1wbGUgZ3JvdXBcbiAgICAgICAgLy8gd2hpY2ggZG9lc24ndCBhZmZlY3Qgc3BhY2luZyBpbiBtYXRoIG1vZGUsIGkuZS4sIGlzIHRyYW5zcGFyZW50LlxuICAgICAgICAvLyBodHRwczovL3RleC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMTkzMC93aGVuLXNob3VsZC1vbmUtXG4gICAgICAgIC8vIHVzZS1iZWdpbmdyb3VwLWluc3RlYWQtb2YtYmdyb3VwXG4gICAgICAgIHNlbWlzaW1wbGU6IHRleHQgPT09IFwiXFxcXGJlZ2luZ3JvdXBcIiB8fCB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChvcHRpb25hbCkge1xuICAgICAgLy8gUmV0dXJuIG5vdGhpbmcgZm9yIGFuIG9wdGlvbmFsIGdyb3VwXG4gICAgICByZXN1bHQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiB0aGVyZSBleGlzdHMgYSBmdW5jdGlvbiB3aXRoIHRoaXMgbmFtZSwgcGFyc2UgdGhlIGZ1bmN0aW9uLlxuICAgICAgLy8gT3RoZXJ3aXNlLCBqdXN0IHJldHVybiBhIG51Y2xldXNcbiAgICAgIHJlc3VsdCA9IHRoaXMucGFyc2VGdW5jdGlvbihicmVha09uVG9rZW5UZXh0LCBuYW1lLCBncmVlZGluZXNzKSB8fCB0aGlzLnBhcnNlU3ltYm9sKCk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCAmJiB0ZXh0WzBdID09PSBcIlxcXFxcIiAmJiAhaW1wbGljaXRDb21tYW5kcy5oYXNPd25Qcm9wZXJ0eSh0ZXh0KSkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy50aHJvd09uRXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJVbmRlZmluZWQgY29udHJvbCBzZXF1ZW5jZTogXCIgKyB0ZXh0LCBmaXJzdFRva2VuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdCA9IHRoaXMuZm9ybWF0VW5zdXBwb3J0ZWRDbWQodGV4dCk7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgfVxuICAgIH0gLy8gU3dpdGNoIG1vZGUgYmFja1xuXG5cbiAgICBpZiAobW9kZSkge1xuICAgICAgdGhpcy5zd2l0Y2hNb2RlKG91dGVyTW9kZSk7XG4gICAgfSAvLyBNYWtlIHN1cmUgd2UgZ290IGEgY2xvc2UgYnJhY2VcblxuXG4gICAgaWYgKGdyb3VwRW5kKSB7XG4gICAgICB0aGlzLmV4cGVjdChncm91cEVuZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICAvKipcbiAgICogRm9ybSBsaWdhdHVyZS1saWtlIGNvbWJpbmF0aW9ucyBvZiBjaGFyYWN0ZXJzIGZvciB0ZXh0IG1vZGUuXG4gICAqIFRoaXMgaW5jbHVkZXMgaW5wdXRzIGxpa2UgXCItLVwiLCBcIi0tLVwiLCBcImBgXCIgYW5kIFwiJydcIi5cbiAgICogVGhlIHJlc3VsdCB3aWxsIHNpbXBseSByZXBsYWNlIG11bHRpcGxlIHRleHRvcmQgbm9kZXMgd2l0aCBhIHNpbmdsZVxuICAgKiBjaGFyYWN0ZXIgaW4gZWFjaCB2YWx1ZSBieSBhIHNpbmdsZSB0ZXh0b3JkIG5vZGUgaGF2aW5nIG11bHRpcGxlXG4gICAqIGNoYXJhY3RlcnMgaW4gaXRzIHZhbHVlLiAgVGhlIHJlcHJlc2VudGF0aW9uIGlzIHN0aWxsIEFTQ0lJIHNvdXJjZS5cbiAgICogVGhlIGdyb3VwIHdpbGwgYmUgbW9kaWZpZWQgaW4gcGxhY2UuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmZvcm1MaWdhdHVyZXMgPSBmdW5jdGlvbiBmb3JtTGlnYXR1cmVzKGdyb3VwKSB7XG4gICAgdmFyIG4gPSBncm91cC5sZW5ndGggLSAxO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIHZhciBhID0gZ3JvdXBbaV07IC8vICRGbG93Rml4TWU6IE5vdCBldmVyeSBub2RlIHR5cGUgaGFzIGEgYHRleHRgIHByb3BlcnR5LlxuXG4gICAgICB2YXIgdiA9IGEudGV4dDtcblxuICAgICAgaWYgKHYgPT09IFwiLVwiICYmIGdyb3VwW2kgKyAxXS50ZXh0ID09PSBcIi1cIikge1xuICAgICAgICBpZiAoaSArIDEgPCBuICYmIGdyb3VwW2kgKyAyXS50ZXh0ID09PSBcIi1cIikge1xuICAgICAgICAgIGdyb3VwLnNwbGljZShpLCAzLCB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgbG9jOiBTb3VyY2VMb2NhdGlvbi5yYW5nZShhLCBncm91cFtpICsgMl0pLFxuICAgICAgICAgICAgdGV4dDogXCItLS1cIlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIG4gLT0gMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBncm91cC5zcGxpY2UoaSwgMiwge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgICAgICBtb2RlOiBcInRleHRcIixcbiAgICAgICAgICAgIGxvYzogU291cmNlTG9jYXRpb24ucmFuZ2UoYSwgZ3JvdXBbaSArIDFdKSxcbiAgICAgICAgICAgIHRleHQ6IFwiLS1cIlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIG4gLT0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoKHYgPT09IFwiJ1wiIHx8IHYgPT09IFwiYFwiKSAmJiBncm91cFtpICsgMV0udGV4dCA9PT0gdikge1xuICAgICAgICBncm91cC5zcGxpY2UoaSwgMiwge1xuICAgICAgICAgIHR5cGU6IFwidGV4dG9yZFwiLFxuICAgICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICAgIGxvYzogU291cmNlTG9jYXRpb24ucmFuZ2UoYSwgZ3JvdXBbaSArIDFdKSxcbiAgICAgICAgICB0ZXh0OiB2ICsgdlxuICAgICAgICB9KTtcbiAgICAgICAgbiAtPSAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogUGFyc2UgYSBzaW5nbGUgc3ltYm9sIG91dCBvZiB0aGUgc3RyaW5nLiBIZXJlLCB3ZSBoYW5kbGUgc2luZ2xlIGNoYXJhY3RlclxuICAgKiBzeW1ib2xzIGFuZCBzcGVjaWFsIGZ1bmN0aW9ucyBsaWtlIHZlcmJhdGltXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnBhcnNlU3ltYm9sID0gZnVuY3Rpb24gcGFyc2VTeW1ib2woKSB7XG4gICAgdmFyIG51Y2xldXMgPSB0aGlzLm5leHRUb2tlbjtcbiAgICB2YXIgdGV4dCA9IG51Y2xldXMudGV4dDtcblxuICAgIGlmICgvXlxcXFx2ZXJiW15hLXpBLVpdLy50ZXN0KHRleHQpKSB7XG4gICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgIHZhciBhcmcgPSB0ZXh0LnNsaWNlKDUpO1xuICAgICAgdmFyIHN0YXIgPSBhcmcuY2hhckF0KDApID09PSBcIipcIjtcblxuICAgICAgaWYgKHN0YXIpIHtcbiAgICAgICAgYXJnID0gYXJnLnNsaWNlKDEpO1xuICAgICAgfSAvLyBMZXhlcidzIHRva2VuUmVnZXggaXMgY29uc3RydWN0ZWQgdG8gYWx3YXlzIGhhdmUgbWF0Y2hpbmdcbiAgICAgIC8vIGZpcnN0L2xhc3QgY2hhcmFjdGVycy5cblxuXG4gICAgICBpZiAoYXJnLmxlbmd0aCA8IDIgfHwgYXJnLmNoYXJBdCgwKSAhPT0gYXJnLnNsaWNlKC0xKSkge1xuICAgICAgICB0aHJvdyBuZXcgc3JjX1BhcnNlRXJyb3IoXCJcXFxcdmVyYiBhc3NlcnRpb24gZmFpbGVkIC0tXFxuICAgICAgICAgICAgICAgICAgICBwbGVhc2UgcmVwb3J0IHdoYXQgaW5wdXQgY2F1c2VkIHRoaXMgYnVnXCIpO1xuICAgICAgfVxuXG4gICAgICBhcmcgPSBhcmcuc2xpY2UoMSwgLTEpOyAvLyByZW1vdmUgZmlyc3QgYW5kIGxhc3QgY2hhclxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcInZlcmJcIixcbiAgICAgICAgbW9kZTogXCJ0ZXh0XCIsXG4gICAgICAgIGJvZHk6IGFyZyxcbiAgICAgICAgc3Rhcjogc3RhclxuICAgICAgfTtcbiAgICB9IC8vIEF0IHRoaXMgcG9pbnQsIHdlIHNob3VsZCBoYXZlIGEgc3ltYm9sLCBwb3NzaWJseSB3aXRoIGFjY2VudHMuXG4gICAgLy8gRmlyc3QgZXhwYW5kIGFueSBhY2NlbnRlZCBiYXNlIHN5bWJvbCBhY2NvcmRpbmcgdG8gdW5pY29kZVN5bWJvbHMuXG5cblxuICAgIGlmICh1bmljb2RlU3ltYm9scy5oYXNPd25Qcm9wZXJ0eSh0ZXh0WzBdKSAmJiAhc3JjX3N5bWJvbHNbdGhpcy5tb2RlXVt0ZXh0WzBdXSkge1xuICAgICAgLy8gVGhpcyBiZWhhdmlvciBpcyBub3Qgc3RyaWN0IChYZVRlWC1jb21wYXRpYmxlKSBpbiBtYXRoIG1vZGUuXG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5zdHJpY3QgJiYgdGhpcy5tb2RlID09PSBcIm1hdGhcIikge1xuICAgICAgICB0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcInVuaWNvZGVUZXh0SW5NYXRoTW9kZVwiLCBcIkFjY2VudGVkIFVuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgXFxcIlwiICsgdGV4dFswXSArIFwiXFxcIiB1c2VkIGluIFwiICsgXCJtYXRoIG1vZGVcIiwgbnVjbGV1cyk7XG4gICAgICB9XG5cbiAgICAgIHRleHQgPSB1bmljb2RlU3ltYm9sc1t0ZXh0WzBdXSArIHRleHQuc3Vic3RyKDEpO1xuICAgIH0gLy8gU3RyaXAgb2ZmIGFueSBjb21iaW5pbmcgY2hhcmFjdGVyc1xuXG5cbiAgICB2YXIgbWF0Y2ggPSBjb21iaW5pbmdEaWFjcml0aWNhbE1hcmtzRW5kUmVnZXguZXhlYyh0ZXh0KTtcblxuICAgIGlmIChtYXRjaCkge1xuICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIG1hdGNoLmluZGV4KTtcblxuICAgICAgaWYgKHRleHQgPT09ICdpJykge1xuICAgICAgICB0ZXh0ID0gXCJcXHUwMTMxXCI7IC8vIGRvdGxlc3MgaSwgaW4gbWF0aCBhbmQgdGV4dCBtb2RlXG4gICAgICB9IGVsc2UgaWYgKHRleHQgPT09ICdqJykge1xuICAgICAgICB0ZXh0ID0gXCJcXHUwMjM3XCI7IC8vIGRvdGxlc3MgaiwgaW4gbWF0aCBhbmQgdGV4dCBtb2RlXG4gICAgICB9XG4gICAgfSAvLyBSZWNvZ25pemUgYmFzZSBzeW1ib2xcblxuXG4gICAgdmFyIHN5bWJvbDtcblxuICAgIGlmIChzcmNfc3ltYm9sc1t0aGlzLm1vZGVdW3RleHRdKSB7XG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5zdHJpY3QgJiYgdGhpcy5tb2RlID09PSAnbWF0aCcgJiYgZXh0cmFMYXRpbi5pbmRleE9mKHRleHQpID49IDApIHtcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJ1bmljb2RlVGV4dEluTWF0aE1vZGVcIiwgXCJMYXRpbi0xL1VuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgXFxcIlwiICsgdGV4dFswXSArIFwiXFxcIiB1c2VkIGluIFwiICsgXCJtYXRoIG1vZGVcIiwgbnVjbGV1cyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBncm91cCA9IHNyY19zeW1ib2xzW3RoaXMubW9kZV1bdGV4dF0uZ3JvdXA7XG4gICAgICB2YXIgbG9jID0gU291cmNlTG9jYXRpb24ucmFuZ2UobnVjbGV1cyk7XG4gICAgICB2YXIgcztcblxuICAgICAgaWYgKEFUT01TLmhhc093blByb3BlcnR5KGdyb3VwKSkge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICAgIHZhciBmYW1pbHkgPSBncm91cDtcbiAgICAgICAgcyA9IHtcbiAgICAgICAgICB0eXBlOiBcImF0b21cIixcbiAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgZmFtaWx5OiBmYW1pbHksXG4gICAgICAgICAgbG9jOiBsb2MsXG4gICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICBzID0ge1xuICAgICAgICAgIHR5cGU6IGdyb3VwLFxuICAgICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgICBsb2M6IGxvYyxcbiAgICAgICAgICB0ZXh0OiB0ZXh0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHN5bWJvbCA9IHM7XG4gICAgfSBlbHNlIGlmICh0ZXh0LmNoYXJDb2RlQXQoMCkgPj0gMHg4MCkge1xuICAgICAgLy8gbm8gc3ltYm9sIGZvciBlLmcuIF5cbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLnN0cmljdCkge1xuICAgICAgICBpZiAoIXN1cHBvcnRlZENvZGVwb2ludCh0ZXh0LmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJ1bmtub3duU3ltYm9sXCIsIFwiVW5yZWNvZ25pemVkIFVuaWNvZGUgY2hhcmFjdGVyIFxcXCJcIiArIHRleHRbMF0gKyBcIlxcXCJcIiArIChcIiAoXCIgKyB0ZXh0LmNoYXJDb2RlQXQoMCkgKyBcIilcIiksIG51Y2xldXMpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gXCJtYXRoXCIpIHtcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcInVuaWNvZGVUZXh0SW5NYXRoTW9kZVwiLCBcIlVuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgXFxcIlwiICsgdGV4dFswXSArIFwiXFxcIiB1c2VkIGluIG1hdGggbW9kZVwiLCBudWNsZXVzKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBBbGwgbm9ubWF0aGVtYXRpY2FsIFVuaWNvZGUgY2hhcmFjdGVycyBhcmUgcmVuZGVyZWQgYXMgaWYgdGhleVxuICAgICAgLy8gYXJlIGluIHRleHQgbW9kZSAod3JhcHBlZCBpbiBcXHRleHQpIGJlY2F1c2UgdGhhdCdzIHdoYXQgaXRcbiAgICAgIC8vIHRha2VzIHRvIHJlbmRlciB0aGVtIGluIExhVGVYLiAgU2V0dGluZyBgbW9kZTogdGhpcy5tb2RlYCBpc1xuICAgICAgLy8gYW5vdGhlciBuYXR1cmFsIGNob2ljZSAodGhlIHVzZXIgcmVxdWVzdGVkIG1hdGggbW9kZSksIGJ1dFxuICAgICAgLy8gdGhpcyBtYWtlcyBpdCBtb3JlIGRpZmZpY3VsdCBmb3IgZ2V0Q2hhcmFjdGVyTWV0cmljcygpIHRvXG4gICAgICAvLyBkaXN0aW5ndWlzaCBVbmljb2RlIGNoYXJhY3RlcnMgd2l0aG91dCBtZXRyaWNzIGFuZCB0aG9zZSBmb3JcbiAgICAgIC8vIHdoaWNoIHdlIHdhbnQgdG8gc2ltdWxhdGUgdGhlIGxldHRlciBNLlxuXG5cbiAgICAgIHN5bWJvbCA9IHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICBsb2M6IFNvdXJjZUxvY2F0aW9uLnJhbmdlKG51Y2xldXMpLFxuICAgICAgICB0ZXh0OiB0ZXh0XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gRU9GLCBeLCBfLCB7LCB9LCBldGMuXG4gICAgfVxuXG4gICAgdGhpcy5jb25zdW1lKCk7IC8vIFRyYW5zZm9ybSBjb21iaW5pbmcgY2hhcmFjdGVycyBpbnRvIGFjY2VudHNcblxuICAgIGlmIChtYXRjaCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRjaFswXS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYWNjZW50ID0gbWF0Y2hbMF1baV07XG5cbiAgICAgICAgaWYgKCF1bmljb2RlQWNjZW50c1thY2NlbnRdKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IHNyY19QYXJzZUVycm9yKFwiVW5rbm93biBhY2NlbnQgJyBcIiArIGFjY2VudCArIFwiJ1wiLCBudWNsZXVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjb21tYW5kID0gdW5pY29kZUFjY2VudHNbYWNjZW50XVt0aGlzLm1vZGVdO1xuXG4gICAgICAgIGlmICghY29tbWFuZCkge1xuICAgICAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkFjY2VudCBcIiArIGFjY2VudCArIFwiIHVuc3VwcG9ydGVkIGluIFwiICsgdGhpcy5tb2RlICsgXCIgbW9kZVwiLCBudWNsZXVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN5bWJvbCA9IHtcbiAgICAgICAgICB0eXBlOiBcImFjY2VudFwiLFxuICAgICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgICBsb2M6IFNvdXJjZUxvY2F0aW9uLnJhbmdlKG51Y2xldXMpLFxuICAgICAgICAgIGxhYmVsOiBjb21tYW5kLFxuICAgICAgICAgIGlzU3RyZXRjaHk6IGZhbHNlLFxuICAgICAgICAgIGlzU2hpZnR5OiB0cnVlLFxuICAgICAgICAgIGJhc2U6IHN5bWJvbFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzeW1ib2w7XG4gIH07XG5cbiAgcmV0dXJuIFBhcnNlcjtcbn0oKTtcblxuUGFyc2VyX1BhcnNlci5lbmRPZkV4cHJlc3Npb24gPSBbXCJ9XCIsIFwiXFxcXGVuZGdyb3VwXCIsIFwiXFxcXGVuZFwiLCBcIlxcXFxyaWdodFwiLCBcIiZcIl07XG5QYXJzZXJfUGFyc2VyLmVuZE9mR3JvdXAgPSB7XG4gIFwiW1wiOiBcIl1cIixcbiAgXCJ7XCI6IFwifVwiLFxuICBcIlxcXFxiZWdpbmdyb3VwXCI6IFwiXFxcXGVuZGdyb3VwXCJcbiAgLyoqXG4gICAqIFBhcnNlcyBhbiBcImV4cHJlc3Npb25cIiwgd2hpY2ggaXMgYSBsaXN0IG9mIGF0b21zLlxuICAgKlxuICAgKiBgYnJlYWtPbkluZml4YDogU2hvdWxkIHRoZSBwYXJzaW5nIHN0b3Agd2hlbiB3ZSBoaXQgaW5maXggbm9kZXM/IFRoaXNcbiAgICogICAgICAgICAgICAgICAgIGhhcHBlbnMgd2hlbiBmdW5jdGlvbnMgaGF2ZSBoaWdoZXIgcHJlY2VuZGVuY2UgaGFuIGluZml4XG4gICAqICAgICAgICAgICAgICAgICBub2RlcyBpbiBpbXBsaWNpdCBwYXJzZXMuXG4gICAqXG4gICAqIGBicmVha09uVG9rZW5UZXh0YDogVGhlIHRleHQgb2YgdGhlIHRva2VuIHRoYXQgdGhlIGV4cHJlc3Npb24gc2hvdWxkIGVuZFxuICAgKiAgICAgICAgICAgICAgICAgICAgIHdpdGgsIG9yIGBudWxsYCBpZiBzb21ldGhpbmcgZWxzZSBzaG91bGQgZW5kIHRoZVxuICAgKiAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24uXG4gICAqL1xuXG59O1xuUGFyc2VyX1BhcnNlci5TVVBTVUJfR1JFRURJTkVTUyA9IDE7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3BhcnNlVHJlZS5qc1xuLyoqXG4gKiBQcm92aWRlcyBhIHNpbmdsZSBmdW5jdGlvbiBmb3IgcGFyc2luZyBhbiBleHByZXNzaW9uIHVzaW5nIGEgUGFyc2VyXG4gKiBUT0RPKGVtaWx5KTogUmVtb3ZlIHRoaXNcbiAqL1xuXG5cblxuLyoqXG4gKiBQYXJzZXMgYW4gZXhwcmVzc2lvbiB1c2luZyBhIFBhcnNlciwgdGhlbiByZXR1cm5zIHRoZSBwYXJzZWQgcmVzdWx0LlxuICovXG52YXIgcGFyc2VUcmVlX3BhcnNlVHJlZSA9IGZ1bmN0aW9uIHBhcnNlVHJlZSh0b1BhcnNlLCBzZXR0aW5ncykge1xuICBpZiAoISh0eXBlb2YgdG9QYXJzZSA9PT0gJ3N0cmluZycgfHwgdG9QYXJzZSBpbnN0YW5jZW9mIFN0cmluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdLYVRlWCBjYW4gb25seSBwYXJzZSBzdHJpbmcgdHlwZWQgZXhwcmVzc2lvbicpO1xuICB9XG5cbiAgdmFyIHBhcnNlciA9IG5ldyBQYXJzZXJfUGFyc2VyKHRvUGFyc2UsIHNldHRpbmdzKTsgLy8gQmxhbmsgb3V0IGFueSBcXGRmQHRhZyB0byBhdm9pZCBzcHVyaW91cyBcIkR1cGxpY2F0ZSBcXHRhZ1wiIGVycm9yc1xuXG4gIGRlbGV0ZSBwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5jdXJyZW50W1wiXFxcXGRmQHRhZ1wiXTtcbiAgdmFyIHRyZWUgPSBwYXJzZXIucGFyc2UoKTsgLy8gSWYgdGhlIGlucHV0IHVzZWQgXFx0YWcsIGl0IHdpbGwgc2V0IHRoZSBcXGRmQHRhZyBtYWNybyB0byB0aGUgdGFnLlxuICAvLyBJbiB0aGlzIGNhc2UsIHdlIHNlcGFyYXRlbHkgcGFyc2UgdGhlIHRhZyBhbmQgd3JhcCB0aGUgdHJlZS5cblxuICBpZiAocGFyc2VyLmd1bGxldC5tYWNyb3MuZ2V0KFwiXFxcXGRmQHRhZ1wiKSkge1xuICAgIGlmICghc2V0dGluZ3MuZGlzcGxheU1vZGUpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIlxcXFx0YWcgd29ya3Mgb25seSBpbiBkaXNwbGF5IGVxdWF0aW9uc1wiKTtcbiAgICB9XG5cbiAgICBwYXJzZXIuZ3VsbGV0LmZlZWQoXCJcXFxcZGZAdGFnXCIpO1xuICAgIHRyZWUgPSBbe1xuICAgICAgdHlwZTogXCJ0YWdcIixcbiAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgYm9keTogdHJlZSxcbiAgICAgIHRhZzogcGFyc2VyLnBhcnNlKClcbiAgICB9XTtcbiAgfVxuXG4gIHJldHVybiB0cmVlO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3BhcnNlVHJlZSA9IChwYXJzZVRyZWVfcGFyc2VUcmVlKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4va2F0ZXguanNcbi8qIGVzbGludCBuby1jb25zb2xlOjAgKi9cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBLYVRlWC4gSGVyZSwgd2UgZXhwb3NlIGZ1bmN0aW9ucyBmb3JcbiAqIHJlbmRlcmluZyBleHByZXNzaW9ucyBlaXRoZXIgdG8gRE9NIG5vZGVzIG9yIHRvIG1hcmt1cCBzdHJpbmdzLlxuICpcbiAqIFdlIGFsc28gZXhwb3NlIHRoZSBQYXJzZUVycm9yIGNsYXNzIHRvIGNoZWNrIGlmIGVycm9ycyB0aHJvd24gZnJvbSBLYVRlWCBhcmVcbiAqIGVycm9ycyBpbiB0aGUgZXhwcmVzc2lvbiwgb3IgZXJyb3JzIGluIGphdmFzY3JpcHQgaGFuZGxpbmcuXG4gKi9cblxuXG5cblxuXG5cblxuXG5cblxuLyoqXG4gKiBQYXJzZSBhbmQgYnVpbGQgYW4gZXhwcmVzc2lvbiwgYW5kIHBsYWNlIHRoYXQgZXhwcmVzc2lvbiBpbiB0aGUgRE9NIG5vZGVcbiAqIGdpdmVuLlxuICovXG52YXIga2F0ZXhfcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKGV4cHJlc3Npb24sIGJhc2VOb2RlLCBvcHRpb25zKSB7XG4gIGJhc2VOb2RlLnRleHRDb250ZW50ID0gXCJcIjtcbiAgdmFyIG5vZGUgPSBrYXRleF9yZW5kZXJUb0RvbVRyZWUoZXhwcmVzc2lvbiwgb3B0aW9ucykudG9Ob2RlKCk7XG4gIGJhc2VOb2RlLmFwcGVuZENoaWxkKG5vZGUpO1xufTsgLy8gS2FUZVgncyBzdHlsZXMgZG9uJ3Qgd29yayBwcm9wZXJseSBpbiBxdWlya3MgbW9kZS4gUHJpbnQgb3V0IGFuIGVycm9yLCBhbmRcbi8vIGRpc2FibGUgcmVuZGVyaW5nLlxuXG5cbmlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgaWYgKGRvY3VtZW50LmNvbXBhdE1vZGUgIT09IFwiQ1NTMUNvbXBhdFwiKSB7XG4gICAgdHlwZW9mIGNvbnNvbGUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29uc29sZS53YXJuKFwiV2FybmluZzogS2FUZVggZG9lc24ndCB3b3JrIGluIHF1aXJrcyBtb2RlLiBNYWtlIHN1cmUgeW91ciBcIiArIFwid2Vic2l0ZSBoYXMgYSBzdWl0YWJsZSBkb2N0eXBlLlwiKTtcblxuICAgIGthdGV4X3JlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHRocm93IG5ldyBzcmNfUGFyc2VFcnJvcihcIkthVGVYIGRvZXNuJ3Qgd29yayBpbiBxdWlya3MgbW9kZS5cIik7XG4gICAgfTtcbiAgfVxufVxuLyoqXG4gKiBQYXJzZSBhbmQgYnVpbGQgYW4gZXhwcmVzc2lvbiwgYW5kIHJldHVybiB0aGUgbWFya3VwIGZvciB0aGF0LlxuICovXG5cblxudmFyIHJlbmRlclRvU3RyaW5nID0gZnVuY3Rpb24gcmVuZGVyVG9TdHJpbmcoZXhwcmVzc2lvbiwgb3B0aW9ucykge1xuICB2YXIgbWFya3VwID0ga2F0ZXhfcmVuZGVyVG9Eb21UcmVlKGV4cHJlc3Npb24sIG9wdGlvbnMpLnRvTWFya3VwKCk7XG4gIHJldHVybiBtYXJrdXA7XG59O1xuLyoqXG4gKiBQYXJzZSBhbiBleHByZXNzaW9uIGFuZCByZXR1cm4gdGhlIHBhcnNlIHRyZWUuXG4gKi9cblxuXG52YXIga2F0ZXhfZ2VuZXJhdGVQYXJzZVRyZWUgPSBmdW5jdGlvbiBnZW5lcmF0ZVBhcnNlVHJlZShleHByZXNzaW9uLCBvcHRpb25zKSB7XG4gIHZhciBzZXR0aW5ncyA9IG5ldyBTZXR0aW5nc19TZXR0aW5ncyhvcHRpb25zKTtcbiAgcmV0dXJuIHNyY19wYXJzZVRyZWUoZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xufTtcbi8qKlxuICogSWYgdGhlIGdpdmVuIGVycm9yIGlzIGEgS2FUZVggUGFyc2VFcnJvciBhbmQgb3B0aW9ucy50aHJvd09uRXJyb3IgaXMgZmFsc2UsXG4gKiByZW5kZXJzIHRoZSBpbnZhbGlkIExhVGVYIGFzIGEgc3BhbiB3aXRoIGhvdmVyIHRpdGxlIGdpdmluZyB0aGUgS2FUZVhcbiAqIGVycm9yIG1lc3NhZ2UuICBPdGhlcndpc2UsIHNpbXBseSB0aHJvd3MgdGhlIGVycm9yLlxuICovXG5cblxudmFyIGthdGV4X3JlbmRlckVycm9yID0gZnVuY3Rpb24gcmVuZGVyRXJyb3IoZXJyb3IsIGV4cHJlc3Npb24sIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMudGhyb3dPbkVycm9yIHx8ICEoZXJyb3IgaW5zdGFuY2VvZiBzcmNfUGFyc2VFcnJvcikpIHtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIHZhciBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wia2F0ZXgtZXJyb3JcIl0sIFtuZXcgZG9tVHJlZV9TeW1ib2xOb2RlKGV4cHJlc3Npb24pXSk7XG4gIG5vZGUuc2V0QXR0cmlidXRlKFwidGl0bGVcIiwgZXJyb3IudG9TdHJpbmcoKSk7XG4gIG5vZGUuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJjb2xvcjpcIiArIG9wdGlvbnMuZXJyb3JDb2xvcik7XG4gIHJldHVybiBub2RlO1xufTtcbi8qKlxuICogR2VuZXJhdGVzIGFuZCByZXR1cm5zIHRoZSBrYXRleCBidWlsZCB0cmVlLiBUaGlzIGlzIHVzZWQgZm9yIGFkdmFuY2VkXG4gKiB1c2UgY2FzZXMgKGxpa2UgcmVuZGVyaW5nIHRvIGN1c3RvbSBvdXRwdXQpLlxuICovXG5cblxudmFyIGthdGV4X3JlbmRlclRvRG9tVHJlZSA9IGZ1bmN0aW9uIHJlbmRlclRvRG9tVHJlZShleHByZXNzaW9uLCBvcHRpb25zKSB7XG4gIHZhciBzZXR0aW5ncyA9IG5ldyBTZXR0aW5nc19TZXR0aW5ncyhvcHRpb25zKTtcblxuICB0cnkge1xuICAgIHZhciB0cmVlID0gc3JjX3BhcnNlVHJlZShleHByZXNzaW9uLCBzZXR0aW5ncyk7XG4gICAgcmV0dXJuIGJ1aWxkVHJlZV9idWlsZFRyZWUodHJlZSwgZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBrYXRleF9yZW5kZXJFcnJvcihlcnJvciwgZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICB9XG59O1xuLyoqXG4gKiBHZW5lcmF0ZXMgYW5kIHJldHVybnMgdGhlIGthdGV4IGJ1aWxkIHRyZWUsIHdpdGgganVzdCBIVE1MIChubyBNYXRoTUwpLlxuICogVGhpcyBpcyB1c2VkIGZvciBhZHZhbmNlZCB1c2UgY2FzZXMgKGxpa2UgcmVuZGVyaW5nIHRvIGN1c3RvbSBvdXRwdXQpLlxuICovXG5cblxudmFyIGthdGV4X3JlbmRlclRvSFRNTFRyZWUgPSBmdW5jdGlvbiByZW5kZXJUb0hUTUxUcmVlKGV4cHJlc3Npb24sIG9wdGlvbnMpIHtcbiAgdmFyIHNldHRpbmdzID0gbmV3IFNldHRpbmdzX1NldHRpbmdzKG9wdGlvbnMpO1xuXG4gIHRyeSB7XG4gICAgdmFyIHRyZWUgPSBzcmNfcGFyc2VUcmVlKGV4cHJlc3Npb24sIHNldHRpbmdzKTtcbiAgICByZXR1cm4gYnVpbGRUcmVlX2J1aWxkSFRNTFRyZWUodHJlZSwgZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBrYXRleF9yZW5kZXJFcnJvcihlcnJvciwgZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICB9XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBrYXRleF8wID0gKHtcbiAgLyoqXG4gICAqIEN1cnJlbnQgS2FUZVggdmVyc2lvblxuICAgKi9cbiAgdmVyc2lvbjogXCIwLjExLjBcIixcblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgZ2l2ZW4gTGFUZVggaW50byBhbiBIVE1MK01hdGhNTCBjb21iaW5hdGlvbiwgYW5kIGFkZHNcbiAgICogaXQgYXMgYSBjaGlsZCB0byB0aGUgc3BlY2lmaWVkIERPTSBub2RlLlxuICAgKi9cbiAgcmVuZGVyOiBrYXRleF9yZW5kZXIsXG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGdpdmVuIExhVGVYIGludG8gYW4gSFRNTCtNYXRoTUwgY29tYmluYXRpb24gc3RyaW5nLFxuICAgKiBmb3Igc2VuZGluZyB0byB0aGUgY2xpZW50LlxuICAgKi9cbiAgcmVuZGVyVG9TdHJpbmc6IHJlbmRlclRvU3RyaW5nLFxuXG4gIC8qKlxuICAgKiBLYVRlWCBlcnJvciwgdXN1YWxseSBkdXJpbmcgcGFyc2luZy5cbiAgICovXG4gIFBhcnNlRXJyb3I6IHNyY19QYXJzZUVycm9yLFxuXG4gIC8qKlxuICAgKiBQYXJzZXMgdGhlIGdpdmVuIExhVGVYIGludG8gS2FUZVgncyBpbnRlcm5hbCBwYXJzZSB0cmVlIHN0cnVjdHVyZSxcbiAgICogd2l0aG91dCByZW5kZXJpbmcgdG8gSFRNTCBvciBNYXRoTUwuXG4gICAqXG4gICAqIE5PVEU6IFRoaXMgbWV0aG9kIGlzIG5vdCBjdXJyZW50bHkgcmVjb21tZW5kZWQgZm9yIHB1YmxpYyB1c2UuXG4gICAqIFRoZSBpbnRlcm5hbCB0cmVlIHJlcHJlc2VudGF0aW9uIGlzIHVuc3RhYmxlIGFuZCBpcyB2ZXJ5IGxpa2VseVxuICAgKiB0byBjaGFuZ2UuIFVzZSBhdCB5b3VyIG93biByaXNrLlxuICAgKi9cbiAgX19wYXJzZToga2F0ZXhfZ2VuZXJhdGVQYXJzZVRyZWUsXG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGdpdmVuIExhVGVYIGludG8gYW4gSFRNTCtNYXRoTUwgaW50ZXJuYWwgRE9NIHRyZWVcbiAgICogcmVwcmVzZW50YXRpb24sIHdpdGhvdXQgZmxhdHRlbmluZyB0aGF0IHJlcHJlc2VudGF0aW9uIHRvIGEgc3RyaW5nLlxuICAgKlxuICAgKiBOT1RFOiBUaGlzIG1ldGhvZCBpcyBub3QgY3VycmVudGx5IHJlY29tbWVuZGVkIGZvciBwdWJsaWMgdXNlLlxuICAgKiBUaGUgaW50ZXJuYWwgdHJlZSByZXByZXNlbnRhdGlvbiBpcyB1bnN0YWJsZSBhbmQgaXMgdmVyeSBsaWtlbHlcbiAgICogdG8gY2hhbmdlLiBVc2UgYXQgeW91ciBvd24gcmlzay5cbiAgICovXG4gIF9fcmVuZGVyVG9Eb21UcmVlOiBrYXRleF9yZW5kZXJUb0RvbVRyZWUsXG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGdpdmVuIExhVGVYIGludG8gYW4gSFRNTCBpbnRlcm5hbCBET00gdHJlZSByZXByZXNlbnRhdGlvbixcbiAgICogd2l0aG91dCBNYXRoTUwgYW5kIHdpdGhvdXQgZmxhdHRlbmluZyB0aGF0IHJlcHJlc2VudGF0aW9uIHRvIGEgc3RyaW5nLlxuICAgKlxuICAgKiBOT1RFOiBUaGlzIG1ldGhvZCBpcyBub3QgY3VycmVudGx5IHJlY29tbWVuZGVkIGZvciBwdWJsaWMgdXNlLlxuICAgKiBUaGUgaW50ZXJuYWwgdHJlZSByZXByZXNlbnRhdGlvbiBpcyB1bnN0YWJsZSBhbmQgaXMgdmVyeSBsaWtlbHlcbiAgICogdG8gY2hhbmdlLiBVc2UgYXQgeW91ciBvd24gcmlzay5cbiAgICovXG4gIF9fcmVuZGVyVG9IVE1MVHJlZToga2F0ZXhfcmVuZGVyVG9IVE1MVHJlZSxcblxuICAvKipcbiAgICogZXh0ZW5kcyBpbnRlcm5hbCBmb250IG1ldHJpY3Mgb2JqZWN0IHdpdGggYSBuZXcgb2JqZWN0XG4gICAqIGVhY2gga2V5IGluIHRoZSBuZXcgb2JqZWN0IHJlcHJlc2VudHMgYSBmb250IG5hbWVcbiAgKi9cbiAgX19zZXRGb250TWV0cmljczogc2V0Rm9udE1ldHJpY3MsXG5cbiAgLyoqXG4gICAqIGFkZHMgYSBuZXcgc3ltYm9sIHRvIGJ1aWx0aW4gc3ltYm9scyB0YWJsZVxuICAgKi9cbiAgX19kZWZpbmVTeW1ib2w6IGRlZmluZVN5bWJvbCxcblxuICAvKipcbiAgICogYWRkcyBhIG5ldyBtYWNybyB0byBidWlsdGluIG1hY3JvIGxpc3RcbiAgICovXG4gIF9fZGVmaW5lTWFjcm86IGRlZmluZU1hY3JvLFxuXG4gIC8qKlxuICAgKiBFeHBvc2UgdGhlIGRvbSB0cmVlIG5vZGUgdHlwZXMsIHdoaWNoIGNhbiBiZSB1c2VmdWwgZm9yIHR5cGUgY2hlY2tpbmcgbm9kZXMuXG4gICAqXG4gICAqIE5PVEU6IFRoaXMgbWV0aG9kIGlzIG5vdCBjdXJyZW50bHkgcmVjb21tZW5kZWQgZm9yIHB1YmxpYyB1c2UuXG4gICAqIFRoZSBpbnRlcm5hbCB0cmVlIHJlcHJlc2VudGF0aW9uIGlzIHVuc3RhYmxlIGFuZCBpcyB2ZXJ5IGxpa2VseVxuICAgKiB0byBjaGFuZ2UuIFVzZSBhdCB5b3VyIG93biByaXNrLlxuICAgKi9cbiAgX19kb21UcmVlOiB7XG4gICAgU3BhbjogZG9tVHJlZV9TcGFuLFxuICAgIEFuY2hvcjogZG9tVHJlZV9BbmNob3IsXG4gICAgU3ltYm9sTm9kZTogZG9tVHJlZV9TeW1ib2xOb2RlLFxuICAgIFN2Z05vZGU6IFN2Z05vZGUsXG4gICAgUGF0aE5vZGU6IGRvbVRyZWVfUGF0aE5vZGUsXG4gICAgTGluZU5vZGU6IExpbmVOb2RlXG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9rYXRleC53ZWJwYWNrLmpzXG4vKipcbiAqIFRoaXMgaXMgdGhlIHdlYnBhY2sgZW50cnkgcG9pbnQgZm9yIEthVGVYLiBBcyBFQ01BU2NyaXB0LCBmbG93WzFdIGFuZCBqZXN0WzJdXG4gKiBkb2Vzbid0IHN1cHBvcnQgQ1NTIG1vZHVsZXMgbmF0aXZlbHksIGEgc2VwYXJhdGUgZW50cnkgcG9pbnQgaXMgdXNlZCBhbmRcbiAqIGl0IGlzIG5vdCBmbG93dHlwZWQuXG4gKlxuICogWzFdIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2xhbWJkYWhhbmRzL2QxOWUwZGE5NjI4NWI3NDlmMGVmXG4gKiBbMl0gaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vamVzdC9kb2NzL2VuL3dlYnBhY2suaHRtbFxuICovXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIga2F0ZXhfd2VicGFjayA9IF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGthdGV4XzApO1xuXG4vKioqLyB9KVxuLyoqKioqKi8gXSlbXCJkZWZhdWx0XCJdO1xufSk7IiwidmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG4vLyBvdXIgY29uc3RydWN0b3JcbmZ1bmN0aW9uIEtleVRyZWVTdG9yZShvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuICAgIHZhciBERUZBVUxUX1NFUEFSQVRPUiA9ICcuJztcblxuICAgIHRoaXMuc3RvcmFnZSA9IHt9O1xuICAgIHRoaXMuc2VwYXJhdG9yID0gb3B0aW9ucy5zZXBhcmF0b3IgfHwgREVGQVVMVF9TRVBBUkFUT1I7XG59XG5cbi8vIGFkZCBhbiBvYmplY3QgdG8gdGhlIHN0b3JlXG5LZXlUcmVlU3RvcmUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChrZXlwYXRoLCBvYmopIHtcbiAgICB2YXIgYXJyID0gdGhpcy5zdG9yYWdlW2tleXBhdGhdIHx8ICh0aGlzLnN0b3JhZ2Vba2V5cGF0aF0gPSBbXSk7XG4gICAgYXJyLnB1c2gob2JqKTtcbn07XG5cbi8vIHJlbW92ZSBhbiBvYmplY3RcbktleVRyZWVTdG9yZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKG9iaikge1xuICAgIHZhciBwYXRoLCBhcnI7XG4gICAgZm9yIChwYXRoIGluIHRoaXMuc3RvcmFnZSkge1xuICAgICAgICBhcnIgPSB0aGlzLnN0b3JhZ2VbcGF0aF07XG4gICAgICAgIGFyci5zb21lKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICAgICAgaWYgKGl0ZW0gPT09IG9iaikge1xuICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG4vLyBnZXQgYXJyYXkgb2YgYWxsIGFsbCByZWxldmFudCBmdW5jdGlvbnMsIHdpdGhvdXQga2V5c1xuS2V5VHJlZVN0b3JlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5cGF0aCkge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIga2V5O1xuXG4gICAgZm9yIChrZXkgaW4gdGhpcy5zdG9yYWdlKSB7XG4gICAgICAgIGlmICgha2V5cGF0aCB8fCBrZXlwYXRoID09PSBrZXkgfHwga2V5LmluZGV4T2Yoa2V5cGF0aCArIHRoaXMuc2VwYXJhdG9yKSA9PT0gMCkge1xuICAgICAgICAgICAgcmVzID0gcmVzLmNvbmNhdCh0aGlzLnN0b3JhZ2Vba2V5XSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xufTtcblxuLy8gZ2V0IGFsbCByZXN1bHRzIHRoYXQgbWF0Y2gga2V5cGF0aCBidXQgc3RpbGwgZ3JvdXBlZCBieSBrZXlcbktleVRyZWVTdG9yZS5wcm90b3R5cGUuZ2V0R3JvdXBlZCA9IGZ1bmN0aW9uIChrZXlwYXRoKSB7XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIHZhciBrZXk7XG5cbiAgICBmb3IgKGtleSBpbiB0aGlzLnN0b3JhZ2UpIHtcbiAgICAgICAgaWYgKCFrZXlwYXRoIHx8IGtleXBhdGggPT09IGtleSB8fCBrZXkuaW5kZXhPZihrZXlwYXRoICsgdGhpcy5zZXBhcmF0b3IpID09PSAwKSB7XG4gICAgICAgICAgICByZXNba2V5XSA9IHNsaWNlLmNhbGwodGhpcy5zdG9yYWdlW2tleV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbn07XG5cbi8vIGdldCBhbGwgcmVzdWx0cyB0aGF0IG1hdGNoIGtleXBhdGggYnV0IHN0aWxsIGdyb3VwZWQgYnkga2V5XG5LZXlUcmVlU3RvcmUucHJvdG90eXBlLmdldEFsbCA9IGZ1bmN0aW9uIChrZXlwYXRoKSB7XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIHZhciBrZXk7XG5cbiAgICBmb3IgKGtleSBpbiB0aGlzLnN0b3JhZ2UpIHtcbiAgICAgICAgaWYgKGtleXBhdGggPT09IGtleSB8fCBrZXkuaW5kZXhPZihrZXlwYXRoICsgdGhpcy5zZXBhcmF0b3IpID09PSAwKSB7XG4gICAgICAgICAgICByZXNba2V5XSA9IHNsaWNlLmNhbGwodGhpcy5zdG9yYWdlW2tleV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbn07XG5cbi8vIHJ1biBhbGwgbWF0Y2hlcyB3aXRoIG9wdGlvbmFsIGNvbnRleHRcbktleVRyZWVTdG9yZS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKGtleXBhdGgsIGNvbnRleHQpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICB0aGlzLmdldChrZXlwYXRoKS5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgICBmbi5hcHBseShjb250ZXh0IHx8IHRoaXMsIGFyZ3MpO1xuICAgIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBLZXlUcmVlU3RvcmU7XG4iLCJmdW5jdGlvbiBpc0hUTUxFbGVtZW50IChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJlxuICAgICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JykgJiZcbiAgICAob2JqLm5vZGVUeXBlID09PSAxKSAmJlxuICAgICh0eXBlb2Ygb2JqLnN0eWxlID09PSAnb2JqZWN0JykgJiZcbiAgICAodHlwZW9mIG9iai5vd25lckRvY3VtZW50ID09PSAnb2JqZWN0Jylcbn1cblxuZnVuY3Rpb24gaXNBIChvYmopIHtcbiAgcmV0dXJuIGlzSFRNTEVsZW1lbnQob2JqKSAmJiBvYmoudGFnTmFtZSA9PT0gJ0EnXG59XG5cbmZ1bmN0aW9uIGNsb3Nlc3RBIChjaGVja05vZGUpIHtcbiAgZG8ge1xuICAgIGlmIChpc0EoY2hlY2tOb2RlKSkge1xuICAgICAgcmV0dXJuIGNoZWNrTm9kZVxuICAgIH1cbiAgfSB3aGlsZSAoKGNoZWNrTm9kZSA9IGNoZWNrTm9kZS5wYXJlbnROb2RlKSlcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTGVhZGluZ1NsYXNoIChwYXRobmFtZSkge1xuICBpZiAocGF0aG5hbWUuY2hhckF0KDApICE9PSAnLycpIHtcbiAgICBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lXG4gIH1cbiAgcmV0dXJuIHBhdGhuYW1lXG59XG5cbmZ1bmN0aW9uIGlzUmVsYXRpdmVVcmwgKGhyZWYpIHtcbiAgdmFyIHIgPSAvXmh0dHBzPzpcXC9cXC98XlxcL1xcLy9pXG4gIHJldHVybiAhci50ZXN0KGhyZWYpXG59XG5cbmZ1bmN0aW9uIGlzU2Vjb25kYXJ5QnV0dG9uIChldmVudCkge1xuICByZXR1cm4gKHR5cGVvZiBldmVudCA9PT0gJ29iamVjdCcpICYmICgnYnV0dG9uJyBpbiBldmVudCkgJiYgZXZlbnQuYnV0dG9uICE9PSAwXG59XG5cbi8vIFsxXSBodHRwOi8vYmxvZ3MubXNkbi5jb20vYi9pZWludGVybmFscy9hcmNoaXZlLzIwMTEvMDIvMjgvaW50ZXJuZXQtZXhwbG9yZXItd2luZG93LWxvY2F0aW9uLXBhdGhuYW1lLW1pc3Npbmctc2xhc2gtYW5kLWhvc3QtaGFzLXBvcnQuYXNweFxuLy8gWzJdIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9jYXRjaC1saW5rcy9ibG9iLzdhZWUyMTljZGMyYzg0NWM3OGNhYWQ2MDcwODg2YTkzODBiOTBlNGMvaW5kZXguanMjTDEzLUwxN1xuLy8gWzNdIElFMTAgKGFuZCBwb3NzaWJseSBsYXRlcikgcmVwb3J0IHRoYXQgYW5jaG9yLnBvcnQgaXMgdGhlIGRlZmF1bHQgcG9ydFxuLy8gICAgIGJ1dCBkb250IGFwcGVuZCBpdCB0byB0aGUgaG9zdG5hbWUsIHNvIGlmIHRoZSBob3N0IGRvZXNudCBlbmQgd2l0aCB0aGUgcG9ydFxuLy8gICAgIGFwcGVuZCBpdCB0byB0aGUgYW5jaG9yIGhvc3QgYXMgd2VsbFxuXG5mdW5jdGlvbiBpc0xvY2FsIChldmVudCwgYW5jaG9yLCBsb29rRm9ySGFzaCkge1xuICBldmVudCB8fCAoZXZlbnQgPSB7fSlcblxuICAvLyBTa2lwIG1vZGlmaWVyIGV2ZW50c1xuICBpZiAoZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtleSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyBTa2lwIG5vbi1wcmltYXJ5IGNsaWNrc1xuICBpZiAoaXNTZWNvbmRhcnlCdXR0b24oZXZlbnQpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIElmIHdlIGhhdmUgYW4gYW5jaG9yIGJ1dCBpdHMgbm90IGFuIEEgdGFnXG4gIC8vIHRyeSB0byBmaW5kIHRoZSBjbG9zZXN0IG9uZVxuICBpZiAoYW5jaG9yICYmICFpc0EoYW5jaG9yKSkge1xuICAgIGFuY2hvciA9IGNsb3Nlc3RBKGFuY2hvcilcbiAgfVxuXG4gIC8vIE9ubHkgdGVzdCBhbmNob3IgZWxlbWVudHNcbiAgaWYgKCFhbmNob3IgfHwgIWlzQShhbmNob3IpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIERvbnQgdGVzdCBhbmNob3JzIHdpdGggdGFyZ2V0PV9ibGFua1xuICBpZiAoYW5jaG9yLnRhcmdldCA9PT0gJ19ibGFuaycpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gSUU5IGRvZXNuJ3QgcHV0IGEgbGVhZGluZyBzbGFzaCBvbiBhbmNob3IucGF0aG5hbWUgWzFdXG4gIHZhciBhUGF0aG5hbWUgPSBub3JtYWxpemVMZWFkaW5nU2xhc2goYW5jaG9yLnBhdGhuYW1lKVxuICB2YXIgd1BhdGhuYW1lID0gbm9ybWFsaXplTGVhZGluZ1NsYXNoKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSlcbiAgdmFyIGFIb3N0ID0gYW5jaG9yLmhvc3RcbiAgdmFyIGFQb3J0ID0gYW5jaG9yLnBvcnRcbiAgdmFyIHdIb3N0ID0gd2luZG93LmxvY2F0aW9uLmhvc3RcbiAgdmFyIHdQb3J0ID0gd2luZG93LmxvY2F0aW9uLnBvcnRcblxuICAvLyBJbiBzb21lIGNhc2VzLCBJRSB3aWxsIGhhdmUgYSBibGFuayBob3N0IHByb3BlcnR5IHdoZW4gdGhlIGhyZWZcbiAgLy8gaXMgYSByZWxhdGl2ZSBVUkwuIFdlIGNhbiBjaGVjayBmb3IgcmVsYXRpdmVuZXNzIHZpYSB0aGUgYWNob3Inc1xuICAvLyBocmVmIGF0dHJpYnV0ZSBhbmQgdGhlbiBzZXQgdGhlIGFuY2hvcidzIGhvc3QgdG8gdGhlIHdpbmRvdydzIGhvc3QuXG4gIGlmIChhSG9zdCA9PT0gJycgJiZcbiAgICAnYXR0cmlidXRlcycgaW4gYW5jaG9yICYmXG4gICAgJ2hyZWYnIGluIGFuY2hvci5hdHRyaWJ1dGVzICYmXG4gICAgJ3ZhbHVlJyBpbiBhbmNob3IuYXR0cmlidXRlcy5ocmVmICYmXG4gICAgaXNSZWxhdGl2ZVVybChhbmNob3IuYXR0cmlidXRlcy5ocmVmLnZhbHVlKSkge1xuICAgIGFIb3N0ID0gd0hvc3RcbiAgfVxuXG4gIC8vIFNvbWUgYnJvd3NlcnMgKENocm9tZSAzNikgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBmb3IgYW5jaG9yLmhhc2hcbiAgLy8gZXZlbiB3aGVuIGhyZWY9XCIjXCIsIHNvIHdlIGFsc28gY2hlY2sgdGhlIGhyZWZcbiAgdmFyIGFIYXNoID0gYW5jaG9yLmhhc2ggfHwgKGFuY2hvci5ocmVmLmluZGV4T2YoJyMnKSA+IC0xID8gJyMnICsgYW5jaG9yLmhyZWYuc3BsaXQoJyMnKVsxXSA6IG51bGwpXG4gIHZhciBpblBhZ2VIYXNoXG5cbiAgLy8gV2luZG93IGhhcyBubyBwb3J0LCBidXQgYW5jaG9yIGhhcyB0aGUgZGVmYXVsdCBwb3J0XG4gIGlmICghd1BvcnQgJiYgYVBvcnQgJiYgKGFQb3J0ID09PSAnODAnIHx8IGFQb3J0ID09PSAnNDQzJykpIHtcbiAgICAvLyBJRTkgc29tZXRpbWVzIGluY2x1ZGVzIHRoZSBkZWZhdWx0IHBvcnQgKDgwIG9yIDQ0Mykgb24gYW5jaG9yLmhvc3RcbiAgICAvLyBzbyB3ZSBhcHBlbmQgdGhlIGRlZmF1bHQgcG9ydCB0byB0aGUgd2luZG93IGhvc3QgaW4gdGhpcyBjYXNlXG4gICAgLy8gc28gdGhleSB3aWxsIG1hdGNoIGZvciB0aGUgaG9zdCBlcXVhbGl0eSBjaGVjayBbMV1cbiAgICB3SG9zdCArPSAnOicgKyBhUG9ydFxuICAgIGFIb3N0ICs9IGFIb3N0LmluZGV4T2YoYVBvcnQsIGFIb3N0Lmxlbmd0aCAtIGFQb3J0Lmxlbmd0aCkgPT09IC0xID8gJzonICsgYVBvcnQgOiAnJyAvLyBbM11cbiAgfVxuXG4gIC8vIEhvc3RzIGFyZSB0aGUgc2FtZSwgaXRzIGEgbG9jYWwgbGlua1xuICBpZiAoYUhvc3QgPT09IHdIb3N0KSB7XG4gICAgLy8gSWYgZXZlcnl0aGluZyBlbHNlIGlzIHRoZSBzYW1lXG4gICAgLy8gYW5kIGhhc2ggZXhpc3RzLCB0aGVuIGl0IGlzIGFuIGluLXBhZ2UgaGFzaCBbMl1cbiAgICBpblBhZ2VIYXNoID1cbiAgICAgIGFQYXRobmFtZSA9PT0gd1BhdGhuYW1lICYmXG4gICAgICBhbmNob3Iuc2VhcmNoID09PSB3aW5kb3cubG9jYXRpb24uc2VhcmNoICYmXG4gICAgICBhSGFzaFxuXG4gICAgaWYgKGxvb2tGb3JIYXNoID09PSB0cnVlKSB7XG4gICAgICAvLyBJZiB3ZSBhcmUgbG9va2luZyBmb3IgdGhlIGhhc2ggdGhlbiB0aGlzIHdpbGxcbiAgICAgIC8vIG9ubHkgcmV0dXJuIGEgdHJ1dGh5IHZhbHVlIGlmIHRoZSBsaW5rXG4gICAgICAvLyBpcyBhbiAqaW4tcGFnZSogaGFzaCBsaW5rXG4gICAgICByZXR1cm4gaW5QYWdlSGFzaFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiB0aGlzIGlzIGFuIGluIHBhZ2UgaGFzaCBsaW5rXG4gICAgICAvLyB0aGVuIGlnbm9yZSBpdCBiZWNhdXNlIHdlIHdlcmVudCBsb29raW5nIGZvciBoYXNoIGxpbmtzXG4gICAgICByZXR1cm4gaW5QYWdlSGFzaFxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiBhUGF0aG5hbWUgKyAoYW5jaG9yLnNlYXJjaCB8fCAnJykgKyAoYUhhc2ggfHwgJycpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuLy8gVGFrZSB0d28gYXJndW1lbnRzIGFuZCByZXR1cm4gYW4gb3JkZXJlZCBhcnJheSBvZiBbZXZlbnQsIGFuY2hvcl1cbmZ1bmN0aW9uIGdldEV2ZW50QW5kQW5jaG9yIChhcmcxLCBhcmcyKSB7XG4gIHZhciBldiA9IG51bGxcbiAgdmFyIGFuY2hvciA9IG51bGxcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIC8vIFR3byBhcmd1bWVudHMgd2lsbCBjb21lIGluIHRoaXMgb3JkZXJcbiAgICBldiA9IGFyZzFcbiAgICBhbmNob3IgPSBhcmcyXG4gIH0gZWxzZSBpZiAoaXNIVE1MRWxlbWVudChhcmcxKSkge1xuICAgIC8vIElmIG91ciBmaXJzdCBhcmcgaXMgYW4gZWxlbWVudFxuICAgIC8vIHRoZW4gdXNlIHRoYXQgYXMgb3VyIGFuY2hvclxuICAgIGFuY2hvciA9IGFyZzFcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2Ugb3VyIGFyZ3VtZW50IGlzIGFuIGV2ZW50XG4gICAgZXYgPSBhcmcxXG4gIH1cblxuICAgIC8vIElmIHRoZXJlIGlzIG5vIGFuY2hvciwgYnV0IHdlIGhhdmUgYW4gZXZlbnRcbiAgICAvLyB0aGVuIHVzZSBldmVudC50YXJnZXRcbiAgaWYgKCFhbmNob3IgJiYgZXYgJiYgZXYudGFyZ2V0KSB7XG4gICAgYW5jaG9yID0gZXYudGFyZ2V0XG4gIH1cblxuICAgIC8vIFJldHVybiBhbiBhcnJheSBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIHdpdGggRnVuY3Rpb24uYXBwbHlcbiAgcmV0dXJuIFtldiwgYW5jaG9yXVxufVxuXG4vLyBGdW5jdGlvbnMgdG8gYmUgdXNlZCBpbiBleHBvcnRzLiBEZWZpbmVkIGhlcmUgZm9yIGFsaWFzIHB1cnBvc2VzXG5mdW5jdGlvbiBwYXRobmFtZSAoKSB7XG4gIHJldHVybiBpc0xvY2FsLmFwcGx5KG51bGwsIGdldEV2ZW50QW5kQW5jaG9yLmFwcGx5KG51bGwsIGFyZ3VtZW50cykpXG59XG5cbmZ1bmN0aW9uIGhhc2ggKCkge1xuICByZXR1cm4gaXNMb2NhbC5hcHBseShudWxsLCBnZXRFdmVudEFuZEFuY2hvci5hcHBseShudWxsLCBhcmd1bWVudHMpLmNvbmNhdCh0cnVlKSlcbn1cblxuZnVuY3Rpb24gYWN0aXZlICgpIHtcbiAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpXG4gIHZhciBsYXN0ID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdXG4gIHZhciBjaGVja1BhdGggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWVcblxuICBpZiAodHlwZW9mIGxhc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgY2hlY2tQYXRoID0gbGFzdFxuICAgIGFyZ3MgPSBhcmdzLnNsaWNlKDAsIC0xKVxuICB9XG5cbiAgcmV0dXJuIHBhdGhuYW1lLmFwcGx5KG51bGwsIGFyZ3MpID09PSBub3JtYWxpemVMZWFkaW5nU2xhc2goY2hlY2tQYXRoKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNMb2NhbDogaXNMb2NhbCxcbiAgcGF0aG5hbWU6IHBhdGhuYW1lLFxuICBnZXRMb2NhbFBhdGhuYW1lOiBwYXRobmFtZSxcbiAgaGFzaDogaGFzaCxcbiAgZ2V0TG9jYWxIYXNoOiBoYXNoLFxuICBhY3RpdmU6IGFjdGl2ZSxcbiAgaXNBY3RpdmU6IGFjdGl2ZVxufVxuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBEYXRhVmlldyA9IGdldE5hdGl2ZShyb290LCAnRGF0YVZpZXcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBEYXRhVmlldztcbiIsInZhciBoYXNoQ2xlYXIgPSByZXF1aXJlKCcuL19oYXNoQ2xlYXInKSxcbiAgICBoYXNoRGVsZXRlID0gcmVxdWlyZSgnLi9faGFzaERlbGV0ZScpLFxuICAgIGhhc2hHZXQgPSByZXF1aXJlKCcuL19oYXNoR2V0JyksXG4gICAgaGFzaEhhcyA9IHJlcXVpcmUoJy4vX2hhc2hIYXMnKSxcbiAgICBoYXNoU2V0ID0gcmVxdWlyZSgnLi9faGFzaFNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoO1xuIiwidmFyIGJhc2VDcmVhdGUgPSByZXF1aXJlKCcuL19iYXNlQ3JlYXRlJyksXG4gICAgYmFzZUxvZGFzaCA9IHJlcXVpcmUoJy4vX2Jhc2VMb2Rhc2gnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdGhlIG1heGltdW0gbGVuZ3RoIGFuZCBpbmRleCBvZiBhbiBhcnJheS4gKi9cbnZhciBNQVhfQVJSQVlfTEVOR1RIID0gNDI5NDk2NzI5NTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbGF6eSB3cmFwcGVyIG9iamVjdCB3aGljaCB3cmFwcyBgdmFsdWVgIHRvIGVuYWJsZSBsYXp5IGV2YWx1YXRpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcC5cbiAqL1xuZnVuY3Rpb24gTGF6eVdyYXBwZXIodmFsdWUpIHtcbiAgdGhpcy5fX3dyYXBwZWRfXyA9IHZhbHVlO1xuICB0aGlzLl9fYWN0aW9uc19fID0gW107XG4gIHRoaXMuX19kaXJfXyA9IDE7XG4gIHRoaXMuX19maWx0ZXJlZF9fID0gZmFsc2U7XG4gIHRoaXMuX19pdGVyYXRlZXNfXyA9IFtdO1xuICB0aGlzLl9fdGFrZUNvdW50X18gPSBNQVhfQVJSQVlfTEVOR1RIO1xuICB0aGlzLl9fdmlld3NfXyA9IFtdO1xufVxuXG4vLyBFbnN1cmUgYExhenlXcmFwcGVyYCBpcyBhbiBpbnN0YW5jZSBvZiBgYmFzZUxvZGFzaGAuXG5MYXp5V3JhcHBlci5wcm90b3R5cGUgPSBiYXNlQ3JlYXRlKGJhc2VMb2Rhc2gucHJvdG90eXBlKTtcbkxhenlXcmFwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExhenlXcmFwcGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExhenlXcmFwcGVyO1xuIiwidmFyIGxpc3RDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlQ2xlYXInKSxcbiAgICBsaXN0Q2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVEZWxldGUnKSxcbiAgICBsaXN0Q2FjaGVHZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVHZXQnKSxcbiAgICBsaXN0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVIYXMnKSxcbiAgICBsaXN0Q2FjaGVTZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExpc3RDYWNoZTtcbiIsInZhciBiYXNlQ3JlYXRlID0gcmVxdWlyZSgnLi9fYmFzZUNyZWF0ZScpLFxuICAgIGJhc2VMb2Rhc2ggPSByZXF1aXJlKCcuL19iYXNlTG9kYXNoJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgY29uc3RydWN0b3IgZm9yIGNyZWF0aW5nIGBsb2Rhc2hgIHdyYXBwZXIgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoYWluQWxsXSBFbmFibGUgZXhwbGljaXQgbWV0aG9kIGNoYWluIHNlcXVlbmNlcy5cbiAqL1xuZnVuY3Rpb24gTG9kYXNoV3JhcHBlcih2YWx1ZSwgY2hhaW5BbGwpIHtcbiAgdGhpcy5fX3dyYXBwZWRfXyA9IHZhbHVlO1xuICB0aGlzLl9fYWN0aW9uc19fID0gW107XG4gIHRoaXMuX19jaGFpbl9fID0gISFjaGFpbkFsbDtcbiAgdGhpcy5fX2luZGV4X18gPSAwO1xuICB0aGlzLl9fdmFsdWVzX18gPSB1bmRlZmluZWQ7XG59XG5cbkxvZGFzaFdyYXBwZXIucHJvdG90eXBlID0gYmFzZUNyZWF0ZShiYXNlTG9kYXNoLnByb3RvdHlwZSk7XG5Mb2Rhc2hXcmFwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvZGFzaFdyYXBwZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gTG9kYXNoV3JhcHBlcjtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdNYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXA7XG4iLCJ2YXIgbWFwQ2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX21hcENhY2hlQ2xlYXInKSxcbiAgICBtYXBDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX21hcENhY2hlRGVsZXRlJyksXG4gICAgbWFwQ2FjaGVHZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZUdldCcpLFxuICAgIG1hcENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVIYXMnKSxcbiAgICBtYXBDYWNoZVNldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcENhY2hlO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBQcm9taXNlID0gZ2V0TmF0aXZlKHJvb3QsICdQcm9taXNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgU2V0ID0gZ2V0TmF0aXZlKHJvb3QsICdTZXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZXQ7XG4iLCJ2YXIgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpLFxuICAgIHNldENhY2hlQWRkID0gcmVxdWlyZSgnLi9fc2V0Q2FjaGVBZGQnKSxcbiAgICBzZXRDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX3NldENhY2hlSGFzJyk7XG5cbi8qKlxuICpcbiAqIENyZWF0ZXMgYW4gYXJyYXkgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIHVuaXF1ZSB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU2V0Q2FjaGUodmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzID09IG51bGwgPyAwIDogdmFsdWVzLmxlbmd0aDtcblxuICB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHRoaXMuYWRkKHZhbHVlc1tpbmRleF0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTZXRDYWNoZWAuXG5TZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBzZXRDYWNoZUFkZDtcblNldENhY2hlLnByb3RvdHlwZS5oYXMgPSBzZXRDYWNoZUhhcztcblxubW9kdWxlLmV4cG9ydHMgPSBTZXRDYWNoZTtcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBzdGFja0NsZWFyID0gcmVxdWlyZSgnLi9fc3RhY2tDbGVhcicpLFxuICAgIHN0YWNrRGVsZXRlID0gcmVxdWlyZSgnLi9fc3RhY2tEZWxldGUnKSxcbiAgICBzdGFja0dldCA9IHJlcXVpcmUoJy4vX3N0YWNrR2V0JyksXG4gICAgc3RhY2tIYXMgPSByZXF1aXJlKCcuL19zdGFja0hhcycpLFxuICAgIHN0YWNrU2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTdGFja2AuXG5TdGFjay5wcm90b3R5cGUuY2xlYXIgPSBzdGFja0NsZWFyO1xuU3RhY2sucHJvdG90eXBlWydkZWxldGUnXSA9IHN0YWNrRGVsZXRlO1xuU3RhY2sucHJvdG90eXBlLmdldCA9IHN0YWNrR2V0O1xuU3RhY2sucHJvdG90eXBlLmhhcyA9IHN0YWNrSGFzO1xuU3RhY2sucHJvdG90eXBlLnNldCA9IHN0YWNrU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YWNrO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbDtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBVaW50OEFycmF5ID0gcm9vdC5VaW50OEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVpbnQ4QXJyYXk7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFdlYWtNYXAgPSBnZXROYXRpdmUocm9vdCwgJ1dlYWtNYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBXZWFrTWFwO1xuIiwiLyoqXG4gKiBBIGZhc3RlciBhbHRlcm5hdGl2ZSB0byBgRnVuY3Rpb24jYXBwbHlgLCB0aGlzIGZ1bmN0aW9uIGludm9rZXMgYGZ1bmNgXG4gKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cbiAqL1xuZnVuY3Rpb24gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncykge1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFwcGx5O1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZm9yRWFjaGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RWFjaChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkgPT09IGZhbHNlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5RWFjaDtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZpbHRlcmAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheUZpbHRlcihhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXNJbmRleCA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUZpbHRlcjtcbiIsInZhciBiYXNlSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Jhc2VJbmRleE9mJyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluY2x1ZGVzYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIHNwZWNpZnlpbmcgYW4gaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHRhcmdldCBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdGFyZ2V0YCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheUluY2x1ZGVzKGFycmF5LCB2YWx1ZSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiAhIWxlbmd0aCAmJiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIDApID4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlJbmNsdWRlcztcbiIsIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBhcnJheUluY2x1ZGVzYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGEgY29tcGFyYXRvci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyYXRvciBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXNXaXRoKGFycmF5LCB2YWx1ZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIGFycmF5W2luZGV4XSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4iLCJ2YXIgYmFzZVRpbWVzID0gcmVxdWlyZSgnLi9fYmFzZVRpbWVzJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TGlrZUtleXM7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TWFwO1xuIiwiLyoqXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXBwZW5kLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHZhbHVlc1tpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5UHVzaDtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheVNvbWUoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlTb21lO1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBhbiBBU0NJSSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXNjaWlUb0FycmF5KHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnNwbGl0KCcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc2NpaVRvQXJyYXk7XG4iLCJ2YXIgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV07XG4gIGlmICghKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGVxKG9ialZhbHVlLCB2YWx1ZSkpIHx8XG4gICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzaWduVmFsdWU7XG4iLCJ2YXIgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGlmIChlcShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XG4gICAgICByZXR1cm4gbGVuZ3RoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzb2NJbmRleE9mO1xuIiwidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbmAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzXG4gKiBvciBgY3VzdG9taXplcmAgZnVuY3Rpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnbihvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnbjtcbiIsInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ25JbihvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQXNzaWduSW47XG4iLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ25WYWx1ZTtcbiIsInZhciBTdGFjayA9IHJlcXVpcmUoJy4vX1N0YWNrJyksXG4gICAgYXJyYXlFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXlFYWNoJyksXG4gICAgYXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25WYWx1ZScpLFxuICAgIGJhc2VBc3NpZ24gPSByZXF1aXJlKCcuL19iYXNlQXNzaWduJyksXG4gICAgYmFzZUFzc2lnbkluID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnbkluJyksXG4gICAgY2xvbmVCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUJ1ZmZlcicpLFxuICAgIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpLFxuICAgIGNvcHlTeW1ib2xzID0gcmVxdWlyZSgnLi9fY29weVN5bWJvbHMnKSxcbiAgICBjb3B5U3ltYm9sc0luID0gcmVxdWlyZSgnLi9fY29weVN5bWJvbHNJbicpLFxuICAgIGdldEFsbEtleXMgPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzJyksXG4gICAgZ2V0QWxsS2V5c0luID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5c0luJyksXG4gICAgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaW5pdENsb25lQXJyYXkgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVBcnJheScpLFxuICAgIGluaXRDbG9uZUJ5VGFnID0gcmVxdWlyZSgnLi9faW5pdENsb25lQnlUYWcnKSxcbiAgICBpbml0Q2xvbmVPYmplY3QgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVPYmplY3QnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNNYXAgPSByZXF1aXJlKCcuL2lzTWFwJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNTZXQgPSByZXF1aXJlKCcuL2lzU2V0JyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX0RFRVBfRkxBRyA9IDEsXG4gICAgQ0xPTkVfRkxBVF9GTEFHID0gMixcbiAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIHN1cHBvcnRlZCBieSBgXy5jbG9uZWAuICovXG52YXIgY2xvbmVhYmxlVGFncyA9IHt9O1xuY2xvbmVhYmxlVGFnc1thcmdzVGFnXSA9IGNsb25lYWJsZVRhZ3NbYXJyYXlUYWddID1cbmNsb25lYWJsZVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gY2xvbmVhYmxlVGFnc1tkYXRhVmlld1RhZ10gPVxuY2xvbmVhYmxlVGFnc1tib29sVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0ZVRhZ10gPVxuY2xvbmVhYmxlVGFnc1tmbG9hdDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZmxvYXQ2NFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbaW50MTZUYWddID1cbmNsb25lYWJsZVRhZ3NbaW50MzJUYWddID0gY2xvbmVhYmxlVGFnc1ttYXBUYWddID1cbmNsb25lYWJsZVRhZ3NbbnVtYmVyVGFnXSA9IGNsb25lYWJsZVRhZ3Nbb2JqZWN0VGFnXSA9XG5jbG9uZWFibGVUYWdzW3JlZ2V4cFRhZ10gPSBjbG9uZWFibGVUYWdzW3NldFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tzdHJpbmdUYWddID0gY2xvbmVhYmxlVGFnc1tzeW1ib2xUYWddID1cbmNsb25lYWJsZVRhZ3NbdWludDhUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50OENsYW1wZWRUYWddID1cbmNsb25lYWJsZVRhZ3NbdWludDE2VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG5jbG9uZWFibGVUYWdzW2Vycm9yVGFnXSA9IGNsb25lYWJsZVRhZ3NbZnVuY1RhZ10gPVxuY2xvbmVhYmxlVGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNsb25lYCBhbmQgYF8uY2xvbmVEZWVwYCB3aGljaCB0cmFja3NcbiAqIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gRGVlcCBjbG9uZVxuICogIDIgLSBGbGF0dGVuIGluaGVyaXRlZCBwcm9wZXJ0aWVzXG4gKiAgNCAtIENsb25lIHN5bWJvbHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gVGhlIGtleSBvZiBgdmFsdWVgLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBwYXJlbnQgb2JqZWN0IG9mIGB2YWx1ZWAuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIG9iamVjdHMgYW5kIHRoZWlyIGNsb25lIGNvdW50ZXJwYXJ0cy5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBjbG9uZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VDbG9uZSh2YWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCBvYmplY3QsIHN0YWNrKSB7XG4gIHZhciByZXN1bHQsXG4gICAgICBpc0RlZXAgPSBiaXRtYXNrICYgQ0xPTkVfREVFUF9GTEFHLFxuICAgICAgaXNGbGF0ID0gYml0bWFzayAmIENMT05FX0ZMQVRfRkxBRyxcbiAgICAgIGlzRnVsbCA9IGJpdG1hc2sgJiBDTE9ORV9TWU1CT0xTX0ZMQUc7XG5cbiAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICByZXN1bHQgPSBvYmplY3QgPyBjdXN0b21pemVyKHZhbHVlLCBrZXksIG9iamVjdCwgc3RhY2spIDogY3VzdG9taXplcih2YWx1ZSk7XG4gIH1cbiAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKTtcbiAgaWYgKGlzQXJyKSB7XG4gICAgcmVzdWx0ID0gaW5pdENsb25lQXJyYXkodmFsdWUpO1xuICAgIGlmICghaXNEZWVwKSB7XG4gICAgICByZXR1cm4gY29weUFycmF5KHZhbHVlLCByZXN1bHQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKSxcbiAgICAgICAgaXNGdW5jID0gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZztcblxuICAgIGlmIChpc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjbG9uZUJ1ZmZlcih2YWx1ZSwgaXNEZWVwKTtcbiAgICB9XG4gICAgaWYgKHRhZyA9PSBvYmplY3RUYWcgfHwgdGFnID09IGFyZ3NUYWcgfHwgKGlzRnVuYyAmJiAhb2JqZWN0KSkge1xuICAgICAgcmVzdWx0ID0gKGlzRmxhdCB8fCBpc0Z1bmMpID8ge30gOiBpbml0Q2xvbmVPYmplY3QodmFsdWUpO1xuICAgICAgaWYgKCFpc0RlZXApIHtcbiAgICAgICAgcmV0dXJuIGlzRmxhdFxuICAgICAgICAgID8gY29weVN5bWJvbHNJbih2YWx1ZSwgYmFzZUFzc2lnbkluKHJlc3VsdCwgdmFsdWUpKVxuICAgICAgICAgIDogY29weVN5bWJvbHModmFsdWUsIGJhc2VBc3NpZ24ocmVzdWx0LCB2YWx1ZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNsb25lYWJsZVRhZ3NbdGFnXSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0ID8gdmFsdWUgOiB7fTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IGluaXRDbG9uZUJ5VGFnKHZhbHVlLCB0YWcsIGlzRGVlcCk7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIGFuZCByZXR1cm4gaXRzIGNvcnJlc3BvbmRpbmcgY2xvbmUuXG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KHZhbHVlKTtcbiAgaWYgKHN0YWNrZWQpIHtcbiAgICByZXR1cm4gc3RhY2tlZDtcbiAgfVxuICBzdGFjay5zZXQodmFsdWUsIHJlc3VsdCk7XG5cbiAgaWYgKGlzU2V0KHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUpIHtcbiAgICAgIHJlc3VsdC5hZGQoYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdWJWYWx1ZSwgdmFsdWUsIHN0YWNrKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKGlzTWFwKHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkge1xuICAgICAgcmVzdWx0LnNldChrZXksIGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2spKTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICB2YXIga2V5c0Z1bmMgPSBpc0Z1bGxcbiAgICA/IChpc0ZsYXQgPyBnZXRBbGxLZXlzSW4gOiBnZXRBbGxLZXlzKVxuICAgIDogKGlzRmxhdCA/IGtleXNJbiA6IGtleXMpO1xuXG4gIHZhciBwcm9wcyA9IGlzQXJyID8gdW5kZWZpbmVkIDoga2V5c0Z1bmModmFsdWUpO1xuICBhcnJheUVhY2gocHJvcHMgfHwgdmFsdWUsIGZ1bmN0aW9uKHN1YlZhbHVlLCBrZXkpIHtcbiAgICBpZiAocHJvcHMpIHtcbiAgICAgIGtleSA9IHN1YlZhbHVlO1xuICAgICAgc3ViVmFsdWUgPSB2YWx1ZVtrZXldO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBwb3B1bGF0ZSBjbG9uZSAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCBiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgdmFsdWUsIHN0YWNrKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VDbG9uZTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXG4gKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xudmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIG9iamVjdCgpIHt9XG4gIHJldHVybiBmdW5jdGlvbihwcm90bykge1xuICAgIGlmICghaXNPYmplY3QocHJvdG8pKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGlmIChvYmplY3RDcmVhdGUpIHtcbiAgICAgIHJldHVybiBvYmplY3RDcmVhdGUocHJvdG8pO1xuICAgIH1cbiAgICBvYmplY3QucHJvdG90eXBlID0gcHJvdG87XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBvYmplY3Q7XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQ3JlYXRlO1xuIiwidmFyIFNldENhY2hlID0gcmVxdWlyZSgnLi9fU2V0Q2FjaGUnKSxcbiAgICBhcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlcycpLFxuICAgIGFycmF5SW5jbHVkZXNXaXRoID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlc1dpdGgnKSxcbiAgICBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgY2FjaGVIYXMgPSByZXF1aXJlKCcuL19jYWNoZUhhcycpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5kaWZmZXJlbmNlYCB3aXRob3V0IHN1cHBvcnRcbiAqIGZvciBleGNsdWRpbmcgbXVsdGlwbGUgYXJyYXlzIG9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gYmFzZURpZmZlcmVuY2UoYXJyYXksIHZhbHVlcywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXMsXG4gICAgICBpc0NvbW1vbiA9IHRydWUsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBbXSxcbiAgICAgIHZhbHVlc0xlbmd0aCA9IHZhbHVlcy5sZW5ndGg7XG5cbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChpdGVyYXRlZSkge1xuICAgIHZhbHVlcyA9IGFycmF5TWFwKHZhbHVlcywgYmFzZVVuYXJ5KGl0ZXJhdGVlKSk7XG4gIH1cbiAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXNXaXRoO1xuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gIH1cbiAgZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA+PSBMQVJHRV9BUlJBWV9TSVpFKSB7XG4gICAgaW5jbHVkZXMgPSBjYWNoZUhhcztcbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIHZhbHVlcyA9IG5ldyBTZXRDYWNoZSh2YWx1ZXMpO1xuICB9XG4gIG91dGVyOlxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA9PSBudWxsID8gdmFsdWUgOiBpdGVyYXRlZSh2YWx1ZSk7XG5cbiAgICB2YWx1ZSA9IChjb21wYXJhdG9yIHx8IHZhbHVlICE9PSAwKSA/IHZhbHVlIDogMDtcbiAgICBpZiAoaXNDb21tb24gJiYgY29tcHV0ZWQgPT09IGNvbXB1dGVkKSB7XG4gICAgICB2YXIgdmFsdWVzSW5kZXggPSB2YWx1ZXNMZW5ndGg7XG4gICAgICB3aGlsZSAodmFsdWVzSW5kZXgtLSkge1xuICAgICAgICBpZiAodmFsdWVzW3ZhbHVlc0luZGV4XSA9PT0gY29tcHV0ZWQpIHtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmICghaW5jbHVkZXModmFsdWVzLCBjb21wdXRlZCwgY29tcGFyYXRvcikpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRGlmZmVyZW5jZTtcbiIsInZhciBiYXNlRm9yT3duID0gcmVxdWlyZSgnLi9fYmFzZUZvck93bicpLFxuICAgIGNyZWF0ZUJhc2VFYWNoID0gcmVxdWlyZSgnLi9fY3JlYXRlQmFzZUVhY2gnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JFYWNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAqL1xudmFyIGJhc2VFYWNoID0gY3JlYXRlQmFzZUVhY2goYmFzZUZvck93bik7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUVhY2g7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbmRJbmRleGAgYW5kIGBfLmZpbmRMYXN0SW5kZXhgIHdpdGhvdXRcbiAqIHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgsIGZyb21SaWdodCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgaW5kZXggPSBmcm9tSW5kZXggKyAoZnJvbVJpZ2h0ID8gMSA6IC0xKTtcblxuICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRmluZEluZGV4O1xuIiwidmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGlzRmxhdHRlbmFibGUgPSByZXF1aXJlKCcuL19pc0ZsYXR0ZW5hYmxlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmxhdHRlbmAgd2l0aCBzdXBwb3J0IGZvciByZXN0cmljdGluZyBmbGF0dGVuaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBkZXB0aCBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcmVkaWNhdGU9aXNGbGF0dGVuYWJsZV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzU3RyaWN0XSBSZXN0cmljdCB0byB2YWx1ZXMgdGhhdCBwYXNzIGBwcmVkaWNhdGVgIGNoZWNrcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHQ9W11dIFRoZSBpbml0aWFsIHJlc3VsdCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZUZsYXR0ZW4oYXJyYXksIGRlcHRoLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgcHJlZGljYXRlIHx8IChwcmVkaWNhdGUgPSBpc0ZsYXR0ZW5hYmxlKTtcbiAgcmVzdWx0IHx8IChyZXN1bHQgPSBbXSk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKGRlcHRoID4gMCAmJiBwcmVkaWNhdGUodmFsdWUpKSB7XG4gICAgICBpZiAoZGVwdGggPiAxKSB7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGZsYXR0ZW4gYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIGJhc2VGbGF0dGVuKHZhbHVlLCBkZXB0aCAtIDEsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcnJheVB1c2gocmVzdWx0LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaXNTdHJpY3QpIHtcbiAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGbGF0dGVuO1xuIiwidmFyIGNyZWF0ZUJhc2VGb3IgPSByZXF1aXJlKCcuL19jcmVhdGVCYXNlRm9yJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGJhc2VGb3JPd25gIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYG9iamVjdGBcbiAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxuICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG52YXIgYmFzZUZvciA9IGNyZWF0ZUJhc2VGb3IoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRm9yO1xuIiwidmFyIGJhc2VGb3IgPSByZXF1aXJlKCcuL19iYXNlRm9yJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZvck93bmAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGb3JPd24ob2JqZWN0LCBpdGVyYXRlZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3Iob2JqZWN0LCBpdGVyYXRlZSwga2V5cyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZvck93bjtcbiIsInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gMCxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgIG9iamVjdCA9IG9iamVjdFt0b0tleShwYXRoW2luZGV4KytdKV07XG4gIH1cbiAgcmV0dXJuIChpbmRleCAmJiBpbmRleCA9PSBsZW5ndGgpID8gb2JqZWN0IDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXQ7XG4iLCJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRBbGxLZXlzYCBhbmQgYGdldEFsbEtleXNJbmAgd2hpY2ggdXNlc1xuICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XG4gIHZhciByZXN1bHQgPSBrZXlzRnVuYyhvYmplY3QpO1xuICByZXR1cm4gaXNBcnJheShvYmplY3QpID8gcmVzdWx0IDogYXJyYXlQdXNoKHJlc3VsdCwgc3ltYm9sc0Z1bmMob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldEFsbEtleXM7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgZ2V0UmF3VGFnID0gcmVxdWlyZSgnLi9fZ2V0UmF3VGFnJyksXG4gICAgb2JqZWN0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19vYmplY3RUb1N0cmluZycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0VGFnO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5oYXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VIYXMob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VIYXM7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmhhc0luYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGtleSBUaGUga2V5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSGFzSW4ob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGtleSBpbiBPYmplY3Qob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSGFzSW47XG4iLCJ2YXIgYmFzZUZpbmRJbmRleCA9IHJlcXVpcmUoJy4vX2Jhc2VGaW5kSW5kZXgnKSxcbiAgICBiYXNlSXNOYU4gPSByZXF1aXJlKCcuL19iYXNlSXNOYU4nKSxcbiAgICBzdHJpY3RJbmRleE9mID0gcmVxdWlyZSgnLi9fc3RyaWN0SW5kZXhPZicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmluZGV4T2ZgIHdpdGhvdXQgYGZyb21JbmRleGAgYm91bmRzIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlXG4gICAgPyBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KVxuICAgIDogYmFzZUZpbmRJbmRleChhcnJheSwgYmFzZUlzTmFOLCBmcm9tSW5kZXgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJbmRleE9mO1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKSxcbiAgICBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgbGFzdCA9IHJlcXVpcmUoJy4vbGFzdCcpLFxuICAgIHBhcmVudCA9IHJlcXVpcmUoJy4vX3BhcmVudCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pbnZva2VgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaW5kaXZpZHVhbFxuICogbWV0aG9kIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIG1ldGhvZCB0byBpbnZva2UuXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIHRoZSBtZXRob2Qgd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGludm9rZWQgbWV0aG9kLlxuICovXG5mdW5jdGlvbiBiYXNlSW52b2tlKG9iamVjdCwgcGF0aCwgYXJncykge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgb2JqZWN0ID0gcGFyZW50KG9iamVjdCwgcGF0aCk7XG4gIHZhciBmdW5jID0gb2JqZWN0ID09IG51bGwgPyBvYmplY3QgOiBvYmplY3RbdG9LZXkobGFzdChwYXRoKSldO1xuICByZXR1cm4gZnVuYyA9PSBudWxsID8gdW5kZWZpbmVkIDogYXBwbHkoZnVuYywgb2JqZWN0LCBhcmdzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSW52b2tlO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICovXG5mdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYXJnc1RhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNBcmd1bWVudHM7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0RhdGVgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZGF0ZSBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRGF0ZSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBkYXRlVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0RhdGU7XG4iLCJ2YXIgYmFzZUlzRXF1YWxEZWVwID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWxEZWVwJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAqICAyIC0gUGFydGlhbCBjb21wYXJpc29uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzT2JqZWN0TGlrZShvdGhlcikpKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gIH1cbiAgcmV0dXJuIGJhc2VJc0VxdWFsRGVlcCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGJhc2VJc0VxdWFsLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWw7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGVxdWFsQXJyYXlzID0gcmVxdWlyZSgnLi9fZXF1YWxBcnJheXMnKSxcbiAgICBlcXVhbEJ5VGFnID0gcmVxdWlyZSgnLi9fZXF1YWxCeVRhZycpLFxuICAgIGVxdWFsT2JqZWN0cyA9IHJlcXVpcmUoJy4vX2VxdWFsT2JqZWN0cycpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcbiAqIGRlZXAgY29tcGFyaXNvbnMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAqIHJlZmVyZW5jZXMgdG8gYmUgY29tcGFyZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBvYmpJc0FyciA9IGlzQXJyYXkob2JqZWN0KSxcbiAgICAgIG90aElzQXJyID0gaXNBcnJheShvdGhlciksXG4gICAgICBvYmpUYWcgPSBvYmpJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG9iamVjdCksXG4gICAgICBvdGhUYWcgPSBvdGhJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG90aGVyKTtcblxuICBvYmpUYWcgPSBvYmpUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG9ialRhZztcbiAgb3RoVGFnID0gb3RoVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvdGhUYWc7XG5cbiAgdmFyIG9iaklzT2JqID0gb2JqVGFnID09IG9iamVjdFRhZyxcbiAgICAgIG90aElzT2JqID0gb3RoVGFnID09IG9iamVjdFRhZyxcbiAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XG5cbiAgaWYgKGlzU2FtZVRhZyAmJiBpc0J1ZmZlcihvYmplY3QpKSB7XG4gICAgaWYgKCFpc0J1ZmZlcihvdGhlcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgb2JqSXNBcnIgPSB0cnVlO1xuICAgIG9iaklzT2JqID0gZmFsc2U7XG4gIH1cbiAgaWYgKGlzU2FtZVRhZyAmJiAhb2JqSXNPYmopIHtcbiAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgIHJldHVybiAob2JqSXNBcnIgfHwgaXNUeXBlZEFycmF5KG9iamVjdCkpXG4gICAgICA/IGVxdWFsQXJyYXlzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXG4gICAgICA6IGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgb2JqVGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgfVxuICBpZiAoIShiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcpKSB7XG4gICAgdmFyIG9iaklzV3JhcHBlZCA9IG9iaklzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAnX193cmFwcGVkX18nKSxcbiAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XG5cbiAgICBpZiAob2JqSXNXcmFwcGVkIHx8IG90aElzV3JhcHBlZCkge1xuICAgICAgdmFyIG9ialVud3JhcHBlZCA9IG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LFxuICAgICAgICAgIG90aFVud3JhcHBlZCA9IG90aElzV3JhcHBlZCA/IG90aGVyLnZhbHVlKCkgOiBvdGhlcjtcblxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgIHJldHVybiBlcXVhbEZ1bmMob2JqVW53cmFwcGVkLCBvdGhVbndyYXBwZWQsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1NhbWVUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgcmV0dXJuIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNFcXVhbERlZXA7XG4iLCJ2YXIgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWFwYCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNNYXAodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSBtYXBUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTWFwO1xuIiwidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBiYXNlSXNFcXVhbCA9IHJlcXVpcmUoJy4vX2Jhc2VJc0VxdWFsJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hdGNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAqIEBwYXJhbSB7QXJyYXl9IG1hdGNoRGF0YSBUaGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3MgdG8gbWF0Y2guXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBpcyBhIG1hdGNoLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBtYXRjaERhdGEsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGluZGV4ID0gbWF0Y2hEYXRhLmxlbmd0aCxcbiAgICAgIGxlbmd0aCA9IGluZGV4LFxuICAgICAgbm9DdXN0b21pemVyID0gIWN1c3RvbWl6ZXI7XG5cbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuICFsZW5ndGg7XG4gIH1cbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgdmFyIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xuICAgIGlmICgobm9DdXN0b21pemVyICYmIGRhdGFbMl0pXG4gICAgICAgICAgPyBkYXRhWzFdICE9PSBvYmplY3RbZGF0YVswXV1cbiAgICAgICAgICA6ICEoZGF0YVswXSBpbiBvYmplY3QpXG4gICAgICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xuICAgIHZhciBrZXkgPSBkYXRhWzBdLFxuICAgICAgICBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICBzcmNWYWx1ZSA9IGRhdGFbMV07XG5cbiAgICBpZiAobm9DdXN0b21pemVyICYmIGRhdGFbMl0pIHtcbiAgICAgIGlmIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3RhY2sgPSBuZXcgU3RhY2s7XG4gICAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgICB2YXIgcmVzdWx0ID0gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UsIHN0YWNrKTtcbiAgICAgIH1cbiAgICAgIGlmICghKHJlc3VsdCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGJhc2VJc0VxdWFsKHNyY1ZhbHVlLCBvYmpWYWx1ZSwgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgfCBDT01QQVJFX1VOT1JERVJFRF9GTEFHLCBjdXN0b21pemVyLCBzdGFjaylcbiAgICAgICAgICAgIDogcmVzdWx0XG4gICAgICAgICAgKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc01hdGNoO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hTmAgd2l0aG91dCBzdXBwb3J0IGZvciBudW1iZXIgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgTmFOYCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYU4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYU47XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTWFza2VkID0gcmVxdWlyZSgnLi9faXNNYXNrZWQnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTmF0aXZlO1xuIiwidmFyIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzZXRUYWcgPSAnW29iamVjdCBTZXRdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1NldGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzZXQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzU2V0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGdldFRhZyh2YWx1ZSkgPT0gc2V0VGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc1NldDtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNUeXBlZEFycmF5O1xuIiwidmFyIGJhc2VNYXRjaGVzID0gcmVxdWlyZSgnLi9fYmFzZU1hdGNoZXMnKSxcbiAgICBiYXNlTWF0Y2hlc1Byb3BlcnR5ID0gcmVxdWlyZSgnLi9fYmFzZU1hdGNoZXNQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBwcm9wZXJ0eSA9IHJlcXVpcmUoJy4vcHJvcGVydHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pdGVyYXRlZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gW3ZhbHVlPV8uaWRlbnRpdHldIFRoZSB2YWx1ZSB0byBjb252ZXJ0IHRvIGFuIGl0ZXJhdGVlLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBpdGVyYXRlZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUl0ZXJhdGVlKHZhbHVlKSB7XG4gIC8vIERvbid0IHN0b3JlIHRoZSBgdHlwZW9mYCByZXN1bHQgaW4gYSB2YXJpYWJsZSB0byBhdm9pZCBhIEpJVCBidWcgaW4gU2FmYXJpIDkuXG4gIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MDM0IGZvciBtb3JlIGRldGFpbHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBpZGVudGl0eTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGlzQXJyYXkodmFsdWUpXG4gICAgICA/IGJhc2VNYXRjaGVzUHJvcGVydHkodmFsdWVbMF0sIHZhbHVlWzFdKVxuICAgICAgOiBiYXNlTWF0Y2hlcyh2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHByb3BlcnR5KHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXRlcmF0ZWU7XG4iLCJ2YXIgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c2Agd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBrZXkgIT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5cztcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAgbmF0aXZlS2V5c0luID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5c0luJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c0luYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzSW4ob2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzSW4ob2JqZWN0KTtcbiAgfVxuICB2YXIgaXNQcm90byA9IGlzUHJvdG90eXBlKG9iamVjdCksXG4gICAgICByZXN1bHQgPSBbXTtcblxuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgaWYgKCEoa2V5ID09ICdjb25zdHJ1Y3RvcicgJiYgKGlzUHJvdG8gfHwgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXNJbjtcbiIsIi8qKlxuICogVGhlIGZ1bmN0aW9uIHdob3NlIHByb3RvdHlwZSBjaGFpbiBzZXF1ZW5jZSB3cmFwcGVycyBpbmhlcml0IGZyb20uXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYmFzZUxvZGFzaCgpIHtcbiAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTG9kYXNoO1xuIiwidmFyIGJhc2VJc01hdGNoID0gcmVxdWlyZSgnLi9fYmFzZUlzTWF0Y2gnKSxcbiAgICBnZXRNYXRjaERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXRjaERhdGEnKSxcbiAgICBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSA9IHJlcXVpcmUoJy4vX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWF0Y2hlc2Agd2hpY2ggZG9lc24ndCBjbG9uZSBgc291cmNlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VNYXRjaGVzKHNvdXJjZSkge1xuICB2YXIgbWF0Y2hEYXRhID0gZ2V0TWF0Y2hEYXRhKHNvdXJjZSk7XG4gIGlmIChtYXRjaERhdGEubGVuZ3RoID09IDEgJiYgbWF0Y2hEYXRhWzBdWzJdKSB7XG4gICAgcmV0dXJuIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKG1hdGNoRGF0YVswXVswXSwgbWF0Y2hEYXRhWzBdWzFdKTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PT0gc291cmNlIHx8IGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBtYXRjaERhdGEpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNYXRjaGVzO1xuIiwidmFyIGJhc2VJc0VxdWFsID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWwnKSxcbiAgICBnZXQgPSByZXF1aXJlKCcuL2dldCcpLFxuICAgIGhhc0luID0gcmVxdWlyZSgnLi9oYXNJbicpLFxuICAgIGlzS2V5ID0gcmVxdWlyZSgnLi9faXNLZXknKSxcbiAgICBpc1N0cmljdENvbXBhcmFibGUgPSByZXF1aXJlKCcuL19pc1N0cmljdENvbXBhcmFibGUnKSxcbiAgICBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSA9IHJlcXVpcmUoJy4vX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlJyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWF0Y2hlc1Byb3BlcnR5YCB3aGljaCBkb2Vzbid0IGNsb25lIGBzcmNWYWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VNYXRjaGVzUHJvcGVydHkocGF0aCwgc3JjVmFsdWUpIHtcbiAgaWYgKGlzS2V5KHBhdGgpICYmIGlzU3RyaWN0Q29tcGFyYWJsZShzcmNWYWx1ZSkpIHtcbiAgICByZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUodG9LZXkocGF0aCksIHNyY1ZhbHVlKTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgdmFyIG9ialZhbHVlID0gZ2V0KG9iamVjdCwgcGF0aCk7XG4gICAgcmV0dXJuIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIG9ialZhbHVlID09PSBzcmNWYWx1ZSlcbiAgICAgID8gaGFzSW4ob2JqZWN0LCBwYXRoKVxuICAgICAgOiBiYXNlSXNFcXVhbChzcmNWYWx1ZSwgb2JqVmFsdWUsIENPTVBBUkVfUEFSVElBTF9GTEFHIHwgQ09NUEFSRV9VTk9SREVSRURfRkxBRyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZU1hdGNoZXNQcm9wZXJ0eTtcbiIsInZhciBiYXNlUGlja0J5ID0gcmVxdWlyZSgnLi9fYmFzZVBpY2tCeScpLFxuICAgIGhhc0luID0gcmVxdWlyZSgnLi9oYXNJbicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnBpY2tgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaW5kaXZpZHVhbFxuICogcHJvcGVydHkgaWRlbnRpZmllcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRocyBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGJhc2VQaWNrKG9iamVjdCwgcGF0aHMpIHtcbiAgcmV0dXJuIGJhc2VQaWNrQnkob2JqZWN0LCBwYXRocywgZnVuY3Rpb24odmFsdWUsIHBhdGgpIHtcbiAgICByZXR1cm4gaGFzSW4ob2JqZWN0LCBwYXRoKTtcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVBpY2s7XG4iLCJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKSxcbiAgICBiYXNlU2V0ID0gcmVxdWlyZSgnLi9fYmFzZVNldCcpLFxuICAgIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiAgYF8ucGlja0J5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRocyBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgcHJvcGVydHkuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBiYXNlUGlja0J5KG9iamVjdCwgcGF0aHMsIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHBhdGhzLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IHt9O1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHBhdGggPSBwYXRoc1tpbmRleF0sXG4gICAgICAgIHZhbHVlID0gYmFzZUdldChvYmplY3QsIHBhdGgpO1xuXG4gICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgcGF0aCkpIHtcbiAgICAgIGJhc2VTZXQocmVzdWx0LCBjYXN0UGF0aChwYXRoLCBvYmplY3QpLCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVBpY2tCeTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucHJvcGVydHlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVByb3BlcnR5KGtleSkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVByb3BlcnR5O1xuIiwidmFyIGJhc2VHZXQgPSByZXF1aXJlKCcuL19iYXNlR2V0Jyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUHJvcGVydHlgIHdoaWNoIHN1cHBvcnRzIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVByb3BlcnR5RGVlcChwYXRoKSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gYmFzZUdldChvYmplY3QsIHBhdGgpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VQcm9wZXJ0eURlZXA7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5T2ZgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eU9mKG9iamVjdCkge1xuICByZXR1cm4gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVByb3BlcnR5T2Y7XG4iLCJ2YXIgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5JyksXG4gICAgb3ZlclJlc3QgPSByZXF1aXJlKCcuL19vdmVyUmVzdCcpLFxuICAgIHNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fc2V0VG9TdHJpbmcnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXN0YCB3aGljaCBkb2Vzbid0IHZhbGlkYXRlIG9yIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCBpZGVudGl0eSksIGZ1bmMgKyAnJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVJlc3Q7XG4iLCJ2YXIgYXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25WYWx1ZScpLFxuICAgIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zZXRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIHBhdGggY3JlYXRpb24uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdmFsdWUsIGN1c3RvbWl6ZXIpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoLFxuICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMSxcbiAgICAgIG5lc3RlZCA9IG9iamVjdDtcblxuICB3aGlsZSAobmVzdGVkICE9IG51bGwgJiYgKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSB0b0tleShwYXRoW2luZGV4XSksXG4gICAgICAgIG5ld1ZhbHVlID0gdmFsdWU7XG5cbiAgICBpZiAoaW5kZXggIT0gbGFzdEluZGV4KSB7XG4gICAgICB2YXIgb2JqVmFsdWUgPSBuZXN0ZWRba2V5XTtcbiAgICAgIG5ld1ZhbHVlID0gY3VzdG9taXplciA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIGtleSwgbmVzdGVkKSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gaXNPYmplY3Qob2JqVmFsdWUpXG4gICAgICAgICAgPyBvYmpWYWx1ZVxuICAgICAgICAgIDogKGlzSW5kZXgocGF0aFtpbmRleCArIDFdKSA/IFtdIDoge30pO1xuICAgICAgfVxuICAgIH1cbiAgICBhc3NpZ25WYWx1ZShuZXN0ZWQsIGtleSwgbmV3VmFsdWUpO1xuICAgIG5lc3RlZCA9IG5lc3RlZFtrZXldO1xuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldDtcbiIsInZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBtZXRhTWFwID0gcmVxdWlyZSgnLi9fbWV0YU1hcCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXREYXRhYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NvY2lhdGUgbWV0YWRhdGEgd2l0aC5cbiAqIEBwYXJhbSB7Kn0gZGF0YSBUaGUgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldERhdGEgPSAhbWV0YU1hcCA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgZGF0YSkge1xuICBtZXRhTWFwLnNldChmdW5jLCBkYXRhKTtcbiAgcmV0dXJuIGZ1bmM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTZXREYXRhO1xuIiwidmFyIGNvbnN0YW50ID0gcmVxdWlyZSgnLi9jb25zdGFudCcpLFxuICAgIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fZGVmaW5lUHJvcGVydHknKSxcbiAgICBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldFRvU3RyaW5nO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zbGljZWAgd2l0aG91dCBhbiBpdGVyYXRlZSBjYWxsIGd1YXJkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2xpY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IC1zdGFydCA+IGxlbmd0aCA/IDAgOiAobGVuZ3RoICsgc3RhcnQpO1xuICB9XG4gIGVuZCA9IGVuZCA+IGxlbmd0aCA/IGxlbmd0aCA6IGVuZDtcbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuZ3RoO1xuICB9XG4gIGxlbmd0aCA9IHN0YXJ0ID4gZW5kID8gMCA6ICgoZW5kIC0gc3RhcnQpID4+PiAwKTtcbiAgc3RhcnQgPj4+PSAwO1xuXG4gIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBhcnJheVtpbmRleCArIHN0YXJ0XTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTbGljZTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRpbWVzO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXG4gKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRvU3RyaW5nO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmFyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBzdG9yaW5nIG1ldGFkYXRhLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmModmFsdWUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbmFyeTtcbiIsInZhciBTZXRDYWNoZSA9IHJlcXVpcmUoJy4vX1NldENhY2hlJyksXG4gICAgYXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXMnKSxcbiAgICBhcnJheUluY2x1ZGVzV2l0aCA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXNXaXRoJyksXG4gICAgY2FjaGVIYXMgPSByZXF1aXJlKCcuL19jYWNoZUhhcycpLFxuICAgIGNyZWF0ZVNldCA9IHJlcXVpcmUoJy4vX2NyZWF0ZVNldCcpLFxuICAgIHNldFRvQXJyYXkgPSByZXF1aXJlKCcuL19zZXRUb0FycmF5Jyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5pcUJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmlxKGFycmF5LCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlcyxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGlzQ29tbW9uID0gdHJ1ZSxcbiAgICAgIHJlc3VsdCA9IFtdLFxuICAgICAgc2VlbiA9IHJlc3VsdDtcblxuICBpZiAoY29tcGFyYXRvcikge1xuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiAgfVxuICBlbHNlIGlmIChsZW5ndGggPj0gTEFSR0VfQVJSQVlfU0laRSkge1xuICAgIHZhciBzZXQgPSBpdGVyYXRlZSA/IG51bGwgOiBjcmVhdGVTZXQoYXJyYXkpO1xuICAgIGlmIChzZXQpIHtcbiAgICAgIHJldHVybiBzZXRUb0FycmF5KHNldCk7XG4gICAgfVxuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgaW5jbHVkZXMgPSBjYWNoZUhhcztcbiAgICBzZWVuID0gbmV3IFNldENhY2hlO1xuICB9XG4gIGVsc2Uge1xuICAgIHNlZW4gPSBpdGVyYXRlZSA/IFtdIDogcmVzdWx0O1xuICB9XG4gIG91dGVyOlxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlKSA6IHZhbHVlO1xuXG4gICAgdmFsdWUgPSAoY29tcGFyYXRvciB8fCB2YWx1ZSAhPT0gMCkgPyB2YWx1ZSA6IDA7XG4gICAgaWYgKGlzQ29tbW9uICYmIGNvbXB1dGVkID09PSBjb21wdXRlZCkge1xuICAgICAgdmFyIHNlZW5JbmRleCA9IHNlZW4ubGVuZ3RoO1xuICAgICAgd2hpbGUgKHNlZW5JbmRleC0tKSB7XG4gICAgICAgIGlmIChzZWVuW3NlZW5JbmRleF0gPT09IGNvbXB1dGVkKSB7XG4gICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpdGVyYXRlZSkge1xuICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmICghaW5jbHVkZXMoc2VlbiwgY29tcHV0ZWQsIGNvbXBhcmF0b3IpKSB7XG4gICAgICBpZiAoc2VlbiAhPT0gcmVzdWx0KSB7XG4gICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuaXE7XG4iLCJ2YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIGxhc3QgPSByZXF1aXJlKCcuL2xhc3QnKSxcbiAgICBwYXJlbnQgPSByZXF1aXJlKCcuL19wYXJlbnQnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5zZXRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHByb3BlcnR5IHBhdGggdG8gdW5zZXQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IGlzIGRlbGV0ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuc2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgb2JqZWN0ID0gcGFyZW50KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCB8fCBkZWxldGUgb2JqZWN0W3RvS2V5KGxhc3QocGF0aCkpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5zZXQ7XG4iLCJ2YXIgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnZhbHVlc2AgYW5kIGBfLnZhbHVlc0luYCB3aGljaCBjcmVhdGVzIGFuXG4gKiBhcnJheSBvZiBgb2JqZWN0YCBwcm9wZXJ0eSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvcGVydHkgbmFtZXNcbiAqIG9mIGBwcm9wc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBuYW1lcyB0byBnZXQgdmFsdWVzIGZvci5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gYmFzZVZhbHVlcyhvYmplY3QsIHByb3BzKSB7XG4gIHJldHVybiBhcnJheU1hcChwcm9wcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIG9iamVjdFtrZXldO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVmFsdWVzO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICByZXR1cm4gY2FjaGUuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FjaGVIYXM7XG4iLCJ2YXIgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5Jyk7XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBgaWRlbnRpdHlgIGlmIGl0J3Mgbm90IGEgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgY2FzdCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY2FzdEZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJyA/IHZhbHVlIDogaWRlbnRpdHk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FzdEZ1bmN0aW9uO1xuIiwidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0tleSA9IHJlcXVpcmUoJy4vX2lzS2V5JyksXG4gICAgc3RyaW5nVG9QYXRoID0gcmVxdWlyZSgnLi9fc3RyaW5nVG9QYXRoJyksXG4gICAgdG9TdHJpbmcgPSByZXF1aXJlKCcuL3RvU3RyaW5nJyk7XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBhIHBhdGggYXJyYXkgaWYgaXQncyBub3Qgb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICovXG5mdW5jdGlvbiBjYXN0UGF0aCh2YWx1ZSwgb2JqZWN0KSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gaXNLZXkodmFsdWUsIG9iamVjdCkgPyBbdmFsdWVdIDogc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FzdFBhdGg7XG4iLCJ2YXIgVWludDhBcnJheSA9IHJlcXVpcmUoJy4vX1VpbnQ4QXJyYXknKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGFycmF5QnVmZmVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYXJyYXlCdWZmZXIgVGhlIGFycmF5IGJ1ZmZlciB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtBcnJheUJ1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGFycmF5IGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gY2xvbmVBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikge1xuICB2YXIgcmVzdWx0ID0gbmV3IGFycmF5QnVmZmVyLmNvbnN0cnVjdG9yKGFycmF5QnVmZmVyLmJ5dGVMZW5ndGgpO1xuICBuZXcgVWludDhBcnJheShyZXN1bHQpLnNldChuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcikpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lQXJyYXlCdWZmZXI7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQsXG4gICAgYWxsb2NVbnNhZmUgPSBCdWZmZXIgPyBCdWZmZXIuYWxsb2NVbnNhZmUgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mICBgYnVmZmVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQnVmZmVyKGJ1ZmZlciwgaXNEZWVwKSB7XG4gIGlmIChpc0RlZXApIHtcbiAgICByZXR1cm4gYnVmZmVyLnNsaWNlKCk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBhbGxvY1Vuc2FmZSA/IGFsbG9jVW5zYWZlKGxlbmd0aCkgOiBuZXcgYnVmZmVyLmNvbnN0cnVjdG9yKGxlbmd0aCk7XG5cbiAgYnVmZmVyLmNvcHkocmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZUJ1ZmZlcjtcbiIsInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgZGF0YVZpZXdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YVZpZXcgVGhlIGRhdGEgdmlldyB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgZGF0YSB2aWV3LlxuICovXG5mdW5jdGlvbiBjbG9uZURhdGFWaWV3KGRhdGFWaWV3LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIoZGF0YVZpZXcuYnVmZmVyKSA6IGRhdGFWaWV3LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyBkYXRhVmlldy5jb25zdHJ1Y3RvcihidWZmZXIsIGRhdGFWaWV3LmJ5dGVPZmZzZXQsIGRhdGFWaWV3LmJ5dGVMZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lRGF0YVZpZXc7XG4iLCIvKiogVXNlZCB0byBtYXRjaCBgUmVnRXhwYCBmbGFncyBmcm9tIHRoZWlyIGNvZXJjZWQgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUZsYWdzID0gL1xcdyokLztcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHJlZ2V4cGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWdleHAgVGhlIHJlZ2V4cCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCByZWdleHAuXG4gKi9cbmZ1bmN0aW9uIGNsb25lUmVnRXhwKHJlZ2V4cCkge1xuICB2YXIgcmVzdWx0ID0gbmV3IHJlZ2V4cC5jb25zdHJ1Y3RvcihyZWdleHAuc291cmNlLCByZUZsYWdzLmV4ZWMocmVnZXhwKSk7XG4gIHJlc3VsdC5sYXN0SW5kZXggPSByZWdleHAubGFzdEluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lUmVnRXhwO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGBzeW1ib2xgIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHN5bWJvbCBUaGUgc3ltYm9sIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBzeW1ib2wgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBjbG9uZVN5bWJvbChzeW1ib2wpIHtcbiAgcmV0dXJuIHN5bWJvbFZhbHVlT2YgPyBPYmplY3Qoc3ltYm9sVmFsdWVPZi5jYWxsKHN5bWJvbCkpIDoge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVTeW1ib2w7XG4iLCJ2YXIgY2xvbmVBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQXJyYXlCdWZmZXInKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHR5cGVkQXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gdHlwZWRBcnJheSBUaGUgdHlwZWQgYXJyYXkgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHR5cGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBjbG9uZVR5cGVkQXJyYXkodHlwZWRBcnJheSwgaXNEZWVwKSB7XG4gIHZhciBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKHR5cGVkQXJyYXkuYnVmZmVyKSA6IHR5cGVkQXJyYXkuYnVmZmVyO1xuICByZXR1cm4gbmV3IHR5cGVkQXJyYXkuY29uc3RydWN0b3IoYnVmZmVyLCB0eXBlZEFycmF5LmJ5dGVPZmZzZXQsIHR5cGVkQXJyYXkubGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVR5cGVkQXJyYXk7XG4iLCIvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMsXG4gKiBwbGFjZWhvbGRlcnMsIGFuZCBwcm92aWRlZCBhcmd1bWVudHMgaW50byBhIHNpbmdsZSBhcnJheSBvZiBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZC5cbiAqIEBwYXJhbSB7QXJyYXl9IGhvbGRlcnMgVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbXMge2Jvb2xlYW59IFtpc0N1cnJpZWRdIFNwZWNpZnkgY29tcG9zaW5nIGZvciBhIGN1cnJpZWQgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21wb3NlZCBhcmd1bWVudHMuXG4gKi9cbmZ1bmN0aW9uIGNvbXBvc2VBcmdzKGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpIHtcbiAgdmFyIGFyZ3NJbmRleCA9IC0xLFxuICAgICAgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoLFxuICAgICAgaG9sZGVyc0xlbmd0aCA9IGhvbGRlcnMubGVuZ3RoLFxuICAgICAgbGVmdEluZGV4ID0gLTEsXG4gICAgICBsZWZ0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgcmFuZ2VMZW5ndGggPSBuYXRpdmVNYXgoYXJnc0xlbmd0aCAtIGhvbGRlcnNMZW5ndGgsIDApLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVmdExlbmd0aCArIHJhbmdlTGVuZ3RoKSxcbiAgICAgIGlzVW5jdXJyaWVkID0gIWlzQ3VycmllZDtcblxuICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgcmVzdWx0W2xlZnRJbmRleF0gPSBwYXJ0aWFsc1tsZWZ0SW5kZXhdO1xuICB9XG4gIHdoaWxlICgrK2FyZ3NJbmRleCA8IGhvbGRlcnNMZW5ndGgpIHtcbiAgICBpZiAoaXNVbmN1cnJpZWQgfHwgYXJnc0luZGV4IDwgYXJnc0xlbmd0aCkge1xuICAgICAgcmVzdWx0W2hvbGRlcnNbYXJnc0luZGV4XV0gPSBhcmdzW2FyZ3NJbmRleF07XG4gICAgfVxuICB9XG4gIHdoaWxlIChyYW5nZUxlbmd0aC0tKSB7XG4gICAgcmVzdWx0W2xlZnRJbmRleCsrXSA9IGFyZ3NbYXJnc0luZGV4KytdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcG9zZUFyZ3M7XG4iLCIvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBjb21wb3NlQXJnc2AgZXhjZXB0IHRoYXQgdGhlIGFyZ3VtZW50cyBjb21wb3NpdGlvblxuICogaXMgdGFpbG9yZWQgZm9yIGBfLnBhcnRpYWxSaWdodGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gYXBwZW5kIHRvIHRob3NlIHByb3ZpZGVkLlxuICogQHBhcmFtIHtBcnJheX0gaG9sZGVycyBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtcyB7Ym9vbGVhbn0gW2lzQ3VycmllZF0gU3BlY2lmeSBjb21wb3NpbmcgZm9yIGEgY3VycmllZCBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbXBvc2VkIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gY29tcG9zZUFyZ3NSaWdodChhcmdzLCBwYXJ0aWFscywgaG9sZGVycywgaXNDdXJyaWVkKSB7XG4gIHZhciBhcmdzSW5kZXggPSAtMSxcbiAgICAgIGFyZ3NMZW5ndGggPSBhcmdzLmxlbmd0aCxcbiAgICAgIGhvbGRlcnNJbmRleCA9IC0xLFxuICAgICAgaG9sZGVyc0xlbmd0aCA9IGhvbGRlcnMubGVuZ3RoLFxuICAgICAgcmlnaHRJbmRleCA9IC0xLFxuICAgICAgcmlnaHRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsXG4gICAgICByYW5nZUxlbmd0aCA9IG5hdGl2ZU1heChhcmdzTGVuZ3RoIC0gaG9sZGVyc0xlbmd0aCwgMCksXG4gICAgICByZXN1bHQgPSBBcnJheShyYW5nZUxlbmd0aCArIHJpZ2h0TGVuZ3RoKSxcbiAgICAgIGlzVW5jdXJyaWVkID0gIWlzQ3VycmllZDtcblxuICB3aGlsZSAoKythcmdzSW5kZXggPCByYW5nZUxlbmd0aCkge1xuICAgIHJlc3VsdFthcmdzSW5kZXhdID0gYXJnc1thcmdzSW5kZXhdO1xuICB9XG4gIHZhciBvZmZzZXQgPSBhcmdzSW5kZXg7XG4gIHdoaWxlICgrK3JpZ2h0SW5kZXggPCByaWdodExlbmd0aCkge1xuICAgIHJlc3VsdFtvZmZzZXQgKyByaWdodEluZGV4XSA9IHBhcnRpYWxzW3JpZ2h0SW5kZXhdO1xuICB9XG4gIHdoaWxlICgrK2hvbGRlcnNJbmRleCA8IGhvbGRlcnNMZW5ndGgpIHtcbiAgICBpZiAoaXNVbmN1cnJpZWQgfHwgYXJnc0luZGV4IDwgYXJnc0xlbmd0aCkge1xuICAgICAgcmVzdWx0W29mZnNldCArIGhvbGRlcnNbaG9sZGVyc0luZGV4XV0gPSBhcmdzW2FyZ3NJbmRleCsrXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb21wb3NlQXJnc1JpZ2h0O1xuIiwiLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBgc291cmNlYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG5cbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weUFycmF5O1xuIiwidmFyIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKTtcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weU9iamVjdDtcbiIsInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGdldFN5bWJvbHMgPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzJyk7XG5cbi8qKlxuICogQ29waWVzIG93biBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5U3ltYm9scyhzb3VyY2UsIG9iamVjdCkge1xuICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHMoc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5U3ltYm9scztcbiIsInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGdldFN5bWJvbHNJbiA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHNJbicpO1xuXG4vKipcbiAqIENvcGllcyBvd24gYW5kIGluaGVyaXRlZCBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5U3ltYm9sc0luKHNvdXJjZSwgb2JqZWN0KSB7XG4gIHJldHVybiBjb3B5T2JqZWN0KHNvdXJjZSwgZ2V0U3ltYm9sc0luKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVN5bWJvbHNJbjtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcmVKc0RhdGE7XG4iLCIvKipcbiAqIEdldHMgdGhlIG51bWJlciBvZiBgcGxhY2Vob2xkZXJgIG9jY3VycmVuY2VzIGluIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBwbGFjZWhvbGRlciBUaGUgcGxhY2Vob2xkZXIgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHBsYWNlaG9sZGVyIGNvdW50LlxuICovXG5mdW5jdGlvbiBjb3VudEhvbGRlcnMoYXJyYXksIHBsYWNlaG9sZGVyKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSAwO1xuXG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGlmIChhcnJheVtsZW5ndGhdID09PSBwbGFjZWhvbGRlcikge1xuICAgICAgKytyZXN1bHQ7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY291bnRIb2xkZXJzO1xuIiwidmFyIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBpc0l0ZXJhdGVlQ2FsbCA9IHJlcXVpcmUoJy4vX2lzSXRlcmF0ZWVDYWxsJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uYXNzaWduYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gYXNzaWduZXIgVGhlIGZ1bmN0aW9uIHRvIGFzc2lnbiB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhc3NpZ25lciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoYXNzaWduZXIpIHtcbiAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwgc291cmNlcykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBzb3VyY2VzLmxlbmd0aCxcbiAgICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA+IDEgPyBzb3VyY2VzW2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkLFxuICAgICAgICBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xuXG4gICAgY3VzdG9taXplciA9IChhc3NpZ25lci5sZW5ndGggPiAzICYmIHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicpXG4gICAgICA/IChsZW5ndGgtLSwgY3VzdG9taXplcilcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHNvdXJjZXNbMF0sIHNvdXJjZXNbMV0sIGd1YXJkKSkge1xuICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiBjdXN0b21pemVyO1xuICAgICAgbGVuZ3RoID0gMTtcbiAgICB9XG4gICAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzW2luZGV4XTtcbiAgICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgYXNzaWduZXIob2JqZWN0LCBzb3VyY2UsIGluZGV4LCBjdXN0b21pemVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQXNzaWduZXI7XG4iLCJ2YXIgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGBiYXNlRWFjaGAgb3IgYGJhc2VFYWNoUmlnaHRgIGZ1bmN0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlYWNoRnVuYyBUaGUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGEgY29sbGVjdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmFzZUVhY2goZWFjaEZ1bmMsIGZyb21SaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICB9XG4gICAgaWYgKCFpc0FycmF5TGlrZShjb2xsZWN0aW9uKSkge1xuICAgICAgcmV0dXJuIGVhY2hGdW5jKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKTtcbiAgICB9XG4gICAgdmFyIGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IGZyb21SaWdodCA/IGxlbmd0aCA6IC0xLFxuICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChjb2xsZWN0aW9uKTtcblxuICAgIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVbaW5kZXhdLCBpbmRleCwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQmFzZUVhY2g7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBiYXNlIGZ1bmN0aW9uIGZvciBtZXRob2RzIGxpa2UgYF8uZm9ySW5gIGFuZCBgXy5mb3JPd25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VGb3IoZnJvbVJpZ2h0KSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzRnVuYykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChvYmplY3QpLFxuICAgICAgICBwcm9wcyA9IGtleXNGdW5jKG9iamVjdCksXG4gICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgdmFyIGtleSA9IHByb3BzW2Zyb21SaWdodCA/IGxlbmd0aCA6ICsraW5kZXhdO1xuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVCYXNlRm9yO1xuIiwidmFyIGNyZWF0ZUN0b3IgPSByZXF1aXJlKCcuL19jcmVhdGVDdG9yJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBpbnZva2UgaXQgd2l0aCB0aGUgb3B0aW9uYWwgYHRoaXNgXG4gKiBiaW5kaW5nIG9mIGB0aGlzQXJnYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmluZChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnKSB7XG4gIHZhciBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICBDdG9yID0gY3JlYXRlQ3RvcihmdW5jKTtcblxuICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgIHZhciBmbiA9ICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpID8gQ3RvciA6IGZ1bmM7XG4gICAgcmV0dXJuIGZuLmFwcGx5KGlzQmluZCA/IHRoaXNBcmcgOiB0aGlzLCBhcmd1bWVudHMpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUJpbmQ7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwcm9kdWNlcyBhbiBpbnN0YW5jZSBvZiBgQ3RvcmAgcmVnYXJkbGVzcyBvZlxuICogd2hldGhlciBpdCB3YXMgaW52b2tlZCBhcyBwYXJ0IG9mIGEgYG5ld2AgZXhwcmVzc2lvbiBvciBieSBgY2FsbGAgb3IgYGFwcGx5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gQ3RvciBUaGUgY29uc3RydWN0b3IgdG8gd3JhcC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUN0b3IoQ3Rvcikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgLy8gVXNlIGEgYHN3aXRjaGAgc3RhdGVtZW50IHRvIHdvcmsgd2l0aCBjbGFzcyBjb25zdHJ1Y3RvcnMuIFNlZVxuICAgIC8vIGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtZnVuY3Rpb24tb2JqZWN0cy1jYWxsLXRoaXNhcmd1bWVudC1hcmd1bWVudHNsaXN0XG4gICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6IHJldHVybiBuZXcgQ3RvcjtcbiAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0pO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICBjYXNlIDM6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSk7XG4gICAgICBjYXNlIDY6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdKTtcbiAgICAgIGNhc2UgNzogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0sIGFyZ3NbNl0pO1xuICAgIH1cbiAgICB2YXIgdGhpc0JpbmRpbmcgPSBiYXNlQ3JlYXRlKEN0b3IucHJvdG90eXBlKSxcbiAgICAgICAgcmVzdWx0ID0gQ3Rvci5hcHBseSh0aGlzQmluZGluZywgYXJncyk7XG5cbiAgICAvLyBNaW1pYyB0aGUgY29uc3RydWN0b3IncyBgcmV0dXJuYCBiZWhhdmlvci5cbiAgICAvLyBTZWUgaHR0cHM6Ly9lczUuZ2l0aHViLmlvLyN4MTMuMi4yIGZvciBtb3JlIGRldGFpbHMuXG4gICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiB0aGlzQmluZGluZztcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDdG9yO1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKSxcbiAgICBjcmVhdGVDdG9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQ3RvcicpLFxuICAgIGNyZWF0ZUh5YnJpZCA9IHJlcXVpcmUoJy4vX2NyZWF0ZUh5YnJpZCcpLFxuICAgIGNyZWF0ZVJlY3VycnkgPSByZXF1aXJlKCcuL19jcmVhdGVSZWN1cnJ5JyksXG4gICAgZ2V0SG9sZGVyID0gcmVxdWlyZSgnLi9fZ2V0SG9sZGVyJyksXG4gICAgcmVwbGFjZUhvbGRlcnMgPSByZXF1aXJlKCcuL19yZXBsYWNlSG9sZGVycycpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGVuYWJsZSBjdXJyeWluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge251bWJlcn0gYXJpdHkgVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUN1cnJ5KGZ1bmMsIGJpdG1hc2ssIGFyaXR5KSB7XG4gIHZhciBDdG9yID0gY3JlYXRlQ3RvcihmdW5jKTtcblxuICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICBhcmdzID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgaW5kZXggPSBsZW5ndGgsXG4gICAgICAgIHBsYWNlaG9sZGVyID0gZ2V0SG9sZGVyKHdyYXBwZXIpO1xuXG4gICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgIGFyZ3NbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICB9XG4gICAgdmFyIGhvbGRlcnMgPSAobGVuZ3RoIDwgMyAmJiBhcmdzWzBdICE9PSBwbGFjZWhvbGRlciAmJiBhcmdzW2xlbmd0aCAtIDFdICE9PSBwbGFjZWhvbGRlcilcbiAgICAgID8gW11cbiAgICAgIDogcmVwbGFjZUhvbGRlcnMoYXJncywgcGxhY2Vob2xkZXIpO1xuXG4gICAgbGVuZ3RoIC09IGhvbGRlcnMubGVuZ3RoO1xuICAgIGlmIChsZW5ndGggPCBhcml0eSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZVJlY3VycnkoXG4gICAgICAgIGZ1bmMsIGJpdG1hc2ssIGNyZWF0ZUh5YnJpZCwgd3JhcHBlci5wbGFjZWhvbGRlciwgdW5kZWZpbmVkLFxuICAgICAgICBhcmdzLCBob2xkZXJzLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYXJpdHkgLSBsZW5ndGgpO1xuICAgIH1cbiAgICB2YXIgZm4gPSAodGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSA/IEN0b3IgOiBmdW5jO1xuICAgIHJldHVybiBhcHBseShmbiwgdGhpcywgYXJncyk7XG4gIH1cbiAgcmV0dXJuIHdyYXBwZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQ3Vycnk7XG4iLCJ2YXIgYmFzZUl0ZXJhdGVlID0gcmVxdWlyZSgnLi9fYmFzZUl0ZXJhdGVlJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgXy5maW5kYCBvciBgXy5maW5kTGFzdGAgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZpbmRJbmRleEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGNvbGxlY3Rpb24gaW5kZXguXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmaW5kIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVGaW5kKGZpbmRJbmRleEZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZnJvbUluZGV4KSB7XG4gICAgdmFyIGl0ZXJhYmxlID0gT2JqZWN0KGNvbGxlY3Rpb24pO1xuICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgIHZhciBpdGVyYXRlZSA9IGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpO1xuICAgICAgY29sbGVjdGlvbiA9IGtleXMoY29sbGVjdGlvbik7XG4gICAgICBwcmVkaWNhdGUgPSBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpOyB9O1xuICAgIH1cbiAgICB2YXIgaW5kZXggPSBmaW5kSW5kZXhGdW5jKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZnJvbUluZGV4KTtcbiAgICByZXR1cm4gaW5kZXggPiAtMSA/IGl0ZXJhYmxlW2l0ZXJhdGVlID8gY29sbGVjdGlvbltpbmRleF0gOiBpbmRleF0gOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlRmluZDtcbiIsInZhciBjb21wb3NlQXJncyA9IHJlcXVpcmUoJy4vX2NvbXBvc2VBcmdzJyksXG4gICAgY29tcG9zZUFyZ3NSaWdodCA9IHJlcXVpcmUoJy4vX2NvbXBvc2VBcmdzUmlnaHQnKSxcbiAgICBjb3VudEhvbGRlcnMgPSByZXF1aXJlKCcuL19jb3VudEhvbGRlcnMnKSxcbiAgICBjcmVhdGVDdG9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQ3RvcicpLFxuICAgIGNyZWF0ZVJlY3VycnkgPSByZXF1aXJlKCcuL19jcmVhdGVSZWN1cnJ5JyksXG4gICAgZ2V0SG9sZGVyID0gcmVxdWlyZSgnLi9fZ2V0SG9sZGVyJyksXG4gICAgcmVvcmRlciA9IHJlcXVpcmUoJy4vX3Jlb3JkZXInKSxcbiAgICByZXBsYWNlSG9sZGVycyA9IHJlcXVpcmUoJy4vX3JlcGxhY2VIb2xkZXJzJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcgPSAxNixcbiAgICBXUkFQX0FSWV9GTEFHID0gMTI4LFxuICAgIFdSQVBfRkxJUF9GTEFHID0gNTEyO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBpbnZva2UgaXQgd2l0aCBvcHRpb25hbCBgdGhpc2BcbiAqIGJpbmRpbmcgb2YgYHRoaXNBcmdgLCBwYXJ0aWFsIGFwcGxpY2F0aW9uLCBhbmQgY3VycnlpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb258c3RyaW5nfSBmdW5jIFRoZSBmdW5jdGlvbiBvciBtZXRob2QgbmFtZSB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0b1xuICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc10gVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc1JpZ2h0XSBUaGUgYXJndW1lbnRzIHRvIGFwcGVuZCB0byB0aG9zZSBwcm92aWRlZFxuICogIHRvIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc1JpZ2h0XSBUaGUgYHBhcnRpYWxzUmlnaHRgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJnUG9zXSBUaGUgYXJndW1lbnQgcG9zaXRpb25zIG9mIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyeV0gVGhlIGFyaXR5IGNhcCBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5XSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSHlicmlkKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBwYXJ0aWFsc1JpZ2h0LCBob2xkZXJzUmlnaHQsIGFyZ1BvcywgYXJ5LCBhcml0eSkge1xuICB2YXIgaXNBcnkgPSBiaXRtYXNrICYgV1JBUF9BUllfRkxBRyxcbiAgICAgIGlzQmluZCA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRyxcbiAgICAgIGlzQmluZEtleSA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfS0VZX0ZMQUcsXG4gICAgICBpc0N1cnJpZWQgPSBiaXRtYXNrICYgKFdSQVBfQ1VSUllfRkxBRyB8IFdSQVBfQ1VSUllfUklHSFRfRkxBRyksXG4gICAgICBpc0ZsaXAgPSBiaXRtYXNrICYgV1JBUF9GTElQX0ZMQUcsXG4gICAgICBDdG9yID0gaXNCaW5kS2V5ID8gdW5kZWZpbmVkIDogY3JlYXRlQ3RvcihmdW5jKTtcblxuICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICBhcmdzID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgaW5kZXggPSBsZW5ndGg7XG5cbiAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgIH1cbiAgICBpZiAoaXNDdXJyaWVkKSB7XG4gICAgICB2YXIgcGxhY2Vob2xkZXIgPSBnZXRIb2xkZXIod3JhcHBlciksXG4gICAgICAgICAgaG9sZGVyc0NvdW50ID0gY291bnRIb2xkZXJzKGFyZ3MsIHBsYWNlaG9sZGVyKTtcbiAgICB9XG4gICAgaWYgKHBhcnRpYWxzKSB7XG4gICAgICBhcmdzID0gY29tcG9zZUFyZ3MoYXJncywgcGFydGlhbHMsIGhvbGRlcnMsIGlzQ3VycmllZCk7XG4gICAgfVxuICAgIGlmIChwYXJ0aWFsc1JpZ2h0KSB7XG4gICAgICBhcmdzID0gY29tcG9zZUFyZ3NSaWdodChhcmdzLCBwYXJ0aWFsc1JpZ2h0LCBob2xkZXJzUmlnaHQsIGlzQ3VycmllZCk7XG4gICAgfVxuICAgIGxlbmd0aCAtPSBob2xkZXJzQ291bnQ7XG4gICAgaWYgKGlzQ3VycmllZCAmJiBsZW5ndGggPCBhcml0eSkge1xuICAgICAgdmFyIG5ld0hvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhhcmdzLCBwbGFjZWhvbGRlcik7XG4gICAgICByZXR1cm4gY3JlYXRlUmVjdXJyeShcbiAgICAgICAgZnVuYywgYml0bWFzaywgY3JlYXRlSHlicmlkLCB3cmFwcGVyLnBsYWNlaG9sZGVyLCB0aGlzQXJnLFxuICAgICAgICBhcmdzLCBuZXdIb2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkgLSBsZW5ndGhcbiAgICAgICk7XG4gICAgfVxuICAgIHZhciB0aGlzQmluZGluZyA9IGlzQmluZCA/IHRoaXNBcmcgOiB0aGlzLFxuICAgICAgICBmbiA9IGlzQmluZEtleSA/IHRoaXNCaW5kaW5nW2Z1bmNdIDogZnVuYztcblxuICAgIGxlbmd0aCA9IGFyZ3MubGVuZ3RoO1xuICAgIGlmIChhcmdQb3MpIHtcbiAgICAgIGFyZ3MgPSByZW9yZGVyKGFyZ3MsIGFyZ1Bvcyk7XG4gICAgfSBlbHNlIGlmIChpc0ZsaXAgJiYgbGVuZ3RoID4gMSkge1xuICAgICAgYXJncy5yZXZlcnNlKCk7XG4gICAgfVxuICAgIGlmIChpc0FyeSAmJiBhcnkgPCBsZW5ndGgpIHtcbiAgICAgIGFyZ3MubGVuZ3RoID0gYXJ5O1xuICAgIH1cbiAgICBpZiAodGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSB7XG4gICAgICBmbiA9IEN0b3IgfHwgY3JlYXRlQ3Rvcihmbik7XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQmluZGluZywgYXJncyk7XG4gIH1cbiAgcmV0dXJuIHdyYXBwZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlSHlicmlkO1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKSxcbiAgICBjcmVhdGVDdG9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQ3RvcicpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gaW52b2tlIGl0IHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nXG4gKiBvZiBgdGhpc0FyZ2AgYW5kIGBwYXJ0aWFsc2AgcHJlcGVuZGVkIHRvIHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBwYXJ0aWFscyBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAqICB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUGFydGlhbChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscykge1xuICB2YXIgaXNCaW5kID0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHLFxuICAgICAgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgYXJnc0luZGV4ID0gLTEsXG4gICAgICAgIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICBsZWZ0SW5kZXggPSAtMSxcbiAgICAgICAgbGVmdExlbmd0aCA9IHBhcnRpYWxzLmxlbmd0aCxcbiAgICAgICAgYXJncyA9IEFycmF5KGxlZnRMZW5ndGggKyBhcmdzTGVuZ3RoKSxcbiAgICAgICAgZm4gPSAodGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSA/IEN0b3IgOiBmdW5jO1xuXG4gICAgd2hpbGUgKCsrbGVmdEluZGV4IDwgbGVmdExlbmd0aCkge1xuICAgICAgYXJnc1tsZWZ0SW5kZXhdID0gcGFydGlhbHNbbGVmdEluZGV4XTtcbiAgICB9XG4gICAgd2hpbGUgKGFyZ3NMZW5ndGgtLSkge1xuICAgICAgYXJnc1tsZWZ0SW5kZXgrK10gPSBhcmd1bWVudHNbKythcmdzSW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gYXBwbHkoZm4sIGlzQmluZCA/IHRoaXNBcmcgOiB0aGlzLCBhcmdzKTtcbiAgfVxuICByZXR1cm4gd3JhcHBlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVQYXJ0aWFsO1xuIiwidmFyIGlzTGF6aWFibGUgPSByZXF1aXJlKCcuL19pc0xhemlhYmxlJyksXG4gICAgc2V0RGF0YSA9IHJlcXVpcmUoJy4vX3NldERhdGEnKSxcbiAgICBzZXRXcmFwVG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRXcmFwVG9TdHJpbmcnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9CT1VORF9GTEFHID0gNCxcbiAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzIsXG4gICAgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgPSA2NDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gY29udGludWUgY3VycnlpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gd3JhcEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgYGZ1bmNgIHdyYXBwZXIuXG4gKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB2YWx1ZS5cbiAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0b1xuICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc10gVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcmdQb3NdIFRoZSBhcmd1bWVudCBwb3NpdGlvbnMgb2YgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVSZWN1cnJ5KGZ1bmMsIGJpdG1hc2ssIHdyYXBGdW5jLCBwbGFjZWhvbGRlciwgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIGFyZ1BvcywgYXJ5LCBhcml0eSkge1xuICB2YXIgaXNDdXJyeSA9IGJpdG1hc2sgJiBXUkFQX0NVUlJZX0ZMQUcsXG4gICAgICBuZXdIb2xkZXJzID0gaXNDdXJyeSA/IGhvbGRlcnMgOiB1bmRlZmluZWQsXG4gICAgICBuZXdIb2xkZXJzUmlnaHQgPSBpc0N1cnJ5ID8gdW5kZWZpbmVkIDogaG9sZGVycyxcbiAgICAgIG5ld1BhcnRpYWxzID0gaXNDdXJyeSA/IHBhcnRpYWxzIDogdW5kZWZpbmVkLFxuICAgICAgbmV3UGFydGlhbHNSaWdodCA9IGlzQ3VycnkgPyB1bmRlZmluZWQgOiBwYXJ0aWFscztcblxuICBiaXRtYXNrIHw9IChpc0N1cnJ5ID8gV1JBUF9QQVJUSUFMX0ZMQUcgOiBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyk7XG4gIGJpdG1hc2sgJj0gfihpc0N1cnJ5ID8gV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgOiBXUkFQX1BBUlRJQUxfRkxBRyk7XG5cbiAgaWYgKCEoYml0bWFzayAmIFdSQVBfQ1VSUllfQk9VTkRfRkxBRykpIHtcbiAgICBiaXRtYXNrICY9IH4oV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX0JJTkRfS0VZX0ZMQUcpO1xuICB9XG4gIHZhciBuZXdEYXRhID0gW1xuICAgIGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIG5ld1BhcnRpYWxzLCBuZXdIb2xkZXJzLCBuZXdQYXJ0aWFsc1JpZ2h0LFxuICAgIG5ld0hvbGRlcnNSaWdodCwgYXJnUG9zLCBhcnksIGFyaXR5XG4gIF07XG5cbiAgdmFyIHJlc3VsdCA9IHdyYXBGdW5jLmFwcGx5KHVuZGVmaW5lZCwgbmV3RGF0YSk7XG4gIGlmIChpc0xhemlhYmxlKGZ1bmMpKSB7XG4gICAgc2V0RGF0YShyZXN1bHQsIG5ld0RhdGEpO1xuICB9XG4gIHJlc3VsdC5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xuICByZXR1cm4gc2V0V3JhcFRvU3RyaW5nKHJlc3VsdCwgZnVuYywgYml0bWFzayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlUmVjdXJyeTtcbiIsInZhciBTZXQgPSByZXF1aXJlKCcuL19TZXQnKSxcbiAgICBub29wID0gcmVxdWlyZSgnLi9ub29wJyksXG4gICAgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4vX3NldFRvQXJyYXknKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2V0IG9iamVjdCBvZiBgdmFsdWVzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYWRkIHRvIHRoZSBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgc2V0LlxuICovXG52YXIgY3JlYXRlU2V0ID0gIShTZXQgJiYgKDEgLyBzZXRUb0FycmF5KG5ldyBTZXQoWywtMF0pKVsxXSkgPT0gSU5GSU5JVFkpID8gbm9vcCA6IGZ1bmN0aW9uKHZhbHVlcykge1xuICByZXR1cm4gbmV3IFNldCh2YWx1ZXMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVTZXQ7XG4iLCJ2YXIgYmFzZVNldERhdGEgPSByZXF1aXJlKCcuL19iYXNlU2V0RGF0YScpLFxuICAgIGNyZWF0ZUJpbmQgPSByZXF1aXJlKCcuL19jcmVhdGVCaW5kJyksXG4gICAgY3JlYXRlQ3VycnkgPSByZXF1aXJlKCcuL19jcmVhdGVDdXJyeScpLFxuICAgIGNyZWF0ZUh5YnJpZCA9IHJlcXVpcmUoJy4vX2NyZWF0ZUh5YnJpZCcpLFxuICAgIGNyZWF0ZVBhcnRpYWwgPSByZXF1aXJlKCcuL19jcmVhdGVQYXJ0aWFsJyksXG4gICAgZ2V0RGF0YSA9IHJlcXVpcmUoJy4vX2dldERhdGEnKSxcbiAgICBtZXJnZURhdGEgPSByZXF1aXJlKCcuL19tZXJnZURhdGEnKSxcbiAgICBzZXREYXRhID0gcmVxdWlyZSgnLi9fc2V0RGF0YScpLFxuICAgIHNldFdyYXBUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFdyYXBUb1N0cmluZycpLFxuICAgIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vdG9JbnRlZ2VyJyk7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfQ1VSUllfRkxBRyA9IDgsXG4gICAgV1JBUF9DVVJSWV9SSUdIVF9GTEFHID0gMTYsXG4gICAgV1JBUF9QQVJUSUFMX0ZMQUcgPSAzMixcbiAgICBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyA9IDY0O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgZWl0aGVyIGN1cnJpZXMgb3IgaW52b2tlcyBgZnVuY2Agd2l0aCBvcHRpb25hbFxuICogYHRoaXNgIGJpbmRpbmcgYW5kIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbnxzdHJpbmd9IGZ1bmMgVGhlIGZ1bmN0aW9uIG9yIG1ldGhvZCBuYW1lIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAgIDEgLSBgXy5iaW5kYFxuICogICAgMiAtIGBfLmJpbmRLZXlgXG4gKiAgICA0IC0gYF8uY3VycnlgIG9yIGBfLmN1cnJ5UmlnaHRgIG9mIGEgYm91bmQgZnVuY3Rpb25cbiAqICAgIDggLSBgXy5jdXJyeWBcbiAqICAgMTYgLSBgXy5jdXJyeVJpZ2h0YFxuICogICAzMiAtIGBfLnBhcnRpYWxgXG4gKiAgIDY0IC0gYF8ucGFydGlhbFJpZ2h0YFxuICogIDEyOCAtIGBfLnJlYXJnYFxuICogIDI1NiAtIGBfLmFyeWBcbiAqICA1MTIgLSBgXy5mbGlwYFxuICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzXSBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVdyYXAoZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIGFyZ1BvcywgYXJ5LCBhcml0eSkge1xuICB2YXIgaXNCaW5kS2V5ID0gYml0bWFzayAmIFdSQVBfQklORF9LRVlfRkxBRztcbiAgaWYgKCFpc0JpbmRLZXkgJiYgdHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB2YXIgbGVuZ3RoID0gcGFydGlhbHMgPyBwYXJ0aWFscy5sZW5ndGggOiAwO1xuICBpZiAoIWxlbmd0aCkge1xuICAgIGJpdG1hc2sgJj0gfihXUkFQX1BBUlRJQUxfRkxBRyB8IFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHKTtcbiAgICBwYXJ0aWFscyA9IGhvbGRlcnMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgYXJ5ID0gYXJ5ID09PSB1bmRlZmluZWQgPyBhcnkgOiBuYXRpdmVNYXgodG9JbnRlZ2VyKGFyeSksIDApO1xuICBhcml0eSA9IGFyaXR5ID09PSB1bmRlZmluZWQgPyBhcml0eSA6IHRvSW50ZWdlcihhcml0eSk7XG4gIGxlbmd0aCAtPSBob2xkZXJzID8gaG9sZGVycy5sZW5ndGggOiAwO1xuXG4gIGlmIChiaXRtYXNrICYgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcpIHtcbiAgICB2YXIgcGFydGlhbHNSaWdodCA9IHBhcnRpYWxzLFxuICAgICAgICBob2xkZXJzUmlnaHQgPSBob2xkZXJzO1xuXG4gICAgcGFydGlhbHMgPSBob2xkZXJzID0gdW5kZWZpbmVkO1xuICB9XG4gIHZhciBkYXRhID0gaXNCaW5kS2V5ID8gdW5kZWZpbmVkIDogZ2V0RGF0YShmdW5jKTtcblxuICB2YXIgbmV3RGF0YSA9IFtcbiAgICBmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LFxuICAgIGFyZ1BvcywgYXJ5LCBhcml0eVxuICBdO1xuXG4gIGlmIChkYXRhKSB7XG4gICAgbWVyZ2VEYXRhKG5ld0RhdGEsIGRhdGEpO1xuICB9XG4gIGZ1bmMgPSBuZXdEYXRhWzBdO1xuICBiaXRtYXNrID0gbmV3RGF0YVsxXTtcbiAgdGhpc0FyZyA9IG5ld0RhdGFbMl07XG4gIHBhcnRpYWxzID0gbmV3RGF0YVszXTtcbiAgaG9sZGVycyA9IG5ld0RhdGFbNF07XG4gIGFyaXR5ID0gbmV3RGF0YVs5XSA9IG5ld0RhdGFbOV0gPT09IHVuZGVmaW5lZFxuICAgID8gKGlzQmluZEtleSA/IDAgOiBmdW5jLmxlbmd0aClcbiAgICA6IG5hdGl2ZU1heChuZXdEYXRhWzldIC0gbGVuZ3RoLCAwKTtcblxuICBpZiAoIWFyaXR5ICYmIGJpdG1hc2sgJiAoV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9DVVJSWV9SSUdIVF9GTEFHKSkge1xuICAgIGJpdG1hc2sgJj0gfihXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpO1xuICB9XG4gIGlmICghYml0bWFzayB8fCBiaXRtYXNrID09IFdSQVBfQklORF9GTEFHKSB7XG4gICAgdmFyIHJlc3VsdCA9IGNyZWF0ZUJpbmQoZnVuYywgYml0bWFzaywgdGhpc0FyZyk7XG4gIH0gZWxzZSBpZiAoYml0bWFzayA9PSBXUkFQX0NVUlJZX0ZMQUcgfHwgYml0bWFzayA9PSBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpIHtcbiAgICByZXN1bHQgPSBjcmVhdGVDdXJyeShmdW5jLCBiaXRtYXNrLCBhcml0eSk7XG4gIH0gZWxzZSBpZiAoKGJpdG1hc2sgPT0gV1JBUF9QQVJUSUFMX0ZMQUcgfHwgYml0bWFzayA9PSAoV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX1BBUlRJQUxfRkxBRykpICYmICFob2xkZXJzLmxlbmd0aCkge1xuICAgIHJlc3VsdCA9IGNyZWF0ZVBhcnRpYWwoZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IGNyZWF0ZUh5YnJpZC5hcHBseSh1bmRlZmluZWQsIG5ld0RhdGEpO1xuICB9XG4gIHZhciBzZXR0ZXIgPSBkYXRhID8gYmFzZVNldERhdGEgOiBzZXREYXRhO1xuICByZXR1cm4gc2V0V3JhcFRvU3RyaW5nKHNldHRlcihyZXN1bHQsIG5ld0RhdGEpLCBmdW5jLCBiaXRtYXNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVXcmFwO1xuIiwidmFyIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuL2lzUGxhaW5PYmplY3QnKTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLm9taXRgIHRvIGN1c3RvbWl6ZSBpdHMgYF8uY2xvbmVEZWVwYCB1c2UgdG8gb25seSBjbG9uZSBwbGFpblxuICogb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB1bmNsb25lZCB2YWx1ZSBvciBgdW5kZWZpbmVkYCB0byBkZWZlciBjbG9uaW5nIHRvIGBfLmNsb25lRGVlcGAuXG4gKi9cbmZ1bmN0aW9uIGN1c3RvbU9taXRDbG9uZSh2YWx1ZSkge1xuICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyB1bmRlZmluZWQgOiB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjdXN0b21PbWl0Q2xvbmU7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICB2YXIgZnVuYyA9IGdldE5hdGl2ZShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xuICAgIGZ1bmMoe30sICcnLCB7fSk7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZVByb3BlcnR5O1xuIiwidmFyIFNldENhY2hlID0gcmVxdWlyZSgnLi9fU2V0Q2FjaGUnKSxcbiAgICBhcnJheVNvbWUgPSByZXF1aXJlKCcuL19hcnJheVNvbWUnKSxcbiAgICBjYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2NhY2hlSGFzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGFycmF5cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtBcnJheX0gb3RoZXIgVGhlIG90aGVyIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBhcnJheWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQXJyYXlzKGFycmF5LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgYXJyTGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoZXIubGVuZ3RoO1xuXG4gIGlmIChhcnJMZW5ndGggIT0gb3RoTGVuZ3RoICYmICEoaXNQYXJ0aWFsICYmIG90aExlbmd0aCA+IGFyckxlbmd0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChhcnJheSk7XG4gIGlmIChzdGFja2VkICYmIHN0YWNrLmdldChvdGhlcikpIHtcbiAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgfVxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IHRydWUsXG4gICAgICBzZWVuID0gKGJpdG1hc2sgJiBDT01QQVJFX1VOT1JERVJFRF9GTEFHKSA/IG5ldyBTZXRDYWNoZSA6IHVuZGVmaW5lZDtcblxuICBzdGFjay5zZXQoYXJyYXksIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBhcnJheSk7XG5cbiAgLy8gSWdub3JlIG5vbi1pbmRleCBwcm9wZXJ0aWVzLlxuICB3aGlsZSAoKytpbmRleCA8IGFyckxlbmd0aCkge1xuICAgIHZhciBhcnJWYWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltpbmRleF07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgYXJyVmFsdWUsIGluZGV4LCBvdGhlciwgYXJyYXksIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIoYXJyVmFsdWUsIG90aFZhbHVlLCBpbmRleCwgYXJyYXksIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIGlmIChjb21wYXJlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY29tcGFyZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmIChzZWVuKSB7XG4gICAgICBpZiAoIWFycmF5U29tZShvdGhlciwgZnVuY3Rpb24ob3RoVmFsdWUsIG90aEluZGV4KSB7XG4gICAgICAgICAgICBpZiAoIWNhY2hlSGFzKHNlZW4sIG90aEluZGV4KSAmJlxuICAgICAgICAgICAgICAgIChhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKSkge1xuICAgICAgICAgICAgICByZXR1cm4gc2Vlbi5wdXNoKG90aEluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSkge1xuICAgICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghKFxuICAgICAgICAgIGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fFxuICAgICAgICAgICAgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShhcnJheSk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxBcnJheXM7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgVWludDhBcnJheSA9IHJlcXVpcmUoJy4vX1VpbnQ4QXJyYXknKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgbWFwVG9BcnJheSA9IHJlcXVpcmUoJy4vX21hcFRvQXJyYXknKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFZhbHVlT2YgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnZhbHVlT2YgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBjb21wYXJpbmcgb2JqZWN0cyBvZlxuICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNvbXBhcmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0cyB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAob2JqZWN0LmJ5dGVPZmZzZXQgIT0gb3RoZXIuYnl0ZU9mZnNldCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgb2JqZWN0ID0gb2JqZWN0LmJ1ZmZlcjtcbiAgICAgIG90aGVyID0gb3RoZXIuYnVmZmVyO1xuXG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBVaW50OEFycmF5KG9iamVjdCksIG5ldyBVaW50OEFycmF5KG90aGVyKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cbiAgICAgIC8vIEludmFsaWQgZGF0ZXMgYXJlIGNvZXJjZWQgdG8gYE5hTmAuXG4gICAgICByZXR1cm4gZXEoK29iamVjdCwgK290aGVyKTtcblxuICAgIGNhc2UgZXJyb3JUYWc6XG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWUgPT0gb3RoZXIubmFtZSAmJiBvYmplY3QubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICAvLyBDb2VyY2UgcmVnZXhlcyB0byBzdHJpbmdzIGFuZCB0cmVhdCBzdHJpbmdzLCBwcmltaXRpdmVzIGFuZCBvYmplY3RzLFxuICAgICAgLy8gYXMgZXF1YWwuIFNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiBvYmplY3QgPT0gKG90aGVyICsgJycpO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICB2YXIgY29udmVydCA9IG1hcFRvQXJyYXk7XG5cbiAgICBjYXNlIHNldFRhZzpcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XG4gICAgICBjb252ZXJ0IHx8IChjb252ZXJ0ID0gc2V0VG9BcnJheSk7XG5cbiAgICAgIGlmIChvYmplY3Quc2l6ZSAhPSBvdGhlci5zaXplICYmICFpc1BhcnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgICAgIGlmIChzdGFja2VkKSB7XG4gICAgICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xuICAgICAgfVxuICAgICAgYml0bWFzayB8PSBDT01QQVJFX1VOT1JERVJFRF9GTEFHO1xuXG4gICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgICAgIHZhciByZXN1bHQgPSBlcXVhbEFycmF5cyhjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgICAgIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgaWYgKHN5bWJvbFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQnlUYWc7XG4iLCJ2YXIgZ2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3Igb2JqZWN0cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgb2JqUHJvcHMgPSBnZXRBbGxLZXlzKG9iamVjdCksXG4gICAgICBvYmpMZW5ndGggPSBvYmpQcm9wcy5sZW5ndGgsXG4gICAgICBvdGhQcm9wcyA9IGdldEFsbEtleXMob3RoZXIpLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoUHJvcHMubGVuZ3RoO1xuXG4gIGlmIChvYmpMZW5ndGggIT0gb3RoTGVuZ3RoICYmICFpc1BhcnRpYWwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGluZGV4ID0gb2JqTGVuZ3RoO1xuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIHZhciBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgaWYgKCEoaXNQYXJ0aWFsID8ga2V5IGluIG90aGVyIDogaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwga2V5KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICBpZiAoc3RhY2tlZCAmJiBzdGFjay5nZXQob3RoZXIpKSB7XG4gICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IHRydWU7XG4gIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBvYmplY3QpO1xuXG4gIHZhciBza2lwQ3RvciA9IGlzUGFydGlhbDtcbiAgd2hpbGUgKCsraW5kZXggPCBvYmpMZW5ndGgpIHtcbiAgICBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJba2V5XTtcblxuICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBvYmpWYWx1ZSwga2V5LCBvdGhlciwgb2JqZWN0LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSwga2V5LCBvYmplY3QsIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmICghKGNvbXBhcmVkID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IChvYmpWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKG9ialZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKVxuICAgICAgICAgIDogY29tcGFyZWRcbiAgICAgICAgKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2tpcEN0b3IgfHwgKHNraXBDdG9yID0ga2V5ID09ICdjb25zdHJ1Y3RvcicpO1xuICB9XG4gIGlmIChyZXN1bHQgJiYgIXNraXBDdG9yKSB7XG4gICAgdmFyIG9iakN0b3IgPSBvYmplY3QuY29uc3RydWN0b3IsXG4gICAgICAgIG90aEN0b3IgPSBvdGhlci5jb25zdHJ1Y3RvcjtcblxuICAgIC8vIE5vbiBgT2JqZWN0YCBvYmplY3QgaW5zdGFuY2VzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWFsLlxuICAgIGlmIChvYmpDdG9yICE9IG90aEN0b3IgJiZcbiAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmXG4gICAgICAgICEodHlwZW9mIG9iakN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvYmpDdG9yIGluc3RhbmNlb2Ygb2JqQ3RvciAmJlxuICAgICAgICAgIHR5cGVvZiBvdGhDdG9yID09ICdmdW5jdGlvbicgJiYgb3RoQ3RvciBpbnN0YW5jZW9mIG90aEN0b3IpKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxPYmplY3RzO1xuIiwidmFyIGJhc2VQcm9wZXJ0eU9mID0gcmVxdWlyZSgnLi9fYmFzZVByb3BlcnR5T2YnKTtcblxuLyoqIFVzZWQgdG8gbWFwIGNoYXJhY3RlcnMgdG8gSFRNTCBlbnRpdGllcy4gKi9cbnZhciBodG1sRXNjYXBlcyA9IHtcbiAgJyYnOiAnJmFtcDsnLFxuICAnPCc6ICcmbHQ7JyxcbiAgJz4nOiAnJmd0OycsXG4gICdcIic6ICcmcXVvdDsnLFxuICBcIidcIjogJyYjMzk7J1xufTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLmVzY2FwZWAgdG8gY29udmVydCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaHIgVGhlIG1hdGNoZWQgY2hhcmFjdGVyIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgY2hhcmFjdGVyLlxuICovXG52YXIgZXNjYXBlSHRtbENoYXIgPSBiYXNlUHJvcGVydHlPZihodG1sRXNjYXBlcyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZXNjYXBlSHRtbENoYXI7XG4iLCJ2YXIgZmxhdHRlbiA9IHJlcXVpcmUoJy4vZmxhdHRlbicpLFxuICAgIG92ZXJSZXN0ID0gcmVxdWlyZSgnLi9fb3ZlclJlc3QnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggZmxhdHRlbnMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gZmxhdFJlc3QoZnVuYykge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgdW5kZWZpbmVkLCBmbGF0dGVuKSwgZnVuYyArICcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0UmVzdDtcbiIsIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbm1vZHVsZS5leHBvcnRzID0gZnJlZUdsb2JhbDtcbiIsInZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5cywgZ2V0U3ltYm9scyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsS2V5cztcbiIsInZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9sc0luID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9sc0luJyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBnZXRBbGxLZXlzSW4ob2JqZWN0KSB7XG4gIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNJbiwgZ2V0U3ltYm9sc0luKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRBbGxLZXlzSW47XG4iLCJ2YXIgbWV0YU1hcCA9IHJlcXVpcmUoJy4vX21ldGFNYXAnKSxcbiAgICBub29wID0gcmVxdWlyZSgnLi9ub29wJyk7XG5cbi8qKlxuICogR2V0cyBtZXRhZGF0YSBmb3IgYGZ1bmNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtZXRhZGF0YSBmb3IgYGZ1bmNgLlxuICovXG52YXIgZ2V0RGF0YSA9ICFtZXRhTWFwID8gbm9vcCA6IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgcmV0dXJuIG1ldGFNYXAuZ2V0KGZ1bmMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXREYXRhO1xuIiwidmFyIHJlYWxOYW1lcyA9IHJlcXVpcmUoJy4vX3JlYWxOYW1lcycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIG5hbWUgb2YgYGZ1bmNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNOYW1lKGZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IChmdW5jLm5hbWUgKyAnJyksXG4gICAgICBhcnJheSA9IHJlYWxOYW1lc1tyZXN1bHRdLFxuICAgICAgbGVuZ3RoID0gaGFzT3duUHJvcGVydHkuY2FsbChyZWFsTmFtZXMsIHJlc3VsdCkgPyBhcnJheS5sZW5ndGggOiAwO1xuXG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIHZhciBkYXRhID0gYXJyYXlbbGVuZ3RoXSxcbiAgICAgICAgb3RoZXJGdW5jID0gZGF0YS5mdW5jO1xuICAgIGlmIChvdGhlckZ1bmMgPT0gbnVsbCB8fCBvdGhlckZ1bmMgPT0gZnVuYykge1xuICAgICAgcmV0dXJuIGRhdGEubmFtZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRGdW5jTmFtZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgYXJndW1lbnQgcGxhY2Vob2xkZXIgdmFsdWUgZm9yIGBmdW5jYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwbGFjZWhvbGRlciB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0SG9sZGVyKGZ1bmMpIHtcbiAgdmFyIG9iamVjdCA9IGZ1bmM7XG4gIHJldHVybiBvYmplY3QucGxhY2Vob2xkZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0SG9sZGVyO1xuIiwidmFyIGlzS2V5YWJsZSA9IHJlcXVpcmUoJy4vX2lzS2V5YWJsZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWFwRGF0YTtcbiIsInZhciBpc1N0cmljdENvbXBhcmFibGUgPSByZXF1aXJlKCcuL19pc1N0cmljdENvbXBhcmFibGUnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3Mgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbWF0Y2ggZGF0YSBvZiBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gZ2V0TWF0Y2hEYXRhKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0ga2V5cyhvYmplY3QpLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICB2YXIga2V5ID0gcmVzdWx0W2xlbmd0aF0sXG4gICAgICAgIHZhbHVlID0gb2JqZWN0W2tleV07XG5cbiAgICByZXN1bHRbbGVuZ3RoXSA9IFtrZXksIHZhbHVlLCBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpXTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE1hdGNoRGF0YTtcbiIsInZhciBiYXNlSXNOYXRpdmUgPSByZXF1aXJlKCcuL19iYXNlSXNOYXRpdmUnKSxcbiAgICBnZXRWYWx1ZSA9IHJlcXVpcmUoJy4vX2dldFZhbHVlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TmF0aXZlO1xuIiwidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFByb3RvdHlwZTtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFJhd1RhZztcbiIsInZhciBhcnJheUZpbHRlciA9IHJlcXVpcmUoJy4vX2FycmF5RmlsdGVyJyksXG4gICAgc3R1YkFycmF5ID0gcmVxdWlyZSgnLi9zdHViQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAqL1xudmFyIGdldFN5bWJvbHMgPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gIHJldHVybiBhcnJheUZpbHRlcihuYXRpdmVHZXRTeW1ib2xzKG9iamVjdCksIGZ1bmN0aW9uKHN5bWJvbCkge1xuICAgIHJldHVybiBwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgc3ltYm9sKTtcbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFN5bWJvbHM7XG4iLCJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBzdHViQXJyYXkgPSByZXF1aXJlKCcuL3N0dWJBcnJheScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzSW4gPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHdoaWxlIChvYmplY3QpIHtcbiAgICBhcnJheVB1c2gocmVzdWx0LCBnZXRTeW1ib2xzKG9iamVjdCkpO1xuICAgIG9iamVjdCA9IGdldFByb3RvdHlwZShvYmplY3QpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFN5bWJvbHNJbjtcbiIsInZhciBEYXRhVmlldyA9IHJlcXVpcmUoJy4vX0RhdGFWaWV3JyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgUHJvbWlzZSA9IHJlcXVpcmUoJy4vX1Byb21pc2UnKSxcbiAgICBTZXQgPSByZXF1aXJlKCcuL19TZXQnKSxcbiAgICBXZWFrTWFwID0gcmVxdWlyZSgnLi9fV2Vha01hcCcpLFxuICAgIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcHJvbWlzZVRhZyA9ICdbb2JqZWN0IFByb21pc2VdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWFwcywgc2V0cywgYW5kIHdlYWttYXBzLiAqL1xudmFyIGRhdGFWaWV3Q3RvclN0cmluZyA9IHRvU291cmNlKERhdGFWaWV3KSxcbiAgICBtYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoTWFwKSxcbiAgICBwcm9taXNlQ3RvclN0cmluZyA9IHRvU291cmNlKFByb21pc2UpLFxuICAgIHNldEN0b3JTdHJpbmcgPSB0b1NvdXJjZShTZXQpLFxuICAgIHdlYWtNYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoV2Vha01hcCk7XG5cbi8qKlxuICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbnZhciBnZXRUYWcgPSBiYXNlR2V0VGFnO1xuXG4vLyBGYWxsYmFjayBmb3IgZGF0YSB2aWV3cywgbWFwcywgc2V0cywgYW5kIHdlYWsgbWFwcyBpbiBJRSAxMSBhbmQgcHJvbWlzZXMgaW4gTm9kZS5qcyA8IDYuXG5pZiAoKERhdGFWaWV3ICYmIGdldFRhZyhuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcpIHx8XG4gICAgKE1hcCAmJiBnZXRUYWcobmV3IE1hcCkgIT0gbWFwVGFnKSB8fFxuICAgIChQcm9taXNlICYmIGdldFRhZyhQcm9taXNlLnJlc29sdmUoKSkgIT0gcHJvbWlzZVRhZykgfHxcbiAgICAoU2V0ICYmIGdldFRhZyhuZXcgU2V0KSAhPSBzZXRUYWcpIHx8XG4gICAgKFdlYWtNYXAgJiYgZ2V0VGFnKG5ldyBXZWFrTWFwKSAhPSB3ZWFrTWFwVGFnKSkge1xuICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhciByZXN1bHQgPSBiYXNlR2V0VGFnKHZhbHVlKSxcbiAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgY3RvclN0cmluZyA9IEN0b3IgPyB0b1NvdXJjZShDdG9yKSA6ICcnO1xuXG4gICAgaWYgKGN0b3JTdHJpbmcpIHtcbiAgICAgIHN3aXRjaCAoY3RvclN0cmluZykge1xuICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xuICAgICAgICBjYXNlIG1hcEN0b3JTdHJpbmc6IHJldHVybiBtYXBUYWc7XG4gICAgICAgIGNhc2UgcHJvbWlzZUN0b3JTdHJpbmc6IHJldHVybiBwcm9taXNlVGFnO1xuICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XG4gICAgICAgIGNhc2Ugd2Vha01hcEN0b3JTdHJpbmc6IHJldHVybiB3ZWFrTWFwVGFnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFRhZztcbiIsIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFZhbHVlO1xuIiwiLyoqIFVzZWQgdG8gbWF0Y2ggd3JhcCBkZXRhaWwgY29tbWVudHMuICovXG52YXIgcmVXcmFwRGV0YWlscyA9IC9cXHtcXG5cXC9cXCogXFxbd3JhcHBlZCB3aXRoICguKylcXF0gXFwqLyxcbiAgICByZVNwbGl0RGV0YWlscyA9IC8sPyAmIC87XG5cbi8qKlxuICogRXh0cmFjdHMgd3JhcHBlciBkZXRhaWxzIGZyb20gdGhlIGBzb3VyY2VgIGJvZHkgY29tbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBUaGUgc291cmNlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHdyYXBwZXIgZGV0YWlscy5cbiAqL1xuZnVuY3Rpb24gZ2V0V3JhcERldGFpbHMoc291cmNlKSB7XG4gIHZhciBtYXRjaCA9IHNvdXJjZS5tYXRjaChyZVdyYXBEZXRhaWxzKTtcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0uc3BsaXQocmVTcGxpdERldGFpbHMpIDogW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0V3JhcERldGFpbHM7XG4iLCJ2YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHBhdGhgIGV4aXN0cyBvbiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYXNGdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjayBwcm9wZXJ0aWVzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzUGF0aChvYmplY3QsIHBhdGgsIGhhc0Z1bmMpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHRvS2V5KHBhdGhbaW5kZXhdKTtcbiAgICBpZiAoIShyZXN1bHQgPSBvYmplY3QgIT0gbnVsbCAmJiBoYXNGdW5jKG9iamVjdCwga2V5KSkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBvYmplY3QgPSBvYmplY3Rba2V5XTtcbiAgfVxuICBpZiAocmVzdWx0IHx8ICsraW5kZXggIT0gbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBsZW5ndGggPSBvYmplY3QgPT0gbnVsbCA/IDAgOiBvYmplY3QubGVuZ3RoO1xuICByZXR1cm4gISFsZW5ndGggJiYgaXNMZW5ndGgobGVuZ3RoKSAmJiBpc0luZGV4KGtleSwgbGVuZ3RoKSAmJlxuICAgIChpc0FycmF5KG9iamVjdCkgfHwgaXNBcmd1bWVudHMob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzUGF0aDtcbiIsIi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjaGFyYWN0ZXIgY2xhc3Nlcy4gKi9cbnZhciByc0FzdHJhbFJhbmdlID0gJ1xcXFx1ZDgwMC1cXFxcdWRmZmYnLFxuICAgIHJzQ29tYm9NYXJrc1JhbmdlID0gJ1xcXFx1MDMwMC1cXFxcdTAzNmYnLFxuICAgIHJlQ29tYm9IYWxmTWFya3NSYW5nZSA9ICdcXFxcdWZlMjAtXFxcXHVmZTJmJyxcbiAgICByc0NvbWJvU3ltYm9sc1JhbmdlID0gJ1xcXFx1MjBkMC1cXFxcdTIwZmYnLFxuICAgIHJzQ29tYm9SYW5nZSA9IHJzQ29tYm9NYXJrc1JhbmdlICsgcmVDb21ib0hhbGZNYXJrc1JhbmdlICsgcnNDb21ib1N5bWJvbHNSYW5nZSxcbiAgICByc1ZhclJhbmdlID0gJ1xcXFx1ZmUwZVxcXFx1ZmUwZic7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjYXB0dXJlIGdyb3Vwcy4gKi9cbnZhciByc1pXSiA9ICdcXFxcdTIwMGQnO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgc3RyaW5ncyB3aXRoIFt6ZXJvLXdpZHRoIGpvaW5lcnMgb3IgY29kZSBwb2ludHMgZnJvbSB0aGUgYXN0cmFsIHBsYW5lc10oaHR0cDovL2Vldi5lZS9ibG9nLzIwMTUvMDkvMTIvZGFyay1jb3JuZXJzLW9mLXVuaWNvZGUvKS4gKi9cbnZhciByZUhhc1VuaWNvZGUgPSBSZWdFeHAoJ1snICsgcnNaV0ogKyByc0FzdHJhbFJhbmdlICArIHJzQ29tYm9SYW5nZSArIHJzVmFyUmFuZ2UgKyAnXScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgc3RyaW5nYCBjb250YWlucyBVbmljb2RlIHN5bWJvbHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGEgc3ltYm9sIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc1VuaWNvZGUoc3RyaW5nKSB7XG4gIHJldHVybiByZUhhc1VuaWNvZGUudGVzdChzdHJpbmcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc1VuaWNvZGU7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKi9cbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gdGhpcy5oYXMoa2V5KSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaERlbGV0ZTtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hHZXQ7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgaGFzaCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoSGFzO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoU2V0O1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBhcnJheSBjbG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lQXJyYXkoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IG5ldyBhcnJheS5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIC8vIEFkZCBwcm9wZXJ0aWVzIGFzc2lnbmVkIGJ5IGBSZWdFeHAjZXhlY2AuXG4gIGlmIChsZW5ndGggJiYgdHlwZW9mIGFycmF5WzBdID09ICdzdHJpbmcnICYmIGhhc093blByb3BlcnR5LmNhbGwoYXJyYXksICdpbmRleCcpKSB7XG4gICAgcmVzdWx0LmluZGV4ID0gYXJyYXkuaW5kZXg7XG4gICAgcmVzdWx0LmlucHV0ID0gYXJyYXkuaW5wdXQ7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVBcnJheTtcbiIsInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpLFxuICAgIGNsb25lRGF0YVZpZXcgPSByZXF1aXJlKCcuL19jbG9uZURhdGFWaWV3JyksXG4gICAgY2xvbmVSZWdFeHAgPSByZXF1aXJlKCcuL19jbG9uZVJlZ0V4cCcpLFxuICAgIGNsb25lU3ltYm9sID0gcmVxdWlyZSgnLi9fY2xvbmVTeW1ib2wnKSxcbiAgICBjbG9uZVR5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19jbG9uZVR5cGVkQXJyYXknKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lIGJhc2VkIG9uIGl0cyBgdG9TdHJpbmdUYWdgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY2xvbmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE1hcGAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgYFNldGAsIG9yIGBTdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZUJ5VGFnKG9iamVjdCwgdGFnLCBpc0RlZXApIHtcbiAgdmFyIEN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIHJldHVybiBjbG9uZUFycmF5QnVmZmVyKG9iamVjdCk7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yKCtvYmplY3QpO1xuXG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIHJldHVybiBjbG9uZURhdGFWaWV3KG9iamVjdCwgaXNEZWVwKTtcblxuICAgIGNhc2UgZmxvYXQzMlRhZzogY2FzZSBmbG9hdDY0VGFnOlxuICAgIGNhc2UgaW50OFRhZzogY2FzZSBpbnQxNlRhZzogY2FzZSBpbnQzMlRhZzpcbiAgICBjYXNlIHVpbnQ4VGFnOiBjYXNlIHVpbnQ4Q2xhbXBlZFRhZzogY2FzZSB1aW50MTZUYWc6IGNhc2UgdWludDMyVGFnOlxuICAgICAgcmV0dXJuIGNsb25lVHlwZWRBcnJheShvYmplY3QsIGlzRGVlcCk7XG5cbiAgICBjYXNlIG1hcFRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcjtcblxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yKG9iamVjdCk7XG5cbiAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICAgIHJldHVybiBjbG9uZVJlZ0V4cChvYmplY3QpO1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3I7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIHJldHVybiBjbG9uZVN5bWJvbChvYmplY3QpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5pdENsb25lQnlUYWc7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xuICByZXR1cm4gKHR5cGVvZiBvYmplY3QuY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNQcm90b3R5cGUob2JqZWN0KSlcbiAgICA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpXG4gICAgOiB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVPYmplY3Q7XG4iLCIvKiogVXNlZCB0byBtYXRjaCB3cmFwIGRldGFpbCBjb21tZW50cy4gKi9cbnZhciByZVdyYXBDb21tZW50ID0gL1xceyg/OlxcblxcL1xcKiBcXFt3cmFwcGVkIHdpdGggLitcXF0gXFwqXFwvKT9cXG4/LztcblxuLyoqXG4gKiBJbnNlcnRzIHdyYXBwZXIgYGRldGFpbHNgIGluIGEgY29tbWVudCBhdCB0aGUgdG9wIG9mIHRoZSBgc291cmNlYCBib2R5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIFRoZSBzb3VyY2UgdG8gbW9kaWZ5LlxuICogQHJldHVybnMge0FycmF5fSBkZXRhaWxzIFRoZSBkZXRhaWxzIHRvIGluc2VydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIG1vZGlmaWVkIHNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gaW5zZXJ0V3JhcERldGFpbHMoc291cmNlLCBkZXRhaWxzKSB7XG4gIHZhciBsZW5ndGggPSBkZXRhaWxzLmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBsZW5ndGggLSAxO1xuICBkZXRhaWxzW2xhc3RJbmRleF0gPSAobGVuZ3RoID4gMSA/ICcmICcgOiAnJykgKyBkZXRhaWxzW2xhc3RJbmRleF07XG4gIGRldGFpbHMgPSBkZXRhaWxzLmpvaW4obGVuZ3RoID4gMiA/ICcsICcgOiAnICcpO1xuICByZXR1cm4gc291cmNlLnJlcGxhY2UocmVXcmFwQ29tbWVudCwgJ3tcXG4vKiBbd3JhcHBlZCB3aXRoICcgKyBkZXRhaWxzICsgJ10gKi9cXG4nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRXcmFwRGV0YWlscztcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwcmVhZGFibGVTeW1ib2wgPSBTeW1ib2wgPyBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgZmxhdHRlbmFibGUgYGFyZ3VtZW50c2Agb2JqZWN0IG9yIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZsYXR0ZW5hYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzRmxhdHRlbmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIGlzQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSB8fFxuICAgICEhKHNwcmVhZGFibGVTeW1ib2wgJiYgdmFsdWUgJiYgdmFsdWVbc3ByZWFkYWJsZVN5bWJvbF0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRmxhdHRlbmFibGU7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xudmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJbmRleDtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgKSB7XG4gICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJdGVyYXRlZUNhbGw7XG4iLCJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxcbiAgICByZUlzUGxhaW5Qcm9wID0gL15cXHcqJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lIGFuZCBub3QgYSBwcm9wZXJ0eSBwYXRoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXkodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGlmICh0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicgfHxcbiAgICAgIHZhbHVlID09IG51bGwgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIHJlSXNQbGFpblByb3AudGVzdCh2YWx1ZSkgfHwgIXJlSXNEZWVwUHJvcC50ZXN0KHZhbHVlKSB8fFxuICAgIChvYmplY3QgIT0gbnVsbCAmJiB2YWx1ZSBpbiBPYmplY3Qob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXk7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXlhYmxlO1xuIiwidmFyIExhenlXcmFwcGVyID0gcmVxdWlyZSgnLi9fTGF6eVdyYXBwZXInKSxcbiAgICBnZXREYXRhID0gcmVxdWlyZSgnLi9fZ2V0RGF0YScpLFxuICAgIGdldEZ1bmNOYW1lID0gcmVxdWlyZSgnLi9fZ2V0RnVuY05hbWUnKSxcbiAgICBsb2Rhc2ggPSByZXF1aXJlKCcuL3dyYXBwZXJMb2Rhc2gnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBhIGxhenkgY291bnRlcnBhcnQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBoYXMgYSBsYXp5IGNvdW50ZXJwYXJ0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNMYXppYWJsZShmdW5jKSB7XG4gIHZhciBmdW5jTmFtZSA9IGdldEZ1bmNOYW1lKGZ1bmMpLFxuICAgICAgb3RoZXIgPSBsb2Rhc2hbZnVuY05hbWVdO1xuXG4gIGlmICh0eXBlb2Ygb3RoZXIgIT0gJ2Z1bmN0aW9uJyB8fCAhKGZ1bmNOYW1lIGluIExhenlXcmFwcGVyLnByb3RvdHlwZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGZ1bmMgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIGRhdGEgPSBnZXREYXRhKG90aGVyKTtcbiAgcmV0dXJuICEhZGF0YSAmJiBmdW5jID09PSBkYXRhWzBdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTGF6aWFibGU7XG4iLCJ2YXIgY29yZUpzRGF0YSA9IHJlcXVpcmUoJy4vX2NvcmVKc0RhdGEnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc01hc2tlZDtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb3RvdHlwZTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcbiAqICBlcXVhbGl0eSBjb21wYXJpc29ucywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSAmJiAhaXNPYmplY3QodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyaWN0Q29tcGFyYWJsZTtcbiIsIi8qKlxuICogQ29udmVydHMgYGl0ZXJhdG9yYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGl0ZXJhdG9yIFRoZSBpdGVyYXRvciB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGl0ZXJhdG9yVG9BcnJheShpdGVyYXRvcikge1xuICB2YXIgZGF0YSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICghKGRhdGEgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICByZXN1bHQucHVzaChkYXRhLnZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGl0ZXJhdG9yVG9BcnJheTtcbiIsIi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVDbGVhcjtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgLS10aGlzLnNpemU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZURlbGV0ZTtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVHZXQ7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUhhcztcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICArK3RoaXMuc2l6ZTtcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZVNldDtcbiIsInZhciBIYXNoID0gcmVxdWlyZSgnLi9fSGFzaCcpLFxuICAgIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVDbGVhcjtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZURlbGV0ZTtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVHZXQ7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUhhcztcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVTZXQ7XG4iLCIvKipcbiAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gKi9cbmZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobWFwLnNpemUpO1xuXG4gIG1hcC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSBba2V5LCB2YWx1ZV07XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFRvQXJyYXk7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgbWF0Y2hlc1Byb3BlcnR5YCBmb3Igc291cmNlIHZhbHVlcyBzdWl0YWJsZVxuICogZm9yIHN0cmljdCBlcXVhbGl0eSBjb21wYXJpc29ucywgaS5lLiBgPT09YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKGtleSwgc3JjVmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0W2tleV0gPT09IHNyY1ZhbHVlICYmXG4gICAgICAoc3JjVmFsdWUgIT09IHVuZGVmaW5lZCB8fCAoa2V5IGluIE9iamVjdChvYmplY3QpKSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWF0Y2hlc1N0cmljdENvbXBhcmFibGU7XG4iLCJ2YXIgbWVtb2l6ZSA9IHJlcXVpcmUoJy4vbWVtb2l6ZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgbWF4aW11bSBtZW1vaXplIGNhY2hlIHNpemUuICovXG52YXIgTUFYX01FTU9JWkVfU0laRSA9IDUwMDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XG4gIHZhciByZXN1bHQgPSBtZW1vaXplKGZ1bmMsIGZ1bmN0aW9uKGtleSkge1xuICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XG4gICAgICBjYWNoZS5jbGVhcigpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9KTtcblxuICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZUNhcHBlZDtcbiIsInZhciBjb21wb3NlQXJncyA9IHJlcXVpcmUoJy4vX2NvbXBvc2VBcmdzJyksXG4gICAgY29tcG9zZUFyZ3NSaWdodCA9IHJlcXVpcmUoJy4vX2NvbXBvc2VBcmdzUmlnaHQnKSxcbiAgICByZXBsYWNlSG9sZGVycyA9IHJlcXVpcmUoJy4vX3JlcGxhY2VIb2xkZXJzJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBpbnRlcm5hbCBhcmd1bWVudCBwbGFjZWhvbGRlci4gKi9cbnZhciBQTEFDRUhPTERFUiA9ICdfX2xvZGFzaF9wbGFjZWhvbGRlcl9fJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9CT1VORF9GTEFHID0gNCxcbiAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgIFdSQVBfQVJZX0ZMQUcgPSAxMjgsXG4gICAgV1JBUF9SRUFSR19GTEFHID0gMjU2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWluID0gTWF0aC5taW47XG5cbi8qKlxuICogTWVyZ2VzIHRoZSBmdW5jdGlvbiBtZXRhZGF0YSBvZiBgc291cmNlYCBpbnRvIGBkYXRhYC5cbiAqXG4gKiBNZXJnaW5nIG1ldGFkYXRhIHJlZHVjZXMgdGhlIG51bWJlciBvZiB3cmFwcGVycyB1c2VkIHRvIGludm9rZSBhIGZ1bmN0aW9uLlxuICogVGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIG1ldGhvZHMgbGlrZSBgXy5iaW5kYCwgYF8uY3VycnlgLCBhbmQgYF8ucGFydGlhbGBcbiAqIG1heSBiZSBhcHBsaWVkIHJlZ2FyZGxlc3Mgb2YgZXhlY3V0aW9uIG9yZGVyLiBNZXRob2RzIGxpa2UgYF8uYXJ5YCBhbmRcbiAqIGBfLnJlYXJnYCBtb2RpZnkgZnVuY3Rpb24gYXJndW1lbnRzLCBtYWtpbmcgdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlXG4gKiBleGVjdXRlZCBpbXBvcnRhbnQsIHByZXZlbnRpbmcgdGhlIG1lcmdpbmcgb2YgbWV0YWRhdGEuIEhvd2V2ZXIsIHdlIG1ha2VcbiAqIGFuIGV4Y2VwdGlvbiBmb3IgYSBzYWZlIGNvbWJpbmVkIGNhc2Ugd2hlcmUgY3VycmllZCBmdW5jdGlvbnMgaGF2ZSBgXy5hcnlgXG4gKiBhbmQgb3IgYF8ucmVhcmdgIGFwcGxpZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgVGhlIGRlc3RpbmF0aW9uIG1ldGFkYXRhLlxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBzb3VyY2UgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGRhdGFgLlxuICovXG5mdW5jdGlvbiBtZXJnZURhdGEoZGF0YSwgc291cmNlKSB7XG4gIHZhciBiaXRtYXNrID0gZGF0YVsxXSxcbiAgICAgIHNyY0JpdG1hc2sgPSBzb3VyY2VbMV0sXG4gICAgICBuZXdCaXRtYXNrID0gYml0bWFzayB8IHNyY0JpdG1hc2ssXG4gICAgICBpc0NvbW1vbiA9IG5ld0JpdG1hc2sgPCAoV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX0JJTkRfS0VZX0ZMQUcgfCBXUkFQX0FSWV9GTEFHKTtcblxuICB2YXIgaXNDb21ibyA9XG4gICAgKChzcmNCaXRtYXNrID09IFdSQVBfQVJZX0ZMQUcpICYmIChiaXRtYXNrID09IFdSQVBfQ1VSUllfRkxBRykpIHx8XG4gICAgKChzcmNCaXRtYXNrID09IFdSQVBfQVJZX0ZMQUcpICYmIChiaXRtYXNrID09IFdSQVBfUkVBUkdfRkxBRykgJiYgKGRhdGFbN10ubGVuZ3RoIDw9IHNvdXJjZVs4XSkpIHx8XG4gICAgKChzcmNCaXRtYXNrID09IChXUkFQX0FSWV9GTEFHIHwgV1JBUF9SRUFSR19GTEFHKSkgJiYgKHNvdXJjZVs3XS5sZW5ndGggPD0gc291cmNlWzhdKSAmJiAoYml0bWFzayA9PSBXUkFQX0NVUlJZX0ZMQUcpKTtcblxuICAvLyBFeGl0IGVhcmx5IGlmIG1ldGFkYXRhIGNhbid0IGJlIG1lcmdlZC5cbiAgaWYgKCEoaXNDb21tb24gfHwgaXNDb21ibykpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGB0aGlzQXJnYCBpZiBhdmFpbGFibGUuXG4gIGlmIChzcmNCaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcpIHtcbiAgICBkYXRhWzJdID0gc291cmNlWzJdO1xuICAgIC8vIFNldCB3aGVuIGN1cnJ5aW5nIGEgYm91bmQgZnVuY3Rpb24uXG4gICAgbmV3Qml0bWFzayB8PSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcgPyAwIDogV1JBUF9DVVJSWV9CT1VORF9GTEFHO1xuICB9XG4gIC8vIENvbXBvc2UgcGFydGlhbCBhcmd1bWVudHMuXG4gIHZhciB2YWx1ZSA9IHNvdXJjZVszXTtcbiAgaWYgKHZhbHVlKSB7XG4gICAgdmFyIHBhcnRpYWxzID0gZGF0YVszXTtcbiAgICBkYXRhWzNdID0gcGFydGlhbHMgPyBjb21wb3NlQXJncyhwYXJ0aWFscywgdmFsdWUsIHNvdXJjZVs0XSkgOiB2YWx1ZTtcbiAgICBkYXRhWzRdID0gcGFydGlhbHMgPyByZXBsYWNlSG9sZGVycyhkYXRhWzNdLCBQTEFDRUhPTERFUikgOiBzb3VyY2VbNF07XG4gIH1cbiAgLy8gQ29tcG9zZSBwYXJ0aWFsIHJpZ2h0IGFyZ3VtZW50cy5cbiAgdmFsdWUgPSBzb3VyY2VbNV07XG4gIGlmICh2YWx1ZSkge1xuICAgIHBhcnRpYWxzID0gZGF0YVs1XTtcbiAgICBkYXRhWzVdID0gcGFydGlhbHMgPyBjb21wb3NlQXJnc1JpZ2h0KHBhcnRpYWxzLCB2YWx1ZSwgc291cmNlWzZdKSA6IHZhbHVlO1xuICAgIGRhdGFbNl0gPSBwYXJ0aWFscyA/IHJlcGxhY2VIb2xkZXJzKGRhdGFbNV0sIFBMQUNFSE9MREVSKSA6IHNvdXJjZVs2XTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGBhcmdQb3NgIGlmIGF2YWlsYWJsZS5cbiAgdmFsdWUgPSBzb3VyY2VbN107XG4gIGlmICh2YWx1ZSkge1xuICAgIGRhdGFbN10gPSB2YWx1ZTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGBhcnlgIGlmIGl0J3Mgc21hbGxlci5cbiAgaWYgKHNyY0JpdG1hc2sgJiBXUkFQX0FSWV9GTEFHKSB7XG4gICAgZGF0YVs4XSA9IGRhdGFbOF0gPT0gbnVsbCA/IHNvdXJjZVs4XSA6IG5hdGl2ZU1pbihkYXRhWzhdLCBzb3VyY2VbOF0pO1xuICB9XG4gIC8vIFVzZSBzb3VyY2UgYGFyaXR5YCBpZiBvbmUgaXMgbm90IHByb3ZpZGVkLlxuICBpZiAoZGF0YVs5XSA9PSBudWxsKSB7XG4gICAgZGF0YVs5XSA9IHNvdXJjZVs5XTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGBmdW5jYCBhbmQgbWVyZ2UgYml0bWFza3MuXG4gIGRhdGFbMF0gPSBzb3VyY2VbMF07XG4gIGRhdGFbMV0gPSBuZXdCaXRtYXNrO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlRGF0YTtcbiIsInZhciBXZWFrTWFwID0gcmVxdWlyZSgnLi9fV2Vha01hcCcpO1xuXG4vKiogVXNlZCB0byBzdG9yZSBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBtZXRhTWFwID0gV2Vha01hcCAmJiBuZXcgV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBtZXRhTWFwO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgbmF0aXZlQ3JlYXRlID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2NyZWF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUNyZWF0ZTtcbiIsInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlS2V5cyA9IG92ZXJBcmcoT2JqZWN0LmtleXMsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5cztcbiIsIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBleGNlcHQgdGhhdCBpdCBpbmNsdWRlcyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUtleXNJbjtcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGVVdGlsO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0VG9TdHJpbmc7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgfVxuICAgIGluZGV4ID0gLTE7XG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgIH1cbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcbiAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyUmVzdDtcbiIsInZhciBiYXNlR2V0ID0gcmVxdWlyZSgnLi9fYmFzZUdldCcpLFxuICAgIGJhc2VTbGljZSA9IHJlcXVpcmUoJy4vX2Jhc2VTbGljZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIHBhcmVudCB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhdGggVGhlIHBhdGggdG8gZ2V0IHRoZSBwYXJlbnQgdmFsdWUgb2YuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcGFyZW50IHZhbHVlLlxuICovXG5mdW5jdGlvbiBwYXJlbnQob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBwYXRoLmxlbmd0aCA8IDIgPyBvYmplY3QgOiBiYXNlR2V0KG9iamVjdCwgYmFzZVNsaWNlKHBhdGgsIDAsIC0xKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiLyoqIFVzZWQgdG8gbG9va3VwIHVubWluaWZpZWQgZnVuY3Rpb24gbmFtZXMuICovXG52YXIgcmVhbE5hbWVzID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gcmVhbE5hbWVzO1xuIiwidmFyIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBSZW9yZGVyIGBhcnJheWAgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgaW5kZXhlcyB3aGVyZSB0aGUgZWxlbWVudCBhdFxuICogdGhlIGZpcnN0IGluZGV4IGlzIGFzc2lnbmVkIGFzIHRoZSBmaXJzdCBlbGVtZW50LCB0aGUgZWxlbWVudCBhdFxuICogdGhlIHNlY29uZCBpbmRleCBpcyBhc3NpZ25lZCBhcyB0aGUgc2Vjb25kIGVsZW1lbnQsIGFuZCBzbyBvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHJlb3JkZXIuXG4gKiBAcGFyYW0ge0FycmF5fSBpbmRleGVzIFRoZSBhcnJhbmdlZCBhcnJheSBpbmRleGVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIHJlb3JkZXIoYXJyYXksIGluZGV4ZXMpIHtcbiAgdmFyIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGxlbmd0aCA9IG5hdGl2ZU1pbihpbmRleGVzLmxlbmd0aCwgYXJyTGVuZ3RoKSxcbiAgICAgIG9sZEFycmF5ID0gY29weUFycmF5KGFycmF5KTtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICB2YXIgaW5kZXggPSBpbmRleGVzW2xlbmd0aF07XG4gICAgYXJyYXlbbGVuZ3RoXSA9IGlzSW5kZXgoaW5kZXgsIGFyckxlbmd0aCkgPyBvbGRBcnJheVtpbmRleF0gOiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlb3JkZXI7XG4iLCIvKiogVXNlZCBhcyB0aGUgaW50ZXJuYWwgYXJndW1lbnQgcGxhY2Vob2xkZXIuICovXG52YXIgUExBQ0VIT0xERVIgPSAnX19sb2Rhc2hfcGxhY2Vob2xkZXJfXyc7XG5cbi8qKlxuICogUmVwbGFjZXMgYWxsIGBwbGFjZWhvbGRlcmAgZWxlbWVudHMgaW4gYGFycmF5YCB3aXRoIGFuIGludGVybmFsIHBsYWNlaG9sZGVyXG4gKiBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiB0aGVpciBpbmRleGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHsqfSBwbGFjZWhvbGRlciBUaGUgcGxhY2Vob2xkZXIgdG8gcmVwbGFjZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2VIb2xkZXJzKGFycmF5LCBwbGFjZWhvbGRlcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmICh2YWx1ZSA9PT0gcGxhY2Vob2xkZXIgfHwgdmFsdWUgPT09IFBMQUNFSE9MREVSKSB7XG4gICAgICBhcnJheVtpbmRleF0gPSBQTEFDRUhPTERFUjtcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcGxhY2VIb2xkZXJzO1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxubW9kdWxlLmV4cG9ydHMgPSByb290O1xuIiwiLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIEFkZHMgYHZhbHVlYCB0byB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGFkZFxuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAYWxpYXMgcHVzaFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2FjaGUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVBZGQodmFsdWUpIHtcbiAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVBZGQ7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVIYXM7XG4iLCJ2YXIgYmFzZVNldERhdGEgPSByZXF1aXJlKCcuL19iYXNlU2V0RGF0YScpLFxuICAgIHNob3J0T3V0ID0gcmVxdWlyZSgnLi9fc2hvcnRPdXQnKTtcblxuLyoqXG4gKiBTZXRzIG1ldGFkYXRhIGZvciBgZnVuY2AuXG4gKlxuICogKipOb3RlOioqIElmIHRoaXMgZnVuY3Rpb24gYmVjb21lcyBob3QsIGkuZS4gaXMgaW52b2tlZCBhIGxvdCBpbiBhIHNob3J0XG4gKiBwZXJpb2Qgb2YgdGltZSwgaXQgd2lsbCB0cmlwIGl0cyBicmVha2VyIGFuZCB0cmFuc2l0aW9uIHRvIGFuIGlkZW50aXR5XG4gKiBmdW5jdGlvbiB0byBhdm9pZCBnYXJiYWdlIGNvbGxlY3Rpb24gcGF1c2VzIGluIFY4LiBTZWVcbiAqIFtWOCBpc3N1ZSAyMDcwXShodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0yMDcwKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXNzb2NpYXRlIG1ldGFkYXRhIHdpdGguXG4gKiBAcGFyYW0geyp9IGRhdGEgVGhlIG1ldGFkYXRhLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldERhdGEgPSBzaG9ydE91dChiYXNlU2V0RGF0YSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0RGF0YTtcbiIsIi8qKlxuICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9BcnJheTtcbiIsInZhciBiYXNlU2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlU2V0VG9TdHJpbmcnKSxcbiAgICBzaG9ydE91dCA9IHJlcXVpcmUoJy4vX3Nob3J0T3V0Jyk7XG5cbi8qKlxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBzZXRUb1N0cmluZyA9IHNob3J0T3V0KGJhc2VTZXRUb1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9TdHJpbmc7XG4iLCJ2YXIgZ2V0V3JhcERldGFpbHMgPSByZXF1aXJlKCcuL19nZXRXcmFwRGV0YWlscycpLFxuICAgIGluc2VydFdyYXBEZXRhaWxzID0gcmVxdWlyZSgnLi9faW5zZXJ0V3JhcERldGFpbHMnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyksXG4gICAgdXBkYXRlV3JhcERldGFpbHMgPSByZXF1aXJlKCcuL191cGRhdGVXcmFwRGV0YWlscycpO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGB3cmFwcGVyYCB0byBtaW1pYyB0aGUgc291cmNlIG9mIGByZWZlcmVuY2VgXG4gKiB3aXRoIHdyYXBwZXIgZGV0YWlscyBpbiBhIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgc291cmNlIGJvZHkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHdyYXBwZXIgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlZmVyZW5jZSBUaGUgcmVmZXJlbmNlIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgd3JhcHBlcmAuXG4gKi9cbmZ1bmN0aW9uIHNldFdyYXBUb1N0cmluZyh3cmFwcGVyLCByZWZlcmVuY2UsIGJpdG1hc2spIHtcbiAgdmFyIHNvdXJjZSA9IChyZWZlcmVuY2UgKyAnJyk7XG4gIHJldHVybiBzZXRUb1N0cmluZyh3cmFwcGVyLCBpbnNlcnRXcmFwRGV0YWlscyhzb3VyY2UsIHVwZGF0ZVdyYXBEZXRhaWxzKGdldFdyYXBEZXRhaWxzKHNvdXJjZSksIGJpdG1hc2spKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0V3JhcFRvU3RyaW5nO1xuIiwiLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xudmFyIEhPVF9DT1VOVCA9IDgwMCxcbiAgICBIT1RfU1BBTiA9IDE2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAqIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgdmFyIGNvdW50ID0gMCxcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3J0T3V0O1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIFN0YWNrXG4gKi9cbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrQ2xlYXI7XG4iLCIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgcmVzdWx0ID0gZGF0YVsnZGVsZXRlJ10oa2V5KTtcblxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tEZWxldGU7XG4iLCIvKipcbiAqIEdldHMgdGhlIHN0YWNrIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzdGFja0dldChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tHZXQ7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBhIHN0YWNrIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrSGFzO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBzdGFjayBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTGlzdENhY2hlKSB7XG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcbiAgICBpZiAoIU1hcCB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XG4gICAgICBwYWlycy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlycyk7XG4gIH1cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tTZXQ7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5pbmRleE9mYCB3aGljaCBwZXJmb3JtcyBzdHJpY3QgZXF1YWxpdHlcbiAqIGNvbXBhcmlzb25zIG9mIHZhbHVlcywgaS5lLiBgPT09YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gIHZhciBpbmRleCA9IGZyb21JbmRleCAtIDEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoYXJyYXlbaW5kZXhdID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaWN0SW5kZXhPZjtcbiIsInZhciBhc2NpaVRvQXJyYXkgPSByZXF1aXJlKCcuL19hc2NpaVRvQXJyYXknKSxcbiAgICBoYXNVbmljb2RlID0gcmVxdWlyZSgnLi9faGFzVW5pY29kZScpLFxuICAgIHVuaWNvZGVUb0FycmF5ID0gcmVxdWlyZSgnLi9fdW5pY29kZVRvQXJyYXknKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gc3RyaW5nVG9BcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIGhhc1VuaWNvZGUoc3RyaW5nKVxuICAgID8gdW5pY29kZVRvQXJyYXkoc3RyaW5nKVxuICAgIDogYXNjaWlUb0FycmF5KHN0cmluZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nVG9BcnJheTtcbiIsInZhciBtZW1vaXplQ2FwcGVkID0gcmVxdWlyZSgnLi9fbWVtb2l6ZUNhcHBlZCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVQcm9wTmFtZSA9IC9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IG1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XG4gICAgcmVzdWx0LnB1c2goJycpO1xuICB9XG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcbiAgICByZXN1bHQucHVzaChxdW90ZSA/IHN1YlN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nVG9QYXRoO1xuIiwidmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcga2V5IGlmIGl0J3Mgbm90IGEgc3RyaW5nIG9yIHN5bWJvbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtzdHJpbmd8c3ltYm9sfSBSZXR1cm5zIHRoZSBrZXkuXG4gKi9cbmZ1bmN0aW9uIHRvS2V5KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0tleTtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1NvdXJjZTtcbiIsIi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjaGFyYWN0ZXIgY2xhc3Nlcy4gKi9cbnZhciByc0FzdHJhbFJhbmdlID0gJ1xcXFx1ZDgwMC1cXFxcdWRmZmYnLFxuICAgIHJzQ29tYm9NYXJrc1JhbmdlID0gJ1xcXFx1MDMwMC1cXFxcdTAzNmYnLFxuICAgIHJlQ29tYm9IYWxmTWFya3NSYW5nZSA9ICdcXFxcdWZlMjAtXFxcXHVmZTJmJyxcbiAgICByc0NvbWJvU3ltYm9sc1JhbmdlID0gJ1xcXFx1MjBkMC1cXFxcdTIwZmYnLFxuICAgIHJzQ29tYm9SYW5nZSA9IHJzQ29tYm9NYXJrc1JhbmdlICsgcmVDb21ib0hhbGZNYXJrc1JhbmdlICsgcnNDb21ib1N5bWJvbHNSYW5nZSxcbiAgICByc1ZhclJhbmdlID0gJ1xcXFx1ZmUwZVxcXFx1ZmUwZic7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjYXB0dXJlIGdyb3Vwcy4gKi9cbnZhciByc0FzdHJhbCA9ICdbJyArIHJzQXN0cmFsUmFuZ2UgKyAnXScsXG4gICAgcnNDb21ibyA9ICdbJyArIHJzQ29tYm9SYW5nZSArICddJyxcbiAgICByc0ZpdHogPSAnXFxcXHVkODNjW1xcXFx1ZGZmYi1cXFxcdWRmZmZdJyxcbiAgICByc01vZGlmaWVyID0gJyg/OicgKyByc0NvbWJvICsgJ3wnICsgcnNGaXR6ICsgJyknLFxuICAgIHJzTm9uQXN0cmFsID0gJ1teJyArIHJzQXN0cmFsUmFuZ2UgKyAnXScsXG4gICAgcnNSZWdpb25hbCA9ICcoPzpcXFxcdWQ4M2NbXFxcXHVkZGU2LVxcXFx1ZGRmZl0pezJ9JyxcbiAgICByc1N1cnJQYWlyID0gJ1tcXFxcdWQ4MDAtXFxcXHVkYmZmXVtcXFxcdWRjMDAtXFxcXHVkZmZmXScsXG4gICAgcnNaV0ogPSAnXFxcXHUyMDBkJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIHJlZ2V4ZXMuICovXG52YXIgcmVPcHRNb2QgPSByc01vZGlmaWVyICsgJz8nLFxuICAgIHJzT3B0VmFyID0gJ1snICsgcnNWYXJSYW5nZSArICddPycsXG4gICAgcnNPcHRKb2luID0gJyg/OicgKyByc1pXSiArICcoPzonICsgW3JzTm9uQXN0cmFsLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyXS5qb2luKCd8JykgKyAnKScgKyByc09wdFZhciArIHJlT3B0TW9kICsgJykqJyxcbiAgICByc1NlcSA9IHJzT3B0VmFyICsgcmVPcHRNb2QgKyByc09wdEpvaW4sXG4gICAgcnNTeW1ib2wgPSAnKD86JyArIFtyc05vbkFzdHJhbCArIHJzQ29tYm8gKyAnPycsIHJzQ29tYm8sIHJzUmVnaW9uYWwsIHJzU3VyclBhaXIsIHJzQXN0cmFsXS5qb2luKCd8JykgKyAnKSc7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIFtzdHJpbmcgc3ltYm9sc10oaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtdW5pY29kZSkuICovXG52YXIgcmVVbmljb2RlID0gUmVnRXhwKHJzRml0eiArICcoPz0nICsgcnNGaXR6ICsgJyl8JyArIHJzU3ltYm9sICsgcnNTZXEsICdnJyk7XG5cbi8qKlxuICogQ29udmVydHMgYSBVbmljb2RlIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiB1bmljb2RlVG9BcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5tYXRjaChyZVVuaWNvZGUpIHx8IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHVuaWNvZGVUb0FycmF5O1xuIiwidmFyIGFycmF5RWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5RWFjaCcpLFxuICAgIGFycmF5SW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfQ1VSUllfRkxBRyA9IDgsXG4gICAgV1JBUF9DVVJSWV9SSUdIVF9GTEFHID0gMTYsXG4gICAgV1JBUF9QQVJUSUFMX0ZMQUcgPSAzMixcbiAgICBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyA9IDY0LFxuICAgIFdSQVBfQVJZX0ZMQUcgPSAxMjgsXG4gICAgV1JBUF9SRUFSR19GTEFHID0gMjU2LFxuICAgIFdSQVBfRkxJUF9GTEFHID0gNTEyO1xuXG4vKiogVXNlZCB0byBhc3NvY2lhdGUgd3JhcCBtZXRob2RzIHdpdGggdGhlaXIgYml0IGZsYWdzLiAqL1xudmFyIHdyYXBGbGFncyA9IFtcbiAgWydhcnknLCBXUkFQX0FSWV9GTEFHXSxcbiAgWydiaW5kJywgV1JBUF9CSU5EX0ZMQUddLFxuICBbJ2JpbmRLZXknLCBXUkFQX0JJTkRfS0VZX0ZMQUddLFxuICBbJ2N1cnJ5JywgV1JBUF9DVVJSWV9GTEFHXSxcbiAgWydjdXJyeVJpZ2h0JywgV1JBUF9DVVJSWV9SSUdIVF9GTEFHXSxcbiAgWydmbGlwJywgV1JBUF9GTElQX0ZMQUddLFxuICBbJ3BhcnRpYWwnLCBXUkFQX1BBUlRJQUxfRkxBR10sXG4gIFsncGFydGlhbFJpZ2h0JywgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUddLFxuICBbJ3JlYXJnJywgV1JBUF9SRUFSR19GTEFHXVxuXTtcblxuLyoqXG4gKiBVcGRhdGVzIHdyYXBwZXIgYGRldGFpbHNgIGJhc2VkIG9uIGBiaXRtYXNrYCBmbGFncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybnMge0FycmF5fSBkZXRhaWxzIFRoZSBkZXRhaWxzIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGRldGFpbHNgLlxuICovXG5mdW5jdGlvbiB1cGRhdGVXcmFwRGV0YWlscyhkZXRhaWxzLCBiaXRtYXNrKSB7XG4gIGFycmF5RWFjaCh3cmFwRmxhZ3MsIGZ1bmN0aW9uKHBhaXIpIHtcbiAgICB2YXIgdmFsdWUgPSAnXy4nICsgcGFpclswXTtcbiAgICBpZiAoKGJpdG1hc2sgJiBwYWlyWzFdKSAmJiAhYXJyYXlJbmNsdWRlcyhkZXRhaWxzLCB2YWx1ZSkpIHtcbiAgICAgIGRldGFpbHMucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRldGFpbHMuc29ydCgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHVwZGF0ZVdyYXBEZXRhaWxzO1xuIiwidmFyIExhenlXcmFwcGVyID0gcmVxdWlyZSgnLi9fTGF6eVdyYXBwZXInKSxcbiAgICBMb2Rhc2hXcmFwcGVyID0gcmVxdWlyZSgnLi9fTG9kYXNoV3JhcHBlcicpLFxuICAgIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgd3JhcHBlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSB3cmFwcGVyIFRoZSB3cmFwcGVyIHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHdyYXBwZXIuXG4gKi9cbmZ1bmN0aW9uIHdyYXBwZXJDbG9uZSh3cmFwcGVyKSB7XG4gIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpIHtcbiAgICByZXR1cm4gd3JhcHBlci5jbG9uZSgpO1xuICB9XG4gIHZhciByZXN1bHQgPSBuZXcgTG9kYXNoV3JhcHBlcih3cmFwcGVyLl9fd3JhcHBlZF9fLCB3cmFwcGVyLl9fY2hhaW5fXyk7XG4gIHJlc3VsdC5fX2FjdGlvbnNfXyA9IGNvcHlBcnJheSh3cmFwcGVyLl9fYWN0aW9uc19fKTtcbiAgcmVzdWx0Ll9faW5kZXhfXyAgPSB3cmFwcGVyLl9faW5kZXhfXztcbiAgcmVzdWx0Ll9fdmFsdWVzX18gPSB3cmFwcGVyLl9fdmFsdWVzX187XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd3JhcHBlckNsb25lO1xuIiwidmFyIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGNyZWF0ZUFzc2lnbmVyID0gcmVxdWlyZSgnLi9fY3JlYXRlQXNzaWduZXInKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2Ygc291cmNlIG9iamVjdHMgdG8gdGhlXG4gKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC5cbiAqIFN1YnNlcXVlbnQgc291cmNlcyBvdmVyd3JpdGUgcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgc291cmNlcy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YCBhbmQgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BPYmplY3QuYXNzaWduYF0oaHR0cHM6Ly9tZG4uaW8vT2JqZWN0L2Fzc2lnbikuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEwLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBzZWUgXy5hc3NpZ25JblxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogZnVuY3Rpb24gQmFyKCkge1xuICogICB0aGlzLmMgPSAzO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYiA9IDI7XG4gKiBCYXIucHJvdG90eXBlLmQgPSA0O1xuICpcbiAqIF8uYXNzaWduKHsgJ2EnOiAwIH0sIG5ldyBGb28sIG5ldyBCYXIpO1xuICogLy8gPT4geyAnYSc6IDEsICdjJzogMyB9XG4gKi9cbnZhciBhc3NpZ24gPSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSkge1xuICBpZiAoaXNQcm90b3R5cGUoc291cmNlKSB8fCBpc0FycmF5TGlrZShzb3VyY2UpKSB7XG4gICAgY29weU9iamVjdChzb3VyY2UsIGtleXMoc291cmNlKSwgb2JqZWN0KTtcbiAgICByZXR1cm47XG4gIH1cbiAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICB9XG4gIH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnbjtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL3RvSW50ZWdlcicpO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgLCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBhbmQgYXJndW1lbnRzXG4gKiBvZiB0aGUgY3JlYXRlZCBmdW5jdGlvbiwgd2hpbGUgaXQncyBjYWxsZWQgbGVzcyB0aGFuIGBuYCB0aW1lcy4gU3Vic2VxdWVudFxuICogY2FsbHMgdG8gdGhlIGNyZWF0ZWQgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgIGludm9jYXRpb24uXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGNhbGxzIGF0IHdoaWNoIGBmdW5jYCBpcyBubyBsb25nZXIgaW52b2tlZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmVzdHJpY3RlZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIF8uYmVmb3JlKDUsIGFkZENvbnRhY3RUb0xpc3QpKTtcbiAqIC8vID0+IEFsbG93cyBhZGRpbmcgdXAgdG8gNCBjb250YWN0cyB0byB0aGUgbGlzdC5cbiAqL1xuZnVuY3Rpb24gYmVmb3JlKG4sIGZ1bmMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgbiA9IHRvSW50ZWdlcihuKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGlmICgtLW4gPiAwKSB7XG4gICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIGlmIChuIDw9IDEpIHtcbiAgICAgIGZ1bmMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmVmb3JlO1xuIiwidmFyIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBjcmVhdGVXcmFwID0gcmVxdWlyZSgnLi9fY3JlYXRlV3JhcCcpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlcGxhY2VIb2xkZXJzID0gcmVxdWlyZSgnLi9fcmVwbGFjZUhvbGRlcnMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzI7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgXG4gKiBhbmQgYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAqXG4gKiBUaGUgYF8uYmluZC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljIGJ1aWxkcyxcbiAqIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIG5hdGl2ZSBgRnVuY3Rpb24jYmluZGAsIHRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiXG4gKiBwcm9wZXJ0eSBvZiBib3VuZCBmdW5jdGlvbnMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBiaW5kLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0gey4uLip9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJvdW5kIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBncmVldChncmVldGluZywgcHVuY3R1YXRpb24pIHtcbiAqICAgcmV0dXJuIGdyZWV0aW5nICsgJyAnICsgdGhpcy51c2VyICsgcHVuY3R1YXRpb247XG4gKiB9XG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ3VzZXInOiAnZnJlZCcgfTtcbiAqXG4gKiB2YXIgYm91bmQgPSBfLmJpbmQoZ3JlZXQsIG9iamVjdCwgJ2hpJyk7XG4gKiBib3VuZCgnIScpO1xuICogLy8gPT4gJ2hpIGZyZWQhJ1xuICpcbiAqIC8vIEJvdW5kIHdpdGggcGxhY2Vob2xkZXJzLlxuICogdmFyIGJvdW5kID0gXy5iaW5kKGdyZWV0LCBvYmplY3QsIF8sICchJyk7XG4gKiBib3VuZCgnaGknKTtcbiAqIC8vID0+ICdoaSBmcmVkISdcbiAqL1xudmFyIGJpbmQgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCB0aGlzQXJnLCBwYXJ0aWFscykge1xuICB2YXIgYml0bWFzayA9IFdSQVBfQklORF9GTEFHO1xuICBpZiAocGFydGlhbHMubGVuZ3RoKSB7XG4gICAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgZ2V0SG9sZGVyKGJpbmQpKTtcbiAgICBiaXRtYXNrIHw9IFdSQVBfUEFSVElBTF9GTEFHO1xuICB9XG4gIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzKTtcbn0pO1xuXG4vLyBBc3NpZ24gZGVmYXVsdCBwbGFjZWhvbGRlcnMuXG5iaW5kLnBsYWNlaG9sZGVyID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gYmluZDtcbiIsInZhciBiYXNlQ2xvbmUgPSByZXF1aXJlKCcuL19iYXNlQ2xvbmUnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzaGFsbG93IGNsb25lIG9mIGB2YWx1ZWAuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb24gdGhlXG4gKiBbc3RydWN0dXJlZCBjbG9uZSBhbGdvcml0aG1dKGh0dHBzOi8vbWRuLmlvL1N0cnVjdHVyZWRfY2xvbmVfYWxnb3JpdGhtKVxuICogYW5kIHN1cHBvcnRzIGNsb25pbmcgYXJyYXlzLCBhcnJheSBidWZmZXJzLCBib29sZWFucywgZGF0ZSBvYmplY3RzLCBtYXBzLFxuICogbnVtYmVycywgYE9iamVjdGAgb2JqZWN0cywgcmVnZXhlcywgc2V0cywgc3RyaW5ncywgc3ltYm9scywgYW5kIHR5cGVkXG4gKiBhcnJheXMuIFRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9mIGBhcmd1bWVudHNgIG9iamVjdHMgYXJlIGNsb25lZFxuICogYXMgcGxhaW4gb2JqZWN0cy4gQW4gZW1wdHkgb2JqZWN0IGlzIHJldHVybmVkIGZvciB1bmNsb25lYWJsZSB2YWx1ZXMgc3VjaFxuICogYXMgZXJyb3Igb2JqZWN0cywgZnVuY3Rpb25zLCBET00gbm9kZXMsIGFuZCBXZWFrTWFwcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgY2xvbmVkIHZhbHVlLlxuICogQHNlZSBfLmNsb25lRGVlcFxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFt7ICdhJzogMSB9LCB7ICdiJzogMiB9XTtcbiAqXG4gKiB2YXIgc2hhbGxvdyA9IF8uY2xvbmUob2JqZWN0cyk7XG4gKiBjb25zb2xlLmxvZyhzaGFsbG93WzBdID09PSBvYmplY3RzWzBdKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gY2xvbmUodmFsdWUpIHtcbiAgcmV0dXJuIGJhc2VDbG9uZSh2YWx1ZSwgQ0xPTkVfU1lNQk9MU19GTEFHKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZTtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnN0YW50O1xuIiwidmFyIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBpc0l0ZXJhdGVlQ2FsbCA9IHJlcXVpcmUoJy4vX2lzSXRlcmF0ZWVDYWxsJyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBc3NpZ25zIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2Ygc291cmNlXG4gKiBvYmplY3RzIHRvIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QgZm9yIGFsbCBkZXN0aW5hdGlvbiBwcm9wZXJ0aWVzIHRoYXRcbiAqIHJlc29sdmUgdG8gYHVuZGVmaW5lZGAuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC5cbiAqIE9uY2UgYSBwcm9wZXJ0eSBpcyBzZXQsIGFkZGl0aW9uYWwgdmFsdWVzIG9mIHRoZSBzYW1lIHByb3BlcnR5IGFyZSBpZ25vcmVkLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBzZWUgXy5kZWZhdWx0c0RlZXBcbiAqIEBleGFtcGxlXG4gKlxuICogXy5kZWZhdWx0cyh7ICdhJzogMSB9LCB7ICdiJzogMiB9LCB7ICdhJzogMyB9KTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICovXG52YXIgZGVmYXVsdHMgPSBiYXNlUmVzdChmdW5jdGlvbihvYmplY3QsIHNvdXJjZXMpIHtcbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gLTE7XG4gIHZhciBsZW5ndGggPSBzb3VyY2VzLmxlbmd0aDtcbiAgdmFyIGd1YXJkID0gbGVuZ3RoID4gMiA/IHNvdXJjZXNbMl0gOiB1bmRlZmluZWQ7XG5cbiAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHNvdXJjZXNbMF0sIHNvdXJjZXNbMV0sIGd1YXJkKSkge1xuICAgIGxlbmd0aCA9IDE7XG4gIH1cblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzW2luZGV4XTtcbiAgICB2YXIgcHJvcHMgPSBrZXlzSW4oc291cmNlKTtcbiAgICB2YXIgcHJvcHNJbmRleCA9IC0xO1xuICAgIHZhciBwcm9wc0xlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICAgIHdoaWxlICgrK3Byb3BzSW5kZXggPCBwcm9wc0xlbmd0aCkge1xuICAgICAgdmFyIGtleSA9IHByb3BzW3Byb3BzSW5kZXhdO1xuICAgICAgdmFyIHZhbHVlID0gb2JqZWN0W2tleV07XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgKGVxKHZhbHVlLCBvYmplY3RQcm90b1trZXldKSAmJiAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSB7XG4gICAgICAgIG9iamVjdFtrZXldID0gc291cmNlW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iamVjdDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRzO1xuIiwidmFyIGJhc2VEaWZmZXJlbmNlID0gcmVxdWlyZSgnLi9fYmFzZURpZmZlcmVuY2UnKSxcbiAgICBiYXNlRmxhdHRlbiA9IHJlcXVpcmUoJy4vX2Jhc2VGbGF0dGVuJyksXG4gICAgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGlzQXJyYXlMaWtlT2JqZWN0ID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZU9iamVjdCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgYGFycmF5YCB2YWx1ZXMgbm90IGluY2x1ZGVkIGluIHRoZSBvdGhlciBnaXZlbiBhcnJheXNcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIFRoZSBvcmRlciBhbmQgcmVmZXJlbmNlcyBvZiByZXN1bHQgdmFsdWVzIGFyZVxuICogZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuXG4gKlxuICogKipOb3RlOioqIFVubGlrZSBgXy5wdWxsQWxsYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsuLi5BcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICogQHNlZSBfLndpdGhvdXQsIF8ueG9yXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGlmZmVyZW5jZShbMiwgMV0sIFsyLCAzXSk7XG4gKiAvLyA9PiBbMV1cbiAqL1xudmFyIGRpZmZlcmVuY2UgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheSwgdmFsdWVzKSB7XG4gIHJldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSlcbiAgICA/IGJhc2VEaWZmZXJlbmNlKGFycmF5LCBiYXNlRmxhdHRlbih2YWx1ZXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSlcbiAgICA6IFtdO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGlmZmVyZW5jZTtcbiIsIi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxO1xuIiwidmFyIGVzY2FwZUh0bWxDaGFyID0gcmVxdWlyZSgnLi9fZXNjYXBlSHRtbENoYXInKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggSFRNTCBlbnRpdGllcyBhbmQgSFRNTCBjaGFyYWN0ZXJzLiAqL1xudmFyIHJlVW5lc2NhcGVkSHRtbCA9IC9bJjw+XCInXS9nLFxuICAgIHJlSGFzVW5lc2NhcGVkSHRtbCA9IFJlZ0V4cChyZVVuZXNjYXBlZEh0bWwuc291cmNlKTtcblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgY2hhcmFjdGVycyBcIiZcIiwgXCI8XCIsIFwiPlwiLCAnXCInLCBhbmQgXCInXCIgaW4gYHN0cmluZ2AgdG8gdGhlaXJcbiAqIGNvcnJlc3BvbmRpbmcgSFRNTCBlbnRpdGllcy5cbiAqXG4gKiAqKk5vdGU6KiogTm8gb3RoZXIgY2hhcmFjdGVycyBhcmUgZXNjYXBlZC4gVG8gZXNjYXBlIGFkZGl0aW9uYWxcbiAqIGNoYXJhY3RlcnMgdXNlIGEgdGhpcmQtcGFydHkgbGlicmFyeSBsaWtlIFtfaGVfXShodHRwczovL210aHMuYmUvaGUpLlxuICpcbiAqIFRob3VnaCB0aGUgXCI+XCIgY2hhcmFjdGVyIGlzIGVzY2FwZWQgZm9yIHN5bW1ldHJ5LCBjaGFyYWN0ZXJzIGxpa2VcbiAqIFwiPlwiIGFuZCBcIi9cIiBkb24ndCBuZWVkIGVzY2FwaW5nIGluIEhUTUwgYW5kIGhhdmUgbm8gc3BlY2lhbCBtZWFuaW5nXG4gKiB1bmxlc3MgdGhleSdyZSBwYXJ0IG9mIGEgdGFnIG9yIHVucXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZS4gU2VlXG4gKiBbTWF0aGlhcyBCeW5lbnMncyBhcnRpY2xlXShodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvYW1iaWd1b3VzLWFtcGVyc2FuZHMpXG4gKiAodW5kZXIgXCJzZW1pLXJlbGF0ZWQgZnVuIGZhY3RcIikgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBXaGVuIHdvcmtpbmcgd2l0aCBIVE1MIHlvdSBzaG91bGQgYWx3YXlzXG4gKiBbcXVvdGUgYXR0cmlidXRlIHZhbHVlc10oaHR0cDovL3dvbmtvLmNvbS9wb3N0L2h0bWwtZXNjYXBpbmcpIHRvIHJlZHVjZVxuICogWFNTIHZlY3RvcnMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gZXNjYXBlLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZXNjYXBlKCdmcmVkLCBiYXJuZXksICYgcGViYmxlcycpO1xuICogLy8gPT4gJ2ZyZWQsIGJhcm5leSwgJmFtcDsgcGViYmxlcydcbiAqL1xuZnVuY3Rpb24gZXNjYXBlKHN0cmluZykge1xuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICByZXR1cm4gKHN0cmluZyAmJiByZUhhc1VuZXNjYXBlZEh0bWwudGVzdChzdHJpbmcpKVxuICAgID8gc3RyaW5nLnJlcGxhY2UocmVVbmVzY2FwZWRIdG1sLCBlc2NhcGVIdG1sQ2hhcilcbiAgICA6IHN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlc2NhcGU7XG4iLCJ2YXIgY3JlYXRlRmluZCA9IHJlcXVpcmUoJy4vX2NyZWF0ZUZpbmQnKSxcbiAgICBmaW5kSW5kZXggPSByZXF1aXJlKCcuL2ZpbmRJbmRleCcpO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gLCByZXR1cm5pbmcgdGhlIGZpcnN0IGVsZW1lbnRcbiAqIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hdGNoZWQgZWxlbWVudCwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHVzZXJzID0gW1xuICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IHRydWUgfVxuICogXTtcbiAqXG4gKiBfLmZpbmQodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWdlIDwgNDA7IH0pO1xuICogLy8gPT4gb2JqZWN0IGZvciAnYmFybmV5J1xuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmQodXNlcnMsIHsgJ2FnZSc6IDEsICdhY3RpdmUnOiB0cnVlIH0pO1xuICogLy8gPT4gb2JqZWN0IGZvciAncGViYmxlcydcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmQodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IG9iamVjdCBmb3IgJ2ZyZWQnXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmQodXNlcnMsICdhY3RpdmUnKTtcbiAqIC8vID0+IG9iamVjdCBmb3IgJ2Jhcm5leSdcbiAqL1xudmFyIGZpbmQgPSBjcmVhdGVGaW5kKGZpbmRJbmRleCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmluZDtcbiIsInZhciBiYXNlRmluZEluZGV4ID0gcmVxdWlyZSgnLi9fYmFzZUZpbmRJbmRleCcpLFxuICAgIGJhc2VJdGVyYXRlZSA9IHJlcXVpcmUoJy4vX2Jhc2VJdGVyYXRlZScpLFxuICAgIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vdG9JbnRlZ2VyJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZpbmRgIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdFxuICogZWxlbWVudCBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgaW5zdGVhZCBvZiB0aGUgZWxlbWVudCBpdHNlbGYuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAxLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmb3VuZCBlbGVtZW50LCBlbHNlIGAtMWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogdHJ1ZSB9XG4gKiBdO1xuICpcbiAqIF8uZmluZEluZGV4KHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLnVzZXIgPT0gJ2Jhcm5leSc7IH0pO1xuICogLy8gPT4gMFxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmRJbmRleCh1c2VycywgeyAndXNlcic6ICdmcmVkJywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICogLy8gPT4gMVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmluZEluZGV4KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gKiAvLyA9PiAwXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmRJbmRleCh1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gMlxuICovXG5mdW5jdGlvbiBmaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSwgZnJvbUluZGV4KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgdmFyIGluZGV4ID0gZnJvbUluZGV4ID09IG51bGwgPyAwIDogdG9JbnRlZ2VyKGZyb21JbmRleCk7XG4gIGlmIChpbmRleCA8IDApIHtcbiAgICBpbmRleCA9IG5hdGl2ZU1heChsZW5ndGggKyBpbmRleCwgMCk7XG4gIH1cbiAgcmV0dXJuIGJhc2VGaW5kSW5kZXgoYXJyYXksIGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCBpbmRleCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmluZEluZGV4O1xuIiwidmFyIGJhc2VGbGF0dGVuID0gcmVxdWlyZSgnLi9fYmFzZUZsYXR0ZW4nKTtcblxuLyoqXG4gKiBGbGF0dGVucyBgYXJyYXlgIGEgc2luZ2xlIGxldmVsIGRlZXAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5mbGF0dGVuKFsxLCBbMiwgWzMsIFs0XV0sIDVdXSk7XG4gKiAvLyA9PiBbMSwgMiwgWzMsIFs0XV0sIDVdXG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYmFzZUZsYXR0ZW4oYXJyYXksIDEpIDogW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdHRlbjtcbiIsInZhciBhcnJheUVhY2ggPSByZXF1aXJlKCcuL19hcnJheUVhY2gnKSxcbiAgICBiYXNlRWFjaCA9IHJlcXVpcmUoJy4vX2Jhc2VFYWNoJyksXG4gICAgY2FzdEZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fY2FzdEZ1bmN0aW9uJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gIGFuZCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggZWxlbWVudC5cbiAqIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gKiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gKlxuICogKipOb3RlOioqIEFzIHdpdGggb3RoZXIgXCJDb2xsZWN0aW9uc1wiIG1ldGhvZHMsIG9iamVjdHMgd2l0aCBhIFwibGVuZ3RoXCJcbiAqIHByb3BlcnR5IGFyZSBpdGVyYXRlZCBsaWtlIGFycmF5cy4gVG8gYXZvaWQgdGhpcyBiZWhhdmlvciB1c2UgYF8uZm9ySW5gXG4gKiBvciBgXy5mb3JPd25gIGZvciBvYmplY3QgaXRlcmF0aW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBhbGlhcyBlYWNoXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAqIEBzZWUgXy5mb3JFYWNoUmlnaHRcbiAqIEBleGFtcGxlXG4gKlxuICogXy5mb3JFYWNoKFsxLCAyXSwgZnVuY3Rpb24odmFsdWUpIHtcbiAqICAgY29uc29sZS5sb2codmFsdWUpO1xuICogfSk7XG4gKiAvLyA9PiBMb2dzIGAxYCB0aGVuIGAyYC5cbiAqXG4gKiBfLmZvckVhY2goeyAnYSc6IDEsICdiJzogMiB9LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gKiB9KTtcbiAqIC8vID0+IExvZ3MgJ2EnIHRoZW4gJ2InIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICovXG5mdW5jdGlvbiBmb3JFYWNoKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RWFjaCA6IGJhc2VFYWNoO1xuICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBjYXN0RnVuY3Rpb24oaXRlcmF0ZWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmb3JFYWNoO1xuIiwidmFyIGJhc2VGb3JPd24gPSByZXF1aXJlKCcuL19iYXNlRm9yT3duJyksXG4gICAgY2FzdEZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fY2FzdEZ1bmN0aW9uJyk7XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBhbiBvYmplY3QgYW5kXG4gKiBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggcHJvcGVydHkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAqIGFyZ3VtZW50czogKHZhbHVlLCBrZXksIG9iamVjdCkuIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb25cbiAqIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjMuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBzZWUgXy5mb3JPd25SaWdodFxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmZvck93bihuZXcgRm9vLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gKiB9KTtcbiAqIC8vID0+IExvZ3MgJ2EnIHRoZW4gJ2InIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICovXG5mdW5jdGlvbiBmb3JPd24ob2JqZWN0LCBpdGVyYXRlZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3JPd24ob2JqZWN0LCBjYXN0RnVuY3Rpb24oaXRlcmF0ZWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmb3JPd247XG4iLCJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIHRoZSByZXNvbHZlZCB2YWx1ZSBpc1xuICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjcuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGZvciBgdW5kZWZpbmVkYCByZXNvbHZlZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gKlxuICogXy5nZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsICdhLmIuYycsICdkZWZhdWx0Jyk7XG4gKiAvLyA9PiAnZGVmYXVsdCdcbiAqL1xuZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldDtcbiIsInZhciBiYXNlSGFzID0gcmVxdWlyZSgnLi9fYmFzZUhhcycpLFxuICAgIGhhc1BhdGggPSByZXF1aXJlKCcuL19oYXNQYXRoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBwcm9wZXJ0eSBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogeyAnYic6IDIgfSB9O1xuICogdmFyIG90aGVyID0gXy5jcmVhdGUoeyAnYSc6IF8uY3JlYXRlKHsgJ2InOiAyIH0pIH0pO1xuICpcbiAqIF8uaGFzKG9iamVjdCwgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhcyhvYmplY3QsICdhLmInKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhcyhvYmplY3QsIFsnYScsICdiJ10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzKG90aGVyLCAnYScpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaGFzKG9iamVjdCwgcGF0aCkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYgaGFzUGF0aChvYmplY3QsIHBhdGgsIGJhc2VIYXMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhcztcbiIsInZhciBiYXNlSGFzSW4gPSByZXF1aXJlKCcuL19iYXNlSGFzSW4nKSxcbiAgICBoYXNQYXRoID0gcmVxdWlyZSgnLi9faGFzUGF0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgcGF0aGAgaXMgYSBkaXJlY3Qgb3IgaW5oZXJpdGVkIHByb3BlcnR5IG9mIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IF8uY3JlYXRlKHsgJ2EnOiBfLmNyZWF0ZSh7ICdiJzogMiB9KSB9KTtcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EuYicpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2InKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGhhc0luKG9iamVjdCwgcGF0aCkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYgaGFzUGF0aChvYmplY3QsIHBhdGgsIGJhc2VIYXNJbik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzSW47XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuIiwidmFyIGJhc2VJbmRleE9mID0gcmVxdWlyZSgnLi9fYmFzZUluZGV4T2YnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc1N0cmluZyA9IHJlcXVpcmUoJy4vaXNTdHJpbmcnKSxcbiAgICB0b0ludGVnZXIgPSByZXF1aXJlKCcuL3RvSW50ZWdlcicpLFxuICAgIHZhbHVlcyA9IHJlcXVpcmUoJy4vdmFsdWVzJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiBgY29sbGVjdGlvbmAuIElmIGBjb2xsZWN0aW9uYCBpcyBhIHN0cmluZywgaXQnc1xuICogY2hlY2tlZCBmb3IgYSBzdWJzdHJpbmcgb2YgYHZhbHVlYCwgb3RoZXJ3aXNlXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogaXMgdXNlZCBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIElmIGBmcm9tSW5kZXhgIGlzIG5lZ2F0aXZlLCBpdCdzIHVzZWQgYXNcbiAqIHRoZSBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIGBjb2xsZWN0aW9uYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ucmVkdWNlYC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaW5jbHVkZXMoWzEsIDIsIDNdLCAxKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmluY2x1ZGVzKFsxLCAyLCAzXSwgMSwgMik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaW5jbHVkZXMoeyAnYSc6IDEsICdiJzogMiB9LCAxKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmluY2x1ZGVzKCdhYmNkJywgJ2JjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGluY2x1ZGVzKGNvbGxlY3Rpb24sIHZhbHVlLCBmcm9tSW5kZXgsIGd1YXJkKSB7XG4gIGNvbGxlY3Rpb24gPSBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSA/IGNvbGxlY3Rpb24gOiB2YWx1ZXMoY29sbGVjdGlvbik7XG4gIGZyb21JbmRleCA9IChmcm9tSW5kZXggJiYgIWd1YXJkKSA/IHRvSW50ZWdlcihmcm9tSW5kZXgpIDogMDtcblxuICB2YXIgbGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7XG4gIGlmIChmcm9tSW5kZXggPCAwKSB7XG4gICAgZnJvbUluZGV4ID0gbmF0aXZlTWF4KGxlbmd0aCArIGZyb21JbmRleCwgMCk7XG4gIH1cbiAgcmV0dXJuIGlzU3RyaW5nKGNvbGxlY3Rpb24pXG4gICAgPyAoZnJvbUluZGV4IDw9IGxlbmd0aCAmJiBjb2xsZWN0aW9uLmluZGV4T2YodmFsdWUsIGZyb21JbmRleCkgPiAtMSlcbiAgICA6ICghIWxlbmd0aCAmJiBiYXNlSW5kZXhPZihjb2xsZWN0aW9uLCB2YWx1ZSwgZnJvbUluZGV4KSA+IC0xKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbmNsdWRlcztcbiIsInZhciBhcHBseSA9IHJlcXVpcmUoJy4vX2FwcGx5JyksXG4gICAgYmFzZUVhY2ggPSByZXF1aXJlKCcuL19iYXNlRWFjaCcpLFxuICAgIGJhc2VJbnZva2UgPSByZXF1aXJlKCcuL19iYXNlSW52b2tlJyksXG4gICAgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIEludm9rZXMgdGhlIG1ldGhvZCBhdCBgcGF0aGAgb2YgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYCwgcmV0dXJuaW5nXG4gKiBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiBlYWNoIGludm9rZWQgbWV0aG9kLiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHNcbiAqIGFyZSBwcm92aWRlZCB0byBlYWNoIGludm9rZWQgbWV0aG9kLiBJZiBgcGF0aGAgaXMgYSBmdW5jdGlvbiwgaXQncyBpbnZva2VkXG4gKiBmb3IsIGFuZCBgdGhpc2AgYm91bmQgdG8sIGVhY2ggZWxlbWVudCBpbiBgY29sbGVjdGlvbmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb258c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBtZXRob2QgdG8gaW52b2tlIG9yXG4gKiAgdGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGVhY2ggbWV0aG9kIHdpdGguXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaW52b2tlTWFwKFtbNSwgMSwgN10sIFszLCAyLCAxXV0sICdzb3J0Jyk7XG4gKiAvLyA9PiBbWzEsIDUsIDddLCBbMSwgMiwgM11dXG4gKlxuICogXy5pbnZva2VNYXAoWzEyMywgNDU2XSwgU3RyaW5nLnByb3RvdHlwZS5zcGxpdCwgJycpO1xuICogLy8gPT4gW1snMScsICcyJywgJzMnXSwgWyc0JywgJzUnLCAnNiddXVxuICovXG52YXIgaW52b2tlTWFwID0gYmFzZVJlc3QoZnVuY3Rpb24oY29sbGVjdGlvbiwgcGF0aCwgYXJncykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGlzRnVuYyA9IHR5cGVvZiBwYXRoID09ICdmdW5jdGlvbicsXG4gICAgICByZXN1bHQgPSBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSA/IEFycmF5KGNvbGxlY3Rpb24ubGVuZ3RoKSA6IFtdO1xuXG4gIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gaXNGdW5jID8gYXBwbHkocGF0aCwgdmFsdWUsIGFyZ3MpIDogYmFzZUludm9rZSh2YWx1ZSwgcGF0aCwgYXJncyk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gaW52b2tlTWFwO1xuIiwidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheTtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlO1xuIiwidmFyIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc0FycmF5TGlrZWAgZXhjZXB0IHRoYXQgaXQgYWxzbyBjaGVja3MgaWYgYHZhbHVlYFxuICogaXMgYW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LWxpa2Ugb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZU9iamVjdDtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpLFxuICAgIHN0dWJGYWxzZSA9IHJlcXVpcmUoJy4vc3R1YkZhbHNlJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0J1ZmZlcjtcbiIsInZhciBiYXNlSXNEYXRlID0gcmVxdWlyZSgnLi9fYmFzZUlzRGF0ZScpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNEYXRlID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNEYXRlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRGF0ZWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZGF0ZSBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0RhdGUobmV3IERhdGUpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNEYXRlKCdNb24gQXByaWwgMjMgMjAxMicpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzRGF0ZSA9IG5vZGVJc0RhdGUgPyBiYXNlVW5hcnkobm9kZUlzRGF0ZSkgOiBiYXNlSXNEYXRlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRGF0ZTtcbiIsInZhciBiYXNlS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzJyksXG4gICAgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gZW1wdHkgb2JqZWN0LCBjb2xsZWN0aW9uLCBtYXAsIG9yIHNldC5cbiAqXG4gKiBPYmplY3RzIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBubyBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWRcbiAqIHByb3BlcnRpZXMuXG4gKlxuICogQXJyYXktbGlrZSB2YWx1ZXMgc3VjaCBhcyBgYXJndW1lbnRzYCBvYmplY3RzLCBhcnJheXMsIGJ1ZmZlcnMsIHN0cmluZ3MsIG9yXG4gKiBqUXVlcnktbGlrZSBjb2xsZWN0aW9ucyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgYSBgbGVuZ3RoYCBvZiBgMGAuXG4gKiBTaW1pbGFybHksIG1hcHMgYW5kIHNldHMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIGEgYHNpemVgIG9mIGAwYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBlbXB0eSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRW1wdHkobnVsbCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0VtcHR5KHRydWUpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbXB0eSgxKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRW1wdHkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0VtcHR5KHsgJ2EnOiAxIH0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiZcbiAgICAgIChpc0FycmF5KHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlLnNwbGljZSA9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIGlzQnVmZmVyKHZhbHVlKSB8fCBpc1R5cGVkQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSkpIHtcbiAgICByZXR1cm4gIXZhbHVlLmxlbmd0aDtcbiAgfVxuICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKTtcbiAgaWYgKHRhZyA9PSBtYXBUYWcgfHwgdGFnID09IHNldFRhZykge1xuICAgIHJldHVybiAhdmFsdWUuc2l6ZTtcbiAgfVxuICBpZiAoaXNQcm90b3R5cGUodmFsdWUpKSB7XG4gICAgcmV0dXJuICFiYXNlS2V5cyh2YWx1ZSkubGVuZ3RoO1xuICB9XG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRW1wdHk7XG4iLCJ2YXIgYmFzZUlzRXF1YWwgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbCcpO1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmVcbiAqIGVxdWl2YWxlbnQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIHN1cHBvcnRzIGNvbXBhcmluZyBhcnJheXMsIGFycmF5IGJ1ZmZlcnMsIGJvb2xlYW5zLFxuICogZGF0ZSBvYmplY3RzLCBlcnJvciBvYmplY3RzLCBtYXBzLCBudW1iZXJzLCBgT2JqZWN0YCBvYmplY3RzLCByZWdleGVzLFxuICogc2V0cywgc3RyaW5ncywgc3ltYm9scywgYW5kIHR5cGVkIGFycmF5cy4gYE9iamVjdGAgb2JqZWN0cyBhcmUgY29tcGFyZWRcbiAqIGJ5IHRoZWlyIG93biwgbm90IGluaGVyaXRlZCwgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLiBGdW5jdGlvbnMgYW5kIERPTVxuICogbm9kZXMgYXJlIGNvbXBhcmVkIGJ5IHN0cmljdCBlcXVhbGl0eSwgaS5lLiBgPT09YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5pc0VxdWFsKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIG9iamVjdCA9PT0gb3RoZXI7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0VxdWFsKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0VxdWFsO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGdW5jdGlvbjtcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xlbmd0aDtcbiIsInZhciBiYXNlSXNNYXAgPSByZXF1aXJlKCcuL19iYXNlSXNNYXAnKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzTWFwID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNNYXA7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBNYXBgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTWFwKG5ldyBNYXApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNNYXAobmV3IFdlYWtNYXApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzTWFwID0gbm9kZUlzTWFwID8gYmFzZVVuYXJ5KG5vZGVJc01hcCkgOiBiYXNlSXNNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNNYXA7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0TGlrZTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGdldFByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2dldFByb3RvdHlwZScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cbnZhciBvYmplY3RDdG9yU3RyaW5nID0gZnVuY1RvU3RyaW5nLmNhbGwoT2JqZWN0KTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgdGhhdCBpcywgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlXG4gKiBgT2JqZWN0YCBjb25zdHJ1Y3RvciBvciBvbmUgd2l0aCBhIGBbW1Byb3RvdHlwZV1dYCBvZiBgbnVsbGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjguMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogfVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChuZXcgRm9vKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdCh7ICd4JzogMCwgJ3knOiAwIH0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgfHwgYmFzZUdldFRhZyh2YWx1ZSkgIT0gb2JqZWN0VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwcm90byA9IGdldFByb3RvdHlwZSh2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmXG4gICAgZnVuY1RvU3RyaW5nLmNhbGwoQ3RvcikgPT0gb2JqZWN0Q3RvclN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1BsYWluT2JqZWN0O1xuIiwidmFyIGJhc2VJc1NldCA9IHJlcXVpcmUoJy4vX2Jhc2VJc1NldCcpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNTZXQgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1NldDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFNldGAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTZXQobmV3IFNldCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1NldChuZXcgV2Vha1NldCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNTZXQgPSBub2RlSXNTZXQgPyBiYXNlVW5hcnkobm9kZUlzU2V0KSA6IGJhc2VJc1NldDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1NldDtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTdHJpbmdgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzdHJpbmcsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N0cmluZygnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N0cmluZygxKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHxcbiAgICAoIWlzQXJyYXkodmFsdWUpICYmIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3RyaW5nVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N0cmluZztcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N5bWJvbDtcbiIsInZhciBiYXNlSXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fYmFzZUlzVHlwZWRBcnJheScpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNUeXBlZEFycmF5O1xuIiwidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXMgPSByZXF1aXJlKCcuL19iYXNlS2V5cycpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5cyhuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLmtleXMoJ2hpJyk7XG4gKiAvLyA9PiBbJzAnLCAnMSddXG4gKi9cbmZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzO1xuIiwidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXNJbiA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzSW4nKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c0luO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5sYXN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAzXG4gKi9cbmZ1bmN0aW9uIGxhc3QoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYXJyYXlbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGFzdDtcbiIsInZhciBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyk7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgbWVtb2l6ZXMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuIElmIGByZXNvbHZlcmAgaXNcbiAqIHByb3ZpZGVkLCBpdCBkZXRlcm1pbmVzIHRoZSBjYWNoZSBrZXkgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGVcbiAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudFxuICogcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uIGlzIHVzZWQgYXMgdGhlIG1hcCBjYWNoZSBrZXkuIFRoZSBgZnVuY2BcbiAqIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlIG1lbW9pemVkIGZ1bmN0aW9uLlxuICpcbiAqICoqTm90ZToqKiBUaGUgY2FjaGUgaXMgZXhwb3NlZCBhcyB0aGUgYGNhY2hlYCBwcm9wZXJ0eSBvbiB0aGUgbWVtb2l6ZWRcbiAqIGZ1bmN0aW9uLiBJdHMgY3JlYXRpb24gbWF5IGJlIGN1c3RvbWl6ZWQgYnkgcmVwbGFjaW5nIHRoZSBgXy5tZW1vaXplLkNhY2hlYFxuICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5zdGFuY2VzIGltcGxlbWVudCB0aGVcbiAqIFtgTWFwYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcHJvcGVydGllcy1vZi10aGUtbWFwLXByb3RvdHlwZS1vYmplY3QpXG4gKiBtZXRob2QgaW50ZXJmYWNlIG9mIGBjbGVhcmAsIGBkZWxldGVgLCBgZ2V0YCwgYGhhc2AsIGFuZCBgc2V0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0gVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiB9O1xuICogdmFyIG90aGVyID0geyAnYyc6IDMsICdkJzogNCB9O1xuICpcbiAqIHZhciB2YWx1ZXMgPSBfLm1lbW9pemUoXy52YWx1ZXMpO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiB2YWx1ZXMob3RoZXIpO1xuICogLy8gPT4gWzMsIDRdXG4gKlxuICogb2JqZWN0LmEgPSAyO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiAvLyBNb2RpZnkgdGhlIHJlc3VsdCBjYWNoZS5cbiAqIHZhbHVlcy5jYWNoZS5zZXQob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWydhJywgJ2InXVxuICpcbiAqIC8vIFJlcGxhY2UgYF8ubWVtb2l6ZS5DYWNoZWAuXG4gKiBfLm1lbW9pemUuQ2FjaGUgPSBXZWFrTWFwO1xuICovXG5mdW5jdGlvbiBtZW1vaXplKGZ1bmMsIHJlc29sdmVyKSB7XG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAhPSBudWxsICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXG4gICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XG5cbiAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpIHx8IGNhY2hlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IE1hcENhY2hlKTtcbiAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG4vLyBFeHBvc2UgYE1hcENhY2hlYC5cbm1lbW9pemUuQ2FjaGUgPSBNYXBDYWNoZTtcblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGB1bmRlZmluZWRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi4zLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5ub29wKTtcbiAqIC8vID0+IFt1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAqL1xuZnVuY3Rpb24gbm9vcCgpIHtcbiAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBub29wO1xuIiwidmFyIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBiYXNlQ2xvbmUgPSByZXF1aXJlKCcuL19iYXNlQ2xvbmUnKSxcbiAgICBiYXNlVW5zZXQgPSByZXF1aXJlKCcuL19iYXNlVW5zZXQnKSxcbiAgICBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBjdXN0b21PbWl0Q2xvbmUgPSByZXF1aXJlKCcuL19jdXN0b21PbWl0Q2xvbmUnKSxcbiAgICBmbGF0UmVzdCA9IHJlcXVpcmUoJy4vX2ZsYXRSZXN0JyksXG4gICAgZ2V0QWxsS2V5c0luID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5c0luJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG52YXIgQ0xPTkVfREVFUF9GTEFHID0gMSxcbiAgICBDTE9ORV9GTEFUX0ZMQUcgPSAyLFxuICAgIENMT05FX1NZTUJPTFNfRkxBRyA9IDQ7XG5cbi8qKlxuICogVGhlIG9wcG9zaXRlIG9mIGBfLnBpY2tgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGVcbiAqIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgcGF0aHMgb2YgYG9iamVjdGAgdGhhdCBhcmUgbm90IG9taXR0ZWQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGNvbnNpZGVyYWJseSBzbG93ZXIgdGhhbiBgXy5waWNrYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gb21pdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAnMicsICdjJzogMyB9O1xuICpcbiAqIF8ub21pdChvYmplY3QsIFsnYScsICdjJ10pO1xuICogLy8gPT4geyAnYic6ICcyJyB9XG4gKi9cbnZhciBvbWl0ID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBwYXRocykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgdmFyIGlzRGVlcCA9IGZhbHNlO1xuICBwYXRocyA9IGFycmF5TWFwKHBhdGhzLCBmdW5jdGlvbihwYXRoKSB7XG4gICAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG4gICAgaXNEZWVwIHx8IChpc0RlZXAgPSBwYXRoLmxlbmd0aCA+IDEpO1xuICAgIHJldHVybiBwYXRoO1xuICB9KTtcbiAgY29weU9iamVjdChvYmplY3QsIGdldEFsbEtleXNJbihvYmplY3QpLCByZXN1bHQpO1xuICBpZiAoaXNEZWVwKSB7XG4gICAgcmVzdWx0ID0gYmFzZUNsb25lKHJlc3VsdCwgQ0xPTkVfREVFUF9GTEFHIHwgQ0xPTkVfRkxBVF9GTEFHIHwgQ0xPTkVfU1lNQk9MU19GTEFHLCBjdXN0b21PbWl0Q2xvbmUpO1xuICB9XG4gIHZhciBsZW5ndGggPSBwYXRocy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGJhc2VVbnNldChyZXN1bHQsIHBhdGhzW2xlbmd0aF0pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBvbWl0O1xuIiwidmFyIGJlZm9yZSA9IHJlcXVpcmUoJy4vYmVmb3JlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaXMgcmVzdHJpY3RlZCB0byBpbnZva2luZyBgZnVuY2Agb25jZS4gUmVwZWF0IGNhbGxzXG4gKiB0byB0aGUgZnVuY3Rpb24gcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgaW52b2NhdGlvbi4gVGhlIGBmdW5jYCBpc1xuICogaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBhbmQgYXJndW1lbnRzIG9mIHRoZSBjcmVhdGVkIGZ1bmN0aW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyByZXN0cmljdGVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgaW5pdGlhbGl6ZSA9IF8ub25jZShjcmVhdGVBcHBsaWNhdGlvbik7XG4gKiBpbml0aWFsaXplKCk7XG4gKiBpbml0aWFsaXplKCk7XG4gKiAvLyA9PiBgY3JlYXRlQXBwbGljYXRpb25gIGlzIGludm9rZWQgb25jZVxuICovXG5mdW5jdGlvbiBvbmNlKGZ1bmMpIHtcbiAgcmV0dXJuIGJlZm9yZSgyLCBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvbmNlO1xuIiwidmFyIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBjcmVhdGVXcmFwID0gcmVxdWlyZSgnLi9fY3JlYXRlV3JhcCcpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlcGxhY2VIb2xkZXJzID0gcmVxdWlyZSgnLi9fcmVwbGFjZUhvbGRlcnMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9QQVJUSUFMX0ZMQUcgPSAzMjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGBwYXJ0aWFsc2AgcHJlcGVuZGVkIHRvIHRoZVxuICogYXJndW1lbnRzIGl0IHJlY2VpdmVzLiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmJpbmRgIGV4Y2VwdCBpdCBkb2VzICoqbm90KipcbiAqIGFsdGVyIHRoZSBgdGhpc2AgYmluZGluZy5cbiAqXG4gKiBUaGUgYF8ucGFydGlhbC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljXG4gKiBidWlsZHMsIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgcGFydGlhbGx5XG4gKiBhcHBsaWVkIGZ1bmN0aW9ucy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMi4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHBhcnRpYWxseSBhcHBseSBhcmd1bWVudHMgdG8uXG4gKiBAcGFyYW0gey4uLip9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhcnRpYWxseSBhcHBsaWVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBncmVldChncmVldGluZywgbmFtZSkge1xuICogICByZXR1cm4gZ3JlZXRpbmcgKyAnICcgKyBuYW1lO1xuICogfVxuICpcbiAqIHZhciBzYXlIZWxsb1RvID0gXy5wYXJ0aWFsKGdyZWV0LCAnaGVsbG8nKTtcbiAqIHNheUhlbGxvVG8oJ2ZyZWQnKTtcbiAqIC8vID0+ICdoZWxsbyBmcmVkJ1xuICpcbiAqIC8vIFBhcnRpYWxseSBhcHBsaWVkIHdpdGggcGxhY2Vob2xkZXJzLlxuICogdmFyIGdyZWV0RnJlZCA9IF8ucGFydGlhbChncmVldCwgXywgJ2ZyZWQnKTtcbiAqIGdyZWV0RnJlZCgnaGknKTtcbiAqIC8vID0+ICdoaSBmcmVkJ1xuICovXG52YXIgcGFydGlhbCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIHBhcnRpYWxzKSB7XG4gIHZhciBob2xkZXJzID0gcmVwbGFjZUhvbGRlcnMocGFydGlhbHMsIGdldEhvbGRlcihwYXJ0aWFsKSk7XG4gIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfUEFSVElBTF9GTEFHLCB1bmRlZmluZWQsIHBhcnRpYWxzLCBob2xkZXJzKTtcbn0pO1xuXG4vLyBBc3NpZ24gZGVmYXVsdCBwbGFjZWhvbGRlcnMuXG5wYXJ0aWFsLnBsYWNlaG9sZGVyID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gcGFydGlhbDtcbiIsInZhciBiYXNlUGljayA9IHJlcXVpcmUoJy4vX2Jhc2VQaWNrJyksXG4gICAgZmxhdFJlc3QgPSByZXF1aXJlKCcuL19mbGF0UmVzdCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZSBwaWNrZWQgYG9iamVjdGAgcHJvcGVydGllcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAnMicsICdjJzogMyB9O1xuICpcbiAqIF8ucGljayhvYmplY3QsIFsnYScsICdjJ10pO1xuICogLy8gPT4geyAnYSc6IDEsICdjJzogMyB9XG4gKi9cbnZhciBwaWNrID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBwYXRocykge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB7fSA6IGJhc2VQaWNrKG9iamVjdCwgcGF0aHMpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGljaztcbiIsInZhciBiYXNlUHJvcGVydHkgPSByZXF1aXJlKCcuL19iYXNlUHJvcGVydHknKSxcbiAgICBiYXNlUHJvcGVydHlEZWVwID0gcmVxdWlyZSgnLi9fYmFzZVByb3BlcnR5RGVlcCcpLFxuICAgIGlzS2V5ID0gcmVxdWlyZSgnLi9faXNLZXknKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGEgZ2l2ZW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW1xuICogICB7ICdhJzogeyAnYic6IDIgfSB9LFxuICogICB7ICdhJzogeyAnYic6IDEgfSB9XG4gKiBdO1xuICpcbiAqIF8ubWFwKG9iamVjdHMsIF8ucHJvcGVydHkoJ2EuYicpKTtcbiAqIC8vID0+IFsyLCAxXVxuICpcbiAqIF8ubWFwKF8uc29ydEJ5KG9iamVjdHMsIF8ucHJvcGVydHkoWydhJywgJ2InXSkpLCAnYS5iJyk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqL1xuZnVuY3Rpb24gcHJvcGVydHkocGF0aCkge1xuICByZXR1cm4gaXNLZXkocGF0aCkgPyBiYXNlUHJvcGVydHkodG9LZXkocGF0aCkpIDogYmFzZVByb3BlcnR5RGVlcChwYXRoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwcm9wZXJ0eTtcbiIsInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmdldGAgZXhjZXB0IHRoYXQgaWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzIGFcbiAqIGZ1bmN0aW9uIGl0J3MgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBpdHMgcGFyZW50IG9iamVjdCBhbmRcbiAqIGl0cyByZXN1bHQgaXMgcmV0dXJuZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHJlc29sdmUuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYzEnOiAzLCAnYzInOiBfLmNvbnN0YW50KDQpIH0gfV0gfTtcbiAqXG4gKiBfLnJlc3VsdChvYmplY3QsICdhWzBdLmIuYzEnKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLnJlc3VsdChvYmplY3QsICdhWzBdLmIuYzInKTtcbiAqIC8vID0+IDRcbiAqXG4gKiBfLnJlc3VsdChvYmplY3QsICdhWzBdLmIuYzMnLCAnZGVmYXVsdCcpO1xuICogLy8gPT4gJ2RlZmF1bHQnXG4gKlxuICogXy5yZXN1bHQob2JqZWN0LCAnYVswXS5iLmMzJywgXy5jb25zdGFudCgnZGVmYXVsdCcpKTtcbiAqIC8vID0+ICdkZWZhdWx0J1xuICovXG5mdW5jdGlvbiByZXN1bHQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICAvLyBFbnN1cmUgdGhlIGxvb3AgaXMgZW50ZXJlZCB3aGVuIHBhdGggaXMgZW1wdHkuXG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gMTtcbiAgICBvYmplY3QgPSB1bmRlZmluZWQ7XG4gIH1cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFt0b0tleShwYXRoW2luZGV4XSldO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbmRleCA9IGxlbmd0aDtcbiAgICAgIHZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgICBvYmplY3QgPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHZhbHVlLmNhbGwob2JqZWN0KSA6IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVzdWx0O1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheXMgPSBfLnRpbWVzKDIsIF8uc3R1YkFycmF5KTtcbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXMpO1xuICogLy8gPT4gW1tdLCBbXV1cbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXNbMF0gPT09IGFycmF5c1sxXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBzdHViQXJyYXkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViQXJyYXk7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkZhbHNlO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzU3RyaW5nID0gcmVxdWlyZSgnLi9pc1N0cmluZycpLFxuICAgIGl0ZXJhdG9yVG9BcnJheSA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9yVG9BcnJheScpLFxuICAgIG1hcFRvQXJyYXkgPSByZXF1aXJlKCcuL19tYXBUb0FycmF5JyksXG4gICAgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4vX3NldFRvQXJyYXknKSxcbiAgICBzdHJpbmdUb0FycmF5ID0gcmVxdWlyZSgnLi9fc3RyaW5nVG9BcnJheScpLFxuICAgIHZhbHVlcyA9IHJlcXVpcmUoJy4vdmFsdWVzJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltSXRlcmF0b3IgPSBTeW1ib2wgPyBTeW1ib2wuaXRlcmF0b3IgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvQXJyYXkoeyAnYSc6IDEsICdiJzogMiB9KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIF8udG9BcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ11cbiAqXG4gKiBfLnRvQXJyYXkoMSk7XG4gKiAvLyA9PiBbXVxuICpcbiAqIF8udG9BcnJheShudWxsKTtcbiAqIC8vID0+IFtdXG4gKi9cbmZ1bmN0aW9uIHRvQXJyYXkodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBpZiAoaXNBcnJheUxpa2UodmFsdWUpKSB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlKSA/IHN0cmluZ1RvQXJyYXkodmFsdWUpIDogY29weUFycmF5KHZhbHVlKTtcbiAgfVxuICBpZiAoc3ltSXRlcmF0b3IgJiYgdmFsdWVbc3ltSXRlcmF0b3JdKSB7XG4gICAgcmV0dXJuIGl0ZXJhdG9yVG9BcnJheSh2YWx1ZVtzeW1JdGVyYXRvcl0oKSk7XG4gIH1cbiAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSksXG4gICAgICBmdW5jID0gdGFnID09IG1hcFRhZyA/IG1hcFRvQXJyYXkgOiAodGFnID09IHNldFRhZyA/IHNldFRvQXJyYXkgOiB2YWx1ZXMpO1xuXG4gIHJldHVybiBmdW5jKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0FycmF5O1xuIiwidmFyIHRvTnVtYmVyID0gcmVxdWlyZSgnLi90b051bWJlcicpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwLFxuICAgIE1BWF9JTlRFR0VSID0gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIGZpbml0ZSBudW1iZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEyLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b0Zpbml0ZSgzLjIpO1xuICogLy8gPT4gMy4yXG4gKlxuICogXy50b0Zpbml0ZShOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDVlLTMyNFxuICpcbiAqIF8udG9GaW5pdGUoSW5maW5pdHkpO1xuICogLy8gPT4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhcbiAqXG4gKiBfLnRvRmluaXRlKCczLjInKTtcbiAqIC8vID0+IDMuMlxuICovXG5mdW5jdGlvbiB0b0Zpbml0ZSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiAwO1xuICB9XG4gIHZhbHVlID0gdG9OdW1iZXIodmFsdWUpO1xuICBpZiAodmFsdWUgPT09IElORklOSVRZIHx8IHZhbHVlID09PSAtSU5GSU5JVFkpIHtcbiAgICB2YXIgc2lnbiA9ICh2YWx1ZSA8IDAgPyAtMSA6IDEpO1xuICAgIHJldHVybiBzaWduICogTUFYX0lOVEVHRVI7XG4gIH1cbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/IHZhbHVlIDogMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0Zpbml0ZTtcbiIsInZhciB0b0Zpbml0ZSA9IHJlcXVpcmUoJy4vdG9GaW5pdGUnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGFuIGludGVnZXIuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9JbnRlZ2VyYF0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvaW50ZWdlcikuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgaW50ZWdlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b0ludGVnZXIoMy4yKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLnRvSW50ZWdlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDBcbiAqXG4gKiBfLnRvSW50ZWdlcihJbmZpbml0eSk7XG4gKiAvLyA9PiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFxuICpcbiAqIF8udG9JbnRlZ2VyKCczLjInKTtcbiAqIC8vID0+IDNcbiAqL1xuZnVuY3Rpb24gdG9JbnRlZ2VyKHZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSB0b0Zpbml0ZSh2YWx1ZSksXG4gICAgICByZW1haW5kZXIgPSByZXN1bHQgJSAxO1xuXG4gIHJldHVybiByZXN1bHQgPT09IHJlc3VsdCA/IChyZW1haW5kZXIgPyByZXN1bHQgLSByZW1haW5kZXIgOiByZXN1bHQpIDogMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0ludGVnZXI7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE5BTiA9IDAgLyAwO1xuXG4vKiogVXNlZCB0byBtYXRjaCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLiAqL1xudmFyIHJlVHJpbSA9IC9eXFxzK3xcXHMrJC9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmFkIHNpZ25lZCBoZXhhZGVjaW1hbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCYWRIZXggPSAvXlstK10weFswLTlhLWZdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGJpbmFyeSBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCaW5hcnkgPSAvXjBiWzAxXSskL2k7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvY3RhbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNPY3RhbCA9IC9eMG9bMC03XSskL2k7XG5cbi8qKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB3aXRob3V0IGEgZGVwZW5kZW5jeSBvbiBgcm9vdGAuICovXG52YXIgZnJlZVBhcnNlSW50ID0gcGFyc2VJbnQ7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIG51bWJlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b051bWJlcigzLjIpO1xuICogLy8gPT4gMy4yXG4gKlxuICogXy50b051bWJlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDVlLTMyNFxuICpcbiAqIF8udG9OdW1iZXIoSW5maW5pdHkpO1xuICogLy8gPT4gSW5maW5pdHlcbiAqXG4gKiBfLnRvTnVtYmVyKCczLjInKTtcbiAqIC8vID0+IDMuMlxuICovXG5mdW5jdGlvbiB0b051bWJlcih2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gTkFOO1xuICB9XG4gIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICB2YXIgb3RoZXIgPSB0eXBlb2YgdmFsdWUudmFsdWVPZiA9PSAnZnVuY3Rpb24nID8gdmFsdWUudmFsdWVPZigpIDogdmFsdWU7XG4gICAgdmFsdWUgPSBpc09iamVjdChvdGhlcikgPyAob3RoZXIgKyAnJykgOiBvdGhlcjtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiArdmFsdWU7XG4gIH1cbiAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHJlVHJpbSwgJycpO1xuICB2YXIgaXNCaW5hcnkgPSByZUlzQmluYXJ5LnRlc3QodmFsdWUpO1xuICByZXR1cm4gKGlzQmluYXJ5IHx8IHJlSXNPY3RhbC50ZXN0KHZhbHVlKSlcbiAgICA/IGZyZWVQYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgaXNCaW5hcnkgPyAyIDogOClcbiAgICA6IChyZUlzQmFkSGV4LnRlc3QodmFsdWUpID8gTkFOIDogK3ZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b051bWJlcjtcbiIsInZhciBiYXNlVG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlVG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU3RyaW5nO1xuIiwidmFyIGJhc2VGbGF0dGVuID0gcmVxdWlyZSgnLi9fYmFzZUZsYXR0ZW4nKSxcbiAgICBiYXNlUmVzdCA9IHJlcXVpcmUoJy4vX2Jhc2VSZXN0JyksXG4gICAgYmFzZVVuaXEgPSByZXF1aXJlKCcuL19iYXNlVW5pcScpLFxuICAgIGlzQXJyYXlMaWtlT2JqZWN0ID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZU9iamVjdCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcywgaW4gb3JkZXIsIGZyb20gYWxsIGdpdmVuIGFycmF5cyB1c2luZ1xuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbWJpbmVkIHZhbHVlcy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy51bmlvbihbMl0sIFsxLCAyXSk7XG4gKiAvLyA9PiBbMiwgMV1cbiAqL1xudmFyIHVuaW9uID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gIHJldHVybiBiYXNlVW5pcShiYXNlRmxhdHRlbihhcnJheXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmlvbjtcbiIsInZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqIFVzZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIElEcy4gKi9cbnZhciBpZENvdW50ZXIgPSAwO1xuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHVuaXF1ZSBJRC4gSWYgYHByZWZpeGAgaXMgZ2l2ZW4sIHRoZSBJRCBpcyBhcHBlbmRlZCB0byBpdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtzdHJpbmd9IFtwcmVmaXg9JyddIFRoZSB2YWx1ZSB0byBwcmVmaXggdGhlIElEIHdpdGguXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB1bmlxdWUgSUQuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udW5pcXVlSWQoJ2NvbnRhY3RfJyk7XG4gKiAvLyA9PiAnY29udGFjdF8xMDQnXG4gKlxuICogXy51bmlxdWVJZCgpO1xuICogLy8gPT4gJzEwNSdcbiAqL1xuZnVuY3Rpb24gdW5pcXVlSWQocHJlZml4KSB7XG4gIHZhciBpZCA9ICsraWRDb3VudGVyO1xuICByZXR1cm4gdG9TdHJpbmcocHJlZml4KSArIGlkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHVuaXF1ZUlkO1xuIiwidmFyIGJhc2VWYWx1ZXMgPSByZXF1aXJlKCcuL19iYXNlVmFsdWVzJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8udmFsdWVzKG5ldyBGb28pO1xuICogLy8gPT4gWzEsIDJdIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKlxuICogXy52YWx1ZXMoJ2hpJyk7XG4gKiAvLyA9PiBbJ2gnLCAnaSddXG4gKi9cbmZ1bmN0aW9uIHZhbHVlcyhvYmplY3QpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gW10gOiBiYXNlVmFsdWVzKG9iamVjdCwga2V5cyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2YWx1ZXM7XG4iLCJ2YXIgTGF6eVdyYXBwZXIgPSByZXF1aXJlKCcuL19MYXp5V3JhcHBlcicpLFxuICAgIExvZGFzaFdyYXBwZXIgPSByZXF1aXJlKCcuL19Mb2Rhc2hXcmFwcGVyJyksXG4gICAgYmFzZUxvZGFzaCA9IHJlcXVpcmUoJy4vX2Jhc2VMb2Rhc2gnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKSxcbiAgICB3cmFwcGVyQ2xvbmUgPSByZXF1aXJlKCcuL193cmFwcGVyQ2xvbmUnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgYGxvZGFzaGAgb2JqZWN0IHdoaWNoIHdyYXBzIGB2YWx1ZWAgdG8gZW5hYmxlIGltcGxpY2l0IG1ldGhvZFxuICogY2hhaW4gc2VxdWVuY2VzLiBNZXRob2RzIHRoYXQgb3BlcmF0ZSBvbiBhbmQgcmV0dXJuIGFycmF5cywgY29sbGVjdGlvbnMsXG4gKiBhbmQgZnVuY3Rpb25zIGNhbiBiZSBjaGFpbmVkIHRvZ2V0aGVyLiBNZXRob2RzIHRoYXQgcmV0cmlldmUgYSBzaW5nbGUgdmFsdWVcbiAqIG9yIG1heSByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IGVuZCB0aGUgY2hhaW4gc2VxdWVuY2VcbiAqIGFuZCByZXR1cm4gdGhlIHVud3JhcHBlZCB2YWx1ZS4gT3RoZXJ3aXNlLCB0aGUgdmFsdWUgbXVzdCBiZSB1bndyYXBwZWRcbiAqIHdpdGggYF8jdmFsdWVgLlxuICpcbiAqIEV4cGxpY2l0IGNoYWluIHNlcXVlbmNlcywgd2hpY2ggbXVzdCBiZSB1bndyYXBwZWQgd2l0aCBgXyN2YWx1ZWAsIG1heSBiZVxuICogZW5hYmxlZCB1c2luZyBgXy5jaGFpbmAuXG4gKlxuICogVGhlIGV4ZWN1dGlvbiBvZiBjaGFpbmVkIG1ldGhvZHMgaXMgbGF6eSwgdGhhdCBpcywgaXQncyBkZWZlcnJlZCB1bnRpbFxuICogYF8jdmFsdWVgIGlzIGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBjYWxsZWQuXG4gKlxuICogTGF6eSBldmFsdWF0aW9uIGFsbG93cyBzZXZlcmFsIG1ldGhvZHMgdG8gc3VwcG9ydCBzaG9ydGN1dCBmdXNpb24uXG4gKiBTaG9ydGN1dCBmdXNpb24gaXMgYW4gb3B0aW1pemF0aW9uIHRvIG1lcmdlIGl0ZXJhdGVlIGNhbGxzOyB0aGlzIGF2b2lkc1xuICogdGhlIGNyZWF0aW9uIG9mIGludGVybWVkaWF0ZSBhcnJheXMgYW5kIGNhbiBncmVhdGx5IHJlZHVjZSB0aGUgbnVtYmVyIG9mXG4gKiBpdGVyYXRlZSBleGVjdXRpb25zLiBTZWN0aW9ucyBvZiBhIGNoYWluIHNlcXVlbmNlIHF1YWxpZnkgZm9yIHNob3J0Y3V0XG4gKiBmdXNpb24gaWYgdGhlIHNlY3Rpb24gaXMgYXBwbGllZCB0byBhbiBhcnJheSBhbmQgaXRlcmF0ZWVzIGFjY2VwdCBvbmx5XG4gKiBvbmUgYXJndW1lbnQuIFRoZSBoZXVyaXN0aWMgZm9yIHdoZXRoZXIgYSBzZWN0aW9uIHF1YWxpZmllcyBmb3Igc2hvcnRjdXRcbiAqIGZ1c2lvbiBpcyBzdWJqZWN0IHRvIGNoYW5nZS5cbiAqXG4gKiBDaGFpbmluZyBpcyBzdXBwb3J0ZWQgaW4gY3VzdG9tIGJ1aWxkcyBhcyBsb25nIGFzIHRoZSBgXyN2YWx1ZWAgbWV0aG9kIGlzXG4gKiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluY2x1ZGVkIGluIHRoZSBidWlsZC5cbiAqXG4gKiBJbiBhZGRpdGlvbiB0byBsb2Rhc2ggbWV0aG9kcywgd3JhcHBlcnMgaGF2ZSBgQXJyYXlgIGFuZCBgU3RyaW5nYCBtZXRob2RzLlxuICpcbiAqIFRoZSB3cmFwcGVyIGBBcnJheWAgbWV0aG9kcyBhcmU6XG4gKiBgY29uY2F0YCwgYGpvaW5gLCBgcG9wYCwgYHB1c2hgLCBgc2hpZnRgLCBgc29ydGAsIGBzcGxpY2VgLCBhbmQgYHVuc2hpZnRgXG4gKlxuICogVGhlIHdyYXBwZXIgYFN0cmluZ2AgbWV0aG9kcyBhcmU6XG4gKiBgcmVwbGFjZWAgYW5kIGBzcGxpdGBcbiAqXG4gKiBUaGUgd3JhcHBlciBtZXRob2RzIHRoYXQgc3VwcG9ydCBzaG9ydGN1dCBmdXNpb24gYXJlOlxuICogYGF0YCwgYGNvbXBhY3RgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLCBgZHJvcFdoaWxlYCwgYGZpbHRlcmAsIGBmaW5kYCxcbiAqIGBmaW5kTGFzdGAsIGBoZWFkYCwgYGluaXRpYWxgLCBgbGFzdGAsIGBtYXBgLCBgcmVqZWN0YCwgYHJldmVyc2VgLCBgc2xpY2VgLFxuICogYHRhaWxgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLCBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYW5kIGB0b0FycmF5YFxuICpcbiAqIFRoZSBjaGFpbmFibGUgd3JhcHBlciBtZXRob2RzIGFyZTpcbiAqIGBhZnRlcmAsIGBhcnlgLCBgYXNzaWduYCwgYGFzc2lnbkluYCwgYGFzc2lnbkluV2l0aGAsIGBhc3NpZ25XaXRoYCwgYGF0YCxcbiAqIGBiZWZvcmVgLCBgYmluZGAsIGBiaW5kQWxsYCwgYGJpbmRLZXlgLCBgY2FzdEFycmF5YCwgYGNoYWluYCwgYGNodW5rYCxcbiAqIGBjb21taXRgLCBgY29tcGFjdGAsIGBjb25jYXRgLCBgY29uZm9ybXNgLCBgY29uc3RhbnRgLCBgY291bnRCeWAsIGBjcmVhdGVgLFxuICogYGN1cnJ5YCwgYGRlYm91bmNlYCwgYGRlZmF1bHRzYCwgYGRlZmF1bHRzRGVlcGAsIGBkZWZlcmAsIGBkZWxheWAsXG4gKiBgZGlmZmVyZW5jZWAsIGBkaWZmZXJlbmNlQnlgLCBgZGlmZmVyZW5jZVdpdGhgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLFxuICogYGRyb3BSaWdodFdoaWxlYCwgYGRyb3BXaGlsZWAsIGBleHRlbmRgLCBgZXh0ZW5kV2l0aGAsIGBmaWxsYCwgYGZpbHRlcmAsXG4gKiBgZmxhdE1hcGAsIGBmbGF0TWFwRGVlcGAsIGBmbGF0TWFwRGVwdGhgLCBgZmxhdHRlbmAsIGBmbGF0dGVuRGVlcGAsXG4gKiBgZmxhdHRlbkRlcHRoYCwgYGZsaXBgLCBgZmxvd2AsIGBmbG93UmlnaHRgLCBgZnJvbVBhaXJzYCwgYGZ1bmN0aW9uc2AsXG4gKiBgZnVuY3Rpb25zSW5gLCBgZ3JvdXBCeWAsIGBpbml0aWFsYCwgYGludGVyc2VjdGlvbmAsIGBpbnRlcnNlY3Rpb25CeWAsXG4gKiBgaW50ZXJzZWN0aW9uV2l0aGAsIGBpbnZlcnRgLCBgaW52ZXJ0QnlgLCBgaW52b2tlTWFwYCwgYGl0ZXJhdGVlYCwgYGtleUJ5YCxcbiAqIGBrZXlzYCwgYGtleXNJbmAsIGBtYXBgLCBgbWFwS2V5c2AsIGBtYXBWYWx1ZXNgLCBgbWF0Y2hlc2AsIGBtYXRjaGVzUHJvcGVydHlgLFxuICogYG1lbW9pemVgLCBgbWVyZ2VgLCBgbWVyZ2VXaXRoYCwgYG1ldGhvZGAsIGBtZXRob2RPZmAsIGBtaXhpbmAsIGBuZWdhdGVgLFxuICogYG50aEFyZ2AsIGBvbWl0YCwgYG9taXRCeWAsIGBvbmNlYCwgYG9yZGVyQnlgLCBgb3ZlcmAsIGBvdmVyQXJnc2AsXG4gKiBgb3ZlckV2ZXJ5YCwgYG92ZXJTb21lYCwgYHBhcnRpYWxgLCBgcGFydGlhbFJpZ2h0YCwgYHBhcnRpdGlvbmAsIGBwaWNrYCxcbiAqIGBwaWNrQnlgLCBgcGxhbnRgLCBgcHJvcGVydHlgLCBgcHJvcGVydHlPZmAsIGBwdWxsYCwgYHB1bGxBbGxgLCBgcHVsbEFsbEJ5YCxcbiAqIGBwdWxsQWxsV2l0aGAsIGBwdWxsQXRgLCBgcHVzaGAsIGByYW5nZWAsIGByYW5nZVJpZ2h0YCwgYHJlYXJnYCwgYHJlamVjdGAsXG4gKiBgcmVtb3ZlYCwgYHJlc3RgLCBgcmV2ZXJzZWAsIGBzYW1wbGVTaXplYCwgYHNldGAsIGBzZXRXaXRoYCwgYHNodWZmbGVgLFxuICogYHNsaWNlYCwgYHNvcnRgLCBgc29ydEJ5YCwgYHNwbGljZWAsIGBzcHJlYWRgLCBgdGFpbGAsIGB0YWtlYCwgYHRha2VSaWdodGAsXG4gKiBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYHRhcGAsIGB0aHJvdHRsZWAsIGB0aHJ1YCwgYHRvQXJyYXlgLFxuICogYHRvUGFpcnNgLCBgdG9QYWlyc0luYCwgYHRvUGF0aGAsIGB0b1BsYWluT2JqZWN0YCwgYHRyYW5zZm9ybWAsIGB1bmFyeWAsXG4gKiBgdW5pb25gLCBgdW5pb25CeWAsIGB1bmlvbldpdGhgLCBgdW5pcWAsIGB1bmlxQnlgLCBgdW5pcVdpdGhgLCBgdW5zZXRgLFxuICogYHVuc2hpZnRgLCBgdW56aXBgLCBgdW56aXBXaXRoYCwgYHVwZGF0ZWAsIGB1cGRhdGVXaXRoYCwgYHZhbHVlc2AsXG4gKiBgdmFsdWVzSW5gLCBgd2l0aG91dGAsIGB3cmFwYCwgYHhvcmAsIGB4b3JCeWAsIGB4b3JXaXRoYCwgYHppcGAsXG4gKiBgemlwT2JqZWN0YCwgYHppcE9iamVjdERlZXBgLCBhbmQgYHppcFdpdGhgXG4gKlxuICogVGhlIHdyYXBwZXIgbWV0aG9kcyB0aGF0IGFyZSAqKm5vdCoqIGNoYWluYWJsZSBieSBkZWZhdWx0IGFyZTpcbiAqIGBhZGRgLCBgYXR0ZW1wdGAsIGBjYW1lbENhc2VgLCBgY2FwaXRhbGl6ZWAsIGBjZWlsYCwgYGNsYW1wYCwgYGNsb25lYCxcbiAqIGBjbG9uZURlZXBgLCBgY2xvbmVEZWVwV2l0aGAsIGBjbG9uZVdpdGhgLCBgY29uZm9ybXNUb2AsIGBkZWJ1cnJgLFxuICogYGRlZmF1bHRUb2AsIGBkaXZpZGVgLCBgZWFjaGAsIGBlYWNoUmlnaHRgLCBgZW5kc1dpdGhgLCBgZXFgLCBgZXNjYXBlYCxcbiAqIGBlc2NhcGVSZWdFeHBgLCBgZXZlcnlgLCBgZmluZGAsIGBmaW5kSW5kZXhgLCBgZmluZEtleWAsIGBmaW5kTGFzdGAsXG4gKiBgZmluZExhc3RJbmRleGAsIGBmaW5kTGFzdEtleWAsIGBmaXJzdGAsIGBmbG9vcmAsIGBmb3JFYWNoYCwgYGZvckVhY2hSaWdodGAsXG4gKiBgZm9ySW5gLCBgZm9ySW5SaWdodGAsIGBmb3JPd25gLCBgZm9yT3duUmlnaHRgLCBgZ2V0YCwgYGd0YCwgYGd0ZWAsIGBoYXNgLFxuICogYGhhc0luYCwgYGhlYWRgLCBgaWRlbnRpdHlgLCBgaW5jbHVkZXNgLCBgaW5kZXhPZmAsIGBpblJhbmdlYCwgYGludm9rZWAsXG4gKiBgaXNBcmd1bWVudHNgLCBgaXNBcnJheWAsIGBpc0FycmF5QnVmZmVyYCwgYGlzQXJyYXlMaWtlYCwgYGlzQXJyYXlMaWtlT2JqZWN0YCxcbiAqIGBpc0Jvb2xlYW5gLCBgaXNCdWZmZXJgLCBgaXNEYXRlYCwgYGlzRWxlbWVudGAsIGBpc0VtcHR5YCwgYGlzRXF1YWxgLFxuICogYGlzRXF1YWxXaXRoYCwgYGlzRXJyb3JgLCBgaXNGaW5pdGVgLCBgaXNGdW5jdGlvbmAsIGBpc0ludGVnZXJgLCBgaXNMZW5ndGhgLFxuICogYGlzTWFwYCwgYGlzTWF0Y2hgLCBgaXNNYXRjaFdpdGhgLCBgaXNOYU5gLCBgaXNOYXRpdmVgLCBgaXNOaWxgLCBgaXNOdWxsYCxcbiAqIGBpc051bWJlcmAsIGBpc09iamVjdGAsIGBpc09iamVjdExpa2VgLCBgaXNQbGFpbk9iamVjdGAsIGBpc1JlZ0V4cGAsXG4gKiBgaXNTYWZlSW50ZWdlcmAsIGBpc1NldGAsIGBpc1N0cmluZ2AsIGBpc1VuZGVmaW5lZGAsIGBpc1R5cGVkQXJyYXlgLFxuICogYGlzV2Vha01hcGAsIGBpc1dlYWtTZXRgLCBgam9pbmAsIGBrZWJhYkNhc2VgLCBgbGFzdGAsIGBsYXN0SW5kZXhPZmAsXG4gKiBgbG93ZXJDYXNlYCwgYGxvd2VyRmlyc3RgLCBgbHRgLCBgbHRlYCwgYG1heGAsIGBtYXhCeWAsIGBtZWFuYCwgYG1lYW5CeWAsXG4gKiBgbWluYCwgYG1pbkJ5YCwgYG11bHRpcGx5YCwgYG5vQ29uZmxpY3RgLCBgbm9vcGAsIGBub3dgLCBgbnRoYCwgYHBhZGAsXG4gKiBgcGFkRW5kYCwgYHBhZFN0YXJ0YCwgYHBhcnNlSW50YCwgYHBvcGAsIGByYW5kb21gLCBgcmVkdWNlYCwgYHJlZHVjZVJpZ2h0YCxcbiAqIGByZXBlYXRgLCBgcmVzdWx0YCwgYHJvdW5kYCwgYHJ1bkluQ29udGV4dGAsIGBzYW1wbGVgLCBgc2hpZnRgLCBgc2l6ZWAsXG4gKiBgc25ha2VDYXNlYCwgYHNvbWVgLCBgc29ydGVkSW5kZXhgLCBgc29ydGVkSW5kZXhCeWAsIGBzb3J0ZWRMYXN0SW5kZXhgLFxuICogYHNvcnRlZExhc3RJbmRleEJ5YCwgYHN0YXJ0Q2FzZWAsIGBzdGFydHNXaXRoYCwgYHN0dWJBcnJheWAsIGBzdHViRmFsc2VgLFxuICogYHN0dWJPYmplY3RgLCBgc3R1YlN0cmluZ2AsIGBzdHViVHJ1ZWAsIGBzdWJ0cmFjdGAsIGBzdW1gLCBgc3VtQnlgLFxuICogYHRlbXBsYXRlYCwgYHRpbWVzYCwgYHRvRmluaXRlYCwgYHRvSW50ZWdlcmAsIGB0b0pTT05gLCBgdG9MZW5ndGhgLFxuICogYHRvTG93ZXJgLCBgdG9OdW1iZXJgLCBgdG9TYWZlSW50ZWdlcmAsIGB0b1N0cmluZ2AsIGB0b1VwcGVyYCwgYHRyaW1gLFxuICogYHRyaW1FbmRgLCBgdHJpbVN0YXJ0YCwgYHRydW5jYXRlYCwgYHVuZXNjYXBlYCwgYHVuaXF1ZUlkYCwgYHVwcGVyQ2FzZWAsXG4gKiBgdXBwZXJGaXJzdGAsIGB2YWx1ZWAsIGFuZCBgd29yZHNgXG4gKlxuICogQG5hbWUgX1xuICogQGNvbnN0cnVjdG9yXG4gKiBAY2F0ZWdvcnkgU2VxXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwIGluIGEgYGxvZGFzaGAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAqICAgcmV0dXJuIG4gKiBuO1xuICogfVxuICpcbiAqIHZhciB3cmFwcGVkID0gXyhbMSwgMiwgM10pO1xuICpcbiAqIC8vIFJldHVybnMgYW4gdW53cmFwcGVkIHZhbHVlLlxuICogd3JhcHBlZC5yZWR1Y2UoXy5hZGQpO1xuICogLy8gPT4gNlxuICpcbiAqIC8vIFJldHVybnMgYSB3cmFwcGVkIHZhbHVlLlxuICogdmFyIHNxdWFyZXMgPSB3cmFwcGVkLm1hcChzcXVhcmUpO1xuICpcbiAqIF8uaXNBcnJheShzcXVhcmVzKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KHNxdWFyZXMudmFsdWUoKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGxvZGFzaCh2YWx1ZSkge1xuICBpZiAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNBcnJheSh2YWx1ZSkgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIExvZGFzaFdyYXBwZXIpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdfX3dyYXBwZWRfXycpKSB7XG4gICAgICByZXR1cm4gd3JhcHBlckNsb25lKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHZhbHVlKTtcbn1cblxuLy8gRW5zdXJlIHdyYXBwZXJzIGFyZSBpbnN0YW5jZXMgb2YgYGJhc2VMb2Rhc2hgLlxubG9kYXNoLnByb3RvdHlwZSA9IGJhc2VMb2Rhc2gucHJvdG90eXBlO1xubG9kYXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGxvZGFzaDtcblxubW9kdWxlLmV4cG9ydHMgPSBsb2Rhc2g7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBwcm90byA9IHR5cGVvZiBFbGVtZW50ICE9PSAndW5kZWZpbmVkJyA/IEVsZW1lbnQucHJvdG90eXBlIDoge307XG52YXIgdmVuZG9yID0gcHJvdG8ubWF0Y2hlc1xuICB8fCBwcm90by5tYXRjaGVzU2VsZWN0b3JcbiAgfHwgcHJvdG8ud2Via2l0TWF0Y2hlc1NlbGVjdG9yXG4gIHx8IHByb3RvLm1vek1hdGNoZXNTZWxlY3RvclxuICB8fCBwcm90by5tc01hdGNoZXNTZWxlY3RvclxuICB8fCBwcm90by5vTWF0Y2hlc1NlbGVjdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1hdGNoO1xuXG4vKipcbiAqIE1hdGNoIGBlbGAgdG8gYHNlbGVjdG9yYC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3JcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIG1hdGNoKGVsLCBzZWxlY3Rvcikge1xuICBpZiAoIWVsIHx8IGVsLm5vZGVUeXBlICE9PSAxKSByZXR1cm4gZmFsc2U7XG4gIGlmICh2ZW5kb3IpIHJldHVybiB2ZW5kb3IuY2FsbChlbCwgc2VsZWN0b3IpO1xuICB2YXIgbm9kZXMgPSBlbC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG5vZGVzW2ldID09IGVsKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4iLCIvKipcbiAqIG1lZGlhLXR5cGVcbiAqIEBhdXRob3IgTG92ZWxsIEZ1bGxlclxuICpcbiAqIFRoaXMgY29kZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIHRoZSB0ZXJtcyBvZlxuICogd2hpY2ggbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMC5odG1sXG4gKi9cblxudmFyIE1lZGlhVHlwZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnR5cGUgPSBudWxsO1xuICB0aGlzLl9zZXRTdWJ0eXBlQW5kU3VmZml4KG51bGwpO1xuICB0aGlzLnBhcmFtZXRlcnMgPSB7fTtcbn07XG5cbk1lZGlhVHlwZS5wcm90b3R5cGUuaXNWYWxpZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy50eXBlICE9PSBudWxsICYmIHRoaXMuc3VidHlwZSAhPT0gbnVsbCAmJiB0aGlzLnN1YnR5cGUgIT09IFwiZXhhbXBsZVwiO1xufTtcblxuTWVkaWFUeXBlLnByb3RvdHlwZS5fc2V0U3VidHlwZUFuZFN1ZmZpeCA9IGZ1bmN0aW9uKHN1YnR5cGUpIHtcbiAgdGhpcy5zdWJ0eXBlID0gc3VidHlwZTtcbiAgdGhpcy5zdWJ0eXBlRmFjZXRzID0gW107XG4gIHRoaXMuc3VmZml4ID0gbnVsbDtcbiAgaWYgKHN1YnR5cGUpIHtcbiAgICBpZiAoc3VidHlwZS5pbmRleE9mKFwiK1wiKSA+IC0xICYmIHN1YnR5cGUuc3Vic3RyKC0xKSAhPT0gXCIrXCIpIHtcbiAgICAgIHZhciBmaXhlcyA9IHN1YnR5cGUuc3BsaXQoXCIrXCIsIDIpO1xuICAgICAgdGhpcy5zdWJ0eXBlID0gZml4ZXNbMF07XG4gICAgICB0aGlzLnN1YnR5cGVGYWNldHMgPSBmaXhlc1swXS5zcGxpdChcIi5cIik7XG4gICAgICB0aGlzLnN1ZmZpeCA9IGZpeGVzWzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN1YnR5cGVGYWNldHMgPSBzdWJ0eXBlLnNwbGl0KFwiLlwiKTtcbiAgICB9XG4gIH1cbn07XG5cbk1lZGlhVHlwZS5wcm90b3R5cGUuaGFzU3VmZml4ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAhIXRoaXMuc3VmZml4O1xufTtcblxuTWVkaWFUeXBlLnByb3RvdHlwZS5fZmlyc3RTdWJ0eXBlRmFjZXRFcXVhbHMgPSBmdW5jdGlvbihzdHIpIHtcbiAgcmV0dXJuIHRoaXMuc3VidHlwZUZhY2V0cy5sZW5ndGggPiAwICYmIHRoaXMuc3VidHlwZUZhY2V0c1swXSA9PT0gc3RyO1xufTtcblxuTWVkaWFUeXBlLnByb3RvdHlwZS5pc1ZlbmRvciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fZmlyc3RTdWJ0eXBlRmFjZXRFcXVhbHMoXCJ2bmRcIik7XG59O1xuXG5NZWRpYVR5cGUucHJvdG90eXBlLmlzUGVyc29uYWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX2ZpcnN0U3VidHlwZUZhY2V0RXF1YWxzKFwicHJzXCIpO1xufTtcblxuTWVkaWFUeXBlLnByb3RvdHlwZS5pc0V4cGVyaW1lbnRhbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fZmlyc3RTdWJ0eXBlRmFjZXRFcXVhbHMoXCJ4XCIpIHx8IHRoaXMuc3VidHlwZS5zdWJzdHJpbmcoMCwgMikudG9Mb3dlckNhc2UoKSA9PT0gXCJ4LVwiO1xufTtcblxuTWVkaWFUeXBlLnByb3RvdHlwZS5hc1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgc3RyID0gXCJcIjtcbiAgaWYgKHRoaXMuaXNWYWxpZCgpKSB7XG4gICAgc3RyID0gc3RyICsgdGhpcy50eXBlICsgXCIvXCIgKyB0aGlzLnN1YnR5cGU7XG4gICAgaWYgKHRoaXMuaGFzU3VmZml4KCkpIHtcbiAgICAgIHN0ciA9IHN0ciArIFwiK1wiICsgdGhpcy5zdWZmaXg7XG4gICAgfVxuICAgIHZhciBwYXJhbWV0ZXJLZXlzID0gT2JqZWN0LmtleXModGhpcy5wYXJhbWV0ZXJzKTtcbiAgICBpZiAocGFyYW1ldGVyS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgcGFyYW1ldGVycyA9IFtdO1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgcGFyYW1ldGVyS2V5cy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGEubG9jYWxlQ29tcGFyZShiKTtcbiAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICBwYXJhbWV0ZXJzLnB1c2goZWxlbWVudCArIFwiPVwiICsgd3JhcFF1b3Rlcyh0aGF0LnBhcmFtZXRlcnNbZWxlbWVudF0pKTtcbiAgICAgIH0pO1xuICAgICAgc3RyID0gc3RyICsgXCI7XCIgKyBwYXJhbWV0ZXJzLmpvaW4oXCI7XCIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyO1xufTtcblxudmFyIHdyYXBRdW90ZXMgPSBmdW5jdGlvbihzdHIpIHtcbiAgcmV0dXJuIChzdHIuaW5kZXhPZihcIjtcIikgPiAtMSkgPyAnXCInICsgc3RyICsgJ1wiJyA6IHN0cjtcbn07XG5cbnZhciB1bndyYXBRdW90ZXMgPSBmdW5jdGlvbihzdHIpIHtcbiAgcmV0dXJuIChzdHIuc3Vic3RyKDAsIDEpID09PSAnXCInICYmIHN0ci5zdWJzdHIoLTEpID09PSAnXCInKSA/IHN0ci5zdWJzdHIoMSwgc3RyLmxlbmd0aCAtIDIpIDogc3RyO1xufTtcblxudmFyIG1lZGlhVHlwZU1hdGNoZXIgPSAvXihhcHBsaWNhdGlvbnxhdWRpb3xpbWFnZXxtZXNzYWdlfG1vZGVsfG11bHRpcGFydHx0ZXh0fHZpZGVvfFxcKilcXC8oW2EtekEtWjAtOSEjJCVeJlxcKl9cXC1cXCt7fVxcfCcuYH5dezEsMTI3fSkoOy4qKT8kLztcblxudmFyIHBhcmFtZXRlclNwbGl0dGVyID0gLzsoPz0oPzpbXlxcXCJdKlxcXCJbXlxcXCJdKlxcXCIpKig/IVteXFxcIl0qXFxcIikpLztcblxuZXhwb3J0cy5mcm9tU3RyaW5nID0gZnVuY3Rpb24oc3RyKSB7XG4gIHZhciBtZWRpYVR5cGUgPSBuZXcgTWVkaWFUeXBlKCk7XG4gIGlmIChzdHIpIHtcbiAgICB2YXIgbWF0Y2ggPSBzdHIubWF0Y2gobWVkaWFUeXBlTWF0Y2hlcik7XG4gICAgaWYgKG1hdGNoICYmICEobWF0Y2hbMV0gPT09ICcqJyAmJiBtYXRjaFsyXSAhPT0gJyonKSkgeyBcbiAgICAgIG1lZGlhVHlwZS50eXBlID0gbWF0Y2hbMV07XG4gICAgICBtZWRpYVR5cGUuX3NldFN1YnR5cGVBbmRTdWZmaXgobWF0Y2hbMl0pO1xuICAgICAgaWYgKG1hdGNoWzNdKSB7XG4gICAgICAgIG1hdGNoWzNdLnN1YnN0cigxKS5zcGxpdChwYXJhbWV0ZXJTcGxpdHRlcikuZm9yRWFjaChmdW5jdGlvbihwYXJhbWV0ZXIpIHtcbiAgICAgICAgICB2YXIga2V5QW5kVmFsdWUgPSBwYXJhbWV0ZXIuc3BsaXQoJz0nLCAyKTtcbiAgICAgICAgICBpZiAoa2V5QW5kVmFsdWUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBtZWRpYVR5cGUucGFyYW1ldGVyc1trZXlBbmRWYWx1ZVswXS50b0xvd2VyQ2FzZSgpLnRyaW0oKV0gPSB1bndyYXBRdW90ZXMoa2V5QW5kVmFsdWVbMV0udHJpbSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbWVkaWFUeXBlO1xufTtcbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgaXNBcmdzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpO1xuXG52YXIgb3JpZ0tleXMgPSBPYmplY3Qua2V5cztcbnZhciBrZXlzU2hpbSA9IG9yaWdLZXlzID8gZnVuY3Rpb24ga2V5cyhvKSB7IHJldHVybiBvcmlnS2V5cyhvKTsgfSA6IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxudmFyIG9yaWdpbmFsS2V5cyA9IE9iamVjdC5rZXlzO1xuXG5rZXlzU2hpbS5zaGltID0gZnVuY3Rpb24gc2hpbU9iamVjdEtleXMoKSB7XG5cdGlmIChPYmplY3Qua2V5cykge1xuXHRcdHZhciBrZXlzV29ya3NXaXRoQXJndW1lbnRzID0gKGZ1bmN0aW9uICgpIHtcblx0XHRcdC8vIFNhZmFyaSA1LjAgYnVnXG5cdFx0XHR2YXIgYXJncyA9IE9iamVjdC5rZXlzKGFyZ3VtZW50cyk7XG5cdFx0XHRyZXR1cm4gYXJncyAmJiBhcmdzLmxlbmd0aCA9PT0gYXJndW1lbnRzLmxlbmd0aDtcblx0XHR9KDEsIDIpKTtcblx0XHRpZiAoIWtleXNXb3Jrc1dpdGhBcmd1bWVudHMpIHtcblx0XHRcdE9iamVjdC5rZXlzID0gZnVuY3Rpb24ga2V5cyhvYmplY3QpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBmdW5jLW5hbWUtbWF0Y2hpbmdcblx0XHRcdFx0aWYgKGlzQXJncyhvYmplY3QpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9yaWdpbmFsS2V5cyhzbGljZS5jYWxsKG9iamVjdCkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMob2JqZWN0KTtcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdE9iamVjdC5rZXlzID0ga2V5c1NoaW07XG5cdH1cblx0cmV0dXJuIE9iamVjdC5rZXlzIHx8IGtleXNTaGltO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzU2hpbTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0FyZ3VtZW50cyh2YWx1ZSkge1xuXHR2YXIgc3RyID0gdG9TdHIuY2FsbCh2YWx1ZSk7XG5cdHZhciBpc0FyZ3MgPSBzdHIgPT09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXHRpZiAoIWlzQXJncykge1xuXHRcdGlzQXJncyA9IHN0ciAhPT0gJ1tvYmplY3QgQXJyYXldJyAmJlxuXHRcdFx0dmFsdWUgIT09IG51bGwgJiZcblx0XHRcdHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcblx0XHRcdHR5cGVvZiB2YWx1ZS5sZW5ndGggPT09ICdudW1iZXInICYmXG5cdFx0XHR2YWx1ZS5sZW5ndGggPj0gMCAmJlxuXHRcdFx0dG9TdHIuY2FsbCh2YWx1ZS5jYWxsZWUpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHR9XG5cdHJldHVybiBpc0FyZ3M7XG59O1xuIiwidmFyIHRyaW0gPSByZXF1aXJlKCdzdHJpbmcucHJvdG90eXBlLnRyaW0nKVxuICAsIGZvckVhY2ggPSByZXF1aXJlKCdmb3ItZWFjaCcpXG4gICwgaXNBcnJheSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGVhZGVycykge1xuICBpZiAoIWhlYWRlcnMpXG4gICAgcmV0dXJuIHt9XG5cbiAgdmFyIHJlc3VsdCA9IHt9XG5cbiAgZm9yRWFjaChcbiAgICAgIHRyaW0oaGVhZGVycykuc3BsaXQoJ1xcbicpXG4gICAgLCBmdW5jdGlvbiAocm93KSB7XG4gICAgICAgIHZhciBpbmRleCA9IHJvdy5pbmRleE9mKCc6JylcbiAgICAgICAgICAsIGtleSA9IHRyaW0ocm93LnNsaWNlKDAsIGluZGV4KSkudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICwgdmFsdWUgPSB0cmltKHJvdy5zbGljZShpbmRleCArIDEpKVxuXG4gICAgICAgIGlmICh0eXBlb2YocmVzdWx0W2tleV0pID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWVcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KHJlc3VsdFtrZXldKSkge1xuICAgICAgICAgIHJlc3VsdFtrZXldLnB1c2godmFsdWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBbIHJlc3VsdFtrZXldLCB2YWx1ZSBdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgKVxuXG4gIHJldHVybiByZXN1bHRcbn1cbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLyoqIVxuICogQGZpbGVPdmVydmlldyBLaWNrYXNzIGxpYnJhcnkgdG8gY3JlYXRlIGFuZCBwbGFjZSBwb3BwZXJzIG5lYXIgdGhlaXIgcmVmZXJlbmNlIGVsZW1lbnRzLlxuICogQHZlcnNpb24gMS4xNS4wXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE2IEZlZGVyaWNvIFppdm9sbyBhbmQgY29udHJpYnV0b3JzXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xudmFyIGlzQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbnZhciBsb25nZXJUaW1lb3V0QnJvd3NlcnMgPSBbJ0VkZ2UnLCAnVHJpZGVudCcsICdGaXJlZm94J107XG52YXIgdGltZW91dER1cmF0aW9uID0gMDtcbmZvciAodmFyIGkgPSAwOyBpIDwgbG9uZ2VyVGltZW91dEJyb3dzZXJzLmxlbmd0aDsgaSArPSAxKSB7XG4gIGlmIChpc0Jyb3dzZXIgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKGxvbmdlclRpbWVvdXRCcm93c2Vyc1tpXSkgPj0gMCkge1xuICAgIHRpbWVvdXREdXJhdGlvbiA9IDE7XG4gICAgYnJlYWs7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWljcm90YXNrRGVib3VuY2UoZm4pIHtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmIChjYWxsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2FsbGVkID0gdHJ1ZTtcbiAgICB3aW5kb3cuUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsZWQgPSBmYWxzZTtcbiAgICAgIGZuKCk7XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRhc2tEZWJvdW5jZShmbikge1xuICB2YXIgc2NoZWR1bGVkID0gZmFsc2U7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFzY2hlZHVsZWQpIHtcbiAgICAgIHNjaGVkdWxlZCA9IHRydWU7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2NoZWR1bGVkID0gZmFsc2U7XG4gICAgICAgIGZuKCk7XG4gICAgICB9LCB0aW1lb3V0RHVyYXRpb24pO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIHN1cHBvcnRzTWljcm9UYXNrcyA9IGlzQnJvd3NlciAmJiB3aW5kb3cuUHJvbWlzZTtcblxuLyoqXG4qIENyZWF0ZSBhIGRlYm91bmNlZCB2ZXJzaW9uIG9mIGEgbWV0aG9kLCB0aGF0J3MgYXN5bmNocm9ub3VzbHkgZGVmZXJyZWRcbiogYnV0IGNhbGxlZCBpbiB0aGUgbWluaW11bSB0aW1lIHBvc3NpYmxlLlxuKlxuKiBAbWV0aG9kXG4qIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiogQGFyZ3VtZW50IHtGdW5jdGlvbn0gZm5cbiogQHJldHVybnMge0Z1bmN0aW9ufVxuKi9cbnZhciBkZWJvdW5jZSA9IHN1cHBvcnRzTWljcm9UYXNrcyA/IG1pY3JvdGFza0RlYm91bmNlIDogdGFza0RlYm91bmNlO1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBnaXZlbiB2YXJpYWJsZSBpcyBhIGZ1bmN0aW9uXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0FueX0gZnVuY3Rpb25Ub0NoZWNrIC0gdmFyaWFibGUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtCb29sZWFufSBhbnN3ZXIgdG86IGlzIGEgZnVuY3Rpb24/XG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oZnVuY3Rpb25Ub0NoZWNrKSB7XG4gIHZhciBnZXRUeXBlID0ge307XG4gIHJldHVybiBmdW5jdGlvblRvQ2hlY2sgJiYgZ2V0VHlwZS50b1N0cmluZy5jYWxsKGZ1bmN0aW9uVG9DaGVjaykgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5cbi8qKlxuICogR2V0IENTUyBjb21wdXRlZCBwcm9wZXJ0eSBvZiB0aGUgZ2l2ZW4gZWxlbWVudFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFZW1lbnR9IGVsZW1lbnRcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBwcm9wZXJ0eVxuICovXG5mdW5jdGlvbiBnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkoZWxlbWVudCwgcHJvcGVydHkpIHtcbiAgaWYgKGVsZW1lbnQubm9kZVR5cGUgIT09IDEpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgLy8gTk9URTogMSBET00gYWNjZXNzIGhlcmVcbiAgdmFyIHdpbmRvdyA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcbiAgdmFyIGNzcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIG51bGwpO1xuICByZXR1cm4gcHJvcGVydHkgPyBjc3NbcHJvcGVydHldIDogY3NzO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBhcmVudE5vZGUgb3IgdGhlIGhvc3Qgb2YgdGhlIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0VsZW1lbnR9IHBhcmVudFxuICovXG5mdW5jdGlvbiBnZXRQYXJlbnROb2RlKGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQubm9kZU5hbWUgPT09ICdIVE1MJykge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG4gIHJldHVybiBlbGVtZW50LnBhcmVudE5vZGUgfHwgZWxlbWVudC5ob3N0O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHNjcm9sbGluZyBwYXJlbnQgb2YgdGhlIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0VsZW1lbnR9IHNjcm9sbCBwYXJlbnRcbiAqL1xuZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KGVsZW1lbnQpIHtcbiAgLy8gUmV0dXJuIGJvZHksIGBnZXRTY3JvbGxgIHdpbGwgdGFrZSBjYXJlIHRvIGdldCB0aGUgY29ycmVjdCBgc2Nyb2xsVG9wYCBmcm9tIGl0XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiBkb2N1bWVudC5ib2R5O1xuICB9XG5cbiAgc3dpdGNoIChlbGVtZW50Lm5vZGVOYW1lKSB7XG4gICAgY2FzZSAnSFRNTCc6XG4gICAgY2FzZSAnQk9EWSc6XG4gICAgICByZXR1cm4gZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHk7XG4gICAgY2FzZSAnI2RvY3VtZW50JzpcbiAgICAgIHJldHVybiBlbGVtZW50LmJvZHk7XG4gIH1cblxuICAvLyBGaXJlZm94IHdhbnQgdXMgdG8gY2hlY2sgYC14YCBhbmQgYC15YCB2YXJpYXRpb25zIGFzIHdlbGxcblxuICB2YXIgX2dldFN0eWxlQ29tcHV0ZWRQcm9wID0gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGVsZW1lbnQpLFxuICAgICAgb3ZlcmZsb3cgPSBfZ2V0U3R5bGVDb21wdXRlZFByb3Aub3ZlcmZsb3csXG4gICAgICBvdmVyZmxvd1ggPSBfZ2V0U3R5bGVDb21wdXRlZFByb3Aub3ZlcmZsb3dYLFxuICAgICAgb3ZlcmZsb3dZID0gX2dldFN0eWxlQ29tcHV0ZWRQcm9wLm92ZXJmbG93WTtcblxuICBpZiAoLyhhdXRvfHNjcm9sbHxvdmVybGF5KS8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCkpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiBnZXRTY3JvbGxQYXJlbnQoZ2V0UGFyZW50Tm9kZShlbGVtZW50KSk7XG59XG5cbnZhciBpc0lFMTEgPSBpc0Jyb3dzZXIgJiYgISEod2luZG93Lk1TSW5wdXRNZXRob2RDb250ZXh0ICYmIGRvY3VtZW50LmRvY3VtZW50TW9kZSk7XG52YXIgaXNJRTEwID0gaXNCcm93c2VyICYmIC9NU0lFIDEwLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGJyb3dzZXIgaXMgSW50ZXJuZXQgRXhwbG9yZXJcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7TnVtYmVyfSB2ZXJzaW9uIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gaXNJRVxuICovXG5mdW5jdGlvbiBpc0lFKHZlcnNpb24pIHtcbiAgaWYgKHZlcnNpb24gPT09IDExKSB7XG4gICAgcmV0dXJuIGlzSUUxMTtcbiAgfVxuICBpZiAodmVyc2lvbiA9PT0gMTApIHtcbiAgICByZXR1cm4gaXNJRTEwO1xuICB9XG4gIHJldHVybiBpc0lFMTEgfHwgaXNJRTEwO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG9mZnNldCBwYXJlbnQgb2YgdGhlIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0VsZW1lbnR9IG9mZnNldCBwYXJlbnRcbiAqL1xuZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfVxuXG4gIHZhciBub09mZnNldFBhcmVudCA9IGlzSUUoMTApID8gZG9jdW1lbnQuYm9keSA6IG51bGw7XG5cbiAgLy8gTk9URTogMSBET00gYWNjZXNzIGhlcmVcbiAgdmFyIG9mZnNldFBhcmVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50IHx8IG51bGw7XG4gIC8vIFNraXAgaGlkZGVuIGVsZW1lbnRzIHdoaWNoIGRvbid0IGhhdmUgYW4gb2Zmc2V0UGFyZW50XG4gIHdoaWxlIChvZmZzZXRQYXJlbnQgPT09IG5vT2Zmc2V0UGFyZW50ICYmIGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKSB7XG4gICAgb2Zmc2V0UGFyZW50ID0gKGVsZW1lbnQgPSBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZykub2Zmc2V0UGFyZW50O1xuICB9XG5cbiAgdmFyIG5vZGVOYW1lID0gb2Zmc2V0UGFyZW50ICYmIG9mZnNldFBhcmVudC5ub2RlTmFtZTtcblxuICBpZiAoIW5vZGVOYW1lIHx8IG5vZGVOYW1lID09PSAnQk9EWScgfHwgbm9kZU5hbWUgPT09ICdIVE1MJykge1xuICAgIHJldHVybiBlbGVtZW50ID8gZWxlbWVudC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfVxuXG4gIC8vIC5vZmZzZXRQYXJlbnQgd2lsbCByZXR1cm4gdGhlIGNsb3Nlc3QgVEgsIFREIG9yIFRBQkxFIGluIGNhc2VcbiAgLy8gbm8gb2Zmc2V0UGFyZW50IGlzIHByZXNlbnQsIEkgaGF0ZSB0aGlzIGpvYi4uLlxuICBpZiAoWydUSCcsICdURCcsICdUQUJMRSddLmluZGV4T2Yob2Zmc2V0UGFyZW50Lm5vZGVOYW1lKSAhPT0gLTEgJiYgZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KG9mZnNldFBhcmVudCwgJ3Bvc2l0aW9uJykgPT09ICdzdGF0aWMnKSB7XG4gICAgcmV0dXJuIGdldE9mZnNldFBhcmVudChvZmZzZXRQYXJlbnQpO1xuICB9XG5cbiAgcmV0dXJuIG9mZnNldFBhcmVudDtcbn1cblxuZnVuY3Rpb24gaXNPZmZzZXRDb250YWluZXIoZWxlbWVudCkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lO1xuXG4gIGlmIChub2RlTmFtZSA9PT0gJ0JPRFknKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBub2RlTmFtZSA9PT0gJ0hUTUwnIHx8IGdldE9mZnNldFBhcmVudChlbGVtZW50LmZpcnN0RWxlbWVudENoaWxkKSA9PT0gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgcm9vdCBub2RlIChkb2N1bWVudCwgc2hhZG93RE9NIHJvb3QpIG9mIHRoZSBnaXZlbiBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IG5vZGVcbiAqIEByZXR1cm5zIHtFbGVtZW50fSByb290IG5vZGVcbiAqL1xuZnVuY3Rpb24gZ2V0Um9vdChub2RlKSB7XG4gIGlmIChub2RlLnBhcmVudE5vZGUgIT09IG51bGwpIHtcbiAgICByZXR1cm4gZ2V0Um9vdChub2RlLnBhcmVudE5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIG9mZnNldCBwYXJlbnQgY29tbW9uIHRvIHRoZSB0d28gcHJvdmlkZWQgbm9kZXNcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudDFcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudDJcbiAqIEByZXR1cm5zIHtFbGVtZW50fSBjb21tb24gb2Zmc2V0IHBhcmVudFxuICovXG5mdW5jdGlvbiBmaW5kQ29tbW9uT2Zmc2V0UGFyZW50KGVsZW1lbnQxLCBlbGVtZW50Mikge1xuICAvLyBUaGlzIGNoZWNrIGlzIG5lZWRlZCB0byBhdm9pZCBlcnJvcnMgaW4gY2FzZSBvbmUgb2YgdGhlIGVsZW1lbnRzIGlzbid0IGRlZmluZWQgZm9yIGFueSByZWFzb25cbiAgaWYgKCFlbGVtZW50MSB8fCAhZWxlbWVudDEubm9kZVR5cGUgfHwgIWVsZW1lbnQyIHx8ICFlbGVtZW50Mi5ub2RlVHlwZSkge1xuICAgIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIH1cblxuICAvLyBIZXJlIHdlIG1ha2Ugc3VyZSB0byBnaXZlIGFzIFwic3RhcnRcIiB0aGUgZWxlbWVudCB0aGF0IGNvbWVzIGZpcnN0IGluIHRoZSBET01cbiAgdmFyIG9yZGVyID0gZWxlbWVudDEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZWxlbWVudDIpICYgTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkc7XG4gIHZhciBzdGFydCA9IG9yZGVyID8gZWxlbWVudDEgOiBlbGVtZW50MjtcbiAgdmFyIGVuZCA9IG9yZGVyID8gZWxlbWVudDIgOiBlbGVtZW50MTtcblxuICAvLyBHZXQgY29tbW9uIGFuY2VzdG9yIGNvbnRhaW5lclxuICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICByYW5nZS5zZXRTdGFydChzdGFydCwgMCk7XG4gIHJhbmdlLnNldEVuZChlbmQsIDApO1xuICB2YXIgY29tbW9uQW5jZXN0b3JDb250YWluZXIgPSByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtcblxuICAvLyBCb3RoIG5vZGVzIGFyZSBpbnNpZGUgI2RvY3VtZW50XG5cbiAgaWYgKGVsZW1lbnQxICE9PSBjb21tb25BbmNlc3RvckNvbnRhaW5lciAmJiBlbGVtZW50MiAhPT0gY29tbW9uQW5jZXN0b3JDb250YWluZXIgfHwgc3RhcnQuY29udGFpbnMoZW5kKSkge1xuICAgIGlmIChpc09mZnNldENvbnRhaW5lcihjb21tb25BbmNlc3RvckNvbnRhaW5lcikpIHtcbiAgICAgIHJldHVybiBjb21tb25BbmNlc3RvckNvbnRhaW5lcjtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0T2Zmc2V0UGFyZW50KGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKTtcbiAgfVxuXG4gIC8vIG9uZSBvZiB0aGUgbm9kZXMgaXMgaW5zaWRlIHNoYWRvd0RPTSwgZmluZCB3aGljaCBvbmVcbiAgdmFyIGVsZW1lbnQxcm9vdCA9IGdldFJvb3QoZWxlbWVudDEpO1xuICBpZiAoZWxlbWVudDFyb290Lmhvc3QpIHtcbiAgICByZXR1cm4gZmluZENvbW1vbk9mZnNldFBhcmVudChlbGVtZW50MXJvb3QuaG9zdCwgZWxlbWVudDIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmaW5kQ29tbW9uT2Zmc2V0UGFyZW50KGVsZW1lbnQxLCBnZXRSb290KGVsZW1lbnQyKS5ob3N0KTtcbiAgfVxufVxuXG4vKipcbiAqIEdldHMgdGhlIHNjcm9sbCB2YWx1ZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudCBpbiB0aGUgZ2l2ZW4gc2lkZSAodG9wIGFuZCBsZWZ0KVxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50XG4gKiBAYXJndW1lbnQge1N0cmluZ30gc2lkZSBgdG9wYCBvciBgbGVmdGBcbiAqIEByZXR1cm5zIHtudW1iZXJ9IGFtb3VudCBvZiBzY3JvbGxlZCBwaXhlbHNcbiAqL1xuZnVuY3Rpb24gZ2V0U2Nyb2xsKGVsZW1lbnQpIHtcbiAgdmFyIHNpZGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICd0b3AnO1xuXG4gIHZhciB1cHBlclNpZGUgPSBzaWRlID09PSAndG9wJyA/ICdzY3JvbGxUb3AnIDogJ3Njcm9sbExlZnQnO1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lO1xuXG4gIGlmIChub2RlTmFtZSA9PT0gJ0JPRFknIHx8IG5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICB2YXIgaHRtbCA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgdmFyIHNjcm9sbGluZ0VsZW1lbnQgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCB8fCBodG1sO1xuICAgIHJldHVybiBzY3JvbGxpbmdFbGVtZW50W3VwcGVyU2lkZV07XG4gIH1cblxuICByZXR1cm4gZWxlbWVudFt1cHBlclNpZGVdO1xufVxuXG4vKlxuICogU3VtIG9yIHN1YnRyYWN0IHRoZSBlbGVtZW50IHNjcm9sbCB2YWx1ZXMgKGxlZnQgYW5kIHRvcCkgZnJvbSBhIGdpdmVuIHJlY3Qgb2JqZWN0XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge09iamVjdH0gcmVjdCAtIFJlY3Qgb2JqZWN0IHlvdSB3YW50IHRvIGNoYW5nZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIFRoZSBlbGVtZW50IGZyb20gdGhlIGZ1bmN0aW9uIHJlYWRzIHRoZSBzY3JvbGwgdmFsdWVzXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHN1YnRyYWN0IC0gc2V0IHRvIHRydWUgaWYgeW91IHdhbnQgdG8gc3VidHJhY3QgdGhlIHNjcm9sbCB2YWx1ZXNcbiAqIEByZXR1cm4ge09iamVjdH0gcmVjdCAtIFRoZSBtb2RpZmllciByZWN0IG9iamVjdFxuICovXG5mdW5jdGlvbiBpbmNsdWRlU2Nyb2xsKHJlY3QsIGVsZW1lbnQpIHtcbiAgdmFyIHN1YnRyYWN0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcblxuICB2YXIgc2Nyb2xsVG9wID0gZ2V0U2Nyb2xsKGVsZW1lbnQsICd0b3AnKTtcbiAgdmFyIHNjcm9sbExlZnQgPSBnZXRTY3JvbGwoZWxlbWVudCwgJ2xlZnQnKTtcbiAgdmFyIG1vZGlmaWVyID0gc3VidHJhY3QgPyAtMSA6IDE7XG4gIHJlY3QudG9wICs9IHNjcm9sbFRvcCAqIG1vZGlmaWVyO1xuICByZWN0LmJvdHRvbSArPSBzY3JvbGxUb3AgKiBtb2RpZmllcjtcbiAgcmVjdC5sZWZ0ICs9IHNjcm9sbExlZnQgKiBtb2RpZmllcjtcbiAgcmVjdC5yaWdodCArPSBzY3JvbGxMZWZ0ICogbW9kaWZpZXI7XG4gIHJldHVybiByZWN0O1xufVxuXG4vKlxuICogSGVscGVyIHRvIGRldGVjdCBib3JkZXJzIG9mIGEgZ2l2ZW4gZWxlbWVudFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHtDU1NTdHlsZURlY2xhcmF0aW9ufSBzdHlsZXNcbiAqIFJlc3VsdCBvZiBgZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5YCBvbiB0aGUgZ2l2ZW4gZWxlbWVudFxuICogQHBhcmFtIHtTdHJpbmd9IGF4aXMgLSBgeGAgb3IgYHlgXG4gKiBAcmV0dXJuIHtudW1iZXJ9IGJvcmRlcnMgLSBUaGUgYm9yZGVycyBzaXplIG9mIHRoZSBnaXZlbiBheGlzXG4gKi9cblxuZnVuY3Rpb24gZ2V0Qm9yZGVyc1NpemUoc3R5bGVzLCBheGlzKSB7XG4gIHZhciBzaWRlQSA9IGF4aXMgPT09ICd4JyA/ICdMZWZ0JyA6ICdUb3AnO1xuICB2YXIgc2lkZUIgPSBzaWRlQSA9PT0gJ0xlZnQnID8gJ1JpZ2h0JyA6ICdCb3R0b20nO1xuXG4gIHJldHVybiBwYXJzZUZsb2F0KHN0eWxlc1snYm9yZGVyJyArIHNpZGVBICsgJ1dpZHRoJ10sIDEwKSArIHBhcnNlRmxvYXQoc3R5bGVzWydib3JkZXInICsgc2lkZUIgKyAnV2lkdGgnXSwgMTApO1xufVxuXG5mdW5jdGlvbiBnZXRTaXplKGF4aXMsIGJvZHksIGh0bWwsIGNvbXB1dGVkU3R5bGUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KGJvZHlbJ29mZnNldCcgKyBheGlzXSwgYm9keVsnc2Nyb2xsJyArIGF4aXNdLCBodG1sWydjbGllbnQnICsgYXhpc10sIGh0bWxbJ29mZnNldCcgKyBheGlzXSwgaHRtbFsnc2Nyb2xsJyArIGF4aXNdLCBpc0lFKDEwKSA/IHBhcnNlSW50KGh0bWxbJ29mZnNldCcgKyBheGlzXSkgKyBwYXJzZUludChjb21wdXRlZFN0eWxlWydtYXJnaW4nICsgKGF4aXMgPT09ICdIZWlnaHQnID8gJ1RvcCcgOiAnTGVmdCcpXSkgKyBwYXJzZUludChjb21wdXRlZFN0eWxlWydtYXJnaW4nICsgKGF4aXMgPT09ICdIZWlnaHQnID8gJ0JvdHRvbScgOiAnUmlnaHQnKV0pIDogMCk7XG59XG5cbmZ1bmN0aW9uIGdldFdpbmRvd1NpemVzKGRvY3VtZW50KSB7XG4gIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgdmFyIGh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIHZhciBjb21wdXRlZFN0eWxlID0gaXNJRSgxMCkgJiYgZ2V0Q29tcHV0ZWRTdHlsZShodG1sKTtcblxuICByZXR1cm4ge1xuICAgIGhlaWdodDogZ2V0U2l6ZSgnSGVpZ2h0JywgYm9keSwgaHRtbCwgY29tcHV0ZWRTdHlsZSksXG4gICAgd2lkdGg6IGdldFNpemUoJ1dpZHRoJywgYm9keSwgaHRtbCwgY29tcHV0ZWRTdHlsZSlcbiAgfTtcbn1cblxudmFyIGNsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn07XG5cbnZhciBjcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfTtcbn0oKTtcblxuXG5cblxuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59O1xuXG4vKipcbiAqIEdpdmVuIGVsZW1lbnQgb2Zmc2V0cywgZ2VuZXJhdGUgYW4gb3V0cHV0IHNpbWlsYXIgdG8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge09iamVjdH0gb2Zmc2V0c1xuICogQHJldHVybnMge09iamVjdH0gQ2xpZW50UmVjdCBsaWtlIG91dHB1dFxuICovXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0KG9mZnNldHMpIHtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvZmZzZXRzLCB7XG4gICAgcmlnaHQ6IG9mZnNldHMubGVmdCArIG9mZnNldHMud2lkdGgsXG4gICAgYm90dG9tOiBvZmZzZXRzLnRvcCArIG9mZnNldHMuaGVpZ2h0XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBib3VuZGluZyBjbGllbnQgcmVjdCBvZiBnaXZlbiBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHtPYmplY3R9IGNsaWVudCByZWN0XG4gKi9cbmZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50KSB7XG4gIHZhciByZWN0ID0ge307XG5cbiAgLy8gSUUxMCAxMCBGSVg6IFBsZWFzZSwgZG9uJ3QgYXNrLCB0aGUgZWxlbWVudCBpc24ndFxuICAvLyBjb25zaWRlcmVkIGluIERPTSBpbiBzb21lIGNpcmN1bXN0YW5jZXMuLi5cbiAgLy8gVGhpcyBpc24ndCByZXByb2R1Y2libGUgaW4gSUUxMCBjb21wYXRpYmlsaXR5IG1vZGUgb2YgSUUxMVxuICB0cnkge1xuICAgIGlmIChpc0lFKDEwKSkge1xuICAgICAgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB2YXIgc2Nyb2xsVG9wID0gZ2V0U2Nyb2xsKGVsZW1lbnQsICd0b3AnKTtcbiAgICAgIHZhciBzY3JvbGxMZWZ0ID0gZ2V0U2Nyb2xsKGVsZW1lbnQsICdsZWZ0Jyk7XG4gICAgICByZWN0LnRvcCArPSBzY3JvbGxUb3A7XG4gICAgICByZWN0LmxlZnQgKz0gc2Nyb2xsTGVmdDtcbiAgICAgIHJlY3QuYm90dG9tICs9IHNjcm9sbFRvcDtcbiAgICAgIHJlY3QucmlnaHQgKz0gc2Nyb2xsTGVmdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSB7XG4gICAgbGVmdDogcmVjdC5sZWZ0LFxuICAgIHRvcDogcmVjdC50b3AsXG4gICAgd2lkdGg6IHJlY3QucmlnaHQgLSByZWN0LmxlZnQsXG4gICAgaGVpZ2h0OiByZWN0LmJvdHRvbSAtIHJlY3QudG9wXG4gIH07XG5cbiAgLy8gc3VidHJhY3Qgc2Nyb2xsYmFyIHNpemUgZnJvbSBzaXplc1xuICB2YXIgc2l6ZXMgPSBlbGVtZW50Lm5vZGVOYW1lID09PSAnSFRNTCcgPyBnZXRXaW5kb3dTaXplcyhlbGVtZW50Lm93bmVyRG9jdW1lbnQpIDoge307XG4gIHZhciB3aWR0aCA9IHNpemVzLndpZHRoIHx8IGVsZW1lbnQuY2xpZW50V2lkdGggfHwgcmVzdWx0LnJpZ2h0IC0gcmVzdWx0LmxlZnQ7XG4gIHZhciBoZWlnaHQgPSBzaXplcy5oZWlnaHQgfHwgZWxlbWVudC5jbGllbnRIZWlnaHQgfHwgcmVzdWx0LmJvdHRvbSAtIHJlc3VsdC50b3A7XG5cbiAgdmFyIGhvcml6U2Nyb2xsYmFyID0gZWxlbWVudC5vZmZzZXRXaWR0aCAtIHdpZHRoO1xuICB2YXIgdmVydFNjcm9sbGJhciA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gaGVpZ2h0O1xuXG4gIC8vIGlmIGFuIGh5cG90aGV0aWNhbCBzY3JvbGxiYXIgaXMgZGV0ZWN0ZWQsIHdlIG11c3QgYmUgc3VyZSBpdCdzIG5vdCBhIGBib3JkZXJgXG4gIC8vIHdlIG1ha2UgdGhpcyBjaGVjayBjb25kaXRpb25hbCBmb3IgcGVyZm9ybWFuY2UgcmVhc29uc1xuICBpZiAoaG9yaXpTY3JvbGxiYXIgfHwgdmVydFNjcm9sbGJhcikge1xuICAgIHZhciBzdHlsZXMgPSBnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkoZWxlbWVudCk7XG4gICAgaG9yaXpTY3JvbGxiYXIgLT0gZ2V0Qm9yZGVyc1NpemUoc3R5bGVzLCAneCcpO1xuICAgIHZlcnRTY3JvbGxiYXIgLT0gZ2V0Qm9yZGVyc1NpemUoc3R5bGVzLCAneScpO1xuXG4gICAgcmVzdWx0LndpZHRoIC09IGhvcml6U2Nyb2xsYmFyO1xuICAgIHJlc3VsdC5oZWlnaHQgLT0gdmVydFNjcm9sbGJhcjtcbiAgfVxuXG4gIHJldHVybiBnZXRDbGllbnRSZWN0KHJlc3VsdCk7XG59XG5cbmZ1bmN0aW9uIGdldE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJiaXRyYXJ5Tm9kZShjaGlsZHJlbiwgcGFyZW50KSB7XG4gIHZhciBmaXhlZFBvc2l0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcblxuICB2YXIgaXNJRTEwID0gaXNJRSgxMCk7XG4gIHZhciBpc0hUTUwgPSBwYXJlbnQubm9kZU5hbWUgPT09ICdIVE1MJztcbiAgdmFyIGNoaWxkcmVuUmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChjaGlsZHJlbik7XG4gIHZhciBwYXJlbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHBhcmVudCk7XG4gIHZhciBzY3JvbGxQYXJlbnQgPSBnZXRTY3JvbGxQYXJlbnQoY2hpbGRyZW4pO1xuXG4gIHZhciBzdHlsZXMgPSBnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkocGFyZW50KTtcbiAgdmFyIGJvcmRlclRvcFdpZHRoID0gcGFyc2VGbG9hdChzdHlsZXMuYm9yZGVyVG9wV2lkdGgsIDEwKTtcbiAgdmFyIGJvcmRlckxlZnRXaWR0aCA9IHBhcnNlRmxvYXQoc3R5bGVzLmJvcmRlckxlZnRXaWR0aCwgMTApO1xuXG4gIC8vIEluIGNhc2VzIHdoZXJlIHRoZSBwYXJlbnQgaXMgZml4ZWQsIHdlIG11c3QgaWdub3JlIG5lZ2F0aXZlIHNjcm9sbCBpbiBvZmZzZXQgY2FsY1xuICBpZiAoZml4ZWRQb3NpdGlvbiAmJiBpc0hUTUwpIHtcbiAgICBwYXJlbnRSZWN0LnRvcCA9IE1hdGgubWF4KHBhcmVudFJlY3QudG9wLCAwKTtcbiAgICBwYXJlbnRSZWN0LmxlZnQgPSBNYXRoLm1heChwYXJlbnRSZWN0LmxlZnQsIDApO1xuICB9XG4gIHZhciBvZmZzZXRzID0gZ2V0Q2xpZW50UmVjdCh7XG4gICAgdG9wOiBjaGlsZHJlblJlY3QudG9wIC0gcGFyZW50UmVjdC50b3AgLSBib3JkZXJUb3BXaWR0aCxcbiAgICBsZWZ0OiBjaGlsZHJlblJlY3QubGVmdCAtIHBhcmVudFJlY3QubGVmdCAtIGJvcmRlckxlZnRXaWR0aCxcbiAgICB3aWR0aDogY2hpbGRyZW5SZWN0LndpZHRoLFxuICAgIGhlaWdodDogY2hpbGRyZW5SZWN0LmhlaWdodFxuICB9KTtcbiAgb2Zmc2V0cy5tYXJnaW5Ub3AgPSAwO1xuICBvZmZzZXRzLm1hcmdpbkxlZnQgPSAwO1xuXG4gIC8vIFN1YnRyYWN0IG1hcmdpbnMgb2YgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgaXQncyBiZWluZyB1c2VkIGFzIHBhcmVudFxuICAvLyB3ZSBkbyB0aGlzIG9ubHkgb24gSFRNTCBiZWNhdXNlIGl0J3MgdGhlIG9ubHkgZWxlbWVudCB0aGF0IGJlaGF2ZXNcbiAgLy8gZGlmZmVyZW50bHkgd2hlbiBtYXJnaW5zIGFyZSBhcHBsaWVkIHRvIGl0LiBUaGUgbWFyZ2lucyBhcmUgaW5jbHVkZWQgaW5cbiAgLy8gdGhlIGJveCBvZiB0aGUgZG9jdW1lbnRFbGVtZW50LCBpbiB0aGUgb3RoZXIgY2FzZXMgbm90LlxuICBpZiAoIWlzSUUxMCAmJiBpc0hUTUwpIHtcbiAgICB2YXIgbWFyZ2luVG9wID0gcGFyc2VGbG9hdChzdHlsZXMubWFyZ2luVG9wLCAxMCk7XG4gICAgdmFyIG1hcmdpbkxlZnQgPSBwYXJzZUZsb2F0KHN0eWxlcy5tYXJnaW5MZWZ0LCAxMCk7XG5cbiAgICBvZmZzZXRzLnRvcCAtPSBib3JkZXJUb3BXaWR0aCAtIG1hcmdpblRvcDtcbiAgICBvZmZzZXRzLmJvdHRvbSAtPSBib3JkZXJUb3BXaWR0aCAtIG1hcmdpblRvcDtcbiAgICBvZmZzZXRzLmxlZnQgLT0gYm9yZGVyTGVmdFdpZHRoIC0gbWFyZ2luTGVmdDtcbiAgICBvZmZzZXRzLnJpZ2h0IC09IGJvcmRlckxlZnRXaWR0aCAtIG1hcmdpbkxlZnQ7XG5cbiAgICAvLyBBdHRhY2ggbWFyZ2luVG9wIGFuZCBtYXJnaW5MZWZ0IGJlY2F1c2UgaW4gc29tZSBjaXJjdW1zdGFuY2VzIHdlIG1heSBuZWVkIHRoZW1cbiAgICBvZmZzZXRzLm1hcmdpblRvcCA9IG1hcmdpblRvcDtcbiAgICBvZmZzZXRzLm1hcmdpbkxlZnQgPSBtYXJnaW5MZWZ0O1xuICB9XG5cbiAgaWYgKGlzSUUxMCAmJiAhZml4ZWRQb3NpdGlvbiA/IHBhcmVudC5jb250YWlucyhzY3JvbGxQYXJlbnQpIDogcGFyZW50ID09PSBzY3JvbGxQYXJlbnQgJiYgc2Nyb2xsUGFyZW50Lm5vZGVOYW1lICE9PSAnQk9EWScpIHtcbiAgICBvZmZzZXRzID0gaW5jbHVkZVNjcm9sbChvZmZzZXRzLCBwYXJlbnQpO1xuICB9XG5cbiAgcmV0dXJuIG9mZnNldHM7XG59XG5cbmZ1bmN0aW9uIGdldFZpZXdwb3J0T2Zmc2V0UmVjdFJlbGF0aXZlVG9BcnRiaXRyYXJ5Tm9kZShlbGVtZW50KSB7XG4gIHZhciBleGNsdWRlU2Nyb2xsID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcblxuICB2YXIgaHRtbCA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIHZhciByZWxhdGl2ZU9mZnNldCA9IGdldE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJiaXRyYXJ5Tm9kZShlbGVtZW50LCBodG1sKTtcbiAgdmFyIHdpZHRoID0gTWF0aC5tYXgoaHRtbC5jbGllbnRXaWR0aCwgd2luZG93LmlubmVyV2lkdGggfHwgMCk7XG4gIHZhciBoZWlnaHQgPSBNYXRoLm1heChodG1sLmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IDApO1xuXG4gIHZhciBzY3JvbGxUb3AgPSAhZXhjbHVkZVNjcm9sbCA/IGdldFNjcm9sbChodG1sKSA6IDA7XG4gIHZhciBzY3JvbGxMZWZ0ID0gIWV4Y2x1ZGVTY3JvbGwgPyBnZXRTY3JvbGwoaHRtbCwgJ2xlZnQnKSA6IDA7XG5cbiAgdmFyIG9mZnNldCA9IHtcbiAgICB0b3A6IHNjcm9sbFRvcCAtIHJlbGF0aXZlT2Zmc2V0LnRvcCArIHJlbGF0aXZlT2Zmc2V0Lm1hcmdpblRvcCxcbiAgICBsZWZ0OiBzY3JvbGxMZWZ0IC0gcmVsYXRpdmVPZmZzZXQubGVmdCArIHJlbGF0aXZlT2Zmc2V0Lm1hcmdpbkxlZnQsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG5cbiAgcmV0dXJuIGdldENsaWVudFJlY3Qob2Zmc2V0KTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBmaXhlZCBvciBpcyBpbnNpZGUgYSBmaXhlZCBwYXJlbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQGFyZ3VtZW50IHtFbGVtZW50fSBjdXN0b21Db250YWluZXJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBhbnN3ZXIgdG8gXCJpc0ZpeGVkP1wiXG4gKi9cbmZ1bmN0aW9uIGlzRml4ZWQoZWxlbWVudCkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lO1xuICBpZiAobm9kZU5hbWUgPT09ICdCT0RZJyB8fCBub2RlTmFtZSA9PT0gJ0hUTUwnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIGlmICghcGFyZW50Tm9kZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gaXNGaXhlZChwYXJlbnROb2RlKTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgZmlyc3QgcGFyZW50IG9mIGFuIGVsZW1lbnQgdGhhdCBoYXMgYSB0cmFuc2Zvcm1lZCBwcm9wZXJ0eSBkZWZpbmVkXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtFbGVtZW50fSBmaXJzdCB0cmFuc2Zvcm1lZCBwYXJlbnQgb3IgZG9jdW1lbnRFbGVtZW50XG4gKi9cblxuZnVuY3Rpb24gZ2V0Rml4ZWRQb3NpdGlvbk9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIC8vIFRoaXMgY2hlY2sgaXMgbmVlZGVkIHRvIGF2b2lkIGVycm9ycyBpbiBjYXNlIG9uZSBvZiB0aGUgZWxlbWVudHMgaXNuJ3QgZGVmaW5lZCBmb3IgYW55IHJlYXNvblxuICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQucGFyZW50RWxlbWVudCB8fCBpc0lFKCkpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB9XG4gIHZhciBlbCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgd2hpbGUgKGVsICYmIGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShlbCwgJ3RyYW5zZm9ybScpID09PSAnbm9uZScpIHtcbiAgICBlbCA9IGVsLnBhcmVudEVsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIGVsIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbn1cblxuLyoqXG4gKiBDb21wdXRlZCB0aGUgYm91bmRhcmllcyBsaW1pdHMgYW5kIHJldHVybiB0aGVtXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwb3BwZXJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJlZmVyZW5jZVxuICogQHBhcmFtIHtudW1iZXJ9IHBhZGRpbmdcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGJvdW5kYXJpZXNFbGVtZW50IC0gRWxlbWVudCB1c2VkIHRvIGRlZmluZSB0aGUgYm91bmRhcmllc1xuICogQHBhcmFtIHtCb29sZWFufSBmaXhlZFBvc2l0aW9uIC0gSXMgaW4gZml4ZWQgcG9zaXRpb24gbW9kZVxuICogQHJldHVybnMge09iamVjdH0gQ29vcmRpbmF0ZXMgb2YgdGhlIGJvdW5kYXJpZXNcbiAqL1xuZnVuY3Rpb24gZ2V0Qm91bmRhcmllcyhwb3BwZXIsIHJlZmVyZW5jZSwgcGFkZGluZywgYm91bmRhcmllc0VsZW1lbnQpIHtcbiAgdmFyIGZpeGVkUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IGZhbHNlO1xuXG4gIC8vIE5PVEU6IDEgRE9NIGFjY2VzcyBoZXJlXG5cbiAgdmFyIGJvdW5kYXJpZXMgPSB7IHRvcDogMCwgbGVmdDogMCB9O1xuICB2YXIgb2Zmc2V0UGFyZW50ID0gZml4ZWRQb3NpdGlvbiA/IGdldEZpeGVkUG9zaXRpb25PZmZzZXRQYXJlbnQocG9wcGVyKSA6IGZpbmRDb21tb25PZmZzZXRQYXJlbnQocG9wcGVyLCByZWZlcmVuY2UpO1xuXG4gIC8vIEhhbmRsZSB2aWV3cG9ydCBjYXNlXG4gIGlmIChib3VuZGFyaWVzRWxlbWVudCA9PT0gJ3ZpZXdwb3J0Jykge1xuICAgIGJvdW5kYXJpZXMgPSBnZXRWaWV3cG9ydE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJ0Yml0cmFyeU5vZGUob2Zmc2V0UGFyZW50LCBmaXhlZFBvc2l0aW9uKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBIYW5kbGUgb3RoZXIgY2FzZXMgYmFzZWQgb24gRE9NIGVsZW1lbnQgdXNlZCBhcyBib3VuZGFyaWVzXG4gICAgdmFyIGJvdW5kYXJpZXNOb2RlID0gdm9pZCAwO1xuICAgIGlmIChib3VuZGFyaWVzRWxlbWVudCA9PT0gJ3Njcm9sbFBhcmVudCcpIHtcbiAgICAgIGJvdW5kYXJpZXNOb2RlID0gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUocmVmZXJlbmNlKSk7XG4gICAgICBpZiAoYm91bmRhcmllc05vZGUubm9kZU5hbWUgPT09ICdCT0RZJykge1xuICAgICAgICBib3VuZGFyaWVzTm9kZSA9IHBvcHBlci5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGJvdW5kYXJpZXNFbGVtZW50ID09PSAnd2luZG93Jykge1xuICAgICAgYm91bmRhcmllc05vZGUgPSBwb3BwZXIub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvdW5kYXJpZXNOb2RlID0gYm91bmRhcmllc0VsZW1lbnQ7XG4gICAgfVxuXG4gICAgdmFyIG9mZnNldHMgPSBnZXRPZmZzZXRSZWN0UmVsYXRpdmVUb0FyYml0cmFyeU5vZGUoYm91bmRhcmllc05vZGUsIG9mZnNldFBhcmVudCwgZml4ZWRQb3NpdGlvbik7XG5cbiAgICAvLyBJbiBjYXNlIG9mIEhUTUwsIHdlIG5lZWQgYSBkaWZmZXJlbnQgY29tcHV0YXRpb25cbiAgICBpZiAoYm91bmRhcmllc05vZGUubm9kZU5hbWUgPT09ICdIVE1MJyAmJiAhaXNGaXhlZChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICB2YXIgX2dldFdpbmRvd1NpemVzID0gZ2V0V2luZG93U2l6ZXMocG9wcGVyLm93bmVyRG9jdW1lbnQpLFxuICAgICAgICAgIGhlaWdodCA9IF9nZXRXaW5kb3dTaXplcy5oZWlnaHQsXG4gICAgICAgICAgd2lkdGggPSBfZ2V0V2luZG93U2l6ZXMud2lkdGg7XG5cbiAgICAgIGJvdW5kYXJpZXMudG9wICs9IG9mZnNldHMudG9wIC0gb2Zmc2V0cy5tYXJnaW5Ub3A7XG4gICAgICBib3VuZGFyaWVzLmJvdHRvbSA9IGhlaWdodCArIG9mZnNldHMudG9wO1xuICAgICAgYm91bmRhcmllcy5sZWZ0ICs9IG9mZnNldHMubGVmdCAtIG9mZnNldHMubWFyZ2luTGVmdDtcbiAgICAgIGJvdW5kYXJpZXMucmlnaHQgPSB3aWR0aCArIG9mZnNldHMubGVmdDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZm9yIGFsbCB0aGUgb3RoZXIgRE9NIGVsZW1lbnRzLCB0aGlzIG9uZSBpcyBnb29kXG4gICAgICBib3VuZGFyaWVzID0gb2Zmc2V0cztcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgcGFkZGluZ3NcbiAgcGFkZGluZyA9IHBhZGRpbmcgfHwgMDtcbiAgdmFyIGlzUGFkZGluZ051bWJlciA9IHR5cGVvZiBwYWRkaW5nID09PSAnbnVtYmVyJztcbiAgYm91bmRhcmllcy5sZWZ0ICs9IGlzUGFkZGluZ051bWJlciA/IHBhZGRpbmcgOiBwYWRkaW5nLmxlZnQgfHwgMDtcbiAgYm91bmRhcmllcy50b3AgKz0gaXNQYWRkaW5nTnVtYmVyID8gcGFkZGluZyA6IHBhZGRpbmcudG9wIHx8IDA7XG4gIGJvdW5kYXJpZXMucmlnaHQgLT0gaXNQYWRkaW5nTnVtYmVyID8gcGFkZGluZyA6IHBhZGRpbmcucmlnaHQgfHwgMDtcbiAgYm91bmRhcmllcy5ib3R0b20gLT0gaXNQYWRkaW5nTnVtYmVyID8gcGFkZGluZyA6IHBhZGRpbmcuYm90dG9tIHx8IDA7XG5cbiAgcmV0dXJuIGJvdW5kYXJpZXM7XG59XG5cbmZ1bmN0aW9uIGdldEFyZWEoX3JlZikge1xuICB2YXIgd2lkdGggPSBfcmVmLndpZHRoLFxuICAgICAgaGVpZ2h0ID0gX3JlZi5oZWlnaHQ7XG5cbiAgcmV0dXJuIHdpZHRoICogaGVpZ2h0O1xufVxuXG4vKipcbiAqIFV0aWxpdHkgdXNlZCB0byB0cmFuc2Zvcm0gdGhlIGBhdXRvYCBwbGFjZW1lbnQgdG8gdGhlIHBsYWNlbWVudCB3aXRoIG1vcmVcbiAqIGF2YWlsYWJsZSBzcGFjZS5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSB1cGRhdGUgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVBdXRvUGxhY2VtZW50KHBsYWNlbWVudCwgcmVmUmVjdCwgcG9wcGVyLCByZWZlcmVuY2UsIGJvdW5kYXJpZXNFbGVtZW50KSB7XG4gIHZhciBwYWRkaW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgJiYgYXJndW1lbnRzWzVdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNV0gOiAwO1xuXG4gIGlmIChwbGFjZW1lbnQuaW5kZXhPZignYXV0bycpID09PSAtMSkge1xuICAgIHJldHVybiBwbGFjZW1lbnQ7XG4gIH1cblxuICB2YXIgYm91bmRhcmllcyA9IGdldEJvdW5kYXJpZXMocG9wcGVyLCByZWZlcmVuY2UsIHBhZGRpbmcsIGJvdW5kYXJpZXNFbGVtZW50KTtcblxuICB2YXIgcmVjdHMgPSB7XG4gICAgdG9wOiB7XG4gICAgICB3aWR0aDogYm91bmRhcmllcy53aWR0aCxcbiAgICAgIGhlaWdodDogcmVmUmVjdC50b3AgLSBib3VuZGFyaWVzLnRvcFxuICAgIH0sXG4gICAgcmlnaHQ6IHtcbiAgICAgIHdpZHRoOiBib3VuZGFyaWVzLnJpZ2h0IC0gcmVmUmVjdC5yaWdodCxcbiAgICAgIGhlaWdodDogYm91bmRhcmllcy5oZWlnaHRcbiAgICB9LFxuICAgIGJvdHRvbToge1xuICAgICAgd2lkdGg6IGJvdW5kYXJpZXMud2lkdGgsXG4gICAgICBoZWlnaHQ6IGJvdW5kYXJpZXMuYm90dG9tIC0gcmVmUmVjdC5ib3R0b21cbiAgICB9LFxuICAgIGxlZnQ6IHtcbiAgICAgIHdpZHRoOiByZWZSZWN0LmxlZnQgLSBib3VuZGFyaWVzLmxlZnQsXG4gICAgICBoZWlnaHQ6IGJvdW5kYXJpZXMuaGVpZ2h0XG4gICAgfVxuICB9O1xuXG4gIHZhciBzb3J0ZWRBcmVhcyA9IE9iamVjdC5rZXlzKHJlY3RzKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgICBrZXk6IGtleVxuICAgIH0sIHJlY3RzW2tleV0sIHtcbiAgICAgIGFyZWE6IGdldEFyZWEocmVjdHNba2V5XSlcbiAgICB9KTtcbiAgfSkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBiLmFyZWEgLSBhLmFyZWE7XG4gIH0pO1xuXG4gIHZhciBmaWx0ZXJlZEFyZWFzID0gc29ydGVkQXJlYXMuZmlsdGVyKGZ1bmN0aW9uIChfcmVmMikge1xuICAgIHZhciB3aWR0aCA9IF9yZWYyLndpZHRoLFxuICAgICAgICBoZWlnaHQgPSBfcmVmMi5oZWlnaHQ7XG4gICAgcmV0dXJuIHdpZHRoID49IHBvcHBlci5jbGllbnRXaWR0aCAmJiBoZWlnaHQgPj0gcG9wcGVyLmNsaWVudEhlaWdodDtcbiAgfSk7XG5cbiAgdmFyIGNvbXB1dGVkUGxhY2VtZW50ID0gZmlsdGVyZWRBcmVhcy5sZW5ndGggPiAwID8gZmlsdGVyZWRBcmVhc1swXS5rZXkgOiBzb3J0ZWRBcmVhc1swXS5rZXk7XG5cbiAgdmFyIHZhcmlhdGlvbiA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzFdO1xuXG4gIHJldHVybiBjb21wdXRlZFBsYWNlbWVudCArICh2YXJpYXRpb24gPyAnLScgKyB2YXJpYXRpb24gOiAnJyk7XG59XG5cbi8qKlxuICogR2V0IG9mZnNldHMgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7RWxlbWVudH0gcG9wcGVyIC0gdGhlIHBvcHBlciBlbGVtZW50XG4gKiBAcGFyYW0ge0VsZW1lbnR9IHJlZmVyZW5jZSAtIHRoZSByZWZlcmVuY2UgZWxlbWVudCAodGhlIHBvcHBlciB3aWxsIGJlIHJlbGF0aXZlIHRvIHRoaXMpXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGZpeGVkUG9zaXRpb24gLSBpcyBpbiBmaXhlZCBwb3NpdGlvbiBtb2RlXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgb2Zmc2V0cyB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlclxuICovXG5mdW5jdGlvbiBnZXRSZWZlcmVuY2VPZmZzZXRzKHN0YXRlLCBwb3BwZXIsIHJlZmVyZW5jZSkge1xuICB2YXIgZml4ZWRQb3NpdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogbnVsbDtcblxuICB2YXIgY29tbW9uT2Zmc2V0UGFyZW50ID0gZml4ZWRQb3NpdGlvbiA/IGdldEZpeGVkUG9zaXRpb25PZmZzZXRQYXJlbnQocG9wcGVyKSA6IGZpbmRDb21tb25PZmZzZXRQYXJlbnQocG9wcGVyLCByZWZlcmVuY2UpO1xuICByZXR1cm4gZ2V0T2Zmc2V0UmVjdFJlbGF0aXZlVG9BcmJpdHJhcnlOb2RlKHJlZmVyZW5jZSwgY29tbW9uT2Zmc2V0UGFyZW50LCBmaXhlZFBvc2l0aW9uKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG91dGVyIHNpemVzIG9mIHRoZSBnaXZlbiBlbGVtZW50IChvZmZzZXQgc2l6ZSArIG1hcmdpbnMpXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtPYmplY3R9IG9iamVjdCBjb250YWluaW5nIHdpZHRoIGFuZCBoZWlnaHQgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBnZXRPdXRlclNpemVzKGVsZW1lbnQpIHtcbiAgdmFyIHdpbmRvdyA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcbiAgdmFyIHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICB2YXIgeCA9IHBhcnNlRmxvYXQoc3R5bGVzLm1hcmdpblRvcCB8fCAwKSArIHBhcnNlRmxvYXQoc3R5bGVzLm1hcmdpbkJvdHRvbSB8fCAwKTtcbiAgdmFyIHkgPSBwYXJzZUZsb2F0KHN0eWxlcy5tYXJnaW5MZWZ0IHx8IDApICsgcGFyc2VGbG9hdChzdHlsZXMubWFyZ2luUmlnaHQgfHwgMCk7XG4gIHZhciByZXN1bHQgPSB7XG4gICAgd2lkdGg6IGVsZW1lbnQub2Zmc2V0V2lkdGggKyB5LFxuICAgIGhlaWdodDogZWxlbWVudC5vZmZzZXRIZWlnaHQgKyB4XG4gIH07XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogR2V0IHRoZSBvcHBvc2l0ZSBwbGFjZW1lbnQgb2YgdGhlIGdpdmVuIG9uZVxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtTdHJpbmd9IHBsYWNlbWVudFxuICogQHJldHVybnMge1N0cmluZ30gZmxpcHBlZCBwbGFjZW1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHZhciBoYXNoID0geyBsZWZ0OiAncmlnaHQnLCByaWdodDogJ2xlZnQnLCBib3R0b206ICd0b3AnLCB0b3A6ICdib3R0b20nIH07XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBvZmZzZXRzIHRvIHRoZSBwb3BwZXJcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwb3NpdGlvbiAtIENTUyBwb3NpdGlvbiB0aGUgUG9wcGVyIHdpbGwgZ2V0IGFwcGxpZWRcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBvcHBlciAtIHRoZSBwb3BwZXIgZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IHJlZmVyZW5jZU9mZnNldHMgLSB0aGUgcmVmZXJlbmNlIG9mZnNldHMgKHRoZSBwb3BwZXIgd2lsbCBiZSByZWxhdGl2ZSB0byB0aGlzKVxuICogQHBhcmFtIHtTdHJpbmd9IHBsYWNlbWVudCAtIG9uZSBvZiB0aGUgdmFsaWQgcGxhY2VtZW50IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IHBvcHBlck9mZnNldHMgLSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgb2Zmc2V0cyB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlclxuICovXG5mdW5jdGlvbiBnZXRQb3BwZXJPZmZzZXRzKHBvcHBlciwgcmVmZXJlbmNlT2Zmc2V0cywgcGxhY2VtZW50KSB7XG4gIHBsYWNlbWVudCA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuXG4gIC8vIEdldCBwb3BwZXIgbm9kZSBzaXplc1xuICB2YXIgcG9wcGVyUmVjdCA9IGdldE91dGVyU2l6ZXMocG9wcGVyKTtcblxuICAvLyBBZGQgcG9zaXRpb24sIHdpZHRoIGFuZCBoZWlnaHQgdG8gb3VyIG9mZnNldHMgb2JqZWN0XG4gIHZhciBwb3BwZXJPZmZzZXRzID0ge1xuICAgIHdpZHRoOiBwb3BwZXJSZWN0LndpZHRoLFxuICAgIGhlaWdodDogcG9wcGVyUmVjdC5oZWlnaHRcbiAgfTtcblxuICAvLyBkZXBlbmRpbmcgYnkgdGhlIHBvcHBlciBwbGFjZW1lbnQgd2UgaGF2ZSB0byBjb21wdXRlIGl0cyBvZmZzZXRzIHNsaWdodGx5IGRpZmZlcmVudGx5XG4gIHZhciBpc0hvcml6ID0gWydyaWdodCcsICdsZWZ0J10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMTtcbiAgdmFyIG1haW5TaWRlID0gaXNIb3JpeiA/ICd0b3AnIDogJ2xlZnQnO1xuICB2YXIgc2Vjb25kYXJ5U2lkZSA9IGlzSG9yaXogPyAnbGVmdCcgOiAndG9wJztcbiAgdmFyIG1lYXN1cmVtZW50ID0gaXNIb3JpeiA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgdmFyIHNlY29uZGFyeU1lYXN1cmVtZW50ID0gIWlzSG9yaXogPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgcG9wcGVyT2Zmc2V0c1ttYWluU2lkZV0gPSByZWZlcmVuY2VPZmZzZXRzW21haW5TaWRlXSArIHJlZmVyZW5jZU9mZnNldHNbbWVhc3VyZW1lbnRdIC8gMiAtIHBvcHBlclJlY3RbbWVhc3VyZW1lbnRdIC8gMjtcbiAgaWYgKHBsYWNlbWVudCA9PT0gc2Vjb25kYXJ5U2lkZSkge1xuICAgIHBvcHBlck9mZnNldHNbc2Vjb25kYXJ5U2lkZV0gPSByZWZlcmVuY2VPZmZzZXRzW3NlY29uZGFyeVNpZGVdIC0gcG9wcGVyUmVjdFtzZWNvbmRhcnlNZWFzdXJlbWVudF07XG4gIH0gZWxzZSB7XG4gICAgcG9wcGVyT2Zmc2V0c1tzZWNvbmRhcnlTaWRlXSA9IHJlZmVyZW5jZU9mZnNldHNbZ2V0T3Bwb3NpdGVQbGFjZW1lbnQoc2Vjb25kYXJ5U2lkZSldO1xuICB9XG5cbiAgcmV0dXJuIHBvcHBlck9mZnNldHM7XG59XG5cbi8qKlxuICogTWltaWNzIHRoZSBgZmluZGAgbWV0aG9kIG9mIEFycmF5XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0FycmF5fSBhcnJcbiAqIEBhcmd1bWVudCBwcm9wXG4gKiBAYXJndW1lbnQgdmFsdWVcbiAqIEByZXR1cm5zIGluZGV4IG9yIC0xXG4gKi9cbmZ1bmN0aW9uIGZpbmQoYXJyLCBjaGVjaykge1xuICAvLyB1c2UgbmF0aXZlIGZpbmQgaWYgc3VwcG9ydGVkXG4gIGlmIChBcnJheS5wcm90b3R5cGUuZmluZCkge1xuICAgIHJldHVybiBhcnIuZmluZChjaGVjayk7XG4gIH1cblxuICAvLyB1c2UgYGZpbHRlcmAgdG8gb2J0YWluIHRoZSBzYW1lIGJlaGF2aW9yIG9mIGBmaW5kYFxuICByZXR1cm4gYXJyLmZpbHRlcihjaGVjaylbMF07XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hpbmcgb2JqZWN0XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0FycmF5fSBhcnJcbiAqIEBhcmd1bWVudCBwcm9wXG4gKiBAYXJndW1lbnQgdmFsdWVcbiAqIEByZXR1cm5zIGluZGV4IG9yIC0xXG4gKi9cbmZ1bmN0aW9uIGZpbmRJbmRleChhcnIsIHByb3AsIHZhbHVlKSB7XG4gIC8vIHVzZSBuYXRpdmUgZmluZEluZGV4IGlmIHN1cHBvcnRlZFxuICBpZiAoQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleCkge1xuICAgIHJldHVybiBhcnIuZmluZEluZGV4KGZ1bmN0aW9uIChjdXIpIHtcbiAgICAgIHJldHVybiBjdXJbcHJvcF0gPT09IHZhbHVlO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gdXNlIGBmaW5kYCArIGBpbmRleE9mYCBpZiBgZmluZEluZGV4YCBpc24ndCBzdXBwb3J0ZWRcbiAgdmFyIG1hdGNoID0gZmluZChhcnIsIGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqW3Byb3BdID09PSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiBhcnIuaW5kZXhPZihtYXRjaCk7XG59XG5cbi8qKlxuICogTG9vcCB0cm91Z2ggdGhlIGxpc3Qgb2YgbW9kaWZpZXJzIGFuZCBydW4gdGhlbSBpbiBvcmRlcixcbiAqIGVhY2ggb2YgdGhlbSB3aWxsIHRoZW4gZWRpdCB0aGUgZGF0YSBvYmplY3QuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge2RhdGFPYmplY3R9IGRhdGFcbiAqIEBwYXJhbSB7QXJyYXl9IG1vZGlmaWVyc1xuICogQHBhcmFtIHtTdHJpbmd9IGVuZHMgLSBPcHRpb25hbCBtb2RpZmllciBuYW1lIHVzZWQgYXMgc3RvcHBlclxuICogQHJldHVybnMge2RhdGFPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHJ1bk1vZGlmaWVycyhtb2RpZmllcnMsIGRhdGEsIGVuZHMpIHtcbiAgdmFyIG1vZGlmaWVyc1RvUnVuID0gZW5kcyA9PT0gdW5kZWZpbmVkID8gbW9kaWZpZXJzIDogbW9kaWZpZXJzLnNsaWNlKDAsIGZpbmRJbmRleChtb2RpZmllcnMsICduYW1lJywgZW5kcykpO1xuXG4gIG1vZGlmaWVyc1RvUnVuLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgaWYgKG1vZGlmaWVyWydmdW5jdGlvbiddKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGRvdC1ub3RhdGlvblxuICAgICAgY29uc29sZS53YXJuKCdgbW9kaWZpZXIuZnVuY3Rpb25gIGlzIGRlcHJlY2F0ZWQsIHVzZSBgbW9kaWZpZXIuZm5gIScpO1xuICAgIH1cbiAgICB2YXIgZm4gPSBtb2RpZmllclsnZnVuY3Rpb24nXSB8fCBtb2RpZmllci5mbjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICBpZiAobW9kaWZpZXIuZW5hYmxlZCAmJiBpc0Z1bmN0aW9uKGZuKSkge1xuICAgICAgLy8gQWRkIHByb3BlcnRpZXMgdG8gb2Zmc2V0cyB0byBtYWtlIHRoZW0gYSBjb21wbGV0ZSBjbGllbnRSZWN0IG9iamVjdFxuICAgICAgLy8gd2UgZG8gdGhpcyBiZWZvcmUgZWFjaCBtb2RpZmllciB0byBtYWtlIHN1cmUgdGhlIHByZXZpb3VzIG9uZSBkb2Vzbid0XG4gICAgICAvLyBtZXNzIHdpdGggdGhlc2UgdmFsdWVzXG4gICAgICBkYXRhLm9mZnNldHMucG9wcGVyID0gZ2V0Q2xpZW50UmVjdChkYXRhLm9mZnNldHMucG9wcGVyKTtcbiAgICAgIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UgPSBnZXRDbGllbnRSZWN0KGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UpO1xuXG4gICAgICBkYXRhID0gZm4oZGF0YSwgbW9kaWZpZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcHBlciwgY29tcHV0aW5nIHRoZSBuZXcgb2Zmc2V0cyBhbmQgYXBwbHlpbmdcbiAqIHRoZSBuZXcgc3R5bGUuPGJyIC8+XG4gKiBQcmVmZXIgYHNjaGVkdWxlVXBkYXRlYCBvdmVyIGB1cGRhdGVgIGJlY2F1c2Ugb2YgcGVyZm9ybWFuY2UgcmVhc29ucy5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXJcbiAqL1xuZnVuY3Rpb24gdXBkYXRlKCkge1xuICAvLyBpZiBwb3BwZXIgaXMgZGVzdHJveWVkLCBkb24ndCBwZXJmb3JtIGFueSBmdXJ0aGVyIHVwZGF0ZVxuICBpZiAodGhpcy5zdGF0ZS5pc0Rlc3Ryb3llZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBkYXRhID0ge1xuICAgIGluc3RhbmNlOiB0aGlzLFxuICAgIHN0eWxlczoge30sXG4gICAgYXJyb3dTdHlsZXM6IHt9LFxuICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgIGZsaXBwZWQ6IGZhbHNlLFxuICAgIG9mZnNldHM6IHt9XG4gIH07XG5cbiAgLy8gY29tcHV0ZSByZWZlcmVuY2UgZWxlbWVudCBvZmZzZXRzXG4gIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UgPSBnZXRSZWZlcmVuY2VPZmZzZXRzKHRoaXMuc3RhdGUsIHRoaXMucG9wcGVyLCB0aGlzLnJlZmVyZW5jZSwgdGhpcy5vcHRpb25zLnBvc2l0aW9uRml4ZWQpO1xuXG4gIC8vIGNvbXB1dGUgYXV0byBwbGFjZW1lbnQsIHN0b3JlIHBsYWNlbWVudCBpbnNpZGUgdGhlIGRhdGEgb2JqZWN0LFxuICAvLyBtb2RpZmllcnMgd2lsbCBiZSBhYmxlIHRvIGVkaXQgYHBsYWNlbWVudGAgaWYgbmVlZGVkXG4gIC8vIGFuZCByZWZlciB0byBvcmlnaW5hbFBsYWNlbWVudCB0byBrbm93IHRoZSBvcmlnaW5hbCB2YWx1ZVxuICBkYXRhLnBsYWNlbWVudCA9IGNvbXB1dGVBdXRvUGxhY2VtZW50KHRoaXMub3B0aW9ucy5wbGFjZW1lbnQsIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UsIHRoaXMucG9wcGVyLCB0aGlzLnJlZmVyZW5jZSwgdGhpcy5vcHRpb25zLm1vZGlmaWVycy5mbGlwLmJvdW5kYXJpZXNFbGVtZW50LCB0aGlzLm9wdGlvbnMubW9kaWZpZXJzLmZsaXAucGFkZGluZyk7XG5cbiAgLy8gc3RvcmUgdGhlIGNvbXB1dGVkIHBsYWNlbWVudCBpbnNpZGUgYG9yaWdpbmFsUGxhY2VtZW50YFxuICBkYXRhLm9yaWdpbmFsUGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQ7XG5cbiAgZGF0YS5wb3NpdGlvbkZpeGVkID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uRml4ZWQ7XG5cbiAgLy8gY29tcHV0ZSB0aGUgcG9wcGVyIG9mZnNldHNcbiAgZGF0YS5vZmZzZXRzLnBvcHBlciA9IGdldFBvcHBlck9mZnNldHModGhpcy5wb3BwZXIsIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UsIGRhdGEucGxhY2VtZW50KTtcblxuICBkYXRhLm9mZnNldHMucG9wcGVyLnBvc2l0aW9uID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uRml4ZWQgPyAnZml4ZWQnIDogJ2Fic29sdXRlJztcblxuICAvLyBydW4gdGhlIG1vZGlmaWVyc1xuICBkYXRhID0gcnVuTW9kaWZpZXJzKHRoaXMubW9kaWZpZXJzLCBkYXRhKTtcblxuICAvLyB0aGUgZmlyc3QgYHVwZGF0ZWAgd2lsbCBjYWxsIGBvbkNyZWF0ZWAgY2FsbGJhY2tcbiAgLy8gdGhlIG90aGVyIG9uZXMgd2lsbCBjYWxsIGBvblVwZGF0ZWAgY2FsbGJhY2tcbiAgaWYgKCF0aGlzLnN0YXRlLmlzQ3JlYXRlZCkge1xuICAgIHRoaXMuc3RhdGUuaXNDcmVhdGVkID0gdHJ1ZTtcbiAgICB0aGlzLm9wdGlvbnMub25DcmVhdGUoZGF0YSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5vcHRpb25zLm9uVXBkYXRlKGRhdGEpO1xuICB9XG59XG5cbi8qKlxuICogSGVscGVyIHVzZWQgdG8ga25vdyBpZiB0aGUgZ2l2ZW4gbW9kaWZpZXIgaXMgZW5hYmxlZC5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBpc01vZGlmaWVyRW5hYmxlZChtb2RpZmllcnMsIG1vZGlmaWVyTmFtZSkge1xuICByZXR1cm4gbW9kaWZpZXJzLnNvbWUoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgICAgZW5hYmxlZCA9IF9yZWYuZW5hYmxlZDtcbiAgICByZXR1cm4gZW5hYmxlZCAmJiBuYW1lID09PSBtb2RpZmllck5hbWU7XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcHJlZml4ZWQgc3VwcG9ydGVkIHByb3BlcnR5IG5hbWVcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBwcm9wZXJ0eSAoY2FtZWxDYXNlKVxuICogQHJldHVybnMge1N0cmluZ30gcHJlZml4ZWQgcHJvcGVydHkgKGNhbWVsQ2FzZSBvciBQYXNjYWxDYXNlLCBkZXBlbmRpbmcgb24gdGhlIHZlbmRvciBwcmVmaXgpXG4gKi9cbmZ1bmN0aW9uIGdldFN1cHBvcnRlZFByb3BlcnR5TmFtZShwcm9wZXJ0eSkge1xuICB2YXIgcHJlZml4ZXMgPSBbZmFsc2UsICdtcycsICdXZWJraXQnLCAnTW96JywgJ08nXTtcbiAgdmFyIHVwcGVyUHJvcCA9IHByb3BlcnR5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcHJvcGVydHkuc2xpY2UoMSk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmVmaXhlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwcmVmaXggPSBwcmVmaXhlc1tpXTtcbiAgICB2YXIgdG9DaGVjayA9IHByZWZpeCA/ICcnICsgcHJlZml4ICsgdXBwZXJQcm9wIDogcHJvcGVydHk7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudC5ib2R5LnN0eWxlW3RvQ2hlY2tdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRvQ2hlY2s7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBwb3BwZXIuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyXG4gKi9cbmZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gIHRoaXMuc3RhdGUuaXNEZXN0cm95ZWQgPSB0cnVlO1xuXG4gIC8vIHRvdWNoIERPTSBvbmx5IGlmIGBhcHBseVN0eWxlYCBtb2RpZmllciBpcyBlbmFibGVkXG4gIGlmIChpc01vZGlmaWVyRW5hYmxlZCh0aGlzLm1vZGlmaWVycywgJ2FwcGx5U3R5bGUnKSkge1xuICAgIHRoaXMucG9wcGVyLnJlbW92ZUF0dHJpYnV0ZSgneC1wbGFjZW1lbnQnKTtcbiAgICB0aGlzLnBvcHBlci5zdHlsZS5wb3NpdGlvbiA9ICcnO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlLnRvcCA9ICcnO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlLmxlZnQgPSAnJztcbiAgICB0aGlzLnBvcHBlci5zdHlsZS5yaWdodCA9ICcnO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlLmJvdHRvbSA9ICcnO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlLndpbGxDaGFuZ2UgPSAnJztcbiAgICB0aGlzLnBvcHBlci5zdHlsZVtnZXRTdXBwb3J0ZWRQcm9wZXJ0eU5hbWUoJ3RyYW5zZm9ybScpXSA9ICcnO1xuICB9XG5cbiAgdGhpcy5kaXNhYmxlRXZlbnRMaXN0ZW5lcnMoKTtcblxuICAvLyByZW1vdmUgdGhlIHBvcHBlciBpZiB1c2VyIGV4cGxpY2l0eSBhc2tlZCBmb3IgdGhlIGRlbGV0aW9uIG9uIGRlc3Ryb3lcbiAgLy8gZG8gbm90IHVzZSBgcmVtb3ZlYCBiZWNhdXNlIElFMTEgZG9lc24ndCBzdXBwb3J0IGl0XG4gIGlmICh0aGlzLm9wdGlvbnMucmVtb3ZlT25EZXN0cm95KSB7XG4gICAgdGhpcy5wb3BwZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnBvcHBlcik7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogR2V0IHRoZSB3aW5kb3cgYXNzb2NpYXRlZCB3aXRoIHRoZSBlbGVtZW50XG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtXaW5kb3d9XG4gKi9cbmZ1bmN0aW9uIGdldFdpbmRvdyhlbGVtZW50KSB7XG4gIHZhciBvd25lckRvY3VtZW50ID0gZWxlbWVudC5vd25lckRvY3VtZW50O1xuICByZXR1cm4gb3duZXJEb2N1bWVudCA/IG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgOiB3aW5kb3c7XG59XG5cbmZ1bmN0aW9uIGF0dGFjaFRvU2Nyb2xsUGFyZW50cyhzY3JvbGxQYXJlbnQsIGV2ZW50LCBjYWxsYmFjaywgc2Nyb2xsUGFyZW50cykge1xuICB2YXIgaXNCb2R5ID0gc2Nyb2xsUGFyZW50Lm5vZGVOYW1lID09PSAnQk9EWSc7XG4gIHZhciB0YXJnZXQgPSBpc0JvZHkgPyBzY3JvbGxQYXJlbnQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyA6IHNjcm9sbFBhcmVudDtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGNhbGxiYWNrLCB7IHBhc3NpdmU6IHRydWUgfSk7XG5cbiAgaWYgKCFpc0JvZHkpIHtcbiAgICBhdHRhY2hUb1Njcm9sbFBhcmVudHMoZ2V0U2Nyb2xsUGFyZW50KHRhcmdldC5wYXJlbnROb2RlKSwgZXZlbnQsIGNhbGxiYWNrLCBzY3JvbGxQYXJlbnRzKTtcbiAgfVxuICBzY3JvbGxQYXJlbnRzLnB1c2godGFyZ2V0KTtcbn1cblxuLyoqXG4gKiBTZXR1cCBuZWVkZWQgZXZlbnQgbGlzdGVuZXJzIHVzZWQgdG8gdXBkYXRlIHRoZSBwb3BwZXIgcG9zaXRpb25cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNldHVwRXZlbnRMaXN0ZW5lcnMocmVmZXJlbmNlLCBvcHRpb25zLCBzdGF0ZSwgdXBkYXRlQm91bmQpIHtcbiAgLy8gUmVzaXplIGV2ZW50IGxpc3RlbmVyIG9uIHdpbmRvd1xuICBzdGF0ZS51cGRhdGVCb3VuZCA9IHVwZGF0ZUJvdW5kO1xuICBnZXRXaW5kb3cocmVmZXJlbmNlKS5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBzdGF0ZS51cGRhdGVCb3VuZCwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuXG4gIC8vIFNjcm9sbCBldmVudCBsaXN0ZW5lciBvbiBzY3JvbGwgcGFyZW50c1xuICB2YXIgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbFBhcmVudChyZWZlcmVuY2UpO1xuICBhdHRhY2hUb1Njcm9sbFBhcmVudHMoc2Nyb2xsRWxlbWVudCwgJ3Njcm9sbCcsIHN0YXRlLnVwZGF0ZUJvdW5kLCBzdGF0ZS5zY3JvbGxQYXJlbnRzKTtcbiAgc3RhdGUuc2Nyb2xsRWxlbWVudCA9IHNjcm9sbEVsZW1lbnQ7XG4gIHN0YXRlLmV2ZW50c0VuYWJsZWQgPSB0cnVlO1xuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBJdCB3aWxsIGFkZCByZXNpemUvc2Nyb2xsIGV2ZW50cyBhbmQgc3RhcnQgcmVjYWxjdWxhdGluZ1xuICogcG9zaXRpb24gb2YgdGhlIHBvcHBlciBlbGVtZW50IHdoZW4gdGhleSBhcmUgdHJpZ2dlcmVkLlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG5mdW5jdGlvbiBlbmFibGVFdmVudExpc3RlbmVycygpIHtcbiAgaWYgKCF0aGlzLnN0YXRlLmV2ZW50c0VuYWJsZWQpIHtcbiAgICB0aGlzLnN0YXRlID0gc2V0dXBFdmVudExpc3RlbmVycyh0aGlzLnJlZmVyZW5jZSwgdGhpcy5vcHRpb25zLCB0aGlzLnN0YXRlLCB0aGlzLnNjaGVkdWxlVXBkYXRlKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMgdXNlZCB0byB1cGRhdGUgdGhlIHBvcHBlciBwb3NpdGlvblxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcnMocmVmZXJlbmNlLCBzdGF0ZSkge1xuICAvLyBSZW1vdmUgcmVzaXplIGV2ZW50IGxpc3RlbmVyIG9uIHdpbmRvd1xuICBnZXRXaW5kb3cocmVmZXJlbmNlKS5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBzdGF0ZS51cGRhdGVCb3VuZCk7XG5cbiAgLy8gUmVtb3ZlIHNjcm9sbCBldmVudCBsaXN0ZW5lciBvbiBzY3JvbGwgcGFyZW50c1xuICBzdGF0ZS5zY3JvbGxQYXJlbnRzLmZvckVhY2goZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzdGF0ZS51cGRhdGVCb3VuZCk7XG4gIH0pO1xuXG4gIC8vIFJlc2V0IHN0YXRlXG4gIHN0YXRlLnVwZGF0ZUJvdW5kID0gbnVsbDtcbiAgc3RhdGUuc2Nyb2xsUGFyZW50cyA9IFtdO1xuICBzdGF0ZS5zY3JvbGxFbGVtZW50ID0gbnVsbDtcbiAgc3RhdGUuZXZlbnRzRW5hYmxlZCA9IGZhbHNlO1xuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogSXQgd2lsbCByZW1vdmUgcmVzaXplL3Njcm9sbCBldmVudHMgYW5kIHdvbid0IHJlY2FsY3VsYXRlIHBvcHBlciBwb3NpdGlvblxuICogd2hlbiB0aGV5IGFyZSB0cmlnZ2VyZWQuIEl0IGFsc28gd29uJ3QgdHJpZ2dlciBgb25VcGRhdGVgIGNhbGxiYWNrIGFueW1vcmUsXG4gKiB1bmxlc3MgeW91IGNhbGwgYHVwZGF0ZWAgbWV0aG9kIG1hbnVhbGx5LlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG5mdW5jdGlvbiBkaXNhYmxlRXZlbnRMaXN0ZW5lcnMoKSB7XG4gIGlmICh0aGlzLnN0YXRlLmV2ZW50c0VuYWJsZWQpIHtcbiAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnNjaGVkdWxlVXBkYXRlKTtcbiAgICB0aGlzLnN0YXRlID0gcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy5yZWZlcmVuY2UsIHRoaXMuc3RhdGUpO1xuICB9XG59XG5cbi8qKlxuICogVGVsbHMgaWYgYSBnaXZlbiBpbnB1dCBpcyBhIG51bWJlclxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHsqfSBpbnB1dCB0byBjaGVja1xuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNOdW1lcmljKG4pIHtcbiAgcmV0dXJuIG4gIT09ICcnICYmICFpc05hTihwYXJzZUZsb2F0KG4pKSAmJiBpc0Zpbml0ZShuKTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIHN0eWxlIHRvIHRoZSBnaXZlbiBwb3BwZXJcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gYXBwbHkgdGhlIHN0eWxlIHRvXG4gKiBAYXJndW1lbnQge09iamVjdH0gc3R5bGVzXG4gKiBPYmplY3Qgd2l0aCBhIGxpc3Qgb2YgcHJvcGVydGllcyBhbmQgdmFsdWVzIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgZWxlbWVudFxuICovXG5mdW5jdGlvbiBzZXRTdHlsZXMoZWxlbWVudCwgc3R5bGVzKSB7XG4gIE9iamVjdC5rZXlzKHN0eWxlcykuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgIHZhciB1bml0ID0gJyc7XG4gICAgLy8gYWRkIHVuaXQgaWYgdGhlIHZhbHVlIGlzIG51bWVyaWMgYW5kIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nXG4gICAgaWYgKFsnd2lkdGgnLCAnaGVpZ2h0JywgJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddLmluZGV4T2YocHJvcCkgIT09IC0xICYmIGlzTnVtZXJpYyhzdHlsZXNbcHJvcF0pKSB7XG4gICAgICB1bml0ID0gJ3B4JztcbiAgICB9XG4gICAgZWxlbWVudC5zdHlsZVtwcm9wXSA9IHN0eWxlc1twcm9wXSArIHVuaXQ7XG4gIH0pO1xufVxuXG4vKipcbiAqIFNldCB0aGUgYXR0cmlidXRlcyB0byB0aGUgZ2l2ZW4gcG9wcGVyXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGFwcGx5IHRoZSBhdHRyaWJ1dGVzIHRvXG4gKiBAYXJndW1lbnQge09iamVjdH0gc3R5bGVzXG4gKiBPYmplY3Qgd2l0aCBhIGxpc3Qgb2YgcHJvcGVydGllcyBhbmQgdmFsdWVzIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgZWxlbWVudFxuICovXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIGF0dHJpYnV0ZXMpIHtcbiAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgIHZhciB2YWx1ZSA9IGF0dHJpYnV0ZXNbcHJvcF07XG4gICAgaWYgKHZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUocHJvcCwgYXR0cmlidXRlc1twcm9wXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHByb3ApO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgYHVwZGF0ZWAgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YS5zdHlsZXMgLSBMaXN0IG9mIHN0eWxlIHByb3BlcnRpZXMgLSB2YWx1ZXMgdG8gYXBwbHkgdG8gcG9wcGVyIGVsZW1lbnRcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhLmF0dHJpYnV0ZXMgLSBMaXN0IG9mIGF0dHJpYnV0ZSBwcm9wZXJ0aWVzIC0gdmFsdWVzIHRvIGFwcGx5IHRvIHBvcHBlciBlbGVtZW50XG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgc2FtZSBkYXRhIG9iamVjdFxuICovXG5mdW5jdGlvbiBhcHBseVN0eWxlKGRhdGEpIHtcbiAgLy8gYW55IHByb3BlcnR5IHByZXNlbnQgaW4gYGRhdGEuc3R5bGVzYCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlcixcbiAgLy8gaW4gdGhpcyB3YXkgd2UgY2FuIG1ha2UgdGhlIDNyZCBwYXJ0eSBtb2RpZmllcnMgYWRkIGN1c3RvbSBzdHlsZXMgdG8gaXRcbiAgLy8gQmUgYXdhcmUsIG1vZGlmaWVycyBjb3VsZCBvdmVycmlkZSB0aGUgcHJvcGVydGllcyBkZWZpbmVkIGluIHRoZSBwcmV2aW91c1xuICAvLyBsaW5lcyBvZiB0aGlzIG1vZGlmaWVyIVxuICBzZXRTdHlsZXMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEuc3R5bGVzKTtcblxuICAvLyBhbnkgcHJvcGVydHkgcHJlc2VudCBpbiBgZGF0YS5hdHRyaWJ1dGVzYCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlcixcbiAgLy8gdGhleSB3aWxsIGJlIHNldCBhcyBIVE1MIGF0dHJpYnV0ZXMgb2YgdGhlIGVsZW1lbnRcbiAgc2V0QXR0cmlidXRlcyhkYXRhLmluc3RhbmNlLnBvcHBlciwgZGF0YS5hdHRyaWJ1dGVzKTtcblxuICAvLyBpZiBhcnJvd0VsZW1lbnQgaXMgZGVmaW5lZCBhbmQgYXJyb3dTdHlsZXMgaGFzIHNvbWUgcHJvcGVydGllc1xuICBpZiAoZGF0YS5hcnJvd0VsZW1lbnQgJiYgT2JqZWN0LmtleXMoZGF0YS5hcnJvd1N0eWxlcykubGVuZ3RoKSB7XG4gICAgc2V0U3R5bGVzKGRhdGEuYXJyb3dFbGVtZW50LCBkYXRhLmFycm93U3R5bGVzKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIFNldCB0aGUgeC1wbGFjZW1lbnQgYXR0cmlidXRlIGJlZm9yZSBldmVyeXRoaW5nIGVsc2UgYmVjYXVzZSBpdCBjb3VsZCBiZSB1c2VkXG4gKiB0byBhZGQgbWFyZ2lucyB0byB0aGUgcG9wcGVyIG1hcmdpbnMgbmVlZHMgdG8gYmUgY2FsY3VsYXRlZCB0byBnZXQgdGhlXG4gKiBjb3JyZWN0IHBvcHBlciBvZmZzZXRzLlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5tb2RpZmllcnNcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgZWxlbWVudCB1c2VkIHRvIHBvc2l0aW9uIHRoZSBwb3BwZXJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBvcHBlciAtIFRoZSBIVE1MIGVsZW1lbnQgdXNlZCBhcyBwb3BwZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUG9wcGVyLmpzIG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gYXBwbHlTdHlsZU9uTG9hZChyZWZlcmVuY2UsIHBvcHBlciwgb3B0aW9ucywgbW9kaWZpZXJPcHRpb25zLCBzdGF0ZSkge1xuICAvLyBjb21wdXRlIHJlZmVyZW5jZSBlbGVtZW50IG9mZnNldHNcbiAgdmFyIHJlZmVyZW5jZU9mZnNldHMgPSBnZXRSZWZlcmVuY2VPZmZzZXRzKHN0YXRlLCBwb3BwZXIsIHJlZmVyZW5jZSwgb3B0aW9ucy5wb3NpdGlvbkZpeGVkKTtcblxuICAvLyBjb21wdXRlIGF1dG8gcGxhY2VtZW50LCBzdG9yZSBwbGFjZW1lbnQgaW5zaWRlIHRoZSBkYXRhIG9iamVjdCxcbiAgLy8gbW9kaWZpZXJzIHdpbGwgYmUgYWJsZSB0byBlZGl0IGBwbGFjZW1lbnRgIGlmIG5lZWRlZFxuICAvLyBhbmQgcmVmZXIgdG8gb3JpZ2luYWxQbGFjZW1lbnQgdG8ga25vdyB0aGUgb3JpZ2luYWwgdmFsdWVcbiAgdmFyIHBsYWNlbWVudCA9IGNvbXB1dGVBdXRvUGxhY2VtZW50KG9wdGlvbnMucGxhY2VtZW50LCByZWZlcmVuY2VPZmZzZXRzLCBwb3BwZXIsIHJlZmVyZW5jZSwgb3B0aW9ucy5tb2RpZmllcnMuZmxpcC5ib3VuZGFyaWVzRWxlbWVudCwgb3B0aW9ucy5tb2RpZmllcnMuZmxpcC5wYWRkaW5nKTtcblxuICBwb3BwZXIuc2V0QXR0cmlidXRlKCd4LXBsYWNlbWVudCcsIHBsYWNlbWVudCk7XG5cbiAgLy8gQXBwbHkgYHBvc2l0aW9uYCB0byBwb3BwZXIgYmVmb3JlIGFueXRoaW5nIGVsc2UgYmVjYXVzZVxuICAvLyB3aXRob3V0IHRoZSBwb3NpdGlvbiBhcHBsaWVkIHdlIGNhbid0IGd1YXJhbnRlZSBjb3JyZWN0IGNvbXB1dGF0aW9uc1xuICBzZXRTdHlsZXMocG9wcGVyLCB7IHBvc2l0aW9uOiBvcHRpb25zLnBvc2l0aW9uRml4ZWQgPyAnZml4ZWQnIDogJ2Fic29sdXRlJyB9KTtcblxuICByZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAqIEBhcmd1bWVudCB7Qm9vbGVhbn0gc2hvdWxkUm91bmQgLSBJZiB0aGUgb2Zmc2V0cyBzaG91bGQgYmUgcm91bmRlZCBhdCBhbGxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBwb3BwZXIncyBwb3NpdGlvbiBvZmZzZXRzIHJvdW5kZWRcbiAqXG4gKiBUaGUgdGFsZSBvZiBwaXhlbC1wZXJmZWN0IHBvc2l0aW9uaW5nLiBJdCdzIHN0aWxsIG5vdCAxMDAlIHBlcmZlY3QsIGJ1dCBhc1xuICogZ29vZCBhcyBpdCBjYW4gYmUgd2l0aGluIHJlYXNvbi5cbiAqIERpc2N1c3Npb24gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL0ZlelZyYXN0YS9wb3BwZXIuanMvcHVsbC83MTVcbiAqXG4gKiBMb3cgRFBJIHNjcmVlbnMgY2F1c2UgYSBwb3BwZXIgdG8gYmUgYmx1cnJ5IGlmIG5vdCB1c2luZyBmdWxsIHBpeGVscyAoU2FmYXJpXG4gKiBhcyB3ZWxsIG9uIEhpZ2ggRFBJIHNjcmVlbnMpLlxuICpcbiAqIEZpcmVmb3ggcHJlZmVycyBubyByb3VuZGluZyBmb3IgcG9zaXRpb25pbmcgYW5kIGRvZXMgbm90IGhhdmUgYmx1cnJpbmVzcyBvblxuICogaGlnaCBEUEkgc2NyZWVucy5cbiAqXG4gKiBPbmx5IGhvcml6b250YWwgcGxhY2VtZW50IGFuZCBsZWZ0L3JpZ2h0IHZhbHVlcyBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuXG4gKi9cbmZ1bmN0aW9uIGdldFJvdW5kZWRPZmZzZXRzKGRhdGEsIHNob3VsZFJvdW5kKSB7XG4gIHZhciBfZGF0YSRvZmZzZXRzID0gZGF0YS5vZmZzZXRzLFxuICAgICAgcG9wcGVyID0gX2RhdGEkb2Zmc2V0cy5wb3BwZXIsXG4gICAgICByZWZlcmVuY2UgPSBfZGF0YSRvZmZzZXRzLnJlZmVyZW5jZTtcbiAgdmFyIHJvdW5kID0gTWF0aC5yb3VuZCxcbiAgICAgIGZsb29yID0gTWF0aC5mbG9vcjtcblxuICB2YXIgbm9Sb3VuZCA9IGZ1bmN0aW9uIG5vUm91bmQodikge1xuICAgIHJldHVybiB2O1xuICB9O1xuXG4gIHZhciByZWZlcmVuY2VXaWR0aCA9IHJvdW5kKHJlZmVyZW5jZS53aWR0aCk7XG4gIHZhciBwb3BwZXJXaWR0aCA9IHJvdW5kKHBvcHBlci53aWR0aCk7XG5cbiAgdmFyIGlzVmVydGljYWwgPSBbJ2xlZnQnLCAncmlnaHQnXS5pbmRleE9mKGRhdGEucGxhY2VtZW50KSAhPT0gLTE7XG4gIHZhciBpc1ZhcmlhdGlvbiA9IGRhdGEucGxhY2VtZW50LmluZGV4T2YoJy0nKSAhPT0gLTE7XG4gIHZhciBzYW1lV2lkdGhQYXJpdHkgPSByZWZlcmVuY2VXaWR0aCAlIDIgPT09IHBvcHBlcldpZHRoICUgMjtcbiAgdmFyIGJvdGhPZGRXaWR0aCA9IHJlZmVyZW5jZVdpZHRoICUgMiA9PT0gMSAmJiBwb3BwZXJXaWR0aCAlIDIgPT09IDE7XG5cbiAgdmFyIGhvcml6b250YWxUb0ludGVnZXIgPSAhc2hvdWxkUm91bmQgPyBub1JvdW5kIDogaXNWZXJ0aWNhbCB8fCBpc1ZhcmlhdGlvbiB8fCBzYW1lV2lkdGhQYXJpdHkgPyByb3VuZCA6IGZsb29yO1xuICB2YXIgdmVydGljYWxUb0ludGVnZXIgPSAhc2hvdWxkUm91bmQgPyBub1JvdW5kIDogcm91bmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBsZWZ0OiBob3Jpem9udGFsVG9JbnRlZ2VyKGJvdGhPZGRXaWR0aCAmJiAhaXNWYXJpYXRpb24gJiYgc2hvdWxkUm91bmQgPyBwb3BwZXIubGVmdCAtIDEgOiBwb3BwZXIubGVmdCksXG4gICAgdG9wOiB2ZXJ0aWNhbFRvSW50ZWdlcihwb3BwZXIudG9wKSxcbiAgICBib3R0b206IHZlcnRpY2FsVG9JbnRlZ2VyKHBvcHBlci5ib3R0b20pLFxuICAgIHJpZ2h0OiBob3Jpem9udGFsVG9JbnRlZ2VyKHBvcHBlci5yaWdodClcbiAgfTtcbn1cblxudmFyIGlzRmlyZWZveCA9IGlzQnJvd3NlciAmJiAvRmlyZWZveC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgYHVwZGF0ZWAgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVTdHlsZShkYXRhLCBvcHRpb25zKSB7XG4gIHZhciB4ID0gb3B0aW9ucy54LFxuICAgICAgeSA9IG9wdGlvbnMueTtcbiAgdmFyIHBvcHBlciA9IGRhdGEub2Zmc2V0cy5wb3BwZXI7XG5cbiAgLy8gUmVtb3ZlIHRoaXMgbGVnYWN5IHN1cHBvcnQgaW4gUG9wcGVyLmpzIHYyXG5cbiAgdmFyIGxlZ2FjeUdwdUFjY2VsZXJhdGlvbk9wdGlvbiA9IGZpbmQoZGF0YS5pbnN0YW5jZS5tb2RpZmllcnMsIGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIHJldHVybiBtb2RpZmllci5uYW1lID09PSAnYXBwbHlTdHlsZSc7XG4gIH0pLmdwdUFjY2VsZXJhdGlvbjtcbiAgaWYgKGxlZ2FjeUdwdUFjY2VsZXJhdGlvbk9wdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc29sZS53YXJuKCdXQVJOSU5HOiBgZ3B1QWNjZWxlcmF0aW9uYCBvcHRpb24gbW92ZWQgdG8gYGNvbXB1dGVTdHlsZWAgbW9kaWZpZXIgYW5kIHdpbGwgbm90IGJlIHN1cHBvcnRlZCBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgUG9wcGVyLmpzIScpO1xuICB9XG4gIHZhciBncHVBY2NlbGVyYXRpb24gPSBsZWdhY3lHcHVBY2NlbGVyYXRpb25PcHRpb24gIT09IHVuZGVmaW5lZCA/IGxlZ2FjeUdwdUFjY2VsZXJhdGlvbk9wdGlvbiA6IG9wdGlvbnMuZ3B1QWNjZWxlcmF0aW9uO1xuXG4gIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQoZGF0YS5pbnN0YW5jZS5wb3BwZXIpO1xuICB2YXIgb2Zmc2V0UGFyZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQpO1xuXG4gIC8vIFN0eWxlc1xuICB2YXIgc3R5bGVzID0ge1xuICAgIHBvc2l0aW9uOiBwb3BwZXIucG9zaXRpb25cbiAgfTtcblxuICB2YXIgb2Zmc2V0cyA9IGdldFJvdW5kZWRPZmZzZXRzKGRhdGEsIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDwgMiB8fCAhaXNGaXJlZm94KTtcblxuICB2YXIgc2lkZUEgPSB4ID09PSAnYm90dG9tJyA/ICd0b3AnIDogJ2JvdHRvbSc7XG4gIHZhciBzaWRlQiA9IHkgPT09ICdyaWdodCcgPyAnbGVmdCcgOiAncmlnaHQnO1xuXG4gIC8vIGlmIGdwdUFjY2VsZXJhdGlvbiBpcyBzZXQgdG8gYHRydWVgIGFuZCB0cmFuc2Zvcm0gaXMgc3VwcG9ydGVkLFxuICAvLyAgd2UgdXNlIGB0cmFuc2xhdGUzZGAgdG8gYXBwbHkgdGhlIHBvc2l0aW9uIHRvIHRoZSBwb3BwZXIgd2VcbiAgLy8gYXV0b21hdGljYWxseSB1c2UgdGhlIHN1cHBvcnRlZCBwcmVmaXhlZCB2ZXJzaW9uIGlmIG5lZWRlZFxuICB2YXIgcHJlZml4ZWRQcm9wZXJ0eSA9IGdldFN1cHBvcnRlZFByb3BlcnR5TmFtZSgndHJhbnNmb3JtJyk7XG5cbiAgLy8gbm93LCBsZXQncyBtYWtlIGEgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHRoaXMgY29kZSBjbG9zZWx5ICh3dGY/KVxuICAvLyBJZiB0aGUgY29udGVudCBvZiB0aGUgcG9wcGVyIGdyb3dzIG9uY2UgaXQncyBiZWVuIHBvc2l0aW9uZWQsIGl0XG4gIC8vIG1heSBoYXBwZW4gdGhhdCB0aGUgcG9wcGVyIGdldHMgbWlzcGxhY2VkIGJlY2F1c2Ugb2YgdGhlIG5ldyBjb250ZW50XG4gIC8vIG92ZXJmbG93aW5nIGl0cyByZWZlcmVuY2UgZWxlbWVudFxuICAvLyBUbyBhdm9pZCB0aGlzIHByb2JsZW0sIHdlIHByb3ZpZGUgdHdvIG9wdGlvbnMgKHggYW5kIHkpLCB3aGljaCBhbGxvd1xuICAvLyB0aGUgY29uc3VtZXIgdG8gZGVmaW5lIHRoZSBvZmZzZXQgb3JpZ2luLlxuICAvLyBJZiB3ZSBwb3NpdGlvbiBhIHBvcHBlciBvbiB0b3Agb2YgYSByZWZlcmVuY2UgZWxlbWVudCwgd2UgY2FuIHNldFxuICAvLyBgeGAgdG8gYHRvcGAgdG8gbWFrZSB0aGUgcG9wcGVyIGdyb3cgdG93YXJkcyBpdHMgdG9wIGluc3RlYWQgb2ZcbiAgLy8gaXRzIGJvdHRvbS5cbiAgdmFyIGxlZnQgPSB2b2lkIDAsXG4gICAgICB0b3AgPSB2b2lkIDA7XG4gIGlmIChzaWRlQSA9PT0gJ2JvdHRvbScpIHtcbiAgICAvLyB3aGVuIG9mZnNldFBhcmVudCBpcyA8aHRtbD4gdGhlIHBvc2l0aW9uaW5nIGlzIHJlbGF0aXZlIHRvIHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbiAoZXhjbHVkaW5nIHRoZSBzY3JvbGxiYXIpXG4gICAgLy8gYW5kIG5vdCB0aGUgYm90dG9tIG9mIHRoZSBodG1sIGVsZW1lbnRcbiAgICBpZiAob2Zmc2V0UGFyZW50Lm5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICAgIHRvcCA9IC1vZmZzZXRQYXJlbnQuY2xpZW50SGVpZ2h0ICsgb2Zmc2V0cy5ib3R0b207XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvcCA9IC1vZmZzZXRQYXJlbnRSZWN0LmhlaWdodCArIG9mZnNldHMuYm90dG9tO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0b3AgPSBvZmZzZXRzLnRvcDtcbiAgfVxuICBpZiAoc2lkZUIgPT09ICdyaWdodCcpIHtcbiAgICBpZiAob2Zmc2V0UGFyZW50Lm5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICAgIGxlZnQgPSAtb2Zmc2V0UGFyZW50LmNsaWVudFdpZHRoICsgb2Zmc2V0cy5yaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGVmdCA9IC1vZmZzZXRQYXJlbnRSZWN0LndpZHRoICsgb2Zmc2V0cy5yaWdodDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGVmdCA9IG9mZnNldHMubGVmdDtcbiAgfVxuICBpZiAoZ3B1QWNjZWxlcmF0aW9uICYmIHByZWZpeGVkUHJvcGVydHkpIHtcbiAgICBzdHlsZXNbcHJlZml4ZWRQcm9wZXJ0eV0gPSAndHJhbnNsYXRlM2QoJyArIGxlZnQgKyAncHgsICcgKyB0b3AgKyAncHgsIDApJztcbiAgICBzdHlsZXNbc2lkZUFdID0gMDtcbiAgICBzdHlsZXNbc2lkZUJdID0gMDtcbiAgICBzdHlsZXMud2lsbENoYW5nZSA9ICd0cmFuc2Zvcm0nO1xuICB9IGVsc2Uge1xuICAgIC8vIG90aHdlcmlzZSwgd2UgdXNlIHRoZSBzdGFuZGFyZCBgdG9wYCwgYGxlZnRgLCBgYm90dG9tYCBhbmQgYHJpZ2h0YCBwcm9wZXJ0aWVzXG4gICAgdmFyIGludmVydFRvcCA9IHNpZGVBID09PSAnYm90dG9tJyA/IC0xIDogMTtcbiAgICB2YXIgaW52ZXJ0TGVmdCA9IHNpZGVCID09PSAncmlnaHQnID8gLTEgOiAxO1xuICAgIHN0eWxlc1tzaWRlQV0gPSB0b3AgKiBpbnZlcnRUb3A7XG4gICAgc3R5bGVzW3NpZGVCXSA9IGxlZnQgKiBpbnZlcnRMZWZ0O1xuICAgIHN0eWxlcy53aWxsQ2hhbmdlID0gc2lkZUEgKyAnLCAnICsgc2lkZUI7XG4gIH1cblxuICAvLyBBdHRyaWJ1dGVzXG4gIHZhciBhdHRyaWJ1dGVzID0ge1xuICAgICd4LXBsYWNlbWVudCc6IGRhdGEucGxhY2VtZW50XG4gIH07XG5cbiAgLy8gVXBkYXRlIGBkYXRhYCBhdHRyaWJ1dGVzLCBzdHlsZXMgYW5kIGFycm93U3R5bGVzXG4gIGRhdGEuYXR0cmlidXRlcyA9IF9leHRlbmRzKHt9LCBhdHRyaWJ1dGVzLCBkYXRhLmF0dHJpYnV0ZXMpO1xuICBkYXRhLnN0eWxlcyA9IF9leHRlbmRzKHt9LCBzdHlsZXMsIGRhdGEuc3R5bGVzKTtcbiAgZGF0YS5hcnJvd1N0eWxlcyA9IF9leHRlbmRzKHt9LCBkYXRhLm9mZnNldHMuYXJyb3csIGRhdGEuYXJyb3dTdHlsZXMpO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEhlbHBlciB1c2VkIHRvIGtub3cgaWYgdGhlIGdpdmVuIG1vZGlmaWVyIGRlcGVuZHMgZnJvbSBhbm90aGVyIG9uZS48YnIgLz5cbiAqIEl0IGNoZWNrcyBpZiB0aGUgbmVlZGVkIG1vZGlmaWVyIGlzIGxpc3RlZCBhbmQgZW5hYmxlZC5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7QXJyYXl9IG1vZGlmaWVycyAtIGxpc3Qgb2YgbW9kaWZpZXJzXG4gKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdGluZ05hbWUgLSBuYW1lIG9mIHJlcXVlc3RpbmcgbW9kaWZpZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0ZWROYW1lIC0gbmFtZSBvZiByZXF1ZXN0ZWQgbW9kaWZpZXJcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBpc01vZGlmaWVyUmVxdWlyZWQobW9kaWZpZXJzLCByZXF1ZXN0aW5nTmFtZSwgcmVxdWVzdGVkTmFtZSkge1xuICB2YXIgcmVxdWVzdGluZyA9IGZpbmQobW9kaWZpZXJzLCBmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBuYW1lID0gX3JlZi5uYW1lO1xuICAgIHJldHVybiBuYW1lID09PSByZXF1ZXN0aW5nTmFtZTtcbiAgfSk7XG5cbiAgdmFyIGlzUmVxdWlyZWQgPSAhIXJlcXVlc3RpbmcgJiYgbW9kaWZpZXJzLnNvbWUoZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgcmV0dXJuIG1vZGlmaWVyLm5hbWUgPT09IHJlcXVlc3RlZE5hbWUgJiYgbW9kaWZpZXIuZW5hYmxlZCAmJiBtb2RpZmllci5vcmRlciA8IHJlcXVlc3Rpbmcub3JkZXI7XG4gIH0pO1xuXG4gIGlmICghaXNSZXF1aXJlZCkge1xuICAgIHZhciBfcmVxdWVzdGluZyA9ICdgJyArIHJlcXVlc3RpbmdOYW1lICsgJ2AnO1xuICAgIHZhciByZXF1ZXN0ZWQgPSAnYCcgKyByZXF1ZXN0ZWROYW1lICsgJ2AnO1xuICAgIGNvbnNvbGUud2FybihyZXF1ZXN0ZWQgKyAnIG1vZGlmaWVyIGlzIHJlcXVpcmVkIGJ5ICcgKyBfcmVxdWVzdGluZyArICcgbW9kaWZpZXIgaW4gb3JkZXIgdG8gd29yaywgYmUgc3VyZSB0byBpbmNsdWRlIGl0IGJlZm9yZSAnICsgX3JlcXVlc3RpbmcgKyAnIScpO1xuICB9XG4gIHJldHVybiBpc1JlcXVpcmVkO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHVwZGF0ZSBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gYXJyb3coZGF0YSwgb3B0aW9ucykge1xuICB2YXIgX2RhdGEkb2Zmc2V0cyRhcnJvdztcblxuICAvLyBhcnJvdyBkZXBlbmRzIG9uIGtlZXBUb2dldGhlciBpbiBvcmRlciB0byB3b3JrXG4gIGlmICghaXNNb2RpZmllclJlcXVpcmVkKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCAnYXJyb3cnLCAna2VlcFRvZ2V0aGVyJykpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHZhciBhcnJvd0VsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQ7XG5cbiAgLy8gaWYgYXJyb3dFbGVtZW50IGlzIGEgc3RyaW5nLCBzdXBwb3NlIGl0J3MgYSBDU1Mgc2VsZWN0b3JcbiAgaWYgKHR5cGVvZiBhcnJvd0VsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgYXJyb3dFbGVtZW50ID0gZGF0YS5pbnN0YW5jZS5wb3BwZXIucXVlcnlTZWxlY3RvcihhcnJvd0VsZW1lbnQpO1xuXG4gICAgLy8gaWYgYXJyb3dFbGVtZW50IGlzIG5vdCBmb3VuZCwgZG9uJ3QgcnVuIHRoZSBtb2RpZmllclxuICAgIGlmICghYXJyb3dFbGVtZW50KSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgdGhlIGFycm93RWxlbWVudCBpc24ndCBhIHF1ZXJ5IHNlbGVjdG9yIHdlIG11c3QgY2hlY2sgdGhhdCB0aGVcbiAgICAvLyBwcm92aWRlZCBET00gbm9kZSBpcyBjaGlsZCBvZiBpdHMgcG9wcGVyIG5vZGVcbiAgICBpZiAoIWRhdGEuaW5zdGFuY2UucG9wcGVyLmNvbnRhaW5zKGFycm93RWxlbWVudCkpIHtcbiAgICAgIGNvbnNvbGUud2FybignV0FSTklORzogYGFycm93LmVsZW1lbnRgIG11c3QgYmUgY2hpbGQgb2YgaXRzIHBvcHBlciBlbGVtZW50IScpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICB9XG5cbiAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gIHZhciBfZGF0YSRvZmZzZXRzID0gZGF0YS5vZmZzZXRzLFxuICAgICAgcG9wcGVyID0gX2RhdGEkb2Zmc2V0cy5wb3BwZXIsXG4gICAgICByZWZlcmVuY2UgPSBfZGF0YSRvZmZzZXRzLnJlZmVyZW5jZTtcblxuICB2YXIgaXNWZXJ0aWNhbCA9IFsnbGVmdCcsICdyaWdodCddLmluZGV4T2YocGxhY2VtZW50KSAhPT0gLTE7XG5cbiAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gIHZhciBzaWRlQ2FwaXRhbGl6ZWQgPSBpc1ZlcnRpY2FsID8gJ1RvcCcgOiAnTGVmdCc7XG4gIHZhciBzaWRlID0gc2lkZUNhcGl0YWxpemVkLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBhbHRTaWRlID0gaXNWZXJ0aWNhbCA/ICdsZWZ0JyA6ICd0b3AnO1xuICB2YXIgb3BTaWRlID0gaXNWZXJ0aWNhbCA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgdmFyIGFycm93RWxlbWVudFNpemUgPSBnZXRPdXRlclNpemVzKGFycm93RWxlbWVudClbbGVuXTtcblxuICAvL1xuICAvLyBleHRlbmRzIGtlZXBUb2dldGhlciBiZWhhdmlvciBtYWtpbmcgc3VyZSB0aGUgcG9wcGVyIGFuZCBpdHNcbiAgLy8gcmVmZXJlbmNlIGhhdmUgZW5vdWdoIHBpeGVscyBpbiBjb25qdW5jdGlvblxuICAvL1xuXG4gIC8vIHRvcC9sZWZ0IHNpZGVcbiAgaWYgKHJlZmVyZW5jZVtvcFNpZGVdIC0gYXJyb3dFbGVtZW50U2l6ZSA8IHBvcHBlcltzaWRlXSkge1xuICAgIGRhdGEub2Zmc2V0cy5wb3BwZXJbc2lkZV0gLT0gcG9wcGVyW3NpZGVdIC0gKHJlZmVyZW5jZVtvcFNpZGVdIC0gYXJyb3dFbGVtZW50U2l6ZSk7XG4gIH1cbiAgLy8gYm90dG9tL3JpZ2h0IHNpZGVcbiAgaWYgKHJlZmVyZW5jZVtzaWRlXSArIGFycm93RWxlbWVudFNpemUgPiBwb3BwZXJbb3BTaWRlXSkge1xuICAgIGRhdGEub2Zmc2V0cy5wb3BwZXJbc2lkZV0gKz0gcmVmZXJlbmNlW3NpZGVdICsgYXJyb3dFbGVtZW50U2l6ZSAtIHBvcHBlcltvcFNpZGVdO1xuICB9XG4gIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSBnZXRDbGllbnRSZWN0KGRhdGEub2Zmc2V0cy5wb3BwZXIpO1xuXG4gIC8vIGNvbXB1dGUgY2VudGVyIG9mIHRoZSBwb3BwZXJcbiAgdmFyIGNlbnRlciA9IHJlZmVyZW5jZVtzaWRlXSArIHJlZmVyZW5jZVtsZW5dIC8gMiAtIGFycm93RWxlbWVudFNpemUgLyAyO1xuXG4gIC8vIENvbXB1dGUgdGhlIHNpZGVWYWx1ZSB1c2luZyB0aGUgdXBkYXRlZCBwb3BwZXIgb2Zmc2V0c1xuICAvLyB0YWtlIHBvcHBlciBtYXJnaW4gaW4gYWNjb3VudCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdGhpcyBpbmZvIGF2YWlsYWJsZVxuICB2YXIgY3NzID0gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGRhdGEuaW5zdGFuY2UucG9wcGVyKTtcbiAgdmFyIHBvcHBlck1hcmdpblNpZGUgPSBwYXJzZUZsb2F0KGNzc1snbWFyZ2luJyArIHNpZGVDYXBpdGFsaXplZF0sIDEwKTtcbiAgdmFyIHBvcHBlckJvcmRlclNpZGUgPSBwYXJzZUZsb2F0KGNzc1snYm9yZGVyJyArIHNpZGVDYXBpdGFsaXplZCArICdXaWR0aCddLCAxMCk7XG4gIHZhciBzaWRlVmFsdWUgPSBjZW50ZXIgLSBkYXRhLm9mZnNldHMucG9wcGVyW3NpZGVdIC0gcG9wcGVyTWFyZ2luU2lkZSAtIHBvcHBlckJvcmRlclNpZGU7XG5cbiAgLy8gcHJldmVudCBhcnJvd0VsZW1lbnQgZnJvbSBiZWluZyBwbGFjZWQgbm90IGNvbnRpZ3VvdXNseSB0byBpdHMgcG9wcGVyXG4gIHNpZGVWYWx1ZSA9IE1hdGgubWF4KE1hdGgubWluKHBvcHBlcltsZW5dIC0gYXJyb3dFbGVtZW50U2l6ZSwgc2lkZVZhbHVlKSwgMCk7XG5cbiAgZGF0YS5hcnJvd0VsZW1lbnQgPSBhcnJvd0VsZW1lbnQ7XG4gIGRhdGEub2Zmc2V0cy5hcnJvdyA9IChfZGF0YSRvZmZzZXRzJGFycm93ID0ge30sIGRlZmluZVByb3BlcnR5KF9kYXRhJG9mZnNldHMkYXJyb3csIHNpZGUsIE1hdGgucm91bmQoc2lkZVZhbHVlKSksIGRlZmluZVByb3BlcnR5KF9kYXRhJG9mZnNldHMkYXJyb3csIGFsdFNpZGUsICcnKSwgX2RhdGEkb2Zmc2V0cyRhcnJvdyk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogR2V0IHRoZSBvcHBvc2l0ZSBwbGFjZW1lbnQgdmFyaWF0aW9uIG9mIHRoZSBnaXZlbiBvbmVcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBwbGFjZW1lbnQgdmFyaWF0aW9uXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBmbGlwcGVkIHBsYWNlbWVudCB2YXJpYXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVWYXJpYXRpb24odmFyaWF0aW9uKSB7XG4gIGlmICh2YXJpYXRpb24gPT09ICdlbmQnKSB7XG4gICAgcmV0dXJuICdzdGFydCc7XG4gIH0gZWxzZSBpZiAodmFyaWF0aW9uID09PSAnc3RhcnQnKSB7XG4gICAgcmV0dXJuICdlbmQnO1xuICB9XG4gIHJldHVybiB2YXJpYXRpb247XG59XG5cbi8qKlxuICogTGlzdCBvZiBhY2NlcHRlZCBwbGFjZW1lbnRzIHRvIHVzZSBhcyB2YWx1ZXMgb2YgdGhlIGBwbGFjZW1lbnRgIG9wdGlvbi48YnIgLz5cbiAqIFZhbGlkIHBsYWNlbWVudHMgYXJlOlxuICogLSBgYXV0b2BcbiAqIC0gYHRvcGBcbiAqIC0gYHJpZ2h0YFxuICogLSBgYm90dG9tYFxuICogLSBgbGVmdGBcbiAqXG4gKiBFYWNoIHBsYWNlbWVudCBjYW4gaGF2ZSBhIHZhcmlhdGlvbiBmcm9tIHRoaXMgbGlzdDpcbiAqIC0gYC1zdGFydGBcbiAqIC0gYC1lbmRgXG4gKlxuICogVmFyaWF0aW9ucyBhcmUgaW50ZXJwcmV0ZWQgZWFzaWx5IGlmIHlvdSB0aGluayBvZiB0aGVtIGFzIHRoZSBsZWZ0IHRvIHJpZ2h0XG4gKiB3cml0dGVuIGxhbmd1YWdlcy4gSG9yaXpvbnRhbGx5IChgdG9wYCBhbmQgYGJvdHRvbWApLCBgc3RhcnRgIGlzIGxlZnQgYW5kIGBlbmRgXG4gKiBpcyByaWdodC48YnIgLz5cbiAqIFZlcnRpY2FsbHkgKGBsZWZ0YCBhbmQgYHJpZ2h0YCksIGBzdGFydGAgaXMgdG9wIGFuZCBgZW5kYCBpcyBib3R0b20uXG4gKlxuICogU29tZSB2YWxpZCBleGFtcGxlcyBhcmU6XG4gKiAtIGB0b3AtZW5kYCAob24gdG9wIG9mIHJlZmVyZW5jZSwgcmlnaHQgYWxpZ25lZClcbiAqIC0gYHJpZ2h0LXN0YXJ0YCAob24gcmlnaHQgb2YgcmVmZXJlbmNlLCB0b3AgYWxpZ25lZClcbiAqIC0gYGJvdHRvbWAgKG9uIGJvdHRvbSwgY2VudGVyZWQpXG4gKiAtIGBhdXRvLWVuZGAgKG9uIHRoZSBzaWRlIHdpdGggbW9yZSBzcGFjZSBhdmFpbGFibGUsIGFsaWdubWVudCBkZXBlbmRzIGJ5IHBsYWNlbWVudClcbiAqXG4gKiBAc3RhdGljXG4gKiBAdHlwZSB7QXJyYXl9XG4gKiBAZW51bSB7U3RyaW5nfVxuICogQHJlYWRvbmx5XG4gKiBAbWV0aG9kIHBsYWNlbWVudHNcbiAqIEBtZW1iZXJvZiBQb3BwZXJcbiAqL1xudmFyIHBsYWNlbWVudHMgPSBbJ2F1dG8tc3RhcnQnLCAnYXV0bycsICdhdXRvLWVuZCcsICd0b3Atc3RhcnQnLCAndG9wJywgJ3RvcC1lbmQnLCAncmlnaHQtc3RhcnQnLCAncmlnaHQnLCAncmlnaHQtZW5kJywgJ2JvdHRvbS1lbmQnLCAnYm90dG9tJywgJ2JvdHRvbS1zdGFydCcsICdsZWZ0LWVuZCcsICdsZWZ0JywgJ2xlZnQtc3RhcnQnXTtcblxuLy8gR2V0IHJpZCBvZiBgYXV0b2AgYGF1dG8tc3RhcnRgIGFuZCBgYXV0by1lbmRgXG52YXIgdmFsaWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cy5zbGljZSgzKTtcblxuLyoqXG4gKiBHaXZlbiBhbiBpbml0aWFsIHBsYWNlbWVudCwgcmV0dXJucyBhbGwgdGhlIHN1YnNlcXVlbnQgcGxhY2VtZW50c1xuICogY2xvY2t3aXNlIChvciBjb3VudGVyLWNsb2Nrd2lzZSkuXG4gKlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtTdHJpbmd9IHBsYWNlbWVudCAtIEEgdmFsaWQgcGxhY2VtZW50IChpdCBhY2NlcHRzIHZhcmlhdGlvbnMpXG4gKiBAYXJndW1lbnQge0Jvb2xlYW59IGNvdW50ZXIgLSBTZXQgdG8gdHJ1ZSB0byB3YWxrIHRoZSBwbGFjZW1lbnRzIGNvdW50ZXJjbG9ja3dpc2VcbiAqIEByZXR1cm5zIHtBcnJheX0gcGxhY2VtZW50cyBpbmNsdWRpbmcgdGhlaXIgdmFyaWF0aW9uc1xuICovXG5mdW5jdGlvbiBjbG9ja3dpc2UocGxhY2VtZW50KSB7XG4gIHZhciBjb3VudGVyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcblxuICB2YXIgaW5kZXggPSB2YWxpZFBsYWNlbWVudHMuaW5kZXhPZihwbGFjZW1lbnQpO1xuICB2YXIgYXJyID0gdmFsaWRQbGFjZW1lbnRzLnNsaWNlKGluZGV4ICsgMSkuY29uY2F0KHZhbGlkUGxhY2VtZW50cy5zbGljZSgwLCBpbmRleCkpO1xuICByZXR1cm4gY291bnRlciA/IGFyci5yZXZlcnNlKCkgOiBhcnI7XG59XG5cbnZhciBCRUhBVklPUlMgPSB7XG4gIEZMSVA6ICdmbGlwJyxcbiAgQ0xPQ0tXSVNFOiAnY2xvY2t3aXNlJyxcbiAgQ09VTlRFUkNMT0NLV0lTRTogJ2NvdW50ZXJjbG9ja3dpc2UnXG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHVwZGF0ZSBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gZmxpcChkYXRhLCBvcHRpb25zKSB7XG4gIC8vIGlmIGBpbm5lcmAgbW9kaWZpZXIgaXMgZW5hYmxlZCwgd2UgY2FuJ3QgdXNlIHRoZSBgZmxpcGAgbW9kaWZpZXJcbiAgaWYgKGlzTW9kaWZpZXJFbmFibGVkKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCAnaW5uZXInKSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgaWYgKGRhdGEuZmxpcHBlZCAmJiBkYXRhLnBsYWNlbWVudCA9PT0gZGF0YS5vcmlnaW5hbFBsYWNlbWVudCkge1xuICAgIC8vIHNlZW1zIGxpa2UgZmxpcCBpcyB0cnlpbmcgdG8gbG9vcCwgcHJvYmFibHkgdGhlcmUncyBub3QgZW5vdWdoIHNwYWNlIG9uIGFueSBvZiB0aGUgZmxpcHBhYmxlIHNpZGVzXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICB2YXIgYm91bmRhcmllcyA9IGdldEJvdW5kYXJpZXMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEuaW5zdGFuY2UucmVmZXJlbmNlLCBvcHRpb25zLnBhZGRpbmcsIG9wdGlvbnMuYm91bmRhcmllc0VsZW1lbnQsIGRhdGEucG9zaXRpb25GaXhlZCk7XG5cbiAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gIHZhciBwbGFjZW1lbnRPcHBvc2l0ZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHZhciB2YXJpYXRpb24gPSBkYXRhLnBsYWNlbWVudC5zcGxpdCgnLScpWzFdIHx8ICcnO1xuXG4gIHZhciBmbGlwT3JkZXIgPSBbXTtcblxuICBzd2l0Y2ggKG9wdGlvbnMuYmVoYXZpb3IpIHtcbiAgICBjYXNlIEJFSEFWSU9SUy5GTElQOlxuICAgICAgZmxpcE9yZGVyID0gW3BsYWNlbWVudCwgcGxhY2VtZW50T3Bwb3NpdGVdO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBCRUhBVklPUlMuQ0xPQ0tXSVNFOlxuICAgICAgZmxpcE9yZGVyID0gY2xvY2t3aXNlKHBsYWNlbWVudCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIEJFSEFWSU9SUy5DT1VOVEVSQ0xPQ0tXSVNFOlxuICAgICAgZmxpcE9yZGVyID0gY2xvY2t3aXNlKHBsYWNlbWVudCwgdHJ1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgZmxpcE9yZGVyID0gb3B0aW9ucy5iZWhhdmlvcjtcbiAgfVxuXG4gIGZsaXBPcmRlci5mb3JFYWNoKGZ1bmN0aW9uIChzdGVwLCBpbmRleCkge1xuICAgIGlmIChwbGFjZW1lbnQgIT09IHN0ZXAgfHwgZmxpcE9yZGVyLmxlbmd0aCA9PT0gaW5kZXggKyAxKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICAgIHBsYWNlbWVudE9wcG9zaXRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcblxuICAgIHZhciBwb3BwZXJPZmZzZXRzID0gZGF0YS5vZmZzZXRzLnBvcHBlcjtcbiAgICB2YXIgcmVmT2Zmc2V0cyA9IGRhdGEub2Zmc2V0cy5yZWZlcmVuY2U7XG5cbiAgICAvLyB1c2luZyBmbG9vciBiZWNhdXNlIHRoZSByZWZlcmVuY2Ugb2Zmc2V0cyBtYXkgY29udGFpbiBkZWNpbWFscyB3ZSBhcmUgbm90IGdvaW5nIHRvIGNvbnNpZGVyIGhlcmVcbiAgICB2YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuICAgIHZhciBvdmVybGFwc1JlZiA9IHBsYWNlbWVudCA9PT0gJ2xlZnQnICYmIGZsb29yKHBvcHBlck9mZnNldHMucmlnaHQpID4gZmxvb3IocmVmT2Zmc2V0cy5sZWZ0KSB8fCBwbGFjZW1lbnQgPT09ICdyaWdodCcgJiYgZmxvb3IocG9wcGVyT2Zmc2V0cy5sZWZ0KSA8IGZsb29yKHJlZk9mZnNldHMucmlnaHQpIHx8IHBsYWNlbWVudCA9PT0gJ3RvcCcgJiYgZmxvb3IocG9wcGVyT2Zmc2V0cy5ib3R0b20pID4gZmxvb3IocmVmT2Zmc2V0cy50b3ApIHx8IHBsYWNlbWVudCA9PT0gJ2JvdHRvbScgJiYgZmxvb3IocG9wcGVyT2Zmc2V0cy50b3ApIDwgZmxvb3IocmVmT2Zmc2V0cy5ib3R0b20pO1xuXG4gICAgdmFyIG92ZXJmbG93c0xlZnQgPSBmbG9vcihwb3BwZXJPZmZzZXRzLmxlZnQpIDwgZmxvb3IoYm91bmRhcmllcy5sZWZ0KTtcbiAgICB2YXIgb3ZlcmZsb3dzUmlnaHQgPSBmbG9vcihwb3BwZXJPZmZzZXRzLnJpZ2h0KSA+IGZsb29yKGJvdW5kYXJpZXMucmlnaHQpO1xuICAgIHZhciBvdmVyZmxvd3NUb3AgPSBmbG9vcihwb3BwZXJPZmZzZXRzLnRvcCkgPCBmbG9vcihib3VuZGFyaWVzLnRvcCk7XG4gICAgdmFyIG92ZXJmbG93c0JvdHRvbSA9IGZsb29yKHBvcHBlck9mZnNldHMuYm90dG9tKSA+IGZsb29yKGJvdW5kYXJpZXMuYm90dG9tKTtcblxuICAgIHZhciBvdmVyZmxvd3NCb3VuZGFyaWVzID0gcGxhY2VtZW50ID09PSAnbGVmdCcgJiYgb3ZlcmZsb3dzTGVmdCB8fCBwbGFjZW1lbnQgPT09ICdyaWdodCcgJiYgb3ZlcmZsb3dzUmlnaHQgfHwgcGxhY2VtZW50ID09PSAndG9wJyAmJiBvdmVyZmxvd3NUb3AgfHwgcGxhY2VtZW50ID09PSAnYm90dG9tJyAmJiBvdmVyZmxvd3NCb3R0b207XG5cbiAgICAvLyBmbGlwIHRoZSB2YXJpYXRpb24gaWYgcmVxdWlyZWRcbiAgICB2YXIgaXNWZXJ0aWNhbCA9IFsndG9wJywgJ2JvdHRvbSddLmluZGV4T2YocGxhY2VtZW50KSAhPT0gLTE7XG5cbiAgICAvLyBmbGlwcyB2YXJpYXRpb24gaWYgcmVmZXJlbmNlIGVsZW1lbnQgb3ZlcmZsb3dzIGJvdW5kYXJpZXNcbiAgICB2YXIgZmxpcHBlZFZhcmlhdGlvbkJ5UmVmID0gISFvcHRpb25zLmZsaXBWYXJpYXRpb25zICYmIChpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ3N0YXJ0JyAmJiBvdmVyZmxvd3NMZWZ0IHx8IGlzVmVydGljYWwgJiYgdmFyaWF0aW9uID09PSAnZW5kJyAmJiBvdmVyZmxvd3NSaWdodCB8fCAhaXNWZXJ0aWNhbCAmJiB2YXJpYXRpb24gPT09ICdzdGFydCcgJiYgb3ZlcmZsb3dzVG9wIHx8ICFpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ2VuZCcgJiYgb3ZlcmZsb3dzQm90dG9tKTtcblxuICAgIC8vIGZsaXBzIHZhcmlhdGlvbiBpZiBwb3BwZXIgY29udGVudCBvdmVyZmxvd3MgYm91bmRhcmllc1xuICAgIHZhciBmbGlwcGVkVmFyaWF0aW9uQnlDb250ZW50ID0gISFvcHRpb25zLmZsaXBWYXJpYXRpb25zQnlDb250ZW50ICYmIChpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ3N0YXJ0JyAmJiBvdmVyZmxvd3NSaWdodCB8fCBpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ2VuZCcgJiYgb3ZlcmZsb3dzTGVmdCB8fCAhaXNWZXJ0aWNhbCAmJiB2YXJpYXRpb24gPT09ICdzdGFydCcgJiYgb3ZlcmZsb3dzQm90dG9tIHx8ICFpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ2VuZCcgJiYgb3ZlcmZsb3dzVG9wKTtcblxuICAgIHZhciBmbGlwcGVkVmFyaWF0aW9uID0gZmxpcHBlZFZhcmlhdGlvbkJ5UmVmIHx8IGZsaXBwZWRWYXJpYXRpb25CeUNvbnRlbnQ7XG5cbiAgICBpZiAob3ZlcmxhcHNSZWYgfHwgb3ZlcmZsb3dzQm91bmRhcmllcyB8fCBmbGlwcGVkVmFyaWF0aW9uKSB7XG4gICAgICAvLyB0aGlzIGJvb2xlYW4gdG8gZGV0ZWN0IGFueSBmbGlwIGxvb3BcbiAgICAgIGRhdGEuZmxpcHBlZCA9IHRydWU7XG5cbiAgICAgIGlmIChvdmVybGFwc1JlZiB8fCBvdmVyZmxvd3NCb3VuZGFyaWVzKSB7XG4gICAgICAgIHBsYWNlbWVudCA9IGZsaXBPcmRlcltpbmRleCArIDFdO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmxpcHBlZFZhcmlhdGlvbikge1xuICAgICAgICB2YXJpYXRpb24gPSBnZXRPcHBvc2l0ZVZhcmlhdGlvbih2YXJpYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBkYXRhLnBsYWNlbWVudCA9IHBsYWNlbWVudCArICh2YXJpYXRpb24gPyAnLScgKyB2YXJpYXRpb24gOiAnJyk7XG5cbiAgICAgIC8vIHRoaXMgb2JqZWN0IGNvbnRhaW5zIGBwb3NpdGlvbmAsIHdlIHdhbnQgdG8gcHJlc2VydmUgaXQgYWxvbmcgd2l0aFxuICAgICAgLy8gYW55IGFkZGl0aW9uYWwgcHJvcGVydHkgd2UgbWF5IGFkZCBpbiB0aGUgZnV0dXJlXG4gICAgICBkYXRhLm9mZnNldHMucG9wcGVyID0gX2V4dGVuZHMoe30sIGRhdGEub2Zmc2V0cy5wb3BwZXIsIGdldFBvcHBlck9mZnNldHMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEub2Zmc2V0cy5yZWZlcmVuY2UsIGRhdGEucGxhY2VtZW50KSk7XG5cbiAgICAgIGRhdGEgPSBydW5Nb2RpZmllcnMoZGF0YS5pbnN0YW5jZS5tb2RpZmllcnMsIGRhdGEsICdmbGlwJyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgdXBkYXRlIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBrZWVwVG9nZXRoZXIoZGF0YSkge1xuICB2YXIgX2RhdGEkb2Zmc2V0cyA9IGRhdGEub2Zmc2V0cyxcbiAgICAgIHBvcHBlciA9IF9kYXRhJG9mZnNldHMucG9wcGVyLFxuICAgICAgcmVmZXJlbmNlID0gX2RhdGEkb2Zmc2V0cy5yZWZlcmVuY2U7XG5cbiAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gIHZhciBmbG9vciA9IE1hdGguZmxvb3I7XG4gIHZhciBpc1ZlcnRpY2FsID0gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMTtcbiAgdmFyIHNpZGUgPSBpc1ZlcnRpY2FsID8gJ3JpZ2h0JyA6ICdib3R0b20nO1xuICB2YXIgb3BTaWRlID0gaXNWZXJ0aWNhbCA/ICdsZWZ0JyA6ICd0b3AnO1xuICB2YXIgbWVhc3VyZW1lbnQgPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuXG4gIGlmIChwb3BwZXJbc2lkZV0gPCBmbG9vcihyZWZlcmVuY2Vbb3BTaWRlXSkpIHtcbiAgICBkYXRhLm9mZnNldHMucG9wcGVyW29wU2lkZV0gPSBmbG9vcihyZWZlcmVuY2Vbb3BTaWRlXSkgLSBwb3BwZXJbbWVhc3VyZW1lbnRdO1xuICB9XG4gIGlmIChwb3BwZXJbb3BTaWRlXSA+IGZsb29yKHJlZmVyZW5jZVtzaWRlXSkpIHtcbiAgICBkYXRhLm9mZnNldHMucG9wcGVyW29wU2lkZV0gPSBmbG9vcihyZWZlcmVuY2Vbc2lkZV0pO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgY29udGFpbmluZyB2YWx1ZSArIHVuaXQgaW50byBhIHB4IHZhbHVlIG51bWJlclxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2Yge21vZGlmaWVyc35vZmZzZXR9XG4gKiBAcHJpdmF0ZVxuICogQGFyZ3VtZW50IHtTdHJpbmd9IHN0ciAtIFZhbHVlICsgdW5pdCBzdHJpbmdcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBtZWFzdXJlbWVudCAtIGBoZWlnaHRgIG9yIGB3aWR0aGBcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBwb3BwZXJPZmZzZXRzXG4gKiBAYXJndW1lbnQge09iamVjdH0gcmVmZXJlbmNlT2Zmc2V0c1xuICogQHJldHVybnMge051bWJlcnxTdHJpbmd9XG4gKiBWYWx1ZSBpbiBwaXhlbHMsIG9yIG9yaWdpbmFsIHN0cmluZyBpZiBubyB2YWx1ZXMgd2VyZSBleHRyYWN0ZWRcbiAqL1xuZnVuY3Rpb24gdG9WYWx1ZShzdHIsIG1lYXN1cmVtZW50LCBwb3BwZXJPZmZzZXRzLCByZWZlcmVuY2VPZmZzZXRzKSB7XG4gIC8vIHNlcGFyYXRlIHZhbHVlIGZyb20gdW5pdFxuICB2YXIgc3BsaXQgPSBzdHIubWF0Y2goLygoPzpcXC18XFwrKT9cXGQqXFwuP1xcZCopKC4qKS8pO1xuICB2YXIgdmFsdWUgPSArc3BsaXRbMV07XG4gIHZhciB1bml0ID0gc3BsaXRbMl07XG5cbiAgLy8gSWYgaXQncyBub3QgYSBudW1iZXIgaXQncyBhbiBvcGVyYXRvciwgSSBndWVzc1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIGlmICh1bml0LmluZGV4T2YoJyUnKSA9PT0gMCkge1xuICAgIHZhciBlbGVtZW50ID0gdm9pZCAwO1xuICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgY2FzZSAnJXAnOlxuICAgICAgICBlbGVtZW50ID0gcG9wcGVyT2Zmc2V0cztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICclJzpcbiAgICAgIGNhc2UgJyVyJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGVsZW1lbnQgPSByZWZlcmVuY2VPZmZzZXRzO1xuICAgIH1cblxuICAgIHZhciByZWN0ID0gZ2V0Q2xpZW50UmVjdChlbGVtZW50KTtcbiAgICByZXR1cm4gcmVjdFttZWFzdXJlbWVudF0gLyAxMDAgKiB2YWx1ZTtcbiAgfSBlbHNlIGlmICh1bml0ID09PSAndmgnIHx8IHVuaXQgPT09ICd2dycpIHtcbiAgICAvLyBpZiBpcyBhIHZoIG9yIHZ3LCB3ZSBjYWxjdWxhdGUgdGhlIHNpemUgYmFzZWQgb24gdGhlIHZpZXdwb3J0XG4gICAgdmFyIHNpemUgPSB2b2lkIDA7XG4gICAgaWYgKHVuaXQgPT09ICd2aCcpIHtcbiAgICAgIHNpemUgPSBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNpemUgPSBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApO1xuICAgIH1cbiAgICByZXR1cm4gc2l6ZSAvIDEwMCAqIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIC8vIGlmIGlzIGFuIGV4cGxpY2l0IHBpeGVsIHVuaXQsIHdlIGdldCByaWQgb2YgdGhlIHVuaXQgYW5kIGtlZXAgdGhlIHZhbHVlXG4gICAgLy8gaWYgaXMgYW4gaW1wbGljaXQgdW5pdCwgaXQncyBweCwgYW5kIHdlIHJldHVybiBqdXN0IHRoZSB2YWx1ZVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlIGFuIGBvZmZzZXRgIHN0cmluZyB0byBleHRyYXBvbGF0ZSBgeGAgYW5kIGB5YCBudW1lcmljIG9mZnNldHMuXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiB7bW9kaWZpZXJzfm9mZnNldH1cbiAqIEBwcml2YXRlXG4gKiBAYXJndW1lbnQge1N0cmluZ30gb2Zmc2V0XG4gKiBAYXJndW1lbnQge09iamVjdH0gcG9wcGVyT2Zmc2V0c1xuICogQGFyZ3VtZW50IHtPYmplY3R9IHJlZmVyZW5jZU9mZnNldHNcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBiYXNlUGxhY2VtZW50XG4gKiBAcmV0dXJucyB7QXJyYXl9IGEgdHdvIGNlbGxzIGFycmF5IHdpdGggeCBhbmQgeSBvZmZzZXRzIGluIG51bWJlcnNcbiAqL1xuZnVuY3Rpb24gcGFyc2VPZmZzZXQob2Zmc2V0LCBwb3BwZXJPZmZzZXRzLCByZWZlcmVuY2VPZmZzZXRzLCBiYXNlUGxhY2VtZW50KSB7XG4gIHZhciBvZmZzZXRzID0gWzAsIDBdO1xuXG4gIC8vIFVzZSBoZWlnaHQgaWYgcGxhY2VtZW50IGlzIGxlZnQgb3IgcmlnaHQgYW5kIGluZGV4IGlzIDAgb3RoZXJ3aXNlIHVzZSB3aWR0aFxuICAvLyBpbiB0aGlzIHdheSB0aGUgZmlyc3Qgb2Zmc2V0IHdpbGwgdXNlIGFuIGF4aXMgYW5kIHRoZSBzZWNvbmQgb25lXG4gIC8vIHdpbGwgdXNlIHRoZSBvdGhlciBvbmVcbiAgdmFyIHVzZUhlaWdodCA9IFsncmlnaHQnLCAnbGVmdCddLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgIT09IC0xO1xuXG4gIC8vIFNwbGl0IHRoZSBvZmZzZXQgc3RyaW5nIHRvIG9idGFpbiBhIGxpc3Qgb2YgdmFsdWVzIGFuZCBvcGVyYW5kc1xuICAvLyBUaGUgcmVnZXggYWRkcmVzc2VzIHZhbHVlcyB3aXRoIHRoZSBwbHVzIG9yIG1pbnVzIHNpZ24gaW4gZnJvbnQgKCsxMCwgLTIwLCBldGMpXG4gIHZhciBmcmFnbWVudHMgPSBvZmZzZXQuc3BsaXQoLyhcXCt8XFwtKS8pLm1hcChmdW5jdGlvbiAoZnJhZykge1xuICAgIHJldHVybiBmcmFnLnRyaW0oKTtcbiAgfSk7XG5cbiAgLy8gRGV0ZWN0IGlmIHRoZSBvZmZzZXQgc3RyaW5nIGNvbnRhaW5zIGEgcGFpciBvZiB2YWx1ZXMgb3IgYSBzaW5nbGUgb25lXG4gIC8vIHRoZXkgY291bGQgYmUgc2VwYXJhdGVkIGJ5IGNvbW1hIG9yIHNwYWNlXG4gIHZhciBkaXZpZGVyID0gZnJhZ21lbnRzLmluZGV4T2YoZmluZChmcmFnbWVudHMsIGZ1bmN0aW9uIChmcmFnKSB7XG4gICAgcmV0dXJuIGZyYWcuc2VhcmNoKC8sfFxccy8pICE9PSAtMTtcbiAgfSkpO1xuXG4gIGlmIChmcmFnbWVudHNbZGl2aWRlcl0gJiYgZnJhZ21lbnRzW2RpdmlkZXJdLmluZGV4T2YoJywnKSA9PT0gLTEpIHtcbiAgICBjb25zb2xlLndhcm4oJ09mZnNldHMgc2VwYXJhdGVkIGJ5IHdoaXRlIHNwYWNlKHMpIGFyZSBkZXByZWNhdGVkLCB1c2UgYSBjb21tYSAoLCkgaW5zdGVhZC4nKTtcbiAgfVxuXG4gIC8vIElmIGRpdmlkZXIgaXMgZm91bmQsIHdlIGRpdmlkZSB0aGUgbGlzdCBvZiB2YWx1ZXMgYW5kIG9wZXJhbmRzIHRvIGRpdmlkZVxuICAvLyB0aGVtIGJ5IG9mc2V0IFggYW5kIFkuXG4gIHZhciBzcGxpdFJlZ2V4ID0gL1xccyosXFxzKnxcXHMrLztcbiAgdmFyIG9wcyA9IGRpdmlkZXIgIT09IC0xID8gW2ZyYWdtZW50cy5zbGljZSgwLCBkaXZpZGVyKS5jb25jYXQoW2ZyYWdtZW50c1tkaXZpZGVyXS5zcGxpdChzcGxpdFJlZ2V4KVswXV0pLCBbZnJhZ21lbnRzW2RpdmlkZXJdLnNwbGl0KHNwbGl0UmVnZXgpWzFdXS5jb25jYXQoZnJhZ21lbnRzLnNsaWNlKGRpdmlkZXIgKyAxKSldIDogW2ZyYWdtZW50c107XG5cbiAgLy8gQ29udmVydCB0aGUgdmFsdWVzIHdpdGggdW5pdHMgdG8gYWJzb2x1dGUgcGl4ZWxzIHRvIGFsbG93IG91ciBjb21wdXRhdGlvbnNcbiAgb3BzID0gb3BzLm1hcChmdW5jdGlvbiAob3AsIGluZGV4KSB7XG4gICAgLy8gTW9zdCBvZiB0aGUgdW5pdHMgcmVseSBvbiB0aGUgb3JpZW50YXRpb24gb2YgdGhlIHBvcHBlclxuICAgIHZhciBtZWFzdXJlbWVudCA9IChpbmRleCA9PT0gMSA/ICF1c2VIZWlnaHQgOiB1c2VIZWlnaHQpID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgIHZhciBtZXJnZVdpdGhQcmV2aW91cyA9IGZhbHNlO1xuICAgIHJldHVybiBvcFxuICAgIC8vIFRoaXMgYWdncmVnYXRlcyBhbnkgYCtgIG9yIGAtYCBzaWduIHRoYXQgYXJlbid0IGNvbnNpZGVyZWQgb3BlcmF0b3JzXG4gICAgLy8gZS5nLjogMTAgKyArNSA9PiBbMTAsICssICs1XVxuICAgIC5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIGlmIChhW2EubGVuZ3RoIC0gMV0gPT09ICcnICYmIFsnKycsICctJ10uaW5kZXhPZihiKSAhPT0gLTEpIHtcbiAgICAgICAgYVthLmxlbmd0aCAtIDFdID0gYjtcbiAgICAgICAgbWVyZ2VXaXRoUHJldmlvdXMgPSB0cnVlO1xuICAgICAgICByZXR1cm4gYTtcbiAgICAgIH0gZWxzZSBpZiAobWVyZ2VXaXRoUHJldmlvdXMpIHtcbiAgICAgICAgYVthLmxlbmd0aCAtIDFdICs9IGI7XG4gICAgICAgIG1lcmdlV2l0aFByZXZpb3VzID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGEuY29uY2F0KGIpO1xuICAgICAgfVxuICAgIH0sIFtdKVxuICAgIC8vIEhlcmUgd2UgY29udmVydCB0aGUgc3RyaW5nIHZhbHVlcyBpbnRvIG51bWJlciB2YWx1ZXMgKGluIHB4KVxuICAgIC5tYXAoZnVuY3Rpb24gKHN0cikge1xuICAgICAgcmV0dXJuIHRvVmFsdWUoc3RyLCBtZWFzdXJlbWVudCwgcG9wcGVyT2Zmc2V0cywgcmVmZXJlbmNlT2Zmc2V0cyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIExvb3AgdHJvdWdoIHRoZSBvZmZzZXRzIGFycmF5cyBhbmQgZXhlY3V0ZSB0aGUgb3BlcmF0aW9uc1xuICBvcHMuZm9yRWFjaChmdW5jdGlvbiAob3AsIGluZGV4KSB7XG4gICAgb3AuZm9yRWFjaChmdW5jdGlvbiAoZnJhZywgaW5kZXgyKSB7XG4gICAgICBpZiAoaXNOdW1lcmljKGZyYWcpKSB7XG4gICAgICAgIG9mZnNldHNbaW5kZXhdICs9IGZyYWcgKiAob3BbaW5kZXgyIC0gMV0gPT09ICctJyA/IC0xIDogMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gb2Zmc2V0cztcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBNb2RpZmllcnNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSB1cGRhdGUgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAYXJndW1lbnQge051bWJlcnxTdHJpbmd9IG9wdGlvbnMub2Zmc2V0PTBcbiAqIFRoZSBvZmZzZXQgdmFsdWUgYXMgZGVzY3JpYmVkIGluIHRoZSBtb2RpZmllciBkZXNjcmlwdGlvblxuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBvZmZzZXQoZGF0YSwgX3JlZikge1xuICB2YXIgb2Zmc2V0ID0gX3JlZi5vZmZzZXQ7XG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudCxcbiAgICAgIF9kYXRhJG9mZnNldHMgPSBkYXRhLm9mZnNldHMsXG4gICAgICBwb3BwZXIgPSBfZGF0YSRvZmZzZXRzLnBvcHBlcixcbiAgICAgIHJlZmVyZW5jZSA9IF9kYXRhJG9mZnNldHMucmVmZXJlbmNlO1xuXG4gIHZhciBiYXNlUGxhY2VtZW50ID0gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG5cbiAgdmFyIG9mZnNldHMgPSB2b2lkIDA7XG4gIGlmIChpc051bWVyaWMoK29mZnNldCkpIHtcbiAgICBvZmZzZXRzID0gWytvZmZzZXQsIDBdO1xuICB9IGVsc2Uge1xuICAgIG9mZnNldHMgPSBwYXJzZU9mZnNldChvZmZzZXQsIHBvcHBlciwgcmVmZXJlbmNlLCBiYXNlUGxhY2VtZW50KTtcbiAgfVxuXG4gIGlmIChiYXNlUGxhY2VtZW50ID09PSAnbGVmdCcpIHtcbiAgICBwb3BwZXIudG9wICs9IG9mZnNldHNbMF07XG4gICAgcG9wcGVyLmxlZnQgLT0gb2Zmc2V0c1sxXTtcbiAgfSBlbHNlIGlmIChiYXNlUGxhY2VtZW50ID09PSAncmlnaHQnKSB7XG4gICAgcG9wcGVyLnRvcCArPSBvZmZzZXRzWzBdO1xuICAgIHBvcHBlci5sZWZ0ICs9IG9mZnNldHNbMV07XG4gIH0gZWxzZSBpZiAoYmFzZVBsYWNlbWVudCA9PT0gJ3RvcCcpIHtcbiAgICBwb3BwZXIubGVmdCArPSBvZmZzZXRzWzBdO1xuICAgIHBvcHBlci50b3AgLT0gb2Zmc2V0c1sxXTtcbiAgfSBlbHNlIGlmIChiYXNlUGxhY2VtZW50ID09PSAnYm90dG9tJykge1xuICAgIHBvcHBlci5sZWZ0ICs9IG9mZnNldHNbMF07XG4gICAgcG9wcGVyLnRvcCArPSBvZmZzZXRzWzFdO1xuICB9XG5cbiAgZGF0YS5wb3BwZXIgPSBwb3BwZXI7XG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IGB1cGRhdGVgIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBwcmV2ZW50T3ZlcmZsb3coZGF0YSwgb3B0aW9ucykge1xuICB2YXIgYm91bmRhcmllc0VsZW1lbnQgPSBvcHRpb25zLmJvdW5kYXJpZXNFbGVtZW50IHx8IGdldE9mZnNldFBhcmVudChkYXRhLmluc3RhbmNlLnBvcHBlcik7XG5cbiAgLy8gSWYgb2Zmc2V0UGFyZW50IGlzIHRoZSByZWZlcmVuY2UgZWxlbWVudCwgd2UgcmVhbGx5IHdhbnQgdG9cbiAgLy8gZ28gb25lIHN0ZXAgdXAgYW5kIHVzZSB0aGUgbmV4dCBvZmZzZXRQYXJlbnQgYXMgcmVmZXJlbmNlIHRvXG4gIC8vIGF2b2lkIHRvIG1ha2UgdGhpcyBtb2RpZmllciBjb21wbGV0ZWx5IHVzZWxlc3MgYW5kIGxvb2sgbGlrZSBicm9rZW5cbiAgaWYgKGRhdGEuaW5zdGFuY2UucmVmZXJlbmNlID09PSBib3VuZGFyaWVzRWxlbWVudCkge1xuICAgIGJvdW5kYXJpZXNFbGVtZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGJvdW5kYXJpZXNFbGVtZW50KTtcbiAgfVxuXG4gIC8vIE5PVEU6IERPTSBhY2Nlc3MgaGVyZVxuICAvLyByZXNldHMgdGhlIHBvcHBlcidzIHBvc2l0aW9uIHNvIHRoYXQgdGhlIGRvY3VtZW50IHNpemUgY2FuIGJlIGNhbGN1bGF0ZWQgZXhjbHVkaW5nXG4gIC8vIHRoZSBzaXplIG9mIHRoZSBwb3BwZXIgZWxlbWVudCBpdHNlbGZcbiAgdmFyIHRyYW5zZm9ybVByb3AgPSBnZXRTdXBwb3J0ZWRQcm9wZXJ0eU5hbWUoJ3RyYW5zZm9ybScpO1xuICB2YXIgcG9wcGVyU3R5bGVzID0gZGF0YS5pbnN0YW5jZS5wb3BwZXIuc3R5bGU7IC8vIGFzc2lnbm1lbnQgdG8gaGVscCBtaW5pZmljYXRpb25cbiAgdmFyIHRvcCA9IHBvcHBlclN0eWxlcy50b3AsXG4gICAgICBsZWZ0ID0gcG9wcGVyU3R5bGVzLmxlZnQsXG4gICAgICB0cmFuc2Zvcm0gPSBwb3BwZXJTdHlsZXNbdHJhbnNmb3JtUHJvcF07XG5cbiAgcG9wcGVyU3R5bGVzLnRvcCA9ICcnO1xuICBwb3BwZXJTdHlsZXMubGVmdCA9ICcnO1xuICBwb3BwZXJTdHlsZXNbdHJhbnNmb3JtUHJvcF0gPSAnJztcblxuICB2YXIgYm91bmRhcmllcyA9IGdldEJvdW5kYXJpZXMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEuaW5zdGFuY2UucmVmZXJlbmNlLCBvcHRpb25zLnBhZGRpbmcsIGJvdW5kYXJpZXNFbGVtZW50LCBkYXRhLnBvc2l0aW9uRml4ZWQpO1xuXG4gIC8vIE5PVEU6IERPTSBhY2Nlc3MgaGVyZVxuICAvLyByZXN0b3JlcyB0aGUgb3JpZ2luYWwgc3R5bGUgcHJvcGVydGllcyBhZnRlciB0aGUgb2Zmc2V0cyBoYXZlIGJlZW4gY29tcHV0ZWRcbiAgcG9wcGVyU3R5bGVzLnRvcCA9IHRvcDtcbiAgcG9wcGVyU3R5bGVzLmxlZnQgPSBsZWZ0O1xuICBwb3BwZXJTdHlsZXNbdHJhbnNmb3JtUHJvcF0gPSB0cmFuc2Zvcm07XG5cbiAgb3B0aW9ucy5ib3VuZGFyaWVzID0gYm91bmRhcmllcztcblxuICB2YXIgb3JkZXIgPSBvcHRpb25zLnByaW9yaXR5O1xuICB2YXIgcG9wcGVyID0gZGF0YS5vZmZzZXRzLnBvcHBlcjtcblxuICB2YXIgY2hlY2sgPSB7XG4gICAgcHJpbWFyeTogZnVuY3Rpb24gcHJpbWFyeShwbGFjZW1lbnQpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHBvcHBlcltwbGFjZW1lbnRdO1xuICAgICAgaWYgKHBvcHBlcltwbGFjZW1lbnRdIDwgYm91bmRhcmllc1twbGFjZW1lbnRdICYmICFvcHRpb25zLmVzY2FwZVdpdGhSZWZlcmVuY2UpIHtcbiAgICAgICAgdmFsdWUgPSBNYXRoLm1heChwb3BwZXJbcGxhY2VtZW50XSwgYm91bmRhcmllc1twbGFjZW1lbnRdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eSh7fSwgcGxhY2VtZW50LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZWNvbmRhcnk6IGZ1bmN0aW9uIHNlY29uZGFyeShwbGFjZW1lbnQpIHtcbiAgICAgIHZhciBtYWluU2lkZSA9IHBsYWNlbWVudCA9PT0gJ3JpZ2h0JyA/ICdsZWZ0JyA6ICd0b3AnO1xuICAgICAgdmFyIHZhbHVlID0gcG9wcGVyW21haW5TaWRlXTtcbiAgICAgIGlmIChwb3BwZXJbcGxhY2VtZW50XSA+IGJvdW5kYXJpZXNbcGxhY2VtZW50XSAmJiAhb3B0aW9ucy5lc2NhcGVXaXRoUmVmZXJlbmNlKSB7XG4gICAgICAgIHZhbHVlID0gTWF0aC5taW4ocG9wcGVyW21haW5TaWRlXSwgYm91bmRhcmllc1twbGFjZW1lbnRdIC0gKHBsYWNlbWVudCA9PT0gJ3JpZ2h0JyA/IHBvcHBlci53aWR0aCA6IHBvcHBlci5oZWlnaHQpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eSh7fSwgbWFpblNpZGUsIHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgb3JkZXIuZm9yRWFjaChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgdmFyIHNpZGUgPSBbJ2xlZnQnLCAndG9wJ10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMSA/ICdwcmltYXJ5JyA6ICdzZWNvbmRhcnknO1xuICAgIHBvcHBlciA9IF9leHRlbmRzKHt9LCBwb3BwZXIsIGNoZWNrW3NpZGVdKHBsYWNlbWVudCkpO1xuICB9KTtcblxuICBkYXRhLm9mZnNldHMucG9wcGVyID0gcG9wcGVyO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IGB1cGRhdGVgIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBzaGlmdChkYXRhKSB7XG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbiAgdmFyIHNoaWZ0dmFyaWF0aW9uID0gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG5cbiAgLy8gaWYgc2hpZnQgc2hpZnR2YXJpYXRpb24gaXMgc3BlY2lmaWVkLCBydW4gdGhlIG1vZGlmaWVyXG4gIGlmIChzaGlmdHZhcmlhdGlvbikge1xuICAgIHZhciBfZGF0YSRvZmZzZXRzID0gZGF0YS5vZmZzZXRzLFxuICAgICAgICByZWZlcmVuY2UgPSBfZGF0YSRvZmZzZXRzLnJlZmVyZW5jZSxcbiAgICAgICAgcG9wcGVyID0gX2RhdGEkb2Zmc2V0cy5wb3BwZXI7XG5cbiAgICB2YXIgaXNWZXJ0aWNhbCA9IFsnYm90dG9tJywgJ3RvcCddLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgIT09IC0xO1xuICAgIHZhciBzaWRlID0gaXNWZXJ0aWNhbCA/ICdsZWZ0JyA6ICd0b3AnO1xuICAgIHZhciBtZWFzdXJlbWVudCA9IGlzVmVydGljYWwgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG5cbiAgICB2YXIgc2hpZnRPZmZzZXRzID0ge1xuICAgICAgc3RhcnQ6IGRlZmluZVByb3BlcnR5KHt9LCBzaWRlLCByZWZlcmVuY2Vbc2lkZV0pLFxuICAgICAgZW5kOiBkZWZpbmVQcm9wZXJ0eSh7fSwgc2lkZSwgcmVmZXJlbmNlW3NpZGVdICsgcmVmZXJlbmNlW21lYXN1cmVtZW50XSAtIHBvcHBlclttZWFzdXJlbWVudF0pXG4gICAgfTtcblxuICAgIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSBfZXh0ZW5kcyh7fSwgcG9wcGVyLCBzaGlmdE9mZnNldHNbc2hpZnR2YXJpYXRpb25dKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHVwZGF0ZSBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gaGlkZShkYXRhKSB7XG4gIGlmICghaXNNb2RpZmllclJlcXVpcmVkKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCAnaGlkZScsICdwcmV2ZW50T3ZlcmZsb3cnKSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgdmFyIHJlZlJlY3QgPSBkYXRhLm9mZnNldHMucmVmZXJlbmNlO1xuICB2YXIgYm91bmQgPSBmaW5kKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCBmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICByZXR1cm4gbW9kaWZpZXIubmFtZSA9PT0gJ3ByZXZlbnRPdmVyZmxvdyc7XG4gIH0pLmJvdW5kYXJpZXM7XG5cbiAgaWYgKHJlZlJlY3QuYm90dG9tIDwgYm91bmQudG9wIHx8IHJlZlJlY3QubGVmdCA+IGJvdW5kLnJpZ2h0IHx8IHJlZlJlY3QudG9wID4gYm91bmQuYm90dG9tIHx8IHJlZlJlY3QucmlnaHQgPCBib3VuZC5sZWZ0KSB7XG4gICAgLy8gQXZvaWQgdW5uZWNlc3NhcnkgRE9NIGFjY2VzcyBpZiB2aXNpYmlsaXR5IGhhc24ndCBjaGFuZ2VkXG4gICAgaWYgKGRhdGEuaGlkZSA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgZGF0YS5oaWRlID0gdHJ1ZTtcbiAgICBkYXRhLmF0dHJpYnV0ZXNbJ3gtb3V0LW9mLWJvdW5kYXJpZXMnXSA9ICcnO1xuICB9IGVsc2Uge1xuICAgIC8vIEF2b2lkIHVubmVjZXNzYXJ5IERPTSBhY2Nlc3MgaWYgdmlzaWJpbGl0eSBoYXNuJ3QgY2hhbmdlZFxuICAgIGlmIChkYXRhLmhpZGUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBkYXRhLmhpZGUgPSBmYWxzZTtcbiAgICBkYXRhLmF0dHJpYnV0ZXNbJ3gtb3V0LW9mLWJvdW5kYXJpZXMnXSA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgYHVwZGF0ZWAgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cbmZ1bmN0aW9uIGlubmVyKGRhdGEpIHtcbiAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICB2YXIgX2RhdGEkb2Zmc2V0cyA9IGRhdGEub2Zmc2V0cyxcbiAgICAgIHBvcHBlciA9IF9kYXRhJG9mZnNldHMucG9wcGVyLFxuICAgICAgcmVmZXJlbmNlID0gX2RhdGEkb2Zmc2V0cy5yZWZlcmVuY2U7XG5cbiAgdmFyIGlzSG9yaXogPSBbJ2xlZnQnLCAncmlnaHQnXS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMTtcblxuICB2YXIgc3VidHJhY3RMZW5ndGggPSBbJ3RvcCcsICdsZWZ0J10uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA9PT0gLTE7XG5cbiAgcG9wcGVyW2lzSG9yaXogPyAnbGVmdCcgOiAndG9wJ10gPSByZWZlcmVuY2VbYmFzZVBsYWNlbWVudF0gLSAoc3VidHJhY3RMZW5ndGggPyBwb3BwZXJbaXNIb3JpeiA/ICd3aWR0aCcgOiAnaGVpZ2h0J10gOiAwKTtcblxuICBkYXRhLnBsYWNlbWVudCA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSBnZXRDbGllbnRSZWN0KHBvcHBlcik7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogTW9kaWZpZXIgZnVuY3Rpb24sIGVhY2ggbW9kaWZpZXIgY2FuIGhhdmUgYSBmdW5jdGlvbiBvZiB0aGlzIHR5cGUgYXNzaWduZWRcbiAqIHRvIGl0cyBgZm5gIHByb3BlcnR5LjxiciAvPlxuICogVGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggdXBkYXRlLCB0aGlzIG1lYW5zIHRoYXQgeW91IG11c3RcbiAqIG1ha2Ugc3VyZSB0aGV5IGFyZSBwZXJmb3JtYW50IGVub3VnaCB0byBhdm9pZCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy5cbiAqXG4gKiBAZnVuY3Rpb24gTW9kaWZpZXJGblxuICogQGFyZ3VtZW50IHtkYXRhT2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtkYXRhT2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cblxuLyoqXG4gKiBNb2RpZmllcnMgYXJlIHBsdWdpbnMgdXNlZCB0byBhbHRlciB0aGUgYmVoYXZpb3Igb2YgeW91ciBwb3BwZXJzLjxiciAvPlxuICogUG9wcGVyLmpzIHVzZXMgYSBzZXQgb2YgOSBtb2RpZmllcnMgdG8gcHJvdmlkZSBhbGwgdGhlIGJhc2ljIGZ1bmN0aW9uYWxpdGllc1xuICogbmVlZGVkIGJ5IHRoZSBsaWJyYXJ5LlxuICpcbiAqIFVzdWFsbHkgeW91IGRvbid0IHdhbnQgdG8gb3ZlcnJpZGUgdGhlIGBvcmRlcmAsIGBmbmAgYW5kIGBvbkxvYWRgIHByb3BzLlxuICogQWxsIHRoZSBvdGhlciBwcm9wZXJ0aWVzIGFyZSBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIGJlIHR3ZWFrZWQuXG4gKiBAbmFtZXNwYWNlIG1vZGlmaWVyc1xuICovXG52YXIgbW9kaWZpZXJzID0ge1xuICAvKipcbiAgICogTW9kaWZpZXIgdXNlZCB0byBzaGlmdCB0aGUgcG9wcGVyIG9uIHRoZSBzdGFydCBvciBlbmQgb2YgaXRzIHJlZmVyZW5jZVxuICAgKiBlbGVtZW50LjxiciAvPlxuICAgKiBJdCB3aWxsIHJlYWQgdGhlIHZhcmlhdGlvbiBvZiB0aGUgYHBsYWNlbWVudGAgcHJvcGVydHkuPGJyIC8+XG4gICAqIEl0IGNhbiBiZSBvbmUgZWl0aGVyIGAtZW5kYCBvciBgLXN0YXJ0YC5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIHNoaWZ0OiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTEwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogMTAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogc2hpZnRcbiAgfSxcblxuICAvKipcbiAgICogVGhlIGBvZmZzZXRgIG1vZGlmaWVyIGNhbiBzaGlmdCB5b3VyIHBvcHBlciBvbiBib3RoIGl0cyBheGlzLlxuICAgKlxuICAgKiBJdCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgdW5pdHM6XG4gICAqIC0gYHB4YCBvciB1bml0LWxlc3MsIGludGVycHJldGVkIGFzIHBpeGVsc1xuICAgKiAtIGAlYCBvciBgJXJgLCBwZXJjZW50YWdlIHJlbGF0aXZlIHRvIHRoZSBsZW5ndGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50XG4gICAqIC0gYCVwYCwgcGVyY2VudGFnZSByZWxhdGl2ZSB0byB0aGUgbGVuZ3RoIG9mIHRoZSBwb3BwZXIgZWxlbWVudFxuICAgKiAtIGB2d2AsIENTUyB2aWV3cG9ydCB3aWR0aCB1bml0XG4gICAqIC0gYHZoYCwgQ1NTIHZpZXdwb3J0IGhlaWdodCB1bml0XG4gICAqXG4gICAqIEZvciBsZW5ndGggaXMgaW50ZW5kZWQgdGhlIG1haW4gYXhpcyByZWxhdGl2ZSB0byB0aGUgcGxhY2VtZW50IG9mIHRoZSBwb3BwZXIuPGJyIC8+XG4gICAqIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgcGxhY2VtZW50IGlzIGB0b3BgIG9yIGBib3R0b21gLCB0aGUgbGVuZ3RoIHdpbGwgYmUgdGhlXG4gICAqIGB3aWR0aGAuIEluIGNhc2Ugb2YgYGxlZnRgIG9yIGByaWdodGAsIGl0IHdpbGwgYmUgdGhlIGBoZWlnaHRgLlxuICAgKlxuICAgKiBZb3UgY2FuIHByb3ZpZGUgYSBzaW5nbGUgdmFsdWUgKGFzIGBOdW1iZXJgIG9yIGBTdHJpbmdgKSwgb3IgYSBwYWlyIG9mIHZhbHVlc1xuICAgKiBhcyBgU3RyaW5nYCBkaXZpZGVkIGJ5IGEgY29tbWEgb3Igb25lIChvciBtb3JlKSB3aGl0ZSBzcGFjZXMuPGJyIC8+XG4gICAqIFRoZSBsYXR0ZXIgaXMgYSBkZXByZWNhdGVkIG1ldGhvZCBiZWNhdXNlIGl0IGxlYWRzIHRvIGNvbmZ1c2lvbiBhbmQgd2lsbCBiZVxuICAgKiByZW1vdmVkIGluIHYyLjxiciAvPlxuICAgKiBBZGRpdGlvbmFsbHksIGl0IGFjY2VwdHMgYWRkaXRpb25zIGFuZCBzdWJ0cmFjdGlvbnMgYmV0d2VlbiBkaWZmZXJlbnQgdW5pdHMuXG4gICAqIE5vdGUgdGhhdCBtdWx0aXBsaWNhdGlvbnMgYW5kIGRpdmlzaW9ucyBhcmVuJ3Qgc3VwcG9ydGVkLlxuICAgKlxuICAgKiBWYWxpZCBleGFtcGxlcyBhcmU6XG4gICAqIGBgYFxuICAgKiAxMFxuICAgKiAnMTAlJ1xuICAgKiAnMTAsIDEwJ1xuICAgKiAnMTAlLCAxMCdcbiAgICogJzEwICsgMTAlJ1xuICAgKiAnMTAgLSA1dmggKyAzJSdcbiAgICogJy0xMHB4ICsgNXZoLCA1cHggLSA2JSdcbiAgICogYGBgXG4gICAqID4gKipOQioqOiBJZiB5b3UgZGVzaXJlIHRvIGFwcGx5IG9mZnNldHMgdG8geW91ciBwb3BwZXJzIGluIGEgd2F5IHRoYXQgbWF5IG1ha2UgdGhlbSBvdmVybGFwXG4gICAqID4gd2l0aCB0aGVpciByZWZlcmVuY2UgZWxlbWVudCwgdW5mb3J0dW5hdGVseSwgeW91IHdpbGwgaGF2ZSB0byBkaXNhYmxlIHRoZSBgZmxpcGAgbW9kaWZpZXIuXG4gICAqID4gWW91IGNhbiByZWFkIG1vcmUgb24gdGhpcyBhdCB0aGlzIFtpc3N1ZV0oaHR0cHM6Ly9naXRodWIuY29tL0ZlelZyYXN0YS9wb3BwZXIuanMvaXNzdWVzLzM3MykuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBvZmZzZXQ6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9MjAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiAyMDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBvZmZzZXQsXG4gICAgLyoqIEBwcm9wIHtOdW1iZXJ8U3RyaW5nfSBvZmZzZXQ9MFxuICAgICAqIFRoZSBvZmZzZXQgdmFsdWUgYXMgZGVzY3JpYmVkIGluIHRoZSBtb2RpZmllciBkZXNjcmlwdGlvblxuICAgICAqL1xuICAgIG9mZnNldDogMFxuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIHByZXZlbnQgdGhlIHBvcHBlciBmcm9tIGJlaW5nIHBvc2l0aW9uZWQgb3V0c2lkZSB0aGUgYm91bmRhcnkuXG4gICAqXG4gICAqIEEgc2NlbmFyaW8gZXhpc3RzIHdoZXJlIHRoZSByZWZlcmVuY2UgaXRzZWxmIGlzIG5vdCB3aXRoaW4gdGhlIGJvdW5kYXJpZXMuPGJyIC8+XG4gICAqIFdlIGNhbiBzYXkgaXQgaGFzIFwiZXNjYXBlZCB0aGUgYm91bmRhcmllc1wiIOKAlCBvciBqdXN0IFwiZXNjYXBlZFwiLjxiciAvPlxuICAgKiBJbiB0aGlzIGNhc2Ugd2UgbmVlZCB0byBkZWNpZGUgd2hldGhlciB0aGUgcG9wcGVyIHNob3VsZCBlaXRoZXI6XG4gICAqXG4gICAqIC0gZGV0YWNoIGZyb20gdGhlIHJlZmVyZW5jZSBhbmQgcmVtYWluIFwidHJhcHBlZFwiIGluIHRoZSBib3VuZGFyaWVzLCBvclxuICAgKiAtIGlmIGl0IHNob3VsZCBpZ25vcmUgdGhlIGJvdW5kYXJ5IGFuZCBcImVzY2FwZSB3aXRoIGl0cyByZWZlcmVuY2VcIlxuICAgKlxuICAgKiBXaGVuIGBlc2NhcGVXaXRoUmVmZXJlbmNlYCBpcyBzZXQgdG9gdHJ1ZWAgYW5kIHJlZmVyZW5jZSBpcyBjb21wbGV0ZWx5XG4gICAqIG91dHNpZGUgaXRzIGJvdW5kYXJpZXMsIHRoZSBwb3BwZXIgd2lsbCBvdmVyZmxvdyAob3IgY29tcGxldGVseSBsZWF2ZSlcbiAgICogdGhlIGJvdW5kYXJpZXMgaW4gb3JkZXIgdG8gcmVtYWluIGF0dGFjaGVkIHRvIHRoZSBlZGdlIG9mIHRoZSByZWZlcmVuY2UuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBwcmV2ZW50T3ZlcmZsb3c6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9MzAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiAzMDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBwcmV2ZW50T3ZlcmZsb3csXG4gICAgLyoqXG4gICAgICogQHByb3Age0FycmF5fSBbcHJpb3JpdHk9WydsZWZ0JywncmlnaHQnLCd0b3AnLCdib3R0b20nXV1cbiAgICAgKiBQb3BwZXIgd2lsbCB0cnkgdG8gcHJldmVudCBvdmVyZmxvdyBmb2xsb3dpbmcgdGhlc2UgcHJpb3JpdGllcyBieSBkZWZhdWx0LFxuICAgICAqIHRoZW4sIGl0IGNvdWxkIG92ZXJmbG93IG9uIHRoZSBsZWZ0IGFuZCBvbiB0b3Agb2YgdGhlIGBib3VuZGFyaWVzRWxlbWVudGBcbiAgICAgKi9cbiAgICBwcmlvcml0eTogWydsZWZ0JywgJ3JpZ2h0JywgJ3RvcCcsICdib3R0b20nXSxcbiAgICAvKipcbiAgICAgKiBAcHJvcCB7bnVtYmVyfSBwYWRkaW5nPTVcbiAgICAgKiBBbW91bnQgb2YgcGl4ZWwgdXNlZCB0byBkZWZpbmUgYSBtaW5pbXVtIGRpc3RhbmNlIGJldHdlZW4gdGhlIGJvdW5kYXJpZXNcbiAgICAgKiBhbmQgdGhlIHBvcHBlci4gVGhpcyBtYWtlcyBzdXJlIHRoZSBwb3BwZXIgYWx3YXlzIGhhcyBhIGxpdHRsZSBwYWRkaW5nXG4gICAgICogYmV0d2VlbiB0aGUgZWRnZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuICAgIHBhZGRpbmc6IDUsXG4gICAgLyoqXG4gICAgICogQHByb3Age1N0cmluZ3xIVE1MRWxlbWVudH0gYm91bmRhcmllc0VsZW1lbnQ9J3Njcm9sbFBhcmVudCdcbiAgICAgKiBCb3VuZGFyaWVzIHVzZWQgYnkgdGhlIG1vZGlmaWVyLiBDYW4gYmUgYHNjcm9sbFBhcmVudGAsIGB3aW5kb3dgLFxuICAgICAqIGB2aWV3cG9ydGAgb3IgYW55IERPTSBlbGVtZW50LlxuICAgICAqL1xuICAgIGJvdW5kYXJpZXNFbGVtZW50OiAnc2Nyb2xsUGFyZW50J1xuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIG1ha2Ugc3VyZSB0aGUgcmVmZXJlbmNlIGFuZCBpdHMgcG9wcGVyIHN0YXkgbmVhciBlYWNoIG90aGVyXG4gICAqIHdpdGhvdXQgbGVhdmluZyBhbnkgZ2FwIGJldHdlZW4gdGhlIHR3by4gRXNwZWNpYWxseSB1c2VmdWwgd2hlbiB0aGUgYXJyb3cgaXNcbiAgICogZW5hYmxlZCBhbmQgeW91IHdhbnQgdG8gZW5zdXJlIHRoYXQgaXQgcG9pbnRzIHRvIGl0cyByZWZlcmVuY2UgZWxlbWVudC5cbiAgICogSXQgY2FyZXMgb25seSBhYm91dCB0aGUgZmlyc3QgYXhpcy4gWW91IGNhbiBzdGlsbCBoYXZlIHBvcHBlcnMgd2l0aCBtYXJnaW5cbiAgICogYmV0d2VlbiB0aGUgcG9wcGVyIGFuZCBpdHMgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBrZWVwVG9nZXRoZXI6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9NDAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA0MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBrZWVwVG9nZXRoZXJcbiAgfSxcblxuICAvKipcbiAgICogVGhpcyBtb2RpZmllciBpcyB1c2VkIHRvIG1vdmUgdGhlIGBhcnJvd0VsZW1lbnRgIG9mIHRoZSBwb3BwZXIgdG8gbWFrZVxuICAgKiBzdXJlIGl0IGlzIHBvc2l0aW9uZWQgYmV0d2VlbiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQgYW5kIGl0cyBwb3BwZXIgZWxlbWVudC5cbiAgICogSXQgd2lsbCByZWFkIHRoZSBvdXRlciBzaXplIG9mIHRoZSBgYXJyb3dFbGVtZW50YCBub2RlIHRvIGRldGVjdCBob3cgbWFueVxuICAgKiBwaXhlbHMgb2YgY29uanVuY3Rpb24gYXJlIG5lZWRlZC5cbiAgICpcbiAgICogSXQgaGFzIG5vIGVmZmVjdCBpZiBubyBgYXJyb3dFbGVtZW50YCBpcyBwcm92aWRlZC5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGFycm93OiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTUwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogNTAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogYXJyb3csXG4gICAgLyoqIEBwcm9wIHtTdHJpbmd8SFRNTEVsZW1lbnR9IGVsZW1lbnQ9J1t4LWFycm93XScgLSBTZWxlY3RvciBvciBub2RlIHVzZWQgYXMgYXJyb3cgKi9cbiAgICBlbGVtZW50OiAnW3gtYXJyb3ddJ1xuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIGZsaXAgdGhlIHBvcHBlcidzIHBsYWNlbWVudCB3aGVuIGl0IHN0YXJ0cyB0byBvdmVybGFwIGl0c1xuICAgKiByZWZlcmVuY2UgZWxlbWVudC5cbiAgICpcbiAgICogUmVxdWlyZXMgdGhlIGBwcmV2ZW50T3ZlcmZsb3dgIG1vZGlmaWVyIGJlZm9yZSBpdCBpbiBvcmRlciB0byB3b3JrLlxuICAgKlxuICAgKiAqKk5PVEU6KiogdGhpcyBtb2RpZmllciB3aWxsIGludGVycnVwdCB0aGUgY3VycmVudCB1cGRhdGUgY3ljbGUgYW5kIHdpbGxcbiAgICogcmVzdGFydCBpdCBpZiBpdCBkZXRlY3RzIHRoZSBuZWVkIHRvIGZsaXAgdGhlIHBsYWNlbWVudC5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGZsaXA6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9NjAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA2MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBmbGlwLFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtTdHJpbmd8QXJyYXl9IGJlaGF2aW9yPSdmbGlwJ1xuICAgICAqIFRoZSBiZWhhdmlvciB1c2VkIHRvIGNoYW5nZSB0aGUgcG9wcGVyJ3MgcGxhY2VtZW50LiBJdCBjYW4gYmUgb25lIG9mXG4gICAgICogYGZsaXBgLCBgY2xvY2t3aXNlYCwgYGNvdW50ZXJjbG9ja3dpc2VgIG9yIGFuIGFycmF5IHdpdGggYSBsaXN0IG9mIHZhbGlkXG4gICAgICogcGxhY2VtZW50cyAod2l0aCBvcHRpb25hbCB2YXJpYXRpb25zKVxuICAgICAqL1xuICAgIGJlaGF2aW9yOiAnZmxpcCcsXG4gICAgLyoqXG4gICAgICogQHByb3Age251bWJlcn0gcGFkZGluZz01XG4gICAgICogVGhlIHBvcHBlciB3aWxsIGZsaXAgaWYgaXQgaGl0cyB0aGUgZWRnZXMgb2YgdGhlIGBib3VuZGFyaWVzRWxlbWVudGBcbiAgICAgKi9cbiAgICBwYWRkaW5nOiA1LFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtTdHJpbmd8SFRNTEVsZW1lbnR9IGJvdW5kYXJpZXNFbGVtZW50PSd2aWV3cG9ydCdcbiAgICAgKiBUaGUgZWxlbWVudCB3aGljaCB3aWxsIGRlZmluZSB0aGUgYm91bmRhcmllcyBvZiB0aGUgcG9wcGVyIHBvc2l0aW9uLlxuICAgICAqIFRoZSBwb3BwZXIgd2lsbCBuZXZlciBiZSBwbGFjZWQgb3V0c2lkZSBvZiB0aGUgZGVmaW5lZCBib3VuZGFyaWVzXG4gICAgICogKGV4Y2VwdCBpZiBga2VlcFRvZ2V0aGVyYCBpcyBlbmFibGVkKVxuICAgICAqL1xuICAgIGJvdW5kYXJpZXNFbGVtZW50OiAndmlld3BvcnQnLFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtCb29sZWFufSBmbGlwVmFyaWF0aW9ucz1mYWxzZVxuICAgICAqIFRoZSBwb3BwZXIgd2lsbCBzd2l0Y2ggcGxhY2VtZW50IHZhcmlhdGlvbiBiZXR3ZWVuIGAtc3RhcnRgIGFuZCBgLWVuZGAgd2hlblxuICAgICAqIHRoZSByZWZlcmVuY2UgZWxlbWVudCBvdmVybGFwcyBpdHMgYm91bmRhcmllcy5cbiAgICAgKlxuICAgICAqIFRoZSBvcmlnaW5hbCBwbGFjZW1lbnQgc2hvdWxkIGhhdmUgYSBzZXQgdmFyaWF0aW9uLlxuICAgICAqL1xuICAgIGZsaXBWYXJpYXRpb25zOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAcHJvcCB7Qm9vbGVhbn0gZmxpcFZhcmlhdGlvbnNCeUNvbnRlbnQ9ZmFsc2VcbiAgICAgKiBUaGUgcG9wcGVyIHdpbGwgc3dpdGNoIHBsYWNlbWVudCB2YXJpYXRpb24gYmV0d2VlbiBgLXN0YXJ0YCBhbmQgYC1lbmRgIHdoZW5cbiAgICAgKiB0aGUgcG9wcGVyIGVsZW1lbnQgb3ZlcmxhcHMgaXRzIHJlZmVyZW5jZSBib3VuZGFyaWVzLlxuICAgICAqXG4gICAgICogVGhlIG9yaWdpbmFsIHBsYWNlbWVudCBzaG91bGQgaGF2ZSBhIHNldCB2YXJpYXRpb24uXG4gICAgICovXG4gICAgZmxpcFZhcmlhdGlvbnNCeUNvbnRlbnQ6IGZhbHNlXG4gIH0sXG5cbiAgLyoqXG4gICAqIE1vZGlmaWVyIHVzZWQgdG8gbWFrZSB0aGUgcG9wcGVyIGZsb3cgdG93YXJkIHRoZSBpbm5lciBvZiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAqIEJ5IGRlZmF1bHQsIHdoZW4gdGhpcyBtb2RpZmllciBpcyBkaXNhYmxlZCwgdGhlIHBvcHBlciB3aWxsIGJlIHBsYWNlZCBvdXRzaWRlXG4gICAqIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGlubmVyOiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTcwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogNzAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD1mYWxzZSAtIFdoZXRoZXIgdGhlIG1vZGlmaWVyIGlzIGVuYWJsZWQgb3Igbm90ICovXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBpbm5lclxuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIGhpZGUgdGhlIHBvcHBlciB3aGVuIGl0cyByZWZlcmVuY2UgZWxlbWVudCBpcyBvdXRzaWRlIG9mIHRoZVxuICAgKiBwb3BwZXIgYm91bmRhcmllcy4gSXQgd2lsbCBzZXQgYSBgeC1vdXQtb2YtYm91bmRhcmllc2AgYXR0cmlidXRlIHdoaWNoIGNhblxuICAgKiBiZSB1c2VkIHRvIGhpZGUgd2l0aCBhIENTUyBzZWxlY3RvciB0aGUgcG9wcGVyIHdoZW4gaXRzIHJlZmVyZW5jZSBpc1xuICAgKiBvdXQgb2YgYm91bmRhcmllcy5cbiAgICpcbiAgICogUmVxdWlyZXMgdGhlIGBwcmV2ZW50T3ZlcmZsb3dgIG1vZGlmaWVyIGJlZm9yZSBpdCBpbiBvcmRlciB0byB3b3JrLlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgaGlkZToge1xuICAgIC8qKiBAcHJvcCB7bnVtYmVyfSBvcmRlcj04MDAgLSBJbmRleCB1c2VkIHRvIGRlZmluZSB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uICovXG4gICAgb3JkZXI6IDgwMCxcbiAgICAvKiogQHByb3Age0Jvb2xlYW59IGVuYWJsZWQ9dHJ1ZSAtIFdoZXRoZXIgdGhlIG1vZGlmaWVyIGlzIGVuYWJsZWQgb3Igbm90ICovXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAvKiogQHByb3Age01vZGlmaWVyRm59ICovXG4gICAgZm46IGhpZGVcbiAgfSxcblxuICAvKipcbiAgICogQ29tcHV0ZXMgdGhlIHN0eWxlIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBwb3BwZXIgZWxlbWVudCB0byBnZXRzXG4gICAqIHByb3Blcmx5IHBvc2l0aW9uZWQuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGlzIG1vZGlmaWVyIHdpbGwgbm90IHRvdWNoIHRoZSBET00sIGl0IGp1c3QgcHJlcGFyZXMgdGhlIHN0eWxlc1xuICAgKiBzbyB0aGF0IGBhcHBseVN0eWxlYCBtb2RpZmllciBjYW4gYXBwbHkgaXQuIFRoaXMgc2VwYXJhdGlvbiBpcyB1c2VmdWxcbiAgICogaW4gY2FzZSB5b3UgbmVlZCB0byByZXBsYWNlIGBhcHBseVN0eWxlYCB3aXRoIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uLlxuICAgKlxuICAgKiBUaGlzIG1vZGlmaWVyIGhhcyBgODUwYCBhcyBgb3JkZXJgIHZhbHVlIHRvIG1haW50YWluIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICogd2l0aCBwcmV2aW91cyB2ZXJzaW9ucyBvZiBQb3BwZXIuanMuIEV4cGVjdCB0aGUgbW9kaWZpZXJzIG9yZGVyaW5nIG1ldGhvZFxuICAgKiB0byBjaGFuZ2UgaW4gZnV0dXJlIG1ham9yIHZlcnNpb25zIG9mIHRoZSBsaWJyYXJ5LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgY29tcHV0ZVN0eWxlOiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTg1MCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogODUwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogY29tcHV0ZVN0eWxlLFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtCb29sZWFufSBncHVBY2NlbGVyYXRpb249dHJ1ZVxuICAgICAqIElmIHRydWUsIGl0IHVzZXMgdGhlIENTUyAzRCB0cmFuc2Zvcm1hdGlvbiB0byBwb3NpdGlvbiB0aGUgcG9wcGVyLlxuICAgICAqIE90aGVyd2lzZSwgaXQgd2lsbCB1c2UgdGhlIGB0b3BgIGFuZCBgbGVmdGAgcHJvcGVydGllc1xuICAgICAqL1xuICAgIGdwdUFjY2VsZXJhdGlvbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAcHJvcCB7c3RyaW5nfSBbeD0nYm90dG9tJ11cbiAgICAgKiBXaGVyZSB0byBhbmNob3IgdGhlIFggYXhpcyAoYGJvdHRvbWAgb3IgYHRvcGApLiBBS0EgWCBvZmZzZXQgb3JpZ2luLlxuICAgICAqIENoYW5nZSB0aGlzIGlmIHlvdXIgcG9wcGVyIHNob3VsZCBncm93IGluIGEgZGlyZWN0aW9uIGRpZmZlcmVudCBmcm9tIGBib3R0b21gXG4gICAgICovXG4gICAgeDogJ2JvdHRvbScsXG4gICAgLyoqXG4gICAgICogQHByb3Age3N0cmluZ30gW3g9J2xlZnQnXVxuICAgICAqIFdoZXJlIHRvIGFuY2hvciB0aGUgWSBheGlzIChgbGVmdGAgb3IgYHJpZ2h0YCkuIEFLQSBZIG9mZnNldCBvcmlnaW4uXG4gICAgICogQ2hhbmdlIHRoaXMgaWYgeW91ciBwb3BwZXIgc2hvdWxkIGdyb3cgaW4gYSBkaXJlY3Rpb24gZGlmZmVyZW50IGZyb20gYHJpZ2h0YFxuICAgICAqL1xuICAgIHk6ICdyaWdodCdcbiAgfSxcblxuICAvKipcbiAgICogQXBwbGllcyB0aGUgY29tcHV0ZWQgc3R5bGVzIHRvIHRoZSBwb3BwZXIgZWxlbWVudC5cbiAgICpcbiAgICogQWxsIHRoZSBET00gbWFuaXB1bGF0aW9ucyBhcmUgbGltaXRlZCB0byB0aGlzIG1vZGlmaWVyLiBUaGlzIGlzIHVzZWZ1bCBpbiBjYXNlXG4gICAqIHlvdSB3YW50IHRvIGludGVncmF0ZSBQb3BwZXIuanMgaW5zaWRlIGEgZnJhbWV3b3JrIG9yIHZpZXcgbGlicmFyeSBhbmQgeW91XG4gICAqIHdhbnQgdG8gZGVsZWdhdGUgYWxsIHRoZSBET00gbWFuaXB1bGF0aW9ucyB0byBpdC5cbiAgICpcbiAgICogTm90ZSB0aGF0IGlmIHlvdSBkaXNhYmxlIHRoaXMgbW9kaWZpZXIsIHlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcG9wcGVyIGVsZW1lbnRcbiAgICogaGFzIGl0cyBwb3NpdGlvbiBzZXQgdG8gYGFic29sdXRlYCBiZWZvcmUgUG9wcGVyLmpzIGNhbiBkbyBpdHMgd29yayFcbiAgICpcbiAgICogSnVzdCBkaXNhYmxlIHRoaXMgbW9kaWZpZXIgYW5kIGRlZmluZSB5b3VyIG93biB0byBhY2hpZXZlIHRoZSBkZXNpcmVkIGVmZmVjdC5cbiAgICpcbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGFwcGx5U3R5bGU6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9OTAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA5MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBhcHBseVN0eWxlLFxuICAgIC8qKiBAcHJvcCB7RnVuY3Rpb259ICovXG4gICAgb25Mb2FkOiBhcHBseVN0eWxlT25Mb2FkLFxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMS4xMC4wLCB0aGUgcHJvcGVydHkgbW92ZWQgdG8gYGNvbXB1dGVTdHlsZWAgbW9kaWZpZXJcbiAgICAgKiBAcHJvcCB7Qm9vbGVhbn0gZ3B1QWNjZWxlcmF0aW9uPXRydWVcbiAgICAgKiBJZiB0cnVlLCBpdCB1c2VzIHRoZSBDU1MgM0QgdHJhbnNmb3JtYXRpb24gdG8gcG9zaXRpb24gdGhlIHBvcHBlci5cbiAgICAgKiBPdGhlcndpc2UsIGl0IHdpbGwgdXNlIHRoZSBgdG9wYCBhbmQgYGxlZnRgIHByb3BlcnRpZXNcbiAgICAgKi9cbiAgICBncHVBY2NlbGVyYXRpb246IHVuZGVmaW5lZFxuICB9XG59O1xuXG4vKipcbiAqIFRoZSBgZGF0YU9iamVjdGAgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIGJ5IFBvcHBlci5qcy5cbiAqIFRoaXMgb2JqZWN0IGlzIHBhc3NlZCB0byBtb2RpZmllcnMgYW5kIHRvIHRoZSBgb25DcmVhdGVgIGFuZCBgb25VcGRhdGVgIGNhbGxiYWNrcy5cbiAqIEBuYW1lIGRhdGFPYmplY3RcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkYXRhLmluc3RhbmNlIFRoZSBQb3BwZXIuanMgaW5zdGFuY2VcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBkYXRhLnBsYWNlbWVudCBQbGFjZW1lbnQgYXBwbGllZCB0byBwb3BwZXJcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBkYXRhLm9yaWdpbmFsUGxhY2VtZW50IFBsYWNlbWVudCBvcmlnaW5hbGx5IGRlZmluZWQgb24gaW5pdFxuICogQHByb3BlcnR5IHtCb29sZWFufSBkYXRhLmZsaXBwZWQgVHJ1ZSBpZiBwb3BwZXIgaGFzIGJlZW4gZmxpcHBlZCBieSBmbGlwIG1vZGlmaWVyXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGRhdGEuaGlkZSBUcnVlIGlmIHRoZSByZWZlcmVuY2UgZWxlbWVudCBpcyBvdXQgb2YgYm91bmRhcmllcywgdXNlZnVsIHRvIGtub3cgd2hlbiB0byBoaWRlIHRoZSBwb3BwZXJcbiAqIEBwcm9wZXJ0eSB7SFRNTEVsZW1lbnR9IGRhdGEuYXJyb3dFbGVtZW50IE5vZGUgdXNlZCBhcyBhcnJvdyBieSBhcnJvdyBtb2RpZmllclxuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEuc3R5bGVzIEFueSBDU1MgcHJvcGVydHkgZGVmaW5lZCBoZXJlIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyLiBJdCBleHBlY3RzIHRoZSBKYXZhU2NyaXB0IG5vbWVuY2xhdHVyZSAoZWcuIGBtYXJnaW5Cb3R0b21gKVxuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEuYXJyb3dTdHlsZXMgQW55IENTUyBwcm9wZXJ0eSBkZWZpbmVkIGhlcmUgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBwb3BwZXIgYXJyb3cuIEl0IGV4cGVjdHMgdGhlIEphdmFTY3JpcHQgbm9tZW5jbGF0dXJlIChlZy4gYG1hcmdpbkJvdHRvbWApXG4gKiBAcHJvcGVydHkge09iamVjdH0gZGF0YS5ib3VuZGFyaWVzIE9mZnNldHMgb2YgdGhlIHBvcHBlciBib3VuZGFyaWVzXG4gKiBAcHJvcGVydHkge09iamVjdH0gZGF0YS5vZmZzZXRzIFRoZSBtZWFzdXJlbWVudHMgb2YgcG9wcGVyLCByZWZlcmVuY2UgYW5kIGFycm93IGVsZW1lbnRzXG4gKiBAcHJvcGVydHkge09iamVjdH0gZGF0YS5vZmZzZXRzLnBvcHBlciBgdG9wYCwgYGxlZnRgLCBgd2lkdGhgLCBgaGVpZ2h0YCB2YWx1ZXNcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkYXRhLm9mZnNldHMucmVmZXJlbmNlIGB0b3BgLCBgbGVmdGAsIGB3aWR0aGAsIGBoZWlnaHRgIHZhbHVlc1xuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEub2Zmc2V0cy5hcnJvd10gYHRvcGAgYW5kIGBsZWZ0YCBvZmZzZXRzLCBvbmx5IG9uZSBvZiB0aGVtIHdpbGwgYmUgZGlmZmVyZW50IGZyb20gMFxuICovXG5cbi8qKlxuICogRGVmYXVsdCBvcHRpb25zIHByb3ZpZGVkIHRvIFBvcHBlci5qcyBjb25zdHJ1Y3Rvci48YnIgLz5cbiAqIFRoZXNlIGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSBgb3B0aW9uc2AgYXJndW1lbnQgb2YgUG9wcGVyLmpzLjxiciAvPlxuICogVG8gb3ZlcnJpZGUgYW4gb3B0aW9uLCBzaW1wbHkgcGFzcyBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZVxuICogc3RydWN0dXJlIG9mIHRoZSBgb3B0aW9uc2Agb2JqZWN0LCBhcyB0aGUgM3JkIGFyZ3VtZW50LiBGb3IgZXhhbXBsZTpcbiAqIGBgYFxuICogbmV3IFBvcHBlcihyZWYsIHBvcCwge1xuICogICBtb2RpZmllcnM6IHtcbiAqICAgICBwcmV2ZW50T3ZlcmZsb3c6IHsgZW5hYmxlZDogZmFsc2UgfVxuICogICB9XG4gKiB9KVxuICogYGBgXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHN0YXRpY1xuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG52YXIgRGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBQb3BwZXIncyBwbGFjZW1lbnQuXG4gICAqIEBwcm9wIHtQb3BwZXIucGxhY2VtZW50c30gcGxhY2VtZW50PSdib3R0b20nXG4gICAqL1xuICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuXG4gIC8qKlxuICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIHlvdSB3YW50IHBvcHBlciB0byBwb3NpdGlvbiBpdCBzZWxmIGluICdmaXhlZCcgbW9kZVxuICAgKiBAcHJvcCB7Qm9vbGVhbn0gcG9zaXRpb25GaXhlZD1mYWxzZVxuICAgKi9cbiAgcG9zaXRpb25GaXhlZDogZmFsc2UsXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgZXZlbnRzIChyZXNpemUsIHNjcm9sbCkgYXJlIGluaXRpYWxseSBlbmFibGVkLlxuICAgKiBAcHJvcCB7Qm9vbGVhbn0gZXZlbnRzRW5hYmxlZD10cnVlXG4gICAqL1xuICBldmVudHNFbmFibGVkOiB0cnVlLFxuXG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0byBhdXRvbWF0aWNhbGx5IHJlbW92ZSB0aGUgcG9wcGVyIHdoZW5cbiAgICogeW91IGNhbGwgdGhlIGBkZXN0cm95YCBtZXRob2QuXG4gICAqIEBwcm9wIHtCb29sZWFufSByZW1vdmVPbkRlc3Ryb3k9ZmFsc2VcbiAgICovXG4gIHJlbW92ZU9uRGVzdHJveTogZmFsc2UsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGNhbGxlZCB3aGVuIHRoZSBwb3BwZXIgaXMgY3JlYXRlZC48YnIgLz5cbiAgICogQnkgZGVmYXVsdCwgaXQgaXMgc2V0IHRvIG5vLW9wLjxiciAvPlxuICAgKiBBY2Nlc3MgUG9wcGVyLmpzIGluc3RhbmNlIHdpdGggYGRhdGEuaW5zdGFuY2VgLlxuICAgKiBAcHJvcCB7b25DcmVhdGV9XG4gICAqL1xuICBvbkNyZWF0ZTogZnVuY3Rpb24gb25DcmVhdGUoKSB7fSxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgY2FsbGVkIHdoZW4gdGhlIHBvcHBlciBpcyB1cGRhdGVkLiBUaGlzIGNhbGxiYWNrIGlzIG5vdCBjYWxsZWRcbiAgICogb24gdGhlIGluaXRpYWxpemF0aW9uL2NyZWF0aW9uIG9mIHRoZSBwb3BwZXIsIGJ1dCBvbmx5IG9uIHN1YnNlcXVlbnRcbiAgICogdXBkYXRlcy48YnIgLz5cbiAgICogQnkgZGVmYXVsdCwgaXQgaXMgc2V0IHRvIG5vLW9wLjxiciAvPlxuICAgKiBBY2Nlc3MgUG9wcGVyLmpzIGluc3RhbmNlIHdpdGggYGRhdGEuaW5zdGFuY2VgLlxuICAgKiBAcHJvcCB7b25VcGRhdGV9XG4gICAqL1xuICBvblVwZGF0ZTogZnVuY3Rpb24gb25VcGRhdGUoKSB7fSxcblxuICAvKipcbiAgICogTGlzdCBvZiBtb2RpZmllcnMgdXNlZCB0byBtb2RpZnkgdGhlIG9mZnNldHMgYmVmb3JlIHRoZXkgYXJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlci5cbiAgICogVGhleSBwcm92aWRlIG1vc3Qgb2YgdGhlIGZ1bmN0aW9uYWxpdGllcyBvZiBQb3BwZXIuanMuXG4gICAqIEBwcm9wIHttb2RpZmllcnN9XG4gICAqL1xuICBtb2RpZmllcnM6IG1vZGlmaWVyc1xufTtcblxuLyoqXG4gKiBAY2FsbGJhY2sgb25DcmVhdGVcbiAqIEBwYXJhbSB7ZGF0YU9iamVjdH0gZGF0YVxuICovXG5cbi8qKlxuICogQGNhbGxiYWNrIG9uVXBkYXRlXG4gKiBAcGFyYW0ge2RhdGFPYmplY3R9IGRhdGFcbiAqL1xuXG4vLyBVdGlsc1xuLy8gTWV0aG9kc1xudmFyIFBvcHBlciA9IGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgUG9wcGVyLmpzIGluc3RhbmNlLlxuICAgKiBAY2xhc3MgUG9wcGVyXG4gICAqIEBwYXJhbSB7RWxlbWVudHxyZWZlcmVuY2VPYmplY3R9IHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgZWxlbWVudCB1c2VkIHRvIHBvc2l0aW9uIHRoZSBwb3BwZXJcbiAgICogQHBhcmFtIHtFbGVtZW50fSBwb3BwZXIgLSBUaGUgSFRNTCAvIFhNTCBlbGVtZW50IHVzZWQgYXMgdGhlIHBvcHBlclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFlvdXIgY3VzdG9tIG9wdGlvbnMgdG8gb3ZlcnJpZGUgdGhlIG9uZXMgZGVmaW5lZCBpbiBbRGVmYXVsdHNdKCNkZWZhdWx0cylcbiAgICogQHJldHVybiB7T2JqZWN0fSBpbnN0YW5jZSAtIFRoZSBnZW5lcmF0ZWQgUG9wcGVyLmpzIGluc3RhbmNlXG4gICAqL1xuICBmdW5jdGlvbiBQb3BwZXIocmVmZXJlbmNlLCBwb3BwZXIpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIFBvcHBlcik7XG5cbiAgICB0aGlzLnNjaGVkdWxlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy51cGRhdGUpO1xuICAgIH07XG5cbiAgICAvLyBtYWtlIHVwZGF0ZSgpIGRlYm91bmNlZCwgc28gdGhhdCBpdCBvbmx5IHJ1bnMgYXQgbW9zdCBvbmNlLXBlci10aWNrXG4gICAgdGhpcy51cGRhdGUgPSBkZWJvdW5jZSh0aGlzLnVwZGF0ZS5iaW5kKHRoaXMpKTtcblxuICAgIC8vIHdpdGgge30gd2UgY3JlYXRlIGEgbmV3IG9iamVjdCB3aXRoIHRoZSBvcHRpb25zIGluc2lkZSBpdFxuICAgIHRoaXMub3B0aW9ucyA9IF9leHRlbmRzKHt9LCBQb3BwZXIuRGVmYXVsdHMsIG9wdGlvbnMpO1xuXG4gICAgLy8gaW5pdCBzdGF0ZVxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBpc0Rlc3Ryb3llZDogZmFsc2UsXG4gICAgICBpc0NyZWF0ZWQ6IGZhbHNlLFxuICAgICAgc2Nyb2xsUGFyZW50czogW11cbiAgICB9O1xuXG4gICAgLy8gZ2V0IHJlZmVyZW5jZSBhbmQgcG9wcGVyIGVsZW1lbnRzIChhbGxvdyBqUXVlcnkgd3JhcHBlcnMpXG4gICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2UgJiYgcmVmZXJlbmNlLmpxdWVyeSA/IHJlZmVyZW5jZVswXSA6IHJlZmVyZW5jZTtcbiAgICB0aGlzLnBvcHBlciA9IHBvcHBlciAmJiBwb3BwZXIuanF1ZXJ5ID8gcG9wcGVyWzBdIDogcG9wcGVyO1xuXG4gICAgLy8gRGVlcCBtZXJnZSBtb2RpZmllcnMgb3B0aW9uc1xuICAgIHRoaXMub3B0aW9ucy5tb2RpZmllcnMgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhfZXh0ZW5kcyh7fSwgUG9wcGVyLkRlZmF1bHRzLm1vZGlmaWVycywgb3B0aW9ucy5tb2RpZmllcnMpKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICBfdGhpcy5vcHRpb25zLm1vZGlmaWVyc1tuYW1lXSA9IF9leHRlbmRzKHt9LCBQb3BwZXIuRGVmYXVsdHMubW9kaWZpZXJzW25hbWVdIHx8IHt9LCBvcHRpb25zLm1vZGlmaWVycyA/IG9wdGlvbnMubW9kaWZpZXJzW25hbWVdIDoge30pO1xuICAgIH0pO1xuXG4gICAgLy8gUmVmYWN0b3JpbmcgbW9kaWZpZXJzJyBsaXN0IChPYmplY3QgPT4gQXJyYXkpXG4gICAgdGhpcy5tb2RpZmllcnMgPSBPYmplY3Qua2V5cyh0aGlzLm9wdGlvbnMubW9kaWZpZXJzKS5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgICAgIG5hbWU6IG5hbWVcbiAgICAgIH0sIF90aGlzLm9wdGlvbnMubW9kaWZpZXJzW25hbWVdKTtcbiAgICB9KVxuICAgIC8vIHNvcnQgdGhlIG1vZGlmaWVycyBieSBvcmRlclxuICAgIC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYS5vcmRlciAtIGIub3JkZXI7XG4gICAgfSk7XG5cbiAgICAvLyBtb2RpZmllcnMgaGF2ZSB0aGUgYWJpbGl0eSB0byBleGVjdXRlIGFyYml0cmFyeSBjb2RlIHdoZW4gUG9wcGVyLmpzIGdldCBpbml0ZWRcbiAgICAvLyBzdWNoIGNvZGUgaXMgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgb2YgaXRzIG1vZGlmaWVyXG4gICAgLy8gdGhleSBjb3VsZCBhZGQgbmV3IHByb3BlcnRpZXMgdG8gdGhlaXIgb3B0aW9ucyBjb25maWd1cmF0aW9uXG4gICAgLy8gQkUgQVdBUkU6IGRvbid0IGFkZCBvcHRpb25zIHRvIGBvcHRpb25zLm1vZGlmaWVycy5uYW1lYCBidXQgdG8gYG1vZGlmaWVyT3B0aW9uc2AhXG4gICAgdGhpcy5tb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXJPcHRpb25zKSB7XG4gICAgICBpZiAobW9kaWZpZXJPcHRpb25zLmVuYWJsZWQgJiYgaXNGdW5jdGlvbihtb2RpZmllck9wdGlvbnMub25Mb2FkKSkge1xuICAgICAgICBtb2RpZmllck9wdGlvbnMub25Mb2FkKF90aGlzLnJlZmVyZW5jZSwgX3RoaXMucG9wcGVyLCBfdGhpcy5vcHRpb25zLCBtb2RpZmllck9wdGlvbnMsIF90aGlzLnN0YXRlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGZpcmUgdGhlIGZpcnN0IHVwZGF0ZSB0byBwb3NpdGlvbiB0aGUgcG9wcGVyIGluIHRoZSByaWdodCBwbGFjZVxuICAgIHRoaXMudXBkYXRlKCk7XG5cbiAgICB2YXIgZXZlbnRzRW5hYmxlZCA9IHRoaXMub3B0aW9ucy5ldmVudHNFbmFibGVkO1xuICAgIGlmIChldmVudHNFbmFibGVkKSB7XG4gICAgICAvLyBzZXR1cCBldmVudCBsaXN0ZW5lcnMsIHRoZXkgd2lsbCB0YWtlIGNhcmUgb2YgdXBkYXRlIHRoZSBwb3NpdGlvbiBpbiBzcGVjaWZpYyBzaXR1YXRpb25zXG4gICAgICB0aGlzLmVuYWJsZUV2ZW50TGlzdGVuZXJzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZS5ldmVudHNFbmFibGVkID0gZXZlbnRzRW5hYmxlZDtcbiAgfVxuXG4gIC8vIFdlIGNhbid0IHVzZSBjbGFzcyBwcm9wZXJ0aWVzIGJlY2F1c2UgdGhleSBkb24ndCBnZXQgbGlzdGVkIGluIHRoZVxuICAvLyBjbGFzcyBwcm90b3R5cGUgYW5kIGJyZWFrIHN0dWZmIGxpa2UgU2lub24gc3R1YnNcblxuXG4gIGNyZWF0ZUNsYXNzKFBvcHBlciwgW3tcbiAgICBrZXk6ICd1cGRhdGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGUkJDEoKSB7XG4gICAgICByZXR1cm4gdXBkYXRlLmNhbGwodGhpcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZGVzdHJveScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRlc3Ryb3kkJDEoKSB7XG4gICAgICByZXR1cm4gZGVzdHJveS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2VuYWJsZUV2ZW50TGlzdGVuZXJzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZW5hYmxlRXZlbnRMaXN0ZW5lcnMkJDEoKSB7XG4gICAgICByZXR1cm4gZW5hYmxlRXZlbnRMaXN0ZW5lcnMuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdkaXNhYmxlRXZlbnRMaXN0ZW5lcnMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBkaXNhYmxlRXZlbnRMaXN0ZW5lcnMkJDEoKSB7XG4gICAgICByZXR1cm4gZGlzYWJsZUV2ZW50TGlzdGVuZXJzLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2NoZWR1bGVzIGFuIHVwZGF0ZS4gSXQgd2lsbCBydW4gb24gdGhlIG5leHQgVUkgdXBkYXRlIGF2YWlsYWJsZS5cbiAgICAgKiBAbWV0aG9kIHNjaGVkdWxlVXBkYXRlXG4gICAgICogQG1lbWJlcm9mIFBvcHBlclxuICAgICAqL1xuXG5cbiAgICAvKipcbiAgICAgKiBDb2xsZWN0aW9uIG9mIHV0aWxpdGllcyB1c2VmdWwgd2hlbiB3cml0aW5nIGN1c3RvbSBtb2RpZmllcnMuXG4gICAgICogU3RhcnRpbmcgZnJvbSB2ZXJzaW9uIDEuNywgdGhpcyBtZXRob2QgaXMgYXZhaWxhYmxlIG9ubHkgaWYgeW91XG4gICAgICogaW5jbHVkZSBgcG9wcGVyLXV0aWxzLmpzYCBiZWZvcmUgYHBvcHBlci5qc2AuXG4gICAgICpcbiAgICAgKiAqKkRFUFJFQ0FUSU9OKio6IFRoaXMgd2F5IHRvIGFjY2VzcyBQb3BwZXJVdGlscyBpcyBkZXByZWNhdGVkXG4gICAgICogYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB2MiEgVXNlIHRoZSBQb3BwZXJVdGlscyBtb2R1bGUgZGlyZWN0bHkgaW5zdGVhZC5cbiAgICAgKiBEdWUgdG8gdGhlIGhpZ2ggaW5zdGFiaWxpdHkgb2YgdGhlIG1ldGhvZHMgY29udGFpbmVkIGluIFV0aWxzLCB3ZSBjYW4ndFxuICAgICAqIGd1YXJhbnRlZSB0aGVtIHRvIGZvbGxvdyBzZW12ZXIuIFVzZSB0aGVtIGF0IHlvdXIgb3duIHJpc2shXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDEuOFxuICAgICAqIEBtZW1iZXIgVXRpbHNcbiAgICAgKiBAbWVtYmVyb2YgUG9wcGVyXG4gICAgICovXG5cbiAgfV0pO1xuICByZXR1cm4gUG9wcGVyO1xufSgpO1xuXG4vKipcbiAqIFRoZSBgcmVmZXJlbmNlT2JqZWN0YCBpcyBhbiBvYmplY3QgdGhhdCBwcm92aWRlcyBhbiBpbnRlcmZhY2UgY29tcGF0aWJsZSB3aXRoIFBvcHBlci5qc1xuICogYW5kIGxldHMgeW91IHVzZSBpdCBhcyByZXBsYWNlbWVudCBvZiBhIHJlYWwgRE9NIG5vZGUuPGJyIC8+XG4gKiBZb3UgY2FuIHVzZSB0aGlzIG1ldGhvZCB0byBwb3NpdGlvbiBhIHBvcHBlciByZWxhdGl2ZWx5IHRvIGEgc2V0IG9mIGNvb3JkaW5hdGVzXG4gKiBpbiBjYXNlIHlvdSBkb24ndCBoYXZlIGEgRE9NIG5vZGUgdG8gdXNlIGFzIHJlZmVyZW5jZS5cbiAqXG4gKiBgYGBcbiAqIG5ldyBQb3BwZXIocmVmZXJlbmNlT2JqZWN0LCBwb3BwZXJOb2RlKTtcbiAqIGBgYFxuICpcbiAqIE5COiBUaGlzIGZlYXR1cmUgaXNuJ3Qgc3VwcG9ydGVkIGluIEludGVybmV0IEV4cGxvcmVyIDEwLlxuICogQG5hbWUgcmVmZXJlbmNlT2JqZWN0XG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBkYXRhLmdldEJvdW5kaW5nQ2xpZW50UmVjdFxuICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBzZXQgb2YgY29vcmRpbmF0ZXMgY29tcGF0aWJsZSB3aXRoIHRoZSBuYXRpdmUgYGdldEJvdW5kaW5nQ2xpZW50UmVjdGAgbWV0aG9kLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGRhdGEuY2xpZW50V2lkdGhcbiAqIEFuIEVTNiBnZXR0ZXIgdGhhdCB3aWxsIHJldHVybiB0aGUgd2lkdGggb2YgdGhlIHZpcnR1YWwgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gZGF0YS5jbGllbnRIZWlnaHRcbiAqIEFuIEVTNiBnZXR0ZXIgdGhhdCB3aWxsIHJldHVybiB0aGUgaGVpZ2h0IG9mIHRoZSB2aXJ0dWFsIHJlZmVyZW5jZSBlbGVtZW50LlxuICovXG5cblxuUG9wcGVyLlV0aWxzID0gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsKS5Qb3BwZXJVdGlscztcblBvcHBlci5wbGFjZW1lbnRzID0gcGxhY2VtZW50cztcblBvcHBlci5EZWZhdWx0cyA9IERlZmF1bHRzO1xuXG5leHBvcnQgZGVmYXVsdCBQb3BwZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wb3BwZXIuanMubWFwXG4iLCJ2YXIgcHVnID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvcHVnLXJ1bnRpbWUvaW5kZXguanNcIik7XG5cbmZ1bmN0aW9uIHRlbXBsYXRlKGxvY2Fscykge3ZhciBwdWdfaHRtbCA9IFwiXCIsIHB1Z19taXhpbnMgPSB7fSwgcHVnX2ludGVycDtwdWdfaHRtbCA9IHB1Z19odG1sICsgXCJcXHUwMDNDYm9keVxcdTAwM0VcXHUwMDNDbmF2IGNsYXNzPVxcXCJuYXZiYXIgbmF2YmFyLWV4cGFuZC1sZyBwLTEgbmF2YmFyLWxpZ2h0IGJnLWxpZ2h0IGZpeGVkLXRvcFxcXCJcXHUwMDNFXFx1MDAzQ2EgY2xhc3M9XFxcIm5hdmJhci1icmFuZFxcXCIgaHJlZj1cXFwiXFx1MDAyRmh1YlxcdTAwMkZzcGF3blxcXCJcXHUwMDNFXFx1MDAzQ2ltZyBzdHlsZT1cXFwiaGVpZ2h0OiAzOHB4O21hcmdpbi1sZWZ0OiAtMS4yZW07XFxcIiBzcmM9XFxcInN0YXRpY1xcdTAwMkZzdG9jaHNzLWxvZ28ucG5nXFxcIlxcdTAwM0VcXHUwMDNDXFx1MDAyRmFcXHUwMDNFXFx1MDAzQ2RpdiBjbGFzcz1cXFwiY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlIGp1c3RpZnktY29udGVudC1lbmRcXFwiIGlkPVxcXCJuYXZiYXJcXFwiXFx1MDAzRVxcdTAwM0N1bCBjbGFzcz1cXFwibmF2YmFyLW5hdiBmbG9hdC1yaWdodFxcXCJcXHUwMDNFXFx1MDAzQ2xpIGNsYXNzPVxcXCJuYXYtaXRlbVxcXCJcXHUwMDNFXFx1MDAzQ2EgY2xhc3M9XFxcIm5hdi1saW5rXFxcIiBocmVmPVxcXCJodHRwOlxcdTAwMkZcXHUwMDJGd3d3LnN0b2Noc3Mub3JnXFxcIiB0YXJnZXQ9XFxcIl9ibGFua1xcXCJcXHUwMDNFQWJvdXRcXHUwMDNDXFx1MDAyRmFcXHUwMDNFXFx1MDAzQ1xcdTAwMkZsaVxcdTAwM0VcXHUwMDNDbGkgY2xhc3M9XFxcIm5hdi1pdGVtXFxcIlxcdTAwM0VcXHUwMDNDYSBjbGFzcz1cXFwibmF2LWxpbmtcXFwiIGhyZWY9XFxcImh0dHA6XFx1MDAyRlxcdTAwMkZ3d3cuc3RvY2hzcy5vcmdcXHUwMDJGP3BhZ2VfaWQ9NDc2XFxcIiB0YXJnZXQ9XFxcIl9ibGFua1xcXCJcXHUwMDNFRG9jdW1lbnRhdGlvblxcdTAwM0NcXHUwMDJGYVxcdTAwM0VcXHUwMDNDXFx1MDAyRmxpXFx1MDAzRVxcdTAwM0NsaSBjbGFzcz1cXFwibmF2LWl0ZW1cXFwiXFx1MDAzRVxcdTAwM0NhIGNsYXNzPVxcXCJuYXYtbGlua1xcXCIgaHJlZj1cXFwibWFpbHRvOnN0b2Noc3MtdXNlcnNAZ29vZ2xlZ3JvdXBzLmNvbVxcXCJcXHUwMDNFQ29udGFjdFxcdTAwM0NcXHUwMDJGYVxcdTAwM0VcXHUwMDNDXFx1MDAyRmxpXFx1MDAzRVxcdTAwM0NsaSBjbGFzcz1cXFwibmF2LWl0ZW1cXFwiXFx1MDAzRVxcdTAwM0NhIGNsYXNzPVxcXCJuYXYtbGlua1xcXCIgaHJlZj1cXFwiaHR0cHM6XFx1MDAyRlxcdTAwMkZnaXRodWIuY29tXFx1MDAyRlN0b2NoU1NcXHUwMDJGc3RvY2hzc1xcdTAwMkZpc3N1ZXNcXHUwMDJGbmV3XFxcIiB0YXJnZXQ9XFxcIl9ibGFua1xcXCJcXHUwMDNFUmVwb3J0IElzc3VlXFx1MDAzQ1xcdTAwMkZhXFx1MDAzRVxcdTAwM0NcXHUwMDJGbGlcXHUwMDNFXFx1MDAzQ2xpIGNsYXNzPVxcXCJuYXYtaXRlbVxcXCJcXHUwMDNFXFx1MDAzQ2EgY2xhc3M9XFxcIm5hdi1saW5rXFxcIiBocmVmPVxcXCJcXHUwMDJGbG9nb3V0XFxcIlxcdTAwM0VTaWduIE91dFxcdTAwM0NcXHUwMDJGYVxcdTAwM0VcXHUwMDNDXFx1MDAyRmxpXFx1MDAzRVxcdTAwM0NcXHUwMDJGdWxcXHUwMDNFXFx1MDAzQ1xcdTAwMkZkaXZcXHUwMDNFXFx1MDAzQ1xcdTAwMkZuYXZcXHUwMDNFXFx1MDAzQ2RpdiBjbGFzcz1cXFwiY29udGFpbmVyLWZsdWlkXFxcIlxcdTAwM0VcXHUwMDNDZGl2IGNsYXNzPVxcXCJyb3cgZmxleC1ub3dyYXBcXFwiXFx1MDAzRVxcdTAwM0NkaXYgY2xhc3M9XFxcImNvbC1tZC0yXFxcIlxcdTAwM0VcXHUwMDNDbmF2IGNsYXNzPVxcXCJzaWRlYmFyIGQtbWQtYmxvY2tcXFwiXFx1MDAzRVxcdTAwM0NkaXYgY2xhc3M9XFxcInNpZGViYXItc3RpY2t5IHRvb2xzXFxcIlxcdTAwM0VcXHUwMDNDdWwgY2xhc3M9XFxcIm5hdiBmbGV4LWNvbHVtblxcXCJcXHUwMDNFXFx1MDAzQ2xpIGNsYXNzPVxcXCJuYXYtaXRlbVxcXCJcXHUwMDNFXFx1MDAzQ2g1IGNsYXNzPVxcXCJpY29uLWZsYXNrXFxcIlxcdTAwM0VUb29sc1xcdTAwM0NcXHUwMDJGaDVcXHUwMDNFXFx1MDAzQ1xcdTAwMkZsaVxcdTAwM0VcXHUwMDNDbGkgY2xhc3M9XFxcIm5hdi1pdGVtXFxcIlxcdTAwM0VcXHUwMDNDYSBjbGFzcz1cXFwibmF2LWxpbmtcXFwiIGhyZWY9XFxcInN0b2Noc3NcXHUwMDJGbW9kZWxzXFxcIiB0aXRsZT1cXFwiRXhwbG9yZSB5b3VyIFN0b2NoU1MgbW9kZWxzXFxcIlxcdTAwM0VCcm93c2VyXFx1MDAzQ1xcdTAwMkZhXFx1MDAzRVxcdTAwM0NcXHUwMDJGbGlcXHUwMDNFXFx1MDAzQ2xpIGNsYXNzPVxcXCJuYXYtaXRlbVxcXCJcXHUwMDNFXFx1MDAzQ2EgY2xhc3M9XFxcIm5hdi1saW5rXFxcIiB0YXJnZXQ9XFxcIl9ibGFua1xcXCIgaHJlZj1cXFwidHJlZVxcXCIgdGl0bGU9XFxcIkJyb3dzZSB5b3VyIGZpbGVzIGluIGEgSnVweXRlciBpbnRlcmZhY2VcXFwiXFx1MDAzRUp1cHl0ZXJcXHUwMDNDXFx1MDAyRmFcXHUwMDNFXFx1MDAzQ1xcdTAwMkZsaVxcdTAwM0VcXHUwMDNDIS0tbGkubmF2LWl0ZW06IGEubmF2LWxpbmsoZGF0YS1ob29rPVxcXCJnZW5lcmFsLWhlbHAtbGlua1xcXCIsIHRhcmdldD1cXFwiX2JsYW5rXFxcIiwgaHJlZj1cXFwiI1xcXCIsIHRpdGxlPVxcXCJIZWxwXFxcIilcXHUwMDJGXFx1MDAyRiB8IEhlbHBcXG4tLVxcdTAwM0VcXHUwMDNDXFx1MDAyRnVsXFx1MDAzRVxcdTAwM0NcXHUwMDJGZGl2XFx1MDAzRVxcdTAwM0NcXHUwMDJGbmF2XFx1MDAzRVxcdTAwM0NcXHUwMDJGZGl2XFx1MDAzRVxcdTAwM0NtYWluIGNsYXNzPVxcXCJjb2wtbWQtMTAgYm9keVxcXCIgcm9sZT1cXFwibWFpblxcXCJcXHUwMDNFXFx1MDAzQ2RpdiBjbGFzcz1cXFwiY29udGFpbmVyLWZsdWlkXFxcIiBkYXRhLWhvb2s9XFxcInBhZ2UtY29udGFpbmVyXFxcIlxcdTAwM0VcXHUwMDNDXFx1MDAyRmRpdlxcdTAwM0VcXHUwMDNDXFx1MDAyRm1haW5cXHUwMDNFXFx1MDAzQ1xcdTAwMkZkaXZcXHUwMDNFXFx1MDAzQ1xcdTAwMkZkaXZcXHUwMDNFXFx1MDAzQ1xcdTAwMkZib2R5XFx1MDAzRVwiOztyZXR1cm4gcHVnX2h0bWw7fTtcbm1vZHVsZS5leHBvcnRzID0gdGVtcGxhdGU7IiwidmFyIHB1ZyA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3B1Zy1ydW50aW1lL2luZGV4LmpzXCIpO1xuXG5mdW5jdGlvbiB0ZW1wbGF0ZShsb2NhbHMpIHt2YXIgcHVnX2h0bWwgPSBcIlwiLCBwdWdfbWl4aW5zID0ge30sIHB1Z19pbnRlcnA7cHVnX2h0bWwgPSBwdWdfaHRtbCArIFwiXFx1MDAzQ2hlYWRcXHUwMDNFXFx1MDAzQ21ldGEgY2hhcnNldD1cXFwidXRmLThcXFwiXFx1MDAzRVxcdTAwM0N0aXRsZVxcdTAwM0VTdG9jaFNTOiBTdG9jaGFzdGljIFNpbWxhdGlvbiBTZXJ2aWNlXFx1MDAzQ1xcdTAwMkZ0aXRsZVxcdTAwM0VcXHUwMDNDbWV0YSBuYW1lPVxcXCJ2aWV3cG9ydFxcXCIgY29udGVudD1cXFwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMFxcXCJcXHUwMDNFXFx1MDAzQ21ldGEgbmFtZT1cXFwiZGVzY3JpcHRpb25cXFwiIGNvbnRlbnQ9XFxcIlxcXCJcXHUwMDNFXFx1MDAzQ21ldGEgbmFtZT1cXFwiYXV0aG9yXFxcIiBjb250ZW50PVxcXCJcXFwiXFx1MDAzRVxcdTAwM0NcXHUwMDJGaGVhZFxcdTAwM0VcIjs7cmV0dXJuIHB1Z19odG1sO307XG5tb2R1bGUuZXhwb3J0cyA9IHRlbXBsYXRlOyIsIid1c2Ugc3RyaWN0JztcblxudmFyIHB1Z19oYXNfb3duX3Byb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBNZXJnZSB0d28gYXR0cmlidXRlIG9iamVjdHMgZ2l2aW5nIHByZWNlZGVuY2VcbiAqIHRvIHZhbHVlcyBpbiBvYmplY3QgYGJgLiBDbGFzc2VzIGFyZSBzcGVjaWFsLWNhc2VkXG4gKiBhbGxvd2luZyBmb3IgYXJyYXlzIGFuZCBtZXJnaW5nL2pvaW5pbmcgYXBwcm9wcmlhdGVseVxuICogcmVzdWx0aW5nIGluIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhXG4gKiBAcGFyYW0ge09iamVjdH0gYlxuICogQHJldHVybiB7T2JqZWN0fSBhXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLm1lcmdlID0gcHVnX21lcmdlO1xuZnVuY3Rpb24gcHVnX21lcmdlKGEsIGIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICB2YXIgYXR0cnMgPSBhWzBdO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgYXR0cnMgPSBwdWdfbWVyZ2UoYXR0cnMsIGFbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gYXR0cnM7XG4gIH1cblxuICBmb3IgKHZhciBrZXkgaW4gYikge1xuICAgIGlmIChrZXkgPT09ICdjbGFzcycpIHtcbiAgICAgIHZhciB2YWxBID0gYVtrZXldIHx8IFtdO1xuICAgICAgYVtrZXldID0gKEFycmF5LmlzQXJyYXkodmFsQSkgPyB2YWxBIDogW3ZhbEFdKS5jb25jYXQoYltrZXldIHx8IFtdKTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3N0eWxlJykge1xuICAgICAgdmFyIHZhbEEgPSBwdWdfc3R5bGUoYVtrZXldKTtcbiAgICAgIHZhbEEgPSB2YWxBICYmIHZhbEFbdmFsQS5sZW5ndGggLSAxXSAhPT0gJzsnID8gdmFsQSArICc7JyA6IHZhbEE7XG4gICAgICB2YXIgdmFsQiA9IHB1Z19zdHlsZShiW2tleV0pO1xuICAgICAgdmFsQiA9IHZhbEIgJiYgdmFsQlt2YWxCLmxlbmd0aCAtIDFdICE9PSAnOycgPyB2YWxCICsgJzsnIDogdmFsQjtcbiAgICAgIGFba2V5XSA9IHZhbEEgKyB2YWxCO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSBiW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGE7XG59O1xuXG4vKipcbiAqIFByb2Nlc3MgYXJyYXksIG9iamVjdCwgb3Igc3RyaW5nIGFzIGEgc3RyaW5nIG9mIGNsYXNzZXMgZGVsaW1pdGVkIGJ5IGEgc3BhY2UuXG4gKlxuICogSWYgYHZhbGAgaXMgYW4gYXJyYXksIGFsbCBtZW1iZXJzIG9mIGl0IGFuZCBpdHMgc3ViYXJyYXlzIGFyZSBjb3VudGVkIGFzXG4gKiBjbGFzc2VzLiBJZiBgZXNjYXBpbmdgIGlzIGFuIGFycmF5LCB0aGVuIHdoZXRoZXIgb3Igbm90IHRoZSBpdGVtIGluIGB2YWxgIGlzXG4gKiBlc2NhcGVkIGRlcGVuZHMgb24gdGhlIGNvcnJlc3BvbmRpbmcgaXRlbSBpbiBgZXNjYXBpbmdgLiBJZiBgZXNjYXBpbmdgIGlzXG4gKiBub3QgYW4gYXJyYXksIG5vIGVzY2FwaW5nIGlzIGRvbmUuXG4gKlxuICogSWYgYHZhbGAgaXMgYW4gb2JqZWN0LCBhbGwgdGhlIGtleXMgd2hvc2UgdmFsdWUgaXMgdHJ1dGh5IGFyZSBjb3VudGVkIGFzXG4gKiBjbGFzc2VzLiBObyBlc2NhcGluZyBpcyBkb25lLlxuICpcbiAqIElmIGB2YWxgIGlzIGEgc3RyaW5nLCBpdCBpcyBjb3VudGVkIGFzIGEgY2xhc3MuIE5vIGVzY2FwaW5nIGlzIGRvbmUuXG4gKlxuICogQHBhcmFtIHsoQXJyYXkuPHN0cmluZz58T2JqZWN0LjxzdHJpbmcsIGJvb2xlYW4+fHN0cmluZyl9IHZhbFxuICogQHBhcmFtIHs/QXJyYXkuPHN0cmluZz59IGVzY2FwaW5nXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmV4cG9ydHMuY2xhc3NlcyA9IHB1Z19jbGFzc2VzO1xuZnVuY3Rpb24gcHVnX2NsYXNzZXNfYXJyYXkodmFsLCBlc2NhcGluZykge1xuICB2YXIgY2xhc3NTdHJpbmcgPSAnJywgY2xhc3NOYW1lLCBwYWRkaW5nID0gJycsIGVzY2FwZUVuYWJsZWQgPSBBcnJheS5pc0FycmF5KGVzY2FwaW5nKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICBjbGFzc05hbWUgPSBwdWdfY2xhc3Nlcyh2YWxbaV0pO1xuICAgIGlmICghY2xhc3NOYW1lKSBjb250aW51ZTtcbiAgICBlc2NhcGVFbmFibGVkICYmIGVzY2FwaW5nW2ldICYmIChjbGFzc05hbWUgPSBwdWdfZXNjYXBlKGNsYXNzTmFtZSkpO1xuICAgIGNsYXNzU3RyaW5nID0gY2xhc3NTdHJpbmcgKyBwYWRkaW5nICsgY2xhc3NOYW1lO1xuICAgIHBhZGRpbmcgPSAnICc7XG4gIH1cbiAgcmV0dXJuIGNsYXNzU3RyaW5nO1xufVxuZnVuY3Rpb24gcHVnX2NsYXNzZXNfb2JqZWN0KHZhbCkge1xuICB2YXIgY2xhc3NTdHJpbmcgPSAnJywgcGFkZGluZyA9ICcnO1xuICBmb3IgKHZhciBrZXkgaW4gdmFsKSB7XG4gICAgaWYgKGtleSAmJiB2YWxba2V5XSAmJiBwdWdfaGFzX293bl9wcm9wZXJ0eS5jYWxsKHZhbCwga2V5KSkge1xuICAgICAgY2xhc3NTdHJpbmcgPSBjbGFzc1N0cmluZyArIHBhZGRpbmcgKyBrZXk7XG4gICAgICBwYWRkaW5nID0gJyAnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2xhc3NTdHJpbmc7XG59XG5mdW5jdGlvbiBwdWdfY2xhc3Nlcyh2YWwsIGVzY2FwaW5nKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICByZXR1cm4gcHVnX2NsYXNzZXNfYXJyYXkodmFsLCBlc2NhcGluZyk7XG4gIH0gZWxzZSBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHB1Z19jbGFzc2VzX29iamVjdCh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWwgfHwgJyc7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0IG9iamVjdCBvciBzdHJpbmcgdG8gYSBzdHJpbmcgb2YgQ1NTIHN0eWxlcyBkZWxpbWl0ZWQgYnkgYSBzZW1pY29sb24uXG4gKlxuICogQHBhcmFtIHsoT2JqZWN0LjxzdHJpbmcsIHN0cmluZz58c3RyaW5nKX0gdmFsXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cblxuZXhwb3J0cy5zdHlsZSA9IHB1Z19zdHlsZTtcbmZ1bmN0aW9uIHB1Z19zdHlsZSh2YWwpIHtcbiAgaWYgKCF2YWwpIHJldHVybiAnJztcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgdmFyIG91dCA9ICcnO1xuICAgIGZvciAodmFyIHN0eWxlIGluIHZhbCkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChwdWdfaGFzX293bl9wcm9wZXJ0eS5jYWxsKHZhbCwgc3R5bGUpKSB7XG4gICAgICAgIG91dCA9IG91dCArIHN0eWxlICsgJzonICsgdmFsW3N0eWxlXSArICc7JztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsICsgJyc7XG4gIH1cbn07XG5cbi8qKlxuICogUmVuZGVyIHRoZSBnaXZlbiBhdHRyaWJ1dGUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGtleVxuICogQHBhcmFtIHtTdHJpbmd9IHZhbFxuICogQHBhcmFtIHtCb29sZWFufSBlc2NhcGVkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHRlcnNlXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmV4cG9ydHMuYXR0ciA9IHB1Z19hdHRyO1xuZnVuY3Rpb24gcHVnX2F0dHIoa2V5LCB2YWwsIGVzY2FwZWQsIHRlcnNlKSB7XG4gIGlmICh2YWwgPT09IGZhbHNlIHx8IHZhbCA9PSBudWxsIHx8ICF2YWwgJiYgKGtleSA9PT0gJ2NsYXNzJyB8fCBrZXkgPT09ICdzdHlsZScpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGlmICh2YWwgPT09IHRydWUpIHtcbiAgICByZXR1cm4gJyAnICsgKHRlcnNlID8ga2V5IDoga2V5ICsgJz1cIicgKyBrZXkgKyAnXCInKTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbC50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YWwgPSB2YWwudG9KU09OKCk7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWwgIT09ICdzdHJpbmcnKSB7XG4gICAgdmFsID0gSlNPTi5zdHJpbmdpZnkodmFsKTtcbiAgICBpZiAoIWVzY2FwZWQgJiYgdmFsLmluZGV4T2YoJ1wiJykgIT09IC0xKSB7XG4gICAgICByZXR1cm4gJyAnICsga2V5ICsgJz1cXCcnICsgdmFsLnJlcGxhY2UoLycvZywgJyYjMzk7JykgKyAnXFwnJztcbiAgICB9XG4gIH1cbiAgaWYgKGVzY2FwZWQpIHZhbCA9IHB1Z19lc2NhcGUodmFsKTtcbiAgcmV0dXJuICcgJyArIGtleSArICc9XCInICsgdmFsICsgJ1wiJztcbn07XG5cbi8qKlxuICogUmVuZGVyIHRoZSBnaXZlbiBhdHRyaWJ1dGVzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge09iamVjdH0gdGVyc2Ugd2hldGhlciB0byB1c2UgSFRNTDUgdGVyc2UgYm9vbGVhbiBhdHRyaWJ1dGVzXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmV4cG9ydHMuYXR0cnMgPSBwdWdfYXR0cnM7XG5mdW5jdGlvbiBwdWdfYXR0cnMob2JqLCB0ZXJzZSl7XG4gIHZhciBhdHRycyA9ICcnO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBpZiAocHVnX2hhc19vd25fcHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgIHZhciB2YWwgPSBvYmpba2V5XTtcblxuICAgICAgaWYgKCdjbGFzcycgPT09IGtleSkge1xuICAgICAgICB2YWwgPSBwdWdfY2xhc3Nlcyh2YWwpO1xuICAgICAgICBhdHRycyA9IHB1Z19hdHRyKGtleSwgdmFsLCBmYWxzZSwgdGVyc2UpICsgYXR0cnM7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCdzdHlsZScgPT09IGtleSkge1xuICAgICAgICB2YWwgPSBwdWdfc3R5bGUodmFsKTtcbiAgICAgIH1cbiAgICAgIGF0dHJzICs9IHB1Z19hdHRyKGtleSwgdmFsLCBmYWxzZSwgdGVyc2UpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhdHRycztcbn07XG5cbi8qKlxuICogRXNjYXBlIHRoZSBnaXZlbiBzdHJpbmcgb2YgYGh0bWxgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBodG1sXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG52YXIgcHVnX21hdGNoX2h0bWwgPSAvW1wiJjw+XS87XG5leHBvcnRzLmVzY2FwZSA9IHB1Z19lc2NhcGU7XG5mdW5jdGlvbiBwdWdfZXNjYXBlKF9odG1sKXtcbiAgdmFyIGh0bWwgPSAnJyArIF9odG1sO1xuICB2YXIgcmVnZXhSZXN1bHQgPSBwdWdfbWF0Y2hfaHRtbC5leGVjKGh0bWwpO1xuICBpZiAoIXJlZ2V4UmVzdWx0KSByZXR1cm4gX2h0bWw7XG5cbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgaSwgbGFzdEluZGV4LCBlc2NhcGU7XG4gIGZvciAoaSA9IHJlZ2V4UmVzdWx0LmluZGV4LCBsYXN0SW5kZXggPSAwOyBpIDwgaHRtbC5sZW5ndGg7IGkrKykge1xuICAgIHN3aXRjaCAoaHRtbC5jaGFyQ29kZUF0KGkpKSB7XG4gICAgICBjYXNlIDM0OiBlc2NhcGUgPSAnJnF1b3Q7JzsgYnJlYWs7XG4gICAgICBjYXNlIDM4OiBlc2NhcGUgPSAnJmFtcDsnOyBicmVhaztcbiAgICAgIGNhc2UgNjA6IGVzY2FwZSA9ICcmbHQ7JzsgYnJlYWs7XG4gICAgICBjYXNlIDYyOiBlc2NhcGUgPSAnJmd0Oyc7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogY29udGludWU7XG4gICAgfVxuICAgIGlmIChsYXN0SW5kZXggIT09IGkpIHJlc3VsdCArPSBodG1sLnN1YnN0cmluZyhsYXN0SW5kZXgsIGkpO1xuICAgIGxhc3RJbmRleCA9IGkgKyAxO1xuICAgIHJlc3VsdCArPSBlc2NhcGU7XG4gIH1cbiAgaWYgKGxhc3RJbmRleCAhPT0gaSkgcmV0dXJuIHJlc3VsdCArIGh0bWwuc3Vic3RyaW5nKGxhc3RJbmRleCwgaSk7XG4gIGVsc2UgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogUmUtdGhyb3cgdGhlIGdpdmVuIGBlcnJgIGluIGNvbnRleHQgdG8gdGhlXG4gKiB0aGUgcHVnIGluIGBmaWxlbmFtZWAgYXQgdGhlIGdpdmVuIGBsaW5lbm9gLlxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IGVyclxuICogQHBhcmFtIHtTdHJpbmd9IGZpbGVuYW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gbGluZW5vXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIG9yaWdpbmFsIHNvdXJjZVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5yZXRocm93ID0gcHVnX3JldGhyb3c7XG5mdW5jdGlvbiBwdWdfcmV0aHJvdyhlcnIsIGZpbGVuYW1lLCBsaW5lbm8sIHN0cil7XG4gIGlmICghKGVyciBpbnN0YW5jZW9mIEVycm9yKSkgdGhyb3cgZXJyO1xuICBpZiAoKHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgfHwgIWZpbGVuYW1lKSAmJiAhc3RyKSB7XG4gICAgZXJyLm1lc3NhZ2UgKz0gJyBvbiBsaW5lICcgKyBsaW5lbm87XG4gICAgdGhyb3cgZXJyO1xuICB9XG4gIHRyeSB7XG4gICAgc3RyID0gc3RyIHx8IHJlcXVpcmUoJ2ZzJykucmVhZEZpbGVTeW5jKGZpbGVuYW1lLCAndXRmOCcpXG4gIH0gY2F0Y2ggKGV4KSB7XG4gICAgcHVnX3JldGhyb3coZXJyLCBudWxsLCBsaW5lbm8pXG4gIH1cbiAgdmFyIGNvbnRleHQgPSAzXG4gICAgLCBsaW5lcyA9IHN0ci5zcGxpdCgnXFxuJylcbiAgICAsIHN0YXJ0ID0gTWF0aC5tYXgobGluZW5vIC0gY29udGV4dCwgMClcbiAgICAsIGVuZCA9IE1hdGgubWluKGxpbmVzLmxlbmd0aCwgbGluZW5vICsgY29udGV4dCk7XG5cbiAgLy8gRXJyb3IgY29udGV4dFxuICB2YXIgY29udGV4dCA9IGxpbmVzLnNsaWNlKHN0YXJ0LCBlbmQpLm1hcChmdW5jdGlvbihsaW5lLCBpKXtcbiAgICB2YXIgY3VyciA9IGkgKyBzdGFydCArIDE7XG4gICAgcmV0dXJuIChjdXJyID09IGxpbmVubyA/ICcgID4gJyA6ICcgICAgJylcbiAgICAgICsgY3VyclxuICAgICAgKyAnfCAnXG4gICAgICArIGxpbmU7XG4gIH0pLmpvaW4oJ1xcbicpO1xuXG4gIC8vIEFsdGVyIGV4Y2VwdGlvbiBtZXNzYWdlXG4gIGVyci5wYXRoID0gZmlsZW5hbWU7XG4gIGVyci5tZXNzYWdlID0gKGZpbGVuYW1lIHx8ICdQdWcnKSArICc6JyArIGxpbmVub1xuICAgICsgJ1xcbicgKyBjb250ZXh0ICsgJ1xcblxcbicgKyBlcnIubWVzc2FnZTtcbiAgdGhyb3cgZXJyO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG52YXIgcGVyY2VudFR3ZW50aWVzID0gLyUyMC9nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAnZGVmYXVsdCc6ICdSRkMzOTg2JyxcbiAgICBmb3JtYXR0ZXJzOiB7XG4gICAgICAgIFJGQzE3Mzg6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2UuY2FsbCh2YWx1ZSwgcGVyY2VudFR3ZW50aWVzLCAnKycpO1xuICAgICAgICB9LFxuICAgICAgICBSRkMzOTg2OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgUkZDMTczODogJ1JGQzE3MzgnLFxuICAgIFJGQzM5ODY6ICdSRkMzOTg2J1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vc3RyaW5naWZ5Jyk7XG52YXIgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJyk7XG52YXIgZm9ybWF0cyA9IHJlcXVpcmUoJy4vZm9ybWF0cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBmb3JtYXRzOiBmb3JtYXRzLFxuICAgIHBhcnNlOiBwYXJzZSxcbiAgICBzdHJpbmdpZnk6IHN0cmluZ2lmeVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIGRlZmF1bHRzID0ge1xuICAgIGFsbG93RG90czogZmFsc2UsXG4gICAgYWxsb3dQcm90b3R5cGVzOiBmYWxzZSxcbiAgICBhcnJheUxpbWl0OiAyMCxcbiAgICBjaGFyc2V0OiAndXRmLTgnLFxuICAgIGNoYXJzZXRTZW50aW5lbDogZmFsc2UsXG4gICAgY29tbWE6IGZhbHNlLFxuICAgIGRlY29kZXI6IHV0aWxzLmRlY29kZSxcbiAgICBkZWxpbWl0ZXI6ICcmJyxcbiAgICBkZXB0aDogNSxcbiAgICBpZ25vcmVRdWVyeVByZWZpeDogZmFsc2UsXG4gICAgaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzOiBmYWxzZSxcbiAgICBwYXJhbWV0ZXJMaW1pdDogMTAwMCxcbiAgICBwYXJzZUFycmF5czogdHJ1ZSxcbiAgICBwbGFpbk9iamVjdHM6IGZhbHNlLFxuICAgIHN0cmljdE51bGxIYW5kbGluZzogZmFsc2Vcbn07XG5cbnZhciBpbnRlcnByZXROdW1lcmljRW50aXRpZXMgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8mIyhcXGQrKTsvZywgZnVuY3Rpb24gKCQwLCBudW1iZXJTdHIpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQobnVtYmVyU3RyLCAxMCkpO1xuICAgIH0pO1xufTtcblxuLy8gVGhpcyBpcyB3aGF0IGJyb3dzZXJzIHdpbGwgc3VibWl0IHdoZW4gdGhlIOKckyBjaGFyYWN0ZXIgb2NjdXJzIGluIGFuXG4vLyBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgYm9keSBhbmQgdGhlIGVuY29kaW5nIG9mIHRoZSBwYWdlIGNvbnRhaW5pbmdcbi8vIHRoZSBmb3JtIGlzIGlzby04ODU5LTEsIG9yIHdoZW4gdGhlIHN1Ym1pdHRlZCBmb3JtIGhhcyBhbiBhY2NlcHQtY2hhcnNldFxuLy8gYXR0cmlidXRlIG9mIGlzby04ODU5LTEuIFByZXN1bWFibHkgYWxzbyB3aXRoIG90aGVyIGNoYXJzZXRzIHRoYXQgZG8gbm90IGNvbnRhaW5cbi8vIHRoZSDinJMgY2hhcmFjdGVyLCBzdWNoIGFzIHVzLWFzY2lpLlxudmFyIGlzb1NlbnRpbmVsID0gJ3V0Zjg9JTI2JTIzMTAwMDMlM0InOyAvLyBlbmNvZGVVUklDb21wb25lbnQoJyYjMTAwMDM7JylcblxuLy8gVGhlc2UgYXJlIHRoZSBwZXJjZW50LWVuY29kZWQgdXRmLTggb2N0ZXRzIHJlcHJlc2VudGluZyBhIGNoZWNrbWFyaywgaW5kaWNhdGluZyB0aGF0IHRoZSByZXF1ZXN0IGFjdHVhbGx5IGlzIHV0Zi04IGVuY29kZWQuXG52YXIgY2hhcnNldFNlbnRpbmVsID0gJ3V0Zjg9JUUyJTlDJTkzJzsgLy8gZW5jb2RlVVJJQ29tcG9uZW50KCfinJMnKVxuXG52YXIgcGFyc2VWYWx1ZXMgPSBmdW5jdGlvbiBwYXJzZVF1ZXJ5U3RyaW5nVmFsdWVzKHN0ciwgb3B0aW9ucykge1xuICAgIHZhciBvYmogPSB7fTtcbiAgICB2YXIgY2xlYW5TdHIgPSBvcHRpb25zLmlnbm9yZVF1ZXJ5UHJlZml4ID8gc3RyLnJlcGxhY2UoL15cXD8vLCAnJykgOiBzdHI7XG4gICAgdmFyIGxpbWl0ID0gb3B0aW9ucy5wYXJhbWV0ZXJMaW1pdCA9PT0gSW5maW5pdHkgPyB1bmRlZmluZWQgOiBvcHRpb25zLnBhcmFtZXRlckxpbWl0O1xuICAgIHZhciBwYXJ0cyA9IGNsZWFuU3RyLnNwbGl0KG9wdGlvbnMuZGVsaW1pdGVyLCBsaW1pdCk7XG4gICAgdmFyIHNraXBJbmRleCA9IC0xOyAvLyBLZWVwIHRyYWNrIG9mIHdoZXJlIHRoZSB1dGY4IHNlbnRpbmVsIHdhcyBmb3VuZFxuICAgIHZhciBpO1xuXG4gICAgdmFyIGNoYXJzZXQgPSBvcHRpb25zLmNoYXJzZXQ7XG4gICAgaWYgKG9wdGlvbnMuY2hhcnNldFNlbnRpbmVsKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKHBhcnRzW2ldLmluZGV4T2YoJ3V0Zjg9JykgPT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAocGFydHNbaV0gPT09IGNoYXJzZXRTZW50aW5lbCkge1xuICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gJ3V0Zi04JztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcnRzW2ldID09PSBpc29TZW50aW5lbCkge1xuICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gJ2lzby04ODU5LTEnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBza2lwSW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIGkgPSBwYXJ0cy5sZW5ndGg7IC8vIFRoZSBlc2xpbnQgc2V0dGluZ3MgZG8gbm90IGFsbG93IGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChpID09PSBza2lwSW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwYXJ0ID0gcGFydHNbaV07XG5cbiAgICAgICAgdmFyIGJyYWNrZXRFcXVhbHNQb3MgPSBwYXJ0LmluZGV4T2YoJ109Jyk7XG4gICAgICAgIHZhciBwb3MgPSBicmFja2V0RXF1YWxzUG9zID09PSAtMSA/IHBhcnQuaW5kZXhPZignPScpIDogYnJhY2tldEVxdWFsc1BvcyArIDE7XG5cbiAgICAgICAgdmFyIGtleSwgdmFsO1xuICAgICAgICBpZiAocG9zID09PSAtMSkge1xuICAgICAgICAgICAga2V5ID0gb3B0aW9ucy5kZWNvZGVyKHBhcnQsIGRlZmF1bHRzLmRlY29kZXIsIGNoYXJzZXQpO1xuICAgICAgICAgICAgdmFsID0gb3B0aW9ucy5zdHJpY3ROdWxsSGFuZGxpbmcgPyBudWxsIDogJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXkgPSBvcHRpb25zLmRlY29kZXIocGFydC5zbGljZSgwLCBwb3MpLCBkZWZhdWx0cy5kZWNvZGVyLCBjaGFyc2V0KTtcbiAgICAgICAgICAgIHZhbCA9IG9wdGlvbnMuZGVjb2RlcihwYXJ0LnNsaWNlKHBvcyArIDEpLCBkZWZhdWx0cy5kZWNvZGVyLCBjaGFyc2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWwgJiYgb3B0aW9ucy5pbnRlcnByZXROdW1lcmljRW50aXRpZXMgJiYgY2hhcnNldCA9PT0gJ2lzby04ODU5LTEnKSB7XG4gICAgICAgICAgICB2YWwgPSBpbnRlcnByZXROdW1lcmljRW50aXRpZXModmFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWwgJiYgb3B0aW9ucy5jb21tYSAmJiB2YWwuaW5kZXhPZignLCcpID4gLTEpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5zcGxpdCgnLCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhcy5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgICAgb2JqW2tleV0gPSB1dGlscy5jb21iaW5lKG9ialtrZXldLCB2YWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JqW2tleV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xufTtcblxudmFyIHBhcnNlT2JqZWN0ID0gZnVuY3Rpb24gKGNoYWluLCB2YWwsIG9wdGlvbnMpIHtcbiAgICB2YXIgbGVhZiA9IHZhbDtcblxuICAgIGZvciAodmFyIGkgPSBjaGFpbi5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgb2JqO1xuICAgICAgICB2YXIgcm9vdCA9IGNoYWluW2ldO1xuXG4gICAgICAgIGlmIChyb290ID09PSAnW10nICYmIG9wdGlvbnMucGFyc2VBcnJheXMpIHtcbiAgICAgICAgICAgIG9iaiA9IFtdLmNvbmNhdChsZWFmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9iaiA9IG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuICAgICAgICAgICAgdmFyIGNsZWFuUm9vdCA9IHJvb3QuY2hhckF0KDApID09PSAnWycgJiYgcm9vdC5jaGFyQXQocm9vdC5sZW5ndGggLSAxKSA9PT0gJ10nID8gcm9vdC5zbGljZSgxLCAtMSkgOiByb290O1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gcGFyc2VJbnQoY2xlYW5Sb290LCAxMCk7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMucGFyc2VBcnJheXMgJiYgY2xlYW5Sb290ID09PSAnJykge1xuICAgICAgICAgICAgICAgIG9iaiA9IHsgMDogbGVhZiB9O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAhaXNOYU4oaW5kZXgpXG4gICAgICAgICAgICAgICAgJiYgcm9vdCAhPT0gY2xlYW5Sb290XG4gICAgICAgICAgICAgICAgJiYgU3RyaW5nKGluZGV4KSA9PT0gY2xlYW5Sb290XG4gICAgICAgICAgICAgICAgJiYgaW5kZXggPj0gMFxuICAgICAgICAgICAgICAgICYmIChvcHRpb25zLnBhcnNlQXJyYXlzICYmIGluZGV4IDw9IG9wdGlvbnMuYXJyYXlMaW1pdClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG9iaiA9IFtdO1xuICAgICAgICAgICAgICAgIG9ialtpbmRleF0gPSBsZWFmO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvYmpbY2xlYW5Sb290XSA9IGxlYWY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZWFmID0gb2JqO1xuICAgIH1cblxuICAgIHJldHVybiBsZWFmO1xufTtcblxudmFyIHBhcnNlS2V5cyA9IGZ1bmN0aW9uIHBhcnNlUXVlcnlTdHJpbmdLZXlzKGdpdmVuS2V5LCB2YWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWdpdmVuS2V5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUcmFuc2Zvcm0gZG90IG5vdGF0aW9uIHRvIGJyYWNrZXQgbm90YXRpb25cbiAgICB2YXIga2V5ID0gb3B0aW9ucy5hbGxvd0RvdHMgPyBnaXZlbktleS5yZXBsYWNlKC9cXC4oW14uW10rKS9nLCAnWyQxXScpIDogZ2l2ZW5LZXk7XG5cbiAgICAvLyBUaGUgcmVnZXggY2h1bmtzXG5cbiAgICB2YXIgYnJhY2tldHMgPSAvKFxcW1teW1xcXV0qXSkvO1xuICAgIHZhciBjaGlsZCA9IC8oXFxbW15bXFxdXSpdKS9nO1xuXG4gICAgLy8gR2V0IHRoZSBwYXJlbnRcblxuICAgIHZhciBzZWdtZW50ID0gYnJhY2tldHMuZXhlYyhrZXkpO1xuICAgIHZhciBwYXJlbnQgPSBzZWdtZW50ID8ga2V5LnNsaWNlKDAsIHNlZ21lbnQuaW5kZXgpIDoga2V5O1xuXG4gICAgLy8gU3Rhc2ggdGhlIHBhcmVudCBpZiBpdCBleGlzdHNcblxuICAgIHZhciBrZXlzID0gW107XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgICAvLyBJZiB3ZSBhcmVuJ3QgdXNpbmcgcGxhaW4gb2JqZWN0cywgb3B0aW9uYWxseSBwcmVmaXgga2V5cyB0aGF0IHdvdWxkIG92ZXJ3cml0ZSBvYmplY3QgcHJvdG90eXBlIHByb3BlcnRpZXNcbiAgICAgICAgaWYgKCFvcHRpb25zLnBsYWluT2JqZWN0cyAmJiBoYXMuY2FsbChPYmplY3QucHJvdG90eXBlLCBwYXJlbnQpKSB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuYWxsb3dQcm90b3R5cGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAga2V5cy5wdXNoKHBhcmVudCk7XG4gICAgfVxuXG4gICAgLy8gTG9vcCB0aHJvdWdoIGNoaWxkcmVuIGFwcGVuZGluZyB0byB0aGUgYXJyYXkgdW50aWwgd2UgaGl0IGRlcHRoXG5cbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKChzZWdtZW50ID0gY2hpbGQuZXhlYyhrZXkpKSAhPT0gbnVsbCAmJiBpIDwgb3B0aW9ucy5kZXB0aCkge1xuICAgICAgICBpICs9IDE7XG4gICAgICAgIGlmICghb3B0aW9ucy5wbGFpbk9iamVjdHMgJiYgaGFzLmNhbGwoT2JqZWN0LnByb3RvdHlwZSwgc2VnbWVudFsxXS5zbGljZSgxLCAtMSkpKSB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuYWxsb3dQcm90b3R5cGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGtleXMucHVzaChzZWdtZW50WzFdKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSdzIGEgcmVtYWluZGVyLCBqdXN0IGFkZCB3aGF0ZXZlciBpcyBsZWZ0XG5cbiAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICBrZXlzLnB1c2goJ1snICsga2V5LnNsaWNlKHNlZ21lbnQuaW5kZXgpICsgJ10nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VPYmplY3Qoa2V5cywgdmFsLCBvcHRpb25zKTtcbn07XG5cbnZhciBub3JtYWxpemVQYXJzZU9wdGlvbnMgPSBmdW5jdGlvbiBub3JtYWxpemVQYXJzZU9wdGlvbnMob3B0cykge1xuICAgIGlmICghb3B0cykge1xuICAgICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuZGVjb2RlciAhPT0gbnVsbCAmJiBvcHRzLmRlY29kZXIgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0cy5kZWNvZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0RlY29kZXIgaGFzIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRzLmNoYXJzZXQgIT09ICd1bmRlZmluZWQnICYmIG9wdHMuY2hhcnNldCAhPT0gJ3V0Zi04JyAmJiBvcHRzLmNoYXJzZXQgIT09ICdpc28tODg1OS0xJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBjaGFyc2V0IG9wdGlvbiBtdXN0IGJlIGVpdGhlciB1dGYtOCwgaXNvLTg4NTktMSwgb3IgdW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIHZhciBjaGFyc2V0ID0gdHlwZW9mIG9wdHMuY2hhcnNldCA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0cy5jaGFyc2V0IDogb3B0cy5jaGFyc2V0O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWxsb3dEb3RzOiB0eXBlb2Ygb3B0cy5hbGxvd0RvdHMgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdHMuYWxsb3dEb3RzIDogISFvcHRzLmFsbG93RG90cyxcbiAgICAgICAgYWxsb3dQcm90b3R5cGVzOiB0eXBlb2Ygb3B0cy5hbGxvd1Byb3RvdHlwZXMgPT09ICdib29sZWFuJyA/IG9wdHMuYWxsb3dQcm90b3R5cGVzIDogZGVmYXVsdHMuYWxsb3dQcm90b3R5cGVzLFxuICAgICAgICBhcnJheUxpbWl0OiB0eXBlb2Ygb3B0cy5hcnJheUxpbWl0ID09PSAnbnVtYmVyJyA/IG9wdHMuYXJyYXlMaW1pdCA6IGRlZmF1bHRzLmFycmF5TGltaXQsXG4gICAgICAgIGNoYXJzZXQ6IGNoYXJzZXQsXG4gICAgICAgIGNoYXJzZXRTZW50aW5lbDogdHlwZW9mIG9wdHMuY2hhcnNldFNlbnRpbmVsID09PSAnYm9vbGVhbicgPyBvcHRzLmNoYXJzZXRTZW50aW5lbCA6IGRlZmF1bHRzLmNoYXJzZXRTZW50aW5lbCxcbiAgICAgICAgY29tbWE6IHR5cGVvZiBvcHRzLmNvbW1hID09PSAnYm9vbGVhbicgPyBvcHRzLmNvbW1hIDogZGVmYXVsdHMuY29tbWEsXG4gICAgICAgIGRlY29kZXI6IHR5cGVvZiBvcHRzLmRlY29kZXIgPT09ICdmdW5jdGlvbicgPyBvcHRzLmRlY29kZXIgOiBkZWZhdWx0cy5kZWNvZGVyLFxuICAgICAgICBkZWxpbWl0ZXI6IHR5cGVvZiBvcHRzLmRlbGltaXRlciA9PT0gJ3N0cmluZycgfHwgdXRpbHMuaXNSZWdFeHAob3B0cy5kZWxpbWl0ZXIpID8gb3B0cy5kZWxpbWl0ZXIgOiBkZWZhdWx0cy5kZWxpbWl0ZXIsXG4gICAgICAgIGRlcHRoOiB0eXBlb2Ygb3B0cy5kZXB0aCA9PT0gJ251bWJlcicgPyBvcHRzLmRlcHRoIDogZGVmYXVsdHMuZGVwdGgsXG4gICAgICAgIGlnbm9yZVF1ZXJ5UHJlZml4OiBvcHRzLmlnbm9yZVF1ZXJ5UHJlZml4ID09PSB0cnVlLFxuICAgICAgICBpbnRlcnByZXROdW1lcmljRW50aXRpZXM6IHR5cGVvZiBvcHRzLmludGVycHJldE51bWVyaWNFbnRpdGllcyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5pbnRlcnByZXROdW1lcmljRW50aXRpZXMgOiBkZWZhdWx0cy5pbnRlcnByZXROdW1lcmljRW50aXRpZXMsXG4gICAgICAgIHBhcmFtZXRlckxpbWl0OiB0eXBlb2Ygb3B0cy5wYXJhbWV0ZXJMaW1pdCA9PT0gJ251bWJlcicgPyBvcHRzLnBhcmFtZXRlckxpbWl0IDogZGVmYXVsdHMucGFyYW1ldGVyTGltaXQsXG4gICAgICAgIHBhcnNlQXJyYXlzOiBvcHRzLnBhcnNlQXJyYXlzICE9PSBmYWxzZSxcbiAgICAgICAgcGxhaW5PYmplY3RzOiB0eXBlb2Ygb3B0cy5wbGFpbk9iamVjdHMgPT09ICdib29sZWFuJyA/IG9wdHMucGxhaW5PYmplY3RzIDogZGVmYXVsdHMucGxhaW5PYmplY3RzLFxuICAgICAgICBzdHJpY3ROdWxsSGFuZGxpbmc6IHR5cGVvZiBvcHRzLnN0cmljdE51bGxIYW5kbGluZyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5zdHJpY3ROdWxsSGFuZGxpbmcgOiBkZWZhdWx0cy5zdHJpY3ROdWxsSGFuZGxpbmdcbiAgICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RyLCBvcHRzKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBub3JtYWxpemVQYXJzZU9wdGlvbnMob3B0cyk7XG5cbiAgICBpZiAoc3RyID09PSAnJyB8fCBzdHIgPT09IG51bGwgfHwgdHlwZW9mIHN0ciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuICAgIH1cblxuICAgIHZhciB0ZW1wT2JqID0gdHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgPyBwYXJzZVZhbHVlcyhzdHIsIG9wdGlvbnMpIDogc3RyO1xuICAgIHZhciBvYmogPSBvcHRpb25zLnBsYWluT2JqZWN0cyA/IE9iamVjdC5jcmVhdGUobnVsbCkgOiB7fTtcblxuICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUga2V5cyBhbmQgc2V0dXAgdGhlIG5ldyBvYmplY3RcblxuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModGVtcE9iaik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICB2YXIgbmV3T2JqID0gcGFyc2VLZXlzKGtleSwgdGVtcE9ialtrZXldLCBvcHRpb25zKTtcbiAgICAgICAgb2JqID0gdXRpbHMubWVyZ2Uob2JqLCBuZXdPYmosIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiB1dGlscy5jb21wYWN0KG9iaik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgZm9ybWF0cyA9IHJlcXVpcmUoJy4vZm9ybWF0cycpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBhcnJheVByZWZpeEdlbmVyYXRvcnMgPSB7XG4gICAgYnJhY2tldHM6IGZ1bmN0aW9uIGJyYWNrZXRzKHByZWZpeCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZ1bmMtbmFtZS1tYXRjaGluZ1xuICAgICAgICByZXR1cm4gcHJlZml4ICsgJ1tdJztcbiAgICB9LFxuICAgIGNvbW1hOiAnY29tbWEnLFxuICAgIGluZGljZXM6IGZ1bmN0aW9uIGluZGljZXMocHJlZml4LCBrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBmdW5jLW5hbWUtbWF0Y2hpbmdcbiAgICAgICAgcmV0dXJuIHByZWZpeCArICdbJyArIGtleSArICddJztcbiAgICB9LFxuICAgIHJlcGVhdDogZnVuY3Rpb24gcmVwZWF0KHByZWZpeCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZ1bmMtbmFtZS1tYXRjaGluZ1xuICAgICAgICByZXR1cm4gcHJlZml4O1xuICAgIH1cbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbnZhciBwdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2g7XG52YXIgcHVzaFRvQXJyYXkgPSBmdW5jdGlvbiAoYXJyLCB2YWx1ZU9yQXJyYXkpIHtcbiAgICBwdXNoLmFwcGx5KGFyciwgaXNBcnJheSh2YWx1ZU9yQXJyYXkpID8gdmFsdWVPckFycmF5IDogW3ZhbHVlT3JBcnJheV0pO1xufTtcblxudmFyIHRvSVNPID0gRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc7XG5cbnZhciBkZWZhdWx0cyA9IHtcbiAgICBhZGRRdWVyeVByZWZpeDogZmFsc2UsXG4gICAgYWxsb3dEb3RzOiBmYWxzZSxcbiAgICBjaGFyc2V0OiAndXRmLTgnLFxuICAgIGNoYXJzZXRTZW50aW5lbDogZmFsc2UsXG4gICAgZGVsaW1pdGVyOiAnJicsXG4gICAgZW5jb2RlOiB0cnVlLFxuICAgIGVuY29kZXI6IHV0aWxzLmVuY29kZSxcbiAgICBlbmNvZGVWYWx1ZXNPbmx5OiBmYWxzZSxcbiAgICBmb3JtYXR0ZXI6IGZvcm1hdHMuZm9ybWF0dGVyc1tmb3JtYXRzWydkZWZhdWx0J11dLFxuICAgIC8vIGRlcHJlY2F0ZWRcbiAgICBpbmRpY2VzOiBmYWxzZSxcbiAgICBzZXJpYWxpemVEYXRlOiBmdW5jdGlvbiBzZXJpYWxpemVEYXRlKGRhdGUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBmdW5jLW5hbWUtbWF0Y2hpbmdcbiAgICAgICAgcmV0dXJuIHRvSVNPLmNhbGwoZGF0ZSk7XG4gICAgfSxcbiAgICBza2lwTnVsbHM6IGZhbHNlLFxuICAgIHN0cmljdE51bGxIYW5kbGluZzogZmFsc2Vcbn07XG5cbnZhciBzdHJpbmdpZnkgPSBmdW5jdGlvbiBzdHJpbmdpZnkoIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG4gICAgb2JqZWN0LFxuICAgIHByZWZpeCxcbiAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgIHN0cmljdE51bGxIYW5kbGluZyxcbiAgICBza2lwTnVsbHMsXG4gICAgZW5jb2RlcixcbiAgICBmaWx0ZXIsXG4gICAgc29ydCxcbiAgICBhbGxvd0RvdHMsXG4gICAgc2VyaWFsaXplRGF0ZSxcbiAgICBmb3JtYXR0ZXIsXG4gICAgZW5jb2RlVmFsdWVzT25seSxcbiAgICBjaGFyc2V0XG4pIHtcbiAgICB2YXIgb2JqID0gb2JqZWN0O1xuICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG9iaiA9IGZpbHRlcihwcmVmaXgsIG9iaik7XG4gICAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIG9iaiA9IHNlcmlhbGl6ZURhdGUob2JqKTtcbiAgICB9IGVsc2UgaWYgKGdlbmVyYXRlQXJyYXlQcmVmaXggPT09ICdjb21tYScgJiYgaXNBcnJheShvYmopKSB7XG4gICAgICAgIG9iaiA9IG9iai5qb2luKCcsJyk7XG4gICAgfVxuXG4gICAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgICAgICBpZiAoc3RyaWN0TnVsbEhhbmRsaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gZW5jb2RlciAmJiAhZW5jb2RlVmFsdWVzT25seSA/IGVuY29kZXIocHJlZml4LCBkZWZhdWx0cy5lbmNvZGVyLCBjaGFyc2V0KSA6IHByZWZpeDtcbiAgICAgICAgfVxuXG4gICAgICAgIG9iaiA9ICcnO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJyB8fCB0eXBlb2Ygb2JqID09PSAnbnVtYmVyJyB8fCB0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicgfHwgdXRpbHMuaXNCdWZmZXIob2JqKSkge1xuICAgICAgICBpZiAoZW5jb2Rlcikge1xuICAgICAgICAgICAgdmFyIGtleVZhbHVlID0gZW5jb2RlVmFsdWVzT25seSA/IHByZWZpeCA6IGVuY29kZXIocHJlZml4LCBkZWZhdWx0cy5lbmNvZGVyLCBjaGFyc2V0KTtcbiAgICAgICAgICAgIHJldHVybiBbZm9ybWF0dGVyKGtleVZhbHVlKSArICc9JyArIGZvcm1hdHRlcihlbmNvZGVyKG9iaiwgZGVmYXVsdHMuZW5jb2RlciwgY2hhcnNldCkpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2Zvcm1hdHRlcihwcmVmaXgpICsgJz0nICsgZm9ybWF0dGVyKFN0cmluZyhvYmopKV07XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfVxuXG4gICAgdmFyIG9iaktleXM7XG4gICAgaWYgKGlzQXJyYXkoZmlsdGVyKSkge1xuICAgICAgICBvYmpLZXlzID0gZmlsdGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICAgICAgb2JqS2V5cyA9IHNvcnQgPyBrZXlzLnNvcnQoc29ydCkgOiBrZXlzO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqS2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIga2V5ID0gb2JqS2V5c1tpXTtcblxuICAgICAgICBpZiAoc2tpcE51bGxzICYmIG9ialtrZXldID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgIHB1c2hUb0FycmF5KHZhbHVlcywgc3RyaW5naWZ5KFxuICAgICAgICAgICAgICAgIG9ialtrZXldLFxuICAgICAgICAgICAgICAgIHR5cGVvZiBnZW5lcmF0ZUFycmF5UHJlZml4ID09PSAnZnVuY3Rpb24nID8gZ2VuZXJhdGVBcnJheVByZWZpeChwcmVmaXgsIGtleSkgOiBwcmVmaXgsXG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVBcnJheVByZWZpeCxcbiAgICAgICAgICAgICAgICBzdHJpY3ROdWxsSGFuZGxpbmcsXG4gICAgICAgICAgICAgICAgc2tpcE51bGxzLFxuICAgICAgICAgICAgICAgIGVuY29kZXIsXG4gICAgICAgICAgICAgICAgZmlsdGVyLFxuICAgICAgICAgICAgICAgIHNvcnQsXG4gICAgICAgICAgICAgICAgYWxsb3dEb3RzLFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZURhdGUsXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyLFxuICAgICAgICAgICAgICAgIGVuY29kZVZhbHVlc09ubHksXG4gICAgICAgICAgICAgICAgY2hhcnNldFxuICAgICAgICAgICAgKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwdXNoVG9BcnJheSh2YWx1ZXMsIHN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICBvYmpba2V5XSxcbiAgICAgICAgICAgICAgICBwcmVmaXggKyAoYWxsb3dEb3RzID8gJy4nICsga2V5IDogJ1snICsga2V5ICsgJ10nKSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgICAgICAgICAgICAgIHN0cmljdE51bGxIYW5kbGluZyxcbiAgICAgICAgICAgICAgICBza2lwTnVsbHMsXG4gICAgICAgICAgICAgICAgZW5jb2RlcixcbiAgICAgICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICAgICAgc29ydCxcbiAgICAgICAgICAgICAgICBhbGxvd0RvdHMsXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgZW5jb2RlVmFsdWVzT25seSxcbiAgICAgICAgICAgICAgICBjaGFyc2V0XG4gICAgICAgICAgICApKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZXM7XG59O1xuXG52YXIgbm9ybWFsaXplU3RyaW5naWZ5T3B0aW9ucyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZVN0cmluZ2lmeU9wdGlvbnMob3B0cykge1xuICAgIGlmICghb3B0cykge1xuICAgICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuZW5jb2RlciAhPT0gbnVsbCAmJiBvcHRzLmVuY29kZXIgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0cy5lbmNvZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0VuY29kZXIgaGFzIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgdmFyIGNoYXJzZXQgPSBvcHRzLmNoYXJzZXQgfHwgZGVmYXVsdHMuY2hhcnNldDtcbiAgICBpZiAodHlwZW9mIG9wdHMuY2hhcnNldCAhPT0gJ3VuZGVmaW5lZCcgJiYgb3B0cy5jaGFyc2V0ICE9PSAndXRmLTgnICYmIG9wdHMuY2hhcnNldCAhPT0gJ2lzby04ODU5LTEnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBjaGFyc2V0IG9wdGlvbiBtdXN0IGJlIGVpdGhlciB1dGYtOCwgaXNvLTg4NTktMSwgb3IgdW5kZWZpbmVkJyk7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdCA9IGZvcm1hdHNbJ2RlZmF1bHQnXTtcbiAgICBpZiAodHlwZW9mIG9wdHMuZm9ybWF0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpZiAoIWhhcy5jYWxsKGZvcm1hdHMuZm9ybWF0dGVycywgb3B0cy5mb3JtYXQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGZvcm1hdCBvcHRpb24gcHJvdmlkZWQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgZm9ybWF0ID0gb3B0cy5mb3JtYXQ7XG4gICAgfVxuICAgIHZhciBmb3JtYXR0ZXIgPSBmb3JtYXRzLmZvcm1hdHRlcnNbZm9ybWF0XTtcblxuICAgIHZhciBmaWx0ZXIgPSBkZWZhdWx0cy5maWx0ZXI7XG4gICAgaWYgKHR5cGVvZiBvcHRzLmZpbHRlciA9PT0gJ2Z1bmN0aW9uJyB8fCBpc0FycmF5KG9wdHMuZmlsdGVyKSkge1xuICAgICAgICBmaWx0ZXIgPSBvcHRzLmZpbHRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBhZGRRdWVyeVByZWZpeDogdHlwZW9mIG9wdHMuYWRkUXVlcnlQcmVmaXggPT09ICdib29sZWFuJyA/IG9wdHMuYWRkUXVlcnlQcmVmaXggOiBkZWZhdWx0cy5hZGRRdWVyeVByZWZpeCxcbiAgICAgICAgYWxsb3dEb3RzOiB0eXBlb2Ygb3B0cy5hbGxvd0RvdHMgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdHMuYWxsb3dEb3RzIDogISFvcHRzLmFsbG93RG90cyxcbiAgICAgICAgY2hhcnNldDogY2hhcnNldCxcbiAgICAgICAgY2hhcnNldFNlbnRpbmVsOiB0eXBlb2Ygb3B0cy5jaGFyc2V0U2VudGluZWwgPT09ICdib29sZWFuJyA/IG9wdHMuY2hhcnNldFNlbnRpbmVsIDogZGVmYXVsdHMuY2hhcnNldFNlbnRpbmVsLFxuICAgICAgICBkZWxpbWl0ZXI6IHR5cGVvZiBvcHRzLmRlbGltaXRlciA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0cy5kZWxpbWl0ZXIgOiBvcHRzLmRlbGltaXRlcixcbiAgICAgICAgZW5jb2RlOiB0eXBlb2Ygb3B0cy5lbmNvZGUgPT09ICdib29sZWFuJyA/IG9wdHMuZW5jb2RlIDogZGVmYXVsdHMuZW5jb2RlLFxuICAgICAgICBlbmNvZGVyOiB0eXBlb2Ygb3B0cy5lbmNvZGVyID09PSAnZnVuY3Rpb24nID8gb3B0cy5lbmNvZGVyIDogZGVmYXVsdHMuZW5jb2RlcixcbiAgICAgICAgZW5jb2RlVmFsdWVzT25seTogdHlwZW9mIG9wdHMuZW5jb2RlVmFsdWVzT25seSA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5lbmNvZGVWYWx1ZXNPbmx5IDogZGVmYXVsdHMuZW5jb2RlVmFsdWVzT25seSxcbiAgICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICAgIGZvcm1hdHRlcjogZm9ybWF0dGVyLFxuICAgICAgICBzZXJpYWxpemVEYXRlOiB0eXBlb2Ygb3B0cy5zZXJpYWxpemVEYXRlID09PSAnZnVuY3Rpb24nID8gb3B0cy5zZXJpYWxpemVEYXRlIDogZGVmYXVsdHMuc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgc2tpcE51bGxzOiB0eXBlb2Ygb3B0cy5za2lwTnVsbHMgPT09ICdib29sZWFuJyA/IG9wdHMuc2tpcE51bGxzIDogZGVmYXVsdHMuc2tpcE51bGxzLFxuICAgICAgICBzb3J0OiB0eXBlb2Ygb3B0cy5zb3J0ID09PSAnZnVuY3Rpb24nID8gb3B0cy5zb3J0IDogbnVsbCxcbiAgICAgICAgc3RyaWN0TnVsbEhhbmRsaW5nOiB0eXBlb2Ygb3B0cy5zdHJpY3ROdWxsSGFuZGxpbmcgPT09ICdib29sZWFuJyA/IG9wdHMuc3RyaWN0TnVsbEhhbmRsaW5nIDogZGVmYXVsdHMuc3RyaWN0TnVsbEhhbmRsaW5nXG4gICAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgb3B0cykge1xuICAgIHZhciBvYmogPSBvYmplY3Q7XG4gICAgdmFyIG9wdGlvbnMgPSBub3JtYWxpemVTdHJpbmdpZnlPcHRpb25zKG9wdHMpO1xuXG4gICAgdmFyIG9iaktleXM7XG4gICAgdmFyIGZpbHRlcjtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5maWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgICAgIG9iaiA9IGZpbHRlcignJywgb2JqKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob3B0aW9ucy5maWx0ZXIpKSB7XG4gICAgICAgIGZpbHRlciA9IG9wdGlvbnMuZmlsdGVyO1xuICAgICAgICBvYmpLZXlzID0gZmlsdGVyO1xuICAgIH1cblxuICAgIHZhciBrZXlzID0gW107XG5cbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICB2YXIgYXJyYXlGb3JtYXQ7XG4gICAgaWYgKG9wdHMgJiYgb3B0cy5hcnJheUZvcm1hdCBpbiBhcnJheVByZWZpeEdlbmVyYXRvcnMpIHtcbiAgICAgICAgYXJyYXlGb3JtYXQgPSBvcHRzLmFycmF5Rm9ybWF0O1xuICAgIH0gZWxzZSBpZiAob3B0cyAmJiAnaW5kaWNlcycgaW4gb3B0cykge1xuICAgICAgICBhcnJheUZvcm1hdCA9IG9wdHMuaW5kaWNlcyA/ICdpbmRpY2VzJyA6ICdyZXBlYXQnO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5Rm9ybWF0ID0gJ2luZGljZXMnO1xuICAgIH1cblxuICAgIHZhciBnZW5lcmF0ZUFycmF5UHJlZml4ID0gYXJyYXlQcmVmaXhHZW5lcmF0b3JzW2FycmF5Rm9ybWF0XTtcblxuICAgIGlmICghb2JqS2V5cykge1xuICAgICAgICBvYmpLZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zb3J0KSB7XG4gICAgICAgIG9iaktleXMuc29ydChvcHRpb25zLnNvcnQpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqS2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIga2V5ID0gb2JqS2V5c1tpXTtcblxuICAgICAgICBpZiAob3B0aW9ucy5za2lwTnVsbHMgJiYgb2JqW2tleV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHB1c2hUb0FycmF5KGtleXMsIHN0cmluZ2lmeShcbiAgICAgICAgICAgIG9ialtrZXldLFxuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgZ2VuZXJhdGVBcnJheVByZWZpeCxcbiAgICAgICAgICAgIG9wdGlvbnMuc3RyaWN0TnVsbEhhbmRsaW5nLFxuICAgICAgICAgICAgb3B0aW9ucy5za2lwTnVsbHMsXG4gICAgICAgICAgICBvcHRpb25zLmVuY29kZSA/IG9wdGlvbnMuZW5jb2RlciA6IG51bGwsXG4gICAgICAgICAgICBvcHRpb25zLmZpbHRlcixcbiAgICAgICAgICAgIG9wdGlvbnMuc29ydCxcbiAgICAgICAgICAgIG9wdGlvbnMuYWxsb3dEb3RzLFxuICAgICAgICAgICAgb3B0aW9ucy5zZXJpYWxpemVEYXRlLFxuICAgICAgICAgICAgb3B0aW9ucy5mb3JtYXR0ZXIsXG4gICAgICAgICAgICBvcHRpb25zLmVuY29kZVZhbHVlc09ubHksXG4gICAgICAgICAgICBvcHRpb25zLmNoYXJzZXRcbiAgICAgICAgKSk7XG4gICAgfVxuXG4gICAgdmFyIGpvaW5lZCA9IGtleXMuam9pbihvcHRpb25zLmRlbGltaXRlcik7XG4gICAgdmFyIHByZWZpeCA9IG9wdGlvbnMuYWRkUXVlcnlQcmVmaXggPT09IHRydWUgPyAnPycgOiAnJztcblxuICAgIGlmIChvcHRpb25zLmNoYXJzZXRTZW50aW5lbCkge1xuICAgICAgICBpZiAob3B0aW9ucy5jaGFyc2V0ID09PSAnaXNvLTg4NTktMScpIHtcbiAgICAgICAgICAgIC8vIGVuY29kZVVSSUNvbXBvbmVudCgnJiMxMDAwMzsnKSwgdGhlIFwibnVtZXJpYyBlbnRpdHlcIiByZXByZXNlbnRhdGlvbiBvZiBhIGNoZWNrbWFya1xuICAgICAgICAgICAgcHJlZml4ICs9ICd1dGY4PSUyNiUyMzEwMDAzJTNCJic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBlbmNvZGVVUklDb21wb25lbnQoJ+KckycpXG4gICAgICAgICAgICBwcmVmaXggKz0gJ3V0Zjg9JUUyJTlDJTkzJic7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gam9pbmVkLmxlbmd0aCA+IDAgPyBwcmVmaXggKyBqb2luZWQgOiAnJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG52YXIgaGV4VGFibGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgICAgICAgYXJyYXkucHVzaCgnJScgKyAoKGkgPCAxNiA/ICcwJyA6ICcnKSArIGkudG9TdHJpbmcoMTYpKS50b1VwcGVyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG59KCkpO1xuXG52YXIgY29tcGFjdFF1ZXVlID0gZnVuY3Rpb24gY29tcGFjdFF1ZXVlKHF1ZXVlKSB7XG4gICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdmFyIGl0ZW0gPSBxdWV1ZS5wb3AoKTtcbiAgICAgICAgdmFyIG9iaiA9IGl0ZW0ub2JqW2l0ZW0ucHJvcF07XG5cbiAgICAgICAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgICAgICAgICAgdmFyIGNvbXBhY3RlZCA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG9iai5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqW2pdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wYWN0ZWQucHVzaChvYmpbal0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXRlbS5vYmpbaXRlbS5wcm9wXSA9IGNvbXBhY3RlZDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbnZhciBhcnJheVRvT2JqZWN0ID0gZnVuY3Rpb24gYXJyYXlUb09iamVjdChzb3VyY2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqID0gb3B0aW9ucyAmJiBvcHRpb25zLnBsYWluT2JqZWN0cyA/IE9iamVjdC5jcmVhdGUobnVsbCkgOiB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAodHlwZW9mIHNvdXJjZVtpXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIG9ialtpXSA9IHNvdXJjZVtpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG59O1xuXG52YXIgbWVyZ2UgPSBmdW5jdGlvbiBtZXJnZSh0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucykge1xuICAgIGlmICghc291cmNlKSB7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHRhcmdldCkpIHtcbiAgICAgICAgICAgIHRhcmdldC5wdXNoKHNvdXJjZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ICYmIHR5cGVvZiB0YXJnZXQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAoKG9wdGlvbnMgJiYgKG9wdGlvbnMucGxhaW5PYmplY3RzIHx8IG9wdGlvbnMuYWxsb3dQcm90b3R5cGVzKSkgfHwgIWhhcy5jYWxsKE9iamVjdC5wcm90b3R5cGUsIHNvdXJjZSkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbc291cmNlXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW3RhcmdldCwgc291cmNlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXQgfHwgdHlwZW9mIHRhcmdldCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIFt0YXJnZXRdLmNvbmNhdChzb3VyY2UpO1xuICAgIH1cblxuICAgIHZhciBtZXJnZVRhcmdldCA9IHRhcmdldDtcbiAgICBpZiAoaXNBcnJheSh0YXJnZXQpICYmICFpc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgbWVyZ2VUYXJnZXQgPSBhcnJheVRvT2JqZWN0KHRhcmdldCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKGlzQXJyYXkodGFyZ2V0KSAmJiBpc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgc291cmNlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGkpIHtcbiAgICAgICAgICAgIGlmIChoYXMuY2FsbCh0YXJnZXQsIGkpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRhcmdldEl0ZW0gPSB0YXJnZXRbaV07XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldEl0ZW0gJiYgdHlwZW9mIHRhcmdldEl0ZW0gPT09ICdvYmplY3QnICYmIGl0ZW0gJiYgdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtpXSA9IG1lcmdlKHRhcmdldEl0ZW0sIGl0ZW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W2ldID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHNvdXJjZSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBzb3VyY2Vba2V5XTtcblxuICAgICAgICBpZiAoaGFzLmNhbGwoYWNjLCBrZXkpKSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IG1lcmdlKGFjY1trZXldLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbWVyZ2VUYXJnZXQpO1xufTtcblxudmFyIGFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnblNpbmdsZVNvdXJjZSh0YXJnZXQsIHNvdXJjZSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhzb3VyY2UpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBrZXkpIHtcbiAgICAgICAgYWNjW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB0YXJnZXQpO1xufTtcblxudmFyIGRlY29kZSA9IGZ1bmN0aW9uIChzdHIsIGRlY29kZXIsIGNoYXJzZXQpIHtcbiAgICB2YXIgc3RyV2l0aG91dFBsdXMgPSBzdHIucmVwbGFjZSgvXFwrL2csICcgJyk7XG4gICAgaWYgKGNoYXJzZXQgPT09ICdpc28tODg1OS0xJykge1xuICAgICAgICAvLyB1bmVzY2FwZSBuZXZlciB0aHJvd3MsIG5vIHRyeS4uLmNhdGNoIG5lZWRlZDpcbiAgICAgICAgcmV0dXJuIHN0cldpdGhvdXRQbHVzLnJlcGxhY2UoLyVbMC05YS1mXXsyfS9naSwgdW5lc2NhcGUpO1xuICAgIH1cbiAgICAvLyB1dGYtOFxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoc3RyV2l0aG91dFBsdXMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHN0cldpdGhvdXRQbHVzO1xuICAgIH1cbn07XG5cbnZhciBlbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoc3RyLCBkZWZhdWx0RW5jb2RlciwgY2hhcnNldCkge1xuICAgIC8vIFRoaXMgY29kZSB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5IEJyaWFuIFdoaXRlIChtc2NkZXgpIGZvciB0aGUgaW8uanMgY29yZSBxdWVyeXN0cmluZyBsaWJyYXJ5LlxuICAgIC8vIEl0IGhhcyBiZWVuIGFkYXB0ZWQgaGVyZSBmb3Igc3RyaWN0ZXIgYWRoZXJlbmNlIHRvIFJGQyAzOTg2XG4gICAgaWYgKHN0ci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG5cbiAgICB2YXIgc3RyaW5nID0gdHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgPyBzdHIgOiBTdHJpbmcoc3RyKTtcblxuICAgIGlmIChjaGFyc2V0ID09PSAnaXNvLTg4NTktMScpIHtcbiAgICAgICAgcmV0dXJuIGVzY2FwZShzdHJpbmcpLnJlcGxhY2UoLyV1WzAtOWEtZl17NH0vZ2ksIGZ1bmN0aW9uICgkMCkge1xuICAgICAgICAgICAgcmV0dXJuICclMjYlMjMnICsgcGFyc2VJbnQoJDAuc2xpY2UoMiksIDE2KSArICclM0InO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgb3V0ID0gJyc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGMgPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjID09PSAweDJEIC8vIC1cbiAgICAgICAgICAgIHx8IGMgPT09IDB4MkUgLy8gLlxuICAgICAgICAgICAgfHwgYyA9PT0gMHg1RiAvLyBfXG4gICAgICAgICAgICB8fCBjID09PSAweDdFIC8vIH5cbiAgICAgICAgICAgIHx8IChjID49IDB4MzAgJiYgYyA8PSAweDM5KSAvLyAwLTlcbiAgICAgICAgICAgIHx8IChjID49IDB4NDEgJiYgYyA8PSAweDVBKSAvLyBhLXpcbiAgICAgICAgICAgIHx8IChjID49IDB4NjEgJiYgYyA8PSAweDdBKSAvLyBBLVpcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBvdXQgKz0gc3RyaW5nLmNoYXJBdChpKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgPCAweDgwKSB7XG4gICAgICAgICAgICBvdXQgPSBvdXQgKyBoZXhUYWJsZVtjXTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgPCAweDgwMCkge1xuICAgICAgICAgICAgb3V0ID0gb3V0ICsgKGhleFRhYmxlWzB4QzAgfCAoYyA+PiA2KV0gKyBoZXhUYWJsZVsweDgwIHwgKGMgJiAweDNGKV0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYyA8IDB4RDgwMCB8fCBjID49IDB4RTAwMCkge1xuICAgICAgICAgICAgb3V0ID0gb3V0ICsgKGhleFRhYmxlWzB4RTAgfCAoYyA+PiAxMildICsgaGV4VGFibGVbMHg4MCB8ICgoYyA+PiA2KSAmIDB4M0YpXSArIGhleFRhYmxlWzB4ODAgfCAoYyAmIDB4M0YpXSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGkgKz0gMTtcbiAgICAgICAgYyA9IDB4MTAwMDAgKyAoKChjICYgMHgzRkYpIDw8IDEwKSB8IChzdHJpbmcuY2hhckNvZGVBdChpKSAmIDB4M0ZGKSk7XG4gICAgICAgIG91dCArPSBoZXhUYWJsZVsweEYwIHwgKGMgPj4gMTgpXVxuICAgICAgICAgICAgKyBoZXhUYWJsZVsweDgwIHwgKChjID4+IDEyKSAmIDB4M0YpXVxuICAgICAgICAgICAgKyBoZXhUYWJsZVsweDgwIHwgKChjID4+IDYpICYgMHgzRildXG4gICAgICAgICAgICArIGhleFRhYmxlWzB4ODAgfCAoYyAmIDB4M0YpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxudmFyIGNvbXBhY3QgPSBmdW5jdGlvbiBjb21wYWN0KHZhbHVlKSB7XG4gICAgdmFyIHF1ZXVlID0gW3sgb2JqOiB7IG86IHZhbHVlIH0sIHByb3A6ICdvJyB9XTtcbiAgICB2YXIgcmVmcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgaXRlbSA9IHF1ZXVlW2ldO1xuICAgICAgICB2YXIgb2JqID0gaXRlbS5vYmpbaXRlbS5wcm9wXTtcblxuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwga2V5cy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbal07XG4gICAgICAgICAgICB2YXIgdmFsID0gb2JqW2tleV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsICE9PSBudWxsICYmIHJlZnMuaW5kZXhPZih2YWwpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHF1ZXVlLnB1c2goeyBvYmo6IG9iaiwgcHJvcDoga2V5IH0pO1xuICAgICAgICAgICAgICAgIHJlZnMucHVzaCh2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29tcGFjdFF1ZXVlKHF1ZXVlKTtcblxuICAgIHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBpc1JlZ0V4cCA9IGZ1bmN0aW9uIGlzUmVnRXhwKG9iaikge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59O1xuXG52YXIgaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlcihvYmopIHtcbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICEhKG9iai5jb25zdHJ1Y3RvciAmJiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iaikpO1xufTtcblxudmFyIGNvbWJpbmUgPSBmdW5jdGlvbiBjb21iaW5lKGEsIGIpIHtcbiAgICByZXR1cm4gW10uY29uY2F0KGEsIGIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYXJyYXlUb09iamVjdDogYXJyYXlUb09iamVjdCxcbiAgICBhc3NpZ246IGFzc2lnbixcbiAgICBjb21iaW5lOiBjb21iaW5lLFxuICAgIGNvbXBhY3Q6IGNvbXBhY3QsXG4gICAgZGVjb2RlOiBkZWNvZGUsXG4gICAgZW5jb2RlOiBlbmNvZGUsXG4gICAgaXNCdWZmZXI6IGlzQnVmZmVyLFxuICAgIGlzUmVnRXhwOiBpc1JlZ0V4cCxcbiAgICBtZXJnZTogbWVyZ2Vcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xudmFyIEVTID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvZXM1Jyk7XG52YXIgcmVwbGFjZSA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpO1xuXG52YXIgbGVmdFdoaXRlc3BhY2UgPSAvXltcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkZdKy87XG52YXIgcmlnaHRXaGl0ZXNwYWNlID0gL1tcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkZdKyQvO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRyaW0oKSB7XG5cdHZhciBTID0gRVMuVG9TdHJpbmcoRVMuQ2hlY2tPYmplY3RDb2VyY2libGUodGhpcykpO1xuXHRyZXR1cm4gcmVwbGFjZShyZXBsYWNlKFMsIGxlZnRXaGl0ZXNwYWNlLCAnJyksIHJpZ2h0V2hpdGVzcGFjZSwgJycpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCdmdW5jdGlvbi1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kVHJpbSA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBnZXRQb2x5ZmlsbCgpKTtcblxuZGVmaW5lKGJvdW5kVHJpbSwge1xuXHRnZXRQb2x5ZmlsbDogZ2V0UG9seWZpbGwsXG5cdGltcGxlbWVudGF0aW9uOiBpbXBsZW1lbnRhdGlvbixcblx0c2hpbTogc2hpbVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gYm91bmRUcmltO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciB6ZXJvV2lkdGhTcGFjZSA9ICdcXHUyMDBiJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKFN0cmluZy5wcm90b3R5cGUudHJpbSAmJiB6ZXJvV2lkdGhTcGFjZS50cmltKCkgPT09IHplcm9XaWR0aFNwYWNlKSB7XG5cdFx0cmV0dXJuIFN0cmluZy5wcm90b3R5cGUudHJpbTtcblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaGltU3RyaW5nVHJpbSgpIHtcblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0ZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIHsgdHJpbTogcG9seWZpbGwgfSwgeyB0cmltOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTdHJpbmcucHJvdG90eXBlLnRyaW0gIT09IHBvbHlmaWxsOyB9IH0pO1xuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIiwiLypcblx0TUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcblx0QXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cblxudmFyIHN0eWxlc0luRG9tID0ge307XG5cbnZhclx0bWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuXHR2YXIgbWVtbztcblxuXHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdGlmICh0eXBlb2YgbWVtbyA9PT0gXCJ1bmRlZmluZWRcIikgbWVtbyA9IGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0cmV0dXJuIG1lbW87XG5cdH07XG59O1xuXG52YXIgaXNPbGRJRSA9IG1lbW9pemUoZnVuY3Rpb24gKCkge1xuXHQvLyBUZXN0IGZvciBJRSA8PSA5IGFzIHByb3Bvc2VkIGJ5IEJyb3dzZXJoYWNrc1xuXHQvLyBAc2VlIGh0dHA6Ly9icm93c2VyaGFja3MuY29tLyNoYWNrLWU3MWQ4NjkyZjY1MzM0MTczZmVlNzE1YzIyMmNiODA1XG5cdC8vIFRlc3RzIGZvciBleGlzdGVuY2Ugb2Ygc3RhbmRhcmQgZ2xvYmFscyBpcyB0byBhbGxvdyBzdHlsZS1sb2FkZXJcblx0Ly8gdG8gb3BlcmF0ZSBjb3JyZWN0bHkgaW50byBub24tc3RhbmRhcmQgZW52aXJvbm1lbnRzXG5cdC8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2stY29udHJpYi9zdHlsZS1sb2FkZXIvaXNzdWVzLzE3N1xuXHRyZXR1cm4gd2luZG93ICYmIGRvY3VtZW50ICYmIGRvY3VtZW50LmFsbCAmJiAhd2luZG93LmF0b2I7XG59KTtcblxudmFyIGdldFRhcmdldCA9IGZ1bmN0aW9uICh0YXJnZXQsIHBhcmVudCkge1xuICBpZiAocGFyZW50KXtcbiAgICByZXR1cm4gcGFyZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTtcbiAgfVxuICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXQpO1xufTtcblxudmFyIGdldEVsZW1lbnQgPSAoZnVuY3Rpb24gKGZuKSB7XG5cdHZhciBtZW1vID0ge307XG5cblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldCwgcGFyZW50KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgcGFzc2luZyBmdW5jdGlvbiBpbiBvcHRpb25zLCB0aGVuIHVzZSBpdCBmb3IgcmVzb2x2ZSBcImhlYWRcIiBlbGVtZW50LlxuICAgICAgICAgICAgICAgIC8vIFVzZWZ1bCBmb3IgU2hhZG93IFJvb3Qgc3R5bGUgaS5lXG4gICAgICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgICAgIC8vICAgaW5zZXJ0SW50bzogZnVuY3Rpb24gKCkgeyByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNmb29cIikuc2hhZG93Um9vdCB9XG4gICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVtb1t0YXJnZXRdID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR2YXIgc3R5bGVUYXJnZXQgPSBnZXRUYXJnZXQuY2FsbCh0aGlzLCB0YXJnZXQsIHBhcmVudCk7XG5cdFx0XHQvLyBTcGVjaWFsIGNhc2UgdG8gcmV0dXJuIGhlYWQgb2YgaWZyYW1lIGluc3RlYWQgb2YgaWZyYW1lIGl0c2VsZlxuXHRcdFx0aWYgKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCAmJiBzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG5cdFx0XHRcdFx0Ly8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcblx0XHRcdFx0XHRzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuXHRcdFx0XHR9IGNhdGNoKGUpIHtcblx0XHRcdFx0XHRzdHlsZVRhcmdldCA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuXHRcdH1cblx0XHRyZXR1cm4gbWVtb1t0YXJnZXRdXG5cdH07XG59KSgpO1xuXG52YXIgc2luZ2xldG9uID0gbnVsbDtcbnZhclx0c2luZ2xldG9uQ291bnRlciA9IDA7XG52YXJcdHN0eWxlc0luc2VydGVkQXRUb3AgPSBbXTtcblxudmFyXHRmaXhVcmxzID0gcmVxdWlyZShcIi4vdXJsc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihsaXN0LCBvcHRpb25zKSB7XG5cdGlmICh0eXBlb2YgREVCVUcgIT09IFwidW5kZWZpbmVkXCIgJiYgREVCVUcpIHtcblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgc3R5bGUtbG9hZGVyIGNhbm5vdCBiZSB1c2VkIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnRcIik7XG5cdH1cblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRvcHRpb25zLmF0dHJzID0gdHlwZW9mIG9wdGlvbnMuYXR0cnMgPT09IFwib2JqZWN0XCIgPyBvcHRpb25zLmF0dHJzIDoge307XG5cblx0Ly8gRm9yY2Ugc2luZ2xlLXRhZyBzb2x1dGlvbiBvbiBJRTYtOSwgd2hpY2ggaGFzIGEgaGFyZCBsaW1pdCBvbiB0aGUgIyBvZiA8c3R5bGU+XG5cdC8vIHRhZ3MgaXQgd2lsbCBhbGxvdyBvbiBhIHBhZ2Vcblx0aWYgKCFvcHRpb25zLnNpbmdsZXRvbiAmJiB0eXBlb2Ygb3B0aW9ucy5zaW5nbGV0b24gIT09IFwiYm9vbGVhblwiKSBvcHRpb25zLnNpbmdsZXRvbiA9IGlzT2xkSUUoKTtcblxuXHQvLyBCeSBkZWZhdWx0LCBhZGQgPHN0eWxlPiB0YWdzIHRvIHRoZSA8aGVhZD4gZWxlbWVudFxuICAgICAgICBpZiAoIW9wdGlvbnMuaW5zZXJ0SW50bykgb3B0aW9ucy5pbnNlcnRJbnRvID0gXCJoZWFkXCI7XG5cblx0Ly8gQnkgZGVmYXVsdCwgYWRkIDxzdHlsZT4gdGFncyB0byB0aGUgYm90dG9tIG9mIHRoZSB0YXJnZXRcblx0aWYgKCFvcHRpb25zLmluc2VydEF0KSBvcHRpb25zLmluc2VydEF0ID0gXCJib3R0b21cIjtcblxuXHR2YXIgc3R5bGVzID0gbGlzdFRvU3R5bGVzKGxpc3QsIG9wdGlvbnMpO1xuXG5cdGFkZFN0eWxlc1RvRG9tKHN0eWxlcywgb3B0aW9ucyk7XG5cblx0cmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZSAobmV3TGlzdCkge1xuXHRcdHZhciBtYXlSZW1vdmUgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaXRlbSA9IHN0eWxlc1tpXTtcblx0XHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuXG5cdFx0XHRkb21TdHlsZS5yZWZzLS07XG5cdFx0XHRtYXlSZW1vdmUucHVzaChkb21TdHlsZSk7XG5cdFx0fVxuXG5cdFx0aWYobmV3TGlzdCkge1xuXHRcdFx0dmFyIG5ld1N0eWxlcyA9IGxpc3RUb1N0eWxlcyhuZXdMaXN0LCBvcHRpb25zKTtcblx0XHRcdGFkZFN0eWxlc1RvRG9tKG5ld1N0eWxlcywgb3B0aW9ucyk7XG5cdFx0fVxuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtYXlSZW1vdmUubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBkb21TdHlsZSA9IG1heVJlbW92ZVtpXTtcblxuXHRcdFx0aWYoZG9tU3R5bGUucmVmcyA9PT0gMCkge1xuXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSBkb21TdHlsZS5wYXJ0c1tqXSgpO1xuXG5cdFx0XHRcdGRlbGV0ZSBzdHlsZXNJbkRvbVtkb21TdHlsZS5pZF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufTtcblxuZnVuY3Rpb24gYWRkU3R5bGVzVG9Eb20gKHN0eWxlcywgb3B0aW9ucykge1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBpdGVtID0gc3R5bGVzW2ldO1xuXHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuXG5cdFx0aWYoZG9tU3R5bGUpIHtcblx0XHRcdGRvbVN0eWxlLnJlZnMrKztcblxuXHRcdFx0Zm9yKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGRvbVN0eWxlLnBhcnRzW2pdKGl0ZW0ucGFydHNbal0pO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IoOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRkb21TdHlsZS5wYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0sIG9wdGlvbnMpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIHBhcnRzID0gW107XG5cblx0XHRcdGZvcih2YXIgaiA9IDA7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdHBhcnRzLnB1c2goYWRkU3R5bGUoaXRlbS5wYXJ0c1tqXSwgb3B0aW9ucykpO1xuXHRcdFx0fVxuXG5cdFx0XHRzdHlsZXNJbkRvbVtpdGVtLmlkXSA9IHtpZDogaXRlbS5pZCwgcmVmczogMSwgcGFydHM6IHBhcnRzfTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gbGlzdFRvU3R5bGVzIChsaXN0LCBvcHRpb25zKSB7XG5cdHZhciBzdHlsZXMgPSBbXTtcblx0dmFyIG5ld1N0eWxlcyA9IHt9O1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBpdGVtID0gbGlzdFtpXTtcblx0XHR2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcblx0XHR2YXIgY3NzID0gaXRlbVsxXTtcblx0XHR2YXIgbWVkaWEgPSBpdGVtWzJdO1xuXHRcdHZhciBzb3VyY2VNYXAgPSBpdGVtWzNdO1xuXHRcdHZhciBwYXJ0ID0ge2NzczogY3NzLCBtZWRpYTogbWVkaWEsIHNvdXJjZU1hcDogc291cmNlTWFwfTtcblxuXHRcdGlmKCFuZXdTdHlsZXNbaWRdKSBzdHlsZXMucHVzaChuZXdTdHlsZXNbaWRdID0ge2lkOiBpZCwgcGFydHM6IFtwYXJ0XX0pO1xuXHRcdGVsc2UgbmV3U3R5bGVzW2lkXS5wYXJ0cy5wdXNoKHBhcnQpO1xuXHR9XG5cblx0cmV0dXJuIHN0eWxlcztcbn1cblxuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50IChvcHRpb25zLCBzdHlsZSkge1xuXHR2YXIgdGFyZ2V0ID0gZ2V0RWxlbWVudChvcHRpb25zLmluc2VydEludG8pXG5cblx0aWYgKCF0YXJnZXQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydEludG8nIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcblx0fVxuXG5cdHZhciBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcCA9IHN0eWxlc0luc2VydGVkQXRUb3Bbc3R5bGVzSW5zZXJ0ZWRBdFRvcC5sZW5ndGggLSAxXTtcblxuXHRpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJ0b3BcIikge1xuXHRcdGlmICghbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3ApIHtcblx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIHRhcmdldC5maXJzdENoaWxkKTtcblx0XHR9IGVsc2UgaWYgKGxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wLm5leHRTaWJsaW5nKSB7XG5cdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcC5uZXh0U2libGluZyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdFx0fVxuXHRcdHN0eWxlc0luc2VydGVkQXRUb3AucHVzaChzdHlsZSk7XG5cdH0gZWxzZSBpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJib3R0b21cIikge1xuXHRcdHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwib2JqZWN0XCIgJiYgb3B0aW9ucy5pbnNlcnRBdC5iZWZvcmUpIHtcblx0XHR2YXIgbmV4dFNpYmxpbmcgPSBnZXRFbGVtZW50KG9wdGlvbnMuaW5zZXJ0QXQuYmVmb3JlLCB0YXJnZXQpO1xuXHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIG5leHRTaWJsaW5nKTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJbU3R5bGUgTG9hZGVyXVxcblxcbiBJbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgJ2luc2VydEF0JyAoJ29wdGlvbnMuaW5zZXJ0QXQnKSBmb3VuZC5cXG4gTXVzdCBiZSAndG9wJywgJ2JvdHRvbScsIG9yIE9iamVjdC5cXG4gKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrLWNvbnRyaWIvc3R5bGUtbG9hZGVyI2luc2VydGF0KVxcblwiKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQgKHN0eWxlKSB7XG5cdGlmIChzdHlsZS5wYXJlbnROb2RlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cdHN0eWxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGUpO1xuXG5cdHZhciBpZHggPSBzdHlsZXNJbnNlcnRlZEF0VG9wLmluZGV4T2Yoc3R5bGUpO1xuXHRpZihpZHggPj0gMCkge1xuXHRcdHN0eWxlc0luc2VydGVkQXRUb3Auc3BsaWNlKGlkeCwgMSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50IChvcHRpb25zKSB7XG5cdHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcblxuXHRpZihvcHRpb25zLmF0dHJzLnR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdG9wdGlvbnMuYXR0cnMudHlwZSA9IFwidGV4dC9jc3NcIjtcblx0fVxuXG5cdGlmKG9wdGlvbnMuYXR0cnMubm9uY2UgPT09IHVuZGVmaW5lZCkge1xuXHRcdHZhciBub25jZSA9IGdldE5vbmNlKCk7XG5cdFx0aWYgKG5vbmNlKSB7XG5cdFx0XHRvcHRpb25zLmF0dHJzLm5vbmNlID0gbm9uY2U7XG5cdFx0fVxuXHR9XG5cblx0YWRkQXR0cnMoc3R5bGUsIG9wdGlvbnMuYXR0cnMpO1xuXHRpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucywgc3R5bGUpO1xuXG5cdHJldHVybiBzdHlsZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTGlua0VsZW1lbnQgKG9wdGlvbnMpIHtcblx0dmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcblxuXHRpZihvcHRpb25zLmF0dHJzLnR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdG9wdGlvbnMuYXR0cnMudHlwZSA9IFwidGV4dC9jc3NcIjtcblx0fVxuXHRvcHRpb25zLmF0dHJzLnJlbCA9IFwic3R5bGVzaGVldFwiO1xuXG5cdGFkZEF0dHJzKGxpbmssIG9wdGlvbnMuYXR0cnMpO1xuXHRpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucywgbGluayk7XG5cblx0cmV0dXJuIGxpbms7XG59XG5cbmZ1bmN0aW9uIGFkZEF0dHJzIChlbCwgYXR0cnMpIHtcblx0T2JqZWN0LmtleXMoYXR0cnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXHRcdGVsLnNldEF0dHJpYnV0ZShrZXksIGF0dHJzW2tleV0pO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0Tm9uY2UoKSB7XG5cdGlmICh0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRyZXR1cm4gX193ZWJwYWNrX25vbmNlX187XG59XG5cbmZ1bmN0aW9uIGFkZFN0eWxlIChvYmosIG9wdGlvbnMpIHtcblx0dmFyIHN0eWxlLCB1cGRhdGUsIHJlbW92ZSwgcmVzdWx0O1xuXG5cdC8vIElmIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHdhcyBkZWZpbmVkLCBydW4gaXQgb24gdGhlIGNzc1xuXHRpZiAob3B0aW9ucy50cmFuc2Zvcm0gJiYgb2JqLmNzcykge1xuXHQgICAgcmVzdWx0ID0gdHlwZW9mIG9wdGlvbnMudHJhbnNmb3JtID09PSAnZnVuY3Rpb24nXG5cdFx0ID8gb3B0aW9ucy50cmFuc2Zvcm0ob2JqLmNzcykgXG5cdFx0IDogb3B0aW9ucy50cmFuc2Zvcm0uZGVmYXVsdChvYmouY3NzKTtcblxuXHQgICAgaWYgKHJlc3VsdCkge1xuXHQgICAgXHQvLyBJZiB0cmFuc2Zvcm0gcmV0dXJucyBhIHZhbHVlLCB1c2UgdGhhdCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBjc3MuXG5cdCAgICBcdC8vIFRoaXMgYWxsb3dzIHJ1bm5pbmcgcnVudGltZSB0cmFuc2Zvcm1hdGlvbnMgb24gdGhlIGNzcy5cblx0ICAgIFx0b2JqLmNzcyA9IHJlc3VsdDtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdC8vIElmIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gcmV0dXJucyBhIGZhbHN5IHZhbHVlLCBkb24ndCBhZGQgdGhpcyBjc3MuXG5cdCAgICBcdC8vIFRoaXMgYWxsb3dzIGNvbmRpdGlvbmFsIGxvYWRpbmcgb2YgY3NzXG5cdCAgICBcdHJldHVybiBmdW5jdGlvbigpIHtcblx0ICAgIFx0XHQvLyBub29wXG5cdCAgICBcdH07XG5cdCAgICB9XG5cdH1cblxuXHRpZiAob3B0aW9ucy5zaW5nbGV0b24pIHtcblx0XHR2YXIgc3R5bGVJbmRleCA9IHNpbmdsZXRvbkNvdW50ZXIrKztcblxuXHRcdHN0eWxlID0gc2luZ2xldG9uIHx8IChzaW5nbGV0b24gPSBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykpO1xuXG5cdFx0dXBkYXRlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCBmYWxzZSk7XG5cdFx0cmVtb3ZlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCB0cnVlKTtcblxuXHR9IGVsc2UgaWYgKFxuXHRcdG9iai5zb3VyY2VNYXAgJiZcblx0XHR0eXBlb2YgVVJMID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgVVJMLmNyZWF0ZU9iamVjdFVSTCA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIFVSTC5yZXZva2VPYmplY3RVUkwgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBCbG9iID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiXG5cdCkge1xuXHRcdHN0eWxlID0gY3JlYXRlTGlua0VsZW1lbnQob3B0aW9ucyk7XG5cdFx0dXBkYXRlID0gdXBkYXRlTGluay5iaW5kKG51bGwsIHN0eWxlLCBvcHRpb25zKTtcblx0XHRyZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuXG5cdFx0XHRpZihzdHlsZS5ocmVmKSBVUkwucmV2b2tlT2JqZWN0VVJMKHN0eWxlLmhyZWYpO1xuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0c3R5bGUgPSBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG5cdFx0dXBkYXRlID0gYXBwbHlUb1RhZy5iaW5kKG51bGwsIHN0eWxlKTtcblx0XHRyZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuXHRcdH07XG5cdH1cblxuXHR1cGRhdGUob2JqKTtcblxuXHRyZXR1cm4gZnVuY3Rpb24gdXBkYXRlU3R5bGUgKG5ld09iaikge1xuXHRcdGlmIChuZXdPYmopIHtcblx0XHRcdGlmIChcblx0XHRcdFx0bmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJlxuXHRcdFx0XHRuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJlxuXHRcdFx0XHRuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR1cGRhdGUob2JqID0gbmV3T2JqKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVtb3ZlKCk7XG5cdFx0fVxuXHR9O1xufVxuXG52YXIgcmVwbGFjZVRleHQgPSAoZnVuY3Rpb24gKCkge1xuXHR2YXIgdGV4dFN0b3JlID0gW107XG5cblx0cmV0dXJuIGZ1bmN0aW9uIChpbmRleCwgcmVwbGFjZW1lbnQpIHtcblx0XHR0ZXh0U3RvcmVbaW5kZXhdID0gcmVwbGFjZW1lbnQ7XG5cblx0XHRyZXR1cm4gdGV4dFN0b3JlLmZpbHRlcihCb29sZWFuKS5qb2luKCdcXG4nKTtcblx0fTtcbn0pKCk7XG5cbmZ1bmN0aW9uIGFwcGx5VG9TaW5nbGV0b25UYWcgKHN0eWxlLCBpbmRleCwgcmVtb3ZlLCBvYmopIHtcblx0dmFyIGNzcyA9IHJlbW92ZSA/IFwiXCIgOiBvYmouY3NzO1xuXG5cdGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG5cdFx0c3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gcmVwbGFjZVRleHQoaW5kZXgsIGNzcyk7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIGNzc05vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpO1xuXHRcdHZhciBjaGlsZE5vZGVzID0gc3R5bGUuY2hpbGROb2RlcztcblxuXHRcdGlmIChjaGlsZE5vZGVzW2luZGV4XSkgc3R5bGUucmVtb3ZlQ2hpbGQoY2hpbGROb2Rlc1tpbmRleF0pO1xuXG5cdFx0aWYgKGNoaWxkTm9kZXMubGVuZ3RoKSB7XG5cdFx0XHRzdHlsZS5pbnNlcnRCZWZvcmUoY3NzTm9kZSwgY2hpbGROb2Rlc1tpbmRleF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdHlsZS5hcHBlbmRDaGlsZChjc3NOb2RlKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gYXBwbHlUb1RhZyAoc3R5bGUsIG9iaikge1xuXHR2YXIgY3NzID0gb2JqLmNzcztcblx0dmFyIG1lZGlhID0gb2JqLm1lZGlhO1xuXG5cdGlmKG1lZGlhKSB7XG5cdFx0c3R5bGUuc2V0QXR0cmlidXRlKFwibWVkaWFcIiwgbWVkaWEpXG5cdH1cblxuXHRpZihzdHlsZS5zdHlsZVNoZWV0KSB7XG5cdFx0c3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuXHR9IGVsc2Uge1xuXHRcdHdoaWxlKHN0eWxlLmZpcnN0Q2hpbGQpIHtcblx0XHRcdHN0eWxlLnJlbW92ZUNoaWxkKHN0eWxlLmZpcnN0Q2hpbGQpO1xuXHRcdH1cblxuXHRcdHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxpbmsgKGxpbmssIG9wdGlvbnMsIG9iaikge1xuXHR2YXIgY3NzID0gb2JqLmNzcztcblx0dmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG5cblx0Lypcblx0XHRJZiBjb252ZXJ0VG9BYnNvbHV0ZVVybHMgaXNuJ3QgZGVmaW5lZCwgYnV0IHNvdXJjZW1hcHMgYXJlIGVuYWJsZWRcblx0XHRhbmQgdGhlcmUgaXMgbm8gcHVibGljUGF0aCBkZWZpbmVkIHRoZW4gbGV0cyB0dXJuIGNvbnZlcnRUb0Fic29sdXRlVXJsc1xuXHRcdG9uIGJ5IGRlZmF1bHQuICBPdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgY29udmVydFRvQWJzb2x1dGVVcmxzIG9wdGlvblxuXHRcdGRpcmVjdGx5XG5cdCovXG5cdHZhciBhdXRvRml4VXJscyA9IG9wdGlvbnMuY29udmVydFRvQWJzb2x1dGVVcmxzID09PSB1bmRlZmluZWQgJiYgc291cmNlTWFwO1xuXG5cdGlmIChvcHRpb25zLmNvbnZlcnRUb0Fic29sdXRlVXJscyB8fCBhdXRvRml4VXJscykge1xuXHRcdGNzcyA9IGZpeFVybHMoY3NzKTtcblx0fVxuXG5cdGlmIChzb3VyY2VNYXApIHtcblx0XHQvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNjYwMzg3NVxuXHRcdGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIgKyBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpICsgXCIgKi9cIjtcblx0fVxuXG5cdHZhciBibG9iID0gbmV3IEJsb2IoW2Nzc10sIHsgdHlwZTogXCJ0ZXh0L2Nzc1wiIH0pO1xuXG5cdHZhciBvbGRTcmMgPSBsaW5rLmhyZWY7XG5cblx0bGluay5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblxuXHRpZihvbGRTcmMpIFVSTC5yZXZva2VPYmplY3RVUkwob2xkU3JjKTtcbn1cbiIsIlxuLyoqXG4gKiBXaGVuIHNvdXJjZSBtYXBzIGFyZSBlbmFibGVkLCBgc3R5bGUtbG9hZGVyYCB1c2VzIGEgbGluayBlbGVtZW50IHdpdGggYSBkYXRhLXVyaSB0b1xuICogZW1iZWQgdGhlIGNzcyBvbiB0aGUgcGFnZS4gVGhpcyBicmVha3MgYWxsIHJlbGF0aXZlIHVybHMgYmVjYXVzZSBub3cgdGhleSBhcmUgcmVsYXRpdmUgdG8gYVxuICogYnVuZGxlIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQgcGFnZS5cbiAqXG4gKiBPbmUgc29sdXRpb24gaXMgdG8gb25seSB1c2UgZnVsbCB1cmxzLCBidXQgdGhhdCBtYXkgYmUgaW1wb3NzaWJsZS5cbiAqXG4gKiBJbnN0ZWFkLCB0aGlzIGZ1bmN0aW9uIFwiZml4ZXNcIiB0aGUgcmVsYXRpdmUgdXJscyB0byBiZSBhYnNvbHV0ZSBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgcGFnZSBsb2NhdGlvbi5cbiAqXG4gKiBBIHJ1ZGltZW50YXJ5IHRlc3Qgc3VpdGUgaXMgbG9jYXRlZCBhdCBgdGVzdC9maXhVcmxzLmpzYCBhbmQgY2FuIGJlIHJ1biB2aWEgdGhlIGBucG0gdGVzdGAgY29tbWFuZC5cbiAqXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzKSB7XG4gIC8vIGdldCBjdXJyZW50IGxvY2F0aW9uXG4gIHZhciBsb2NhdGlvbiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LmxvY2F0aW9uO1xuXG4gIGlmICghbG9jYXRpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJmaXhVcmxzIHJlcXVpcmVzIHdpbmRvdy5sb2NhdGlvblwiKTtcbiAgfVxuXG5cdC8vIGJsYW5rIG9yIG51bGw/XG5cdGlmICghY3NzIHx8IHR5cGVvZiBjc3MgIT09IFwic3RyaW5nXCIpIHtcblx0ICByZXR1cm4gY3NzO1xuICB9XG5cbiAgdmFyIGJhc2VVcmwgPSBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIGxvY2F0aW9uLmhvc3Q7XG4gIHZhciBjdXJyZW50RGlyID0gYmFzZVVybCArIGxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1xcL1teXFwvXSokLywgXCIvXCIpO1xuXG5cdC8vIGNvbnZlcnQgZWFjaCB1cmwoLi4uKVxuXHQvKlxuXHRUaGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBqdXN0IGEgd2F5IHRvIHJlY3Vyc2l2ZWx5IG1hdGNoIGJyYWNrZXRzIHdpdGhpblxuXHRhIHN0cmluZy5cblxuXHQgL3VybFxccypcXCggID0gTWF0Y2ggb24gdGhlIHdvcmQgXCJ1cmxcIiB3aXRoIGFueSB3aGl0ZXNwYWNlIGFmdGVyIGl0IGFuZCB0aGVuIGEgcGFyZW5zXG5cdCAgICggID0gU3RhcnQgYSBjYXB0dXJpbmcgZ3JvdXBcblx0ICAgICAoPzogID0gU3RhcnQgYSBub24tY2FwdHVyaW5nIGdyb3VwXG5cdCAgICAgICAgIFteKShdICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICB8ICA9IE9SXG5cdCAgICAgICAgIFxcKCAgPSBNYXRjaCBhIHN0YXJ0IHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAoPzogID0gU3RhcnQgYW5vdGhlciBub24tY2FwdHVyaW5nIGdyb3Vwc1xuXHQgICAgICAgICAgICAgICAgIFteKShdKyAgPSBNYXRjaCBhbnl0aGluZyB0aGF0IGlzbid0IGEgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICAgICB8ICA9IE9SXG5cdCAgICAgICAgICAgICAgICAgXFwoICA9IE1hdGNoIGEgc3RhcnQgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICAgICAgICAgW14pKF0qICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgIFxcKSAgPSBNYXRjaCBhIGVuZCBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgKSAgPSBFbmQgR3JvdXBcbiAgICAgICAgICAgICAgKlxcKSA9IE1hdGNoIGFueXRoaW5nIGFuZCB0aGVuIGEgY2xvc2UgcGFyZW5zXG4gICAgICAgICAgKSAgPSBDbG9zZSBub24tY2FwdHVyaW5nIGdyb3VwXG4gICAgICAgICAgKiAgPSBNYXRjaCBhbnl0aGluZ1xuICAgICAgICkgID0gQ2xvc2UgY2FwdHVyaW5nIGdyb3VwXG5cdCBcXCkgID0gTWF0Y2ggYSBjbG9zZSBwYXJlbnNcblxuXHQgL2dpICA9IEdldCBhbGwgbWF0Y2hlcywgbm90IHRoZSBmaXJzdC4gIEJlIGNhc2UgaW5zZW5zaXRpdmUuXG5cdCAqL1xuXHR2YXIgZml4ZWRDc3MgPSBjc3MucmVwbGFjZSgvdXJsXFxzKlxcKCgoPzpbXikoXXxcXCgoPzpbXikoXSt8XFwoW14pKF0qXFwpKSpcXCkpKilcXCkvZ2ksIGZ1bmN0aW9uKGZ1bGxNYXRjaCwgb3JpZ1VybCkge1xuXHRcdC8vIHN0cmlwIHF1b3RlcyAoaWYgdGhleSBleGlzdClcblx0XHR2YXIgdW5xdW90ZWRPcmlnVXJsID0gb3JpZ1VybFxuXHRcdFx0LnRyaW0oKVxuXHRcdFx0LnJlcGxhY2UoL15cIiguKilcIiQvLCBmdW5jdGlvbihvLCAkMSl7IHJldHVybiAkMTsgfSlcblx0XHRcdC5yZXBsYWNlKC9eJyguKiknJC8sIGZ1bmN0aW9uKG8sICQxKXsgcmV0dXJuICQxOyB9KTtcblxuXHRcdC8vIGFscmVhZHkgYSBmdWxsIHVybD8gbm8gY2hhbmdlXG5cdFx0aWYgKC9eKCN8ZGF0YTp8aHR0cDpcXC9cXC98aHR0cHM6XFwvXFwvfGZpbGU6XFwvXFwvXFwvfFxccyokKS9pLnRlc3QodW5xdW90ZWRPcmlnVXJsKSkge1xuXHRcdCAgcmV0dXJuIGZ1bGxNYXRjaDtcblx0XHR9XG5cblx0XHQvLyBjb252ZXJ0IHRoZSB1cmwgdG8gYSBmdWxsIHVybFxuXHRcdHZhciBuZXdVcmw7XG5cblx0XHRpZiAodW5xdW90ZWRPcmlnVXJsLmluZGV4T2YoXCIvL1wiKSA9PT0gMCkge1xuXHRcdCAgXHQvL1RPRE86IHNob3VsZCB3ZSBhZGQgcHJvdG9jb2w/XG5cdFx0XHRuZXdVcmwgPSB1bnF1b3RlZE9yaWdVcmw7XG5cdFx0fSBlbHNlIGlmICh1bnF1b3RlZE9yaWdVcmwuaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdC8vIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBiYXNlIHVybFxuXHRcdFx0bmV3VXJsID0gYmFzZVVybCArIHVucXVvdGVkT3JpZ1VybDsgLy8gYWxyZWFkeSBzdGFydHMgd2l0aCAnLydcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gcGF0aCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gY3VycmVudCBkaXJlY3Rvcnlcblx0XHRcdG5ld1VybCA9IGN1cnJlbnREaXIgKyB1bnF1b3RlZE9yaWdVcmwucmVwbGFjZSgvXlxcLlxcLy8sIFwiXCIpOyAvLyBTdHJpcCBsZWFkaW5nICcuLydcblx0XHR9XG5cblx0XHQvLyBzZW5kIGJhY2sgdGhlIGZpeGVkIHVybCguLi4pXG5cdFx0cmV0dXJuIFwidXJsKFwiICsgSlNPTi5zdHJpbmdpZnkobmV3VXJsKSArIFwiKVwiO1xuXHR9KTtcblxuXHQvLyBzZW5kIGJhY2sgdGhlIGZpeGVkIGNzc1xuXHRyZXR1cm4gZml4ZWRDc3M7XG59O1xuIiwiLy8gICAgIFVuZGVyc2NvcmUuanMgMS45LjFcbi8vICAgICBodHRwOi8vdW5kZXJzY29yZWpzLm9yZ1xuLy8gICAgIChjKSAyMDA5LTIwMTggSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbi8vICAgICBVbmRlcnNjb3JlIG1heSBiZSBmcmVlbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuXG4oZnVuY3Rpb24oKSB7XG5cbiAgLy8gQmFzZWxpbmUgc2V0dXBcbiAgLy8gLS0tLS0tLS0tLS0tLS1cblxuICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgLy8gb24gdGhlIHNlcnZlciwgb3IgYHRoaXNgIGluIHNvbWUgdmlydHVhbCBtYWNoaW5lcy4gV2UgdXNlIGBzZWxmYFxuICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICB2YXIgcm9vdCA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmIHx8XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbC5nbG9iYWwgPT09IGdsb2JhbCAmJiBnbG9iYWwgfHxcbiAgICAgICAgICAgIHRoaXMgfHxcbiAgICAgICAgICAgIHt9O1xuXG4gIC8vIFNhdmUgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBgX2AgdmFyaWFibGUuXG4gIHZhciBwcmV2aW91c1VuZGVyc2NvcmUgPSByb290Ll87XG5cbiAgLy8gU2F2ZSBieXRlcyBpbiB0aGUgbWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBlZCkgdmVyc2lvbjpcbiAgdmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsIE9ialByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIFN5bWJvbFByb3RvID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wucHJvdG90eXBlIDogbnVsbDtcblxuICAvLyBDcmVhdGUgcXVpY2sgcmVmZXJlbmNlIHZhcmlhYmxlcyBmb3Igc3BlZWQgYWNjZXNzIHRvIGNvcmUgcHJvdG90eXBlcy5cbiAgdmFyIHB1c2ggPSBBcnJheVByb3RvLnB1c2gsXG4gICAgICBzbGljZSA9IEFycmF5UHJvdG8uc2xpY2UsXG4gICAgICB0b1N0cmluZyA9IE9ialByb3RvLnRvU3RyaW5nLFxuICAgICAgaGFzT3duUHJvcGVydHkgPSBPYmpQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuICAvLyBBbGwgKipFQ01BU2NyaXB0IDUqKiBuYXRpdmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2UgaG9wZSB0byB1c2VcbiAgLy8gYXJlIGRlY2xhcmVkIGhlcmUuXG4gIHZhciBuYXRpdmVJc0FycmF5ID0gQXJyYXkuaXNBcnJheSxcbiAgICAgIG5hdGl2ZUtleXMgPSBPYmplY3Qua2V5cyxcbiAgICAgIG5hdGl2ZUNyZWF0ZSA9IE9iamVjdC5jcmVhdGU7XG5cbiAgLy8gTmFrZWQgZnVuY3Rpb24gcmVmZXJlbmNlIGZvciBzdXJyb2dhdGUtcHJvdG90eXBlLXN3YXBwaW5nLlxuICB2YXIgQ3RvciA9IGZ1bmN0aW9uKCl7fTtcblxuICAvLyBDcmVhdGUgYSBzYWZlIHJlZmVyZW5jZSB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QgZm9yIHVzZSBiZWxvdy5cbiAgdmFyIF8gPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgXykgcmV0dXJuIG9iajtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgXykpIHJldHVybiBuZXcgXyhvYmopO1xuICAgIHRoaXMuX3dyYXBwZWQgPSBvYmo7XG4gIH07XG5cbiAgLy8gRXhwb3J0IHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3IgKipOb2RlLmpzKiosIHdpdGhcbiAgLy8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZm9yIHRoZWlyIG9sZCBtb2R1bGUgQVBJLiBJZiB3ZSdyZSBpblxuICAvLyB0aGUgYnJvd3NlciwgYWRkIGBfYCBhcyBhIGdsb2JhbCBvYmplY3QuXG4gIC8vIChgbm9kZVR5cGVgIGlzIGNoZWNrZWQgdG8gZW5zdXJlIHRoYXQgYG1vZHVsZWBcbiAgLy8gYW5kIGBleHBvcnRzYCBhcmUgbm90IEhUTUwgZWxlbWVudHMuKVxuICBpZiAodHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVmaW5lZCcgJiYgIWV4cG9ydHMubm9kZVR5cGUpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZpbmVkJyAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBfO1xuICAgIH1cbiAgICBleHBvcnRzLl8gPSBfO1xuICB9IGVsc2Uge1xuICAgIHJvb3QuXyA9IF87XG4gIH1cblxuICAvLyBDdXJyZW50IHZlcnNpb24uXG4gIF8uVkVSU0lPTiA9ICcxLjkuMSc7XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGVmZmljaWVudCAoZm9yIGN1cnJlbnQgZW5naW5lcykgdmVyc2lvblxuICAvLyBvZiB0aGUgcGFzc2VkLWluIGNhbGxiYWNrLCB0byBiZSByZXBlYXRlZGx5IGFwcGxpZWQgaW4gb3RoZXIgVW5kZXJzY29yZVxuICAvLyBmdW5jdGlvbnMuXG4gIHZhciBvcHRpbWl6ZUNiID0gZnVuY3Rpb24oZnVuYywgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgICBpZiAoY29udGV4dCA9PT0gdm9pZCAwKSByZXR1cm4gZnVuYztcbiAgICBzd2l0Y2ggKGFyZ0NvdW50ID09IG51bGwgPyAzIDogYXJnQ291bnQpIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUpO1xuICAgICAgfTtcbiAgICAgIC8vIFRoZSAyLWFyZ3VtZW50IGNhc2UgaXMgb21pdHRlZCBiZWNhdXNlIHdl4oCZcmUgbm90IHVzaW5nIGl0LlxuICAgICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH07XG4gICAgICBjYXNlIDQ6IHJldHVybiBmdW5jdGlvbihhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH07XG5cbiAgdmFyIGJ1aWx0aW5JdGVyYXRlZTtcblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBjYWxsYmFja3MgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBlYWNoXG4gIC8vIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uLCByZXR1cm5pbmcgdGhlIGRlc2lyZWQgcmVzdWx0IOKAlCBlaXRoZXIgYGlkZW50aXR5YCxcbiAgLy8gYW4gYXJiaXRyYXJ5IGNhbGxiYWNrLCBhIHByb3BlcnR5IG1hdGNoZXIsIG9yIGEgcHJvcGVydHkgYWNjZXNzb3IuXG4gIHZhciBjYiA9IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICAgIGlmIChfLml0ZXJhdGVlICE9PSBidWlsdGluSXRlcmF0ZWUpIHJldHVybiBfLml0ZXJhdGVlKHZhbHVlLCBjb250ZXh0KTtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIF8uaWRlbnRpdHk7XG4gICAgaWYgKF8uaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybiBvcHRpbWl6ZUNiKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCk7XG4gICAgaWYgKF8uaXNPYmplY3QodmFsdWUpICYmICFfLmlzQXJyYXkodmFsdWUpKSByZXR1cm4gXy5tYXRjaGVyKHZhbHVlKTtcbiAgICByZXR1cm4gXy5wcm9wZXJ0eSh2YWx1ZSk7XG4gIH07XG5cbiAgLy8gRXh0ZXJuYWwgd3JhcHBlciBmb3Igb3VyIGNhbGxiYWNrIGdlbmVyYXRvci4gVXNlcnMgbWF5IGN1c3RvbWl6ZVxuICAvLyBgXy5pdGVyYXRlZWAgaWYgdGhleSB3YW50IGFkZGl0aW9uYWwgcHJlZGljYXRlL2l0ZXJhdGVlIHNob3J0aGFuZCBzdHlsZXMuXG4gIC8vIFRoaXMgYWJzdHJhY3Rpb24gaGlkZXMgdGhlIGludGVybmFsLW9ubHkgYXJnQ291bnQgYXJndW1lbnQuXG4gIF8uaXRlcmF0ZWUgPSBidWlsdGluSXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBjYih2YWx1ZSwgY29udGV4dCwgSW5maW5pdHkpO1xuICB9O1xuXG4gIC8vIFNvbWUgZnVuY3Rpb25zIHRha2UgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLCBvciBhIGZldyBleHBlY3RlZFxuICAvLyBhcmd1bWVudHMgYXQgdGhlIGJlZ2lubmluZyBhbmQgdGhlbiBhIHZhcmlhYmxlIG51bWJlciBvZiB2YWx1ZXMgdG8gb3BlcmF0ZVxuICAvLyBvbi4gVGhpcyBoZWxwZXIgYWNjdW11bGF0ZXMgYWxsIHJlbWFpbmluZyBhcmd1bWVudHMgcGFzdCB0aGUgZnVuY3Rpb27igJlzXG4gIC8vIGFyZ3VtZW50IGxlbmd0aCAob3IgYW4gZXhwbGljaXQgYHN0YXJ0SW5kZXhgKSwgaW50byBhbiBhcnJheSB0aGF0IGJlY29tZXNcbiAgLy8gdGhlIGxhc3QgYXJndW1lbnQuIFNpbWlsYXIgdG8gRVM24oCZcyBcInJlc3QgcGFyYW1ldGVyXCIuXG4gIHZhciByZXN0QXJndW1lbnRzID0gZnVuY3Rpb24oZnVuYywgc3RhcnRJbmRleCkge1xuICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoYXJndW1lbnRzLmxlbmd0aCAtIHN0YXJ0SW5kZXgsIDApLFxuICAgICAgICAgIHJlc3QgPSBBcnJheShsZW5ndGgpLFxuICAgICAgICAgIGluZGV4ID0gMDtcbiAgICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIGFyZ3VtZW50c1swXSwgcmVzdCk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXSwgcmVzdCk7XG4gICAgICB9XG4gICAgICB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgfVxuICAgICAgYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIG5ldyBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIGFub3RoZXIuXG4gIHZhciBiYXNlQ3JlYXRlID0gZnVuY3Rpb24ocHJvdG90eXBlKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KHByb3RvdHlwZSkpIHJldHVybiB7fTtcbiAgICBpZiAobmF0aXZlQ3JlYXRlKSByZXR1cm4gbmF0aXZlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgQ3Rvci5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBDdG9yO1xuICAgIEN0b3IucHJvdG90eXBlID0gbnVsbDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciBzaGFsbG93UHJvcGVydHkgPSBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpba2V5XTtcbiAgICB9O1xuICB9O1xuXG4gIHZhciBoYXMgPSBmdW5jdGlvbihvYmosIHBhdGgpIHtcbiAgICByZXR1cm4gb2JqICE9IG51bGwgJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHBhdGgpO1xuICB9XG5cbiAgdmFyIGRlZXBHZXQgPSBmdW5jdGlvbihvYmosIHBhdGgpIHtcbiAgICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgICAgb2JqID0gb2JqW3BhdGhbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gbGVuZ3RoID8gb2JqIDogdm9pZCAwO1xuICB9O1xuXG4gIC8vIEhlbHBlciBmb3IgY29sbGVjdGlvbiBtZXRob2RzIHRvIGRldGVybWluZSB3aGV0aGVyIGEgY29sbGVjdGlvblxuICAvLyBzaG91bGQgYmUgaXRlcmF0ZWQgYXMgYW4gYXJyYXkgb3IgYXMgYW4gb2JqZWN0LlxuICAvLyBSZWxhdGVkOiBodHRwOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy10b2xlbmd0aFxuICAvLyBBdm9pZHMgYSB2ZXJ5IG5hc3R5IGlPUyA4IEpJVCBidWcgb24gQVJNLTY0LiAjMjA5NFxuICB2YXIgTUFYX0FSUkFZX0lOREVYID0gTWF0aC5wb3coMiwgNTMpIC0gMTtcbiAgdmFyIGdldExlbmd0aCA9IHNoYWxsb3dQcm9wZXJ0eSgnbGVuZ3RoJyk7XG4gIHZhciBpc0FycmF5TGlrZSA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24pIHtcbiAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKGNvbGxlY3Rpb24pO1xuICAgIHJldHVybiB0eXBlb2YgbGVuZ3RoID09ICdudW1iZXInICYmIGxlbmd0aCA+PSAwICYmIGxlbmd0aCA8PSBNQVhfQVJSQVlfSU5ERVg7XG4gIH07XG5cbiAgLy8gQ29sbGVjdGlvbiBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBUaGUgY29ybmVyc3RvbmUsIGFuIGBlYWNoYCBpbXBsZW1lbnRhdGlvbiwgYWthIGBmb3JFYWNoYC5cbiAgLy8gSGFuZGxlcyByYXcgb2JqZWN0cyBpbiBhZGRpdGlvbiB0byBhcnJheS1saWtlcy4gVHJlYXRzIGFsbFxuICAvLyBzcGFyc2UgYXJyYXktbGlrZXMgYXMgaWYgdGhleSB3ZXJlIGRlbnNlLlxuICBfLmVhY2ggPSBfLmZvckVhY2ggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIgaSwgbGVuZ3RoO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSB7XG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaXRlcmF0ZWUob2JqW2ldLCBpLCBvYmopO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVyYXRlZShvYmpba2V5c1tpXV0sIGtleXNbaV0sIG9iaik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQuXG4gIF8ubWFwID0gXy5jb2xsZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAgICByZXN1bHRzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgcmVzdWx0c1tpbmRleF0gPSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIHJlZHVjaW5nIGZ1bmN0aW9uIGl0ZXJhdGluZyBsZWZ0IG9yIHJpZ2h0LlxuICB2YXIgY3JlYXRlUmVkdWNlID0gZnVuY3Rpb24oZGlyKSB7XG4gICAgLy8gV3JhcCBjb2RlIHRoYXQgcmVhc3NpZ25zIGFyZ3VtZW50IHZhcmlhYmxlcyBpbiBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRoYW5cbiAgICAvLyB0aGUgb25lIHRoYXQgYWNjZXNzZXMgYGFyZ3VtZW50cy5sZW5ndGhgIHRvIGF2b2lkIGEgcGVyZiBoaXQuICgjMTk5MSlcbiAgICB2YXIgcmVkdWNlciA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGluaXRpYWwpIHtcbiAgICAgIHZhciBrZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksXG4gICAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICAgICAgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4gICAgICBpZiAoIWluaXRpYWwpIHtcbiAgICAgICAgbWVtbyA9IG9ialtrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGRpcjtcbiAgICAgIH1cbiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgICAgbWVtbyA9IGl0ZXJhdGVlKG1lbW8sIG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgbWVtbywgY29udGV4dCkge1xuICAgICAgdmFyIGluaXRpYWwgPSBhcmd1bWVudHMubGVuZ3RoID49IDM7XG4gICAgICByZXR1cm4gcmVkdWNlcihvYmosIG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDQpLCBtZW1vLCBpbml0aWFsKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vICoqUmVkdWNlKiogYnVpbGRzIHVwIGEgc2luZ2xlIHJlc3VsdCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFrYSBgaW5qZWN0YCxcbiAgLy8gb3IgYGZvbGRsYC5cbiAgXy5yZWR1Y2UgPSBfLmZvbGRsID0gXy5pbmplY3QgPSBjcmVhdGVSZWR1Y2UoMSk7XG5cbiAgLy8gVGhlIHJpZ2h0LWFzc29jaWF0aXZlIHZlcnNpb24gb2YgcmVkdWNlLCBhbHNvIGtub3duIGFzIGBmb2xkcmAuXG4gIF8ucmVkdWNlUmlnaHQgPSBfLmZvbGRyID0gY3JlYXRlUmVkdWNlKC0xKTtcblxuICAvLyBSZXR1cm4gdGhlIGZpcnN0IHZhbHVlIHdoaWNoIHBhc3NlcyBhIHRydXRoIHRlc3QuIEFsaWFzZWQgYXMgYGRldGVjdGAuXG4gIF8uZmluZCA9IF8uZGV0ZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIga2V5RmluZGVyID0gaXNBcnJheUxpa2Uob2JqKSA/IF8uZmluZEluZGV4IDogXy5maW5kS2V5O1xuICAgIHZhciBrZXkgPSBrZXlGaW5kZXIob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIGlmIChrZXkgIT09IHZvaWQgMCAmJiBrZXkgIT09IC0xKSByZXR1cm4gb2JqW2tleV07XG4gIH07XG5cbiAgLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBwYXNzIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNlZCBhcyBgc2VsZWN0YC5cbiAgXy5maWx0ZXIgPSBfLnNlbGVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGxpc3QpKSByZXN1bHRzLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBhIHRydXRoIHRlc3QgZmFpbHMuXG4gIF8ucmVqZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIob2JqLCBfLm5lZ2F0ZShjYihwcmVkaWNhdGUpKSwgY29udGV4dCk7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgYWxsIG9mIHRoZSBlbGVtZW50cyBtYXRjaCBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYGFsbGAuXG4gIF8uZXZlcnkgPSBfLmFsbCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKCFwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIERldGVybWluZSBpZiBhdCBsZWFzdCBvbmUgZWxlbWVudCBpbiB0aGUgb2JqZWN0IG1hdGNoZXMgYSB0cnV0aCB0ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBhbnlgLlxuICBfLnNvbWUgPSBfLmFueSA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBhcnJheSBvciBvYmplY3QgY29udGFpbnMgYSBnaXZlbiBpdGVtICh1c2luZyBgPT09YCkuXG4gIC8vIEFsaWFzZWQgYXMgYGluY2x1ZGVzYCBhbmQgYGluY2x1ZGVgLlxuICBfLmNvbnRhaW5zID0gXy5pbmNsdWRlcyA9IF8uaW5jbHVkZSA9IGZ1bmN0aW9uKG9iaiwgaXRlbSwgZnJvbUluZGV4LCBndWFyZCkge1xuICAgIGlmICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gXy52YWx1ZXMob2JqKTtcbiAgICBpZiAodHlwZW9mIGZyb21JbmRleCAhPSAnbnVtYmVyJyB8fCBndWFyZCkgZnJvbUluZGV4ID0gMDtcbiAgICByZXR1cm4gXy5pbmRleE9mKG9iaiwgaXRlbSwgZnJvbUluZGV4KSA+PSAwO1xuICB9O1xuXG4gIC8vIEludm9rZSBhIG1ldGhvZCAod2l0aCBhcmd1bWVudHMpIG9uIGV2ZXJ5IGl0ZW0gaW4gYSBjb2xsZWN0aW9uLlxuICBfLmludm9rZSA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24ob2JqLCBwYXRoLCBhcmdzKSB7XG4gICAgdmFyIGNvbnRleHRQYXRoLCBmdW5jO1xuICAgIGlmIChfLmlzRnVuY3Rpb24ocGF0aCkpIHtcbiAgICAgIGZ1bmMgPSBwYXRoO1xuICAgIH0gZWxzZSBpZiAoXy5pc0FycmF5KHBhdGgpKSB7XG4gICAgICBjb250ZXh0UGF0aCA9IHBhdGguc2xpY2UoMCwgLTEpO1xuICAgICAgcGF0aCA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcbiAgICB9XG4gICAgcmV0dXJuIF8ubWFwKG9iaiwgZnVuY3Rpb24oY29udGV4dCkge1xuICAgICAgdmFyIG1ldGhvZCA9IGZ1bmM7XG4gICAgICBpZiAoIW1ldGhvZCkge1xuICAgICAgICBpZiAoY29udGV4dFBhdGggJiYgY29udGV4dFBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgY29udGV4dCA9IGRlZXBHZXQoY29udGV4dCwgY29udGV4dFBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZXh0ID09IG51bGwpIHJldHVybiB2b2lkIDA7XG4gICAgICAgIG1ldGhvZCA9IGNvbnRleHRbcGF0aF07XG4gICAgICB9XG4gICAgICByZXR1cm4gbWV0aG9kID09IG51bGwgPyBtZXRob2QgOiBtZXRob2QuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYG1hcGA6IGZldGNoaW5nIGEgcHJvcGVydHkuXG4gIF8ucGx1Y2sgPSBmdW5jdGlvbihvYmosIGtleSkge1xuICAgIHJldHVybiBfLm1hcChvYmosIF8ucHJvcGVydHkoa2V5KSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgZmlsdGVyYDogc2VsZWN0aW5nIG9ubHkgb2JqZWN0c1xuICAvLyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLndoZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykge1xuICAgIHJldHVybiBfLmZpbHRlcihvYmosIF8ubWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbmRgOiBnZXR0aW5nIHRoZSBmaXJzdCBvYmplY3RcbiAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5maW5kV2hlcmUgPSBmdW5jdGlvbihvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIF8uZmluZChvYmosIF8ubWF0Y2hlcihhdHRycykpO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWF4aW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5tYXggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IC1JbmZpbml0eSwgbGFzdENvbXB1dGVkID0gLUluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwgfHwgdHlwZW9mIGl0ZXJhdGVlID09ICdudW1iZXInICYmIHR5cGVvZiBvYmpbMF0gIT0gJ29iamVjdCcgJiYgb2JqICE9IG51bGwpIHtcbiAgICAgIG9iaiA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgPiByZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHYsIGluZGV4LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodiwgaW5kZXgsIGxpc3QpO1xuICAgICAgICBpZiAoY29tcHV0ZWQgPiBsYXN0Q29tcHV0ZWQgfHwgY29tcHV0ZWQgPT09IC1JbmZpbml0eSAmJiByZXN1bHQgPT09IC1JbmZpbml0eSkge1xuICAgICAgICAgIHJlc3VsdCA9IHY7XG4gICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWluaW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5taW4gPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IEluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSBJbmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICAgIGlmIChpdGVyYXRlZSA9PSBudWxsIHx8IHR5cGVvZiBpdGVyYXRlZSA9PSAnbnVtYmVyJyAmJiB0eXBlb2Ygb2JqWzBdICE9ICdvYmplY3QnICYmIG9iaiAhPSBudWxsKSB7XG4gICAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlIDwgcmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2LCBpbmRleCwgbGlzdCkge1xuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHYsIGluZGV4LCBsaXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVkIDwgbGFzdENvbXB1dGVkIHx8IGNvbXB1dGVkID09PSBJbmZpbml0eSAmJiByZXN1bHQgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdjtcbiAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gU2h1ZmZsZSBhIGNvbGxlY3Rpb24uXG4gIF8uc2h1ZmZsZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBfLnNhbXBsZShvYmosIEluZmluaXR5KTtcbiAgfTtcblxuICAvLyBTYW1wbGUgKipuKiogcmFuZG9tIHZhbHVlcyBmcm9tIGEgY29sbGVjdGlvbiB1c2luZyB0aGUgbW9kZXJuIHZlcnNpb24gb2YgdGhlXG4gIC8vIFtGaXNoZXItWWF0ZXMgc2h1ZmZsZV0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXLigJNZYXRlc19zaHVmZmxlKS5cbiAgLy8gSWYgKipuKiogaXMgbm90IHNwZWNpZmllZCwgcmV0dXJucyBhIHNpbmdsZSByYW5kb20gZWxlbWVudC5cbiAgLy8gVGhlIGludGVybmFsIGBndWFyZGAgYXJndW1lbnQgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgbWFwYC5cbiAgXy5zYW1wbGUgPSBmdW5jdGlvbihvYmosIG4sIGd1YXJkKSB7XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkge1xuICAgICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSBfLnZhbHVlcyhvYmopO1xuICAgICAgcmV0dXJuIG9ialtfLnJhbmRvbShvYmoubGVuZ3RoIC0gMSldO1xuICAgIH1cbiAgICB2YXIgc2FtcGxlID0gaXNBcnJheUxpa2Uob2JqKSA/IF8uY2xvbmUob2JqKSA6IF8udmFsdWVzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChzYW1wbGUpO1xuICAgIG4gPSBNYXRoLm1heChNYXRoLm1pbihuLCBsZW5ndGgpLCAwKTtcbiAgICB2YXIgbGFzdCA9IGxlbmd0aCAtIDE7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG47IGluZGV4KyspIHtcbiAgICAgIHZhciByYW5kID0gXy5yYW5kb20oaW5kZXgsIGxhc3QpO1xuICAgICAgdmFyIHRlbXAgPSBzYW1wbGVbaW5kZXhdO1xuICAgICAgc2FtcGxlW2luZGV4XSA9IHNhbXBsZVtyYW5kXTtcbiAgICAgIHNhbXBsZVtyYW5kXSA9IHRlbXA7XG4gICAgfVxuICAgIHJldHVybiBzYW1wbGUuc2xpY2UoMCwgbik7XG4gIH07XG5cbiAgLy8gU29ydCB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uIHByb2R1Y2VkIGJ5IGFuIGl0ZXJhdGVlLlxuICBfLnNvcnRCeSA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHJldHVybiBfLnBsdWNrKF8ubWFwKG9iaiwgZnVuY3Rpb24odmFsdWUsIGtleSwgbGlzdCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBpbmRleDogaW5kZXgrKyxcbiAgICAgICAgY3JpdGVyaWE6IGl0ZXJhdGVlKHZhbHVlLCBrZXksIGxpc3QpXG4gICAgICB9O1xuICAgIH0pLnNvcnQoZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYTtcbiAgICAgIHZhciBiID0gcmlnaHQuY3JpdGVyaWE7XG4gICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICBpZiAoYSA+IGIgfHwgYSA9PT0gdm9pZCAwKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgPCBiIHx8IGIgPT09IHZvaWQgMCkgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxlZnQuaW5kZXggLSByaWdodC5pbmRleDtcbiAgICB9KSwgJ3ZhbHVlJyk7XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBmb3IgYWdncmVnYXRlIFwiZ3JvdXAgYnlcIiBvcGVyYXRpb25zLlxuICB2YXIgZ3JvdXAgPSBmdW5jdGlvbihiZWhhdmlvciwgcGFydGl0aW9uKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICAgIHZhciByZXN1bHQgPSBwYXJ0aXRpb24gPyBbW10sIFtdXSA6IHt9O1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGtleSA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgb2JqKTtcbiAgICAgICAgYmVoYXZpb3IocmVzdWx0LCB2YWx1ZSwga2V5KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEdyb3VwcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLiBQYXNzIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGVcbiAgLy8gdG8gZ3JvdXAgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjcml0ZXJpb24uXG4gIF8uZ3JvdXBCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChoYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XS5wdXNoKHZhbHVlKTsgZWxzZSByZXN1bHRba2V5XSA9IFt2YWx1ZV07XG4gIH0pO1xuXG4gIC8vIEluZGV4ZXMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiwgc2ltaWxhciB0byBgZ3JvdXBCeWAsIGJ1dCBmb3JcbiAgLy8gd2hlbiB5b3Uga25vdyB0aGF0IHlvdXIgaW5kZXggdmFsdWVzIHdpbGwgYmUgdW5pcXVlLlxuICBfLmluZGV4QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICB9KTtcblxuICAvLyBDb3VudHMgaW5zdGFuY2VzIG9mIGFuIG9iamVjdCB0aGF0IGdyb3VwIGJ5IGEgY2VydGFpbiBjcml0ZXJpb24uIFBhc3NcbiAgLy8gZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZSB0byBjb3VudCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gIC8vIGNyaXRlcmlvbi5cbiAgXy5jb3VudEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgaWYgKGhhcyhyZXN1bHQsIGtleSkpIHJlc3VsdFtrZXldKys7IGVsc2UgcmVzdWx0W2tleV0gPSAxO1xuICB9KTtcblxuICB2YXIgcmVTdHJTeW1ib2wgPSAvW15cXHVkODAwLVxcdWRmZmZdfFtcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl18W1xcdWQ4MDAtXFx1ZGZmZl0vZztcbiAgLy8gU2FmZWx5IGNyZWF0ZSBhIHJlYWwsIGxpdmUgYXJyYXkgZnJvbSBhbnl0aGluZyBpdGVyYWJsZS5cbiAgXy50b0FycmF5ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCFvYmopIHJldHVybiBbXTtcbiAgICBpZiAoXy5pc0FycmF5KG9iaikpIHJldHVybiBzbGljZS5jYWxsKG9iaik7XG4gICAgaWYgKF8uaXNTdHJpbmcob2JqKSkge1xuICAgICAgLy8gS2VlcCBzdXJyb2dhdGUgcGFpciBjaGFyYWN0ZXJzIHRvZ2V0aGVyXG4gICAgICByZXR1cm4gb2JqLm1hdGNoKHJlU3RyU3ltYm9sKTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHJldHVybiBfLm1hcChvYmosIF8uaWRlbnRpdHkpO1xuICAgIHJldHVybiBfLnZhbHVlcyhvYmopO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFuIG9iamVjdC5cbiAgXy5zaXplID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gMDtcbiAgICByZXR1cm4gaXNBcnJheUxpa2Uob2JqKSA/IG9iai5sZW5ndGggOiBfLmtleXMob2JqKS5sZW5ndGg7XG4gIH07XG5cbiAgLy8gU3BsaXQgYSBjb2xsZWN0aW9uIGludG8gdHdvIGFycmF5czogb25lIHdob3NlIGVsZW1lbnRzIGFsbCBzYXRpc2Z5IHRoZSBnaXZlblxuICAvLyBwcmVkaWNhdGUsIGFuZCBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIGRvIG5vdCBzYXRpc2Z5IHRoZSBwcmVkaWNhdGUuXG4gIF8ucGFydGl0aW9uID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwgcGFzcykge1xuICAgIHJlc3VsdFtwYXNzID8gMCA6IDFdLnB1c2godmFsdWUpO1xuICB9LCB0cnVlKTtcblxuICAvLyBBcnJheSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gR2V0IHRoZSBmaXJzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuIEFsaWFzZWQgYXMgYGhlYWRgIGFuZCBgdGFrZWAuIFRoZSAqKmd1YXJkKiogY2hlY2tcbiAgLy8gYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgXy5tYXBgLlxuICBfLmZpcnN0ID0gXy5oZWFkID0gXy50YWtlID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgaWYgKGFycmF5ID09IG51bGwgfHwgYXJyYXkubGVuZ3RoIDwgMSkgcmV0dXJuIG4gPT0gbnVsbCA/IHZvaWQgMCA6IFtdO1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVswXTtcbiAgICByZXR1cm4gXy5pbml0aWFsKGFycmF5LCBhcnJheS5sZW5ndGggLSBuKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBsYXN0IGVudHJ5IG9mIHRoZSBhcnJheS4gRXNwZWNpYWxseSB1c2VmdWwgb25cbiAgLy8gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gYWxsIHRoZSB2YWx1ZXMgaW5cbiAgLy8gdGhlIGFycmF5LCBleGNsdWRpbmcgdGhlIGxhc3QgTi5cbiAgXy5pbml0aWFsID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIDAsIE1hdGgubWF4KDAsIGFycmF5Lmxlbmd0aCAtIChuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbikpKTtcbiAgfTtcblxuICAvLyBHZXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgbGFzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuXG4gIF8ubGFzdCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsIHx8IGFycmF5Lmxlbmd0aCA8IDEpIHJldHVybiBuID09IG51bGwgPyB2b2lkIDAgOiBbXTtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIF8ucmVzdChhcnJheSwgTWF0aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gbikpO1xuICB9O1xuXG4gIC8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBhcnJheS4gQWxpYXNlZCBhcyBgdGFpbGAgYW5kIGBkcm9wYC5cbiAgLy8gRXNwZWNpYWxseSB1c2VmdWwgb24gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgYW4gKipuKiogd2lsbCByZXR1cm5cbiAgLy8gdGhlIHJlc3QgTiB2YWx1ZXMgaW4gdGhlIGFycmF5LlxuICBfLnJlc3QgPSBfLnRhaWwgPSBfLmRyb3AgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgbiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pO1xuICB9O1xuXG4gIC8vIFRyaW0gb3V0IGFsbCBmYWxzeSB2YWx1ZXMgZnJvbSBhbiBhcnJheS5cbiAgXy5jb21wYWN0ID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIoYXJyYXksIEJvb2xlYW4pO1xuICB9O1xuXG4gIC8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIGEgcmVjdXJzaXZlIGBmbGF0dGVuYCBmdW5jdGlvbi5cbiAgdmFyIGZsYXR0ZW4gPSBmdW5jdGlvbihpbnB1dCwgc2hhbGxvdywgc3RyaWN0LCBvdXRwdXQpIHtcbiAgICBvdXRwdXQgPSBvdXRwdXQgfHwgW107XG4gICAgdmFyIGlkeCA9IG91dHB1dC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChpbnB1dCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gaW5wdXRbaV07XG4gICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYmIChfLmlzQXJyYXkodmFsdWUpIHx8IF8uaXNBcmd1bWVudHModmFsdWUpKSkge1xuICAgICAgICAvLyBGbGF0dGVuIGN1cnJlbnQgbGV2ZWwgb2YgYXJyYXkgb3IgYXJndW1lbnRzIG9iamVjdC5cbiAgICAgICAgaWYgKHNoYWxsb3cpIHtcbiAgICAgICAgICB2YXIgaiA9IDAsIGxlbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoaiA8IGxlbikgb3V0cHV0W2lkeCsrXSA9IHZhbHVlW2orK107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmxhdHRlbih2YWx1ZSwgc2hhbGxvdywgc3RyaWN0LCBvdXRwdXQpO1xuICAgICAgICAgIGlkeCA9IG91dHB1dC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCkge1xuICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG5cbiAgLy8gRmxhdHRlbiBvdXQgYW4gYXJyYXksIGVpdGhlciByZWN1cnNpdmVseSAoYnkgZGVmYXVsdCksIG9yIGp1c3Qgb25lIGxldmVsLlxuICBfLmZsYXR0ZW4gPSBmdW5jdGlvbihhcnJheSwgc2hhbGxvdykge1xuICAgIHJldHVybiBmbGF0dGVuKGFycmF5LCBzaGFsbG93LCBmYWxzZSk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgdmVyc2lvbiBvZiB0aGUgYXJyYXkgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBzcGVjaWZpZWQgdmFsdWUocykuXG4gIF8ud2l0aG91dCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oYXJyYXksIG90aGVyQXJyYXlzKSB7XG4gICAgcmV0dXJuIF8uZGlmZmVyZW5jZShhcnJheSwgb3RoZXJBcnJheXMpO1xuICB9KTtcblxuICAvLyBQcm9kdWNlIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiB0aGUgYXJyYXkuIElmIHRoZSBhcnJheSBoYXMgYWxyZWFkeVxuICAvLyBiZWVuIHNvcnRlZCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiB1c2luZyBhIGZhc3RlciBhbGdvcml0aG0uXG4gIC8vIFRoZSBmYXN0ZXIgYWxnb3JpdGhtIHdpbGwgbm90IHdvcmsgd2l0aCBhbiBpdGVyYXRlZSBpZiB0aGUgaXRlcmF0ZWVcbiAgLy8gaXMgbm90IGEgb25lLXRvLW9uZSBmdW5jdGlvbiwgc28gcHJvdmlkaW5nIGFuIGl0ZXJhdGVlIHdpbGwgZGlzYWJsZVxuICAvLyB0aGUgZmFzdGVyIGFsZ29yaXRobS5cbiAgLy8gQWxpYXNlZCBhcyBgdW5pcXVlYC5cbiAgXy51bmlxID0gXy51bmlxdWUgPSBmdW5jdGlvbihhcnJheSwgaXNTb3J0ZWQsIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaWYgKCFfLmlzQm9vbGVhbihpc1NvcnRlZCkpIHtcbiAgICAgIGNvbnRleHQgPSBpdGVyYXRlZTtcbiAgICAgIGl0ZXJhdGVlID0gaXNTb3J0ZWQ7XG4gICAgICBpc1NvcnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaXRlcmF0ZWUgIT0gbnVsbCkgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBzZWVuID0gW107XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaV0sXG4gICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlLCBpLCBhcnJheSkgOiB2YWx1ZTtcbiAgICAgIGlmIChpc1NvcnRlZCAmJiAhaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKCFpIHx8IHNlZW4gIT09IGNvbXB1dGVkKSByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIHNlZW4gPSBjb21wdXRlZDtcbiAgICAgIH0gZWxzZSBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKHNlZW4sIGNvbXB1dGVkKSkge1xuICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFfLmNvbnRhaW5zKHJlc3VsdCwgdmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgdGhlIHVuaW9uOiBlYWNoIGRpc3RpbmN0IGVsZW1lbnQgZnJvbSBhbGwgb2ZcbiAgLy8gdGhlIHBhc3NlZC1pbiBhcnJheXMuXG4gIF8udW5pb24gPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGFycmF5cykge1xuICAgIHJldHVybiBfLnVuaXEoZmxhdHRlbihhcnJheXMsIHRydWUsIHRydWUpKTtcbiAgfSk7XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGl0ZW0gc2hhcmVkIGJldHdlZW4gYWxsIHRoZVxuICAvLyBwYXNzZWQtaW4gYXJyYXlzLlxuICBfLmludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGFycmF5W2ldO1xuICAgICAgaWYgKF8uY29udGFpbnMocmVzdWx0LCBpdGVtKSkgY29udGludWU7XG4gICAgICB2YXIgajtcbiAgICAgIGZvciAoaiA9IDE7IGogPCBhcmdzTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKGFyZ3VtZW50c1tqXSwgaXRlbSkpIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGogPT09IGFyZ3NMZW5ndGgpIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFRha2UgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBvbmUgYXJyYXkgYW5kIGEgbnVtYmVyIG9mIG90aGVyIGFycmF5cy5cbiAgLy8gT25seSB0aGUgZWxlbWVudHMgcHJlc2VudCBpbiBqdXN0IHRoZSBmaXJzdCBhcnJheSB3aWxsIHJlbWFpbi5cbiAgXy5kaWZmZXJlbmNlID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihhcnJheSwgcmVzdCkge1xuICAgIHJlc3QgPSBmbGF0dGVuKHJlc3QsIHRydWUsIHRydWUpO1xuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgZnVuY3Rpb24odmFsdWUpe1xuICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKHJlc3QsIHZhbHVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gQ29tcGxlbWVudCBvZiBfLnppcC4gVW56aXAgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgYW5kIGdyb3Vwc1xuICAvLyBlYWNoIGFycmF5J3MgZWxlbWVudHMgb24gc2hhcmVkIGluZGljZXMuXG4gIF8udW56aXAgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHZhciBsZW5ndGggPSBhcnJheSAmJiBfLm1heChhcnJheSwgZ2V0TGVuZ3RoKS5sZW5ndGggfHwgMDtcbiAgICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHJlc3VsdFtpbmRleF0gPSBfLnBsdWNrKGFycmF5LCBpbmRleCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gWmlwIHRvZ2V0aGVyIG11bHRpcGxlIGxpc3RzIGludG8gYSBzaW5nbGUgYXJyYXkgLS0gZWxlbWVudHMgdGhhdCBzaGFyZVxuICAvLyBhbiBpbmRleCBnbyB0b2dldGhlci5cbiAgXy56aXAgPSByZXN0QXJndW1lbnRzKF8udW56aXApO1xuXG4gIC8vIENvbnZlcnRzIGxpc3RzIGludG8gb2JqZWN0cy4gUGFzcyBlaXRoZXIgYSBzaW5nbGUgYXJyYXkgb2YgYFtrZXksIHZhbHVlXWBcbiAgLy8gcGFpcnMsIG9yIHR3byBwYXJhbGxlbCBhcnJheXMgb2YgdGhlIHNhbWUgbGVuZ3RoIC0tIG9uZSBvZiBrZXlzLCBhbmQgb25lIG9mXG4gIC8vIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy4gUGFzc2luZyBieSBwYWlycyBpcyB0aGUgcmV2ZXJzZSBvZiBfLnBhaXJzLlxuICBfLm9iamVjdCA9IGZ1bmN0aW9uKGxpc3QsIHZhbHVlcykge1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGxpc3QpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1dID0gdmFsdWVzW2ldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1bMF1dID0gbGlzdFtpXVsxXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBHZW5lcmF0b3IgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBmaW5kSW5kZXggYW5kIGZpbmRMYXN0SW5kZXggZnVuY3Rpb25zLlxuICB2YXIgY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIgPSBmdW5jdGlvbihkaXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgICAgdmFyIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkgcmV0dXJuIGluZGV4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3QgaW5kZXggb24gYW4gYXJyYXktbGlrZSB0aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0LlxuICBfLmZpbmRJbmRleCA9IGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKDEpO1xuICBfLmZpbmRMYXN0SW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigtMSk7XG5cbiAgLy8gVXNlIGEgY29tcGFyYXRvciBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IHRoZSBzbWFsbGVzdCBpbmRleCBhdCB3aGljaFxuICAvLyBhbiBvYmplY3Qgc2hvdWxkIGJlIGluc2VydGVkIHNvIGFzIHRvIG1haW50YWluIG9yZGVyLiBVc2VzIGJpbmFyeSBzZWFyY2guXG4gIF8uc29ydGVkSW5kZXggPSBmdW5jdGlvbihhcnJheSwgb2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpO1xuICAgIHZhciB2YWx1ZSA9IGl0ZXJhdGVlKG9iaik7XG4gICAgdmFyIGxvdyA9IDAsIGhpZ2ggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgICB2YXIgbWlkID0gTWF0aC5mbG9vcigobG93ICsgaGlnaCkgLyAyKTtcbiAgICAgIGlmIChpdGVyYXRlZShhcnJheVttaWRdKSA8IHZhbHVlKSBsb3cgPSBtaWQgKyAxOyBlbHNlIGhpZ2ggPSBtaWQ7XG4gICAgfVxuICAgIHJldHVybiBsb3c7XG4gIH07XG5cbiAgLy8gR2VuZXJhdG9yIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgaW5kZXhPZiBhbmQgbGFzdEluZGV4T2YgZnVuY3Rpb25zLlxuICB2YXIgY3JlYXRlSW5kZXhGaW5kZXIgPSBmdW5jdGlvbihkaXIsIHByZWRpY2F0ZUZpbmQsIHNvcnRlZEluZGV4KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBpZHgpIHtcbiAgICAgIHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICAgIGlmICh0eXBlb2YgaWR4ID09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChkaXIgPiAwKSB7XG4gICAgICAgICAgaSA9IGlkeCA+PSAwID8gaWR4IDogTWF0aC5tYXgoaWR4ICsgbGVuZ3RoLCBpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZW5ndGggPSBpZHggPj0gMCA/IE1hdGgubWluKGlkeCArIDEsIGxlbmd0aCkgOiBpZHggKyBsZW5ndGggKyAxO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNvcnRlZEluZGV4ICYmIGlkeCAmJiBsZW5ndGgpIHtcbiAgICAgICAgaWR4ID0gc29ydGVkSW5kZXgoYXJyYXksIGl0ZW0pO1xuICAgICAgICByZXR1cm4gYXJyYXlbaWR4XSA9PT0gaXRlbSA/IGlkeCA6IC0xO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW0gIT09IGl0ZW0pIHtcbiAgICAgICAgaWR4ID0gcHJlZGljYXRlRmluZChzbGljZS5jYWxsKGFycmF5LCBpLCBsZW5ndGgpLCBfLmlzTmFOKTtcbiAgICAgICAgcmV0dXJuIGlkeCA+PSAwID8gaWR4ICsgaSA6IC0xO1xuICAgICAgfVxuICAgICAgZm9yIChpZHggPSBkaXIgPiAwID8gaSA6IGxlbmd0aCAtIDE7IGlkeCA+PSAwICYmIGlkeCA8IGxlbmd0aDsgaWR4ICs9IGRpcikge1xuICAgICAgICBpZiAoYXJyYXlbaWR4XSA9PT0gaXRlbSkgcmV0dXJuIGlkeDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYW4gaXRlbSBpbiBhbiBhcnJheSxcbiAgLy8gb3IgLTEgaWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1ZGVkIGluIHRoZSBhcnJheS5cbiAgLy8gSWYgdGhlIGFycmF5IGlzIGxhcmdlIGFuZCBhbHJlYWR5IGluIHNvcnQgb3JkZXIsIHBhc3MgYHRydWVgXG4gIC8vIGZvciAqKmlzU29ydGVkKiogdG8gdXNlIGJpbmFyeSBzZWFyY2guXG4gIF8uaW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKDEsIF8uZmluZEluZGV4LCBfLnNvcnRlZEluZGV4KTtcbiAgXy5sYXN0SW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKC0xLCBfLmZpbmRMYXN0SW5kZXgpO1xuXG4gIC8vIEdlbmVyYXRlIGFuIGludGVnZXIgQXJyYXkgY29udGFpbmluZyBhbiBhcml0aG1ldGljIHByb2dyZXNzaW9uLiBBIHBvcnQgb2ZcbiAgLy8gdGhlIG5hdGl2ZSBQeXRob24gYHJhbmdlKClgIGZ1bmN0aW9uLiBTZWVcbiAgLy8gW3RoZSBQeXRob24gZG9jdW1lbnRhdGlvbl0oaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3JhbmdlKS5cbiAgXy5yYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gICAgaWYgKHN0b3AgPT0gbnVsbCkge1xuICAgICAgc3RvcCA9IHN0YXJ0IHx8IDA7XG4gICAgICBzdGFydCA9IDA7XG4gICAgfVxuICAgIGlmICghc3RlcCkge1xuICAgICAgc3RlcCA9IHN0b3AgPCBzdGFydCA/IC0xIDogMTtcbiAgICB9XG5cbiAgICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCksIDApO1xuICAgIHZhciByYW5nZSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBsZW5ndGg7IGlkeCsrLCBzdGFydCArPSBzdGVwKSB7XG4gICAgICByYW5nZVtpZHhdID0gc3RhcnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhbmdlO1xuICB9O1xuXG4gIC8vIENodW5rIGEgc2luZ2xlIGFycmF5IGludG8gbXVsdGlwbGUgYXJyYXlzLCBlYWNoIGNvbnRhaW5pbmcgYGNvdW50YCBvciBmZXdlclxuICAvLyBpdGVtcy5cbiAgXy5jaHVuayA9IGZ1bmN0aW9uKGFycmF5LCBjb3VudCkge1xuICAgIGlmIChjb3VudCA9PSBudWxsIHx8IGNvdW50IDwgMSkgcmV0dXJuIFtdO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgaSA9IDAsIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgICAgcmVzdWx0LnB1c2goc2xpY2UuY2FsbChhcnJheSwgaSwgaSArPSBjb3VudCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIEZ1bmN0aW9uIChhaGVtKSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGV4ZWN1dGUgYSBmdW5jdGlvbiBhcyBhIGNvbnN0cnVjdG9yXG4gIC8vIG9yIGEgbm9ybWFsIGZ1bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgdmFyIGV4ZWN1dGVCb3VuZCA9IGZ1bmN0aW9uKHNvdXJjZUZ1bmMsIGJvdW5kRnVuYywgY29udGV4dCwgY2FsbGluZ0NvbnRleHQsIGFyZ3MpIHtcbiAgICBpZiAoIShjYWxsaW5nQ29udGV4dCBpbnN0YW5jZW9mIGJvdW5kRnVuYykpIHJldHVybiBzb3VyY2VGdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgIHZhciBzZWxmID0gYmFzZUNyZWF0ZShzb3VyY2VGdW5jLnByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IHNvdXJjZUZ1bmMuYXBwbHkoc2VsZiwgYXJncyk7XG4gICAgaWYgKF8uaXNPYmplY3QocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICByZXR1cm4gc2VsZjtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSBmdW5jdGlvbiBib3VuZCB0byBhIGdpdmVuIG9iamVjdCAoYXNzaWduaW5nIGB0aGlzYCwgYW5kIGFyZ3VtZW50cyxcbiAgLy8gb3B0aW9uYWxseSkuIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBGdW5jdGlvbi5iaW5kYCBpZlxuICAvLyBhdmFpbGFibGUuXG4gIF8uYmluZCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oZnVuYywgY29udGV4dCwgYXJncykge1xuICAgIGlmICghXy5pc0Z1bmN0aW9uKGZ1bmMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdCaW5kIG11c3QgYmUgY2FsbGVkIG9uIGEgZnVuY3Rpb24nKTtcbiAgICB2YXIgYm91bmQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGNhbGxBcmdzKSB7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCBjb250ZXh0LCB0aGlzLCBhcmdzLmNvbmNhdChjYWxsQXJncykpO1xuICAgIH0pO1xuICAgIHJldHVybiBib3VuZDtcbiAgfSk7XG5cbiAgLy8gUGFydGlhbGx5IGFwcGx5IGEgZnVuY3Rpb24gYnkgY3JlYXRpbmcgYSB2ZXJzaW9uIHRoYXQgaGFzIGhhZCBzb21lIG9mIGl0c1xuICAvLyBhcmd1bWVudHMgcHJlLWZpbGxlZCwgd2l0aG91dCBjaGFuZ2luZyBpdHMgZHluYW1pYyBgdGhpc2AgY29udGV4dC4gXyBhY3RzXG4gIC8vIGFzIGEgcGxhY2Vob2xkZXIgYnkgZGVmYXVsdCwgYWxsb3dpbmcgYW55IGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyB0byBiZVxuICAvLyBwcmUtZmlsbGVkLiBTZXQgYF8ucGFydGlhbC5wbGFjZWhvbGRlcmAgZm9yIGEgY3VzdG9tIHBsYWNlaG9sZGVyIGFyZ3VtZW50LlxuICBfLnBhcnRpYWwgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGZ1bmMsIGJvdW5kQXJncykge1xuICAgIHZhciBwbGFjZWhvbGRlciA9IF8ucGFydGlhbC5wbGFjZWhvbGRlcjtcbiAgICB2YXIgYm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBwb3NpdGlvbiA9IDAsIGxlbmd0aCA9IGJvdW5kQXJncy5sZW5ndGg7XG4gICAgICB2YXIgYXJncyA9IEFycmF5KGxlbmd0aCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFyZ3NbaV0gPSBib3VuZEFyZ3NbaV0gPT09IHBsYWNlaG9sZGVyID8gYXJndW1lbnRzW3Bvc2l0aW9uKytdIDogYm91bmRBcmdzW2ldO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgYXJndW1lbnRzLmxlbmd0aCkgYXJncy5wdXNoKGFyZ3VtZW50c1twb3NpdGlvbisrXSk7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCB0aGlzLCB0aGlzLCBhcmdzKTtcbiAgICB9O1xuICAgIHJldHVybiBib3VuZDtcbiAgfSk7XG5cbiAgXy5wYXJ0aWFsLnBsYWNlaG9sZGVyID0gXztcblxuICAvLyBCaW5kIGEgbnVtYmVyIG9mIGFuIG9iamVjdCdzIG1ldGhvZHMgdG8gdGhhdCBvYmplY3QuIFJlbWFpbmluZyBhcmd1bWVudHNcbiAgLy8gYXJlIHRoZSBtZXRob2QgbmFtZXMgdG8gYmUgYm91bmQuIFVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhhdCBhbGwgY2FsbGJhY2tzXG4gIC8vIGRlZmluZWQgb24gYW4gb2JqZWN0IGJlbG9uZyB0byBpdC5cbiAgXy5iaW5kQWxsID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihvYmosIGtleXMpIHtcbiAgICBrZXlzID0gZmxhdHRlbihrZXlzLCBmYWxzZSwgZmFsc2UpO1xuICAgIHZhciBpbmRleCA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChpbmRleCA8IDEpIHRocm93IG5ldyBFcnJvcignYmluZEFsbCBtdXN0IGJlIHBhc3NlZCBmdW5jdGlvbiBuYW1lcycpO1xuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpbmRleF07XG4gICAgICBvYmpba2V5XSA9IF8uYmluZChvYmpba2V5XSwgb2JqKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIE1lbW9pemUgYW4gZXhwZW5zaXZlIGZ1bmN0aW9uIGJ5IHN0b3JpbmcgaXRzIHJlc3VsdHMuXG4gIF8ubWVtb2l6ZSA9IGZ1bmN0aW9uKGZ1bmMsIGhhc2hlcikge1xuICAgIHZhciBtZW1vaXplID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgICB2YXIgY2FjaGUgPSBtZW1vaXplLmNhY2hlO1xuICAgICAgdmFyIGFkZHJlc3MgPSAnJyArIChoYXNoZXIgPyBoYXNoZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGtleSk7XG4gICAgICBpZiAoIWhhcyhjYWNoZSwgYWRkcmVzcykpIGNhY2hlW2FkZHJlc3NdID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgcmV0dXJuIGNhY2hlW2FkZHJlc3NdO1xuICAgIH07XG4gICAgbWVtb2l6ZS5jYWNoZSA9IHt9O1xuICAgIHJldHVybiBtZW1vaXplO1xuICB9O1xuXG4gIC8vIERlbGF5cyBhIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgYW5kIHRoZW4gY2FsbHNcbiAgLy8gaXQgd2l0aCB0aGUgYXJndW1lbnRzIHN1cHBsaWVkLlxuICBfLmRlbGF5ID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihmdW5jLCB3YWl0LCBhcmdzKSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9LCB3YWl0KTtcbiAgfSk7XG5cbiAgLy8gRGVmZXJzIGEgZnVuY3Rpb24sIHNjaGVkdWxpbmcgaXQgdG8gcnVuIGFmdGVyIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzXG4gIC8vIGNsZWFyZWQuXG4gIF8uZGVmZXIgPSBfLnBhcnRpYWwoXy5kZWxheSwgXywgMSk7XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCB3aGVuIGludm9rZWQsIHdpbGwgb25seSBiZSB0cmlnZ2VyZWQgYXQgbW9zdCBvbmNlXG4gIC8vIGR1cmluZyBhIGdpdmVuIHdpbmRvdyBvZiB0aW1lLiBOb3JtYWxseSwgdGhlIHRocm90dGxlZCBmdW5jdGlvbiB3aWxsIHJ1blxuICAvLyBhcyBtdWNoIGFzIGl0IGNhbiwgd2l0aG91dCBldmVyIGdvaW5nIG1vcmUgdGhhbiBvbmNlIHBlciBgd2FpdGAgZHVyYXRpb247XG4gIC8vIGJ1dCBpZiB5b3UnZCBsaWtlIHRvIGRpc2FibGUgdGhlIGV4ZWN1dGlvbiBvbiB0aGUgbGVhZGluZyBlZGdlLCBwYXNzXG4gIC8vIGB7bGVhZGluZzogZmFsc2V9YC4gVG8gZGlzYWJsZSBleGVjdXRpb24gb24gdGhlIHRyYWlsaW5nIGVkZ2UsIGRpdHRvLlxuICBfLnRocm90dGxlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICAgIHZhciB0aW1lb3V0LCBjb250ZXh0LCBhcmdzLCByZXN1bHQ7XG4gICAgdmFyIHByZXZpb3VzID0gMDtcbiAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcblxuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcHJldmlvdXMgPSBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlID8gMCA6IF8ubm93KCk7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICB9O1xuXG4gICAgdmFyIHRocm90dGxlZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG5vdyA9IF8ubm93KCk7XG4gICAgICBpZiAoIXByZXZpb3VzICYmIG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UpIHByZXZpb3VzID0gbm93O1xuICAgICAgdmFyIHJlbWFpbmluZyA9IHdhaXQgLSAobm93IC0gcHJldmlvdXMpO1xuICAgICAgY29udGV4dCA9IHRoaXM7XG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQpIHtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXMgPSBub3c7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxzZSkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgcmVtYWluaW5nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHRocm90dGxlZC5jYW5jZWwgPSBmdW5jdGlvbigpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIHByZXZpb3VzID0gMDtcbiAgICAgIHRpbWVvdXQgPSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgfTtcblxuICAgIHJldHVybiB0aHJvdHRsZWQ7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCBhcyBsb25nIGFzIGl0IGNvbnRpbnVlcyB0byBiZSBpbnZva2VkLCB3aWxsIG5vdFxuICAvLyBiZSB0cmlnZ2VyZWQuIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciBpdCBzdG9wcyBiZWluZyBjYWxsZWQgZm9yXG4gIC8vIE4gbWlsbGlzZWNvbmRzLiBJZiBgaW1tZWRpYXRlYCBpcyBwYXNzZWQsIHRyaWdnZXIgdGhlIGZ1bmN0aW9uIG9uIHRoZVxuICAvLyBsZWFkaW5nIGVkZ2UsIGluc3RlYWQgb2YgdGhlIHRyYWlsaW5nLlxuICBfLmRlYm91bmNlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XG4gICAgdmFyIHRpbWVvdXQsIHJlc3VsdDtcblxuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKGNvbnRleHQsIGFyZ3MpIHtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgaWYgKGFyZ3MpIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfTtcblxuICAgIHZhciBkZWJvdW5jZWQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgIGlmICh0aW1lb3V0KSBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBpZiAoaW1tZWRpYXRlKSB7XG4gICAgICAgIHZhciBjYWxsTm93ID0gIXRpbWVvdXQ7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgICAgICAgaWYgKGNhbGxOb3cpIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aW1lb3V0ID0gXy5kZWxheShsYXRlciwgd2FpdCwgdGhpcywgYXJncyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG5cbiAgICBkZWJvdW5jZWQuY2FuY2VsID0gZnVuY3Rpb24oKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGRlYm91bmNlZDtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBmdW5jdGlvbiBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIHNlY29uZCxcbiAgLy8gYWxsb3dpbmcgeW91IHRvIGFkanVzdCBhcmd1bWVudHMsIHJ1biBjb2RlIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZFxuICAvLyBjb25kaXRpb25hbGx5IGV4ZWN1dGUgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxuICBfLndyYXAgPSBmdW5jdGlvbihmdW5jLCB3cmFwcGVyKSB7XG4gICAgcmV0dXJuIF8ucGFydGlhbCh3cmFwcGVyLCBmdW5jKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgbmVnYXRlZCB2ZXJzaW9uIG9mIHRoZSBwYXNzZWQtaW4gcHJlZGljYXRlLlxuICBfLm5lZ2F0ZSA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBpcyB0aGUgY29tcG9zaXRpb24gb2YgYSBsaXN0IG9mIGZ1bmN0aW9ucywgZWFjaFxuICAvLyBjb25zdW1pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCBmb2xsb3dzLlxuICBfLmNvbXBvc2UgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2YXIgc3RhcnQgPSBhcmdzLmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGkgPSBzdGFydDtcbiAgICAgIHZhciByZXN1bHQgPSBhcmdzW3N0YXJ0XS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgd2hpbGUgKGktLSkgcmVzdWx0ID0gYXJnc1tpXS5jYWxsKHRoaXMsIHJlc3VsdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIG9uIGFuZCBhZnRlciB0aGUgTnRoIGNhbGwuXG4gIF8uYWZ0ZXIgPSBmdW5jdGlvbih0aW1lcywgZnVuYykge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgtLXRpbWVzIDwgMSkge1xuICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIHVwIHRvIChidXQgbm90IGluY2x1ZGluZykgdGhlIE50aCBjYWxsLlxuICBfLmJlZm9yZSA9IGZ1bmN0aW9uKHRpbWVzLCBmdW5jKSB7XG4gICAgdmFyIG1lbW87XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKC0tdGltZXMgPiAwKSB7XG4gICAgICAgIG1lbW8gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgICBpZiAodGltZXMgPD0gMSkgZnVuYyA9IG51bGw7XG4gICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgYXQgbW9zdCBvbmUgdGltZSwgbm8gbWF0dGVyIGhvd1xuICAvLyBvZnRlbiB5b3UgY2FsbCBpdC4gVXNlZnVsIGZvciBsYXp5IGluaXRpYWxpemF0aW9uLlxuICBfLm9uY2UgPSBfLnBhcnRpYWwoXy5iZWZvcmUsIDIpO1xuXG4gIF8ucmVzdEFyZ3VtZW50cyA9IHJlc3RBcmd1bWVudHM7XG5cbiAgLy8gT2JqZWN0IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gS2V5cyBpbiBJRSA8IDkgdGhhdCB3b24ndCBiZSBpdGVyYXRlZCBieSBgZm9yIGtleSBpbiAuLi5gIGFuZCB0aHVzIG1pc3NlZC5cbiAgdmFyIGhhc0VudW1CdWcgPSAhe3RvU3RyaW5nOiBudWxsfS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgndG9TdHJpbmcnKTtcbiAgdmFyIG5vbkVudW1lcmFibGVQcm9wcyA9IFsndmFsdWVPZicsICdpc1Byb3RvdHlwZU9mJywgJ3RvU3RyaW5nJyxcbiAgICAncHJvcGVydHlJc0VudW1lcmFibGUnLCAnaGFzT3duUHJvcGVydHknLCAndG9Mb2NhbGVTdHJpbmcnXTtcblxuICB2YXIgY29sbGVjdE5vbkVudW1Qcm9wcyA9IGZ1bmN0aW9uKG9iaiwga2V5cykge1xuICAgIHZhciBub25FbnVtSWR4ID0gbm9uRW51bWVyYWJsZVByb3BzLmxlbmd0aDtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBvYmouY29uc3RydWN0b3I7XG4gICAgdmFyIHByb3RvID0gXy5pc0Z1bmN0aW9uKGNvbnN0cnVjdG9yKSAmJiBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgfHwgT2JqUHJvdG87XG5cbiAgICAvLyBDb25zdHJ1Y3RvciBpcyBhIHNwZWNpYWwgY2FzZS5cbiAgICB2YXIgcHJvcCA9ICdjb25zdHJ1Y3Rvcic7XG4gICAgaWYgKGhhcyhvYmosIHByb3ApICYmICFfLmNvbnRhaW5zKGtleXMsIHByb3ApKSBrZXlzLnB1c2gocHJvcCk7XG5cbiAgICB3aGlsZSAobm9uRW51bUlkeC0tKSB7XG4gICAgICBwcm9wID0gbm9uRW51bWVyYWJsZVByb3BzW25vbkVudW1JZHhdO1xuICAgICAgaWYgKHByb3AgaW4gb2JqICYmIG9ialtwcm9wXSAhPT0gcHJvdG9bcHJvcF0gJiYgIV8uY29udGFpbnMoa2V5cywgcHJvcCkpIHtcbiAgICAgICAga2V5cy5wdXNoKHByb3ApO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3Mgb3duIHByb3BlcnRpZXMuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBPYmplY3Qua2V5c2AuXG4gIF8ua2V5cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gW107XG4gICAgaWYgKG5hdGl2ZUtleXMpIHJldHVybiBuYXRpdmVLZXlzKG9iaik7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBpZiAoaGFzKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gICAgLy8gQWhlbSwgSUUgPCA5LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgYWxsIHRoZSBwcm9wZXJ0eSBuYW1lcyBvZiBhbiBvYmplY3QuXG4gIF8uYWxsS2V5cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gW107XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBrZXlzLnB1c2goa2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5cztcbiAgfTtcblxuICAvLyBSZXRyaWV2ZSB0aGUgdmFsdWVzIG9mIGFuIG9iamVjdCdzIHByb3BlcnRpZXMuXG4gIF8udmFsdWVzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIHZhbHVlcyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWVzW2ldID0gb2JqW2tleXNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9O1xuXG4gIC8vIFJldHVybnMgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxlbWVudCBvZiB0aGUgb2JqZWN0LlxuICAvLyBJbiBjb250cmFzdCB0byBfLm1hcCBpdCByZXR1cm5zIGFuIG9iamVjdC5cbiAgXy5tYXBPYmplY3QgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0ga2V5cy5sZW5ndGgsXG4gICAgICAgIHJlc3VsdHMgPSB7fTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgcmVzdWx0c1tjdXJyZW50S2V5XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gQ29udmVydCBhbiBvYmplY3QgaW50byBhIGxpc3Qgb2YgYFtrZXksIHZhbHVlXWAgcGFpcnMuXG4gIC8vIFRoZSBvcHBvc2l0ZSBvZiBfLm9iamVjdC5cbiAgXy5wYWlycyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBwYWlycyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcGFpcnNbaV0gPSBba2V5c1tpXSwgb2JqW2tleXNbaV1dXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhaXJzO1xuICB9O1xuXG4gIC8vIEludmVydCB0aGUga2V5cyBhbmQgdmFsdWVzIG9mIGFuIG9iamVjdC4gVGhlIHZhbHVlcyBtdXN0IGJlIHNlcmlhbGl6YWJsZS5cbiAgXy5pbnZlcnQgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W29ialtrZXlzW2ldXV0gPSBrZXlzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHNvcnRlZCBsaXN0IG9mIHRoZSBmdW5jdGlvbiBuYW1lcyBhdmFpbGFibGUgb24gdGhlIG9iamVjdC5cbiAgLy8gQWxpYXNlZCBhcyBgbWV0aG9kc2AuXG4gIF8uZnVuY3Rpb25zID0gXy5tZXRob2RzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIG5hbWVzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihvYmpba2V5XSkpIG5hbWVzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWVzLnNvcnQoKTtcbiAgfTtcblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYXNzaWduZXIgZnVuY3Rpb25zLlxuICB2YXIgY3JlYXRlQXNzaWduZXIgPSBmdW5jdGlvbihrZXlzRnVuYywgZGVmYXVsdHMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIGlmIChkZWZhdWx0cykgb2JqID0gT2JqZWN0KG9iaik7XG4gICAgICBpZiAobGVuZ3RoIDwgMiB8fCBvYmogPT0gbnVsbCkgcmV0dXJuIG9iajtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF0sXG4gICAgICAgICAgICBrZXlzID0ga2V5c0Z1bmMoc291cmNlKSxcbiAgICAgICAgICAgIGwgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAoIWRlZmF1bHRzIHx8IG9ialtrZXldID09PSB2b2lkIDApIG9ialtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfTtcbiAgfTtcblxuICAvLyBFeHRlbmQgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIHByb3BlcnRpZXMgaW4gcGFzc2VkLWluIG9iamVjdChzKS5cbiAgXy5leHRlbmQgPSBjcmVhdGVBc3NpZ25lcihfLmFsbEtleXMpO1xuXG4gIC8vIEFzc2lnbnMgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIG93biBwcm9wZXJ0aWVzIGluIHRoZSBwYXNzZWQtaW4gb2JqZWN0KHMpLlxuICAvLyAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnbilcbiAgXy5leHRlbmRPd24gPSBfLmFzc2lnbiA9IGNyZWF0ZUFzc2lnbmVyKF8ua2V5cyk7XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3Qga2V5IG9uIGFuIG9iamVjdCB0aGF0IHBhc3NlcyBhIHByZWRpY2F0ZSB0ZXN0LlxuICBfLmZpbmRLZXkgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKSwga2V5O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpba2V5XSwga2V5LCBvYmopKSByZXR1cm4ga2V5O1xuICAgIH1cbiAgfTtcblxuICAvLyBJbnRlcm5hbCBwaWNrIGhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgYG9iamAgaGFzIGtleSBga2V5YC5cbiAgdmFyIGtleUluT2JqID0gZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqKSB7XG4gICAgcmV0dXJuIGtleSBpbiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IG9ubHkgY29udGFpbmluZyB0aGUgd2hpdGVsaXN0ZWQgcHJvcGVydGllcy5cbiAgXy5waWNrID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihvYmosIGtleXMpIHtcbiAgICB2YXIgcmVzdWx0ID0ge30sIGl0ZXJhdGVlID0ga2V5c1swXTtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiByZXN1bHQ7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihpdGVyYXRlZSkpIHtcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwga2V5c1sxXSk7XG4gICAgICBrZXlzID0gXy5hbGxLZXlzKG9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVlID0ga2V5SW5PYmo7XG4gICAgICBrZXlzID0gZmxhdHRlbihrZXlzLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgb2JqID0gT2JqZWN0KG9iaik7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgaWYgKGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9iaikpIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuXG4gIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCB3aXRob3V0IHRoZSBibGFja2xpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLm9taXQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwga2V5cykge1xuICAgIHZhciBpdGVyYXRlZSA9IGtleXNbMF0sIGNvbnRleHQ7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihpdGVyYXRlZSkpIHtcbiAgICAgIGl0ZXJhdGVlID0gXy5uZWdhdGUoaXRlcmF0ZWUpO1xuICAgICAgaWYgKGtleXMubGVuZ3RoID4gMSkgY29udGV4dCA9IGtleXNbMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleXMgPSBfLm1hcChmbGF0dGVuKGtleXMsIGZhbHNlLCBmYWxzZSksIFN0cmluZyk7XG4gICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKGtleXMsIGtleSk7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gXy5waWNrKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpO1xuICB9KTtcblxuICAvLyBGaWxsIGluIGEgZ2l2ZW4gb2JqZWN0IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzLlxuICBfLmRlZmF1bHRzID0gY3JlYXRlQXNzaWduZXIoXy5hbGxLZXlzLCB0cnVlKTtcblxuICAvLyBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIGdpdmVuIHByb3RvdHlwZSBvYmplY3QuXG4gIC8vIElmIGFkZGl0aW9uYWwgcHJvcGVydGllcyBhcmUgcHJvdmlkZWQgdGhlbiB0aGV5IHdpbGwgYmUgYWRkZWQgdG8gdGhlXG4gIC8vIGNyZWF0ZWQgb2JqZWN0LlxuICBfLmNyZWF0ZSA9IGZ1bmN0aW9uKHByb3RvdHlwZSwgcHJvcHMpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUNyZWF0ZShwcm90b3R5cGUpO1xuICAgIGlmIChwcm9wcykgXy5leHRlbmRPd24ocmVzdWx0LCBwcm9wcyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSAoc2hhbGxvdy1jbG9uZWQpIGR1cGxpY2F0ZSBvZiBhbiBvYmplY3QuXG4gIF8uY2xvbmUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajtcbiAgICByZXR1cm4gXy5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF8uZXh0ZW5kKHt9LCBvYmopO1xuICB9O1xuXG4gIC8vIEludm9rZXMgaW50ZXJjZXB0b3Igd2l0aCB0aGUgb2JqLCBhbmQgdGhlbiByZXR1cm5zIG9iai5cbiAgLy8gVGhlIHByaW1hcnkgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBcInRhcCBpbnRvXCIgYSBtZXRob2QgY2hhaW4sIGluXG4gIC8vIG9yZGVyIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBpbnRlcm1lZGlhdGUgcmVzdWx0cyB3aXRoaW4gdGhlIGNoYWluLlxuICBfLnRhcCA9IGZ1bmN0aW9uKG9iaiwgaW50ZXJjZXB0b3IpIHtcbiAgICBpbnRlcmNlcHRvcihvYmopO1xuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2YgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8uaXNNYXRjaCA9IGZ1bmN0aW9uKG9iamVjdCwgYXR0cnMpIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhhdHRycyksIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuICFsZW5ndGg7XG4gICAgdmFyIG9iaiA9IE9iamVjdChvYmplY3QpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKGF0dHJzW2tleV0gIT09IG9ialtrZXldIHx8ICEoa2V5IGluIG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cblxuICAvLyBJbnRlcm5hbCByZWN1cnNpdmUgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgYGlzRXF1YWxgLlxuICB2YXIgZXEsIGRlZXBFcTtcbiAgZXEgPSBmdW5jdGlvbihhLCBiLCBhU3RhY2ssIGJTdGFjaykge1xuICAgIC8vIElkZW50aWNhbCBvYmplY3RzIGFyZSBlcXVhbC4gYDAgPT09IC0wYCwgYnV0IHRoZXkgYXJlbid0IGlkZW50aWNhbC5cbiAgICAvLyBTZWUgdGhlIFtIYXJtb255IGBlZ2FsYCBwcm9wb3NhbF0oaHR0cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTplZ2FsKS5cbiAgICBpZiAoYSA9PT0gYikgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT09IDEgLyBiO1xuICAgIC8vIGBudWxsYCBvciBgdW5kZWZpbmVkYCBvbmx5IGVxdWFsIHRvIGl0c2VsZiAoc3RyaWN0IGNvbXBhcmlzb24pLlxuICAgIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2ZS5cbiAgICBpZiAoYSAhPT0gYSkgcmV0dXJuIGIgIT09IGI7XG4gICAgLy8gRXhoYXVzdCBwcmltaXRpdmUgY2hlY2tzXG4gICAgdmFyIHR5cGUgPSB0eXBlb2YgYTtcbiAgICBpZiAodHlwZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBkZWVwRXEoYSwgYiwgYVN0YWNrLCBiU3RhY2spO1xuICB9O1xuXG4gIC8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBgaXNFcXVhbGAuXG4gIGRlZXBFcSA9IGZ1bmN0aW9uKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7XG4gICAgLy8gVW53cmFwIGFueSB3cmFwcGVkIG9iamVjdHMuXG4gICAgaWYgKGEgaW5zdGFuY2VvZiBfKSBhID0gYS5fd3JhcHBlZDtcbiAgICBpZiAoYiBpbnN0YW5jZW9mIF8pIGIgPSBiLl93cmFwcGVkO1xuICAgIC8vIENvbXBhcmUgYFtbQ2xhc3NdXWAgbmFtZXMuXG4gICAgdmFyIGNsYXNzTmFtZSA9IHRvU3RyaW5nLmNhbGwoYSk7XG4gICAgaWYgKGNsYXNzTmFtZSAhPT0gdG9TdHJpbmcuY2FsbChiKSkgcmV0dXJuIGZhbHNlO1xuICAgIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4gICAgICAvLyBTdHJpbmdzLCBudW1iZXJzLCByZWd1bGFyIGV4cHJlc3Npb25zLCBkYXRlcywgYW5kIGJvb2xlYW5zIGFyZSBjb21wYXJlZCBieSB2YWx1ZS5cbiAgICAgIGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XG4gICAgICAvLyBSZWdFeHBzIGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MgZm9yIGNvbXBhcmlzb24gKE5vdGU6ICcnICsgL2EvaSA9PT0gJy9hL2knKVxuICAgICAgY2FzZSAnW29iamVjdCBTdHJpbmddJzpcbiAgICAgICAgLy8gUHJpbWl0aXZlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBvYmplY3Qgd3JhcHBlcnMgYXJlIGVxdWl2YWxlbnQ7IHRodXMsIGBcIjVcImAgaXNcbiAgICAgICAgLy8gZXF1aXZhbGVudCB0byBgbmV3IFN0cmluZyhcIjVcIilgLlxuICAgICAgICByZXR1cm4gJycgKyBhID09PSAnJyArIGI7XG4gICAgICBjYXNlICdbb2JqZWN0IE51bWJlcl0nOlxuICAgICAgICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICAgICAgICAvLyBPYmplY3QoTmFOKSBpcyBlcXVpdmFsZW50IHRvIE5hTi5cbiAgICAgICAgaWYgKCthICE9PSArYSkgcmV0dXJuICtiICE9PSArYjtcbiAgICAgICAgLy8gQW4gYGVnYWxgIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkIGZvciBvdGhlciBudW1lcmljIHZhbHVlcy5cbiAgICAgICAgcmV0dXJuICthID09PSAwID8gMSAvICthID09PSAxIC8gYiA6ICthID09PSArYjtcbiAgICAgIGNhc2UgJ1tvYmplY3QgRGF0ZV0nOlxuICAgICAgY2FzZSAnW29iamVjdCBCb29sZWFuXSc6XG4gICAgICAgIC8vIENvZXJjZSBkYXRlcyBhbmQgYm9vbGVhbnMgdG8gbnVtZXJpYyBwcmltaXRpdmUgdmFsdWVzLiBEYXRlcyBhcmUgY29tcGFyZWQgYnkgdGhlaXJcbiAgICAgICAgLy8gbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zLiBOb3RlIHRoYXQgaW52YWxpZCBkYXRlcyB3aXRoIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9uc1xuICAgICAgICAvLyBvZiBgTmFOYCBhcmUgbm90IGVxdWl2YWxlbnQuXG4gICAgICAgIHJldHVybiArYSA9PT0gK2I7XG4gICAgICBjYXNlICdbb2JqZWN0IFN5bWJvbF0nOlxuICAgICAgICByZXR1cm4gU3ltYm9sUHJvdG8udmFsdWVPZi5jYWxsKGEpID09PSBTeW1ib2xQcm90by52YWx1ZU9mLmNhbGwoYik7XG4gICAgfVxuXG4gICAgdmFyIGFyZUFycmF5cyA9IGNsYXNzTmFtZSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICBpZiAoIWFyZUFycmF5cykge1xuICAgICAgaWYgKHR5cGVvZiBhICE9ICdvYmplY3QnIHx8IHR5cGVvZiBiICE9ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIE9iamVjdHMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1aXZhbGVudCwgYnV0IGBPYmplY3RgcyBvciBgQXJyYXlgc1xuICAgICAgLy8gZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFyZS5cbiAgICAgIHZhciBhQ3RvciA9IGEuY29uc3RydWN0b3IsIGJDdG9yID0gYi5jb25zdHJ1Y3RvcjtcbiAgICAgIGlmIChhQ3RvciAhPT0gYkN0b3IgJiYgIShfLmlzRnVuY3Rpb24oYUN0b3IpICYmIGFDdG9yIGluc3RhbmNlb2YgYUN0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmlzRnVuY3Rpb24oYkN0b3IpICYmIGJDdG9yIGluc3RhbmNlb2YgYkN0b3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICYmICgnY29uc3RydWN0b3InIGluIGEgJiYgJ2NvbnN0cnVjdG9yJyBpbiBiKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFzc3VtZSBlcXVhbGl0eSBmb3IgY3ljbGljIHN0cnVjdHVyZXMuIFRoZSBhbGdvcml0aG0gZm9yIGRldGVjdGluZyBjeWNsaWNcbiAgICAvLyBzdHJ1Y3R1cmVzIGlzIGFkYXB0ZWQgZnJvbSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLCBhYnN0cmFjdCBvcGVyYXRpb24gYEpPYC5cblxuICAgIC8vIEluaXRpYWxpemluZyBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAvLyBJdCdzIGRvbmUgaGVyZSBzaW5jZSB3ZSBvbmx5IG5lZWQgdGhlbSBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzIGNvbXBhcmlzb24uXG4gICAgYVN0YWNrID0gYVN0YWNrIHx8IFtdO1xuICAgIGJTdGFjayA9IGJTdGFjayB8fCBbXTtcbiAgICB2YXIgbGVuZ3RoID0gYVN0YWNrLmxlbmd0aDtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIC8vIExpbmVhciBzZWFyY2guIFBlcmZvcm1hbmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZlxuICAgICAgLy8gdW5pcXVlIG5lc3RlZCBzdHJ1Y3R1cmVzLlxuICAgICAgaWYgKGFTdGFja1tsZW5ndGhdID09PSBhKSByZXR1cm4gYlN0YWNrW2xlbmd0aF0gPT09IGI7XG4gICAgfVxuXG4gICAgLy8gQWRkIHRoZSBmaXJzdCBvYmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIGFTdGFjay5wdXNoKGEpO1xuICAgIGJTdGFjay5wdXNoKGIpO1xuXG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgaWYgKGFyZUFycmF5cykge1xuICAgICAgLy8gQ29tcGFyZSBhcnJheSBsZW5ndGhzIHRvIGRldGVybWluZSBpZiBhIGRlZXAgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkuXG4gICAgICBsZW5ndGggPSBhLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgdGhlIGNvbnRlbnRzLCBpZ25vcmluZyBub24tbnVtZXJpYyBwcm9wZXJ0aWVzLlxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIGlmICghZXEoYVtsZW5ndGhdLCBiW2xlbmd0aF0sIGFTdGFjaywgYlN0YWNrKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgb2JqZWN0cy5cbiAgICAgIHZhciBrZXlzID0gXy5rZXlzKGEpLCBrZXk7XG4gICAgICBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICAgIC8vIEVuc3VyZSB0aGF0IGJvdGggb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIG51bWJlciBvZiBwcm9wZXJ0aWVzIGJlZm9yZSBjb21wYXJpbmcgZGVlcCBlcXVhbGl0eS5cbiAgICAgIGlmIChfLmtleXMoYikubGVuZ3RoICE9PSBsZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICAvLyBEZWVwIGNvbXBhcmUgZWFjaCBtZW1iZXJcbiAgICAgICAga2V5ID0ga2V5c1tsZW5ndGhdO1xuICAgICAgICBpZiAoIShoYXMoYiwga2V5KSAmJiBlcShhW2tleV0sIGJba2V5XSwgYVN0YWNrLCBiU3RhY2spKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBSZW1vdmUgdGhlIGZpcnN0IG9iamVjdCBmcm9tIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3RhY2sucG9wKCk7XG4gICAgYlN0YWNrLnBvcCgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIFBlcmZvcm0gYSBkZWVwIGNvbXBhcmlzb24gdG8gY2hlY2sgaWYgdHdvIG9iamVjdHMgYXJlIGVxdWFsLlxuICBfLmlzRXF1YWwgPSBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGVxKGEsIGIpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gYXJyYXksIHN0cmluZywgb3Igb2JqZWN0IGVtcHR5P1xuICAvLyBBbiBcImVtcHR5XCIgb2JqZWN0IGhhcyBubyBlbnVtZXJhYmxlIG93bi1wcm9wZXJ0aWVzLlxuICBfLmlzRW1wdHkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopICYmIChfLmlzQXJyYXkob2JqKSB8fCBfLmlzU3RyaW5nKG9iaikgfHwgXy5pc0FyZ3VtZW50cyhvYmopKSkgcmV0dXJuIG9iai5sZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIF8ua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgRE9NIGVsZW1lbnQ/XG4gIF8uaXNFbGVtZW50ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgPT09IDEpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYW4gYXJyYXk/XG4gIC8vIERlbGVnYXRlcyB0byBFQ01BNSdzIG5hdGl2ZSBBcnJheS5pc0FycmF5XG4gIF8uaXNBcnJheSA9IG5hdGl2ZUlzQXJyYXkgfHwgZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIGFuIG9iamVjdD9cbiAgXy5pc09iamVjdCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgfTtcblxuICAvLyBBZGQgc29tZSBpc1R5cGUgbWV0aG9kczogaXNBcmd1bWVudHMsIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBpc051bWJlciwgaXNEYXRlLCBpc1JlZ0V4cCwgaXNFcnJvciwgaXNNYXAsIGlzV2Vha01hcCwgaXNTZXQsIGlzV2Vha1NldC5cbiAgXy5lYWNoKFsnQXJndW1lbnRzJywgJ0Z1bmN0aW9uJywgJ1N0cmluZycsICdOdW1iZXInLCAnRGF0ZScsICdSZWdFeHAnLCAnRXJyb3InLCAnU3ltYm9sJywgJ01hcCcsICdXZWFrTWFwJywgJ1NldCcsICdXZWFrU2V0J10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBfWydpcycgKyBuYW1lXSA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgJyArIG5hbWUgKyAnXSc7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRGVmaW5lIGEgZmFsbGJhY2sgdmVyc2lvbiBvZiB0aGUgbWV0aG9kIGluIGJyb3dzZXJzIChhaGVtLCBJRSA8IDkpLCB3aGVyZVxuICAvLyB0aGVyZSBpc24ndCBhbnkgaW5zcGVjdGFibGUgXCJBcmd1bWVudHNcIiB0eXBlLlxuICBpZiAoIV8uaXNBcmd1bWVudHMoYXJndW1lbnRzKSkge1xuICAgIF8uaXNBcmd1bWVudHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBoYXMob2JqLCAnY2FsbGVlJyk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIE9wdGltaXplIGBpc0Z1bmN0aW9uYCBpZiBhcHByb3ByaWF0ZS4gV29yayBhcm91bmQgc29tZSB0eXBlb2YgYnVncyBpbiBvbGQgdjgsXG4gIC8vIElFIDExICgjMTYyMSksIFNhZmFyaSA4ICgjMTkyOSksIGFuZCBQaGFudG9tSlMgKCMyMjM2KS5cbiAgdmFyIG5vZGVsaXN0ID0gcm9vdC5kb2N1bWVudCAmJiByb290LmRvY3VtZW50LmNoaWxkTm9kZXM7XG4gIGlmICh0eXBlb2YgLy4vICE9ICdmdW5jdGlvbicgJiYgdHlwZW9mIEludDhBcnJheSAhPSAnb2JqZWN0JyAmJiB0eXBlb2Ygbm9kZWxpc3QgIT0gJ2Z1bmN0aW9uJykge1xuICAgIF8uaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT0gJ2Z1bmN0aW9uJyB8fCBmYWxzZTtcbiAgICB9O1xuICB9XG5cbiAgLy8gSXMgYSBnaXZlbiBvYmplY3QgYSBmaW5pdGUgbnVtYmVyP1xuICBfLmlzRmluaXRlID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuICFfLmlzU3ltYm9sKG9iaikgJiYgaXNGaW5pdGUob2JqKSAmJiAhaXNOYU4ocGFyc2VGbG9hdChvYmopKTtcbiAgfTtcblxuICAvLyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYE5hTmA/XG4gIF8uaXNOYU4gPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gXy5pc051bWJlcihvYmopICYmIGlzTmFOKG9iaik7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIGJvb2xlYW4/XG4gIF8uaXNCb29sZWFuID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdHJ1ZSB8fCBvYmogPT09IGZhbHNlIHx8IHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQm9vbGVhbl0nO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgZXF1YWwgdG8gbnVsbD9cbiAgXy5pc051bGwgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSBudWxsO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgdW5kZWZpbmVkP1xuICBfLmlzVW5kZWZpbmVkID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdm9pZCAwO1xuICB9O1xuXG4gIC8vIFNob3J0Y3V0IGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gcHJvcGVydHkgZGlyZWN0bHlcbiAgLy8gb24gaXRzZWxmIChpbiBvdGhlciB3b3Jkcywgbm90IG9uIGEgcHJvdG90eXBlKS5cbiAgXy5oYXMgPSBmdW5jdGlvbihvYmosIHBhdGgpIHtcbiAgICBpZiAoIV8uaXNBcnJheShwYXRoKSkge1xuICAgICAgcmV0dXJuIGhhcyhvYmosIHBhdGgpO1xuICAgIH1cbiAgICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHBhdGhbaV07XG4gICAgICBpZiAob2JqID09IG51bGwgfHwgIWhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIG9iaiA9IG9ialtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gISFsZW5ndGg7XG4gIH07XG5cbiAgLy8gVXRpbGl0eSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBSdW4gVW5kZXJzY29yZS5qcyBpbiAqbm9Db25mbGljdCogbW9kZSwgcmV0dXJuaW5nIHRoZSBgX2AgdmFyaWFibGUgdG8gaXRzXG4gIC8vIHByZXZpb3VzIG93bmVyLiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdC5cbiAgXy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgcm9vdC5fID0gcHJldmlvdXNVbmRlcnNjb3JlO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIEtlZXAgdGhlIGlkZW50aXR5IGZ1bmN0aW9uIGFyb3VuZCBmb3IgZGVmYXVsdCBpdGVyYXRlZXMuXG4gIF8uaWRlbnRpdHkgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcblxuICAvLyBQcmVkaWNhdGUtZ2VuZXJhdGluZyBmdW5jdGlvbnMuIE9mdGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuXG4gIF8uY29uc3RhbnQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICB9O1xuXG4gIF8ubm9vcCA9IGZ1bmN0aW9uKCl7fTtcblxuICAvLyBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBwYXNzZWQgYW4gb2JqZWN0LCB3aWxsIHRyYXZlcnNlIHRoYXQgb2JqZWN04oCZc1xuICAvLyBwcm9wZXJ0aWVzIGRvd24gdGhlIGdpdmVuIGBwYXRoYCwgc3BlY2lmaWVkIGFzIGFuIGFycmF5IG9mIGtleXMgb3IgaW5kZXhlcy5cbiAgXy5wcm9wZXJ0eSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICBpZiAoIV8uaXNBcnJheShwYXRoKSkge1xuICAgICAgcmV0dXJuIHNoYWxsb3dQcm9wZXJ0eShwYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIGRlZXBHZXQob2JqLCBwYXRoKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEdlbmVyYXRlcyBhIGZ1bmN0aW9uIGZvciBhIGdpdmVuIG9iamVjdCB0aGF0IHJldHVybnMgYSBnaXZlbiBwcm9wZXJ0eS5cbiAgXy5wcm9wZXJ0eU9mID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKXt9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24ocGF0aCkge1xuICAgICAgcmV0dXJuICFfLmlzQXJyYXkocGF0aCkgPyBvYmpbcGF0aF0gOiBkZWVwR2V0KG9iaiwgcGF0aCk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgcHJlZGljYXRlIGZvciBjaGVja2luZyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2ZcbiAgLy8gYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8ubWF0Y2hlciA9IF8ubWF0Y2hlcyA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gICAgYXR0cnMgPSBfLmV4dGVuZE93bih7fSwgYXR0cnMpO1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBfLmlzTWF0Y2gob2JqLCBhdHRycyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSdW4gYSBmdW5jdGlvbiAqKm4qKiB0aW1lcy5cbiAgXy50aW1lcyA9IGZ1bmN0aW9uKG4sIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIGFjY3VtID0gQXJyYXkoTWF0aC5tYXgoMCwgbikpO1xuICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgMSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIGFjY3VtW2ldID0gaXRlcmF0ZWUoaSk7XG4gICAgcmV0dXJuIGFjY3VtO1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXggKGluY2x1c2l2ZSkuXG4gIF8ucmFuZG9tID0gZnVuY3Rpb24obWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID09IG51bGwpIHtcbiAgICAgIG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuICAgIHJldHVybiBtaW4gKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpO1xuICB9O1xuXG4gIC8vIEEgKHBvc3NpYmx5IGZhc3Rlcikgd2F5IHRvIGdldCB0aGUgY3VycmVudCB0aW1lc3RhbXAgYXMgYW4gaW50ZWdlci5cbiAgXy5ub3cgPSBEYXRlLm5vdyB8fCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH07XG5cbiAgLy8gTGlzdCBvZiBIVE1MIGVudGl0aWVzIGZvciBlc2NhcGluZy5cbiAgdmFyIGVzY2FwZU1hcCA9IHtcbiAgICAnJic6ICcmYW1wOycsXG4gICAgJzwnOiAnJmx0OycsXG4gICAgJz4nOiAnJmd0OycsXG4gICAgJ1wiJzogJyZxdW90OycsXG4gICAgXCInXCI6ICcmI3gyNzsnLFxuICAgICdgJzogJyYjeDYwOydcbiAgfTtcbiAgdmFyIHVuZXNjYXBlTWFwID0gXy5pbnZlcnQoZXNjYXBlTWFwKTtcblxuICAvLyBGdW5jdGlvbnMgZm9yIGVzY2FwaW5nIGFuZCB1bmVzY2FwaW5nIHN0cmluZ3MgdG8vZnJvbSBIVE1MIGludGVycG9sYXRpb24uXG4gIHZhciBjcmVhdGVFc2NhcGVyID0gZnVuY3Rpb24obWFwKSB7XG4gICAgdmFyIGVzY2FwZXIgPSBmdW5jdGlvbihtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hcFttYXRjaF07XG4gICAgfTtcbiAgICAvLyBSZWdleGVzIGZvciBpZGVudGlmeWluZyBhIGtleSB0aGF0IG5lZWRzIHRvIGJlIGVzY2FwZWQuXG4gICAgdmFyIHNvdXJjZSA9ICcoPzonICsgXy5rZXlzKG1hcCkuam9pbignfCcpICsgJyknO1xuICAgIHZhciB0ZXN0UmVnZXhwID0gUmVnRXhwKHNvdXJjZSk7XG4gICAgdmFyIHJlcGxhY2VSZWdleHAgPSBSZWdFeHAoc291cmNlLCAnZycpO1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHN0cmluZyA9PSBudWxsID8gJycgOiAnJyArIHN0cmluZztcbiAgICAgIHJldHVybiB0ZXN0UmVnZXhwLnRlc3Qoc3RyaW5nKSA/IHN0cmluZy5yZXBsYWNlKHJlcGxhY2VSZWdleHAsIGVzY2FwZXIpIDogc3RyaW5nO1xuICAgIH07XG4gIH07XG4gIF8uZXNjYXBlID0gY3JlYXRlRXNjYXBlcihlc2NhcGVNYXApO1xuICBfLnVuZXNjYXBlID0gY3JlYXRlRXNjYXBlcih1bmVzY2FwZU1hcCk7XG5cbiAgLy8gVHJhdmVyc2VzIHRoZSBjaGlsZHJlbiBvZiBgb2JqYCBhbG9uZyBgcGF0aGAuIElmIGEgY2hpbGQgaXMgYSBmdW5jdGlvbiwgaXRcbiAgLy8gaXMgaW52b2tlZCB3aXRoIGl0cyBwYXJlbnQgYXMgY29udGV4dC4gUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpbmFsXG4gIC8vIGNoaWxkLCBvciBgZmFsbGJhY2tgIGlmIGFueSBjaGlsZCBpcyB1bmRlZmluZWQuXG4gIF8ucmVzdWx0ID0gZnVuY3Rpb24ob2JqLCBwYXRoLCBmYWxsYmFjaykge1xuICAgIGlmICghXy5pc0FycmF5KHBhdGgpKSBwYXRoID0gW3BhdGhdO1xuICAgIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDtcbiAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgcmV0dXJuIF8uaXNGdW5jdGlvbihmYWxsYmFjaykgPyBmYWxsYmFjay5jYWxsKG9iaikgOiBmYWxsYmFjaztcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3AgPSBvYmogPT0gbnVsbCA/IHZvaWQgMCA6IG9ialtwYXRoW2ldXTtcbiAgICAgIGlmIChwcm9wID09PSB2b2lkIDApIHtcbiAgICAgICAgcHJvcCA9IGZhbGxiYWNrO1xuICAgICAgICBpID0gbGVuZ3RoOyAvLyBFbnN1cmUgd2UgZG9uJ3QgY29udGludWUgaXRlcmF0aW5nLlxuICAgICAgfVxuICAgICAgb2JqID0gXy5pc0Z1bmN0aW9uKHByb3ApID8gcHJvcC5jYWxsKG9iaikgOiBwcm9wO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGludGVnZXIgaWQgKHVuaXF1ZSB3aXRoaW4gdGhlIGVudGlyZSBjbGllbnQgc2Vzc2lvbikuXG4gIC8vIFVzZWZ1bCBmb3IgdGVtcG9yYXJ5IERPTSBpZHMuXG4gIHZhciBpZENvdW50ZXIgPSAwO1xuICBfLnVuaXF1ZUlkID0gZnVuY3Rpb24ocHJlZml4KSB7XG4gICAgdmFyIGlkID0gKytpZENvdW50ZXIgKyAnJztcbiAgICByZXR1cm4gcHJlZml4ID8gcHJlZml4ICsgaWQgOiBpZDtcbiAgfTtcblxuICAvLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRlbGltaXRlcnMsIGNoYW5nZSB0aGVcbiAgLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICBfLnRlbXBsYXRlU2V0dGluZ3MgPSB7XG4gICAgZXZhbHVhdGU6IC88JShbXFxzXFxTXSs/KSU+L2csXG4gICAgaW50ZXJwb2xhdGU6IC88JT0oW1xcc1xcU10rPyklPi9nLFxuICAgIGVzY2FwZTogLzwlLShbXFxzXFxTXSs/KSU+L2dcbiAgfTtcblxuICAvLyBXaGVuIGN1c3RvbWl6aW5nIGB0ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuXG4gIC8vIGludGVycG9sYXRpb24sIGV2YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25lIHRoYXQgaXNcbiAgLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2guXG4gIHZhciBub01hdGNoID0gLyguKV4vO1xuXG4gIC8vIENlcnRhaW4gY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28gdGhhdCB0aGV5IGNhbiBiZSBwdXQgaW50byBhXG4gIC8vIHN0cmluZyBsaXRlcmFsLlxuICB2YXIgZXNjYXBlcyA9IHtcbiAgICBcIidcIjogXCInXCIsXG4gICAgJ1xcXFwnOiAnXFxcXCcsXG4gICAgJ1xccic6ICdyJyxcbiAgICAnXFxuJzogJ24nLFxuICAgICdcXHUyMDI4JzogJ3UyMDI4JyxcbiAgICAnXFx1MjAyOSc6ICd1MjAyOSdcbiAgfTtcblxuICB2YXIgZXNjYXBlUmVnRXhwID0gL1xcXFx8J3xcXHJ8XFxufFxcdTIwMjh8XFx1MjAyOS9nO1xuXG4gIHZhciBlc2NhcGVDaGFyID0gZnVuY3Rpb24obWF0Y2gpIHtcbiAgICByZXR1cm4gJ1xcXFwnICsgZXNjYXBlc1ttYXRjaF07XG4gIH07XG5cbiAgLy8gSmF2YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi5cbiAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLFxuICAvLyBhbmQgY29ycmVjdGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS5cbiAgLy8gTkI6IGBvbGRTZXR0aW5nc2Agb25seSBleGlzdHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICBfLnRlbXBsYXRlID0gZnVuY3Rpb24odGV4dCwgc2V0dGluZ3MsIG9sZFNldHRpbmdzKSB7XG4gICAgaWYgKCFzZXR0aW5ncyAmJiBvbGRTZXR0aW5ncykgc2V0dGluZ3MgPSBvbGRTZXR0aW5ncztcbiAgICBzZXR0aW5ncyA9IF8uZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfLnRlbXBsYXRlU2V0dGluZ3MpO1xuXG4gICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uXG4gICAgdmFyIG1hdGNoZXIgPSBSZWdFeHAoW1xuICAgICAgKHNldHRpbmdzLmVzY2FwZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmV2YWx1YXRlIHx8IG5vTWF0Y2gpLnNvdXJjZVxuICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTtcblxuICAgIC8vIENvbXBpbGUgdGhlIHRlbXBsYXRlIHNvdXJjZSwgZXNjYXBpbmcgc3RyaW5nIGxpdGVyYWxzIGFwcHJvcHJpYXRlbHkuXG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgc291cmNlID0gXCJfX3ArPSdcIjtcbiAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHtcbiAgICAgIHNvdXJjZSArPSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UoZXNjYXBlUmVnRXhwLCBlc2NhcGVDaGFyKTtcbiAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4gICAgICBpZiAoZXNjYXBlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgZXNjYXBlICsgXCIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcXG4nXCI7XG4gICAgICB9IGVsc2UgaWYgKGludGVycG9sYXRlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgaW50ZXJwb2xhdGUgKyBcIikpPT1udWxsPycnOl9fdCkrXFxuJ1wiO1xuICAgICAgfSBlbHNlIGlmIChldmFsdWF0ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInO1xcblwiICsgZXZhbHVhdGUgKyBcIlxcbl9fcCs9J1wiO1xuICAgICAgfVxuXG4gICAgICAvLyBBZG9iZSBWTXMgbmVlZCB0aGUgbWF0Y2ggcmV0dXJuZWQgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBvZmZzZXQuXG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfSk7XG4gICAgc291cmNlICs9IFwiJztcXG5cIjtcblxuICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuXG4gICAgaWYgKCFzZXR0aW5ncy52YXJpYWJsZSkgc291cmNlID0gJ3dpdGgob2JqfHx7fSl7XFxuJyArIHNvdXJjZSArICd9XFxuJztcblxuICAgIHNvdXJjZSA9IFwidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLFwiICtcbiAgICAgIFwicHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcXG5cIiArXG4gICAgICBzb3VyY2UgKyAncmV0dXJuIF9fcDtcXG4nO1xuXG4gICAgdmFyIHJlbmRlcjtcbiAgICB0cnkge1xuICAgICAgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBfKTtcbiAgICB9O1xuXG4gICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLlxuICAgIHZhciBhcmd1bWVudCA9IHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonO1xuICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsgYXJndW1lbnQgKyAnKXtcXG4nICsgc291cmNlICsgJ30nO1xuXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9O1xuXG4gIC8vIEFkZCBhIFwiY2hhaW5cIiBmdW5jdGlvbi4gU3RhcnQgY2hhaW5pbmcgYSB3cmFwcGVkIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLmNoYWluID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGluc3RhbmNlID0gXyhvYmopO1xuICAgIGluc3RhbmNlLl9jaGFpbiA9IHRydWU7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xuXG4gIC8vIE9PUFxuICAvLyAtLS0tLS0tLS0tLS0tLS1cbiAgLy8gSWYgVW5kZXJzY29yZSBpcyBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgaXQgcmV0dXJucyBhIHdyYXBwZWQgb2JqZWN0IHRoYXRcbiAgLy8gY2FuIGJlIHVzZWQgT08tc3R5bGUuIFRoaXMgd3JhcHBlciBob2xkcyBhbHRlcmVkIHZlcnNpb25zIG9mIGFsbCB0aGVcbiAgLy8gdW5kZXJzY29yZSBmdW5jdGlvbnMuIFdyYXBwZWQgb2JqZWN0cyBtYXkgYmUgY2hhaW5lZC5cblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29udGludWUgY2hhaW5pbmcgaW50ZXJtZWRpYXRlIHJlc3VsdHMuXG4gIHZhciBjaGFpblJlc3VsdCA9IGZ1bmN0aW9uKGluc3RhbmNlLCBvYmopIHtcbiAgICByZXR1cm4gaW5zdGFuY2UuX2NoYWluID8gXyhvYmopLmNoYWluKCkgOiBvYmo7XG4gIH07XG5cbiAgLy8gQWRkIHlvdXIgb3duIGN1c3RvbSBmdW5jdGlvbnMgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLm1peGluID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgXy5lYWNoKF8uZnVuY3Rpb25zKG9iaiksIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHZhciBmdW5jID0gX1tuYW1lXSA9IG9ialtuYW1lXTtcbiAgICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gW3RoaXMuX3dyYXBwZWRdO1xuICAgICAgICBwdXNoLmFwcGx5KGFyZ3MsIGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBmdW5jLmFwcGx5KF8sIGFyZ3MpKTtcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIF87XG4gIH07XG5cbiAgLy8gQWRkIGFsbCBvZiB0aGUgVW5kZXJzY29yZSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIgb2JqZWN0LlxuICBfLm1peGluKF8pO1xuXG4gIC8vIEFkZCBhbGwgbXV0YXRvciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIF8uZWFjaChbJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvYmogPSB0aGlzLl93cmFwcGVkO1xuICAgICAgbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRzKTtcbiAgICAgIGlmICgobmFtZSA9PT0gJ3NoaWZ0JyB8fCBuYW1lID09PSAnc3BsaWNlJykgJiYgb2JqLmxlbmd0aCA9PT0gMCkgZGVsZXRlIG9ialswXTtcbiAgICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBvYmopO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIEFkZCBhbGwgYWNjZXNzb3IgQXJyYXkgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLlxuICBfLmVhY2goWydjb25jYXQnLCAnam9pbicsICdzbGljZSddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBtZXRob2QuYXBwbHkodGhpcy5fd3JhcHBlZCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRXh0cmFjdHMgdGhlIHJlc3VsdCBmcm9tIGEgd3JhcHBlZCBhbmQgY2hhaW5lZCBvYmplY3QuXG4gIF8ucHJvdG90eXBlLnZhbHVlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyYXBwZWQ7XG4gIH07XG5cbiAgLy8gUHJvdmlkZSB1bndyYXBwaW5nIHByb3h5IGZvciBzb21lIG1ldGhvZHMgdXNlZCBpbiBlbmdpbmUgb3BlcmF0aW9uc1xuICAvLyBzdWNoIGFzIGFyaXRobWV0aWMgYW5kIEpTT04gc3RyaW5naWZpY2F0aW9uLlxuICBfLnByb3RvdHlwZS52YWx1ZU9mID0gXy5wcm90b3R5cGUudG9KU09OID0gXy5wcm90b3R5cGUudmFsdWU7XG5cbiAgXy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuX3dyYXBwZWQpO1xuICB9O1xuXG4gIC8vIEFNRCByZWdpc3RyYXRpb24gaGFwcGVucyBhdCB0aGUgZW5kIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQU1EIGxvYWRlcnNcbiAgLy8gdGhhdCBtYXkgbm90IGVuZm9yY2UgbmV4dC10dXJuIHNlbWFudGljcyBvbiBtb2R1bGVzLiBFdmVuIHRob3VnaCBnZW5lcmFsXG4gIC8vIHByYWN0aWNlIGZvciBBTUQgcmVnaXN0cmF0aW9uIGlzIHRvIGJlIGFub255bW91cywgdW5kZXJzY29yZSByZWdpc3RlcnNcbiAgLy8gYXMgYSBuYW1lZCBtb2R1bGUgYmVjYXVzZSwgbGlrZSBqUXVlcnksIGl0IGlzIGEgYmFzZSBsaWJyYXJ5IHRoYXQgaXNcbiAgLy8gcG9wdWxhciBlbm91Z2ggdG8gYmUgYnVuZGxlZCBpbiBhIHRoaXJkIHBhcnR5IGxpYiwgYnV0IG5vdCBiZSBwYXJ0IG9mXG4gIC8vIGFuIEFNRCBsb2FkIHJlcXVlc3QuIFRob3NlIGNhc2VzIGNvdWxkIGdlbmVyYXRlIGFuIGVycm9yIHdoZW4gYW5cbiAgLy8gYW5vbnltb3VzIGRlZmluZSgpIGlzIGNhbGxlZCBvdXRzaWRlIG9mIGEgbG9hZGVyIHJlcXVlc3QuXG4gIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZSgndW5kZXJzY29yZScsIFtdLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBfO1xuICAgIH0pO1xuICB9XG59KCkpO1xuIiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihtb2R1bGUpIHtcblx0aWYgKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XG5cdFx0bW9kdWxlLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKCkge307XG5cdFx0bW9kdWxlLnBhdGhzID0gW107XG5cdFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XG5cdFx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwibG9hZGVkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmw7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJpZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xuXHR9XG5cdHJldHVybiBtb2R1bGU7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgd2luZG93ID0gcmVxdWlyZShcImdsb2JhbC93aW5kb3dcIilcbnZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZShcImlzLWZ1bmN0aW9uXCIpXG52YXIgcGFyc2VIZWFkZXJzID0gcmVxdWlyZShcInBhcnNlLWhlYWRlcnNcIilcbnZhciB4dGVuZCA9IHJlcXVpcmUoXCJ4dGVuZFwiKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVhIUlxuLy8gQWxsb3cgdXNlIG9mIGRlZmF1bHQgaW1wb3J0IHN5bnRheCBpbiBUeXBlU2NyaXB0XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gY3JlYXRlWEhSO1xuY3JlYXRlWEhSLlhNTEh0dHBSZXF1ZXN0ID0gd2luZG93LlhNTEh0dHBSZXF1ZXN0IHx8IG5vb3BcbmNyZWF0ZVhIUi5YRG9tYWluUmVxdWVzdCA9IFwid2l0aENyZWRlbnRpYWxzXCIgaW4gKG5ldyBjcmVhdGVYSFIuWE1MSHR0cFJlcXVlc3QoKSkgPyBjcmVhdGVYSFIuWE1MSHR0cFJlcXVlc3QgOiB3aW5kb3cuWERvbWFpblJlcXVlc3RcblxuZm9yRWFjaEFycmF5KFtcImdldFwiLCBcInB1dFwiLCBcInBvc3RcIiwgXCJwYXRjaFwiLCBcImhlYWRcIiwgXCJkZWxldGVcIl0sIGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgIGNyZWF0ZVhIUlttZXRob2QgPT09IFwiZGVsZXRlXCIgPyBcImRlbFwiIDogbWV0aG9kXSA9IGZ1bmN0aW9uKHVyaSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRQYXJhbXModXJpLCBvcHRpb25zLCBjYWxsYmFjaylcbiAgICAgICAgb3B0aW9ucy5tZXRob2QgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuICAgICAgICByZXR1cm4gX2NyZWF0ZVhIUihvcHRpb25zKVxuICAgIH1cbn0pXG5cbmZ1bmN0aW9uIGZvckVhY2hBcnJheShhcnJheSwgaXRlcmF0b3IpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGFycmF5W2ldKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNFbXB0eShvYmope1xuICAgIGZvcih2YXIgaSBpbiBvYmope1xuICAgICAgICBpZihvYmouaGFzT3duUHJvcGVydHkoaSkpIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBpbml0UGFyYW1zKHVyaSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICB2YXIgcGFyYW1zID0gdXJpXG5cbiAgICBpZiAoaXNGdW5jdGlvbihvcHRpb25zKSkge1xuICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnNcbiAgICAgICAgaWYgKHR5cGVvZiB1cmkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IHt1cmk6dXJpfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW1zID0geHRlbmQob3B0aW9ucywge3VyaTogdXJpfSlcbiAgICB9XG5cbiAgICBwYXJhbXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHJldHVybiBwYXJhbXNcbn1cblxuZnVuY3Rpb24gY3JlYXRlWEhSKHVyaSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICBvcHRpb25zID0gaW5pdFBhcmFtcyh1cmksIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAgIHJldHVybiBfY3JlYXRlWEhSKG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVYSFIob3B0aW9ucykge1xuICAgIGlmKHR5cGVvZiBvcHRpb25zLmNhbGxiYWNrID09PSBcInVuZGVmaW5lZFwiKXtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2FsbGJhY2sgYXJndW1lbnQgbWlzc2luZ1wiKVxuICAgIH1cblxuICAgIHZhciBjYWxsZWQgPSBmYWxzZVxuICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uIGNiT25jZShlcnIsIHJlc3BvbnNlLCBib2R5KXtcbiAgICAgICAgaWYoIWNhbGxlZCl7XG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlXG4gICAgICAgICAgICBvcHRpb25zLmNhbGxiYWNrKGVyciwgcmVzcG9uc2UsIGJvZHkpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkeXN0YXRlY2hhbmdlKCkge1xuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQobG9hZEZ1bmMsIDApXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRCb2R5KCkge1xuICAgICAgICAvLyBDaHJvbWUgd2l0aCByZXF1ZXN0VHlwZT1ibG9iIHRocm93cyBlcnJvcnMgYXJyb3VuZCB3aGVuIGV2ZW4gdGVzdGluZyBhY2Nlc3MgdG8gcmVzcG9uc2VUZXh0XG4gICAgICAgIHZhciBib2R5ID0gdW5kZWZpbmVkXG5cbiAgICAgICAgaWYgKHhoci5yZXNwb25zZSkge1xuICAgICAgICAgICAgYm9keSA9IHhoci5yZXNwb25zZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYm9keSA9IHhoci5yZXNwb25zZVRleHQgfHwgZ2V0WG1sKHhocilcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0pzb24pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYm9keSA9IEpTT04ucGFyc2UoYm9keSlcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYm9keVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVycm9yRnVuYyhldnQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRUaW1lcilcbiAgICAgICAgaWYoIShldnQgaW5zdGFuY2VvZiBFcnJvcikpe1xuICAgICAgICAgICAgZXZ0ID0gbmV3IEVycm9yKFwiXCIgKyAoZXZ0IHx8IFwiVW5rbm93biBYTUxIdHRwUmVxdWVzdCBFcnJvclwiKSApXG4gICAgICAgIH1cbiAgICAgICAgZXZ0LnN0YXR1c0NvZGUgPSAwXG4gICAgICAgIHJldHVybiBjYWxsYmFjayhldnQsIGZhaWx1cmVSZXNwb25zZSlcbiAgICB9XG5cbiAgICAvLyB3aWxsIGxvYWQgdGhlIGRhdGEgJiBwcm9jZXNzIHRoZSByZXNwb25zZSBpbiBhIHNwZWNpYWwgcmVzcG9uc2Ugb2JqZWN0XG4gICAgZnVuY3Rpb24gbG9hZEZ1bmMoKSB7XG4gICAgICAgIGlmIChhYm9ydGVkKSByZXR1cm5cbiAgICAgICAgdmFyIHN0YXR1c1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dFRpbWVyKVxuICAgICAgICBpZihvcHRpb25zLnVzZVhEUiAmJiB4aHIuc3RhdHVzPT09dW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvL0lFOCBDT1JTIEdFVCBzdWNjZXNzZnVsIHJlc3BvbnNlIGRvZXNuJ3QgaGF2ZSBhIHN0YXR1cyBmaWVsZCwgYnV0IGJvZHkgaXMgZmluZVxuICAgICAgICAgICAgc3RhdHVzID0gMjAwXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0dXMgPSAoeGhyLnN0YXR1cyA9PT0gMTIyMyA/IDIwNCA6IHhoci5zdGF0dXMpXG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlc3BvbnNlID0gZmFpbHVyZVJlc3BvbnNlXG4gICAgICAgIHZhciBlcnIgPSBudWxsXG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gMCl7XG4gICAgICAgICAgICByZXNwb25zZSA9IHtcbiAgICAgICAgICAgICAgICBib2R5OiBnZXRCb2R5KCksXG4gICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogc3RhdHVzLFxuICAgICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgICAgICAgIHVybDogdXJpLFxuICAgICAgICAgICAgICAgIHJhd1JlcXVlc3Q6IHhoclxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycyl7IC8vcmVtZW1iZXIgeGhyIGNhbiBpbiBmYWN0IGJlIFhEUiBmb3IgQ09SUyBpbiBJRVxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBwYXJzZUhlYWRlcnMoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyID0gbmV3IEVycm9yKFwiSW50ZXJuYWwgWE1MSHR0cFJlcXVlc3QgRXJyb3JcIilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyLCByZXNwb25zZSwgcmVzcG9uc2UuYm9keSlcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gb3B0aW9ucy54aHIgfHwgbnVsbFxuXG4gICAgaWYgKCF4aHIpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuY29ycyB8fCBvcHRpb25zLnVzZVhEUikge1xuICAgICAgICAgICAgeGhyID0gbmV3IGNyZWF0ZVhIUi5YRG9tYWluUmVxdWVzdCgpXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgeGhyID0gbmV3IGNyZWF0ZVhIUi5YTUxIdHRwUmVxdWVzdCgpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5XG4gICAgdmFyIGFib3J0ZWRcbiAgICB2YXIgdXJpID0geGhyLnVybCA9IG9wdGlvbnMudXJpIHx8IG9wdGlvbnMudXJsXG4gICAgdmFyIG1ldGhvZCA9IHhoci5tZXRob2QgPSBvcHRpb25zLm1ldGhvZCB8fCBcIkdFVFwiXG4gICAgdmFyIGJvZHkgPSBvcHRpb25zLmJvZHkgfHwgb3B0aW9ucy5kYXRhXG4gICAgdmFyIGhlYWRlcnMgPSB4aHIuaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyB8fCB7fVxuICAgIHZhciBzeW5jID0gISFvcHRpb25zLnN5bmNcbiAgICB2YXIgaXNKc29uID0gZmFsc2VcbiAgICB2YXIgdGltZW91dFRpbWVyXG4gICAgdmFyIGZhaWx1cmVSZXNwb25zZSA9IHtcbiAgICAgICAgYm9keTogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgc3RhdHVzQ29kZTogMCxcbiAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgIHVybDogdXJpLFxuICAgICAgICByYXdSZXF1ZXN0OiB4aHJcbiAgICB9XG5cbiAgICBpZiAoXCJqc29uXCIgaW4gb3B0aW9ucyAmJiBvcHRpb25zLmpzb24gIT09IGZhbHNlKSB7XG4gICAgICAgIGlzSnNvbiA9IHRydWVcbiAgICAgICAgaGVhZGVyc1tcImFjY2VwdFwiXSB8fCBoZWFkZXJzW1wiQWNjZXB0XCJdIHx8IChoZWFkZXJzW1wiQWNjZXB0XCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCIpIC8vRG9uJ3Qgb3ZlcnJpZGUgZXhpc3RpbmcgYWNjZXB0IGhlYWRlciBkZWNsYXJlZCBieSB1c2VyXG4gICAgICAgIGlmIChtZXRob2QgIT09IFwiR0VUXCIgJiYgbWV0aG9kICE9PSBcIkhFQURcIikge1xuICAgICAgICAgICAgaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSB8fCBoZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdIHx8IChoZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCIpIC8vRG9uJ3Qgb3ZlcnJpZGUgZXhpc3RpbmcgYWNjZXB0IGhlYWRlciBkZWNsYXJlZCBieSB1c2VyXG4gICAgICAgICAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5qc29uID09PSB0cnVlID8gYm9keSA6IG9wdGlvbnMuanNvbilcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSByZWFkeXN0YXRlY2hhbmdlXG4gICAgeGhyLm9ubG9hZCA9IGxvYWRGdW5jXG4gICAgeGhyLm9uZXJyb3IgPSBlcnJvckZ1bmNcbiAgICAvLyBJRTkgbXVzdCBoYXZlIG9ucHJvZ3Jlc3MgYmUgc2V0IHRvIGEgdW5pcXVlIGZ1bmN0aW9uLlxuICAgIHhoci5vbnByb2dyZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBJRSBtdXN0IGRpZVxuICAgIH1cbiAgICB4aHIub25hYm9ydCA9IGZ1bmN0aW9uKCl7XG4gICAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICB4aHIub250aW1lb3V0ID0gZXJyb3JGdW5jXG4gICAgeGhyLm9wZW4obWV0aG9kLCB1cmksICFzeW5jLCBvcHRpb25zLnVzZXJuYW1lLCBvcHRpb25zLnBhc3N3b3JkKVxuICAgIC8vaGFzIHRvIGJlIGFmdGVyIG9wZW5cbiAgICBpZighc3luYykge1xuICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gISFvcHRpb25zLndpdGhDcmVkZW50aWFsc1xuICAgIH1cbiAgICAvLyBDYW5ub3Qgc2V0IHRpbWVvdXQgd2l0aCBzeW5jIHJlcXVlc3RcbiAgICAvLyBub3Qgc2V0dGluZyB0aW1lb3V0IG9uIHRoZSB4aHIgb2JqZWN0LCBiZWNhdXNlIG9mIG9sZCB3ZWJraXRzIGV0Yy4gbm90IGhhbmRsaW5nIHRoYXQgY29ycmVjdGx5XG4gICAgLy8gYm90aCBucG0ncyByZXF1ZXN0IGFuZCBqcXVlcnkgMS54IHVzZSB0aGlzIGtpbmQgb2YgdGltZW91dCwgc28gdGhpcyBpcyBiZWluZyBjb25zaXN0ZW50XG4gICAgaWYgKCFzeW5jICYmIG9wdGlvbnMudGltZW91dCA+IDAgKSB7XG4gICAgICAgIHRpbWVvdXRUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGlmIChhYm9ydGVkKSByZXR1cm5cbiAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlLy9JRTkgbWF5IHN0aWxsIGNhbGwgcmVhZHlzdGF0ZWNoYW5nZVxuICAgICAgICAgICAgeGhyLmFib3J0KFwidGltZW91dFwiKVxuICAgICAgICAgICAgdmFyIGUgPSBuZXcgRXJyb3IoXCJYTUxIdHRwUmVxdWVzdCB0aW1lb3V0XCIpXG4gICAgICAgICAgICBlLmNvZGUgPSBcIkVUSU1FRE9VVFwiXG4gICAgICAgICAgICBlcnJvckZ1bmMoZSlcbiAgICAgICAgfSwgb3B0aW9ucy50aW1lb3V0IClcbiAgICB9XG5cbiAgICBpZiAoeGhyLnNldFJlcXVlc3RIZWFkZXIpIHtcbiAgICAgICAgZm9yKGtleSBpbiBoZWFkZXJzKXtcbiAgICAgICAgICAgIGlmKGhlYWRlcnMuaGFzT3duUHJvcGVydHkoa2V5KSl7XG4gICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoa2V5LCBoZWFkZXJzW2tleV0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaGVhZGVycyAmJiAhaXNFbXB0eShvcHRpb25zLmhlYWRlcnMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkhlYWRlcnMgY2Fubm90IGJlIHNldCBvbiBhbiBYRG9tYWluUmVxdWVzdCBvYmplY3RcIilcbiAgICB9XG5cbiAgICBpZiAoXCJyZXNwb25zZVR5cGVcIiBpbiBvcHRpb25zKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBvcHRpb25zLnJlc3BvbnNlVHlwZVxuICAgIH1cblxuICAgIGlmIChcImJlZm9yZVNlbmRcIiBpbiBvcHRpb25zICYmXG4gICAgICAgIHR5cGVvZiBvcHRpb25zLmJlZm9yZVNlbmQgPT09IFwiZnVuY3Rpb25cIlxuICAgICkge1xuICAgICAgICBvcHRpb25zLmJlZm9yZVNlbmQoeGhyKVxuICAgIH1cblxuICAgIC8vIE1pY3Jvc29mdCBFZGdlIGJyb3dzZXIgc2VuZHMgXCJ1bmRlZmluZWRcIiB3aGVuIHNlbmQgaXMgY2FsbGVkIHdpdGggdW5kZWZpbmVkIHZhbHVlLlxuICAgIC8vIFhNTEh0dHBSZXF1ZXN0IHNwZWMgc2F5cyB0byBwYXNzIG51bGwgYXMgYm9keSB0byBpbmRpY2F0ZSBubyBib2R5XG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9uYXVndHVyL3hoci9pc3N1ZXMvMTAwLlxuICAgIHhoci5zZW5kKGJvZHkgfHwgbnVsbClcblxuICAgIHJldHVybiB4aHJcblxuXG59XG5cbmZ1bmN0aW9uIGdldFhtbCh4aHIpIHtcbiAgICAvLyB4aHIucmVzcG9uc2VYTUwgd2lsbCB0aHJvdyBFeGNlcHRpb24gXCJJbnZhbGlkU3RhdGVFcnJvclwiIG9yIFwiRE9NRXhjZXB0aW9uXCJcbiAgICAvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1hNTEh0dHBSZXF1ZXN0L3Jlc3BvbnNlWE1MLlxuICAgIHRyeSB7XG4gICAgICAgIGlmICh4aHIucmVzcG9uc2VUeXBlID09PSBcImRvY3VtZW50XCIpIHtcbiAgICAgICAgICAgIHJldHVybiB4aHIucmVzcG9uc2VYTUxcbiAgICAgICAgfVxuICAgICAgICB2YXIgZmlyZWZveEJ1Z1Rha2VuRWZmZWN0ID0geGhyLnJlc3BvbnNlWE1MICYmIHhoci5yZXNwb25zZVhNTC5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWUgPT09IFwicGFyc2VyZXJyb3JcIlxuICAgICAgICBpZiAoeGhyLnJlc3BvbnNlVHlwZSA9PT0gXCJcIiAmJiAhZmlyZWZveEJ1Z1Rha2VuRWZmZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4geGhyLnJlc3BvbnNlWE1MXG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7fVxuXG4gICAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gbm9vcCgpIHt9XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGV4dGVuZFxuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5mdW5jdGlvbiBleHRlbmQoKSB7XG4gICAgdmFyIHRhcmdldCA9IHt9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldXG5cbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldFxufVxuIiwiLyogKGlnbm9yZWQpICovIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file